Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.arcconfig2
-rw-r--r--.gitmodules4
-rw-r--r--CMakeLists.txt127
-rwxr-xr-xbuild_files/build_environment/install_deps.sh32
-rw-r--r--build_files/buildbot/config/blender_linux.cmake2
-rw-r--r--build_files/cmake/Modules/FindGLEW.cmake12
-rw-r--r--build_files/cmake/Modules/FindSndFile.cmake40
-rw-r--r--build_files/cmake/macros.cmake20
-rw-r--r--build_files/cmake/platform/platform_apple.cmake12
-rw-r--r--build_files/cmake/platform/platform_unix.cmake2
-rw-r--r--build_files/cmake/platform/platform_win32.cmake13
-rw-r--r--doc/doxygen/doxygen.source.h4
-rw-r--r--doc/python_api/examples/gpu.offscreen.1.py2
-rw-r--r--doc/python_api/sphinx_doc_gen.py6
-rw-r--r--extern/CMakeLists.txt5
-rw-r--r--extern/audaspace/AUTHORS16
-rw-r--r--extern/audaspace/CHANGES115
-rw-r--r--extern/audaspace/CMakeLists.txt986
-rw-r--r--extern/audaspace/INSTALL107
-rw-r--r--extern/audaspace/LICENSE202
-rw-r--r--extern/audaspace/README.md47
-rw-r--r--extern/audaspace/bindings/C/AUD_Device.cpp336
-rw-r--r--extern/audaspace/bindings/C/AUD_Device.h258
-rw-r--r--extern/audaspace/bindings/C/AUD_DynamicMusic.cpp144
-rw-r--r--extern/audaspace/bindings/C/AUD_DynamicMusic.h145
-rw-r--r--extern/audaspace/bindings/C/AUD_HRTF.cpp50
-rw-r--r--extern/audaspace/bindings/C/AUD_HRTF.h48
-rw-r--r--extern/audaspace/bindings/C/AUD_Handle.cpp384
-rw-r--r--extern/audaspace/bindings/C/AUD_Handle.h308
-rw-r--r--extern/audaspace/bindings/C/AUD_ImpulseResponse.cpp44
-rw-r--r--extern/audaspace/bindings/C/AUD_ImpulseResponse.h40
-rw-r--r--extern/audaspace/bindings/C/AUD_PlaybackManager.cpp94
-rw-r--r--extern/audaspace/bindings/C/AUD_PlaybackManager.h103
-rw-r--r--extern/audaspace/bindings/C/AUD_Sequence.cpp315
-rw-r--r--extern/audaspace/bindings/C/AUD_Sequence.h338
-rw-r--r--extern/audaspace/bindings/C/AUD_Sound.cpp709
-rw-r--r--extern/audaspace/bindings/C/AUD_Sound.h370
-rw-r--r--extern/audaspace/bindings/C/AUD_Source.cpp84
-rw-r--r--extern/audaspace/bindings/C/AUD_Source.h84
-rw-r--r--extern/audaspace/bindings/C/AUD_Special.cpp420
-rw-r--r--extern/audaspace/bindings/C/AUD_Special.h138
-rw-r--r--extern/audaspace/bindings/C/AUD_ThreadPool.cpp42
-rw-r--r--extern/audaspace/bindings/C/AUD_ThreadPool.h40
-rw-r--r--extern/audaspace/bindings/C/AUD_Types.h179
-rw-r--r--extern/audaspace/bindings/doc/conf.py.in261
-rw-r--r--extern/audaspace/bindings/doc/device.rst7
-rw-r--r--extern/audaspace/bindings/doc/handle.rst7
-rw-r--r--extern/audaspace/bindings/doc/index.rst35
-rw-r--r--extern/audaspace/bindings/doc/sequence.rst7
-rw-r--r--extern/audaspace/bindings/doc/sequence_entry.rst7
-rw-r--r--extern/audaspace/bindings/doc/sound.rst7
-rw-r--r--extern/audaspace/bindings/doc/tutorials.rst166
-rw-r--r--extern/audaspace/bindings/python/PyAPI.cpp231
-rw-r--r--extern/audaspace/bindings/python/PyAPI.h45
-rw-r--r--extern/audaspace/bindings/python/PyDevice.cpp785
-rw-r--r--extern/audaspace/bindings/python/PyDevice.h33
-rw-r--r--extern/audaspace/bindings/python/PyDynamicMusic.cpp467
-rw-r--r--extern/audaspace/bindings/python/PyDynamicMusic.h33
-rw-r--r--extern/audaspace/bindings/python/PyHRTF.cpp247
-rw-r--r--extern/audaspace/bindings/python/PyHRTF.h33
-rw-r--r--extern/audaspace/bindings/python/PyHandle.cpp1126
-rw-r--r--extern/audaspace/bindings/python/PyHandle.h33
-rw-r--r--extern/audaspace/bindings/python/PyImpulseResponse.cpp137
-rw-r--r--extern/audaspace/bindings/python/PyImpulseResponse.h33
-rw-r--r--extern/audaspace/bindings/python/PyPlaybackManager.cpp389
-rw-r--r--extern/audaspace/bindings/python/PyPlaybackManager.h33
-rw-r--r--extern/audaspace/bindings/python/PySequence.cpp655
-rw-r--r--extern/audaspace/bindings/python/PySequence.h33
-rw-r--r--extern/audaspace/bindings/python/PySequenceEntry.cpp740
-rw-r--r--extern/audaspace/bindings/python/PySequenceEntry.h33
-rw-r--r--extern/audaspace/bindings/python/PySound.cpp1966
-rw-r--r--extern/audaspace/bindings/python/PySound.h33
-rw-r--r--extern/audaspace/bindings/python/PySource.cpp260
-rw-r--r--extern/audaspace/bindings/python/PySource.h33
-rw-r--r--extern/audaspace/bindings/python/PyThreadPool.cpp134
-rw-r--r--extern/audaspace/bindings/python/PyThreadPool.h33
-rw-r--r--extern/audaspace/bindings/python/examples/binaural.py13
-rw-r--r--extern/audaspace/bindings/python/examples/convolution.py10
-rw-r--r--extern/audaspace/bindings/python/examples/dynamicmusic.py20
-rw-r--r--extern/audaspace/bindings/python/examples/playbackmanager.py27
-rw-r--r--extern/audaspace/bindings/python/examples/player.py7
-rw-r--r--extern/audaspace/bindings/python/examples/randomSounds.py21
-rw-r--r--extern/audaspace/bindings/python/examples/simple.py7
-rw-r--r--extern/audaspace/bindings/python/examples/siren.py19
-rw-r--r--extern/audaspace/bindings/python/examples/siren2.py23
-rw-r--r--extern/audaspace/bindings/python/examples/tetris.py66
-rw-r--r--extern/audaspace/bindings/python/examples/tetris2.py64
-rw-r--r--extern/audaspace/bindings/python/examples/tetris3.py63
-rw-r--r--extern/audaspace/bindings/python/setup.py.in61
-rw-r--r--extern/audaspace/blender_config.cmake26
-rw-r--r--extern/audaspace/config/Audaspace.h.in131
-rw-r--r--extern/audaspace/include/Exception.h185
-rw-r--r--extern/audaspace/include/IReader.h92
-rw-r--r--extern/audaspace/include/ISound.h57
-rw-r--r--extern/audaspace/include/devices/DefaultSynchronizer.h44
-rw-r--r--extern/audaspace/include/devices/DeviceManager.h129
-rw-r--r--extern/audaspace/include/devices/I3DDevice.h142
-rw-r--r--extern/audaspace/include/devices/I3DHandle.h232
-rw-r--r--extern/audaspace/include/devices/IDevice.h123
-rw-r--r--extern/audaspace/include/devices/IDeviceFactory.h72
-rw-r--r--extern/audaspace/include/devices/IHandle.h189
-rw-r--r--extern/audaspace/include/devices/ISynchronizer.h92
-rw-r--r--extern/audaspace/include/devices/NULLDevice.h96
-rw-r--r--extern/audaspace/include/devices/ReadDevice.h82
-rw-r--r--extern/audaspace/include/devices/SoftwareDevice.h368
-rw-r--r--extern/audaspace/include/file/File.h74
-rw-r--r--extern/audaspace/include/file/FileManager.h95
-rw-r--r--extern/audaspace/include/file/FileWriter.h78
-rw-r--r--extern/audaspace/include/file/IFileInput.h60
-rw-r--r--extern/audaspace/include/file/IFileOutput.h52
-rw-r--r--extern/audaspace/include/file/IWriter.h89
-rw-r--r--extern/audaspace/include/fx/ADSR.h121
-rw-r--r--extern/audaspace/include/fx/ADSRReader.h101
-rw-r--r--extern/audaspace/include/fx/Accumulator.h79
-rw-r--r--extern/audaspace/include/fx/BaseIIRFilterReader.h133
-rw-r--r--extern/audaspace/include/fx/BinauralReader.h223
-rw-r--r--extern/audaspace/include/fx/BinauralSound.h119
-rw-r--r--extern/audaspace/include/fx/Butterworth.h48
-rw-r--r--extern/audaspace/include/fx/ButterworthCalculator.h55
-rw-r--r--extern/audaspace/include/fx/CallbackIIRFilterReader.h88
-rw-r--r--extern/audaspace/include/fx/Convolver.h177
-rw-r--r--extern/audaspace/include/fx/ConvolverReader.h198
-rw-r--r--extern/audaspace/include/fx/ConvolverSound.h100
-rw-r--r--extern/audaspace/include/fx/Delay.h60
-rw-r--r--extern/audaspace/include/fx/DelayReader.h63
-rw-r--r--extern/audaspace/include/fx/DynamicIIRFilter.h54
-rw-r--r--extern/audaspace/include/fx/DynamicIIRFilterReader.h60
-rw-r--r--extern/audaspace/include/fx/DynamicMusic.h235
-rw-r--r--extern/audaspace/include/fx/Effect.h76
-rw-r--r--extern/audaspace/include/fx/EffectReader.h68
-rw-r--r--extern/audaspace/include/fx/Envelope.h93
-rw-r--r--extern/audaspace/include/fx/FFTConvolver.h196
-rw-r--r--extern/audaspace/include/fx/Fader.h87
-rw-r--r--extern/audaspace/include/fx/FaderReader.h77
-rw-r--r--extern/audaspace/include/fx/HRTF.h108
-rw-r--r--extern/audaspace/include/fx/HRTFLoader.h99
-rw-r--r--extern/audaspace/include/fx/Highpass.h49
-rw-r--r--extern/audaspace/include/fx/HighpassCalculator.h61
-rw-r--r--extern/audaspace/include/fx/IDynamicIIRFilterCalculator.h50
-rw-r--r--extern/audaspace/include/fx/IIRFilter.h63
-rw-r--r--extern/audaspace/include/fx/IIRFilterReader.h70
-rw-r--r--extern/audaspace/include/fx/ImpulseResponse.h108
-rw-r--r--extern/audaspace/include/fx/Limiter.h73
-rw-r--r--extern/audaspace/include/fx/LimiterReader.h65
-rw-r--r--extern/audaspace/include/fx/Loop.h62
-rw-r--r--extern/audaspace/include/fx/LoopReader.h65
-rw-r--r--extern/audaspace/include/fx/Lowpass.h49
-rw-r--r--extern/audaspace/include/fx/LowpassCalculator.h61
-rw-r--r--extern/audaspace/include/fx/MutableReader.h71
-rw-r--r--extern/audaspace/include/fx/MutableSound.h58
-rw-r--r--extern/audaspace/include/fx/Pitch.h55
-rw-r--r--extern/audaspace/include/fx/PitchReader.h67
-rw-r--r--extern/audaspace/include/fx/PlaybackCategory.h127
-rw-r--r--extern/audaspace/include/fx/PlaybackManager.h156
-rw-r--r--extern/audaspace/include/fx/Reverse.h50
-rw-r--r--extern/audaspace/include/fx/ReverseReader.h65
-rw-r--r--extern/audaspace/include/fx/SoundList.h110
-rw-r--r--extern/audaspace/include/fx/Source.h109
-rw-r--r--extern/audaspace/include/fx/Sum.h49
-rw-r--r--extern/audaspace/include/fx/Threshold.h78
-rw-r--r--extern/audaspace/include/fx/Volume.h63
-rw-r--r--extern/audaspace/include/fx/VolumeReader.h70
-rw-r--r--extern/audaspace/include/fx/VolumeSound.h74
-rw-r--r--extern/audaspace/include/fx/VolumeStorage.h71
-rw-r--r--extern/audaspace/include/generator/Sawtooth.h66
-rw-r--r--extern/audaspace/include/generator/SawtoothReader.h86
-rw-r--r--extern/audaspace/include/generator/Silence.h48
-rw-r--r--extern/audaspace/include/generator/SilenceReader.h59
-rw-r--r--extern/audaspace/include/generator/Sine.h67
-rw-r--r--extern/audaspace/include/generator/SineReader.h77
-rw-r--r--extern/audaspace/include/generator/Square.h67
-rw-r--r--extern/audaspace/include/generator/SquareReader.h86
-rw-r--r--extern/audaspace/include/generator/Triangle.h67
-rw-r--r--extern/audaspace/include/generator/TriangleReader.h86
-rw-r--r--extern/audaspace/include/plugin/PluginManager.h81
-rw-r--r--extern/audaspace/include/respec/ChannelMapper.h51
-rw-r--r--extern/audaspace/include/respec/ChannelMapperReader.h151
-rw-r--r--extern/audaspace/include/respec/Converter.h51
-rw-r--r--extern/audaspace/include/respec/ConverterFunctions.h377
-rw-r--r--extern/audaspace/include/respec/ConverterReader.h67
-rw-r--r--extern/audaspace/include/respec/JOSResample.h50
-rw-r--r--extern/audaspace/include/respec/JOSResampleReader.h129
-rw-r--r--extern/audaspace/include/respec/LinearResample.h50
-rw-r--r--extern/audaspace/include/respec/LinearResampleReader.h80
-rw-r--r--extern/audaspace/include/respec/Mixer.h123
-rw-r--r--extern/audaspace/include/respec/ResampleReader.h61
-rw-r--r--extern/audaspace/include/respec/Specification.h138
-rw-r--r--extern/audaspace/include/respec/SpecsChanger.h74
-rw-r--r--extern/audaspace/include/sequence/AnimateableProperty.h129
-rw-r--r--extern/audaspace/include/sequence/Double.h60
-rw-r--r--extern/audaspace/include/sequence/DoubleReader.h77
-rw-r--r--extern/audaspace/include/sequence/PingPong.h50
-rw-r--r--extern/audaspace/include/sequence/Sequence.h171
-rw-r--r--extern/audaspace/include/sequence/SequenceData.h215
-rw-r--r--extern/audaspace/include/sequence/SequenceEntry.h315
-rw-r--r--extern/audaspace/include/sequence/SequenceReader.h94
-rw-r--r--extern/audaspace/include/sequence/Superpose.h62
-rw-r--r--extern/audaspace/include/sequence/SuperposeReader.h79
-rw-r--r--extern/audaspace/include/util/Barrier.h78
-rw-r--r--extern/audaspace/include/util/Buffer.h87
-rw-r--r--extern/audaspace/include/util/BufferReader.h76
-rw-r--r--extern/audaspace/include/util/FFTPlan.h120
-rw-r--r--extern/audaspace/include/util/ILockable.h46
-rw-r--r--extern/audaspace/include/util/Math3D.h324
-rw-r--r--extern/audaspace/include/util/StreamBuffer.h85
-rw-r--r--extern/audaspace/include/util/ThreadPool.h119
-rw-r--r--extern/audaspace/plugins/ffmpeg/FFMPEG.cpp63
-rw-r--r--extern/audaspace/plugins/ffmpeg/FFMPEG.h60
-rw-r--r--extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp397
-rw-r--r--extern/audaspace/plugins/ffmpeg/FFMPEGReader.h184
-rw-r--r--extern/audaspace/plugins/ffmpeg/FFMPEGWriter.cpp427
-rw-r--r--extern/audaspace/plugins/ffmpeg/FFMPEGWriter.h145
-rw-r--r--extern/audaspace/plugins/jack/JackDevice.cpp385
-rw-r--r--extern/audaspace/plugins/jack/JackDevice.h204
-rw-r--r--extern/audaspace/plugins/jack/JackLibrary.cpp59
-rw-r--r--extern/audaspace/plugins/jack/JackLibrary.h48
-rw-r--r--extern/audaspace/plugins/jack/JackSymbols.h45
-rw-r--r--extern/audaspace/plugins/jack/JackSynchronizer.cpp58
-rw-r--r--extern/audaspace/plugins/jack/JackSynchronizer.h59
-rw-r--r--extern/audaspace/plugins/libsndfile/SndFile.cpp62
-rw-r--r--extern/audaspace/plugins/libsndfile/SndFile.h60
-rw-r--r--extern/audaspace/plugins/libsndfile/SndFileReader.cpp161
-rw-r--r--extern/audaspace/plugins/libsndfile/SndFileReader.h125
-rw-r--r--extern/audaspace/plugins/libsndfile/SndFileWriter.cpp128
-rw-r--r--extern/audaspace/plugins/libsndfile/SndFileWriter.h84
-rw-r--r--extern/audaspace/plugins/openal/OpenALDevice.cpp1490
-rw-r--r--extern/audaspace/plugins/openal/OpenALDevice.h296
-rw-r--r--extern/audaspace/plugins/openal/OpenALReader.cpp96
-rw-r--r--extern/audaspace/plugins/openal/OpenALReader.h83
-rw-r--r--extern/audaspace/plugins/sdl/SDLDevice.cpp156
-rw-r--r--extern/audaspace/plugins/sdl/SDLDevice.h82
-rw-r--r--extern/audaspace/src/Exception.cpp110
-rw-r--r--extern/audaspace/src/devices/DefaultSynchronizer.cpp49
-rw-r--r--extern/audaspace/src/devices/DeviceManager.cpp117
-rw-r--r--extern/audaspace/src/devices/NULLDevice.cpp193
-rw-r--r--extern/audaspace/src/devices/ReadDevice.cpp69
-rw-r--r--extern/audaspace/src/devices/SoftwareDevice.cpp989
-rw-r--r--extern/audaspace/src/file/File.cpp45
-rw-r--r--extern/audaspace/src/file/FileManager.cpp88
-rw-r--r--extern/audaspace/src/file/FileWriter.cpp95
-rw-r--r--extern/audaspace/src/fx/ADSR.cpp73
-rw-r--r--extern/audaspace/src/fx/ADSRReader.cpp115
-rw-r--r--extern/audaspace/src/fx/Accumulator.cpp54
-rw-r--r--extern/audaspace/src/fx/BaseIIRFilterReader.cpp125
-rw-r--r--extern/audaspace/src/fx/BinauralReader.cpp255
-rw-r--r--extern/audaspace/src/fx/BinauralSound.cpp60
-rw-r--r--extern/audaspace/src/fx/Butterworth.cpp28
-rw-r--r--extern/audaspace/src/fx/ButterworthCalculator.cpp54
-rw-r--r--extern/audaspace/src/fx/CallbackIIRFilterReader.cpp38
-rw-r--r--extern/audaspace/src/fx/Convolver.cpp156
-rw-r--r--extern/audaspace/src/fx/ConvolverReader.cpp203
-rw-r--r--extern/audaspace/src/fx/ConvolverSound.cpp50
-rw-r--r--extern/audaspace/src/fx/Delay.cpp38
-rw-r--r--extern/audaspace/src/fx/DelayReader.cpp87
-rw-r--r--extern/audaspace/src/fx/DynamicIIRFilter.cpp35
-rw-r--r--extern/audaspace/src/fx/DynamicIIRFilterReader.cpp36
-rw-r--r--extern/audaspace/src/fx/DynamicMusic.cpp346
-rw-r--r--extern/audaspace/src/fx/Effect.cpp35
-rw-r--r--extern/audaspace/src/fx/EffectReader.cpp60
-rw-r--r--extern/audaspace/src/fx/Envelope.cpp71
-rw-r--r--extern/audaspace/src/fx/FFTConvolver.cpp214
-rw-r--r--extern/audaspace/src/fx/Fader.cpp49
-rw-r--r--extern/audaspace/src/fx/FaderReader.cpp76
-rw-r--r--extern/audaspace/src/fx/HRTF.cpp122
-rw-r--r--extern/audaspace/src/fx/HRTFLoaderUnix.cpp89
-rw-r--r--extern/audaspace/src/fx/HRTFLoaderWindows.cpp93
-rw-r--r--extern/audaspace/src/fx/Highpass.cpp28
-rw-r--r--extern/audaspace/src/fx/HighpassCalculator.cpp43
-rw-r--r--extern/audaspace/src/fx/IIRFilter.cpp32
-rw-r--r--extern/audaspace/src/fx/IIRFilterReader.cpp53
-rw-r--r--extern/audaspace/src/fx/ImpulseResponse.cpp97
-rw-r--r--extern/audaspace/src/fx/Limiter.cpp45
-rw-r--r--extern/audaspace/src/fx/LimiterReader.cpp139
-rw-r--r--extern/audaspace/src/fx/Loop.cpp38
-rw-r--r--extern/audaspace/src/fx/LoopReader.cpp91
-rw-r--r--extern/audaspace/src/fx/Lowpass.cpp27
-rw-r--r--extern/audaspace/src/fx/LowpassCalculator.cpp43
-rw-r--r--extern/audaspace/src/fx/MutableReader.cpp64
-rw-r--r--extern/audaspace/src/fx/MutableSound.cpp35
-rw-r--r--extern/audaspace/src/fx/Pitch.cpp33
-rw-r--r--extern/audaspace/src/fx/PitchReader.cpp44
-rw-r--r--extern/audaspace/src/fx/PlaybackCategory.cpp144
-rw-r--r--extern/audaspace/src/fx/PlaybackManager.cpp186
-rw-r--r--extern/audaspace/src/fx/Reverse.cpp32
-rw-r--r--extern/audaspace/src/fx/ReverseReader.cpp88
-rw-r--r--extern/audaspace/src/fx/SoundList.cpp84
-rw-r--r--extern/audaspace/src/fx/Source.cpp71
-rw-r--r--extern/audaspace/src/fx/Sum.cpp36
-rw-r--r--extern/audaspace/src/fx/Threshold.cpp54
-rw-r--r--extern/audaspace/src/fx/Volume.cpp41
-rw-r--r--extern/audaspace/src/fx/VolumeReader.cpp60
-rw-r--r--extern/audaspace/src/fx/VolumeSound.cpp45
-rw-r--r--extern/audaspace/src/fx/VolumeStorage.cpp39
-rw-r--r--extern/audaspace/src/generator/Sawtooth.cpp38
-rw-r--r--extern/audaspace/src/generator/SawtoothReader.cpp83
-rw-r--r--extern/audaspace/src/generator/Silence.cpp31
-rw-r--r--extern/audaspace/src/generator/SilenceReader.cpp63
-rw-r--r--extern/audaspace/src/generator/Sine.cpp38
-rw-r--r--extern/audaspace/src/generator/SineReader.cpp75
-rw-r--r--extern/audaspace/src/generator/Square.cpp38
-rw-r--r--extern/audaspace/src/generator/SquareReader.cpp83
-rw-r--r--extern/audaspace/src/generator/Triangle.cpp38
-rw-r--r--extern/audaspace/src/generator/TriangleReader.cpp83
-rw-r--r--extern/audaspace/src/plugin/PluginManagerUnix.cpp.in98
-rw-r--r--extern/audaspace/src/plugin/PluginManagerWindows.cpp.in101
-rw-r--r--extern/audaspace/src/respec/ChannelMapper.cpp35
-rw-r--r--extern/audaspace/src/respec/ChannelMapperReader.cpp379
-rw-r--r--extern/audaspace/src/respec/Converter.cpp38
-rw-r--r--extern/audaspace/src/respec/ConverterFunctions.cpp464
-rw-r--r--extern/audaspace/src/respec/ConverterReader.cpp68
-rw-r--r--extern/audaspace/src/respec/JOSResample.cpp33
-rw-r--r--extern/audaspace/src/respec/JOSResampleReader.cpp383
-rw-r--r--extern/audaspace/src/respec/JOSResampleReaderCoeff.cpp32537
-rw-r--r--extern/audaspace/src/respec/LinearResample.cpp32
-rw-r--r--extern/audaspace/src/respec/LinearResampleReader.cpp174
-rw-r--r--extern/audaspace/src/respec/Mixer.cpp112
-rw-r--r--extern/audaspace/src/respec/ResampleReader.cpp36
-rw-r--r--extern/audaspace/src/respec/SpecsChanger.cpp42
-rw-r--r--extern/audaspace/src/sequence/AnimateableProperty.cpp217
-rw-r--r--extern/audaspace/src/sequence/Double.cpp35
-rw-r--r--extern/audaspace/src/sequence/DoubleReader.cpp102
-rw-r--r--extern/audaspace/src/sequence/PingPong.cpp36
-rw-r--r--extern/audaspace/src/sequence/Sequence.cpp113
-rw-r--r--extern/audaspace/src/sequence/SequenceData.cpp172
-rw-r--r--extern/audaspace/src/sequence/SequenceEntry.cpp256
-rw-r--r--extern/audaspace/src/sequence/SequenceHandle.cpp253
-rw-r--r--extern/audaspace/src/sequence/SequenceHandle.h117
-rw-r--r--extern/audaspace/src/sequence/SequenceReader.cpp198
-rw-r--r--extern/audaspace/src/sequence/Superpose.cpp35
-rw-r--r--extern/audaspace/src/sequence/SuperposeReader.cpp95
-rw-r--r--extern/audaspace/src/util/Barrier.cpp42
-rw-r--r--extern/audaspace/src/util/Buffer.cpp72
-rw-r--r--extern/audaspace/src/util/BufferReader.cpp80
-rw-r--r--extern/audaspace/src/util/FFTPlan.cpp66
-rw-r--r--extern/audaspace/src/util/StreamBuffer.cpp83
-rw-r--r--extern/audaspace/src/util/ThreadPool.cpp60
-rw-r--r--extern/glew-es/CMakeLists.txt5
-rw-r--r--extern/glew/CMakeLists.txt5
-rw-r--r--extern/glew/include/GL/eglew.h2261
-rw-r--r--extern/glew/include/GL/glew.h476
-rw-r--r--extern/glew/include/GL/glxew.h61
-rw-r--r--extern/glew/include/GL/wglew.h36
-rw-r--r--extern/glew/src/glew.c9333
-rw-r--r--intern/CMakeLists.txt1
-rw-r--r--intern/audaspace/CMakeLists.txt304
-rw-r--r--intern/audaspace/COPYING339
-rw-r--r--intern/audaspace/FX/AUD_AccumulatorFactory.cpp64
-rw-r--r--intern/audaspace/FX/AUD_AccumulatorFactory.h69
-rw-r--r--intern/audaspace/FX/AUD_BandpassCalculator.cpp5
-rw-r--r--intern/audaspace/FX/AUD_BandpassCalculator.h10
-rw-r--r--intern/audaspace/FX/AUD_BaseIIRFilterReader.cpp137
-rw-r--r--intern/audaspace/FX/AUD_BaseIIRFilterReader.h135
-rw-r--r--intern/audaspace/FX/AUD_ButterworthCalculator.cpp38
-rw-r--r--intern/audaspace/FX/AUD_ButterworthCalculator.h20
-rw-r--r--intern/audaspace/FX/AUD_ButterworthFactory.cpp39
-rw-r--r--intern/audaspace/FX/AUD_ButterworthFactory.h54
-rw-r--r--intern/audaspace/FX/AUD_CallbackIIRFilterReader.cpp51
-rw-r--r--intern/audaspace/FX/AUD_CallbackIIRFilterReader.h87
-rw-r--r--intern/audaspace/FX/AUD_DelayFactory.cpp48
-rw-r--r--intern/audaspace/FX/AUD_DelayFactory.h66
-rw-r--r--intern/audaspace/FX/AUD_DelayReader.cpp96
-rw-r--r--intern/audaspace/FX/AUD_DelayReader.h70
-rw-r--r--intern/audaspace/FX/AUD_DoubleFactory.cpp44
-rw-r--r--intern/audaspace/FX/AUD_DoubleFactory.h66
-rw-r--r--intern/audaspace/FX/AUD_DoubleReader.cpp112
-rw-r--r--intern/audaspace/FX/AUD_DoubleReader.h84
-rw-r--r--intern/audaspace/FX/AUD_DynamicIIRFilterFactory.cpp44
-rw-r--r--intern/audaspace/FX/AUD_DynamicIIRFilterFactory.h58
-rw-r--r--intern/audaspace/FX/AUD_DynamicIIRFilterReader.cpp44
-rw-r--r--intern/audaspace/FX/AUD_DynamicIIRFilterReader.h54
-rw-r--r--intern/audaspace/FX/AUD_EffectFactory.cpp45
-rw-r--r--intern/audaspace/FX/AUD_EffectFactory.h82
-rw-r--r--intern/audaspace/FX/AUD_EffectReader.cpp69
-rw-r--r--intern/audaspace/FX/AUD_EffectReader.h74
-rw-r--r--intern/audaspace/FX/AUD_EnvelopeFactory.cpp82
-rw-r--r--intern/audaspace/FX/AUD_EnvelopeFactory.h85
-rw-r--r--intern/audaspace/FX/AUD_FaderFactory.cpp60
-rw-r--r--intern/audaspace/FX/AUD_FaderFactory.h92
-rw-r--r--intern/audaspace/FX/AUD_FaderReader.cpp86
-rw-r--r--intern/audaspace/FX/AUD_FaderReader.h76
-rw-r--r--intern/audaspace/FX/AUD_HighpassCalculator.cpp27
-rw-r--r--intern/audaspace/FX/AUD_HighpassCalculator.h25
-rw-r--r--intern/audaspace/FX/AUD_HighpassFactory.cpp39
-rw-r--r--intern/audaspace/FX/AUD_HighpassFactory.h55
-rw-r--r--intern/audaspace/FX/AUD_IDynamicIIRFilterCalculator.h56
-rw-r--r--intern/audaspace/FX/AUD_IIRFilterFactory.cpp43
-rw-r--r--intern/audaspace/FX/AUD_IIRFilterFactory.h71
-rw-r--r--intern/audaspace/FX/AUD_IIRFilterReader.cpp65
-rw-r--r--intern/audaspace/FX/AUD_IIRFilterReader.h73
-rw-r--r--intern/audaspace/FX/AUD_LimiterFactory.cpp55
-rw-r--r--intern/audaspace/FX/AUD_LimiterFactory.h79
-rw-r--r--intern/audaspace/FX/AUD_LimiterReader.cpp147
-rw-r--r--intern/audaspace/FX/AUD_LimiterReader.h71
-rw-r--r--intern/audaspace/FX/AUD_LoopFactory.cpp47
-rw-r--r--intern/audaspace/FX/AUD_LoopFactory.h68
-rw-r--r--intern/audaspace/FX/AUD_LoopReader.cpp101
-rw-r--r--intern/audaspace/FX/AUD_LoopReader.h72
-rw-r--r--intern/audaspace/FX/AUD_LowpassCalculator.cpp27
-rw-r--r--intern/audaspace/FX/AUD_LowpassCalculator.h25
-rw-r--r--intern/audaspace/FX/AUD_LowpassFactory.cpp38
-rw-r--r--intern/audaspace/FX/AUD_LowpassFactory.h55
-rw-r--r--intern/audaspace/FX/AUD_PingPongFactory.cpp46
-rw-r--r--intern/audaspace/FX/AUD_PingPongFactory.h56
-rw-r--r--intern/audaspace/FX/AUD_PitchFactory.cpp43
-rw-r--r--intern/audaspace/FX/AUD_PitchFactory.h61
-rw-r--r--intern/audaspace/FX/AUD_PitchReader.cpp54
-rw-r--r--intern/audaspace/FX/AUD_PitchReader.h73
-rw-r--r--intern/audaspace/FX/AUD_RectifyFactory.cpp48
-rw-r--r--intern/audaspace/FX/AUD_RectifyFactory.h58
-rw-r--r--intern/audaspace/FX/AUD_ReverseFactory.cpp42
-rw-r--r--intern/audaspace/FX/AUD_ReverseFactory.h56
-rw-r--r--intern/audaspace/FX/AUD_ReverseReader.cpp105
-rw-r--r--intern/audaspace/FX/AUD_ReverseReader.h72
-rw-r--r--intern/audaspace/FX/AUD_SquareFactory.cpp66
-rw-r--r--intern/audaspace/FX/AUD_SquareFactory.h70
-rw-r--r--intern/audaspace/FX/AUD_SumFactory.cpp45
-rw-r--r--intern/audaspace/FX/AUD_SumFactory.h55
-rw-r--r--intern/audaspace/FX/AUD_SuperposeFactory.cpp44
-rw-r--r--intern/audaspace/FX/AUD_SuperposeFactory.h68
-rw-r--r--intern/audaspace/FX/AUD_SuperposeReader.cpp105
-rw-r--r--intern/audaspace/FX/AUD_SuperposeReader.h85
-rw-r--r--intern/audaspace/FX/AUD_VolumeFactory.cpp50
-rw-r--r--intern/audaspace/FX/AUD_VolumeFactory.h69
-rw-r--r--intern/audaspace/OpenAL/AUD_OpenALDevice.cpp1647
-rw-r--r--intern/audaspace/OpenAL/AUD_OpenALDevice.h282
-rw-r--r--intern/audaspace/Python/AUD_PyAPI.cpp2922
-rw-r--r--intern/audaspace/Python/AUD_PyAPI.h74
-rw-r--r--intern/audaspace/SDL/AUD_SDLDevice.cpp97
-rw-r--r--intern/audaspace/SDL/AUD_SDLDevice.h86
-rw-r--r--intern/audaspace/SRC/AUD_SRCResampleFactory.cpp42
-rw-r--r--intern/audaspace/SRC/AUD_SRCResampleFactory.h57
-rw-r--r--intern/audaspace/SRC/AUD_SRCResampleReader.cpp150
-rw-r--r--intern/audaspace/SRC/AUD_SRCResampleReader.h103
-rw-r--r--intern/audaspace/ffmpeg/AUD_FFMPEGFactory.cpp55
-rw-r--r--intern/audaspace/ffmpeg/AUD_FFMPEGFactory.h78
-rw-r--r--intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp483
-rw-r--r--intern/audaspace/ffmpeg/AUD_FFMPEGReader.h169
-rw-r--r--intern/audaspace/ffmpeg/AUD_FFMPEGWriter.cpp395
-rw-r--r--intern/audaspace/ffmpeg/AUD_FFMPEGWriter.h160
-rw-r--r--intern/audaspace/fftw/AUD_BandPassFactory.cpp75
-rw-r--r--intern/audaspace/fftw/AUD_BandPassFactory.h92
-rw-r--r--intern/audaspace/fftw/AUD_BandPassReader.cpp127
-rw-r--r--intern/audaspace/fftw/AUD_BandPassReader.h102
-rw-r--r--intern/audaspace/intern/AUD_3DMath.h328
-rw-r--r--intern/audaspace/intern/AUD_AnimateableProperty.cpp247
-rw-r--r--intern/audaspace/intern/AUD_AnimateableProperty.h128
-rw-r--r--intern/audaspace/intern/AUD_Buffer.cpp80
-rw-r--r--intern/audaspace/intern/AUD_Buffer.h93
-rw-r--r--intern/audaspace/intern/AUD_BufferReader.cpp90
-rw-r--r--intern/audaspace/intern/AUD_BufferReader.h81
-rw-r--r--intern/audaspace/intern/AUD_C-API.cpp1323
-rw-r--r--intern/audaspace/intern/AUD_C-API.h822
-rw-r--r--intern/audaspace/intern/AUD_ChannelMapperFactory.cpp45
-rw-r--r--intern/audaspace/intern/AUD_ChannelMapperFactory.h57
-rw-r--r--intern/audaspace/intern/AUD_ChannelMapperReader.cpp378
-rw-r--r--intern/audaspace/intern/AUD_ChannelMapperReader.h136
-rw-r--r--intern/audaspace/intern/AUD_ConverterFactory.cpp47
-rw-r--r--intern/audaspace/intern/AUD_ConverterFactory.h57
-rw-r--r--intern/audaspace/intern/AUD_ConverterFunctions.cpp472
-rw-r--r--intern/audaspace/intern/AUD_ConverterFunctions.h128
-rw-r--r--intern/audaspace/intern/AUD_ConverterReader.cpp77
-rw-r--r--intern/audaspace/intern/AUD_ConverterReader.h73
-rw-r--r--intern/audaspace/intern/AUD_FileFactory.cpp84
-rw-r--r--intern/audaspace/intern/AUD_FileFactory.h76
-rw-r--r--intern/audaspace/intern/AUD_FileWriter.cpp131
-rw-r--r--intern/audaspace/intern/AUD_FileWriter.h82
-rw-r--r--intern/audaspace/intern/AUD_I3DDevice.h122
-rw-r--r--intern/audaspace/intern/AUD_I3DHandle.h216
-rw-r--r--intern/audaspace/intern/AUD_IDevice.h120
-rw-r--r--intern/audaspace/intern/AUD_IFactory.h61
-rw-r--r--intern/audaspace/intern/AUD_IHandle.h181
-rw-r--r--intern/audaspace/intern/AUD_ILockable.h21
-rw-r--r--intern/audaspace/intern/AUD_IReader.h97
-rw-r--r--intern/audaspace/intern/AUD_IWriter.h67
-rw-r--r--intern/audaspace/intern/AUD_JOSResampleFactory.cpp42
-rw-r--r--intern/audaspace/intern/AUD_JOSResampleFactory.h56
-rw-r--r--intern/audaspace/intern/AUD_JOSResampleReader.cpp422
-rw-r--r--intern/audaspace/intern/AUD_JOSResampleReader.h135
-rw-r--r--intern/audaspace/intern/AUD_JOSResampleReaderCoeff.cpp32545
-rw-r--r--intern/audaspace/intern/AUD_LinearResampleFactory.cpp42
-rw-r--r--intern/audaspace/intern/AUD_LinearResampleFactory.h56
-rw-r--r--intern/audaspace/intern/AUD_LinearResampleReader.cpp186
-rw-r--r--intern/audaspace/intern/AUD_LinearResampleReader.h86
-rw-r--r--intern/audaspace/intern/AUD_Mixer.cpp121
-rw-r--r--intern/audaspace/intern/AUD_Mixer.h114
-rw-r--r--intern/audaspace/intern/AUD_MixerFactory.cpp52
-rw-r--r--intern/audaspace/intern/AUD_MixerFactory.h79
-rw-r--r--intern/audaspace/intern/AUD_MutexLock.h24
-rw-r--r--intern/audaspace/intern/AUD_NULLDevice.cpp159
-rw-r--r--intern/audaspace/intern/AUD_NULLDevice.h84
-rw-r--r--intern/audaspace/intern/AUD_ReadDevice.cpp78
-rw-r--r--intern/audaspace/intern/AUD_ReadDevice.h88
-rw-r--r--intern/audaspace/intern/AUD_ResampleFactory.h37
-rw-r--r--intern/audaspace/intern/AUD_ResampleReader.cpp45
-rw-r--r--intern/audaspace/intern/AUD_ResampleReader.h66
-rw-r--r--intern/audaspace/intern/AUD_Sequencer.cpp177
-rw-r--r--intern/audaspace/intern/AUD_Sequencer.h206
-rw-r--r--intern/audaspace/intern/AUD_SequencerEntry.cpp319
-rw-r--r--intern/audaspace/intern/AUD_SequencerEntry.h319
-rw-r--r--intern/audaspace/intern/AUD_SequencerFactory.cpp123
-rw-r--r--intern/audaspace/intern/AUD_SequencerFactory.h177
-rw-r--r--intern/audaspace/intern/AUD_SequencerHandle.cpp259
-rw-r--r--intern/audaspace/intern/AUD_SequencerHandle.h122
-rw-r--r--intern/audaspace/intern/AUD_SequencerReader.cpp204
-rw-r--r--intern/audaspace/intern/AUD_SequencerReader.h99
-rw-r--r--intern/audaspace/intern/AUD_SilenceFactory.cpp41
-rw-r--r--intern/audaspace/intern/AUD_SilenceFactory.h54
-rw-r--r--intern/audaspace/intern/AUD_SilenceReader.cpp72
-rw-r--r--intern/audaspace/intern/AUD_SilenceReader.h66
-rw-r--r--intern/audaspace/intern/AUD_SinusFactory.cpp48
-rw-r--r--intern/audaspace/intern/AUD_SinusFactory.h72
-rw-r--r--intern/audaspace/intern/AUD_SinusReader.cpp83
-rw-r--r--intern/audaspace/intern/AUD_SinusReader.h78
-rw-r--r--intern/audaspace/intern/AUD_SoftwareDevice.cpp995
-rw-r--r--intern/audaspace/intern/AUD_SoftwareDevice.h348
-rw-r--r--intern/audaspace/intern/AUD_Space.h257
-rw-r--r--intern/audaspace/intern/AUD_StreamBufferFactory.cpp76
-rw-r--r--intern/audaspace/intern/AUD_StreamBufferFactory.h71
-rw-r--r--intern/audaspace/jack/AUD_JackDevice.cpp348
-rw-r--r--intern/audaspace/jack/AUD_JackDevice.h203
-rw-r--r--intern/audaspace/jack/AUD_JackLibrary.cpp128
-rw-r--r--intern/audaspace/jack/AUD_JackLibrary.h104
-rw-r--r--intern/audaspace/sndfile/AUD_SndFileFactory.cpp52
-rw-r--r--intern/audaspace/sndfile/AUD_SndFileFactory.h76
-rw-r--r--intern/audaspace/sndfile/AUD_SndFileReader.cpp171
-rw-r--r--intern/audaspace/sndfile/AUD_SndFileReader.h128
-rw-r--r--intern/audaspace/sndfile/AUD_SndFileWriter.cpp139
-rw-r--r--intern/audaspace/sndfile/AUD_SndFileWriter.h86
-rw-r--r--intern/cycles/app/io_export_cycles_xml.py3
-rw-r--r--intern/cycles/blender/addon/__init__.py18
-rw-r--r--intern/cycles/blender/addon/engine.py13
-rw-r--r--intern/cycles/blender/addon/properties.py18
-rw-r--r--intern/cycles/blender/addon/ui.py245
-rw-r--r--intern/cycles/blender/addon/version_update.py3
-rw-r--r--intern/cycles/blender/blender_curves.cpp11
-rw-r--r--intern/cycles/blender/blender_mesh.cpp17
-rw-r--r--intern/cycles/blender/blender_object.cpp207
-rw-r--r--intern/cycles/blender/blender_python.cpp16
-rw-r--r--intern/cycles/blender/blender_session.cpp23
-rw-r--r--intern/cycles/blender/blender_session.h4
-rw-r--r--intern/cycles/blender/blender_shader.cpp100
-rw-r--r--intern/cycles/blender/blender_sync.cpp144
-rw-r--r--intern/cycles/blender/blender_sync.h47
-rw-r--r--intern/cycles/blender/blender_texture.cpp3
-rw-r--r--intern/cycles/blender/blender_texture.h2
-rw-r--r--intern/cycles/blender/blender_util.h7
-rw-r--r--intern/cycles/device/device.cpp327
-rw-r--r--intern/cycles/device/device.h22
-rw-r--r--intern/cycles/device/device_cuda.cpp60
-rw-r--r--intern/cycles/device/device_multi.cpp9
-rw-r--r--intern/cycles/render/buffers.cpp6
-rw-r--r--intern/cycles/util/util_opengl.h8
-rw-r--r--intern/cycles/util/util_view.cpp2
-rw-r--r--intern/elbeem/intern/solver_control.cpp152
-rw-r--r--intern/elbeem/intern/solver_util.cpp217
-rw-r--r--intern/gawain/CMakeLists.txt40
-rw-r--r--intern/gawain/gawain/gwn_attr_binding.h19
-rw-r--r--intern/gawain/gawain/gwn_attr_binding_private.h20
-rw-r--r--intern/gawain/gawain/gwn_batch.h139
-rw-r--r--intern/gawain/gawain/gwn_buffer_id.h34
-rw-r--r--intern/gawain/gawain/gwn_common.h34
-rw-r--r--intern/gawain/gawain/gwn_element.h75
-rw-r--r--intern/gawain/gawain/gwn_imm_util.h18
-rw-r--r--intern/gawain/gawain/gwn_immediate.h119
-rw-r--r--intern/gawain/gawain/gwn_primitive.h40
-rw-r--r--intern/gawain/gawain/gwn_primitive_private.h14
-rw-r--r--intern/gawain/gawain/gwn_shader_interface.h74
-rw-r--r--intern/gawain/gawain/gwn_vertex_buffer.h110
-rw-r--r--intern/gawain/gawain/gwn_vertex_format.h78
-rw-r--r--intern/gawain/gawain/gwn_vertex_format_private.h16
-rw-r--r--intern/gawain/src/gwn_attr_binding.c70
-rw-r--r--intern/gawain/src/gwn_batch.c484
-rw-r--r--intern/gawain/src/gwn_buffer_id.cpp115
-rw-r--r--intern/gawain/src/gwn_element.c295
-rw-r--r--intern/gawain/src/gwn_imm_util.c46
-rw-r--r--intern/gawain/src/gwn_immediate.c919
-rw-r--r--intern/gawain/src/gwn_primitive.c63
-rw-r--r--intern/gawain/src/gwn_shader_interface.c311
-rw-r--r--intern/gawain/src/gwn_vertex_buffer.c242
-rw-r--r--intern/gawain/src/gwn_vertex_format.c296
-rw-r--r--intern/ghost/intern/GHOST_Context.cpp6
-rw-r--r--intern/ghost/intern/GHOST_Context.h11
-rw-r--r--intern/ghost/intern/GHOST_ContextCGL.h13
-rw-r--r--intern/ghost/intern/GHOST_ContextCGL.mm36
-rw-r--r--intern/ghost/intern/GHOST_ContextEGL.cpp33
-rw-r--r--intern/ghost/intern/GHOST_ContextEGL.h20
-rw-r--r--intern/ghost/intern/GHOST_ContextGLX.cpp46
-rw-r--r--intern/ghost/intern/GHOST_ContextGLX.h21
-rw-r--r--intern/ghost/intern/GHOST_ContextSDL.cpp2
-rw-r--r--intern/ghost/intern/GHOST_ContextWGL.cpp161
-rw-r--r--intern/ghost/intern/GHOST_ContextWGL.h39
-rw-r--r--intern/ghost/intern/GHOST_WindowCocoa.mm69
-rw-r--r--intern/ghost/intern/GHOST_WindowWin32.cpp131
-rw-r--r--intern/ghost/intern/GHOST_WindowX11.cpp120
-rw-r--r--intern/ghost/test/CMakeLists.txt3
-rw-r--r--intern/glew-mx/glew-mx.h31
-rw-r--r--intern/glew-mx/intern/gl-deprecated.h6
-rw-r--r--intern/glew-mx/intern/glew-mx.c58
-rw-r--r--intern/itasc/FixedObject.hpp2
-rw-r--r--intern/itasc/MovingFrame.cpp4
-rw-r--r--intern/itasc/MovingFrame.hpp10
-rw-r--r--intern/itasc/Scene.cpp4
-rw-r--r--intern/itasc/Scene.hpp2
-rw-r--r--intern/itasc/UncontrolledObject.hpp5
-rw-r--r--intern/itasc/WorldObject.hpp2
-rw-r--r--intern/opencolorio/CMakeLists.txt2
-rw-r--r--intern/opencolorio/gpu_shader_display_transform.glsl18
-rw-r--r--intern/opencolorio/gpu_shader_display_transform_vertex.glsl12
-rw-r--r--intern/opencolorio/ocio_impl_glsl.cc128
-rw-r--r--intern/opensubdiv/gpu_shader_opensubdiv_geometry.glsl15
-rw-r--r--intern/opensubdiv/gpu_shader_opensubdiv_vertex.glsl7
-rw-r--r--intern/opensubdiv/opensubdiv_capi.cc13
-rw-r--r--intern/opensubdiv/opensubdiv_capi.h4
-rw-r--r--intern/opensubdiv/opensubdiv_gpu_capi.cc85
-rw-r--r--intern/opensubdiv/opensubdiv_utils_capi.cc14
-rw-r--r--make.bat2
-rw-r--r--release/darwin/blender.app/Contents/Info.plist4
-rw-r--r--release/datafiles/blender_icons.svg22763
-rw-r--r--release/datafiles/blender_icons16/icon16_greasepencil_stroke_paint.datbin0 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_library_data_override.datbin0 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_object_origin.datbin0 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_outliner_data_greasepencil.datbin0 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_outliner_ob_greasepencil.datbin0 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_greasepencil_stroke_paint.datbin0 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_library_data_override.datbin0 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_object_origin.datbin0 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_outliner_data_greasepencil.datbin0 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_outliner_ob_greasepencil.datbin0 -> 4120 bytes
m---------release/datafiles/locale0
-rw-r--r--release/datafiles/preview.blendbin575216 -> 795192 bytes
-rw-r--r--release/datafiles/preview_cycles.blendbin1263660 -> 1363956 bytes
-rw-r--r--release/datafiles/splash.pngbin254480 -> 179886 bytes
-rw-r--r--release/datafiles/splash_2x.pngbin698643 -> 597581 bytes
-rw-r--r--release/datafiles/workspaces.blendbin0 -> 316356 bytes
m---------release/scripts/addons0
m---------release/scripts/addons_contrib0
-rw-r--r--release/scripts/freestyle/modules/parameter_editor.py4
-rw-r--r--release/scripts/modules/bpy/__init__.py1
-rw-r--r--release/scripts/modules/bpy_extras/__init__.py1
-rw-r--r--release/scripts/modules/bpy_extras/node_utils.py50
-rw-r--r--release/scripts/modules/bpy_extras/object_utils.py90
-rw-r--r--release/scripts/modules/bpy_types.py100
-rw-r--r--release/scripts/modules/keyingsets_utils.py9
-rw-r--r--release/scripts/modules/sys_info.py13
-rw-r--r--release/scripts/presets/keyconfig/3dsmax.py5
-rw-r--r--release/scripts/presets/keyconfig/maya.py5
-rw-r--r--release/scripts/presets/operator/wm.collada_export/sl_plus_open_sim_rigged.py2
-rw-r--r--release/scripts/presets/operator/wm.collada_export/sl_plus_open_sim_static.py1
-rw-r--r--release/scripts/startup/bl_operators/add_mesh_torus.py2
-rw-r--r--release/scripts/startup/bl_operators/clip.py26
-rw-r--r--release/scripts/startup/bl_operators/freestyle.py23
-rw-r--r--release/scripts/startup/bl_operators/mesh.py5
-rw-r--r--release/scripts/startup/bl_operators/object.py45
-rw-r--r--release/scripts/startup/bl_operators/object_quick_effects.py7
-rw-r--r--release/scripts/startup/bl_operators/rigidbody.py8
-rw-r--r--release/scripts/startup/bl_operators/uvcalc_follow_active.py6
-rw-r--r--release/scripts/startup/bl_operators/uvcalc_lightmap.py19
-rw-r--r--release/scripts/startup/bl_operators/uvcalc_smart_project.py9
-rw-r--r--release/scripts/startup/bl_operators/view3d.py20
-rw-r--r--release/scripts/startup/bl_ui/__init__.py12
-rw-r--r--release/scripts/startup/bl_ui/properties_collection.py182
-rw-r--r--release/scripts/startup/bl_ui/properties_constraint.py3
-rw-r--r--release/scripts/startup/bl_ui/properties_data_armature.py4
-rw-r--r--release/scripts/startup/bl_ui/properties_data_bone.py14
-rw-r--r--release/scripts/startup/bl_ui/properties_data_camera.py160
-rw-r--r--release/scripts/startup/bl_ui/properties_data_curve.py4
-rw-r--r--release/scripts/startup/bl_ui/properties_data_lamp.py162
-rw-r--r--release/scripts/startup/bl_ui/properties_data_lattice.py2
-rw-r--r--release/scripts/startup/bl_ui/properties_data_lightprobe.py185
-rw-r--r--release/scripts/startup/bl_ui/properties_data_mesh.py102
-rw-r--r--release/scripts/startup/bl_ui/properties_data_metaball.py4
-rw-r--r--release/scripts/startup/bl_ui/properties_data_modifier.py24
-rw-r--r--release/scripts/startup/bl_ui/properties_data_speaker.py12
-rw-r--r--release/scripts/startup/bl_ui/properties_data_workspace.py79
-rw-r--r--release/scripts/startup/bl_ui/properties_freestyle.py69
-rw-r--r--release/scripts/startup/bl_ui/properties_game.py44
-rw-r--r--release/scripts/startup/bl_ui/properties_material.py198
-rw-r--r--release/scripts/startup/bl_ui/properties_object.py27
-rw-r--r--release/scripts/startup/bl_ui/properties_paint_common.py4
-rw-r--r--release/scripts/startup/bl_ui/properties_particle.py57
-rw-r--r--release/scripts/startup/bl_ui/properties_physics_cloth.py6
-rw-r--r--release/scripts/startup/bl_ui/properties_physics_common.py6
-rw-r--r--release/scripts/startup/bl_ui/properties_physics_dynamicpaint.py42
-rw-r--r--release/scripts/startup/bl_ui/properties_physics_field.py16
-rw-r--r--release/scripts/startup/bl_ui/properties_physics_fluid.py16
-rw-r--r--release/scripts/startup/bl_ui/properties_physics_rigidbody.py6
-rw-r--r--release/scripts/startup/bl_ui/properties_physics_rigidbody_constraint.py4
-rw-r--r--release/scripts/startup/bl_ui/properties_physics_smoke.py42
-rw-r--r--release/scripts/startup/bl_ui/properties_physics_softbody.py4
-rw-r--r--release/scripts/startup/bl_ui/properties_render.py377
-rw-r--r--release/scripts/startup/bl_ui/properties_render_layer.py242
-rw-r--r--release/scripts/startup/bl_ui/properties_scene.py33
-rw-r--r--release/scripts/startup/bl_ui/properties_texture.py24
-rw-r--r--release/scripts/startup/bl_ui/properties_view_layer.py504
-rw-r--r--release/scripts/startup/bl_ui/properties_world.py77
-rw-r--r--release/scripts/startup/bl_ui/space_image.py9
-rw-r--r--release/scripts/startup/bl_ui/space_info.py36
-rw-r--r--release/scripts/startup/bl_ui/space_node.py20
-rw-r--r--release/scripts/startup/bl_ui/space_outliner.py152
-rw-r--r--release/scripts/startup/bl_ui/space_toolsystem_common.py271
-rw-r--r--release/scripts/startup/bl_ui/space_toolsystem_toolbar.py171
-rw-r--r--release/scripts/startup/bl_ui/space_userpref.py24
-rw-r--r--release/scripts/startup/bl_ui/space_view3d.py239
-rw-r--r--release/scripts/startup/bl_ui/space_view3d_toolbar.py26
-rw-r--r--release/scripts/startup/keyingsets_builtins.py5
-rw-r--r--release/scripts/startup/nodeitems_builtins.py75
-rw-r--r--release/scripts/templates_py/batch_export.py6
-rw-r--r--release/scripts/templates_py/manipulator_custom_geometry.py158
-rw-r--r--release/scripts/templates_py/manipulator_operator.py231
-rw-r--r--release/scripts/templates_py/manipulator_operator_target.py48
-rw-r--r--release/scripts/templates_py/manipulator_simple.py45
-rw-r--r--release/scripts/templates_py/operator_modal_view3d_raycast.py2
-rw-r--r--source/CMakeLists.txt4
-rw-r--r--source/blender/CMakeLists.txt4
-rw-r--r--source/blender/alembic/CMakeLists.txt2
-rw-r--r--source/blender/alembic/intern/abc_camera.cc5
-rw-r--r--source/blender/alembic/intern/abc_camera.h3
-rw-r--r--source/blender/alembic/intern/abc_curves.cc5
-rw-r--r--source/blender/alembic/intern/abc_curves.h3
-rw-r--r--source/blender/alembic/intern/abc_exporter.cc120
-rw-r--r--source/blender/alembic/intern/abc_exporter.h20
-rw-r--r--source/blender/alembic/intern/abc_hair.cc7
-rw-r--r--source/blender/alembic/intern/abc_hair.h3
-rw-r--r--source/blender/alembic/intern/abc_mball.cc6
-rw-r--r--source/blender/alembic/intern/abc_mball.h1
-rw-r--r--source/blender/alembic/intern/abc_mesh.cc14
-rw-r--r--source/blender/alembic/intern/abc_mesh.h3
-rw-r--r--source/blender/alembic/intern/abc_nurbs.cc5
-rw-r--r--source/blender/alembic/intern/abc_nurbs.h3
-rw-r--r--source/blender/alembic/intern/abc_object.cc5
-rw-r--r--source/blender/alembic/intern/abc_object.h4
-rw-r--r--source/blender/alembic/intern/abc_points.cc6
-rw-r--r--source/blender/alembic/intern/abc_points.h3
-rw-r--r--source/blender/alembic/intern/abc_transform.cc5
-rw-r--r--source/blender/alembic/intern/abc_transform.h3
-rw-r--r--source/blender/alembic/intern/abc_util.cc36
-rw-r--r--source/blender/alembic/intern/abc_util.h4
-rw-r--r--source/blender/alembic/intern/alembic_capi.cc60
-rw-r--r--source/blender/blenfont/BLF_api.h34
-rw-r--r--source/blender/blenfont/intern/blf.c230
-rw-r--r--source/blender/blenfont/intern/blf_font.c49
-rw-r--r--source/blender/blenfont/intern/blf_glyph.c146
-rw-r--r--source/blender/blenfont/intern/blf_internal.h5
-rw-r--r--source/blender/blenfont/intern/blf_internal_types.h8
-rw-r--r--source/blender/blenkernel/BKE_DerivedMesh.h78
-rw-r--r--source/blender/blenkernel/BKE_anim.h9
-rw-r--r--source/blender/blenkernel/BKE_animsys.h8
-rw-r--r--source/blender/blenkernel/BKE_appdir.h1
-rw-r--r--source/blender/blenkernel/BKE_armature.h32
-rw-r--r--source/blender/blenkernel/BKE_blender_version.h4
-rw-r--r--source/blender/blenkernel/BKE_blendfile.h4
-rw-r--r--source/blender/blenkernel/BKE_cachefile.h2
-rw-r--r--source/blender/blenkernel/BKE_camera.h11
-rw-r--r--source/blender/blenkernel/BKE_cloth.h7
-rw-r--r--source/blender/blenkernel/BKE_collection.h108
-rw-r--r--source/blender/blenkernel/BKE_collision.h2
-rw-r--r--source/blender/blenkernel/BKE_constraint.h10
-rw-r--r--source/blender/blenkernel/BKE_context.h28
-rw-r--r--source/blender/blenkernel/BKE_crazyspace.h9
-rw-r--r--source/blender/blenkernel/BKE_curve.h23
-rw-r--r--source/blender/blenkernel/BKE_customdata.h11
-rw-r--r--source/blender/blenkernel/BKE_data_transfer.h8
-rw-r--r--source/blender/blenkernel/BKE_depsgraph.h181
-rw-r--r--source/blender/blenkernel/BKE_displist.h29
-rw-r--r--source/blender/blenkernel/BKE_dynamicpaint.h7
-rw-r--r--source/blender/blenkernel/BKE_editmesh.h5
-rw-r--r--source/blender/blenkernel/BKE_editmesh_tangent.h40
-rw-r--r--source/blender/blenkernel/BKE_effect.h8
-rw-r--r--source/blender/blenkernel/BKE_fluidsim.h3
-rw-r--r--source/blender/blenkernel/BKE_freestyle.h2
-rw-r--r--source/blender/blenkernel/BKE_global.h3
-rw-r--r--source/blender/blenkernel/BKE_group.h34
-rw-r--r--source/blender/blenkernel/BKE_idprop.h11
-rw-r--r--source/blender/blenkernel/BKE_lamp.h2
-rw-r--r--source/blender/blenkernel/BKE_lattice.h22
-rw-r--r--source/blender/blenkernel/BKE_layer.h304
-rw-r--r--source/blender/blenkernel/BKE_library.h3
-rw-r--r--source/blender/blenkernel/BKE_library_override.h87
-rw-r--r--source/blender/blenkernel/BKE_library_query.h3
-rw-r--r--source/blender/blenkernel/BKE_library_remap.h2
-rw-r--r--source/blender/blenkernel/BKE_lightprobe.h46
-rw-r--r--source/blender/blenkernel/BKE_main.h2
-rw-r--r--source/blender/blenkernel/BKE_mask.h1
-rw-r--r--source/blender/blenkernel/BKE_material.h14
-rw-r--r--source/blender/blenkernel/BKE_mball.h13
-rw-r--r--source/blender/blenkernel/BKE_mball_tessellate.h2
-rw-r--r--source/blender/blenkernel/BKE_mesh.h34
-rw-r--r--source/blender/blenkernel/BKE_mesh_tangent.h61
-rw-r--r--source/blender/blenkernel/BKE_modifier.h58
-rw-r--r--source/blender/blenkernel/BKE_multires.h46
-rw-r--r--source/blender/blenkernel/BKE_node.h31
-rw-r--r--source/blender/blenkernel/BKE_object.h115
-rw-r--r--source/blender/blenkernel/BKE_object_facemap.h53
-rw-r--r--source/blender/blenkernel/BKE_outliner_treehash.h3
-rw-r--r--source/blender/blenkernel/BKE_paint.h22
-rw-r--r--source/blender/blenkernel/BKE_particle.h28
-rw-r--r--source/blender/blenkernel/BKE_pbvh.h5
-rw-r--r--source/blender/blenkernel/BKE_pointcache.h5
-rw-r--r--source/blender/blenkernel/BKE_rigidbody.h13
-rw-r--r--source/blender/blenkernel/BKE_scene.h100
-rw-r--r--source/blender/blenkernel/BKE_screen.h37
-rw-r--r--source/blender/blenkernel/BKE_sequencer.h3
-rw-r--r--source/blender/blenkernel/BKE_shrinkwrap.h7
-rw-r--r--source/blender/blenkernel/BKE_smoke.h4
-rw-r--r--source/blender/blenkernel/BKE_softbody.h4
-rw-r--r--source/blender/blenkernel/BKE_sound.h8
-rw-r--r--source/blender/blenkernel/BKE_tracking.h1
-rw-r--r--source/blender/blenkernel/BKE_workspace.h139
-rw-r--r--source/blender/blenkernel/BKE_world.h9
-rw-r--r--source/blender/blenkernel/CMakeLists.txt30
-rw-r--r--source/blender/blenkernel/depsgraph_private.h169
-rw-r--r--source/blender/blenkernel/intern/CCGSubSurf.c2
-rw-r--r--source/blender/blenkernel/intern/CCGSubSurf_opensubdiv.c4
-rw-r--r--source/blender/blenkernel/intern/DerivedMesh.c720
-rw-r--r--source/blender/blenkernel/intern/action.c10
-rw-r--r--source/blender/blenkernel/intern/anim.c102
-rw-r--r--source/blender/blenkernel/intern/anim_sys.c49
-rw-r--r--source/blender/blenkernel/intern/armature.c40
-rw-r--r--source/blender/blenkernel/intern/armature_update.c67
-rw-r--r--source/blender/blenkernel/intern/blender.c10
-rw-r--r--source/blender/blenkernel/intern/blender_copybuffer.c17
-rw-r--r--source/blender/blenkernel/intern/blender_undo.c5
-rw-r--r--source/blender/blenkernel/intern/blendfile.c113
-rw-r--r--source/blender/blenkernel/intern/boids.c1
-rw-r--r--source/blender/blenkernel/intern/cachefile.c8
-rw-r--r--source/blender/blenkernel/intern/camera.c80
-rw-r--r--source/blender/blenkernel/intern/cdderivedmesh.c323
-rw-r--r--source/blender/blenkernel/intern/cloth.c19
-rw-r--r--source/blender/blenkernel/intern/collection.c909
-rw-r--r--source/blender/blenkernel/intern/collision.c46
-rw-r--r--source/blender/blenkernel/intern/constraint.c75
-rw-r--r--source/blender/blenkernel/intern/context.c157
-rw-r--r--source/blender/blenkernel/intern/crazyspace.c26
-rw-r--r--source/blender/blenkernel/intern/curve.c38
-rw-r--r--source/blender/blenkernel/intern/customdata.c112
-rw-r--r--source/blender/blenkernel/intern/data_transfer.c25
-rw-r--r--source/blender/blenkernel/intern/deform.c3
-rw-r--r--source/blender/blenkernel/intern/depsgraph.c3739
-rw-r--r--source/blender/blenkernel/intern/displist.c106
-rw-r--r--source/blender/blenkernel/intern/dynamicpaint.c115
-rw-r--r--source/blender/blenkernel/intern/editderivedmesh.c693
-rw-r--r--source/blender/blenkernel/intern/editmesh.c20
-rw-r--r--source/blender/blenkernel/intern/editmesh_tangent.c431
-rw-r--r--source/blender/blenkernel/intern/effect.c89
-rw-r--r--source/blender/blenkernel/intern/fluidsim.c4
-rw-r--r--source/blender/blenkernel/intern/freestyle.c10
-rw-r--r--source/blender/blenkernel/intern/group.c195
-rw-r--r--source/blender/blenkernel/intern/icons.c2
-rw-r--r--source/blender/blenkernel/intern/idcode.c9
-rw-r--r--source/blender/blenkernel/intern/idprop.c46
-rw-r--r--source/blender/blenkernel/intern/image.c21
-rw-r--r--source/blender/blenkernel/intern/lamp.c47
-rw-r--r--source/blender/blenkernel/intern/lattice.c52
-rw-r--r--source/blender/blenkernel/intern/layer.c2363
-rw-r--r--source/blender/blenkernel/intern/library.c113
-rw-r--r--source/blender/blenkernel/intern/library_override.c752
-rw-r--r--source/blender/blenkernel/intern/library_query.c154
-rw-r--r--source/blender/blenkernel/intern/library_remap.c95
-rw-r--r--source/blender/blenkernel/intern/lightprobe.c101
-rw-r--r--source/blender/blenkernel/intern/linestyle.c13
-rw-r--r--source/blender/blenkernel/intern/mask.c17
-rw-r--r--source/blender/blenkernel/intern/mask_evaluate.c3
-rw-r--r--source/blender/blenkernel/intern/material.c590
-rw-r--r--source/blender/blenkernel/intern/mball.c84
-rw-r--r--source/blender/blenkernel/intern/mball_tessellate.c9
-rw-r--r--source/blender/blenkernel/intern/mesh.c189
-rw-r--r--source/blender/blenkernel/intern/mesh_evaluate.c204
-rw-r--r--source/blender/blenkernel/intern/mesh_tangent.c690
-rw-r--r--source/blender/blenkernel/intern/mesh_validate.c84
-rw-r--r--source/blender/blenkernel/intern/modifier.c30
-rw-r--r--source/blender/blenkernel/intern/multires.c170
-rw-r--r--source/blender/blenkernel/intern/nla.c2
-rw-r--r--source/blender/blenkernel/intern/node.c64
-rw-r--r--source/blender/blenkernel/intern/object.c321
-rw-r--r--source/blender/blenkernel/intern/object_deform.c3
-rw-r--r--source/blender/blenkernel/intern/object_dupli.c172
-rw-r--r--source/blender/blenkernel/intern/object_facemap.c257
-rw-r--r--source/blender/blenkernel/intern/object_update.c216
-rw-r--r--source/blender/blenkernel/intern/outliner_treehash.c39
-rw-r--r--source/blender/blenkernel/intern/paint.c148
-rw-r--r--source/blender/blenkernel/intern/particle.c95
-rw-r--r--source/blender/blenkernel/intern/particle_child.c2
-rw-r--r--source/blender/blenkernel/intern/particle_distribute.c11
-rw-r--r--source/blender/blenkernel/intern/particle_system.c72
-rw-r--r--source/blender/blenkernel/intern/pbvh.c109
-rw-r--r--source/blender/blenkernel/intern/pointcache.c13
-rw-r--r--source/blender/blenkernel/intern/rigidbody.c183
-rw-r--r--source/blender/blenkernel/intern/scene.c1388
-rw-r--r--source/blender/blenkernel/intern/screen.c113
-rw-r--r--source/blender/blenkernel/intern/sequencer.c29
-rw-r--r--source/blender/blenkernel/intern/shrinkwrap.c10
-rw-r--r--source/blender/blenkernel/intern/smoke.c40
-rw-r--r--source/blender/blenkernel/intern/softbody.c129
-rw-r--r--source/blender/blenkernel/intern/sound.c168
-rw-r--r--source/blender/blenkernel/intern/subsurf_ccg.c281
-rw-r--r--source/blender/blenkernel/intern/text.c1
-rw-r--r--source/blender/blenkernel/intern/tracking.c3
-rw-r--r--source/blender/blenkernel/intern/workspace.c520
-rw-r--r--source/blender/blenkernel/intern/world.c11
-rw-r--r--source/blender/blenkernel/intern/writeffmpeg.c4
-rw-r--r--source/blender/blenlib/BLI_callbacks.h2
-rw-r--r--source/blender/blenlib/BLI_iterator.h62
-rw-r--r--source/blender/blenlib/BLI_math_matrix.h255
-rw-r--r--source/blender/blenlib/BLI_math_vector.h2
-rw-r--r--source/blender/blenlib/BLI_memiter.h73
-rw-r--r--source/blender/blenlib/CMakeLists.txt3
-rw-r--r--source/blender/blenlib/intern/BLI_memiter.c357
-rw-r--r--source/blender/blenlib/intern/math_color.c6
-rw-r--r--source/blender/blenlib/intern/math_matrix.c347
-rw-r--r--source/blender/blenlib/intern/math_vector_inline.c2
-rw-r--r--source/blender/blenlib/intern/scanfill_utils.c14
-rw-r--r--source/blender/blenloader/BLO_readfile.h25
-rw-r--r--source/blender/blenloader/CMakeLists.txt6
-rw-r--r--source/blender/blenloader/intern/readfile.c1021
-rw-r--r--source/blender/blenloader/intern/readfile.h4
-rw-r--r--source/blender/blenloader/intern/versioning_250.c9
-rw-r--r--source/blender/blenloader/intern/versioning_260.c11
-rw-r--r--source/blender/blenloader/intern/versioning_270.c21
-rw-r--r--source/blender/blenloader/intern/versioning_280.c926
-rw-r--r--source/blender/blenloader/intern/versioning_defaults.c51
-rw-r--r--source/blender/blenloader/intern/versioning_legacy.c112
-rw-r--r--source/blender/blenloader/intern/writefile.c482
-rw-r--r--source/blender/blentranslation/BLT_translation.h4
-rw-r--r--source/blender/bmesh/intern/bmesh_mesh.c5
-rw-r--r--source/blender/bmesh/intern/bmesh_mesh_conv.c45
-rw-r--r--source/blender/bmesh/intern/bmesh_operators.h2
-rw-r--r--source/blender/bmesh/operators/bmo_similar.c64
-rw-r--r--source/blender/bmesh/tools/bmesh_intersect.c21
-rw-r--r--source/blender/collada/AnimationExporter.cpp27
-rw-r--r--source/blender/collada/AnimationExporter.h5
-rw-r--r--source/blender/collada/AnimationImporter.cpp6
-rw-r--r--source/blender/collada/ArmatureExporter.cpp19
-rw-r--r--source/blender/collada/ArmatureExporter.h4
-rw-r--r--source/blender/collada/ArmatureImporter.cpp14
-rw-r--r--source/blender/collada/ArmatureImporter.h3
-rw-r--r--source/blender/collada/CMakeLists.txt1
-rw-r--r--source/blender/collada/ControllerExporter.cpp16
-rw-r--r--source/blender/collada/ControllerExporter.h4
-rw-r--r--source/blender/collada/DocumentExporter.cpp20
-rw-r--r--source/blender/collada/DocumentExporter.h2
-rw-r--r--source/blender/collada/DocumentImporter.cpp43
-rw-r--r--source/blender/collada/DocumentImporter.h1
-rw-r--r--source/blender/collada/EffectExporter.cpp78
-rw-r--r--source/blender/collada/EffectExporter.h1
-rw-r--r--source/blender/collada/ExportSettings.h3
-rw-r--r--source/blender/collada/GeometryExporter.cpp311
-rw-r--r--source/blender/collada/GeometryExporter.h39
-rw-r--r--source/blender/collada/ImageExporter.cpp76
-rw-r--r--source/blender/collada/ImageExporter.h1
-rw-r--r--source/blender/collada/InstanceWriter.cpp63
-rw-r--r--source/blender/collada/InstanceWriter.h3
-rw-r--r--source/blender/collada/MaterialExporter.cpp35
-rw-r--r--source/blender/collada/MeshImporter.cpp47
-rw-r--r--source/blender/collada/MeshImporter.h14
-rw-r--r--source/blender/collada/SceneExporter.cpp33
-rw-r--r--source/blender/collada/SceneExporter.h6
-rw-r--r--source/blender/collada/SkinInfo.cpp10
-rw-r--r--source/blender/collada/SkinInfo.h2
-rw-r--r--source/blender/collada/TransformWriter.cpp3
-rw-r--r--source/blender/collada/TransformWriter.h3
-rw-r--r--source/blender/collada/collada.cpp12
-rw-r--r--source/blender/collada/collada.h19
-rw-r--r--source/blender/collada/collada_internal.cpp8
-rw-r--r--source/blender/collada/collada_internal.h1
-rw-r--r--source/blender/collada/collada_utils.cpp197
-rw-r--r--source/blender/collada/collada_utils.h15
-rw-r--r--source/blender/compositor/nodes/COM_RenderLayersNode.cpp6
-rw-r--r--source/blender/compositor/operations/COM_RenderLayersProg.cpp12
-rw-r--r--source/blender/depsgraph/CMakeLists.txt13
-rw-r--r--source/blender/depsgraph/DEG_depsgraph.h153
-rw-r--r--source/blender/depsgraph/DEG_depsgraph_build.h38
-rw-r--r--source/blender/depsgraph/DEG_depsgraph_debug.h9
-rw-r--r--source/blender/depsgraph/DEG_depsgraph_query.h111
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder.cc130
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder.h7
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes.cc649
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes.h80
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes_layer_collection.cc126
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc191
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes_scene.cc125
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc174
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_relations.cc406
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_relations.h31
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_relations_impl.h4
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_relations_layer_collection.cc124
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_relations_rig.cc17
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_relations_scene.cc125
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc136
-rw-r--r--source/blender/depsgraph/intern/debug/deg_debug_relations_graphviz.cc45
-rw-r--r--source/blender/depsgraph/intern/debug/deg_debug_stats_gnuplot.cc2
-rw-r--r--source/blender/depsgraph/intern/depsgraph.cc130
-rw-r--r--source/blender/depsgraph/intern/depsgraph.h22
-rw-r--r--source/blender/depsgraph/intern/depsgraph_build.cc122
-rw-r--r--source/blender/depsgraph/intern/depsgraph_debug.cc14
-rw-r--r--source/blender/depsgraph/intern/depsgraph_eval.cc81
-rw-r--r--source/blender/depsgraph/intern/depsgraph_intern.h26
-rw-r--r--source/blender/depsgraph/intern/depsgraph_query.cc56
-rw-r--r--source/blender/depsgraph/intern/depsgraph_query_foreach.cc2
-rw-r--r--source/blender/depsgraph/intern/depsgraph_query_iter.cc282
-rw-r--r--source/blender/depsgraph/intern/depsgraph_tag.cc663
-rw-r--r--source/blender/depsgraph/intern/depsgraph_type_defines.cc16
-rw-r--r--source/blender/depsgraph/intern/depsgraph_types.h46
-rw-r--r--source/blender/depsgraph/intern/eval/deg_eval.cc57
-rw-r--r--source/blender/depsgraph/intern/eval/deg_eval.h3
-rw-r--r--source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc1056
-rw-r--r--source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.h109
-rw-r--r--source/blender/depsgraph/intern/eval/deg_eval_flush.cc128
-rw-r--r--source/blender/depsgraph/intern/nodes/deg_node.cc2
-rw-r--r--source/blender/depsgraph/intern/nodes/deg_node_component.cc61
-rw-r--r--source/blender/depsgraph/intern/nodes/deg_node_component.h10
-rw-r--r--source/blender/depsgraph/intern/nodes/deg_node_id.cc96
-rw-r--r--source/blender/depsgraph/intern/nodes/deg_node_id.h12
-rw-r--r--source/blender/depsgraph/util/deg_util_foreach.h10
-rw-r--r--source/blender/depsgraph/util/deg_util_function.h61
-rw-r--r--source/blender/draw/CMakeLists.txt238
-rw-r--r--source/blender/draw/DRW_engine.h128
-rw-r--r--source/blender/draw/engines/basic/basic_engine.c281
-rw-r--r--source/blender/draw/engines/basic/basic_engine.h32
-rw-r--r--source/blender/draw/engines/clay/clay_engine.c977
-rw-r--r--source/blender/draw/engines/clay/clay_engine.h36
-rw-r--r--source/blender/draw/engines/clay/shaders/clay_frag.glsl204
-rw-r--r--source/blender/draw/engines/clay/shaders/clay_particle_strand_frag.glsl144
-rw-r--r--source/blender/draw/engines/clay/shaders/clay_particle_vert.glsl34
-rw-r--r--source/blender/draw/engines/clay/shaders/clay_vert.glsl17
-rw-r--r--source/blender/draw/engines/clay/shaders/ssao_alchemy.glsl78
-rw-r--r--source/blender/draw/engines/clay/shaders/ssao_groundtruth.glsl122
-rw-r--r--source/blender/draw/engines/eevee/eevee_bloom.c337
-rw-r--r--source/blender/draw/engines/eevee/eevee_data.c177
-rw-r--r--source/blender/draw/engines/eevee/eevee_depth_of_field.c297
-rw-r--r--source/blender/draw/engines/eevee/eevee_effects.c473
-rw-r--r--source/blender/draw/engines/eevee/eevee_engine.c514
-rw-r--r--source/blender/draw/engines/eevee/eevee_engine.h31
-rw-r--r--source/blender/draw/engines/eevee/eevee_lightprobes.c1711
-rw-r--r--source/blender/draw/engines/eevee/eevee_lights.c1167
-rw-r--r--source/blender/draw/engines/eevee/eevee_lut.h16926
-rw-r--r--source/blender/draw/engines/eevee/eevee_materials.c1491
-rw-r--r--source/blender/draw/engines/eevee/eevee_mist.c135
-rw-r--r--source/blender/draw/engines/eevee/eevee_motion_blur.c229
-rw-r--r--source/blender/draw/engines/eevee/eevee_occlusion.c298
-rw-r--r--source/blender/draw/engines/eevee/eevee_private.h934
-rw-r--r--source/blender/draw/engines/eevee/eevee_render.c525
-rw-r--r--source/blender/draw/engines/eevee/eevee_screen_raytrace.c342
-rw-r--r--source/blender/draw/engines/eevee/eevee_subsurface.c373
-rw-r--r--source/blender/draw/engines/eevee/eevee_temporal_sampling.c339
-rw-r--r--source/blender/draw/engines/eevee/eevee_volumes.c593
-rw-r--r--source/blender/draw/engines/eevee/shaders/ambient_occlusion_lib.glsl281
-rw-r--r--source/blender/draw/engines/eevee/shaders/background_vert.glsl20
-rw-r--r--source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl830
-rw-r--r--source/blender/draw/engines/eevee/shaders/bsdf_direct_lib.glsl156
-rw-r--r--source/blender/draw/engines/eevee/shaders/bsdf_lut_frag.glsl46
-rw-r--r--source/blender/draw/engines/eevee/shaders/bsdf_sampling_lib.glsl107
-rw-r--r--source/blender/draw/engines/eevee/shaders/btdf_lut_frag.glsl59
-rw-r--r--source/blender/draw/engines/eevee/shaders/common_uniforms_lib.glsl55
-rw-r--r--source/blender/draw/engines/eevee/shaders/concentric_samples_lib.glsl267
-rw-r--r--source/blender/draw/engines/eevee/shaders/default_frag.glsl19
-rw-r--r--source/blender/draw/engines/eevee/shaders/default_world_frag.glsl9
-rw-r--r--source/blender/draw/engines/eevee/shaders/effect_bloom_frag.glsl218
-rw-r--r--source/blender/draw/engines/eevee/shaders/effect_dof_frag.glsl261
-rw-r--r--source/blender/draw/engines/eevee/shaders/effect_dof_geom.glsl55
-rw-r--r--source/blender/draw/engines/eevee/shaders/effect_dof_vert.glsl99
-rw-r--r--source/blender/draw/engines/eevee/shaders/effect_downsample_cube_frag.glsl30
-rw-r--r--source/blender/draw/engines/eevee/shaders/effect_downsample_frag.glsl37
-rw-r--r--source/blender/draw/engines/eevee/shaders/effect_gtao_frag.glsl77
-rw-r--r--source/blender/draw/engines/eevee/shaders/effect_minmaxz_frag.glsl76
-rw-r--r--source/blender/draw/engines/eevee/shaders/effect_mist_frag.glsl31
-rw-r--r--source/blender/draw/engines/eevee/shaders/effect_motion_blur_frag.glsl65
-rw-r--r--source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl517
-rw-r--r--source/blender/draw/engines/eevee/shaders/effect_subsurface_frag.glsl101
-rw-r--r--source/blender/draw/engines/eevee/shaders/effect_temporal_aa.glsl14
-rw-r--r--source/blender/draw/engines/eevee/shaders/irradiance_lib.glsl177
-rw-r--r--source/blender/draw/engines/eevee/shaders/lamps_lib.glsl447
-rw-r--r--source/blender/draw/engines/eevee/shaders/lightprobe_cube_display_frag.glsl15
-rw-r--r--source/blender/draw/engines/eevee/shaders/lightprobe_cube_display_vert.glsl28
-rw-r--r--source/blender/draw/engines/eevee/shaders/lightprobe_filter_diffuse_frag.glsl198
-rw-r--r--source/blender/draw/engines/eevee/shaders/lightprobe_filter_glossy_frag.glsl87
-rw-r--r--source/blender/draw/engines/eevee/shaders/lightprobe_filter_visibility_frag.glsl88
-rw-r--r--source/blender/draw/engines/eevee/shaders/lightprobe_geom.glsl34
-rw-r--r--source/blender/draw/engines/eevee/shaders/lightprobe_grid_display_frag.glsl11
-rw-r--r--source/blender/draw/engines/eevee/shaders/lightprobe_grid_display_vert.glsl34
-rw-r--r--source/blender/draw/engines/eevee/shaders/lightprobe_grid_fill_frag.glsl20
-rw-r--r--source/blender/draw/engines/eevee/shaders/lightprobe_lib.glsl259
-rw-r--r--source/blender/draw/engines/eevee/shaders/lightprobe_planar_display_frag.glsl15
-rw-r--r--source/blender/draw/engines/eevee/shaders/lightprobe_planar_display_vert.glsl17
-rw-r--r--source/blender/draw/engines/eevee/shaders/lightprobe_planar_downsample_frag.glsl40
-rw-r--r--source/blender/draw/engines/eevee/shaders/lightprobe_planar_downsample_geom.glsl24
-rw-r--r--source/blender/draw/engines/eevee/shaders/lightprobe_planar_downsample_vert.glsl10
-rw-r--r--source/blender/draw/engines/eevee/shaders/lightprobe_vert.glsl10
-rw-r--r--source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl486
-rw-r--r--source/blender/draw/engines/eevee/shaders/lit_surface_vert.glsl40
-rw-r--r--source/blender/draw/engines/eevee/shaders/ltc_lib.glsl322
-rw-r--r--source/blender/draw/engines/eevee/shaders/octahedron_lib.glsl38
-rw-r--r--source/blender/draw/engines/eevee/shaders/prepass_frag.glsl87
-rw-r--r--source/blender/draw/engines/eevee/shaders/prepass_vert.glsl18
-rw-r--r--source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl234
-rw-r--r--source/blender/draw/engines/eevee/shaders/shadow_copy_frag.glsl210
-rw-r--r--source/blender/draw/engines/eevee/shaders/shadow_frag.glsl4
-rw-r--r--source/blender/draw/engines/eevee/shaders/shadow_geom.glsl53
-rw-r--r--source/blender/draw/engines/eevee/shaders/shadow_store_frag.glsl146
-rw-r--r--source/blender/draw/engines/eevee/shaders/shadow_vert.glsl29
-rw-r--r--source/blender/draw/engines/eevee/shaders/ssr_lib.glsl72
-rw-r--r--source/blender/draw/engines/eevee/shaders/update_noise_frag.glsl18
-rw-r--r--source/blender/draw/engines/eevee/shaders/volumetric_frag.glsl63
-rw-r--r--source/blender/draw/engines/eevee/shaders/volumetric_geom.glsl52
-rw-r--r--source/blender/draw/engines/eevee/shaders/volumetric_integration_frag.glsl63
-rw-r--r--source/blender/draw/engines/eevee/shaders/volumetric_lib.glsl150
-rw-r--r--source/blender/draw/engines/eevee/shaders/volumetric_resolve_frag.glsl21
-rw-r--r--source/blender/draw/engines/eevee/shaders/volumetric_scatter_frag.glsl75
-rw-r--r--source/blender/draw/engines/eevee/shaders/volumetric_vert.glsl27
-rw-r--r--source/blender/draw/engines/external/external_engine.c234
-rw-r--r--source/blender/draw/engines/external/external_engine.h31
-rw-r--r--source/blender/draw/intern/DRW_render.h485
-rw-r--r--source/blender/draw/intern/draw_armature.c1460
-rw-r--r--source/blender/draw/intern/draw_cache.c2708
-rw-r--r--source/blender/draw/intern/draw_cache.h171
-rw-r--r--source/blender/draw/intern/draw_cache_impl.h127
-rw-r--r--source/blender/draw/intern/draw_cache_impl_curve.c1118
-rw-r--r--source/blender/draw/intern/draw_cache_impl_displist.c398
-rw-r--r--source/blender/draw/intern/draw_cache_impl_lattice.c587
-rw-r--r--source/blender/draw/intern/draw_cache_impl_mesh.c3903
-rw-r--r--source/blender/draw/intern/draw_cache_impl_metaball.c144
-rw-r--r--source/blender/draw/intern/draw_cache_impl_particles.c520
-rw-r--r--source/blender/draw/intern/draw_common.c474
-rw-r--r--source/blender/draw/intern/draw_common.h147
-rw-r--r--source/blender/draw/intern/draw_instance_data.c224
-rw-r--r--source/blender/draw/intern/draw_instance_data.h43
-rw-r--r--source/blender/draw/intern/draw_manager.c4140
-rw-r--r--source/blender/draw/intern/draw_manager_profiling.c242
-rw-r--r--source/blender/draw/intern/draw_manager_profiling.h43
-rw-r--r--source/blender/draw/intern/draw_manager_text.c199
-rw-r--r--source/blender/draw/intern/draw_manager_text.h54
-rw-r--r--source/blender/draw/intern/draw_view.c746
-rw-r--r--source/blender/draw/intern/draw_view.h36
-rw-r--r--source/blender/draw/modes/draw_mode_engines.h44
-rw-r--r--source/blender/draw/modes/edit_armature_mode.c158
-rw-r--r--source/blender/draw/modes/edit_curve_mode.c351
-rw-r--r--source/blender/draw/modes/edit_lattice_mode.c298
-rw-r--r--source/blender/draw/modes/edit_mesh_mode.c614
-rw-r--r--source/blender/draw/modes/edit_mesh_mode_intern.h38
-rw-r--r--source/blender/draw/modes/edit_mesh_mode_text.c301
-rw-r--r--source/blender/draw/modes/edit_metaball_mode.c252
-rw-r--r--source/blender/draw/modes/edit_surface_mode.c270
-rw-r--r--source/blender/draw/modes/edit_text_mode.c313
-rw-r--r--source/blender/draw/modes/object_mode.c2050
-rw-r--r--source/blender/draw/modes/paint_texture_mode.c418
-rw-r--r--source/blender/draw/modes/paint_vertex_mode.c217
-rw-r--r--source/blender/draw/modes/paint_weight_mode.c255
-rw-r--r--source/blender/draw/modes/particle_mode.c265
-rw-r--r--source/blender/draw/modes/pose_mode.c201
-rw-r--r--source/blender/draw/modes/sculpt_mode.c306
-rw-r--r--source/blender/draw/modes/shaders/common_fxaa_lib.glsl678
-rw-r--r--source/blender/draw/modes/shaders/common_globals_lib.glsl72
-rw-r--r--source/blender/draw/modes/shaders/edit_curve_overlay_frag.glsl22
-rw-r--r--source/blender/draw/modes/shaders/edit_curve_overlay_handle_geom.glsl79
-rw-r--r--source/blender/draw/modes/shaders/edit_curve_overlay_loosevert_vert.glsl39
-rw-r--r--source/blender/draw/modes/shaders/edit_lattice_overlay_frag.glsl22
-rw-r--r--source/blender/draw/modes/shaders/edit_lattice_overlay_loosevert_vert.glsl39
-rw-r--r--source/blender/draw/modes/shaders/edit_mesh_overlay_facedot_frag.glsl19
-rw-r--r--source/blender/draw/modes/shaders/edit_mesh_overlay_facedot_vert.glsl31
-rw-r--r--source/blender/draw/modes/shaders/edit_mesh_overlay_facefill_frag.glsl29
-rw-r--r--source/blender/draw/modes/shaders/edit_mesh_overlay_facefill_vert.glsl29
-rw-r--r--source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl212
-rw-r--r--source/blender/draw/modes/shaders/edit_mesh_overlay_geom_edge.glsl154
-rw-r--r--source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl307
-rw-r--r--source/blender/draw/modes/shaders/edit_mesh_overlay_loosevert_vert.glsl61
-rw-r--r--source/blender/draw/modes/shaders/edit_mesh_overlay_mix_frag.glsl22
-rw-r--r--source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl38
-rw-r--r--source/blender/draw/modes/shaders/edit_normals_geom.glsl15
-rw-r--r--source/blender/draw/modes/shaders/edit_normals_vert.glsl30
-rw-r--r--source/blender/draw/modes/shaders/object_empty_image_frag.glsl21
-rw-r--r--source/blender/draw/modes/shaders/object_empty_image_vert.glsl38
-rw-r--r--source/blender/draw/modes/shaders/object_grid_frag.glsl207
-rw-r--r--source/blender/draw/modes/shaders/object_grid_vert.glsl63
-rw-r--r--source/blender/draw/modes/shaders/object_lightprobe_grid_vert.glsl28
-rw-r--r--source/blender/draw/modes/shaders/object_outline_detect_frag.glsl79
-rw-r--r--source/blender/draw/modes/shaders/object_outline_expand_frag.glsl37
-rw-r--r--source/blender/draw/modes/shaders/object_outline_resolve_frag.glsl27
-rw-r--r--source/blender/draw/modes/shaders/object_particle_dot_frag.glsl52
-rw-r--r--source/blender/draw/modes/shaders/object_particle_dot_vert.glsl35
-rw-r--r--source/blender/draw/modes/shaders/object_particle_prim_vert.glsl56
-rw-r--r--source/blender/draw/modes/shaders/paint_texture_frag.glsl11
-rw-r--r--source/blender/draw/modes/shaders/paint_texture_vert.glsl15
-rw-r--r--source/blender/draw/modes/shaders/paint_vert_frag.glsl26
-rw-r--r--source/blender/draw/modes/shaders/paint_wire_frag.glsl24
-rw-r--r--source/blender/draw/modes/shaders/paint_wire_vert.glsl14
-rw-r--r--source/blender/editors/CMakeLists.txt4
-rw-r--r--source/blender/editors/animation/CMakeLists.txt1
-rw-r--r--source/blender/editors/animation/anim_channels_defines.c119
-rw-r--r--source/blender/editors/animation/anim_channels_edit.c27
-rw-r--r--source/blender/editors/animation/anim_deps.c9
-rw-r--r--source/blender/editors/animation/anim_draw.c76
-rw-r--r--source/blender/editors/animation/anim_filter.c60
-rw-r--r--source/blender/editors/animation/anim_markers.c83
-rw-r--r--source/blender/editors/animation/drivers.c12
-rw-r--r--source/blender/editors/animation/keyframes_draw.c232
-rw-r--r--source/blender/editors/animation/keyframing.c23
-rw-r--r--source/blender/editors/animation/keyingsets.c5
-rw-r--r--source/blender/editors/armature/CMakeLists.txt1
-rw-r--r--source/blender/editors/armature/armature_naming.c7
-rw-r--r--source/blender/editors/armature/armature_relations.c39
-rw-r--r--source/blender/editors/armature/armature_select.c24
-rw-r--r--source/blender/editors/armature/armature_skinning.c58
-rw-r--r--source/blender/editors/armature/armature_utils.c5
-rw-r--r--source/blender/editors/armature/editarmature_sketch.c193
-rw-r--r--source/blender/editors/armature/meshlaplacian.c12
-rw-r--r--source/blender/editors/armature/meshlaplacian.h10
-rw-r--r--source/blender/editors/armature/pose_edit.c44
-rw-r--r--source/blender/editors/armature/pose_lib.c21
-rw-r--r--source/blender/editors/armature/pose_select.c39
-rw-r--r--source/blender/editors/armature/pose_transform.c29
-rw-r--r--source/blender/editors/armature/pose_utils.c12
-rw-r--r--source/blender/editors/armature/reeb.c234
-rw-r--r--source/blender/editors/curve/CMakeLists.txt1
-rw-r--r--source/blender/editors/curve/editcurve.c77
-rw-r--r--source/blender/editors/curve/editcurve_add.c7
-rw-r--r--source/blender/editors/curve/editcurve_paint.c98
-rw-r--r--source/blender/editors/curve/editfont.c19
-rw-r--r--source/blender/editors/datafiles/CMakeLists.txt5
-rw-r--r--source/blender/editors/gpencil/CMakeLists.txt1
-rw-r--r--source/blender/editors/gpencil/drawgpencil.c1170
-rw-r--r--source/blender/editors/gpencil/gpencil_brush.c32
-rw-r--r--source/blender/editors/gpencil/gpencil_convert.c22
-rw-r--r--source/blender/editors/gpencil/gpencil_edit.c8
-rw-r--r--source/blender/editors/gpencil/gpencil_paint.c112
-rw-r--r--source/blender/editors/gpencil/gpencil_utils.c20
-rw-r--r--source/blender/editors/include/BIF_gl.h53
-rw-r--r--source/blender/editors/include/BIF_glutil.h159
-rw-r--r--source/blender/editors/include/ED_anim_api.h1
-rw-r--r--source/blender/editors/include/ED_armature.h19
-rw-r--r--source/blender/editors/include/ED_gpencil.h13
-rw-r--r--source/blender/editors/include/ED_image.h7
-rw-r--r--source/blender/editors/include/ED_info.h7
-rw-r--r--source/blender/editors/include/ED_keyframes_draw.h6
-rw-r--r--source/blender/editors/include/ED_manipulator_library.h203
-rw-r--r--source/blender/editors/include/ED_mesh.h41
-rw-r--r--source/blender/editors/include/ED_node.h2
-rw-r--r--source/blender/editors/include/ED_object.h62
-rw-r--r--source/blender/editors/include/ED_particle.h27
-rw-r--r--source/blender/editors/include/ED_render.h11
-rw-r--r--source/blender/editors/include/ED_scene.h43
-rw-r--r--source/blender/editors/include/ED_screen.h88
-rw-r--r--source/blender/editors/include/ED_sculpt.h3
-rw-r--r--source/blender/editors/include/ED_transform.h18
-rw-r--r--source/blender/editors/include/ED_transform_snap_object_context.h7
-rw-r--r--source/blender/editors/include/ED_uvedit.h11
-rw-r--r--source/blender/editors/include/ED_view3d.h105
-rw-r--r--source/blender/editors/include/UI_icons.h12
-rw-r--r--source/blender/editors/include/UI_interface.h67
-rw-r--r--source/blender/editors/include/UI_interface_icons.h1
-rw-r--r--source/blender/editors/include/UI_resources.h29
-rw-r--r--source/blender/editors/interface/CMakeLists.txt1
-rw-r--r--source/blender/editors/interface/interface.c116
-rw-r--r--source/blender/editors/interface/interface_align.c6
-rw-r--r--source/blender/editors/interface/interface_anim.c5
-rw-r--r--source/blender/editors/interface/interface_draw.c1528
-rw-r--r--source/blender/editors/interface/interface_eyedropper.c10
-rw-r--r--source/blender/editors/interface/interface_eyedropper_color.c4
-rw-r--r--source/blender/editors/interface/interface_eyedropper_datablock.c4
-rw-r--r--source/blender/editors/interface/interface_eyedropper_depth.c15
-rw-r--r--source/blender/editors/interface/interface_eyedropper_driver.c8
-rw-r--r--source/blender/editors/interface/interface_handlers.c92
-rw-r--r--source/blender/editors/interface/interface_icons.c198
-rw-r--r--source/blender/editors/interface/interface_intern.h30
-rw-r--r--source/blender/editors/interface/interface_layout.c108
-rw-r--r--source/blender/editors/interface/interface_ops.c338
-rw-r--r--source/blender/editors/interface/interface_panel.c336
-rw-r--r--source/blender/editors/interface/interface_region_menu_popup.c4
-rw-r--r--source/blender/editors/interface/interface_region_popup.c2
-rw-r--r--source/blender/editors/interface/interface_region_search.c5
-rw-r--r--source/blender/editors/interface/interface_region_tooltip.c213
-rw-r--r--source/blender/editors/interface/interface_regions.c3
-rw-r--r--source/blender/editors/interface/interface_style.c27
-rw-r--r--source/blender/editors/interface/interface_templates.c568
-rw-r--r--source/blender/editors/interface/interface_utils.c84
-rw-r--r--source/blender/editors/interface/interface_widgets.c677
-rw-r--r--source/blender/editors/interface/resources.c219
-rw-r--r--source/blender/editors/interface/view2d.c330
-rw-r--r--source/blender/editors/io/CMakeLists.txt1
-rw-r--r--source/blender/editors/io/io_collada.c49
-rw-r--r--source/blender/editors/manipulator_library/CMakeLists.txt60
-rw-r--r--source/blender/editors/manipulator_library/geometry/geom_arrow_manipulator.c141
-rw-r--r--source/blender/editors/manipulator_library/geometry/geom_cube_manipulator.c75
-rw-r--r--source/blender/editors/manipulator_library/geometry/geom_dial_manipulator.c813
-rw-r--r--source/blender/editors/manipulator_library/manipulator_draw_utils.c131
-rw-r--r--source/blender/editors/manipulator_library/manipulator_geometry.h54
-rw-r--r--source/blender/editors/manipulator_library/manipulator_library_intern.h108
-rw-r--r--source/blender/editors/manipulator_library/manipulator_library_presets.c154
-rw-r--r--source/blender/editors/manipulator_library/manipulator_library_utils.c221
-rw-r--r--source/blender/editors/manipulator_library/manipulator_types/arrow2d_manipulator.c224
-rw-r--r--source/blender/editors/manipulator_library/manipulator_types/arrow3d_manipulator.c478
-rw-r--r--source/blender/editors/manipulator_library/manipulator_types/button2d_manipulator.c262
-rw-r--r--source/blender/editors/manipulator_library/manipulator_types/cage2d_manipulator.c1109
-rw-r--r--source/blender/editors/manipulator_library/manipulator_types/cage3d_manipulator.c735
-rw-r--r--source/blender/editors/manipulator_library/manipulator_types/dial3d_manipulator.c480
-rw-r--r--source/blender/editors/manipulator_library/manipulator_types/grab3d_manipulator.c374
-rw-r--r--source/blender/editors/manipulator_library/manipulator_types/primitive3d_manipulator.c190
-rw-r--r--source/blender/editors/mask/CMakeLists.txt1
-rw-r--r--source/blender/editors/mask/mask_add.c5
-rw-r--r--source/blender/editors/mask/mask_draw.c470
-rw-r--r--source/blender/editors/mask/mask_ops.c25
-rw-r--r--source/blender/editors/mask/mask_relationships.c7
-rw-r--r--source/blender/editors/mask/mask_shapekey.c11
-rw-r--r--source/blender/editors/mesh/CMakeLists.txt2
-rw-r--r--source/blender/editors/mesh/editface.c23
-rw-r--r--source/blender/editors/mesh/editmesh_add.c111
-rw-r--r--source/blender/editors/mesh/editmesh_bisect.c348
-rw-r--r--source/blender/editors/mesh/editmesh_extrude.c407
-rw-r--r--source/blender/editors/mesh/editmesh_knife.c182
-rw-r--r--source/blender/editors/mesh/editmesh_knife_project.c13
-rw-r--r--source/blender/editors/mesh/editmesh_loopcut.c58
-rw-r--r--source/blender/editors/mesh/editmesh_path.c16
-rw-r--r--source/blender/editors/mesh/editmesh_polybuild.c542
-rw-r--r--source/blender/editors/mesh/editmesh_select.c122
-rw-r--r--source/blender/editors/mesh/editmesh_tools.c63
-rw-r--r--source/blender/editors/mesh/editmesh_utils.c30
-rw-r--r--source/blender/editors/mesh/mesh_data.c88
-rw-r--r--source/blender/editors/mesh/mesh_intern.h5
-rw-r--r--source/blender/editors/mesh/mesh_navmesh.c36
-rw-r--r--source/blender/editors/mesh/mesh_ops.c25
-rw-r--r--source/blender/editors/mesh/meshtools.c83
-rw-r--r--source/blender/editors/metaball/CMakeLists.txt1
-rw-r--r--source/blender/editors/metaball/mball_edit.c15
-rw-r--r--source/blender/editors/object/CMakeLists.txt2
-rw-r--r--source/blender/editors/object/object_add.c415
-rw-r--r--source/blender/editors/object/object_bake.c94
-rw-r--r--source/blender/editors/object/object_bake_api.c35
-rw-r--r--source/blender/editors/object/object_constraint.c132
-rw-r--r--source/blender/editors/object/object_data_transfer.c37
-rw-r--r--source/blender/editors/object/object_edit.c367
-rw-r--r--source/blender/editors/object/object_facemap_ops.c499
-rw-r--r--source/blender/editors/object/object_group.c46
-rw-r--r--source/blender/editors/object/object_hook.c44
-rw-r--r--source/blender/editors/object/object_intern.h17
-rw-r--r--source/blender/editors/object/object_lattice.c7
-rw-r--r--source/blender/editors/object/object_modifier.c221
-rw-r--r--source/blender/editors/object/object_ops.c41
-rw-r--r--source/blender/editors/object/object_relations.c708
-rw-r--r--source/blender/editors/object/object_select.c376
-rw-r--r--source/blender/editors/object/object_shapekey.c30
-rw-r--r--source/blender/editors/object/object_transform.c467
-rw-r--r--source/blender/editors/object/object_vgroup.c139
-rw-r--r--source/blender/editors/physics/CMakeLists.txt1
-rw-r--r--source/blender/editors/physics/dynamicpaint_ops.c29
-rw-r--r--source/blender/editors/physics/particle_boids.c20
-rw-r--r--source/blender/editors/physics/particle_edit.c380
-rw-r--r--source/blender/editors/physics/particle_object.c110
-rw-r--r--source/blender/editors/physics/physics_fluid.c40
-rw-r--r--source/blender/editors/physics/physics_ops.c17
-rw-r--r--source/blender/editors/physics/physics_pointcache.c16
-rw-r--r--source/blender/editors/physics/rigidbody_constraint.c26
-rw-r--r--source/blender/editors/physics/rigidbody_object.c20
-rw-r--r--source/blender/editors/render/CMakeLists.txt2
-rw-r--r--source/blender/editors/render/render_intern.h4
-rw-r--r--source/blender/editors/render/render_internal.c190
-rw-r--r--source/blender/editors/render/render_opengl.c106
-rw-r--r--source/blender/editors/render/render_ops.c4
-rw-r--r--source/blender/editors/render/render_preview.c170
-rw-r--r--source/blender/editors/render/render_shading.c162
-rw-r--r--source/blender/editors/render/render_update.c186
-rw-r--r--source/blender/editors/render/render_view.c15
-rw-r--r--source/blender/editors/scene/CMakeLists.txt44
-rw-r--r--source/blender/editors/scene/scene_edit.c280
-rw-r--r--source/blender/editors/screen/CMakeLists.txt4
-rw-r--r--source/blender/editors/screen/area.c554
-rw-r--r--source/blender/editors/screen/glutil.c646
-rw-r--r--source/blender/editors/screen/screen_context.c177
-rw-r--r--source/blender/editors/screen/screen_draw.c313
-rw-r--r--source/blender/editors/screen/screen_edit.c479
-rw-r--r--source/blender/editors/screen/screen_intern.h13
-rw-r--r--source/blender/editors/screen/screen_ops.c322
-rw-r--r--source/blender/editors/screen/screendump.c31
-rw-r--r--source/blender/editors/screen/workspace_edit.c422
-rw-r--r--source/blender/editors/screen/workspace_layout_edit.c197
-rw-r--r--source/blender/editors/sculpt_paint/CMakeLists.txt1
-rw-r--r--source/blender/editors/sculpt_paint/paint_cursor.c392
-rw-r--r--source/blender/editors/sculpt_paint/paint_curve.c6
-rw-r--r--source/blender/editors/sculpt_paint/paint_hide.c13
-rw-r--r--source/blender/editors/sculpt_paint/paint_image.c98
-rw-r--r--source/blender/editors/sculpt_paint/paint_image_2d.c5
-rw-r--r--source/blender/editors/sculpt_paint/paint_image_proj.c64
-rw-r--r--source/blender/editors/sculpt_paint/paint_intern.h5
-rw-r--r--source/blender/editors/sculpt_paint/paint_mask.c27
-rw-r--r--source/blender/editors/sculpt_paint/paint_ops.c9
-rw-r--r--source/blender/editors/sculpt_paint/paint_stroke.c59
-rw-r--r--source/blender/editors/sculpt_paint/paint_utils.c43
-rw-r--r--source/blender/editors/sculpt_paint/paint_vertex.c107
-rw-r--r--source/blender/editors/sculpt_paint/paint_vertex_color_ops.c13
-rw-r--r--source/blender/editors/sculpt_paint/paint_vertex_color_utils.c5
-rw-r--r--source/blender/editors/sculpt_paint/paint_vertex_proj.c18
-rw-r--r--source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c29
-rw-r--r--source/blender/editors/sculpt_paint/sculpt.c66
-rw-r--r--source/blender/editors/sculpt_paint/sculpt_undo.c20
-rw-r--r--source/blender/editors/sculpt_paint/sculpt_uv.c24
-rw-r--r--source/blender/editors/sound/CMakeLists.txt2
-rw-r--r--source/blender/editors/sound/sound_ops.c8
-rw-r--r--source/blender/editors/space_action/action_buttons.c1
-rw-r--r--source/blender/editors/space_action/action_draw.c108
-rw-r--r--source/blender/editors/space_action/space_action.c26
-rw-r--r--source/blender/editors/space_api/spacetypes.c26
-rw-r--r--source/blender/editors/space_buttons/CMakeLists.txt1
-rw-r--r--source/blender/editors/space_buttons/buttons_context.c144
-rw-r--r--source/blender/editors/space_buttons/buttons_intern.h1
-rw-r--r--source/blender/editors/space_buttons/buttons_texture.c20
-rw-r--r--source/blender/editors/space_buttons/space_buttons.c53
-rw-r--r--source/blender/editors/space_clip/CMakeLists.txt1
-rw-r--r--source/blender/editors/space_clip/clip_buttons.c7
-rw-r--r--source/blender/editors/space_clip/clip_dopesheet_draw.c261
-rw-r--r--source/blender/editors/space_clip/clip_draw.c873
-rw-r--r--source/blender/editors/space_clip/clip_editor.c11
-rw-r--r--source/blender/editors/space_clip/clip_graph_draw.c150
-rw-r--r--source/blender/editors/space_clip/clip_graph_ops.c5
-rw-r--r--source/blender/editors/space_clip/clip_intern.h4
-rw-r--r--source/blender/editors/space_clip/clip_ops.c5
-rw-r--r--source/blender/editors/space_clip/clip_utils.c80
-rw-r--r--source/blender/editors/space_clip/space_clip.c42
-rw-r--r--source/blender/editors/space_clip/tracking_ops.c7
-rw-r--r--source/blender/editors/space_clip/tracking_ops_orient.c43
-rw-r--r--source/blender/editors/space_clip/tracking_ops_plane.c7
-rw-r--r--source/blender/editors/space_clip/tracking_ops_solve.c7
-rw-r--r--source/blender/editors/space_clip/tracking_ops_stabilize.c11
-rw-r--r--source/blender/editors/space_clip/tracking_ops_track.c3
-rw-r--r--source/blender/editors/space_console/console_draw.c22
-rw-r--r--source/blender/editors/space_console/space_console.c4
-rw-r--r--source/blender/editors/space_file/file_draw.c125
-rw-r--r--source/blender/editors/space_file/file_utils.c1
-rw-r--r--source/blender/editors/space_file/filesel.c5
-rw-r--r--source/blender/editors/space_file/space_file.c59
-rw-r--r--source/blender/editors/space_graph/CMakeLists.txt3
-rw-r--r--source/blender/editors/space_graph/graph_buttons.c4
-rw-r--r--source/blender/editors/space_graph/graph_draw.c747
-rw-r--r--source/blender/editors/space_graph/graph_edit.c9
-rw-r--r--source/blender/editors/space_graph/space_graph.c87
-rw-r--r--source/blender/editors/space_image/CMakeLists.txt1
-rw-r--r--source/blender/editors/space_image/image_draw.c478
-rw-r--r--source/blender/editors/space_image/image_edit.c24
-rw-r--r--source/blender/editors/space_image/image_intern.h2
-rw-r--r--source/blender/editors/space_image/image_ops.c45
-rw-r--r--source/blender/editors/space_image/space_image.c103
-rw-r--r--source/blender/editors/space_info/info_stats.c117
-rw-r--r--source/blender/editors/space_info/space_info.c31
-rw-r--r--source/blender/editors/space_info/textview.c46
-rw-r--r--source/blender/editors/space_logic/logic_window.c25
-rw-r--r--source/blender/editors/space_logic/space_logic.c4
-rw-r--r--source/blender/editors/space_nla/nla_channels.c24
-rw-r--r--source/blender/editors/space_nla/nla_draw.c455
-rw-r--r--source/blender/editors/space_nla/space_nla.c20
-rw-r--r--source/blender/editors/space_node/CMakeLists.txt2
-rw-r--r--source/blender/editors/space_node/drawnode.c501
-rw-r--r--source/blender/editors/space_node/node_draw.c490
-rw-r--r--source/blender/editors/space_node/node_edit.c45
-rw-r--r--source/blender/editors/space_node/node_intern.h13
-rw-r--r--source/blender/editors/space_node/node_manipulators.c616
-rw-r--r--source/blender/editors/space_node/node_ops.c4
-rw-r--r--source/blender/editors/space_node/node_templates.c3
-rw-r--r--source/blender/editors/space_node/space_node.c63
-rw-r--r--source/blender/editors/space_outliner/CMakeLists.txt3
-rw-r--r--source/blender/editors/space_outliner/outliner_collections.c1054
-rw-r--r--source/blender/editors/space_outliner/outliner_draw.c1232
-rw-r--r--source/blender/editors/space_outliner/outliner_edit.c354
-rw-r--r--source/blender/editors/space_outliner/outliner_intern.h158
-rw-r--r--source/blender/editors/space_outliner/outliner_ops.c452
-rw-r--r--source/blender/editors/space_outliner/outliner_select.c441
-rw-r--r--source/blender/editors/space_outliner/outliner_tools.c342
-rw-r--r--source/blender/editors/space_outliner/outliner_tree.c1353
-rw-r--r--source/blender/editors/space_outliner/outliner_utils.c233
-rw-r--r--source/blender/editors/space_outliner/space_outliner.c61
-rw-r--r--source/blender/editors/space_script/space_script.c4
-rw-r--r--source/blender/editors/space_sequencer/CMakeLists.txt2
-rw-r--r--source/blender/editors/space_sequencer/sequencer_add.c2
-rw-r--r--source/blender/editors/space_sequencer/sequencer_draw.c738
-rw-r--r--source/blender/editors/space_sequencer/sequencer_edit.c23
-rw-r--r--source/blender/editors/space_sequencer/sequencer_intern.h2
-rw-r--r--source/blender/editors/space_sequencer/space_sequencer.c16
-rw-r--r--source/blender/editors/space_text/space_text.c3
-rw-r--r--source/blender/editors/space_text/text_draw.c268
-rw-r--r--source/blender/editors/space_text/text_ops.c2
-rw-r--r--source/blender/editors/space_time/space_time.c319
-rw-r--r--source/blender/editors/space_userpref/space_userpref.c8
-rw-r--r--source/blender/editors/space_view3d/CMakeLists.txt14
-rw-r--r--source/blender/editors/space_view3d/drawanimviz.c132
-rw-r--r--source/blender/editors/space_view3d/drawarmature.c1491
-rw-r--r--source/blender/editors/space_view3d/drawmesh.c1065
-rw-r--r--source/blender/editors/space_view3d/drawobject.c4993
-rw-r--r--source/blender/editors/space_view3d/drawsimdebug.c111
-rw-r--r--source/blender/editors/space_view3d/drawvolume.c3
-rw-r--r--source/blender/editors/space_view3d/space_view3d.c414
-rw-r--r--source/blender/editors/space_view3d/view3d_buttons.c36
-rw-r--r--source/blender/editors/space_view3d/view3d_camera_control.c15
-rw-r--r--source/blender/editors/space_view3d/view3d_draw.c4678
-rw-r--r--source/blender/editors/space_view3d/view3d_draw_legacy.c2195
-rw-r--r--source/blender/editors/space_view3d/view3d_edit.c264
-rw-r--r--source/blender/editors/space_view3d/view3d_fly.c63
-rw-r--r--source/blender/editors/space_view3d/view3d_header.c70
-rw-r--r--source/blender/editors/space_view3d/view3d_intern.h124
-rw-r--r--source/blender/editors/space_view3d/view3d_iterators.c27
-rw-r--r--source/blender/editors/space_view3d/view3d_manipulator_armature.c220
-rw-r--r--source/blender/editors/space_view3d/view3d_manipulator_camera.c449
-rw-r--r--source/blender/editors/space_view3d/view3d_manipulator_empty.c196
-rw-r--r--source/blender/editors/space_view3d/view3d_manipulator_forcefield.c118
-rw-r--r--source/blender/editors/space_view3d/view3d_manipulator_lamp.c289
-rw-r--r--source/blender/editors/space_view3d/view3d_manipulator_navigate.c359
-rw-r--r--source/blender/editors/space_view3d/view3d_manipulator_navigate_type.c307
-rw-r--r--source/blender/editors/space_view3d/view3d_manipulator_ruler.c1094
-rw-r--r--source/blender/editors/space_view3d/view3d_ops.c38
-rw-r--r--source/blender/editors/space_view3d/view3d_project.c43
-rw-r--r--source/blender/editors/space_view3d/view3d_ruler.c239
-rw-r--r--source/blender/editors/space_view3d/view3d_select.c426
-rw-r--r--source/blender/editors/space_view3d/view3d_snap.c32
-rw-r--r--source/blender/editors/space_view3d/view3d_utils.c184
-rw-r--r--source/blender/editors/space_view3d/view3d_view.c403
-rw-r--r--source/blender/editors/space_view3d/view3d_walk.c52
-rw-r--r--source/blender/editors/transform/CMakeLists.txt6
-rw-r--r--source/blender/editors/transform/transform.c380
-rw-r--r--source/blender/editors/transform/transform.h29
-rw-r--r--source/blender/editors/transform/transform_constraints.c64
-rw-r--r--source/blender/editors/transform/transform_conversions.c342
-rw-r--r--source/blender/editors/transform/transform_generics.c128
-rw-r--r--source/blender/editors/transform/transform_manipulator.c2206
-rw-r--r--source/blender/editors/transform/transform_manipulator2d.c383
-rw-r--r--source/blender/editors/transform/transform_ops.c63
-rw-r--r--source/blender/editors/transform/transform_orientations.c128
-rw-r--r--source/blender/editors/transform/transform_snap.c94
-rw-r--r--source/blender/editors/transform/transform_snap_object.c43
-rw-r--r--source/blender/editors/util/CMakeLists.txt3
-rw-r--r--source/blender/editors/util/ed_transverts.c5
-rw-r--r--source/blender/editors/util/ed_util.c64
-rw-r--r--source/blender/editors/util/editmode_undo.c5
-rw-r--r--source/blender/editors/util/undo.c51
-rw-r--r--source/blender/editors/uvedit/CMakeLists.txt1
-rw-r--r--source/blender/editors/uvedit/uvedit_buttons.c10
-rw-r--r--source/blender/editors/uvedit/uvedit_draw.c689
-rw-r--r--source/blender/editors/uvedit/uvedit_intern.h2
-rw-r--r--source/blender/editors/uvedit/uvedit_ops.c335
-rw-r--r--source/blender/editors/uvedit/uvedit_smart_stitch.c146
-rw-r--r--source/blender/editors/uvedit/uvedit_unwrap_ops.c40
-rw-r--r--source/blender/freestyle/CMakeLists.txt5
-rw-r--r--source/blender/freestyle/FRS_freestyle.h7
-rw-r--r--source/blender/freestyle/intern/application/Controller.cpp8
-rw-r--r--source/blender/freestyle/intern/application/Controller.h2
-rw-r--r--source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp8
-rw-r--r--source/blender/freestyle/intern/blender_interface/BlenderFileLoader.h4
-rw-r--r--source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp109
-rw-r--r--source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h2
-rw-r--r--source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp38
-rw-r--r--source/blender/freestyle/intern/scene_graph/IndexedFaceSet.cpp9
-rw-r--r--source/blender/freestyle/intern/scene_graph/IndexedFaceSet.h15
-rw-r--r--source/blender/freestyle/intern/scene_graph/NodeSceneRenderLayer.cpp35
-rw-r--r--source/blender/freestyle/intern/scene_graph/NodeSceneRenderLayer.h66
-rw-r--r--source/blender/freestyle/intern/scene_graph/NodeViewLayer.cpp35
-rw-r--r--source/blender/freestyle/intern/scene_graph/NodeViewLayer.h66
-rw-r--r--source/blender/freestyle/intern/scene_graph/SceneHash.cpp4
-rw-r--r--source/blender/freestyle/intern/scene_graph/SceneHash.h4
-rw-r--r--source/blender/freestyle/intern/scene_graph/SceneVisitor.h4
-rw-r--r--source/blender/gpu/CMakeLists.txt109
-rw-r--r--source/blender/gpu/GPU_basic_shader.h9
-rw-r--r--source/blender/gpu/GPU_batch.h68
-rw-r--r--source/blender/gpu/GPU_buffers.h8
-rw-r--r--source/blender/gpu/GPU_debug.h18
-rw-r--r--source/blender/gpu/GPU_draw.h43
-rw-r--r--source/blender/gpu/GPU_extensions.h9
-rw-r--r--source/blender/gpu/GPU_framebuffer.h21
-rw-r--r--source/blender/gpu/GPU_glew.h4
-rw-r--r--source/blender/gpu/GPU_immediate.h58
-rw-r--r--source/blender/gpu/GPU_immediate_util.h64
-rw-r--r--source/blender/gpu/GPU_lamp.h77
-rw-r--r--source/blender/gpu/GPU_legacy_stubs.h457
-rw-r--r--source/blender/gpu/GPU_material.h71
-rw-r--r--source/blender/gpu/GPU_matrix.h190
-rw-r--r--source/blender/gpu/GPU_select.h3
-rw-r--r--source/blender/gpu/GPU_shader.h114
-rw-r--r--source/blender/gpu/GPU_texture.h133
-rw-r--r--source/blender/gpu/GPU_uniformbuffer.h59
-rw-r--r--source/blender/gpu/GPU_viewport.h134
-rw-r--r--source/blender/gpu/intern/gpu_basic_shader.c413
-rw-r--r--source/blender/gpu/intern/gpu_batch.c281
-rw-r--r--source/blender/gpu/intern/gpu_batch_presets.c200
-rw-r--r--source/blender/gpu/intern/gpu_buffers.c796
-rw-r--r--source/blender/gpu/intern/gpu_codegen.c554
-rw-r--r--source/blender/gpu/intern/gpu_codegen.h23
-rw-r--r--source/blender/gpu/intern/gpu_compositing.c341
-rw-r--r--source/blender/gpu/intern/gpu_debug.c700
-rw-r--r--source/blender/gpu/intern/gpu_draw.c661
-rw-r--r--source/blender/gpu/intern/gpu_extensions.c122
-rw-r--r--source/blender/gpu/intern/gpu_framebuffer.c559
-rw-r--r--source/blender/gpu/intern/gpu_immediate.c88
-rw-r--r--source/blender/gpu/intern/gpu_immediate_util.c424
-rw-r--r--source/blender/gpu/intern/gpu_init_exit.c11
-rw-r--r--source/blender/gpu/intern/gpu_lamp.c483
-rw-r--r--source/blender/gpu/intern/gpu_lamp_private.h84
-rw-r--r--source/blender/gpu/intern/gpu_material.c920
-rw-r--r--source/blender/gpu/intern/gpu_matrix.c649
-rw-r--r--source/blender/gpu/intern/gpu_select.c33
-rw-r--r--source/blender/gpu/intern/gpu_select_pick.c10
-rw-r--r--source/blender/gpu/intern/gpu_select_sample_query.c6
-rw-r--r--source/blender/gpu/intern/gpu_shader.c713
-rw-r--r--source/blender/gpu/intern/gpu_shader_private.h45
-rw-r--r--source/blender/gpu/intern/gpu_texture.c941
-rw-r--r--source/blender/gpu/intern/gpu_uniformbuffer.c378
-rw-r--r--source/blender/gpu/intern/gpu_viewport.c686
-rw-r--r--source/blender/gpu/shaders/gpu_shader_2D_flat_color_vert.glsl13
-rw-r--r--source/blender/gpu/shaders/gpu_shader_2D_image_vert.glsl13
-rw-r--r--source/blender/gpu/shaders/gpu_shader_2D_line_dashed_frag.glsl54
-rw-r--r--source/blender/gpu/shaders/gpu_shader_2D_line_dashed_geom.glsl56
-rw-r--r--source/blender/gpu/shaders/gpu_shader_2D_line_dashed_uniform_color_vert.glsl21
-rw-r--r--source/blender/gpu/shaders/gpu_shader_2D_line_dashed_width_geom.glsl59
-rw-r--r--source/blender/gpu/shaders/gpu_shader_2D_point_uniform_size_aa_vert.glsl21
-rw-r--r--source/blender/gpu/shaders/gpu_shader_2D_point_uniform_size_outline_aa_vert.glsl24
-rw-r--r--source/blender/gpu/shaders/gpu_shader_2D_point_uniform_size_varying_color_outline_aa_vert.glsl27
-rw-r--r--source/blender/gpu/shaders/gpu_shader_2D_point_varying_size_varying_color_vert.glsl14
-rw-r--r--source/blender/gpu/shaders/gpu_shader_2D_smooth_color_frag.glsl8
-rw-r--r--source/blender/gpu/shaders/gpu_shader_2D_smooth_color_vert.glsl13
-rw-r--r--source/blender/gpu/shaders/gpu_shader_2D_vert.glsl9
-rw-r--r--source/blender/gpu/shaders/gpu_shader_3D_clipped_uniform_color_vert.glsl12
-rw-r--r--source/blender/gpu/shaders/gpu_shader_3D_flat_color_vert.glsl26
-rw-r--r--source/blender/gpu/shaders/gpu_shader_3D_groundline_geom.glsl16
-rw-r--r--source/blender/gpu/shaders/gpu_shader_3D_groundpoint_vert.glsl11
-rw-r--r--source/blender/gpu/shaders/gpu_shader_3D_image_vert.glsl12
-rw-r--r--source/blender/gpu/shaders/gpu_shader_3D_line_dashed_uniform_color_legacy_vert.glsl26
-rw-r--r--source/blender/gpu/shaders/gpu_shader_3D_line_dashed_uniform_color_vert.glsl21
-rw-r--r--source/blender/gpu/shaders/gpu_shader_3D_normal_smooth_color_vert.glsl22
-rw-r--r--source/blender/gpu/shaders/gpu_shader_3D_normal_vert.glsl13
-rw-r--r--source/blender/gpu/shaders/gpu_shader_3D_passthrough_vert.glsl8
-rw-r--r--source/blender/gpu/shaders/gpu_shader_3D_point_fixed_size_varying_color_vert.glsl12
-rw-r--r--source/blender/gpu/shaders/gpu_shader_3D_point_uniform_size_aa_vert.glsl21
-rw-r--r--source/blender/gpu/shaders/gpu_shader_3D_point_uniform_size_outline_aa_vert.glsl24
-rw-r--r--source/blender/gpu/shaders/gpu_shader_3D_point_varying_size_varying_color_vert.glsl14
-rw-r--r--source/blender/gpu/shaders/gpu_shader_3D_point_varying_size_vert.glsl11
-rw-r--r--source/blender/gpu/shaders/gpu_shader_3D_smooth_color_frag.glsl8
-rw-r--r--source/blender/gpu/shaders/gpu_shader_3D_smooth_color_vert.glsl13
-rw-r--r--source/blender/gpu/shaders/gpu_shader_3D_vert.glsl9
-rw-r--r--source/blender/gpu/shaders/gpu_shader_basic_frag.glsl37
-rw-r--r--source/blender/gpu/shaders/gpu_shader_basic_geom.glsl6
-rw-r--r--source/blender/gpu/shaders/gpu_shader_basic_vert.glsl12
-rw-r--r--source/blender/gpu/shaders/gpu_shader_checker_frag.glsl20
-rw-r--r--source/blender/gpu/shaders/gpu_shader_depth_only_frag.glsl6
-rw-r--r--source/blender/gpu/shaders/gpu_shader_diag_stripes_frag.glsl20
-rw-r--r--source/blender/gpu/shaders/gpu_shader_edges_front_back_ortho_vert.glsl54
-rw-r--r--source/blender/gpu/shaders/gpu_shader_edges_front_back_persp_geom.glsl60
-rw-r--r--source/blender/gpu/shaders/gpu_shader_edges_front_back_persp_legacy_vert.glsl68
-rw-r--r--source/blender/gpu/shaders/gpu_shader_edges_front_back_persp_vert.glsl44
-rw-r--r--source/blender/gpu/shaders/gpu_shader_edges_overlay_frag.glsl20
-rw-r--r--source/blender/gpu/shaders/gpu_shader_edges_overlay_geom.glsl67
-rw-r--r--source/blender/gpu/shaders/gpu_shader_edges_overlay_simple_geom.glsl52
-rw-r--r--source/blender/gpu/shaders/gpu_shader_edges_overlay_vert.glsl13
-rw-r--r--source/blender/gpu/shaders/gpu_shader_fire_frag.glsl14
-rw-r--r--source/blender/gpu/shaders/gpu_shader_flat_color_alpha_test_0_frag.glsl11
-rw-r--r--source/blender/gpu/shaders/gpu_shader_flat_color_frag.glsl8
-rw-r--r--source/blender/gpu/shaders/gpu_shader_fullscreen_vert.glsl10
-rw-r--r--source/blender/gpu/shaders/gpu_shader_fx_depth_resolve.glsl5
-rw-r--r--source/blender/gpu/shaders/gpu_shader_fx_dof_frag.glsl111
-rw-r--r--source/blender/gpu/shaders/gpu_shader_fx_dof_hq_frag.glsl68
-rw-r--r--source/blender/gpu/shaders/gpu_shader_fx_dof_hq_geo.glsl39
-rw-r--r--source/blender/gpu/shaders/gpu_shader_fx_dof_hq_vert.glsl34
-rw-r--r--source/blender/gpu/shaders/gpu_shader_fx_dof_vert.glsl45
-rw-r--r--source/blender/gpu/shaders/gpu_shader_fx_lib.glsl7
-rw-r--r--source/blender/gpu/shaders/gpu_shader_fx_ssao_frag.glsl23
-rw-r--r--source/blender/gpu/shaders/gpu_shader_fx_vert.glsl9
-rw-r--r--source/blender/gpu/shaders/gpu_shader_geometry.glsl13
-rw-r--r--source/blender/gpu/shaders/gpu_shader_image_alpha_color_frag.glsl11
-rw-r--r--source/blender/gpu/shaders/gpu_shader_image_color_frag.glsl11
-rw-r--r--source/blender/gpu/shaders/gpu_shader_image_depth_linear_frag.glsl16
-rw-r--r--source/blender/gpu/shaders/gpu_shader_image_interlace_frag.glsl34
-rw-r--r--source/blender/gpu/shaders/gpu_shader_image_linear_frag.glsl30
-rw-r--r--source/blender/gpu/shaders/gpu_shader_image_mask_uniform_color_frag.glsl12
-rw-r--r--source/blender/gpu/shaders/gpu_shader_image_modulate_alpha_frag.glsl12
-rw-r--r--source/blender/gpu/shaders/gpu_shader_image_rect_modulate_alpha_frag.glsl12
-rw-r--r--source/blender/gpu/shaders/gpu_shader_image_shuffle_color_frag.glsl16
-rw-r--r--source/blender/gpu/shaders/gpu_shader_instance_bone_envelope_solid_vert.glsl121
-rw-r--r--source/blender/gpu/shaders/gpu_shader_instance_bone_envelope_wire_vert.glsl100
-rw-r--r--source/blender/gpu/shaders/gpu_shader_instance_camera_vert.glsl50
-rw-r--r--source/blender/gpu/shaders/gpu_shader_instance_distance_line_vert.glsl25
-rw-r--r--source/blender/gpu/shaders/gpu_shader_instance_edges_variying_color_geom.glsl57
-rw-r--r--source/blender/gpu/shaders/gpu_shader_instance_edges_variying_color_vert.glsl63
-rw-r--r--source/blender/gpu/shaders/gpu_shader_instance_mball_helpers_vert.glsl36
-rw-r--r--source/blender/gpu/shaders/gpu_shader_instance_objectspace_variying_color_vert.glsl27
-rw-r--r--source/blender/gpu/shaders/gpu_shader_instance_screen_aligned_vert.glsl32
-rw-r--r--source/blender/gpu/shaders/gpu_shader_instance_screenspace_variying_color_vert.glsl29
-rw-r--r--source/blender/gpu/shaders/gpu_shader_instance_variying_size_variying_color_vert.glsl22
-rw-r--r--source/blender/gpu/shaders/gpu_shader_instance_vert.glsl13
-rw-r--r--source/blender/gpu/shaders/gpu_shader_keyframe_diamond_frag.glsl31
-rw-r--r--source/blender/gpu/shaders/gpu_shader_keyframe_diamond_vert.glsl34
-rw-r--r--source/blender/gpu/shaders/gpu_shader_material.glsl819
-rw-r--r--source/blender/gpu/shaders/gpu_shader_point_uniform_color_aa_frag.glsl24
-rw-r--r--source/blender/gpu/shaders/gpu_shader_point_uniform_color_frag.glsl17
-rw-r--r--source/blender/gpu/shaders/gpu_shader_point_uniform_color_outline_aa_frag.glsl36
-rw-r--r--source/blender/gpu/shaders/gpu_shader_point_varying_color_frag.glsl16
-rw-r--r--source/blender/gpu/shaders/gpu_shader_point_varying_color_outline_aa_frag.glsl31
-rw-r--r--source/blender/gpu/shaders/gpu_shader_sep_gaussian_blur_frag.glsl19
-rw-r--r--source/blender/gpu/shaders/gpu_shader_sep_gaussian_blur_vert.glsl10
-rw-r--r--source/blender/gpu/shaders/gpu_shader_simple_lighting_frag.glsl17
-rw-r--r--source/blender/gpu/shaders/gpu_shader_simple_lighting_smooth_color_alpha_frag.glsl14
-rw-r--r--source/blender/gpu/shaders/gpu_shader_simple_lighting_smooth_color_frag.glsl16
-rw-r--r--source/blender/gpu/shaders/gpu_shader_smoke_frag.glsl19
-rw-r--r--source/blender/gpu/shaders/gpu_shader_smoke_vert.glsl7
-rw-r--r--source/blender/gpu/shaders/gpu_shader_text_frag.glsl15
-rw-r--r--source/blender/gpu/shaders/gpu_shader_text_vert.glsl16
-rw-r--r--source/blender/gpu/shaders/gpu_shader_uniform_color_frag.glsl21
-rw-r--r--source/blender/gpu/shaders/gpu_shader_vertex.glsl15
-rw-r--r--source/blender/gpu/shaders/gpu_shader_vertex_world.glsl5
-rw-r--r--source/blender/gpu/shaders/gpu_shader_vsm_store_frag.glsl6
-rw-r--r--source/blender/gpu/shaders/gpu_shader_vsm_store_vert.glsl7
-rw-r--r--source/blender/ikplugin/BIK_api.h5
-rw-r--r--source/blender/ikplugin/intern/ikplugin_api.c8
-rw-r--r--source/blender/ikplugin/intern/ikplugin_api.h5
-rw-r--r--source/blender/ikplugin/intern/iksolver_plugin.c14
-rw-r--r--source/blender/ikplugin/intern/iksolver_plugin.h7
-rw-r--r--source/blender/ikplugin/intern/itasc_plugin.cpp42
-rw-r--r--source/blender/ikplugin/intern/itasc_plugin.h4
-rw-r--r--source/blender/imbuf/intern/thumbs.c4
-rw-r--r--source/blender/imbuf/intern/thumbs_blend.c1
-rw-r--r--source/blender/makesdna/DNA_ID.h133
-rw-r--r--source/blender/makesdna/DNA_action_types.h18
-rw-r--r--source/blender/makesdna/DNA_camera_types.h53
-rw-r--r--source/blender/makesdna/DNA_curve_types.h1
-rw-r--r--source/blender/makesdna/DNA_customdata_types.h8
-rw-r--r--source/blender/makesdna/DNA_defs.h6
-rw-r--r--source/blender/makesdna/DNA_fileglobal_types.h6
-rw-r--r--source/blender/makesdna/DNA_gpencil_types.h5
-rw-r--r--source/blender/makesdna/DNA_gpu_types.h2
-rw-r--r--source/blender/makesdna/DNA_group_types.h7
-rw-r--r--source/blender/makesdna/DNA_lamp_types.h11
-rw-r--r--source/blender/makesdna/DNA_lattice_types.h1
-rw-r--r--source/blender/makesdna/DNA_layer_types.h163
-rw-r--r--source/blender/makesdna/DNA_lightprobe_types.h111
-rw-r--r--source/blender/makesdna/DNA_material_types.h52
-rw-r--r--source/blender/makesdna/DNA_mesh_types.h2
-rw-r--r--source/blender/makesdna/DNA_meshdata_types.h76
-rw-r--r--source/blender/makesdna/DNA_meta_types.h8
-rw-r--r--source/blender/makesdna/DNA_modifier_types.h2
-rw-r--r--source/blender/makesdna/DNA_node_types.h5
-rw-r--r--source/blender/makesdna/DNA_object_force_types.h6
-rw-r--r--source/blender/makesdna/DNA_object_types.h88
-rw-r--r--source/blender/makesdna/DNA_outliner_types.h19
-rw-r--r--source/blender/makesdna/DNA_particle_types.h10
-rw-r--r--source/blender/makesdna/DNA_scene_types.h154
-rw-r--r--source/blender/makesdna/DNA_screen_types.h23
-rw-r--r--source/blender/makesdna/DNA_space_types.h99
-rw-r--r--source/blender/makesdna/DNA_text_types.h2
-rw-r--r--source/blender/makesdna/DNA_userdef_types.h23
-rw-r--r--source/blender/makesdna/DNA_view3d_types.h84
-rw-r--r--source/blender/makesdna/DNA_windowmanager_types.h17
-rw-r--r--source/blender/makesdna/DNA_workspace_types.h159
-rw-r--r--source/blender/makesdna/DNA_world_types.h10
-rw-r--r--source/blender/makesdna/intern/dna_genfile.c78
-rw-r--r--source/blender/makesdna/intern/makesdna.c19
-rw-r--r--source/blender/makesrna/RNA_access.h92
-rw-r--r--source/blender/makesrna/RNA_define.h10
-rw-r--r--source/blender/makesrna/RNA_enum_types.h4
-rw-r--r--source/blender/makesrna/RNA_types.h17
-rw-r--r--source/blender/makesrna/intern/CMakeLists.txt12
-rw-r--r--source/blender/makesrna/intern/makesrna.c38
-rw-r--r--source/blender/makesrna/intern/rna_ID.c75
-rw-r--r--source/blender/makesrna/intern/rna_access.c846
-rw-r--r--source/blender/makesrna/intern/rna_animation.c39
-rw-r--r--source/blender/makesrna/intern/rna_armature.c11
-rw-r--r--source/blender/makesrna/intern/rna_boid.c14
-rw-r--r--source/blender/makesrna/intern/rna_brush.c42
-rw-r--r--source/blender/makesrna/intern/rna_cachefile.c5
-rw-r--r--source/blender/makesrna/intern/rna_camera.c211
-rw-r--r--source/blender/makesrna/intern/rna_cloth.c9
-rw-r--r--source/blender/makesrna/intern/rna_color.c15
-rw-r--r--source/blender/makesrna/intern/rna_constraint.c1
-rw-r--r--source/blender/makesrna/intern/rna_context.c105
-rw-r--r--source/blender/makesrna/intern/rna_curve.c12
-rw-r--r--source/blender/makesrna/intern/rna_curve_api.c10
-rw-r--r--source/blender/makesrna/intern/rna_define.c31
-rw-r--r--source/blender/makesrna/intern/rna_depsgraph.c249
-rw-r--r--source/blender/makesrna/intern/rna_dynamicpaint.c7
-rw-r--r--source/blender/makesrna/intern/rna_fcurve.c10
-rw-r--r--source/blender/makesrna/intern/rna_fluidsim.c5
-rw-r--r--source/blender/makesrna/intern/rna_group.c31
-rw-r--r--source/blender/makesrna/intern/rna_image.c35
-rw-r--r--source/blender/makesrna/intern/rna_image_api.c5
-rw-r--r--source/blender/makesrna/intern/rna_internal.h78
-rw-r--r--source/blender/makesrna/intern/rna_internal_types.h65
-rw-r--r--source/blender/makesrna/intern/rna_key.c5
-rw-r--r--source/blender/makesrna/intern/rna_lamp.c92
-rw-r--r--source/blender/makesrna/intern/rna_lattice.c7
-rw-r--r--source/blender/makesrna/intern/rna_lattice_api.c10
-rw-r--r--source/blender/makesrna/intern/rna_layer.c2313
-rw-r--r--source/blender/makesrna/intern/rna_lightprobe.c211
-rw-r--r--source/blender/makesrna/intern/rna_linestyle.c21
-rw-r--r--source/blender/makesrna/intern/rna_main.c14
-rw-r--r--source/blender/makesrna/intern/rna_main_api.c121
-rw-r--r--source/blender/makesrna/intern/rna_mask.c11
-rw-r--r--source/blender/makesrna/intern/rna_material.c101
-rw-r--r--source/blender/makesrna/intern/rna_mesh.c529
-rw-r--r--source/blender/makesrna/intern/rna_mesh_api.c19
-rw-r--r--source/blender/makesrna/intern/rna_mesh_utils.h11
-rw-r--r--source/blender/makesrna/intern/rna_meta.c11
-rw-r--r--source/blender/makesrna/intern/rna_meta_api.c9
-rw-r--r--source/blender/makesrna/intern/rna_modifier.c39
-rw-r--r--source/blender/makesrna/intern/rna_movieclip.c4
-rw-r--r--source/blender/makesrna/intern/rna_nla.c1
-rw-r--r--source/blender/makesrna/intern/rna_nodetree.c48
-rw-r--r--source/blender/makesrna/intern/rna_object.c601
-rw-r--r--source/blender/makesrna/intern/rna_object_api.c150
-rw-r--r--source/blender/makesrna/intern/rna_object_force.c48
-rw-r--r--source/blender/makesrna/intern/rna_particle.c49
-rw-r--r--source/blender/makesrna/intern/rna_pose.c26
-rw-r--r--source/blender/makesrna/intern/rna_render.c94
-rw-r--r--source/blender/makesrna/intern/rna_rigidbody.c1
-rw-r--r--source/blender/makesrna/intern/rna_rna.c1017
-rw-r--r--source/blender/makesrna/intern/rna_scene.c989
-rw-r--r--source/blender/makesrna/intern/rna_scene_api.c72
-rw-r--r--source/blender/makesrna/intern/rna_screen.c92
-rw-r--r--source/blender/makesrna/intern/rna_sculpt_paint.c98
-rw-r--r--source/blender/makesrna/intern/rna_smoke.c10
-rw-r--r--source/blender/makesrna/intern/rna_space.c548
-rw-r--r--source/blender/makesrna/intern/rna_space_api.c17
-rw-r--r--source/blender/makesrna/intern/rna_speaker.c1
-rw-r--r--source/blender/makesrna/intern/rna_texture.c34
-rw-r--r--source/blender/makesrna/intern/rna_tracking.c7
-rw-r--r--source/blender/makesrna/intern/rna_ui_api.c36
-rw-r--r--source/blender/makesrna/intern/rna_userdef.c140
-rw-r--r--source/blender/makesrna/intern/rna_vfont.c5
-rw-r--r--source/blender/makesrna/intern/rna_wm.c195
-rw-r--r--source/blender/makesrna/intern/rna_wm_api.c45
-rw-r--r--source/blender/makesrna/intern/rna_wm_manipulator.c1314
-rw-r--r--source/blender/makesrna/intern/rna_wm_manipulator_api.c290
-rw-r--r--source/blender/makesrna/intern/rna_workspace.c167
-rw-r--r--source/blender/makesrna/intern/rna_world.c24
-rw-r--r--source/blender/modifiers/CMakeLists.txt7
-rw-r--r--source/blender/modifiers/intern/MOD_armature.c29
-rw-r--r--source/blender/modifiers/intern/MOD_array.c58
-rw-r--r--source/blender/modifiers/intern/MOD_bevel.c5
-rw-r--r--source/blender/modifiers/intern/MOD_boolean.c21
-rw-r--r--source/blender/modifiers/intern/MOD_build.c5
-rw-r--r--source/blender/modifiers/intern/MOD_cast.c27
-rw-r--r--source/blender/modifiers/intern/MOD_cloth.c30
-rw-r--r--source/blender/modifiers/intern/MOD_collision.c5
-rw-r--r--source/blender/modifiers/intern/MOD_correctivesmooth.c5
-rw-r--r--source/blender/modifiers/intern/MOD_curve.c31
-rw-r--r--source/blender/modifiers/intern/MOD_datatransfer.c23
-rw-r--r--source/blender/modifiers/intern/MOD_decimate.c5
-rw-r--r--source/blender/modifiers/intern/MOD_displace.c33
-rw-r--r--source/blender/modifiers/intern/MOD_dynamicpaint.c45
-rw-r--r--source/blender/modifiers/intern/MOD_edgesplit.c4
-rw-r--r--source/blender/modifiers/intern/MOD_explode.c17
-rw-r--r--source/blender/modifiers/intern/MOD_fluidsim.c40
-rw-r--r--source/blender/modifiers/intern/MOD_hook.c25
-rw-r--r--source/blender/modifiers/intern/MOD_laplaciandeform.c5
-rw-r--r--source/blender/modifiers/intern/MOD_laplaciansmooth.c5
-rw-r--r--source/blender/modifiers/intern/MOD_lattice.c27
-rw-r--r--source/blender/modifiers/intern/MOD_mask.c24
-rw-r--r--source/blender/modifiers/intern/MOD_meshcache.c7
-rw-r--r--source/blender/modifiers/intern/MOD_meshdeform.c32
-rw-r--r--source/blender/modifiers/intern/MOD_meshsequencecache.c23
-rw-r--r--source/blender/modifiers/intern/MOD_mirror.c21
-rw-r--r--source/blender/modifiers/intern/MOD_multires.c9
-rw-r--r--source/blender/modifiers/intern/MOD_none.c1
-rw-r--r--source/blender/modifiers/intern/MOD_normal_edit.c20
-rw-r--r--source/blender/modifiers/intern/MOD_ocean.c6
-rw-r--r--source/blender/modifiers/intern/MOD_particleinstance.c25
-rw-r--r--source/blender/modifiers/intern/MOD_particlesystem.c7
-rw-r--r--source/blender/modifiers/intern/MOD_remesh.c6
-rw-r--r--source/blender/modifiers/intern/MOD_screw.c24
-rw-r--r--source/blender/modifiers/intern/MOD_shapekey.c17
-rw-r--r--source/blender/modifiers/intern/MOD_shrinkwrap.c31
-rw-r--r--source/blender/modifiers/intern/MOD_simpledeform.c24
-rw-r--r--source/blender/modifiers/intern/MOD_skin.c2
-rw-r--r--source/blender/modifiers/intern/MOD_smoke.c36
-rw-r--r--source/blender/modifiers/intern/MOD_smooth.c5
-rw-r--r--source/blender/modifiers/intern/MOD_softbody.c29
-rw-r--r--source/blender/modifiers/intern/MOD_solidify.c5
-rw-r--r--source/blender/modifiers/intern/MOD_subsurf.c33
-rw-r--r--source/blender/modifiers/intern/MOD_surface.c5
-rw-r--r--source/blender/modifiers/intern/MOD_surfacedeform.c26
-rw-r--r--source/blender/modifiers/intern/MOD_triangulate.c2
-rw-r--r--source/blender/modifiers/intern/MOD_uvproject.c53
-rw-r--r--source/blender/modifiers/intern/MOD_uvwarp.c42
-rw-r--r--source/blender/modifiers/intern/MOD_warp.c30
-rw-r--r--source/blender/modifiers/intern/MOD_wave.c46
-rw-r--r--source/blender/modifiers/intern/MOD_weightvgedit.c27
-rw-r--r--source/blender/modifiers/intern/MOD_weightvgmix.c26
-rw-r--r--source/blender/modifiers/intern/MOD_weightvgproximity.c32
-rw-r--r--source/blender/modifiers/intern/MOD_wireframe.c4
-rw-r--r--source/blender/nodes/CMakeLists.txt2
-rw-r--r--source/blender/nodes/NOD_composite.h2
-rw-r--r--source/blender/nodes/NOD_shader.h3
-rw-r--r--source/blender/nodes/NOD_socket.h2
-rw-r--r--source/blender/nodes/NOD_static_types.h1
-rw-r--r--source/blender/nodes/composite/node_composite_tree.c6
-rw-r--r--source/blender/nodes/composite/nodes/node_composite_image.c17
-rw-r--r--source/blender/nodes/intern/node_socket.c2
-rw-r--r--source/blender/nodes/shader/node_shader_tree.c140
-rw-r--r--source/blender/nodes/shader/node_shader_util.c2
-rw-r--r--source/blender/nodes/shader/node_shader_util.h2
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_add_shader.c4
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_ambient_occlusion.c4
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_attribute.c19
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_background.c4
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_bevel.c4
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_brightness.c4
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_bsdf_anisotropic.c8
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_bsdf_diffuse.c8
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_bsdf_glass.c8
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_bsdf_glossy.c8
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_bsdf_hair.c4
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_bsdf_principled.c44
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_bsdf_refraction.c8
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_bsdf_toon.c4
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_bsdf_translucent.c8
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_bsdf_transparent.c4
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_bsdf_velvet.c8
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_bump.c2
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_camera.c4
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_curves.c4
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_displacement.c4
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_eevee_specular.c87
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_emission.c4
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_fresnel.c4
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_gamma.c4
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_geom.c2
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_geometry.c5
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_hueSatVal.c4
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_invert.c4
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_lamp.c2
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_layer_weight.c4
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_light_falloff.c4
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_light_path.c4
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_mapping.c2
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_math.c6
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_mixRgb.c3
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_mix_shader.c4
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_normal.c6
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_object_info.c4
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_output.c6
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_output_material.c6
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_output_world.c4
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_particle_info.c4
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_rgb.c6
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_sepcombHSV.c8
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_sepcombRGB.c8
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_sepcombXYZ.c8
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_squeeze.c4
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_subsurface_scattering.c19
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_tangent.c23
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_tex_brick.c2
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_tex_checker.c2
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_tex_coord.c10
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_tex_environment.c6
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_tex_gradient.c2
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_tex_image.c8
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_tex_magic.c2
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_tex_musgrave.c2
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_tex_noise.c2
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_tex_sky.c2
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_tex_voronoi.c2
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_tex_wave.c2
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_texture.c2
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_uvmap.c2
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_valToRgb.c6
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_value.c6
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_vectMath.c6
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_vector_displacement.c5
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_volume_absorption.c4
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_volume_scatter.c4
-rw-r--r--source/blender/nodes/texture/node_texture_tree.c15
-rw-r--r--source/blender/python/CMakeLists.txt1
-rw-r--r--source/blender/python/bmesh/CMakeLists.txt1
-rw-r--r--source/blender/python/bmesh/bmesh_py_api.c5
-rw-r--r--source/blender/python/bmesh/bmesh_py_types.c14
-rw-r--r--source/blender/python/bmesh/bmesh_py_types_customdata.c21
-rw-r--r--source/blender/python/bmesh/bmesh_py_types_meshdata.c91
-rw-r--r--source/blender/python/bmesh/bmesh_py_types_meshdata.h4
-rw-r--r--source/blender/python/gawain/CMakeLists.txt47
-rw-r--r--source/blender/python/gawain/gwn_py_api.c63
-rw-r--r--source/blender/python/gawain/gwn_py_api.h30
-rw-r--r--source/blender/python/gawain/gwn_py_types.c847
-rw-r--r--source/blender/python/gawain/gwn_py_types.h67
-rw-r--r--source/blender/python/generic/bgl.c1217
-rw-r--r--source/blender/python/generic/blf_py_api.c4
-rw-r--r--source/blender/python/intern/CMakeLists.txt8
-rw-r--r--source/blender/python/intern/bpy.c5
-rw-r--r--source/blender/python/intern/bpy_app_handlers.c6
-rw-r--r--source/blender/python/intern/bpy_interface.c5
-rw-r--r--source/blender/python/intern/bpy_intern_string.c44
-rw-r--r--source/blender/python/intern/bpy_intern_string.h21
-rw-r--r--source/blender/python/intern/bpy_library_load.c11
-rw-r--r--source/blender/python/intern/bpy_manipulator_wrap.c236
-rw-r--r--source/blender/python/intern/bpy_manipulator_wrap.h36
-rw-r--r--source/blender/python/intern/bpy_msgbus.c400
-rw-r--r--source/blender/python/intern/bpy_msgbus.h30
-rw-r--r--source/blender/python/intern/bpy_props.h2
-rw-r--r--source/blender/python/intern/bpy_rna.c32
-rw-r--r--source/blender/python/intern/bpy_rna_manipulator.c565
-rw-r--r--source/blender/python/intern/bpy_rna_manipulator.h32
-rw-r--r--source/blender/python/intern/gpu.c8
-rw-r--r--source/blender/python/intern/gpu.h2
-rw-r--r--source/blender/python/intern/gpu_offscreen.c28
-rw-r--r--source/blender/python/intern/gpu_py_matrix.c552
-rw-r--r--source/blender/python/intern/gpu_py_select.c92
-rw-r--r--source/blender/python/mathutils/mathutils_bvhtree.c7
-rw-r--r--source/blender/render/CMakeLists.txt1
-rw-r--r--source/blender/render/extern/include/RE_engine.h31
-rw-r--r--source/blender/render/extern/include/RE_multires_bake.h6
-rw-r--r--source/blender/render/extern/include/RE_pipeline.h20
-rw-r--r--source/blender/render/extern/include/RE_render_ext.h5
-rw-r--r--source/blender/render/extern/include/RE_shader_ext.h2
-rw-r--r--source/blender/render/intern/include/render_types.h5
-rw-r--r--source/blender/render/intern/include/rendercore.h2
-rw-r--r--source/blender/render/intern/include/renderpipeline.h5
-rw-r--r--source/blender/render/intern/source/bake.c7
-rw-r--r--source/blender/render/intern/source/convertblender.c175
-rw-r--r--source/blender/render/intern/source/envmap.c21
-rw-r--r--source/blender/render/intern/source/external_engine.c158
-rw-r--r--source/blender/render/intern/source/initrender.c7
-rw-r--r--source/blender/render/intern/source/multires_bake.c57
-rw-r--r--source/blender/render/intern/source/pipeline.c260
-rw-r--r--source/blender/render/intern/source/pointdensity.c54
-rw-r--r--source/blender/render/intern/source/rayshade.c43
-rw-r--r--source/blender/render/intern/source/render_result.c94
-rw-r--r--source/blender/render/intern/source/rendercore.c16
-rw-r--r--source/blender/render/intern/source/shadeinput.c53
-rw-r--r--source/blender/render/intern/source/shadeoutput.c26
-rw-r--r--source/blender/render/intern/source/volumetric.c2
-rw-r--r--source/blender/render/intern/source/zbuf.c6
-rw-r--r--source/blender/windowmanager/CMakeLists.txt24
-rw-r--r--source/blender/windowmanager/WM_api.h51
-rw-r--r--source/blender/windowmanager/WM_message.h30
-rw-r--r--source/blender/windowmanager/WM_types.h22
-rw-r--r--source/blender/windowmanager/intern/wm.c39
-rw-r--r--source/blender/windowmanager/intern/wm_dragdrop.c18
-rw-r--r--source/blender/windowmanager/intern/wm_draw.c228
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c408
-rw-r--r--source/blender/windowmanager/intern/wm_files.c306
-rw-r--r--source/blender/windowmanager/intern/wm_files_link.c97
-rw-r--r--source/blender/windowmanager/intern/wm_gesture.c262
-rw-r--r--source/blender/windowmanager/intern/wm_init_exit.c22
-rw-r--r--source/blender/windowmanager/intern/wm_operators.c403
-rw-r--r--source/blender/windowmanager/intern/wm_playanim.c93
-rw-r--r--source/blender/windowmanager/intern/wm_stereo.c198
-rw-r--r--source/blender/windowmanager/intern/wm_subwindow.c33
-rw-r--r--source/blender/windowmanager/intern/wm_toolsystem.c107
-rw-r--r--source/blender/windowmanager/intern/wm_tooltip.c10
-rw-r--r--source/blender/windowmanager/intern/wm_window.c334
-rw-r--r--source/blender/windowmanager/manipulators/WM_manipulator_api.h334
-rw-r--r--source/blender/windowmanager/manipulators/WM_manipulator_types.h417
-rw-r--r--source/blender/windowmanager/manipulators/intern/wm_manipulator.c762
-rw-r--r--source/blender/windowmanager/manipulators/intern/wm_manipulator_group.c925
-rw-r--r--source/blender/windowmanager/manipulators/intern/wm_manipulator_group_type.c198
-rw-r--r--source/blender/windowmanager/manipulators/intern/wm_manipulator_intern.h143
-rw-r--r--source/blender/windowmanager/manipulators/intern/wm_manipulator_map.c1197
-rw-r--r--source/blender/windowmanager/manipulators/intern/wm_manipulator_target_props.c364
-rw-r--r--source/blender/windowmanager/manipulators/intern/wm_manipulator_type.c212
-rw-r--r--source/blender/windowmanager/manipulators/wm_manipulator_fn.h88
-rw-r--r--source/blender/windowmanager/manipulators/wm_manipulator_wmapi.h98
-rw-r--r--source/blender/windowmanager/message_bus/intern/wm_message_bus.c250
-rw-r--r--source/blender/windowmanager/message_bus/intern/wm_message_bus_intern.h55
-rw-r--r--source/blender/windowmanager/message_bus/intern/wm_message_bus_rna.c316
-rw-r--r--source/blender/windowmanager/message_bus/intern/wm_message_bus_static.c136
-rw-r--r--source/blender/windowmanager/message_bus/wm_message_bus.h256
-rw-r--r--source/blender/windowmanager/wm.h4
-rw-r--r--source/blender/windowmanager/wm_draw.h4
-rw-r--r--source/blender/windowmanager/wm_event_system.h3
-rw-r--r--source/blender/windowmanager/wm_event_types.h2
-rw-r--r--source/blender/windowmanager/wm_files.h1
-rw-r--r--source/blender/windowmanager/wm_window.h14
-rw-r--r--source/blenderplayer/CMakeLists.txt9
-rw-r--r--source/blenderplayer/bad_level_call_stubs/CMakeLists.txt3
-rw-r--r--source/blenderplayer/bad_level_call_stubs/stubs.c163
-rw-r--r--source/creator/CMakeLists.txt6
-rw-r--r--source/creator/creator.c4
-rw-r--r--source/creator/creator_args.c74
-rw-r--r--source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp4
-rw-r--r--source/gameengine/BlenderRoutines/CMakeLists.txt2
-rw-r--r--source/gameengine/BlenderRoutines/KX_BlenderCanvas.cpp3
-rw-r--r--source/gameengine/Converter/BL_ArmatureObject.cpp6
-rw-r--r--source/gameengine/Converter/BL_BlenderDataConversion.cpp48
-rw-r--r--source/gameengine/Converter/BL_ModifierDeformer.cpp8
-rw-r--r--source/gameengine/Converter/CMakeLists.txt2
-rw-r--r--source/gameengine/Converter/KX_ConvertActuators.cpp2
-rw-r--r--source/gameengine/GamePlayer/ghost/CMakeLists.txt3
-rw-r--r--source/gameengine/GamePlayer/ghost/GPG_Application.cpp4
-rw-r--r--source/gameengine/GamePlayer/ghost/GPG_ghost.cpp7
-rw-r--r--source/gameengine/Ketsji/BL_BlenderShader.cpp2
-rw-r--r--source/gameengine/Ketsji/BL_Material.cpp1
-rw-r--r--source/gameengine/Ketsji/BL_Material.h1
-rw-r--r--source/gameengine/Ketsji/CMakeLists.txt2
-rw-r--r--source/gameengine/Ketsji/KX_BlenderMaterial.cpp23
-rw-r--r--source/gameengine/Ketsji/KX_BlenderMaterial.h1
-rw-r--r--source/gameengine/Ketsji/KX_Camera.cpp51
-rw-r--r--source/gameengine/Ketsji/KX_Dome.cpp10
-rw-r--r--source/gameengine/Ketsji/KX_Light.cpp11
-rw-r--r--source/gameengine/Ketsji/KX_Light.h1
-rw-r--r--source/gameengine/Ketsji/KX_NavMeshObject.cpp4
-rw-r--r--source/gameengine/Ketsji/KX_Scene.cpp10
-rw-r--r--source/gameengine/Ketsji/KX_SoundActuator.cpp12
-rw-r--r--source/gameengine/Ketsji/KX_SoundActuator.h4
-rw-r--r--source/gameengine/Physics/Bullet/CcdPhysicsController.cpp8
-rw-r--r--source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp4
-rw-r--r--source/gameengine/Rasterizer/RAS_IPolygonMaterial.h2
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLLight.cpp1
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp41
m---------source/tools0
-rw-r--r--tests/gtests/alembic/CMakeLists.txt1
-rw-r--r--tests/gtests/alembic/abc_export_test.cc22
-rw-r--r--tests/gtests/blenlib/BLI_memiter_test.cc206
-rw-r--r--tests/gtests/blenlib/CMakeLists.txt1
-rw-r--r--tests/python/CMakeLists.txt2
-rw-r--r--tests/python/bl_alembic_import_test.py16
-rw-r--r--tests/python/bl_mesh_modifiers.py2
-rw-r--r--tests/python/view_layer/CMakeLists.txt186
-rw-r--r--tests/python/view_layer/test_active_collection.py70
-rw-r--r--tests/python/view_layer/test_background_set.py64
-rw-r--r--tests/python/view_layer/test_collection_new_sync.py47
-rw-r--r--tests/python/view_layer/test_collection_rename_a.py91
-rw-r--r--tests/python/view_layer/test_collection_rename_b.py58
-rw-r--r--tests/python/view_layer/test_evaluation_render_settings_a.py33
-rw-r--r--tests/python/view_layer/test_evaluation_render_settings_b.py34
-rw-r--r--tests/python/view_layer/test_evaluation_render_settings_c.py33
-rw-r--r--tests/python/view_layer/test_evaluation_render_settings_d.py33
-rw-r--r--tests/python/view_layer/test_evaluation_render_settings_e.py34
-rw-r--r--tests/python/view_layer/test_evaluation_render_settings_f.py35
-rw-r--r--tests/python/view_layer/test_evaluation_render_settings_g.py35
-rw-r--r--tests/python/view_layer/test_evaluation_render_settings_h.py35
-rw-r--r--tests/python/view_layer/test_evaluation_render_settings_i.py35
-rw-r--r--tests/python/view_layer/test_evaluation_selectability_a.py54
-rw-r--r--tests/python/view_layer/test_evaluation_selectability_b.py56
-rw-r--r--tests/python/view_layer/test_evaluation_selectability_c.py54
-rw-r--r--tests/python/view_layer/test_evaluation_selectability_d.py57
-rw-r--r--tests/python/view_layer/test_evaluation_selectability_e.py56
-rw-r--r--tests/python/view_layer/test_evaluation_selectability_f.py43
-rw-r--r--tests/python/view_layer/test_evaluation_visibility_a.py54
-rw-r--r--tests/python/view_layer/test_evaluation_visibility_b.py54
-rw-r--r--tests/python/view_layer/test_evaluation_visibility_c.py54
-rw-r--r--tests/python/view_layer/test_evaluation_visibility_d.py51
-rw-r--r--tests/python/view_layer/test_evaluation_visibility_e.py55
-rw-r--r--tests/python/view_layer/test_evaluation_visibility_f.py55
-rw-r--r--tests/python/view_layer/test_evaluation_visibility_g.py30
-rw-r--r--tests/python/view_layer/test_evaluation_visibility_h.py30
-rw-r--r--tests/python/view_layer/test_evaluation_visibility_i.py30
-rw-r--r--tests/python/view_layer/test_evaluation_visibility_j.py61
-rw-r--r--tests/python/view_layer/test_group_a.py46
-rw-r--r--tests/python/view_layer/test_group_b.py72
-rw-r--r--tests/python/view_layer/test_group_c.py56
-rw-r--r--tests/python/view_layer/test_group_d.py76
-rw-r--r--tests/python/view_layer/test_layer_linking.py109
-rw-r--r--tests/python/view_layer/test_layer_syncing.py113
-rw-r--r--tests/python/view_layer/test_move_above_below_layer_collection_a.py48
-rw-r--r--tests/python/view_layer/test_move_above_below_layer_collection_b.py48
-rw-r--r--tests/python/view_layer/test_move_above_below_layer_collection_c.py48
-rw-r--r--tests/python/view_layer/test_move_above_below_layer_collection_d.py48
-rw-r--r--tests/python/view_layer/test_move_above_below_layer_collection_e.py40
-rw-r--r--tests/python/view_layer/test_move_above_below_layer_collection_f.py100
-rw-r--r--tests/python/view_layer/test_move_above_below_layer_collection_g.py81
-rw-r--r--tests/python/view_layer/test_move_above_below_layer_collection_h.py66
-rw-r--r--tests/python/view_layer/test_move_above_below_layer_collection_i.py73
-rw-r--r--tests/python/view_layer/test_move_above_below_layer_collection_j.py63
-rw-r--r--tests/python/view_layer/test_move_above_below_layer_collection_k.py40
-rw-r--r--tests/python/view_layer/test_move_above_below_layer_collection_l.py60
-rw-r--r--tests/python/view_layer/test_move_above_below_scene_collection_a.py80
-rw-r--r--tests/python/view_layer/test_move_above_below_scene_collection_b.py69
-rw-r--r--tests/python/view_layer/test_move_above_below_scene_collection_c.py51
-rw-r--r--tests/python/view_layer/test_move_above_below_scene_collection_d.py60
-rw-r--r--tests/python/view_layer/test_move_above_below_scene_collection_e.py60
-rw-r--r--tests/python/view_layer/test_move_above_below_scene_collection_f.py51
-rw-r--r--tests/python/view_layer/test_move_above_below_scene_collection_g.py44
-rw-r--r--tests/python/view_layer/test_move_above_below_scene_collection_h.py84
-rw-r--r--tests/python/view_layer/test_move_above_below_scene_collection_i.py60
-rw-r--r--tests/python/view_layer/test_move_above_below_scene_collection_sync_a.py80
-rw-r--r--tests/python/view_layer/test_move_above_below_scene_collection_sync_b.py69
-rw-r--r--tests/python/view_layer/test_move_above_below_scene_collection_sync_c.py51
-rw-r--r--tests/python/view_layer/test_move_above_below_scene_collection_sync_d.py60
-rw-r--r--tests/python/view_layer/test_move_above_below_scene_collection_sync_e.py60
-rw-r--r--tests/python/view_layer/test_move_above_below_scene_collection_sync_f.py51
-rw-r--r--tests/python/view_layer/test_move_above_below_scene_collection_sync_g.py44
-rw-r--r--tests/python/view_layer/test_move_above_below_scene_collection_sync_h.py84
-rw-r--r--tests/python/view_layer/test_move_above_below_scene_collection_sync_i.py60
-rw-r--r--tests/python/view_layer/test_move_into_layer_collection_a.py69
-rw-r--r--tests/python/view_layer/test_move_into_layer_collection_b.py40
-rw-r--r--tests/python/view_layer/test_move_into_layer_collection_c.py40
-rw-r--r--tests/python/view_layer/test_move_into_layer_collection_d.py40
-rw-r--r--tests/python/view_layer/test_move_into_layer_collection_e.py40
-rw-r--r--tests/python/view_layer/test_move_into_layer_collection_f.py86
-rw-r--r--tests/python/view_layer/test_move_into_layer_collection_g.py77
-rw-r--r--tests/python/view_layer/test_move_into_layer_collection_h.py76
-rw-r--r--tests/python/view_layer/test_move_into_layer_collection_i.py40
-rw-r--r--tests/python/view_layer/test_move_into_layer_collection_j.py41
-rw-r--r--tests/python/view_layer/test_move_into_scene_collection_a.py53
-rw-r--r--tests/python/view_layer/test_move_into_scene_collection_b.py52
-rw-r--r--tests/python/view_layer/test_move_into_scene_collection_c.py52
-rw-r--r--tests/python/view_layer/test_move_into_scene_collection_d.py37
-rw-r--r--tests/python/view_layer/test_move_into_scene_collection_e.py52
-rw-r--r--tests/python/view_layer/test_move_into_scene_collection_f.py51
-rw-r--r--tests/python/view_layer/test_move_into_scene_collection_g.py52
-rw-r--r--tests/python/view_layer/test_move_into_scene_collection_h.py52
-rw-r--r--tests/python/view_layer/test_move_into_scene_collection_i.py52
-rw-r--r--tests/python/view_layer/test_move_into_scene_collection_j.py43
-rw-r--r--tests/python/view_layer/test_move_into_scene_collection_k.py36
-rw-r--r--tests/python/view_layer/test_move_into_scene_collection_l.py36
-rw-r--r--tests/python/view_layer/test_move_into_scene_collection_sync_a.py37
-rw-r--r--tests/python/view_layer/test_move_into_scene_collection_sync_b.py52
-rw-r--r--tests/python/view_layer/test_move_into_scene_collection_sync_c.py52
-rw-r--r--tests/python/view_layer/test_move_into_scene_collection_sync_d.py37
-rw-r--r--tests/python/view_layer/test_move_into_scene_collection_sync_e.py52
-rw-r--r--tests/python/view_layer/test_move_into_scene_collection_sync_f.py51
-rw-r--r--tests/python/view_layer/test_move_into_scene_collection_sync_g.py52
-rw-r--r--tests/python/view_layer/test_move_into_scene_collection_sync_h.py52
-rw-r--r--tests/python/view_layer/test_move_into_scene_collection_sync_i.py52
-rw-r--r--tests/python/view_layer/test_move_into_scene_collection_sync_j.py43
-rw-r--r--tests/python/view_layer/test_move_into_scene_collection_sync_k.py36
-rw-r--r--tests/python/view_layer/test_move_into_scene_collection_sync_l.py36
-rw-r--r--tests/python/view_layer/test_object_add_cylinder.py34
-rw-r--r--tests/python/view_layer/test_object_add_empty.py34
-rw-r--r--tests/python/view_layer/test_object_add_no_collection_cylinder.py32
-rw-r--r--tests/python/view_layer/test_object_add_no_collection_empty.py31
-rw-r--r--tests/python/view_layer/test_object_add_no_collection_torus.py31
-rw-r--r--tests/python/view_layer/test_object_add_torus.py34
-rw-r--r--tests/python/view_layer/test_object_copy.py94
-rw-r--r--tests/python/view_layer/test_object_delete_a.py31
-rw-r--r--tests/python/view_layer/test_object_delete_b.py31
-rw-r--r--tests/python/view_layer/test_object_link_a.py32
-rw-r--r--tests/python/view_layer/test_object_link_b.py34
-rw-r--r--tests/python/view_layer/test_object_link_c.py35
-rw-r--r--tests/python/view_layer/test_operator_context.py133
-rw-r--r--tests/python/view_layer/test_scene_collection_delete.py49
-rw-r--r--tests/python/view_layer/test_scene_copy_a.py37
-rw-r--r--tests/python/view_layer/test_scene_copy_b.py38
-rw-r--r--tests/python/view_layer/test_scene_copy_c.py37
-rw-r--r--tests/python/view_layer/test_scene_copy_d.py37
-rw-r--r--tests/python/view_layer/test_scene_copy_e.py47
-rw-r--r--tests/python/view_layer/test_scene_copy_f.py89
-rw-r--r--tests/python/view_layer/test_scene_delete.py34
-rw-r--r--tests/python/view_layer/test_scene_objects.py53
-rw-r--r--tests/python/view_layer/test_scene_write_read.py144
-rw-r--r--tests/python/view_layer/test_view_layer_rename.py33
-rw-r--r--tests/python/view_layer/view_layer_common.py821
2228 files changed, 271496 insertions, 122636 deletions
diff --git a/.arcconfig b/.arcconfig
index 8fc370a94ac..086fdc038bb 100644
--- a/.arcconfig
+++ b/.arcconfig
@@ -1,6 +1,6 @@
{
"project_id" : "Blender",
"conduit_uri" : "https://developer.blender.org/",
- "git.default-relative-commit" : "origin/master",
+ "git.default-relative-commit" : "origin/blender2.8",
"arc.land.update.default" : "rebase"
}
diff --git a/.gitmodules b/.gitmodules
index 2f52bfce372..11ce247b455 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,20 +1,24 @@
[submodule "release/scripts/addons"]
path = release/scripts/addons
url = ../blender-addons.git
+ branch = blender2.8
ignore = all
branch = master
[submodule "release/scripts/addons_contrib"]
path = release/scripts/addons_contrib
url = ../blender-addons-contrib.git
+ branch = master
ignore = all
branch = master
[submodule "release/datafiles/locale"]
path = release/datafiles/locale
url = ../blender-translations.git
+ branch = master
ignore = all
branch = master
[submodule "source/tools"]
path = source/tools
url = ../blender-dev-tools.git
+ branch = master
ignore = all
branch = master
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c0a0b4bd27f..0ce35da95f1 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -244,6 +244,8 @@ endif()
option(WITH_PLAYER "Build Player" OFF)
option(WITH_OPENCOLORIO "Enable OpenColorIO color management" ${_init_OPENCOLORIO})
+option(WITH_CLAY_ENGINE "Enable Clay engine" ON)
+
# Compositor
option(WITH_COMPOSITOR "Enable the tile based nodal compositor" ON)
@@ -386,10 +388,14 @@ if(UNIX AND NOT APPLE)
endif()
option(WITH_PYTHON_INSTALL "Copy system python into the blender install folder" ON)
-if(WITH_PYTHON_INSTALL)
- option(WITH_PYTHON_INSTALL_NUMPY "Copy system numpy into the blender install folder" ON)
+if(WITH_PYTHON_INSTALL OR (WITH_AUDASPACE AND NOT WITH_SYSTEM_AUDASPACE))
set(PYTHON_NUMPY_PATH "" CACHE PATH "Path to python site-packages or dist-packages containing 'numpy' module")
mark_as_advanced(PYTHON_NUMPY_PATH)
+ set(PYTHON_NUMPY_INCLUDE_DIRS ${PYTHON_NUMPY_PATH}/numpy/core/include CACHE PATH "Path to the include directory of the numpy module")
+ mark_as_advanced(PYTHON_NUMPY_INCLUDE_DIRS)
+endif()
+if(WITH_PYTHON_INSTALL)
+ option(WITH_PYTHON_INSTALL_NUMPY "Copy system numpy into the blender install folder" ON)
if(UNIX AND NOT APPLE)
option(WITH_PYTHON_INSTALL_REQUESTS "Copy system requests into the blender install folder" ON)
@@ -462,28 +468,16 @@ endif()
# OpenGL
-option(WITH_GLEW_MX "Support multiple GLEW contexts (experimental)" OFF )
option(WITH_GLEW_ES "Switches to experimental copy of GLEW that has support for OpenGL ES. (temporary option for development purposes)" OFF)
option(WITH_GL_EGL "Use the EGL OpenGL system library instead of the platform specific OpenGL system library (CGL, glX, or WGL)" OFF)
-option(WITH_GL_PROFILE_COMPAT "Support using the OpenGL 'compatibility' profile. (deprecated)" ON )
-option(WITH_GL_PROFILE_CORE "Support using the OpenGL 3.2+ 'core' profile." OFF)
option(WITH_GL_PROFILE_ES20 "Support using OpenGL ES 2.0. (thru either EGL or the AGL/WGL/XGL 'es20' profile)" OFF)
mark_as_advanced(
- WITH_GLEW_MX
WITH_GLEW_ES
WITH_GL_EGL
- WITH_GL_PROFILE_COMPAT
- WITH_GL_PROFILE_CORE
WITH_GL_PROFILE_ES20
)
-if(WITH_GL_PROFILE_COMPAT)
- set(WITH_GLU ON)
-else()
- set(WITH_GLU OFF)
-endif()
-
if(WIN32)
option(WITH_GL_ANGLE "Link with the ANGLE library, an OpenGL ES 2.0 implementation based on Direct3D, instead of the system OpenGL library." OFF)
mark_as_advanced(WITH_GL_ANGLE)
@@ -509,11 +503,10 @@ if(APPLE)
set(WITH_CXX11 ON)
elseif(CMAKE_COMPILER_IS_GNUCC AND (NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "6.0") AND (NOT WITH_CXX11))
set(_c11_init ON)
- set(_cxx11_init ON)
else()
set(_c11_init OFF)
- set(_cxx11_init OFF)
endif()
+set(_cxx11_init ON)
option(WITH_C11 "Build with C11 standard enabled, for development use only!" ${_c11_init})
mark_as_advanced(WITH_C11)
@@ -526,10 +519,6 @@ if(CMAKE_COMPILER_IS_GNUCC)
mark_as_advanced(WITH_LINKER_GOLD)
endif()
-# Dependency graph
-option(WITH_LEGACY_DEPSGRAPH "Build Blender with legacy dependency graph" ON)
-mark_as_advanced(WITH_LEGACY_DEPSGRAPH)
-
if(WIN32)
# Use hardcoded paths or find_package to find externals
option(WITH_WINDOWS_FIND_MODULES "Use find_package to locate libraries" OFF)
@@ -592,6 +581,12 @@ if(NOT WITH_GAMEENGINE AND WITH_PLAYER)
message(FATAL_ERROR "WITH_PLAYER requires WITH_GAMEENGINE")
endif()
+if(NOT WITH_CXX11)
+ if(WITH_AUDASPACE AND NOT WITH_SYSTEM_AUDASPACE)
+ message(FATAL_ERROR "WITH_AUDASPACE requires WITH_CXX11")
+ endif()
+endif()
+
if(NOT WITH_AUDASPACE)
if(WITH_OPENAL)
message(FATAL_ERROR "WITH_OPENAL requires WITH_AUDASPACE")
@@ -640,15 +635,10 @@ if(NOT WITH_BOOST)
endmacro()
set_and_warn(WITH_CYCLES OFF)
- set_and_warn(WITH_AUDASPACE OFF)
set_and_warn(WITH_INTERNATIONAL OFF)
set_and_warn(WITH_OPENVDB OFF)
set_and_warn(WITH_OPENCOLORIO OFF)
-
- set_and_warn(WITH_OPENAL OFF) # depends on AUDASPACE
- set_and_warn(WITH_GAMEENGINE OFF) # depends on AUDASPACE
- set_and_warn(WITH_PLAYER OFF) # depends on GAMEENGINE
-elseif(WITH_CYCLES OR WITH_OPENIMAGEIO OR WITH_AUDASPACE OR WITH_INTERNATIONAL OR
+elseif(WITH_CYCLES OR WITH_OPENIMAGEIO OR WITH_INTERNATIONAL OR
WITH_OPENVDB OR WITH_OPENCOLORIO)
# Keep enabled
else()
@@ -717,30 +707,9 @@ TEST_SHARED_PTR_SUPPORT()
TEST_UNORDERED_MAP_SUPPORT()
if(WITH_AUDASPACE)
- if(WITH_SYSTEM_AUDASPACE)
- set(AUDASPACE_DEFINITIONS
- -DWITH_AUDASPACE
- -DWITH_SYSTEM_AUDASPACE
- "-DAUD_DEVICE_H=<AUD_Device.h>"
- "-DAUD_SPECIAL_H=<AUD_Special.h>"
- "-DAUD_SOUND_H=<AUD_Sound.h>"
- "-DAUD_HANDLE_H=<AUD_Handle.h>"
- "-DAUD_SEQUENCE_H=<AUD_Sequence.h>"
- "-DAUD_TYPES_H=<AUD_Types.h>"
- "-DAUD_PYTHON_H=<python/PyAPI.h>"
- )
- else()
- set(AUDASPACE_C_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/intern/audaspace/intern")
- set(AUDASPACE_PY_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/intern/audaspace/intern")
- set(AUDASPACE_DEFINITIONS
- -DWITH_AUDASPACE
- "-DAUD_DEVICE_H=<AUD_C-API.h>"
- "-DAUD_SPECIAL_H=<AUD_C-API.h>"
- "-DAUD_SOUND_H=<AUD_C-API.h>"
- "-DAUD_HANDLE_H=<AUD_C-API.h>"
- "-DAUD_SEQUENCE_H=<AUD_C-API.h>"
- "-DAUD_TYPES_H=<AUD_Space.h>"
- )
+ if(NOT WITH_SYSTEM_AUDASPACE)
+ set(AUDASPACE_C_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/extern/audaspace/bindings/C" "${CMAKE_BINARY_DIR}/extern/audaspace")
+ set(AUDASPACE_PY_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/extern/audaspace/bindings")
endif()
endif()
@@ -984,19 +953,11 @@ endif()
find_package(OpenGL)
blender_include_dirs_sys("${OPENGL_INCLUDE_DIR}")
-if(WITH_GLU)
- list(APPEND BLENDER_GL_LIBRARIES "${OPENGL_glu_LIBRARY}")
- list(APPEND GL_DEFINITIONS -DWITH_GLU)
-endif()
-
if(WITH_SYSTEM_GLES)
find_package_wrapper(OpenGLES)
endif()
-if(WITH_GL_PROFILE_COMPAT OR WITH_GL_PROFILE_CORE)
- list(APPEND BLENDER_GL_LIBRARIES "${OPENGL_gl_LIBRARY}")
-
-elseif(WITH_GL_PROFILE_ES20)
+if(WITH_GL_PROFILE_ES20)
if(WITH_SYSTEM_GLES)
if(NOT OPENGLES_LIBRARY)
message(FATAL_ERROR
@@ -1056,6 +1017,9 @@ elseif(WITH_GL_PROFILE_ES20)
endif()
+else()
+ list(APPEND BLENDER_GL_LIBRARIES "${OPENGL_gl_LIBRARY}")
+
endif()
if(WITH_GL_EGL)
@@ -1103,16 +1067,10 @@ if(WITH_GL_EGL)
endif()
-if(WITH_GL_PROFILE_COMPAT)
- list(APPEND GL_DEFINITIONS -DWITH_GL_PROFILE_COMPAT)
-endif()
-
-if(WITH_GL_PROFILE_CORE)
- list(APPEND GL_DEFINITIONS -DWITH_GL_PROFILE_CORE)
-endif()
-
if(WITH_GL_PROFILE_ES20)
list(APPEND GL_DEFINITIONS -DWITH_GL_PROFILE_ES20)
+else()
+ list(APPEND GL_DEFINITIONS -DWITH_GL_PROFILE_CORE)
endif()
if(WITH_GL_EGL)
@@ -1149,10 +1107,6 @@ endif()
#-----------------------------------------------------------------------------
# Configure GLEW
-if(WITH_GLEW_MX)
- list(APPEND GL_DEFINITIONS -DWITH_GLEW_MX)
-endif()
-
if(WITH_SYSTEM_GLEW)
find_package(GLEW)
@@ -1162,11 +1116,7 @@ if(WITH_SYSTEM_GLEW)
message(FATAL_ERROR "GLEW is required to build Blender. Install it or disable WITH_SYSTEM_GLEW.")
endif()
- if(WITH_GLEW_MX)
- set(BLENDER_GLEW_LIBRARIES ${GLEW_MX_LIBRARY})
- else()
- set(BLENDER_GLEW_LIBRARIES ${GLEW_LIBRARY})
- endif()
+ set(BLENDER_GLEW_LIBRARIES ${GLEW_LIBRARY})
else()
if(WITH_GLEW_ES)
set(GLEW_INCLUDE_PATH "${CMAKE_SOURCE_DIR}/extern/glew-es/include")
@@ -1174,12 +1124,11 @@ else()
list(APPEND GL_DEFINITIONS -DGLEW_STATIC -DWITH_GLEW_ES)
# These definitions remove APIs from glew.h, making GLEW smaller, and catching unguarded API usage
- if(NOT WITH_GL_PROFILE_ES20)
+ if(WITH_GL_PROFILE_ES20)
+ list(APPEND GL_DEFINITIONS -DGLEW_ES_ONLY)
+ else()
# No ES functions are needed
list(APPEND GL_DEFINITIONS -DGLEW_NO_ES)
- elseif(NOT (WITH_GL_PROFILE_CORE OR WITH_GL_PROFILE_COMPAT))
- # ES is enabled, but the other functions are all disabled
- list(APPEND GL_DEFINITIONS -DGLEW_ES_ONLY)
endif()
if(WITH_GL_PROFILE_ES20)
@@ -1216,9 +1165,7 @@ else()
endif()
-if(NOT WITH_GLU)
- list(APPEND GL_DEFINITIONS -DGLEW_NO_GLU)
-endif()
+list(APPEND GL_DEFINITIONS -DGLEW_NO_GLU)
#-----------------------------------------------------------------------------
# Configure Bullet
@@ -1522,10 +1469,15 @@ if(WITH_PYTHON)
)
endif()
- if(WIN32 OR APPLE)
+ if(WIN32)
# pass, we have this in an archive to extract
- elseif(WITH_PYTHON_INSTALL AND WITH_PYTHON_INSTALL_NUMPY)
- find_python_package(numpy)
+ elseif((WITH_PYTHON_INSTALL AND WITH_PYTHON_INSTALL_NUMPY) OR (WITH_AUDASPACE AND NOT WITH_SYSTEM_AUDASPACE))
+ if(("${PYTHON_NUMPY_PATH}" STREQUAL "") OR (${PYTHON_NUMPY_PATH} MATCHES NOTFOUND))
+ find_python_package(numpy)
+ unset(PYTHON_NUMPY_INCLUDE_DIRS CACHE)
+ set(PYTHON_NUMPY_INCLUDE_DIRS ${PYTHON_NUMPY_PATH}/numpy/core/include CACHE PATH "Path to the include directory of the numpy module")
+ mark_as_advanced(PYTHON_NUMPY_INCLUDE_DIRS)
+ endif()
endif()
if(WIN32 OR APPLE)
@@ -1762,10 +1714,7 @@ if(FIRST_RUN)
info_cfg_text("OpenGL:")
info_cfg_option(WITH_GLEW_ES)
- info_cfg_option(WITH_GLU)
info_cfg_option(WITH_GL_EGL)
- info_cfg_option(WITH_GL_PROFILE_COMPAT)
- info_cfg_option(WITH_GL_PROFILE_CORE)
info_cfg_option(WITH_GL_PROFILE_ES20)
if(WIN32)
info_cfg_option(WITH_GL_ANGLE)
diff --git a/build_files/build_environment/install_deps.sh b/build_files/build_environment/install_deps.sh
index c110f274db8..c1ba2a3ab25 100755
--- a/build_files/build_environment/install_deps.sh
+++ b/build_files/build_environment/install_deps.sh
@@ -25,7 +25,7 @@
ARGS=$( \
getopt \
-o s:i:t:h \
---long source:,install:,tmp:,info:,threads:,help,show-deps,no-sudo,no-build,no-confirm,use-cxx11,\
+--long source:,install:,tmp:,info:,threads:,help,show-deps,no-sudo,no-build,no-confirm,\
with-all,with-opencollada,with-jack,\
ver-ocio:,ver-oiio:,ver-llvm:,ver-osl:,ver-osd:,ver-openvdb:,\
force-all,force-python,force-numpy,force-boost,\
@@ -104,11 +104,6 @@ ARGUMENTS_INFO="\"COMMAND LINE ARGUMENTS:
--no-confirm
Disable any interaction with user (suitable for automated run).
- --use-cxx11
- Build all libraries in cpp11 'mode' (will be mandatory soon in blender2.8 branch).
- NOTE: If your compiler is gcc-6.0 or above, you probably *want* to enable this option (since it's default
- standard starting from this version).
-
--with-all
By default, a number of optional and not-so-often needed libraries are not installed.
This option will try to install them, at the cost of potential conflicts (depending on
@@ -290,7 +285,7 @@ SUDO="sudo"
NO_BUILD=false
NO_CONFIRM=false
-USE_CXX11=false
+USE_CXX11=true # Mandatory in blender2.8
PYTHON_VERSION="3.6.2"
PYTHON_VERSION_MIN="3.6"
@@ -501,9 +496,6 @@ while true; do
--no-confirm)
NO_CONFIRM=true; shift; continue
;;
- --use-cxx11)
- USE_CXX11=true; shift; continue
- ;;
--with-all)
WITH_ALL=true; shift; continue
;;
@@ -804,7 +796,7 @@ FFMPEG_SOURCE=( "http://ffmpeg.org/releases/ffmpeg-$FFMPEG_VERSION.tar.bz2" )
CXXFLAGS_BACK=$CXXFLAGS
if [ "$USE_CXX11" = true ]; then
- WARNING "You are trying to use c++11, this *should* go smoothely with any very recent distribution
+ WARNING "C++11 is now mandatory for blender2.8, this *should* go smoothly with any very recent distribution.
However, if you are experiencing linking errors (also when building Blender itself), please try the following:
* Re-run this script with '--build-all --force-all' options.
* Ensure your gcc version is at the very least 4.8, if possible you should really rather use gcc-5.1 or above.
@@ -2685,10 +2677,10 @@ install_DEB() {
install_packages_DEB $_packages
PRINT""
- SNDFILE_DEV="libsndfile1-dev"
- check_package_DEB $SNDFILE_DEV
+ LIBSNDFILE_DEV="libsndfile1-dev"
+ check_package_DEB $LIBSNDFILE_DEV
if [ $? -eq 0 ]; then
- install_packages_DEB $SNDFILE_DEV
+ install_packages_DEB $LIBSNDFILE_DEV
fi
PRINT ""
@@ -3283,10 +3275,10 @@ install_RPM() {
fi
PRINT""
- SNDFILE_DEV="libsndfile-devel"
- check_package_RPM $SNDFILE_DEV
+ LIBSNDFILE_DEV="libsndfile-devel"
+ check_package_RPM $LIBSNDFILE_DEV
if [ $? -eq 0 ]; then
- install_packages_RPM $SNDFILE_DEV
+ install_packages_RPM $LIBSNDFILE_DEV
fi
if [ "$WITH_ALL" = true ]; then
@@ -3690,10 +3682,10 @@ install_ARCH() {
install_packages_ARCH $_packages
PRINT""
- SNDFILE_DEV="libsndfile"
- check_package_ARCH $SNDFILE_DEV
+ LIBSNDFILE_DEV="libsndfile"
+ check_package_ARCH $LIBSNDFILE_DEV
if [ $? -eq 0 ]; then
- install_packages_ARCH $SNDFILE_DEV
+ install_packages_ARCH $LIBSNDFILE_DEV
fi
PRINT ""
diff --git a/build_files/buildbot/config/blender_linux.cmake b/build_files/buildbot/config/blender_linux.cmake
index b41c94494d1..22e88a82ffd 100644
--- a/build_files/buildbot/config/blender_linux.cmake
+++ b/build_files/buildbot/config/blender_linux.cmake
@@ -74,7 +74,7 @@ set(SNDFILE_LIBRARY "/usr/lib${MULTILIB}/libsndfile.a;/usr/lib${MULTILI
# OpenAL libraries
set(OPENAL_ROOT_DIR "/opt/lib/openal" CACHE STRING "" FORCE)
-set(OPENAL_INCLUDE_DIR "${OPENAL_ROOT_DIR}/include" CACHE STRING "" FORCE)
+set(OPENAL_INCLUDE_DIR "${OPENAL_ROOT_DIR}/include/AL" CACHE STRING "" FORCE)
set(OPENAL_LIBRARY
${OPENAL_ROOT_DIR}/lib/libopenal.a
${OPENAL_ROOT_DIR}/lib/libcommon.a
diff --git a/build_files/cmake/Modules/FindGLEW.cmake b/build_files/cmake/Modules/FindGLEW.cmake
index 2f098d5d9a4..3057237f3c6 100644
--- a/build_files/cmake/Modules/FindGLEW.cmake
+++ b/build_files/cmake/Modules/FindGLEW.cmake
@@ -9,7 +9,6 @@
#
# also defined,
# GLEW_LIBRARY, where to find the Glew library.
-# GLEW_MX_LIBRARY, where to find the GlewMX library.
#=============================================================================
# Copyright 2014 Blender Foundation.
@@ -50,16 +49,6 @@ FIND_LIBRARY(GLEW_LIBRARY
lib64 lib
)
-
-FIND_LIBRARY(GLEW_MX_LIBRARY
- NAMES
- GLEWmx
- HINTS
- ${_glew_SEARCH_DIRS}
- PATH_SUFFIXES
- lib64 lib
- )
-
# handle the QUIETLY and REQUIRED arguments and set GLEW_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)
@@ -73,7 +62,6 @@ ENDIF(GLEW_FOUND)
MARK_AS_ADVANCED(
GLEW_INCLUDE_DIR
GLEW_LIBRARY
- GLEW_MX_LIBRARY
)
UNSET(_glew_SEARCH_DIRS)
diff --git a/build_files/cmake/Modules/FindSndFile.cmake b/build_files/cmake/Modules/FindSndFile.cmake
index 4094b05adab..c210c523c58 100644
--- a/build_files/cmake/Modules/FindSndFile.cmake
+++ b/build_files/cmake/Modules/FindSndFile.cmake
@@ -1,15 +1,15 @@
# - 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.
+# LIBSNDFILE_INCLUDE_DIRS, where to find sndfile.h, Set when
+# LIBSNDFILE_INCLUDE_DIR is found.
+# LIBSNDFILE_LIBRARIES, libraries to link against to use SndFile.
+# LIBSNDFILE_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.
+# LIBSNDFILE_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.
+# LIBSNDFILE_LIBRARY, where to find the SndFile library.
#=============================================================================
# Copyright 2011 Blender Foundation.
@@ -22,26 +22,26 @@
# 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})
+# If LIBSNDFILE_ROOT_DIR was defined in the environment, use it.
+IF(NOT LIBSNDFILE_ROOT_DIR AND NOT $ENV{LIBSNDFILE_ROOT_DIR} STREQUAL "")
+ SET(LIBSNDFILE_ROOT_DIR $ENV{LIBSNDFILE_ROOT_DIR})
ENDIF()
SET(_sndfile_SEARCH_DIRS
- ${SNDFILE_ROOT_DIR}
+ ${LIBSNDFILE_ROOT_DIR}
/usr/local
/sw # Fink
/opt/local # DarwinPorts
)
-FIND_PATH(SNDFILE_INCLUDE_DIR sndfile.h
+FIND_PATH(LIBSNDFILE_INCLUDE_DIR sndfile.h
HINTS
${_sndfile_SEARCH_DIRS}
PATH_SUFFIXES
include
)
-FIND_LIBRARY(SNDFILE_LIBRARY
+FIND_LIBRARY(LIBSNDFILE_LIBRARY
NAMES
sndfile
HINTS
@@ -50,18 +50,18 @@ FIND_LIBRARY(SNDFILE_LIBRARY
lib64 lib
)
-# handle the QUIETLY and REQUIRED arguments and set SNDFILE_FOUND to TRUE if
+# handle the QUIETLY and REQUIRED arguments and set LIBSNDFILE_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(SndFile DEFAULT_MSG
- SNDFILE_LIBRARY SNDFILE_INCLUDE_DIR)
+ LIBSNDFILE_LIBRARY LIBSNDFILE_INCLUDE_DIR)
-IF(SNDFILE_FOUND)
- SET(SNDFILE_LIBRARIES ${SNDFILE_LIBRARY})
- SET(SNDFILE_INCLUDE_DIRS ${SNDFILE_INCLUDE_DIR})
-ENDIF(SNDFILE_FOUND)
+IF(LIBSNDFILE_FOUND)
+ SET(LIBSNDFILE_LIBRARIES ${LIBSNDFILE_LIBRARY})
+ SET(LIBSNDFILE_INCLUDE_DIRS ${LIBSNDFILE_INCLUDE_DIR})
+ENDIF(LIBSNDFILE_FOUND)
MARK_AS_ADVANCED(
- SNDFILE_INCLUDE_DIR
- SNDFILE_LIBRARY
+ LIBSNDFILE_INCLUDE_DIR
+ LIBSNDFILE_LIBRARY
)
diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake
index e3eb4d9241a..09bc01fcae3 100644
--- a/build_files/cmake/macros.cmake
+++ b/build_files/cmake/macros.cmake
@@ -326,7 +326,7 @@ function(SETUP_LIBDIRS)
link_directories(${JACK_LIBPATH})
endif()
if(WITH_CODEC_SNDFILE)
- link_directories(${SNDFILE_LIBPATH})
+ link_directories(${LIBSNDFILE_LIBPATH})
endif()
if(WITH_FFTW3)
link_directories(${FFTW3_LIBPATH})
@@ -407,7 +407,7 @@ function(setup_liblinks
target_link_libraries(${target} ${JACK_LIBRARIES})
endif()
if(WITH_CODEC_SNDFILE)
- target_link_libraries(${target} ${SNDFILE_LIBRARIES})
+ target_link_libraries(${target} ${LIBSNDFILE_LIBRARIES})
endif()
if(WITH_SDL AND NOT WITH_SDL_DYNLOAD)
target_link_libraries(${target} ${SDL_LIBRARY})
@@ -555,6 +555,12 @@ function(SETUP_BLENDER_SORTED_LIBS)
endif()
endif()
+ if(WITH_AUDASPACE AND NOT WITH_SYSTEM_AUDASPACE)
+ list(APPEND BLENDER_LINK_LIBS
+ audaspace
+ audaspace-py)
+ endif()
+
# Sort libraries
set(BLENDER_SORTED_LIBS
bf_windowmanager
@@ -585,12 +591,14 @@ function(SETUP_BLENDER_SORTED_LIBS)
bf_editor_curve
bf_editor_gpencil
bf_editor_interface
+ bf_editor_manipulator_library
bf_editor_mesh
bf_editor_metaball
bf_editor_object
bf_editor_armature
bf_editor_physics
bf_editor_render
+ bf_editor_scene
bf_editor_screen
bf_editor_sculpt_paint
bf_editor_sound
@@ -603,6 +611,7 @@ function(SETUP_BLENDER_SORTED_LIBS)
bf_python
bf_python_ext
bf_python_mathutils
+ bf_python_gawain
bf_python_bmesh
bf_freestyle
bf_ikplugin
@@ -610,11 +619,14 @@ function(SETUP_BLENDER_SORTED_LIBS)
bf_alembic
bf_bmesh
bf_gpu
+ bf_draw
bf_blenloader
bf_blenkernel
bf_physics
bf_nodes
bf_rna
+ bf_editor_manipulator_library # rna -> manipulator bad-level calls
+ bf_python
bf_imbuf
bf_blenlib
bf_depsgraph
@@ -655,6 +667,8 @@ function(SETUP_BLENDER_SORTED_LIBS)
bf_blenfont
bf_blentranslation
bf_intern_audaspace
+ audaspace
+ audaspace-py
bf_intern_mikktspace
bf_intern_dualcon
bf_intern_cycles
@@ -666,6 +680,7 @@ function(SETUP_BLENDER_SORTED_LIBS)
cycles_util
cycles_subd
bf_intern_opencolorio
+ bf_intern_gawain
bf_intern_eigen
extern_rangetree
extern_wcwidth
@@ -1504,6 +1519,7 @@ function(find_python_package
NAMES
${package}
HINTS
+ "${PYTHON_LIBPATH}/"
"${PYTHON_LIBPATH}/python${PYTHON_VERSION}/"
"${PYTHON_LIBPATH}/python${_PY_VER_MAJOR}/"
PATH_SUFFIXES
diff --git a/build_files/cmake/platform/platform_apple.cmake b/build_files/cmake/platform/platform_apple.cmake
index 1435572fa5e..ca01e08afe9 100644
--- a/build_files/cmake/platform/platform_apple.cmake
+++ b/build_files/cmake/platform/platform_apple.cmake
@@ -23,6 +23,8 @@
# Libraries configuration for Apple.
+set(MACOSX_DEPLOYMENT_TARGET "10.9")
+
macro(find_package_wrapper)
# do nothing, just satisfy the macro
endmacro()
@@ -40,7 +42,7 @@ if(WITH_OPENAL)
find_package(OpenAL)
if(OPENAL_FOUND)
set(WITH_OPENAL ON)
- set(OPENAL_INCLUDE_DIR "${LIBDIR}/openal/include")
+ set(OPENAL_INCLUDE_DIR "${LIBDIR}/openal/include/AL")
else()
set(WITH_OPENAL OFF)
endif()
@@ -76,10 +78,10 @@ if(WITH_JACK)
endif()
if(WITH_CODEC_SNDFILE)
- set(SNDFILE ${LIBDIR}/sndfile)
- set(SNDFILE_INCLUDE_DIRS ${SNDFILE}/include)
- set(SNDFILE_LIBRARIES sndfile FLAC ogg vorbis vorbisenc)
- set(SNDFILE_LIBPATH ${SNDFILE}/lib ${LIBDIR}/ffmpeg/lib) # TODO, deprecate
+ set(LIBSNDFILE ${LIBDIR}/sndfile)
+ set(LIBSNDFILE_INCLUDE_DIRS ${LIBSNDFILE}/include)
+ set(LIBSNDFILE_LIBRARIES sndfile FLAC ogg vorbis vorbisenc)
+ set(LIBSNDFILE_LIBPATH ${LIBSNDFILE}/lib ${LIBDIR}/ffmpeg/lib) # TODO, deprecate
endif()
if(WITH_PYTHON)
diff --git a/build_files/cmake/platform/platform_unix.cmake b/build_files/cmake/platform/platform_unix.cmake
index 6796e254c27..306a09a3a5b 100644
--- a/build_files/cmake/platform/platform_unix.cmake
+++ b/build_files/cmake/platform/platform_unix.cmake
@@ -148,7 +148,7 @@ endif()
# Codecs
if(WITH_CODEC_SNDFILE)
find_package_wrapper(SndFile)
- if(NOT SNDFILE_FOUND)
+ if(NOT LIBSNDFILE_FOUND)
set(WITH_CODEC_SNDFILE OFF)
endif()
endif()
diff --git a/build_files/cmake/platform/platform_win32.cmake b/build_files/cmake/platform/platform_win32.cmake
index ef3ef7b6517..7e978a71ad4 100644
--- a/build_files/cmake/platform/platform_win32.cmake
+++ b/build_files/cmake/platform/platform_win32.cmake
@@ -532,22 +532,21 @@ set(WINTAB_INC ${LIBDIR}/wintab/include)
if(WITH_OPENAL)
set(OPENAL ${LIBDIR}/openal)
set(OPENALDIR ${LIBDIR}/openal)
- set(OPENAL_INCLUDE_DIR ${OPENAL}/include)
+ set(OPENAL_INCLUDE_DIR ${OPENAL}/include/AL)
set(OPENAL_LIBPATH ${OPENAL}/lib)
if(MSVC)
set(OPENAL_LIBRARY ${OPENAL_LIBPATH}/openal32.lib)
else()
set(OPENAL_LIBRARY ${OPENAL_LIBPATH}/wrap_oal.lib)
endif()
-
+
endif()
if(WITH_CODEC_SNDFILE)
- set(SNDFILE ${LIBDIR}/sndfile)
- set(SNDFILE_INCLUDE_DIRS ${SNDFILE}/include)
- set(SNDFILE_LIBPATH ${SNDFILE}/lib) # TODO, deprecate
- set(SNDFILE_LIBRARIES ${SNDFILE_LIBPATH}/libsndfile-1.lib)
-
+ set(LIBSNDFILE ${LIBDIR}/sndfile)
+ set(LIBSNDFILE_INCLUDE_DIRS ${LIBSNDFILE}/include)
+ set(LIBSNDFILE_LIBPATH ${LIBSNDFILE}/lib) # TODO, deprecate
+ set(LIBSNDFILE_LIBRARIES ${LIBSNDFILE_LIBPATH}/libsndfile-1.lib)
endif()
if(WITH_RAYOPTIMIZATION AND SUPPORT_SSE_BUILD)
diff --git a/doc/doxygen/doxygen.source.h b/doc/doxygen/doxygen.source.h
index 67e231212c7..da58584ab36 100644
--- a/doc/doxygen/doxygen.source.h
+++ b/doc/doxygen/doxygen.source.h
@@ -220,6 +220,10 @@
* \ingroup editors
*/
+/** \defgroup edscene scene
+ * \ingroup editors
+ */
+
/** \defgroup edsculpt sculpt and paint
* \ingroup editors
*/
diff --git a/doc/python_api/examples/gpu.offscreen.1.py b/doc/python_api/examples/gpu.offscreen.1.py
index 75ddf804e70..ff1a7ad7cce 100644
--- a/doc/python_api/examples/gpu.offscreen.1.py
+++ b/doc/python_api/examples/gpu.offscreen.1.py
@@ -52,6 +52,7 @@ class OffScreenDraw(bpy.types.Operator):
@staticmethod
def _update_offscreen(context, offscreen):
scene = context.scene
+ render_layer = context.render_layer
render = scene.render
camera = scene.camera
@@ -65,6 +66,7 @@ class OffScreenDraw(bpy.types.Operator):
offscreen.draw_view3d(
scene,
+ render_layer,
context.space_data,
context.region,
projection_matrix,
diff --git a/doc/python_api/sphinx_doc_gen.py b/doc/python_api/sphinx_doc_gen.py
index 08c3e729ed9..75064f2c5ef 100644
--- a/doc/python_api/sphinx_doc_gen.py
+++ b/doc/python_api/sphinx_doc_gen.py
@@ -332,6 +332,9 @@ except ImportError:
# to avoid having to match Blender's source tree.
EXTRA_SOURCE_FILES = (
"../../../release/scripts/templates_py/bmesh_simple.py",
+ "../../../release/scripts/templates_py/manipulator_operator.py",
+ "../../../release/scripts/templates_py/manipulator_operator_target.py",
+ "../../../release/scripts/templates_py/manipulator_simple.py",
"../../../release/scripts/templates_py/operator_simple.py",
"../../../release/scripts/templates_py/ui_panel_simple.py",
"../../../release/scripts/templates_py/ui_previews_custom_icon.py",
@@ -1024,6 +1027,7 @@ context_type_map = {
"brush": ("Brush", False),
"camera": ("Camera", False),
"cloth": ("ClothModifier", False),
+ "collection": ("LayerCollection", False),
"collision": ("CollisionModifier", False),
"curve": ("Curve", False),
"dynamic_paint": ("DynamicPaintModifier", False),
@@ -1044,6 +1048,7 @@ context_type_map = {
"image_paint_object": ("Object", False),
"lamp": ("Lamp", False),
"lattice": ("Lattice", False),
+ "lightprobe": ("LightProbe", False),
"line_style": ("FreestyleLineStyle", False),
"material": ("Material", False),
"material_slot": ("MaterialSlot", False),
@@ -1055,6 +1060,7 @@ context_type_map = {
"particle_system": ("ParticleSystem", False),
"particle_system_editable": ("ParticleSystem", False),
"pose_bone": ("PoseBone", False),
+ "render_layer": ("SceneLayer", False),
"scene": ("Scene", False),
"sculpt_object": ("Object", False),
"selectable_bases": ("ObjectBase", True),
diff --git a/extern/CMakeLists.txt b/extern/CMakeLists.txt
index 2e8589ffd17..54d3275b760 100644
--- a/extern/CMakeLists.txt
+++ b/extern/CMakeLists.txt
@@ -109,3 +109,8 @@ endif()
if(WITH_SDL AND WITH_SDL_DYNLOAD)
add_subdirectory(sdlew)
endif()
+
+if(WITH_AUDASPACE AND NOT WITH_SYSTEM_AUDASPACE)
+ set(AUDASPACE_CMAKE_CFG ${CMAKE_CURRENT_SOURCE_DIR}/audaspace/blender_config.cmake)
+ add_subdirectory(audaspace)
+endif()
diff --git a/extern/audaspace/AUTHORS b/extern/audaspace/AUTHORS
new file mode 100644
index 00000000000..08007912102
--- /dev/null
+++ b/extern/audaspace/AUTHORS
@@ -0,0 +1,16 @@
+Main author: Jörg Müller <nexyon@gmail.com>
+
+Minor improvements have been done while audaspace was an internal part of Blender by
+
+- Campbell Barton (bug fixes and cleanup)
+- Brecht Van Lommel (bug fixes and cleanup)
+- Sergey Sharybin (bug fixes and cleanup)
+- Nathan Letwory (bug fixes and cleanup)
+- Peter Schlaile (ffmpeg)
+- Jens Verwiebe (jack on Apple)
+
+The first three of them were employed by the Blender Foundation during that time.
+
+Some features (random sounds, dynamic music, playback manager, convolution and HRTFs support) were added as part of the VALS (Virtual Alliances for Learning Society) project by
+
+- Juan Francisco Crespo Galán <dethon_5@outlook.com>
diff --git a/extern/audaspace/CHANGES b/extern/audaspace/CHANGES
new file mode 100644
index 00000000000..bd5acaa88fb
--- /dev/null
+++ b/extern/audaspace/CHANGES
@@ -0,0 +1,115 @@
+Audaspace 1.3
+=============
+
+- New features:
+ - linear interpolation for volume changes in the software mixer
+ - dynamic Loading for JACK
+- Bug fixes:
+ - renamed Jack to JACK
+ - C API was not working
+ - filter python API parameter check
+ - finding ffmpeg with pkgconfig
+
+64884a7 Windows fixes.
+53ba3e6 Implemented JACK dynamic loading.
+5ee0ee1 Continues last commit.
+c24b384 Trying to fix travis-ci python versioning once and for all (at least for python3).
+1fbf3bf Rename Jack => JACK where possible.
+6e4b31f Implemented linear interpolation for volume changes in the software mixer.
+817043c Fixing C API not working.
+c384daf Maybe travis-ci works now.
+aa7ddd7 Fix (hopefully) for previous commit.
+57c5dd7 Configure MACOSX_DEPLOYMENT_TARGET for travis-ci.
+7ae6ff9 Fix travis-ci python path.
+552fea4 Added posibillity to use math constants on MinGW
+c18ed59 Bugfix: incorrect parameter check in python API.
+6f048c3 CMake: fix finding ffmpeg with pkgconfig.
+
+Audaspace 1.2
+=============
+
+- New features:
+ - sound list
+ - random sounds
+ - dynamic music playing
+ - playback manager
+ - convolution/reverbation
+ - multi-threading
+ - binaural audio
+- API changes:
+ - changing default sample rate from 44.1 to 48 kHz
+- Bug fixes:
+ - several standard library fixes.
+- Bindings API:
+ - mixdown C API refactored
+- CMake/Building:
+ - assuring numpy is installed
+ - building the Python module on Mac OS X with CMake
+
+a6b6e70 Changing default sample rate from 44.1 to 48 kHz.
+20f0164 Bugfix: CMake custom command for python module on OS X.
+98679a2 Bugfix: using standard library (s)rand.
+5ab4fe7 Bugfix: first step in fixing the vector of array problem.
+e83f01d FFTW: trying to use complex to circumvent vector of array problem.
+093ebc0 Bugfix: abs -> std::fabs.
+328d7cc Bugfix: standard library include and call fixes.
+f78e330 Bugfix: using correct includes.
+64d7825 Behavior change: C API Mixdown
+749896b Merge pull request #3 from DethonUSAL/master
+6e9491c CMake: finding NumPy.
+
+Audaspace 1.1
+=============
+
+- Bug fixes:
+ - pkgconfig uses cmake configured library directory
+ - FFMPEG file writing crashed, also corrected pts for encoding
+ - silenced Doxygen warnings about undefined defines
+- C++ API:
+ - ResampleReader uses specs instead of sample rate
+- Bindings API:
+ - writing sounds to files
+ - reading sound data, specs and length
+ - resampling sounds
+- CMake/Building:
+ - first steps towards building for Mac
+ - windows builds copy dlls automatically
+- Python module:
+ - using distutils instead of setuptools
+ - added numpy as dependency
+- Documentation:
+ - added windows building and plugin documentation
+ - disabled html timestamps in doxygen
+ - updated sphinx template
+ - build binding documentation without installing the python module
+
+Detailed list of changes:
+
+326a300 Documentation: windows, dll copying now done automatically.
+54cac4f Windows: install dlls.
+65c2d78 Bindings: Sound length and specs properties.
+c38da70 Bindings API: adding resampling.
+374822f Documentation: Added windows and plugin documentation.
+a9dc5b9 Python module: add numpy as dependency.
+c933a02 C API: implement new API based on the python API.
+ac54c52 Python API: silence numpy warnings.
+c9491bb Python API: checking for a positive sample rate.
+4eb1fa8 Python API: reorder functions.
+ec7c00b Sphinx update and fixes.
+e16d979 FFMPEG: correct pts during encoding.
+7ab3935 Documentation: git path fix.
+28d77bb Python: use distutils directly instead of setuptools.
+1f43284 Silence doxygen warning about undefined defines.
+0d52458 CMake: improvements and fixes for building on Mac.
+37daedf FFMPEG: bugfixes for file writing.
+780ca2a ResampleReader API change
+4d9863d Python API: Optimization for cached sounds' data access.
+ea04fee Python API: read sound data and create sound buffers as well as getting the specs of a sound.
+335b293 Python sound writing API.
+36a7252 Pkgconfig: use cmake configured library directory.
+5503908 Doxygen: disable html timestamps.
+
+Initial Release of Audaspace 1.0
+================================
+
+Audaspace has been the internal audio library of blender since blender 2.5. It is now released as a standalone library to be used in other projects as well.
diff --git a/extern/audaspace/CMakeLists.txt b/extern/audaspace/CMakeLists.txt
new file mode 100644
index 00000000000..9e2921ef35a
--- /dev/null
+++ b/extern/audaspace/CMakeLists.txt
@@ -0,0 +1,986 @@
+################################################################################
+# Copyright 2009-2016 Jörg Müller
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+################################################################################
+
+cmake_minimum_required(VERSION 3.0)
+include(CMakeDependentOption)
+
+if(POLICY CMP0054)
+ cmake_policy(SET CMP0054 NEW)
+endif()
+
+project(audaspace)
+
+set(AUDASPACE_VERSION 1.3)
+set(AUDASPACE_LONG_VERSION ${AUDASPACE_VERSION}.0)
+
+if(DEFINED AUDASPACE_CMAKE_CFG)
+ include(${AUDASPACE_CMAKE_CFG})
+endif()
+
+if(NOT DEFINED AUDASPACE_STANDALONE)
+ set(AUDASPACE_STANDALONE TRUE)
+endif()
+
+# sources
+
+set(SRC
+ src/devices/DefaultSynchronizer.cpp
+ src/devices/DeviceManager.cpp
+ src/devices/NULLDevice.cpp
+ src/devices/ReadDevice.cpp
+ src/devices/SoftwareDevice.cpp
+ src/Exception.cpp
+ src/file/File.cpp
+ src/file/FileManager.cpp
+ src/file/FileWriter.cpp
+ src/fx/Accumulator.cpp
+ src/fx/ADSR.cpp
+ src/fx/ADSRReader.cpp
+ src/fx/BaseIIRFilterReader.cpp
+ src/fx/ButterworthCalculator.cpp
+ src/fx/Butterworth.cpp
+ src/fx/CallbackIIRFilterReader.cpp
+ src/fx/Delay.cpp
+ src/fx/DelayReader.cpp
+ src/fx/DynamicIIRFilter.cpp
+ src/fx/DynamicIIRFilterReader.cpp
+ src/fx/DynamicMusic.cpp
+ src/fx/Effect.cpp
+ src/fx/EffectReader.cpp
+ src/fx/Envelope.cpp
+ src/fx/Fader.cpp
+ src/fx/FaderReader.cpp
+ src/fx/HighpassCalculator.cpp
+ src/fx/Highpass.cpp
+ src/fx/IIRFilter.cpp
+ src/fx/IIRFilterReader.cpp
+ src/fx/Limiter.cpp
+ src/fx/LimiterReader.cpp
+ src/fx/Loop.cpp
+ src/fx/LoopReader.cpp
+ src/fx/LowpassCalculator.cpp
+ src/fx/Lowpass.cpp
+ src/fx/MutableReader.cpp
+ src/fx/MutableSound.cpp
+ src/fx/Pitch.cpp
+ src/fx/PitchReader.cpp
+ src/fx/PlaybackManager.cpp
+ src/fx/PlaybackCategory.cpp
+ src/fx/Reverse.cpp
+ src/fx/ReverseReader.cpp
+ src/fx/SoundList.cpp
+ src/fx/Source.cpp
+ src/fx/Sum.cpp
+ src/fx/Threshold.cpp
+ src/fx/Volume.cpp
+ src/fx/VolumeReader.cpp
+ src/fx/VolumeSound.cpp
+ src/fx/VolumeStorage.cpp
+ src/generator/Sawtooth.cpp
+ src/generator/SawtoothReader.cpp
+ src/generator/Silence.cpp
+ src/generator/SilenceReader.cpp
+ src/generator/Sine.cpp
+ src/generator/SineReader.cpp
+ src/generator/Square.cpp
+ src/generator/SquareReader.cpp
+ src/generator/Triangle.cpp
+ src/generator/TriangleReader.cpp
+ src/respec/ChannelMapper.cpp
+ src/respec/ChannelMapperReader.cpp
+ src/respec/Converter.cpp
+ src/respec/ConverterFunctions.cpp
+ src/respec/ConverterReader.cpp
+ src/respec/JOSResample.cpp
+ src/respec/JOSResampleReaderCoeff.cpp
+ src/respec/JOSResampleReader.cpp
+ src/respec/LinearResample.cpp
+ src/respec/LinearResampleReader.cpp
+ src/respec/Mixer.cpp
+ src/respec/ResampleReader.cpp
+ src/respec/SpecsChanger.cpp
+ src/sequence/AnimateableProperty.cpp
+ src/sequence/Double.cpp
+ src/sequence/DoubleReader.cpp
+ src/sequence/PingPong.cpp
+ src/sequence/Sequence.cpp
+ src/sequence/SequenceData.cpp
+ src/sequence/SequenceEntry.cpp
+ src/sequence/SequenceHandle.cpp
+ src/sequence/SequenceReader.cpp
+ src/sequence/Superpose.cpp
+ src/sequence/SuperposeReader.cpp
+ src/util/Barrier.cpp
+ src/util/Buffer.cpp
+ src/util/BufferReader.cpp
+ src/util/StreamBuffer.cpp
+ src/util/ThreadPool.cpp
+)
+
+set(PRIVATE_HDR
+ src/sequence/SequenceHandle.h
+)
+
+set(PUBLIC_HDR
+ include/devices/DefaultSynchronizer.h
+ include/devices/DeviceManager.h
+ include/devices/I3DDevice.h
+ include/devices/I3DHandle.h
+ include/devices/IDeviceFactory.h
+ include/devices/IDevice.h
+ include/devices/IHandle.h
+ include/devices/ISynchronizer.h
+ include/devices/NULLDevice.h
+ include/devices/ReadDevice.h
+ include/devices/SoftwareDevice.h
+ include/Exception.h
+ include/file/File.h
+ include/file/FileManager.h
+ include/file/FileWriter.h
+ include/file/IFileInput.h
+ include/file/IFileOutput.h
+ include/file/IWriter.h
+ include/fx/Accumulator.h
+ include/fx/ADSR.h
+ include/fx/ADSRReader.h
+ include/fx/BaseIIRFilterReader.h
+ include/fx/ButterworthCalculator.h
+ include/fx/Butterworth.h
+ include/fx/CallbackIIRFilterReader.h
+ include/fx/Delay.h
+ include/fx/DelayReader.h
+ include/fx/DynamicIIRFilter.h
+ include/fx/DynamicIIRFilterReader.h
+ include/fx/DynamicMusic.h
+ include/fx/Effect.h
+ include/fx/EffectReader.h
+ include/fx/Envelope.h
+ include/fx/Fader.h
+ include/fx/FaderReader.h
+ include/fx/HighpassCalculator.h
+ include/fx/Highpass.h
+ include/fx/IDynamicIIRFilterCalculator.h
+ include/fx/IIRFilter.h
+ include/fx/IIRFilterReader.h
+ include/fx/Limiter.h
+ include/fx/LimiterReader.h
+ include/fx/Loop.h
+ include/fx/LoopReader.h
+ include/fx/LowpassCalculator.h
+ include/fx/Lowpass.h
+ include/fx/MutableReader.h
+ include/fx/MutableSound.h
+ include/fx/Pitch.h
+ include/fx/PitchReader.h
+ include/fx/PlaybackManager.h
+ include/fx/PlaybackCategory.h
+ include/fx/Reverse.h
+ include/fx/ReverseReader.h
+ include/fx/SoundList.h
+ include/fx/Source.h
+ include/fx/Sum.h
+ include/fx/Threshold.h
+ include/fx/Volume.h
+ include/fx/VolumeReader.h
+ include/fx/VolumeSound.h
+ include/fx/VolumeStorage.h
+ include/generator/Sawtooth.h
+ include/generator/SawtoothReader.h
+ include/generator/Silence.h
+ include/generator/SilenceReader.h
+ include/generator/Sine.h
+ include/generator/SineReader.h
+ include/generator/Square.h
+ include/generator/SquareReader.h
+ include/generator/Triangle.h
+ include/generator/TriangleReader.h
+ include/IReader.h
+ include/ISound.h
+ include/plugin/PluginManager.h
+ include/respec/ChannelMapper.h
+ include/respec/ChannelMapperReader.h
+ include/respec/ConverterFunctions.h
+ include/respec/Converter.h
+ include/respec/ConverterReader.h
+ include/respec/JOSResample.h
+ include/respec/JOSResampleReader.h
+ include/respec/LinearResample.h
+ include/respec/LinearResampleReader.h
+ include/respec/Mixer.h
+ include/respec/ResampleReader.h
+ include/respec/Specification.h
+ include/respec/SpecsChanger.h
+ include/sequence/AnimateableProperty.h
+ include/sequence/Double.h
+ include/sequence/DoubleReader.h
+ include/sequence/PingPong.h
+ include/sequence/SequenceData.h
+ include/sequence/SequenceEntry.h
+ include/sequence/Sequence.h
+ include/sequence/SequenceReader.h
+ include/sequence/Superpose.h
+ include/sequence/SuperposeReader.h
+ include/util/Barrier.h
+ include/util/Buffer.h
+ include/util/BufferReader.h
+ include/util/ILockable.h
+ include/util/Math3D.h
+ include/util/StreamBuffer.h
+ include/util/ThreadPool.h
+)
+
+set(HDR ${PRIVATE_HDR} ${PUBLIC_HDR})
+
+set(INCLUDE ${CMAKE_CURRENT_BINARY_DIR} include)
+
+if(WIN32)
+ set(LIBRARIES)
+ if(AUDASPACE_STANDALONE)
+ set(DLLS)
+ set(LIBRARY_PATH "../lib" CACHE PATH "Path which contains the libraries.")
+ file(GLOB LIBRARY_DIRS ${LIBRARY_PATH}/*)
+ list(APPEND CMAKE_PREFIX_PATH ${LIBRARY_DIRS})
+ endif()
+else()
+ set(LIBRARIES ${CMAKE_DL_LIBS} -lpthread)
+endif()
+
+set(STATIC_PLUGINS "")
+
+# dependencies
+
+if(AUDASPACE_STANDALONE)
+ set(PACKAGE_OPTION QUIET)
+ list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/")
+
+ option(BUILD_DEMOS "Build and install demos" TRUE)
+
+ option(SHARED_LIBRARY "Build Shared Library" TRUE)
+
+ option(WITH_C "Build C Module" TRUE)
+ option(WITH_DOCS "Build C++ HTML Documentation with Doxygen" TRUE)
+ option(WITH_FFMPEG "Build With FFMPEG" TRUE)
+ option(WITH_FFTW "Build With FFTW" TRUE)
+ option(WITH_JACK "Build With Plugin" TRUE)
+ option(WITH_LIBSNDFILE "Build With LibSndFile" TRUE)
+ option(WITH_OPENAL "Build With OpenAL" TRUE)
+ option(WITH_PYTHON "Build With Python Library" TRUE)
+ option(WITH_SDL "Build With SDL" TRUE)
+ option(WITH_STRICT_DEPENDENCIES "Error and abort instead of warning if a library is not found." FALSE)
+
+ if(WITH_STRICT_DEPENDENCIES)
+ set(PACKAGE_OPTION REQUIRED)
+ endif()
+endif()
+
+if(WIN32)
+ set(DEFAULT_PLUGIN_PATH "." CACHE STRING "Default plugin installation and loading path.")
+ set(DOCUMENTATION_INSTALL_PATH "doc" CACHE PATH "Path where the documentation is installed.")
+else()
+ set(DEFAULT_PLUGIN_PATH "${CMAKE_INSTALL_PREFIX}/share/audaspace/plugins" CACHE STRING "Default plugin installation and loading path.")
+ set(DOCUMENTATION_INSTALL_PATH "share/doc/audaspace" CACHE PATH "Path where the documentation is installed.")
+endif()
+
+if(AUDASPACE_STANDALONE)
+ cmake_dependent_option(SEPARATE_C "Build C Binding as separate library" TRUE "WITH_C" FALSE)
+ cmake_dependent_option(PLUGIN_FFMPEG "Build FFMPEG Plugin" TRUE "WITH_FFMPEG;SHARED_LIBRARY" FALSE)
+ cmake_dependent_option(PLUGIN_JACK "Build JACK Plugin" TRUE "WITH_JACK;SHARED_LIBRARY" FALSE)
+ cmake_dependent_option(PLUGIN_LIBSNDFILE "Build LibSndFile Plugin" TRUE "WITH_LIBSNDFILE;SHARED_LIBRARY" FALSE)
+ cmake_dependent_option(PLUGIN_OPENAL "Build OpenAL Plugin" TRUE "WITH_OPENAL;SHARED_LIBRARY" FALSE)
+ cmake_dependent_option(PLUGIN_SDL "Build SDL Plugin" TRUE "WITH_SDL;SHARED_LIBRARY" FALSE)
+ cmake_dependent_option(WITH_PYTHON_MODULE "Build Python Module" TRUE "WITH_PYTHON" FALSE)
+ cmake_dependent_option(USE_SDL2 "Use SDL2 instead of 1 if available" TRUE "WITH_SDL" FALSE)
+ cmake_dependent_option(DYNLOAD_JACK "Dynamically load JACK" FALSE "WITH_JACK" FALSE)
+ cmake_dependent_option(WITH_BINDING_DOCS "Build C/Python HTML Documentation with Sphinx" TRUE "WITH_PYTHON_MODULE" FALSE)
+endif()
+
+# compiler options
+
+if(AUDASPACE_STANDALONE)
+ if(CMAKE_COMPILER_IS_GNUCXX OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
+ add_definitions(-std=c++11)
+ list(APPEND CMAKE_C_COMPILER_FLAGS "-fvisibility=hidden")
+ list(APPEND CMAKE_CXX_COMPILER_FLAGS "-fvisibility=hidden")
+ endif()
+
+ if(MSVC)
+ list(APPEND CMAKE_C_FLAGS_DEBUG "/Zi /Od")
+ list(APPEND CMAKE_CXX_FLAGS_DEBUG "/Zi /Od")
+ list(APPEND CMAKE_SHARED_LINKER_FLAGS_DEBUG "/DEBUG")
+ list(APPEND CMAKE_STATIC_LINKER_FLAGS_DEBUG "/DEBUG")
+ list(APPEND CMAKE_EXE_LINKER_FLAGS_DEBUG "/DEBUG")
+
+ if(SHARED_LIBRARY)
+ include(GenerateExportHeader)
+ endif()
+ endif()
+
+ if(APPLE AND NOT CMAKE_OSX_DEPLOYMENT_TARGET)
+ set(CMAKE_OSX_DEPLOYMENT_TARGET "10.9" CACHE STRING "" FORCE)
+ endif()
+endif()
+
+if(MSVC)
+ add_definitions(
+ /D_USE_MATH_DEFINES
+ /EHsc
+ /DNOMINMAX
+ /D_STDINT_H
+ )
+endif()
+
+# platform specific options
+
+if(MSYS OR MINGW)
+ add_definitions(-D_USE_MATH_DEFINES)
+endif()
+
+# C
+if(WITH_C)
+ set(C_SRC
+ bindings/C/AUD_ThreadPool.cpp
+ bindings/C/AUD_Source.cpp
+ bindings/C/AUD_Device.cpp
+ bindings/C/AUD_DynamicMusic.cpp
+ bindings/C/AUD_Handle.cpp
+ bindings/C/AUD_PlaybackManager.cpp
+ bindings/C/AUD_Sequence.cpp
+ bindings/C/AUD_Sound.cpp
+ bindings/C/AUD_Special.cpp
+ )
+ set(C_HDR
+ bindings/C/AUD_ThreadPool.h
+ bindings/C/AUD_Source.h
+ bindings/C/AUD_Device.h
+ bindings/C/AUD_DynamicMusic.h
+ bindings/C/AUD_Handle.h
+ bindings/C/AUD_PlaybackManager.h
+ bindings/C/AUD_Sequence.h
+ bindings/C/AUD_Sound.h
+ bindings/C/AUD_Special.h
+ bindings/C/AUD_Types.h
+ )
+
+if(WITH_FFTW)
+ list(APPEND C_SRC
+ bindings/C/AUD_HRTF.cpp
+ bindings/C/AUD_ImpulseResponse.cpp
+ )
+
+ list(APPEND C_HDR
+ bindings/C/AUD_HRTF.h
+ bindings/C/AUD_ImpulseResponse.h
+ )
+ endif()
+
+ if(NOT SEPARATE_C)
+ list(APPEND SRC ${C_SRC})
+ list(APPEND HDR ${C_HDR})
+ else()
+ set(AUDASPACE_C_LIBRARY -laudaspace-c)
+ endif()
+endif()
+
+# FFMPEG
+if(WITH_FFMPEG)
+ if(AUDASPACE_STANDALONE)
+ find_package(FFMPEG ${PACKAGE_OPTION})
+ endif()
+
+ if(FFMPEG_FOUND)
+ set(FFMPEG_SRC
+ plugins/ffmpeg/FFMPEG.cpp
+ plugins/ffmpeg/FFMPEGReader.cpp
+ plugins/ffmpeg/FFMPEGWriter.cpp
+ )
+ set(FFMPEG_HDR
+ plugins/ffmpeg/FFMPEG.h
+ plugins/ffmpeg/FFMPEGReader.h
+ plugins/ffmpeg/FFMPEGWriter.h
+ )
+
+ if(NOT PLUGIN_FFMPEG)
+ list(APPEND INCLUDE ${FFMPEG_INCLUDE_DIRS})
+ list(APPEND LIBRARIES ${FFMPEG_LIBRARIES})
+ list(APPEND SRC ${FFMPEG_SRC})
+ list(APPEND HDR ${FFMPEG_HDR})
+ list(APPEND STATIC_PLUGINS FFMPEG)
+ endif()
+
+ if(WIN32 AND AUDASPACE_STANDALONE)
+ file(GLOB FFMPEG_DLLS ${LIBRARY_PATH}/ffmpeg/bin/*.dll)
+ list(APPEND DLLS ${FFMPEG_DLLS})
+ endif()
+ else()
+ set(WITH_FFMPEG FALSE CACHE BOOL "Build With FFMPEG" FORCE)
+ message(WARNING "FFMPEG not found, plugin will not be built.")
+ endif()
+endif()
+
+# FFTW
+if(WITH_FFTW)
+ if(AUDASPACE_STANDALONE)
+ find_package(FFTW ${PACKAGE_OPTION})
+ endif()
+
+ if(FFTW_FOUND)
+ set(FFTW_SRC
+ src/fx/BinauralSound.cpp
+ src/fx/BinauralReader.cpp
+ src/fx/Convolver.cpp
+ src/fx/ConvolverReader.cpp
+ src/fx/ConvolverSound.cpp
+ src/fx/FFTConvolver.cpp
+ src/fx/HRTF.cpp
+ src/fx/ImpulseResponse.cpp
+ src/util/FFTPlan.cpp
+ )
+ set(FFTW_HDR
+ include/fx/BinauralSound.h
+ include/fx/BinauralReader.h
+ include/fx/Convolver.h
+ include/fx/ConvolverReader.h
+ include/fx/ConvolverSound.h
+ include/fx/FFTConvolver.h
+ include/fx/HRTF.h
+ include/fx/HRTFLoader.h
+ include/fx/ImpulseResponse.h
+ include/util/FFTPlan.h
+ )
+
+ add_definitions(-DWITH_CONVOLUTION)
+
+ list(APPEND INCLUDE ${FFTW_INCLUDE_DIR})
+ list(APPEND LIBRARIES ${FFTW_LIBRARY})
+
+ list(APPEND SRC ${FFTW_SRC})
+ list(APPEND HDR ${FFTW_HDR})
+
+ if(WIN32 AND AUDASPACE_STANDALONE)
+ file(GLOB FFTW_DLLS ${LIBRARY_PATH}/fftw/bin/*.dll)
+ list(APPEND DLLS ${FFTW_DLLS})
+ endif()
+ else()
+ set(WITH_FFTW FALSE CACHE BOOL "Build With FFTW" FORCE)
+ message(WARNING "FFTW not found, convolution functionality will not be built.")
+ endif()
+endif()
+
+# JACK
+if(WITH_JACK)
+ if(AUDASPACE_STANDALONE)
+ find_package(Jack ${PACKAGE_OPTION})
+ endif()
+
+ if(JACK_FOUND)
+ set(JACK_SRC
+ plugins/jack/JackDevice.cpp
+ plugins/jack/JackSynchronizer.cpp
+ plugins/jack/JackLibrary.cpp
+ )
+ set(JACK_HDR
+ plugins/jack/JackDevice.h
+ plugins/jack/JackSynchronizer.h
+ plugins/jack/JackLibrary.h
+ plugins/jack/JackSymbols.h
+ )
+
+ if(DYNLOAD_JACK)
+ add_definitions(-DDYNLOAD_JACK)
+ endif()
+
+ if(NOT PLUGIN_JACK)
+ list(APPEND INCLUDE ${JACK_INCLUDE_DIRS})
+ if(NOT DYNLOAD_JACK)
+ list(APPEND LIBRARIES ${JACK_LIBRARIES})
+ endif()
+ list(APPEND SRC ${JACK_SRC})
+ list(APPEND HDR ${JACK_HDR})
+ list(APPEND STATIC_PLUGINS JackDevice)
+ endif()
+
+ if(WIN32 AND AUDASPACE_STANDALONE)
+ file(GLOB JACK_DLLS ${LIBRARY_PATH}/jack/bin/*.dll)
+ list(APPEND DLLS ${JACK_DLLS})
+ endif()
+ else()
+ set(WITH_JACK FALSE CACHE BOOL "Build With JACK" FORCE)
+ message(WARNING "JACK not found, plugin will not be built.")
+ endif()
+endif()
+
+# LibSndFile
+if(WITH_LIBSNDFILE)
+ if(AUDASPACE_STANDALONE)
+ find_package(LibSndFile ${PACKAGE_OPTION})
+ endif()
+
+ if(LIBSNDFILE_FOUND)
+ set(LIBSNDFILE_SRC
+ plugins/libsndfile/SndFile.cpp
+ plugins/libsndfile/SndFileReader.cpp
+ plugins/libsndfile/SndFileWriter.cpp
+ )
+ set(LIBSNDFILE_HDR
+ plugins/libsndfile/SndFile.h
+ plugins/libsndfile/SndFileReader.h
+ plugins/libsndfile/SndFileWriter.h
+ )
+
+ if(NOT PLUGIN_LIBSNDFILE)
+ list(APPEND INCLUDE ${LIBSNDFILE_INCLUDE_DIRS})
+ list(APPEND LIBRARIES ${LIBSNDFILE_LIBRARIES})
+ list(APPEND SRC ${LIBSNDFILE_SRC})
+ list(APPEND HDR ${LIBSNDFILE_HDR})
+ list(APPEND STATIC_PLUGINS SndFile)
+ endif()
+
+ if(WIN32 AND AUDASPACE_STANDALONE)
+ file(GLOB LIBSNDFILE_DLLS ${LIBRARY_PATH}/libsndfile/bin/*.dll)
+ list(APPEND DLLS ${LIBSNDFILE_DLLS})
+ endif()
+ else()
+ set(WITH_LIBSNDFILE FALSE CACHE BOOL "Build With LibSndFile" FORCE)
+ message(WARNING "LibSndFile not found, plugin will not be built.")
+ endif()
+endif()
+
+# OpenAL
+if(WITH_OPENAL)
+ if(AUDASPACE_STANDALONE)
+ find_package(OpenAL ${PACKAGE_OPTION})
+ endif()
+
+ if(OPENAL_FOUND)
+ set(OPENAL_SRC
+ plugins/openal/OpenALDevice.cpp
+ plugins/openal/OpenALReader.cpp
+ )
+ set(OPENAL_HDR
+ plugins/openal/OpenALDevice.h
+ plugins/openal/OpenALReader.h
+ )
+
+ if(NOT PLUGIN_OPENAL)
+ list(APPEND INCLUDE ${OPENAL_INCLUDE_DIR})
+ list(APPEND LIBRARIES ${OPENAL_LIBRARY})
+ list(APPEND SRC ${OPENAL_SRC})
+ list(APPEND HDR ${OPENAL_HDR})
+ list(APPEND STATIC_PLUGINS OpenALDevice)
+ endif()
+
+ if(WIN32 AND AUDASPACE_STANDALONE)
+ file(GLOB OPENAL_DLLS ${LIBRARY_PATH}/OpenAL/bin/*.dll)
+ list(APPEND DLLS ${OPENAL_DLLS})
+ endif()
+ else()
+ set(WITH_OPENAL FALSE CACHE BOOL "Build With OpenAL" FORCE)
+ message(WARNING "OpenAL not found, plugin will not be built.")
+ endif()
+endif()
+
+# Python
+if(WITH_PYTHON)
+ if(AUDASPACE_STANDALONE)
+ find_package(PythonLibs 3.2 ${PACKAGE_OPTION})
+ find_package(NumPy ${PACKAGE_OPTION})
+ endif()
+
+ if(PYTHONLIBS_FOUND AND NUMPY_FOUND)
+ list(APPEND INCLUDE ${PYTHON_INCLUDE_DIRS} ${NUMPY_INCLUDE_DIRS})
+
+ if(WITH_PYTHON_MODULE)
+ find_package(PythonInterp 3.2 ${PACKAGE_OPTION})
+
+ if(NOT PYTHONINTERP_FOUND)
+ set(WITH_PYTHON_MODULE FALSE)
+ message(WARNING "Python interpreter not found, module will not be built.")
+ endif()
+ endif()
+
+ set(AUDASPACE_PY_LIBRARY -laudaspace-py)
+
+ if(WIN32 AND AUDASPACE_STANDALONE)
+ file(GLOB PYTHON_DLLS ${LIBRARY_PATH}/Python/bin/*.dll)
+ list(APPEND DLLS ${PYTHON_DLLS})
+ endif()
+ else()
+ set(WITH_PYTHON FALSE CACHE BOOL "Build With Python Library" FORCE)
+ message(WARNING "Python libraries not found, language binding will not be built.")
+ endif()
+endif()
+
+# SDL
+if(WITH_SDL)
+ if(AUDASPACE_STANDALONE)
+ if(USE_SDL2)
+ find_package(SDL2)
+ if(SDL2_FOUND)
+ set(SDL_INCLUDE_DIR ${SDL2_INCLUDE_DIR})
+ set(SDL_LIBRARY ${SDL2_LIBRARY})
+ set(SDL_FOUND TRUE)
+ else()
+ find_package(SDL ${PACKAGE_OPTION})
+ endif()
+ else()
+ find_package(SDL ${PACKAGE_OPTION})
+ endif()
+ endif()
+
+ if(SDL_FOUND)
+ set(SDL_SRC
+ plugins/sdl/SDLDevice.cpp
+ )
+ set(SDL_HDR
+ plugins/sdl/SDLDevice.h
+ )
+
+ if(NOT PLUGIN_SDL)
+ list(APPEND INCLUDE ${SDL_INCLUDE_DIR})
+ list(APPEND LIBRARIES ${SDL_LIBRARY})
+ list(APPEND SRC ${SDL_SRC})
+ list(APPEND HDR ${SDL_HDR})
+ list(APPEND STATIC_PLUGINS SDLDevice)
+ endif()
+
+ if(WIN32 AND AUDASPACE_STANDALONE)
+ file(GLOB SDL_DLLS ${LIBRARY_PATH}/sdl/bin/*.dll)
+ list(APPEND DLLS ${SDL_DLLS})
+ endif()
+ else()
+ set(WITH_SDL FALSE CACHE BOOL "Build With SDL" FORCE)
+ message(WARNING "SDL not found, plugin will not be built.")
+ endif()
+endif()
+
+# library configuration
+
+if(SHARED_LIBRARY)
+ set(AUD_LIBRARY_TYPE AUD_SHARED_LIBRARY)
+ set(LIBRARY_TYPE SHARED)
+ add_definitions(-DAUD_BUILD_SHARED_LIBRARY)
+else()
+ set(AUD_LIBRARY_TYPE AUD_STATIC_LIBRARY)
+ set(LIBRARY_TYPE STATIC)
+endif()
+
+# file configuration
+
+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config/Audaspace.h.in ${CMAKE_CURRENT_BINARY_DIR}/Audaspace.h ESCAPE_QUOTES @ONLY)
+
+list(APPEND HDR ${CMAKE_CURRENT_BINARY_DIR}/Audaspace.h)
+
+set(STATIC_PLUGIN_CLASSES "")
+set(STATIC_PLUGIN_REGISTERS "")
+
+foreach(PLUGIN ${STATIC_PLUGINS})
+ list(APPEND STATIC_PLUGIN_CLASSES "STATIC_PLUGIN_CLASS(" ${PLUGIN} ")\n")
+ list(APPEND STATIC_PLUGIN_REGISTERS "\tSTATIC_PLUGIN_REGISTER(" ${PLUGIN} ")\n")
+endforeach()
+
+string(CONCAT STATIC_PLUGIN_CLASSES ${STATIC_PLUGIN_CLASSES})
+string(CONCAT STATIC_PLUGIN_REGISTERS ${STATIC_PLUGIN_REGISTERS})
+
+if(WIN32)
+ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/plugin/PluginManagerWindows.cpp.in ${CMAKE_CURRENT_BINARY_DIR}/PluginManager.cpp ESCAPE_QUOTES @ONLY)
+ if(WITH_FFTW)
+ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/fx/HRTFLoaderWindows.cpp ${CMAKE_CURRENT_BINARY_DIR}/HRTFLoader.cpp COPYONLY)
+ endif()
+else()
+ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/plugin/PluginManagerUnix.cpp.in ${CMAKE_CURRENT_BINARY_DIR}/PluginManager.cpp ESCAPE_QUOTES @ONLY)
+ if(WITH_FFTW)
+ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/fx/HRTFLoaderUnix.cpp ${CMAKE_CURRENT_BINARY_DIR}/HRTFLoader.cpp COPYONLY)
+ endif()
+endif()
+
+list(APPEND SRC ${CMAKE_CURRENT_BINARY_DIR}/PluginManager.cpp)
+if(WITH_FFTW)
+ list(APPEND SRC ${CMAKE_CURRENT_BINARY_DIR}/HRTFLoader.cpp)
+endif()
+
+# directories
+
+include_directories(${INCLUDE})
+link_directories()
+
+# install configuration
+
+if(WIN32)
+ set(BIN_DESTINATION ".")
+else()
+ set(BIN_DESTINATION "bin")
+endif()
+
+set(LIB_DESTINATION "lib${LIB_SUFFIX}")
+
+# library
+
+add_library(audaspace ${LIBRARY_TYPE} ${SRC} ${HDR})
+target_link_libraries(audaspace ${LIBRARIES})
+set_target_properties(audaspace PROPERTIES SOVERSION ${AUDASPACE_VERSION})
+
+if(AUDASPACE_STANDALONE)
+ install(TARGETS audaspace
+ RUNTIME DESTINATION ${BIN_DESTINATION}
+ LIBRARY DESTINATION ${LIB_DESTINATION}
+ ARCHIVE DESTINATION ${LIB_DESTINATION}
+ )
+
+ install(DIRECTORY ${CMAKE_SOURCE_DIR}/include/ DESTINATION include/audaspace)
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/Audaspace.h DESTINATION include/audaspace)
+
+ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/packages/pkgconfig/audaspace.pc.in ${CMAKE_CURRENT_BINARY_DIR}/audaspace.pc @ONLY)
+
+ if(NOT WIN32 AND NOT APPLE)
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/audaspace.pc DESTINATION "lib${LIB_SUFFIX}/pkgconfig")
+ endif()
+endif()
+
+# plugins
+
+if(WITH_FFMPEG AND PLUGIN_FFMPEG)
+ add_definitions(-DFFMPEG_PLUGIN)
+ include_directories(${INCLUDE} ${FFMPEG_INCLUDE_DIRS})
+ add_library(audffmpeg SHARED ${FFMPEG_SRC} ${FFMPEG_HDR} ${HDR})
+ target_link_libraries(audffmpeg audaspace ${FFMPEG_LIBRARIES})
+ set_target_properties(audffmpeg PROPERTIES SOVERSION ${AUDASPACE_VERSION})
+ install(TARGETS audffmpeg DESTINATION ${DEFAULT_PLUGIN_PATH})
+endif()
+
+if(WITH_JACK AND PLUGIN_JACK)
+ add_definitions(-DJACK_PLUGIN)
+ include_directories(${INCLUDE} ${JACK_INCLUDE_DIRS})
+ add_library(audjack SHARED ${JACK_SRC} ${JACK_HDR} ${HDR})
+ if(DYNLOAD_JACK)
+ target_link_libraries(audjack audaspace)
+ else()
+ target_link_libraries(audjack audaspace ${JACK_LIBRARIES})
+ endif()
+ set_target_properties(audjack PROPERTIES SOVERSION ${AUDASPACE_VERSION})
+ install(TARGETS audjack DESTINATION ${DEFAULT_PLUGIN_PATH})
+endif()
+
+if(WITH_LIBSNDFILE AND PLUGIN_LIBSNDFILE)
+ add_definitions(-DLIBSNDFILE_PLUGIN)
+ include_directories(${INCLUDE} ${LIBSNDFILE_INCLUDE_DIRS})
+ add_library(audlibsndfile SHARED ${LIBSNDFILE_SRC} ${LIBSNDFILE_HDR} ${HDR})
+ set_target_properties(audlibsndfile PROPERTIES SOVERSION ${AUDASPACE_VERSION})
+ target_link_libraries(audlibsndfile audaspace ${LIBSNDFILE_LIBRARIES})
+ install(TARGETS audlibsndfile DESTINATION ${DEFAULT_PLUGIN_PATH})
+endif()
+
+if(WITH_OPENAL AND PLUGIN_OPENAL)
+ add_definitions(-DOPENAL_PLUGIN)
+ include_directories(${INCLUDE} ${OPENAL_INCLUDE_DIR})
+ add_library(audopenal SHARED ${OPENAL_SRC} ${OPENAL_HDR} ${HDR})
+ set_target_properties(audopenal PROPERTIES SOVERSION ${AUDASPACE_VERSION})
+ target_link_libraries(audopenal audaspace ${OPENAL_LIBRARY})
+ install(TARGETS audopenal DESTINATION ${DEFAULT_PLUGIN_PATH})
+endif()
+
+if(WITH_SDL AND PLUGIN_SDL)
+ add_definitions(-DSDL_PLUGIN)
+ include_directories(${INCLUDE} ${SDL_INCLUDE_DIR})
+ add_library(audsdl SHARED ${SDL_SRC} ${SDL_HDR} ${HDR})
+ set_target_properties(audsdl PROPERTIES SOVERSION ${AUDASPACE_VERSION})
+ target_link_libraries(audsdl audaspace ${SDL_LIBRARY})
+ install(TARGETS audsdl DESTINATION ${DEFAULT_PLUGIN_PATH})
+endif()
+
+# dlls
+
+if(WIN32)
+ if(DLLS)
+ install(FILES ${DLLS} DESTINATION ${BIN_DESTINATION})
+ endif()
+endif()
+
+# demos
+
+if(BUILD_DEMOS)
+ include_directories(${INCLUDE})
+
+ set(DEMOS audaplay audaconvert audaremap signalgen randsounds dynamicmusic playbackmanager)
+
+ add_executable(audaplay demos/audaplay.cpp)
+ target_link_libraries(audaplay audaspace)
+
+ add_executable(audaconvert demos/audaconvert.cpp)
+ target_link_libraries(audaconvert audaspace)
+
+ add_executable(audaremap demos/audaremap.cpp)
+ target_link_libraries(audaremap audaspace)
+
+ add_executable(signalgen demos/signalgen.cpp)
+ target_link_libraries(signalgen audaspace)
+
+ add_executable(randsounds demos/randsounds.cpp)
+ target_link_libraries(randsounds audaspace)
+
+ add_executable(dynamicmusic demos/dynamicmusic.cpp)
+ target_link_libraries(dynamicmusic audaspace)
+
+ add_executable(playbackmanager demos/playbackmanager.cpp)
+ target_link_libraries(playbackmanager audaspace)
+
+ if(WITH_FFTW)
+ list(APPEND DEMOS convolution binaural)
+
+ add_executable(convolution demos/convolution.cpp)
+ target_link_libraries(convolution audaspace)
+
+ add_executable(binaural demos/binaural.cpp)
+ target_link_libraries(binaural audaspace)
+ endif()
+
+ if(WITH_OPENAL)
+ list(APPEND DEMOS openaldevices)
+
+ add_executable(openaldevices demos/openaldevices.cpp)
+ if(PLUGIN_OPENAL)
+ target_link_libraries(openaldevices audaspace audopenal)
+ else()
+ target_link_libraries(openaldevices audaspace)
+ endif()
+ endif()
+
+ install(TARGETS ${DEMOS}
+ RUNTIME DESTINATION ${BIN_DESTINATION}
+ LIBRARY DESTINATION ${LIB_DESTINATION}
+ ARCHIVE DESTINATION ${LIB_DESTINATION}
+ )
+endif()
+
+# bindings
+
+if(WITH_C)
+ if(SEPARATE_C)
+ add_library(audaspace-c ${LIBRARY_TYPE} ${C_SRC} ${C_HDR})
+ target_link_libraries(audaspace-c audaspace)
+ set_target_properties(audaspace-c PROPERTIES SOVERSION ${AUDASPACE_VERSION})
+ install(TARGETS audaspace-c
+ RUNTIME DESTINATION ${BIN_DESTINATION}
+ LIBRARY DESTINATION ${LIB_DESTINATION}
+ ARCHIVE DESTINATION ${LIB_DESTINATION}
+ )
+ endif()
+
+ if(AUDASPACE_STANDALONE)
+ install(FILES ${C_HDR} DESTINATION include/audaspace)
+ endif()
+endif()
+
+if(WITH_PYTHON)
+ set(PYTHON_SRC
+ bindings/python/PyAPI.cpp
+ bindings/python/PyDevice.cpp
+ bindings/python/PyDynamicMusic.cpp
+ bindings/python/PyHandle.cpp
+ bindings/python/PyPlaybackManager.cpp
+ bindings/python/PySequence.cpp
+ bindings/python/PySequenceEntry.cpp
+ bindings/python/PySound.cpp
+ bindings/python/PySource.cpp
+ bindings/python/PyThreadPool.cpp
+ )
+ set(PYTHON_HDR
+ bindings/python/PyAPI.h
+ bindings/python/PyDevice.h
+ bindings/python/PyDynamicMusic.h
+ bindings/python/PyHandle.h
+ bindings/python/PyPlaybackManager.h
+ bindings/python/PySequence.h
+ bindings/python/PySequenceEntry.h
+ bindings/python/PySound.h
+ bindings/python/PySource.h
+ bindings/python/PyThreadPool.h
+ )
+
+ if(WITH_FFTW)
+ list(APPEND PYTHON_SRC
+ bindings/python/PyHRTF.cpp
+ bindings/python/PyImpulseResponse.cpp
+ )
+ list(APPEND PYTHON_HDR
+ bindings/python/PyHRTF.h
+ bindings/python/PyImpulseResponse.h
+ )
+ endif()
+
+ add_library(audaspace-py ${LIBRARY_TYPE} ${PYTHON_SRC} ${PYTHON_HDR})
+ target_link_libraries(audaspace-py audaspace ${PYTHON_LIBRARIES})
+ set_target_properties(audaspace-py PROPERTIES SOVERSION ${AUDASPACE_VERSION})
+
+ if(AUDASPACE_STANDALONE)
+ install(TARGETS audaspace-py
+ RUNTIME DESTINATION ${BIN_DESTINATION}
+ LIBRARY DESTINATION ${LIB_DESTINATION}
+ ARCHIVE DESTINATION ${LIB_DESTINATION}
+ )
+
+ install(FILES ${PYTHON_HDR} DESTINATION include/audaspace/python)
+ endif()
+
+ if(WITH_PYTHON_MODULE)
+ set(PYTHON_SOURCE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bindings/python)
+ configure_file(${PYTHON_SOURCE_DIRECTORY}/setup.py.in ${CMAKE_CURRENT_BINARY_DIR}/setup.py ESCAPE_QUOTES @ONLY)
+
+ if(APPLE)
+ add_custom_command(OUTPUT build COMMAND MACOSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET} ${PYTHON_EXECUTABLE} setup.py build DEPENDS ${PYTHON_SRC} ${PYTHON_HDR})
+ elseif(WIN32)
+ set(ENV{VS100COMNTOOLS} $ENV{VS120COMNTOOLS})
+ add_custom_command(OUTPUT build COMMAND ${PYTHON_EXECUTABLE} setup.py build DEPENDS ${PYTHON_SRC} ${PYTHON_HDR})
+ else()
+ add_custom_command(OUTPUT build COMMAND ${PYTHON_EXECUTABLE} setup.py build DEPENDS ${PYTHON_SRC} ${PYTHON_HDR})
+ endif()
+ add_custom_target(pythonmodule ALL DEPENDS build SOURCES ${PYTHON_SOURCE_DIRECTORY}/setup.py.in ${PYTHON_SRC} ${PYTHON_HDR})
+ add_dependencies(pythonmodule audaspace)
+
+ install(CODE "EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} setup.py install --root=\$ENV{DESTDIR} --prefix=${CMAKE_INSTALL_PREFIX})")
+ endif()
+endif()
+
+# docs
+
+if(WITH_DOCS)
+ find_package(Doxygen ${PACKAGE_OPTION})
+
+ if(DOXYGEN_FOUND AND DOXYGEN_DOT_FOUND)
+ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
+
+ add_custom_target(audaspace_doc ALL ${DOXYGEN_EXECUTABLE} Doxyfile COMMENT "Building C++ HTML documentation with Doxygen.")
+ else()
+ set(WITH_DOCS FALSE CACHE BOOL "Build C++ HTML Documentation with Doxygen" FORCE)
+ message(WARNING "Doxygen (and/or dot) not found, documentation will not be built.")
+ endif()
+endif()
+
+if(WITH_BINDING_DOCS)
+ find_package(Sphinx ${PACKAGE_OPTION})
+
+ if(SPHINX_FOUND)
+ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/bindings/doc/conf.py.in ${CMAKE_CURRENT_BINARY_DIR}/conf.py @ONLY)
+
+ add_custom_target(bindings_doc ALL COMMAND ${PYTHON_EXECUTABLE} setup.py --build-docs ${SPHINX_EXECUTABLE} -q -b html -c "${CMAKE_CURRENT_BINARY_DIR}" -d "${CMAKE_CURRENT_BINARY_DIR}/_doctrees" "${CMAKE_CURRENT_SOURCE_DIR}/bindings/doc" "${CMAKE_CURRENT_BINARY_DIR}/doc/bindings" DEPENDS pythonmodule COMMENT "Building C/Python HTML documentation with Sphinx.")
+ else()
+ set(WITH_BINDING_DOCS FALSE CACHE BOOL "Build C/Python HTML Documentation with Sphinx" FORCE)
+ message(WARNING "Sphinx not found, binding documentation will not be built.")
+ endif()
+endif()
+
+if(WITH_DOCS OR WITH_BINDING_DOCS)
+ install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc/ DESTINATION ${DOCUMENTATION_INSTALL_PATH})
+endif()
diff --git a/extern/audaspace/INSTALL b/extern/audaspace/INSTALL
new file mode 100644
index 00000000000..c63206fb949
--- /dev/null
+++ b/extern/audaspace/INSTALL
@@ -0,0 +1,107 @@
+Audaspace Installation Guide
+============================
+
+This document guides through the building and installation of audaspace.
+
+The build system used to build audaspace is CMake and it allows very building the library for very different application scenarios from a very general shared library build with plugins that is suitable for system wide installations to building everything into a single static library to be linked into a standalone program.
+
+Build Dependencies
+------------------
+
+Audaspace is written in C++ 11 so a fairly recent compiler (g++ 4.8.2, clang 3.3, MSVC 2013) is needed to build it. The build system used is CMake and you need at least version 3.0. The following build dependencies are all optional, but without any it's neither possible to open sound files nor play back through the speakers. For windows a library folder called build-dependencies can be downloaded from https://github.com/audaspace/audaspace/releases.
+
+- OpenAL (input/output device)
+- SDL (output device)
+- Jack (output device)
+- libsndfile (file access)
+- ffmpeg (file access)
+- Python (language binding)
+
+Getting the Code
+----------------
+
+The audaspace source code or binary releases can be downloaded from https://github.com/audaspace/audaspace/releases.
+
+For the most recent version you can use git to get the source code.
+
+ git clone https://github.com/audaspace/audaspace.git
+
+Plugins
+-------
+
+Before diving into the exact build steps for each platform, we will have a look at plugins. There are so far two types of plugins: input and output plugins. Input plugins are for reading audio files in many different formats and output plugins are for output devices on different platforms. During the configuration audaspace's standard plugins can be enabled with their repsective `WITH_*` and `PLUGIN_*` configuration option. Plugins are built as shared libraries. By default audaspace looks in the `DEFAULT_PLUGIN_PATH` for shared libraries it can load. Building with a dependency (`WITH_*`) but without enabling the respective `PLUGIN_*` option will compile the plugin directly into the library, so the plugin always gets loaded when the plugins are initialised.
+
+Building for Linux
+------------------
+
+### Configuration ###
+
+It is highly recommended to build audaspace outside of the actual source code in a specific build directory.
+
+ mkdir build
+ cd build
+
+Configuration is then either done interactively by using ccmake
+
+ ccmake ../audaspace
+
+__or__ it can be done by defining variables directly during the run of cmake.
+
+ cmake ../build \
+ -DCMAKE_INSTALL_PREFIX:PATH=/usr \
+ -DCMAKE_BUILD_TYPE:STRING=Release \
+ -DBUILD_DEMOS:BOOL=TRUE \
+ -DSHARED_LIBRARY:BOOL=TRUE \
+ -DWITH_C:BOOL=TRUE \
+ -DWITH_FFMPEG:BOOL=TRUE \
+ -DWITH_JACK:BOOL=TRUE \
+ -DWITH_LIBSNDFILE:BOOL=TRUE \
+ -DWITH_OPENAL:BOOL=TRUE \
+ -DWITH_PYTHON:BOOL=TRUE \
+ -DWITH_SDL:BOOL=TRUE \
+ -DDEFAULT_PLUGIN_PATH:PATH=/usr/share/audaspace/plugins
+
+This specific configuration is recommended for a system wide installation of audaspace where all build dependencies are required.
+
+### Building ###
+
+After configuration the building is as easy as running
+
+ make
+
+### Installation ###
+
+Installation is then also simple using
+
+ make install
+
+### Using the library ###
+
+When audaspace is installed to the system, the required configuration for _pkgconfig_ is also installed and pkgconfig can then be used to compile projects with audaspace.
+
+It is also possible to build audaspace as a static library and use it directly in a project. For this the library has to be configured accordingly with ccmake and after building the resulting library file can be added to the project's build system.
+
+Building for Windows
+--------------------
+
+### Configuration ###
+
+Using cmake-gui select Visual Studio 2013 or 2015 for the architecture you want to build for and choose audaspace's source directory and a build directory. It is highly recommended to build audaspace outside of the source directory. During the first configuration cmake tries to find the dependencies. Dependencies that are not installed on the system are automatically disabled. To prevent this, enable `WITH_STRICT_DEPENDENCIES`. To use the build dependencies folder from the website, set the `LIBRARY_PATH` to point to the extracted directory. Also don't forget to set the `CMAKE_INSTALL_PREFIX` to a path where your user account can install to. Finally enable the dependencies that you want to use (`WITH_*`), configure and generate.
+
+### Building ###
+
+Open the project in Visual Studio and set the configuration to Release. Then you can simply hit the build button.
+
+### Installation ###
+
+To install audaspace to your target folder, build the INSTALL target.
+Note that if you don't use the libraries folder provided on the website, the INSTALL target might fail and you need to copy the files manually, including the dlls of the dependencies.
+
+### Using the library ###
+
+To use audaspace in your project, configure the include path and the libraries that you need, which you can find in the include and lib directories in your installation path.
+
+### Notes for plugins on windows ###
+
+- FFMPEG: Due to a problem with FFMPEG's 32 bit libraries, it is necessary to disable SAFESEH for the audffmpeg build target inside Visual Studio (Properties, Linker, Advanced). This has to be done after each generate step of CMake.
+- Jack: If no jack server is running on windows and your application or one of the demos tries to use the jack plugin, this adds a long delay to the device initialisation. In case you don't need jack, make sure to disable the plugin or for the prebuilt version of audaspace simply delete audjack.dll (and any files with jack in the name to clean up).
diff --git a/extern/audaspace/LICENSE b/extern/audaspace/LICENSE
new file mode 100644
index 00000000000..d6456956733
--- /dev/null
+++ b/extern/audaspace/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/extern/audaspace/README.md b/extern/audaspace/README.md
new file mode 100644
index 00000000000..7fdd515ab67
--- /dev/null
+++ b/extern/audaspace/README.md
@@ -0,0 +1,47 @@
+audaspace
+=========
+
+Audaspace (pronounced "outer space") is a high level audio library written in C++ with language bindings for Python for example. It started out as the audio engine of the 3D modelling application Blender and is now released as a standalone library.
+
+Documentation and Community
+---------------------------
+
+The documentation including guides for building and installing, demos, tutorials as well as the API reference for C++, C and python can be found on https://audaspace.github.io.
+
+Bug reports and feature requests should go to the [issue tracker](https://github.com/audaspace/audaspace/issues).
+
+For any other discussions about audaspace there is a [mailing list](https://groups.google.com/forum/#!forum/audaspace) and there is also the IRC channel #audaspace on irc.freenode.net.
+
+Features
+--------
+
+The following (probably incomplete) features are supported by audaspace:
+
+* input/output devices
+ * input from microphones, line in, etc.
+ * output devices including 3D audio support
+* file reading/writing
+* filters like low-/highpass and effects like delay, reverse or fading
+* generators for simple waveforms like silence, sine and triangle
+* respecification - this term is used for changing stream parameters which are
+ * channel count - channel remapping
+ * sample format - the library internally uses 32 bit floats
+ * sample rate - resampling
+* simple (superposition, joining and ping-pong aka forward-reverse) and more complex (non-linear audio editing) sequencing of sounds
+
+License
+-------
+
+> Copyright © 2009-2015 Jörg Müller. All rights reserved.
+>
+> Licensed under the Apache License, Version 2.0 (the "License");
+> you may not use this file except in compliance with the License.
+> You may obtain a copy of the License at
+>
+> http://www.apache.org/licenses/LICENSE-2.0
+>
+> Unless required by applicable law or agreed to in writing, software
+> distributed under the License is distributed on an "AS IS" BASIS,
+> WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+> See the License for the specific language governing permissions and
+> limitations under the License.
diff --git a/extern/audaspace/bindings/C/AUD_Device.cpp b/extern/audaspace/bindings/C/AUD_Device.cpp
new file mode 100644
index 00000000000..441f228deac
--- /dev/null
+++ b/extern/audaspace/bindings/C/AUD_Device.cpp
@@ -0,0 +1,336 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "devices/DeviceManager.h"
+#include "devices/I3DDevice.h"
+#include "devices/IDeviceFactory.h"
+#include "devices/ReadDevice.h"
+#include "Exception.h"
+
+#include <cassert>
+
+using namespace aud;
+
+#define AUD_CAPI_IMPLEMENTATION
+#include "AUD_Device.h"
+
+static inline aud::Specs convCToSpec(AUD_Specs specs)
+{
+ aud::Specs s;
+ s.channels = static_cast<Channels>(specs.channels);
+ s.rate = static_cast<SampleRate>(specs.rate);
+ return s;
+}
+
+static inline aud::DeviceSpecs convCToDSpec(AUD_DeviceSpecs specs)
+{
+ aud::DeviceSpecs s;
+ s.specs = convCToSpec(specs.specs);
+ s.format = static_cast<SampleFormat>(specs.format);
+ return s;
+}
+
+AUD_API AUD_Device* AUD_Device_open(const char* type, AUD_DeviceSpecs specs, int buffersize, const char* name)
+{
+ DeviceSpecs dspecs = convCToDSpec(specs);
+
+ if(dspecs.channels == CHANNELS_INVALID)
+ dspecs.channels = CHANNELS_STEREO;
+ if(dspecs.format == FORMAT_INVALID)
+ dspecs.format = FORMAT_FLOAT32;
+ if(dspecs.rate == RATE_INVALID)
+ dspecs.rate = RATE_48000;
+ if(buffersize < 128)
+ buffersize = AUD_DEFAULT_BUFFER_SIZE;
+ if(name == nullptr)
+ name = "";
+
+ try
+ {
+ if(!type)
+ {
+ auto device = DeviceManager::getDevice();
+ if(!device)
+ {
+ DeviceManager::openDefaultDevice();
+ device = DeviceManager::getDevice();
+ }
+ return new AUD_Device(device);
+ }
+
+ if(type == std::string("read"))
+ {
+ return new AUD_Device(new ReadDevice(dspecs));
+ }
+
+ std::shared_ptr<IDeviceFactory> factory;
+ if(!*type)
+ factory = DeviceManager::getDefaultDeviceFactory();
+ else
+ factory = DeviceManager::getDeviceFactory(type);
+
+ if(factory)
+ {
+ factory->setName(name);
+ factory->setSpecs(dspecs);
+ factory->setBufferSize(buffersize);
+ return new AUD_Device(factory->openDevice());
+ }
+ }
+ catch(Exception&)
+ {
+ }
+ return nullptr;
+}
+
+AUD_API void AUD_Device_lock(AUD_Device* device)
+{
+ auto dev = device ? *device : DeviceManager::getDevice();
+ dev->lock();
+}
+
+AUD_API AUD_Handle* AUD_Device_play(AUD_Device* device, AUD_Sound* sound, int keep)
+{
+ assert(sound);
+ auto dev = device ? *device : DeviceManager::getDevice();
+
+ try
+ {
+ AUD_Handle handle = dev->play(*sound, keep);
+ if(handle.get())
+ {
+ return new AUD_Handle(handle);
+ }
+ }
+ catch(Exception&)
+ {
+ }
+ return nullptr;
+}
+
+AUD_API void AUD_Device_stopAll(AUD_Device* device)
+{
+ auto dev = device ? *device : DeviceManager::getDevice();
+ dev->stopAll();
+}
+
+AUD_API void AUD_Device_unlock(AUD_Device* device)
+{
+ auto dev = device ? *device : DeviceManager::getDevice();
+ dev->unlock();
+}
+
+AUD_API AUD_Channels AUD_Device_getChannels(AUD_Device* device)
+{
+ auto dev = device ? *device : DeviceManager::getDevice();
+ return static_cast<AUD_Channels>(dev->getSpecs().channels);
+}
+
+AUD_API AUD_DistanceModel AUD_Device_getDistanceModel(AUD_Device* device)
+{
+ auto dev = device ? std::dynamic_pointer_cast<I3DDevice>(*device) : DeviceManager::get3DDevice();
+ return static_cast<AUD_DistanceModel>(dev->getDistanceModel());
+}
+
+AUD_API void AUD_Device_setDistanceModel(AUD_Device* device, AUD_DistanceModel value)
+{
+ auto dev = device ? std::dynamic_pointer_cast<I3DDevice>(*device) : DeviceManager::get3DDevice();
+ dev->setDistanceModel(static_cast<DistanceModel>(value));
+}
+
+AUD_API float AUD_Device_getDopplerFactor(AUD_Device* device)
+{
+ auto dev = device ? std::dynamic_pointer_cast<I3DDevice>(*device) : DeviceManager::get3DDevice();
+ return dev->getDopplerFactor();
+}
+
+AUD_API void AUD_Device_setDopplerFactor(AUD_Device* device, float value)
+{
+ auto dev = device ? std::dynamic_pointer_cast<I3DDevice>(*device) : DeviceManager::get3DDevice();
+ dev->setDopplerFactor(value);
+}
+
+AUD_API AUD_SampleFormat AUD_Device_getFormat(AUD_Device* device)
+{
+ auto dev = device ? *device : DeviceManager::getDevice();
+ return static_cast<AUD_SampleFormat>(dev->getSpecs().format);
+}
+
+AUD_API void AUD_Device_getListenerLocation(AUD_Device* device, float value[3])
+{
+ auto dev = device ? std::dynamic_pointer_cast<I3DDevice>(*device) : DeviceManager::get3DDevice();
+ Vector3 v = dev->getListenerLocation();
+ value[0] = v.x();
+ value[1] = v.y();
+ value[2] = v.z();
+}
+
+AUD_API void AUD_Device_setListenerLocation(AUD_Device* device, const float value[3])
+{
+ auto dev = device ? std::dynamic_pointer_cast<I3DDevice>(*device) : DeviceManager::get3DDevice();
+ Vector3 v(value[0], value[1], value[2]);
+ dev->setListenerLocation(v);
+}
+
+AUD_API void AUD_Device_getListenerOrientation(AUD_Device* device, float value[4])
+{
+ auto dev = device ? std::dynamic_pointer_cast<I3DDevice>(*device) : DeviceManager::get3DDevice();
+ Quaternion v = dev->getListenerOrientation();
+ value[0] = v.x();
+ value[1] = v.y();
+ value[2] = v.z();
+ value[3] = v.w();
+}
+
+AUD_API void AUD_Device_setListenerOrientation(AUD_Device* device, const float value[4])
+{
+ auto dev = device ? std::dynamic_pointer_cast<I3DDevice>(*device) : DeviceManager::get3DDevice();
+ Quaternion v(value[3], value[0], value[1], value[2]);
+ dev->setListenerOrientation(v);
+}
+
+AUD_API void AUD_Device_getListenerVelocity(AUD_Device* device, float value[3])
+{
+ auto dev = device ? std::dynamic_pointer_cast<I3DDevice>(*device) : DeviceManager::get3DDevice();
+ Vector3 v = dev->getListenerVelocity();
+ value[0] = v.x();
+ value[1] = v.y();
+ value[2] = v.z();
+}
+
+AUD_API void AUD_Device_setListenerVelocity(AUD_Device* device, const float value[3])
+{
+ auto dev = device ? std::dynamic_pointer_cast<I3DDevice>(*device) : DeviceManager::get3DDevice();
+ Vector3 v(value[0], value[1], value[2]);
+ dev->setListenerVelocity(v);
+}
+
+AUD_API double AUD_Device_getRate(AUD_Device* device)
+{
+ auto dev = device ? *device : DeviceManager::getDevice();
+ return dev->getSpecs().rate;
+}
+
+AUD_API float AUD_Device_getSpeedOfSound(AUD_Device* device)
+{
+ auto dev = device ? std::dynamic_pointer_cast<I3DDevice>(*device) : DeviceManager::get3DDevice();
+ return dev->getSpeedOfSound();
+}
+
+AUD_API void AUD_Device_setSpeedOfSound(AUD_Device* device, float value)
+{
+ auto dev = device ? std::dynamic_pointer_cast<I3DDevice>(*device) : DeviceManager::get3DDevice();
+ dev->setSpeedOfSound(value);
+}
+
+AUD_API float AUD_Device_getVolume(AUD_Device* device)
+{
+ auto dev = device ? *device : DeviceManager::getDevice();
+ return dev->getVolume();
+}
+
+AUD_API void AUD_Device_setVolume(AUD_Device* device, float value)
+{
+ auto dev = device ? *device : DeviceManager::getDevice();
+ dev->setVolume(value);
+}
+
+AUD_API int AUD_Device_read(AUD_Device* device, unsigned char* buffer, int length)
+{
+ assert(device);
+ assert(buffer);
+
+ auto readDevice = std::dynamic_pointer_cast<ReadDevice>(*device);
+ if(!readDevice)
+ return false;
+
+ try
+ {
+ return readDevice->read(buffer, length);
+ }
+ catch(Exception&)
+ {
+ return false;
+ }
+}
+
+AUD_API void AUD_Device_free(AUD_Device* device)
+{
+ assert(device);
+
+ try
+ {
+ delete device;
+ }
+ catch(Exception&)
+ {
+ }
+}
+
+AUD_API AUD_Device* AUD_Device_getCurrent()
+{
+ auto device = DeviceManager::getDevice();
+
+ if(!device)
+ return nullptr;
+
+ return new AUD_Device(device);
+}
+
+AUD_API void AUD_seekSynchronizer(AUD_Handle* handle, float time)
+{
+ auto synchronizer = DeviceManager::getDevice()->getSynchronizer();
+ if(synchronizer)
+ synchronizer->seek(*reinterpret_cast<std::shared_ptr<IHandle>*>(handle), time);
+}
+
+AUD_API float AUD_getSynchronizerPosition(AUD_Handle* handle)
+{
+ auto synchronizer = DeviceManager::getDevice()->getSynchronizer();
+ if(synchronizer)
+ return synchronizer->getPosition(*reinterpret_cast<std::shared_ptr<IHandle>*>(handle));
+ return (*reinterpret_cast<std::shared_ptr<IHandle>*>(handle))->getPosition();
+}
+
+AUD_API void AUD_playSynchronizer()
+{
+ auto synchronizer = DeviceManager::getDevice()->getSynchronizer();
+ if(synchronizer)
+ synchronizer->play();
+}
+
+AUD_API void AUD_stopSynchronizer()
+{
+ auto synchronizer = DeviceManager::getDevice()->getSynchronizer();
+ if(synchronizer)
+ synchronizer->stop();
+}
+
+AUD_API void AUD_setSynchronizerCallback(AUD_syncFunction function, void* data)
+{
+ auto synchronizer = DeviceManager::getDevice()->getSynchronizer();
+ if(synchronizer)
+ synchronizer->setSyncCallback(function, data);
+}
+
+AUD_API int AUD_isSynchronizerPlaying()
+{
+ auto synchronizer = DeviceManager::getDevice()->getSynchronizer();
+ if(synchronizer)
+ return synchronizer->isPlaying();
+ return false;
+}
+
diff --git a/extern/audaspace/bindings/C/AUD_Device.h b/extern/audaspace/bindings/C/AUD_Device.h
new file mode 100644
index 00000000000..0dfa21f0660
--- /dev/null
+++ b/extern/audaspace/bindings/C/AUD_Device.h
@@ -0,0 +1,258 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+#include "AUD_Types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/// Possible distance models for the 3D device.
+typedef enum
+{
+ AUD_DISTANCE_MODEL_INVALID = 0,
+ AUD_DISTANCE_MODEL_INVERSE,
+ AUD_DISTANCE_MODEL_INVERSE_CLAMPED,
+ AUD_DISTANCE_MODEL_LINEAR,
+ AUD_DISTANCE_MODEL_LINEAR_CLAMPED,
+ AUD_DISTANCE_MODEL_EXPONENT,
+ AUD_DISTANCE_MODEL_EXPONENT_CLAMPED
+} AUD_DistanceModel;
+
+typedef void (*AUD_syncFunction)(void*, int, float);
+
+/**
+ * Opens a new sound device.
+ * \param type The name of the device.
+ * Can be NULL to open the default device with default settings or return the handle to the already opened one.
+ * Can be "" to open the a default factory device with given settings.
+ * Can be "read" to open a readable device.
+ * \param specs Specification of the device parameters.
+ * \param buffersize Size of the mixing buffer.
+ * \param name Custom name of the device.
+ * \return A handle to the opened device or NULL on failure.
+ */
+extern AUD_API AUD_Device* AUD_Device_open(const char* type, AUD_DeviceSpecs specs, int buffersize, const char* name);
+
+/**
+ * Locks the playback device.
+ */
+extern AUD_API void AUD_Device_lock(AUD_Device* device);
+
+/**
+ * Plays back a sound file.
+ * \param sound The handle of the sound file.
+ * \param keep When keep is true the sound source will not be deleted but set to
+ * paused when its end has been reached.
+ * \return A handle to the played back sound.
+ */
+extern AUD_API AUD_Handle* AUD_Device_play(AUD_Device* device, AUD_Sound* sound, int keep);
+
+/**
+ * Stops all sounds playing.
+ */
+extern AUD_API void AUD_Device_stopAll(AUD_Device* device);
+
+/**
+ * Unlocks the device.
+ */
+extern AUD_API void AUD_Device_unlock(AUD_Device* device);
+
+/**
+ * Retrieves the channels of a device.
+ * param device The device to get the channels from.
+ * return The channels of the device.
+ */
+extern AUD_API AUD_Channels AUD_Device_getChannels(AUD_Device* device);
+
+/**
+ * Retrieves the distance model of a device.
+ * param device The device to get the distance model from.
+ * return The distance model of the device.
+ */
+extern AUD_API AUD_DistanceModel AUD_Device_getDistanceModel(AUD_Device* device);
+
+/**
+ * Sets the distance model of a device.
+ * param device The device to set the distance model from.
+ * param value The new distance model to set.
+ */
+extern AUD_API void AUD_Device_setDistanceModel(AUD_Device* device, AUD_DistanceModel value);
+
+/**
+ * Retrieves the doppler factor of a device.
+ * param device The device to get the doppler factor from.
+ * return The doppler factor of the device.
+ */
+extern AUD_API float AUD_Device_getDopplerFactor(AUD_Device* device);
+
+/**
+ * Sets the doppler factor of a device.
+ * param device The device to set the doppler factor from.
+ * param value The new doppler factor to set.
+ */
+extern AUD_API void AUD_Device_setDopplerFactor(AUD_Device* device, float value);
+
+/**
+ * Retrieves the format of a device.
+ * param device The device to get the format from.
+ * return The format of the device.
+ */
+extern AUD_API AUD_SampleFormat AUD_Device_getFormat(AUD_Device* device);
+
+/**
+ * Retrieves the listener location of a device.
+ * param device The device to get the listener location from.
+ * return The listener location of the device.
+ */
+extern AUD_API void AUD_Device_getListenerLocation(AUD_Device* device, float value[3]);
+
+/**
+ * Sets the listener location of a device.
+ * param device The device to set the listener location from.
+ * param value The new listener location to set.
+ */
+extern AUD_API void AUD_Device_setListenerLocation(AUD_Device* device, const float value[3]);
+
+/**
+ * Retrieves the listener orientation of a device.
+ * param device The device to get the listener orientation from.
+ * return The listener orientation of the device.
+ */
+extern AUD_API void AUD_Device_getListenerOrientation(AUD_Device* device, float value[4]);
+
+/**
+ * Sets the listener orientation of a device.
+ * param device The device to set the listener orientation from.
+ * param value The new listener orientation to set.
+ */
+extern AUD_API void AUD_Device_setListenerOrientation(AUD_Device* device, const float value[4]);
+
+/**
+ * Retrieves the listener velocity of a device.
+ * param device The device to get the listener velocity from.
+ * return The listener velocity of the device.
+ */
+extern AUD_API void AUD_Device_getListenerVelocity(AUD_Device* device, float value[3]);
+
+/**
+ * Sets the listener velocity of a device.
+ * param device The device to set the listener velocity from.
+ * param value The new listener velocity to set.
+ */
+extern AUD_API void AUD_Device_setListenerVelocity(AUD_Device* device, const float value[3]);
+
+/**
+ * Retrieves the rate of a device.
+ * param device The device to get the rate from.
+ * return The rate of the device.
+ */
+extern AUD_API double AUD_Device_getRate(AUD_Device* device);
+
+/**
+ * Retrieves the speed of sound of a device.
+ * param device The device to get the speed of sound from.
+ * return The speed of sound of the device.
+ */
+extern AUD_API float AUD_Device_getSpeedOfSound(AUD_Device* device);
+
+/**
+ * Sets the speed of sound of a device.
+ * param device The device to set the speed of sound from.
+ * param value The new speed of sound to set.
+ */
+extern AUD_API void AUD_Device_setSpeedOfSound(AUD_Device* device, float value);
+
+/**
+ * Retrieves the volume of a device.
+ * param device The device to get the volume from.
+ * return The volume of the device.
+ */
+extern AUD_API float AUD_Device_getVolume(AUD_Device* device);
+
+/**
+ * Sets the volume of a device.
+ * param device The device to set the volume from.
+ * param value The new volume to set.
+ */
+extern AUD_API void AUD_Device_setVolume(AUD_Device* device, float value);
+
+/**
+ * Reads the next samples into the supplied buffer.
+ * \param device The readable device.
+ * \param buffer The target buffer.
+ * \param length The length in samples to be filled.
+ * \return True if the reading succeeded, false if there are no sounds
+ * played back currently, in that case the buffer is filled with
+ * silence.
+ */
+extern AUD_API int AUD_Device_read(AUD_Device* device, unsigned char* buffer, int length);
+
+/**
+ * Closes a device. Handle becomes invalid afterwards.
+ * \param device The device to close.
+ */
+extern AUD_API void AUD_Device_free(AUD_Device* device);
+
+/**
+ * Retrieves the current device of the DeviceManager.
+ * \return A pointer to the current device, which needs to be freed with
+ * AUD_Device_free.
+ */
+extern AUD_API AUD_Device* AUD_Device_getCurrent();
+
+/**
+ * Seeks sequenced sound scene playback.
+ * \param handle Playback handle.
+ * \param time Time in seconds to seek to.
+ */
+extern AUD_API void AUD_seekSynchronizer(AUD_Handle* handle, float time);
+
+/**
+ * Returns the current sound scene playback time.
+ * \param handle Playback handle.
+ * \return The playback time in seconds.
+ */
+extern AUD_API float AUD_getSynchronizerPosition(AUD_Handle* handle);
+
+/**
+ * Starts the playback of jack transport if possible.
+ */
+extern AUD_API void AUD_playSynchronizer();
+
+/**
+ * Stops the playback of jack transport if possible.
+ */
+extern AUD_API void AUD_stopSynchronizer();
+
+/**
+ * Sets the sync callback for jack transport.
+ * \param function The callback function.
+ * \param data The data parameter for the callback.
+ */
+extern AUD_API void AUD_setSynchronizerCallback(AUD_syncFunction function, void* data);
+
+/**
+ * Returns whether jack transport is currently playing.
+ * \return Whether jack transport is currently playing.
+ */
+extern AUD_API int AUD_isSynchronizerPlaying();
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/extern/audaspace/bindings/C/AUD_DynamicMusic.cpp b/extern/audaspace/bindings/C/AUD_DynamicMusic.cpp
new file mode 100644
index 00000000000..bb7a129dde3
--- /dev/null
+++ b/extern/audaspace/bindings/C/AUD_DynamicMusic.cpp
@@ -0,0 +1,144 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "Exception.h"
+
+#include <cassert>
+
+using namespace aud;
+
+#define AUD_CAPI_IMPLEMENTATION
+#include "AUD_DynamicMusic.h"
+
+AUD_API AUD_DynamicMusic* AUD_DynamicMusic_create(AUD_Device* device)
+{
+ assert(device);
+
+ try
+ {
+ return new AUD_DynamicMusic(new DynamicMusic(*device));
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+}
+
+AUD_API void AUD_DynamicMusic_free(AUD_DynamicMusic* player)
+{
+ assert(player);
+ delete player;
+}
+
+AUD_API int AUD_DynamicMusic_addScene(AUD_DynamicMusic* player, AUD_Sound* scene)
+{
+ assert(player);
+ assert(scene);
+
+ return (*player)->addScene(*scene);
+}
+
+AUD_API int AUD_DynamicMusic_setSecene(AUD_DynamicMusic* player, int scene)
+{
+ assert(player);
+
+ return (*player)->changeScene(scene);
+}
+
+AUD_API int AUD_DynamicMusic_getScene(AUD_DynamicMusic* player)
+{
+ assert(player);
+
+ return (*player)->getScene();
+}
+
+AUD_API int AUD_DynamicMusic_addTransition(AUD_DynamicMusic* player, int ini, int end, AUD_Sound* transition)
+{
+ assert(player);
+ assert(transition);
+
+ return (*player)->addTransition(ini, end, *transition);
+}
+
+AUD_API void AUD_DynamicMusic_setFadeTime(AUD_DynamicMusic* player, float seconds)
+{
+ assert(player);
+
+ (*player)->setFadeTime(seconds);
+}
+
+AUD_API float AUD_DynamicMusic_getFadeTime(AUD_DynamicMusic* player)
+{
+ assert(player);
+
+ return (*player)->getFadeTime();
+}
+
+AUD_API int AUD_DynamicMusic_resume(AUD_DynamicMusic* player)
+{
+ assert(player);
+
+ return (*player)->resume();
+}
+
+AUD_API int AUD_DynamicMusic_pause(AUD_DynamicMusic* player)
+{
+ assert(player);
+
+ return (*player)->pause();
+}
+
+AUD_API int AUD_DynamicMusic_seek(AUD_DynamicMusic* player, float position)
+{
+ assert(player);
+
+ return (*player)->seek(position);
+}
+
+AUD_API float AUD_DynamicMusic_getPosition(AUD_DynamicMusic* player)
+{
+ assert(player);
+
+ return (*player)->getPosition();
+}
+
+AUD_API float AUD_DynamicMusic_getVolume(AUD_DynamicMusic* player)
+{
+ assert(player);
+
+ return (*player)->getVolume();
+}
+
+AUD_API int AUD_DynamicMusic_setVolume(AUD_DynamicMusic* player, float volume)
+{
+ assert(player);
+
+ return (*player)->setVolume(volume);
+}
+
+AUD_API AUD_Status AUD_DynamicMusic_getStatus(AUD_DynamicMusic* player)
+{
+ assert(player);
+
+ return static_cast<AUD_Status>((*player)->getStatus());
+}
+
+AUD_API int AUD_DynamicMusic_stop(AUD_DynamicMusic* player)
+{
+ assert(player);
+
+ return (*player)->stop();
+} \ No newline at end of file
diff --git a/extern/audaspace/bindings/C/AUD_DynamicMusic.h b/extern/audaspace/bindings/C/AUD_DynamicMusic.h
new file mode 100644
index 00000000000..c362479591e
--- /dev/null
+++ b/extern/audaspace/bindings/C/AUD_DynamicMusic.h
@@ -0,0 +1,145 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#pragma once
+
+#include "AUD_Types.h"
+#include "AUD_Handle.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+* Creates a new dynamic music player.
+* \param device The device that will be used to play sounds.
+* \return The new DynamicMusic object.
+*/
+extern AUD_API AUD_DynamicMusic* AUD_DynamicMusic_create(AUD_Device* device);
+
+/**
+* Deletes a dynamic music player.
+* \param player The DynamicMusic object to be deleted.
+*/
+extern AUD_API void AUD_DynamicMusic_free(AUD_DynamicMusic* player);
+
+/**
+* Adds a sound scene to a dynamic music player.
+* \param player The DynamicMusic object.
+* \param scene The sound to be added as a scene.
+* \return The index of the new scene.
+*/
+extern AUD_API int AUD_DynamicMusic_addScene(AUD_DynamicMusic* player, AUD_Sound* scene);
+
+/**
+* Changes the current sound scene of a dynamic music player.
+* \param player The DynamicMusic object.
+* \param scene The index of the scene to be played.
+* \return 0 if the target scene doesn't exist.
+*/
+extern AUD_API int AUD_DynamicMusic_setSecene(AUD_DynamicMusic* player, int scene);
+
+/**
+* Retrives the index of the current scene.
+* \param player The DynamicMusic object.
+* \return The index of the current scene.
+*/
+extern AUD_API int AUD_DynamicMusic_getScene(AUD_DynamicMusic* player);
+
+/**
+* Adds a new transition between two scenes.
+* \param player The DynamicMusic object.
+* \param ini The origin scene for the transition.
+* \param end The end scene for the transition.
+* \param transition A sound that will be used as transition between two scenes.
+* \return 0 if the ini or end scenes don't exist.
+*/
+extern AUD_API int AUD_DynamicMusic_addTransition(AUD_DynamicMusic* player, int ini, int end, AUD_Sound* transition);
+
+/**
+* Changes the fade time for the default transitions of a dynamic music player.
+* \param player The DynamicMusic object.
+* \param seconds The amount of secods that the crossfade transition will take.
+*/
+extern AUD_API void AUD_DynamicMusic_setFadeTime(AUD_DynamicMusic* player, float seconds);
+
+/**
+* Retrieves the fade time of a dynamic music player.
+* \param player The DynamicMusic object.
+* \return The fade time of the player.
+*/
+extern AUD_API float AUD_DynamicMusic_getFadeTime(AUD_DynamicMusic* player);
+
+/**
+* Resumes the current scene playback of a dynamic music player if it is paused.
+* \param player The DynamicMusic object.
+* \return 0 if the playback wasn't resumed.
+*/
+extern AUD_API int AUD_DynamicMusic_resume(AUD_DynamicMusic* player);
+
+/**
+* Pauses the current scene of a dynamic music player.
+* \param player The DynamicMusic object.
+* \return 0 if the playback wasn't paused.
+*/
+extern AUD_API int AUD_DynamicMusic_pause(AUD_DynamicMusic* player);
+
+/**
+* Seeks the current playing scene of a dynamic music player.
+* \param player The DynamicMusic object.
+* \param position The new position from which to play back, in seconds.
+* \return 0 if the seeking wasn't possible.
+*/
+extern AUD_API int AUD_DynamicMusic_seek(AUD_DynamicMusic* player, float position);
+
+/**
+* Retrieves the position of the current scene of a dynamic music player.
+* \param player The DynamicMusic object.
+* \return The position of the current playing scene.
+*/
+extern AUD_API float AUD_DynamicMusic_getPosition(AUD_DynamicMusic* player);
+
+/**
+* Retrieves the volume of the current scene of a dynamic music player.
+* \param player The DynamicMusic object.
+* \return The volume of the current playing scene.
+*/
+extern AUD_API float AUD_DynamicMusic_getVolume(AUD_DynamicMusic* player);
+
+/**
+* Changes the volume of the current scene in a dynamic music player.
+* \param player The DynamicMusic object.
+* \param 0 if the volume couldn't be changed.
+*/
+extern AUD_API int AUD_DynamicMusic_setVolume(AUD_DynamicMusic* player, float volume);
+
+/**
+* Retrieves the status of the current scene in a dynamic music player.
+* \param player The DynamicMusic object.
+* \return The Status of the current playing scene.
+*/
+extern AUD_API AUD_Status AUD_DynamicMusic_getStatus(AUD_DynamicMusic* player);
+
+/**
+* Stops the current scene of a dynamic music player.
+* \param player The DynamicMusic object.
+* \return 0 if the playback wasn't stopped.
+*/
+extern AUD_API int AUD_DynamicMusic_stop(AUD_DynamicMusic* player);
+
+#ifdef __cplusplus
+}
+#endif \ No newline at end of file
diff --git a/extern/audaspace/bindings/C/AUD_HRTF.cpp b/extern/audaspace/bindings/C/AUD_HRTF.cpp
new file mode 100644
index 00000000000..002c5d61ddd
--- /dev/null
+++ b/extern/audaspace/bindings/C/AUD_HRTF.cpp
@@ -0,0 +1,50 @@
+/*******************************************************************************
+* Copyright 2009-2015 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "Exception.h"
+
+#include <cassert>
+
+using namespace aud;
+
+#define AUD_CAPI_IMPLEMENTATION
+#include "AUD_HRTF.h"
+
+extern AUD_API AUD_HRTF* AUD_HRTF_create()
+{
+ try
+ {
+ return new AUD_HRTF(new HRTF());
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+}
+
+extern AUD_API void AUD_HRTF_free(AUD_HRTF* hrtfs)
+{
+ assert(hrtfs);
+ delete hrtfs;
+}
+
+extern AUD_API void AUD_HRTF_addImpulseResponseFromSound(AUD_HRTF* hrtfs, AUD_Sound* sound, float azimuth, float elevation)
+{
+ assert(hrtfs);
+ assert(sound);
+
+ (*hrtfs)->addImpulseResponse(std::make_shared<StreamBuffer>(*sound), azimuth, elevation);
+} \ No newline at end of file
diff --git a/extern/audaspace/bindings/C/AUD_HRTF.h b/extern/audaspace/bindings/C/AUD_HRTF.h
new file mode 100644
index 00000000000..29dda371695
--- /dev/null
+++ b/extern/audaspace/bindings/C/AUD_HRTF.h
@@ -0,0 +1,48 @@
+/*******************************************************************************
+* Copyright 2009-2015 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#pragma once
+
+#include "AUD_Types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+* Creates a new HRTF object.
+* \return The new HRTF object.
+*/
+extern AUD_API AUD_HRTF* AUD_HRTF_create();
+
+/**
+* Deletes a HRTF object.
+* \param hrtfs The HRTF object to be deleted.
+*/
+extern AUD_API void AUD_HRTF_free(AUD_HRTF* hrtfs);
+
+/**
+* Adds a new impulse response to an HRTF object.
+* \param hrtfs The HRTF object.
+* \param sound A Sound object representing an HRTF.
+* \param azimuth The azimuth angle of the HRTF.
+* \param elevation The elevation angle of the HRTF.
+*/
+extern AUD_API void AUD_HRTF_addImpulseResponseFromSound(AUD_HRTF* hrtfs, AUD_Sound* sound, float azimuth, float elevation);
+
+#ifdef __cplusplus
+}
+#endif \ No newline at end of file
diff --git a/extern/audaspace/bindings/C/AUD_Handle.cpp b/extern/audaspace/bindings/C/AUD_Handle.cpp
new file mode 100644
index 00000000000..265c7bf08d2
--- /dev/null
+++ b/extern/audaspace/bindings/C/AUD_Handle.cpp
@@ -0,0 +1,384 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "devices/I3DHandle.h"
+#include "Exception.h"
+
+#include <cassert>
+
+using namespace aud;
+
+#define AUD_CAPI_IMPLEMENTATION
+#include "AUD_Handle.h"
+
+AUD_API int AUD_Handle_pause(AUD_Handle* handle)
+{
+ assert(handle);
+ return (*handle)->pause();
+}
+
+AUD_API int AUD_Handle_resume(AUD_Handle* handle)
+{
+ assert(handle);
+ return (*handle)->resume();
+}
+
+AUD_API int AUD_Handle_stop(AUD_Handle* handle)
+{
+ assert(handle);
+ int result = (*handle)->stop();
+ delete handle;
+ return result;
+}
+
+AUD_API float AUD_Handle_getAttenuation(AUD_Handle* handle)
+{
+ assert(handle);
+ std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
+
+ if(h.get())
+ return h->getAttenuation();
+ return 0.0f;
+}
+
+AUD_API int AUD_Handle_setAttenuation(AUD_Handle* handle, float value)
+{
+ assert(handle);
+ std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
+
+ if(h.get())
+ return h->setAttenuation(value);
+ return false;
+}
+
+AUD_API float AUD_Handle_getConeAngleInner(AUD_Handle* handle)
+{
+ assert(handle);
+ std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
+
+ if(h.get())
+ return h->getConeAngleInner();
+ return 0.0f;
+}
+
+AUD_API int AUD_Handle_setConeAngleInner(AUD_Handle* handle, float value)
+{
+ assert(handle);
+ std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
+
+ if(h.get())
+ return h->setConeAngleInner(value);
+ return false;
+}
+
+AUD_API float AUD_Handle_getConeAngleOuter(AUD_Handle* handle)
+{
+ assert(handle);
+ std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
+
+ if(h.get())
+ return h->getConeAngleOuter();
+ return 0.0f;
+}
+
+AUD_API int AUD_Handle_setConeAngleOuter(AUD_Handle* handle, float value)
+{
+ assert(handle);
+ std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
+
+ if(h.get())
+ return h->setConeAngleOuter(value);
+ return false;
+}
+
+AUD_API float AUD_Handle_getConeVolumeOuter(AUD_Handle* handle)
+{
+ assert(handle);
+ std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
+
+ if(h.get())
+ return h->getConeVolumeOuter();
+ return 0.0f;
+}
+
+AUD_API int AUD_Handle_setConeVolumeOuter(AUD_Handle* handle, float value)
+{
+ assert(handle);
+ std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
+
+ if(h.get())
+ return h->setConeVolumeOuter(value);
+ return false;
+}
+
+AUD_API float AUD_Handle_getDistanceMaximum(AUD_Handle* handle)
+{
+ assert(handle);
+ std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
+
+ if(h.get())
+ return h->getDistanceMaximum();
+ return 0.0f;
+}
+
+AUD_API int AUD_Handle_setDistanceMaximum(AUD_Handle* handle, float value)
+{
+ assert(handle);
+ std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
+
+ if(h.get())
+ return h->setDistanceMaximum(value);
+ return false;
+}
+
+AUD_API float AUD_Handle_getDistanceReference(AUD_Handle* handle)
+{
+ assert(handle);
+ std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
+
+ if(h.get())
+ return h->getDistanceReference();
+ return 0.0f;
+}
+
+AUD_API int AUD_Handle_setDistanceReference(AUD_Handle* handle, float value)
+{
+ assert(handle);
+ std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
+
+ if(h.get())
+ return h->setDistanceReference(value);
+ return false;
+}
+
+AUD_API int AUD_Handle_doesKeep(AUD_Handle* handle)
+{
+ assert(handle);
+ return (*handle)->getKeep();
+}
+
+AUD_API int AUD_Handle_setKeep(AUD_Handle* handle, int value)
+{
+ assert(handle);
+ return (*handle)->setKeep(value);
+}
+
+AUD_API int AUD_Handle_getLocation(AUD_Handle* handle, float value[3])
+{
+ assert(handle);
+ std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
+
+ if(h.get())
+ {
+ Vector3 v = h->getLocation();
+ value[0] = v.x();
+ value[1] = v.y();
+ value[2] = v.z();
+ return true;
+ }
+ return false;
+}
+
+AUD_API int AUD_Handle_setLocation(AUD_Handle* handle, const float value[3])
+{
+ assert(handle);
+ std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
+
+ if(h.get())
+ {
+ Vector3 v = Vector3(value[0], value[1], value[2]);
+ return h->setLocation(v);
+ }
+ return false;
+}
+
+AUD_API int AUD_Handle_getLoopCount(AUD_Handle* handle)
+{
+ assert(handle);
+ return (*handle)->getLoopCount();
+}
+
+AUD_API int AUD_Handle_setLoopCount(AUD_Handle* handle, int value)
+{
+ assert(handle);
+ return (*handle)->setLoopCount(value);
+}
+
+AUD_API int AUD_Handle_getOrientation(AUD_Handle* handle, float value[4])
+{
+ assert(handle);
+ std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
+
+ if(h.get())
+ {
+ Quaternion v = h->getOrientation();
+ value[0] = v.x();
+ value[1] = v.y();
+ value[2] = v.z();
+ value[3] = v.w();
+ return true;
+ }
+ return false;
+}
+
+AUD_API int AUD_Handle_setOrientation(AUD_Handle* handle, const float value[4])
+{
+ assert(handle);
+ std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
+
+ if(h.get())
+ {
+ Quaternion v(value[3], value[0], value[1], value[2]);
+ return h->setOrientation(v);
+ }
+ return false;
+}
+
+AUD_API float AUD_Handle_getPitch(AUD_Handle* handle)
+{
+ assert(handle);
+ return (*handle)->getPitch();
+}
+
+AUD_API int AUD_Handle_setPitch(AUD_Handle* handle, float value)
+{
+ assert(handle);
+ return (*handle)->setPitch(value);
+}
+
+AUD_API float AUD_Handle_getPosition(AUD_Handle* handle)
+{
+ assert(handle);
+ return (*handle)->getPosition();
+}
+
+AUD_API int AUD_Handle_setPosition(AUD_Handle* handle, float value)
+{
+ assert(handle);
+ return (*handle)->seek(value);
+}
+
+AUD_API int AUD_Handle_isRelative(AUD_Handle* handle)
+{
+ assert(handle);
+ std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
+
+ if(h.get())
+ return h->isRelative();
+ return true;
+}
+
+AUD_API int AUD_Handle_setRelative(AUD_Handle* handle, int value)
+{
+ assert(handle);
+ std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
+
+ if(h.get())
+ return h->setRelative(value);
+ return false;
+}
+
+AUD_API AUD_Status AUD_Handle_getStatus(AUD_Handle* handle)
+{
+ assert(handle);
+ return static_cast<AUD_Status>((*handle)->getStatus());
+}
+
+AUD_API int AUD_Handle_getVelocity(AUD_Handle* handle, float value[3])
+{
+ assert(handle);
+ std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
+
+ if(h.get())
+ {
+ Vector3 v = h->getVelocity();
+ value[0] = v.x();
+ value[1] = v.y();
+ value[2] = v.z();
+ return true;
+ }
+ return false;
+}
+
+AUD_API int AUD_Handle_setVelocity(AUD_Handle* handle, const float value[3])
+{
+ assert(handle);
+ std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
+
+ if(h.get())
+ {
+ Vector3 v = Vector3(value[0], value[1], value[2]);
+ return h->setVelocity(v);
+ }
+ return false;
+}
+
+AUD_API float AUD_Handle_getVolume(AUD_Handle* handle)
+{
+ assert(handle);
+ return (*handle)->getVolume();
+}
+
+AUD_API int AUD_Handle_setVolume(AUD_Handle* handle, float value)
+{
+ assert(handle);
+ return (*handle)->setVolume(value);
+}
+
+AUD_API float AUD_Handle_getVolumeMaximum(AUD_Handle* handle)
+{
+ assert(handle);
+ std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
+
+ if(h.get())
+ return h->getVolumeMaximum();
+ return 0.0f;
+}
+
+AUD_API int AUD_Handle_setVolumeMaximum(AUD_Handle* handle, float value)
+{
+ assert(handle);
+ std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
+
+ if(h.get())
+ return h->setVolumeMaximum(value);
+ return false;
+}
+
+AUD_API float AUD_Handle_getVolumeMinimum(AUD_Handle* handle)
+{
+ assert(handle);
+ std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
+
+ if(h.get())
+ return h->getVolumeMinimum();
+ return 0.0f;
+}
+
+AUD_API int AUD_Handle_setVolumeMinimum(AUD_Handle* handle, float value)
+{
+ assert(handle);
+ std::shared_ptr<I3DHandle> h = std::dynamic_pointer_cast<I3DHandle>(*handle);
+
+ if(h.get())
+ return h->setVolumeMinimum(value);
+ return false;
+}
+
+AUD_API void AUD_Handle_free(AUD_Handle* handle)
+{
+ delete handle;
+}
diff --git a/extern/audaspace/bindings/C/AUD_Handle.h b/extern/audaspace/bindings/C/AUD_Handle.h
new file mode 100644
index 00000000000..27cbd251de5
--- /dev/null
+++ b/extern/audaspace/bindings/C/AUD_Handle.h
@@ -0,0 +1,308 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+#include "AUD_Types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/// Status of a playback handle.
+typedef enum
+{
+ AUD_STATUS_INVALID = 0, /// Invalid handle. Maybe due to stopping.
+ AUD_STATUS_PLAYING, /// Sound is playing.
+ AUD_STATUS_PAUSED, /// Sound is being paused.
+ AUD_STATUS_STOPPED /// Sound is stopped but kept in the device.
+} AUD_Status;
+
+/**
+ * Pauses a played back sound.
+ * \param handle The handle to the sound.
+ * \return Whether the handle has been playing or not.
+ */
+extern AUD_API int AUD_Handle_pause(AUD_Handle* handle);
+
+/**
+ * Resumes a paused sound.
+ * \param handle The handle to the sound.
+ * \return Whether the handle has been paused or not.
+ */
+extern AUD_API int AUD_Handle_resume(AUD_Handle* handle);
+
+/**
+ * Stops a playing or paused sound.
+ * \param handle The handle to the sound.
+ * \return Whether the handle has been valid or not.
+ */
+extern AUD_API int AUD_Handle_stop(AUD_Handle* handle);
+
+/**
+ * Retrieves the attenuation of a handle.
+ * param handle The handle to get the attenuation from.
+ * return The attenuation of the handle.
+ */
+extern AUD_API float AUD_Handle_getAttenuation(AUD_Handle* handle);
+
+/**
+ * Sets the attenuation of a handle.
+ * param handle The handle to set the attenuation from.
+ * param value The new attenuation to set.
+ */
+extern AUD_API int AUD_Handle_setAttenuation(AUD_Handle* handle, float value);
+
+/**
+ * Retrieves the cone angle inner of a handle.
+ * param handle The handle to get the cone angle inner from.
+ * return The cone angle inner of the handle.
+ */
+extern AUD_API float AUD_Handle_getConeAngleInner(AUD_Handle* handle);
+
+/**
+ * Sets the cone angle inner of a handle.
+ * param handle The handle to set the cone angle inner from.
+ * param value The new cone angle inner to set.
+ */
+extern AUD_API int AUD_Handle_setConeAngleInner(AUD_Handle* handle, float value);
+
+/**
+ * Retrieves the cone angle outer of a handle.
+ * param handle The handle to get the cone angle outer from.
+ * return The cone angle outer of the handle.
+ */
+extern AUD_API float AUD_Handle_getConeAngleOuter(AUD_Handle* handle);
+
+/**
+ * Sets the cone angle outer of a handle.
+ * param handle The handle to set the cone angle outer from.
+ * param value The new cone angle outer to set.
+ */
+extern AUD_API int AUD_Handle_setConeAngleOuter(AUD_Handle* handle, float value);
+
+/**
+ * Retrieves the cone volume outer of a handle.
+ * param handle The handle to get the cone volume outer from.
+ * return The cone volume outer of the handle.
+ */
+extern AUD_API float AUD_Handle_getConeVolumeOuter(AUD_Handle* handle);
+
+/**
+ * Sets the cone volume outer of a handle.
+ * param handle The handle to set the cone volume outer from.
+ * param value The new cone volume outer to set.
+ */
+extern AUD_API int AUD_Handle_setConeVolumeOuter(AUD_Handle* handle, float value);
+
+/**
+ * Retrieves the distance maximum of a handle.
+ * param handle The handle to get the distance maximum from.
+ * return The distance maximum of the handle.
+ */
+extern AUD_API float AUD_Handle_getDistanceMaximum(AUD_Handle* handle);
+
+/**
+ * Sets the distance maximum of a handle.
+ * param handle The handle to set the distance maximum from.
+ * param value The new distance maximum to set.
+ */
+extern AUD_API int AUD_Handle_setDistanceMaximum(AUD_Handle* handle, float value);
+
+/**
+ * Retrieves the distance reference of a handle.
+ * param handle The handle to get the distance reference from.
+ * return The distance reference of the handle.
+ */
+extern AUD_API float AUD_Handle_getDistanceReference(AUD_Handle* handle);
+
+/**
+ * Sets the distance reference of a handle.
+ * param handle The handle to set the distance reference from.
+ * param value The new distance reference to set.
+ */
+extern AUD_API int AUD_Handle_setDistanceReference(AUD_Handle* handle, float value);
+
+/**
+ * Retrieves the keep of a handle.
+ * param handle The handle to get the keep from.
+ * return The keep of the handle.
+ */
+extern AUD_API int AUD_Handle_doesKeep(AUD_Handle* handle);
+
+/**
+ * Sets the keep of a handle.
+ * param handle The handle to set the keep from.
+ * param value The new keep to set.
+ */
+extern AUD_API int AUD_Handle_setKeep(AUD_Handle* handle, int value);
+
+/**
+ * Retrieves the location of a handle.
+ * param handle The handle to get the location from.
+ * return The location of the handle.
+ */
+extern AUD_API int AUD_Handle_getLocation(AUD_Handle* handle, float value[3]);
+
+/**
+ * Sets the location of a handle.
+ * param handle The handle to set the location from.
+ * param value The new location to set.
+ */
+extern AUD_API int AUD_Handle_setLocation(AUD_Handle* handle, const float value[3]);
+
+/**
+ * Retrieves the loop count of a handle.
+ * param handle The handle to get the loop count from.
+ * return The loop count of the handle.
+ */
+extern AUD_API int AUD_Handle_getLoopCount(AUD_Handle* handle);
+
+/**
+ * Sets the loop count of a handle.
+ * param handle The handle to set the loop count from.
+ * param value The new loop count to set.
+ */
+extern AUD_API int AUD_Handle_setLoopCount(AUD_Handle* handle, int value);
+
+/**
+ * Retrieves the orientation of a handle.
+ * param handle The handle to get the orientation from.
+ * return The orientation of the handle.
+ */
+extern AUD_API int AUD_Handle_getOrientation(AUD_Handle* handle, float value[4]);
+
+/**
+ * Sets the orientation of a handle.
+ * param handle The handle to set the orientation from.
+ * param value The new orientation to set.
+ */
+extern AUD_API int AUD_Handle_setOrientation(AUD_Handle* handle, const float value[4]);
+
+/**
+ * Retrieves the pitch of a handle.
+ * param handle The handle to get the pitch from.
+ * return The pitch of the handle.
+ */
+extern AUD_API float AUD_Handle_getPitch(AUD_Handle* handle);
+
+/**
+ * Sets the pitch of a handle.
+ * param handle The handle to set the pitch from.
+ * param value The new pitch to set.
+ */
+extern AUD_API int AUD_Handle_setPitch(AUD_Handle* handle, float value);
+
+/**
+ * Retrieves the position of a handle.
+ * param handle The handle to get the position from.
+ * return The position of the handle.
+ */
+extern AUD_API float AUD_Handle_getPosition(AUD_Handle* handle);
+
+/**
+ * Sets the position of a handle.
+ * param handle The handle to set the position from.
+ * param value The new position to set.
+ */
+extern AUD_API int AUD_Handle_setPosition(AUD_Handle* handle, float value);
+
+/**
+ * Retrieves the relative of a handle.
+ * param handle The handle to get the relative from.
+ * return The relative of the handle.
+ */
+extern AUD_API int AUD_Handle_isRelative(AUD_Handle* handle);
+
+/**
+ * Sets the relative of a handle.
+ * param handle The handle to set the relative from.
+ * param value The new relative to set.
+ */
+extern AUD_API int AUD_Handle_setRelative(AUD_Handle* handle, int value);
+
+/**
+ * Retrieves the status of a handle.
+ * param handle The handle to get the status from.
+ * return The status of the handle.
+ */
+extern AUD_API AUD_Status AUD_Handle_getStatus(AUD_Handle* handle);
+
+/**
+ * Retrieves the velocity of a handle.
+ * param handle The handle to get the velocity from.
+ * return The velocity of the handle.
+ */
+extern AUD_API int AUD_Handle_getVelocity(AUD_Handle* handle, float value[3]);
+
+/**
+ * Sets the velocity of a handle.
+ * param handle The handle to set the velocity from.
+ * param value The new velocity to set.
+ */
+extern AUD_API int AUD_Handle_setVelocity(AUD_Handle* handle, const float value[3]);
+
+/**
+ * Retrieves the volume of a handle.
+ * param handle The handle to get the volume from.
+ * return The volume of the handle.
+ */
+extern AUD_API float AUD_Handle_getVolume(AUD_Handle* handle);
+
+/**
+ * Sets the volume of a handle.
+ * param handle The handle to set the volume from.
+ * param value The new volume to set.
+ */
+extern AUD_API int AUD_Handle_setVolume(AUD_Handle* handle, float value);
+
+/**
+ * Retrieves the volume maximum of a handle.
+ * param handle The handle to get the volume maximum from.
+ * return The volume maximum of the handle.
+ */
+extern AUD_API float AUD_Handle_getVolumeMaximum(AUD_Handle* handle);
+
+/**
+ * Sets the volume maximum of a handle.
+ * param handle The handle to set the volume maximum from.
+ * param value The new volume maximum to set.
+ */
+extern AUD_API int AUD_Handle_setVolumeMaximum(AUD_Handle* handle, float value);
+
+/**
+ * Retrieves the volume minimum of a handle.
+ * param handle The handle to get the volume minimum from.
+ * return The volume minimum of the handle.
+ */
+extern AUD_API float AUD_Handle_getVolumeMinimum(AUD_Handle* handle);
+
+/**
+ * Sets the volume minimum of a handle.
+ * param handle The handle to set the volume minimum from.
+ * param value The new volume minimum to set.
+ */
+extern AUD_API int AUD_Handle_setVolumeMinimum(AUD_Handle* handle, float value);
+
+/**
+ * Frees a handle.
+ * \param channel Handle to free.
+ */
+extern AUD_API void AUD_Handle_free(AUD_Handle* channel);
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/extern/audaspace/bindings/C/AUD_ImpulseResponse.cpp b/extern/audaspace/bindings/C/AUD_ImpulseResponse.cpp
new file mode 100644
index 00000000000..f3c28d4d660
--- /dev/null
+++ b/extern/audaspace/bindings/C/AUD_ImpulseResponse.cpp
@@ -0,0 +1,44 @@
+/*******************************************************************************
+* Copyright 2009-2015 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "Exception.h"
+
+#include <cassert>
+
+using namespace aud;
+
+#define AUD_CAPI_IMPLEMENTATION
+#include "AUD_ImpulseResponse.h"
+
+AUD_API AUD_ImpulseResponse* AUD_ImpulseResponse_create(AUD_Sound* sound)
+{
+ assert(sound);
+
+ try
+ {
+ return new AUD_ImpulseResponse(new ImpulseResponse(std::make_shared<StreamBuffer>(*sound)));
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+}
+
+AUD_API void AUD_ImpulseResponse_free(AUD_ImpulseResponse* filter)
+{
+ assert(filter);
+ delete filter;
+} \ No newline at end of file
diff --git a/extern/audaspace/bindings/C/AUD_ImpulseResponse.h b/extern/audaspace/bindings/C/AUD_ImpulseResponse.h
new file mode 100644
index 00000000000..dad2e87e899
--- /dev/null
+++ b/extern/audaspace/bindings/C/AUD_ImpulseResponse.h
@@ -0,0 +1,40 @@
+/*******************************************************************************
+* Copyright 2009-2015 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#pragma once
+
+#include "AUD_Types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+* Creates a new ImpulseResponse object.
+* \param sound A Sound object representing a impulse response.
+* \return The new ImpulseResponse object.
+*/
+extern AUD_API AUD_ImpulseResponse* AUD_ImpulseResponse_create(AUD_Sound* sound);
+
+/**
+* Deletes a ImpulseResponse object.
+* \param threadPool The ImpulseResponse object to be deleted.
+*/
+extern AUD_API void AUD_ImpulseResponse_free(AUD_ImpulseResponse* filter);
+
+#ifdef __cplusplus
+}
+#endif \ No newline at end of file
diff --git a/extern/audaspace/bindings/C/AUD_PlaybackManager.cpp b/extern/audaspace/bindings/C/AUD_PlaybackManager.cpp
new file mode 100644
index 00000000000..69ecb0987e1
--- /dev/null
+++ b/extern/audaspace/bindings/C/AUD_PlaybackManager.cpp
@@ -0,0 +1,94 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "Exception.h"
+
+#include <cassert>
+
+using namespace aud;
+
+#define AUD_CAPI_IMPLEMENTATION
+#include "AUD_PlaybackManager.h"
+
+AUD_API AUD_PlaybackManager* AUD_PlaybackManager_create(AUD_Device* device)
+{
+ assert(device);
+
+ try
+ {
+ return new AUD_PlaybackManager(new PlaybackManager(*device));
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+}
+
+AUD_API void AUD_PlaybackManager_free(AUD_PlaybackManager* manager)
+{
+ assert(manager);
+ delete manager;
+}
+
+AUD_API void AUD_PlaybackManager_play(AUD_PlaybackManager* manager, AUD_Sound* sound, unsigned int catKey)
+{
+ assert(manager);
+ assert(sound);
+
+ (*manager)->play(*sound, catKey);
+}
+
+AUD_API int AUD_PlaybackManager_resume(AUD_PlaybackManager* manager, unsigned int catKey)
+{
+ assert(manager);
+ return (*manager)->resume(catKey);
+}
+
+AUD_API int AUD_PlaybackManager_pause(AUD_PlaybackManager* manager, unsigned int catKey)
+{
+ assert(manager);
+ return (*manager)->pause(catKey);
+}
+
+AUD_API unsigned int AUD_PlaybackManager_addCategory(AUD_PlaybackManager* manager, float volume)
+{
+ assert(manager);
+ return (*manager)->addCategory(volume);
+}
+
+AUD_API float AUD_PlaybackManager_getVolume(AUD_PlaybackManager* manager, unsigned int catKey)
+{
+ assert(manager);
+ return (*manager)->getVolume(catKey);
+}
+
+AUD_API int AUD_PlaybackManager_setVolume(AUD_PlaybackManager* manager, float volume, unsigned int catKey)
+{
+ assert(manager);
+ return (*manager)->setVolume(volume, catKey);
+}
+
+AUD_API int AUD_PlaybackManager_stop(AUD_PlaybackManager* manager, unsigned int catKey)
+{
+ assert(manager);
+ return (*manager)->stop(catKey);
+}
+
+AUD_API void AUD_PlaybackManager_clean(AUD_PlaybackManager* manager)
+{
+ assert(manager);
+ (*manager)->clean();
+}
diff --git a/extern/audaspace/bindings/C/AUD_PlaybackManager.h b/extern/audaspace/bindings/C/AUD_PlaybackManager.h
new file mode 100644
index 00000000000..0fa8171599d
--- /dev/null
+++ b/extern/audaspace/bindings/C/AUD_PlaybackManager.h
@@ -0,0 +1,103 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#pragma once
+
+#include "AUD_Types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+* Creates a new PlaybackManager object.
+* \param device The device that will be used to play sounds.
+* \return The new PlaybackManager object.
+*/
+extern AUD_API AUD_PlaybackManager* AUD_PlaybackManager_create(AUD_Device* device);
+
+/**
+* Deletes a PlaybackManager object.
+* \param manager The PlaybackManager object to be deleted.
+*/
+extern AUD_API void AUD_PlaybackManager_free(AUD_PlaybackManager* manager);
+
+/**
+* Plays a sound through the playback manager, adding it into a category.
+* \param manager The PlaybackManager object.
+* \param sound The sound to be played.
+* \param catKey The key of the category into which the sound will be added. If it doesn't exist a new one will be creatd.
+*/
+extern AUD_API void AUD_PlaybackManager_play(AUD_PlaybackManager* manager, AUD_Sound* sound, unsigned int catKey);
+
+/**
+* Resumes the playback of all the paused sounds assigned to a category of a playback manager.
+* \param manager The PlaybackManager object.
+* \param catKey The key of the category.
+* \return 0 if the category doesn't exist.
+*/
+extern AUD_API int AUD_PlaybackManager_resume(AUD_PlaybackManager* manager, unsigned int catKey);
+
+/**
+* Pauses all the sounds assigned to a category of a playback manager.
+* \param manager The PlaybackManager object.
+* \param catKey The key of the category.
+* \return 0 if the category doesn't exist.
+*/
+extern AUD_API int AUD_PlaybackManager_pause(AUD_PlaybackManager* manager, unsigned int catKey);
+
+/**
+* Adds a new category with a custom volume.
+* \param manager The PlaybackManager object.
+* \param volume The volume value.
+* \return The key of the new category.
+*/
+extern AUD_API unsigned int AUD_PlaybackManager_addCategory(AUD_PlaybackManager* manager, float volume);
+
+/**
+* Retrieves the volume of a category of a playback manager.
+* \param manager The PlaybackManager object.
+* \param catKey The key of the category.
+* \return The volume of the category.
+*/
+extern AUD_API float AUD_PlaybackManager_getVolume(AUD_PlaybackManager* manager, unsigned int catKey);
+
+/**
+* Changes the voulume of a category of a playback manager.
+* \param manager The PlaybackManager object.
+* \param volume The new volume of the category.
+* \param catKey The key of the category.
+* \return 0 if the category doesn't exist.
+*/
+extern AUD_API int AUD_PlaybackManager_setVolume(AUD_PlaybackManager* manager, float volume, unsigned int catKey);
+
+/**
+* Stops all the sounds assigned to a category of a playback manager.
+* \param manager The PlaybackManager object.
+* \param catKey The key of the category.
+* \return 0 if the category doesn't exist.
+*/
+extern AUD_API int AUD_PlaybackManager_stop(AUD_PlaybackManager* manager, unsigned int catKey);
+
+/**
+* Cleans all the invalid handles in a playback manager
+* \param manager The PlaybackManager object.
+*/
+extern AUD_API void AUD_PlaybackManager_clean(AUD_PlaybackManager* manager);
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/extern/audaspace/bindings/C/AUD_Sequence.cpp b/extern/audaspace/bindings/C/AUD_Sequence.cpp
new file mode 100644
index 00000000000..d278cb148a1
--- /dev/null
+++ b/extern/audaspace/bindings/C/AUD_Sequence.cpp
@@ -0,0 +1,315 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "devices/I3DDevice.h"
+#include "devices/DeviceManager.h"
+#include "sequence/Sequence.h"
+#include "Exception.h"
+
+#include <cassert>
+
+using namespace aud;
+
+#define AUD_CAPI_IMPLEMENTATION
+#include "AUD_Sequence.h"
+
+AUD_API AUD_Sound* AUD_Sequence_create(float fps, int muted)
+{
+ // specs are changed at a later point!
+ Specs specs;
+ specs.channels = CHANNELS_STEREO;
+ specs.rate = RATE_48000;
+ AUD_Sound* sequence = new AUD_Sound(std::shared_ptr<Sequence>(new Sequence(specs, fps, muted)));
+ return sequence;
+}
+
+AUD_API void AUD_Sequence_free(AUD_Sound* sequence)
+{
+ delete sequence;
+}
+
+AUD_API AUD_SequenceEntry* AUD_Sequence_add(AUD_Sound* sequence, AUD_Sound* sound, float begin, float end, float skip)
+{
+ if(!sound)
+ return new AUD_SequenceEntry(((Sequence *)sequence->get())->add(AUD_Sound(), begin, end, skip));
+ return new AUD_SequenceEntry(((Sequence *)sequence->get())->add(*sound, begin, end, skip));
+}
+
+AUD_API void AUD_Sequence_remove(AUD_Sound* sequence, AUD_SequenceEntry* entry)
+{
+ dynamic_cast<Sequence *>(sequence->get())->remove(*entry);
+ delete entry;
+}
+
+AUD_API void AUD_Sequence_setAnimationData(AUD_Sound* sequence, AUD_AnimateablePropertyType type, int frame, float* data, char animated)
+{
+ AnimateableProperty* prop = dynamic_cast<Sequence *>(sequence->get())->getAnimProperty(static_cast<AnimateablePropertyType>(type));
+ if(animated)
+ {
+ if(frame >= 0)
+ {
+ prop->write(data, frame, 1);
+ }
+ }
+ else
+ {
+ prop->write(data);
+ }
+}
+
+AUD_API AUD_DistanceModel AUD_Sequence_getDistanceModel(AUD_Sound* sequence)
+{
+ assert(sequence);
+ return static_cast<AUD_DistanceModel>(dynamic_cast<Sequence *>(sequence->get())->getDistanceModel());
+}
+
+AUD_API void AUD_Sequence_setDistanceModel(AUD_Sound* sequence, AUD_DistanceModel value)
+{
+ assert(sequence);
+ dynamic_cast<Sequence *>(sequence->get())->setDistanceModel(static_cast<DistanceModel>(value));
+}
+
+AUD_API float AUD_Sequence_getDopplerFactor(AUD_Sound* sequence)
+{
+ assert(sequence);
+ return dynamic_cast<Sequence *>(sequence->get())->getDopplerFactor();
+}
+
+AUD_API void AUD_Sequence_setDopplerFactor(AUD_Sound* sequence, float value)
+{
+ assert(sequence);
+ dynamic_cast<Sequence *>(sequence->get())->setDopplerFactor(value);
+}
+
+AUD_API float AUD_Sequence_getFPS(AUD_Sound* sequence)
+{
+ assert(sequence);
+ return dynamic_cast<Sequence *>(sequence->get())->getFPS();
+}
+
+AUD_API void AUD_Sequence_setFPS(AUD_Sound* sequence, float value)
+{
+ assert(sequence);
+ dynamic_cast<Sequence *>(sequence->get())->setFPS(value);
+}
+
+AUD_API int AUD_Sequence_isMuted(AUD_Sound* sequence)
+{
+ assert(sequence);
+ return dynamic_cast<Sequence *>(sequence->get())->isMuted();
+}
+
+AUD_API void AUD_Sequence_setMuted(AUD_Sound* sequence, int value)
+{
+ assert(sequence);
+ dynamic_cast<Sequence *>(sequence->get())->mute(value);
+}
+
+static inline AUD_Specs convSpecToC(aud::Specs specs)
+{
+ AUD_Specs s;
+ s.channels = static_cast<AUD_Channels>(specs.channels);
+ s.rate = static_cast<AUD_SampleRate>(specs.rate);
+ return s;
+}
+
+static inline aud::Specs convCToSpec(AUD_Specs specs)
+{
+ aud::Specs s;
+ s.channels = static_cast<Channels>(specs.channels);
+ s.rate = static_cast<SampleRate>(specs.rate);
+ return s;
+}
+
+AUD_API AUD_Specs AUD_Sequence_getSpecs(AUD_Sound* sequence)
+{
+ assert(sequence);
+ return convSpecToC(dynamic_cast<Sequence *>(sequence->get())->getSpecs());
+}
+
+AUD_API void AUD_Sequence_setSpecs(AUD_Sound* sequence, AUD_Specs value)
+{
+ assert(sequence);
+ dynamic_cast<Sequence *>(sequence->get())->setSpecs(convCToSpec(value));
+}
+
+AUD_API float AUD_Sequence_getSpeedOfSound(AUD_Sound* sequence)
+{
+ assert(sequence);
+ return dynamic_cast<Sequence *>(sequence->get())->getSpeedOfSound();
+}
+
+AUD_API void AUD_Sequence_setSpeedOfSound(AUD_Sound* sequence, float value)
+{
+ assert(sequence);
+ dynamic_cast<Sequence *>(sequence->get())->setSpeedOfSound(value);
+}
+
+
+
+AUD_API void AUD_SequenceEntry_move(AUD_SequenceEntry* entry, float begin, float end, float skip)
+{
+ (*entry)->move(begin, end, skip);
+}
+
+AUD_API void AUD_SequenceEntry_setAnimationData(AUD_SequenceEntry* entry, AUD_AnimateablePropertyType type, int frame, float* data, char animated)
+{
+ AnimateableProperty* prop = (*entry)->getAnimProperty(static_cast<AnimateablePropertyType>(type));
+ if(animated)
+ {
+ if(frame >= 0)
+ prop->write(data, frame, 1);
+ }
+ else
+ {
+ prop->write(data);
+ }
+}
+
+AUD_API float AUD_SequenceEntry_getAttenuation(AUD_SequenceEntry* sequence_entry)
+{
+ assert(sequence_entry);
+ return (*sequence_entry)->getAttenuation();
+}
+
+AUD_API void AUD_SequenceEntry_setAttenuation(AUD_SequenceEntry* sequence_entry, float value)
+{
+ assert(sequence_entry);
+ (*sequence_entry)->setAttenuation(value);
+}
+
+AUD_API float AUD_SequenceEntry_getConeAngleInner(AUD_SequenceEntry* sequence_entry)
+{
+ assert(sequence_entry);
+ return (*sequence_entry)->getConeAngleInner();
+}
+
+AUD_API void AUD_SequenceEntry_setConeAngleInner(AUD_SequenceEntry* sequence_entry, float value)
+{
+ assert(sequence_entry);
+ (*sequence_entry)->setConeAngleInner(value);
+}
+
+AUD_API float AUD_SequenceEntry_getConeAngleOuter(AUD_SequenceEntry* sequence_entry)
+{
+ assert(sequence_entry);
+ return (*sequence_entry)->getConeAngleOuter();
+}
+
+AUD_API void AUD_SequenceEntry_setConeAngleOuter(AUD_SequenceEntry* sequence_entry, float value)
+{
+ assert(sequence_entry);
+ (*sequence_entry)->setConeAngleOuter(value);
+}
+
+AUD_API float AUD_SequenceEntry_getConeVolumeOuter(AUD_SequenceEntry* sequence_entry)
+{
+ assert(sequence_entry);
+ return (*sequence_entry)->getConeVolumeOuter();
+}
+
+AUD_API void AUD_SequenceEntry_setConeVolumeOuter(AUD_SequenceEntry* sequence_entry, float value)
+{
+ assert(sequence_entry);
+ (*sequence_entry)->setConeVolumeOuter(value);
+}
+
+AUD_API float AUD_SequenceEntry_getDistanceMaximum(AUD_SequenceEntry* sequence_entry)
+{
+ assert(sequence_entry);
+ return (*sequence_entry)->getDistanceMaximum();
+}
+
+AUD_API void AUD_SequenceEntry_setDistanceMaximum(AUD_SequenceEntry* sequence_entry, float value)
+{
+ assert(sequence_entry);
+ (*sequence_entry)->setDistanceMaximum(value);
+}
+
+AUD_API float AUD_SequenceEntry_getDistanceReference(AUD_SequenceEntry* sequence_entry)
+{
+ assert(sequence_entry);
+ return (*sequence_entry)->getDistanceReference();
+}
+
+AUD_API void AUD_SequenceEntry_setDistanceReference(AUD_SequenceEntry* sequence_entry, float value)
+{
+ assert(sequence_entry);
+ (*sequence_entry)->setDistanceReference(value);
+}
+
+AUD_API int AUD_SequenceEntry_isMuted(AUD_SequenceEntry* sequence_entry)
+{
+ assert(sequence_entry);
+ return (*sequence_entry)->isMuted();
+}
+
+AUD_API void AUD_SequenceEntry_setMuted(AUD_SequenceEntry* sequence_entry, int value)
+{
+ assert(sequence_entry);
+ (*sequence_entry)->mute(value);
+}
+
+AUD_API int AUD_SequenceEntry_isRelative(AUD_SequenceEntry* sequence_entry)
+{
+ assert(sequence_entry);
+ return (*sequence_entry)->isRelative();
+}
+
+AUD_API void AUD_SequenceEntry_setRelative(AUD_SequenceEntry* sequence_entry, int value)
+{
+ assert(sequence_entry);
+ (*sequence_entry)->setRelative(value);
+}
+
+AUD_API AUD_Sound* AUD_SequenceEntry_getSound(AUD_SequenceEntry* sequence_entry)
+{
+ assert(sequence_entry);
+ return new std::shared_ptr<ISound>((*sequence_entry)->getSound());
+}
+
+AUD_API void AUD_SequenceEntry_setSound(AUD_SequenceEntry* sequence_entry, AUD_Sound* value)
+{
+ assert(sequence_entry);
+ if(value)
+ (*sequence_entry)->setSound(*value);
+ else
+ (*sequence_entry)->setSound(AUD_Sound());
+}
+
+AUD_API float AUD_SequenceEntry_getVolumeMaximum(AUD_SequenceEntry* sequence_entry)
+{
+ assert(sequence_entry);
+ return (*sequence_entry)->getVolumeMaximum();
+}
+
+AUD_API void AUD_SequenceEntry_setVolumeMaximum(AUD_SequenceEntry* sequence_entry, float value)
+{
+ assert(sequence_entry);
+ (*sequence_entry)->setVolumeMaximum(value);
+}
+
+AUD_API float AUD_SequenceEntry_getVolumeMinimum(AUD_SequenceEntry* sequence_entry)
+{
+ assert(sequence_entry);
+ return (*sequence_entry)->getVolumeMinimum();
+}
+
+AUD_API void AUD_SequenceEntry_setVolumeMinimum(AUD_SequenceEntry* sequence_entry, float value)
+{
+ assert(sequence_entry);
+ (*sequence_entry)->setVolumeMinimum(value);
+}
diff --git a/extern/audaspace/bindings/C/AUD_Sequence.h b/extern/audaspace/bindings/C/AUD_Sequence.h
new file mode 100644
index 00000000000..668960c7d50
--- /dev/null
+++ b/extern/audaspace/bindings/C/AUD_Sequence.h
@@ -0,0 +1,338 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+#include "AUD_Device.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/// Possible animatable properties for Sequence Factories and Entries.
+typedef enum
+{
+ AUD_AP_VOLUME,
+ AUD_AP_PANNING,
+ AUD_AP_PITCH,
+ AUD_AP_LOCATION,
+ AUD_AP_ORIENTATION
+} AUD_AnimateablePropertyType;
+
+/**
+ * Creates a new sequenced sound scene.
+ * \param fps The FPS of the scene.
+ * \param muted Whether the scene is muted.
+ * \return The new sound scene.
+ */
+extern AUD_API AUD_Sound* AUD_Sequence_create(float fps, int muted);
+
+/**
+ * Deletes a sound scene.
+ * \param sequence The sound scene.
+ */
+extern AUD_API void AUD_Sequence_free(AUD_Sound* sequence);
+
+/**
+ * Adds a new entry to the scene.
+ * \param sequence The sound scene.
+ * \param sound The sound this entry should play.
+ * \param begin The start time.
+ * \param end The end time or a negative value if determined by the sound.
+ * \param skip How much seconds should be skipped at the beginning.
+ * \return The entry added.
+ */
+extern AUD_API AUD_SequenceEntry* AUD_Sequence_add(AUD_Sound* sequence, AUD_Sound* sound, float begin, float end, float skip);
+
+/**
+ * Removes an entry from the scene.
+ * \param sequence The sound scene.
+ * \param entry The entry to remove.
+ */
+extern AUD_API void AUD_Sequence_remove(AUD_Sound* sequence, AUD_SequenceEntry* entry);
+
+/**
+ * Writes animation data to a sequence.
+ * \param sequence The sound scene.
+ * \param type The type of animation data.
+ * \param frame The frame this data is for.
+ * \param data The data to write.
+ * \param animated Whether the attribute is animated.
+ */
+extern AUD_API void AUD_Sequence_setAnimationData(AUD_Sound* sequence, AUD_AnimateablePropertyType type, int frame, float* data, char animated);
+
+/**
+ * Retrieves the distance model of a sequence.
+ * param sequence The sequence to get the distance model from.
+ * return The distance model of the sequence.
+ */
+extern AUD_API AUD_DistanceModel AUD_Sequence_getDistanceModel(AUD_Sound* sequence);
+
+/**
+ * Sets the distance model of a sequence.
+ * param sequence The sequence to set the distance model from.
+ * param value The new distance model to set.
+ */
+extern AUD_API void AUD_Sequence_setDistanceModel(AUD_Sound* sequence, AUD_DistanceModel value);
+
+/**
+ * Retrieves the doppler factor of a sequence.
+ * param sequence The sequence to get the doppler factor from.
+ * return The doppler factor of the sequence.
+ */
+extern AUD_API float AUD_Sequence_getDopplerFactor(AUD_Sound* sequence);
+
+/**
+ * Sets the doppler factor of a sequence.
+ * param sequence The sequence to set the doppler factor from.
+ * param value The new doppler factor to set.
+ */
+extern AUD_API void AUD_Sequence_setDopplerFactor(AUD_Sound* sequence, float value);
+
+/**
+ * Retrieves the fps of a sequence.
+ * param sequence The sequence to get the fps from.
+ * return The fps of the sequence.
+ */
+extern AUD_API float AUD_Sequence_getFPS(AUD_Sound* sequence);
+
+/**
+ * Sets the fps of a sequence.
+ * param sequence The sequence to set the fps from.
+ * param value The new fps to set.
+ */
+extern AUD_API void AUD_Sequence_setFPS(AUD_Sound* sequence, float value);
+
+/**
+ * Retrieves the muted of a sequence.
+ * param sequence The sequence to get the muted from.
+ * return The muted of the sequence.
+ */
+extern AUD_API int AUD_Sequence_isMuted(AUD_Sound* sequence);
+
+/**
+ * Sets the muted of a sequence.
+ * param sequence The sequence to set the muted from.
+ * param value The new muted to set.
+ */
+extern AUD_API void AUD_Sequence_setMuted(AUD_Sound* sequence, int value);
+
+/**
+ * Retrieves the specs of a sequence.
+ * param sequence The sequence to get the specs from.
+ * return The specs of the sequence.
+ */
+extern AUD_API AUD_Specs AUD_Sequence_getSpecs(AUD_Sound* sequence);
+
+/**
+ * Sets the specs of a sequence.
+ * param sequence The sequence to set the specs from.
+ * param value The new specs to set.
+ */
+extern AUD_API void AUD_Sequence_setSpecs(AUD_Sound* sequence, AUD_Specs value);
+
+/**
+ * Retrieves the speed of sound of a sequence.
+ * param sequence The sequence to get the speed of sound from.
+ * return The speed of sound of the sequence.
+ */
+extern AUD_API float AUD_Sequence_getSpeedOfSound(AUD_Sound* sequence);
+
+/**
+ * Sets the speed of sound of a sequence.
+ * param sequence The sequence to set the speed of sound from.
+ * param value The new speed of sound to set.
+ */
+extern AUD_API void AUD_Sequence_setSpeedOfSound(AUD_Sound* sequence, float value);
+
+
+
+/**
+ * Moves the entry.
+ * \param entry The sequenced entry.
+ * \param begin The new start time.
+ * \param end The new end time or a negative value if unknown.
+ * \param skip How many seconds to skip at the beginning.
+ */
+extern AUD_API void AUD_SequenceEntry_move(AUD_SequenceEntry* entry, float begin, float end, float skip);
+
+/**
+ * Writes animation data to a sequenced entry.
+ * \param entry The sequenced entry.
+ * \param type The type of animation data.
+ * \param frame The frame this data is for.
+ * \param data The data to write.
+ * \param animated Whether the attribute is animated.
+ */
+extern AUD_API void AUD_SequenceEntry_setAnimationData(AUD_SequenceEntry* entry, AUD_AnimateablePropertyType type, int frame, float* data, char animated);
+
+/**
+ * Retrieves the attenuation of a sequence_entry.
+ * param sequence_entry The sequence_entry to get the attenuation from.
+ * return The attenuation of the sequence_entry.
+ */
+extern AUD_API float AUD_SequenceEntry_getAttenuation(AUD_SequenceEntry* sequence_entry);
+
+/**
+ * Sets the attenuation of a sequence_entry.
+ * param sequence_entry The sequence_entry to set the attenuation from.
+ * param value The new attenuation to set.
+ */
+extern AUD_API void AUD_SequenceEntry_setAttenuation(AUD_SequenceEntry* sequence_entry, float value);
+
+/**
+ * Retrieves the cone angle inner of a sequence_entry.
+ * param sequence_entry The sequence_entry to get the cone angle inner from.
+ * return The cone angle inner of the sequence_entry.
+ */
+extern AUD_API float AUD_SequenceEntry_getConeAngleInner(AUD_SequenceEntry* sequence_entry);
+
+/**
+ * Sets the cone angle inner of a sequence_entry.
+ * param sequence_entry The sequence_entry to set the cone angle inner from.
+ * param value The new cone angle inner to set.
+ */
+extern AUD_API void AUD_SequenceEntry_setConeAngleInner(AUD_SequenceEntry* sequence_entry, float value);
+
+/**
+ * Retrieves the cone angle outer of a sequence_entry.
+ * param sequence_entry The sequence_entry to get the cone angle outer from.
+ * return The cone angle outer of the sequence_entry.
+ */
+extern AUD_API float AUD_SequenceEntry_getConeAngleOuter(AUD_SequenceEntry* sequence_entry);
+
+/**
+ * Sets the cone angle outer of a sequence_entry.
+ * param sequence_entry The sequence_entry to set the cone angle outer from.
+ * param value The new cone angle outer to set.
+ */
+extern AUD_API void AUD_SequenceEntry_setConeAngleOuter(AUD_SequenceEntry* sequence_entry, float value);
+
+/**
+ * Retrieves the cone volume outer of a sequence_entry.
+ * param sequence_entry The sequence_entry to get the cone volume outer from.
+ * return The cone volume outer of the sequence_entry.
+ */
+extern AUD_API float AUD_SequenceEntry_getConeVolumeOuter(AUD_SequenceEntry* sequence_entry);
+
+/**
+ * Sets the cone volume outer of a sequence_entry.
+ * param sequence_entry The sequence_entry to set the cone volume outer from.
+ * param value The new cone volume outer to set.
+ */
+extern AUD_API void AUD_SequenceEntry_setConeVolumeOuter(AUD_SequenceEntry* sequence_entry, float value);
+
+/**
+ * Retrieves the distance maximum of a sequence_entry.
+ * param sequence_entry The sequence_entry to get the distance maximum from.
+ * return The distance maximum of the sequence_entry.
+ */
+extern AUD_API float AUD_SequenceEntry_getDistanceMaximum(AUD_SequenceEntry* sequence_entry);
+
+/**
+ * Sets the distance maximum of a sequence_entry.
+ * param sequence_entry The sequence_entry to set the distance maximum from.
+ * param value The new distance maximum to set.
+ */
+extern AUD_API void AUD_SequenceEntry_setDistanceMaximum(AUD_SequenceEntry* sequence_entry, float value);
+
+/**
+ * Retrieves the distance reference of a sequence_entry.
+ * param sequence_entry The sequence_entry to get the distance reference from.
+ * return The distance reference of the sequence_entry.
+ */
+extern AUD_API float AUD_SequenceEntry_getDistanceReference(AUD_SequenceEntry* sequence_entry);
+
+/**
+ * Sets the distance reference of a sequence_entry.
+ * param sequence_entry The sequence_entry to set the distance reference from.
+ * param value The new distance reference to set.
+ */
+extern AUD_API void AUD_SequenceEntry_setDistanceReference(AUD_SequenceEntry* sequence_entry, float value);
+
+/**
+ * Retrieves the muted of a sequence_entry.
+ * param sequence_entry The sequence_entry to get the muted from.
+ * return The muted of the sequence_entry.
+ */
+extern AUD_API int AUD_SequenceEntry_isMuted(AUD_SequenceEntry* sequence_entry);
+
+/**
+ * Sets the muted of a sequence_entry.
+ * param sequence_entry The sequence_entry to set the muted from.
+ * param value The new muted to set.
+ */
+extern AUD_API void AUD_SequenceEntry_setMuted(AUD_SequenceEntry* sequence_entry, int value);
+
+/**
+ * Retrieves the relative of a sequence_entry.
+ * param sequence_entry The sequence_entry to get the relative from.
+ * return The relative of the sequence_entry.
+ */
+extern AUD_API int AUD_SequenceEntry_isRelative(AUD_SequenceEntry* sequence_entry);
+
+/**
+ * Sets the relative of a sequence_entry.
+ * param sequence_entry The sequence_entry to set the relative from.
+ * param value The new relative to set.
+ */
+extern AUD_API void AUD_SequenceEntry_setRelative(AUD_SequenceEntry* sequence_entry, int value);
+
+/**
+ * Retrieves the sound of a sequence_entry.
+ * param sequence_entry The sequence_entry to get the sound from.
+ * return The sound of the sequence_entry.
+ */
+extern AUD_API AUD_Sound* AUD_SequenceEntry_getSound(AUD_SequenceEntry* sequence_entry);
+
+/**
+ * Sets the sound of a sequence_entry.
+ * param sequence_entry The sequence_entry to set the sound from.
+ * param value The new sound to set.
+ */
+extern AUD_API void AUD_SequenceEntry_setSound(AUD_SequenceEntry* sequence_entry, AUD_Sound* value);
+
+/**
+ * Retrieves the volume maximum of a sequence_entry.
+ * param sequence_entry The sequence_entry to get the volume maximum from.
+ * return The volume maximum of the sequence_entry.
+ */
+extern AUD_API float AUD_SequenceEntry_getVolumeMaximum(AUD_SequenceEntry* sequence_entry);
+
+/**
+ * Sets the volume maximum of a sequence_entry.
+ * param sequence_entry The sequence_entry to set the volume maximum from.
+ * param value The new volume maximum to set.
+ */
+extern AUD_API void AUD_SequenceEntry_setVolumeMaximum(AUD_SequenceEntry* sequence_entry, float value);
+
+/**
+ * Retrieves the volume minimum of a sequence_entry.
+ * param sequence_entry The sequence_entry to get the volume minimum from.
+ * return The volume minimum of the sequence_entry.
+ */
+extern AUD_API float AUD_SequenceEntry_getVolumeMinimum(AUD_SequenceEntry* sequence_entry);
+
+/**
+ * Sets the volume minimum of a sequence_entry.
+ * param sequence_entry The sequence_entry to set the volume minimum from.
+ * param value The new volume minimum to set.
+ */
+extern AUD_API void AUD_SequenceEntry_setVolumeMinimum(AUD_SequenceEntry* sequence_entry, float value);
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/extern/audaspace/bindings/C/AUD_Sound.cpp b/extern/audaspace/bindings/C/AUD_Sound.cpp
new file mode 100644
index 00000000000..30860acde62
--- /dev/null
+++ b/extern/audaspace/bindings/C/AUD_Sound.cpp
@@ -0,0 +1,709 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "generator/Sawtooth.h"
+#include "generator/Sine.h"
+#include "generator/Silence.h"
+#include "generator/Square.h"
+#include "generator/Triangle.h"
+#include "file/File.h"
+#include "file/FileWriter.h"
+#include "util/StreamBuffer.h"
+#include "fx/Accumulator.h"
+#include "fx/ADSR.h"
+#include "fx/Delay.h"
+#include "fx/Envelope.h"
+#include "fx/Fader.h"
+#include "fx/Highpass.h"
+#include "fx/IIRFilter.h"
+#include "fx/Limiter.h"
+#include "fx/Loop.h"
+#include "fx/Lowpass.h"
+#include "fx/Pitch.h"
+#include "fx/Reverse.h"
+#include "fx/Sum.h"
+#include "fx/Threshold.h"
+#include "fx/Volume.h"
+#include "fx/SoundList.h"
+#include "fx/MutableSound.h"
+#include "sequence/Double.h"
+#include "sequence/Superpose.h"
+#include "sequence/PingPong.h"
+#include "respec/LinearResample.h"
+#include "respec/JOSResample.h"
+#include "respec/JOSResampleReader.h"
+#include "respec/ChannelMapper.h"
+#include "respec/ChannelMapperReader.h"
+#include "util/Buffer.h"
+#include "Exception.h"
+
+#ifdef WITH_CONVOLUTION
+#include "fx/BinauralSound.h"
+#include "fx/ConvolverSound.h"
+#endif
+
+#include <cassert>
+#include <cstring>
+
+using namespace aud;
+
+#define AUD_CAPI_IMPLEMENTATION
+#include "AUD_Sound.h"
+
+static inline AUD_Specs convSpecToC(aud::Specs specs)
+{
+ AUD_Specs s;
+ s.channels = static_cast<AUD_Channels>(specs.channels);
+ s.rate = static_cast<AUD_SampleRate>(specs.rate);
+ return s;
+}
+
+static inline aud::Specs convCToSpec(AUD_Specs specs)
+{
+ aud::Specs s;
+ s.channels = static_cast<Channels>(specs.channels);
+ s.rate = static_cast<SampleRate>(specs.rate);
+ return s;
+}
+
+AUD_API AUD_Specs AUD_Sound_getSpecs(AUD_Sound* sound)
+{
+ assert(sound);
+
+ return convSpecToC((*sound)->createReader()->getSpecs());
+}
+
+AUD_API int AUD_Sound_getLength(AUD_Sound* sound)
+{
+ assert(sound);
+
+ return (*sound)->createReader()->getLength();
+}
+
+AUD_API sample_t* AUD_Sound_data(AUD_Sound* sound, int* length, AUD_Specs* specs)
+{
+ assert(sound);
+ assert(length);
+ assert(specs);
+
+ auto stream_buffer = std::dynamic_pointer_cast<StreamBuffer>(*sound);
+ if(!stream_buffer)
+ stream_buffer = std::make_shared<StreamBuffer>(*sound);
+ *specs = convSpecToC(stream_buffer->getSpecs());
+ auto buffer = stream_buffer->getBuffer();
+
+ *length = buffer->getSize() / AUD_SAMPLE_SIZE((*specs));
+
+ sample_t* data = new sample_t[buffer->getSize()];
+
+ std::memcpy(data, buffer->getBuffer(), buffer->getSize());
+
+ return data;
+}
+
+AUD_API void AUD_Sound_freeData(sample_t* data)
+{
+ delete[] data;
+}
+
+AUD_API const char* AUD_Sound_write(AUD_Sound* sound, const char* filename, AUD_SampleRate rate, AUD_Channels channels, AUD_SampleFormat format, AUD_Container container, AUD_Codec codec, int bitrate, int buffersize)
+{
+ assert(sound);
+ assert(filename);
+
+ try
+ {
+ std::shared_ptr<IReader> reader = (*sound)->createReader();
+
+ DeviceSpecs specs;
+ specs.specs = reader->getSpecs();
+
+ if((rate != RATE_INVALID) && (specs.rate != rate))
+ {
+ specs.rate = rate;
+ reader = std::make_shared<JOSResampleReader>(reader, rate);
+ }
+
+ if((channels != AUD_CHANNELS_INVALID) && (specs.channels != static_cast<Channels>(channels)))
+ {
+ specs.channels = static_cast<Channels>(channels);
+ reader = std::make_shared<ChannelMapperReader>(reader, specs.channels);
+ }
+
+ if(format == AUD_FORMAT_INVALID)
+ format = AUD_FORMAT_S16;
+ specs.format = static_cast<SampleFormat>(format);
+
+ const char* invalid_container_error = "Container could not be determined from filename.";
+
+ if(container == AUD_CONTAINER_INVALID)
+ {
+ std::string path = filename;
+
+ if(path.length() < 4)
+ return invalid_container_error;
+
+ std::string extension = path.substr(path.length() - 4);
+
+ if(extension == ".ac3")
+ container = AUD_CONTAINER_AC3;
+ else if(extension == "flac")
+ container = AUD_CONTAINER_FLAC;
+ else if(extension == ".mkv")
+ container = AUD_CONTAINER_MATROSKA;
+ else if(extension == ".mp2")
+ container = AUD_CONTAINER_MP2;
+ else if(extension == ".mp3")
+ container = AUD_CONTAINER_MP3;
+ else if(extension == ".ogg")
+ container = AUD_CONTAINER_OGG;
+ else if(extension == ".wav")
+ container = AUD_CONTAINER_WAV;
+ else
+ return invalid_container_error;
+ }
+
+ if(codec == AUD_CODEC_INVALID)
+ {
+ switch(container)
+ {
+ case AUD_CONTAINER_AC3:
+ codec = AUD_CODEC_AC3;
+ break;
+ case AUD_CONTAINER_FLAC:
+ codec = AUD_CODEC_FLAC;
+ break;
+ case AUD_CONTAINER_MATROSKA:
+ codec = AUD_CODEC_OPUS;
+ break;
+ case AUD_CONTAINER_MP2:
+ codec = AUD_CODEC_MP2;
+ break;
+ case AUD_CONTAINER_MP3:
+ codec = AUD_CODEC_MP3;
+ break;
+ case AUD_CONTAINER_OGG:
+ codec = AUD_CODEC_VORBIS;
+ break;
+ case AUD_CONTAINER_WAV:
+ codec = AUD_CODEC_PCM;
+ break;
+ default:
+ return "Unknown container, cannot select default codec.";
+ }
+ }
+
+ if(buffersize <= 0)
+ buffersize = AUD_DEFAULT_BUFFER_SIZE;
+
+ std::shared_ptr<IWriter> writer = FileWriter::createWriter(filename, specs, static_cast<Container>(container), static_cast<Codec>(codec), bitrate);
+ FileWriter::writeReader(reader, writer, 0, buffersize);
+ }
+ catch(Exception& e)
+ {
+ return "An exception occured while writing.";
+ }
+
+ return nullptr;
+}
+
+AUD_API AUD_Sound* AUD_Sound_buffer(sample_t* data, int length, AUD_Specs specs)
+{
+ assert(data);
+
+ if(length <= 0 || specs.rate <= 0 || specs.channels <= 0)
+ {
+ return nullptr;
+ }
+
+ int size = length * AUD_SAMPLE_SIZE(specs);
+
+ std::shared_ptr<Buffer> buffer = std::make_shared<Buffer>(size);
+
+ std::memcpy(buffer->getBuffer(), data, size);
+
+ try
+ {
+ return new AUD_Sound(new StreamBuffer(buffer, convCToSpec(specs)));
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+}
+
+AUD_API AUD_Sound* AUD_Sound_bufferFile(unsigned char* buffer, int size)
+{
+ assert(buffer);
+ return new AUD_Sound(new File(buffer, size));
+}
+
+AUD_API AUD_Sound* AUD_Sound_cache(AUD_Sound* sound)
+{
+ assert(sound);
+
+ try
+ {
+ return new AUD_Sound(new StreamBuffer(*sound));
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+}
+
+AUD_API AUD_Sound* AUD_Sound_file(const char* filename)
+{
+ assert(filename);
+ return new AUD_Sound(new File(filename));
+}
+
+AUD_API AUD_Sound* AUD_Sound_sawtooth(float frequency, AUD_SampleRate rate)
+{
+ return new AUD_Sound(new Sawtooth(frequency, rate));
+}
+
+AUD_API AUD_Sound*AUD_Sound_silence()
+{
+ return new AUD_Sound(new Silence());
+}
+
+AUD_API AUD_Sound* AUD_Sound_sine(float frequency, AUD_SampleRate rate)
+{
+ return new AUD_Sound(new Sine(frequency, rate));
+}
+
+AUD_API AUD_Sound* AUD_Sound_square(float frequency, AUD_SampleRate rate)
+{
+ return new AUD_Sound(new Square(frequency, rate));
+}
+
+AUD_API AUD_Sound* AUD_Sound_triangle(float frequency, AUD_SampleRate rate)
+{
+ return new AUD_Sound(new Triangle(frequency, rate));
+}
+
+AUD_API AUD_Sound* AUD_Sound_accumulate(AUD_Sound* sound, int additive)
+{
+ assert(sound);
+
+ try
+ {
+ return new AUD_Sound(new Accumulator(*sound, additive));
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+}
+
+AUD_API AUD_Sound* AUD_Sound_ADSR(AUD_Sound* sound, float attack, float decay, float sustain, float release)
+{
+ assert(sound);
+
+ try
+ {
+ return new AUD_Sound(new ADSR(*sound, attack, decay, sustain, release));
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+}
+
+AUD_API AUD_Sound* AUD_Sound_delay(AUD_Sound* sound, float delay)
+{
+ assert(sound);
+
+ try
+ {
+ return new AUD_Sound(new Delay(*sound, delay));
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+}
+
+AUD_API AUD_Sound* AUD_Sound_envelope(AUD_Sound* sound, float attack, float release, float threshold, float arthreshold)
+{
+ assert(sound);
+
+ try
+ {
+ return new AUD_Sound(new Envelope(*sound, attack, release, threshold, arthreshold));
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+}
+
+AUD_API AUD_Sound* AUD_Sound_fadein(AUD_Sound* sound, float start, float length)
+{
+ assert(sound);
+
+ try
+ {
+ return new AUD_Sound(new Fader(*sound, FADE_IN, start, length));
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+}
+
+AUD_API AUD_Sound* AUD_Sound_fadeout(AUD_Sound* sound, float start, float length)
+{
+ assert(sound);
+
+ try
+ {
+ return new AUD_Sound(new Fader(*sound, FADE_OUT, start, length));
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+}
+
+AUD_API AUD_Sound* AUD_Sound_filter(AUD_Sound* sound, float* b, int b_length, float* a, int a_length)
+{
+ assert(sound);
+
+ try
+ {
+ std::vector<float> a_coeff, b_coeff;
+
+ if(b)
+ for(int i = 0; i < b_length; i++)
+ b_coeff.push_back(b[i]);
+
+ if(a)
+ {
+ for(int i = 0; i < a_length; i++)
+ a_coeff.push_back(a[i]);
+
+ if(*a == 0.0f)
+ a_coeff[0] = 1.0f;
+ }
+
+ return new AUD_Sound(new IIRFilter(*sound, b_coeff, a_coeff));
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+}
+
+AUD_API AUD_Sound* AUD_Sound_highpass(AUD_Sound* sound, float frequency, float Q)
+{
+ assert(sound);
+
+ try
+ {
+ return new AUD_Sound(new Highpass(*sound, frequency, Q));
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+}
+
+AUD_API AUD_Sound* AUD_Sound_limit(AUD_Sound* sound, float start, float end)
+{
+ assert(sound);
+
+ try
+ {
+ return new AUD_Sound(new Limiter(*sound, start, end));
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+}
+
+AUD_API AUD_Sound* AUD_Sound_loop(AUD_Sound* sound, int count)
+{
+ assert(sound);
+
+ try
+ {
+ return new AUD_Sound(new Loop(*sound, count));
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+}
+
+AUD_API AUD_Sound* AUD_Sound_lowpass(AUD_Sound* sound, float frequency, float Q)
+{
+ assert(sound);
+
+ try
+ {
+ return new AUD_Sound(new Lowpass(*sound, frequency, Q));
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+}
+
+AUD_API AUD_Sound* AUD_Sound_pitch(AUD_Sound* sound, float factor)
+{
+ assert(sound);
+
+ try
+ {
+ return new AUD_Sound(new Pitch(*sound, factor));
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+}
+
+AUD_API AUD_Sound* AUD_Sound_rechannel(AUD_Sound* sound, AUD_Channels channels)
+{
+ assert(sound);
+
+ try
+ {
+ DeviceSpecs specs;
+ specs.channels = static_cast<Channels>(channels);
+ specs.rate = RATE_INVALID;
+ specs.format = FORMAT_INVALID;
+ return new AUD_Sound(new ChannelMapper(*sound, specs));
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+}
+
+AUD_API AUD_Sound* AUD_Sound_resample(AUD_Sound* sound, AUD_SampleRate rate, bool high_quality)
+{
+ assert(sound);
+
+ try
+ {
+ DeviceSpecs specs;
+ specs.channels = CHANNELS_INVALID;
+ specs.rate = rate;
+ specs.format = FORMAT_INVALID;
+ if(high_quality)
+ return new AUD_Sound(new JOSResample(*sound, specs));
+ else
+ return new AUD_Sound(new LinearResample(*sound, specs));
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+}
+
+AUD_API AUD_Sound* AUD_Sound_reverse(AUD_Sound* sound)
+{
+ assert(sound);
+
+ try
+ {
+ return new AUD_Sound(new Reverse(*sound));
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+}
+
+AUD_API AUD_Sound* AUD_Sound_sum(AUD_Sound* sound)
+{
+ assert(sound);
+
+ try
+ {
+ return new AUD_Sound(new Sum(*sound));
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+}
+
+AUD_API AUD_Sound* AUD_Sound_threshold(AUD_Sound* sound, float threshold)
+{
+ assert(sound);
+
+ try
+ {
+ return new AUD_Sound(new Threshold(*sound, threshold));
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+}
+
+AUD_API AUD_Sound* AUD_Sound_volume(AUD_Sound* sound, float volume)
+{
+ assert(sound);
+
+ try
+ {
+ return new AUD_Sound(new Volume(*sound, volume));
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+}
+
+AUD_API AUD_Sound* AUD_Sound_join(AUD_Sound* first, AUD_Sound* second)
+{
+ assert(first);
+ assert(second);
+
+ try
+ {
+ return new AUD_Sound(new Double(*first, *second));
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+}
+
+AUD_API AUD_Sound* AUD_Sound_mix(AUD_Sound* first, AUD_Sound* second)
+{
+ assert(first);
+ assert(second);
+
+ try
+ {
+ return new AUD_Sound(new Superpose(*first, *second));
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+}
+
+AUD_API AUD_Sound* AUD_Sound_pingpong(AUD_Sound* sound)
+{
+ assert(sound);
+
+ try
+ {
+ return new AUD_Sound(new PingPong(*sound));
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+}
+
+AUD_API void AUD_Sound_free(AUD_Sound* sound)
+{
+ assert(sound);
+ delete sound;
+}
+
+AUD_API AUD_Sound* AUD_Sound_copy(AUD_Sound* sound)
+{
+ return new std::shared_ptr<ISound>(*sound);
+}
+
+AUD_API AUD_Sound* AUD_Sound_list(int random)
+{
+ try
+ {
+ return new AUD_Sound(new SoundList(random));
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+}
+
+AUD_API int AUD_SoundList_addSound(AUD_Sound* list, AUD_Sound* sound)
+{
+ assert(sound);
+ assert(list);
+
+ std::shared_ptr<SoundList> s = std::dynamic_pointer_cast<SoundList>(*list);
+ if(s.get())
+ {
+ s->addSound(*sound);
+ return 1;
+ }
+ else
+ return 0;
+
+}
+
+AUD_API AUD_Sound* AUD_Sound_mutable(AUD_Sound* sound)
+{
+ assert(sound);
+
+ try
+ {
+ return new AUD_Sound(new MutableSound(*sound));
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+}
+
+#ifdef WITH_CONVOLUTION
+
+AUD_API AUD_Sound* AUD_Sound_Convolver(AUD_Sound* sound, AUD_ImpulseResponse* filter, AUD_ThreadPool* threadPool)
+{
+ assert(sound);
+ assert(filter);
+ assert(threadPool);
+
+ try
+ {
+ return new AUD_Sound(new ConvolverSound(*sound, *filter, *threadPool));
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+}
+
+AUD_API AUD_Sound* AUD_Sound_Binaural(AUD_Sound* sound, AUD_HRTF* hrtfs, AUD_Source* source, AUD_ThreadPool* threadPool)
+{
+ assert(sound);
+ assert(hrtfs);
+ assert(source);
+ assert(threadPool);
+
+ try
+ {
+ return new AUD_Sound(new BinauralSound(*sound, *hrtfs, *source, *threadPool));
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+}
+
+#endif
diff --git a/extern/audaspace/bindings/C/AUD_Sound.h b/extern/audaspace/bindings/C/AUD_Sound.h
new file mode 100644
index 00000000000..b18e3c3a8eb
--- /dev/null
+++ b/extern/audaspace/bindings/C/AUD_Sound.h
@@ -0,0 +1,370 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+#include "AUD_Types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Retrieves the sample specification of the sound.
+ * \param sound The sound to retrieve from.
+ * \return The sample specification of the sound.
+ * \note This function creates a reader from the sound and deletes it again.
+ */
+extern AUD_API AUD_Specs AUD_Sound_getSpecs(AUD_Sound* sound);
+
+/**
+ * Retrieves the approximate length of the sound.
+ * \param sound The sound to retrieve from.
+ * \return The length of the sound in samples.
+ * \note This function creates a reader from the sound and deletes it again.
+ */
+extern AUD_API int AUD_getLength(AUD_Sound* sound);
+
+/**
+ * Reads a sound's samples into memory.
+ * \param sound The sound to read.
+ * \param length Pointer to store the length of memory read.
+ * \param specs Pointer to store the data's sample specification.
+ * \return A pointer to the sample data.
+ * \warning The data has to be freed with AUD_Sound_freeData.
+ */
+extern AUD_API sample_t* AUD_Sound_data(AUD_Sound* sound, int* length, AUD_Specs* specs);
+
+/**
+ * Frees a buffer previously allocated with AUD_Sound_data.
+ * \param data The buffer to be freed.
+ */
+extern AUD_API void AUD_Sound_freeData(sample_t* data);
+
+/**
+ * Writes the sound to a file.
+ * \param sound The sound to write.
+ * \param filename The path to write to..
+ * \param rate The sample rate to write with.
+ * \param channels The number of channels to write with.
+ * \param format The sample format to write with.
+ * \param container The container format for the file.
+ * \param codec The codec to use in the file.
+ * \param bitrate The bitrate to write with.
+ * \param buffersize The size of the writing buffer.
+ * \return A nullptr or an error message in case of error.
+ * \note Most parameters can be set to zero for default values.
+ */
+extern AUD_API const char* AUD_Sound_write(AUD_Sound* sound, const char* filename, AUD_SampleRate rate, AUD_Channels channels, AUD_SampleFormat format, AUD_Container container, AUD_Codec codec, int bitrate, int buffersize);
+
+/**
+ * Creates a sound from a data buffer.
+ * \param data The data as interleaved samples.
+ * \param length The data's length in samples.
+ * \param specs The data's sample specification.
+ * \return A handle of the sound.
+ * \note The data gets copied to an internal memory buffer.
+ * The pointer does not need to stay valid for the lifetime of the object.
+ */
+extern AUD_API AUD_Sound* AUD_Sound_buffer(sample_t* data, int length, AUD_Specs specs);
+
+/**
+ * Loads a sound file from a memory buffer.
+ * \param buffer The buffer which contains the sound file.
+ * \param size The size of the buffer.
+ * \return A handle of the sound file.
+ */
+extern AUD_API AUD_Sound* AUD_Sound_bufferFile(unsigned char* buffer, int size);
+
+/**
+ * Caches a sound into a memory buffer.
+ * \param sound The sound to cache.
+ * \return A handle of the cached sound.
+ */
+extern AUD_API AUD_Sound* AUD_Sound_cache(AUD_Sound* sound);
+
+/**
+ * Loads a sound file.
+ * \param filename The filename of the sound file.
+ * \return A handle of the sound file.
+ */
+extern AUD_API AUD_Sound* AUD_Sound_file(const char* filename);
+
+/**
+ * Creates a sawtooth sound.
+ * \param frequency The frequency of the generated sawtooth sound.
+ * \param rate The sample rate of the sawtooth sound.
+ * \return A handle of the sound.
+ */
+extern AUD_API AUD_Sound* AUD_Sound_sawtooth(float frequency, AUD_SampleRate rate);
+
+/**
+ * Creates a quiet sound.
+ * \return A handle of the sound.
+ */
+extern AUD_API AUD_Sound* AUD_Sound_silence();
+
+/**
+ * Creates a sine sound.
+ * \param frequency The frequency of the generated sine sound.
+ * \param rate The sample rate of the sine sound.
+ * \return A handle of the sound.
+ */
+extern AUD_API AUD_Sound* AUD_Sound_sine(float frequency, AUD_SampleRate rate);
+
+/**
+ * Creates a square sound.
+ * \param frequency The frequency of the generated square sound.
+ * \param rate The sample rate of the square sound.
+ * \return A handle of the sound.
+ */
+extern AUD_API AUD_Sound* AUD_Sound_square(float frequency, AUD_SampleRate rate);
+
+/**
+ * Creates a triangle sound.
+ * \param frequency The frequency of the generated triangle sound.
+ * \param rate The sample rate of the triangle sound.
+ * \return A handle of the sound.
+ */
+extern AUD_API AUD_Sound* AUD_Sound_triangle(float frequency, AUD_SampleRate rate);
+
+/**
+ * Accumulates a sound by summing over positive input differences thus generating a monotonic sigal.
+ * If additivity is set to true negative input differences get added too, but positive ones with a factor of two.
+ * Note that with additivity the signal is not monotonic anymore.
+ * \param sound The sound to accumulate.
+ * \param additive Whether the accumulation should be additive or not.
+ * \return A handle of the accumulated sound.
+ */
+extern AUD_API AUD_Sound* AUD_Sound_accumulate(AUD_Sound* sound, int additive);
+
+/**
+ * Attack-Decay-Sustain-Release envelopes the volume of a sound.
+ * Note: there is currently no way to trigger the release with this API.
+ * \param sound The sound to filter.
+ * \param attack The attack time in seconds.
+ * \param decay The decay time in seconds.
+ * \param sustain The sustain level.
+ * \param release The release time in seconds.
+ * \return A handle of the filtered sound.
+ */
+extern AUD_API AUD_Sound* AUD_Sound_ADSR(AUD_Sound* sound, float attack, float decay, float sustain, float release);
+
+/**
+ * Delays a sound.
+ * \param sound The sound to dealy.
+ * \param delay The delay in seconds.
+ * \return A handle of the delayed sound.
+ */
+extern AUD_API AUD_Sound* AUD_Sound_delay(AUD_Sound* sound, float delay);
+
+/**
+ * Envelopes a sound.
+ * \param sound The sound to envelope.
+ * \param attack The attack factor.
+ * \param release The release factor.
+ * \param threshold The general threshold value.
+ * \param arthreshold The attack/release threshold value.
+ * \return A handle of the enveloped sound.
+ */
+extern AUD_API AUD_Sound* AUD_Sound_envelope(AUD_Sound* sound, float attack, float release, float threshold, float arthreshold);
+
+/**
+ * Fade in a sound.
+ * \param sound The sound to be fade in.
+ * \param start The time when the fading should start in seconds.
+ * \param length The duration of the fade in seconds.
+ * \return A handle of the faded sound.
+ */
+extern AUD_API AUD_Sound* AUD_Sound_fadein(AUD_Sound* sound, float start, float length);
+
+/**
+ * Fade out a sound.
+ * \param sound The sound to be fade out.
+ * \param start The time when the fading should start in seconds.
+ * \param length The duration of the fade in seconds.
+ * \return A handle of the faded sound.
+ */
+extern AUD_API AUD_Sound* AUD_Sound_fadeout(AUD_Sound* sound, float start, float length);
+
+/**
+ * Filter a sound.
+ * \param sound The sound to be filtered.
+ * \param b The nominator filter coefficients, may be NULL.
+ * \param b_length The length of the b array.
+ * \param a The denominator filter coefficients, may be NULL.
+ * \param a_length The length of the a array.
+ * \return A handle of the filtered sound.
+ */
+extern AUD_API AUD_Sound* AUD_Sound_filter(AUD_Sound* sound, float* b, int b_length, float* a, int a_length);
+
+/**
+ * Highpass filters a sound.
+ * \param sound The sound to filter.
+ * \param frequency The filter cut-off frequency.
+ * \param Q The filter quality. If usunsure which value to use, pass 1.0f.
+ * \return A handle of the filtered sound.
+ */
+extern AUD_API AUD_Sound* AUD_Sound_highpass(AUD_Sound* sound, float frequency, float Q);
+
+/**
+ * Limits a sound.
+ * \param sound The sound to limit.
+ * \param start The start time in seconds.
+ * \param end The stop time in seconds.
+ * \return A handle of the limited sound.
+ */
+extern AUD_API AUD_Sound* AUD_Sound_limit(AUD_Sound* sound, float start, float end);
+
+/**
+ * Loops a sound.
+ * \param sound The sound to loop.
+ * \param count How often the sound should be looped. Negative values mean endlessly.
+ * \return A handle of the looped sound.
+ */
+extern AUD_API AUD_Sound* AUD_Sound_loop(AUD_Sound* sound, int count);
+
+/**
+ * Lowpass filters a sound.
+ * \param sound The sound to filter.
+ * \param frequency The filter cut-off frequency.
+ * \param Q The filter quality. If usunsure which value to use, pass 1.0f.
+ * \return A handle of the filtered sound.
+ */
+extern AUD_API AUD_Sound* AUD_Sound_lowpass(AUD_Sound* sound, float frequency, float Q);
+
+/**
+ * Changes the pitch of a sound.
+ * \param sound The sound to change.
+ * \param factor The factor to change the pitch with.
+ * \return A handle of the pitched sound.
+ */
+extern AUD_API AUD_Sound* AUD_Sound_pitch(AUD_Sound* sound, float factor);
+
+/**
+ * Rechannels the sound.
+ * \param sound The sound to rechannel.
+ * \param channels The new channel configuration.
+ * \return The rechanneled sound.
+ */
+extern AUD_API AUD_Sound* AUD_Sound_rechannel(AUD_Sound* sound, AUD_Channels channels);
+
+/**
+ * Resamples the sound.
+ * \param sound The sound to resample.
+ * \param rate The new sample rate.
+ * \param high_quality When true use a higher quality but slower resampler.
+ * \return The resampled sound.
+ */
+extern AUD_API AUD_Sound* AUD_Sound_resample(AUD_Sound* sound, AUD_SampleRate rate, bool high_quality);
+
+/**
+ * Reverses a sound. Make sure the sound source can be reversed.
+ * \param sound The sound to reverse.
+ * \return A handle of the reversed sound.
+ */
+extern AUD_API AUD_Sound* AUD_Sound_reverse(AUD_Sound* sound);
+
+/**
+ * Sums the samples of a sound.
+ * \param sound The sound to sum.
+ * \return A handle of the summed sound.
+ */
+extern AUD_API AUD_Sound* AUD_Sound_sum(AUD_Sound* sound);
+
+/**
+ * Turns a sound into a square wave by thresholding.
+ * \param sound The sound to threshold.
+ * \param threshold Threshold value over which an amplitude counts non-zero.
+ * \return A handle of the thresholded sound.
+ */
+extern AUD_API AUD_Sound* AUD_Sound_threshold(AUD_Sound* sound, float threshold);
+
+/**
+ * Changes the volume of a sound.
+ * \param sound The sound to change.
+ * \param volume The new volume of the sound. Should be in the range 0 to 1. Use higher values with caution.
+ * \return A handle of the amplified sound.
+ */
+extern AUD_API AUD_Sound* AUD_Sound_volume(AUD_Sound* sound, float volume);
+
+/**
+ * Joins two sound, which means playing them one after the other.
+ * \param first The first sound.
+ * \param second The second sound.
+ * \return A handle of the joined sound.
+ */
+extern AUD_API AUD_Sound* AUD_Sound_join(AUD_Sound* first, AUD_Sound* second);
+
+/**
+ * Mixes two sound, which means superposing the sound samples.
+ * \param first The first sound.
+ * \param second The second sound.
+ * \return A handle of the mixed sound.
+ */
+extern AUD_API AUD_Sound* AUD_Sound_mix(AUD_Sound* first, AUD_Sound* second);
+
+/**
+ * Ping pongs a sound.
+ * \param sound The sound to ping pong.
+ * \return A handle of the ping pong sound.
+ */
+extern AUD_API AUD_Sound* AUD_Sound_pingpong(AUD_Sound* sound);
+
+/**
+ * Unloads a sound of any type.
+ * \param sound The handle of the sound.
+ */
+extern AUD_API void AUD_Sound_free(AUD_Sound* sound);
+
+/**
+ * Copies a sound.
+ * \param sound Sound to copy.
+ * \return Copied sound.
+ */
+extern AUD_API AUD_Sound* AUD_Sound_copy(AUD_Sound* sound);
+
+/**
+ * Creates an empty sound list that can contain several sounds.
+ * \param random A flag that indicates how the list will be played: Randomly or sequentially.
+ * if 0 the playback will be sequential, if not 0 the playback will be random.
+ * \return A handle of the sound list.
+ */
+extern AUD_API AUD_Sound* AUD_Sound_list(int random);
+
+/**
+* Adds a new sound to a sound list.
+ * \param list The sound list in which the sound will be added.
+ * \param sound The sound that will be added to the list.
+ * \return 0 if the sound couldn't be added (the list parameter isn't a sound list).
+*/
+extern AUD_API int AUD_SoundList_addSound(AUD_Sound* list, AUD_Sound* sound);
+
+/**
+ * Creates a sound that will be restarted when sought backwards. If the original sound is a sound list, the playing sound can change.
+ * \param sound The handle of the sound.
+ * \return A handle of the mutable sound.
+*/
+extern AUD_API AUD_Sound* AUD_Sound_mutable(AUD_Sound* sound);
+
+#ifdef WITH_CONVOLUTION
+ extern AUD_API AUD_Sound* AUD_Sound_Convolver(AUD_Sound* sound, AUD_ImpulseResponse* filter, AUD_ThreadPool* threadPool);
+ extern AUD_API AUD_Sound* AUD_Sound_Binaural(AUD_Sound* sound, AUD_HRTF* hrtfs, AUD_Source* source, AUD_ThreadPool* threadPool);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/extern/audaspace/bindings/C/AUD_Source.cpp b/extern/audaspace/bindings/C/AUD_Source.cpp
new file mode 100644
index 00000000000..c4bf6fea6a1
--- /dev/null
+++ b/extern/audaspace/bindings/C/AUD_Source.cpp
@@ -0,0 +1,84 @@
+/*******************************************************************************
+* Copyright 2009-2015 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "Exception.h"
+
+#include <cassert>
+
+using namespace aud;
+
+#define AUD_CAPI_IMPLEMENTATION
+#include "AUD_Source.h"
+
+extern AUD_API AUD_Source* AUD_Source_create(float azimuth, float elevation, float distance)
+{
+ try
+ {
+ return new AUD_Source(new Source(azimuth, elevation, distance));
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+}
+
+extern AUD_API void AUD_Source_free(AUD_Source* source)
+{
+ assert(source);
+ delete source;
+}
+
+extern AUD_API float AUD_Source_getAzimuth(AUD_Source* source)
+{
+ assert(source);
+
+ return (*source)->getAzimuth();
+}
+
+extern AUD_API float AUD_Source_getElevation(AUD_Source* source)
+{
+ assert(source);
+
+ return (*source)->getElevation();
+}
+
+extern AUD_API float AUD_Source_getDistance(AUD_Source* source)
+{
+ assert(source);
+
+ return (*source)->getDistance();
+}
+
+extern AUD_API void AUD_Source_setAzimuth(AUD_Source* source, float azimuth)
+{
+ assert(source);
+
+ (*source)->setAzimuth(azimuth);
+}
+
+extern AUD_API void AUD_Source_setElevation(AUD_Source* source, float elevation)
+{
+ assert(source);
+
+ (*source)->setElevation(elevation);
+}
+
+extern AUD_API void AUD_Source_setDistance(AUD_Source* source, float distance)
+{
+ assert(source);
+
+ (*source)->setDistance(distance);
+} \ No newline at end of file
diff --git a/extern/audaspace/bindings/C/AUD_Source.h b/extern/audaspace/bindings/C/AUD_Source.h
new file mode 100644
index 00000000000..6ff045ec848
--- /dev/null
+++ b/extern/audaspace/bindings/C/AUD_Source.h
@@ -0,0 +1,84 @@
+/*******************************************************************************
+* Copyright 2009-2015 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#pragma once
+
+#include "AUD_Types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+* Creates a new Source object.
+* \param azimuth The azimuth angle.
+* \param elevation The elevation angle.
+* \param elevation The distance value. [0,1]
+* \return The new Source object.
+*/
+extern AUD_API AUD_Source* AUD_Source_create(float azimuth, float elevation, float distance);
+
+/**
+* Deletes a Source object.
+* \param source The Source object to be deleted.
+*/
+extern AUD_API void AUD_Source_free(AUD_Source* source);
+
+/**
+* Retrieves the azimuth angle of a Source object.
+* \param source The Source object.
+* \return The azimuth angle.
+*/
+extern AUD_API float AUD_Source_getAzimuth(AUD_Source* source);
+
+/**
+* Retrieves the elevation angle oa a Source object.
+* \param source The Source object.
+* \return The elevation angle.
+*/
+extern AUD_API float AUD_Source_getElevation(AUD_Source* source);
+
+/**
+* Retrieves the distance of a Source object. [0,1]
+* \param source The Source object.
+* \return The distance.
+*/
+extern AUD_API float AUD_Source_getDistance(AUD_Source* distance);
+
+/**
+* Changes the azimuth angle of a Source object.
+* \param source The Source object.
+* \param azimuth The azimuth angle.
+*/
+extern AUD_API void AUD_Source_setAzimuth(AUD_Source* source, float azimuth);
+
+/**
+* Changes the elevation angle of a Source object.
+* \param source The Source object.
+* \param elevation The elevation angle.
+*/
+extern AUD_API void AUD_Source_setElevation(AUD_Source* source, float elevation);
+
+/**
+* Changes the distance of a Source object. [0,1]
+* \param source The Source object.
+* \param distance The distance.
+*/
+extern AUD_API void AUD_Source_setDistance(AUD_Source* source, float distance);
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/extern/audaspace/bindings/C/AUD_Special.cpp b/extern/audaspace/bindings/C/AUD_Special.cpp
new file mode 100644
index 00000000000..f8f46651231
--- /dev/null
+++ b/extern/audaspace/bindings/C/AUD_Special.cpp
@@ -0,0 +1,420 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "Exception.h"
+#include "IReader.h"
+#include "file/File.h"
+#include "respec/ChannelMapper.h"
+#include "fx/Lowpass.h"
+#include "fx/Highpass.h"
+#include "fx/Envelope.h"
+#include "respec/LinearResample.h"
+#include "fx/Threshold.h"
+#include "fx/Accumulator.h"
+#include "fx/Sum.h"
+#include "generator/Silence.h"
+#include "fx/Limiter.h"
+#include "devices/DeviceManager.h"
+#include "sequence/Sequence.h"
+#include "file/FileWriter.h"
+#include "devices/ReadDevice.h"
+#include "plugin/PluginManager.h"
+#include "devices/DeviceManager.h"
+#include "devices/IDeviceFactory.h"
+#include "devices/NULLDevice.h"
+
+#include <cassert>
+#include <cstring>
+#include <cmath>
+#include <sstream>
+
+using namespace aud;
+
+#define AUD_CAPI_IMPLEMENTATION
+#include "AUD_Special.h"
+
+static inline AUD_Specs convSpecToC(aud::Specs specs)
+{
+ AUD_Specs s;
+ s.channels = static_cast<AUD_Channels>(specs.channels);
+ s.rate = static_cast<AUD_SampleRate>(specs.rate);
+ return s;
+}
+
+static inline aud::Specs convCToSpec(AUD_Specs specs)
+{
+ aud::Specs s;
+ s.channels = static_cast<Channels>(specs.channels);
+ s.rate = static_cast<SampleRate>(specs.rate);
+ return s;
+}
+
+static inline AUD_DeviceSpecs convDSpecToC(aud::DeviceSpecs specs)
+{
+ AUD_DeviceSpecs s;
+ s.specs = convSpecToC(specs.specs);
+ s.format = static_cast<AUD_SampleFormat>(specs.format);
+ return s;
+}
+
+static inline aud::DeviceSpecs convCToDSpec(AUD_DeviceSpecs specs)
+{
+ aud::DeviceSpecs s;
+ s.specs = convCToSpec(specs.specs);
+ s.format = static_cast<SampleFormat>(specs.format);
+ return s;
+}
+
+AUD_API AUD_SoundInfo AUD_getInfo(AUD_Sound* sound)
+{
+ assert(sound);
+
+ AUD_SoundInfo info;
+ info.specs.channels = AUD_CHANNELS_INVALID;
+ info.specs.rate = AUD_RATE_INVALID;
+ info.length = 0.0f;
+
+ try
+ {
+ std::shared_ptr<IReader> reader = (*sound)->createReader();
+
+ if(reader.get())
+ {
+ info.specs = convSpecToC(reader->getSpecs());
+ info.length = reader->getLength() / (float) info.specs.rate;
+ }
+ }
+ catch(Exception&)
+ {
+ }
+
+ return info;
+}
+
+AUD_API float* AUD_readSoundBuffer(const char* filename, float low, float high,
+ float attack, float release, float threshold,
+ int accumulate, int additive, int square,
+ float sthreshold, double samplerate, int* length)
+{
+ Buffer buffer;
+ DeviceSpecs specs;
+ specs.channels = CHANNELS_MONO;
+ specs.rate = (SampleRate)samplerate;
+ std::shared_ptr<ISound> sound;
+
+ std::shared_ptr<ISound> file = std::shared_ptr<ISound>(new File(filename));
+
+ int position = 0;
+
+ try
+ {
+ std::shared_ptr<IReader> reader = file->createReader();
+
+ SampleRate rate = reader->getSpecs().rate;
+
+ sound = std::shared_ptr<ISound>(new ChannelMapper(file, specs));
+
+ if(high < rate)
+ sound = std::shared_ptr<ISound>(new Lowpass(sound, high));
+ if(low > 0)
+ sound = std::shared_ptr<ISound>(new Highpass(sound, low));
+
+ sound = std::shared_ptr<ISound>(new Envelope(sound, attack, release, threshold, 0.1f));
+ sound = std::shared_ptr<ISound>(new LinearResample(sound, specs));
+
+ if(square)
+ sound = std::shared_ptr<ISound>(new Threshold(sound, sthreshold));
+
+ if(accumulate)
+ sound = std::shared_ptr<ISound>(new Accumulator(sound, additive));
+ else if(additive)
+ sound = std::shared_ptr<ISound>(new Sum(sound));
+
+ reader = sound->createReader();
+
+ if(!reader.get())
+ return nullptr;
+
+ int len;
+ bool eos;
+ do
+ {
+ len = samplerate;
+ buffer.resize((position + len) * sizeof(float), true);
+ reader->read(len, eos, buffer.getBuffer() + position);
+ position += len;
+ } while(!eos);
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+
+ float * result = (float *)malloc(position * sizeof(float));
+ std::memcpy(result, buffer.getBuffer(), position * sizeof(float));
+ *length = position;
+ return result;
+}
+
+static void pauseSound(AUD_Handle* handle)
+{
+ assert(handle);
+ (*handle)->pause();
+}
+
+AUD_API AUD_Handle* AUD_pauseAfter(AUD_Handle* handle, float seconds)
+{
+ std::shared_ptr<ISound> silence = std::shared_ptr<ISound>(new Silence);
+ std::shared_ptr<ISound> limiter = std::shared_ptr<ISound>(new Limiter(silence, 0, seconds));
+
+ auto device = DeviceManager::getDevice();
+
+ std::lock_guard<ILockable> lock(*device);
+
+ try
+ {
+ AUD_Handle handle2 = device->play(limiter);
+ if(handle2.get())
+ {
+ handle2->setStopCallback((stopCallback)pauseSound, handle);
+ return new AUD_Handle(handle2);
+ }
+ }
+ catch(Exception&)
+ {
+ }
+
+ return nullptr;
+}
+
+AUD_API int AUD_readSound(AUD_Sound* sound, float* buffer, int length, int samples_per_second, short* interrupt)
+{
+ DeviceSpecs specs;
+ float* buf;
+ Buffer aBuffer;
+
+ specs.rate = RATE_INVALID;
+ specs.channels = CHANNELS_MONO;
+ specs.format = FORMAT_INVALID;
+
+ std::shared_ptr<IReader> reader = ChannelMapper(*sound, specs).createReader();
+
+ specs.specs = reader->getSpecs();
+ int len;
+ float samplejump = specs.rate / samples_per_second;
+ float min, max, power, overallmax;
+ bool eos;
+
+ overallmax = 0;
+
+ for(int i = 0; i < length; i++)
+ {
+ len = floor(samplejump * (i+1)) - floor(samplejump * i);
+
+ if(*interrupt)
+ return 0;
+
+ aBuffer.assureSize(len * AUD_SAMPLE_SIZE(specs));
+ buf = aBuffer.getBuffer();
+
+ reader->read(len, eos, buf);
+
+ max = min = *buf;
+ power = *buf * *buf;
+ for(int j = 1; j < len; j++)
+ {
+ if(buf[j] < min)
+ min = buf[j];
+ if(buf[j] > max)
+ max = buf[j];
+ power += buf[j] * buf[j];
+ }
+
+ buffer[i * 3] = min;
+ buffer[i * 3 + 1] = max;
+ buffer[i * 3 + 2] = sqrt(power) / len;
+
+ if(overallmax < max)
+ overallmax = max;
+ if(overallmax < -min)
+ overallmax = -min;
+
+ if(eos)
+ {
+ length = i;
+ break;
+ }
+ }
+
+ if(overallmax > 1.0f)
+ {
+ for(int i = 0; i < length * 3; i++)
+ {
+ buffer[i] /= overallmax;
+ }
+ }
+
+ return length;
+}
+
+AUD_API const char* AUD_mixdown(AUD_Sound* sound, unsigned int start, unsigned int length, unsigned int buffersize, const char* filename, AUD_DeviceSpecs specs, AUD_Container format, AUD_Codec codec, unsigned int bitrate)
+{
+ try
+ {
+ Sequence* f = dynamic_cast<Sequence *>(sound->get());
+
+ f->setSpecs(convCToSpec(specs.specs));
+ std::shared_ptr<IReader> reader = f->createQualityReader();
+ reader->seek(start);
+ std::shared_ptr<IWriter> writer = FileWriter::createWriter(filename, convCToDSpec(specs), static_cast<Container>(format), static_cast<Codec>(codec), bitrate);
+ FileWriter::writeReader(reader, writer, length, buffersize);
+
+ return nullptr;
+ }
+ catch(Exception& e)
+ {
+ return e.getMessage().c_str();
+ }
+}
+
+AUD_API const char* AUD_mixdown_per_channel(AUD_Sound* sound, unsigned int start, unsigned int length, unsigned int buffersize, const char* filename, AUD_DeviceSpecs specs, AUD_Container format, AUD_Codec codec, unsigned int bitrate)
+{
+ try
+ {
+ Sequence* f = dynamic_cast<Sequence *>(sound->get());
+
+ f->setSpecs(convCToSpec(specs.specs));
+
+ std::vector<std::shared_ptr<IWriter> > writers;
+
+ int channels = specs.channels;
+ specs.channels = AUD_CHANNELS_MONO;
+
+ for(int i = 0; i < channels; i++)
+ {
+ std::stringstream stream;
+ std::string fn = filename;
+ size_t index = fn.find_last_of('.');
+ size_t index_slash = fn.find_last_of('/');
+ size_t index_backslash = fn.find_last_of('\\');
+
+ if((index == std::string::npos) ||
+ ((index < index_slash) && (index_slash != std::string::npos)) ||
+ ((index < index_backslash) && (index_backslash != std::string::npos)))
+ {
+ stream << filename << "_" << (i + 1);
+ }
+ else
+ {
+ stream << fn.substr(0, index) << "_" << (i + 1) << fn.substr(index);
+ }
+ writers.push_back(FileWriter::createWriter(stream.str(), convCToDSpec(specs), static_cast<Container>(format), static_cast<Codec>(codec), bitrate));
+ }
+
+ std::shared_ptr<IReader> reader = f->createQualityReader();
+ reader->seek(start);
+ FileWriter::writeReader(reader, writers, length, buffersize);
+
+ return nullptr;
+ }
+ catch(Exception& e)
+ {
+ return e.getMessage().c_str();
+ }
+}
+
+AUD_API AUD_Device* AUD_openMixdownDevice(AUD_DeviceSpecs specs, AUD_Sound* sequencer, float volume, float start)
+{
+ try
+ {
+ ReadDevice* device = new ReadDevice(convCToDSpec(specs));
+ device->setQuality(true);
+ device->setVolume(volume);
+
+ Sequence* f = dynamic_cast<Sequence*>(sequencer->get());
+
+ f->setSpecs(convCToSpec(specs.specs));
+
+ AUD_Handle handle = device->play(f->createQualityReader());
+ if(handle.get())
+ {
+ handle->seek(start);
+ }
+
+ return new AUD_Device(device);
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+}
+
+AUD_API void AUD_initOnce()
+{
+ PluginManager::loadPlugins();
+ NULLDevice::registerPlugin();
+}
+
+AUD_API void AUD_exitOnce()
+{
+}
+
+AUD_API AUD_Device* AUD_init(const char* device, AUD_DeviceSpecs specs, int buffersize, const char* name)
+{
+ try
+ {
+ std::shared_ptr<IDeviceFactory> factory = DeviceManager::getDeviceFactory(device);
+
+ if(factory)
+ {
+ factory->setName(name);
+ factory->setBufferSize(buffersize);
+ factory->setSpecs(convCToDSpec(specs));
+ auto device = factory->openDevice();
+ DeviceManager::setDevice(device);
+
+ return new AUD_Device(device);
+ }
+ }
+ catch(Exception&)
+ {
+ }
+ return nullptr;
+}
+
+AUD_API void AUD_exit(AUD_Device* device)
+{
+ delete device;
+ DeviceManager::releaseDevice();
+}
+
+
+AUD_API char** AUD_getDeviceNames()
+{
+ std::vector<std::string> v_names = DeviceManager::getAvailableDeviceNames();
+ char** names = (char**) malloc(sizeof(char*) * (v_names.size() + 1));
+
+ for(int i = 0; i < v_names.size(); i++)
+ {
+ std::string name = v_names[i];
+ names[i] = (char*) malloc(sizeof(char) * (name.length() + 1));
+ strcpy(names[i], name.c_str());
+ }
+
+ names[v_names.size()] = nullptr;
+
+ return names;
+}
diff --git a/extern/audaspace/bindings/C/AUD_Special.h b/extern/audaspace/bindings/C/AUD_Special.h
new file mode 100644
index 00000000000..ab79ae915a2
--- /dev/null
+++ b/extern/audaspace/bindings/C/AUD_Special.h
@@ -0,0 +1,138 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+#include "AUD_Types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Returns information about a sound.
+ * \param sound The sound to get the info about.
+ * \return The AUD_SoundInfo structure with filled in data.
+ */
+extern AUD_API AUD_SoundInfo AUD_getInfo(AUD_Sound* sound);
+
+/**
+ * Reads a sound file into a newly created float buffer.
+ * The sound is therefore bandpassed, rectified and resampled.
+ */
+extern AUD_API float* AUD_readSoundBuffer(const char* filename, float low, float high,
+ float attack, float release, float threshold,
+ int accumulate, int additive, int square,
+ float sthreshold, double samplerate,
+ int* length);
+
+/**
+ * Pauses a playing sound after a specific amount of time.
+ * \param handle The handle to the sound.
+ * \param seconds The time in seconds.
+ * \return The silence handle.
+ */
+extern AUD_API AUD_Handle* AUD_pauseAfter(AUD_Handle* handle, float seconds);
+
+/**
+ * Reads a sound into a buffer for drawing at a specific sampling rate.
+ * \param sound The sound to read.
+ * \param buffer The buffer to write to. Must have a size of 3*4*length.
+ * \param length How many samples to read from the sound.
+ * \param samples_per_second How many samples to read per second of the sound.
+ * \return How many samples really have been read. Always <= length.
+ */
+extern AUD_API int AUD_readSound(AUD_Sound* sound, float* buffer, int length, int samples_per_second, short* interrupt);
+
+/**
+ * Mixes a sound down into a file.
+ * \param sound The sound scene to mix down.
+ * \param start The start frame.
+ * \param length The count of frames to write.
+ * \param buffersize How many samples should be written at once.
+ * \param filename The file to write to.
+ * \param specs The file's audio specification.
+ * \param format The file's container format.
+ * \param codec The codec used for encoding the audio data.
+ * \param bitrate The bitrate for encoding.
+ * \return An error message or NULL in case of success.
+ */
+extern AUD_API const char* AUD_mixdown(AUD_Sound* sound, unsigned int start, unsigned int length,
+ unsigned int buffersize, const char* filename,
+ AUD_DeviceSpecs specs, AUD_Container format,
+ AUD_Codec codec, unsigned int bitrate);
+
+/**
+ * Mixes a sound down into multiple files.
+ * \param sound The sound scene to mix down.
+ * \param start The start frame.
+ * \param length The count of frames to write.
+ * \param buffersize How many samples should be written at once.
+ * \param filename The file to write to, the channel number and an underscore are added at the beginning.
+ * \param specs The file's audio specification.
+ * \param format The file's container format.
+ * \param codec The codec used for encoding the audio data.
+ * \param bitrate The bitrate for encoding.
+ * \return An error message or NULL in case of success.
+ */
+extern AUD_API const char* AUD_mixdown_per_channel(AUD_Sound* sound, unsigned int start, unsigned int length,
+ unsigned int buffersize, const char* filename,
+ AUD_DeviceSpecs specs, AUD_Container format,
+ AUD_Codec codec, unsigned int bitrate);
+
+/**
+ * Opens a read device and prepares it for mixdown of the sound scene.
+ * \param specs Output audio specifications.
+ * \param sequencer The sound scene to mix down.
+ * \param volume The overall mixdown volume.
+ * \param start The start time of the mixdown in the sound scene.
+ * \return The read device for the mixdown.
+ */
+extern AUD_API AUD_Device* AUD_openMixdownDevice(AUD_DeviceSpecs specs, AUD_Sound* sequencer, float volume, float start);
+
+/**
+ * Initializes audio routines (FFMPEG/JACK if it is enabled).
+ */
+extern AUD_API void AUD_initOnce();
+
+/**
+ * Unitinitializes an audio routines.
+ */
+extern AUD_API void AUD_exitOnce();
+
+/**
+ * Initializes an audio device.
+ * \param device The device type that should be used.
+ * \param specs The audio specification to be used.
+ * \param buffersize The buffersize for the device.
+ * \return Whether the device has been initialized.
+ */
+extern AUD_API AUD_Device* AUD_init(const char* device, AUD_DeviceSpecs specs, int buffersize, const char* name);
+
+/**
+ * Unitinitializes an audio device.
+ * \param device The device to free.
+ */
+extern AUD_API void AUD_exit(AUD_Device* device);
+
+/**
+ * Retrieves available devices. Note that all memory returned has to be freed!
+ */
+extern AUD_API char** AUD_getDeviceNames();
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/extern/audaspace/bindings/C/AUD_ThreadPool.cpp b/extern/audaspace/bindings/C/AUD_ThreadPool.cpp
new file mode 100644
index 00000000000..f22a904838b
--- /dev/null
+++ b/extern/audaspace/bindings/C/AUD_ThreadPool.cpp
@@ -0,0 +1,42 @@
+/*******************************************************************************
+* Copyright 2009-2015 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "Exception.h"
+
+#include <cassert>
+
+using namespace aud;
+
+#define AUD_CAPI_IMPLEMENTATION
+#include "AUD_ThreadPool.h"
+
+AUD_API AUD_ThreadPool* AUD_ThreadPool_create(int nThreads)
+{
+ try
+ {
+ return new AUD_ThreadPool(new ThreadPool(nThreads));
+ }
+ catch(Exception&)
+ {
+ return nullptr;
+ }
+}
+
+AUD_API void AUD_ThreadPool_free(AUD_ThreadPool* pool)
+{
+ assert(pool);
+ delete pool;
+} \ No newline at end of file
diff --git a/extern/audaspace/bindings/C/AUD_ThreadPool.h b/extern/audaspace/bindings/C/AUD_ThreadPool.h
new file mode 100644
index 00000000000..c1b2204a80a
--- /dev/null
+++ b/extern/audaspace/bindings/C/AUD_ThreadPool.h
@@ -0,0 +1,40 @@
+/*******************************************************************************
+* Copyright 2009-2015 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#pragma once
+
+#include "AUD_Types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+* Creates a new ThreadPool object.
+* \param nThreads The number of threads of the pool.
+* \return The new ThreadPool object.
+*/
+extern AUD_API AUD_ThreadPool* AUD_ThreadPool_create(int nThreads);
+
+/**
+* Deletes a ThreadPool object.
+* \param threadPool The ThreadPool object to be deleted.
+*/
+extern AUD_API void AUD_ThreadPool_free(AUD_ThreadPool* threadPool);
+
+#ifdef __cplusplus
+}
+#endif \ No newline at end of file
diff --git a/extern/audaspace/bindings/C/AUD_Types.h b/extern/audaspace/bindings/C/AUD_Types.h
new file mode 100644
index 00000000000..75e4ffae18c
--- /dev/null
+++ b/extern/audaspace/bindings/C/AUD_Types.h
@@ -0,0 +1,179 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+#include "Audaspace.h"
+
+#ifdef __cplusplus
+using namespace aud;
+#endif
+
+#ifdef AUD_CAPI_IMPLEMENTATION
+#include "ISound.h"
+#include "devices/IHandle.h"
+#include "devices/IDevice.h"
+#include "sequence/SequenceEntry.h"
+#include "fx/PlaybackManager.h"
+#include "fx/DynamicMusic.h"
+#include "fx/Source.h"
+#include "util/ThreadPool.h"
+#ifdef WITH_CONVOLUTION
+#include "fx/ImpulseResponse.h"
+#include "fx/HRTF.h"
+#endif
+
+typedef std::shared_ptr<aud::ISound> AUD_Sound;
+typedef std::shared_ptr<aud::IHandle> AUD_Handle;
+typedef std::shared_ptr<aud::IDevice> AUD_Device;
+typedef std::shared_ptr<aud::SequenceEntry> AUD_SequenceEntry;
+typedef std::shared_ptr<aud::PlaybackManager> AUD_PlaybackManager;
+typedef std::shared_ptr<aud::DynamicMusic> AUD_DynamicMusic;
+typedef std::shared_ptr<aud::ThreadPool> AUD_ThreadPool;
+typedef std::shared_ptr<aud::Source> AUD_Source;
+#ifdef WITH_CONVOLUTION
+typedef std::shared_ptr<aud::ImpulseResponse> AUD_ImpulseResponse;
+typedef std::shared_ptr<aud::HRTF> AUD_HRTF;
+#endif
+#else
+typedef void AUD_Sound;
+typedef void AUD_Handle;
+typedef void AUD_Device;
+typedef void AUD_SequenceEntry;
+typedef void AUD_PlaybackManager;
+typedef void AUD_DynamicMusic;
+typedef void AUD_ThreadPool;
+typedef void AUD_Source;
+#ifdef WITH_CONVOLUTION
+typedef void AUD_ImpulseResponse;
+typedef void AUD_HRTF;
+#endif
+#endif
+
+/// Container formats for writers.
+typedef enum
+{
+ AUD_CONTAINER_INVALID = 0,
+ AUD_CONTAINER_AC3,
+ AUD_CONTAINER_FLAC,
+ AUD_CONTAINER_MATROSKA,
+ AUD_CONTAINER_MP2,
+ AUD_CONTAINER_MP3,
+ AUD_CONTAINER_OGG,
+ AUD_CONTAINER_WAV
+} AUD_Container;
+
+/// Audio codecs for writers.
+typedef enum
+{
+ AUD_CODEC_INVALID = 0,
+ AUD_CODEC_AAC,
+ AUD_CODEC_AC3,
+ AUD_CODEC_FLAC,
+ AUD_CODEC_MP2,
+ AUD_CODEC_MP3,
+ AUD_CODEC_PCM,
+ AUD_CODEC_VORBIS,
+ AUD_CODEC_OPUS
+} AUD_Codec;
+
+/**
+ * The format of a sample.
+ * The last 4 bit save the byte count of the format.
+ */
+typedef enum
+{
+ AUD_FORMAT_INVALID = 0x00, /// Invalid sample format.
+ AUD_FORMAT_U8 = 0x01, /// 1 byte unsigned byte.
+ AUD_FORMAT_S16 = 0x12, /// 2 byte signed integer.
+ AUD_FORMAT_S24 = 0x13, /// 3 byte signed integer.
+ AUD_FORMAT_S32 = 0x14, /// 4 byte signed integer.
+ AUD_FORMAT_FLOAT32 = 0x24, /// 4 byte float.
+ AUD_FORMAT_FLOAT64 = 0x28 /// 8 byte float.
+} AUD_SampleFormat;
+
+/// The channel count.
+typedef enum
+{
+ AUD_CHANNELS_INVALID = 0, /// Invalid channel count.
+ AUD_CHANNELS_MONO = 1, /// Mono.
+ AUD_CHANNELS_STEREO = 2, /// Stereo.
+ AUD_CHANNELS_STEREO_LFE = 3, /// Stereo with LFE channel.
+ AUD_CHANNELS_SURROUND4 = 4, /// 4 channel surround sound.
+ AUD_CHANNELS_SURROUND5 = 5, /// 5 channel surround sound.
+ AUD_CHANNELS_SURROUND51 = 6, /// 5.1 surround sound.
+ AUD_CHANNELS_SURROUND61 = 7, /// 6.1 surround sound.
+ AUD_CHANNELS_SURROUND71 = 8 /// 7.1 surround sound.
+} AUD_Channels;
+
+/**
+ * The sample rate tells how many samples are played back within one second.
+ * Some exotic formats may use other sample rates than provided here.
+ */
+typedef enum
+{
+ AUD_RATE_INVALID = 0, /// Invalid sample rate.
+ AUD_RATE_8000 = 8000, /// 8000 Hz.
+ AUD_RATE_16000 = 16000, /// 16000 Hz.
+ AUD_RATE_11025 = 11025, /// 11025 Hz.
+ AUD_RATE_22050 = 22050, /// 22050 Hz.
+ AUD_RATE_32000 = 32000, /// 32000 Hz.
+ AUD_RATE_44100 = 44100, /// 44100 Hz.
+ AUD_RATE_48000 = 48000, /// 48000 Hz.
+ AUD_RATE_88200 = 88200, /// 88200 Hz.
+ AUD_RATE_96000 = 96000, /// 96000 Hz.
+ AUD_RATE_192000 = 192000 /// 192000 Hz.
+} AUD_DefaultSampleRate;
+
+/// Sample rate type.
+typedef double AUD_SampleRate;
+
+/// Specification of a sound source.
+typedef struct
+{
+ /// Sample rate in Hz.
+ AUD_SampleRate rate;
+
+ /// Channel count.
+ AUD_Channels channels;
+} AUD_Specs;
+
+/// Specification of a sound device.
+typedef struct
+{
+ /// Sample format.
+ AUD_SampleFormat format;
+
+ union
+ {
+ struct
+ {
+ /// Sample rate in Hz.
+ AUD_SampleRate rate;
+
+ /// Channel count.
+ AUD_Channels channels;
+ };
+ AUD_Specs specs;
+ };
+} AUD_DeviceSpecs;
+
+/// Sound information structure.
+typedef struct
+{
+ AUD_Specs specs;
+ float length;
+} AUD_SoundInfo;
diff --git a/extern/audaspace/bindings/doc/conf.py.in b/extern/audaspace/bindings/doc/conf.py.in
new file mode 100644
index 00000000000..e08efbcf7f6
--- /dev/null
+++ b/extern/audaspace/bindings/doc/conf.py.in
@@ -0,0 +1,261 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+#
+# audaspace documentation build configuration file, created by
+# sphinx-quickstart on Tue Sep 9 01:48:48 2014.
+#
+# This file is execfile()d with the current directory set to its
+# containing dir.
+#
+# Note that not all possible configuration values are present in this
+# autogenerated file.
+#
+# All configuration values have a default; values that are commented out
+# serve to show the default.
+
+import sys
+import os
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+#sys.path.insert(0, os.path.abspath('.'))
+
+# -- General configuration ------------------------------------------------
+
+# If your documentation needs a minimal Sphinx version, state it here.
+#needs_sphinx = '1.0'
+
+# Add any Sphinx extension module names here, as strings. They can be
+# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
+# ones.
+extensions = [
+ 'sphinx.ext.autodoc',
+]
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = []
+
+# The suffix of source filenames.
+source_suffix = '.rst'
+
+# The encoding of source files.
+#source_encoding = 'utf-8-sig'
+
+# The master toctree document.
+master_doc = 'index'
+
+# General information about the project.
+project = 'audaspace'
+copyright = '2009-2015, Jörg Müller'
+
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+# The short X.Y version.
+version = '@AUDASPACE_VERSION@'
+# The full version, including alpha/beta/rc tags.
+release = '@AUDASPACE_LONG_VERSION@'
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#language = None
+
+# There are two options for replacing |today|: either, you set today to some
+# non-false value, then it is used:
+#today = ''
+# Else, today_fmt is used as the format for a strftime call.
+#today_fmt = '%B %d, %Y'
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+exclude_patterns = []
+
+# The reST default role (used for this markup: `text`) to use for all
+# documents.
+#default_role = None
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+#add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+#add_module_names = True
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+#show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+# A list of ignored prefixes for module index sorting.
+#modindex_common_prefix = []
+
+# If true, keep warnings as "system message" paragraphs in the built documents.
+#keep_warnings = False
+
+
+# -- Options for HTML output ----------------------------------------------
+
+# The theme to use for HTML and HTML Help pages. See the documentation for
+# a list of builtin themes.
+html_theme = 'alabaster'
+
+# Theme options are theme-specific and customize the look and feel of a theme
+# further. For a list of options available for each theme, see the
+# documentation.
+#html_theme_options = {}
+
+# Add any paths that contain custom themes here, relative to this directory.
+#html_theme_path = []
+
+# The name for this set of Sphinx documents. If None, it defaults to
+# "<project> v<release> documentation".
+#html_title = None
+
+# A shorter title for the navigation bar. Default is the same as html_title.
+#html_short_title = None
+
+# The name of an image file (relative to this directory) to place at the top
+# of the sidebar.
+#html_logo = None
+
+# The name of an image file (within the static path) to use as favicon of the
+# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
+# pixels large.
+#html_favicon = None
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = []
+
+# Add any extra paths that contain custom files (such as robots.txt or
+# .htaccess) here, relative to this directory. These files are copied
+# directly to the root of the documentation.
+#html_extra_path = []
+
+# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
+# using the given strftime format.
+#html_last_updated_fmt = '%b %d, %Y'
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+#html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+#html_sidebars = {}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+#html_additional_pages = {}
+
+# If false, no module index is generated.
+#html_domain_indices = True
+
+# If false, no index is generated.
+#html_use_index = True
+
+# If true, the index is split into individual pages for each letter.
+#html_split_index = False
+
+# If true, links to the reST sources are added to the pages.
+#html_show_sourcelink = True
+
+# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
+#html_show_sphinx = True
+
+# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
+#html_show_copyright = True
+
+# If true, an OpenSearch description file will be output, and all pages will
+# contain a <link> tag referring to it. The value of this option must be the
+# base URL from which the finished HTML is served.
+#html_use_opensearch = ''
+
+# This is the file name suffix for HTML files (e.g. ".xhtml").
+#html_file_suffix = None
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'audaspacedoc'
+
+
+# -- Options for LaTeX output ---------------------------------------------
+
+latex_elements = {
+# The paper size ('letterpaper' or 'a4paper').
+#'papersize': 'letterpaper',
+
+# The font size ('10pt', '11pt' or '12pt').
+#'pointsize': '10pt',
+
+# Additional stuff for the LaTeX preamble.
+#'preamble': '',
+}
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title,
+# author, documentclass [howto, manual, or own class]).
+latex_documents = [
+ ('index', 'audaspace.tex', 'audaspace Documentation',
+ 'Jörg Müller', 'manual'),
+]
+
+# The name of an image file (relative to this directory) to place at the top of
+# the title page.
+#latex_logo = None
+
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+#latex_use_parts = False
+
+# If true, show page references after internal links.
+#latex_show_pagerefs = False
+
+# If true, show URL addresses after external links.
+#latex_show_urls = False
+
+# Documents to append as an appendix to all manuals.
+#latex_appendices = []
+
+# If false, no module index is generated.
+#latex_domain_indices = True
+
+
+# -- Options for manual page output ---------------------------------------
+
+# One entry per manual page. List of tuples
+# (source start file, name, description, authors, manual section).
+man_pages = [
+ ('index', 'audaspace', 'audaspace Documentation',
+ ['Jörg Müller'], 1)
+]
+
+# If true, show URL addresses after external links.
+#man_show_urls = False
+
+
+# -- Options for Texinfo output -------------------------------------------
+
+# Grouping the document tree into Texinfo files. List of tuples
+# (source start file, target name, title, author,
+# dir menu entry, description, category)
+texinfo_documents = [
+ ('index', 'audaspace', 'audaspace Documentation',
+ 'Jörg Müller', 'audaspace', 'One line description of project.',
+ 'Miscellaneous'),
+]
+
+# Documents to append as an appendix to all manuals.
+#texinfo_appendices = []
+
+# If false, no module index is generated.
+#texinfo_domain_indices = True
+
+# How to display URL addresses: 'footnote', 'no', or 'inline'.
+#texinfo_show_urls = 'footnote'
+
+# If true, do not generate a @detailmenu in the "Top" node's menu.
+#texinfo_no_detailmenu = False
diff --git a/extern/audaspace/bindings/doc/device.rst b/extern/audaspace/bindings/doc/device.rst
new file mode 100644
index 00000000000..fd6b334022c
--- /dev/null
+++ b/extern/audaspace/bindings/doc/device.rst
@@ -0,0 +1,7 @@
+Device
+======
+
+.. currentmodule:: aud
+.. autoclass:: Device
+ :members:
+
diff --git a/extern/audaspace/bindings/doc/handle.rst b/extern/audaspace/bindings/doc/handle.rst
new file mode 100644
index 00000000000..aceedbca3a6
--- /dev/null
+++ b/extern/audaspace/bindings/doc/handle.rst
@@ -0,0 +1,7 @@
+Handle
+======
+
+.. currentmodule:: aud
+.. autoclass:: Handle
+ :members:
+
diff --git a/extern/audaspace/bindings/doc/index.rst b/extern/audaspace/bindings/doc/index.rst
new file mode 100644
index 00000000000..b8a26822949
--- /dev/null
+++ b/extern/audaspace/bindings/doc/index.rst
@@ -0,0 +1,35 @@
+.. audaspace documentation master file, created by
+ sphinx-quickstart on Tue Sep 9 01:48:48 2014.
+ You can adapt this file completely to your liking, but it should at least
+ contain the root `toctree` directive.
+
+Welcome to audaspace's documentation!
+=====================================
+
+.. automodule:: aud
+
+This documentation is valid for both the Python and C bindings of audaspace. If you are looking for installation instructions check the `C++ API documentation <../index.html>`_. As C is not an object oriented language everything is accessible via functions where the first paramter is always the object. For methods these are named as ``AUD_ClassName_method()`` and properties are accessed via ``AUD_ClassName_property_get/set()``. Python users simply ``import aud`` to access the library.
+
+.. toctree::
+ :maxdepth: 2
+
+ tutorials
+
+Classes:
+
+.. toctree::
+ :maxdepth: 2
+
+ device
+ sound
+ handle
+ sequence
+ sequence_entry
+
+Indices and tables
+==================
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`
+
diff --git a/extern/audaspace/bindings/doc/sequence.rst b/extern/audaspace/bindings/doc/sequence.rst
new file mode 100644
index 00000000000..16fcb00f4dc
--- /dev/null
+++ b/extern/audaspace/bindings/doc/sequence.rst
@@ -0,0 +1,7 @@
+Sequence
+========
+
+.. currentmodule:: aud
+.. autoclass:: Sequence
+ :members:
+
diff --git a/extern/audaspace/bindings/doc/sequence_entry.rst b/extern/audaspace/bindings/doc/sequence_entry.rst
new file mode 100644
index 00000000000..0a3d83388e9
--- /dev/null
+++ b/extern/audaspace/bindings/doc/sequence_entry.rst
@@ -0,0 +1,7 @@
+Sequence Entry
+==============
+
+.. currentmodule:: aud
+.. autoclass:: SequenceEntry
+ :members:
+
diff --git a/extern/audaspace/bindings/doc/sound.rst b/extern/audaspace/bindings/doc/sound.rst
new file mode 100644
index 00000000000..2f14721cf3a
--- /dev/null
+++ b/extern/audaspace/bindings/doc/sound.rst
@@ -0,0 +1,7 @@
+Sound
+=====
+
+.. currentmodule:: aud
+.. autoclass:: Sound
+ :members:
+
diff --git a/extern/audaspace/bindings/doc/tutorials.rst b/extern/audaspace/bindings/doc/tutorials.rst
new file mode 100644
index 00000000000..55f51d9ee2f
--- /dev/null
+++ b/extern/audaspace/bindings/doc/tutorials.rst
@@ -0,0 +1,166 @@
+Tutorials
+=========
+
+Introduction
+------------
+
+The C and Python binding for audaspace were designed with simplicity in mind. This means however that to use the full capabilities of audaspace, there is no way around the C++ library.
+
+Simple Demo
+-----------
+
+The **simple.py** example program contains all the basic building blocks for an application using audaspace. These building blocks are basically the classes :class:`aud.Device`, :class:`aud.Sound` and :class:`aud.Handle`.
+
+We start with importing :mod:`aud` and :mod:`time` as the modules we need for our simple example.
+
+.. code-block:: python
+
+ #!/usr/bin/python
+ import aud, time
+
+The first step now is to open an output device and this can simply be done by allocating a :class:`aud.Device` object.
+
+.. code-block:: python
+
+ device = aud.Device()
+
+To create a sound we can choose to load one from a :func:`aud.Sound.file`, or we use one of our signal generators. We decide to do the latter and create a :func:`aud.Sound.sine` signal with a frequency of 440 Hz.
+
+.. code-block:: python
+
+ sine = aud.Sound.sine(440)
+
+.. note:: At this point nothing is playing back yet, :class:`aud.Sound` objects are just descriptions of sounds.
+
+However instead of a sine wave, we would like to have a square wave to produce a more retro gaming sound. We could of course use the :func:`aud.Sound.square` generator instead of sine, but we want to show how to apply effects, so we apply a :func:`aud.Sound.threshold` which makes a square wave out of our sine too, even if less efficient than directly generating the square wave.
+
+.. code-block:: python
+
+ square = sine.threshold()
+
+.. note:: The :class:`aud.Sound` class offers generator and effect functions.
+
+The we can play our sound by calling the :func:`aud.Device.play` method of our device. This method returns a :class:`aud.Handle` which is used to control the playback of the sound.
+
+.. code-block:: python
+
+ handle = device.play(square)
+
+Now if we do nothing else anymore the application will quit immediately, so we won't hear much of our square wave, so we decide to wait for three seconds before quitting the application by calling :func:`time.sleep`.
+
+.. code-block:: python
+
+ time.sleep(3)
+
+Audioplayer
+-----------
+
+Now that we know the basics of audaspace, we can build our own music player easily by just slightly changing the previous program. The **player.py** example does exactly that, let's have a short look at the differences:
+
+Instead of creating a sine signal and thresholding it, we in fact use the :func:`aud.Sound.file` function to load a sound from a file. The filename we pass is the first command line argument our application got.
+
+.. code-block:: python
+
+ sound = aud.Sound.file(sys.argv[1])
+
+When the sound gets played back we now want to wait until the whole file has been played, so we use the :data:`aud.Handle.status` property to determine whether the sound finished playing.
+
+.. code-block:: python
+
+ while handle.status:
+ time.sleep(0.1)
+
+We don't make any error checks if the user actually added a command line argument. As an exercise you could extend this program to play any number of command line supplied files in sequence.
+
+Siren
+-----
+
+Let's get a little bit more complex. The **siren.py** example plays a generated siren sound that circles around your head. Depending on how many speakers you have and if the output device used supports the speaker setup, you will hear this effect. With stereo speakers you should at least hear some left-right-panning.
+
+We start off again with importing the modules we need and we also define some properties of our siren sound. We want it to consist of two sine sounds with different frequencies. We define a length for the sine sounds and how long a fade in/out should take. We also know already how to open a device.
+
+.. code-block:: python
+
+ #!/usr/bin/python
+ import aud, math, time
+ length = 0.5
+ fadelength = 0.05
+
+ device = aud.Device()
+
+The next thing to do is to define our sine waves and apply all the required effects. As each of the effect functions returns the corresponding sound, we can easily chain those calls together.
+
+.. code-block:: python
+
+ high = aud.Sound.sine(880).limit(0, length).fadein(0, fadelength).fadeout(length - fadelength, length)
+ low = aud.Sound.sine(700).limit(0, length).fadein(0, fadelength).fadeout(length - fadelength, length).volume(0.6)
+
+The next step is to connect the two sines, which we do using the :func:`aud.Sound.join` function.
+
+.. code-block:: python
+
+ sound = high.join(low)
+
+The generated siren sound can now be played back and what we also do is to loop it. Therefore we set the :data:`aud.Handle.loop_count` to a negative value to loop forever.
+
+.. code-block:: python
+
+ handle = device.play(sound)
+ handle.loop_count = -1
+
+Now we use some timing code to make sure our demo runs for 10 seconds, but we also use the time to update the location of our playing sound, with the :data:`aud.Handle.location` property, which is a three dimensional vector. The trigonometic calculation based on the running time of the program keeps the sound on the XZ plane letting it follow a circle around us.
+
+.. code-block:: python
+
+ start = time.time()
+
+ while time.time() - start < 10:
+ angle = time.time() - start
+
+ handle.location = [math.sin(angle), 0, -math.cos(angle)]
+
+As an exercise you could try to let the sound come from the far left and go to the far right and a little bit in front of you within the 10 second runtime of the program. With this change you should be able to hear the volume of the sound change, depending on how far it is away from you. Updating the :data:`aud.Handle.velocity` property properly also enables the doppler effect. Compare your solution to the **siren2.py** demo.
+
+Tetris
+------
+
+The **tetris.py** demo application shows an even more complex application which generates retro tetris music. Looking at the source code there should be nothing new here, again the functions used from audaspace are the same as in the previous examples. In the :func:`parseNote` function all single notes get joined which leads to a very long chain of sounds. If you think of :func:`aud.Sound.join` as a function that creates a binary tree with the two joined sounds as leaves then the :func:`parseNote` function creates a very unbalanced tree.
+
+Insted we could rewrite the code to use two other classes: :class:`aud.Sequence` and :class:`aud.SequenceEntry` to sequence the notes. The **tetris2.py** application does exactly that. Before the while loop we add a variable that stores the current position in the score and create a new :class:`aud.Sequence` object.
+
+.. code-block:: python
+
+ position = 0
+ sequence = aud.Sequence()
+
+Then in the loop we can create the note simply by chaining the :func:`aud.Sound.square` generator and :func:`aud.Sound.fadein` and :func:`aud.Sound.fadeout` effects.
+
+.. code-block:: python
+
+ note = aud.Sound.square(freq, rate).fadein(0, fadelength).fadeout(length - fadelength, fadelength)
+
+Now instead of using :func:`aud.Sound.limit` and :func:`aud.Sound.join` we simply add the sound to the sequence.
+
+.. code-block:: python
+
+ entry = sequence.add(note, position, position + length, 0)
+
+The entry returned from the :func:`aud.Sequence.add` function is an object of the :class:`aud.SequenceEntry` class. We can use this entry to mute the note in case it's actually a pause.
+
+.. code-block:: python
+
+ if char == 'p':
+ entry.muted = True
+
+Lastly we have to update our position variable.
+
+.. code-block:: python
+
+ position += length
+
+Now in **tetris2.py** we used the :data:`aud.SequenceEntry.muted` property to show how the :class:`aud.SequenceEntry` class can be used, but it would actually be smarter to not even create a note for pauses and just skip them. You can try to implement this as an exercise and then check out the solution in **tetris3.py**.
+
+Conclusion
+----------
+
+We introduced all five currently available classes in the audaspace Python API. Of course all classes offer a lot more functions than have been used in these demo applications, check out the specific class documentation for more details.
diff --git a/extern/audaspace/bindings/python/PyAPI.cpp b/extern/audaspace/bindings/python/PyAPI.cpp
new file mode 100644
index 00000000000..cceadbc0992
--- /dev/null
+++ b/extern/audaspace/bindings/python/PyAPI.cpp
@@ -0,0 +1,231 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "PyAPI.h"
+#include "PySound.h"
+#include "PyHandle.h"
+#include "PyDevice.h"
+#include "PySequenceEntry.h"
+#include "PySequence.h"
+#include "PyPlaybackManager.h"
+#include "PyDynamicMusic.h"
+#include "PyThreadPool.h"
+#include "PySource.h"
+
+#ifdef WITH_CONVOLUTION
+#include "PyImpulseResponse.h"
+#include "PyHRTF.h"
+#endif
+
+#include "respec/Specification.h"
+#include "devices/IHandle.h"
+#include "devices/I3DDevice.h"
+#include "file/IWriter.h"
+#include "plugin/PluginManager.h"
+#include "sequence/AnimateableProperty.h"
+#include "ISound.h"
+
+#include <memory>
+
+#include <structmember.h>
+
+using namespace aud;
+
+// ====================================================================
+
+#define PY_MODULE_ADD_CONSTANT(module, name) PyModule_AddIntConstant(module, #name, name)
+
+// ====================================================================
+
+extern PyObject* AUDError;
+PyObject* AUDError = nullptr;
+
+// ====================================================================
+
+PyDoc_STRVAR(M_aud_doc,
+ "Audaspace (pronounced \"outer space\") is a high level audio library.");
+
+static struct PyModuleDef audmodule = {
+ PyModuleDef_HEAD_INIT,
+ "aud", /* name of module */
+ M_aud_doc, /* module documentation */
+ -1, /* size of per-interpreter state of the module,
+ or -1 if the module keeps state in global variables. */
+ nullptr, nullptr, nullptr, nullptr, nullptr
+};
+
+PyMODINIT_FUNC
+PyInit_aud()
+{
+ PyObject* module;
+
+ PluginManager::loadPlugins();
+
+ if(!initializeSound())
+ return nullptr;
+
+ if(!initializeDevice())
+ return nullptr;
+
+ if(!initializeHandle())
+ return nullptr;
+
+ if(!initializeSequenceEntry())
+ return nullptr;
+
+ if(!initializeSequence())
+ return nullptr;
+
+ if(!initializeDynamicMusic())
+ return nullptr;
+
+ if(!initializePlaybackManager())
+ return nullptr;
+
+ if(!initializeThreadPool())
+ return nullptr;
+
+ if(!initializeSource())
+ return nullptr;
+
+#ifdef WITH_CONVOLUTION
+ if(!initializeImpulseResponse())
+ return nullptr;
+
+ if(!initializeHRTF())
+ return nullptr;
+#endif
+
+ module = PyModule_Create(&audmodule);
+ if(module == nullptr)
+ return nullptr;
+
+ addSoundToModule(module);
+ addHandleToModule(module);
+ addDeviceToModule(module);
+ addSequenceEntryToModule(module);
+ addSequenceToModule(module);
+ addDynamicMusicToModule(module);
+ addPlaybackManagerToModule(module);
+ addThreadPoolToModule(module);
+ addSourceToModule(module);
+
+#ifdef WITH_CONVOLUTION
+ addImpulseResponseToModule(module);
+ addHRTFToModule(module);
+#endif
+
+ AUDError = PyErr_NewException("aud.error", nullptr, nullptr);
+ Py_INCREF(AUDError);
+ PyModule_AddObject(module, "error", AUDError);
+
+ // animatable property type constants
+ PY_MODULE_ADD_CONSTANT(module, AP_VOLUME);
+ PY_MODULE_ADD_CONSTANT(module, AP_PANNING);
+ PY_MODULE_ADD_CONSTANT(module, AP_PITCH);
+ PY_MODULE_ADD_CONSTANT(module, AP_LOCATION);
+ PY_MODULE_ADD_CONSTANT(module, AP_ORIENTATION);
+ // channels constants
+ PY_MODULE_ADD_CONSTANT(module, CHANNELS_INVALID);
+ PY_MODULE_ADD_CONSTANT(module, CHANNELS_MONO);
+ PY_MODULE_ADD_CONSTANT(module, CHANNELS_STEREO);
+ PY_MODULE_ADD_CONSTANT(module, CHANNELS_STEREO_LFE);
+ PY_MODULE_ADD_CONSTANT(module, CHANNELS_SURROUND4);
+ PY_MODULE_ADD_CONSTANT(module, CHANNELS_SURROUND5);
+ PY_MODULE_ADD_CONSTANT(module, CHANNELS_SURROUND51);
+ PY_MODULE_ADD_CONSTANT(module, CHANNELS_SURROUND61);
+ PY_MODULE_ADD_CONSTANT(module, CHANNELS_SURROUND71);
+ // codec constants
+ PY_MODULE_ADD_CONSTANT(module, CODEC_INVALID);
+ PY_MODULE_ADD_CONSTANT(module, CODEC_AAC);
+ PY_MODULE_ADD_CONSTANT(module, CODEC_AC3);
+ PY_MODULE_ADD_CONSTANT(module, CODEC_FLAC);
+ PY_MODULE_ADD_CONSTANT(module, CODEC_MP2);
+ PY_MODULE_ADD_CONSTANT(module, CODEC_MP3);
+ PY_MODULE_ADD_CONSTANT(module, CODEC_PCM);
+ PY_MODULE_ADD_CONSTANT(module, CODEC_VORBIS);
+ PY_MODULE_ADD_CONSTANT(module, CODEC_OPUS);
+ // container constants
+ PY_MODULE_ADD_CONSTANT(module, CONTAINER_INVALID);
+ PY_MODULE_ADD_CONSTANT(module, CONTAINER_AC3);
+ PY_MODULE_ADD_CONSTANT(module, CONTAINER_FLAC);
+ PY_MODULE_ADD_CONSTANT(module, CONTAINER_MATROSKA);
+ PY_MODULE_ADD_CONSTANT(module, CONTAINER_MP2);
+ PY_MODULE_ADD_CONSTANT(module, CONTAINER_MP3);
+ PY_MODULE_ADD_CONSTANT(module, CONTAINER_OGG);
+ PY_MODULE_ADD_CONSTANT(module, CONTAINER_WAV);
+ // distance model constants
+ PY_MODULE_ADD_CONSTANT(module, DISTANCE_MODEL_EXPONENT);
+ PY_MODULE_ADD_CONSTANT(module, DISTANCE_MODEL_EXPONENT_CLAMPED);
+ PY_MODULE_ADD_CONSTANT(module, DISTANCE_MODEL_INVERSE);
+ PY_MODULE_ADD_CONSTANT(module, DISTANCE_MODEL_INVERSE_CLAMPED);
+ PY_MODULE_ADD_CONSTANT(module, DISTANCE_MODEL_LINEAR);
+ PY_MODULE_ADD_CONSTANT(module, DISTANCE_MODEL_LINEAR_CLAMPED);
+ PY_MODULE_ADD_CONSTANT(module, DISTANCE_MODEL_INVALID);
+ // format constants
+ PY_MODULE_ADD_CONSTANT(module, FORMAT_INVALID);
+ PY_MODULE_ADD_CONSTANT(module, FORMAT_FLOAT32);
+ PY_MODULE_ADD_CONSTANT(module, FORMAT_FLOAT64);
+ PY_MODULE_ADD_CONSTANT(module, FORMAT_INVALID);
+ PY_MODULE_ADD_CONSTANT(module, FORMAT_S16);
+ PY_MODULE_ADD_CONSTANT(module, FORMAT_S24);
+ PY_MODULE_ADD_CONSTANT(module, FORMAT_S32);
+ PY_MODULE_ADD_CONSTANT(module, FORMAT_U8);
+ // rate constants
+ PY_MODULE_ADD_CONSTANT(module, RATE_INVALID);
+ PY_MODULE_ADD_CONSTANT(module, RATE_8000);
+ PY_MODULE_ADD_CONSTANT(module, RATE_16000);
+ PY_MODULE_ADD_CONSTANT(module, RATE_11025);
+ PY_MODULE_ADD_CONSTANT(module, RATE_22050);
+ PY_MODULE_ADD_CONSTANT(module, RATE_32000);
+ PY_MODULE_ADD_CONSTANT(module, RATE_44100);
+ PY_MODULE_ADD_CONSTANT(module, RATE_48000);
+ PY_MODULE_ADD_CONSTANT(module, RATE_88200);
+ PY_MODULE_ADD_CONSTANT(module, RATE_96000);
+ PY_MODULE_ADD_CONSTANT(module, RATE_192000);
+ // status constants
+ PY_MODULE_ADD_CONSTANT(module, STATUS_INVALID);
+ PY_MODULE_ADD_CONSTANT(module, STATUS_PAUSED);
+ PY_MODULE_ADD_CONSTANT(module, STATUS_PLAYING);
+ PY_MODULE_ADD_CONSTANT(module, STATUS_STOPPED);
+
+ return module;
+}
+
+AUD_API PyObject* AUD_getPythonSound(void* sound)
+{
+ if(sound)
+ {
+ Sound* object = (Sound*) Sound_empty();
+ if(object)
+ {
+ object->sound = new std::shared_ptr<ISound>(*reinterpret_cast<std::shared_ptr<ISound>*>(sound));
+ return (PyObject *) object;
+ }
+ }
+
+ return nullptr;
+}
+
+AUD_API void* AUD_getSoundFromPython(PyObject* object)
+{
+ Sound* sound = checkSound(object);
+
+ if(!sound)
+ return nullptr;
+
+ return new std::shared_ptr<ISound>(*reinterpret_cast<std::shared_ptr<ISound>*>(sound->sound));
+}
diff --git a/extern/audaspace/bindings/python/PyAPI.h b/extern/audaspace/bindings/python/PyAPI.h
new file mode 100644
index 00000000000..a413b4813d6
--- /dev/null
+++ b/extern/audaspace/bindings/python/PyAPI.h
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+#include <Python.h>
+#include "Audaspace.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+PyMODINIT_FUNC
+PyInit_aud();
+
+/**
+ * Retrieves the python factory of a sound.
+ * \param sound The sound factory.
+ * \return The python factory.
+ */
+extern AUD_API PyObject* AUD_getPythonSound(void* sound);
+
+/**
+ * Retrieves the sound factory of a python factory.
+ * \param sound The python factory.
+ * \return The sound factory.
+ */
+extern AUD_API void* AUD_getSoundFromPython(PyObject* object);
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/extern/audaspace/bindings/python/PyDevice.cpp b/extern/audaspace/bindings/python/PyDevice.cpp
new file mode 100644
index 00000000000..a6beef57d83
--- /dev/null
+++ b/extern/audaspace/bindings/python/PyDevice.cpp
@@ -0,0 +1,785 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "PyDevice.h"
+
+#include "PySound.h"
+#include "PyHandle.h"
+
+#include "Exception.h"
+#include "devices/IDevice.h"
+#include "devices/I3DDevice.h"
+#include "devices/DeviceManager.h"
+#include "devices/IDeviceFactory.h"
+
+#include <structmember.h>
+
+using namespace aud;
+
+extern PyObject* AUDError;
+static const char* device_not_3d_error = "Device is not a 3D device!";
+
+// ====================================================================
+
+static void
+Device_dealloc(Device* self)
+{
+ if(self->device)
+ delete reinterpret_cast<std::shared_ptr<IDevice>*>(self->device);
+ Py_TYPE(self)->tp_free((PyObject *)self);
+}
+
+static PyObject *
+Device_new(PyTypeObject* type, PyObject* args, PyObject* kwds)
+{
+ Device* self;
+
+ static const char* kwlist[] = {"type", "rate", "channels", "format", "buffer_size", "name", nullptr};
+ const char* device = nullptr;
+ double rate = RATE_48000;
+ int channels = CHANNELS_STEREO;
+ int format = FORMAT_FLOAT32;
+ int buffersize = AUD_DEFAULT_BUFFER_SIZE;
+ const char* name = "";
+
+ if(!PyArg_ParseTupleAndKeywords(args, kwds, "|sdiiis:Device", const_cast<char**>(kwlist),
+ &device, &rate, &channels, &format, &buffersize, &name))
+ return nullptr;
+
+ if(buffersize < 128)
+ {
+ PyErr_SetString(PyExc_ValueError, "buffer_size must be at least 128!");
+ return nullptr;
+ }
+
+ self = (Device*)type->tp_alloc(type, 0);
+
+ if(self != nullptr)
+ {
+ DeviceSpecs specs;
+ specs.channels = (Channels)channels;
+ specs.format = (SampleFormat)format;
+ specs.rate = (SampleRate)rate;
+
+ self->device = nullptr;
+
+ try
+ {
+ if(!device)
+ {
+ auto dev = DeviceManager::getDevice();
+ if(!dev)
+ {
+ DeviceManager::openDefaultDevice();
+ dev = DeviceManager::getDevice();
+ }
+ self->device = new std::shared_ptr<IDevice>(dev);
+ }
+ else
+ {
+ std::shared_ptr<IDeviceFactory> factory;
+ if(!*device)
+ factory = DeviceManager::getDefaultDeviceFactory();
+ else
+ factory = DeviceManager::getDeviceFactory(device);
+
+ if(factory)
+ {
+ factory->setName(name);
+ factory->setSpecs(specs);
+ factory->setBufferSize(buffersize);
+ self->device = new std::shared_ptr<IDevice>(factory->openDevice());
+ }
+ }
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(self);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+
+ if(!self->device)
+ {
+ Py_DECREF(self);
+ PyErr_SetString(AUDError, "Unsupported device type!");
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)self;
+}
+
+PyDoc_STRVAR(M_aud_Device_lock_doc,
+ "lock()\n\n"
+ "Locks the device so that it's guaranteed, that no samples are "
+ "read from the streams until :meth:`unlock` is called.\n"
+ "This is useful if you want to do start/stop/pause/resume some "
+ "sounds at the same time.\n\n"
+ ".. note:: The device has to be unlocked as often as locked to be "
+ "able to continue playback.\n\n"
+ ".. warning:: Make sure the time between locking and unlocking is "
+ "as short as possible to avoid clicks.");
+
+static PyObject *
+Device_lock(Device* self)
+{
+ try
+ {
+ (*reinterpret_cast<std::shared_ptr<IDevice>*>(self->device))->lock();
+ Py_RETURN_NONE;
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+PyDoc_STRVAR(M_aud_Device_play_doc,
+ "play(sound, keep=False)\n\n"
+ "Plays a sound.\n\n"
+ ":arg sound: The sound to play.\n"
+ ":type sound: :class:`Sound`\n"
+ ":arg keep: See :attr:`Handle.keep`.\n"
+ ":type keep: bool\n"
+ ":return: The playback handle with which playback can be "
+ "controlled with.\n"
+ ":rtype: :class:`Handle`");
+
+static PyObject *
+Device_play(Device* self, PyObject* args, PyObject* kwds)
+{
+ PyObject* object;
+ PyObject* keepo = nullptr;
+
+ bool keep = false;
+
+ static const char* kwlist[] = {"sound", "keep", nullptr};
+
+ if(!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:play", const_cast<char**>(kwlist), &object, &keepo))
+ return nullptr;
+
+ Sound* sound = checkSound(object);
+
+ if(!sound)
+ return nullptr;
+
+ if(keepo != nullptr)
+ {
+ if(!PyBool_Check(keepo))
+ {
+ PyErr_SetString(PyExc_TypeError, "keep is not a boolean!");
+ return nullptr;
+ }
+
+ keep = keepo == Py_True;
+ }
+
+ Handle* handle;
+
+ handle = (Handle*)Handle_empty();
+ if(handle != nullptr)
+ {
+ try
+ {
+ handle->handle = new std::shared_ptr<IHandle>((*reinterpret_cast<std::shared_ptr<IDevice>*>(self->device))->play(*reinterpret_cast<std::shared_ptr<ISound>*>(sound->sound), keep));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(handle);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)handle;
+}
+
+PyDoc_STRVAR(M_aud_Device_stopAll_doc,
+ "stopAll()\n\n"
+ "Stops all playing and paused sounds.");
+
+static PyObject *
+Device_stopAll(Device* self)
+{
+ try
+ {
+ (*reinterpret_cast<std::shared_ptr<IDevice>*>(self->device))->stopAll();
+ Py_RETURN_NONE;
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+PyDoc_STRVAR(M_aud_Device_unlock_doc,
+ "unlock()\n\n"
+ "Unlocks the device after a lock call, see :meth:`lock` for "
+ "details.");
+
+static PyObject *
+Device_unlock(Device* self)
+{
+ try
+ {
+ (*reinterpret_cast<std::shared_ptr<IDevice>*>(self->device))->unlock();
+ Py_RETURN_NONE;
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static PyMethodDef Device_methods[] = {
+ {"lock", (PyCFunction)Device_lock, METH_NOARGS,
+ M_aud_Device_lock_doc
+ },
+ {"play", (PyCFunction)Device_play, METH_VARARGS | METH_KEYWORDS,
+ M_aud_Device_play_doc
+ },
+ {"stopAll", (PyCFunction)Device_stopAll, METH_NOARGS,
+ M_aud_Device_stopAll_doc
+ },
+ {"unlock", (PyCFunction)Device_unlock, METH_NOARGS,
+ M_aud_Device_unlock_doc
+ },
+ {nullptr} /* Sentinel */
+};
+
+PyDoc_STRVAR(M_aud_Device_channels_doc,
+ "The channel count of the device.");
+
+static PyObject *
+Device_get_channels(Device* self, void* nothing)
+{
+ try
+ {
+ DeviceSpecs specs = (*reinterpret_cast<std::shared_ptr<IDevice>*>(self->device))->getSpecs();
+ return Py_BuildValue("i", specs.channels);
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+PyDoc_STRVAR(M_aud_Device_distance_model_doc,
+ "The distance model of the device.\n\n"
+ ".. seealso:: http://connect.creativelabs.com/openal/Documentation/OpenAL%201.1%20Specification.htm#_Toc199835864");
+
+static PyObject *
+Device_get_distance_model(Device* self, void* nothing)
+{
+ try
+ {
+ I3DDevice* device = dynamic_cast<I3DDevice*>(reinterpret_cast<std::shared_ptr<IDevice>*>(self->device)->get());
+ if(device)
+ {
+ return Py_BuildValue("i", int(device->getDistanceModel()));
+ }
+ else
+ {
+ PyErr_SetString(AUDError, device_not_3d_error);
+ return nullptr;
+ }
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static int
+Device_set_distance_model(Device* self, PyObject* args, void* nothing)
+{
+ int model;
+
+ if(!PyArg_Parse(args, "i:distance_model", &model))
+ return -1;
+
+ try
+ {
+ I3DDevice* device = dynamic_cast<I3DDevice*>(reinterpret_cast<std::shared_ptr<IDevice>*>(self->device)->get());
+ if(device)
+ {
+ device->setDistanceModel(DistanceModel(model));
+ return 0;
+ }
+ else
+ PyErr_SetString(AUDError, device_not_3d_error);
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+PyDoc_STRVAR(M_aud_Device_doppler_factor_doc,
+ "The doppler factor of the device.\n"
+ "This factor is a scaling factor for the velocity vectors in "
+ "doppler calculation. So a value bigger than 1 will exaggerate "
+ "the effect as it raises the velocity.");
+
+static PyObject *
+Device_get_doppler_factor(Device* self, void* nothing)
+{
+ try
+ {
+ I3DDevice* device = dynamic_cast<I3DDevice*>(reinterpret_cast<std::shared_ptr<IDevice>*>(self->device)->get());
+ if(device)
+ {
+ return Py_BuildValue("f", device->getDopplerFactor());
+ }
+ else
+ {
+ PyErr_SetString(AUDError, device_not_3d_error);
+ return nullptr;
+ }
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static int
+Device_set_doppler_factor(Device* self, PyObject* args, void* nothing)
+{
+ float factor;
+
+ if(!PyArg_Parse(args, "f:doppler_factor", &factor))
+ return -1;
+
+ try
+ {
+ I3DDevice* device = dynamic_cast<I3DDevice*>(reinterpret_cast<std::shared_ptr<IDevice>*>(self->device)->get());
+ if(device)
+ {
+ device->setDopplerFactor(factor);
+ return 0;
+ }
+ else
+ PyErr_SetString(AUDError, device_not_3d_error);
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+PyDoc_STRVAR(M_aud_Device_format_doc,
+ "The native sample format of the device.");
+
+static PyObject *
+Device_get_format(Device* self, void* nothing)
+{
+ try
+ {
+ DeviceSpecs specs = (*reinterpret_cast<std::shared_ptr<IDevice>*>(self->device))->getSpecs();
+ return Py_BuildValue("i", specs.format);
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+PyDoc_STRVAR(M_aud_Device_listener_location_doc,
+ "The listeners's location in 3D space, a 3D tuple of floats.");
+
+static PyObject *
+Device_get_listener_location(Device* self, void* nothing)
+{
+ try
+ {
+ I3DDevice* device = dynamic_cast<I3DDevice*>(reinterpret_cast<std::shared_ptr<IDevice>*>(self->device)->get());
+ if(device)
+ {
+ Vector3 v = device->getListenerLocation();
+ return Py_BuildValue("(fff)", v.x(), v.y(), v.z());
+ }
+ else
+ {
+ PyErr_SetString(AUDError, device_not_3d_error);
+ }
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return nullptr;
+}
+
+static int
+Device_set_listener_location(Device* self, PyObject* args, void* nothing)
+{
+ float x, y, z;
+
+ if(!PyArg_Parse(args, "(fff):listener_location", &x, &y, &z))
+ return -1;
+
+ try
+ {
+ I3DDevice* device = dynamic_cast<I3DDevice*>(reinterpret_cast<std::shared_ptr<IDevice>*>(self->device)->get());
+ if(device)
+ {
+ Vector3 location(x, y, z);
+ device->setListenerLocation(location);
+ return 0;
+ }
+ else
+ PyErr_SetString(AUDError, device_not_3d_error);
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+PyDoc_STRVAR(M_aud_Device_listener_orientation_doc,
+ "The listener's orientation in 3D space as quaternion, a 4 float tuple.");
+
+static PyObject *
+Device_get_listener_orientation(Device* self, void* nothing)
+{
+ try
+ {
+ I3DDevice* device = dynamic_cast<I3DDevice*>(reinterpret_cast<std::shared_ptr<IDevice>*>(self->device)->get());
+ if(device)
+ {
+ Quaternion o = device->getListenerOrientation();
+ return Py_BuildValue("(ffff)", o.w(), o.x(), o.y(), o.z());
+ }
+ else
+ {
+ PyErr_SetString(AUDError, device_not_3d_error);
+ }
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return nullptr;
+}
+
+static int
+Device_set_listener_orientation(Device* self, PyObject* args, void* nothing)
+{
+ float w, x, y, z;
+
+ if(!PyArg_Parse(args, "(ffff):listener_orientation", &w, &x, &y, &z))
+ return -1;
+
+ try
+ {
+ I3DDevice* device = dynamic_cast<I3DDevice*>(reinterpret_cast<std::shared_ptr<IDevice>*>(self->device)->get());
+ if(device)
+ {
+ Quaternion orientation(w, x, y, z);
+ device->setListenerOrientation(orientation);
+ return 0;
+ }
+ else
+ PyErr_SetString(AUDError, device_not_3d_error);
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+PyDoc_STRVAR(M_aud_Device_listener_velocity_doc,
+ "The listener's velocity in 3D space, a 3D tuple of floats.");
+
+static PyObject *
+Device_get_listener_velocity(Device* self, void* nothing)
+{
+ try
+ {
+ I3DDevice* device = dynamic_cast<I3DDevice*>(reinterpret_cast<std::shared_ptr<IDevice>*>(self->device)->get());
+ if(device)
+ {
+ Vector3 v = device->getListenerVelocity();
+ return Py_BuildValue("(fff)", v.x(), v.y(), v.z());
+ }
+ else
+ {
+ PyErr_SetString(AUDError, device_not_3d_error);
+ }
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return nullptr;
+}
+
+static int
+Device_set_listener_velocity(Device* self, PyObject* args, void* nothing)
+{
+ float x, y, z;
+
+ if(!PyArg_Parse(args, "(fff):listener_velocity", &x, &y, &z))
+ return -1;
+
+ try
+ {
+ I3DDevice* device = dynamic_cast<I3DDevice*>(reinterpret_cast<std::shared_ptr<IDevice>*>(self->device)->get());
+ if(device)
+ {
+ Vector3 velocity(x, y, z);
+ device->setListenerVelocity(velocity);
+ return 0;
+ }
+ else
+ PyErr_SetString(AUDError, device_not_3d_error);
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+PyDoc_STRVAR(M_aud_Device_rate_doc,
+ "The sampling rate of the device in Hz.");
+
+static PyObject *
+Device_get_rate(Device* self, void* nothing)
+{
+ try
+ {
+ DeviceSpecs specs = (*reinterpret_cast<std::shared_ptr<IDevice>*>(self->device))->getSpecs();
+ return Py_BuildValue("d", specs.rate);
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+PyDoc_STRVAR(M_aud_Device_speed_of_sound_doc,
+ "The speed of sound of the device.\n"
+ "The speed of sound in air is typically 343.3 m/s.");
+
+static PyObject *
+Device_get_speed_of_sound(Device* self, void* nothing)
+{
+ try
+ {
+ I3DDevice* device = dynamic_cast<I3DDevice*>(reinterpret_cast<std::shared_ptr<IDevice>*>(self->device)->get());
+ if(device)
+ {
+ return Py_BuildValue("f", device->getSpeedOfSound());
+ }
+ else
+ {
+ PyErr_SetString(AUDError, device_not_3d_error);
+ return nullptr;
+ }
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static int
+Device_set_speed_of_sound(Device* self, PyObject* args, void* nothing)
+{
+ float speed;
+
+ if(!PyArg_Parse(args, "f:speed_of_sound", &speed))
+ return -1;
+
+ try
+ {
+ I3DDevice* device = dynamic_cast<I3DDevice*>(reinterpret_cast<std::shared_ptr<IDevice>*>(self->device)->get());
+ if(device)
+ {
+ device->setSpeedOfSound(speed);
+ return 0;
+ }
+ else
+ PyErr_SetString(AUDError, device_not_3d_error);
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+PyDoc_STRVAR(M_aud_Device_volume_doc,
+ "The overall volume of the device.");
+
+static PyObject *
+Device_get_volume(Device* self, void* nothing)
+{
+ try
+ {
+ return Py_BuildValue("f", (*reinterpret_cast<std::shared_ptr<IDevice>*>(self->device))->getVolume());
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static int
+Device_set_volume(Device* self, PyObject* args, void* nothing)
+{
+ float volume;
+
+ if(!PyArg_Parse(args, "f:volume", &volume))
+ return -1;
+
+ try
+ {
+ (*reinterpret_cast<std::shared_ptr<IDevice>*>(self->device))->setVolume(volume);
+ return 0;
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return -1;
+ }
+}
+
+static PyGetSetDef Device_properties[] = {
+ {(char*)"channels", (getter)Device_get_channels, nullptr,
+ M_aud_Device_channels_doc, nullptr },
+ {(char*)"distance_model", (getter)Device_get_distance_model, (setter)Device_set_distance_model,
+ M_aud_Device_distance_model_doc, nullptr },
+ {(char*)"doppler_factor", (getter)Device_get_doppler_factor, (setter)Device_set_doppler_factor,
+ M_aud_Device_doppler_factor_doc, nullptr },
+ {(char*)"format", (getter)Device_get_format, nullptr,
+ M_aud_Device_format_doc, nullptr },
+ {(char*)"listener_location", (getter)Device_get_listener_location, (setter)Device_set_listener_location,
+ M_aud_Device_listener_location_doc, nullptr },
+ {(char*)"listener_orientation", (getter)Device_get_listener_orientation, (setter)Device_set_listener_orientation,
+ M_aud_Device_listener_orientation_doc, nullptr },
+ {(char*)"listener_velocity", (getter)Device_get_listener_velocity, (setter)Device_set_listener_velocity,
+ M_aud_Device_listener_velocity_doc, nullptr },
+ {(char*)"rate", (getter)Device_get_rate, nullptr,
+ M_aud_Device_rate_doc, nullptr },
+ {(char*)"speed_of_sound", (getter)Device_get_speed_of_sound, (setter)Device_set_speed_of_sound,
+ M_aud_Device_speed_of_sound_doc, nullptr },
+ {(char*)"volume", (getter)Device_get_volume, (setter)Device_set_volume,
+ M_aud_Device_volume_doc, nullptr },
+ {nullptr} /* Sentinel */
+};
+
+PyDoc_STRVAR(M_aud_Device_doc,
+ "Device objects represent an audio output backend like OpenAL or "
+ "SDL, but might also represent a file output or RAM buffer "
+ "output.");
+
+static PyTypeObject DeviceType = {
+ PyVarObject_HEAD_INIT(nullptr, 0)
+ "aud.Device", /* tp_name */
+ sizeof(Device), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ (destructor)Device_dealloc,/* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_reserved */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ 0, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT, /* tp_flags */
+ M_aud_Device_doc, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ Device_methods, /* tp_methods */
+ 0, /* tp_members */
+ Device_properties, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ Device_new, /* tp_new */
+};
+
+AUD_API PyObject* Device_empty()
+{
+ return DeviceType.tp_alloc(&DeviceType, 0);
+}
+
+
+AUD_API Device* checkDevice(PyObject* device)
+{
+ if(!PyObject_TypeCheck(device, &DeviceType))
+ {
+ PyErr_SetString(PyExc_TypeError, "Object is not of type Device!");
+ return nullptr;
+ }
+
+ return (Device*)device;
+}
+
+
+bool initializeDevice()
+{
+ return PyType_Ready(&DeviceType) >= 0;
+}
+
+
+void addDeviceToModule(PyObject* module)
+{
+ Py_INCREF(&DeviceType);
+ PyModule_AddObject(module, "Device", (PyObject *)&DeviceType);
+}
diff --git a/extern/audaspace/bindings/python/PyDevice.h b/extern/audaspace/bindings/python/PyDevice.h
new file mode 100644
index 00000000000..610b5b4cd23
--- /dev/null
+++ b/extern/audaspace/bindings/python/PyDevice.h
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+#include <Python.h>
+#include "Audaspace.h"
+
+typedef void Reference_IDevice;
+
+typedef struct {
+ PyObject_HEAD
+ Reference_IDevice* device;
+} Device;
+
+extern AUD_API PyObject* Device_empty();
+extern AUD_API Device* checkDevice(PyObject* device);
+
+bool initializeDevice();
+void addDeviceToModule(PyObject* module);
diff --git a/extern/audaspace/bindings/python/PyDynamicMusic.cpp b/extern/audaspace/bindings/python/PyDynamicMusic.cpp
new file mode 100644
index 00000000000..d49f73737c2
--- /dev/null
+++ b/extern/audaspace/bindings/python/PyDynamicMusic.cpp
@@ -0,0 +1,467 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "PyDynamicMusic.h"
+#include "PySound.h"
+#include "PyHandle.h"
+#include "PyDevice.h"
+
+#include "Exception.h"
+#include "fx/DynamicMusic.h"
+
+extern PyObject* AUDError;
+
+static PyObject *
+DynamicMusic_new(PyTypeObject* type, PyObject* args, PyObject* kwds)
+{
+ DynamicMusicP* self = (DynamicMusicP*)type->tp_alloc(type, 0);
+
+ if(self != nullptr)
+ {
+ PyObject* object;
+ if(!PyArg_ParseTuple(args, "O:device", &object))
+ return nullptr;
+ Device* device = checkDevice(object);
+
+ try
+ {
+ self->dynamicMusic = new std::shared_ptr<aud::DynamicMusic>(new aud::DynamicMusic(*reinterpret_cast<std::shared_ptr<aud::IDevice>*>(device->device)));
+ }
+ catch(aud::Exception& e)
+ {
+ Py_DECREF(self);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)self;
+}
+
+static void
+DynamicMusic_dealloc(DynamicMusicP* self)
+{
+ if(self->dynamicMusic)
+ delete reinterpret_cast<std::shared_ptr<aud::DynamicMusic>*>(self->dynamicMusic);
+ Py_TYPE(self)->tp_free((PyObject *)self);
+}
+
+PyDoc_STRVAR(M_aud_DynamicMusic_addScene_doc,
+ "addScene(scene)\n\n"
+ "Adds a new scene.\n\n"
+ ":arg scene: The scene sound.\n"
+ ":type scene: :class:`Sound`\n"
+ ":return: The new scene id.\n"
+ ":rtype: int");
+
+static PyObject *
+DynamicMusic_addScene(DynamicMusicP* self, PyObject* args)
+{
+ PyObject* object;
+ if(!PyArg_Parse(args, "O:sound", &object))
+ return nullptr;
+
+ Sound* sound = checkSound(object);
+ if(!sound)
+ return nullptr;
+
+ try
+ {
+ return Py_BuildValue("i", (*reinterpret_cast<std::shared_ptr<aud::DynamicMusic>*>(self->dynamicMusic))->addScene(*reinterpret_cast<std::shared_ptr<aud::ISound>*>(sound->sound)));
+ }
+ catch(aud::Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+PyDoc_STRVAR(M_aud_DynamicMusic_addTransition_doc,
+ "addTransition(ini, end, transition)\n\n"
+ "Adds a new scene.\n\n"
+ ":arg ini: the initial scene foor the transition.\n"
+ ":type ini: int\n"
+ ":arg end: The final scene for the transition.\n"
+ ":type end: int\n"
+ ":arg transition: The transition sound.\n"
+ ":type transition: :class:`Sound`\n"
+ ":return: false if the ini or end scenes don't exist, true othrwise.\n"
+ ":rtype: bool");
+
+static PyObject *
+DynamicMusic_addTransition(DynamicMusicP* self, PyObject* args)
+{
+ PyObject* object;
+ int ini, end;
+ if(!PyArg_ParseTuple(args, "iiO:sound", &ini, &end, &object))
+ return nullptr;
+ Sound* sound = checkSound(object);
+ if(!sound)
+ return nullptr;
+
+ try
+ {
+ (*reinterpret_cast<std::shared_ptr<aud::DynamicMusic>*>(self->dynamicMusic))->addTransition(ini, end, *reinterpret_cast<std::shared_ptr<aud::ISound>*>(sound->sound));
+ Py_RETURN_NONE;
+ }
+ catch(aud::Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+PyDoc_STRVAR(M_aud_DynamicMusic_resume_doc,
+ "resume()\n\n"
+ "Resumes playback of the scene.\n\n"
+ ":return: Whether the action succeeded.\n"
+ ":rtype: bool");
+
+static PyObject *
+DynamicMusic_resume(DynamicMusicP* self)
+{
+ try
+ {
+ return PyBool_FromLong((long)(*reinterpret_cast<std::shared_ptr<aud::DynamicMusic>*>(self->dynamicMusic))->resume());
+ }
+ catch(aud::Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+PyDoc_STRVAR(M_aud_DynamicMusic_pause_doc,
+ "pause()\n\n"
+ "Pauses playback of the scene.\n\n"
+ ":return: Whether the action succeeded.\n"
+ ":rtype: bool");
+
+static PyObject *
+DynamicMusic_pause(DynamicMusicP* self)
+{
+ try
+ {
+ return PyBool_FromLong((long)(*reinterpret_cast<std::shared_ptr<aud::DynamicMusic>*>(self->dynamicMusic))->pause());
+ }
+ catch(aud::Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+PyDoc_STRVAR(M_aud_DynamicMusic_stop_doc,
+ "stop()\n\n"
+ "Stops playback of the scene.\n\n"
+ ":return: Whether the action succeeded.\n"
+ ":rtype: bool\n\n");
+
+static PyObject *
+DynamicMusic_stop(DynamicMusicP* self)
+{
+ try
+ {
+ return PyBool_FromLong((long)(*reinterpret_cast<std::shared_ptr<aud::DynamicMusic>*>(self->dynamicMusic))->stop());
+ }
+ catch(aud::Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static PyMethodDef DynamicMusic_methods[] = {
+ { "addScene", (PyCFunction)DynamicMusic_addScene, METH_O,
+ M_aud_DynamicMusic_addScene_doc
+ },
+ { "addTransition", (PyCFunction)DynamicMusic_addTransition, METH_VARARGS,
+ M_aud_DynamicMusic_addTransition_doc
+ },
+ { "resume", (PyCFunction)DynamicMusic_resume, METH_NOARGS,
+ M_aud_DynamicMusic_resume_doc
+ },
+ { "pause", (PyCFunction)DynamicMusic_pause, METH_NOARGS,
+ M_aud_DynamicMusic_pause_doc
+ },
+ { "stop", (PyCFunction)DynamicMusic_stop, METH_NOARGS,
+ M_aud_DynamicMusic_stop_doc
+ },
+ { nullptr } /* Sentinel */
+};
+
+/////////////////////////////////////////////////////
+
+PyDoc_STRVAR(M_aud_DynamicMusic_status_doc,
+ "Whether the scene is playing, paused or stopped (=invalid).");
+
+static PyObject *
+DynamicMusic_get_status(DynamicMusicP* self, void* nothing)
+{
+ try
+ {
+ return PyBool_FromLong((long)(*reinterpret_cast<std::shared_ptr<aud::DynamicMusic>*>(self->dynamicMusic))->getStatus());
+ }
+ catch(aud::Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+PyDoc_STRVAR(M_aud_DynamicMusic_position_doc,
+ "The playback position of the scene in seconds.");
+
+static int
+DynamicMusic_set_position(DynamicMusicP* self, PyObject* args, void* nothing)
+{
+ float position;
+
+ if(!PyArg_Parse(args, "f:position", &position))
+ return -1;
+
+ try
+ {
+ if((*reinterpret_cast<std::shared_ptr<aud::DynamicMusic>*>(self->dynamicMusic))->seek(position))
+ return 0;
+ PyErr_SetString(AUDError, "Couldn't seek the sound!");
+ }
+ catch(aud::Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+static PyObject *
+DynamicMusic_get_position(DynamicMusicP* self, void* nothing)
+{
+ try
+ {
+ return Py_BuildValue("f", (*reinterpret_cast<std::shared_ptr<aud::DynamicMusic>*>(self->dynamicMusic))->getPosition());
+ }
+ catch(aud::Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+PyDoc_STRVAR(M_aud_DynamicMusic_fadeTime_doc,
+ "The length in seconds of the crossfade transition");
+
+static int
+DynamicMusic_set_fadeTime(DynamicMusicP* self, PyObject* args, void* nothing)
+{
+ float fadeTime;
+
+ if(!PyArg_Parse(args, "f:fadeTime", &fadeTime))
+ return -1;
+
+ try
+ {
+ (*reinterpret_cast<std::shared_ptr<aud::DynamicMusic>*>(self->dynamicMusic))->setFadeTime(fadeTime);
+ return 0;
+ }
+ catch(aud::Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+static PyObject *
+DynamicMusic_get_fadeTime(DynamicMusicP* self, void* nothing)
+{
+ try
+ {
+ return Py_BuildValue("f", (*reinterpret_cast<std::shared_ptr<aud::DynamicMusic>*>(self->dynamicMusic))->getFadeTime());
+ }
+ catch(aud::Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+PyDoc_STRVAR(M_aud_DynamicMusic_scene_doc,
+ "The current scene");
+
+static int
+DynamicMusic_set_scene(DynamicMusicP* self, PyObject* args, void* nothing)
+{
+ int scene;
+
+ if(!PyArg_Parse(args, "i:scene", &scene))
+ return -1;
+
+ try
+ {
+ if((*reinterpret_cast<std::shared_ptr<aud::DynamicMusic>*>(self->dynamicMusic))->changeScene(scene))
+ return 0;
+ PyErr_SetString(AUDError, "Couldn't change the scene!");
+ }
+ catch(aud::Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+static PyObject *
+DynamicMusic_get_scene(DynamicMusicP* self, void* nothing)
+{
+ try
+ {
+ return Py_BuildValue("i", (*reinterpret_cast<std::shared_ptr<aud::DynamicMusic>*>(self->dynamicMusic))->getScene());
+ }
+ catch(aud::Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+PyDoc_STRVAR(M_aud_DynamicMusic_volume_doc,
+ "The volume of the scene.");
+
+static int
+DynamicMusic_set_volume(DynamicMusicP* self, PyObject* args, void* nothing)
+{
+ float volume;
+
+ if(!PyArg_Parse(args, "f:volume", &volume))
+ return -1;
+
+ try
+ {
+ if((*reinterpret_cast<std::shared_ptr<aud::DynamicMusic>*>(self->dynamicMusic))->setVolume(volume))
+ return 0;
+ PyErr_SetString(AUDError, "Couldn't change the volume!");
+ }
+ catch(aud::Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+static PyObject *
+DynamicMusic_get_volume(DynamicMusicP* self, void* nothing)
+{
+ try
+ {
+ return Py_BuildValue("f", (*reinterpret_cast<std::shared_ptr<aud::DynamicMusic>*>(self->dynamicMusic))->getVolume());
+ }
+ catch(aud::Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static PyGetSetDef DynamicMusic_properties[] = {
+ { (char*)"status", (getter)DynamicMusic_get_status, nullptr,
+ M_aud_DynamicMusic_status_doc, nullptr },
+ { (char*)"position", (getter)DynamicMusic_get_position, (setter)DynamicMusic_set_position,
+ M_aud_DynamicMusic_position_doc, nullptr },
+ { (char*)"fadeTime", (getter)DynamicMusic_get_fadeTime, (setter)DynamicMusic_set_fadeTime,
+ M_aud_DynamicMusic_fadeTime_doc, nullptr },
+ { (char*)"scene", (getter)DynamicMusic_get_scene, (setter)DynamicMusic_set_scene,
+ M_aud_DynamicMusic_scene_doc, nullptr },
+ { (char*)"volume", (getter)DynamicMusic_get_volume, (setter)DynamicMusic_set_volume,
+ M_aud_DynamicMusic_volume_doc, nullptr },
+ { nullptr } /* Sentinel */
+};
+
+PyDoc_STRVAR(M_aud_DynamicMusic_doc,
+ "The DynamicMusic object allows to play music depending on a current scene, scene changes are managed by the class, with the possibility of custom transitions.\n"
+ "The default transition is a crossfade effect, and the default scene is silent and has id 0");
+
+PyTypeObject DynamicMusicType = {
+ PyVarObject_HEAD_INIT(nullptr, 0)
+ "aud.DynamicMusic", /* tp_name */
+ sizeof(DynamicMusicP), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ (destructor)DynamicMusic_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_reserved */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ 0, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT, /* tp_flags */
+ M_aud_DynamicMusic_doc, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ DynamicMusic_methods, /* tp_methods */
+ 0, /* tp_members */
+ DynamicMusic_properties, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ DynamicMusic_new, /* tp_new */
+};
+
+AUD_API PyObject* DynamicMusic_empty()
+{
+ return DynamicMusicType.tp_alloc(&DynamicMusicType, 0);
+}
+
+
+AUD_API DynamicMusicP* checkDynamicMusic(PyObject* dynamicMusic)
+{
+ if(!PyObject_TypeCheck(dynamicMusic, &DynamicMusicType))
+ {
+ PyErr_SetString(PyExc_TypeError, "Object is not of type DynamicMusic!");
+ return nullptr;
+ }
+
+ return (DynamicMusicP*)dynamicMusic;
+}
+
+
+bool initializeDynamicMusic()
+{
+ return PyType_Ready(&DynamicMusicType) >= 0;
+}
+
+
+void addDynamicMusicToModule(PyObject* module)
+{
+ Py_INCREF(&DynamicMusicType);
+ PyModule_AddObject(module, "DynamicMusic", (PyObject *)&DynamicMusicType);
+} \ No newline at end of file
diff --git a/extern/audaspace/bindings/python/PyDynamicMusic.h b/extern/audaspace/bindings/python/PyDynamicMusic.h
new file mode 100644
index 00000000000..f19de2d8c75
--- /dev/null
+++ b/extern/audaspace/bindings/python/PyDynamicMusic.h
@@ -0,0 +1,33 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#pragma once
+
+#include <Python.h>
+#include "Audaspace.h"
+
+typedef void Reference_DynamicMusic;
+
+typedef struct {
+ PyObject_HEAD
+ Reference_DynamicMusic* dynamicMusic;
+} DynamicMusicP;
+
+extern AUD_API PyObject* DynamicMusic_empty();
+extern AUD_API DynamicMusicP* checkDynamicMusic(PyObject* dynamicMusic);
+
+bool initializeDynamicMusic();
+void addDynamicMusicToModule(PyObject* module); \ No newline at end of file
diff --git a/extern/audaspace/bindings/python/PyHRTF.cpp b/extern/audaspace/bindings/python/PyHRTF.cpp
new file mode 100644
index 00000000000..2a5b6be624f
--- /dev/null
+++ b/extern/audaspace/bindings/python/PyHRTF.cpp
@@ -0,0 +1,247 @@
+/*******************************************************************************
+* Copyright 2009-2015 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "PyHRTF.h"
+#include "PySound.h"
+
+#include "Exception.h"
+#include "fx/HRTF.h"
+#include "fx/HRTFLoader.h"
+
+extern PyObject* AUDError;
+
+static PyObject *
+HRTF_new(PyTypeObject* type, PyObject* args, PyObject* kwds)
+{
+ HRTFP* self = (HRTFP*)type->tp_alloc(type, 0);
+
+ if(self != nullptr)
+ {
+ try
+ {
+ self->hrtf = new std::shared_ptr<aud::HRTF>(new aud::HRTF());
+ }
+ catch(aud::Exception& e)
+ {
+ Py_DECREF(self);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)self;
+}
+
+static void
+HRTF_dealloc(HRTFP* self)
+{
+ if(self->hrtf)
+ delete reinterpret_cast<std::shared_ptr<aud::HRTF>*>(self->hrtf);
+ Py_TYPE(self)->tp_free((PyObject *)self);
+}
+
+PyDoc_STRVAR(M_aud_HRTF_addImpulseResponse_doc,
+ "addImpulseResponseFromSound(sound, azimuth, elevation)\n\n"
+ "Adds a new hrtf to the HRTF object\n\n"
+ ":arg sound: The sound that contains the hrtf.\n"
+ ":type sound: :class:`Sound`\n"
+ ":arg azimuth: The azimuth angle of the hrtf.\n"
+ ":type azimuth: float\n"
+ ":arg elevation: The elevation angle of the hrtf.\n"
+ ":type elevation: float\n"
+ ":return: Whether the action succeeded.\n"
+ ":rtype: bool");
+
+static PyObject *
+HRTF_addImpulseResponseFromSound(HRTFP* self, PyObject* args)
+{
+ PyObject* object;
+ float azimuth, elevation;
+
+ if(!PyArg_ParseTuple(args, "Off:hrtf", &object, &azimuth, &elevation))
+ return nullptr;
+
+ Sound* ir = checkSound(object);
+ if(!ir)
+ return nullptr;
+
+ try
+ {
+ return PyBool_FromLong((long)(*reinterpret_cast<std::shared_ptr<aud::HRTF>*>(self->hrtf))->addImpulseResponse(std::make_shared<aud::StreamBuffer>(*reinterpret_cast<std::shared_ptr<aud::ISound>*>(ir->sound)), azimuth, elevation));
+ }
+ catch(aud::Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+PyDoc_STRVAR(M_aud_HRTF_loadLeftHrtfSet_doc,
+ "loadLeftHrtfSet(extension, directory)\n\n"
+ "Loads all HRTFs from a directory.\n\n"
+ ":arg extension: The file extension of the hrtfs.\n"
+ ":type extension: string\n"
+ ":arg directory: The path to where the HRTF files are located.\n"
+ ":type extension: string\n"
+ ":return: The loaded :class:`HRTF` object.\n"
+ ":rtype: :class:`HRTF`\n\n");
+
+static PyObject *
+HRTF_loadLeftHrtfSet(PyTypeObject* type, PyObject* args)
+{
+ const char* dir = nullptr;
+ const char* ext = nullptr;
+
+ if(!PyArg_ParseTuple(args, "ss:hrtf", &ext, &dir))
+ return nullptr;
+
+ HRTFP* self;
+ self = (HRTFP*)type->tp_alloc(type, 0);
+
+ try
+ {
+ self->hrtf = new std::shared_ptr<aud::HRTF>(aud::HRTFLoader::loadLeftHRTFs(ext, dir));
+ }
+ catch(aud::Exception& e)
+ {
+ Py_DECREF(self);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ return (PyObject *)self;
+}
+
+PyDoc_STRVAR(M_aud_HRTF_loadRightHrtfSet_doc,
+ "loadLeftHrtfSet(extension, directory)\n\n"
+ "Loads all HRTFs from a directory.\n\n"
+ ":arg extension: The file extension of the hrtfs.\n"
+ ":type extension: string\n"
+ ":arg directory: The path to where the HRTF files are located.\n"
+ ":type extension: string\n"
+ ":return: The loaded :class:`HRTF` object.\n"
+ ":rtype: :class:`HRTF`\n\n");
+
+static PyObject *
+HRTF_loadRightHrtfSet(PyTypeObject* type, PyObject* args)
+{
+ const char* dir = nullptr;
+ const char* ext = nullptr;
+
+ if(!PyArg_ParseTuple(args, "ss:hrtf", &ext, &dir))
+ return nullptr;
+
+ HRTFP* self;
+ self = (HRTFP*)type->tp_alloc(type, 0);
+
+ try
+ {
+ self->hrtf = new std::shared_ptr<aud::HRTF>(aud::HRTFLoader::loadRightHRTFs(ext, dir));
+ }
+ catch(aud::Exception& e)
+ {
+ Py_DECREF(self);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ return (PyObject *)self;
+}
+
+static PyMethodDef HRTF_methods[] = {
+ { "addImpulseResponseFromSound", (PyCFunction)HRTF_addImpulseResponseFromSound, METH_VARARGS | METH_KEYWORDS,
+ M_aud_HRTF_addImpulseResponse_doc
+ },
+ { "loadLeftHrtfSet", (PyCFunction)HRTF_loadLeftHrtfSet, METH_VARARGS | METH_CLASS,
+ M_aud_HRTF_loadLeftHrtfSet_doc
+ },
+ { "loadRightHrtfSet", (PyCFunction)HRTF_loadRightHrtfSet, METH_VARARGS | METH_CLASS,
+ M_aud_HRTF_loadRightHrtfSet_doc
+ },
+ { nullptr } /* Sentinel */
+};
+
+PyDoc_STRVAR(M_aud_HRTF_doc,
+ "An HRTF object represents a set of head related transfer functions as impulse responses. It's used for binaural sound");
+
+PyTypeObject HRTFType = {
+ PyVarObject_HEAD_INIT(nullptr, 0)
+ "aud.HRTF", /* tp_name */
+ sizeof(HRTFP), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ (destructor)HRTF_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_reserved */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ 0, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT, /* tp_flags */
+ M_aud_HRTF_doc, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ HRTF_methods, /* tp_methods */
+ 0, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ HRTF_new, /* tp_new */
+};
+
+AUD_API PyObject* HRTF_empty()
+{
+ return HRTFType.tp_alloc(&HRTFType, 0);
+}
+
+
+AUD_API HRTFP* checkHRTF(PyObject* hrtf)
+{
+ if(!PyObject_TypeCheck(hrtf, &HRTFType))
+ {
+ PyErr_SetString(PyExc_TypeError, "Object is not of type HRTF!");
+ return nullptr;
+ }
+
+ return (HRTFP*)hrtf;
+}
+
+
+bool initializeHRTF()
+{
+ return PyType_Ready(&HRTFType) >= 0;
+}
+
+
+void addHRTFToModule(PyObject* module)
+{
+ Py_INCREF(&HRTFType);
+ PyModule_AddObject(module, "HRTF", (PyObject *)&HRTFType);
+}
diff --git a/extern/audaspace/bindings/python/PyHRTF.h b/extern/audaspace/bindings/python/PyHRTF.h
new file mode 100644
index 00000000000..0445069929f
--- /dev/null
+++ b/extern/audaspace/bindings/python/PyHRTF.h
@@ -0,0 +1,33 @@
+/*******************************************************************************
+* Copyright 2009-2015 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#pragma once
+
+#include <Python.h>
+#include "Audaspace.h"
+
+typedef void Reference_HRTF;
+
+typedef struct {
+ PyObject_HEAD
+ Reference_HRTF* hrtf;
+} HRTFP;
+
+extern AUD_API PyObject* HRTF_empty();
+extern AUD_API HRTFP* checkHRTF(PyObject* hrtf);
+
+bool initializeHRTF();
+void addHRTFToModule(PyObject* module); \ No newline at end of file
diff --git a/extern/audaspace/bindings/python/PyHandle.cpp b/extern/audaspace/bindings/python/PyHandle.cpp
new file mode 100644
index 00000000000..7f7a7660049
--- /dev/null
+++ b/extern/audaspace/bindings/python/PyHandle.cpp
@@ -0,0 +1,1126 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "PyHandle.h"
+
+#include "devices/IHandle.h"
+#include "devices/I3DHandle.h"
+#include "Exception.h"
+
+#include <memory>
+
+#include <structmember.h>
+
+using namespace aud;
+
+extern PyObject* AUDError;
+static const char* device_not_3d_error = "Device is not a 3D device!";
+
+static void
+Handle_dealloc(Handle* self)
+{
+ if(self->handle)
+ delete reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle);
+ Py_TYPE(self)->tp_free((PyObject *)self);
+}
+
+PyDoc_STRVAR(M_aud_Handle_pause_doc,
+ "pause()\n\n"
+ "Pauses playback.\n\n"
+ ":return: Whether the action succeeded.\n"
+ ":rtype: bool");
+
+static PyObject *
+Handle_pause(Handle* self)
+{
+ try
+ {
+ return PyBool_FromLong((long)(*reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle))->pause());
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+PyDoc_STRVAR(M_aud_Handle_resume_doc,
+ "resume()\n\n"
+ "Resumes playback.\n\n"
+ ":return: Whether the action succeeded.\n"
+ ":rtype: bool");
+
+static PyObject *
+Handle_resume(Handle* self)
+{
+ try
+ {
+ return PyBool_FromLong((long)(*reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle))->resume());
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+PyDoc_STRVAR(M_aud_Handle_stop_doc,
+ "stop()\n\n"
+ "Stops playback.\n\n"
+ ":return: Whether the action succeeded.\n"
+ ":rtype: bool\n\n"
+ ".. note:: This makes the handle invalid.");
+
+static PyObject *
+Handle_stop(Handle* self)
+{
+ try
+ {
+ return PyBool_FromLong((long)(*reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle))->stop());
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static PyMethodDef Handle_methods[] = {
+ {"pause", (PyCFunction)Handle_pause, METH_NOARGS,
+ M_aud_Handle_pause_doc
+ },
+ {"resume", (PyCFunction)Handle_resume, METH_NOARGS,
+ M_aud_Handle_resume_doc
+ },
+ {"stop", (PyCFunction)Handle_stop, METH_NOARGS,
+ M_aud_Handle_stop_doc
+ },
+ {nullptr} /* Sentinel */
+};
+
+PyDoc_STRVAR(M_aud_Handle_attenuation_doc,
+ "This factor is used for distance based attenuation of the "
+ "source.\n\n"
+ ".. seealso:: :attr:`Device.distance_model`");
+
+static PyObject *
+Handle_get_attenuation(Handle* self, void* nothing)
+{
+ try
+ {
+ I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
+ if(handle)
+ {
+ return Py_BuildValue("f", handle->getAttenuation());
+ }
+ else
+ {
+ PyErr_SetString(AUDError, device_not_3d_error);
+ return nullptr;
+ }
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static int
+Handle_set_attenuation(Handle* self, PyObject* args, void* nothing)
+{
+ float factor;
+
+ if(!PyArg_Parse(args, "f:attenuation", &factor))
+ return -1;
+
+ try
+ {
+ I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
+ if(handle)
+ {
+ if(handle->setAttenuation(factor))
+ return 0;
+ PyErr_SetString(AUDError, "Couldn't set the attenuation!");
+ }
+ else
+ PyErr_SetString(AUDError, device_not_3d_error);
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+PyDoc_STRVAR(M_aud_Handle_cone_angle_inner_doc,
+ "The opening angle of the inner cone of the source. If the cone "
+ "values of a source are set there are two (audible) cones with "
+ "the apex at the :attr:`location` of the source and with infinite "
+ "height, heading in the direction of the source's "
+ ":attr:`orientation`.\n"
+ "In the inner cone the volume is normal. Outside the outer cone "
+ "the volume will be :attr:`cone_volume_outer` and in the area "
+ "between the volume will be interpolated linearly.");
+
+static PyObject *
+Handle_get_cone_angle_inner(Handle* self, void* nothing)
+{
+ try
+ {
+ I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
+ if(handle)
+ {
+ return Py_BuildValue("f", handle->getConeAngleInner());
+ }
+ else
+ {
+ PyErr_SetString(AUDError, device_not_3d_error);
+ return nullptr;
+ }
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static int
+Handle_set_cone_angle_inner(Handle* self, PyObject* args, void* nothing)
+{
+ float angle;
+
+ if(!PyArg_Parse(args, "f:cone_angle_inner", &angle))
+ return -1;
+
+ try
+ {
+ I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
+ if(handle)
+ {
+ if(handle->setConeAngleInner(angle))
+ return 0;
+ PyErr_SetString(AUDError, "Couldn't set the cone inner angle!");
+ }
+ else
+ PyErr_SetString(AUDError, device_not_3d_error);
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+PyDoc_STRVAR(M_aud_Handle_cone_angle_outer_doc,
+ "The opening angle of the outer cone of the source.\n\n"
+ ".. seealso:: :attr:`cone_angle_inner`");
+
+static PyObject *
+Handle_get_cone_angle_outer(Handle* self, void* nothing)
+{
+ try
+ {
+ I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
+ if(handle)
+ {
+ return Py_BuildValue("f", handle->getConeAngleOuter());
+ }
+ else
+ {
+ PyErr_SetString(AUDError, device_not_3d_error);
+ return nullptr;
+ }
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static int
+Handle_set_cone_angle_outer(Handle* self, PyObject* args, void* nothing)
+{
+ float angle;
+
+ if(!PyArg_Parse(args, "f:cone_angle_outer", &angle))
+ return -1;
+
+ try
+ {
+ I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
+ if(handle)
+ {
+ if(handle->setConeAngleOuter(angle))
+ return 0;
+ PyErr_SetString(AUDError, "Couldn't set the cone outer angle!");
+ }
+ else
+ PyErr_SetString(AUDError, device_not_3d_error);
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+PyDoc_STRVAR(M_aud_Handle_cone_volume_outer_doc,
+ "The volume outside the outer cone of the source.\n\n"
+ ".. seealso:: :attr:`cone_angle_inner`");
+
+static PyObject *
+Handle_get_cone_volume_outer(Handle* self, void* nothing)
+{
+ try
+ {
+ I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
+ if(handle)
+ {
+ return Py_BuildValue("f", handle->getConeVolumeOuter());
+ }
+ else
+ {
+ PyErr_SetString(AUDError, device_not_3d_error);
+ return nullptr;
+ }
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static int
+Handle_set_cone_volume_outer(Handle* self, PyObject* args, void* nothing)
+{
+ float volume;
+
+ if(!PyArg_Parse(args, "f:cone_volume_outer", &volume))
+ return -1;
+
+ try
+ {
+ I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
+ if(handle)
+ {
+ if(handle->setConeVolumeOuter(volume))
+ return 0;
+ PyErr_SetString(AUDError, "Couldn't set the cone outer volume!");
+ }
+ else
+ PyErr_SetString(AUDError, device_not_3d_error);
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+PyDoc_STRVAR(M_aud_Handle_distance_maximum_doc,
+ "The maximum distance of the source.\n"
+ "If the listener is further away the source volume will be 0.\n\n"
+ ".. seealso:: :attr:`Device.distance_model`");
+
+static PyObject *
+Handle_get_distance_maximum(Handle* self, void* nothing)
+{
+ try
+ {
+ I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
+ if(handle)
+ {
+ return Py_BuildValue("f", handle->getDistanceMaximum());
+ }
+ else
+ {
+ PyErr_SetString(AUDError, device_not_3d_error);
+ return nullptr;
+ }
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static int
+Handle_set_distance_maximum(Handle* self, PyObject* args, void* nothing)
+{
+ float distance;
+
+ if(!PyArg_Parse(args, "f:distance_maximum", &distance))
+ return -1;
+
+ try
+ {
+ I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
+ if(handle)
+ {
+ if(handle->setDistanceMaximum(distance))
+ return 0;
+ PyErr_SetString(AUDError, "Couldn't set the maximum distance!");
+ }
+ else
+ PyErr_SetString(AUDError, device_not_3d_error);
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+PyDoc_STRVAR(M_aud_Handle_distance_reference_doc,
+ "The reference distance of the source.\n"
+ "At this distance the volume will be exactly :attr:`volume`.\n\n"
+ ".. seealso:: :attr:`Device.distance_model`");
+
+static PyObject *
+Handle_get_distance_reference(Handle* self, void* nothing)
+{
+ try
+ {
+ I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
+ if(handle)
+ {
+ return Py_BuildValue("f", handle->getDistanceReference());
+ }
+ else
+ {
+ PyErr_SetString(AUDError, device_not_3d_error);
+ return nullptr;
+ }
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static int
+Handle_set_distance_reference(Handle* self, PyObject* args, void* nothing)
+{
+ float distance;
+
+ if(!PyArg_Parse(args, "f:distance_reference", &distance))
+ return -1;
+
+ try
+ {
+ I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
+ if(handle)
+ {
+ if(handle->setDistanceReference(distance))
+ return 0;
+ PyErr_SetString(AUDError, "Couldn't set the reference distance!");
+ }
+ else
+ PyErr_SetString(AUDError, device_not_3d_error);
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+PyDoc_STRVAR(M_aud_Handle_keep_doc,
+ "Whether the sound should be kept paused in the device when its "
+ "end is reached.\n"
+ "This can be used to seek the sound to some position and start "
+ "playback again.\n\n"
+ ".. warning:: If this is set to true and you forget stopping this "
+ "equals a memory leak as the handle exists until the device is "
+ "destroyed.");
+
+static PyObject *
+Handle_get_keep(Handle* self, void* nothing)
+{
+ try
+ {
+ return PyBool_FromLong((long)(*reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle))->getKeep());
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static int
+Handle_set_keep(Handle* self, PyObject* args, void* nothing)
+{
+ if(!PyBool_Check(args))
+ {
+ PyErr_SetString(PyExc_TypeError, "keep is not a boolean!");
+ return -1;
+ }
+
+ bool keep = args == Py_True;
+
+ try
+ {
+ if((*reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle))->setKeep(keep))
+ return 0;
+ PyErr_SetString(AUDError, "Couldn't set keep of the sound!");
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+PyDoc_STRVAR(M_aud_Handle_location_doc,
+ "The source's location in 3D space, a 3D tuple of floats.");
+
+static PyObject *
+Handle_get_location(Handle* self, void* nothing)
+{
+ try
+ {
+ I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
+ if(handle)
+ {
+ Vector3 v = handle->getLocation();
+ return Py_BuildValue("(fff)", v.x(), v.y(), v.z());
+ }
+ else
+ {
+ PyErr_SetString(AUDError, device_not_3d_error);
+ }
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return nullptr;
+}
+
+static int
+Handle_set_location(Handle* self, PyObject* args, void* nothing)
+{
+ float x, y, z;
+
+ if(!PyArg_Parse(args, "(fff):location", &x, &y, &z))
+ return -1;
+
+ try
+ {
+ I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
+ if(handle)
+ {
+ Vector3 location(x, y, z);
+ if(handle->setLocation(location))
+ return 0;
+ PyErr_SetString(AUDError, "Location couldn't be set!");
+ }
+ else
+ PyErr_SetString(AUDError, device_not_3d_error);
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+PyDoc_STRVAR(M_aud_Handle_loop_count_doc,
+ "The (remaining) loop count of the sound. A negative value indicates infinity.");
+
+static PyObject *
+Handle_get_loop_count(Handle* self, void* nothing)
+{
+ try
+ {
+ return Py_BuildValue("i", (*reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle))->getLoopCount());
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static int
+Handle_set_loop_count(Handle* self, PyObject* args, void* nothing)
+{
+ int loops;
+
+ if(!PyArg_Parse(args, "i:loop_count", &loops))
+ return -1;
+
+ try
+ {
+ if((*reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle))->setLoopCount(loops))
+ return 0;
+ PyErr_SetString(AUDError, "Couldn't set the loop count!");
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+PyDoc_STRVAR(M_aud_Handle_orientation_doc,
+ "The source's orientation in 3D space as quaternion, a 4 float tuple.");
+
+static PyObject *
+Handle_get_orientation(Handle* self, void* nothing)
+{
+ try
+ {
+ I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
+ if(handle)
+ {
+ Quaternion o = handle->getOrientation();
+ return Py_BuildValue("(ffff)", o.w(), o.x(), o.y(), o.z());
+ }
+ else
+ {
+ PyErr_SetString(AUDError, device_not_3d_error);
+ }
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return nullptr;
+}
+
+static int
+Handle_set_orientation(Handle* self, PyObject* args, void* nothing)
+{
+ float w, x, y, z;
+
+ if(!PyArg_Parse(args, "(ffff):orientation", &w, &x, &y, &z))
+ return -1;
+
+ try
+ {
+ I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
+ if(handle)
+ {
+ Quaternion orientation(w, x, y, z);
+ if(handle->setOrientation(orientation))
+ return 0;
+ PyErr_SetString(AUDError, "Couldn't set the orientation!");
+ }
+ else
+ PyErr_SetString(AUDError, device_not_3d_error);
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+PyDoc_STRVAR(M_aud_Handle_pitch_doc,
+ "The pitch of the sound.");
+
+static PyObject *
+Handle_get_pitch(Handle* self, void* nothing)
+{
+ try
+ {
+ return Py_BuildValue("f", (*reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle))->getPitch());
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static int
+Handle_set_pitch(Handle* self, PyObject* args, void* nothing)
+{
+ float pitch;
+
+ if(!PyArg_Parse(args, "f:pitch", &pitch))
+ return -1;
+
+ try
+ {
+ if((*reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle))->setPitch(pitch))
+ return 0;
+ PyErr_SetString(AUDError, "Couldn't set the sound pitch!");
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+PyDoc_STRVAR(M_aud_Handle_position_doc,
+ "The playback position of the sound in seconds.");
+
+static PyObject *
+Handle_get_position(Handle* self, void* nothing)
+{
+ try
+ {
+ return Py_BuildValue("f", (*reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle))->getPosition());
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static int
+Handle_set_position(Handle* self, PyObject* args, void* nothing)
+{
+ float position;
+
+ if(!PyArg_Parse(args, "f:position", &position))
+ return -1;
+
+ try
+ {
+ if((*reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle))->seek(position))
+ return 0;
+ PyErr_SetString(AUDError, "Couldn't seek the sound!");
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+PyDoc_STRVAR(M_aud_Handle_relative_doc,
+ "Whether the source's location, velocity and orientation is relative or absolute to the listener.");
+
+static PyObject *
+Handle_get_relative(Handle* self, void* nothing)
+{
+ try
+ {
+ I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
+ if(handle)
+ {
+ return PyBool_FromLong((long)handle->isRelative());
+ }
+ else
+ {
+ PyErr_SetString(AUDError, device_not_3d_error);
+ }
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return nullptr;
+}
+
+static int
+Handle_set_relative(Handle* self, PyObject* args, void* nothing)
+{
+ if(!PyBool_Check(args))
+ {
+ PyErr_SetString(PyExc_TypeError, "Value is not a boolean!");
+ return -1;
+ }
+
+ bool relative = (args == Py_True);
+
+ try
+ {
+ I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
+ if(handle)
+ {
+ if(handle->setRelative(relative))
+ return 0;
+ PyErr_SetString(AUDError, "Couldn't set the relativeness!");
+ }
+ else
+ PyErr_SetString(AUDError, device_not_3d_error);
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+PyDoc_STRVAR(M_aud_Handle_status_doc,
+ "Whether the sound is playing, paused or stopped (=invalid).");
+
+static PyObject *
+Handle_get_status(Handle* self, void* nothing)
+{
+ try
+ {
+ return PyBool_FromLong((long)(*reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle))->getStatus());
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+PyDoc_STRVAR(M_aud_Handle_velocity_doc,
+ "The source's velocity in 3D space, a 3D tuple of floats.");
+
+static PyObject *
+Handle_get_velocity(Handle* self, void* nothing)
+{
+ try
+ {
+ I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
+ if(handle)
+ {
+ Vector3 v = handle->getVelocity();
+ return Py_BuildValue("(fff)", v.x(), v.y(), v.z());
+ }
+ else
+ {
+ PyErr_SetString(AUDError, device_not_3d_error);
+ }
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return nullptr;
+}
+
+static int
+Handle_set_velocity(Handle* self, PyObject* args, void* nothing)
+{
+ float x, y, z;
+
+ if(!PyArg_Parse(args, "(fff):velocity", &x, &y, &z))
+ return -1;
+
+ try
+ {
+ I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
+ if(handle)
+ {
+ Vector3 velocity(x, y, z);
+ if(handle->setVelocity(velocity))
+ return 0;
+ PyErr_SetString(AUDError, "Couldn't set the velocity!");
+ }
+ else
+ PyErr_SetString(AUDError, device_not_3d_error);
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+PyDoc_STRVAR(M_aud_Handle_volume_doc,
+ "The volume of the sound.");
+
+static PyObject *
+Handle_get_volume(Handle* self, void* nothing)
+{
+ try
+ {
+ return Py_BuildValue("f", (*reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle))->getVolume());
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static int
+Handle_set_volume(Handle* self, PyObject* args, void* nothing)
+{
+ float volume;
+
+ if(!PyArg_Parse(args, "f:volume", &volume))
+ return -1;
+
+ try
+ {
+ if((*reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle))->setVolume(volume))
+ return 0;
+ PyErr_SetString(AUDError, "Couldn't set the sound volume!");
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+PyDoc_STRVAR(M_aud_Handle_volume_maximum_doc,
+ "The maximum volume of the source.\n\n"
+ ".. seealso:: :attr:`Device.distance_model`");
+
+static PyObject *
+Handle_get_volume_maximum(Handle* self, void* nothing)
+{
+ try
+ {
+ I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
+ if(handle)
+ {
+ return Py_BuildValue("f", handle->getVolumeMaximum());
+ }
+ else
+ {
+ PyErr_SetString(AUDError, device_not_3d_error);
+ return nullptr;
+ }
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static int
+Handle_set_volume_maximum(Handle* self, PyObject* args, void* nothing)
+{
+ float volume;
+
+ if(!PyArg_Parse(args, "f:volume_maximum", &volume))
+ return -1;
+
+ try
+ {
+ I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
+ if(handle)
+ {
+ if(handle->setVolumeMaximum(volume))
+ return 0;
+ PyErr_SetString(AUDError, "Couldn't set the maximum volume!");
+ }
+ else
+ PyErr_SetString(AUDError, device_not_3d_error);
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+PyDoc_STRVAR(M_aud_Handle_volume_minimum_doc,
+ "The minimum volume of the source.\n\n"
+ ".. seealso:: :attr:`Device.distance_model`");
+
+static PyObject *
+Handle_get_volume_minimum(Handle* self, void* nothing)
+{
+ try
+ {
+ I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
+ if(handle)
+ {
+ return Py_BuildValue("f", handle->getVolumeMinimum());
+ }
+ else
+ {
+ PyErr_SetString(AUDError, device_not_3d_error);
+ return nullptr;
+ }
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static int
+Handle_set_volume_minimum(Handle* self, PyObject* args, void* nothing)
+{
+ float volume;
+
+ if(!PyArg_Parse(args, "f:volume_minimum", &volume))
+ return -1;
+
+ try
+ {
+ I3DHandle* handle = dynamic_cast<I3DHandle*>(reinterpret_cast<std::shared_ptr<IHandle>*>(self->handle)->get());
+ if(handle)
+ {
+ if(handle->setVolumeMinimum(volume))
+ return 0;
+ PyErr_SetString(AUDError, "Couldn't set the minimum volume!");
+ }
+ else
+ PyErr_SetString(AUDError, device_not_3d_error);
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+static PyGetSetDef Handle_properties[] = {
+ {(char*)"attenuation", (getter)Handle_get_attenuation, (setter)Handle_set_attenuation,
+ M_aud_Handle_attenuation_doc, nullptr },
+ {(char*)"cone_angle_inner", (getter)Handle_get_cone_angle_inner, (setter)Handle_set_cone_angle_inner,
+ M_aud_Handle_cone_angle_inner_doc, nullptr },
+ {(char*)"cone_angle_outer", (getter)Handle_get_cone_angle_outer, (setter)Handle_set_cone_angle_outer,
+ M_aud_Handle_cone_angle_outer_doc, nullptr },
+ {(char*)"cone_volume_outer", (getter)Handle_get_cone_volume_outer, (setter)Handle_set_cone_volume_outer,
+ M_aud_Handle_cone_volume_outer_doc, nullptr },
+ {(char*)"distance_maximum", (getter)Handle_get_distance_maximum, (setter)Handle_set_distance_maximum,
+ M_aud_Handle_distance_maximum_doc, nullptr },
+ {(char*)"distance_reference", (getter)Handle_get_distance_reference, (setter)Handle_set_distance_reference,
+ M_aud_Handle_distance_reference_doc, nullptr },
+ {(char*)"keep", (getter)Handle_get_keep, (setter)Handle_set_keep,
+ M_aud_Handle_keep_doc, nullptr },
+ {(char*)"location", (getter)Handle_get_location, (setter)Handle_set_location,
+ M_aud_Handle_location_doc, nullptr },
+ {(char*)"loop_count", (getter)Handle_get_loop_count, (setter)Handle_set_loop_count,
+ M_aud_Handle_loop_count_doc, nullptr },
+ {(char*)"orientation", (getter)Handle_get_orientation, (setter)Handle_set_orientation,
+ M_aud_Handle_orientation_doc, nullptr },
+ {(char*)"pitch", (getter)Handle_get_pitch, (setter)Handle_set_pitch,
+ M_aud_Handle_pitch_doc, nullptr },
+ {(char*)"position", (getter)Handle_get_position, (setter)Handle_set_position,
+ M_aud_Handle_position_doc, nullptr },
+ {(char*)"relative", (getter)Handle_get_relative, (setter)Handle_set_relative,
+ M_aud_Handle_relative_doc, nullptr },
+ {(char*)"status", (getter)Handle_get_status, nullptr,
+ M_aud_Handle_status_doc, nullptr },
+ {(char*)"velocity", (getter)Handle_get_velocity, (setter)Handle_set_velocity,
+ M_aud_Handle_velocity_doc, nullptr },
+ {(char*)"volume", (getter)Handle_get_volume, (setter)Handle_set_volume,
+ M_aud_Handle_volume_doc, nullptr },
+ {(char*)"volume_maximum", (getter)Handle_get_volume_maximum, (setter)Handle_set_volume_maximum,
+ M_aud_Handle_volume_maximum_doc, nullptr },
+ {(char*)"volume_minimum", (getter)Handle_get_volume_minimum, (setter)Handle_set_volume_minimum,
+ M_aud_Handle_volume_minimum_doc, nullptr },
+ {nullptr} /* Sentinel */
+};
+
+PyDoc_STRVAR(M_aud_Handle_doc,
+ "Handle objects are playback handles that can be used to control "
+ "playback of a sound. If a sound is played back multiple times "
+ "then there are as many handles.");
+
+static PyTypeObject HandleType = {
+ PyVarObject_HEAD_INIT(nullptr, 0)
+ "aud.Handle", /* tp_name */
+ sizeof(Handle), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ (destructor)Handle_dealloc,/* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_reserved */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ 0, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT, /* tp_flags */
+ M_aud_Handle_doc, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ Handle_methods, /* tp_methods */
+ 0, /* tp_members */
+ Handle_properties, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ 0, /* tp_new */
+};
+
+
+AUD_API PyObject* Handle_empty()
+{
+ return HandleType.tp_alloc(&HandleType, 0);
+}
+
+
+AUD_API Handle*checkHandle(PyObject* handle)
+{
+ if(!PyObject_TypeCheck(handle, &HandleType))
+ {
+ PyErr_SetString(PyExc_TypeError, "Object is not of type Handle!");
+ return nullptr;
+ }
+
+ return (Handle*)handle;
+}
+
+
+bool initializeHandle()
+{
+ return PyType_Ready(&HandleType) >= 0;
+}
+
+
+void addHandleToModule(PyObject* module)
+{
+ Py_INCREF(&HandleType);
+ PyModule_AddObject(module, "Handle", (PyObject *)&HandleType);
+}
+
+
diff --git a/extern/audaspace/bindings/python/PyHandle.h b/extern/audaspace/bindings/python/PyHandle.h
new file mode 100644
index 00000000000..95006c88da7
--- /dev/null
+++ b/extern/audaspace/bindings/python/PyHandle.h
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+#include <Python.h>
+#include "Audaspace.h"
+
+typedef void Reference_IHandle;
+
+typedef struct {
+ PyObject_HEAD
+ Reference_IHandle* handle;
+} Handle;
+
+extern AUD_API PyObject* Handle_empty();
+extern AUD_API Handle* checkHandle(PyObject* handle);
+
+bool initializeHandle();
+void addHandleToModule(PyObject* module);
diff --git a/extern/audaspace/bindings/python/PyImpulseResponse.cpp b/extern/audaspace/bindings/python/PyImpulseResponse.cpp
new file mode 100644
index 00000000000..5200c938511
--- /dev/null
+++ b/extern/audaspace/bindings/python/PyImpulseResponse.cpp
@@ -0,0 +1,137 @@
+/*******************************************************************************
+* Copyright 2009-2015 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "PyImpulseResponse.h"
+#include "PySound.h"
+
+#include "Exception.h"
+#include "fx/ImpulseResponse.h"
+#include "util/StreamBuffer.h"
+
+extern PyObject* AUDError;
+
+static PyObject *
+ImpulseResponse_new(PyTypeObject* type, PyObject* args, PyObject* kwds)
+{
+ ImpulseResponseP* self = (ImpulseResponseP*)type->tp_alloc(type, 0);
+
+ if(self != nullptr)
+ {
+ PyObject* object;
+ if(!PyArg_ParseTuple(args, "O:sound", &object))
+ return nullptr;
+ Sound* sound = checkSound(object);
+
+ try
+ {
+ self->impulseResponse = new std::shared_ptr<aud::ImpulseResponse>(new aud::ImpulseResponse(std::make_shared<aud::StreamBuffer>(*reinterpret_cast<std::shared_ptr<aud::ISound>*>(sound->sound))));
+ }
+ catch(aud::Exception& e)
+ {
+ Py_DECREF(self);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)self;
+}
+
+static void
+ImpulseResponse_dealloc(ImpulseResponseP* self)
+{
+ if(self->impulseResponse)
+ delete reinterpret_cast<std::shared_ptr<aud::ImpulseResponse>*>(self->impulseResponse);
+ Py_TYPE(self)->tp_free((PyObject *)self);
+}
+
+static PyMethodDef ImpulseResponse_methods[] = {
+ { nullptr } /* Sentinel */
+};
+
+PyDoc_STRVAR(M_aud_ImpulseResponse_doc,
+ "An ImpulseResponse object represents a filter with which to convolve a sound.");
+
+PyTypeObject ImpulseResponseType = {
+ PyVarObject_HEAD_INIT(nullptr, 0)
+ "aud.ImpulseResponse", /* tp_name */
+ sizeof(ImpulseResponseP), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ (destructor)ImpulseResponse_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_reserved */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ 0, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT, /* tp_flags */
+ M_aud_ImpulseResponse_doc, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ ImpulseResponse_methods, /* tp_methods */
+ 0, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ ImpulseResponse_new, /* tp_new */
+};
+
+AUD_API PyObject* ImpulseResponse_empty()
+{
+ return ImpulseResponseType.tp_alloc(&ImpulseResponseType, 0);
+}
+
+
+AUD_API ImpulseResponseP* checkImpulseResponse(PyObject* impulseResponse)
+{
+ if(!PyObject_TypeCheck(impulseResponse, &ImpulseResponseType))
+ {
+ PyErr_SetString(PyExc_TypeError, "Object is not of type ImpulseResponse!");
+ return nullptr;
+ }
+
+ return (ImpulseResponseP*)impulseResponse;
+}
+
+
+bool initializeImpulseResponse()
+{
+ return PyType_Ready(&ImpulseResponseType) >= 0;
+}
+
+
+void addImpulseResponseToModule(PyObject* module)
+{
+ Py_INCREF(&ImpulseResponseType);
+ PyModule_AddObject(module, "ImpulseResponse", (PyObject *)&ImpulseResponseType);
+}
diff --git a/extern/audaspace/bindings/python/PyImpulseResponse.h b/extern/audaspace/bindings/python/PyImpulseResponse.h
new file mode 100644
index 00000000000..3e974c0701c
--- /dev/null
+++ b/extern/audaspace/bindings/python/PyImpulseResponse.h
@@ -0,0 +1,33 @@
+/*******************************************************************************
+* Copyright 2009-2015 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#pragma once
+
+#include <Python.h>
+#include "Audaspace.h"
+
+typedef void Reference_ImpulseResponse;
+
+typedef struct {
+ PyObject_HEAD
+ Reference_ImpulseResponse* impulseResponse;
+} ImpulseResponseP;
+
+extern AUD_API PyObject* ImpulseResponse_empty();
+extern AUD_API ImpulseResponseP* checkImpulseResponse(PyObject* impulseResponse);
+
+bool initializeImpulseResponse();
+void addImpulseResponseToModule(PyObject* module); \ No newline at end of file
diff --git a/extern/audaspace/bindings/python/PyPlaybackManager.cpp b/extern/audaspace/bindings/python/PyPlaybackManager.cpp
new file mode 100644
index 00000000000..9b6614cae9a
--- /dev/null
+++ b/extern/audaspace/bindings/python/PyPlaybackManager.cpp
@@ -0,0 +1,389 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "PyPlaybackManager.h"
+#include "PySound.h"
+#include "PyHandle.h"
+#include "PyDevice.h"
+
+#include "Exception.h"
+#include "fx/PlaybackManager.h"
+
+extern PyObject* AUDError;
+
+static PyObject *
+PlaybackManager_new(PyTypeObject* type, PyObject* args, PyObject* kwds)
+{
+ PlaybackManagerP* self = (PlaybackManagerP*)type->tp_alloc(type, 0);
+
+ if(self != nullptr)
+ {
+ PyObject* object;
+ if(!PyArg_ParseTuple(args, "O:catKey", &object))
+ return nullptr;
+ Device* device = checkDevice(object);
+
+ try
+ {
+ self->playbackManager = new std::shared_ptr<aud::PlaybackManager>(new aud::PlaybackManager(*reinterpret_cast<std::shared_ptr<aud::IDevice>*>(device->device)));
+ }
+ catch(aud::Exception& e)
+ {
+ Py_DECREF(self);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)self;
+}
+
+static void
+PlaybackManager_dealloc(PlaybackManagerP* self)
+{
+ if(self->playbackManager)
+ delete reinterpret_cast<std::shared_ptr<aud::PlaybackManager>*>(self->playbackManager);
+ Py_TYPE(self)->tp_free((PyObject *)self);
+}
+
+PyDoc_STRVAR(M_aud_PlaybackManager_play_doc,
+ "setVolume(sound, catKey)\n\n"
+ "Plays a sound through the playback manager and assigns it to a category.\n\n"
+ ":arg sound: The sound to play.\n"
+ ":type sound: :class:`Sound`\n"
+ ":arg catKey: the key of the category in which the sound will be added, if it doesn't exist, a new one will be created.\n"
+ ":type catKey: int\n"
+ ":return: The playback handle with which playback can be controlled with.\n"
+ ":rtype: :class:`Handle`");
+
+static PyObject *
+PlaybackManager_play(PlaybackManagerP* self, PyObject* args)
+{
+ PyObject* object;
+ unsigned int cat;
+
+ if(!PyArg_ParseTuple(args, "OI:catKey", &object, &cat))
+ return nullptr;
+
+ Sound* sound = checkSound(object);
+ if(!sound)
+ return nullptr;
+
+ Handle* handle;
+
+ handle = (Handle*)Handle_empty();
+ if(handle != nullptr)
+ {
+ try
+ {
+ handle->handle = new std::shared_ptr<aud::IHandle>((*reinterpret_cast<std::shared_ptr<aud::PlaybackManager>*>(self->playbackManager))->play(*reinterpret_cast<std::shared_ptr<aud::ISound>*>(sound->sound), cat));
+ }
+ catch(aud::Exception& e)
+ {
+ Py_DECREF(handle);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)handle;
+}
+
+PyDoc_STRVAR(M_aud_PlaybackManager_resume_doc,
+ "resume(catKey)\n\n"
+ "Resumes playback of the catgory.\n\n"
+ ":arg catKey: the key of the category.\n"
+ ":type catKey: int\n"
+ ":return: Whether the action succeeded.\n"
+ ":rtype: bool");
+
+static PyObject *
+PlaybackManager_resume(PlaybackManagerP* self, PyObject* args)
+{
+ unsigned int cat;
+
+ if(!PyArg_ParseTuple(args, "I:catKey", &cat))
+ return nullptr;
+
+ try
+ {
+ return PyBool_FromLong((long)(*reinterpret_cast<std::shared_ptr<aud::PlaybackManager>*>(self->playbackManager))->resume(cat));
+ }
+ catch(aud::Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+PyDoc_STRVAR(M_aud_PlaybackManager_pause_doc,
+ "pause(catKey)\n\n"
+ "Pauses playback of the category.\n\n"
+ ":arg catKey: the key of the category.\n"
+ ":type catKey: int\n"
+ ":return: Whether the action succeeded.\n"
+ ":rtype: bool");
+
+static PyObject *
+PlaybackManager_pause(PlaybackManagerP* self, PyObject* args)
+{
+ unsigned int cat;
+
+ if(!PyArg_ParseTuple(args, "I:catKey", &cat))
+ return nullptr;
+
+ try
+ {
+ return PyBool_FromLong((long)(*reinterpret_cast<std::shared_ptr<aud::PlaybackManager>*>(self->playbackManager))->pause(cat));
+ }
+ catch(aud::Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+PyDoc_STRVAR(M_aud_PlaybackManager_add_category_doc,
+ "addCategory(volume)\n\n"
+ "Adds a category with a custom volume.\n\n"
+ ":arg volume: The volume for ther new category.\n"
+ ":type volume: float\n"
+ ":return: The key of the new category.\n"
+ ":rtype: int\n\n");
+
+static PyObject *
+PlaybackManager_add_category(PlaybackManagerP* self, PyObject* args)
+{
+ float vol;
+
+ if(!PyArg_ParseTuple(args, "f:volume", &vol))
+ return nullptr;
+
+ try
+ {
+ return Py_BuildValue("I", (*reinterpret_cast<std::shared_ptr<aud::PlaybackManager>*>(self->playbackManager))->addCategory(vol));
+ }
+ catch(aud::Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+PyDoc_STRVAR(M_aud_PlaybackManager_get_volume_doc,
+ "getVolume(catKey)\n\n"
+ "Retrieves the volume of a category.\n\n"
+ ":arg catKey: the key of the category.\n"
+ ":type catKey: int\n"
+ ":return: The volume of the cateogry.\n"
+ ":rtype: float\n\n");
+
+static PyObject *
+PlaybackManager_get_volume(PlaybackManagerP* self, PyObject* args)
+{
+ unsigned int cat;
+
+ if(!PyArg_ParseTuple(args, "I:catKey", &cat))
+ return nullptr;
+
+ try
+ {
+ return Py_BuildValue("f", (*reinterpret_cast<std::shared_ptr<aud::PlaybackManager>*>(self->playbackManager))->getVolume(cat));
+ }
+ catch(aud::Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+PyDoc_STRVAR(M_aud_PlaybackManager_set_volume_doc,
+ "setVolume(volume, catKey)\n\n"
+ "Changes the volume of a category.\n\n"
+ ":arg volume: the new volume value.\n"
+ ":type volume: float\n"
+ ":arg catKey: the key of the category.\n"
+ ":type catKey: int\n"
+ ":return: Whether the action succeeded.\n"
+ ":rtype: int\n\n");
+
+static PyObject *
+PlaybackManager_set_volume(PlaybackManagerP* self, PyObject* args)
+{
+ float volume;
+ unsigned int cat;
+
+ if(!PyArg_ParseTuple(args, "fI:volume", &volume, &cat))
+ return nullptr;
+
+ try
+ {
+ return PyBool_FromLong((long)(*reinterpret_cast<std::shared_ptr<aud::PlaybackManager>*>(self->playbackManager))->setVolume(volume, cat));
+ }
+ catch(aud::Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+PyDoc_STRVAR(M_aud_PlaybackManager_stop_doc,
+ "stop(catKey)\n\n"
+ "Stops playback of the category.\n\n"
+ ":arg catKey: the key of the category.\n"
+ ":type catKey: int\n"
+ ":return: Whether the action succeeded.\n"
+ ":rtype: bool\n\n");
+
+static PyObject *
+PlaybackManager_stop(PlaybackManagerP* self, PyObject* args)
+{
+ unsigned int cat;
+
+ if(!PyArg_ParseTuple(args, "I:catKey", &cat))
+ return nullptr;
+
+ try
+ {
+ return PyBool_FromLong((long)(*reinterpret_cast<std::shared_ptr<aud::PlaybackManager>*>(self->playbackManager))->stop(cat));
+ }
+ catch(aud::Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+PyDoc_STRVAR(M_aud_PlaybackManager_clean_doc,
+ "clean()\n\n"
+ "Cleans all the invalid and finished sound from the playback manager.\n\n");
+
+static PyObject *
+PlaybackManager_clean(PlaybackManagerP* self)
+{
+ try
+ {
+ (*reinterpret_cast<std::shared_ptr<aud::PlaybackManager>*>(self->playbackManager))->clean();
+ Py_RETURN_NONE;
+ }
+ catch(aud::Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static PyMethodDef PlaybackManager_methods[] = {
+ { "play", (PyCFunction)PlaybackManager_play, METH_VARARGS | METH_KEYWORDS,
+ M_aud_PlaybackManager_play_doc
+ },
+ { "resume", (PyCFunction)PlaybackManager_resume, METH_VARARGS,
+ M_aud_PlaybackManager_resume_doc
+ },
+ { "pause", (PyCFunction)PlaybackManager_pause, METH_VARARGS,
+ M_aud_PlaybackManager_pause_doc
+ },
+ { "stop", (PyCFunction)PlaybackManager_stop, METH_VARARGS,
+ M_aud_PlaybackManager_stop_doc
+ },
+ { "addCategory", (PyCFunction)PlaybackManager_add_category, METH_VARARGS,
+ M_aud_PlaybackManager_add_category_doc
+ },
+ { "getVolume", (PyCFunction)PlaybackManager_get_volume, METH_VARARGS,
+ M_aud_PlaybackManager_get_volume_doc
+ },
+ { "setVolume", (PyCFunction)PlaybackManager_set_volume, METH_VARARGS,
+ M_aud_PlaybackManager_set_volume_doc
+ },
+ { "clean", (PyCFunction)PlaybackManager_clean, METH_NOARGS,
+ M_aud_PlaybackManager_clean_doc
+ },
+ { nullptr } /* Sentinel */
+};
+
+PyDoc_STRVAR(M_aud_PlaybackManager_doc,
+ "A PlabackManager object allows to easily control groups os sounds organized in categories.");
+
+PyTypeObject PlaybackManagerType = {
+ PyVarObject_HEAD_INIT(nullptr, 0)
+ "aud.PlaybackManager", /* tp_name */
+ sizeof(PlaybackManagerP), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ (destructor)PlaybackManager_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_reserved */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ 0, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT, /* tp_flags */
+ M_aud_PlaybackManager_doc, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ PlaybackManager_methods, /* tp_methods */
+ 0, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ PlaybackManager_new, /* tp_new */
+};
+
+AUD_API PyObject* PlaybackManager_empty()
+{
+ return PlaybackManagerType.tp_alloc(&PlaybackManagerType, 0);
+}
+
+
+AUD_API PlaybackManagerP* checkPlaybackManager(PyObject* playbackManager)
+{
+ if(!PyObject_TypeCheck(playbackManager, &PlaybackManagerType))
+ {
+ PyErr_SetString(PyExc_TypeError, "Object is not of type PlaybackManager!");
+ return nullptr;
+ }
+
+ return (PlaybackManagerP*)playbackManager;
+}
+
+
+bool initializePlaybackManager()
+{
+ return PyType_Ready(&PlaybackManagerType) >= 0;
+}
+
+
+void addPlaybackManagerToModule(PyObject* module)
+{
+ Py_INCREF(&PlaybackManagerType);
+ PyModule_AddObject(module, "PlaybackManager", (PyObject *)&PlaybackManagerType);
+}
diff --git a/extern/audaspace/bindings/python/PyPlaybackManager.h b/extern/audaspace/bindings/python/PyPlaybackManager.h
new file mode 100644
index 00000000000..f26df1b32d0
--- /dev/null
+++ b/extern/audaspace/bindings/python/PyPlaybackManager.h
@@ -0,0 +1,33 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#pragma once
+
+#include <Python.h>
+#include "Audaspace.h"
+
+typedef void Reference_PlaybackManager;
+
+typedef struct {
+ PyObject_HEAD
+ Reference_PlaybackManager* playbackManager;
+} PlaybackManagerP;
+
+extern AUD_API PyObject* PlaybackManager_empty();
+extern AUD_API PlaybackManagerP* checkPlaybackManager(PyObject* playbackManager);
+
+bool initializePlaybackManager();
+void addPlaybackManagerToModule(PyObject* module); \ No newline at end of file
diff --git a/extern/audaspace/bindings/python/PySequence.cpp b/extern/audaspace/bindings/python/PySequence.cpp
new file mode 100644
index 00000000000..d4773c743ee
--- /dev/null
+++ b/extern/audaspace/bindings/python/PySequence.cpp
@@ -0,0 +1,655 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "PySequence.h"
+
+#include "PySound.h"
+#include "PySequenceEntry.h"
+
+#include "sequence/AnimateableProperty.h"
+#include "sequence/Sequence.h"
+#include "Exception.h"
+
+#include <vector>
+#include <structmember.h>
+
+using aud::Channels;
+using aud::DistanceModel;
+using aud::Exception;
+using aud::ISound;
+using aud::AnimateableProperty;
+using aud::AnimateablePropertyType;
+using aud::Specs;
+
+extern PyObject* AUDError;
+
+// ====================================================================
+
+static void
+Sequence_dealloc(Sequence* self)
+{
+ if(self->sequence)
+ delete reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence);
+ Py_TYPE(self)->tp_free((PyObject *)self);
+}
+
+static PyObject *
+Sequence_new(PyTypeObject* type, PyObject* args, PyObject* kwds)
+{
+ Sequence* self;
+
+ int channels = aud::CHANNELS_STEREO;
+ double rate = aud::RATE_48000;
+ float fps = 30.0f;
+ bool muted = false;
+ PyObject* mutedo = nullptr;
+
+ self = (Sequence*)type->tp_alloc(type, 0);
+ if(self != nullptr)
+ {
+ static const char* kwlist[] = {"channels", "rate", "fps", "muted", nullptr};
+
+ if(!PyArg_ParseTupleAndKeywords(args, kwds, "|idfO:Sequence", const_cast<char**>(kwlist), &channels, &rate, &fps, &mutedo))
+ {
+ Py_DECREF(self);
+ return nullptr;
+ }
+
+ if(mutedo)
+ {
+ if(!PyBool_Check(mutedo))
+ {
+ PyErr_SetString(PyExc_TypeError, "muted is not a boolean!");
+ return nullptr;
+ }
+
+ muted = mutedo == Py_True;
+ }
+
+ aud::Specs specs;
+ specs.channels = static_cast<aud::Channels>(channels);
+ specs.rate = rate;
+
+ try
+ {
+ self->sequence = new std::shared_ptr<aud::Sequence>(new aud::Sequence(specs, fps, muted));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(self);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)self;
+}
+
+PyDoc_STRVAR(M_aud_Sequence_add_doc,
+ "add()\n\n"
+ "Adds a new entry to the scene.\n"
+ ":arg sound: The sound this entry should play.\n"
+ ":type sound: :class:`Sound`\n"
+ ":arg begin: The start time.\n"
+ ":type begin: float\n"
+ ":arg end: The end time or a negative value if determined by the sound.\n"
+ ":type end: float\n"
+ ":arg skip: How much seconds should be skipped at the beginning.\n"
+ ":type skip: float\n"
+ ":return: The entry added.\n"
+ ":rtype: :class:`SequenceEntry`");
+
+static PyObject *
+Sequence_add(Sequence* self, PyObject* args, PyObject* kwds)
+{
+ PyObject* object;
+ float begin;
+ float end = -1.0f;
+ float skip = 0.0f;
+
+ static const char* kwlist[] = {"sound", "begin", "end", "skip", nullptr};
+
+ if(!PyArg_ParseTupleAndKeywords(args, kwds, "Of|ff:add", const_cast<char**>(kwlist), &object, &begin, &end, &skip))
+ return nullptr;
+
+ Sound* sound = checkSound(object);
+
+ if(!sound)
+ return nullptr;
+
+ SequenceEntry* entry;
+
+ entry = (SequenceEntry*)SequenceEntry_empty();
+ if(entry != nullptr)
+ {
+ try
+ {
+ entry->entry = new std::shared_ptr<aud::SequenceEntry>((*reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence))->add(*reinterpret_cast<std::shared_ptr<ISound>*>(sound->sound), begin, end, skip));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(entry);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)entry;
+}
+
+PyDoc_STRVAR(M_aud_Sequence_remove_doc,
+ "reomve()\n\n"
+ "Adds a new entry to the scene.\n"
+ ":arg entry: The entry to remove.\n"
+ ":type entry: :class:`SequenceEntry`\n");
+
+static PyObject *
+Sequence_remove(Sequence* self, PyObject* args)
+{
+ PyObject* object;
+
+ if(!PyArg_ParseTuple(args, "O:remove", &object))
+ return nullptr;
+
+ SequenceEntry* entry = checkSequenceEntry(object);
+
+ if(!entry)
+ return nullptr;
+
+ try
+ {
+ (*reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence))->remove(*reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(entry->entry));
+ Py_RETURN_NONE;
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(entry);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+PyDoc_STRVAR(M_aud_Sequence_setAnimationData_doc,
+ "setAnimationData()\n\n"
+ "Writes animation data to a sequence.\n\n"
+ ":arg type: The type of animation data.\n"
+ ":type type: int\n"
+ ":arg frame: The frame this data is for.\n"
+ ":type frame: int\n"
+ ":arg data: The data to write.\n"
+ ":type data: sequence of float\n"
+ ":arg animated: Whether the attribute is animated.\n"
+ ":type animated: bool");
+
+static PyObject *
+Sequence_setAnimationData(Sequence* self, PyObject* args)
+{
+ int type, frame;
+ PyObject* py_data;
+ Py_ssize_t py_data_len;
+ PyObject* animatedo;
+ bool animated;
+
+ if(!PyArg_ParseTuple(args, "iiOO:setAnimationData", &type, &frame, &py_data, &animatedo))
+ return nullptr;
+
+ if(!PySequence_Check(py_data))
+ {
+ PyErr_SetString(PyExc_TypeError, "Parameter is not a sequence!");
+ return nullptr;
+ }
+
+ py_data_len= PySequence_Size(py_data);
+
+ std::vector<float> data;
+ data.resize(py_data_len);
+
+ PyObject* py_value;
+ float value;
+
+ for(Py_ssize_t i = 0; i < py_data_len; i++)
+ {
+ py_value = PySequence_GetItem(py_data, i);
+ value= (float)PyFloat_AsDouble(py_value);
+ Py_DECREF(py_value);
+
+ if(value == -1.0f && PyErr_Occurred()) {
+ return nullptr;
+ }
+
+ data.push_back(value);
+ }
+
+ if(!PyBool_Check(animatedo))
+ {
+ PyErr_SetString(PyExc_TypeError, "animated is not a boolean!");
+ return nullptr;
+ }
+
+ animated = animatedo == Py_True;
+
+ try
+ {
+ AnimateableProperty* prop = (*reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence))->getAnimProperty(static_cast<AnimateablePropertyType>(type));
+
+ if(prop->getCount() != py_data_len)
+ {
+ PyErr_SetString(PyExc_ValueError, "the amount of floats doesn't fit the animated property");
+ return nullptr;
+ }
+
+ if(animated)
+ {
+ if(frame >= 0)
+ prop->write(&data[0], frame, 1);
+ }
+ else
+ {
+ prop->write(&data[0]);
+ }
+ Py_RETURN_NONE;
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static PyMethodDef Sequence_methods[] = {
+ {"add", (PyCFunction)Sequence_add, METH_VARARGS | METH_KEYWORDS,
+ M_aud_Sequence_add_doc
+ },
+ {"remove", (PyCFunction)Sequence_remove, METH_VARARGS,
+ M_aud_Sequence_remove_doc
+ },
+ {"setAnimationData", (PyCFunction)Sequence_setAnimationData, METH_VARARGS,
+ M_aud_Sequence_setAnimationData_doc
+ },
+ {nullptr} /* Sentinel */
+};
+
+PyDoc_STRVAR(M_aud_Sequence_channels_doc,
+ "The channel count of the sequence.");
+
+static PyObject *
+Sequence_get_channels(Sequence* self, void* nothing)
+{
+ try
+ {
+ Specs specs = (*reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence))->getSpecs();
+ return Py_BuildValue("i", specs.channels);
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static int
+Sequence_set_channels(Sequence* self, PyObject* args, void* nothing)
+{
+ int channels;
+
+ if(!PyArg_Parse(args, "i:channels", &channels))
+ return -1;
+
+ try
+ {
+ std::shared_ptr<aud::Sequence> sequence = *reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence);
+ Specs specs = sequence->getSpecs();
+ specs.channels = static_cast<Channels>(channels);
+ sequence->setSpecs(specs);
+ return 0;
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return -1;
+ }
+}
+
+PyDoc_STRVAR(M_aud_Sequence_distance_model_doc,
+ "The distance model of the sequence.\n\n"
+ ".. seealso:: http://connect.creativelabs.com/openal/Documentation/OpenAL%201.1%20Specification.htm#_Toc199835864");
+
+static PyObject *
+Sequence_get_distance_model(Sequence* self, void* nothing)
+{
+ try
+ {
+ return Py_BuildValue("i", (*reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence))->getDistanceModel());
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static int
+Sequence_set_distance_model(Sequence* self, PyObject* args, void* nothing)
+{
+ int distance_model;
+
+ if(!PyArg_Parse(args, "i:distance_model", &distance_model))
+ return -1;
+
+ try
+ {
+ (*reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence))->setDistanceModel(static_cast<DistanceModel>(distance_model));
+ return 0;
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return -1;
+ }
+}
+
+PyDoc_STRVAR(M_aud_Sequence_doppler_factor_doc,
+ "The doppler factor of the sequence.\n"
+ "This factor is a scaling factor for the velocity vectors in "
+ "doppler calculation. So a value bigger than 1 will exaggerate "
+ "the effect as it raises the velocity.");
+
+static PyObject *
+Sequence_get_doppler_factor(Sequence* self, void* nothing)
+{
+ try
+ {
+ return Py_BuildValue("f", (*reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence))->getDopplerFactor());
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static int
+Sequence_set_doppler_factor(Sequence* self, PyObject* args, void* nothing)
+{
+ float factor;
+
+ if(!PyArg_Parse(args, "f:doppler_factor", &factor))
+ return -1;
+
+ try
+ {
+ (*reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence))->setDopplerFactor(factor);
+ return 0;
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return -1;
+ }
+}
+
+PyDoc_STRVAR(M_aud_Sequence_fps_doc,
+ "The listeners's location in 3D space, a 3D tuple of floats.");
+
+static PyObject *
+Sequence_get_fps(Sequence* self, void* nothing)
+{
+ try
+ {
+ return Py_BuildValue("f", (*reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence))->getFPS());
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static int
+Sequence_set_fps(Sequence* self, PyObject* args, void* nothing)
+{
+ float fps;
+
+ if(!PyArg_Parse(args, "f:fps", &fps))
+ return -1;
+
+ try
+ {
+ (*reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence))->setFPS(fps);
+ return 0;
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return -1;
+ }
+}
+
+PyDoc_STRVAR(M_aud_Sequence_muted_doc,
+ "Whether the whole sequence is muted.\n");
+
+static PyObject *
+Sequence_get_muted(Sequence* self, void* nothing)
+{
+ try
+ {
+ std::shared_ptr<aud::Sequence>* sequence = reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence);
+ return PyBool_FromLong((long)(*sequence)->isMuted());
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static int
+Sequence_set_muted(Sequence* self, PyObject* args, void* nothing)
+{
+ if(!PyBool_Check(args))
+ {
+ PyErr_SetString(PyExc_TypeError, "muted is not a boolean!");
+ return -1;
+ }
+
+ bool muted = args == Py_True;
+
+ try
+ {
+ std::shared_ptr<aud::Sequence>* sequence = reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence);
+ (*sequence)->mute(muted);
+ return 0;
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+PyDoc_STRVAR(M_aud_Sequence_rate_doc,
+ "The sampling rate of the sequence in Hz.");
+
+static PyObject *
+Sequence_get_rate(Sequence* self, void* nothing)
+{
+ try
+ {
+ Specs specs = (*reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence))->getSpecs();
+ return Py_BuildValue("d", specs.rate);
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static int
+Sequence_set_rate(Sequence* self, PyObject* args, void* nothing)
+{
+ double rate;
+
+ if(!PyArg_Parse(args, "d:rate", &rate))
+ return -1;
+
+ try
+ {
+ std::shared_ptr<aud::Sequence> sequence = *reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence);
+ Specs specs = sequence->getSpecs();
+ specs.rate = rate;
+ sequence->setSpecs(specs);
+ return 0;
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return -1;
+ }
+}
+
+PyDoc_STRVAR(M_aud_Sequence_speed_of_sound_doc,
+ "The speed of sound of the sequence.\n"
+ "The speed of sound in air is typically 343.3 m/s.");
+
+static PyObject *
+Sequence_get_speed_of_sound(Sequence* self, void* nothing)
+{
+ try
+ {
+ return Py_BuildValue("f", (*reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence))->getSpeedOfSound());
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static int
+Sequence_set_speed_of_sound(Sequence* self, PyObject* args, void* nothing)
+{
+ float speed;
+
+ if(!PyArg_Parse(args, "f:speed_of_sound", &speed))
+ return -1;
+
+ try
+ {
+ (*reinterpret_cast<std::shared_ptr<aud::Sequence>*>(self->sequence))->setSpeedOfSound(speed);
+ return 0;
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return -1;
+ }
+}
+
+static PyGetSetDef Sequence_properties[] = {
+ {(char*)"channels", (getter)Sequence_get_channels, (setter)Sequence_set_channels,
+ M_aud_Sequence_channels_doc, nullptr },
+ {(char*)"distance_model", (getter)Sequence_get_distance_model, (setter)Sequence_set_distance_model,
+ M_aud_Sequence_distance_model_doc, nullptr },
+ {(char*)"doppler_factor", (getter)Sequence_get_doppler_factor, (setter)Sequence_set_doppler_factor,
+ M_aud_Sequence_doppler_factor_doc, nullptr },
+ {(char*)"fps", (getter)Sequence_get_fps, (setter)Sequence_set_fps,
+ M_aud_Sequence_fps_doc, nullptr },
+ {(char*)"muted", (getter)Sequence_get_muted, (setter)Sequence_set_muted,
+ M_aud_Sequence_muted_doc, nullptr },
+ {(char*)"rate", (getter)Sequence_get_rate, (setter)Sequence_set_rate,
+ M_aud_Sequence_rate_doc, nullptr },
+ {(char*)"speed_of_sound", (getter)Sequence_get_speed_of_sound, (setter)Sequence_set_speed_of_sound,
+ M_aud_Sequence_speed_of_sound_doc, nullptr },
+ {nullptr} /* Sentinel */
+};
+
+PyDoc_STRVAR(M_aud_Sequence_doc,
+ "This sound represents sequenced entries to play a sound scene.");
+
+extern PyTypeObject SoundType;
+
+static PyTypeObject SequenceType = {
+ PyVarObject_HEAD_INIT(nullptr, 0)
+ "aud.Sequence", /* tp_name */
+ sizeof(Sequence), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ (destructor)Sequence_dealloc,/* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_reserved */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ 0, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT, /* tp_flags */
+ M_aud_Sequence_doc, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ Sequence_methods, /* tp_methods */
+ 0, /* tp_members */
+ Sequence_properties, /* tp_getset */
+ &SoundType, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ Sequence_new, /* tp_new */
+};
+
+AUD_API PyObject* Sequence_empty()
+{
+ return SequenceType.tp_alloc(&SequenceType, 0);
+}
+
+
+AUD_API Sequence* checkSequence(PyObject* sequence)
+{
+ if(!PyObject_TypeCheck(sequence, &SequenceType))
+ {
+ PyErr_SetString(PyExc_TypeError, "Object is not of type Sequence!");
+ return nullptr;
+ }
+
+ return (Sequence*)sequence;
+}
+
+
+bool initializeSequence()
+{
+ return PyType_Ready(&SequenceType) >= 0;
+}
+
+
+void addSequenceToModule(PyObject* module)
+{
+ Py_INCREF(&SequenceType);
+ PyModule_AddObject(module, "Sequence", (PyObject *)&SequenceType);
+}
diff --git a/extern/audaspace/bindings/python/PySequence.h b/extern/audaspace/bindings/python/PySequence.h
new file mode 100644
index 00000000000..17855121dda
--- /dev/null
+++ b/extern/audaspace/bindings/python/PySequence.h
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+#include <Python.h>
+#include "Audaspace.h"
+
+typedef void Reference_Sequence;
+
+typedef struct {
+ PyObject_HEAD
+ Reference_Sequence* sequence;
+} Sequence;
+
+extern AUD_API PyObject* Sequence_empty();
+extern AUD_API Sequence* checkSequence(PyObject* sequence);
+
+bool initializeSequence();
+void addSequenceToModule(PyObject* module);
diff --git a/extern/audaspace/bindings/python/PySequenceEntry.cpp b/extern/audaspace/bindings/python/PySequenceEntry.cpp
new file mode 100644
index 00000000000..e6a034ed880
--- /dev/null
+++ b/extern/audaspace/bindings/python/PySequenceEntry.cpp
@@ -0,0 +1,740 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "PySequenceEntry.h"
+
+#include "PySound.h"
+
+#include "Exception.h"
+#include "sequence/AnimateableProperty.h"
+#include "sequence/SequenceEntry.h"
+
+#include <structmember.h>
+#include <vector>
+
+using aud::Exception;
+using aud::AnimateableProperty;
+using aud::AnimateablePropertyType;
+using aud::ISound;
+
+extern PyObject* AUDError;
+
+// ====================================================================
+
+static void
+SequenceEntry_dealloc(SequenceEntry* self)
+{
+ if(self->entry)
+ delete reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
+ Py_TYPE(self)->tp_free((PyObject *)self);
+}
+
+PyDoc_STRVAR(M_aud_SequenceEntry_move_doc,
+ "move()\n\n"
+ "Moves the entry.\n\n"
+ ":arg begin: The new start time.\n"
+ ":type begin: float\n"
+ ":arg end: The new end time or a negative value if unknown.\n"
+ ":type end: float\n"
+ ":arg skip: How many seconds to skip at the beginning.\n"
+ ":type skip: float\n");
+
+static PyObject *
+SequenceEntry_move(SequenceEntry* self, PyObject* args)
+{
+ float begin, end, skip;
+
+ if(!PyArg_ParseTuple(args, "fff:move", &begin, &end, &skip))
+ return nullptr;
+
+ try
+ {
+ (*reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry))->move(begin, end, skip);
+ Py_RETURN_NONE;
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+PyDoc_STRVAR(M_aud_SequenceEntry_setAnimationData_doc,
+ "setAnimationData()\n\n"
+ "Writes animation data to a sequenced entry.\n\n"
+ ":arg type: The type of animation data.\n"
+ ":type type: int\n"
+ ":arg frame: The frame this data is for.\n"
+ ":type frame: int\n"
+ ":arg data: The data to write.\n"
+ ":type data: sequence of float\n"
+ ":arg animated: Whether the attribute is animated.\n"
+ ":type animated: bool");
+
+static PyObject *
+SequenceEntry_setAnimationData(SequenceEntry* self, PyObject* args)
+{
+ int type, frame;
+ PyObject* py_data;
+ Py_ssize_t py_data_len;
+ PyObject* animatedo;
+ bool animated;
+
+ if(!PyArg_ParseTuple(args, "iiOO:setAnimationData", &type, &frame, &py_data, &animatedo))
+ return nullptr;
+
+ if(!PySequence_Check(py_data))
+ {
+ PyErr_SetString(PyExc_TypeError, "Parameter is not a sequence!");
+ return nullptr;
+ }
+
+ py_data_len= PySequence_Size(py_data);
+
+ std::vector<float> data;
+ data.resize(py_data_len);
+
+ PyObject* py_value;
+ float value;
+
+ for(Py_ssize_t i = 0; i < py_data_len; i++)
+ {
+ py_value = PySequence_GetItem(py_data, i);
+ value= (float)PyFloat_AsDouble(py_value);
+ Py_DECREF(py_value);
+
+ if(value == -1.0f && PyErr_Occurred()) {
+ return nullptr;
+ }
+
+ data.push_back(value);
+ }
+
+ if(!PyBool_Check(animatedo))
+ {
+ PyErr_SetString(PyExc_TypeError, "animated is not a boolean!");
+ return nullptr;
+ }
+
+ animated = animatedo == Py_True;
+
+ try
+ {
+ AnimateableProperty* prop = (*reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry))->getAnimProperty(static_cast<AnimateablePropertyType>(type));
+
+ if(prop->getCount() != py_data_len)
+ {
+ PyErr_SetString(PyExc_ValueError, "the amount of floats doesn't fit the animated property");
+ return nullptr;
+ }
+
+ if(animated)
+ {
+ if(frame >= 0)
+ prop->write(&data[0], frame, 1);
+ }
+ else
+ {
+ prop->write(&data[0]);
+ }
+ Py_RETURN_NONE;
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static PyMethodDef SequenceEntry_methods[] = {
+ {"move", (PyCFunction)SequenceEntry_move, METH_VARARGS,
+ M_aud_SequenceEntry_move_doc
+ },
+ {"setAnimationData", (PyCFunction)SequenceEntry_setAnimationData, METH_VARARGS,
+ M_aud_SequenceEntry_setAnimationData_doc
+ },
+ {nullptr} /* Sentinel */
+};
+
+PyDoc_STRVAR(M_aud_SequenceEntry_attenuation_doc,
+ "This factor is used for distance based attenuation of the "
+ "source.\n\n"
+ ".. seealso:: :attr:`Device.distance_model`");
+
+static PyObject *
+SequenceEntry_get_attenuation(SequenceEntry* self, void* nothing)
+{
+ try
+ {
+ std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
+ return Py_BuildValue("f", (*entry)->getAttenuation());
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static int
+SequenceEntry_set_attenuation(SequenceEntry* self, PyObject* args, void* nothing)
+{
+ float factor;
+
+ if(!PyArg_Parse(args, "f:attenuation", &factor))
+ return -1;
+
+ try
+ {
+ std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
+ (*entry)->setAttenuation(factor);
+ return 0;
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+PyDoc_STRVAR(M_aud_SequenceEntry_cone_angle_inner_doc,
+ "The opening angle of the inner cone of the source. If the cone "
+ "values of a source are set there are two (audible) cones with "
+ "the apex at the :attr:`location` of the source and with infinite "
+ "height, heading in the direction of the source's "
+ ":attr:`orientation`.\n"
+ "In the inner cone the volume is normal. Outside the outer cone "
+ "the volume will be :attr:`cone_volume_outer` and in the area "
+ "between the volume will be interpolated linearly.");
+
+static PyObject *
+SequenceEntry_get_cone_angle_inner(SequenceEntry* self, void* nothing)
+{
+ try
+ {
+ std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
+ return Py_BuildValue("f", (*entry)->getConeAngleInner());
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static int
+SequenceEntry_set_cone_angle_inner(SequenceEntry* self, PyObject* args, void* nothing)
+{
+ float angle;
+
+ if(!PyArg_Parse(args, "f:cone_angle_inner", &angle))
+ return -1;
+
+ try
+ {
+ std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
+ (*entry)->setConeAngleInner(angle);
+ return 0;
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+PyDoc_STRVAR(M_aud_SequenceEntry_cone_angle_outer_doc,
+ "The opening angle of the outer cone of the source.\n\n"
+ ".. seealso:: :attr:`cone_angle_inner`");
+
+static PyObject *
+SequenceEntry_get_cone_angle_outer(SequenceEntry* self, void* nothing)
+{
+ try
+ {
+ std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
+ return Py_BuildValue("f", (*entry)->getConeAngleOuter());
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static int
+SequenceEntry_set_cone_angle_outer(SequenceEntry* self, PyObject* args, void* nothing)
+{
+ float angle;
+
+ if(!PyArg_Parse(args, "f:cone_angle_outer", &angle))
+ return -1;
+
+ try
+ {
+ std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
+ (*entry)->setConeAngleOuter(angle);
+ return 0;
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+PyDoc_STRVAR(M_aud_SequenceEntry_cone_volume_outer_doc,
+ "The volume outside the outer cone of the source.\n\n"
+ ".. seealso:: :attr:`cone_angle_inner`");
+
+static PyObject *
+SequenceEntry_get_cone_volume_outer(SequenceEntry* self, void* nothing)
+{
+ try
+ {
+ std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
+ return Py_BuildValue("f", (*entry)->getConeVolumeOuter());
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static int
+SequenceEntry_set_cone_volume_outer(SequenceEntry* self, PyObject* args, void* nothing)
+{
+ float volume;
+
+ if(!PyArg_Parse(args, "f:cone_volume_outer", &volume))
+ return -1;
+
+ try
+ {
+ std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
+ (*entry)->setConeVolumeOuter(volume);
+ return 0;
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+PyDoc_STRVAR(M_aud_SequenceEntry_distance_maximum_doc,
+ "The maximum distance of the source.\n"
+ "If the listener is further away the source volume will be 0.\n\n"
+ ".. seealso:: :attr:`Device.distance_model`");
+
+static PyObject *
+SequenceEntry_get_distance_maximum(SequenceEntry* self, void* nothing)
+{
+ try
+ {
+ std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
+ return Py_BuildValue("f", (*entry)->getDistanceMaximum());
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static int
+SequenceEntry_set_distance_maximum(SequenceEntry* self, PyObject* args, void* nothing)
+{
+ float distance;
+
+ if(!PyArg_Parse(args, "f:distance_maximum", &distance))
+ return -1;
+
+ try
+ {
+ std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
+ (*entry)->setDistanceMaximum(distance);
+ return 0;
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+PyDoc_STRVAR(M_aud_SequenceEntry_distance_reference_doc,
+ "The reference distance of the source.\n"
+ "At this distance the volume will be exactly :attr:`volume`.\n\n"
+ ".. seealso:: :attr:`Device.distance_model`");
+
+static PyObject *
+SequenceEntry_get_distance_reference(SequenceEntry* self, void* nothing)
+{
+ try
+ {
+ std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
+ return Py_BuildValue("f", (*entry)->getDistanceReference());
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static int
+SequenceEntry_set_distance_reference(SequenceEntry* self, PyObject* args, void* nothing)
+{
+ float distance;
+
+ if(!PyArg_Parse(args, "f:distance_reference", &distance))
+ return -1;
+
+ try
+ {
+ std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
+ (*entry)->setDistanceReference(distance);
+ return 0;
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+PyDoc_STRVAR(M_aud_SequenceEntry_muted_doc,
+ "Whether the entry is muted.\n");
+
+static PyObject *
+SequenceEntry_get_muted(SequenceEntry* self, void* nothing)
+{
+ try
+ {
+ std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
+ return PyBool_FromLong((long)(*entry)->isMuted());
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static int
+SequenceEntry_set_muted(SequenceEntry* self, PyObject* args, void* nothing)
+{
+ if(!PyBool_Check(args))
+ {
+ PyErr_SetString(PyExc_TypeError, "muted is not a boolean!");
+ return -1;
+ }
+
+ bool muted = args == Py_True;
+
+ try
+ {
+ std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
+ (*entry)->mute(muted);
+ return 0;
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+PyDoc_STRVAR(M_aud_SequenceEntry_relative_doc,
+ "Whether the source's location, velocity and orientation is relative or absolute to the listener.");
+
+static PyObject *
+SequenceEntry_get_relative(SequenceEntry* self, void* nothing)
+{
+ try
+ {
+ std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
+ return PyBool_FromLong((long)(*entry)->isRelative());
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return nullptr;
+}
+
+static int
+SequenceEntry_set_relative(SequenceEntry* self, PyObject* args, void* nothing)
+{
+ if(!PyBool_Check(args))
+ {
+ PyErr_SetString(PyExc_TypeError, "Value is not a boolean!");
+ return -1;
+ }
+
+ bool relative = (args == Py_True);
+
+ try
+ {
+ std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
+ (*entry)->setRelative(relative);
+ return 0;
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+PyDoc_STRVAR(M_aud_SequenceEntry_sound_doc,
+ "The sound the entry is representing and will be played in the sequence.");
+
+static PyObject *
+SequenceEntry_get_sound(SequenceEntry* self, void* nothing)
+{
+ try
+ {
+ std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
+ Sound* object = (Sound*) Sound_empty();
+ if(object)
+ {
+ object->sound = new std::shared_ptr<ISound>((*entry)->getSound());
+ return (PyObject *) object;
+ }
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return nullptr;
+}
+
+static int
+SequenceEntry_set_sound(SequenceEntry* self, PyObject* args, void* nothing)
+{
+ Sound* sound = checkSound(args);
+
+ if(!sound)
+ return -1;
+
+ try
+ {
+ std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
+ (*entry)->setSound(*reinterpret_cast<std::shared_ptr<ISound>*>(sound->sound));
+ return 0;
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+PyDoc_STRVAR(M_aud_SequenceEntry_volume_maximum_doc,
+ "The maximum volume of the source.\n\n"
+ ".. seealso:: :attr:`Device.distance_model`");
+
+static PyObject *
+SequenceEntry_get_volume_maximum(SequenceEntry* self, void* nothing)
+{
+ try
+ {
+ std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
+ return Py_BuildValue("f", (*entry)->getVolumeMaximum());
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static int
+SequenceEntry_set_volume_maximum(SequenceEntry* self, PyObject* args, void* nothing)
+{
+ float volume;
+
+ if(!PyArg_Parse(args, "f:volume_maximum", &volume))
+ return -1;
+
+ try
+ {
+ std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
+ (*entry)->setVolumeMaximum(volume);
+ return 0;
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+PyDoc_STRVAR(M_aud_SequenceEntry_volume_minimum_doc,
+ "The minimum volume of the source.\n\n"
+ ".. seealso:: :attr:`Device.distance_model`");
+
+static PyObject *
+SequenceEntry_get_volume_minimum(SequenceEntry* self, void* nothing)
+{
+ try
+ {
+ std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
+ return Py_BuildValue("f", (*entry)->getVolumeMinimum());
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static int
+SequenceEntry_set_volume_minimum(SequenceEntry* self, PyObject* args, void* nothing)
+{
+ float volume;
+
+ if(!PyArg_Parse(args, "f:volume_minimum", &volume))
+ return -1;
+
+ try
+ {
+ std::shared_ptr<aud::SequenceEntry>* entry = reinterpret_cast<std::shared_ptr<aud::SequenceEntry>*>(self->entry);
+ (*entry)->setVolumeMinimum(volume);
+ return 0;
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+static PyGetSetDef SequenceEntry_properties[] = {
+ {(char*)"attenuation", (getter)SequenceEntry_get_attenuation, (setter)SequenceEntry_set_attenuation,
+ M_aud_SequenceEntry_attenuation_doc, nullptr },
+ {(char*)"cone_angle_inner", (getter)SequenceEntry_get_cone_angle_inner, (setter)SequenceEntry_set_cone_angle_inner,
+ M_aud_SequenceEntry_cone_angle_inner_doc, nullptr },
+ {(char*)"cone_angle_outer", (getter)SequenceEntry_get_cone_angle_outer, (setter)SequenceEntry_set_cone_angle_outer,
+ M_aud_SequenceEntry_cone_angle_outer_doc, nullptr },
+ {(char*)"cone_volume_outer", (getter)SequenceEntry_get_cone_volume_outer, (setter)SequenceEntry_set_cone_volume_outer,
+ M_aud_SequenceEntry_cone_volume_outer_doc, nullptr },
+ {(char*)"distance_maximum", (getter)SequenceEntry_get_distance_maximum, (setter)SequenceEntry_set_distance_maximum,
+ M_aud_SequenceEntry_distance_maximum_doc, nullptr },
+ {(char*)"distance_reference", (getter)SequenceEntry_get_distance_reference, (setter)SequenceEntry_set_distance_reference,
+ M_aud_SequenceEntry_distance_reference_doc, nullptr },
+ {(char*)"muted", (getter)SequenceEntry_get_muted, (setter)SequenceEntry_set_muted,
+ M_aud_SequenceEntry_muted_doc, nullptr },
+ {(char*)"relative", (getter)SequenceEntry_get_relative, (setter)SequenceEntry_set_relative,
+ M_aud_SequenceEntry_relative_doc, nullptr },
+ {(char*)"sound", (getter)SequenceEntry_get_sound, (setter)SequenceEntry_set_sound,
+ M_aud_SequenceEntry_sound_doc, nullptr },
+ {(char*)"volume_maximum", (getter)SequenceEntry_get_volume_maximum, (setter)SequenceEntry_set_volume_maximum,
+ M_aud_SequenceEntry_volume_maximum_doc, nullptr },
+ {(char*)"volume_minimum", (getter)SequenceEntry_get_volume_minimum, (setter)SequenceEntry_set_volume_minimum,
+ M_aud_SequenceEntry_volume_minimum_doc, nullptr },
+ {nullptr} /* Sentinel */
+};
+
+PyDoc_STRVAR(M_aud_SequenceEntry_doc,
+ "SequenceEntry objects represent an entry of a sequenced sound.");
+
+static PyTypeObject SequenceEntryType = {
+ PyVarObject_HEAD_INIT(nullptr, 0)
+ "aud.SequenceEntry", /* tp_name */
+ sizeof(SequenceEntry), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ (destructor)SequenceEntry_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_reserved */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ 0, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT, /* tp_flags */
+ M_aud_SequenceEntry_doc, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ SequenceEntry_methods, /* tp_methods */
+ 0, /* tp_members */
+ SequenceEntry_properties, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ 0, /* tp_new */
+};
+
+AUD_API PyObject* SequenceEntry_empty()
+{
+ return SequenceEntryType.tp_alloc(&SequenceEntryType, 0);
+}
+
+
+AUD_API SequenceEntry* checkSequenceEntry(PyObject* entry)
+{
+ if(!PyObject_TypeCheck(entry, &SequenceEntryType))
+ {
+ PyErr_SetString(PyExc_TypeError, "Object is not of type SequenceEntry!");
+ return nullptr;
+ }
+
+ return (SequenceEntry*)entry;
+}
+
+
+bool initializeSequenceEntry()
+{
+ return PyType_Ready(&SequenceEntryType) >= 0;
+}
+
+
+void addSequenceEntryToModule(PyObject* module)
+{
+ Py_INCREF(&SequenceEntryType);
+ PyModule_AddObject(module, "SequenceEntry", (PyObject *)&SequenceEntryType);
+}
diff --git a/extern/audaspace/bindings/python/PySequenceEntry.h b/extern/audaspace/bindings/python/PySequenceEntry.h
new file mode 100644
index 00000000000..7bb4ae4a281
--- /dev/null
+++ b/extern/audaspace/bindings/python/PySequenceEntry.h
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+#include <Python.h>
+#include "Audaspace.h"
+
+typedef void Reference_SequenceEntry;
+
+typedef struct {
+ PyObject_HEAD
+ Reference_SequenceEntry* entry;
+} SequenceEntry;
+
+extern AUD_API PyObject* SequenceEntry_empty();
+extern AUD_API SequenceEntry* checkSequenceEntry(PyObject* entry);
+
+bool initializeSequenceEntry();
+void addSequenceEntryToModule(PyObject* module);
diff --git a/extern/audaspace/bindings/python/PySound.cpp b/extern/audaspace/bindings/python/PySound.cpp
new file mode 100644
index 00000000000..2ab1974be49
--- /dev/null
+++ b/extern/audaspace/bindings/python/PySound.cpp
@@ -0,0 +1,1966 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "PySound.h"
+#include "PySource.h"
+#include "PyThreadPool.h"
+
+#ifdef WITH_CONVOLUTION
+#include "PyHRTF.h"
+#include "PyImpulseResponse.h"
+#endif
+
+#include "Exception.h"
+#include "file/File.h"
+#include "file/FileWriter.h"
+#include "util/StreamBuffer.h"
+#include "generator/Sawtooth.h"
+#include "generator/Silence.h"
+#include "generator/Sine.h"
+#include "generator/Square.h"
+#include "generator/Triangle.h"
+#include "fx/Accumulator.h"
+#include "fx/ADSR.h"
+#include "fx/Delay.h"
+#include "fx/Envelope.h"
+#include "fx/Fader.h"
+#include "fx/Highpass.h"
+#include "fx/IIRFilter.h"
+#include "fx/Limiter.h"
+#include "fx/Loop.h"
+#include "fx/Lowpass.h"
+#include "fx/MutableSound.h"
+#include "fx/Pitch.h"
+#include "fx/Reverse.h"
+#include "fx/SoundList.h"
+#include "fx/Sum.h"
+#include "fx/Threshold.h"
+#include "fx/Volume.h"
+#include "respec/ChannelMapper.h"
+#include "respec/ChannelMapperReader.h"
+#include "respec/LinearResample.h"
+#include "respec/JOSResample.h"
+#include "respec/JOSResampleReader.h"
+#include "sequence/Double.h"
+#include "sequence/PingPong.h"
+#include "sequence/Superpose.h"
+
+#ifdef WITH_CONVOLUTION
+#include "fx/BinauralSound.h"
+#include "fx/ConvolverSound.h"
+#endif
+
+#include <cstring>
+#include <structmember.h>
+#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
+#include <numpy/ndarrayobject.h>
+
+using namespace aud;
+
+extern PyObject* AUDError;
+
+static void
+Sound_dealloc(Sound* self)
+{
+ if(self->sound)
+ delete reinterpret_cast<std::shared_ptr<ISound>*>(self->sound);
+ Py_TYPE(self)->tp_free((PyObject *)self);
+}
+
+static PyObject *
+Sound_new(PyTypeObject* type, PyObject* args, PyObject* kwds)
+{
+ Sound* self;
+
+ self = (Sound*)type->tp_alloc(type, 0);
+ if(self != nullptr)
+ {
+ static const char* kwlist[] = {"filename", nullptr};
+ const char* filename = nullptr;
+
+ if(!PyArg_ParseTupleAndKeywords(args, kwds, "s:Sound", const_cast<char**>(kwlist), &filename))
+ {
+ Py_DECREF(self);
+ return nullptr;
+ }
+
+ try
+ {
+ self->sound = new std::shared_ptr<ISound>(new File(filename));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(self);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)self;
+}
+
+PyDoc_STRVAR(M_aud_Sound_data_doc,
+ "data()\n\n"
+ "Retrieves the data of the sound as numpy array.\n\n"
+ ":return: A two dimensional numpy float array.\n"
+ ":rtype: :class:`numpy.ndarray`\n\n"
+ ".. note:: Best efficiency with cached sounds.");
+
+static PyObject *
+Sound_data(Sound* self)
+{
+ std::shared_ptr<ISound> sound = *reinterpret_cast<std::shared_ptr<ISound>*>(self->sound);
+
+ auto stream_buffer = std::dynamic_pointer_cast<StreamBuffer>(sound);
+ if(!stream_buffer)
+ stream_buffer = std::make_shared<StreamBuffer>(sound);
+ Specs specs = stream_buffer->getSpecs();
+ auto buffer = stream_buffer->getBuffer();
+
+ npy_intp dimensions[2];
+ dimensions[0] = buffer->getSize() / AUD_SAMPLE_SIZE(specs);
+ dimensions[1] = specs.channels;
+
+ PyArrayObject* array = reinterpret_cast<PyArrayObject*>(PyArray_SimpleNew(2, dimensions, NPY_FLOAT));
+
+ sample_t* data = reinterpret_cast<sample_t*>(PyArray_DATA(array));
+
+ std::memcpy(data, buffer->getBuffer(), buffer->getSize());
+
+ Py_INCREF(array);
+
+ return reinterpret_cast<PyObject*>(array);
+}
+
+PyDoc_STRVAR(M_aud_Sound_write_doc,
+ "write(filename, rate, channels, format, container, codec, bitrate, buffersize)\n\n"
+ "Writes the sound to a file.\n\n"
+ ":arg filename: The path to write to.\n"
+ ":type filename: string\n"
+ ":arg rate: The sample rate to write with.\n"
+ ":type rate: int\n"
+ ":arg channels: The number of channels to write with.\n"
+ ":type channels: int\n"
+ ":arg format: The sample format to write with.\n"
+ ":type format: int\n"
+ ":arg container: The container format for the file.\n"
+ ":type container: int\n"
+ ":arg codec: The codec to use in the file.\n"
+ ":type codec: int\n"
+ ":arg bitrate: The bitrate to write with.\n"
+ ":type bitrate: int\n"
+ ":arg buffersize: The size of the writing buffer.\n"
+ ":type buffersize: int\n");
+
+static PyObject *
+Sound_write(Sound* self, PyObject* args, PyObject* kwds)
+{
+ const char* filename = nullptr;
+ int rate = RATE_INVALID;
+ Channels channels = CHANNELS_INVALID;
+ SampleFormat format = FORMAT_INVALID;
+ Container container = CONTAINER_INVALID;
+ Codec codec = CODEC_INVALID;
+ int bitrate = 0;
+ int buffersize = 0;
+
+ static const char* kwlist[] = {"filename", "rate", "channels", "format", "container", "codec", "bitrate", "buffersize", nullptr};
+
+ if(!PyArg_ParseTupleAndKeywords(args, kwds, "s|iiiiiii:write", const_cast<char**>(kwlist), &filename, &rate, &channels, &format, &container, &codec, &bitrate, &buffersize))
+ return nullptr;
+
+ try
+ {
+ std::shared_ptr<IReader> reader = (*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound))->createReader();
+
+ DeviceSpecs specs;
+ specs.specs = reader->getSpecs();
+
+ if((rate != RATE_INVALID) && (specs.rate != rate))
+ {
+ specs.rate = rate;
+ reader = std::make_shared<JOSResampleReader>(reader, rate);
+ }
+
+ if((channels != CHANNELS_INVALID) && (specs.channels != channels))
+ {
+ specs.channels = channels;
+ reader = std::make_shared<ChannelMapperReader>(reader, channels);
+ }
+
+ if(format == FORMAT_INVALID)
+ format = FORMAT_S16;
+ specs.format = format;
+
+ const char* invalid_container_error = "Container could not be determined from filename.";
+
+ if(container == CONTAINER_INVALID)
+ {
+ std::string path = filename;
+
+ if(path.length() < 4)
+ {
+ PyErr_SetString(AUDError, invalid_container_error);
+ return nullptr;
+ }
+
+ std::string extension = path.substr(path.length() - 4);
+
+ if(extension == ".ac3")
+ container = CONTAINER_AC3;
+ else if(extension == "flac")
+ container = CONTAINER_FLAC;
+ else if(extension == ".mkv")
+ container = CONTAINER_MATROSKA;
+ else if(extension == ".mp2")
+ container = CONTAINER_MP2;
+ else if(extension == ".mp3")
+ container = CONTAINER_MP3;
+ else if(extension == ".ogg")
+ container = CONTAINER_OGG;
+ else if(extension == ".wav")
+ container = CONTAINER_WAV;
+ else
+ {
+ PyErr_SetString(AUDError, invalid_container_error);
+ return nullptr;
+ }
+ }
+
+ if(codec == CODEC_INVALID)
+ {
+ switch(container)
+ {
+ case CONTAINER_AC3:
+ codec = CODEC_AC3;
+ break;
+ case CONTAINER_FLAC:
+ codec = CODEC_FLAC;
+ break;
+ case CONTAINER_MATROSKA:
+ codec = CODEC_OPUS;
+ break;
+ case CONTAINER_MP2:
+ codec = CODEC_MP2;
+ break;
+ case CONTAINER_MP3:
+ codec = CODEC_MP3;
+ break;
+ case CONTAINER_OGG:
+ codec = CODEC_VORBIS;
+ break;
+ case CONTAINER_WAV:
+ codec = CODEC_PCM;
+ break;
+ default:
+ PyErr_SetString(AUDError, "Unknown container, cannot select default codec.");
+ return nullptr;
+ }
+ }
+
+ if(buffersize <= 0)
+ buffersize = AUD_DEFAULT_BUFFER_SIZE;
+
+ std::shared_ptr<IWriter> writer = FileWriter::createWriter(filename, specs, container, codec, bitrate);
+ FileWriter::writeReader(reader, writer, 0, buffersize);
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+
+ Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(M_aud_Sound_buffer_doc,
+ "buffer(data, rate)\n\n"
+ "Creates a sound from a data buffer.\n\n"
+ ":arg data: The data as two dimensional numpy array.\n"
+ ":type data: numpy.ndarray\n"
+ ":arg rate: The sample rate.\n"
+ ":type rate: double\n"
+ ":return: The created :class:`Sound` object.\n"
+ ":rtype: :class:`Sound`");
+
+static PyObject *
+Sound_buffer(PyTypeObject* type, PyObject* args)
+{
+ PyArrayObject* array = nullptr;
+ double rate = RATE_INVALID;
+
+ if(!PyArg_ParseTuple(args, "Od:buffer", &array, &rate))
+ return nullptr;
+
+ if((!PyObject_TypeCheck(reinterpret_cast<PyObject*>(array), &PyArray_Type)) || (PyArray_TYPE(array) != NPY_FLOAT))
+ {
+ PyErr_SetString(PyExc_TypeError, "The data needs to be supplied as float32 numpy array!");
+ return nullptr;
+ }
+
+ if(PyArray_NDIM(array) > 2)
+ {
+ PyErr_SetString(PyExc_TypeError, "The array needs to have one or two dimensions!");
+ return nullptr;
+ }
+
+ if(rate <= 0)
+ {
+ PyErr_SetString(PyExc_TypeError, "The sample rate has to be positive!");
+ return nullptr;
+ }
+
+ Specs specs;
+ specs.rate = rate;
+ specs.channels = CHANNELS_MONO;
+
+ if(PyArray_NDIM(array) == 2)
+ specs.channels = static_cast<Channels>(PyArray_DIM(array, 1));
+
+ int size = PyArray_DIM(array, 0) * AUD_SAMPLE_SIZE(specs);
+
+ std::shared_ptr<Buffer> buffer = std::make_shared<Buffer>(size);
+
+ std::memcpy(buffer->getBuffer(), PyArray_DATA(array), size);
+
+ Sound* self;
+
+ self = (Sound*)type->tp_alloc(type, 0);
+ if(self != nullptr)
+ {
+ try
+ {
+ self->sound = new std::shared_ptr<StreamBuffer>(new StreamBuffer(buffer, specs));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(self);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)self;
+}
+
+PyDoc_STRVAR(M_aud_Sound_cache_doc,
+ "cache()\n\n"
+ "Caches a sound into RAM.\n"
+ "This saves CPU usage needed for decoding and file access if the "
+ "underlying sound reads from a file on the harddisk, but it "
+ "consumes a lot of memory.\n\n"
+ ":return: The created :class:`Sound` object.\n"
+ ":rtype: :class:`Sound`\n\n"
+ ".. note:: Only known-length factories can be buffered.\n\n"
+ ".. warning:: Raw PCM data needs a lot of space, only buffer "
+ "short factories.");
+
+static PyObject *
+Sound_cache(Sound* self)
+{
+ PyTypeObject* type = Py_TYPE(self);
+ Sound* parent = (Sound*)type->tp_alloc(type, 0);
+
+ if(parent != nullptr)
+ {
+ try
+ {
+ parent->sound = new std::shared_ptr<ISound>(new StreamBuffer(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound)));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(parent);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)parent;
+}
+
+PyDoc_STRVAR(M_aud_Sound_file_doc,
+ "file(filename)\n\n"
+ "Creates a sound object of a sound file.\n\n"
+ ":arg filename: Path of the file.\n"
+ ":type filename: string\n"
+ ":return: The created :class:`Sound` object.\n"
+ ":rtype: :class:`Sound`\n\n"
+ ".. warning:: If the file doesn't exist or can't be read you will "
+ "not get an exception immediately, but when you try to start "
+ "playback of that sound.");
+
+static PyObject *
+Sound_file(PyTypeObject* type, PyObject* args)
+{
+ const char* filename = nullptr;
+
+ if(!PyArg_ParseTuple(args, "s:file", &filename))
+ return nullptr;
+
+ Sound* self;
+
+ self = (Sound*)type->tp_alloc(type, 0);
+ if(self != nullptr)
+ {
+ try
+ {
+ self->sound = new std::shared_ptr<ISound>(new File(filename));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(self);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)self;
+}
+
+PyDoc_STRVAR(M_aud_Sound_sawtooth_doc,
+ "sawtooth(frequency, rate=48000)\n\n"
+ "Creates a sawtooth sound which plays a sawtooth wave.\n\n"
+ ":arg frequency: The frequency of the sawtooth wave in Hz.\n"
+ ":type frequency: float\n"
+ ":arg rate: The sampling rate in Hz. It's recommended to set this "
+ "value to the playback device's samling rate to avoid resamping.\n"
+ ":type rate: int\n"
+ ":return: The created :class:`Sound` object.\n"
+ ":rtype: :class:`Sound`");
+
+static PyObject *
+Sound_sawtooth(PyTypeObject* type, PyObject* args)
+{
+ float frequency;
+ double rate = 48000;
+
+ if(!PyArg_ParseTuple(args, "f|d:sawtooth", &frequency, &rate))
+ return nullptr;
+
+ Sound* self;
+
+ self = (Sound*)type->tp_alloc(type, 0);
+ if(self != nullptr)
+ {
+ try
+ {
+ self->sound = new std::shared_ptr<ISound>(new Sawtooth(frequency, (SampleRate)rate));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(self);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)self;
+}
+
+PyDoc_STRVAR(M_aud_Sound_silence_doc,
+ "silence()\n\n"
+ "Creates a silence sound which plays simple silence.\n\n"
+ ":return: The created :class:`Sound` object.\n"
+ ":rtype: :class:`Sound`");
+
+static PyObject *
+Sound_silence(PyTypeObject* type)
+{
+ Sound* self;
+
+ self = (Sound*)type->tp_alloc(type, 0);
+ if(self != nullptr)
+ {
+ try
+ {
+ self->sound = new std::shared_ptr<ISound>(new Silence());
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(self);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)self;
+}
+
+PyDoc_STRVAR(M_aud_Sound_sine_doc,
+ "sine(frequency, rate=48000)\n\n"
+ "Creates a sine sound which plays a sine wave.\n\n"
+ ":arg frequency: The frequency of the sine wave in Hz.\n"
+ ":type frequency: float\n"
+ ":arg rate: The sampling rate in Hz. It's recommended to set this "
+ "value to the playback device's samling rate to avoid resamping.\n"
+ ":type rate: int\n"
+ ":return: The created :class:`Sound` object.\n"
+ ":rtype: :class:`Sound`");
+
+static PyObject *
+Sound_sine(PyTypeObject* type, PyObject* args)
+{
+ float frequency;
+ double rate = 48000;
+
+ if(!PyArg_ParseTuple(args, "f|d:sine", &frequency, &rate))
+ return nullptr;
+
+ Sound* self;
+
+ self = (Sound*)type->tp_alloc(type, 0);
+ if(self != nullptr)
+ {
+ try
+ {
+ self->sound = new std::shared_ptr<ISound>(new Sine(frequency, (SampleRate)rate));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(self);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)self;
+}
+
+PyDoc_STRVAR(M_aud_Sound_square_doc,
+ "square(frequency, rate=48000)\n\n"
+ "Creates a square sound which plays a square wave.\n\n"
+ ":arg frequency: The frequency of the square wave in Hz.\n"
+ ":type frequency: float\n"
+ ":arg rate: The sampling rate in Hz. It's recommended to set this "
+ "value to the playback device's samling rate to avoid resamping.\n"
+ ":type rate: int\n"
+ ":return: The created :class:`Sound` object.\n"
+ ":rtype: :class:`Sound`");
+
+static PyObject *
+Sound_square(PyTypeObject* type, PyObject* args)
+{
+ float frequency;
+ double rate = 48000;
+
+ if(!PyArg_ParseTuple(args, "f|d:square", &frequency, &rate))
+ return nullptr;
+
+ Sound* self;
+
+ self = (Sound*)type->tp_alloc(type, 0);
+ if(self != nullptr)
+ {
+ try
+ {
+ self->sound = new std::shared_ptr<ISound>(new Square(frequency, (SampleRate)rate));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(self);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)self;
+}
+
+PyDoc_STRVAR(M_aud_Sound_triangle_doc,
+ "triangle(frequency, rate=48000)\n\n"
+ "Creates a triangle sound which plays a triangle wave.\n\n"
+ ":arg frequency: The frequency of the triangle wave in Hz.\n"
+ ":type frequency: float\n"
+ ":arg rate: The sampling rate in Hz. It's recommended to set this "
+ "value to the playback device's samling rate to avoid resamping.\n"
+ ":type rate: int\n"
+ ":return: The created :class:`Sound` object.\n"
+ ":rtype: :class:`Sound`");
+
+static PyObject *
+Sound_triangle(PyTypeObject* type, PyObject* args)
+{
+ float frequency;
+ double rate = 48000;
+
+ if(!PyArg_ParseTuple(args, "f|d:triangle", &frequency, &rate))
+ return nullptr;
+
+ Sound* self;
+
+ self = (Sound*)type->tp_alloc(type, 0);
+ if(self != nullptr)
+ {
+ try
+ {
+ self->sound = new std::shared_ptr<ISound>(new Triangle(frequency, (SampleRate)rate));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(self);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)self;
+}
+
+PyDoc_STRVAR(M_aud_Sound_accumulate_doc,
+ "accumulate(additive=False)\n\n"
+ "Accumulates a sound by summing over positive input differences thus generating a monotonic sigal. "
+ "If additivity is set to true negative input differences get added too, but positive ones with a factor of two. "
+ "Note that with additivity the signal is not monotonic anymore.\n\n"
+ ":arg additive: Whether the accumulation should be additive or not.\n"
+ ":type time: bool\n"
+ ":return: The created :class:`Sound` object.\n"
+ ":rtype: :class:`Sound`");
+
+static PyObject *
+Sound_accumulate(Sound* self, PyObject* args)
+{
+ bool additive = false;
+ PyObject* additiveo;
+
+ if(!PyArg_ParseTuple(args, "|O:accumulate", &additiveo))
+ return nullptr;
+
+ PyTypeObject* type = Py_TYPE(self);
+ Sound* parent = (Sound*)type->tp_alloc(type, 0);
+
+ if(parent != nullptr)
+ {
+ if(additiveo != nullptr)
+ {
+ if(!PyBool_Check(additiveo))
+ {
+ PyErr_SetString(PyExc_TypeError, "additive is not a boolean!");
+ return nullptr;
+ }
+
+ additive = additiveo == Py_True;
+ }
+
+ try
+ {
+ parent->sound = new std::shared_ptr<ISound>(new Accumulator(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), additive));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(parent);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)parent;
+}
+
+PyDoc_STRVAR(M_aud_Sound_ADSR_doc,
+ "ADSR(attack,decay,sustain,release)\n\n"
+ "Attack-Decay-Sustain-Release envelopes the volume of a sound. "
+ "Note: there is currently no way to trigger the release with this API.\n\n"
+ ":arg attack: The attack time in seconds.\n"
+ ":type attack: float\n"
+ ":arg decay: The decay time in seconds.\n"
+ ":type decay: float\n"
+ ":arg sustain: The sustain level.\n"
+ ":type sustain: float\n"
+ ":arg release: The release level.\n"
+ ":type release: float\n"
+ ":return: The created :class:`Sound` object.\n"
+ ":rtype: :class:`Sound`");
+
+static PyObject *
+Sound_ADSR(Sound* self, PyObject* args)
+{
+ float attack, decay, sustain, release;
+
+ if(!PyArg_ParseTuple(args, "ffff:ADSR", &attack, &decay, &sustain, &release))
+ return nullptr;
+
+ PyTypeObject* type = Py_TYPE(self);
+ Sound* parent = (Sound*)type->tp_alloc(type, 0);
+
+ if(parent != nullptr)
+ {
+ try
+ {
+ parent->sound = new std::shared_ptr<ISound>(new ADSR(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), attack, decay, sustain, release));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(parent);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)parent;
+}
+
+PyDoc_STRVAR(M_aud_Sound_delay_doc,
+ "delay(time)\n\n"
+ "Delays by playing adding silence in front of the other sound's "
+ "data.\n\n"
+ ":arg time: How many seconds of silence should be added before "
+ "the sound.\n"
+ ":type time: float\n"
+ ":return: The created :class:`Sound` object.\n"
+ ":rtype: :class:`Sound`");
+
+static PyObject *
+Sound_delay(Sound* self, PyObject* args)
+{
+ float delay;
+
+ if(!PyArg_ParseTuple(args, "f:delay", &delay))
+ return nullptr;
+
+ PyTypeObject* type = Py_TYPE(self);
+ Sound* parent = (Sound*)type->tp_alloc(type, 0);
+
+ if(parent != nullptr)
+ {
+ try
+ {
+ parent->sound = new std::shared_ptr<ISound>(new Delay(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), delay));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(parent);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)parent;
+}
+
+PyDoc_STRVAR(M_aud_Sound_envelope_doc,
+ "envelope(attack, release, threshold, arthreshold)\n\n"
+ "Delays by playing adding silence in front of the other sound's "
+ "data.\n\n"
+ ":arg attack: The attack factor.\n"
+ ":type attack: float\n"
+ ":arg release: The release factor.\n"
+ ":type release: float\n"
+ ":arg threshold: The general threshold value.\n"
+ ":type threshold: float\n"
+ ":arg arthreshold: The attack/release threshold value.\n"
+ ":type arthreshold: float\n"
+ ":return: The created :class:`Sound` object.\n"
+ ":rtype: :class:`Sound`");
+
+static PyObject *
+Sound_envelope(Sound* self, PyObject* args)
+{
+ float attack, release, threshold, arthreshold;
+
+ if(!PyArg_ParseTuple(args, "ffff:envelope", &attack, &release, &threshold, &arthreshold))
+ return nullptr;
+
+ PyTypeObject* type = Py_TYPE(self);
+ Sound* parent = (Sound*)type->tp_alloc(type, 0);
+
+ if(parent != nullptr)
+ {
+ try
+ {
+ parent->sound = new std::shared_ptr<ISound>(new Envelope(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), attack, release, threshold, arthreshold));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(parent);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)parent;
+}
+
+PyDoc_STRVAR(M_aud_Sound_fadein_doc,
+ "fadein(start, length)\n\n"
+ "Fades a sound in by raising the volume linearly in the given "
+ "time interval.\n\n"
+ ":arg start: Time in seconds when the fading should start.\n"
+ ":type start: float\n"
+ ":arg length: Time in seconds how long the fading should last.\n"
+ ":type length: float\n"
+ ":return: The created :class:`Sound` object.\n"
+ ":rtype: :class:`Sound`\n\n"
+ ".. note:: Before the fade starts it plays silence.");
+
+static PyObject *
+Sound_fadein(Sound* self, PyObject* args)
+{
+ float start, length;
+
+ if(!PyArg_ParseTuple(args, "ff:fadein", &start, &length))
+ return nullptr;
+
+ PyTypeObject* type = Py_TYPE(self);
+ Sound* parent = (Sound*)type->tp_alloc(type, 0);
+
+ if(parent != nullptr)
+ {
+ try
+ {
+ parent->sound = new std::shared_ptr<ISound>(new Fader(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), FADE_IN, start, length));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(parent);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)parent;
+}
+
+PyDoc_STRVAR(M_aud_Sound_fadeout_doc,
+ "fadeout(start, length)\n\n"
+ "Fades a sound in by lowering the volume linearly in the given "
+ "time interval.\n\n"
+ ":arg start: Time in seconds when the fading should start.\n"
+ ":type start: float\n"
+ ":arg length: Time in seconds how long the fading should last.\n"
+ ":type length: float\n"
+ ":return: The created :class:`Sound` object.\n"
+ ":rtype: :class:`Sound`\n\n"
+ ".. note:: After the fade this sound plays silence, so that "
+ "the length of the sound is not altered.");
+
+static PyObject *
+Sound_fadeout(Sound* self, PyObject* args)
+{
+ float start, length;
+
+ if(!PyArg_ParseTuple(args, "ff:fadeout", &start, &length))
+ return nullptr;
+
+ PyTypeObject* type = Py_TYPE(self);
+ Sound* parent = (Sound*)type->tp_alloc(type, 0);
+
+ if(parent != nullptr)
+ {
+ try
+ {
+ parent->sound = new std::shared_ptr<ISound>(new Fader(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), FADE_OUT, start, length));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(parent);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)parent;
+}
+
+PyDoc_STRVAR(M_aud_Sound_filter_doc,
+ "filter(b, a = (1))\n\n"
+ "Filters a sound with the supplied IIR filter coefficients.\n"
+ "Without the second parameter you'll get a FIR filter.\n"
+ "If the first value of the a sequence is 0 it will be set to 1 "
+ "automatically.\n"
+ "If the first value of the a sequence is neither 0 nor 1, all "
+ "filter coefficients will be scaled by this value so that it is 1 "
+ "in the end, you don't have to scale yourself.\n\n"
+ ":arg b: The nominator filter coefficients.\n"
+ ":type b: sequence of float\n"
+ ":arg a: The denominator filter coefficients.\n"
+ ":type a: sequence of float\n"
+ ":return: The created :class:`Sound` object.\n"
+ ":rtype: :class:`Sound`");
+
+static PyObject *
+Sound_filter(Sound* self, PyObject* args)
+{
+ PyObject* py_b;
+ PyObject* py_a = nullptr;
+ Py_ssize_t py_a_len;
+ Py_ssize_t py_b_len;
+
+ if(!PyArg_ParseTuple(args, "O|O:filter", &py_b, &py_a))
+ return nullptr;
+
+ if(!PySequence_Check(py_b) || (py_a != nullptr && !PySequence_Check(py_a)))
+ {
+ PyErr_SetString(PyExc_TypeError, "Parameter is not a sequence!");
+ return nullptr;
+ }
+
+ py_a_len= py_a ? PySequence_Size(py_a) : 0;
+ py_b_len= PySequence_Size(py_b);
+
+ if(!py_b_len || ((py_a != nullptr) && !py_a_len))
+ {
+ PyErr_SetString(PyExc_ValueError, "The sequence has to contain at least one value!");
+ return nullptr;
+ }
+
+ std::vector<float> a, b;
+ PyObject* py_value;
+ float value;
+
+ for(Py_ssize_t i = 0; i < py_b_len; i++)
+ {
+ py_value = PySequence_GetItem(py_b, i);
+ value= (float)PyFloat_AsDouble(py_value);
+ Py_DECREF(py_value);
+
+ if(value == -1.0f && PyErr_Occurred()) {
+ return nullptr;
+ }
+
+ b.push_back(value);
+ }
+
+ if(py_a)
+ {
+ for(Py_ssize_t i = 0; i < py_a_len; i++)
+ {
+ py_value = PySequence_GetItem(py_a, i);
+ value= (float)PyFloat_AsDouble(py_value);
+ Py_DECREF(py_value);
+
+ if(value == -1.0f && PyErr_Occurred()) {
+ return nullptr;
+ }
+
+ a.push_back(value);
+ }
+
+ if(a[0] == 0)
+ a[0] = 1;
+ }
+ else
+ a.push_back(1);
+
+ PyTypeObject* type = Py_TYPE(self);
+ Sound* parent = (Sound*)type->tp_alloc(type, 0);
+
+ if(parent != nullptr)
+ {
+ try
+ {
+ parent->sound = new std::shared_ptr<ISound>(new IIRFilter(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), b, a));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(parent);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)parent;
+}
+
+PyDoc_STRVAR(M_aud_Sound_highpass_doc,
+ "highpass(frequency, Q=0.5)\n\n"
+ "Creates a second order highpass filter based on the transfer "
+ "function H(s) = s^2 / (s^2 + s/Q + 1)\n\n"
+ ":arg frequency: The cut off trequency of the highpass.\n"
+ ":type frequency: float\n"
+ ":arg Q: Q factor of the lowpass.\n"
+ ":type Q: float\n"
+ ":return: The created :class:`Sound` object.\n"
+ ":rtype: :class:`Sound`");
+
+static PyObject *
+Sound_highpass(Sound* self, PyObject* args)
+{
+ float frequency;
+ float Q = 0.5;
+
+ if(!PyArg_ParseTuple(args, "f|f:highpass", &frequency, &Q))
+ return nullptr;
+
+ PyTypeObject* type = Py_TYPE(self);
+ Sound* parent = (Sound*)type->tp_alloc(type, 0);
+
+ if(parent != nullptr)
+ {
+ try
+ {
+ parent->sound = new std::shared_ptr<ISound>(new Highpass(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), frequency, Q));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(parent);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)parent;
+}
+
+PyDoc_STRVAR(M_aud_Sound_limit_doc,
+ "limit(start, end)\n\n"
+ "Limits a sound within a specific start and end time.\n\n"
+ ":arg start: Start time in seconds.\n"
+ ":type start: float\n"
+ ":arg end: End time in seconds.\n"
+ ":type end: float\n"
+ ":return: The created :class:`Sound` object.\n"
+ ":rtype: :class:`Sound`");
+
+static PyObject *
+Sound_limit(Sound* self, PyObject* args)
+{
+ float start, end;
+
+ if(!PyArg_ParseTuple(args, "ff:limit", &start, &end))
+ return nullptr;
+
+ PyTypeObject* type = Py_TYPE(self);
+ Sound* parent = (Sound*)type->tp_alloc(type, 0);
+
+ if(parent != nullptr)
+ {
+ try
+ {
+ parent->sound = new std::shared_ptr<ISound>(new Limiter(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), start, end));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(parent);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)parent;
+}
+
+PyDoc_STRVAR(M_aud_Sound_loop_doc,
+ "loop(count)\n\n"
+ "Loops a sound.\n\n"
+ ":arg count: How often the sound should be looped. "
+ "Negative values mean endlessly.\n"
+ ":type count: integer\n"
+ ":return: The created :class:`Sound` object.\n"
+ ":rtype: :class:`Sound`\n\n"
+ ".. note:: This is a filter function, you might consider using "
+ ":attr:`Handle.loop_count` instead.");
+
+static PyObject *
+Sound_loop(Sound* self, PyObject* args)
+{
+ int loop;
+
+ if(!PyArg_ParseTuple(args, "i:loop", &loop))
+ return nullptr;
+
+ PyTypeObject* type = Py_TYPE(self);
+ Sound* parent = (Sound*)type->tp_alloc(type, 0);
+
+ if(parent != nullptr)
+ {
+ try
+ {
+ parent->sound = new std::shared_ptr<ISound>(new Loop(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), loop));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(parent);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)parent;
+}
+
+PyDoc_STRVAR(M_aud_Sound_lowpass_doc,
+ "lowpass(frequency, Q=0.5)\n\n"
+ "Creates a second order lowpass filter based on the transfer "
+ "function H(s) = 1 / (s^2 + s/Q + 1)\n\n"
+ ":arg frequency: The cut off trequency of the lowpass.\n"
+ ":type frequency: float\n"
+ ":arg Q: Q factor of the lowpass.\n"
+ ":type Q: float\n"
+ ":return: The created :class:`Sound` object.\n"
+ ":rtype: :class:`Sound`");
+
+static PyObject *
+Sound_lowpass(Sound* self, PyObject* args)
+{
+ float frequency;
+ float Q = 0.5;
+
+ if(!PyArg_ParseTuple(args, "f|f:lowpass", &frequency, &Q))
+ return nullptr;
+
+ PyTypeObject* type = Py_TYPE(self);
+ Sound* parent = (Sound*)type->tp_alloc(type, 0);
+
+ if(parent != nullptr)
+ {
+ try
+ {
+ parent->sound = new std::shared_ptr<ISound>(new Lowpass(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), frequency, Q));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(parent);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)parent;
+}
+
+PyDoc_STRVAR(M_aud_Sound_pitch_doc,
+ "pitch(factor)\n\n"
+ "Changes the pitch of a sound with a specific factor.\n\n"
+ ":arg factor: The factor to change the pitch with.\n"
+ ":type factor: float\n"
+ ":return: The created :class:`Sound` object.\n"
+ ":rtype: :class:`Sound`\n\n"
+ ".. note:: This is done by changing the sample rate of the "
+ "underlying sound, which has to be an integer, so the factor "
+ "value rounded and the factor may not be 100 % accurate.\n\n"
+ ".. note:: This is a filter function, you might consider using "
+ ":attr:`Handle.pitch` instead.");
+
+static PyObject *
+Sound_pitch(Sound* self, PyObject* args)
+{
+ float factor;
+
+ if(!PyArg_ParseTuple(args, "f:pitch", &factor))
+ return nullptr;
+
+ PyTypeObject* type = Py_TYPE(self);
+ Sound* parent = (Sound*)type->tp_alloc(type, 0);
+
+ if(parent != nullptr)
+ {
+ try
+ {
+ parent->sound = new std::shared_ptr<ISound>(new Pitch(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), factor));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(parent);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)parent;
+}
+
+PyDoc_STRVAR(M_aud_Sound_rechannel_doc,
+ "rechannel(channels)\n\n"
+ "Rechannels the sound.\n\n"
+ ":arg channels: The new channel configuration.\n"
+ ":type channels: int\n"
+ ":return: The created :class:`Sound` object.\n"
+ ":rtype: :class:`Sound`");
+
+static PyObject *
+Sound_rechannel(Sound* self, PyObject* args)
+{
+ int channels;
+
+ if(!PyArg_ParseTuple(args, "i:rechannel", &channels))
+ return nullptr;
+
+ PyTypeObject* type = Py_TYPE(self);
+ Sound* parent = (Sound*)type->tp_alloc(type, 0);
+
+ if(parent != nullptr)
+ {
+ try
+ {
+ DeviceSpecs specs;
+ specs.channels = static_cast<Channels>(channels);
+ specs.rate = RATE_INVALID;
+ specs.format = FORMAT_INVALID;
+ parent->sound = new std::shared_ptr<ISound>(new ChannelMapper(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), specs));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(parent);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)parent;
+}
+
+PyDoc_STRVAR(M_aud_Sound_resample_doc,
+ "resample(rate, high_quality)\n\n"
+ "Resamples the sound.\n\n"
+ ":arg rate: The new sample rate.\n"
+ ":type rate: double\n"
+ ":arg high_quality: When true use a higher quality but slower resampler.\n"
+ ":type high_quality: bool\n"
+ ":return: The created :class:`Sound` object.\n"
+ ":rtype: :class:`Sound`");
+
+static PyObject *
+Sound_resample(Sound* self, PyObject* args)
+{
+ double rate;
+ PyObject* high_qualityo;
+ bool high_quality = false;
+
+ if(!PyArg_ParseTuple(args, "d|O:resample", &rate, &high_qualityo))
+ return nullptr;
+
+ if(!PyBool_Check(high_qualityo))
+ {
+ PyErr_SetString(PyExc_TypeError, "high_quality is not a boolean!");
+ return nullptr;
+ }
+
+ high_quality = high_qualityo == Py_True;
+
+ PyTypeObject* type = Py_TYPE(self);
+ Sound* parent = (Sound*)type->tp_alloc(type, 0);
+
+ if(parent != nullptr)
+ {
+ try
+ {
+ DeviceSpecs specs;
+ specs.channels = CHANNELS_INVALID;
+ specs.rate = rate;
+ specs.format = FORMAT_INVALID;
+ if(high_quality)
+ parent->sound = new std::shared_ptr<ISound>(new JOSResample(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), specs));
+ else
+ parent->sound = new std::shared_ptr<ISound>(new LinearResample(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), specs));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(parent);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)parent;
+}
+
+PyDoc_STRVAR(M_aud_Sound_reverse_doc,
+ "reverse()\n\n"
+ "Plays a sound reversed.\n\n"
+ ":return: The created :class:`Sound` object.\n"
+ ":rtype: :class:`Sound`\n\n"
+ ".. note:: The sound has to have a finite length and has to be "
+ "seekable. It's recommended to use this only with factories with "
+ "fast and accurate seeking, which is not true for encoded audio "
+ "files, such ones should be buffered using :meth:`cache` before "
+ "being played reversed.\n\n"
+ ".. warning:: If seeking is not accurate in the underlying sound "
+ "you'll likely hear skips/jumps/cracks.");
+
+static PyObject *
+Sound_reverse(Sound* self)
+{
+ PyTypeObject* type = Py_TYPE(self);
+ Sound* parent = (Sound*)type->tp_alloc(type, 0);
+
+ if(parent != nullptr)
+ {
+ try
+ {
+ parent->sound = new std::shared_ptr<ISound>(new Reverse(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound)));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(parent);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)parent;
+}
+
+PyDoc_STRVAR(M_aud_Sound_sum_doc,
+ "sum()\n\n"
+ "Sums the samples of a sound.\n\n"
+ ":return: The created :class:`Sound` object.\n"
+ ":rtype: :class:`Sound`");
+
+static PyObject *
+Sound_sum(Sound* self)
+{
+ PyTypeObject* type = Py_TYPE(self);
+ Sound* parent = (Sound*)type->tp_alloc(type, 0);
+
+ if(parent != nullptr)
+ {
+ try
+ {
+ parent->sound = new std::shared_ptr<ISound>(new Sum(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound)));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(parent);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)parent;
+}
+
+PyDoc_STRVAR(M_aud_Sound_threshold_doc,
+ "threshold(threshold = 0)\n\n"
+ "Makes a threshold wave out of an audio wave by setting all samples "
+ "with a amplitude >= threshold to 1, all <= -threshold to -1 and "
+ "all between to 0.\n\n"
+ ":arg threshold: Threshold value over which an amplitude counts "
+ "non-zero.\n"
+ ":type threshold: float\n"
+ ":return: The created :class:`Sound` object.\n"
+ ":rtype: :class:`Sound`");
+
+static PyObject *
+Sound_threshold(Sound* self, PyObject* args)
+{
+ float threshold = 0;
+
+ if(!PyArg_ParseTuple(args, "|f:threshold", &threshold))
+ return nullptr;
+
+ PyTypeObject* type = Py_TYPE(self);
+ Sound* parent = (Sound*)type->tp_alloc(type, 0);
+
+ if(parent != nullptr)
+ {
+ try
+ {
+ parent->sound = new std::shared_ptr<ISound>(new Threshold(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), threshold));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(parent);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)parent;
+}
+
+PyDoc_STRVAR(M_aud_Sound_volume_doc,
+ "volume(volume)\n\n"
+ "Changes the volume of a sound.\n\n"
+ ":arg volume: The new volume..\n"
+ ":type volume: float\n"
+ ":return: The created :class:`Sound` object.\n"
+ ":rtype: :class:`Sound`\n\n"
+ ".. note:: Should be in the range [0, 1] to avoid clipping.\n\n"
+ ".. note:: This is a filter function, you might consider using "
+ ":attr:`Handle.volume` instead.");
+
+static PyObject *
+Sound_volume(Sound* self, PyObject* args)
+{
+ float volume;
+
+ if(!PyArg_ParseTuple(args, "f:volume", &volume))
+ return nullptr;
+
+ PyTypeObject* type = Py_TYPE(self);
+ Sound* parent = (Sound*)type->tp_alloc(type, 0);
+
+ if(parent != nullptr)
+ {
+ try
+ {
+ parent->sound = new std::shared_ptr<ISound>(new Volume(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), volume));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(parent);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)parent;
+}
+
+PyDoc_STRVAR(M_aud_Sound_join_doc,
+ "join(sound)\n\n"
+ "Plays two factories in sequence.\n\n"
+ ":arg sound: The sound to play second.\n"
+ ":type sound: :class:`Sound`\n"
+ ":return: The created :class:`Sound` object.\n"
+ ":rtype: :class:`Sound`\n\n"
+ ".. note:: The two factories have to have the same specifications "
+ "(channels and samplerate).");
+
+static PyObject *
+Sound_join(Sound* self, PyObject* object)
+{
+ PyTypeObject* type = Py_TYPE(self);
+
+ if(!PyObject_TypeCheck(object, type))
+ {
+ PyErr_SetString(PyExc_TypeError, "Object has to be of type Sound!");
+ return nullptr;
+ }
+
+ Sound* parent;
+ Sound* child = (Sound*)object;
+
+ parent = (Sound*)type->tp_alloc(type, 0);
+ if(parent != nullptr)
+ {
+ try
+ {
+ parent->sound = new std::shared_ptr<ISound>(new Double(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), *reinterpret_cast<std::shared_ptr<ISound>*>(child->sound)));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(parent);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)parent;
+}
+
+PyDoc_STRVAR(M_aud_Sound_mix_doc,
+ "mix(sound)\n\n"
+ "Mixes two factories.\n\n"
+ ":arg sound: The sound to mix over the other.\n"
+ ":type sound: :class:`Sound`\n"
+ ":return: The created :class:`Sound` object.\n"
+ ":rtype: :class:`Sound`\n\n"
+ ".. note:: The two factories have to have the same specifications "
+ "(channels and samplerate).");
+
+static PyObject *
+Sound_mix(Sound* self, PyObject* object)
+{
+ PyTypeObject* type = Py_TYPE(self);
+
+ if(!PyObject_TypeCheck(object, type))
+ {
+ PyErr_SetString(PyExc_TypeError, "Object is not of type Sound!");
+ return nullptr;
+ }
+
+ Sound* parent = (Sound*)type->tp_alloc(type, 0);
+ Sound* child = (Sound*)object;
+
+ if(parent != nullptr)
+ {
+ try
+ {
+ parent->sound = new std::shared_ptr<ISound>(new Superpose(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), *reinterpret_cast<std::shared_ptr<ISound>*>(child->sound)));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(parent);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)parent;
+}
+
+PyDoc_STRVAR(M_aud_Sound_pingpong_doc,
+ "pingpong()\n\n"
+ "Plays a sound forward and then backward.\n"
+ "This is like joining a sound with its reverse.\n\n"
+ ":return: The created :class:`Sound` object.\n"
+ ":rtype: :class:`Sound`");
+
+static PyObject *
+Sound_pingpong(Sound* self)
+{
+ PyTypeObject* type = Py_TYPE(self);
+ Sound* parent = (Sound*)type->tp_alloc(type, 0);
+
+ if(parent != nullptr)
+ {
+ try
+ {
+ parent->sound = new std::shared_ptr<ISound>(new PingPong(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound)));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(parent);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)parent;
+}
+
+PyDoc_STRVAR(M_aud_Sound_list_doc,
+ "list()\n\n"
+ "Creates an empty sound list that can contain several sounds.\n\n"
+ ":arg random: wether the playback will be random or not.\n"
+ ":type random: int\n"
+ ":return: The created :class:`Sound` object.\n"
+ ":rtype: :class:`Sound`");
+
+static PyObject *
+Sound_list(PyTypeObject* type, PyObject* args)
+{
+ int random;
+
+ if(!PyArg_ParseTuple(args, "i:random", &random))
+ return nullptr;
+
+ Sound* self;
+
+ self = (Sound*)type->tp_alloc(type, 0);
+ if(self != nullptr)
+ {
+ try
+ {
+ self->sound = new std::shared_ptr<ISound>(new SoundList(random));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(self);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)self;
+}
+
+PyDoc_STRVAR(M_aud_Sound_mutable_doc,
+ "mutable()\n\n"
+ "Creates a sound that will be restarted when sought backwards.\n"
+ "If the original sound is a sound list, the playing sound can change.\n\n"
+ ":return: The created :class:`Sound` object.\n"
+ ":rtype: :class:`Sound`");
+
+static PyObject *
+Sound_mutable(Sound* self)
+{
+ PyTypeObject* type = Py_TYPE(self);
+ Sound* parent = (Sound*)type->tp_alloc(type, 0);
+
+ if(parent != nullptr)
+ {
+ try
+ {
+ parent->sound = new std::shared_ptr<ISound>(new MutableSound(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound)));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(parent);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)parent;
+}
+
+PyDoc_STRVAR(M_aud_Sound_list_addSound_doc,
+ "addSound(sound)\n\n"
+ "Adds a new sound to a sound list.\n\n"
+ ":arg sound: The sound that will be added to the list.\n"
+ ":type sound: :class:`Sound`\n\n"
+ ".. note:: You can only add a sound to a sound list.");
+
+static PyObject *
+Sound_list_addSound(Sound* self, PyObject* object)
+{
+ PyTypeObject* type = Py_TYPE(self);
+
+ if(!PyObject_TypeCheck(object, type))
+ {
+ PyErr_SetString(PyExc_TypeError, "Object has to be of type Sound!");
+ return nullptr;
+ }
+
+ Sound* child = (Sound*)object;
+ try
+ {
+ (*reinterpret_cast<std::shared_ptr<SoundList>*>(self->sound))->addSound(*reinterpret_cast<std::shared_ptr<ISound>*>(child->sound));
+ Py_RETURN_NONE;
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+#ifdef WITH_CONVOLUTION
+
+PyDoc_STRVAR(M_aud_Sound_convolver_doc,
+ "convolver()\n\n"
+ "Creates a sound that will apply convolution to another sound.\n\n"
+ ":arg impulseResponse: The filter with which convolve the sound.\n"
+ ":type impulseResponse: :class:`ImpulseResponse`\n"
+ ":arg threadPool: A thread pool used to parallelize convolution.\n"
+ ":type threadPool: :class:`ThreadPool`\n"
+ ":return: The created :class:`Sound` object.\n"
+ ":rtype: :class:`Sound`");
+
+static PyObject *
+Sound_convolver(Sound* self, PyObject* args)
+{
+ PyTypeObject* type = Py_TYPE(self);
+
+ PyObject* object1;
+ PyObject* object2;
+
+ if(!PyArg_ParseTuple(args, "OO:convolver", &object1, &object2))
+ return nullptr;
+
+ ImpulseResponseP* filter = checkImpulseResponse(object1);
+ if(!filter)
+ return nullptr;
+
+ ThreadPoolP* threadPool = checkThreadPool(object2);
+ if(!threadPool)
+ return nullptr;
+
+ Sound* parent;
+ parent = (Sound*)type->tp_alloc(type, 0);
+
+ if(parent != nullptr)
+ {
+ try
+ {
+ parent->sound = new std::shared_ptr<ISound>(new ConvolverSound(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), *reinterpret_cast<std::shared_ptr<ImpulseResponse>*>(filter->impulseResponse), *reinterpret_cast<std::shared_ptr<ThreadPool>*>(threadPool->threadPool)));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(parent);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)parent;
+}
+
+PyDoc_STRVAR(M_aud_Sound_binaural_doc,
+ "convolver()\n\n"
+ "Creates a binaural sound using another sound as source. The original sound must be mono\n\n"
+ ":arg hrtfs: An HRTF set.\n"
+ ":type hrtf: :class:`HRTF`\n"
+ ":arg source: An object representing the source position of the sound.\n"
+ ":type source: :class:`Source`\n"
+ ":arg threadPool: A thread pool used to parallelize convolution.\n"
+ ":type threadPool: :class:`ThreadPool`\n"
+ ":return: The created :class:`Sound` object.\n"
+ ":rtype: :class:`Sound`");
+
+static PyObject *
+Sound_binaural(Sound* self, PyObject* args)
+{
+ PyTypeObject* type = Py_TYPE(self);
+
+ PyObject* object1;
+ PyObject* object2;
+ PyObject* object3;
+
+ if(!PyArg_ParseTuple(args, "OOO:binaural", &object1, &object2, &object3))
+ return nullptr;
+
+ HRTFP* hrtfs = checkHRTF(object1);
+ if(!hrtfs)
+ return nullptr;
+
+ SourceP* source = checkSource(object2);
+ if(!hrtfs)
+ return nullptr;
+
+ ThreadPoolP* threadPool = checkThreadPool(object3);
+ if(!threadPool)
+ return nullptr;
+
+ Sound* parent;
+ parent = (Sound*)type->tp_alloc(type, 0);
+
+ if(parent != nullptr)
+ {
+ try
+ {
+ parent->sound = new std::shared_ptr<ISound>(new BinauralSound(*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound), *reinterpret_cast<std::shared_ptr<HRTF>*>(hrtfs->hrtf), *reinterpret_cast<std::shared_ptr<Source>*>(source->source), *reinterpret_cast<std::shared_ptr<ThreadPool>*>(threadPool->threadPool)));
+ }
+ catch(Exception& e)
+ {
+ Py_DECREF(parent);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)parent;
+}
+
+#endif
+
+static PyMethodDef Sound_methods[] = {
+ {"data", (PyCFunction)Sound_data, METH_NOARGS,
+ M_aud_Sound_data_doc
+ },
+ {"write", (PyCFunction)Sound_write, METH_VARARGS | METH_KEYWORDS,
+ M_aud_Sound_write_doc
+ },
+ {"buffer", (PyCFunction)Sound_buffer, METH_VARARGS | METH_CLASS,
+ M_aud_Sound_buffer_doc
+ },
+ {"cache", (PyCFunction)Sound_cache, METH_NOARGS,
+ M_aud_Sound_cache_doc
+ },
+ {"file", (PyCFunction)Sound_file, METH_VARARGS | METH_CLASS,
+ M_aud_Sound_file_doc
+ },
+ {"sawtooth", (PyCFunction)Sound_sawtooth, METH_VARARGS | METH_CLASS,
+ M_aud_Sound_sawtooth_doc
+ },
+ {"silence", (PyCFunction)Sound_silence, METH_NOARGS | METH_CLASS,
+ M_aud_Sound_silence_doc
+ },
+ {"sine", (PyCFunction)Sound_sine, METH_VARARGS | METH_CLASS,
+ M_aud_Sound_sine_doc
+ },
+ {"square", (PyCFunction)Sound_square, METH_VARARGS | METH_CLASS,
+ M_aud_Sound_square_doc
+ },
+ {"triangle", (PyCFunction)Sound_triangle, METH_VARARGS | METH_CLASS,
+ M_aud_Sound_triangle_doc
+ },
+ {"accumulate", (PyCFunction)Sound_accumulate, METH_VARARGS,
+ M_aud_Sound_accumulate_doc
+ },
+ {"ADSR", (PyCFunction)Sound_ADSR, METH_VARARGS,
+ M_aud_Sound_ADSR_doc
+ },
+ {"delay", (PyCFunction)Sound_delay, METH_VARARGS,
+ M_aud_Sound_delay_doc
+ },
+ {"envelope", (PyCFunction)Sound_envelope, METH_VARARGS,
+ M_aud_Sound_envelope_doc
+ },
+ {"fadein", (PyCFunction)Sound_fadein, METH_VARARGS,
+ M_aud_Sound_fadein_doc
+ },
+ {"fadeout", (PyCFunction)Sound_fadeout, METH_VARARGS,
+ M_aud_Sound_fadeout_doc
+ },
+ {"filter", (PyCFunction)Sound_filter, METH_VARARGS,
+ M_aud_Sound_filter_doc
+ },
+ {"highpass", (PyCFunction)Sound_highpass, METH_VARARGS,
+ M_aud_Sound_highpass_doc
+ },
+ {"limit", (PyCFunction)Sound_limit, METH_VARARGS,
+ M_aud_Sound_limit_doc
+ },
+ {"loop", (PyCFunction)Sound_loop, METH_VARARGS,
+ M_aud_Sound_loop_doc
+ },
+ {"lowpass", (PyCFunction)Sound_lowpass, METH_VARARGS,
+ M_aud_Sound_lowpass_doc
+ },
+ {"pitch", (PyCFunction)Sound_pitch, METH_VARARGS,
+ M_aud_Sound_pitch_doc
+ },
+ {"rechannel", (PyCFunction)Sound_rechannel, METH_VARARGS,
+ M_aud_Sound_rechannel_doc
+ },
+ {"resample", (PyCFunction)Sound_resample, METH_VARARGS,
+ M_aud_Sound_resample_doc
+ },
+ {"reverse", (PyCFunction)Sound_reverse, METH_NOARGS,
+ M_aud_Sound_reverse_doc
+ },
+ {"sum", (PyCFunction)Sound_sum, METH_NOARGS,
+ M_aud_Sound_sum_doc
+ },
+ {"threshold", (PyCFunction)Sound_threshold, METH_VARARGS,
+ M_aud_Sound_threshold_doc
+ },
+ {"volume", (PyCFunction)Sound_volume, METH_VARARGS,
+ M_aud_Sound_volume_doc
+ },
+ {"join", (PyCFunction)Sound_join, METH_O,
+ M_aud_Sound_join_doc
+ },
+ {"mix", (PyCFunction)Sound_mix, METH_O,
+ M_aud_Sound_mix_doc
+ },
+ { "pingpong", (PyCFunction)Sound_pingpong, METH_NOARGS,
+ M_aud_Sound_pingpong_doc
+ },
+ { "list", (PyCFunction)Sound_list, METH_VARARGS | METH_CLASS,
+ M_aud_Sound_list_doc
+ },
+ { "mutable", (PyCFunction)Sound_mutable, METH_NOARGS,
+ M_aud_Sound_mutable_doc
+ },
+ { "addSound", (PyCFunction)Sound_list_addSound, METH_O,
+ M_aud_Sound_list_addSound_doc
+ },
+#ifdef WITH_CONVOLUTION
+ { "convolver", (PyCFunction)Sound_convolver, METH_VARARGS,
+ M_aud_Sound_convolver_doc
+ },
+ { "binaural", (PyCFunction)Sound_binaural, METH_VARARGS,
+ M_aud_Sound_binaural_doc
+ },
+#endif
+ {nullptr} /* Sentinel */
+};
+
+PyDoc_STRVAR(M_aud_Sound_specs_doc,
+ "The sample specification of the sound as a tuple with rate and channel count.");
+
+static PyObject *
+Sound_get_specs(Sound* self, void* nothing)
+{
+ try
+ {
+ Specs specs = (*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound))->createReader()->getSpecs();
+ return Py_BuildValue("(di)", specs.rate, specs.channels);
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+PyDoc_STRVAR(M_aud_Sound_length_doc,
+ "The sample specification of the sound as a tuple with rate and channel count.");
+
+static PyObject *
+Sound_get_length(Sound* self, void* nothing)
+{
+ try
+ {
+ int length = (*reinterpret_cast<std::shared_ptr<ISound>*>(self->sound))->createReader()->getLength();
+ return Py_BuildValue("i", length);
+ }
+ catch(Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static PyGetSetDef Sound_properties[] = {
+ {(char*)"specs", (getter)Sound_get_specs, nullptr,
+ M_aud_Sound_specs_doc, nullptr },
+ {(char*)"length", (getter)Sound_get_length, nullptr,
+ M_aud_Sound_length_doc, nullptr },
+ {nullptr} /* Sentinel */
+};
+
+PyDoc_STRVAR(M_aud_Sound_doc,
+ "Sound objects are immutable and represent a sound that can be "
+ "played simultaneously multiple times. They are called factories "
+ "because they create reader objects internally that are used for "
+ "playback.");
+
+PyTypeObject SoundType = {
+ PyVarObject_HEAD_INIT(nullptr, 0)
+ "aud.Sound", /* tp_name */
+ sizeof(Sound), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ (destructor)Sound_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_reserved */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ 0, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT, /* tp_flags */
+ M_aud_Sound_doc, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ Sound_methods, /* tp_methods */
+ 0, /* tp_members */
+ Sound_properties, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ Sound_new, /* tp_new */
+};
+
+AUD_API PyObject* Sound_empty()
+{
+ return SoundType.tp_alloc(&SoundType, 0);
+}
+
+AUD_API Sound* checkSound(PyObject* sound)
+{
+ if(!PyObject_TypeCheck(sound, &SoundType))
+ {
+ PyErr_SetString(PyExc_TypeError, "Object is not of type Sound!");
+ return nullptr;
+ }
+
+ return (Sound*)sound;
+}
+
+
+bool initializeSound()
+{
+ import_array();
+
+ return PyType_Ready(&SoundType) >= 0;
+}
+
+
+void addSoundToModule(PyObject* module)
+{
+ Py_INCREF(&SoundType);
+ PyModule_AddObject(module, "Sound", (PyObject *)&SoundType);
+}
diff --git a/extern/audaspace/bindings/python/PySound.h b/extern/audaspace/bindings/python/PySound.h
new file mode 100644
index 00000000000..657bb2131e6
--- /dev/null
+++ b/extern/audaspace/bindings/python/PySound.h
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+#include <Python.h>
+#include "Audaspace.h"
+
+typedef void Reference_ISound;
+
+typedef struct {
+ PyObject_HEAD
+ Reference_ISound* sound;
+} Sound;
+
+extern AUD_API PyObject* Sound_empty();
+extern AUD_API Sound* checkSound(PyObject* sound);
+
+bool initializeSound();
+void addSoundToModule(PyObject* module);
diff --git a/extern/audaspace/bindings/python/PySource.cpp b/extern/audaspace/bindings/python/PySource.cpp
new file mode 100644
index 00000000000..a948cf46645
--- /dev/null
+++ b/extern/audaspace/bindings/python/PySource.cpp
@@ -0,0 +1,260 @@
+/*******************************************************************************
+* Copyright 2009-2015 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "PySource.h"
+
+#include "Exception.h"
+#include "fx/Source.h"
+
+#include <memory>
+
+extern PyObject* AUDError;
+
+static PyObject *
+Source_new(PyTypeObject* type, PyObject* args, PyObject* kwds)
+{
+ SourceP* self = (SourceP*)type->tp_alloc(type, 0);
+
+ if(self != nullptr)
+ {
+ float azimuth, elevation, distance;
+ if(!PyArg_ParseTuple(args, "fff:angles", &azimuth, &elevation, &distance))
+ return nullptr;
+
+ try
+ {
+ self->source = new std::shared_ptr<aud::Source>(new aud::Source(azimuth, elevation, distance));
+ }
+ catch(aud::Exception& e)
+ {
+ Py_DECREF(self);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)self;
+}
+
+static void
+Source_dealloc(SourceP* self)
+{
+ if(self->source)
+ delete reinterpret_cast<std::shared_ptr<aud::Source>*>(self->source);
+ Py_TYPE(self)->tp_free((PyObject *)self);
+}
+
+static PyMethodDef Source_methods[] = {
+ { nullptr } /* Sentinel */
+};
+
+PyDoc_STRVAR(M_aud_Source_azimuth_doc,
+ "The azimuth angle.");
+
+static int
+Source_set_azimuth(SourceP* self, PyObject* args, void* nothing)
+{
+ float azimuth;
+
+ if(!PyArg_Parse(args, "f:azimuth", &azimuth))
+ return -1;
+
+ try
+ {
+ (*reinterpret_cast<std::shared_ptr<aud::Source>*>(self->source))->setAzimuth(azimuth);
+ return 0;
+ }
+ catch(aud::Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+static PyObject *
+Source_get_azimuth(SourceP* self, void* nothing)
+{
+ try
+ {
+ return Py_BuildValue("f", (*reinterpret_cast<std::shared_ptr<aud::Source>*>(self->source))->getAzimuth());
+ }
+ catch(aud::Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+PyDoc_STRVAR(M_aud_Source_elevation_doc,
+ "The elevation angle.");
+
+static int
+Source_set_elevation(SourceP* self, PyObject* args, void* nothing)
+{
+ float elevation;
+
+ if(!PyArg_Parse(args, "f:elevation", &elevation))
+ return -1;
+
+ try
+ {
+ (*reinterpret_cast<std::shared_ptr<aud::Source>*>(self->source))->setElevation(elevation);
+ return 0;
+ }
+ catch(aud::Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+static PyObject *
+Source_get_elevation(SourceP* self, void* nothing)
+{
+ try
+ {
+ return Py_BuildValue("f", (*reinterpret_cast<std::shared_ptr<aud::Source>*>(self->source))->getElevation());
+ }
+ catch(aud::Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+PyDoc_STRVAR(M_aud_Source_distance_doc,
+ "The distance value. 0 is min, 1 is max.");
+
+static int
+Source_set_distance(SourceP* self, PyObject* args, void* nothing)
+{
+ float distance;
+
+ if(!PyArg_Parse(args, "f:distance", &distance))
+ return -1;
+
+ try
+ {
+ (*reinterpret_cast<std::shared_ptr<aud::Source>*>(self->source))->setDistance(distance);
+ return 0;
+ }
+ catch(aud::Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ }
+
+ return -1;
+}
+
+static PyObject *
+Source_get_distance(SourceP* self, void* nothing)
+{
+ try
+ {
+ return Py_BuildValue("f", (*reinterpret_cast<std::shared_ptr<aud::Source>*>(self->source))->getDistance());
+ }
+ catch(aud::Exception& e)
+ {
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+}
+
+static PyGetSetDef Source_properties[] = {
+ { (char*)"azimuth", (getter)Source_get_azimuth, (setter)Source_set_azimuth,
+ M_aud_Source_azimuth_doc, nullptr },
+ { (char*)"elevation", (getter)Source_get_elevation, (setter)Source_set_elevation,
+ M_aud_Source_elevation_doc, nullptr },
+ { (char*)"distance", (getter)Source_get_distance, (setter)Source_set_distance,
+ M_aud_Source_distance_doc, nullptr },
+ { nullptr } /* Sentinel */
+};
+
+PyDoc_STRVAR(M_aud_Source_doc,
+ "The source object represents the source position of a binaural sound.");
+
+PyTypeObject SourceType = {
+ PyVarObject_HEAD_INIT(nullptr, 0)
+ "aud.Source", /* tp_name */
+ sizeof(SourceP), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ (destructor)Source_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_reserved */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ 0, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT, /* tp_flags */
+ M_aud_Source_doc, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ Source_methods, /* tp_methods */
+ 0, /* tp_members */
+ Source_properties, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ Source_new, /* tp_new */
+};
+
+AUD_API PyObject* Source_empty()
+{
+ return SourceType.tp_alloc(&SourceType, 0);
+}
+
+
+AUD_API SourceP* checkSource(PyObject* source)
+{
+ if(!PyObject_TypeCheck(source, &SourceType))
+ {
+ PyErr_SetString(PyExc_TypeError, "Object is not of type Source!");
+ return nullptr;
+ }
+
+ return (SourceP*)source;
+}
+
+
+bool initializeSource()
+{
+ return PyType_Ready(&SourceType) >= 0;
+}
+
+
+void addSourceToModule(PyObject* module)
+{
+ Py_INCREF(&SourceType);
+ PyModule_AddObject(module, "Source", (PyObject *)&SourceType);
+}
diff --git a/extern/audaspace/bindings/python/PySource.h b/extern/audaspace/bindings/python/PySource.h
new file mode 100644
index 00000000000..19960d80901
--- /dev/null
+++ b/extern/audaspace/bindings/python/PySource.h
@@ -0,0 +1,33 @@
+/*******************************************************************************
+* Copyright 2009-2015 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#pragma once
+
+#include <Python.h>
+#include "Audaspace.h"
+
+typedef void Reference_Source;
+
+typedef struct {
+ PyObject_HEAD
+ Reference_Source* source;
+} SourceP;
+
+extern AUD_API PyObject* Source_empty();
+extern AUD_API SourceP* checkSource(PyObject* source);
+
+bool initializeSource();
+void addSourceToModule(PyObject* module); \ No newline at end of file
diff --git a/extern/audaspace/bindings/python/PyThreadPool.cpp b/extern/audaspace/bindings/python/PyThreadPool.cpp
new file mode 100644
index 00000000000..75811f08273
--- /dev/null
+++ b/extern/audaspace/bindings/python/PyThreadPool.cpp
@@ -0,0 +1,134 @@
+/*******************************************************************************
+* Copyright 2009-2015 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "PyThreadPool.h"
+
+#include "Exception.h"
+#include "util/ThreadPool.h"
+
+extern PyObject* AUDError;
+
+static PyObject *
+ThreadPool_new(PyTypeObject* type, PyObject* args, PyObject* kwds)
+{
+ ThreadPoolP* self = (ThreadPoolP*)type->tp_alloc(type, 0);
+
+ if(self != nullptr)
+ {
+ unsigned int nThreads;
+ if(!PyArg_ParseTuple(args, "I:nThreads", &nThreads))
+ return nullptr;
+
+ try
+ {
+ self->threadPool = new std::shared_ptr<aud::ThreadPool>(new aud::ThreadPool(nThreads));
+ }
+ catch(aud::Exception& e)
+ {
+ Py_DECREF(self);
+ PyErr_SetString(AUDError, e.what());
+ return nullptr;
+ }
+ }
+
+ return (PyObject *)self;
+}
+
+static void
+ThreadPool_dealloc(ThreadPoolP* self)
+{
+ if(self->threadPool)
+ delete reinterpret_cast<std::shared_ptr<aud::ThreadPool>*>(self->threadPool);
+ Py_TYPE(self)->tp_free((PyObject *)self);
+}
+
+static PyMethodDef ThreadPool_methods[] = {
+ { nullptr } /* Sentinel */
+};
+
+PyDoc_STRVAR(M_aud_ThreadPool_doc,
+ "A ThreadPool is used to parallelize convolution efficiently.");
+
+PyTypeObject ThreadPoolType = {
+ PyVarObject_HEAD_INIT(nullptr, 0)
+ "aud.ThreadPool", /* tp_name */
+ sizeof(ThreadPoolP), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ (destructor)ThreadPool_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_reserved */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ 0, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT, /* tp_flags */
+ M_aud_ThreadPool_doc, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ ThreadPool_methods, /* tp_methods */
+ 0, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ ThreadPool_new, /* tp_new */
+};
+
+AUD_API PyObject* ThreadPool_empty()
+{
+ return ThreadPoolType.tp_alloc(&ThreadPoolType, 0);
+}
+
+
+AUD_API ThreadPoolP* checkThreadPool(PyObject* threadPool)
+{
+ if(!PyObject_TypeCheck(threadPool, &ThreadPoolType))
+ {
+ PyErr_SetString(PyExc_TypeError, "Object is not of type ThreadPool!");
+ return nullptr;
+ }
+
+ return (ThreadPoolP*)threadPool;
+}
+
+
+bool initializeThreadPool()
+{
+ return PyType_Ready(&ThreadPoolType) >= 0;
+}
+
+
+void addThreadPoolToModule(PyObject* module)
+{
+ Py_INCREF(&ThreadPoolType);
+ PyModule_AddObject(module, "ThreadPool", (PyObject *)&ThreadPoolType);
+}
diff --git a/extern/audaspace/bindings/python/PyThreadPool.h b/extern/audaspace/bindings/python/PyThreadPool.h
new file mode 100644
index 00000000000..e38d905f52a
--- /dev/null
+++ b/extern/audaspace/bindings/python/PyThreadPool.h
@@ -0,0 +1,33 @@
+/*******************************************************************************
+* Copyright 2009-2015 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#pragma once
+
+#include <Python.h>
+#include "Audaspace.h"
+
+typedef void Reference_ThreadPool;
+
+typedef struct {
+ PyObject_HEAD
+ Reference_ThreadPool* threadPool;
+} ThreadPoolP;
+
+extern AUD_API PyObject* ThreadPool_empty();
+extern AUD_API ThreadPoolP* checkThreadPool(PyObject* ThreadPool);
+
+bool initializeThreadPool();
+void addThreadPoolToModule(PyObject* module); \ No newline at end of file
diff --git a/extern/audaspace/bindings/python/examples/binaural.py b/extern/audaspace/bindings/python/examples/binaural.py
new file mode 100644
index 00000000000..e7a2f6cf6d9
--- /dev/null
+++ b/extern/audaspace/bindings/python/examples/binaural.py
@@ -0,0 +1,13 @@
+#!/usr/bin/python
+import aud, sys, time, multiprocessing
+device = aud.Device()
+hrtf = aud.HRTF().loadLeftHrtfSet(".wav", sys.argv[2])
+threadPool = aud.ThreadPool(multiprocessing.cpu_count())
+source = aud.Source(0, 0, 0)
+sound = aud.Sound.file(sys.argv[1]).rechannel(1).binaural(hrtf, source, threadPool)
+handle = device.play(sound)
+
+while handle.status:
+ source.azimuth += 1
+ print("Azimuth: " + str(source.azimuth))
+ time.sleep(0.1) \ No newline at end of file
diff --git a/extern/audaspace/bindings/python/examples/convolution.py b/extern/audaspace/bindings/python/examples/convolution.py
new file mode 100644
index 00000000000..4de25b0336a
--- /dev/null
+++ b/extern/audaspace/bindings/python/examples/convolution.py
@@ -0,0 +1,10 @@
+#!/usr/bin/python
+import aud, sys, time, multiprocessing
+device = aud.Device()
+ir = aud.ImpulseResponse(aud.Sound.file(sys.argv[2]))
+threadPool = aud.ThreadPool(multiprocessing.cpu_count())
+sound = aud.Sound.file(sys.argv[1]).convolver(ir, threadPool)
+handle = device.play(sound)
+handle.volume = 0.1
+while handle.status:
+ time.sleep(0.1) \ No newline at end of file
diff --git a/extern/audaspace/bindings/python/examples/dynamicmusic.py b/extern/audaspace/bindings/python/examples/dynamicmusic.py
new file mode 100644
index 00000000000..348e2496c0a
--- /dev/null
+++ b/extern/audaspace/bindings/python/examples/dynamicmusic.py
@@ -0,0 +1,20 @@
+import aud, sys, time
+
+device=aud.Device()
+dMusic = aud.DynamicMusic(device)
+sound1 = aud.Sound.file(sys.argv[1])
+sound2 = aud.Sound.file(sys.argv[2])
+effect = aud.Sound.file(sys.argv[3])
+
+dMusic.addScene(sound1)
+dMusic.addScene(sound2)
+dMusic.addTransition(1,2,effect)
+
+dMusic.fadeTime=3
+dMusic.volume=0.5
+
+dMusic.scene=1
+time.sleep(5)
+dMusic.scene=2
+
+time.sleep(500) \ No newline at end of file
diff --git a/extern/audaspace/bindings/python/examples/playbackmanager.py b/extern/audaspace/bindings/python/examples/playbackmanager.py
new file mode 100644
index 00000000000..2aa1c283545
--- /dev/null
+++ b/extern/audaspace/bindings/python/examples/playbackmanager.py
@@ -0,0 +1,27 @@
+import aud, sys, time
+
+device=aud.Device()
+manager = aud.PlaybackManager(device)
+sound1 = aud.Sound.file(sys.argv[1])
+sound2 = aud.Sound.file(sys.argv[2])
+sound3 = aud.Sound.file(sys.argv[3])
+sound4 = aud.Sound.file(sys.argv[4])
+
+manager.play(sound1, 0)
+manager.play(sound2, 0)
+manager.play(sound3, 1)
+manager.play(sound4, 1)
+
+manager.setVolume(0.2, 0)
+time.sleep(5)
+manager.setVolume(0.0, 1)
+time.sleep(5)
+manager.pause(0)
+time.sleep(5)
+manager.setVolume(0.5, 1)
+manager.setVolume(1.0, 0)
+time.sleep(5)
+manager.stop(1)
+manager.resume(0)
+
+time.sleep(500) \ No newline at end of file
diff --git a/extern/audaspace/bindings/python/examples/player.py b/extern/audaspace/bindings/python/examples/player.py
new file mode 100644
index 00000000000..8acf4ac833f
--- /dev/null
+++ b/extern/audaspace/bindings/python/examples/player.py
@@ -0,0 +1,7 @@
+#!/usr/bin/python
+import aud, sys, time
+device = aud.Device()
+sound = aud.Sound.file(sys.argv[1])
+handle = device.play(sound)
+while handle.status:
+ time.sleep(0.1)
diff --git a/extern/audaspace/bindings/python/examples/randomSounds.py b/extern/audaspace/bindings/python/examples/randomSounds.py
new file mode 100644
index 00000000000..113b0921f09
--- /dev/null
+++ b/extern/audaspace/bindings/python/examples/randomSounds.py
@@ -0,0 +1,21 @@
+import aud, sys, time
+
+device=aud.Device()
+sound1 = aud.Sound.file(sys.argv[1])
+sound2 = aud.Sound.file(sys.argv[2])
+sound3 = aud.Sound.file(sys.argv[3])
+sound4 = aud.Sound.file(sys.argv[4])
+list=aud.Sound.list(True)
+
+list.addSound(sound1)
+list.addSound(sound2)
+list.addSound(sound3)
+list.addSound(sound4)
+mutable=aud.Sound.mutable(list)
+
+device.lock()
+handle=device.play(mutable)
+handle.loop_count=2
+device.unlock()
+
+time.sleep(500) \ No newline at end of file
diff --git a/extern/audaspace/bindings/python/examples/simple.py b/extern/audaspace/bindings/python/examples/simple.py
new file mode 100644
index 00000000000..7aa45b41042
--- /dev/null
+++ b/extern/audaspace/bindings/python/examples/simple.py
@@ -0,0 +1,7 @@
+#!/usr/bin/python
+import aud, time
+device = aud.Device()
+sine = aud.Sound.sine(440)
+square = sine.threshold()
+handle = device.play(square)
+time.sleep(3)
diff --git a/extern/audaspace/bindings/python/examples/siren.py b/extern/audaspace/bindings/python/examples/siren.py
new file mode 100644
index 00000000000..071279b162d
--- /dev/null
+++ b/extern/audaspace/bindings/python/examples/siren.py
@@ -0,0 +1,19 @@
+#!/usr/bin/python
+import aud, math, time
+length = 0.5
+fadelength = 0.05
+
+device = aud.Device()
+high = aud.Sound.sine(880).limit(0, length).fadein(0, fadelength).fadeout(length - fadelength, length)
+low = aud.Sound.sine(700).limit(0, length).fadein(0, fadelength).fadeout(length - fadelength, length).volume(0.6)
+sound = high.join(low)
+handle = device.play(sound)
+handle.loop_count = -1
+
+start = time.time()
+
+while time.time() - start < 10:
+ angle = time.time() - start
+
+ handle.location = [math.sin(angle), 0, -math.cos(angle)]
+
diff --git a/extern/audaspace/bindings/python/examples/siren2.py b/extern/audaspace/bindings/python/examples/siren2.py
new file mode 100644
index 00000000000..35e1a600581
--- /dev/null
+++ b/extern/audaspace/bindings/python/examples/siren2.py
@@ -0,0 +1,23 @@
+#!/usr/bin/python
+import aud, math, time
+length = 0.5
+fadelength = 0.05
+runtime = 10
+distance = 100
+velocity = 2 * distance / runtime
+
+device = aud.Device()
+high = aud.Sound.sine(880).limit(0, length).fadein(0, fadelength).fadeout(length - fadelength, length)
+low = aud.Sound.sine(700).limit(0, length).fadein(0, fadelength).fadeout(length - fadelength, length).volume(0.6)
+sound = high.join(low)
+handle = device.play(sound)
+handle.loop_count = -1
+
+handle.velocity = [velocity, 0, 0]
+
+start = time.time()
+
+while time.time() - start < runtime:
+ location = -distance + velocity * (time.time() - start)
+
+ handle.location = [location, 10, 0]
diff --git a/extern/audaspace/bindings/python/examples/tetris.py b/extern/audaspace/bindings/python/examples/tetris.py
new file mode 100644
index 00000000000..236a6fa59c1
--- /dev/null
+++ b/extern/audaspace/bindings/python/examples/tetris.py
@@ -0,0 +1,66 @@
+#!/usr/bin/python
+import aud, math, time
+
+def parseNotes(notes, bpm, basefreq, rate = 44100,
+ notechars = "XXXCXDXEFXGXAXHcXdXefXgXaXhp"):
+ pos = 0
+ fadelength = 60/bpm/10
+ halfchars = "#b"
+ durationchars = "2345678"
+ sound = None
+
+ while pos < len(notes):
+ char = notes[pos]
+ mod = None
+ dur = 1
+ pos += 1
+ while pos < len(notes) and notes[pos] not in notechars:
+ if notes[pos] in halfchars:
+ mod = notes[pos]
+ elif notes[pos] in durationchars:
+ dur = notes[pos]
+ pos += 1
+
+ freq = notechars.find(char)
+ if mod == '#':
+ freq += 1
+ elif mod == 'b':
+ freq -= 1
+
+ freq = math.pow(2, freq/12)*basefreq
+ length = float(dur)*60/bpm
+
+ snd = aud.Sound.square(freq, rate)
+ if char == 'p':
+ snd = snd.volume(0)
+ snd = snd.limit(0, length)
+ snd = snd.fadein(0, fadelength)
+ snd = snd.fadeout(length - fadelength, fadelength)
+
+ if sound:
+ sound = sound.join(snd)
+ else:
+ sound = snd
+ return sound
+
+def tetris(bpm = 300, freq = 220, rate = 44100):
+ notes = "e2Hcd2cH A2Ace2dc H3cd2e2 c2A2A4 pd2fa2gf e3ce2dc H2Hcd2e2 c2A2A2p2"
+ s11 = parseNotes(notes, bpm, freq, rate)
+
+ notes = "e4c4 d4H4 c4A4 G#4p4 e4c4 d4H4 A2c2a4 g#4p4"
+ s12 = parseNotes(notes, bpm, freq, rate)
+
+ notes = "EeEeEeEe AaAaAaAa AbabAbabAbabAbab AaAaAAHC DdDdDdDd CcCcCcCc HhHhHhHh AaAaA2p2"
+ s21 = parseNotes(notes, bpm, freq, rate, notechars = "AXHCXDXEFXGXaXhcXdXefXgXp")
+
+ notes = "aeaeaeae g#dg#dg#dg#d aeaeaeae g#dg#dg#2p2 aeaeaeae g#dg#dg#dg#d aeaeaeae g#dg#dg#2p2"
+ s22 = parseNotes(notes, bpm, freq/2, rate)
+
+ return s11.join(s12).join(s11).volume(0.5).mix(s21.join(s22).join(s21).volume(0.3))
+
+if __name__ == "__main__":
+ dev = aud.Device()
+ handle = dev.play(tetris(300, 220, dev.rate))
+ while handle.status:
+ time.sleep(0.1)
+
diff --git a/extern/audaspace/bindings/python/examples/tetris2.py b/extern/audaspace/bindings/python/examples/tetris2.py
new file mode 100644
index 00000000000..08708581af6
--- /dev/null
+++ b/extern/audaspace/bindings/python/examples/tetris2.py
@@ -0,0 +1,64 @@
+#!/usr/bin/python
+import aud, math, time
+
+def parseNotes(notes, bpm, basefreq, rate = 44100,
+ notechars = "XXXCXDXEFXGXAXHcXdXefXgXaXhp"):
+ pos = 0
+ fadelength = 60/bpm/10
+ halfchars = "#b"
+ durationchars = "2345678"
+ position = 0
+ sequence = aud.Sequence()
+
+ while pos < len(notes):
+ char = notes[pos]
+ mod = None
+ dur = 1
+ pos += 1
+ while pos < len(notes) and notes[pos] not in notechars:
+ if notes[pos] in halfchars:
+ mod = notes[pos]
+ elif notes[pos] in durationchars:
+ dur = notes[pos]
+ pos += 1
+
+ freq = notechars.find(char)
+ if mod == '#':
+ freq += 1
+ elif mod == 'b':
+ freq -= 1
+
+ freq = math.pow(2, freq/12)*basefreq
+ length = float(dur)*60/bpm
+
+ note = aud.Sound.square(freq, rate).fadein(0, fadelength).fadeout(length - fadelength, fadelength)
+
+ entry = sequence.add(note, position, position + length, 0)
+ if char == 'p':
+ entry.muted = True
+
+ position += length
+
+ return sequence.limit(0, position)
+
+def tetris(bpm = 300, freq = 220, rate = 44100):
+ notes = "e2Hcd2cH A2Ace2dc H3cd2e2 c2A2A4 pd2fa2gf e3ce2dc H2Hcd2e2 c2A2A2p2"
+ s11 = parseNotes(notes, bpm, freq, rate)
+
+ notes = "e4c4 d4H4 c4A4 G#4p4 e4c4 d4H4 A2c2a4 g#4p4"
+ s12 = parseNotes(notes, bpm, freq, rate)
+
+ notes = "EeEeEeEe AaAaAaAa AbabAbabAbabAbab AaAaAAHC DdDdDdDd CcCcCcCc HhHhHhHh AaAaA2p2"
+ s21 = parseNotes(notes, bpm, freq, rate, notechars = "AXHCXDXEFXGXaXhcXdXefXgXp")
+
+ notes = "aeaeaeae g#dg#dg#dg#d aeaeaeae g#dg#dg#2p2 aeaeaeae g#dg#dg#dg#d aeaeaeae g#dg#dg#2p2"
+ s22 = parseNotes(notes, bpm, freq/2, rate)
+
+ return s11.join(s12).join(s11).volume(0.5).mix(s21.join(s22).join(s21).volume(0.3))
+
+if __name__ == "__main__":
+ dev = aud.Device()
+ handle = dev.play(tetris(300, 220, dev.rate))
+ while handle.status:
+ time.sleep(0.1)
+
diff --git a/extern/audaspace/bindings/python/examples/tetris3.py b/extern/audaspace/bindings/python/examples/tetris3.py
new file mode 100644
index 00000000000..aa66d5457d3
--- /dev/null
+++ b/extern/audaspace/bindings/python/examples/tetris3.py
@@ -0,0 +1,63 @@
+#!/usr/bin/python
+import aud, math, time
+
+def parseNotes(notes, bpm, basefreq, rate = 44100,
+ notechars = "XXXCXDXEFXGXAXHcXdXefXgXaXhp"):
+ pos = 0
+ fadelength = 60/bpm/10
+ halfchars = "#b"
+ durationchars = "2345678"
+ position = 0
+ sequence = aud.Sequence()
+
+ while pos < len(notes):
+ char = notes[pos]
+ mod = None
+ dur = 1
+ pos += 1
+ while pos < len(notes) and notes[pos] not in notechars:
+ if notes[pos] in halfchars:
+ mod = notes[pos]
+ elif notes[pos] in durationchars:
+ dur = notes[pos]
+ pos += 1
+
+ freq = notechars.find(char)
+ if mod == '#':
+ freq += 1
+ elif mod == 'b':
+ freq -= 1
+
+ freq = math.pow(2, freq/12)*basefreq
+ length = float(dur)*60/bpm
+
+ if char != 'p':
+ note = aud.Sound.square(freq, rate).fadein(0, fadelength).fadeout(length - fadelength, fadelength)
+
+ sequence.add(note, position, position + length, 0)
+
+ position += length
+
+ return sequence.limit(0, position)
+
+def tetris(bpm = 300, freq = 220, rate = 44100):
+ notes = "e2Hcd2cH A2Ace2dc H3cd2e2 c2A2A4 pd2fa2gf e3ce2dc H2Hcd2e2 c2A2A2p2"
+ s11 = parseNotes(notes, bpm, freq, rate)
+
+ notes = "e4c4 d4H4 c4A4 G#4p4 e4c4 d4H4 A2c2a4 g#4p4"
+ s12 = parseNotes(notes, bpm, freq, rate)
+
+ notes = "EeEeEeEe AaAaAaAa AbabAbabAbabAbab AaAaAAHC DdDdDdDd CcCcCcCc HhHhHhHh AaAaA2p2"
+ s21 = parseNotes(notes, bpm, freq, rate, notechars = "AXHCXDXEFXGXaXhcXdXefXgXp")
+
+ notes = "aeaeaeae g#dg#dg#dg#d aeaeaeae g#dg#dg#2p2 aeaeaeae g#dg#dg#dg#d aeaeaeae g#dg#dg#2p2"
+ s22 = parseNotes(notes, bpm, freq/2, rate)
+
+ return s11.join(s12).join(s11).volume(0.5).mix(s21.join(s22).join(s21).volume(0.3))
+
+if __name__ == "__main__":
+ dev = aud.Device()
+ handle = dev.play(tetris(300, 220, dev.rate))
+ while handle.status:
+ time.sleep(0.1)
+
diff --git a/extern/audaspace/bindings/python/setup.py.in b/extern/audaspace/bindings/python/setup.py.in
new file mode 100644
index 00000000000..add1a2d1475
--- /dev/null
+++ b/extern/audaspace/bindings/python/setup.py.in
@@ -0,0 +1,61 @@
+# -*- coding: utf-8 -*-
+
+import sys
+import os
+import codecs
+import numpy
+
+from distutils.core import setup, Extension
+
+if len(sys.argv) > 2 and sys.argv[1] == '--build-docs':
+ import subprocess
+ from distutils.core import Distribution
+ from distutils.command.build import build
+
+ dist = Distribution()
+ cmd = build(dist)
+ cmd.finalize_options()
+ #print(cmd.build_platlib)
+
+ os.environ['PYTHONPATH'] = os.path.join(os.getcwd(), cmd.build_platlib)
+ os.environ['LD_LIBRARY_PATH'] = os.getcwd()
+
+ ret = subprocess.call(sys.argv[2:])
+ sys.exit(ret)
+
+
+# the following line is not working due to https://bugs.python.org/issue9023
+#source_directory = os.path.relpath('@PYTHON_SOURCE_DIRECTORY@')
+source_directory = '@PYTHON_SOURCE_DIRECTORY@'
+
+extra_args = []
+
+if sys.platform == 'win32':
+ extra_args.append('/EHsc')
+ extra_args.append('/DAUD_BUILD_SHARED_LIBRARY')
+else:
+ extra_args.append('-std=c++11')
+
+audaspace = Extension(
+ 'aud',
+ include_dirs = ['@CMAKE_CURRENT_BINARY_DIR@', '@FFTW_INCLUDE_DIR@', os.path.join(source_directory, '../../include'), numpy.get_include()],
+ libraries = ['audaspace'],
+ library_dirs = ['.', 'Release', 'Debug'],
+ language = 'c++',
+ extra_compile_args = extra_args,
+ sources = [os.path.join(source_directory, file) for file in ['PyAPI.cpp', 'PyDevice.cpp', 'PyHandle.cpp', 'PySound.cpp', 'PySequenceEntry.cpp', 'PySequence.cpp', 'PyPlaybackManager.cpp', 'PyDynamicMusic.cpp', 'PyThreadPool.cpp', 'PySource.cpp'] + (['PyImpulseResponse.cpp', 'PyHRTF.cpp'] if '@WITH_FFTW@' == 'ON' else [])]
+)
+
+setup(
+ name = 'audaspace',
+ version = '@AUDASPACE_LONG_VERSION@',
+ description = 'Audaspace is a high level audio library.',
+ author = 'Jörg Müller',
+ author_email = 'nexyon@gmail.com',
+ url = 'https://github.com/audaspace/audaspace',
+ license = 'Apache License 2.0',
+ long_description = codecs.open(os.path.join(source_directory, '../../README.md'), 'r', 'utf-8').read(),
+ ext_modules = [audaspace],
+ headers = [os.path.join(source_directory, file) for file in ['PyAPI.h', 'PyDevice.h', 'PyHandle.h', 'PySound.h', 'PySequenceEntry.h', 'PySequence.h', 'PyPlaybackManager.h', 'PyDynamicMusic.h', 'PyThreadPool.h', 'PySource.h'] + (['PyImpulseResponse.h', 'PyHRTF.h'] if '@WITH_FFTW@' == 'ON' else [])] + ['Audaspace.h']
+)
+
diff --git a/extern/audaspace/blender_config.cmake b/extern/audaspace/blender_config.cmake
new file mode 100644
index 00000000000..5b5440920d0
--- /dev/null
+++ b/extern/audaspace/blender_config.cmake
@@ -0,0 +1,26 @@
+set(AUDASPACE_STANDALONE FALSE)
+set(BUILD_DEMOS FALSE)
+set(SHARED_LIBRARY FALSE)
+set(WITH_C TRUE)
+set(WITH_DOCS FALSE)
+set(WITH_FFMPEG ${WITH_CODEC_FFMPEG})
+set(WITH_FFTW FALSE)
+set(WITH_LIBSNDFILE ${WITH_CODEC_SNDFILE})
+set(SEPARATE_C FALSE)
+set(PLUGIN_FFMPEG FALSE)
+set(PLUGIN_JACK FALSE)
+set(PLUGIN_LIBSNDFILE FALSE)
+set(PLUGIN_OPENAL FALSE)
+set(PLUGIN_SDL FALSE)
+set(WITH_PYTHON_MODULE FALSE)
+set(DYNLOAD_JACK ${WITH_JACK_DYNLOAD})
+set(WITH_BINDING_DOCS FALSE)
+set(BLENDER_AUDASPACE TRUE)
+set(FFMPEG_FOUND ${WITH_CODEC_FFMPEG})
+set(JACK_FOUND ${WITH_JACK})
+set(LIBSNDFILE_FOUND ${WITH_CODEC_SNDFILE})
+set(OPENAL_FOUND ${WITH_OPENAL})
+set(PYTHONLIBS_FOUND TRUE)
+set(NUMPY_FOUND TRUE)
+set(NUMPY_INCLUDE_DIRS ${PYTHON_NUMPY_INCLUDE_DIRS})
+set(SDL_FOUND ${WITH_SDL})
diff --git a/extern/audaspace/config/Audaspace.h.in b/extern/audaspace/config/Audaspace.h.in
new file mode 100644
index 00000000000..3e6912727b8
--- /dev/null
+++ b/extern/audaspace/config/Audaspace.h.in
@@ -0,0 +1,131 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file Audaspace.h
+ * @ingroup general
+ * The main header file of the library defining the namespace and basic data types.
+ */
+
+/**
+ * \def AUD_API
+ * Used for exporting symbols in the shared library.
+ */
+
+/**
+ * \def AUD_PLUGIN_API
+ * Used for exporting symbols in the shared library.
+ */
+
+/**
+ * \def AUD_EXPORT_API
+ * Used for using exporting symbols of the shared library.
+ */
+
+/**
+ * \def AUD_USE_API
+ * Used for using exporting symbols of the shared library.
+ */
+
+/**
+ * \def AUD_LOCAL
+ * Used for hiding symbols from export in the shared library.
+ */
+
+// the following two defines and undefines are a hack to silence an error by doxygen
+
+/**
+ * \def AUD_SHARED_LIBRARY
+ * Defined when audaspace was built as a shared library.
+ */
+#define AUD_SHARED_LIBRARY
+#undef AUD_SHARED_LIBRARY
+
+/**
+ * \def AUD_STATIC_LIBRARY
+ * Defined when audaspace was built as a static library.
+ */
+ #define AUD_STATIC_LIBRARY
+ #undef AUD_STATIC_LIBRARY
+
+#define @AUD_LIBRARY_TYPE@
+
+#ifdef _MSC_VER
+ #define AUD_EXPORT_API __declspec(dllexport)
+ #define AUD_USE_API __declspec(dllimport)
+ #define AUD_LOCAL
+#else
+ #ifdef __GNUC__
+ #define AUD_EXPORT_API __attribute__((visibility ("default")))
+ #define AUD_USE_API AUD_EXPORT_API
+ #define AUD_LOCAL __attribute__((visibility ("hidden")))
+ #else
+ #define AUD_EXPORT_API
+ #define AUD_USE_API
+ #define AUD_LOCAL
+ #endif
+#endif
+
+#ifdef AUD_SHARED_LIBRARY
+ #ifdef AUD_BUILD_PLUGIN
+ #define AUD_API AUD_USE_API
+ #define AUD_PLUGIN_API AUD_EXPORT_API
+ #else
+ #ifdef AUD_BUILD_SHARED_LIBRARY
+ #define AUD_API AUD_EXPORT_API
+ #define AUD_PLUGIN_API AUD_EXPORT_API
+ #else
+ #define AUD_API AUD_USE_API
+ #define AUD_PLUGIN_API AUD_USE_API
+ #endif
+ #endif
+#else
+ #define AUD_API
+ #define AUD_PLUGIN_API
+#endif
+
+/// The default playback buffer size of a device.
+#define AUD_DEFAULT_BUFFER_SIZE 1024
+
+#ifdef __cplusplus
+
+/// Opens the audaspace namespace aud.
+#define AUD_NAMESPACE_BEGIN namespace aud {
+
+/// Closes the audaspace namespace aud.
+#define AUD_NAMESPACE_END }
+
+#else
+
+/// Opens the audaspace namespace aud.
+#define AUD_NAMESPACE_BEGIN
+
+/// Closes the audaspace namespace aud.
+#define AUD_NAMESPACE_END
+
+#endif
+
+AUD_NAMESPACE_BEGIN
+
+/// Sample type.(float samples)
+typedef float sample_t;
+
+/// Sample data type (format samples)
+typedef unsigned char data_t;
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/Exception.h b/extern/audaspace/include/Exception.h
new file mode 100644
index 00000000000..b102bfade63
--- /dev/null
+++ b/extern/audaspace/include/Exception.h
@@ -0,0 +1,185 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * \def AUD_NOEXCEPT
+ * Compatibility macro for noexcept.
+ */
+#ifdef _MSC_VER
+#define AUD_NOEXCEPT
+#else
+#define AUD_NOEXCEPT noexcept
+#endif
+
+/**
+ * @file Exception.h
+ * @ingroup general
+ * Defines the Exception class as well as the AUD_THROW macro for easy throwing.
+ */
+
+#include "Audaspace.h"
+
+#include <exception>
+#include <string>
+
+/// Throws a Exception with the provided error code.
+#define AUD_THROW(exception, message) { throw exception(message, __FILE__, __LINE__); }
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * The Exception class is the general exception base class.
+ */
+class AUD_API Exception : public std::exception
+{
+protected:
+ /// A message describing the problem.
+ const std::string m_message;
+
+ /// The source code file in which the exception was thrown.
+ const std::string m_file;
+
+ /// The source code line from which the exception was thrown.
+ const int m_line;
+
+ /**
+ * Copy constructor.
+ * @param exception The exception to be copied.
+ */
+ Exception(const Exception& exception);
+
+ /**
+ * Creates a new Exception object.
+ * @param message A message describing the problem.
+ * @param file The source code file in which the exception was thrown.
+ * @param line The source code line from which the exception was thrown.
+ */
+ Exception(std::string message, std::string file, int line);
+public:
+ /**
+ * Destroys the object.
+ */
+ virtual ~Exception() AUD_NOEXCEPT;
+
+ /**
+ * Returns the error message.
+ * @return A C string error message.
+ */
+ virtual const char* what() const AUD_NOEXCEPT;
+
+ /**
+ * Returns the error message plus file and line number for debugging purposes.
+ * @return The error message including debug information.
+ */
+ virtual std::string getDebugMessage() const;
+
+ /**
+ * Returns the error message.
+ * @return The error message as string.
+ */
+ const std::string& getMessage() const;
+
+ /**
+ * Returns the file in which the exception was thrown.
+ * @return The name of the file in which the exception was thrown.
+ */
+ const std::string& getFile() const;
+
+ /**
+ * Returns the line where the exception was originally thrown.
+ * @return The line of the source file where the exception was generated.
+ */
+ int getLine() const;
+};
+
+/**
+ * The FileException class is used for error cases in which files cannot
+ * be read or written due to unknown containers or codecs.
+ */
+class AUD_API FileException : public Exception
+{
+public:
+ /**
+ * Creates a new FileException object.
+ * @param message A message describing the problem.
+ * @param file The source code file in which the exception was thrown.
+ * @param line The source code line from which the exception was thrown.
+ */
+ FileException(std::string message, std::string file, int line);
+
+ /**
+ * Copy constructor.
+ * @param exception The exception to be copied.
+ */
+ FileException(const FileException& exception);
+
+ ~FileException() AUD_NOEXCEPT;
+};
+
+/**
+ * The DeviceException class is used for error cases in connection with
+ * devices, which usually happens when specific features or requests
+ * cannot be fulfilled by a device, for example when the device is opened.
+ */
+class AUD_API DeviceException : public Exception
+{
+public:
+ /**
+ * Creates a new DeviceException object.
+ * @param message A message describing the problem.
+ * @param file The source code file in which the exception was thrown.
+ * @param line The source code line from which the exception was thrown.
+ */
+ DeviceException(std::string message, std::string file, int line);
+
+ /**
+ * Copy constructor.
+ * @param exception The exception to be copied.
+ */
+ DeviceException(const DeviceException& exception);
+
+ ~DeviceException() AUD_NOEXCEPT;
+};
+
+/**
+ * The StateException class is used for error cases of sounds or readers
+ * with illegal states or requirements for states of dependent classes.
+ * It is used for example when an effect reader needs a specific
+ * specification from its input.
+ */
+class AUD_API StateException : public Exception
+{
+public:
+ /**
+ * Creates a new StateException object.
+ * @param message A message describing the problem.
+ * @param file The source code file in which the exception was thrown.
+ * @param line The source code line from which the exception was thrown.
+ */
+ StateException(std::string message, std::string file, int line);
+
+ /**
+ * Copy constructor.
+ * @param exception The exception to be copied.
+ */
+ StateException(const StateException& exception);
+
+ ~StateException() AUD_NOEXCEPT;
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/IReader.h b/extern/audaspace/include/IReader.h
new file mode 100644
index 00000000000..c29900ca579
--- /dev/null
+++ b/extern/audaspace/include/IReader.h
@@ -0,0 +1,92 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file IReader.h
+ * @ingroup general
+ * The IReader interface.
+ */
+
+#include "respec/Specification.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * @interface IReader
+ * This class represents a sound source as stream or as buffer which can be read
+ * for example by another reader, a device or whatever.
+ */
+class AUD_API IReader
+{
+public:
+ /**
+ * Destroys the reader.
+ */
+ virtual ~IReader() {}
+
+ /**
+ * Tells whether the source provides seeking functionality or not.
+ * \warning This doesn't mean that the seeking always has to succeed.
+ * \return Always returns true for readers of buffering types.
+ */
+ virtual bool isSeekable() const=0;
+
+ /**
+ * Seeks to a specific position in the source.
+ * \param position The position to seek for measured in samples. To get
+ * from a given time to the samples you simply have to multiply the
+ * time value in seconds with the sample rate of the reader.
+ * \warning This may work or not, depending on the actual reader.
+ */
+ virtual void seek(int position)=0;
+
+ /**
+ * Returns an approximated length of the source in samples.
+ * \return The length as sample count. May be negative if unknown.
+ */
+ virtual int getLength() const=0;
+
+ /**
+ * Returns the position of the source as a sample count value.
+ * \return The current position in the source. A negative value indicates
+ * that the position is unknown.
+ * \warning The value returned doesn't always have to be correct for readers,
+ * especially after seeking.
+ */
+ virtual int getPosition() const=0;
+
+ /**
+ * Returns the specification of the reader.
+ * \return The Specs structure.
+ */
+ virtual Specs getSpecs() const=0;
+
+ /**
+ * Request to read the next length samples out of the source.
+ * The buffer supplied has the needed size.
+ * \param[in,out] length The count of samples that should be read. Shall
+ * contain the real count of samples after reading, in case
+ * there were only fewer samples available.
+ * A smaller value also indicates the end of the reader.
+ * \param[out] eos End of stream, whether the end is reached or not.
+ * \param[in] buffer The pointer to the buffer to read into.
+ */
+ virtual void read(int& length, bool& eos, sample_t* buffer)=0;
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/ISound.h b/extern/audaspace/include/ISound.h
new file mode 100644
index 00000000000..c28337e1b4e
--- /dev/null
+++ b/extern/audaspace/include/ISound.h
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file ISound.h
+ * @ingroup general
+ * The ISound interface.
+ */
+
+#include "Audaspace.h"
+
+#include <memory>
+
+AUD_NAMESPACE_BEGIN
+
+class IReader;
+
+/**
+ * @interface ISound
+ * This class represents a type of sound source and saves the necessary values
+ * for it. It is able to create a reader that is actually usable for playback
+ * of the respective sound source through the factory method createReader.
+ */
+class AUD_API ISound
+{
+public:
+ /**
+ * Destroys the sound.
+ */
+ virtual ~ISound() {}
+
+ /**
+ * Creates a reader for playback of the sound source.
+ * \return A pointer to an IReader object or nullptr if there has been an
+ * error.
+ * \exception Exception An exception may be thrown if there has been
+ * a more unexpected error during reader creation.
+ */
+ virtual std::shared_ptr<IReader> createReader()=0;
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/devices/DefaultSynchronizer.h b/extern/audaspace/include/devices/DefaultSynchronizer.h
new file mode 100644
index 00000000000..31f6c65219c
--- /dev/null
+++ b/extern/audaspace/include/devices/DefaultSynchronizer.h
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file DefaultSynchronizer.h
+ * @ingroup devices
+ * The DefaultSynchronizer class.
+ */
+
+#include "ISynchronizer.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This class is a default ISynchronizer implementation that actually does no
+ * synchronization and is intended for devices that don't support it.
+ */
+class AUD_API DefaultSynchronizer : public ISynchronizer
+{
+public:
+ virtual void seek(std::shared_ptr<IHandle> handle, float time);
+ virtual float getPosition(std::shared_ptr<IHandle> handle);
+ virtual void play();
+ virtual void stop();
+ virtual void setSyncCallback(syncFunction function, void* data);
+ virtual int isPlaying();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/devices/DeviceManager.h b/extern/audaspace/include/devices/DeviceManager.h
new file mode 100644
index 00000000000..27a546630e8
--- /dev/null
+++ b/extern/audaspace/include/devices/DeviceManager.h
@@ -0,0 +1,129 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file DeviceManager.h
+ * @ingroup devices
+ * The DeviceManager class.
+ */
+
+#include "Audaspace.h"
+
+#include <memory>
+#include <vector>
+#include <unordered_map>
+
+AUD_NAMESPACE_BEGIN
+
+class IDevice;
+class IDeviceFactory;
+class I3DDevice;
+
+/**
+ * This class manages all device plugins and maintains a device if asked to do so.
+ *
+ * This enables applications to access their output device without having to carry
+ * it through the whole application.
+ */
+class AUD_API DeviceManager
+{
+private:
+ static std::unordered_map<std::string, std::shared_ptr<IDeviceFactory>> m_factories;
+
+ static std::shared_ptr<IDevice> m_device;
+
+ // delete copy constructor and operator=
+ DeviceManager(const DeviceManager&) = delete;
+ DeviceManager& operator=(const DeviceManager&) = delete;
+ DeviceManager() = delete;
+
+public:
+ /**
+ * Registers a device factory.
+ *
+ * This method is mostly used by plugin developers to add their device implementation
+ * for general use by the library end users.
+ * @param name A representative name for the device.
+ * @param factory The factory that creates the device.
+ */
+ static void registerDevice(std::string name, std::shared_ptr<IDeviceFactory> factory);
+
+ /**
+ * Returns the factory for a specific device.
+ * @param name The representative name of the device.
+ * @return The factory if it was found, or nullptr otherwise.
+ */
+ static std::shared_ptr<IDeviceFactory> getDeviceFactory(std::string name);
+
+ /**
+ * Returns the default device based on the priorities of the registered factories.
+ * @return The default device or nullptr if no factory has been registered.
+ */
+ static std::shared_ptr<IDeviceFactory> getDefaultDeviceFactory();
+
+
+ /**
+ * Sets a device that should be handled by the manager.
+ *
+ * If a device is currently being handled it will be released.
+ * @param device The device the manager should take care of.
+ */
+ static void setDevice(std::shared_ptr<IDevice> device);
+
+ /**
+ * Opens a device which will then be handled by the manager.
+ *
+ * If a device is currently being handled it will be released.
+ * @param name The representative name of the device.
+ */
+ static void openDevice(std::string name);
+
+ /**
+ * Opens the default device which will then be handled by the manager.
+ *
+ * The device to open is selected based on the priority of the registered factories.
+ * If a device is currently being handled it will be released.
+ */
+ static void openDefaultDevice();
+
+ /**
+ * Releases the currently handled device.
+ */
+ static void releaseDevice();
+
+ /**
+ * Returns the currently handled device.
+ * @return The handled device or nullptr if no device has been registered.
+ */
+ static std::shared_ptr<IDevice> getDevice();
+
+ /**
+ * Returns the currently handled 3D device.
+ * @return The handled device or nullptr if no device has been registered
+ * or the registered device is not an I3DDevice.
+ */
+ static std::shared_ptr<I3DDevice> get3DDevice();
+
+ /**
+ * Returns a list of available devices.
+ * @return A list of strings with the names of available devices.
+ */
+ static std::vector<std::string> getAvailableDeviceNames();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/devices/I3DDevice.h b/extern/audaspace/include/devices/I3DDevice.h
new file mode 100644
index 00000000000..f49bbcbb07e
--- /dev/null
+++ b/extern/audaspace/include/devices/I3DDevice.h
@@ -0,0 +1,142 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file I3DDevice.h
+ * @ingroup devices
+ * Defines the I3DDevice interface as well as the different distance models.
+ */
+
+#include "util/Math3D.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * Possible distance models for the 3D device.
+ *
+ * The distance models supported are the same as documented in the [OpenAL Specification](http://openal.org/).
+ */
+enum DistanceModel
+{
+ DISTANCE_MODEL_INVALID = 0,
+ DISTANCE_MODEL_INVERSE,
+ DISTANCE_MODEL_INVERSE_CLAMPED,
+ DISTANCE_MODEL_LINEAR,
+ DISTANCE_MODEL_LINEAR_CLAMPED,
+ DISTANCE_MODEL_EXPONENT,
+ DISTANCE_MODEL_EXPONENT_CLAMPED
+};
+
+/**
+ * @interface I3DDevice
+ * The I3DDevice interface represents an output device for 3D sound.
+ *
+ * The interface has been modelled after the OpenAL 1.1 API,
+ * see the [OpenAL Specification](http://openal.org/) for lots of details.
+ */
+class AUD_API I3DDevice
+{
+public:
+ /**
+ * Retrieves the listener location.
+ * \return The listener location.
+ */
+ virtual Vector3 getListenerLocation() const=0;
+
+ /**
+ * Sets the listener location.
+ * \param location The new location.
+ * \note The location is not updated with the velocity and
+ * remains constant until the next call of this method.
+ */
+ virtual void setListenerLocation(const Vector3& location)=0;
+
+ /**
+ * Retrieves the listener velocity.
+ * \return The listener velocity.
+ */
+ virtual Vector3 getListenerVelocity() const=0;
+
+ /**
+ * Sets the listener velocity.
+ * \param velocity The new velocity.
+ * \note This velocity does not change the position of the listener
+ * over time, it is simply used for the calculation of the doppler effect.
+ */
+ virtual void setListenerVelocity(const Vector3& velocity)=0;
+
+ /**
+ * Retrieves the listener orientation.
+ * \return The listener orientation as quaternion.
+ */
+ virtual Quaternion getListenerOrientation() const=0;
+
+ /**
+ * Sets the listener orientation.
+ * \param orientation The new orientation as quaternion.
+ * \note The coordinate system used is right handed and the listener
+ * by default is oriented looking in the negative z direction with the
+ * positive y axis as up direction.
+ */
+ virtual void setListenerOrientation(const Quaternion& orientation)=0;
+
+
+ /**
+ * Retrieves the speed of sound.
+ * This value is needed for doppler effect calculation.
+ * \return The speed of sound.
+ */
+ virtual float getSpeedOfSound() const=0;
+
+ /**
+ * Sets the speed of sound.
+ * This value is needed for doppler effect calculation.
+ * \param speed The new speed of sound.
+ */
+ virtual void setSpeedOfSound(float speed)=0;
+
+ /**
+ * Retrieves the doppler factor.
+ * This value is a scaling factor for the velocity vectors of sources and
+ * listener which is used while calculating the doppler effect.
+ * \return The doppler factor.
+ */
+ virtual float getDopplerFactor() const=0;
+
+ /**
+ * Sets the doppler factor.
+ * This value is a scaling factor for the velocity vectors of sources and
+ * listener which is used while calculating the doppler effect.
+ * \param factor The new doppler factor.
+ */
+ virtual void setDopplerFactor(float factor)=0;
+
+ /**
+ * Retrieves the distance model.
+ * \return The distance model.
+ */
+ virtual DistanceModel getDistanceModel() const=0;
+
+ /**
+ * Sets the distance model.
+ * \param model distance model.
+ */
+ virtual void setDistanceModel(DistanceModel model)=0;
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/devices/I3DHandle.h b/extern/audaspace/include/devices/I3DHandle.h
new file mode 100644
index 00000000000..2ff29f9bd21
--- /dev/null
+++ b/extern/audaspace/include/devices/I3DHandle.h
@@ -0,0 +1,232 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file I3DHandle.h
+ * @ingroup devices
+ * The I3DHandle interface.
+ */
+
+#include "util/Math3D.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * @interface I3DHandle
+ * The I3DHandle interface represents a playback handle for 3D sources.
+ * If the playback IDevice class also implements the I3DDevice interface
+ * then all playback IHandle instances also implement this interface.
+ *
+ * The interface has been modelled after the OpenAL 1.1 API,
+ * see the [OpenAL Specification](http://openal.org/) for lots of details.
+ */
+class AUD_API I3DHandle
+{
+public:
+ /**
+ * Destroys the handle.
+ */
+ virtual ~I3DHandle() {}
+
+ /**
+ * Retrieves the location of the source.
+ * \return The location.
+ */
+ virtual Vector3 getLocation()=0;
+
+ /**
+ * Sets the location of the source.
+ * \param location The new location.
+ * \return Whether the action succeeded.
+ * \note The location is not updated with the velocity and
+ * remains constant until the next call of this method.
+ */
+ virtual bool setLocation(const Vector3& location)=0;
+
+ /**
+ * Retrieves the velocity of the source.
+ * \return The velocity.
+ */
+ virtual Vector3 getVelocity()=0;
+
+ /**
+ * Sets the velocity of the source.
+ * \param velocity The new velocity.
+ * \return Whether the action succeeded.
+ * \note This velocity does not change the position of the listener
+ * over time, it is simply used for the calculation of the doppler effect.
+ */
+ virtual bool setVelocity(const Vector3& velocity)=0;
+
+ /**
+ * Retrieves the orientation of the source.
+ * \return The orientation as quaternion.
+ */
+ virtual Quaternion getOrientation()=0;
+
+ /**
+ * Sets the orientation of the source.
+ * \param orientation The new orientation as quaternion.
+ * \return Whether the action succeeded.
+ * \note The coordinate system used is right handed and the source
+ * by default is oriented looking in the negative z direction with the
+ * positive y axis as up direction.
+ * \note This setting currently only affects sounds with non-default cone settings.
+ */
+ virtual bool setOrientation(const Quaternion& orientation)=0;
+
+
+ /**
+ * Checks whether the source location, velocity and orientation are relative
+ * to the listener.
+ * \return Whether the source is relative.
+ */
+ virtual bool isRelative()=0;
+
+ /**
+ * Sets whether the source location, velocity and orientation are relative
+ * to the listener.
+ * \param relative Whether the source is relative.
+ * \return Whether the action succeeded.
+ * \note The default value is true as this setting is used to play sounds ordinarily without 3D.
+ */
+ virtual bool setRelative(bool relative)=0;
+
+ /**
+ * Retrieves the maximum volume of a source.
+ * \return The maximum volume.
+ */
+ virtual float getVolumeMaximum()=0;
+
+ /**
+ * Sets the maximum volume of a source.
+ * \param volume The new maximum volume.
+ * \return Whether the action succeeded.
+ */
+ virtual bool setVolumeMaximum(float volume)=0;
+
+ /**
+ * Retrieves the minimum volume of a source.
+ * \return The minimum volume.
+ */
+ virtual float getVolumeMinimum()=0;
+
+ /**
+ * Sets the minimum volume of a source.
+ * \param volume The new minimum volume.
+ * \return Whether the action succeeded.
+ */
+ virtual bool setVolumeMinimum(float volume)=0;
+
+ /**
+ * Retrieves the maximum distance of a source.
+ * If a source is further away from the reader than this distance, the
+ * volume will automatically be set to 0.
+ * \return The maximum distance.
+ */
+ virtual float getDistanceMaximum()=0;
+
+ /**
+ * Sets the maximum distance of a source.
+ * If a source is further away from the reader than this distance, the
+ * volume will automatically be set to 0.
+ * \param distance The new maximum distance.
+ * \return Whether the action succeeded.
+ */
+ virtual bool setDistanceMaximum(float distance)=0;
+
+ /**
+ * Retrieves the reference distance of a source.
+ * \return The reference distance.
+ */
+ virtual float getDistanceReference()=0;
+
+ /**
+ * Sets the reference distance of a source.
+ * \param distance The new reference distance.
+ * \return Whether the action succeeded.
+ */
+ virtual bool setDistanceReference(float distance)=0;
+
+ /**
+ * Retrieves the attenuation of a source.
+ * \return The attenuation.
+ */
+ virtual float getAttenuation()=0;
+
+ /**
+ * Sets the attenuation of a source.
+ * This value is used for distance calculation.
+ * \param factor The new attenuation.
+ * \return Whether the action succeeded.
+ */
+ virtual bool setAttenuation(float factor)=0;
+
+ /**
+ * Retrieves the outer opening angle of the cone of a source.
+ * \return The outer angle of the cone.
+ * \note This angle is defined in degrees.
+ */
+ virtual float getConeAngleOuter()=0;
+
+ /**
+ * Sets the outer opening angle of the cone of a source.
+ * \param angle The new outer angle of the cone.
+ * \return Whether the action succeeded.
+ * \note This angle is defined in degrees.
+ */
+ virtual bool setConeAngleOuter(float angle)=0;
+
+ /**
+ * Retrieves the inner opening angle of the cone of a source.
+ * The volume inside this cone is unaltered.
+ * \return The inner angle of the cone.
+ * \note This angle is defined in degrees.
+ */
+ virtual float getConeAngleInner()=0;
+
+ /**
+ * Sets the inner opening angle of the cone of a source.
+ * The volume inside this cone is unaltered.
+ * \param angle The new inner angle of the cone.
+ * \return Whether the action succeeded.
+ * \note This angle is defined in degrees.
+ */
+ virtual bool setConeAngleInner(float angle)=0;
+
+ /**
+ * Retrieves the outer volume of the cone of a source.
+ * The volume between inner and outer angle is interpolated between inner
+ * volume and this value.
+ * \return The outer volume of the cone.
+ * \note The general volume of the handle still applies on top of this.
+ */
+ virtual float getConeVolumeOuter()=0;
+
+ /**
+ * Sets the outer volume of the cone of a source.
+ * The volume between inner and outer angle is interpolated between inner
+ * volume and this value.
+ * \param volume The new outer volume of the cone.
+ * \return Whether the action succeeded.
+ * \note The general volume of the handle still applies on top of this.
+ */
+ virtual bool setConeVolumeOuter(float volume)=0;
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/devices/IDevice.h b/extern/audaspace/include/devices/IDevice.h
new file mode 100644
index 00000000000..92a85d900e2
--- /dev/null
+++ b/extern/audaspace/include/devices/IDevice.h
@@ -0,0 +1,123 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file IDevice.h
+ * @ingroup devices
+ * The IDevice interface.
+ */
+
+#include "respec/Specification.h"
+#include "util/ILockable.h"
+
+#include <memory>
+
+AUD_NAMESPACE_BEGIN
+
+class IHandle;
+class IReader;
+class ISound;
+class ISynchronizer;
+
+/**
+ * @interface IDevice
+ * The IDevice interface represents an output device for sound sources.
+ * Output devices may be several backends such as plattform independand like
+ * SDL or OpenAL or plattform specific like ALSA, but they may also be
+ * files, RAM buffers or other types of streams.
+ * \warning Thread safety must be insured so that no reader is beeing called
+ * twice at the same time.
+ */
+class IDevice : public ILockable
+{
+public:
+ /**
+ * Destroys the device.
+ */
+ virtual ~IDevice() {}
+
+ /**
+ * Returns the specification of the device.
+ */
+ virtual DeviceSpecs getSpecs() const=0;
+
+ /**
+ * Plays a sound source.
+ * \param reader The reader to play.
+ * \param keep When keep is true the sound source will not be deleted but
+ * set to paused when its end has been reached.
+ * \return Returns a handle with which the playback can be controlled.
+ * This is nullptr if the sound couldn't be played back.
+ * \exception Exception Thrown if there's an unexpected (from the
+ * device side) error during creation of the reader.
+ */
+ virtual std::shared_ptr<IHandle> play(std::shared_ptr<IReader> reader, bool keep = false)=0;
+
+ /**
+ * Plays a sound source.
+ * \param sound The sound to create the reader for the sound source.
+ * \param keep When keep is true the sound source will not be deleted but
+ * set to paused when its end has been reached.
+ * \return Returns a handle with which the playback can be controlled.
+ * This is nullptr if the sound couldn't be played back.
+ * \exception Exception Thrown if there's an unexpected (from the
+ * device side) error during creation of the reader.
+ */
+ virtual std::shared_ptr<IHandle> play(std::shared_ptr<ISound> sound, bool keep = false)=0;
+
+ /**
+ * Stops all playing sounds.
+ */
+ virtual void stopAll()=0;
+
+ /**
+ * Locks the device.
+ * Used to make sure that between lock and unlock, no buffers are read, so
+ * that it is possible to start, resume, pause, stop or seek several
+ * playback handles simultaneously.
+ * \warning Make sure the locking time is as small as possible to avoid
+ * playback delays that result in unexpected noise and cracks.
+ */
+ virtual void lock()=0;
+
+ /**
+ * Unlocks the previously locked device.
+ */
+ virtual void unlock()=0;
+
+ /**
+ * Retrieves the overall device volume.
+ * \return The overall device volume.
+ */
+ virtual float getVolume() const=0;
+
+ /**
+ * Sets the overall device volume.
+ * \param volume The overall device volume.
+ */
+ virtual void setVolume(float volume)=0;
+
+ /**
+ * Retrieves the synchronizer for this device, which enables accurate synchronization
+ * between audio playback and video playback for example.
+ * @return The synchronizer which will be the DefaultSynchronizer if synchonization is not supported.
+ */
+ virtual ISynchronizer* getSynchronizer()=0;
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/devices/IDeviceFactory.h b/extern/audaspace/include/devices/IDeviceFactory.h
new file mode 100644
index 00000000000..6a0f4537b13
--- /dev/null
+++ b/extern/audaspace/include/devices/IDeviceFactory.h
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file IDeviceFactory.h
+ * @ingroup devices
+ * The IDeviceFactory interface.
+ */
+
+#include "respec/Specification.h"
+
+#include <memory>
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * @interface IDeviceFactory
+ * The IDeviceFactory interface opens an output device.
+ */
+class AUD_API IDeviceFactory
+{
+public:
+ /**
+ * Opens an audio device for playback.
+ * \exception Exception Thrown if the audio device cannot be opened.
+ */
+ virtual std::shared_ptr<IDevice> openDevice()=0;
+
+ /**
+ * Returns the priority of the device to be the default device for a system.
+ * The higher the priority the more likely it is for this device to be used as the default device.
+ * \return Priority to be the default device.
+ */
+ virtual int getPriority()=0;
+
+ /**
+ * Sets the wanted device specifications for opening the device.
+ * \param specs The wanted audio specification.
+ */
+ virtual void setSpecs(DeviceSpecs specs)=0;
+
+ /**
+ * Sets the size for the internal playback buffers.
+ * The bigger the buffersize, the less likely clicks happen,
+ * but the latency increases too.
+ * \param buffersize The size of the internal buffer.
+ */
+ virtual void setBufferSize(int buffersize)=0;
+
+ /**
+ * Sets a name for the device.
+ * \param name The internal name for the device.
+ */
+ virtual void setName(std::string name)=0;
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/devices/IHandle.h b/extern/audaspace/include/devices/IHandle.h
new file mode 100644
index 00000000000..3f42fc33c3a
--- /dev/null
+++ b/extern/audaspace/include/devices/IHandle.h
@@ -0,0 +1,189 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file IHandle.h
+ * @ingroup devices
+ * Defines the IHandle interface as well as possible states of the handle.
+ */
+
+#include "Audaspace.h"
+
+AUD_NAMESPACE_BEGIN
+
+/// Status of a playback handle.
+enum Status
+{
+ STATUS_INVALID = 0, /// Invalid handle. Maybe due to stopping.
+ STATUS_PLAYING, /// Sound is playing.
+ STATUS_PAUSED, /// Sound is being paused.
+ STATUS_STOPPED /// Sound is stopped but kept in the device.
+};
+
+/**
+ * The stopCallback is called when a handle reaches the end of the stream and
+ * thus gets stopped. A user defined pointer is supplied to the callback.
+ */
+typedef void (*stopCallback)(void*);
+
+/**
+ * @interface IHandle
+ * The IHandle interface represents a playback handles of a specific device.
+ */
+class AUD_API IHandle
+{
+public:
+ /**
+ * Destroys the handle.
+ */
+ virtual ~IHandle() {}
+
+ /**
+ * Pauses a played back sound.
+ * \return
+ * - true if the sound has been paused.
+ * - false if the sound isn't playing back or the handle is invalid.
+ */
+ virtual bool pause()=0;
+
+ /**
+ * Resumes a paused sound.
+ * \return
+ * - true if the sound has been resumed.
+ * - false if the sound isn't paused or the handle is invalid.
+ */
+ virtual bool resume()=0;
+
+ /**
+ * Stops a played back or paused sound. The handle is definitely invalid
+ * afterwards.
+ * \return
+ * - true if the sound has been stopped.
+ * - false if the handle is invalid.
+ */
+ virtual bool stop()=0;
+
+ /**
+ * Gets the behaviour of the device for a played back sound when the sound
+ * doesn't return any more samples.
+ * \return
+ * - true if the source will be paused when it's end is reached
+ * - false if the handle won't kept or is invalid.
+ */
+ virtual bool getKeep()=0;
+
+ /**
+ * Sets the behaviour of the device for a played back sound when the sound
+ * doesn't return any more samples.
+ * \param keep True when the source should be paused and not deleted.
+ * \return
+ * - true if the behaviour has been changed.
+ * - false if the handle is invalid.
+ */
+ virtual bool setKeep(bool keep)=0;
+
+ /**
+ * Seeks in a played back sound.
+ * \param position The new position from where to play back, in seconds.
+ * \return
+ * - true if the handle is valid.
+ * - false if the handle is invalid.
+ * \warning Whether the seek works or not depends on the sound source.
+ */
+ virtual bool seek(float position)=0;
+
+ /**
+ * Retrieves the current playback position of a sound.
+ * \return The playback position in seconds, or 0.0 if the handle is
+ * invalid.
+ */
+ virtual float getPosition()=0;
+
+ /**
+ * Returns the status of a played back sound.
+ * \return
+ * - STATUS_INVALID if the sound has stopped or the handle is
+ *. invalid
+ * - STATUS_PLAYING if the sound is currently played back.
+ * - STATUS_PAUSED if the sound is currently paused.
+ * - STATUS_STOPPED if the sound finished playing and is still
+ * kept in the device.
+ * \see Status
+ */
+ virtual Status getStatus()=0;
+
+ /**
+ * Retrieves the volume of a playing sound.
+ * \return The volume.
+ */
+ virtual float getVolume()=0;
+
+ /**
+ * Sets the volume of a playing sound.
+ * \param volume The volume.
+ * \return
+ * - true if the handle is valid.
+ * - false if the handle is invalid.
+ */
+ virtual bool setVolume(float volume)=0;
+
+ /**
+ * Retrieves the pitch of a playing sound.
+ * \return The pitch.
+ */
+ virtual float getPitch()=0;
+
+ /**
+ * Sets the pitch of a playing sound.
+ * \param pitch The pitch.
+ * \return
+ * - true if the handle is valid.
+ * - false if the handle is invalid.
+ */
+ virtual bool setPitch(float pitch)=0;
+
+ /**
+ * Retrieves the loop count of a playing sound.
+ * A negative value indicates infinity.
+ * \return The remaining loop count.
+ */
+ virtual int getLoopCount()=0;
+
+ /**
+ * Sets the loop count of a playing sound.
+ * A negative value indicates infinity.
+ * \param count The new loop count.
+ * \return
+ * - true if the handle is valid.
+ * - false if the handle is invalid.
+ */
+ virtual bool setLoopCount(int count)=0;
+
+ /**
+ * Sets the callback function that's called when the end of a playing sound
+ * is reached.
+ * \param callback The callback function.
+ * \param data The data that should be passed to the callback function.
+ * \return
+ * - true if the handle is valid.
+ * - false if the handle is invalid.
+ */
+ virtual bool setStopCallback(stopCallback callback = 0, void* data = 0)=0;
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/devices/ISynchronizer.h b/extern/audaspace/include/devices/ISynchronizer.h
new file mode 100644
index 00000000000..6f14de59565
--- /dev/null
+++ b/extern/audaspace/include/devices/ISynchronizer.h
@@ -0,0 +1,92 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file ISynchronizer.h
+ * @ingroup devices
+ * The ISynchronizer interface.
+ */
+
+#include "Audaspace.h"
+
+#include <memory>
+
+AUD_NAMESPACE_BEGIN
+
+class IHandle;
+
+/**
+ * @interface ISynchronizer
+ * This class enables global synchronization of several audio applications if supported.
+ * JACK for example supports synchronization through JACK Transport.
+ */
+class AUD_API ISynchronizer
+{
+public:
+ /**
+ * Destroys the synchronizer.
+ */
+ virtual ~ISynchronizer() {}
+
+ /**
+ * The syncFunction is called when a synchronization event happens.
+ * The function awaits three parameters. The first one is a user defined
+ * pointer, the second informs about whether playback is on and the third
+ * is the current playback time in seconds.
+ */
+ typedef void (*syncFunction)(void*, int, float);
+
+ /**
+ * Sets the playback position of a handle and the synchronizer to a specific time.
+ * @param handle The handle that should be synchronized/seeked.
+ * @param time The absolute time to synchronize to.
+ */
+ virtual void seek(std::shared_ptr<IHandle> handle, float time) = 0;
+
+ /**
+ * Retrieves the position of the synchronizer.
+ * @param handle The handle which is synchronized.
+ * @return The position in seconds.
+ */
+ virtual float getPosition(std::shared_ptr<IHandle> handle) = 0;
+
+ /**
+ * Starts the synchronizer playback.
+ */
+ virtual void play() = 0;
+
+ /**
+ * Stops the synchronizer playback.
+ */
+ virtual void stop() = 0;
+
+ /**
+ * Sets the callback function that is called when a synchronization event happens.
+ * @param function The function to be called.
+ * @param data User data to be passed to the callback.
+ */
+ virtual void setSyncCallback(syncFunction function, void* data) = 0;
+
+ /**
+ * Retrieves whether the synchronizer is playing back.
+ * @return Whether the synchronizer plays back.
+ */
+ virtual int isPlaying() = 0;
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/devices/NULLDevice.h b/extern/audaspace/include/devices/NULLDevice.h
new file mode 100644
index 00000000000..76211a799b9
--- /dev/null
+++ b/extern/audaspace/include/devices/NULLDevice.h
@@ -0,0 +1,96 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file NULLDevice.h
+ * @ingroup devices
+ * The NULLDevice class.
+ */
+
+#include "devices/IDevice.h"
+#include "devices/IHandle.h"
+
+AUD_NAMESPACE_BEGIN
+
+class IReader;
+
+/**
+ * This device plays nothing.
+ * It is similar to the linux device /dev/null.
+ */
+class AUD_API NULLDevice : public IDevice
+{
+private:
+ class AUD_LOCAL NULLHandle : public IHandle
+ {
+ private:
+ // delete copy constructor and operator=
+ NULLHandle(const NULLHandle&) = delete;
+ NULLHandle& operator=(const NULLHandle&) = delete;
+
+ public:
+
+ NULLHandle();
+
+ virtual ~NULLHandle() {}
+ virtual bool pause();
+ virtual bool resume();
+ virtual bool stop();
+ virtual bool getKeep();
+ virtual bool setKeep(bool keep);
+ virtual bool seek(float position);
+ virtual float getPosition();
+ virtual Status getStatus();
+ virtual float getVolume();
+ virtual bool setVolume(float volume);
+ virtual float getPitch();
+ virtual bool setPitch(float pitch);
+ virtual int getLoopCount();
+ virtual bool setLoopCount(int count);
+ virtual bool setStopCallback(stopCallback callback = 0, void* data = 0);
+ };
+
+ // delete copy constructor and operator=
+ NULLDevice(const NULLDevice&) = delete;
+ NULLDevice& operator=(const NULLDevice&) = delete;
+
+public:
+ /**
+ * Creates a new NULLDevice.
+ */
+ NULLDevice();
+
+ virtual ~NULLDevice();
+
+ virtual DeviceSpecs getSpecs() const;
+ virtual std::shared_ptr<IHandle> play(std::shared_ptr<IReader> reader, bool keep = false);
+ virtual std::shared_ptr<IHandle> play(std::shared_ptr<ISound> sound, bool keep = false);
+ virtual void stopAll();
+ virtual void lock();
+ virtual void unlock();
+ virtual float getVolume() const;
+ virtual void setVolume(float volume);
+ virtual ISynchronizer* getSynchronizer();
+
+ /**
+ * Registers this plugin.
+ */
+ static void registerPlugin();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/devices/ReadDevice.h b/extern/audaspace/include/devices/ReadDevice.h
new file mode 100644
index 00000000000..b56bd8ce5c4
--- /dev/null
+++ b/extern/audaspace/include/devices/ReadDevice.h
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file ReadDevice.h
+ * @ingroup devices
+ * The ReadDevice class.
+ */
+
+#include "devices/SoftwareDevice.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This device enables to let the user read raw data out of it.
+ */
+class AUD_API ReadDevice : public SoftwareDevice
+{
+private:
+ /**
+ * Whether the device is currently playing back.
+ */
+ bool m_playing;
+
+ // delete copy constructor and operator=
+ ReadDevice(const ReadDevice&) = delete;
+ ReadDevice& operator=(const ReadDevice&) = delete;
+
+protected:
+ virtual void AUD_LOCAL playing(bool playing);
+
+public:
+ /**
+ * Creates a new read device.
+ * \param specs The wanted audio specification.
+ */
+ ReadDevice(DeviceSpecs specs);
+
+ /**
+ * Creates a new read device.
+ * \param specs The wanted audio specification.
+ */
+ ReadDevice(Specs specs);
+
+ /**
+ * Closes the device.
+ */
+ virtual ~ReadDevice();
+
+ /**
+ * Reads the next bytes into the supplied buffer.
+ * \param buffer The target buffer.
+ * \param length The length in samples to be filled.
+ * \return True if the reading succeeded, false if there are no sounds
+ * played back currently, in that case the buffer is filled with
+ * silence.
+ */
+ bool read(data_t* buffer, int length);
+
+ /**
+ * Changes the output specification.
+ * \param specs The new audio data specification.
+ */
+ void changeSpecs(Specs specs);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/devices/SoftwareDevice.h b/extern/audaspace/include/devices/SoftwareDevice.h
new file mode 100644
index 00000000000..8f3846394c6
--- /dev/null
+++ b/extern/audaspace/include/devices/SoftwareDevice.h
@@ -0,0 +1,368 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file SoftwareDevice.h
+ * @ingroup devices
+ * The SoftwareDevice class.
+ */
+
+#include "devices/IDevice.h"
+#include "devices/IHandle.h"
+#include "devices/I3DDevice.h"
+#include "devices/I3DHandle.h"
+#include "devices/DefaultSynchronizer.h"
+#include "util/Buffer.h"
+
+#include <list>
+#include <mutex>
+
+AUD_NAMESPACE_BEGIN
+
+class Mixer;
+class PitchReader;
+class ResampleReader;
+class ChannelMapperReader;
+
+/**
+ * The software device is a generic device with software mixing.
+ * It is a base class for all software mixing classes.
+ * Classes implementing this have to:
+ * - Implement the playing function.
+ * - Prepare the m_specs, m_mixer variables.
+ * - Call the create and destroy functions.
+ * - Call the mix function to retrieve their audio data.
+ */
+class AUD_API SoftwareDevice : public IDevice, public I3DDevice
+{
+protected:
+ /// Saves the data for playback.
+ class AUD_API SoftwareHandle : public IHandle, public I3DHandle
+ {
+ private:
+ // delete copy constructor and operator=
+ SoftwareHandle(const SoftwareHandle&) = delete;
+ SoftwareHandle& operator=(const SoftwareHandle&) = delete;
+
+ public:
+ /// The reader source.
+ std::shared_ptr<IReader> m_reader;
+
+ /// The pitch reader in between.
+ std::shared_ptr<PitchReader> m_pitch;
+
+ /// The resample reader in between.
+ std::shared_ptr<ResampleReader> m_resampler;
+
+ /// The channel mapper reader in between.
+ std::shared_ptr<ChannelMapperReader> m_mapper;
+
+ /// Whether to keep the source if end of it is reached.
+ bool m_keep;
+
+ /// The user set pitch of the source.
+ float m_user_pitch;
+
+ /// The user set volume of the source.
+ float m_user_volume;
+
+ /// The user set panning for non-3D sources
+ float m_user_pan;
+
+ /// The calculated final volume of the source.
+ float m_volume;
+
+ /// The previous calculated final volume of the source.
+ float m_old_volume;
+
+ /// The loop count of the source.
+ int m_loopcount;
+
+ /// Location in 3D Space.
+ Vector3 m_location;
+
+ /// Velocity in 3D Space.
+ Vector3 m_velocity;
+
+ /// Orientation in 3D Space.
+ Quaternion m_orientation;
+
+ /// Whether the position to the listener is relative or absolute
+ bool m_relative;
+
+ /// Maximum volume.
+ float m_volume_max;
+
+ /// Minimum volume.
+ float m_volume_min;
+
+ /// Maximum distance.
+ float m_distance_max;
+
+ /// Reference distance;
+ float m_distance_reference;
+
+ /// Attenuation
+ float m_attenuation;
+
+ /// Cone outer angle.
+ float m_cone_angle_outer;
+
+ /// Cone inner angle.
+ float m_cone_angle_inner;
+
+ /// Cone outer volume.
+ float m_cone_volume_outer;
+
+ /// Rendering flags
+ int m_flags;
+
+ /// The stop callback.
+ stopCallback m_stop;
+
+ /// Stop callback data.
+ void* m_stop_data;
+
+ /// Current status of the handle
+ Status m_status;
+
+ /// Own device.
+ SoftwareDevice* m_device;
+
+ /**
+ * This method is for internal use only.
+ * @param keep Whether the sound should be marked stopped or paused.
+ * @return Whether the action succeeded.
+ */
+ bool pause(bool keep);
+
+ public:
+ /**
+ * Creates a new software handle.
+ * \param device The device this handle is from.
+ * \param reader The reader to play.
+ * \param pitch The pitch reader.
+ * \param resampler The resampling reader.
+ * \param mapper The channel mapping reader.
+ * \param keep Whether to keep the handle when the sound ends.
+ */
+ SoftwareHandle(SoftwareDevice* device, std::shared_ptr<IReader> reader, std::shared_ptr<PitchReader> pitch, std::shared_ptr<ResampleReader> resampler, std::shared_ptr<ChannelMapperReader> mapper, bool keep);
+
+ /**
+ * Updates the handle's playback parameters.
+ */
+ void update();
+
+ /**
+ * Sets the audio output specification of the readers.
+ * \param specs The output specification.
+ */
+ void setSpecs(Specs specs);
+
+ virtual ~SoftwareHandle() {}
+ virtual bool pause();
+ virtual bool resume();
+ virtual bool stop();
+ virtual bool getKeep();
+ virtual bool setKeep(bool keep);
+ virtual bool seek(float position);
+ virtual float getPosition();
+ virtual Status getStatus();
+ virtual float getVolume();
+ virtual bool setVolume(float volume);
+ virtual float getPitch();
+ virtual bool setPitch(float pitch);
+ virtual int getLoopCount();
+ virtual bool setLoopCount(int count);
+ virtual bool setStopCallback(stopCallback callback = 0, void* data = 0);
+
+ virtual Vector3 getLocation();
+ virtual bool setLocation(const Vector3& location);
+ virtual Vector3 getVelocity();
+ virtual bool setVelocity(const Vector3& velocity);
+ virtual Quaternion getOrientation();
+ virtual bool setOrientation(const Quaternion& orientation);
+ virtual bool isRelative();
+ virtual bool setRelative(bool relative);
+ virtual float getVolumeMaximum();
+ virtual bool setVolumeMaximum(float volume);
+ virtual float getVolumeMinimum();
+ virtual bool setVolumeMinimum(float volume);
+ virtual float getDistanceMaximum();
+ virtual bool setDistanceMaximum(float distance);
+ virtual float getDistanceReference();
+ virtual bool setDistanceReference(float distance);
+ virtual float getAttenuation();
+ virtual bool setAttenuation(float factor);
+ virtual float getConeAngleOuter();
+ virtual bool setConeAngleOuter(float angle);
+ virtual float getConeAngleInner();
+ virtual bool setConeAngleInner(float angle);
+ virtual float getConeVolumeOuter();
+ virtual bool setConeVolumeOuter(float volume);
+ };
+
+ /**
+ * The specification of the device.
+ */
+ DeviceSpecs m_specs;
+
+ /**
+ * The mixer.
+ */
+ std::shared_ptr<Mixer> m_mixer;
+
+ /**
+ * Whether to do high or low quality resampling.
+ */
+ bool m_quality;
+
+ /**
+ * Initializes member variables.
+ */
+ void create();
+
+ /**
+ * Uninitializes member variables.
+ */
+ void destroy();
+
+ /**
+ * Mixes the next samples into the buffer.
+ * \param buffer The target buffer.
+ * \param length The length in samples to be filled.
+ */
+ void mix(data_t* buffer, int length);
+
+ /**
+ * This function tells the device, to start or pause playback.
+ * \param playing True if device should playback.
+ */
+ virtual void playing(bool playing)=0;
+
+ /**
+ * Sets the audio output specification of the device.
+ * \param specs The output specification.
+ */
+ void setSpecs(Specs specs);
+
+ /**
+ * Empty default constructor. To setup the device call the function create()
+ * and to uninitialize call destroy().
+ */
+ SoftwareDevice();
+
+private:
+ /**
+ * The reading buffer.
+ */
+ Buffer m_buffer;
+
+ /**
+ * The list of sounds that are currently playing.
+ */
+ std::list<std::shared_ptr<SoftwareHandle> > m_playingSounds;
+
+ /**
+ * The list of sounds that are currently paused.
+ */
+ std::list<std::shared_ptr<SoftwareHandle> > m_pausedSounds;
+
+ /**
+ * Whether there is currently playback.
+ */
+ bool m_playback;
+
+ /**
+ * The mutex for locking.
+ */
+ std::recursive_mutex m_mutex;
+
+ /**
+ * The overall volume of the device.
+ */
+ float m_volume;
+
+ /// Listener location.
+ Vector3 m_location;
+
+ /// Listener velocity.
+ Vector3 m_velocity;
+
+ /// Listener orientation.
+ Quaternion m_orientation;
+
+ /// Speed of Sound.
+ float m_speed_of_sound;
+
+ /// Doppler factor.
+ float m_doppler_factor;
+
+ /// Distance model.
+ DistanceModel m_distance_model;
+
+ /// Rendering flags
+ int m_flags;
+
+ /// Synchronizer.
+ DefaultSynchronizer m_synchronizer;
+
+ // delete copy constructor and operator=
+ SoftwareDevice(const SoftwareDevice&) = delete;
+ SoftwareDevice& operator=(const SoftwareDevice&) = delete;
+
+public:
+
+ /**
+ * Sets the panning of a specific handle.
+ * \param handle The handle to set the panning from.
+ * \param pan The new panning value, should be in the range [-2, 2].
+ */
+ static void setPanning(IHandle* handle, float pan);
+
+ /**
+ * Sets the resampling quality.
+ * \param quality Low (false) or high (true) quality.
+ */
+ void setQuality(bool quality);
+
+ virtual DeviceSpecs getSpecs() const;
+ virtual std::shared_ptr<IHandle> play(std::shared_ptr<IReader> reader, bool keep = false);
+ virtual std::shared_ptr<IHandle> play(std::shared_ptr<ISound> sound, bool keep = false);
+ virtual void stopAll();
+ virtual void lock();
+ virtual void unlock();
+ virtual float getVolume() const;
+ virtual void setVolume(float volume);
+ virtual ISynchronizer* getSynchronizer();
+
+ virtual Vector3 getListenerLocation() const;
+ virtual void setListenerLocation(const Vector3& location);
+ virtual Vector3 getListenerVelocity() const;
+ virtual void setListenerVelocity(const Vector3& velocity);
+ virtual Quaternion getListenerOrientation() const;
+ virtual void setListenerOrientation(const Quaternion& orientation);
+ virtual float getSpeedOfSound() const;
+ virtual void setSpeedOfSound(float speed);
+ virtual float getDopplerFactor() const;
+ virtual void setDopplerFactor(float factor);
+ virtual DistanceModel getDistanceModel() const;
+ virtual void setDistanceModel(DistanceModel model);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/file/File.h b/extern/audaspace/include/file/File.h
new file mode 100644
index 00000000000..24745a757e8
--- /dev/null
+++ b/extern/audaspace/include/file/File.h
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file File.h
+ * @ingroup file
+ * The File class.
+ */
+
+#include "ISound.h"
+
+#include <string>
+#include <memory>
+
+AUD_NAMESPACE_BEGIN
+
+class Buffer;
+
+/**
+ * The File sound tries to read a sound file via all available file inputs
+ * that have been registered in the FileManager class.
+ */
+class AUD_API File : public ISound
+{
+private:
+ /**
+ * The filename of the sound source file.
+ */
+ std::string m_filename;
+
+ /**
+ * The buffer to read from.
+ */
+ std::shared_ptr<Buffer> m_buffer;
+
+ // delete copy constructor and operator=
+ File(const File&) = delete;
+ File& operator=(const File&) = delete;
+
+public:
+ /**
+ * Creates a new sound.
+ * The file is read from the file system using the given path.
+ * \param filename The sound file path.
+ */
+ File(std::string filename);
+
+ /**
+ * Creates a new sound.
+ * The file is read from memory using the supplied buffer.
+ * \param buffer The buffer to read from.
+ * \param size The size of the buffer.
+ */
+ File(const data_t* buffer, int size);
+
+ virtual std::shared_ptr<IReader> createReader();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/file/FileManager.h b/extern/audaspace/include/file/FileManager.h
new file mode 100644
index 00000000000..03943ea8ae0
--- /dev/null
+++ b/extern/audaspace/include/file/FileManager.h
@@ -0,0 +1,95 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file FileManager.h
+ * @ingroup file
+ * The FileManager class.
+ */
+
+#include "respec/Specification.h"
+#include "IWriter.h"
+
+#include <list>
+#include <memory>
+
+AUD_NAMESPACE_BEGIN
+
+class IFileInput;
+class IFileOutput;
+class IReader;
+class Buffer;
+
+/**
+ * The FileManager manages all file input and output plugins.
+ */
+class AUD_API FileManager
+{
+private:
+ static std::list<std::shared_ptr<IFileInput>>& inputs();
+ static std::list<std::shared_ptr<IFileOutput>>& outputs();
+
+ // delete copy constructor and operator=
+ FileManager(const FileManager&) = delete;
+ FileManager& operator=(const FileManager&) = delete;
+ FileManager() = delete;
+
+public:
+ /**
+ * Registers a file input used to create an IReader to read from a file.
+ * @param input The IFileInput to register.
+ */
+ static void registerInput(std::shared_ptr<IFileInput> input);
+
+ /**
+ * Registers a file output used to create an IWriter to write to a file.
+ * @param output The IFileOutput to register.
+ */
+ static void registerOutput(std::shared_ptr<IFileOutput> output);
+
+ /**
+ * Creates a file reader for the given filename if a registed IFileInput is able to read it.
+ * @param filename The path to the file.
+ * @return The reader created.
+ * @exception Exception If no file input can read the file an exception is thrown.
+ */
+ static std::shared_ptr<IReader> createReader(std::string filename);
+
+ /**
+ * Creates a file reader for the given buffer if a registed IFileInput is able to read it.
+ * @param buffer The buffer to read the file from.
+ * @return The reader created.
+ * @exception Exception If no file input can read the file an exception is thrown.
+ */
+ static std::shared_ptr<IReader> createReader(std::shared_ptr<Buffer> buffer);
+
+ /**
+ * Creates a file writer that writes a sound to the given file path.
+ * Existing files will be overwritten.
+ * @param filename The file path to write to.
+ * @param specs The output specification.
+ * @param format The container format for the file.
+ * @param codec The codec used inside the container.
+ * @param bitrate The bitrate to write with.
+ * @return A writer that creates the file.
+ * @exception Exception If no file output can write the file with the given specification an exception is thrown.
+ */
+ static std::shared_ptr<IWriter> createWriter(std::string filename, DeviceSpecs specs, Container format, Codec codec, unsigned int bitrate);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/file/FileWriter.h b/extern/audaspace/include/file/FileWriter.h
new file mode 100644
index 00000000000..dac842f2a8f
--- /dev/null
+++ b/extern/audaspace/include/file/FileWriter.h
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file FileWriter.h
+ * @ingroup file
+ * The FileWriter class.
+ */
+
+#include "respec/Specification.h"
+#include "file/IWriter.h"
+
+#include <string>
+#include <vector>
+#include <memory>
+
+AUD_NAMESPACE_BEGIN
+
+class IReader;
+
+/**
+ * The FileWriter class is able to create IWriter classes as well as write readers to them.
+ */
+class AUD_API FileWriter
+{
+private:
+ // hide default constructor, copy constructor and operator=
+ FileWriter() = delete;
+ FileWriter(const FileWriter&) = delete;
+ FileWriter& operator=(const FileWriter&) = delete;
+
+public:
+ /**
+ * Creates a new IWriter.
+ * \param filename The file to write to.
+ * \param specs The file's audio specification.
+ * \param format The file's container format.
+ * \param codec The codec used for encoding the audio data.
+ * \param bitrate The bitrate for encoding.
+ * \return The writer to write data to.
+ */
+ static std::shared_ptr<IWriter> createWriter(std::string filename, DeviceSpecs specs, Container format, Codec codec, unsigned int bitrate);
+
+ /**
+ * Writes a reader to a writer.
+ * \param reader The reader to read from.
+ * \param writer The writer to write to.
+ * \param length How many samples should be transferred.
+ * \param buffersize How many samples should be transferred at once.
+ */
+ static void writeReader(std::shared_ptr<IReader> reader, std::shared_ptr<IWriter> writer, unsigned int length, unsigned int buffersize);
+
+ /**
+ * Writes a reader to several writers.
+ * \param reader The reader to read from.
+ * \param writers The writers to write to.
+ * \param length How many samples should be transferred.
+ * \param buffersize How many samples should be transferred at once.
+ */
+ static void writeReader(std::shared_ptr<IReader> reader, std::vector<std::shared_ptr<IWriter> >& writers, unsigned int length, unsigned int buffersize);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/file/IFileInput.h b/extern/audaspace/include/file/IFileInput.h
new file mode 100644
index 00000000000..bb016a88602
--- /dev/null
+++ b/extern/audaspace/include/file/IFileInput.h
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file IFileInput.h
+ * @ingroup file
+ * The IFileInput interface.
+ */
+
+#include "Audaspace.h"
+
+#include <memory>
+#include <string>
+
+AUD_NAMESPACE_BEGIN
+
+class IReader;
+class Buffer;
+
+/**
+ * @interface IFileInput
+ * The IFileInput interface represents a file input plugin that can create file
+ * input readers from filenames or buffers.
+ */
+class AUD_API IFileInput
+{
+public:
+ /**
+ * Creates a reader for a file to be read.
+ * \param filename Path to the file to be read.
+ * \return The reader that reads the file.
+ * \exception Exception Thrown if the file specified cannot be read.
+ */
+ virtual std::shared_ptr<IReader> createReader(std::string filename)=0;
+
+ /**
+ * Creates a reader for a file to be read from memory.
+ * \param buffer The in-memory file buffer.
+ * \return The reader that reads the file.
+ * \exception Exception Thrown if the file specified cannot be read.
+ */
+ virtual std::shared_ptr<IReader> createReader(std::shared_ptr<Buffer> buffer)=0;
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/file/IFileOutput.h b/extern/audaspace/include/file/IFileOutput.h
new file mode 100644
index 00000000000..5a6efacfe94
--- /dev/null
+++ b/extern/audaspace/include/file/IFileOutput.h
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file IFileOutput.h
+ * @ingroup file
+ * The IFileOutput interface.
+ */
+
+#include "file/IWriter.h"
+#include "respec/Specification.h"
+
+#include <memory>
+#include <string>
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * @interface IFileOutput
+ * The IFileOutput interface represents a file output plugin that can write files.
+ */
+class AUD_API IFileOutput
+{
+public:
+ /**
+ * Creates a new file writer.
+ * \param filename The path to the file to be written.
+ * \param specs The file's audio specification.
+ * \param format The file's container format.
+ * \param codec The codec used for encoding the audio data.
+ * \param bitrate The bitrate for encoding.
+ * \exception Exception Thrown if the file specified cannot be written.
+ */
+ virtual std::shared_ptr<IWriter> createWriter(std::string filename, DeviceSpecs specs, Container format, Codec codec, unsigned int bitrate)=0;
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/file/IWriter.h b/extern/audaspace/include/file/IWriter.h
new file mode 100644
index 00000000000..96decdda391
--- /dev/null
+++ b/extern/audaspace/include/file/IWriter.h
@@ -0,0 +1,89 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file IWriter.h
+ * @ingroup file
+ * Defines the IWriter interface as well as Container and Codec types.
+ */
+
+#include "respec/Specification.h"
+
+AUD_NAMESPACE_BEGIN
+
+/// Container formats for writers.
+enum Container
+{
+ CONTAINER_INVALID = 0,
+ CONTAINER_AC3,
+ CONTAINER_FLAC,
+ CONTAINER_MATROSKA,
+ CONTAINER_MP2,
+ CONTAINER_MP3,
+ CONTAINER_OGG,
+ CONTAINER_WAV
+};
+
+/// Audio codecs for writers.
+enum Codec
+{
+ CODEC_INVALID = 0,
+ CODEC_AAC,
+ CODEC_AC3,
+ CODEC_FLAC,
+ CODEC_MP2,
+ CODEC_MP3,
+ CODEC_PCM,
+ CODEC_VORBIS,
+ CODEC_OPUS
+};
+
+/**
+ * @interface IWriter
+ * This class represents a sound sink where audio data can be written to.
+ */
+class AUD_API IWriter
+{
+public:
+ /**
+ * Destroys the writer.
+ */
+ virtual ~IWriter() {}
+
+ /**
+ * Returns how many samples have been written so far.
+ * \return The writing position as sample count. May be negative if unknown.
+ */
+ virtual int getPosition() const=0;
+
+ /**
+ * Returns the specification of the audio data being written into the sink.
+ * \return The DeviceSpecs structure.
+ * \note Regardless of the format the input still has to be float!
+ */
+ virtual DeviceSpecs getSpecs() const=0;
+
+ /**
+ * Request to write the next length samples out into the sink.
+ * \param length The count of samples to write.
+ * \param buffer The pointer to the buffer containing the data.
+ */
+ virtual void write(unsigned int length, sample_t* buffer)=0;
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/ADSR.h b/extern/audaspace/include/fx/ADSR.h
new file mode 100644
index 00000000000..c453f2477e1
--- /dev/null
+++ b/extern/audaspace/include/fx/ADSR.h
@@ -0,0 +1,121 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file ADSR.h
+ * @ingroup fx
+ * The ADSR class.
+ */
+
+#include "fx/Effect.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * The ADSR effect implements the Attack-Delay-Sustain-Release behaviour of a sound.
+ */
+class AUD_API ADSR : public Effect
+{
+private:
+ /**
+ * Attack time.
+ */
+ float m_attack;
+
+ /**
+ * Decay time.
+ */
+ float m_decay;
+
+ /**
+ * Sustain level.
+ */
+ float m_sustain;
+
+ /**
+ * Release time.
+ */
+ float m_release;
+
+ // delete copy constructor and operator=
+ ADSR(const ADSR&) = delete;
+ ADSR& operator=(const ADSR&) = delete;
+
+public:
+ /**
+ * Creates a new ADSR object.
+ * @param sound The sound to apply this effect to.
+ * @param attack The attack time in seconds.
+ * @param decay The decay time in seconds.
+ * @param sustain The sustain level as linear volume.
+ * @param release The release time in seconds.
+ */
+ ADSR(std::shared_ptr<ISound> sound, float attack, float decay, float sustain, float release);
+
+ /**
+ * Returns the attack time.
+ * @return The attack time in seconds.
+ */
+ float getAttack() const;
+
+ /**
+ * Sets the attack time.
+ * @param attack The attack time in seconds.
+ */
+ void setAttack(float attack);
+
+ /**
+ * Returns the decay time.
+ * @return The decay time in seconds.
+ */
+ float getDecay() const;
+
+ /**
+ * Sets the decay time.
+ * @param decay The decay time in seconds.
+ */
+ void setDecay(float decay);
+
+ /**
+ * Returns the sustain level.
+ * @return The sustain level in linear volume.
+ */
+ float getSustain() const;
+
+ /**
+ * Sets the sustain level.
+ * @param sustain The sustain level in linear volume.
+ */
+ void setSustain(float sustain);
+
+ /**
+ * Returns the release time.
+ * @return The release time in seconds.
+ */
+ float getRelease() const;
+
+ /**
+ * Sets the release time.
+ * @param release The release time in seconds.
+ */
+ void setRelease(float release);
+
+ virtual std::shared_ptr<IReader> createReader();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/ADSRReader.h b/extern/audaspace/include/fx/ADSRReader.h
new file mode 100644
index 00000000000..a9ec076a1c5
--- /dev/null
+++ b/extern/audaspace/include/fx/ADSRReader.h
@@ -0,0 +1,101 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file ADSRReader.h
+ * @ingroup fx
+ * The ADSRReader class.
+ */
+
+#include "fx/EffectReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This class is an ADSR filters.
+ */
+class AUD_API ADSRReader : public EffectReader
+{
+private:
+ enum ADSRState
+ {
+ ADSR_STATE_INVALID = 0, /// Invalid ADSR state or finished.
+ ADSR_STATE_ATTACK = 1, /// Initial attack state.
+ ADSR_STATE_DECAY = 2, /// Decay state.
+ ADSR_STATE_SUSTAIN = 3, /// Sustain state.
+ ADSR_STATE_RELEASE = 4 /// Release state.
+ };
+
+ /**
+ * Attack time.
+ */
+ float m_attack;
+
+ /**
+ * Decay time.
+ */
+ float m_decay;
+
+ /**
+ * Sustain level.
+ */
+ float m_sustain;
+
+ /**
+ * Release time.
+ */
+ float m_release;
+
+ /**
+ * Current state.
+ */
+ ADSRState m_state;
+
+ /**
+ * Current level.
+ */
+ float m_level;
+
+ // delete copy constructor and operator=
+ ADSRReader(const ADSRReader&) = delete;
+ ADSRReader& operator=(const ADSRReader&) = delete;
+
+ void AUD_LOCAL nextState(ADSRState state);
+
+public:
+ /**
+ * Creates a new ADSR reader.
+ * \param reader The reader to read from.
+ * \param attack The attack time in seconds.
+ * \param decay The decay time in seconds.
+ * \param sustain The sustain level, should be in range [0 - 1].
+ * \param release The release time in seconds.
+ */
+ ADSRReader(std::shared_ptr<IReader> reader, float attack, float decay, float sustain, float release);
+
+ virtual ~ADSRReader();
+
+ virtual void read(int& length, bool& eos, sample_t* buffer);
+
+ /**
+ * Triggers the release.
+ */
+ void release();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/Accumulator.h b/extern/audaspace/include/fx/Accumulator.h
new file mode 100644
index 00000000000..d0c635d663c
--- /dev/null
+++ b/extern/audaspace/include/fx/Accumulator.h
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file Accumulator.h
+ * @ingroup fx
+ * The Accumulator class.
+ */
+
+#include "fx/Effect.h"
+
+AUD_NAMESPACE_BEGIN
+
+class CallbackIIRFilterReader;
+
+/**
+ * This sound creates an accumulator reader.
+ *
+ * The accumulator adds the difference at the input to the last output in case
+ * it's positive. In additive mode it additionaly adds the difference always.
+ * So in case the difference is positive, it's added twice.
+ */
+class AUD_API Accumulator : public Effect
+{
+private:
+ /**
+ * Whether the accumulator is additive.
+ */
+ const bool m_additive;
+
+ // delete copy constructor and operator=
+ Accumulator(const Accumulator&) = delete;
+ Accumulator& operator=(const Accumulator&) = delete;
+
+public:
+ /**
+ * Creates a new accumulator sound.
+ * \param sound The input sound.
+ * \param additive Whether the accumulator is additive.
+ */
+ Accumulator(std::shared_ptr<ISound> sound, bool additive = false);
+
+ virtual std::shared_ptr<IReader> createReader();
+
+ /**
+ * The accumulatorFilterAdditive function implements the doFilterIIR callback
+ * for the additive accumulator filter.
+ * @param reader The CallbackIIRFilterReader that executes the callback.
+ * @param useless A user defined pointer that is not needed for this filter.
+ * @return The filtered sample.
+ */
+ static sample_t AUD_LOCAL accumulatorFilterAdditive(CallbackIIRFilterReader* reader, void* useless);
+
+ /**
+ * The accumulatorFilter function implements the doFilterIIR callback
+ * for the non-additive accumulator filter.
+ * @param reader The CallbackIIRFilterReader that executes the callback.
+ * @param useless A user defined pointer that is not needed for this filter.
+ * @return The filtered sample.
+ */
+ static sample_t AUD_LOCAL accumulatorFilter(CallbackIIRFilterReader* reader, void* useless);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/BaseIIRFilterReader.h b/extern/audaspace/include/fx/BaseIIRFilterReader.h
new file mode 100644
index 00000000000..193b98578de
--- /dev/null
+++ b/extern/audaspace/include/fx/BaseIIRFilterReader.h
@@ -0,0 +1,133 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file BaseIIRFilterReader.h
+ * @ingroup fx
+ * The BaseIIRFilterReader class.
+ */
+
+#include "fx/EffectReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This class is a base class for infinite impulse response filters.
+ */
+class AUD_API BaseIIRFilterReader : public EffectReader
+{
+private:
+ /**
+ * Specs.
+ */
+ Specs m_specs;
+
+ /**
+ * Length of input samples needed.
+ */
+ int m_xlen;
+
+ /**
+ * Length of output samples needed.
+ */
+ int m_ylen;
+
+ /**
+ * The last in samples array.
+ */
+ sample_t* m_x;
+
+ /**
+ * The last out samples array.
+ */
+ sample_t* m_y;
+
+ /**
+ * Position of the current input sample in the input array.
+ */
+ int m_xpos;
+
+ /**
+ * Position of the current output sample in the output array.
+ */
+ int m_ypos;
+
+ /**
+ * Current channel.
+ */
+ int m_channel;
+
+ // delete copy constructor and operator=
+ BaseIIRFilterReader(const BaseIIRFilterReader&) = delete;
+ BaseIIRFilterReader& operator=(const BaseIIRFilterReader&) = delete;
+
+protected:
+ /**
+ * Creates a new base IIR filter reader.
+ * \param reader The reader to read from.
+ * \param in The count of past input samples needed.
+ * \param out The count of past output samples needed.
+ */
+ BaseIIRFilterReader(std::shared_ptr<IReader> reader, int in, int out);
+
+ /**
+ * Sets the length for the required input and output samples of the IIR filter.
+ * @param in The amount of past input samples needed, including the current one.
+ * @param out The amount of past output samples needed.
+ */
+ void setLengths(int in, int out);
+
+public:
+ /**
+ * Retrieves the last input samples.
+ * \param pos The position, valid are 0 (current) or negative values.
+ * \return The sample value.
+ */
+ inline sample_t x(int pos)
+ {
+ return m_x[(m_xpos + pos + m_xlen) % m_xlen * m_specs.channels + m_channel];
+ }
+
+ /**
+ * Retrieves the last output samples.
+ * \param pos The position, valid are negative values.
+ * \return The sample value.
+ */
+ inline sample_t y(int pos)
+ {
+ return m_y[(m_ypos + pos + m_ylen) % m_ylen * m_specs.channels + m_channel];
+ }
+
+ virtual ~BaseIIRFilterReader();
+
+ virtual void read(int& length, bool& eos, sample_t* buffer);
+
+ /**
+ * Runs the filtering function.
+ * \return The current output sample value.
+ */
+ virtual sample_t filter()=0;
+
+ /**
+ * Notifies the filter about a sample rate change.
+ * \param rate The new sample rate.
+ */
+ virtual void sampleRateChanged(SampleRate rate);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/BinauralReader.h b/extern/audaspace/include/fx/BinauralReader.h
new file mode 100644
index 00000000000..f5667a093f6
--- /dev/null
+++ b/extern/audaspace/include/fx/BinauralReader.h
@@ -0,0 +1,223 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#pragma once
+
+/**
+* @file BinauralReader.h
+* @ingroup fx
+* The BinauralReader class.
+*/
+
+#include "IReader.h"
+#include "ISound.h"
+#include "Convolver.h"
+#include "HRTF.h"
+#include "Source.h"
+#include "util/FFTPlan.h"
+#include "util/ThreadPool.h"
+
+#include <memory>
+#include <vector>
+#include <future>
+
+AUD_NAMESPACE_BEGIN
+
+/**
+* This class represents a reader for a sound that can sound different depending on its realtive position with the listener.
+*/
+class AUD_API BinauralReader : public IReader
+{
+private:
+ /**
+ * The current position.
+ */
+ int m_position;
+
+ /**
+ * The reader of the input sound.
+ */
+ std::shared_ptr<IReader> m_reader;
+
+ /**
+ * The HRTF set.
+ */
+ std::shared_ptr<HRTF> m_hrtfs;
+
+ /**
+ * A Source object that will be used to change the source position of the sound.
+ */
+ std::shared_ptr<Source> m_source;
+
+ /**
+ * The intended azimuth.
+ */
+ float m_Azimuth;
+
+ /**
+ * The intended elevation.
+ */
+ float m_Elevation;
+
+ /**
+ * The real azimuth being used.
+ */
+ float m_RealAzimuth;
+
+ /**
+ * The real elevation being used.
+ */
+ float m_RealElevation;
+
+ /**
+ * The FFT size, given by the FFTPlan.
+ */
+ int m_N;
+
+ /**
+ * The length of the impulse response fragments, m_N/2 will be used.
+ */
+ int m_M;
+
+ /**
+ * The max length of the input slices, m_N/2 will be used.
+ */
+ int m_L;
+
+ /**
+ * The array of convolvers that will be used, one per channel.
+ */
+ std::vector<std::unique_ptr<Convolver>> m_convolvers;
+
+ /**
+ * True if a transition is happening.
+ */
+ bool m_transition;
+
+ /**
+ * The position of the current transition (decreasing)
+ */
+ int m_transPos;
+
+ /**
+ * The output buffer in which the convolved data will be written and from which the reader will read.
+ */
+ sample_t* m_outBuffer;
+
+ /**
+ * The input buffer that will hold the data to be convolved.
+ */
+ sample_t* m_inBuffer;
+
+ /**
+ * Current position in which the m_outBuffer is being read.
+ */
+ int m_outBufferPos;
+
+ /**
+ * Length of rhe m_outBuffer.
+ */
+ int m_outBufLen;
+
+ /**
+ * Effective length of rhe m_outBuffer.
+ */
+ int m_eOutBufLen;
+
+ /**
+ * Flag indicating whether the end of the sound has been reached or not.
+ */
+ bool m_eosReader;
+
+ /**
+ * Flag indicating whether the end of the extra data generated in the convolution has been reached or not.
+ */
+ bool m_eosTail;
+
+ /**
+ * A vector of buffers (one per channel) on which the audio signal will be separated per channel so it can be convolved.
+ */
+ std::vector<sample_t*> m_vecOut;
+
+ /**
+ * A shared ptr to a thread pool.
+ */
+ std::shared_ptr<ThreadPool> m_threadPool;
+
+ /**
+ * Length of the input data to be used by the channel threads.
+ */
+ int m_lastLengthIn;
+
+ /**
+ * A vector of futures to sync tasks.
+ */
+ std::vector<std::future<int>> m_futures;
+
+ // delete copy constructor and operator=
+ BinauralReader(const BinauralReader&) = delete;
+ BinauralReader& operator=(const BinauralReader&) = delete;
+
+public:
+ /**
+ * Creates a new convolver reader.
+ * \param reader A reader of the input sound to be assigned to this reader. It must have one channel.
+ * \param hrtfs A shared pointer to an HRTF object that will be used to get a particular impulse response depending on the source.
+ * \param source A shared pointer to a Source object that will be used to change the source position of the sound.
+ * \param threadPool A shared pointer to a ThreadPool object with 1 or more threads.
+ * \param plan A shared pointer to and FFT plan that will be used for convolution.
+ * \exception Exception thrown if the specs of the HRTFs and the sound don't match or if the provided HRTF object is empty.
+ */
+ BinauralReader(std::shared_ptr<IReader> reader, std::shared_ptr<HRTF> hrtfs, std::shared_ptr<Source> source, std::shared_ptr<ThreadPool> threadPool, std::shared_ptr<FFTPlan> plan);
+ virtual ~BinauralReader();
+
+ virtual bool isSeekable() const;
+ virtual void seek(int position);
+ virtual int getLength() const;
+ virtual int getPosition() const;
+ virtual Specs getSpecs() const;
+ virtual void read(int& length, bool& eos, sample_t* buffer);
+
+private:
+ /**
+ * Joins several buffers (one per channel) into the m_outBuffer.
+ * \param start The starting position from which the m_outBuffer will be written.
+ * \param len The amout of samples that will be joined.
+ * \param nConvolvers The number of convolvers that have been used. Only use 2 or 4 as possible values.
+ If the value is 4 the result will be interpolated.
+ */
+ void joinByChannel(int start, int len, int nConvolvers);
+
+ /**
+ * Loads the m_outBuffer with data.
+ * \param nConvolvers The number of convolver objects that will be used. Only 2 or 4 should be used.
+ */
+ void loadBuffer(int nConvolvers);
+
+ /**
+ * The function that the threads will run. It will process a subset of channels.
+ * \param id An id number that will determine which subset of channels will be processed.
+ * \param input A flag that will indicate if thare is input data.
+ * -If true there is new input data.
+ * -If false there isn't new input data.
+ * \return The number of samples obtained.
+ */
+ int threadFunction(int id, bool input);
+
+ bool checkSource();
+};
+
+AUD_NAMESPACE_END \ No newline at end of file
diff --git a/extern/audaspace/include/fx/BinauralSound.h b/extern/audaspace/include/fx/BinauralSound.h
new file mode 100644
index 00000000000..733e111dc2b
--- /dev/null
+++ b/extern/audaspace/include/fx/BinauralSound.h
@@ -0,0 +1,119 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#pragma once
+
+/**
+* @file BinauralSound.h
+* @ingroup fx
+* The BinauralSound class.
+*/
+
+#include "ISound.h"
+#include "HRTF.h"
+#include "Source.h"
+#include "util/ThreadPool.h"
+#include "util/FFTPlan.h"
+
+#include <memory>
+#include <vector>
+
+AUD_NAMESPACE_BEGIN
+
+/**
+* This class represents a sound that can sound different depending on its realtive position with the listener.
+*/
+class AUD_API BinauralSound : public ISound
+{
+private:
+ /**
+ * A pointer to the imput sound.
+ */
+ std::shared_ptr<ISound> m_sound;
+
+ /**
+ * A pointer to an HRTF object with a collection of impulse responses.
+ */
+ std::shared_ptr<HRTF> m_hrtfs;
+
+ /**
+ * A pointer to a Source object which represents the source of the sound.
+ */
+ std::shared_ptr<Source> m_source;
+
+ /**
+ * A shared ptr to a thread pool.
+ */
+ std::shared_ptr<ThreadPool> m_threadPool;
+
+ /**
+ * A shared ponter to an FFT plan.
+ */
+ std::shared_ptr<FFTPlan> m_plan;
+
+ // delete copy constructor and operator=
+ BinauralSound(const BinauralSound&) = delete;
+ BinauralSound& operator=(const BinauralSound&) = delete;
+
+public:
+ /**
+ * Creates a new ConvolverSound.
+ * \param sound The sound that will be convolved. It must have only one channel.
+ * \param hrtfs The HRTF set that will be used.
+ * \param source A shared pointer to a Source object that contains the source of the sound.
+ * \param threadPool A shared pointer to a ThreadPool object with 1 or more threads.
+ * \param plan A shared pointer to a FFTPlan object that will be used for convolution.
+ * \warning The same FFTPlan object must be used to construct both this and the HRTF object provided.
+ */
+ BinauralSound(std::shared_ptr<ISound> sound, std::shared_ptr<HRTF> hrtfs, std::shared_ptr<Source> source, std::shared_ptr<ThreadPool> threadPool, std::shared_ptr<FFTPlan> plan);
+
+ /**
+ * Creates a new BinauralSound. A default FFT plan will be created.
+ * \param sound The sound that will be convolved. Must have only one channel.
+ * \param hrtfs The HRTF set that will be used.
+ * \param source A shared pointer to a Source object that contains the source of the sound.
+ * \param threadPool A shared pointer to a ThreadPool object with 1 or more threads.
+ * \warning To use this constructor no FFTPlan object must have been provided to the hrtfs.
+ */
+ BinauralSound(std::shared_ptr<ISound> sound, std::shared_ptr<HRTF> hrtfs, std::shared_ptr<Source> source, std::shared_ptr<ThreadPool> threadPool);
+
+ virtual std::shared_ptr<IReader> createReader();
+
+ /**
+ * Retrieves the HRTF set being used.
+ * \return A shared pointer to the current HRTF object being used.
+ */
+ std::shared_ptr<HRTF> getHRTFs();
+
+ /**
+ * Changes the set of HRTFs used for convolution, it'll only affect newly created readers.
+ * \param hrtfs A shared pointer to the new HRTF object.
+ */
+ void setHRTFs(std::shared_ptr<HRTF> hrtfs);
+
+ /**
+ * Retrieves the Source object being used.
+ * \return A shared pointer to the current Source object being used.
+ */
+ std::shared_ptr<Source> getSource();
+
+ /**
+ * Changes the Source object used to change the source position of the sound.
+ * \param source A shared pointer to the new Source object.
+ */
+ void setSource(std::shared_ptr<Source> source);
+};
+AUD_NAMESPACE_END \ No newline at end of file
diff --git a/extern/audaspace/include/fx/Butterworth.h b/extern/audaspace/include/fx/Butterworth.h
new file mode 100644
index 00000000000..db2ad743863
--- /dev/null
+++ b/extern/audaspace/include/fx/Butterworth.h
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file Butterworth.h
+ * @ingroup fx
+ * The Butterworth class.
+ */
+
+#include "fx/DynamicIIRFilter.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This sound creates a butterworth lowpass filter reader.
+ */
+class AUD_API Butterworth : public DynamicIIRFilter
+{
+private:
+ // delete copy constructor and operator=
+ Butterworth(const Butterworth&) = delete;
+ Butterworth& operator=(const Butterworth&) = delete;
+
+public:
+ /**
+ * Creates a new butterworth sound.
+ * \param sound The input sound.
+ * \param frequency The cutoff frequency.
+ */
+ Butterworth(std::shared_ptr<ISound> sound, float frequency);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/ButterworthCalculator.h b/extern/audaspace/include/fx/ButterworthCalculator.h
new file mode 100644
index 00000000000..f4d4894c8b8
--- /dev/null
+++ b/extern/audaspace/include/fx/ButterworthCalculator.h
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file ButterworthCalculator.h
+ * @ingroup fx
+ * The ButterworthCalculator class.
+ */
+
+#include "fx/IDynamicIIRFilterCalculator.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * The ButterworthCalculator class calculates fourth order Butterworth low pass
+ * filter coefficients for a dynamic DynamicIIRFilter.
+ */
+class AUD_LOCAL ButterworthCalculator : public IDynamicIIRFilterCalculator
+{
+private:
+ /**
+ * The attack value in seconds.
+ */
+ const float m_frequency;
+
+ // delete copy constructor and operator=
+ ButterworthCalculator(const ButterworthCalculator&) = delete;
+ ButterworthCalculator& operator=(const ButterworthCalculator&) = delete;
+
+public:
+ /**
+ * Creates a ButterworthCalculator object.
+ * @param frequency The cutoff frequency.
+ */
+ ButterworthCalculator(float frequency);
+
+ virtual void recalculateCoefficients(SampleRate rate, std::vector<float> &b, std::vector<float> &a);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/CallbackIIRFilterReader.h b/extern/audaspace/include/fx/CallbackIIRFilterReader.h
new file mode 100644
index 00000000000..f1dfab70d7f
--- /dev/null
+++ b/extern/audaspace/include/fx/CallbackIIRFilterReader.h
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file CallbackIIRFilterReader.h
+ * @ingroup fx
+ * The CallbackIIRFilterReader class.
+ */
+
+#include "fx/BaseIIRFilterReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+class CallbackIIRFilterReader;
+
+/**
+ * The doFilterIIR callback is executed when a new sample of a callback filter
+ * should be calculated. For sample access the CallbackIIRFilterReader is
+ * provided. Furthermore a user defined pointer is also handed to the callback.
+ */
+typedef sample_t (*doFilterIIR)(CallbackIIRFilterReader*, void*);
+
+/**
+ * The endFilterIIR callback is called when the callback filter is not needed
+ * anymore. The goal of this function should be to clean up the data behind the
+ * user supplied pointer which is handed to the callback.
+ */
+typedef void (*endFilterIIR)(void*);
+
+/**
+ * This class provides an interface for infinite impulse response filters via a
+ * callback filter function.
+ */
+class AUD_API CallbackIIRFilterReader : public BaseIIRFilterReader
+{
+private:
+ /**
+ * Filter function.
+ */
+ const doFilterIIR m_filter;
+
+ /**
+ * End filter function.
+ */
+ const endFilterIIR m_endFilter;
+
+ /**
+ * Data pointer.
+ */
+ void* m_data;
+
+ // delete copy constructor and operator=
+ CallbackIIRFilterReader(const CallbackIIRFilterReader&) = delete;
+ CallbackIIRFilterReader& operator=(const CallbackIIRFilterReader&) = delete;
+
+public:
+ /**
+ * Creates a new callback IIR filter reader.
+ * \param reader The reader to read from.
+ * \param in The count of past input samples needed.
+ * \param out The count of past output samples needed.
+ * \param doFilter The filter callback.
+ * \param endFilter The finishing callback.
+ * \param data Data pointer for the callbacks.
+ */
+ CallbackIIRFilterReader(std::shared_ptr<IReader> reader, int in, int out, doFilterIIR doFilter, endFilterIIR endFilter = 0, void* data = nullptr);
+
+ virtual ~CallbackIIRFilterReader();
+
+ virtual sample_t filter();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/Convolver.h b/extern/audaspace/include/fx/Convolver.h
new file mode 100644
index 00000000000..5ce134839f6
--- /dev/null
+++ b/extern/audaspace/include/fx/Convolver.h
@@ -0,0 +1,177 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#pragma once
+
+/**
+* @file Convolver.h
+* @ingroup fx
+* The Convolver class.
+*/
+
+#include "FFTConvolver.h"
+#include "util/ThreadPool.h"
+#include "util/FFTPlan.h"
+
+#include <memory>
+#include <vector>
+#include <mutex>
+#include <future>
+#include <atomic>
+#include <deque>
+
+AUD_NAMESPACE_BEGIN
+/**
+* This class allows to convolve a sound with a very large impulse response.
+*/
+class AUD_API Convolver
+{
+private:
+ /**
+ * The FFT size, must be at least M+L-1.
+ */
+ int m_N;
+
+ /**
+ * The length of the impulse response parts.
+ */
+ int m_M;
+
+ /**
+ * The max length of the input slices.
+ */
+ int m_L;
+
+ /**
+ * The impulse response divided in parts.
+ */
+ std::shared_ptr<std::vector<std::shared_ptr<std::vector<std::complex<sample_t>>>>> m_irBuffers;
+
+ /**
+ * Accumulation buffers for the threads.
+ */
+ std::vector<fftwf_complex*> m_threadAccBuffers;
+
+ /**
+ * A vector of FFTConvolvers used to calculate the partial convolutions.
+ */
+ std::vector<std::unique_ptr<FFTConvolver>> m_fftConvolvers;
+
+ /**
+ * The actual number of threads being used.
+ */
+ int m_numThreads;
+
+ /**
+ * A pool of threads that will be used for convolution.
+ */
+ std::shared_ptr<ThreadPool> m_threadPool;
+
+ /**
+ * A vector of futures used for thread sync
+ */
+ std::vector<std::future<bool>> m_futures;
+
+ /**
+ * A mutex for the sum of thread accumulators.
+ */
+ std::mutex m_sumMutex;
+
+ /**
+ * A flag to control thread execution when a reset is scheduled.
+ */
+ std::atomic_bool m_resetFlag;
+
+ /**
+ * Global accumulation buffer.
+ */
+ fftwf_complex* m_accBuffer;
+
+ /**
+ * Delay line.
+ */
+ std::deque<fftwf_complex*> m_delayLine;
+
+ /**
+ * The complete length of the impulse response.
+ */
+ int m_irLength;
+
+ /**
+ * Counter for the tail;
+ */
+ int m_tailCounter;
+
+ /**
+ * Flag end of sound;
+ */
+ bool m_eos;
+
+ // delete copy constructor and operator=
+ Convolver(const Convolver&) = delete;
+ Convolver& operator=(const Convolver&) = delete;
+
+public:
+
+ /**
+ * Creates a new FFTConvolver.
+ * \param ir A shared pointer to a vector with the data of the various impulse response parts in the frequency domain (see ImpulseResponse class for an easy way to obtain it).
+ * \param irLength The length of the full impulse response.
+ * \param threadPool A shared pointer to a ThreadPool object with 1 or more threads.
+ * \param plan A shared pointer to a FFT plan that will be used for convolution.
+ */
+ Convolver(std::shared_ptr<std::vector<std::shared_ptr<std::vector<std::complex<sample_t>>>>> ir, int irLength, std::shared_ptr<ThreadPool> threadPool, std::shared_ptr<FFTPlan> plan);
+
+ virtual ~Convolver();
+
+ /**
+ * Convolves the data that is provided with the inpulse response.
+ * Given a plan of size N, the amount of samples convolved by one call to this method will be N/2.
+ * \param[in] inBuffer A buffer with the input data to be convolved, nullptr if the source sound has ended (the convolved sound is larger than the source sound).
+ * \param[in] outBuffer A buffer in which the convolved data will be written. Its size must be at least N/2.
+ * \param[in,out] length The number of samples you wish to obtain. If an inBuffer is provided this argument must match its length.
+ * When this method returns, the value of length represents the number of samples written into the outBuffer.
+ * \param[out] eos True if the end of the sound is reached, false otherwise.
+ */
+ void getNext(sample_t* inBuffer, sample_t* outBuffer, int& length, bool& eos);
+
+ /**
+ * Resets all the internally stored data so the convolution of a new sound can be started.
+ */
+ void reset();
+
+ /**
+ * Retrieves the current impulse response being used.
+ * \return The current impulse response.
+ */
+ std::shared_ptr<std::vector<std::shared_ptr<std::vector<std::complex<sample_t>>>>> getImpulseResponse();
+
+ /**
+ * Changes the impulse response and resets the convolver.
+ * \param ir A shared pointer to a vector with the data of the various impulse response parts in the frequency domain (see ImpulseResponse class for an easy way to obtain it).
+ */
+ void setImpulseResponse(std::shared_ptr<std::vector<std::shared_ptr<std::vector<std::complex<sample_t>>>>> ir);
+
+private:
+
+ /**
+ * This function will be enqueued into the thread pool, and will process the input signal with a subset of the impulse response parts.
+ * \param id The id of the thread, starting with 0.
+ */
+ bool threadFunction(int id);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/ConvolverReader.h b/extern/audaspace/include/fx/ConvolverReader.h
new file mode 100644
index 00000000000..2ce917daec5
--- /dev/null
+++ b/extern/audaspace/include/fx/ConvolverReader.h
@@ -0,0 +1,198 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#pragma once
+
+/**
+* @file ConvolverReader.h
+* @ingroup fx
+* The ConvolverReader class.
+*/
+
+#include "IReader.h"
+#include "ISound.h"
+#include "Convolver.h"
+#include "ImpulseResponse.h"
+#include "util/FFTPlan.h"
+#include "util/ThreadPool.h"
+
+#include <memory>
+#include <vector>
+#include <future>
+
+AUD_NAMESPACE_BEGIN
+
+/**
+* This class represents a reader for a sound that can be modified depending on a given impulse response.
+*/
+class AUD_API ConvolverReader : public IReader
+{
+private:
+ /**
+ * The current position.
+ */
+ int m_position;
+
+ /**
+ * The reader of the input sound.
+ */
+ std::shared_ptr<IReader> m_reader;
+
+ /**
+ * The impulse response in the frequency domain.
+ */
+ std::shared_ptr<ImpulseResponse> m_ir;
+
+ /**
+ * The FFT size, given by the FFTPlan.
+ */
+ int m_N;
+
+ /**
+ * The length of the impulse response fragments, m_N/2 will be used.
+ */
+ int m_M;
+
+ /**
+ * The max length of the input slices, m_N/2 will be used.
+ */
+ int m_L;
+
+ /**
+ * The array of convolvers that will be used, one per channel.
+ */
+ std::vector<std::unique_ptr<Convolver>> m_convolvers;
+
+ /**
+ * The output buffer in which the convolved data will be written and from which the reader will read.
+ */
+ sample_t* m_outBuffer;
+
+ /**
+ * A vector of buffers (one per channel) on which the audio signal will be separated per channel so it can be convolved.
+ */
+ std::vector<sample_t*> m_vecInOut;
+
+ /**
+ * Current position in which the m_outBuffer is being read.
+ */
+ int m_outBufferPos;
+
+ /**
+ * Effective length of the m_outBuffer.
+ */
+ int m_eOutBufLen;
+
+ /**
+ * Real length of the m_outBuffer.
+ */
+ int m_outBufLen;
+
+ /**
+ * Flag indicating whether the end of the sound has been reached or not.
+ */
+ bool m_eosReader;
+
+ /**
+ * Flag indicating whether the end of the extra data generated in the convolution has been reached or not.
+ */
+ bool m_eosTail;
+
+ /**
+ * The number of channels of the sound to be convolved.
+ */
+ int m_inChannels;
+
+ /**
+ * The number of channels of the impulse response.
+ */
+ int m_irChannels;
+
+ /**
+ * The number of threads used for channels.
+ */
+ int m_nChannelThreads;
+
+ /**
+ * Length of the input data to be used by the channel threads.
+ */
+ int m_lastLengthIn;
+
+ /**
+ * A shared ptr to a thread pool.
+ */
+ std::shared_ptr<ThreadPool> m_threadPool;
+
+ /**
+ * A vector of futures to sync tasks.
+ */
+ std::vector<std::future<int>> m_futures;
+
+ // delete copy constructor and operator=
+ ConvolverReader(const ConvolverReader&) = delete;
+ ConvolverReader& operator=(const ConvolverReader&) = delete;
+
+public:
+ /**
+ * Creates a new convolver reader.
+ * \param reader A reader of the input sound to be assigned to this reader.
+ * \param ir A shared pointer to an impulseResponse object that will be used to convolve the sound.
+ * \param threadPool A shared pointer to a ThreadPool object with 1 or more threads.
+ * \param plan A shared pointer to and FFT plan that will be used for convolution.
+ * \exception Exception thrown if impulse response doesn't match the specs (number fo channels and rate) of the input reader.
+ */
+ ConvolverReader(std::shared_ptr<IReader> reader, std::shared_ptr<ImpulseResponse> ir, std::shared_ptr<ThreadPool> threadPool, std::shared_ptr<FFTPlan> plan);
+ virtual ~ConvolverReader();
+
+ virtual bool isSeekable() const;
+ virtual void seek(int position);
+ virtual int getLength() const;
+ virtual int getPosition() const;
+ virtual Specs getSpecs() const;
+ virtual void read(int& length, bool& eos, sample_t* buffer);
+
+private:
+ /**
+ * Divides a sound buffer in several buffers, one per channel.
+ * \param buffer The buffer that will be divided.
+ * \param len The length of the buffer.
+ */
+ void divideByChannel(const sample_t* buffer, int len);
+
+ /**
+ * Joins several buffers (one per channel) into the m_outBuffer.
+ * \param start The starting position from which the m_outBuffer will be written.
+ * \param len The amout of samples that will be joined.
+ */
+ void joinByChannel(int start, int len);
+
+ /**
+ * Loads the m_outBuffer with data.
+ */
+ void loadBuffer();
+
+ /**
+ * The function that the threads will run. It will process a subset of channels.
+ * \param id An id number that will determine which subset of channels will be processed.
+ * \param input A flag that will indicate if thare is input data.
+ * -If true there is new input data.
+ * -If false there isn't new input data.
+ * \return The number of samples obtained.
+ */
+ int threadFunction(int id, bool input);
+};
+
+AUD_NAMESPACE_END \ No newline at end of file
diff --git a/extern/audaspace/include/fx/ConvolverSound.h b/extern/audaspace/include/fx/ConvolverSound.h
new file mode 100644
index 00000000000..957e3b8af1c
--- /dev/null
+++ b/extern/audaspace/include/fx/ConvolverSound.h
@@ -0,0 +1,100 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#pragma once
+
+/**
+* @file ConvolverSound.h
+* @ingroup fx
+* The ConvolverSound class.
+*/
+
+#include "ISound.h"
+#include "ImpulseResponse.h"
+#include "util/ThreadPool.h"
+#include "util/FFTPlan.h"
+
+#include <memory>
+#include <vector>
+
+AUD_NAMESPACE_BEGIN
+
+/**
+* This class represents a sound that can be modified depending on a given impulse response.
+*/
+class AUD_API ConvolverSound : public ISound
+{
+private:
+ /**
+ * A pointer to the imput sound.
+ */
+ std::shared_ptr<ISound> m_sound;
+
+ /**
+ * A pointer to the impulse response.
+ */
+ std::shared_ptr<ImpulseResponse> m_impulseResponse;
+
+ /**
+ * A shared ptr to a thread pool.
+ */
+ std::shared_ptr<ThreadPool> m_threadPool;
+
+ /**
+ * A shared ponter to an FFT plan.
+ */
+ std::shared_ptr<FFTPlan> m_plan;
+
+ // delete copy constructor and operator=
+ ConvolverSound(const ConvolverSound&) = delete;
+ ConvolverSound& operator=(const ConvolverSound&) = delete;
+
+public:
+ /**
+ * Creates a new ConvolverSound.
+ * \param sound The sound that will be convolved.
+ * \param impulseResponse The impulse response sound.
+ * \param threadPool A shared pointer to a ThreadPool object with 1 or more threads.
+ * \param plan A shared pointer to a FFTPlan object that will be used for convolution.
+ * \warning The same FFTPlan object must be used to construct both this and the ImpulseResponse object provided.
+ */
+ ConvolverSound(std::shared_ptr<ISound> sound, std::shared_ptr<ImpulseResponse> impulseResponse, std::shared_ptr<ThreadPool> threadPool, std::shared_ptr<FFTPlan> plan);
+
+ /**
+ * Creates a new ConvolverSound. A default FFT plan will be created.
+ * \param sound The sound that will be convolved.
+ * \param impulseResponse The impulse response sound.
+ * \param threadPool A shared pointer to a ThreadPool object with 1 or more threads.
+ * \warning To use this constructor no FFTPlan object must have been provided to the inpulseResponse.
+ */
+ ConvolverSound(std::shared_ptr<ISound> sound, std::shared_ptr<ImpulseResponse> impulseResponse, std::shared_ptr<ThreadPool> threadPool);
+
+ virtual std::shared_ptr<IReader> createReader();
+
+ /**
+ * Retrieves the impulse response sound being used.
+ * \return A shared pointer to the current impulse response being used.
+ */
+ std::shared_ptr<ImpulseResponse> getImpulseResponse();
+
+ /**
+ * Changes the inpulse response used for convolution, it'll only affect newly created readers.
+ * \param impulseResponse A shared pointer to the new impulse response sound.
+ */
+ void setImpulseResponse(std::shared_ptr<ImpulseResponse> impulseResponse);
+};
+
+AUD_NAMESPACE_END \ No newline at end of file
diff --git a/extern/audaspace/include/fx/Delay.h b/extern/audaspace/include/fx/Delay.h
new file mode 100644
index 00000000000..d6ab93ca351
--- /dev/null
+++ b/extern/audaspace/include/fx/Delay.h
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file Delay.h
+ * @ingroup fx
+ * The Delay class.
+ */
+
+#include "fx/Effect.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This sound plays another sound delayed.
+ */
+class AUD_API Delay : public Effect
+{
+private:
+ /**
+ * The delay in samples.
+ */
+ const float m_delay;
+
+ // delete copy constructor and operator=
+ Delay(const Delay&) = delete;
+ Delay& operator=(const Delay&) = delete;
+
+public:
+ /**
+ * Creates a new delay sound.
+ * \param sound The input sound.
+ * \param delay The desired delay in seconds.
+ */
+ Delay(std::shared_ptr<ISound> sound, float delay = 0);
+
+ /**
+ * Returns the delay in seconds.
+ */
+ float getDelay() const;
+
+ virtual std::shared_ptr<IReader> createReader();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/DelayReader.h b/extern/audaspace/include/fx/DelayReader.h
new file mode 100644
index 00000000000..fe37e56d83e
--- /dev/null
+++ b/extern/audaspace/include/fx/DelayReader.h
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file DelayReader.h
+ * @ingroup fx
+ * The DelayReader class.
+ */
+
+#include "fx/EffectReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This class reads another reader and delays it.
+ */
+class AUD_API DelayReader : public EffectReader
+{
+private:
+ /**
+ * The delay level.
+ */
+ const int m_delay;
+
+ /**
+ * The remaining delay for playback.
+ */
+ int m_remdelay;
+
+ // delete copy constructor and operator=
+ DelayReader(const DelayReader&) = delete;
+ DelayReader& operator=(const DelayReader&) = delete;
+
+public:
+ /**
+ * Creates a new delay reader.
+ * \param reader The reader to read from.
+ * \param delay The delay in seconds.
+ */
+ DelayReader(std::shared_ptr<IReader> reader, float delay);
+
+ virtual void seek(int position);
+ virtual int getLength() const;
+ virtual int getPosition() const;
+ virtual void read(int& length, bool& eos, sample_t* buffer);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/DynamicIIRFilter.h b/extern/audaspace/include/fx/DynamicIIRFilter.h
new file mode 100644
index 00000000000..5528e7c7b9b
--- /dev/null
+++ b/extern/audaspace/include/fx/DynamicIIRFilter.h
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file DynamicIIRFilter.h
+ * @ingroup fx
+ * The DynamicIIRFilter class.
+ */
+
+#include "fx/Effect.h"
+
+AUD_NAMESPACE_BEGIN
+
+class IDynamicIIRFilterCalculator;
+
+/**
+ * This sound creates a IIR filter reader.
+ *
+ * This means that on sample rate change the filter recalculates its
+ * coefficients.
+ */
+class AUD_API DynamicIIRFilter : public Effect
+{
+protected:
+ /// The IDynamicIIRFilterCalculator that calculates the dynamic filter coefficients.
+ std::shared_ptr<IDynamicIIRFilterCalculator> m_calculator;
+
+public:
+ /**
+ * Creates a new Dynmic IIR filter sound.
+ * \param sound The input sound.
+ * \param calculator The calculator which recalculates the dynamic filter coefficients.
+ */
+ DynamicIIRFilter(std::shared_ptr<ISound> sound, std::shared_ptr<IDynamicIIRFilterCalculator> calculator);
+
+ virtual std::shared_ptr<IReader> createReader();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/DynamicIIRFilterReader.h b/extern/audaspace/include/fx/DynamicIIRFilterReader.h
new file mode 100644
index 00000000000..9e2267243ce
--- /dev/null
+++ b/extern/audaspace/include/fx/DynamicIIRFilterReader.h
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file DynamicIIRFilterReader.h
+ * @ingroup fx
+ * The DynamicIIRFilterReader class.
+ */
+
+#include "fx/IIRFilterReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+class IDynamicIIRFilterCalculator;
+
+/**
+ * This class is for dynamic infinite impulse response filters with simple
+ * coefficients that change depending on the sample rate.
+ */
+class AUD_API DynamicIIRFilterReader : public IIRFilterReader
+{
+private:
+ /**
+ * The sound for dynamically recalculating filter coefficients.
+ */
+ std::shared_ptr<IDynamicIIRFilterCalculator> m_calculator;
+
+public:
+ /**
+ * Creates a new DynamicIIRFilterReader.
+ * @param reader The reader the filter is applied on.
+ * @param calculator The IDynamicIIRFilterCalculator that recalculates the filter coefficients.
+ */
+ DynamicIIRFilterReader(std::shared_ptr<IReader> reader,
+ std::shared_ptr<IDynamicIIRFilterCalculator> calculator);
+
+ /**
+ * The function sampleRateChanged is called whenever the sample rate of the
+ * underlying reader changes and thus updates the filter coefficients.
+ * @param rate The new sample rate.
+ */
+ virtual void sampleRateChanged(SampleRate rate);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/DynamicMusic.h b/extern/audaspace/include/fx/DynamicMusic.h
new file mode 100644
index 00000000000..5d59f77401a
--- /dev/null
+++ b/extern/audaspace/include/fx/DynamicMusic.h
@@ -0,0 +1,235 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#pragma once
+
+/**
+* @file DynamicMusic.h
+* @ingroup fx
+* The DynamicMusic class.
+*/
+
+#include "devices/IHandle.h"
+#include "devices/IDevice.h"
+#include "ISound.h"
+
+#include <memory>
+#include <vector>
+#include <thread>
+#include <atomic>
+#include <condition_variable>
+#include <mutex>
+
+AUD_NAMESPACE_BEGIN
+
+/**
+* This class allows to play music depending on a current "scene", scene changes are managed by the class.
+* The default scene is silent and has id 0.
+*/
+class AUD_API DynamicMusic
+{
+private:
+ /**
+ * Matrix of pointers which will store the sounds of the scenes and the transitions between them.
+ */
+ std::vector<std::vector<std::shared_ptr<ISound>>> m_scenes;
+
+ /**
+ * Id of the current scene.
+ */
+ std::atomic_int m_id;
+
+ /**
+ * Length of the crossfade transition in seconds, used when no custom transition has been set.
+ */
+ float m_fadeTime;
+
+ /**
+ * Handle to the playback of the current scene.
+ */
+ std::shared_ptr<IHandle> m_currentHandle;
+
+ /**
+ * Handle used during transitions.
+ */
+ std::shared_ptr<IHandle> m_transitionHandle;
+
+ /**
+ * Device used for playback.
+ */
+ std::shared_ptr<IDevice> m_device;
+
+ /**
+ * Flag that is true when a transition is happening.
+ */
+ std::atomic_bool m_transitioning;
+
+ /**
+ * Flag that is true when the music is paused.
+ */
+ std::atomic_bool m_stopThread;
+
+ /**
+ * Id of the sound that will play with the next transition.
+ */
+ std::atomic_int m_soundTarget;
+
+ /**
+ * Volume of the scenes.
+ */
+ float m_volume;
+
+ /**
+ * A thread that manages the crossfade transition.
+ */
+ std::thread m_fadeThread;
+
+ // delete copy constructor and operator=
+ DynamicMusic(const DynamicMusic&) = delete;
+ DynamicMusic& operator=(const DynamicMusic&) = delete;
+
+public:
+ /**
+ * Creates a new dynamic music manager with the default silent scene (id: 0).
+ * \param device The device that will be used to play sounds.
+ */
+ DynamicMusic(std::shared_ptr<IDevice> device);
+
+ virtual ~DynamicMusic();
+
+ /**
+ * Adds a new scene to the manager.
+ * \param sound The sound that will play when the scene is selected with the changeScene().
+ * \return The identifier of the new scene.
+ */
+ int addScene(std::shared_ptr<ISound> sound);
+
+ /**
+ * Changes to another scene.
+ * \param id The id of the scene which should start playing the changeScene method.
+ * \return
+ * - true if the change has been scheduled succesfully.
+ * - false if there already is a transition in course or the scene selected doesnt exist.
+ */
+ bool changeScene(int id);
+
+ /**
+ * Retrieves the scene currently selected.
+ * \return The identifier of the current scene.
+ */
+ int getScene();
+
+ /**
+ * Adds a new transition between scenes
+ * \param init The id of the initial scene that will allow the transition to play.
+ * \param end The id if the target scene for the transition.
+ * \param sound The sound that will play when the scene changes from init to end.
+ * \return false if the init or end scenes don't exist.
+ */
+ bool addTransition(int init, int end, std::shared_ptr<ISound> sound);
+
+ /**
+ * Sets the length of the crossfade transition (default 1 second).
+ * \param seconds The time in seconds.
+ */
+ void setFadeTime(float seconds);
+
+ /**
+ * Gets the length of the crossfade transition (default 1 second).
+ * \return The length of the cressfade transition in seconds.
+ */
+ float getFadeTime();
+
+ /**
+ * Resumes a paused sound.
+ * \return
+ * - true if the sound has been resumed.
+ * - false if the sound isn't paused or the handle is invalid.
+ */
+ bool resume();
+
+ /**
+ * Pauses the current played back sound.
+ * \return
+ * - true if the sound has been paused.
+ * - false if the sound isn't playing back or the handle is invalid.
+ */
+ bool pause();
+
+ /**
+ * Seeks in the current played back sound.
+ * \param position The new position from where to play back, in seconds.
+ * \return
+ * - true if the handle is valid.
+ * - false if the handle is invalid.
+ * \warning Whether the seek works or not depends on the sound source.
+ */
+ bool seek(float position);
+
+ /**
+ * Retrieves the current playback position of a sound.
+ * \return The playback position in seconds, or 0.0 if the handle is
+ * invalid.
+ */
+ float getPosition();
+
+ /**
+ * Retrieves the volume of the scenes.
+ * \return The volume.
+ */
+ float getVolume();
+
+ /**
+ * Sets the volume for the scenes.
+ * \param volume The volume.
+ * \return
+ * - true if the handle is valid.
+ * - false if the handle is invalid.
+ */
+ bool setVolume(float volume);
+
+ /**
+ * Returns the status of the current played back sound.
+ * \return
+ * - STATUS_INVALID if the sound has stopped or the handle is
+ *. invalid
+ * - STATUS_PLAYING if the sound is currently played back.
+ * - STATUS_PAUSED if the sound is currently paused.
+ * - STATUS_STOPPED if the sound finished playing and is still
+ * kept in the device.
+ * \see Status
+ */
+ Status getStatus();
+
+ /**
+ * Stops any played back or paused sound and sets the dynamic music player to default silent state (scene 0)
+ * \return
+ * - true if the sound has been stopped.
+ * - false if the handle is invalid.
+ */
+ bool stop();
+
+ private:
+ //Callbacks used to schedule transitions after a sound ends.
+ static void transitionCallback(void* player);
+ static void sceneCallback(void* player);
+ //These functions can fade sounds in and out if used with a thread.
+ void crossfadeThread();
+ void fadeInThread();
+ void fadeOutThread();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/Effect.h b/extern/audaspace/include/fx/Effect.h
new file mode 100644
index 00000000000..471e37b5ecf
--- /dev/null
+++ b/extern/audaspace/include/fx/Effect.h
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file Effect.h
+ * @ingroup fx
+ * The Effect class.
+ */
+
+#include "ISound.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This sound is a base class for all effect factories that take one other
+ * sound as input.
+ */
+class AUD_API Effect : public ISound
+{
+private:
+ // delete copy constructor and operator=
+ Effect(const Effect&) = delete;
+ Effect& operator=(const Effect&) = delete;
+
+protected:
+ /**
+ * If there is no reader it is created out of this sound.
+ */
+ std::shared_ptr<ISound> m_sound;
+
+ /**
+ * Returns the reader created out of the sound.
+ * This method can be used for the createReader function of the implementing
+ * classes.
+ * \return The reader created out of the sound.
+ */
+ inline std::shared_ptr<IReader> getReader() const
+ {
+ return m_sound->createReader();
+ }
+
+public:
+ /**
+ * Creates a new sound.
+ * \param sound The input sound.
+ */
+ Effect(std::shared_ptr<ISound> sound);
+
+ /**
+ * Destroys the sound.
+ */
+ virtual ~Effect();
+
+ /**
+ * Returns the saved sound.
+ * \return The sound or nullptr if there has no sound been saved.
+ */
+ std::shared_ptr<ISound> getSound() const;
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/EffectReader.h b/extern/audaspace/include/fx/EffectReader.h
new file mode 100644
index 00000000000..85eff6a8ab9
--- /dev/null
+++ b/extern/audaspace/include/fx/EffectReader.h
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file EffectReader.h
+ * @ingroup fx
+ * The EffectReader class.
+ */
+
+#include "IReader.h"
+
+#include <memory>
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This reader is a base class for all effect readers that take one other reader
+ * as input.
+ */
+class AUD_API EffectReader : public IReader
+{
+private:
+ // delete copy constructor and operator=
+ EffectReader(const EffectReader&) = delete;
+ EffectReader& operator=(const EffectReader&) = delete;
+
+protected:
+ /**
+ * The reader to read from.
+ */
+ std::shared_ptr<IReader> m_reader;
+
+public:
+ /**
+ * Creates a new effect reader.
+ * \param reader The reader to read from.
+ */
+ EffectReader(std::shared_ptr<IReader> reader);
+
+ /**
+ * Destroys the reader.
+ */
+ virtual ~EffectReader();
+
+ virtual bool isSeekable() const;
+ virtual void seek(int position);
+ virtual int getLength() const;
+ virtual int getPosition() const;
+ virtual Specs getSpecs() const;
+ virtual void read(int& length, bool& eos, sample_t* buffer);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/Envelope.h b/extern/audaspace/include/fx/Envelope.h
new file mode 100644
index 00000000000..3d44e897b3a
--- /dev/null
+++ b/extern/audaspace/include/fx/Envelope.h
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file Envelope.h
+ * @ingroup fx
+ * The Envelope class.
+ */
+
+#include "fx/Effect.h"
+
+AUD_NAMESPACE_BEGIN
+
+class CallbackIIRFilterReader;
+struct EnvelopeParameters;
+
+/**
+ * This sound creates an envelope follower reader.
+ */
+class AUD_API Envelope : public Effect
+{
+private:
+ /**
+ * The attack value in seconds.
+ */
+ const float m_attack;
+
+ /**
+ * The release value in seconds.
+ */
+ const float m_release;
+
+ /**
+ * The threshold value.
+ */
+ const float m_threshold;
+
+ /**
+ * The attack/release threshold value.
+ */
+ const float m_arthreshold;
+
+ // delete copy constructor and operator=
+ Envelope(const Envelope&) = delete;
+ Envelope& operator=(const Envelope&) = delete;
+
+public:
+ /**
+ * Creates a new envelope sound.
+ * \param sound The input sound.
+ * \param attack The attack value in seconds.
+ * \param release The release value in seconds.
+ * \param threshold The threshold value.
+ * \param arthreshold The attack/release threshold value.
+ */
+ Envelope(std::shared_ptr<ISound> sound, float attack, float release,
+ float threshold, float arthreshold);
+
+ virtual std::shared_ptr<IReader> createReader();
+
+ /**
+ * The envelopeFilter function implements the doFilterIIR callback
+ * for the callback IIR filter.
+ * @param reader The CallbackIIRFilterReader that executes the callback.
+ * @param param The envelope parameters.
+ * @return The filtered sample.
+ */
+ static sample_t AUD_LOCAL envelopeFilter(CallbackIIRFilterReader* reader, EnvelopeParameters* param);
+
+ /**
+ * The endEnvelopeFilter function implements the endFilterIIR callback
+ * for the callback IIR filter.
+ * @param param The envelope parameters.
+ */
+ static void AUD_LOCAL endEnvelopeFilter(EnvelopeParameters* param);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/FFTConvolver.h b/extern/audaspace/include/fx/FFTConvolver.h
new file mode 100644
index 00000000000..62ce1cbf5ad
--- /dev/null
+++ b/extern/audaspace/include/fx/FFTConvolver.h
@@ -0,0 +1,196 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#pragma once
+
+/**
+* @file FFTConvolver.h
+* @ingroup fx
+* The FFTConvolver class.
+*/
+
+#include "IReader.h"
+#include "ISound.h"
+#include "util/FFTPlan.h"
+
+#include <memory>
+#include <vector>
+
+AUD_NAMESPACE_BEGIN
+/**
+* This class allows to easily convolve a sound using the Fourier transform.
+*/
+class AUD_API FFTConvolver
+{
+private:
+ /**
+ * A shared pointer to an FFT plan.
+ */
+ std::shared_ptr<FFTPlan> m_plan;
+
+ /**
+ * The FFT size, must be at least M+L-1.
+ */
+ int m_N;
+
+ /**
+ * The length of the impulse response.
+ */
+ int m_M;
+
+ /**
+ * The max length of the input slices.
+ */
+ int m_L;
+
+ /**
+ * The real length of the internal buffer in fftwf_complex elements.
+ */
+ int m_realBufLen;
+
+ /**
+ * The internal buffer for the FFTS.
+ */
+ std::complex<sample_t>* m_inBuffer;
+
+ /**
+ * A shift buffer for the FDL method
+ */
+ sample_t* m_shiftBuffer;
+
+ /**
+ * A buffer to store the extra data obtained after each partial convolution.
+ */
+ float* m_tail;
+
+ /**
+ * The provided impulse response.
+ */
+ std::shared_ptr<std::vector<std::complex<sample_t>>> m_irBuffer;
+
+ /**
+ * If the tail is being read, this marks the current position.
+ */
+ int m_tailPos;
+
+ // delete copy constructor and operator=
+ FFTConvolver(const FFTConvolver&) = delete;
+ FFTConvolver& operator=(const FFTConvolver&) = delete;
+
+public:
+ /**
+ * Creates a new FFTConvolver.
+ * \param ir A shared pointer to a vector with the impulse response data in the frequency domain (see ImpulseResponse class for an easy way to obtain it).
+ * \param plan A shared pointer to and FFT plan.
+ */
+ FFTConvolver(std::shared_ptr<std::vector<std::complex<sample_t>>> ir, std::shared_ptr<FFTPlan> plan);
+ virtual ~FFTConvolver();
+
+ /**
+ * Convolves the data that is provided with the inpulse response.
+ * \param[in] inBuffer A buffer with the input data to be convolved.
+ * \param[in] outBuffer A pointer to the buffer in which the convolution result will be written.
+ * \param[in,out] length The number of samples to be convolved (the length of both the inBuffer and the outBuffer).
+ * The convolution output should be larger than the input, but since this class uses the overlap
+ * add method, the extra length will be saved internally.
+ * It must be equal or lower than N/2 (N=size of the FFTPlan) or the call will fail, setting this variable to 0 since no data would be
+ * written in the outBuffer.
+ */
+ void getNext(const sample_t* inBuffer, sample_t* outBuffer, int& length);
+
+ /**
+ * Convolves the data that is provided with the inpulse response.
+ * \param[in] inBuffer A buffer with the input data to be convolved.
+ * \param[in] outBuffer A pointer to the buffer in which the convolution result will be written.
+ * \param[in,out] length The number of samples to be convolved (the length of both the inBuffer and the outBuffer).
+ * The convolution output should be larger than the input, but since this class uses the overlap
+ * add method, the extra length will be saved internally.
+ * It must be equal or lower than N/2 (N=size of the FFTPlan) or the call will fail, setting this variable to 0 since no data would be
+ * written in the outBuffer.
+ * \param[in] transformedData A pointer to a buffer in which the Fourier transform of the input will be written.
+ */
+ void getNext(const sample_t* inBuffer, sample_t* outBuffer, int& length, fftwf_complex* transformedData);
+
+ /**
+ * Convolves the data that is provided with the inpulse response.
+ * \param[in] inBuffer A buffer with the input data to be convolved. Its length must be N/2 + 1
+ * \param[in] outBuffer A pointer to the buffer in which the convolution result will be written.
+ * \param[in,out] length The number of samples to be convolved and the length of the outBuffer.
+ * The convolution output should be larger than the input, but since this class uses the overlap
+ * add method, the extra length will be saved internally.
+ * It must be equal or lower than N/2 (N=size of the FFTPlan) or the call will fail and set the value of length to 0 since no data would be
+ * written in the outBuffer.
+ */
+ void getNext(const fftwf_complex* inBuffer, sample_t* outBuffer, int& length);
+
+ /**
+ * Gets the internally stored extra data which is result of the convolution.
+ * \param[in,out] length The count of samples that should be read. Shall
+ * contain the real count of samples after reading, in case
+ * there were only fewer samples available.
+ * A smaller value also indicates the end of the data.
+ * \param[out] eos End of stream, whether the end is reached or not.
+ * \param[in] buffer The pointer to the buffer to read into.
+ */
+ void getTail(int& length, bool& eos, sample_t* buffer);
+
+ /**
+ * Resets the internally stored data so a new convolution can be started.
+ */
+ void clear();
+
+ /**
+ * Calculates the Inverse Fast Fourier Transform of the input array.
+ * \param[in] inBuffer A buffer with the input data to be transformed. Its length must be N/2 + 1
+ * \param[in] outBuffer A pointer to the buffer in which the transform result will be written.
+ * \param[in,out] length The number of samples to be transformed and the length of the outBuffer.
+ * It must be equal or lower than N, but tipically N/2 should be used (N=size of the FFTPlan) or the call will fail and the value
+ * of length will be setted to 0, since no data would be written in the outBuffer.
+ */
+ void IFFT_FDL(const fftwf_complex* inBuffer, sample_t* outBuffer, int& length);
+
+ /**
+ * Multiplicates a frequency domain input by the impulse response and accumulates the result to a buffer.
+ * \param[in] inBuffer A buffer of complex numbers, samples in the frequency domain, that will be multiplied by the impulse response. Its length must be N/2 + 1
+ * \param[in] accBuffer A pointer to the buffer into which the result of the multiplication will be summed. Its length must be N/2 + 1
+ */
+ void getNextFDL(const std::complex<sample_t>* inBuffer, std::complex<sample_t>* accBuffer);
+
+ /**
+ * Transforms an input array of real data to the frequency domain and multiplies it by the impulse response. The result is accumulated to a buffer.
+ * \param[in] inBuffer A buffer of real numbers, samples in the time domain, that will be multiplied by the impulse response.
+ * \param[in] accBuffer A pointer to the buffer into which the result of the multiplication will be summed. Its length must be N/2 + 1.
+ * \param[in,out] length The number of samples to be transformed and the length of the inBuffer.
+ * It must be equal or lower than N/2 (N=size of the FFTPlan) or the call will fail and the value
+ * of length will be setted to 0, since no data would be written in the outBuffer.
+ * \param[in] transformedData A pointer to a buffer in which the Fourier transform of the input will be written.
+ */
+ void getNextFDL(const sample_t* inBuffer, std::complex<sample_t>* accBuffer, int& length, fftwf_complex* transformedData);
+
+ /**
+ * Changes the impulse response and resets the FFTConvolver.
+ * \param ir A shared pointer to a vector with the data of the impulse response in the frequency domain.
+ */
+ void setImpulseResponse(std::shared_ptr<std::vector<std::complex<sample_t>>> ir);
+
+ /**
+ * Retrieves the current impulse response being used.
+ * \return The current impulse response.
+ */
+ std::shared_ptr<std::vector<std::complex<sample_t>>> getImpulseResponse();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/Fader.h b/extern/audaspace/include/fx/Fader.h
new file mode 100644
index 00000000000..63280aec292
--- /dev/null
+++ b/extern/audaspace/include/fx/Fader.h
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file Fader.h
+ * @ingroup fx
+ * The Fader class.
+ */
+
+#include "fx/Effect.h"
+#include "fx/FaderReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This sound fades another sound.
+ * If the fading type is FADE_IN, everything before the fading start will be
+ * silenced, for FADE_OUT that's true for everything after fading ends.
+ */
+class AUD_API Fader : public Effect
+{
+private:
+ /**
+ * The fading type.
+ */
+ const FadeType m_type;
+
+ /**
+ * The fading start.
+ */
+ const float m_start;
+
+ /**
+ * The fading length.
+ */
+ const float m_length;
+
+ // delete copy constructor and operator=
+ Fader(const Fader&) = delete;
+ Fader& operator=(const Fader&) = delete;
+
+public:
+ /**
+ * Creates a new fader sound.
+ * \param sound The input sound.
+ * \param type The fading type.
+ * \param start The time where fading should start in seconds.
+ * \param length How long fading should last in seconds.
+ */
+ Fader(std::shared_ptr<ISound> sound,
+ FadeType type = FADE_IN,
+ float start = 0.0f, float length = 1.0f);
+
+ /**
+ * Returns the fading type.
+ */
+ FadeType getType() const;
+
+ /**
+ * Returns the fading start.
+ */
+ float getStart() const;
+
+ /**
+ * Returns the fading length.
+ */
+ float getLength() const;
+
+ virtual std::shared_ptr<IReader> createReader();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/FaderReader.h b/extern/audaspace/include/fx/FaderReader.h
new file mode 100644
index 00000000000..99ea3d28938
--- /dev/null
+++ b/extern/audaspace/include/fx/FaderReader.h
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file FaderReader.h
+ * @ingroup fx
+ * Defines the FaderReader class as well as the two fading types.
+ */
+
+#include "fx/EffectReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+/// Fading types.
+enum FadeType
+{
+ FADE_IN,
+ FADE_OUT
+};
+
+/**
+ * This class fades another reader.
+ * If the fading type is FADE_IN, everything before the fading start will be
+ * silenced, for FADE_OUT that's true for everything after fading ends.
+ */
+class AUD_API FaderReader : public EffectReader
+{
+private:
+ /**
+ * The fading type.
+ */
+ const FadeType m_type;
+
+ /**
+ * The fading start.
+ */
+ const float m_start;
+
+ /**
+ * The fading length.
+ */
+ const float m_length;
+
+ // delete copy constructor and operator=
+ FaderReader(const FaderReader&) = delete;
+ FaderReader& operator=(const FaderReader&) = delete;
+
+public:
+ /**
+ * Creates a new fader reader.
+ * \param reader The reader that this effect is applied on.
+ * \param type The fading type.
+ * \param start The time where fading should start in seconds.
+ * \param length How long fading should last in seconds.
+ */
+ FaderReader(std::shared_ptr<IReader> reader, FadeType type,
+ float start,float length);
+
+ virtual void read(int& length, bool& eos, sample_t* buffer);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/HRTF.h b/extern/audaspace/include/fx/HRTF.h
new file mode 100644
index 00000000000..750d5f18991
--- /dev/null
+++ b/extern/audaspace/include/fx/HRTF.h
@@ -0,0 +1,108 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#pragma once
+
+/**
+* @file HRTF.h
+* @ingroup fx
+* The HRTF class.
+*/
+
+#include "util/StreamBuffer.h"
+#include "util/FFTPlan.h"
+#include "ImpulseResponse.h"
+
+#include <memory>
+#include <vector>
+#include <unordered_map>
+#include <utility>
+
+AUD_NAMESPACE_BEGIN
+
+/**
+* This class represents a complete set of HRTFs.
+*/
+class AUD_API HRTF
+{
+private:
+ /**
+ * An unordered map of unordered maps containing the ImpulseResponse objects of the HRTFs.
+ */
+ std::unordered_map<float, std::unordered_map<float, std::shared_ptr<ImpulseResponse>>> m_hrtfs;
+
+ /**
+ * The FFTPlan used to create the ImpulseResponses.
+ */
+ std::shared_ptr<FFTPlan> m_plan;
+
+ /**
+ * The specifications of the HRTFs.
+ */
+ Specs m_specs;
+
+ /**
+ * True if the HRTF object is empty.
+ */
+ bool m_empty;
+
+ // delete copy constructor and operator=
+ HRTF(const HRTF&) = delete;
+ HRTF& operator=(const HRTF&) = delete;
+
+public:
+ /**
+ * Creates a new empty HRTF object that will instance it own FFTPlan with default size.
+ */
+ HRTF();
+
+ /**
+ * Creates a new empty HRTF object.
+ * \param plan A shared pointer to a FFT plan used to transform the impulse responses added.
+ */
+ HRTF(std::shared_ptr<FFTPlan> plan);
+
+ /**
+ * Adds a new HRTF to the class.
+ * \param impulseResponse A shared pointer to an StreamBuffer with the HRTF.
+ * \param azimuth The azimuth angle of the HRTF. Interval [0,360).
+ * \param elevation The elevation angle of the HRTF.
+ * \return True if the impulse response was added successfully, false otherwise (the specs weren't correct).
+ */
+ bool addImpulseResponse(std::shared_ptr<StreamBuffer> impulseResponse, float azimuth, float elevation);
+
+ /**
+ * Retrieves a pair of HRTFs for a certain azimuth and elevation. If no exact match is found, the closest ones will be chosen (the elevation has priority over the azimuth).
+ * \param[in,out] azimuth The desired azimuth angle. If no exact match is found, the value of azimuth will represent the actual azimuth elevation of the chosen HRTF. Interval [0,360)
+ * \param[in,out] elevation The desired elevation angle. If no exact match is found, the value of elevation will represent the actual elevation angle of the chosen HRTF.
+ * \return A pair of shared pointers to ImpulseResponse objects containing the HRTFs for the left (first element) and right (second element) ears.
+ */
+ std::pair<std::shared_ptr<ImpulseResponse>, std::shared_ptr<ImpulseResponse>> getImpulseResponse(float &azimuth, float &elevation);
+
+ /**
+ * Retrieves the specs shared by all the HRTFs.
+ * \return The shared specs of all the HRTFs.
+ */
+ Specs getSpecs();
+
+ /**
+ * Retrieves the state of the HRTF object.
+ * \return True if it is empty, false otherwise.
+ */
+ bool isEmpty();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/HRTFLoader.h b/extern/audaspace/include/fx/HRTFLoader.h
new file mode 100644
index 00000000000..893184ae909
--- /dev/null
+++ b/extern/audaspace/include/fx/HRTFLoader.h
@@ -0,0 +1,99 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#pragma once
+
+/**
+* @file HRTFLoader.h
+* @ingroup fx
+* The HRTFLoader class.
+*/
+
+#include "Audaspace.h"
+#include "fx/HRTF.h"
+#include "util/FFTPlan.h"
+
+#include <string>
+#include <memory>
+
+AUD_NAMESPACE_BEGIN
+
+/**
+* This loader provides a method to load all the HRTFs in one directory, provided they follow the following naming scheme:
+* Example: L-10e210a.wav
+* The first character refers to the ear from which the HRTF was recorded: 'L' for a left ear and 'R' for a right ear.
+* Next is the elevation angle followed by the 'e' character. [-90, 90]
+* Then is the azimuth angle followed by the 'a' character. [0, 360)
+* For a sound source situated at the left of the listener the azimuth angle regarding the left ear is 90 while the angle regarding the right ear is 270.
+* KEMAR HRTFs use this naming scheme.
+*/
+class AUD_API HRTFLoader
+{
+private:
+ // delete normal constructor, copy constructor and operator=
+ HRTFLoader(const HRTFLoader&) = delete;
+ HRTFLoader& operator=(const HRTFLoader&) = delete;
+ HRTFLoader() = delete;
+
+public:
+ /**
+ * Loads all the left ear HRTFs in the directory.Onle one ear HRTFs for all azimuths [0,360) are needed for binaural sound.
+ * \param plan The plan that will be used to create the HRTF object.
+ * \param fileExtension The extension of the HRTF files.
+ * \param path The path to the folder containing the HRTFs.
+ * \return A shared pointer to a loaded HRTF object.
+ */
+ static std::shared_ptr<HRTF> loadLeftHRTFs(std::shared_ptr<FFTPlan> plan, const std::string& fileExtension, const std::string& path = "");
+
+ /**
+ * Loads all the right ear HRTFs in the directory. Onle one ear HRTFs for all azimuths [0,360) are needed for binaural sound.
+ * \param plan The plan that will be used to create the HRTF object.
+ * \param fileExtension The extension of the HRTF files.
+ * \param path The path to the folder containing the HRTFs.
+ * \return A shared pointer to a loaded HRTF object.
+ */
+ static std::shared_ptr<HRTF> loadRightHRTFs(std::shared_ptr<FFTPlan> plan, const std::string& fileExtension, const std::string& path = "");
+
+ /**
+ * Loads all the left ear HRTFs in the directory.Onle one ear HRTFs for all azimuths [0,360) are needed for binaural sound.
+ * \param fileExtension The extension of the HRTF files.
+ * \param path The path to the folder containing the HRTFs.
+ * \return A shared pointer to a loaded HRTF object.
+ */
+ static std::shared_ptr<HRTF> loadLeftHRTFs(const std::string& fileExtension, const std::string& path = "");
+
+ /**
+ * Loads all the right ear HRTFs in the directory. Onle one ear HRTFs for all azimuths [0,360) are needed for binaural sound.
+ * \param fileExtension The extension of the HRTF files.
+ * \param path The path to the folder containing the HRTFs.
+ * \return A shared pointer to a loaded HRTF object.
+ */
+ static std::shared_ptr<HRTF> loadRightHRTFs(const std::string& fileExtension, const std::string& path = "");
+
+
+private:
+
+ /**
+ * Loads all the HRTFs in the directory and subdirectories.
+ * \param hrtfs An HRTF object in which to load the HRTFs.
+ * \param ear 'L' to load left ear HRTFs, 'R' to load right ear HRTFs.
+ * \param fileExtension The extension of the HRTF files.
+ * \param path The path to the folder containing the HRTFs.
+ */
+ static void loadHRTFs(std::shared_ptr<HRTF>hrtfs, char ear, const std::string& fileExtension, const std::string& path = "");
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/Highpass.h b/extern/audaspace/include/fx/Highpass.h
new file mode 100644
index 00000000000..6bfb6d7885d
--- /dev/null
+++ b/extern/audaspace/include/fx/Highpass.h
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file Highpass.h
+ * @ingroup fx
+ * The Highpass class.
+ */
+
+#include "fx/DynamicIIRFilter.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This sound creates a highpass filter reader.
+ */
+class AUD_API Highpass : public DynamicIIRFilter
+{
+private:
+ // delete copy constructor and operator=
+ Highpass(const Highpass&) = delete;
+ Highpass& operator=(const Highpass&) = delete;
+
+public:
+ /**
+ * Creates a new highpass sound.
+ * \param sound The input sound.
+ * \param frequency The cutoff frequency.
+ * \param Q The Q factor.
+ */
+ Highpass(std::shared_ptr<ISound> sound, float frequency, float Q = 1.0f);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/HighpassCalculator.h b/extern/audaspace/include/fx/HighpassCalculator.h
new file mode 100644
index 00000000000..9306a3d20e5
--- /dev/null
+++ b/extern/audaspace/include/fx/HighpassCalculator.h
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file HighpassCalculator.h
+ * @ingroup fx
+ * The HighpassCalculator class.
+ */
+
+#include "fx/IDynamicIIRFilterCalculator.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * The HighpassCalculator class calculates high pass filter coefficients for a
+ * dynamic DynamicIIRFilter.
+ */
+class AUD_LOCAL HighpassCalculator : public IDynamicIIRFilterCalculator
+{
+private:
+ /**
+ * The cutoff frequency.
+ */
+ const float m_frequency;
+
+ /**
+ * The Q factor.
+ */
+ const float m_Q;
+
+ // delete copy constructor and operator=
+ HighpassCalculator(const HighpassCalculator&) = delete;
+ HighpassCalculator& operator=(const HighpassCalculator&) = delete;
+
+public:
+ /**
+ * Creates a HighpassCalculator object.
+ * @param frequency The cutoff frequency.
+ * @param Q The Q factor of the filter. If unsure, use 1.0 as default.
+ */
+ HighpassCalculator(float frequency, float Q);
+
+ virtual void recalculateCoefficients(SampleRate rate, std::vector<float> &b, std::vector<float> &a);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/IDynamicIIRFilterCalculator.h b/extern/audaspace/include/fx/IDynamicIIRFilterCalculator.h
new file mode 100644
index 00000000000..6c890b313b4
--- /dev/null
+++ b/extern/audaspace/include/fx/IDynamicIIRFilterCalculator.h
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file IDynamicIIRFilterCalculator.h
+ * @ingroup fx
+ * The IDynamicIIRFilterCalculator interface.
+ */
+
+#include "respec/Specification.h"
+
+#include <vector>
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * @interface IDynamicIIRFilterCalculator
+ * This interface calculates dynamic filter coefficients which depend on the
+ * sampling rate for DynamicIIRFilterReaders.
+ */
+class AUD_API IDynamicIIRFilterCalculator
+{
+public:
+ virtual ~IDynamicIIRFilterCalculator() {}
+
+ /**
+ * Recalculates the filter coefficients.
+ * \param rate The sample rate of the audio data.
+ * \param[out] b The input filter coefficients.
+ * \param[out] a The output filter coefficients.
+ */
+ virtual void recalculateCoefficients(SampleRate rate, std::vector<float>& b, std::vector<float>& a)=0;
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/IIRFilter.h b/extern/audaspace/include/fx/IIRFilter.h
new file mode 100644
index 00000000000..74099a30dc5
--- /dev/null
+++ b/extern/audaspace/include/fx/IIRFilter.h
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file IIRFilter.h
+ * @ingroup fx
+ * The IIRFilter class.
+ */
+
+#include "fx/Effect.h"
+
+#include <vector>
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This sound creates a IIR filter reader.
+ */
+class AUD_API IIRFilter : public Effect
+{
+private:
+ /**
+ * Output filter coefficients.
+ */
+ std::vector<float> m_a;
+
+ /**
+ * Input filter coefficients.
+ */
+ std::vector<float> m_b;
+
+ // delete copy constructor and operator=
+ IIRFilter(const IIRFilter&) = delete;
+ IIRFilter& operator=(const IIRFilter&) = delete;
+
+public:
+ /**
+ * Creates a new IIR filter sound.
+ * \param sound The input sound.
+ * \param b The input filter coefficients.
+ * \param a The output filter coefficients.
+ */
+ IIRFilter(std::shared_ptr<ISound> sound, const std::vector<float>& b, const std::vector<float>& a);
+
+ virtual std::shared_ptr<IReader> createReader();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/IIRFilterReader.h b/extern/audaspace/include/fx/IIRFilterReader.h
new file mode 100644
index 00000000000..34518ce69c6
--- /dev/null
+++ b/extern/audaspace/include/fx/IIRFilterReader.h
@@ -0,0 +1,70 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file IIRFilterReader.h
+ * @ingroup fx
+ * The IIRFilterReader class.
+ */
+
+#include "fx/BaseIIRFilterReader.h"
+
+#include <vector>
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This class is for infinite impulse response filters with simple coefficients.
+ */
+class AUD_API IIRFilterReader : public BaseIIRFilterReader
+{
+private:
+ /**
+ * Output filter coefficients.
+ */
+ std::vector<float> m_a;
+
+ /**
+ * Input filter coefficients.
+ */
+ std::vector<float> m_b;
+
+ // delete copy constructor and operator=
+ IIRFilterReader(const IIRFilterReader&) = delete;
+ IIRFilterReader& operator=(const IIRFilterReader&) = delete;
+
+public:
+ /**
+ * Creates a new IIR filter reader.
+ * \param reader The reader to read from.
+ * \param b The input filter coefficients.
+ * \param a The output filter coefficients.
+ */
+ IIRFilterReader(std::shared_ptr<IReader> reader, const std::vector<float>& b, const std::vector<float>& a);
+
+ virtual sample_t filter();
+
+ /**
+ * Sets new filter coefficients.
+ * @param b The input filter coefficients.
+ * @param a The output filter coefficients.
+ */
+ void setCoefficients(const std::vector<float>& b, const std::vector<float>& a);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/ImpulseResponse.h b/extern/audaspace/include/fx/ImpulseResponse.h
new file mode 100644
index 00000000000..3cdb807ff99
--- /dev/null
+++ b/extern/audaspace/include/fx/ImpulseResponse.h
@@ -0,0 +1,108 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#pragma once
+
+/**
+* @file ImpulseResponse.h
+* @ingroup fx
+* The ImpulseResponse class.
+*/
+
+#include "util/StreamBuffer.h"
+#include "util/FFTPlan.h"
+#include "IReader.h"
+
+#include <memory>
+#include <vector>
+
+AUD_NAMESPACE_BEGIN
+
+/**
+* This class represents an impulse response that can be used in convolution.
+* When this class is instanced, the impulse response is divided in channels and those channels are divided in parts of N/2 samples (N being the size of the FFT plan used).
+* The main objetive of this class is to allow the reutilization of an impulse response in various sounds without having to process it more than one time.
+* \warning The size of the FFTPlan used to process the impulse response must be the same as the one used in the convolver classes.
+*/
+class AUD_API ImpulseResponse
+{
+private:
+ /**
+ * A tri-dimensional array (channels, parts, values) The impulse response is divided in channels and those channels are divided
+ * in parts of N/2 samples. Those parts are transformed to the frequency domain transform which generates uni-dimensional
+ * arrays of fftwtf_complex data (complex numbers).
+ */
+ std::vector<std::shared_ptr<std::vector<std::shared_ptr<std::vector<std::complex<sample_t>>>>>> m_processedIR;
+
+ /**
+ * The specification of the samples.
+ */
+ Specs m_specs;
+
+ /**
+ * The length of the impulse response.
+ */
+ int m_length;
+
+ // delete copy constructor and operator=
+ ImpulseResponse(const ImpulseResponse&) = delete;
+ ImpulseResponse& operator=(const ImpulseResponse&) = delete;
+
+public:
+ /**
+ * Creates a new ImpulseResponse object.
+ * The impulse response will be split and transformed to the frequency domain.
+ * \param impulseResponse The impulse response sound.
+ * \param plan A shared pointer to a FFT plan used to transform the impulse response.
+ */
+ ImpulseResponse(std::shared_ptr<StreamBuffer> impulseResponse, std::shared_ptr<FFTPlan> plan);
+
+ /**
+ * Creates a new ImpulseResponse object. This overload instances its own FFTPlan with default size.
+ * The impulse response will be split and transformed to the frequency domain.
+ * \param impulseResponse The impulse response sound.
+ */
+ ImpulseResponse(std::shared_ptr<StreamBuffer> impulseResponse);
+
+ /**
+ * Returns the specification of the impulse response.
+ * \return The specification of the impulse response.
+ */
+ Specs getSpecs();
+
+ /**
+ * Retrieves the length of the impulse response.
+ * \return The length of the impulse response.
+ */
+ int getLength();
+
+ /**
+ * Retrieves one channel of the impulse response.
+ * \param n The desired channel number (from 0 to channels-1).
+ * \return The desired channel of the impulse response.
+ */
+ std::shared_ptr<std::vector<std::shared_ptr<std::vector<std::complex<sample_t>>>>> getChannel(int n);
+
+private:
+ /**
+ * Processes the impulse response sound for its use in the convovler classes.
+ * \param A shared pointer to a reader of the desired sound.
+ * \param plan A shared pointer to a FFT plan used to transform the impulse response.
+ */
+ void processImpulseResponse(std::shared_ptr<IReader> reader, std::shared_ptr<FFTPlan> plan);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/Limiter.h b/extern/audaspace/include/fx/Limiter.h
new file mode 100644
index 00000000000..0b5451b4eed
--- /dev/null
+++ b/extern/audaspace/include/fx/Limiter.h
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file Limiter.h
+ * @ingroup fx
+ * The Limiter class.
+ */
+
+#include "fx/Effect.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This sound limits another sound in start and end time.
+ */
+class AUD_API Limiter : public Effect
+{
+private:
+ /**
+ * The start time.
+ */
+ const float m_start;
+
+ /**
+ * The end time.
+ */
+ const float m_end;
+
+ // delete copy constructor and operator=
+ Limiter(const Limiter&) = delete;
+ Limiter& operator=(const Limiter&) = delete;
+
+public:
+ /**
+ * Creates a new limiter sound.
+ * \param sound The input sound.
+ * \param start The desired start time.
+ * \param end The desired end time, a negative value signals that it should
+ * play to the end.
+ */
+ Limiter(std::shared_ptr<ISound> sound,
+ float start = 0, float end = -1);
+
+ /**
+ * Returns the start time.
+ */
+ float getStart() const;
+
+ /**
+ * Returns the end time.
+ */
+ float getEnd() const;
+
+ virtual std::shared_ptr<IReader> createReader();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/LimiterReader.h b/extern/audaspace/include/fx/LimiterReader.h
new file mode 100644
index 00000000000..49a07b5c29e
--- /dev/null
+++ b/extern/audaspace/include/fx/LimiterReader.h
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file LimiterReader.h
+ * @ingroup fx
+ * The LimiterReader class.
+ */
+
+#include "fx/EffectReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This reader limits another reader in start and end times.
+ */
+class AUD_API LimiterReader : public EffectReader
+{
+private:
+ /**
+ * The start sample: inclusive.
+ */
+ const float m_start;
+
+ /**
+ * The end sample: exlusive.
+ */
+ const float m_end;
+
+ // delete copy constructor and operator=
+ LimiterReader(const LimiterReader&) = delete;
+ LimiterReader& operator=(const LimiterReader&) = delete;
+
+public:
+ /**
+ * Creates a new limiter reader.
+ * \param reader The reader to read from.
+ * \param start The desired start time (inclusive).
+ * \param end The desired end time (sample exklusive), a negative value
+ * signals that it should play to the end.
+ */
+ LimiterReader(std::shared_ptr<IReader> reader, float start = 0, float end = -1);
+
+ virtual void seek(int position);
+ virtual int getLength() const;
+ virtual int getPosition() const;
+ virtual void read(int& length, bool& eos, sample_t* buffer);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/Loop.h b/extern/audaspace/include/fx/Loop.h
new file mode 100644
index 00000000000..c8ba7609f23
--- /dev/null
+++ b/extern/audaspace/include/fx/Loop.h
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file Loop.h
+ * @ingroup fx
+ * The Loop class.
+ */
+
+#include "fx/Effect.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This sound loops another sound.
+ * \note The reader has to be seekable.
+ */
+class AUD_API Loop : public Effect
+{
+private:
+ /**
+ * The loop count.
+ */
+ const int m_loop;
+
+ // delete copy constructor and operator=
+ Loop(const Loop&) = delete;
+ Loop& operator=(const Loop&) = delete;
+
+public:
+ /**
+ * Creates a new loop sound.
+ * \param sound The input sound.
+ * \param loop The desired loop count, negative values result in endless
+ * looping.
+ */
+ Loop(std::shared_ptr<ISound> sound, int loop = -1);
+
+ /**
+ * Returns the loop count.
+ */
+ int getLoop() const;
+
+ virtual std::shared_ptr<IReader> createReader();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/LoopReader.h b/extern/audaspace/include/fx/LoopReader.h
new file mode 100644
index 00000000000..72bb92c8b8f
--- /dev/null
+++ b/extern/audaspace/include/fx/LoopReader.h
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file LoopReader.h
+ * @ingroup fx
+ * The LoopReader class.
+ */
+
+#include "fx/EffectReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This class reads another reader and loops it.
+ * \note The other reader must be seekable.
+ */
+class AUD_API LoopReader : public EffectReader
+{
+private:
+ /**
+ * The loop count.
+ */
+ const int m_count;
+
+ /**
+ * The left loop count.
+ */
+ int m_left;
+
+ // delete copy constructor and operator=
+ LoopReader(const LoopReader&) = delete;
+ LoopReader& operator=(const LoopReader&) = delete;
+
+public:
+ /**
+ * Creates a new loop reader.
+ * \param reader The reader to read from.
+ * \param loop The desired loop count, negative values result in endless
+ * looping.
+ */
+ LoopReader(std::shared_ptr<IReader> reader, int loop);
+
+ virtual void seek(int position);
+ virtual int getLength() const;
+ virtual int getPosition() const;
+ virtual void read(int& length, bool& eos, sample_t* buffer);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/Lowpass.h b/extern/audaspace/include/fx/Lowpass.h
new file mode 100644
index 00000000000..c14e5e8e0e2
--- /dev/null
+++ b/extern/audaspace/include/fx/Lowpass.h
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file Lowpass.h
+ * @ingroup fx
+ * The Lowpass class.
+ */
+
+#include "fx/DynamicIIRFilter.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This sound creates a lowpass filter reader.
+ */
+class AUD_API Lowpass : public DynamicIIRFilter
+{
+private:
+ // delete copy constructor and operator=
+ Lowpass(const Lowpass&) = delete;
+ Lowpass& operator=(const Lowpass&) = delete;
+
+public:
+ /**
+ * Creates a new lowpass sound.
+ * \param sound The input sound.
+ * \param frequency The cutoff frequency.
+ * \param Q The Q factor.
+ */
+ Lowpass(std::shared_ptr<ISound> sound, float frequency, float Q = 1.0f);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/LowpassCalculator.h b/extern/audaspace/include/fx/LowpassCalculator.h
new file mode 100644
index 00000000000..477adfb5b5b
--- /dev/null
+++ b/extern/audaspace/include/fx/LowpassCalculator.h
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file LowpassCalculator.h
+ * @ingroup fx
+ * The LowpassCalculator class.
+ */
+
+#include "fx/IDynamicIIRFilterCalculator.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * The LowpassCalculator class calculates low pass filter coefficients for a
+ * dynamic DynamicIIRFilter.
+ */
+class AUD_LOCAL LowpassCalculator : public IDynamicIIRFilterCalculator
+{
+private:
+ /**
+ * The cutoff frequency.
+ */
+ const float m_frequency;
+
+ /**
+ * The Q factor.
+ */
+ const float m_Q;
+
+ // delete copy constructor and operator=
+ LowpassCalculator(const LowpassCalculator&) = delete;
+ LowpassCalculator& operator=(const LowpassCalculator&) = delete;
+
+public:
+ /**
+ * Creates a LowpassCalculator object.
+ * @param frequency The cutoff frequency.
+ * @param Q The Q factor of the filter. If unsure, use 1.0 as default.
+ */
+ LowpassCalculator(float frequency, float Q);
+
+ virtual void recalculateCoefficients(SampleRate rate, std::vector<float> &b, std::vector<float> &a);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/MutableReader.h b/extern/audaspace/include/fx/MutableReader.h
new file mode 100644
index 00000000000..217dd2aa5d4
--- /dev/null
+++ b/extern/audaspace/include/fx/MutableReader.h
@@ -0,0 +1,71 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#pragma once
+
+/**
+* @file MutableReader.h
+* @ingroup fx
+* The MutableReader class.
+*/
+
+#include "IReader.h"
+#include "ISound.h"
+
+#include <memory>
+
+AUD_NAMESPACE_BEGIN
+
+/**
+* This class represents a reader for a sound that can change with each playback. The change will occur when trying to seek backwards
+* If the sound doesn't support that, it will be restarted.
+* \warning Notice that if a SoundList object is assigned to several MutableReaders, sequential playback won't work correctly.
+* To prevent this the SoundList must be copied.
+*/
+class AUD_API MutableReader : public IReader
+{
+private:
+ /**
+ * The current reader.
+ */
+ std::shared_ptr<IReader> m_reader;
+
+ /**
+ * A sound from which to get the reader.
+ */
+ std::shared_ptr<ISound> m_sound;
+
+
+ // delete copy constructor and operator=
+ MutableReader(const MutableReader&) = delete;
+ MutableReader& operator=(const MutableReader&) = delete;
+
+public:
+ /**
+ * Creates a new mutable reader.
+ * \param sound A of sound you want to assign to this reader.
+ */
+ MutableReader(std::shared_ptr<ISound> sound);
+
+ virtual bool isSeekable() const;
+ virtual void seek(int position);
+ virtual int getLength() const;
+ virtual int getPosition() const;
+ virtual Specs getSpecs() const;
+ virtual void read(int& length, bool& eos, sample_t* buffer);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/MutableSound.h b/extern/audaspace/include/fx/MutableSound.h
new file mode 100644
index 00000000000..9b5aa95cf18
--- /dev/null
+++ b/extern/audaspace/include/fx/MutableSound.h
@@ -0,0 +1,58 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#pragma once
+
+/**
+* @file MutableSound.h
+* @ingroup fx
+* The MutableSound class.
+*/
+
+#include "ISound.h"
+
+#include <memory>
+
+AUD_NAMESPACE_BEGIN
+
+/**
+* Ths class allows to create MutableReaders for any sound.
+*/
+class AUD_API MutableSound : public ISound
+{
+private:
+ /**
+ * A pointer to a sound.
+ */
+ std::shared_ptr<ISound> m_sound;
+
+ // delete copy constructor and operator=
+ MutableSound(const MutableSound&) = delete;
+ MutableSound& operator=(const MutableSound&) = delete;
+
+public:
+ /**
+ * Creates a new MutableSound.
+ * \param sound The sound in which the MutabeReaders created with the createReader() method will be based.
+ * If shared pointer to a SoundList object is used in several mutable sounds the sequential
+ * playback will not work properly. A copy of the SoundList object must be made in this case.
+ */
+ MutableSound(std::shared_ptr<ISound> sound);
+
+ virtual std::shared_ptr<IReader> createReader();
+};
+
+AUD_NAMESPACE_END \ No newline at end of file
diff --git a/extern/audaspace/include/fx/Pitch.h b/extern/audaspace/include/fx/Pitch.h
new file mode 100644
index 00000000000..570366be549
--- /dev/null
+++ b/extern/audaspace/include/fx/Pitch.h
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file Pitch.h
+ * @ingroup fx
+ * The Pitch class.
+ */
+
+#include "fx/Effect.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This sound changes the pitch of another sound.
+ */
+class AUD_API Pitch : public Effect
+{
+private:
+ /**
+ * The pitch.
+ */
+ const float m_pitch;
+
+ // delete copy constructor and operator=
+ Pitch(const Pitch&) = delete;
+ Pitch& operator=(const Pitch&) = delete;
+
+public:
+ /**
+ * Creates a new pitch sound.
+ * \param sound The input sound.
+ * \param pitch The desired pitch.
+ */
+ Pitch(std::shared_ptr<ISound> sound, float pitch);
+
+ virtual std::shared_ptr<IReader> createReader();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/PitchReader.h b/extern/audaspace/include/fx/PitchReader.h
new file mode 100644
index 00000000000..c82f71b61bf
--- /dev/null
+++ b/extern/audaspace/include/fx/PitchReader.h
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file PitchReader.h
+ * @ingroup fx
+ * The PitchReader class.
+ */
+
+#include "fx/EffectReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This class reads another reader and changes it's pitch.
+ */
+class AUD_API PitchReader : public EffectReader
+{
+private:
+ /**
+ * The pitch level.
+ */
+ float m_pitch;
+
+ // delete copy constructor and operator=
+ PitchReader(const PitchReader&) = delete;
+ PitchReader& operator=(const PitchReader&) = delete;
+
+public:
+ /**
+ * Creates a new pitch reader.
+ * \param reader The reader to read from.
+ * \param pitch The pitch value.
+ */
+ PitchReader(std::shared_ptr<IReader> reader, float pitch);
+
+ virtual Specs getSpecs() const;
+
+ /**
+ * Retrieves the pitch.
+ * \return The current pitch value.
+ */
+ float getPitch() const;
+
+ /**
+ * Sets the pitch.
+ * \param pitch The new pitch value.
+ */
+ void setPitch(float pitch);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/PlaybackCategory.h b/extern/audaspace/include/fx/PlaybackCategory.h
new file mode 100644
index 00000000000..7721623359f
--- /dev/null
+++ b/extern/audaspace/include/fx/PlaybackCategory.h
@@ -0,0 +1,127 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#pragma once
+
+/**
+* @file PlaybackCategory.h
+* @ingroup fx
+* The PlaybackCategory class.
+*/
+
+#include "devices/IHandle.h"
+#include "devices/IDevice.h"
+#include "VolumeStorage.h"
+
+#include <unordered_map>
+#include <memory>
+
+AUD_NAMESPACE_BEGIN
+
+/**
+* This class represents a category of related sounds which are currently playing and allows to control them easily.
+*/
+class AUD_API PlaybackCategory
+{
+private:
+ /**
+ * Next handle ID to be assigned.
+ */
+ unsigned int m_currentID;
+
+ /**
+ * Vector of handles that belong to the category.
+ */
+ std::unordered_map<unsigned int, std::shared_ptr<IHandle>> m_handles;
+
+ /**
+ * Device that will play the sounds.
+ */
+ std::shared_ptr<IDevice> m_device;
+
+ /**
+ * Status of the category.
+ */
+ Status m_status;
+
+ /**
+ * Volume of all the sounds of the category.
+ */
+ std::shared_ptr<VolumeStorage> m_volumeStorage;
+
+ // delete copy constructor and operator=
+ PlaybackCategory(const PlaybackCategory&) = delete;
+ PlaybackCategory& operator=(const PlaybackCategory&) = delete;
+
+public:
+ /**
+ * Creates a new PlaybackCategory.
+ * \param device A shared pointer to the device which will be used for playback.
+ */
+ PlaybackCategory(std::shared_ptr<IDevice> device);
+ ~PlaybackCategory();
+
+ /**
+ * Plays a new sound in the category.
+ * \param sound The sound to be played.
+ * \return A handle for the playback. If the playback failed, nullptr will be returned.
+ */
+ std::shared_ptr<IHandle> play(std::shared_ptr<ISound> sound);
+
+ /**
+ * Resumes all the paused sounds of the category.
+ */
+ void resume();
+
+ /**
+ * Pauses all current played back sounds of the category.
+ */
+ void pause();
+
+ /**
+ * Retrieves the volume of the category.
+ * \return The volume.
+ */
+ float getVolume();
+
+ /**
+ * Sets the volume for the category.
+ * \param volume The volume.
+ */
+ void setVolume(float volume);
+
+ /**
+ * Stops all the playing back or paused sounds.
+ */
+ void stop();
+
+ /**
+ * Retrieves the shared volume of the category.
+ * \return A shared pointer to the VolumeStorage object that represents the shared volume of the category.
+ */
+ std::shared_ptr<VolumeStorage> getSharedVolume();
+
+ /**
+ * Cleans the category erasing all the invalid handles.
+ * Only needed if individual sounds are stopped with their handles.
+ */
+ void cleanHandles();
+
+private:
+ static void cleanHandleCallback(void* data);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/PlaybackManager.h b/extern/audaspace/include/fx/PlaybackManager.h
new file mode 100644
index 00000000000..f660568b8db
--- /dev/null
+++ b/extern/audaspace/include/fx/PlaybackManager.h
@@ -0,0 +1,156 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#pragma once
+
+/**
+* @file PlaybackManager.h
+* @ingroup fx
+* The PlaybackManager class.
+*/
+
+#include "PlaybackCategory.h"
+#include "devices/IDevice.h"
+#include "ISound.h"
+
+#include <unordered_map>
+#include <memory>
+
+AUD_NAMESPACE_BEGIN
+
+/**
+* This class allows to control groups of playing sounds easily.
+* The sounds are part of categories.
+*/
+class AUD_API PlaybackManager
+{
+private:
+ /**
+ * Unordered map of categories, each category has different name.
+ */
+ std::unordered_map<unsigned int, std::shared_ptr<PlaybackCategory>> m_categories;
+
+ /**
+ * Device used for playback.
+ */
+ std::shared_ptr<IDevice> m_device;
+
+ /**
+ * The current key used for new categories.
+ */
+ unsigned int m_currentKey;
+
+ // delete copy constructor and operator=
+ PlaybackManager(const PlaybackManager&) = delete;
+ PlaybackManager& operator=(const PlaybackManager&) = delete;
+
+public:
+ /**
+ * Creates a new PlaybackManager.
+ * \param device A shared pointer to the device which will be used for playback.
+ */
+ PlaybackManager(std::shared_ptr<IDevice> device);
+
+ /**
+ * Adds an existent category to the manager and returns a key to access it.
+ * \param category The category to be added.
+ * \return The category key.
+ */
+ unsigned int addCategory(std::shared_ptr<PlaybackCategory> category);
+
+ /**
+ * Adds an existent category to the manager and returns a key to access it.
+ * \param volume The volume of the new category.
+ * \return The category key.
+ */
+ unsigned int addCategory(float volume);
+
+ /**
+ * Plays a sound and adds it to a new or existent category.
+ * \param sound The sound to be played and added to a category.
+ * \param catKey Key of the category.
+ * \return The handle of the playback; nullptr if the sound couldn't be played.
+ */
+ std::shared_ptr<IHandle> play(std::shared_ptr<ISound> sound, unsigned int catKey);
+
+ /**
+ * Resumes all the paused sounds of a category.
+ * \param catKey Key of the category.
+ * \return
+ * - true if succesful.
+ * - false if the category doesn't exist.
+ */
+ bool resume(unsigned int catKey);
+
+ /**
+ * Pauses all current playing sounds of a category.
+ * \param catKey Key of the category.
+ * \return
+ * - true if succesful.
+ * - false if the category doesn't exist.
+ */
+ bool pause(unsigned int catKey);
+
+ /**
+ * Retrieves the volume of a category.
+ * \param catKey Key of the category.
+ * \return The volume value of the category. If the category doesn't exist it returns a negative number.
+ */
+ float getVolume(unsigned int catKey);
+
+ /**
+ * Sets the volume for a category.
+ * \param volume The volume.
+ * \param catKey Key of the category.
+ * \return
+ * - true if succesful.
+ * - false if the category doesn't exist.
+ */
+ bool setVolume(float volume, unsigned int catKey);
+
+ /**
+ * Stops and erases a category of sounds.
+ * \param catKey Key of the category.
+ * \return
+ * - true if succesful.
+ * - false if the category doesn't exist.
+ */
+ bool stop(unsigned int catKey);
+
+ /**
+ * Removes all the invalid handles of all the categories.
+ * Only needed if individual sounds are stopped with their handles.
+ */
+ void clean();
+
+ /**
+ * Removes all the invalid handles of a category.
+ * Only needed if individual sounds are stopped with their handles.
+ * \param catKey Key of the category.
+ * \return
+ * - true if succesful.
+ * - false if the category doesn't exist.
+ */
+ bool clean(unsigned int catKey);
+
+ /**
+ * Retrieves the device of the PlaybackManager.
+ * \return A shared pointer to the device used by the playback manager.
+ */
+ std::shared_ptr<IDevice> getDevice();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/Reverse.h b/extern/audaspace/include/fx/Reverse.h
new file mode 100644
index 00000000000..32227da977a
--- /dev/null
+++ b/extern/audaspace/include/fx/Reverse.h
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file Reverse.h
+ * @ingroup fx
+ * The Reverse class.
+ */
+
+#include "fx/Effect.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This sound reads another sound reverted.
+ * \note Readers from the underlying sound must be seekable.
+ */
+class AUD_API Reverse : public Effect
+{
+private:
+ // delete copy constructor and operator=
+ Reverse(const Reverse&) = delete;
+ Reverse& operator=(const Reverse&) = delete;
+
+public:
+ /**
+ * Creates a new reverse sound.
+ * \param sound The input sound.
+ */
+ Reverse(std::shared_ptr<ISound> sound);
+
+ virtual std::shared_ptr<IReader> createReader();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/ReverseReader.h b/extern/audaspace/include/fx/ReverseReader.h
new file mode 100644
index 00000000000..a02608e1378
--- /dev/null
+++ b/extern/audaspace/include/fx/ReverseReader.h
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file ReverseReader.h
+ * @ingroup fx
+ * The ReverseReader class.
+ */
+
+#include "fx/EffectReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This class reads another reader from back to front.
+ * \note The underlying reader must be seekable.
+ */
+class AUD_API ReverseReader : public EffectReader
+{
+private:
+ /**
+ * The sample count.
+ */
+ const int m_length;
+
+ /**
+ * The current position.
+ */
+ int m_position;
+
+ // delete copy constructor and operator=
+ ReverseReader(const ReverseReader&) = delete;
+ ReverseReader& operator=(const ReverseReader&) = delete;
+
+public:
+ /**
+ * Creates a new reverse reader.
+ * \param reader The reader to read from.
+ * \exception Exception Thrown if the reader specified has an
+ * undeterminable/infinite length or is not seekable.
+ */
+ ReverseReader(std::shared_ptr<IReader> reader);
+
+ virtual void seek(int position);
+ virtual int getLength() const;
+ virtual int getPosition() const;
+ virtual void read(int& length, bool& eos, sample_t* buffer);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/SoundList.h b/extern/audaspace/include/fx/SoundList.h
new file mode 100644
index 00000000000..ce3cb386969
--- /dev/null
+++ b/extern/audaspace/include/fx/SoundList.h
@@ -0,0 +1,110 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#pragma once
+
+/**
+* @file SoundList.h
+* @ingroup fx
+* The SoundList class.
+*/
+
+#include "ISound.h"
+
+#include <vector>
+#include <memory>
+#include <mutex>
+
+AUD_NAMESPACE_BEGIN
+
+/**
+* This class allows to have a list of sound that will play sequentially or randomly with each playback.
+*/
+class AUD_API SoundList : public ISound
+{
+private:
+ /**
+ * The list of sounds that will play.
+ */
+ std::vector<std::shared_ptr<ISound>> m_list;
+
+ /**
+ * Flag for random playback
+ */
+ bool m_random = false;
+
+ /**
+ * Current sound index. -1 if no reader has been created.
+ */
+ int m_index = -1;
+
+ /**
+ * Mutex to prevent multithreading crashes.
+ */
+ std::recursive_mutex m_mutex;
+
+ // delete copy constructor and operator=
+ SoundList(const SoundList&) = delete;
+ SoundList& operator=(const SoundList&) = delete;
+
+public:
+ /**
+ * Creates a new, empty sound list.
+ * Sounds must be added to the list using the addSound() method.
+ * \param random False if the sounds int he list must be played sequentially. True if random.
+ */
+ SoundList(bool random = false);
+
+ /**
+ * Creates a new sound list and initializes it.
+ * \param list A vector with sounds to initialize the list.
+ * \param random False if the sounds int he list must be played sequentially. True if random.
+ */
+ SoundList(std::vector<std::shared_ptr<ISound>>& list, bool random = false);
+
+ virtual std::shared_ptr<IReader> createReader();
+
+ /**
+ * Adds a sound to the list.
+ * The added sounds can be played sequentially or randomly dependig
+ * on the m_random flag
+ * \param sound A shared_ptr to the sound.
+ */
+ void addSound(std::shared_ptr<ISound> sound);
+
+ /**
+ * Sets the playback mode of the sound list.
+ * There are two posible modes, random and sequential.
+ * \param random True to activate the random mode, false to activate sequential mode.
+ */
+ void setRandomMode(bool random);
+
+ /**
+ * Returns the playback mode of the sound list.
+ * The two posible modes are random and sequential.
+ * \return True if the random mode is activated, false otherwise.
+ */
+ bool getRandomMode();
+
+ /**
+ * Returns the amount of sounds in the list.
+ * \return The amount of sounds in the list.
+ */
+ int getSize();
+
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/Source.h b/extern/audaspace/include/fx/Source.h
new file mode 100644
index 00000000000..84448aa669d
--- /dev/null
+++ b/extern/audaspace/include/fx/Source.h
@@ -0,0 +1,109 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#pragma once
+
+/**
+* @file Source.h
+* @ingroup fx
+* The Source class.
+*/
+
+#include "Audaspace.h"
+
+#include <atomic>
+
+AUD_NAMESPACE_BEGIN
+
+/**
+* This class stores the azimuth and elevation angles of a sound and allows to change them dynamically.
+* The azimuth angle goes clockwise. For a sound source situated at the right of the listener the azimuth angle is 90.
+*/
+class AUD_API Source
+{
+private:
+ /**
+ * Azimuth value.
+ */
+ std::atomic<float> m_azimuth;
+
+ /**
+ * Elevation value.
+ */
+ std::atomic<float> m_elevation;
+
+ /**
+ * Distance value. Between 0 and 1.
+ */
+ std::atomic<float> m_distance;
+
+ // delete copy constructor and operator=
+ Source(const Source&) = delete;
+ Source& operator=(const Source&) = delete;
+
+public:
+ /**
+ * Creates a Source instance with an initial value.
+ * \param azimuth The value of the azimuth.
+ * \param elevation The value of the elevation.
+ * \param distance The distance from the listener. Max distance is 1, min distance is 0.
+ */
+ Source(float azimuth, float elevation, float distance = 0.0);
+
+ /**
+ * Retrieves the current azimuth value.
+ * \return The current azimuth.
+ */
+ float getAzimuth();
+
+ /**
+ * Retrieves the current elevation value.
+ * \return The current elevation.
+ */
+ float getElevation();
+
+ /**
+ * Retrieves the current distance value.
+ * \return The current distance.
+ */
+ float getDistance();
+
+ /**
+ * Retrieves the current volume value based on the distance.
+ * \return The current volume based on the Distance.
+ */
+ float getVolume();
+
+ /**
+ * Changes the azimuth value.
+ * \param azimuth The new value for the azimuth.
+ */
+ void setAzimuth(float azimuth);
+
+ /**
+ * Changes the elevation value.
+ * \param elevation The new value for the elevation.
+ */
+ void setElevation(float elevation);
+
+ /**
+ * Changes the distance value.
+ * \param distance The new value for the distance. Max distance is 1, min distance is 0.
+ */
+ void setDistance(float distance);
+};
+
+AUD_NAMESPACE_END \ No newline at end of file
diff --git a/extern/audaspace/include/fx/Sum.h b/extern/audaspace/include/fx/Sum.h
new file mode 100644
index 00000000000..b590aa7fcd1
--- /dev/null
+++ b/extern/audaspace/include/fx/Sum.h
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file Sum.h
+ * @ingroup fx
+ * The Sum class.
+ */
+
+#include "fx/Effect.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This sound creates a sum reader.
+ */
+class AUD_API Sum : public Effect
+{
+private:
+ // delete copy constructor and operator=
+ Sum(const Sum&) = delete;
+ Sum& operator=(const Sum&) = delete;
+
+public:
+ /**
+ * Creates a new sum sound.
+ * \param sound The input sound.
+ */
+ Sum(std::shared_ptr<ISound> sound);
+
+ virtual std::shared_ptr<IReader> createReader();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/Threshold.h b/extern/audaspace/include/fx/Threshold.h
new file mode 100644
index 00000000000..10baef1714d
--- /dev/null
+++ b/extern/audaspace/include/fx/Threshold.h
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file Threshold.h
+ * @ingroup fx
+ * The Threshold class.
+ */
+
+#include "fx/Effect.h"
+
+AUD_NAMESPACE_BEGIN
+
+class CallbackIIRFilterReader;
+
+/**
+ * This sound Transforms any signal to a square signal by thresholding.
+ */
+class AUD_API Threshold : public Effect
+{
+private:
+ /**
+ * The threshold.
+ */
+ const float m_threshold;
+
+ // delete copy constructor and operator=
+ Threshold(const Threshold&) = delete;
+ Threshold& operator=(const Threshold&) = delete;
+
+public:
+ /**
+ * Creates a new threshold sound.
+ * \param sound The input sound.
+ * \param threshold The threshold.
+ */
+ Threshold(std::shared_ptr<ISound> sound, float threshold = 0.0f);
+
+ /**
+ * Returns the threshold.
+ */
+ float getThreshold() const;
+
+ virtual std::shared_ptr<IReader> createReader();
+
+ /**
+ * The thresholdFilter function implements the doFilterIIR callback
+ * for the callback IIR filter.
+ * @param reader The CallbackIIRFilterReader that executes the callback.
+ * @param threshold The threshold value.
+ * @return The filtered sample.
+ */
+ static sample_t AUD_LOCAL thresholdFilter(CallbackIIRFilterReader* reader, float* threshold);
+
+ /**
+ * The endThresholdFilter function implements the endFilterIIR callback
+ * for the callback IIR filter.
+ * @param threshold The threshold value.
+ */
+ static void AUD_LOCAL endThresholdFilter(float* threshold);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/Volume.h b/extern/audaspace/include/fx/Volume.h
new file mode 100644
index 00000000000..0e56e8efd9b
--- /dev/null
+++ b/extern/audaspace/include/fx/Volume.h
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file Volume.h
+ * @ingroup fx
+ * The Volume class.
+ */
+
+#include "fx/Effect.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This sound changes the volume of another sound.
+ * The set volume should be a value between 0.0 and 1.0, higher values at your
+ * own risk!
+ */
+class AUD_API Volume : public Effect
+{
+private:
+ /**
+ * The volume.
+ */
+ const float m_volume;
+
+ // delete copy constructor and operator=
+ Volume(const Volume&) = delete;
+ Volume& operator=(const Volume&) = delete;
+
+public:
+ /**
+ * Creates a new volume sound.
+ * \param sound The input sound.
+ * \param volume The desired volume.
+ */
+ Volume(std::shared_ptr<ISound> sound, float volume);
+
+ /**
+ * Returns the volume.
+ * \return The current volume.
+ */
+ float getVolume() const;
+
+ virtual std::shared_ptr<IReader> createReader();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/fx/VolumeReader.h b/extern/audaspace/include/fx/VolumeReader.h
new file mode 100644
index 00000000000..13b6845e931
--- /dev/null
+++ b/extern/audaspace/include/fx/VolumeReader.h
@@ -0,0 +1,70 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#pragma once
+
+/**
+* @file VolumeReader.h
+* @ingroup fx
+* The VolumeReader class.
+*/
+
+#include "IReader.h"
+#include "ISound.h"
+#include "VolumeStorage.h"
+
+#include <memory>
+
+AUD_NAMESPACE_BEGIN
+
+/**
+* This class represents a reader for a sound that has its own shared volume
+*/
+class AUD_API VolumeReader : public IReader
+{
+private:
+ /**
+ * The current reader.
+ */
+ std::shared_ptr<IReader> m_reader;
+
+ /**
+ * A sound from which to get the reader.
+ */
+ std::shared_ptr<VolumeStorage> m_volumeStorage;
+
+
+ // delete copy constructor and operator=
+ VolumeReader(const VolumeReader&) = delete;
+ VolumeReader& operator=(const VolumeReader&) = delete;
+
+public:
+ /**
+ * Creates a new volume reader.
+ * \param reader A reader of the sound to be assigned to this reader.
+ * \param volumeStorage A shared pointer to a VolumeStorage object.
+ */
+ VolumeReader(std::shared_ptr<IReader> reader, std::shared_ptr<VolumeStorage> volumeStorage);
+
+ virtual bool isSeekable() const;
+ virtual void seek(int position);
+ virtual int getLength() const;
+ virtual int getPosition() const;
+ virtual Specs getSpecs() const;
+ virtual void read(int& length, bool& eos, sample_t* buffer);
+};
+
+AUD_NAMESPACE_END \ No newline at end of file
diff --git a/extern/audaspace/include/fx/VolumeSound.h b/extern/audaspace/include/fx/VolumeSound.h
new file mode 100644
index 00000000000..0aeffd53e87
--- /dev/null
+++ b/extern/audaspace/include/fx/VolumeSound.h
@@ -0,0 +1,74 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#pragma once
+
+/**
+* @file VolumeSound.h
+* @ingroup fx
+* The VolumeSound class.
+*/
+
+#include "ISound.h"
+#include "VolumeStorage.h"
+#include <memory>
+
+AUD_NAMESPACE_BEGIN
+
+/**
+* This class allows to create a sound with its own volume.
+*/
+class AUD_API VolumeSound : public ISound
+{
+private:
+ /**
+ * A pointer to a sound.
+ */
+ std::shared_ptr<ISound> m_sound;
+
+ /**
+ * A pointer to the shared volume being used.
+ */
+ std::shared_ptr<VolumeStorage> m_volumeStorage;
+
+ // delete copy constructor and operator=
+ VolumeSound(const VolumeSound&) = delete;
+ VolumeSound& operator=(const VolumeSound&) = delete;
+
+public:
+ /**
+ * Creates a new VolumeSound.
+ * \param sound The sound in which shall have its own volume.
+ * \param volumeStorage A shared pointer to a VolumeStorage object. It allows to change the volume of various sound in one go.
+ */
+ VolumeSound(std::shared_ptr<ISound> sound, std::shared_ptr<VolumeStorage> volumeStorage);
+
+ virtual std::shared_ptr<IReader> createReader();
+
+ /**
+ * Retrieves the shared volume of this sound.
+ * \return A shared pointer to the VolumeStorage object that this sound is using.
+ */
+ std::shared_ptr<VolumeStorage> getSharedVolume();
+
+ /**
+ * Changes the shared volume of this sound, it'll only affect newly created readers.
+ * \param volumeStorage A shared pointer to the new VolumeStorage object.
+ */
+ void setSharedVolume(std::shared_ptr<VolumeStorage> volumeStorage);
+};
+
+AUD_NAMESPACE_END \ No newline at end of file
diff --git a/extern/audaspace/include/fx/VolumeStorage.h b/extern/audaspace/include/fx/VolumeStorage.h
new file mode 100644
index 00000000000..5088a5e2ba9
--- /dev/null
+++ b/extern/audaspace/include/fx/VolumeStorage.h
@@ -0,0 +1,71 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#pragma once
+
+/**
+* @file VolumeStorage.h
+* @ingroup fx
+* The VolumeStorage class.
+*/
+
+#include "Audaspace.h"
+
+#include <atomic>
+
+AUD_NAMESPACE_BEGIN
+
+/**
+* This class stores a volume value and allows to change if for a number of sounds in one go.
+*/
+class AUD_API VolumeStorage
+{
+private:
+ /**
+ * Volume value.
+ */
+ std::atomic<float> m_volume;
+
+ // delete copy constructor and operator=
+ VolumeStorage(const VolumeStorage&) = delete;
+ VolumeStorage& operator=(const VolumeStorage&) = delete;
+
+public:
+ /**
+ * Creates a new VolumeStorage instance with volume 1
+ */
+ VolumeStorage();
+
+ /**
+ * Creates a VolumeStorage instance with an initial value.
+ * \param volume The value of the volume.
+ */
+ VolumeStorage(float volume);
+
+ /**
+ * Retrieves the current volume value.
+ * \return The current volume.
+ */
+ float getVolume();
+
+ /**
+ * Changes the volume value.
+ * \param volume The new value for the volume.
+ */
+ void setVolume(float volume);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/generator/Sawtooth.h b/extern/audaspace/include/generator/Sawtooth.h
new file mode 100644
index 00000000000..68f56ae83fd
--- /dev/null
+++ b/extern/audaspace/include/generator/Sawtooth.h
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file Sawtooth.h
+ * @ingroup generator
+ * The Sawtooth class.
+ */
+
+#include "ISound.h"
+#include "respec/Specification.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This sound creates a reader that plays a sawtooth tone.
+ */
+class AUD_API Sawtooth : public ISound
+{
+private:
+ /**
+ * The frequence of the sawtooth wave.
+ */
+ const float m_frequency;
+
+ /**
+ * The target sample rate for output.
+ */
+ const SampleRate m_sampleRate;
+
+ // delete copy constructor and operator=
+ Sawtooth(const Sawtooth&) = delete;
+ Sawtooth& operator=(const Sawtooth&) = delete;
+
+public:
+ /**
+ * Creates a new sawtooth sound.
+ * \param frequency The desired frequency.
+ * \param sampleRate The target sample rate for playback.
+ */
+ Sawtooth(float frequency, SampleRate sampleRate = RATE_48000);
+
+ /**
+ * Returns the frequency of the sawtooth wave.
+ */
+ float getFrequency() const;
+
+ virtual std::shared_ptr<IReader> createReader();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/generator/SawtoothReader.h b/extern/audaspace/include/generator/SawtoothReader.h
new file mode 100644
index 00000000000..b4045eb8820
--- /dev/null
+++ b/extern/audaspace/include/generator/SawtoothReader.h
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file SawtoothReader.h
+ * @ingroup generator
+ * The SawtoothReader class.
+ */
+
+#include "IReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This class is used for sawtooth tone playback.
+ * The output format is in the 16 bit format and stereo, the sample rate can be
+ * specified.
+ * As the two channels both play the same the output could also be mono, but
+ * in most cases this will result in having to resample for output, so stereo
+ * sound is created directly.
+ */
+class AUD_API SawtoothReader : public IReader
+{
+private:
+ /**
+ * The frequency of the sine wave.
+ */
+ float m_frequency;
+
+ /**
+ * The current position in samples.
+ */
+ int m_position;
+
+ /**
+ * The value of the current sample.
+ */
+ float m_sample;
+
+ /**
+ * The sample rate for the output.
+ */
+ const SampleRate m_sampleRate;
+
+ // delete copy constructor and operator=
+ SawtoothReader(const SawtoothReader&) = delete;
+ SawtoothReader& operator=(const SawtoothReader&) = delete;
+
+public:
+ /**
+ * Creates a new reader.
+ * \param frequency The frequency of the sine wave.
+ * \param sampleRate The output sample rate.
+ */
+ SawtoothReader(float frequency, SampleRate sampleRate);
+
+ /**
+ * Sets the frequency of the wave.
+ * @param frequency The new frequency in Hertz.
+ */
+ void setFrequency(float frequency);
+
+ virtual bool isSeekable() const;
+ virtual void seek(int position);
+ virtual int getLength() const;
+ virtual int getPosition() const;
+ virtual Specs getSpecs() const;
+ virtual void read(int & length, bool &eos, sample_t* buffer);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/generator/Silence.h b/extern/audaspace/include/generator/Silence.h
new file mode 100644
index 00000000000..a35b83d37fc
--- /dev/null
+++ b/extern/audaspace/include/generator/Silence.h
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file Silence.h
+ * @ingroup generator
+ * The Silence class.
+ */
+
+#include "ISound.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This sound creates a reader that plays silence.
+ */
+class AUD_API Silence : public ISound
+{
+private:
+ // delete copy constructor and operator=
+ Silence(const Silence&) = delete;
+ Silence& operator=(const Silence&) = delete;
+
+public:
+ /**
+ * Creates a new silence sound.
+ */
+ Silence();
+
+ virtual std::shared_ptr<IReader> createReader();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/generator/SilenceReader.h b/extern/audaspace/include/generator/SilenceReader.h
new file mode 100644
index 00000000000..ecc0ce86da9
--- /dev/null
+++ b/extern/audaspace/include/generator/SilenceReader.h
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file SilenceReader.h
+ * @ingroup generator
+ * The SilenceReader class.
+ */
+
+#include "IReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This class is used for silence playback.
+ * The signal generated is 44.1kHz mono.
+ */
+class AUD_API SilenceReader : public IReader
+{
+private:
+ /**
+ * The current position in samples.
+ */
+ int m_position;
+
+ // delete copy constructor and operator=
+ SilenceReader(const SilenceReader&) = delete;
+ SilenceReader& operator=(const SilenceReader&) = delete;
+
+public:
+ /**
+ * Creates a new reader.
+ */
+ SilenceReader();
+
+ virtual bool isSeekable() const;
+ virtual void seek(int position);
+ virtual int getLength() const;
+ virtual int getPosition() const;
+ virtual Specs getSpecs() const;
+ virtual void read(int& length, bool& eos, sample_t* buffer);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/generator/Sine.h b/extern/audaspace/include/generator/Sine.h
new file mode 100644
index 00000000000..ee78fc7d06b
--- /dev/null
+++ b/extern/audaspace/include/generator/Sine.h
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file Sine.h
+ * @ingroup generator
+ * The Sine class.
+ */
+
+#include "ISound.h"
+#include "respec/Specification.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This sound creates a reader that plays a sine tone.
+ */
+class AUD_API Sine : public ISound
+{
+private:
+ /**
+ * The frequence of the sine wave.
+ */
+ const float m_frequency;
+
+ /**
+ * The target sample rate for output.
+ */
+ const SampleRate m_sampleRate;
+
+ // delete copy constructor and operator=
+ Sine(const Sine&) = delete;
+ Sine& operator=(const Sine&) = delete;
+
+public:
+ /**
+ * Creates a new sine sound.
+ * \param frequency The desired frequency.
+ * \param sampleRate The target sample rate for playback.
+ */
+ Sine(float frequency,
+ SampleRate sampleRate = RATE_48000);
+
+ /**
+ * Returns the frequency of the sine wave.
+ */
+ float getFrequency() const;
+
+ virtual std::shared_ptr<IReader> createReader();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/generator/SineReader.h b/extern/audaspace/include/generator/SineReader.h
new file mode 100644
index 00000000000..49cd571bc65
--- /dev/null
+++ b/extern/audaspace/include/generator/SineReader.h
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file SineReader.h
+ * @ingroup generator
+ * The SineReader class.
+ */
+
+#include "IReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This class is used for sine tone playback.
+ * The sample rate can be specified, the signal is mono.
+ */
+class AUD_API SineReader : public IReader
+{
+private:
+ /**
+ * The frequency of the sine wave.
+ */
+ float m_frequency;
+
+ /**
+ * The current position in samples.
+ */
+ int m_position;
+
+ /**
+ * The sample rate for the output.
+ */
+ const SampleRate m_sampleRate;
+
+ // delete copy constructor and operator=
+ SineReader(const SineReader&) = delete;
+ SineReader& operator=(const SineReader&) = delete;
+
+public:
+ /**
+ * Creates a new reader.
+ * \param frequency The frequency of the sine wave.
+ * \param sampleRate The output sample rate.
+ */
+ SineReader(float frequency, SampleRate sampleRate);
+
+ /**
+ * Sets the frequency of the wave.
+ * @param frequency The new frequency in Hertz.
+ */
+ void setFrequency(float frequency);
+
+ virtual bool isSeekable() const;
+ virtual void seek(int position);
+ virtual int getLength() const;
+ virtual int getPosition() const;
+ virtual Specs getSpecs() const;
+ virtual void read(int& length, bool& eos, sample_t* buffer);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/generator/Square.h b/extern/audaspace/include/generator/Square.h
new file mode 100644
index 00000000000..0ba27677a81
--- /dev/null
+++ b/extern/audaspace/include/generator/Square.h
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file Square.h
+ * @ingroup generator
+ * The Square class.
+ */
+
+#include "ISound.h"
+#include "respec/Specification.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This sound creates a reader that plays a square tone.
+ */
+class AUD_API Square : public ISound
+{
+private:
+ /**
+ * The frequence of the square wave.
+ */
+ const float m_frequency;
+
+ /**
+ * The target sample rate for output.
+ */
+ const SampleRate m_sampleRate;
+
+ // delete copy constructor and operator=
+ Square(const Square&) = delete;
+ Square& operator=(const Square&) = delete;
+
+public:
+ /**
+ * Creates a new square sound.
+ * \param frequency The desired frequency.
+ * \param sampleRate The target sample rate for playback.
+ */
+ Square(float frequency,
+ SampleRate sampleRate = RATE_48000);
+
+ /**
+ * Returns the frequency of the square wave.
+ */
+ float getFrequency() const;
+
+ virtual std::shared_ptr<IReader> createReader();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/generator/SquareReader.h b/extern/audaspace/include/generator/SquareReader.h
new file mode 100644
index 00000000000..53fc574c767
--- /dev/null
+++ b/extern/audaspace/include/generator/SquareReader.h
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file SquareReader.h
+ * @ingroup generator
+ * The SquareReader class.
+ */
+
+#include "IReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This class is used for square tone playback.
+ * The output format is in the 16 bit format and stereo, the sample rate can be
+ * specified.
+ * As the two channels both play the same the output could also be mono, but
+ * in most cases this will result in having to resample for output, so stereo
+ * sound is created directly.
+ */
+class AUD_API SquareReader : public IReader
+{
+private:
+ /**
+ * The frequency of the sine wave.
+ */
+ float m_frequency;
+
+ /**
+ * The current position in samples.
+ */
+ int m_position;
+
+ /**
+ * The value of the current sample.
+ */
+ float m_sample;
+
+ /**
+ * The sample rate for the output.
+ */
+ const SampleRate m_sampleRate;
+
+ // delete copy constructor and operator=
+ SquareReader(const SquareReader&) = delete;
+ SquareReader& operator=(const SquareReader&) = delete;
+
+public:
+ /**
+ * Creates a new reader.
+ * \param frequency The frequency of the sine wave.
+ * \param sampleRate The output sample rate.
+ */
+ SquareReader(float frequency, SampleRate sampleRate);
+
+ /**
+ * Sets the frequency of the wave.
+ * @param frequency The new frequency in Hertz.
+ */
+ void setFrequency(float frequency);
+
+ virtual bool isSeekable() const;
+ virtual void seek(int position);
+ virtual int getLength() const;
+ virtual int getPosition() const;
+ virtual Specs getSpecs() const;
+ virtual void read(int & length, bool &eos, sample_t* buffer);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/generator/Triangle.h b/extern/audaspace/include/generator/Triangle.h
new file mode 100644
index 00000000000..4f607fc23b5
--- /dev/null
+++ b/extern/audaspace/include/generator/Triangle.h
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file Triangle.h
+ * @ingroup generator
+ * The Triangle class.
+ */
+
+#include "ISound.h"
+#include "respec/Specification.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This sound creates a reader that plays a triangle tone.
+ */
+class AUD_API Triangle : public ISound
+{
+private:
+ /**
+ * The frequence of the triangle wave.
+ */
+ const float m_frequency;
+
+ /**
+ * The target sample rate for output.
+ */
+ const SampleRate m_sampleRate;
+
+ // delete copy constructor and operator=
+ Triangle(const Triangle&) = delete;
+ Triangle& operator=(const Triangle&) = delete;
+
+public:
+ /**
+ * Creates a new triangle sound.
+ * \param frequency The desired frequency.
+ * \param sampleRate The target sample rate for playback.
+ */
+ Triangle(float frequency,
+ SampleRate sampleRate = RATE_48000);
+
+ /**
+ * Returns the frequency of the triangle wave.
+ */
+ float getFrequency() const;
+
+ virtual std::shared_ptr<IReader> createReader();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/generator/TriangleReader.h b/extern/audaspace/include/generator/TriangleReader.h
new file mode 100644
index 00000000000..15079404b75
--- /dev/null
+++ b/extern/audaspace/include/generator/TriangleReader.h
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file TriangleReader.h
+ * @ingroup generator
+ * The TriangleReader class.
+ */
+
+#include "IReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This class is used for sawtooth tone playback.
+ * The output format is in the 16 bit format and stereo, the sample rate can be
+ * specified.
+ * As the two channels both play the same the output could also be mono, but
+ * in most cases this will result in having to resample for output, so stereo
+ * sound is created directly.
+ */
+class AUD_API TriangleReader : public IReader
+{
+private:
+ /**
+ * The frequency of the sine wave.
+ */
+ float m_frequency;
+
+ /**
+ * The current position in samples.
+ */
+ int m_position;
+
+ /**
+ * The value of the current sample.
+ */
+ float m_sample;
+
+ /**
+ * The sample rate for the output.
+ */
+ const SampleRate m_sampleRate;
+
+ // delete copy constructor and operator=
+ TriangleReader(const TriangleReader&) = delete;
+ TriangleReader& operator=(const TriangleReader&) = delete;
+
+public:
+ /**
+ * Creates a new reader.
+ * \param frequency The frequency of the sine wave.
+ * \param sampleRate The output sample rate.
+ */
+ TriangleReader(float frequency, SampleRate sampleRate);
+
+ /**
+ * Sets the frequency of the wave.
+ * @param frequency The new frequency in Hertz.
+ */
+ void setFrequency(float frequency);
+
+ virtual bool isSeekable() const;
+ virtual void seek(int position);
+ virtual int getLength() const;
+ virtual int getPosition() const;
+ virtual Specs getSpecs() const;
+ virtual void read(int & length, bool &eos, sample_t* buffer);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/plugin/PluginManager.h b/extern/audaspace/include/plugin/PluginManager.h
new file mode 100644
index 00000000000..af2f469c4ea
--- /dev/null
+++ b/extern/audaspace/include/plugin/PluginManager.h
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file PluginManager.h
+ * @ingroup plugin
+ * The PluginManager class.
+ */
+
+#include "Audaspace.h"
+
+#include <unordered_map>
+#include <string>
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This manager provides utilities for plugin loading.
+ */
+class AUD_API PluginManager
+{
+private:
+ static std::unordered_map<std::string, void*> m_plugins;
+
+ // delete copy constructor and operator=
+ PluginManager(const PluginManager&) = delete;
+ PluginManager& operator=(const PluginManager&) = delete;
+ PluginManager() = delete;
+
+public:
+ /**
+ * Opens a shared library.
+ * @param path The path to the file.
+ * @return A handle to the library or nullptr if opening failed.
+ */
+ static void* openLibrary(const std::string& path);
+
+ /**
+ * Looks up a symbol from an opened library.
+ * @param handle The handle to the opened library.
+ * @param name The name of the symbol to look up.
+ * @return The symbol or nullptr if the symbol was not found.
+ */
+ static void* lookupLibrary(void* handle, const std::string& name);
+
+ /**
+ * Closes an opened shared library.
+ * @param handle The handle to the library to be closed.
+ */
+ static void closeLibrary(void* handle);
+
+ /**
+ * Loads a plugin from a file.
+ * @param path The path to the file.
+ * @return Whether the file could successfully be loaded.
+ */
+ static bool loadPlugin(const std::string& path);
+
+ /**
+ * Loads all plugins found in a folder.
+ * @param path The path to the folder containing the plugins.
+ */
+ static void loadPlugins(const std::string& path = "");
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/respec/ChannelMapper.h b/extern/audaspace/include/respec/ChannelMapper.h
new file mode 100644
index 00000000000..5481a42c433
--- /dev/null
+++ b/extern/audaspace/include/respec/ChannelMapper.h
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file ChannelMapper.h
+ * @ingroup respec
+ * The ChannelMapper class.
+ */
+
+#include "respec/SpecsChanger.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This sound creates a reader that maps a sound source's channels to a
+ * specific output channel count.
+ */
+class AUD_API ChannelMapper : public SpecsChanger
+{
+private:
+ // delete copy constructor and operator=
+ ChannelMapper(const ChannelMapper&) = delete;
+ ChannelMapper& operator=(const ChannelMapper&) = delete;
+
+public:
+ /**
+ * Creates a new sound.
+ * \param sound The input sound.
+ * \param specs The target specifications.
+ */
+ ChannelMapper(std::shared_ptr<ISound> sound, DeviceSpecs specs);
+
+ virtual std::shared_ptr<IReader> createReader();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/respec/ChannelMapperReader.h b/extern/audaspace/include/respec/ChannelMapperReader.h
new file mode 100644
index 00000000000..00739ee995f
--- /dev/null
+++ b/extern/audaspace/include/respec/ChannelMapperReader.h
@@ -0,0 +1,151 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file ChannelMapperReader.h
+ * @ingroup respec
+ * The ChannelMapperReader class.
+ */
+
+#include "fx/EffectReader.h"
+#include "util/Buffer.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This class maps a sound source's channels to a specific output channel count.
+ * \note The input sample format must be float.
+ */
+class AUD_API ChannelMapperReader : public EffectReader
+{
+private:
+ /**
+ * The sound reading buffer.
+ */
+ Buffer m_buffer;
+
+ /**
+ * The output specification.
+ */
+ Channels m_target_channels;
+
+ /**
+ * The channel count of the reader.
+ */
+ Channels m_source_channels;
+
+ /**
+ * The mapping specification.
+ */
+ float* m_mapping;
+
+ /**
+ * The size of the mapping.
+ */
+ int m_map_size;
+
+ /**
+ * The mono source angle.
+ */
+ float m_mono_angle;
+
+ static const Channel MONO_MAP[];
+ static const Channel STEREO_MAP[];
+ static const Channel STEREO_LFE_MAP[];
+ static const Channel SURROUND4_MAP[];
+ static const Channel SURROUND5_MAP[];
+ static const Channel SURROUND51_MAP[];
+ static const Channel SURROUND61_MAP[];
+ static const Channel SURROUND71_MAP[];
+ static const Channel* CHANNEL_MAPS[];
+
+ static const float MONO_ANGLES[];
+ static const float STEREO_ANGLES[];
+ static const float STEREO_LFE_ANGLES[];
+ static const float SURROUND4_ANGLES[];
+ static const float SURROUND5_ANGLES[];
+ static const float SURROUND51_ANGLES[];
+ static const float SURROUND61_ANGLES[];
+ static const float SURROUND71_ANGLES[];
+ static const float* CHANNEL_ANGLES[];
+
+ // delete copy constructor and operator=
+ ChannelMapperReader(const ChannelMapperReader&) = delete;
+ ChannelMapperReader& operator=(const ChannelMapperReader&) = delete;
+
+ /**
+ * Calculates the mapping matrix.
+ */
+ void AUD_LOCAL calculateMapping();
+
+ /**
+ * Calculates the distance between two angles.
+ */
+ float AUD_LOCAL angleDistance(float alpha, float beta);
+
+public:
+ /**
+ * Creates a channel mapper reader.
+ * \param reader The reader to map.
+ * \param channels The target channel count this reader should map to.
+ */
+ ChannelMapperReader(std::shared_ptr<IReader> reader, Channels channels);
+
+ /**
+ * Destroys the reader.
+ */
+ ~ChannelMapperReader();
+
+ /**
+ * Returns the channel configuration of the source reader.
+ * @return The channel configuration of the reader.
+ */
+ Channels getSourceChannels() const;
+
+ /**
+ * Returns the target channel configuration.
+ * Equals getSpecs().channels.
+ * @return The target channel configuration.
+ */
+ Channels getChannels() const;
+
+ /**
+ * Sets the requested channel output count.
+ * \param channels The channel output count.
+ */
+ void setChannels(Channels channels);
+
+ /**
+ * Returns the mapping of the source channel to the target channel.
+ * @param source The number of the source channel. Should be in the range [0, source channels).
+ * @param target The number of the target channel. Should be in the range [0, target channels).
+ * @return The mapping value which should be between 0.0 and 1.0. If source or target are out of range, NaN is returned.
+ */
+ float getMapping(int source, int target);
+
+ /**
+ * Sets the angle for mono sources.
+ * \param angle The angle for mono sources.
+ */
+ void setMonoAngle(float angle);
+
+ virtual Specs getSpecs() const;
+ virtual void read(int& length, bool& eos, sample_t* buffer);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/respec/Converter.h b/extern/audaspace/include/respec/Converter.h
new file mode 100644
index 00000000000..35664b28025
--- /dev/null
+++ b/extern/audaspace/include/respec/Converter.h
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file Converter.h
+ * @ingroup respec
+ * The Converter class.
+ */
+
+#include "respec/SpecsChanger.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This sound creates a converter reader that is able to convert from one
+ * audio format to another.
+ */
+class AUD_API Converter : public SpecsChanger
+{
+private:
+ // delete copy constructor and operator=
+ Converter(const Converter&) = delete;
+ Converter& operator=(const Converter&) = delete;
+
+public:
+ /**
+ * Creates a new sound.
+ * \param sound The input sound.
+ * \param specs The target specifications.
+ */
+ Converter(std::shared_ptr<ISound> sound, DeviceSpecs specs);
+
+ virtual std::shared_ptr<IReader> createReader();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/respec/ConverterFunctions.h b/extern/audaspace/include/respec/ConverterFunctions.h
new file mode 100644
index 00000000000..3cc4a713cc9
--- /dev/null
+++ b/extern/audaspace/include/respec/ConverterFunctions.h
@@ -0,0 +1,377 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file ConverterFunctions.h
+ * @ingroup respec
+ * Defines several conversion functions between different sample formats.
+ */
+
+#include "Audaspace.h"
+
+#include <cstring>
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * The function template for functions converting from one sample format
+ * to another, having the same parameter order as std::memcpy.
+ */
+typedef void (*convert_f)(data_t* target, data_t* source, int length);
+
+/**
+ * The copy conversion function simply calls std::memcpy.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+template <class T>
+void convert_copy(data_t* target, data_t* source, int length)
+{
+ std::memcpy(target, source, length*sizeof(T));
+}
+
+/**
+ * @brief Converts from FORMAT_U8 to FORMAT_S16.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_u8_s16(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_U8 to FORMAT_S24 big endian.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_u8_s24_be(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_U8 to FORMAT_S24 little endian.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_u8_s24_le(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_U8 to FORMAT_S32.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_u8_s32(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_U8 to FORMAT_FLOAT32.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_u8_float(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_U8 to FORMAT_FLOAT64.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_u8_double(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_S16 to FORMAT_U8.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_s16_u8(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_S16 to FORMAT_S24 big endian.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_s16_s24_be(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_S16 to FORMAT_S24 little endian.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_s16_s24_le(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_S16 to FORMAT_S32.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_s16_s32(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_S16 to FORMAT_FLOAT32.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_s16_float(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_S16 to FORMAT_FLOAT64.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_s16_double(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_S24 big endian to FORMAT_U8.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_s24_u8_be(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_S24 little endian to FORMAT_U8.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_s24_u8_le(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_S24 big endian to FORMAT_S16.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_s24_s16_be(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_S24 little endian to FORMAT_S16.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_s24_s16_le(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_S24 to FORMAT_S24 simply using std::memcpy.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_s24_s24(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_S24 big endian to FORMAT_S32.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_s24_s32_be(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_S24 little endian to FORMAT_S32.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_s24_s32_le(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_S24 big endian to FORMAT_FLOAT32.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_s24_float_be(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_S24 little endian to FORMAT_FLOAT32.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_s24_float_le(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_S24 big endian to FORMAT_FLOAT64.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_s24_double_be(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_S24 little endian to FORMAT_FLOAT64.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_s24_double_le(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_S32 to FORMAT_U8.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_s32_u8(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_S32 to FORMAT_S16.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_s32_s16(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_S32 to FORMAT_S24 big endian.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_s32_s24_be(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_S32 to FORMAT_S24 little endian.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_s32_s24_le(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_S32 to FORMAT_FLOAT32.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_s32_float(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_S32 to FORMAT_FLOAT64.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_s32_double(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_FLOAT32 to FORMAT_U8.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_float_u8(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_FLOAT32 to FORMAT_S16.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_float_s16(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_FLOAT32 to FORMAT_S24 big endian.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_float_s24_be(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_FLOAT32 to FORMAT_S24 little endian.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_float_s24_le(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_FLOAT32 to FORMAT_S32.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_float_s32(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_FLOAT32 to FORMAT_FLOAT64.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_float_double(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_FLOAT64 to FORMAT_U8.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_double_u8(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_FLOAT64 to FORMAT_S16.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_double_s16(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_FLOAT64 to FORMAT_S24 big endian.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_double_s24_be(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_FLOAT64 to FORMAT_S24 little endian.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_double_s24_le(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_FLOAT64 to FORMAT_S32.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_double_s32(data_t* target, data_t* source, int length);
+
+/**
+ * @brief Converts from FORMAT_FLOAT64 to FORMAT_FLOAT32.
+ * @param target The target buffer.
+ * @param source The source buffer.
+ * @param length The amount of samples to be converted.
+ */
+void AUD_API convert_double_float(data_t* target, data_t* source, int length);
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/respec/ConverterReader.h b/extern/audaspace/include/respec/ConverterReader.h
new file mode 100644
index 00000000000..c5ff6ded9ad
--- /dev/null
+++ b/extern/audaspace/include/respec/ConverterReader.h
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file ConverterReader.h
+ * @ingroup respec
+ * The ConverterReader class.
+ */
+
+#include "fx/EffectReader.h"
+#include "respec/ConverterFunctions.h"
+#include "util/Buffer.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This class converts a sound source from one to another format.
+ */
+class AUD_API ConverterReader : public EffectReader
+{
+private:
+ /**
+ * The sound output buffer.
+ */
+ Buffer m_buffer;
+
+ /**
+ * The target specification.
+ */
+ SampleFormat m_format;
+
+ /**
+ * Converter function.
+ */
+ convert_f m_convert;
+
+ // delete copy constructor and operator=
+ ConverterReader(const ConverterReader&) = delete;
+ ConverterReader& operator=(const ConverterReader&) = delete;
+
+public:
+ /**
+ * Creates a converter reader.
+ * \param reader The reader to convert.
+ * \param specs The target specification.
+ */
+ ConverterReader(std::shared_ptr<IReader> reader, DeviceSpecs specs);
+
+ virtual void read(int& length, bool& eos, sample_t* buffer);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/respec/JOSResample.h b/extern/audaspace/include/respec/JOSResample.h
new file mode 100644
index 00000000000..b1f4d757c3c
--- /dev/null
+++ b/extern/audaspace/include/respec/JOSResample.h
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file JOSResample.h
+ * @ingroup respec
+ * The JOSResample class.
+ */
+
+#include "respec/SpecsChanger.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This sound creates a resampling reader that does Julius O. Smith's resampling algorithm.
+ */
+class AUD_API JOSResample : public SpecsChanger
+{
+private:
+ // delete copy constructor and operator=
+ JOSResample(const JOSResample&) = delete;
+ JOSResample& operator=(const JOSResample&) = delete;
+
+public:
+ /**
+ * Creates a new sound.
+ * \param sound The input sound.
+ * \param specs The target specifications.
+ */
+ JOSResample(std::shared_ptr<ISound> sound, DeviceSpecs specs);
+
+ virtual std::shared_ptr<IReader> createReader();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/respec/JOSResampleReader.h b/extern/audaspace/include/respec/JOSResampleReader.h
new file mode 100644
index 00000000000..e9dd3b4220b
--- /dev/null
+++ b/extern/audaspace/include/respec/JOSResampleReader.h
@@ -0,0 +1,129 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file JOSResampleReader.h
+ * @ingroup respec
+ * The JOSResampleReader class.
+ */
+
+#include "respec/ResampleReader.h"
+#include "util/Buffer.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This resampling reader uses Julius O. Smith's resampling algorithm.
+ */
+class AUD_API JOSResampleReader : public ResampleReader
+{
+private:
+ typedef void (JOSResampleReader::*resample_f)(double target_factor, int length, sample_t* buffer);
+
+ /**
+ * The half filter length.
+ */
+ static const int m_len;
+
+ /**
+ * The sample step size for the filter.
+ */
+ static const int m_L;
+
+ /**
+ * The filter coefficients.
+ */
+ static const float m_coeff[];
+
+ /**
+ * The reader channels.
+ */
+ Channels m_channels;
+
+ /**
+ * The sample position in the cache.
+ */
+ unsigned int m_n;
+
+ /**
+ * The subsample position in the cache.
+ */
+ double m_P;
+
+ /**
+ * The input data buffer.
+ */
+ Buffer m_buffer;
+
+ /**
+ * Double buffer for the sums.
+ */
+ Buffer m_sums;
+
+ /**
+ * How many samples in the cache are valid.
+ */
+ int m_cache_valid;
+
+ /**
+ * Resample function.
+ */
+ resample_f m_resample;
+
+ /**
+ * Last resampling factor.
+ */
+ double m_last_factor;
+
+ // delete copy constructor and operator=
+ JOSResampleReader(const JOSResampleReader&) = delete;
+ JOSResampleReader& operator=(const JOSResampleReader&) = delete;
+
+ /**
+ * Resets the resampler to its initial state.
+ */
+ void AUD_LOCAL reset();
+
+ /**
+ * Updates the buffer to be as small as possible for the coming reading.
+ * \param size The size of samples to be read.
+ * \param factor The next resampling factor.
+ * \param samplesize The size of a sample.
+ */
+ void AUD_LOCAL updateBuffer(int size, double factor, int samplesize);
+
+ void AUD_LOCAL resample(double target_factor, int length, sample_t* buffer);
+ void AUD_LOCAL resample_mono(double target_factor, int length, sample_t* buffer);
+ void AUD_LOCAL resample_stereo(double target_factor, int length, sample_t* buffer);
+
+public:
+ /**
+ * Creates a resampling reader.
+ * \param reader The reader to mix.
+ * \param rate The target sampling rate.
+ */
+ JOSResampleReader(std::shared_ptr<IReader> reader, SampleRate rate);
+
+ virtual void seek(int position);
+ virtual int getLength() const;
+ virtual int getPosition() const;
+ virtual Specs getSpecs() const;
+ virtual void read(int& length, bool& eos, sample_t* buffer);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/respec/LinearResample.h b/extern/audaspace/include/respec/LinearResample.h
new file mode 100644
index 00000000000..207cf2a6548
--- /dev/null
+++ b/extern/audaspace/include/respec/LinearResample.h
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file LinearResample.h
+ * @ingroup respec
+ * The LinearResample class.
+ */
+
+#include "respec/SpecsChanger.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This sound creates a resampling reader that does simple linear resampling.
+ */
+class AUD_API LinearResample : public SpecsChanger
+{
+private:
+ // delete copy constructor and operator=
+ LinearResample(const LinearResample&) = delete;
+ LinearResample& operator=(const LinearResample&) = delete;
+
+public:
+ /**
+ * Creates a new sound.
+ * \param sound The input sound.
+ * \param specs The target specifications.
+ */
+ LinearResample(std::shared_ptr<ISound> sound, DeviceSpecs specs);
+
+ virtual std::shared_ptr<IReader> createReader();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/respec/LinearResampleReader.h b/extern/audaspace/include/respec/LinearResampleReader.h
new file mode 100644
index 00000000000..aaf95672e55
--- /dev/null
+++ b/extern/audaspace/include/respec/LinearResampleReader.h
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file LinearResampleReader.h
+ * @ingroup respec
+ * The LinearResampleReader class.
+ */
+
+#include "respec/ResampleReader.h"
+#include "util/Buffer.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This resampling reader does simple first-order hold resampling.
+ */
+class AUD_API LinearResampleReader : public ResampleReader
+{
+private:
+ /**
+ * The reader channels.
+ */
+ Channels m_channels;
+
+ /**
+ * The position in the cache.
+ */
+ float m_cache_pos;
+
+ /**
+ * The sound output buffer.
+ */
+ Buffer m_buffer;
+
+ /**
+ * The input caching buffer.
+ */
+ Buffer m_cache;
+
+ /**
+ * Whether the cache contains valid data.
+ */
+ bool m_cache_ok;
+
+ // delete copy constructor and operator=
+ LinearResampleReader(const LinearResampleReader&) = delete;
+ LinearResampleReader& operator=(const LinearResampleReader&) = delete;
+
+public:
+ /**
+ * Creates a resampling reader.
+ * \param reader The reader to mix.
+ * \param rate The target sampling rate.
+ */
+ LinearResampleReader(std::shared_ptr<IReader> reader, SampleRate rate);
+
+ virtual void seek(int position);
+ virtual int getLength() const;
+ virtual int getPosition() const;
+ virtual Specs getSpecs() const;
+ virtual void read(int& length, bool& eos, sample_t* buffer);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/respec/Mixer.h b/extern/audaspace/include/respec/Mixer.h
new file mode 100644
index 00000000000..600467826cd
--- /dev/null
+++ b/extern/audaspace/include/respec/Mixer.h
@@ -0,0 +1,123 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file Mixer.h
+ * @ingroup respec
+ * The Mixer class.
+ */
+
+#include "respec/Specification.h"
+#include "respec/ConverterFunctions.h"
+#include "util/Buffer.h"
+
+#include <memory>
+
+AUD_NAMESPACE_BEGIN
+
+class IReader;
+
+/**
+ * This abstract class is able to mix audiosignals with same channel count
+ * and sample rate and convert it to a specific output format.
+ */
+class AUD_API Mixer
+{
+private:
+ // delete copy constructor and operator=
+ Mixer(const Mixer&) = delete;
+ Mixer& operator=(const Mixer&) = delete;
+
+protected:
+ /**
+ * The output specification.
+ */
+ DeviceSpecs m_specs;
+
+ /**
+ * The length of the mixing buffer.
+ */
+ int m_length;
+
+ /**
+ * The mixing buffer.
+ */
+ Buffer m_buffer;
+
+ /**
+ * Converter function.
+ */
+ convert_f m_convert;
+
+public:
+ /**
+ * Creates the mixer.
+ */
+ Mixer(DeviceSpecs specs);
+
+ /**
+ * Destroys the mixer.
+ */
+ virtual ~Mixer() {}
+
+ /**
+ * Returns the target specification for superposing.
+ * \return The target specification.
+ */
+ DeviceSpecs getSpecs() const;
+
+ /**
+ * Sets the target specification for superposing.
+ * \param specs The target specification.
+ */
+ void setSpecs(Specs specs);
+
+ /**
+ * Mixes a buffer.
+ * \param buffer The buffer to superpose.
+ * \param start The start sample of the buffer.
+ * \param length The length of the buffer in samples.
+ * \param volume The mixing volume. Must be a value between 0.0 and 1.0.
+ */
+ void mix(sample_t* buffer, int start, int length, float volume);
+
+ /**
+ * Mixes a buffer with linear volume interpolation.
+ * \param buffer The buffer to superpose.
+ * \param start The start sample of the buffer.
+ * \param length The length of the buffer in samples.
+ * \param volume_to The target mixing volume. Must be a value between 0.0 and 1.0.
+ * \param volume_from The start mixing volume. Must be a value between 0.0 and 1.0.
+ */
+ void mix(sample_t* buffer, int start, int length, float volume_to, float volume_from);
+
+ /**
+ * Writes the mixing buffer into an output buffer.
+ * \param buffer The target buffer for superposing.
+ * \param volume The mixing volume. Must be a value between 0.0 and 1.0.
+ */
+ void read(data_t* buffer, float volume);
+
+ /**
+ * Clears the mixing buffer.
+ * \param length The length of the buffer in samples.
+ */
+ void clear(int length);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/respec/ResampleReader.h b/extern/audaspace/include/respec/ResampleReader.h
new file mode 100644
index 00000000000..b38a8d5eb18
--- /dev/null
+++ b/extern/audaspace/include/respec/ResampleReader.h
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file ResampleReader.h
+ * @ingroup respec
+ * The ResampleReader class.
+ */
+
+#include "fx/EffectReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This is the base class for all resampling readers.
+ */
+class AUD_API ResampleReader : public EffectReader
+{
+protected:
+ /**
+ * The target sampling rate.
+ */
+ SampleRate m_rate;
+
+ /**
+ * Creates a resampling reader.
+ * \param reader The reader to mix.
+ * \param rate The target sampling rate.
+ */
+ ResampleReader(std::shared_ptr<IReader> reader, SampleRate rate);
+
+public:
+ /**
+ * Sets the sample rate.
+ * \param rate The target sampling rate.
+ */
+ virtual void setRate(SampleRate rate);
+
+ /**
+ * Retrieves the sample rate.
+ * \return The target sampling rate.
+ */
+ virtual SampleRate getRate();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/respec/Specification.h b/extern/audaspace/include/respec/Specification.h
new file mode 100644
index 00000000000..efcbb4cabce
--- /dev/null
+++ b/extern/audaspace/include/respec/Specification.h
@@ -0,0 +1,138 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file Specification.h
+ * @ingroup respec
+ * Defines all important macros and basic data structures for stream format descriptions.
+ */
+
+#include "Audaspace.h"
+
+/// The size of a format in bytes.
+#define AUD_FORMAT_SIZE(format) (format & 0x0F)
+/// The size of a sample in the specified device format in bytes.
+#define AUD_DEVICE_SAMPLE_SIZE(specs) (specs.channels * (specs.format & 0x0F))
+/// The size of a sample in the specified format in bytes.
+#define AUD_SAMPLE_SIZE(specs) (specs.channels * sizeof(sample_t))
+
+/// Compares two audio data specifications.
+#define AUD_COMPARE_SPECS(s1, s2) ((s1.rate == s2.rate) && (s1.channels == s2.channels))
+
+/// Returns the bit for a channel mask.
+#define AUD_CHANNEL_BIT(channel) (0x01 << channel)
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * The format of a sample.
+ * The last 4 bit save the byte count of the format.
+ */
+enum SampleFormat
+{
+ FORMAT_INVALID = 0x00, /// Invalid sample format.
+ FORMAT_U8 = 0x01, /// 1 byte unsigned byte.
+ FORMAT_S16 = 0x12, /// 2 byte signed integer.
+ FORMAT_S24 = 0x13, /// 3 byte signed integer.
+ FORMAT_S32 = 0x14, /// 4 byte signed integer.
+ FORMAT_FLOAT32 = 0x24, /// 4 byte float.
+ FORMAT_FLOAT64 = 0x28 /// 8 byte float.
+};
+
+/// The channel count.
+enum Channels
+{
+ CHANNELS_INVALID = 0, /// Invalid channel count.
+ CHANNELS_MONO = 1, /// Mono.
+ CHANNELS_STEREO = 2, /// Stereo.
+ CHANNELS_STEREO_LFE = 3, /// Stereo with LFE channel.
+ CHANNELS_SURROUND4 = 4, /// 4 channel surround sound.
+ CHANNELS_SURROUND5 = 5, /// 5 channel surround sound.
+ CHANNELS_SURROUND51 = 6, /// 5.1 surround sound.
+ CHANNELS_SURROUND61 = 7, /// 6.1 surround sound.
+ CHANNELS_SURROUND71 = 8 /// 7.1 surround sound.
+};
+
+/// The channel names.
+enum Channel
+{
+ CHANNEL_FRONT_LEFT = 0,
+ CHANNEL_FRONT_RIGHT,
+ CHANNEL_FRONT_CENTER,
+ CHANNEL_LFE,
+ CHANNEL_REAR_LEFT,
+ CHANNEL_REAR_RIGHT,
+ CHANNEL_REAR_CENTER,
+ CHANNEL_SIDE_LEFT,
+ CHANNEL_SIDE_RIGHT,
+ CHANNEL_MAX
+};
+
+/**
+ * The sample rate tells how many samples are played back within one second.
+ * Some exotic formats may use other sample rates than provided here.
+ */
+enum DefaultSampleRate
+{
+ RATE_INVALID = 0, /// Invalid sample rate.
+ RATE_8000 = 8000, /// 8000 Hz.
+ RATE_16000 = 16000, /// 16000 Hz.
+ RATE_11025 = 11025, /// 11025 Hz.
+ RATE_22050 = 22050, /// 22050 Hz.
+ RATE_32000 = 32000, /// 32000 Hz.
+ RATE_44100 = 44100, /// 44100 Hz.
+ RATE_48000 = 48000, /// 48000 Hz.
+ RATE_88200 = 88200, /// 88200 Hz.
+ RATE_96000 = 96000, /// 96000 Hz.
+ RATE_192000 = 192000 /// 192000 Hz.
+};
+
+/// Sample rate type.
+typedef double SampleRate;
+
+/// Specification of a sound source.
+struct Specs
+{
+ /// Sample rate in Hz.
+ SampleRate rate;
+
+ /// Channel count.
+ Channels channels;
+};
+
+/// Specification of a sound device.
+struct DeviceSpecs
+{
+ /// Sample format.
+ SampleFormat format;
+
+ union
+ {
+ struct
+ {
+ /// Sample rate in Hz.
+ SampleRate rate;
+
+ /// Channel count.
+ Channels channels;
+ };
+ Specs specs;
+ };
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/respec/SpecsChanger.h b/extern/audaspace/include/respec/SpecsChanger.h
new file mode 100644
index 00000000000..2eb9f369497
--- /dev/null
+++ b/extern/audaspace/include/respec/SpecsChanger.h
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file SpecsChanger.h
+ * @ingroup respec
+ * The SpecsChanger class.
+ */
+
+#include "ISound.h"
+#include "respec/Specification.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This sound is a base class for all mixer factories.
+ */
+class AUD_API SpecsChanger : public ISound
+{
+protected:
+ /**
+ * The target specification for resampling.
+ */
+ const DeviceSpecs m_specs;
+
+ /**
+ * If there is no reader it is created out of this sound.
+ */
+ std::shared_ptr<ISound> m_sound;
+
+ /**
+ * Returns the reader created out of the sound.
+ * This method can be used for the createReader function of the implementing
+ * classes.
+ * \return The reader to mix.
+ */
+ std::shared_ptr<IReader> getReader() const;
+
+public:
+ /**
+ * Creates a new sound.
+ * \param sound The sound to create the readers to mix out of.
+ * \param specs The target specification.
+ */
+ SpecsChanger(std::shared_ptr<ISound> sound, DeviceSpecs specs);
+
+ /**
+ * Returns the target specification for resampling.
+ */
+ DeviceSpecs getSpecs() const;
+
+ /**
+ * Returns the saved sound.
+ * \return The sound.
+ */
+ std::shared_ptr<ISound> getSound() const;
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/sequence/AnimateableProperty.h b/extern/audaspace/include/sequence/AnimateableProperty.h
new file mode 100644
index 00000000000..2c3fcf23f8b
--- /dev/null
+++ b/extern/audaspace/include/sequence/AnimateableProperty.h
@@ -0,0 +1,129 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file AnimateableProperty.h
+ * @ingroup sequence
+ * Defines the AnimateableProperty class as well as existing property types.
+ */
+
+#include "util/Buffer.h"
+#include "util/ILockable.h"
+
+#include <mutex>
+#include <list>
+
+AUD_NAMESPACE_BEGIN
+
+/// Possible animatable properties for Sequencer Factories and Entries.
+enum AnimateablePropertyType
+{
+ AP_VOLUME,
+ AP_PANNING,
+ AP_PITCH,
+ AP_LOCATION,
+ AP_ORIENTATION
+};
+
+/**
+ * This class saves animation data for float properties.
+ */
+class AUD_API AnimateableProperty : private Buffer
+{
+private:
+ struct Unknown {
+ int start;
+ int end;
+
+ Unknown(int start, int end) :
+ start(start), end(end) {}
+ };
+
+ /// The count of floats for a single property.
+ const int m_count;
+
+ /// Whether the property is animated or not.
+ bool m_isAnimated;
+
+ /// The mutex for locking.
+ std::recursive_mutex m_mutex;
+
+ /// The list of unknown buffer areas.
+ std::list<Unknown> m_unknown;
+
+ // delete copy constructor and operator=
+ AnimateableProperty(const AnimateableProperty&) = delete;
+ AnimateableProperty& operator=(const AnimateableProperty&) = delete;
+
+ void AUD_LOCAL updateUnknownCache(int start, int end);
+
+public:
+ /**
+ * Creates a new animateable property.
+ * \param count The count of floats for a single property.
+ */
+ AnimateableProperty(int count = 1);
+
+ /**
+ * Creates a new animateable property.
+ * \param count The count of floats for a single property.
+ * \param value The value that the property should get initialized with.
+ * All count floats will be initialized to the same value.
+ */
+ AnimateableProperty(int count, float value);
+
+ /**
+ * Destroys the animateable property.
+ */
+ ~AnimateableProperty();
+
+ /**
+ * Returns the count of floats for a single property.
+ * \return The count of floats stored per frame.
+ */
+ int getCount() const;
+
+ /**
+ * Writes the properties value and marks it non-animated.
+ * \param data The new value.
+ */
+ void write(const float* data);
+
+ /**
+ * Writes the properties value and marks it animated.
+ * \param data The new value.
+ * \param position The position in the animation in frames.
+ * \param count The count of frames to write.
+ */
+ void write(const float* data, int position, int count);
+
+ /**
+ * Reads the properties value.
+ * \param position The position in the animation in frames.
+ * \param[out] out Where to write the value to.
+ */
+ void read(float position, float* out);
+
+ /**
+ * Returns whether the property is animated.
+ * \return Whether the property is animated.
+ */
+ bool isAnimated() const;
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/sequence/Double.h b/extern/audaspace/include/sequence/Double.h
new file mode 100644
index 00000000000..dc40ae29e0d
--- /dev/null
+++ b/extern/audaspace/include/sequence/Double.h
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file Double.h
+ * @ingroup sequence
+ * The Double class.
+ */
+
+#include "ISound.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This sound plays two other factories behind each other.
+ */
+class AUD_API Double : public ISound
+{
+private:
+ /**
+ * First played sound.
+ */
+ std::shared_ptr<ISound> m_sound1;
+
+ /**
+ * Second played sound.
+ */
+ std::shared_ptr<ISound> m_sound2;
+
+ // delete copy constructor and operator=
+ Double(const Double&) = delete;
+ Double& operator=(const Double&) = delete;
+
+public:
+ /**
+ * Creates a new double sound.
+ * \param sound1 The first input sound.
+ * \param sound2 The second input sound.
+ */
+ Double(std::shared_ptr<ISound> sound1, std::shared_ptr<ISound> sound2);
+
+ virtual std::shared_ptr<IReader> createReader();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/sequence/DoubleReader.h b/extern/audaspace/include/sequence/DoubleReader.h
new file mode 100644
index 00000000000..012dcc8e832
--- /dev/null
+++ b/extern/audaspace/include/sequence/DoubleReader.h
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file DoubleReader.h
+ * @ingroup sequence
+ * The DoubleReader class.
+ */
+
+#include "IReader.h"
+
+#include <memory>
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This reader plays two readers sequently.
+ */
+class AUD_API DoubleReader : public IReader
+{
+private:
+ /**
+ * The first reader.
+ */
+ std::shared_ptr<IReader> m_reader1;
+
+ /**
+ * The second reader.
+ */
+ std::shared_ptr<IReader> m_reader2;
+
+ /**
+ * Whether we've reached the end of the first reader.
+ */
+ bool m_finished1;
+
+ // delete copy constructor and operator=
+ DoubleReader(const DoubleReader&) = delete;
+ DoubleReader& operator=(const DoubleReader&) = delete;
+
+public:
+ /**
+ * Creates a new double reader.
+ * \param reader1 The first reader to read from.
+ * \param reader2 The second reader to read from.
+ */
+ DoubleReader(std::shared_ptr<IReader> reader1, std::shared_ptr<IReader> reader2);
+
+ /**
+ * Destroys the reader.
+ */
+ virtual ~DoubleReader();
+
+ virtual bool isSeekable() const;
+ virtual void seek(int position);
+ virtual int getLength() const;
+ virtual int getPosition() const;
+ virtual Specs getSpecs() const;
+ virtual void read(int& length, bool& eos, sample_t* buffer);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/sequence/PingPong.h b/extern/audaspace/include/sequence/PingPong.h
new file mode 100644
index 00000000000..8b1bf792095
--- /dev/null
+++ b/extern/audaspace/include/sequence/PingPong.h
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file PingPong.h
+ * @ingroup sequence
+ * The PingPong class.
+ */
+
+#include "fx/Effect.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This sound plays another sound first normal, then reversed.
+ * \note Readers from the underlying sound must be reversable with seeking.
+ */
+class AUD_API PingPong : public Effect
+{
+private:
+ // delete copy constructor and operator=
+ PingPong(const PingPong&) = delete;
+ PingPong& operator=(const PingPong&) = delete;
+
+public:
+ /**
+ * Creates a new ping pong sound.
+ * \param sound The input sound.
+ */
+ PingPong(std::shared_ptr<ISound> sound);
+
+ virtual std::shared_ptr<IReader> createReader();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/sequence/Sequence.h b/extern/audaspace/include/sequence/Sequence.h
new file mode 100644
index 00000000000..7005171e2c8
--- /dev/null
+++ b/extern/audaspace/include/sequence/Sequence.h
@@ -0,0 +1,171 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file Sequence.h
+ * @ingroup sequence
+ * The Sequence class.
+ */
+
+#include "ISound.h"
+#include "respec/Specification.h"
+#include "devices/I3DDevice.h"
+#include "sequence/AnimateableProperty.h"
+
+#include <list>
+
+AUD_NAMESPACE_BEGIN
+
+class SequenceEntry;
+class SequenceData;
+
+/**
+ * This sound represents sequenced entries to play a sound scene.
+ */
+class AUD_API Sequence : public ISound
+{
+ friend class SequenceReader;
+private:
+ /// The sequence.
+ std::shared_ptr<SequenceData> m_sequence;
+
+ // delete copy constructor and operator=
+ Sequence(const Sequence&) = delete;
+ Sequence& operator=(const Sequence&) = delete;
+
+public:
+ /**
+ * Creates a new sound scene.
+ * \param specs The output audio data specification.
+ * \param fps The FPS of the scene.
+ * \param muted Whether the whole scene is muted.
+ */
+ Sequence(Specs specs, float fps, bool muted);
+
+ /**
+ * Retrieves the audio output specification.
+ * \return The specification.
+ */
+ Specs getSpecs();
+
+ /**
+ * Sets the audio output specification.
+ * \param specs The new specification.
+ */
+ void setSpecs(Specs specs);
+
+ /**
+ * Retrieves the scene's FPS.
+ * \return The scene's FPS.
+ */
+ float getFPS() const;
+
+ /**
+ * Sets the scene's FPS.
+ * \param fps The new FPS.
+ */
+ void setFPS(float fps);
+
+ /**
+ * Sets the muting state of the scene.
+ * \param muted Whether the scene is muted.
+ */
+ void mute(bool muted);
+
+ /**
+ * Retrieves the muting state of the scene.
+ * \return Whether the scene is muted.
+ */
+ bool isMuted() const;
+
+ /**
+ * Retrieves the speed of sound.
+ * This value is needed for doppler effect calculation.
+ * \return The speed of sound.
+ */
+ float getSpeedOfSound() const;
+
+ /**
+ * Sets the speed of sound.
+ * This value is needed for doppler effect calculation.
+ * \param speed The new speed of sound.
+ */
+ void setSpeedOfSound(float speed);
+
+ /**
+ * Retrieves the doppler factor.
+ * This value is a scaling factor for the velocity vectors of sources and
+ * listener which is used while calculating the doppler effect.
+ * \return The doppler factor.
+ */
+ float getDopplerFactor() const;
+
+ /**
+ * Sets the doppler factor.
+ * This value is a scaling factor for the velocity vectors of sources and
+ * listener which is used while calculating the doppler effect.
+ * \param factor The new doppler factor.
+ */
+ void setDopplerFactor(float factor);
+
+ /**
+ * Retrieves the distance model.
+ * \return The distance model.
+ */
+ DistanceModel getDistanceModel() const;
+
+ /**
+ * Sets the distance model.
+ * \param model distance model.
+ */
+ void setDistanceModel(DistanceModel model);
+
+ /**
+ * Retrieves one of the animated properties of the sound.
+ * \param type Which animated property to retrieve.
+ * \return A pointer to the animated property, valid as long as the
+ * sound is.
+ */
+ AnimateableProperty* getAnimProperty(AnimateablePropertyType type);
+
+ /**
+ * Adds a new entry to the scene.
+ * \param sound The sound this entry should play.
+ * \param begin The start time.
+ * \param end The end time or a negative value if determined by the sound.
+ * \param skip How much seconds should be skipped at the beginning.
+ * \return The entry added.
+ */
+ std::shared_ptr<SequenceEntry> add(std::shared_ptr<ISound> sound, float begin, float end, float skip);
+
+ /**
+ * Removes an entry from the scene.
+ * \param entry The entry to remove.
+ */
+ void remove(std::shared_ptr<SequenceEntry> entry);
+
+ /**
+ * Creates a new reader with high quality resampling.
+ * \return The new reader.
+ */
+ std::shared_ptr<IReader> createQualityReader();
+
+ virtual std::shared_ptr<IReader> createReader();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/sequence/SequenceData.h b/extern/audaspace/include/sequence/SequenceData.h
new file mode 100644
index 00000000000..b3df0548a4d
--- /dev/null
+++ b/extern/audaspace/include/sequence/SequenceData.h
@@ -0,0 +1,215 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file SequenceData.h
+ * @ingroup sequence
+ * The SequenceData class.
+ */
+
+#include "respec/Specification.h"
+#include "sequence/AnimateableProperty.h"
+#include "devices/I3DDevice.h"
+#include "util/ILockable.h"
+
+#include <list>
+#include <memory>
+#include <mutex>
+
+AUD_NAMESPACE_BEGIN
+
+class SequenceEntry;
+class ISound;
+
+/**
+ * This class represents sequenced entries to play a sound scene.
+ */
+class AUD_API SequenceData : public ILockable
+{
+ friend class SequenceReader;
+private:
+ /// The target specification.
+ Specs m_specs;
+
+ /// The status of the sequence. Changes every time a non-animated parameter changes.
+ int m_status;
+
+ /// The entry status. Changes every time an entry is removed or added.
+ int m_entry_status;
+
+ /// The next unused ID for the entries.
+ int m_id;
+
+ /// The sequenced entries.
+ std::list<std::shared_ptr<SequenceEntry> > m_entries;
+
+ /// Whether the whole scene is muted.
+ bool m_muted;
+
+ /// The FPS of the scene.
+ float m_fps;
+
+ /// Speed of Sound.
+ float m_speed_of_sound;
+
+ /// Doppler factor.
+ float m_doppler_factor;
+
+ /// Distance model.
+ DistanceModel m_distance_model;
+
+ /// The animated volume.
+ AnimateableProperty m_volume;
+
+ /// The animated listener location.
+ AnimateableProperty m_location;
+
+ /// The animated listener orientation.
+ AnimateableProperty m_orientation;
+
+ /// The mutex for locking.
+ std::recursive_mutex m_mutex;
+
+ // delete copy constructor and operator=
+ SequenceData(const SequenceData&) = delete;
+ SequenceData& operator=(const SequenceData&) = delete;
+
+public:
+ /**
+ * Creates a new sound scene.
+ * \param specs The output audio data specification.
+ * \param fps The FPS of the scene.
+ * \param muted Whether the whole scene is muted.
+ */
+ SequenceData(Specs specs, float fps, bool muted);
+ virtual ~SequenceData();
+
+ /**
+ * Locks the sequence.
+ */
+ virtual void lock();
+
+ /**
+ * Unlocks the previously locked sequence.
+ */
+ virtual void unlock();
+
+ /**
+ * Retrieves the audio output specification.
+ * \return The specification.
+ */
+ Specs getSpecs();
+
+ /**
+ * Sets the audio output specification.
+ * \param specs The new specification.
+ */
+ void setSpecs(Specs specs);
+
+ /**
+ * Retrieves the scene's FPS.
+ * \return The scene's FPS.
+ */
+ float getFPS() const;
+
+ /**
+ * Sets the scene's FPS.
+ * \param fps The new FPS.
+ */
+ void setFPS(float fps);
+
+ /**
+ * Sets the muting state of the scene.
+ * \param muted Whether the scene is muted.
+ */
+ void mute(bool muted);
+
+ /**
+ * Retrieves the muting state of the scene.
+ * \return Whether the scene is muted.
+ */
+ bool isMuted() const;
+
+ /**
+ * Retrieves the speed of sound.
+ * This value is needed for doppler effect calculation.
+ * \return The speed of sound.
+ */
+ float getSpeedOfSound() const;
+
+ /**
+ * Sets the speed of sound.
+ * This value is needed for doppler effect calculation.
+ * \param speed The new speed of sound.
+ */
+ void setSpeedOfSound(float speed);
+
+ /**
+ * Retrieves the doppler factor.
+ * This value is a scaling factor for the velocity vectors of sources and
+ * listener which is used while calculating the doppler effect.
+ * \return The doppler factor.
+ */
+ float getDopplerFactor() const;
+
+ /**
+ * Sets the doppler factor.
+ * This value is a scaling factor for the velocity vectors of sources and
+ * listener which is used while calculating the doppler effect.
+ * \param factor The new doppler factor.
+ */
+ void setDopplerFactor(float factor);
+
+ /**
+ * Retrieves the distance model.
+ * \return The distance model.
+ */
+ DistanceModel getDistanceModel() const;
+
+ /**
+ * Sets the distance model.
+ * \param model distance model.
+ */
+ void setDistanceModel(DistanceModel model);
+
+ /**
+ * Retrieves one of the animated properties of the sequence.
+ * \param type Which animated property to retrieve.
+ * \return A pointer to the animated property, valid as long as the
+ * sequence is.
+ */
+ AnimateableProperty* getAnimProperty(AnimateablePropertyType type);
+
+ /**
+ * Adds a new entry to the scene.
+ * \param sound The sound this entry should play.
+ * \param begin The start time.
+ * \param end The end time or a negative value if determined by the sound.
+ * \param skip How much seconds should be skipped at the beginning.
+ * \return The entry added.
+ */
+ std::shared_ptr<SequenceEntry> add(std::shared_ptr<ISound> sound, float begin, float end, float skip);
+
+ /**
+ * Removes an entry from the scene.
+ * \param entry The entry to remove.
+ */
+ void remove(std::shared_ptr<SequenceEntry> entry);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/sequence/SequenceEntry.h b/extern/audaspace/include/sequence/SequenceEntry.h
new file mode 100644
index 00000000000..98f15faf7ff
--- /dev/null
+++ b/extern/audaspace/include/sequence/SequenceEntry.h
@@ -0,0 +1,315 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file SequenceEntry.h
+ * @ingroup sequence
+ * The SequenceEntry class.
+ */
+
+#include "sequence/AnimateableProperty.h"
+#include "util/ILockable.h"
+
+#include <mutex>
+#include <memory>
+
+AUD_NAMESPACE_BEGIN
+
+class ISound;
+
+/**
+ * This class represents a sequenced entry in a sequencer sound.
+ */
+class AUD_API SequenceEntry : public ILockable
+{
+ friend class SequenceHandle;
+private:
+ /// The status of the entry. Changes every time a non-animated parameter changes.
+ int m_status;
+
+ /// The positional status of the entry. Changes every time the entry is moved.
+ int m_pos_status;
+
+ /// The sound status, changed when the sound is changed.
+ int m_sound_status;
+
+ /// The unique (regarding the sound) ID of the entry.
+ int m_id;
+
+ /// The sound this entry plays.
+ std::shared_ptr<ISound> m_sound;
+
+ /// The begin time.
+ float m_begin;
+
+ /// The end time.
+ float m_end;
+
+ /// How many seconds are skipped at the beginning.
+ float m_skip;
+
+ /// Whether the entry is muted.
+ bool m_muted;
+
+ /// Whether the position to the listener is relative or absolute
+ bool m_relative;
+
+ /// Maximum volume.
+ float m_volume_max;
+
+ /// Minimum volume.
+ float m_volume_min;
+
+ /// Maximum distance.
+ float m_distance_max;
+
+ /// Reference distance;
+ float m_distance_reference;
+
+ /// Attenuation
+ float m_attenuation;
+
+ /// Cone outer angle.
+ float m_cone_angle_outer;
+
+ /// Cone inner angle.
+ float m_cone_angle_inner;
+
+ /// Cone outer volume.
+ float m_cone_volume_outer;
+
+ /// The mutex for locking.
+ std::recursive_mutex m_mutex;
+
+ /// The animated volume.
+ AnimateableProperty m_volume;
+
+ /// The animated panning.
+ AnimateableProperty m_panning;
+
+ /// The animated pitch.
+ AnimateableProperty m_pitch;
+
+ /// The animated location.
+ AnimateableProperty m_location;
+
+ /// The animated orientation.
+ AnimateableProperty m_orientation;
+
+ // delete copy constructor and operator=
+ SequenceEntry(const SequenceEntry&) = delete;
+ SequenceEntry& operator=(const SequenceEntry&) = delete;
+
+public:
+ /**
+ * Creates a new sequenced entry.
+ * \param sound The sound this entry should play.
+ * \param begin The start time.
+ * \param end The end time or a negative value if determined by the sound.
+ * \param skip How much seconds should be skipped at the beginning.
+ * \param id The ID of the entry.
+ */
+ SequenceEntry(std::shared_ptr<ISound> sound, float begin, float end, float skip, int id);
+ virtual ~SequenceEntry();
+
+ /**
+ * Locks the entry.
+ */
+ virtual void lock();
+
+ /**
+ * Unlocks the previously locked entry.
+ */
+ virtual void unlock();
+
+ /**
+ * Retrieves the sound of the entry.
+ * \return The sound.
+ */
+ std::shared_ptr<ISound> getSound();
+
+ /**
+ * Sets the sound of the entry.
+ * \param sound The new sound.
+ */
+ void setSound(std::shared_ptr<ISound> sound);
+
+ /**
+ * Moves the entry.
+ * \param begin The new start time.
+ * \param end The new end time or a negative value if unknown.
+ * \param skip How many seconds to skip at the beginning.
+ */
+ void move(float begin, float end, float skip);
+
+ /**
+ * Retrieves the muting state of the entry.
+ * \return Whether the entry should is muted or not.
+ */
+ bool isMuted();
+
+ /**
+ * Sets the muting state of the entry.
+ * \param mute Whether the entry should be muted or not.
+ */
+ void mute(bool mute);
+
+ /**
+ * Retrieves the ID of the entry.
+ * \return The ID of the entry.
+ */
+ int getID() const;
+
+ /**
+ * Retrieves one of the animated properties of the entry.
+ * \param type Which animated property to retrieve.
+ * \return A pointer to the animated property, valid as long as the
+ * entry is.
+ */
+ AnimateableProperty* getAnimProperty(AnimateablePropertyType type);
+
+ /**
+ * Checks whether the source location, velocity and orientation are relative
+ * to the listener.
+ * \return Whether the source is relative.
+ */
+ bool isRelative();
+
+ /**
+ * Sets whether the source location, velocity and orientation are relative
+ * to the listener.
+ * \param relative Whether the source is relative.
+ * \return Whether the action succeeded.
+ */
+ void setRelative(bool relative);
+
+ /**
+ * Retrieves the maximum volume of a source.
+ * \return The maximum volume.
+ */
+ float getVolumeMaximum();
+
+ /**
+ * Sets the maximum volume of a source.
+ * \param volume The new maximum volume.
+ * \return Whether the action succeeded.
+ */
+ void setVolumeMaximum(float volume);
+
+ /**
+ * Retrieves the minimum volume of a source.
+ * \return The minimum volume.
+ */
+ float getVolumeMinimum();
+
+ /**
+ * Sets the minimum volume of a source.
+ * \param volume The new minimum volume.
+ * \return Whether the action succeeded.
+ */
+ void setVolumeMinimum(float volume);
+
+ /**
+ * Retrieves the maximum distance of a source.
+ * If a source is further away from the reader than this distance, the
+ * volume will automatically be set to 0.
+ * \return The maximum distance.
+ */
+ float getDistanceMaximum();
+
+ /**
+ * Sets the maximum distance of a source.
+ * If a source is further away from the reader than this distance, the
+ * volume will automatically be set to 0.
+ * \param distance The new maximum distance.
+ * \return Whether the action succeeded.
+ */
+ void setDistanceMaximum(float distance);
+
+ /**
+ * Retrieves the reference distance of a source.
+ * \return The reference distance.
+ */
+ float getDistanceReference();
+
+ /**
+ * Sets the reference distance of a source.
+ * \param distance The new reference distance.
+ * \return Whether the action succeeded.
+ */
+ void setDistanceReference(float distance);
+
+ /**
+ * Retrieves the attenuation of a source.
+ * \return The attenuation.
+ */
+ float getAttenuation();
+
+ /**
+ * Sets the attenuation of a source.
+ * This value is used for distance calculation.
+ * \param factor The new attenuation.
+ * \return Whether the action succeeded.
+ */
+ void setAttenuation(float factor);
+
+ /**
+ * Retrieves the outer angle of the cone of a source.
+ * \return The outer angle of the cone.
+ */
+ float getConeAngleOuter();
+
+ /**
+ * Sets the outer angle of the cone of a source.
+ * \param angle The new outer angle of the cone.
+ * \return Whether the action succeeded.
+ */
+ void setConeAngleOuter(float angle);
+
+ /**
+ * Retrieves the inner angle of the cone of a source.
+ * \return The inner angle of the cone.
+ */
+ float getConeAngleInner();
+
+ /**
+ * Sets the inner angle of the cone of a source.
+ * \param angle The new inner angle of the cone.
+ * \return Whether the action succeeded.
+ */
+ void setConeAngleInner(float angle);
+
+ /**
+ * Retrieves the outer volume of the cone of a source.
+ * The volume between inner and outer angle is interpolated between inner
+ * volume and this value.
+ * \return The outer volume of the cone.
+ */
+ float getConeVolumeOuter();
+
+ /**
+ * Sets the outer volume of the cone of a source.
+ * The volume between inner and outer angle is interpolated between inner
+ * volume and this value.
+ * \param volume The new outer volume of the cone.
+ * \return Whether the action succeeded.
+ */
+ void setConeVolumeOuter(float volume);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/sequence/SequenceReader.h b/extern/audaspace/include/sequence/SequenceReader.h
new file mode 100644
index 00000000000..196d969e102
--- /dev/null
+++ b/extern/audaspace/include/sequence/SequenceReader.h
@@ -0,0 +1,94 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file SequenceReader.h
+ * @ingroup sequence
+ * The SequenceReader class.
+ */
+
+#include "IReader.h"
+#include "devices/ReadDevice.h"
+
+AUD_NAMESPACE_BEGIN
+
+class SequenceHandle;
+class SequenceData;
+
+/**
+ * This reader plays back sequenced entries.
+ */
+class AUD_API SequenceReader : public IReader
+{
+private:
+ /**
+ * The current position.
+ */
+ int m_position;
+
+ /**
+ * The read device used to mix the sounds correctly.
+ */
+ ReadDevice m_device;
+
+ /**
+ * Saves the sequence the reader belongs to.
+ */
+ std::shared_ptr<SequenceData> m_sequence;
+
+ /**
+ * The list of playback handles for the entries.
+ */
+ std::list<std::shared_ptr<SequenceHandle> > m_handles;
+
+ /**
+ * Last status read from the sequence.
+ */
+ int m_status;
+
+ /**
+ * Last entry status read from the sequence.
+ */
+ int m_entry_status;
+
+ // delete copy constructor and operator=
+ SequenceReader(const SequenceReader&) = delete;
+ SequenceReader& operator=(const SequenceReader&) = delete;
+
+public:
+ /**
+ * Creates a resampling reader.
+ * \param sequence The sequence data.
+ * \param quality Whether a high quality resample should be used for resampling.
+ */
+ SequenceReader(std::shared_ptr<SequenceData> sequence, bool quality = false);
+
+ /**
+ * Destroys the reader.
+ */
+ ~SequenceReader();
+
+ virtual bool isSeekable() const;
+ virtual void seek(int position);
+ virtual int getLength() const;
+ virtual int getPosition() const;
+ virtual Specs getSpecs() const;
+ virtual void read(int& length, bool& eos, sample_t* buffer);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/sequence/Superpose.h b/extern/audaspace/include/sequence/Superpose.h
new file mode 100644
index 00000000000..2a3a6166b3b
--- /dev/null
+++ b/extern/audaspace/include/sequence/Superpose.h
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file Superpose.h
+ * @ingroup sequence
+ * The Superpose class.
+ */
+
+#include "ISound.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This sound mixes two other factories, playing them the same time.
+ * \note Readers from the underlying factories must have the same sample rate
+ * and channel count.
+ */
+class AUD_API Superpose : public ISound
+{
+private:
+ /**
+ * First played sound.
+ */
+ std::shared_ptr<ISound> m_sound1;
+
+ /**
+ * Second played sound.
+ */
+ std::shared_ptr<ISound> m_sound2;
+
+ // delete copy constructor and operator=
+ Superpose(const Superpose&) = delete;
+ Superpose& operator=(const Superpose&) = delete;
+
+public:
+ /**
+ * Creates a new superpose sound.
+ * \param sound1 The first input sound.
+ * \param sound2 The second input sound.
+ */
+ Superpose(std::shared_ptr<ISound> sound1, std::shared_ptr<ISound> sound2);
+
+ virtual std::shared_ptr<IReader> createReader();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/sequence/SuperposeReader.h b/extern/audaspace/include/sequence/SuperposeReader.h
new file mode 100644
index 00000000000..8bd38ade4c3
--- /dev/null
+++ b/extern/audaspace/include/sequence/SuperposeReader.h
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file SuperposeReader.h
+ * @ingroup sequence
+ * The SuperposeReader class.
+ */
+
+#include "IReader.h"
+#include "util/Buffer.h"
+
+#include <memory>
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This reader plays two readers with the same specs in parallel.
+ */
+class AUD_API SuperposeReader : public IReader
+{
+private:
+ /**
+ * The first reader.
+ */
+ std::shared_ptr<IReader> m_reader1;
+
+ /**
+ * The second reader.
+ */
+ std::shared_ptr<IReader> m_reader2;
+
+ /**
+ * Buffer used for mixing.
+ */
+ Buffer m_buffer;
+
+ // delete copy constructor and operator=
+ SuperposeReader(const SuperposeReader&) = delete;
+ SuperposeReader& operator=(const SuperposeReader&) = delete;
+
+public:
+ /**
+ * Creates a new superpose reader.
+ * \param reader1 The first reader to read from.
+ * \param reader2 The second reader to read from.
+ * \exception Exception Thrown if the specs from the readers differ.
+ */
+ SuperposeReader(std::shared_ptr<IReader> reader1, std::shared_ptr<IReader> reader2);
+
+ /**
+ * Destroys the reader.
+ */
+ virtual ~SuperposeReader();
+
+ virtual bool isSeekable() const;
+ virtual void seek(int position);
+ virtual int getLength() const;
+ virtual int getPosition() const;
+ virtual Specs getSpecs() const;
+ virtual void read(int& length, bool& eos, sample_t* buffer);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/util/Barrier.h b/extern/audaspace/include/util/Barrier.h
new file mode 100644
index 00000000000..d9e8bf07f82
--- /dev/null
+++ b/extern/audaspace/include/util/Barrier.h
@@ -0,0 +1,78 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#pragma once
+
+/**
+* @file Barrier.h
+* @ingroup util
+* The Barrier class.
+*/
+
+#include "Audaspace.h"
+
+#include <mutex>
+#include <condition_variable>
+
+AUD_NAMESPACE_BEGIN
+/**
+* This represents a barrier mechanism for thread sychronization.
+*/
+class Barrier
+{
+private:
+ /**
+ * A mutex needed to use a condition variable.
+ */
+ std::mutex m_mutex;
+
+ /**
+ * Condition varieble used to sync threads.
+ */
+ std::condition_variable m_condition;
+
+ /**
+ * Number of threads that need to reach the barrier for it to lift.
+ */
+ unsigned int m_threshold;
+
+ /**
+ * Conter that count from threshold to 0.
+ */
+ unsigned int m_count;
+
+ /**
+ * Variable used for predicate check in the condition variable wait.
+ */
+ unsigned int m_generation;
+
+ // delete copy constructor and operator=
+ Barrier(const Barrier&) = delete;
+ Barrier& operator=(const Barrier&) = delete;
+public:
+ /**
+ * Creates a new Barrier object.
+ * \param count the number of threads that need to reach the barrier for it to lift.
+ */
+ Barrier(unsigned int count);
+ virtual ~Barrier();
+
+ /**
+ * Makes the caller thread wait until enough threads are stopped by this method.
+ */
+ void wait();
+};
+AUD_NAMESPACE_END \ No newline at end of file
diff --git a/extern/audaspace/include/util/Buffer.h b/extern/audaspace/include/util/Buffer.h
new file mode 100644
index 00000000000..9934e53625e
--- /dev/null
+++ b/extern/audaspace/include/util/Buffer.h
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file Buffer.h
+ * @ingroup util
+ * The Buffer class.
+ */
+
+#include "Audaspace.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This class is a simple buffer in RAM which is 32 Byte aligned and provides
+ * resize functionality.
+ */
+class AUD_API Buffer
+{
+private:
+ /// The size of the buffer in bytes.
+ int m_size;
+
+ /// The pointer to the buffer memory.
+ data_t* m_buffer;
+
+ // delete copy constructor and operator=
+ Buffer(const Buffer&) = delete;
+ Buffer& operator=(const Buffer&) = delete;
+
+public:
+ /**
+ * Creates a new buffer.
+ * \param size The size of the buffer in bytes.
+ */
+ Buffer(int size = 0);
+
+ /**
+ * Destroys the buffer.
+ */
+ ~Buffer();
+
+ /**
+ * Returns the pointer to the buffer in memory.
+ */
+ sample_t* getBuffer() const;
+
+ /**
+ * Returns the size of the buffer in bytes.
+ */
+ int getSize() const;
+
+ /**
+ * Resizes the buffer.
+ * \param size The new size of the buffer, measured in bytes.
+ * \param keep Whether to keep the old data. If the new buffer is smaller,
+ * the data at the end will be lost.
+ */
+ void resize(int size, bool keep = false);
+
+ /**
+ * Makes sure the buffer has a minimum size.
+ * If size is >= current size, nothing will happen.
+ * Otherwise the buffer is resized with keep as parameter.
+ * \param size The new minimum size of the buffer, measured in bytes.
+ * \param keep Whether to keep the old data. If the new buffer is smaller,
+ * the data at the end will be lost.
+ */
+ void assureSize(int size, bool keep = false);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/util/BufferReader.h b/extern/audaspace/include/util/BufferReader.h
new file mode 100644
index 00000000000..b98313726bc
--- /dev/null
+++ b/extern/audaspace/include/util/BufferReader.h
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file BufferReader.h
+ * @ingroup util
+ * The BufferReader class.
+ */
+
+#include "IReader.h"
+
+#include <memory>
+
+AUD_NAMESPACE_BEGIN
+
+class Buffer;
+
+/**
+ * This class represents a simple reader from a buffer that exists in memory.
+ * \warning Notice that the buffer is not multi-threading ready, so changing the
+ * buffer while the reader is reading is potentially dangerous.
+ */
+class AUD_API BufferReader : public IReader
+{
+private:
+ /**
+ * The current position in the buffer.
+ */
+ int m_position;
+
+ /**
+ * The buffer that is read.
+ */
+ std::shared_ptr<Buffer> m_buffer;
+
+ /**
+ * The specification of the sample data in the buffer.
+ */
+ Specs m_specs;
+
+ // delete copy constructor and operator=
+ BufferReader(const BufferReader&) = delete;
+ BufferReader& operator=(const BufferReader&) = delete;
+
+public:
+ /**
+ * Creates a new buffer reader.
+ * \param buffer The buffer to read from.
+ * \param specs The specification of the sample data in the buffer.
+ */
+ BufferReader(std::shared_ptr<Buffer> buffer, Specs specs);
+
+ virtual bool isSeekable() const;
+ virtual void seek(int position);
+ virtual int getLength() const;
+ virtual int getPosition() const;
+ virtual Specs getSpecs() const;
+ virtual void read(int& length, bool& eos, sample_t* buffer);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/util/FFTPlan.h b/extern/audaspace/include/util/FFTPlan.h
new file mode 100644
index 00000000000..7d533ca8773
--- /dev/null
+++ b/extern/audaspace/include/util/FFTPlan.h
@@ -0,0 +1,120 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#pragma once
+
+/**
+* @file FFTPlan.h
+* @ingroup util
+* The FFTPlan class.
+*/
+
+#include <complex>
+#include <fftw3.h>
+#include "Audaspace.h"
+
+#include <memory>
+#include <vector>
+
+/**Default FFT size.*/
+#define DEFAULT_N 4096
+
+AUD_NAMESPACE_BEGIN
+
+/**
+* Thas class represents an plan object that allows to calculate FFTs and IFFTs.
+*/
+class AUD_API FFTPlan
+{
+private:
+ /**
+ * The size of the FFT plan.
+ */
+ int m_N;
+
+ /**
+ * The plan to transform the input to the frequency domain.
+ */
+ fftwf_plan m_fftPlanR2C;
+
+ /**
+ * The plan to transform the input to the time domain again.
+ */
+ fftwf_plan m_fftPlanC2R;
+
+ /**
+ * The size of a buffer for its use with the FFT plan (in bytes).
+ */
+ unsigned int m_bufferSize;
+
+ // delete copy constructor and operator=
+ FFTPlan(const FFTPlan&) = delete;
+ FFTPlan& operator=(const FFTPlan&) = delete;
+
+public:
+ /**
+ * Creates a new FFTPlan object with DEFAULT_N size (4096).
+ * \param measureTime The aproximate amount of seconds that FFTW will spend searching for the optimal plan,
+ * which means faster FFTs and IFFTs while using this plan. If measureTime is negative, it will take all the time it needs.
+ */
+ FFTPlan(double measureTime = 0);
+
+ /**
+ * Creates a new FFTPlan object with a custom size.
+ * \param n The size of the FFT plan. Values that are a power of two are faster.
+ * The useful range usually is between 2048 and 8192, but bigger values can be useful
+ * in certain situations (when using the StreamBuffer class per example).
+ * Generally, low values use more CPU power and are a bit faster than large ones,
+ * there is also a huge decrease in efficiency when n is lower than 2048.
+ * \param measureTime The aproximate amount of seconds that FFTW will spend searching for the optimal plan,
+ * which means faster FFTs while using this plan. If measureTime is negative, it will take all the time it needs.
+ */
+ FFTPlan(int n, double measureTime = 0);
+ ~FFTPlan();
+
+ /**
+ * Retrieves the size of the FFT plan.
+ * \return The size of the plan.
+ */
+ int getSize();
+
+ /**
+ * Calculates the FFT of an input buffer with the current plan.
+ * \param[in,out] buffer A buffer with the input data an in which the output data will be written.
+ */
+ void FFT(void* buffer);
+
+ /**
+ * Calculates the IFFT of an input buffer with the current plan.
+ * \param[in,out] buffer A buffer with the input data an in which the output data will be written.
+ */
+ void IFFT(void* buffer);
+
+ /**
+ * Reserves memory for a buffer that can be used for inplace transformations with this plan.
+ * \return A pointer to a buffer of size ((N/2)+1)*2*sizeof(fftwf_complex).
+ * \warning The returned buffer must be freed with the freeBuffer method of this class.
+ */
+ void* getBuffer();
+
+ /**
+ * Frees one of the buffers reserved with the getRealOnlyBuffer(), getComplexOnlyBuffer() or getInplaceBuffer() method.
+ * \param buffer A pointer to the buufer taht must be freed.
+ */
+ void freeBuffer(void* buffer);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/util/ILockable.h b/extern/audaspace/include/util/ILockable.h
new file mode 100644
index 00000000000..8300fbd2845
--- /dev/null
+++ b/extern/audaspace/include/util/ILockable.h
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file ILockable.h
+ * @ingroup util
+ * The ILockable interface.
+ */
+
+#include "Audaspace.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * @interface ILockable
+ * This class provides an interface for lockable objects.
+ */
+class AUD_API ILockable
+{
+public:
+ /**
+ * Locks the object.
+ */
+ virtual void lock()=0;
+ /**
+ * Unlocks the previously locked object.
+ */
+ virtual void unlock()=0;
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/util/Math3D.h b/extern/audaspace/include/util/Math3D.h
new file mode 100644
index 00000000000..7ded12c1ba8
--- /dev/null
+++ b/extern/audaspace/include/util/Math3D.h
@@ -0,0 +1,324 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file Math3D.h
+ * @ingroup util
+ * Defines the Vector3 and Quaternion classes.
+ */
+
+#include "Audaspace.h"
+
+#include <cmath>
+#include <cstring>
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This class represents a 3 dimensional vector.
+ */
+class AUD_API Vector3
+{
+private:
+ /**
+ * The vector components.
+ */
+ union
+ {
+ float m_v[3];
+ struct
+ {
+ float m_x;
+ float m_y;
+ float m_z;
+ };
+ };
+
+public:
+ /**
+ * Creates a new 3 dimensional vector.
+ * \param x The x component.
+ * \param y The y component.
+ * \param z The z component.
+ */
+ inline Vector3(float x = 0, float y = 0, float z = 0) :
+ m_x(x), m_y(y), m_z(z)
+ {
+ }
+
+ /**
+ * Retrieves the x component of the vector.
+ * \return The x component.
+ */
+ inline const float& x() const
+ {
+ return m_x;
+ }
+
+ /**
+ * Retrieves the y component of the vector.
+ * \return The y component.
+ */
+ inline const float& y() const
+ {
+ return m_y;
+ }
+
+ /**
+ * Retrieves the z component of the vector.
+ * \return The z component.
+ */
+ inline const float& z() const
+ {
+ return m_z;
+ }
+
+ /**
+ * Retrieves the components of the vector.
+ * \param destination Where the 3 float values should be saved to.
+ */
+ inline void get(float* destination) const
+ {
+ std::memcpy(destination, m_v, sizeof(m_v));
+ }
+
+ /**
+ * Retrieves the components of the vector.
+ * \return The components as float[3].
+ */
+ inline float* get()
+ {
+ return m_v;
+ }
+
+ /**
+ * Retrieves the components of the vector.
+ * \return The components as float[3].
+ */
+ inline const float* get() const
+ {
+ return m_v;
+ }
+
+ /**
+ * Retrieves the length of the vector.
+ * \return The length of the vector.
+ */
+ inline float length() const
+ {
+ return std::sqrt(m_x*m_x + m_y*m_y + m_z*m_z);
+ }
+
+ /**
+ * Retrieves the cross product.
+ * \param op The second operand.
+ * \return The cross product of the two vectors.
+ */
+ inline Vector3 cross(const Vector3& op) const
+ {
+ return Vector3(m_y * op.m_z - m_z * op.m_y,
+ m_z * op.m_x - m_x * op.m_z,
+ m_x * op.m_y - m_y * op.m_x);
+ }
+
+ /**
+ * Retrieves the dot product.
+ * \param op The second operand.
+ * \return The dot product of the two vectors.
+ */
+ inline float operator*(const Vector3& op) const
+ {
+ return m_x * op.m_x + m_y * op.m_y + m_z * op.m_z;
+ }
+
+ /**
+ * Retrieves the product with a scalar.
+ * \param op The second operand.
+ * \return The scaled vector.
+ */
+ inline Vector3 operator*(const float& op) const
+ {
+ return Vector3(m_x * op, m_y * op, m_z * op);
+ }
+
+ /**
+ * Adds two vectors.
+ * \param op The second operand.
+ * \return The sum vector.
+ */
+ inline Vector3 operator+(const Vector3& op) const
+ {
+ return Vector3(m_x + op.m_x, m_y + op.m_y, m_z + op.m_z);
+ }
+
+ /**
+ * Subtracts two vectors.
+ * \param op The second operand.
+ * \return The difference vector.
+ */
+ inline Vector3 operator-(const Vector3& op) const
+ {
+ return Vector3(m_x - op.m_x, m_y - op.m_y, m_z - op.m_z);
+ }
+
+ /**
+ * Negates the vector.
+ * \return The vector facing in the opposite direction.
+ */
+ inline Vector3 operator-() const
+ {
+ return Vector3(-m_x, -m_y, -m_z);
+ }
+
+ /**
+ * Subtracts the second vector.
+ * \param op The second operand.
+ * \return The difference vector.
+ */
+ inline Vector3& operator-=(const Vector3& op)
+ {
+ m_x -= op.m_x;
+ m_y -= op.m_y;
+ m_z -= op.m_z;
+ return *this;
+ }
+};
+
+/**
+ * This class represents a quaternion used for 3D rotations.
+ */
+class AUD_API Quaternion
+{
+private:
+ /**
+ * The quaternion components.
+ */
+ union
+ {
+ float m_v[4];
+ struct
+ {
+ float m_w;
+ float m_x;
+ float m_y;
+ float m_z;
+ };
+ };
+
+public:
+ /**
+ * Creates a new quaternion.
+ * \param w The w component.
+ * \param x The x component.
+ * \param y The y component.
+ * \param z The z component.
+ */
+ inline Quaternion(float w = 1, float x = 0, float y = 0, float z = 0) :
+ m_w(w), m_x(x), m_y(y), m_z(z)
+ {
+ }
+
+ /**
+ * Retrieves the w component of the quarternion.
+ * \return The w component.
+ */
+ inline const float& w() const
+ {
+ return m_w;
+ }
+
+ /**
+ * Retrieves the x component of the quarternion.
+ * \return The x component.
+ */
+ inline const float& x() const
+ {
+ return m_x;
+ }
+
+ /**
+ * Retrieves the y component of the quarternion.
+ * \return The y component.
+ */
+ inline const float& y() const
+ {
+ return m_y;
+ }
+
+ /**
+ * Retrieves the z component of the quarternion.
+ * \return The z component.
+ */
+ inline const float& z() const
+ {
+ return m_z;
+ }
+
+ /**
+ * Retrieves the components of the vector.
+ * \param destination Where the 4 float values should be saved to.
+ */
+ inline void get(float* destination) const
+ {
+ std::memcpy(destination, m_v, sizeof(m_v));
+ }
+
+ /**
+ * Retrieves the components of the vector.
+ * \return The components as float[4].
+ */
+ inline float* get()
+ {
+ return m_v;
+ }
+
+ /**
+ * Retrieves the components of the vector.
+ * \return The components as float[4].
+ */
+ inline const float* get() const
+ {
+ return m_v;
+ }
+
+ /**
+ * When the quaternion represents an orientation, this returns the negative
+ * z axis vector.
+ * \return The negative z axis vector.
+ */
+ inline Vector3 getLookAt() const
+ {
+ return Vector3(-2 * (m_w * m_y + m_x * m_z),
+ 2 * (m_x * m_w - m_z * m_y),
+ 2 * (m_x * m_x + m_y * m_y) - 1);
+ }
+
+ /**
+ * When the quaternion represents an orientation, this returns the y axis
+ * vector.
+ * \return The y axis vector.
+ */
+ inline Vector3 getUp() const
+ {
+ return Vector3(2 * (m_x * m_y - m_w * m_z),
+ 1 - 2 * (m_x * m_x + m_z * m_z),
+ 2 * (m_w * m_x + m_y * m_z));
+ }
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/util/StreamBuffer.h b/extern/audaspace/include/util/StreamBuffer.h
new file mode 100644
index 00000000000..8ec4cfcf46d
--- /dev/null
+++ b/extern/audaspace/include/util/StreamBuffer.h
@@ -0,0 +1,85 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+/**
+ * @file StreamBuffer.h
+ * @ingroup util
+ * The StreamBuffer class.
+ */
+
+#include "ISound.h"
+#include "respec/Specification.h"
+
+AUD_NAMESPACE_BEGIN
+
+class Buffer;
+
+/**
+ * This sound creates a buffer out of a reader. This way normally streamed
+ * sound sources can be loaded into memory for buffered playback.
+ */
+class AUD_API StreamBuffer : public ISound
+{
+private:
+ /**
+ * The buffer that holds the audio data.
+ */
+ std::shared_ptr<Buffer> m_buffer;
+
+ /**
+ * The specification of the samples.
+ */
+ Specs m_specs;
+
+ // delete copy constructor and operator=
+ StreamBuffer(const StreamBuffer&) = delete;
+ StreamBuffer& operator=(const StreamBuffer&) = delete;
+
+public:
+ /**
+ * Creates the sound and reads the reader created by the sound supplied
+ * to the buffer.
+ * \param sound The sound that creates the reader for buffering.
+ * \exception Exception Thrown if the reader cannot be created.
+ */
+ StreamBuffer(std::shared_ptr<ISound> sound);
+
+ /**
+ * Creates the sound from an preexisting buffer.
+ * \param buffer The buffer to stream from.
+ * \param specs The specification of the data in the buffer.
+ * \exception Exception Thrown if the reader cannot be created.
+ */
+ StreamBuffer(std::shared_ptr<Buffer> buffer, Specs specs);
+
+ /**
+ * Returns the buffer to be streamed.
+ * @return The buffer to stream.
+ */
+ std::shared_ptr<Buffer> getBuffer();
+
+ /**
+ * Returns the specification of the buffer.
+ * @return The specification of the buffer.
+ */
+ Specs getSpecs();
+
+ virtual std::shared_ptr<IReader> createReader();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/include/util/ThreadPool.h b/extern/audaspace/include/util/ThreadPool.h
new file mode 100644
index 00000000000..24ec089d52c
--- /dev/null
+++ b/extern/audaspace/include/util/ThreadPool.h
@@ -0,0 +1,119 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#pragma once
+
+/**
+* @file ThreadPool.h
+* @ingroup util
+* The ThreadPool class.
+*/
+
+#include "Audaspace.h"
+
+#include <mutex>
+#include <condition_variable>
+#include <vector>
+#include <thread>
+#include <queue>
+#include <future>
+#include <functional>
+
+AUD_NAMESPACE_BEGIN
+/**
+* This represents pool of threads.
+*/
+class AUD_API ThreadPool
+{
+private:
+ /**
+ * A queue of tasks.
+ */
+ std::queue<std::function<void()>> m_queue;
+
+ /**
+ * A vector of thread objects.
+ */
+ std::vector<std::thread> m_threads;
+
+ /**
+ * A mutex for synchronization.
+ */
+ std::mutex m_mutex;
+
+ /**
+ * A condition variable used to stop the threads when there are no tasks.
+ */
+ std::condition_variable m_condition;
+
+ /**
+ * Stop flag.
+ */
+ bool m_stopFlag;
+
+ /**
+ * The number fo threads.
+ */
+ unsigned int m_numThreads;
+
+ // delete copy constructor and operator=
+ ThreadPool(const ThreadPool&) = delete;
+ ThreadPool& operator=(const ThreadPool&) = delete;
+public:
+ /**
+ * Creates a new ThreadPool object.
+ * \param count The number of threads of the pool. It must not be 0.
+ */
+ ThreadPool(unsigned int count);
+
+ virtual ~ThreadPool();
+
+ /**
+ * Enqueues a new task for the threads to realize.
+ * \param t A function that realices a task.
+ * \param args The arguments of the task.
+ * \return A future of the same type as the return type of the task.
+ */
+ template<class T, class... Args>
+ std::future<typename std::result_of<T(Args...)>::type> enqueue(T&& t, Args&&... args)
+ {
+ using pkgdTask = std::packaged_task<typename std::result_of<T(Args...)>::type()>;
+
+ std::shared_ptr<pkgdTask> task = std::make_shared<pkgdTask>(std::bind(std::forward<T>(t), std::forward<Args>(args)...));
+ auto result = task->get_future();
+
+ m_mutex.lock();
+ m_queue.emplace([task]() { (*task)(); });
+ m_mutex.unlock();
+
+ m_condition.notify_one();
+ return result;
+ }
+
+ /**
+ * Retrieves the number of threads of the pool.
+ * \return The number of threads.
+ */
+ unsigned int getNumOfThreads();
+
+private:
+
+ /**
+ * Worker thread function.
+ */
+ void threadFunction();
+};
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/plugins/ffmpeg/FFMPEG.cpp b/extern/audaspace/plugins/ffmpeg/FFMPEG.cpp
new file mode 100644
index 00000000000..7f9b762f816
--- /dev/null
+++ b/extern/audaspace/plugins/ffmpeg/FFMPEG.cpp
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "FFMPEG.h"
+#include "FFMPEGReader.h"
+#include "FFMPEGWriter.h"
+#include "file/FileManager.h"
+
+AUD_NAMESPACE_BEGIN
+
+FFMPEG::FFMPEG()
+{
+ av_register_all();
+}
+
+void FFMPEG::registerPlugin()
+{
+ std::shared_ptr<FFMPEG> plugin = std::shared_ptr<FFMPEG>(new FFMPEG);
+ FileManager::registerInput(plugin);
+ FileManager::registerOutput(plugin);
+}
+
+std::shared_ptr<IReader> FFMPEG::createReader(std::string filename)
+{
+ return std::shared_ptr<IReader>(new FFMPEGReader(filename));
+}
+
+std::shared_ptr<IReader> FFMPEG::createReader(std::shared_ptr<Buffer> buffer)
+{
+ return std::shared_ptr<IReader>(new FFMPEGReader(buffer));
+}
+
+std::shared_ptr<IWriter> FFMPEG::createWriter(std::string filename, DeviceSpecs specs, Container format, Codec codec, unsigned int bitrate)
+{
+ return std::shared_ptr<IWriter>(new FFMPEGWriter(filename, specs, format, codec, bitrate));
+}
+
+#ifdef FFMPEG_PLUGIN
+extern "C" AUD_PLUGIN_API void registerPlugin()
+{
+ FFMPEG::registerPlugin();
+}
+
+extern "C" AUD_PLUGIN_API const char* getName()
+{
+ return "FFMPEG";
+}
+#endif
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/plugins/ffmpeg/FFMPEG.h b/extern/audaspace/plugins/ffmpeg/FFMPEG.h
new file mode 100644
index 00000000000..108ba547e0f
--- /dev/null
+++ b/extern/audaspace/plugins/ffmpeg/FFMPEG.h
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+#ifdef FFMPEG_PLUGIN
+#define AUD_BUILD_PLUGIN
+#endif
+
+/**
+ * @file FFMPEG.h
+ * @ingroup plugin
+ * The FFMPEG class.
+ */
+
+#include "file/IFileInput.h"
+#include "file/IFileOutput.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This plugin class reads and writes sounds via ffmpeg.
+ */
+class AUD_PLUGIN_API FFMPEG : public IFileInput, public IFileOutput
+{
+private:
+ // delete copy constructor and operator=
+ FFMPEG(const FFMPEG&) = delete;
+ FFMPEG& operator=(const FFMPEG&) = delete;
+
+public:
+ /**
+ * Creates a new ffmpeg plugin.
+ */
+ FFMPEG();
+
+ /**
+ * Registers this plugin.
+ */
+ static void registerPlugin();
+
+ virtual std::shared_ptr<IReader> createReader(std::string filename);
+ virtual std::shared_ptr<IReader> createReader(std::shared_ptr<Buffer> buffer);
+ virtual std::shared_ptr<IWriter> createWriter(std::string filename, DeviceSpecs specs, Container format, Codec codec, unsigned int bitrate);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp b/extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp
new file mode 100644
index 00000000000..6b79cc5abfd
--- /dev/null
+++ b/extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp
@@ -0,0 +1,397 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "FFMPEGReader.h"
+#include "Exception.h"
+
+#include <algorithm>
+
+extern "C" {
+#include <libavcodec/avcodec.h>
+#include <libavformat/avio.h>
+}
+
+AUD_NAMESPACE_BEGIN
+
+int FFMPEGReader::decode(AVPacket& packet, Buffer& buffer)
+{
+ AVFrame* frame = nullptr;
+ int got_frame;
+ int read_length;
+ uint8_t* orig_data = packet.data;
+ int orig_size = packet.size;
+
+ int buf_size = buffer.getSize();
+ int buf_pos = 0;
+
+ while(packet.size > 0)
+ {
+ got_frame = 0;
+
+ if(!frame)
+ frame = av_frame_alloc();
+ else
+ av_frame_unref(frame);
+
+ read_length = avcodec_decode_audio4(m_codecCtx, frame, &got_frame, &packet);
+ if(read_length < 0)
+ break;
+
+ if(got_frame)
+ {
+ int data_size = av_samples_get_buffer_size(nullptr, m_codecCtx->channels, frame->nb_samples, m_codecCtx->sample_fmt, 1);
+
+ if(buf_size - buf_pos < data_size)
+ {
+ buffer.resize(buf_size + data_size, true);
+ buf_size += data_size;
+ }
+
+ if(m_tointerleave)
+ {
+ int single_size = data_size / m_codecCtx->channels / frame->nb_samples;
+ for(int channel = 0; channel < m_codecCtx->channels; channel++)
+ {
+ for(int i = 0; i < frame->nb_samples; i++)
+ {
+ std::memcpy(((data_t*)buffer.getBuffer()) + buf_pos + ((m_codecCtx->channels * i) + channel) * single_size,
+ frame->data[channel] + i * single_size, single_size);
+ }
+ }
+ }
+ else
+ std::memcpy(((data_t*)buffer.getBuffer()) + buf_pos, frame->data[0], data_size);
+
+ buf_pos += data_size;
+ }
+ packet.size -= read_length;
+ packet.data += read_length;
+ }
+
+ packet.data = orig_data;
+ packet.size = orig_size;
+ av_free(frame);
+
+ return buf_pos;
+}
+
+void FFMPEGReader::init()
+{
+ m_position = 0;
+ m_pkgbuf_left = 0;
+
+ if(avformat_find_stream_info(m_formatCtx, nullptr) < 0)
+ AUD_THROW(FileException, "File couldn't be read, ffmpeg couldn't find the stream info.");
+
+ // find audio stream and codec
+ m_stream = -1;
+
+ for(unsigned int i = 0; i < m_formatCtx->nb_streams; i++)
+ {
+ if((m_formatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO)
+ && (m_stream < 0))
+ {
+ m_stream=i;
+ break;
+ }
+ }
+
+ if(m_stream == -1)
+ AUD_THROW(FileException, "File couldn't be read, no audio stream found by ffmpeg.");
+
+ m_codecCtx = m_formatCtx->streams[m_stream]->codec;
+
+ // get a decoder and open it
+ AVCodec* aCodec = avcodec_find_decoder(m_codecCtx->codec_id);
+ if(!aCodec)
+ AUD_THROW(FileException, "File couldn't be read, no decoder found with ffmpeg.");
+
+ if(avcodec_open2(m_codecCtx, aCodec, nullptr) < 0)
+ AUD_THROW(FileException, "File couldn't be read, ffmpeg codec couldn't be opened.");
+
+ m_specs.channels = (Channels) m_codecCtx->channels;
+ m_tointerleave = av_sample_fmt_is_planar(m_codecCtx->sample_fmt);
+
+ switch(av_get_packed_sample_fmt(m_codecCtx->sample_fmt))
+ {
+ case AV_SAMPLE_FMT_U8:
+ m_convert = convert_u8_float;
+ m_specs.format = FORMAT_U8;
+ break;
+ case AV_SAMPLE_FMT_S16:
+ m_convert = convert_s16_float;
+ m_specs.format = FORMAT_S16;
+ break;
+ case AV_SAMPLE_FMT_S32:
+ m_convert = convert_s32_float;
+ m_specs.format = FORMAT_S32;
+ break;
+ case AV_SAMPLE_FMT_FLT:
+ m_convert = convert_copy<float>;
+ m_specs.format = FORMAT_FLOAT32;
+ break;
+ case AV_SAMPLE_FMT_DBL:
+ m_convert = convert_double_float;
+ m_specs.format = FORMAT_FLOAT64;
+ break;
+ default:
+ AUD_THROW(FileException, "File couldn't be read, ffmpeg sample format unknown.");
+ }
+
+ m_specs.rate = (SampleRate) m_codecCtx->sample_rate;
+}
+
+FFMPEGReader::FFMPEGReader(std::string filename) :
+ m_pkgbuf(),
+ m_formatCtx(nullptr),
+ m_aviocontext(nullptr),
+ m_membuf(nullptr)
+{
+ // open file
+ if(avformat_open_input(&m_formatCtx, filename.c_str(), nullptr, nullptr)!=0)
+ AUD_THROW(FileException, "File couldn't be opened with ffmpeg.");
+
+ try
+ {
+ init();
+ }
+ catch(Exception&)
+ {
+ avformat_close_input(&m_formatCtx);
+ throw;
+ }
+}
+
+FFMPEGReader::FFMPEGReader(std::shared_ptr<Buffer> buffer) :
+ m_pkgbuf(),
+ m_membuffer(buffer),
+ m_membufferpos(0)
+{
+ m_membuf = reinterpret_cast<data_t*>(av_malloc(FF_MIN_BUFFER_SIZE + FF_INPUT_BUFFER_PADDING_SIZE));
+
+ m_aviocontext = avio_alloc_context(m_membuf, FF_MIN_BUFFER_SIZE, 0, this, read_packet, nullptr, seek_packet);
+
+ if(!m_aviocontext)
+ {
+ av_free(m_aviocontext);
+ AUD_THROW(FileException, "Buffer reading context couldn't be created with ffmpeg.");
+ }
+
+ m_formatCtx = avformat_alloc_context();
+ m_formatCtx->pb = m_aviocontext;
+ if(avformat_open_input(&m_formatCtx, "", nullptr, nullptr)!=0)
+ {
+ av_free(m_aviocontext);
+ AUD_THROW(FileException, "Buffer couldn't be read with ffmpeg.");
+ }
+
+ try
+ {
+ init();
+ }
+ catch(Exception&)
+ {
+ avformat_close_input(&m_formatCtx);
+ av_free(m_aviocontext);
+ throw;
+ }
+}
+
+FFMPEGReader::~FFMPEGReader()
+{
+ avcodec_close(m_codecCtx);
+ avformat_close_input(&m_formatCtx);
+}
+
+int FFMPEGReader::read_packet(void* opaque, uint8_t* buf, int buf_size)
+{
+ FFMPEGReader* reader = reinterpret_cast<FFMPEGReader*>(opaque);
+
+ int size = std::min(buf_size, int(reader->m_membuffer->getSize() - reader->m_membufferpos));
+
+ if(size < 0)
+ return -1;
+
+ std::memcpy(buf, ((data_t*)reader->m_membuffer->getBuffer()) + reader->m_membufferpos, size);
+ reader->m_membufferpos += size;
+
+ return size;
+}
+
+int64_t FFMPEGReader::seek_packet(void* opaque, int64_t offset, int whence)
+{
+ FFMPEGReader* reader = reinterpret_cast<FFMPEGReader*>(opaque);
+
+ switch(whence)
+ {
+ case SEEK_SET:
+ reader->m_membufferpos = 0;
+ break;
+ case SEEK_END:
+ reader->m_membufferpos = reader->m_membuffer->getSize();
+ break;
+ case AVSEEK_SIZE:
+ return reader->m_membuffer->getSize();
+ }
+
+ return (reader->m_membufferpos += offset);
+}
+
+bool FFMPEGReader::isSeekable() const
+{
+ return true;
+}
+
+void FFMPEGReader::seek(int position)
+{
+ if(position >= 0)
+ {
+ uint64_t st_time = m_formatCtx->start_time;
+ uint64_t seek_pos = ((uint64_t)position) * ((uint64_t)AV_TIME_BASE) / ((uint64_t)m_specs.rate);
+
+ if(st_time != AV_NOPTS_VALUE) {
+ seek_pos += st_time;
+ }
+
+ double pts_time_base =
+ av_q2d(m_formatCtx->streams[m_stream]->time_base);
+ uint64_t pts_st_time =
+ ((st_time != AV_NOPTS_VALUE) ? st_time : 0)
+ / pts_time_base / (uint64_t) AV_TIME_BASE;
+
+ // a value < 0 tells us that seeking failed
+ if(av_seek_frame(m_formatCtx, -1, seek_pos,
+ AVSEEK_FLAG_BACKWARD | AVSEEK_FLAG_ANY) >= 0)
+ {
+ avcodec_flush_buffers(m_codecCtx);
+ m_position = position;
+
+ AVPacket packet;
+ bool search = true;
+
+ while(search && av_read_frame(m_formatCtx, &packet) >= 0)
+ {
+ // is it a frame from the audio stream?
+ if(packet.stream_index == m_stream)
+ {
+ // decode the package
+ m_pkgbuf_left = decode(packet, m_pkgbuf);
+ search = false;
+
+ // check position
+ if(packet.pts != AV_NOPTS_VALUE)
+ {
+ // calculate real position, and read to frame!
+ m_position = (packet.pts - pts_st_time) * pts_time_base * m_specs.rate;
+
+ if(m_position < position)
+ {
+ // read until we're at the right position
+ int length = AUD_DEFAULT_BUFFER_SIZE;
+ Buffer buffer(length * AUD_SAMPLE_SIZE(m_specs));
+ bool eos;
+ for(int len = position - m_position; len > 0; len -= AUD_DEFAULT_BUFFER_SIZE)
+ {
+ if(len < AUD_DEFAULT_BUFFER_SIZE)
+ length = len;
+ read(length, eos, buffer.getBuffer());
+ }
+ }
+ }
+ }
+ av_free_packet(&packet);
+ }
+ }
+ else
+ {
+ fprintf(stderr, "seeking failed!\n");
+ // Seeking failed, do nothing.
+ }
+ }
+}
+
+int FFMPEGReader::getLength() const
+{
+ // return approximated remaning size
+ return (int)((m_formatCtx->duration * m_codecCtx->sample_rate)
+ / AV_TIME_BASE)-m_position;
+}
+
+int FFMPEGReader::getPosition() const
+{
+ return m_position;
+}
+
+Specs FFMPEGReader::getSpecs() const
+{
+ return m_specs.specs;
+}
+
+void FFMPEGReader::read(int& length, bool& eos, sample_t* buffer)
+{
+ // read packages and decode them
+ AVPacket packet;
+ int data_size = 0;
+ int pkgbuf_pos;
+ int left = length;
+ int sample_size = AUD_DEVICE_SAMPLE_SIZE(m_specs);
+
+ sample_t* buf = buffer;
+ pkgbuf_pos = m_pkgbuf_left;
+ m_pkgbuf_left = 0;
+
+ // there may still be data in the buffer from the last call
+ if(pkgbuf_pos > 0)
+ {
+ data_size = std::min(pkgbuf_pos, left * sample_size);
+ m_convert((data_t*) buf, (data_t*) m_pkgbuf.getBuffer(), data_size / AUD_FORMAT_SIZE(m_specs.format));
+ buf += data_size / AUD_FORMAT_SIZE(m_specs.format);
+ left -= data_size/sample_size;
+ }
+
+ // for each frame read as long as there isn't enough data already
+ while((left > 0) && (av_read_frame(m_formatCtx, &packet) >= 0))
+ {
+ // is it a frame from the audio stream?
+ if(packet.stream_index == m_stream)
+ {
+ // decode the package
+ pkgbuf_pos = decode(packet, m_pkgbuf);
+
+ // copy to output buffer
+ data_size = std::min(pkgbuf_pos, left * sample_size);
+ m_convert((data_t*) buf, (data_t*) m_pkgbuf.getBuffer(), data_size / AUD_FORMAT_SIZE(m_specs.format));
+ buf += data_size / AUD_FORMAT_SIZE(m_specs.format);
+ left -= data_size/sample_size;
+ }
+ av_free_packet(&packet);
+ }
+ // read more data than necessary?
+ if(pkgbuf_pos > data_size)
+ {
+ m_pkgbuf_left = pkgbuf_pos-data_size;
+ memmove(m_pkgbuf.getBuffer(),
+ ((data_t*)m_pkgbuf.getBuffer())+data_size,
+ pkgbuf_pos-data_size);
+ }
+
+ if((eos = (left > 0)))
+ length -= left;
+
+ m_position += length;
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/plugins/ffmpeg/FFMPEGReader.h b/extern/audaspace/plugins/ffmpeg/FFMPEGReader.h
new file mode 100644
index 00000000000..e2ae959912d
--- /dev/null
+++ b/extern/audaspace/plugins/ffmpeg/FFMPEGReader.h
@@ -0,0 +1,184 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+#ifdef FFMPEG_PLUGIN
+#define AUD_BUILD_PLUGIN
+#endif
+
+/**
+ * @file FFMPEGReader.h
+ * @ingroup plugin
+ * The FFMPEGReader class.
+ */
+
+#include "respec/ConverterFunctions.h"
+#include "IReader.h"
+#include "util/Buffer.h"
+
+#include <string>
+#include <memory>
+
+struct AVCodecContext;
+extern "C" {
+#include <libavformat/avformat.h>
+}
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This class reads a sound file via ffmpeg.
+ * \warning Seeking may not be accurate! Moreover the position is updated after
+ * a buffer reading call. So calling getPosition right after seek
+ * normally results in a wrong value.
+ */
+class AUD_PLUGIN_API FFMPEGReader : public IReader
+{
+private:
+ /**
+ * The current position in samples.
+ */
+ int m_position;
+
+ /**
+ * The specification of the audio data.
+ */
+ DeviceSpecs m_specs;
+
+ /**
+ * The buffer for package reading.
+ */
+ Buffer m_pkgbuf;
+
+ /**
+ * The count of samples still available from the last read package.
+ */
+ int m_pkgbuf_left;
+
+ /**
+ * The AVFormatContext structure for using ffmpeg.
+ */
+ AVFormatContext* m_formatCtx;
+
+ /**
+ * The AVCodecContext structure for using ffmpeg.
+ */
+ AVCodecContext* m_codecCtx;
+
+ /**
+ * The AVIOContext to read the data from.
+ */
+ AVIOContext* m_aviocontext;
+
+ /**
+ * The stream ID in the file.
+ */
+ int m_stream;
+
+ /**
+ * Converter function.
+ */
+ convert_f m_convert;
+
+ /**
+ * The memory file to read from.
+ */
+ std::shared_ptr<Buffer> m_membuffer;
+
+ /**
+ * The buffer to read with.
+ */
+ data_t* m_membuf;
+
+ /**
+ * Reading position of the buffer.
+ */
+ int64_t m_membufferpos;
+
+ /**
+ * Whether the audio data has to be interleaved after reading.
+ */
+ bool m_tointerleave;
+
+ /**
+ * Decodes a packet into the given buffer.
+ * \param packet The AVPacket to decode.
+ * \param buffer The target buffer.
+ * \return The count of read bytes.
+ */
+ AUD_LOCAL int decode(AVPacket& packet, Buffer& buffer);
+
+ /**
+ * Initializes the object.
+ */
+ AUD_LOCAL void init();
+
+ // delete copy constructor and operator=
+ FFMPEGReader(const FFMPEGReader&) = delete;
+ FFMPEGReader& operator=(const FFMPEGReader&) = delete;
+
+public:
+ /**
+ * Creates a new reader.
+ * \param filename The path to the file to be read.
+ * \exception Exception Thrown if the file specified does not exist or
+ * cannot be read with ffmpeg.
+ */
+ FFMPEGReader(std::string filename);
+
+ /**
+ * Creates a new reader.
+ * \param buffer The buffer to read from.
+ * \exception Exception Thrown if the buffer specified cannot be read
+ * with ffmpeg.
+ */
+ FFMPEGReader(std::shared_ptr<Buffer> buffer);
+
+ /**
+ * Destroys the reader and closes the file.
+ */
+ virtual ~FFMPEGReader();
+
+ /**
+ * Reads data to a memory buffer.
+ * This function is used for avio only.
+ * @param opaque The FFMPEGReader.
+ * @param buf The buffer to read to.
+ * @param buf_size The size of the buffer.
+ * @return How many bytes have been read.
+ */
+ static int read_packet(void* opaque, uint8_t* buf, int buf_size);
+
+ /**
+ * Seeks within data.
+ * This function is used for avio only.
+ * @param opaque The FFMPEGReader.
+ * @param offset The byte offset to seek to.
+ * @param whence The seeking action.
+ * @return The current position or the size of the data if requested.
+ */
+ static int64_t seek_packet(void* opaque, int64_t offset, int whence);
+
+ virtual bool isSeekable() const;
+ virtual void seek(int position);
+ virtual int getLength() const;
+ virtual int getPosition() const;
+ virtual Specs getSpecs() const;
+ virtual void read(int& length, bool& eos, sample_t* buffer);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/plugins/ffmpeg/FFMPEGWriter.cpp b/extern/audaspace/plugins/ffmpeg/FFMPEGWriter.cpp
new file mode 100644
index 00000000000..f79f0f7fc6b
--- /dev/null
+++ b/extern/audaspace/plugins/ffmpeg/FFMPEGWriter.cpp
@@ -0,0 +1,427 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "FFMPEGWriter.h"
+#include "Exception.h"
+
+#include <algorithm>
+#include <cstring>
+
+extern "C" {
+#include <libavcodec/avcodec.h>
+#include <libavformat/avio.h>
+}
+
+AUD_NAMESPACE_BEGIN
+
+void FFMPEGWriter::encode()
+{
+ sample_t* data = m_input_buffer.getBuffer();
+
+ if(m_deinterleave)
+ {
+ m_deinterleave_buffer.assureSize(m_input_buffer.getSize());
+
+ sample_t* dbuf = m_deinterleave_buffer.getBuffer();
+ // deinterleave
+ int single_size = sizeof(sample_t);
+ for(int channel = 0; channel < m_specs.channels; channel++)
+ {
+ for(int i = 0; i < m_input_buffer.getSize() / AUD_SAMPLE_SIZE(m_specs); i++)
+ {
+ std::memcpy(((data_t*)dbuf) + (m_input_samples * channel + i) * single_size,
+ ((data_t*)data) + ((m_specs.channels * i) + channel) * single_size, single_size);
+ }
+ }
+
+ // convert first
+ if(m_input_size)
+ m_convert(reinterpret_cast<data_t*>(data), reinterpret_cast<data_t*>(dbuf), m_input_samples * m_specs.channels);
+ else
+ std::memcpy(data, dbuf, m_input_buffer.getSize());
+ }
+ else
+ // convert first
+ if(m_input_size)
+ m_convert(reinterpret_cast<data_t*>(data), reinterpret_cast<data_t*>(data), m_input_samples * m_specs.channels);
+
+ AVPacket packet;
+
+ packet.data = nullptr;
+ packet.size = 0;
+
+ av_init_packet(&packet);
+
+ AVFrame* frame = av_frame_alloc();
+ av_frame_unref(frame);
+ int got_packet;
+
+ frame->nb_samples = m_input_samples;
+ frame->format = m_codecCtx->sample_fmt;
+ frame->channel_layout = m_codecCtx->channel_layout;
+
+ if(avcodec_fill_audio_frame(frame, m_specs.channels, m_codecCtx->sample_fmt, reinterpret_cast<data_t*>(data), m_input_buffer.getSize(), 0) < 0)
+ AUD_THROW(FileException, "File couldn't be written, filling the audio frame failed with ffmpeg.");
+
+ AVRational sample_time = { 1, static_cast<int>(m_specs.rate) };
+ frame->pts = av_rescale_q(m_position - m_input_samples, m_codecCtx->time_base, sample_time);
+
+ if(avcodec_encode_audio2(m_codecCtx, &packet, frame, &got_packet))
+ {
+ av_frame_free(&frame);
+ AUD_THROW(FileException, "File couldn't be written, audio encoding failed with ffmpeg.");
+ }
+
+ if(got_packet)
+ {
+ packet.flags |= AV_PKT_FLAG_KEY;
+ packet.stream_index = m_stream->index;
+ if(av_write_frame(m_formatCtx, &packet) < 0)
+ {
+ av_free_packet(&packet);
+ av_frame_free(&frame);
+ AUD_THROW(FileException, "Frame couldn't be writen to the file with ffmpeg.");
+ }
+ av_free_packet(&packet);
+ }
+
+ av_frame_free(&frame);
+}
+
+void FFMPEGWriter::close()
+{
+ int got_packet = true;
+
+ while(got_packet)
+ {
+ AVPacket packet;
+
+ packet.data = nullptr;
+ packet.size = 0;
+
+ av_init_packet(&packet);
+
+ if(avcodec_encode_audio2(m_codecCtx, &packet, nullptr, &got_packet))
+ AUD_THROW(FileException, "File end couldn't be written, audio encoding failed with ffmpeg.");
+
+ if(got_packet)
+ {
+ packet.flags |= AV_PKT_FLAG_KEY;
+ packet.stream_index = m_stream->index;
+ if(av_write_frame(m_formatCtx, &packet))
+ {
+ av_free_packet(&packet);
+ AUD_THROW(FileException, "Final frames couldn't be writen to the file with ffmpeg.");
+ }
+ av_free_packet(&packet);
+ }
+ }
+}
+
+FFMPEGWriter::FFMPEGWriter(std::string filename, DeviceSpecs specs, Container format, Codec codec, unsigned int bitrate) :
+ m_position(0),
+ m_specs(specs),
+ m_input_samples(0),
+ m_deinterleave(false)
+{
+ static const char* formats[] = { nullptr, "ac3", "flac", "matroska", "mp2", "mp3", "ogg", "wav" };
+
+ if(avformat_alloc_output_context2(&m_formatCtx, nullptr, formats[format], filename.c_str()) < 0)
+ AUD_THROW(FileException, "File couldn't be written, format couldn't be found with ffmpeg.");
+
+ m_outputFmt = m_formatCtx->oformat;
+
+ if(!m_outputFmt) {
+ avformat_free_context(m_formatCtx);
+ AUD_THROW(FileException, "File couldn't be written, output format couldn't be found with ffmpeg.");
+ }
+
+ m_outputFmt->audio_codec = AV_CODEC_ID_NONE;
+
+ switch(codec)
+ {
+ case CODEC_AAC:
+ m_outputFmt->audio_codec = AV_CODEC_ID_AAC;
+ break;
+ case CODEC_AC3:
+ m_outputFmt->audio_codec = AV_CODEC_ID_AC3;
+ break;
+ case CODEC_FLAC:
+ m_outputFmt->audio_codec = AV_CODEC_ID_FLAC;
+ break;
+ case CODEC_MP2:
+ m_outputFmt->audio_codec = AV_CODEC_ID_MP2;
+ break;
+ case CODEC_MP3:
+ m_outputFmt->audio_codec = AV_CODEC_ID_MP3;
+ break;
+ case CODEC_OPUS:
+ m_outputFmt->audio_codec = AV_CODEC_ID_OPUS;
+ break;
+ case CODEC_PCM:
+ switch(specs.format)
+ {
+ case FORMAT_U8:
+ m_outputFmt->audio_codec = AV_CODEC_ID_PCM_U8;
+ break;
+ case FORMAT_S16:
+ m_outputFmt->audio_codec = AV_CODEC_ID_PCM_S16LE;
+ break;
+ case FORMAT_S24:
+ m_outputFmt->audio_codec = AV_CODEC_ID_PCM_S24LE;
+ break;
+ case FORMAT_S32:
+ m_outputFmt->audio_codec = AV_CODEC_ID_PCM_S32LE;
+ break;
+ case FORMAT_FLOAT32:
+ m_outputFmt->audio_codec = AV_CODEC_ID_PCM_F32LE;
+ break;
+ case FORMAT_FLOAT64:
+ m_outputFmt->audio_codec = AV_CODEC_ID_PCM_F64LE;
+ break;
+ default:
+ m_outputFmt->audio_codec = AV_CODEC_ID_NONE;
+ break;
+ }
+ break;
+ case CODEC_VORBIS:
+ m_outputFmt->audio_codec = AV_CODEC_ID_VORBIS;
+ break;
+ default:
+ m_outputFmt->audio_codec = AV_CODEC_ID_NONE;
+ break;
+ }
+
+ try
+ {
+ if(m_outputFmt->audio_codec == AV_CODEC_ID_NONE)
+ AUD_THROW(FileException, "File couldn't be written, audio codec not found with ffmpeg.");
+
+ AVCodec* codec = avcodec_find_encoder(m_outputFmt->audio_codec);
+ if(!codec)
+ AUD_THROW(FileException, "File couldn't be written, audio encoder couldn't be found with ffmpeg.");
+
+ m_stream = avformat_new_stream(m_formatCtx, codec);
+ if(!m_stream)
+ AUD_THROW(FileException, "File couldn't be written, stream creation failed with ffmpeg.");
+
+ m_stream->id = m_formatCtx->nb_streams - 1;
+
+ m_codecCtx = m_stream->codec;
+
+ switch(m_specs.format)
+ {
+ case FORMAT_U8:
+ m_convert = convert_float_u8;
+ m_codecCtx->sample_fmt = AV_SAMPLE_FMT_U8;
+ break;
+ case FORMAT_S16:
+ m_convert = convert_float_s16;
+ m_codecCtx->sample_fmt = AV_SAMPLE_FMT_S16;
+ break;
+ case FORMAT_S32:
+ m_convert = convert_float_s32;
+ m_codecCtx->sample_fmt = AV_SAMPLE_FMT_S32;
+ break;
+ case FORMAT_FLOAT64:
+ m_convert = convert_float_double;
+ m_codecCtx->sample_fmt = AV_SAMPLE_FMT_DBL;
+ break;
+ default:
+ m_convert = convert_copy<sample_t>;
+ m_codecCtx->sample_fmt = AV_SAMPLE_FMT_FLT;
+ break;
+ }
+
+ if(m_formatCtx->oformat->flags & AVFMT_GLOBALHEADER)
+ m_codecCtx->flags |= CODEC_FLAG_GLOBAL_HEADER;
+
+ bool format_supported = false;
+
+ for(int i = 0; codec->sample_fmts[i] != -1; i++)
+ {
+ if(av_get_alt_sample_fmt(codec->sample_fmts[i], false) == m_codecCtx->sample_fmt)
+ {
+ m_deinterleave = av_sample_fmt_is_planar(codec->sample_fmts[i]);
+ m_codecCtx->sample_fmt = codec->sample_fmts[i];
+ format_supported = true;
+ }
+ }
+
+ if(!format_supported)
+ {
+ int chosen_index = 0;
+ auto chosen = av_get_alt_sample_fmt(codec->sample_fmts[chosen_index], false);
+ for(int i = 1; codec->sample_fmts[i] != -1; i++)
+ {
+ auto fmt = av_get_alt_sample_fmt(codec->sample_fmts[i], false);
+ if((fmt > chosen && chosen < m_codecCtx->sample_fmt) || (fmt > m_codecCtx->sample_fmt && fmt < chosen))
+ {
+ chosen = fmt;
+ chosen_index = i;
+ }
+ }
+
+ m_codecCtx->sample_fmt = codec->sample_fmts[chosen_index];
+ m_deinterleave = av_sample_fmt_is_planar(m_codecCtx->sample_fmt);
+ switch(av_get_alt_sample_fmt(m_codecCtx->sample_fmt, false))
+ {
+ case AV_SAMPLE_FMT_U8:
+ specs.format = FORMAT_U8;
+ m_convert = convert_float_u8;
+ break;
+ case AV_SAMPLE_FMT_S16:
+ specs.format = FORMAT_S16;
+ m_convert = convert_float_s16;
+ break;
+ case AV_SAMPLE_FMT_S32:
+ specs.format = FORMAT_S32;
+ m_convert = convert_float_s32;
+ break;
+ case AV_SAMPLE_FMT_FLT:
+ specs.format = FORMAT_FLOAT32;
+ m_convert = convert_copy<sample_t>;
+ break;
+ case AV_SAMPLE_FMT_DBL:
+ specs.format = FORMAT_FLOAT64;
+ m_convert = convert_float_double;
+ break;
+ default:
+ AUD_THROW(FileException, "File couldn't be written, sample format not supported with ffmpeg.");
+ }
+ }
+
+ m_codecCtx->sample_rate = 0;
+
+ if(codec->supported_samplerates)
+ {
+ for(int i = 0; codec->supported_samplerates[i]; i++)
+ {
+ if(codec->supported_samplerates[i] == m_specs.rate)
+ {
+ m_codecCtx->sample_rate = codec->supported_samplerates[i];
+ break;
+ }
+ else if((codec->supported_samplerates[i] > m_codecCtx->sample_rate && m_specs.rate > m_codecCtx->sample_rate) ||
+ (codec->supported_samplerates[i] < m_codecCtx->sample_rate && m_specs.rate < codec->supported_samplerates[i]))
+ {
+ m_codecCtx->sample_rate = codec->supported_samplerates[i];
+ }
+ }
+ }
+
+ if(m_codecCtx->sample_rate == 0)
+ m_codecCtx->sample_rate = m_specs.rate;
+
+ m_specs.rate = m_codecCtx->sample_rate;
+
+ m_codecCtx->codec_id = m_outputFmt->audio_codec;
+ m_codecCtx->codec_type = AVMEDIA_TYPE_AUDIO;
+ m_codecCtx->bit_rate = bitrate;
+ m_codecCtx->channels = m_specs.channels;
+ m_stream->time_base.num = m_codecCtx->time_base.num = 1;
+ m_stream->time_base.den = m_codecCtx->time_base.den = m_codecCtx->sample_rate;
+
+ if(avcodec_open2(m_codecCtx, codec, nullptr) < 0)
+ AUD_THROW(FileException, "File couldn't be written, encoder couldn't be opened with ffmpeg.");
+
+ int samplesize = std::max(int(AUD_SAMPLE_SIZE(m_specs)), AUD_DEVICE_SAMPLE_SIZE(m_specs));
+
+ if((m_input_size = m_codecCtx->frame_size))
+ m_input_buffer.resize(m_input_size * samplesize);
+
+ if(avio_open(&m_formatCtx->pb, filename.c_str(), AVIO_FLAG_WRITE))
+ AUD_THROW(FileException, "File couldn't be written, file opening failed with ffmpeg.");
+
+ avformat_write_header(m_formatCtx, nullptr);
+ }
+ catch(Exception&)
+ {
+ avformat_free_context(m_formatCtx);
+ throw;
+ }
+}
+
+FFMPEGWriter::~FFMPEGWriter()
+{
+ // writte missing data
+ if(m_input_samples)
+ encode();
+
+ close();
+
+ av_write_trailer(m_formatCtx);
+
+ avcodec_close(m_codecCtx);
+
+ avio_close(m_formatCtx->pb);
+ avformat_free_context(m_formatCtx);
+}
+
+int FFMPEGWriter::getPosition() const
+{
+ return m_position;
+}
+
+DeviceSpecs FFMPEGWriter::getSpecs() const
+{
+ return m_specs;
+}
+
+void FFMPEGWriter::write(unsigned int length, sample_t* buffer)
+{
+ unsigned int samplesize = AUD_SAMPLE_SIZE(m_specs);
+
+ if(m_input_size)
+ {
+ sample_t* inbuf = m_input_buffer.getBuffer();
+
+ while(length)
+ {
+ unsigned int len = std::min(m_input_size - m_input_samples, length);
+
+ std::memcpy(inbuf + m_input_samples * m_specs.channels, buffer, len * samplesize);
+
+ buffer += len * m_specs.channels;
+ m_input_samples += len;
+ m_position += len;
+ length -= len;
+
+ if(m_input_samples == m_input_size)
+ {
+ encode();
+
+ m_input_samples = 0;
+ }
+ }
+ }
+ else // PCM data, can write directly!
+ {
+ int samplesize = AUD_SAMPLE_SIZE(m_specs);
+ m_input_buffer.assureSize(length * std::max(AUD_DEVICE_SAMPLE_SIZE(m_specs), samplesize));
+
+ sample_t* buf = m_input_buffer.getBuffer();
+ m_convert(reinterpret_cast<data_t*>(buf), reinterpret_cast<data_t*>(buffer), length * m_specs.channels);
+
+ m_input_samples = length;
+
+ m_position += length;
+
+ encode();
+ }
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/plugins/ffmpeg/FFMPEGWriter.h b/extern/audaspace/plugins/ffmpeg/FFMPEGWriter.h
new file mode 100644
index 00000000000..690185deb64
--- /dev/null
+++ b/extern/audaspace/plugins/ffmpeg/FFMPEGWriter.h
@@ -0,0 +1,145 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+#ifdef FFMPEG_PLUGIN
+#define AUD_BUILD_PLUGIN
+#endif
+
+/**
+ * @file FFMPEGWriter.h
+ * @ingroup plugin
+ * The FFMPEGWriter class.
+ */
+
+#include "respec/ConverterFunctions.h"
+#include "util/Buffer.h"
+#include "file/IWriter.h"
+
+#include <string>
+
+struct AVCodecContext;
+extern "C" {
+#include <libavformat/avformat.h>
+}
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This class writes a sound file via ffmpeg.
+ */
+class AUD_PLUGIN_API FFMPEGWriter : public IWriter
+{
+private:
+ /**
+ * The current position in samples.
+ */
+ int m_position;
+
+ /**
+ * The specification of the audio data.
+ */
+ DeviceSpecs m_specs;
+
+ /**
+ * The AVFormatContext structure for using ffmpeg.
+ */
+ AVFormatContext* m_formatCtx;
+
+ /**
+ * The AVCodecContext structure for using ffmpeg.
+ */
+ AVCodecContext* m_codecCtx;
+
+ /**
+ * The AVOutputFormat structure for using ffmpeg.
+ */
+ AVOutputFormat* m_outputFmt;
+
+ /**
+ * The AVStream structure for using ffmpeg.
+ */
+ AVStream* m_stream;
+
+ /**
+ * The input buffer for the format converted data before encoding.
+ */
+ Buffer m_input_buffer;
+
+ /**
+ * The buffer used for deinterleaving.
+ */
+ Buffer m_deinterleave_buffer;
+
+ /**
+ * The count of input samples we have so far.
+ */
+ unsigned int m_input_samples;
+
+ /**
+ * The count of input samples necessary to encode a packet.
+ */
+ unsigned int m_input_size;
+
+ /**
+ * Whether the ouput has to be deinterleaved before writing.
+ */
+ bool m_deinterleave;
+
+ /**
+ * Converter function.
+ */
+ convert_f m_convert;
+
+ // delete copy constructor and operator=
+ FFMPEGWriter(const FFMPEGWriter&) = delete;
+ FFMPEGWriter& operator=(const FFMPEGWriter&) = delete;
+
+ /**
+ * Encodes to the output buffer.
+ */
+ AUD_LOCAL void encode();
+
+ /**
+ * Finishes writing to the file.
+ */
+ AUD_LOCAL void close();
+
+public:
+ /**
+ * Creates a new writer.
+ * \param filename The path to the file to be read.
+ * \param specs The file's audio specification.
+ * \param format The file's container format.
+ * \param codec The codec used for encoding the audio data.
+ * \param bitrate The bitrate for encoding.
+ * \exception Exception Thrown if the file specified does not exist or
+ * cannot be read with ffmpeg.
+ */
+ FFMPEGWriter(std::string filename, DeviceSpecs specs, Container format, Codec codec, unsigned int bitrate);
+
+ /**
+ * Destroys the writer and closes the file.
+ */
+ virtual ~FFMPEGWriter();
+
+ virtual int getPosition() const;
+ virtual DeviceSpecs getSpecs() const;
+ virtual void write(unsigned int length, sample_t* buffer);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/plugins/jack/JackDevice.cpp b/extern/audaspace/plugins/jack/JackDevice.cpp
new file mode 100644
index 00000000000..1d238f74c3a
--- /dev/null
+++ b/extern/audaspace/plugins/jack/JackDevice.cpp
@@ -0,0 +1,385 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "JackDevice.h"
+#include "JackLibrary.h"
+#include "devices/DeviceManager.h"
+#include "devices/IDeviceFactory.h"
+#include "Exception.h"
+#include "IReader.h"
+
+#include <cstring>
+#include <algorithm>
+
+AUD_NAMESPACE_BEGIN
+
+void JackDevice::updateRingBuffers()
+{
+ size_t size, temp;
+ unsigned int samplesize = AUD_SAMPLE_SIZE(m_specs);
+ unsigned int i, j;
+ unsigned int channels = m_specs.channels;
+ sample_t* buffer = m_buffer.getBuffer();
+ float* deinterleave = m_deinterleavebuf.getBuffer();
+ jack_transport_state_t state;
+ jack_position_t position;
+
+ std::unique_lock<std::mutex> lock(m_mixingLock);
+
+ while(m_valid)
+ {
+ if(m_sync > 1)
+ {
+ if(m_syncFunc)
+ {
+ state = AUD_jack_transport_query(m_client, &position);
+ m_syncFunc(m_syncFuncData, state != JackTransportStopped, position.frame / (float) m_specs.rate);
+ }
+
+ for(i = 0; i < channels; i++)
+ AUD_jack_ringbuffer_reset(m_ringbuffers[i]);
+ }
+
+ size = AUD_jack_ringbuffer_write_space(m_ringbuffers[0]);
+ for(i = 1; i < channels; i++)
+ if((temp = AUD_jack_ringbuffer_write_space(m_ringbuffers[i])) < size)
+ size = temp;
+
+ while(size > samplesize)
+ {
+ size /= samplesize;
+ mix((data_t*)buffer, size);
+ for(i = 0; i < channels; i++)
+ {
+ for(j = 0; j < size; j++)
+ deinterleave[i * size + j] = buffer[i + j * channels];
+ AUD_jack_ringbuffer_write(m_ringbuffers[i], (char*)(deinterleave + i * size), size * sizeof(float));
+ }
+
+ size = AUD_jack_ringbuffer_write_space(m_ringbuffers[0]);
+ for(i = 1; i < channels; i++)
+ if((temp = AUD_jack_ringbuffer_write_space(m_ringbuffers[i])) < size)
+ size = temp;
+ }
+
+ if(m_sync > 1)
+ {
+ m_sync = 3;
+ }
+
+ m_mixingCondition.wait(lock);
+ }
+}
+
+int JackDevice::jack_mix(jack_nframes_t length, void* data)
+{
+ JackDevice* device = (JackDevice*)data;
+ unsigned int i;
+ int count = device->m_specs.channels;
+ char* buffer;
+
+ if(device->m_sync)
+ {
+ // play silence while syncing
+ for(unsigned int i = 0; i < count; i++)
+ std::memset(AUD_jack_port_get_buffer(device->m_ports[i], length), 0, length * sizeof(float));
+ }
+ else
+ {
+ size_t temp;
+ size_t readsamples = AUD_jack_ringbuffer_read_space(device->m_ringbuffers[0]);
+ for(i = 1; i < count; i++)
+ if((temp = AUD_jack_ringbuffer_read_space(device->m_ringbuffers[i])) < readsamples)
+ readsamples = temp;
+
+ readsamples = std::min(readsamples / sizeof(float), size_t(length));
+
+ for(unsigned int i = 0; i < count; i++)
+ {
+ buffer = (char*)AUD_jack_port_get_buffer(device->m_ports[i], length);
+ AUD_jack_ringbuffer_read(device->m_ringbuffers[i], buffer, readsamples * sizeof(float));
+ if(readsamples < length)
+ std::memset(buffer + readsamples * sizeof(float), 0, (length - readsamples) * sizeof(float));
+ }
+
+ if(device->m_mixingLock.try_lock())
+ {
+ device->m_mixingCondition.notify_all();
+ device->m_mixingLock.unlock();
+ }
+ }
+
+ return 0;
+}
+
+int JackDevice::jack_sync(jack_transport_state_t state, jack_position_t* pos, void* data)
+{
+ JackDevice* device = (JackDevice*)data;
+
+ if(state == JackTransportStopped)
+ return 1;
+
+ if(device->m_mixingLock.try_lock())
+ {
+ if(device->m_sync > 2)
+ {
+ if(device->m_sync == 3)
+ {
+ device->m_sync = 0;
+ device->m_mixingLock.unlock();
+ return 1;
+ }
+ }
+ else
+ {
+ device->m_sync = 2;
+ device->m_mixingCondition.notify_all();
+ }
+ device->m_mixingLock.unlock();
+ }
+ else if(!device->m_sync)
+ device->m_sync = 1;
+
+ return 0;
+}
+
+void JackDevice::jack_shutdown(void* data)
+{
+ JackDevice* device = (JackDevice*)data;
+ device->m_valid = false;
+}
+
+JackDevice::JackDevice(std::string name, DeviceSpecs specs, int buffersize) :
+ m_synchronizer(this)
+{
+ if(specs.channels == CHANNELS_INVALID)
+ specs.channels = CHANNELS_STEREO;
+
+ // jack uses floats
+ m_specs = specs;
+ m_specs.format = FORMAT_FLOAT32;
+
+ jack_options_t options = JackNullOption;
+ jack_status_t status;
+
+ // open client
+ m_client = AUD_jack_client_open(name.c_str(), options, &status);
+ if(m_client == nullptr)
+ AUD_THROW(DeviceException, "Connecting to the JACK server failed.");
+
+ // set callbacks
+ AUD_jack_set_process_callback(m_client, JackDevice::jack_mix, this);
+ AUD_jack_on_shutdown(m_client, JackDevice::jack_shutdown, this);
+ AUD_jack_set_sync_callback(m_client, JackDevice::jack_sync, this);
+
+ // register our output channels which are called ports in jack
+ m_ports = new jack_port_t*[m_specs.channels];
+
+ try
+ {
+ char portname[64];
+ for(int i = 0; i < m_specs.channels; i++)
+ {
+ sprintf(portname, "out %d", i+1);
+ m_ports[i] = AUD_jack_port_register(m_client, portname, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0);
+ if(m_ports[i] == nullptr)
+ AUD_THROW(DeviceException, "Registering output port with JACK failed.");
+ }
+ }
+ catch(Exception&)
+ {
+ AUD_jack_client_close(m_client);
+ delete[] m_ports;
+ throw;
+ }
+
+ m_specs.rate = (SampleRate)AUD_jack_get_sample_rate(m_client);
+
+ buffersize *= sizeof(sample_t);
+ m_ringbuffers = new jack_ringbuffer_t*[specs.channels];
+ for(unsigned int i = 0; i < specs.channels; i++)
+ m_ringbuffers[i] = AUD_jack_ringbuffer_create(buffersize);
+ buffersize *= specs.channels;
+ m_deinterleavebuf.resize(buffersize);
+ m_buffer.resize(buffersize);
+
+ create();
+
+ m_valid = true;
+ m_sync = 0;
+ m_syncFunc = nullptr;
+ m_nextState = m_state = AUD_jack_transport_query(m_client, nullptr);
+
+ // activate the client
+ if(AUD_jack_activate(m_client))
+ {
+ AUD_jack_client_close(m_client);
+ delete[] m_ports;
+ for(unsigned int i = 0; i < specs.channels; i++)
+ AUD_jack_ringbuffer_free(m_ringbuffers[i]);
+ delete[] m_ringbuffers;
+ destroy();
+
+ AUD_THROW(DeviceException, "Client activation with JACK failed.");
+ }
+
+ const char** ports = AUD_jack_get_ports(m_client, nullptr, nullptr,
+ JackPortIsPhysical | JackPortIsInput);
+ if(ports != nullptr)
+ {
+ for(int i = 0; i < m_specs.channels && ports[i]; i++)
+ AUD_jack_connect(m_client, AUD_jack_port_name(m_ports[i]), ports[i]);
+
+ AUD_jack_free(ports);
+ }
+
+ m_mixingThread = std::thread(&JackDevice::updateRingBuffers, this);
+}
+
+JackDevice::~JackDevice()
+{
+ if(m_valid)
+ AUD_jack_client_close(m_client);
+ m_valid = false;
+
+ delete[] m_ports;
+
+ m_mixingLock.lock();
+ m_mixingCondition.notify_all();
+ m_mixingLock.unlock();
+
+ m_mixingThread.join();
+
+ for(unsigned int i = 0; i < m_specs.channels; i++)
+ AUD_jack_ringbuffer_free(m_ringbuffers[i]);
+ delete[] m_ringbuffers;
+
+ destroy();
+}
+
+ISynchronizer* JackDevice::getSynchronizer()
+{
+ return &m_synchronizer;
+}
+
+void JackDevice::playing(bool playing)
+{
+ // Do nothing.
+}
+
+void JackDevice::startPlayback()
+{
+ AUD_jack_transport_start(m_client);
+ m_nextState = JackTransportRolling;
+}
+
+void JackDevice::stopPlayback()
+{
+ AUD_jack_transport_stop(m_client);
+ m_nextState = JackTransportStopped;
+}
+
+void JackDevice::seekPlayback(float time)
+{
+ if(time >= 0.0f)
+ AUD_jack_transport_locate(m_client, time * m_specs.rate);
+}
+
+void JackDevice::setSyncCallback(ISynchronizer::syncFunction sync, void* data)
+{
+ m_syncFunc = sync;
+ m_syncFuncData = data;
+}
+
+float JackDevice::getPlaybackPosition()
+{
+ jack_position_t position;
+ AUD_jack_transport_query(m_client, &position);
+ return position.frame / (float) m_specs.rate;
+}
+
+bool JackDevice::doesPlayback()
+{
+ jack_transport_state_t state = AUD_jack_transport_query(m_client, nullptr);
+
+ if(state != m_state)
+ m_nextState = m_state = state;
+
+ return m_nextState != JackTransportStopped;
+}
+
+class JackDeviceFactory : public IDeviceFactory
+{
+private:
+ DeviceSpecs m_specs;
+ int m_buffersize;
+ std::string m_name;
+
+public:
+ JackDeviceFactory() :
+ m_buffersize(AUD_DEFAULT_BUFFER_SIZE),
+ m_name("Audaspace")
+ {
+ m_specs.format = FORMAT_FLOAT32;
+ m_specs.channels = CHANNELS_STEREO;
+ m_specs.rate = RATE_48000;
+ }
+
+ virtual std::shared_ptr<IDevice> openDevice()
+ {
+ return std::shared_ptr<IDevice>(new JackDevice(m_name, m_specs, m_buffersize));
+ }
+
+ virtual int getPriority()
+ {
+ return 0;
+ }
+
+ virtual void setSpecs(DeviceSpecs specs)
+ {
+ m_specs = specs;
+ }
+
+ virtual void setBufferSize(int buffersize)
+ {
+ m_buffersize = buffersize;
+ }
+
+ virtual void setName(std::string name)
+ {
+ m_name = name;
+ }
+};
+
+void JackDevice::registerPlugin()
+{
+ if(loadJACK())
+ DeviceManager::registerDevice("JACK", std::shared_ptr<IDeviceFactory>(new JackDeviceFactory));
+}
+
+#ifdef JACK_PLUGIN
+extern "C" AUD_PLUGIN_API void registerPlugin()
+{
+ JackDevice::registerPlugin();
+}
+
+extern "C" AUD_PLUGIN_API const char* getName()
+{
+ return "JACK";
+}
+#endif
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/plugins/jack/JackDevice.h b/extern/audaspace/plugins/jack/JackDevice.h
new file mode 100644
index 00000000000..72143eda149
--- /dev/null
+++ b/extern/audaspace/plugins/jack/JackDevice.h
@@ -0,0 +1,204 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+#ifdef JACK_PLUGIN
+#define AUD_BUILD_PLUGIN
+#endif
+
+/**
+ * @file JackDevice.h
+ * @ingroup plugin
+ * The JackDevice class.
+ */
+
+#include "JackSynchronizer.h"
+#include "devices/SoftwareDevice.h"
+#include "util/Buffer.h"
+
+#include <string>
+#include <condition_variable>
+#include <thread>
+#include <jack/jack.h>
+#include <jack/ringbuffer.h>
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This device plays back through JACK.
+ */
+class AUD_PLUGIN_API JackDevice : public SoftwareDevice
+{
+private:
+ /**
+ * The output ports of jack.
+ */
+ jack_port_t** m_ports;
+
+ /**
+ * The jack client.
+ */
+ jack_client_t* m_client;
+
+ /**
+ * The output buffer.
+ */
+ Buffer m_buffer;
+
+ /**
+ * The deinterleaving buffer.
+ */
+ Buffer m_deinterleavebuf;
+
+ jack_ringbuffer_t** m_ringbuffers;
+
+ /**
+ * Whether the device is valid.
+ */
+ bool m_valid;
+
+ /// Synchronizer.
+ JackSynchronizer m_synchronizer;
+
+ /**
+ * Invalidates the jack device.
+ * \param data The jack device that gets invalidet by jack.
+ */
+ AUD_LOCAL static void jack_shutdown(void* data);
+
+ /**
+ * Mixes the next bytes into the buffer.
+ * \param length The length in samples to be filled.
+ * \param data A pointer to the jack device.
+ * \return 0 what shows success.
+ */
+ AUD_LOCAL static int jack_mix(jack_nframes_t length, void* data);
+
+ AUD_LOCAL static int jack_sync(jack_transport_state_t state, jack_position_t* pos, void* data);
+
+ /**
+ * Next JACK Transport state (-1 if not expected to change).
+ */
+ jack_transport_state_t m_nextState;
+
+ /**
+ * Current jack transport status.
+ */
+ jack_transport_state_t m_state;
+
+ /**
+ * Syncronisation state.
+ */
+ int m_sync;
+
+ /**
+ * External syncronisation callback function.
+ */
+ ISynchronizer::syncFunction m_syncFunc;
+
+ /**
+ * Data for the sync function.
+ */
+ void* m_syncFuncData;
+
+ /**
+ * The mixing thread.
+ */
+ std::thread m_mixingThread;
+
+ /**
+ * Mutex for mixing.
+ */
+ std::mutex m_mixingLock;
+
+ /**
+ * Condition for mixing.
+ */
+ std::condition_variable m_mixingCondition;
+
+ /**
+ * Updates the ring buffers.
+ */
+ AUD_LOCAL void updateRingBuffers();
+
+ // delete copy constructor and operator=
+ JackDevice(const JackDevice&) = delete;
+ JackDevice& operator=(const JackDevice&) = delete;
+
+protected:
+ virtual void playing(bool playing);
+
+public:
+ /**
+ * Creates a JACK client for audio output.
+ * \param name The client name.
+ * \param specs The wanted audio specification, where only the channel count
+ * is important.
+ * \param buffersize The size of the internal buffer.
+ * \exception Exception Thrown if the audio device cannot be opened.
+ */
+ JackDevice(std::string name, DeviceSpecs specs, int buffersize = AUD_DEFAULT_BUFFER_SIZE);
+
+ /**
+ * Closes the JACK client.
+ */
+ virtual ~JackDevice();
+
+ virtual ISynchronizer* getSynchronizer();
+
+ /**
+ * Starts jack transport playback.
+ */
+ void startPlayback();
+
+ /**
+ * Stops jack transport playback.
+ */
+ void stopPlayback();
+
+ /**
+ * Seeks jack transport playback.
+ * \param time The time to seek to.
+ */
+ void seekPlayback(float time);
+
+ /**
+ * Sets the sync callback for jack transport playback.
+ * \param sync The callback function.
+ * \param data The data for the function.
+ */
+ void setSyncCallback(ISynchronizer::syncFunction sync, void* data);
+
+ /**
+ * Retrieves the jack transport playback time.
+ * \return The current time position.
+ */
+ float getPlaybackPosition();
+
+ /**
+ * Returns whether jack transport plays back.
+ * \return Whether jack transport plays back.
+ */
+ bool doesPlayback();
+
+ /**
+ * Registers this plugin.
+ */
+ static void registerPlugin();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/plugins/jack/JackLibrary.cpp b/extern/audaspace/plugins/jack/JackLibrary.cpp
new file mode 100644
index 00000000000..92462a34cca
--- /dev/null
+++ b/extern/audaspace/plugins/jack/JackLibrary.cpp
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#define JACK_LIBRARY_IMPLEMENTATION
+
+#include <string>
+#include <array>
+
+#include "JackLibrary.h"
+
+#ifdef DYNLOAD_JACK
+#include "plugin/PluginManager.h"
+#endif
+
+AUD_NAMESPACE_BEGIN
+
+bool loadJACK()
+{
+#ifdef DYNLOAD_JACK
+ std::array<const std::string, 5> names = {"libjack.so", "libjack.so.0", "libjack.so.1", "libjack.so.2", "libjack.dll"};
+
+ void* handle = nullptr;
+
+ for(auto& name : names)
+ {
+ handle = PluginManager::openLibrary(name);
+ if(handle)
+ break;
+ }
+
+ if (!handle)
+ return false;
+
+#define JACK_SYMBOL(sym) AUD_##sym = reinterpret_cast<decltype(&sym)>(PluginManager::lookupLibrary(handle, #sym))
+#else
+#define JACK_SYMBOL(sym) AUD_##sym = &sym
+#endif
+
+#include "JackSymbols.h"
+
+#undef JACK_SYMBOL
+
+ return AUD_jack_client_open != nullptr;
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/plugins/jack/JackLibrary.h b/extern/audaspace/plugins/jack/JackLibrary.h
new file mode 100644
index 00000000000..4e210852702
--- /dev/null
+++ b/extern/audaspace/plugins/jack/JackLibrary.h
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+#ifdef JACK_PLUGIN
+#define AUD_BUILD_PLUGIN
+#endif
+
+/**
+ * @file JackDevice.h
+ * @ingroup plugin
+ * The JackDevice class.
+ */
+
+#include "Audaspace.h"
+
+#include <jack/jack.h>
+#include <jack/ringbuffer.h>
+
+AUD_NAMESPACE_BEGIN
+
+#ifdef JACK_LIBRARY_IMPLEMENTATION
+#define JACK_SYMBOL(sym) decltype(&sym) AUD_##sym
+#else
+#define JACK_SYMBOL(sym) extern decltype(&sym) AUD_##sym
+#endif
+
+#include "JackSymbols.h"
+
+#undef JACK_SYMBOL
+
+bool loadJACK();
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/plugins/jack/JackSymbols.h b/extern/audaspace/plugins/jack/JackSymbols.h
new file mode 100644
index 00000000000..f8e22a7da34
--- /dev/null
+++ b/extern/audaspace/plugins/jack/JackSymbols.h
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+JACK_SYMBOL(jack_transport_query);
+JACK_SYMBOL(jack_transport_locate);
+
+JACK_SYMBOL(jack_transport_start);
+JACK_SYMBOL(jack_transport_stop);
+
+JACK_SYMBOL(jack_ringbuffer_reset);
+JACK_SYMBOL(jack_ringbuffer_write);
+JACK_SYMBOL(jack_ringbuffer_write_space);
+JACK_SYMBOL(jack_ringbuffer_write_advance);
+JACK_SYMBOL(jack_ringbuffer_read);
+JACK_SYMBOL(jack_ringbuffer_create);
+JACK_SYMBOL(jack_ringbuffer_free);
+JACK_SYMBOL(jack_ringbuffer_read_space);
+JACK_SYMBOL(jack_set_sync_callback);
+
+JACK_SYMBOL(jack_port_get_buffer);
+
+JACK_SYMBOL(jack_client_open);
+JACK_SYMBOL(jack_set_process_callback);
+JACK_SYMBOL(jack_on_shutdown);
+JACK_SYMBOL(jack_port_register);
+JACK_SYMBOL(jack_client_close);
+JACK_SYMBOL(jack_get_sample_rate);
+JACK_SYMBOL(jack_activate);
+JACK_SYMBOL(jack_get_ports);
+JACK_SYMBOL(jack_port_name);
+JACK_SYMBOL(jack_connect);
+JACK_SYMBOL(jack_free);
diff --git a/extern/audaspace/plugins/jack/JackSynchronizer.cpp b/extern/audaspace/plugins/jack/JackSynchronizer.cpp
new file mode 100644
index 00000000000..cd4c448786d
--- /dev/null
+++ b/extern/audaspace/plugins/jack/JackSynchronizer.cpp
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "JackSynchronizer.h"
+
+#include "JackDevice.h"
+
+AUD_NAMESPACE_BEGIN
+
+JackSynchronizer::JackSynchronizer(JackDevice* device) :
+ m_device(device)
+{
+}
+
+void JackSynchronizer::seek(std::shared_ptr<IHandle> handle, float time)
+{
+ m_device->seekPlayback(time);
+}
+
+float JackSynchronizer::getPosition(std::shared_ptr<IHandle> handle)
+{
+ return m_device->getPlaybackPosition();
+}
+
+void JackSynchronizer::play()
+{
+ m_device->startPlayback();
+}
+
+void JackSynchronizer::stop()
+{
+ m_device->stopPlayback();
+}
+
+void JackSynchronizer::setSyncCallback(ISynchronizer::syncFunction function, void* data)
+{
+ m_device->setSyncCallback(function, data);
+}
+
+int JackSynchronizer::isPlaying()
+{
+ return m_device->doesPlayback();
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/plugins/jack/JackSynchronizer.h b/extern/audaspace/plugins/jack/JackSynchronizer.h
new file mode 100644
index 00000000000..5c7341a7872
--- /dev/null
+++ b/extern/audaspace/plugins/jack/JackSynchronizer.h
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+#ifdef JACK_PLUGIN
+#define AUD_BUILD_PLUGIN
+#endif
+
+/**
+ * @file JackSynchronizer.h
+ * @ingroup plugin
+ * The JackSynchronizer class.
+ */
+
+#include "devices/ISynchronizer.h"
+
+AUD_NAMESPACE_BEGIN
+
+class JackDevice;
+
+/**
+ * This class is a Synchronizer implementation using JACK Transport.
+ */
+class AUD_PLUGIN_API JackSynchronizer : public ISynchronizer
+{
+private:
+ /// The device that is being synchronized.
+ JackDevice* m_device;
+
+public:
+ /**
+ * Creates a new JackSynchronizer.
+ * @param device The device that should be synchronized.
+ */
+ JackSynchronizer(JackDevice* device);
+
+ virtual void seek(std::shared_ptr<IHandle> handle, float time);
+ virtual float getPosition(std::shared_ptr<IHandle> handle);
+ virtual void play();
+ virtual void stop();
+ virtual void setSyncCallback(syncFunction function, void* data);
+ virtual int isPlaying();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/plugins/libsndfile/SndFile.cpp b/extern/audaspace/plugins/libsndfile/SndFile.cpp
new file mode 100644
index 00000000000..ba4ff24ad68
--- /dev/null
+++ b/extern/audaspace/plugins/libsndfile/SndFile.cpp
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "SndFile.h"
+#include "SndFileReader.h"
+#include "SndFileWriter.h"
+#include "file/FileManager.h"
+
+AUD_NAMESPACE_BEGIN
+
+SndFile::SndFile()
+{
+}
+
+void SndFile::registerPlugin()
+{
+ std::shared_ptr<SndFile> plugin = std::shared_ptr<SndFile>(new SndFile);
+ FileManager::registerInput(plugin);
+ FileManager::registerOutput(plugin);
+}
+
+std::shared_ptr<IReader> SndFile::createReader(std::string filename)
+{
+ return std::shared_ptr<IReader>(new SndFileReader(filename));
+}
+
+std::shared_ptr<IReader> SndFile::createReader(std::shared_ptr<Buffer> buffer)
+{
+ return std::shared_ptr<IReader>(new SndFileReader(buffer));
+}
+
+std::shared_ptr<IWriter> SndFile::createWriter(std::string filename, DeviceSpecs specs, Container format, Codec codec, unsigned int bitrate)
+{
+ return std::shared_ptr<IWriter>(new SndFileWriter(filename, specs, format, codec, bitrate));
+}
+
+#ifdef LIBSNDFILE_PLUGIN
+extern "C" AUD_PLUGIN_API void registerPlugin()
+{
+ SndFile::registerPlugin();
+}
+
+extern "C" AUD_PLUGIN_API const char* getName()
+{
+ return "LibSndFile";
+}
+#endif
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/plugins/libsndfile/SndFile.h b/extern/audaspace/plugins/libsndfile/SndFile.h
new file mode 100644
index 00000000000..61afed1d564
--- /dev/null
+++ b/extern/audaspace/plugins/libsndfile/SndFile.h
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+#ifdef LIBSNDFILE_PLUGIN
+#define AUD_BUILD_PLUGIN
+#endif
+
+/**
+ * @file SndFile.h
+ * @ingroup plugin
+ * The SndFile class.
+ */
+
+#include "file/IFileInput.h"
+#include "file/IFileOutput.h"
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This plugin class reads and writes sounds via libsndfile.
+ */
+class AUD_PLUGIN_API SndFile : public IFileInput, public IFileOutput
+{
+private:
+ // delete copy constructor and operator=
+ SndFile(const SndFile&) = delete;
+ SndFile& operator=(const SndFile&) = delete;
+
+public:
+ /**
+ * Creates a new libsndfile plugin.
+ */
+ SndFile();
+
+ /**
+ * Registers this plugin.
+ */
+ static void registerPlugin();
+
+ virtual std::shared_ptr<IReader> createReader(std::string filename);
+ virtual std::shared_ptr<IReader> createReader(std::shared_ptr<Buffer> buffer);
+ virtual std::shared_ptr<IWriter> createWriter(std::string filename, DeviceSpecs specs, Container format, Codec codec, unsigned int bitrate);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/plugins/libsndfile/SndFileReader.cpp b/extern/audaspace/plugins/libsndfile/SndFileReader.cpp
new file mode 100644
index 00000000000..d2d89814c07
--- /dev/null
+++ b/extern/audaspace/plugins/libsndfile/SndFileReader.cpp
@@ -0,0 +1,161 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "SndFileReader.h"
+#include "util/Buffer.h"
+#include "Exception.h"
+
+#include <cstring>
+
+AUD_NAMESPACE_BEGIN
+
+sf_count_t SndFileReader::vio_get_filelen(void* user_data)
+{
+ SndFileReader* reader = (SndFileReader*)user_data;
+ return reader->m_membuffer->getSize();
+}
+
+sf_count_t SndFileReader::vio_seek(sf_count_t offset, int whence,
+ void* user_data)
+{
+ SndFileReader* reader = (SndFileReader*)user_data;
+
+ switch(whence)
+ {
+ case SEEK_SET:
+ reader->m_memoffset = offset;
+ break;
+ case SEEK_CUR:
+ reader->m_memoffset = reader->m_memoffset + offset;
+ break;
+ case SEEK_END:
+ reader->m_memoffset = reader->m_membuffer->getSize() + offset;
+ break;
+ }
+
+ return reader->m_memoffset;
+}
+
+sf_count_t SndFileReader::vio_read(void* ptr, sf_count_t count,
+ void* user_data)
+{
+ SndFileReader* reader = (SndFileReader*)user_data;
+
+ if(reader->m_memoffset + count > reader->m_membuffer->getSize())
+ count = reader->m_membuffer->getSize() - reader->m_memoffset;
+
+ std::memcpy(ptr, ((data_t*)reader->m_membuffer->getBuffer()) +
+ reader->m_memoffset, count);
+ reader->m_memoffset += count;
+
+ return count;
+}
+
+sf_count_t SndFileReader::vio_tell(void* user_data)
+{
+ SndFileReader* reader = (SndFileReader*)user_data;
+
+ return reader->m_memoffset;
+}
+
+SndFileReader::SndFileReader(std::string filename) :
+ m_position(0)
+{
+ SF_INFO sfinfo;
+
+ sfinfo.format = 0;
+ m_sndfile = sf_open(filename.c_str(), SFM_READ, &sfinfo);
+
+ if(!m_sndfile)
+ AUD_THROW(FileException, "The file couldn't be opened with libsndfile.");
+
+ m_specs.channels = (Channels) sfinfo.channels;
+ m_specs.rate = (SampleRate) sfinfo.samplerate;
+ m_length = sfinfo.frames;
+ m_seekable = sfinfo.seekable;
+}
+
+SndFileReader::SndFileReader(std::shared_ptr<Buffer> buffer) :
+ m_position(0),
+ m_membuffer(buffer),
+ m_memoffset(0)
+{
+ m_vio.get_filelen = vio_get_filelen;
+ m_vio.read = vio_read;
+ m_vio.seek = vio_seek;
+ m_vio.tell = vio_tell;
+ m_vio.write = nullptr;
+
+ SF_INFO sfinfo;
+
+ sfinfo.format = 0;
+ m_sndfile = sf_open_virtual(&m_vio, SFM_READ, &sfinfo, this);
+
+ if(!m_sndfile)
+ AUD_THROW(FileException, "The buffer couldn't be read with libsndfile.");
+
+ m_specs.channels = (Channels) sfinfo.channels;
+ m_specs.rate = (SampleRate) sfinfo.samplerate;
+ m_length = sfinfo.frames;
+ m_seekable = sfinfo.seekable;
+}
+
+SndFileReader::~SndFileReader()
+{
+ sf_close(m_sndfile);
+}
+
+bool SndFileReader::isSeekable() const
+{
+ return m_seekable;
+}
+
+void SndFileReader::seek(int position)
+{
+ if(m_seekable)
+ {
+ position = sf_seek(m_sndfile, position, SEEK_SET);
+ m_position = position;
+ }
+}
+
+int SndFileReader::getLength() const
+{
+ return m_length;
+}
+
+int SndFileReader::getPosition() const
+{
+ return m_position;
+}
+
+Specs SndFileReader::getSpecs() const
+{
+ return m_specs;
+}
+
+void SndFileReader::read(int& length, bool& eos, sample_t* buffer)
+{
+ int olen = length;
+
+ length = sf_readf_float(m_sndfile, buffer, length);
+
+ m_position += length;
+
+ eos = length < olen;
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/plugins/libsndfile/SndFileReader.h b/extern/audaspace/plugins/libsndfile/SndFileReader.h
new file mode 100644
index 00000000000..081c29c686c
--- /dev/null
+++ b/extern/audaspace/plugins/libsndfile/SndFileReader.h
@@ -0,0 +1,125 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+#include "IReader.h"
+
+#ifdef LIBSNDFILE_PLUGIN
+#define AUD_BUILD_PLUGIN
+#endif
+
+/**
+ * @file SndFileReader.h
+ * @ingroup plugin
+ * The SndFileReader class.
+ */
+
+#include <string>
+#include <sndfile.h>
+#include <memory>
+
+AUD_NAMESPACE_BEGIN
+
+class Buffer;
+
+/**
+ * This class reads a sound file via libsndfile.
+ */
+class AUD_PLUGIN_API SndFileReader : public IReader
+{
+private:
+ /**
+ * The current position in samples.
+ */
+ int m_position;
+
+ /**
+ * The sample count in the file.
+ */
+ int m_length;
+
+ /**
+ * Whether the file is seekable.
+ */
+ bool m_seekable;
+
+ /**
+ * The specification of the audio data.
+ */
+ Specs m_specs;
+
+ /**
+ * The sndfile.
+ */
+ SNDFILE* m_sndfile;
+
+ /**
+ * The virtual IO structure for memory file reading.
+ */
+ SF_VIRTUAL_IO m_vio;
+
+ /**
+ * The pointer to the memory file.
+ */
+ std::shared_ptr<Buffer> m_membuffer;
+
+ /**
+ * The current reading pointer of the memory file.
+ */
+ int m_memoffset;
+
+ // Functions for libsndfile virtual IO functionality
+ AUD_LOCAL static sf_count_t vio_get_filelen(void* user_data);
+ AUD_LOCAL static sf_count_t vio_seek(sf_count_t offset, int whence, void* user_data);
+ AUD_LOCAL static sf_count_t vio_read(void* ptr, sf_count_t count, void* user_data);
+ AUD_LOCAL static sf_count_t vio_tell(void* user_data);
+
+ // delete copy constructor and operator=
+ SndFileReader(const SndFileReader&) = delete;
+ SndFileReader& operator=(const SndFileReader&) = delete;
+
+public:
+ /**
+ * Creates a new reader.
+ * \param filename The path to the file to be read.
+ * \exception Exception Thrown if the file specified does not exist or
+ * cannot be read with libsndfile.
+ */
+ SndFileReader(std::string filename);
+
+ /**
+ * Creates a new reader.
+ * \param buffer The buffer to read from.
+ * \exception Exception Thrown if the buffer specified cannot be read
+ * with libsndfile.
+ */
+ SndFileReader(std::shared_ptr<Buffer> buffer);
+
+ /**
+ * Destroys the reader and closes the file.
+ */
+ virtual ~SndFileReader();
+
+ virtual bool isSeekable() const;
+ virtual void seek(int position);
+ virtual int getLength() const;
+ virtual int getPosition() const;
+ virtual Specs getSpecs() const;
+ virtual void read(int& length, bool& eos, sample_t* buffer);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/plugins/libsndfile/SndFileWriter.cpp b/extern/audaspace/plugins/libsndfile/SndFileWriter.cpp
new file mode 100644
index 00000000000..d2ab117132d
--- /dev/null
+++ b/extern/audaspace/plugins/libsndfile/SndFileWriter.cpp
@@ -0,0 +1,128 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "SndFileWriter.h"
+#include "Exception.h"
+
+#include <cstring>
+
+AUD_NAMESPACE_BEGIN
+
+SndFileWriter::SndFileWriter(std::string filename, DeviceSpecs specs,
+ Container format, Codec codec, unsigned int bitrate) :
+ m_position(0), m_specs(specs)
+{
+ SF_INFO sfinfo;
+
+ sfinfo.channels = specs.channels;
+ sfinfo.samplerate = int(specs.rate);
+
+ switch(format)
+ {
+ case CONTAINER_FLAC:
+ sfinfo.format = SF_FORMAT_FLAC;
+ switch(specs.format)
+ {
+ case FORMAT_S16:
+ sfinfo.format |= SF_FORMAT_PCM_16;
+ break;
+ case FORMAT_S24:
+ sfinfo.format |= SF_FORMAT_PCM_24;
+ break;
+ case FORMAT_S32:
+ sfinfo.format |= SF_FORMAT_PCM_32;
+ break;
+ case FORMAT_FLOAT32:
+ sfinfo.format |= SF_FORMAT_FLOAT;
+ break;
+ case FORMAT_FLOAT64:
+ sfinfo.format |= SF_FORMAT_DOUBLE;
+ break;
+ default:
+ sfinfo.format = 0;
+ break;
+ }
+ break;
+ case CONTAINER_OGG:
+ if(codec == CODEC_VORBIS)
+ sfinfo.format = SF_FORMAT_OGG | SF_FORMAT_VORBIS;
+ else
+ sfinfo.format = 0;
+ break;
+ case CONTAINER_WAV:
+ sfinfo.format = SF_FORMAT_WAV;
+ switch(specs.format)
+ {
+ case FORMAT_U8:
+ sfinfo.format |= SF_FORMAT_PCM_U8;
+ break;
+ case FORMAT_S16:
+ sfinfo.format |= SF_FORMAT_PCM_16;
+ break;
+ case FORMAT_S24:
+ sfinfo.format |= SF_FORMAT_PCM_24;
+ break;
+ case FORMAT_S32:
+ sfinfo.format |= SF_FORMAT_PCM_32;
+ break;
+ case FORMAT_FLOAT32:
+ sfinfo.format |= SF_FORMAT_FLOAT;
+ break;
+ case FORMAT_FLOAT64:
+ sfinfo.format |= SF_FORMAT_DOUBLE;
+ break;
+ default:
+ sfinfo.format = 0;
+ break;
+ }
+ break;
+ default:
+ sfinfo.format = 0;
+ break;
+ }
+
+ if(sfinfo.format == 0)
+ AUD_THROW(FileException, "This format couldn't be written with libsndfile.");
+
+ m_sndfile = sf_open(filename.c_str(), SFM_WRITE, &sfinfo);
+
+ if(!m_sndfile)
+ AUD_THROW(FileException, "The file couldn't be written with libsndfile.");
+}
+
+SndFileWriter::~SndFileWriter()
+{
+ sf_close(m_sndfile);
+}
+
+int SndFileWriter::getPosition() const
+{
+ return m_position;
+}
+
+DeviceSpecs SndFileWriter::getSpecs() const
+{
+ return m_specs;
+}
+
+void SndFileWriter::write(unsigned int length, sample_t* buffer)
+{
+ length = sf_writef_float(m_sndfile, buffer, length);
+
+ m_position += length;
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/plugins/libsndfile/SndFileWriter.h b/extern/audaspace/plugins/libsndfile/SndFileWriter.h
new file mode 100644
index 00000000000..75d761f5163
--- /dev/null
+++ b/extern/audaspace/plugins/libsndfile/SndFileWriter.h
@@ -0,0 +1,84 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+#ifdef LIBSNDFILE_PLUGIN
+#define AUD_BUILD_PLUGIN
+#endif
+
+/**
+ * @file SndFileWriter.h
+ * @ingroup plugin
+ * The SndFileWriter class.
+ */
+
+#include "file/IWriter.h"
+
+#include <string>
+#include <sndfile.h>
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This class writes a sound file via libsndfile.
+ */
+class AUD_PLUGIN_API SndFileWriter : public IWriter
+{
+private:
+ /**
+ * The current position in samples.
+ */
+ int m_position;
+
+ /**
+ * The specification of the audio data.
+ */
+ DeviceSpecs m_specs;
+
+ /**
+ * The sndfile.
+ */
+ SNDFILE* m_sndfile;
+
+ // delete copy constructor and operator=
+ SndFileWriter(const SndFileWriter&) = delete;
+ SndFileWriter& operator=(const SndFileWriter&) = delete;
+
+public:
+ /**
+ * Creates a new writer.
+ * \param filename The path to the file to be read.
+ * \param specs The file's audio specification.
+ * \param format The file's container format.
+ * \param codec The codec used for encoding the audio data.
+ * \param bitrate The bitrate for encoding.
+ * \exception Exception Thrown if the file specified cannot be written
+ * with libsndfile.
+ */
+ SndFileWriter(std::string filename, DeviceSpecs specs, Container format, Codec codec, unsigned int bitrate);
+
+ /**
+ * Destroys the writer and closes the file.
+ */
+ virtual ~SndFileWriter();
+
+ virtual int getPosition() const;
+ virtual DeviceSpecs getSpecs() const;
+ virtual void write(unsigned int length, sample_t* buffer);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/plugins/openal/OpenALDevice.cpp b/extern/audaspace/plugins/openal/OpenALDevice.cpp
new file mode 100644
index 00000000000..2a609789a6d
--- /dev/null
+++ b/extern/audaspace/plugins/openal/OpenALDevice.cpp
@@ -0,0 +1,1490 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "OpenALDevice.h"
+#include "devices/DeviceManager.h"
+#include "devices/IDeviceFactory.h"
+#include "respec/ConverterReader.h"
+#include "Exception.h"
+#include "ISound.h"
+
+#include <chrono>
+#include <cstring>
+#include <iostream>
+
+AUD_NAMESPACE_BEGIN
+
+/******************************************************************************/
+/*********************** OpenALHandle Handle Code *************************/
+/******************************************************************************/
+
+bool OpenALDevice::OpenALHandle::pause(bool keep)
+{
+ if(m_status)
+ {
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(m_status == STATUS_PLAYING)
+ {
+ for(auto it = m_device->m_playingSounds.begin(); it != m_device->m_playingSounds.end(); it++)
+ {
+ if(it->get() == this)
+ {
+ std::shared_ptr<OpenALHandle> This = *it;
+
+ m_device->m_playingSounds.erase(it);
+ m_device->m_pausedSounds.push_back(This);
+
+ alSourcePause(m_source);
+
+ m_status = keep ? STATUS_STOPPED : STATUS_PAUSED;
+
+ return true;
+ }
+ }
+ }
+ }
+
+ return false;
+}
+
+OpenALDevice::OpenALHandle::OpenALHandle(OpenALDevice* device, ALenum format, std::shared_ptr<IReader> reader, bool keep) :
+ m_isBuffered(false), m_reader(reader), m_keep(keep), m_format(format),
+ m_eos(false), m_loopcount(0), m_stop(nullptr), m_stop_data(nullptr), m_status(STATUS_PLAYING),
+ m_device(device)
+{
+ DeviceSpecs specs = m_device->m_specs;
+ specs.specs = m_reader->getSpecs();
+
+ // OpenAL playback code
+ alGenBuffers(CYCLE_BUFFERS, m_buffers);
+ if(alGetError() != AL_NO_ERROR)
+ AUD_THROW(DeviceException, "Buffer generation failed while staring playback with OpenAL.");
+
+ try
+ {
+ m_device->m_buffer.assureSize(m_device->m_buffersize * AUD_DEVICE_SAMPLE_SIZE(specs));
+ int length;
+ bool eos;
+
+ for(m_current = 0; m_current < CYCLE_BUFFERS; m_current++)
+ {
+ length = m_device->m_buffersize;
+ reader->read(length, eos, m_device->m_buffer.getBuffer());
+
+ if(length == 0)
+ break;
+
+ alBufferData(m_buffers[m_current], m_format, m_device->m_buffer.getBuffer(), length * AUD_DEVICE_SAMPLE_SIZE(specs), specs.rate);
+
+ if(alGetError() != AL_NO_ERROR)
+ AUD_THROW(DeviceException, "Filling the buffer with data failed while starting playback with OpenAL.");
+ }
+
+ alGenSources(1, &m_source);
+ if(alGetError() != AL_NO_ERROR)
+ AUD_THROW(DeviceException, "Source generation failed while starting playback with OpenAL.");
+
+ try
+ {
+ alSourceQueueBuffers(m_source, m_current, m_buffers);
+ if(alGetError() != AL_NO_ERROR)
+ AUD_THROW(DeviceException, "Buffer queuing failed while starting playback with OpenAL.");
+ }
+ catch(Exception&)
+ {
+ alDeleteSources(1, &m_source);
+ throw;
+ }
+ }
+ catch(Exception&)
+ {
+ alDeleteBuffers(CYCLE_BUFFERS, m_buffers);
+ throw;
+ }
+ alSourcei(m_source, AL_SOURCE_RELATIVE, 1);
+}
+
+bool OpenALDevice::OpenALHandle::pause()
+{
+ return pause(false);
+}
+
+bool OpenALDevice::OpenALHandle::resume()
+{
+ if(m_status)
+ {
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(m_status == STATUS_PAUSED)
+ {
+ for(auto it = m_device->m_pausedSounds.begin(); it != m_device->m_pausedSounds.end(); it++)
+ {
+ if(it->get() == this)
+ {
+ std::shared_ptr<OpenALHandle> This = *it;
+
+ m_device->m_pausedSounds.erase(it);
+ m_device->m_playingSounds.push_back(This);
+
+ m_device->start();
+ m_status = STATUS_PLAYING;
+
+ return true;
+ }
+ }
+ }
+ }
+
+ return false;
+}
+
+bool OpenALDevice::OpenALHandle::stop()
+{
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return false;
+
+ m_status = STATUS_INVALID;
+
+ alDeleteSources(1, &m_source);
+ if(!m_isBuffered)
+ alDeleteBuffers(CYCLE_BUFFERS, m_buffers);
+
+ for(auto it = m_device->m_playingSounds.begin(); it != m_device->m_playingSounds.end(); it++)
+ {
+ if(it->get() == this)
+ {
+ std::shared_ptr<OpenALHandle> This = *it;
+
+ m_device->m_playingSounds.erase(it);
+
+ return true;
+ }
+ }
+
+ for(auto it = m_device->m_pausedSounds.begin(); it != m_device->m_pausedSounds.end(); it++)
+ {
+ if(it->get() == this)
+ {
+ std::shared_ptr<OpenALHandle> This = *it;
+
+ m_device->m_pausedSounds.erase(it);
+
+ return true;
+ }
+ }
+
+ return false;
+}
+
+bool OpenALDevice::OpenALHandle::getKeep()
+{
+ if(m_status)
+ return m_keep;
+
+ return false;
+}
+
+bool OpenALDevice::OpenALHandle::setKeep(bool keep)
+{
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return false;
+
+ m_keep = keep;
+
+ return true;
+}
+
+bool OpenALDevice::OpenALHandle::seek(float position)
+{
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return false;
+
+ if(m_isBuffered)
+ alSourcef(m_source, AL_SEC_OFFSET, position);
+ else
+ {
+ m_reader->seek((int)(position * m_reader->getSpecs().rate));
+ m_eos = false;
+
+ ALint info;
+
+ alGetSourcei(m_source, AL_SOURCE_STATE, &info);
+
+ // we need to stop playing sounds as well to clear the buffers
+ // this might cause clicks, but fixes a bug regarding position determination
+ if(info == AL_PAUSED || info == AL_PLAYING)
+ alSourceStop(m_source);
+
+ alSourcei(m_source, AL_BUFFER, 0);
+
+ ALenum err;
+ if((err = alGetError()) == AL_NO_ERROR)
+ {
+ int length;
+ DeviceSpecs specs = m_device->m_specs;
+ specs.specs = m_reader->getSpecs();
+ m_device->m_buffer.assureSize(m_device->m_buffersize * AUD_DEVICE_SAMPLE_SIZE(specs));
+
+ for(m_current = 0; m_current < CYCLE_BUFFERS; m_current++)
+ {
+ length = m_device->m_buffersize;
+
+ m_reader->read(length, m_eos, m_device->m_buffer.getBuffer());
+
+ if(length == 0)
+ break;
+
+ alBufferData(m_buffers[m_current], m_format, m_device->m_buffer.getBuffer(), length * AUD_DEVICE_SAMPLE_SIZE(specs), specs.rate);
+
+ if(alGetError() != AL_NO_ERROR)
+ break;
+ }
+
+ if(m_loopcount != 0)
+ m_eos = false;
+
+ alSourceQueueBuffers(m_source, m_current, m_buffers);
+ }
+
+ alSourceRewind(m_source);
+ }
+
+ if(m_status == STATUS_STOPPED)
+ m_status = STATUS_PAUSED;
+
+ return true;
+}
+
+float OpenALDevice::OpenALHandle::getPosition()
+{
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return 0.0f;
+
+ float position = 0.0f;
+
+ alGetSourcef(m_source, AL_SEC_OFFSET, &position);
+
+ if(!m_isBuffered)
+ {
+ int queued;
+
+ // this usually always returns CYCLE_BUFFERS
+ alGetSourcei(m_source, AL_BUFFERS_QUEUED, &queued);
+
+ Specs specs = m_reader->getSpecs();
+ position += (m_reader->getPosition() - m_device->m_buffersize * queued) / (float)specs.rate;
+ }
+
+ return position;
+}
+
+Status OpenALDevice::OpenALHandle::getStatus()
+{
+ return m_status;
+}
+
+float OpenALDevice::OpenALHandle::getVolume()
+{
+ float result = std::numeric_limits<float>::quiet_NaN();
+
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return result;
+
+ alGetSourcef(m_source, AL_GAIN, &result);
+
+ return result;
+}
+
+bool OpenALDevice::OpenALHandle::setVolume(float volume)
+{
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return false;
+
+ if(volume >= 0.0f)
+ alSourcef(m_source, AL_GAIN, volume);
+
+ return true;
+}
+
+float OpenALDevice::OpenALHandle::getPitch()
+{
+ float result = std::numeric_limits<float>::quiet_NaN();
+
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return result;
+
+ alGetSourcef(m_source, AL_PITCH, &result);
+
+ return result;
+}
+
+bool OpenALDevice::OpenALHandle::setPitch(float pitch)
+{
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return false;
+
+ if(pitch > 0.0f)
+ alSourcef(m_source, AL_PITCH, pitch);
+
+ return true;
+}
+
+int OpenALDevice::OpenALHandle::getLoopCount()
+{
+ if(!m_status)
+ return 0;
+ return m_loopcount;
+}
+
+bool OpenALDevice::OpenALHandle::setLoopCount(int count)
+{
+ if(!m_status)
+ return false;
+
+ if(m_status == STATUS_STOPPED && (count > m_loopcount || count < 0))
+ m_status = STATUS_PAUSED;
+
+ m_loopcount = count;
+
+ return true;
+}
+
+bool OpenALDevice::OpenALHandle::setStopCallback(stopCallback callback, void* data)
+{
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return false;
+
+ m_stop = callback;
+ m_stop_data = data;
+
+ return true;
+}
+
+/******************************************************************************/
+/********************* OpenALHandle 3DHandle Code *************************/
+/******************************************************************************/
+
+Vector3 OpenALDevice::OpenALHandle::getLocation()
+{
+ Vector3 result = Vector3(0, 0, 0);
+
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return result;
+
+ ALfloat p[3];
+ alGetSourcefv(m_source, AL_POSITION, p);
+
+ result = Vector3(p[0], p[1], p[2]);
+
+ return result;
+}
+
+bool OpenALDevice::OpenALHandle::setLocation(const Vector3& location)
+{
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return false;
+
+ alSourcefv(m_source, AL_POSITION, (ALfloat*)location.get());
+
+ return true;
+}
+
+Vector3 OpenALDevice::OpenALHandle::getVelocity()
+{
+ Vector3 result = Vector3(0, 0, 0);
+
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return result;
+
+ ALfloat v[3];
+ alGetSourcefv(m_source, AL_VELOCITY, v);
+
+ result = Vector3(v[0], v[1], v[2]);
+
+ return result;
+}
+
+bool OpenALDevice::OpenALHandle::setVelocity(const Vector3& velocity)
+{
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return false;
+
+ alSourcefv(m_source, AL_VELOCITY, (ALfloat*)velocity.get());
+
+ return true;
+}
+
+Quaternion OpenALDevice::OpenALHandle::getOrientation()
+{
+ return m_orientation;
+}
+
+bool OpenALDevice::OpenALHandle::setOrientation(const Quaternion& orientation)
+{
+ ALfloat direction[3];
+ direction[0] = -2 * (orientation.w() * orientation.y() +
+ orientation.x() * orientation.z());
+ direction[1] = 2 * (orientation.x() * orientation.w() -
+ orientation.z() * orientation.y());
+ direction[2] = 2 * (orientation.x() * orientation.x() +
+ orientation.y() * orientation.y()) - 1;
+
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return false;
+
+ alSourcefv(m_source, AL_DIRECTION, direction);
+
+ m_orientation = orientation;
+
+ return true;
+}
+
+bool OpenALDevice::OpenALHandle::isRelative()
+{
+ int result;
+
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return false;
+
+ alGetSourcei(m_source, AL_SOURCE_RELATIVE, &result);
+
+ return result;
+}
+
+bool OpenALDevice::OpenALHandle::setRelative(bool relative)
+{
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return false;
+
+ alSourcei(m_source, AL_SOURCE_RELATIVE, relative);
+
+ return true;
+}
+
+float OpenALDevice::OpenALHandle::getVolumeMaximum()
+{
+ float result = std::numeric_limits<float>::quiet_NaN();
+
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return result;
+
+ alGetSourcef(m_source, AL_MAX_GAIN, &result);
+
+ return result;
+}
+
+bool OpenALDevice::OpenALHandle::setVolumeMaximum(float volume)
+{
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return false;
+
+ if(volume >= 0.0f && volume <= 1.0f)
+ alSourcef(m_source, AL_MAX_GAIN, volume);
+
+ return true;
+}
+
+float OpenALDevice::OpenALHandle::getVolumeMinimum()
+{
+ float result = std::numeric_limits<float>::quiet_NaN();
+
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return result;
+
+ alGetSourcef(m_source, AL_MIN_GAIN, &result);
+
+ return result;
+}
+
+bool OpenALDevice::OpenALHandle::setVolumeMinimum(float volume)
+{
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return false;
+
+ if(volume >= 0.0f && volume <= 1.0f)
+ alSourcef(m_source, AL_MIN_GAIN, volume);
+
+ return true;
+}
+
+float OpenALDevice::OpenALHandle::getDistanceMaximum()
+{
+ float result = std::numeric_limits<float>::quiet_NaN();
+
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return result;
+
+ alGetSourcef(m_source, AL_MAX_DISTANCE, &result);
+
+ return result;
+}
+
+bool OpenALDevice::OpenALHandle::setDistanceMaximum(float distance)
+{
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return false;
+
+ if(distance >= 0.0f)
+ alSourcef(m_source, AL_MAX_DISTANCE, distance);
+
+ return true;
+}
+
+float OpenALDevice::OpenALHandle::getDistanceReference()
+{
+ float result = std::numeric_limits<float>::quiet_NaN();
+
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return result;
+
+ alGetSourcef(m_source, AL_REFERENCE_DISTANCE, &result);
+
+ return result;
+}
+
+bool OpenALDevice::OpenALHandle::setDistanceReference(float distance)
+{
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return false;
+
+ if(distance >= 0.0f)
+ alSourcef(m_source, AL_REFERENCE_DISTANCE, distance);
+
+ return true;
+}
+
+float OpenALDevice::OpenALHandle::getAttenuation()
+{
+ float result = std::numeric_limits<float>::quiet_NaN();
+
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return result;
+
+ alGetSourcef(m_source, AL_ROLLOFF_FACTOR, &result);
+
+ return result;
+}
+
+bool OpenALDevice::OpenALHandle::setAttenuation(float factor)
+{
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return false;
+
+ if(factor >= 0.0f)
+ alSourcef(m_source, AL_ROLLOFF_FACTOR, factor);
+
+ return true;
+}
+
+float OpenALDevice::OpenALHandle::getConeAngleOuter()
+{
+ float result = std::numeric_limits<float>::quiet_NaN();
+
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return result;
+
+ alGetSourcef(m_source, AL_CONE_OUTER_ANGLE, &result);
+
+ return result;
+}
+
+bool OpenALDevice::OpenALHandle::setConeAngleOuter(float angle)
+{
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return false;
+
+ alSourcef(m_source, AL_CONE_OUTER_ANGLE, angle);
+
+ return true;
+}
+
+float OpenALDevice::OpenALHandle::getConeAngleInner()
+{
+ float result = std::numeric_limits<float>::quiet_NaN();
+
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return result;
+
+ alGetSourcef(m_source, AL_CONE_INNER_ANGLE, &result);
+
+ return result;
+}
+
+bool OpenALDevice::OpenALHandle::setConeAngleInner(float angle)
+{
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return false;
+
+ alSourcef(m_source, AL_CONE_INNER_ANGLE, angle);
+
+ return true;
+}
+
+float OpenALDevice::OpenALHandle::getConeVolumeOuter()
+{
+ float result = std::numeric_limits<float>::quiet_NaN();
+
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return result;
+
+ alGetSourcef(m_source, AL_CONE_OUTER_GAIN, &result);
+
+ return result;
+}
+
+bool OpenALDevice::OpenALHandle::setConeVolumeOuter(float volume)
+{
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return false;
+
+ if(volume >= 0.0f && volume <= 1.0f)
+ alSourcef(m_source, AL_CONE_OUTER_GAIN, volume);
+
+ return true;
+}
+
+/******************************************************************************/
+/**************************** Threading Code **********************************/
+/******************************************************************************/
+
+void OpenALDevice::start()
+{
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ if(!m_playing)
+ {
+ if(m_thread.joinable())
+ m_thread.join();
+
+ m_thread = std::thread(&OpenALDevice::updateStreams, this);
+
+ m_playing = true;
+ }
+}
+
+void OpenALDevice::updateStreams()
+{
+ int length;
+
+ ALint info;
+ DeviceSpecs specs = m_specs;
+ ALCenum cerr;
+ std::list<std::shared_ptr<OpenALHandle> > stopSounds;
+ std::list<std::shared_ptr<OpenALHandle> > pauseSounds;
+
+ auto sleepDuration = std::chrono::milliseconds(20);
+
+ for(;;)
+ {
+ lock();
+
+ alcSuspendContext(m_context);
+ cerr = alcGetError(m_device);
+ if(cerr == ALC_NO_ERROR)
+ {
+ // for all sounds
+ for(auto& sound : m_playingSounds)
+ {
+ // is it a streamed sound?
+ if(!sound->m_isBuffered)
+ {
+ // check for buffer refilling
+ alGetSourcei(sound->m_source, AL_BUFFERS_PROCESSED, &info);
+
+ info += (OpenALHandle::CYCLE_BUFFERS - sound->m_current);
+
+ if(info)
+ {
+ specs.specs = sound->m_reader->getSpecs();
+ m_buffer.assureSize(m_buffersize * AUD_DEVICE_SAMPLE_SIZE(specs));
+
+ // for all empty buffers
+ while(info--)
+ {
+ // if there's still data to play back
+ if(!sound->m_eos)
+ {
+ // read data
+ length = m_buffersize;
+
+ try
+ {
+ sound->m_reader->read(length, sound->m_eos, m_buffer.getBuffer());
+
+ // looping necessary?
+ if(length == 0 && sound->m_loopcount)
+ {
+ if(sound->m_loopcount > 0)
+ sound->m_loopcount--;
+
+ sound->m_reader->seek(0);
+
+ length = m_buffersize;
+ sound->m_reader->read(length, sound->m_eos, m_buffer.getBuffer());
+ }
+ }
+ catch(Exception& e)
+ {
+ length = 0;
+ std::cerr << "Caught exception while reading sound data during playback with OpenAL: " << e.getMessage() << std::endl;
+ }
+
+ if(sound->m_loopcount != 0)
+ sound->m_eos = false;
+
+ // read nothing?
+ if(length == 0)
+ {
+ break;
+ }
+
+ ALuint buffer;
+
+ if(sound->m_current < OpenALHandle::CYCLE_BUFFERS)
+ buffer = sound->m_buffers[sound->m_current++];
+ else
+ alSourceUnqueueBuffers(sound->m_source, 1, &buffer);
+
+ ALenum err;
+ if((err = alGetError()) != AL_NO_ERROR)
+ {
+ sound->m_eos = true;
+ break;
+ }
+
+ // fill with new data
+ alBufferData(buffer, sound->m_format, m_buffer.getBuffer(), length * AUD_DEVICE_SAMPLE_SIZE(specs), specs.rate);
+
+ if((err = alGetError()) != AL_NO_ERROR)
+ {
+ sound->m_eos = true;
+ break;
+ }
+
+ // and queue again
+ alSourceQueueBuffers(sound->m_source, 1,&buffer);
+ if(alGetError() != AL_NO_ERROR)
+ {
+ sound->m_eos = true;
+ break;
+ }
+ }
+ else
+ break;
+ }
+ }
+ }
+
+ // check if the sound has been stopped
+ alGetSourcei(sound->m_source, AL_SOURCE_STATE, &info);
+
+ if(info != AL_PLAYING)
+ {
+ // if it really stopped
+ if(sound->m_eos && info != AL_INITIAL)
+ {
+ if(sound->m_stop)
+ sound->m_stop(sound->m_stop_data);
+
+ // pause or
+ if(sound->m_keep)
+ pauseSounds.push_back(sound);
+ // stop
+ else
+ stopSounds.push_back(sound);
+ }
+ // continue playing
+ else
+ alSourcePlay(sound->m_source);
+ }
+ }
+
+ for(auto& sound : pauseSounds)
+ sound->pause(true);
+
+ for(auto& sound : stopSounds)
+ sound->stop();
+
+ pauseSounds.clear();
+ stopSounds.clear();
+
+ alcProcessContext(m_context);
+ }
+
+ // stop thread
+ if(m_playingSounds.empty() || (cerr != ALC_NO_ERROR))
+ {
+ m_playing = false;
+ unlock();
+
+ return;
+ }
+
+ unlock();
+
+ std::this_thread::sleep_for(sleepDuration);
+ }
+}
+
+/******************************************************************************/
+/**************************** IDevice Code ************************************/
+/******************************************************************************/
+
+OpenALDevice::OpenALDevice(DeviceSpecs specs, int buffersize, std::string name) :
+ m_playing(false), m_buffersize(buffersize)
+{
+ // cannot determine how many channels or which format OpenAL uses, but
+ // it at least is able to play 16 bit stereo audio
+ specs.format = FORMAT_S16;
+
+ if(name.empty())
+ m_device = alcOpenDevice(nullptr);
+ else
+ m_device = alcOpenDevice(name.c_str());
+
+ if(!m_device)
+ AUD_THROW(DeviceException, "The audio device couldn't be opened with OpenAL.");
+
+ // at least try to set the frequency
+ ALCint attribs[] = { ALC_FREQUENCY, (ALCint)specs.rate, 0 };
+ ALCint* attributes = attribs;
+ if(specs.rate == RATE_INVALID)
+ attributes = nullptr;
+
+ m_context = alcCreateContext(m_device, attributes);
+ alcMakeContextCurrent(m_context);
+
+ alcGetIntegerv(m_device, ALC_FREQUENCY, 1, (ALCint*)&specs.rate);
+
+ // check for specific formats and channel counts to be played back
+ if(alIsExtensionPresent("AL_EXT_FLOAT32") == AL_TRUE)
+ specs.format = FORMAT_FLOAT32;
+
+ m_useMC = alIsExtensionPresent("AL_EXT_MCFORMATS") == AL_TRUE;
+
+ if((!m_useMC && specs.channels > CHANNELS_STEREO) ||
+ specs.channels == CHANNELS_STEREO_LFE ||
+ specs.channels == CHANNELS_SURROUND5)
+ specs.channels = CHANNELS_STEREO;
+
+ alGetError();
+ alcGetError(m_device);
+
+ m_specs = specs;
+}
+
+OpenALDevice::~OpenALDevice()
+{
+ lock();
+ alcSuspendContext(m_context);
+
+ while(!m_playingSounds.empty())
+ m_playingSounds.front()->stop();
+
+ while(!m_pausedSounds.empty())
+ m_pausedSounds.front()->stop();
+
+ alcProcessContext(m_context);
+
+ // wait for the thread to stop
+ unlock();
+ if(m_thread.joinable())
+ m_thread.join();
+
+ // quit OpenAL
+ alcMakeContextCurrent(nullptr);
+ alcDestroyContext(m_context);
+ alcCloseDevice(m_device);
+}
+
+DeviceSpecs OpenALDevice::getSpecs() const
+{
+ return m_specs;
+}
+
+bool OpenALDevice::getFormat(ALenum &format, Specs specs)
+{
+ bool valid = true;
+ format = 0;
+
+ switch(m_specs.format)
+ {
+ case FORMAT_S16:
+ switch(specs.channels)
+ {
+ case CHANNELS_MONO:
+ format = AL_FORMAT_MONO16;
+ break;
+ case CHANNELS_STEREO:
+ format = AL_FORMAT_STEREO16;
+ break;
+ case CHANNELS_SURROUND4:
+ if(m_useMC)
+ {
+ format = alGetEnumValue("AL_FORMAT_QUAD16");
+ break;
+ }
+ case CHANNELS_SURROUND51:
+ if(m_useMC)
+ {
+ format = alGetEnumValue("AL_FORMAT_51CHN16");
+ break;
+ }
+ case CHANNELS_SURROUND61:
+ if(m_useMC)
+ {
+ format = alGetEnumValue("AL_FORMAT_61CHN16");
+ break;
+ }
+ case CHANNELS_SURROUND71:
+ if(m_useMC)
+ {
+ format = alGetEnumValue("AL_FORMAT_71CHN16");
+ break;
+ }
+ default:
+ valid = false;
+ }
+ break;
+ case FORMAT_FLOAT32:
+ switch(specs.channels)
+ {
+ case CHANNELS_MONO:
+ format = alGetEnumValue("AL_FORMAT_MONO_FLOAT32");
+ break;
+ case CHANNELS_STEREO:
+ format = alGetEnumValue("AL_FORMAT_STEREO_FLOAT32");
+ break;
+ case CHANNELS_SURROUND4:
+ if(m_useMC)
+ {
+ format = alGetEnumValue("AL_FORMAT_QUAD32");
+ break;
+ }
+ case CHANNELS_SURROUND51:
+ if(m_useMC)
+ {
+ format = alGetEnumValue("AL_FORMAT_51CHN32");
+ break;
+ }
+ case CHANNELS_SURROUND61:
+ if(m_useMC)
+ {
+ format = alGetEnumValue("AL_FORMAT_61CHN32");
+ break;
+ }
+ case CHANNELS_SURROUND71:
+ if(m_useMC)
+ {
+ format = alGetEnumValue("AL_FORMAT_71CHN32");
+ break;
+ }
+ default:
+ valid = false;
+ }
+ break;
+ default:
+ valid = false;
+ }
+
+ if(!format)
+ valid = false;
+
+ return valid;
+}
+
+std::shared_ptr<IHandle> OpenALDevice::play(std::shared_ptr<IReader> reader, bool keep)
+{
+ Specs specs = reader->getSpecs();
+
+ // check format
+ if(specs.channels == CHANNELS_INVALID)
+ return std::shared_ptr<IHandle>();
+
+ if(m_specs.format != FORMAT_FLOAT32)
+ reader = std::shared_ptr<IReader>(new ConverterReader(reader, m_specs));
+
+ ALenum format;
+
+ if(!getFormat(format, specs))
+ return std::shared_ptr<IHandle>();
+
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ alcSuspendContext(m_context);
+
+ std::shared_ptr<OpenALDevice::OpenALHandle> sound;
+
+ try
+ {
+ // create the handle
+ sound = std::shared_ptr<OpenALDevice::OpenALHandle>(new OpenALDevice::OpenALHandle(this, format, reader, keep));
+ }
+ catch(Exception&)
+ {
+ alcProcessContext(m_context);
+ throw;
+ }
+
+ alcProcessContext(m_context);
+
+ // play sound
+ m_playingSounds.push_back(sound);
+
+ start();
+
+ return std::shared_ptr<IHandle>(sound);
+}
+
+std::shared_ptr<IHandle> OpenALDevice::play(std::shared_ptr<ISound> sound, bool keep)
+{
+ return play(sound->createReader(), keep);
+}
+
+void OpenALDevice::stopAll()
+{
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ alcSuspendContext(m_context);
+
+ while(!m_playingSounds.empty())
+ m_playingSounds.front()->stop();
+
+ while(!m_pausedSounds.empty())
+ m_pausedSounds.front()->stop();
+
+ alcProcessContext(m_context);
+}
+
+void OpenALDevice::lock()
+{
+ m_mutex.lock();
+}
+
+void OpenALDevice::unlock()
+{
+ m_mutex.unlock();
+}
+
+float OpenALDevice::getVolume() const
+{
+ float result;
+
+ alGetListenerf(AL_GAIN, &result);
+ return result;
+}
+
+void OpenALDevice::setVolume(float volume)
+{
+ if(volume < 0.0f)
+ return;
+
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ alListenerf(AL_GAIN, volume);
+}
+
+ISynchronizer* OpenALDevice::getSynchronizer()
+{
+ return &m_synchronizer;
+}
+
+/******************************************************************************/
+/**************************** 3D Device Code **********************************/
+/******************************************************************************/
+
+Vector3 OpenALDevice::getListenerLocation() const
+{
+ ALfloat p[3];
+
+ alGetListenerfv(AL_POSITION, p);
+ return Vector3(p[0], p[1], p[2]);
+}
+
+void OpenALDevice::setListenerLocation(const Vector3& location)
+{
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ alListenerfv(AL_POSITION, (ALfloat*)location.get());
+}
+
+Vector3 OpenALDevice::getListenerVelocity() const
+{
+ ALfloat v[3];
+
+ alGetListenerfv(AL_VELOCITY, v);
+ return Vector3(v[0], v[1], v[2]);
+}
+
+void OpenALDevice::setListenerVelocity(const Vector3& velocity)
+{
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ alListenerfv(AL_VELOCITY, (ALfloat*)velocity.get());
+}
+
+Quaternion OpenALDevice::getListenerOrientation() const
+{
+ return m_orientation;
+}
+
+void OpenALDevice::setListenerOrientation(const Quaternion& orientation)
+{
+ ALfloat direction[6];
+
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ direction[0] = -2 * (orientation.w() * orientation.y() +
+ orientation.x() * orientation.z());
+ direction[1] = 2 * (orientation.x() * orientation.w() -
+ orientation.z() * orientation.y());
+ direction[2] = 2 * (orientation.x() * orientation.x() +
+ orientation.y() * orientation.y()) - 1;
+ direction[3] = 2 * (orientation.x() * orientation.y() -
+ orientation.w() * orientation.z());
+ direction[4] = 1 - 2 * (orientation.x() * orientation.x() +
+ orientation.z() * orientation.z());
+ direction[5] = 2 * (orientation.w() * orientation.x() +
+ orientation.y() * orientation.z());
+ alListenerfv(AL_ORIENTATION, direction);
+ m_orientation = orientation;
+}
+
+float OpenALDevice::getSpeedOfSound() const
+{
+ return alGetFloat(AL_SPEED_OF_SOUND);
+}
+
+void OpenALDevice::setSpeedOfSound(float speed)
+{
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ alSpeedOfSound(speed);
+}
+
+float OpenALDevice::getDopplerFactor() const
+{
+ return alGetFloat(AL_DOPPLER_FACTOR);
+}
+
+void OpenALDevice::setDopplerFactor(float factor)
+{
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ alDopplerFactor(factor);
+}
+
+DistanceModel OpenALDevice::getDistanceModel() const
+{
+ switch(alGetInteger(AL_DISTANCE_MODEL))
+ {
+ case AL_INVERSE_DISTANCE:
+ return DISTANCE_MODEL_INVERSE;
+ case AL_INVERSE_DISTANCE_CLAMPED:
+ return DISTANCE_MODEL_INVERSE_CLAMPED;
+ case AL_LINEAR_DISTANCE:
+ return DISTANCE_MODEL_LINEAR;
+ case AL_LINEAR_DISTANCE_CLAMPED:
+ return DISTANCE_MODEL_LINEAR_CLAMPED;
+ case AL_EXPONENT_DISTANCE:
+ return DISTANCE_MODEL_EXPONENT;
+ case AL_EXPONENT_DISTANCE_CLAMPED:
+ return DISTANCE_MODEL_EXPONENT_CLAMPED;
+ default:
+ return DISTANCE_MODEL_INVALID;
+ }
+}
+
+void OpenALDevice::setDistanceModel(DistanceModel model)
+{
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ switch(model)
+ {
+ case DISTANCE_MODEL_INVERSE:
+ alDistanceModel(AL_INVERSE_DISTANCE);
+ break;
+ case DISTANCE_MODEL_INVERSE_CLAMPED:
+ alDistanceModel(AL_INVERSE_DISTANCE_CLAMPED);
+ break;
+ case DISTANCE_MODEL_LINEAR:
+ alDistanceModel(AL_LINEAR_DISTANCE);
+ break;
+ case DISTANCE_MODEL_LINEAR_CLAMPED:
+ alDistanceModel(AL_LINEAR_DISTANCE_CLAMPED);
+ break;
+ case DISTANCE_MODEL_EXPONENT:
+ alDistanceModel(AL_EXPONENT_DISTANCE);
+ break;
+ case DISTANCE_MODEL_EXPONENT_CLAMPED:
+ alDistanceModel(AL_EXPONENT_DISTANCE_CLAMPED);
+ break;
+ default:
+ alDistanceModel(AL_NONE);
+ }
+}
+
+std::list<std::string> OpenALDevice::getDeviceNames()
+{
+ std::list<std::string> names;
+
+ if(alcIsExtensionPresent(nullptr, "ALC_ENUMERATION_EXT") == AL_TRUE)
+ {
+ ALCchar* devices = const_cast<ALCchar*>(alcGetString(nullptr, ALC_DEVICE_SPECIFIER));
+ std::string default_device = alcGetString(nullptr, ALC_DEFAULT_DEVICE_SPECIFIER);
+
+ while(*devices)
+ {
+ std::string device = devices;
+
+ if(device == default_device)
+ names.push_front(device);
+ else
+ names.push_back(device);
+
+ devices += strlen(devices) + 1;
+ }
+ }
+
+ return names;
+}
+
+class OpenALDeviceFactory : public IDeviceFactory
+{
+private:
+ DeviceSpecs m_specs;
+ int m_buffersize;
+ std::string m_name;
+
+public:
+ OpenALDeviceFactory(std::string name = "") :
+ m_buffersize(AUD_DEFAULT_BUFFER_SIZE),
+ m_name(name)
+ {
+ m_specs.format = FORMAT_FLOAT32;
+ m_specs.channels = CHANNELS_SURROUND51;
+ m_specs.rate = RATE_48000;
+ }
+
+ virtual std::shared_ptr<IDevice> openDevice()
+ {
+ return std::shared_ptr<IDevice>(new OpenALDevice(m_specs, m_buffersize, m_name));
+ }
+
+ virtual int getPriority()
+ {
+ return 1 << 10;
+ }
+
+ virtual void setSpecs(DeviceSpecs specs)
+ {
+ m_specs = specs;
+ }
+
+ virtual void setBufferSize(int buffersize)
+ {
+ m_buffersize = buffersize;
+ }
+
+ virtual void setName(std::string name)
+ {
+ }
+};
+
+void OpenALDevice::registerPlugin()
+{
+ auto names = OpenALDevice::getDeviceNames();
+ DeviceManager::registerDevice("OpenAL", std::shared_ptr<IDeviceFactory>(new OpenALDeviceFactory));
+ for(std::string &name : names)
+ {
+ DeviceManager::registerDevice("OpenAL - " + name, std::shared_ptr<IDeviceFactory>(new OpenALDeviceFactory(name)));
+ }
+}
+
+#ifdef OPENAL_PLUGIN
+extern "C" AUD_PLUGIN_API void registerPlugin()
+{
+ OpenALDevice::registerPlugin();
+}
+
+extern "C" AUD_PLUGIN_API const char* getName()
+{
+ return "OpenAL";
+}
+#endif
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/plugins/openal/OpenALDevice.h b/extern/audaspace/plugins/openal/OpenALDevice.h
new file mode 100644
index 00000000000..b9b461a327c
--- /dev/null
+++ b/extern/audaspace/plugins/openal/OpenALDevice.h
@@ -0,0 +1,296 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+#ifdef OPENAL_PLUGIN
+#define AUD_BUILD_PLUGIN
+#endif
+
+/**
+ * @file OpenALDevice.h
+ * @ingroup plugin
+ * The OpenALDevice class.
+ */
+
+#include "devices/IDevice.h"
+#include "devices/IHandle.h"
+#include "devices/I3DDevice.h"
+#include "devices/I3DHandle.h"
+#include "devices/DefaultSynchronizer.h"
+#include "util/Buffer.h"
+
+#include <al.h>
+#include <alc.h>
+#include <list>
+#include <mutex>
+#include <thread>
+#include <string>
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This device plays through OpenAL.
+ */
+class AUD_PLUGIN_API OpenALDevice : public IDevice, public I3DDevice
+{
+private:
+ /// Saves the data for playback.
+ class OpenALHandle : public IHandle, public I3DHandle
+ {
+ private:
+ friend class OpenALDevice;
+
+ static const int CYCLE_BUFFERS = 3;
+
+ /// Whether it's a buffered or a streamed source.
+ bool m_isBuffered;
+
+ /// The reader source.
+ std::shared_ptr<IReader> m_reader;
+
+ /// Whether to keep the source if end of it is reached.
+ bool m_keep;
+
+ /// OpenAL sample format.
+ ALenum m_format;
+
+ /// OpenAL source.
+ ALuint m_source;
+
+ /// OpenAL buffers.
+ ALuint m_buffers[CYCLE_BUFFERS];
+
+ /// The first buffer to be read next.
+ int m_current;
+
+ /// Whether the stream doesn't return any more data.
+ bool m_eos;
+
+ /// The loop count of the source.
+ int m_loopcount;
+
+ /// The stop callback.
+ stopCallback m_stop;
+
+ /// Stop callback data.
+ void* m_stop_data;
+
+ /// Orientation.
+ Quaternion m_orientation;
+
+ /// Current status of the handle
+ Status m_status;
+
+ /// Own device.
+ OpenALDevice* m_device;
+
+ AUD_LOCAL bool pause(bool keep);
+
+ // delete copy constructor and operator=
+ OpenALHandle(const OpenALHandle&) = delete;
+ OpenALHandle& operator=(const OpenALHandle&) = delete;
+
+ public:
+
+ /**
+ * Creates a new OpenAL handle.
+ * \param device The OpenAL device the handle belongs to.
+ * \param format The AL format.
+ * \param reader The reader this handle plays.
+ * \param keep Whether to keep the handle alive when the reader ends.
+ */
+ OpenALHandle(OpenALDevice* device, ALenum format, std::shared_ptr<IReader> reader, bool keep);
+
+ virtual ~OpenALHandle() {}
+ virtual bool pause();
+ virtual bool resume();
+ virtual bool stop();
+ virtual bool getKeep();
+ virtual bool setKeep(bool keep);
+ virtual bool seek(float position);
+ virtual float getPosition();
+ virtual Status getStatus();
+ virtual float getVolume();
+ virtual bool setVolume(float volume);
+ virtual float getPitch();
+ virtual bool setPitch(float pitch);
+ virtual int getLoopCount();
+ virtual bool setLoopCount(int count);
+ virtual bool setStopCallback(stopCallback callback = 0, void* data = 0);
+
+ virtual Vector3 getLocation();
+ virtual bool setLocation(const Vector3& location);
+ virtual Vector3 getVelocity();
+ virtual bool setVelocity(const Vector3& velocity);
+ virtual Quaternion getOrientation();
+ virtual bool setOrientation(const Quaternion& orientation);
+ virtual bool isRelative();
+ virtual bool setRelative(bool relative);
+ virtual float getVolumeMaximum();
+ virtual bool setVolumeMaximum(float volume);
+ virtual float getVolumeMinimum();
+ virtual bool setVolumeMinimum(float volume);
+ virtual float getDistanceMaximum();
+ virtual bool setDistanceMaximum(float distance);
+ virtual float getDistanceReference();
+ virtual bool setDistanceReference(float distance);
+ virtual float getAttenuation();
+ virtual bool setAttenuation(float factor);
+ virtual float getConeAngleOuter();
+ virtual bool setConeAngleOuter(float angle);
+ virtual float getConeAngleInner();
+ virtual bool setConeAngleInner(float angle);
+ virtual float getConeVolumeOuter();
+ virtual bool setConeVolumeOuter(float volume);
+ };
+
+ /**
+ * The OpenAL device handle.
+ */
+ ALCdevice* m_device;
+
+ /**
+ * The OpenAL context.
+ */
+ ALCcontext* m_context;
+
+ /**
+ * The specification of the device.
+ */
+ DeviceSpecs m_specs;
+
+ /**
+ * Whether the device has the AL_EXT_MCFORMATS extension.
+ */
+ bool m_useMC;
+
+ /**
+ * The list of sounds that are currently playing.
+ */
+ std::list<std::shared_ptr<OpenALHandle> > m_playingSounds;
+
+ /**
+ * The list of sounds that are currently paused.
+ */
+ std::list<std::shared_ptr<OpenALHandle> > m_pausedSounds;
+
+ /**
+ * The mutex for locking.
+ */
+ std::recursive_mutex m_mutex;
+
+ /**
+ * The streaming thread.
+ */
+ std::thread m_thread;
+
+ /**
+ * The condition for streaming thread wakeup.
+ */
+ bool m_playing;
+
+ /**
+ * Buffer size.
+ */
+ int m_buffersize;
+
+ /**
+ * Device buffer.
+ */
+ Buffer m_buffer;
+
+ /**
+ * Orientation.
+ */
+ Quaternion m_orientation;
+
+ /// Synchronizer.
+ DefaultSynchronizer m_synchronizer;
+
+ /**
+ * Starts the streaming thread.
+ * \param Whether the previous thread should be joined.
+ */
+ AUD_LOCAL void start();
+
+ /**
+ * Streaming thread main function.
+ */
+ AUD_LOCAL void updateStreams();
+
+ /**
+ * Gets the format according to the specs.
+ * \param format The variable to put the format into.
+ * \param specs The specs to read the channel count from.
+ * \return Whether the format is valid or not.
+ */
+ AUD_LOCAL bool getFormat(ALenum &format, Specs specs);
+
+ // delete copy constructor and operator=
+ OpenALDevice(const OpenALDevice&) = delete;
+ OpenALDevice& operator=(const OpenALDevice&) = delete;
+
+public:
+ /**
+ * Opens the OpenAL audio device for playback.
+ * \param specs The wanted audio specification.
+ * \param buffersize The size of the internal buffer.
+ * \param name The name of the device to be opened.
+ * \note The specification really used for opening the device may differ.
+ * \note The buffersize will be multiplicated by three for this device.
+ * \exception DeviceException Thrown if the audio device cannot be opened.
+ */
+ OpenALDevice(DeviceSpecs specs, int buffersize = AUD_DEFAULT_BUFFER_SIZE, std::string name = "");
+
+ virtual ~OpenALDevice();
+
+ virtual DeviceSpecs getSpecs() const;
+ virtual std::shared_ptr<IHandle> play(std::shared_ptr<IReader> reader, bool keep = false);
+ virtual std::shared_ptr<IHandle> play(std::shared_ptr<ISound> sound, bool keep = false);
+ virtual void stopAll();
+ virtual void lock();
+ virtual void unlock();
+ virtual float getVolume() const;
+ virtual void setVolume(float volume);
+ virtual ISynchronizer* getSynchronizer();
+
+ virtual Vector3 getListenerLocation() const;
+ virtual void setListenerLocation(const Vector3& location);
+ virtual Vector3 getListenerVelocity() const;
+ virtual void setListenerVelocity(const Vector3& velocity);
+ virtual Quaternion getListenerOrientation() const;
+ virtual void setListenerOrientation(const Quaternion& orientation);
+ virtual float getSpeedOfSound() const;
+ virtual void setSpeedOfSound(float speed);
+ virtual float getDopplerFactor() const;
+ virtual void setDopplerFactor(float factor);
+ virtual DistanceModel getDistanceModel() const;
+ virtual void setDistanceModel(DistanceModel model);
+
+ /**
+ * Retrieves a list of available hardware devices to open with OpenAL.
+ * @return The list of devices to open.
+ */
+ static std::list<std::string> getDeviceNames();
+
+ /**
+ * Registers this plugin.
+ */
+ static void registerPlugin();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/plugins/openal/OpenALReader.cpp b/extern/audaspace/plugins/openal/OpenALReader.cpp
new file mode 100644
index 00000000000..52356d4f7ec
--- /dev/null
+++ b/extern/audaspace/plugins/openal/OpenALReader.cpp
@@ -0,0 +1,96 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "OpenALReader.h"
+#include "respec/ConverterFunctions.h"
+#include "Exception.h"
+
+#include <algorithm>
+#include <al.h>
+
+AUD_NAMESPACE_BEGIN
+
+OpenALReader::OpenALReader(Specs specs, int buffersize) :
+ m_specs(specs),
+ m_position(0),
+ m_device(nullptr)
+{
+ if((specs.channels != CHANNELS_MONO) && (specs.channels != CHANNELS_STEREO))
+ specs.channels = CHANNELS_MONO;
+
+ m_device = alcCaptureOpenDevice(nullptr, specs.rate,
+ specs.channels == CHANNELS_MONO ? AL_FORMAT_MONO16 : AL_FORMAT_STEREO16,
+ buffersize * specs.channels * 2);
+
+ if(!m_device)
+ AUD_THROW(DeviceException, "The capture device couldn't be opened with OpenAL.");
+
+ alcCaptureStart(m_device);
+}
+
+OpenALReader::~OpenALReader()
+{
+ if(m_device)
+ {
+ //alcCaptureStop(m_device);
+ alcCaptureCloseDevice(m_device);
+ }
+}
+
+bool OpenALReader::isSeekable() const
+{
+ return false;
+}
+
+void OpenALReader::seek(int position)
+{
+ m_position = position;
+}
+
+int OpenALReader::getLength() const
+{
+ int length;
+ alcGetIntegerv(m_device, ALC_CAPTURE_SAMPLES, 1, &length);
+ return length;
+}
+
+int OpenALReader::getPosition() const
+{
+ return m_position;
+}
+
+Specs OpenALReader::getSpecs() const
+{
+ return m_specs;
+}
+
+void OpenALReader::read(int & length, bool& eos, sample_t* buffer)
+{
+ int len = getLength();
+ length = std::min(length, len);
+
+ if(length > 0)
+ {
+ alcCaptureSamples(m_device, buffer, length);
+ convert_s16_float((data_t*)buffer, (data_t*)buffer, length * m_specs.channels);
+ }
+
+ eos = false;
+
+ m_position += length;
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/plugins/openal/OpenALReader.h b/extern/audaspace/plugins/openal/OpenALReader.h
new file mode 100644
index 00000000000..5d96ea9b027
--- /dev/null
+++ b/extern/audaspace/plugins/openal/OpenALReader.h
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+#ifdef OPENAL_PLUGIN
+#define AUD_BUILD_PLUGIN
+#endif
+
+/**
+ * @file OpenALReader.h
+ * @ingroup plugin
+ * The OpenALReader class.
+ */
+
+#include "IReader.h"
+
+#include <alc.h>
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This class is used for sine tone playback.
+ * The output format is in the 16 bit format and stereo, the sample rate can be
+ * specified.
+ * As the two channels both play the same the output could also be mono, but
+ * in most cases this will result in having to resample for output, so stereo
+ * sound is created directly.
+ */
+class AUD_PLUGIN_API OpenALReader : public IReader
+{
+private:
+ /**
+ * The specs of the reader.
+ */
+ Specs m_specs;
+
+ /**
+ * The current position in samples.
+ */
+ int m_position;
+
+ /**
+ * The capture device.
+ */
+ ALCdevice* m_device;
+
+ // delete copy constructor and operator=
+ OpenALReader(const OpenALReader&) = delete;
+ OpenALReader& operator=(const OpenALReader&) = delete;
+
+public:
+ /**
+ * Creates a new reader.
+ * \param specs The desired specification of the output samples.
+ * \param buffersize The buffer size used to read from the device.
+ */
+ OpenALReader(Specs specs, int buffersize = AUD_DEFAULT_BUFFER_SIZE);
+
+ virtual ~OpenALReader();
+
+ virtual bool isSeekable() const;
+ virtual void seek(int position);
+ virtual int getLength() const;
+ virtual int getPosition() const;
+ virtual Specs getSpecs() const;
+ virtual void read(int & length, bool& eos, sample_t* buffer);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/plugins/sdl/SDLDevice.cpp b/extern/audaspace/plugins/sdl/SDLDevice.cpp
new file mode 100644
index 00000000000..603e16001b8
--- /dev/null
+++ b/extern/audaspace/plugins/sdl/SDLDevice.cpp
@@ -0,0 +1,156 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "SDLDevice.h"
+#include "devices/DeviceManager.h"
+#include "devices/IDeviceFactory.h"
+#include "Exception.h"
+#include "IReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+void SDLDevice::SDL_mix(void* data, Uint8* buffer, int length)
+{
+ SDLDevice* device = (SDLDevice*)data;
+
+ if(!device->m_playback)
+ {
+ SDL_PauseAudio(1);
+
+ std::memset(buffer, 0, length);
+
+ return;
+ }
+
+ device->mix((data_t*)buffer, length / AUD_DEVICE_SAMPLE_SIZE(device->m_specs));
+}
+
+void SDLDevice::playing(bool playing)
+{
+ if(!m_playback)
+ SDL_PauseAudio(playing ? 0 : 1);
+
+ m_playback = playing;
+}
+
+SDLDevice::SDLDevice(DeviceSpecs specs, int buffersize) :
+ m_playback(false)
+{
+ if(specs.channels == CHANNELS_INVALID)
+ specs.channels = CHANNELS_STEREO;
+ if(specs.format == FORMAT_INVALID)
+ specs.format = FORMAT_S16;
+ if(specs.rate == RATE_INVALID)
+ specs.rate = RATE_48000;
+
+ m_specs = specs;
+
+ SDL_AudioSpec format, obtained;
+
+ format.freq = m_specs.rate;
+ if(m_specs.format == FORMAT_U8)
+ format.format = AUDIO_U8;
+ else
+ format.format = AUDIO_S16SYS;
+ format.channels = m_specs.channels;
+ format.samples = buffersize;
+ format.callback = SDLDevice::SDL_mix;
+ format.userdata = this;
+
+ if(SDL_OpenAudio(&format, &obtained) != 0)
+ AUD_THROW(DeviceException, "The audio device couldn't be opened with SDL.");
+
+ m_specs.rate = (SampleRate)obtained.freq;
+ m_specs.channels = (Channels)obtained.channels;
+ if(obtained.format == AUDIO_U8)
+ m_specs.format = FORMAT_U8;
+ else if(obtained.format == AUDIO_S16LSB || obtained.format == AUDIO_S16MSB)
+ m_specs.format = FORMAT_S16;
+ else
+ {
+ SDL_CloseAudio();
+ AUD_THROW(DeviceException, "The sample format obtained from SDL is not supported.");
+ }
+
+ create();
+}
+
+SDLDevice::~SDLDevice()
+{
+ SDL_PauseAudio(1);
+ SDL_CloseAudio();
+
+ destroy();
+}
+
+class SDLDeviceFactory : public IDeviceFactory
+{
+private:
+ DeviceSpecs m_specs;
+ int m_buffersize;
+
+public:
+ SDLDeviceFactory() :
+ m_buffersize(AUD_DEFAULT_BUFFER_SIZE)
+ {
+ m_specs.format = FORMAT_S16;
+ m_specs.channels = CHANNELS_STEREO;
+ m_specs.rate = RATE_48000;
+ }
+
+ virtual std::shared_ptr<IDevice> openDevice()
+ {
+ return std::shared_ptr<IDevice>(new SDLDevice(m_specs, m_buffersize));
+ }
+
+ virtual int getPriority()
+ {
+ return 1 << 5;
+ }
+
+ virtual void setSpecs(DeviceSpecs specs)
+ {
+ m_specs = specs;
+ }
+
+ virtual void setBufferSize(int buffersize)
+ {
+ m_buffersize = buffersize;
+ }
+
+ virtual void setName(std::string name)
+ {
+ }
+};
+
+void SDLDevice::registerPlugin()
+{
+ DeviceManager::registerDevice("SDL", std::shared_ptr<IDeviceFactory>(new SDLDeviceFactory));
+}
+
+#ifdef SDL_PLUGIN
+extern "C" AUD_PLUGIN_API void registerPlugin()
+{
+ SDLDevice::registerPlugin();
+}
+
+extern "C" AUD_PLUGIN_API const char* getName()
+{
+ return "SDL";
+}
+#endif
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/plugins/sdl/SDLDevice.h b/extern/audaspace/plugins/sdl/SDLDevice.h
new file mode 100644
index 00000000000..935732bb281
--- /dev/null
+++ b/extern/audaspace/plugins/sdl/SDLDevice.h
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+#ifdef SDL_PLUGIN
+#define AUD_BUILD_PLUGIN
+#endif
+
+/**
+ * @file SDLDevice.h
+ * @ingroup plugin
+ * The SDLDevice class.
+ */
+
+#include "devices/SoftwareDevice.h"
+
+#include <SDL.h>
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This device plays back through SDL, the simple direct media layer.
+ */
+class AUD_PLUGIN_API SDLDevice : public SoftwareDevice
+{
+private:
+ /**
+ * Whether there is currently playback.
+ */
+ bool m_playback;
+
+ /**
+ * Mixes the next bytes into the buffer.
+ * \param data The SDL device.
+ * \param buffer The target buffer.
+ * \param length The length in bytes to be filled.
+ */
+ AUD_LOCAL static void SDL_mix(void* data, Uint8* buffer, int length);
+
+ // delete copy constructor and operator=
+ SDLDevice(const SDLDevice&) = delete;
+ SDLDevice& operator=(const SDLDevice&) = delete;
+
+protected:
+ virtual void playing(bool playing);
+
+public:
+ /**
+ * Opens the SDL audio device for playback.
+ * \param specs The wanted audio specification.
+ * \param buffersize The size of the internal buffer.
+ * \note The specification really used for opening the device may differ.
+ * \exception Exception Thrown if the audio device cannot be opened.
+ */
+ SDLDevice(DeviceSpecs specs, int buffersize = AUD_DEFAULT_BUFFER_SIZE);
+
+ /**
+ * Closes the SDL audio device.
+ */
+ virtual ~SDLDevice();
+
+ /**
+ * Registers this plugin.
+ */
+ static void registerPlugin();
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/Exception.cpp b/extern/audaspace/src/Exception.cpp
new file mode 100644
index 00000000000..1c31cb29555
--- /dev/null
+++ b/extern/audaspace/src/Exception.cpp
@@ -0,0 +1,110 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "Exception.h"
+
+#include <sstream>
+
+AUD_NAMESPACE_BEGIN
+
+Exception::Exception(const Exception& exception) :
+ Exception(exception.m_message, exception.m_file, exception.m_line)
+{
+}
+
+Exception::Exception(std::string message, std::string file, int line) :
+ m_message(message),
+ m_file(file),
+ m_line(line)
+{
+}
+
+Exception::~Exception() AUD_NOEXCEPT
+{
+}
+
+const char* Exception::what() const AUD_NOEXCEPT
+{
+ return m_message.c_str();
+}
+
+std::string Exception::getDebugMessage() const
+{
+ std::stringstream out;
+
+ out << m_message << " File " << m_file << ":" << m_line;
+
+ return out.str();
+}
+
+const std::string& Exception::getMessage() const
+{
+ return m_message;
+}
+
+const std::string& Exception::getFile() const
+{
+ return m_file;
+}
+
+int Exception::getLine() const
+{
+ return m_line;
+}
+
+FileException::FileException(std::string message, std::string file, int line) :
+ Exception(message, file, line)
+{
+}
+
+FileException::FileException(const FileException& exception) :
+ Exception(exception)
+{
+}
+
+FileException::~FileException() AUD_NOEXCEPT
+{
+}
+
+DeviceException::DeviceException(std::string message, std::string file, int line) :
+ Exception(message, file, line)
+{
+}
+
+DeviceException::DeviceException(const DeviceException& exception) :
+ Exception(exception)
+{
+}
+
+DeviceException::~DeviceException() AUD_NOEXCEPT
+{
+}
+
+StateException::StateException(std::string message, std::string file, int line) :
+ Exception(message, file, line)
+{
+}
+
+StateException::StateException(const StateException& exception) :
+ Exception(exception)
+{
+}
+
+StateException::~StateException() AUD_NOEXCEPT
+{
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/devices/DefaultSynchronizer.cpp b/extern/audaspace/src/devices/DefaultSynchronizer.cpp
new file mode 100644
index 00000000000..aa8945dadaa
--- /dev/null
+++ b/extern/audaspace/src/devices/DefaultSynchronizer.cpp
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "devices/DefaultSynchronizer.h"
+#include "devices/IHandle.h"
+
+AUD_NAMESPACE_BEGIN
+
+void DefaultSynchronizer::seek(std::shared_ptr<IHandle> handle, float time)
+{
+ handle->seek(time);
+}
+
+float DefaultSynchronizer::getPosition(std::shared_ptr<IHandle> handle)
+{
+ return handle->getPosition();
+}
+
+void DefaultSynchronizer::play()
+{
+}
+
+void DefaultSynchronizer::stop()
+{
+}
+
+void DefaultSynchronizer::setSyncCallback(ISynchronizer::syncFunction function, void* data)
+{
+}
+
+int DefaultSynchronizer::isPlaying()
+{
+ return -1;
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/devices/DeviceManager.cpp b/extern/audaspace/src/devices/DeviceManager.cpp
new file mode 100644
index 00000000000..2ebc3d58c86
--- /dev/null
+++ b/extern/audaspace/src/devices/DeviceManager.cpp
@@ -0,0 +1,117 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "devices/DeviceManager.h"
+#include "devices/IDeviceFactory.h"
+#include "devices/IDevice.h"
+#include "devices/I3DDevice.h"
+
+#include <limits>
+#include <string>
+#include <algorithm>
+
+AUD_NAMESPACE_BEGIN
+
+std::unordered_map<std::string, std::shared_ptr<IDeviceFactory>> DeviceManager::m_factories;
+std::shared_ptr<IDevice> DeviceManager::m_device;
+
+void DeviceManager::registerDevice(std::string name, std::shared_ptr<IDeviceFactory> factory)
+{
+ m_factories[name] = factory;
+}
+
+std::shared_ptr<IDeviceFactory> DeviceManager::getDeviceFactory(std::string name)
+{
+ return m_factories[name];
+}
+
+std::shared_ptr<IDeviceFactory> DeviceManager::getDefaultDeviceFactory()
+{
+ int min = std::numeric_limits<int>::min();
+
+ std::shared_ptr<IDeviceFactory> result;
+
+ for(auto factory : m_factories)
+ {
+ if(factory.second->getPriority() >= min)
+ {
+ result = factory.second;
+ min = result->getPriority();
+ }
+ }
+
+ return result;
+}
+
+void DeviceManager::setDevice(std::shared_ptr<IDevice> device)
+{
+ m_device = device;
+}
+
+void DeviceManager::openDevice(std::string name)
+{
+ setDevice(getDeviceFactory(name)->openDevice());
+}
+
+void DeviceManager::openDefaultDevice()
+{
+ setDevice(getDefaultDeviceFactory()->openDevice());
+}
+
+void DeviceManager::releaseDevice()
+{
+ m_device = nullptr;
+}
+
+std::shared_ptr<IDevice> DeviceManager::getDevice()
+{
+ return m_device;
+}
+
+std::shared_ptr<I3DDevice> DeviceManager::get3DDevice()
+{
+ return std::dynamic_pointer_cast<I3DDevice>(m_device);
+}
+
+std::vector<std::string> DeviceManager::getAvailableDeviceNames()
+{
+ struct DeviceNamePriority {
+ std::string name;
+ int priority;
+ };
+
+ std::vector<DeviceNamePriority> devices;
+ devices.reserve(m_factories.size());
+
+ for(const auto& pair : m_factories)
+ devices.push_back({pair.first, pair.second->getPriority()});
+
+ auto sort = [](const DeviceNamePriority& lhs, const DeviceNamePriority& rhs){
+ return lhs.priority > rhs.priority;
+ };
+
+ std::sort(devices.begin(), devices.end(), sort);
+
+ std::vector<std::string> names;
+ names.reserve(devices.size());
+
+ for(const auto& device : devices)
+ names.push_back(device.name);
+
+ return names;
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/devices/NULLDevice.cpp b/extern/audaspace/src/devices/NULLDevice.cpp
new file mode 100644
index 00000000000..a82537f43b2
--- /dev/null
+++ b/extern/audaspace/src/devices/NULLDevice.cpp
@@ -0,0 +1,193 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "devices/NULLDevice.h"
+#include "devices/DeviceManager.h"
+#include "devices/IDeviceFactory.h"
+
+#include <limits>
+#include <string>
+
+AUD_NAMESPACE_BEGIN
+
+NULLDevice::NULLHandle::NULLHandle()
+{
+}
+
+bool NULLDevice::NULLHandle::pause()
+{
+ return false;
+}
+
+bool NULLDevice::NULLHandle::resume()
+{
+ return false;
+}
+
+bool NULLDevice::NULLHandle::stop()
+{
+ return false;
+}
+
+bool NULLDevice::NULLHandle::getKeep()
+{
+ return false;
+}
+
+bool NULLDevice::NULLHandle::setKeep(bool keep)
+{
+ return false;
+}
+
+bool NULLDevice::NULLHandle::seek(float position)
+{
+ return false;
+}
+
+float NULLDevice::NULLHandle::getPosition()
+{
+ return std::numeric_limits<float>::quiet_NaN();
+}
+
+Status NULLDevice::NULLHandle::getStatus()
+{
+ return STATUS_INVALID;
+}
+
+float NULLDevice::NULLHandle::getVolume()
+{
+ return std::numeric_limits<float>::quiet_NaN();
+}
+
+bool NULLDevice::NULLHandle::setVolume(float volume)
+{
+ return false;
+}
+
+float NULLDevice::NULLHandle::getPitch()
+{
+ return std::numeric_limits<float>::quiet_NaN();
+}
+
+bool NULLDevice::NULLHandle::setPitch(float pitch)
+{
+ return false;
+}
+
+int NULLDevice::NULLHandle::getLoopCount()
+{
+ return 0;
+}
+
+bool NULLDevice::NULLHandle::setLoopCount(int count)
+{
+ return false;
+}
+
+bool NULLDevice::NULLHandle::setStopCallback(stopCallback callback, void* data)
+{
+ return false;
+}
+
+NULLDevice::NULLDevice()
+{
+}
+
+NULLDevice::~NULLDevice()
+{
+}
+
+DeviceSpecs NULLDevice::getSpecs() const
+{
+ DeviceSpecs specs;
+ specs.channels = CHANNELS_INVALID;
+ specs.format = FORMAT_INVALID;
+ specs.rate = RATE_INVALID;
+ return specs;
+}
+
+std::shared_ptr<IHandle> NULLDevice::play(std::shared_ptr<IReader> reader, bool keep)
+{
+ return std::shared_ptr<IHandle>(new NULLHandle());
+}
+
+std::shared_ptr<IHandle> NULLDevice::play(std::shared_ptr<ISound> sound, bool keep)
+{
+ return std::shared_ptr<IHandle>(new NULLHandle());
+}
+
+void NULLDevice::stopAll()
+{
+}
+
+void NULLDevice::lock()
+{
+}
+
+void NULLDevice::unlock()
+{
+}
+
+float NULLDevice::getVolume() const
+{
+ return std::numeric_limits<float>::quiet_NaN();
+}
+
+void NULLDevice::setVolume(float volume)
+{
+}
+
+ISynchronizer* NULLDevice::getSynchronizer()
+{
+ return nullptr;
+}
+
+class NULLDeviceFactory : public IDeviceFactory
+{
+public:
+ NULLDeviceFactory()
+ {
+ }
+
+ virtual std::shared_ptr<IDevice> openDevice()
+ {
+ return std::shared_ptr<IDevice>(new NULLDevice());
+ }
+
+ virtual int getPriority()
+ {
+ return std::numeric_limits<int>::min();
+ }
+
+ virtual void setSpecs(DeviceSpecs specs)
+ {
+ }
+
+ virtual void setBufferSize(int buffersize)
+ {
+ }
+
+ virtual void setName(std::string name)
+ {
+ }
+};
+
+void NULLDevice::registerPlugin()
+{
+ DeviceManager::registerDevice("Null", std::shared_ptr<IDeviceFactory>(new NULLDeviceFactory));
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/devices/ReadDevice.cpp b/extern/audaspace/src/devices/ReadDevice.cpp
new file mode 100644
index 00000000000..487fee1f59a
--- /dev/null
+++ b/extern/audaspace/src/devices/ReadDevice.cpp
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "devices/ReadDevice.h"
+#include "IReader.h"
+
+#include <cstring>
+
+AUD_NAMESPACE_BEGIN
+
+ReadDevice::ReadDevice(DeviceSpecs specs) :
+ m_playing(false)
+{
+ m_specs = specs;
+
+ create();
+}
+
+ReadDevice::ReadDevice(Specs specs) :
+ m_playing(false)
+{
+ m_specs.specs = specs;
+ m_specs.format = FORMAT_FLOAT32;
+
+ create();
+}
+
+ReadDevice::~ReadDevice()
+{
+ destroy();
+}
+
+bool ReadDevice::read(data_t* buffer, int length)
+{
+ if(m_playing)
+ mix(buffer, length);
+ else
+ if(m_specs.format == FORMAT_U8)
+ std::memset(buffer, 0x80, length * AUD_DEVICE_SAMPLE_SIZE(m_specs));
+ else
+ std::memset(buffer, 0, length * AUD_DEVICE_SAMPLE_SIZE(m_specs));
+ return m_playing;
+}
+
+void ReadDevice::changeSpecs(Specs specs)
+{
+ if(!AUD_COMPARE_SPECS(specs, m_specs.specs))
+ setSpecs(specs);
+}
+
+void ReadDevice::playing(bool playing)
+{
+ m_playing = playing;
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/devices/SoftwareDevice.cpp b/extern/audaspace/src/devices/SoftwareDevice.cpp
new file mode 100644
index 00000000000..c944b9ed12d
--- /dev/null
+++ b/extern/audaspace/src/devices/SoftwareDevice.cpp
@@ -0,0 +1,989 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "devices/SoftwareDevice.h"
+#include "fx/PitchReader.h"
+#include "respec/ChannelMapperReader.h"
+#include "respec/JOSResampleReader.h"
+#include "respec/LinearResampleReader.h"
+#include "respec/Mixer.h"
+#include "Exception.h"
+#include "ISound.h"
+
+#include <algorithm>
+#include <cmath>
+#include <cstring>
+#include <iostream>
+#include <limits>
+#include <mutex>
+
+AUD_NAMESPACE_BEGIN
+
+enum RenderFlags
+{
+ RENDER_DISTANCE = 0x01,
+ RENDER_DOPPLER = 0x02,
+ RENDER_CONE = 0x04,
+ RENDER_VOLUME = 0x08
+};
+
+#define PITCH_MAX 10
+
+/******************************************************************************/
+/********************** SoftwareHandle Handle Code ************************/
+/******************************************************************************/
+
+bool SoftwareDevice::SoftwareHandle::pause(bool keep)
+{
+ if(m_status)
+ {
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(m_status == STATUS_PLAYING)
+ {
+ for(auto it = m_device->m_playingSounds.begin(); it != m_device->m_playingSounds.end(); it++)
+ {
+ if(it->get() == this)
+ {
+ std::shared_ptr<SoftwareHandle> This = *it;
+
+ m_device->m_playingSounds.erase(it);
+ m_device->m_pausedSounds.push_back(This);
+
+ if(m_device->m_playingSounds.empty())
+ m_device->playing(m_device->m_playback = false);
+
+ m_status = keep ? STATUS_STOPPED : STATUS_PAUSED;
+
+ return true;
+ }
+ }
+ }
+ }
+
+ return false;
+}
+
+SoftwareDevice::SoftwareHandle::SoftwareHandle(SoftwareDevice* device, std::shared_ptr<IReader> reader, std::shared_ptr<PitchReader> pitch, std::shared_ptr<ResampleReader> resampler, std::shared_ptr<ChannelMapperReader> mapper, bool keep) :
+ m_reader(reader), m_pitch(pitch), m_resampler(resampler), m_mapper(mapper), m_keep(keep), m_user_pitch(1.0f), m_user_volume(1.0f), m_user_pan(0.0f), m_volume(1.0f), m_old_volume(0), m_loopcount(0),
+ m_relative(true), m_volume_max(1.0f), m_volume_min(0), m_distance_max(std::numeric_limits<float>::max()),
+ m_distance_reference(1.0f), m_attenuation(1.0f), m_cone_angle_outer(M_PI), m_cone_angle_inner(M_PI), m_cone_volume_outer(0),
+ m_flags(RENDER_CONE), m_stop(nullptr), m_stop_data(nullptr), m_status(STATUS_PLAYING), m_device(device)
+{
+}
+
+void SoftwareDevice::SoftwareHandle::update()
+{
+ int flags = 0;
+
+ m_old_volume = m_volume;
+
+ Vector3 SL;
+ if(m_relative)
+ SL = -m_location;
+ else
+ SL = m_device->m_location - m_location;
+ float distance = SL * SL;
+
+ if(distance > 0)
+ distance = sqrt(distance);
+ else
+ flags |= RENDER_DOPPLER | RENDER_DISTANCE;
+
+ if(m_pitch->getSpecs().channels != CHANNELS_MONO)
+ {
+ m_volume = m_user_volume;
+ m_pitch->setPitch(m_user_pitch);
+ return;
+ }
+
+ flags = ~(flags | m_flags | m_device->m_flags);
+
+ // Doppler and Pitch
+
+ if(flags & RENDER_DOPPLER)
+ {
+ float vls;
+ if(m_relative)
+ vls = 0;
+ else
+ vls = SL * m_device->m_velocity / distance;
+ float vss = SL * m_velocity / distance;
+ float max = m_device->m_speed_of_sound / m_device->m_doppler_factor;
+ if(vss >= max)
+ {
+ m_pitch->setPitch(PITCH_MAX);
+ }
+ else
+ {
+ if(vls > max)
+ vls = max;
+
+ m_pitch->setPitch((m_device->m_speed_of_sound - m_device->m_doppler_factor * vls) / (m_device->m_speed_of_sound - m_device->m_doppler_factor * vss) * m_user_pitch);
+ }
+ }
+ else
+ m_pitch->setPitch(m_user_pitch);
+
+ if(flags & RENDER_VOLUME)
+ {
+ // Distance
+
+ if(flags & RENDER_DISTANCE)
+ {
+ if(m_device->m_distance_model == DISTANCE_MODEL_INVERSE_CLAMPED ||
+ m_device->m_distance_model == DISTANCE_MODEL_LINEAR_CLAMPED ||
+ m_device->m_distance_model == DISTANCE_MODEL_EXPONENT_CLAMPED)
+ {
+ distance = std::max(std::min(m_distance_max, distance), m_distance_reference);
+ }
+
+ switch(m_device->m_distance_model)
+ {
+ case DISTANCE_MODEL_INVERSE:
+ case DISTANCE_MODEL_INVERSE_CLAMPED:
+ m_volume = m_distance_reference / (m_distance_reference + m_attenuation * (distance - m_distance_reference));
+ break;
+ case DISTANCE_MODEL_LINEAR:
+ case DISTANCE_MODEL_LINEAR_CLAMPED:
+ {
+ float temp = m_distance_max - m_distance_reference;
+ if(temp == 0)
+ {
+ if(distance > m_distance_reference)
+ m_volume = 0.0f;
+ else
+ m_volume = 1.0f;
+ }
+ else
+ m_volume = 1.0f - m_attenuation * (distance - m_distance_reference) / (m_distance_max - m_distance_reference);
+ break;
+ }
+ case DISTANCE_MODEL_EXPONENT:
+ case DISTANCE_MODEL_EXPONENT_CLAMPED:
+ if(m_distance_reference == 0)
+ m_volume = 0;
+ else
+ m_volume = std::pow(distance / m_distance_reference, -m_attenuation);
+ break;
+ default:
+ m_volume = 1.0f;
+ }
+ }
+ else
+ m_volume = 1.0f;
+
+ // Cone
+
+ if(flags & RENDER_CONE)
+ {
+ Vector3 SZ = m_orientation.getLookAt();
+
+ float phi = std::acos(float(SZ * SL / (SZ.length() * SL.length())));
+ float t = (phi - m_cone_angle_inner)/(m_cone_angle_outer - m_cone_angle_inner);
+
+ if(t > 0)
+ {
+ if(t > 1)
+ m_volume *= m_cone_volume_outer;
+ else
+ m_volume *= 1 + t * (m_cone_volume_outer - 1);
+ }
+ }
+
+ if(m_volume > m_volume_max)
+ m_volume = m_volume_max;
+ else if(m_volume < m_volume_min)
+ m_volume = m_volume_min;
+
+ // Volume
+
+ m_volume *= m_user_volume;
+ }
+
+ // 3D Cue
+
+ Quaternion orientation;
+
+ if(!m_relative)
+ orientation = m_device->m_orientation;
+
+ Vector3 Z = orientation.getLookAt();
+ Vector3 N = orientation.getUp();
+ Vector3 A = N * ((SL * N) / (N * N)) - SL;
+
+ float Asquare = A * A;
+
+ if(Asquare > 0)
+ {
+ float phi = std::acos(float(Z * A / (Z.length() * std::sqrt(Asquare))));
+ if(N.cross(Z) * A > 0)
+ phi = -phi;
+
+ m_mapper->setMonoAngle(phi);
+ }
+ else
+ m_mapper->setMonoAngle(m_relative ? m_user_pan * M_PI / 2.0 : 0);
+}
+
+void SoftwareDevice::SoftwareHandle::setSpecs(Specs specs)
+{
+ m_mapper->setChannels(specs.channels);
+ m_resampler->setRate(specs.rate);
+}
+
+bool SoftwareDevice::SoftwareHandle::pause()
+{
+ return pause(false);
+}
+
+bool SoftwareDevice::SoftwareHandle::resume()
+{
+ if(m_status)
+ {
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(m_status == STATUS_PAUSED)
+ {
+ for(auto it = m_device->m_pausedSounds.begin(); it != m_device->m_pausedSounds.end(); it++)
+ {
+ if(it->get() == this)
+ {
+ std::shared_ptr<SoftwareHandle> This = *it;
+
+ m_device->m_pausedSounds.erase(it);
+
+ m_device->m_playingSounds.push_back(This);
+
+ if(!m_device->m_playback)
+ m_device->playing(m_device->m_playback = true);
+ m_status = STATUS_PLAYING;
+
+ return true;
+ }
+ }
+ }
+
+ }
+
+ return false;
+}
+
+bool SoftwareDevice::SoftwareHandle::stop()
+{
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return false;
+
+ m_status = STATUS_INVALID;
+
+ for(auto it = m_device->m_playingSounds.begin(); it != m_device->m_playingSounds.end(); it++)
+ {
+ if(it->get() == this)
+ {
+ std::shared_ptr<SoftwareHandle> This = *it;
+
+ m_device->m_playingSounds.erase(it);
+
+ if(m_device->m_playingSounds.empty())
+ m_device->playing(m_device->m_playback = false);
+
+ return true;
+ }
+ }
+
+ for(auto it = m_device->m_pausedSounds.begin(); it != m_device->m_pausedSounds.end(); it++)
+ {
+ if(it->get() == this)
+ {
+ std::shared_ptr<SoftwareHandle> This = *it;
+
+ m_device->m_pausedSounds.erase(it);
+
+ return true;
+ }
+ }
+
+ return false;
+}
+
+bool SoftwareDevice::SoftwareHandle::getKeep()
+{
+ if(m_status)
+ return m_keep;
+
+ return false;
+}
+
+bool SoftwareDevice::SoftwareHandle::setKeep(bool keep)
+{
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return false;
+
+ m_keep = keep;
+
+ return true;
+}
+
+bool SoftwareDevice::SoftwareHandle::seek(float position)
+{
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return false;
+
+ m_pitch->setPitch(m_user_pitch);
+ m_reader->seek((int)(position * m_reader->getSpecs().rate));
+
+ if(m_status == STATUS_STOPPED)
+ m_status = STATUS_PAUSED;
+
+ return true;
+}
+
+float SoftwareDevice::SoftwareHandle::getPosition()
+{
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return 0.0f;
+
+ float position = m_reader->getPosition() / (float)m_device->m_specs.rate;
+
+ return position;
+}
+
+Status SoftwareDevice::SoftwareHandle::getStatus()
+{
+ return m_status;
+}
+
+float SoftwareDevice::SoftwareHandle::getVolume()
+{
+ return m_user_volume;
+}
+
+bool SoftwareDevice::SoftwareHandle::setVolume(float volume)
+{
+ if(!m_status)
+ return false;
+ m_user_volume = volume;
+
+ if(volume == 0)
+ {
+ m_old_volume = m_volume = volume;
+ m_flags |= RENDER_VOLUME;
+ }
+ else
+ m_flags &= ~RENDER_VOLUME;
+
+ return true;
+}
+
+float SoftwareDevice::SoftwareHandle::getPitch()
+{
+ return m_user_pitch;
+}
+
+bool SoftwareDevice::SoftwareHandle::setPitch(float pitch)
+{
+ if(!m_status)
+ return false;
+ if(pitch > 0.0f)
+ m_user_pitch = pitch;
+ return true;
+}
+
+int SoftwareDevice::SoftwareHandle::getLoopCount()
+{
+ if(!m_status)
+ return 0;
+ return m_loopcount;
+}
+
+bool SoftwareDevice::SoftwareHandle::setLoopCount(int count)
+{
+ if(!m_status)
+ return false;
+
+ if(m_status == STATUS_STOPPED && (count > m_loopcount || count < 0))
+ m_status = STATUS_PAUSED;
+
+ m_loopcount = count;
+
+ return true;
+}
+
+bool SoftwareDevice::SoftwareHandle::setStopCallback(stopCallback callback, void* data)
+{
+ if(!m_status)
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_device);
+
+ if(!m_status)
+ return false;
+
+ m_stop = callback;
+ m_stop_data = data;
+
+ return true;
+}
+
+
+
+/******************************************************************************/
+/******************** SoftwareHandle 3DHandle Code ************************/
+/******************************************************************************/
+
+Vector3 SoftwareDevice::SoftwareHandle::getLocation()
+{
+ if(!m_status)
+ return Vector3();
+
+ return m_location;
+}
+
+bool SoftwareDevice::SoftwareHandle::setLocation(const Vector3& location)
+{
+ if(!m_status)
+ return false;
+
+ m_location = location;
+
+ return true;
+}
+
+Vector3 SoftwareDevice::SoftwareHandle::getVelocity()
+{
+ if(!m_status)
+ return Vector3();
+
+ return m_velocity;
+}
+
+bool SoftwareDevice::SoftwareHandle::setVelocity(const Vector3& velocity)
+{
+ if(!m_status)
+ return false;
+
+ m_velocity = velocity;
+
+ return true;
+}
+
+Quaternion SoftwareDevice::SoftwareHandle::getOrientation()
+{
+ if(!m_status)
+ return Quaternion();
+
+ return m_orientation;
+}
+
+bool SoftwareDevice::SoftwareHandle::setOrientation(const Quaternion& orientation)
+{
+ if(!m_status)
+ return false;
+
+ m_orientation = orientation;
+
+ return true;
+}
+
+bool SoftwareDevice::SoftwareHandle::isRelative()
+{
+ if(!m_status)
+ return false;
+
+ return m_relative;
+}
+
+bool SoftwareDevice::SoftwareHandle::setRelative(bool relative)
+{
+ if(!m_status)
+ return false;
+
+ m_relative = relative;
+
+ return true;
+}
+
+float SoftwareDevice::SoftwareHandle::getVolumeMaximum()
+{
+ if(!m_status)
+ return std::numeric_limits<float>::quiet_NaN();
+
+ return m_volume_max;
+}
+
+bool SoftwareDevice::SoftwareHandle::setVolumeMaximum(float volume)
+{
+ if(!m_status)
+ return false;
+
+ m_volume_max = volume;
+
+ return true;
+}
+
+float SoftwareDevice::SoftwareHandle::getVolumeMinimum()
+{
+ if(!m_status)
+ return std::numeric_limits<float>::quiet_NaN();
+
+ return m_volume_min;
+}
+
+bool SoftwareDevice::SoftwareHandle::setVolumeMinimum(float volume)
+{
+ if(!m_status)
+ return false;
+
+ m_volume_min = volume;
+
+ return true;
+}
+
+float SoftwareDevice::SoftwareHandle::getDistanceMaximum()
+{
+ if(!m_status)
+ return std::numeric_limits<float>::quiet_NaN();
+
+ return m_distance_max;
+}
+
+bool SoftwareDevice::SoftwareHandle::setDistanceMaximum(float distance)
+{
+ if(!m_status)
+ return false;
+
+ m_distance_max = distance;
+
+ return true;
+}
+
+float SoftwareDevice::SoftwareHandle::getDistanceReference()
+{
+ if(!m_status)
+ return std::numeric_limits<float>::quiet_NaN();
+
+ return m_distance_reference;
+}
+
+bool SoftwareDevice::SoftwareHandle::setDistanceReference(float distance)
+{
+ if(!m_status)
+ return false;
+
+ m_distance_reference = distance;
+
+ return true;
+}
+
+float SoftwareDevice::SoftwareHandle::getAttenuation()
+{
+ if(!m_status)
+ return std::numeric_limits<float>::quiet_NaN();
+
+ return m_attenuation;
+}
+
+bool SoftwareDevice::SoftwareHandle::setAttenuation(float factor)
+{
+ if(!m_status)
+ return false;
+
+ m_attenuation = factor;
+
+ if(factor == 0)
+ m_flags |= RENDER_DISTANCE;
+ else
+ m_flags &= ~RENDER_DISTANCE;
+
+ return true;
+}
+
+float SoftwareDevice::SoftwareHandle::getConeAngleOuter()
+{
+ if(!m_status)
+ return std::numeric_limits<float>::quiet_NaN();
+
+ return m_cone_angle_outer * 360.0f / M_PI;
+}
+
+bool SoftwareDevice::SoftwareHandle::setConeAngleOuter(float angle)
+{
+ if(!m_status)
+ return false;
+
+ m_cone_angle_outer = angle * M_PI / 360.0f;
+
+ return true;
+}
+
+float SoftwareDevice::SoftwareHandle::getConeAngleInner()
+{
+ if(!m_status)
+ return std::numeric_limits<float>::quiet_NaN();
+
+ return m_cone_angle_inner * 360.0f / M_PI;
+}
+
+bool SoftwareDevice::SoftwareHandle::setConeAngleInner(float angle)
+{
+ if(!m_status)
+ return false;
+
+ if(angle >= 360)
+ m_flags |= RENDER_CONE;
+ else
+ m_flags &= ~RENDER_CONE;
+
+ m_cone_angle_inner = angle * M_PI / 360.0f;
+
+ return true;
+}
+
+float SoftwareDevice::SoftwareHandle::getConeVolumeOuter()
+{
+ if(!m_status)
+ return std::numeric_limits<float>::quiet_NaN();
+
+ return m_cone_volume_outer;
+}
+
+bool SoftwareDevice::SoftwareHandle::setConeVolumeOuter(float volume)
+{
+ if(!m_status)
+ return false;
+
+ m_cone_volume_outer = volume;
+
+ return true;
+}
+
+/******************************************************************************/
+/**************************** IDevice Code ************************************/
+/******************************************************************************/
+
+void SoftwareDevice::create()
+{
+ m_playback = false;
+ m_volume = 1.0f;
+ m_mixer = std::shared_ptr<Mixer>(new Mixer(m_specs));
+ m_speed_of_sound = 343.3f;
+ m_doppler_factor = 1.0f;
+ m_distance_model = DISTANCE_MODEL_INVERSE_CLAMPED;
+ m_flags = 0;
+ m_quality = false;
+}
+
+void SoftwareDevice::destroy()
+{
+ if(m_playback)
+ playing(m_playback = false);
+
+ while(!m_playingSounds.empty())
+ m_playingSounds.front()->stop();
+
+ while(!m_pausedSounds.empty())
+ m_pausedSounds.front()->stop();
+}
+
+void SoftwareDevice::mix(data_t* buffer, int length)
+{
+ m_buffer.assureSize(length * AUD_SAMPLE_SIZE(m_specs));
+
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ {
+ std::shared_ptr<SoftwareDevice::SoftwareHandle> sound;
+ int len;
+ int pos;
+ bool eos;
+ std::list<std::shared_ptr<SoftwareDevice::SoftwareHandle> > stopSounds;
+ std::list<std::shared_ptr<SoftwareDevice::SoftwareHandle> > pauseSounds;
+ sample_t* buf = m_buffer.getBuffer();
+
+ m_mixer->clear(length);
+
+ // for all sounds
+ for(auto& sound : m_playingSounds)
+ {
+ // get the buffer from the source
+ pos = 0;
+ len = length;
+
+ // update 3D Info
+ sound->update();
+
+ try
+ {
+ sound->m_reader->read(len, eos, buf);
+
+ // in case of looping
+ while(pos + len < length && sound->m_loopcount && eos)
+ {
+ m_mixer->mix(buf, pos, len, sound->m_volume, sound->m_old_volume);
+
+ pos += len;
+
+ if(sound->m_loopcount > 0)
+ sound->m_loopcount--;
+
+ sound->m_reader->seek(0);
+
+ len = length - pos;
+ sound->m_reader->read(len, eos, buf);
+
+ // prevent endless loop
+ if(!len)
+ break;
+ }
+ }
+ catch(Exception& e)
+ {
+ len = 0;
+ std::cerr << "Caught exception while reading sound data during playback with software mixing: " << e.getMessage() << std::endl;
+ }
+
+ m_mixer->mix(buf, pos, len, sound->m_volume, sound->m_old_volume);
+
+ // in case the end of the sound is reached
+ if(eos && !sound->m_loopcount)
+ {
+ if(sound->m_stop)
+ sound->m_stop(sound->m_stop_data);
+
+ if(sound->m_keep)
+ pauseSounds.push_back(sound);
+ else
+ stopSounds.push_back(sound);
+ }
+ }
+
+ // superpose
+ m_mixer->read(buffer, m_volume);
+
+ // cleanup
+ for(auto& sound : pauseSounds)
+ sound->pause(true);
+
+ for(auto& sound : stopSounds)
+ sound->stop();
+
+ pauseSounds.clear();
+ stopSounds.clear();
+ }
+}
+
+void SoftwareDevice::setPanning(IHandle* handle, float pan)
+{
+ SoftwareDevice::SoftwareHandle* h = dynamic_cast<SoftwareDevice::SoftwareHandle*>(handle);
+ h->m_user_pan = pan;
+}
+
+void SoftwareDevice::setQuality(bool quality)
+{
+ m_quality = quality;
+}
+
+void SoftwareDevice::setSpecs(Specs specs)
+{
+ m_specs.specs = specs;
+ m_mixer->setSpecs(specs);
+
+ for(auto& sound : m_playingSounds)
+ {
+ sound->setSpecs(specs);
+ }
+}
+
+SoftwareDevice::SoftwareDevice()
+{
+}
+
+DeviceSpecs SoftwareDevice::getSpecs() const
+{
+ return m_specs;
+}
+
+std::shared_ptr<IHandle> SoftwareDevice::play(std::shared_ptr<IReader> reader, bool keep)
+{
+ // prepare the reader
+ // pitch
+
+ std::shared_ptr<PitchReader> pitch = std::shared_ptr<PitchReader>(new PitchReader(reader, 1));
+ reader = std::shared_ptr<IReader>(pitch);
+
+ std::shared_ptr<ResampleReader> resampler;
+
+ // resample
+ if(m_quality)
+ resampler = std::shared_ptr<ResampleReader>(new JOSResampleReader(reader, m_specs.rate));
+ else
+ resampler = std::shared_ptr<ResampleReader>(new LinearResampleReader(reader, m_specs.rate));
+ reader = std::shared_ptr<IReader>(resampler);
+
+ // rechannel
+ std::shared_ptr<ChannelMapperReader> mapper = std::shared_ptr<ChannelMapperReader>(new ChannelMapperReader(reader, m_specs.channels));
+ reader = std::shared_ptr<IReader>(mapper);
+
+ if(!reader.get())
+ return std::shared_ptr<IHandle>();
+
+ // play sound
+ std::shared_ptr<SoftwareDevice::SoftwareHandle> sound = std::shared_ptr<SoftwareDevice::SoftwareHandle>(new SoftwareDevice::SoftwareHandle(this, reader, pitch, resampler, mapper, keep));
+
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ m_playingSounds.push_back(sound);
+
+ if(!m_playback)
+ playing(m_playback = true);
+
+ return std::shared_ptr<IHandle>(sound);
+}
+
+std::shared_ptr<IHandle> SoftwareDevice::play(std::shared_ptr<ISound> sound, bool keep)
+{
+ return play(sound->createReader(), keep);
+}
+
+void SoftwareDevice::stopAll()
+{
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ while(!m_playingSounds.empty())
+ m_playingSounds.front()->stop();
+
+ while(!m_pausedSounds.empty())
+ m_pausedSounds.front()->stop();
+}
+
+void SoftwareDevice::lock()
+{
+ m_mutex.lock();
+}
+
+void SoftwareDevice::unlock()
+{
+ m_mutex.unlock();
+}
+
+float SoftwareDevice::getVolume() const
+{
+ return m_volume;
+}
+
+void SoftwareDevice::setVolume(float volume)
+{
+ m_volume = volume;
+}
+
+ISynchronizer* SoftwareDevice::getSynchronizer()
+{
+ return &m_synchronizer;
+}
+
+/******************************************************************************/
+/**************************** 3D Device Code **********************************/
+/******************************************************************************/
+
+Vector3 SoftwareDevice::getListenerLocation() const
+{
+ return m_location;
+}
+
+void SoftwareDevice::setListenerLocation(const Vector3& location)
+{
+ m_location = location;
+}
+
+Vector3 SoftwareDevice::getListenerVelocity() const
+{
+ return m_velocity;
+}
+
+void SoftwareDevice::setListenerVelocity(const Vector3& velocity)
+{
+ m_velocity = velocity;
+}
+
+Quaternion SoftwareDevice::getListenerOrientation() const
+{
+ return m_orientation;
+}
+
+void SoftwareDevice::setListenerOrientation(const Quaternion& orientation)
+{
+ m_orientation = orientation;
+}
+
+float SoftwareDevice::getSpeedOfSound() const
+{
+ return m_speed_of_sound;
+}
+
+void SoftwareDevice::setSpeedOfSound(float speed)
+{
+ m_speed_of_sound = speed;
+}
+
+float SoftwareDevice::getDopplerFactor() const
+{
+ return m_doppler_factor;
+}
+
+void SoftwareDevice::setDopplerFactor(float factor)
+{
+ m_doppler_factor = factor;
+ if(factor == 0)
+ m_flags |= RENDER_DOPPLER;
+ else
+ m_flags &= ~RENDER_DOPPLER;
+}
+
+DistanceModel SoftwareDevice::getDistanceModel() const
+{
+ return m_distance_model;
+}
+
+void SoftwareDevice::setDistanceModel(DistanceModel model)
+{
+ m_distance_model = model;
+ if(model == DISTANCE_MODEL_INVALID)
+ m_flags |= RENDER_DISTANCE;
+ else
+ m_flags &= ~RENDER_DISTANCE;
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/file/File.cpp b/extern/audaspace/src/file/File.cpp
new file mode 100644
index 00000000000..0cdecb03657
--- /dev/null
+++ b/extern/audaspace/src/file/File.cpp
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "file/File.h"
+#include "file/FileManager.h"
+#include "util/Buffer.h"
+#include "Exception.h"
+
+#include <cstring>
+
+AUD_NAMESPACE_BEGIN
+
+File::File(std::string filename) :
+ m_filename(filename)
+{
+}
+
+File::File(const data_t* buffer, int size) :
+ m_buffer(new Buffer(size))
+{
+ std::memcpy(m_buffer->getBuffer(), buffer, size);
+}
+
+std::shared_ptr<IReader> File::createReader()
+{
+ if(m_buffer.get())
+ return FileManager::createReader(m_buffer);
+ else
+ return FileManager::createReader(m_filename);
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/file/FileManager.cpp b/extern/audaspace/src/file/FileManager.cpp
new file mode 100644
index 00000000000..f8ef8deb409
--- /dev/null
+++ b/extern/audaspace/src/file/FileManager.cpp
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "file/FileManager.h"
+#include "file/IFileInput.h"
+#include "file/IFileOutput.h"
+#include "Exception.h"
+
+AUD_NAMESPACE_BEGIN
+
+std::list<std::shared_ptr<IFileInput>>& FileManager::inputs()
+{
+ static std::list<std::shared_ptr<IFileInput>> inputs;
+ return inputs;
+}
+
+std::list<std::shared_ptr<IFileOutput>>& FileManager::outputs()
+{
+ static std::list<std::shared_ptr<IFileOutput>> outputs;
+ return outputs;
+}
+
+void FileManager::registerInput(std::shared_ptr<IFileInput> input)
+{
+ inputs().push_back(input);
+}
+
+void FileManager::registerOutput(std::shared_ptr<aud::IFileOutput> output)
+{
+ outputs().push_back(output);
+}
+
+std::shared_ptr<IReader> FileManager::createReader(std::string filename)
+{
+ for(std::shared_ptr<IFileInput> input : inputs())
+ {
+ try
+ {
+ return input->createReader(filename);
+ }
+ catch(Exception&) {}
+ }
+
+ AUD_THROW(FileException, "The file couldn't be read with any installed file reader.");
+}
+
+std::shared_ptr<IReader> FileManager::createReader(std::shared_ptr<Buffer> buffer)
+{
+ for(std::shared_ptr<IFileInput> input : inputs())
+ {
+ try
+ {
+ return input->createReader(buffer);
+ }
+ catch(Exception&) {}
+ }
+
+ AUD_THROW(FileException, "The file couldn't be read with any installed file reader.");
+}
+
+std::shared_ptr<IWriter> FileManager::createWriter(std::string filename, DeviceSpecs specs, Container format, Codec codec, unsigned int bitrate)
+{
+ for(std::shared_ptr<IFileOutput> output : outputs())
+ {
+ try
+ {
+ return output->createWriter(filename, specs, format, codec, bitrate);
+ }
+ catch(Exception&) {}
+ }
+
+ AUD_THROW(FileException, "The file couldn't be written with any installed writer.");
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/file/FileWriter.cpp b/extern/audaspace/src/file/FileWriter.cpp
new file mode 100644
index 00000000000..a6bb0f0049a
--- /dev/null
+++ b/extern/audaspace/src/file/FileWriter.cpp
@@ -0,0 +1,95 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "file/FileWriter.h"
+#include "file/FileManager.h"
+#include "util/Buffer.h"
+#include "IReader.h"
+#include "Exception.h"
+
+AUD_NAMESPACE_BEGIN
+
+std::shared_ptr<IWriter> FileWriter::createWriter(std::string filename,DeviceSpecs specs, Container format, Codec codec, unsigned int bitrate)
+{
+ return FileManager::createWriter(filename, specs, format, codec, bitrate);
+}
+
+void FileWriter::writeReader(std::shared_ptr<IReader> reader, std::shared_ptr<IWriter> writer, unsigned int length, unsigned int buffersize)
+{
+ Buffer buffer(buffersize * AUD_SAMPLE_SIZE(writer->getSpecs()));
+ sample_t* buf = buffer.getBuffer();
+
+ int len;
+ bool eos = false;
+ int channels = writer->getSpecs().channels;
+
+ for(unsigned int pos = 0; ((pos < length) || (length <= 0)) && !eos; pos += len)
+ {
+ len = buffersize;
+ if((len > length - pos) && (length > 0))
+ len = length - pos;
+ reader->read(len, eos, buf);
+
+ for(int i = 0; i < len * channels; i++)
+ {
+ // clamping!
+ if(buf[i] > 1)
+ buf[i] = 1;
+ else if(buf[i] < -1)
+ buf[i] = -1;
+ }
+
+ writer->write(len, buf);
+ }
+}
+
+void FileWriter::writeReader(std::shared_ptr<IReader> reader, std::vector<std::shared_ptr<IWriter> >& writers, unsigned int length, unsigned int buffersize)
+{
+ Buffer buffer(buffersize * AUD_SAMPLE_SIZE(reader->getSpecs()));
+ Buffer buffer2(buffersize * sizeof(sample_t));
+ sample_t* buf = buffer.getBuffer();
+ sample_t* buf2 = buffer2.getBuffer();
+
+ int len;
+ bool eos = false;
+ int channels = reader->getSpecs().channels;
+
+ for(unsigned int pos = 0; ((pos < length) || (length <= 0)) && !eos; pos += len)
+ {
+ len = buffersize;
+ if((len > length - pos) && (length > 0))
+ len = length - pos;
+ reader->read(len, eos, buf);
+
+ for(int channel = 0; channel < channels; channel++)
+ {
+ for(int i = 0; i < len; i++)
+ {
+ // clamping!
+ if(buf[i * channels + channel] > 1)
+ buf2[i] = 1;
+ else if(buf[i * channels + channel] < -1)
+ buf2[i] = -1;
+ else
+ buf2[i] = buf[i * channels + channel];
+ }
+
+ writers[channel]->write(len, buf2);
+ }
+ }
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/ADSR.cpp b/extern/audaspace/src/fx/ADSR.cpp
new file mode 100644
index 00000000000..f147affda72
--- /dev/null
+++ b/extern/audaspace/src/fx/ADSR.cpp
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "fx/ADSR.h"
+#include "fx/ADSRReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+ADSR::ADSR(std::shared_ptr<ISound> sound, float attack, float decay, float sustain, float release) :
+ Effect(sound),
+ m_attack(attack), m_decay(decay), m_sustain(sustain), m_release(release)
+{
+}
+
+float ADSR::getAttack() const
+{
+ return m_attack;
+}
+
+void ADSR::setAttack(float attack)
+{
+ m_attack = attack;
+}
+
+float ADSR::getDecay() const
+{
+ return m_decay;
+}
+
+void ADSR::setDecay(float decay)
+{
+ m_decay = decay;
+}
+
+float ADSR::getSustain() const
+{
+ return m_sustain;
+}
+
+void ADSR::setSustain(float sustain)
+{
+ m_sustain = sustain;
+}
+
+float ADSR::getRelease() const
+{
+ return m_release;
+}
+
+void ADSR::setRelease(float release)
+{
+ m_release = release;
+}
+
+std::shared_ptr<IReader> ADSR::createReader()
+{
+ return std::shared_ptr<IReader>(new ADSRReader(getReader(), m_attack, m_decay, m_sustain, m_release));
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/ADSRReader.cpp b/extern/audaspace/src/fx/ADSRReader.cpp
new file mode 100644
index 00000000000..6499b55468e
--- /dev/null
+++ b/extern/audaspace/src/fx/ADSRReader.cpp
@@ -0,0 +1,115 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "fx/ADSRReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+ADSRReader::ADSRReader(std::shared_ptr<IReader> reader, float attack, float decay, float sustain, float release) :
+ EffectReader(reader),
+ m_attack(attack), m_decay(decay), m_sustain(sustain), m_release(release)
+{
+ nextState(ADSR_STATE_ATTACK);
+}
+
+ADSRReader::~ADSRReader()
+{
+}
+
+void ADSRReader::nextState(ADSRState state)
+{
+ m_state = state;
+
+ switch(m_state)
+ {
+ case ADSR_STATE_ATTACK:
+ m_level = 0;
+ if(m_attack <= 0)
+ {
+ nextState(ADSR_STATE_DECAY);
+ return;
+ }
+ return;
+ case ADSR_STATE_DECAY:
+ if(m_decay <= 0)
+ {
+ nextState(ADSR_STATE_SUSTAIN);
+ return;
+ }
+ if(m_level > 1.0)
+ m_level = 1 - (m_level - 1) * m_attack / m_decay * (1 - m_sustain);
+ if(m_level <= m_sustain)
+ nextState(ADSR_STATE_SUSTAIN);
+ break;
+ case ADSR_STATE_SUSTAIN:
+ m_level = m_sustain;
+ break;
+ case ADSR_STATE_RELEASE:
+ if(m_release <= 0)
+ {
+ nextState(ADSR_STATE_INVALID);
+ return;
+ }
+ break;
+ case ADSR_STATE_INVALID:
+ break;
+ }
+}
+
+void ADSRReader::read(int & length, bool &eos, sample_t* buffer)
+{
+ Specs specs = m_reader->getSpecs();
+ m_reader->read(length, eos, buffer);
+
+ for(int i = 0; i < length; i++)
+ {
+ for(int channel = 0; channel < specs.channels; channel++)
+ {
+ buffer[i * specs.channels + channel] *= m_level;
+ }
+
+ switch(m_state)
+ {
+ case ADSR_STATE_ATTACK:
+ m_level += 1 / m_attack / specs.rate;
+ if(m_level >= 1)
+ nextState(ADSR_STATE_DECAY);
+ break;
+ case ADSR_STATE_DECAY:
+ m_level -= (1 - m_sustain) / m_decay / specs.rate;
+ if(m_level <= m_sustain)
+ nextState(ADSR_STATE_SUSTAIN);
+ break;
+ case ADSR_STATE_SUSTAIN:
+ break;
+ case ADSR_STATE_RELEASE:
+ m_level -= m_sustain / m_release / specs.rate ;
+ if(m_level <= 0)
+ nextState(ADSR_STATE_INVALID);
+ break;
+ case ADSR_STATE_INVALID:
+ length = i;
+ return;
+ }
+ }
+}
+
+void ADSRReader::release()
+{
+ nextState(ADSR_STATE_RELEASE);
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/Accumulator.cpp b/extern/audaspace/src/fx/Accumulator.cpp
new file mode 100644
index 00000000000..ba8e6a2841e
--- /dev/null
+++ b/extern/audaspace/src/fx/Accumulator.cpp
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "fx/Accumulator.h"
+#include "fx/CallbackIIRFilterReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+sample_t Accumulator::accumulatorFilterAdditive(CallbackIIRFilterReader* reader, void* useless)
+{
+ float in = reader->x(0);
+ float lastin = reader->x(-1);
+ float out = reader->y(-1) + in - lastin;
+ if(in > lastin)
+ out += in - lastin;
+ return out;
+}
+
+sample_t Accumulator::accumulatorFilter(CallbackIIRFilterReader* reader, void* useless)
+{
+ float in = reader->x(0);
+ float lastin = reader->x(-1);
+ float out = reader->y(-1);
+ if(in > lastin)
+ out += in - lastin;
+ return out;
+}
+
+Accumulator::Accumulator(std::shared_ptr<ISound> sound,
+ bool additive) :
+ Effect(sound),
+ m_additive(additive)
+{
+}
+
+std::shared_ptr<IReader> Accumulator::createReader()
+{
+ return std::shared_ptr<IReader>(new CallbackIIRFilterReader(getReader(), 2, 2, m_additive ? accumulatorFilterAdditive : accumulatorFilter));
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/BaseIIRFilterReader.cpp b/extern/audaspace/src/fx/BaseIIRFilterReader.cpp
new file mode 100644
index 00000000000..6505e5ea600
--- /dev/null
+++ b/extern/audaspace/src/fx/BaseIIRFilterReader.cpp
@@ -0,0 +1,125 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "fx/BaseIIRFilterReader.h"
+
+#include <cstring>
+
+AUD_NAMESPACE_BEGIN
+
+BaseIIRFilterReader::BaseIIRFilterReader(std::shared_ptr<IReader> reader, int in, int out) :
+ EffectReader(reader),
+ m_specs(reader->getSpecs()),
+ m_xlen(in), m_ylen(out),
+ m_xpos(0), m_ypos(0), m_channel(0)
+{
+ m_x = new sample_t[m_xlen * m_specs.channels];
+ m_y = new sample_t[m_ylen * m_specs.channels];
+
+ std::memset(m_x, 0, sizeof(sample_t) * m_xlen * m_specs.channels);
+ std::memset(m_y, 0, sizeof(sample_t) * m_ylen * m_specs.channels);
+}
+
+BaseIIRFilterReader::~BaseIIRFilterReader()
+{
+ delete[] m_x;
+ delete[] m_y;
+}
+
+void BaseIIRFilterReader::setLengths(int in, int out)
+{
+ if(in != m_xlen)
+ {
+ sample_t* xn = new sample_t[in * m_specs.channels];
+ std::memset(xn, 0, sizeof(sample_t) * in * m_specs.channels);
+
+ for(m_channel = 0; m_channel < m_specs.channels; m_channel++)
+ {
+ for(int i = 1; i <= in && i <= m_xlen; i++)
+ {
+ xn[(in - i) * m_specs.channels + m_channel] = x(-i);
+ }
+ }
+
+ delete[] m_x;
+ m_x = xn;
+ m_xpos = 0;
+ m_xlen = in;
+ }
+
+ if(out != m_ylen)
+ {
+ sample_t* yn = new sample_t[out * m_specs.channels];
+ std::memset(yn, 0, sizeof(sample_t) * out * m_specs.channels);
+
+ for(m_channel = 0; m_channel < m_specs.channels; m_channel++)
+ {
+ for(int i = 1; i <= out && i <= m_ylen; i++)
+ {
+ yn[(out - i) * m_specs.channels + m_channel] = y(-i);
+ }
+ }
+
+ delete[] m_y;
+ m_y = yn;
+ m_ypos = 0;
+ m_ylen = out;
+ }
+}
+
+void BaseIIRFilterReader::read(int& length, bool& eos, sample_t* buffer)
+{
+ Specs specs = m_reader->getSpecs();
+ if(specs.channels != m_specs.channels)
+ {
+ m_specs.channels = specs.channels;
+
+ delete[] m_x;
+ delete[] m_y;
+
+ m_x = new sample_t[m_xlen * m_specs.channels];
+ m_y = new sample_t[m_ylen * m_specs.channels];
+
+ std::memset(m_x, 0, sizeof(sample_t) * m_xlen * m_specs.channels);
+ std::memset(m_y, 0, sizeof(sample_t) * m_ylen * m_specs.channels);
+ }
+
+ if(specs.rate != m_specs.rate)
+ {
+ m_specs = specs;
+ sampleRateChanged(m_specs.rate);
+ }
+
+ m_reader->read(length, eos, buffer);
+
+ for(m_channel = 0; m_channel < m_specs.channels; m_channel++)
+ {
+ for(int i = 0; i < length; i++)
+ {
+ m_x[m_xpos * m_specs.channels + m_channel] = buffer[i * m_specs.channels + m_channel];
+ m_y[m_ypos * m_specs.channels + m_channel] = buffer[i * m_specs.channels + m_channel] = filter();
+
+ m_xpos = m_xlen ? (m_xpos + 1) % m_xlen : 0;
+ m_ypos = m_ylen ? (m_ypos + 1) % m_ylen : 0;
+ }
+ }
+}
+
+void BaseIIRFilterReader::sampleRateChanged(SampleRate rate)
+{
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/BinauralReader.cpp b/extern/audaspace/src/fx/BinauralReader.cpp
new file mode 100644
index 00000000000..2792adada8a
--- /dev/null
+++ b/extern/audaspace/src/fx/BinauralReader.cpp
@@ -0,0 +1,255 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "fx/BinauralReader.h"
+#include "Exception.h"
+
+#include <cstring>
+#include <cstdlib>
+#include <algorithm>
+
+#define NUM_OUTCHANNELS 2
+#define NUM_CONVOLVERS 4
+#define CROSSFADE_SAMPLES 1024
+
+AUD_NAMESPACE_BEGIN
+BinauralReader::BinauralReader(std::shared_ptr<IReader> reader, std::shared_ptr<HRTF> hrtfs, std::shared_ptr<Source> source, std::shared_ptr<ThreadPool> threadPool, std::shared_ptr<FFTPlan> plan) :
+ m_reader(reader), m_hrtfs(hrtfs), m_source(source), m_N(plan->getSize()), m_threadPool(threadPool), m_position(0), m_eosReader(false), m_eosTail(false), m_transition(false), m_transPos(CROSSFADE_SAMPLES*NUM_OUTCHANNELS)
+{
+ if(m_hrtfs->isEmpty())
+ AUD_THROW(StateException, "The provided HRTF object is empty");
+ if(m_reader->getSpecs().channels != 1)
+ AUD_THROW(StateException, "The sound must have only one channel");
+ if(m_reader->getSpecs().rate != m_hrtfs->getSpecs().rate)
+ AUD_THROW(StateException, "The sound and the HRTFs must have the same rate");
+ m_M = m_L = m_N / 2;
+
+ m_RealAzimuth = m_Azimuth = m_source->getAzimuth();
+ m_RealElevation = m_Elevation = m_source->getElevation();
+ auto irs = m_hrtfs->getImpulseResponse(m_RealAzimuth, m_RealElevation);
+ for(unsigned int i = 0; i < NUM_CONVOLVERS; i++)
+ if(i%NUM_OUTCHANNELS==0)
+ m_convolvers.push_back(std::unique_ptr<Convolver>(new Convolver(irs.first->getChannel(0), irs.first->getLength(), m_threadPool, plan)));
+ else
+ m_convolvers.push_back(std::unique_ptr<Convolver>(new Convolver(irs.second->getChannel(0), irs.second->getLength(), m_threadPool, plan)));
+ m_futures.resize(NUM_CONVOLVERS);
+
+ m_outBuffer = (sample_t*)std::malloc(m_L*NUM_OUTCHANNELS*sizeof(sample_t));
+ m_eOutBufLen = m_outBufLen = m_outBufferPos = m_L * NUM_OUTCHANNELS;
+ m_inBuffer = (sample_t*)std::malloc(m_L * sizeof(sample_t));
+ for(int i = 0; i < NUM_CONVOLVERS; i++)
+ m_vecOut.push_back((sample_t*)std::calloc(m_L, sizeof(sample_t)));
+}
+
+BinauralReader::~BinauralReader()
+{
+ std::free(m_outBuffer);
+ std::free(m_inBuffer);
+ for(int i = 0; i < m_vecOut.size(); i++)
+ std::free(m_vecOut[i]);
+}
+
+bool BinauralReader::isSeekable() const
+{
+ return m_reader->isSeekable();
+}
+
+void BinauralReader::seek(int position)
+{
+ m_position = position;
+ m_reader->seek(position);
+ for(int i = 0; i < NUM_CONVOLVERS; i++)
+ m_convolvers[i]->reset();
+ m_eosTail = false;
+ m_eosReader = false;
+ m_outBufferPos = m_eOutBufLen = m_outBufLen;
+ m_transition = false;
+ m_transPos = CROSSFADE_SAMPLES*NUM_OUTCHANNELS;
+}
+
+int BinauralReader::getLength() const
+{
+ return m_reader->getLength();
+}
+
+int BinauralReader::getPosition() const
+{
+ return m_position;
+}
+
+Specs BinauralReader::getSpecs() const
+{
+ Specs specs = m_reader->getSpecs();
+ specs.channels = CHANNELS_STEREO;
+ return specs;
+}
+
+void BinauralReader::read(int& length, bool& eos, sample_t* buffer)
+{
+ int samples = 0;
+ int iteration = 0;
+ if(length <= 0)
+ {
+ length = 0;
+ eos = (m_eosTail && m_outBufferPos >= m_eOutBufLen);
+ return;
+ }
+
+ eos = false;
+ int writePos = 0;
+ do
+ {
+ int bufRest = m_eOutBufLen - m_outBufferPos;
+ int writeLength = std::min((length*NUM_OUTCHANNELS) - writePos, m_eOutBufLen + bufRest);
+ if(bufRest < writeLength || (m_eOutBufLen == 0 && m_eosTail))
+ {
+ if(bufRest > 0)
+ std::memcpy(buffer + writePos, m_outBuffer + m_outBufferPos, bufRest*sizeof(sample_t));
+ if(!m_eosTail)
+ {
+ int n = NUM_OUTCHANNELS;
+ if(m_transition)
+ n = NUM_CONVOLVERS;
+ else if(checkSource())
+ n = NUM_CONVOLVERS;
+ loadBuffer(n);
+
+ int len = std::min(std::abs(writeLength - bufRest), m_eOutBufLen);
+ std::memcpy(buffer + writePos + bufRest, m_outBuffer, len*sizeof(sample_t));
+ samples += len;
+ m_outBufferPos = len;
+ writeLength = std::min((length*NUM_OUTCHANNELS) - writePos, m_eOutBufLen + bufRest);
+ }
+ else
+ {
+ m_outBufferPos += bufRest;
+ length = (writePos+bufRest) / NUM_OUTCHANNELS;
+ eos = true;
+ return;
+ }
+ }
+ else
+ {
+ std::memcpy(buffer + writePos, m_outBuffer + m_outBufferPos, writeLength*sizeof(sample_t));
+ m_outBufferPos += writeLength;
+ }
+ writePos += writeLength;
+ iteration++;
+ } while(writePos < length*NUM_OUTCHANNELS);
+ m_position += length;
+}
+
+bool BinauralReader::checkSource()
+{
+ if((m_Azimuth != m_source->getAzimuth() || m_Elevation != m_source->getElevation()) && (!m_eosReader && !m_eosTail))
+ {
+ float az = m_Azimuth = m_source->getAzimuth();
+ float el = m_Elevation = m_source->getElevation();
+ auto irs = m_hrtfs->getImpulseResponse(az, el);
+ if(az != m_RealAzimuth || el != m_RealElevation)
+ {
+ m_RealAzimuth = az;
+ m_RealElevation = el;
+ for(int i = 0; i < NUM_OUTCHANNELS; i++)
+ {
+ auto temp = std::move(m_convolvers[i]);
+ m_convolvers[i] = std::move(m_convolvers[i + NUM_OUTCHANNELS]);
+ m_convolvers[i + NUM_OUTCHANNELS] = std::move(temp);
+ }
+ for(int i = 0; i < NUM_OUTCHANNELS; i++)
+ if(i%NUM_OUTCHANNELS == 0)
+ m_convolvers[i]->setImpulseResponse(irs.first->getChannel(0));
+ else
+ m_convolvers[i]->setImpulseResponse(irs.second->getChannel(0));
+
+ m_transPos = CROSSFADE_SAMPLES*NUM_OUTCHANNELS;
+ m_transition = true;
+ return true;
+ }
+ }
+ return false;
+}
+
+void BinauralReader::loadBuffer(int nConvolvers)
+{
+ m_lastLengthIn = m_L;
+ m_reader->read(m_lastLengthIn, m_eosReader, m_inBuffer);
+ if(!m_eosReader || m_lastLengthIn > 0)
+ {
+ int len = m_lastLengthIn;
+ for(int i = 0; i < nConvolvers; i++)
+ m_futures[i] = m_threadPool->enqueue(&BinauralReader::threadFunction, this, i, true);
+ for(int i = 0; i < nConvolvers; i++)
+ len = m_futures[i].get();
+
+ joinByChannel(0, len, nConvolvers);
+ m_eOutBufLen = len*NUM_OUTCHANNELS;
+ }
+ else if(!m_eosTail)
+ {
+ int len = m_lastLengthIn = m_L;
+ for(int i = 0; i < nConvolvers; i++)
+ m_futures[i] = m_threadPool->enqueue(&BinauralReader::threadFunction, this, i, false);
+ for(int i = 0; i < nConvolvers; i++)
+ len = m_futures[i].get();
+
+ joinByChannel(0, len, nConvolvers);
+ m_eOutBufLen = len*NUM_OUTCHANNELS;
+ }
+}
+
+void BinauralReader::joinByChannel(int start, int len, int nConvolvers)
+{
+ int k = 0;
+ float vol = 0;
+ const int l = CROSSFADE_SAMPLES*NUM_OUTCHANNELS;
+ for(int i = 0; i < len*NUM_OUTCHANNELS; i += NUM_OUTCHANNELS)
+ {
+ if(m_transition)
+ {
+ vol = (m_transPos - i) / (float)l;
+ if(vol > 1.0f)
+ vol = 1.0f;
+ else if(vol < 0.0f)
+ vol = 0.0f;
+ }
+
+ for(int j = 0; j < NUM_OUTCHANNELS; j++)
+ m_outBuffer[i + j + start] = ((m_vecOut[j][k] * (1.0f - vol)) + (m_vecOut[j + NUM_OUTCHANNELS][k] * vol))*m_source->getVolume();
+ k++;
+ }
+ if(m_transition)
+ {
+ m_transPos -= len*NUM_OUTCHANNELS;
+ if(m_transPos <= 0)
+ {
+ m_transition = false;
+ m_transPos = l;
+ }
+ }
+}
+
+int BinauralReader::threadFunction(int id, bool input)
+{
+ int l = m_lastLengthIn;
+ if(input)
+ m_convolvers[id]->getNext(m_inBuffer, m_vecOut[id], l, m_eosTail);
+ else
+ m_convolvers[id]->getNext(nullptr, m_vecOut[id], l, m_eosTail);
+ return l;
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/BinauralSound.cpp b/extern/audaspace/src/fx/BinauralSound.cpp
new file mode 100644
index 00000000000..7b9508c9944
--- /dev/null
+++ b/extern/audaspace/src/fx/BinauralSound.cpp
@@ -0,0 +1,60 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "fx/BinauralSound.h"
+#include "fx/BinauralReader.h"
+#include "Exception.h"
+
+#include <cstring>
+
+AUD_NAMESPACE_BEGIN
+
+BinauralSound::BinauralSound(std::shared_ptr<ISound> sound, std::shared_ptr<HRTF> hrtfs, std::shared_ptr<Source> source, std::shared_ptr<ThreadPool> threadPool) :
+ BinauralSound(sound, hrtfs, source, threadPool, std::make_shared<FFTPlan>(0.0))
+{
+}
+
+BinauralSound::BinauralSound(std::shared_ptr<ISound> sound, std::shared_ptr<HRTF> hrtfs, std::shared_ptr<Source> source, std::shared_ptr<ThreadPool> threadPool, std::shared_ptr<FFTPlan> plan) :
+ m_sound(sound), m_hrtfs(hrtfs), m_source(source), m_threadPool(threadPool), m_plan(plan)
+{
+}
+
+std::shared_ptr<IReader> BinauralSound::createReader()
+{
+ return std::make_shared<BinauralReader>(m_sound->createReader(), m_hrtfs, m_source, m_threadPool, m_plan);
+}
+
+std::shared_ptr<HRTF> BinauralSound::getHRTFs()
+{
+ return m_hrtfs;
+}
+
+void BinauralSound::setHRTFs(std::shared_ptr<HRTF> hrtfs)
+{
+ m_hrtfs = hrtfs;
+}
+
+std::shared_ptr<Source> BinauralSound::getSource()
+{
+ return m_source;
+}
+
+void BinauralSound::setSource(std::shared_ptr<Source> source)
+{
+ m_source = source;
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/Butterworth.cpp b/extern/audaspace/src/fx/Butterworth.cpp
new file mode 100644
index 00000000000..1d86cd799b8
--- /dev/null
+++ b/extern/audaspace/src/fx/Butterworth.cpp
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "fx/Butterworth.h"
+#include "fx/ButterworthCalculator.h"
+
+AUD_NAMESPACE_BEGIN
+
+Butterworth::Butterworth(std::shared_ptr<ISound> sound, float frequency) :
+ DynamicIIRFilter(sound, std::shared_ptr<IDynamicIIRFilterCalculator>(new ButterworthCalculator(frequency)))
+{
+}
+
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/ButterworthCalculator.cpp b/extern/audaspace/src/fx/ButterworthCalculator.cpp
new file mode 100644
index 00000000000..f249fd45f15
--- /dev/null
+++ b/extern/audaspace/src/fx/ButterworthCalculator.cpp
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "fx/ButterworthCalculator.h"
+
+#include <cmath>
+
+#define BWPB41 0.76536686473
+#define BWPB42 1.84775906502
+
+AUD_NAMESPACE_BEGIN
+
+ButterworthCalculator::ButterworthCalculator(float frequency) :
+ m_frequency(frequency)
+{
+}
+
+void ButterworthCalculator::recalculateCoefficients(SampleRate rate, std::vector<float> &b, std::vector<float> &a)
+{
+ float omega = 2 * std::tan(m_frequency * M_PI / rate);
+ float o2 = omega * omega;
+ float o4 = o2 * o2;
+ float x1 = o2 + 2.0f * (float)BWPB41 * omega + 4.0f;
+ float x2 = o2 + 2.0f * (float)BWPB42 * omega + 4.0f;
+ float y1 = o2 - 2.0f * (float)BWPB41 * omega + 4.0f;
+ float y2 = o2 - 2.0f * (float)BWPB42 * omega + 4.0f;
+ float o228 = 2.0f * o2 - 8.0f;
+ float norm = x1 * x2;
+ a.push_back(1);
+ a.push_back((x1 + x2) * o228 / norm);
+ a.push_back((x1 * y2 + x2 * y1 + o228 * o228) / norm);
+ a.push_back((y1 + y2) * o228 / norm);
+ a.push_back(y1 * y2 / norm);
+ b.push_back(o4 / norm);
+ b.push_back(4 * o4 / norm);
+ b.push_back(6 * o4 / norm);
+ b.push_back(b[1]);
+ b.push_back(b[0]);
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/CallbackIIRFilterReader.cpp b/extern/audaspace/src/fx/CallbackIIRFilterReader.cpp
new file mode 100644
index 00000000000..f24b6b6c9ec
--- /dev/null
+++ b/extern/audaspace/src/fx/CallbackIIRFilterReader.cpp
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "fx/CallbackIIRFilterReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+CallbackIIRFilterReader::CallbackIIRFilterReader(std::shared_ptr<IReader> reader, int in, int out, doFilterIIR doFilter, endFilterIIR endFilter, void* data) :
+ BaseIIRFilterReader(reader, in, out),
+ m_filter(doFilter), m_endFilter(endFilter), m_data(data)
+{
+}
+
+CallbackIIRFilterReader::~CallbackIIRFilterReader()
+{
+ if(m_endFilter)
+ m_endFilter(m_data);
+}
+
+sample_t CallbackIIRFilterReader::filter()
+{
+ return m_filter(this, m_data);
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/Convolver.cpp b/extern/audaspace/src/fx/Convolver.cpp
new file mode 100644
index 00000000000..24b205e9282
--- /dev/null
+++ b/extern/audaspace/src/fx/Convolver.cpp
@@ -0,0 +1,156 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "fx/Convolver.h"
+
+#include <cmath>
+#include <cstdlib>
+#include <algorithm>
+#include <cstring>
+
+AUD_NAMESPACE_BEGIN
+Convolver::Convolver(std::shared_ptr<std::vector<std::shared_ptr<std::vector<std::complex<sample_t>>>>> ir, int irLength, std::shared_ptr<ThreadPool> threadPool, std::shared_ptr<FFTPlan> plan) :
+ m_N(plan->getSize()), m_M(plan->getSize()/2), m_L(plan->getSize()/2), m_irBuffers(ir), m_irLength(irLength), m_threadPool(threadPool), m_numThreads(std::min(threadPool->getNumOfThreads(), static_cast<unsigned int>(m_irBuffers->size() - 1))), m_tailCounter(0), m_eos(false)
+
+{
+ m_resetFlag = false;
+ m_futures.resize(m_numThreads);
+ for(int i = 0; i < m_irBuffers->size(); i++)
+ {
+ m_fftConvolvers.push_back(std::unique_ptr<FFTConvolver>(new FFTConvolver((*m_irBuffers)[i], plan)));
+ m_delayLine.push_front((fftwf_complex*)std::calloc((m_N / 2) + 1, sizeof(fftwf_complex)));
+ }
+
+ m_accBuffer = (fftwf_complex*)std::calloc((m_N / 2) + 1, sizeof(fftwf_complex));
+ for(int i = 0; i < m_numThreads; i++)
+ m_threadAccBuffers.push_back((fftwf_complex*)std::calloc((m_N / 2) + 1, sizeof(fftwf_complex)));
+}
+
+Convolver::~Convolver()
+{
+ m_resetFlag = true;
+ for(auto &fut : m_futures)
+ if(fut.valid())
+ fut.get();
+
+ std::free(m_accBuffer);
+ for(auto buf : m_threadAccBuffers)
+ std::free(buf);
+ while(!m_delayLine.empty())
+ {
+ std::free(m_delayLine.front());
+ m_delayLine.pop_front();
+ }
+}
+
+void Convolver::getNext(sample_t* inBuffer, sample_t* outBuffer, int& length, bool& eos)
+{
+ if(length > m_L)
+ {
+ length = 0;
+ eos = m_eos;
+ return;
+ }
+ if(m_eos)
+ {
+ eos = m_eos;
+ length = 0;
+ return;
+ }
+
+ eos = false;
+ for(auto &fut : m_futures)
+ if(fut.valid())
+ fut.get();
+
+ if(inBuffer != nullptr)
+ m_fftConvolvers[0]->getNextFDL(inBuffer, reinterpret_cast<std::complex<sample_t>*>(m_accBuffer), length, m_delayLine[0]);
+ else
+ {
+ m_tailCounter++;
+ std::memset(outBuffer, 0, m_L*sizeof(sample_t));
+ m_fftConvolvers[0]->getNextFDL(outBuffer, reinterpret_cast<std::complex<sample_t>*>(m_accBuffer), length, m_delayLine[0]);
+ }
+ m_delayLine.push_front(m_delayLine.back());
+ m_delayLine.pop_back();
+ length = m_L;
+ m_fftConvolvers[0]->IFFT_FDL(m_accBuffer, outBuffer, length);
+ std::memset(m_accBuffer, 0, ((m_N / 2) + 1)*sizeof(fftwf_complex));
+
+ if(m_tailCounter >= m_delayLine.size() && inBuffer == nullptr)
+ {
+ eos = m_eos = true;
+ length = m_irLength%m_M;
+ if(length == 0)
+ length = m_M;
+ }
+ else
+ for(int i = 0; i < m_futures.size(); i++)
+ m_futures[i] = m_threadPool->enqueue(&Convolver::threadFunction, this, i);
+}
+
+void Convolver::reset()
+{
+ m_resetFlag = true;
+ for(auto &fut : m_futures)
+ if(fut.valid())
+ fut.get();
+
+ for(int i = 0; i < m_delayLine.size();i++)
+ std::memset(m_delayLine[i], 0, ((m_N / 2) + 1)*sizeof(fftwf_complex));
+ for(int i = 0; i < m_fftConvolvers.size(); i++)
+ m_fftConvolvers[i]->clear();
+ std::memset(m_accBuffer, 0, ((m_N / 2) + 1)*sizeof(fftwf_complex));
+ m_tailCounter = 0;
+ m_eos = false;
+ m_resetFlag = false;
+}
+
+std::shared_ptr<std::vector<std::shared_ptr<std::vector<std::complex<sample_t>>>>> Convolver::getImpulseResponse()
+{
+ return m_irBuffers;
+}
+
+void Convolver::setImpulseResponse(std::shared_ptr<std::vector<std::shared_ptr<std::vector<std::complex<sample_t>>>>> ir)
+{
+ reset();
+ m_irBuffers = ir;
+ for(int i = 0; i < m_irBuffers->size(); i++)
+ m_fftConvolvers[i]->setImpulseResponse((*m_irBuffers)[i]);
+}
+
+bool Convolver::threadFunction(int id)
+{
+ int total = m_irBuffers->size();
+ int share = std::ceil(((float)total - 1) / (float)m_numThreads);
+ int start = id*share + 1;
+ int end = std::min(start + share, total);
+
+ std::memset(m_threadAccBuffers[id], 0, ((m_N / 2) + 1)*sizeof(fftwf_complex));
+
+ for(int i = start; i < end && !m_resetFlag; i++)
+ m_fftConvolvers[i]->getNextFDL(reinterpret_cast<std::complex<sample_t>*>(m_delayLine[i]), reinterpret_cast<std::complex<sample_t>*>(m_threadAccBuffers[id]));
+
+ m_sumMutex.lock();
+ for(int i = 0; (i < m_N / 2 + 1) && !m_resetFlag; i++)
+ {
+ m_accBuffer[i][0] += m_threadAccBuffers[id][i][0];
+ m_accBuffer[i][1] += m_threadAccBuffers[id][i][1];
+ }
+ m_sumMutex.unlock();
+ return true;
+}
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/ConvolverReader.cpp b/extern/audaspace/src/fx/ConvolverReader.cpp
new file mode 100644
index 00000000000..d5d9050f9a1
--- /dev/null
+++ b/extern/audaspace/src/fx/ConvolverReader.cpp
@@ -0,0 +1,203 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "fx/ConvolverReader.h"
+#include "Exception.h"
+
+#include <cstring>
+#include <algorithm>
+#include <cmath>
+#include <cstdlib>
+
+AUD_NAMESPACE_BEGIN
+ConvolverReader::ConvolverReader(std::shared_ptr<IReader> reader, std::shared_ptr<ImpulseResponse> ir, std::shared_ptr<ThreadPool> threadPool, std::shared_ptr<FFTPlan> plan) :
+ m_reader(reader), m_ir(ir), m_N(plan->getSize()), m_eosReader(false), m_eosTail(false), m_inChannels(reader->getSpecs().channels), m_irChannels(ir->getSpecs().channels), m_threadPool(threadPool), m_position(0)
+{
+ m_nChannelThreads = std::min((int)threadPool->getNumOfThreads(), m_inChannels);
+ m_futures.resize(m_nChannelThreads);
+
+ int irLength = m_ir->getLength();
+ if(m_irChannels != 1 && m_irChannels != m_inChannels)
+ AUD_THROW(StateException, "The impulse response and the sound must either have the same amount of channels or the impulse response must be mono");
+ if(m_reader->getSpecs().rate != m_ir->getSpecs().rate)
+ AUD_THROW(StateException, "The sound and the impulse response. must have the same rate");
+
+ m_M = m_L = m_N / 2;
+
+ if(m_irChannels > 1)
+ for(int i = 0; i < m_inChannels; i++)
+ m_convolvers.push_back(std::unique_ptr<Convolver>(new Convolver(ir->getChannel(i), irLength, m_threadPool, plan)));
+ else
+ for(int i = 0; i < m_inChannels; i++)
+ m_convolvers.push_back(std::unique_ptr<Convolver>(new Convolver(ir->getChannel(0), irLength, m_threadPool, plan)));
+
+ for(int i = 0; i < m_inChannels; i++)
+ m_vecInOut.push_back((sample_t*)std::malloc(m_L*sizeof(sample_t)));
+ m_outBuffer = (sample_t*)std::malloc(m_L*m_inChannels*sizeof(sample_t));
+ m_outBufLen = m_eOutBufLen = m_outBufferPos = m_L*m_inChannels;
+}
+
+ConvolverReader::~ConvolverReader()
+{
+ std::free(m_outBuffer);
+ for(int i = 0; i < m_inChannels; i++)
+ std::free(m_vecInOut[i]);
+}
+
+bool ConvolverReader::isSeekable() const
+{
+ return m_reader->isSeekable();
+}
+
+void ConvolverReader::seek(int position)
+{
+ m_position = position;
+ m_reader->seek(position);
+ for(int i = 0; i < m_inChannels; i++)
+ m_convolvers[i]->reset();
+ m_eosTail = false;
+ m_eosReader = false;
+ m_outBufferPos = m_eOutBufLen = m_outBufLen;
+}
+
+int ConvolverReader::getLength() const
+{
+ return m_reader->getLength();
+}
+
+int ConvolverReader::getPosition() const
+{
+ return m_position;
+}
+
+Specs ConvolverReader::getSpecs() const
+{
+ return m_reader->getSpecs();
+}
+
+void ConvolverReader::read(int& length, bool& eos, sample_t* buffer)
+{
+ if(length <= 0)
+ {
+ length = 0;
+ eos = (m_eosTail && m_outBufferPos >= m_eOutBufLen);
+ return;
+ }
+ eos = false;
+ int writePos = 0;
+ do
+ {
+ int bufRest = m_eOutBufLen - m_outBufferPos;
+ int writeLength = std::min((length*m_inChannels) - writePos, m_eOutBufLen + bufRest);
+ if(bufRest < writeLength || (m_eOutBufLen == 0 && m_eosTail))
+ {
+ if(bufRest > 0)
+ std::memcpy(buffer + writePos, m_outBuffer + m_outBufferPos, bufRest*sizeof(sample_t));
+ if(!m_eosTail)
+ {
+ loadBuffer();
+ int len = std::min(std::abs(writeLength - bufRest), m_eOutBufLen);
+ std::memcpy(buffer + writePos + bufRest, m_outBuffer, len*sizeof(sample_t));
+ m_outBufferPos = len;
+ writeLength = std::min((length*m_inChannels) - writePos, m_eOutBufLen + bufRest);
+ }
+ else
+ {
+ m_outBufferPos += bufRest;
+ length = (writePos + bufRest) / m_inChannels;
+ eos = true;
+ return;
+ }
+ }
+ else
+ {
+ std::memcpy(buffer + writePos, m_outBuffer + m_outBufferPos, writeLength*sizeof(sample_t));
+ m_outBufferPos += writeLength;
+ }
+ writePos += writeLength;
+ } while(writePos < length*m_inChannels);
+ m_position += length;
+}
+
+void ConvolverReader::loadBuffer()
+{
+ m_lastLengthIn = m_L;
+ m_reader->read(m_lastLengthIn, m_eosReader, m_outBuffer);
+ if(!m_eosReader || m_lastLengthIn>0)
+ {
+ divideByChannel(m_outBuffer, m_lastLengthIn*m_inChannels);
+ int len = m_lastLengthIn;
+
+ for(int i = 0; i < m_futures.size(); i++)
+ m_futures[i] = m_threadPool->enqueue(&ConvolverReader::threadFunction, this, i, true);
+ for(auto &fut : m_futures)
+ len = fut.get();
+
+ joinByChannel(0, len);
+ m_eOutBufLen = len*m_inChannels;
+ }
+ else if(!m_eosTail)
+ {
+ int len = m_lastLengthIn = m_L;
+ for(int i = 0; i < m_futures.size(); i++)
+ m_futures[i] = m_threadPool->enqueue(&ConvolverReader::threadFunction, this, i, false);
+ for(auto &fut : m_futures)
+ len = fut.get();
+
+ joinByChannel(0, len);
+ m_eOutBufLen = len*m_inChannels;
+ }
+}
+
+void ConvolverReader::divideByChannel(const sample_t* buffer, int len)
+{
+ int k = 0;
+ for(int i = 0; i < len; i += m_inChannels)
+ {
+ for(int j = 0; j < m_inChannels; j++)
+ m_vecInOut[j][k] = buffer[i + j];
+ k++;
+ }
+}
+
+void ConvolverReader::joinByChannel(int start, int len)
+{
+ int k = 0;
+ for(int i = 0; i < len*m_inChannels; i += m_inChannels)
+ {
+ for(int j = 0; j < m_vecInOut.size(); j++)
+ m_outBuffer[i + j + start] = m_vecInOut[j][k];
+ k++;
+ }
+}
+
+int ConvolverReader::threadFunction(int id, bool input)
+{
+ int share = std::ceil((float)m_inChannels / (float)m_nChannelThreads);
+ int start = id*share;
+ int end = std::min(start + share, m_inChannels);
+
+ int l=m_lastLengthIn;
+ for(int i = start; i < end; i++)
+ if(input)
+ m_convolvers[i]->getNext(m_vecInOut[i], m_vecInOut[i], l, m_eosTail);
+ else
+ m_convolvers[i]->getNext(nullptr, m_vecInOut[i], l, m_eosTail);
+
+ return l;
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/ConvolverSound.cpp b/extern/audaspace/src/fx/ConvolverSound.cpp
new file mode 100644
index 00000000000..9bdf5a66652
--- /dev/null
+++ b/extern/audaspace/src/fx/ConvolverSound.cpp
@@ -0,0 +1,50 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "fx/ConvolverSound.h"
+#include "fx/ConvolverReader.h"
+#include "Exception.h"
+
+#include <cstring>
+
+AUD_NAMESPACE_BEGIN
+
+ConvolverSound::ConvolverSound(std::shared_ptr<ISound> sound, std::shared_ptr<ImpulseResponse> impulseResponse, std::shared_ptr<ThreadPool> threadPool) :
+ ConvolverSound(sound, impulseResponse, threadPool, std::make_shared<FFTPlan>(0.0))
+{
+}
+
+ConvolverSound::ConvolverSound(std::shared_ptr<ISound> sound, std::shared_ptr<ImpulseResponse> impulseResponse, std::shared_ptr<ThreadPool> threadPool, std::shared_ptr<FFTPlan> plan) :
+ m_sound(sound), m_impulseResponse(impulseResponse), m_threadPool(threadPool), m_plan(plan)
+{
+}
+
+std::shared_ptr<IReader> ConvolverSound::createReader()
+{
+ return std::make_shared<ConvolverReader>(m_sound->createReader(), m_impulseResponse, m_threadPool, m_plan);
+}
+
+std::shared_ptr<ImpulseResponse> ConvolverSound::getImpulseResponse()
+{
+ return m_impulseResponse;
+}
+
+void ConvolverSound::setImpulseResponse(std::shared_ptr<ImpulseResponse> impulseResponse)
+{
+ m_impulseResponse = impulseResponse;
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/Delay.cpp b/extern/audaspace/src/fx/Delay.cpp
new file mode 100644
index 00000000000..e2a82299bc0
--- /dev/null
+++ b/extern/audaspace/src/fx/Delay.cpp
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "fx/Delay.h"
+#include "fx/DelayReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+Delay::Delay(std::shared_ptr<ISound> sound, float delay) :
+ Effect(sound),
+ m_delay(delay)
+{
+}
+
+float Delay::getDelay() const
+{
+ return m_delay;
+}
+
+std::shared_ptr<IReader> Delay::createReader()
+{
+ return std::shared_ptr<IReader>(new DelayReader(getReader(), m_delay));
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/DelayReader.cpp b/extern/audaspace/src/fx/DelayReader.cpp
new file mode 100644
index 00000000000..530aed69cba
--- /dev/null
+++ b/extern/audaspace/src/fx/DelayReader.cpp
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "fx/DelayReader.h"
+
+#include <cstring>
+
+AUD_NAMESPACE_BEGIN
+
+DelayReader::DelayReader(std::shared_ptr<IReader> reader, float delay) :
+ EffectReader(reader),
+ m_delay(int((SampleRate)delay * reader->getSpecs().rate)),
+ m_remdelay(int((SampleRate)delay * reader->getSpecs().rate))
+{
+}
+
+void DelayReader::seek(int position)
+{
+ if(position < m_delay)
+ {
+ m_remdelay = m_delay - position;
+ m_reader->seek(0);
+ }
+ else
+ {
+ m_remdelay = 0;
+ m_reader->seek(position - m_delay);
+ }
+}
+
+int DelayReader::getLength() const
+{
+ int len = m_reader->getLength();
+ if(len < 0)
+ return len;
+ return len + m_delay;
+}
+
+int DelayReader::getPosition() const
+{
+ if(m_remdelay > 0)
+ return m_delay - m_remdelay;
+ return m_reader->getPosition() + m_delay;
+}
+
+void DelayReader::read(int& length, bool& eos, sample_t* buffer)
+{
+ if(m_remdelay > 0)
+ {
+ Specs specs = m_reader->getSpecs();
+ int samplesize = AUD_SAMPLE_SIZE(specs);
+
+ if(length > m_remdelay)
+ {
+ std::memset(buffer, 0, m_remdelay * samplesize);
+
+ int len = length - m_remdelay;
+ m_reader->read(len, eos, buffer + m_remdelay * specs.channels);
+
+ length = m_remdelay + len;
+
+ m_remdelay = 0;
+ }
+ else
+ {
+ std::memset(buffer, 0, length * samplesize);
+ m_remdelay -= length;
+ }
+ }
+ else
+ m_reader->read(length, eos, buffer);
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/DynamicIIRFilter.cpp b/extern/audaspace/src/fx/DynamicIIRFilter.cpp
new file mode 100644
index 00000000000..02a8b0b65ac
--- /dev/null
+++ b/extern/audaspace/src/fx/DynamicIIRFilter.cpp
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "fx/DynamicIIRFilter.h"
+#include "fx/DynamicIIRFilterReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+DynamicIIRFilter::DynamicIIRFilter(std::shared_ptr<ISound> sound,
+ std::shared_ptr<IDynamicIIRFilterCalculator> calculator) :
+ Effect(sound),
+ m_calculator(calculator)
+{
+}
+
+std::shared_ptr<IReader> DynamicIIRFilter::createReader()
+{
+ return std::shared_ptr<IReader>(new DynamicIIRFilterReader(getReader(), m_calculator));
+}
+
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/DynamicIIRFilterReader.cpp b/extern/audaspace/src/fx/DynamicIIRFilterReader.cpp
new file mode 100644
index 00000000000..948b467aaa4
--- /dev/null
+++ b/extern/audaspace/src/fx/DynamicIIRFilterReader.cpp
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "fx/DynamicIIRFilterReader.h"
+#include "fx/IDynamicIIRFilterCalculator.h"
+
+AUD_NAMESPACE_BEGIN
+
+DynamicIIRFilterReader::DynamicIIRFilterReader(std::shared_ptr<IReader> reader, std::shared_ptr<IDynamicIIRFilterCalculator> calculator) :
+ IIRFilterReader(reader, std::vector<float>(), std::vector<float>()),
+ m_calculator(calculator)
+{
+ sampleRateChanged(reader->getSpecs().rate);
+}
+
+void DynamicIIRFilterReader::sampleRateChanged(SampleRate rate)
+{
+ std::vector<float> a, b;
+ m_calculator->recalculateCoefficients(rate, b, a);
+ setCoefficients(b, a);
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/DynamicMusic.cpp b/extern/audaspace/src/fx/DynamicMusic.cpp
new file mode 100644
index 00000000000..2b0acc06fbc
--- /dev/null
+++ b/extern/audaspace/src/fx/DynamicMusic.cpp
@@ -0,0 +1,346 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "fx/DynamicMusic.h"
+#include "generator/Silence.h"
+#include "fx/Fader.h"
+#include "fx/Limiter.h"
+
+#include <mutex>
+#include <condition_variable>
+
+AUD_NAMESPACE_BEGIN
+
+DynamicMusic::DynamicMusic(std::shared_ptr<IDevice> device) :
+m_fadeTime(1.0f), m_device(device)
+{
+ m_id = 0;
+ m_transitioning = false;
+ m_stopThread = false;
+ m_volume = m_device->getVolume();
+ m_scenes.push_back(std::vector<std::shared_ptr<ISound>>(1, nullptr));
+}
+
+DynamicMusic::~DynamicMusic()
+{
+ stop();
+}
+
+int DynamicMusic::addScene(std::shared_ptr<ISound> sound)
+{
+ std::vector<std::shared_ptr<ISound>> v;
+ m_scenes.push_back(v);
+ for(int i = 0; i < m_scenes.size()-1; i++)
+ m_scenes.back().push_back(nullptr);
+ for(int i = 0; i < m_scenes.size()-1; i++)
+ m_scenes[i].push_back(nullptr);
+ m_scenes.back().push_back(sound);
+
+ return m_scenes.size() - 1;
+}
+
+bool DynamicMusic::changeScene(int id)
+{
+ if(id >= m_scenes.size() || m_transitioning)
+ return false;
+ else
+ {
+ if(m_fadeThread.joinable())
+ m_fadeThread.join();
+ m_device->lock();
+ if(id == m_id)
+ {
+ m_currentHandle->setVolume(m_volume);
+ m_currentHandle->setLoopCount(-1);
+ }
+ else
+ {
+ m_soundTarget = id;
+ if(m_scenes[m_id][id] == nullptr)
+ {
+ m_stopThread = false;
+ if((m_scenes[m_id][m_id] != nullptr && m_currentHandle->getStatus() != STATUS_INVALID) || m_scenes[m_soundTarget][m_soundTarget] != nullptr)
+ {
+ m_transitioning = true;
+ if(m_scenes[m_id][m_id] == nullptr || m_currentHandle->getStatus() == STATUS_INVALID)
+ {
+ m_device->lock();
+ m_currentHandle = m_device->play(m_scenes[m_soundTarget][m_soundTarget]);
+ m_currentHandle->setVolume(0.0f);
+ m_currentHandle->setLoopCount(-1);
+ m_device->unlock();
+ m_fadeThread = std::thread(&DynamicMusic::fadeInThread, this);
+ }
+ else
+ {
+ if(m_scenes[m_soundTarget][m_soundTarget] != nullptr)
+ {
+ m_device->lock();
+ m_transitionHandle = m_currentHandle;
+ m_currentHandle = m_device->play(m_scenes[m_soundTarget][m_soundTarget]);
+ m_currentHandle->setVolume(0.0f);
+ m_currentHandle->setLoopCount(-1);
+ m_device->unlock();
+ m_fadeThread = std::thread(&DynamicMusic::crossfadeThread, this);
+ }
+ else
+ {
+ m_transitionHandle = m_currentHandle;
+ m_currentHandle = nullptr;
+ m_fadeThread = std::thread(&DynamicMusic::fadeOutThread, this);
+ }
+ }
+ }
+ }
+ else
+ {
+ if(m_scenes[m_id][m_id] == nullptr || m_currentHandle->getStatus() == STATUS_INVALID)
+ transitionCallback(this);
+ else
+ {
+ m_currentHandle->setLoopCount(0);
+ m_currentHandle->setStopCallback(transitionCallback, this);
+ }
+ }
+ }
+ m_device->unlock();
+ return true;
+ }
+}
+
+int DynamicMusic::getScene()
+{
+ return m_id;
+}
+
+bool DynamicMusic::addTransition(int init, int end, std::shared_ptr<ISound> sound)
+{
+ if(init != end && init < m_scenes.size() && end < m_scenes.size() && init >= 0 && end >= 0)
+ {
+ m_scenes[init][end] = sound;
+ return true;
+ }
+ return false;
+}
+
+void DynamicMusic::setFadeTime(float seconds)
+{
+ m_device->lock();
+ m_fadeTime = seconds;
+ m_device->unlock();
+}
+
+float DynamicMusic::getFadeTime()
+{
+ return m_fadeTime;
+}
+
+bool DynamicMusic::resume()
+{
+ bool result = false, resultTrans = false;
+
+ if(m_currentHandle != nullptr)
+ result = m_currentHandle->resume();
+ if(m_transitionHandle != nullptr)
+ resultTrans = m_transitionHandle->resume();
+
+ return result || resultTrans;
+}
+
+bool DynamicMusic::pause()
+{
+ bool result = false, resultTrans = false;
+
+ if(m_currentHandle != nullptr)
+ result = m_currentHandle->pause();
+ if(m_transitionHandle != nullptr)
+ resultTrans = m_transitionHandle->pause();
+
+ return result || resultTrans;
+}
+
+bool DynamicMusic::seek(float position)
+{
+ bool result;
+
+ if(m_currentHandle != nullptr)
+ {
+ result = m_currentHandle->seek(position);
+ if(m_transitionHandle != nullptr && result == true)
+ m_transitionHandle->stop();
+ }
+
+ return result;
+}
+
+float DynamicMusic::getPosition()
+{
+ float result = 0.0f;
+
+ if(m_currentHandle != nullptr)
+ result = m_currentHandle->getPosition();
+
+ return result;
+}
+
+float DynamicMusic::getVolume()
+{
+ return m_volume;
+}
+
+bool DynamicMusic::setVolume(float volume)
+{
+ m_volume = volume;
+ bool result = false, resultTrans = false;
+
+ if(m_currentHandle != nullptr)
+ result = m_currentHandle->setVolume(volume);
+ if(m_transitionHandle != nullptr)
+ {
+ m_device->lock();
+ if(volume<m_transitionHandle->getVolume())
+ resultTrans = m_transitionHandle->setVolume(0.0f);
+ m_device->unlock();
+ }
+ if(m_currentHandle == nullptr && m_transitionHandle == nullptr)
+ result = true;
+
+ return result || resultTrans;
+}
+
+Status DynamicMusic::getStatus()
+{
+ if(m_currentHandle != nullptr)
+ {
+ Status result = m_currentHandle->getStatus();
+ return result;
+ }
+ else
+ return STATUS_INVALID;
+}
+
+bool DynamicMusic::stop()
+{
+ m_stopThread = true;
+ bool result = false, resultTrans = false;
+
+ if(m_currentHandle != nullptr)
+ result = m_currentHandle->stop();
+ if(m_transitionHandle != nullptr)
+
+ resultTrans = m_transitionHandle->stop();
+
+ if(m_fadeThread.joinable())
+ m_fadeThread.join();
+ m_id = 0;
+
+ return result || resultTrans;
+}
+
+void DynamicMusic::transitionCallback(void* player)
+{
+ auto dat = reinterpret_cast<DynamicMusic*>(player);
+ dat->m_transitioning = true;
+ dat->m_device->lock();
+ dat->m_currentHandle = dat->m_device->play(dat->m_scenes[dat->m_id][dat->m_soundTarget]);
+ dat->m_currentHandle->setVolume(dat->m_volume);
+ if(dat->m_scenes[dat->m_soundTarget][dat->m_soundTarget] != nullptr)
+ dat->m_currentHandle->setStopCallback(sceneCallback, player);
+ dat->m_device->unlock();
+}
+
+void DynamicMusic::sceneCallback(void* player)
+{
+ auto dat = reinterpret_cast<DynamicMusic*>(player);
+ dat->m_device->lock();
+ dat->m_currentHandle = dat->m_device->play(dat->m_scenes[dat->m_soundTarget][dat->m_soundTarget]);
+ dat->m_currentHandle->setVolume(dat->m_volume);
+ dat->m_currentHandle->setLoopCount(-1);
+ dat->m_device->unlock();
+ dat->m_id = int(dat->m_soundTarget);
+ dat->m_soundTarget = -1;
+ dat->m_transitioning = false;
+}
+
+void DynamicMusic::crossfadeThread()
+{
+ float currentVol = m_transitionHandle->getVolume();
+ float nextVol = m_currentHandle->getVolume();
+ float increment;
+
+ while(nextVol < m_volume && !m_stopThread)
+ {
+ increment = (m_volume / (m_fadeTime * 1000)) * 20;
+ currentVol -= increment;
+ nextVol += increment;
+ if(currentVol < 0)
+ currentVol = 0;
+ if(nextVol > m_volume)
+ nextVol = m_volume;
+ m_transitionHandle->setVolume(currentVol);
+ m_currentHandle->setVolume(nextVol);
+ std::this_thread::sleep_for(std::chrono::milliseconds(20));
+ }
+ if(m_stopThread)
+ m_transitionHandle->setVolume(m_volume);
+
+ m_transitionHandle->stop();
+
+ m_id = int(m_soundTarget);
+ m_transitioning = false;
+}
+
+void DynamicMusic::fadeInThread()
+{
+ float nextVol = m_currentHandle->getVolume();
+ float increment;
+
+ while(nextVol < m_volume && !m_stopThread)
+ {
+ increment = (m_volume / (m_fadeTime * 1000)) * 20;
+ nextVol += increment;
+ if(nextVol > m_volume)
+ nextVol = m_volume;
+ m_currentHandle->setVolume(nextVol);
+ std::this_thread::sleep_for(std::chrono::milliseconds(20));
+ }
+ if(m_stopThread)
+ m_currentHandle->setVolume(m_volume);
+
+ m_id = int(m_soundTarget);
+ m_transitioning = false;
+}
+
+void DynamicMusic::fadeOutThread()
+{
+ float currentVol = m_transitionHandle->getVolume();
+ float increment;
+
+ while(currentVol > 0.0f && !m_stopThread)
+ {
+ increment = (m_volume / (m_fadeTime * 1000)) * 20;
+ currentVol -= increment;
+ if(currentVol < 0)
+ currentVol = 0;
+ m_transitionHandle->setVolume(currentVol);
+ std::this_thread::sleep_for(std::chrono::milliseconds(20));
+ }
+
+ m_transitionHandle->stop();
+ m_id = int(m_soundTarget);
+ m_transitioning = false;
+}
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/Effect.cpp b/extern/audaspace/src/fx/Effect.cpp
new file mode 100644
index 00000000000..af59ba440f9
--- /dev/null
+++ b/extern/audaspace/src/fx/Effect.cpp
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "fx/Effect.h"
+
+AUD_NAMESPACE_BEGIN
+
+Effect::Effect(std::shared_ptr<ISound> sound)
+{
+ m_sound = sound;
+}
+
+Effect::~Effect()
+{
+}
+
+std::shared_ptr<ISound> Effect::getSound() const
+{
+ return m_sound;
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/EffectReader.cpp b/extern/audaspace/src/fx/EffectReader.cpp
new file mode 100644
index 00000000000..93a9d3cbf1c
--- /dev/null
+++ b/extern/audaspace/src/fx/EffectReader.cpp
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "fx/EffectReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+EffectReader::EffectReader(std::shared_ptr<IReader> reader)
+{
+ m_reader = reader;
+}
+
+EffectReader::~EffectReader()
+{
+}
+
+bool EffectReader::isSeekable() const
+{
+ return m_reader->isSeekable();
+}
+
+void EffectReader::seek(int position)
+{
+ m_reader->seek(position);
+}
+
+int EffectReader::getLength() const
+{
+ return m_reader->getLength();
+}
+
+int EffectReader::getPosition() const
+{
+ return m_reader->getPosition();
+}
+
+Specs EffectReader::getSpecs() const
+{
+ return m_reader->getSpecs();
+}
+
+void EffectReader::read(int& length, bool& eos, sample_t* buffer)
+{
+ m_reader->read(length, eos, buffer);
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/Envelope.cpp b/extern/audaspace/src/fx/Envelope.cpp
new file mode 100644
index 00000000000..0637706c0a9
--- /dev/null
+++ b/extern/audaspace/src/fx/Envelope.cpp
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "fx/Envelope.h"
+#include "fx/CallbackIIRFilterReader.h"
+
+#include <cmath>
+
+AUD_NAMESPACE_BEGIN
+
+struct EnvelopeParameters
+{
+ float attack;
+ float release;
+ float threshold;
+ float arthreshold;
+};
+
+sample_t Envelope::envelopeFilter(CallbackIIRFilterReader* reader, EnvelopeParameters* param)
+{
+ float in = std::fabs(reader->x(0));
+ float out = reader->y(-1);
+ if(in < param->threshold)
+ in = 0.0f;
+ return (in > out ? param->attack : param->release) * (out - in) + in;
+}
+
+void Envelope::endEnvelopeFilter(EnvelopeParameters* param)
+{
+ delete param;
+}
+
+Envelope::Envelope(std::shared_ptr<ISound> sound, float attack, float release, float threshold, float arthreshold) :
+ Effect(sound),
+ m_attack(attack),
+ m_release(release),
+ m_threshold(threshold),
+ m_arthreshold(arthreshold)
+{
+}
+
+std::shared_ptr<IReader> Envelope::createReader()
+{
+ std::shared_ptr<IReader> reader = getReader();
+
+ EnvelopeParameters* param = new EnvelopeParameters();
+ param->arthreshold = m_arthreshold;
+ param->attack = std::pow(m_arthreshold, 1.0f/(static_cast<float>(reader->getSpecs().rate) * m_attack));
+ param->release = std::pow(m_arthreshold, 1.0f/(static_cast<float>(reader->getSpecs().rate) * m_release));
+ param->threshold = m_threshold;
+
+ return std::shared_ptr<IReader>(new CallbackIIRFilterReader(reader, 1, 2,
+ (doFilterIIR) envelopeFilter,
+ (endFilterIIR) endEnvelopeFilter,
+ param));
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/FFTConvolver.cpp b/extern/audaspace/src/fx/FFTConvolver.cpp
new file mode 100644
index 00000000000..868a1ebbaf3
--- /dev/null
+++ b/extern/audaspace/src/fx/FFTConvolver.cpp
@@ -0,0 +1,214 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "fx/FFTConvolver.h"
+
+#include <cstring>
+#include <cstdlib>
+
+AUD_NAMESPACE_BEGIN
+
+FFTConvolver::FFTConvolver(std::shared_ptr<std::vector<std::complex<sample_t>>> ir, std::shared_ptr<FFTPlan> plan) :
+ m_plan(plan), m_N(plan->getSize()), m_M(plan->getSize()/2), m_L(plan->getSize()/2), m_tailPos(0), m_irBuffer(ir)
+{
+ m_tail = (float*)calloc(m_M - 1, sizeof(float));
+ m_realBufLen = ((m_N / 2) + 1) * 2;
+ m_inBuffer = nullptr;
+ m_shiftBuffer = (sample_t*)std::calloc(m_N, sizeof(sample_t));
+}
+
+FFTConvolver::~FFTConvolver()
+{
+ std::free(m_tail);
+ std::free(m_shiftBuffer);
+ if(m_inBuffer != nullptr)
+ m_plan->freeBuffer(m_inBuffer);
+}
+
+void FFTConvolver::getNext(const sample_t* inBuffer, sample_t* outBuffer, int& length)
+{
+ if(length > m_L || length <= 0)
+ {
+ length = 0;
+ return;
+ }
+ if(m_inBuffer == nullptr)
+ m_inBuffer = reinterpret_cast<std::complex<sample_t>*>(m_plan->getBuffer());
+
+ std::memset(m_inBuffer, 0, m_realBufLen * sizeof(fftwf_complex));
+ std::memcpy(m_inBuffer, inBuffer, length*sizeof(sample_t));
+
+ m_plan->FFT(m_inBuffer);
+ for(int i = 0; i < m_realBufLen / 2; i++)
+ {
+ m_inBuffer[i] = m_inBuffer[i] * (*m_irBuffer)[i] / sample_t(m_N);
+ }
+ m_plan->IFFT(m_inBuffer);
+
+ for(int i = 0; i < m_M - 1; i++)
+ ((float*)m_inBuffer)[i] += m_tail[i];
+
+ for(int i = 0; i < m_M - 1; i++)
+ m_tail[i] = ((float*)m_inBuffer)[i + length];
+
+ std::memcpy(outBuffer, m_inBuffer, length * sizeof(sample_t));
+}
+
+void FFTConvolver::getNext(const sample_t* inBuffer, sample_t* outBuffer, int& length, fftwf_complex* transformedData)
+{
+ if(length > m_L || length <= 0)
+ {
+ length = 0;
+ return;
+ }
+ if(m_inBuffer == nullptr)
+ m_inBuffer = reinterpret_cast<std::complex<sample_t>*>(m_plan->getBuffer());
+
+ std::memset(m_inBuffer, 0, m_realBufLen * sizeof(fftwf_complex));
+ std::memcpy(m_inBuffer, inBuffer, length*sizeof(sample_t));
+
+ m_plan->FFT(m_inBuffer);
+ std::memcpy(transformedData, m_inBuffer, (m_realBufLen / 2)*sizeof(fftwf_complex));
+ for(int i = 0; i < m_realBufLen / 2; i++)
+ {
+ m_inBuffer[i] = m_inBuffer[i] * (*m_irBuffer)[i] / sample_t(m_N);
+ }
+ m_plan->IFFT(m_inBuffer);
+
+ for(int i = 0; i < m_M - 1; i++)
+ ((float*)m_inBuffer)[i] += m_tail[i];
+
+ for(int i = 0; i < m_M - 1; i++)
+ m_tail[i] = ((float*)m_inBuffer)[i + length];
+
+ std::memcpy(outBuffer, m_inBuffer, length * sizeof(sample_t));
+}
+
+void FFTConvolver::getNext(const fftwf_complex* inBuffer, sample_t* outBuffer, int& length)
+{
+ if(length > m_L || length <= 0)
+ {
+ length = 0;
+ return;
+ }
+ if(m_inBuffer == nullptr)
+ m_inBuffer = reinterpret_cast<std::complex<sample_t>*>(m_plan->getBuffer());
+
+ std::memset(m_inBuffer, 0, m_realBufLen * sizeof(fftwf_complex));
+ for(int i = 0; i < m_realBufLen / 2; i++)
+ {
+ m_inBuffer[i] = m_inBuffer[i] * (*m_irBuffer)[i] / sample_t(m_N);
+ }
+ m_plan->IFFT(m_inBuffer);
+
+ for(int i = 0; i < m_M - 1; i++)
+ ((float*)m_inBuffer)[i] += m_tail[i];
+
+ for(int i = 0; i < m_M - 1; i++)
+ m_tail[i] = ((float*)m_inBuffer)[i + length];
+
+ std::memcpy(outBuffer, m_inBuffer, length * sizeof(sample_t));
+}
+
+void FFTConvolver::getTail(int& length, bool& eos, sample_t* buffer)
+{
+ if(length <= 0)
+ {
+ length = 0;
+ eos = m_tailPos >= m_M - 1;
+ return;
+ }
+
+ eos = false;
+ if(m_tailPos + length > m_M - 1)
+ {
+ length = m_M - 1 - m_tailPos;
+ if(length < 0)
+ length = 0;
+ eos = true;
+ m_tailPos = m_M - 1;
+ }
+ else
+ m_tailPos += length;
+ std::memcpy(buffer, m_tail, length*sizeof(sample_t));
+}
+
+void FFTConvolver::clear()
+{
+ std::memset(m_shiftBuffer, 0, m_N * sizeof(sample_t));
+ std::memset(m_tail, 0, m_M - 1);
+}
+
+void FFTConvolver::IFFT_FDL(const fftwf_complex* inBuffer, sample_t* outBuffer, int& length)
+{
+ if(length > m_L || length <= 0)
+ {
+ length = 0;
+ return;
+ }
+ if(m_inBuffer == nullptr)
+ m_inBuffer = reinterpret_cast<std::complex<sample_t>*>(m_plan->getBuffer());
+
+ std::memset(m_inBuffer, 0, m_realBufLen * sizeof(fftwf_complex));
+ std::memcpy(m_inBuffer, inBuffer, (m_realBufLen / 2)*sizeof(fftwf_complex));
+ m_plan->IFFT(m_inBuffer);
+ std::memcpy(outBuffer, ((sample_t*)m_inBuffer)+m_L, length*sizeof(sample_t));
+}
+
+void FFTConvolver::getNextFDL(const std::complex<sample_t>* inBuffer, std::complex<sample_t>* accBuffer)
+{
+ for(int i = 0; i < m_realBufLen / 2; i++)
+ {
+ accBuffer[i] += (inBuffer[i] * (*m_irBuffer)[i]) / sample_t(m_N);
+ }
+}
+
+void FFTConvolver::getNextFDL(const sample_t* inBuffer, std::complex<sample_t>* accBuffer, int& length, fftwf_complex* transformedData)
+{
+ if(length > m_L || length <= 0)
+ {
+ length = 0;
+ return;
+ }
+ if(m_inBuffer == nullptr)
+ m_inBuffer = reinterpret_cast<std::complex<sample_t>*>(m_plan->getBuffer());
+
+ std::memcpy(m_shiftBuffer, m_shiftBuffer + m_L, m_L*sizeof(sample_t));
+ std::memcpy(m_shiftBuffer + m_L, inBuffer, length*sizeof(sample_t));
+
+ std::memset(m_inBuffer, 0, m_realBufLen * sizeof(fftwf_complex));
+ std::memcpy(m_inBuffer, m_shiftBuffer, (m_L+length)*sizeof(sample_t));
+
+ m_plan->FFT(m_inBuffer);
+ std::memcpy(transformedData, m_inBuffer, (m_realBufLen / 2)*sizeof(fftwf_complex));
+ for(int i = 0; i < m_realBufLen / 2; i++)
+ {
+ accBuffer[i] += (m_inBuffer[i] * (*m_irBuffer)[i]) / sample_t(m_N);
+ }
+}
+
+
+void FFTConvolver::setImpulseResponse(std::shared_ptr<std::vector<std::complex<sample_t>>> ir)
+{
+ clear();
+ m_irBuffer = ir;
+}
+
+std::shared_ptr<std::vector<std::complex<sample_t>>> FFTConvolver::getImpulseResponse()
+{
+ return m_irBuffer;
+}
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/Fader.cpp b/extern/audaspace/src/fx/Fader.cpp
new file mode 100644
index 00000000000..041d8369a01
--- /dev/null
+++ b/extern/audaspace/src/fx/Fader.cpp
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "fx/Fader.h"
+
+AUD_NAMESPACE_BEGIN
+
+Fader::Fader(std::shared_ptr<ISound> sound, FadeType type, float start, float length) :
+ Effect(sound),
+ m_type(type),
+ m_start(start),
+ m_length(length)
+{
+}
+
+FadeType Fader::getType() const
+{
+ return m_type;
+}
+
+float Fader::getStart() const
+{
+ return m_start;
+}
+
+float Fader::getLength() const
+{
+ return m_length;
+}
+
+std::shared_ptr<IReader> Fader::createReader()
+{
+ return std::shared_ptr<IReader>(new FaderReader(getReader(), m_type, m_start, m_length));
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/FaderReader.cpp b/extern/audaspace/src/fx/FaderReader.cpp
new file mode 100644
index 00000000000..b1e23b993f3
--- /dev/null
+++ b/extern/audaspace/src/fx/FaderReader.cpp
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "fx/FaderReader.h"
+
+#include <cstring>
+
+AUD_NAMESPACE_BEGIN
+
+FaderReader::FaderReader(std::shared_ptr<IReader> reader, FadeType type, float start,float length) :
+ EffectReader(reader),
+ m_type(type),
+ m_start(start),
+ m_length(length)
+{
+}
+
+void FaderReader::read(int& length, bool& eos, sample_t* buffer)
+{
+ int position = m_reader->getPosition();
+ Specs specs = m_reader->getSpecs();
+ int samplesize = AUD_SAMPLE_SIZE(specs);
+
+ m_reader->read(length, eos, buffer);
+
+ if((position + length) / (float)specs.rate <= m_start)
+ {
+ if(m_type != FADE_OUT)
+ {
+ std::memset(buffer, 0, length * samplesize);
+ }
+ }
+ else if(position / (float)specs.rate >= m_start+m_length)
+ {
+ if(m_type == FADE_OUT)
+ {
+ std::memset(buffer, 0, length * samplesize);
+ }
+ }
+ else
+ {
+ float volume = 1.0f;
+
+ for(int i = 0; i < length * specs.channels; i++)
+ {
+ if(i % specs.channels == 0)
+ {
+ volume = (((position+i)/(float)specs.rate)-m_start) / m_length;
+ if(volume > 1.0f)
+ volume = 1.0f;
+ else if(volume < 0.0f)
+ volume = 0.0f;
+
+ if(m_type == FADE_OUT)
+ volume = 1.0f - volume;
+ }
+
+ buffer[i] = buffer[i] * volume;
+ }
+ }
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/HRTF.cpp b/extern/audaspace/src/fx/HRTF.cpp
new file mode 100644
index 00000000000..14ef3ad0912
--- /dev/null
+++ b/extern/audaspace/src/fx/HRTF.cpp
@@ -0,0 +1,122 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "fx/HRTF.h"
+#include "Exception.h"
+
+#include <cmath>
+
+AUD_NAMESPACE_BEGIN
+HRTF::HRTF() :
+ HRTF(std::make_shared<FFTPlan>(0.0))
+{
+}
+
+HRTF::HRTF(std::shared_ptr<FFTPlan> plan) :
+ m_plan(plan)
+{
+ m_specs.channels = CHANNELS_INVALID;
+ m_specs.rate = 0;
+ m_empty = true;
+}
+
+bool HRTF::addImpulseResponse(std::shared_ptr<StreamBuffer> impulseResponse, float azimuth, float elevation)
+{
+ Specs spec = impulseResponse->getSpecs();
+
+ azimuth = std::fmod(azimuth, 360);
+ if(azimuth < 0)
+ azimuth += 360;
+
+ if((spec.channels != CHANNELS_MONO) || (spec.rate != m_specs.rate && m_specs.rate > 0.0))
+ return false;
+
+ m_hrtfs[elevation][azimuth] = std::make_shared<ImpulseResponse>(impulseResponse, m_plan);
+ m_specs.channels = CHANNELS_MONO;
+ m_specs.rate = spec.rate;
+ m_empty = false;
+ return true;
+}
+
+std::pair<std::shared_ptr<ImpulseResponse>, std::shared_ptr<ImpulseResponse>> HRTF::getImpulseResponse(float &azimuth, float &elevation)
+{
+ if(m_hrtfs.empty())
+ return std::make_pair(nullptr, nullptr);
+ azimuth = std::fmod(azimuth, 360);
+ if(azimuth < 0)
+ azimuth += 360;
+
+ std::shared_ptr<ImpulseResponse> R, L;
+ float az = 0, el = 0, dif=0, minDif=360;
+
+ for(auto elem : m_hrtfs)
+ {
+ dif = std::fabs(elevation - elem.first);
+ if(dif < minDif)
+ {
+ minDif = dif;
+ el = elem.first;
+ }
+ }
+ elevation = el;
+ dif = 0;
+ minDif = 360;
+
+ for(auto elem : m_hrtfs[elevation])
+ {
+ dif = std::fabs(azimuth - elem.first);
+ if(dif < minDif)
+ {
+ minDif = dif;
+ az = elem.first;
+ R = elem.second;
+ }
+ }
+ azimuth = az;
+ float azL = 360 - azimuth;
+ if(azL == 360)
+ azL = 0;
+
+ auto iter = m_hrtfs[elevation].find(azL);
+ if(iter != m_hrtfs[elevation].end())
+ L = iter->second;
+ else
+ {
+ dif = 0;
+ minDif = 360;
+ for(auto elem : m_hrtfs[elevation])
+ {
+ dif = std::fabs(azL - elem.first);
+ if(dif < minDif)
+ {
+ minDif = dif;
+ L = elem.second;
+ }
+ }
+ }
+ return std::make_pair(L, R);
+}
+
+Specs HRTF::getSpecs()
+{
+ return m_specs;
+}
+
+bool HRTF::isEmpty()
+{
+ return m_empty;
+}
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/HRTFLoaderUnix.cpp b/extern/audaspace/src/fx/HRTFLoaderUnix.cpp
new file mode 100644
index 00000000000..12a23913912
--- /dev/null
+++ b/extern/audaspace/src/fx/HRTFLoaderUnix.cpp
@@ -0,0 +1,89 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "fx/HRTFLoader.h"
+#include "file/File.h"
+#include "Exception.h"
+
+#include <dirent.h>
+#include <exception>
+
+AUD_NAMESPACE_BEGIN
+
+std::shared_ptr<HRTF> HRTFLoader::loadLeftHRTFs(std::shared_ptr<FFTPlan> plan, const std::string& fileExtension, const std::string& path)
+{
+ std::shared_ptr<HRTF> hrtfs(std::make_shared<HRTF>(plan));
+ loadHRTFs(hrtfs, 'L', fileExtension, path);
+ return hrtfs;
+}
+
+std::shared_ptr<HRTF> HRTFLoader::loadRightHRTFs(std::shared_ptr<FFTPlan> plan, const std::string& fileExtension, const std::string& path)
+{
+ std::shared_ptr<HRTF> hrtfs(std::make_shared<HRTF>(plan));
+ loadHRTFs(hrtfs, 'R', fileExtension, path);
+ return hrtfs;
+}
+
+std::shared_ptr<HRTF> HRTFLoader::loadLeftHRTFs(const std::string& fileExtension, const std::string& path)
+{
+ std::shared_ptr<HRTF> hrtfs(std::make_shared<HRTF>());
+ loadHRTFs(hrtfs, 'L', fileExtension, path);
+ return hrtfs;
+}
+
+std::shared_ptr<HRTF> HRTFLoader::loadRightHRTFs(const std::string& fileExtension, const std::string& path)
+{
+ std::shared_ptr<HRTF> hrtfs(std::make_shared<HRTF>());
+ loadHRTFs(hrtfs, 'R', fileExtension, path);
+ return hrtfs;
+}
+
+void HRTFLoader::loadHRTFs(std::shared_ptr<HRTF> hrtfs, char ear, const std::string& fileExtension, const std::string& path)
+{
+ std::string readpath = path;
+ if(path == "")
+ readpath = ".";
+
+ DIR* dir = opendir(path.c_str());
+ if(!dir)
+ return;
+
+ float azim, elev;
+
+ while(dirent* entry = readdir(dir))
+ {
+ std::string filename = entry->d_name;
+ if(filename.front() == ear && filename.length() >= fileExtension.length() && filename.substr(filename.length() - fileExtension.length()) == fileExtension)
+ {
+ try
+ {
+ elev = std::stof(filename.substr(1, filename.find("e") - 1));
+ azim = std::stof(filename.substr(filename.find("e") + 1, filename.find("a") - filename.find("e") - 1));
+ if(ear == 'L')
+ azim = 360 - azim;
+ }
+ catch(std::exception& e)
+ {
+ AUD_THROW(FileException, "The HRTF name doesn't follow the naming scheme: " + filename);
+ }
+ hrtfs->addImpulseResponse(std::make_shared<StreamBuffer>(std::make_shared<File>(readpath + "/" + filename)), azim, elev);
+ }
+ }
+ closedir(dir);
+ return;
+}
+
+AUD_NAMESPACE_END \ No newline at end of file
diff --git a/extern/audaspace/src/fx/HRTFLoaderWindows.cpp b/extern/audaspace/src/fx/HRTFLoaderWindows.cpp
new file mode 100644
index 00000000000..148f1fa015d
--- /dev/null
+++ b/extern/audaspace/src/fx/HRTFLoaderWindows.cpp
@@ -0,0 +1,93 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "fx/HRTFLoader.h"
+#include "file/File.h"
+#include "Exception.h"
+
+#include <windows.h>
+#include <exception>
+
+AUD_NAMESPACE_BEGIN
+
+std::shared_ptr<HRTF> HRTFLoader::loadLeftHRTFs(std::shared_ptr<FFTPlan> plan, const std::string& fileExtension, const std::string& path)
+{
+ std::shared_ptr<HRTF> hrtfs(std::make_shared<HRTF>(plan));
+ loadHRTFs(hrtfs, 'L', fileExtension, path);
+ return hrtfs;
+}
+
+std::shared_ptr<HRTF> HRTFLoader::loadRightHRTFs(std::shared_ptr<FFTPlan> plan, const std::string& fileExtension, const std::string& path)
+{
+ std::shared_ptr<HRTF> hrtfs(std::make_shared<HRTF>(plan));
+ loadHRTFs(hrtfs, 'R', fileExtension, path);
+ return hrtfs;
+}
+
+std::shared_ptr<HRTF> HRTFLoader::loadLeftHRTFs(const std::string& fileExtension, const std::string& path)
+{
+ std::shared_ptr<HRTF> hrtfs(std::make_shared<HRTF>());
+ loadHRTFs(hrtfs, 'L', fileExtension, path);
+ return hrtfs;
+}
+
+std::shared_ptr<HRTF> HRTFLoader::loadRightHRTFs(const std::string& fileExtension, const std::string& path)
+{
+ std::shared_ptr<HRTF> hrtfs(std::make_shared<HRTF>());
+ loadHRTFs(hrtfs, 'R', fileExtension, path);
+ return hrtfs;
+}
+
+void HRTFLoader::loadHRTFs(std::shared_ptr<HRTF> hrtfs, char ear, const std::string& fileExtension, const std::string& path)
+{
+ std::string readpath = path;
+ if(path == "")
+ readpath = ".";
+
+ WIN32_FIND_DATA entry;
+ bool found_file = true;
+ std::string search = readpath + "\\*";
+ HANDLE dir = FindFirstFile(search.c_str(), &entry);
+ if(dir == INVALID_HANDLE_VALUE)
+ return;
+
+ float azim, elev;
+
+ while(found_file)
+ {
+ std::string filename = entry.cFileName;
+ if(filename.front() == ear && filename.length() >= fileExtension.length() && filename.substr(filename.length() - fileExtension.length()) == fileExtension)
+ {
+ try
+ {
+ elev = std::stof(filename.substr(1, filename.find("e") - 1));
+ azim = std::stof(filename.substr(filename.find("e") + 1, filename.find("a") - filename.find("e") - 1));
+ if(ear == 'L')
+ azim = 360 - azim;
+ }
+ catch(std::exception& e)
+ {
+ AUD_THROW(FileException, "The HRTF name doesn't follow the naming scheme: " + filename);
+ }
+ hrtfs->addImpulseResponse(std::make_shared<StreamBuffer>(std::make_shared<File>(readpath + "/" + filename)), azim, elev);
+ }
+ found_file = FindNextFile(dir, &entry);
+ }
+ FindClose(dir);
+ return;
+}
+
+AUD_NAMESPACE_END \ No newline at end of file
diff --git a/extern/audaspace/src/fx/Highpass.cpp b/extern/audaspace/src/fx/Highpass.cpp
new file mode 100644
index 00000000000..2490d512078
--- /dev/null
+++ b/extern/audaspace/src/fx/Highpass.cpp
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "fx/Highpass.h"
+#include "fx/IIRFilterReader.h"
+#include "fx/HighpassCalculator.h"
+
+AUD_NAMESPACE_BEGIN
+
+Highpass::Highpass(std::shared_ptr<ISound> sound, float frequency, float Q) :
+ DynamicIIRFilter(sound, std::shared_ptr<IDynamicIIRFilterCalculator>(new HighpassCalculator(frequency, Q)))
+{
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/HighpassCalculator.cpp b/extern/audaspace/src/fx/HighpassCalculator.cpp
new file mode 100644
index 00000000000..2b69efe2fa7
--- /dev/null
+++ b/extern/audaspace/src/fx/HighpassCalculator.cpp
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "fx/HighpassCalculator.h"
+
+#include <cmath>
+
+AUD_NAMESPACE_BEGIN
+
+HighpassCalculator::HighpassCalculator(float frequency, float Q) :
+ m_frequency(frequency),
+ m_Q(Q)
+{
+}
+
+void HighpassCalculator::recalculateCoefficients(SampleRate rate, std::vector<float> &b, std::vector<float> &a)
+{
+ float w0 = 2.0 * M_PI * (SampleRate)m_frequency / rate;
+ float alpha = (float)(std::sin(w0) / (2.0 * (double)m_Q));
+ float norm = 1 + alpha;
+ float c = std::cos(w0);
+ a.push_back(1);
+ a.push_back(-2 * c / norm);
+ a.push_back((1 - alpha) / norm);
+ b.push_back((1 + c) / (2 * norm));
+ b.push_back((-1 - c) / norm);
+ b.push_back(b[0]);
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/IIRFilter.cpp b/extern/audaspace/src/fx/IIRFilter.cpp
new file mode 100644
index 00000000000..fce6d01e4bf
--- /dev/null
+++ b/extern/audaspace/src/fx/IIRFilter.cpp
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "fx/IIRFilter.h"
+#include "fx/IIRFilterReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+IIRFilter::IIRFilter(std::shared_ptr<ISound> sound, const std::vector<float>& b, const std::vector<float>& a) :
+ Effect(sound), m_a(a), m_b(b)
+{
+}
+
+std::shared_ptr<IReader> IIRFilter::createReader()
+{
+ return std::shared_ptr<IReader>(new IIRFilterReader(getReader(), m_b, m_a));
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/IIRFilterReader.cpp b/extern/audaspace/src/fx/IIRFilterReader.cpp
new file mode 100644
index 00000000000..8d879a85846
--- /dev/null
+++ b/extern/audaspace/src/fx/IIRFilterReader.cpp
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "fx/IIRFilterReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+IIRFilterReader::IIRFilterReader(std::shared_ptr<IReader> reader, const std::vector<float>& b, const std::vector<float>& a) :
+ BaseIIRFilterReader(reader, b.size(), a.size()), m_a(a), m_b(b)
+{
+ if(m_a.empty() == false)
+ {
+ for(int i = 1; i < m_a.size(); i++)
+ m_a[i] /= m_a[0];
+ for(int i = 0; i < m_b.size(); i++)
+ m_b[i] /= m_a[0];
+ m_a[0] = 1;
+ }
+}
+
+sample_t IIRFilterReader::filter()
+{
+ sample_t out = 0;
+
+ for(int i = 1; i < m_a.size(); i++)
+ out -= y(-i) * m_a[i];
+ for(int i = 0; i < m_b.size(); i++)
+ out += x(-i) * m_b[i];
+
+ return out;
+}
+
+void IIRFilterReader::setCoefficients(const std::vector<float>& b, const std::vector<float>& a)
+{
+ setLengths(b.size(), a.size());
+ m_a = a;
+ m_b = b;
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/ImpulseResponse.cpp b/extern/audaspace/src/fx/ImpulseResponse.cpp
new file mode 100644
index 00000000000..babb628eb7a
--- /dev/null
+++ b/extern/audaspace/src/fx/ImpulseResponse.cpp
@@ -0,0 +1,97 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "fx/ImpulseResponse.h"
+
+#include <algorithm>
+#include <cstring>
+#include <cstdlib>
+#include <cmath>
+
+AUD_NAMESPACE_BEGIN
+ImpulseResponse::ImpulseResponse(std::shared_ptr<StreamBuffer> impulseResponse) :
+ ImpulseResponse(impulseResponse, std::make_shared<FFTPlan>(0.0))
+{
+}
+
+ImpulseResponse::ImpulseResponse(std::shared_ptr<StreamBuffer> impulseResponse, std::shared_ptr<FFTPlan> plan)
+{
+ auto reader = impulseResponse->createReader();
+ m_length = reader->getLength();
+ processImpulseResponse(impulseResponse->createReader(), plan);
+}
+
+Specs ImpulseResponse::getSpecs()
+{
+ return m_specs;
+}
+
+int ImpulseResponse::getLength()
+{
+ return m_length;
+}
+
+std::shared_ptr<std::vector<std::shared_ptr<std::vector<std::complex<sample_t>>>>> ImpulseResponse::getChannel(int n)
+{
+ return m_processedIR[n];
+}
+
+void ImpulseResponse::processImpulseResponse(std::shared_ptr<IReader> reader, std::shared_ptr<FFTPlan> plan)
+{
+ m_specs.channels = reader->getSpecs().channels;
+ m_specs.rate = reader->getSpecs().rate;
+ int N = plan->getSize();
+ bool eos = false;
+ int length = reader->getLength();
+ sample_t* buffer = (sample_t*)std::malloc(length * m_specs.channels * sizeof(sample_t));
+ int numParts = std::ceil((float)length / (plan->getSize() / 2));
+
+ for(int i = 0; i < m_specs.channels; i++)
+ {
+ m_processedIR.push_back(std::make_shared<std::vector<std::shared_ptr<std::vector<std::complex<sample_t>>>>>());
+ for(int j = 0; j < numParts; j++)
+ (*m_processedIR[i]).push_back(std::make_shared<std::vector<std::complex<sample_t>>>((N / 2) + 1));
+ }
+ length += reader->getSpecs().rate;
+ reader->read(length, eos, buffer);
+
+
+ void* bufferFFT = plan->getBuffer();
+ for(int i = 0; i < m_specs.channels; i++)
+ {
+ int partStart = 0;
+ for(int h = 0; h < numParts; h++)
+ {
+ int k = 0;
+ int len = std::min(partStart + ((N / 2)*m_specs.channels), length*m_specs.channels);
+ std::memset(bufferFFT, 0, ((N / 2) + 1) * 2 * sizeof(fftwf_complex));
+ for(int j = partStart; j < len; j += m_specs.channels)
+ {
+ ((float*)bufferFFT)[k] = buffer[j + i];
+ k++;
+ }
+ plan->FFT(bufferFFT);
+ for(int j = 0; j < (N / 2) + 1; j++)
+ {
+ (*(*m_processedIR[i])[h])[j] = reinterpret_cast<std::complex<sample_t>*>(bufferFFT)[j];
+ }
+ partStart += N / 2 * m_specs.channels;
+ }
+ }
+ plan->freeBuffer(bufferFFT);
+ std::free(buffer);
+}
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/Limiter.cpp b/extern/audaspace/src/fx/Limiter.cpp
new file mode 100644
index 00000000000..38a7288e8d7
--- /dev/null
+++ b/extern/audaspace/src/fx/Limiter.cpp
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "fx/Limiter.h"
+#include "fx/LimiterReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+Limiter::Limiter(std::shared_ptr<ISound> sound,
+ float start, float end) :
+ Effect(sound),
+ m_start(start),
+ m_end(end)
+{
+}
+
+float Limiter::getStart() const
+{
+ return m_start;
+}
+
+float Limiter::getEnd() const
+{
+ return m_end;
+}
+
+std::shared_ptr<IReader> Limiter::createReader()
+{
+ return std::shared_ptr<IReader>(new LimiterReader(getReader(), m_start, m_end));
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/LimiterReader.cpp b/extern/audaspace/src/fx/LimiterReader.cpp
new file mode 100644
index 00000000000..1d003c29679
--- /dev/null
+++ b/extern/audaspace/src/fx/LimiterReader.cpp
@@ -0,0 +1,139 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "fx/LimiterReader.h"
+#include "util/Buffer.h"
+
+#include <algorithm>
+
+AUD_NAMESPACE_BEGIN
+
+LimiterReader::LimiterReader(std::shared_ptr<IReader> reader, float start, float end) :
+ EffectReader(reader),
+ m_start(start),
+ m_end(end)
+{
+ if(m_start > 0)
+ {
+ Specs specs = m_reader->getSpecs();
+ Specs specs2;
+
+ if(m_reader->isSeekable())
+ m_reader->seek(m_start * specs.rate);
+ else
+ {
+ // skip first m_start samples by reading them
+ int length = AUD_DEFAULT_BUFFER_SIZE;
+ Buffer buffer(AUD_DEFAULT_BUFFER_SIZE * AUD_SAMPLE_SIZE(specs));
+ bool eos = false;
+ for(int len = m_start * specs.rate;
+ length > 0 && !eos;
+ len -= length)
+ {
+ if(len < AUD_DEFAULT_BUFFER_SIZE)
+ length = len;
+
+ m_reader->read(length, eos, buffer.getBuffer());
+
+ specs2 = m_reader->getSpecs();
+ if(specs2.rate != specs.rate)
+ {
+ len = len * specs2.rate / specs.rate;
+ specs.rate = specs2.rate;
+ }
+
+ if(specs2.channels != specs.channels)
+ {
+ specs = specs2;
+ buffer.assureSize(AUD_DEFAULT_BUFFER_SIZE * AUD_SAMPLE_SIZE(specs));
+ }
+ }
+ }
+ }
+}
+
+void LimiterReader::seek(int position)
+{
+ m_reader->seek(position + m_start * m_reader->getSpecs().rate);
+}
+
+int LimiterReader::getLength() const
+{
+ int len = m_reader->getLength();
+ SampleRate rate = m_reader->getSpecs().rate;
+ if(len < 0 || (len > m_end * rate && m_end >= 0))
+ len = m_end * rate;
+ return len - m_start * rate;
+}
+
+int LimiterReader::getPosition() const
+{
+ int pos = m_reader->getPosition();
+ SampleRate rate = m_reader->getSpecs().rate;
+ return std::min(pos, int(m_end * rate)) - m_start * rate;
+}
+
+void LimiterReader::read(int& length, bool& eos, sample_t* buffer)
+{
+ eos = false;
+ if(m_end >= 0)
+ {
+ int position = m_reader->getPosition();
+ SampleRate rate = m_reader->getSpecs().rate;
+
+ if(position + length > m_end * rate)
+ {
+ length = m_end * rate - position;
+ eos = true;
+ }
+
+ if(position < int(m_start * rate))
+ {
+ int len2 = length;
+ for(int len = int(m_start * rate) - position;
+ len2 == length && !eos;
+ len -= length)
+ {
+ if(len < length)
+ len2 = len;
+
+ m_reader->read(len2, eos, buffer);
+ position += len2;
+ }
+
+ if(position < m_start * rate)
+ {
+ length = 0;
+ return;
+ }
+ }
+
+ if(length < 0)
+ {
+ length = 0;
+ return;
+ }
+ }
+ if(eos)
+ {
+ m_reader->read(length, eos, buffer);
+ eos = true;
+ }
+ else
+ m_reader->read(length, eos, buffer);
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/Loop.cpp b/extern/audaspace/src/fx/Loop.cpp
new file mode 100644
index 00000000000..1695fcf1662
--- /dev/null
+++ b/extern/audaspace/src/fx/Loop.cpp
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "fx/Loop.h"
+#include "fx/LoopReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+Loop::Loop(std::shared_ptr<ISound> sound, int loop) :
+ Effect(sound),
+ m_loop(loop)
+{
+}
+
+int Loop::getLoop() const
+{
+ return m_loop;
+}
+
+std::shared_ptr<IReader> Loop::createReader()
+{
+ return std::shared_ptr<IReader>(new LoopReader(getReader(), m_loop));
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/LoopReader.cpp b/extern/audaspace/src/fx/LoopReader.cpp
new file mode 100644
index 00000000000..2f13a5880eb
--- /dev/null
+++ b/extern/audaspace/src/fx/LoopReader.cpp
@@ -0,0 +1,91 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "fx/LoopReader.h"
+
+#include <cstring>
+
+AUD_NAMESPACE_BEGIN
+
+LoopReader::LoopReader(std::shared_ptr<IReader> reader, int loop) :
+ EffectReader(reader), m_count(loop), m_left(loop)
+{
+}
+
+void LoopReader::seek(int position)
+{
+ int len = m_reader->getLength();
+ if(len < 0)
+ m_reader->seek(position);
+ else
+ {
+ if(m_count >= 0)
+ {
+ m_left = m_count - (position / len);
+ if(m_left < 0)
+ m_left = 0;
+ }
+ m_reader->seek(position % len);
+ }
+}
+
+int LoopReader::getLength() const
+{
+ if(m_count < 0)
+ return -1;
+ return m_reader->getLength() * m_count;
+}
+
+int LoopReader::getPosition() const
+{
+ return m_reader->getPosition() * (m_count < 0 ? 1 : m_count);
+}
+
+void LoopReader::read(int& length, bool& eos, sample_t* buffer)
+{
+ const Specs specs = m_reader->getSpecs();
+
+ int len = length;
+
+ m_reader->read(length, eos, buffer);
+
+ if(length < len && eos && m_left)
+ {
+ int pos = length;
+ length = len;
+
+ while(pos < length && eos && m_left)
+ {
+ if(m_left > 0)
+ m_left--;
+
+ m_reader->seek(0);
+
+ len = length - pos;
+ m_reader->read(len, eos, buffer + pos * specs.channels);
+
+ // prevent endless loop
+ if(!len)
+ break;
+
+ pos += len;
+ }
+
+ length = pos;
+ }
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/Lowpass.cpp b/extern/audaspace/src/fx/Lowpass.cpp
new file mode 100644
index 00000000000..8c33291baa3
--- /dev/null
+++ b/extern/audaspace/src/fx/Lowpass.cpp
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "fx/Lowpass.h"
+#include "fx/LowpassCalculator.h"
+
+AUD_NAMESPACE_BEGIN
+
+Lowpass::Lowpass(std::shared_ptr<ISound> sound, float frequency, float Q) :
+ DynamicIIRFilter(sound, std::shared_ptr<IDynamicIIRFilterCalculator>(new LowpassCalculator(frequency, Q)))
+{
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/LowpassCalculator.cpp b/extern/audaspace/src/fx/LowpassCalculator.cpp
new file mode 100644
index 00000000000..f2a53ed7514
--- /dev/null
+++ b/extern/audaspace/src/fx/LowpassCalculator.cpp
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "fx/LowpassCalculator.h"
+
+#include <cmath>
+
+AUD_NAMESPACE_BEGIN
+
+LowpassCalculator::LowpassCalculator(float frequency, float Q) :
+ m_frequency(frequency),
+ m_Q(Q)
+{
+}
+
+void LowpassCalculator::recalculateCoefficients(SampleRate rate, std::vector<float> &b, std::vector<float> &a)
+{
+ float w0 = 2 * M_PI * m_frequency / rate;
+ float alpha = std::sin(w0) / (2 * m_Q);
+ float norm = 1 + alpha;
+ float c = std::cos(w0);
+ a.push_back(1);
+ a.push_back(-2 * c / norm);
+ a.push_back((1 - alpha) / norm);
+ b.push_back((1 - c) / (2 * norm));
+ b.push_back((1 - c) / norm);
+ b.push_back(b[0]);
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/MutableReader.cpp b/extern/audaspace/src/fx/MutableReader.cpp
new file mode 100644
index 00000000000..aa867d83f03
--- /dev/null
+++ b/extern/audaspace/src/fx/MutableReader.cpp
@@ -0,0 +1,64 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "fx/MutableReader.h"
+
+#include <cstring>
+
+AUD_NAMESPACE_BEGIN
+
+MutableReader::MutableReader(std::shared_ptr<ISound> sound) :
+m_sound(sound)
+{
+ m_reader = m_sound->createReader();
+}
+
+bool MutableReader::isSeekable() const
+{
+ return m_reader->isSeekable();
+}
+
+void MutableReader::seek(int position)
+{
+ if(position < m_reader->getPosition())
+ {
+ m_reader = m_sound->createReader();
+ }
+ else
+ m_reader->seek(position);
+}
+
+int MutableReader::getLength() const
+{
+ return m_reader->getLength();
+}
+
+int MutableReader::getPosition() const
+{
+ return m_reader->getPosition();
+}
+
+Specs MutableReader::getSpecs() const
+{
+ return m_reader->getSpecs();
+}
+
+void MutableReader::read(int& length, bool& eos, sample_t* buffer)
+{
+ m_reader->read(length, eos, buffer);
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/MutableSound.cpp b/extern/audaspace/src/fx/MutableSound.cpp
new file mode 100644
index 00000000000..5326b640394
--- /dev/null
+++ b/extern/audaspace/src/fx/MutableSound.cpp
@@ -0,0 +1,35 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "fx/MutableSound.h"
+#include "fx/MutableReader.h"
+#include "Exception.h"
+
+#include <cstring>
+
+AUD_NAMESPACE_BEGIN
+
+MutableSound::MutableSound(std::shared_ptr<ISound> sound) :
+m_sound(sound)
+{
+}
+
+std::shared_ptr<IReader> MutableSound::createReader()
+{
+ return std::make_shared<MutableReader>(m_sound);
+}
+
+AUD_NAMESPACE_END \ No newline at end of file
diff --git a/extern/audaspace/src/fx/Pitch.cpp b/extern/audaspace/src/fx/Pitch.cpp
new file mode 100644
index 00000000000..d7348a2d49e
--- /dev/null
+++ b/extern/audaspace/src/fx/Pitch.cpp
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "fx/Pitch.h"
+#include "fx/PitchReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+Pitch::Pitch(std::shared_ptr<ISound> sound, float pitch) :
+ Effect(sound),
+ m_pitch(pitch)
+{
+}
+
+std::shared_ptr<IReader> Pitch::createReader()
+{
+ return std::shared_ptr<IReader>(new PitchReader(getReader(), m_pitch));
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/PitchReader.cpp b/extern/audaspace/src/fx/PitchReader.cpp
new file mode 100644
index 00000000000..f44be0261e6
--- /dev/null
+++ b/extern/audaspace/src/fx/PitchReader.cpp
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "fx/PitchReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+PitchReader::PitchReader(std::shared_ptr<IReader> reader, float pitch) :
+ EffectReader(reader), m_pitch(pitch)
+{
+}
+
+Specs PitchReader::getSpecs() const
+{
+ Specs specs = m_reader->getSpecs();
+ specs.rate *= m_pitch;
+ return specs;
+}
+
+float PitchReader::getPitch() const
+{
+ return m_pitch;
+}
+
+void PitchReader::setPitch(float pitch)
+{
+ if(pitch > 0.0f)
+ m_pitch = pitch;
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/PlaybackCategory.cpp b/extern/audaspace/src/fx/PlaybackCategory.cpp
new file mode 100644
index 00000000000..1891be96d16
--- /dev/null
+++ b/extern/audaspace/src/fx/PlaybackCategory.cpp
@@ -0,0 +1,144 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "fx/PlaybackCategory.h"
+#include "fx/VolumeSound.h"
+
+AUD_NAMESPACE_BEGIN
+
+struct HandleData {
+ unsigned int id;
+ PlaybackCategory* category;
+};
+
+PlaybackCategory::PlaybackCategory(std::shared_ptr<IDevice> device) :
+ m_currentID(0), m_device(device), m_status(STATUS_PLAYING), m_volumeStorage(std::make_shared<VolumeStorage>(1.0f))
+{
+}
+
+PlaybackCategory::~PlaybackCategory()
+{
+ stop();
+}
+
+std::shared_ptr<IHandle> PlaybackCategory::play(std::shared_ptr<ISound> sound)
+{
+ std::shared_ptr<ISound> vs(std::make_shared<VolumeSound>(sound, m_volumeStorage));
+ m_device->lock();
+ auto handle = m_device->play(vs);
+ if(handle == nullptr)
+ return nullptr;
+ switch (m_status)
+ {
+ case STATUS_PAUSED:
+ handle->pause();
+ break;
+ default:
+ m_status = STATUS_PLAYING;
+ };
+ m_handles[m_currentID] = handle;
+ HandleData* data = new HandleData;
+ data->category = this;
+ data->id = m_currentID;
+ handle->setStopCallback(cleanHandleCallback, data);
+ m_device->unlock();
+
+ m_currentID++;
+ return handle;
+}
+
+void PlaybackCategory::resume()
+{
+ m_device->lock();
+ for(auto i = m_handles.begin(); i != m_handles.end();)
+ {
+ if(i->second->getStatus() == STATUS_INVALID)
+ i = m_handles.erase(i);
+ else
+ {
+ i->second->resume();
+ i++;
+ }
+ }
+ m_device->unlock();
+ m_status = STATUS_PLAYING;
+}
+
+void PlaybackCategory::pause()
+{
+ m_device->lock();
+ for(auto i = m_handles.begin(); i != m_handles.end();)
+ {
+ if(i->second->getStatus() == STATUS_INVALID)
+ i = m_handles.erase(i);
+ else
+ {
+ i->second->pause();
+ i++;
+ }
+ }
+ m_device->unlock();
+ m_status = STATUS_PAUSED;
+}
+
+float PlaybackCategory::getVolume()
+{
+ return m_volumeStorage->getVolume();
+}
+
+void PlaybackCategory::setVolume(float volume)
+{
+ m_volumeStorage->setVolume(volume);
+}
+
+void PlaybackCategory::stop()
+{
+ m_device->lock();
+ for(auto i = m_handles.begin(); i != m_handles.end();)
+ {
+ i->second->stop();
+ if(i->second->getStatus() == STATUS_INVALID)
+ i = m_handles.erase(i);
+ else
+ i++;
+ }
+ m_device->unlock();
+ m_status = STATUS_STOPPED;
+}
+
+std::shared_ptr<VolumeStorage> PlaybackCategory::getSharedVolume()
+{
+ return m_volumeStorage;
+}
+
+void PlaybackCategory::cleanHandles()
+{
+ for(auto i = m_handles.begin(); i != m_handles.end();)
+ {
+ if(i->second->getStatus() == STATUS_INVALID)
+ i = m_handles.erase(i);
+ else
+ i++;
+ }
+}
+
+void PlaybackCategory::cleanHandleCallback(void* data)
+{
+ auto dat = reinterpret_cast<HandleData*>(data);
+ dat->category->m_handles.erase(dat->id);
+ delete dat;
+}
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/PlaybackManager.cpp b/extern/audaspace/src/fx/PlaybackManager.cpp
new file mode 100644
index 00000000000..0fbeeba04e2
--- /dev/null
+++ b/extern/audaspace/src/fx/PlaybackManager.cpp
@@ -0,0 +1,186 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "fx/PlaybackManager.h"
+#include "fx/VolumeSound.h"
+
+#include <stdexcept>
+
+AUD_NAMESPACE_BEGIN
+PlaybackManager::PlaybackManager(std::shared_ptr<IDevice> device) :
+ m_device(device), m_currentKey(0)
+{
+}
+
+unsigned int PlaybackManager::addCategory(std::shared_ptr<PlaybackCategory> category)
+{
+ bool flag = true;
+ unsigned int k = -1;
+ do {
+ auto iter = m_categories.find(m_currentKey);
+ if(iter == m_categories.end())
+ {
+ m_categories[m_currentKey] = category;
+ k = m_currentKey;
+ m_currentKey++;
+ flag = false;
+ }
+ else
+ m_currentKey++;
+ } while(flag);
+
+ return k;
+}
+
+unsigned int PlaybackManager::addCategory(float volume)
+{
+ std::shared_ptr<PlaybackCategory> category = std::make_shared<PlaybackCategory>(m_device);
+ category->setVolume(volume);
+ bool flag = true;
+ unsigned int k = -1;
+ do {
+ auto iter = m_categories.find(m_currentKey);
+ if(iter == m_categories.end())
+ {
+ m_categories[m_currentKey] = category;
+ k = m_currentKey;
+ m_currentKey++;
+ flag = false;
+ }
+ else
+ m_currentKey++;
+ } while(flag);
+
+ return k;
+}
+
+std::shared_ptr<IHandle> PlaybackManager::play(std::shared_ptr<ISound> sound, unsigned int catKey)
+{
+ auto iter = m_categories.find(catKey);
+ std::shared_ptr<PlaybackCategory> category;
+
+ if(iter != m_categories.end())
+ {
+ category = iter->second;
+ }
+ else
+ {
+ category = std::make_shared<PlaybackCategory>(m_device);
+ m_categories[catKey] = category;
+ }
+ return category->play(sound);
+}
+
+bool PlaybackManager::resume(unsigned int catKey)
+{
+ auto iter = m_categories.find(catKey);
+
+ if(iter != m_categories.end())
+ {
+ iter->second->resume();
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}
+
+bool PlaybackManager::pause(unsigned int catKey)
+{
+ auto iter = m_categories.find(catKey);
+
+ if(iter != m_categories.end())
+ {
+ iter->second->pause();
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}
+
+float PlaybackManager::getVolume(unsigned int catKey)
+{
+ auto iter = m_categories.find(catKey);
+
+ if(iter != m_categories.end())
+ {
+ return iter->second->getVolume();
+ }
+ else
+ {
+ return -1.0;
+ }
+}
+
+bool PlaybackManager::setVolume(float volume, unsigned int catKey)
+{
+ auto iter = m_categories.find(catKey);
+
+ if(iter != m_categories.end())
+ {
+ iter->second->setVolume(volume);
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}
+
+bool PlaybackManager::stop(unsigned int catKey)
+{
+ auto iter = m_categories.find(catKey);
+
+ if(iter != m_categories.end())
+ {
+ iter->second->stop();
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}
+
+void PlaybackManager::clean()
+{
+ for(auto cat : m_categories)
+ cat.second->cleanHandles();
+}
+
+bool PlaybackManager::clean(unsigned int catKey)
+{
+ auto iter = m_categories.find(catKey);
+
+ if(iter != m_categories.end())
+ {
+ iter->second->cleanHandles();
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}
+
+std::shared_ptr<IDevice> PlaybackManager::getDevice()
+{
+ return m_device;
+}
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/Reverse.cpp b/extern/audaspace/src/fx/Reverse.cpp
new file mode 100644
index 00000000000..7d906056071
--- /dev/null
+++ b/extern/audaspace/src/fx/Reverse.cpp
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "fx/Reverse.h"
+#include "fx/ReverseReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+Reverse::Reverse(std::shared_ptr<ISound> sound) :
+ Effect(sound)
+{
+}
+
+std::shared_ptr<IReader> Reverse::createReader()
+{
+ return std::shared_ptr<IReader>(new ReverseReader(getReader()));
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/ReverseReader.cpp b/extern/audaspace/src/fx/ReverseReader.cpp
new file mode 100644
index 00000000000..19a1e25ce4f
--- /dev/null
+++ b/extern/audaspace/src/fx/ReverseReader.cpp
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "fx/ReverseReader.h"
+#include "Exception.h"
+
+#include <cstring>
+
+AUD_NAMESPACE_BEGIN
+
+ReverseReader::ReverseReader(std::shared_ptr<IReader> reader) :
+ EffectReader(reader),
+ m_length(reader->getLength()),
+ m_position(0)
+{
+ if(m_length < 0 || !reader->isSeekable())
+ AUD_THROW(StateException, "A reader has to be seekable and have finite length to be reversible.");
+}
+
+void ReverseReader::seek(int position)
+{
+ m_position = position;
+}
+
+int ReverseReader::getLength() const
+{
+ return m_length;
+}
+
+int ReverseReader::getPosition() const
+{
+ return m_position;
+}
+
+void ReverseReader::read(int& length, bool& eos, sample_t* buffer)
+{
+ // first correct the length
+ if(m_position + length > m_length)
+ length = m_length - m_position;
+
+ if(length <= 0)
+ {
+ length = 0;
+ eos = true;
+ return;
+ }
+
+ const Specs specs = getSpecs();
+ const int samplesize = AUD_SAMPLE_SIZE(specs);
+
+ sample_t temp[CHANNEL_MAX];
+
+ int len = length;
+
+ // read from reader
+ m_reader->seek(m_length - m_position - len);
+ m_reader->read(len, eos, buffer);
+
+ // set null if reader didn't give enough data
+ if(len < length)
+ std::memset(buffer, 0, (length - len) * samplesize);
+
+ // copy the samples reverted
+ for(int i = 0; i < length / 2; i++)
+ {
+ std::memcpy(temp, buffer + (len - 1 - i) * specs.channels, samplesize);
+ std::memcpy(buffer + (len - 1 - i) * specs.channels, buffer + i * specs.channels, samplesize);
+ std::memcpy(buffer + i * specs.channels, temp, samplesize);
+ }
+
+ m_position += length;
+ eos = false;
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/SoundList.cpp b/extern/audaspace/src/fx/SoundList.cpp
new file mode 100644
index 00000000000..81239ca5baa
--- /dev/null
+++ b/extern/audaspace/src/fx/SoundList.cpp
@@ -0,0 +1,84 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "fx/SoundList.h"
+#include "Exception.h"
+
+#include <cstring>
+#include <cstdlib>
+#include <chrono>
+
+AUD_NAMESPACE_BEGIN
+
+SoundList::SoundList(bool random) :
+m_random(random)
+{
+ std::srand(time(NULL));
+}
+
+SoundList::SoundList(std::vector<std::shared_ptr<ISound>>& list, bool random) :
+m_list(list), m_random(random)
+{
+ std::srand(time(NULL));
+}
+
+std::shared_ptr<IReader> SoundList::createReader()
+{
+ if(m_list.size() > 0)
+ {
+ m_mutex.lock();
+
+ if(!m_random){
+ m_index++;
+ if(m_index >= m_list.size())
+ m_index = 0;
+ }
+ else
+ {
+ int temp;
+ do{
+ temp = std::rand() % m_list.size();
+ } while(temp == m_index && m_list.size()>1);
+ m_index = temp;
+ }
+ auto reader = m_list[m_index]->createReader();
+ m_mutex.unlock();
+ return reader;
+ }
+ else
+ AUD_THROW(FileException, "The sound list is empty");
+}
+
+void SoundList::addSound(std::shared_ptr<ISound> sound)
+{
+ m_list.push_back(sound);
+}
+
+void SoundList::setRandomMode(bool random)
+{
+ m_random = random;
+}
+
+bool SoundList::getRandomMode()
+{
+ return m_random;
+}
+
+int SoundList::getSize()
+{
+ return m_list.size();
+}
+AUD_NAMESPACE_END \ No newline at end of file
diff --git a/extern/audaspace/src/fx/Source.cpp b/extern/audaspace/src/fx/Source.cpp
new file mode 100644
index 00000000000..354ed69674b
--- /dev/null
+++ b/extern/audaspace/src/fx/Source.cpp
@@ -0,0 +1,71 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "fx/Source.h"
+
+#include <cmath>
+
+AUD_NAMESPACE_BEGIN
+Source::Source(float azimuth, float elevation, float distance) :
+ m_elevation(elevation), m_distance(distance)
+{
+ azimuth = std::fmod(azimuth, 360);
+ if(azimuth < 0)
+ azimuth += 360;
+ m_azimuth = azimuth;
+}
+
+float Source::getAzimuth()
+{
+ return m_azimuth;
+}
+
+float Source::getElevation()
+{
+ return m_elevation;
+}
+
+float Source::getDistance()
+{
+ return m_distance;
+}
+
+float Source::getVolume()
+{
+ float volume = 1.0f - m_distance;
+ if(volume < 0.0f)
+ volume = 0.0f;
+ return volume;
+}
+
+void Source::setAzimuth(float azimuth)
+{
+ azimuth = std::fmod(azimuth, 360);
+ if(azimuth < 0)
+ azimuth += 360;
+ m_azimuth = azimuth;
+}
+
+void Source::setElevation(float elevation)
+{
+ m_elevation = elevation;
+}
+
+void Source::setDistance(float distance)
+{
+ m_distance = distance;
+}
+AUD_NAMESPACE_END \ No newline at end of file
diff --git a/extern/audaspace/src/fx/Sum.cpp b/extern/audaspace/src/fx/Sum.cpp
new file mode 100644
index 00000000000..306bc5de953
--- /dev/null
+++ b/extern/audaspace/src/fx/Sum.cpp
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "fx/Sum.h"
+#include "fx/IIRFilterReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+Sum::Sum(std::shared_ptr<ISound> sound) :
+ Effect(sound)
+{
+}
+
+std::shared_ptr<IReader> Sum::createReader()
+{
+ std::vector<float> a, b;
+ a.push_back(1);
+ a.push_back(-1);
+ b.push_back(1);
+ return std::shared_ptr<IReader>(new IIRFilterReader(getReader(), b, a));
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/Threshold.cpp b/extern/audaspace/src/fx/Threshold.cpp
new file mode 100644
index 00000000000..03c4ae4c8a5
--- /dev/null
+++ b/extern/audaspace/src/fx/Threshold.cpp
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "fx/Threshold.h"
+#include "fx/CallbackIIRFilterReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+sample_t Threshold::thresholdFilter(CallbackIIRFilterReader* reader, float* threshold)
+{
+ float in = reader->x(0);
+ if(in >= *threshold)
+ return 1;
+ else if(in <= -*threshold)
+ return -1;
+ else
+ return 0;
+}
+
+void Threshold::endThresholdFilter(float* threshold)
+{
+ delete threshold;
+}
+
+Threshold::Threshold(std::shared_ptr<ISound> sound, float threshold) :
+ Effect(sound),
+ m_threshold(threshold)
+{
+}
+
+float Threshold::getThreshold() const
+{
+ return m_threshold;
+}
+
+std::shared_ptr<IReader> Threshold::createReader()
+{
+ return std::shared_ptr<IReader>(new CallbackIIRFilterReader(getReader(), 1, 0, doFilterIIR(thresholdFilter), endFilterIIR(endThresholdFilter), new float(m_threshold)));
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/Volume.cpp b/extern/audaspace/src/fx/Volume.cpp
new file mode 100644
index 00000000000..231f5856a6c
--- /dev/null
+++ b/extern/audaspace/src/fx/Volume.cpp
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "fx/Volume.h"
+#include "fx/IIRFilterReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+Volume::Volume(std::shared_ptr<ISound> sound, float volume) :
+ Effect(sound),
+ m_volume(volume)
+{
+}
+
+float Volume::getVolume() const
+{
+ return m_volume;
+}
+
+std::shared_ptr<IReader> Volume::createReader()
+{
+ std::vector<float> a, b;
+ a.push_back(1);
+ b.push_back(m_volume);
+ return std::shared_ptr<IReader>(new IIRFilterReader(getReader(), b, a));
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/fx/VolumeReader.cpp b/extern/audaspace/src/fx/VolumeReader.cpp
new file mode 100644
index 00000000000..ac1d4882a87
--- /dev/null
+++ b/extern/audaspace/src/fx/VolumeReader.cpp
@@ -0,0 +1,60 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "fx/VolumeReader.h"
+
+#include <cstring>
+
+AUD_NAMESPACE_BEGIN
+
+VolumeReader::VolumeReader(std::shared_ptr<IReader> reader, std::shared_ptr<VolumeStorage> volumeStorage) :
+ m_reader(reader), m_volumeStorage(volumeStorage)
+{
+}
+
+bool VolumeReader::isSeekable() const
+{
+ return m_reader->isSeekable();
+}
+
+void VolumeReader::seek(int position)
+{
+ m_reader->seek(position);
+}
+
+int VolumeReader::getLength() const
+{
+ return m_reader->getLength();
+}
+
+int VolumeReader::getPosition() const
+{
+ return m_reader->getPosition();
+}
+
+Specs VolumeReader::getSpecs() const
+{
+ return m_reader->getSpecs();
+}
+
+void VolumeReader::read(int& length, bool& eos, sample_t* buffer)
+{
+ m_reader->read(length, eos, buffer);
+ for(int i = 0; i < length * m_reader->getSpecs().channels; i++)
+ buffer[i] = buffer[i] * m_volumeStorage->getVolume();
+}
+
+AUD_NAMESPACE_END \ No newline at end of file
diff --git a/extern/audaspace/src/fx/VolumeSound.cpp b/extern/audaspace/src/fx/VolumeSound.cpp
new file mode 100644
index 00000000000..b7f96225682
--- /dev/null
+++ b/extern/audaspace/src/fx/VolumeSound.cpp
@@ -0,0 +1,45 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "fx/VolumeSound.h"
+#include "fx/VolumeReader.h"
+#include "Exception.h"
+
+#include <cstring>
+
+AUD_NAMESPACE_BEGIN
+
+VolumeSound::VolumeSound(std::shared_ptr<ISound> sound, std::shared_ptr<VolumeStorage> volumeStorage) :
+ m_sound(sound), m_volumeStorage(volumeStorage)
+{
+}
+
+std::shared_ptr<IReader> VolumeSound::createReader()
+{
+ return std::make_shared<VolumeReader>(m_sound->createReader(), m_volumeStorage);
+}
+
+std::shared_ptr<VolumeStorage> VolumeSound::getSharedVolume()
+{
+ return m_volumeStorage;
+}
+
+void VolumeSound::setSharedVolume(std::shared_ptr<VolumeStorage> volumeStorage)
+{
+ m_volumeStorage = volumeStorage;
+}
+
+AUD_NAMESPACE_END \ No newline at end of file
diff --git a/extern/audaspace/src/fx/VolumeStorage.cpp b/extern/audaspace/src/fx/VolumeStorage.cpp
new file mode 100644
index 00000000000..4c5164d0ea1
--- /dev/null
+++ b/extern/audaspace/src/fx/VolumeStorage.cpp
@@ -0,0 +1,39 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "fx/VolumeStorage.h"
+
+AUD_NAMESPACE_BEGIN
+VolumeStorage::VolumeStorage() :
+ m_volume(1.0f)
+{
+}
+
+VolumeStorage::VolumeStorage(float volume) :
+ m_volume(volume)
+{
+}
+
+float VolumeStorage::getVolume()
+{
+ return m_volume;
+}
+
+void VolumeStorage::setVolume(float volume)
+{
+ m_volume = volume;
+}
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/generator/Sawtooth.cpp b/extern/audaspace/src/generator/Sawtooth.cpp
new file mode 100644
index 00000000000..f5acad44839
--- /dev/null
+++ b/extern/audaspace/src/generator/Sawtooth.cpp
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "generator/Sawtooth.h"
+#include "generator/SawtoothReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+Sawtooth::Sawtooth(float frequency, SampleRate sampleRate) :
+ m_frequency(frequency),
+ m_sampleRate(sampleRate)
+{
+}
+
+float Sawtooth::getFrequency() const
+{
+ return m_frequency;
+}
+
+std::shared_ptr<IReader> Sawtooth::createReader()
+{
+ return std::shared_ptr<IReader>(new SawtoothReader(m_frequency, m_sampleRate));
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/generator/SawtoothReader.cpp b/extern/audaspace/src/generator/SawtoothReader.cpp
new file mode 100644
index 00000000000..3664b8d3b61
--- /dev/null
+++ b/extern/audaspace/src/generator/SawtoothReader.cpp
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "generator/SawtoothReader.h"
+
+#include <cmath>
+
+AUD_NAMESPACE_BEGIN
+
+SawtoothReader::SawtoothReader(float frequency, SampleRate sampleRate) :
+ m_frequency(frequency),
+ m_position(0),
+ m_sample(0),
+ m_sampleRate(sampleRate)
+{
+}
+
+void SawtoothReader::setFrequency(float frequency)
+{
+ m_frequency = frequency;
+}
+
+bool SawtoothReader::isSeekable() const
+{
+ return true;
+}
+
+void SawtoothReader::seek(int position)
+{
+ m_position = position;
+ m_sample = std::fmod(m_position * m_frequency / (float)m_sampleRate + 1.0f, 2.0f) - 1.0f;
+}
+
+int SawtoothReader::getLength() const
+{
+ return -1;
+}
+
+int SawtoothReader::getPosition() const
+{
+ return m_position;
+}
+
+Specs SawtoothReader::getSpecs() const
+{
+ Specs specs;
+ specs.rate = m_sampleRate;
+ specs.channels = CHANNELS_MONO;
+ return specs;
+}
+
+void SawtoothReader::read(int& length, bool& eos, sample_t* buffer)
+{
+ float k = 2.0 * m_frequency / m_sampleRate;
+
+ for(int i = 0; i < length; i++)
+ {
+ m_sample += k;
+
+ if(m_sample >= 1.0f)
+ m_sample -= std::floor(m_sample) + 1.0f;
+
+ buffer[i] = m_sample;
+ }
+
+ m_position += length;
+ eos = false;
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/generator/Silence.cpp b/extern/audaspace/src/generator/Silence.cpp
new file mode 100644
index 00000000000..a173a1bc5f6
--- /dev/null
+++ b/extern/audaspace/src/generator/Silence.cpp
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "generator/Silence.h"
+#include "generator/SilenceReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+Silence::Silence()
+{
+}
+
+std::shared_ptr<IReader> Silence::createReader()
+{
+ return std::shared_ptr<IReader>(new SilenceReader());
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/generator/SilenceReader.cpp b/extern/audaspace/src/generator/SilenceReader.cpp
new file mode 100644
index 00000000000..39358cc087a
--- /dev/null
+++ b/extern/audaspace/src/generator/SilenceReader.cpp
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "generator/SilenceReader.h"
+
+#include <cstring>
+
+AUD_NAMESPACE_BEGIN
+
+SilenceReader::SilenceReader() :
+ m_position(0)
+{
+}
+
+bool SilenceReader::isSeekable() const
+{
+ return true;
+}
+
+void SilenceReader::seek(int position)
+{
+ m_position = position;
+}
+
+int SilenceReader::getLength() const
+{
+ return -1;
+}
+
+int SilenceReader::getPosition() const
+{
+ return m_position;
+}
+
+Specs SilenceReader::getSpecs() const
+{
+ Specs specs;
+ specs.rate = RATE_48000;
+ specs.channels = CHANNELS_MONO;
+ return specs;
+}
+
+void SilenceReader::read(int& length, bool& eos, sample_t* buffer)
+{
+ std::memset(buffer, 0, length * sizeof(sample_t));
+ m_position += length;
+ eos = false;
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/generator/Sine.cpp b/extern/audaspace/src/generator/Sine.cpp
new file mode 100644
index 00000000000..b7cdc132df6
--- /dev/null
+++ b/extern/audaspace/src/generator/Sine.cpp
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "generator/Sine.h"
+#include "generator/SineReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+Sine::Sine(float frequency, SampleRate sampleRate) :
+ m_frequency(frequency),
+ m_sampleRate(sampleRate)
+{
+}
+
+float Sine::getFrequency() const
+{
+ return m_frequency;
+}
+
+std::shared_ptr<IReader> Sine::createReader()
+{
+ return std::shared_ptr<IReader>(new SineReader(m_frequency, m_sampleRate));
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/generator/SineReader.cpp b/extern/audaspace/src/generator/SineReader.cpp
new file mode 100644
index 00000000000..49b7cc3114b
--- /dev/null
+++ b/extern/audaspace/src/generator/SineReader.cpp
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "generator/SineReader.h"
+
+#include <cmath>
+
+AUD_NAMESPACE_BEGIN
+
+SineReader::SineReader(float frequency, SampleRate sampleRate) :
+ m_frequency(frequency),
+ m_position(0),
+ m_sampleRate(sampleRate)
+{
+}
+
+void SineReader::setFrequency(float frequency)
+{
+ m_frequency = frequency;
+}
+
+bool SineReader::isSeekable() const
+{
+ return true;
+}
+
+void SineReader::seek(int position)
+{
+ m_position = position;
+}
+
+int SineReader::getLength() const
+{
+ return -1;
+}
+
+int SineReader::getPosition() const
+{
+ return m_position;
+}
+
+Specs SineReader::getSpecs() const
+{
+ Specs specs;
+ specs.rate = m_sampleRate;
+ specs.channels = CHANNELS_MONO;
+ return specs;
+}
+
+void SineReader::read(int& length, bool& eos, sample_t* buffer)
+{
+ // fill with sine data
+ for(int i = 0; i < length; i++)
+ {
+ buffer[i] = std::sin((m_position + i) * 2 * M_PI * m_frequency / m_sampleRate);
+ }
+
+ m_position += length;
+ eos = false;
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/generator/Square.cpp b/extern/audaspace/src/generator/Square.cpp
new file mode 100644
index 00000000000..361c243c549
--- /dev/null
+++ b/extern/audaspace/src/generator/Square.cpp
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "generator/Square.h"
+#include "generator/SquareReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+Square::Square(float frequency, SampleRate sampleRate) :
+ m_frequency(frequency),
+ m_sampleRate(sampleRate)
+{
+}
+
+float Square::getFrequency() const
+{
+ return m_frequency;
+}
+
+std::shared_ptr<IReader> Square::createReader()
+{
+ return std::shared_ptr<IReader>(new SquareReader(m_frequency, m_sampleRate));
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/generator/SquareReader.cpp b/extern/audaspace/src/generator/SquareReader.cpp
new file mode 100644
index 00000000000..8f49b097487
--- /dev/null
+++ b/extern/audaspace/src/generator/SquareReader.cpp
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "generator/SquareReader.h"
+
+#include <cmath>
+
+AUD_NAMESPACE_BEGIN
+
+SquareReader::SquareReader(float frequency, SampleRate sampleRate) :
+ m_frequency(frequency),
+ m_position(0),
+ m_sample(0),
+ m_sampleRate(sampleRate)
+{
+}
+
+void SquareReader::setFrequency(float frequency)
+{
+ m_frequency = frequency;
+}
+
+bool SquareReader::isSeekable() const
+{
+ return true;
+}
+
+void SquareReader::seek(int position)
+{
+ m_position = position;
+ m_sample = std::fmod(m_position * m_frequency / (float)m_sampleRate, 2.0f);
+}
+
+int SquareReader::getLength() const
+{
+ return -1;
+}
+
+int SquareReader::getPosition() const
+{
+ return m_position;
+}
+
+Specs SquareReader::getSpecs() const
+{
+ Specs specs;
+ specs.rate = m_sampleRate;
+ specs.channels = CHANNELS_MONO;
+ return specs;
+}
+
+void SquareReader::read(int& length, bool& eos, sample_t* buffer)
+{
+ float k = 2.0 * m_frequency / m_sampleRate;
+
+ for(int i = 0; i < length; i++)
+ {
+ m_sample += k;
+
+ if(m_sample >= 2.0f)
+ m_sample = std::fmod(m_sample, 2.0f);
+
+ buffer[i] = (m_sample < 1.0f) * 2.0f - 1.0f;
+ }
+
+ m_position += length;
+ eos = false;
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/generator/Triangle.cpp b/extern/audaspace/src/generator/Triangle.cpp
new file mode 100644
index 00000000000..ca8f1b63fb9
--- /dev/null
+++ b/extern/audaspace/src/generator/Triangle.cpp
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "generator/Triangle.h"
+#include "generator/TriangleReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+Triangle::Triangle(float frequency, SampleRate sampleRate) :
+ m_frequency(frequency),
+ m_sampleRate(sampleRate)
+{
+}
+
+float Triangle::getFrequency() const
+{
+ return m_frequency;
+}
+
+std::shared_ptr<IReader> Triangle::createReader()
+{
+ return std::shared_ptr<IReader>(new TriangleReader(m_frequency, m_sampleRate));
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/generator/TriangleReader.cpp b/extern/audaspace/src/generator/TriangleReader.cpp
new file mode 100644
index 00000000000..c363d3850ca
--- /dev/null
+++ b/extern/audaspace/src/generator/TriangleReader.cpp
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "generator/TriangleReader.h"
+
+#include <cmath>
+
+AUD_NAMESPACE_BEGIN
+
+TriangleReader::TriangleReader(float frequency, SampleRate sampleRate) :
+ m_frequency(frequency),
+ m_position(0),
+ m_sample(0.5f),
+ m_sampleRate(sampleRate)
+{
+}
+
+void TriangleReader::setFrequency(float frequency)
+{
+ m_frequency = frequency;
+}
+
+bool TriangleReader::isSeekable() const
+{
+ return true;
+}
+
+void TriangleReader::seek(int position)
+{
+ m_position = position;
+ m_sample = std::fmod(m_position * m_frequency / (float)m_sampleRate + 1.5f, 2.0f) - 1.0f;
+}
+
+int TriangleReader::getLength() const
+{
+ return -1;
+}
+
+int TriangleReader::getPosition() const
+{
+ return m_position;
+}
+
+Specs TriangleReader::getSpecs() const
+{
+ Specs specs;
+ specs.rate = m_sampleRate;
+ specs.channels = CHANNELS_MONO;
+ return specs;
+}
+
+void TriangleReader::read(int& length, bool& eos, sample_t* buffer)
+{
+ float k = 2.0 * m_frequency / m_sampleRate;
+
+ for(int i = 0; i < length; i++)
+ {
+ m_sample += k;
+
+ if(m_sample >= 1.0f)
+ m_sample -= std::floor(m_sample) + 1.0f;
+
+ buffer[i] = std::fabs(m_sample) * 2.0f - 1.0f;
+ }
+
+ m_position += length;
+ eos = false;
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/plugin/PluginManagerUnix.cpp.in b/extern/audaspace/src/plugin/PluginManagerUnix.cpp.in
new file mode 100644
index 00000000000..d08804bc2e7
--- /dev/null
+++ b/extern/audaspace/src/plugin/PluginManagerUnix.cpp.in
@@ -0,0 +1,98 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "plugin/PluginManager.h"
+
+#include <dlfcn.h>
+#include <dirent.h>
+
+AUD_NAMESPACE_BEGIN
+
+std::unordered_map<std::string, void*> PluginManager::m_plugins;
+
+void* PluginManager::openLibrary(const std::string& path)
+{
+ return dlopen(path.c_str(), RTLD_LAZY);
+}
+
+void *PluginManager::lookupLibrary(void *handle, const std::string &name)
+{
+ return dlsym(handle, name.c_str());
+}
+
+void PluginManager::closeLibrary(void *handle)
+{
+ dlclose(handle);
+}
+
+bool PluginManager::loadPlugin(const std::string& path)
+{
+ void* handle = openLibrary(path);
+
+ if (!handle)
+ return false;
+
+ void (*registerPlugin)() = (void (*)())lookupLibrary(handle, "registerPlugin");
+ const char* (*getName)() = (const char* (*)())lookupLibrary(handle, "getName");
+
+ if(!registerPlugin || !getName)
+ {
+ closeLibrary(handle);
+ return false;
+ }
+
+ registerPlugin();
+
+ m_plugins[getName()] = handle;
+
+ return true;
+}
+
+#define STATIC_PLUGIN_CLASS(name) class name { public: static void registerPlugin(); };
+#define STATIC_PLUGIN_REGISTER(name) name::registerPlugin();
+
+@STATIC_PLUGIN_CLASSES@
+
+void PluginManager::loadPlugins(const std::string& path)
+{
+@STATIC_PLUGIN_REGISTERS@
+
+ std::string readpath = path;
+
+ if(path == "")
+ readpath = "@DEFAULT_PLUGIN_PATH@";
+
+ DIR* dir = opendir(readpath.c_str());
+
+ if(!dir)
+ return;
+
+ while(dirent* entry = readdir(dir))
+ {
+ const std::string filename = entry->d_name;
+ const std::string end = ".so";
+
+ if(filename.length() >= end.length() && filename.substr(filename.length() - end.length()) == end)
+ {
+ if(!loadPlugin(readpath + "/" + filename + ".@AUDASPACE_VERSION@"))
+ loadPlugin(readpath + "/" + filename);
+ }
+ }
+
+ closedir(dir);
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/plugin/PluginManagerWindows.cpp.in b/extern/audaspace/src/plugin/PluginManagerWindows.cpp.in
new file mode 100644
index 00000000000..62350fd24fd
--- /dev/null
+++ b/extern/audaspace/src/plugin/PluginManagerWindows.cpp.in
@@ -0,0 +1,101 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "plugin/PluginManager.h"
+
+#include <windows.h>
+
+AUD_NAMESPACE_BEGIN
+
+std::unordered_map<std::string, void*> PluginManager::m_plugins;
+
+void* PluginManager::openLibrary(const std::string& path)
+{
+ return reinterpret_cast<void*>(LoadLibrary(path.c_str()));
+}
+
+void *PluginManager::lookupLibrary(void *handle, const std::string &name)
+{
+ return GetProcAddress(reinterpret_cast<HMODULE>(handle), name.c_str());
+}
+
+void PluginManager::closeLibrary(void *handle)
+{
+ FreeLibrary(reinterpret_cast<HMODULE>(handle));
+}
+
+bool PluginManager::loadPlugin(const std::string& path)
+{
+ void* handle = openLibrary(path);
+
+ if (!handle)
+ return false;
+
+ void (*registerPlugin)() = (void (*)())lookupLibrary(handle, "registerPlugin");
+ const char* (*getName)() = (const char* (*)())lookupLibrary(handle, "getName");
+
+ if(!registerPlugin || !getName)
+ {
+ closeLibrary(handle);
+ return false;
+ }
+
+ registerPlugin();
+
+ m_plugins[getName()] = handle;
+
+ return true;
+}
+
+#define STATIC_PLUGIN_CLASS(name) class name { public: static void registerPlugin(); };
+#define STATIC_PLUGIN_REGISTER(name) name::registerPlugin();
+
+@STATIC_PLUGIN_CLASSES@
+
+void PluginManager::loadPlugins(const std::string& path)
+{
+@STATIC_PLUGIN_REGISTERS@
+
+ std::string readpath = path;
+
+ if(path == "")
+ readpath = "@DEFAULT_PLUGIN_PATH@";
+
+ WIN32_FIND_DATA entry;
+ bool found_file = true;
+ std::string search = readpath + "\\*";
+ HANDLE dir = FindFirstFile(search.c_str(), &entry);
+
+ if(dir == INVALID_HANDLE_VALUE)
+ return;
+
+ while(found_file)
+ {
+ const std::string filename = entry.cFileName;
+ const std::string end = ".dll";
+
+ if(filename.length() >= end.length() && filename.substr(filename.length() - end.length()) == end)
+ {
+ loadPlugin(readpath + "/" + filename);
+ }
+
+ found_file = FindNextFile(dir, &entry);
+ }
+
+ FindClose(dir);
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/respec/ChannelMapper.cpp b/extern/audaspace/src/respec/ChannelMapper.cpp
new file mode 100644
index 00000000000..e6e214598cb
--- /dev/null
+++ b/extern/audaspace/src/respec/ChannelMapper.cpp
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "respec/ChannelMapper.h"
+#include "respec/ChannelMapperReader.h"
+
+#include <cstring>
+
+AUD_NAMESPACE_BEGIN
+
+ChannelMapper::ChannelMapper(std::shared_ptr<ISound> sound, DeviceSpecs specs) :
+ SpecsChanger(sound, specs)
+{
+}
+
+std::shared_ptr<IReader> ChannelMapper::createReader()
+{
+ std::shared_ptr<IReader> reader = getReader();
+ return std::shared_ptr<IReader>(new ChannelMapperReader(reader, m_specs.channels));
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/respec/ChannelMapperReader.cpp b/extern/audaspace/src/respec/ChannelMapperReader.cpp
new file mode 100644
index 00000000000..850e54b73cf
--- /dev/null
+++ b/extern/audaspace/src/respec/ChannelMapperReader.cpp
@@ -0,0 +1,379 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "respec/ChannelMapperReader.h"
+
+#include <cmath>
+#include <limits>
+
+AUD_NAMESPACE_BEGIN
+
+ChannelMapperReader::ChannelMapperReader(std::shared_ptr<IReader> reader,
+ Channels channels) :
+ EffectReader(reader), m_target_channels(channels),
+ m_source_channels(CHANNELS_INVALID), m_mapping(nullptr), m_map_size(0), m_mono_angle(0)
+{
+}
+
+ChannelMapperReader::~ChannelMapperReader()
+{
+ delete[] m_mapping;
+}
+
+Channels ChannelMapperReader::getSourceChannels() const
+{
+ return m_reader->getSpecs().channels;
+}
+
+Channels ChannelMapperReader::getChannels() const
+{
+ return m_target_channels;
+}
+
+void ChannelMapperReader::setChannels(Channels channels)
+{
+ m_target_channels = channels;
+ calculateMapping();
+}
+
+float ChannelMapperReader::getMapping(int source, int target)
+{
+ Channels source_channels = m_reader->getSpecs().channels;
+ if(source_channels != m_source_channels)
+ {
+ m_source_channels = source_channels;
+ calculateMapping();
+ }
+
+ if(source < 0 || source >= source_channels || target < 0 || target >= m_target_channels)
+ return std::numeric_limits<float>::quiet_NaN();
+
+ return m_mapping[target * source_channels + source];
+}
+
+void ChannelMapperReader::setMonoAngle(float angle)
+{
+ if(angle != angle)
+ angle = 0;
+ m_mono_angle = angle;
+ if(m_source_channels == CHANNELS_MONO)
+ calculateMapping();
+}
+
+float ChannelMapperReader::angleDistance(float alpha, float beta)
+{
+ alpha = beta - alpha;
+
+ if(alpha > M_PI)
+ alpha -= 2 * M_PI;
+ if(alpha < -M_PI)
+ alpha += 2 * M_PI;
+
+ return alpha;
+}
+
+void ChannelMapperReader::calculateMapping()
+{
+ if(m_map_size < m_source_channels * m_target_channels)
+ {
+ delete[] m_mapping;
+ m_mapping = new float[m_source_channels * m_target_channels];
+ m_map_size = m_source_channels * m_target_channels;
+ }
+
+ for(int i = 0; i < m_source_channels * m_target_channels; i++)
+ m_mapping[i] = 0;
+
+ const Channel* source_channels = CHANNEL_MAPS[m_source_channels - 1];
+ const Channel* target_channels = CHANNEL_MAPS[m_target_channels - 1];
+
+ int lfe = -1;
+
+ for(int i = 0; i < m_target_channels; i++)
+ {
+ if(target_channels[i] == CHANNEL_LFE)
+ {
+ lfe = i;
+ break;
+ }
+ }
+
+ const float* source_angles = CHANNEL_ANGLES[m_source_channels - 1];
+ const float* target_angles = CHANNEL_ANGLES[m_target_channels - 1];
+
+ if(m_source_channels == CHANNELS_MONO)
+ source_angles = &m_mono_angle;
+
+ int channel_left, channel_right;
+ float angle_left, angle_right, angle;
+
+ for(int i = 0; i < m_source_channels; i++)
+ {
+ if(source_channels[i] == CHANNEL_LFE)
+ {
+ if(lfe != -1)
+ m_mapping[lfe * m_source_channels + i] = 1;
+
+ continue;
+ }
+
+ channel_left = channel_right = -1;
+ angle_left = -2 * M_PI;
+ angle_right = 2 * M_PI;
+
+ for(int j = 0; j < m_target_channels; j++)
+ {
+ if(j == lfe)
+ continue;
+ angle = angleDistance(source_angles[i], target_angles[j]);
+ if(angle < 0)
+ {
+ if(angle > angle_left)
+ {
+ angle_left = angle;
+ channel_left = j;
+ }
+ }
+ else
+ {
+ if(angle < angle_right)
+ {
+ angle_right = angle;
+ channel_right = j;
+ }
+ }
+ }
+
+ angle = angle_right - angle_left;
+ if(channel_right == -1 || angle == 0)
+ {
+ m_mapping[channel_left * m_source_channels + i] = 1;
+ }
+ else if(channel_left == -1)
+ {
+ m_mapping[channel_right * m_source_channels + i] = 1;
+ }
+ else
+ {
+ m_mapping[channel_left * m_source_channels + i] = std::cos(M_PI_2 * angle_left / angle);
+ m_mapping[channel_right * m_source_channels + i] = std::cos(M_PI_2 * angle_right / angle);
+ }
+ }
+}
+
+Specs ChannelMapperReader::getSpecs() const
+{
+ Specs specs = m_reader->getSpecs();
+ specs.channels = m_target_channels;
+ return specs;
+}
+
+void ChannelMapperReader::read(int& length, bool& eos, sample_t* buffer)
+{
+ Channels channels = m_reader->getSpecs().channels;
+ if(channels != m_source_channels)
+ {
+ m_source_channels = channels;
+ calculateMapping();
+ }
+
+ if(m_source_channels == m_target_channels)
+ {
+ m_reader->read(length, eos, buffer);
+ return;
+ }
+
+ m_buffer.assureSize(length * channels * sizeof(sample_t));
+
+ sample_t* in = m_buffer.getBuffer();
+
+ m_reader->read(length, eos, in);
+
+ sample_t sum;
+
+ for(int i = 0; i < length; i++)
+ {
+ for(int j = 0; j < m_target_channels; j++)
+ {
+ sum = 0;
+ for(int k = 0; k < m_source_channels; k++)
+ sum += m_mapping[j * m_source_channels + k] * in[i * m_source_channels + k];
+ buffer[i * m_target_channels + j] = sum;
+ }
+ }
+}
+
+const Channel ChannelMapperReader::MONO_MAP[] =
+{
+ CHANNEL_FRONT_CENTER
+};
+
+const Channel ChannelMapperReader::STEREO_MAP[] =
+{
+ CHANNEL_FRONT_LEFT,
+ CHANNEL_FRONT_RIGHT
+};
+
+const Channel ChannelMapperReader::STEREO_LFE_MAP[] =
+{
+ CHANNEL_FRONT_LEFT,
+ CHANNEL_FRONT_RIGHT,
+ CHANNEL_LFE
+};
+
+const Channel ChannelMapperReader::SURROUND4_MAP[] =
+{
+ CHANNEL_FRONT_LEFT,
+ CHANNEL_FRONT_RIGHT,
+ CHANNEL_REAR_LEFT,
+ CHANNEL_REAR_RIGHT
+};
+
+const Channel ChannelMapperReader::SURROUND5_MAP[] =
+{
+ CHANNEL_FRONT_LEFT,
+ CHANNEL_FRONT_RIGHT,
+ CHANNEL_FRONT_CENTER,
+ CHANNEL_REAR_LEFT,
+ CHANNEL_REAR_RIGHT
+};
+
+const Channel ChannelMapperReader::SURROUND51_MAP[] =
+{
+ CHANNEL_FRONT_LEFT,
+ CHANNEL_FRONT_RIGHT,
+ CHANNEL_FRONT_CENTER,
+ CHANNEL_LFE,
+ CHANNEL_REAR_LEFT,
+ CHANNEL_REAR_RIGHT
+};
+
+const Channel ChannelMapperReader::SURROUND61_MAP[] =
+{
+ CHANNEL_FRONT_LEFT,
+ CHANNEL_FRONT_RIGHT,
+ CHANNEL_FRONT_CENTER,
+ CHANNEL_LFE,
+ CHANNEL_REAR_CENTER,
+ CHANNEL_REAR_LEFT,
+ CHANNEL_REAR_RIGHT
+};
+
+const Channel ChannelMapperReader::SURROUND71_MAP[] =
+{
+ CHANNEL_FRONT_LEFT,
+ CHANNEL_FRONT_RIGHT,
+ CHANNEL_FRONT_CENTER,
+ CHANNEL_LFE,
+ CHANNEL_REAR_LEFT,
+ CHANNEL_REAR_RIGHT,
+ CHANNEL_SIDE_LEFT,
+ CHANNEL_SIDE_RIGHT
+};
+
+const Channel* ChannelMapperReader::CHANNEL_MAPS[] =
+{
+ ChannelMapperReader::MONO_MAP,
+ ChannelMapperReader::STEREO_MAP,
+ ChannelMapperReader::STEREO_LFE_MAP,
+ ChannelMapperReader::SURROUND4_MAP,
+ ChannelMapperReader::SURROUND5_MAP,
+ ChannelMapperReader::SURROUND51_MAP,
+ ChannelMapperReader::SURROUND61_MAP,
+ ChannelMapperReader::SURROUND71_MAP
+};
+
+const float ChannelMapperReader::MONO_ANGLES[] =
+{
+ 0.0f * M_PI / 180.0f
+};
+
+const float ChannelMapperReader::STEREO_ANGLES[] =
+{
+ -90.0f * M_PI / 180.0f,
+ 90.0f * M_PI / 180.0f
+};
+
+const float ChannelMapperReader::STEREO_LFE_ANGLES[] =
+{
+ -90.0f * M_PI / 180.0f,
+ 90.0f * M_PI / 180.0f,
+ 0.0f * M_PI / 180.0f
+};
+
+const float ChannelMapperReader::SURROUND4_ANGLES[] =
+{
+ -45.0f * M_PI / 180.0f,
+ 45.0f * M_PI / 180.0f,
+ -135.0f * M_PI / 180.0f,
+ 135.0f * M_PI / 180.0f
+};
+
+const float ChannelMapperReader::SURROUND5_ANGLES[] =
+{
+ -30.0f * M_PI / 180.0f,
+ 30.0f * M_PI / 180.0f,
+ 0.0f * M_PI / 180.0f,
+ -110.0f * M_PI / 180.0f,
+ 110.0f * M_PI / 180.0f
+};
+
+const float ChannelMapperReader::SURROUND51_ANGLES[] =
+{
+ -30.0f * M_PI / 180.0f,
+ 30.0f * M_PI / 180.0f,
+ 0.0f * M_PI / 180.0f,
+ 0.0f * M_PI / 180.0f,
+ -110.0f * M_PI / 180.0f,
+ 110.0f * M_PI / 180.0f
+};
+
+const float ChannelMapperReader::SURROUND61_ANGLES[] =
+{
+ -30.0f * M_PI / 180.0f,
+ 30.0f * M_PI / 180.0f,
+ 0.0f * M_PI / 180.0f,
+ 0.0f * M_PI / 180.0f,
+ 180.0f * M_PI / 180.0f,
+ -110.0f * M_PI / 180.0f,
+ 110.0f * M_PI / 180.0f
+};
+
+const float ChannelMapperReader::SURROUND71_ANGLES[] =
+{
+ -30.0f * M_PI / 180.0f,
+ 30.0f * M_PI / 180.0f,
+ 0.0f * M_PI / 180.0f,
+ 0.0f * M_PI / 180.0f,
+ -110.0f * M_PI / 180.0f,
+ 110.0f * M_PI / 180.0f,
+ -150.0f * M_PI / 180.0f,
+ 150.0f * M_PI / 180.0f
+};
+
+const float* ChannelMapperReader::CHANNEL_ANGLES[] =
+{
+ ChannelMapperReader::MONO_ANGLES,
+ ChannelMapperReader::STEREO_ANGLES,
+ ChannelMapperReader::STEREO_LFE_ANGLES,
+ ChannelMapperReader::SURROUND4_ANGLES,
+ ChannelMapperReader::SURROUND5_ANGLES,
+ ChannelMapperReader::SURROUND51_ANGLES,
+ ChannelMapperReader::SURROUND61_ANGLES,
+ ChannelMapperReader::SURROUND71_ANGLES
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/respec/Converter.cpp b/extern/audaspace/src/respec/Converter.cpp
new file mode 100644
index 00000000000..f3cca20c741
--- /dev/null
+++ b/extern/audaspace/src/respec/Converter.cpp
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "respec/Converter.h"
+#include "respec/ConverterReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+Converter::Converter(std::shared_ptr<ISound> sound,
+ DeviceSpecs specs) :
+ SpecsChanger(sound, specs)
+{
+}
+
+std::shared_ptr<IReader> Converter::createReader()
+{
+ std::shared_ptr<IReader> reader = getReader();
+
+ if(m_specs.format != FORMAT_FLOAT32)
+ reader = std::shared_ptr<IReader>(new ConverterReader(reader, m_specs));
+
+ return reader;
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/respec/ConverterFunctions.cpp b/extern/audaspace/src/respec/ConverterFunctions.cpp
new file mode 100644
index 00000000000..d3df4a9ecbb
--- /dev/null
+++ b/extern/audaspace/src/respec/ConverterFunctions.cpp
@@ -0,0 +1,464 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "respec/ConverterFunctions.h"
+
+#include <stdint.h>
+
+#define U8_0 0x80
+#define S16_MAX ((int16_t)0x7FFF)
+#define S16_MIN ((int16_t)0x8000)
+#define S16_FLT 32767.0f
+#define S32_MAX ((int32_t)0x7FFFFFFF)
+#define S32_MIN ((int32_t)0x80000000)
+#define S32_FLT 2147483647.0f
+#define FLT_MAX 1.0f
+#define FLT_MIN -1.0f
+
+AUD_NAMESPACE_BEGIN
+
+void convert_u8_s16(data_t* target, data_t* source, int length)
+{
+ int16_t* t = (int16_t*) target;
+ for(int i = length - 1; i >= 0; i--)
+ t[i] = (((int16_t)source[i]) - U8_0) << 8;
+}
+
+void convert_u8_s24_be(data_t* target, data_t* source, int length)
+{
+ for(int i = length - 1; i >= 0; i--)
+ {
+ target[i*3] = source[i] - U8_0;
+ target[i*3+1] = 0;
+ target[i*3+2] = 0;
+ }
+}
+
+void convert_u8_s24_le(data_t* target, data_t* source, int length)
+{
+ for(int i = length - 1; i >= 0; i--)
+ {
+ target[i*3+2] = source[i] - U8_0;
+ target[i*3+1] = 0;
+ target[i*3] = 0;
+ }
+}
+
+void convert_u8_s32(data_t* target, data_t* source, int length)
+{
+ int32_t* t = (int32_t*) target;
+ for(int i = length - 1; i >= 0; i--)
+ t[i] = (((int32_t)source[i]) - U8_0) << 24;
+}
+
+void convert_u8_float(data_t* target, data_t* source, int length)
+{
+ float* t = (float*) target;
+ for(int i = length - 1; i >= 0; i--)
+ t[i] = (((int32_t)source[i]) - U8_0) / ((float)U8_0);
+}
+
+void convert_u8_double(data_t* target, data_t* source, int length)
+{
+ double* t = (double*) target;
+ for(int i = length - 1; i >= 0; i--)
+ t[i] = (((int32_t)source[i]) - U8_0) / ((double)U8_0);
+}
+
+void convert_s16_u8(data_t* target, data_t* source, int length)
+{
+ int16_t* s = (int16_t*) source;
+ for(int i = 0; i < length; i++)
+ target[i] = (unsigned char)((s[i] >> 8) + U8_0);
+}
+
+void convert_s16_s24_be(data_t* target, data_t* source, int length)
+{
+ int16_t* s = (int16_t*) source;
+ int16_t t;
+ for(int i = length - 1; i >= 0; i--)
+ {
+ t = s[i];
+ target[i*3] = t >> 8 & 0xFF;
+ target[i*3+1] = t & 0xFF;
+ target[i*3+2] = 0;
+ }
+}
+
+void convert_s16_s24_le(data_t* target, data_t* source, int length)
+{
+ int16_t* s = (int16_t*) source;
+ int16_t t;
+ for(int i = length - 1; i >= 0; i--)
+ {
+ t = s[i];
+ target[i*3+2] = t >> 8 & 0xFF;
+ target[i*3+1] = t & 0xFF;
+ target[i*3] = 0;
+ }
+}
+
+void convert_s16_s32(data_t* target, data_t* source, int length)
+{
+ int16_t* s = (int16_t*) source;
+ int32_t* t = (int32_t*) target;
+ for(int i = length - 1; i >= 0; i--)
+ t[i] = ((int32_t)s[i]) << 16;
+}
+
+void convert_s16_float(data_t* target, data_t* source, int length)
+{
+ int16_t* s = (int16_t*) source;
+ float* t = (float*) target;
+ for(int i = length - 1; i >= 0; i--)
+ t[i] = s[i] / S16_FLT;
+}
+
+void convert_s16_double(data_t* target, data_t* source, int length)
+{
+ int16_t* s = (int16_t*) source;
+ double* t = (double*) target;
+ for(int i = length - 1; i >= 0; i--)
+ t[i] = s[i] / S16_FLT;
+}
+
+void convert_s24_u8_be(data_t* target, data_t* source, int length)
+{
+ for(int i = 0; i < length; i++)
+ target[i] = source[i*3] ^ U8_0;
+}
+
+void convert_s24_u8_le(data_t* target, data_t* source, int length)
+{
+ for(int i = 0; i < length; i++)
+ target[i] = source[i*3+2] ^ U8_0;
+}
+
+void convert_s24_s16_be(data_t* target, data_t* source, int length)
+{
+ int16_t* t = (int16_t*) target;
+ for(int i = 0; i < length; i++)
+ t[i] = source[i*3] << 8 | source[i*3+1];
+}
+
+void convert_s24_s16_le(data_t* target, data_t* source, int length)
+{
+ int16_t* t = (int16_t*) target;
+ for(int i = 0; i < length; i++)
+ t[i] = source[i*3+2] << 8 | source[i*3+1];
+}
+
+void convert_s24_s24(data_t* target, data_t* source, int length)
+{
+ std::memcpy(target, source, length * 3);
+}
+
+void convert_s24_s32_be(data_t* target, data_t* source, int length)
+{
+ int32_t* t = (int32_t*) target;
+ for(int i = length - 1; i >= 0; i--)
+ t[i] = source[i*3] << 24 | source[i*3+1] << 16 | source[i*3+2] << 8;
+}
+
+void convert_s24_s32_le(data_t* target, data_t* source, int length)
+{
+ int32_t* t = (int32_t*) target;
+ for(int i = length - 1; i >= 0; i--)
+ t[i] = source[i*3+2] << 24 | source[i*3+1] << 16 | source[i*3] << 8;
+}
+
+void convert_s24_float_be(data_t* target, data_t* source, int length)
+{
+ float* t = (float*) target;
+ int32_t s;
+ for(int i = length - 1; i >= 0; i--)
+ {
+ s = source[i*3] << 24 | source[i*3+1] << 16 | source[i*3+2] << 8;
+ t[i] = s / S32_FLT;
+ }
+}
+
+void convert_s24_float_le(data_t* target, data_t* source, int length)
+{
+ float* t = (float*) target;
+ int32_t s;
+ for(int i = length - 1; i >= 0; i--)
+ {
+ s = source[i*3+2] << 24 | source[i*3+1] << 16 | source[i*3] << 8;
+ t[i] = s / S32_FLT;
+ }
+}
+
+void convert_s24_double_be(data_t* target, data_t* source, int length)
+{
+ double* t = (double*) target;
+ int32_t s;
+ for(int i = length - 1; i >= 0; i--)
+ {
+ s = source[i*3] << 24 | source[i*3+1] << 16 | source[i*3+2] << 8;
+ t[i] = s / S32_FLT;
+ }
+}
+
+void convert_s24_double_le(data_t* target, data_t* source, int length)
+{
+ double* t = (double*) target;
+ int32_t s;
+ for(int i = length - 1; i >= 0; i--)
+ {
+ s = source[i*3+2] << 24 | source[i*3+1] << 16 | source[i*3] << 8;
+ t[i] = s / S32_FLT;
+ }
+}
+
+void convert_s32_u8(data_t* target, data_t* source, int length)
+{
+ int16_t* s = (int16_t*) source;
+ for(int i = 0; i < length; i++)
+ target[i] = (unsigned char)((s[i] >> 24) + U8_0);
+}
+
+void convert_s32_s16(data_t* target, data_t* source, int length)
+{
+ int16_t* t = (int16_t*) target;
+ int32_t* s = (int32_t*) source;
+ for(int i = 0; i < length; i++)
+ t[i] = s[i] >> 16;
+}
+
+void convert_s32_s24_be(data_t* target, data_t* source, int length)
+{
+ int32_t* s = (int32_t*) source;
+ int32_t t;
+ for(int i = 0; i < length; i++)
+ {
+ t = s[i];
+ target[i*3] = t >> 24 & 0xFF;
+ target[i*3+1] = t >> 16 & 0xFF;
+ target[i*3+2] = t >> 8 & 0xFF;
+ }
+}
+
+void convert_s32_s24_le(data_t* target, data_t* source, int length)
+{
+ int32_t* s = (int32_t*) source;
+ int32_t t;
+ for(int i = 0; i < length; i++)
+ {
+ t = s[i];
+ target[i*3+2] = t >> 24 & 0xFF;
+ target[i*3+1] = t >> 16 & 0xFF;
+ target[i*3] = t >> 8 & 0xFF;
+ }
+}
+
+void convert_s32_float(data_t* target, data_t* source, int length)
+{
+ int32_t* s = (int32_t*) source;
+ float* t = (float*) target;
+ for(int i = 0; i < length; i++)
+ t[i] = s[i] / S32_FLT;
+}
+
+void convert_s32_double(data_t* target, data_t* source, int length)
+{
+ int32_t* s = (int32_t*) source;
+ double* t = (double*) target;
+ for(int i = length - 1; i >= 0; i--)
+ t[i] = s[i] / S32_FLT;
+}
+
+void convert_float_u8(data_t* target, data_t* source, int length)
+{
+ float* s = (float*) source;
+ float t;
+ for(int i = 0; i < length; i++)
+ {
+ t = s[i] + FLT_MAX;
+ if(t <= 0.0f)
+ target[i] = 0;
+ else if(t >= 2.0f)
+ target[i] = 255;
+ else
+ target[i] = (unsigned char)(t*127);
+ }
+}
+
+void convert_float_s16(data_t* target, data_t* source, int length)
+{
+ int16_t* t = (int16_t*) target;
+ float* s = (float*) source;
+ for(int i = 0; i < length; i++)
+ {
+ if(s[i] <= FLT_MIN)
+ t[i] = S16_MIN;
+ else if(s[i] >= FLT_MAX)
+ t[i] = S16_MAX;
+ else
+ t[i] = (int16_t)(s[i] * S16_MAX);
+ }
+}
+
+void convert_float_s24_be(data_t* target, data_t* source, int length)
+{
+ int32_t t;
+ float* s = (float*) source;
+ for(int i = 0; i < length; i++)
+ {
+ if(s[i] <= FLT_MIN)
+ t = S32_MIN;
+ else if(s[i] >= FLT_MAX)
+ t = S32_MAX;
+ else
+ t = (int32_t)(s[i]*S32_MAX);
+ target[i*3] = t >> 24 & 0xFF;
+ target[i*3+1] = t >> 16 & 0xFF;
+ target[i*3+2] = t >> 8 & 0xFF;
+ }
+}
+
+void convert_float_s24_le(data_t* target, data_t* source, int length)
+{
+ int32_t t;
+ float* s = (float*) source;
+ for(int i = 0; i < length; i++)
+ {
+ if(s[i] <= FLT_MIN)
+ t = S32_MIN;
+ else if(s[i] >= FLT_MAX)
+ t = S32_MAX;
+ else
+ t = (int32_t)(s[i]*S32_MAX);
+ target[i*3+2] = t >> 24 & 0xFF;
+ target[i*3+1] = t >> 16 & 0xFF;
+ target[i*3] = t >> 8 & 0xFF;
+ }
+}
+
+void convert_float_s32(data_t* target, data_t* source, int length)
+{
+ int32_t* t = (int32_t*) target;
+ float* s = (float*) source;
+ for(int i = 0; i < length; i++)
+ {
+ if(s[i] <= FLT_MIN)
+ t[i] = S32_MIN;
+ else if(s[i] >= FLT_MAX)
+ t[i] = S32_MAX;
+ else
+ t[i] = (int32_t)(s[i]*S32_MAX);
+ }
+}
+
+void convert_float_double(data_t* target, data_t* source, int length)
+{
+ float* s = (float*) source;
+ double* t = (double*) target;
+ for(int i = length - 1; i >= 0; i--)
+ t[i] = s[i];
+}
+
+void convert_double_u8(data_t* target, data_t* source, int length)
+{
+ double* s = (double*) source;
+ double t;
+ for(int i = 0; i < length; i++)
+ {
+ t = s[i] + FLT_MAX;
+ if(t <= 0.0)
+ target[i] = 0;
+ else if(t >= 2.0)
+ target[i] = 255;
+ else
+ target[i] = (unsigned char)(t*127);
+ }
+}
+
+void convert_double_s16(data_t* target, data_t* source, int length)
+{
+ int16_t* t = (int16_t*) target;
+ double* s = (double*) source;
+ for(int i = 0; i < length; i++)
+ {
+ if(s[i] <= FLT_MIN)
+ t[i] = S16_MIN;
+ else if(s[i] >= FLT_MAX)
+ t[i] = S16_MAX;
+ else
+ t[i] = (int16_t)(s[i]*S16_MAX);
+ }
+}
+
+void convert_double_s24_be(data_t* target, data_t* source, int length)
+{
+ int32_t t;
+ double* s = (double*) source;
+ for(int i = 0; i < length; i++)
+ {
+ if(s[i] <= FLT_MIN)
+ t = S32_MIN;
+ else if(s[i] >= FLT_MAX)
+ t = S32_MAX;
+ else
+ t = (int32_t)(s[i]*S32_MAX);
+ target[i*3] = t >> 24 & 0xFF;
+ target[i*3+1] = t >> 16 & 0xFF;
+ target[i*3+2] = t >> 8 & 0xFF;
+ }
+}
+
+void convert_double_s24_le(data_t* target, data_t* source, int length)
+{
+ int32_t t;
+ double* s = (double*) source;
+ for(int i = 0; i < length; i++)
+ {
+ if(s[i] <= FLT_MIN)
+ t = S32_MIN;
+ else if(s[i] >= FLT_MAX)
+ t = S32_MAX;
+ else
+ t = (int32_t)(s[i]*S32_MAX);
+ target[i*3+2] = t >> 24 & 0xFF;
+ target[i*3+1] = t >> 16 & 0xFF;
+ target[i*3] = t >> 8 & 0xFF;
+ }
+}
+
+void convert_double_s32(data_t* target, data_t* source, int length)
+{
+ int32_t* t = (int32_t*) target;
+ double* s = (double*) source;
+ for(int i = 0; i < length; i++)
+ {
+ if(s[i] <= FLT_MIN)
+ t[i] = S32_MIN;
+ else if(s[i] >= FLT_MAX)
+ t[i] = S32_MAX;
+ else
+ t[i] = (int32_t)(s[i]*S32_MAX);
+ }
+}
+
+void convert_double_float(data_t* target, data_t* source, int length)
+{
+ double* s = (double*) source;
+ float* t = (float*) target;
+ for(int i = 0; i < length; i++)
+ t[i] = s[i];
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/respec/ConverterReader.cpp b/extern/audaspace/src/respec/ConverterReader.cpp
new file mode 100644
index 00000000000..88a5e7f225d
--- /dev/null
+++ b/extern/audaspace/src/respec/ConverterReader.cpp
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "respec/ConverterReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+ConverterReader::ConverterReader(std::shared_ptr<IReader> reader,
+ DeviceSpecs specs) :
+ EffectReader(reader),
+ m_format(specs.format)
+{
+ switch(m_format)
+ {
+ case FORMAT_U8:
+ m_convert = convert_float_u8;
+ break;
+ case FORMAT_S16:
+ m_convert = convert_float_s16;
+ break;
+ case FORMAT_S24:
+#ifdef __BIG_ENDIAN__
+ m_convert = convert_float_s24_be;
+#else
+ m_convert = convert_float_s24_le;
+#endif
+ break;
+ case FORMAT_S32:
+ m_convert = convert_float_s32;
+ break;
+ case FORMAT_FLOAT32:
+ m_convert = convert_copy<float>;
+ break;
+ case FORMAT_FLOAT64:
+ m_convert = convert_float_double;
+ break;
+ default:
+ break;
+ }
+}
+
+void ConverterReader::read(int& length, bool& eos, sample_t* buffer)
+{
+ Specs specs = m_reader->getSpecs();
+ int samplesize = AUD_SAMPLE_SIZE(specs);
+
+ m_buffer.assureSize(length * samplesize);
+
+ m_reader->read(length, eos, m_buffer.getBuffer());
+
+ m_convert((data_t*)buffer, (data_t*)m_buffer.getBuffer(),
+ length * specs.channels);
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/respec/JOSResample.cpp b/extern/audaspace/src/respec/JOSResample.cpp
new file mode 100644
index 00000000000..fae116d057a
--- /dev/null
+++ b/extern/audaspace/src/respec/JOSResample.cpp
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "respec/JOSResample.h"
+#include "respec/JOSResampleReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+JOSResample::JOSResample(std::shared_ptr<ISound> sound,
+ DeviceSpecs specs) :
+ SpecsChanger(sound, specs)
+{
+}
+
+std::shared_ptr<IReader> JOSResample::createReader()
+{
+ return std::shared_ptr<IReader>(new JOSResampleReader(getReader(), m_specs.rate));
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/respec/JOSResampleReader.cpp b/extern/audaspace/src/respec/JOSResampleReader.cpp
new file mode 100644
index 00000000000..6753a2e8b6b
--- /dev/null
+++ b/extern/audaspace/src/respec/JOSResampleReader.cpp
@@ -0,0 +1,383 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "respec/JOSResampleReader.h"
+
+#include <algorithm>
+#include <cmath>
+#include <cstring>
+
+#define RATE_MAX 256
+#define SHIFT_BITS 12
+#define double_to_fp(x) (lrint(x * double(1 << SHIFT_BITS)))
+#define int_to_fp(x) (x << SHIFT_BITS)
+#define fp_to_int(x) (x >> SHIFT_BITS)
+#define fp_to_double(x) (x * 1.0/(1 << SHIFT_BITS))
+#define fp_rest(x) (x & ((1 << SHIFT_BITS) - 1))
+#define fp_rest_to_double(x) fp_to_double(fp_rest(x))
+
+AUD_NAMESPACE_BEGIN
+
+JOSResampleReader::JOSResampleReader(std::shared_ptr<IReader> reader, SampleRate rate) :
+ ResampleReader(reader, rate),
+ m_channels(CHANNELS_INVALID),
+ m_n(0),
+ m_P(0),
+ m_cache_valid(0),
+ m_last_factor(0)
+{
+}
+
+void JOSResampleReader::reset()
+{
+ m_cache_valid = 0;
+ m_n = 0;
+ m_P = 0;
+ m_last_factor = 0;
+}
+
+void JOSResampleReader::updateBuffer(int size, double factor, int samplesize)
+{
+ unsigned int len;
+ double num_samples = double(m_len) / double(m_L);
+ // first calculate what length we need right now
+ if(factor >= 1)
+ len = std::ceil(num_samples);
+ else
+ len = (unsigned int)(std::ceil(num_samples / factor));
+
+ // then check if afterwards the length is enough for the maximum rate
+ if(len + size < num_samples * RATE_MAX)
+ len = num_samples * RATE_MAX - size;
+
+ if(m_n > len)
+ {
+ sample_t* buf = m_buffer.getBuffer();
+ len = m_n - len;
+ std::memmove(buf, buf + len * m_channels, (m_cache_valid - len) * samplesize);
+ m_n -= len;
+ m_cache_valid -= len;
+ }
+
+ m_buffer.assureSize((m_cache_valid + size) * samplesize, true);
+}
+
+#define RESAMPLE_METHOD(name, left, right) void JOSResampleReader::name(double target_factor, int length, sample_t* buffer)\
+{\
+ sample_t* buf = m_buffer.getBuffer();\
+\
+ unsigned int P, l;\
+ int end, channel, i;\
+ double eta, v, f_increment, factor;\
+\
+ m_sums.assureSize(m_channels * sizeof(double));\
+ double* sums = reinterpret_cast<double*>(m_sums.getBuffer());\
+ sample_t* data;\
+ const float* coeff = m_coeff;\
+\
+ unsigned int P_increment;\
+\
+ for(unsigned int t = 0; t < length; t++)\
+ {\
+ factor = (m_last_factor * (length - t - 1) + target_factor * (t + 1)) / length;\
+\
+ std::memset(sums, 0, sizeof(double) * m_channels);\
+\
+ if(factor >= 1)\
+ {\
+ P = double_to_fp(m_P * m_L);\
+\
+ end = std::floor(m_len / double(m_L) - m_P) - 1;\
+ if(m_n < end)\
+ end = m_n;\
+\
+ data = buf + (m_n - end) * m_channels;\
+ l = fp_to_int(P);\
+ eta = fp_rest_to_double(P);\
+ l += m_L * end;\
+\
+ for(i = 0; i <= end; i++)\
+ {\
+ v = coeff[l] + eta * (coeff[l+1] - coeff[l]);\
+ l -= m_L;\
+ left\
+ }\
+\
+ P = int_to_fp(m_L) - P;\
+\
+ end = std::floor((m_len - 1) / double(m_L) + m_P) - 1;\
+ if(m_cache_valid - m_n - 2 < end)\
+ end = m_cache_valid - m_n - 2;\
+\
+ data = buf + (m_n + 2 + end) * m_channels - 1;\
+ l = fp_to_int(P);\
+ eta = fp_rest_to_double(P);\
+ l += m_L * end;\
+\
+ for(i = 0; i <= end; i++)\
+ {\
+ v = coeff[l] + eta * (coeff[l+1] - coeff[l]);\
+ l -= m_L;\
+ right\
+ }\
+\
+ for(channel = 0; channel < m_channels; channel++)\
+ {\
+ *buffer = sums[channel];\
+ buffer++;\
+ }\
+ }\
+ else\
+ {\
+ f_increment = factor * m_L;\
+ P_increment = double_to_fp(f_increment);\
+ P = double_to_fp(m_P * f_increment);\
+\
+ end = (int_to_fp(m_len) - P) / P_increment - 1;\
+ if(m_n < end)\
+ end = m_n;\
+\
+ P += P_increment * end;\
+ data = buf + (m_n - end) * m_channels;\
+ l = fp_to_int(P);\
+\
+ for(i = 0; i <= end; i++)\
+ {\
+ eta = fp_rest_to_double(P);\
+ v = coeff[l] + eta * (coeff[l+1] - coeff[l]);\
+ P -= P_increment;\
+ l = fp_to_int(P);\
+ left\
+ }\
+\
+ P = 0 - P;\
+\
+ end = (int_to_fp(m_len) - P) / P_increment - 1;\
+ if(m_cache_valid - m_n - 2 < end)\
+ end = m_cache_valid - m_n - 2;\
+\
+ P += P_increment * end;\
+ data = buf + (m_n + 2 + end) * m_channels - 1;\
+ l = fp_to_int(P);\
+\
+ for(i = 0; i <= end; i++)\
+ {\
+ eta = fp_rest_to_double(P);\
+ v = coeff[l] + eta * (coeff[l+1] - coeff[l]);\
+ P -= P_increment;\
+ l = fp_to_int(P);\
+ right\
+ }\
+\
+ for(channel = 0; channel < m_channels; channel++)\
+ {\
+ *buffer = factor * sums[channel];\
+ buffer++;\
+ }\
+ }\
+\
+ m_P += std::fmod(1.0 / factor, 1.0);\
+ m_n += std::floor(1.0 / factor);\
+\
+ while(m_P >= 1.0)\
+ {\
+ m_P -= 1.0;\
+ m_n++;\
+ }\
+ }\
+}
+
+RESAMPLE_METHOD(resample, {
+ channel = 0;
+ do
+ {
+ sums[channel] += *data * v;
+ channel++;
+ data++;
+ }
+ while(channel < m_channels);
+}, {
+ channel = m_channels;
+ do
+ {
+ channel--;
+ sums[channel] += *data * v;
+ data--;
+ }
+ while(channel);
+})
+
+RESAMPLE_METHOD(resample_mono, {
+ *sums += *data * v;
+ data++;
+}, {
+ *sums += *data * v;
+ data--;
+})
+
+RESAMPLE_METHOD(resample_stereo, {
+ sums[0] += data[0] * v;
+ sums[1] += data[1] * v;
+ data+=2;
+}, {
+ data-=2;
+ sums[0] += data[1] * v;
+ sums[1] += data[2] * v;
+})
+
+void JOSResampleReader::seek(int position)
+{
+ position = std::floor(position * double(m_reader->getSpecs().rate) / double(m_rate));
+ m_reader->seek(position);
+ reset();
+}
+
+int JOSResampleReader::getLength() const
+{
+ return std::floor(m_reader->getLength() * double(m_rate) / double(m_reader->getSpecs().rate));
+}
+
+int JOSResampleReader::getPosition() const
+{
+ return std::floor((m_reader->getPosition() + double(m_P)) * m_rate / m_reader->getSpecs().rate);
+}
+
+Specs JOSResampleReader::getSpecs() const
+{
+ Specs specs = m_reader->getSpecs();
+ specs.rate = m_rate;
+ return specs;
+}
+
+void JOSResampleReader::read(int& length, bool& eos, sample_t* buffer)
+{
+ if(length == 0)
+ return;
+
+ Specs specs = m_reader->getSpecs();
+
+ int samplesize = AUD_SAMPLE_SIZE(specs);
+ double target_factor = double(m_rate) / double(specs.rate);
+ eos = false;
+ int len;
+ double num_samples = double(m_len) / double(m_L);
+
+ // check for channels changed
+ if(specs.channels != m_channels)
+ {
+ m_channels = specs.channels;
+ reset();
+
+ switch(m_channels)
+ {
+ case CHANNELS_MONO:
+ m_resample = &JOSResampleReader::resample_mono;
+ break;
+ case CHANNELS_STEREO:
+ m_resample = &JOSResampleReader::resample_stereo;
+ break;
+ default:
+ m_resample = &JOSResampleReader::resample;
+ break;
+ }
+ }
+
+ if(m_last_factor == 0)
+ m_last_factor = target_factor;
+
+ if(target_factor == 1 && m_last_factor == 1 && (m_P == 0))
+ {
+ // can read directly!
+
+ len = length - (m_cache_valid - m_n);
+
+ updateBuffer(len, target_factor, samplesize);
+ sample_t* buf = m_buffer.getBuffer();
+
+ m_reader->read(len, eos, buf + m_cache_valid * m_channels);
+ m_cache_valid += len;
+
+ length = m_cache_valid - m_n;
+
+ if(length > 0)
+ {
+ std::memcpy(buffer, buf + m_n * m_channels, length * samplesize);
+ m_n += length;
+ }
+
+ return;
+ }
+
+ // use minimum for the following calculations
+ double factor = std::min(target_factor, m_last_factor);
+
+ if(factor >= 1)
+ len = (int(m_n) - m_cache_valid) + int(std::ceil(length / factor)) + std::ceil(num_samples);
+ else
+ len = (int(m_n) - m_cache_valid) + int(std::ceil(length / factor) + std::ceil(num_samples / factor));
+
+ if(len > 0)
+ {
+ int should = len;
+
+ updateBuffer(len, factor, samplesize);
+
+ m_reader->read(len, eos, m_buffer.getBuffer() + m_cache_valid * m_channels);
+ m_cache_valid += len;
+
+ if(len < should)
+ {
+ if(len == 0 && eos)
+ length = 0;
+ else
+ {
+ // use maximum for the following calculations
+ factor = std::max(target_factor, m_last_factor);
+
+ if(eos)
+ {
+ // end of stream, let's check how many more samples we can produce
+ len = std::floor((m_cache_valid - m_n) * factor);
+ if(len < length)
+ length = len;
+ }
+ else
+ {
+ // not enough data available yet, so we recalculate how many samples we can calculate
+ if(factor >= 1)
+ len = std::floor((num_samples + m_cache_valid - m_n) * factor);
+ else
+ len = std::floor((num_samples * factor + m_cache_valid - m_n) * factor);
+ if(len < length)
+ length = len;
+ }
+ }
+ }
+ }
+
+ (this->*m_resample)(target_factor, length, buffer);
+
+ m_last_factor = target_factor;
+
+ if(m_n > m_cache_valid)
+ {
+ m_n = m_cache_valid;
+ }
+
+ eos = eos && ((m_n == m_cache_valid) || (length == 0));
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/respec/JOSResampleReaderCoeff.cpp b/extern/audaspace/src/respec/JOSResampleReaderCoeff.cpp
new file mode 100644
index 00000000000..133e081f4a7
--- /dev/null
+++ b/extern/audaspace/src/respec/JOSResampleReaderCoeff.cpp
@@ -0,0 +1,32537 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "respec/JOSResampleReader.h"
+
+// sinc filter coefficients, Nz = 136, L = 2304, freq = 0.963904, Kaiser Window B = 16
+
+AUD_NAMESPACE_BEGIN
+
+const int JOSResampleReader::m_len = 325078;
+const int JOSResampleReader::m_L = 2304;
+
+const float JOSResampleReader::m_coeff[] = {
+9.639035268e-01f, 9.639032492e-01f, 9.639024165e-01f, 9.639010286e-01f, 9.638990855e-01f, 9.638965872e-01f, 9.638935338e-01f, 9.638899253e-01f, 9.638857615e-01f, 9.638810427e-01f,
+9.638757686e-01f, 9.638699395e-01f, 9.638635552e-01f, 9.638566158e-01f, 9.638491212e-01f, 9.638410716e-01f, 9.638324668e-01f, 9.638233070e-01f, 9.638135921e-01f, 9.638033220e-01f,
+9.637924970e-01f, 9.637811168e-01f, 9.637691817e-01f, 9.637566915e-01f, 9.637436463e-01f, 9.637300461e-01f, 9.637158908e-01f, 9.637011807e-01f, 9.636859155e-01f, 9.636700955e-01f,
+9.636537204e-01f, 9.636367905e-01f, 9.636193057e-01f, 9.636012660e-01f, 9.635826715e-01f, 9.635635221e-01f, 9.635438179e-01f, 9.635235590e-01f, 9.635027452e-01f, 9.634813767e-01f,
+9.634594535e-01f, 9.634369755e-01f, 9.634139429e-01f, 9.633903556e-01f, 9.633662137e-01f, 9.633415171e-01f, 9.633162660e-01f, 9.632904603e-01f, 9.632641001e-01f, 9.632371854e-01f,
+9.632097162e-01f, 9.631816925e-01f, 9.631531144e-01f, 9.631239820e-01f, 9.630942951e-01f, 9.630640540e-01f, 9.630332585e-01f, 9.630019088e-01f, 9.629700049e-01f, 9.629375467e-01f,
+9.629045344e-01f, 9.628709680e-01f, 9.628368474e-01f, 9.628021728e-01f, 9.627669442e-01f, 9.627311616e-01f, 9.626948250e-01f, 9.626579345e-01f, 9.626204901e-01f, 9.625824919e-01f,
+9.625439399e-01f, 9.625048342e-01f, 9.624651747e-01f, 9.624249615e-01f, 9.623841947e-01f, 9.623428743e-01f, 9.623010004e-01f, 9.622585730e-01f, 9.622155921e-01f, 9.621720577e-01f,
+9.621279700e-01f, 9.620833290e-01f, 9.620381347e-01f, 9.619923872e-01f, 9.619460865e-01f, 9.618992326e-01f, 9.618518256e-01f, 9.618038656e-01f, 9.617553527e-01f, 9.617062867e-01f,
+9.616566679e-01f, 9.616064963e-01f, 9.615557718e-01f, 9.615044946e-01f, 9.614526648e-01f, 9.614002823e-01f, 9.613473472e-01f, 9.612938597e-01f, 9.612398196e-01f, 9.611852272e-01f,
+9.611300824e-01f, 9.610743853e-01f, 9.610181360e-01f, 9.609613345e-01f, 9.609039809e-01f, 9.608460752e-01f, 9.607876175e-01f, 9.607286079e-01f, 9.606690464e-01f, 9.606089331e-01f,
+9.605482681e-01f, 9.604870514e-01f, 9.604252830e-01f, 9.603629631e-01f, 9.603000916e-01f, 9.602366688e-01f, 9.601726945e-01f, 9.601081690e-01f, 9.600430923e-01f, 9.599774643e-01f,
+9.599112853e-01f, 9.598445553e-01f, 9.597772742e-01f, 9.597094423e-01f, 9.596410596e-01f, 9.595721262e-01f, 9.595026420e-01f, 9.594326073e-01f, 9.593620220e-01f, 9.592908862e-01f,
+9.592192001e-01f, 9.591469636e-01f, 9.590741770e-01f, 9.590008401e-01f, 9.589269532e-01f, 9.588525163e-01f, 9.587775294e-01f, 9.587019927e-01f, 9.586259062e-01f, 9.585492700e-01f,
+9.584720842e-01f, 9.583943488e-01f, 9.583160640e-01f, 9.582372298e-01f, 9.581578463e-01f, 9.580779136e-01f, 9.579974318e-01f, 9.579164010e-01f, 9.578348211e-01f, 9.577526924e-01f,
+9.576700149e-01f, 9.575867887e-01f, 9.575030139e-01f, 9.574186906e-01f, 9.573338188e-01f, 9.572483986e-01f, 9.571624302e-01f, 9.570759136e-01f, 9.569888489e-01f, 9.569012362e-01f,
+9.568130756e-01f, 9.567243672e-01f, 9.566351110e-01f, 9.565453072e-01f, 9.564549559e-01f, 9.563640571e-01f, 9.562726110e-01f, 9.561806176e-01f, 9.560880771e-01f, 9.559949895e-01f,
+9.559013549e-01f, 9.558071734e-01f, 9.557124452e-01f, 9.556171703e-01f, 9.555213488e-01f, 9.554249808e-01f, 9.553280665e-01f, 9.552306058e-01f, 9.551325990e-01f, 9.550340461e-01f,
+9.549349473e-01f, 9.548353025e-01f, 9.547351120e-01f, 9.546343759e-01f, 9.545330941e-01f, 9.544312670e-01f, 9.543288944e-01f, 9.542259766e-01f, 9.541225137e-01f, 9.540185058e-01f,
+9.539139529e-01f, 9.538088552e-01f, 9.537032128e-01f, 9.535970258e-01f, 9.534902944e-01f, 9.533830185e-01f, 9.532751984e-01f, 9.531668341e-01f, 9.530579258e-01f, 9.529484736e-01f,
+9.528384775e-01f, 9.527279378e-01f, 9.526168545e-01f, 9.525052276e-01f, 9.523930575e-01f, 9.522803441e-01f, 9.521670875e-01f, 9.520532880e-01f, 9.519389456e-01f, 9.518240604e-01f,
+9.517086326e-01f, 9.515926622e-01f, 9.514761494e-01f, 9.513590944e-01f, 9.512414971e-01f, 9.511233578e-01f, 9.510046766e-01f, 9.508854536e-01f, 9.507656889e-01f, 9.506453827e-01f,
+9.505245350e-01f, 9.504031460e-01f, 9.502812159e-01f, 9.501587447e-01f, 9.500357325e-01f, 9.499121796e-01f, 9.497880860e-01f, 9.496634518e-01f, 9.495382773e-01f, 9.494125624e-01f,
+9.492863074e-01f, 9.491595124e-01f, 9.490321775e-01f, 9.489043028e-01f, 9.487758886e-01f, 9.486469348e-01f, 9.485174416e-01f, 9.483874092e-01f, 9.482568378e-01f, 9.481257273e-01f,
+9.479940781e-01f, 9.478618902e-01f, 9.477291637e-01f, 9.475958988e-01f, 9.474620956e-01f, 9.473277543e-01f, 9.471928750e-01f, 9.470574579e-01f, 9.469215030e-01f, 9.467850106e-01f,
+9.466479807e-01f, 9.465104136e-01f, 9.463723093e-01f, 9.462336679e-01f, 9.460944898e-01f, 9.459547749e-01f, 9.458145234e-01f, 9.456737355e-01f, 9.455324113e-01f, 9.453905510e-01f,
+9.452481547e-01f, 9.451052225e-01f, 9.449617546e-01f, 9.448177513e-01f, 9.446732125e-01f, 9.445281384e-01f, 9.443825293e-01f, 9.442363852e-01f, 9.440897063e-01f, 9.439424928e-01f,
+9.437947447e-01f, 9.436464624e-01f, 9.434976458e-01f, 9.433482953e-01f, 9.431984108e-01f, 9.430479926e-01f, 9.428970409e-01f, 9.427455557e-01f, 9.425935373e-01f, 9.424409858e-01f,
+9.422879014e-01f, 9.421342841e-01f, 9.419801343e-01f, 9.418254520e-01f, 9.416702374e-01f, 9.415144906e-01f, 9.413582119e-01f, 9.412014013e-01f, 9.410440591e-01f, 9.408861854e-01f,
+9.407277804e-01f, 9.405688442e-01f, 9.404093770e-01f, 9.402493790e-01f, 9.400888502e-01f, 9.399277910e-01f, 9.397662015e-01f, 9.396040817e-01f, 9.394414320e-01f, 9.392782524e-01f,
+9.391145432e-01f, 9.389503045e-01f, 9.387855364e-01f, 9.386202392e-01f, 9.384544130e-01f, 9.382880579e-01f, 9.381211743e-01f, 9.379537621e-01f, 9.377858217e-01f, 9.376173531e-01f,
+9.374483566e-01f, 9.372788323e-01f, 9.371087804e-01f, 9.369382011e-01f, 9.367670945e-01f, 9.365954609e-01f, 9.364233003e-01f, 9.362506131e-01f, 9.360773993e-01f, 9.359036592e-01f,
+9.357293928e-01f, 9.355546005e-01f, 9.353792824e-01f, 9.352034386e-01f, 9.350270693e-01f, 9.348501748e-01f, 9.346727552e-01f, 9.344948107e-01f, 9.343163415e-01f, 9.341373477e-01f,
+9.339578296e-01f, 9.337777873e-01f, 9.335972210e-01f, 9.334161310e-01f, 9.332345173e-01f, 9.330523802e-01f, 9.328697199e-01f, 9.326865365e-01f, 9.325028302e-01f, 9.323186014e-01f,
+9.321338500e-01f, 9.319485763e-01f, 9.317627806e-01f, 9.315764629e-01f, 9.313896236e-01f, 9.312022627e-01f, 9.310143805e-01f, 9.308259772e-01f, 9.306370529e-01f, 9.304476080e-01f,
+9.302576424e-01f, 9.300671565e-01f, 9.298761505e-01f, 9.296846245e-01f, 9.294925788e-01f, 9.293000135e-01f, 9.291069289e-01f, 9.289133251e-01f, 9.287192023e-01f, 9.285245608e-01f,
+9.283294007e-01f, 9.281337223e-01f, 9.279375257e-01f, 9.277408112e-01f, 9.275435789e-01f, 9.273458291e-01f, 9.271475619e-01f, 9.269487776e-01f, 9.267494764e-01f, 9.265496585e-01f,
+9.263493240e-01f, 9.261484732e-01f, 9.259471064e-01f, 9.257452236e-01f, 9.255428251e-01f, 9.253399112e-01f, 9.251364820e-01f, 9.249325378e-01f, 9.247280787e-01f, 9.245231049e-01f,
+9.243176167e-01f, 9.241116144e-01f, 9.239050980e-01f, 9.236980678e-01f, 9.234905241e-01f, 9.232824670e-01f, 9.230738967e-01f, 9.228648135e-01f, 9.226552177e-01f, 9.224451093e-01f,
+9.222344886e-01f, 9.220233559e-01f, 9.218117113e-01f, 9.215995551e-01f, 9.213868875e-01f, 9.211737087e-01f, 9.209600189e-01f, 9.207458184e-01f, 9.205311074e-01f, 9.203158860e-01f,
+9.201001546e-01f, 9.198839133e-01f, 9.196671624e-01f, 9.194499020e-01f, 9.192321325e-01f, 9.190138540e-01f, 9.187950667e-01f, 9.185757710e-01f, 9.183559669e-01f, 9.181356548e-01f,
+9.179148349e-01f, 9.176935073e-01f, 9.174716724e-01f, 9.172493303e-01f, 9.170264813e-01f, 9.168031256e-01f, 9.165792634e-01f, 9.163548950e-01f, 9.161300207e-01f, 9.159046405e-01f,
+9.156787548e-01f, 9.154523638e-01f, 9.152254678e-01f, 9.149980669e-01f, 9.147701614e-01f, 9.145417515e-01f, 9.143128376e-01f, 9.140834197e-01f, 9.138534981e-01f, 9.136230732e-01f,
+9.133921450e-01f, 9.131607140e-01f, 9.129287802e-01f, 9.126963439e-01f, 9.124634054e-01f, 9.122299649e-01f, 9.119960227e-01f, 9.117615790e-01f, 9.115266340e-01f, 9.112911880e-01f,
+9.110552412e-01f, 9.108187939e-01f, 9.105818463e-01f, 9.103443986e-01f, 9.101064511e-01f, 9.098680041e-01f, 9.096290577e-01f, 9.093896123e-01f, 9.091496681e-01f, 9.089092253e-01f,
+9.086682841e-01f, 9.084268449e-01f, 9.081849079e-01f, 9.079424733e-01f, 9.076995413e-01f, 9.074561123e-01f, 9.072121864e-01f, 9.069677640e-01f, 9.067228453e-01f, 9.064774304e-01f,
+9.062315198e-01f, 9.059851135e-01f, 9.057382120e-01f, 9.054908154e-01f, 9.052429240e-01f, 9.049945380e-01f, 9.047456578e-01f, 9.044962835e-01f, 9.042464154e-01f, 9.039960539e-01f,
+9.037451990e-01f, 9.034938511e-01f, 9.032420105e-01f, 9.029896774e-01f, 9.027368521e-01f, 9.024835348e-01f, 9.022297258e-01f, 9.019754253e-01f, 9.017206336e-01f, 9.014653511e-01f,
+9.012095778e-01f, 9.009533142e-01f, 9.006965604e-01f, 9.004393168e-01f, 9.001815836e-01f, 8.999233610e-01f, 8.996646493e-01f, 8.994054488e-01f, 8.991457598e-01f, 8.988855825e-01f,
+8.986249173e-01f, 8.983637642e-01f, 8.981021237e-01f, 8.978399960e-01f, 8.975773814e-01f, 8.973142801e-01f, 8.970506924e-01f, 8.967866186e-01f, 8.965220589e-01f, 8.962570137e-01f,
+8.959914832e-01f, 8.957254676e-01f, 8.954589673e-01f, 8.951919825e-01f, 8.949245135e-01f, 8.946565605e-01f, 8.943881239e-01f, 8.941192039e-01f, 8.938498008e-01f, 8.935799149e-01f,
+8.933095464e-01f, 8.930386957e-01f, 8.927673629e-01f, 8.924955485e-01f, 8.922232526e-01f, 8.919504756e-01f, 8.916772176e-01f, 8.914034791e-01f, 8.911292603e-01f, 8.908545614e-01f,
+8.905793828e-01f, 8.903037247e-01f, 8.900275875e-01f, 8.897509713e-01f, 8.894738765e-01f, 8.891963034e-01f, 8.889182522e-01f, 8.886397233e-01f, 8.883607169e-01f, 8.880812334e-01f,
+8.878012729e-01f, 8.875208358e-01f, 8.872399224e-01f, 8.869585329e-01f, 8.866766677e-01f, 8.863943271e-01f, 8.861115112e-01f, 8.858282205e-01f, 8.855444553e-01f, 8.852602157e-01f,
+8.849755021e-01f, 8.846903148e-01f, 8.844046541e-01f, 8.841185202e-01f, 8.838319136e-01f, 8.835448344e-01f, 8.832572829e-01f, 8.829692595e-01f, 8.826807645e-01f, 8.823917981e-01f,
+8.821023607e-01f, 8.818124525e-01f, 8.815220738e-01f, 8.812312249e-01f, 8.809399062e-01f, 8.806481180e-01f, 8.803558604e-01f, 8.800631339e-01f, 8.797699387e-01f, 8.794762752e-01f,
+8.791821436e-01f, 8.788875442e-01f, 8.785924774e-01f, 8.782969434e-01f, 8.780009425e-01f, 8.777044751e-01f, 8.774075415e-01f, 8.771101419e-01f, 8.768122767e-01f, 8.765139461e-01f,
+8.762151505e-01f, 8.759158902e-01f, 8.756161655e-01f, 8.753159767e-01f, 8.750153240e-01f, 8.747142079e-01f, 8.744126286e-01f, 8.741105865e-01f, 8.738080818e-01f, 8.735051148e-01f,
+8.732016859e-01f, 8.728977953e-01f, 8.725934435e-01f, 8.722886306e-01f, 8.719833570e-01f, 8.716776231e-01f, 8.713714291e-01f, 8.710647753e-01f, 8.707576621e-01f, 8.704500898e-01f,
+8.701420586e-01f, 8.698335690e-01f, 8.695246212e-01f, 8.692152155e-01f, 8.689053523e-01f, 8.685950319e-01f, 8.682842545e-01f, 8.679730206e-01f, 8.676613304e-01f, 8.673491842e-01f,
+8.670365825e-01f, 8.667235254e-01f, 8.664100133e-01f, 8.660960465e-01f, 8.657816254e-01f, 8.654667503e-01f, 8.651514214e-01f, 8.648356392e-01f, 8.645194039e-01f, 8.642027159e-01f,
+8.638855755e-01f, 8.635679830e-01f, 8.632499387e-01f, 8.629314431e-01f, 8.626124962e-01f, 8.622930987e-01f, 8.619732506e-01f, 8.616529525e-01f, 8.613322045e-01f, 8.610110071e-01f,
+8.606893605e-01f, 8.603672651e-01f, 8.600447213e-01f, 8.597217293e-01f, 8.593982894e-01f, 8.590744021e-01f, 8.587500676e-01f, 8.584252863e-01f, 8.581000585e-01f, 8.577743845e-01f,
+8.574482647e-01f, 8.571216994e-01f, 8.567946889e-01f, 8.564672336e-01f, 8.561393339e-01f, 8.558109899e-01f, 8.554822022e-01f, 8.551529709e-01f, 8.548232966e-01f, 8.544931794e-01f,
+8.541626197e-01f, 8.538316179e-01f, 8.535001743e-01f, 8.531682892e-01f, 8.528359631e-01f, 8.525031961e-01f, 8.521699887e-01f, 8.518363412e-01f, 8.515022540e-01f, 8.511677273e-01f,
+8.508327616e-01f, 8.504973571e-01f, 8.501615143e-01f, 8.498252334e-01f, 8.494885148e-01f, 8.491513588e-01f, 8.488137659e-01f, 8.484757362e-01f, 8.481372703e-01f, 8.477983683e-01f,
+8.474590308e-01f, 8.471192579e-01f, 8.467790502e-01f, 8.464384078e-01f, 8.460973312e-01f, 8.457558207e-01f, 8.454138767e-01f, 8.450714994e-01f, 8.447286893e-01f, 8.443854468e-01f,
+8.440417721e-01f, 8.436976656e-01f, 8.433531276e-01f, 8.430081586e-01f, 8.426627588e-01f, 8.423169286e-01f, 8.419706685e-01f, 8.416239786e-01f, 8.412768594e-01f, 8.409293112e-01f,
+8.405813345e-01f, 8.402329294e-01f, 8.398840965e-01f, 8.395348360e-01f, 8.391851483e-01f, 8.388350338e-01f, 8.384844928e-01f, 8.381335257e-01f, 8.377821328e-01f, 8.374303146e-01f,
+8.370780713e-01f, 8.367254032e-01f, 8.363723109e-01f, 8.360187946e-01f, 8.356648547e-01f, 8.353104916e-01f, 8.349557056e-01f, 8.346004970e-01f, 8.342448663e-01f, 8.338888138e-01f,
+8.335323399e-01f, 8.331754449e-01f, 8.328181292e-01f, 8.324603932e-01f, 8.321022372e-01f, 8.317436615e-01f, 8.313846667e-01f, 8.310252529e-01f, 8.306654207e-01f, 8.303051703e-01f,
+8.299445021e-01f, 8.295834165e-01f, 8.292219138e-01f, 8.288599945e-01f, 8.284976589e-01f, 8.281349074e-01f, 8.277717402e-01f, 8.274081579e-01f, 8.270441608e-01f, 8.266797492e-01f,
+8.263149235e-01f, 8.259496841e-01f, 8.255840313e-01f, 8.252179656e-01f, 8.248514873e-01f, 8.244845968e-01f, 8.241172944e-01f, 8.237495806e-01f, 8.233814556e-01f, 8.230129199e-01f,
+8.226439739e-01f, 8.222746179e-01f, 8.219048523e-01f, 8.215346775e-01f, 8.211640938e-01f, 8.207931017e-01f, 8.204217015e-01f, 8.200498935e-01f, 8.196776783e-01f, 8.193050560e-01f,
+8.189320272e-01f, 8.185585922e-01f, 8.181847514e-01f, 8.178105051e-01f, 8.174358538e-01f, 8.170607978e-01f, 8.166853376e-01f, 8.163094734e-01f, 8.159332057e-01f, 8.155565348e-01f,
+8.151794612e-01f, 8.148019852e-01f, 8.144241072e-01f, 8.140458276e-01f, 8.136671467e-01f, 8.132880650e-01f, 8.129085829e-01f, 8.125287007e-01f, 8.121484188e-01f, 8.117677376e-01f,
+8.113866575e-01f, 8.110051789e-01f, 8.106233021e-01f, 8.102410276e-01f, 8.098583558e-01f, 8.094752869e-01f, 8.090918215e-01f, 8.087079599e-01f, 8.083237025e-01f, 8.079390497e-01f,
+8.075540018e-01f, 8.071685594e-01f, 8.067827227e-01f, 8.063964921e-01f, 8.060098681e-01f, 8.056228510e-01f, 8.052354413e-01f, 8.048476393e-01f, 8.044594454e-01f, 8.040708600e-01f,
+8.036818836e-01f, 8.032925164e-01f, 8.029027589e-01f, 8.025126116e-01f, 8.021220747e-01f, 8.017311487e-01f, 8.013398340e-01f, 8.009481310e-01f, 8.005560400e-01f, 8.001635615e-01f,
+7.997706959e-01f, 7.993774436e-01f, 7.989838049e-01f, 7.985897804e-01f, 7.981953702e-01f, 7.978005750e-01f, 7.974053950e-01f, 7.970098307e-01f, 7.966138825e-01f, 7.962175508e-01f,
+7.958208359e-01f, 7.954237383e-01f, 7.950262584e-01f, 7.946283966e-01f, 7.942301532e-01f, 7.938315288e-01f, 7.934325236e-01f, 7.930331382e-01f, 7.926333728e-01f, 7.922332280e-01f,
+7.918327041e-01f, 7.914318015e-01f, 7.910305206e-01f, 7.906288619e-01f, 7.902268257e-01f, 7.898244125e-01f, 7.894216226e-01f, 7.890184565e-01f, 7.886149145e-01f, 7.882109972e-01f,
+7.878067048e-01f, 7.874020378e-01f, 7.869969967e-01f, 7.865915818e-01f, 7.861857935e-01f, 7.857796322e-01f, 7.853730984e-01f, 7.849661925e-01f, 7.845589148e-01f, 7.841512658e-01f,
+7.837432459e-01f, 7.833348556e-01f, 7.829260952e-01f, 7.825169651e-01f, 7.821074658e-01f, 7.816975976e-01f, 7.812873610e-01f, 7.808767565e-01f, 7.804657843e-01f, 7.800544450e-01f,
+7.796427389e-01f, 7.792306665e-01f, 7.788182282e-01f, 7.784054244e-01f, 7.779922554e-01f, 7.775787219e-01f, 7.771648240e-01f, 7.767505624e-01f, 7.763359373e-01f, 7.759209493e-01f,
+7.755055986e-01f, 7.750898858e-01f, 7.746738113e-01f, 7.742573755e-01f, 7.738405788e-01f, 7.734234216e-01f, 7.730059044e-01f, 7.725880275e-01f, 7.721697915e-01f, 7.717511966e-01f,
+7.713322434e-01f, 7.709129323e-01f, 7.704932637e-01f, 7.700732379e-01f, 7.696528555e-01f, 7.692321169e-01f, 7.688110225e-01f, 7.683895726e-01f, 7.679677678e-01f, 7.675456085e-01f,
+7.671230951e-01f, 7.667002279e-01f, 7.662770076e-01f, 7.658534344e-01f, 7.654295087e-01f, 7.650052312e-01f, 7.645806020e-01f, 7.641556218e-01f, 7.637302908e-01f, 7.633046096e-01f,
+7.628785786e-01f, 7.624521982e-01f, 7.620254688e-01f, 7.615983909e-01f, 7.611709648e-01f, 7.607431911e-01f, 7.603150701e-01f, 7.598866024e-01f, 7.594577882e-01f, 7.590286281e-01f,
+7.585991225e-01f, 7.581692718e-01f, 7.577390764e-01f, 7.573085368e-01f, 7.568776535e-01f, 7.564464267e-01f, 7.560148571e-01f, 7.555829450e-01f, 7.551506909e-01f, 7.547180951e-01f,
+7.542851582e-01f, 7.538518805e-01f, 7.534182626e-01f, 7.529843047e-01f, 7.525500075e-01f, 7.521153713e-01f, 7.516803965e-01f, 7.512450836e-01f, 7.508094330e-01f, 7.503734452e-01f,
+7.499371206e-01f, 7.495004596e-01f, 7.490634628e-01f, 7.486261304e-01f, 7.481884630e-01f, 7.477504610e-01f, 7.473121249e-01f, 7.468734550e-01f, 7.464344519e-01f, 7.459951159e-01f,
+7.455554476e-01f, 7.451154473e-01f, 7.446751155e-01f, 7.442344526e-01f, 7.437934591e-01f, 7.433521355e-01f, 7.429104821e-01f, 7.424684994e-01f, 7.420261879e-01f, 7.415835480e-01f,
+7.411405801e-01f, 7.406972848e-01f, 7.402536623e-01f, 7.398097133e-01f, 7.393654381e-01f, 7.389208372e-01f, 7.384759109e-01f, 7.380306599e-01f, 7.375850845e-01f, 7.371391851e-01f,
+7.366929623e-01f, 7.362464164e-01f, 7.357995480e-01f, 7.353523574e-01f, 7.349048451e-01f, 7.344570115e-01f, 7.340088572e-01f, 7.335603826e-01f, 7.331115880e-01f, 7.326624740e-01f,
+7.322130410e-01f, 7.317632895e-01f, 7.313132199e-01f, 7.308628327e-01f, 7.304121282e-01f, 7.299611071e-01f, 7.295097696e-01f, 7.290581164e-01f, 7.286061478e-01f, 7.281538642e-01f,
+7.277012662e-01f, 7.272483542e-01f, 7.267951286e-01f, 7.263415899e-01f, 7.258877386e-01f, 7.254335751e-01f, 7.249790999e-01f, 7.245243133e-01f, 7.240692160e-01f, 7.236138083e-01f,
+7.231580906e-01f, 7.227020635e-01f, 7.222457275e-01f, 7.217890828e-01f, 7.213321301e-01f, 7.208748698e-01f, 7.204173023e-01f, 7.199594281e-01f, 7.195012476e-01f, 7.190427614e-01f,
+7.185839698e-01f, 7.181248734e-01f, 7.176654725e-01f, 7.172057677e-01f, 7.167457594e-01f, 7.162854481e-01f, 7.158248342e-01f, 7.153639182e-01f, 7.149027005e-01f, 7.144411817e-01f,
+7.139793621e-01f, 7.135172423e-01f, 7.130548227e-01f, 7.125921037e-01f, 7.121290859e-01f, 7.116657696e-01f, 7.112021554e-01f, 7.107382438e-01f, 7.102740351e-01f, 7.098095298e-01f,
+7.093447285e-01f, 7.088796315e-01f, 7.084142394e-01f, 7.079485526e-01f, 7.074825716e-01f, 7.070162968e-01f, 7.065497287e-01f, 7.060828677e-01f, 7.056157144e-01f, 7.051482692e-01f,
+7.046805326e-01f, 7.042125050e-01f, 7.037441869e-01f, 7.032755788e-01f, 7.028066812e-01f, 7.023374944e-01f, 7.018680190e-01f, 7.013982555e-01f, 7.009282043e-01f, 7.004578659e-01f,
+6.999872407e-01f, 6.995163293e-01f, 6.990451320e-01f, 6.985736494e-01f, 6.981018820e-01f, 6.976298301e-01f, 6.971574944e-01f, 6.966848751e-01f, 6.962119729e-01f, 6.957387882e-01f,
+6.952653215e-01f, 6.947915732e-01f, 6.943175438e-01f, 6.938432338e-01f, 6.933686437e-01f, 6.928937738e-01f, 6.924186248e-01f, 6.919431971e-01f, 6.914674911e-01f, 6.909915073e-01f,
+6.905152463e-01f, 6.900387084e-01f, 6.895618941e-01f, 6.890848040e-01f, 6.886074385e-01f, 6.881297980e-01f, 6.876518831e-01f, 6.871736943e-01f, 6.866952319e-01f, 6.862164965e-01f,
+6.857374886e-01f, 6.852582086e-01f, 6.847786570e-01f, 6.842988343e-01f, 6.838187410e-01f, 6.833383775e-01f, 6.828577443e-01f, 6.823768420e-01f, 6.818956709e-01f, 6.814142315e-01f,
+6.809325245e-01f, 6.804505501e-01f, 6.799683089e-01f, 6.794858014e-01f, 6.790030281e-01f, 6.785199894e-01f, 6.780366858e-01f, 6.775531178e-01f, 6.770692859e-01f, 6.765851905e-01f,
+6.761008322e-01f, 6.756162114e-01f, 6.751313286e-01f, 6.746461843e-01f, 6.741607790e-01f, 6.736751131e-01f, 6.731891871e-01f, 6.727030016e-01f, 6.722165569e-01f, 6.717298537e-01f,
+6.712428923e-01f, 6.707556732e-01f, 6.702681970e-01f, 6.697804641e-01f, 6.692924750e-01f, 6.688042302e-01f, 6.683157302e-01f, 6.678269754e-01f, 6.673379664e-01f, 6.668487036e-01f,
+6.663591875e-01f, 6.658694186e-01f, 6.653793973e-01f, 6.648891243e-01f, 6.643985999e-01f, 6.639078246e-01f, 6.634167990e-01f, 6.629255235e-01f, 6.624339986e-01f, 6.619422248e-01f,
+6.614502026e-01f, 6.609579324e-01f, 6.604654148e-01f, 6.599726502e-01f, 6.594796392e-01f, 6.589863821e-01f, 6.584928796e-01f, 6.579991321e-01f, 6.575051401e-01f, 6.570109040e-01f,
+6.565164245e-01f, 6.560217018e-01f, 6.555267366e-01f, 6.550315294e-01f, 6.545360806e-01f, 6.540403907e-01f, 6.535444602e-01f, 6.530482896e-01f, 6.525518794e-01f, 6.520552300e-01f,
+6.515583421e-01f, 6.510612160e-01f, 6.505638522e-01f, 6.500662513e-01f, 6.495684138e-01f, 6.490703401e-01f, 6.485720307e-01f, 6.480734861e-01f, 6.475747069e-01f, 6.470756934e-01f,
+6.465764462e-01f, 6.460769659e-01f, 6.455772528e-01f, 6.450773075e-01f, 6.445771305e-01f, 6.440767222e-01f, 6.435760832e-01f, 6.430752140e-01f, 6.425741150e-01f, 6.420727867e-01f,
+6.415712297e-01f, 6.410694445e-01f, 6.405674314e-01f, 6.400651911e-01f, 6.395627240e-01f, 6.390600307e-01f, 6.385571115e-01f, 6.380539671e-01f, 6.375505979e-01f, 6.370470044e-01f,
+6.365431871e-01f, 6.360391465e-01f, 6.355348831e-01f, 6.350303974e-01f, 6.345256898e-01f, 6.340207610e-01f, 6.335156114e-01f, 6.330102414e-01f, 6.325046516e-01f, 6.319988426e-01f,
+6.314928147e-01f, 6.309865684e-01f, 6.304801044e-01f, 6.299734230e-01f, 6.294665249e-01f, 6.289594104e-01f, 6.284520800e-01f, 6.279445344e-01f, 6.274367739e-01f, 6.269287991e-01f,
+6.264206105e-01f, 6.259122086e-01f, 6.254035938e-01f, 6.248947667e-01f, 6.243857278e-01f, 6.238764776e-01f, 6.233670166e-01f, 6.228573452e-01f, 6.223474641e-01f, 6.218373736e-01f,
+6.213270743e-01f, 6.208165667e-01f, 6.203058513e-01f, 6.197949286e-01f, 6.192837991e-01f, 6.187724633e-01f, 6.182609217e-01f, 6.177491748e-01f, 6.172372231e-01f, 6.167250671e-01f,
+6.162127074e-01f, 6.157001444e-01f, 6.151873785e-01f, 6.146744105e-01f, 6.141612406e-01f, 6.136478695e-01f, 6.131342976e-01f, 6.126205255e-01f, 6.121065536e-01f, 6.115923824e-01f,
+6.110780126e-01f, 6.105634444e-01f, 6.100486786e-01f, 6.095337155e-01f, 6.090185557e-01f, 6.085031997e-01f, 6.079876480e-01f, 6.074719010e-01f, 6.069559594e-01f, 6.064398236e-01f,
+6.059234941e-01f, 6.054069714e-01f, 6.048902560e-01f, 6.043733485e-01f, 6.038562493e-01f, 6.033389590e-01f, 6.028214780e-01f, 6.023038069e-01f, 6.017859461e-01f, 6.012678962e-01f,
+6.007496577e-01f, 6.002312311e-01f, 5.997126169e-01f, 5.991938156e-01f, 5.986748277e-01f, 5.981556537e-01f, 5.976362942e-01f, 5.971167496e-01f, 5.965970204e-01f, 5.960771072e-01f,
+5.955570105e-01f, 5.950367307e-01f, 5.945162684e-01f, 5.939956242e-01f, 5.934747984e-01f, 5.929537916e-01f, 5.924326044e-01f, 5.919112371e-01f, 5.913896904e-01f, 5.908679648e-01f,
+5.903460607e-01f, 5.898239787e-01f, 5.893017193e-01f, 5.887792830e-01f, 5.882566702e-01f, 5.877338816e-01f, 5.872109176e-01f, 5.866877787e-01f, 5.861644655e-01f, 5.856409784e-01f,
+5.851173180e-01f, 5.845934848e-01f, 5.840694793e-01f, 5.835453019e-01f, 5.830209533e-01f, 5.824964339e-01f, 5.819717442e-01f, 5.814468848e-01f, 5.809218561e-01f, 5.803966587e-01f,
+5.798712931e-01f, 5.793457598e-01f, 5.788200593e-01f, 5.782941921e-01f, 5.777681588e-01f, 5.772419598e-01f, 5.767155956e-01f, 5.761890668e-01f, 5.756623739e-01f, 5.751355174e-01f,
+5.746084979e-01f, 5.740813157e-01f, 5.735539715e-01f, 5.730264657e-01f, 5.724987989e-01f, 5.719709716e-01f, 5.714429842e-01f, 5.709148374e-01f, 5.703865316e-01f, 5.698580673e-01f,
+5.693294451e-01f, 5.688006655e-01f, 5.682717289e-01f, 5.677426359e-01f, 5.672133870e-01f, 5.666839827e-01f, 5.661544236e-01f, 5.656247101e-01f, 5.650948428e-01f, 5.645648222e-01f,
+5.640346488e-01f, 5.635043230e-01f, 5.629738456e-01f, 5.624432168e-01f, 5.619124373e-01f, 5.613815076e-01f, 5.608504282e-01f, 5.603191995e-01f, 5.597878222e-01f, 5.592562967e-01f,
+5.587246236e-01f, 5.581928034e-01f, 5.576608365e-01f, 5.571287235e-01f, 5.565964650e-01f, 5.560640614e-01f, 5.555315132e-01f, 5.549988210e-01f, 5.544659853e-01f, 5.539330066e-01f,
+5.533998853e-01f, 5.528666222e-01f, 5.523332175e-01f, 5.517996720e-01f, 5.512659860e-01f, 5.507321601e-01f, 5.501981949e-01f, 5.496640908e-01f, 5.491298483e-01f, 5.485954680e-01f,
+5.480609504e-01f, 5.475262960e-01f, 5.469915053e-01f, 5.464565788e-01f, 5.459215172e-01f, 5.453863207e-01f, 5.448509901e-01f, 5.443155258e-01f, 5.437799283e-01f, 5.432441982e-01f,
+5.427083359e-01f, 5.421723421e-01f, 5.416362171e-01f, 5.410999615e-01f, 5.405635759e-01f, 5.400270607e-01f, 5.394904165e-01f, 5.389536438e-01f, 5.384167432e-01f, 5.378797150e-01f,
+5.373425599e-01f, 5.368052784e-01f, 5.362678709e-01f, 5.357303381e-01f, 5.351926804e-01f, 5.346548983e-01f, 5.341169924e-01f, 5.335789631e-01f, 5.330408111e-01f, 5.325025368e-01f,
+5.319641407e-01f, 5.314256234e-01f, 5.308869854e-01f, 5.303482272e-01f, 5.298093493e-01f, 5.292703522e-01f, 5.287312365e-01f, 5.281920026e-01f, 5.276526512e-01f, 5.271131826e-01f,
+5.265735975e-01f, 5.260338964e-01f, 5.254940797e-01f, 5.249541480e-01f, 5.244141019e-01f, 5.238739417e-01f, 5.233336681e-01f, 5.227932816e-01f, 5.222527827e-01f, 5.217121719e-01f,
+5.211714498e-01f, 5.206306168e-01f, 5.200896734e-01f, 5.195486203e-01f, 5.190074579e-01f, 5.184661867e-01f, 5.179248072e-01f, 5.173833201e-01f, 5.168417257e-01f, 5.163000247e-01f,
+5.157582175e-01f, 5.152163046e-01f, 5.146742867e-01f, 5.141321641e-01f, 5.135899374e-01f, 5.130476072e-01f, 5.125051740e-01f, 5.119626382e-01f, 5.114200004e-01f, 5.108772612e-01f,
+5.103344210e-01f, 5.097914803e-01f, 5.092484398e-01f, 5.087052998e-01f, 5.081620610e-01f, 5.076187238e-01f, 5.070752888e-01f, 5.065317565e-01f, 5.059881274e-01f, 5.054444020e-01f,
+5.049005809e-01f, 5.043566646e-01f, 5.038126535e-01f, 5.032685483e-01f, 5.027243494e-01f, 5.021800573e-01f, 5.016356727e-01f, 5.010911959e-01f, 5.005466275e-01f, 5.000019681e-01f,
+4.994572182e-01f, 4.989123782e-01f, 4.983674488e-01f, 4.978224304e-01f, 4.972773235e-01f, 4.967321287e-01f, 4.961868464e-01f, 4.956414773e-01f, 4.950960219e-01f, 4.945504805e-01f,
+4.940048539e-01f, 4.934591424e-01f, 4.929133467e-01f, 4.923674672e-01f, 4.918215045e-01f, 4.912754590e-01f, 4.907293314e-01f, 4.901831221e-01f, 4.896368316e-01f, 4.890904605e-01f,
+4.885440092e-01f, 4.879974784e-01f, 4.874508685e-01f, 4.869041801e-01f, 4.863574136e-01f, 4.858105697e-01f, 4.852636487e-01f, 4.847166513e-01f, 4.841695779e-01f, 4.836224291e-01f,
+4.830752055e-01f, 4.825279074e-01f, 4.819805355e-01f, 4.814330902e-01f, 4.808855722e-01f, 4.803379818e-01f, 4.797903197e-01f, 4.792425863e-01f, 4.786947822e-01f, 4.781469079e-01f,
+4.775989639e-01f, 4.770509507e-01f, 4.765028689e-01f, 4.759547190e-01f, 4.754065014e-01f, 4.748582168e-01f, 4.743098656e-01f, 4.737614484e-01f, 4.732129656e-01f, 4.726644179e-01f,
+4.721158057e-01f, 4.715671295e-01f, 4.710183899e-01f, 4.704695874e-01f, 4.699207225e-01f, 4.693717957e-01f, 4.688228076e-01f, 4.682737586e-01f, 4.677246493e-01f, 4.671754803e-01f,
+4.666262520e-01f, 4.660769649e-01f, 4.655276196e-01f, 4.649782166e-01f, 4.644287564e-01f, 4.638792396e-01f, 4.633296666e-01f, 4.627800380e-01f, 4.622303543e-01f, 4.616806160e-01f,
+4.611308236e-01f, 4.605809777e-01f, 4.600310788e-01f, 4.594811274e-01f, 4.589311240e-01f, 4.583810692e-01f, 4.578309634e-01f, 4.572808072e-01f, 4.567306011e-01f, 4.561803457e-01f,
+4.556300413e-01f, 4.550796887e-01f, 4.545292882e-01f, 4.539788404e-01f, 4.534283459e-01f, 4.528778051e-01f, 4.523272186e-01f, 4.517765868e-01f, 4.512259104e-01f, 4.506751897e-01f,
+4.501244255e-01f, 4.495736181e-01f, 4.490227680e-01f, 4.484718759e-01f, 4.479209422e-01f, 4.473699674e-01f, 4.468189522e-01f, 4.462678968e-01f, 4.457168020e-01f, 4.451656682e-01f,
+4.446144960e-01f, 4.440632858e-01f, 4.435120382e-01f, 4.429607537e-01f, 4.424094328e-01f, 4.418580760e-01f, 4.413066839e-01f, 4.407552570e-01f, 4.402037958e-01f, 4.396523008e-01f,
+4.391007725e-01f, 4.385492115e-01f, 4.379976182e-01f, 4.374459932e-01f, 4.368943371e-01f, 4.363426502e-01f, 4.357909332e-01f, 4.352391866e-01f, 4.346874108e-01f, 4.341356065e-01f,
+4.335837741e-01f, 4.330319141e-01f, 4.324800270e-01f, 4.319281134e-01f, 4.313761739e-01f, 4.308242088e-01f, 4.302722188e-01f, 4.297202043e-01f, 4.291681658e-01f, 4.286161040e-01f,
+4.280640192e-01f, 4.275119121e-01f, 4.269597831e-01f, 4.264076327e-01f, 4.258554615e-01f, 4.253032700e-01f, 4.247510587e-01f, 4.241988281e-01f, 4.236465788e-01f, 4.230943112e-01f,
+4.225420259e-01f, 4.219897233e-01f, 4.214374041e-01f, 4.208850687e-01f, 4.203327176e-01f, 4.197803514e-01f, 4.192279706e-01f, 4.186755757e-01f, 4.181231671e-01f, 4.175707455e-01f,
+4.170183113e-01f, 4.164658651e-01f, 4.159134073e-01f, 4.153609385e-01f, 4.148084593e-01f, 4.142559700e-01f, 4.137034713e-01f, 4.131509636e-01f, 4.125984475e-01f, 4.120459235e-01f,
+4.114933920e-01f, 4.109408537e-01f, 4.103883090e-01f, 4.098357585e-01f, 4.092832026e-01f, 4.087306418e-01f, 4.081780768e-01f, 4.076255080e-01f, 4.070729358e-01f, 4.065203609e-01f,
+4.059677838e-01f, 4.054152049e-01f, 4.048626248e-01f, 4.043100440e-01f, 4.037574630e-01f, 4.032048823e-01f, 4.026523024e-01f, 4.020997239e-01f, 4.015471472e-01f, 4.009945729e-01f,
+4.004420015e-01f, 3.998894335e-01f, 3.993368694e-01f, 3.987843097e-01f, 3.982317550e-01f, 3.976792057e-01f, 3.971266624e-01f, 3.965741256e-01f, 3.960215958e-01f, 3.954690734e-01f,
+3.949165591e-01f, 3.943640533e-01f, 3.938115566e-01f, 3.932590694e-01f, 3.927065923e-01f, 3.921541257e-01f, 3.916016703e-01f, 3.910492264e-01f, 3.904967947e-01f, 3.899443756e-01f,
+3.893919697e-01f, 3.888395773e-01f, 3.882871992e-01f, 3.877348357e-01f, 3.871824874e-01f, 3.866301548e-01f, 3.860778384e-01f, 3.855255387e-01f, 3.849732563e-01f, 3.844209916e-01f,
+3.838687451e-01f, 3.833165174e-01f, 3.827643090e-01f, 3.822121203e-01f, 3.816599519e-01f, 3.811078044e-01f, 3.805556781e-01f, 3.800035737e-01f, 3.794514916e-01f, 3.788994323e-01f,
+3.783473964e-01f, 3.777953843e-01f, 3.772433966e-01f, 3.766914338e-01f, 3.761394963e-01f, 3.755875848e-01f, 3.750356996e-01f, 3.744838414e-01f, 3.739320106e-01f, 3.733802077e-01f,
+3.728284332e-01f, 3.722766877e-01f, 3.717249716e-01f, 3.711732855e-01f, 3.706216299e-01f, 3.700700052e-01f, 3.695184120e-01f, 3.689668508e-01f, 3.684153221e-01f, 3.678638264e-01f,
+3.673123642e-01f, 3.667609360e-01f, 3.662095423e-01f, 3.656581837e-01f, 3.651068606e-01f, 3.645555735e-01f, 3.640043230e-01f, 3.634531095e-01f, 3.629019336e-01f, 3.623507958e-01f,
+3.617996965e-01f, 3.612486363e-01f, 3.606976157e-01f, 3.601466352e-01f, 3.595956952e-01f, 3.590447964e-01f, 3.584939392e-01f, 3.579431240e-01f, 3.573923515e-01f, 3.568416221e-01f,
+3.562909363e-01f, 3.557402946e-01f, 3.551896975e-01f, 3.546391456e-01f, 3.540886393e-01f, 3.535381791e-01f, 3.529877656e-01f, 3.524373992e-01f, 3.518870805e-01f, 3.513368099e-01f,
+3.507865880e-01f, 3.502364152e-01f, 3.496862920e-01f, 3.491362191e-01f, 3.485861967e-01f, 3.480362256e-01f, 3.474863061e-01f, 3.469364388e-01f, 3.463866241e-01f, 3.458368626e-01f,
+3.452871548e-01f, 3.447375011e-01f, 3.441879021e-01f, 3.436383583e-01f, 3.430888701e-01f, 3.425394382e-01f, 3.419900628e-01f, 3.414407447e-01f, 3.408914842e-01f, 3.403422820e-01f,
+3.397931383e-01f, 3.392440539e-01f, 3.386950291e-01f, 3.381460645e-01f, 3.375971605e-01f, 3.370483177e-01f, 3.364995366e-01f, 3.359508177e-01f, 3.354021614e-01f, 3.348535682e-01f,
+3.343050388e-01f, 3.337565734e-01f, 3.332081728e-01f, 3.326598372e-01f, 3.321115674e-01f, 3.315633636e-01f, 3.310152266e-01f, 3.304671566e-01f, 3.299191543e-01f, 3.293712201e-01f,
+3.288233546e-01f, 3.282755581e-01f, 3.277278313e-01f, 3.271801746e-01f, 3.266325885e-01f, 3.260850735e-01f, 3.255376301e-01f, 3.249902589e-01f, 3.244429602e-01f, 3.238957346e-01f,
+3.233485825e-01f, 3.228015046e-01f, 3.222545012e-01f, 3.217075729e-01f, 3.211607201e-01f, 3.206139434e-01f, 3.200672432e-01f, 3.195206201e-01f, 3.189740744e-01f, 3.184276069e-01f,
+3.178812178e-01f, 3.173349077e-01f, 3.167886772e-01f, 3.162425266e-01f, 3.156964565e-01f, 3.151504674e-01f, 3.146045597e-01f, 3.140587340e-01f, 3.135129908e-01f, 3.129673305e-01f,
+3.124217536e-01f, 3.118762607e-01f, 3.113308522e-01f, 3.107855285e-01f, 3.102402903e-01f, 3.096951380e-01f, 3.091500720e-01f, 3.086050929e-01f, 3.080602011e-01f, 3.075153972e-01f,
+3.069706816e-01f, 3.064260548e-01f, 3.058815174e-01f, 3.053370697e-01f, 3.047927123e-01f, 3.042484457e-01f, 3.037042703e-01f, 3.031601867e-01f, 3.026161953e-01f, 3.020722967e-01f,
+3.015284912e-01f, 3.009847795e-01f, 3.004411619e-01f, 2.998976390e-01f, 2.993542113e-01f, 2.988108792e-01f, 2.982676432e-01f, 2.977245038e-01f, 2.971814615e-01f, 2.966385168e-01f,
+2.960956702e-01f, 2.955529221e-01f, 2.950102731e-01f, 2.944677236e-01f, 2.939252741e-01f, 2.933829251e-01f, 2.928406770e-01f, 2.922985304e-01f, 2.917564857e-01f, 2.912145435e-01f,
+2.906727042e-01f, 2.901309682e-01f, 2.895893362e-01f, 2.890478084e-01f, 2.885063855e-01f, 2.879650680e-01f, 2.874238562e-01f, 2.868827507e-01f, 2.863417520e-01f, 2.858008605e-01f,
+2.852600767e-01f, 2.847194011e-01f, 2.841788342e-01f, 2.836383765e-01f, 2.830980284e-01f, 2.825577905e-01f, 2.820176631e-01f, 2.814776468e-01f, 2.809377421e-01f, 2.803979494e-01f,
+2.798582693e-01f, 2.793187021e-01f, 2.787792484e-01f, 2.782399087e-01f, 2.777006833e-01f, 2.771615729e-01f, 2.766225779e-01f, 2.760836987e-01f, 2.755449359e-01f, 2.750062899e-01f,
+2.744677612e-01f, 2.739293502e-01f, 2.733910575e-01f, 2.728528835e-01f, 2.723148287e-01f, 2.717768936e-01f, 2.712390786e-01f, 2.707013842e-01f, 2.701638109e-01f, 2.696263592e-01f,
+2.690890295e-01f, 2.685518224e-01f, 2.680147382e-01f, 2.674777775e-01f, 2.669409407e-01f, 2.664042284e-01f, 2.658676409e-01f, 2.653311787e-01f, 2.647948424e-01f, 2.642586324e-01f,
+2.637225492e-01f, 2.631865932e-01f, 2.626507649e-01f, 2.621150648e-01f, 2.615794933e-01f, 2.610440510e-01f, 2.605087382e-01f, 2.599735555e-01f, 2.594385034e-01f, 2.589035822e-01f,
+2.583687926e-01f, 2.578341348e-01f, 2.572996095e-01f, 2.567652170e-01f, 2.562309579e-01f, 2.556968326e-01f, 2.551628416e-01f, 2.546289854e-01f, 2.540952643e-01f, 2.535616790e-01f,
+2.530282298e-01f, 2.524949172e-01f, 2.519617417e-01f, 2.514287037e-01f, 2.508958038e-01f, 2.503630424e-01f, 2.498304198e-01f, 2.492979367e-01f, 2.487655935e-01f, 2.482333906e-01f,
+2.477013286e-01f, 2.471694078e-01f, 2.466376287e-01f, 2.461059918e-01f, 2.455744976e-01f, 2.450431465e-01f, 2.445119390e-01f, 2.439808755e-01f, 2.434499566e-01f, 2.429191826e-01f,
+2.423885541e-01f, 2.418580714e-01f, 2.413277351e-01f, 2.407975457e-01f, 2.402675035e-01f, 2.397376090e-01f, 2.392078628e-01f, 2.386782652e-01f, 2.381488167e-01f, 2.376195178e-01f,
+2.370903690e-01f, 2.365613706e-01f, 2.360325232e-01f, 2.355038272e-01f, 2.349752831e-01f, 2.344468913e-01f, 2.339186523e-01f, 2.333905666e-01f, 2.328626345e-01f, 2.323348566e-01f,
+2.318072333e-01f, 2.312797651e-01f, 2.307524524e-01f, 2.302252958e-01f, 2.296982955e-01f, 2.291714521e-01f, 2.286447661e-01f, 2.281182379e-01f, 2.275918679e-01f, 2.270656567e-01f,
+2.265396046e-01f, 2.260137121e-01f, 2.254879797e-01f, 2.249624079e-01f, 2.244369970e-01f, 2.239117475e-01f, 2.233866599e-01f, 2.228617347e-01f, 2.223369722e-01f, 2.218123730e-01f,
+2.212879375e-01f, 2.207636661e-01f, 2.202395593e-01f, 2.197156175e-01f, 2.191918412e-01f, 2.186682309e-01f, 2.181447870e-01f, 2.176215098e-01f, 2.170984000e-01f, 2.165754579e-01f,
+2.160526840e-01f, 2.155300787e-01f, 2.150076425e-01f, 2.144853759e-01f, 2.139632792e-01f, 2.134413529e-01f, 2.129195975e-01f, 2.123980134e-01f, 2.118766010e-01f, 2.113553609e-01f,
+2.108342934e-01f, 2.103133990e-01f, 2.097926782e-01f, 2.092721313e-01f, 2.087517588e-01f, 2.082315613e-01f, 2.077115390e-01f, 2.071916925e-01f, 2.066720222e-01f, 2.061525286e-01f,
+2.056332120e-01f, 2.051140730e-01f, 2.045951119e-01f, 2.040763293e-01f, 2.035577255e-01f, 2.030393010e-01f, 2.025210562e-01f, 2.020029917e-01f, 2.014851077e-01f, 2.009674048e-01f,
+2.004498834e-01f, 1.999325439e-01f, 1.994153868e-01f, 1.988984125e-01f, 1.983816214e-01f, 1.978650141e-01f, 1.973485909e-01f, 1.968323522e-01f, 1.963162985e-01f, 1.958004303e-01f,
+1.952847480e-01f, 1.947692519e-01f, 1.942539426e-01f, 1.937388205e-01f, 1.932238860e-01f, 1.927091396e-01f, 1.921945816e-01f, 1.916802126e-01f, 1.911660329e-01f, 1.906520431e-01f,
+1.901382434e-01f, 1.896246344e-01f, 1.891112165e-01f, 1.885979901e-01f, 1.880849557e-01f, 1.875721136e-01f, 1.870594644e-01f, 1.865470084e-01f, 1.860347461e-01f, 1.855226779e-01f,
+1.850108042e-01f, 1.844991255e-01f, 1.839876422e-01f, 1.834763548e-01f, 1.829652636e-01f, 1.824543691e-01f, 1.819436717e-01f, 1.814331719e-01f, 1.809228700e-01f, 1.804127665e-01f,
+1.799028619e-01f, 1.793931565e-01f, 1.788836508e-01f, 1.783743452e-01f, 1.778652401e-01f, 1.773563360e-01f, 1.768476332e-01f, 1.763391323e-01f, 1.758308336e-01f, 1.753227376e-01f,
+1.748148447e-01f, 1.743071552e-01f, 1.737996697e-01f, 1.732923886e-01f, 1.727853122e-01f, 1.722784410e-01f, 1.717717754e-01f, 1.712653159e-01f, 1.707590628e-01f, 1.702530167e-01f,
+1.697471778e-01f, 1.692415466e-01f, 1.687361236e-01f, 1.682309092e-01f, 1.677259038e-01f, 1.672211077e-01f, 1.667165215e-01f, 1.662121455e-01f, 1.657079802e-01f, 1.652040259e-01f,
+1.647002832e-01f, 1.641967523e-01f, 1.636934338e-01f, 1.631903281e-01f, 1.626874354e-01f, 1.621847564e-01f, 1.616822914e-01f, 1.611800408e-01f, 1.606780050e-01f, 1.601761844e-01f,
+1.596745795e-01f, 1.591731906e-01f, 1.586720183e-01f, 1.581710628e-01f, 1.576703246e-01f, 1.571698042e-01f, 1.566695019e-01f, 1.561694181e-01f, 1.556695532e-01f, 1.551699078e-01f,
+1.546704821e-01f, 1.541712766e-01f, 1.536722917e-01f, 1.531735278e-01f, 1.526749853e-01f, 1.521766647e-01f, 1.516785662e-01f, 1.511806904e-01f, 1.506830377e-01f, 1.501856084e-01f,
+1.496884030e-01f, 1.491914219e-01f, 1.486946654e-01f, 1.481981341e-01f, 1.477018282e-01f, 1.472057482e-01f, 1.467098945e-01f, 1.462142675e-01f, 1.457188677e-01f, 1.452236953e-01f,
+1.447287509e-01f, 1.442340348e-01f, 1.437395474e-01f, 1.432452892e-01f, 1.427512604e-01f, 1.422574617e-01f, 1.417638932e-01f, 1.412705555e-01f, 1.407774490e-01f, 1.402845739e-01f,
+1.397919308e-01f, 1.392995201e-01f, 1.388073421e-01f, 1.383153972e-01f, 1.378236859e-01f, 1.373322085e-01f, 1.368409655e-01f, 1.363499572e-01f, 1.358591840e-01f, 1.353686463e-01f,
+1.348783446e-01f, 1.343882792e-01f, 1.338984505e-01f, 1.334088589e-01f, 1.329195049e-01f, 1.324303887e-01f, 1.319415109e-01f, 1.314528717e-01f, 1.309644716e-01f, 1.304763110e-01f,
+1.299883903e-01f, 1.295007099e-01f, 1.290132701e-01f, 1.285260714e-01f, 1.280391141e-01f, 1.275523986e-01f, 1.270659254e-01f, 1.265796948e-01f, 1.260937072e-01f, 1.256079630e-01f,
+1.251224626e-01f, 1.246372064e-01f, 1.241521947e-01f, 1.236674280e-01f, 1.231829067e-01f, 1.226986310e-01f, 1.222146015e-01f, 1.217308185e-01f, 1.212472824e-01f, 1.207639936e-01f,
+1.202809524e-01f, 1.197981593e-01f, 1.193156147e-01f, 1.188333188e-01f, 1.183512722e-01f, 1.178694751e-01f, 1.173879280e-01f, 1.169066313e-01f, 1.164255854e-01f, 1.159447905e-01f,
+1.154642472e-01f, 1.149839557e-01f, 1.145039165e-01f, 1.140241300e-01f, 1.135445965e-01f, 1.130653164e-01f, 1.125862901e-01f, 1.121075179e-01f, 1.116290004e-01f, 1.111507377e-01f,
+1.106727304e-01f, 1.101949787e-01f, 1.097174832e-01f, 1.092402440e-01f, 1.087632617e-01f, 1.082865366e-01f, 1.078100690e-01f, 1.073338594e-01f, 1.068579081e-01f, 1.063822156e-01f,
+1.059067821e-01f, 1.054316080e-01f, 1.049566938e-01f, 1.044820397e-01f, 1.040076463e-01f, 1.035335138e-01f, 1.030596425e-01f, 1.025860330e-01f, 1.021126856e-01f, 1.016396005e-01f,
+1.011667783e-01f, 1.006942193e-01f, 1.002219237e-01f, 9.974989215e-02f, 9.927812483e-02f, 9.880662216e-02f, 9.833538451e-02f, 9.786441225e-02f, 9.739370575e-02f, 9.692326537e-02f,
+9.645309148e-02f, 9.598318444e-02f, 9.551354463e-02f, 9.504417241e-02f, 9.457506815e-02f, 9.410623220e-02f, 9.363766494e-02f, 9.316936673e-02f, 9.270133793e-02f, 9.223357891e-02f,
+9.176609003e-02f, 9.129887166e-02f, 9.083192415e-02f, 9.036524786e-02f, 8.989884317e-02f, 8.943271042e-02f, 8.896684999e-02f, 8.850126223e-02f, 8.803594750e-02f, 8.757090617e-02f,
+8.710613858e-02f, 8.664164511e-02f, 8.617742610e-02f, 8.571348192e-02f, 8.524981292e-02f, 8.478641947e-02f, 8.432330191e-02f, 8.386046061e-02f, 8.339789592e-02f, 8.293560819e-02f,
+8.247359779e-02f, 8.201186507e-02f, 8.155041037e-02f, 8.108923407e-02f, 8.062833650e-02f, 8.016771802e-02f, 7.970737899e-02f, 7.924731976e-02f, 7.878754068e-02f, 7.832804210e-02f,
+7.786882438e-02f, 7.740988785e-02f, 7.695123289e-02f, 7.649285983e-02f, 7.603476902e-02f, 7.557696082e-02f, 7.511943556e-02f, 7.466219362e-02f, 7.420523532e-02f, 7.374856101e-02f,
+7.329217105e-02f, 7.283606579e-02f, 7.238024556e-02f, 7.192471071e-02f, 7.146946159e-02f, 7.101449855e-02f, 7.055982192e-02f, 7.010543206e-02f, 6.965132931e-02f, 6.919751401e-02f,
+6.874398651e-02f, 6.829074714e-02f, 6.783779625e-02f, 6.738513418e-02f, 6.693276128e-02f, 6.648067787e-02f, 6.602888432e-02f, 6.557738095e-02f, 6.512616811e-02f, 6.467524613e-02f,
+6.422461535e-02f, 6.377427612e-02f, 6.332422876e-02f, 6.287447363e-02f, 6.242501105e-02f, 6.197584137e-02f, 6.152696491e-02f, 6.107838202e-02f, 6.063009303e-02f, 6.018209828e-02f,
+5.973439810e-02f, 5.928699283e-02f, 5.883988279e-02f, 5.839306833e-02f, 5.794654978e-02f, 5.750032747e-02f, 5.705440173e-02f, 5.660877290e-02f, 5.616344130e-02f, 5.571840727e-02f,
+5.527367114e-02f, 5.482923323e-02f, 5.438509389e-02f, 5.394125343e-02f, 5.349771219e-02f, 5.305447049e-02f, 5.261152867e-02f, 5.216888705e-02f, 5.172654596e-02f, 5.128450572e-02f,
+5.084276667e-02f, 5.040132912e-02f, 4.996019341e-02f, 4.951935986e-02f, 4.907882879e-02f, 4.863860054e-02f, 4.819867541e-02f, 4.775905374e-02f, 4.731973585e-02f, 4.688072206e-02f,
+4.644201270e-02f, 4.600360808e-02f, 4.556550853e-02f, 4.512771437e-02f, 4.469022592e-02f, 4.425304350e-02f, 4.381616743e-02f, 4.337959802e-02f, 4.294333561e-02f, 4.250738049e-02f,
+4.207173301e-02f, 4.163639346e-02f, 4.120136217e-02f, 4.076663946e-02f, 4.033222564e-02f, 3.989812103e-02f, 3.946432594e-02f, 3.903084069e-02f, 3.859766558e-02f, 3.816480095e-02f,
+3.773224710e-02f, 3.730000434e-02f, 3.686807298e-02f, 3.643645335e-02f, 3.600514574e-02f, 3.557415048e-02f, 3.514346787e-02f, 3.471309823e-02f, 3.428304186e-02f, 3.385329907e-02f,
+3.342387018e-02f, 3.299475549e-02f, 3.256595531e-02f, 3.213746995e-02f, 3.170929971e-02f, 3.128144491e-02f, 3.085390585e-02f, 3.042668284e-02f, 2.999977618e-02f, 2.957318618e-02f,
+2.914691314e-02f, 2.872095737e-02f, 2.829531916e-02f, 2.786999884e-02f, 2.744499669e-02f, 2.702031303e-02f, 2.659594815e-02f, 2.617190235e-02f, 2.574817595e-02f, 2.532476923e-02f,
+2.490168249e-02f, 2.447891605e-02f, 2.405647020e-02f, 2.363434523e-02f, 2.321254146e-02f, 2.279105916e-02f, 2.236989865e-02f, 2.194906023e-02f, 2.152854417e-02f, 2.110835080e-02f,
+2.068848039e-02f, 2.026893325e-02f, 1.984970967e-02f, 1.943080995e-02f, 1.901223438e-02f, 1.859398325e-02f, 1.817605686e-02f, 1.775845551e-02f, 1.734117947e-02f, 1.692422906e-02f,
+1.650760455e-02f, 1.609130624e-02f, 1.567533442e-02f, 1.525968938e-02f, 1.484437141e-02f, 1.442938080e-02f, 1.401471784e-02f, 1.360038282e-02f, 1.318637602e-02f, 1.277269773e-02f,
+1.235934825e-02f, 1.194632785e-02f, 1.153363683e-02f, 1.112127546e-02f, 1.070924405e-02f, 1.029754286e-02f, 9.886172181e-03f, 9.475132304e-03f, 9.064423510e-03f, 8.654046081e-03f,
+8.244000300e-03f, 7.834286450e-03f, 7.424904811e-03f, 7.015855667e-03f, 6.607139296e-03f, 6.198755981e-03f, 5.790706001e-03f, 5.382989635e-03f, 4.975607163e-03f, 4.568558863e-03f,
+4.161845013e-03f, 3.755465892e-03f, 3.349421777e-03f, 2.943712943e-03f, 2.538339669e-03f, 2.133302229e-03f, 1.728600899e-03f, 1.324235955e-03f, 9.202076702e-04f, 5.165163192e-04f,
+1.131621758e-04f, -2.898544871e-04f, -6.925333965e-04f, -1.094874280e-03f, -1.496876867e-03f, -1.898540884e-03f, -2.299866062e-03f, -2.700852130e-03f, -3.101498817e-03f, -3.501805855e-03f,
+-3.901772975e-03f, -4.301399907e-03f, -4.700686383e-03f, -5.099632136e-03f, -5.498236900e-03f, -5.896500405e-03f, -6.294422388e-03f, -6.692002581e-03f, -7.089240720e-03f, -7.486136539e-03f,
+-7.882689775e-03f, -8.278900162e-03f, -8.674767438e-03f, -9.070291339e-03f, -9.465471603e-03f, -9.860307968e-03f, -1.025480017e-02f, -1.064894795e-02f, -1.104275105e-02f, -1.143620921e-02f,
+-1.182932216e-02f, -1.222208965e-02f, -1.261451142e-02f, -1.300658721e-02f, -1.339831676e-02f, -1.378969982e-02f, -1.418073612e-02f, -1.457142542e-02f, -1.496176745e-02f, -1.535176196e-02f,
+-1.574140869e-02f, -1.613070739e-02f, -1.651965781e-02f, -1.690825969e-02f, -1.729651278e-02f, -1.768441683e-02f, -1.807197158e-02f, -1.845917678e-02f, -1.884603217e-02f, -1.923253752e-02f,
+-1.961869257e-02f, -2.000449706e-02f, -2.038995076e-02f, -2.077505340e-02f, -2.115980474e-02f, -2.154420454e-02f, -2.192825254e-02f, -2.231194850e-02f, -2.269529218e-02f, -2.307828331e-02f,
+-2.346092167e-02f, -2.384320700e-02f, -2.422513906e-02f, -2.460671760e-02f, -2.498794239e-02f, -2.536881317e-02f, -2.574932971e-02f, -2.612949175e-02f, -2.650929907e-02f, -2.688875142e-02f,
+-2.726784855e-02f, -2.764659023e-02f, -2.802497622e-02f, -2.840300628e-02f, -2.878068016e-02f, -2.915799763e-02f, -2.953495845e-02f, -2.991156238e-02f, -3.028780919e-02f, -3.066369864e-02f,
+-3.103923050e-02f, -3.141440451e-02f, -3.178922046e-02f, -3.216367811e-02f, -3.253777722e-02f, -3.291151756e-02f, -3.328489889e-02f, -3.365792098e-02f, -3.403058360e-02f, -3.440288652e-02f,
+-3.477482951e-02f, -3.514641232e-02f, -3.551763475e-02f, -3.588849654e-02f, -3.625899748e-02f, -3.662913734e-02f, -3.699891588e-02f, -3.736833287e-02f, -3.773738810e-02f, -3.810608133e-02f,
+-3.847441234e-02f, -3.884238089e-02f, -3.920998677e-02f, -3.957722975e-02f, -3.994410960e-02f, -4.031062611e-02f, -4.067677903e-02f, -4.104256816e-02f, -4.140799327e-02f, -4.177305413e-02f,
+-4.213775053e-02f, -4.250208224e-02f, -4.286604904e-02f, -4.322965071e-02f, -4.359288703e-02f, -4.395575779e-02f, -4.431826276e-02f, -4.468040172e-02f, -4.504217446e-02f, -4.540358075e-02f,
+-4.576462039e-02f, -4.612529315e-02f, -4.648559882e-02f, -4.684553718e-02f, -4.720510801e-02f, -4.756431111e-02f, -4.792314626e-02f, -4.828161324e-02f, -4.863971184e-02f, -4.899744185e-02f,
+-4.935480305e-02f, -4.971179524e-02f, -5.006841820e-02f, -5.042467172e-02f, -5.078055559e-02f, -5.113606961e-02f, -5.149121355e-02f, -5.184598722e-02f, -5.220039040e-02f, -5.255442289e-02f,
+-5.290808447e-02f, -5.326137495e-02f, -5.361429411e-02f, -5.396684175e-02f, -5.431901767e-02f, -5.467082165e-02f, -5.502225350e-02f, -5.537331300e-02f, -5.572399996e-02f, -5.607431418e-02f,
+-5.642425544e-02f, -5.677382356e-02f, -5.712301832e-02f, -5.747183952e-02f, -5.782028697e-02f, -5.816836046e-02f, -5.851605980e-02f, -5.886338479e-02f, -5.921033522e-02f, -5.955691089e-02f,
+-5.990311162e-02f, -6.024893720e-02f, -6.059438744e-02f, -6.093946214e-02f, -6.128416111e-02f, -6.162848414e-02f, -6.197243105e-02f, -6.231600163e-02f, -6.265919570e-02f, -6.300201307e-02f,
+-6.334445354e-02f, -6.368651691e-02f, -6.402820300e-02f, -6.436951161e-02f, -6.471044255e-02f, -6.505099564e-02f, -6.539117068e-02f, -6.573096749e-02f, -6.607038587e-02f, -6.640942563e-02f,
+-6.674808660e-02f, -6.708636857e-02f, -6.742427137e-02f, -6.776179481e-02f, -6.809893869e-02f, -6.843570284e-02f, -6.877208708e-02f, -6.910809121e-02f, -6.944371505e-02f, -6.977895842e-02f,
+-7.011382113e-02f, -7.044830301e-02f, -7.078240387e-02f, -7.111612353e-02f, -7.144946180e-02f, -7.178241852e-02f, -7.211499349e-02f, -7.244718654e-02f, -7.277899749e-02f, -7.311042616e-02f,
+-7.344147237e-02f, -7.377213594e-02f, -7.410241671e-02f, -7.443231448e-02f, -7.476182909e-02f, -7.509096036e-02f, -7.541970811e-02f, -7.574807217e-02f, -7.607605237e-02f, -7.640364853e-02f,
+-7.673086048e-02f, -7.705768804e-02f, -7.738413104e-02f, -7.771018932e-02f, -7.803586270e-02f, -7.836115101e-02f, -7.868605407e-02f, -7.901057173e-02f, -7.933470381e-02f, -7.965845014e-02f,
+-7.998181056e-02f, -8.030478489e-02f, -8.062737297e-02f, -8.094957463e-02f, -8.127138971e-02f, -8.159281804e-02f, -8.191385945e-02f, -8.223451379e-02f, -8.255478088e-02f, -8.287466056e-02f,
+-8.319415267e-02f, -8.351325705e-02f, -8.383197354e-02f, -8.415030196e-02f, -8.446824217e-02f, -8.478579399e-02f, -8.510295728e-02f, -8.541973187e-02f, -8.573611760e-02f, -8.605211431e-02f,
+-8.636772185e-02f, -8.668294005e-02f, -8.699776876e-02f, -8.731220782e-02f, -8.762625708e-02f, -8.793991638e-02f, -8.825318557e-02f, -8.856606448e-02f, -8.887855297e-02f, -8.919065089e-02f,
+-8.950235807e-02f, -8.981367437e-02f, -9.012459963e-02f, -9.043513370e-02f, -9.074527644e-02f, -9.105502769e-02f, -9.136438729e-02f, -9.167335511e-02f, -9.198193098e-02f, -9.229011477e-02f,
+-9.259790632e-02f, -9.290530549e-02f, -9.321231213e-02f, -9.351892608e-02f, -9.382514722e-02f, -9.413097538e-02f, -9.443641043e-02f, -9.474145222e-02f, -9.504610060e-02f, -9.535035544e-02f,
+-9.565421658e-02f, -9.595768389e-02f, -9.626075722e-02f, -9.656343643e-02f, -9.686572139e-02f, -9.716761194e-02f, -9.746910795e-02f, -9.777020929e-02f, -9.807091580e-02f, -9.837122735e-02f,
+-9.867114381e-02f, -9.897066503e-02f, -9.926979088e-02f, -9.956852123e-02f, -9.986685592e-02f, -1.001647948e-01f, -1.004623378e-01f, -1.007594848e-01f, -1.010562356e-01f, -1.013525900e-01f,
+-1.016485480e-01f, -1.019441094e-01f, -1.022392741e-01f, -1.025340419e-01f, -1.028284128e-01f, -1.031223866e-01f, -1.034159631e-01f, -1.037091422e-01f, -1.040019239e-01f, -1.042943079e-01f,
+-1.045862941e-01f, -1.048778825e-01f, -1.051690729e-01f, -1.054598651e-01f, -1.057502590e-01f, -1.060402546e-01f, -1.063298517e-01f, -1.066190501e-01f, -1.069078497e-01f, -1.071962505e-01f,
+-1.074842522e-01f, -1.077718548e-01f, -1.080590582e-01f, -1.083458622e-01f, -1.086322667e-01f, -1.089182715e-01f, -1.092038766e-01f, -1.094890819e-01f, -1.097738872e-01f, -1.100582924e-01f,
+-1.103422973e-01f, -1.106259020e-01f, -1.109091062e-01f, -1.111919098e-01f, -1.114743127e-01f, -1.117563149e-01f, -1.120379161e-01f, -1.123191163e-01f, -1.125999153e-01f, -1.128803131e-01f,
+-1.131603095e-01f, -1.134399045e-01f, -1.137190978e-01f, -1.139978895e-01f, -1.142762793e-01f, -1.145542672e-01f, -1.148318531e-01f, -1.151090368e-01f, -1.153858182e-01f, -1.156621973e-01f,
+-1.159381739e-01f, -1.162137480e-01f, -1.164889193e-01f, -1.167636879e-01f, -1.170380535e-01f, -1.173120162e-01f, -1.175855757e-01f, -1.178587320e-01f, -1.181314850e-01f, -1.184038346e-01f,
+-1.186757807e-01f, -1.189473231e-01f, -1.192184618e-01f, -1.194891966e-01f, -1.197595276e-01f, -1.200294545e-01f, -1.202989772e-01f, -1.205680958e-01f, -1.208368100e-01f, -1.211051197e-01f,
+-1.213730249e-01f, -1.216405256e-01f, -1.219076214e-01f, -1.221743125e-01f, -1.224405987e-01f, -1.227064798e-01f, -1.229719558e-01f, -1.232370267e-01f, -1.235016922e-01f, -1.237659523e-01f,
+-1.240298070e-01f, -1.242932561e-01f, -1.245562995e-01f, -1.248189372e-01f, -1.250811690e-01f, -1.253429949e-01f, -1.256044148e-01f, -1.258654285e-01f, -1.261260360e-01f, -1.263862373e-01f,
+-1.266460321e-01f, -1.269054205e-01f, -1.271644023e-01f, -1.274229775e-01f, -1.276811460e-01f, -1.279389076e-01f, -1.281962624e-01f, -1.284532101e-01f, -1.287097508e-01f, -1.289658843e-01f,
+-1.292216106e-01f, -1.294769296e-01f, -1.297318412e-01f, -1.299863453e-01f, -1.302404419e-01f, -1.304941308e-01f, -1.307474120e-01f, -1.310002854e-01f, -1.312527509e-01f, -1.315048084e-01f,
+-1.317564579e-01f, -1.320076993e-01f, -1.322585326e-01f, -1.325089575e-01f, -1.327589741e-01f, -1.330085823e-01f, -1.332577820e-01f, -1.335065732e-01f, -1.337549557e-01f, -1.340029294e-01f,
+-1.342504944e-01f, -1.344976506e-01f, -1.347443978e-01f, -1.349907360e-01f, -1.352366652e-01f, -1.354821852e-01f, -1.357272960e-01f, -1.359719975e-01f, -1.362162896e-01f, -1.364601724e-01f,
+-1.367036456e-01f, -1.369467093e-01f, -1.371893634e-01f, -1.374316078e-01f, -1.376734425e-01f, -1.379148673e-01f, -1.381558823e-01f, -1.383964873e-01f, -1.386366823e-01f, -1.388764672e-01f,
+-1.391158420e-01f, -1.393548066e-01f, -1.395933610e-01f, -1.398315050e-01f, -1.400692386e-01f, -1.403065618e-01f, -1.405434745e-01f, -1.407799767e-01f, -1.410160682e-01f, -1.412517490e-01f,
+-1.414870192e-01f, -1.417218785e-01f, -1.419563270e-01f, -1.421903645e-01f, -1.424239912e-01f, -1.426572068e-01f, -1.428900113e-01f, -1.431224047e-01f, -1.433543869e-01f, -1.435859579e-01f,
+-1.438171177e-01f, -1.440478661e-01f, -1.442782031e-01f, -1.445081286e-01f, -1.447376427e-01f, -1.449667453e-01f, -1.451954362e-01f, -1.454237155e-01f, -1.456515832e-01f, -1.458790391e-01f,
+-1.461060832e-01f, -1.463327155e-01f, -1.465589359e-01f, -1.467847444e-01f, -1.470101409e-01f, -1.472351255e-01f, -1.474596979e-01f, -1.476838583e-01f, -1.479076065e-01f, -1.481309426e-01f,
+-1.483538664e-01f, -1.485763779e-01f, -1.487984772e-01f, -1.490201640e-01f, -1.492414385e-01f, -1.494623006e-01f, -1.496827501e-01f, -1.499027872e-01f, -1.501224117e-01f, -1.503416236e-01f,
+-1.505604229e-01f, -1.507788096e-01f, -1.509967835e-01f, -1.512143447e-01f, -1.514314931e-01f, -1.516482288e-01f, -1.518645516e-01f, -1.520804615e-01f, -1.522959585e-01f, -1.525110425e-01f,
+-1.527257136e-01f, -1.529399717e-01f, -1.531538167e-01f, -1.533672487e-01f, -1.535802676e-01f, -1.537928733e-01f, -1.540050659e-01f, -1.542168453e-01f, -1.544282115e-01f, -1.546391644e-01f,
+-1.548497041e-01f, -1.550598304e-01f, -1.552695435e-01f, -1.554788432e-01f, -1.556877295e-01f, -1.558962024e-01f, -1.561042619e-01f, -1.563119079e-01f, -1.565191405e-01f, -1.567259596e-01f,
+-1.569323651e-01f, -1.571383571e-01f, -1.573439356e-01f, -1.575491004e-01f, -1.577538517e-01f, -1.579581893e-01f, -1.581621133e-01f, -1.583656237e-01f, -1.585687203e-01f, -1.587714033e-01f,
+-1.589736725e-01f, -1.591755280e-01f, -1.593769697e-01f, -1.595779977e-01f, -1.597786119e-01f, -1.599788123e-01f, -1.601785989e-01f, -1.603779717e-01f, -1.605769306e-01f, -1.607754757e-01f,
+-1.609736069e-01f, -1.611713242e-01f, -1.613686277e-01f, -1.615655172e-01f, -1.617619929e-01f, -1.619580546e-01f, -1.621537024e-01f, -1.623489362e-01f, -1.625437561e-01f, -1.627381621e-01f,
+-1.629321541e-01f, -1.631257321e-01f, -1.633188962e-01f, -1.635116462e-01f, -1.637039823e-01f, -1.638959044e-01f, -1.640874124e-01f, -1.642785065e-01f, -1.644691866e-01f, -1.646594527e-01f,
+-1.648493047e-01f, -1.650387428e-01f, -1.652277668e-01f, -1.654163768e-01f, -1.656045728e-01f, -1.657923548e-01f, -1.659797228e-01f, -1.661666767e-01f, -1.663532167e-01f, -1.665393426e-01f,
+-1.667250545e-01f, -1.669103524e-01f, -1.670952363e-01f, -1.672797062e-01f, -1.674637622e-01f, -1.676474041e-01f, -1.678306320e-01f, -1.680134460e-01f, -1.681958460e-01f, -1.683778320e-01f,
+-1.685594040e-01f, -1.687405621e-01f, -1.689213063e-01f, -1.691016365e-01f, -1.692815528e-01f, -1.694610552e-01f, -1.696401437e-01f, -1.698188183e-01f, -1.699970790e-01f, -1.701749259e-01f,
+-1.703523588e-01f, -1.705293780e-01f, -1.707059833e-01f, -1.708821748e-01f, -1.710579524e-01f, -1.712333163e-01f, -1.714082664e-01f, -1.715828028e-01f, -1.717569254e-01f, -1.719306343e-01f,
+-1.721039295e-01f, -1.722768109e-01f, -1.724492787e-01f, -1.726213329e-01f, -1.727929734e-01f, -1.729642003e-01f, -1.731350136e-01f, -1.733054133e-01f, -1.734753995e-01f, -1.736449721e-01f,
+-1.738141313e-01f, -1.739828769e-01f, -1.741512091e-01f, -1.743191278e-01f, -1.744866331e-01f, -1.746537250e-01f, -1.748204036e-01f, -1.749866688e-01f, -1.751525207e-01f, -1.753179592e-01f,
+-1.754829846e-01f, -1.756475967e-01f, -1.758117955e-01f, -1.759755813e-01f, -1.761389538e-01f, -1.763019132e-01f, -1.764644596e-01f, -1.766265928e-01f, -1.767883131e-01f, -1.769496203e-01f,
+-1.771105146e-01f, -1.772709959e-01f, -1.774310644e-01f, -1.775907199e-01f, -1.777499627e-01f, -1.779087926e-01f, -1.780672097e-01f, -1.782252142e-01f, -1.783828059e-01f, -1.785399850e-01f,
+-1.786967514e-01f, -1.788531053e-01f, -1.790090466e-01f, -1.791645754e-01f, -1.793196917e-01f, -1.794743956e-01f, -1.796286871e-01f, -1.797825663e-01f, -1.799360331e-01f, -1.800890876e-01f,
+-1.802417300e-01f, -1.803939601e-01f, -1.805457781e-01f, -1.806971840e-01f, -1.808481778e-01f, -1.809987597e-01f, -1.811489295e-01f, -1.812986874e-01f, -1.814480335e-01f, -1.815969677e-01f,
+-1.817454901e-01f, -1.818936007e-01f, -1.820412997e-01f, -1.821885870e-01f, -1.823354628e-01f, -1.824819269e-01f, -1.826279796e-01f, -1.827736208e-01f, -1.829188507e-01f, -1.830636691e-01f,
+-1.832080763e-01f, -1.833520722e-01f, -1.834956570e-01f, -1.836388305e-01f, -1.837815930e-01f, -1.839239445e-01f, -1.840658850e-01f, -1.842074145e-01f, -1.843485332e-01f, -1.844892410e-01f,
+-1.846295381e-01f, -1.847694245e-01f, -1.849089002e-01f, -1.850479654e-01f, -1.851866200e-01f, -1.853248641e-01f, -1.854626979e-01f, -1.856001212e-01f, -1.857371343e-01f, -1.858737371e-01f,
+-1.860099298e-01f, -1.861457123e-01f, -1.862810848e-01f, -1.864160473e-01f, -1.865505998e-01f, -1.866847425e-01f, -1.868184754e-01f, -1.869517985e-01f, -1.870847120e-01f, -1.872172159e-01f,
+-1.873493102e-01f, -1.874809951e-01f, -1.876122705e-01f, -1.877431366e-01f, -1.878735934e-01f, -1.880036410e-01f, -1.881332794e-01f, -1.882625088e-01f, -1.883913292e-01f, -1.885197407e-01f,
+-1.886477433e-01f, -1.887753371e-01f, -1.889025221e-01f, -1.890292985e-01f, -1.891556664e-01f, -1.892816257e-01f, -1.894071766e-01f, -1.895323192e-01f, -1.896570534e-01f, -1.897813795e-01f,
+-1.899052974e-01f, -1.900288073e-01f, -1.901519091e-01f, -1.902746031e-01f, -1.903968892e-01f, -1.905187676e-01f, -1.906402383e-01f, -1.907613014e-01f, -1.908819570e-01f, -1.910022051e-01f,
+-1.911220459e-01f, -1.912414794e-01f, -1.913605057e-01f, -1.914791248e-01f, -1.915973370e-01f, -1.917151422e-01f, -1.918325405e-01f, -1.919495320e-01f, -1.920661168e-01f, -1.921822950e-01f,
+-1.922980666e-01f, -1.924134318e-01f, -1.925283906e-01f, -1.926429431e-01f, -1.927570895e-01f, -1.928708297e-01f, -1.929841639e-01f, -1.930970922e-01f, -1.932096146e-01f, -1.933217312e-01f,
+-1.934334422e-01f, -1.935447476e-01f, -1.936556475e-01f, -1.937661420e-01f, -1.938762312e-01f, -1.939859152e-01f, -1.940951940e-01f, -1.942040678e-01f, -1.943125367e-01f, -1.944206007e-01f,
+-1.945282599e-01f, -1.946355145e-01f, -1.947423645e-01f, -1.948488101e-01f, -1.949548513e-01f, -1.950604881e-01f, -1.951657208e-01f, -1.952705494e-01f, -1.953749741e-01f, -1.954789948e-01f,
+-1.955826117e-01f, -1.956858249e-01f, -1.957886345e-01f, -1.958910407e-01f, -1.959930434e-01f, -1.960946428e-01f, -1.961958390e-01f, -1.962966322e-01f, -1.963970223e-01f, -1.964970096e-01f,
+-1.965965940e-01f, -1.966957758e-01f, -1.967945549e-01f, -1.968929316e-01f, -1.969909060e-01f, -1.970884780e-01f, -1.971856479e-01f, -1.972824158e-01f, -1.973787816e-01f, -1.974747457e-01f,
+-1.975703080e-01f, -1.976654686e-01f, -1.977602278e-01f, -1.978545855e-01f, -1.979485419e-01f, -1.980420972e-01f, -1.981352513e-01f, -1.982280045e-01f, -1.983203568e-01f, -1.984123083e-01f,
+-1.985038592e-01f, -1.985950096e-01f, -1.986857596e-01f, -1.987761093e-01f, -1.988660587e-01f, -1.989556081e-01f, -1.990447576e-01f, -1.991335072e-01f, -1.992218570e-01f, -1.993098073e-01f,
+-1.993973581e-01f, -1.994845094e-01f, -1.995712615e-01f, -1.996576145e-01f, -1.997435684e-01f, -1.998291235e-01f, -1.999142797e-01f, -1.999990373e-01f, -2.000833963e-01f, -2.001673569e-01f,
+-2.002509191e-01f, -2.003340832e-01f, -2.004168492e-01f, -2.004992173e-01f, -2.005811875e-01f, -2.006627601e-01f, -2.007439351e-01f, -2.008247126e-01f, -2.009050928e-01f, -2.009850758e-01f,
+-2.010646617e-01f, -2.011438506e-01f, -2.012226428e-01f, -2.013010382e-01f, -2.013790371e-01f, -2.014566395e-01f, -2.015338456e-01f, -2.016106555e-01f, -2.016870694e-01f, -2.017630873e-01f,
+-2.018387094e-01f, -2.019139358e-01f, -2.019887668e-01f, -2.020632023e-01f, -2.021372425e-01f, -2.022108876e-01f, -2.022841376e-01f, -2.023569928e-01f, -2.024294532e-01f, -2.025015191e-01f,
+-2.025731904e-01f, -2.026444674e-01f, -2.027153502e-01f, -2.027858389e-01f, -2.028559337e-01f, -2.029256346e-01f, -2.029949419e-01f, -2.030638557e-01f, -2.031323761e-01f, -2.032005032e-01f,
+-2.032682372e-01f, -2.033355783e-01f, -2.034025265e-01f, -2.034690820e-01f, -2.035352449e-01f, -2.036010154e-01f, -2.036663937e-01f, -2.037313798e-01f, -2.037959739e-01f, -2.038601762e-01f,
+-2.039239868e-01f, -2.039874058e-01f, -2.040504334e-01f, -2.041130697e-01f, -2.041753149e-01f, -2.042371691e-01f, -2.042986324e-01f, -2.043597051e-01f, -2.044203872e-01f, -2.044806789e-01f,
+-2.045405803e-01f, -2.046000917e-01f, -2.046592131e-01f, -2.047179446e-01f, -2.047762866e-01f, -2.048342390e-01f, -2.048918020e-01f, -2.049489758e-01f, -2.050057606e-01f, -2.050621564e-01f,
+-2.051181635e-01f, -2.051737820e-01f, -2.052290120e-01f, -2.052838537e-01f, -2.053383073e-01f, -2.053923729e-01f, -2.054460506e-01f, -2.054993406e-01f, -2.055522432e-01f, -2.056047583e-01f,
+-2.056568862e-01f, -2.057086270e-01f, -2.057599810e-01f, -2.058109481e-01f, -2.058615287e-01f, -2.059117229e-01f, -2.059615307e-01f, -2.060109525e-01f, -2.060599882e-01f, -2.061086382e-01f,
+-2.061569025e-01f, -2.062047814e-01f, -2.062522749e-01f, -2.062993833e-01f, -2.063461066e-01f, -2.063924452e-01f, -2.064383990e-01f, -2.064839684e-01f, -2.065291534e-01f, -2.065739542e-01f,
+-2.066183710e-01f, -2.066624039e-01f, -2.067060531e-01f, -2.067493188e-01f, -2.067922012e-01f, -2.068347004e-01f, -2.068768165e-01f, -2.069185498e-01f, -2.069599003e-01f, -2.070008684e-01f,
+-2.070414541e-01f, -2.070816576e-01f, -2.071214791e-01f, -2.071609187e-01f, -2.071999767e-01f, -2.072386531e-01f, -2.072769482e-01f, -2.073148621e-01f, -2.073523951e-01f, -2.073895472e-01f,
+-2.074263187e-01f, -2.074627096e-01f, -2.074987203e-01f, -2.075343509e-01f, -2.075696014e-01f, -2.076044723e-01f, -2.076389634e-01f, -2.076730752e-01f, -2.077068077e-01f, -2.077401611e-01f,
+-2.077731356e-01f, -2.078057314e-01f, -2.078379487e-01f, -2.078697875e-01f, -2.079012482e-01f, -2.079323308e-01f, -2.079630356e-01f, -2.079933628e-01f, -2.080233124e-01f, -2.080528848e-01f,
+-2.080820801e-01f, -2.081108984e-01f, -2.081393399e-01f, -2.081674049e-01f, -2.081950935e-01f, -2.082224059e-01f, -2.082493422e-01f, -2.082759027e-01f, -2.083020876e-01f, -2.083278970e-01f,
+-2.083533310e-01f, -2.083783900e-01f, -2.084030741e-01f, -2.084273834e-01f, -2.084513182e-01f, -2.084748786e-01f, -2.084980648e-01f, -2.085208771e-01f, -2.085433155e-01f, -2.085653804e-01f,
+-2.085870718e-01f, -2.086083899e-01f, -2.086293351e-01f, -2.086499074e-01f, -2.086701070e-01f, -2.086899341e-01f, -2.087093890e-01f, -2.087284717e-01f, -2.087471826e-01f, -2.087655218e-01f,
+-2.087834894e-01f, -2.088010857e-01f, -2.088183109e-01f, -2.088351652e-01f, -2.088516487e-01f, -2.088677616e-01f, -2.088835042e-01f, -2.088988767e-01f, -2.089138792e-01f, -2.089285119e-01f,
+-2.089427751e-01f, -2.089566689e-01f, -2.089701935e-01f, -2.089833491e-01f, -2.089961360e-01f, -2.090085543e-01f, -2.090206042e-01f, -2.090322859e-01f, -2.090435996e-01f, -2.090545456e-01f,
+-2.090651239e-01f, -2.090753349e-01f, -2.090851787e-01f, -2.090946556e-01f, -2.091037656e-01f, -2.091125091e-01f, -2.091208862e-01f, -2.091288971e-01f, -2.091365421e-01f, -2.091438213e-01f,
+-2.091507350e-01f, -2.091572833e-01f, -2.091634664e-01f, -2.091692846e-01f, -2.091747381e-01f, -2.091798271e-01f, -2.091845517e-01f, -2.091889122e-01f, -2.091929088e-01f, -2.091965417e-01f,
+-2.091998111e-01f, -2.092027172e-01f, -2.092052602e-01f, -2.092074404e-01f, -2.092092579e-01f, -2.092107130e-01f, -2.092118058e-01f, -2.092125366e-01f, -2.092129056e-01f, -2.092129130e-01f,
+-2.092125589e-01f, -2.092118438e-01f, -2.092107676e-01f, -2.092093307e-01f, -2.092075332e-01f, -2.092053754e-01f, -2.092028575e-01f, -2.091999797e-01f, -2.091967423e-01f, -2.091931453e-01f,
+-2.091891891e-01f, -2.091848739e-01f, -2.091801998e-01f, -2.091751672e-01f, -2.091697761e-01f, -2.091640269e-01f, -2.091579197e-01f, -2.091514548e-01f, -2.091446324e-01f, -2.091374527e-01f,
+-2.091299159e-01f, -2.091220222e-01f, -2.091137719e-01f, -2.091051652e-01f, -2.090962023e-01f, -2.090868834e-01f, -2.090772088e-01f, -2.090671787e-01f, -2.090567932e-01f, -2.090460526e-01f,
+-2.090349572e-01f, -2.090235072e-01f, -2.090117027e-01f, -2.089995440e-01f, -2.089870314e-01f, -2.089741650e-01f, -2.089609451e-01f, -2.089473719e-01f, -2.089334457e-01f, -2.089191666e-01f,
+-2.089045348e-01f, -2.088895507e-01f, -2.088742145e-01f, -2.088585263e-01f, -2.088424864e-01f, -2.088260951e-01f, -2.088093524e-01f, -2.087922588e-01f, -2.087748144e-01f, -2.087570194e-01f,
+-2.087388741e-01f, -2.087203787e-01f, -2.087015335e-01f, -2.086823386e-01f, -2.086627943e-01f, -2.086429008e-01f, -2.086226584e-01f, -2.086020673e-01f, -2.085811277e-01f, -2.085598398e-01f,
+-2.085382040e-01f, -2.085162204e-01f, -2.084938892e-01f, -2.084712108e-01f, -2.084481853e-01f, -2.084248129e-01f, -2.084010940e-01f, -2.083770287e-01f, -2.083526173e-01f, -2.083278600e-01f,
+-2.083027570e-01f, -2.082773086e-01f, -2.082515151e-01f, -2.082253766e-01f, -2.081988935e-01f, -2.081720658e-01f, -2.081448940e-01f, -2.081173782e-01f, -2.080895186e-01f, -2.080613156e-01f,
+-2.080327692e-01f, -2.080038799e-01f, -2.079746478e-01f, -2.079450732e-01f, -2.079151563e-01f, -2.078848973e-01f, -2.078542965e-01f, -2.078233542e-01f, -2.077920705e-01f, -2.077604458e-01f,
+-2.077284802e-01f, -2.076961741e-01f, -2.076635276e-01f, -2.076305410e-01f, -2.075972146e-01f, -2.075635486e-01f, -2.075295432e-01f, -2.074951987e-01f, -2.074605154e-01f, -2.074254934e-01f,
+-2.073901330e-01f, -2.073544346e-01f, -2.073183982e-01f, -2.072820243e-01f, -2.072453129e-01f, -2.072082645e-01f, -2.071708791e-01f, -2.071331572e-01f, -2.070950988e-01f, -2.070567044e-01f,
+-2.070179741e-01f, -2.069789081e-01f, -2.069395068e-01f, -2.068997703e-01f, -2.068596990e-01f, -2.068192931e-01f, -2.067785528e-01f, -2.067374784e-01f, -2.066960701e-01f, -2.066543283e-01f,
+-2.066122531e-01f, -2.065698448e-01f, -2.065271037e-01f, -2.064840300e-01f, -2.064406240e-01f, -2.063968859e-01f, -2.063528159e-01f, -2.063084145e-01f, -2.062636817e-01f, -2.062186179e-01f,
+-2.061732233e-01f, -2.061274982e-01f, -2.060814428e-01f, -2.060350574e-01f, -2.059883422e-01f, -2.059412976e-01f, -2.058939237e-01f, -2.058462209e-01f, -2.057981893e-01f, -2.057498293e-01f,
+-2.057011411e-01f, -2.056521250e-01f, -2.056027812e-01f, -2.055531100e-01f, -2.055031116e-01f, -2.054527864e-01f, -2.054021345e-01f, -2.053511563e-01f, -2.052998520e-01f, -2.052482219e-01f,
+-2.051962662e-01f, -2.051439852e-01f, -2.050913791e-01f, -2.050384483e-01f, -2.049851930e-01f, -2.049316135e-01f, -2.048777099e-01f, -2.048234827e-01f, -2.047689320e-01f, -2.047140582e-01f,
+-2.046588614e-01f, -2.046033420e-01f, -2.045475002e-01f, -2.044913363e-01f, -2.044348506e-01f, -2.043780433e-01f, -2.043209147e-01f, -2.042634651e-01f, -2.042056947e-01f, -2.041476039e-01f,
+-2.040891928e-01f, -2.040304618e-01f, -2.039714111e-01f, -2.039120409e-01f, -2.038523517e-01f, -2.037923436e-01f, -2.037320169e-01f, -2.036713718e-01f, -2.036104088e-01f, -2.035491279e-01f,
+-2.034875296e-01f, -2.034256140e-01f, -2.033633815e-01f, -2.033008323e-01f, -2.032379666e-01f, -2.031747849e-01f, -2.031112873e-01f, -2.030474741e-01f, -2.029833457e-01f, -2.029189022e-01f,
+-2.028541439e-01f, -2.027890712e-01f, -2.027236843e-01f, -2.026579834e-01f, -2.025919689e-01f, -2.025256411e-01f, -2.024590002e-01f, -2.023920464e-01f, -2.023247802e-01f, -2.022572016e-01f,
+-2.021893111e-01f, -2.021211090e-01f, -2.020525954e-01f, -2.019837706e-01f, -2.019146351e-01f, -2.018451889e-01f, -2.017754325e-01f, -2.017053660e-01f, -2.016349899e-01f, -2.015643043e-01f,
+-2.014933095e-01f, -2.014220058e-01f, -2.013503936e-01f, -2.012784730e-01f, -2.012062444e-01f, -2.011337081e-01f, -2.010608643e-01f, -2.009877133e-01f, -2.009142555e-01f, -2.008404910e-01f,
+-2.007664202e-01f, -2.006920433e-01f, -2.006173608e-01f, -2.005423727e-01f, -2.004670795e-01f, -2.003914813e-01f, -2.003155786e-01f, -2.002393715e-01f, -2.001628605e-01f, -2.000860456e-01f,
+-2.000089273e-01f, -1.999315059e-01f, -1.998537815e-01f, -1.997757546e-01f, -1.996974254e-01f, -1.996187941e-01f, -1.995398612e-01f, -1.994606268e-01f, -1.993810912e-01f, -1.993012548e-01f,
+-1.992211179e-01f, -1.991406807e-01f, -1.990599434e-01f, -1.989789066e-01f, -1.988975703e-01f, -1.988159349e-01f, -1.987340007e-01f, -1.986517680e-01f, -1.985692370e-01f, -1.984864081e-01f,
+-1.984032816e-01f, -1.983198577e-01f, -1.982361368e-01f, -1.981521192e-01f, -1.980678050e-01f, -1.979831947e-01f, -1.978982886e-01f, -1.978130868e-01f, -1.977275898e-01f, -1.976417978e-01f,
+-1.975557111e-01f, -1.974693300e-01f, -1.973826548e-01f, -1.972956858e-01f, -1.972084233e-01f, -1.971208676e-01f, -1.970330190e-01f, -1.969448778e-01f, -1.968564443e-01f, -1.967677187e-01f,
+-1.966787015e-01f, -1.965893928e-01f, -1.964997931e-01f, -1.964099025e-01f, -1.963197214e-01f, -1.962292501e-01f, -1.961384889e-01f, -1.960474380e-01f, -1.959560979e-01f, -1.958644687e-01f,
+-1.957725508e-01f, -1.956803446e-01f, -1.955878502e-01f, -1.954950680e-01f, -1.954019983e-01f, -1.953086414e-01f, -1.952149976e-01f, -1.951210673e-01f, -1.950268506e-01f, -1.949323480e-01f,
+-1.948375596e-01f, -1.947424859e-01f, -1.946471272e-01f, -1.945514836e-01f, -1.944555556e-01f, -1.943593435e-01f, -1.942628475e-01f, -1.941660679e-01f, -1.940690051e-01f, -1.939716594e-01f,
+-1.938740310e-01f, -1.937761204e-01f, -1.936779277e-01f, -1.935794533e-01f, -1.934806975e-01f, -1.933816606e-01f, -1.932823430e-01f, -1.931827449e-01f, -1.930828666e-01f, -1.929827084e-01f,
+-1.928822707e-01f, -1.927815538e-01f, -1.926805579e-01f, -1.925792834e-01f, -1.924777307e-01f, -1.923758999e-01f, -1.922737914e-01f, -1.921714055e-01f, -1.920687426e-01f, -1.919658029e-01f,
+-1.918625868e-01f, -1.917590946e-01f, -1.916553265e-01f, -1.915512829e-01f, -1.914469642e-01f, -1.913423705e-01f, -1.912375023e-01f, -1.911323598e-01f, -1.910269434e-01f, -1.909212533e-01f,
+-1.908152899e-01f, -1.907090536e-01f, -1.906025445e-01f, -1.904957631e-01f, -1.903887096e-01f, -1.902813844e-01f, -1.901737877e-01f, -1.900659199e-01f, -1.899577813e-01f, -1.898493723e-01f,
+-1.897406931e-01f, -1.896317440e-01f, -1.895225254e-01f, -1.894130376e-01f, -1.893032809e-01f, -1.891932556e-01f, -1.890829620e-01f, -1.889724005e-01f, -1.888615714e-01f, -1.887504750e-01f,
+-1.886391115e-01f, -1.885274814e-01f, -1.884155850e-01f, -1.883034225e-01f, -1.881909943e-01f, -1.880783007e-01f, -1.879653420e-01f, -1.878521186e-01f, -1.877386307e-01f, -1.876248788e-01f,
+-1.875108630e-01f, -1.873965837e-01f, -1.872820413e-01f, -1.871672361e-01f, -1.870521684e-01f, -1.869368384e-01f, -1.868212466e-01f, -1.867053933e-01f, -1.865892787e-01f, -1.864729033e-01f,
+-1.863562673e-01f, -1.862393710e-01f, -1.861222147e-01f, -1.860047989e-01f, -1.858871238e-01f, -1.857691898e-01f, -1.856509971e-01f, -1.855325461e-01f, -1.854138371e-01f, -1.852948704e-01f,
+-1.851756464e-01f, -1.850561654e-01f, -1.849364277e-01f, -1.848164337e-01f, -1.846961836e-01f, -1.845756778e-01f, -1.844549167e-01f, -1.843339005e-01f, -1.842126295e-01f, -1.840911042e-01f,
+-1.839693247e-01f, -1.838472916e-01f, -1.837250050e-01f, -1.836024653e-01f, -1.834796728e-01f, -1.833566280e-01f, -1.832333310e-01f, -1.831097822e-01f, -1.829859820e-01f, -1.828619306e-01f,
+-1.827376285e-01f, -1.826130759e-01f, -1.824882732e-01f, -1.823632206e-01f, -1.822379186e-01f, -1.821123675e-01f, -1.819865675e-01f, -1.818605190e-01f, -1.817342224e-01f, -1.816076780e-01f,
+-1.814808861e-01f, -1.813538470e-01f, -1.812265611e-01f, -1.810990287e-01f, -1.809712501e-01f, -1.808432257e-01f, -1.807149558e-01f, -1.805864408e-01f, -1.804576809e-01f, -1.803286765e-01f,
+-1.801994279e-01f, -1.800699355e-01f, -1.799401996e-01f, -1.798102205e-01f, -1.796799986e-01f, -1.795495342e-01f, -1.794188276e-01f, -1.792878792e-01f, -1.791566892e-01f, -1.790252582e-01f,
+-1.788935862e-01f, -1.787616738e-01f, -1.786295213e-01f, -1.784971289e-01f, -1.783644970e-01f, -1.782316260e-01f, -1.780985162e-01f, -1.779651679e-01f, -1.778315814e-01f, -1.776977571e-01f,
+-1.775636954e-01f, -1.774293965e-01f, -1.772948609e-01f, -1.771600887e-01f, -1.770250805e-01f, -1.768898365e-01f, -1.767543570e-01f, -1.766186424e-01f, -1.764826931e-01f, -1.763465093e-01f,
+-1.762100914e-01f, -1.760734398e-01f, -1.759365547e-01f, -1.757994366e-01f, -1.756620858e-01f, -1.755245025e-01f, -1.753866872e-01f, -1.752486402e-01f, -1.751103618e-01f, -1.749718524e-01f,
+-1.748331122e-01f, -1.746941417e-01f, -1.745549412e-01f, -1.744155110e-01f, -1.742758515e-01f, -1.741359630e-01f, -1.739958458e-01f, -1.738555003e-01f, -1.737149269e-01f, -1.735741258e-01f,
+-1.734330975e-01f, -1.732918422e-01f, -1.731503603e-01f, -1.730086521e-01f, -1.728667180e-01f, -1.727245584e-01f, -1.725821735e-01f, -1.724395637e-01f, -1.722967294e-01f, -1.721536709e-01f,
+-1.720103885e-01f, -1.718668826e-01f, -1.717231536e-01f, -1.715792017e-01f, -1.714350273e-01f, -1.712906308e-01f, -1.711460125e-01f, -1.710011728e-01f, -1.708561120e-01f, -1.707108304e-01f,
+-1.705653284e-01f, -1.704196063e-01f, -1.702736645e-01f, -1.701275033e-01f, -1.699811231e-01f, -1.698345242e-01f, -1.696877070e-01f, -1.695406718e-01f, -1.693934189e-01f, -1.692459488e-01f,
+-1.690982617e-01f, -1.689503579e-01f, -1.688022380e-01f, -1.686539021e-01f, -1.685053506e-01f, -1.683565840e-01f, -1.682076024e-01f, -1.680584064e-01f, -1.679089961e-01f, -1.677593721e-01f,
+-1.676095346e-01f, -1.674594839e-01f, -1.673092205e-01f, -1.671587446e-01f, -1.670080567e-01f, -1.668571570e-01f, -1.667060459e-01f, -1.665547238e-01f, -1.664031910e-01f, -1.662514479e-01f,
+-1.660994948e-01f, -1.659473320e-01f, -1.657949600e-01f, -1.656423790e-01f, -1.654895895e-01f, -1.653365917e-01f, -1.651833860e-01f, -1.650299728e-01f, -1.648763524e-01f, -1.647225251e-01f,
+-1.645684914e-01f, -1.644142516e-01f, -1.642598059e-01f, -1.641051549e-01f, -1.639502987e-01f, -1.637952379e-01f, -1.636399726e-01f, -1.634845034e-01f, -1.633288305e-01f, -1.631729542e-01f,
+-1.630168750e-01f, -1.628605932e-01f, -1.627041091e-01f, -1.625474231e-01f, -1.623905356e-01f, -1.622334468e-01f, -1.620761573e-01f, -1.619186672e-01f, -1.617609769e-01f, -1.616030869e-01f,
+-1.614449975e-01f, -1.612867089e-01f, -1.611282217e-01f, -1.609695361e-01f, -1.608106524e-01f, -1.606515711e-01f, -1.604922925e-01f, -1.603328169e-01f, -1.601731447e-01f, -1.600132763e-01f,
+-1.598532120e-01f, -1.596929521e-01f, -1.595324971e-01f, -1.593718472e-01f, -1.592110029e-01f, -1.590499645e-01f, -1.588887323e-01f, -1.587273066e-01f, -1.585656880e-01f, -1.584038766e-01f,
+-1.582418730e-01f, -1.580796773e-01f, -1.579172900e-01f, -1.577547115e-01f, -1.575919420e-01f, -1.574289820e-01f, -1.572658318e-01f, -1.571024917e-01f, -1.569389622e-01f, -1.567752435e-01f,
+-1.566113361e-01f, -1.564472402e-01f, -1.562829563e-01f, -1.561184847e-01f, -1.559538258e-01f, -1.557889799e-01f, -1.556239473e-01f, -1.554587285e-01f, -1.552933238e-01f, -1.551277336e-01f,
+-1.549619581e-01f, -1.547959978e-01f, -1.546298531e-01f, -1.544635242e-01f, -1.542970115e-01f, -1.541303155e-01f, -1.539634364e-01f, -1.537963747e-01f, -1.536291306e-01f, -1.534617046e-01f,
+-1.532940969e-01f, -1.531263081e-01f, -1.529583383e-01f, -1.527901880e-01f, -1.526218575e-01f, -1.524533473e-01f, -1.522846576e-01f, -1.521157888e-01f, -1.519467413e-01f, -1.517775154e-01f,
+-1.516081115e-01f, -1.514385300e-01f, -1.512687711e-01f, -1.510988354e-01f, -1.509287231e-01f, -1.507584346e-01f, -1.505879703e-01f, -1.504173304e-01f, -1.502465155e-01f, -1.500755258e-01f,
+-1.499043617e-01f, -1.497330236e-01f, -1.495615118e-01f, -1.493898266e-01f, -1.492179686e-01f, -1.490459379e-01f, -1.488737350e-01f, -1.487013603e-01f, -1.485288140e-01f, -1.483560966e-01f,
+-1.481832084e-01f, -1.480101498e-01f, -1.478369212e-01f, -1.476635228e-01f, -1.474899552e-01f, -1.473162185e-01f, -1.471423133e-01f, -1.469682398e-01f, -1.467939984e-01f, -1.466195895e-01f,
+-1.464450135e-01f, -1.462702706e-01f, -1.460953614e-01f, -1.459202860e-01f, -1.457450450e-01f, -1.455696386e-01f, -1.453940673e-01f, -1.452183313e-01f, -1.450424311e-01f, -1.448663670e-01f,
+-1.446901394e-01f, -1.445137486e-01f, -1.443371950e-01f, -1.441604790e-01f, -1.439836010e-01f, -1.438065612e-01f, -1.436293601e-01f, -1.434519980e-01f, -1.432744753e-01f, -1.430967924e-01f,
+-1.429189496e-01f, -1.427409473e-01f, -1.425627858e-01f, -1.423844655e-01f, -1.422059868e-01f, -1.420273501e-01f, -1.418485556e-01f, -1.416696038e-01f, -1.414904951e-01f, -1.413112298e-01f,
+-1.411318082e-01f, -1.409522308e-01f, -1.407724978e-01f, -1.405926098e-01f, -1.404125669e-01f, -1.402323697e-01f, -1.400520184e-01f, -1.398715134e-01f, -1.396908551e-01f, -1.395100439e-01f,
+-1.393290801e-01f, -1.391479640e-01f, -1.389666962e-01f, -1.387852768e-01f, -1.386037064e-01f, -1.384219851e-01f, -1.382401135e-01f, -1.380580919e-01f, -1.378759206e-01f, -1.376936001e-01f,
+-1.375111306e-01f, -1.373285126e-01f, -1.371457464e-01f, -1.369628323e-01f, -1.367797708e-01f, -1.365965623e-01f, -1.364132070e-01f, -1.362297053e-01f, -1.360460577e-01f, -1.358622644e-01f,
+-1.356783259e-01f, -1.354942425e-01f, -1.353100146e-01f, -1.351256425e-01f, -1.349411266e-01f, -1.347564673e-01f, -1.345716650e-01f, -1.343867200e-01f, -1.342016327e-01f, -1.340164034e-01f,
+-1.338310325e-01f, -1.336455204e-01f, -1.334598675e-01f, -1.332740740e-01f, -1.330881405e-01f, -1.329020672e-01f, -1.327158546e-01f, -1.325295029e-01f, -1.323430126e-01f, -1.321563840e-01f,
+-1.319696175e-01f, -1.317827134e-01f, -1.315956722e-01f, -1.314084942e-01f, -1.312211797e-01f, -1.310337291e-01f, -1.308461429e-01f, -1.306584213e-01f, -1.304705648e-01f, -1.302825736e-01f,
+-1.300944483e-01f, -1.299061890e-01f, -1.297177963e-01f, -1.295292704e-01f, -1.293406118e-01f, -1.291518208e-01f, -1.289628978e-01f, -1.287738431e-01f, -1.285846571e-01f, -1.283953403e-01f,
+-1.282058928e-01f, -1.280163152e-01f, -1.278266078e-01f, -1.276367709e-01f, -1.274468050e-01f, -1.272567103e-01f, -1.270664873e-01f, -1.268761363e-01f, -1.266856578e-01f, -1.264950520e-01f,
+-1.263043193e-01f, -1.261134601e-01f, -1.259224749e-01f, -1.257313638e-01f, -1.255401274e-01f, -1.253487659e-01f, -1.251572798e-01f, -1.249656694e-01f, -1.247739351e-01f, -1.245820772e-01f,
+-1.243900962e-01f, -1.241979924e-01f, -1.240057661e-01f, -1.238134177e-01f, -1.236209477e-01f, -1.234283563e-01f, -1.232356439e-01f, -1.230428110e-01f, -1.228498578e-01f, -1.226567847e-01f,
+-1.224635922e-01f, -1.222702806e-01f, -1.220768502e-01f, -1.218833014e-01f, -1.216896346e-01f, -1.214958502e-01f, -1.213019485e-01f, -1.211079298e-01f, -1.209137947e-01f, -1.207195434e-01f,
+-1.205251762e-01f, -1.203306937e-01f, -1.201360961e-01f, -1.199413838e-01f, -1.197465572e-01f, -1.195516166e-01f, -1.193565624e-01f, -1.191613950e-01f, -1.189661148e-01f, -1.187707221e-01f,
+-1.185752173e-01f, -1.183796007e-01f, -1.181838728e-01f, -1.179880339e-01f, -1.177920844e-01f, -1.175960245e-01f, -1.173998548e-01f, -1.172035756e-01f, -1.170071872e-01f, -1.168106900e-01f,
+-1.166140845e-01f, -1.164173708e-01f, -1.162205495e-01f, -1.160236209e-01f, -1.158265853e-01f, -1.156294432e-01f, -1.154321948e-01f, -1.152348407e-01f, -1.150373810e-01f, -1.148398163e-01f,
+-1.146421468e-01f, -1.144443730e-01f, -1.142464952e-01f, -1.140485138e-01f, -1.138504291e-01f, -1.136522416e-01f, -1.134539515e-01f, -1.132555593e-01f, -1.130570653e-01f, -1.128584700e-01f,
+-1.126597735e-01f, -1.124609765e-01f, -1.122620791e-01f, -1.120630818e-01f, -1.118639849e-01f, -1.116647888e-01f, -1.114654940e-01f, -1.112661006e-01f, -1.110666092e-01f, -1.108670201e-01f,
+-1.106673336e-01f, -1.104675501e-01f, -1.102676701e-01f, -1.100676937e-01f, -1.098676216e-01f, -1.096674539e-01f, -1.094671911e-01f, -1.092668335e-01f, -1.090663815e-01f, -1.088658355e-01f,
+-1.086651958e-01f, -1.084644629e-01f, -1.082636370e-01f, -1.080627186e-01f, -1.078617080e-01f, -1.076606055e-01f, -1.074594117e-01f, -1.072581267e-01f, -1.070567510e-01f, -1.068552850e-01f,
+-1.066537291e-01f, -1.064520835e-01f, -1.062503486e-01f, -1.060485249e-01f, -1.058466128e-01f, -1.056446124e-01f, -1.054425243e-01f, -1.052403489e-01f, -1.050380863e-01f, -1.048357372e-01f,
+-1.046333017e-01f, -1.044307803e-01f, -1.042281734e-01f, -1.040254812e-01f, -1.038227043e-01f, -1.036198429e-01f, -1.034168974e-01f, -1.032138682e-01f, -1.030107557e-01f, -1.028075601e-01f,
+-1.026042820e-01f, -1.024009216e-01f, -1.021974794e-01f, -1.019939556e-01f, -1.017903507e-01f, -1.015866650e-01f, -1.013828989e-01f, -1.011790528e-01f, -1.009751270e-01f, -1.007711219e-01f,
+-1.005670379e-01f, -1.003628753e-01f, -1.001586345e-01f, -9.995431581e-02f, -9.974991970e-02f, -9.954544649e-02f, -9.934089655e-02f, -9.913627025e-02f, -9.893156794e-02f, -9.872679000e-02f,
+-9.852193680e-02f, -9.831700870e-02f, -9.811200607e-02f, -9.790692927e-02f, -9.770177868e-02f, -9.749655465e-02f, -9.729125757e-02f, -9.708588778e-02f, -9.688044566e-02f, -9.667493158e-02f,
+-9.646934590e-02f, -9.626368899e-02f, -9.605796122e-02f, -9.585216294e-02f, -9.564629454e-02f, -9.544035636e-02f, -9.523434879e-02f, -9.502827218e-02f, -9.482212690e-02f, -9.461591333e-02f,
+-9.440963181e-02f, -9.420328273e-02f, -9.399686644e-02f, -9.379038331e-02f, -9.358383371e-02f, -9.337721800e-02f, -9.317053654e-02f, -9.296378972e-02f, -9.275697788e-02f, -9.255010139e-02f,
+-9.234316063e-02f, -9.213615595e-02f, -9.192908772e-02f, -9.172195630e-02f, -9.151476207e-02f, -9.130750538e-02f, -9.110018660e-02f, -9.089280610e-02f, -9.068536424e-02f, -9.047786138e-02f,
+-9.027029789e-02f, -9.006267414e-02f, -8.985499049e-02f, -8.964724729e-02f, -8.943944493e-02f, -8.923158376e-02f, -8.902366414e-02f, -8.881568645e-02f, -8.860765104e-02f, -8.839955828e-02f,
+-8.819140853e-02f, -8.798320216e-02f, -8.777493953e-02f, -8.756662100e-02f, -8.735824695e-02f, -8.714981772e-02f, -8.694133369e-02f, -8.673279522e-02f, -8.652420267e-02f, -8.631555641e-02f,
+-8.610685680e-02f, -8.589810419e-02f, -8.568929897e-02f, -8.548044148e-02f, -8.527153210e-02f, -8.506257117e-02f, -8.485355908e-02f, -8.464449618e-02f, -8.443538282e-02f, -8.422621939e-02f,
+-8.401700623e-02f, -8.380774371e-02f, -8.359843219e-02f, -8.338907204e-02f, -8.317966362e-02f, -8.297020728e-02f, -8.276070340e-02f, -8.255115233e-02f, -8.234155443e-02f, -8.213191007e-02f,
+-8.192221961e-02f, -8.171248341e-02f, -8.150270183e-02f, -8.129287523e-02f, -8.108300398e-02f, -8.087308843e-02f, -8.066312895e-02f, -8.045312590e-02f, -8.024307963e-02f, -8.003299052e-02f,
+-7.982285891e-02f, -7.961268518e-02f, -7.940246968e-02f, -7.919221277e-02f, -7.898191481e-02f, -7.877157617e-02f, -7.856119719e-02f, -7.835077826e-02f, -7.814031971e-02f, -7.792982192e-02f,
+-7.771928525e-02f, -7.750871004e-02f, -7.729809667e-02f, -7.708744549e-02f, -7.687675687e-02f, -7.666603115e-02f, -7.645526871e-02f, -7.624446990e-02f, -7.603363507e-02f, -7.582276459e-02f,
+-7.561185882e-02f, -7.540091812e-02f, -7.518994284e-02f, -7.497893334e-02f, -7.476788999e-02f, -7.455681314e-02f, -7.434570314e-02f, -7.413456036e-02f, -7.392338516e-02f, -7.371217788e-02f,
+-7.350093890e-02f, -7.328966857e-02f, -7.307836724e-02f, -7.286703528e-02f, -7.265567304e-02f, -7.244428088e-02f, -7.223285915e-02f, -7.202140822e-02f, -7.180992843e-02f, -7.159842015e-02f,
+-7.138688374e-02f, -7.117531955e-02f, -7.096372794e-02f, -7.075210925e-02f, -7.054046386e-02f, -7.032879212e-02f, -7.011709438e-02f, -6.990537099e-02f, -6.969362233e-02f, -6.948184873e-02f,
+-6.927005056e-02f, -6.905822817e-02f, -6.884638192e-02f, -6.863451216e-02f, -6.842261925e-02f, -6.821070354e-02f, -6.799876539e-02f, -6.778680516e-02f, -6.757482319e-02f, -6.736281984e-02f,
+-6.715079548e-02f, -6.693875044e-02f, -6.672668509e-02f, -6.651459978e-02f, -6.630249487e-02f, -6.609037070e-02f, -6.587822764e-02f, -6.566606603e-02f, -6.545388624e-02f, -6.524168860e-02f,
+-6.502947349e-02f, -6.481724124e-02f, -6.460499221e-02f, -6.439272677e-02f, -6.418044525e-02f, -6.396814801e-02f, -6.375583541e-02f, -6.354350779e-02f, -6.333116552e-02f, -6.311880893e-02f,
+-6.290643839e-02f, -6.269405424e-02f, -6.248165685e-02f, -6.226924655e-02f, -6.205682370e-02f, -6.184438866e-02f, -6.163194177e-02f, -6.141948338e-02f, -6.120701385e-02f, -6.099453353e-02f,
+-6.078204277e-02f, -6.056954191e-02f, -6.035703132e-02f, -6.014451133e-02f, -5.993198231e-02f, -5.971944459e-02f, -5.950689854e-02f, -5.929434449e-02f, -5.908178281e-02f, -5.886921383e-02f,
+-5.865663792e-02f, -5.844405541e-02f, -5.823146667e-02f, -5.801887203e-02f, -5.780627184e-02f, -5.759366646e-02f, -5.738105624e-02f, -5.716844151e-02f, -5.695582264e-02f, -5.674319996e-02f,
+-5.653057384e-02f, -5.631794460e-02f, -5.610531261e-02f, -5.589267822e-02f, -5.568004176e-02f, -5.546740358e-02f, -5.525476404e-02f, -5.504212348e-02f, -5.482948224e-02f, -5.461684068e-02f,
+-5.440419914e-02f, -5.419155797e-02f, -5.397891751e-02f, -5.376627811e-02f, -5.355364011e-02f, -5.334100387e-02f, -5.312836973e-02f, -5.291573803e-02f, -5.270310912e-02f, -5.249048334e-02f,
+-5.227786104e-02f, -5.206524257e-02f, -5.185262827e-02f, -5.164001848e-02f, -5.142741356e-02f, -5.121481383e-02f, -5.100221966e-02f, -5.078963137e-02f, -5.057704932e-02f, -5.036447386e-02f,
+-5.015190532e-02f, -4.993934404e-02f, -4.972679038e-02f, -4.951424467e-02f, -4.930170725e-02f, -4.908917848e-02f, -4.887665869e-02f, -4.866414823e-02f, -4.845164744e-02f, -4.823915665e-02f,
+-4.802667622e-02f, -4.781420649e-02f, -4.760174779e-02f, -4.738930047e-02f, -4.717686487e-02f, -4.696444133e-02f, -4.675203019e-02f, -4.653963180e-02f, -4.632724649e-02f, -4.611487461e-02f,
+-4.590251650e-02f, -4.569017249e-02f, -4.547784293e-02f, -4.526552815e-02f, -4.505322850e-02f, -4.484094432e-02f, -4.462867594e-02f, -4.441642371e-02f, -4.420418797e-02f, -4.399196905e-02f,
+-4.377976729e-02f, -4.356758303e-02f, -4.335541662e-02f, -4.314326838e-02f, -4.293113866e-02f, -4.271902780e-02f, -4.250693612e-02f, -4.229486398e-02f, -4.208281171e-02f, -4.187077965e-02f,
+-4.165876812e-02f, -4.144677748e-02f, -4.123480806e-02f, -4.102286019e-02f, -4.081093421e-02f, -4.059903045e-02f, -4.038714926e-02f, -4.017529097e-02f, -3.996345592e-02f, -3.975164444e-02f,
+-3.953985686e-02f, -3.932809352e-02f, -3.911635477e-02f, -3.890464092e-02f, -3.869295232e-02f, -3.848128930e-02f, -3.826965220e-02f, -3.805804135e-02f, -3.784645709e-02f, -3.763489974e-02f,
+-3.742336964e-02f, -3.721186713e-02f, -3.700039254e-02f, -3.678894621e-02f, -3.657752846e-02f, -3.636613962e-02f, -3.615478004e-02f, -3.594345004e-02f, -3.573214996e-02f, -3.552088013e-02f,
+-3.530964088e-02f, -3.509843254e-02f, -3.488725544e-02f, -3.467610992e-02f, -3.446499630e-02f, -3.425391492e-02f, -3.404286611e-02f, -3.383185020e-02f, -3.362086752e-02f, -3.340991840e-02f,
+-3.319900317e-02f, -3.298812215e-02f, -3.277727569e-02f, -3.256646411e-02f, -3.235568773e-02f, -3.214494690e-02f, -3.193424193e-02f, -3.172357315e-02f, -3.151294090e-02f, -3.130234550e-02f,
+-3.109178728e-02f, -3.088126658e-02f, -3.067078370e-02f, -3.046033900e-02f, -3.024993278e-02f, -3.003956538e-02f, -2.982923713e-02f, -2.961894836e-02f, -2.940869938e-02f, -2.919849053e-02f,
+-2.898832213e-02f, -2.877819451e-02f, -2.856810799e-02f, -2.835806291e-02f, -2.814805958e-02f, -2.793809833e-02f, -2.772817949e-02f, -2.751830338e-02f, -2.730847033e-02f, -2.709868065e-02f,
+-2.688893469e-02f, -2.667923275e-02f, -2.646957516e-02f, -2.625996225e-02f, -2.605039434e-02f, -2.584087176e-02f, -2.563139482e-02f, -2.542196385e-02f, -2.521257917e-02f, -2.500324111e-02f,
+-2.479394998e-02f, -2.458470612e-02f, -2.437550984e-02f, -2.416636146e-02f, -2.395726130e-02f, -2.374820969e-02f, -2.353920695e-02f, -2.333025339e-02f, -2.312134935e-02f, -2.291249513e-02f,
+-2.270369106e-02f, -2.249493746e-02f, -2.228623465e-02f, -2.207758295e-02f, -2.186898268e-02f, -2.166043416e-02f, -2.145193770e-02f, -2.124349363e-02f, -2.103510226e-02f, -2.082676392e-02f,
+-2.061847892e-02f, -2.041024757e-02f, -2.020207020e-02f, -1.999394713e-02f, -1.978587867e-02f, -1.957786513e-02f, -1.936990685e-02f, -1.916200412e-02f, -1.895415727e-02f, -1.874636662e-02f,
+-1.853863248e-02f, -1.833095517e-02f, -1.812333500e-02f, -1.791577229e-02f, -1.770826735e-02f, -1.750082050e-02f, -1.729343205e-02f, -1.708610232e-02f, -1.687883162e-02f, -1.667162027e-02f,
+-1.646446858e-02f, -1.625737686e-02f, -1.605034543e-02f, -1.584337460e-02f, -1.563646468e-02f, -1.542961599e-02f, -1.522282884e-02f, -1.501610354e-02f, -1.480944040e-02f, -1.460283974e-02f,
+-1.439630187e-02f, -1.418982709e-02f, -1.398341573e-02f, -1.377706808e-02f, -1.357078447e-02f, -1.336456520e-02f, -1.315841058e-02f, -1.295232093e-02f, -1.274629654e-02f, -1.254033775e-02f,
+-1.233444484e-02f, -1.212861813e-02f, -1.192285794e-02f, -1.171716456e-02f, -1.151153831e-02f, -1.130597950e-02f, -1.110048843e-02f, -1.089506541e-02f, -1.068971075e-02f, -1.048442476e-02f,
+-1.027920775e-02f, -1.007406001e-02f, -9.868981867e-03f, -9.663973615e-03f, -9.459035564e-03f, -9.254168019e-03f, -9.049371287e-03f, -8.844645674e-03f, -8.639991484e-03f, -8.435409022e-03f,
+-8.230898595e-03f, -8.026460505e-03f, -7.822095059e-03f, -7.617802559e-03f, -7.413583310e-03f, -7.209437616e-03f, -7.005365780e-03f, -6.801368105e-03f, -6.597444894e-03f, -6.393596451e-03f,
+-6.189823077e-03f, -5.986125075e-03f, -5.782502747e-03f, -5.578956395e-03f, -5.375486321e-03f, -5.172092825e-03f, -4.968776209e-03f, -4.765536774e-03f, -4.562374821e-03f, -4.359290649e-03f,
+-4.156284560e-03f, -3.953356852e-03f, -3.750507827e-03f, -3.547737782e-03f, -3.345047017e-03f, -3.142435832e-03f, -2.939904524e-03f, -2.737453394e-03f, -2.535082737e-03f, -2.332792854e-03f,
+-2.130584040e-03f, -1.928456595e-03f, -1.726410815e-03f, -1.524446997e-03f, -1.322565438e-03f, -1.120766434e-03f, -9.190502822e-04f, -7.174172781e-04f, -5.158677175e-04f, -3.144018961e-04f,
+-1.130201090e-04f, 8.827734866e-05f, 2.894901821e-04f, 4.906180967e-04f, 6.916607982e-04f, 8.926179926e-04f, 1.093489386e-03f, 1.294274685e-03f, 1.494973596e-03f, 1.695585826e-03f,
+1.896111083e-03f, 2.096549073e-03f, 2.296899505e-03f, 2.497162086e-03f, 2.697336525e-03f, 2.897422530e-03f, 3.097419810e-03f, 3.297328073e-03f, 3.497147029e-03f, 3.696876388e-03f,
+3.896515859e-03f, 4.096065151e-03f, 4.295523976e-03f, 4.494892044e-03f, 4.694169066e-03f, 4.893354751e-03f, 5.092448813e-03f, 5.291450961e-03f, 5.490360909e-03f, 5.689178368e-03f,
+5.887903049e-03f, 6.086534667e-03f, 6.285072933e-03f, 6.483517561e-03f, 6.681868263e-03f, 6.880124754e-03f, 7.078286747e-03f, 7.276353957e-03f, 7.474326097e-03f, 7.672202883e-03f,
+7.869984028e-03f, 8.067669249e-03f, 8.265258260e-03f, 8.462750778e-03f, 8.660146518e-03f, 8.857445196e-03f, 9.054646528e-03f, 9.251750232e-03f, 9.448756025e-03f, 9.645663623e-03f,
+9.842472744e-03f, 1.003918311e-02f, 1.023579443e-02f, 1.043230642e-02f, 1.062871882e-02f, 1.082503132e-02f, 1.102124366e-02f, 1.121735556e-02f, 1.141336672e-02f, 1.160927688e-02f,
+1.180508575e-02f, 1.200079305e-02f, 1.219639851e-02f, 1.239190184e-02f, 1.258730277e-02f, 1.278260101e-02f, 1.297779629e-02f, 1.317288833e-02f, 1.336787686e-02f, 1.356276159e-02f,
+1.375754225e-02f, 1.395221856e-02f, 1.414679024e-02f, 1.434125703e-02f, 1.453561863e-02f, 1.472987478e-02f, 1.492402521e-02f, 1.511806962e-02f, 1.531200776e-02f, 1.550583935e-02f,
+1.569956410e-02f, 1.589318175e-02f, 1.608669203e-02f, 1.628009465e-02f, 1.647338936e-02f, 1.666657586e-02f, 1.685965389e-02f, 1.705262318e-02f, 1.724548346e-02f, 1.743823445e-02f,
+1.763087588e-02f, 1.782340748e-02f, 1.801582898e-02f, 1.820814011e-02f, 1.840034060e-02f, 1.859243017e-02f, 1.878440856e-02f, 1.897627550e-02f, 1.916803071e-02f, 1.935967393e-02f,
+1.955120490e-02f, 1.974262333e-02f, 1.993392896e-02f, 2.012512153e-02f, 2.031620077e-02f, 2.050716640e-02f, 2.069801817e-02f, 2.088875580e-02f, 2.107937903e-02f, 2.126988759e-02f,
+2.146028121e-02f, 2.165055964e-02f, 2.184072259e-02f, 2.203076982e-02f, 2.222070105e-02f, 2.241051602e-02f, 2.260021446e-02f, 2.278979611e-02f, 2.297926071e-02f, 2.316860799e-02f,
+2.335783769e-02f, 2.354694955e-02f, 2.373594330e-02f, 2.392481868e-02f, 2.411357543e-02f, 2.430221329e-02f, 2.449073199e-02f, 2.467913128e-02f, 2.486741089e-02f, 2.505557056e-02f,
+2.524361003e-02f, 2.543152904e-02f, 2.561932734e-02f, 2.580700466e-02f, 2.599456074e-02f, 2.618199533e-02f, 2.636930816e-02f, 2.655649897e-02f, 2.674356752e-02f, 2.693051353e-02f,
+2.711733676e-02f, 2.730403695e-02f, 2.749061383e-02f, 2.767706715e-02f, 2.786339667e-02f, 2.804960211e-02f, 2.823568322e-02f, 2.842163975e-02f, 2.860747145e-02f, 2.879317805e-02f,
+2.897875931e-02f, 2.916421497e-02f, 2.934954477e-02f, 2.953474846e-02f, 2.971982579e-02f, 2.990477651e-02f, 3.008960035e-02f, 3.027429708e-02f, 3.045886643e-02f, 3.064330816e-02f,
+3.082762201e-02f, 3.101180773e-02f, 3.119586507e-02f, 3.137979379e-02f, 3.156359362e-02f, 3.174726432e-02f, 3.193080564e-02f, 3.211421733e-02f, 3.229749914e-02f, 3.248065082e-02f,
+3.266367213e-02f, 3.284656280e-02f, 3.302932261e-02f, 3.321195129e-02f, 3.339444860e-02f, 3.357681430e-02f, 3.375904813e-02f, 3.394114985e-02f, 3.412311922e-02f, 3.430495598e-02f,
+3.448665989e-02f, 3.466823072e-02f, 3.484966820e-02f, 3.503097210e-02f, 3.521214217e-02f, 3.539317816e-02f, 3.557407985e-02f, 3.575484697e-02f, 3.593547929e-02f, 3.611597656e-02f,
+3.629633854e-02f, 3.647656499e-02f, 3.665665567e-02f, 3.683661033e-02f, 3.701642874e-02f, 3.719611065e-02f, 3.737565582e-02f, 3.755506401e-02f, 3.773433498e-02f, 3.791346849e-02f,
+3.809246431e-02f, 3.827132218e-02f, 3.845004188e-02f, 3.862862316e-02f, 3.880706578e-02f, 3.898536951e-02f, 3.916353412e-02f, 3.934155935e-02f, 3.951944498e-02f, 3.969719076e-02f,
+3.987479647e-02f, 4.005226186e-02f, 4.022958671e-02f, 4.040677076e-02f, 4.058381379e-02f, 4.076071557e-02f, 4.093747585e-02f, 4.111409441e-02f, 4.129057101e-02f, 4.146690542e-02f,
+4.164309739e-02f, 4.181914671e-02f, 4.199505313e-02f, 4.217081643e-02f, 4.234643637e-02f, 4.252191272e-02f, 4.269724524e-02f, 4.287243372e-02f, 4.304747791e-02f, 4.322237758e-02f,
+4.339713251e-02f, 4.357174247e-02f, 4.374620722e-02f, 4.392052653e-02f, 4.409470019e-02f, 4.426872795e-02f, 4.444260959e-02f, 4.461634488e-02f, 4.478993360e-02f, 4.496337551e-02f,
+4.513667039e-02f, 4.530981801e-02f, 4.548281815e-02f, 4.565567058e-02f, 4.582837507e-02f, 4.600093140e-02f, 4.617333934e-02f, 4.634559867e-02f, 4.651770916e-02f, 4.668967059e-02f,
+4.686148273e-02f, 4.703314536e-02f, 4.720465827e-02f, 4.737602121e-02f, 4.754723398e-02f, 4.771829634e-02f, 4.788920809e-02f, 4.805996898e-02f, 4.823057882e-02f, 4.840103736e-02f,
+4.857134439e-02f, 4.874149970e-02f, 4.891150306e-02f, 4.908135425e-02f, 4.925105305e-02f, 4.942059924e-02f, 4.958999261e-02f, 4.975923293e-02f, 4.992831998e-02f, 5.009725356e-02f,
+5.026603343e-02f, 5.043465939e-02f, 5.060313122e-02f, 5.077144870e-02f, 5.093961161e-02f, 5.110761974e-02f, 5.127547287e-02f, 5.144317078e-02f, 5.161071327e-02f, 5.177810012e-02f,
+5.194533111e-02f, 5.211240602e-02f, 5.227932466e-02f, 5.244608679e-02f, 5.261269221e-02f, 5.277914071e-02f, 5.294543207e-02f, 5.311156608e-02f, 5.327754253e-02f, 5.344336121e-02f,
+5.360902190e-02f, 5.377452440e-02f, 5.393986850e-02f, 5.410505398e-02f, 5.427008064e-02f, 5.443494826e-02f, 5.459965664e-02f, 5.476420557e-02f, 5.492859484e-02f, 5.509282424e-02f,
+5.525689356e-02f, 5.542080260e-02f, 5.558455114e-02f, 5.574813899e-02f, 5.591156594e-02f, 5.607483177e-02f, 5.623793629e-02f, 5.640087928e-02f, 5.656366055e-02f, 5.672627989e-02f,
+5.688873708e-02f, 5.705103194e-02f, 5.721316425e-02f, 5.737513382e-02f, 5.753694043e-02f, 5.769858389e-02f, 5.786006399e-02f, 5.802138053e-02f, 5.818253331e-02f, 5.834352213e-02f,
+5.850434678e-02f, 5.866500707e-02f, 5.882550279e-02f, 5.898583375e-02f, 5.914599974e-02f, 5.930600057e-02f, 5.946583603e-02f, 5.962550593e-02f, 5.978501007e-02f, 5.994434824e-02f,
+6.010352026e-02f, 6.026252593e-02f, 6.042136504e-02f, 6.058003740e-02f, 6.073854281e-02f, 6.089688109e-02f, 6.105505202e-02f, 6.121305542e-02f, 6.137089109e-02f, 6.152855884e-02f,
+6.168605847e-02f, 6.184338979e-02f, 6.200055260e-02f, 6.215754671e-02f, 6.231437192e-02f, 6.247102806e-02f, 6.262751491e-02f, 6.278383229e-02f, 6.293998001e-02f, 6.309595787e-02f,
+6.325176569e-02f, 6.340740328e-02f, 6.356287043e-02f, 6.371816697e-02f, 6.387329271e-02f, 6.402824745e-02f, 6.418303100e-02f, 6.433764318e-02f, 6.449208380e-02f, 6.464635266e-02f,
+6.480044959e-02f, 6.495437439e-02f, 6.510812688e-02f, 6.526170687e-02f, 6.541511417e-02f, 6.556834861e-02f, 6.572140998e-02f, 6.587429811e-02f, 6.602701281e-02f, 6.617955391e-02f,
+6.633192120e-02f, 6.648411451e-02f, 6.663613366e-02f, 6.678797845e-02f, 6.693964872e-02f, 6.709114427e-02f, 6.724246493e-02f, 6.739361051e-02f, 6.754458083e-02f, 6.769537570e-02f,
+6.784599496e-02f, 6.799643841e-02f, 6.814670588e-02f, 6.829679719e-02f, 6.844671215e-02f, 6.859645060e-02f, 6.874601234e-02f, 6.889539720e-02f, 6.904460501e-02f, 6.919363558e-02f,
+6.934248873e-02f, 6.949116430e-02f, 6.963966210e-02f, 6.978798196e-02f, 6.993612370e-02f, 7.008408714e-02f, 7.023187212e-02f, 7.037947844e-02f, 7.052690595e-02f, 7.067415446e-02f,
+7.082122381e-02f, 7.096811381e-02f, 7.111482429e-02f, 7.126135509e-02f, 7.140770603e-02f, 7.155387693e-02f, 7.169986762e-02f, 7.184567794e-02f, 7.199130771e-02f, 7.213675676e-02f,
+7.228202492e-02f, 7.242711202e-02f, 7.257201789e-02f, 7.271674236e-02f, 7.286128526e-02f, 7.300564642e-02f, 7.314982568e-02f, 7.329382286e-02f, 7.343763780e-02f, 7.358127033e-02f,
+7.372472028e-02f, 7.386798749e-02f, 7.401107178e-02f, 7.415397301e-02f, 7.429669099e-02f, 7.443922556e-02f, 7.458157656e-02f, 7.472374382e-02f, 7.486572719e-02f, 7.500752648e-02f,
+7.514914155e-02f, 7.529057223e-02f, 7.543181835e-02f, 7.557287975e-02f, 7.571375628e-02f, 7.585444776e-02f, 7.599495404e-02f, 7.613527496e-02f, 7.627541035e-02f, 7.641536005e-02f,
+7.655512391e-02f, 7.669470177e-02f, 7.683409346e-02f, 7.697329882e-02f, 7.711231771e-02f, 7.725114995e-02f, 7.738979539e-02f, 7.752825388e-02f, 7.766652526e-02f, 7.780460936e-02f,
+7.794250604e-02f, 7.808021513e-02f, 7.821773648e-02f, 7.835506994e-02f, 7.849221535e-02f, 7.862917255e-02f, 7.876594140e-02f, 7.890252173e-02f, 7.903891339e-02f, 7.917511624e-02f,
+7.931113011e-02f, 7.944695485e-02f, 7.958259032e-02f, 7.971803635e-02f, 7.985329281e-02f, 7.998835952e-02f, 8.012323636e-02f, 8.025792316e-02f, 8.039241977e-02f, 8.052672605e-02f,
+8.066084185e-02f, 8.079476701e-02f, 8.092850139e-02f, 8.106204484e-02f, 8.119539721e-02f, 8.132855835e-02f, 8.146152812e-02f, 8.159430636e-02f, 8.172689294e-02f, 8.185928771e-02f,
+8.199149051e-02f, 8.212350121e-02f, 8.225531966e-02f, 8.238694571e-02f, 8.251837923e-02f, 8.264962006e-02f, 8.278066806e-02f, 8.291152308e-02f, 8.304218500e-02f, 8.317265365e-02f,
+8.330292891e-02f, 8.343301063e-02f, 8.356289866e-02f, 8.369259286e-02f, 8.382209310e-02f, 8.395139924e-02f, 8.408051112e-02f, 8.420942862e-02f, 8.433815160e-02f, 8.446667991e-02f,
+8.459501341e-02f, 8.472315198e-02f, 8.485109546e-02f, 8.497884372e-02f, 8.510639663e-02f, 8.523375404e-02f, 8.536091583e-02f, 8.548788185e-02f, 8.561465197e-02f, 8.574122605e-02f,
+8.586760396e-02f, 8.599378556e-02f, 8.611977072e-02f, 8.624555931e-02f, 8.637115118e-02f, 8.649654621e-02f, 8.662174427e-02f, 8.674674521e-02f, 8.687154892e-02f, 8.699615525e-02f,
+8.712056407e-02f, 8.724477526e-02f, 8.736878869e-02f, 8.749260421e-02f, 8.761622171e-02f, 8.773964105e-02f, 8.786286210e-02f, 8.798588474e-02f, 8.810870883e-02f, 8.823133425e-02f,
+8.835376087e-02f, 8.847598856e-02f, 8.859801719e-02f, 8.871984664e-02f, 8.884147677e-02f, 8.896290748e-02f, 8.908413862e-02f, 8.920517007e-02f, 8.932600171e-02f, 8.944663341e-02f,
+8.956706505e-02f, 8.968729651e-02f, 8.980732765e-02f, 8.992715836e-02f, 9.004678852e-02f, 9.016621800e-02f, 9.028544667e-02f, 9.040447443e-02f, 9.052330114e-02f, 9.064192668e-02f,
+9.076035094e-02f, 9.087857379e-02f, 9.099659512e-02f, 9.111441480e-02f, 9.123203271e-02f, 9.134944874e-02f, 9.146666276e-02f, 9.158367466e-02f, 9.170048433e-02f, 9.181709163e-02f,
+9.193349646e-02f, 9.204969870e-02f, 9.216569824e-02f, 9.228149494e-02f, 9.239708871e-02f, 9.251247943e-02f, 9.262766697e-02f, 9.274265123e-02f, 9.285743209e-02f, 9.297200944e-02f,
+9.308638316e-02f, 9.320055315e-02f, 9.331451928e-02f, 9.342828144e-02f, 9.354183953e-02f, 9.365519343e-02f, 9.376834303e-02f, 9.388128822e-02f, 9.399402889e-02f, 9.410656493e-02f,
+9.421889622e-02f, 9.433102266e-02f, 9.444294414e-02f, 9.455466056e-02f, 9.466617179e-02f, 9.477747774e-02f, 9.488857830e-02f, 9.499947335e-02f, 9.511016279e-02f, 9.522064652e-02f,
+9.533092443e-02f, 9.544099642e-02f, 9.555086237e-02f, 9.566052218e-02f, 9.576997575e-02f, 9.587922297e-02f, 9.598826374e-02f, 9.609709796e-02f, 9.620572552e-02f, 9.631414631e-02f,
+9.642236025e-02f, 9.653036721e-02f, 9.663816711e-02f, 9.674575984e-02f, 9.685314530e-02f, 9.696032339e-02f, 9.706729400e-02f, 9.717405704e-02f, 9.728061241e-02f, 9.738696001e-02f,
+9.749309974e-02f, 9.759903150e-02f, 9.770475519e-02f, 9.781027072e-02f, 9.791557798e-02f, 9.802067689e-02f, 9.812556734e-02f, 9.823024923e-02f, 9.833472248e-02f, 9.843898698e-02f,
+9.854304264e-02f, 9.864688936e-02f, 9.875052706e-02f, 9.885395563e-02f, 9.895717498e-02f, 9.906018503e-02f, 9.916298566e-02f, 9.926557680e-02f, 9.936795835e-02f, 9.947013022e-02f,
+9.957209232e-02f, 9.967384455e-02f, 9.977538682e-02f, 9.987671905e-02f, 9.997784114e-02f, 1.000787530e-01f, 1.001794545e-01f, 1.002799457e-01f, 1.003802263e-01f, 1.004802964e-01f,
+1.005801558e-01f, 1.006798044e-01f, 1.007792422e-01f, 1.008784691e-01f, 1.009774849e-01f, 1.010762897e-01f, 1.011748832e-01f, 1.012732655e-01f, 1.013714364e-01f, 1.014693958e-01f,
+1.015671438e-01f, 1.016646801e-01f, 1.017620047e-01f, 1.018591175e-01f, 1.019560185e-01f, 1.020527075e-01f, 1.021491845e-01f, 1.022454494e-01f, 1.023415021e-01f, 1.024373425e-01f,
+1.025329705e-01f, 1.026283862e-01f, 1.027235893e-01f, 1.028185798e-01f, 1.029133576e-01f, 1.030079227e-01f, 1.031022750e-01f, 1.031964143e-01f, 1.032903407e-01f, 1.033840540e-01f,
+1.034775541e-01f, 1.035708411e-01f, 1.036639147e-01f, 1.037567750e-01f, 1.038494218e-01f, 1.039418551e-01f, 1.040340748e-01f, 1.041260808e-01f, 1.042178731e-01f, 1.043094516e-01f,
+1.044008162e-01f, 1.044919668e-01f, 1.045829033e-01f, 1.046736258e-01f, 1.047641341e-01f, 1.048544281e-01f, 1.049445078e-01f, 1.050343731e-01f, 1.051240240e-01f, 1.052134603e-01f,
+1.053026819e-01f, 1.053916890e-01f, 1.054804812e-01f, 1.055690587e-01f, 1.056574213e-01f, 1.057455689e-01f, 1.058335015e-01f, 1.059212190e-01f, 1.060087214e-01f, 1.060960086e-01f,
+1.061830804e-01f, 1.062699370e-01f, 1.063565781e-01f, 1.064430037e-01f, 1.065292138e-01f, 1.066152083e-01f, 1.067009871e-01f, 1.067865501e-01f, 1.068718974e-01f, 1.069570288e-01f,
+1.070419443e-01f, 1.071266438e-01f, 1.072111272e-01f, 1.072953945e-01f, 1.073794457e-01f, 1.074632806e-01f, 1.075468993e-01f, 1.076303016e-01f, 1.077134874e-01f, 1.077964568e-01f,
+1.078792097e-01f, 1.079617460e-01f, 1.080440656e-01f, 1.081261686e-01f, 1.082080548e-01f, 1.082897241e-01f, 1.083711766e-01f, 1.084524121e-01f, 1.085334307e-01f, 1.086142322e-01f,
+1.086948167e-01f, 1.087751839e-01f, 1.088553340e-01f, 1.089352668e-01f, 1.090149823e-01f, 1.090944804e-01f, 1.091737611e-01f, 1.092528244e-01f, 1.093316701e-01f, 1.094102982e-01f,
+1.094887087e-01f, 1.095669015e-01f, 1.096448766e-01f, 1.097226339e-01f, 1.098001734e-01f, 1.098774950e-01f, 1.099545987e-01f, 1.100314844e-01f, 1.101081520e-01f, 1.101846016e-01f,
+1.102608331e-01f, 1.103368464e-01f, 1.104126415e-01f, 1.104882183e-01f, 1.105635768e-01f, 1.106387169e-01f, 1.107136386e-01f, 1.107883419e-01f, 1.108628267e-01f, 1.109370930e-01f,
+1.110111406e-01f, 1.110849697e-01f, 1.111585801e-01f, 1.112319717e-01f, 1.113051446e-01f, 1.113780987e-01f, 1.114508340e-01f, 1.115233504e-01f, 1.115956479e-01f, 1.116677264e-01f,
+1.117395859e-01f, 1.118112263e-01f, 1.118826477e-01f, 1.119538499e-01f, 1.120248330e-01f, 1.120955969e-01f, 1.121661415e-01f, 1.122364669e-01f, 1.123065729e-01f, 1.123764596e-01f,
+1.124461269e-01f, 1.125155748e-01f, 1.125848032e-01f, 1.126538121e-01f, 1.127226015e-01f, 1.127911713e-01f, 1.128595215e-01f, 1.129276520e-01f, 1.129955629e-01f, 1.130632541e-01f,
+1.131307256e-01f, 1.131979772e-01f, 1.132650091e-01f, 1.133318211e-01f, 1.133984133e-01f, 1.134647855e-01f, 1.135309378e-01f, 1.135968702e-01f, 1.136625826e-01f, 1.137280749e-01f,
+1.137933472e-01f, 1.138583994e-01f, 1.139232315e-01f, 1.139878434e-01f, 1.140522352e-01f, 1.141164068e-01f, 1.141803581e-01f, 1.142440892e-01f, 1.143076001e-01f, 1.143708906e-01f,
+1.144339608e-01f, 1.144968106e-01f, 1.145594401e-01f, 1.146218491e-01f, 1.146840377e-01f, 1.147460059e-01f, 1.148077536e-01f, 1.148692807e-01f, 1.149305874e-01f, 1.149916735e-01f,
+1.150525390e-01f, 1.151131839e-01f, 1.151736083e-01f, 1.152338119e-01f, 1.152937949e-01f, 1.153535573e-01f, 1.154130989e-01f, 1.154724198e-01f, 1.155315200e-01f, 1.155903994e-01f,
+1.156490581e-01f, 1.157074959e-01f, 1.157657129e-01f, 1.158237091e-01f, 1.158814845e-01f, 1.159390390e-01f, 1.159963726e-01f, 1.160534853e-01f, 1.161103770e-01f, 1.161670479e-01f,
+1.162234978e-01f, 1.162797267e-01f, 1.163357347e-01f, 1.163915217e-01f, 1.164470876e-01f, 1.165024326e-01f, 1.165575565e-01f, 1.166124593e-01f, 1.166671412e-01f, 1.167216019e-01f,
+1.167758416e-01f, 1.168298601e-01f, 1.168836576e-01f, 1.169372340e-01f, 1.169905892e-01f, 1.170437233e-01f, 1.170966362e-01f, 1.171493280e-01f, 1.172017987e-01f, 1.172540481e-01f,
+1.173060764e-01f, 1.173578835e-01f, 1.174094694e-01f, 1.174608341e-01f, 1.175119776e-01f, 1.175628999e-01f, 1.176136009e-01f, 1.176640808e-01f, 1.177143394e-01f, 1.177643767e-01f,
+1.178141929e-01f, 1.178637877e-01f, 1.179131614e-01f, 1.179623137e-01f, 1.180112449e-01f, 1.180599547e-01f, 1.181084433e-01f, 1.181567107e-01f, 1.182047567e-01f, 1.182525815e-01f,
+1.183001851e-01f, 1.183475673e-01f, 1.183947283e-01f, 1.184416680e-01f, 1.184883865e-01f, 1.185348837e-01f, 1.185811596e-01f, 1.186272143e-01f, 1.186730477e-01f, 1.187186598e-01f,
+1.187640507e-01f, 1.188092203e-01f, 1.188541686e-01f, 1.188988957e-01f, 1.189434016e-01f, 1.189876862e-01f, 1.190317496e-01f, 1.190755918e-01f, 1.191192127e-01f, 1.191626124e-01f,
+1.192057909e-01f, 1.192487482e-01f, 1.192914842e-01f, 1.193339991e-01f, 1.193762928e-01f, 1.194183653e-01f, 1.194602166e-01f, 1.195018468e-01f, 1.195432558e-01f, 1.195844437e-01f,
+1.196254105e-01f, 1.196661561e-01f, 1.197066806e-01f, 1.197469839e-01f, 1.197870662e-01f, 1.198269274e-01f, 1.198665676e-01f, 1.199059867e-01f, 1.199451847e-01f, 1.199841617e-01f,
+1.200229176e-01f, 1.200614526e-01f, 1.200997666e-01f, 1.201378595e-01f, 1.201757316e-01f, 1.202133826e-01f, 1.202508128e-01f, 1.202880220e-01f, 1.203250103e-01f, 1.203617777e-01f,
+1.203983242e-01f, 1.204346499e-01f, 1.204707547e-01f, 1.205066387e-01f, 1.205423019e-01f, 1.205777444e-01f, 1.206129660e-01f, 1.206479669e-01f, 1.206827471e-01f, 1.207173066e-01f,
+1.207516454e-01f, 1.207857635e-01f, 1.208196610e-01f, 1.208533378e-01f, 1.208867940e-01f, 1.209200297e-01f, 1.209530448e-01f, 1.209858393e-01f, 1.210184133e-01f, 1.210507669e-01f,
+1.210828999e-01f, 1.211148125e-01f, 1.211465047e-01f, 1.211779765e-01f, 1.212092279e-01f, 1.212402590e-01f, 1.212710698e-01f, 1.213016602e-01f, 1.213320304e-01f, 1.213621803e-01f,
+1.213921100e-01f, 1.214218195e-01f, 1.214513089e-01f, 1.214805781e-01f, 1.215096272e-01f, 1.215384563e-01f, 1.215670653e-01f, 1.215954542e-01f, 1.216236232e-01f, 1.216515722e-01f,
+1.216793013e-01f, 1.217068105e-01f, 1.217340998e-01f, 1.217611693e-01f, 1.217880190e-01f, 1.218146489e-01f, 1.218410590e-01f, 1.218672495e-01f, 1.218932202e-01f, 1.219189714e-01f,
+1.219445029e-01f, 1.219698148e-01f, 1.219949072e-01f, 1.220197801e-01f, 1.220444336e-01f, 1.220688676e-01f, 1.220930822e-01f, 1.221170774e-01f, 1.221408533e-01f, 1.221644099e-01f,
+1.221877473e-01f, 1.222108654e-01f, 1.222337644e-01f, 1.222564442e-01f, 1.222789049e-01f, 1.223011466e-01f, 1.223231692e-01f, 1.223449729e-01f, 1.223665576e-01f, 1.223879234e-01f,
+1.224090703e-01f, 1.224299984e-01f, 1.224507078e-01f, 1.224711984e-01f, 1.224914703e-01f, 1.225115235e-01f, 1.225313581e-01f, 1.225509742e-01f, 1.225703717e-01f, 1.225895508e-01f,
+1.226085114e-01f, 1.226272536e-01f, 1.226457774e-01f, 1.226640830e-01f, 1.226821703e-01f, 1.227000394e-01f, 1.227176903e-01f, 1.227351230e-01f, 1.227523377e-01f, 1.227693344e-01f,
+1.227861131e-01f, 1.228026739e-01f, 1.228190167e-01f, 1.228351418e-01f, 1.228510490e-01f, 1.228667385e-01f, 1.228822103e-01f, 1.228974644e-01f, 1.229125010e-01f, 1.229273200e-01f,
+1.229419215e-01f, 1.229563056e-01f, 1.229704723e-01f, 1.229844217e-01f, 1.229981537e-01f, 1.230116686e-01f, 1.230249662e-01f, 1.230380467e-01f, 1.230509102e-01f, 1.230635566e-01f,
+1.230759860e-01f, 1.230881986e-01f, 1.231001942e-01f, 1.231119731e-01f, 1.231235352e-01f, 1.231348807e-01f, 1.231460094e-01f, 1.231569216e-01f, 1.231676173e-01f, 1.231780965e-01f,
+1.231883593e-01f, 1.231984057e-01f, 1.232082359e-01f, 1.232178498e-01f, 1.232272475e-01f, 1.232364291e-01f, 1.232453946e-01f, 1.232541442e-01f, 1.232626777e-01f, 1.232709954e-01f,
+1.232790973e-01f, 1.232869834e-01f, 1.232946539e-01f, 1.233021086e-01f, 1.233093478e-01f, 1.233163715e-01f, 1.233231797e-01f, 1.233297726e-01f, 1.233361501e-01f, 1.233423123e-01f,
+1.233482594e-01f, 1.233539913e-01f, 1.233595081e-01f, 1.233648099e-01f, 1.233698968e-01f, 1.233747688e-01f, 1.233794260e-01f, 1.233838685e-01f, 1.233880962e-01f, 1.233921094e-01f,
+1.233959080e-01f, 1.233994921e-01f, 1.234028618e-01f, 1.234060172e-01f, 1.234089583e-01f, 1.234116852e-01f, 1.234141979e-01f, 1.234164966e-01f, 1.234185813e-01f, 1.234204521e-01f,
+1.234221090e-01f, 1.234235521e-01f, 1.234247815e-01f, 1.234257972e-01f, 1.234265994e-01f, 1.234271880e-01f, 1.234275633e-01f, 1.234277251e-01f, 1.234276737e-01f, 1.234274091e-01f,
+1.234269313e-01f, 1.234262405e-01f, 1.234253367e-01f, 1.234242199e-01f, 1.234228903e-01f, 1.234213480e-01f, 1.234195929e-01f, 1.234176252e-01f, 1.234154450e-01f, 1.234130523e-01f,
+1.234104473e-01f, 1.234076299e-01f, 1.234046003e-01f, 1.234013585e-01f, 1.233979046e-01f, 1.233942388e-01f, 1.233903610e-01f, 1.233862714e-01f, 1.233819700e-01f, 1.233774569e-01f,
+1.233727322e-01f, 1.233677960e-01f, 1.233626483e-01f, 1.233572893e-01f, 1.233517190e-01f, 1.233459375e-01f, 1.233399448e-01f, 1.233337412e-01f, 1.233273265e-01f, 1.233207010e-01f,
+1.233138647e-01f, 1.233068177e-01f, 1.232995600e-01f, 1.232920919e-01f, 1.232844132e-01f, 1.232765242e-01f, 1.232684249e-01f, 1.232601154e-01f, 1.232515957e-01f, 1.232428661e-01f,
+1.232339265e-01f, 1.232247770e-01f, 1.232154177e-01f, 1.232058488e-01f, 1.231960702e-01f, 1.231860822e-01f, 1.231758847e-01f, 1.231654779e-01f, 1.231548618e-01f, 1.231440366e-01f,
+1.231330023e-01f, 1.231217590e-01f, 1.231103068e-01f, 1.230986459e-01f, 1.230867762e-01f, 1.230746979e-01f, 1.230624110e-01f, 1.230499157e-01f, 1.230372121e-01f, 1.230243002e-01f,
+1.230111801e-01f, 1.229978520e-01f, 1.229843159e-01f, 1.229705719e-01f, 1.229566201e-01f, 1.229424606e-01f, 1.229280935e-01f, 1.229135189e-01f, 1.228987369e-01f, 1.228837476e-01f,
+1.228685510e-01f, 1.228531473e-01f, 1.228375366e-01f, 1.228217189e-01f, 1.228056943e-01f, 1.227894631e-01f, 1.227730251e-01f, 1.227563807e-01f, 1.227395297e-01f, 1.227224724e-01f,
+1.227052089e-01f, 1.226877392e-01f, 1.226700634e-01f, 1.226521817e-01f, 1.226340941e-01f, 1.226158007e-01f, 1.225973017e-01f, 1.225785971e-01f, 1.225596870e-01f, 1.225405716e-01f,
+1.225212509e-01f, 1.225017251e-01f, 1.224819941e-01f, 1.224620583e-01f, 1.224419176e-01f, 1.224215721e-01f, 1.224010220e-01f, 1.223802673e-01f, 1.223593082e-01f, 1.223381448e-01f,
+1.223167771e-01f, 1.222952053e-01f, 1.222734295e-01f, 1.222514497e-01f, 1.222292661e-01f, 1.222068788e-01f, 1.221842880e-01f, 1.221614936e-01f, 1.221384958e-01f, 1.221152948e-01f,
+1.220918905e-01f, 1.220682832e-01f, 1.220444730e-01f, 1.220204598e-01f, 1.219962440e-01f, 1.219718255e-01f, 1.219472044e-01f, 1.219223810e-01f, 1.218973552e-01f, 1.218721272e-01f,
+1.218466972e-01f, 1.218210651e-01f, 1.217952312e-01f, 1.217691956e-01f, 1.217429583e-01f, 1.217165194e-01f, 1.216898791e-01f, 1.216630375e-01f, 1.216359947e-01f, 1.216087509e-01f,
+1.215813060e-01f, 1.215536603e-01f, 1.215258138e-01f, 1.214977667e-01f, 1.214695191e-01f, 1.214410711e-01f, 1.214124227e-01f, 1.213835742e-01f, 1.213545257e-01f, 1.213252772e-01f,
+1.212958288e-01f, 1.212661808e-01f, 1.212363331e-01f, 1.212062860e-01f, 1.211760395e-01f, 1.211455937e-01f, 1.211149488e-01f, 1.210841049e-01f, 1.210530622e-01f, 1.210218206e-01f,
+1.209903804e-01f, 1.209587416e-01f, 1.209269044e-01f, 1.208948689e-01f, 1.208626352e-01f, 1.208302035e-01f, 1.207975738e-01f, 1.207647463e-01f, 1.207317211e-01f, 1.206984984e-01f,
+1.206650781e-01f, 1.206314606e-01f, 1.205976458e-01f, 1.205636339e-01f, 1.205294251e-01f, 1.204950194e-01f, 1.204604170e-01f, 1.204256179e-01f, 1.203906225e-01f, 1.203554306e-01f,
+1.203200425e-01f, 1.202844584e-01f, 1.202486782e-01f, 1.202127022e-01f, 1.201765305e-01f, 1.201401631e-01f, 1.201036003e-01f, 1.200668421e-01f, 1.200298887e-01f, 1.199927402e-01f,
+1.199553968e-01f, 1.199178584e-01f, 1.198801254e-01f, 1.198421978e-01f, 1.198040757e-01f, 1.197657593e-01f, 1.197272487e-01f, 1.196885440e-01f, 1.196496453e-01f, 1.196105529e-01f,
+1.195712667e-01f, 1.195317870e-01f, 1.194921139e-01f, 1.194522474e-01f, 1.194121878e-01f, 1.193719352e-01f, 1.193314897e-01f, 1.192908513e-01f, 1.192500204e-01f, 1.192089969e-01f,
+1.191677811e-01f, 1.191263730e-01f, 1.190847728e-01f, 1.190429806e-01f, 1.190009966e-01f, 1.189588209e-01f, 1.189164536e-01f, 1.188738948e-01f, 1.188311448e-01f, 1.187882035e-01f,
+1.187450713e-01f, 1.187017481e-01f, 1.186582342e-01f, 1.186145296e-01f, 1.185706345e-01f, 1.185265491e-01f, 1.184822734e-01f, 1.184378077e-01f, 1.183931520e-01f, 1.183483065e-01f,
+1.183032714e-01f, 1.182580466e-01f, 1.182126325e-01f, 1.181670292e-01f, 1.181212367e-01f, 1.180752552e-01f, 1.180290849e-01f, 1.179827259e-01f, 1.179361783e-01f, 1.178894423e-01f,
+1.178425181e-01f, 1.177954056e-01f, 1.177481052e-01f, 1.177006169e-01f, 1.176529409e-01f, 1.176050773e-01f, 1.175570263e-01f, 1.175087880e-01f, 1.174603625e-01f, 1.174117501e-01f,
+1.173629507e-01f, 1.173139647e-01f, 1.172647920e-01f, 1.172154329e-01f, 1.171658876e-01f, 1.171161561e-01f, 1.170662385e-01f, 1.170161352e-01f, 1.169658461e-01f, 1.169153714e-01f,
+1.168647113e-01f, 1.168138659e-01f, 1.167628355e-01f, 1.167116200e-01f, 1.166602197e-01f, 1.166086346e-01f, 1.165568651e-01f, 1.165049111e-01f, 1.164527729e-01f, 1.164004506e-01f,
+1.163479443e-01f, 1.162952543e-01f, 1.162423805e-01f, 1.161893233e-01f, 1.161360827e-01f, 1.160826589e-01f, 1.160290520e-01f, 1.159752622e-01f, 1.159212896e-01f, 1.158671345e-01f,
+1.158127968e-01f, 1.157582769e-01f, 1.157035748e-01f, 1.156486907e-01f, 1.155936247e-01f, 1.155383770e-01f, 1.154829478e-01f, 1.154273372e-01f, 1.153715453e-01f, 1.153155723e-01f,
+1.152594184e-01f, 1.152030837e-01f, 1.151465683e-01f, 1.150898725e-01f, 1.150329963e-01f, 1.149759400e-01f, 1.149187036e-01f, 1.148612874e-01f, 1.148036914e-01f, 1.147459159e-01f,
+1.146879610e-01f, 1.146298269e-01f, 1.145715136e-01f, 1.145130215e-01f, 1.144543505e-01f, 1.143955009e-01f, 1.143364729e-01f, 1.142772665e-01f, 1.142178820e-01f, 1.141583195e-01f,
+1.140985792e-01f, 1.140386612e-01f, 1.139785657e-01f, 1.139182928e-01f, 1.138578427e-01f, 1.137972156e-01f, 1.137364115e-01f, 1.136754308e-01f, 1.136142735e-01f, 1.135529398e-01f,
+1.134914298e-01f, 1.134297438e-01f, 1.133678818e-01f, 1.133058441e-01f, 1.132436307e-01f, 1.131812420e-01f, 1.131186779e-01f, 1.130559387e-01f, 1.129930246e-01f, 1.129299357e-01f,
+1.128666721e-01f, 1.128032341e-01f, 1.127396218e-01f, 1.126758353e-01f, 1.126118748e-01f, 1.125477406e-01f, 1.124834327e-01f, 1.124189513e-01f, 1.123542965e-01f, 1.122894686e-01f,
+1.122244677e-01f, 1.121592940e-01f, 1.120939477e-01f, 1.120284288e-01f, 1.119627376e-01f, 1.118968742e-01f, 1.118308388e-01f, 1.117646316e-01f, 1.116982527e-01f, 1.116317023e-01f,
+1.115649806e-01f, 1.114980877e-01f, 1.114310239e-01f, 1.113637891e-01f, 1.112963838e-01f, 1.112288079e-01f, 1.111610617e-01f, 1.110931453e-01f, 1.110250590e-01f, 1.109568028e-01f,
+1.108883770e-01f, 1.108197817e-01f, 1.107510170e-01f, 1.106820833e-01f, 1.106129805e-01f, 1.105437090e-01f, 1.104742688e-01f, 1.104046602e-01f, 1.103348833e-01f, 1.102649382e-01f,
+1.101948252e-01f, 1.101245445e-01f, 1.100540961e-01f, 1.099834803e-01f, 1.099126973e-01f, 1.098417471e-01f, 1.097706301e-01f, 1.096993463e-01f, 1.096278959e-01f, 1.095562791e-01f,
+1.094844961e-01f, 1.094125471e-01f, 1.093404322e-01f, 1.092681516e-01f, 1.091957055e-01f, 1.091230940e-01f, 1.090503174e-01f, 1.089773757e-01f, 1.089042693e-01f, 1.088309981e-01f,
+1.087575625e-01f, 1.086839627e-01f, 1.086101986e-01f, 1.085362707e-01f, 1.084621790e-01f, 1.083879237e-01f, 1.083135049e-01f, 1.082389230e-01f, 1.081641780e-01f, 1.080892701e-01f,
+1.080141995e-01f, 1.079389663e-01f, 1.078635708e-01f, 1.077880132e-01f, 1.077122936e-01f, 1.076364121e-01f, 1.075603690e-01f, 1.074841645e-01f, 1.074077987e-01f, 1.073312718e-01f,
+1.072545840e-01f, 1.071777355e-01f, 1.071007264e-01f, 1.070235569e-01f, 1.069462273e-01f, 1.068687376e-01f, 1.067910881e-01f, 1.067132790e-01f, 1.066353104e-01f, 1.065571825e-01f,
+1.064788955e-01f, 1.064004496e-01f, 1.063218449e-01f, 1.062430817e-01f, 1.061641601e-01f, 1.060850804e-01f, 1.060058426e-01f, 1.059264470e-01f, 1.058468938e-01f, 1.057671831e-01f,
+1.056873151e-01f, 1.056072901e-01f, 1.055271081e-01f, 1.054467694e-01f, 1.053662742e-01f, 1.052856227e-01f, 1.052048150e-01f, 1.051238513e-01f, 1.050427318e-01f, 1.049614567e-01f,
+1.048800262e-01f, 1.047984404e-01f, 1.047166996e-01f, 1.046348040e-01f, 1.045527537e-01f, 1.044705488e-01f, 1.043881897e-01f, 1.043056765e-01f, 1.042230093e-01f, 1.041401884e-01f,
+1.040572140e-01f, 1.039740862e-01f, 1.038908052e-01f, 1.038073712e-01f, 1.037237845e-01f, 1.036400451e-01f, 1.035561533e-01f, 1.034721093e-01f, 1.033879132e-01f, 1.033035653e-01f,
+1.032190657e-01f, 1.031344147e-01f, 1.030496124e-01f, 1.029646590e-01f, 1.028795547e-01f, 1.027942996e-01f, 1.027088941e-01f, 1.026233382e-01f, 1.025376322e-01f, 1.024517763e-01f,
+1.023657706e-01f, 1.022796153e-01f, 1.021933107e-01f, 1.021068569e-01f, 1.020202541e-01f, 1.019335025e-01f, 1.018466023e-01f, 1.017595538e-01f, 1.016723570e-01f, 1.015850121e-01f,
+1.014975195e-01f, 1.014098792e-01f, 1.013220915e-01f, 1.012341566e-01f, 1.011460746e-01f, 1.010578457e-01f, 1.009694702e-01f, 1.008809482e-01f, 1.007922799e-01f, 1.007034656e-01f,
+1.006145054e-01f, 1.005253995e-01f, 1.004361481e-01f, 1.003467514e-01f, 1.002572096e-01f, 1.001675229e-01f, 1.000776915e-01f, 9.998771561e-02f, 9.989759539e-02f, 9.980733106e-02f,
+9.971692281e-02f, 9.962637084e-02f, 9.953567535e-02f, 9.944483653e-02f, 9.935385458e-02f, 9.926272970e-02f, 9.917146209e-02f, 9.908005194e-02f, 9.898849946e-02f, 9.889680484e-02f,
+9.880496828e-02f, 9.871298998e-02f, 9.862087014e-02f, 9.852860896e-02f, 9.843620664e-02f, 9.834366337e-02f, 9.825097936e-02f, 9.815815481e-02f, 9.806518992e-02f, 9.797208489e-02f,
+9.787883991e-02f, 9.778545519e-02f, 9.769193093e-02f, 9.759826734e-02f, 9.750446460e-02f, 9.741052293e-02f, 9.731644252e-02f, 9.722222358e-02f, 9.712786630e-02f, 9.703337090e-02f,
+9.693873756e-02f, 9.684396650e-02f, 9.674905792e-02f, 9.665401202e-02f, 9.655882900e-02f, 9.646350906e-02f, 9.636805241e-02f, 9.627245925e-02f, 9.617672978e-02f, 9.608086422e-02f,
+9.598486275e-02f, 9.588872559e-02f, 9.579245294e-02f, 9.569604501e-02f, 9.559950199e-02f, 9.550282409e-02f, 9.540601152e-02f, 9.530906448e-02f, 9.521198318e-02f, 9.511476783e-02f,
+9.501741861e-02f, 9.491993576e-02f, 9.482231946e-02f, 9.472456992e-02f, 9.462668735e-02f, 9.452867196e-02f, 9.443052396e-02f, 9.433224354e-02f, 9.423383091e-02f, 9.413528629e-02f,
+9.403660988e-02f, 9.393780188e-02f, 9.383886250e-02f, 9.373979196e-02f, 9.364059045e-02f, 9.354125818e-02f, 9.344179537e-02f, 9.334220222e-02f, 9.324247894e-02f, 9.314262573e-02f,
+9.304264281e-02f, 9.294253039e-02f, 9.284228866e-02f, 9.274191785e-02f, 9.264141815e-02f, 9.254078979e-02f, 9.244003296e-02f, 9.233914788e-02f, 9.223813476e-02f, 9.213699380e-02f,
+9.203572522e-02f, 9.193432923e-02f, 9.183280603e-02f, 9.173115584e-02f, 9.162937886e-02f, 9.152747531e-02f, 9.142544540e-02f, 9.132328934e-02f, 9.122100734e-02f, 9.111859961e-02f,
+9.101606636e-02f, 9.091340781e-02f, 9.081062416e-02f, 9.070771562e-02f, 9.060468242e-02f, 9.050152475e-02f, 9.039824284e-02f, 9.029483689e-02f, 9.019130711e-02f, 9.008765373e-02f,
+8.998387695e-02f, 8.987997698e-02f, 8.977595404e-02f, 8.967180834e-02f, 8.956754009e-02f, 8.946314951e-02f, 8.935863681e-02f, 8.925400220e-02f, 8.914924591e-02f, 8.904436813e-02f,
+8.893936909e-02f, 8.883424899e-02f, 8.872900806e-02f, 8.862364651e-02f, 8.851816455e-02f, 8.841256240e-02f, 8.830684026e-02f, 8.820099837e-02f, 8.809503692e-02f, 8.798895615e-02f,
+8.788275625e-02f, 8.777643745e-02f, 8.766999997e-02f, 8.756344401e-02f, 8.745676980e-02f, 8.734997755e-02f, 8.724306747e-02f, 8.713603979e-02f, 8.702889471e-02f, 8.692163246e-02f,
+8.681425325e-02f, 8.670675730e-02f, 8.659914482e-02f, 8.649141604e-02f, 8.638357116e-02f, 8.627561042e-02f, 8.616753401e-02f, 8.605934217e-02f, 8.595103510e-02f, 8.584261303e-02f,
+8.573407617e-02f, 8.562542475e-02f, 8.551665897e-02f, 8.540777906e-02f, 8.529878524e-02f, 8.518967773e-02f, 8.508045673e-02f, 8.497112248e-02f, 8.486167519e-02f, 8.475211508e-02f,
+8.464244236e-02f, 8.453265726e-02f, 8.442276000e-02f, 8.431275080e-02f, 8.420262987e-02f, 8.409239743e-02f, 8.398205371e-02f, 8.387159893e-02f, 8.376103330e-02f, 8.365035704e-02f,
+8.353957038e-02f, 8.342867353e-02f, 8.331766672e-02f, 8.320655016e-02f, 8.309532408e-02f, 8.298398869e-02f, 8.287254422e-02f, 8.276099090e-02f, 8.264932893e-02f, 8.253755854e-02f,
+8.242567995e-02f, 8.231369339e-02f, 8.220159907e-02f, 8.208939722e-02f, 8.197708806e-02f, 8.186467181e-02f, 8.175214868e-02f, 8.163951892e-02f, 8.152678273e-02f, 8.141394033e-02f,
+8.130099196e-02f, 8.118793783e-02f, 8.107477817e-02f, 8.096151320e-02f, 8.084814313e-02f, 8.073466820e-02f, 8.062108863e-02f, 8.050740464e-02f, 8.039361645e-02f, 8.027972429e-02f,
+8.016572838e-02f, 8.005162894e-02f, 7.993742620e-02f, 7.982312038e-02f, 7.970871170e-02f, 7.959420039e-02f, 7.947958668e-02f, 7.936487078e-02f, 7.925005292e-02f, 7.913513333e-02f,
+7.902011223e-02f, 7.890498984e-02f, 7.878976639e-02f, 7.867444211e-02f, 7.855901721e-02f, 7.844349193e-02f, 7.832786648e-02f, 7.821214110e-02f, 7.809631600e-02f, 7.798039142e-02f,
+7.786436758e-02f, 7.774824471e-02f, 7.763202302e-02f, 7.751570275e-02f, 7.739928412e-02f, 7.728276736e-02f, 7.716615269e-02f, 7.704944034e-02f, 7.693263054e-02f, 7.681572351e-02f,
+7.669871947e-02f, 7.658161867e-02f, 7.646442131e-02f, 7.634712763e-02f, 7.622973785e-02f, 7.611225221e-02f, 7.599467092e-02f, 7.587699422e-02f, 7.575922233e-02f, 7.564135548e-02f,
+7.552339390e-02f, 7.540533780e-02f, 7.528718743e-02f, 7.516894301e-02f, 7.505060477e-02f, 7.493217293e-02f, 7.481364772e-02f, 7.469502936e-02f, 7.457631810e-02f, 7.445751415e-02f,
+7.433861774e-02f, 7.421962911e-02f, 7.410054847e-02f, 7.398137607e-02f, 7.386211212e-02f, 7.374275685e-02f, 7.362331050e-02f, 7.350377328e-02f, 7.338414544e-02f, 7.326442720e-02f,
+7.314461879e-02f, 7.302472043e-02f, 7.290473236e-02f, 7.278465481e-02f, 7.266448800e-02f, 7.254423216e-02f, 7.242388753e-02f, 7.230345433e-02f, 7.218293280e-02f, 7.206232315e-02f,
+7.194162563e-02f, 7.182084045e-02f, 7.169996786e-02f, 7.157900808e-02f, 7.145796134e-02f, 7.133682787e-02f, 7.121560791e-02f, 7.109430167e-02f, 7.097290940e-02f, 7.085143131e-02f,
+7.072986765e-02f, 7.060821864e-02f, 7.048648452e-02f, 7.036466551e-02f, 7.024276184e-02f, 7.012077375e-02f, 6.999870147e-02f, 6.987654522e-02f, 6.975430524e-02f, 6.963198176e-02f,
+6.950957501e-02f, 6.938708522e-02f, 6.926451262e-02f, 6.914185745e-02f, 6.901911993e-02f, 6.889630030e-02f, 6.877339879e-02f, 6.865041563e-02f, 6.852735105e-02f, 6.840420528e-02f,
+6.828097856e-02f, 6.815767111e-02f, 6.803428318e-02f, 6.791081498e-02f, 6.778726676e-02f, 6.766363874e-02f, 6.753993115e-02f, 6.741614424e-02f, 6.729227823e-02f, 6.716833335e-02f,
+6.704430984e-02f, 6.692020793e-02f, 6.679602785e-02f, 6.667176983e-02f, 6.654743410e-02f, 6.642302091e-02f, 6.629853048e-02f, 6.617396304e-02f, 6.604931883e-02f, 6.592459809e-02f,
+6.579980103e-02f, 6.567492790e-02f, 6.554997893e-02f, 6.542495436e-02f, 6.529985440e-02f, 6.517467931e-02f, 6.504942931e-02f, 6.492410464e-02f, 6.479870552e-02f, 6.467323220e-02f,
+6.454768491e-02f, 6.442206387e-02f, 6.429636933e-02f, 6.417060151e-02f, 6.404476066e-02f, 6.391884700e-02f, 6.379286077e-02f, 6.366680220e-02f, 6.354067153e-02f, 6.341446898e-02f,
+6.328819480e-02f, 6.316184922e-02f, 6.303543248e-02f, 6.290894480e-02f, 6.278238642e-02f, 6.265575757e-02f, 6.252905850e-02f, 6.240228943e-02f, 6.227545060e-02f, 6.214854224e-02f,
+6.202156459e-02f, 6.189451788e-02f, 6.176740234e-02f, 6.164021822e-02f, 6.151296574e-02f, 6.138564515e-02f, 6.125825667e-02f, 6.113080054e-02f, 6.100327699e-02f, 6.087568626e-02f,
+6.074802859e-02f, 6.062030421e-02f, 6.049251336e-02f, 6.036465626e-02f, 6.023673316e-02f, 6.010874429e-02f, 5.998068988e-02f, 5.985257018e-02f, 5.972438541e-02f, 5.959613581e-02f,
+5.946782162e-02f, 5.933944307e-02f, 5.921100039e-02f, 5.908249383e-02f, 5.895392362e-02f, 5.882528999e-02f, 5.869659319e-02f, 5.856783343e-02f, 5.843901097e-02f, 5.831012603e-02f,
+5.818117885e-02f, 5.805216968e-02f, 5.792309873e-02f, 5.779396625e-02f, 5.766477248e-02f, 5.753551765e-02f, 5.740620200e-02f, 5.727682576e-02f, 5.714738916e-02f, 5.701789245e-02f,
+5.688833587e-02f, 5.675871963e-02f, 5.662904400e-02f, 5.649930918e-02f, 5.636951544e-02f, 5.623966299e-02f, 5.610975209e-02f, 5.597978295e-02f, 5.584975583e-02f, 5.571967095e-02f,
+5.558952855e-02f, 5.545932887e-02f, 5.532907215e-02f, 5.519875861e-02f, 5.506838851e-02f, 5.493796206e-02f, 5.480747952e-02f, 5.467694112e-02f, 5.454634709e-02f, 5.441569766e-02f,
+5.428499309e-02f, 5.415423360e-02f, 5.402341942e-02f, 5.389255080e-02f, 5.376162798e-02f, 5.363065118e-02f, 5.349962065e-02f, 5.336853662e-02f, 5.323739933e-02f, 5.310620902e-02f,
+5.297496592e-02f, 5.284367027e-02f, 5.271232231e-02f, 5.258092226e-02f, 5.244947038e-02f, 5.231796690e-02f, 5.218641204e-02f, 5.205480606e-02f, 5.192314918e-02f, 5.179144165e-02f,
+5.165968370e-02f, 5.152787557e-02f, 5.139601749e-02f, 5.126410970e-02f, 5.113215244e-02f, 5.100014595e-02f, 5.086809046e-02f, 5.073598621e-02f, 5.060383343e-02f, 5.047163237e-02f,
+5.033938326e-02f, 5.020708633e-02f, 5.007474183e-02f, 4.994235000e-02f, 4.980991106e-02f, 4.967742525e-02f, 4.954489282e-02f, 4.941231400e-02f, 4.927968902e-02f, 4.914701813e-02f,
+4.901430156e-02f, 4.888153955e-02f, 4.874873233e-02f, 4.861588015e-02f, 4.848298323e-02f, 4.835004182e-02f, 4.821705616e-02f, 4.808402647e-02f, 4.795095300e-02f, 4.781783599e-02f,
+4.768467567e-02f, 4.755147228e-02f, 4.741822606e-02f, 4.728493724e-02f, 4.715160606e-02f, 4.701823276e-02f, 4.688481758e-02f, 4.675136074e-02f, 4.661786250e-02f, 4.648432308e-02f,
+4.635074273e-02f, 4.621712168e-02f, 4.608346016e-02f, 4.594975842e-02f, 4.581601670e-02f, 4.568223522e-02f, 4.554841423e-02f, 4.541455396e-02f, 4.528065466e-02f, 4.514671655e-02f,
+4.501273988e-02f, 4.487872488e-02f, 4.474467179e-02f, 4.461058084e-02f, 4.447645228e-02f, 4.434228634e-02f, 4.420808326e-02f, 4.407384328e-02f, 4.393956662e-02f, 4.380525354e-02f,
+4.367090426e-02f, 4.353651903e-02f, 4.340209807e-02f, 4.326764163e-02f, 4.313314995e-02f, 4.299862326e-02f, 4.286406180e-02f, 4.272946580e-02f, 4.259483550e-02f, 4.246017115e-02f,
+4.232547297e-02f, 4.219074120e-02f, 4.205597609e-02f, 4.192117786e-02f, 4.178634675e-02f, 4.165148301e-02f, 4.151658686e-02f, 4.138165855e-02f, 4.124669831e-02f, 4.111170638e-02f,
+4.097668300e-02f, 4.084162839e-02f, 4.070654281e-02f, 4.057142648e-02f, 4.043627964e-02f, 4.030110253e-02f, 4.016589539e-02f, 4.003065845e-02f, 3.989539195e-02f, 3.976009613e-02f,
+3.962477122e-02f, 3.948941745e-02f, 3.935403508e-02f, 3.921862432e-02f, 3.908318543e-02f, 3.894771863e-02f, 3.881222416e-02f, 3.867670226e-02f, 3.854115317e-02f, 3.840557711e-02f,
+3.826997434e-02f, 3.813434508e-02f, 3.799868957e-02f, 3.786300805e-02f, 3.772730075e-02f, 3.759156791e-02f, 3.745580976e-02f, 3.732002655e-02f, 3.718421851e-02f, 3.704838587e-02f,
+3.691252887e-02f, 3.677664775e-02f, 3.664074274e-02f, 3.650481408e-02f, 3.636886201e-02f, 3.623288676e-02f, 3.609688856e-02f, 3.596086766e-02f, 3.582482429e-02f, 3.568875868e-02f,
+3.555267107e-02f, 3.541656170e-02f, 3.528043081e-02f, 3.514427862e-02f, 3.500810538e-02f, 3.487191131e-02f, 3.473569666e-02f, 3.459946167e-02f, 3.446320656e-02f, 3.432693157e-02f,
+3.419063694e-02f, 3.405432291e-02f, 3.391798970e-02f, 3.378163756e-02f, 3.364526672e-02f, 3.350887742e-02f, 3.337246988e-02f, 3.323604435e-02f, 3.309960107e-02f, 3.296314025e-02f,
+3.282666216e-02f, 3.269016700e-02f, 3.255365504e-02f, 3.241712648e-02f, 3.228058158e-02f, 3.214402057e-02f, 3.200744368e-02f, 3.187085115e-02f, 3.173424321e-02f, 3.159762009e-02f,
+3.146098204e-02f, 3.132432929e-02f, 3.118766206e-02f, 3.105098060e-02f, 3.091428514e-02f, 3.077757592e-02f, 3.064085317e-02f, 3.050411712e-02f, 3.036736801e-02f, 3.023060607e-02f,
+3.009383154e-02f, 2.995704465e-02f, 2.982024564e-02f, 2.968343474e-02f, 2.954661218e-02f, 2.940977820e-02f, 2.927293303e-02f, 2.913607691e-02f, 2.899921007e-02f, 2.886233275e-02f,
+2.872544517e-02f, 2.858854758e-02f, 2.845164020e-02f, 2.831472327e-02f, 2.817779703e-02f, 2.804086170e-02f, 2.790391752e-02f, 2.776696473e-02f, 2.763000356e-02f, 2.749303423e-02f,
+2.735605699e-02f, 2.721907207e-02f, 2.708207970e-02f, 2.694508012e-02f, 2.680807355e-02f, 2.667106024e-02f, 2.653404040e-02f, 2.639701429e-02f, 2.625998212e-02f, 2.612294414e-02f,
+2.598590057e-02f, 2.584885166e-02f, 2.571179762e-02f, 2.557473869e-02f, 2.543767512e-02f, 2.530060712e-02f, 2.516353493e-02f, 2.502645879e-02f, 2.488937892e-02f, 2.475229556e-02f,
+2.461520894e-02f, 2.447811930e-02f, 2.434102686e-02f, 2.420393186e-02f, 2.406683452e-02f, 2.392973509e-02f, 2.379263379e-02f, 2.365553086e-02f, 2.351842652e-02f, 2.338132102e-02f,
+2.324421457e-02f, 2.310710741e-02f, 2.296999978e-02f, 2.283289190e-02f, 2.269578401e-02f, 2.255867633e-02f, 2.242156911e-02f, 2.228446256e-02f, 2.214735692e-02f, 2.201025243e-02f,
+2.187314931e-02f, 2.173604779e-02f, 2.159894811e-02f, 2.146185049e-02f, 2.132475517e-02f, 2.118766238e-02f, 2.105057235e-02f, 2.091348530e-02f, 2.077640147e-02f, 2.063932109e-02f,
+2.050224439e-02f, 2.036517160e-02f, 2.022810295e-02f, 2.009103866e-02f, 1.995397898e-02f, 1.981692413e-02f, 1.967987434e-02f, 1.954282984e-02f, 1.940579085e-02f, 1.926875762e-02f,
+1.913173036e-02f, 1.899470931e-02f, 1.885769470e-02f, 1.872068675e-02f, 1.858368570e-02f, 1.844669178e-02f, 1.830970521e-02f, 1.817272623e-02f, 1.803575505e-02f, 1.789879192e-02f,
+1.776183706e-02f, 1.762489070e-02f, 1.748795306e-02f, 1.735102438e-02f, 1.721410489e-02f, 1.707719480e-02f, 1.694029436e-02f, 1.680340379e-02f, 1.666652332e-02f, 1.652965318e-02f,
+1.639279358e-02f, 1.625594477e-02f, 1.611910697e-02f, 1.598228041e-02f, 1.584546532e-02f, 1.570866191e-02f, 1.557187043e-02f, 1.543509109e-02f, 1.529832414e-02f, 1.516156978e-02f,
+1.502482825e-02f, 1.488809978e-02f, 1.475138460e-02f, 1.461468293e-02f, 1.447799499e-02f, 1.434132102e-02f, 1.420466124e-02f, 1.406801588e-02f, 1.393138516e-02f, 1.379476932e-02f,
+1.365816857e-02f, 1.352158315e-02f, 1.338501327e-02f, 1.324845917e-02f, 1.311192108e-02f, 1.297539921e-02f, 1.283889380e-02f, 1.270240506e-02f, 1.256593323e-02f, 1.242947853e-02f,
+1.229304119e-02f, 1.215662143e-02f, 1.202021948e-02f, 1.188383555e-02f, 1.174746989e-02f, 1.161112271e-02f, 1.147479423e-02f, 1.133848469e-02f, 1.120219430e-02f, 1.106592329e-02f,
+1.092967189e-02f, 1.079344032e-02f, 1.065722880e-02f, 1.052103757e-02f, 1.038486683e-02f, 1.024871683e-02f, 1.011258777e-02f, 9.976479888e-03f, 9.840393405e-03f, 9.704328544e-03f,
+9.568285529e-03f, 9.432264583e-03f, 9.296265930e-03f, 9.160289793e-03f, 9.024336395e-03f, 8.888405959e-03f, 8.752498709e-03f, 8.616614866e-03f, 8.480754655e-03f, 8.344918297e-03f,
+8.209106015e-03f, 8.073318031e-03f, 7.937554569e-03f, 7.801815850e-03f, 7.666102096e-03f, 7.530413530e-03f, 7.394750373e-03f, 7.259112847e-03f, 7.123501175e-03f, 6.987915577e-03f,
+6.852356276e-03f, 6.716823492e-03f, 6.581317447e-03f, 6.445838363e-03f, 6.310386460e-03f, 6.174961960e-03f, 6.039565083e-03f, 5.904196050e-03f, 5.768855082e-03f, 5.633542399e-03f,
+5.498258223e-03f, 5.363002773e-03f, 5.227776270e-03f, 5.092578933e-03f, 4.957410983e-03f, 4.822272640e-03f, 4.687164124e-03f, 4.552085654e-03f, 4.417037451e-03f, 4.282019732e-03f,
+4.147032719e-03f, 4.012076630e-03f, 3.877151684e-03f, 3.742258101e-03f, 3.607396099e-03f, 3.472565897e-03f, 3.337767714e-03f, 3.203001769e-03f, 3.068268280e-03f, 2.933567466e-03f,
+2.798899544e-03f, 2.664264733e-03f, 2.529663251e-03f, 2.395095316e-03f, 2.260561146e-03f, 2.126060958e-03f, 1.991594970e-03f, 1.857163399e-03f, 1.722766463e-03f, 1.588404380e-03f,
+1.454077365e-03f, 1.319785637e-03f, 1.185529411e-03f, 1.051308906e-03f, 9.171243363e-04f, 7.829759199e-04f, 6.488638730e-04f, 5.147884117e-04f, 3.807497521e-04f, 2.467481105e-04f,
+1.127837026e-04f, -2.114325572e-05f, -1.550325488e-04f, -2.888839610e-04f, -4.226972769e-04f, -5.564722813e-04f, -6.902087588e-04f, -8.239064945e-04f, -9.575652734e-04f, -1.091184881e-03f,
+-1.224765101e-03f, -1.358305721e-03f, -1.491806526e-03f, -1.625267301e-03f, -1.758687832e-03f, -1.892067905e-03f, -2.025407306e-03f, -2.158705821e-03f, -2.291963236e-03f, -2.425179339e-03f,
+-2.558353915e-03f, -2.691486751e-03f, -2.824577634e-03f, -2.957626351e-03f, -3.090632689e-03f, -3.223596435e-03f, -3.356517376e-03f, -3.489395300e-03f, -3.622229995e-03f, -3.755021248e-03f,
+-3.887768846e-03f, -4.020472579e-03f, -4.153132234e-03f, -4.285747599e-03f, -4.418318462e-03f, -4.550844613e-03f, -4.683325839e-03f, -4.815761930e-03f, -4.948152674e-03f, -5.080497860e-03f,
+-5.212797278e-03f, -5.345050717e-03f, -5.477257965e-03f, -5.609418814e-03f, -5.741533052e-03f, -5.873600469e-03f, -6.005620855e-03f, -6.137594000e-03f, -6.269519695e-03f, -6.401397730e-03f,
+-6.533227895e-03f, -6.665009981e-03f, -6.796743778e-03f, -6.928429078e-03f, -7.060065672e-03f, -7.191653350e-03f, -7.323191905e-03f, -7.454681127e-03f, -7.586120808e-03f, -7.717510741e-03f,
+-7.848850715e-03f, -7.980140525e-03f, -8.111379961e-03f, -8.242568817e-03f, -8.373706884e-03f, -8.504793955e-03f, -8.635829823e-03f, -8.766814281e-03f, -8.897747122e-03f, -9.028628138e-03f,
+-9.159457123e-03f, -9.290233871e-03f, -9.420958175e-03f, -9.551629828e-03f, -9.682248625e-03f, -9.812814360e-03f, -9.943326826e-03f, -1.007378582e-02f, -1.020419113e-02f, -1.033454256e-02f,
+-1.046483990e-02f, -1.059508294e-02f, -1.072527148e-02f, -1.085540531e-02f, -1.098548424e-02f, -1.111550805e-02f, -1.124547654e-02f, -1.137538951e-02f, -1.150524675e-02f, -1.163504806e-02f,
+-1.176479324e-02f, -1.189448207e-02f, -1.202411436e-02f, -1.215368991e-02f, -1.228320851e-02f, -1.241266995e-02f, -1.254207404e-02f, -1.267142057e-02f, -1.280070935e-02f, -1.292994015e-02f,
+-1.305911280e-02f, -1.318822707e-02f, -1.331728278e-02f, -1.344627971e-02f, -1.357521767e-02f, -1.370409646e-02f, -1.383291587e-02f, -1.396167570e-02f, -1.409037575e-02f, -1.421901582e-02f,
+-1.434759572e-02f, -1.447611523e-02f, -1.460457416e-02f, -1.473297231e-02f, -1.486130947e-02f, -1.498958546e-02f, -1.511780006e-02f, -1.524595308e-02f, -1.537404431e-02f, -1.550207357e-02f,
+-1.563004065e-02f, -1.575794534e-02f, -1.588578746e-02f, -1.601356681e-02f, -1.614128317e-02f, -1.626893636e-02f, -1.639652618e-02f, -1.652405243e-02f, -1.665151491e-02f, -1.677891343e-02f,
+-1.690624778e-02f, -1.703351776e-02f, -1.716072319e-02f, -1.728786386e-02f, -1.741493958e-02f, -1.754195015e-02f, -1.766889537e-02f, -1.779577505e-02f, -1.792258899e-02f, -1.804933699e-02f,
+-1.817601886e-02f, -1.830263440e-02f, -1.842918342e-02f, -1.855566572e-02f, -1.868208110e-02f, -1.880842937e-02f, -1.893471034e-02f, -1.906092381e-02f, -1.918706958e-02f, -1.931314746e-02f,
+-1.943915726e-02f, -1.956509878e-02f, -1.969097182e-02f, -1.981677620e-02f, -1.994251172e-02f, -2.006817819e-02f, -2.019377541e-02f, -2.031930318e-02f, -2.044476133e-02f, -2.057014964e-02f,
+-2.069546794e-02f, -2.082071603e-02f, -2.094589371e-02f, -2.107100079e-02f, -2.119603708e-02f, -2.132100240e-02f, -2.144589654e-02f, -2.157071931e-02f, -2.169547053e-02f, -2.182015001e-02f,
+-2.194475754e-02f, -2.206929295e-02f, -2.219375603e-02f, -2.231814661e-02f, -2.244246448e-02f, -2.256670947e-02f, -2.269088137e-02f, -2.281498000e-02f, -2.293900517e-02f, -2.306295669e-02f,
+-2.318683437e-02f, -2.331063802e-02f, -2.343436745e-02f, -2.355802247e-02f, -2.368160290e-02f, -2.380510855e-02f, -2.392853922e-02f, -2.405189473e-02f, -2.417517490e-02f, -2.429837952e-02f,
+-2.442150843e-02f, -2.454456142e-02f, -2.466753831e-02f, -2.479043892e-02f, -2.491326305e-02f, -2.503601052e-02f, -2.515868115e-02f, -2.528127474e-02f, -2.540379112e-02f, -2.552623009e-02f,
+-2.564859147e-02f, -2.577087507e-02f, -2.589308071e-02f, -2.601520820e-02f, -2.613725736e-02f, -2.625922800e-02f, -2.638111994e-02f, -2.650293299e-02f, -2.662466697e-02f, -2.674632170e-02f,
+-2.686789698e-02f, -2.698939264e-02f, -2.711080850e-02f, -2.723214436e-02f, -2.735340005e-02f, -2.747457538e-02f, -2.759567016e-02f, -2.771668423e-02f, -2.783761739e-02f, -2.795846946e-02f,
+-2.807924026e-02f, -2.819992960e-02f, -2.832053732e-02f, -2.844106321e-02f, -2.856150711e-02f, -2.868186883e-02f, -2.880214818e-02f, -2.892234500e-02f, -2.904245909e-02f, -2.916249028e-02f,
+-2.928243838e-02f, -2.940230322e-02f, -2.952208462e-02f, -2.964178240e-02f, -2.976139637e-02f, -2.988092635e-02f, -3.000037218e-02f, -3.011973366e-02f, -3.023901063e-02f, -3.035820289e-02f,
+-3.047731028e-02f, -3.059633261e-02f, -3.071526971e-02f, -3.083412139e-02f, -3.095288749e-02f, -3.107156781e-02f, -3.119016219e-02f, -3.130867045e-02f, -3.142709241e-02f, -3.154542790e-02f,
+-3.166367673e-02f, -3.178183873e-02f, -3.189991372e-02f, -3.201790154e-02f, -3.213580199e-02f, -3.225361491e-02f, -3.237134013e-02f, -3.248897746e-02f, -3.260652672e-02f, -3.272398776e-02f,
+-3.284136039e-02f, -3.295864443e-02f, -3.307583971e-02f, -3.319294606e-02f, -3.330996331e-02f, -3.342689127e-02f, -3.354372978e-02f, -3.366047867e-02f, -3.377713775e-02f, -3.389370686e-02f,
+-3.401018582e-02f, -3.412657447e-02f, -3.424287262e-02f, -3.435908011e-02f, -3.447519677e-02f, -3.459122241e-02f, -3.470715688e-02f, -3.482300000e-02f, -3.493875159e-02f, -3.505441150e-02f,
+-3.516997954e-02f, -3.528545554e-02f, -3.540083934e-02f, -3.551613076e-02f, -3.563132964e-02f, -3.574643581e-02f, -3.586144909e-02f, -3.597636931e-02f, -3.609119631e-02f, -3.620592992e-02f,
+-3.632056997e-02f, -3.643511629e-02f, -3.654956870e-02f, -3.666392706e-02f, -3.677819117e-02f, -3.689236089e-02f, -3.700643603e-02f, -3.712041643e-02f, -3.723430193e-02f, -3.734809236e-02f,
+-3.746178755e-02f, -3.757538733e-02f, -3.768889154e-02f, -3.780230001e-02f, -3.791561257e-02f, -3.802882907e-02f, -3.814194932e-02f, -3.825497318e-02f, -3.836790047e-02f, -3.848073103e-02f,
+-3.859346469e-02f, -3.870610129e-02f, -3.881864066e-02f, -3.893108264e-02f, -3.904342707e-02f, -3.915567378e-02f, -3.926782260e-02f, -3.937987339e-02f, -3.949182596e-02f, -3.960368016e-02f,
+-3.971543583e-02f, -3.982709280e-02f, -3.993865091e-02f, -4.005011000e-02f, -4.016146991e-02f, -4.027273047e-02f, -4.038389153e-02f, -4.049495292e-02f, -4.060591447e-02f, -4.071677604e-02f,
+-4.082753746e-02f, -4.093819856e-02f, -4.104875920e-02f, -4.115921920e-02f, -4.126957841e-02f, -4.137983667e-02f, -4.148999381e-02f, -4.160004969e-02f, -4.171000414e-02f, -4.181985700e-02f,
+-4.192960811e-02f, -4.203925732e-02f, -4.214880446e-02f, -4.225824938e-02f, -4.236759193e-02f, -4.247683193e-02f, -4.258596924e-02f, -4.269500371e-02f, -4.280393516e-02f, -4.291276344e-02f,
+-4.302148841e-02f, -4.313010990e-02f, -4.323862775e-02f, -4.334704182e-02f, -4.345535193e-02f, -4.356355795e-02f, -4.367165971e-02f, -4.377965706e-02f, -4.388754984e-02f, -4.399533791e-02f,
+-4.410302109e-02f, -4.421059925e-02f, -4.431807222e-02f, -4.442543986e-02f, -4.453270201e-02f, -4.463985851e-02f, -4.474690921e-02f, -4.485385397e-02f, -4.496069262e-02f, -4.506742502e-02f,
+-4.517405101e-02f, -4.528057044e-02f, -4.538698316e-02f, -4.549328901e-02f, -4.559948785e-02f, -4.570557953e-02f, -4.581156389e-02f, -4.591744078e-02f, -4.602321006e-02f, -4.612887156e-02f,
+-4.623442515e-02f, -4.633987067e-02f, -4.644520798e-02f, -4.655043691e-02f, -4.665555733e-02f, -4.676056909e-02f, -4.686547203e-02f, -4.697026601e-02f, -4.707495088e-02f, -4.717952649e-02f,
+-4.728399269e-02f, -4.738834934e-02f, -4.749259628e-02f, -4.759673338e-02f, -4.770076048e-02f, -4.780467744e-02f, -4.790848411e-02f, -4.801218034e-02f, -4.811576599e-02f, -4.821924091e-02f,
+-4.832260496e-02f, -4.842585799e-02f, -4.852899985e-02f, -4.863203041e-02f, -4.873494951e-02f, -4.883775702e-02f, -4.894045278e-02f, -4.904303665e-02f, -4.914550849e-02f, -4.924786816e-02f,
+-4.935011551e-02f, -4.945225039e-02f, -4.955427268e-02f, -4.965618221e-02f, -4.975797886e-02f, -4.985966247e-02f, -4.996123291e-02f, -5.006269004e-02f, -5.016403370e-02f, -5.026526377e-02f,
+-5.036638009e-02f, -5.046738254e-02f, -5.056827096e-02f, -5.066904522e-02f, -5.076970518e-02f, -5.087025069e-02f, -5.097068162e-02f, -5.107099783e-02f, -5.117119917e-02f, -5.127128552e-02f,
+-5.137125672e-02f, -5.147111264e-02f, -5.157085315e-02f, -5.167047810e-02f, -5.176998736e-02f, -5.186938079e-02f, -5.196865825e-02f, -5.206781960e-02f, -5.216686470e-02f, -5.226579343e-02f,
+-5.236460564e-02f, -5.246330119e-02f, -5.256187996e-02f, -5.266034180e-02f, -5.275868658e-02f, -5.285691416e-02f, -5.295502441e-02f, -5.305301719e-02f, -5.315089237e-02f, -5.324864981e-02f,
+-5.334628938e-02f, -5.344381094e-02f, -5.354121437e-02f, -5.363849952e-02f, -5.373566626e-02f, -5.383271447e-02f, -5.392964400e-02f, -5.402645473e-02f, -5.412314651e-02f, -5.421971923e-02f,
+-5.431617275e-02f, -5.441250693e-02f, -5.450872164e-02f, -5.460481676e-02f, -5.470079215e-02f, -5.479664768e-02f, -5.489238322e-02f, -5.498799864e-02f, -5.508349380e-02f, -5.517886859e-02f,
+-5.527412287e-02f, -5.536925650e-02f, -5.546426937e-02f, -5.555916134e-02f, -5.565393228e-02f, -5.574858207e-02f, -5.584311057e-02f, -5.593751766e-02f, -5.603180321e-02f, -5.612596709e-02f,
+-5.622000917e-02f, -5.631392934e-02f, -5.640772745e-02f, -5.650140339e-02f, -5.659495703e-02f, -5.668838823e-02f, -5.678169689e-02f, -5.687488286e-02f, -5.696794603e-02f, -5.706088626e-02f,
+-5.715370344e-02f, -5.724639744e-02f, -5.733896813e-02f, -5.743141539e-02f, -5.752373910e-02f, -5.761593913e-02f, -5.770801536e-02f, -5.779996766e-02f, -5.789179592e-02f, -5.798350000e-02f,
+-5.807507979e-02f, -5.816653517e-02f, -5.825786600e-02f, -5.834907218e-02f, -5.844015357e-02f, -5.853111006e-02f, -5.862194153e-02f, -5.871264784e-02f, -5.880322890e-02f, -5.889368456e-02f,
+-5.898401472e-02f, -5.907421925e-02f, -5.916429803e-02f, -5.925425095e-02f, -5.934407788e-02f, -5.943377870e-02f, -5.952335330e-02f, -5.961280156e-02f, -5.970212335e-02f, -5.979131857e-02f,
+-5.988038709e-02f, -5.996932879e-02f, -6.005814356e-02f, -6.014683128e-02f, -6.023539184e-02f, -6.032382511e-02f, -6.041213099e-02f, -6.050030934e-02f, -6.058836007e-02f, -6.067628305e-02f,
+-6.076407816e-02f, -6.085174530e-02f, -6.093928434e-02f, -6.102669517e-02f, -6.111397769e-02f, -6.120113176e-02f, -6.128815729e-02f, -6.137505415e-02f, -6.146182223e-02f, -6.154846142e-02f,
+-6.163497161e-02f, -6.172135267e-02f, -6.180760451e-02f, -6.189372701e-02f, -6.197972005e-02f, -6.206558353e-02f, -6.215131732e-02f, -6.223692133e-02f, -6.232239544e-02f, -6.240773954e-02f,
+-6.249295351e-02f, -6.257803726e-02f, -6.266299066e-02f, -6.274781361e-02f, -6.283250599e-02f, -6.291706771e-02f, -6.300149864e-02f, -6.308579869e-02f, -6.316996773e-02f, -6.325400568e-02f,
+-6.333791240e-02f, -6.342168781e-02f, -6.350533178e-02f, -6.358884421e-02f, -6.367222501e-02f, -6.375547404e-02f, -6.383859122e-02f, -6.392157644e-02f, -6.400442958e-02f, -6.408715055e-02f,
+-6.416973924e-02f, -6.425219553e-02f, -6.433451933e-02f, -6.441671054e-02f, -6.449876904e-02f, -6.458069473e-02f, -6.466248751e-02f, -6.474414727e-02f, -6.482567392e-02f, -6.490706734e-02f,
+-6.498832744e-02f, -6.506945410e-02f, -6.515044723e-02f, -6.523130673e-02f, -6.531203249e-02f, -6.539262442e-02f, -6.547308240e-02f, -6.555340634e-02f, -6.563359613e-02f, -6.571365168e-02f,
+-6.579357289e-02f, -6.587335965e-02f, -6.595301186e-02f, -6.603252943e-02f, -6.611191225e-02f, -6.619116023e-02f, -6.627027326e-02f, -6.634925125e-02f, -6.642809410e-02f, -6.650680170e-02f,
+-6.658537397e-02f, -6.666381079e-02f, -6.674211209e-02f, -6.682027775e-02f, -6.689830768e-02f, -6.697620178e-02f, -6.705395996e-02f, -6.713158212e-02f, -6.720906816e-02f, -6.728641799e-02f,
+-6.736363151e-02f, -6.744070863e-02f, -6.751764925e-02f, -6.759445328e-02f, -6.767112061e-02f, -6.774765117e-02f, -6.782404484e-02f, -6.790030155e-02f, -6.797642119e-02f, -6.805240367e-02f,
+-6.812824889e-02f, -6.820395677e-02f, -6.827952722e-02f, -6.835496013e-02f, -6.843025542e-02f, -6.850541300e-02f, -6.858043277e-02f, -6.865531464e-02f, -6.873005853e-02f, -6.880466433e-02f,
+-6.887913196e-02f, -6.895346133e-02f, -6.902765235e-02f, -6.910170493e-02f, -6.917561897e-02f, -6.924939440e-02f, -6.932303111e-02f, -6.939652903e-02f, -6.946988806e-02f, -6.954310811e-02f,
+-6.961618910e-02f, -6.968913093e-02f, -6.976193353e-02f, -6.983459680e-02f, -6.990712065e-02f, -6.997950500e-02f, -7.005174976e-02f, -7.012385485e-02f, -7.019582018e-02f, -7.026764566e-02f,
+-7.033933121e-02f, -7.041087674e-02f, -7.048228217e-02f, -7.055354741e-02f, -7.062467237e-02f, -7.069565698e-02f, -7.076650115e-02f, -7.083720479e-02f, -7.090776783e-02f, -7.097819017e-02f,
+-7.104847174e-02f, -7.111861244e-02f, -7.118861221e-02f, -7.125847096e-02f, -7.132818860e-02f, -7.139776505e-02f, -7.146720023e-02f, -7.153649407e-02f, -7.160564647e-02f, -7.167465736e-02f,
+-7.174352666e-02f, -7.181225429e-02f, -7.188084016e-02f, -7.194928420e-02f, -7.201758633e-02f, -7.208574646e-02f, -7.215376453e-02f, -7.222164045e-02f, -7.228937413e-02f, -7.235696552e-02f,
+-7.242441452e-02f, -7.249172105e-02f, -7.255888505e-02f, -7.262590643e-02f, -7.269278512e-02f, -7.275952103e-02f, -7.282611410e-02f, -7.289256425e-02f, -7.295887140e-02f, -7.302503547e-02f,
+-7.309105639e-02f, -7.315693409e-02f, -7.322266849e-02f, -7.328825951e-02f, -7.335370708e-02f, -7.341901113e-02f, -7.348417158e-02f, -7.354918836e-02f, -7.361406140e-02f, -7.367879062e-02f,
+-7.374337594e-02f, -7.380781731e-02f, -7.387211464e-02f, -7.393626786e-02f, -7.400027690e-02f, -7.406414169e-02f, -7.412786216e-02f, -7.419143824e-02f, -7.425486985e-02f, -7.431815692e-02f,
+-7.438129939e-02f, -7.444429719e-02f, -7.450715024e-02f, -7.456985848e-02f, -7.463242183e-02f, -7.469484023e-02f, -7.475711361e-02f, -7.481924190e-02f, -7.488122503e-02f, -7.494306293e-02f,
+-7.500475554e-02f, -7.506630279e-02f, -7.512770461e-02f, -7.518896094e-02f, -7.525007170e-02f, -7.531103684e-02f, -7.537185628e-02f, -7.543252996e-02f, -7.549305781e-02f, -7.555343977e-02f,
+-7.561367577e-02f, -7.567376576e-02f, -7.573370965e-02f, -7.579350740e-02f, -7.585315893e-02f, -7.591266418e-02f, -7.597202309e-02f, -7.603123560e-02f, -7.609030164e-02f, -7.614922114e-02f,
+-7.620799405e-02f, -7.626662031e-02f, -7.632509985e-02f, -7.638343260e-02f, -7.644161852e-02f, -7.649965753e-02f, -7.655754958e-02f, -7.661529461e-02f, -7.667289255e-02f, -7.673034335e-02f,
+-7.678764694e-02f, -7.684480326e-02f, -7.690181227e-02f, -7.695867389e-02f, -7.701538806e-02f, -7.707195474e-02f, -7.712837386e-02f, -7.718464536e-02f, -7.724076919e-02f, -7.729674528e-02f,
+-7.735257358e-02f, -7.740825404e-02f, -7.746378659e-02f, -7.751917118e-02f, -7.757440776e-02f, -7.762949626e-02f, -7.768443663e-02f, -7.773922882e-02f, -7.779387277e-02f, -7.784836843e-02f,
+-7.790271574e-02f, -7.795691464e-02f, -7.801096509e-02f, -7.806486702e-02f, -7.811862039e-02f, -7.817222514e-02f, -7.822568122e-02f, -7.827898857e-02f, -7.833214715e-02f, -7.838515689e-02f,
+-7.843801776e-02f, -7.849072969e-02f, -7.854329263e-02f, -7.859570654e-02f, -7.864797136e-02f, -7.870008704e-02f, -7.875205353e-02f, -7.880387078e-02f, -7.885553874e-02f, -7.890705737e-02f,
+-7.895842660e-02f, -7.900964640e-02f, -7.906071670e-02f, -7.911163748e-02f, -7.916240866e-02f, -7.921303022e-02f, -7.926350209e-02f, -7.931382424e-02f, -7.936399661e-02f, -7.941401916e-02f,
+-7.946389183e-02f, -7.951361459e-02f, -7.956318739e-02f, -7.961261018e-02f, -7.966188292e-02f, -7.971100555e-02f, -7.975997804e-02f, -7.980880033e-02f, -7.985747239e-02f, -7.990599417e-02f,
+-7.995436563e-02f, -8.000258672e-02f, -8.005065739e-02f, -8.009857761e-02f, -8.014634733e-02f, -8.019396651e-02f, -8.024143510e-02f, -8.028875306e-02f, -8.033592036e-02f, -8.038293694e-02f,
+-8.042980277e-02f, -8.047651781e-02f, -8.052308201e-02f, -8.056949533e-02f, -8.061575774e-02f, -8.066186919e-02f, -8.070782964e-02f, -8.075363905e-02f, -8.079929738e-02f, -8.084480460e-02f,
+-8.089016066e-02f, -8.093536553e-02f, -8.098041917e-02f, -8.102532153e-02f, -8.107007258e-02f, -8.111467229e-02f, -8.115912061e-02f, -8.120341751e-02f, -8.124756295e-02f, -8.129155690e-02f,
+-8.133539931e-02f, -8.137909015e-02f, -8.142262939e-02f, -8.146601699e-02f, -8.150925292e-02f, -8.155233713e-02f, -8.159526960e-02f, -8.163805029e-02f, -8.168067916e-02f, -8.172315619e-02f,
+-8.176548133e-02f, -8.180765456e-02f, -8.184967584e-02f, -8.189154513e-02f, -8.193326241e-02f, -8.197482764e-02f, -8.201624080e-02f, -8.205750184e-02f, -8.209861073e-02f, -8.213956745e-02f,
+-8.218037197e-02f, -8.222102424e-02f, -8.226152425e-02f, -8.230187196e-02f, -8.234206734e-02f, -8.238211037e-02f, -8.242200100e-02f, -8.246173922e-02f, -8.250132498e-02f, -8.254075828e-02f,
+-8.258003906e-02f, -8.261916732e-02f, -8.265814301e-02f, -8.269696612e-02f, -8.273563661e-02f, -8.277415445e-02f, -8.281251962e-02f, -8.285073210e-02f, -8.288879185e-02f, -8.292669885e-02f,
+-8.296445308e-02f, -8.300205450e-02f, -8.303950310e-02f, -8.307679884e-02f, -8.311394170e-02f, -8.315093166e-02f, -8.318776870e-02f, -8.322445278e-02f, -8.326098389e-02f, -8.329736200e-02f,
+-8.333358708e-02f, -8.336965912e-02f, -8.340557809e-02f, -8.344134398e-02f, -8.347695674e-02f, -8.351241638e-02f, -8.354772285e-02f, -8.358287615e-02f, -8.361787624e-02f, -8.365272312e-02f,
+-8.368741675e-02f, -8.372195712e-02f, -8.375634420e-02f, -8.379057799e-02f, -8.382465845e-02f, -8.385858557e-02f, -8.389235932e-02f, -8.392597970e-02f, -8.395944668e-02f, -8.399276024e-02f,
+-8.402592036e-02f, -8.405892703e-02f, -8.409178023e-02f, -8.412447994e-02f, -8.415702614e-02f, -8.418941882e-02f, -8.422165796e-02f, -8.425374355e-02f, -8.428567556e-02f, -8.431745399e-02f,
+-8.434907881e-02f, -8.438055001e-02f, -8.441186758e-02f, -8.444303150e-02f, -8.447404175e-02f, -8.450489833e-02f, -8.453560122e-02f, -8.456615040e-02f, -8.459654586e-02f, -8.462678759e-02f,
+-8.465687557e-02f, -8.468680980e-02f, -8.471659025e-02f, -8.474621693e-02f, -8.477568980e-02f, -8.480500888e-02f, -8.483417413e-02f, -8.486318555e-02f, -8.489204314e-02f, -8.492074687e-02f,
+-8.494929674e-02f, -8.497769274e-02f, -8.500593486e-02f, -8.503402309e-02f, -8.506195742e-02f, -8.508973784e-02f, -8.511736434e-02f, -8.514483691e-02f, -8.517215555e-02f, -8.519932024e-02f,
+-8.522633099e-02f, -8.525318777e-02f, -8.527989059e-02f, -8.530643944e-02f, -8.533283431e-02f, -8.535907519e-02f, -8.538516207e-02f, -8.541109496e-02f, -8.543687385e-02f, -8.546249872e-02f,
+-8.548796958e-02f, -8.551328642e-02f, -8.553844923e-02f, -8.556345802e-02f, -8.558831277e-02f, -8.561301348e-02f, -8.563756015e-02f, -8.566195278e-02f, -8.568619136e-02f, -8.571027589e-02f,
+-8.573420636e-02f, -8.575798278e-02f, -8.578160514e-02f, -8.580507344e-02f, -8.582838768e-02f, -8.585154786e-02f, -8.587455397e-02f, -8.589740602e-02f, -8.592010400e-02f, -8.594264792e-02f,
+-8.596503777e-02f, -8.598727355e-02f, -8.600935527e-02f, -8.603128292e-02f, -8.605305651e-02f, -8.607467604e-02f, -8.609614150e-02f, -8.611745291e-02f, -8.613861026e-02f, -8.615961355e-02f,
+-8.618046279e-02f, -8.620115798e-02f, -8.622169913e-02f, -8.624208623e-02f, -8.626231928e-02f, -8.628239831e-02f, -8.630232330e-02f, -8.632209426e-02f, -8.634171119e-02f, -8.636117411e-02f,
+-8.638048301e-02f, -8.639963791e-02f, -8.641863880e-02f, -8.643748569e-02f, -8.645617859e-02f, -8.647471751e-02f, -8.649310245e-02f, -8.651133342e-02f, -8.652941042e-02f, -8.654733346e-02f,
+-8.656510256e-02f, -8.658271771e-02f, -8.660017893e-02f, -8.661748622e-02f, -8.663463960e-02f, -8.665163907e-02f, -8.666848463e-02f, -8.668517631e-02f, -8.670171411e-02f, -8.671809804e-02f,
+-8.673432811e-02f, -8.675040433e-02f, -8.676632671e-02f, -8.678209526e-02f, -8.679771000e-02f, -8.681317093e-02f, -8.682847806e-02f, -8.684363142e-02f, -8.685863100e-02f, -8.687347683e-02f,
+-8.688816891e-02f, -8.690270726e-02f, -8.691709189e-02f, -8.693132281e-02f, -8.694540005e-02f, -8.695932360e-02f, -8.697309350e-02f, -8.698670974e-02f, -8.700017235e-02f, -8.701348134e-02f,
+-8.702663672e-02f, -8.703963852e-02f, -8.705248674e-02f, -8.706518141e-02f, -8.707772253e-02f, -8.709011013e-02f, -8.710234423e-02f, -8.711442483e-02f, -8.712635196e-02f, -8.713812563e-02f,
+-8.714974586e-02f, -8.716121267e-02f, -8.717252609e-02f, -8.718368611e-02f, -8.719469277e-02f, -8.720554609e-02f, -8.721624608e-02f, -8.722679276e-02f, -8.723718615e-02f, -8.724742628e-02f,
+-8.725751316e-02f, -8.726744681e-02f, -8.727722725e-02f, -8.728685451e-02f, -8.729632861e-02f, -8.730564956e-02f, -8.731481739e-02f, -8.732383212e-02f, -8.733269378e-02f, -8.734140238e-02f,
+-8.734995795e-02f, -8.735836052e-02f, -8.736661009e-02f, -8.737470671e-02f, -8.738265038e-02f, -8.739044115e-02f, -8.739807902e-02f, -8.740556403e-02f, -8.741289619e-02f, -8.742007554e-02f,
+-8.742710211e-02f, -8.743397590e-02f, -8.744069696e-02f, -8.744726530e-02f, -8.745368096e-02f, -8.745994395e-02f, -8.746605431e-02f, -8.747201207e-02f, -8.747781724e-02f, -8.748346986e-02f,
+-8.748896996e-02f, -8.749431756e-02f, -8.749951270e-02f, -8.750455539e-02f, -8.750944567e-02f, -8.751418357e-02f, -8.751876912e-02f, -8.752320234e-02f, -8.752748327e-02f, -8.753161193e-02f,
+-8.753558836e-02f, -8.753941259e-02f, -8.754308464e-02f, -8.754660456e-02f, -8.754997236e-02f, -8.755318808e-02f, -8.755625176e-02f, -8.755916342e-02f, -8.756192309e-02f, -8.756453082e-02f,
+-8.756698662e-02f, -8.756929054e-02f, -8.757144261e-02f, -8.757344286e-02f, -8.757529132e-02f, -8.757698804e-02f, -8.757853303e-02f, -8.757992634e-02f, -8.758116800e-02f, -8.758225805e-02f,
+-8.758319652e-02f, -8.758398345e-02f, -8.758461887e-02f, -8.758510282e-02f, -8.758543533e-02f, -8.758561644e-02f, -8.758564619e-02f, -8.758552462e-02f, -8.758525175e-02f, -8.758482763e-02f,
+-8.758425230e-02f, -8.758352579e-02f, -8.758264815e-02f, -8.758161940e-02f, -8.758043959e-02f, -8.757910876e-02f, -8.757762695e-02f, -8.757599419e-02f, -8.757421053e-02f, -8.757227600e-02f,
+-8.757019064e-02f, -8.756795450e-02f, -8.756556762e-02f, -8.756303003e-02f, -8.756034178e-02f, -8.755750290e-02f, -8.755451345e-02f, -8.755137345e-02f, -8.754808296e-02f, -8.754464202e-02f,
+-8.754105066e-02f, -8.753730893e-02f, -8.753341688e-02f, -8.752937454e-02f, -8.752518196e-02f, -8.752083918e-02f, -8.751634625e-02f, -8.751170322e-02f, -8.750691011e-02f, -8.750196699e-02f,
+-8.749687389e-02f, -8.749163086e-02f, -8.748623795e-02f, -8.748069519e-02f, -8.747500265e-02f, -8.746916035e-02f, -8.746316835e-02f, -8.745702670e-02f, -8.745073544e-02f, -8.744429462e-02f,
+-8.743770428e-02f, -8.743096448e-02f, -8.742407525e-02f, -8.741703666e-02f, -8.740984874e-02f, -8.740251155e-02f, -8.739502513e-02f, -8.738738953e-02f, -8.737960481e-02f, -8.737167100e-02f,
+-8.736358817e-02f, -8.735535636e-02f, -8.734697561e-02f, -8.733844599e-02f, -8.732976754e-02f, -8.732094031e-02f, -8.731196435e-02f, -8.730283972e-02f, -8.729356646e-02f, -8.728414463e-02f,
+-8.727457428e-02f, -8.726485546e-02f, -8.725498822e-02f, -8.724497262e-02f, -8.723480871e-02f, -8.722449655e-02f, -8.721403617e-02f, -8.720342765e-02f, -8.719267103e-02f, -8.718176636e-02f,
+-8.717071371e-02f, -8.715951312e-02f, -8.714816466e-02f, -8.713666836e-02f, -8.712502430e-02f, -8.711323253e-02f, -8.710129310e-02f, -8.708920606e-02f, -8.707697148e-02f, -8.706458941e-02f,
+-8.705205990e-02f, -8.703938302e-02f, -8.702655882e-02f, -8.701358736e-02f, -8.700046869e-02f, -8.698720288e-02f, -8.697378998e-02f, -8.696023005e-02f, -8.694652314e-02f, -8.693266932e-02f,
+-8.691866865e-02f, -8.690452119e-02f, -8.689022698e-02f, -8.687578610e-02f, -8.686119861e-02f, -8.684646456e-02f, -8.683158401e-02f, -8.681655703e-02f, -8.680138367e-02f, -8.678606400e-02f,
+-8.677059807e-02f, -8.675498596e-02f, -8.673922772e-02f, -8.672332341e-02f, -8.670727309e-02f, -8.669107683e-02f, -8.667473469e-02f, -8.665824674e-02f, -8.664161303e-02f, -8.662483362e-02f,
+-8.660790860e-02f, -8.659083800e-02f, -8.657362191e-02f, -8.655626038e-02f, -8.653875349e-02f, -8.652110128e-02f, -8.650330384e-02f, -8.648536121e-02f, -8.646727348e-02f, -8.644904070e-02f,
+-8.643066294e-02f, -8.641214027e-02f, -8.639347275e-02f, -8.637466045e-02f, -8.635570344e-02f, -8.633660178e-02f, -8.631735554e-02f, -8.629796478e-02f, -8.627842959e-02f, -8.625875001e-02f,
+-8.623892613e-02f, -8.621895800e-02f, -8.619884570e-02f, -8.617858930e-02f, -8.615818887e-02f, -8.613764446e-02f, -8.611695617e-02f, -8.609612404e-02f, -8.607514816e-02f, -8.605402860e-02f,
+-8.603276541e-02f, -8.601135869e-02f, -8.598980848e-02f, -8.596811488e-02f, -8.594627794e-02f, -8.592429774e-02f, -8.590217435e-02f, -8.587990784e-02f, -8.585749828e-02f, -8.583494576e-02f,
+-8.581225033e-02f, -8.578941207e-02f, -8.576643106e-02f, -8.574330737e-02f, -8.572004107e-02f, -8.569663223e-02f, -8.567308094e-02f, -8.564938725e-02f, -8.562555126e-02f, -8.560157302e-02f,
+-8.557745263e-02f, -8.555319014e-02f, -8.552878564e-02f, -8.550423921e-02f, -8.547955091e-02f, -8.545472082e-02f, -8.542974903e-02f, -8.540463560e-02f, -8.537938062e-02f, -8.535398415e-02f,
+-8.532844628e-02f, -8.530276708e-02f, -8.527694663e-02f, -8.525098502e-02f, -8.522488231e-02f, -8.519863858e-02f, -8.517225391e-02f, -8.514572839e-02f, -8.511906208e-02f, -8.509225508e-02f,
+-8.506530745e-02f, -8.503821928e-02f, -8.501099064e-02f, -8.498362163e-02f, -8.495611230e-02f, -8.492846276e-02f, -8.490067307e-02f, -8.487274332e-02f, -8.484467358e-02f, -8.481646395e-02f,
+-8.478811449e-02f, -8.475962530e-02f, -8.473099646e-02f, -8.470222803e-02f, -8.467332012e-02f, -8.464427280e-02f, -8.461508614e-02f, -8.458576025e-02f, -8.455629519e-02f, -8.452669106e-02f,
+-8.449694793e-02f, -8.446706588e-02f, -8.443704501e-02f, -8.440688540e-02f, -8.437658713e-02f, -8.434615028e-02f, -8.431557495e-02f, -8.428486121e-02f, -8.425400914e-02f, -8.422301885e-02f,
+-8.419189040e-02f, -8.416062389e-02f, -8.412921941e-02f, -8.409767703e-02f, -8.406599685e-02f, -8.403417894e-02f, -8.400222341e-02f, -8.397013033e-02f, -8.393789980e-02f, -8.390553190e-02f,
+-8.387302671e-02f, -8.384038433e-02f, -8.380760484e-02f, -8.377468833e-02f, -8.374163490e-02f, -8.370844462e-02f, -8.367511759e-02f, -8.364165390e-02f, -8.360805364e-02f, -8.357431689e-02f,
+-8.354044374e-02f, -8.350643429e-02f, -8.347228863e-02f, -8.343800684e-02f, -8.340358902e-02f, -8.336903526e-02f, -8.333434564e-02f, -8.329952026e-02f, -8.326455922e-02f, -8.322946259e-02f,
+-8.319423048e-02f, -8.315886298e-02f, -8.312336017e-02f, -8.308772216e-02f, -8.305194903e-02f, -8.301604087e-02f, -8.297999778e-02f, -8.294381986e-02f, -8.290750719e-02f, -8.287105987e-02f,
+-8.283447799e-02f, -8.279776165e-02f, -8.276091094e-02f, -8.272392595e-02f, -8.268680679e-02f, -8.264955354e-02f, -8.261216630e-02f, -8.257464517e-02f, -8.253699024e-02f, -8.249920160e-02f,
+-8.246127936e-02f, -8.242322360e-02f, -8.238503443e-02f, -8.234671194e-02f, -8.230825623e-02f, -8.226966739e-02f, -8.223094553e-02f, -8.219209073e-02f, -8.215310310e-02f, -8.211398273e-02f,
+-8.207472973e-02f, -8.203534418e-02f, -8.199582620e-02f, -8.195617586e-02f, -8.191639329e-02f, -8.187647857e-02f, -8.183643180e-02f, -8.179625308e-02f, -8.175594252e-02f, -8.171550020e-02f,
+-8.167492624e-02f, -8.163422073e-02f, -8.159338377e-02f, -8.155241546e-02f, -8.151131591e-02f, -8.147008521e-02f, -8.142872346e-02f, -8.138723077e-02f, -8.134560723e-02f, -8.130385295e-02f,
+-8.126196803e-02f, -8.121995258e-02f, -8.117780669e-02f, -8.113553047e-02f, -8.109312401e-02f, -8.105058743e-02f, -8.100792082e-02f, -8.096512429e-02f, -8.092219794e-02f, -8.087914188e-02f,
+-8.083595621e-02f, -8.079264103e-02f, -8.074919644e-02f, -8.070562256e-02f, -8.066191948e-02f, -8.061808731e-02f, -8.057412616e-02f, -8.053003613e-02f, -8.048581732e-02f, -8.044146985e-02f,
+-8.039699381e-02f, -8.035238931e-02f, -8.030765647e-02f, -8.026279537e-02f, -8.021780614e-02f, -8.017268888e-02f, -8.012744369e-02f, -8.008207068e-02f, -8.003656996e-02f, -7.999094164e-02f,
+-7.994518582e-02f, -7.989930261e-02f, -7.985329213e-02f, -7.980715446e-02f, -7.976088974e-02f, -7.971449806e-02f, -7.966797953e-02f, -7.962133426e-02f, -7.957456237e-02f, -7.952766395e-02f,
+-7.948063912e-02f, -7.943348800e-02f, -7.938621068e-02f, -7.933880728e-02f, -7.929127791e-02f, -7.924362268e-02f, -7.919584169e-02f, -7.914793507e-02f, -7.909990292e-02f, -7.905174536e-02f,
+-7.900346248e-02f, -7.895505441e-02f, -7.890652126e-02f, -7.885786314e-02f, -7.880908016e-02f, -7.876017243e-02f, -7.871114007e-02f, -7.866198318e-02f, -7.861270189e-02f, -7.856329630e-02f,
+-7.851376652e-02f, -7.846411268e-02f, -7.841433488e-02f, -7.836443323e-02f, -7.831440786e-02f, -7.826425887e-02f, -7.821398638e-02f, -7.816359051e-02f, -7.811307136e-02f, -7.806242906e-02f,
+-7.801166371e-02f, -7.796077543e-02f, -7.790976435e-02f, -7.785863057e-02f, -7.780737420e-02f, -7.775599538e-02f, -7.770449420e-02f, -7.765287079e-02f, -7.760112526e-02f, -7.754925773e-02f,
+-7.749726832e-02f, -7.744515715e-02f, -7.739292432e-02f, -7.734056996e-02f, -7.728809419e-02f, -7.723549712e-02f, -7.718277887e-02f, -7.712993956e-02f, -7.707697931e-02f, -7.702389823e-02f,
+-7.697069644e-02f, -7.691737407e-02f, -7.686393123e-02f, -7.681036804e-02f, -7.675668461e-02f, -7.670288108e-02f, -7.664895755e-02f, -7.659491415e-02f, -7.654075100e-02f, -7.648646821e-02f,
+-7.643206591e-02f, -7.637754422e-02f, -7.632290326e-02f, -7.626814315e-02f, -7.621326401e-02f, -7.615826596e-02f, -7.610314912e-02f, -7.604791361e-02f, -7.599255957e-02f, -7.593708709e-02f,
+-7.588149632e-02f, -7.582578737e-02f, -7.576996036e-02f, -7.571401542e-02f, -7.565795267e-02f, -7.560177222e-02f, -7.554547421e-02f, -7.548905876e-02f, -7.543252599e-02f, -7.537587603e-02f,
+-7.531910899e-02f, -7.526222500e-02f, -7.520522419e-02f, -7.514810667e-02f, -7.509087258e-02f, -7.503352204e-02f, -7.497605517e-02f, -7.491847210e-02f, -7.486077295e-02f, -7.480295785e-02f,
+-7.474502692e-02f, -7.468698029e-02f, -7.462881808e-02f, -7.457054043e-02f, -7.451214745e-02f, -7.445363927e-02f, -7.439501602e-02f, -7.433627782e-02f, -7.427742480e-02f, -7.421845709e-02f,
+-7.415937482e-02f, -7.410017811e-02f, -7.404086708e-02f, -7.398144188e-02f, -7.392190261e-02f, -7.386224942e-02f, -7.380248243e-02f, -7.374260176e-02f, -7.368260756e-02f, -7.362249993e-02f,
+-7.356227902e-02f, -7.350194495e-02f, -7.344149785e-02f, -7.338093785e-02f, -7.332026507e-02f, -7.325947966e-02f, -7.319858173e-02f, -7.313757142e-02f, -7.307644886e-02f, -7.301521417e-02f,
+-7.295386749e-02f, -7.289240895e-02f, -7.283083867e-02f, -7.276915680e-02f, -7.270736345e-02f, -7.264545876e-02f, -7.258344286e-02f, -7.252131589e-02f, -7.245907796e-02f, -7.239672923e-02f,
+-7.233426981e-02f, -7.227169984e-02f, -7.220901944e-02f, -7.214622877e-02f, -7.208332793e-02f, -7.202031708e-02f, -7.195719633e-02f, -7.189396583e-02f, -7.183062571e-02f, -7.176717609e-02f,
+-7.170361711e-02f, -7.163994891e-02f, -7.157617162e-02f, -7.151228538e-02f, -7.144829031e-02f, -7.138418655e-02f, -7.131997423e-02f, -7.125565350e-02f, -7.119122448e-02f, -7.112668730e-02f,
+-7.106204211e-02f, -7.099728904e-02f, -7.093242822e-02f, -7.086745979e-02f, -7.080238388e-02f, -7.073720063e-02f, -7.067191018e-02f, -7.060651266e-02f, -7.054100820e-02f, -7.047539695e-02f,
+-7.040967903e-02f, -7.034385459e-02f, -7.027792376e-02f, -7.021188668e-02f, -7.014574349e-02f, -7.007949432e-02f, -7.001313931e-02f, -6.994667859e-02f, -6.988011231e-02f, -6.981344060e-02f,
+-6.974666360e-02f, -6.967978145e-02f, -6.961279428e-02f, -6.954570224e-02f, -6.947850545e-02f, -6.941120407e-02f, -6.934379823e-02f, -6.927628806e-02f, -6.920867372e-02f, -6.914095532e-02f,
+-6.907313302e-02f, -6.900520696e-02f, -6.893717727e-02f, -6.886904409e-02f, -6.880080756e-02f, -6.873246783e-02f, -6.866402503e-02f, -6.859547930e-02f, -6.852683079e-02f, -6.845807962e-02f,
+-6.838922596e-02f, -6.832026992e-02f, -6.825121167e-02f, -6.818205133e-02f, -6.811278904e-02f, -6.804342496e-02f, -6.797395922e-02f, -6.790439195e-02f, -6.783472332e-02f, -6.776495344e-02f,
+-6.769508248e-02f, -6.762511056e-02f, -6.755503784e-02f, -6.748486445e-02f, -6.741459054e-02f, -6.734421624e-02f, -6.727374171e-02f, -6.720316709e-02f, -6.713249251e-02f, -6.706171812e-02f,
+-6.699084407e-02f, -6.691987049e-02f, -6.684879754e-02f, -6.677762535e-02f, -6.670635407e-02f, -6.663498385e-02f, -6.656351482e-02f, -6.649194713e-02f, -6.642028093e-02f, -6.634851636e-02f,
+-6.627665357e-02f, -6.620469270e-02f, -6.613263389e-02f, -6.606047729e-02f, -6.598822304e-02f, -6.591587130e-02f, -6.584342220e-02f, -6.577087589e-02f, -6.569823252e-02f, -6.562549224e-02f,
+-6.555265518e-02f, -6.547972150e-02f, -6.540669134e-02f, -6.533356485e-02f, -6.526034217e-02f, -6.518702345e-02f, -6.511360884e-02f, -6.504009848e-02f, -6.496649253e-02f, -6.489279112e-02f,
+-6.481899441e-02f, -6.474510254e-02f, -6.467111567e-02f, -6.459703393e-02f, -6.452285748e-02f, -6.444858646e-02f, -6.437422102e-02f, -6.429976132e-02f, -6.422520749e-02f, -6.415055969e-02f,
+-6.407581806e-02f, -6.400098276e-02f, -6.392605393e-02f, -6.385103173e-02f, -6.377591629e-02f, -6.370070777e-02f, -6.362540632e-02f, -6.355001209e-02f, -6.347452523e-02f, -6.339894589e-02f,
+-6.332327421e-02f, -6.324751035e-02f, -6.317165445e-02f, -6.309570668e-02f, -6.301966717e-02f, -6.294353607e-02f, -6.286731355e-02f, -6.279099974e-02f, -6.271459481e-02f, -6.263809889e-02f,
+-6.256151215e-02f, -6.248483472e-02f, -6.240806677e-02f, -6.233120845e-02f, -6.225425990e-02f, -6.217722128e-02f, -6.210009273e-02f, -6.202287442e-02f, -6.194556649e-02f, -6.186816910e-02f,
+-6.179068239e-02f, -6.171310652e-02f, -6.163544165e-02f, -6.155768791e-02f, -6.147984548e-02f, -6.140191449e-02f, -6.132389511e-02f, -6.124578747e-02f, -6.116759175e-02f, -6.108930809e-02f,
+-6.101093664e-02f, -6.093247756e-02f, -6.085393101e-02f, -6.077529712e-02f, -6.069657607e-02f, -6.061776799e-02f, -6.053887306e-02f, -6.045989141e-02f, -6.038082321e-02f, -6.030166860e-02f,
+-6.022242775e-02f, -6.014310081e-02f, -6.006368793e-02f, -5.998418926e-02f, -5.990460497e-02f, -5.982493520e-02f, -5.974518012e-02f, -5.966533987e-02f, -5.958541461e-02f, -5.950540450e-02f,
+-5.942530969e-02f, -5.934513034e-02f, -5.926486661e-02f, -5.918451864e-02f, -5.910408660e-02f, -5.902357065e-02f, -5.894297093e-02f, -5.886228760e-02f, -5.878152082e-02f, -5.870067075e-02f,
+-5.861973755e-02f, -5.853872136e-02f, -5.845762235e-02f, -5.837644067e-02f, -5.829517649e-02f, -5.821382995e-02f, -5.813240121e-02f, -5.805089044e-02f, -5.796929778e-02f, -5.788762341e-02f,
+-5.780586746e-02f, -5.772403011e-02f, -5.764211151e-02f, -5.756011181e-02f, -5.747803118e-02f, -5.739586977e-02f, -5.731362775e-02f, -5.723130526e-02f, -5.714890248e-02f, -5.706641954e-02f,
+-5.698385663e-02f, -5.690121389e-02f, -5.681849148e-02f, -5.673568956e-02f, -5.665280829e-02f, -5.656984783e-02f, -5.648680834e-02f, -5.640368998e-02f, -5.632049291e-02f, -5.623721728e-02f,
+-5.615386326e-02f, -5.607043100e-02f, -5.598692067e-02f, -5.590333242e-02f, -5.581966642e-02f, -5.573592283e-02f, -5.565210180e-02f, -5.556820349e-02f, -5.548422807e-02f, -5.540017570e-02f,
+-5.531604653e-02f, -5.523184074e-02f, -5.514755847e-02f, -5.506319988e-02f, -5.497876515e-02f, -5.489425443e-02f, -5.480966788e-02f, -5.472500566e-02f, -5.464026794e-02f, -5.455545487e-02f,
+-5.447056662e-02f, -5.438560334e-02f, -5.430056521e-02f, -5.421545238e-02f, -5.413026501e-02f, -5.404500326e-02f, -5.395966731e-02f, -5.387425730e-02f, -5.378877340e-02f, -5.370321577e-02f,
+-5.361758459e-02f, -5.353188000e-02f, -5.344610216e-02f, -5.336025126e-02f, -5.327432744e-02f, -5.318833086e-02f, -5.310226170e-02f, -5.301612011e-02f, -5.292990626e-02f, -5.284362031e-02f,
+-5.275726242e-02f, -5.267083276e-02f, -5.258433149e-02f, -5.249775877e-02f, -5.241111477e-02f, -5.232439965e-02f, -5.223761357e-02f, -5.215075670e-02f, -5.206382921e-02f, -5.197683124e-02f,
+-5.188976298e-02f, -5.180262458e-02f, -5.171541621e-02f, -5.162813803e-02f, -5.154079021e-02f, -5.145337290e-02f, -5.136588629e-02f, -5.127833052e-02f, -5.119070576e-02f, -5.110301219e-02f,
+-5.101524996e-02f, -5.092741924e-02f, -5.083952019e-02f, -5.075155298e-02f, -5.066351777e-02f, -5.057541474e-02f, -5.048724403e-02f, -5.039900583e-02f, -5.031070029e-02f, -5.022232758e-02f,
+-5.013388787e-02f, -5.004538132e-02f, -4.995680810e-02f, -4.986816837e-02f, -4.977946230e-02f, -4.969069005e-02f, -4.960185180e-02f, -4.951294770e-02f, -4.942397793e-02f, -4.933494265e-02f,
+-4.924584202e-02f, -4.915667621e-02f, -4.906744539e-02f, -4.897814973e-02f, -4.888878939e-02f, -4.879936454e-02f, -4.870987534e-02f, -4.862032197e-02f, -4.853070459e-02f, -4.844102336e-02f,
+-4.835127845e-02f, -4.826147004e-02f, -4.817159828e-02f, -4.808166334e-02f, -4.799166540e-02f, -4.790160462e-02f, -4.781148116e-02f, -4.772129520e-02f, -4.763104690e-02f, -4.754073643e-02f,
+-4.745036396e-02f, -4.735992965e-02f, -4.726943367e-02f, -4.717887620e-02f, -4.708825739e-02f, -4.699757742e-02f, -4.690683646e-02f, -4.681603467e-02f, -4.672517222e-02f, -4.663424928e-02f,
+-4.654326602e-02f, -4.645222260e-02f, -4.636111920e-02f, -4.626995598e-02f, -4.617873312e-02f, -4.608745078e-02f, -4.599610912e-02f, -4.590470833e-02f, -4.581324856e-02f, -4.572172999e-02f,
+-4.563015278e-02f, -4.553851711e-02f, -4.544682314e-02f, -4.535507105e-02f, -4.526326099e-02f, -4.517139315e-02f, -4.507946769e-02f, -4.498748478e-02f, -4.489544459e-02f, -4.480334729e-02f,
+-4.471119305e-02f, -4.461898203e-02f, -4.452671442e-02f, -4.443439037e-02f, -4.434201006e-02f, -4.424957365e-02f, -4.415708133e-02f, -4.406453325e-02f, -4.397192959e-02f, -4.387927052e-02f,
+-4.378655621e-02f, -4.369378683e-02f, -4.360096254e-02f, -4.350808352e-02f, -4.341514995e-02f, -4.332216198e-02f, -4.322911979e-02f, -4.313602356e-02f, -4.304287344e-02f, -4.294966962e-02f,
+-4.285641226e-02f, -4.276310153e-02f, -4.266973761e-02f, -4.257632067e-02f, -4.248285087e-02f, -4.238932839e-02f, -4.229575340e-02f, -4.220212606e-02f, -4.210844656e-02f, -4.201471506e-02f,
+-4.192093173e-02f, -4.182709675e-02f, -4.173321028e-02f, -4.163927250e-02f, -4.154528358e-02f, -4.145124369e-02f, -4.135715300e-02f, -4.126301168e-02f, -4.116881991e-02f, -4.107457785e-02f,
+-4.098028569e-02f, -4.088594358e-02f, -4.079155170e-02f, -4.069711023e-02f, -4.060261934e-02f, -4.050807919e-02f, -4.041348996e-02f, -4.031885182e-02f, -4.022416495e-02f, -4.012942951e-02f,
+-4.003464568e-02f, -3.993981363e-02f, -3.984493353e-02f, -3.975000556e-02f, -3.965502988e-02f, -3.956000668e-02f, -3.946493611e-02f, -3.936981836e-02f, -3.927465360e-02f, -3.917944199e-02f,
+-3.908418372e-02f, -3.898887896e-02f, -3.889352787e-02f, -3.879813063e-02f, -3.870268741e-02f, -3.860719839e-02f, -3.851166374e-02f, -3.841608363e-02f, -3.832045823e-02f, -3.822478772e-02f,
+-3.812907227e-02f, -3.803331206e-02f, -3.793750725e-02f, -3.784165802e-02f, -3.774576454e-02f, -3.764982699e-02f, -3.755384554e-02f, -3.745782036e-02f, -3.736175163e-02f, -3.726563951e-02f,
+-3.716948419e-02f, -3.707328583e-02f, -3.697704461e-02f, -3.688076071e-02f, -3.678443429e-02f, -3.668806553e-02f, -3.659165460e-02f, -3.649520168e-02f, -3.639870694e-02f, -3.630217056e-02f,
+-3.620559270e-02f, -3.610897355e-02f, -3.601231326e-02f, -3.591561203e-02f, -3.581887002e-02f, -3.572208741e-02f, -3.562526437e-02f, -3.552840107e-02f, -3.543149770e-02f, -3.533455441e-02f,
+-3.523757139e-02f, -3.514054881e-02f, -3.504348685e-02f, -3.494638567e-02f, -3.484924546e-02f, -3.475206638e-02f, -3.465484862e-02f, -3.455759234e-02f, -3.446029772e-02f, -3.436296493e-02f,
+-3.426559415e-02f, -3.416818556e-02f, -3.407073932e-02f, -3.397325561e-02f, -3.387573461e-02f, -3.377817649e-02f, -3.368058142e-02f, -3.358294958e-02f, -3.348528114e-02f, -3.338757628e-02f,
+-3.328983518e-02f, -3.319205800e-02f, -3.309424492e-02f, -3.299639611e-02f, -3.289851176e-02f, -3.280059204e-02f, -3.270263711e-02f, -3.260464716e-02f, -3.250662236e-02f, -3.240856288e-02f,
+-3.231046890e-02f, -3.221234059e-02f, -3.211417813e-02f, -3.201598170e-02f, -3.191775146e-02f, -3.181948760e-02f, -3.172119028e-02f, -3.162285969e-02f, -3.152449599e-02f, -3.142609937e-02f,
+-3.132766999e-02f, -3.122920803e-02f, -3.113071368e-02f, -3.103218709e-02f, -3.093362845e-02f, -3.083503794e-02f, -3.073641572e-02f, -3.063776197e-02f, -3.053907688e-02f, -3.044036060e-02f,
+-3.034161332e-02f, -3.024283521e-02f, -3.014402646e-02f, -3.004518722e-02f, -2.994631768e-02f, -2.984741802e-02f, -2.974848841e-02f, -2.964952901e-02f, -2.955054002e-02f, -2.945152160e-02f,
+-2.935247393e-02f, -2.925339719e-02f, -2.915429154e-02f, -2.905515717e-02f, -2.895599425e-02f, -2.885680296e-02f, -2.875758347e-02f, -2.865833595e-02f, -2.855906058e-02f, -2.845975754e-02f,
+-2.836042701e-02f, -2.826106915e-02f, -2.816168414e-02f, -2.806227216e-02f, -2.796283339e-02f, -2.786336799e-02f, -2.776387615e-02f, -2.766435804e-02f, -2.756481383e-02f, -2.746524370e-02f,
+-2.736564783e-02f, -2.726602639e-02f, -2.716637956e-02f, -2.706670751e-02f, -2.696701041e-02f, -2.686728845e-02f, -2.676754180e-02f, -2.666777063e-02f, -2.656797512e-02f, -2.646815545e-02f,
+-2.636831178e-02f, -2.626844430e-02f, -2.616855318e-02f, -2.606863860e-02f, -2.596870073e-02f, -2.586873975e-02f, -2.576875583e-02f, -2.566874914e-02f, -2.556871987e-02f, -2.546866819e-02f,
+-2.536859428e-02f, -2.526849831e-02f, -2.516838045e-02f, -2.506824088e-02f, -2.496807977e-02f, -2.486789731e-02f, -2.476769367e-02f, -2.466746902e-02f, -2.456722354e-02f, -2.446695740e-02f,
+-2.436667078e-02f, -2.426636385e-02f, -2.416603680e-02f, -2.406568979e-02f, -2.396532300e-02f, -2.386493661e-02f, -2.376453079e-02f, -2.366410571e-02f, -2.356366156e-02f, -2.346319850e-02f,
+-2.336271672e-02f, -2.326221639e-02f, -2.316169768e-02f, -2.306116077e-02f, -2.296060584e-02f, -2.286003305e-02f, -2.275944259e-02f, -2.265883464e-02f, -2.255820935e-02f, -2.245756692e-02f,
+-2.235690752e-02f, -2.225623132e-02f, -2.215553849e-02f, -2.205482922e-02f, -2.195410368e-02f, -2.185336204e-02f, -2.175260447e-02f, -2.165183116e-02f, -2.155104229e-02f, -2.145023801e-02f,
+-2.134941851e-02f, -2.124858397e-02f, -2.114773456e-02f, -2.104687045e-02f, -2.094599183e-02f, -2.084509886e-02f, -2.074419172e-02f, -2.064327058e-02f, -2.054233563e-02f, -2.044138703e-02f,
+-2.034042496e-02f, -2.023944960e-02f, -2.013846112e-02f, -2.003745969e-02f, -1.993644550e-02f, -1.983541871e-02f, -1.973437950e-02f, -1.963332805e-02f, -1.953226453e-02f, -1.943118912e-02f,
+-1.933010199e-02f, -1.922900331e-02f, -1.912789326e-02f, -1.902677202e-02f, -1.892563976e-02f, -1.882449666e-02f, -1.872334288e-02f, -1.862217861e-02f, -1.852100402e-02f, -1.841981928e-02f,
+-1.831862458e-02f, -1.821742007e-02f, -1.811620595e-02f, -1.801498238e-02f, -1.791374953e-02f, -1.781250759e-02f, -1.771125673e-02f, -1.760999712e-02f, -1.750872893e-02f, -1.740745234e-02f,
+-1.730616753e-02f, -1.720487467e-02f, -1.710357394e-02f, -1.700226550e-02f, -1.690094953e-02f, -1.679962622e-02f, -1.669829572e-02f, -1.659695822e-02f, -1.649561390e-02f, -1.639426291e-02f,
+-1.629290545e-02f, -1.619154168e-02f, -1.609017178e-02f, -1.598879592e-02f, -1.588741427e-02f, -1.578602702e-02f, -1.568463432e-02f, -1.558323637e-02f, -1.548183333e-02f, -1.538042538e-02f,
+-1.527901269e-02f, -1.517759543e-02f, -1.507617378e-02f, -1.497474791e-02f, -1.487331800e-02f, -1.477188421e-02f, -1.467044673e-02f, -1.456900573e-02f, -1.446756138e-02f, -1.436611386e-02f,
+-1.426466333e-02f, -1.416320998e-02f, -1.406175397e-02f, -1.396029549e-02f, -1.385883469e-02f, -1.375737176e-02f, -1.365590688e-02f, -1.355444020e-02f, -1.345297192e-02f, -1.335150219e-02f,
+-1.325003120e-02f, -1.314855911e-02f, -1.304708611e-02f, -1.294561236e-02f, -1.284413803e-02f, -1.274266331e-02f, -1.264118836e-02f, -1.253971336e-02f, -1.243823847e-02f, -1.233676388e-02f,
+-1.223528976e-02f, -1.213381627e-02f, -1.203234359e-02f, -1.193087190e-02f, -1.182940137e-02f, -1.172793216e-02f, -1.162646446e-02f, -1.152499844e-02f, -1.142353426e-02f, -1.132207210e-02f,
+-1.122061214e-02f, -1.111915454e-02f, -1.101769948e-02f, -1.091624714e-02f, -1.081479767e-02f, -1.071335127e-02f, -1.061190809e-02f, -1.051046831e-02f, -1.040903211e-02f, -1.030759965e-02f,
+-1.020617110e-02f, -1.010474665e-02f, -1.000332646e-02f, -9.901910704e-03f, -9.800499553e-03f, -9.699093180e-03f, -9.597691756e-03f, -9.496295454e-03f, -9.394904446e-03f, -9.293518904e-03f,
+-9.192138998e-03f, -9.090764901e-03f, -8.989396785e-03f, -8.888034821e-03f, -8.786679180e-03f, -8.685330035e-03f, -8.583987557e-03f, -8.482651916e-03f, -8.381323286e-03f, -8.280001836e-03f,
+-8.178687738e-03f, -8.077381164e-03f, -7.976082284e-03f, -7.874791270e-03f, -7.773508293e-03f, -7.672233524e-03f, -7.570967134e-03f, -7.469709294e-03f, -7.368460174e-03f, -7.267219946e-03f,
+-7.165988780e-03f, -7.064766848e-03f, -6.963554319e-03f, -6.862351365e-03f, -6.761158156e-03f, -6.659974862e-03f, -6.558801654e-03f, -6.457638703e-03f, -6.356486179e-03f, -6.255344252e-03f,
+-6.154213092e-03f, -6.053092871e-03f, -5.951983757e-03f, -5.850885920e-03f, -5.749799532e-03f, -5.648724762e-03f, -5.547661780e-03f, -5.446610756e-03f, -5.345571859e-03f, -5.244545260e-03f,
+-5.143531128e-03f, -5.042529632e-03f, -4.941540944e-03f, -4.840565231e-03f, -4.739602663e-03f, -4.638653410e-03f, -4.537717642e-03f, -4.436795527e-03f, -4.335887235e-03f, -4.234992935e-03f,
+-4.134112796e-03f, -4.033246988e-03f, -3.932395679e-03f, -3.831559037e-03f, -3.730737233e-03f, -3.629930435e-03f, -3.529138812e-03f, -3.428362532e-03f, -3.327601764e-03f, -3.226856677e-03f,
+-3.126127439e-03f, -3.025414219e-03f, -2.924717185e-03f, -2.824036505e-03f, -2.723372349e-03f, -2.622724883e-03f, -2.522094276e-03f, -2.421480696e-03f, -2.320884312e-03f, -2.220305291e-03f,
+-2.119743801e-03f, -2.019200009e-03f, -1.918674085e-03f, -1.818166195e-03f, -1.717676507e-03f, -1.617205189e-03f, -1.516752407e-03f, -1.416318331e-03f, -1.315903126e-03f, -1.215506960e-03f,
+-1.115130001e-03f, -1.014772416e-03f, -9.144343714e-04f, -8.141160346e-04f, -7.138175726e-04f, -6.135391523e-04f, -5.132809405e-04f, -4.130431039e-04f, -3.128258093e-04f, -2.126292233e-04f,
+-1.124535124e-04f, -1.229884321e-05f, 8.783461798e-05f, 1.879467048e-04f, 2.880372509e-04f, 3.881060902e-04f, 4.881530565e-04f, 5.881779837e-04f, 6.881807059e-04f, 7.881610572e-04f,
+8.881188716e-04f, 9.880539835e-04f, 1.087966227e-03f, 1.187855437e-03f, 1.287721447e-03f, 1.387564092e-03f, 1.487383207e-03f, 1.587178627e-03f, 1.686950185e-03f, 1.786697718e-03f,
+1.886421059e-03f, 1.986120044e-03f, 2.085794508e-03f, 2.185444286e-03f, 2.285069213e-03f, 2.384669124e-03f, 2.484243855e-03f, 2.583793241e-03f, 2.683317118e-03f, 2.782815322e-03f,
+2.882287687e-03f, 2.981734050e-03f, 3.081154246e-03f, 3.180548112e-03f, 3.279915483e-03f, 3.379256196e-03f, 3.478570086e-03f, 3.577856990e-03f, 3.677116744e-03f, 3.776349184e-03f,
+3.875554147e-03f, 3.974731470e-03f, 4.073880989e-03f, 4.173002540e-03f, 4.272095961e-03f, 4.371161088e-03f, 4.470197758e-03f, 4.569205808e-03f, 4.668185076e-03f, 4.767135399e-03f,
+4.866056613e-03f, 4.964948557e-03f, 5.063811067e-03f, 5.162643981e-03f, 5.261447136e-03f, 5.360220372e-03f, 5.458963524e-03f, 5.557676431e-03f, 5.656358932e-03f, 5.755010863e-03f,
+5.853632063e-03f, 5.952222371e-03f, 6.050781624e-03f, 6.149309661e-03f, 6.247806320e-03f, 6.346271440e-03f, 6.444704860e-03f, 6.543106417e-03f, 6.641475952e-03f, 6.739813303e-03f,
+6.838118308e-03f, 6.936390808e-03f, 7.034630640e-03f, 7.132837645e-03f, 7.231011661e-03f, 7.329152529e-03f, 7.427260087e-03f, 7.525334175e-03f, 7.623374633e-03f, 7.721381300e-03f,
+7.819354017e-03f, 7.917292623e-03f, 8.015196959e-03f, 8.113066864e-03f, 8.210902179e-03f, 8.308702744e-03f, 8.406468400e-03f, 8.504198986e-03f, 8.601894344e-03f, 8.699554315e-03f,
+8.797178738e-03f, 8.894767456e-03f, 8.992320308e-03f, 9.089837136e-03f, 9.187317782e-03f, 9.284762086e-03f, 9.382169889e-03f, 9.479541034e-03f, 9.576875361e-03f, 9.674172712e-03f,
+9.771432930e-03f, 9.868655855e-03f, 9.965841330e-03f, 1.006298920e-02f, 1.016009930e-02f, 1.025717147e-02f, 1.035420557e-02f, 1.045120142e-02f, 1.054815888e-02f, 1.064507779e-02f,
+1.074195798e-02f, 1.083879930e-02f, 1.093560160e-02f, 1.103236472e-02f, 1.112908849e-02f, 1.122577277e-02f, 1.132241740e-02f, 1.141902221e-02f, 1.151558706e-02f, 1.161211179e-02f,
+1.170859623e-02f, 1.180504024e-02f, 1.190144366e-02f, 1.199780634e-02f, 1.209412810e-02f, 1.219040881e-02f, 1.228664830e-02f, 1.238284643e-02f, 1.247900302e-02f, 1.257511794e-02f,
+1.267119102e-02f, 1.276722210e-02f, 1.286321104e-02f, 1.295915767e-02f, 1.305506185e-02f, 1.315092342e-02f, 1.324674222e-02f, 1.334251810e-02f, 1.343825090e-02f, 1.353394047e-02f,
+1.362958666e-02f, 1.372518930e-02f, 1.382074826e-02f, 1.391626337e-02f, 1.401173448e-02f, 1.410716143e-02f, 1.420254408e-02f, 1.429788226e-02f, 1.439317583e-02f, 1.448842463e-02f,
+1.458362851e-02f, 1.467878732e-02f, 1.477390090e-02f, 1.486896909e-02f, 1.496399176e-02f, 1.505896873e-02f, 1.515389987e-02f, 1.524878502e-02f, 1.534362403e-02f, 1.543841673e-02f,
+1.553316300e-02f, 1.562786266e-02f, 1.572251557e-02f, 1.581712157e-02f, 1.591168052e-02f, 1.600619227e-02f, 1.610065665e-02f, 1.619507353e-02f, 1.628944275e-02f, 1.638376415e-02f,
+1.647803759e-02f, 1.657226292e-02f, 1.666643998e-02f, 1.676056862e-02f, 1.685464870e-02f, 1.694868007e-02f, 1.704266256e-02f, 1.713659604e-02f, 1.723048036e-02f, 1.732431535e-02f,
+1.741810088e-02f, 1.751183679e-02f, 1.760552294e-02f, 1.769915916e-02f, 1.779274533e-02f, 1.788628127e-02f, 1.797976686e-02f, 1.807320193e-02f, 1.816658634e-02f, 1.825991993e-02f,
+1.835320257e-02f, 1.844643410e-02f, 1.853961437e-02f, 1.863274324e-02f, 1.872582055e-02f, 1.881884616e-02f, 1.891181992e-02f, 1.900474169e-02f, 1.909761130e-02f, 1.919042863e-02f,
+1.928319351e-02f, 1.937590581e-02f, 1.946856537e-02f, 1.956117204e-02f, 1.965372569e-02f, 1.974622616e-02f, 1.983867331e-02f, 1.993106698e-02f, 2.002340704e-02f, 2.011569334e-02f,
+2.020792572e-02f, 2.030010405e-02f, 2.039222818e-02f, 2.048429795e-02f, 2.057631324e-02f, 2.066827388e-02f, 2.076017974e-02f, 2.085203067e-02f, 2.094382652e-02f, 2.103556714e-02f,
+2.112725240e-02f, 2.121888215e-02f, 2.131045625e-02f, 2.140197454e-02f, 2.149343688e-02f, 2.158484313e-02f, 2.167619315e-02f, 2.176748679e-02f, 2.185872390e-02f, 2.194990434e-02f,
+2.204102798e-02f, 2.213209466e-02f, 2.222310423e-02f, 2.231405657e-02f, 2.240495152e-02f, 2.249578894e-02f, 2.258656869e-02f, 2.267729062e-02f, 2.276795459e-02f, 2.285856046e-02f,
+2.294910809e-02f, 2.303959733e-02f, 2.313002804e-02f, 2.322040009e-02f, 2.331071331e-02f, 2.340096758e-02f, 2.349116276e-02f, 2.358129869e-02f, 2.367137525e-02f, 2.376139228e-02f,
+2.385134965e-02f, 2.394124721e-02f, 2.403108483e-02f, 2.412086236e-02f, 2.421057967e-02f, 2.430023660e-02f, 2.438983303e-02f, 2.447936880e-02f, 2.456884379e-02f, 2.465825785e-02f,
+2.474761083e-02f, 2.483690261e-02f, 2.492613304e-02f, 2.501530197e-02f, 2.510440928e-02f, 2.519345482e-02f, 2.528243845e-02f, 2.537136004e-02f, 2.546021943e-02f, 2.554901651e-02f,
+2.563775112e-02f, 2.572642313e-02f, 2.581503239e-02f, 2.590357878e-02f, 2.599206215e-02f, 2.608048237e-02f, 2.616883929e-02f, 2.625713279e-02f, 2.634536271e-02f, 2.643352893e-02f,
+2.652163130e-02f, 2.660966969e-02f, 2.669764397e-02f, 2.678555399e-02f, 2.687339962e-02f, 2.696118072e-02f, 2.704889715e-02f, 2.713654878e-02f, 2.722413548e-02f, 2.731165710e-02f,
+2.739911351e-02f, 2.748650458e-02f, 2.757383016e-02f, 2.766109013e-02f, 2.774828434e-02f, 2.783541267e-02f, 2.792247497e-02f, 2.800947111e-02f, 2.809640096e-02f, 2.818326439e-02f,
+2.827006125e-02f, 2.835679141e-02f, 2.844345474e-02f, 2.853005111e-02f, 2.861658037e-02f, 2.870304240e-02f, 2.878943707e-02f, 2.887576423e-02f, 2.896202376e-02f, 2.904821551e-02f,
+2.913433937e-02f, 2.922039520e-02f, 2.930638285e-02f, 2.939230221e-02f, 2.947815313e-02f, 2.956393549e-02f, 2.964964914e-02f, 2.973529397e-02f, 2.982086984e-02f, 2.990637661e-02f,
+2.999181416e-02f, 3.007718235e-02f, 3.016248105e-02f, 3.024771012e-02f, 3.033286945e-02f, 3.041795889e-02f, 3.050297832e-02f, 3.058792761e-02f, 3.067280662e-02f, 3.075761522e-02f,
+3.084235329e-02f, 3.092702069e-02f, 3.101161729e-02f, 3.109614297e-02f, 3.118059759e-02f, 3.126498103e-02f, 3.134929315e-02f, 3.143353382e-02f, 3.151770293e-02f, 3.160180032e-02f,
+3.168582589e-02f, 3.176977950e-02f, 3.185366101e-02f, 3.193747031e-02f, 3.202120726e-02f, 3.210487174e-02f, 3.218846362e-02f, 3.227198276e-02f, 3.235542905e-02f, 3.243880235e-02f,
+3.252210254e-02f, 3.260532949e-02f, 3.268848307e-02f, 3.277156316e-02f, 3.285456962e-02f, 3.293750234e-02f, 3.302036119e-02f, 3.310314603e-02f, 3.318585675e-02f, 3.326849321e-02f,
+3.335105529e-02f, 3.343354287e-02f, 3.351595582e-02f, 3.359829402e-02f, 3.368055733e-02f, 3.376274563e-02f, 3.384485881e-02f, 3.392689673e-02f, 3.400885926e-02f, 3.409074629e-02f,
+3.417255770e-02f, 3.425429334e-02f, 3.433595311e-02f, 3.441753688e-02f, 3.449904452e-02f, 3.458047591e-02f, 3.466183093e-02f, 3.474310945e-02f, 3.482431135e-02f, 3.490543651e-02f,
+3.498648481e-02f, 3.506745611e-02f, 3.514835030e-02f, 3.522916727e-02f, 3.530990687e-02f, 3.539056900e-02f, 3.547115353e-02f, 3.555166033e-02f, 3.563208930e-02f, 3.571244030e-02f,
+3.579271321e-02f, 3.587290792e-02f, 3.595302429e-02f, 3.603306222e-02f, 3.611302158e-02f, 3.619290225e-02f, 3.627270411e-02f, 3.635242704e-02f, 3.643207092e-02f, 3.651163563e-02f,
+3.659112104e-02f, 3.667052705e-02f, 3.674985353e-02f, 3.682910035e-02f, 3.690826742e-02f, 3.698735459e-02f, 3.706636176e-02f, 3.714528880e-02f, 3.722413560e-02f, 3.730290204e-02f,
+3.738158800e-02f, 3.746019336e-02f, 3.753871801e-02f, 3.761716183e-02f, 3.769552469e-02f, 3.777380649e-02f, 3.785200710e-02f, 3.793012641e-02f, 3.800816430e-02f, 3.808612066e-02f,
+3.816399536e-02f, 3.824178830e-02f, 3.831949935e-02f, 3.839712840e-02f, 3.847467533e-02f, 3.855214003e-02f, 3.862952238e-02f, 3.870682227e-02f, 3.878403958e-02f, 3.886117420e-02f,
+3.893822601e-02f, 3.901519489e-02f, 3.909208073e-02f, 3.916888343e-02f, 3.924560285e-02f, 3.932223890e-02f, 3.939879145e-02f, 3.947526039e-02f, 3.955164560e-02f, 3.962794699e-02f,
+3.970416442e-02f, 3.978029779e-02f, 3.985634698e-02f, 3.993231189e-02f, 4.000819239e-02f, 4.008398838e-02f, 4.015969975e-02f, 4.023532638e-02f, 4.031086816e-02f, 4.038632497e-02f,
+4.046169672e-02f, 4.053698328e-02f, 4.061218454e-02f, 4.068730039e-02f, 4.076233073e-02f, 4.083727544e-02f, 4.091213441e-02f, 4.098690752e-02f, 4.106159468e-02f, 4.113619577e-02f,
+4.121071067e-02f, 4.128513929e-02f, 4.135948150e-02f, 4.143373720e-02f, 4.150790629e-02f, 4.158198865e-02f, 4.165598417e-02f, 4.172989274e-02f, 4.180371426e-02f, 4.187744862e-02f,
+4.195109570e-02f, 4.202465541e-02f, 4.209812763e-02f, 4.217151225e-02f, 4.224480917e-02f, 4.231801828e-02f, 4.239113947e-02f, 4.246417264e-02f, 4.253711767e-02f, 4.260997447e-02f,
+4.268274292e-02f, 4.275542292e-02f, 4.282801436e-02f, 4.290051714e-02f, 4.297293115e-02f, 4.304525628e-02f, 4.311749243e-02f, 4.318963949e-02f, 4.326169737e-02f, 4.333366594e-02f,
+4.340554511e-02f, 4.347733478e-02f, 4.354903483e-02f, 4.362064517e-02f, 4.369216569e-02f, 4.376359629e-02f, 4.383493686e-02f, 4.390618729e-02f, 4.397734750e-02f, 4.404841736e-02f,
+4.411939678e-02f, 4.419028566e-02f, 4.426108389e-02f, 4.433179137e-02f, 4.440240800e-02f, 4.447293367e-02f, 4.454336829e-02f, 4.461371175e-02f, 4.468396394e-02f, 4.475412478e-02f,
+4.482419415e-02f, 4.489417195e-02f, 4.496405809e-02f, 4.503385247e-02f, 4.510355497e-02f, 4.517316551e-02f, 4.524268398e-02f, 4.531211028e-02f, 4.538144431e-02f, 4.545068597e-02f,
+4.551983516e-02f, 4.558889179e-02f, 4.565785575e-02f, 4.572672694e-02f, 4.579550527e-02f, 4.586419063e-02f, 4.593278293e-02f, 4.600128207e-02f, 4.606968794e-02f, 4.613800047e-02f,
+4.620621953e-02f, 4.627434504e-02f, 4.634237690e-02f, 4.641031502e-02f, 4.647815928e-02f, 4.654590961e-02f, 4.661356589e-02f, 4.668112804e-02f, 4.674859596e-02f, 4.681596955e-02f,
+4.688324871e-02f, 4.695043335e-02f, 4.701752338e-02f, 4.708451869e-02f, 4.715141920e-02f, 4.721822480e-02f, 4.728493540e-02f, 4.735155092e-02f, 4.741807124e-02f, 4.748449628e-02f,
+4.755082594e-02f, 4.761706014e-02f, 4.768319877e-02f, 4.774924174e-02f, 4.781518896e-02f, 4.788104033e-02f, 4.794679576e-02f, 4.801245517e-02f, 4.807801844e-02f, 4.814348550e-02f,
+4.820885625e-02f, 4.827413060e-02f, 4.833930845e-02f, 4.840438972e-02f, 4.846937430e-02f, 4.853426212e-02f, 4.859905307e-02f, 4.866374708e-02f, 4.872834403e-02f, 4.879284386e-02f,
+4.885724646e-02f, 4.892155174e-02f, 4.898575961e-02f, 4.904986999e-02f, 4.911388278e-02f, 4.917779790e-02f, 4.924161524e-02f, 4.930533474e-02f, 4.936895629e-02f, 4.943247980e-02f,
+4.949590519e-02f, 4.955923237e-02f, 4.962246125e-02f, 4.968559174e-02f, 4.974862375e-02f, 4.981155720e-02f, 4.987439200e-02f, 4.993712806e-02f, 4.999976528e-02f, 5.006230360e-02f,
+5.012474291e-02f, 5.018708314e-02f, 5.024932418e-02f, 5.031146597e-02f, 5.037350841e-02f, 5.043545141e-02f, 5.049729489e-02f, 5.055903877e-02f, 5.062068296e-02f, 5.068222736e-02f,
+5.074367191e-02f, 5.080501651e-02f, 5.086626108e-02f, 5.092740552e-02f, 5.098844977e-02f, 5.104939373e-02f, 5.111023733e-02f, 5.117098047e-02f, 5.123162307e-02f, 5.129216505e-02f,
+5.135260632e-02f, 5.141294681e-02f, 5.147318643e-02f, 5.153332510e-02f, 5.159336272e-02f, 5.165329924e-02f, 5.171313455e-02f, 5.177286857e-02f, 5.183250124e-02f, 5.189203245e-02f,
+5.195146214e-02f, 5.201079022e-02f, 5.207001661e-02f, 5.212914123e-02f, 5.218816400e-02f, 5.224708484e-02f, 5.230590366e-02f, 5.236462039e-02f, 5.242323495e-02f, 5.248174726e-02f,
+5.254015723e-02f, 5.259846479e-02f, 5.265666986e-02f, 5.271477236e-02f, 5.277277221e-02f, 5.283066934e-02f, 5.288846366e-02f, 5.294615509e-02f, 5.300374357e-02f, 5.306122900e-02f,
+5.311861132e-02f, 5.317589043e-02f, 5.323306628e-02f, 5.329013878e-02f, 5.334710785e-02f, 5.340397342e-02f, 5.346073540e-02f, 5.351739373e-02f, 5.357394833e-02f, 5.363039912e-02f,
+5.368674602e-02f, 5.374298897e-02f, 5.379912788e-02f, 5.385516268e-02f, 5.391109329e-02f, 5.396691964e-02f, 5.402264165e-02f, 5.407825926e-02f, 5.413377238e-02f, 5.418918094e-02f,
+5.424448488e-02f, 5.429968410e-02f, 5.435477855e-02f, 5.440976814e-02f, 5.446465281e-02f, 5.451943247e-02f, 5.457410707e-02f, 5.462867652e-02f, 5.468314076e-02f, 5.473749971e-02f,
+5.479175329e-02f, 5.484590145e-02f, 5.489994409e-02f, 5.495388117e-02f, 5.500771259e-02f, 5.506143830e-02f, 5.511505822e-02f, 5.516857229e-02f, 5.522198042e-02f, 5.527528255e-02f,
+5.532847861e-02f, 5.538156853e-02f, 5.543455224e-02f, 5.548742967e-02f, 5.554020076e-02f, 5.559286542e-02f, 5.564542360e-02f, 5.569787523e-02f, 5.575022023e-02f, 5.580245854e-02f,
+5.585459009e-02f, 5.590661481e-02f, 5.595853263e-02f, 5.601034350e-02f, 5.606204733e-02f, 5.611364406e-02f, 5.616513363e-02f, 5.621651596e-02f, 5.626779100e-02f, 5.631895867e-02f,
+5.637001892e-02f, 5.642097166e-02f, 5.647181685e-02f, 5.652255440e-02f, 5.657318426e-02f, 5.662370637e-02f, 5.667412064e-02f, 5.672442703e-02f, 5.677462547e-02f, 5.682471589e-02f,
+5.687469823e-02f, 5.692457242e-02f, 5.697433840e-02f, 5.702399611e-02f, 5.707354548e-02f, 5.712298645e-02f, 5.717231895e-02f, 5.722154293e-02f, 5.727065832e-02f, 5.731966506e-02f,
+5.736856309e-02f, 5.741735234e-02f, 5.746603275e-02f, 5.751460426e-02f, 5.756306682e-02f, 5.761142035e-02f, 5.765966479e-02f, 5.770780009e-02f, 5.775582619e-02f, 5.780374302e-02f,
+5.785155053e-02f, 5.789924865e-02f, 5.794683732e-02f, 5.799431649e-02f, 5.804168610e-02f, 5.808894607e-02f, 5.813609637e-02f, 5.818313692e-02f, 5.823006767e-02f, 5.827688856e-02f,
+5.832359954e-02f, 5.837020053e-02f, 5.841669150e-02f, 5.846307237e-02f, 5.850934309e-02f, 5.855550360e-02f, 5.860155385e-02f, 5.864749377e-02f, 5.869332332e-02f, 5.873904244e-02f,
+5.878465106e-02f, 5.883014914e-02f, 5.887553661e-02f, 5.892081343e-02f, 5.896597953e-02f, 5.901103486e-02f, 5.905597936e-02f, 5.910081298e-02f, 5.914553567e-02f, 5.919014737e-02f,
+5.923464803e-02f, 5.927903759e-02f, 5.932331599e-02f, 5.936748319e-02f, 5.941153913e-02f, 5.945548376e-02f, 5.949931702e-02f, 5.954303886e-02f, 5.958664923e-02f, 5.963014807e-02f,
+5.967353534e-02f, 5.971681098e-02f, 5.975997494e-02f, 5.980302716e-02f, 5.984596760e-02f, 5.988879620e-02f, 5.993151292e-02f, 5.997411769e-02f, 6.001661048e-02f, 6.005899123e-02f,
+6.010125989e-02f, 6.014341640e-02f, 6.018546073e-02f, 6.022739281e-02f, 6.026921261e-02f, 6.031092006e-02f, 6.035251513e-02f, 6.039399776e-02f, 6.043536790e-02f, 6.047662551e-02f,
+6.051777053e-02f, 6.055880292e-02f, 6.059972264e-02f, 6.064052962e-02f, 6.068122383e-02f, 6.072180521e-02f, 6.076227373e-02f, 6.080262933e-02f, 6.084287196e-02f, 6.088300159e-02f,
+6.092301815e-02f, 6.096292162e-02f, 6.100271193e-02f, 6.104238905e-02f, 6.108195293e-02f, 6.112140352e-02f, 6.116074078e-02f, 6.119996467e-02f, 6.123907513e-02f, 6.127807213e-02f,
+6.131695561e-02f, 6.135572554e-02f, 6.139438188e-02f, 6.143292457e-02f, 6.147135357e-02f, 6.150966885e-02f, 6.154787035e-02f, 6.158595804e-02f, 6.162393186e-02f, 6.166179179e-02f,
+6.169953777e-02f, 6.173716977e-02f, 6.177468774e-02f, 6.181209164e-02f, 6.184938143e-02f, 6.188655706e-02f, 6.192361851e-02f, 6.196056571e-02f, 6.199739864e-02f, 6.203411726e-02f,
+6.207072152e-02f, 6.210721138e-02f, 6.214358680e-02f, 6.217984774e-02f, 6.221599417e-02f, 6.225202605e-02f, 6.228794333e-02f, 6.232374597e-02f, 6.235943394e-02f, 6.239500720e-02f,
+6.243046571e-02f, 6.246580944e-02f, 6.250103833e-02f, 6.253615236e-02f, 6.257115149e-02f, 6.260603569e-02f, 6.264080490e-02f, 6.267545910e-02f, 6.270999826e-02f, 6.274442232e-02f,
+6.277873126e-02f, 6.281292505e-02f, 6.284700364e-02f, 6.288096700e-02f, 6.291481509e-02f, 6.294854788e-02f, 6.298216533e-02f, 6.301566741e-02f, 6.304905409e-02f, 6.308232532e-02f,
+6.311548108e-02f, 6.314852132e-02f, 6.318144603e-02f, 6.321425515e-02f, 6.324694867e-02f, 6.327952654e-02f, 6.331198873e-02f, 6.334433522e-02f, 6.337656595e-02f, 6.340868092e-02f,
+6.344068007e-02f, 6.347256339e-02f, 6.350433083e-02f, 6.353598237e-02f, 6.356751797e-02f, 6.359893761e-02f, 6.363024125e-02f, 6.366142885e-02f, 6.369250040e-02f, 6.372345586e-02f,
+6.375429520e-02f, 6.378501839e-02f, 6.381562539e-02f, 6.384611619e-02f, 6.387649075e-02f, 6.390674904e-02f, 6.393689102e-02f, 6.396691669e-02f, 6.399682599e-02f, 6.402661891e-02f,
+6.405629542e-02f, 6.408585549e-02f, 6.411529909e-02f, 6.414462619e-02f, 6.417383677e-02f, 6.420293080e-02f, 6.423190825e-02f, 6.426076909e-02f, 6.428951331e-02f, 6.431814086e-02f,
+6.434665173e-02f, 6.437504589e-02f, 6.440332331e-02f, 6.443148397e-02f, 6.445952784e-02f, 6.448745490e-02f, 6.451526512e-02f, 6.454295848e-02f, 6.457053495e-02f, 6.459799451e-02f,
+6.462533713e-02f, 6.465256279e-02f, 6.467967147e-02f, 6.470666314e-02f, 6.473353778e-02f, 6.476029536e-02f, 6.478693587e-02f, 6.481345927e-02f, 6.483986555e-02f, 6.486615469e-02f,
+6.489232666e-02f, 6.491838144e-02f, 6.494431901e-02f, 6.497013934e-02f, 6.499584242e-02f, 6.502142822e-02f, 6.504689673e-02f, 6.507224792e-02f, 6.509748177e-02f, 6.512259826e-02f,
+6.514759738e-02f, 6.517247909e-02f, 6.519724339e-02f, 6.522189025e-02f, 6.524641965e-02f, 6.527083157e-02f, 6.529512600e-02f, 6.531930291e-02f, 6.534336229e-02f, 6.536730411e-02f,
+6.539112837e-02f, 6.541483504e-02f, 6.543842410e-02f, 6.546189554e-02f, 6.548524934e-02f, 6.550848549e-02f, 6.553160395e-02f, 6.555460473e-02f, 6.557748780e-02f, 6.560025314e-02f,
+6.562290074e-02f, 6.564543059e-02f, 6.566784266e-02f, 6.569013695e-02f, 6.571231343e-02f, 6.573437210e-02f, 6.575631293e-02f, 6.577813591e-02f, 6.579984103e-02f, 6.582142828e-02f,
+6.584289763e-02f, 6.586424908e-02f, 6.588548261e-02f, 6.590659820e-02f, 6.592759585e-02f, 6.594847555e-02f, 6.596923727e-02f, 6.598988100e-02f, 6.601040674e-02f, 6.603081447e-02f,
+6.605110418e-02f, 6.607127586e-02f, 6.609132949e-02f, 6.611126506e-02f, 6.613108257e-02f, 6.615078200e-02f, 6.617036334e-02f, 6.618982657e-02f, 6.620917170e-02f, 6.622839871e-02f,
+6.624750758e-02f, 6.626649831e-02f, 6.628537089e-02f, 6.630412531e-02f, 6.632276157e-02f, 6.634127964e-02f, 6.635967952e-02f, 6.637796121e-02f, 6.639612469e-02f, 6.641416996e-02f,
+6.643209701e-02f, 6.644990583e-02f, 6.646759642e-02f, 6.648516875e-02f, 6.650262284e-02f, 6.651995867e-02f, 6.653717623e-02f, 6.655427552e-02f, 6.657125654e-02f, 6.658811926e-02f,
+6.660486370e-02f, 6.662148984e-02f, 6.663799767e-02f, 6.665438720e-02f, 6.667065842e-02f, 6.668681132e-02f, 6.670284589e-02f, 6.671876214e-02f, 6.673456005e-02f, 6.675023963e-02f,
+6.676580086e-02f, 6.678124375e-02f, 6.679656830e-02f, 6.681177449e-02f, 6.682686233e-02f, 6.684183181e-02f, 6.685668293e-02f, 6.687141568e-02f, 6.688603007e-02f, 6.690052609e-02f,
+6.691490375e-02f, 6.692916303e-02f, 6.694330393e-02f, 6.695732646e-02f, 6.697123062e-02f, 6.698501640e-02f, 6.699868380e-02f, 6.701223282e-02f, 6.702566346e-02f, 6.703897572e-02f,
+6.705216960e-02f, 6.706524510e-02f, 6.707820223e-02f, 6.709104097e-02f, 6.710376134e-02f, 6.711636333e-02f, 6.712884695e-02f, 6.714121219e-02f, 6.715345906e-02f, 6.716558756e-02f,
+6.717759769e-02f, 6.718948945e-02f, 6.720126284e-02f, 6.721291788e-02f, 6.722445456e-02f, 6.723587288e-02f, 6.724717285e-02f, 6.725835446e-02f, 6.726941774e-02f, 6.728036267e-02f,
+6.729118926e-02f, 6.730189751e-02f, 6.731248744e-02f, 6.732295904e-02f, 6.733331233e-02f, 6.734354729e-02f, 6.735366395e-02f, 6.736366230e-02f, 6.737354235e-02f, 6.738330411e-02f,
+6.739294758e-02f, 6.740247276e-02f, 6.741187968e-02f, 6.742116832e-02f, 6.743033870e-02f, 6.743939083e-02f, 6.744832471e-02f, 6.745714035e-02f, 6.746583775e-02f, 6.747441694e-02f,
+6.748287790e-02f, 6.749122065e-02f, 6.749944521e-02f, 6.750755157e-02f, 6.751553974e-02f, 6.752340975e-02f, 6.753116158e-02f, 6.753879526e-02f, 6.754631080e-02f, 6.755370820e-02f,
+6.756098747e-02f, 6.756814862e-02f, 6.757519167e-02f, 6.758211662e-02f, 6.758892348e-02f, 6.759561227e-02f, 6.760218300e-02f, 6.760863568e-02f, 6.761497031e-02f, 6.762118692e-02f,
+6.762728551e-02f, 6.763326609e-02f, 6.763912869e-02f, 6.764487330e-02f, 6.765049994e-02f, 6.765600864e-02f, 6.766139938e-02f, 6.766667221e-02f, 6.767182711e-02f, 6.767686412e-02f,
+6.768178324e-02f, 6.768658448e-02f, 6.769126787e-02f, 6.769583341e-02f, 6.770028113e-02f, 6.770461103e-02f, 6.770882313e-02f, 6.771291744e-02f, 6.771689399e-02f, 6.772075278e-02f,
+6.772449384e-02f, 6.772811717e-02f, 6.773162280e-02f, 6.773501074e-02f, 6.773828101e-02f, 6.774143362e-02f, 6.774446859e-02f, 6.774738595e-02f, 6.775018570e-02f, 6.775286786e-02f,
+6.775543245e-02f, 6.775787950e-02f, 6.776020901e-02f, 6.776242101e-02f, 6.776451552e-02f, 6.776649254e-02f, 6.776835211e-02f, 6.777009425e-02f, 6.777171896e-02f, 6.777322628e-02f,
+6.777461621e-02f, 6.777588879e-02f, 6.777704402e-02f, 6.777808194e-02f, 6.777900256e-02f, 6.777980590e-02f, 6.778049198e-02f, 6.778106083e-02f, 6.778151246e-02f, 6.778184691e-02f,
+6.778206418e-02f, 6.778216430e-02f, 6.778214729e-02f, 6.778201318e-02f, 6.778176198e-02f, 6.778139373e-02f, 6.778090844e-02f, 6.778030613e-02f, 6.777958684e-02f, 6.777875057e-02f,
+6.777779737e-02f, 6.777672724e-02f, 6.777554022e-02f, 6.777423633e-02f, 6.777281559e-02f, 6.777127803e-02f, 6.776962367e-02f, 6.776785253e-02f, 6.776596465e-02f, 6.776396005e-02f,
+6.776183875e-02f, 6.775960078e-02f, 6.775724617e-02f, 6.775477494e-02f, 6.775218711e-02f, 6.774948272e-02f, 6.774666179e-02f, 6.774372435e-02f, 6.774067042e-02f, 6.773750004e-02f,
+6.773421323e-02f, 6.773081001e-02f, 6.772729042e-02f, 6.772365448e-02f, 6.771990222e-02f, 6.771603368e-02f, 6.771204887e-02f, 6.770794783e-02f, 6.770373059e-02f, 6.769939717e-02f,
+6.769494761e-02f, 6.769038193e-02f, 6.768570017e-02f, 6.768090236e-02f, 6.767598851e-02f, 6.767095868e-02f, 6.766581288e-02f, 6.766055114e-02f, 6.765517351e-02f, 6.764968000e-02f,
+6.764407065e-02f, 6.763834549e-02f, 6.763250456e-02f, 6.762654788e-02f, 6.762047549e-02f, 6.761428742e-02f, 6.760798370e-02f, 6.760156437e-02f, 6.759502945e-02f, 6.758837898e-02f,
+6.758161300e-02f, 6.757473153e-02f, 6.756773462e-02f, 6.756062229e-02f, 6.755339458e-02f, 6.754605152e-02f, 6.753859314e-02f, 6.753101949e-02f, 6.752333060e-02f, 6.751552649e-02f,
+6.750760722e-02f, 6.749957280e-02f, 6.749142328e-02f, 6.748315869e-02f, 6.747477908e-02f, 6.746628446e-02f, 6.745767489e-02f, 6.744895040e-02f, 6.744011102e-02f, 6.743115679e-02f,
+6.742208774e-02f, 6.741290393e-02f, 6.740360537e-02f, 6.739419212e-02f, 6.738466420e-02f, 6.737502166e-02f, 6.736526453e-02f, 6.735539285e-02f, 6.734540666e-02f, 6.733530601e-02f,
+6.732509092e-02f, 6.731476144e-02f, 6.730431760e-02f, 6.729375945e-02f, 6.728308702e-02f, 6.727230036e-02f, 6.726139951e-02f, 6.725038450e-02f, 6.723925537e-02f, 6.722801218e-02f,
+6.721665494e-02f, 6.720518372e-02f, 6.719359855e-02f, 6.718189946e-02f, 6.717008651e-02f, 6.715815973e-02f, 6.714611916e-02f, 6.713396485e-02f, 6.712169685e-02f, 6.710931518e-02f,
+6.709681990e-02f, 6.708421104e-02f, 6.707148865e-02f, 6.705865278e-02f, 6.704570346e-02f, 6.703264075e-02f, 6.701946467e-02f, 6.700617529e-02f, 6.699277263e-02f, 6.697925675e-02f,
+6.696562769e-02f, 6.695188550e-02f, 6.693803022e-02f, 6.692406189e-02f, 6.690998056e-02f, 6.689578627e-02f, 6.688147907e-02f, 6.686705901e-02f, 6.685252614e-02f, 6.683788049e-02f,
+6.682312211e-02f, 6.680825106e-02f, 6.679326737e-02f, 6.677817110e-02f, 6.676296229e-02f, 6.674764098e-02f, 6.673220724e-02f, 6.671666109e-02f, 6.670100260e-02f, 6.668523180e-02f,
+6.666934875e-02f, 6.665335350e-02f, 6.663724609e-02f, 6.662102657e-02f, 6.660469499e-02f, 6.658825140e-02f, 6.657169586e-02f, 6.655502839e-02f, 6.653824907e-02f, 6.652135794e-02f,
+6.650435504e-02f, 6.648724043e-02f, 6.647001415e-02f, 6.645267627e-02f, 6.643522682e-02f, 6.641766586e-02f, 6.639999345e-02f, 6.638220962e-02f, 6.636431444e-02f, 6.634630795e-02f,
+6.632819020e-02f, 6.630996126e-02f, 6.629162116e-02f, 6.627316997e-02f, 6.625460773e-02f, 6.623593450e-02f, 6.621715032e-02f, 6.619825526e-02f, 6.617924937e-02f, 6.616013269e-02f,
+6.614090529e-02f, 6.612156721e-02f, 6.610211851e-02f, 6.608255925e-02f, 6.606288947e-02f, 6.604310924e-02f, 6.602321860e-02f, 6.600321761e-02f, 6.598310633e-02f, 6.596288481e-02f,
+6.594255311e-02f, 6.592211128e-02f, 6.590155938e-02f, 6.588089746e-02f, 6.586012558e-02f, 6.583924379e-02f, 6.581825216e-02f, 6.579715073e-02f, 6.577593957e-02f, 6.575461873e-02f,
+6.573318827e-02f, 6.571164825e-02f, 6.568999871e-02f, 6.566823973e-02f, 6.564637136e-02f, 6.562439365e-02f, 6.560230666e-02f, 6.558011046e-02f, 6.555780510e-02f, 6.553539064e-02f,
+6.551286713e-02f, 6.549023464e-02f, 6.546749323e-02f, 6.544464295e-02f, 6.542168387e-02f, 6.539861604e-02f, 6.537543953e-02f, 6.535215439e-02f, 6.532876068e-02f, 6.530525846e-02f,
+6.528164780e-02f, 6.525792876e-02f, 6.523410139e-02f, 6.521016576e-02f, 6.518612193e-02f, 6.516196996e-02f, 6.513770990e-02f, 6.511334183e-02f, 6.508886581e-02f, 6.506428189e-02f,
+6.503959014e-02f, 6.501479062e-02f, 6.498988339e-02f, 6.496486852e-02f, 6.493974607e-02f, 6.491451610e-02f, 6.488917868e-02f, 6.486373386e-02f, 6.483818172e-02f, 6.481252231e-02f,
+6.478675571e-02f, 6.476088196e-02f, 6.473490115e-02f, 6.470881332e-02f, 6.468261856e-02f, 6.465631691e-02f, 6.462990845e-02f, 6.460339325e-02f, 6.457677136e-02f, 6.455004285e-02f,
+6.452320779e-02f, 6.449626625e-02f, 6.446921828e-02f, 6.444206396e-02f, 6.441480335e-02f, 6.438743652e-02f, 6.435996354e-02f, 6.433238446e-02f, 6.430469937e-02f, 6.427690832e-02f,
+6.424901138e-02f, 6.422100863e-02f, 6.419290012e-02f, 6.416468592e-02f, 6.413636611e-02f, 6.410794076e-02f, 6.407940992e-02f, 6.405077367e-02f, 6.402203208e-02f, 6.399318521e-02f,
+6.396423314e-02f, 6.393517593e-02f, 6.390601365e-02f, 6.387674638e-02f, 6.384737418e-02f, 6.381789712e-02f, 6.378831527e-02f, 6.375862870e-02f, 6.372883749e-02f, 6.369894170e-02f,
+6.366894140e-02f, 6.363883666e-02f, 6.360862756e-02f, 6.357831416e-02f, 6.354789654e-02f, 6.351737477e-02f, 6.348674892e-02f, 6.345601906e-02f, 6.342518526e-02f, 6.339424760e-02f,
+6.336320615e-02f, 6.333206097e-02f, 6.330081215e-02f, 6.326945975e-02f, 6.323800386e-02f, 6.320644453e-02f, 6.317478184e-02f, 6.314301588e-02f, 6.311114670e-02f, 6.307917439e-02f,
+6.304709902e-02f, 6.301492066e-02f, 6.298263938e-02f, 6.295025527e-02f, 6.291776839e-02f, 6.288517883e-02f, 6.285248664e-02f, 6.281969192e-02f, 6.278679473e-02f, 6.275379516e-02f,
+6.272069326e-02f, 6.268748913e-02f, 6.265418284e-02f, 6.262077446e-02f, 6.258726406e-02f, 6.255365173e-02f, 6.251993755e-02f, 6.248612158e-02f, 6.245220390e-02f, 6.241818460e-02f,
+6.238406375e-02f, 6.234984142e-02f, 6.231551769e-02f, 6.228109265e-02f, 6.224656636e-02f, 6.221193891e-02f, 6.217721037e-02f, 6.214238083e-02f, 6.210745035e-02f, 6.207241903e-02f,
+6.203728693e-02f, 6.200205413e-02f, 6.196672073e-02f, 6.193128678e-02f, 6.189575238e-02f, 6.186011760e-02f, 6.182438253e-02f, 6.178854723e-02f, 6.175261180e-02f, 6.171657631e-02f,
+6.168044084e-02f, 6.164420547e-02f, 6.160787029e-02f, 6.157143537e-02f, 6.153490079e-02f, 6.149826664e-02f, 6.146153299e-02f, 6.142469993e-02f, 6.138776754e-02f, 6.135073590e-02f,
+6.131360509e-02f, 6.127637519e-02f, 6.123904629e-02f, 6.120161847e-02f, 6.116409181e-02f, 6.112646638e-02f, 6.108874229e-02f, 6.105091960e-02f, 6.101299840e-02f, 6.097497878e-02f,
+6.093686081e-02f, 6.089864459e-02f, 6.086033019e-02f, 6.082191769e-02f, 6.078340719e-02f, 6.074479876e-02f, 6.070609249e-02f, 6.066728847e-02f, 6.062838677e-02f, 6.058938748e-02f,
+6.055029070e-02f, 6.051109649e-02f, 6.047180495e-02f, 6.043241617e-02f, 6.039293022e-02f, 6.035334720e-02f, 6.031366718e-02f, 6.027389026e-02f, 6.023401652e-02f, 6.019404604e-02f,
+6.015397892e-02f, 6.011381524e-02f, 6.007355508e-02f, 6.003319854e-02f, 5.999274569e-02f, 5.995219664e-02f, 5.991155145e-02f, 5.987081022e-02f, 5.982997304e-02f, 5.978904000e-02f,
+5.974801118e-02f, 5.970688667e-02f, 5.966566656e-02f, 5.962435094e-02f, 5.958293989e-02f, 5.954143351e-02f, 5.949983187e-02f, 5.945813508e-02f, 5.941634322e-02f, 5.937445637e-02f,
+5.933247464e-02f, 5.929039810e-02f, 5.924822685e-02f, 5.920596097e-02f, 5.916360056e-02f, 5.912114571e-02f, 5.907859650e-02f, 5.903595302e-02f, 5.899321538e-02f, 5.895038365e-02f,
+5.890745792e-02f, 5.886443830e-02f, 5.882132486e-02f, 5.877811770e-02f, 5.873481692e-02f, 5.869142259e-02f, 5.864793482e-02f, 5.860435369e-02f, 5.856067931e-02f, 5.851691175e-02f,
+5.847305111e-02f, 5.842909748e-02f, 5.838505096e-02f, 5.834091163e-02f, 5.829667960e-02f, 5.825235495e-02f, 5.820793777e-02f, 5.816342817e-02f, 5.811882622e-02f, 5.807413203e-02f,
+5.802934569e-02f, 5.798446729e-02f, 5.793949693e-02f, 5.789443469e-02f, 5.784928068e-02f, 5.780403499e-02f, 5.775869771e-02f, 5.771326893e-02f, 5.766774876e-02f, 5.762213728e-02f,
+5.757643459e-02f, 5.753064078e-02f, 5.748475596e-02f, 5.743878021e-02f, 5.739271363e-02f, 5.734655632e-02f, 5.730030837e-02f, 5.725396987e-02f, 5.720754093e-02f, 5.716102164e-02f,
+5.711441210e-02f, 5.706771240e-02f, 5.702092263e-02f, 5.697404290e-02f, 5.692707330e-02f, 5.688001393e-02f, 5.683286488e-02f, 5.678562626e-02f, 5.673829816e-02f, 5.669088067e-02f,
+5.664337390e-02f, 5.659577794e-02f, 5.654809289e-02f, 5.650031884e-02f, 5.645245591e-02f, 5.640450417e-02f, 5.635646374e-02f, 5.630833471e-02f, 5.626011718e-02f, 5.621181125e-02f,
+5.616341701e-02f, 5.611493457e-02f, 5.606636402e-02f, 5.601770547e-02f, 5.596895901e-02f, 5.592012475e-02f, 5.587120278e-02f, 5.582219320e-02f, 5.577309611e-02f, 5.572391161e-02f,
+5.567463981e-02f, 5.562528079e-02f, 5.557583468e-02f, 5.552630155e-02f, 5.547668152e-02f, 5.542697468e-02f, 5.537718114e-02f, 5.532730100e-02f, 5.527733436e-02f, 5.522728131e-02f,
+5.517714197e-02f, 5.512691642e-02f, 5.507660478e-02f, 5.502620715e-02f, 5.497572363e-02f, 5.492515431e-02f, 5.487449931e-02f, 5.482375872e-02f, 5.477293265e-02f, 5.472202120e-02f,
+5.467102447e-02f, 5.461994256e-02f, 5.456877558e-02f, 5.451752364e-02f, 5.446618683e-02f, 5.441476525e-02f, 5.436325902e-02f, 5.431166823e-02f, 5.425999299e-02f, 5.420823340e-02f,
+5.415638957e-02f, 5.410446160e-02f, 5.405244959e-02f, 5.400035365e-02f, 5.394817388e-02f, 5.389591039e-02f, 5.384356329e-02f, 5.379113267e-02f, 5.373861864e-02f, 5.368602131e-02f,
+5.363334079e-02f, 5.358057717e-02f, 5.352773056e-02f, 5.347480108e-02f, 5.342178881e-02f, 5.336869388e-02f, 5.331551638e-02f, 5.326225643e-02f, 5.320891412e-02f, 5.315548957e-02f,
+5.310198288e-02f, 5.304839416e-02f, 5.299472351e-02f, 5.294097104e-02f, 5.288713686e-02f, 5.283322108e-02f, 5.277922379e-02f, 5.272514512e-02f, 5.267098516e-02f, 5.261674403e-02f,
+5.256242183e-02f, 5.250801866e-02f, 5.245353465e-02f, 5.239896989e-02f, 5.234432449e-02f, 5.228959857e-02f, 5.223479222e-02f, 5.217990556e-02f, 5.212493870e-02f, 5.206989174e-02f,
+5.201476480e-02f, 5.195955798e-02f, 5.190427139e-02f, 5.184890515e-02f, 5.179345935e-02f, 5.173793411e-02f, 5.168232955e-02f, 5.162664576e-02f, 5.157088286e-02f, 5.151504095e-02f,
+5.145912016e-02f, 5.140312058e-02f, 5.134704233e-02f, 5.129088552e-02f, 5.123465026e-02f, 5.117833666e-02f, 5.112194483e-02f, 5.106547488e-02f, 5.100892692e-02f, 5.095230106e-02f,
+5.089559741e-02f, 5.083881609e-02f, 5.078195721e-02f, 5.072502088e-02f, 5.066800720e-02f, 5.061091629e-02f, 5.055374827e-02f, 5.049650323e-02f, 5.043918131e-02f, 5.038178260e-02f,
+5.032430722e-02f, 5.026675529e-02f, 5.020912691e-02f, 5.015142220e-02f, 5.009364126e-02f, 5.003578422e-02f, 4.997785119e-02f, 4.991984227e-02f, 4.986175759e-02f, 4.980359725e-02f,
+4.974536136e-02f, 4.968705005e-02f, 4.962866342e-02f, 4.957020159e-02f, 4.951166468e-02f, 4.945305278e-02f, 4.939436603e-02f, 4.933560453e-02f, 4.927676840e-02f, 4.921785775e-02f,
+4.915887270e-02f, 4.909981336e-02f, 4.904067984e-02f, 4.898147226e-02f, 4.892219074e-02f, 4.886283538e-02f, 4.880340631e-02f, 4.874390364e-02f, 4.868432749e-02f, 4.862467796e-02f,
+4.856495518e-02f, 4.850515926e-02f, 4.844529031e-02f, 4.838534846e-02f, 4.832533382e-02f, 4.826524650e-02f, 4.820508662e-02f, 4.814485429e-02f, 4.808454964e-02f, 4.802417277e-02f,
+4.796372381e-02f, 4.790320287e-02f, 4.784261007e-02f, 4.778194552e-02f, 4.772120934e-02f, 4.766040165e-02f, 4.759952257e-02f, 4.753857221e-02f, 4.747755068e-02f, 4.741645812e-02f,
+4.735529462e-02f, 4.729406032e-02f, 4.723275533e-02f, 4.717137977e-02f, 4.710993375e-02f, 4.704841739e-02f, 4.698683082e-02f, 4.692517414e-02f, 4.686344748e-02f, 4.680165095e-02f,
+4.673978468e-02f, 4.667784878e-02f, 4.661584337e-02f, 4.655376857e-02f, 4.649162450e-02f, 4.642941127e-02f, 4.636712901e-02f, 4.630477784e-02f, 4.624235787e-02f, 4.617986922e-02f,
+4.611731201e-02f, 4.605468637e-02f, 4.599199241e-02f, 4.592923025e-02f, 4.586640001e-02f, 4.580350182e-02f, 4.574053578e-02f, 4.567750202e-02f, 4.561440067e-02f, 4.555123184e-02f,
+4.548799564e-02f, 4.542469221e-02f, 4.536132167e-02f, 4.529788412e-02f, 4.523437970e-02f, 4.517080852e-02f, 4.510717071e-02f, 4.504346638e-02f, 4.497969566e-02f, 4.491585867e-02f,
+4.485195553e-02f, 4.478798636e-02f, 4.472395128e-02f, 4.465985042e-02f, 4.459568389e-02f, 4.453145181e-02f, 4.446715432e-02f, 4.440279152e-02f, 4.433836355e-02f, 4.427387052e-02f,
+4.420931256e-02f, 4.414468979e-02f, 4.408000233e-02f, 4.401525030e-02f, 4.395043383e-02f, 4.388555303e-02f, 4.382060804e-02f, 4.375559897e-02f, 4.369052595e-02f, 4.362538909e-02f,
+4.356018853e-02f, 4.349492439e-02f, 4.342959678e-02f, 4.336420583e-02f, 4.329875167e-02f, 4.323323442e-02f, 4.316765420e-02f, 4.310201114e-02f, 4.303630536e-02f, 4.297053697e-02f,
+4.290470612e-02f, 4.283881292e-02f, 4.277285749e-02f, 4.270683996e-02f, 4.264076045e-02f, 4.257461909e-02f, 4.250841600e-02f, 4.244215131e-02f, 4.237582514e-02f, 4.230943761e-02f,
+4.224298886e-02f, 4.217647900e-02f, 4.210990816e-02f, 4.204327646e-02f, 4.197658403e-02f, 4.190983100e-02f, 4.184301748e-02f, 4.177614361e-02f, 4.170920951e-02f, 4.164221531e-02f,
+4.157516113e-02f, 4.150804709e-02f, 4.144087333e-02f, 4.137363996e-02f, 4.130634712e-02f, 4.123899492e-02f, 4.117158351e-02f, 4.110411299e-02f, 4.103658350e-02f, 4.096899517e-02f,
+4.090134811e-02f, 4.083364247e-02f, 4.076587835e-02f, 4.069805590e-02f, 4.063017523e-02f, 4.056223647e-02f, 4.049423975e-02f, 4.042618520e-02f, 4.035807294e-02f, 4.028990310e-02f,
+4.022167581e-02f, 4.015339119e-02f, 4.008504937e-02f, 4.001665048e-02f, 3.994819465e-02f, 3.987968200e-02f, 3.981111266e-02f, 3.974248676e-02f, 3.967380443e-02f, 3.960506578e-02f,
+3.953627096e-02f, 3.946742009e-02f, 3.939851330e-02f, 3.932955071e-02f, 3.926053245e-02f, 3.919145866e-02f, 3.912232945e-02f, 3.905314496e-02f, 3.898390532e-02f, 3.891461065e-02f,
+3.884526108e-02f, 3.877585675e-02f, 3.870639778e-02f, 3.863688429e-02f, 3.856731642e-02f, 3.849769430e-02f, 3.842801806e-02f, 3.835828781e-02f, 3.828850370e-02f, 3.821866586e-02f,
+3.814877440e-02f, 3.807882947e-02f, 3.800883118e-02f, 3.793877968e-02f, 3.786867508e-02f, 3.779851753e-02f, 3.772830714e-02f, 3.765804404e-02f, 3.758772838e-02f, 3.751736027e-02f,
+3.744693985e-02f, 3.737646725e-02f, 3.730594259e-02f, 3.723536601e-02f, 3.716473764e-02f, 3.709405760e-02f, 3.702332603e-02f, 3.695254306e-02f, 3.688170882e-02f, 3.681082344e-02f,
+3.673988704e-02f, 3.666889977e-02f, 3.659786174e-02f, 3.652677310e-02f, 3.645563397e-02f, 3.638444448e-02f, 3.631320476e-02f, 3.624191495e-02f, 3.617057517e-02f, 3.609918556e-02f,
+3.602774625e-02f, 3.595625737e-02f, 3.588471904e-02f, 3.581313141e-02f, 3.574149460e-02f, 3.566980874e-02f, 3.559807397e-02f, 3.552629042e-02f, 3.545445821e-02f, 3.538257749e-02f,
+3.531064837e-02f, 3.523867100e-02f, 3.516664551e-02f, 3.509457202e-02f, 3.502245068e-02f, 3.495028160e-02f, 3.487806493e-02f, 3.480580080e-02f, 3.473348933e-02f, 3.466113066e-02f,
+3.458872493e-02f, 3.451627226e-02f, 3.444377279e-02f, 3.437122664e-02f, 3.429863396e-02f, 3.422599488e-02f, 3.415330952e-02f, 3.408057802e-02f, 3.400780052e-02f, 3.393497714e-02f,
+3.386210802e-02f, 3.378919329e-02f, 3.371623309e-02f, 3.364322754e-02f, 3.357017679e-02f, 3.349708095e-02f, 3.342394018e-02f, 3.335075460e-02f, 3.327752433e-02f, 3.320424953e-02f,
+3.313093032e-02f, 3.305756683e-02f, 3.298415919e-02f, 3.291070755e-02f, 3.283721203e-02f, 3.276367277e-02f, 3.269008990e-02f, 3.261646356e-02f, 3.254279388e-02f, 3.246908099e-02f,
+3.239532502e-02f, 3.232152612e-02f, 3.224768441e-02f, 3.217380003e-02f, 3.209987312e-02f, 3.202590380e-02f, 3.195189221e-02f, 3.187783849e-02f, 3.180374277e-02f, 3.172960518e-02f,
+3.165542586e-02f, 3.158120495e-02f, 3.150694257e-02f, 3.143263887e-02f, 3.135829397e-02f, 3.128390801e-02f, 3.120948113e-02f, 3.113501346e-02f, 3.106050514e-02f, 3.098595629e-02f,
+3.091136707e-02f, 3.083673759e-02f, 3.076206799e-02f, 3.068735842e-02f, 3.061260900e-02f, 3.053781987e-02f, 3.046299117e-02f, 3.038812303e-02f, 3.031321558e-02f, 3.023826897e-02f,
+3.016328332e-02f, 3.008825877e-02f, 3.001319546e-02f, 2.993809352e-02f, 2.986295309e-02f, 2.978777430e-02f, 2.971255729e-02f, 2.963730220e-02f, 2.956200915e-02f, 2.948667829e-02f,
+2.941130976e-02f, 2.933590368e-02f, 2.926046019e-02f, 2.918497943e-02f, 2.910946154e-02f, 2.903390665e-02f, 2.895831489e-02f, 2.888268641e-02f, 2.880702133e-02f, 2.873131980e-02f,
+2.865558195e-02f, 2.857980792e-02f, 2.850399784e-02f, 2.842815185e-02f, 2.835227008e-02f, 2.827635268e-02f, 2.820039977e-02f, 2.812441150e-02f, 2.804838800e-02f, 2.797232941e-02f,
+2.789623586e-02f, 2.782010749e-02f, 2.774394444e-02f, 2.766774684e-02f, 2.759151483e-02f, 2.751524855e-02f, 2.743894813e-02f, 2.736261371e-02f, 2.728624543e-02f, 2.720984342e-02f,
+2.713340782e-02f, 2.705693877e-02f, 2.698043641e-02f, 2.690390086e-02f, 2.682733228e-02f, 2.675073078e-02f, 2.667409652e-02f, 2.659742963e-02f, 2.652073025e-02f, 2.644399850e-02f,
+2.636723454e-02f, 2.629043850e-02f, 2.621361051e-02f, 2.613675071e-02f, 2.605985924e-02f, 2.598293624e-02f, 2.590598184e-02f, 2.582899619e-02f, 2.575197941e-02f, 2.567493165e-02f,
+2.559785304e-02f, 2.552074372e-02f, 2.544360383e-02f, 2.536643350e-02f, 2.528923288e-02f, 2.521200210e-02f, 2.513474130e-02f, 2.505745062e-02f, 2.498013019e-02f, 2.490278015e-02f,
+2.482540064e-02f, 2.474799179e-02f, 2.467055376e-02f, 2.459308666e-02f, 2.451559064e-02f, 2.443806585e-02f, 2.436051240e-02f, 2.428293046e-02f, 2.420532014e-02f, 2.412768159e-02f,
+2.405001496e-02f, 2.397232036e-02f, 2.389459796e-02f, 2.381684787e-02f, 2.373907024e-02f, 2.366126521e-02f, 2.358343292e-02f, 2.350557350e-02f, 2.342768709e-02f, 2.334977384e-02f,
+2.327183387e-02f, 2.319386733e-02f, 2.311587435e-02f, 2.303785508e-02f, 2.295980965e-02f, 2.288173819e-02f, 2.280364086e-02f, 2.272551778e-02f, 2.264736910e-02f, 2.256919495e-02f,
+2.249099548e-02f, 2.241277081e-02f, 2.233452109e-02f, 2.225624646e-02f, 2.217794705e-02f, 2.209962301e-02f, 2.202127447e-02f, 2.194290157e-02f, 2.186450445e-02f, 2.178608325e-02f,
+2.170763810e-02f, 2.162916915e-02f, 2.155067653e-02f, 2.147216039e-02f, 2.139362086e-02f, 2.131505807e-02f, 2.123647218e-02f, 2.115786331e-02f, 2.107923161e-02f, 2.100057721e-02f,
+2.092190025e-02f, 2.084320088e-02f, 2.076447922e-02f, 2.068573543e-02f, 2.060696963e-02f, 2.052818198e-02f, 2.044937259e-02f, 2.037054162e-02f, 2.029168921e-02f, 2.021281549e-02f,
+2.013392060e-02f, 2.005500467e-02f, 1.997606786e-02f, 1.989711030e-02f, 1.981813212e-02f, 1.973913346e-02f, 1.966011448e-02f, 1.958107529e-02f, 1.950201605e-02f, 1.942293689e-02f,
+1.934383795e-02f, 1.926471937e-02f, 1.918558128e-02f, 1.910642384e-02f, 1.902724717e-02f, 1.894805141e-02f, 1.886883671e-02f, 1.878960320e-02f, 1.871035103e-02f, 1.863108033e-02f,
+1.855179123e-02f, 1.847248389e-02f, 1.839315844e-02f, 1.831381501e-02f, 1.823445375e-02f, 1.815507480e-02f, 1.807567829e-02f, 1.799626436e-02f, 1.791683316e-02f, 1.783738482e-02f,
+1.775791948e-02f, 1.767843728e-02f, 1.759893836e-02f, 1.751942286e-02f, 1.743989092e-02f, 1.736034268e-02f, 1.728077827e-02f, 1.720119784e-02f, 1.712160152e-02f, 1.704198945e-02f,
+1.696236178e-02f, 1.688271864e-02f, 1.680306017e-02f, 1.672338651e-02f, 1.664369780e-02f, 1.656399418e-02f, 1.648427578e-02f, 1.640454276e-02f, 1.632479524e-02f, 1.624503336e-02f,
+1.616525727e-02f, 1.608546710e-02f, 1.600566299e-02f, 1.592584509e-02f, 1.584601353e-02f, 1.576616845e-02f, 1.568630998e-02f, 1.560643828e-02f, 1.552655347e-02f, 1.544665570e-02f,
+1.536674511e-02f, 1.528682183e-02f, 1.520688601e-02f, 1.512693778e-02f, 1.504697728e-02f, 1.496700465e-02f, 1.488702004e-02f, 1.480702357e-02f, 1.472701539e-02f, 1.464699565e-02f,
+1.456696447e-02f, 1.448692199e-02f, 1.440686836e-02f, 1.432680372e-02f, 1.424672820e-02f, 1.416664194e-02f, 1.408654509e-02f, 1.400643778e-02f, 1.392632014e-02f, 1.384619233e-02f,
+1.376605447e-02f, 1.368590672e-02f, 1.360574920e-02f, 1.352558205e-02f, 1.344540542e-02f, 1.336521944e-02f, 1.328502426e-02f, 1.320482000e-02f, 1.312460682e-02f, 1.304438485e-02f,
+1.296415423e-02f, 1.288391509e-02f, 1.280366758e-02f, 1.272341184e-02f, 1.264314800e-02f, 1.256287620e-02f, 1.248259659e-02f, 1.240230930e-02f, 1.232201447e-02f, 1.224171224e-02f,
+1.216140274e-02f, 1.208108612e-02f, 1.200076252e-02f, 1.192043208e-02f, 1.184009492e-02f, 1.175975120e-02f, 1.167940105e-02f, 1.159904462e-02f, 1.151868202e-02f, 1.143831342e-02f,
+1.135793895e-02f, 1.127755873e-02f, 1.119717293e-02f, 1.111678166e-02f, 1.103638508e-02f, 1.095598331e-02f, 1.087557651e-02f, 1.079516480e-02f, 1.071474833e-02f, 1.063432723e-02f,
+1.055390165e-02f, 1.047347171e-02f, 1.039303757e-02f, 1.031259936e-02f, 1.023215721e-02f, 1.015171127e-02f, 1.007126168e-02f, 9.990808568e-03f, 9.910352077e-03f, 9.829892347e-03f,
+9.749429515e-03f, 9.668963720e-03f, 9.588495100e-03f, 9.508023794e-03f, 9.427549940e-03f, 9.347073677e-03f, 9.266595142e-03f, 9.186114474e-03f, 9.105631811e-03f, 9.025147292e-03f,
+8.944661055e-03f, 8.864173238e-03f, 8.783683979e-03f, 8.703193417e-03f, 8.622701689e-03f, 8.542208934e-03f, 8.461715290e-03f, 8.381220895e-03f, 8.300725887e-03f, 8.220230404e-03f,
+8.139734585e-03f, 8.059238566e-03f, 7.978742487e-03f, 7.898246485e-03f, 7.817750698e-03f, 7.737255264e-03f, 7.656760320e-03f, 7.576266006e-03f, 7.495772458e-03f, 7.415279815e-03f,
+7.334788214e-03f, 7.254297792e-03f, 7.173808689e-03f, 7.093321041e-03f, 7.012834986e-03f, 6.932350661e-03f, 6.851868206e-03f, 6.771387756e-03f, 6.690909450e-03f, 6.610433425e-03f,
+6.529959818e-03f, 6.449488768e-03f, 6.369020412e-03f, 6.288554887e-03f, 6.208092330e-03f, 6.127632879e-03f, 6.047176672e-03f, 5.966723845e-03f, 5.886274536e-03f, 5.805828882e-03f,
+5.725387021e-03f, 5.644949089e-03f, 5.564515225e-03f, 5.484085564e-03f, 5.403660244e-03f, 5.323239403e-03f, 5.242823176e-03f, 5.162411703e-03f, 5.082005118e-03f, 5.001603560e-03f,
+4.921207165e-03f, 4.840816070e-03f, 4.760430412e-03f, 4.680050327e-03f, 4.599675954e-03f, 4.519307428e-03f, 4.438944886e-03f, 4.358588464e-03f, 4.278238301e-03f, 4.197894531e-03f,
+4.117557292e-03f, 4.037226721e-03f, 3.956902953e-03f, 3.876586126e-03f, 3.796276376e-03f, 3.715973838e-03f, 3.635678651e-03f, 3.555390949e-03f, 3.475110870e-03f, 3.394838550e-03f,
+3.314574124e-03f, 3.234317729e-03f, 3.154069502e-03f, 3.073829578e-03f, 2.993598093e-03f, 2.913375185e-03f, 2.833160987e-03f, 2.752955638e-03f, 2.672759271e-03f, 2.592572025e-03f,
+2.512394033e-03f, 2.432225433e-03f, 2.352066360e-03f, 2.271916949e-03f, 2.191777337e-03f, 2.111647659e-03f, 2.031528051e-03f, 1.951418648e-03f, 1.871319586e-03f, 1.791231000e-03f,
+1.711153027e-03f, 1.631085800e-03f, 1.551029456e-03f, 1.470984131e-03f, 1.390949959e-03f, 1.310927075e-03f, 1.230915616e-03f, 1.150915715e-03f, 1.070927509e-03f, 9.909511317e-04f,
+9.109867191e-04f, 8.310344058e-04f, 7.510943269e-04f, 6.711666172e-04f, 5.912514117e-04f, 5.113488453e-04f, 4.314590526e-04f, 3.515821684e-04f, 2.717183275e-04f, 1.918676644e-04f,
+1.120303139e-04f, 3.220641052e-05f, -4.760391130e-05f, -1.274005170e-04f, -2.071832723e-04f, -2.869520426e-04f, -3.667066937e-04f, -4.464470913e-04f, -5.261731011e-04f, -6.058845889e-04f,
+-6.855814206e-04f, -7.652634621e-04f, -8.449305794e-04f, -9.245826383e-04f, -1.004219505e-03f, -1.083841046e-03f, -1.163447126e-03f, -1.243037613e-03f, -1.322612372e-03f, -1.402171270e-03f,
+-1.481714173e-03f, -1.561240947e-03f, -1.640751460e-03f, -1.720245576e-03f, -1.799723164e-03f, -1.879184089e-03f, -1.958628218e-03f, -2.038055418e-03f, -2.117465555e-03f, -2.196858497e-03f,
+-2.276234110e-03f, -2.355592261e-03f, -2.434932817e-03f, -2.514255646e-03f, -2.593560613e-03f, -2.672847586e-03f, -2.752116433e-03f, -2.831367021e-03f, -2.910599216e-03f, -2.989812886e-03f,
+-3.069007899e-03f, -3.148184122e-03f, -3.227341423e-03f, -3.306479668e-03f, -3.385598726e-03f, -3.464698464e-03f, -3.543778750e-03f, -3.622839452e-03f, -3.701880437e-03f, -3.780901574e-03f,
+-3.859902730e-03f, -3.938883773e-03f, -4.017844572e-03f, -4.096784993e-03f, -4.175704907e-03f, -4.254604180e-03f, -4.333482681e-03f, -4.412340279e-03f, -4.491176841e-03f, -4.569992237e-03f,
+-4.648786334e-03f, -4.727559001e-03f, -4.806310108e-03f, -4.885039522e-03f, -4.963747112e-03f, -5.042432747e-03f, -5.121096296e-03f, -5.199737627e-03f, -5.278356611e-03f, -5.356953115e-03f,
+-5.435527010e-03f, -5.514078163e-03f, -5.592606444e-03f, -5.671111723e-03f, -5.749593869e-03f, -5.828052752e-03f, -5.906488240e-03f, -5.984900203e-03f, -6.063288511e-03f, -6.141653033e-03f,
+-6.219993640e-03f, -6.298310200e-03f, -6.376602585e-03f, -6.454870663e-03f, -6.533114304e-03f, -6.611333380e-03f, -6.689527759e-03f, -6.767697311e-03f, -6.845841908e-03f, -6.923961420e-03f,
+-7.002055716e-03f, -7.080124667e-03f, -7.158168143e-03f, -7.236186016e-03f, -7.314178156e-03f, -7.392144433e-03f, -7.470084718e-03f, -7.547998882e-03f, -7.625886795e-03f, -7.703748330e-03f,
+-7.781583356e-03f, -7.859391745e-03f, -7.937173368e-03f, -8.014928096e-03f, -8.092655800e-03f, -8.170356352e-03f, -8.248029623e-03f, -8.325675485e-03f, -8.403293809e-03f, -8.480884466e-03f,
+-8.558447329e-03f, -8.635982269e-03f, -8.713489158e-03f, -8.790967868e-03f, -8.868418271e-03f, -8.945840238e-03f, -9.023233642e-03f, -9.100598356e-03f, -9.177934250e-03f, -9.255241198e-03f,
+-9.332519073e-03f, -9.409767745e-03f, -9.486987089e-03f, -9.564176976e-03f, -9.641337279e-03f, -9.718467871e-03f, -9.795568624e-03f, -9.872639413e-03f, -9.949680108e-03f, -1.002669058e-02f,
+-1.010367071e-02f, -1.018062037e-02f, -1.025753943e-02f, -1.033442776e-02f, -1.041128523e-02f, -1.048811173e-02f, -1.056490712e-02f, -1.064167128e-02f, -1.071840408e-02f, -1.079510539e-02f,
+-1.087177509e-02f, -1.094841306e-02f, -1.102501916e-02f, -1.110159327e-02f, -1.117813527e-02f, -1.125464502e-02f, -1.133112241e-02f, -1.140756731e-02f, -1.148397958e-02f, -1.156035912e-02f,
+-1.163670578e-02f, -1.171301945e-02f, -1.178930000e-02f, -1.186554731e-02f, -1.194176124e-02f, -1.201794169e-02f, -1.209408851e-02f, -1.217020158e-02f, -1.224628079e-02f, -1.232232600e-02f,
+-1.239833710e-02f, -1.247431395e-02f, -1.255025643e-02f, -1.262616442e-02f, -1.270203779e-02f, -1.277787643e-02f, -1.285368019e-02f, -1.292944897e-02f, -1.300518264e-02f, -1.308088107e-02f,
+-1.315654413e-02f, -1.323217172e-02f, -1.330776369e-02f, -1.338331993e-02f, -1.345884032e-02f, -1.353432473e-02f, -1.360977303e-02f, -1.368518512e-02f, -1.376056085e-02f, -1.383590011e-02f,
+-1.391120277e-02f, -1.398646872e-02f, -1.406169783e-02f, -1.413688997e-02f, -1.421204503e-02f, -1.428716288e-02f, -1.436224340e-02f, -1.443728646e-02f, -1.451229195e-02f, -1.458725974e-02f,
+-1.466218971e-02f, -1.473708174e-02f, -1.481193570e-02f, -1.488675148e-02f, -1.496152895e-02f, -1.503626798e-02f, -1.511096847e-02f, -1.518563028e-02f, -1.526025330e-02f, -1.533483740e-02f,
+-1.540938247e-02f, -1.548388837e-02f, -1.555835500e-02f, -1.563278222e-02f, -1.570716993e-02f, -1.578151799e-02f, -1.585582628e-02f, -1.593009470e-02f, -1.600432310e-02f, -1.607851138e-02f,
+-1.615265942e-02f, -1.622676709e-02f, -1.630083427e-02f, -1.637486085e-02f, -1.644884669e-02f, -1.652279170e-02f, -1.659669573e-02f, -1.667055868e-02f, -1.674438042e-02f, -1.681816084e-02f,
+-1.689189981e-02f, -1.696559721e-02f, -1.703925293e-02f, -1.711286685e-02f, -1.718643884e-02f, -1.725996879e-02f, -1.733345658e-02f, -1.740690209e-02f, -1.748030520e-02f, -1.755366580e-02f,
+-1.762698375e-02f, -1.770025896e-02f, -1.777349129e-02f, -1.784668063e-02f, -1.791982685e-02f, -1.799292985e-02f, -1.806598951e-02f, -1.813900570e-02f, -1.821197830e-02f, -1.828490721e-02f,
+-1.835779230e-02f, -1.843063346e-02f, -1.850343056e-02f, -1.857618349e-02f, -1.864889213e-02f, -1.872155637e-02f, -1.879417609e-02f, -1.886675117e-02f, -1.893928149e-02f, -1.901176694e-02f,
+-1.908420740e-02f, -1.915660276e-02f, -1.922895289e-02f, -1.930125768e-02f, -1.937351702e-02f, -1.944573078e-02f, -1.951789886e-02f, -1.959002113e-02f, -1.966209749e-02f, -1.973412780e-02f,
+-1.980611197e-02f, -1.987804986e-02f, -1.994994138e-02f, -2.002178639e-02f, -2.009358479e-02f, -2.016533646e-02f, -2.023704129e-02f, -2.030869916e-02f, -2.038030995e-02f, -2.045187355e-02f,
+-2.052338985e-02f, -2.059485873e-02f, -2.066628008e-02f, -2.073765377e-02f, -2.080897971e-02f, -2.088025776e-02f, -2.095148783e-02f, -2.102266979e-02f, -2.109380353e-02f, -2.116488894e-02f,
+-2.123592590e-02f, -2.130691430e-02f, -2.137785403e-02f, -2.144874496e-02f, -2.151958700e-02f, -2.159038002e-02f, -2.166112392e-02f, -2.173181857e-02f, -2.180246387e-02f, -2.187305970e-02f,
+-2.194360596e-02f, -2.201410252e-02f, -2.208454927e-02f, -2.215494611e-02f, -2.222529292e-02f, -2.229558959e-02f, -2.236583600e-02f, -2.243603205e-02f, -2.250617761e-02f, -2.257627259e-02f,
+-2.264631687e-02f, -2.271631033e-02f, -2.278625287e-02f, -2.285614437e-02f, -2.292598473e-02f, -2.299577382e-02f, -2.306551155e-02f, -2.313519779e-02f, -2.320483244e-02f, -2.327441539e-02f,
+-2.334394653e-02f, -2.341342574e-02f, -2.348285292e-02f, -2.355222795e-02f, -2.362155073e-02f, -2.369082114e-02f, -2.376003908e-02f, -2.382920443e-02f, -2.389831708e-02f, -2.396737693e-02f,
+-2.403638387e-02f, -2.410533778e-02f, -2.417423856e-02f, -2.424308610e-02f, -2.431188028e-02f, -2.438062101e-02f, -2.444930816e-02f, -2.451794163e-02f, -2.458652132e-02f, -2.465504711e-02f,
+-2.472351890e-02f, -2.479193657e-02f, -2.486030002e-02f, -2.492860914e-02f, -2.499686383e-02f, -2.506506396e-02f, -2.513320945e-02f, -2.520130017e-02f, -2.526933602e-02f, -2.533731690e-02f,
+-2.540524269e-02f, -2.547311330e-02f, -2.554092860e-02f, -2.560868850e-02f, -2.567639288e-02f, -2.574404165e-02f, -2.581163468e-02f, -2.587917189e-02f, -2.594665316e-02f, -2.601407838e-02f,
+-2.608144745e-02f, -2.614876026e-02f, -2.621601670e-02f, -2.628321668e-02f, -2.635036008e-02f, -2.641744679e-02f, -2.648447672e-02f, -2.655144976e-02f, -2.661836580e-02f, -2.668522473e-02f,
+-2.675202646e-02f, -2.681877087e-02f, -2.688545786e-02f, -2.695208733e-02f, -2.701865917e-02f, -2.708517328e-02f, -2.715162955e-02f, -2.721802787e-02f, -2.728436815e-02f, -2.735065028e-02f,
+-2.741687416e-02f, -2.748303968e-02f, -2.754914674e-02f, -2.761519523e-02f, -2.768118505e-02f, -2.774711610e-02f, -2.781298827e-02f, -2.787880146e-02f, -2.794455557e-02f, -2.801025050e-02f,
+-2.807588614e-02f, -2.814146239e-02f, -2.820697914e-02f, -2.827243630e-02f, -2.833783376e-02f, -2.840317142e-02f, -2.846844918e-02f, -2.853366693e-02f, -2.859882457e-02f, -2.866392201e-02f,
+-2.872895914e-02f, -2.879393586e-02f, -2.885885206e-02f, -2.892370765e-02f, -2.898850252e-02f, -2.905323658e-02f, -2.911790972e-02f, -2.918252184e-02f, -2.924707284e-02f, -2.931156262e-02f,
+-2.937599109e-02f, -2.944035813e-02f, -2.950466365e-02f, -2.956890755e-02f, -2.963308974e-02f, -2.969721010e-02f, -2.976126854e-02f, -2.982526496e-02f, -2.988919926e-02f, -2.995307134e-02f,
+-3.001688111e-02f, -3.008062846e-02f, -3.014431329e-02f, -3.020793550e-02f, -3.027149501e-02f, -3.033499170e-02f, -3.039842548e-02f, -3.046179625e-02f, -3.052510392e-02f, -3.058834837e-02f,
+-3.065152953e-02f, -3.071464728e-02f, -3.077770154e-02f, -3.084069219e-02f, -3.090361916e-02f, -3.096648233e-02f, -3.102928161e-02f, -3.109201691e-02f, -3.115468812e-02f, -3.121729515e-02f,
+-3.127983791e-02f, -3.134231629e-02f, -3.140473021e-02f, -3.146707955e-02f, -3.152936424e-02f, -3.159158416e-02f, -3.165373923e-02f, -3.171582935e-02f, -3.177785442e-02f, -3.183981435e-02f,
+-3.190170905e-02f, -3.196353841e-02f, -3.202530234e-02f, -3.208700075e-02f, -3.214863354e-02f, -3.221020061e-02f, -3.227170188e-02f, -3.233313725e-02f, -3.239450662e-02f, -3.245580990e-02f,
+-3.251704699e-02f, -3.257821780e-02f, -3.263932224e-02f, -3.270036021e-02f, -3.276133162e-02f, -3.282223638e-02f, -3.288307438e-02f, -3.294384555e-02f, -3.300454978e-02f, -3.306518698e-02f,
+-3.312575706e-02f, -3.318625992e-02f, -3.324669548e-02f, -3.330706365e-02f, -3.336736432e-02f, -3.342759740e-02f, -3.348776281e-02f, -3.354786045e-02f, -3.360789024e-02f, -3.366785207e-02f,
+-3.372774585e-02f, -3.378757150e-02f, -3.384732893e-02f, -3.390701804e-02f, -3.396663874e-02f, -3.402619094e-02f, -3.408567455e-02f, -3.414508948e-02f, -3.420443563e-02f, -3.426371293e-02f,
+-3.432292127e-02f, -3.438206057e-02f, -3.444113074e-02f, -3.450013168e-02f, -3.455906331e-02f, -3.461792554e-02f, -3.467671827e-02f, -3.473544143e-02f, -3.479409491e-02f, -3.485267864e-02f,
+-3.491119252e-02f, -3.496963646e-02f, -3.502801037e-02f, -3.508631417e-02f, -3.514454776e-02f, -3.520271106e-02f, -3.526080399e-02f, -3.531882644e-02f, -3.537677834e-02f, -3.543465960e-02f,
+-3.549247012e-02f, -3.555020983e-02f, -3.560787863e-02f, -3.566547643e-02f, -3.572300316e-02f, -3.578045871e-02f, -3.583784302e-02f, -3.589515598e-02f, -3.595239751e-02f, -3.600956753e-02f,
+-3.606666595e-02f, -3.612369268e-02f, -3.618064764e-02f, -3.623753074e-02f, -3.629434190e-02f, -3.635108102e-02f, -3.640774803e-02f, -3.646434284e-02f, -3.652086536e-02f, -3.657731551e-02f,
+-3.663369321e-02f, -3.668999836e-02f, -3.674623089e-02f, -3.680239071e-02f, -3.685847773e-02f, -3.691449188e-02f, -3.697043306e-02f, -3.702630120e-02f, -3.708209620e-02f, -3.713781799e-02f,
+-3.719346648e-02f, -3.724904159e-02f, -3.730454323e-02f, -3.735997133e-02f, -3.741532579e-02f, -3.747060655e-02f, -3.752581350e-02f, -3.758094658e-02f, -3.763600569e-02f, -3.769099076e-02f,
+-3.774590170e-02f, -3.780073844e-02f, -3.785550088e-02f, -3.791018896e-02f, -3.796480258e-02f, -3.801934166e-02f, -3.807380613e-02f, -3.812819590e-02f, -3.818251089e-02f, -3.823675102e-02f,
+-3.829091621e-02f, -3.834500638e-02f, -3.839902145e-02f, -3.845296134e-02f, -3.850682596e-02f, -3.856061525e-02f, -3.861432911e-02f, -3.866796747e-02f, -3.872153024e-02f, -3.877501736e-02f,
+-3.882842874e-02f, -3.888176429e-02f, -3.893502395e-02f, -3.898820763e-02f, -3.904131525e-02f, -3.909434674e-02f, -3.914730201e-02f, -3.920018100e-02f, -3.925298361e-02f, -3.930570977e-02f,
+-3.935835941e-02f, -3.941093244e-02f, -3.946342879e-02f, -3.951584838e-02f, -3.956819114e-02f, -3.962045698e-02f, -3.967264583e-02f, -3.972475761e-02f, -3.977679225e-02f, -3.982874967e-02f,
+-3.988062979e-02f, -3.993243253e-02f, -3.998415782e-02f, -4.003580559e-02f, -4.008737576e-02f, -4.013886824e-02f, -4.019028297e-02f, -4.024161988e-02f, -4.029287887e-02f, -4.034405989e-02f,
+-4.039516286e-02f, -4.044618769e-02f, -4.049713432e-02f, -4.054800267e-02f, -4.059879266e-02f, -4.064950423e-02f, -4.070013729e-02f, -4.075069178e-02f, -4.080116762e-02f, -4.085156473e-02f,
+-4.090188304e-02f, -4.095212249e-02f, -4.100228299e-02f, -4.105236447e-02f, -4.110236686e-02f, -4.115229009e-02f, -4.120213408e-02f, -4.125189876e-02f, -4.130158406e-02f, -4.135118991e-02f,
+-4.140071623e-02f, -4.145016295e-02f, -4.149953001e-02f, -4.154881732e-02f, -4.159802482e-02f, -4.164715243e-02f, -4.169620009e-02f, -4.174516773e-02f, -4.179405526e-02f, -4.184286263e-02f,
+-4.189158976e-02f, -4.194023657e-02f, -4.198880301e-02f, -4.203728900e-02f, -4.208569447e-02f, -4.213401934e-02f, -4.218226356e-02f, -4.223042704e-02f, -4.227850973e-02f, -4.232651155e-02f,
+-4.237443243e-02f, -4.242227231e-02f, -4.247003111e-02f, -4.251770876e-02f, -4.256530520e-02f, -4.261282036e-02f, -4.266025417e-02f, -4.270760656e-02f, -4.275487747e-02f, -4.280206682e-02f,
+-4.284917455e-02f, -4.289620060e-02f, -4.294314488e-02f, -4.299000734e-02f, -4.303678792e-02f, -4.308348653e-02f, -4.313010312e-02f, -4.317663762e-02f, -4.322308996e-02f, -4.326946008e-02f,
+-4.331574790e-02f, -4.336195338e-02f, -4.340807643e-02f, -4.345411699e-02f, -4.350007499e-02f, -4.354595038e-02f, -4.359174309e-02f, -4.363745305e-02f, -4.368308019e-02f, -4.372862445e-02f,
+-4.377408577e-02f, -4.381946408e-02f, -4.386475932e-02f, -4.390997142e-02f, -4.395510032e-02f, -4.400014596e-02f, -4.404510827e-02f, -4.408998719e-02f, -4.413478265e-02f, -4.417949459e-02f,
+-4.422412295e-02f, -4.426866766e-02f, -4.431312867e-02f, -4.435750590e-02f, -4.440179931e-02f, -4.444600881e-02f, -4.449013436e-02f, -4.453417589e-02f, -4.457813334e-02f, -4.462200664e-02f,
+-4.466579574e-02f, -4.470950057e-02f, -4.475312108e-02f, -4.479665719e-02f, -4.484010886e-02f, -4.488347601e-02f, -4.492675859e-02f, -4.496995654e-02f, -4.501306980e-02f, -4.505609830e-02f,
+-4.509904199e-02f, -4.514190081e-02f, -4.518467470e-02f, -4.522736359e-02f, -4.526996743e-02f, -4.531248616e-02f, -4.535491972e-02f, -4.539726805e-02f, -4.543953109e-02f, -4.548170879e-02f,
+-4.552380108e-02f, -4.556580790e-02f, -4.560772920e-02f, -4.564956493e-02f, -4.569131501e-02f, -4.573297940e-02f, -4.577455804e-02f, -4.581605086e-02f, -4.585745782e-02f, -4.589877885e-02f,
+-4.594001390e-02f, -4.598116291e-02f, -4.602222582e-02f, -4.606320258e-02f, -4.610409313e-02f, -4.614489742e-02f, -4.618561539e-02f, -4.622624698e-02f, -4.626679213e-02f, -4.630725080e-02f,
+-4.634762293e-02f, -4.638790845e-02f, -4.642810732e-02f, -4.646821948e-02f, -4.650824488e-02f, -4.654818346e-02f, -4.658803517e-02f, -4.662779994e-02f, -4.666747774e-02f, -4.670706850e-02f,
+-4.674657218e-02f, -4.678598870e-02f, -4.682531804e-02f, -4.686456012e-02f, -4.690371490e-02f, -4.694278232e-02f, -4.698176233e-02f, -4.702065488e-02f, -4.705945991e-02f, -4.709817738e-02f,
+-4.713680723e-02f, -4.717534941e-02f, -4.721380386e-02f, -4.725217054e-02f, -4.729044939e-02f, -4.732864036e-02f, -4.736674340e-02f, -4.740475846e-02f, -4.744268549e-02f, -4.748052443e-02f,
+-4.751827524e-02f, -4.755593787e-02f, -4.759351226e-02f, -4.763099837e-02f, -4.766839614e-02f, -4.770570553e-02f, -4.774292648e-02f, -4.778005895e-02f, -4.781710288e-02f, -4.785405823e-02f,
+-4.789092495e-02f, -4.792770298e-02f, -4.796439229e-02f, -4.800099282e-02f, -4.803750452e-02f, -4.807392734e-02f, -4.811026124e-02f, -4.814650617e-02f, -4.818266208e-02f, -4.821872892e-02f,
+-4.825470665e-02f, -4.829059522e-02f, -4.832639457e-02f, -4.836210467e-02f, -4.839772546e-02f, -4.843325691e-02f, -4.846869896e-02f, -4.850405156e-02f, -4.853931468e-02f, -4.857448826e-02f,
+-4.860957226e-02f, -4.864456663e-02f, -4.867947133e-02f, -4.871428631e-02f, -4.874901152e-02f, -4.878364693e-02f, -4.881819248e-02f, -4.885264814e-02f, -4.888701385e-02f, -4.892128957e-02f,
+-4.895547526e-02f, -4.898957088e-02f, -4.902357637e-02f, -4.905749170e-02f, -4.909131682e-02f, -4.912505169e-02f, -4.915869627e-02f, -4.919225051e-02f, -4.922571436e-02f, -4.925908779e-02f,
+-4.929237076e-02f, -4.932556322e-02f, -4.935866512e-02f, -4.939167643e-02f, -4.942459710e-02f, -4.945742710e-02f, -4.949016638e-02f, -4.952281489e-02f, -4.955537260e-02f, -4.958783947e-02f,
+-4.962021545e-02f, -4.965250051e-02f, -4.968469460e-02f, -4.971679768e-02f, -4.974880971e-02f, -4.978073066e-02f, -4.981256047e-02f, -4.984429912e-02f, -4.987594656e-02f, -4.990750275e-02f,
+-4.993896765e-02f, -4.997034123e-02f, -5.000162344e-02f, -5.003281424e-02f, -5.006391360e-02f, -5.009492148e-02f, -5.012583784e-02f, -5.015666263e-02f, -5.018739583e-02f, -5.021803740e-02f,
+-5.024858728e-02f, -5.027904546e-02f, -5.030941189e-02f, -5.033968653e-02f, -5.036986935e-02f, -5.039996030e-02f, -5.042995936e-02f, -5.045986649e-02f, -5.048968164e-02f, -5.051940479e-02f,
+-5.054903589e-02f, -5.057857491e-02f, -5.060802182e-02f, -5.063737657e-02f, -5.066663914e-02f, -5.069580948e-02f, -5.072488757e-02f, -5.075387336e-02f, -5.078276682e-02f, -5.081156793e-02f,
+-5.084027663e-02f, -5.086889290e-02f, -5.089741671e-02f, -5.092584802e-02f, -5.095418679e-02f, -5.098243299e-02f, -5.101058659e-02f, -5.103864756e-02f, -5.106661585e-02f, -5.109449145e-02f,
+-5.112227431e-02f, -5.114996440e-02f, -5.117756169e-02f, -5.120506615e-02f, -5.123247774e-02f, -5.125979643e-02f, -5.128702220e-02f, -5.131415500e-02f, -5.134119482e-02f, -5.136814160e-02f,
+-5.139499533e-02f, -5.142175598e-02f, -5.144842350e-02f, -5.147499788e-02f, -5.150147907e-02f, -5.152786706e-02f, -5.155416180e-02f, -5.158036327e-02f, -5.160647145e-02f, -5.163248629e-02f,
+-5.165840777e-02f, -5.168423586e-02f, -5.170997053e-02f, -5.173561175e-02f, -5.176115949e-02f, -5.178661372e-02f, -5.181197442e-02f, -5.183724156e-02f, -5.186241510e-02f, -5.188749502e-02f,
+-5.191248130e-02f, -5.193737389e-02f, -5.196217278e-02f, -5.198687794e-02f, -5.201148934e-02f, -5.203600695e-02f, -5.206043074e-02f, -5.208476070e-02f, -5.210899678e-02f, -5.213313898e-02f,
+-5.215718725e-02f, -5.218114157e-02f, -5.220500192e-02f, -5.222876827e-02f, -5.225244060e-02f, -5.227601887e-02f, -5.229950307e-02f, -5.232289317e-02f, -5.234618913e-02f, -5.236939095e-02f,
+-5.239249859e-02f, -5.241551203e-02f, -5.243843124e-02f, -5.246125621e-02f, -5.248398690e-02f, -5.250662329e-02f, -5.252916536e-02f, -5.255161308e-02f, -5.257396643e-02f, -5.259622539e-02f,
+-5.261838994e-02f, -5.264046004e-02f, -5.266243569e-02f, -5.268431685e-02f, -5.270610350e-02f, -5.272779563e-02f, -5.274939320e-02f, -5.277089620e-02f, -5.279230460e-02f, -5.281361839e-02f,
+-5.283483754e-02f, -5.285596203e-02f, -5.287699184e-02f, -5.289792694e-02f, -5.291876733e-02f, -5.293951297e-02f, -5.296016384e-02f, -5.298071993e-02f, -5.300118122e-02f, -5.302154768e-02f,
+-5.304181930e-02f, -5.306199605e-02f, -5.308207792e-02f, -5.310206489e-02f, -5.312195693e-02f, -5.314175403e-02f, -5.316145617e-02f, -5.318106333e-02f, -5.320057550e-02f, -5.321999265e-02f,
+-5.323931476e-02f, -5.325854182e-02f, -5.327767381e-02f, -5.329671072e-02f, -5.331565251e-02f, -5.333449919e-02f, -5.335325072e-02f, -5.337190710e-02f, -5.339046830e-02f, -5.340893431e-02f,
+-5.342730512e-02f, -5.344558070e-02f, -5.346376104e-02f, -5.348184612e-02f, -5.349983593e-02f, -5.351773046e-02f, -5.353552968e-02f, -5.355323358e-02f, -5.357084215e-02f, -5.358835536e-02f,
+-5.360577322e-02f, -5.362309569e-02f, -5.364032277e-02f, -5.365745444e-02f, -5.367449069e-02f, -5.369143151e-02f, -5.370827687e-02f, -5.372502677e-02f, -5.374168119e-02f, -5.375824012e-02f,
+-5.377470355e-02f, -5.379107145e-02f, -5.380734383e-02f, -5.382352066e-02f, -5.383960194e-02f, -5.385558765e-02f, -5.387147778e-02f, -5.388727232e-02f, -5.390297125e-02f, -5.391857456e-02f,
+-5.393408225e-02f, -5.394949429e-02f, -5.396481069e-02f, -5.398003142e-02f, -5.399515648e-02f, -5.401018585e-02f, -5.402511954e-02f, -5.403995751e-02f, -5.405469977e-02f, -5.406934631e-02f,
+-5.408389711e-02f, -5.409835216e-02f, -5.411271146e-02f, -5.412697499e-02f, -5.414114275e-02f, -5.415521473e-02f, -5.416919091e-02f, -5.418307130e-02f, -5.419685587e-02f, -5.421054463e-02f,
+-5.422413756e-02f, -5.423763466e-02f, -5.425103591e-02f, -5.426434131e-02f, -5.427755086e-02f, -5.429066453e-02f, -5.430368234e-02f, -5.431660427e-02f, -5.432943031e-02f, -5.434216045e-02f,
+-5.435479469e-02f, -5.436733303e-02f, -5.437977545e-02f, -5.439212196e-02f, -5.440437253e-02f, -5.441652718e-02f, -5.442858589e-02f, -5.444054865e-02f, -5.445241547e-02f, -5.446418633e-02f,
+-5.447586124e-02f, -5.448744018e-02f, -5.449892315e-02f, -5.451031015e-02f, -5.452160117e-02f, -5.453279621e-02f, -5.454389527e-02f, -5.455489834e-02f, -5.456580541e-02f, -5.457661649e-02f,
+-5.458733156e-02f, -5.459795063e-02f, -5.460847370e-02f, -5.461890076e-02f, -5.462923180e-02f, -5.463946683e-02f, -5.464960585e-02f, -5.465964884e-02f, -5.466959581e-02f, -5.467944676e-02f,
+-5.468920169e-02f, -5.469886058e-02f, -5.470842345e-02f, -5.471789029e-02f, -5.472726110e-02f, -5.473653588e-02f, -5.474571463e-02f, -5.475479734e-02f, -5.476378402e-02f, -5.477267466e-02f,
+-5.478146927e-02f, -5.479016785e-02f, -5.479877040e-02f, -5.480727691e-02f, -5.481568738e-02f, -5.482400183e-02f, -5.483222025e-02f, -5.484034263e-02f, -5.484836899e-02f, -5.485629932e-02f,
+-5.486413362e-02f, -5.487187190e-02f, -5.487951415e-02f, -5.488706039e-02f, -5.489451060e-02f, -5.490186480e-02f, -5.490912299e-02f, -5.491628516e-02f, -5.492335133e-02f, -5.493032149e-02f,
+-5.493719565e-02f, -5.494397382e-02f, -5.495065598e-02f, -5.495724216e-02f, -5.496373234e-02f, -5.497012655e-02f, -5.497642477e-02f, -5.498262702e-02f, -5.498873330e-02f, -5.499474361e-02f,
+-5.500065795e-02f, -5.500647635e-02f, -5.501219879e-02f, -5.501782528e-02f, -5.502335583e-02f, -5.502879045e-02f, -5.503412914e-02f, -5.503937190e-02f, -5.504451875e-02f, -5.504956969e-02f,
+-5.505452472e-02f, -5.505938385e-02f, -5.506414709e-02f, -5.506881444e-02f, -5.507338592e-02f, -5.507786153e-02f, -5.508224127e-02f, -5.508652516e-02f, -5.509071320e-02f, -5.509480540e-02f,
+-5.509880177e-02f, -5.510270232e-02f, -5.510650704e-02f, -5.511021597e-02f, -5.511382909e-02f, -5.511734642e-02f, -5.512076798e-02f, -5.512409376e-02f, -5.512732378e-02f, -5.513045804e-02f,
+-5.513349657e-02f, -5.513643936e-02f, -5.513928643e-02f, -5.514203778e-02f, -5.514469344e-02f, -5.514725339e-02f, -5.514971767e-02f, -5.515208628e-02f, -5.515435923e-02f, -5.515653653e-02f,
+-5.515861819e-02f, -5.516060422e-02f, -5.516249464e-02f, -5.516428946e-02f, -5.516598868e-02f, -5.516759233e-02f, -5.516910041e-02f, -5.517051293e-02f, -5.517182992e-02f, -5.517305137e-02f,
+-5.517417731e-02f, -5.517520775e-02f, -5.517614269e-02f, -5.517698216e-02f, -5.517772616e-02f, -5.517837472e-02f, -5.517892784e-02f, -5.517938554e-02f, -5.517974783e-02f, -5.518001473e-02f,
+-5.518018625e-02f, -5.518026240e-02f, -5.518024321e-02f, -5.518012868e-02f, -5.517991883e-02f, -5.517961368e-02f, -5.517921324e-02f, -5.517871752e-02f, -5.517812655e-02f, -5.517744034e-02f,
+-5.517665890e-02f, -5.517578226e-02f, -5.517481042e-02f, -5.517374340e-02f, -5.517258123e-02f, -5.517132391e-02f, -5.516997147e-02f, -5.516852392e-02f, -5.516698128e-02f, -5.516534357e-02f,
+-5.516361080e-02f, -5.516178299e-02f, -5.515986016e-02f, -5.515784233e-02f, -5.515572952e-02f, -5.515352174e-02f, -5.515121902e-02f, -5.514882137e-02f, -5.514632881e-02f, -5.514374136e-02f,
+-5.514105904e-02f, -5.513828187e-02f, -5.513540986e-02f, -5.513244305e-02f, -5.512938145e-02f, -5.512622507e-02f, -5.512297394e-02f, -5.511962808e-02f, -5.511618751e-02f, -5.511265225e-02f,
+-5.510902233e-02f, -5.510529775e-02f, -5.510147855e-02f, -5.509756474e-02f, -5.509355635e-02f, -5.508945340e-02f, -5.508525590e-02f, -5.508096389e-02f, -5.507657738e-02f, -5.507209640e-02f,
+-5.506752096e-02f, -5.506285110e-02f, -5.505808683e-02f, -5.505322817e-02f, -5.504827516e-02f, -5.504322780e-02f, -5.503808614e-02f, -5.503285018e-02f, -5.502751996e-02f, -5.502209549e-02f,
+-5.501657681e-02f, -5.501096393e-02f, -5.500525688e-02f, -5.499945568e-02f, -5.499356037e-02f, -5.498757095e-02f, -5.498148747e-02f, -5.497530994e-02f, -5.496903839e-02f, -5.496267284e-02f,
+-5.495621332e-02f, -5.494965986e-02f, -5.494301247e-02f, -5.493627120e-02f, -5.492943606e-02f, -5.492250708e-02f, -5.491548429e-02f, -5.490836770e-02f, -5.490115736e-02f, -5.489385329e-02f,
+-5.488645551e-02f, -5.487896405e-02f, -5.487137894e-02f, -5.486370020e-02f, -5.485592787e-02f, -5.484806198e-02f, -5.484010254e-02f, -5.483204959e-02f, -5.482390316e-02f, -5.481566327e-02f,
+-5.480732995e-02f, -5.479890324e-02f, -5.479038316e-02f, -5.478176974e-02f, -5.477306301e-02f, -5.476426300e-02f, -5.475536974e-02f, -5.474638326e-02f, -5.473730359e-02f, -5.472813075e-02f,
+-5.471886479e-02f, -5.470950572e-02f, -5.470005359e-02f, -5.469050841e-02f, -5.468087023e-02f, -5.467113907e-02f, -5.466131496e-02f, -5.465139794e-02f, -5.464138803e-02f, -5.463128527e-02f,
+-5.462108969e-02f, -5.461080133e-02f, -5.460042020e-02f, -5.458994636e-02f, -5.457937982e-02f, -5.456872062e-02f, -5.455796880e-02f, -5.454712438e-02f, -5.453618740e-02f, -5.452515789e-02f,
+-5.451403589e-02f, -5.450282143e-02f, -5.449151454e-02f, -5.448011526e-02f, -5.446862362e-02f, -5.445703965e-02f, -5.444536340e-02f, -5.443359488e-02f, -5.442173414e-02f, -5.440978122e-02f,
+-5.439773614e-02f, -5.438559894e-02f, -5.437336966e-02f, -5.436104834e-02f, -5.434863500e-02f, -5.433612968e-02f, -5.432353243e-02f, -5.431084327e-02f, -5.429806224e-02f, -5.428518937e-02f,
+-5.427222471e-02f, -5.425916829e-02f, -5.424602015e-02f, -5.423278032e-02f, -5.421944884e-02f, -5.420602575e-02f, -5.419251108e-02f, -5.417890488e-02f, -5.416520717e-02f, -5.415141801e-02f,
+-5.413753741e-02f, -5.412356543e-02f, -5.410950210e-02f, -5.409534746e-02f, -5.408110155e-02f, -5.406676441e-02f, -5.405233607e-02f, -5.403781657e-02f, -5.402320596e-02f, -5.400850427e-02f,
+-5.399371154e-02f, -5.397882782e-02f, -5.396385313e-02f, -5.394878752e-02f, -5.393363104e-02f, -5.391838371e-02f, -5.390304559e-02f, -5.388761671e-02f, -5.387209710e-02f, -5.385648683e-02f,
+-5.384078591e-02f, -5.382499440e-02f, -5.380911233e-02f, -5.379313975e-02f, -5.377707670e-02f, -5.376092322e-02f, -5.374467934e-02f, -5.372834513e-02f, -5.371192060e-02f, -5.369540582e-02f,
+-5.367880081e-02f, -5.366210562e-02f, -5.364532030e-02f, -5.362844489e-02f, -5.361147943e-02f, -5.359442396e-02f, -5.357727852e-02f, -5.356004317e-02f, -5.354271794e-02f, -5.352530287e-02f,
+-5.350779802e-02f, -5.349020342e-02f, -5.347251912e-02f, -5.345474516e-02f, -5.343688159e-02f, -5.341892845e-02f, -5.340088579e-02f, -5.338275365e-02f, -5.336453207e-02f, -5.334622111e-02f,
+-5.332782080e-02f, -5.330933119e-02f, -5.329075233e-02f, -5.327208426e-02f, -5.325332703e-02f, -5.323448069e-02f, -5.321554528e-02f, -5.319652084e-02f, -5.317740743e-02f, -5.315820508e-02f,
+-5.313891385e-02f, -5.311953379e-02f, -5.310006494e-02f, -5.308050734e-02f, -5.306086105e-02f, -5.304112611e-02f, -5.302130257e-02f, -5.300139048e-02f, -5.298138988e-02f, -5.296130082e-02f,
+-5.294112336e-02f, -5.292085753e-02f, -5.290050340e-02f, -5.288006100e-02f, -5.285953038e-02f, -5.283891160e-02f, -5.281820470e-02f, -5.279740974e-02f, -5.277652675e-02f, -5.275555580e-02f,
+-5.273449692e-02f, -5.271335018e-02f, -5.269211561e-02f, -5.267079328e-02f, -5.264938322e-02f, -5.262788550e-02f, -5.260630015e-02f, -5.258462724e-02f, -5.256286681e-02f, -5.254101891e-02f,
+-5.251908359e-02f, -5.249706091e-02f, -5.247495092e-02f, -5.245275366e-02f, -5.243046919e-02f, -5.240809756e-02f, -5.238563882e-02f, -5.236309303e-02f, -5.234046023e-02f, -5.231774049e-02f,
+-5.229493384e-02f, -5.227204034e-02f, -5.224906006e-02f, -5.222599303e-02f, -5.220283931e-02f, -5.217959896e-02f, -5.215627202e-02f, -5.213285856e-02f, -5.210935862e-02f, -5.208577226e-02f,
+-5.206209954e-02f, -5.203834049e-02f, -5.201449519e-02f, -5.199056369e-02f, -5.196654603e-02f, -5.194244228e-02f, -5.191825248e-02f, -5.189397669e-02f, -5.186961498e-02f, -5.184516738e-02f,
+-5.182063397e-02f, -5.179601478e-02f, -5.177130989e-02f, -5.174651934e-02f, -5.172164319e-02f, -5.169668149e-02f, -5.167163431e-02f, -5.164650169e-02f, -5.162128370e-02f, -5.159598038e-02f,
+-5.157059181e-02f, -5.154511802e-02f, -5.151955909e-02f, -5.149391507e-02f, -5.146818600e-02f, -5.144237196e-02f, -5.141647300e-02f, -5.139048918e-02f, -5.136442055e-02f, -5.133826717e-02f,
+-5.131202910e-02f, -5.128570640e-02f, -5.125929912e-02f, -5.123280733e-02f, -5.120623108e-02f, -5.117957043e-02f, -5.115282544e-02f, -5.112599618e-02f, -5.109908268e-02f, -5.107208503e-02f,
+-5.104500327e-02f, -5.101783746e-02f, -5.099058767e-02f, -5.096325396e-02f, -5.093583638e-02f, -5.090833499e-02f, -5.088074986e-02f, -5.085308104e-02f, -5.082532860e-02f, -5.079749259e-02f,
+-5.076957308e-02f, -5.074157012e-02f, -5.071348379e-02f, -5.068531413e-02f, -5.065706121e-02f, -5.062872509e-02f, -5.060030583e-02f, -5.057180350e-02f, -5.054321815e-02f, -5.051454985e-02f,
+-5.048579865e-02f, -5.045696463e-02f, -5.042804784e-02f, -5.039904835e-02f, -5.036996621e-02f, -5.034080150e-02f, -5.031155427e-02f, -5.028222458e-02f, -5.025281251e-02f, -5.022331810e-02f,
+-5.019374143e-02f, -5.016408256e-02f, -5.013434155e-02f, -5.010451847e-02f, -5.007461338e-02f, -5.004462634e-02f, -5.001455742e-02f, -4.998440668e-02f, -4.995417418e-02f, -4.992386000e-02f,
+-4.989346419e-02f, -4.986298682e-02f, -4.983242795e-02f, -4.980178765e-02f, -4.977106599e-02f, -4.974026302e-02f, -4.970937882e-02f, -4.967841346e-02f, -4.964736698e-02f, -4.961623947e-02f,
+-4.958503098e-02f, -4.955374159e-02f, -4.952237136e-02f, -4.949092035e-02f, -4.945938863e-02f, -4.942777628e-02f, -4.939608334e-02f, -4.936430990e-02f, -4.933245602e-02f, -4.930052176e-02f,
+-4.926850719e-02f, -4.923641238e-02f, -4.920423740e-02f, -4.917198232e-02f, -4.913964719e-02f, -4.910723210e-02f, -4.907473710e-02f, -4.904216227e-02f, -4.900950767e-02f, -4.897677338e-02f,
+-4.894395945e-02f, -4.891106596e-02f, -4.887809298e-02f, -4.884504058e-02f, -4.881190882e-02f, -4.877869777e-02f, -4.874540751e-02f, -4.871203810e-02f, -4.867858961e-02f, -4.864506211e-02f,
+-4.861145568e-02f, -4.857777037e-02f, -4.854400626e-02f, -4.851016343e-02f, -4.847624193e-02f, -4.844224184e-02f, -4.840816324e-02f, -4.837400618e-02f, -4.833977075e-02f, -4.830545701e-02f,
+-4.827106504e-02f, -4.823659489e-02f, -4.820204666e-02f, -4.816742040e-02f, -4.813271619e-02f, -4.809793409e-02f, -4.806307419e-02f, -4.802813655e-02f, -4.799312125e-02f, -4.795802835e-02f,
+-4.792285793e-02f, -4.788761006e-02f, -4.785228482e-02f, -4.781688227e-02f, -4.778140249e-02f, -4.774584555e-02f, -4.771021152e-02f, -4.767450048e-02f, -4.763871249e-02f, -4.760284764e-02f,
+-4.756690600e-02f, -4.753088764e-02f, -4.749479262e-02f, -4.745862104e-02f, -4.742237295e-02f, -4.738604844e-02f, -4.734964758e-02f, -4.731317043e-02f, -4.727661709e-02f, -4.723998761e-02f,
+-4.720328208e-02f, -4.716650057e-02f, -4.712964315e-02f, -4.709270991e-02f, -4.705570090e-02f, -4.701861622e-02f, -4.698145593e-02f, -4.694422011e-02f, -4.690690883e-02f, -4.686952218e-02f,
+-4.683206022e-02f, -4.679452303e-02f, -4.675691070e-02f, -4.671922328e-02f, -4.668146086e-02f, -4.664362353e-02f, -4.660571134e-02f, -4.656772438e-02f, -4.652966273e-02f, -4.649152646e-02f,
+-4.645331565e-02f, -4.641503037e-02f, -4.637667071e-02f, -4.633823673e-02f, -4.629972853e-02f, -4.626114617e-02f, -4.622248973e-02f, -4.618375929e-02f, -4.614495493e-02f, -4.610607672e-02f,
+-4.606712475e-02f, -4.602809909e-02f, -4.598899982e-02f, -4.594982701e-02f, -4.591058075e-02f, -4.587126112e-02f, -4.583186819e-02f, -4.579240204e-02f, -4.575286276e-02f, -4.571325041e-02f,
+-4.567356508e-02f, -4.563380685e-02f, -4.559397580e-02f, -4.555407201e-02f, -4.551409555e-02f, -4.547404651e-02f, -4.543392496e-02f, -4.539373099e-02f, -4.535346468e-02f, -4.531312610e-02f,
+-4.527271534e-02f, -4.523223247e-02f, -4.519167759e-02f, -4.515105075e-02f, -4.511035206e-02f, -4.506958159e-02f, -4.502873941e-02f, -4.498782562e-02f, -4.494684029e-02f, -4.490578350e-02f,
+-4.486465533e-02f, -4.482345587e-02f, -4.478218520e-02f, -4.474084340e-02f, -4.469943055e-02f, -4.465794673e-02f, -4.461639202e-02f, -4.457476651e-02f, -4.453307028e-02f, -4.449130341e-02f,
+-4.444946599e-02f, -4.440755809e-02f, -4.436557980e-02f, -4.432353120e-02f, -4.428141237e-02f, -4.423922340e-02f, -4.419696437e-02f, -4.415463537e-02f, -4.411223647e-02f, -4.406976776e-02f,
+-4.402722932e-02f, -4.398462124e-02f, -4.394194360e-02f, -4.389919649e-02f, -4.385637998e-02f, -4.381349417e-02f, -4.377053913e-02f, -4.372751496e-02f, -4.368442172e-02f, -4.364125952e-02f,
+-4.359802843e-02f, -4.355472854e-02f, -4.351135994e-02f, -4.346792270e-02f, -4.342441691e-02f, -4.338084267e-02f, -4.333720004e-02f, -4.329348913e-02f, -4.324971001e-02f, -4.320586276e-02f,
+-4.316194749e-02f, -4.311796426e-02f, -4.307391317e-02f, -4.302979430e-02f, -4.298560774e-02f, -4.294135358e-02f, -4.289703189e-02f, -4.285264277e-02f, -4.280818631e-02f, -4.276366258e-02f,
+-4.271907168e-02f, -4.267441370e-02f, -4.262968871e-02f, -4.258489681e-02f, -4.254003809e-02f, -4.249511262e-02f, -4.245012051e-02f, -4.240506183e-02f, -4.235993667e-02f, -4.231474512e-02f,
+-4.226948727e-02f, -4.222416321e-02f, -4.217877301e-02f, -4.213331678e-02f, -4.208779460e-02f, -4.204220656e-02f, -4.199655274e-02f, -4.195083324e-02f, -4.190504814e-02f, -4.185919753e-02f,
+-4.181328150e-02f, -4.176730013e-02f, -4.172125353e-02f, -4.167514177e-02f, -4.162896494e-02f, -4.158272314e-02f, -4.153641645e-02f, -4.149004496e-02f, -4.144360877e-02f, -4.139710796e-02f,
+-4.135054261e-02f, -4.130391283e-02f, -4.125721870e-02f, -4.121046031e-02f, -4.116363775e-02f, -4.111675111e-02f, -4.106980048e-02f, -4.102278594e-02f, -4.097570761e-02f, -4.092856555e-02f,
+-4.088135986e-02f, -4.083409064e-02f, -4.078675797e-02f, -4.073936194e-02f, -4.069190265e-02f, -4.064438018e-02f, -4.059679464e-02f, -4.054914609e-02f, -4.050143465e-02f, -4.045366040e-02f,
+-4.040582344e-02f, -4.035792384e-02f, -4.030996172e-02f, -4.026193715e-02f, -4.021385023e-02f, -4.016570105e-02f, -4.011748970e-02f, -4.006921628e-02f, -4.002088088e-02f, -3.997248359e-02f,
+-3.992402449e-02f, -3.987550370e-02f, -3.982692129e-02f, -3.977827736e-02f, -3.972957201e-02f, -3.968080532e-02f, -3.963197739e-02f, -3.958308831e-02f, -3.953413817e-02f, -3.948512708e-02f,
+-3.943605511e-02f, -3.938692237e-02f, -3.933772895e-02f, -3.928847494e-02f, -3.923916044e-02f, -3.918978553e-02f, -3.914035032e-02f, -3.909085490e-02f, -3.904129936e-02f, -3.899168379e-02f,
+-3.894200829e-02f, -3.889227296e-02f, -3.884247788e-02f, -3.879262316e-02f, -3.874270888e-02f, -3.869273515e-02f, -3.864270205e-02f, -3.859260968e-02f, -3.854245815e-02f, -3.849224753e-02f,
+-3.844197792e-02f, -3.839164943e-02f, -3.834126215e-02f, -3.829081617e-02f, -3.824031159e-02f, -3.818974850e-02f, -3.813912699e-02f, -3.808844718e-02f, -3.803770914e-02f, -3.798691298e-02f,
+-3.793605879e-02f, -3.788514667e-02f, -3.783417671e-02f, -3.778314902e-02f, -3.773206368e-02f, -3.768092079e-02f, -3.762972045e-02f, -3.757846276e-02f, -3.752714781e-02f, -3.747577570e-02f,
+-3.742434653e-02f, -3.737286038e-02f, -3.732131737e-02f, -3.726971759e-02f, -3.721806113e-02f, -3.716634809e-02f, -3.711457857e-02f, -3.706275266e-02f, -3.701087047e-02f, -3.695893209e-02f,
+-3.690693762e-02f, -3.685488715e-02f, -3.680278079e-02f, -3.675061863e-02f, -3.669840077e-02f, -3.664612730e-02f, -3.659379834e-02f, -3.654141396e-02f, -3.648897428e-02f, -3.643647939e-02f,
+-3.638392938e-02f, -3.633132437e-02f, -3.627866444e-02f, -3.622594969e-02f, -3.617318023e-02f, -3.612035615e-02f, -3.606747755e-02f, -3.601454453e-02f, -3.596155719e-02f, -3.590851563e-02f,
+-3.585541995e-02f, -3.580227024e-02f, -3.574906660e-02f, -3.569580915e-02f, -3.564249796e-02f, -3.558913316e-02f, -3.553571482e-02f, -3.548224306e-02f, -3.542871797e-02f, -3.537513966e-02f,
+-3.532150822e-02f, -3.526782375e-02f, -3.521408636e-02f, -3.516029614e-02f, -3.510645320e-02f, -3.505255763e-02f, -3.499860953e-02f, -3.494460901e-02f, -3.489055616e-02f, -3.483645110e-02f,
+-3.478229390e-02f, -3.472808469e-02f, -3.467382356e-02f, -3.461951060e-02f, -3.456514593e-02f, -3.451072963e-02f, -3.445626183e-02f, -3.440174260e-02f, -3.434717206e-02f, -3.429255031e-02f,
+-3.423787744e-02f, -3.418315357e-02f, -3.412837879e-02f, -3.407355320e-02f, -3.401867690e-02f, -3.396375000e-02f, -3.390877260e-02f, -3.385374480e-02f, -3.379866671e-02f, -3.374353841e-02f,
+-3.368836003e-02f, -3.363313165e-02f, -3.357785339e-02f, -3.352252534e-02f, -3.346714760e-02f, -3.341172028e-02f, -3.335624349e-02f, -3.330071731e-02f, -3.324514187e-02f, -3.318951725e-02f,
+-3.313384357e-02f, -3.307812092e-02f, -3.302234941e-02f, -3.296652914e-02f, -3.291066021e-02f, -3.285474273e-02f, -3.279877681e-02f, -3.274276253e-02f, -3.268670002e-02f, -3.263058936e-02f,
+-3.257443067e-02f, -3.251822405e-02f, -3.246196960e-02f, -3.240566742e-02f, -3.234931763e-02f, -3.229292031e-02f, -3.223647559e-02f, -3.217998355e-02f, -3.212344431e-02f, -3.206685797e-02f,
+-3.201022464e-02f, -3.195354441e-02f, -3.189681739e-02f, -3.184004369e-02f, -3.178322341e-02f, -3.172635665e-02f, -3.166944353e-02f, -3.161248414e-02f, -3.155547859e-02f, -3.149842698e-02f,
+-3.144132942e-02f, -3.138418602e-02f, -3.132699687e-02f, -3.126976209e-02f, -3.121248178e-02f, -3.115515604e-02f, -3.109778498e-02f, -3.104036870e-02f, -3.098290731e-02f, -3.092540092e-02f,
+-3.086784963e-02f, -3.081025355e-02f, -3.075261278e-02f, -3.069492742e-02f, -3.063719759e-02f, -3.057942338e-02f, -3.052160492e-02f, -3.046374229e-02f, -3.040583561e-02f, -3.034788498e-02f,
+-3.028989050e-02f, -3.023185230e-02f, -3.017377046e-02f, -3.011564510e-02f, -3.005747633e-02f, -2.999926424e-02f, -2.994100895e-02f, -2.988271056e-02f, -2.982436919e-02f, -2.976598492e-02f,
+-2.970755788e-02f, -2.964908817e-02f, -2.959057589e-02f, -2.953202116e-02f, -2.947342408e-02f, -2.941478475e-02f, -2.935610328e-02f, -2.929737979e-02f, -2.923861437e-02f, -2.917980714e-02f,
+-2.912095820e-02f, -2.906206766e-02f, -2.900313562e-02f, -2.894416220e-02f, -2.888514750e-02f, -2.882609163e-02f, -2.876699469e-02f, -2.870785680e-02f, -2.864867806e-02f, -2.858945858e-02f,
+-2.853019846e-02f, -2.847089782e-02f, -2.841155676e-02f, -2.835217540e-02f, -2.829275383e-02f, -2.823329216e-02f, -2.817379051e-02f, -2.811424899e-02f, -2.805466769e-02f, -2.799504674e-02f,
+-2.793538623e-02f, -2.787568627e-02f, -2.781594698e-02f, -2.775616847e-02f, -2.769635083e-02f, -2.763649418e-02f, -2.757659863e-02f, -2.751666429e-02f, -2.745669126e-02f, -2.739667966e-02f,
+-2.733662959e-02f, -2.727654116e-02f, -2.721641448e-02f, -2.715624966e-02f, -2.709604681e-02f, -2.703580603e-02f, -2.697552745e-02f, -2.691521116e-02f, -2.685485727e-02f, -2.679446590e-02f,
+-2.673403715e-02f, -2.667357113e-02f, -2.661306795e-02f, -2.655252773e-02f, -2.649195057e-02f, -2.643133658e-02f, -2.637068586e-02f, -2.630999854e-02f, -2.624927472e-02f, -2.618851450e-02f,
+-2.612771801e-02f, -2.606688534e-02f, -2.600601661e-02f, -2.594511193e-02f, -2.588417141e-02f, -2.582319515e-02f, -2.576218327e-02f, -2.570113588e-02f, -2.564005309e-02f, -2.557893501e-02f,
+-2.551778175e-02f, -2.545659341e-02f, -2.539537011e-02f, -2.533411197e-02f, -2.527281908e-02f, -2.521149156e-02f, -2.515012953e-02f, -2.508873308e-02f, -2.502730234e-02f, -2.496583740e-02f,
+-2.490433840e-02f, -2.484280542e-02f, -2.478123859e-02f, -2.471963801e-02f, -2.465800380e-02f, -2.459633607e-02f, -2.453463492e-02f, -2.447290047e-02f, -2.441113283e-02f, -2.434933211e-02f,
+-2.428749843e-02f, -2.422563188e-02f, -2.416373259e-02f, -2.410180066e-02f, -2.403983621e-02f, -2.397783935e-02f, -2.391581018e-02f, -2.385374883e-02f, -2.379165539e-02f, -2.372952999e-02f,
+-2.366737273e-02f, -2.360518373e-02f, -2.354296309e-02f, -2.348071093e-02f, -2.341842736e-02f, -2.335611249e-02f, -2.329376644e-02f, -2.323138931e-02f, -2.316898122e-02f, -2.310654227e-02f,
+-2.304407259e-02f, -2.298157228e-02f, -2.291904145e-02f, -2.285648021e-02f, -2.279388869e-02f, -2.273126698e-02f, -2.266861521e-02f, -2.260593348e-02f, -2.254322190e-02f, -2.248048060e-02f,
+-2.241770967e-02f, -2.235490924e-02f, -2.229207941e-02f, -2.222922029e-02f, -2.216633201e-02f, -2.210341467e-02f, -2.204046838e-02f, -2.197749325e-02f, -2.191448941e-02f, -2.185145695e-02f,
+-2.178839600e-02f, -2.172530667e-02f, -2.166218906e-02f, -2.159904330e-02f, -2.153586949e-02f, -2.147266774e-02f, -2.140943817e-02f, -2.134618090e-02f, -2.128289603e-02f, -2.121958367e-02f,
+-2.115624395e-02f, -2.109287697e-02f, -2.102948285e-02f, -2.096606169e-02f, -2.090261361e-02f, -2.083913873e-02f, -2.077563716e-02f, -2.071210901e-02f, -2.064855439e-02f, -2.058497341e-02f,
+-2.052136620e-02f, -2.045773286e-02f, -2.039407350e-02f, -2.033038825e-02f, -2.026667720e-02f, -2.020294048e-02f, -2.013917820e-02f, -2.007539048e-02f, -2.001157741e-02f, -1.994773913e-02f,
+-1.988387574e-02f, -1.981998735e-02f, -1.975607408e-02f, -1.969213605e-02f, -1.962817336e-02f, -1.956418612e-02f, -1.950017447e-02f, -1.943613849e-02f, -1.937207832e-02f, -1.930799406e-02f,
+-1.924388583e-02f, -1.917975374e-02f, -1.911559790e-02f, -1.905141843e-02f, -1.898721545e-02f, -1.892298905e-02f, -1.885873937e-02f, -1.879446651e-02f, -1.873017059e-02f, -1.866585172e-02f,
+-1.860151001e-02f, -1.853714558e-02f, -1.847275855e-02f, -1.840834901e-02f, -1.834391710e-02f, -1.827946293e-02f, -1.821498660e-02f, -1.815048823e-02f, -1.808596794e-02f, -1.802142585e-02f,
+-1.795686205e-02f, -1.789227667e-02f, -1.782766983e-02f, -1.776304163e-02f, -1.769839219e-02f, -1.763372163e-02f, -1.756903006e-02f, -1.750431759e-02f, -1.743958434e-02f, -1.737483042e-02f,
+-1.731005594e-02f, -1.724526103e-02f, -1.718044579e-02f, -1.711561034e-02f, -1.705075479e-02f, -1.698587926e-02f, -1.692098387e-02f, -1.685606871e-02f, -1.679113392e-02f, -1.672617961e-02f,
+-1.666120588e-02f, -1.659621286e-02f, -1.653120066e-02f, -1.646616939e-02f, -1.640111917e-02f, -1.633605011e-02f, -1.627096233e-02f, -1.620585594e-02f, -1.614073105e-02f, -1.607558779e-02f,
+-1.601042626e-02f, -1.594524658e-02f, -1.588004886e-02f, -1.581483322e-02f, -1.574959978e-02f, -1.568434864e-02f, -1.561907993e-02f, -1.555379376e-02f, -1.548849023e-02f, -1.542316948e-02f,
+-1.535783160e-02f, -1.529247673e-02f, -1.522710496e-02f, -1.516171642e-02f, -1.509631122e-02f, -1.503088948e-02f, -1.496545130e-02f, -1.489999682e-02f, -1.483452613e-02f, -1.476903935e-02f,
+-1.470353661e-02f, -1.463801801e-02f, -1.457248367e-02f, -1.450693371e-02f, -1.444136823e-02f, -1.437578736e-02f, -1.431019121e-02f, -1.424457989e-02f, -1.417895352e-02f, -1.411331222e-02f,
+-1.404765609e-02f, -1.398198526e-02f, -1.391629983e-02f, -1.385059993e-02f, -1.378488567e-02f, -1.371915716e-02f, -1.365341453e-02f, -1.358765787e-02f, -1.352188731e-02f, -1.345610297e-02f,
+-1.339030496e-02f, -1.332449339e-02f, -1.325866838e-02f, -1.319283004e-02f, -1.312697849e-02f, -1.306111385e-02f, -1.299523622e-02f, -1.292934573e-02f, -1.286344249e-02f, -1.279752661e-02f,
+-1.273159821e-02f, -1.266565741e-02f, -1.259970431e-02f, -1.253373904e-02f, -1.246776172e-02f, -1.240177244e-02f, -1.233577134e-02f, -1.226975852e-02f, -1.220373410e-02f, -1.213769819e-02f,
+-1.207165092e-02f, -1.200559239e-02f, -1.193952272e-02f, -1.187344203e-02f, -1.180735043e-02f, -1.174124804e-02f, -1.167513497e-02f, -1.160901133e-02f, -1.154287725e-02f, -1.147673283e-02f,
+-1.141057819e-02f, -1.134441345e-02f, -1.127823872e-02f, -1.121205413e-02f, -1.114585977e-02f, -1.107965577e-02f, -1.101344224e-02f, -1.094721930e-02f, -1.088098707e-02f, -1.081474565e-02f,
+-1.074849516e-02f, -1.068223573e-02f, -1.061596745e-02f, -1.054969046e-02f, -1.048340486e-02f, -1.041711077e-02f, -1.035080830e-02f, -1.028449757e-02f, -1.021817870e-02f, -1.015185180e-02f,
+-1.008551698e-02f, -1.001917436e-02f, -9.952824053e-03f, -9.886466179e-03f, -9.820100849e-03f, -9.753728180e-03f, -9.687348286e-03f, -9.620961282e-03f, -9.554567284e-03f, -9.488166406e-03f,
+-9.421758764e-03f, -9.355344473e-03f, -9.288923648e-03f, -9.222496403e-03f, -9.156062854e-03f, -9.089623117e-03f, -9.023177305e-03f, -8.956725535e-03f, -8.890267920e-03f, -8.823804577e-03f,
+-8.757335620e-03f, -8.690861164e-03f, -8.624381324e-03f, -8.557896216e-03f, -8.491405954e-03f, -8.424910653e-03f, -8.358410428e-03f, -8.291905394e-03f, -8.225395666e-03f, -8.158881359e-03f,
+-8.092362589e-03f, -8.025839469e-03f, -7.959312115e-03f, -7.892780642e-03f, -7.826245165e-03f, -7.759705798e-03f, -7.693162657e-03f, -7.626615856e-03f, -7.560065510e-03f, -7.493511734e-03f,
+-7.426954643e-03f, -7.360394352e-03f, -7.293830976e-03f, -7.227264629e-03f, -7.160695426e-03f, -7.094123482e-03f, -7.027548912e-03f, -6.960971831e-03f, -6.894392353e-03f, -6.827810592e-03f,
+-6.761226665e-03f, -6.694640685e-03f, -6.628052767e-03f, -6.561463026e-03f, -6.494871577e-03f, -6.428278534e-03f, -6.361684012e-03f, -6.295088125e-03f, -6.228490989e-03f, -6.161892717e-03f,
+-6.095293424e-03f, -6.028693226e-03f, -5.962092235e-03f, -5.895490568e-03f, -5.828888339e-03f, -5.762285661e-03f, -5.695682650e-03f, -5.629079420e-03f, -5.562476086e-03f, -5.495872762e-03f,
+-5.429269562e-03f, -5.362666601e-03f, -5.296063993e-03f, -5.229461853e-03f, -5.162860294e-03f, -5.096259433e-03f, -5.029659381e-03f, -4.963060255e-03f, -4.896462168e-03f, -4.829865235e-03f,
+-4.763269570e-03f, -4.696675286e-03f, -4.630082499e-03f, -4.563491323e-03f, -4.496901871e-03f, -4.430314258e-03f, -4.363728598e-03f, -4.297145005e-03f, -4.230563594e-03f, -4.163984477e-03f,
+-4.097407771e-03f, -4.030833587e-03f, -3.964262041e-03f, -3.897693247e-03f, -3.831127318e-03f, -3.764564369e-03f, -3.698004513e-03f, -3.631447864e-03f, -3.564894537e-03f, -3.498344644e-03f,
+-3.431798301e-03f, -3.365255620e-03f, -3.298716716e-03f, -3.232181702e-03f, -3.165650692e-03f, -3.099123800e-03f, -3.032601140e-03f, -2.966082825e-03f, -2.899568969e-03f, -2.833059686e-03f,
+-2.766555088e-03f, -2.700055291e-03f, -2.633560407e-03f, -2.567070550e-03f, -2.500585833e-03f, -2.434106371e-03f, -2.367632276e-03f, -2.301163661e-03f, -2.234700641e-03f, -2.168243329e-03f,
+-2.101791838e-03f, -2.035346281e-03f, -1.968906772e-03f, -1.902473423e-03f, -1.836046350e-03f, -1.769625663e-03f, -1.703211478e-03f, -1.636803906e-03f, -1.570403062e-03f, -1.504009057e-03f,
+-1.437622006e-03f, -1.371242022e-03f, -1.304869216e-03f, -1.238503703e-03f, -1.172145596e-03f, -1.105795007e-03f, -1.039452049e-03f, -9.731168359e-04f, -9.067894795e-04f, -8.404700930e-04f,
+-7.741587893e-04f, -7.078556810e-04f, -6.415608811e-04f, -5.752745021e-04f, -5.089966568e-04f, -4.427274579e-04f, -3.764670179e-04f, -3.102154495e-04f, -2.439728652e-04f, -1.777393776e-04f,
+-1.115150991e-04f, -4.530014231e-05f, 2.090538041e-05f, 8.710135665e-05f, 1.532876740e-04f, 2.194642202e-04f, 2.856308828e-04f, 3.517875497e-04f, 4.179341085e-04f, 4.840704471e-04f,
+5.501964532e-04f, 6.163120148e-04f, 6.824170197e-04f, 7.485113558e-04f, 8.145949112e-04f, 8.806675737e-04f, 9.467292315e-04f, 1.012779773e-03f, 1.078819085e-03f, 1.144847057e-03f,
+1.210863577e-03f, 1.276868532e-03f, 1.342861812e-03f, 1.408843304e-03f, 1.474812897e-03f, 1.540770479e-03f, 1.606715938e-03f, 1.672649163e-03f, 1.738570043e-03f, 1.804478465e-03f,
+1.870374319e-03f, 1.936257492e-03f, 2.002127874e-03f, 2.067985354e-03f, 2.133829819e-03f, 2.199661159e-03f, 2.265479262e-03f, 2.331284017e-03f, 2.397075313e-03f, 2.462853039e-03f,
+2.528617084e-03f, 2.594367336e-03f, 2.660103685e-03f, 2.725826020e-03f, 2.791534230e-03f, 2.857228204e-03f, 2.922907830e-03f, 2.988572999e-03f, 3.054223600e-03f, 3.119859521e-03f,
+3.185480652e-03f, 3.251086883e-03f, 3.316678103e-03f, 3.382254200e-03f, 3.447815066e-03f, 3.513360589e-03f, 3.578890659e-03f, 3.644405165e-03f, 3.709903997e-03f, 3.775387045e-03f,
+3.840854198e-03f, 3.906305347e-03f, 3.971740381e-03f, 4.037159190e-03f, 4.102561664e-03f, 4.167947692e-03f, 4.233317165e-03f, 4.298669974e-03f, 4.364006007e-03f, 4.429325155e-03f,
+4.494627308e-03f, 4.559912357e-03f, 4.625180192e-03f, 4.690430702e-03f, 4.755663779e-03f, 4.820879313e-03f, 4.886077193e-03f, 4.951257312e-03f, 5.016419558e-03f, 5.081563824e-03f,
+5.146689999e-03f, 5.211797974e-03f, 5.276887639e-03f, 5.341958887e-03f, 5.407011606e-03f, 5.472045689e-03f, 5.537061026e-03f, 5.602057508e-03f, 5.667035026e-03f, 5.731993471e-03f,
+5.796932735e-03f, 5.861852708e-03f, 5.926753281e-03f, 5.991634346e-03f, 6.056495795e-03f, 6.121337517e-03f, 6.186159406e-03f, 6.250961352e-03f, 6.315743247e-03f, 6.380504981e-03f,
+6.445246448e-03f, 6.509967539e-03f, 6.574668144e-03f, 6.639348156e-03f, 6.704007468e-03f, 6.768645969e-03f, 6.833263554e-03f, 6.897860112e-03f, 6.962435537e-03f, 7.026989721e-03f,
+7.091522555e-03f, 7.156033931e-03f, 7.220523743e-03f, 7.284991882e-03f, 7.349438240e-03f, 7.413862710e-03f, 7.478265184e-03f, 7.542645554e-03f, 7.607003714e-03f, 7.671339556e-03f,
+7.735652972e-03f, 7.799943855e-03f, 7.864212098e-03f, 7.928457594e-03f, 7.992680234e-03f, 8.056879913e-03f, 8.121056524e-03f, 8.185209958e-03f, 8.249340110e-03f, 8.313446872e-03f,
+8.377530138e-03f, 8.441589801e-03f, 8.505625753e-03f, 8.569637889e-03f, 8.633626102e-03f, 8.697590285e-03f, 8.761530332e-03f, 8.825446136e-03f, 8.889337591e-03f, 8.953204590e-03f,
+9.017047028e-03f, 9.080864798e-03f, 9.144657793e-03f, 9.208425909e-03f, 9.272169038e-03f, 9.335887075e-03f, 9.399579914e-03f, 9.463247448e-03f, 9.526889573e-03f, 9.590506182e-03f,
+9.654097170e-03f, 9.717662432e-03f, 9.781201860e-03f, 9.844715351e-03f, 9.908202798e-03f, 9.971664096e-03f, 1.003509914e-02f, 1.009850782e-02f, 1.016189004e-02f, 1.022524569e-02f,
+1.028857467e-02f, 1.035187686e-02f, 1.041515217e-02f, 1.047840049e-02f, 1.054162172e-02f, 1.060481574e-02f, 1.066798246e-02f, 1.073112177e-02f, 1.079423357e-02f, 1.085731775e-02f,
+1.092037421e-02f, 1.098340284e-02f, 1.104640354e-02f, 1.110937620e-02f, 1.117232073e-02f, 1.123523700e-02f, 1.129812494e-02f, 1.136098441e-02f, 1.142381534e-02f, 1.148661760e-02f,
+1.154939110e-02f, 1.161213573e-02f, 1.167485138e-02f, 1.173753797e-02f, 1.180019537e-02f, 1.186282349e-02f, 1.192542223e-02f, 1.198799147e-02f, 1.205053113e-02f, 1.211304108e-02f,
+1.217552124e-02f, 1.223797150e-02f, 1.230039175e-02f, 1.236278189e-02f, 1.242514182e-02f, 1.248747144e-02f, 1.254977064e-02f, 1.261203932e-02f, 1.267427738e-02f, 1.273648471e-02f,
+1.279866121e-02f, 1.286080679e-02f, 1.292292133e-02f, 1.298500474e-02f, 1.304705691e-02f, 1.310907774e-02f, 1.317106712e-02f, 1.323302497e-02f, 1.329495117e-02f, 1.335684562e-02f,
+1.341870822e-02f, 1.348053887e-02f, 1.354233747e-02f, 1.360410391e-02f, 1.366583810e-02f, 1.372753993e-02f, 1.378920930e-02f, 1.385084611e-02f, 1.391245026e-02f, 1.397402164e-02f,
+1.403556016e-02f, 1.409706572e-02f, 1.415853820e-02f, 1.421997752e-02f, 1.428138358e-02f, 1.434275626e-02f, 1.440409547e-02f, 1.446540111e-02f, 1.452667308e-02f, 1.458791128e-02f,
+1.464911561e-02f, 1.471028596e-02f, 1.477142225e-02f, 1.483252435e-02f, 1.489359219e-02f, 1.495462565e-02f, 1.501562464e-02f, 1.507658905e-02f, 1.513751879e-02f, 1.519841376e-02f,
+1.525927385e-02f, 1.532009898e-02f, 1.538088903e-02f, 1.544164390e-02f, 1.550236351e-02f, 1.556304775e-02f, 1.562369651e-02f, 1.568430971e-02f, 1.574488724e-02f, 1.580542900e-02f,
+1.586593490e-02f, 1.592640483e-02f, 1.598683870e-02f, 1.604723640e-02f, 1.610759784e-02f, 1.616792293e-02f, 1.622821155e-02f, 1.628846362e-02f, 1.634867903e-02f, 1.640885769e-02f,
+1.646899949e-02f, 1.652910435e-02f, 1.658917216e-02f, 1.664920282e-02f, 1.670919624e-02f, 1.676915231e-02f, 1.682907095e-02f, 1.688895204e-02f, 1.694879551e-02f, 1.700860124e-02f,
+1.706836914e-02f, 1.712809911e-02f, 1.718779106e-02f, 1.724744488e-02f, 1.730706049e-02f, 1.736663778e-02f, 1.742617666e-02f, 1.748567702e-02f, 1.754513878e-02f, 1.760456184e-02f,
+1.766394610e-02f, 1.772329145e-02f, 1.778259782e-02f, 1.784186510e-02f, 1.790109318e-02f, 1.796028199e-02f, 1.801943142e-02f, 1.807854137e-02f, 1.813761176e-02f, 1.819664247e-02f,
+1.825563343e-02f, 1.831458452e-02f, 1.837349566e-02f, 1.843236675e-02f, 1.849119770e-02f, 1.854998840e-02f, 1.860873877e-02f, 1.866744871e-02f, 1.872611812e-02f, 1.878474691e-02f,
+1.884333498e-02f, 1.890188224e-02f, 1.896038860e-02f, 1.901885395e-02f, 1.907727821e-02f, 1.913566127e-02f, 1.919400305e-02f, 1.925230345e-02f, 1.931056238e-02f, 1.936877974e-02f,
+1.942695543e-02f, 1.948508937e-02f, 1.954318146e-02f, 1.960123160e-02f, 1.965923971e-02f, 1.971720568e-02f, 1.977512943e-02f, 1.983301086e-02f, 1.989084987e-02f, 1.994864638e-02f,
+2.000640028e-02f, 2.006411150e-02f, 2.012177992e-02f, 2.017940547e-02f, 2.023698805e-02f, 2.029452756e-02f, 2.035202391e-02f, 2.040947701e-02f, 2.046688677e-02f, 2.052425309e-02f,
+2.058157588e-02f, 2.063885505e-02f, 2.069609050e-02f, 2.075328215e-02f, 2.081042991e-02f, 2.086753367e-02f, 2.092459335e-02f, 2.098160886e-02f, 2.103858010e-02f, 2.109550699e-02f,
+2.115238942e-02f, 2.120922732e-02f, 2.126602058e-02f, 2.132276912e-02f, 2.137947285e-02f, 2.143613167e-02f, 2.149274549e-02f, 2.154931423e-02f, 2.160583778e-02f, 2.166231607e-02f,
+2.171874900e-02f, 2.177513648e-02f, 2.183147841e-02f, 2.188777472e-02f, 2.194402530e-02f, 2.200023007e-02f, 2.205638894e-02f, 2.211250181e-02f, 2.216856861e-02f, 2.222458923e-02f,
+2.228056359e-02f, 2.233649159e-02f, 2.239237316e-02f, 2.244820819e-02f, 2.250399660e-02f, 2.255973831e-02f, 2.261543321e-02f, 2.267108122e-02f, 2.272668226e-02f, 2.278223623e-02f,
+2.283774305e-02f, 2.289320262e-02f, 2.294861486e-02f, 2.300397968e-02f, 2.305929699e-02f, 2.311456670e-02f, 2.316978872e-02f, 2.322496297e-02f, 2.328008936e-02f, 2.333516779e-02f,
+2.339019819e-02f, 2.344518046e-02f, 2.350011451e-02f, 2.355500027e-02f, 2.360983763e-02f, 2.366462651e-02f, 2.371936684e-02f, 2.377405850e-02f, 2.382870143e-02f, 2.388329554e-02f,
+2.393784073e-02f, 2.399233692e-02f, 2.404678402e-02f, 2.410118195e-02f, 2.415553062e-02f, 2.420982994e-02f, 2.426407983e-02f, 2.431828020e-02f, 2.437243097e-02f, 2.442653204e-02f,
+2.448058333e-02f, 2.453458476e-02f, 2.458853625e-02f, 2.464243769e-02f, 2.469628902e-02f, 2.475009013e-02f, 2.480384096e-02f, 2.485754141e-02f, 2.491119139e-02f, 2.496479083e-02f,
+2.501833964e-02f, 2.507183773e-02f, 2.512528501e-02f, 2.517868141e-02f, 2.523202683e-02f, 2.528532120e-02f, 2.533856443e-02f, 2.539175643e-02f, 2.544489712e-02f, 2.549798642e-02f,
+2.555102424e-02f, 2.560401050e-02f, 2.565694511e-02f, 2.570982799e-02f, 2.576265906e-02f, 2.581543824e-02f, 2.586816543e-02f, 2.592084056e-02f, 2.597346354e-02f, 2.602603429e-02f,
+2.607855273e-02f, 2.613101877e-02f, 2.618343233e-02f, 2.623579334e-02f, 2.628810169e-02f, 2.634035732e-02f, 2.639256014e-02f, 2.644471007e-02f, 2.649680703e-02f, 2.654885093e-02f,
+2.660084169e-02f, 2.665277923e-02f, 2.670466347e-02f, 2.675649432e-02f, 2.680827171e-02f, 2.685999555e-02f, 2.691166577e-02f, 2.696328227e-02f, 2.701484498e-02f, 2.706635383e-02f,
+2.711780871e-02f, 2.716920957e-02f, 2.722055631e-02f, 2.727184885e-02f, 2.732308712e-02f, 2.737427103e-02f, 2.742540050e-02f, 2.747647546e-02f, 2.752749582e-02f, 2.757846150e-02f,
+2.762937243e-02f, 2.768022851e-02f, 2.773102968e-02f, 2.778177585e-02f, 2.783246695e-02f, 2.788310289e-02f, 2.793368360e-02f, 2.798420899e-02f, 2.803467898e-02f, 2.808509351e-02f,
+2.813545248e-02f, 2.818575582e-02f, 2.823600346e-02f, 2.828619530e-02f, 2.833633128e-02f, 2.838641132e-02f, 2.843643533e-02f, 2.848640324e-02f, 2.853631497e-02f, 2.858617045e-02f,
+2.863596959e-02f, 2.868571231e-02f, 2.873539855e-02f, 2.878502822e-02f, 2.883460124e-02f, 2.888411754e-02f, 2.893357704e-02f, 2.898297966e-02f, 2.903232533e-02f, 2.908161397e-02f,
+2.913084550e-02f, 2.918001985e-02f, 2.922913693e-02f, 2.927819668e-02f, 2.932719902e-02f, 2.937614386e-02f, 2.942503114e-02f, 2.947386078e-02f, 2.952263269e-02f, 2.957134682e-02f,
+2.962000307e-02f, 2.966860138e-02f, 2.971714167e-02f, 2.976562386e-02f, 2.981404788e-02f, 2.986241366e-02f, 2.991072111e-02f, 2.995897017e-02f, 3.000716076e-02f, 3.005529280e-02f,
+3.010336621e-02f, 3.015138094e-02f, 3.019933689e-02f, 3.024723401e-02f, 3.029507220e-02f, 3.034285140e-02f, 3.039057154e-02f, 3.043823253e-02f, 3.048583432e-02f, 3.053337681e-02f,
+3.058085995e-02f, 3.062828365e-02f, 3.067564784e-02f, 3.072295246e-02f, 3.077019742e-02f, 3.081738266e-02f, 3.086450809e-02f, 3.091157366e-02f, 3.095857928e-02f, 3.100552488e-02f,
+3.105241040e-02f, 3.109923575e-02f, 3.114600087e-02f, 3.119270568e-02f, 3.123935012e-02f, 3.128593411e-02f, 3.133245757e-02f, 3.137892045e-02f, 3.142532266e-02f, 3.147166413e-02f,
+3.151794480e-02f, 3.156416459e-02f, 3.161032343e-02f, 3.165642126e-02f, 3.170245799e-02f, 3.174843356e-02f, 3.179434790e-02f, 3.184020093e-02f, 3.188599260e-02f, 3.193172282e-02f,
+3.197739153e-02f, 3.202299866e-02f, 3.206854413e-02f, 3.211402789e-02f, 3.215944985e-02f, 3.220480995e-02f, 3.225010812e-02f, 3.229534429e-02f, 3.234051839e-02f, 3.238563035e-02f,
+3.243068010e-02f, 3.247566758e-02f, 3.252059271e-02f, 3.256545543e-02f, 3.261025567e-02f, 3.265499336e-02f, 3.269966843e-02f, 3.274428082e-02f, 3.278883044e-02f, 3.283331725e-02f,
+3.287774117e-02f, 3.292210213e-02f, 3.296640006e-02f, 3.301063490e-02f, 3.305480658e-02f, 3.309891504e-02f, 3.314296019e-02f, 3.318694199e-02f, 3.323086036e-02f, 3.327471524e-02f,
+3.331850655e-02f, 3.336223424e-02f, 3.340589823e-02f, 3.344949846e-02f, 3.349303486e-02f, 3.353650737e-02f, 3.357991593e-02f, 3.362326046e-02f, 3.366654089e-02f, 3.370975718e-02f,
+3.375290924e-02f, 3.379599701e-02f, 3.383902044e-02f, 3.388197945e-02f, 3.392487397e-02f, 3.396770395e-02f, 3.401046932e-02f, 3.405317002e-02f, 3.409580597e-02f, 3.413837712e-02f,
+3.418088340e-02f, 3.422332475e-02f, 3.426570110e-02f, 3.430801239e-02f, 3.435025856e-02f, 3.439243954e-02f, 3.443455527e-02f, 3.447660568e-02f, 3.451859071e-02f, 3.456051031e-02f,
+3.460236440e-02f, 3.464415292e-02f, 3.468587581e-02f, 3.472753301e-02f, 3.476912446e-02f, 3.481065009e-02f, 3.485210983e-02f, 3.489350364e-02f, 3.493483144e-02f, 3.497609318e-02f,
+3.501728878e-02f, 3.505841820e-02f, 3.509948137e-02f, 3.514047823e-02f, 3.518140871e-02f, 3.522227275e-02f, 3.526307030e-02f, 3.530380130e-02f, 3.534446567e-02f, 3.538506337e-02f,
+3.542559433e-02f, 3.546605848e-02f, 3.550645578e-02f, 3.554678616e-02f, 3.558704956e-02f, 3.562724592e-02f, 3.566737517e-02f, 3.570743727e-02f, 3.574743215e-02f, 3.578735975e-02f,
+3.582722001e-02f, 3.586701287e-02f, 3.590673828e-02f, 3.594639617e-02f, 3.598598648e-02f, 3.602550916e-02f, 3.606496415e-02f, 3.610435140e-02f, 3.614367083e-02f, 3.618292239e-02f,
+3.622210603e-02f, 3.626122169e-02f, 3.630026930e-02f, 3.633924882e-02f, 3.637816018e-02f, 3.641700332e-02f, 3.645577820e-02f, 3.649448474e-02f, 3.653312291e-02f, 3.657169262e-02f,
+3.661019384e-02f, 3.664862650e-02f, 3.668699055e-02f, 3.672528593e-02f, 3.676351258e-02f, 3.680167046e-02f, 3.683975949e-02f, 3.687777963e-02f, 3.691573082e-02f, 3.695361300e-02f,
+3.699142612e-02f, 3.702917013e-02f, 3.706684496e-02f, 3.710445056e-02f, 3.714198688e-02f, 3.717945387e-02f, 3.721685146e-02f, 3.725417960e-02f, 3.729143825e-02f, 3.732862733e-02f,
+3.736574681e-02f, 3.740279662e-02f, 3.743977671e-02f, 3.747668702e-02f, 3.751352751e-02f, 3.755029812e-02f, 3.758699880e-02f, 3.762362948e-02f, 3.766019013e-02f, 3.769668068e-02f,
+3.773310109e-02f, 3.776945129e-02f, 3.780573124e-02f, 3.784194088e-02f, 3.787808017e-02f, 3.791414904e-02f, 3.795014745e-02f, 3.798607535e-02f, 3.802193268e-02f, 3.805771939e-02f,
+3.809343542e-02f, 3.812908073e-02f, 3.816465527e-02f, 3.820015898e-02f, 3.823559182e-02f, 3.827095373e-02f, 3.830624465e-02f, 3.834146455e-02f, 3.837661336e-02f, 3.841169104e-02f,
+3.844669754e-02f, 3.848163281e-02f, 3.851649679e-02f, 3.855128944e-02f, 3.858601071e-02f, 3.862066054e-02f, 3.865523889e-02f, 3.868974570e-02f, 3.872418094e-02f, 3.875854454e-02f,
+3.879283646e-02f, 3.882705665e-02f, 3.886120506e-02f, 3.889528165e-02f, 3.892928636e-02f, 3.896321914e-02f, 3.899707995e-02f, 3.903086873e-02f, 3.906458545e-02f, 3.909823005e-02f,
+3.913180248e-02f, 3.916530269e-02f, 3.919873065e-02f, 3.923208629e-02f, 3.926536958e-02f, 3.929858047e-02f, 3.933171890e-02f, 3.936478484e-02f, 3.939777823e-02f, 3.943069902e-02f,
+3.946354718e-02f, 3.949632266e-02f, 3.952902540e-02f, 3.956165536e-02f, 3.959421250e-02f, 3.962669677e-02f, 3.965910813e-02f, 3.969144652e-02f, 3.972371190e-02f, 3.975590424e-02f,
+3.978802347e-02f, 3.982006956e-02f, 3.985204247e-02f, 3.988394214e-02f, 3.991576853e-02f, 3.994752160e-02f, 3.997920130e-02f, 4.001080759e-02f, 4.004234042e-02f, 4.007379976e-02f,
+4.010518555e-02f, 4.013649775e-02f, 4.016773632e-02f, 4.019890121e-02f, 4.022999238e-02f, 4.026100980e-02f, 4.029195340e-02f, 4.032282316e-02f, 4.035361903e-02f, 4.038434096e-02f,
+4.041498892e-02f, 4.044556285e-02f, 4.047606272e-02f, 4.050648849e-02f, 4.053684011e-02f, 4.056711755e-02f, 4.059732075e-02f, 4.062744968e-02f, 4.065750429e-02f, 4.068748455e-02f,
+4.071739042e-02f, 4.074722184e-02f, 4.077697879e-02f, 4.080666121e-02f, 4.083626908e-02f, 4.086580234e-02f, 4.089526096e-02f, 4.092464489e-02f, 4.095395411e-02f, 4.098318856e-02f,
+4.101234820e-02f, 4.104143301e-02f, 4.107044293e-02f, 4.109937792e-02f, 4.112823796e-02f, 4.115702299e-02f, 4.118573298e-02f, 4.121436790e-02f, 4.124292769e-02f, 4.127141232e-02f,
+4.129982176e-02f, 4.132815597e-02f, 4.135641490e-02f, 4.138459851e-02f, 4.141270678e-02f, 4.144073966e-02f, 4.146869711e-02f, 4.149657910e-02f, 4.152438559e-02f, 4.155211654e-02f,
+4.157977191e-02f, 4.160735167e-02f, 4.163485578e-02f, 4.166228420e-02f, 4.168963690e-02f, 4.171691383e-02f, 4.174411497e-02f, 4.177124027e-02f, 4.179828971e-02f, 4.182526323e-02f,
+4.185216082e-02f, 4.187898242e-02f, 4.190572801e-02f, 4.193239755e-02f, 4.195899101e-02f, 4.198550834e-02f, 4.201194952e-02f, 4.203831451e-02f, 4.206460327e-02f, 4.209081577e-02f,
+4.211695198e-02f, 4.214301185e-02f, 4.216899536e-02f, 4.219490247e-02f, 4.222073315e-02f, 4.224648736e-02f, 4.227216508e-02f, 4.229776625e-02f, 4.232329086e-02f, 4.234873887e-02f,
+4.237411024e-02f, 4.239940495e-02f, 4.242462295e-02f, 4.244976422e-02f, 4.247482872e-02f, 4.249981643e-02f, 4.252472730e-02f, 4.254956131e-02f, 4.257431842e-02f, 4.259899860e-02f,
+4.262360182e-02f, 4.264812805e-02f, 4.267257726e-02f, 4.269694941e-02f, 4.272124447e-02f, 4.274546242e-02f, 4.276960321e-02f, 4.279366683e-02f, 4.281765323e-02f, 4.284156239e-02f,
+4.286539428e-02f, 4.288914887e-02f, 4.291282612e-02f, 4.293642601e-02f, 4.295994850e-02f, 4.298339357e-02f, 4.300676119e-02f, 4.303005132e-02f, 4.305326395e-02f, 4.307639903e-02f,
+4.309945653e-02f, 4.312243644e-02f, 4.314533872e-02f, 4.316816334e-02f, 4.319091028e-02f, 4.321357950e-02f, 4.323617097e-02f, 4.325868468e-02f, 4.328112058e-02f, 4.330347865e-02f,
+4.332575887e-02f, 4.334796121e-02f, 4.337008563e-02f, 4.339213212e-02f, 4.341410064e-02f, 4.343599116e-02f, 4.345780367e-02f, 4.347953813e-02f, 4.350119451e-02f, 4.352277279e-02f,
+4.354427295e-02f, 4.356569495e-02f, 4.358703878e-02f, 4.360830439e-02f, 4.362949178e-02f, 4.365060091e-02f, 4.367163175e-02f, 4.369258429e-02f, 4.371345849e-02f, 4.373425433e-02f,
+4.375497179e-02f, 4.377561083e-02f, 4.379617145e-02f, 4.381665360e-02f, 4.383705727e-02f, 4.385738244e-02f, 4.387762907e-02f, 4.389779714e-02f, 4.391788663e-02f, 4.393789752e-02f,
+4.395782978e-02f, 4.397768339e-02f, 4.399745832e-02f, 4.401715456e-02f, 4.403677207e-02f, 4.405631084e-02f, 4.407577084e-02f, 4.409515204e-02f, 4.411445444e-02f, 4.413367800e-02f,
+4.415282270e-02f, 4.417188852e-02f, 4.419087544e-02f, 4.420978344e-02f, 4.422861248e-02f, 4.424736257e-02f, 4.426603366e-02f, 4.428462574e-02f, 4.430313878e-02f, 4.432157278e-02f,
+4.433992770e-02f, 4.435820353e-02f, 4.437640023e-02f, 4.439451781e-02f, 4.441255622e-02f, 4.443051546e-02f, 4.444839551e-02f, 4.446619633e-02f, 4.448391792e-02f, 4.450156025e-02f,
+4.451912330e-02f, 4.453660706e-02f, 4.455401150e-02f, 4.457133661e-02f, 4.458858237e-02f, 4.460574875e-02f, 4.462283574e-02f, 4.463984332e-02f, 4.465677148e-02f, 4.467362018e-02f,
+4.469038942e-02f, 4.470707918e-02f, 4.472368944e-02f, 4.474022018e-02f, 4.475667138e-02f, 4.477304303e-02f, 4.478933510e-02f, 4.480554759e-02f, 4.482168047e-02f, 4.483773373e-02f,
+4.485370735e-02f, 4.486960131e-02f, 4.488541560e-02f, 4.490115021e-02f, 4.491680510e-02f, 4.493238027e-02f, 4.494787571e-02f, 4.496329139e-02f, 4.497862731e-02f, 4.499388344e-02f,
+4.500905976e-02f, 4.502415628e-02f, 4.503917296e-02f, 4.505410979e-02f, 4.506896677e-02f, 4.508374387e-02f, 4.509844108e-02f, 4.511305838e-02f, 4.512759577e-02f, 4.514205322e-02f,
+4.515643073e-02f, 4.517072827e-02f, 4.518494584e-02f, 4.519908342e-02f, 4.521314100e-02f, 4.522711856e-02f, 4.524101610e-02f, 4.525483359e-02f, 4.526857103e-02f, 4.528222840e-02f,
+4.529580569e-02f, 4.530930289e-02f, 4.532271998e-02f, 4.533605695e-02f, 4.534931380e-02f, 4.536249050e-02f, 4.537558705e-02f, 4.538860344e-02f, 4.540153964e-02f, 4.541439566e-02f,
+4.542717148e-02f, 4.543986709e-02f, 4.545248248e-02f, 4.546501764e-02f, 4.547747255e-02f, 4.548984721e-02f, 4.550214161e-02f, 4.551435573e-02f, 4.552648956e-02f, 4.553854310e-02f,
+4.555051634e-02f, 4.556240926e-02f, 4.557422186e-02f, 4.558595412e-02f, 4.559760604e-02f, 4.560917761e-02f, 4.562066882e-02f, 4.563207966e-02f, 4.564341012e-02f, 4.565466019e-02f,
+4.566582986e-02f, 4.567691914e-02f, 4.568792799e-02f, 4.569885643e-02f, 4.570970444e-02f, 4.572047201e-02f, 4.573115914e-02f, 4.574176581e-02f, 4.575229203e-02f, 4.576273778e-02f,
+4.577310306e-02f, 4.578338785e-02f, 4.579359216e-02f, 4.580371598e-02f, 4.581375929e-02f, 4.582372210e-02f, 4.583360439e-02f, 4.584340616e-02f, 4.585312741e-02f, 4.586276813e-02f,
+4.587232831e-02f, 4.588180794e-02f, 4.589120703e-02f, 4.590052556e-02f, 4.590976354e-02f, 4.591892095e-02f, 4.592799779e-02f, 4.593699406e-02f, 4.594590975e-02f, 4.595474486e-02f,
+4.596349938e-02f, 4.597217331e-02f, 4.598076664e-02f, 4.598927938e-02f, 4.599771151e-02f, 4.600606304e-02f, 4.601433395e-02f, 4.602252425e-02f, 4.603063394e-02f, 4.603866300e-02f,
+4.604661144e-02f, 4.605447926e-02f, 4.606226644e-02f, 4.606997300e-02f, 4.607759892e-02f, 4.608514421e-02f, 4.609260885e-02f, 4.609999286e-02f, 4.610729623e-02f, 4.611451895e-02f,
+4.612166103e-02f, 4.612872246e-02f, 4.613570324e-02f, 4.614260338e-02f, 4.614942286e-02f, 4.615616170e-02f, 4.616281988e-02f, 4.616939741e-02f, 4.617589428e-02f, 4.618231050e-02f,
+4.618864607e-02f, 4.619490099e-02f, 4.620107525e-02f, 4.620716886e-02f, 4.621318182e-02f, 4.621911412e-02f, 4.622496577e-02f, 4.623073678e-02f, 4.623642713e-02f, 4.624203683e-02f,
+4.624756588e-02f, 4.625301429e-02f, 4.625838205e-02f, 4.626366917e-02f, 4.626887565e-02f, 4.627400149e-02f, 4.627904668e-02f, 4.628401125e-02f, 4.628889518e-02f, 4.629369848e-02f,
+4.629842115e-02f, 4.630306319e-02f, 4.630762461e-02f, 4.631210541e-02f, 4.631650559e-02f, 4.632082516e-02f, 4.632506412e-02f, 4.632922248e-02f, 4.633330023e-02f, 4.633729738e-02f,
+4.634121393e-02f, 4.634504989e-02f, 4.634880527e-02f, 4.635248006e-02f, 4.635607427e-02f, 4.635958791e-02f, 4.636302099e-02f, 4.636637349e-02f, 4.636964544e-02f, 4.637283683e-02f,
+4.637594768e-02f, 4.637897798e-02f, 4.638192774e-02f, 4.638479698e-02f, 4.638758568e-02f, 4.639029387e-02f, 4.639292154e-02f, 4.639546870e-02f, 4.639793536e-02f, 4.640032153e-02f,
+4.640262721e-02f, 4.640485241e-02f, 4.640699713e-02f, 4.640906139e-02f, 4.641104518e-02f, 4.641294853e-02f, 4.641477142e-02f, 4.641651388e-02f, 4.641817591e-02f, 4.641975752e-02f,
+4.642125872e-02f, 4.642267950e-02f, 4.642401990e-02f, 4.642527990e-02f, 4.642645952e-02f, 4.642755877e-02f, 4.642857765e-02f, 4.642951619e-02f, 4.643037437e-02f, 4.643115223e-02f,
+4.643184975e-02f, 4.643246696e-02f, 4.643300386e-02f, 4.643346047e-02f, 4.643383679e-02f, 4.643413283e-02f, 4.643434860e-02f, 4.643448412e-02f, 4.643453939e-02f, 4.643451443e-02f,
+4.643440924e-02f, 4.643422384e-02f, 4.643395823e-02f, 4.643361244e-02f, 4.643318646e-02f, 4.643268032e-02f, 4.643209401e-02f, 4.643142756e-02f, 4.643068098e-02f, 4.642985428e-02f,
+4.642894747e-02f, 4.642796056e-02f, 4.642689356e-02f, 4.642574649e-02f, 4.642451937e-02f, 4.642321219e-02f, 4.642182498e-02f, 4.642035775e-02f, 4.641881052e-02f, 4.641718329e-02f,
+4.641547607e-02f, 4.641368889e-02f, 4.641182176e-02f, 4.640987469e-02f, 4.640784769e-02f, 4.640574078e-02f, 4.640355397e-02f, 4.640128728e-02f, 4.639894072e-02f, 4.639651431e-02f,
+4.639400806e-02f, 4.639142198e-02f, 4.638875610e-02f, 4.638601042e-02f, 4.638318497e-02f, 4.638027975e-02f, 4.637729479e-02f, 4.637423009e-02f, 4.637108568e-02f, 4.636786157e-02f,
+4.636455777e-02f, 4.636117431e-02f, 4.635771120e-02f, 4.635416846e-02f, 4.635054609e-02f, 4.634684413e-02f, 4.634306258e-02f, 4.633920147e-02f, 4.633526081e-02f, 4.633124062e-02f,
+4.632714091e-02f, 4.632296171e-02f, 4.631870302e-02f, 4.631436488e-02f, 4.630994729e-02f, 4.630545028e-02f, 4.630087387e-02f, 4.629621806e-02f, 4.629148289e-02f, 4.628666836e-02f,
+4.628177450e-02f, 4.627680134e-02f, 4.627174887e-02f, 4.626661714e-02f, 4.626140614e-02f, 4.625611591e-02f, 4.625074647e-02f, 4.624529783e-02f, 4.623977002e-02f, 4.623416304e-02f,
+4.622847693e-02f, 4.622271171e-02f, 4.621686739e-02f, 4.621094400e-02f, 4.620494155e-02f, 4.619886007e-02f, 4.619269958e-02f, 4.618646009e-02f, 4.618014164e-02f, 4.617374423e-02f,
+4.616726790e-02f, 4.616071267e-02f, 4.615407855e-02f, 4.614736557e-02f, 4.614057375e-02f, 4.613370311e-02f, 4.612675368e-02f, 4.611972548e-02f, 4.611261852e-02f, 4.610543284e-02f,
+4.609816845e-02f, 4.609082538e-02f, 4.608340365e-02f, 4.607590329e-02f, 4.606832431e-02f, 4.606066675e-02f, 4.605293062e-02f, 4.604511595e-02f, 4.603722276e-02f, 4.602925108e-02f,
+4.602120093e-02f, 4.601307233e-02f, 4.600486531e-02f, 4.599657990e-02f, 4.598821612e-02f, 4.597977399e-02f, 4.597125353e-02f, 4.596265478e-02f, 4.595397776e-02f, 4.594522250e-02f,
+4.593638901e-02f, 4.592747732e-02f, 4.591848747e-02f, 4.590941948e-02f, 4.590027336e-02f, 4.589104916e-02f, 4.588174689e-02f, 4.587236658e-02f, 4.586290825e-02f, 4.585337194e-02f,
+4.584375768e-02f, 4.583406548e-02f, 4.582429537e-02f, 4.581444739e-02f, 4.580452155e-02f, 4.579451790e-02f, 4.578443644e-02f, 4.577427722e-02f, 4.576404026e-02f, 4.575372558e-02f,
+4.574333322e-02f, 4.573286320e-02f, 4.572231556e-02f, 4.571169032e-02f, 4.570098750e-02f, 4.569020714e-02f, 4.567934927e-02f, 4.566841391e-02f, 4.565740110e-02f, 4.564631086e-02f,
+4.563514323e-02f, 4.562389822e-02f, 4.561257588e-02f, 4.560117623e-02f, 4.558969931e-02f, 4.557814513e-02f, 4.556651373e-02f, 4.555480515e-02f, 4.554301941e-02f, 4.553115654e-02f,
+4.551921658e-02f, 4.550719955e-02f, 4.549510548e-02f, 4.548293441e-02f, 4.547068637e-02f, 4.545836138e-02f, 4.544595949e-02f, 4.543348071e-02f, 4.542092509e-02f, 4.540829265e-02f,
+4.539558343e-02f, 4.538279746e-02f, 4.536993477e-02f, 4.535699539e-02f, 4.534397936e-02f, 4.533088670e-02f, 4.531771746e-02f, 4.530447165e-02f, 4.529114933e-02f, 4.527775051e-02f,
+4.526427524e-02f, 4.525072354e-02f, 4.523709545e-02f, 4.522339100e-02f, 4.520961023e-02f, 4.519575317e-02f, 4.518181985e-02f, 4.516781031e-02f, 4.515372459e-02f, 4.513956271e-02f,
+4.512532471e-02f, 4.511101062e-02f, 4.509662049e-02f, 4.508215434e-02f, 4.506761221e-02f, 4.505299414e-02f, 4.503830015e-02f, 4.502353029e-02f, 4.500868460e-02f, 4.499376309e-02f,
+4.497876582e-02f, 4.496369282e-02f, 4.494854412e-02f, 4.493331976e-02f, 4.491801978e-02f, 4.490264421e-02f, 4.488719309e-02f, 4.487166645e-02f, 4.485606434e-02f, 4.484038678e-02f,
+4.482463382e-02f, 4.480880549e-02f, 4.479290184e-02f, 4.477692289e-02f, 4.476086868e-02f, 4.474473925e-02f, 4.472853465e-02f, 4.471225490e-02f, 4.469590005e-02f, 4.467947013e-02f,
+4.466296519e-02f, 4.464638525e-02f, 4.462973036e-02f, 4.461300056e-02f, 4.459619589e-02f, 4.457931638e-02f, 4.456236207e-02f, 4.454533300e-02f, 4.452822922e-02f, 4.451105075e-02f,
+4.449379765e-02f, 4.447646995e-02f, 4.445906768e-02f, 4.444159089e-02f, 4.442403963e-02f, 4.440641392e-02f, 4.438871381e-02f, 4.437093934e-02f, 4.435309055e-02f, 4.433516748e-02f,
+4.431717017e-02f, 4.429909866e-02f, 4.428095299e-02f, 4.426273321e-02f, 4.424443935e-02f, 4.422607146e-02f, 4.420762958e-02f, 4.418911374e-02f, 4.417052399e-02f, 4.415186038e-02f,
+4.413312293e-02f, 4.411431171e-02f, 4.409542674e-02f, 4.407646807e-02f, 4.405743574e-02f, 4.403832980e-02f, 4.401915028e-02f, 4.399989724e-02f, 4.398057070e-02f, 4.396117073e-02f,
+4.394169735e-02f, 4.392215061e-02f, 4.390253055e-02f, 4.388283723e-02f, 4.386307068e-02f, 4.384323094e-02f, 4.382331806e-02f, 4.380333209e-02f, 4.378327306e-02f, 4.376314102e-02f,
+4.374293602e-02f, 4.372265810e-02f, 4.370230730e-02f, 4.368188367e-02f, 4.366138725e-02f, 4.364081810e-02f, 4.362017624e-02f, 4.359946174e-02f, 4.357867463e-02f, 4.355781495e-02f,
+4.353688276e-02f, 4.351587810e-02f, 4.349480102e-02f, 4.347365156e-02f, 4.345242976e-02f, 4.343113568e-02f, 4.340976936e-02f, 4.338833084e-02f, 4.336682017e-02f, 4.334523740e-02f,
+4.332358258e-02f, 4.330185575e-02f, 4.328005696e-02f, 4.325818625e-02f, 4.323624368e-02f, 4.321422928e-02f, 4.319214311e-02f, 4.316998522e-02f, 4.314775565e-02f, 4.312545444e-02f,
+4.310308166e-02f, 4.308063734e-02f, 4.305812153e-02f, 4.303553428e-02f, 4.301287565e-02f, 4.299014567e-02f, 4.296734440e-02f, 4.294447188e-02f, 4.292152817e-02f, 4.289851330e-02f,
+4.287542734e-02f, 4.285227033e-02f, 4.282904232e-02f, 4.280574336e-02f, 4.278237350e-02f, 4.275893278e-02f, 4.273542127e-02f, 4.271183899e-02f, 4.268818602e-02f, 4.266446239e-02f,
+4.264066816e-02f, 4.261680338e-02f, 4.259286809e-02f, 4.256886235e-02f, 4.254478621e-02f, 4.252063972e-02f, 4.249642293e-02f, 4.247213589e-02f, 4.244777865e-02f, 4.242335126e-02f,
+4.239885377e-02f, 4.237428625e-02f, 4.234964872e-02f, 4.232494126e-02f, 4.230016391e-02f, 4.227531672e-02f, 4.225039974e-02f, 4.222541302e-02f, 4.220035663e-02f, 4.217523060e-02f,
+4.215003500e-02f, 4.212476987e-02f, 4.209943527e-02f, 4.207403125e-02f, 4.204855786e-02f, 4.202301516e-02f, 4.199740319e-02f, 4.197172202e-02f, 4.194597169e-02f, 4.192015226e-02f,
+4.189426378e-02f, 4.186830631e-02f, 4.184227989e-02f, 4.181618459e-02f, 4.179002046e-02f, 4.176378754e-02f, 4.173748591e-02f, 4.171111560e-02f, 4.168467667e-02f, 4.165816918e-02f,
+4.163159318e-02f, 4.160494873e-02f, 4.157823589e-02f, 4.155145470e-02f, 4.152460522e-02f, 4.149768751e-02f, 4.147070162e-02f, 4.144364760e-02f, 4.141652552e-02f, 4.138933543e-02f,
+4.136207739e-02f, 4.133475144e-02f, 4.130735765e-02f, 4.127989607e-02f, 4.125236676e-02f, 4.122476977e-02f, 4.119710516e-02f, 4.116937299e-02f, 4.114157332e-02f, 4.111370619e-02f,
+4.108577167e-02f, 4.105776981e-02f, 4.102970068e-02f, 4.100156432e-02f, 4.097336079e-02f, 4.094509016e-02f, 4.091675248e-02f, 4.088834781e-02f, 4.085987619e-02f, 4.083133771e-02f,
+4.080273240e-02f, 4.077406033e-02f, 4.074532156e-02f, 4.071651614e-02f, 4.068764413e-02f, 4.065870559e-02f, 4.062970059e-02f, 4.060062917e-02f, 4.057149140e-02f, 4.054228733e-02f,
+4.051301703e-02f, 4.048368055e-02f, 4.045427795e-02f, 4.042480929e-02f, 4.039527464e-02f, 4.036567405e-02f, 4.033600757e-02f, 4.030627528e-02f, 4.027647722e-02f, 4.024661346e-02f,
+4.021668407e-02f, 4.018668909e-02f, 4.015662859e-02f, 4.012650263e-02f, 4.009631127e-02f, 4.006605457e-02f, 4.003573259e-02f, 4.000534539e-02f, 3.997489303e-02f, 3.994437558e-02f,
+3.991379309e-02f, 3.988314563e-02f, 3.985243325e-02f, 3.982165602e-02f, 3.979081400e-02f, 3.975990725e-02f, 3.972893584e-02f, 3.969789981e-02f, 3.966679924e-02f, 3.963563419e-02f,
+3.960440472e-02f, 3.957311089e-02f, 3.954175277e-02f, 3.951033041e-02f, 3.947884388e-02f, 3.944729324e-02f, 3.941567855e-02f, 3.938399988e-02f, 3.935225730e-02f, 3.932045085e-02f,
+3.928858061e-02f, 3.925664663e-02f, 3.922464899e-02f, 3.919258774e-02f, 3.916046296e-02f, 3.912827469e-02f, 3.909602301e-02f, 3.906370798e-02f, 3.903132966e-02f, 3.899888812e-02f,
+3.896638342e-02f, 3.893381562e-02f, 3.890118480e-02f, 3.886849101e-02f, 3.883573431e-02f, 3.880291478e-02f, 3.877003248e-02f, 3.873708747e-02f, 3.870407982e-02f, 3.867100958e-02f,
+3.863787684e-02f, 3.860468165e-02f, 3.857142407e-02f, 3.853810418e-02f, 3.850472203e-02f, 3.847127770e-02f, 3.843777125e-02f, 3.840420274e-02f, 3.837057225e-02f, 3.833687983e-02f,
+3.830312555e-02f, 3.826930948e-02f, 3.823543169e-02f, 3.820149223e-02f, 3.816749119e-02f, 3.813342862e-02f, 3.809930459e-02f, 3.806511917e-02f, 3.803087242e-02f, 3.799656441e-02f,
+3.796219521e-02f, 3.792776489e-02f, 3.789327351e-02f, 3.785872114e-02f, 3.782410784e-02f, 3.778943369e-02f, 3.775469875e-02f, 3.771990309e-02f, 3.768504678e-02f, 3.765012988e-02f,
+3.761515247e-02f, 3.758011461e-02f, 3.754501636e-02f, 3.750985781e-02f, 3.747463901e-02f, 3.743936003e-02f, 3.740402095e-02f, 3.736862182e-02f, 3.733316273e-02f, 3.729764374e-02f,
+3.726206491e-02f, 3.722642632e-02f, 3.719072804e-02f, 3.715497013e-02f, 3.711915267e-02f, 3.708327571e-02f, 3.704733935e-02f, 3.701134363e-02f, 3.697528864e-02f, 3.693917443e-02f,
+3.690300109e-02f, 3.686676868e-02f, 3.683047727e-02f, 3.679412694e-02f, 3.675771774e-02f, 3.672124976e-02f, 3.668472305e-02f, 3.664813771e-02f, 3.661149378e-02f, 3.657479135e-02f,
+3.653803048e-02f, 3.650121125e-02f, 3.646433372e-02f, 3.642739798e-02f, 3.639040408e-02f, 3.635335210e-02f, 3.631624211e-02f, 3.627907418e-02f, 3.624184839e-02f, 3.620456480e-02f,
+3.616722349e-02f, 3.612982452e-02f, 3.609236798e-02f, 3.605485393e-02f, 3.601728244e-02f, 3.597965359e-02f, 3.594196745e-02f, 3.590422409e-02f, 3.586642358e-02f, 3.582856600e-02f,
+3.579065141e-02f, 3.575267990e-02f, 3.571465152e-02f, 3.567656637e-02f, 3.563842450e-02f, 3.560022600e-02f, 3.556197093e-02f, 3.552365937e-02f, 3.548529139e-02f, 3.544686706e-02f,
+3.540838646e-02f, 3.536984966e-02f, 3.533125674e-02f, 3.529260777e-02f, 3.525390282e-02f, 3.521514196e-02f, 3.517632528e-02f, 3.513745284e-02f, 3.509852472e-02f, 3.505954099e-02f,
+3.502050172e-02f, 3.498140700e-02f, 3.494225689e-02f, 3.490305148e-02f, 3.486379082e-02f, 3.482447501e-02f, 3.478510411e-02f, 3.474567820e-02f, 3.470619735e-02f, 3.466666164e-02f,
+3.462707115e-02f, 3.458742594e-02f, 3.454772610e-02f, 3.450797170e-02f, 3.446816281e-02f, 3.442829952e-02f, 3.438838189e-02f, 3.434841000e-02f, 3.430838393e-02f, 3.426830375e-02f,
+3.422816954e-02f, 3.418798138e-02f, 3.414773934e-02f, 3.410744350e-02f, 3.406709393e-02f, 3.402669071e-02f, 3.398623392e-02f, 3.394572363e-02f, 3.390515993e-02f, 3.386454287e-02f,
+3.382387256e-02f, 3.378314905e-02f, 3.374237243e-02f, 3.370154277e-02f, 3.366066016e-02f, 3.361972466e-02f, 3.357873636e-02f, 3.353769533e-02f, 3.349660166e-02f, 3.345545541e-02f,
+3.341425666e-02f, 3.337300550e-02f, 3.333170200e-02f, 3.329034624e-02f, 3.324893829e-02f, 3.320747824e-02f, 3.316596617e-02f, 3.312440214e-02f, 3.308278624e-02f, 3.304111855e-02f,
+3.299939914e-02f, 3.295762810e-02f, 3.291580550e-02f, 3.287393142e-02f, 3.283200595e-02f, 3.279002915e-02f, 3.274800110e-02f, 3.270592190e-02f, 3.266379161e-02f, 3.262161031e-02f,
+3.257937809e-02f, 3.253709502e-02f, 3.249476118e-02f, 3.245237665e-02f, 3.240994151e-02f, 3.236745585e-02f, 3.232491973e-02f, 3.228233325e-02f, 3.223969647e-02f, 3.219700948e-02f,
+3.215427236e-02f, 3.211148519e-02f, 3.206864805e-02f, 3.202576102e-02f, 3.198282417e-02f, 3.193983760e-02f, 3.189680138e-02f, 3.185371559e-02f, 3.181058031e-02f, 3.176739562e-02f,
+3.172416160e-02f, 3.168087833e-02f, 3.163754590e-02f, 3.159416439e-02f, 3.155073387e-02f, 3.150725442e-02f, 3.146372614e-02f, 3.142014909e-02f, 3.137652336e-02f, 3.133284904e-02f,
+3.128912620e-02f, 3.124535492e-02f, 3.120153528e-02f, 3.115766738e-02f, 3.111375128e-02f, 3.106978708e-02f, 3.102577485e-02f, 3.098171467e-02f, 3.093760663e-02f, 3.089345080e-02f,
+3.084924728e-02f, 3.080499614e-02f, 3.076069747e-02f, 3.071635134e-02f, 3.067195785e-02f, 3.062751706e-02f, 3.058302907e-02f, 3.053849396e-02f, 3.049391181e-02f, 3.044928270e-02f,
+3.040460672e-02f, 3.035988394e-02f, 3.031511446e-02f, 3.027029835e-02f, 3.022543570e-02f, 3.018052659e-02f, 3.013557110e-02f, 3.009056932e-02f, 3.004552133e-02f, 3.000042722e-02f,
+2.995528706e-02f, 2.991010095e-02f, 2.986486896e-02f, 2.981959118e-02f, 2.977426769e-02f, 2.972889857e-02f, 2.968348392e-02f, 2.963802381e-02f, 2.959251833e-02f, 2.954696756e-02f,
+2.950137159e-02f, 2.945573050e-02f, 2.941004437e-02f, 2.936431329e-02f, 2.931853735e-02f, 2.927271662e-02f, 2.922685120e-02f, 2.918094117e-02f, 2.913498660e-02f, 2.908898760e-02f,
+2.904294424e-02f, 2.899685660e-02f, 2.895072477e-02f, 2.890454884e-02f, 2.885832890e-02f, 2.881206502e-02f, 2.876575729e-02f, 2.871940580e-02f, 2.867301063e-02f, 2.862657188e-02f,
+2.858008961e-02f, 2.853356393e-02f, 2.848699491e-02f, 2.844038264e-02f, 2.839372720e-02f, 2.834702869e-02f, 2.830028719e-02f, 2.825350278e-02f, 2.820667555e-02f, 2.815980559e-02f,
+2.811289298e-02f, 2.806593780e-02f, 2.801894015e-02f, 2.797190012e-02f, 2.792481778e-02f, 2.787769322e-02f, 2.783052653e-02f, 2.778331780e-02f, 2.773606712e-02f, 2.768877456e-02f,
+2.764144022e-02f, 2.759406418e-02f, 2.754664654e-02f, 2.749918737e-02f, 2.745168676e-02f, 2.740414481e-02f, 2.735656159e-02f, 2.730893720e-02f, 2.726127173e-02f, 2.721356525e-02f,
+2.716581786e-02f, 2.711802964e-02f, 2.707020069e-02f, 2.702233109e-02f, 2.697442092e-02f, 2.692647028e-02f, 2.687847925e-02f, 2.683044792e-02f, 2.678237638e-02f, 2.673426471e-02f,
+2.668611301e-02f, 2.663792136e-02f, 2.658968985e-02f, 2.654141856e-02f, 2.649310760e-02f, 2.644475703e-02f, 2.639636696e-02f, 2.634793747e-02f, 2.629946865e-02f, 2.625096059e-02f,
+2.620241337e-02f, 2.615382709e-02f, 2.610520183e-02f, 2.605653768e-02f, 2.600783473e-02f, 2.595909307e-02f, 2.591031279e-02f, 2.586149398e-02f, 2.581263672e-02f, 2.576374110e-02f,
+2.571480722e-02f, 2.566583517e-02f, 2.561682502e-02f, 2.556777688e-02f, 2.551869082e-02f, 2.546956695e-02f, 2.542040534e-02f, 2.537120609e-02f, 2.532196929e-02f, 2.527269503e-02f,
+2.522338340e-02f, 2.517403448e-02f, 2.512464837e-02f, 2.507522515e-02f, 2.502576492e-02f, 2.497626776e-02f, 2.492673377e-02f, 2.487716304e-02f, 2.482755565e-02f, 2.477791170e-02f,
+2.472823127e-02f, 2.467851446e-02f, 2.462876135e-02f, 2.457897204e-02f, 2.452914661e-02f, 2.447928516e-02f, 2.442938778e-02f, 2.437945456e-02f, 2.432948558e-02f, 2.427948094e-02f,
+2.422944073e-02f, 2.417936504e-02f, 2.412925397e-02f, 2.407910759e-02f, 2.402892600e-02f, 2.397870930e-02f, 2.392845757e-02f, 2.387817090e-02f, 2.382784939e-02f, 2.377749313e-02f,
+2.372710220e-02f, 2.367667670e-02f, 2.362621673e-02f, 2.357572236e-02f, 2.352519369e-02f, 2.347463082e-02f, 2.342403384e-02f, 2.337340283e-02f, 2.332273788e-02f, 2.327203910e-02f,
+2.322130657e-02f, 2.317054038e-02f, 2.311974062e-02f, 2.306890739e-02f, 2.301804078e-02f, 2.296714088e-02f, 2.291620778e-02f, 2.286524157e-02f, 2.281424234e-02f, 2.276321019e-02f,
+2.271214522e-02f, 2.266104750e-02f, 2.260991713e-02f, 2.255875421e-02f, 2.250755883e-02f, 2.245633107e-02f, 2.240507104e-02f, 2.235377882e-02f, 2.230245451e-02f, 2.225109820e-02f,
+2.219970998e-02f, 2.214828994e-02f, 2.209683818e-02f, 2.204535478e-02f, 2.199383985e-02f, 2.194229347e-02f, 2.189071574e-02f, 2.183910675e-02f, 2.178746659e-02f, 2.173579535e-02f,
+2.168409313e-02f, 2.163236003e-02f, 2.158059612e-02f, 2.152880152e-02f, 2.147697630e-02f, 2.142512056e-02f, 2.137323441e-02f, 2.132131792e-02f, 2.126937119e-02f, 2.121739432e-02f,
+2.116538739e-02f, 2.111335051e-02f, 2.106128377e-02f, 2.100918725e-02f, 2.095706105e-02f, 2.090490527e-02f, 2.085272000e-02f, 2.080050533e-02f, 2.074826136e-02f, 2.069598818e-02f,
+2.064368588e-02f, 2.059135456e-02f, 2.053899431e-02f, 2.048660522e-02f, 2.043418739e-02f, 2.038174092e-02f, 2.032926589e-02f, 2.027676240e-02f, 2.022423054e-02f, 2.017167041e-02f,
+2.011908211e-02f, 2.006646572e-02f, 2.001382134e-02f, 1.996114906e-02f, 1.990844899e-02f, 1.985572120e-02f, 1.980296580e-02f, 1.975018289e-02f, 1.969737255e-02f, 1.964453488e-02f,
+1.959166997e-02f, 1.953877792e-02f, 1.948585883e-02f, 1.943291278e-02f, 1.937993987e-02f, 1.932694021e-02f, 1.927391387e-02f, 1.922086096e-02f, 1.916778157e-02f, 1.911467579e-02f,
+1.906154372e-02f, 1.900838546e-02f, 1.895520110e-02f, 1.890199073e-02f, 1.884875446e-02f, 1.879549236e-02f, 1.874220455e-02f, 1.868889110e-02f, 1.863555213e-02f, 1.858218772e-02f,
+1.852879797e-02f, 1.847538298e-02f, 1.842194283e-02f, 1.836847763e-02f, 1.831498747e-02f, 1.826147244e-02f, 1.820793264e-02f, 1.815436816e-02f, 1.810077911e-02f, 1.804716557e-02f,
+1.799352765e-02f, 1.793986543e-02f, 1.788617901e-02f, 1.783246849e-02f, 1.777873396e-02f, 1.772497552e-02f, 1.767119327e-02f, 1.761738729e-02f, 1.756355769e-02f, 1.750970456e-02f,
+1.745582799e-02f, 1.740192809e-02f, 1.734800494e-02f, 1.729405865e-02f, 1.724008931e-02f, 1.718609701e-02f, 1.713208185e-02f, 1.707804393e-02f, 1.702398334e-02f, 1.696990018e-02f,
+1.691579455e-02f, 1.686166653e-02f, 1.680751623e-02f, 1.675334374e-02f, 1.669914916e-02f, 1.664493259e-02f, 1.659069411e-02f, 1.653643383e-02f, 1.648215184e-02f, 1.642784825e-02f,
+1.637352313e-02f, 1.631917660e-02f, 1.626480874e-02f, 1.621041966e-02f, 1.615600945e-02f, 1.610157820e-02f, 1.604712602e-02f, 1.599265299e-02f, 1.593815922e-02f, 1.588364480e-02f,
+1.582910983e-02f, 1.577455440e-02f, 1.571997861e-02f, 1.566538256e-02f, 1.561076635e-02f, 1.555613006e-02f, 1.550147380e-02f, 1.544679766e-02f, 1.539210175e-02f, 1.533738615e-02f,
+1.528265096e-02f, 1.522789628e-02f, 1.517312221e-02f, 1.511832885e-02f, 1.506351628e-02f, 1.500868461e-02f, 1.495383393e-02f, 1.489896434e-02f, 1.484407594e-02f, 1.478916883e-02f,
+1.473424309e-02f, 1.467929883e-02f, 1.462433615e-02f, 1.456935514e-02f, 1.451435589e-02f, 1.445933851e-02f, 1.440430309e-02f, 1.434924974e-02f, 1.429417853e-02f, 1.423908958e-02f,
+1.418398298e-02f, 1.412885883e-02f, 1.407371723e-02f, 1.401855826e-02f, 1.396338203e-02f, 1.390818864e-02f, 1.385297818e-02f, 1.379775075e-02f, 1.374250645e-02f, 1.368724537e-02f,
+1.363196761e-02f, 1.357667327e-02f, 1.352136245e-02f, 1.346603524e-02f, 1.341069174e-02f, 1.335533204e-02f, 1.329995626e-02f, 1.324456447e-02f, 1.318915679e-02f, 1.313373330e-02f,
+1.307829411e-02f, 1.302283930e-02f, 1.296736899e-02f, 1.291188326e-02f, 1.285638222e-02f, 1.280086596e-02f, 1.274533458e-02f, 1.268978817e-02f, 1.263422684e-02f, 1.257865067e-02f,
+1.252305978e-02f, 1.246745425e-02f, 1.241183419e-02f, 1.235619969e-02f, 1.230055085e-02f, 1.224488776e-02f, 1.218921053e-02f, 1.213351925e-02f, 1.207781401e-02f, 1.202209493e-02f,
+1.196636209e-02f, 1.191061559e-02f, 1.185485553e-02f, 1.179908201e-02f, 1.174329512e-02f, 1.168749496e-02f, 1.163168164e-02f, 1.157585524e-02f, 1.152001587e-02f, 1.146416363e-02f,
+1.140829860e-02f, 1.135242089e-02f, 1.129653060e-02f, 1.124062783e-02f, 1.118471266e-02f, 1.112878521e-02f, 1.107284556e-02f, 1.101689382e-02f, 1.096093009e-02f, 1.090495445e-02f,
+1.084896701e-02f, 1.079296787e-02f, 1.073695713e-02f, 1.068093488e-02f, 1.062490121e-02f, 1.056885624e-02f, 1.051280005e-02f, 1.045673274e-02f, 1.040065442e-02f, 1.034456518e-02f,
+1.028846511e-02f, 1.023235432e-02f, 1.017623291e-02f, 1.012010096e-02f, 1.006395858e-02f, 1.000780587e-02f, 9.951642930e-03f, 9.895469849e-03f, 9.839286728e-03f, 9.783093667e-03f,
+9.726890762e-03f, 9.670678111e-03f, 9.614455814e-03f, 9.558223967e-03f, 9.501982668e-03f, 9.445732016e-03f, 9.389472109e-03f, 9.333203044e-03f, 9.276924920e-03f, 9.220637834e-03f,
+9.164341884e-03f, 9.108037169e-03f, 9.051723786e-03f, 8.995401834e-03f, 8.939071410e-03f, 8.882732612e-03f, 8.826385539e-03f, 8.770030288e-03f, 8.713666958e-03f, 8.657295646e-03f,
+8.600916450e-03f, 8.544529469e-03f, 8.488134800e-03f, 8.431732542e-03f, 8.375322792e-03f, 8.318905648e-03f, 8.262481209e-03f, 8.206049572e-03f, 8.149610836e-03f, 8.093165099e-03f,
+8.036712457e-03f, 7.980253011e-03f, 7.923786856e-03f, 7.867314093e-03f, 7.810834817e-03f, 7.754349129e-03f, 7.697857124e-03f, 7.641358903e-03f, 7.584854562e-03f, 7.528344199e-03f,
+7.471827913e-03f, 7.415305802e-03f, 7.358777963e-03f, 7.302244494e-03f, 7.245705494e-03f, 7.189161061e-03f, 7.132611292e-03f, 7.076056285e-03f, 7.019496139e-03f, 6.962930951e-03f,
+6.906360820e-03f, 6.849785843e-03f, 6.793206119e-03f, 6.736621744e-03f, 6.680032818e-03f, 6.623439438e-03f, 6.566841702e-03f, 6.510239708e-03f, 6.453633554e-03f, 6.397023338e-03f,
+6.340409158e-03f, 6.283791112e-03f, 6.227169297e-03f, 6.170543812e-03f, 6.113914754e-03f, 6.057282222e-03f, 6.000646313e-03f, 5.944007126e-03f, 5.887364757e-03f, 5.830719305e-03f,
+5.774070868e-03f, 5.717419543e-03f, 5.660765429e-03f, 5.604108624e-03f, 5.547449224e-03f, 5.490787329e-03f, 5.434123035e-03f, 5.377456441e-03f, 5.320787644e-03f, 5.264116742e-03f,
+5.207443834e-03f, 5.150769016e-03f, 5.094092387e-03f, 5.037414044e-03f, 4.980734085e-03f, 4.924052608e-03f, 4.867369710e-03f, 4.810685490e-03f, 4.754000044e-03f, 4.697313471e-03f,
+4.640625869e-03f, 4.583937334e-03f, 4.527247965e-03f, 4.470557860e-03f, 4.413867115e-03f, 4.357175829e-03f, 4.300484099e-03f, 4.243792024e-03f, 4.187099699e-03f, 4.130407224e-03f,
+4.073714695e-03f, 4.017022211e-03f, 3.960329868e-03f, 3.903637765e-03f, 3.846945998e-03f, 3.790254666e-03f, 3.733563865e-03f, 3.676873694e-03f, 3.620184250e-03f, 3.563495630e-03f,
+3.506807932e-03f, 3.450121252e-03f, 3.393435690e-03f, 3.336751341e-03f, 3.280068304e-03f, 3.223386676e-03f, 3.166706554e-03f, 3.110028035e-03f, 3.053351217e-03f, 2.996676197e-03f,
+2.940003073e-03f, 2.883331941e-03f, 2.826662900e-03f, 2.769996045e-03f, 2.713331476e-03f, 2.656669288e-03f, 2.600009579e-03f, 2.543352446e-03f, 2.486697986e-03f, 2.430046297e-03f,
+2.373397476e-03f, 2.316751619e-03f, 2.260108825e-03f, 2.203469189e-03f, 2.146832809e-03f, 2.090199783e-03f, 2.033570207e-03f, 1.976944177e-03f, 1.920321792e-03f, 1.863703149e-03f,
+1.807088343e-03f, 1.750477472e-03f, 1.693870634e-03f, 1.637267924e-03f, 1.580669440e-03f, 1.524075279e-03f, 1.467485538e-03f, 1.410900313e-03f, 1.354319701e-03f, 1.297743799e-03f,
+1.241172704e-03f, 1.184606512e-03f, 1.128045321e-03f, 1.071489226e-03f, 1.014938326e-03f, 9.583927154e-04f, 9.018524920e-04f, 8.453177523e-04f, 7.887885928e-04f, 7.322651102e-04f,
+6.757474009e-04f, 6.192355616e-04f, 5.627296887e-04f, 5.062298788e-04f, 4.497362282e-04f, 3.932488336e-04f, 3.367677913e-04f, 2.802931977e-04f, 2.238251492e-04f, 1.673637422e-04f,
+1.109090730e-04f, 5.446123792e-05f, -1.979666749e-06f, -5.841354473e-05f, -1.148402998e-04f, -1.712598357e-04f, -2.276720563e-04f, -2.840768653e-04f, -3.404741667e-04f, -3.968638643e-04f,
+-4.532458620e-04f, -5.096200638e-04f, -5.659863735e-04f, -6.223446953e-04f, -6.786949330e-04f, -7.350369907e-04f, -7.913707726e-04f, -8.476961825e-04f, -9.040131247e-04f, -9.603215034e-04f,
+-1.016621223e-03f, -1.072912186e-03f, -1.129194299e-03f, -1.185467465e-03f, -1.241731589e-03f, -1.297986574e-03f, -1.354232326e-03f, -1.410468748e-03f, -1.466695744e-03f, -1.522913220e-03f,
+-1.579121080e-03f, -1.635319227e-03f, -1.691507568e-03f, -1.747686005e-03f, -1.803854444e-03f, -1.860012790e-03f, -1.916160946e-03f, -1.972298818e-03f, -2.028426310e-03f, -2.084543327e-03f,
+-2.140649773e-03f, -2.196745554e-03f, -2.252830574e-03f, -2.308904738e-03f, -2.364967951e-03f, -2.421020117e-03f, -2.477061142e-03f, -2.533090931e-03f, -2.589109388e-03f, -2.645116418e-03f,
+-2.701111928e-03f, -2.757095820e-03f, -2.813068002e-03f, -2.869028377e-03f, -2.924976851e-03f, -2.980913329e-03f, -3.036837717e-03f, -3.092749920e-03f, -3.148649842e-03f, -3.204537390e-03f,
+-3.260412468e-03f, -3.316274982e-03f, -3.372124838e-03f, -3.427961940e-03f, -3.483786195e-03f, -3.539597508e-03f, -3.595395784e-03f, -3.651180929e-03f, -3.706952849e-03f, -3.762711449e-03f,
+-3.818456636e-03f, -3.874188313e-03f, -3.929906389e-03f, -3.985610767e-03f, -4.041301355e-03f, -4.096978058e-03f, -4.152640782e-03f, -4.208289432e-03f, -4.263923915e-03f, -4.319544137e-03f,
+-4.375150004e-03f, -4.430741422e-03f, -4.486318297e-03f, -4.541880535e-03f, -4.597428043e-03f, -4.652960726e-03f, -4.708478491e-03f, -4.763981244e-03f, -4.819468892e-03f, -4.874941340e-03f,
+-4.930398496e-03f, -4.985840266e-03f, -5.041266556e-03f, -5.096677272e-03f, -5.152072322e-03f, -5.207451612e-03f, -5.262815049e-03f, -5.318162539e-03f, -5.373493989e-03f, -5.428809306e-03f,
+-5.484108396e-03f, -5.539391167e-03f, -5.594657524e-03f, -5.649907377e-03f, -5.705140630e-03f, -5.760357191e-03f, -5.815556968e-03f, -5.870739867e-03f, -5.925905795e-03f, -5.981054660e-03f,
+-6.036186368e-03f, -6.091300828e-03f, -6.146397946e-03f, -6.201477629e-03f, -6.256539785e-03f, -6.311584322e-03f, -6.366611146e-03f, -6.421620166e-03f, -6.476611288e-03f, -6.531584421e-03f,
+-6.586539472e-03f, -6.641476349e-03f, -6.696394959e-03f, -6.751295210e-03f, -6.806177010e-03f, -6.861040266e-03f, -6.915884887e-03f, -6.970710781e-03f, -7.025517855e-03f, -7.080306018e-03f,
+-7.135075177e-03f, -7.189825240e-03f, -7.244556117e-03f, -7.299267714e-03f, -7.353959940e-03f, -7.408632704e-03f, -7.463285913e-03f, -7.517919477e-03f, -7.572533303e-03f, -7.627127300e-03f,
+-7.681701376e-03f, -7.736255440e-03f, -7.790789400e-03f, -7.845303166e-03f, -7.899796646e-03f, -7.954269748e-03f, -8.008722381e-03f, -8.063154455e-03f, -8.117565877e-03f, -8.171956557e-03f,
+-8.226326404e-03f, -8.280675327e-03f, -8.335003235e-03f, -8.389310036e-03f, -8.443595641e-03f, -8.497859958e-03f, -8.552102897e-03f, -8.606324366e-03f, -8.660524275e-03f, -8.714702534e-03f,
+-8.768859052e-03f, -8.822993738e-03f, -8.877106503e-03f, -8.931197254e-03f, -8.985265903e-03f, -9.039312359e-03f, -9.093336531e-03f, -9.147338329e-03f, -9.201317664e-03f, -9.255274444e-03f,
+-9.309208580e-03f, -9.363119983e-03f, -9.417008561e-03f, -9.470874225e-03f, -9.524716885e-03f, -9.578536451e-03f, -9.632332834e-03f, -9.686105943e-03f, -9.739855690e-03f, -9.793581983e-03f,
+-9.847284735e-03f, -9.900963855e-03f, -9.954619254e-03f, -1.000825084e-02f, -1.006185853e-02f, -1.011544223e-02f, -1.016900185e-02f, -1.022253730e-02f, -1.027604850e-02f, -1.032953535e-02f,
+-1.038299776e-02f, -1.043643565e-02f, -1.048984893e-02f, -1.054323751e-02f, -1.059660129e-02f, -1.064994020e-02f, -1.070325413e-02f, -1.075654301e-02f, -1.080980675e-02f, -1.086304525e-02f,
+-1.091625843e-02f, -1.096944619e-02f, -1.102260846e-02f, -1.107574514e-02f, -1.112885614e-02f, -1.118194138e-02f, -1.123500076e-02f, -1.128803421e-02f, -1.134104162e-02f, -1.139402292e-02f,
+-1.144697801e-02f, -1.149990681e-02f, -1.155280923e-02f, -1.160568519e-02f, -1.165853458e-02f, -1.171135733e-02f, -1.176415335e-02f, -1.181692255e-02f, -1.186966484e-02f, -1.192238014e-02f,
+-1.197506836e-02f, -1.202772941e-02f, -1.208036320e-02f, -1.213296965e-02f, -1.218554867e-02f, -1.223810017e-02f, -1.229062407e-02f, -1.234312027e-02f, -1.239558870e-02f, -1.244802926e-02f,
+-1.250044187e-02f, -1.255282643e-02f, -1.260518288e-02f, -1.265751111e-02f, -1.270981104e-02f, -1.276208258e-02f, -1.281432565e-02f, -1.286654017e-02f, -1.291872603e-02f, -1.297088317e-02f,
+-1.302301149e-02f, -1.307511091e-02f, -1.312718133e-02f, -1.317922268e-02f, -1.323123487e-02f, -1.328321781e-02f, -1.333517142e-02f, -1.338709560e-02f, -1.343899029e-02f, -1.349085538e-02f,
+-1.354269079e-02f, -1.359449644e-02f, -1.364627225e-02f, -1.369801812e-02f, -1.374973397e-02f, -1.380141972e-02f, -1.385307528e-02f, -1.390470056e-02f, -1.395629549e-02f, -1.400785997e-02f,
+-1.405939392e-02f, -1.411089725e-02f, -1.416236989e-02f, -1.421381174e-02f, -1.426522273e-02f, -1.431660276e-02f, -1.436795175e-02f, -1.441926962e-02f, -1.447055628e-02f, -1.452181165e-02f,
+-1.457303564e-02f, -1.462422818e-02f, -1.467538916e-02f, -1.472651852e-02f, -1.477761617e-02f, -1.482868202e-02f, -1.487971598e-02f, -1.493071799e-02f, -1.498168794e-02f, -1.503262576e-02f,
+-1.508353136e-02f, -1.513440467e-02f, -1.518524559e-02f, -1.523605404e-02f, -1.528682994e-02f, -1.533757321e-02f, -1.538828376e-02f, -1.543896151e-02f, -1.548960638e-02f, -1.554021827e-02f,
+-1.559079712e-02f, -1.564134284e-02f, -1.569185534e-02f, -1.574233454e-02f, -1.579278035e-02f, -1.584319271e-02f, -1.589357151e-02f, -1.594391669e-02f, -1.599422815e-02f, -1.604450582e-02f,
+-1.609474961e-02f, -1.614495944e-02f, -1.619513523e-02f, -1.624527690e-02f, -1.629538436e-02f, -1.634545753e-02f, -1.639549633e-02f, -1.644550068e-02f, -1.649547050e-02f, -1.654540570e-02f,
+-1.659530620e-02f, -1.664517192e-02f, -1.669500279e-02f, -1.674479871e-02f, -1.679455960e-02f, -1.684428539e-02f, -1.689397600e-02f, -1.694363134e-02f, -1.699325133e-02f, -1.704283588e-02f,
+-1.709238493e-02f, -1.714189839e-02f, -1.719137617e-02f, -1.724081821e-02f, -1.729022440e-02f, -1.733959468e-02f, -1.738892897e-02f, -1.743822718e-02f, -1.748748924e-02f, -1.753671506e-02f,
+-1.758590456e-02f, -1.763505766e-02f, -1.768417429e-02f, -1.773325436e-02f, -1.778229779e-02f, -1.783130450e-02f, -1.788027442e-02f, -1.792920746e-02f, -1.797810354e-02f, -1.802696259e-02f,
+-1.807578452e-02f, -1.812456926e-02f, -1.817331672e-02f, -1.822202683e-02f, -1.827069950e-02f, -1.831933466e-02f, -1.836793223e-02f, -1.841649213e-02f, -1.846501427e-02f, -1.851349859e-02f,
+-1.856194500e-02f, -1.861035343e-02f, -1.865872379e-02f, -1.870705601e-02f, -1.875535000e-02f, -1.880360569e-02f, -1.885182301e-02f, -1.890000187e-02f, -1.894814219e-02f, -1.899624390e-02f,
+-1.904430691e-02f, -1.909233116e-02f, -1.914031656e-02f, -1.918826303e-02f, -1.923617050e-02f, -1.928403889e-02f, -1.933186812e-02f, -1.937965811e-02f, -1.942740879e-02f, -1.947512008e-02f,
+-1.952279190e-02f, -1.957042418e-02f, -1.961801683e-02f, -1.966556978e-02f, -1.971308296e-02f, -1.976055628e-02f, -1.980798967e-02f, -1.985538305e-02f, -1.990273635e-02f, -1.995004949e-02f,
+-1.999732239e-02f, -2.004455498e-02f, -2.009174717e-02f, -2.013889891e-02f, -2.018601009e-02f, -2.023308066e-02f, -2.028011054e-02f, -2.032709964e-02f, -2.037404789e-02f, -2.042095523e-02f,
+-2.046782156e-02f, -2.051464682e-02f, -2.056143094e-02f, -2.060817382e-02f, -2.065487541e-02f, -2.070153562e-02f, -2.074815437e-02f, -2.079473161e-02f, -2.084126724e-02f, -2.088776119e-02f,
+-2.093421339e-02f, -2.098062377e-02f, -2.102699224e-02f, -2.107331874e-02f, -2.111960319e-02f, -2.116584551e-02f, -2.121204563e-02f, -2.125820348e-02f, -2.130431898e-02f, -2.135039206e-02f,
+-2.139642264e-02f, -2.144241066e-02f, -2.148835602e-02f, -2.153425867e-02f, -2.158011853e-02f, -2.162593552e-02f, -2.167170957e-02f, -2.171744060e-02f, -2.176312855e-02f, -2.180877334e-02f,
+-2.185437490e-02f, -2.189993315e-02f, -2.194544802e-02f, -2.199091943e-02f, -2.203634732e-02f, -2.208173162e-02f, -2.212707224e-02f, -2.217236911e-02f, -2.221762217e-02f, -2.226283134e-02f,
+-2.230799655e-02f, -2.235311772e-02f, -2.239819478e-02f, -2.244322767e-02f, -2.248821631e-02f, -2.253316062e-02f, -2.257806054e-02f, -2.262291599e-02f, -2.266772690e-02f, -2.271249320e-02f,
+-2.275721481e-02f, -2.280189168e-02f, -2.284652372e-02f, -2.289111086e-02f, -2.293565304e-02f, -2.298015017e-02f, -2.302460220e-02f, -2.306900904e-02f, -2.311337063e-02f, -2.315768690e-02f,
+-2.320195778e-02f, -2.324618319e-02f, -2.329036306e-02f, -2.333449733e-02f, -2.337858592e-02f, -2.342262877e-02f, -2.346662580e-02f, -2.351057694e-02f, -2.355448213e-02f, -2.359834129e-02f,
+-2.364215435e-02f, -2.368592125e-02f, -2.372964191e-02f, -2.377331626e-02f, -2.381694424e-02f, -2.386052577e-02f, -2.390406079e-02f, -2.394754922e-02f, -2.399099100e-02f, -2.403438606e-02f,
+-2.407773433e-02f, -2.412103574e-02f, -2.416429022e-02f, -2.420749770e-02f, -2.425065811e-02f, -2.429377139e-02f, -2.433683747e-02f, -2.437985627e-02f, -2.442282774e-02f, -2.446575180e-02f,
+-2.450862838e-02f, -2.455145741e-02f, -2.459423883e-02f, -2.463697258e-02f, -2.467965857e-02f, -2.472229675e-02f, -2.476488704e-02f, -2.480742939e-02f, -2.484992371e-02f, -2.489236995e-02f,
+-2.493476804e-02f, -2.497711791e-02f, -2.501941949e-02f, -2.506167271e-02f, -2.510387752e-02f, -2.514603383e-02f, -2.518814160e-02f, -2.523020074e-02f, -2.527221119e-02f, -2.531417289e-02f,
+-2.535608577e-02f, -2.539794977e-02f, -2.543976481e-02f, -2.548153083e-02f, -2.552324777e-02f, -2.556491555e-02f, -2.560653412e-02f, -2.564810341e-02f, -2.568962335e-02f, -2.573109388e-02f,
+-2.577251493e-02f, -2.581388644e-02f, -2.585520833e-02f, -2.589648056e-02f, -2.593770304e-02f, -2.597887572e-02f, -2.601999853e-02f, -2.606107141e-02f, -2.610209428e-02f, -2.614306710e-02f,
+-2.618398979e-02f, -2.622486229e-02f, -2.626568453e-02f, -2.630645645e-02f, -2.634717798e-02f, -2.638784907e-02f, -2.642846964e-02f, -2.646903964e-02f, -2.650955900e-02f, -2.655002766e-02f,
+-2.659044555e-02f, -2.663081261e-02f, -2.667112877e-02f, -2.671139398e-02f, -2.675160817e-02f, -2.679177128e-02f, -2.683188324e-02f, -2.687194399e-02f, -2.691195346e-02f, -2.695191161e-02f,
+-2.699181836e-02f, -2.703167364e-02f, -2.707147741e-02f, -2.711122959e-02f, -2.715093013e-02f, -2.719057895e-02f, -2.723017601e-02f, -2.726972123e-02f, -2.730921456e-02f, -2.734865594e-02f,
+-2.738804530e-02f, -2.742738257e-02f, -2.746666771e-02f, -2.750590065e-02f, -2.754508132e-02f, -2.758420967e-02f, -2.762328563e-02f, -2.766230915e-02f, -2.770128016e-02f, -2.774019860e-02f,
+-2.777906442e-02f, -2.781787754e-02f, -2.785663792e-02f, -2.789534549e-02f, -2.793400019e-02f, -2.797260195e-02f, -2.801115073e-02f, -2.804964646e-02f, -2.808808907e-02f, -2.812647852e-02f,
+-2.816481474e-02f, -2.820309767e-02f, -2.824132725e-02f, -2.827950342e-02f, -2.831762613e-02f, -2.835569531e-02f, -2.839371090e-02f, -2.843167285e-02f, -2.846958110e-02f, -2.850743558e-02f,
+-2.854523625e-02f, -2.858298303e-02f, -2.862067588e-02f, -2.865831473e-02f, -2.869589953e-02f, -2.873343021e-02f, -2.877090672e-02f, -2.880832901e-02f, -2.884569701e-02f, -2.888301066e-02f,
+-2.892026992e-02f, -2.895747471e-02f, -2.899462499e-02f, -2.903172069e-02f, -2.906876176e-02f, -2.910574814e-02f, -2.914267978e-02f, -2.917955661e-02f, -2.921637858e-02f, -2.925314564e-02f,
+-2.928985772e-02f, -2.932651478e-02f, -2.936311674e-02f, -2.939966357e-02f, -2.943615520e-02f, -2.947259157e-02f, -2.950897263e-02f, -2.954529832e-02f, -2.958156859e-02f, -2.961778338e-02f,
+-2.965394264e-02f, -2.969004630e-02f, -2.972609433e-02f, -2.976208665e-02f, -2.979802321e-02f, -2.983390397e-02f, -2.986972885e-02f, -2.990549782e-02f, -2.994121081e-02f, -2.997686777e-02f,
+-3.001246865e-02f, -3.004801338e-02f, -3.008350192e-02f, -3.011893422e-02f, -3.015431020e-02f, -3.018962984e-02f, -3.022489306e-02f, -3.026009981e-02f, -3.029525005e-02f, -3.033034372e-02f,
+-3.036538076e-02f, -3.040036112e-02f, -3.043528474e-02f, -3.047015158e-02f, -3.050496159e-02f, -3.053971469e-02f, -3.057441086e-02f, -3.060905002e-02f, -3.064363214e-02f, -3.067815715e-02f,
+-3.071262500e-02f, -3.074703564e-02f, -3.078138903e-02f, -3.081568510e-02f, -3.084992380e-02f, -3.088410509e-02f, -3.091822891e-02f, -3.095229520e-02f, -3.098630393e-02f, -3.102025502e-02f,
+-3.105414845e-02f, -3.108798414e-02f, -3.112176206e-02f, -3.115548214e-02f, -3.118914434e-02f, -3.122274862e-02f, -3.125629490e-02f, -3.128978316e-02f, -3.132321333e-02f, -3.135658536e-02f,
+-3.138989921e-02f, -3.142315482e-02f, -3.145635215e-02f, -3.148949114e-02f, -3.152257174e-02f, -3.155559391e-02f, -3.158855759e-02f, -3.162146274e-02f, -3.165430929e-02f, -3.168709722e-02f,
+-3.171982646e-02f, -3.175249696e-02f, -3.178510869e-02f, -3.181766158e-02f, -3.185015559e-02f, -3.188259067e-02f, -3.191496677e-02f, -3.194728384e-02f, -3.197954184e-02f, -3.201174071e-02f,
+-3.204388041e-02f, -3.207596089e-02f, -3.210798210e-02f, -3.213994400e-02f, -3.217184652e-02f, -3.220368964e-02f, -3.223547330e-02f, -3.226719744e-02f, -3.229886204e-02f, -3.233046703e-02f,
+-3.236201236e-02f, -3.239349801e-02f, -3.242492390e-02f, -3.245629001e-02f, -3.248759628e-02f, -3.251884266e-02f, -3.255002911e-02f, -3.258115559e-02f, -3.261222204e-02f, -3.264322842e-02f,
+-3.267417468e-02f, -3.270506078e-02f, -3.273588667e-02f, -3.276665231e-02f, -3.279735764e-02f, -3.282800263e-02f, -3.285858723e-02f, -3.288911139e-02f, -3.291957507e-02f, -3.294997822e-02f,
+-3.298032080e-02f, -3.301060276e-02f, -3.304082406e-02f, -3.307098465e-02f, -3.310108449e-02f, -3.313112354e-02f, -3.316110174e-02f, -3.319101906e-02f, -3.322087545e-02f, -3.325067086e-02f,
+-3.328040526e-02f, -3.331007860e-02f, -3.333969083e-02f, -3.336924191e-02f, -3.339873180e-02f, -3.342816046e-02f, -3.345752783e-02f, -3.348683388e-02f, -3.351607857e-02f, -3.354526185e-02f,
+-3.357438368e-02f, -3.360344401e-02f, -3.363244281e-02f, -3.366138003e-02f, -3.369025563e-02f, -3.371906956e-02f, -3.374782179e-02f, -3.377651226e-02f, -3.380514095e-02f, -3.383370781e-02f,
+-3.386221279e-02f, -3.389065585e-02f, -3.391903696e-02f, -3.394735607e-02f, -3.397561314e-02f, -3.400380813e-02f, -3.403194099e-02f, -3.406001170e-02f, -3.408802019e-02f, -3.411596645e-02f,
+-3.414385041e-02f, -3.417167205e-02f, -3.419943133e-02f, -3.422712819e-02f, -3.425476261e-02f, -3.428233454e-02f, -3.430984395e-02f, -3.433729078e-02f, -3.436467501e-02f, -3.439199660e-02f,
+-3.441925549e-02f, -3.444645166e-02f, -3.447358507e-02f, -3.450065567e-02f, -3.452766343e-02f, -3.455460830e-02f, -3.458149026e-02f, -3.460830925e-02f, -3.463506525e-02f, -3.466175821e-02f,
+-3.468838809e-02f, -3.471495486e-02f, -3.474145848e-02f, -3.476789890e-02f, -3.479427610e-02f, -3.482059003e-02f, -3.484684066e-02f, -3.487302795e-02f, -3.489915186e-02f, -3.492521235e-02f,
+-3.495120939e-02f, -3.497714293e-02f, -3.500301295e-02f, -3.502881941e-02f, -3.505456226e-02f, -3.508024147e-02f, -3.510585701e-02f, -3.513140884e-02f, -3.515689692e-02f, -3.518232121e-02f,
+-3.520768169e-02f, -3.523297831e-02f, -3.525821103e-02f, -3.528337983e-02f, -3.530848467e-02f, -3.533352550e-02f, -3.535850230e-02f, -3.538341503e-02f, -3.540826365e-02f, -3.543304814e-02f,
+-3.545776844e-02f, -3.548242454e-02f, -3.550701639e-02f, -3.553154396e-02f, -3.555600722e-02f, -3.558040613e-02f, -3.560474065e-02f, -3.562901076e-02f, -3.565321641e-02f, -3.567735758e-02f,
+-3.570143423e-02f, -3.572544632e-02f, -3.574939383e-02f, -3.577327672e-02f, -3.579709496e-02f, -3.582084850e-02f, -3.584453733e-02f, -3.586816140e-02f, -3.589172069e-02f, -3.591521515e-02f,
+-3.593864477e-02f, -3.596200950e-02f, -3.598530931e-02f, -3.600854418e-02f, -3.603171406e-02f, -3.605481893e-02f, -3.607785875e-02f, -3.610083349e-02f, -3.612374313e-02f, -3.614658762e-02f,
+-3.616936694e-02f, -3.619208105e-02f, -3.621472993e-02f, -3.623731354e-02f, -3.625983186e-02f, -3.628228484e-02f, -3.630467247e-02f, -3.632699470e-02f, -3.634925152e-02f, -3.637144288e-02f,
+-3.639356876e-02f, -3.641562912e-02f, -3.643762394e-02f, -3.645955319e-02f, -3.648141684e-02f, -3.650321486e-02f, -3.652494721e-02f, -3.654661387e-02f, -3.656821481e-02f, -3.658974999e-02f,
+-3.661121940e-02f, -3.663262300e-02f, -3.665396076e-02f, -3.667523265e-02f, -3.669643865e-02f, -3.671757872e-02f, -3.673865284e-02f, -3.675966098e-02f, -3.678060310e-02f, -3.680147919e-02f,
+-3.682228921e-02f, -3.684303314e-02f, -3.686371095e-02f, -3.688432260e-02f, -3.690486808e-02f, -3.692534736e-02f, -3.694576040e-02f, -3.696610718e-02f, -3.698638767e-02f, -3.700660185e-02f,
+-3.702674969e-02f, -3.704683117e-02f, -3.706684624e-02f, -3.708679490e-02f, -3.710667711e-02f, -3.712649285e-02f, -3.714624208e-02f, -3.716592480e-02f, -3.718554095e-02f, -3.720509053e-02f,
+-3.722457351e-02f, -3.724398986e-02f, -3.726333955e-02f, -3.728262257e-02f, -3.730183887e-02f, -3.732098845e-02f, -3.734007127e-02f, -3.735908731e-02f, -3.737803655e-02f, -3.739691895e-02f,
+-3.741573451e-02f, -3.743448318e-02f, -3.745316495e-02f, -3.747177979e-02f, -3.749032768e-02f, -3.750880859e-02f, -3.752722250e-02f, -3.754556939e-02f, -3.756384924e-02f, -3.758206201e-02f,
+-3.760020769e-02f, -3.761828625e-02f, -3.763629767e-02f, -3.765424193e-02f, -3.767211900e-02f, -3.768992886e-02f, -3.770767149e-02f, -3.772534687e-02f, -3.774295497e-02f, -3.776049577e-02f,
+-3.777796924e-02f, -3.779537538e-02f, -3.781271415e-02f, -3.782998553e-02f, -3.784718950e-02f, -3.786432604e-02f, -3.788139513e-02f, -3.789839675e-02f, -3.791533087e-02f, -3.793219748e-02f,
+-3.794899654e-02f, -3.796572805e-02f, -3.798239198e-02f, -3.799898832e-02f, -3.801551703e-02f, -3.803197810e-02f, -3.804837151e-02f, -3.806469724e-02f, -3.808095526e-02f, -3.809714557e-02f,
+-3.811326813e-02f, -3.812932294e-02f, -3.814530996e-02f, -3.816122919e-02f, -3.817708059e-02f, -3.819286416e-02f, -3.820857987e-02f, -3.822422770e-02f, -3.823980764e-02f, -3.825531966e-02f,
+-3.827076375e-02f, -3.828613989e-02f, -3.830144805e-02f, -3.831668823e-02f, -3.833186041e-02f, -3.834696456e-02f, -3.836200066e-02f, -3.837696871e-02f, -3.839186867e-02f, -3.840670055e-02f,
+-3.842146430e-02f, -3.843615993e-02f, -3.845078741e-02f, -3.846534673e-02f, -3.847983786e-02f, -3.849426080e-02f, -3.850861551e-02f, -3.852290200e-02f, -3.853712024e-02f, -3.855127021e-02f,
+-3.856535191e-02f, -3.857936530e-02f, -3.859331038e-02f, -3.860718713e-02f, -3.862099554e-02f, -3.863473558e-02f, -3.864840725e-02f, -3.866201052e-02f, -3.867554539e-02f, -3.868901184e-02f,
+-3.870240985e-02f, -3.871573940e-02f, -3.872900049e-02f, -3.874219309e-02f, -3.875531720e-02f, -3.876837280e-02f, -3.878135987e-02f, -3.879427840e-02f, -3.880712838e-02f, -3.881990979e-02f,
+-3.883262261e-02f, -3.884526684e-02f, -3.885784246e-02f, -3.887034946e-02f, -3.888278782e-02f, -3.889515753e-02f, -3.890745858e-02f, -3.891969095e-02f, -3.893185464e-02f, -3.894394962e-02f,
+-3.895597588e-02f, -3.896793342e-02f, -3.897982222e-02f, -3.899164227e-02f, -3.900339355e-02f, -3.901507606e-02f, -3.902668977e-02f, -3.903823469e-02f, -3.904971080e-02f, -3.906111808e-02f,
+-3.907245653e-02f, -3.908372613e-02f, -3.909492687e-02f, -3.910605874e-02f, -3.911712173e-02f, -3.912811584e-02f, -3.913904104e-02f, -3.914989732e-02f, -3.916068469e-02f, -3.917140312e-02f,
+-3.918205261e-02f, -3.919263314e-02f, -3.920314471e-02f, -3.921358730e-02f, -3.922396091e-02f, -3.923426553e-02f, -3.924450114e-02f, -3.925466775e-02f, -3.926476532e-02f, -3.927479387e-02f,
+-3.928475338e-02f, -3.929464384e-02f, -3.930446524e-02f, -3.931421757e-02f, -3.932390082e-02f, -3.933351500e-02f, -3.934306008e-02f, -3.935253605e-02f, -3.936194292e-02f, -3.937128068e-02f,
+-3.938054930e-02f, -3.938974880e-02f, -3.939887915e-02f, -3.940794035e-02f, -3.941693240e-02f, -3.942585529e-02f, -3.943470900e-02f, -3.944349354e-02f, -3.945220889e-02f, -3.946085506e-02f,
+-3.946943202e-02f, -3.947793978e-02f, -3.948637833e-02f, -3.949474766e-02f, -3.950304777e-02f, -3.951127865e-02f, -3.951944029e-02f, -3.952753269e-02f, -3.953555584e-02f, -3.954350974e-02f,
+-3.955139438e-02f, -3.955920976e-02f, -3.956695586e-02f, -3.957463270e-02f, -3.958224025e-02f, -3.958977852e-02f, -3.959724750e-02f, -3.960464718e-02f, -3.961197756e-02f, -3.961923865e-02f,
+-3.962643042e-02f, -3.963355288e-02f, -3.964060603e-02f, -3.964758986e-02f, -3.965450436e-02f, -3.966134953e-02f, -3.966812538e-02f, -3.967483189e-02f, -3.968146906e-02f, -3.968803689e-02f,
+-3.969453537e-02f, -3.970096451e-02f, -3.970732430e-02f, -3.971361473e-02f, -3.971983581e-02f, -3.972598753e-02f, -3.973206989e-02f, -3.973808288e-02f, -3.974402651e-02f, -3.974990077e-02f,
+-3.975570567e-02f, -3.976144119e-02f, -3.976710734e-02f, -3.977270411e-02f, -3.977823151e-02f, -3.978368953e-02f, -3.978907817e-02f, -3.979439743e-02f, -3.979964731e-02f, -3.980482781e-02f,
+-3.980993892e-02f, -3.981498065e-02f, -3.981995300e-02f, -3.982485597e-02f, -3.982968955e-02f, -3.983445374e-02f, -3.983914855e-02f, -3.984377398e-02f, -3.984833002e-02f, -3.985281668e-02f,
+-3.985723395e-02f, -3.986158184e-02f, -3.986586035e-02f, -3.987006948e-02f, -3.987420922e-02f, -3.987827959e-02f, -3.988228057e-02f, -3.988621218e-02f, -3.989007442e-02f, -3.989386727e-02f,
+-3.989759076e-02f, -3.990124487e-02f, -3.990482962e-02f, -3.990834500e-02f, -3.991179101e-02f, -3.991516766e-02f, -3.991847495e-02f, -3.992171288e-02f, -3.992488145e-02f, -3.992798067e-02f,
+-3.993101054e-02f, -3.993397106e-02f, -3.993686224e-02f, -3.993968408e-02f, -3.994243658e-02f, -3.994511975e-02f, -3.994773358e-02f, -3.995027809e-02f, -3.995275327e-02f, -3.995515913e-02f,
+-3.995749568e-02f, -3.995976291e-02f, -3.996196084e-02f, -3.996408947e-02f, -3.996614879e-02f, -3.996813882e-02f, -3.997005957e-02f, -3.997191102e-02f, -3.997369320e-02f, -3.997540611e-02f,
+-3.997704974e-02f, -3.997862411e-02f, -3.998012922e-02f, -3.998156508e-02f, -3.998293169e-02f, -3.998422906e-02f, -3.998545719e-02f, -3.998661609e-02f, -3.998770577e-02f, -3.998872623e-02f,
+-3.998967748e-02f, -3.999055952e-02f, -3.999137237e-02f, -3.999211602e-02f, -3.999279049e-02f, -3.999339579e-02f, -3.999393191e-02f, -3.999439887e-02f, -3.999479667e-02f, -3.999512532e-02f,
+-3.999538483e-02f, -3.999557521e-02f, -3.999569646e-02f, -3.999574859e-02f, -3.999573162e-02f, -3.999564554e-02f, -3.999549037e-02f, -3.999526611e-02f, -3.999497278e-02f, -3.999461037e-02f,
+-3.999417891e-02f, -3.999367840e-02f, -3.999310884e-02f, -3.999247026e-02f, -3.999176265e-02f, -3.999098602e-02f, -3.999014039e-02f, -3.998922576e-02f, -3.998824215e-02f, -3.998718957e-02f,
+-3.998606801e-02f, -3.998487750e-02f, -3.998361805e-02f, -3.998228966e-02f, -3.998089234e-02f, -3.997942611e-02f, -3.997789097e-02f, -3.997628694e-02f, -3.997461403e-02f, -3.997287225e-02f,
+-3.997106160e-02f, -3.996918211e-02f, -3.996723377e-02f, -3.996521661e-02f, -3.996313064e-02f, -3.996097586e-02f, -3.995875228e-02f, -3.995645993e-02f, -3.995409881e-02f, -3.995166894e-02f,
+-3.994917031e-02f, -3.994660296e-02f, -3.994396689e-02f, -3.994126211e-02f, -3.993848864e-02f, -3.993564649e-02f, -3.993273567e-02f, -3.992975619e-02f, -3.992670807e-02f, -3.992359132e-02f,
+-3.992040596e-02f, -3.991715200e-02f, -3.991382944e-02f, -3.991043832e-02f, -3.990697863e-02f, -3.990345039e-02f, -3.989985363e-02f, -3.989618834e-02f, -3.989245455e-02f, -3.988865227e-02f,
+-3.988478151e-02f, -3.988084230e-02f, -3.987683464e-02f, -3.987275854e-02f, -3.986861403e-02f, -3.986440113e-02f, -3.986011983e-02f, -3.985577017e-02f, -3.985135215e-02f, -3.984686579e-02f,
+-3.984231110e-02f, -3.983768811e-02f, -3.983299683e-02f, -3.982823727e-02f, -3.982340946e-02f, -3.981851340e-02f, -3.981354911e-02f, -3.980851661e-02f, -3.980341592e-02f, -3.979824705e-02f,
+-3.979301002e-02f, -3.978770485e-02f, -3.978233155e-02f, -3.977689015e-02f, -3.977138065e-02f, -3.976580307e-02f, -3.976015744e-02f, -3.975444378e-02f, -3.974866209e-02f, -3.974281239e-02f,
+-3.973689471e-02f, -3.973090907e-02f, -3.972485547e-02f, -3.971873395e-02f, -3.971254451e-02f, -3.970628718e-02f, -3.969996197e-02f, -3.969356891e-02f, -3.968710801e-02f, -3.968057929e-02f,
+-3.967398277e-02f, -3.966731848e-02f, -3.966058642e-02f, -3.965378662e-02f, -3.964691910e-02f, -3.963998388e-02f, -3.963298097e-02f, -3.962591041e-02f, -3.961877220e-02f, -3.961156637e-02f,
+-3.960429294e-02f, -3.959695193e-02f, -3.958954335e-02f, -3.958206724e-02f, -3.957452361e-02f, -3.956691248e-02f, -3.955923387e-02f, -3.955148781e-02f, -3.954367431e-02f, -3.953579340e-02f,
+-3.952784509e-02f, -3.951982942e-02f, -3.951174639e-02f, -3.950359604e-02f, -3.949537838e-02f, -3.948709344e-02f, -3.947874123e-02f, -3.947032179e-02f, -3.946183513e-02f, -3.945328127e-02f,
+-3.944466025e-02f, -3.943597207e-02f, -3.942721677e-02f, -3.941839436e-02f, -3.940950487e-02f, -3.940054833e-02f, -3.939152475e-02f, -3.938243416e-02f, -3.937327658e-02f, -3.936405204e-02f,
+-3.935476055e-02f, -3.934540215e-02f, -3.933597686e-02f, -3.932648470e-02f, -3.931692569e-02f, -3.930729987e-02f, -3.929760724e-02f, -3.928784785e-02f, -3.927802171e-02f, -3.926812884e-02f,
+-3.925816928e-02f, -3.924814305e-02f, -3.923805017e-02f, -3.922789066e-02f, -3.921766456e-02f, -3.920737188e-02f, -3.919701266e-02f, -3.918658692e-02f, -3.917609468e-02f, -3.916553598e-02f,
+-3.915491083e-02f, -3.914421926e-02f, -3.913346130e-02f, -3.912263697e-02f, -3.911174631e-02f, -3.910078933e-02f, -3.908976607e-02f, -3.907867655e-02f, -3.906752080e-02f, -3.905629884e-02f,
+-3.904501070e-02f, -3.903365641e-02f, -3.902223600e-02f, -3.901074948e-02f, -3.899919690e-02f, -3.898757828e-02f, -3.897589365e-02f, -3.896414302e-02f, -3.895232644e-02f, -3.894044393e-02f,
+-3.892849552e-02f, -3.891648123e-02f, -3.890440109e-02f, -3.889225514e-02f, -3.888004340e-02f, -3.886776590e-02f, -3.885542267e-02f, -3.884301373e-02f, -3.883053912e-02f, -3.881799887e-02f,
+-3.880539300e-02f, -3.879272155e-02f, -3.877998453e-02f, -3.876718200e-02f, -3.875431396e-02f, -3.874138046e-02f, -3.872838151e-02f, -3.871531717e-02f, -3.870218744e-02f, -3.868899236e-02f,
+-3.867573197e-02f, -3.866240629e-02f, -3.864901536e-02f, -3.863555920e-02f, -3.862203784e-02f, -3.860845132e-02f, -3.859479967e-02f, -3.858108291e-02f, -3.856730109e-02f, -3.855345422e-02f,
+-3.853954234e-02f, -3.852556549e-02f, -3.851152370e-02f, -3.849741698e-02f, -3.848324539e-02f, -3.846900895e-02f, -3.845470769e-02f, -3.844034164e-02f, -3.842591084e-02f, -3.841141532e-02f,
+-3.839685511e-02f, -3.838223025e-02f, -3.836754076e-02f, -3.835278668e-02f, -3.833796804e-02f, -3.832308488e-02f, -3.830813722e-02f, -3.829312511e-02f, -3.827804857e-02f, -3.826290764e-02f,
+-3.824770236e-02f, -3.823243274e-02f, -3.821709884e-02f, -3.820170068e-02f, -3.818623829e-02f, -3.817071172e-02f, -3.815512099e-02f, -3.813946615e-02f, -3.812374721e-02f, -3.810796422e-02f,
+-3.809211722e-02f, -3.807620623e-02f, -3.806023130e-02f, -3.804419245e-02f, -3.802808973e-02f, -3.801192316e-02f, -3.799569278e-02f, -3.797939864e-02f, -3.796304075e-02f, -3.794661917e-02f,
+-3.793013392e-02f, -3.791358504e-02f, -3.789697256e-02f, -3.788029653e-02f, -3.786355698e-02f, -3.784675394e-02f, -3.782988745e-02f, -3.781295754e-02f, -3.779596426e-02f, -3.777890764e-02f,
+-3.776178772e-02f, -3.774460453e-02f, -3.772735811e-02f, -3.771004850e-02f, -3.769267573e-02f, -3.767523985e-02f, -3.765774088e-02f, -3.764017887e-02f, -3.762255385e-02f, -3.760486587e-02f,
+-3.758711495e-02f, -3.756930114e-02f, -3.755142448e-02f, -3.753348500e-02f, -3.751548274e-02f, -3.749741774e-02f, -3.747929004e-02f, -3.746109967e-02f, -3.744284668e-02f, -3.742453110e-02f,
+-3.740615298e-02f, -3.738771234e-02f, -3.736920924e-02f, -3.735064370e-02f, -3.733201578e-02f, -3.731332550e-02f, -3.729457290e-02f, -3.727575804e-02f, -3.725688094e-02f, -3.723794164e-02f,
+-3.721894019e-02f, -3.719987663e-02f, -3.718075099e-02f, -3.716156332e-02f, -3.714231365e-02f, -3.712300203e-02f, -3.710362850e-02f, -3.708419309e-02f, -3.706469585e-02f, -3.704513682e-02f,
+-3.702551603e-02f, -3.700583354e-02f, -3.698608938e-02f, -3.696628359e-02f, -3.694641621e-02f, -3.692648729e-02f, -3.690649686e-02f, -3.688644497e-02f, -3.686633166e-02f, -3.684615697e-02f,
+-3.682592095e-02f, -3.680562363e-02f, -3.678526505e-02f, -3.676484526e-02f, -3.674436431e-02f, -3.672382222e-02f, -3.670321906e-02f, -3.668255485e-02f, -3.666182964e-02f, -3.664104347e-02f,
+-3.662019639e-02f, -3.659928844e-02f, -3.657831967e-02f, -3.655729011e-02f, -3.653619980e-02f, -3.651504880e-02f, -3.649383714e-02f, -3.647256488e-02f, -3.645123204e-02f, -3.642983868e-02f,
+-3.640838484e-02f, -3.638687056e-02f, -3.636529590e-02f, -3.634366088e-02f, -3.632196556e-02f, -3.630020998e-02f, -3.627839419e-02f, -3.625651822e-02f, -3.623458213e-02f, -3.621258596e-02f,
+-3.619052975e-02f, -3.616841354e-02f, -3.614623740e-02f, -3.612400135e-02f, -3.610170544e-02f, -3.607934972e-02f, -3.605693424e-02f, -3.603445904e-02f, -3.601192416e-02f, -3.598932965e-02f,
+-3.596667556e-02f, -3.594396193e-02f, -3.592118881e-02f, -3.589835624e-02f, -3.587546428e-02f, -3.585251296e-02f, -3.582950234e-02f, -3.580643245e-02f, -3.578330335e-02f, -3.576011509e-02f,
+-3.573686770e-02f, -3.571356124e-02f, -3.569019576e-02f, -3.566677129e-02f, -3.564328789e-02f, -3.561974561e-02f, -3.559614449e-02f, -3.557248458e-02f, -3.554876592e-02f, -3.552498857e-02f,
+-3.550115258e-02f, -3.547725798e-02f, -3.545330483e-02f, -3.542929317e-02f, -3.540522306e-02f, -3.538109455e-02f, -3.535690767e-02f, -3.533266248e-02f, -3.530835903e-02f, -3.528399736e-02f,
+-3.525957753e-02f, -3.523509958e-02f, -3.521056357e-02f, -3.518596953e-02f, -3.516131753e-02f, -3.513660760e-02f, -3.511183980e-02f, -3.508701418e-02f, -3.506213079e-02f, -3.503718967e-02f,
+-3.501219088e-02f, -3.498713446e-02f, -3.496202047e-02f, -3.493684895e-02f, -3.491161996e-02f, -3.488633355e-02f, -3.486098976e-02f, -3.483558864e-02f, -3.481013026e-02f, -3.478461464e-02f,
+-3.475904186e-02f, -3.473341195e-02f, -3.470772497e-02f, -3.468198097e-02f, -3.465618000e-02f, -3.463032211e-02f, -3.460440735e-02f, -3.457843577e-02f, -3.455240743e-02f, -3.452632237e-02f,
+-3.450018066e-02f, -3.447398232e-02f, -3.444772743e-02f, -3.442141603e-02f, -3.439504818e-02f, -3.436862392e-02f, -3.434214331e-02f, -3.431560639e-02f, -3.428901323e-02f, -3.426236387e-02f,
+-3.423565837e-02f, -3.420889678e-02f, -3.418207915e-02f, -3.415520553e-02f, -3.412827598e-02f, -3.410129054e-02f, -3.407424928e-02f, -3.404715225e-02f, -3.401999949e-02f, -3.399279107e-02f,
+-3.396552702e-02f, -3.393820742e-02f, -3.391083231e-02f, -3.388340174e-02f, -3.385591577e-02f, -3.382837445e-02f, -3.380077784e-02f, -3.377312599e-02f, -3.374541895e-02f, -3.371765678e-02f,
+-3.368983953e-02f, -3.366196725e-02f, -3.363404001e-02f, -3.360605785e-02f, -3.357802083e-02f, -3.354992901e-02f, -3.352178243e-02f, -3.349358115e-02f, -3.346532524e-02f, -3.343701473e-02f,
+-3.340864970e-02f, -3.338023018e-02f, -3.335175625e-02f, -3.332322795e-02f, -3.329464533e-02f, -3.326600846e-02f, -3.323731739e-02f, -3.320857218e-02f, -3.317977287e-02f, -3.315091954e-02f,
+-3.312201222e-02f, -3.309305099e-02f, -3.306403589e-02f, -3.303496697e-02f, -3.300584431e-02f, -3.297666795e-02f, -3.294743795e-02f, -3.291815436e-02f, -3.288881725e-02f, -3.285942667e-02f,
+-3.282998267e-02f, -3.280048532e-02f, -3.277093466e-02f, -3.274133076e-02f, -3.271167368e-02f, -3.268196347e-02f, -3.265220018e-02f, -3.262238388e-02f, -3.259251463e-02f, -3.256259247e-02f,
+-3.253261747e-02f, -3.250258969e-02f, -3.247250918e-02f, -3.244237600e-02f, -3.241219021e-02f, -3.238195187e-02f, -3.235166103e-02f, -3.232131776e-02f, -3.229092211e-02f, -3.226047413e-02f,
+-3.222997390e-02f, -3.219942146e-02f, -3.216881688e-02f, -3.213816021e-02f, -3.210745152e-02f, -3.207669085e-02f, -3.204587828e-02f, -3.201501386e-02f, -3.198409764e-02f, -3.195312970e-02f,
+-3.192211008e-02f, -3.189103884e-02f, -3.185991605e-02f, -3.182874177e-02f, -3.179751605e-02f, -3.176623896e-02f, -3.173491055e-02f, -3.170353088e-02f, -3.167210002e-02f, -3.164061802e-02f,
+-3.160908495e-02f, -3.157750086e-02f, -3.154586581e-02f, -3.151417987e-02f, -3.148244310e-02f, -3.145065554e-02f, -3.141881728e-02f, -3.138692836e-02f, -3.135498885e-02f, -3.132299880e-02f,
+-3.129095829e-02f, -3.125886736e-02f, -3.122672609e-02f, -3.119453452e-02f, -3.116229273e-02f, -3.113000078e-02f, -3.109765872e-02f, -3.106526661e-02f, -3.103282453e-02f, -3.100033253e-02f,
+-3.096779066e-02f, -3.093519900e-02f, -3.090255761e-02f, -3.086986654e-02f, -3.083712586e-02f, -3.080433564e-02f, -3.077149592e-02f, -3.073860678e-02f, -3.070566828e-02f, -3.067268048e-02f,
+-3.063964344e-02f, -3.060655723e-02f, -3.057342191e-02f, -3.054023753e-02f, -3.050700417e-02f, -3.047372188e-02f, -3.044039073e-02f, -3.040701079e-02f, -3.037358211e-02f, -3.034010475e-02f,
+-3.030657879e-02f, -3.027300428e-02f, -3.023938129e-02f, -3.020570988e-02f, -3.017199012e-02f, -3.013822206e-02f, -3.010440577e-02f, -3.007054132e-02f, -3.003662877e-02f, -3.000266819e-02f,
+-2.996865963e-02f, -2.993460316e-02f, -2.990049884e-02f, -2.986634675e-02f, -2.983214694e-02f, -2.979789948e-02f, -2.976360443e-02f, -2.972926185e-02f, -2.969487182e-02f, -2.966043440e-02f,
+-2.962594964e-02f, -2.959141762e-02f, -2.955683840e-02f, -2.952221205e-02f, -2.948753863e-02f, -2.945281820e-02f, -2.941805083e-02f, -2.938323659e-02f, -2.934837554e-02f, -2.931346775e-02f,
+-2.927851328e-02f, -2.924351219e-02f, -2.920846456e-02f, -2.917337045e-02f, -2.913822992e-02f, -2.910304304e-02f, -2.906780988e-02f, -2.903253050e-02f, -2.899720496e-02f, -2.896183335e-02f,
+-2.892641571e-02f, -2.889095211e-02f, -2.885544264e-02f, -2.881988733e-02f, -2.878428628e-02f, -2.874863954e-02f, -2.871294717e-02f, -2.867720925e-02f, -2.864142585e-02f, -2.860559702e-02f,
+-2.856972284e-02f, -2.853380337e-02f, -2.849783868e-02f, -2.846182883e-02f, -2.842577390e-02f, -2.838967395e-02f, -2.835352905e-02f, -2.831733927e-02f, -2.828110467e-02f, -2.824482532e-02f,
+-2.820850128e-02f, -2.817213263e-02f, -2.813571944e-02f, -2.809926177e-02f, -2.806275968e-02f, -2.802621326e-02f, -2.798962256e-02f, -2.795298765e-02f, -2.791630860e-02f, -2.787958548e-02f,
+-2.784281836e-02f, -2.780600731e-02f, -2.776915239e-02f, -2.773225367e-02f, -2.769531122e-02f, -2.765832512e-02f, -2.762129542e-02f, -2.758422220e-02f, -2.754710552e-02f, -2.750994546e-02f,
+-2.747274208e-02f, -2.743549546e-02f, -2.739820566e-02f, -2.736087275e-02f, -2.732349679e-02f, -2.728607787e-02f, -2.724861605e-02f, -2.721111139e-02f, -2.717356398e-02f, -2.713597387e-02f,
+-2.709834113e-02f, -2.706066584e-02f, -2.702294807e-02f, -2.698518788e-02f, -2.694738535e-02f, -2.690954055e-02f, -2.687165354e-02f, -2.683372439e-02f, -2.679575319e-02f, -2.675773998e-02f,
+-2.671968485e-02f, -2.668158787e-02f, -2.664344911e-02f, -2.660526863e-02f, -2.656704651e-02f, -2.652878282e-02f, -2.649047763e-02f, -2.645213100e-02f, -2.641374302e-02f, -2.637531375e-02f,
+-2.633684325e-02f, -2.629833162e-02f, -2.625977890e-02f, -2.622118518e-02f, -2.618255053e-02f, -2.614387501e-02f, -2.610515870e-02f, -2.606640167e-02f, -2.602760399e-02f, -2.598876573e-02f,
+-2.594988697e-02f, -2.591096777e-02f, -2.587200821e-02f, -2.583300836e-02f, -2.579396829e-02f, -2.575488807e-02f, -2.571576777e-02f, -2.567660747e-02f, -2.563740724e-02f, -2.559816715e-02f,
+-2.555888727e-02f, -2.551956767e-02f, -2.548020843e-02f, -2.544080962e-02f, -2.540137131e-02f, -2.536189357e-02f, -2.532237648e-02f, -2.528282011e-02f, -2.524322453e-02f, -2.520358981e-02f,
+-2.516391603e-02f, -2.512420325e-02f, -2.508445156e-02f, -2.504466102e-02f, -2.500483172e-02f, -2.496496371e-02f, -2.492505707e-02f, -2.488511188e-02f, -2.484512821e-02f, -2.480510614e-02f,
+-2.476504573e-02f, -2.472494706e-02f, -2.468481020e-02f, -2.464463523e-02f, -2.460442222e-02f, -2.456417124e-02f, -2.452388237e-02f, -2.448355568e-02f, -2.444319125e-02f, -2.440278914e-02f,
+-2.436234944e-02f, -2.432187221e-02f, -2.428135753e-02f, -2.424080548e-02f, -2.420021612e-02f, -2.415958954e-02f, -2.411892580e-02f, -2.407822498e-02f, -2.403748716e-02f, -2.399671241e-02f,
+-2.395590080e-02f, -2.391505241e-02f, -2.387416731e-02f, -2.383324558e-02f, -2.379228729e-02f, -2.375129252e-02f, -2.371026133e-02f, -2.366919382e-02f, -2.362809004e-02f, -2.358695008e-02f,
+-2.354577401e-02f, -2.350456191e-02f, -2.346331385e-02f, -2.342202990e-02f, -2.338071014e-02f, -2.333935465e-02f, -2.329796351e-02f, -2.325653677e-02f, -2.321507453e-02f, -2.317357686e-02f,
+-2.313204383e-02f, -2.309047552e-02f, -2.304887200e-02f, -2.300723336e-02f, -2.296555965e-02f, -2.292385097e-02f, -2.288210739e-02f, -2.284032898e-02f, -2.279851581e-02f, -2.275666798e-02f,
+-2.271478554e-02f, -2.267286858e-02f, -2.263091717e-02f, -2.258893139e-02f, -2.254691131e-02f, -2.250485702e-02f, -2.246276858e-02f, -2.242064608e-02f, -2.237848959e-02f, -2.233629918e-02f,
+-2.229407494e-02f, -2.225181693e-02f, -2.220952525e-02f, -2.216719995e-02f, -2.212484113e-02f, -2.208244885e-02f, -2.204002319e-02f, -2.199756424e-02f, -2.195507206e-02f, -2.191254673e-02f,
+-2.186998834e-02f, -2.182739695e-02f, -2.178477265e-02f, -2.174211551e-02f, -2.169942561e-02f, -2.165670303e-02f, -2.161394784e-02f, -2.157116012e-02f, -2.152833995e-02f, -2.148548740e-02f,
+-2.144260256e-02f, -2.139968549e-02f, -2.135673629e-02f, -2.131375502e-02f, -2.127074177e-02f, -2.122769660e-02f, -2.118461961e-02f, -2.114151086e-02f, -2.109837043e-02f, -2.105519841e-02f,
+-2.101199487e-02f, -2.096875989e-02f, -2.092549354e-02f, -2.088219590e-02f, -2.083886706e-02f, -2.079550709e-02f, -2.075211607e-02f, -2.070869407e-02f, -2.066524118e-02f, -2.062175748e-02f,
+-2.057824303e-02f, -2.053469793e-02f, -2.049112224e-02f, -2.044751605e-02f, -2.040387944e-02f, -2.036021248e-02f, -2.031651525e-02f, -2.027278784e-02f, -2.022903031e-02f, -2.018524276e-02f,
+-2.014142525e-02f, -2.009757787e-02f, -2.005370069e-02f, -2.000979380e-02f, -1.996585727e-02f, -1.992189119e-02f, -1.987789562e-02f, -1.983387066e-02f, -1.978981637e-02f, -1.974573285e-02f,
+-1.970162016e-02f, -1.965747839e-02f, -1.961330762e-02f, -1.956910792e-02f, -1.952487938e-02f, -1.948062207e-02f, -1.943633608e-02f, -1.939202148e-02f, -1.934767835e-02f, -1.930330678e-02f,
+-1.925890684e-02f, -1.921447861e-02f, -1.917002218e-02f, -1.912553761e-02f, -1.908102500e-02f, -1.903648441e-02f, -1.899191594e-02f, -1.894731966e-02f, -1.890269565e-02f, -1.885804399e-02f,
+-1.881336476e-02f, -1.876865804e-02f, -1.872392392e-02f, -1.867916246e-02f, -1.863437376e-02f, -1.858955788e-02f, -1.854471492e-02f, -1.849984495e-02f, -1.845494806e-02f, -1.841002431e-02f,
+-1.836507380e-02f, -1.832009660e-02f, -1.827509280e-02f, -1.823006247e-02f, -1.818500569e-02f, -1.813992255e-02f, -1.809481313e-02f, -1.804967750e-02f, -1.800451575e-02f, -1.795932796e-02f,
+-1.791411421e-02f, -1.786887458e-02f, -1.782360915e-02f, -1.777831800e-02f, -1.773300121e-02f, -1.768765886e-02f, -1.764229104e-02f, -1.759689783e-02f, -1.755147930e-02f, -1.750603553e-02f,
+-1.746056662e-02f, -1.741507264e-02f, -1.736955366e-02f, -1.732400978e-02f, -1.727844107e-02f, -1.723284762e-02f, -1.718722950e-02f, -1.714158680e-02f, -1.709591959e-02f, -1.705022797e-02f,
+-1.700451201e-02f, -1.695877179e-02f, -1.691300739e-02f, -1.686721890e-02f, -1.682140640e-02f, -1.677556997e-02f, -1.672970968e-02f, -1.668382563e-02f, -1.663791790e-02f, -1.659198656e-02f,
+-1.654603169e-02f, -1.650005339e-02f, -1.645405172e-02f, -1.640802678e-02f, -1.636197865e-02f, -1.631590740e-02f, -1.626981312e-02f, -1.622369589e-02f, -1.617755579e-02f, -1.613139290e-02f,
+-1.608520732e-02f, -1.603899911e-02f, -1.599276836e-02f, -1.594651516e-02f, -1.590023958e-02f, -1.585394171e-02f, -1.580762163e-02f, -1.576127942e-02f, -1.571491516e-02f, -1.566852894e-02f,
+-1.562212084e-02f, -1.557569094e-02f, -1.552923932e-02f, -1.548276607e-02f, -1.543627127e-02f, -1.538975500e-02f, -1.534321735e-02f, -1.529665839e-02f, -1.525007821e-02f, -1.520347689e-02f,
+-1.515685451e-02f, -1.511021116e-02f, -1.506354692e-02f, -1.501686187e-02f, -1.497015610e-02f, -1.492342968e-02f, -1.487668271e-02f, -1.482991525e-02f, -1.478312741e-02f, -1.473631925e-02f,
+-1.468949086e-02f, -1.464264233e-02f, -1.459577374e-02f, -1.454888516e-02f, -1.450197670e-02f, -1.445504841e-02f, -1.440810040e-02f, -1.436113274e-02f, -1.431414551e-02f, -1.426713881e-02f,
+-1.422011270e-02f, -1.417306728e-02f, -1.412600263e-02f, -1.407891883e-02f, -1.403181597e-02f, -1.398469413e-02f, -1.393755338e-02f, -1.389039382e-02f, -1.384321553e-02f, -1.379601859e-02f,
+-1.374880308e-02f, -1.370156910e-02f, -1.365431671e-02f, -1.360704601e-02f, -1.355975708e-02f, -1.351245000e-02f, -1.346512485e-02f, -1.341778173e-02f, -1.337042071e-02f, -1.332304187e-02f,
+-1.327564530e-02f, -1.322823109e-02f, -1.318079931e-02f, -1.313335006e-02f, -1.308588341e-02f, -1.303839944e-02f, -1.299089825e-02f, -1.294337992e-02f, -1.289584452e-02f, -1.284829214e-02f,
+-1.280072288e-02f, -1.275313680e-02f, -1.270553400e-02f, -1.265791456e-02f, -1.261027856e-02f, -1.256262608e-02f, -1.251495722e-02f, -1.246727205e-02f, -1.241957065e-02f, -1.237185312e-02f,
+-1.232411954e-02f, -1.227636999e-02f, -1.222860454e-02f, -1.218082330e-02f, -1.213302634e-02f, -1.208521375e-02f, -1.203738560e-02f, -1.198954199e-02f, -1.194168300e-02f, -1.189380871e-02f,
+-1.184591921e-02f, -1.179801458e-02f, -1.175009491e-02f, -1.170216027e-02f, -1.165421076e-02f, -1.160624645e-02f, -1.155826744e-02f, -1.151027381e-02f, -1.146226563e-02f, -1.141424300e-02f,
+-1.136620600e-02f, -1.131815472e-02f, -1.127008923e-02f, -1.122200962e-02f, -1.117391598e-02f, -1.112580839e-02f, -1.107768694e-02f, -1.102955171e-02f, -1.098140278e-02f, -1.093324024e-02f,
+-1.088506418e-02f, -1.083687467e-02f, -1.078867181e-02f, -1.074045567e-02f, -1.069222635e-02f, -1.064398392e-02f, -1.059572847e-02f, -1.054746008e-02f, -1.049917885e-02f, -1.045088485e-02f,
+-1.040257817e-02f, -1.035425889e-02f, -1.030592711e-02f, -1.025758289e-02f, -1.020922633e-02f, -1.016085752e-02f, -1.011247653e-02f, -1.006408345e-02f, -1.001567837e-02f, -9.967261369e-03f,
+-9.918832535e-03f, -9.870391951e-03f, -9.821939702e-03f, -9.773475874e-03f, -9.725000550e-03f, -9.676513816e-03f, -9.628015755e-03f, -9.579506455e-03f, -9.530985998e-03f, -9.482454469e-03f,
+-9.433911955e-03f, -9.385358538e-03f, -9.336794305e-03f, -9.288219340e-03f, -9.239633728e-03f, -9.191037554e-03f, -9.142430902e-03f, -9.093813858e-03f, -9.045186507e-03f, -8.996548933e-03f,
+-8.947901221e-03f, -8.899243457e-03f, -8.850575725e-03f, -8.801898110e-03f, -8.753210696e-03f, -8.704513570e-03f, -8.655806816e-03f, -8.607090519e-03f, -8.558364764e-03f, -8.509629636e-03f,
+-8.460885219e-03f, -8.412131600e-03f, -8.363368862e-03f, -8.314597091e-03f, -8.265816372e-03f, -8.217026790e-03f, -8.168228430e-03f, -8.119421377e-03f, -8.070605716e-03f, -8.021781532e-03f,
+-7.972948910e-03f, -7.924107935e-03f, -7.875258693e-03f, -7.826401268e-03f, -7.777535745e-03f, -7.728662209e-03f, -7.679780746e-03f, -7.630891441e-03f, -7.581994378e-03f, -7.533089643e-03f,
+-7.484177321e-03f, -7.435257497e-03f, -7.386330255e-03f, -7.337395682e-03f, -7.288453862e-03f, -7.239504881e-03f, -7.190548823e-03f, -7.141585773e-03f, -7.092615817e-03f, -7.043639040e-03f,
+-6.994655527e-03f, -6.945665363e-03f, -6.896668633e-03f, -6.847665422e-03f, -6.798655816e-03f, -6.749639899e-03f, -6.700617757e-03f, -6.651589475e-03f, -6.602555138e-03f, -6.553514831e-03f,
+-6.504468639e-03f, -6.455416647e-03f, -6.406358941e-03f, -6.357295605e-03f, -6.308226726e-03f, -6.259152387e-03f, -6.210072674e-03f, -6.160987673e-03f, -6.111897467e-03f, -6.062802144e-03f,
+-6.013701786e-03f, -5.964596481e-03f, -5.915486312e-03f, -5.866371366e-03f, -5.817251726e-03f, -5.768127479e-03f, -5.718998709e-03f, -5.669865502e-03f, -5.620727942e-03f, -5.571586115e-03f,
+-5.522440106e-03f, -5.473290000e-03f, -5.424135882e-03f, -5.374977837e-03f, -5.325815951e-03f, -5.276650308e-03f, -5.227480994e-03f, -5.178308093e-03f, -5.129131691e-03f, -5.079951873e-03f,
+-5.030768724e-03f, -4.981582329e-03f, -4.932392774e-03f, -4.883200142e-03f, -4.834004520e-03f, -4.784805992e-03f, -4.735604643e-03f, -4.686400559e-03f, -4.637193825e-03f, -4.587984525e-03f,
+-4.538772745e-03f, -4.489558569e-03f, -4.440342083e-03f, -4.391123372e-03f, -4.341902521e-03f, -4.292679615e-03f, -4.243454739e-03f, -4.194227977e-03f, -4.144999415e-03f, -4.095769139e-03f,
+-4.046537232e-03f, -3.997303779e-03f, -3.948068867e-03f, -3.898832580e-03f, -3.849595002e-03f, -3.800356219e-03f, -3.751116315e-03f, -3.701875377e-03f, -3.652633487e-03f, -3.603390733e-03f,
+-3.554147197e-03f, -3.504902966e-03f, -3.455658125e-03f, -3.406412757e-03f, -3.357166948e-03f, -3.307920783e-03f, -3.258674347e-03f, -3.209427725e-03f, -3.160181001e-03f, -3.110934260e-03f,
+-3.061687587e-03f, -3.012441068e-03f, -2.963194786e-03f, -2.913948826e-03f, -2.864703274e-03f, -2.815458215e-03f, -2.766213732e-03f, -2.716969911e-03f, -2.667726836e-03f, -2.618484592e-03f,
+-2.569243265e-03f, -2.520002938e-03f, -2.470763696e-03f, -2.421525624e-03f, -2.372288807e-03f, -2.323053330e-03f, -2.273819277e-03f, -2.224586732e-03f, -2.175355781e-03f, -2.126126507e-03f,
+-2.076898997e-03f, -2.027673333e-03f, -1.978449602e-03f, -1.929227886e-03f, -1.880008272e-03f, -1.830790843e-03f, -1.781575684e-03f, -1.732362880e-03f, -1.683152515e-03f, -1.633944674e-03f,
+-1.584739440e-03f, -1.535536899e-03f, -1.486337135e-03f, -1.437140233e-03f, -1.387946276e-03f, -1.338755350e-03f, -1.289567539e-03f, -1.240382926e-03f, -1.191201597e-03f, -1.142023636e-03f,
+-1.092849127e-03f, -1.043678155e-03f, -9.945108030e-04f, -9.453471563e-04f, -8.961872991e-04f, -8.470313155e-04f, -7.978792898e-04f, -7.487313063e-04f, -6.995874491e-04f, -6.504478024e-04f,
+-6.013124504e-04f, -5.521814774e-04f, -5.030549673e-04f, -4.539330045e-04f, -4.048156730e-04f, -3.557030568e-04f, -3.065952401e-04f, -2.574923070e-04f, -2.083943415e-04f, -1.593014275e-04f,
+-1.102136492e-04f, -6.113109056e-05f, -1.205383548e-05f, 3.701803204e-05f, 8.608442808e-05f, 1.351452687e-04f, 1.842004700e-04f, 2.332499481e-04f, 2.822936192e-04f, 3.313313994e-04f,
+3.803632048e-04f, 4.293889517e-04f, 4.784085563e-04f, 5.274219348e-04f, 5.764290035e-04f, 6.254296786e-04f, 6.744238765e-04f, 7.234115134e-04f, 7.723925057e-04f, 8.213667698e-04f,
+8.703342220e-04f, 9.192947787e-04f, 9.682483564e-04f, 1.017194871e-03f, 1.066134240e-03f, 1.115066380e-03f, 1.163991206e-03f, 1.212908635e-03f, 1.261818584e-03f, 1.310720970e-03f,
+1.359615709e-03f, 1.408502717e-03f, 1.457381912e-03f, 1.506253210e-03f, 1.555116527e-03f, 1.603971781e-03f, 1.652818888e-03f, 1.701657765e-03f, 1.750488328e-03f, 1.799310495e-03f,
+1.848124182e-03f, 1.896929306e-03f, 1.945725784e-03f, 1.994513533e-03f, 2.043292469e-03f, 2.092062511e-03f, 2.140823573e-03f, 2.189575575e-03f, 2.238318432e-03f, 2.287052062e-03f,
+2.335776382e-03f, 2.384491308e-03f, 2.433196759e-03f, 2.481892651e-03f, 2.530578901e-03f, 2.579255426e-03f, 2.627922144e-03f, 2.676578972e-03f, 2.725225827e-03f, 2.773862627e-03f,
+2.822489288e-03f, 2.871105729e-03f, 2.919711866e-03f, 2.968307617e-03f, 3.016892900e-03f, 3.065467631e-03f, 3.114031728e-03f, 3.162585110e-03f, 3.211127692e-03f, 3.259659394e-03f,
+3.308180132e-03f, 3.356689824e-03f, 3.405188388e-03f, 3.453675742e-03f, 3.502151802e-03f, 3.550616488e-03f, 3.599069716e-03f, 3.647511404e-03f, 3.695941471e-03f, 3.744359834e-03f,
+3.792766411e-03f, 3.841161119e-03f, 3.889543878e-03f, 3.937914604e-03f, 3.986273216e-03f, 4.034619632e-03f, 4.082953770e-03f, 4.131275548e-03f, 4.179584883e-03f, 4.227881695e-03f,
+4.276165902e-03f, 4.324437421e-03f, 4.372696170e-03f, 4.420942069e-03f, 4.469175035e-03f, 4.517394987e-03f, 4.565601843e-03f, 4.613795522e-03f, 4.661975941e-03f, 4.710143019e-03f,
+4.758296676e-03f, 4.806436829e-03f, 4.854563397e-03f, 4.902676298e-03f, 4.950775451e-03f, 4.998860775e-03f, 5.046932189e-03f, 5.094989610e-03f, 5.143032959e-03f, 5.191062153e-03f,
+5.239077112e-03f, 5.287077754e-03f, 5.335063998e-03f, 5.383035764e-03f, 5.430992969e-03f, 5.478935534e-03f, 5.526863376e-03f, 5.574776416e-03f, 5.622674572e-03f, 5.670557763e-03f,
+5.718425909e-03f, 5.766278928e-03f, 5.814116741e-03f, 5.861939265e-03f, 5.909746421e-03f, 5.957538128e-03f, 6.005314304e-03f, 6.053074871e-03f, 6.100819746e-03f, 6.148548850e-03f,
+6.196262101e-03f, 6.243959420e-03f, 6.291640727e-03f, 6.339305939e-03f, 6.386954979e-03f, 6.434587764e-03f, 6.482204215e-03f, 6.529804251e-03f, 6.577387793e-03f, 6.624954759e-03f,
+6.672505071e-03f, 6.720038648e-03f, 6.767555409e-03f, 6.815055275e-03f, 6.862538167e-03f, 6.910004003e-03f, 6.957452704e-03f, 7.004884190e-03f, 7.052298382e-03f, 7.099695199e-03f,
+7.147074562e-03f, 7.194436391e-03f, 7.241780606e-03f, 7.289107128e-03f, 7.336415877e-03f, 7.383706774e-03f, 7.430979739e-03f, 7.478234693e-03f, 7.525471556e-03f, 7.572690249e-03f,
+7.619890692e-03f, 7.667072806e-03f, 7.714236512e-03f, 7.761381731e-03f, 7.808508383e-03f, 7.855616390e-03f, 7.902705671e-03f, 7.949776149e-03f, 7.996827743e-03f, 8.043860376e-03f,
+8.090873968e-03f, 8.137868440e-03f, 8.184843714e-03f, 8.231799709e-03f, 8.278736349e-03f, 8.325653554e-03f, 8.372551245e-03f, 8.419429343e-03f, 8.466287771e-03f, 8.513126449e-03f,
+8.559945298e-03f, 8.606744242e-03f, 8.653523200e-03f, 8.700282095e-03f, 8.747020848e-03f, 8.793739381e-03f, 8.840437615e-03f, 8.887115473e-03f, 8.933772876e-03f, 8.980409746e-03f,
+9.027026005e-03f, 9.073621575e-03f, 9.120196378e-03f, 9.166750336e-03f, 9.213283371e-03f, 9.259795404e-03f, 9.306286360e-03f, 9.352756158e-03f, 9.399204723e-03f, 9.445631975e-03f,
+9.492037838e-03f, 9.538422234e-03f, 9.584785085e-03f, 9.631126313e-03f, 9.677445842e-03f, 9.723743594e-03f, 9.770019491e-03f, 9.816273456e-03f, 9.862505412e-03f, 9.908715281e-03f,
+9.954902987e-03f, 1.000106845e-02f, 1.004721160e-02f, 1.009333235e-02f, 1.013943063e-02f, 1.018550636e-02f, 1.023155947e-02f, 1.027758987e-02f, 1.032359750e-02f, 1.036958226e-02f,
+1.041554410e-02f, 1.046148292e-02f, 1.050739866e-02f, 1.055329123e-02f, 1.059916057e-02f, 1.064500659e-02f, 1.069082922e-02f, 1.073662837e-02f, 1.078240399e-02f, 1.082815598e-02f,
+1.087388427e-02f, 1.091958879e-02f, 1.096526946e-02f, 1.101092621e-02f, 1.105655895e-02f, 1.110216762e-02f, 1.114775213e-02f, 1.119331241e-02f, 1.123884838e-02f, 1.128435997e-02f,
+1.132984711e-02f, 1.137530971e-02f, 1.142074770e-02f, 1.146616101e-02f, 1.151154956e-02f, 1.155691328e-02f, 1.160225208e-02f, 1.164756590e-02f, 1.169285465e-02f, 1.173811827e-02f,
+1.178335668e-02f, 1.182856980e-02f, 1.187375756e-02f, 1.191891988e-02f, 1.196405668e-02f, 1.200916790e-02f, 1.205425346e-02f, 1.209931328e-02f, 1.214434729e-02f, 1.218935541e-02f,
+1.223433757e-02f, 1.227929369e-02f, 1.232422370e-02f, 1.236912753e-02f, 1.241400510e-02f, 1.245885633e-02f, 1.250368115e-02f, 1.254847949e-02f, 1.259325128e-02f, 1.263799643e-02f,
+1.268271487e-02f, 1.272740654e-02f, 1.277207135e-02f, 1.281670923e-02f, 1.286132012e-02f, 1.290590392e-02f, 1.295046058e-02f, 1.299499001e-02f, 1.303949214e-02f, 1.308396691e-02f,
+1.312841422e-02f, 1.317283402e-02f, 1.321722623e-02f, 1.326159078e-02f, 1.330592758e-02f, 1.335023657e-02f, 1.339451768e-02f, 1.343877083e-02f, 1.348299594e-02f, 1.352719295e-02f,
+1.357136179e-02f, 1.361550237e-02f, 1.365961463e-02f, 1.370369849e-02f, 1.374775388e-02f, 1.379178073e-02f, 1.383577896e-02f, 1.387974850e-02f, 1.392368929e-02f, 1.396760124e-02f,
+1.401148428e-02f, 1.405533835e-02f, 1.409916336e-02f, 1.414295925e-02f, 1.418672595e-02f, 1.423046338e-02f, 1.427417147e-02f, 1.431785015e-02f, 1.436149934e-02f, 1.440511898e-02f,
+1.444870899e-02f, 1.449226930e-02f, 1.453579984e-02f, 1.457930053e-02f, 1.462277132e-02f, 1.466621211e-02f, 1.470962284e-02f, 1.475300345e-02f, 1.479635386e-02f, 1.483967399e-02f,
+1.488296378e-02f, 1.492622315e-02f, 1.496945204e-02f, 1.501265036e-02f, 1.505581806e-02f, 1.509895506e-02f, 1.514206129e-02f, 1.518513668e-02f, 1.522818116e-02f, 1.527119465e-02f,
+1.531417709e-02f, 1.535712840e-02f, 1.540004852e-02f, 1.544293737e-02f, 1.548579488e-02f, 1.552862099e-02f, 1.557141562e-02f, 1.561417871e-02f, 1.565691017e-02f, 1.569960995e-02f,
+1.574227797e-02f, 1.578491416e-02f, 1.582751846e-02f, 1.587009078e-02f, 1.591263107e-02f, 1.595513925e-02f, 1.599761525e-02f, 1.604005900e-02f, 1.608247044e-02f, 1.612484949e-02f,
+1.616719609e-02f, 1.620951016e-02f, 1.625179163e-02f, 1.629404044e-02f, 1.633625652e-02f, 1.637843980e-02f, 1.642059020e-02f, 1.646270766e-02f, 1.650479212e-02f, 1.654684349e-02f,
+1.658886172e-02f, 1.663084673e-02f, 1.667279846e-02f, 1.671471683e-02f, 1.675660178e-02f, 1.679845324e-02f, 1.684027114e-02f, 1.688205541e-02f, 1.692380599e-02f, 1.696552280e-02f,
+1.700720578e-02f, 1.704885486e-02f, 1.709046997e-02f, 1.713205105e-02f, 1.717359801e-02f, 1.721511081e-02f, 1.725658937e-02f, 1.729803362e-02f, 1.733944349e-02f, 1.738081892e-02f,
+1.742215983e-02f, 1.746346617e-02f, 1.750473787e-02f, 1.754597485e-02f, 1.758717705e-02f, 1.762834440e-02f, 1.766947684e-02f, 1.771057429e-02f, 1.775163670e-02f, 1.779266399e-02f,
+1.783365609e-02f, 1.787461295e-02f, 1.791553449e-02f, 1.795642065e-02f, 1.799727136e-02f, 1.803808655e-02f, 1.807886616e-02f, 1.811961012e-02f, 1.816031837e-02f, 1.820099083e-02f,
+1.824162744e-02f, 1.828222814e-02f, 1.832279287e-02f, 1.836332154e-02f, 1.840381410e-02f, 1.844427049e-02f, 1.848469063e-02f, 1.852507446e-02f, 1.856542192e-02f, 1.860573294e-02f,
+1.864600745e-02f, 1.868624538e-02f, 1.872644669e-02f, 1.876661128e-02f, 1.880673912e-02f, 1.884683012e-02f, 1.888688422e-02f, 1.892690136e-02f, 1.896688147e-02f, 1.900682449e-02f,
+1.904673035e-02f, 1.908659899e-02f, 1.912643034e-02f, 1.916622434e-02f, 1.920598093e-02f, 1.924570003e-02f, 1.928538159e-02f, 1.932502554e-02f, 1.936463182e-02f, 1.940420036e-02f,
+1.944373110e-02f, 1.948322397e-02f, 1.952267892e-02f, 1.956209587e-02f, 1.960147476e-02f, 1.964081553e-02f, 1.968011812e-02f, 1.971938246e-02f, 1.975860849e-02f, 1.979779614e-02f,
+1.983694535e-02f, 1.987605607e-02f, 1.991512822e-02f, 1.995416173e-02f, 1.999315656e-02f, 2.003211264e-02f, 2.007102989e-02f, 2.010990827e-02f, 2.014874771e-02f, 2.018754813e-02f,
+2.022630949e-02f, 2.026503172e-02f, 2.030371476e-02f, 2.034235854e-02f, 2.038096300e-02f, 2.041952809e-02f, 2.045805373e-02f, 2.049653986e-02f, 2.053498643e-02f, 2.057339337e-02f,
+2.061176062e-02f, 2.065008812e-02f, 2.068837580e-02f, 2.072662361e-02f, 2.076483148e-02f, 2.080299935e-02f, 2.084112717e-02f, 2.087921486e-02f, 2.091726236e-02f, 2.095526963e-02f,
+2.099323658e-02f, 2.103116318e-02f, 2.106904934e-02f, 2.110689502e-02f, 2.114470014e-02f, 2.118246466e-02f, 2.122018851e-02f, 2.125787162e-02f, 2.129551394e-02f, 2.133311542e-02f,
+2.137067598e-02f, 2.140819556e-02f, 2.144567411e-02f, 2.148311157e-02f, 2.152050788e-02f, 2.155786298e-02f, 2.159517680e-02f, 2.163244928e-02f, 2.166968038e-02f, 2.170687002e-02f,
+2.174401815e-02f, 2.178112471e-02f, 2.181818964e-02f, 2.185521287e-02f, 2.189219436e-02f, 2.192913404e-02f, 2.196603185e-02f, 2.200288773e-02f, 2.203970163e-02f, 2.207647348e-02f,
+2.211320323e-02f, 2.214989082e-02f, 2.218653618e-02f, 2.222313927e-02f, 2.225970001e-02f, 2.229621836e-02f, 2.233269426e-02f, 2.236912764e-02f, 2.240551845e-02f, 2.244186663e-02f,
+2.247817212e-02f, 2.251443487e-02f, 2.255065481e-02f, 2.258683189e-02f, 2.262296605e-02f, 2.265905724e-02f, 2.269510539e-02f, 2.273111045e-02f, 2.276707236e-02f, 2.280299107e-02f,
+2.283886651e-02f, 2.287469863e-02f, 2.291048737e-02f, 2.294623267e-02f, 2.298193449e-02f, 2.301759275e-02f, 2.305320742e-02f, 2.308877841e-02f, 2.312430569e-02f, 2.315978920e-02f,
+2.319522887e-02f, 2.323062466e-02f, 2.326597650e-02f, 2.330128434e-02f, 2.333654812e-02f, 2.337176779e-02f, 2.340694330e-02f, 2.344207458e-02f, 2.347716157e-02f, 2.351220424e-02f,
+2.354720251e-02f, 2.358215633e-02f, 2.361706566e-02f, 2.365193042e-02f, 2.368675057e-02f, 2.372152606e-02f, 2.375625682e-02f, 2.379094280e-02f, 2.382558395e-02f, 2.386018021e-02f,
+2.389473152e-02f, 2.392923784e-02f, 2.396369911e-02f, 2.399811527e-02f, 2.403248627e-02f, 2.406681205e-02f, 2.410109257e-02f, 2.413532776e-02f, 2.416951757e-02f, 2.420366195e-02f,
+2.423776084e-02f, 2.427181419e-02f, 2.430582195e-02f, 2.433978406e-02f, 2.437370047e-02f, 2.440757113e-02f, 2.444139598e-02f, 2.447517496e-02f, 2.450890804e-02f, 2.454259514e-02f,
+2.457623622e-02f, 2.460983123e-02f, 2.464338011e-02f, 2.467688281e-02f, 2.471033928e-02f, 2.474374946e-02f, 2.477711331e-02f, 2.481043077e-02f, 2.484370178e-02f, 2.487692630e-02f,
+2.491010427e-02f, 2.494323564e-02f, 2.497632035e-02f, 2.500935837e-02f, 2.504234963e-02f, 2.507529408e-02f, 2.510819167e-02f, 2.514104236e-02f, 2.517384607e-02f, 2.520660278e-02f,
+2.523931242e-02f, 2.527197495e-02f, 2.530459030e-02f, 2.533715844e-02f, 2.536967931e-02f, 2.540215285e-02f, 2.543457903e-02f, 2.546695778e-02f, 2.549928906e-02f, 2.553157281e-02f,
+2.556380899e-02f, 2.559599755e-02f, 2.562813843e-02f, 2.566023158e-02f, 2.569227696e-02f, 2.572427452e-02f, 2.575622419e-02f, 2.578812594e-02f, 2.581997972e-02f, 2.585178547e-02f,
+2.588354315e-02f, 2.591525270e-02f, 2.594691408e-02f, 2.597852723e-02f, 2.601009211e-02f, 2.604160867e-02f, 2.607307686e-02f, 2.610449663e-02f, 2.613586793e-02f, 2.616719071e-02f,
+2.619846493e-02f, 2.622969053e-02f, 2.626086747e-02f, 2.629199569e-02f, 2.632307515e-02f, 2.635410581e-02f, 2.638508760e-02f, 2.641602049e-02f, 2.644690443e-02f, 2.647773937e-02f,
+2.650852526e-02f, 2.653926204e-02f, 2.656994969e-02f, 2.660058814e-02f, 2.663117735e-02f, 2.666171728e-02f, 2.669220787e-02f, 2.672264908e-02f, 2.675304085e-02f, 2.678338316e-02f,
+2.681367593e-02f, 2.684391914e-02f, 2.687411274e-02f, 2.690425666e-02f, 2.693435088e-02f, 2.696439534e-02f, 2.699439000e-02f, 2.702433481e-02f, 2.705422972e-02f, 2.708407469e-02f,
+2.711386967e-02f, 2.714361462e-02f, 2.717330949e-02f, 2.720295423e-02f, 2.723254880e-02f, 2.726209315e-02f, 2.729158724e-02f, 2.732103102e-02f, 2.735042445e-02f, 2.737976748e-02f,
+2.740906007e-02f, 2.743830216e-02f, 2.746749372e-02f, 2.749663471e-02f, 2.752572507e-02f, 2.755476476e-02f, 2.758375374e-02f, 2.761269196e-02f, 2.764157938e-02f, 2.767041595e-02f,
+2.769920163e-02f, 2.772793638e-02f, 2.775662015e-02f, 2.778525289e-02f, 2.781383457e-02f, 2.784236514e-02f, 2.787084456e-02f, 2.789927277e-02f, 2.792764975e-02f, 2.795597544e-02f,
+2.798424980e-02f, 2.801247279e-02f, 2.804064437e-02f, 2.806876449e-02f, 2.809683311e-02f, 2.812485018e-02f, 2.815281567e-02f, 2.818072953e-02f, 2.820859172e-02f, 2.823640220e-02f,
+2.826416092e-02f, 2.829186784e-02f, 2.831952292e-02f, 2.834712612e-02f, 2.837467739e-02f, 2.840217670e-02f, 2.842962400e-02f, 2.845701924e-02f, 2.848436240e-02f, 2.851165342e-02f,
+2.853889227e-02f, 2.856607890e-02f, 2.859321327e-02f, 2.862029535e-02f, 2.864732508e-02f, 2.867430243e-02f, 2.870122737e-02f, 2.872809984e-02f, 2.875491980e-02f, 2.878168722e-02f,
+2.880840206e-02f, 2.883506427e-02f, 2.886167382e-02f, 2.888823066e-02f, 2.891473476e-02f, 2.894118607e-02f, 2.896758456e-02f, 2.899393018e-02f, 2.902022290e-02f, 2.904646267e-02f,
+2.907264945e-02f, 2.909878322e-02f, 2.912486392e-02f, 2.915089151e-02f, 2.917686597e-02f, 2.920278724e-02f, 2.922865530e-02f, 2.925447010e-02f, 2.928023159e-02f, 2.930593976e-02f,
+2.933159455e-02f, 2.935719592e-02f, 2.938274384e-02f, 2.940823828e-02f, 2.943367918e-02f, 2.945906652e-02f, 2.948440026e-02f, 2.950968035e-02f, 2.953490676e-02f, 2.956007946e-02f,
+2.958519839e-02f, 2.961026354e-02f, 2.963527486e-02f, 2.966023230e-02f, 2.968513585e-02f, 2.970998544e-02f, 2.973478107e-02f, 2.975952267e-02f, 2.978421022e-02f, 2.980884368e-02f,
+2.983342301e-02f, 2.985794819e-02f, 2.988241916e-02f, 2.990683589e-02f, 2.993119835e-02f, 2.995550651e-02f, 2.997976031e-02f, 3.000395974e-02f, 3.002810475e-02f, 3.005219531e-02f,
+3.007623138e-02f, 3.010021293e-02f, 3.012413992e-02f, 3.014801231e-02f, 3.017183007e-02f, 3.019559317e-02f, 3.021930156e-02f, 3.024295523e-02f, 3.026655412e-02f, 3.029009820e-02f,
+3.031358745e-02f, 3.033702182e-02f, 3.036040128e-02f, 3.038372580e-02f, 3.040699534e-02f, 3.043020986e-02f, 3.045336935e-02f, 3.047647375e-02f, 3.049952303e-02f, 3.052251717e-02f,
+3.054545613e-02f, 3.056833987e-02f, 3.059116836e-02f, 3.061394157e-02f, 3.063665946e-02f, 3.065932201e-02f, 3.068192917e-02f, 3.070448091e-02f, 3.072697721e-02f, 3.074941803e-02f,
+3.077180333e-02f, 3.079413309e-02f, 3.081640726e-02f, 3.083862583e-02f, 3.086078875e-02f, 3.088289599e-02f, 3.090494753e-02f, 3.092694332e-02f, 3.094888334e-02f, 3.097076756e-02f,
+3.099259594e-02f, 3.101436845e-02f, 3.103608507e-02f, 3.105774575e-02f, 3.107935047e-02f, 3.110089919e-02f, 3.112239189e-02f, 3.114382854e-02f, 3.116520910e-02f, 3.118653354e-02f,
+3.120780183e-02f, 3.122901394e-02f, 3.125016984e-02f, 3.127126951e-02f, 3.129231290e-02f, 3.131329999e-02f, 3.133423075e-02f, 3.135510514e-02f, 3.137592315e-02f, 3.139668473e-02f,
+3.141738987e-02f, 3.143803852e-02f, 3.145863066e-02f, 3.147916627e-02f, 3.149964530e-02f, 3.152006774e-02f, 3.154043355e-02f, 3.156074270e-02f, 3.158099516e-02f, 3.160119092e-02f,
+3.162132992e-02f, 3.164141216e-02f, 3.166143760e-02f, 3.168140620e-02f, 3.170131795e-02f, 3.172117282e-02f, 3.174097077e-02f, 3.176071177e-02f, 3.178039581e-02f, 3.180002285e-02f,
+3.181959287e-02f, 3.183910583e-02f, 3.185856171e-02f, 3.187796048e-02f, 3.189730212e-02f, 3.191658659e-02f, 3.193581387e-02f, 3.195498394e-02f, 3.197409676e-02f, 3.199315231e-02f,
+3.201215057e-02f, 3.203109149e-02f, 3.204997507e-02f, 3.206880127e-02f, 3.208757007e-02f, 3.210628144e-02f, 3.212493535e-02f, 3.214353178e-02f, 3.216207070e-02f, 3.218055208e-02f,
+3.219897591e-02f, 3.221734215e-02f, 3.223565078e-02f, 3.225390177e-02f, 3.227209510e-02f, 3.229023075e-02f, 3.230830868e-02f, 3.232632888e-02f, 3.234429131e-02f, 3.236219596e-02f,
+3.238004279e-02f, 3.239783179e-02f, 3.241556293e-02f, 3.243323618e-02f, 3.245085152e-02f, 3.246840893e-02f, 3.248590838e-02f, 3.250334985e-02f, 3.252073331e-02f, 3.253805875e-02f,
+3.255532613e-02f, 3.257253543e-02f, 3.258968663e-02f, 3.260677971e-02f, 3.262381464e-02f, 3.264079140e-02f, 3.265770997e-02f, 3.267457032e-02f, 3.269137244e-02f, 3.270811629e-02f,
+3.272480185e-02f, 3.274142911e-02f, 3.275799804e-02f, 3.277450861e-02f, 3.279096081e-02f, 3.280735462e-02f, 3.282369000e-02f, 3.283996695e-02f, 3.285618543e-02f, 3.287234542e-02f,
+3.288844692e-02f, 3.290448988e-02f, 3.292047430e-02f, 3.293640014e-02f, 3.295226739e-02f, 3.296807603e-02f, 3.298382604e-02f, 3.299951739e-02f, 3.301515007e-02f, 3.303072405e-02f,
+3.304623931e-02f, 3.306169583e-02f, 3.307709360e-02f, 3.309243259e-02f, 3.310771278e-02f, 3.312293415e-02f, 3.313809668e-02f, 3.315320036e-02f, 3.316824515e-02f, 3.318323105e-02f,
+3.319815803e-02f, 3.321302608e-02f, 3.322783517e-02f, 3.324258528e-02f, 3.325727639e-02f, 3.327190850e-02f, 3.328648157e-02f, 3.330099558e-02f, 3.331545053e-02f, 3.332984639e-02f,
+3.334418314e-02f, 3.335846076e-02f, 3.337267924e-02f, 3.338683856e-02f, 3.340093869e-02f, 3.341497963e-02f, 3.342896134e-02f, 3.344288383e-02f, 3.345674706e-02f, 3.347055102e-02f,
+3.348429569e-02f, 3.349798106e-02f, 3.351160711e-02f, 3.352517381e-02f, 3.353868116e-02f, 3.355212913e-02f, 3.356551772e-02f, 3.357884689e-02f, 3.359211664e-02f, 3.360532696e-02f,
+3.361847781e-02f, 3.363156919e-02f, 3.364460108e-02f, 3.365757346e-02f, 3.367048632e-02f, 3.368333965e-02f, 3.369613341e-02f, 3.370886761e-02f, 3.372154223e-02f, 3.373415724e-02f,
+3.374671263e-02f, 3.375920840e-02f, 3.377164451e-02f, 3.378402097e-02f, 3.379633775e-02f, 3.380859483e-02f, 3.382079221e-02f, 3.383292986e-02f, 3.384500778e-02f, 3.385702595e-02f,
+3.386898436e-02f, 3.388088298e-02f, 3.389272181e-02f, 3.390450083e-02f, 3.391622003e-02f, 3.392787940e-02f, 3.393947891e-02f, 3.395101856e-02f, 3.396249834e-02f, 3.397391822e-02f,
+3.398527820e-02f, 3.399657826e-02f, 3.400781840e-02f, 3.401899859e-02f, 3.403011882e-02f, 3.404117909e-02f, 3.405217937e-02f, 3.406311966e-02f, 3.407399994e-02f, 3.408482021e-02f,
+3.409558044e-02f, 3.410628063e-02f, 3.411692076e-02f, 3.412750082e-02f, 3.413802081e-02f, 3.414848070e-02f, 3.415888049e-02f, 3.416922016e-02f, 3.417949971e-02f, 3.418971912e-02f,
+3.419987838e-02f, 3.420997748e-02f, 3.422001641e-02f, 3.422999516e-02f, 3.423991372e-02f, 3.424977207e-02f, 3.425957020e-02f, 3.426930811e-02f, 3.427898579e-02f, 3.428860322e-02f,
+3.429816039e-02f, 3.430765730e-02f, 3.431709393e-02f, 3.432647028e-02f, 3.433578633e-02f, 3.434504207e-02f, 3.435423750e-02f, 3.436337260e-02f, 3.437244737e-02f, 3.438146180e-02f,
+3.439041587e-02f, 3.439930958e-02f, 3.440814292e-02f, 3.441691588e-02f, 3.442562846e-02f, 3.443428063e-02f, 3.444287241e-02f, 3.445140376e-02f, 3.445987470e-02f, 3.446828520e-02f,
+3.447663527e-02f, 3.448492489e-02f, 3.449315405e-02f, 3.450132275e-02f, 3.450943098e-02f, 3.451747874e-02f, 3.452546600e-02f, 3.453339278e-02f, 3.454125906e-02f, 3.454906482e-02f,
+3.455681008e-02f, 3.456449481e-02f, 3.457211902e-02f, 3.457968268e-02f, 3.458718581e-02f, 3.459462839e-02f, 3.460201042e-02f, 3.460933188e-02f, 3.461659278e-02f, 3.462379310e-02f,
+3.463093285e-02f, 3.463801201e-02f, 3.464503057e-02f, 3.465198854e-02f, 3.465888591e-02f, 3.466572267e-02f, 3.467249882e-02f, 3.467921435e-02f, 3.468586925e-02f, 3.469246353e-02f,
+3.469899717e-02f, 3.470547017e-02f, 3.471188253e-02f, 3.471823424e-02f, 3.472452529e-02f, 3.473075569e-02f, 3.473692543e-02f, 3.474303450e-02f, 3.474908290e-02f, 3.475507063e-02f,
+3.476099768e-02f, 3.476686404e-02f, 3.477266972e-02f, 3.477841471e-02f, 3.478409901e-02f, 3.478972261e-02f, 3.479528551e-02f, 3.480078771e-02f, 3.480622920e-02f, 3.481160999e-02f,
+3.481693006e-02f, 3.482218942e-02f, 3.482738805e-02f, 3.483252597e-02f, 3.483760317e-02f, 3.484261964e-02f, 3.484757539e-02f, 3.485247040e-02f, 3.485730468e-02f, 3.486207823e-02f,
+3.486679105e-02f, 3.487144313e-02f, 3.487603447e-02f, 3.488056506e-02f, 3.488503492e-02f, 3.488944404e-02f, 3.489379241e-02f, 3.489808003e-02f, 3.490230691e-02f, 3.490647304e-02f,
+3.491057842e-02f, 3.491462306e-02f, 3.491860694e-02f, 3.492253008e-02f, 3.492639247e-02f, 3.493019410e-02f, 3.493393498e-02f, 3.493761512e-02f, 3.494123450e-02f, 3.494479313e-02f,
+3.494829101e-02f, 3.495172814e-02f, 3.495510452e-02f, 3.495842016e-02f, 3.496167504e-02f, 3.496486918e-02f, 3.496800257e-02f, 3.497107521e-02f, 3.497408711e-02f, 3.497703826e-02f,
+3.497992868e-02f, 3.498275835e-02f, 3.498552728e-02f, 3.498823548e-02f, 3.499088294e-02f, 3.499346966e-02f, 3.499599565e-02f, 3.499846091e-02f, 3.500086545e-02f, 3.500320925e-02f,
+3.500549234e-02f, 3.500771470e-02f, 3.500987634e-02f, 3.501197727e-02f, 3.501401748e-02f, 3.501599698e-02f, 3.501791578e-02f, 3.501977387e-02f, 3.502157126e-02f, 3.502330795e-02f,
+3.502498394e-02f, 3.502659925e-02f, 3.502815386e-02f, 3.502964780e-02f, 3.503108105e-02f, 3.503245362e-02f, 3.503376553e-02f, 3.503501676e-02f, 3.503620733e-02f, 3.503733724e-02f,
+3.503840649e-02f, 3.503941510e-02f, 3.504036306e-02f, 3.504125037e-02f, 3.504207705e-02f, 3.504284310e-02f, 3.504354851e-02f, 3.504419331e-02f, 3.504477749e-02f, 3.504530106e-02f,
+3.504576403e-02f, 3.504616639e-02f, 3.504650816e-02f, 3.504678934e-02f, 3.504700993e-02f, 3.504716995e-02f, 3.504726940e-02f, 3.504730829e-02f, 3.504728661e-02f, 3.504720438e-02f,
+3.504706161e-02f, 3.504685830e-02f, 3.504659445e-02f, 3.504627008e-02f, 3.504588519e-02f, 3.504543979e-02f, 3.504493389e-02f, 3.504436748e-02f, 3.504374059e-02f, 3.504305321e-02f,
+3.504230536e-02f, 3.504149704e-02f, 3.504062826e-02f, 3.503969903e-02f, 3.503870935e-02f, 3.503765923e-02f, 3.503654869e-02f, 3.503537773e-02f, 3.503414636e-02f, 3.503285458e-02f,
+3.503150241e-02f, 3.503008985e-02f, 3.502861692e-02f, 3.502708362e-02f, 3.502548995e-02f, 3.502383594e-02f, 3.502212159e-02f, 3.502034690e-02f, 3.501851189e-02f, 3.501661657e-02f,
+3.501466094e-02f, 3.501264502e-02f, 3.501056882e-02f, 3.500843234e-02f, 3.500623560e-02f, 3.500397860e-02f, 3.500166136e-02f, 3.499928388e-02f, 3.499684618e-02f, 3.499434827e-02f,
+3.499179016e-02f, 3.498917185e-02f, 3.498649336e-02f, 3.498375471e-02f, 3.498095589e-02f, 3.497809692e-02f, 3.497517782e-02f, 3.497219860e-02f, 3.496915926e-02f, 3.496605981e-02f,
+3.496290028e-02f, 3.495968067e-02f, 3.495640099e-02f, 3.495306125e-02f, 3.494966147e-02f, 3.494620166e-02f, 3.494268183e-02f, 3.493910199e-02f, 3.493546216e-02f, 3.493176235e-02f,
+3.492800257e-02f, 3.492418283e-02f, 3.492030315e-02f, 3.491636353e-02f, 3.491236400e-02f, 3.490830457e-02f, 3.490418524e-02f, 3.490000603e-02f, 3.489576697e-02f, 3.489146805e-02f,
+3.488710929e-02f, 3.488269071e-02f, 3.487821232e-02f, 3.487367413e-02f, 3.486907616e-02f, 3.486441843e-02f, 3.485970094e-02f, 3.485492371e-02f, 3.485008676e-02f, 3.484519009e-02f,
+3.484023374e-02f, 3.483521770e-02f, 3.483014199e-02f, 3.482500664e-02f, 3.481981165e-02f, 3.481455704e-02f, 3.480924282e-02f, 3.480386901e-02f, 3.479843563e-02f, 3.479294269e-02f,
+3.478739021e-02f, 3.478177820e-02f, 3.477610668e-02f, 3.477037566e-02f, 3.476458517e-02f, 3.475873521e-02f, 3.475282580e-02f, 3.474685696e-02f, 3.474082871e-02f, 3.473474106e-02f,
+3.472859403e-02f, 3.472238764e-02f, 3.471612189e-02f, 3.470979682e-02f, 3.470341244e-02f, 3.469696875e-02f, 3.469046579e-02f, 3.468390357e-02f, 3.467728211e-02f, 3.467060141e-02f,
+3.466386151e-02f, 3.465706242e-02f, 3.465020416e-02f, 3.464328674e-02f, 3.463631018e-02f, 3.462927450e-02f, 3.462217973e-02f, 3.461502587e-02f, 3.460781295e-02f, 3.460054098e-02f,
+3.459320998e-02f, 3.458581998e-02f, 3.457837099e-02f, 3.457086303e-02f, 3.456329612e-02f, 3.455567028e-02f, 3.454798552e-02f, 3.454024187e-02f, 3.453243935e-02f, 3.452457797e-02f,
+3.451665776e-02f, 3.450867874e-02f, 3.450064092e-02f, 3.449254432e-02f, 3.448438898e-02f, 3.447617489e-02f, 3.446790209e-02f, 3.445957060e-02f, 3.445118044e-02f, 3.444273162e-02f,
+3.443422417e-02f, 3.442565811e-02f, 3.441703346e-02f, 3.440835023e-02f, 3.439960846e-02f, 3.439080817e-02f, 3.438194936e-02f, 3.437303207e-02f, 3.436405632e-02f, 3.435502213e-02f,
+3.434592951e-02f, 3.433677850e-02f, 3.432756911e-02f, 3.431830136e-02f, 3.430897529e-02f, 3.429959090e-02f, 3.429014822e-02f, 3.428064728e-02f, 3.427108809e-02f, 3.426147069e-02f,
+3.425179508e-02f, 3.424206130e-02f, 3.423226937e-02f, 3.422241930e-02f, 3.421251113e-02f, 3.420254487e-02f, 3.419252056e-02f, 3.418243820e-02f, 3.417229784e-02f, 3.416209948e-02f,
+3.415184315e-02f, 3.414152888e-02f, 3.413115670e-02f, 3.412072661e-02f, 3.411023866e-02f, 3.409969286e-02f, 3.408908923e-02f, 3.407842780e-02f, 3.406770861e-02f, 3.405693166e-02f,
+3.404609698e-02f, 3.403520460e-02f, 3.402425455e-02f, 3.401324685e-02f, 3.400218151e-02f, 3.399105858e-02f, 3.397987807e-02f, 3.396864001e-02f, 3.395734443e-02f, 3.394599134e-02f,
+3.393458078e-02f, 3.392311277e-02f, 3.391158734e-02f, 3.390000451e-02f, 3.388836431e-02f, 3.387666676e-02f, 3.386491189e-02f, 3.385309973e-02f, 3.384123030e-02f, 3.382930363e-02f,
+3.381731975e-02f, 3.380527868e-02f, 3.379318045e-02f, 3.378102508e-02f, 3.376881261e-02f, 3.375654305e-02f, 3.374421645e-02f, 3.373183281e-02f, 3.371939218e-02f, 3.370689458e-02f,
+3.369434003e-02f, 3.368172857e-02f, 3.366906021e-02f, 3.365633500e-02f, 3.364355295e-02f, 3.363071410e-02f, 3.361781847e-02f, 3.360486609e-02f, 3.359185698e-02f, 3.357879119e-02f,
+3.356566873e-02f, 3.355248964e-02f, 3.353925393e-02f, 3.352596165e-02f, 3.351261282e-02f, 3.349920747e-02f, 3.348574562e-02f, 3.347222732e-02f, 3.345865257e-02f, 3.344502143e-02f,
+3.343133391e-02f, 3.341759004e-02f, 3.340378985e-02f, 3.338993338e-02f, 3.337602065e-02f, 3.336205170e-02f, 3.334802654e-02f, 3.333394522e-02f, 3.331980776e-02f, 3.330561420e-02f,
+3.329136455e-02f, 3.327705886e-02f, 3.326269716e-02f, 3.324827947e-02f, 3.323380582e-02f, 3.321927625e-02f, 3.320469079e-02f, 3.319004946e-02f, 3.317535230e-02f, 3.316059934e-02f,
+3.314579061e-02f, 3.313092615e-02f, 3.311600597e-02f, 3.310103013e-02f, 3.308599863e-02f, 3.307091153e-02f, 3.305576885e-02f, 3.304057062e-02f, 3.302531687e-02f, 3.301000764e-02f,
+3.299464295e-02f, 3.297922285e-02f, 3.296374735e-02f, 3.294821651e-02f, 3.293263034e-02f, 3.291698888e-02f, 3.290129216e-02f, 3.288554021e-02f, 3.286973308e-02f, 3.285387078e-02f,
+3.283795336e-02f, 3.282198085e-02f, 3.280595328e-02f, 3.278987068e-02f, 3.277373309e-02f, 3.275754054e-02f, 3.274129306e-02f, 3.272499069e-02f, 3.270863346e-02f, 3.269222141e-02f,
+3.267575456e-02f, 3.265923297e-02f, 3.264265664e-02f, 3.262602563e-02f, 3.260933997e-02f, 3.259259968e-02f, 3.257580481e-02f, 3.255895540e-02f, 3.254205146e-02f, 3.252509304e-02f,
+3.250808018e-02f, 3.249101291e-02f, 3.247389126e-02f, 3.245671527e-02f, 3.243948497e-02f, 3.242220040e-02f, 3.240486160e-02f, 3.238746860e-02f, 3.237002143e-02f, 3.235252013e-02f,
+3.233496475e-02f, 3.231735530e-02f, 3.229969184e-02f, 3.228197439e-02f, 3.226420299e-02f, 3.224637767e-02f, 3.222849848e-02f, 3.221056546e-02f, 3.219257862e-02f, 3.217453802e-02f,
+3.215644369e-02f, 3.213829567e-02f, 3.212009399e-02f, 3.210183869e-02f, 3.208352981e-02f, 3.206516738e-02f, 3.204675144e-02f, 3.202828203e-02f, 3.200975919e-02f, 3.199118295e-02f,
+3.197255335e-02f, 3.195387043e-02f, 3.193513422e-02f, 3.191634477e-02f, 3.189750211e-02f, 3.187860628e-02f, 3.185965732e-02f, 3.184065526e-02f, 3.182160015e-02f, 3.180249202e-02f,
+3.178333091e-02f, 3.176411687e-02f, 3.174484991e-02f, 3.172553010e-02f, 3.170615746e-02f, 3.168673204e-02f, 3.166725386e-02f, 3.164772298e-02f, 3.162813943e-02f, 3.160850326e-02f,
+3.158881449e-02f, 3.156907317e-02f, 3.154927933e-02f, 3.152943303e-02f, 3.150953429e-02f, 3.148958317e-02f, 3.146957968e-02f, 3.144952389e-02f, 3.142941582e-02f, 3.140925552e-02f,
+3.138904302e-02f, 3.136877837e-02f, 3.134846161e-02f, 3.132809278e-02f, 3.130767192e-02f, 3.128719906e-02f, 3.126667425e-02f, 3.124609754e-02f, 3.122546895e-02f, 3.120478854e-02f,
+3.118405634e-02f, 3.116327239e-02f, 3.114243674e-02f, 3.112154943e-02f, 3.110061049e-02f, 3.107961997e-02f, 3.105857791e-02f, 3.103748436e-02f, 3.101633934e-02f, 3.099514292e-02f,
+3.097389512e-02f, 3.095259599e-02f, 3.093124557e-02f, 3.090984390e-02f, 3.088839103e-02f, 3.086688699e-02f, 3.084533184e-02f, 3.082372561e-02f, 3.080206834e-02f, 3.078036008e-02f,
+3.075860088e-02f, 3.073679076e-02f, 3.071492978e-02f, 3.069301798e-02f, 3.067105540e-02f, 3.064904208e-02f, 3.062697807e-02f, 3.060486341e-02f, 3.058269815e-02f, 3.056048233e-02f,
+3.053821598e-02f, 3.051589916e-02f, 3.049353191e-02f, 3.047111427e-02f, 3.044864629e-02f, 3.042612801e-02f, 3.040355947e-02f, 3.038094072e-02f, 3.035827180e-02f, 3.033555275e-02f,
+3.031278363e-02f, 3.028996447e-02f, 3.026709532e-02f, 3.024417623e-02f, 3.022120723e-02f, 3.019818838e-02f, 3.017511971e-02f, 3.015200128e-02f, 3.012883313e-02f, 3.010561530e-02f,
+3.008234783e-02f, 3.005903078e-02f, 3.003566419e-02f, 3.001224810e-02f, 2.998878257e-02f, 2.996526762e-02f, 2.994170332e-02f, 2.991808970e-02f, 2.989442682e-02f, 2.987071471e-02f,
+2.984695343e-02f, 2.982314301e-02f, 2.979928351e-02f, 2.977537498e-02f, 2.975141745e-02f, 2.972741098e-02f, 2.970335560e-02f, 2.967925138e-02f, 2.965509834e-02f, 2.963089655e-02f,
+2.960664605e-02f, 2.958234688e-02f, 2.955799909e-02f, 2.953360273e-02f, 2.950915784e-02f, 2.948466447e-02f, 2.946012268e-02f, 2.943553250e-02f, 2.941089398e-02f, 2.938620718e-02f,
+2.936147213e-02f, 2.933668889e-02f, 2.931185751e-02f, 2.928697802e-02f, 2.926205049e-02f, 2.923707495e-02f, 2.921205146e-02f, 2.918698006e-02f, 2.916186080e-02f, 2.913669373e-02f,
+2.911147890e-02f, 2.908621636e-02f, 2.906090615e-02f, 2.903554833e-02f, 2.901014293e-02f, 2.898469002e-02f, 2.895918963e-02f, 2.893364183e-02f, 2.890804665e-02f, 2.888240414e-02f,
+2.885671437e-02f, 2.883097736e-02f, 2.880519318e-02f, 2.877936187e-02f, 2.875348348e-02f, 2.872755807e-02f, 2.870158567e-02f, 2.867556635e-02f, 2.864950014e-02f, 2.862338711e-02f,
+2.859722729e-02f, 2.857102075e-02f, 2.854476752e-02f, 2.851846766e-02f, 2.849212122e-02f, 2.846572826e-02f, 2.843928881e-02f, 2.841280293e-02f, 2.838627067e-02f, 2.835969209e-02f,
+2.833306722e-02f, 2.830639613e-02f, 2.827967886e-02f, 2.825291546e-02f, 2.822610599e-02f, 2.819925050e-02f, 2.817234903e-02f, 2.814540164e-02f, 2.811840838e-02f, 2.809136929e-02f,
+2.806428444e-02f, 2.803715387e-02f, 2.800997764e-02f, 2.798275579e-02f, 2.795548838e-02f, 2.792817545e-02f, 2.790081707e-02f, 2.787341328e-02f, 2.784596413e-02f, 2.781846968e-02f,
+2.779092998e-02f, 2.776334508e-02f, 2.773571503e-02f, 2.770803989e-02f, 2.768031970e-02f, 2.765255452e-02f, 2.762474440e-02f, 2.759688940e-02f, 2.756898957e-02f, 2.754104495e-02f,
+2.751305561e-02f, 2.748502159e-02f, 2.745694295e-02f, 2.742881974e-02f, 2.740065202e-02f, 2.737243983e-02f, 2.734418323e-02f, 2.731588228e-02f, 2.728753702e-02f, 2.725914752e-02f,
+2.723071381e-02f, 2.720223597e-02f, 2.717371403e-02f, 2.714514806e-02f, 2.711653811e-02f, 2.708788423e-02f, 2.705918647e-02f, 2.703044490e-02f, 2.700165956e-02f, 2.697283051e-02f,
+2.694395779e-02f, 2.691504148e-02f, 2.688608162e-02f, 2.685707826e-02f, 2.682803146e-02f, 2.679894127e-02f, 2.676980775e-02f, 2.674063096e-02f, 2.671141094e-02f, 2.668214776e-02f,
+2.665284146e-02f, 2.662349211e-02f, 2.659409975e-02f, 2.656466445e-02f, 2.653518625e-02f, 2.650566522e-02f, 2.647610140e-02f, 2.644649486e-02f, 2.641684564e-02f, 2.638715381e-02f,
+2.635741942e-02f, 2.632764252e-02f, 2.629782318e-02f, 2.626796144e-02f, 2.623805736e-02f, 2.620811100e-02f, 2.617812242e-02f, 2.614809167e-02f, 2.611801880e-02f, 2.608790387e-02f,
+2.605774695e-02f, 2.602754808e-02f, 2.599730732e-02f, 2.596702472e-02f, 2.593670035e-02f, 2.590633426e-02f, 2.587592651e-02f, 2.584547715e-02f, 2.581498625e-02f, 2.578445385e-02f,
+2.575388001e-02f, 2.572326480e-02f, 2.569260826e-02f, 2.566191046e-02f, 2.563117145e-02f, 2.560039129e-02f, 2.556957003e-02f, 2.553870774e-02f, 2.550780447e-02f, 2.547686028e-02f,
+2.544587523e-02f, 2.541484937e-02f, 2.538378276e-02f, 2.535267546e-02f, 2.532152753e-02f, 2.529033902e-02f, 2.525911000e-02f, 2.522784051e-02f, 2.519653063e-02f, 2.516518040e-02f,
+2.513378989e-02f, 2.510235914e-02f, 2.507088823e-02f, 2.503937721e-02f, 2.500782614e-02f, 2.497623508e-02f, 2.494460408e-02f, 2.491293320e-02f, 2.488122250e-02f, 2.484947205e-02f,
+2.481768190e-02f, 2.478585210e-02f, 2.475398272e-02f, 2.472207382e-02f, 2.469012545e-02f, 2.465813768e-02f, 2.462611056e-02f, 2.459404416e-02f, 2.456193853e-02f, 2.452979372e-02f,
+2.449760981e-02f, 2.446538685e-02f, 2.443312490e-02f, 2.440082402e-02f, 2.436848427e-02f, 2.433610570e-02f, 2.430368839e-02f, 2.427123238e-02f, 2.423873774e-02f, 2.420620453e-02f,
+2.417363281e-02f, 2.414102264e-02f, 2.410837407e-02f, 2.407568717e-02f, 2.404296201e-02f, 2.401019863e-02f, 2.397739710e-02f, 2.394455748e-02f, 2.391167983e-02f, 2.387876421e-02f,
+2.384581068e-02f, 2.381281930e-02f, 2.377979014e-02f, 2.374672325e-02f, 2.371361869e-02f, 2.368047653e-02f, 2.364729683e-02f, 2.361407964e-02f, 2.358082503e-02f, 2.354753307e-02f,
+2.351420380e-02f, 2.348083729e-02f, 2.344743361e-02f, 2.341399281e-02f, 2.338051495e-02f, 2.334700011e-02f, 2.331344833e-02f, 2.327985968e-02f, 2.324623423e-02f, 2.321257203e-02f,
+2.317887314e-02f, 2.314513763e-02f, 2.311136556e-02f, 2.307755700e-02f, 2.304371199e-02f, 2.300983061e-02f, 2.297591292e-02f, 2.294195898e-02f, 2.290796885e-02f, 2.287394259e-02f,
+2.283988027e-02f, 2.280578194e-02f, 2.277164768e-02f, 2.273747754e-02f, 2.270327159e-02f, 2.266902989e-02f, 2.263475249e-02f, 2.260043948e-02f, 2.256609089e-02f, 2.253170681e-02f,
+2.249728729e-02f, 2.246283240e-02f, 2.242834219e-02f, 2.239381673e-02f, 2.235925609e-02f, 2.232466033e-02f, 2.229002951e-02f, 2.225536369e-02f, 2.222066294e-02f, 2.218592732e-02f,
+2.215115689e-02f, 2.211635172e-02f, 2.208151187e-02f, 2.204663741e-02f, 2.201172839e-02f, 2.197678489e-02f, 2.194180696e-02f, 2.190679467e-02f, 2.187174809e-02f, 2.183666727e-02f,
+2.180155228e-02f, 2.176640319e-02f, 2.173122005e-02f, 2.169600294e-02f, 2.166075192e-02f, 2.162546705e-02f, 2.159014839e-02f, 2.155479602e-02f, 2.151940999e-02f, 2.148399037e-02f,
+2.144853722e-02f, 2.141305061e-02f, 2.137753060e-02f, 2.134197726e-02f, 2.130639065e-02f, 2.127077083e-02f, 2.123511788e-02f, 2.119943185e-02f, 2.116371282e-02f, 2.112796084e-02f,
+2.109217598e-02f, 2.105635830e-02f, 2.102050788e-02f, 2.098462477e-02f, 2.094870904e-02f, 2.091276076e-02f, 2.087677999e-02f, 2.084076680e-02f, 2.080472125e-02f, 2.076864341e-02f,
+2.073253334e-02f, 2.069639111e-02f, 2.066021678e-02f, 2.062401042e-02f, 2.058777210e-02f, 2.055150188e-02f, 2.051519983e-02f, 2.047886600e-02f, 2.044250048e-02f, 2.040610332e-02f,
+2.036967459e-02f, 2.033321436e-02f, 2.029672269e-02f, 2.026019964e-02f, 2.022364530e-02f, 2.018705971e-02f, 2.015044295e-02f, 2.011379508e-02f, 2.007711617e-02f, 2.004040629e-02f,
+2.000366550e-02f, 1.996689387e-02f, 1.993009146e-02f, 1.989325834e-02f, 1.985639459e-02f, 1.981950026e-02f, 1.978257542e-02f, 1.974562013e-02f, 1.970863448e-02f, 1.967161851e-02f,
+1.963457231e-02f, 1.959749593e-02f, 1.956038944e-02f, 1.952325291e-02f, 1.948608641e-02f, 1.944889000e-02f, 1.941166376e-02f, 1.937440774e-02f, 1.933712201e-02f, 1.929980665e-02f,
+1.926246172e-02f, 1.922508729e-02f, 1.918768342e-02f, 1.915025019e-02f, 1.911278765e-02f, 1.907529588e-02f, 1.903777495e-02f, 1.900022491e-02f, 1.896264585e-02f, 1.892503783e-02f,
+1.888740091e-02f, 1.884973516e-02f, 1.881204066e-02f, 1.877431746e-02f, 1.873656564e-02f, 1.869878527e-02f, 1.866097641e-02f, 1.862313913e-02f, 1.858527350e-02f, 1.854737959e-02f,
+1.850945746e-02f, 1.847150718e-02f, 1.843352883e-02f, 1.839552247e-02f, 1.835748816e-02f, 1.831942599e-02f, 1.828133600e-02f, 1.824321829e-02f, 1.820507290e-02f, 1.816689991e-02f,
+1.812869940e-02f, 1.809047142e-02f, 1.805221605e-02f, 1.801393335e-02f, 1.797562340e-02f, 1.793728626e-02f, 1.789892200e-02f, 1.786053070e-02f, 1.782211241e-02f, 1.778366721e-02f,
+1.774519517e-02f, 1.770669635e-02f, 1.766817083e-02f, 1.762961868e-02f, 1.759103996e-02f, 1.755243474e-02f, 1.751380309e-02f, 1.747514509e-02f, 1.743646079e-02f, 1.739775028e-02f,
+1.735901361e-02f, 1.732025086e-02f, 1.728146211e-02f, 1.724264741e-02f, 1.720380683e-02f, 1.716494046e-02f, 1.712604835e-02f, 1.708713057e-02f, 1.704818720e-02f, 1.700921831e-02f,
+1.697022396e-02f, 1.693120423e-02f, 1.689215918e-02f, 1.685308889e-02f, 1.681399342e-02f, 1.677487284e-02f, 1.673572723e-02f, 1.669655666e-02f, 1.665736118e-02f, 1.661814089e-02f,
+1.657889583e-02f, 1.653962609e-02f, 1.650033174e-02f, 1.646101284e-02f, 1.642166947e-02f, 1.638230169e-02f, 1.634290958e-02f, 1.630349321e-02f, 1.626405264e-02f, 1.622458795e-02f,
+1.618509920e-02f, 1.614558648e-02f, 1.610604984e-02f, 1.606648936e-02f, 1.602690511e-02f, 1.598729716e-02f, 1.594766559e-02f, 1.590801045e-02f, 1.586833183e-02f, 1.582862979e-02f,
+1.578890440e-02f, 1.574915574e-02f, 1.570938388e-02f, 1.566958888e-02f, 1.562977082e-02f, 1.558992976e-02f, 1.555006579e-02f, 1.551017897e-02f, 1.547026936e-02f, 1.543033705e-02f,
+1.539038211e-02f, 1.535040460e-02f, 1.531040459e-02f, 1.527038217e-02f, 1.523033739e-02f, 1.519027033e-02f, 1.515018106e-02f, 1.511006965e-02f, 1.506993618e-02f, 1.502978071e-02f,
+1.498960332e-02f, 1.494940408e-02f, 1.490918306e-02f, 1.486894033e-02f, 1.482867596e-02f, 1.478839002e-02f, 1.474808259e-02f, 1.470775374e-02f, 1.466740354e-02f, 1.462703205e-02f,
+1.458663936e-02f, 1.454622554e-02f, 1.450579065e-02f, 1.446533477e-02f, 1.442485797e-02f, 1.438436032e-02f, 1.434384189e-02f, 1.430330276e-02f, 1.426274299e-02f, 1.422216267e-02f,
+1.418156186e-02f, 1.414094063e-02f, 1.410029905e-02f, 1.405963721e-02f, 1.401895516e-02f, 1.397825298e-02f, 1.393753075e-02f, 1.389678854e-02f, 1.385602641e-02f, 1.381524445e-02f,
+1.377444271e-02f, 1.373362129e-02f, 1.369278024e-02f, 1.365191964e-02f, 1.361103956e-02f, 1.357014008e-02f, 1.352922126e-02f, 1.348828319e-02f, 1.344732593e-02f, 1.340634955e-02f,
+1.336535413e-02f, 1.332433974e-02f, 1.328330645e-02f, 1.324225434e-02f, 1.320118347e-02f, 1.316009393e-02f, 1.311898578e-02f, 1.307785909e-02f, 1.303671395e-02f, 1.299555041e-02f,
+1.295436856e-02f, 1.291316847e-02f, 1.287195021e-02f, 1.283071385e-02f, 1.278945946e-02f, 1.274818712e-02f, 1.270689691e-02f, 1.266558889e-02f, 1.262426314e-02f, 1.258291973e-02f,
+1.254155873e-02f, 1.250018022e-02f, 1.245878426e-02f, 1.241737094e-02f, 1.237594033e-02f, 1.233449250e-02f, 1.229302752e-02f, 1.225154546e-02f, 1.221004640e-02f, 1.216853042e-02f,
+1.212699758e-02f, 1.208544795e-02f, 1.204388162e-02f, 1.200229866e-02f, 1.196069913e-02f, 1.191908312e-02f, 1.187745069e-02f, 1.183580192e-02f, 1.179413688e-02f, 1.175245564e-02f,
+1.171075829e-02f, 1.166904489e-02f, 1.162731551e-02f, 1.158557024e-02f, 1.154380913e-02f, 1.150203227e-02f, 1.146023974e-02f, 1.141843160e-02f, 1.137660792e-02f, 1.133476879e-02f,
+1.129291427e-02f, 1.125104443e-02f, 1.120915937e-02f, 1.116725913e-02f, 1.112534381e-02f, 1.108341347e-02f, 1.104146819e-02f, 1.099950803e-02f, 1.095753309e-02f, 1.091554342e-02f,
+1.087353910e-02f, 1.083152021e-02f, 1.078948682e-02f, 1.074743901e-02f, 1.070537684e-02f, 1.066330040e-02f, 1.062120975e-02f, 1.057910497e-02f, 1.053698613e-02f, 1.049485331e-02f,
+1.045270659e-02f, 1.041054603e-02f, 1.036837171e-02f, 1.032618370e-02f, 1.028398209e-02f, 1.024176693e-02f, 1.019953831e-02f, 1.015729631e-02f, 1.011504098e-02f, 1.007277242e-02f,
+1.003049069e-02f, 9.988195864e-03f, 9.945888022e-03f, 9.903567236e-03f, 9.861233579e-03f, 9.818887127e-03f, 9.776527954e-03f, 9.734156133e-03f, 9.691771739e-03f, 9.649374847e-03f,
+9.606965530e-03f, 9.564543864e-03f, 9.522109922e-03f, 9.479663779e-03f, 9.437205509e-03f, 9.394735187e-03f, 9.352252887e-03f, 9.309758683e-03f, 9.267252650e-03f, 9.224734863e-03f,
+9.182205395e-03f, 9.139664322e-03f, 9.097111717e-03f, 9.054547656e-03f, 9.011972212e-03f, 8.969385461e-03f, 8.926787477e-03f, 8.884178334e-03f, 8.841558107e-03f, 8.798926871e-03f,
+8.756284700e-03f, 8.713631669e-03f, 8.670967851e-03f, 8.628293323e-03f, 8.585608159e-03f, 8.542912433e-03f, 8.500206219e-03f, 8.457489593e-03f, 8.414762630e-03f, 8.372025403e-03f,
+8.329277988e-03f, 8.286520459e-03f, 8.243752891e-03f, 8.200975359e-03f, 8.158187938e-03f, 8.115390701e-03f, 8.072583725e-03f, 8.029767083e-03f, 7.986940851e-03f, 7.944105103e-03f,
+7.901259914e-03f, 7.858405359e-03f, 7.815541513e-03f, 7.772668450e-03f, 7.729786245e-03f, 7.686894974e-03f, 7.643994710e-03f, 7.601085529e-03f, 7.558167506e-03f, 7.515240716e-03f,
+7.472305233e-03f, 7.429361132e-03f, 7.386408488e-03f, 7.343447377e-03f, 7.300477872e-03f, 7.257500049e-03f, 7.214513983e-03f, 7.171519749e-03f, 7.128517421e-03f, 7.085507075e-03f,
+7.042488785e-03f, 6.999462627e-03f, 6.956428675e-03f, 6.913387005e-03f, 6.870337690e-03f, 6.827280807e-03f, 6.784216431e-03f, 6.741144635e-03f, 6.698065496e-03f, 6.654979088e-03f,
+6.611885486e-03f, 6.568784765e-03f, 6.525677001e-03f, 6.482562267e-03f, 6.439440640e-03f, 6.396312194e-03f, 6.353177005e-03f, 6.310035146e-03f, 6.266886694e-03f, 6.223731724e-03f,
+6.180570309e-03f, 6.137402527e-03f, 6.094228450e-03f, 6.051048155e-03f, 6.007861717e-03f, 5.964669211e-03f, 5.921470711e-03f, 5.878266292e-03f, 5.835056031e-03f, 5.791840001e-03f,
+5.748618279e-03f, 5.705390938e-03f, 5.662158055e-03f, 5.618919703e-03f, 5.575675959e-03f, 5.532426898e-03f, 5.489172593e-03f, 5.445913121e-03f, 5.402648557e-03f, 5.359378975e-03f,
+5.316104451e-03f, 5.272825060e-03f, 5.229540877e-03f, 5.186251977e-03f, 5.142958435e-03f, 5.099660326e-03f, 5.056357725e-03f, 5.013050708e-03f, 4.969739349e-03f, 4.926423723e-03f,
+4.883103906e-03f, 4.839779973e-03f, 4.796451999e-03f, 4.753120059e-03f, 4.709784227e-03f, 4.666444580e-03f, 4.623101192e-03f, 4.579754138e-03f, 4.536403493e-03f, 4.493049333e-03f,
+4.449691732e-03f, 4.406330766e-03f, 4.362966509e-03f, 4.319599037e-03f, 4.276228425e-03f, 4.232854748e-03f, 4.189478081e-03f, 4.146098499e-03f, 4.102716077e-03f, 4.059330890e-03f,
+4.015943013e-03f, 3.972552521e-03f, 3.929159490e-03f, 3.885763994e-03f, 3.842366108e-03f, 3.798965908e-03f, 3.755563469e-03f, 3.712158865e-03f, 3.668752171e-03f, 3.625343463e-03f,
+3.581932816e-03f, 3.538520304e-03f, 3.495106003e-03f, 3.451689988e-03f, 3.408272333e-03f, 3.364853114e-03f, 3.321432406e-03f, 3.278010283e-03f, 3.234586821e-03f, 3.191162095e-03f,
+3.147736179e-03f, 3.104309149e-03f, 3.060881080e-03f, 3.017452046e-03f, 2.974022122e-03f, 2.930591384e-03f, 2.887159907e-03f, 2.843727764e-03f, 2.800295032e-03f, 2.756861785e-03f,
+2.713428099e-03f, 2.669994047e-03f, 2.626559705e-03f, 2.583125148e-03f, 2.539690451e-03f, 2.496255688e-03f, 2.452820935e-03f, 2.409386266e-03f, 2.365951756e-03f, 2.322517480e-03f,
+2.279083514e-03f, 2.235649931e-03f, 2.192216806e-03f, 2.148784215e-03f, 2.105352232e-03f, 2.061920933e-03f, 2.018490391e-03f, 1.975060681e-03f, 1.931631879e-03f, 1.888204059e-03f,
+1.844777296e-03f, 1.801351665e-03f, 1.757927240e-03f, 1.714504097e-03f, 1.671082309e-03f, 1.627661951e-03f, 1.584243099e-03f, 1.540825827e-03f, 1.497410210e-03f, 1.453996322e-03f,
+1.410584238e-03f, 1.367174033e-03f, 1.323765780e-03f, 1.280359556e-03f, 1.236955435e-03f, 1.193553490e-03f, 1.150153797e-03f, 1.106756431e-03f, 1.063361466e-03f, 1.019968976e-03f,
+9.765790356e-04f, 9.331917202e-04f, 8.898071039e-04f, 8.464252612e-04f, 8.030462667e-04f, 7.596701947e-04f, 7.162971199e-04f, 6.729271166e-04f, 6.295602593e-04f, 5.861966225e-04f,
+5.428362806e-04f, 4.994793080e-04f, 4.561257790e-04f, 4.127757682e-04f, 3.694293498e-04f, 3.260865983e-04f, 2.827475880e-04f, 2.394123931e-04f, 1.960810882e-04f, 1.527537473e-04f,
+1.094304449e-04f, 6.611125521e-05f, 2.279625250e-05f, -2.051448898e-05f, -6.382089500e-05f, -1.071228913e-04f, -1.504204038e-04f, -1.937133581e-04f, -2.370016802e-04f, -2.802852959e-04f,
+-3.235641311e-04f, -3.668381115e-04f, -4.101071631e-04f, -4.533712119e-04f, -4.966301837e-04f, -5.398840044e-04f, -5.831326000e-04f, -6.263758965e-04f, -6.696138199e-04f, -7.128462961e-04f,
+-7.560732512e-04f, -7.992946112e-04f, -8.425103022e-04f, -8.857202502e-04f, -9.289243813e-04f, -9.721226217e-04f, -1.015314897e-03f, -1.058501134e-03f, -1.101681259e-03f, -1.144855198e-03f,
+-1.188022876e-03f, -1.231184221e-03f, -1.274339158e-03f, -1.317487614e-03f, -1.360629515e-03f, -1.403764787e-03f, -1.446893357e-03f, -1.490015150e-03f, -1.533130094e-03f, -1.576238114e-03f,
+-1.619339137e-03f, -1.662433089e-03f, -1.705519897e-03f, -1.748599488e-03f, -1.791671786e-03f, -1.834736720e-03f, -1.877794216e-03f, -1.920844200e-03f, -1.963886598e-03f, -2.006921337e-03f,
+-2.049948345e-03f, -2.092967546e-03f, -2.135978869e-03f, -2.178982239e-03f, -2.221977584e-03f, -2.264964829e-03f, -2.307943902e-03f, -2.350914730e-03f, -2.393877239e-03f, -2.436831355e-03f,
+-2.479777006e-03f, -2.522714119e-03f, -2.565642620e-03f, -2.608562437e-03f, -2.651473495e-03f, -2.694375722e-03f, -2.737269045e-03f, -2.780153391e-03f, -2.823028687e-03f, -2.865894859e-03f,
+-2.908751836e-03f, -2.951599543e-03f, -2.994437908e-03f, -3.037266857e-03f, -3.080086319e-03f, -3.122896220e-03f, -3.165696488e-03f, -3.208487049e-03f, -3.251267830e-03f, -3.294038760e-03f,
+-3.336799764e-03f, -3.379550772e-03f, -3.422291708e-03f, -3.465022502e-03f, -3.507743081e-03f, -3.550453371e-03f, -3.593153300e-03f, -3.635842796e-03f, -3.678521786e-03f, -3.721190197e-03f,
+-3.763847957e-03f, -3.806494994e-03f, -3.849131235e-03f, -3.891756607e-03f, -3.934371039e-03f, -3.976974458e-03f, -4.019566791e-03f, -4.062147966e-03f, -4.104717911e-03f, -4.147276553e-03f,
+-4.189823821e-03f, -4.232359643e-03f, -4.274883945e-03f, -4.317396656e-03f, -4.359897703e-03f, -4.402387015e-03f, -4.444864519e-03f, -4.487330144e-03f, -4.529783817e-03f, -4.572225467e-03f,
+-4.614655021e-03f, -4.657072407e-03f, -4.699477554e-03f, -4.741870390e-03f, -4.784250842e-03f, -4.826618839e-03f, -4.868974310e-03f, -4.911317181e-03f, -4.953647383e-03f, -4.995964842e-03f,
+-5.038269487e-03f, -5.080561247e-03f, -5.122840050e-03f, -5.165105825e-03f, -5.207358499e-03f, -5.249598001e-03f, -5.291824260e-03f, -5.334037204e-03f, -5.376236762e-03f, -5.418422862e-03f,
+-5.460595433e-03f, -5.502754404e-03f, -5.544899703e-03f, -5.587031259e-03f, -5.629149000e-03f, -5.671252856e-03f, -5.713342755e-03f, -5.755418627e-03f, -5.797480399e-03f, -5.839528001e-03f,
+-5.881561362e-03f, -5.923580410e-03f, -5.965585075e-03f, -6.007575286e-03f, -6.049550971e-03f, -6.091512060e-03f, -6.133458482e-03f, -6.175390166e-03f, -6.217307041e-03f, -6.259209037e-03f,
+-6.301096082e-03f, -6.342968106e-03f, -6.384825039e-03f, -6.426666808e-03f, -6.468493345e-03f, -6.510304578e-03f, -6.552100437e-03f, -6.593880851e-03f, -6.635645749e-03f, -6.677395062e-03f,
+-6.719128719e-03f, -6.760846649e-03f, -6.802548782e-03f, -6.844235048e-03f, -6.885905376e-03f, -6.927559697e-03f, -6.969197939e-03f, -7.010820033e-03f, -7.052425909e-03f, -7.094015496e-03f,
+-7.135588725e-03f, -7.177145524e-03f, -7.218685826e-03f, -7.260209558e-03f, -7.301716652e-03f, -7.343207037e-03f, -7.384680644e-03f, -7.426137403e-03f, -7.467577243e-03f, -7.509000096e-03f,
+-7.550405891e-03f, -7.591794559e-03f, -7.633166030e-03f, -7.674520235e-03f, -7.715857103e-03f, -7.757176566e-03f, -7.798478554e-03f, -7.839762997e-03f, -7.881029825e-03f, -7.922278971e-03f,
+-7.963510363e-03f, -8.004723933e-03f, -8.045919612e-03f, -8.087097330e-03f, -8.128257018e-03f, -8.169398607e-03f, -8.210522028e-03f, -8.251627211e-03f, -8.292714088e-03f, -8.333782590e-03f,
+-8.374832647e-03f, -8.415864190e-03f, -8.456877151e-03f, -8.497871462e-03f, -8.538847052e-03f, -8.579803853e-03f, -8.620741797e-03f, -8.661660815e-03f, -8.702560837e-03f, -8.743441796e-03f,
+-8.784303623e-03f, -8.825146250e-03f, -8.865969606e-03f, -8.906773626e-03f, -8.947558239e-03f, -8.988323377e-03f, -9.029068973e-03f, -9.069794958e-03f, -9.110501263e-03f, -9.151187820e-03f,
+-9.191854561e-03f, -9.232501418e-03f, -9.273128323e-03f, -9.313735208e-03f, -9.354322005e-03f, -9.394888645e-03f, -9.435435061e-03f, -9.475961185e-03f, -9.516466949e-03f, -9.556952285e-03f,
+-9.597417125e-03f, -9.637861402e-03f, -9.678285048e-03f, -9.718687996e-03f, -9.759070177e-03f, -9.799431524e-03f, -9.839771970e-03f, -9.880091446e-03f, -9.920389887e-03f, -9.960667224e-03f,
+-1.000092339e-02f, -1.004115832e-02f, -1.008137194e-02f, -1.012156419e-02f, -1.016173500e-02f, -1.020188430e-02f, -1.024201202e-02f, -1.028211811e-02f, -1.032220249e-02f, -1.036226509e-02f,
+-1.040230585e-02f, -1.044232470e-02f, -1.048232157e-02f, -1.052229641e-02f, -1.056224913e-02f, -1.060217967e-02f, -1.064208798e-02f, -1.068197397e-02f, -1.072183759e-02f, -1.076167876e-02f,
+-1.080149743e-02f, -1.084129352e-02f, -1.088106697e-02f, -1.092081771e-02f, -1.096054567e-02f, -1.100025080e-02f, -1.103993302e-02f, -1.107959226e-02f, -1.111922847e-02f, -1.115884157e-02f,
+-1.119843150e-02f, -1.123799819e-02f, -1.127754158e-02f, -1.131706160e-02f, -1.135655818e-02f, -1.139603126e-02f, -1.143548078e-02f, -1.147490667e-02f, -1.151430885e-02f, -1.155368728e-02f,
+-1.159304187e-02f, -1.163237257e-02f, -1.167167931e-02f, -1.171096203e-02f, -1.175022065e-02f, -1.178945512e-02f, -1.182866537e-02f, -1.186785133e-02f, -1.190701294e-02f, -1.194615013e-02f,
+-1.198526284e-02f, -1.202435101e-02f, -1.206341456e-02f, -1.210245344e-02f, -1.214146757e-02f, -1.218045690e-02f, -1.221942135e-02f, -1.225836087e-02f, -1.229727539e-02f, -1.233616485e-02f,
+-1.237502917e-02f, -1.241386830e-02f, -1.245268218e-02f, -1.249147072e-02f, -1.253023388e-02f, -1.256897159e-02f, -1.260768378e-02f, -1.264637040e-02f, -1.268503136e-02f, -1.272366662e-02f,
+-1.276227610e-02f, -1.280085975e-02f, -1.283941750e-02f, -1.287794928e-02f, -1.291645504e-02f, -1.295493470e-02f, -1.299338820e-02f, -1.303181549e-02f, -1.307021649e-02f, -1.310859114e-02f,
+-1.314693938e-02f, -1.318526115e-02f, -1.322355638e-02f, -1.326182501e-02f, -1.330006697e-02f, -1.333828221e-02f, -1.337647065e-02f, -1.341463224e-02f, -1.345276692e-02f, -1.349087461e-02f,
+-1.352895526e-02f, -1.356700880e-02f, -1.360503517e-02f, -1.364303431e-02f, -1.368100615e-02f, -1.371895064e-02f, -1.375686770e-02f, -1.379475728e-02f, -1.383261931e-02f, -1.387045374e-02f,
+-1.390826049e-02f, -1.394603951e-02f, -1.398379074e-02f, -1.402151410e-02f, -1.405920955e-02f, -1.409687701e-02f, -1.413451642e-02f, -1.417212773e-02f, -1.420971087e-02f, -1.424726578e-02f,
+-1.428479239e-02f, -1.432229065e-02f, -1.435976049e-02f, -1.439720185e-02f, -1.443461467e-02f, -1.447199889e-02f, -1.450935444e-02f, -1.454668127e-02f, -1.458397931e-02f, -1.462124850e-02f,
+-1.465848878e-02f, -1.469570009e-02f, -1.473288236e-02f, -1.477003554e-02f, -1.480715957e-02f, -1.484425438e-02f, -1.488131991e-02f, -1.491835610e-02f, -1.495536290e-02f, -1.499234023e-02f,
+-1.502928804e-02f, -1.506620627e-02f, -1.510309485e-02f, -1.513995374e-02f, -1.517678285e-02f, -1.521358215e-02f, -1.525035155e-02f, -1.528709101e-02f, -1.532380047e-02f, -1.536047986e-02f,
+-1.539712912e-02f, -1.543374819e-02f, -1.547033702e-02f, -1.550689554e-02f, -1.554342369e-02f, -1.557992141e-02f, -1.561638865e-02f, -1.565282533e-02f, -1.568923142e-02f, -1.572560683e-02f,
+-1.576195152e-02f, -1.579826542e-02f, -1.583454847e-02f, -1.587080062e-02f, -1.590702181e-02f, -1.594321197e-02f, -1.597937104e-02f, -1.601549898e-02f, -1.605159571e-02f, -1.608766118e-02f,
+-1.612369532e-02f, -1.615969809e-02f, -1.619566942e-02f, -1.623160926e-02f, -1.626751753e-02f, -1.630339419e-02f, -1.633923918e-02f, -1.637505243e-02f, -1.641083390e-02f, -1.644658351e-02f,
+-1.648230121e-02f, -1.651798695e-02f, -1.655364066e-02f, -1.658926229e-02f, -1.662485178e-02f, -1.666040906e-02f, -1.669593409e-02f, -1.673142680e-02f, -1.676688714e-02f, -1.680231504e-02f,
+-1.683771046e-02f, -1.687307332e-02f, -1.690840358e-02f, -1.694370118e-02f, -1.697896605e-02f, -1.701419815e-02f, -1.704939741e-02f, -1.708456377e-02f, -1.711969719e-02f, -1.715479759e-02f,
+-1.718986493e-02f, -1.722489914e-02f, -1.725990018e-02f, -1.729486798e-02f, -1.732980248e-02f, -1.736470363e-02f, -1.739957138e-02f, -1.743440565e-02f, -1.746920641e-02f, -1.750397359e-02f,
+-1.753870713e-02f, -1.757340698e-02f, -1.760807308e-02f, -1.764270537e-02f, -1.767730381e-02f, -1.771186832e-02f, -1.774639887e-02f, -1.778089538e-02f, -1.781535780e-02f, -1.784978608e-02f,
+-1.788418017e-02f, -1.791854000e-02f, -1.795286552e-02f, -1.798715667e-02f, -1.802141340e-02f, -1.805563565e-02f, -1.808982337e-02f, -1.812397651e-02f, -1.815809499e-02f, -1.819217878e-02f,
+-1.822622781e-02f, -1.826024203e-02f, -1.829422139e-02f, -1.832816582e-02f, -1.836207528e-02f, -1.839594970e-02f, -1.842978904e-02f, -1.846359324e-02f, -1.849736225e-02f, -1.853109600e-02f,
+-1.856479445e-02f, -1.859845753e-02f, -1.863208521e-02f, -1.866567741e-02f, -1.869923409e-02f, -1.873275519e-02f, -1.876624066e-02f, -1.879969044e-02f, -1.883310448e-02f, -1.886648273e-02f,
+-1.889982513e-02f, -1.893313162e-02f, -1.896640216e-02f, -1.899963669e-02f, -1.903283515e-02f, -1.906599750e-02f, -1.909912367e-02f, -1.913221362e-02f, -1.916526728e-02f, -1.919828462e-02f,
+-1.923126557e-02f, -1.926421008e-02f, -1.929711810e-02f, -1.932998957e-02f, -1.936282444e-02f, -1.939562267e-02f, -1.942838418e-02f, -1.946110894e-02f, -1.949379689e-02f, -1.952644798e-02f,
+-1.955906215e-02f, -1.959163935e-02f, -1.962417953e-02f, -1.965668264e-02f, -1.968914862e-02f, -1.972157742e-02f, -1.975396899e-02f, -1.978632328e-02f, -1.981864023e-02f, -1.985091980e-02f,
+-1.988316193e-02f, -1.991536656e-02f, -1.994753366e-02f, -1.997966316e-02f, -2.001175501e-02f, -2.004380916e-02f, -2.007582557e-02f, -2.010780417e-02f, -2.013974492e-02f, -2.017164776e-02f,
+-2.020351265e-02f, -2.023533954e-02f, -2.026712836e-02f, -2.029887908e-02f, -2.033059164e-02f, -2.036226598e-02f, -2.039390207e-02f, -2.042549984e-02f, -2.045705925e-02f, -2.048858024e-02f,
+-2.052006277e-02f, -2.055150678e-02f, -2.058291223e-02f, -2.061427906e-02f, -2.064560723e-02f, -2.067689668e-02f, -2.070814736e-02f, -2.073935923e-02f, -2.077053222e-02f, -2.080166631e-02f,
+-2.083276142e-02f, -2.086381752e-02f, -2.089483455e-02f, -2.092581247e-02f, -2.095675121e-02f, -2.098765075e-02f, -2.101851102e-02f, -2.104933197e-02f, -2.108011357e-02f, -2.111085575e-02f,
+-2.114155846e-02f, -2.117222167e-02f, -2.120284532e-02f, -2.123342936e-02f, -2.126397374e-02f, -2.129447841e-02f, -2.132494333e-02f, -2.135536844e-02f, -2.138575370e-02f, -2.141609907e-02f,
+-2.144640448e-02f, -2.147666989e-02f, -2.150689526e-02f, -2.153708053e-02f, -2.156722566e-02f, -2.159733060e-02f, -2.162739530e-02f, -2.165741972e-02f, -2.168740380e-02f, -2.171734749e-02f,
+-2.174725076e-02f, -2.177711355e-02f, -2.180693582e-02f, -2.183671751e-02f, -2.186645859e-02f, -2.189615899e-02f, -2.192581868e-02f, -2.195543761e-02f, -2.198501573e-02f, -2.201455300e-02f,
+-2.204404936e-02f, -2.207350477e-02f, -2.210291919e-02f, -2.213229256e-02f, -2.216162485e-02f, -2.219091599e-02f, -2.222016596e-02f, -2.224937469e-02f, -2.227854215e-02f, -2.230766828e-02f,
+-2.233675305e-02f, -2.236579641e-02f, -2.239479830e-02f, -2.242375869e-02f, -2.245267752e-02f, -2.248155476e-02f, -2.251039035e-02f, -2.253918425e-02f, -2.256793642e-02f, -2.259664681e-02f,
+-2.262531537e-02f, -2.265394206e-02f, -2.268252683e-02f, -2.271106964e-02f, -2.273957045e-02f, -2.276802920e-02f, -2.279644585e-02f, -2.282482036e-02f, -2.285315269e-02f, -2.288144278e-02f,
+-2.290969060e-02f, -2.293789610e-02f, -2.296605923e-02f, -2.299417995e-02f, -2.302225821e-02f, -2.305029398e-02f, -2.307828721e-02f, -2.310623784e-02f, -2.313414585e-02f, -2.316201118e-02f,
+-2.318983380e-02f, -2.321761365e-02f, -2.324535069e-02f, -2.327304488e-02f, -2.330069618e-02f, -2.332830455e-02f, -2.335586993e-02f, -2.338339228e-02f, -2.341087157e-02f, -2.343830775e-02f,
+-2.346570078e-02f, -2.349305061e-02f, -2.352035720e-02f, -2.354762051e-02f, -2.357484049e-02f, -2.360201710e-02f, -2.362915030e-02f, -2.365624005e-02f, -2.368328630e-02f, -2.371028902e-02f,
+-2.373724815e-02f, -2.376416367e-02f, -2.379103551e-02f, -2.381786365e-02f, -2.384464804e-02f, -2.387138864e-02f, -2.389808541e-02f, -2.392473830e-02f, -2.395134727e-02f, -2.397791229e-02f,
+-2.400443330e-02f, -2.403091028e-02f, -2.405734317e-02f, -2.408373194e-02f, -2.411007655e-02f, -2.413637694e-02f, -2.416263309e-02f, -2.418884496e-02f, -2.421501249e-02f, -2.424113565e-02f,
+-2.426721441e-02f, -2.429324871e-02f, -2.431923852e-02f, -2.434518379e-02f, -2.437108450e-02f, -2.439694059e-02f, -2.442275203e-02f, -2.444851877e-02f, -2.447424078e-02f, -2.449991802e-02f,
+-2.452555044e-02f, -2.455113801e-02f, -2.457668068e-02f, -2.460217842e-02f, -2.462763119e-02f, -2.465303895e-02f, -2.467840166e-02f, -2.470371927e-02f, -2.472899175e-02f, -2.475421907e-02f,
+-2.477940118e-02f, -2.480453803e-02f, -2.482962961e-02f, -2.485467585e-02f, -2.487967673e-02f, -2.490463221e-02f, -2.492954225e-02f, -2.495440680e-02f, -2.497922584e-02f, -2.500399932e-02f,
+-2.502872721e-02f, -2.505340946e-02f, -2.507804604e-02f, -2.510263691e-02f, -2.512718203e-02f, -2.515168137e-02f, -2.517613488e-02f, -2.520054253e-02f, -2.522490428e-02f, -2.524922010e-02f,
+-2.527348994e-02f, -2.529771377e-02f, -2.532189155e-02f, -2.534602325e-02f, -2.537010882e-02f, -2.539414823e-02f, -2.541814145e-02f, -2.544208843e-02f, -2.546598914e-02f, -2.548984354e-02f,
+-2.551365160e-02f, -2.553741328e-02f, -2.556112854e-02f, -2.558479734e-02f, -2.560841966e-02f, -2.563199545e-02f, -2.565552468e-02f, -2.567900730e-02f, -2.570244330e-02f, -2.572583262e-02f,
+-2.574917524e-02f, -2.577247111e-02f, -2.579572021e-02f, -2.581892250e-02f, -2.584207793e-02f, -2.586518648e-02f, -2.588824812e-02f, -2.591126279e-02f, -2.593423048e-02f, -2.595715114e-02f,
+-2.598002475e-02f, -2.600285125e-02f, -2.602563063e-02f, -2.604836285e-02f, -2.607104786e-02f, -2.609368564e-02f, -2.611627616e-02f, -2.613881937e-02f, -2.616131524e-02f, -2.618376375e-02f,
+-2.620616485e-02f, -2.622851851e-02f, -2.625082469e-02f, -2.627308337e-02f, -2.629529451e-02f, -2.631745808e-02f, -2.633957403e-02f, -2.636164235e-02f, -2.638366299e-02f, -2.640563592e-02f,
+-2.642756111e-02f, -2.644943853e-02f, -2.647126813e-02f, -2.649304990e-02f, -2.651478379e-02f, -2.653646978e-02f, -2.655810782e-02f, -2.657969789e-02f, -2.660123996e-02f, -2.662273399e-02f,
+-2.664417995e-02f, -2.666557781e-02f, -2.668692754e-02f, -2.670822910e-02f, -2.672948245e-02f, -2.675068758e-02f, -2.677184445e-02f, -2.679295302e-02f, -2.681401327e-02f, -2.683502515e-02f,
+-2.685598865e-02f, -2.687690373e-02f, -2.689777035e-02f, -2.691858849e-02f, -2.693935812e-02f, -2.696007920e-02f, -2.698075171e-02f, -2.700137560e-02f, -2.702195086e-02f, -2.704247745e-02f,
+-2.706295533e-02f, -2.708338449e-02f, -2.710376488e-02f, -2.712409648e-02f, -2.714437926e-02f, -2.716461319e-02f, -2.718479824e-02f, -2.720493437e-02f, -2.722502156e-02f, -2.724505978e-02f,
+-2.726504899e-02f, -2.728498917e-02f, -2.730488029e-02f, -2.732472232e-02f, -2.734451523e-02f, -2.736425898e-02f, -2.738395356e-02f, -2.740359893e-02f, -2.742319506e-02f, -2.744274192e-02f,
+-2.746223949e-02f, -2.748168773e-02f, -2.750108661e-02f, -2.752043612e-02f, -2.753973621e-02f, -2.755898687e-02f, -2.757818805e-02f, -2.759733974e-02f, -2.761644191e-02f, -2.763549452e-02f,
+-2.765449755e-02f, -2.767345098e-02f, -2.769235476e-02f, -2.771120888e-02f, -2.773001331e-02f, -2.774876802e-02f, -2.776747298e-02f, -2.778612817e-02f, -2.780473355e-02f, -2.782328911e-02f,
+-2.784179480e-02f, -2.786025062e-02f, -2.787865652e-02f, -2.789701248e-02f, -2.791531848e-02f, -2.793357449e-02f, -2.795178048e-02f, -2.796993642e-02f, -2.798804230e-02f, -2.800609807e-02f,
+-2.802410373e-02f, -2.804205923e-02f, -2.805996455e-02f, -2.807781967e-02f, -2.809562457e-02f, -2.811337921e-02f, -2.813108357e-02f, -2.814873762e-02f, -2.816634134e-02f, -2.818389471e-02f,
+-2.820139769e-02f, -2.821885027e-02f, -2.823625241e-02f, -2.825360410e-02f, -2.827090530e-02f, -2.828815599e-02f, -2.830535615e-02f, -2.832250575e-02f, -2.833960478e-02f, -2.835665319e-02f,
+-2.837365097e-02f, -2.839059809e-02f, -2.840749454e-02f, -2.842434028e-02f, -2.844113529e-02f, -2.845787955e-02f, -2.847457303e-02f, -2.849121571e-02f, -2.850780757e-02f, -2.852434857e-02f,
+-2.854083871e-02f, -2.855727795e-02f, -2.857366627e-02f, -2.859000364e-02f, -2.860629006e-02f, -2.862252548e-02f, -2.863870989e-02f, -2.865484327e-02f, -2.867092559e-02f, -2.868695682e-02f,
+-2.870293696e-02f, -2.871886596e-02f, -2.873474382e-02f, -2.875057051e-02f, -2.876634600e-02f, -2.878207028e-02f, -2.879774332e-02f, -2.881336510e-02f, -2.882893560e-02f, -2.884445479e-02f,
+-2.885992266e-02f, -2.887533918e-02f, -2.889070433e-02f, -2.890601809e-02f, -2.892128044e-02f, -2.893649135e-02f, -2.895165081e-02f, -2.896675879e-02f, -2.898181528e-02f, -2.899682024e-02f,
+-2.901177367e-02f, -2.902667554e-02f, -2.904152582e-02f, -2.905632451e-02f, -2.907107157e-02f, -2.908576699e-02f, -2.910041075e-02f, -2.911500282e-02f, -2.912954319e-02f, -2.914403183e-02f,
+-2.915846874e-02f, -2.917285388e-02f, -2.918718723e-02f, -2.920146878e-02f, -2.921569851e-02f, -2.922987640e-02f, -2.924400242e-02f, -2.925807657e-02f, -2.927209881e-02f, -2.928606913e-02f,
+-2.929998752e-02f, -2.931385395e-02f, -2.932766839e-02f, -2.934143085e-02f, -2.935514129e-02f, -2.936879969e-02f, -2.938240605e-02f, -2.939596033e-02f, -2.940946253e-02f, -2.942291262e-02f,
+-2.943631058e-02f, -2.944965641e-02f, -2.946295007e-02f, -2.947619155e-02f, -2.948938083e-02f, -2.950251790e-02f, -2.951560274e-02f, -2.952863533e-02f, -2.954161565e-02f, -2.955454368e-02f,
+-2.956741941e-02f, -2.958024283e-02f, -2.959301391e-02f, -2.960573263e-02f, -2.961839899e-02f, -2.963101295e-02f, -2.964357452e-02f, -2.965608366e-02f, -2.966854037e-02f, -2.968094462e-02f,
+-2.969329640e-02f, -2.970559570e-02f, -2.971784250e-02f, -2.973003677e-02f, -2.974217851e-02f, -2.975426771e-02f, -2.976630433e-02f, -2.977828838e-02f, -2.979021982e-02f, -2.980209866e-02f,
+-2.981392486e-02f, -2.982569842e-02f, -2.983741933e-02f, -2.984908756e-02f, -2.986070310e-02f, -2.987226593e-02f, -2.988377605e-02f, -2.989523343e-02f, -2.990663806e-02f, -2.991798993e-02f,
+-2.992928902e-02f, -2.994053532e-02f, -2.995172882e-02f, -2.996286949e-02f, -2.997395733e-02f, -2.998499231e-02f, -2.999597444e-02f, -3.000690369e-02f, -3.001778005e-02f, -3.002860350e-02f,
+-3.003937403e-02f, -3.005009164e-02f, -3.006075630e-02f, -3.007136800e-02f, -3.008192673e-02f, -3.009243247e-02f, -3.010288522e-02f, -3.011328495e-02f, -3.012363167e-02f, -3.013392534e-02f,
+-3.014416597e-02f, -3.015435353e-02f, -3.016448803e-02f, -3.017456943e-02f, -3.018459774e-02f, -3.019457293e-02f, -3.020449500e-02f, -3.021436394e-02f, -3.022417973e-02f, -3.023394236e-02f,
+-3.024365182e-02f, -3.025330810e-02f, -3.026291118e-02f, -3.027246106e-02f, -3.028195772e-02f, -3.029140116e-02f, -3.030079135e-02f, -3.031012830e-02f, -3.031941198e-02f, -3.032864239e-02f,
+-3.033781951e-02f, -3.034694335e-02f, -3.035601388e-02f, -3.036503109e-02f, -3.037399498e-02f, -3.038290553e-02f, -3.039176274e-02f, -3.040056658e-02f, -3.040931707e-02f, -3.041801417e-02f,
+-3.042665789e-02f, -3.043524822e-02f, -3.044378514e-02f, -3.045226864e-02f, -3.046069872e-02f, -3.046907536e-02f, -3.047739856e-02f, -3.048566830e-02f, -3.049388459e-02f, -3.050204740e-02f,
+-3.051015673e-02f, -3.051821258e-02f, -3.052621492e-02f, -3.053416376e-02f, -3.054205908e-02f, -3.054990088e-02f, -3.055768915e-02f, -3.056542388e-02f, -3.057310506e-02f, -3.058073268e-02f,
+-3.058830673e-02f, -3.059582722e-02f, -3.060329412e-02f, -3.061070743e-02f, -3.061806715e-02f, -3.062537327e-02f, -3.063262577e-02f, -3.063982466e-02f, -3.064696992e-02f, -3.065406154e-02f,
+-3.066109953e-02f, -3.066808387e-02f, -3.067501455e-02f, -3.068189157e-02f, -3.068871493e-02f, -3.069548461e-02f, -3.070220061e-02f, -3.070886292e-02f, -3.071547154e-02f, -3.072202646e-02f,
+-3.072852767e-02f, -3.073497517e-02f, -3.074136895e-02f, -3.074770901e-02f, -3.075399534e-02f, -3.076022793e-02f, -3.076640678e-02f, -3.077253189e-02f, -3.077860324e-02f, -3.078462083e-02f,
+-3.079058466e-02f, -3.079649472e-02f, -3.080235101e-02f, -3.080815352e-02f, -3.081390225e-02f, -3.081959719e-02f, -3.082523834e-02f, -3.083082569e-02f, -3.083635923e-02f, -3.084183898e-02f,
+-3.084726491e-02f, -3.085263703e-02f, -3.085795532e-02f, -3.086321980e-02f, -3.086843045e-02f, -3.087358727e-02f, -3.087869025e-02f, -3.088373939e-02f, -3.088873470e-02f, -3.089367616e-02f,
+-3.089856377e-02f, -3.090339753e-02f, -3.090817743e-02f, -3.091290347e-02f, -3.091757566e-02f, -3.092219398e-02f, -3.092675843e-02f, -3.093126901e-02f, -3.093572572e-02f, -3.094012856e-02f,
+-3.094447752e-02f, -3.094877259e-02f, -3.095301379e-02f, -3.095720110e-02f, -3.096133453e-02f, -3.096541406e-02f, -3.096943971e-02f, -3.097341147e-02f, -3.097732933e-02f, -3.098119329e-02f,
+-3.098500336e-02f, -3.098875953e-02f, -3.099246180e-02f, -3.099611017e-02f, -3.099970464e-02f, -3.100324520e-02f, -3.100673186e-02f, -3.101016462e-02f, -3.101354347e-02f, -3.101686841e-02f,
+-3.102013945e-02f, -3.102335657e-02f, -3.102651979e-02f, -3.102962910e-02f, -3.103268451e-02f, -3.103568600e-02f, -3.103863358e-02f, -3.104152726e-02f, -3.104436702e-02f, -3.104715288e-02f,
+-3.104988483e-02f, -3.105256287e-02f, -3.105518701e-02f, -3.105775724e-02f, -3.106027356e-02f, -3.106273598e-02f, -3.106514449e-02f, -3.106749910e-02f, -3.106979981e-02f, -3.107204661e-02f,
+-3.107423952e-02f, -3.107637853e-02f, -3.107846364e-02f, -3.108049485e-02f, -3.108247217e-02f, -3.108439560e-02f, -3.108626514e-02f, -3.108808079e-02f, -3.108984255e-02f, -3.109155043e-02f,
+-3.109320442e-02f, -3.109480454e-02f, -3.109635078e-02f, -3.109784314e-02f, -3.109928163e-02f, -3.110066625e-02f, -3.110199700e-02f, -3.110327389e-02f, -3.110449692e-02f, -3.110566608e-02f,
+-3.110678140e-02f, -3.110784286e-02f, -3.110885047e-02f, -3.110980423e-02f, -3.111070416e-02f, -3.111155024e-02f, -3.111234249e-02f, -3.111308091e-02f, -3.111376550e-02f, -3.111439626e-02f,
+-3.111497321e-02f, -3.111549634e-02f, -3.111596566e-02f, -3.111638118e-02f, -3.111674289e-02f, -3.111705080e-02f, -3.111730492e-02f, -3.111750525e-02f, -3.111765180e-02f, -3.111774457e-02f,
+-3.111778356e-02f, -3.111776879e-02f, -3.111770025e-02f, -3.111757795e-02f, -3.111740190e-02f, -3.111717210e-02f, -3.111688856e-02f, -3.111655128e-02f, -3.111616026e-02f, -3.111571553e-02f,
+-3.111521707e-02f, -3.111466490e-02f, -3.111405902e-02f, -3.111339944e-02f, -3.111268617e-02f, -3.111191920e-02f, -3.111109856e-02f, -3.111022423e-02f, -3.110929624e-02f, -3.110831459e-02f,
+-3.110727927e-02f, -3.110619031e-02f, -3.110504771e-02f, -3.110385147e-02f, -3.110260160e-02f, -3.110129812e-02f, -3.109994102e-02f, -3.109853031e-02f, -3.109706600e-02f, -3.109554811e-02f,
+-3.109397663e-02f, -3.109235157e-02f, -3.109067295e-02f, -3.108894077e-02f, -3.108715503e-02f, -3.108531576e-02f, -3.108342294e-02f, -3.108147660e-02f, -3.107947675e-02f, -3.107742338e-02f,
+-3.107531651e-02f, -3.107315615e-02f, -3.107094230e-02f, -3.106867498e-02f, -3.106635419e-02f, -3.106397995e-02f, -3.106155226e-02f, -3.105907113e-02f, -3.105653657e-02f, -3.105394859e-02f,
+-3.105130720e-02f, -3.104861241e-02f, -3.104586423e-02f, -3.104306267e-02f, -3.104020774e-02f, -3.103729944e-02f, -3.103433780e-02f, -3.103132281e-02f, -3.102825450e-02f, -3.102513286e-02f,
+-3.102195791e-02f, -3.101872966e-02f, -3.101544813e-02f, -3.101211331e-02f, -3.100872523e-02f, -3.100528389e-02f, -3.100178931e-02f, -3.099824149e-02f, -3.099464045e-02f, -3.099098620e-02f,
+-3.098727874e-02f, -3.098351810e-02f, -3.097970428e-02f, -3.097583729e-02f, -3.097191715e-02f, -3.096794387e-02f, -3.096391745e-02f, -3.095983792e-02f, -3.095570527e-02f, -3.095151954e-02f,
+-3.094728072e-02f, -3.094298883e-02f, -3.093864389e-02f, -3.093424589e-02f, -3.092979487e-02f, -3.092529083e-02f, -3.092073378e-02f, -3.091612373e-02f, -3.091146071e-02f, -3.090674471e-02f,
+-3.090197576e-02f, -3.089715387e-02f, -3.089227905e-02f, -3.088735131e-02f, -3.088237068e-02f, -3.087733715e-02f, -3.087225075e-02f, -3.086711149e-02f, -3.086191939e-02f, -3.085667445e-02f,
+-3.085137669e-02f, -3.084602613e-02f, -3.084062277e-02f, -3.083516664e-02f, -3.082965775e-02f, -3.082409611e-02f, -3.081848174e-02f, -3.081281465e-02f, -3.080709486e-02f, -3.080132238e-02f,
+-3.079549722e-02f, -3.078961941e-02f, -3.078368896e-02f, -3.077770587e-02f, -3.077167017e-02f, -3.076558188e-02f, -3.075944100e-02f, -3.075324756e-02f, -3.074700156e-02f, -3.074070304e-02f,
+-3.073435199e-02f, -3.072794843e-02f, -3.072149240e-02f, -3.071498388e-02f, -3.070842292e-02f, -3.070180951e-02f, -3.069514369e-02f, -3.068842545e-02f, -3.068165483e-02f, -3.067483184e-02f,
+-3.066795648e-02f, -3.066102879e-02f, -3.065404878e-02f, -3.064701646e-02f, -3.063993185e-02f, -3.063279497e-02f, -3.062560584e-02f, -3.061836447e-02f, -3.061107088e-02f, -3.060372509e-02f,
+-3.059632711e-02f, -3.058887697e-02f, -3.058137468e-02f, -3.057382026e-02f, -3.056621372e-02f, -3.055855509e-02f, -3.055084439e-02f, -3.054308162e-02f, -3.053526681e-02f, -3.052739999e-02f,
+-3.051948116e-02f, -3.051151034e-02f, -3.050348756e-02f, -3.049541283e-02f, -3.048728617e-02f, -3.047910760e-02f, -3.047087714e-02f, -3.046259481e-02f, -3.045426062e-02f, -3.044587461e-02f,
+-3.043743678e-02f, -3.042894715e-02f, -3.042040575e-02f, -3.041181259e-02f, -3.040316770e-02f, -3.039447109e-02f, -3.038572279e-02f, -3.037692281e-02f, -3.036807117e-02f, -3.035916790e-02f,
+-3.035021301e-02f, -3.034120653e-02f, -3.033214847e-02f, -3.032303886e-02f, -3.031387771e-02f, -3.030466505e-02f, -3.029540090e-02f, -3.028608528e-02f, -3.027671820e-02f, -3.026729969e-02f,
+-3.025782978e-02f, -3.024830848e-02f, -3.023873581e-02f, -3.022911180e-02f, -3.021943646e-02f, -3.020970982e-02f, -3.019993190e-02f, -3.019010273e-02f, -3.018022231e-02f, -3.017029068e-02f,
+-3.016030786e-02f, -3.015027387e-02f, -3.014018872e-02f, -3.013005245e-02f, -3.011986508e-02f, -3.010962662e-02f, -3.009933711e-02f, -3.008899655e-02f, -3.007860498e-02f, -3.006816242e-02f,
+-3.005766890e-02f, -3.004712442e-02f, -3.003652902e-02f, -3.002588273e-02f, -3.001518555e-02f, -3.000443752e-02f, -2.999363866e-02f, -2.998278900e-02f, -2.997188855e-02f, -2.996093734e-02f,
+-2.994993540e-02f, -2.993888274e-02f, -2.992777939e-02f, -2.991662538e-02f, -2.990542073e-02f, -2.989416546e-02f, -2.988285960e-02f, -2.987150317e-02f, -2.986009620e-02f, -2.984863871e-02f,
+-2.983713072e-02f, -2.982557226e-02f, -2.981396336e-02f, -2.980230403e-02f, -2.979059431e-02f, -2.977883422e-02f, -2.976702379e-02f, -2.975516303e-02f, -2.974325197e-02f, -2.973129065e-02f,
+-2.971927908e-02f, -2.970721729e-02f, -2.969510530e-02f, -2.968294315e-02f, -2.967073086e-02f, -2.965846844e-02f, -2.964615594e-02f, -2.963379337e-02f, -2.962138076e-02f, -2.960891814e-02f,
+-2.959640553e-02f, -2.958384296e-02f, -2.957123045e-02f, -2.955856804e-02f, -2.954585575e-02f, -2.953309360e-02f, -2.952028162e-02f, -2.950741984e-02f, -2.949450829e-02f, -2.948154699e-02f,
+-2.946853597e-02f, -2.945547525e-02f, -2.944236487e-02f, -2.942920485e-02f, -2.941599522e-02f, -2.940273601e-02f, -2.938942723e-02f, -2.937606893e-02f, -2.936266113e-02f, -2.934920385e-02f,
+-2.933569713e-02f, -2.932214099e-02f, -2.930853546e-02f, -2.929488057e-02f, -2.928117634e-02f, -2.926742281e-02f, -2.925362000e-02f, -2.923976795e-02f, -2.922586667e-02f, -2.921191620e-02f,
+-2.919791657e-02f, -2.918386781e-02f, -2.916976994e-02f, -2.915562299e-02f, -2.914142700e-02f, -2.912718199e-02f, -2.911288798e-02f, -2.909854502e-02f, -2.908415313e-02f, -2.906971234e-02f,
+-2.905522268e-02f, -2.904068417e-02f, -2.902609686e-02f, -2.901146076e-02f, -2.899677590e-02f, -2.898204233e-02f, -2.896726006e-02f, -2.895242913e-02f, -2.893754957e-02f, -2.892262140e-02f,
+-2.890764466e-02f, -2.889261938e-02f, -2.887754559e-02f, -2.886242332e-02f, -2.884725259e-02f, -2.883203345e-02f, -2.881676592e-02f, -2.880145003e-02f, -2.878608582e-02f, -2.877067331e-02f,
+-2.875521253e-02f, -2.873970352e-02f, -2.872414631e-02f, -2.870854093e-02f, -2.869288740e-02f, -2.867718577e-02f, -2.866143607e-02f, -2.864563832e-02f, -2.862979255e-02f, -2.861389881e-02f,
+-2.859795711e-02f, -2.858196750e-02f, -2.856593000e-02f, -2.854984465e-02f, -2.853371148e-02f, -2.851753052e-02f, -2.850130181e-02f, -2.848502537e-02f, -2.846870124e-02f, -2.845232945e-02f,
+-2.843591003e-02f, -2.841944302e-02f, -2.840292846e-02f, -2.838636636e-02f, -2.836975677e-02f, -2.835309972e-02f, -2.833639524e-02f, -2.831964336e-02f, -2.830284413e-02f, -2.828599757e-02f,
+-2.826910371e-02f, -2.825216259e-02f, -2.823517424e-02f, -2.821813870e-02f, -2.820105600e-02f, -2.818392618e-02f, -2.816674926e-02f, -2.814952528e-02f, -2.813225428e-02f, -2.811493629e-02f,
+-2.809757135e-02f, -2.808015948e-02f, -2.806270073e-02f, -2.804519512e-02f, -2.802764270e-02f, -2.801004349e-02f, -2.799239754e-02f, -2.797470487e-02f, -2.795696553e-02f, -2.793917954e-02f,
+-2.792134694e-02f, -2.790346777e-02f, -2.788554206e-02f, -2.786756985e-02f, -2.784955116e-02f, -2.783148605e-02f, -2.781337454e-02f, -2.779521667e-02f, -2.777701248e-02f, -2.775876199e-02f,
+-2.774046525e-02f, -2.772212229e-02f, -2.770373315e-02f, -2.768529787e-02f, -2.766681647e-02f, -2.764828900e-02f, -2.762971549e-02f, -2.761109598e-02f, -2.759243051e-02f, -2.757371911e-02f,
+-2.755496181e-02f, -2.753615866e-02f, -2.751730970e-02f, -2.749841495e-02f, -2.747947445e-02f, -2.746048825e-02f, -2.744145638e-02f, -2.742237887e-02f, -2.740325577e-02f, -2.738408710e-02f,
+-2.736487292e-02f, -2.734561325e-02f, -2.732630813e-02f, -2.730695761e-02f, -2.728756171e-02f, -2.726812048e-02f, -2.724863395e-02f, -2.722910216e-02f, -2.720952515e-02f, -2.718990296e-02f,
+-2.717023563e-02f, -2.715052318e-02f, -2.713076567e-02f, -2.711096313e-02f, -2.709111560e-02f, -2.707122311e-02f, -2.705128571e-02f, -2.703130343e-02f, -2.701127631e-02f, -2.699120440e-02f,
+-2.697108772e-02f, -2.695092633e-02f, -2.693072025e-02f, -2.691046953e-02f, -2.689017420e-02f, -2.686983431e-02f, -2.684944990e-02f, -2.682902099e-02f, -2.680854764e-02f, -2.678802988e-02f,
+-2.676746776e-02f, -2.674686130e-02f, -2.672621056e-02f, -2.670551557e-02f, -2.668477636e-02f, -2.666399299e-02f, -2.664316549e-02f, -2.662229390e-02f, -2.660137826e-02f, -2.658041861e-02f,
+-2.655941499e-02f, -2.653836745e-02f, -2.651727601e-02f, -2.649614073e-02f, -2.647496164e-02f, -2.645373879e-02f, -2.643247220e-02f, -2.641116194e-02f, -2.638980803e-02f, -2.636841051e-02f,
+-2.634696943e-02f, -2.632548484e-02f, -2.630395676e-02f, -2.628238524e-02f, -2.626077032e-02f, -2.623911205e-02f, -2.621741046e-02f, -2.619566560e-02f, -2.617387751e-02f, -2.615204623e-02f,
+-2.613017179e-02f, -2.610825425e-02f, -2.608629365e-02f, -2.606429002e-02f, -2.604224341e-02f, -2.602015386e-02f, -2.599802141e-02f, -2.597584611e-02f, -2.595362800e-02f, -2.593136711e-02f,
+-2.590906350e-02f, -2.588671720e-02f, -2.586432825e-02f, -2.584189671e-02f, -2.581942261e-02f, -2.579690599e-02f, -2.577434690e-02f, -2.575174538e-02f, -2.572910148e-02f, -2.570641523e-02f,
+-2.568368668e-02f, -2.566091587e-02f, -2.563810285e-02f, -2.561524765e-02f, -2.559235033e-02f, -2.556941092e-02f, -2.554642948e-02f, -2.552340603e-02f, -2.550034064e-02f, -2.547723333e-02f,
+-2.545408416e-02f, -2.543089316e-02f, -2.540766038e-02f, -2.538438588e-02f, -2.536106968e-02f, -2.533771183e-02f, -2.531431238e-02f, -2.529087137e-02f, -2.526738885e-02f, -2.524386486e-02f,
+-2.522029945e-02f, -2.519669265e-02f, -2.517304452e-02f, -2.514935510e-02f, -2.512562443e-02f, -2.510185256e-02f, -2.507803953e-02f, -2.505418539e-02f, -2.503029018e-02f, -2.500635395e-02f,
+-2.498237674e-02f, -2.495835860e-02f, -2.493429958e-02f, -2.491019971e-02f, -2.488605905e-02f, -2.486187763e-02f, -2.483765551e-02f, -2.481339274e-02f, -2.478908934e-02f, -2.476474538e-02f,
+-2.474036090e-02f, -2.471593594e-02f, -2.469147055e-02f, -2.466696478e-02f, -2.464241866e-02f, -2.461783226e-02f, -2.459320560e-02f, -2.456853875e-02f, -2.454383174e-02f, -2.451908463e-02f,
+-2.449429745e-02f, -2.446947026e-02f, -2.444460310e-02f, -2.441969602e-02f, -2.439474906e-02f, -2.436976227e-02f, -2.434473571e-02f, -2.431966941e-02f, -2.429456342e-02f, -2.426941779e-02f,
+-2.424423256e-02f, -2.421900779e-02f, -2.419374352e-02f, -2.416843980e-02f, -2.414309667e-02f, -2.411771419e-02f, -2.409229240e-02f, -2.406683134e-02f, -2.404133107e-02f, -2.401579163e-02f,
+-2.399021307e-02f, -2.396459544e-02f, -2.393893878e-02f, -2.391324315e-02f, -2.388750859e-02f, -2.386173515e-02f, -2.383592288e-02f, -2.381007182e-02f, -2.378418202e-02f, -2.375825354e-02f,
+-2.373228642e-02f, -2.370628071e-02f, -2.368023646e-02f, -2.365415371e-02f, -2.362803251e-02f, -2.360187292e-02f, -2.357567498e-02f, -2.354943874e-02f, -2.352316425e-02f, -2.349685156e-02f,
+-2.347050072e-02f, -2.344411177e-02f, -2.341768476e-02f, -2.339121975e-02f, -2.336471679e-02f, -2.333817591e-02f, -2.331159718e-02f, -2.328498064e-02f, -2.325832634e-02f, -2.323163433e-02f,
+-2.320490466e-02f, -2.317813738e-02f, -2.315133253e-02f, -2.312449018e-02f, -2.309761036e-02f, -2.307069313e-02f, -2.304373854e-02f, -2.301674664e-02f, -2.298971748e-02f, -2.296265110e-02f,
+-2.293554756e-02f, -2.290840691e-02f, -2.288122920e-02f, -2.285401448e-02f, -2.282676280e-02f, -2.279947420e-02f, -2.277214875e-02f, -2.274478649e-02f, -2.271738747e-02f, -2.268995174e-02f,
+-2.266247935e-02f, -2.263497036e-02f, -2.260742481e-02f, -2.257984276e-02f, -2.255222425e-02f, -2.252456934e-02f, -2.249687808e-02f, -2.246915051e-02f, -2.244138670e-02f, -2.241358669e-02f,
+-2.238575053e-02f, -2.235787828e-02f, -2.232996998e-02f, -2.230202570e-02f, -2.227404546e-02f, -2.224602934e-02f, -2.221797739e-02f, -2.218988964e-02f, -2.216176616e-02f, -2.213360700e-02f,
+-2.210541221e-02f, -2.207718184e-02f, -2.204891594e-02f, -2.202061456e-02f, -2.199227777e-02f, -2.196390560e-02f, -2.193549812e-02f, -2.190705537e-02f, -2.187857740e-02f, -2.185006427e-02f,
+-2.182151604e-02f, -2.179293275e-02f, -2.176431445e-02f, -2.173566120e-02f, -2.170697306e-02f, -2.167825006e-02f, -2.164949228e-02f, -2.162069975e-02f, -2.159187254e-02f, -2.156301069e-02f,
+-2.153411426e-02f, -2.150518330e-02f, -2.147621787e-02f, -2.144721801e-02f, -2.141818378e-02f, -2.138911524e-02f, -2.136001243e-02f, -2.133087542e-02f, -2.130170425e-02f, -2.127249898e-02f,
+-2.124325966e-02f, -2.121398634e-02f, -2.118467908e-02f, -2.115533793e-02f, -2.112596295e-02f, -2.109655419e-02f, -2.106711170e-02f, -2.103763554e-02f, -2.100812576e-02f, -2.097858242e-02f,
+-2.094900556e-02f, -2.091939525e-02f, -2.088975154e-02f, -2.086007447e-02f, -2.083036412e-02f, -2.080062052e-02f, -2.077084374e-02f, -2.074103382e-02f, -2.071119083e-02f, -2.068131482e-02f,
+-2.065140584e-02f, -2.062146395e-02f, -2.059148920e-02f, -2.056148165e-02f, -2.053144135e-02f, -2.050136835e-02f, -2.047126272e-02f, -2.044112450e-02f, -2.041095376e-02f, -2.038075054e-02f,
+-2.035051490e-02f, -2.032024689e-02f, -2.028994658e-02f, -2.025961402e-02f, -2.022924926e-02f, -2.019885235e-02f, -2.016842336e-02f, -2.013796234e-02f, -2.010746934e-02f, -2.007694441e-02f,
+-2.004638763e-02f, -2.001579903e-02f, -1.998517868e-02f, -1.995452664e-02f, -1.992384295e-02f, -1.989312767e-02f, -1.986238087e-02f, -1.983160259e-02f, -1.980079289e-02f, -1.976995182e-02f,
+-1.973907946e-02f, -1.970817584e-02f, -1.967724102e-02f, -1.964627507e-02f, -1.961527804e-02f, -1.958424998e-02f, -1.955319096e-02f, -1.952210102e-02f, -1.949098022e-02f, -1.945982863e-02f,
+-1.942864629e-02f, -1.939743327e-02f, -1.936618961e-02f, -1.933491538e-02f, -1.930361064e-02f, -1.927227544e-02f, -1.924090983e-02f, -1.920951388e-02f, -1.917808764e-02f, -1.914663117e-02f,
+-1.911514453e-02f, -1.908362776e-02f, -1.905208094e-02f, -1.902050411e-02f, -1.898889734e-02f, -1.895726068e-02f, -1.892559418e-02f, -1.889389792e-02f, -1.886217193e-02f, -1.883041629e-02f,
+-1.879863104e-02f, -1.876681625e-02f, -1.873497198e-02f, -1.870309827e-02f, -1.867119519e-02f, -1.863926280e-02f, -1.860730116e-02f, -1.857531031e-02f, -1.854329033e-02f, -1.851124126e-02f,
+-1.847916317e-02f, -1.844705612e-02f, -1.841492015e-02f, -1.838275534e-02f, -1.835056173e-02f, -1.831833939e-02f, -1.828608837e-02f, -1.825380874e-02f, -1.822150054e-02f, -1.818916385e-02f,
+-1.815679871e-02f, -1.812440519e-02f, -1.809198335e-02f, -1.805953324e-02f, -1.802705492e-02f, -1.799454845e-02f, -1.796201389e-02f, -1.792945129e-02f, -1.789686073e-02f, -1.786424224e-02f,
+-1.783159591e-02f, -1.779892177e-02f, -1.776621990e-02f, -1.773349035e-02f, -1.770073318e-02f, -1.766794844e-02f, -1.763513621e-02f, -1.760229653e-02f, -1.756942946e-02f, -1.753653508e-02f,
+-1.750361342e-02f, -1.747066457e-02f, -1.743768856e-02f, -1.740468547e-02f, -1.737165535e-02f, -1.733859826e-02f, -1.730551426e-02f, -1.727240341e-02f, -1.723926577e-02f, -1.720610140e-02f,
+-1.717291037e-02f, -1.713969272e-02f, -1.710644851e-02f, -1.707317782e-02f, -1.703988070e-02f, -1.700655720e-02f, -1.697320739e-02f, -1.693983133e-02f, -1.690642908e-02f, -1.687300070e-02f,
+-1.683954624e-02f, -1.680606577e-02f, -1.677255936e-02f, -1.673902704e-02f, -1.670546890e-02f, -1.667188499e-02f, -1.663827537e-02f, -1.660464009e-02f, -1.657097923e-02f, -1.653729283e-02f,
+-1.650358097e-02f, -1.646984370e-02f, -1.643608108e-02f, -1.640229317e-02f, -1.636848003e-02f, -1.633464173e-02f, -1.630077833e-02f, -1.626688987e-02f, -1.623297644e-02f, -1.619903808e-02f,
+-1.616507485e-02f, -1.613108683e-02f, -1.609707406e-02f, -1.606303662e-02f, -1.602897455e-02f, -1.599488793e-02f, -1.596077681e-02f, -1.592664126e-02f, -1.589248133e-02f, -1.585829708e-02f,
+-1.582408859e-02f, -1.578985590e-02f, -1.575559908e-02f, -1.572131819e-02f, -1.568701330e-02f, -1.565268446e-02f, -1.561833174e-02f, -1.558395519e-02f, -1.554955488e-02f, -1.551513087e-02f,
+-1.548068323e-02f, -1.544621200e-02f, -1.541171726e-02f, -1.537719907e-02f, -1.534265748e-02f, -1.530809257e-02f, -1.527350438e-02f, -1.523889299e-02f, -1.520425845e-02f, -1.516960083e-02f,
+-1.513492019e-02f, -1.510021659e-02f, -1.506549010e-02f, -1.503074076e-02f, -1.499596866e-02f, -1.496117384e-02f, -1.492635637e-02f, -1.489151632e-02f, -1.485665374e-02f, -1.482176870e-02f,
+-1.478686126e-02f, -1.475193148e-02f, -1.471697942e-02f, -1.468200515e-02f, -1.464700873e-02f, -1.461199022e-02f, -1.457694969e-02f, -1.454188719e-02f, -1.450680278e-02f, -1.447169654e-02f,
+-1.443656853e-02f, -1.440141880e-02f, -1.436624741e-02f, -1.433105444e-02f, -1.429583995e-02f, -1.426060399e-02f, -1.422534663e-02f, -1.419006793e-02f, -1.415476796e-02f, -1.411944677e-02f,
+-1.408410444e-02f, -1.404874102e-02f, -1.401335657e-02f, -1.397795117e-02f, -1.394252487e-02f, -1.390707773e-02f, -1.387160982e-02f, -1.383612120e-02f, -1.380061194e-02f, -1.376508210e-02f,
+-1.372953174e-02f, -1.369396092e-02f, -1.365836971e-02f, -1.362275817e-02f, -1.358712636e-02f, -1.355147435e-02f, -1.351580220e-02f, -1.348010998e-02f, -1.344439774e-02f, -1.340866556e-02f,
+-1.337291349e-02f, -1.333714159e-02f, -1.330134994e-02f, -1.326553859e-02f, -1.322970761e-02f, -1.319385706e-02f, -1.315798701e-02f, -1.312209752e-02f, -1.308618865e-02f, -1.305026047e-02f,
+-1.301431303e-02f, -1.297834641e-02f, -1.294236067e-02f, -1.290635587e-02f, -1.287033208e-02f, -1.283428936e-02f, -1.279822776e-02f, -1.276214737e-02f, -1.272604824e-02f, -1.268993043e-02f,
+-1.265379401e-02f, -1.261763905e-02f, -1.258146560e-02f, -1.254527373e-02f, -1.250906351e-02f, -1.247283500e-02f, -1.243658826e-02f, -1.240032336e-02f, -1.236404036e-02f, -1.232773933e-02f,
+-1.229142033e-02f, -1.225508342e-02f, -1.221872868e-02f, -1.218235615e-02f, -1.214596592e-02f, -1.210955803e-02f, -1.207313256e-02f, -1.203668958e-02f, -1.200022914e-02f, -1.196375131e-02f,
+-1.192725615e-02f, -1.189074373e-02f, -1.185421412e-02f, -1.181766737e-02f, -1.178110356e-02f, -1.174452275e-02f, -1.170792499e-02f, -1.167131036e-02f, -1.163467893e-02f, -1.159803075e-02f,
+-1.156136589e-02f, -1.152468442e-02f, -1.148798639e-02f, -1.145127189e-02f, -1.141454096e-02f, -1.137779368e-02f, -1.134103010e-02f, -1.130425030e-02f, -1.126745434e-02f, -1.123064229e-02f,
+-1.119381420e-02f, -1.115697015e-02f, -1.112011020e-02f, -1.108323441e-02f, -1.104634285e-02f, -1.100943559e-02f, -1.097251269e-02f, -1.093557421e-02f, -1.089862022e-02f, -1.086165078e-02f,
+-1.082466597e-02f, -1.078766584e-02f, -1.075065046e-02f, -1.071361990e-02f, -1.067657422e-02f, -1.063951348e-02f, -1.060243776e-02f, -1.056534711e-02f, -1.052824160e-02f, -1.049112131e-02f,
+-1.045398628e-02f, -1.041683660e-02f, -1.037967231e-02f, -1.034249350e-02f, -1.030530022e-02f, -1.026809254e-02f, -1.023087053e-02f, -1.019363425e-02f, -1.015638376e-02f, -1.011911914e-02f,
+-1.008184044e-02f, -1.004454774e-02f, -1.000724110e-02f, -9.969920579e-03f, -9.932586250e-03f, -9.895238177e-03f, -9.857876425e-03f, -9.820501060e-03f, -9.783112148e-03f, -9.745709755e-03f,
+-9.708293946e-03f, -9.670864786e-03f, -9.633422343e-03f, -9.595966681e-03f, -9.558497866e-03f, -9.521015965e-03f, -9.483521042e-03f, -9.446013165e-03f, -9.408492398e-03f, -9.370958807e-03f,
+-9.333412460e-03f, -9.295853420e-03f, -9.258281755e-03f, -9.220697531e-03f, -9.183100812e-03f, -9.145491666e-03f, -9.107870158e-03f, -9.070236355e-03f, -9.032590321e-03f, -8.994932124e-03f,
+-8.957261830e-03f, -8.919579504e-03f, -8.881885212e-03f, -8.844179021e-03f, -8.806460997e-03f, -8.768731205e-03f, -8.730989713e-03f, -8.693236586e-03f, -8.655471890e-03f, -8.617695691e-03f,
+-8.579908057e-03f, -8.542109052e-03f, -8.504298744e-03f, -8.466477198e-03f, -8.428644480e-03f, -8.390800658e-03f, -8.352945796e-03f, -8.315079962e-03f, -8.277203222e-03f, -8.239315642e-03f,
+-8.201417289e-03f, -8.163508228e-03f, -8.125588527e-03f, -8.087658251e-03f, -8.049717466e-03f, -8.011766241e-03f, -7.973804639e-03f, -7.935832729e-03f, -7.897850577e-03f, -7.859858248e-03f,
+-7.821855810e-03f, -7.783843328e-03f, -7.745820870e-03f, -7.707788502e-03f, -7.669746290e-03f, -7.631694301e-03f, -7.593632601e-03f, -7.555561257e-03f, -7.517480335e-03f, -7.479389903e-03f,
+-7.441290026e-03f, -7.403180770e-03f, -7.365062204e-03f, -7.326934393e-03f, -7.288797404e-03f, -7.250651303e-03f, -7.212496157e-03f, -7.174332032e-03f, -7.136158997e-03f, -7.097977116e-03f,
+-7.059786456e-03f, -7.021587085e-03f, -6.983379069e-03f, -6.945162475e-03f, -6.906937369e-03f, -6.868703817e-03f, -6.830461888e-03f, -6.792211647e-03f, -6.753953161e-03f, -6.715686497e-03f,
+-6.677411722e-03f, -6.639128902e-03f, -6.600838104e-03f, -6.562539396e-03f, -6.524232842e-03f, -6.485918512e-03f, -6.447596470e-03f, -6.409266784e-03f, -6.370929522e-03f, -6.332584749e-03f,
+-6.294232532e-03f, -6.255872939e-03f, -6.217506035e-03f, -6.179131889e-03f, -6.140750566e-03f, -6.102362134e-03f, -6.063966660e-03f, -6.025564209e-03f, -5.987154850e-03f, -5.948738649e-03f,
+-5.910315673e-03f, -5.871885989e-03f, -5.833449663e-03f, -5.795006763e-03f, -5.756557355e-03f, -5.718101507e-03f, -5.679639285e-03f, -5.641170757e-03f, -5.602695988e-03f, -5.564215046e-03f,
+-5.525727999e-03f, -5.487234912e-03f, -5.448735853e-03f, -5.410230889e-03f, -5.371720086e-03f, -5.333203512e-03f, -5.294681234e-03f, -5.256153318e-03f, -5.217619832e-03f, -5.179080842e-03f,
+-5.140536416e-03f, -5.101986620e-03f, -5.063431522e-03f, -5.024871188e-03f, -4.986305685e-03f, -4.947735080e-03f, -4.909159441e-03f, -4.870578834e-03f, -4.831993326e-03f, -4.793402985e-03f,
+-4.754807877e-03f, -4.716208069e-03f, -4.677603628e-03f, -4.638994621e-03f, -4.600381116e-03f, -4.561763179e-03f, -4.523140877e-03f, -4.484514277e-03f, -4.445883447e-03f, -4.407248453e-03f,
+-4.368609362e-03f, -4.329966242e-03f, -4.291319158e-03f, -4.252668179e-03f, -4.214013371e-03f, -4.175354802e-03f, -4.136692538e-03f, -4.098026646e-03f, -4.059357194e-03f, -4.020684248e-03f,
+-3.982007875e-03f, -3.943328143e-03f, -3.904645118e-03f, -3.865958867e-03f, -3.827269458e-03f, -3.788576958e-03f, -3.749881433e-03f, -3.711182950e-03f, -3.672481577e-03f, -3.633777380e-03f,
+-3.595070426e-03f, -3.556360783e-03f, -3.517648518e-03f, -3.478933697e-03f, -3.440216388e-03f, -3.401496657e-03f, -3.362774571e-03f, -3.324050198e-03f, -3.285323604e-03f, -3.246594857e-03f,
+-3.207864023e-03f, -3.169131170e-03f, -3.130396364e-03f, -3.091659673e-03f, -3.052921162e-03f, -3.014180900e-03f, -2.975438954e-03f, -2.936695390e-03f, -2.897950274e-03f, -2.859203675e-03f,
+-2.820455660e-03f, -2.781706294e-03f, -2.742955645e-03f, -2.704203781e-03f, -2.665450767e-03f, -2.626696671e-03f, -2.587941560e-03f, -2.549185501e-03f, -2.510428560e-03f, -2.471670805e-03f,
+-2.432912302e-03f, -2.394153119e-03f, -2.355393322e-03f, -2.316632978e-03f, -2.277872155e-03f, -2.239110918e-03f, -2.200349335e-03f, -2.161587473e-03f, -2.122825399e-03f, -2.084063179e-03f,
+-2.045300880e-03f, -2.006538570e-03f, -1.967776315e-03f, -1.929014181e-03f, -1.890252237e-03f, -1.851490548e-03f, -1.812729181e-03f, -1.773968204e-03f, -1.735207682e-03f, -1.696447684e-03f,
+-1.657688275e-03f, -1.618929522e-03f, -1.580171493e-03f, -1.541414254e-03f, -1.502657871e-03f, -1.463902412e-03f, -1.425147944e-03f, -1.386394532e-03f, -1.347642244e-03f, -1.308891146e-03f,
+-1.270141306e-03f, -1.231392790e-03f, -1.192645664e-03f, -1.153899996e-03f, -1.115155851e-03f, -1.076413297e-03f, -1.037672401e-03f, -9.989332286e-04f, -9.601958469e-04f, -9.214603226e-04f,
+-8.827267222e-04f, -8.439951123e-04f, -8.052655597e-04f, -7.665381308e-04f, -7.278128924e-04f, -6.890899109e-04f, -6.503692530e-04f, -6.116509852e-04f, -5.729351741e-04f, -5.342218863e-04f,
+-4.955111882e-04f, -4.568031464e-04f, -4.180978274e-04f, -3.793952977e-04f, -3.406956238e-04f, -3.019988722e-04f, -2.633051094e-04f, -2.246144017e-04f, -1.859268158e-04f, -1.472424179e-04f,
+-1.085612746e-04f, -6.988345225e-05f, -3.120901722e-05f, 7.461964059e-06f, 4.612942522e-05f, 8.479329990e-05f, 1.234535217e-04f, 1.621100244e-04f, 2.007627415e-04f, 2.394116069e-04f,
+2.780565540e-04f, 3.166975168e-04f, 3.553344288e-04f, 3.939672239e-04f, 4.325958357e-04f, 4.712201981e-04f, 5.098402448e-04f, 5.484559096e-04f, 5.870671263e-04f, 6.256738286e-04f,
+6.642759506e-04f, 7.028734259e-04f, 7.414661884e-04f, 7.800541720e-04f, 8.186373106e-04f, 8.572155381e-04f, 8.957887884e-04f, 9.343569954e-04f, 9.729200931e-04f, 1.011478015e-03f,
+1.050030696e-03f, 1.088578070e-03f, 1.127120070e-03f, 1.165656631e-03f, 1.204187686e-03f, 1.242713170e-03f, 1.281233017e-03f, 1.319747160e-03f, 1.358255535e-03f, 1.396758074e-03f,
+1.435254713e-03f, 1.473745385e-03f, 1.512230024e-03f, 1.550708565e-03f, 1.589180942e-03f, 1.627647089e-03f, 1.666106940e-03f, 1.704560429e-03f, 1.743007492e-03f, 1.781448061e-03f,
+1.819882072e-03f, 1.858309458e-03f, 1.896730154e-03f, 1.935144095e-03f, 1.973551214e-03f, 2.011951446e-03f, 2.050344726e-03f, 2.088730988e-03f, 2.127110165e-03f, 2.165482194e-03f,
+2.203847008e-03f, 2.242204541e-03f, 2.280554729e-03f, 2.318897505e-03f, 2.357232805e-03f, 2.395560563e-03f, 2.433880713e-03f, 2.472193190e-03f, 2.510497928e-03f, 2.548794863e-03f,
+2.587083929e-03f, 2.625365061e-03f, 2.663638192e-03f, 2.701903259e-03f, 2.740160196e-03f, 2.778408937e-03f, 2.816649417e-03f, 2.854881572e-03f, 2.893105335e-03f, 2.931320642e-03f,
+2.969527428e-03f, 3.007725627e-03f, 3.045915175e-03f, 3.084096006e-03f, 3.122268055e-03f, 3.160431257e-03f, 3.198585548e-03f, 3.236730862e-03f, 3.274867134e-03f, 3.312994299e-03f,
+3.351112293e-03f, 3.389221050e-03f, 3.427320505e-03f, 3.465410594e-03f, 3.503491252e-03f, 3.541562414e-03f, 3.579624015e-03f, 3.617675991e-03f, 3.655718276e-03f, 3.693750807e-03f,
+3.731773517e-03f, 3.769786343e-03f, 3.807789220e-03f, 3.845782083e-03f, 3.883764868e-03f, 3.921737509e-03f, 3.959699943e-03f, 3.997652106e-03f, 4.035593931e-03f, 4.073525355e-03f,
+4.111446314e-03f, 4.149356742e-03f, 4.187256576e-03f, 4.225145752e-03f, 4.263024204e-03f, 4.300891868e-03f, 4.338748680e-03f, 4.376594576e-03f, 4.414429491e-03f, 4.452253362e-03f,
+4.490066123e-03f, 4.527867712e-03f, 4.565658062e-03f, 4.603437112e-03f, 4.641204795e-03f, 4.678961048e-03f, 4.716705808e-03f, 4.754439010e-03f, 4.792160589e-03f, 4.829870483e-03f,
+4.867568626e-03f, 4.905254955e-03f, 4.942929407e-03f, 4.980591917e-03f, 5.018242421e-03f, 5.055880855e-03f, 5.093507156e-03f, 5.131121260e-03f, 5.168723103e-03f, 5.206312622e-03f,
+5.243889752e-03f, 5.281454430e-03f, 5.319006592e-03f, 5.356546174e-03f, 5.394073114e-03f, 5.431587347e-03f, 5.469088811e-03f, 5.506577440e-03f, 5.544053172e-03f, 5.581515944e-03f,
+5.618965692e-03f, 5.656402352e-03f, 5.693825861e-03f, 5.731236157e-03f, 5.768633174e-03f, 5.806016851e-03f, 5.843387124e-03f, 5.880743929e-03f, 5.918087204e-03f, 5.955416885e-03f,
+5.992732909e-03f, 6.030035214e-03f, 6.067323735e-03f, 6.104598410e-03f, 6.141859175e-03f, 6.179105969e-03f, 6.216338727e-03f, 6.253557387e-03f, 6.290761886e-03f, 6.327952161e-03f,
+6.365128150e-03f, 6.402289788e-03f, 6.439437015e-03f, 6.476569766e-03f, 6.513687979e-03f, 6.550791591e-03f, 6.587880540e-03f, 6.624954763e-03f, 6.662014198e-03f, 6.699058781e-03f,
+6.736088451e-03f, 6.773103145e-03f, 6.810102799e-03f, 6.847087353e-03f, 6.884056743e-03f, 6.921010907e-03f, 6.957949783e-03f, 6.994873308e-03f, 7.031781420e-03f, 7.068674057e-03f,
+7.105551156e-03f, 7.142412655e-03f, 7.179258493e-03f, 7.216088607e-03f, 7.252902935e-03f, 7.289701414e-03f, 7.326483984e-03f, 7.363250581e-03f, 7.400001144e-03f, 7.436735611e-03f,
+7.473453920e-03f, 7.510156009e-03f, 7.546841816e-03f, 7.583511280e-03f, 7.620164338e-03f, 7.656800930e-03f, 7.693420992e-03f, 7.730024465e-03f, 7.766611285e-03f, 7.803181392e-03f,
+7.839734723e-03f, 7.876271218e-03f, 7.912790814e-03f, 7.949293451e-03f, 7.985779067e-03f, 8.022247600e-03f, 8.058698989e-03f, 8.095133173e-03f, 8.131550090e-03f, 8.167949680e-03f,
+8.204331881e-03f, 8.240696632e-03f, 8.277043871e-03f, 8.313373538e-03f, 8.349685572e-03f, 8.385979911e-03f, 8.422256495e-03f, 8.458515262e-03f, 8.494756151e-03f, 8.530979103e-03f,
+8.567184055e-03f, 8.603370947e-03f, 8.639539718e-03f, 8.675690308e-03f, 8.711822656e-03f, 8.747936701e-03f, 8.784032382e-03f, 8.820109639e-03f, 8.856168411e-03f, 8.892208638e-03f,
+8.928230259e-03f, 8.964233215e-03f, 9.000217443e-03f, 9.036182885e-03f, 9.072129479e-03f, 9.108057166e-03f, 9.143965884e-03f, 9.179855575e-03f, 9.215726177e-03f, 9.251577631e-03f,
+9.287409877e-03f, 9.323222853e-03f, 9.359016501e-03f, 9.394790761e-03f, 9.430545572e-03f, 9.466280874e-03f, 9.501996608e-03f, 9.537692713e-03f, 9.573369131e-03f, 9.609025801e-03f,
+9.644662663e-03f, 9.680279658e-03f, 9.715876726e-03f, 9.751453808e-03f, 9.787010844e-03f, 9.822547774e-03f, 9.858064539e-03f, 9.893561080e-03f, 9.929037337e-03f, 9.964493250e-03f,
+9.999928761e-03f, 1.003534381e-02f, 1.007073834e-02f, 1.010611229e-02f, 1.014146560e-02f, 1.017679821e-02f, 1.021211006e-02f, 1.024740109e-02f, 1.028267125e-02f, 1.031792048e-02f,
+1.035314871e-02f, 1.038835589e-02f, 1.042354196e-02f, 1.045870686e-02f, 1.049385052e-02f, 1.052897291e-02f, 1.056407394e-02f, 1.059915357e-02f, 1.063421174e-02f, 1.066924839e-02f,
+1.070426345e-02f, 1.073925688e-02f, 1.077422861e-02f, 1.080917858e-02f, 1.084410674e-02f, 1.087901303e-02f, 1.091389739e-02f, 1.094875975e-02f, 1.098360008e-02f, 1.101841829e-02f,
+1.105321435e-02f, 1.108798818e-02f, 1.112273973e-02f, 1.115746895e-02f, 1.119217577e-02f, 1.122686014e-02f, 1.126152200e-02f, 1.129616129e-02f, 1.133077795e-02f, 1.136537194e-02f,
+1.139994318e-02f, 1.143449162e-02f, 1.146901720e-02f, 1.150351987e-02f, 1.153799957e-02f, 1.157245624e-02f, 1.160688983e-02f, 1.164130027e-02f, 1.167568751e-02f, 1.171005149e-02f,
+1.174439216e-02f, 1.177870945e-02f, 1.181300332e-02f, 1.184727370e-02f, 1.188152054e-02f, 1.191574377e-02f, 1.194994335e-02f, 1.198411922e-02f, 1.201827131e-02f, 1.205239958e-02f,
+1.208650396e-02f, 1.212058440e-02f, 1.215464084e-02f, 1.218867323e-02f, 1.222268151e-02f, 1.225666562e-02f, 1.229062551e-02f, 1.232456111e-02f, 1.235847238e-02f, 1.239235926e-02f,
+1.242622169e-02f, 1.246005961e-02f, 1.249387298e-02f, 1.252766172e-02f, 1.256142579e-02f, 1.259516513e-02f, 1.262887969e-02f, 1.266256940e-02f, 1.269623422e-02f, 1.272987408e-02f,
+1.276348893e-02f, 1.279707872e-02f, 1.283064339e-02f, 1.286418288e-02f, 1.289769714e-02f, 1.293118612e-02f, 1.296464975e-02f, 1.299808798e-02f, 1.303150076e-02f, 1.306488803e-02f,
+1.309824973e-02f, 1.313158582e-02f, 1.316489623e-02f, 1.319818091e-02f, 1.323143981e-02f, 1.326467287e-02f, 1.329788003e-02f, 1.333106124e-02f, 1.336421645e-02f, 1.339734560e-02f,
+1.343044863e-02f, 1.346352549e-02f, 1.349657613e-02f, 1.352960049e-02f, 1.356259852e-02f, 1.359557016e-02f, 1.362851536e-02f, 1.366143406e-02f, 1.369432621e-02f, 1.372719176e-02f,
+1.376003064e-02f, 1.379284281e-02f, 1.382562821e-02f, 1.385838679e-02f, 1.389111850e-02f, 1.392382327e-02f, 1.395650106e-02f, 1.398915181e-02f, 1.402177547e-02f, 1.405437198e-02f,
+1.408694129e-02f, 1.411948335e-02f, 1.415199810e-02f, 1.418448549e-02f, 1.421694546e-02f, 1.424937797e-02f, 1.428178295e-02f, 1.431416036e-02f, 1.434651014e-02f, 1.437883224e-02f,
+1.441112661e-02f, 1.444339318e-02f, 1.447563192e-02f, 1.450784276e-02f, 1.454002565e-02f, 1.457218054e-02f, 1.460430738e-02f, 1.463640611e-02f, 1.466847668e-02f, 1.470051904e-02f,
+1.473253314e-02f, 1.476451891e-02f, 1.479647632e-02f, 1.482840531e-02f, 1.486030582e-02f, 1.489217780e-02f, 1.492402120e-02f, 1.495583597e-02f, 1.498762205e-02f, 1.501937940e-02f,
+1.505110796e-02f, 1.508280767e-02f, 1.511447849e-02f, 1.514612037e-02f, 1.517773325e-02f, 1.520931708e-02f, 1.524087181e-02f, 1.527239738e-02f, 1.530389375e-02f, 1.533536087e-02f,
+1.536679867e-02f, 1.539820712e-02f, 1.542958615e-02f, 1.546093572e-02f, 1.549225578e-02f, 1.552354627e-02f, 1.555480714e-02f, 1.558603835e-02f, 1.561723983e-02f, 1.564841154e-02f,
+1.567955344e-02f, 1.571066546e-02f, 1.574174755e-02f, 1.577279967e-02f, 1.580382177e-02f, 1.583481378e-02f, 1.586577567e-02f, 1.589670739e-02f, 1.592760887e-02f, 1.595848008e-02f,
+1.598932095e-02f, 1.602013144e-02f, 1.605091151e-02f, 1.608166109e-02f, 1.611238014e-02f, 1.614306861e-02f, 1.617372645e-02f, 1.620435360e-02f, 1.623495003e-02f, 1.626551567e-02f,
+1.629605048e-02f, 1.632655440e-02f, 1.635702740e-02f, 1.638746941e-02f, 1.641788039e-02f, 1.644826029e-02f, 1.647860906e-02f, 1.650892665e-02f, 1.653921301e-02f, 1.656946809e-02f,
+1.659969184e-02f, 1.662988422e-02f, 1.666004516e-02f, 1.669017463e-02f, 1.672027258e-02f, 1.675033895e-02f, 1.678037369e-02f, 1.681037677e-02f, 1.684034812e-02f, 1.687028770e-02f,
+1.690019546e-02f, 1.693007135e-02f, 1.695991533e-02f, 1.698972734e-02f, 1.701950734e-02f, 1.704925527e-02f, 1.707897110e-02f, 1.710865476e-02f, 1.713830622e-02f, 1.716792542e-02f,
+1.719751232e-02f, 1.722706686e-02f, 1.725658901e-02f, 1.728607870e-02f, 1.731553590e-02f, 1.734496056e-02f, 1.737435262e-02f, 1.740371204e-02f, 1.743303878e-02f, 1.746233278e-02f,
+1.749159399e-02f, 1.752082238e-02f, 1.755001789e-02f, 1.757918047e-02f, 1.760831008e-02f, 1.763740668e-02f, 1.766647020e-02f, 1.769550061e-02f, 1.772449786e-02f, 1.775346189e-02f,
+1.778239268e-02f, 1.781129016e-02f, 1.784015429e-02f, 1.786898502e-02f, 1.789778232e-02f, 1.792654612e-02f, 1.795527638e-02f, 1.798397307e-02f, 1.801263612e-02f, 1.804126550e-02f,
+1.806986115e-02f, 1.809842304e-02f, 1.812695111e-02f, 1.815544532e-02f, 1.818390563e-02f, 1.821233198e-02f, 1.824072433e-02f, 1.826908264e-02f, 1.829740685e-02f, 1.832569693e-02f,
+1.835395283e-02f, 1.838217450e-02f, 1.841036189e-02f, 1.843851497e-02f, 1.846663368e-02f, 1.849471798e-02f, 1.852276782e-02f, 1.855078316e-02f, 1.857876396e-02f, 1.860671016e-02f,
+1.863462173e-02f, 1.866249862e-02f, 1.869034078e-02f, 1.871814817e-02f, 1.874592074e-02f, 1.877365845e-02f, 1.880136125e-02f, 1.882902911e-02f, 1.885666197e-02f, 1.888425979e-02f,
+1.891182252e-02f, 1.893935013e-02f, 1.896684256e-02f, 1.899429977e-02f, 1.902172173e-02f, 1.904910838e-02f, 1.907645967e-02f, 1.910377558e-02f, 1.913105604e-02f, 1.915830103e-02f,
+1.918551049e-02f, 1.921268438e-02f, 1.923982265e-02f, 1.926692527e-02f, 1.929399219e-02f, 1.932102337e-02f, 1.934801876e-02f, 1.937497831e-02f, 1.940190200e-02f, 1.942878976e-02f,
+1.945564157e-02f, 1.948245737e-02f, 1.950923713e-02f, 1.953598080e-02f, 1.956268833e-02f, 1.958935969e-02f, 1.961599483e-02f, 1.964259371e-02f, 1.966915629e-02f, 1.969568252e-02f,
+1.972217236e-02f, 1.974862577e-02f, 1.977504271e-02f, 1.980142314e-02f, 1.982776700e-02f, 1.985407426e-02f, 1.988034489e-02f, 1.990657882e-02f, 1.993277604e-02f, 1.995893648e-02f,
+1.998506011e-02f, 2.001114689e-02f, 2.003719678e-02f, 2.006320973e-02f, 2.008918571e-02f, 2.011512467e-02f, 2.014102656e-02f, 2.016689136e-02f, 2.019271901e-02f, 2.021850948e-02f,
+2.024426273e-02f, 2.026997871e-02f, 2.029565738e-02f, 2.032129870e-02f, 2.034690264e-02f, 2.037246915e-02f, 2.039799818e-02f, 2.042348970e-02f, 2.044894368e-02f, 2.047436005e-02f,
+2.049973880e-02f, 2.052507987e-02f, 2.055038323e-02f, 2.057564884e-02f, 2.060087665e-02f, 2.062606662e-02f, 2.065121873e-02f, 2.067633291e-02f, 2.070140915e-02f, 2.072644738e-02f,
+2.075144759e-02f, 2.077640972e-02f, 2.080133374e-02f, 2.082621960e-02f, 2.085106727e-02f, 2.087587671e-02f, 2.090064788e-02f, 2.092538073e-02f, 2.095007524e-02f, 2.097473135e-02f,
+2.099934904e-02f, 2.102392826e-02f, 2.104846898e-02f, 2.107297114e-02f, 2.109743473e-02f, 2.112185969e-02f, 2.114624599e-02f, 2.117059359e-02f, 2.119490245e-02f, 2.121917253e-02f,
+2.124340379e-02f, 2.126759621e-02f, 2.129174973e-02f, 2.131586432e-02f, 2.133993994e-02f, 2.136397655e-02f, 2.138797412e-02f, 2.141193260e-02f, 2.143585197e-02f, 2.145973218e-02f,
+2.148357319e-02f, 2.150737496e-02f, 2.153113747e-02f, 2.155486066e-02f, 2.157854451e-02f, 2.160218898e-02f, 2.162579402e-02f, 2.164935961e-02f, 2.167288570e-02f, 2.169637226e-02f,
+2.171981925e-02f, 2.174322663e-02f, 2.176659437e-02f, 2.178992243e-02f, 2.181321078e-02f, 2.183645937e-02f, 2.185966816e-02f, 2.188283714e-02f, 2.190596625e-02f, 2.192905546e-02f,
+2.195210473e-02f, 2.197511404e-02f, 2.199808333e-02f, 2.202101259e-02f, 2.204390176e-02f, 2.206675081e-02f, 2.208955972e-02f, 2.211232843e-02f, 2.213505693e-02f, 2.215774516e-02f,
+2.218039310e-02f, 2.220300071e-02f, 2.222556796e-02f, 2.224809480e-02f, 2.227058121e-02f, 2.229302714e-02f, 2.231543257e-02f, 2.233779746e-02f, 2.236012178e-02f, 2.238240548e-02f,
+2.240464853e-02f, 2.242685091e-02f, 2.244901256e-02f, 2.247113347e-02f, 2.249321360e-02f, 2.251525290e-02f, 2.253725135e-02f, 2.255920891e-02f, 2.258112555e-02f, 2.260300124e-02f,
+2.262483593e-02f, 2.264662960e-02f, 2.266838221e-02f, 2.269009373e-02f, 2.271176412e-02f, 2.273339335e-02f, 2.275498139e-02f, 2.277652820e-02f, 2.279803375e-02f, 2.281949801e-02f,
+2.284092094e-02f, 2.286230251e-02f, 2.288364268e-02f, 2.290494143e-02f, 2.292619872e-02f, 2.294741451e-02f, 2.296858878e-02f, 2.298972149e-02f, 2.301081260e-02f, 2.303186210e-02f,
+2.305286993e-02f, 2.307383608e-02f, 2.309476050e-02f, 2.311564317e-02f, 2.313648405e-02f, 2.315728311e-02f, 2.317804033e-02f, 2.319875566e-02f, 2.321942907e-02f, 2.324006053e-02f,
+2.326065002e-02f, 2.328119750e-02f, 2.330170293e-02f, 2.332216629e-02f, 2.334258754e-02f, 2.336296666e-02f, 2.338330360e-02f, 2.340359835e-02f, 2.342385086e-02f, 2.344406111e-02f,
+2.346422907e-02f, 2.348435471e-02f, 2.350443798e-02f, 2.352447887e-02f, 2.354447735e-02f, 2.356443337e-02f, 2.358434692e-02f, 2.360421795e-02f, 2.362404645e-02f, 2.364383238e-02f,
+2.366357570e-02f, 2.368327639e-02f, 2.370293443e-02f, 2.372254977e-02f, 2.374212239e-02f, 2.376165225e-02f, 2.378113934e-02f, 2.380058362e-02f, 2.381998505e-02f, 2.383934361e-02f,
+2.385865928e-02f, 2.387793201e-02f, 2.389716178e-02f, 2.391634857e-02f, 2.393549233e-02f, 2.395459305e-02f, 2.397365070e-02f, 2.399266523e-02f, 2.401163664e-02f, 2.403056488e-02f,
+2.404944993e-02f, 2.406829175e-02f, 2.408709033e-02f, 2.410584563e-02f, 2.412455762e-02f, 2.414322628e-02f, 2.416185158e-02f, 2.418043348e-02f, 2.419897196e-02f, 2.421746699e-02f,
+2.423591855e-02f, 2.425432660e-02f, 2.427269113e-02f, 2.429101209e-02f, 2.430928946e-02f, 2.432752322e-02f, 2.434571333e-02f, 2.436385978e-02f, 2.438196252e-02f, 2.440002155e-02f,
+2.441803681e-02f, 2.443600830e-02f, 2.445393598e-02f, 2.447181983e-02f, 2.448965982e-02f, 2.450745592e-02f, 2.452520810e-02f, 2.454291634e-02f, 2.456058062e-02f, 2.457820090e-02f,
+2.459577716e-02f, 2.461330937e-02f, 2.463079750e-02f, 2.464824154e-02f, 2.466564145e-02f, 2.468299721e-02f, 2.470030878e-02f, 2.471757616e-02f, 2.473479930e-02f, 2.475197819e-02f,
+2.476911279e-02f, 2.478620309e-02f, 2.480324905e-02f, 2.482025066e-02f, 2.483720788e-02f, 2.485412069e-02f, 2.487098907e-02f, 2.488781298e-02f, 2.490459242e-02f, 2.492132734e-02f,
+2.493801772e-02f, 2.495466355e-02f, 2.497126479e-02f, 2.498782143e-02f, 2.500433342e-02f, 2.502080076e-02f, 2.503722342e-02f, 2.505360137e-02f, 2.506993459e-02f, 2.508622305e-02f,
+2.510246673e-02f, 2.511866561e-02f, 2.513481966e-02f, 2.515092886e-02f, 2.516699318e-02f, 2.518301260e-02f, 2.519898710e-02f, 2.521491666e-02f, 2.523080124e-02f, 2.524664082e-02f,
+2.526243540e-02f, 2.527818493e-02f, 2.529388939e-02f, 2.530954877e-02f, 2.532516304e-02f, 2.534073218e-02f, 2.535625616e-02f, 2.537173496e-02f, 2.538716857e-02f, 2.540255694e-02f,
+2.541790008e-02f, 2.543319794e-02f, 2.544845051e-02f, 2.546365777e-02f, 2.547881969e-02f, 2.549393625e-02f, 2.550900744e-02f, 2.552403322e-02f, 2.553901358e-02f, 2.555394849e-02f,
+2.556883793e-02f, 2.558368189e-02f, 2.559848033e-02f, 2.561323325e-02f, 2.562794061e-02f, 2.564260239e-02f, 2.565721858e-02f, 2.567178914e-02f, 2.568631407e-02f, 2.570079335e-02f,
+2.571522694e-02f, 2.572961482e-02f, 2.574395699e-02f, 2.575825341e-02f, 2.577250407e-02f, 2.578670895e-02f, 2.580086802e-02f, 2.581498126e-02f, 2.582904866e-02f, 2.584307019e-02f,
+2.585704584e-02f, 2.587097558e-02f, 2.588485940e-02f, 2.589869727e-02f, 2.591248917e-02f, 2.592623509e-02f, 2.593993500e-02f, 2.595358889e-02f, 2.596719674e-02f, 2.598075852e-02f,
+2.599427422e-02f, 2.600774381e-02f, 2.602116729e-02f, 2.603454462e-02f, 2.604787580e-02f, 2.606116080e-02f, 2.607439960e-02f, 2.608759218e-02f, 2.610073853e-02f, 2.611383862e-02f,
+2.612689245e-02f, 2.613989998e-02f, 2.615286121e-02f, 2.616577610e-02f, 2.617864466e-02f, 2.619146684e-02f, 2.620424265e-02f, 2.621697206e-02f, 2.622965505e-02f, 2.624229161e-02f,
+2.625488171e-02f, 2.626742535e-02f, 2.627992249e-02f, 2.629237313e-02f, 2.630477725e-02f, 2.631713483e-02f, 2.632944585e-02f, 2.634171030e-02f, 2.635392815e-02f, 2.636609940e-02f,
+2.637822402e-02f, 2.639030200e-02f, 2.640233332e-02f, 2.641431796e-02f, 2.642625591e-02f, 2.643814716e-02f, 2.644999168e-02f, 2.646178945e-02f, 2.647354047e-02f, 2.648524472e-02f,
+2.649690218e-02f, 2.650851283e-02f, 2.652007666e-02f, 2.653159365e-02f, 2.654306379e-02f, 2.655448706e-02f, 2.656586344e-02f, 2.657719293e-02f, 2.658847550e-02f, 2.659971113e-02f,
+2.661089983e-02f, 2.662204156e-02f, 2.663313631e-02f, 2.664418408e-02f, 2.665518483e-02f, 2.666613857e-02f, 2.667704527e-02f, 2.668790492e-02f, 2.669871750e-02f, 2.670948301e-02f,
+2.672020142e-02f, 2.673087272e-02f, 2.674149690e-02f, 2.675207394e-02f, 2.676260383e-02f, 2.677308656e-02f, 2.678352211e-02f, 2.679391046e-02f, 2.680425161e-02f, 2.681454554e-02f,
+2.682479223e-02f, 2.683499167e-02f, 2.684514386e-02f, 2.685524877e-02f, 2.686530639e-02f, 2.687531672e-02f, 2.688527972e-02f, 2.689519541e-02f, 2.690506375e-02f, 2.691488474e-02f,
+2.692465836e-02f, 2.693438460e-02f, 2.694406346e-02f, 2.695369491e-02f, 2.696327894e-02f, 2.697281555e-02f, 2.698230472e-02f, 2.699174643e-02f, 2.700114068e-02f, 2.701048745e-02f,
+2.701978673e-02f, 2.702903852e-02f, 2.703824278e-02f, 2.704739953e-02f, 2.705650874e-02f, 2.706557040e-02f, 2.707458451e-02f, 2.708355104e-02f, 2.709246999e-02f, 2.710134135e-02f,
+2.711016510e-02f, 2.711894124e-02f, 2.712766976e-02f, 2.713635064e-02f, 2.714498387e-02f, 2.715356944e-02f, 2.716210734e-02f, 2.717059756e-02f, 2.717904010e-02f, 2.718743493e-02f,
+2.719578205e-02f, 2.720408145e-02f, 2.721233312e-02f, 2.722053705e-02f, 2.722869323e-02f, 2.723680165e-02f, 2.724486230e-02f, 2.725287516e-02f, 2.726084024e-02f, 2.726875752e-02f,
+2.727662699e-02f, 2.728444864e-02f, 2.729222246e-02f, 2.729994844e-02f, 2.730762658e-02f, 2.731525687e-02f, 2.732283929e-02f, 2.733037383e-02f, 2.733786050e-02f, 2.734529927e-02f,
+2.735269015e-02f, 2.736003312e-02f, 2.736732817e-02f, 2.737457529e-02f, 2.738177449e-02f, 2.738892574e-02f, 2.739602905e-02f, 2.740308439e-02f, 2.741009177e-02f, 2.741705118e-02f,
+2.742396261e-02f, 2.743082605e-02f, 2.743764149e-02f, 2.744440893e-02f, 2.745112836e-02f, 2.745779977e-02f, 2.746442315e-02f, 2.747099850e-02f, 2.747752581e-02f, 2.748400507e-02f,
+2.749043628e-02f, 2.749681942e-02f, 2.750315450e-02f, 2.750944150e-02f, 2.751568042e-02f, 2.752187126e-02f, 2.752801400e-02f, 2.753410864e-02f, 2.754015517e-02f, 2.754615358e-02f,
+2.755210388e-02f, 2.755800606e-02f, 2.756386010e-02f, 2.756966600e-02f, 2.757542376e-02f, 2.758113337e-02f, 2.758679483e-02f, 2.759240813e-02f, 2.759797326e-02f, 2.760349022e-02f,
+2.760895900e-02f, 2.761437961e-02f, 2.761975202e-02f, 2.762507625e-02f, 2.763035227e-02f, 2.763558010e-02f, 2.764075972e-02f, 2.764589113e-02f, 2.765097432e-02f, 2.765600930e-02f,
+2.766099604e-02f, 2.766593456e-02f, 2.767082485e-02f, 2.767566690e-02f, 2.768046070e-02f, 2.768520626e-02f, 2.768990357e-02f, 2.769455263e-02f, 2.769915343e-02f, 2.770370597e-02f,
+2.770821024e-02f, 2.771266625e-02f, 2.771707398e-02f, 2.772143344e-02f, 2.772574462e-02f, 2.773000751e-02f, 2.773422213e-02f, 2.773838845e-02f, 2.774250649e-02f, 2.774657623e-02f,
+2.775059767e-02f, 2.775457081e-02f, 2.775849566e-02f, 2.776237219e-02f, 2.776620043e-02f, 2.776998035e-02f, 2.777371196e-02f, 2.777739525e-02f, 2.778103023e-02f, 2.778461690e-02f,
+2.778815524e-02f, 2.779164526e-02f, 2.779508696e-02f, 2.779848033e-02f, 2.780182537e-02f, 2.780512209e-02f, 2.780837047e-02f, 2.781157053e-02f, 2.781472225e-02f, 2.781782564e-02f,
+2.782088069e-02f, 2.782388741e-02f, 2.782684578e-02f, 2.782975583e-02f, 2.783261753e-02f, 2.783543089e-02f, 2.783819591e-02f, 2.784091260e-02f, 2.784358094e-02f, 2.784620094e-02f,
+2.784877260e-02f, 2.785129591e-02f, 2.785377089e-02f, 2.785619752e-02f, 2.785857581e-02f, 2.786090575e-02f, 2.786318736e-02f, 2.786542062e-02f, 2.786760555e-02f, 2.786974213e-02f,
+2.787183037e-02f, 2.787387027e-02f, 2.787586184e-02f, 2.787780506e-02f, 2.787969995e-02f, 2.788154650e-02f, 2.788334472e-02f, 2.788509460e-02f, 2.788679615e-02f, 2.788844937e-02f,
+2.789005425e-02f, 2.789161081e-02f, 2.789311904e-02f, 2.789457895e-02f, 2.789599053e-02f, 2.789735379e-02f, 2.789866873e-02f, 2.789993535e-02f, 2.790115365e-02f, 2.790232364e-02f,
+2.790344532e-02f, 2.790451868e-02f, 2.790554374e-02f, 2.790652050e-02f, 2.790744895e-02f, 2.790832910e-02f, 2.790916096e-02f, 2.790994452e-02f, 2.791067979e-02f, 2.791136677e-02f,
+2.791200547e-02f, 2.791259588e-02f, 2.791313801e-02f, 2.791363187e-02f, 2.791407745e-02f, 2.791447477e-02f, 2.791482382e-02f, 2.791512461e-02f, 2.791537714e-02f, 2.791558141e-02f,
+2.791573744e-02f, 2.791584521e-02f, 2.791590475e-02f, 2.791591604e-02f, 2.791587910e-02f, 2.791579393e-02f, 2.791566054e-02f, 2.791547892e-02f, 2.791524909e-02f, 2.791497104e-02f,
+2.791464479e-02f, 2.791427033e-02f, 2.791384768e-02f, 2.791337683e-02f, 2.791285779e-02f, 2.791229057e-02f, 2.791167518e-02f, 2.791101161e-02f, 2.791029987e-02f, 2.790953997e-02f,
+2.790873192e-02f, 2.790787571e-02f, 2.790697136e-02f, 2.790601887e-02f, 2.790501824e-02f, 2.790396949e-02f, 2.790287262e-02f, 2.790172763e-02f, 2.790053453e-02f, 2.789929333e-02f,
+2.789800403e-02f, 2.789666664e-02f, 2.789528117e-02f, 2.789384762e-02f, 2.789236600e-02f, 2.789083632e-02f, 2.788925858e-02f, 2.788763279e-02f, 2.788595895e-02f, 2.788423708e-02f,
+2.788246718e-02f, 2.788064926e-02f, 2.787878332e-02f, 2.787686938e-02f, 2.787490744e-02f, 2.787289750e-02f, 2.787083958e-02f, 2.786873369e-02f, 2.786657982e-02f, 2.786437800e-02f,
+2.786212822e-02f, 2.785983050e-02f, 2.785748484e-02f, 2.785509125e-02f, 2.785264974e-02f, 2.785016032e-02f, 2.784762300e-02f, 2.784503778e-02f, 2.784240467e-02f, 2.783972369e-02f,
+2.783699484e-02f, 2.783421813e-02f, 2.783139357e-02f, 2.782852116e-02f, 2.782560093e-02f, 2.782263287e-02f, 2.781961699e-02f, 2.781655331e-02f, 2.781344184e-02f, 2.781028258e-02f,
+2.780707554e-02f, 2.780382074e-02f, 2.780051817e-02f, 2.779716787e-02f, 2.779376982e-02f, 2.779032405e-02f, 2.778683056e-02f, 2.778328936e-02f, 2.777970047e-02f, 2.777606389e-02f,
+2.777237964e-02f, 2.776864772e-02f, 2.776486814e-02f, 2.776104092e-02f, 2.775716607e-02f, 2.775324360e-02f, 2.774927351e-02f, 2.774525582e-02f, 2.774119054e-02f, 2.773707769e-02f,
+2.773291727e-02f, 2.772870929e-02f, 2.772445377e-02f, 2.772015071e-02f, 2.771580013e-02f, 2.771140204e-02f, 2.770695646e-02f, 2.770246339e-02f, 2.769792284e-02f, 2.769333483e-02f,
+2.768869937e-02f, 2.768401647e-02f, 2.767928615e-02f, 2.767450841e-02f, 2.766968327e-02f, 2.766481075e-02f, 2.765989084e-02f, 2.765492357e-02f, 2.764990895e-02f, 2.764484699e-02f,
+2.763973771e-02f, 2.763458111e-02f, 2.762937722e-02f, 2.762412603e-02f, 2.761882757e-02f, 2.761348186e-02f, 2.760808889e-02f, 2.760264870e-02f, 2.759716128e-02f, 2.759162665e-02f,
+2.758604484e-02f, 2.758041584e-02f, 2.757473968e-02f, 2.756901637e-02f, 2.756324591e-02f, 2.755742834e-02f, 2.755156366e-02f, 2.754565188e-02f, 2.753969302e-02f, 2.753368710e-02f,
+2.752763412e-02f, 2.752153410e-02f, 2.751538706e-02f, 2.750919302e-02f, 2.750295198e-02f, 2.749666396e-02f, 2.749032898e-02f, 2.748394705e-02f, 2.747751819e-02f, 2.747104240e-02f,
+2.746451972e-02f, 2.745795014e-02f, 2.745133370e-02f, 2.744467040e-02f, 2.743796025e-02f, 2.743120328e-02f, 2.742439950e-02f, 2.741754893e-02f, 2.741065158e-02f, 2.740370746e-02f,
+2.739671660e-02f, 2.738967901e-02f, 2.738259470e-02f, 2.737546370e-02f, 2.736828601e-02f, 2.736106166e-02f, 2.735379066e-02f, 2.734647303e-02f, 2.733910879e-02f, 2.733169794e-02f,
+2.732424052e-02f, 2.731673652e-02f, 2.730918599e-02f, 2.730158892e-02f, 2.729394533e-02f, 2.728625525e-02f, 2.727851869e-02f, 2.727073567e-02f, 2.726290621e-02f, 2.725503032e-02f,
+2.724710802e-02f, 2.723913932e-02f, 2.723112426e-02f, 2.722306284e-02f, 2.721495508e-02f, 2.720680100e-02f, 2.719860061e-02f, 2.719035395e-02f, 2.718206102e-02f, 2.717372184e-02f,
+2.716533643e-02f, 2.715690482e-02f, 2.714842701e-02f, 2.713990303e-02f, 2.713133289e-02f, 2.712271662e-02f, 2.711405423e-02f, 2.710534574e-02f, 2.709659118e-02f, 2.708779055e-02f,
+2.707894389e-02f, 2.707005120e-02f, 2.706111251e-02f, 2.705212784e-02f, 2.704309720e-02f, 2.703402062e-02f, 2.702489812e-02f, 2.701572972e-02f, 2.700651543e-02f, 2.699725527e-02f,
+2.698794927e-02f, 2.697859745e-02f, 2.696919982e-02f, 2.695975640e-02f, 2.695026723e-02f, 2.694073230e-02f, 2.693115166e-02f, 2.692152531e-02f, 2.691185328e-02f, 2.690213559e-02f,
+2.689237226e-02f, 2.688256331e-02f, 2.687270876e-02f, 2.686280863e-02f, 2.685286294e-02f, 2.684287171e-02f, 2.683283498e-02f, 2.682275274e-02f, 2.681262504e-02f, 2.680245188e-02f,
+2.679223330e-02f, 2.678196931e-02f, 2.677165993e-02f, 2.676130518e-02f, 2.675090509e-02f, 2.674045969e-02f, 2.672996898e-02f, 2.671943299e-02f, 2.670885176e-02f, 2.669822528e-02f,
+2.668755360e-02f, 2.667683673e-02f, 2.666607469e-02f, 2.665526751e-02f, 2.664441521e-02f, 2.663351781e-02f, 2.662257534e-02f, 2.661158781e-02f, 2.660055525e-02f, 2.658947769e-02f,
+2.657835514e-02f, 2.656718763e-02f, 2.655597519e-02f, 2.654471783e-02f, 2.653341557e-02f, 2.652206845e-02f, 2.651067649e-02f, 2.649923970e-02f, 2.648775812e-02f, 2.647623176e-02f,
+2.646466066e-02f, 2.645304483e-02f, 2.644138429e-02f, 2.642967908e-02f, 2.641792921e-02f, 2.640613472e-02f, 2.639429561e-02f, 2.638241193e-02f, 2.637048369e-02f, 2.635851092e-02f,
+2.634649364e-02f, 2.633443187e-02f, 2.632232565e-02f, 2.631017499e-02f, 2.629797992e-02f, 2.628574047e-02f, 2.627345666e-02f, 2.626112851e-02f, 2.624875606e-02f, 2.623633932e-02f,
+2.622387832e-02f, 2.621137308e-02f, 2.619882364e-02f, 2.618623002e-02f, 2.617359224e-02f, 2.616091032e-02f, 2.614818431e-02f, 2.613541421e-02f, 2.612260005e-02f, 2.610974187e-02f,
+2.609683968e-02f, 2.608389352e-02f, 2.607090341e-02f, 2.605786937e-02f, 2.604479144e-02f, 2.603166964e-02f, 2.601850398e-02f, 2.600529452e-02f, 2.599204125e-02f, 2.597874423e-02f,
+2.596540346e-02f, 2.595201898e-02f, 2.593859082e-02f, 2.592511900e-02f, 2.591160355e-02f, 2.589804449e-02f, 2.588444186e-02f, 2.587079568e-02f, 2.585710597e-02f, 2.584337277e-02f,
+2.582959611e-02f, 2.581577600e-02f, 2.580191248e-02f, 2.578800558e-02f, 2.577405531e-02f, 2.576006172e-02f, 2.574602483e-02f, 2.573194467e-02f, 2.571782126e-02f, 2.570365463e-02f,
+2.568944481e-02f, 2.567519183e-02f, 2.566089572e-02f, 2.564655651e-02f, 2.563217422e-02f, 2.561774888e-02f, 2.560328052e-02f, 2.558876917e-02f, 2.557421487e-02f, 2.555961763e-02f,
+2.554497748e-02f, 2.553029446e-02f, 2.551556860e-02f, 2.550079992e-02f, 2.548598845e-02f, 2.547113423e-02f, 2.545623727e-02f, 2.544129762e-02f, 2.542631530e-02f, 2.541129033e-02f,
+2.539622276e-02f, 2.538111260e-02f, 2.536595989e-02f, 2.535076467e-02f, 2.533552695e-02f, 2.532024676e-02f, 2.530492415e-02f, 2.528955913e-02f, 2.527415175e-02f, 2.525870202e-02f,
+2.524320998e-02f, 2.522767566e-02f, 2.521209909e-02f, 2.519648030e-02f, 2.518081932e-02f, 2.516511618e-02f, 2.514937092e-02f, 2.513358356e-02f, 2.511775413e-02f, 2.510188267e-02f,
+2.508596920e-02f, 2.507001376e-02f, 2.505401638e-02f, 2.503797708e-02f, 2.502189591e-02f, 2.500577289e-02f, 2.498960806e-02f, 2.497340143e-02f, 2.495715306e-02f, 2.494086296e-02f,
+2.492453117e-02f, 2.490815773e-02f, 2.489174266e-02f, 2.487528599e-02f, 2.485878776e-02f, 2.484224800e-02f, 2.482566674e-02f, 2.480904401e-02f, 2.479237985e-02f, 2.477567429e-02f,
+2.475892736e-02f, 2.474213909e-02f, 2.472530951e-02f, 2.470843867e-02f, 2.469152658e-02f, 2.467457329e-02f, 2.465757882e-02f, 2.464054322e-02f, 2.462346650e-02f, 2.460634871e-02f,
+2.458918988e-02f, 2.457199004e-02f, 2.455474923e-02f, 2.453746747e-02f, 2.452014480e-02f, 2.450278126e-02f, 2.448537687e-02f, 2.446793168e-02f, 2.445044571e-02f, 2.443291900e-02f,
+2.441535158e-02f, 2.439774349e-02f, 2.438009476e-02f, 2.436240542e-02f, 2.434467551e-02f, 2.432690507e-02f, 2.430909411e-02f, 2.429124269e-02f, 2.427335084e-02f, 2.425541858e-02f,
+2.423744596e-02f, 2.421943300e-02f, 2.420137975e-02f, 2.418328623e-02f, 2.416515249e-02f, 2.414697855e-02f, 2.412876446e-02f, 2.411051023e-02f, 2.409221593e-02f, 2.407388156e-02f,
+2.405550718e-02f, 2.403709282e-02f, 2.401863850e-02f, 2.400014428e-02f, 2.398161017e-02f, 2.396303622e-02f, 2.394442247e-02f, 2.392576894e-02f, 2.390707568e-02f, 2.388834272e-02f,
+2.386957009e-02f, 2.385075784e-02f, 2.383190599e-02f, 2.381301459e-02f, 2.379408366e-02f, 2.377511325e-02f, 2.375610339e-02f, 2.373705412e-02f, 2.371796547e-02f, 2.369883749e-02f,
+2.367967019e-02f, 2.366046364e-02f, 2.364121785e-02f, 2.362193286e-02f, 2.360260872e-02f, 2.358324546e-02f, 2.356384312e-02f, 2.354440172e-02f, 2.352492132e-02f, 2.350540194e-02f,
+2.348584363e-02f, 2.346624642e-02f, 2.344661034e-02f, 2.342693545e-02f, 2.340722176e-02f, 2.338746932e-02f, 2.336767817e-02f, 2.334784835e-02f, 2.332797989e-02f, 2.330807282e-02f,
+2.328812720e-02f, 2.326814305e-02f, 2.324812041e-02f, 2.322805932e-02f, 2.320795982e-02f, 2.318782195e-02f, 2.316764575e-02f, 2.314743124e-02f, 2.312717848e-02f, 2.310688749e-02f,
+2.308655833e-02f, 2.306619102e-02f, 2.304578560e-02f, 2.302534212e-02f, 2.300486060e-02f, 2.298434110e-02f, 2.296378364e-02f, 2.294318828e-02f, 2.292255504e-02f, 2.290188396e-02f,
+2.288117509e-02f, 2.286042845e-02f, 2.283964411e-02f, 2.281882208e-02f, 2.279796241e-02f, 2.277706514e-02f, 2.275613031e-02f, 2.273515796e-02f, 2.271414812e-02f, 2.269310084e-02f,
+2.267201616e-02f, 2.265089411e-02f, 2.262973474e-02f, 2.260853808e-02f, 2.258730418e-02f, 2.256603307e-02f, 2.254472480e-02f, 2.252337940e-02f, 2.250199692e-02f, 2.248057739e-02f,
+2.245912085e-02f, 2.243762735e-02f, 2.241609693e-02f, 2.239452962e-02f, 2.237292546e-02f, 2.235128451e-02f, 2.232960679e-02f, 2.230789234e-02f, 2.228614122e-02f, 2.226435345e-02f,
+2.224252908e-02f, 2.222066815e-02f, 2.219877071e-02f, 2.217683678e-02f, 2.215486642e-02f, 2.213285966e-02f, 2.211081654e-02f, 2.208873712e-02f, 2.206662142e-02f, 2.204446948e-02f,
+2.202228136e-02f, 2.200005709e-02f, 2.197779671e-02f, 2.195550026e-02f, 2.193316780e-02f, 2.191079934e-02f, 2.188839495e-02f, 2.186595466e-02f, 2.184347851e-02f, 2.182096654e-02f,
+2.179841880e-02f, 2.177583533e-02f, 2.175321617e-02f, 2.173056136e-02f, 2.170787095e-02f, 2.168514497e-02f, 2.166238347e-02f, 2.163958649e-02f, 2.161675407e-02f, 2.159388627e-02f,
+2.157098311e-02f, 2.154804464e-02f, 2.152507090e-02f, 2.150206194e-02f, 2.147901780e-02f, 2.145593852e-02f, 2.143282414e-02f, 2.140967472e-02f, 2.138649028e-02f, 2.136327088e-02f,
+2.134001655e-02f, 2.131672734e-02f, 2.129340329e-02f, 2.127004445e-02f, 2.124665086e-02f, 2.122322256e-02f, 2.119975960e-02f, 2.117626202e-02f, 2.115272986e-02f, 2.112916316e-02f,
+2.110556198e-02f, 2.108192635e-02f, 2.105825631e-02f, 2.103455192e-02f, 2.101081321e-02f, 2.098704024e-02f, 2.096323303e-02f, 2.093939164e-02f, 2.091551611e-02f, 2.089160649e-02f,
+2.086766281e-02f, 2.084368513e-02f, 2.081967349e-02f, 2.079562793e-02f, 2.077154849e-02f, 2.074743522e-02f, 2.072328817e-02f, 2.069910738e-02f, 2.067489290e-02f, 2.065064476e-02f,
+2.062636302e-02f, 2.060204771e-02f, 2.057769889e-02f, 2.055331660e-02f, 2.052890088e-02f, 2.050445178e-02f, 2.047996934e-02f, 2.045545361e-02f, 2.043090463e-02f, 2.040632245e-02f,
+2.038170711e-02f, 2.035705867e-02f, 2.033237716e-02f, 2.030766262e-02f, 2.028291512e-02f, 2.025813468e-02f, 2.023332136e-02f, 2.020847520e-02f, 2.018359625e-02f, 2.015868456e-02f,
+2.013374016e-02f, 2.010876310e-02f, 2.008375344e-02f, 2.005871122e-02f, 2.003363647e-02f, 2.000852926e-02f, 1.998338962e-02f, 1.995821760e-02f, 1.993301325e-02f, 1.990777661e-02f,
+1.988250774e-02f, 1.985720666e-02f, 1.983187345e-02f, 1.980650812e-02f, 1.978111075e-02f, 1.975568137e-02f, 1.973022002e-02f, 1.970472676e-02f, 1.967920164e-02f, 1.965364469e-02f,
+1.962805596e-02f, 1.960243551e-02f, 1.957678338e-02f, 1.955109962e-02f, 1.952538426e-02f, 1.949963737e-02f, 1.947385899e-02f, 1.944804916e-02f, 1.942220793e-02f, 1.939633535e-02f,
+1.937043147e-02f, 1.934449633e-02f, 1.931852998e-02f, 1.929253247e-02f, 1.926650384e-02f, 1.924044415e-02f, 1.921435345e-02f, 1.918823177e-02f, 1.916207916e-02f, 1.913589568e-02f,
+1.910968138e-02f, 1.908343629e-02f, 1.905716047e-02f, 1.903085397e-02f, 1.900451683e-02f, 1.897814910e-02f, 1.895175083e-02f, 1.892532207e-02f, 1.889886287e-02f, 1.887237327e-02f,
+1.884585333e-02f, 1.881930308e-02f, 1.879272259e-02f, 1.876611189e-02f, 1.873947104e-02f, 1.871280009e-02f, 1.868609908e-02f, 1.865936806e-02f, 1.863260708e-02f, 1.860581619e-02f,
+1.857899544e-02f, 1.855214488e-02f, 1.852526455e-02f, 1.849835451e-02f, 1.847141480e-02f, 1.844444548e-02f, 1.841744658e-02f, 1.839041817e-02f, 1.836336029e-02f, 1.833627299e-02f,
+1.830915632e-02f, 1.828201032e-02f, 1.825483505e-02f, 1.822763056e-02f, 1.820039690e-02f, 1.817313411e-02f, 1.814584224e-02f, 1.811852135e-02f, 1.809117149e-02f, 1.806379270e-02f,
+1.803638503e-02f, 1.800894853e-02f, 1.798148326e-02f, 1.795398926e-02f, 1.792646659e-02f, 1.789891528e-02f, 1.787133540e-02f, 1.784372700e-02f, 1.781609011e-02f, 1.778842480e-02f,
+1.776073111e-02f, 1.773300910e-02f, 1.770525881e-02f, 1.767748029e-02f, 1.764967359e-02f, 1.762183877e-02f, 1.759397588e-02f, 1.756608496e-02f, 1.753816607e-02f, 1.751021925e-02f,
+1.748224456e-02f, 1.745424205e-02f, 1.742621176e-02f, 1.739815376e-02f, 1.737006808e-02f, 1.734195479e-02f, 1.731381393e-02f, 1.728564555e-02f, 1.725744970e-02f, 1.722922643e-02f,
+1.720097581e-02f, 1.717269787e-02f, 1.714439266e-02f, 1.711606025e-02f, 1.708770067e-02f, 1.705931399e-02f, 1.703090024e-02f, 1.700245949e-02f, 1.697399179e-02f, 1.694549718e-02f,
+1.691697572e-02f, 1.688842746e-02f, 1.685985246e-02f, 1.683125075e-02f, 1.680262240e-02f, 1.677396745e-02f, 1.674528596e-02f, 1.671657798e-02f, 1.668784356e-02f, 1.665908275e-02f,
+1.663029561e-02f, 1.660148219e-02f, 1.657264253e-02f, 1.654377669e-02f, 1.651488473e-02f, 1.648596669e-02f, 1.645702263e-02f, 1.642805259e-02f, 1.639905664e-02f, 1.637003482e-02f,
+1.634098719e-02f, 1.631191379e-02f, 1.628281468e-02f, 1.625368992e-02f, 1.622453955e-02f, 1.619536363e-02f, 1.616616221e-02f, 1.613693534e-02f, 1.610768307e-02f, 1.607840547e-02f,
+1.604910257e-02f, 1.601977444e-02f, 1.599042112e-02f, 1.596104267e-02f, 1.593163915e-02f, 1.590221059e-02f, 1.587275707e-02f, 1.584327862e-02f, 1.581377531e-02f, 1.578424718e-02f,
+1.575469429e-02f, 1.572511670e-02f, 1.569551445e-02f, 1.566588760e-02f, 1.563623620e-02f, 1.560656030e-02f, 1.557685997e-02f, 1.554713524e-02f, 1.551738618e-02f, 1.548761284e-02f,
+1.545781527e-02f, 1.542799352e-02f, 1.539814766e-02f, 1.536827772e-02f, 1.533838377e-02f, 1.530846586e-02f, 1.527852405e-02f, 1.524855838e-02f, 1.521856891e-02f, 1.518855569e-02f,
+1.515851879e-02f, 1.512845824e-02f, 1.509837411e-02f, 1.506826645e-02f, 1.503813532e-02f, 1.500798076e-02f, 1.497780283e-02f, 1.494760159e-02f, 1.491737709e-02f, 1.488712938e-02f,
+1.485685852e-02f, 1.482656456e-02f, 1.479624756e-02f, 1.476590757e-02f, 1.473554464e-02f, 1.470515883e-02f, 1.467475020e-02f, 1.464431879e-02f, 1.461386467e-02f, 1.458338788e-02f,
+1.455288849e-02f, 1.452236654e-02f, 1.449182209e-02f, 1.446125520e-02f, 1.443066591e-02f, 1.440005429e-02f, 1.436942039e-02f, 1.433876426e-02f, 1.430808597e-02f, 1.427738555e-02f,
+1.424666308e-02f, 1.421591859e-02f, 1.418515216e-02f, 1.415436382e-02f, 1.412355365e-02f, 1.409272169e-02f, 1.406186800e-02f, 1.403099263e-02f, 1.400009563e-02f, 1.396917707e-02f,
+1.393823700e-02f, 1.390727548e-02f, 1.387629255e-02f, 1.384528828e-02f, 1.381426271e-02f, 1.378321591e-02f, 1.375214793e-02f, 1.372105883e-02f, 1.368994866e-02f, 1.365881747e-02f,
+1.362766533e-02f, 1.359649228e-02f, 1.356529839e-02f, 1.353408370e-02f, 1.350284828e-02f, 1.347159218e-02f, 1.344031545e-02f, 1.340901816e-02f, 1.337770035e-02f, 1.334636208e-02f,
+1.331500342e-02f, 1.328362441e-02f, 1.325222510e-02f, 1.322080557e-02f, 1.318936586e-02f, 1.315790602e-02f, 1.312642612e-02f, 1.309492621e-02f, 1.306340634e-02f, 1.303186658e-02f,
+1.300030697e-02f, 1.296872758e-02f, 1.293712846e-02f, 1.290550967e-02f, 1.287387125e-02f, 1.284221328e-02f, 1.281053581e-02f, 1.277883888e-02f, 1.274712256e-02f, 1.271538691e-02f,
+1.268363198e-02f, 1.265185782e-02f, 1.262006450e-02f, 1.258825207e-02f, 1.255642059e-02f, 1.252457011e-02f, 1.249270068e-02f, 1.246081238e-02f, 1.242890524e-02f, 1.239697934e-02f,
+1.236503472e-02f, 1.233307145e-02f, 1.230108958e-02f, 1.226908916e-02f, 1.223707025e-02f, 1.220503292e-02f, 1.217297721e-02f, 1.214090318e-02f, 1.210881090e-02f, 1.207670041e-02f,
+1.204457178e-02f, 1.201242506e-02f, 1.198026031e-02f, 1.194807758e-02f, 1.191587693e-02f, 1.188365843e-02f, 1.185142212e-02f, 1.181916806e-02f, 1.178689632e-02f, 1.175460694e-02f,
+1.172229999e-02f, 1.168997552e-02f, 1.165763359e-02f, 1.162527425e-02f, 1.159289758e-02f, 1.156050361e-02f, 1.152809241e-02f, 1.149566404e-02f, 1.146321855e-02f, 1.143075600e-02f,
+1.139827645e-02f, 1.136577996e-02f, 1.133326658e-02f, 1.130073637e-02f, 1.126818939e-02f, 1.123562570e-02f, 1.120304535e-02f, 1.117044840e-02f, 1.113783491e-02f, 1.110520493e-02f,
+1.107255854e-02f, 1.103989577e-02f, 1.100721669e-02f, 1.097452136e-02f, 1.094180984e-02f, 1.090908218e-02f, 1.087633844e-02f, 1.084357867e-02f, 1.081080295e-02f, 1.077801132e-02f,
+1.074520384e-02f, 1.071238057e-02f, 1.067954157e-02f, 1.064668690e-02f, 1.061381661e-02f, 1.058093076e-02f, 1.054802942e-02f, 1.051511263e-02f, 1.048218046e-02f, 1.044923296e-02f,
+1.041627020e-02f, 1.038329223e-02f, 1.035029910e-02f, 1.031729089e-02f, 1.028426764e-02f, 1.025122941e-02f, 1.021817627e-02f, 1.018510826e-02f, 1.015202546e-02f, 1.011892791e-02f,
+1.008581568e-02f, 1.005268882e-02f, 1.001954739e-02f, 9.986391454e-03f, 9.953221066e-03f, 9.920036285e-03f, 9.886837171e-03f, 9.853623781e-03f, 9.820396173e-03f, 9.787154407e-03f,
+9.753898541e-03f, 9.720628633e-03f, 9.687344743e-03f, 9.654046928e-03f, 9.620735247e-03f, 9.587409759e-03f, 9.554070523e-03f, 9.520717597e-03f, 9.487351040e-03f, 9.453970911e-03f,
+9.420577268e-03f, 9.387170170e-03f, 9.353749676e-03f, 9.320315845e-03f, 9.286868735e-03f, 9.253408405e-03f, 9.219934915e-03f, 9.186448323e-03f, 9.152948688e-03f, 9.119436068e-03f,
+9.085910523e-03f, 9.052372112e-03f, 9.018820894e-03f, 8.985256927e-03f, 8.951680270e-03f, 8.918090983e-03f, 8.884489125e-03f, 8.850874754e-03f, 8.817247930e-03f, 8.783608711e-03f,
+8.749957158e-03f, 8.716293328e-03f, 8.682617281e-03f, 8.648929076e-03f, 8.615228772e-03f, 8.581516429e-03f, 8.547792106e-03f, 8.514055861e-03f, 8.480307754e-03f, 8.446547844e-03f,
+8.412776191e-03f, 8.378992854e-03f, 8.345197891e-03f, 8.311391363e-03f, 8.277573328e-03f, 8.243743846e-03f, 8.209902977e-03f, 8.176050779e-03f, 8.142187311e-03f, 8.108312634e-03f,
+8.074426807e-03f, 8.040529889e-03f, 8.006621939e-03f, 7.972703017e-03f, 7.938773182e-03f, 7.904832495e-03f, 7.870881013e-03f, 7.836918797e-03f, 7.802945907e-03f, 7.768962401e-03f,
+7.734968339e-03f, 7.700963781e-03f, 7.666948787e-03f, 7.632923415e-03f, 7.598887726e-03f, 7.564841779e-03f, 7.530785634e-03f, 7.496719350e-03f, 7.462642987e-03f, 7.428556604e-03f,
+7.394460262e-03f, 7.360354020e-03f, 7.326237937e-03f, 7.292112073e-03f, 7.257976488e-03f, 7.223831242e-03f, 7.189676395e-03f, 7.155512005e-03f, 7.121338133e-03f, 7.087154839e-03f,
+7.052962182e-03f, 7.018760222e-03f, 6.984549020e-03f, 6.950328633e-03f, 6.916099124e-03f, 6.881860551e-03f, 6.847612974e-03f, 6.813356453e-03f, 6.779091048e-03f, 6.744816818e-03f,
+6.710533825e-03f, 6.676242126e-03f, 6.641941784e-03f, 6.607632856e-03f, 6.573315404e-03f, 6.538989487e-03f, 6.504655164e-03f, 6.470312497e-03f, 6.435961545e-03f, 6.401602368e-03f,
+6.367235026e-03f, 6.332859578e-03f, 6.298476086e-03f, 6.264084608e-03f, 6.229685205e-03f, 6.195277937e-03f, 6.160862864e-03f, 6.126440045e-03f, 6.092009542e-03f, 6.057571414e-03f,
+6.023125721e-03f, 5.988672522e-03f, 5.954211879e-03f, 5.919743852e-03f, 5.885268499e-03f, 5.850785883e-03f, 5.816296061e-03f, 5.781799096e-03f, 5.747295046e-03f, 5.712783972e-03f,
+5.678265934e-03f, 5.643740992e-03f, 5.609209206e-03f, 5.574670637e-03f, 5.540125345e-03f, 5.505573389e-03f, 5.471014830e-03f, 5.436449729e-03f, 5.401878144e-03f, 5.367300138e-03f,
+5.332715768e-03f, 5.298125097e-03f, 5.263528184e-03f, 5.228925089e-03f, 5.194315873e-03f, 5.159700595e-03f, 5.125079316e-03f, 5.090452097e-03f, 5.055818997e-03f, 5.021180077e-03f,
+4.986535396e-03f, 4.951885016e-03f, 4.917228996e-03f, 4.882567397e-03f, 4.847900279e-03f, 4.813227702e-03f, 4.778549727e-03f, 4.743866414e-03f, 4.709177822e-03f, 4.674484013e-03f,
+4.639785047e-03f, 4.605080983e-03f, 4.570371883e-03f, 4.535657807e-03f, 4.500938814e-03f, 4.466214966e-03f, 4.431486322e-03f, 4.396752943e-03f, 4.362014888e-03f, 4.327272220e-03f,
+4.292524997e-03f, 4.257773281e-03f, 4.223017130e-03f, 4.188256607e-03f, 4.153491771e-03f, 4.118722682e-03f, 4.083949401e-03f, 4.049171988e-03f, 4.014390503e-03f, 3.979605008e-03f,
+3.944815562e-03f, 3.910022225e-03f, 3.875225058e-03f, 3.840424121e-03f, 3.805619475e-03f, 3.770811180e-03f, 3.735999296e-03f, 3.701183884e-03f, 3.666365004e-03f, 3.631542716e-03f,
+3.596717081e-03f, 3.561888159e-03f, 3.527056011e-03f, 3.492220696e-03f, 3.457382276e-03f, 3.422540810e-03f, 3.387696359e-03f, 3.352848984e-03f, 3.317998744e-03f, 3.283145700e-03f,
+3.248289912e-03f, 3.213431442e-03f, 3.178570348e-03f, 3.143706692e-03f, 3.108840534e-03f, 3.073971934e-03f, 3.039100953e-03f, 3.004227650e-03f, 2.969352087e-03f, 2.934474323e-03f,
+2.899594420e-03f, 2.864712437e-03f, 2.829828434e-03f, 2.794942473e-03f, 2.760054613e-03f, 2.725164914e-03f, 2.690273438e-03f, 2.655380244e-03f, 2.620485393e-03f, 2.585588946e-03f,
+2.550690961e-03f, 2.515791501e-03f, 2.480890625e-03f, 2.445988393e-03f, 2.411084865e-03f, 2.376180104e-03f, 2.341274167e-03f, 2.306367116e-03f, 2.271459011e-03f, 2.236549913e-03f,
+2.201639882e-03f, 2.166728977e-03f, 2.131817260e-03f, 2.096904790e-03f, 2.061991628e-03f, 2.027077834e-03f, 1.992163469e-03f, 1.957248593e-03f, 1.922333266e-03f, 1.887417548e-03f,
+1.852501499e-03f, 1.817585180e-03f, 1.782668652e-03f, 1.747751974e-03f, 1.712835206e-03f, 1.677918410e-03f, 1.643001644e-03f, 1.608084970e-03f, 1.573168447e-03f, 1.538252136e-03f,
+1.503336097e-03f, 1.468420391e-03f, 1.433505076e-03f, 1.398590215e-03f, 1.363675866e-03f, 1.328762091e-03f, 1.293848948e-03f, 1.258936499e-03f, 1.224024803e-03f, 1.189113922e-03f,
+1.154203914e-03f, 1.119294840e-03f, 1.084386760e-03f, 1.049479735e-03f, 1.014573824e-03f, 9.796690881e-04f, 9.447655866e-04f, 9.098633800e-04f, 8.749625282e-04f, 8.400630916e-04f,
+8.051651300e-04f, 7.702687037e-04f, 7.353738726e-04f, 7.004806969e-04f, 6.655892366e-04f, 6.306995517e-04f, 5.958117024e-04f, 5.609257486e-04f, 5.260417504e-04f, 4.911597677e-04f,
+4.562798607e-04f, 4.214020892e-04f, 3.865265134e-04f, 3.516531931e-04f, 3.167821884e-04f, 2.819135591e-04f, 2.470473654e-04f, 2.121836671e-04f, 1.773225241e-04f, 1.424639964e-04f,
+1.076081440e-04f, 7.275502664e-05f, 3.790470432e-05f, 3.057236898e-06f, -3.178731573e-05f, -6.662889370e-05f, -1.014674371e-04f, -1.363028862e-04f, -1.711351811e-04f, -2.059642619e-04f,
+-2.407900689e-04f, -2.756125422e-04f, -3.104316221e-04f, -3.452472487e-04f, -3.800593622e-04f, -4.148679030e-04f, -4.496728112e-04f, -4.844740272e-04f, -5.192714911e-04f, -5.540651433e-04f,
+-5.888549241e-04f, -6.236407737e-04f, -6.584226325e-04f, -6.932004408e-04f, -7.279741390e-04f, -7.627436673e-04f, -7.975089662e-04f, -8.322699761e-04f, -8.670266372e-04f, -9.017788901e-04f,
+-9.365266752e-04f, -9.712699328e-04f, -1.006008603e-03f, -1.040742627e-03f, -1.075471945e-03f, -1.110196498e-03f, -1.144916225e-03f, -1.179631068e-03f, -1.214340966e-03f, -1.249045861e-03f,
+-1.283745693e-03f, -1.318440403e-03f, -1.353129930e-03f, -1.387814217e-03f, -1.422493203e-03f, -1.457166828e-03f, -1.491835034e-03f, -1.526497762e-03f, -1.561154951e-03f, -1.595806543e-03f,
+-1.630452477e-03f, -1.665092696e-03f, -1.699727140e-03f, -1.734355748e-03f, -1.768978463e-03f, -1.803595225e-03f, -1.838205975e-03f, -1.872810652e-03f, -1.907409199e-03f, -1.942001556e-03f,
+-1.976587664e-03f, -2.011167464e-03f, -2.045740897e-03f, -2.080307902e-03f, -2.114868423e-03f, -2.149422398e-03f, -2.183969770e-03f, -2.218510479e-03f, -2.253044466e-03f, -2.287571673e-03f,
+-2.322092039e-03f, -2.356605507e-03f, -2.391112017e-03f, -2.425611510e-03f, -2.460103928e-03f, -2.494589210e-03f, -2.529067300e-03f, -2.563538137e-03f, -2.598001663e-03f, -2.632457818e-03f,
+-2.666906545e-03f, -2.701347784e-03f, -2.735781476e-03f, -2.770207564e-03f, -2.804625987e-03f, -2.839036687e-03f, -2.873439606e-03f, -2.907834685e-03f, -2.942221864e-03f, -2.976601086e-03f,
+-3.010972292e-03f, -3.045335423e-03f, -3.079690421e-03f, -3.114037227e-03f, -3.148375782e-03f, -3.182706027e-03f, -3.217027905e-03f, -3.251341357e-03f, -3.285646324e-03f, -3.319942748e-03f,
+-3.354230571e-03f, -3.388509733e-03f, -3.422780177e-03f, -3.457041843e-03f, -3.491294675e-03f, -3.525538613e-03f, -3.559773599e-03f, -3.593999575e-03f, -3.628216482e-03f, -3.662424262e-03f,
+-3.696622857e-03f, -3.730812209e-03f, -3.764992259e-03f, -3.799162950e-03f, -3.833324222e-03f, -3.867476019e-03f, -3.901618281e-03f, -3.935750951e-03f, -3.969873971e-03f, -4.003987282e-03f,
+-4.038090826e-03f, -4.072184547e-03f, -4.106268384e-03f, -4.140342281e-03f, -4.174406180e-03f, -4.208460022e-03f, -4.242503750e-03f, -4.276537306e-03f, -4.310560632e-03f, -4.344573670e-03f,
+-4.378576362e-03f, -4.412568650e-03f, -4.446550478e-03f, -4.480521786e-03f, -4.514482517e-03f, -4.548432614e-03f, -4.582372019e-03f, -4.616300674e-03f, -4.650218521e-03f, -4.684125504e-03f,
+-4.718021563e-03f, -4.751906643e-03f, -4.785780684e-03f, -4.819643631e-03f, -4.853495424e-03f, -4.887336007e-03f, -4.921165323e-03f, -4.954983313e-03f, -4.988789921e-03f, -5.022585089e-03f,
+-5.056368759e-03f, -5.090140875e-03f, -5.123901379e-03f, -5.157650214e-03f, -5.191387322e-03f, -5.225112647e-03f, -5.258826131e-03f, -5.292527716e-03f, -5.326217347e-03f, -5.359894965e-03f,
+-5.393560514e-03f, -5.427213936e-03f, -5.460855175e-03f, -5.494484173e-03f, -5.528100874e-03f, -5.561705220e-03f, -5.595297154e-03f, -5.628876620e-03f, -5.662443561e-03f, -5.695997920e-03f,
+-5.729539640e-03f, -5.763068663e-03f, -5.796584935e-03f, -5.830088396e-03f, -5.863578992e-03f, -5.897056665e-03f, -5.930521358e-03f, -5.963973016e-03f, -5.997411580e-03f, -6.030836995e-03f,
+-6.064249204e-03f, -6.097648151e-03f, -6.131033778e-03f, -6.164406030e-03f, -6.197764851e-03f, -6.231110182e-03f, -6.264441969e-03f, -6.297760155e-03f, -6.331064683e-03f, -6.364355498e-03f,
+-6.397632542e-03f, -6.430895760e-03f, -6.464145095e-03f, -6.497380491e-03f, -6.530601892e-03f, -6.563809242e-03f, -6.597002485e-03f, -6.630181565e-03f, -6.663346425e-03f, -6.696497009e-03f,
+-6.729633262e-03f, -6.762755128e-03f, -6.795862550e-03f, -6.828955472e-03f, -6.862033840e-03f, -6.895097596e-03f, -6.928146686e-03f, -6.961181053e-03f, -6.994200641e-03f, -7.027205395e-03f,
+-7.060195260e-03f, -7.093170178e-03f, -7.126130096e-03f, -7.159074957e-03f, -7.192004705e-03f, -7.224919285e-03f, -7.257818642e-03f, -7.290702719e-03f, -7.323571462e-03f, -7.356424816e-03f,
+-7.389262724e-03f, -7.422085131e-03f, -7.454891982e-03f, -7.487683222e-03f, -7.520458796e-03f, -7.553218647e-03f, -7.585962722e-03f, -7.618690964e-03f, -7.651403319e-03f, -7.684099732e-03f,
+-7.716780147e-03f, -7.749444509e-03f, -7.782092764e-03f, -7.814724856e-03f, -7.847340730e-03f, -7.879940332e-03f, -7.912523607e-03f, -7.945090499e-03f, -7.977640955e-03f, -8.010174918e-03f,
+-8.042692335e-03f, -8.075193150e-03f, -8.107677310e-03f, -8.140144758e-03f, -8.172595442e-03f, -8.205029305e-03f, -8.237446294e-03f, -8.269846354e-03f, -8.302229431e-03f, -8.334595470e-03f,
+-8.366944416e-03f, -8.399276215e-03f, -8.431590814e-03f, -8.463888157e-03f, -8.496168190e-03f, -8.528430859e-03f, -8.560676110e-03f, -8.592903889e-03f, -8.625114141e-03f, -8.657306812e-03f,
+-8.689481849e-03f, -8.721639197e-03f, -8.753778802e-03f, -8.785900611e-03f, -8.818004569e-03f, -8.850090622e-03f, -8.882158717e-03f, -8.914208799e-03f, -8.946240816e-03f, -8.978254712e-03f,
+-9.010250435e-03f, -9.042227931e-03f, -9.074187146e-03f, -9.106128026e-03f, -9.138050518e-03f, -9.169954568e-03f, -9.201840123e-03f, -9.233707130e-03f, -9.265555534e-03f, -9.297385283e-03f,
+-9.329196323e-03f, -9.360988601e-03f, -9.392762064e-03f, -9.424516657e-03f, -9.456252329e-03f, -9.487969025e-03f, -9.519666693e-03f, -9.551345280e-03f, -9.583004733e-03f, -9.614644997e-03f,
+-9.646266022e-03f, -9.677867753e-03f, -9.709450137e-03f, -9.741013123e-03f, -9.772556656e-03f, -9.804080684e-03f, -9.835585155e-03f, -9.867070015e-03f, -9.898535212e-03f, -9.929980693e-03f,
+-9.961406406e-03f, -9.992812298e-03f, -1.002419832e-02f, -1.005556441e-02f, -1.008691052e-02f, -1.011823661e-02f, -1.014954261e-02f, -1.018082847e-02f, -1.021209415e-02f, -1.024333958e-02f,
+-1.027456473e-02f, -1.030576953e-02f, -1.033695393e-02f, -1.036811788e-02f, -1.039926134e-02f, -1.043038424e-02f, -1.046148653e-02f, -1.049256817e-02f, -1.052362910e-02f, -1.055466927e-02f,
+-1.058568863e-02f, -1.061668712e-02f, -1.064766469e-02f, -1.067862130e-02f, -1.070955689e-02f, -1.074047141e-02f, -1.077136480e-02f, -1.080223703e-02f, -1.083308802e-02f, -1.086391774e-02f,
+-1.089472613e-02f, -1.092551314e-02f, -1.095627872e-02f, -1.098702281e-02f, -1.101774537e-02f, -1.104844635e-02f, -1.107912569e-02f, -1.110978335e-02f, -1.114041926e-02f, -1.117103339e-02f,
+-1.120162567e-02f, -1.123219606e-02f, -1.126274451e-02f, -1.129327097e-02f, -1.132377538e-02f, -1.135425770e-02f, -1.138471788e-02f, -1.141515585e-02f, -1.144557158e-02f, -1.147596501e-02f,
+-1.150633609e-02f, -1.153668478e-02f, -1.156701101e-02f, -1.159731475e-02f, -1.162759593e-02f, -1.165785452e-02f, -1.168809045e-02f, -1.171830368e-02f, -1.174849416e-02f, -1.177866184e-02f,
+-1.180880666e-02f, -1.183892859e-02f, -1.186902756e-02f, -1.189910353e-02f, -1.192915645e-02f, -1.195918627e-02f, -1.198919293e-02f, -1.201917639e-02f, -1.204913660e-02f, -1.207907351e-02f,
+-1.210898707e-02f, -1.213887723e-02f, -1.216874394e-02f, -1.219858714e-02f, -1.222840680e-02f, -1.225820286e-02f, -1.228797527e-02f, -1.231772398e-02f, -1.234744895e-02f, -1.237715012e-02f,
+-1.240682744e-02f, -1.243648087e-02f, -1.246611035e-02f, -1.249571584e-02f, -1.252529729e-02f, -1.255485465e-02f, -1.258438786e-02f, -1.261389689e-02f, -1.264338168e-02f, -1.267284218e-02f,
+-1.270227835e-02f, -1.273169013e-02f, -1.276107747e-02f, -1.279044034e-02f, -1.281977867e-02f, -1.284909243e-02f, -1.287838155e-02f, -1.290764600e-02f, -1.293688573e-02f, -1.296610068e-02f,
+-1.299529081e-02f, -1.302445607e-02f, -1.305359641e-02f, -1.308271179e-02f, -1.311180215e-02f, -1.314086745e-02f, -1.316990763e-02f, -1.319892266e-02f, -1.322791248e-02f, -1.325687705e-02f,
+-1.328581632e-02f, -1.331473023e-02f, -1.334361875e-02f, -1.337248182e-02f, -1.340131939e-02f, -1.343013143e-02f, -1.345891787e-02f, -1.348767868e-02f, -1.351641381e-02f, -1.354512320e-02f,
+-1.357380682e-02f, -1.360246461e-02f, -1.363109652e-02f, -1.365970252e-02f, -1.368828254e-02f, -1.371683656e-02f, -1.374536451e-02f, -1.377386635e-02f, -1.380234203e-02f, -1.383079151e-02f,
+-1.385921474e-02f, -1.388761167e-02f, -1.391598226e-02f, -1.394432646e-02f, -1.397264423e-02f, -1.400093550e-02f, -1.402920025e-02f, -1.405743842e-02f, -1.408564997e-02f, -1.411383484e-02f,
+-1.414199300e-02f, -1.417012440e-02f, -1.419822898e-02f, -1.422630672e-02f, -1.425435755e-02f, -1.428238143e-02f, -1.431037831e-02f, -1.433834816e-02f, -1.436629092e-02f, -1.439420655e-02f,
+-1.442209500e-02f, -1.444995623e-02f, -1.447779019e-02f, -1.450559683e-02f, -1.453337611e-02f, -1.456112798e-02f, -1.458885240e-02f, -1.461654932e-02f, -1.464421870e-02f, -1.467186049e-02f,
+-1.469947465e-02f, -1.472706112e-02f, -1.475461987e-02f, -1.478215085e-02f, -1.480965402e-02f, -1.483712932e-02f, -1.486457672e-02f, -1.489199616e-02f, -1.491938761e-02f, -1.494675102e-02f,
+-1.497408635e-02f, -1.500139354e-02f, -1.502867256e-02f, -1.505592335e-02f, -1.508314589e-02f, -1.511034011e-02f, -1.513750598e-02f, -1.516464345e-02f, -1.519175248e-02f, -1.521883302e-02f,
+-1.524588502e-02f, -1.527290846e-02f, -1.529990327e-02f, -1.532686941e-02f, -1.535380685e-02f, -1.538071554e-02f, -1.540759543e-02f, -1.543444647e-02f, -1.546126863e-02f, -1.548806187e-02f,
+-1.551482613e-02f, -1.554156137e-02f, -1.556826756e-02f, -1.559494464e-02f, -1.562159257e-02f, -1.564821131e-02f, -1.567480082e-02f, -1.570136105e-02f, -1.572789196e-02f, -1.575439350e-02f,
+-1.578086563e-02f, -1.580730832e-02f, -1.583372151e-02f, -1.586010516e-02f, -1.588645923e-02f, -1.591278368e-02f, -1.593907846e-02f, -1.596534353e-02f, -1.599157884e-02f, -1.601778437e-02f,
+-1.604396005e-02f, -1.607010586e-02f, -1.609622174e-02f, -1.612230765e-02f, -1.614836356e-02f, -1.617438941e-02f, -1.620038517e-02f, -1.622635080e-02f, -1.625228625e-02f, -1.627819147e-02f,
+-1.630406644e-02f, -1.632991110e-02f, -1.635572541e-02f, -1.638150933e-02f, -1.640726283e-02f, -1.643298585e-02f, -1.645867835e-02f, -1.648434030e-02f, -1.650997165e-02f, -1.653557236e-02f,
+-1.656114239e-02f, -1.658668170e-02f, -1.661219024e-02f, -1.663766798e-02f, -1.666311486e-02f, -1.668853086e-02f, -1.671391593e-02f, -1.673927003e-02f, -1.676459311e-02f, -1.678988515e-02f,
+-1.681514608e-02f, -1.684037588e-02f, -1.686557450e-02f, -1.689074191e-02f, -1.691587806e-02f, -1.694098290e-02f, -1.696605641e-02f, -1.699109854e-02f, -1.701610924e-02f, -1.704108849e-02f,
+-1.706603623e-02f, -1.709095242e-02f, -1.711583704e-02f, -1.714069003e-02f, -1.716551135e-02f, -1.719030098e-02f, -1.721505885e-02f, -1.723978495e-02f, -1.726447922e-02f, -1.728914162e-02f,
+-1.731377212e-02f, -1.733837068e-02f, -1.736293725e-02f, -1.738747180e-02f, -1.741197428e-02f, -1.743644466e-02f, -1.746088290e-02f, -1.748528896e-02f, -1.750966279e-02f, -1.753400437e-02f,
+-1.755831364e-02f, -1.758259057e-02f, -1.760683513e-02f, -1.763104727e-02f, -1.765522695e-02f, -1.767937413e-02f, -1.770348878e-02f, -1.772757085e-02f, -1.775162031e-02f, -1.777563712e-02f,
+-1.779962124e-02f, -1.782357263e-02f, -1.784749125e-02f, -1.787137706e-02f, -1.789523003e-02f, -1.791905012e-02f, -1.794283728e-02f, -1.796659149e-02f, -1.799031269e-02f, -1.801400086e-02f,
+-1.803765596e-02f, -1.806127794e-02f, -1.808486677e-02f, -1.810842241e-02f, -1.813194482e-02f, -1.815543397e-02f, -1.817888982e-02f, -1.820231233e-02f, -1.822570146e-02f, -1.824905717e-02f,
+-1.827237944e-02f, -1.829566821e-02f, -1.831892345e-02f, -1.834214513e-02f, -1.836533320e-02f, -1.838848764e-02f, -1.841160840e-02f, -1.843469544e-02f, -1.845774873e-02f, -1.848076824e-02f,
+-1.850375392e-02f, -1.852670574e-02f, -1.854962365e-02f, -1.857250764e-02f, -1.859535765e-02f, -1.861817365e-02f, -1.864095561e-02f, -1.866370348e-02f, -1.868641724e-02f, -1.870909684e-02f,
+-1.873174225e-02f, -1.875435344e-02f, -1.877693036e-02f, -1.879947298e-02f, -1.882198126e-02f, -1.884445517e-02f, -1.886689468e-02f, -1.888929974e-02f, -1.891167032e-02f, -1.893400639e-02f,
+-1.895630790e-02f, -1.897857483e-02f, -1.900080714e-02f, -1.902300479e-02f, -1.904516774e-02f, -1.906729597e-02f, -1.908938944e-02f, -1.911144810e-02f, -1.913347193e-02f, -1.915546089e-02f,
+-1.917741495e-02f, -1.919933407e-02f, -1.922121821e-02f, -1.924306734e-02f, -1.926488143e-02f, -1.928666044e-02f, -1.930840434e-02f, -1.933011309e-02f, -1.935178665e-02f, -1.937342500e-02f,
+-1.939502810e-02f, -1.941659591e-02f, -1.943812840e-02f, -1.945962554e-02f, -1.948108729e-02f, -1.950251361e-02f, -1.952390448e-02f, -1.954525985e-02f, -1.956657970e-02f, -1.958786400e-02f,
+-1.960911270e-02f, -1.963032577e-02f, -1.965150318e-02f, -1.967264490e-02f, -1.969375090e-02f, -1.971482113e-02f, -1.973585556e-02f, -1.975685418e-02f, -1.977781692e-02f, -1.979874378e-02f,
+-1.981963471e-02f, -1.984048968e-02f, -1.986130865e-02f, -1.988209160e-02f, -1.990283849e-02f, -1.992354929e-02f, -1.994422396e-02f, -1.996486248e-02f, -1.998546480e-02f, -2.000603091e-02f,
+-2.002656076e-02f, -2.004705432e-02f, -2.006751156e-02f, -2.008793244e-02f, -2.010831695e-02f, -2.012866503e-02f, -2.014897667e-02f, -2.016925183e-02f, -2.018949047e-02f, -2.020969257e-02f,
+-2.022985810e-02f, -2.024998701e-02f, -2.027007929e-02f, -2.029013489e-02f, -2.031015379e-02f, -2.033013595e-02f, -2.035008135e-02f, -2.036998995e-02f, -2.038986172e-02f, -2.040969663e-02f,
+-2.042949465e-02f, -2.044925575e-02f, -2.046897989e-02f, -2.048866705e-02f, -2.050831719e-02f, -2.052793028e-02f, -2.054750630e-02f, -2.056704521e-02f, -2.058654698e-02f, -2.060601158e-02f,
+-2.062543898e-02f, -2.064482915e-02f, -2.066418206e-02f, -2.068349768e-02f, -2.070277598e-02f, -2.072201693e-02f, -2.074122049e-02f, -2.076038664e-02f, -2.077951535e-02f, -2.079860659e-02f,
+-2.081766033e-02f, -2.083667654e-02f, -2.085565518e-02f, -2.087459623e-02f, -2.089349967e-02f, -2.091236545e-02f, -2.093119355e-02f, -2.094998395e-02f, -2.096873661e-02f, -2.098745150e-02f,
+-2.100612859e-02f, -2.102476786e-02f, -2.104336927e-02f, -2.106193280e-02f, -2.108045841e-02f, -2.109894609e-02f, -2.111739579e-02f, -2.113580750e-02f, -2.115418117e-02f, -2.117251680e-02f,
+-2.119081433e-02f, -2.120907375e-02f, -2.122729504e-02f, -2.124547815e-02f, -2.126362306e-02f, -2.128172975e-02f, -2.129979818e-02f, -2.131782833e-02f, -2.133582017e-02f, -2.135377367e-02f,
+-2.137168880e-02f, -2.138956554e-02f, -2.140740386e-02f, -2.142520373e-02f, -2.144296512e-02f, -2.146068801e-02f, -2.147837237e-02f, -2.149601816e-02f, -2.151362538e-02f, -2.153119397e-02f,
+-2.154872393e-02f, -2.156621522e-02f, -2.158366781e-02f, -2.160108168e-02f, -2.161845680e-02f, -2.163579315e-02f, -2.165309069e-02f, -2.167034941e-02f, -2.168756927e-02f, -2.170475025e-02f,
+-2.172189232e-02f, -2.173899545e-02f, -2.175605962e-02f, -2.177308481e-02f, -2.179007098e-02f, -2.180701811e-02f, -2.182392618e-02f, -2.184079515e-02f, -2.185762501e-02f, -2.187441572e-02f,
+-2.189116727e-02f, -2.190787961e-02f, -2.192455274e-02f, -2.194118662e-02f, -2.195778123e-02f, -2.197433655e-02f, -2.199085254e-02f, -2.200732918e-02f, -2.202376645e-02f, -2.204016432e-02f,
+-2.205652277e-02f, -2.207284177e-02f, -2.208912129e-02f, -2.210536132e-02f, -2.212156183e-02f, -2.213772279e-02f, -2.215384417e-02f, -2.216992596e-02f, -2.218596813e-02f, -2.220197066e-02f,
+-2.221793351e-02f, -2.223385667e-02f, -2.224974011e-02f, -2.226558380e-02f, -2.228138774e-02f, -2.229715187e-02f, -2.231287620e-02f, -2.232856069e-02f, -2.234420531e-02f, -2.235981005e-02f,
+-2.237537488e-02f, -2.239089977e-02f, -2.240638471e-02f, -2.242182966e-02f, -2.243723462e-02f, -2.245259954e-02f, -2.246792442e-02f, -2.248320922e-02f, -2.249845393e-02f, -2.251365851e-02f,
+-2.252882296e-02f, -2.254394724e-02f, -2.255903133e-02f, -2.257407520e-02f, -2.258907885e-02f, -2.260404224e-02f, -2.261896535e-02f, -2.263384816e-02f, -2.264869064e-02f, -2.266349278e-02f,
+-2.267825455e-02f, -2.269297593e-02f, -2.270765690e-02f, -2.272229744e-02f, -2.273689751e-02f, -2.275145711e-02f, -2.276597621e-02f, -2.278045479e-02f, -2.279489282e-02f, -2.280929029e-02f,
+-2.282364717e-02f, -2.283796345e-02f, -2.285223909e-02f, -2.286647408e-02f, -2.288066840e-02f, -2.289482203e-02f, -2.290893494e-02f, -2.292300712e-02f, -2.293703854e-02f, -2.295102919e-02f,
+-2.296497904e-02f, -2.297888806e-02f, -2.299275625e-02f, -2.300658358e-02f, -2.302037003e-02f, -2.303411557e-02f, -2.304782020e-02f, -2.306148388e-02f, -2.307510661e-02f, -2.308868835e-02f,
+-2.310222908e-02f, -2.311572880e-02f, -2.312918747e-02f, -2.314260508e-02f, -2.315598161e-02f, -2.316931704e-02f, -2.318261135e-02f, -2.319586452e-02f, -2.320907652e-02f, -2.322224735e-02f,
+-2.323537698e-02f, -2.324846538e-02f, -2.326151256e-02f, -2.327451847e-02f, -2.328748311e-02f, -2.330040645e-02f, -2.331328849e-02f, -2.332612918e-02f, -2.333892853e-02f, -2.335168651e-02f,
+-2.336440310e-02f, -2.337707828e-02f, -2.338971203e-02f, -2.340230434e-02f, -2.341485519e-02f, -2.342736456e-02f, -2.343983243e-02f, -2.345225878e-02f, -2.346464360e-02f, -2.347698686e-02f,
+-2.348928855e-02f, -2.350154865e-02f, -2.351376715e-02f, -2.352594402e-02f, -2.353807925e-02f, -2.355017283e-02f, -2.356222472e-02f, -2.357423492e-02f, -2.358620341e-02f, -2.359813017e-02f,
+-2.361001518e-02f, -2.362185843e-02f, -2.363365990e-02f, -2.364541957e-02f, -2.365713743e-02f, -2.366881346e-02f, -2.368044764e-02f, -2.369203995e-02f, -2.370359039e-02f, -2.371509893e-02f,
+-2.372656555e-02f, -2.373799024e-02f, -2.374937299e-02f, -2.376071378e-02f, -2.377201258e-02f, -2.378326939e-02f, -2.379448419e-02f, -2.380565697e-02f, -2.381678770e-02f, -2.382787637e-02f,
+-2.383892297e-02f, -2.384992747e-02f, -2.386088988e-02f, -2.387181016e-02f, -2.388268830e-02f, -2.389352430e-02f, -2.390431812e-02f, -2.391506977e-02f, -2.392577922e-02f, -2.393644645e-02f,
+-2.394707146e-02f, -2.395765423e-02f, -2.396819474e-02f, -2.397869298e-02f, -2.398914893e-02f, -2.399956258e-02f, -2.400993391e-02f, -2.402026292e-02f, -2.403054958e-02f, -2.404079388e-02f,
+-2.405099581e-02f, -2.406115536e-02f, -2.407127250e-02f, -2.408134723e-02f, -2.409137953e-02f, -2.410136938e-02f, -2.411131678e-02f, -2.412122171e-02f, -2.413108416e-02f, -2.414090410e-02f,
+-2.415068154e-02f, -2.416041645e-02f, -2.417010883e-02f, -2.417975865e-02f, -2.418936591e-02f, -2.419893059e-02f, -2.420845269e-02f, -2.421793218e-02f, -2.422736905e-02f, -2.423676329e-02f,
+-2.424611490e-02f, -2.425542384e-02f, -2.426469013e-02f, -2.427391373e-02f, -2.428309464e-02f, -2.429223284e-02f, -2.430132833e-02f, -2.431038109e-02f, -2.431939111e-02f, -2.432835838e-02f,
+-2.433728288e-02f, -2.434616461e-02f, -2.435500354e-02f, -2.436379968e-02f, -2.437255300e-02f, -2.438126350e-02f, -2.438993117e-02f, -2.439855599e-02f, -2.440713795e-02f, -2.441567704e-02f,
+-2.442417325e-02f, -2.443262656e-02f, -2.444103698e-02f, -2.444940448e-02f, -2.445772905e-02f, -2.446601069e-02f, -2.447424939e-02f, -2.448244512e-02f, -2.449059789e-02f, -2.449870768e-02f,
+-2.450677448e-02f, -2.451479828e-02f, -2.452277907e-02f, -2.453071684e-02f, -2.453861158e-02f, -2.454646328e-02f, -2.455427193e-02f, -2.456203752e-02f, -2.456976004e-02f, -2.457743948e-02f,
+-2.458507582e-02f, -2.459266907e-02f, -2.460021921e-02f, -2.460772623e-02f, -2.461519013e-02f, -2.462261088e-02f, -2.462998849e-02f, -2.463732294e-02f, -2.464461423e-02f, -2.465186234e-02f,
+-2.465906727e-02f, -2.466622901e-02f, -2.467334754e-02f, -2.468042287e-02f, -2.468745498e-02f, -2.469444386e-02f, -2.470138950e-02f, -2.470829190e-02f, -2.471515105e-02f, -2.472196694e-02f,
+-2.472873956e-02f, -2.473546890e-02f, -2.474215495e-02f, -2.474879772e-02f, -2.475539718e-02f, -2.476195333e-02f, -2.476846616e-02f, -2.477493567e-02f, -2.478136185e-02f, -2.478774469e-02f,
+-2.479408418e-02f, -2.480038031e-02f, -2.480663309e-02f, -2.481284249e-02f, -2.481900852e-02f, -2.482513116e-02f, -2.483121041e-02f, -2.483724627e-02f, -2.484323872e-02f, -2.484918776e-02f,
+-2.485509338e-02f, -2.486095557e-02f, -2.486677434e-02f, -2.487254966e-02f, -2.487828155e-02f, -2.488396998e-02f, -2.488961495e-02f, -2.489521646e-02f, -2.490077450e-02f, -2.490628907e-02f,
+-2.491176015e-02f, -2.491718775e-02f, -2.492257185e-02f, -2.492791246e-02f, -2.493320956e-02f, -2.493846315e-02f, -2.494367323e-02f, -2.494883978e-02f, -2.495396280e-02f, -2.495904230e-02f,
+-2.496407826e-02f, -2.496907067e-02f, -2.497401954e-02f, -2.497892486e-02f, -2.498378661e-02f, -2.498860481e-02f, -2.499337944e-02f, -2.499811050e-02f, -2.500279798e-02f, -2.500744188e-02f,
+-2.501204219e-02f, -2.501659892e-02f, -2.502111205e-02f, -2.502558158e-02f, -2.503000751e-02f, -2.503438984e-02f, -2.503872855e-02f, -2.504302365e-02f, -2.504727513e-02f, -2.505148299e-02f,
+-2.505564722e-02f, -2.505976782e-02f, -2.506384479e-02f, -2.506787813e-02f, -2.507186782e-02f, -2.507581387e-02f, -2.507971627e-02f, -2.508357502e-02f, -2.508739012e-02f, -2.509116157e-02f,
+-2.509488935e-02f, -2.509857348e-02f, -2.510221394e-02f, -2.510581073e-02f, -2.510936385e-02f, -2.511287330e-02f, -2.511633907e-02f, -2.511976117e-02f, -2.512313958e-02f, -2.512647431e-02f,
+-2.512976536e-02f, -2.513301272e-02f, -2.513621640e-02f, -2.513937638e-02f, -2.514249267e-02f, -2.514556527e-02f, -2.514859417e-02f, -2.515157937e-02f, -2.515452087e-02f, -2.515741867e-02f,
+-2.516027277e-02f, -2.516308317e-02f, -2.516584985e-02f, -2.516857284e-02f, -2.517125211e-02f, -2.517388768e-02f, -2.517647954e-02f, -2.517902769e-02f, -2.518153212e-02f, -2.518399284e-02f,
+-2.518640985e-02f, -2.518878315e-02f, -2.519111273e-02f, -2.519339860e-02f, -2.519564076e-02f, -2.519783919e-02f, -2.519999392e-02f, -2.520210492e-02f, -2.520417221e-02f, -2.520619579e-02f,
+-2.520817565e-02f, -2.521011179e-02f, -2.521200422e-02f, -2.521385293e-02f, -2.521565793e-02f, -2.521741921e-02f, -2.521913678e-02f, -2.522081064e-02f, -2.522244078e-02f, -2.522402722e-02f,
+-2.522556994e-02f, -2.522706895e-02f, -2.522852425e-02f, -2.522993584e-02f, -2.523130373e-02f, -2.523262791e-02f, -2.523390838e-02f, -2.523514515e-02f, -2.523633822e-02f, -2.523748759e-02f,
+-2.523859326e-02f, -2.523965523e-02f, -2.524067351e-02f, -2.524164809e-02f, -2.524257898e-02f, -2.524346618e-02f, -2.524430969e-02f, -2.524510952e-02f, -2.524586566e-02f, -2.524657813e-02f,
+-2.524724691e-02f, -2.524787201e-02f, -2.524845344e-02f, -2.524899120e-02f, -2.524948529e-02f, -2.524993571e-02f, -2.525034247e-02f, -2.525070557e-02f, -2.525102501e-02f, -2.525130079e-02f,
+-2.525153292e-02f, -2.525172141e-02f, -2.525186624e-02f, -2.525196744e-02f, -2.525202499e-02f, -2.525203891e-02f, -2.525200920e-02f, -2.525193586e-02f, -2.525181889e-02f, -2.525165831e-02f,
+-2.525145410e-02f, -2.525120628e-02f, -2.525091486e-02f, -2.525057982e-02f, -2.525020119e-02f, -2.524977896e-02f, -2.524931313e-02f, -2.524880372e-02f, -2.524825072e-02f, -2.524765414e-02f,
+-2.524701399e-02f, -2.524633026e-02f, -2.524560297e-02f, -2.524483212e-02f, -2.524401771e-02f, -2.524315975e-02f, -2.524225825e-02f, -2.524131320e-02f, -2.524032462e-02f, -2.523929251e-02f,
+-2.523821687e-02f, -2.523709771e-02f, -2.523593503e-02f, -2.523472885e-02f, -2.523347916e-02f, -2.523218598e-02f, -2.523084930e-02f, -2.522946914e-02f, -2.522804549e-02f, -2.522657837e-02f,
+-2.522506778e-02f, -2.522351373e-02f, -2.522191623e-02f, -2.522027527e-02f, -2.521859087e-02f, -2.521686304e-02f, -2.521509177e-02f, -2.521327708e-02f, -2.521141897e-02f, -2.520951745e-02f,
+-2.520757252e-02f, -2.520558420e-02f, -2.520355249e-02f, -2.520147739e-02f, -2.519935892e-02f, -2.519719708e-02f, -2.519499188e-02f, -2.519274333e-02f, -2.519045142e-02f, -2.518811618e-02f,
+-2.518573761e-02f, -2.518331571e-02f, -2.518085049e-02f, -2.517834197e-02f, -2.517579014e-02f, -2.517319502e-02f, -2.517055662e-02f, -2.516787494e-02f, -2.516514999e-02f, -2.516238178e-02f,
+-2.515957031e-02f, -2.515671560e-02f, -2.515381766e-02f, -2.515087649e-02f, -2.514789210e-02f, -2.514486450e-02f, -2.514179369e-02f, -2.513867970e-02f, -2.513552252e-02f, -2.513232217e-02f,
+-2.512907865e-02f, -2.512579197e-02f, -2.512246215e-02f, -2.511908918e-02f, -2.511567309e-02f, -2.511221388e-02f, -2.510871156e-02f, -2.510516613e-02f, -2.510157762e-02f, -2.509794603e-02f,
+-2.509427136e-02f, -2.509055363e-02f, -2.508679285e-02f, -2.508298903e-02f, -2.507914217e-02f, -2.507525229e-02f, -2.507131940e-02f, -2.506734351e-02f, -2.506332463e-02f, -2.505926277e-02f,
+-2.505515794e-02f, -2.505101014e-02f, -2.504681940e-02f, -2.504258572e-02f, -2.503830911e-02f, -2.503398959e-02f, -2.502962716e-02f, -2.502522183e-02f, -2.502077362e-02f, -2.501628254e-02f,
+-2.501174860e-02f, -2.500717180e-02f, -2.500255217e-02f, -2.499788971e-02f, -2.499318443e-02f, -2.498843635e-02f, -2.498364548e-02f, -2.497881182e-02f, -2.497393540e-02f, -2.496901622e-02f,
+-2.496405429e-02f, -2.495904963e-02f, -2.495400225e-02f, -2.494891216e-02f, -2.494377937e-02f, -2.493860390e-02f, -2.493338575e-02f, -2.492812495e-02f, -2.492282150e-02f, -2.491747541e-02f,
+-2.491208670e-02f, -2.490665538e-02f, -2.490118147e-02f, -2.489566497e-02f, -2.489010590e-02f, -2.488450427e-02f, -2.487886010e-02f, -2.487317340e-02f, -2.486744418e-02f, -2.486167245e-02f,
+-2.485585824e-02f, -2.485000154e-02f, -2.484410238e-02f, -2.483816077e-02f, -2.483217672e-02f, -2.482615025e-02f, -2.482008137e-02f, -2.481397009e-02f, -2.480781643e-02f, -2.480162040e-02f,
+-2.479538202e-02f, -2.478910130e-02f, -2.478277826e-02f, -2.477641290e-02f, -2.477000525e-02f, -2.476355531e-02f, -2.475706311e-02f, -2.475052866e-02f, -2.474395196e-02f, -2.473733304e-02f,
+-2.473067192e-02f, -2.472396860e-02f, -2.471722310e-02f, -2.471043544e-02f, -2.470360563e-02f, -2.469673368e-02f, -2.468981962e-02f, -2.468286345e-02f, -2.467586520e-02f, -2.466882487e-02f,
+-2.466174249e-02f, -2.465461807e-02f, -2.464745162e-02f, -2.464024316e-02f, -2.463299271e-02f, -2.462570028e-02f, -2.461836589e-02f, -2.461098955e-02f, -2.460357128e-02f, -2.459611110e-02f,
+-2.458860902e-02f, -2.458106506e-02f, -2.457347924e-02f, -2.456585157e-02f, -2.455818207e-02f, -2.455047075e-02f, -2.454271763e-02f, -2.453492273e-02f, -2.452708607e-02f, -2.451920766e-02f,
+-2.451128752e-02f, -2.450332566e-02f, -2.449532211e-02f, -2.448727688e-02f, -2.447918998e-02f, -2.447106144e-02f, -2.446289127e-02f, -2.445467950e-02f, -2.444642612e-02f, -2.443813118e-02f,
+-2.442979468e-02f, -2.442141663e-02f, -2.441299707e-02f, -2.440453600e-02f, -2.439603344e-02f, -2.438748942e-02f, -2.437890394e-02f, -2.437027704e-02f, -2.436160872e-02f, -2.435289900e-02f,
+-2.434414791e-02f, -2.433535546e-02f, -2.432652167e-02f, -2.431764656e-02f, -2.430873014e-02f, -2.429977244e-02f, -2.429077348e-02f, -2.428173326e-02f, -2.427265182e-02f, -2.426352918e-02f,
+-2.425436534e-02f, -2.424516033e-02f, -2.423591417e-02f, -2.422662688e-02f, -2.421729847e-02f, -2.420792897e-02f, -2.419851840e-02f, -2.418906677e-02f, -2.417957411e-02f, -2.417004044e-02f,
+-2.416046576e-02f, -2.415085012e-02f, -2.414119351e-02f, -2.413149597e-02f, -2.412175752e-02f, -2.411197817e-02f, -2.410215794e-02f, -2.409229686e-02f, -2.408239495e-02f, -2.407245222e-02f,
+-2.406246869e-02f, -2.405244440e-02f, -2.404237935e-02f, -2.403227356e-02f, -2.402212707e-02f, -2.401193988e-02f, -2.400171203e-02f, -2.399144352e-02f, -2.398113439e-02f, -2.397078465e-02f,
+-2.396039432e-02f, -2.394996343e-02f, -2.393949200e-02f, -2.392898004e-02f, -2.391842759e-02f, -2.390783465e-02f, -2.389720126e-02f, -2.388652742e-02f, -2.387581318e-02f, -2.386505854e-02f,
+-2.385426353e-02f, -2.384342818e-02f, -2.383255249e-02f, -2.382163650e-02f, -2.381068023e-02f, -2.379968369e-02f, -2.378864692e-02f, -2.377756993e-02f, -2.376645275e-02f, -2.375529539e-02f,
+-2.374409789e-02f, -2.373286026e-02f, -2.372158252e-02f, -2.371026470e-02f, -2.369890683e-02f, -2.368750892e-02f, -2.367607099e-02f, -2.366459308e-02f, -2.365307519e-02f, -2.364151737e-02f,
+-2.362991962e-02f, -2.361828198e-02f, -2.360660446e-02f, -2.359488709e-02f, -2.358312990e-02f, -2.357133289e-02f, -2.355949611e-02f, -2.354761958e-02f, -2.353570330e-02f, -2.352374732e-02f,
+-2.351175166e-02f, -2.349971633e-02f, -2.348764136e-02f, -2.347552678e-02f, -2.346337261e-02f, -2.345117888e-02f, -2.343894560e-02f, -2.342667281e-02f, -2.341436052e-02f, -2.340200877e-02f,
+-2.338961757e-02f, -2.337718695e-02f, -2.336471694e-02f, -2.335220756e-02f, -2.333965883e-02f, -2.332707079e-02f, -2.331444344e-02f, -2.330177683e-02f, -2.328907097e-02f, -2.327632589e-02f,
+-2.326354161e-02f, -2.325071817e-02f, -2.323785558e-02f, -2.322495387e-02f, -2.321201306e-02f, -2.319903319e-02f, -2.318601428e-02f, -2.317295634e-02f, -2.315985942e-02f, -2.314672352e-02f,
+-2.313354869e-02f, -2.312033494e-02f, -2.310708231e-02f, -2.309379081e-02f, -2.308046048e-02f, -2.306709133e-02f, -2.305368340e-02f, -2.304023671e-02f, -2.302675129e-02f, -2.301322717e-02f,
+-2.299966436e-02f, -2.298606291e-02f, -2.297242283e-02f, -2.295874414e-02f, -2.294502689e-02f, -2.293127109e-02f, -2.291747677e-02f, -2.290364396e-02f, -2.288977268e-02f, -2.287586297e-02f,
+-2.286191484e-02f, -2.284792834e-02f, -2.283390347e-02f, -2.281984027e-02f, -2.280573878e-02f, -2.279159900e-02f, -2.277742099e-02f, -2.276320475e-02f, -2.274895032e-02f, -2.273465772e-02f,
+-2.272032699e-02f, -2.270595815e-02f, -2.269155123e-02f, -2.267710625e-02f, -2.266262325e-02f, -2.264810225e-02f, -2.263354329e-02f, -2.261894638e-02f, -2.260431156e-02f, -2.258963885e-02f,
+-2.257492829e-02f, -2.256017990e-02f, -2.254539372e-02f, -2.253056976e-02f, -2.251570806e-02f, -2.250080865e-02f, -2.248587155e-02f, -2.247089679e-02f, -2.245588441e-02f, -2.244083443e-02f,
+-2.242574689e-02f, -2.241062180e-02f, -2.239545920e-02f, -2.238025912e-02f, -2.236502159e-02f, -2.234974663e-02f, -2.233443428e-02f, -2.231908457e-02f, -2.230369752e-02f, -2.228827316e-02f,
+-2.227281153e-02f, -2.225731265e-02f, -2.224177656e-02f, -2.222620328e-02f, -2.221059284e-02f, -2.219494528e-02f, -2.217926062e-02f, -2.216353889e-02f, -2.214778013e-02f, -2.213198435e-02f,
+-2.211615161e-02f, -2.210028191e-02f, -2.208437530e-02f, -2.206843181e-02f, -2.205245146e-02f, -2.203643428e-02f, -2.202038032e-02f, -2.200428958e-02f, -2.198816212e-02f, -2.197199795e-02f,
+-2.195579712e-02f, -2.193955964e-02f, -2.192328556e-02f, -2.190697489e-02f, -2.189062768e-02f, -2.187424395e-02f, -2.185782374e-02f, -2.184136708e-02f, -2.182487399e-02f, -2.180834451e-02f,
+-2.179177868e-02f, -2.177517651e-02f, -2.175853805e-02f, -2.174186333e-02f, -2.172515237e-02f, -2.170840521e-02f, -2.169162188e-02f, -2.167480241e-02f, -2.165794684e-02f, -2.164105519e-02f,
+-2.162412750e-02f, -2.160716381e-02f, -2.159016413e-02f, -2.157312851e-02f, -2.155605698e-02f, -2.153894957e-02f, -2.152180630e-02f, -2.150462723e-02f, -2.148741236e-02f, -2.147016175e-02f,
+-2.145287542e-02f, -2.143555341e-02f, -2.141819574e-02f, -2.140080245e-02f, -2.138337358e-02f, -2.136590915e-02f, -2.134840920e-02f, -2.133087376e-02f, -2.131330287e-02f, -2.129569655e-02f,
+-2.127805485e-02f, -2.126037779e-02f, -2.124266541e-02f, -2.122491774e-02f, -2.120713481e-02f, -2.118931667e-02f, -2.117146333e-02f, -2.115357484e-02f, -2.113565123e-02f, -2.111769253e-02f,
+-2.109969878e-02f, -2.108167001e-02f, -2.106360626e-02f, -2.104550755e-02f, -2.102737393e-02f, -2.100920542e-02f, -2.099100206e-02f, -2.097276389e-02f, -2.095449093e-02f, -2.093618323e-02f,
+-2.091784082e-02f, -2.089946373e-02f, -2.088105200e-02f, -2.086260565e-02f, -2.084412474e-02f, -2.082560928e-02f, -2.080705932e-02f, -2.078847489e-02f, -2.076985602e-02f, -2.075120275e-02f,
+-2.073251512e-02f, -2.071379316e-02f, -2.069503690e-02f, -2.067624638e-02f, -2.065742163e-02f, -2.063856270e-02f, -2.061966961e-02f, -2.060074240e-02f, -2.058178111e-02f, -2.056278577e-02f,
+-2.054375642e-02f, -2.052469309e-02f, -2.050559581e-02f, -2.048646463e-02f, -2.046729958e-02f, -2.044810070e-02f, -2.042886802e-02f, -2.040960157e-02f, -2.039030140e-02f, -2.037096753e-02f,
+-2.035160001e-02f, -2.033219887e-02f, -2.031276415e-02f, -2.029329588e-02f, -2.027379411e-02f, -2.025425885e-02f, -2.023469016e-02f, -2.021508807e-02f, -2.019545262e-02f, -2.017578383e-02f,
+-2.015608176e-02f, -2.013634643e-02f, -2.011657788e-02f, -2.009677615e-02f, -2.007694128e-02f, -2.005707329e-02f, -2.003717224e-02f, -2.001723816e-02f, -1.999727107e-02f, -1.997727103e-02f,
+-1.995723806e-02f, -1.993717221e-02f, -1.991707351e-02f, -1.989694200e-02f, -1.987677772e-02f, -1.985658070e-02f, -1.983635098e-02f, -1.981608860e-02f, -1.979579360e-02f, -1.977546601e-02f,
+-1.975510588e-02f, -1.973471323e-02f, -1.971428811e-02f, -1.969383055e-02f, -1.967334060e-02f, -1.965281829e-02f, -1.963226366e-02f, -1.961167674e-02f, -1.959105758e-02f, -1.957040622e-02f,
+-1.954972268e-02f, -1.952900702e-02f, -1.950825926e-02f, -1.948747945e-02f, -1.946666762e-02f, -1.944582382e-02f, -1.942494808e-02f, -1.940404044e-02f, -1.938310093e-02f, -1.936212961e-02f,
+-1.934112650e-02f, -1.932009165e-02f, -1.929902509e-02f, -1.927792686e-02f, -1.925679701e-02f, -1.923563556e-02f, -1.921444257e-02f, -1.919321806e-02f, -1.917196209e-02f, -1.915067468e-02f,
+-1.912935587e-02f, -1.910800571e-02f, -1.908662424e-02f, -1.906521149e-02f, -1.904376751e-02f, -1.902229233e-02f, -1.900078599e-02f, -1.897924853e-02f, -1.895768000e-02f, -1.893608042e-02f,
+-1.891444985e-02f, -1.889278832e-02f, -1.887109587e-02f, -1.884937255e-02f, -1.882761838e-02f, -1.880583341e-02f, -1.878401769e-02f, -1.876217125e-02f, -1.874029413e-02f, -1.871838637e-02f,
+-1.869644801e-02f, -1.867447909e-02f, -1.865247966e-02f, -1.863044974e-02f, -1.860838940e-02f, -1.858629865e-02f, -1.856417755e-02f, -1.854202613e-02f, -1.851984444e-02f, -1.849763252e-02f,
+-1.847539040e-02f, -1.845311813e-02f, -1.843081575e-02f, -1.840848330e-02f, -1.838612082e-02f, -1.836372835e-02f, -1.834130593e-02f, -1.831885360e-02f, -1.829637141e-02f, -1.827385940e-02f,
+-1.825131760e-02f, -1.822874606e-02f, -1.820614482e-02f, -1.818351392e-02f, -1.816085341e-02f, -1.813816331e-02f, -1.811544368e-02f, -1.809269456e-02f, -1.806991599e-02f, -1.804710801e-02f,
+-1.802427065e-02f, -1.800140398e-02f, -1.797850801e-02f, -1.795558281e-02f, -1.793262840e-02f, -1.790964483e-02f, -1.788663215e-02f, -1.786359039e-02f, -1.784051960e-02f, -1.781741982e-02f,
+-1.779429109e-02f, -1.777113345e-02f, -1.774794695e-02f, -1.772473163e-02f, -1.770148752e-02f, -1.767821468e-02f, -1.765491315e-02f, -1.763158296e-02f, -1.760822416e-02f, -1.758483680e-02f,
+-1.756142091e-02f, -1.753797654e-02f, -1.751450373e-02f, -1.749100252e-02f, -1.746747296e-02f, -1.744391509e-02f, -1.742032895e-02f, -1.739671459e-02f, -1.737307204e-02f, -1.734940136e-02f,
+-1.732570257e-02f, -1.730197574e-02f, -1.727822090e-02f, -1.725443809e-02f, -1.723062736e-02f, -1.720678875e-02f, -1.718292230e-02f, -1.715902806e-02f, -1.713510607e-02f, -1.711115637e-02f,
+-1.708717901e-02f, -1.706317404e-02f, -1.703914148e-02f, -1.701508140e-02f, -1.699099383e-02f, -1.696687881e-02f, -1.694273639e-02f, -1.691856662e-02f, -1.689436953e-02f, -1.687014518e-02f,
+-1.684589360e-02f, -1.682161484e-02f, -1.679730894e-02f, -1.677297595e-02f, -1.674861591e-02f, -1.672422887e-02f, -1.669981487e-02f, -1.667537395e-02f, -1.665090616e-02f, -1.662641154e-02f,
+-1.660189014e-02f, -1.657734200e-02f, -1.655276717e-02f, -1.652816569e-02f, -1.650353760e-02f, -1.647888295e-02f, -1.645420179e-02f, -1.642949416e-02f, -1.640476010e-02f, -1.637999966e-02f,
+-1.635521289e-02f, -1.633039982e-02f, -1.630556050e-02f, -1.628069499e-02f, -1.625580331e-02f, -1.623088553e-02f, -1.620594168e-02f, -1.618097180e-02f, -1.615597596e-02f, -1.613095417e-02f,
+-1.610590651e-02f, -1.608083300e-02f, -1.605573370e-02f, -1.603060865e-02f, -1.600545789e-02f, -1.598028147e-02f, -1.595507944e-02f, -1.592985185e-02f, -1.590459872e-02f, -1.587932013e-02f,
+-1.585401610e-02f, -1.582868668e-02f, -1.580333193e-02f, -1.577795188e-02f, -1.575254658e-02f, -1.572711608e-02f, -1.570166043e-02f, -1.567617966e-02f, -1.565067383e-02f, -1.562514298e-02f,
+-1.559958715e-02f, -1.557400640e-02f, -1.554840077e-02f, -1.552277031e-02f, -1.549711506e-02f, -1.547143506e-02f, -1.544573037e-02f, -1.542000103e-02f, -1.539424709e-02f, -1.536846859e-02f,
+-1.534266558e-02f, -1.531683810e-02f, -1.529098621e-02f, -1.526510995e-02f, -1.523920937e-02f, -1.521328450e-02f, -1.518733541e-02f, -1.516136213e-02f, -1.513536472e-02f, -1.510934321e-02f,
+-1.508329766e-02f, -1.505722812e-02f, -1.503113462e-02f, -1.500501722e-02f, -1.497887596e-02f, -1.495271090e-02f, -1.492652207e-02f, -1.490030953e-02f, -1.487407332e-02f, -1.484781349e-02f,
+-1.482153009e-02f, -1.479522315e-02f, -1.476889275e-02f, -1.474253890e-02f, -1.471616168e-02f, -1.468976111e-02f, -1.466333726e-02f, -1.463689017e-02f, -1.461041988e-02f, -1.458392644e-02f,
+-1.455740990e-02f, -1.453087031e-02f, -1.450430772e-02f, -1.447772217e-02f, -1.445111371e-02f, -1.442448239e-02f, -1.439782826e-02f, -1.437115136e-02f, -1.434445174e-02f, -1.431772945e-02f,
+-1.429098454e-02f, -1.426421705e-02f, -1.423742704e-02f, -1.421061455e-02f, -1.418377963e-02f, -1.415692233e-02f, -1.413004270e-02f, -1.410314078e-02f, -1.407621662e-02f, -1.404927027e-02f,
+-1.402230178e-02f, -1.399531119e-02f, -1.396829857e-02f, -1.394126394e-02f, -1.391420737e-02f, -1.388712890e-02f, -1.386002858e-02f, -1.383290645e-02f, -1.380576257e-02f, -1.377859699e-02f,
+-1.375140975e-02f, -1.372420090e-02f, -1.369697049e-02f, -1.366971857e-02f, -1.364244519e-02f, -1.361515039e-02f, -1.358783423e-02f, -1.356049676e-02f, -1.353313802e-02f, -1.350575806e-02f,
+-1.347835693e-02f, -1.345093468e-02f, -1.342349136e-02f, -1.339602702e-02f, -1.336854170e-02f, -1.334103546e-02f, -1.331350835e-02f, -1.328596041e-02f, -1.325839170e-02f, -1.323080225e-02f,
+-1.320319213e-02f, -1.317556138e-02f, -1.314791005e-02f, -1.312023819e-02f, -1.309254585e-02f, -1.306483308e-02f, -1.303709993e-02f, -1.300934645e-02f, -1.298157268e-02f, -1.295377868e-02f,
+-1.292596449e-02f, -1.289813017e-02f, -1.287027577e-02f, -1.284240133e-02f, -1.281450691e-02f, -1.278659255e-02f, -1.275865830e-02f, -1.273070422e-02f, -1.270273035e-02f, -1.267473675e-02f,
+-1.264672346e-02f, -1.261869053e-02f, -1.259063802e-02f, -1.256256597e-02f, -1.253447443e-02f, -1.250636346e-02f, -1.247823310e-02f, -1.245008340e-02f, -1.242191442e-02f, -1.239372620e-02f,
+-1.236551880e-02f, -1.233729226e-02f, -1.230904663e-02f, -1.228078197e-02f, -1.225249832e-02f, -1.222419574e-02f, -1.219587427e-02f, -1.216753397e-02f, -1.213917488e-02f, -1.211079706e-02f,
+-1.208240056e-02f, -1.205398543e-02f, -1.202555171e-02f, -1.199709947e-02f, -1.196862874e-02f, -1.194013958e-02f, -1.191163204e-02f, -1.188310617e-02f, -1.185456203e-02f, -1.182599966e-02f,
+-1.179741911e-02f, -1.176882043e-02f, -1.174020368e-02f, -1.171156890e-02f, -1.168291615e-02f, -1.165424548e-02f, -1.162555694e-02f, -1.159685057e-02f, -1.156812643e-02f, -1.153938458e-02f,
+-1.151062506e-02f, -1.148184792e-02f, -1.145305321e-02f, -1.142424099e-02f, -1.139541130e-02f, -1.136656421e-02f, -1.133769975e-02f, -1.130881798e-02f, -1.127991895e-02f, -1.125100271e-02f,
+-1.122206932e-02f, -1.119311882e-02f, -1.116415127e-02f, -1.113516671e-02f, -1.110616520e-02f, -1.107714679e-02f, -1.104811154e-02f, -1.101905948e-02f, -1.098999069e-02f, -1.096090519e-02f,
+-1.093180306e-02f, -1.090268433e-02f, -1.087354906e-02f, -1.084439731e-02f, -1.081522911e-02f, -1.078604454e-02f, -1.075684363e-02f, -1.072762644e-02f, -1.069839302e-02f, -1.066914342e-02f,
+-1.063987769e-02f, -1.061059589e-02f, -1.058129807e-02f, -1.055198427e-02f, -1.052265456e-02f, -1.049330898e-02f, -1.046394759e-02f, -1.043457043e-02f, -1.040517756e-02f, -1.037576903e-02f,
+-1.034634489e-02f, -1.031690520e-02f, -1.028745000e-02f, -1.025797935e-02f, -1.022849331e-02f, -1.019899191e-02f, -1.016947522e-02f, -1.013994329e-02f, -1.011039617e-02f, -1.008083390e-02f,
+-1.005125655e-02f, -1.002166417e-02f, -9.992056807e-03f, -9.962434512e-03f, -9.932797340e-03f, -9.903145343e-03f, -9.873478573e-03f, -9.843797083e-03f, -9.814100924e-03f, -9.784390150e-03f,
+-9.754664813e-03f, -9.724924965e-03f, -9.695170659e-03f, -9.665401947e-03f, -9.635618882e-03f, -9.605821516e-03f, -9.576009902e-03f, -9.546184092e-03f, -9.516344139e-03f, -9.486490095e-03f,
+-9.456622014e-03f, -9.426739947e-03f, -9.396843948e-03f, -9.366934069e-03f, -9.337010364e-03f, -9.307072883e-03f, -9.277121681e-03f, -9.247156810e-03f, -9.217178323e-03f, -9.187186273e-03f,
+-9.157180712e-03f, -9.127161694e-03f, -9.097129271e-03f, -9.067083496e-03f, -9.037024422e-03f, -9.006952101e-03f, -8.976866588e-03f, -8.946767935e-03f, -8.916656194e-03f, -8.886531420e-03f,
+-8.856393664e-03f, -8.826242980e-03f, -8.796079420e-03f, -8.765903039e-03f, -8.735713889e-03f, -8.705512023e-03f, -8.675297494e-03f, -8.645070356e-03f, -8.614830661e-03f, -8.584578462e-03f,
+-8.554313814e-03f, -8.524036769e-03f, -8.493747380e-03f, -8.463445701e-03f, -8.433131785e-03f, -8.402805685e-03f, -8.372467454e-03f, -8.342117146e-03f, -8.311754814e-03f, -8.281380511e-03f,
+-8.250994291e-03f, -8.220596207e-03f, -8.190186313e-03f, -8.159764661e-03f, -8.129331306e-03f, -8.098886301e-03f, -8.068429699e-03f, -8.037961554e-03f, -8.007481918e-03f, -7.976990847e-03f,
+-7.946488393e-03f, -7.915974609e-03f, -7.885449550e-03f, -7.854913268e-03f, -7.824365818e-03f, -7.793807253e-03f, -7.763237627e-03f, -7.732656993e-03f, -7.702065405e-03f, -7.671462916e-03f,
+-7.640849580e-03f, -7.610225452e-03f, -7.579590584e-03f, -7.548945030e-03f, -7.518288844e-03f, -7.487622080e-03f, -7.456944792e-03f, -7.426257033e-03f, -7.395558857e-03f, -7.364850317e-03f,
+-7.334131469e-03f, -7.303402365e-03f, -7.272663059e-03f, -7.241913605e-03f, -7.211154058e-03f, -7.180384470e-03f, -7.149604896e-03f, -7.118815390e-03f, -7.088016005e-03f, -7.057206796e-03f,
+-7.026387816e-03f, -6.995559120e-03f, -6.964720761e-03f, -6.933872793e-03f, -6.903015271e-03f, -6.872148248e-03f, -6.841271779e-03f, -6.810385917e-03f, -6.779490716e-03f, -6.748586231e-03f,
+-6.717672515e-03f, -6.686749623e-03f, -6.655817608e-03f, -6.624876526e-03f, -6.593926429e-03f, -6.562967372e-03f, -6.531999409e-03f, -6.501022595e-03f, -6.470036983e-03f, -6.439042628e-03f,
+-6.408039583e-03f, -6.377027904e-03f, -6.346007643e-03f, -6.314978856e-03f, -6.283941596e-03f, -6.252895918e-03f, -6.221841876e-03f, -6.190779525e-03f, -6.159708918e-03f, -6.128630110e-03f,
+-6.097543154e-03f, -6.066448107e-03f, -6.035345020e-03f, -6.004233950e-03f, -5.973114950e-03f, -5.941988075e-03f, -5.910853378e-03f, -5.879710915e-03f, -5.848560739e-03f, -5.817402906e-03f,
+-5.786237468e-03f, -5.755064482e-03f, -5.723884000e-03f, -5.692696078e-03f, -5.661500770e-03f, -5.630298130e-03f, -5.599088213e-03f, -5.567871074e-03f, -5.536646765e-03f, -5.505415343e-03f,
+-5.474176862e-03f, -5.442931375e-03f, -5.411678938e-03f, -5.380419604e-03f, -5.349153429e-03f, -5.317880467e-03f, -5.286600773e-03f, -5.255314400e-03f, -5.224021404e-03f, -5.192721838e-03f,
+-5.161415758e-03f, -5.130103219e-03f, -5.098784273e-03f, -5.067458977e-03f, -5.036127384e-03f, -5.004789550e-03f, -4.973445528e-03f, -4.942095374e-03f, -4.910739141e-03f, -4.879376886e-03f,
+-4.848008661e-03f, -4.816634522e-03f, -4.785254523e-03f, -4.753868719e-03f, -4.722477165e-03f, -4.691079915e-03f, -4.659677024e-03f, -4.628268546e-03f, -4.596854536e-03f, -4.565435049e-03f,
+-4.534010140e-03f, -4.502579862e-03f, -4.471144271e-03f, -4.439703422e-03f, -4.408257368e-03f, -4.376806165e-03f, -4.345349867e-03f, -4.313888530e-03f, -4.282422207e-03f, -4.250950954e-03f,
+-4.219474825e-03f, -4.187993874e-03f, -4.156508157e-03f, -4.125017729e-03f, -4.093522643e-03f, -4.062022955e-03f, -4.030518720e-03f, -3.999009991e-03f, -3.967496824e-03f, -3.935979274e-03f,
+-3.904457395e-03f, -3.872931243e-03f, -3.841400871e-03f, -3.809866334e-03f, -3.778327688e-03f, -3.746784986e-03f, -3.715238285e-03f, -3.683687638e-03f, -3.652133100e-03f, -3.620574726e-03f,
+-3.589012571e-03f, -3.557446690e-03f, -3.525877137e-03f, -3.494303967e-03f, -3.462727235e-03f, -3.431146995e-03f, -3.399563303e-03f, -3.367976213e-03f, -3.336385780e-03f, -3.304792058e-03f,
+-3.273195104e-03f, -3.241594970e-03f, -3.209991712e-03f, -3.178385386e-03f, -3.146776044e-03f, -3.115163744e-03f, -3.083548538e-03f, -3.051930483e-03f, -3.020309632e-03f, -2.988686040e-03f,
+-2.957059763e-03f, -2.925430856e-03f, -2.893799372e-03f, -2.862165366e-03f, -2.830528895e-03f, -2.798890011e-03f, -2.767248771e-03f, -2.735605228e-03f, -2.703959438e-03f, -2.672311455e-03f,
+-2.640661335e-03f, -2.609009132e-03f, -2.577354900e-03f, -2.545698695e-03f, -2.514040571e-03f, -2.482380583e-03f, -2.450718787e-03f, -2.419055236e-03f, -2.387389985e-03f, -2.355723090e-03f,
+-2.324054604e-03f, -2.292384584e-03f, -2.260713083e-03f, -2.229040156e-03f, -2.197365859e-03f, -2.165690245e-03f, -2.134013370e-03f, -2.102335288e-03f, -2.070656055e-03f, -2.038975724e-03f,
+-2.007294351e-03f, -1.975611990e-03f, -1.943928697e-03f, -1.912244526e-03f, -1.880559531e-03f, -1.848873768e-03f, -1.817187290e-03f, -1.785500154e-03f, -1.753812413e-03f, -1.722124123e-03f,
+-1.690435338e-03f, -1.658746112e-03f, -1.627056501e-03f, -1.595366560e-03f, -1.563676342e-03f, -1.531985903e-03f, -1.500295297e-03f, -1.468604579e-03f, -1.436913804e-03f, -1.405223027e-03f,
+-1.373532302e-03f, -1.341841683e-03f, -1.310151226e-03f, -1.278460985e-03f, -1.246771015e-03f, -1.215081371e-03f, -1.183392107e-03f, -1.151703277e-03f, -1.120014937e-03f, -1.088327142e-03f,
+-1.056639945e-03f, -1.024953401e-03f, -9.932675654e-04f, -9.615824925e-04f, -9.298982368e-04f, -8.982148531e-04f, -8.665323959e-04f, -8.348509198e-04f, -8.031704793e-04f, -7.714911292e-04f,
+-7.398129239e-04f, -7.081359181e-04f, -6.764601664e-04f, -6.447857232e-04f, -6.131126431e-04f, -5.814409807e-04f, -5.497707906e-04f, -5.181021273e-04f, -4.864350452e-04f, -4.547695990e-04f,
+-4.231058432e-04f, -3.914438322e-04f, -3.597836205e-04f, -3.281252628e-04f, -2.964688133e-04f, -2.648143267e-04f, -2.331618574e-04f, -2.015114599e-04f, -1.698631885e-04f, -1.382170979e-04f,
+-1.065732423e-04f, -7.493167631e-05f, -4.329245426e-05f, -1.165563059e-05f, 1.997874028e-05f, 5.161060397e-05f, 8.323990608e-05f, 1.148665922e-04f, 1.464906080e-04f, 1.781118991e-04f,
+2.097304112e-04f, 2.413460898e-04f, 2.729588807e-04f, 3.045687296e-04f, 3.361755820e-04f, 3.677793837e-04f, 3.993800805e-04f, 4.309776179e-04f, 4.625719418e-04f, 4.941629979e-04f,
+5.257507318e-04f, 5.573350894e-04f, 5.889160164e-04f, 6.204934586e-04f, 6.520673617e-04f, 6.836376716e-04f, 7.152043340e-04f, 7.467672947e-04f, 7.783264997e-04f, 8.098818946e-04f,
+8.414334254e-04f, 8.729810379e-04f, 9.045246779e-04f, 9.360642914e-04f, 9.675998242e-04f, 9.991312223e-04f, 1.030658431e-03f, 1.062181398e-03f, 1.093700067e-03f, 1.125214385e-03f,
+1.156724298e-03f, 1.188229752e-03f, 1.219730693e-03f, 1.251227066e-03f, 1.282718819e-03f, 1.314205896e-03f, 1.345688244e-03f, 1.377165809e-03f, 1.408638537e-03f, 1.440106374e-03f,
+1.471569266e-03f, 1.503027159e-03f, 1.534480000e-03f, 1.565927734e-03f, 1.597370308e-03f, 1.628807667e-03f, 1.660239758e-03f, 1.691666527e-03f, 1.723087920e-03f, 1.754503884e-03f,
+1.785914364e-03f, 1.817319308e-03f, 1.848718660e-03f, 1.880112367e-03f, 1.911500376e-03f, 1.942882633e-03f, 1.974259084e-03f, 2.005629676e-03f, 2.036994354e-03f, 2.068353065e-03f,
+2.099705756e-03f, 2.131052373e-03f, 2.162392862e-03f, 2.193727169e-03f, 2.225055242e-03f, 2.256377025e-03f, 2.287692467e-03f, 2.319001513e-03f, 2.350304110e-03f, 2.381600204e-03f,
+2.412889742e-03f, 2.444172670e-03f, 2.475448935e-03f, 2.506718483e-03f, 2.537981262e-03f, 2.569237216e-03f, 2.600486294e-03f, 2.631728442e-03f, 2.662963606e-03f, 2.694191733e-03f,
+2.725412769e-03f, 2.756626662e-03f, 2.787833358e-03f, 2.819032803e-03f, 2.850224945e-03f, 2.881409730e-03f, 2.912587105e-03f, 2.943757017e-03f, 2.974919412e-03f, 3.006074237e-03f,
+3.037221440e-03f, 3.068360966e-03f, 3.099492764e-03f, 3.130616779e-03f, 3.161732958e-03f, 3.192841250e-03f, 3.223941599e-03f, 3.255033954e-03f, 3.286118262e-03f, 3.317194469e-03f,
+3.348262522e-03f, 3.379322368e-03f, 3.410373955e-03f, 3.441417229e-03f, 3.472452138e-03f, 3.503478629e-03f, 3.534496648e-03f, 3.565506143e-03f, 3.596507061e-03f, 3.627499350e-03f,
+3.658482956e-03f, 3.689457826e-03f, 3.720423908e-03f, 3.751381149e-03f, 3.782329497e-03f, 3.813268898e-03f, 3.844199300e-03f, 3.875120651e-03f, 3.906032897e-03f, 3.936935986e-03f,
+3.967829865e-03f, 3.998714482e-03f, 4.029589784e-03f, 4.060455719e-03f, 4.091312234e-03f, 4.122159277e-03f, 4.152996794e-03f, 4.183824734e-03f, 4.214643045e-03f, 4.245451672e-03f,
+4.276250566e-03f, 4.307039672e-03f, 4.337818939e-03f, 4.368588313e-03f, 4.399347744e-03f, 4.430097178e-03f, 4.460836564e-03f, 4.491565848e-03f, 4.522284979e-03f, 4.552993905e-03f,
+4.583692573e-03f, 4.614380931e-03f, 4.645058928e-03f, 4.675726510e-03f, 4.706383625e-03f, 4.737030223e-03f, 4.767666250e-03f, 4.798291654e-03f, 4.828906384e-03f, 4.859510388e-03f,
+4.890103613e-03f, 4.920686007e-03f, 4.951257520e-03f, 4.981818098e-03f, 5.012367689e-03f, 5.042906243e-03f, 5.073433707e-03f, 5.103950029e-03f, 5.134455158e-03f, 5.164949042e-03f,
+5.195431628e-03f, 5.225902866e-03f, 5.256362703e-03f, 5.286811088e-03f, 5.317247970e-03f, 5.347673296e-03f, 5.378087015e-03f, 5.408489075e-03f, 5.438879426e-03f, 5.469258014e-03f,
+5.499624790e-03f, 5.529979700e-03f, 5.560322695e-03f, 5.590653722e-03f, 5.620972730e-03f, 5.651279668e-03f, 5.681574484e-03f, 5.711857127e-03f, 5.742127545e-03f, 5.772385688e-03f,
+5.802631504e-03f, 5.832864942e-03f, 5.863085950e-03f, 5.893294478e-03f, 5.923490474e-03f, 5.953673887e-03f, 5.983844666e-03f, 6.014002760e-03f, 6.044148118e-03f, 6.074280689e-03f,
+6.104400422e-03f, 6.134507266e-03f, 6.164601169e-03f, 6.194682081e-03f, 6.224749952e-03f, 6.254804730e-03f, 6.284846364e-03f, 6.314874803e-03f, 6.344889998e-03f, 6.374891896e-03f,
+6.404880448e-03f, 6.434855602e-03f, 6.464817308e-03f, 6.494765515e-03f, 6.524700172e-03f, 6.554621230e-03f, 6.584528636e-03f, 6.614422342e-03f, 6.644302296e-03f, 6.674168448e-03f,
+6.704020747e-03f, 6.733859142e-03f, 6.763683585e-03f, 6.793494023e-03f, 6.823290407e-03f, 6.853072687e-03f, 6.882840811e-03f, 6.912594731e-03f, 6.942334394e-03f, 6.972059753e-03f,
+7.001770755e-03f, 7.031467352e-03f, 7.061149492e-03f, 7.090817126e-03f, 7.120470204e-03f, 7.150108675e-03f, 7.179732490e-03f, 7.209341599e-03f, 7.238935952e-03f, 7.268515498e-03f,
+7.298080188e-03f, 7.327629972e-03f, 7.357164800e-03f, 7.386684623e-03f, 7.416189390e-03f, 7.445679053e-03f, 7.475153560e-03f, 7.504612863e-03f, 7.534056911e-03f, 7.563485656e-03f,
+7.592899047e-03f, 7.622297035e-03f, 7.651679571e-03f, 7.681046605e-03f, 7.710398087e-03f, 7.739733968e-03f, 7.769054199e-03f, 7.798358730e-03f, 7.827647511e-03f, 7.856920495e-03f,
+7.886177630e-03f, 7.915418869e-03f, 7.944644161e-03f, 7.973853458e-03f, 8.003046711e-03f, 8.032223869e-03f, 8.061384885e-03f, 8.090529709e-03f, 8.119658292e-03f, 8.148770585e-03f,
+8.177866539e-03f, 8.206946105e-03f, 8.236009235e-03f, 8.265055879e-03f, 8.294085988e-03f, 8.323099514e-03f, 8.352096408e-03f, 8.381076620e-03f, 8.410040104e-03f, 8.438986809e-03f,
+8.467916687e-03f, 8.496829690e-03f, 8.525725768e-03f, 8.554604874e-03f, 8.583466959e-03f, 8.612311974e-03f, 8.641139871e-03f, 8.669950601e-03f, 8.698744116e-03f, 8.727520368e-03f,
+8.756279309e-03f, 8.785020889e-03f, 8.813745062e-03f, 8.842451777e-03f, 8.871140989e-03f, 8.899812647e-03f, 8.928466705e-03f, 8.957103114e-03f, 8.985721826e-03f, 9.014322793e-03f,
+9.042905967e-03f, 9.071471299e-03f, 9.100018744e-03f, 9.128548251e-03f, 9.157059774e-03f, 9.185553264e-03f, 9.214028674e-03f, 9.242485957e-03f, 9.270925064e-03f, 9.299345947e-03f,
+9.327748560e-03f, 9.356132854e-03f, 9.384498782e-03f, 9.412846296e-03f, 9.441175350e-03f, 9.469485895e-03f, 9.497777884e-03f, 9.526051269e-03f, 9.554306004e-03f, 9.582542041e-03f,
+9.610759332e-03f, 9.638957831e-03f, 9.667137490e-03f, 9.695298263e-03f, 9.723440101e-03f, 9.751562958e-03f, 9.779666787e-03f, 9.807751541e-03f, 9.835817172e-03f, 9.863863635e-03f,
+9.891890881e-03f, 9.919898864e-03f, 9.947887537e-03f, 9.975856854e-03f, 1.000380677e-02f, 1.003173723e-02f, 1.005964820e-02f, 1.008753962e-02f, 1.011541145e-02f, 1.014326365e-02f,
+1.017109616e-02f, 1.019890895e-02f, 1.022670195e-02f, 1.025447514e-02f, 1.028222845e-02f, 1.030996185e-02f, 1.033767529e-02f, 1.036536872e-02f, 1.039304210e-02f, 1.042069537e-02f,
+1.044832850e-02f, 1.047594144e-02f, 1.050353414e-02f, 1.053110655e-02f, 1.055865863e-02f, 1.058619034e-02f, 1.061370162e-02f, 1.064119243e-02f, 1.066866273e-02f, 1.069611247e-02f,
+1.072354160e-02f, 1.075095008e-02f, 1.077833786e-02f, 1.080570490e-02f, 1.083305116e-02f, 1.086037657e-02f, 1.088768111e-02f, 1.091496472e-02f, 1.094222736e-02f, 1.096946898e-02f,
+1.099668954e-02f, 1.102388900e-02f, 1.105106730e-02f, 1.107822441e-02f, 1.110536027e-02f, 1.113247484e-02f, 1.115956808e-02f, 1.118663994e-02f, 1.121369038e-02f, 1.124071935e-02f,
+1.126772681e-02f, 1.129471271e-02f, 1.132167700e-02f, 1.134861965e-02f, 1.137554060e-02f, 1.140243982e-02f, 1.142931725e-02f, 1.145617286e-02f, 1.148300659e-02f, 1.150981841e-02f,
+1.153660827e-02f, 1.156337612e-02f, 1.159012192e-02f, 1.161684563e-02f, 1.164354720e-02f, 1.167022658e-02f, 1.169688374e-02f, 1.172351863e-02f, 1.175013120e-02f, 1.177672140e-02f,
+1.180328921e-02f, 1.182983456e-02f, 1.185635743e-02f, 1.188285775e-02f, 1.190933550e-02f, 1.193579062e-02f, 1.196222307e-02f, 1.198863281e-02f, 1.201501980e-02f, 1.204138398e-02f,
+1.206772532e-02f, 1.209404377e-02f, 1.212033929e-02f, 1.214661184e-02f, 1.217286137e-02f, 1.219908784e-02f, 1.222529120e-02f, 1.225147141e-02f, 1.227762843e-02f, 1.230376221e-02f,
+1.232987272e-02f, 1.235595991e-02f, 1.238202372e-02f, 1.240806413e-02f, 1.243408109e-02f, 1.246007456e-02f, 1.248604448e-02f, 1.251199083e-02f, 1.253791355e-02f, 1.256381261e-02f,
+1.258968796e-02f, 1.261553955e-02f, 1.264136735e-02f, 1.266717131e-02f, 1.269295139e-02f, 1.271870755e-02f, 1.274443974e-02f, 1.277014793e-02f, 1.279583206e-02f, 1.282149210e-02f,
+1.284712800e-02f, 1.287273973e-02f, 1.289832724e-02f, 1.292389048e-02f, 1.294942942e-02f, 1.297494401e-02f, 1.300043421e-02f, 1.302589998e-02f, 1.305134128e-02f, 1.307675806e-02f,
+1.310215029e-02f, 1.312751791e-02f, 1.315286090e-02f, 1.317817920e-02f, 1.320347278e-02f, 1.322874159e-02f, 1.325398559e-02f, 1.327920474e-02f, 1.330439900e-02f, 1.332956833e-02f,
+1.335471268e-02f, 1.337983202e-02f, 1.340492630e-02f, 1.342999548e-02f, 1.345503952e-02f, 1.348005838e-02f, 1.350505201e-02f, 1.353002038e-02f, 1.355496345e-02f, 1.357988117e-02f,
+1.360477351e-02f, 1.362964041e-02f, 1.365448185e-02f, 1.367929778e-02f, 1.370408815e-02f, 1.372885294e-02f, 1.375359209e-02f, 1.377830557e-02f, 1.380299334e-02f, 1.382765535e-02f,
+1.385229156e-02f, 1.387690194e-02f, 1.390148645e-02f, 1.392604503e-02f, 1.395057767e-02f, 1.397508430e-02f, 1.399956490e-02f, 1.402401942e-02f, 1.404844782e-02f, 1.407285006e-02f,
+1.409722610e-02f, 1.412157591e-02f, 1.414589944e-02f, 1.417019665e-02f, 1.419446750e-02f, 1.421871196e-02f, 1.424292998e-02f, 1.426712152e-02f, 1.429128654e-02f, 1.431542500e-02f,
+1.433953687e-02f, 1.436362211e-02f, 1.438768067e-02f, 1.441171251e-02f, 1.443571760e-02f, 1.445969589e-02f, 1.448364736e-02f, 1.450757195e-02f, 1.453146962e-02f, 1.455534035e-02f,
+1.457918409e-02f, 1.460300080e-02f, 1.462679044e-02f, 1.465055297e-02f, 1.467428836e-02f, 1.469799657e-02f, 1.472167755e-02f, 1.474533127e-02f, 1.476895768e-02f, 1.479255676e-02f,
+1.481612846e-02f, 1.483967275e-02f, 1.486318957e-02f, 1.488667891e-02f, 1.491014071e-02f, 1.493357494e-02f, 1.495698156e-02f, 1.498036054e-02f, 1.500371183e-02f, 1.502703539e-02f,
+1.505033120e-02f, 1.507359920e-02f, 1.509683937e-02f, 1.512005166e-02f, 1.514323604e-02f, 1.516639247e-02f, 1.518952090e-02f, 1.521262131e-02f, 1.523569366e-02f, 1.525873790e-02f,
+1.528175401e-02f, 1.530474193e-02f, 1.532770164e-02f, 1.535063310e-02f, 1.537353627e-02f, 1.539641111e-02f, 1.541925759e-02f, 1.544207566e-02f, 1.546486530e-02f, 1.548762646e-02f,
+1.551035910e-02f, 1.553306320e-02f, 1.555573871e-02f, 1.557838560e-02f, 1.560100382e-02f, 1.562359335e-02f, 1.564615414e-02f, 1.566868616e-02f, 1.569118937e-02f, 1.571366374e-02f,
+1.573610922e-02f, 1.575852579e-02f, 1.578091341e-02f, 1.580327203e-02f, 1.582560163e-02f, 1.584790216e-02f, 1.587017360e-02f, 1.589241589e-02f, 1.591462902e-02f, 1.593681294e-02f,
+1.595896762e-02f, 1.598109301e-02f, 1.600318909e-02f, 1.602525582e-02f, 1.604729316e-02f, 1.606930107e-02f, 1.609127953e-02f, 1.611322850e-02f, 1.613514793e-02f, 1.615703779e-02f,
+1.617889806e-02f, 1.620072869e-02f, 1.622252965e-02f, 1.624430089e-02f, 1.626604240e-02f, 1.628775413e-02f, 1.630943604e-02f, 1.633108811e-02f, 1.635271029e-02f, 1.637430256e-02f,
+1.639586487e-02f, 1.641739719e-02f, 1.643889949e-02f, 1.646037173e-02f, 1.648181388e-02f, 1.650322590e-02f, 1.652460776e-02f, 1.654595942e-02f, 1.656728086e-02f, 1.658857202e-02f,
+1.660983289e-02f, 1.663106342e-02f, 1.665226358e-02f, 1.667343334e-02f, 1.669457267e-02f, 1.671568152e-02f, 1.673675986e-02f, 1.675780767e-02f, 1.677882490e-02f, 1.679981153e-02f,
+1.682076752e-02f, 1.684169283e-02f, 1.686258743e-02f, 1.688345129e-02f, 1.690428437e-02f, 1.692508664e-02f, 1.694585807e-02f, 1.696659862e-02f, 1.698730827e-02f, 1.700798697e-02f,
+1.702863469e-02f, 1.704925140e-02f, 1.706983707e-02f, 1.709039167e-02f, 1.711091515e-02f, 1.713140749e-02f, 1.715186866e-02f, 1.717229861e-02f, 1.719269733e-02f, 1.721306477e-02f,
+1.723340091e-02f, 1.725370571e-02f, 1.727397913e-02f, 1.729422115e-02f, 1.731443173e-02f, 1.733461084e-02f, 1.735475846e-02f, 1.737487453e-02f, 1.739495904e-02f, 1.741501195e-02f,
+1.743503323e-02f, 1.745502285e-02f, 1.747498077e-02f, 1.749490696e-02f, 1.751480140e-02f, 1.753466404e-02f, 1.755449486e-02f, 1.757429383e-02f, 1.759406091e-02f, 1.761379607e-02f,
+1.763349928e-02f, 1.765317051e-02f, 1.767280973e-02f, 1.769241690e-02f, 1.771199200e-02f, 1.773153499e-02f, 1.775104584e-02f, 1.777052452e-02f, 1.778997100e-02f, 1.780938525e-02f,
+1.782876724e-02f, 1.784811694e-02f, 1.786743431e-02f, 1.788671932e-02f, 1.790597195e-02f, 1.792519216e-02f, 1.794437992e-02f, 1.796353521e-02f, 1.798265799e-02f, 1.800174822e-02f,
+1.802080589e-02f, 1.803983096e-02f, 1.805882340e-02f, 1.807778317e-02f, 1.809671026e-02f, 1.811560462e-02f, 1.813446624e-02f, 1.815329507e-02f, 1.817209109e-02f, 1.819085427e-02f,
+1.820958458e-02f, 1.822828198e-02f, 1.824694646e-02f, 1.826557798e-02f, 1.828417650e-02f, 1.830274201e-02f, 1.832127447e-02f, 1.833977385e-02f, 1.835824012e-02f, 1.837667326e-02f,
+1.839507323e-02f, 1.841344000e-02f, 1.843177355e-02f, 1.845007385e-02f, 1.846834086e-02f, 1.848657456e-02f, 1.850477492e-02f, 1.852294191e-02f, 1.854107550e-02f, 1.855917566e-02f,
+1.857724237e-02f, 1.859527560e-02f, 1.861327531e-02f, 1.863124148e-02f, 1.864917408e-02f, 1.866707308e-02f, 1.868493846e-02f, 1.870277018e-02f, 1.872056821e-02f, 1.873833254e-02f,
+1.875606313e-02f, 1.877375995e-02f, 1.879142297e-02f, 1.880905217e-02f, 1.882664753e-02f, 1.884420900e-02f, 1.886173656e-02f, 1.887923020e-02f, 1.889668987e-02f, 1.891411555e-02f,
+1.893150721e-02f, 1.894886483e-02f, 1.896618838e-02f, 1.898347783e-02f, 1.900073316e-02f, 1.901795433e-02f, 1.903514132e-02f, 1.905229410e-02f, 1.906941265e-02f, 1.908649694e-02f,
+1.910354694e-02f, 1.912056263e-02f, 1.913754398e-02f, 1.915449095e-02f, 1.917140353e-02f, 1.918828170e-02f, 1.920512541e-02f, 1.922193465e-02f, 1.923870939e-02f, 1.925544960e-02f,
+1.927215526e-02f, 1.928882633e-02f, 1.930546281e-02f, 1.932206465e-02f, 1.933863183e-02f, 1.935516434e-02f, 1.937166213e-02f, 1.938812518e-02f, 1.940455348e-02f, 1.942094699e-02f,
+1.943730569e-02f, 1.945362954e-02f, 1.946991854e-02f, 1.948617265e-02f, 1.950239184e-02f, 1.951857610e-02f, 1.953472538e-02f, 1.955083968e-02f, 1.956691897e-02f, 1.958296321e-02f,
+1.959897239e-02f, 1.961494648e-02f, 1.963088546e-02f, 1.964678929e-02f, 1.966265796e-02f, 1.967849144e-02f, 1.969428971e-02f, 1.971005274e-02f, 1.972578051e-02f, 1.974147299e-02f,
+1.975713015e-02f, 1.977275198e-02f, 1.978833846e-02f, 1.980388954e-02f, 1.981940522e-02f, 1.983488547e-02f, 1.985033026e-02f, 1.986573956e-02f, 1.988111337e-02f, 1.989645164e-02f,
+1.991175437e-02f, 1.992702152e-02f, 1.994225306e-02f, 1.995744899e-02f, 1.997260927e-02f, 1.998773388e-02f, 2.000282280e-02f, 2.001787600e-02f, 2.003289346e-02f, 2.004787515e-02f,
+2.006282107e-02f, 2.007773117e-02f, 2.009260544e-02f, 2.010744385e-02f, 2.012224639e-02f, 2.013701303e-02f, 2.015174374e-02f, 2.016643851e-02f, 2.018109731e-02f, 2.019572011e-02f,
+2.021030691e-02f, 2.022485766e-02f, 2.023937236e-02f, 2.025385098e-02f, 2.026829350e-02f, 2.028269989e-02f, 2.029707013e-02f, 2.031140420e-02f, 2.032570208e-02f, 2.033996375e-02f,
+2.035418919e-02f, 2.036837836e-02f, 2.038253126e-02f, 2.039664786e-02f, 2.041072814e-02f, 2.042477207e-02f, 2.043877964e-02f, 2.045275082e-02f, 2.046668560e-02f, 2.048058394e-02f,
+2.049444584e-02f, 2.050827126e-02f, 2.052206020e-02f, 2.053581262e-02f, 2.054952850e-02f, 2.056320783e-02f, 2.057685059e-02f, 2.059045675e-02f, 2.060402629e-02f, 2.061755919e-02f,
+2.063105544e-02f, 2.064451500e-02f, 2.065793787e-02f, 2.067132402e-02f, 2.068467342e-02f, 2.069798607e-02f, 2.071126194e-02f, 2.072450100e-02f, 2.073770325e-02f, 2.075086866e-02f,
+2.076399720e-02f, 2.077708887e-02f, 2.079014363e-02f, 2.080316148e-02f, 2.081614238e-02f, 2.082908633e-02f, 2.084199330e-02f, 2.085486327e-02f, 2.086769622e-02f, 2.088049214e-02f,
+2.089325100e-02f, 2.090597278e-02f, 2.091865748e-02f, 2.093130506e-02f, 2.094391550e-02f, 2.095648880e-02f, 2.096902492e-02f, 2.098152386e-02f, 2.099398559e-02f, 2.100641009e-02f,
+2.101879735e-02f, 2.103114735e-02f, 2.104346006e-02f, 2.105573547e-02f, 2.106797357e-02f, 2.108017432e-02f, 2.109233773e-02f, 2.110446376e-02f, 2.111655239e-02f, 2.112860362e-02f,
+2.114061743e-02f, 2.115259378e-02f, 2.116453268e-02f, 2.117643409e-02f, 2.118829801e-02f, 2.120012441e-02f, 2.121191327e-02f, 2.122366459e-02f, 2.123537834e-02f, 2.124705450e-02f,
+2.125869306e-02f, 2.127029399e-02f, 2.128185730e-02f, 2.129338294e-02f, 2.130487092e-02f, 2.131632121e-02f, 2.132773379e-02f, 2.133910865e-02f, 2.135044577e-02f, 2.136174513e-02f,
+2.137300673e-02f, 2.138423053e-02f, 2.139541653e-02f, 2.140656471e-02f, 2.141767505e-02f, 2.142874754e-02f, 2.143978215e-02f, 2.145077888e-02f, 2.146173771e-02f, 2.147265862e-02f,
+2.148354159e-02f, 2.149438661e-02f, 2.150519367e-02f, 2.151596274e-02f, 2.152669382e-02f, 2.153738688e-02f, 2.154804192e-02f, 2.155865891e-02f, 2.156923784e-02f, 2.157977869e-02f,
+2.159028146e-02f, 2.160074612e-02f, 2.161117265e-02f, 2.162156106e-02f, 2.163191131e-02f, 2.164222339e-02f, 2.165249730e-02f, 2.166273300e-02f, 2.167293050e-02f, 2.168308978e-02f,
+2.169321081e-02f, 2.170329359e-02f, 2.171333810e-02f, 2.172334433e-02f, 2.173331226e-02f, 2.174324187e-02f, 2.175313317e-02f, 2.176298612e-02f, 2.177280072e-02f, 2.178257695e-02f,
+2.179231479e-02f, 2.180201424e-02f, 2.181167529e-02f, 2.182129790e-02f, 2.183088209e-02f, 2.184042781e-02f, 2.184993508e-02f, 2.185940387e-02f, 2.186883416e-02f, 2.187822596e-02f,
+2.188757923e-02f, 2.189689397e-02f, 2.190617017e-02f, 2.191540781e-02f, 2.192460688e-02f, 2.193376737e-02f, 2.194288926e-02f, 2.195197254e-02f, 2.196101720e-02f, 2.197002323e-02f,
+2.197899061e-02f, 2.198791933e-02f, 2.199680938e-02f, 2.200566074e-02f, 2.201447341e-02f, 2.202324736e-02f, 2.203198260e-02f, 2.204067910e-02f, 2.204933686e-02f, 2.205795586e-02f,
+2.206653609e-02f, 2.207507755e-02f, 2.208358020e-02f, 2.209204406e-02f, 2.210046909e-02f, 2.210885530e-02f, 2.211720267e-02f, 2.212551119e-02f, 2.213378085e-02f, 2.214201163e-02f,
+2.215020353e-02f, 2.215835653e-02f, 2.216647063e-02f, 2.217454581e-02f, 2.218258206e-02f, 2.219057937e-02f, 2.219853772e-02f, 2.220645712e-02f, 2.221433755e-02f, 2.222217899e-02f,
+2.222998144e-02f, 2.223774488e-02f, 2.224546931e-02f, 2.225315472e-02f, 2.226080109e-02f, 2.226840841e-02f, 2.227597668e-02f, 2.228350589e-02f, 2.229099602e-02f, 2.229844706e-02f,
+2.230585901e-02f, 2.231323185e-02f, 2.232056558e-02f, 2.232786018e-02f, 2.233511565e-02f, 2.234233198e-02f, 2.234950915e-02f, 2.235664716e-02f, 2.236374600e-02f, 2.237080566e-02f,
+2.237782612e-02f, 2.238480739e-02f, 2.239174945e-02f, 2.239865229e-02f, 2.240551591e-02f, 2.241234029e-02f, 2.241912542e-02f, 2.242587130e-02f, 2.243257792e-02f, 2.243924527e-02f,
+2.244587335e-02f, 2.245246213e-02f, 2.245901162e-02f, 2.246552181e-02f, 2.247199268e-02f, 2.247842423e-02f, 2.248481646e-02f, 2.249116935e-02f, 2.249748289e-02f, 2.250375708e-02f,
+2.250999192e-02f, 2.251618738e-02f, 2.252234347e-02f, 2.252846017e-02f, 2.253453749e-02f, 2.254057541e-02f, 2.254657392e-02f, 2.255253301e-02f, 2.255845269e-02f, 2.256433294e-02f,
+2.257017376e-02f, 2.257597513e-02f, 2.258173706e-02f, 2.258745953e-02f, 2.259314253e-02f, 2.259878607e-02f, 2.260439013e-02f, 2.260995471e-02f, 2.261547980e-02f, 2.262096539e-02f,
+2.262641149e-02f, 2.263181807e-02f, 2.263718514e-02f, 2.264251268e-02f, 2.264780070e-02f, 2.265304918e-02f, 2.265825813e-02f, 2.266342753e-02f, 2.266855738e-02f, 2.267364767e-02f,
+2.267869839e-02f, 2.268370955e-02f, 2.268868113e-02f, 2.269361314e-02f, 2.269850556e-02f, 2.270335838e-02f, 2.270817161e-02f, 2.271294524e-02f, 2.271767926e-02f, 2.272237367e-02f,
+2.272702846e-02f, 2.273164363e-02f, 2.273621918e-02f, 2.274075509e-02f, 2.274525136e-02f, 2.274970799e-02f, 2.275412498e-02f, 2.275850231e-02f, 2.276283999e-02f, 2.276713801e-02f,
+2.277139636e-02f, 2.277561505e-02f, 2.277979406e-02f, 2.278393340e-02f, 2.278803305e-02f, 2.279209302e-02f, 2.279611330e-02f, 2.280009389e-02f, 2.280403478e-02f, 2.280793597e-02f,
+2.281179745e-02f, 2.281561923e-02f, 2.281940129e-02f, 2.282314364e-02f, 2.282684627e-02f, 2.283050918e-02f, 2.283413236e-02f, 2.283771581e-02f, 2.284125953e-02f, 2.284476352e-02f,
+2.284822777e-02f, 2.285165228e-02f, 2.285503704e-02f, 2.285838206e-02f, 2.286168732e-02f, 2.286495284e-02f, 2.286817860e-02f, 2.287136460e-02f, 2.287451085e-02f, 2.287761733e-02f,
+2.288068404e-02f, 2.288371099e-02f, 2.288669817e-02f, 2.288964558e-02f, 2.289255322e-02f, 2.289542108e-02f, 2.289824916e-02f, 2.290103747e-02f, 2.290378599e-02f, 2.290649474e-02f,
+2.290916369e-02f, 2.291179286e-02f, 2.291438225e-02f, 2.291693184e-02f, 2.291944165e-02f, 2.292191166e-02f, 2.292434189e-02f, 2.292673231e-02f, 2.292908295e-02f, 2.293139378e-02f,
+2.293366482e-02f, 2.293589606e-02f, 2.293808751e-02f, 2.294023915e-02f, 2.294235099e-02f, 2.294442304e-02f, 2.294645528e-02f, 2.294844772e-02f, 2.295040036e-02f, 2.295231319e-02f,
+2.295418622e-02f, 2.295601945e-02f, 2.295781288e-02f, 2.295956650e-02f, 2.296128032e-02f, 2.296295433e-02f, 2.296458855e-02f, 2.296618296e-02f, 2.296773756e-02f, 2.296925237e-02f,
+2.297072737e-02f, 2.297216257e-02f, 2.297355797e-02f, 2.297491357e-02f, 2.297622937e-02f, 2.297750538e-02f, 2.297874158e-02f, 2.297993799e-02f, 2.298109460e-02f, 2.298221141e-02f,
+2.298328843e-02f, 2.298432566e-02f, 2.298532310e-02f, 2.298628074e-02f, 2.298719860e-02f, 2.298807667e-02f, 2.298891495e-02f, 2.298971345e-02f, 2.299047217e-02f, 2.299119110e-02f,
+2.299187026e-02f, 2.299250964e-02f, 2.299310924e-02f, 2.299366907e-02f, 2.299418912e-02f, 2.299466941e-02f, 2.299510993e-02f, 2.299551069e-02f, 2.299587168e-02f, 2.299619291e-02f,
+2.299647438e-02f, 2.299671610e-02f, 2.299691807e-02f, 2.299708028e-02f, 2.299720275e-02f, 2.299728548e-02f, 2.299732846e-02f, 2.299733170e-02f, 2.299729521e-02f, 2.299721898e-02f,
+2.299710303e-02f, 2.299694735e-02f, 2.299675194e-02f, 2.299651682e-02f, 2.299624198e-02f, 2.299592742e-02f, 2.299557316e-02f, 2.299517919e-02f, 2.299474552e-02f, 2.299427215e-02f,
+2.299375909e-02f, 2.299320634e-02f, 2.299261390e-02f, 2.299198177e-02f, 2.299130997e-02f, 2.299059850e-02f, 2.298984735e-02f, 2.298905654e-02f, 2.298822607e-02f, 2.298735594e-02f,
+2.298644616e-02f, 2.298549673e-02f, 2.298450766e-02f, 2.298347895e-02f, 2.298241060e-02f, 2.298130263e-02f, 2.298015503e-02f, 2.297896782e-02f, 2.297774099e-02f, 2.297647455e-02f,
+2.297516850e-02f, 2.297382286e-02f, 2.297243763e-02f, 2.297101281e-02f, 2.296954840e-02f, 2.296804442e-02f, 2.296650087e-02f, 2.296491775e-02f, 2.296329508e-02f, 2.296163285e-02f,
+2.295993107e-02f, 2.295818975e-02f, 2.295640889e-02f, 2.295458850e-02f, 2.295272859e-02f, 2.295082916e-02f, 2.294889022e-02f, 2.294691178e-02f, 2.294489383e-02f, 2.294283640e-02f,
+2.294073948e-02f, 2.293860307e-02f, 2.293642720e-02f, 2.293421186e-02f, 2.293195706e-02f, 2.292966281e-02f, 2.292732912e-02f, 2.292495599e-02f, 2.292254342e-02f, 2.292009144e-02f,
+2.291760003e-02f, 2.291506922e-02f, 2.291249900e-02f, 2.290988939e-02f, 2.290724040e-02f, 2.290455202e-02f, 2.290182427e-02f, 2.289905716e-02f, 2.289625069e-02f, 2.289340487e-02f,
+2.289051971e-02f, 2.288759522e-02f, 2.288463141e-02f, 2.288162827e-02f, 2.287858583e-02f, 2.287550409e-02f, 2.287238306e-02f, 2.286922274e-02f, 2.286602315e-02f, 2.286278429e-02f,
+2.285950617e-02f, 2.285618881e-02f, 2.285283220e-02f, 2.284943636e-02f, 2.284600130e-02f, 2.284252702e-02f, 2.283901354e-02f, 2.283546086e-02f, 2.283186899e-02f, 2.282823795e-02f,
+2.282456773e-02f, 2.282085836e-02f, 2.281710984e-02f, 2.281332218e-02f, 2.280949538e-02f, 2.280562946e-02f, 2.280172443e-02f, 2.279778030e-02f, 2.279379708e-02f, 2.278977477e-02f,
+2.278571339e-02f, 2.278161295e-02f, 2.277747345e-02f, 2.277329492e-02f, 2.276907734e-02f, 2.276482075e-02f, 2.276052514e-02f, 2.275619054e-02f, 2.275181694e-02f, 2.274740436e-02f,
+2.274295281e-02f, 2.273846230e-02f, 2.273393284e-02f, 2.272936444e-02f, 2.272475712e-02f, 2.272011088e-02f, 2.271542573e-02f, 2.271070169e-02f, 2.270593876e-02f, 2.270113697e-02f,
+2.269629631e-02f, 2.269141680e-02f, 2.268649846e-02f, 2.268154128e-02f, 2.267654530e-02f, 2.267151050e-02f, 2.266643692e-02f, 2.266132455e-02f, 2.265617342e-02f, 2.265098353e-02f,
+2.264575489e-02f, 2.264048752e-02f, 2.263518143e-02f, 2.262983663e-02f, 2.262445313e-02f, 2.261903095e-02f, 2.261357010e-02f, 2.260807058e-02f, 2.260253242e-02f, 2.259695562e-02f,
+2.259134020e-02f, 2.258568617e-02f, 2.257999354e-02f, 2.257426233e-02f, 2.256849255e-02f, 2.256268420e-02f, 2.255683731e-02f, 2.255095189e-02f, 2.254502795e-02f, 2.253906550e-02f,
+2.253306456e-02f, 2.252702513e-02f, 2.252094724e-02f, 2.251483090e-02f, 2.250867611e-02f, 2.250248290e-02f, 2.249625128e-02f, 2.248998125e-02f, 2.248367284e-02f, 2.247732606e-02f,
+2.247094092e-02f, 2.246451744e-02f, 2.245805562e-02f, 2.245155549e-02f, 2.244501706e-02f, 2.243844034e-02f, 2.243182534e-02f, 2.242517209e-02f, 2.241848059e-02f, 2.241175086e-02f,
+2.240498292e-02f, 2.239817677e-02f, 2.239133243e-02f, 2.238444993e-02f, 2.237752927e-02f, 2.237057046e-02f, 2.236357353e-02f, 2.235653848e-02f, 2.234946534e-02f, 2.234235411e-02f,
+2.233520481e-02f, 2.232801747e-02f, 2.232079208e-02f, 2.231352868e-02f, 2.230622727e-02f, 2.229888786e-02f, 2.229151049e-02f, 2.228409515e-02f, 2.227664187e-02f, 2.226915066e-02f,
+2.226162154e-02f, 2.225405452e-02f, 2.224644962e-02f, 2.223880685e-02f, 2.223112624e-02f, 2.222340779e-02f, 2.221565153e-02f, 2.220785747e-02f, 2.220002562e-02f, 2.219215601e-02f,
+2.218424864e-02f, 2.217630354e-02f, 2.216832073e-02f, 2.216030021e-02f, 2.215224200e-02f, 2.214414613e-02f, 2.213601261e-02f, 2.212784145e-02f, 2.211963268e-02f, 2.211138630e-02f,
+2.210310234e-02f, 2.209478082e-02f, 2.208642174e-02f, 2.207802514e-02f, 2.206959102e-02f, 2.206111940e-02f, 2.205261031e-02f, 2.204406375e-02f, 2.203547975e-02f, 2.202685832e-02f,
+2.201819948e-02f, 2.200950325e-02f, 2.200076964e-02f, 2.199199868e-02f, 2.198319039e-02f, 2.197434477e-02f, 2.196546185e-02f, 2.195654165e-02f, 2.194758418e-02f, 2.193858947e-02f,
+2.192955752e-02f, 2.192048837e-02f, 2.191138202e-02f, 2.190223851e-02f, 2.189305783e-02f, 2.188384002e-02f, 2.187458510e-02f, 2.186529307e-02f, 2.185596397e-02f, 2.184659780e-02f,
+2.183719459e-02f, 2.182775436e-02f, 2.181827713e-02f, 2.180876291e-02f, 2.179921172e-02f, 2.178962359e-02f, 2.177999853e-02f, 2.177033657e-02f, 2.176063771e-02f, 2.175090199e-02f,
+2.174112942e-02f, 2.173132002e-02f, 2.172147381e-02f, 2.171159081e-02f, 2.170167104e-02f, 2.169171452e-02f, 2.168172127e-02f, 2.167169131e-02f, 2.166162466e-02f, 2.165152134e-02f,
+2.164138137e-02f, 2.163120477e-02f, 2.162099156e-02f, 2.161074176e-02f, 2.160045540e-02f, 2.159013248e-02f, 2.157977304e-02f, 2.156937709e-02f, 2.155894466e-02f, 2.154847576e-02f,
+2.153797042e-02f, 2.152742865e-02f, 2.151685048e-02f, 2.150623593e-02f, 2.149558502e-02f, 2.148489777e-02f, 2.147417420e-02f, 2.146341433e-02f, 2.145261819e-02f, 2.144178579e-02f,
+2.143091716e-02f, 2.142001232e-02f, 2.140907129e-02f, 2.139809409e-02f, 2.138708075e-02f, 2.137603128e-02f, 2.136494570e-02f, 2.135382405e-02f, 2.134266634e-02f, 2.133147258e-02f,
+2.132024282e-02f, 2.130897706e-02f, 2.129767533e-02f, 2.128633765e-02f, 2.127496404e-02f, 2.126355453e-02f, 2.125210914e-02f, 2.124062788e-02f, 2.122911080e-02f, 2.121755789e-02f,
+2.120596920e-02f, 2.119434473e-02f, 2.118268452e-02f, 2.117098859e-02f, 2.115925695e-02f, 2.114748964e-02f, 2.113568668e-02f, 2.112384808e-02f, 2.111197387e-02f, 2.110006408e-02f,
+2.108811872e-02f, 2.107613783e-02f, 2.106412142e-02f, 2.105206952e-02f, 2.103998215e-02f, 2.102785934e-02f, 2.101570110e-02f, 2.100350747e-02f, 2.099127846e-02f, 2.097901410e-02f,
+2.096671442e-02f, 2.095437943e-02f, 2.094200917e-02f, 2.092960365e-02f, 2.091716289e-02f, 2.090468694e-02f, 2.089217580e-02f, 2.087962950e-02f, 2.086704807e-02f, 2.085443152e-02f,
+2.084177990e-02f, 2.082909321e-02f, 2.081637149e-02f, 2.080361475e-02f, 2.079082303e-02f, 2.077799635e-02f, 2.076513473e-02f, 2.075223819e-02f, 2.073930677e-02f, 2.072634049e-02f,
+2.071333937e-02f, 2.070030343e-02f, 2.068723271e-02f, 2.067412723e-02f, 2.066098701e-02f, 2.064781208e-02f, 2.063460246e-02f, 2.062135818e-02f, 2.060807926e-02f, 2.059476573e-02f,
+2.058141762e-02f, 2.056803495e-02f, 2.055461775e-02f, 2.054116604e-02f, 2.052767985e-02f, 2.051415920e-02f, 2.050060413e-02f, 2.048701464e-02f, 2.047339079e-02f, 2.045973258e-02f,
+2.044604004e-02f, 2.043231320e-02f, 2.041855209e-02f, 2.040475674e-02f, 2.039092716e-02f, 2.037706339e-02f, 2.036316546e-02f, 2.034923338e-02f, 2.033526719e-02f, 2.032126690e-02f,
+2.030723256e-02f, 2.029316419e-02f, 2.027906181e-02f, 2.026492544e-02f, 2.025075513e-02f, 2.023655088e-02f, 2.022231274e-02f, 2.020804073e-02f, 2.019373487e-02f, 2.017939519e-02f,
+2.016502172e-02f, 2.015061449e-02f, 2.013617352e-02f, 2.012169885e-02f, 2.010719049e-02f, 2.009264848e-02f, 2.007807285e-02f, 2.006346361e-02f, 2.004882081e-02f, 2.003414446e-02f,
+2.001943460e-02f, 2.000469125e-02f, 1.998991445e-02f, 1.997510421e-02f, 1.996026057e-02f, 1.994538356e-02f, 1.993047320e-02f, 1.991552952e-02f, 1.990055255e-02f, 1.988554232e-02f,
+1.987049885e-02f, 1.985542219e-02f, 1.984031234e-02f, 1.982516935e-02f, 1.980999324e-02f, 1.979478404e-02f, 1.977954178e-02f, 1.976426648e-02f, 1.974895818e-02f, 1.973361691e-02f,
+1.971824269e-02f, 1.970283555e-02f, 1.968739553e-02f, 1.967192264e-02f, 1.965641693e-02f, 1.964087841e-02f, 1.962530713e-02f, 1.960970310e-02f, 1.959406636e-02f, 1.957839694e-02f,
+1.956269486e-02f, 1.954696016e-02f, 1.953119287e-02f, 1.951539301e-02f, 1.949956061e-02f, 1.948369571e-02f, 1.946779834e-02f, 1.945186852e-02f, 1.943590628e-02f, 1.941991166e-02f,
+1.940388468e-02f, 1.938782538e-02f, 1.937173378e-02f, 1.935560991e-02f, 1.933945381e-02f, 1.932326551e-02f, 1.930704503e-02f, 1.929079241e-02f, 1.927450767e-02f, 1.925819085e-02f,
+1.924184198e-02f, 1.922546109e-02f, 1.920904821e-02f, 1.919260336e-02f, 1.917612659e-02f, 1.915961792e-02f, 1.914307738e-02f, 1.912650500e-02f, 1.910990082e-02f, 1.909326486e-02f,
+1.907659716e-02f, 1.905989774e-02f, 1.904316665e-02f, 1.902640390e-02f, 1.900960953e-02f, 1.899278358e-02f, 1.897592607e-02f, 1.895903704e-02f, 1.894211651e-02f, 1.892516452e-02f,
+1.890818110e-02f, 1.889116629e-02f, 1.887412010e-02f, 1.885704259e-02f, 1.883993376e-02f, 1.882279367e-02f, 1.880562234e-02f, 1.878841980e-02f, 1.877118609e-02f, 1.875392123e-02f,
+1.873662526e-02f, 1.871929821e-02f, 1.870194012e-02f, 1.868455101e-02f, 1.866713092e-02f, 1.864967988e-02f, 1.863219792e-02f, 1.861468508e-02f, 1.859714139e-02f, 1.857956687e-02f,
+1.856196157e-02f, 1.854432552e-02f, 1.852665874e-02f, 1.850896128e-02f, 1.849123316e-02f, 1.847347441e-02f, 1.845568508e-02f, 1.843786519e-02f, 1.842001478e-02f, 1.840213387e-02f,
+1.838422251e-02f, 1.836628072e-02f, 1.834830854e-02f, 1.833030600e-02f, 1.831227314e-02f, 1.829420999e-02f, 1.827611658e-02f, 1.825799294e-02f, 1.823983912e-02f, 1.822165513e-02f,
+1.820344103e-02f, 1.818519683e-02f, 1.816692258e-02f, 1.814861830e-02f, 1.813028404e-02f, 1.811191982e-02f, 1.809352568e-02f, 1.807510165e-02f, 1.805664778e-02f, 1.803816408e-02f,
+1.801965060e-02f, 1.800110737e-02f, 1.798253442e-02f, 1.796393179e-02f, 1.794529951e-02f, 1.792663762e-02f, 1.790794615e-02f, 1.788922514e-02f, 1.787047462e-02f, 1.785169462e-02f,
+1.783288518e-02f, 1.781404634e-02f, 1.779517812e-02f, 1.777628057e-02f, 1.775735372e-02f, 1.773839760e-02f, 1.771941225e-02f, 1.770039770e-02f, 1.768135399e-02f, 1.766228116e-02f,
+1.764317923e-02f, 1.762404824e-02f, 1.760488824e-02f, 1.758569925e-02f, 1.756648130e-02f, 1.754723444e-02f, 1.752795871e-02f, 1.750865412e-02f, 1.748932073e-02f, 1.746995857e-02f,
+1.745056766e-02f, 1.743114806e-02f, 1.741169978e-02f, 1.739222288e-02f, 1.737271738e-02f, 1.735318332e-02f, 1.733362074e-02f, 1.731402967e-02f, 1.729441015e-02f, 1.727476221e-02f,
+1.725508589e-02f, 1.723538123e-02f, 1.721564826e-02f, 1.719588702e-02f, 1.717609754e-02f, 1.715627987e-02f, 1.713643403e-02f, 1.711656007e-02f, 1.709665802e-02f, 1.707672791e-02f,
+1.705676979e-02f, 1.703678368e-02f, 1.701676963e-02f, 1.699672768e-02f, 1.697665785e-02f, 1.695656019e-02f, 1.693643474e-02f, 1.691628152e-02f, 1.689610058e-02f, 1.687589195e-02f,
+1.685565568e-02f, 1.683539179e-02f, 1.681510033e-02f, 1.679478132e-02f, 1.677443482e-02f, 1.675406085e-02f, 1.673365946e-02f, 1.671323067e-02f, 1.669277454e-02f, 1.667229109e-02f,
+1.665178036e-02f, 1.663124239e-02f, 1.661067722e-02f, 1.659008488e-02f, 1.656946542e-02f, 1.654881886e-02f, 1.652814526e-02f, 1.650744464e-02f, 1.648671704e-02f, 1.646596250e-02f,
+1.644518106e-02f, 1.642437276e-02f, 1.640353763e-02f, 1.638267572e-02f, 1.636178706e-02f, 1.634087168e-02f, 1.631992963e-02f, 1.629896095e-02f, 1.627796567e-02f, 1.625694383e-02f,
+1.623589547e-02f, 1.621482063e-02f, 1.619371934e-02f, 1.617259165e-02f, 1.615143759e-02f, 1.613025721e-02f, 1.610905053e-02f, 1.608781760e-02f, 1.606655846e-02f, 1.604527315e-02f,
+1.602396170e-02f, 1.600262415e-02f, 1.598126054e-02f, 1.595987092e-02f, 1.593845531e-02f, 1.591701377e-02f, 1.589554632e-02f, 1.587405301e-02f, 1.585253387e-02f, 1.583098895e-02f,
+1.580941828e-02f, 1.578782190e-02f, 1.576619986e-02f, 1.574455219e-02f, 1.572287893e-02f, 1.570118012e-02f, 1.567945579e-02f, 1.565770600e-02f, 1.563593077e-02f, 1.561413016e-02f,
+1.559230418e-02f, 1.557045290e-02f, 1.554857634e-02f, 1.552667455e-02f, 1.550474756e-02f, 1.548279542e-02f, 1.546081817e-02f, 1.543881583e-02f, 1.541678847e-02f, 1.539473611e-02f,
+1.537265879e-02f, 1.535055656e-02f, 1.532842945e-02f, 1.530627750e-02f, 1.528410076e-02f, 1.526189927e-02f, 1.523967306e-02f, 1.521742218e-02f, 1.519514666e-02f, 1.517284654e-02f,
+1.515052188e-02f, 1.512817269e-02f, 1.510579904e-02f, 1.508340095e-02f, 1.506097847e-02f, 1.503853164e-02f, 1.501606050e-02f, 1.499356509e-02f, 1.497104544e-02f, 1.494850161e-02f,
+1.492593363e-02f, 1.490334154e-02f, 1.488072538e-02f, 1.485808520e-02f, 1.483542103e-02f, 1.481273292e-02f, 1.479002090e-02f, 1.476728502e-02f, 1.474452532e-02f, 1.472174184e-02f,
+1.469893462e-02f, 1.467610370e-02f, 1.465324913e-02f, 1.463037094e-02f, 1.460746917e-02f, 1.458454387e-02f, 1.456159508e-02f, 1.453862284e-02f, 1.451562719e-02f, 1.449260817e-02f,
+1.446956582e-02f, 1.444650019e-02f, 1.442341132e-02f, 1.440029924e-02f, 1.437716401e-02f, 1.435400565e-02f, 1.433082422e-02f, 1.430761975e-02f, 1.428439229e-02f, 1.426114188e-02f,
+1.423786856e-02f, 1.421457237e-02f, 1.419125336e-02f, 1.416791156e-02f, 1.414454702e-02f, 1.412115978e-02f, 1.409774988e-02f, 1.407431737e-02f, 1.405086228e-02f, 1.402738467e-02f,
+1.400388456e-02f, 1.398036200e-02f, 1.395681704e-02f, 1.393324972e-02f, 1.390966008e-02f, 1.388604816e-02f, 1.386241400e-02f, 1.383875766e-02f, 1.381507916e-02f, 1.379137855e-02f,
+1.376765588e-02f, 1.374391119e-02f, 1.372014451e-02f, 1.369635590e-02f, 1.367254539e-02f, 1.364871303e-02f, 1.362485886e-02f, 1.360098293e-02f, 1.357708527e-02f, 1.355316593e-02f,
+1.352922496e-02f, 1.350526238e-02f, 1.348127826e-02f, 1.345727263e-02f, 1.343324553e-02f, 1.340919701e-02f, 1.338512711e-02f, 1.336103587e-02f, 1.333692334e-02f, 1.331278955e-02f,
+1.328863457e-02f, 1.326445841e-02f, 1.324026114e-02f, 1.321604279e-02f, 1.319180340e-02f, 1.316754303e-02f, 1.314326171e-02f, 1.311895948e-02f, 1.309463640e-02f, 1.307029250e-02f,
+1.304592782e-02f, 1.302154242e-02f, 1.299713633e-02f, 1.297270960e-02f, 1.294826227e-02f, 1.292379439e-02f, 1.289930599e-02f, 1.287479713e-02f, 1.285026784e-02f, 1.282571818e-02f,
+1.280114818e-02f, 1.277655789e-02f, 1.275194735e-02f, 1.272731661e-02f, 1.270266571e-02f, 1.267799469e-02f, 1.265330360e-02f, 1.262859248e-02f, 1.260386138e-02f, 1.257911035e-02f,
+1.255433941e-02f, 1.252954863e-02f, 1.250473804e-02f, 1.247990769e-02f, 1.245505762e-02f, 1.243018787e-02f, 1.240529850e-02f, 1.238038954e-02f, 1.235546105e-02f, 1.233051305e-02f,
+1.230554561e-02f, 1.228055876e-02f, 1.225555255e-02f, 1.223052702e-02f, 1.220548222e-02f, 1.218041819e-02f, 1.215533497e-02f, 1.213023262e-02f, 1.210511117e-02f, 1.207997068e-02f,
+1.205481118e-02f, 1.202963272e-02f, 1.200443534e-02f, 1.197921910e-02f, 1.195398403e-02f, 1.192873018e-02f, 1.190345760e-02f, 1.187816632e-02f, 1.185285641e-02f, 1.182752789e-02f,
+1.180218081e-02f, 1.177681523e-02f, 1.175143119e-02f, 1.172602872e-02f, 1.170060788e-02f, 1.167516871e-02f, 1.164971126e-02f, 1.162423557e-02f, 1.159874168e-02f, 1.157322965e-02f,
+1.154769952e-02f, 1.152215133e-02f, 1.149658513e-02f, 1.147100096e-02f, 1.144539888e-02f, 1.141977891e-02f, 1.139414112e-02f, 1.136848555e-02f, 1.134281223e-02f, 1.131712123e-02f,
+1.129141258e-02f, 1.126568632e-02f, 1.123994251e-02f, 1.121418120e-02f, 1.118840241e-02f, 1.116260621e-02f, 1.113679264e-02f, 1.111096174e-02f, 1.108511356e-02f, 1.105924815e-02f,
+1.103336554e-02f, 1.100746580e-02f, 1.098154895e-02f, 1.095561506e-02f, 1.092966416e-02f, 1.090369630e-02f, 1.087771153e-02f, 1.085170990e-02f, 1.082569144e-02f, 1.079965621e-02f,
+1.077360425e-02f, 1.074753561e-02f, 1.072145033e-02f, 1.069534846e-02f, 1.066923005e-02f, 1.064309515e-02f, 1.061694379e-02f, 1.059077603e-02f, 1.056459191e-02f, 1.053839148e-02f,
+1.051217479e-02f, 1.048594187e-02f, 1.045969279e-02f, 1.043342758e-02f, 1.040714629e-02f, 1.038084897e-02f, 1.035453566e-02f, 1.032820641e-02f, 1.030186127e-02f, 1.027550028e-02f,
+1.024912350e-02f, 1.022273096e-02f, 1.019632272e-02f, 1.016989882e-02f, 1.014345930e-02f, 1.011700422e-02f, 1.009053362e-02f, 1.006404755e-02f, 1.003754606e-02f, 1.001102918e-02f,
+9.984496979e-03f, 9.957949490e-03f, 9.931386763e-03f, 9.904808846e-03f, 9.878215786e-03f, 9.851607629e-03f, 9.824984424e-03f, 9.798346216e-03f, 9.771693053e-03f, 9.745024982e-03f,
+9.718342050e-03f, 9.691644304e-03f, 9.664931792e-03f, 9.638204560e-03f, 9.611462657e-03f, 9.584706128e-03f, 9.557935022e-03f, 9.531149386e-03f, 9.504349266e-03f, 9.477534711e-03f,
+9.450705768e-03f, 9.423862484e-03f, 9.397004906e-03f, 9.370133082e-03f, 9.343247059e-03f, 9.316346885e-03f, 9.289432608e-03f, 9.262504274e-03f, 9.235561931e-03f, 9.208605627e-03f,
+9.181635410e-03f, 9.154651327e-03f, 9.127653425e-03f, 9.100641752e-03f, 9.073616356e-03f, 9.046577284e-03f, 9.019524585e-03f, 8.992458306e-03f, 8.965378494e-03f, 8.938285197e-03f,
+8.911178464e-03f, 8.884058341e-03f, 8.856924877e-03f, 8.829778120e-03f, 8.802618117e-03f, 8.775444916e-03f, 8.748258565e-03f, 8.721059112e-03f, 8.693846605e-03f, 8.666621092e-03f,
+8.639382621e-03f, 8.612131240e-03f, 8.584866996e-03f, 8.557589938e-03f, 8.530300113e-03f, 8.502997571e-03f, 8.475682359e-03f, 8.448354524e-03f, 8.421014116e-03f, 8.393661181e-03f,
+8.366295770e-03f, 8.338917928e-03f, 8.311527706e-03f, 8.284125150e-03f, 8.256710309e-03f, 8.229283232e-03f, 8.201843966e-03f, 8.174392560e-03f, 8.146929062e-03f, 8.119453521e-03f,
+8.091965984e-03f, 8.064466500e-03f, 8.036955118e-03f, 8.009431886e-03f, 7.981896851e-03f, 7.954350063e-03f, 7.926791570e-03f, 7.899221421e-03f, 7.871639663e-03f, 7.844046346e-03f,
+7.816441518e-03f, 7.788825226e-03f, 7.761197521e-03f, 7.733558450e-03f, 7.705908062e-03f, 7.678246405e-03f, 7.650573528e-03f, 7.622889480e-03f, 7.595194309e-03f, 7.567488064e-03f,
+7.539770794e-03f, 7.512042546e-03f, 7.484303371e-03f, 7.456553316e-03f, 7.428792430e-03f, 7.401020762e-03f, 7.373238361e-03f, 7.345445275e-03f, 7.317641553e-03f, 7.289827245e-03f,
+7.262002398e-03f, 7.234167061e-03f, 7.206321284e-03f, 7.178465116e-03f, 7.150598604e-03f, 7.122721798e-03f, 7.094834747e-03f, 7.066937500e-03f, 7.039030105e-03f, 7.011112611e-03f,
+6.983185069e-03f, 6.955247525e-03f, 6.927300030e-03f, 6.899342632e-03f, 6.871375381e-03f, 6.843398325e-03f, 6.815411513e-03f, 6.787414994e-03f, 6.759408818e-03f, 6.731393034e-03f,
+6.703367690e-03f, 6.675332835e-03f, 6.647288519e-03f, 6.619234791e-03f, 6.591171700e-03f, 6.563099295e-03f, 6.535017625e-03f, 6.506926739e-03f, 6.478826687e-03f, 6.450717518e-03f,
+6.422599280e-03f, 6.394472024e-03f, 6.366335797e-03f, 6.338190651e-03f, 6.310036633e-03f, 6.281873793e-03f, 6.253702180e-03f, 6.225521844e-03f, 6.197332834e-03f, 6.169135199e-03f,
+6.140928988e-03f, 6.112714251e-03f, 6.084491037e-03f, 6.056259396e-03f, 6.028019376e-03f, 5.999771027e-03f, 5.971514399e-03f, 5.943249541e-03f, 5.914976502e-03f, 5.886695332e-03f,
+5.858406080e-03f, 5.830108795e-03f, 5.801803527e-03f, 5.773490326e-03f, 5.745169241e-03f, 5.716840321e-03f, 5.688503615e-03f, 5.660159175e-03f, 5.631807047e-03f, 5.603447283e-03f,
+5.575079932e-03f, 5.546705044e-03f, 5.518322667e-03f, 5.489932851e-03f, 5.461535647e-03f, 5.433131103e-03f, 5.404719269e-03f, 5.376300194e-03f, 5.347873929e-03f, 5.319440523e-03f,
+5.291000025e-03f, 5.262552486e-03f, 5.234097954e-03f, 5.205636479e-03f, 5.177168111e-03f, 5.148692900e-03f, 5.120210895e-03f, 5.091722146e-03f, 5.063226703e-03f, 5.034724615e-03f,
+5.006215931e-03f, 4.977700703e-03f, 4.949178979e-03f, 4.920650809e-03f, 4.892116242e-03f, 4.863575329e-03f, 4.835028120e-03f, 4.806474663e-03f, 4.777915009e-03f, 4.749349207e-03f,
+4.720777308e-03f, 4.692199361e-03f, 4.663615415e-03f, 4.635025521e-03f, 4.606429728e-03f, 4.577828087e-03f, 4.549220646e-03f, 4.520607456e-03f, 4.491988567e-03f, 4.463364028e-03f,
+4.434733889e-03f, 4.406098200e-03f, 4.377457011e-03f, 4.348810371e-03f, 4.320158331e-03f, 4.291500941e-03f, 4.262838250e-03f, 4.234170308e-03f, 4.205497165e-03f, 4.176818870e-03f,
+4.148135475e-03f, 4.119447028e-03f, 4.090753579e-03f, 4.062055179e-03f, 4.033351878e-03f, 4.004643724e-03f, 3.975930769e-03f, 3.947213061e-03f, 3.918490652e-03f, 3.889763590e-03f,
+3.861031927e-03f, 3.832295711e-03f, 3.803554992e-03f, 3.774809822e-03f, 3.746060248e-03f, 3.717306323e-03f, 3.688548094e-03f, 3.659785614e-03f, 3.631018930e-03f, 3.602248094e-03f,
+3.573473155e-03f, 3.544694163e-03f, 3.515911169e-03f, 3.487124222e-03f, 3.458333372e-03f, 3.429538669e-03f, 3.400740163e-03f, 3.371937905e-03f, 3.343131943e-03f, 3.314322329e-03f,
+3.285509112e-03f, 3.256692342e-03f, 3.227872069e-03f, 3.199048343e-03f, 3.170221215e-03f, 3.141390733e-03f, 3.112556949e-03f, 3.083719911e-03f, 3.054879671e-03f, 3.026036279e-03f,
+2.997189783e-03f, 2.968340235e-03f, 2.939487683e-03f, 2.910632180e-03f, 2.881773773e-03f, 2.852912514e-03f, 2.824048452e-03f, 2.795181637e-03f, 2.766312120e-03f, 2.737439950e-03f,
+2.708565178e-03f, 2.679687853e-03f, 2.650808026e-03f, 2.621925746e-03f, 2.593041064e-03f, 2.564154029e-03f, 2.535264693e-03f, 2.506373103e-03f, 2.477479312e-03f, 2.448583368e-03f,
+2.419685322e-03f, 2.390785224e-03f, 2.361883124e-03f, 2.332979072e-03f, 2.304073117e-03f, 2.275165311e-03f, 2.246255703e-03f, 2.217344342e-03f, 2.188431280e-03f, 2.159516565e-03f,
+2.130600249e-03f, 2.101682381e-03f, 2.072763011e-03f, 2.043842190e-03f, 2.014919966e-03f, 1.985996391e-03f, 1.957071514e-03f, 1.928145386e-03f, 1.899218056e-03f, 1.870289574e-03f,
+1.841359990e-03f, 1.812429355e-03f, 1.783497718e-03f, 1.754565130e-03f, 1.725631640e-03f, 1.696697298e-03f, 1.667762155e-03f, 1.638826260e-03f, 1.609889663e-03f, 1.580952416e-03f,
+1.552014566e-03f, 1.523076165e-03f, 1.494137262e-03f, 1.465197908e-03f, 1.436258152e-03f, 1.407318044e-03f, 1.378377635e-03f, 1.349436973e-03f, 1.320496111e-03f, 1.291555096e-03f,
+1.262613980e-03f, 1.233672812e-03f, 1.204731642e-03f, 1.175790520e-03f, 1.146849496e-03f, 1.117908620e-03f, 1.088967941e-03f, 1.060027511e-03f, 1.031087379e-03f, 1.002147594e-03f,
+9.732082070e-04f, 9.442692675e-04f, 9.153308254e-04f, 8.863929308e-04f, 8.574556335e-04f, 8.285189834e-04f, 7.995830304e-04f, 7.706478244e-04f, 7.417134152e-04f, 7.127798529e-04f,
+6.838471872e-04f, 6.549154681e-04f, 6.259847453e-04f, 5.970550688e-04f, 5.681264884e-04f, 5.391990540e-04f, 5.102728153e-04f, 4.813478224e-04f, 4.524241249e-04f, 4.235017727e-04f,
+3.945808157e-04f, 3.656613037e-04f, 3.367432864e-04f, 3.078268136e-04f, 2.789119353e-04f, 2.499987011e-04f, 2.210871608e-04f, 1.921773643e-04f, 1.632693613e-04f, 1.343632015e-04f,
+1.054589348e-04f, 7.655661079e-05f, 4.765627933e-05f, 1.875799012e-05f, -1.013820710e-05f, -3.903226262e-05f, -6.792412672e-05f, -9.681374969e-05f, -1.257010818e-04f, -1.545860734e-04f,
+-1.834686749e-04f, -2.123488364e-04f, -2.412265084e-04f, -2.701016411e-04f, -2.989741850e-04f, -3.278440904e-04f, -3.567113076e-04f, -3.855757870e-04f, -4.144374790e-04f, -4.432963340e-04f,
+-4.721523024e-04f, -5.010053346e-04f, -5.298553810e-04f, -5.587023920e-04f, -5.875463180e-04f, -6.163871096e-04f, -6.452247171e-04f, -6.740590909e-04f, -7.028901817e-04f, -7.317179398e-04f,
+-7.605423157e-04f, -7.893632600e-04f, -8.181807231e-04f, -8.469946555e-04f, -8.758050078e-04f, -9.046117305e-04f, -9.334147742e-04f, -9.622140894e-04f, -9.910096266e-04f, -1.019801336e-03f,
+-1.048589170e-03f, -1.077373077e-03f, -1.106153008e-03f, -1.134928914e-03f, -1.163700746e-03f, -1.192468455e-03f, -1.221231990e-03f, -1.249991303e-03f, -1.278746344e-03f, -1.307497065e-03f,
+-1.336243414e-03f, -1.364985345e-03f, -1.393722806e-03f, -1.422455749e-03f, -1.451184125e-03f, -1.479907884e-03f, -1.508626976e-03f, -1.537341354e-03f, -1.566050968e-03f, -1.594755767e-03f,
+-1.623455704e-03f, -1.652150729e-03f, -1.680840793e-03f, -1.709525847e-03f, -1.738205841e-03f, -1.766880726e-03f, -1.795550454e-03f, -1.824214975e-03f, -1.852874240e-03f, -1.881528200e-03f,
+-1.910176806e-03f, -1.938820009e-03f, -1.967457760e-03f, -1.996090009e-03f, -2.024716709e-03f, -2.053337809e-03f, -2.081953261e-03f, -2.110563015e-03f, -2.139167024e-03f, -2.167765238e-03f,
+-2.196357607e-03f, -2.224944084e-03f, -2.253524618e-03f, -2.282099162e-03f, -2.310667666e-03f, -2.339230082e-03f, -2.367786360e-03f, -2.396336453e-03f, -2.424880310e-03f, -2.453417883e-03f,
+-2.481949124e-03f, -2.510473983e-03f, -2.538992412e-03f, -2.567504362e-03f, -2.596009784e-03f, -2.624508630e-03f, -2.653000851e-03f, -2.681486398e-03f, -2.709965223e-03f, -2.738437276e-03f,
+-2.766902510e-03f, -2.795360875e-03f, -2.823812323e-03f, -2.852256806e-03f, -2.880694274e-03f, -2.909124680e-03f, -2.937547974e-03f, -2.965964108e-03f, -2.994373034e-03f, -3.022774702e-03f,
+-3.051169066e-03f, -3.079556075e-03f, -3.107935682e-03f, -3.136307839e-03f, -3.164672496e-03f, -3.193029605e-03f, -3.221379119e-03f, -3.249720988e-03f, -3.278055164e-03f, -3.306381599e-03f,
+-3.334700245e-03f, -3.363011053e-03f, -3.391313975e-03f, -3.419608962e-03f, -3.447895967e-03f, -3.476174942e-03f, -3.504445837e-03f, -3.532708605e-03f, -3.560963197e-03f, -3.589209566e-03f,
+-3.617447663e-03f, -3.645677441e-03f, -3.673898850e-03f, -3.702111843e-03f, -3.730316372e-03f, -3.758512389e-03f, -3.786699845e-03f, -3.814878694e-03f, -3.843048885e-03f, -3.871210373e-03f,
+-3.899363108e-03f, -3.927507043e-03f, -3.955642130e-03f, -3.983768321e-03f, -4.011885567e-03f, -4.039993822e-03f, -4.068093037e-03f, -4.096183165e-03f, -4.124264157e-03f, -4.152335966e-03f,
+-4.180398544e-03f, -4.208451843e-03f, -4.236495816e-03f, -4.264530415e-03f, -4.292555592e-03f, -4.320571299e-03f, -4.348577489e-03f, -4.376574114e-03f, -4.404561126e-03f, -4.432538479e-03f,
+-4.460506124e-03f, -4.488464013e-03f, -4.516412100e-03f, -4.544350336e-03f, -4.572278675e-03f, -4.600197068e-03f, -4.628105468e-03f, -4.656003829e-03f, -4.683892101e-03f, -4.711770239e-03f,
+-4.739638194e-03f, -4.767495919e-03f, -4.795343368e-03f, -4.823180491e-03f, -4.851007244e-03f, -4.878823577e-03f, -4.906629444e-03f, -4.934424797e-03f, -4.962209590e-03f, -4.989983775e-03f,
+-5.017747305e-03f, -5.045500133e-03f, -5.073242211e-03f, -5.100973493e-03f, -5.128693932e-03f, -5.156403480e-03f, -5.184102091e-03f, -5.211789717e-03f, -5.239466311e-03f, -5.267131827e-03f,
+-5.294786218e-03f, -5.322429436e-03f, -5.350061435e-03f, -5.377682168e-03f, -5.405291588e-03f, -5.432889648e-03f, -5.460476301e-03f, -5.488051501e-03f, -5.515615201e-03f, -5.543167354e-03f,
+-5.570707913e-03f, -5.598236832e-03f, -5.625754064e-03f, -5.653259563e-03f, -5.680753281e-03f, -5.708235172e-03f, -5.735705190e-03f, -5.763163288e-03f, -5.790609420e-03f, -5.818043538e-03f,
+-5.845465597e-03f, -5.872875551e-03f, -5.900273352e-03f, -5.927658954e-03f, -5.955032311e-03f, -5.982393377e-03f, -6.009742105e-03f, -6.037078448e-03f, -6.064402362e-03f, -6.091713799e-03f,
+-6.119012713e-03f, -6.146299058e-03f, -6.173572787e-03f, -6.200833856e-03f, -6.228082217e-03f, -6.255317824e-03f, -6.282540631e-03f, -6.309750593e-03f, -6.336947663e-03f, -6.364131795e-03f,
+-6.391302944e-03f, -6.418461063e-03f, -6.445606106e-03f, -6.472738027e-03f, -6.499856782e-03f, -6.526962322e-03f, -6.554054604e-03f, -6.581133581e-03f, -6.608199208e-03f, -6.635251438e-03f,
+-6.662290226e-03f, -6.689315526e-03f, -6.716327293e-03f, -6.743325480e-03f, -6.770310043e-03f, -6.797280936e-03f, -6.824238113e-03f, -6.851181528e-03f, -6.878111137e-03f, -6.905026893e-03f,
+-6.931928752e-03f, -6.958816667e-03f, -6.985690594e-03f, -7.012550487e-03f, -7.039396300e-03f, -7.066227989e-03f, -7.093045508e-03f, -7.119848812e-03f, -7.146637856e-03f, -7.173412594e-03f,
+-7.200172981e-03f, -7.226918972e-03f, -7.253650523e-03f, -7.280367587e-03f, -7.307070120e-03f, -7.333758077e-03f, -7.360431413e-03f, -7.387090083e-03f, -7.413734042e-03f, -7.440363245e-03f,
+-7.466977646e-03f, -7.493577202e-03f, -7.520161868e-03f, -7.546731598e-03f, -7.573286348e-03f, -7.599826073e-03f, -7.626350729e-03f, -7.652860270e-03f, -7.679354653e-03f, -7.705833831e-03f,
+-7.732297762e-03f, -7.758746400e-03f, -7.785179701e-03f, -7.811597620e-03f, -7.838000112e-03f, -7.864387134e-03f, -7.890758641e-03f, -7.917114589e-03f, -7.943454932e-03f, -7.969779627e-03f,
+-7.996088630e-03f, -8.022381897e-03f, -8.048659382e-03f, -8.074921042e-03f, -8.101166833e-03f, -8.127396710e-03f, -8.153610629e-03f, -8.179808547e-03f, -8.205990420e-03f, -8.232156202e-03f,
+-8.258305851e-03f, -8.284439322e-03f, -8.310556571e-03f, -8.336657555e-03f, -8.362742229e-03f, -8.388810550e-03f, -8.414862474e-03f, -8.440897957e-03f, -8.466916956e-03f, -8.492919427e-03f,
+-8.518905325e-03f, -8.544874608e-03f, -8.570827232e-03f, -8.596763153e-03f, -8.622682327e-03f, -8.648584712e-03f, -8.674470263e-03f, -8.700338938e-03f, -8.726190693e-03f, -8.752025483e-03f,
+-8.777843267e-03f, -8.803644001e-03f, -8.829427641e-03f, -8.855194144e-03f, -8.880943468e-03f, -8.906675568e-03f, -8.932390401e-03f, -8.958087925e-03f, -8.983768097e-03f, -9.009430872e-03f,
+-9.035076209e-03f, -9.060704065e-03f, -9.086314395e-03f, -9.111907158e-03f, -9.137482311e-03f, -9.163039810e-03f, -9.188579613e-03f, -9.214101677e-03f, -9.239605960e-03f, -9.265092418e-03f,
+-9.290561009e-03f, -9.316011690e-03f, -9.341444418e-03f, -9.366859152e-03f, -9.392255847e-03f, -9.417634463e-03f, -9.442994957e-03f, -9.468337285e-03f, -9.493661405e-03f, -9.518967276e-03f,
+-9.544254855e-03f, -9.569524099e-03f, -9.594774967e-03f, -9.620007415e-03f, -9.645221402e-03f, -9.670416886e-03f, -9.695593824e-03f, -9.720752174e-03f, -9.745891895e-03f, -9.771012944e-03f,
+-9.796115279e-03f, -9.821198858e-03f, -9.846263640e-03f, -9.871309582e-03f, -9.896336643e-03f, -9.921344780e-03f, -9.946333953e-03f, -9.971304118e-03f, -9.996255235e-03f, -1.002118726e-02f,
+-1.004610016e-02f, -1.007099388e-02f, -1.009586839e-02f, -1.012072364e-02f, -1.014555959e-02f, -1.017037620e-02f, -1.019517343e-02f, -1.021995124e-02f, -1.024470959e-02f, -1.026944843e-02f,
+-1.029416772e-02f, -1.031886743e-02f, -1.034354751e-02f, -1.036820791e-02f, -1.039284861e-02f, -1.041746956e-02f, -1.044207071e-02f, -1.046665203e-02f, -1.049121347e-02f, -1.051575499e-02f,
+-1.054027656e-02f, -1.056477813e-02f, -1.058925967e-02f, -1.061372112e-02f, -1.063816245e-02f, -1.066258362e-02f, -1.068698459e-02f, -1.071136532e-02f, -1.073572576e-02f, -1.076006588e-02f,
+-1.078438564e-02f, -1.080868499e-02f, -1.083296390e-02f, -1.085722232e-02f, -1.088146022e-02f, -1.090567755e-02f, -1.092987427e-02f, -1.095405035e-02f, -1.097820573e-02f, -1.100234040e-02f,
+-1.102645429e-02f, -1.105054738e-02f, -1.107461962e-02f, -1.109867097e-02f, -1.112270139e-02f, -1.114671085e-02f, -1.117069930e-02f, -1.119466670e-02f, -1.121861302e-02f, -1.124253821e-02f,
+-1.126644223e-02f, -1.129032504e-02f, -1.131418661e-02f, -1.133802690e-02f, -1.136184585e-02f, -1.138564345e-02f, -1.140941963e-02f, -1.143317438e-02f, -1.145690764e-02f, -1.148061938e-02f,
+-1.150430956e-02f, -1.152797813e-02f, -1.155162506e-02f, -1.157525032e-02f, -1.159885385e-02f, -1.162243563e-02f, -1.164599561e-02f, -1.166953375e-02f, -1.169305002e-02f, -1.171654437e-02f,
+-1.174001677e-02f, -1.176346718e-02f, -1.178689555e-02f, -1.181030186e-02f, -1.183368605e-02f, -1.185704810e-02f, -1.188038797e-02f, -1.190370560e-02f, -1.192700097e-02f, -1.195027405e-02f,
+-1.197352478e-02f, -1.199675313e-02f, -1.201995906e-02f, -1.204314253e-02f, -1.206630352e-02f, -1.208944197e-02f, -1.211255784e-02f, -1.213565111e-02f, -1.215872173e-02f, -1.218176966e-02f,
+-1.220479487e-02f, -1.222779732e-02f, -1.225077697e-02f, -1.227373378e-02f, -1.229666771e-02f, -1.231957873e-02f, -1.234246680e-02f, -1.236533187e-02f, -1.238817392e-02f, -1.241099291e-02f,
+-1.243378879e-02f, -1.245656153e-02f, -1.247931109e-02f, -1.250203743e-02f, -1.252474053e-02f, -1.254742033e-02f, -1.257007680e-02f, -1.259270990e-02f, -1.261531961e-02f, -1.263790587e-02f,
+-1.266046866e-02f, -1.268300792e-02f, -1.270552364e-02f, -1.272801577e-02f, -1.275048427e-02f, -1.277292911e-02f, -1.279535025e-02f, -1.281774764e-02f, -1.284012127e-02f, -1.286247108e-02f,
+-1.288479705e-02f, -1.290709913e-02f, -1.292937728e-02f, -1.295163148e-02f, -1.297386169e-02f, -1.299606786e-02f, -1.301824996e-02f, -1.304040796e-02f, -1.306254182e-02f, -1.308465150e-02f,
+-1.310673696e-02f, -1.312879817e-02f, -1.315083510e-02f, -1.317284770e-02f, -1.319483595e-02f, -1.321679980e-02f, -1.323873921e-02f, -1.326065416e-02f, -1.328254460e-02f, -1.330441051e-02f,
+-1.332625183e-02f, -1.334806855e-02f, -1.336986062e-02f, -1.339162800e-02f, -1.341337067e-02f, -1.343508858e-02f, -1.345678170e-02f, -1.347844999e-02f, -1.350009342e-02f, -1.352171195e-02f,
+-1.354330555e-02f, -1.356487418e-02f, -1.358641781e-02f, -1.360793640e-02f, -1.362942991e-02f, -1.365089831e-02f, -1.367234157e-02f, -1.369375965e-02f, -1.371515251e-02f, -1.373652012e-02f,
+-1.375786245e-02f, -1.377917945e-02f, -1.380047110e-02f, -1.382173736e-02f, -1.384297819e-02f, -1.386419356e-02f, -1.388538344e-02f, -1.390654779e-02f, -1.392768657e-02f, -1.394879975e-02f,
+-1.396988731e-02f, -1.399094919e-02f, -1.401198537e-02f, -1.403299581e-02f, -1.405398048e-02f, -1.407493934e-02f, -1.409587237e-02f, -1.411677952e-02f, -1.413766076e-02f, -1.415851606e-02f,
+-1.417934538e-02f, -1.420014869e-02f, -1.422092596e-02f, -1.424167715e-02f, -1.426240222e-02f, -1.428310115e-02f, -1.430377389e-02f, -1.432442042e-02f, -1.434504071e-02f, -1.436563471e-02f,
+-1.438620240e-02f, -1.440674373e-02f, -1.442725869e-02f, -1.444774723e-02f, -1.446820931e-02f, -1.448864492e-02f, -1.450905401e-02f, -1.452943655e-02f, -1.454979251e-02f, -1.457012185e-02f,
+-1.459042454e-02f, -1.461070055e-02f, -1.463094984e-02f, -1.465117239e-02f, -1.467136815e-02f, -1.469153710e-02f, -1.471167920e-02f, -1.473179442e-02f, -1.475188273e-02f, -1.477194410e-02f,
+-1.479197848e-02f, -1.481198585e-02f, -1.483196619e-02f, -1.485191944e-02f, -1.487184559e-02f, -1.489174459e-02f, -1.491161643e-02f, -1.493146105e-02f, -1.495127844e-02f, -1.497106856e-02f,
+-1.499083138e-02f, -1.501056686e-02f, -1.503027498e-02f, -1.504995569e-02f, -1.506960898e-02f, -1.508923480e-02f, -1.510883313e-02f, -1.512840394e-02f, -1.514794718e-02f, -1.516746284e-02f,
+-1.518695088e-02f, -1.520641126e-02f, -1.522584395e-02f, -1.524524893e-02f, -1.526462617e-02f, -1.528397562e-02f, -1.530329727e-02f, -1.532259107e-02f, -1.534185700e-02f, -1.536109502e-02f,
+-1.538030511e-02f, -1.539948723e-02f, -1.541864136e-02f, -1.543776745e-02f, -1.545686549e-02f, -1.547593544e-02f, -1.549497726e-02f, -1.551399093e-02f, -1.553297642e-02f, -1.555193369e-02f,
+-1.557086272e-02f, -1.558976348e-02f, -1.560863593e-02f, -1.562748004e-02f, -1.564629579e-02f, -1.566508314e-02f, -1.568384206e-02f, -1.570257252e-02f, -1.572127450e-02f, -1.573994795e-02f,
+-1.575859286e-02f, -1.577720919e-02f, -1.579579691e-02f, -1.581435599e-02f, -1.583288641e-02f, -1.585138812e-02f, -1.586986111e-02f, -1.588830533e-02f, -1.590672077e-02f, -1.592510740e-02f,
+-1.594346517e-02f, -1.596179407e-02f, -1.598009406e-02f, -1.599836511e-02f, -1.601660720e-02f, -1.603482030e-02f, -1.605300437e-02f, -1.607115939e-02f, -1.608928532e-02f, -1.610738214e-02f,
+-1.612544982e-02f, -1.614348834e-02f, -1.616149765e-02f, -1.617947773e-02f, -1.619742856e-02f, -1.621535010e-02f, -1.623324232e-02f, -1.625110521e-02f, -1.626893872e-02f, -1.628674283e-02f,
+-1.630451751e-02f, -1.632226273e-02f, -1.633997847e-02f, -1.635766469e-02f, -1.637532136e-02f, -1.639294847e-02f, -1.641054597e-02f, -1.642811385e-02f, -1.644565207e-02f, -1.646316061e-02f,
+-1.648063943e-02f, -1.649808852e-02f, -1.651550783e-02f, -1.653289735e-02f, -1.655025704e-02f, -1.656758689e-02f, -1.658488685e-02f, -1.660215690e-02f, -1.661939702e-02f, -1.663660718e-02f,
+-1.665378734e-02f, -1.667093749e-02f, -1.668805759e-02f, -1.670514762e-02f, -1.672220755e-02f, -1.673923735e-02f, -1.675623700e-02f, -1.677320647e-02f, -1.679014572e-02f, -1.680705475e-02f,
+-1.682393350e-02f, -1.684078197e-02f, -1.685760013e-02f, -1.687438793e-02f, -1.689114537e-02f, -1.690787241e-02f, -1.692456903e-02f, -1.694123520e-02f, -1.695787089e-02f, -1.697447608e-02f,
+-1.699105073e-02f, -1.700759483e-02f, -1.702410835e-02f, -1.704059126e-02f, -1.705704354e-02f, -1.707346515e-02f, -1.708985607e-02f, -1.710621629e-02f, -1.712254576e-02f, -1.713884447e-02f,
+-1.715511238e-02f, -1.717134948e-02f, -1.718755573e-02f, -1.720373112e-02f, -1.721987561e-02f, -1.723598918e-02f, -1.725207181e-02f, -1.726812346e-02f, -1.728414412e-02f, -1.730013376e-02f,
+-1.731609235e-02f, -1.733201986e-02f, -1.734791628e-02f, -1.736378157e-02f, -1.737961572e-02f, -1.739541869e-02f, -1.741119046e-02f, -1.742693101e-02f, -1.744264032e-02f, -1.745831834e-02f,
+-1.747396507e-02f, -1.748958048e-02f, -1.750516454e-02f, -1.752071723e-02f, -1.753623852e-02f, -1.755172839e-02f, -1.756718682e-02f, -1.758261377e-02f, -1.759800923e-02f, -1.761337317e-02f,
+-1.762870557e-02f, -1.764400640e-02f, -1.765927564e-02f, -1.767451327e-02f, -1.768971925e-02f, -1.770489358e-02f, -1.772003621e-02f, -1.773514713e-02f, -1.775022632e-02f, -1.776527375e-02f,
+-1.778028940e-02f, -1.779527324e-02f, -1.781022525e-02f, -1.782514541e-02f, -1.784003369e-02f, -1.785489008e-02f, -1.786971454e-02f, -1.788450705e-02f, -1.789926759e-02f, -1.791399614e-02f,
+-1.792869268e-02f, -1.794335717e-02f, -1.795798960e-02f, -1.797258995e-02f, -1.798715819e-02f, -1.800169430e-02f, -1.801619826e-02f, -1.803067004e-02f, -1.804510962e-02f, -1.805951698e-02f,
+-1.807389209e-02f, -1.808823494e-02f, -1.810254550e-02f, -1.811682375e-02f, -1.813106966e-02f, -1.814528322e-02f, -1.815946440e-02f, -1.817361319e-02f, -1.818772954e-02f, -1.820181346e-02f,
+-1.821586491e-02f, -1.822988387e-02f, -1.824387031e-02f, -1.825782423e-02f, -1.827174560e-02f, -1.828563438e-02f, -1.829949058e-02f, -1.831331415e-02f, -1.832710508e-02f, -1.834086336e-02f,
+-1.835458894e-02f, -1.836828183e-02f, -1.838194199e-02f, -1.839556940e-02f, -1.840916405e-02f, -1.842272590e-02f, -1.843625495e-02f, -1.844975116e-02f, -1.846321453e-02f, -1.847664502e-02f,
+-1.849004261e-02f, -1.850340730e-02f, -1.851673904e-02f, -1.853003784e-02f, -1.854330365e-02f, -1.855653647e-02f, -1.856973627e-02f, -1.858290304e-02f, -1.859603674e-02f, -1.860913737e-02f,
+-1.862220490e-02f, -1.863523931e-02f, -1.864824058e-02f, -1.866120870e-02f, -1.867414363e-02f, -1.868704537e-02f, -1.869991389e-02f, -1.871274916e-02f, -1.872555118e-02f, -1.873831993e-02f,
+-1.875105537e-02f, -1.876375750e-02f, -1.877642629e-02f, -1.878906173e-02f, -1.880166379e-02f, -1.881423245e-02f, -1.882676770e-02f, -1.883926952e-02f, -1.885173789e-02f, -1.886417278e-02f,
+-1.887657418e-02f, -1.888894207e-02f, -1.890127644e-02f, -1.891357726e-02f, -1.892584451e-02f, -1.893807817e-02f, -1.895027823e-02f, -1.896244467e-02f, -1.897457747e-02f, -1.898667661e-02f,
+-1.899874207e-02f, -1.901077383e-02f, -1.902277188e-02f, -1.903473620e-02f, -1.904666677e-02f, -1.905856356e-02f, -1.907042657e-02f, -1.908225578e-02f, -1.909405115e-02f, -1.910581269e-02f,
+-1.911754037e-02f, -1.912923417e-02f, -1.914089408e-02f, -1.915252008e-02f, -1.916411214e-02f, -1.917567026e-02f, -1.918719441e-02f, -1.919868458e-02f, -1.921014075e-02f, -1.922156290e-02f,
+-1.923295101e-02f, -1.924430508e-02f, -1.925562508e-02f, -1.926691099e-02f, -1.927816279e-02f, -1.928938048e-02f, -1.930056403e-02f, -1.931171343e-02f, -1.932282865e-02f, -1.933390969e-02f,
+-1.934495652e-02f, -1.935596914e-02f, -1.936694751e-02f, -1.937789164e-02f, -1.938880149e-02f, -1.939967705e-02f, -1.941051832e-02f, -1.942132526e-02f, -1.943209787e-02f, -1.944283613e-02f,
+-1.945354002e-02f, -1.946420953e-02f, -1.947484464e-02f, -1.948544533e-02f, -1.949601159e-02f, -1.950654341e-02f, -1.951704076e-02f, -1.952750363e-02f, -1.953793202e-02f, -1.954832589e-02f,
+-1.955868524e-02f, -1.956901004e-02f, -1.957930029e-02f, -1.958955598e-02f, -1.959977707e-02f, -1.960996357e-02f, -1.962011544e-02f, -1.963023269e-02f, -1.964031529e-02f, -1.965036323e-02f,
+-1.966037650e-02f, -1.967035507e-02f, -1.968029894e-02f, -1.969020809e-02f, -1.970008250e-02f, -1.970992216e-02f, -1.971972707e-02f, -1.972949719e-02f, -1.973923252e-02f, -1.974893304e-02f,
+-1.975859874e-02f, -1.976822961e-02f, -1.977782563e-02f, -1.978738678e-02f, -1.979691306e-02f, -1.980640445e-02f, -1.981586093e-02f, -1.982528249e-02f, -1.983466912e-02f, -1.984402080e-02f,
+-1.985333752e-02f, -1.986261927e-02f, -1.987186603e-02f, -1.988107779e-02f, -1.989025454e-02f, -1.989939626e-02f, -1.990850294e-02f, -1.991757456e-02f, -1.992661112e-02f, -1.993561260e-02f,
+-1.994457899e-02f, -1.995351027e-02f, -1.996240643e-02f, -1.997126746e-02f, -1.998009334e-02f, -1.998888407e-02f, -1.999763963e-02f, -2.000636001e-02f, -2.001504519e-02f, -2.002369516e-02f,
+-2.003230991e-02f, -2.004088944e-02f, -2.004943371e-02f, -2.005794273e-02f, -2.006641649e-02f, -2.007485496e-02f, -2.008325814e-02f, -2.009162601e-02f, -2.009995857e-02f, -2.010825580e-02f,
+-2.011651768e-02f, -2.012474422e-02f, -2.013293539e-02f, -2.014109119e-02f, -2.014921160e-02f, -2.015729661e-02f, -2.016534621e-02f, -2.017336039e-02f, -2.018133914e-02f, -2.018928245e-02f,
+-2.019719030e-02f, -2.020506268e-02f, -2.021289959e-02f, -2.022070101e-02f, -2.022846693e-02f, -2.023619734e-02f, -2.024389223e-02f, -2.025155159e-02f, -2.025917541e-02f, -2.026676368e-02f,
+-2.027431638e-02f, -2.028183351e-02f, -2.028931505e-02f, -2.029676100e-02f, -2.030417135e-02f, -2.031154608e-02f, -2.031888519e-02f, -2.032618866e-02f, -2.033345648e-02f, -2.034068865e-02f,
+-2.034788516e-02f, -2.035504599e-02f, -2.036217114e-02f, -2.036926059e-02f, -2.037631434e-02f, -2.038333237e-02f, -2.039031468e-02f, -2.039726126e-02f, -2.040417210e-02f, -2.041104718e-02f,
+-2.041788651e-02f, -2.042469006e-02f, -2.043145784e-02f, -2.043818982e-02f, -2.044488601e-02f, -2.045154639e-02f, -2.045817096e-02f, -2.046475970e-02f, -2.047131261e-02f, -2.047782968e-02f,
+-2.048431090e-02f, -2.049075626e-02f, -2.049716575e-02f, -2.050353936e-02f, -2.050987710e-02f, -2.051617893e-02f, -2.052244487e-02f, -2.052867490e-02f, -2.053486901e-02f, -2.054102719e-02f,
+-2.054714944e-02f, -2.055323575e-02f, -2.055928611e-02f, -2.056530051e-02f, -2.057127895e-02f, -2.057722141e-02f, -2.058312790e-02f, -2.058899839e-02f, -2.059483289e-02f, -2.060063138e-02f,
+-2.060639387e-02f, -2.061212034e-02f, -2.061781078e-02f, -2.062346518e-02f, -2.062908355e-02f, -2.063466587e-02f, -2.064021214e-02f, -2.064572235e-02f, -2.065119649e-02f, -2.065663455e-02f,
+-2.066203653e-02f, -2.066740243e-02f, -2.067273222e-02f, -2.067802592e-02f, -2.068328351e-02f, -2.068850499e-02f, -2.069369034e-02f, -2.069883956e-02f, -2.070395266e-02f, -2.070902961e-02f,
+-2.071407042e-02f, -2.071907507e-02f, -2.072404356e-02f, -2.072897590e-02f, -2.073387206e-02f, -2.073873204e-02f, -2.074355585e-02f, -2.074834346e-02f, -2.075309488e-02f, -2.075781011e-02f,
+-2.076248913e-02f, -2.076713194e-02f, -2.077173853e-02f, -2.077630891e-02f, -2.078084305e-02f, -2.078534097e-02f, -2.078980265e-02f, -2.079422809e-02f, -2.079861728e-02f, -2.080297022e-02f,
+-2.080728691e-02f, -2.081156733e-02f, -2.081581149e-02f, -2.082001937e-02f, -2.082419099e-02f, -2.082832632e-02f, -2.083242536e-02f, -2.083648812e-02f, -2.084051459e-02f, -2.084450475e-02f,
+-2.084845862e-02f, -2.085237618e-02f, -2.085625742e-02f, -2.086010236e-02f, -2.086391097e-02f, -2.086768327e-02f, -2.087141923e-02f, -2.087511887e-02f, -2.087878217e-02f, -2.088240913e-02f,
+-2.088599976e-02f, -2.088955403e-02f, -2.089307196e-02f, -2.089655354e-02f, -2.089999876e-02f, -2.090340762e-02f, -2.090678012e-02f, -2.091011626e-02f, -2.091341603e-02f, -2.091667942e-02f,
+-2.091990644e-02f, -2.092309709e-02f, -2.092625135e-02f, -2.092936923e-02f, -2.093245072e-02f, -2.093549583e-02f, -2.093850454e-02f, -2.094147686e-02f, -2.094441279e-02f, -2.094731231e-02f,
+-2.095017543e-02f, -2.095300215e-02f, -2.095579247e-02f, -2.095854637e-02f, -2.096126387e-02f, -2.096394495e-02f, -2.096658962e-02f, -2.096919787e-02f, -2.097176971e-02f, -2.097430512e-02f,
+-2.097680411e-02f, -2.097926668e-02f, -2.098169282e-02f, -2.098408254e-02f, -2.098643583e-02f, -2.098875269e-02f, -2.099103311e-02f, -2.099327711e-02f, -2.099548467e-02f, -2.099765579e-02f,
+-2.099979048e-02f, -2.100188874e-02f, -2.100395055e-02f, -2.100597593e-02f, -2.100796486e-02f, -2.100991736e-02f, -2.101183341e-02f, -2.101371302e-02f, -2.101555619e-02f, -2.101736292e-02f,
+-2.101913320e-02f, -2.102086703e-02f, -2.102256442e-02f, -2.102422537e-02f, -2.102584987e-02f, -2.102743793e-02f, -2.102898954e-02f, -2.103050470e-02f, -2.103198342e-02f, -2.103342569e-02f,
+-2.103483152e-02f, -2.103620090e-02f, -2.103753383e-02f, -2.103883032e-02f, -2.104009037e-02f, -2.104131397e-02f, -2.104250113e-02f, -2.104365185e-02f, -2.104476612e-02f, -2.104584395e-02f,
+-2.104688534e-02f, -2.104789029e-02f, -2.104885881e-02f, -2.104979088e-02f, -2.105068651e-02f, -2.105154571e-02f, -2.105236848e-02f, -2.105315481e-02f, -2.105390470e-02f, -2.105461817e-02f,
+-2.105529521e-02f, -2.105593581e-02f, -2.105653999e-02f, -2.105710775e-02f, -2.105763908e-02f, -2.105813399e-02f, -2.105859248e-02f, -2.105901454e-02f, -2.105940020e-02f, -2.105974943e-02f,
+-2.106006226e-02f, -2.106033867e-02f, -2.106057868e-02f, -2.106078228e-02f, -2.106094947e-02f, -2.106108026e-02f, -2.106117466e-02f, -2.106123265e-02f, -2.106125426e-02f, -2.106123947e-02f,
+-2.106118829e-02f, -2.106110072e-02f, -2.106097677e-02f, -2.106081644e-02f, -2.106061973e-02f, -2.106038664e-02f, -2.106011718e-02f, -2.105981136e-02f, -2.105946916e-02f, -2.105909061e-02f,
+-2.105867569e-02f, -2.105822442e-02f, -2.105773680e-02f, -2.105721282e-02f, -2.105665250e-02f, -2.105605584e-02f, -2.105542284e-02f, -2.105475350e-02f, -2.105404783e-02f, -2.105330584e-02f,
+-2.105252752e-02f, -2.105171288e-02f, -2.105086192e-02f, -2.104997466e-02f, -2.104905108e-02f, -2.104809121e-02f, -2.104709503e-02f, -2.104606256e-02f, -2.104499379e-02f, -2.104388875e-02f,
+-2.104274742e-02f, -2.104156981e-02f, -2.104035593e-02f, -2.103910579e-02f, -2.103781938e-02f, -2.103649671e-02f, -2.103513779e-02f, -2.103374262e-02f, -2.103231121e-02f, -2.103084356e-02f,
+-2.102933968e-02f, -2.102779956e-02f, -2.102622323e-02f, -2.102461068e-02f, -2.102296192e-02f, -2.102127695e-02f, -2.101955578e-02f, -2.101779841e-02f, -2.101600485e-02f, -2.101417511e-02f,
+-2.101230920e-02f, -2.101040711e-02f, -2.100846885e-02f, -2.100649443e-02f, -2.100448386e-02f, -2.100243713e-02f, -2.100035427e-02f, -2.099823527e-02f, -2.099608014e-02f, -2.099388888e-02f,
+-2.099166151e-02f, -2.098939802e-02f, -2.098709843e-02f, -2.098476275e-02f, -2.098239097e-02f, -2.097998310e-02f, -2.097753916e-02f, -2.097505915e-02f, -2.097254307e-02f, -2.096999094e-02f,
+-2.096740275e-02f, -2.096477852e-02f, -2.096211826e-02f, -2.095942196e-02f, -2.095668965e-02f, -2.095392132e-02f, -2.095111698e-02f, -2.094827664e-02f, -2.094540031e-02f, -2.094248799e-02f,
+-2.093953970e-02f, -2.093655543e-02f, -2.093353521e-02f, -2.093047903e-02f, -2.092738690e-02f, -2.092425884e-02f, -2.092109484e-02f, -2.091789493e-02f, -2.091465910e-02f, -2.091138736e-02f,
+-2.090807972e-02f, -2.090473620e-02f, -2.090135679e-02f, -2.089794151e-02f, -2.089449036e-02f, -2.089100336e-02f, -2.088748051e-02f, -2.088392183e-02f, -2.088032731e-02f, -2.087669697e-02f,
+-2.087303082e-02f, -2.086932887e-02f, -2.086559112e-02f, -2.086181758e-02f, -2.085800827e-02f, -2.085416319e-02f, -2.085028235e-02f, -2.084636576e-02f, -2.084241344e-02f, -2.083842538e-02f,
+-2.083440160e-02f, -2.083034211e-02f, -2.082624692e-02f, -2.082211604e-02f, -2.081794947e-02f, -2.081374723e-02f, -2.080950933e-02f, -2.080523577e-02f, -2.080092658e-02f, -2.079658174e-02f,
+-2.079220129e-02f, -2.078778522e-02f, -2.078333355e-02f, -2.077884628e-02f, -2.077432344e-02f, -2.076976502e-02f, -2.076517104e-02f, -2.076054150e-02f, -2.075587643e-02f, -2.075117583e-02f,
+-2.074643970e-02f, -2.074166807e-02f, -2.073686094e-02f, -2.073201833e-02f, -2.072714023e-02f, -2.072222667e-02f, -2.071727766e-02f, -2.071229320e-02f, -2.070727332e-02f, -2.070221801e-02f,
+-2.069712729e-02f, -2.069200117e-02f, -2.068683966e-02f, -2.068164278e-02f, -2.067641054e-02f, -2.067114294e-02f, -2.066584001e-02f, -2.066050174e-02f, -2.065512815e-02f, -2.064971926e-02f,
+-2.064427508e-02f, -2.063879561e-02f, -2.063328087e-02f, -2.062773088e-02f, -2.062214564e-02f, -2.061652517e-02f, -2.061086947e-02f, -2.060517857e-02f, -2.059945246e-02f, -2.059369118e-02f,
+-2.058789472e-02f, -2.058206310e-02f, -2.057619634e-02f, -2.057029444e-02f, -2.056435742e-02f, -2.055838529e-02f, -2.055237806e-02f, -2.054633575e-02f, -2.054025837e-02f, -2.053414593e-02f,
+-2.052799845e-02f, -2.052181594e-02f, -2.051559841e-02f, -2.050934587e-02f, -2.050305835e-02f, -2.049673584e-02f, -2.049037837e-02f, -2.048398595e-02f, -2.047755859e-02f, -2.047109631e-02f,
+-2.046459912e-02f, -2.045806703e-02f, -2.045150006e-02f, -2.044489821e-02f, -2.043826152e-02f, -2.043158998e-02f, -2.042488361e-02f, -2.041814243e-02f, -2.041136645e-02f, -2.040455569e-02f,
+-2.039771015e-02f, -2.039082986e-02f, -2.038391483e-02f, -2.037696507e-02f, -2.036998059e-02f, -2.036296142e-02f, -2.035590756e-02f, -2.034881904e-02f, -2.034169585e-02f, -2.033453803e-02f,
+-2.032734558e-02f, -2.032011853e-02f, -2.031285687e-02f, -2.030556064e-02f, -2.029822984e-02f, -2.029086449e-02f, -2.028346461e-02f, -2.027603020e-02f, -2.026856129e-02f, -2.026105790e-02f,
+-2.025352003e-02f, -2.024594770e-02f, -2.023834092e-02f, -2.023069972e-02f, -2.022302411e-02f, -2.021531410e-02f, -2.020756972e-02f, -2.019979096e-02f, -2.019197786e-02f, -2.018413043e-02f,
+-2.017624868e-02f, -2.016833263e-02f, -2.016038230e-02f, -2.015239769e-02f, -2.014437884e-02f, -2.013632575e-02f, -2.012823844e-02f, -2.012011693e-02f, -2.011196123e-02f, -2.010377136e-02f,
+-2.009554734e-02f, -2.008728918e-02f, -2.007899690e-02f, -2.007067051e-02f, -2.006231004e-02f, -2.005391551e-02f, -2.004548691e-02f, -2.003702429e-02f, -2.002852764e-02f, -2.001999699e-02f,
+-2.001143236e-02f, -2.000283376e-02f, -1.999420121e-02f, -1.998553472e-02f, -1.997683432e-02f, -1.996810003e-02f, -1.995933185e-02f, -1.995052981e-02f, -1.994169392e-02f, -1.993282421e-02f,
+-1.992392069e-02f, -1.991498337e-02f, -1.990601228e-02f, -1.989700744e-02f, -1.988796885e-02f, -1.987889654e-02f, -1.986979054e-02f, -1.986065084e-02f, -1.985147749e-02f, -1.984227048e-02f,
+-1.983302984e-02f, -1.982375559e-02f, -1.981444775e-02f, -1.980510634e-02f, -1.979573137e-02f, -1.978632286e-02f, -1.977688083e-02f, -1.976740530e-02f, -1.975789630e-02f, -1.974835382e-02f,
+-1.973877791e-02f, -1.972916857e-02f, -1.971952582e-02f, -1.970984969e-02f, -1.970014019e-02f, -1.969039734e-02f, -1.968062116e-02f, -1.967081168e-02f, -1.966096890e-02f, -1.965109285e-02f,
+-1.964118354e-02f, -1.963124101e-02f, -1.962126526e-02f, -1.961125632e-02f, -1.960121420e-02f, -1.959113893e-02f, -1.958103052e-02f, -1.957088900e-02f, -1.956071439e-02f, -1.955050670e-02f,
+-1.954026596e-02f, -1.952999218e-02f, -1.951968538e-02f, -1.950934559e-02f, -1.949897283e-02f, -1.948856711e-02f, -1.947812846e-02f, -1.946765690e-02f, -1.945715244e-02f, -1.944661511e-02f,
+-1.943604493e-02f, -1.942544191e-02f, -1.941480609e-02f, -1.940413747e-02f, -1.939343609e-02f, -1.938270195e-02f, -1.937193509e-02f, -1.936113552e-02f, -1.935030327e-02f, -1.933943835e-02f,
+-1.932854079e-02f, -1.931761060e-02f, -1.930664781e-02f, -1.929565245e-02f, -1.928462452e-02f, -1.927356405e-02f, -1.926247107e-02f, -1.925134560e-02f, -1.924018765e-02f, -1.922899725e-02f,
+-1.921777442e-02f, -1.920651918e-02f, -1.919523155e-02f, -1.918391156e-02f, -1.917255923e-02f, -1.916117457e-02f, -1.914975762e-02f, -1.913830839e-02f, -1.912682690e-02f, -1.911531318e-02f,
+-1.910376725e-02f, -1.909218913e-02f, -1.908057884e-02f, -1.906893641e-02f, -1.905726186e-02f, -1.904555521e-02f, -1.903381648e-02f, -1.902204570e-02f, -1.901024289e-02f, -1.899840806e-02f,
+-1.898654126e-02f, -1.897464248e-02f, -1.896271177e-02f, -1.895074914e-02f, -1.893875461e-02f, -1.892672821e-02f, -1.891466997e-02f, -1.890257989e-02f, -1.889045802e-02f, -1.887830436e-02f,
+-1.886611895e-02f, -1.885390181e-02f, -1.884165295e-02f, -1.882937241e-02f, -1.881706021e-02f, -1.880471636e-02f, -1.879234090e-02f, -1.877993385e-02f, -1.876749523e-02f, -1.875502507e-02f,
+-1.874252338e-02f, -1.872999020e-02f, -1.871742554e-02f, -1.870482944e-02f, -1.869220191e-02f, -1.867954297e-02f, -1.866685266e-02f, -1.865413100e-02f, -1.864137801e-02f, -1.862859371e-02f,
+-1.861577813e-02f, -1.860293130e-02f, -1.859005323e-02f, -1.857714396e-02f, -1.856420350e-02f, -1.855123189e-02f, -1.853822914e-02f, -1.852519528e-02f, -1.851213034e-02f, -1.849903434e-02f,
+-1.848590730e-02f, -1.847274926e-02f, -1.845956022e-02f, -1.844634023e-02f, -1.843308931e-02f, -1.841980747e-02f, -1.840649475e-02f, -1.839315117e-02f, -1.837977675e-02f, -1.836637153e-02f,
+-1.835293552e-02f, -1.833946875e-02f, -1.832597125e-02f, -1.831244305e-02f, -1.829888416e-02f, -1.828529461e-02f, -1.827167443e-02f, -1.825802365e-02f, -1.824434229e-02f, -1.823063037e-02f,
+-1.821688793e-02f, -1.820311499e-02f, -1.818931157e-02f, -1.817547770e-02f, -1.816161340e-02f, -1.814771871e-02f, -1.813379364e-02f, -1.811983823e-02f, -1.810585251e-02f, -1.809183648e-02f,
+-1.807779019e-02f, -1.806371367e-02f, -1.804960692e-02f, -1.803546999e-02f, -1.802130290e-02f, -1.800710568e-02f, -1.799287834e-02f, -1.797862093e-02f, -1.796433346e-02f, -1.795001597e-02f,
+-1.793566847e-02f, -1.792129100e-02f, -1.790688359e-02f, -1.789244625e-02f, -1.787797902e-02f, -1.786348193e-02f, -1.784895500e-02f, -1.783439825e-02f, -1.781981173e-02f, -1.780519544e-02f,
+-1.779054943e-02f, -1.777587372e-02f, -1.776116833e-02f, -1.774643329e-02f, -1.773166863e-02f, -1.771687439e-02f, -1.770205058e-02f, -1.768719723e-02f, -1.767231437e-02f, -1.765740203e-02f,
+-1.764246024e-02f, -1.762748902e-02f, -1.761248841e-02f, -1.759745842e-02f, -1.758239910e-02f, -1.756731046e-02f, -1.755219254e-02f, -1.753704536e-02f, -1.752186895e-02f, -1.750666334e-02f,
+-1.749142855e-02f, -1.747616463e-02f, -1.746087159e-02f, -1.744554946e-02f, -1.743019827e-02f, -1.741481805e-02f, -1.739940883e-02f, -1.738397064e-02f, -1.736850351e-02f, -1.735300746e-02f,
+-1.733748252e-02f, -1.732192873e-02f, -1.730634610e-02f, -1.729073468e-02f, -1.727509449e-02f, -1.725942555e-02f, -1.724372790e-02f, -1.722800157e-02f, -1.721224659e-02f, -1.719646297e-02f,
+-1.718065077e-02f, -1.716480999e-02f, -1.714894068e-02f, -1.713304287e-02f, -1.711711657e-02f, -1.710116182e-02f, -1.708517866e-02f, -1.706916711e-02f, -1.705312719e-02f, -1.703705895e-02f,
+-1.702096240e-02f, -1.700483759e-02f, -1.698868453e-02f, -1.697250326e-02f, -1.695629381e-02f, -1.694005621e-02f, -1.692379049e-02f, -1.690749668e-02f, -1.689117481e-02f, -1.687482491e-02f,
+-1.685844700e-02f, -1.684204113e-02f, -1.682560731e-02f, -1.680914559e-02f, -1.679265599e-02f, -1.677613853e-02f, -1.675959326e-02f, -1.674302021e-02f, -1.672641939e-02f, -1.670979085e-02f,
+-1.669313461e-02f, -1.667645071e-02f, -1.665973917e-02f, -1.664300003e-02f, -1.662623331e-02f, -1.660943906e-02f, -1.659261729e-02f, -1.657576804e-02f, -1.655889135e-02f, -1.654198724e-02f,
+-1.652505573e-02f, -1.650809688e-02f, -1.649111070e-02f, -1.647409722e-02f, -1.645705649e-02f, -1.643998852e-02f, -1.642289336e-02f, -1.640577102e-02f, -1.638862155e-02f, -1.637144498e-02f,
+-1.635424133e-02f, -1.633701065e-02f, -1.631975295e-02f, -1.630246827e-02f, -1.628515665e-02f, -1.626781811e-02f, -1.625045269e-02f, -1.623306042e-02f, -1.621564133e-02f, -1.619819545e-02f,
+-1.618072282e-02f, -1.616322346e-02f, -1.614569742e-02f, -1.612814471e-02f, -1.611056538e-02f, -1.609295946e-02f, -1.607532697e-02f, -1.605766795e-02f, -1.603998244e-02f, -1.602227046e-02f,
+-1.600453205e-02f, -1.598676723e-02f, -1.596897605e-02f, -1.595115854e-02f, -1.593331472e-02f, -1.591544464e-02f, -1.589754831e-02f, -1.587962579e-02f, -1.586167709e-02f, -1.584370225e-02f,
+-1.582570131e-02f, -1.580767429e-02f, -1.578962124e-02f, -1.577154217e-02f, -1.575343714e-02f, -1.573530616e-02f, -1.571714928e-02f, -1.569896652e-02f, -1.568075792e-02f, -1.566252351e-02f,
+-1.564426333e-02f, -1.562597740e-02f, -1.560766577e-02f, -1.558932847e-02f, -1.557096552e-02f, -1.555257697e-02f, -1.553416284e-02f, -1.551572317e-02f, -1.549725799e-02f, -1.547876735e-02f,
+-1.546025126e-02f, -1.544170977e-02f, -1.542314290e-02f, -1.540455070e-02f, -1.538593319e-02f, -1.536729042e-02f, -1.534862240e-02f, -1.532992919e-02f, -1.531121081e-02f, -1.529246729e-02f,
+-1.527369867e-02f, -1.525490499e-02f, -1.523608628e-02f, -1.521724257e-02f, -1.519837389e-02f, -1.517948029e-02f, -1.516056179e-02f, -1.514161844e-02f, -1.512265026e-02f, -1.510365728e-02f,
+-1.508463956e-02f, -1.506559711e-02f, -1.504652997e-02f, -1.502743818e-02f, -1.500832177e-02f, -1.498918078e-02f, -1.497001524e-02f, -1.495082519e-02f, -1.493161066e-02f, -1.491237169e-02f,
+-1.489310830e-02f, -1.487382055e-02f, -1.485450845e-02f, -1.483517205e-02f, -1.481581139e-02f, -1.479642649e-02f, -1.477701739e-02f, -1.475758413e-02f, -1.473812674e-02f, -1.471864525e-02f,
+-1.469913971e-02f, -1.467961015e-02f, -1.466005661e-02f, -1.464047911e-02f, -1.462087769e-02f, -1.460125240e-02f, -1.458160326e-02f, -1.456193031e-02f, -1.454223359e-02f, -1.452251314e-02f,
+-1.450276898e-02f, -1.448300115e-02f, -1.446320970e-02f, -1.444339465e-02f, -1.442355604e-02f, -1.440369391e-02f, -1.438380829e-02f, -1.436389922e-02f, -1.434396674e-02f, -1.432401088e-02f,
+-1.430403168e-02f, -1.428402917e-02f, -1.426400339e-02f, -1.424395437e-02f, -1.422388216e-02f, -1.420378679e-02f, -1.418366829e-02f, -1.416352670e-02f, -1.414336207e-02f, -1.412317441e-02f,
+-1.410296378e-02f, -1.408273020e-02f, -1.406247372e-02f, -1.404219436e-02f, -1.402189218e-02f, -1.400156719e-02f, -1.398121945e-02f, -1.396084898e-02f, -1.394045583e-02f, -1.392004003e-02f,
+-1.389960162e-02f, -1.387914063e-02f, -1.385865710e-02f, -1.383815107e-02f, -1.381762257e-02f, -1.379707165e-02f, -1.377649833e-02f, -1.375590267e-02f, -1.373528468e-02f, -1.371464442e-02f,
+-1.369398191e-02f, -1.367329720e-02f, -1.365259032e-02f, -1.363186131e-02f, -1.361111021e-02f, -1.359033705e-02f, -1.356954187e-02f, -1.354872471e-02f, -1.352788561e-02f, -1.350702461e-02f,
+-1.348614173e-02f, -1.346523703e-02f, -1.344431053e-02f, -1.342336227e-02f, -1.340239230e-02f, -1.338140065e-02f, -1.336038735e-02f, -1.333935246e-02f, -1.331829599e-02f, -1.329721800e-02f,
+-1.327611851e-02f, -1.325499757e-02f, -1.323385522e-02f, -1.321269149e-02f, -1.319150642e-02f, -1.317030006e-02f, -1.314907242e-02f, -1.312782357e-02f, -1.310655352e-02f, -1.308526233e-02f,
+-1.306395003e-02f, -1.304261666e-02f, -1.302126225e-02f, -1.299988685e-02f, -1.297849050e-02f, -1.295707322e-02f, -1.293563507e-02f, -1.291417607e-02f, -1.289269627e-02f, -1.287119571e-02f,
+-1.284967442e-02f, -1.282813244e-02f, -1.280656982e-02f, -1.278498658e-02f, -1.276338278e-02f, -1.274175844e-02f, -1.272011361e-02f, -1.269844833e-02f, -1.267676263e-02f, -1.265505655e-02f,
+-1.263333013e-02f, -1.261158342e-02f, -1.258981644e-02f, -1.256802924e-02f, -1.254622187e-02f, -1.252439434e-02f, -1.250254672e-02f, -1.248067903e-02f, -1.245879131e-02f, -1.243688361e-02f,
+-1.241495596e-02f, -1.239300840e-02f, -1.237104098e-02f, -1.234905372e-02f, -1.232704668e-02f, -1.230501988e-02f, -1.228297337e-02f, -1.226090719e-02f, -1.223882138e-02f, -1.221671598e-02f,
+-1.219459102e-02f, -1.217244655e-02f, -1.215028261e-02f, -1.212809923e-02f, -1.210589645e-02f, -1.208367432e-02f, -1.206143288e-02f, -1.203917216e-02f, -1.201689220e-02f, -1.199459305e-02f,
+-1.197227474e-02f, -1.194993732e-02f, -1.192758082e-02f, -1.190520528e-02f, -1.188281075e-02f, -1.186039726e-02f, -1.183796485e-02f, -1.181551357e-02f, -1.179304345e-02f, -1.177055453e-02f,
+-1.174804686e-02f, -1.172552048e-02f, -1.170297541e-02f, -1.168041172e-02f, -1.165782942e-02f, -1.163522857e-02f, -1.161260921e-02f, -1.158997137e-02f, -1.156731510e-02f, -1.154464044e-02f,
+-1.152194742e-02f, -1.149923609e-02f, -1.147650649e-02f, -1.145375866e-02f, -1.143099263e-02f, -1.140820846e-02f, -1.138540617e-02f, -1.136258582e-02f, -1.133974744e-02f, -1.131689107e-02f,
+-1.129401675e-02f, -1.127112453e-02f, -1.124821444e-02f, -1.122528653e-02f, -1.120234083e-02f, -1.117937739e-02f, -1.115639625e-02f, -1.113339745e-02f, -1.111038102e-02f, -1.108734702e-02f,
+-1.106429548e-02f, -1.104122644e-02f, -1.101813995e-02f, -1.099503604e-02f, -1.097191475e-02f, -1.094877614e-02f, -1.092562023e-02f, -1.090244707e-02f, -1.087925670e-02f, -1.085604916e-02f,
+-1.083282450e-02f, -1.080958275e-02f, -1.078632396e-02f, -1.076304816e-02f, -1.073975541e-02f, -1.071644573e-02f, -1.069311917e-02f, -1.066977578e-02f, -1.064641559e-02f, -1.062303865e-02f,
+-1.059964499e-02f, -1.057623467e-02f, -1.055280771e-02f, -1.052936417e-02f, -1.050590408e-02f, -1.048242748e-02f, -1.045893442e-02f, -1.043542495e-02f, -1.041189909e-02f, -1.038835689e-02f,
+-1.036479840e-02f, -1.034122365e-02f, -1.031763270e-02f, -1.029402557e-02f, -1.027040231e-02f, -1.024676297e-02f, -1.022310758e-02f, -1.019943619e-02f, -1.017574883e-02f, -1.015204556e-02f,
+-1.012832642e-02f, -1.010459143e-02f, -1.008084066e-02f, -1.005707414e-02f, -1.003329190e-02f, -1.000949400e-02f, -9.985680481e-03f, -9.961851376e-03f, -9.938006732e-03f, -9.914146591e-03f,
+-9.890270995e-03f, -9.866379986e-03f, -9.842473607e-03f, -9.818551899e-03f, -9.794614906e-03f, -9.770662670e-03f, -9.746695234e-03f, -9.722712638e-03f, -9.698714927e-03f, -9.674702143e-03f,
+-9.650674328e-03f, -9.626631524e-03f, -9.602573775e-03f, -9.578501122e-03f, -9.554413609e-03f, -9.530311277e-03f, -9.506194171e-03f, -9.482062332e-03f, -9.457915803e-03f, -9.433754626e-03f,
+-9.409578845e-03f, -9.385388503e-03f, -9.361183641e-03f, -9.336964303e-03f, -9.312730532e-03f, -9.288482370e-03f, -9.264219861e-03f, -9.239943047e-03f, -9.215651971e-03f, -9.191346677e-03f,
+-9.167027206e-03f, -9.142693602e-03f, -9.118345909e-03f, -9.093984168e-03f, -9.069608424e-03f, -9.045218719e-03f, -9.020815096e-03f, -8.996397598e-03f, -8.971966269e-03f, -8.947521152e-03f,
+-8.923062289e-03f, -8.898589725e-03f, -8.874103501e-03f, -8.849603662e-03f, -8.825090251e-03f, -8.800563310e-03f, -8.776022884e-03f, -8.751469016e-03f, -8.726901748e-03f, -8.702321125e-03f,
+-8.677727189e-03f, -8.653119984e-03f, -8.628499553e-03f, -8.603865941e-03f, -8.579219189e-03f, -8.554559342e-03f, -8.529886444e-03f, -8.505200537e-03f, -8.480501666e-03f, -8.455789873e-03f,
+-8.431065203e-03f, -8.406327699e-03f, -8.381577404e-03f, -8.356814363e-03f, -8.332038618e-03f, -8.307250214e-03f, -8.282449195e-03f, -8.257635603e-03f, -8.232809482e-03f, -8.207970877e-03f,
+-8.183119831e-03f, -8.158256388e-03f, -8.133380592e-03f, -8.108492486e-03f, -8.083592114e-03f, -8.058679520e-03f, -8.033754749e-03f, -8.008817843e-03f, -7.983868847e-03f, -7.958907805e-03f,
+-7.933934761e-03f, -7.908949758e-03f, -7.883952840e-03f, -7.858944053e-03f, -7.833923438e-03f, -7.808891042e-03f, -7.783846906e-03f, -7.758791077e-03f, -7.733723597e-03f, -7.708644512e-03f,
+-7.683553864e-03f, -7.658451698e-03f, -7.633338058e-03f, -7.608212989e-03f, -7.583076534e-03f, -7.557928738e-03f, -7.532769645e-03f, -7.507599300e-03f, -7.482417745e-03f, -7.457225026e-03f,
+-7.432021188e-03f, -7.406806273e-03f, -7.381580327e-03f, -7.356343394e-03f, -7.331095518e-03f, -7.305836743e-03f, -7.280567115e-03f, -7.255286676e-03f, -7.229995473e-03f, -7.204693548e-03f,
+-7.179380947e-03f, -7.154057714e-03f, -7.128723894e-03f, -7.103379530e-03f, -7.078024668e-03f, -7.052659352e-03f, -7.027283626e-03f, -7.001897535e-03f, -6.976501124e-03f, -6.951094436e-03f,
+-6.925677518e-03f, -6.900250412e-03f, -6.874813165e-03f, -6.849365820e-03f, -6.823908422e-03f, -6.798441016e-03f, -6.772963646e-03f, -6.747476358e-03f, -6.721979195e-03f, -6.696472203e-03f,
+-6.670955426e-03f, -6.645428910e-03f, -6.619892697e-03f, -6.594346835e-03f, -6.568791366e-03f, -6.543226337e-03f, -6.517651792e-03f, -6.492067775e-03f, -6.466474332e-03f, -6.440871507e-03f,
+-6.415259345e-03f, -6.389637892e-03f, -6.364007191e-03f, -6.338367288e-03f, -6.312718228e-03f, -6.287060056e-03f, -6.261392816e-03f, -6.235716554e-03f, -6.210031314e-03f, -6.184337142e-03f,
+-6.158634083e-03f, -6.132922180e-03f, -6.107201481e-03f, -6.081472028e-03f, -6.055733869e-03f, -6.029987046e-03f, -6.004231607e-03f, -5.978467595e-03f, -5.952695056e-03f, -5.926914034e-03f,
+-5.901124576e-03f, -5.875326726e-03f, -5.849520529e-03f, -5.823706030e-03f, -5.797883274e-03f, -5.772052308e-03f, -5.746213175e-03f, -5.720365920e-03f, -5.694510591e-03f, -5.668647230e-03f,
+-5.642775884e-03f, -5.616896598e-03f, -5.591009417e-03f, -5.565114386e-03f, -5.539211550e-03f, -5.513300955e-03f, -5.487382647e-03f, -5.461456669e-03f, -5.435523069e-03f, -5.409581890e-03f,
+-5.383633178e-03f, -5.357676979e-03f, -5.331713338e-03f, -5.305742300e-03f, -5.279763911e-03f, -5.253778215e-03f, -5.227785259e-03f, -5.201785088e-03f, -5.175777747e-03f, -5.149763281e-03f,
+-5.123741736e-03f, -5.097713157e-03f, -5.071677590e-03f, -5.045635081e-03f, -5.019585673e-03f, -4.993529414e-03f, -4.967466349e-03f, -4.941396522e-03f, -4.915319980e-03f, -4.889236768e-03f,
+-4.863146931e-03f, -4.837050515e-03f, -4.810947566e-03f, -4.784838129e-03f, -4.758722249e-03f, -4.732599972e-03f, -4.706471344e-03f, -4.680336410e-03f, -4.654195216e-03f, -4.628047807e-03f,
+-4.601894229e-03f, -4.575734527e-03f, -4.549568747e-03f, -4.523396935e-03f, -4.497219136e-03f, -4.471035396e-03f, -4.444845760e-03f, -4.418650274e-03f, -4.392448984e-03f, -4.366241936e-03f,
+-4.340029174e-03f, -4.313810745e-03f, -4.287586694e-03f, -4.261357067e-03f, -4.235121910e-03f, -4.208881268e-03f, -4.182635187e-03f, -4.156383713e-03f, -4.130126891e-03f, -4.103864767e-03f,
+-4.077597387e-03f, -4.051324796e-03f, -4.025047040e-03f, -3.998764166e-03f, -3.972476218e-03f, -3.946183243e-03f, -3.919885285e-03f, -3.893582392e-03f, -3.867274608e-03f, -3.840961979e-03f,
+-3.814644552e-03f, -3.788322372e-03f, -3.761995484e-03f, -3.735663935e-03f, -3.709327770e-03f, -3.682987035e-03f, -3.656641776e-03f, -3.630292039e-03f, -3.603937869e-03f, -3.577579312e-03f,
+-3.551216414e-03f, -3.524849221e-03f, -3.498477779e-03f, -3.472102134e-03f, -3.445722330e-03f, -3.419338415e-03f, -3.392950434e-03f, -3.366558433e-03f, -3.340162457e-03f, -3.313762553e-03f,
+-3.287358766e-03f, -3.260951143e-03f, -3.234539728e-03f, -3.208124569e-03f, -3.181705710e-03f, -3.155283198e-03f, -3.128857079e-03f, -3.102427398e-03f, -3.075994201e-03f, -3.049557534e-03f,
+-3.023117444e-03f, -2.996673975e-03f, -2.970227175e-03f, -2.943777088e-03f, -2.917323760e-03f, -2.890867238e-03f, -2.864407567e-03f, -2.837944794e-03f, -2.811478964e-03f, -2.785010123e-03f,
+-2.758538317e-03f, -2.732063592e-03f, -2.705585994e-03f, -2.679105568e-03f, -2.652622361e-03f, -2.626136419e-03f, -2.599647787e-03f, -2.573156511e-03f, -2.546662638e-03f, -2.520166213e-03f,
+-2.493667282e-03f, -2.467165891e-03f, -2.440662086e-03f, -2.414155913e-03f, -2.387647418e-03f, -2.361136646e-03f, -2.334623644e-03f, -2.308108458e-03f, -2.281591133e-03f, -2.255071716e-03f,
+-2.228550252e-03f, -2.202026788e-03f, -2.175501368e-03f, -2.148974040e-03f, -2.122444849e-03f, -2.095913841e-03f, -2.069381062e-03f, -2.042846558e-03f, -2.016310375e-03f, -1.989772558e-03f,
+-1.963233154e-03f, -1.936692208e-03f, -1.910149768e-03f, -1.883605877e-03f, -1.857060583e-03f, -1.830513931e-03f, -1.803965968e-03f, -1.777416738e-03f, -1.750866289e-03f, -1.724314665e-03f,
+-1.697761914e-03f, -1.671208080e-03f, -1.644653210e-03f, -1.618097350e-03f, -1.591540545e-03f, -1.564982842e-03f, -1.538424286e-03f, -1.511864923e-03f, -1.485304800e-03f, -1.458743961e-03f,
+-1.432182454e-03f, -1.405620324e-03f, -1.379057616e-03f, -1.352494377e-03f, -1.325930653e-03f, -1.299366489e-03f, -1.272801931e-03f, -1.246237026e-03f, -1.219671819e-03f, -1.193106356e-03f,
+-1.166540683e-03f, -1.139974846e-03f, -1.113408890e-03f, -1.086842862e-03f, -1.060276807e-03f, -1.033710772e-03f, -1.007144801e-03f, -9.805789422e-04f, -9.540132396e-04f, -9.274477398e-04f,
+-9.008824885e-04f, -8.743175316e-04f, -8.477529149e-04f, -8.211886843e-04f, -7.946248855e-04f, -7.680615645e-04f, -7.414987670e-04f, -7.149365389e-04f, -6.883749259e-04f, -6.618139739e-04f,
+-6.352537287e-04f, -6.086942361e-04f, -5.821355420e-04f, -5.555776920e-04f, -5.290207319e-04f, -5.024647077e-04f, -4.759096650e-04f, -4.493556496e-04f, -4.228027073e-04f, -3.962508838e-04f,
+-3.697002250e-04f, -3.431507765e-04f, -3.166025842e-04f, -2.900556937e-04f, -2.635101508e-04f, -2.369660013e-04f, -2.104232908e-04f, -1.838820651e-04f, -1.573423699e-04f, -1.308042509e-04f,
+-1.042677538e-04f, -7.773292437e-05f, -5.119980821e-05f, -2.466845105e-05f, 1.861101446e-06f, 2.838880359e-05f, 5.491460973e-05f, 8.143847418e-05f, 1.079603513e-04f, 1.344801955e-04f,
+1.609979610e-04f, 1.875136023e-04f, 2.140270737e-04f, 2.405383296e-04f, 2.670473244e-04f, 2.935540125e-04f, 3.200583482e-04f, 3.465602860e-04f, 3.730597804e-04f, 3.995567857e-04f,
+4.260512563e-04f, 4.525431467e-04f, 4.790324113e-04f, 5.055190047e-04f, 5.320028812e-04f, 5.584839953e-04f, 5.849623015e-04f, 6.114377543e-04f, 6.379103082e-04f, 6.643799176e-04f,
+6.908465371e-04f, 7.173101213e-04f, 7.437706245e-04f, 7.702280014e-04f, 7.966822065e-04f, 8.231331944e-04f, 8.495809196e-04f, 8.760253366e-04f, 9.024664001e-04f, 9.289040647e-04f,
+9.553382849e-04f, 9.817690154e-04f, 1.008196211e-03f, 1.034619825e-03f, 1.061039814e-03f, 1.087456132e-03f, 1.113868733e-03f, 1.140277572e-03f, 1.166682604e-03f, 1.193083783e-03f,
+1.219481065e-03f, 1.245874403e-03f, 1.272263753e-03f, 1.298649069e-03f, 1.325030306e-03f, 1.351407419e-03f, 1.377780362e-03f, 1.404149090e-03f, 1.430513558e-03f, 1.456873722e-03f,
+1.483229534e-03f, 1.509580951e-03f, 1.535927928e-03f, 1.562270418e-03f, 1.588608377e-03f, 1.614941760e-03f, 1.641270521e-03f, 1.667594616e-03f, 1.693913999e-03f, 1.720228625e-03f,
+1.746538449e-03f, 1.772843427e-03f, 1.799143512e-03f, 1.825438660e-03f, 1.851728826e-03f, 1.878013965e-03f, 1.904294031e-03f, 1.930568980e-03f, 1.956838767e-03f, 1.983103347e-03f,
+2.009362674e-03f, 2.035616704e-03f, 2.061865392e-03f, 2.088108693e-03f, 2.114346562e-03f, 2.140578954e-03f, 2.166805824e-03f, 2.193027127e-03f, 2.219242818e-03f, 2.245452853e-03f,
+2.271657187e-03f, 2.297855775e-03f, 2.324048571e-03f, 2.350235531e-03f, 2.376416611e-03f, 2.402591766e-03f, 2.428760950e-03f, 2.454924119e-03f, 2.481081229e-03f, 2.507232234e-03f,
+2.533377090e-03f, 2.559515752e-03f, 2.585648175e-03f, 2.611774315e-03f, 2.637894127e-03f, 2.664007567e-03f, 2.690114589e-03f, 2.716215149e-03f, 2.742309203e-03f, 2.768396706e-03f,
+2.794477613e-03f, 2.820551880e-03f, 2.846619463e-03f, 2.872680315e-03f, 2.898734395e-03f, 2.924781655e-03f, 2.950822053e-03f, 2.976855544e-03f, 3.002882083e-03f, 3.028901625e-03f,
+3.054914127e-03f, 3.080919544e-03f, 3.106917832e-03f, 3.132908945e-03f, 3.158892841e-03f, 3.184869473e-03f, 3.210838799e-03f, 3.236800774e-03f, 3.262755353e-03f, 3.288702492e-03f,
+3.314642147e-03f, 3.340574273e-03f, 3.366498827e-03f, 3.392415764e-03f, 3.418325040e-03f, 3.444226611e-03f, 3.470120432e-03f, 3.496006460e-03f, 3.521884650e-03f, 3.547754958e-03f,
+3.573617340e-03f, 3.599471751e-03f, 3.625318149e-03f, 3.651156488e-03f, 3.676986725e-03f, 3.702808816e-03f, 3.728622716e-03f, 3.754428382e-03f, 3.780225769e-03f, 3.806014835e-03f,
+3.831795534e-03f, 3.857567823e-03f, 3.883331658e-03f, 3.909086994e-03f, 3.934833789e-03f, 3.960571999e-03f, 3.986301579e-03f, 4.012022485e-03f, 4.037734674e-03f, 4.063438103e-03f,
+4.089132726e-03f, 4.114818502e-03f, 4.140495385e-03f, 4.166163332e-03f, 4.191822299e-03f, 4.217472244e-03f, 4.243113121e-03f, 4.268744888e-03f, 4.294367501e-03f, 4.319980915e-03f,
+4.345585089e-03f, 4.371179978e-03f, 4.396765538e-03f, 4.422341726e-03f, 4.447908499e-03f, 4.473465813e-03f, 4.499013624e-03f, 4.524551890e-03f, 4.550080566e-03f, 4.575599609e-03f,
+4.601108977e-03f, 4.626608625e-03f, 4.652098510e-03f, 4.677578589e-03f, 4.703048819e-03f, 4.728509155e-03f, 4.753959556e-03f, 4.779399978e-03f, 4.804830377e-03f, 4.830250711e-03f,
+4.855660935e-03f, 4.881061008e-03f, 4.906450885e-03f, 4.931830524e-03f, 4.957199882e-03f, 4.982558915e-03f, 5.007907581e-03f, 5.033245836e-03f, 5.058573637e-03f, 5.083890942e-03f,
+5.109197707e-03f, 5.134493889e-03f, 5.159779447e-03f, 5.185054335e-03f, 5.210318513e-03f, 5.235571936e-03f, 5.260814562e-03f, 5.286046348e-03f, 5.311267252e-03f, 5.336477230e-03f,
+5.361676240e-03f, 5.386864239e-03f, 5.412041184e-03f, 5.437207033e-03f, 5.462361743e-03f, 5.487505271e-03f, 5.512637575e-03f, 5.537758612e-03f, 5.562868339e-03f, 5.587966715e-03f,
+5.613053695e-03f, 5.638129239e-03f, 5.663193302e-03f, 5.688245844e-03f, 5.713286821e-03f, 5.738316191e-03f, 5.763333911e-03f, 5.788339940e-03f, 5.813334235e-03f, 5.838316753e-03f,
+5.863287452e-03f, 5.888246290e-03f, 5.913193225e-03f, 5.938128214e-03f, 5.963051215e-03f, 5.987962187e-03f, 6.012861086e-03f, 6.037747870e-03f, 6.062622498e-03f, 6.087484928e-03f,
+6.112335117e-03f, 6.137173023e-03f, 6.161998605e-03f, 6.186811820e-03f, 6.211612626e-03f, 6.236400981e-03f, 6.261176844e-03f, 6.285940172e-03f, 6.310690924e-03f, 6.335429057e-03f,
+6.360154531e-03f, 6.384867302e-03f, 6.409567330e-03f, 6.434254573e-03f, 6.458928988e-03f, 6.483590534e-03f, 6.508239170e-03f, 6.532874853e-03f, 6.557497543e-03f, 6.582107197e-03f,
+6.606703774e-03f, 6.631287233e-03f, 6.655857531e-03f, 6.680414628e-03f, 6.704958482e-03f, 6.729489051e-03f, 6.754006294e-03f, 6.778510169e-03f, 6.803000636e-03f, 6.827477652e-03f,
+6.851941178e-03f, 6.876391170e-03f, 6.900827588e-03f, 6.925250391e-03f, 6.949659538e-03f, 6.974054986e-03f, 6.998436696e-03f, 7.022804626e-03f, 7.047158735e-03f, 7.071498981e-03f,
+7.095825325e-03f, 7.120137724e-03f, 7.144436137e-03f, 7.168720524e-03f, 7.192990844e-03f, 7.217247056e-03f, 7.241489119e-03f, 7.265716992e-03f, 7.289930634e-03f, 7.314130004e-03f,
+7.338315062e-03f, 7.362485767e-03f, 7.386642078e-03f, 7.410783954e-03f, 7.434911355e-03f, 7.459024240e-03f, 7.483122569e-03f, 7.507206300e-03f, 7.531275393e-03f, 7.555329809e-03f,
+7.579369505e-03f, 7.603394442e-03f, 7.627404580e-03f, 7.651399877e-03f, 7.675380294e-03f, 7.699345790e-03f, 7.723296325e-03f, 7.747231858e-03f, 7.771152349e-03f, 7.795057758e-03f,
+7.818948045e-03f, 7.842823169e-03f, 7.866683091e-03f, 7.890527769e-03f, 7.914357165e-03f, 7.938171238e-03f, 7.961969948e-03f, 7.985753254e-03f, 8.009521117e-03f, 8.033273498e-03f,
+8.057010355e-03f, 8.080731650e-03f, 8.104437341e-03f, 8.128127390e-03f, 8.151801757e-03f, 8.175460401e-03f, 8.199103283e-03f, 8.222730364e-03f, 8.246341603e-03f, 8.269936961e-03f,
+8.293516399e-03f, 8.317079876e-03f, 8.340627353e-03f, 8.364158791e-03f, 8.387674149e-03f, 8.411173390e-03f, 8.434656472e-03f, 8.458123357e-03f, 8.481574005e-03f, 8.505008378e-03f,
+8.528426435e-03f, 8.551828137e-03f, 8.575213445e-03f, 8.598582320e-03f, 8.621934722e-03f, 8.645270613e-03f, 8.668589953e-03f, 8.691892703e-03f, 8.715178825e-03f, 8.738448278e-03f,
+8.761701024e-03f, 8.784937025e-03f, 8.808156240e-03f, 8.831358631e-03f, 8.854544160e-03f, 8.877712787e-03f, 8.900864473e-03f, 8.923999180e-03f, 8.947116870e-03f, 8.970217502e-03f,
+8.993301039e-03f, 9.016367442e-03f, 9.039416672e-03f, 9.062448690e-03f, 9.085463459e-03f, 9.108460939e-03f, 9.131441092e-03f, 9.154403879e-03f, 9.177349263e-03f, 9.200277204e-03f,
+9.223187665e-03f, 9.246080606e-03f, 9.268955991e-03f, 9.291813779e-03f, 9.314653934e-03f, 9.337476416e-03f, 9.360281188e-03f, 9.383068212e-03f, 9.405837449e-03f, 9.428588862e-03f,
+9.451322411e-03f, 9.474038061e-03f, 9.496735771e-03f, 9.519415505e-03f, 9.542077224e-03f, 9.564720891e-03f, 9.587346468e-03f, 9.609953916e-03f, 9.632543199e-03f, 9.655114278e-03f,
+9.677667116e-03f, 9.700201675e-03f, 9.722717917e-03f, 9.745215805e-03f, 9.767695301e-03f, 9.790156368e-03f, 9.812598968e-03f, 9.835023063e-03f, 9.857428617e-03f, 9.879815592e-03f,
+9.902183951e-03f, 9.924533655e-03f, 9.946864668e-03f, 9.969176953e-03f, 9.991470472e-03f, 1.001374519e-02f, 1.003600107e-02f, 1.005823806e-02f, 1.008045615e-02f, 1.010265528e-02f,
+1.012483543e-02f, 1.014699655e-02f, 1.016913861e-02f, 1.019126157e-02f, 1.021336539e-02f, 1.023545004e-02f, 1.025751548e-02f, 1.027956168e-02f, 1.030158859e-02f, 1.032359618e-02f,
+1.034558441e-02f, 1.036755326e-02f, 1.038950267e-02f, 1.041143261e-02f, 1.043334306e-02f, 1.045523396e-02f, 1.047710529e-02f, 1.049895701e-02f, 1.052078907e-02f, 1.054260146e-02f,
+1.056439412e-02f, 1.058616702e-02f, 1.060792014e-02f, 1.062965342e-02f, 1.065136683e-02f, 1.067306035e-02f, 1.069473392e-02f, 1.071638752e-02f, 1.073802111e-02f, 1.075963466e-02f,
+1.078122812e-02f, 1.080280146e-02f, 1.082435466e-02f, 1.084588766e-02f, 1.086740043e-02f, 1.088889295e-02f, 1.091036517e-02f, 1.093181705e-02f, 1.095324857e-02f, 1.097465968e-02f,
+1.099605036e-02f, 1.101742056e-02f, 1.103877025e-02f, 1.106009939e-02f, 1.108140795e-02f, 1.110269590e-02f, 1.112396319e-02f, 1.114520980e-02f, 1.116643568e-02f, 1.118764081e-02f,
+1.120882514e-02f, 1.122998865e-02f, 1.125113129e-02f, 1.127225303e-02f, 1.129335385e-02f, 1.131443369e-02f, 1.133549253e-02f, 1.135653033e-02f, 1.137754706e-02f, 1.139854268e-02f,
+1.141951716e-02f, 1.144047047e-02f, 1.146140256e-02f, 1.148231340e-02f, 1.150320296e-02f, 1.152407121e-02f, 1.154491811e-02f, 1.156574362e-02f, 1.158654771e-02f, 1.160733035e-02f,
+1.162809150e-02f, 1.164883113e-02f, 1.166954920e-02f, 1.169024568e-02f, 1.171092053e-02f, 1.173157373e-02f, 1.175220523e-02f, 1.177281500e-02f, 1.179340301e-02f, 1.181396922e-02f,
+1.183451361e-02f, 1.185503613e-02f, 1.187553675e-02f, 1.189601544e-02f, 1.191647217e-02f, 1.193690689e-02f, 1.195731959e-02f, 1.197771021e-02f, 1.199807874e-02f, 1.201842513e-02f,
+1.203874935e-02f, 1.205905137e-02f, 1.207933116e-02f, 1.209958867e-02f, 1.211982389e-02f, 1.214003677e-02f, 1.216022728e-02f, 1.218039539e-02f, 1.220054107e-02f, 1.222066428e-02f,
+1.224076498e-02f, 1.226084315e-02f, 1.228089875e-02f, 1.230093175e-02f, 1.232094212e-02f, 1.234092982e-02f, 1.236089482e-02f, 1.238083709e-02f, 1.240075659e-02f, 1.242065329e-02f,
+1.244052717e-02f, 1.246037817e-02f, 1.248020628e-02f, 1.250001147e-02f, 1.251979369e-02f, 1.253955291e-02f, 1.255928911e-02f, 1.257900225e-02f, 1.259869229e-02f, 1.261835922e-02f,
+1.263800298e-02f, 1.265762356e-02f, 1.267722091e-02f, 1.269679501e-02f, 1.271634583e-02f, 1.273587332e-02f, 1.275537747e-02f, 1.277485824e-02f, 1.279431559e-02f, 1.281374949e-02f,
+1.283315992e-02f, 1.285254683e-02f, 1.287191021e-02f, 1.289125001e-02f, 1.291056621e-02f, 1.292985876e-02f, 1.294912765e-02f, 1.296837284e-02f, 1.298759430e-02f, 1.300679199e-02f,
+1.302596589e-02f, 1.304511596e-02f, 1.306424218e-02f, 1.308334450e-02f, 1.310242291e-02f, 1.312147736e-02f, 1.314050783e-02f, 1.315951428e-02f, 1.317849669e-02f, 1.319745502e-02f,
+1.321638925e-02f, 1.323529933e-02f, 1.325418525e-02f, 1.327304696e-02f, 1.329188444e-02f, 1.331069767e-02f, 1.332948659e-02f, 1.334825120e-02f, 1.336699144e-02f, 1.338570731e-02f,
+1.340439875e-02f, 1.342306575e-02f, 1.344170828e-02f, 1.346032629e-02f, 1.347891977e-02f, 1.349748868e-02f, 1.351603299e-02f, 1.353455267e-02f, 1.355304769e-02f, 1.357151802e-02f,
+1.358996363e-02f, 1.360838449e-02f, 1.362678057e-02f, 1.364515184e-02f, 1.366349827e-02f, 1.368181983e-02f, 1.370011649e-02f, 1.371838822e-02f, 1.373663499e-02f, 1.375485677e-02f,
+1.377305353e-02f, 1.379122524e-02f, 1.380937187e-02f, 1.382749340e-02f, 1.384558978e-02f, 1.386366100e-02f, 1.388170702e-02f, 1.389972782e-02f, 1.391772336e-02f, 1.393569361e-02f,
+1.395363855e-02f, 1.397155815e-02f, 1.398945237e-02f, 1.400732119e-02f, 1.402516458e-02f, 1.404298252e-02f, 1.406077496e-02f, 1.407854188e-02f, 1.409628326e-02f, 1.411399906e-02f,
+1.413168925e-02f, 1.414935382e-02f, 1.416699272e-02f, 1.418460593e-02f, 1.420219342e-02f, 1.421975516e-02f, 1.423729113e-02f, 1.425480129e-02f, 1.427228561e-02f, 1.428974408e-02f,
+1.430717665e-02f, 1.432458331e-02f, 1.434196402e-02f, 1.435931875e-02f, 1.437664748e-02f, 1.439395018e-02f, 1.441122682e-02f, 1.442847737e-02f, 1.444570180e-02f, 1.446290010e-02f,
+1.448007222e-02f, 1.449721814e-02f, 1.451433783e-02f, 1.453143127e-02f, 1.454849843e-02f, 1.456553928e-02f, 1.458255379e-02f, 1.459954193e-02f, 1.461650368e-02f, 1.463343901e-02f,
+1.465034789e-02f, 1.466723030e-02f, 1.468408620e-02f, 1.470091558e-02f, 1.471771840e-02f, 1.473449463e-02f, 1.475124425e-02f, 1.476796724e-02f, 1.478466356e-02f, 1.480133318e-02f,
+1.481797609e-02f, 1.483459225e-02f, 1.485118164e-02f, 1.486774422e-02f, 1.488427998e-02f, 1.490078889e-02f, 1.491727092e-02f, 1.493372604e-02f, 1.495015423e-02f, 1.496655545e-02f,
+1.498292969e-02f, 1.499927692e-02f, 1.501559711e-02f, 1.503189024e-02f, 1.504815627e-02f, 1.506439518e-02f, 1.508060695e-02f, 1.509679156e-02f, 1.511294896e-02f, 1.512907914e-02f,
+1.514518208e-02f, 1.516125774e-02f, 1.517730610e-02f, 1.519332713e-02f, 1.520932081e-02f, 1.522528712e-02f, 1.524122602e-02f, 1.525713749e-02f, 1.527302151e-02f, 1.528887805e-02f,
+1.530470709e-02f, 1.532050859e-02f, 1.533628254e-02f, 1.535202890e-02f, 1.536774766e-02f, 1.538343879e-02f, 1.539910226e-02f, 1.541473805e-02f, 1.543034613e-02f, 1.544592647e-02f,
+1.546147906e-02f, 1.547700387e-02f, 1.549250087e-02f, 1.550797004e-02f, 1.552341135e-02f, 1.553882478e-02f, 1.555421031e-02f, 1.556956790e-02f, 1.558489754e-02f, 1.560019919e-02f,
+1.561547284e-02f, 1.563071847e-02f, 1.564593604e-02f, 1.566112553e-02f, 1.567628692e-02f, 1.569142018e-02f, 1.570652529e-02f, 1.572160223e-02f, 1.573665097e-02f, 1.575167148e-02f,
+1.576666375e-02f, 1.578162775e-02f, 1.579656345e-02f, 1.581147084e-02f, 1.582634988e-02f, 1.584120055e-02f, 1.585602284e-02f, 1.587081671e-02f, 1.588558215e-02f, 1.590031912e-02f,
+1.591502762e-02f, 1.592970760e-02f, 1.594435905e-02f, 1.595898195e-02f, 1.597357627e-02f, 1.598814199e-02f, 1.600267909e-02f, 1.601718754e-02f, 1.603166731e-02f, 1.604611840e-02f,
+1.606054077e-02f, 1.607493440e-02f, 1.608929927e-02f, 1.610363535e-02f, 1.611794263e-02f, 1.613222107e-02f, 1.614647067e-02f, 1.616069138e-02f, 1.617488320e-02f, 1.618904610e-02f,
+1.620318006e-02f, 1.621728505e-02f, 1.623136105e-02f, 1.624540804e-02f, 1.625942600e-02f, 1.627341490e-02f, 1.628737473e-02f, 1.630130545e-02f, 1.631520706e-02f, 1.632907953e-02f,
+1.634292282e-02f, 1.635673694e-02f, 1.637052184e-02f, 1.638427751e-02f, 1.639800393e-02f, 1.641170108e-02f, 1.642536893e-02f, 1.643900746e-02f, 1.645261666e-02f, 1.646619649e-02f,
+1.647974694e-02f, 1.649326799e-02f, 1.650675962e-02f, 1.652022180e-02f, 1.653365451e-02f, 1.654705773e-02f, 1.656043145e-02f, 1.657377563e-02f, 1.658709027e-02f, 1.660037533e-02f,
+1.661363080e-02f, 1.662685665e-02f, 1.664005287e-02f, 1.665321943e-02f, 1.666635632e-02f, 1.667946351e-02f, 1.669254099e-02f, 1.670558872e-02f, 1.671860670e-02f, 1.673159490e-02f,
+1.674455329e-02f, 1.675748187e-02f, 1.677038061e-02f, 1.678324949e-02f, 1.679608849e-02f, 1.680889759e-02f, 1.682167676e-02f, 1.683442600e-02f, 1.684714528e-02f, 1.685983457e-02f,
+1.687249387e-02f, 1.688512314e-02f, 1.689772238e-02f, 1.691029155e-02f, 1.692283065e-02f, 1.693533965e-02f, 1.694781853e-02f, 1.696026727e-02f, 1.697268586e-02f, 1.698507426e-02f,
+1.699743248e-02f, 1.700976047e-02f, 1.702205824e-02f, 1.703432575e-02f, 1.704656298e-02f, 1.705876993e-02f, 1.707094656e-02f, 1.708309287e-02f, 1.709520882e-02f, 1.710729441e-02f,
+1.711934961e-02f, 1.713137441e-02f, 1.714336878e-02f, 1.715533272e-02f, 1.716726619e-02f, 1.717916918e-02f, 1.719104167e-02f, 1.720288365e-02f, 1.721469510e-02f, 1.722647599e-02f,
+1.723822631e-02f, 1.724994604e-02f, 1.726163516e-02f, 1.727329366e-02f, 1.728492151e-02f, 1.729651870e-02f, 1.730808522e-02f, 1.731962103e-02f, 1.733112613e-02f, 1.734260050e-02f,
+1.735404412e-02f, 1.736545697e-02f, 1.737683903e-02f, 1.738819029e-02f, 1.739951073e-02f, 1.741080033e-02f, 1.742205907e-02f, 1.743328694e-02f, 1.744448393e-02f, 1.745565000e-02f,
+1.746678515e-02f, 1.747788936e-02f, 1.748896261e-02f, 1.750000488e-02f, 1.751101616e-02f, 1.752199643e-02f, 1.753294568e-02f, 1.754386388e-02f, 1.755475102e-02f, 1.756560708e-02f,
+1.757643205e-02f, 1.758722591e-02f, 1.759798865e-02f, 1.760872024e-02f, 1.761942067e-02f, 1.763008993e-02f, 1.764072800e-02f, 1.765133486e-02f, 1.766191049e-02f, 1.767245488e-02f,
+1.768296802e-02f, 1.769344988e-02f, 1.770390046e-02f, 1.771431973e-02f, 1.772470768e-02f, 1.773506430e-02f, 1.774538956e-02f, 1.775568346e-02f, 1.776594597e-02f, 1.777617708e-02f,
+1.778637679e-02f, 1.779654506e-02f, 1.780668188e-02f, 1.781678725e-02f, 1.782686114e-02f, 1.783690354e-02f, 1.784691443e-02f, 1.785689380e-02f, 1.786684164e-02f, 1.787675793e-02f,
+1.788664264e-02f, 1.789649578e-02f, 1.790631732e-02f, 1.791610725e-02f, 1.792586556e-02f, 1.793559223e-02f, 1.794528724e-02f, 1.795495058e-02f, 1.796458223e-02f, 1.797418219e-02f,
+1.798375044e-02f, 1.799328696e-02f, 1.800279174e-02f, 1.801226476e-02f, 1.802170601e-02f, 1.803111548e-02f, 1.804049315e-02f, 1.804983901e-02f, 1.805915304e-02f, 1.806843523e-02f,
+1.807768557e-02f, 1.808690404e-02f, 1.809609063e-02f, 1.810524532e-02f, 1.811436811e-02f, 1.812345897e-02f, 1.813251790e-02f, 1.814154488e-02f, 1.815053990e-02f, 1.815950294e-02f,
+1.816843399e-02f, 1.817733304e-02f, 1.818620007e-02f, 1.819503507e-02f, 1.820383804e-02f, 1.821260894e-02f, 1.822134778e-02f, 1.823005454e-02f, 1.823872921e-02f, 1.824737177e-02f,
+1.825598221e-02f, 1.826456052e-02f, 1.827310668e-02f, 1.828162069e-02f, 1.829010253e-02f, 1.829855219e-02f, 1.830696965e-02f, 1.831535490e-02f, 1.832370794e-02f, 1.833202875e-02f,
+1.834031731e-02f, 1.834857362e-02f, 1.835679766e-02f, 1.836498942e-02f, 1.837314889e-02f, 1.838127606e-02f, 1.838937091e-02f, 1.839743343e-02f, 1.840546362e-02f, 1.841346145e-02f,
+1.842142693e-02f, 1.842936003e-02f, 1.843726075e-02f, 1.844512907e-02f, 1.845296498e-02f, 1.846076847e-02f, 1.846853954e-02f, 1.847627816e-02f, 1.848398433e-02f, 1.849165804e-02f,
+1.849929927e-02f, 1.850690801e-02f, 1.851448426e-02f, 1.852202801e-02f, 1.852953923e-02f, 1.853701793e-02f, 1.854446408e-02f, 1.855187769e-02f, 1.855925873e-02f, 1.856660721e-02f,
+1.857392310e-02f, 1.858120640e-02f, 1.858845709e-02f, 1.859567518e-02f, 1.860286064e-02f, 1.861001347e-02f, 1.861713365e-02f, 1.862422118e-02f, 1.863127605e-02f, 1.863829824e-02f,
+1.864528776e-02f, 1.865224457e-02f, 1.865916869e-02f, 1.866606009e-02f, 1.867291877e-02f, 1.867974472e-02f, 1.868653792e-02f, 1.869329838e-02f, 1.870002608e-02f, 1.870672100e-02f,
+1.871338315e-02f, 1.872001251e-02f, 1.872660907e-02f, 1.873317282e-02f, 1.873970376e-02f, 1.874620187e-02f, 1.875266715e-02f, 1.875909959e-02f, 1.876549917e-02f, 1.877186590e-02f,
+1.877819975e-02f, 1.878450073e-02f, 1.879076882e-02f, 1.879700401e-02f, 1.880320631e-02f, 1.880937569e-02f, 1.881551215e-02f, 1.882161568e-02f, 1.882768627e-02f, 1.883372392e-02f,
+1.883972861e-02f, 1.884570035e-02f, 1.885163911e-02f, 1.885754490e-02f, 1.886341770e-02f, 1.886925750e-02f, 1.887506431e-02f, 1.888083810e-02f, 1.888657888e-02f, 1.889228664e-02f,
+1.889796136e-02f, 1.890360304e-02f, 1.890921168e-02f, 1.891478726e-02f, 1.892032978e-02f, 1.892583923e-02f, 1.893131560e-02f, 1.893675889e-02f, 1.894216909e-02f, 1.894754619e-02f,
+1.895289019e-02f, 1.895820107e-02f, 1.896347883e-02f, 1.896872347e-02f, 1.897393498e-02f, 1.897911335e-02f, 1.898425857e-02f, 1.898937064e-02f, 1.899444955e-02f, 1.899949529e-02f,
+1.900450786e-02f, 1.900948726e-02f, 1.901443346e-02f, 1.901934648e-02f, 1.902422630e-02f, 1.902907292e-02f, 1.903388633e-02f, 1.903866652e-02f, 1.904341349e-02f, 1.904812723e-02f,
+1.905280774e-02f, 1.905745501e-02f, 1.906206903e-02f, 1.906664981e-02f, 1.907119732e-02f, 1.907571158e-02f, 1.908019257e-02f, 1.908464028e-02f, 1.908905472e-02f, 1.909343587e-02f,
+1.909778373e-02f, 1.910209830e-02f, 1.910637957e-02f, 1.911062754e-02f, 1.911484220e-02f, 1.911902354e-02f, 1.912317156e-02f, 1.912728626e-02f, 1.913136763e-02f, 1.913541566e-02f,
+1.913943036e-02f, 1.914341171e-02f, 1.914735971e-02f, 1.915127436e-02f, 1.915515566e-02f, 1.915900359e-02f, 1.916281816e-02f, 1.916659935e-02f, 1.917034718e-02f, 1.917406162e-02f,
+1.917774268e-02f, 1.918139035e-02f, 1.918500464e-02f, 1.918858552e-02f, 1.919213301e-02f, 1.919564710e-02f, 1.919912778e-02f, 1.920257505e-02f, 1.920598891e-02f, 1.920936935e-02f,
+1.921271636e-02f, 1.921602996e-02f, 1.921931012e-02f, 1.922255686e-02f, 1.922577016e-02f, 1.922895002e-02f, 1.923209644e-02f, 1.923520942e-02f, 1.923828894e-02f, 1.924133502e-02f,
+1.924434765e-02f, 1.924732682e-02f, 1.925027252e-02f, 1.925318477e-02f, 1.925606355e-02f, 1.925890887e-02f, 1.926172071e-02f, 1.926449909e-02f, 1.926724398e-02f, 1.926995540e-02f,
+1.927263334e-02f, 1.927527780e-02f, 1.927788877e-02f, 1.928046626e-02f, 1.928301025e-02f, 1.928552076e-02f, 1.928799777e-02f, 1.929044128e-02f, 1.929285130e-02f, 1.929522782e-02f,
+1.929757084e-02f, 1.929988036e-02f, 1.930215637e-02f, 1.930439888e-02f, 1.930660788e-02f, 1.930878337e-02f, 1.931092535e-02f, 1.931303381e-02f, 1.931510877e-02f, 1.931715020e-02f,
+1.931915813e-02f, 1.932113253e-02f, 1.932307342e-02f, 1.932498079e-02f, 1.932685463e-02f, 1.932869496e-02f, 1.933050176e-02f, 1.933227505e-02f, 1.933401480e-02f, 1.933572104e-02f,
+1.933739374e-02f, 1.933903292e-02f, 1.934063858e-02f, 1.934221071e-02f, 1.934374931e-02f, 1.934525438e-02f, 1.934672593e-02f, 1.934816395e-02f, 1.934956843e-02f, 1.935093939e-02f,
+1.935227683e-02f, 1.935358073e-02f, 1.935485110e-02f, 1.935608795e-02f, 1.935729126e-02f, 1.935846105e-02f, 1.935959731e-02f, 1.936070005e-02f, 1.936176925e-02f, 1.936280493e-02f,
+1.936380708e-02f, 1.936477571e-02f, 1.936571081e-02f, 1.936661239e-02f, 1.936748044e-02f, 1.936831497e-02f, 1.936911598e-02f, 1.936988347e-02f, 1.937061743e-02f, 1.937131788e-02f,
+1.937198481e-02f, 1.937261822e-02f, 1.937321811e-02f, 1.937378449e-02f, 1.937431736e-02f, 1.937481672e-02f, 1.937528256e-02f, 1.937571490e-02f, 1.937611372e-02f, 1.937647905e-02f,
+1.937681086e-02f, 1.937710918e-02f, 1.937737399e-02f, 1.937760530e-02f, 1.937780312e-02f, 1.937796744e-02f, 1.937809827e-02f, 1.937819561e-02f, 1.937825946e-02f, 1.937828982e-02f,
+1.937828669e-02f, 1.937825009e-02f, 1.937818000e-02f, 1.937807644e-02f, 1.937793940e-02f, 1.937776889e-02f, 1.937756490e-02f, 1.937732745e-02f, 1.937705654e-02f, 1.937675216e-02f,
+1.937641432e-02f, 1.937604303e-02f, 1.937563828e-02f, 1.937520009e-02f, 1.937472844e-02f, 1.937422335e-02f, 1.937368482e-02f, 1.937311285e-02f, 1.937250745e-02f, 1.937186861e-02f,
+1.937119635e-02f, 1.937049066e-02f, 1.936975155e-02f, 1.936897902e-02f, 1.936817308e-02f, 1.936733373e-02f, 1.936646097e-02f, 1.936555481e-02f, 1.936461524e-02f, 1.936364229e-02f,
+1.936263594e-02f, 1.936159620e-02f, 1.936052308e-02f, 1.935941659e-02f, 1.935827671e-02f, 1.935710347e-02f, 1.935589686e-02f, 1.935465689e-02f, 1.935338356e-02f, 1.935207688e-02f,
+1.935073684e-02f, 1.934936347e-02f, 1.934795675e-02f, 1.934651670e-02f, 1.934504332e-02f, 1.934353662e-02f, 1.934199659e-02f, 1.934042325e-02f, 1.933881660e-02f, 1.933717664e-02f,
+1.933550338e-02f, 1.933379683e-02f, 1.933205699e-02f, 1.933028386e-02f, 1.932847745e-02f, 1.932663777e-02f, 1.932476482e-02f, 1.932285861e-02f, 1.932091914e-02f, 1.931894642e-02f,
+1.931694045e-02f, 1.931490124e-02f, 1.931282879e-02f, 1.931072312e-02f, 1.930858423e-02f, 1.930641211e-02f, 1.930420679e-02f, 1.930196826e-02f, 1.929969653e-02f, 1.929739161e-02f,
+1.929505350e-02f, 1.929268221e-02f, 1.929027775e-02f, 1.928784012e-02f, 1.928536933e-02f, 1.928286539e-02f, 1.928032829e-02f, 1.927775806e-02f, 1.927515469e-02f, 1.927251819e-02f,
+1.926984858e-02f, 1.926714584e-02f, 1.926441000e-02f, 1.926164106e-02f, 1.925883903e-02f, 1.925600391e-02f, 1.925313571e-02f, 1.925023444e-02f, 1.924730011e-02f, 1.924433271e-02f,
+1.924133227e-02f, 1.923829879e-02f, 1.923523227e-02f, 1.923213272e-02f, 1.922900015e-02f, 1.922583457e-02f, 1.922263599e-02f, 1.921940440e-02f, 1.921613983e-02f, 1.921284228e-02f,
+1.920951176e-02f, 1.920614827e-02f, 1.920275182e-02f, 1.919932242e-02f, 1.919586008e-02f, 1.919236481e-02f, 1.918883662e-02f, 1.918527551e-02f, 1.918168149e-02f, 1.917805457e-02f,
+1.917439476e-02f, 1.917070207e-02f, 1.916697651e-02f, 1.916321808e-02f, 1.915942679e-02f, 1.915560266e-02f, 1.915174568e-02f, 1.914785588e-02f, 1.914393326e-02f, 1.913997782e-02f,
+1.913598958e-02f, 1.913196855e-02f, 1.912791474e-02f, 1.912382814e-02f, 1.911970879e-02f, 1.911555667e-02f, 1.911137181e-02f, 1.910715421e-02f, 1.910290388e-02f, 1.909862084e-02f,
+1.909430508e-02f, 1.908995662e-02f, 1.908557548e-02f, 1.908116165e-02f, 1.907671516e-02f, 1.907223600e-02f, 1.906772419e-02f, 1.906317975e-02f, 1.905860267e-02f, 1.905399297e-02f,
+1.904935066e-02f, 1.904467576e-02f, 1.903996826e-02f, 1.903522818e-02f, 1.903045554e-02f, 1.902565034e-02f, 1.902081258e-02f, 1.901594230e-02f, 1.901103948e-02f, 1.900610415e-02f,
+1.900113631e-02f, 1.899613598e-02f, 1.899110317e-02f, 1.898603788e-02f, 1.898094013e-02f, 1.897580993e-02f, 1.897064729e-02f, 1.896545222e-02f, 1.896022473e-02f, 1.895496484e-02f,
+1.894967255e-02f, 1.894434788e-02f, 1.893899084e-02f, 1.893360143e-02f, 1.892817968e-02f, 1.892272559e-02f, 1.891723917e-02f, 1.891172044e-02f, 1.890616940e-02f, 1.890058608e-02f,
+1.889497047e-02f, 1.888932260e-02f, 1.888364247e-02f, 1.887793010e-02f, 1.887218549e-02f, 1.886640867e-02f, 1.886059964e-02f, 1.885475842e-02f, 1.884888501e-02f, 1.884297943e-02f,
+1.883704170e-02f, 1.883107182e-02f, 1.882506980e-02f, 1.881903567e-02f, 1.881296942e-02f, 1.880687109e-02f, 1.880074067e-02f, 1.879457818e-02f, 1.878838363e-02f, 1.878215704e-02f,
+1.877589841e-02f, 1.876960777e-02f, 1.876328513e-02f, 1.875693049e-02f, 1.875054387e-02f, 1.874412529e-02f, 1.873767475e-02f, 1.873119228e-02f, 1.872467788e-02f, 1.871813156e-02f,
+1.871155335e-02f, 1.870494325e-02f, 1.869830128e-02f, 1.869162745e-02f, 1.868492178e-02f, 1.867818428e-02f, 1.867141496e-02f, 1.866461383e-02f, 1.865778092e-02f, 1.865091623e-02f,
+1.864401978e-02f, 1.863709158e-02f, 1.863013165e-02f, 1.862314000e-02f, 1.861611664e-02f, 1.860906160e-02f, 1.860197488e-02f, 1.859485649e-02f, 1.858770646e-02f, 1.858052480e-02f,
+1.857331151e-02f, 1.856606663e-02f, 1.855879015e-02f, 1.855148210e-02f, 1.854414249e-02f, 1.853677133e-02f, 1.852936865e-02f, 1.852193445e-02f, 1.851446875e-02f, 1.850697156e-02f,
+1.849944290e-02f, 1.849188279e-02f, 1.848429124e-02f, 1.847666826e-02f, 1.846901388e-02f, 1.846132810e-02f, 1.845361094e-02f, 1.844586242e-02f, 1.843808255e-02f, 1.843027135e-02f,
+1.842242883e-02f, 1.841455502e-02f, 1.840664991e-02f, 1.839871354e-02f, 1.839074591e-02f, 1.838274705e-02f, 1.837471696e-02f, 1.836665567e-02f, 1.835856319e-02f, 1.835043954e-02f,
+1.834228473e-02f, 1.833409877e-02f, 1.832588169e-02f, 1.831763351e-02f, 1.830935423e-02f, 1.830104387e-02f, 1.829270245e-02f, 1.828433000e-02f, 1.827592651e-02f, 1.826749201e-02f,
+1.825902653e-02f, 1.825053006e-02f, 1.824200264e-02f, 1.823344427e-02f, 1.822485497e-02f, 1.821623477e-02f, 1.820758367e-02f, 1.819890170e-02f, 1.819018887e-02f, 1.818144520e-02f,
+1.817267071e-02f, 1.816386541e-02f, 1.815502932e-02f, 1.814616246e-02f, 1.813726484e-02f, 1.812833649e-02f, 1.811937741e-02f, 1.811038764e-02f, 1.810136718e-02f, 1.809231605e-02f,
+1.808323428e-02f, 1.807412187e-02f, 1.806497885e-02f, 1.805580523e-02f, 1.804660104e-02f, 1.803736628e-02f, 1.802810098e-02f, 1.801880516e-02f, 1.800947884e-02f, 1.800012202e-02f,
+1.799073474e-02f, 1.798131701e-02f, 1.797186884e-02f, 1.796239026e-02f, 1.795288128e-02f, 1.794334192e-02f, 1.793377221e-02f, 1.792417216e-02f, 1.791454178e-02f, 1.790488110e-02f,
+1.789519014e-02f, 1.788546891e-02f, 1.787571743e-02f, 1.786593573e-02f, 1.785612381e-02f, 1.784628171e-02f, 1.783640944e-02f, 1.782650701e-02f, 1.781657445e-02f, 1.780661178e-02f,
+1.779661901e-02f, 1.778659617e-02f, 1.777654327e-02f, 1.776646034e-02f, 1.775634739e-02f, 1.774620444e-02f, 1.773603151e-02f, 1.772582863e-02f, 1.771559580e-02f, 1.770533306e-02f,
+1.769504042e-02f, 1.768471790e-02f, 1.767436552e-02f, 1.766398330e-02f, 1.765357126e-02f, 1.764312942e-02f, 1.763265780e-02f, 1.762215642e-02f, 1.761162530e-02f, 1.760106447e-02f,
+1.759047393e-02f, 1.757985371e-02f, 1.756920384e-02f, 1.755852433e-02f, 1.754781520e-02f, 1.753707647e-02f, 1.752630817e-02f, 1.751551031e-02f, 1.750468291e-02f, 1.749382600e-02f,
+1.748293960e-02f, 1.747202372e-02f, 1.746107839e-02f, 1.745010363e-02f, 1.743909946e-02f, 1.742806590e-02f, 1.741700297e-02f, 1.740591069e-02f, 1.739478909e-02f, 1.738363818e-02f,
+1.737245799e-02f, 1.736124854e-02f, 1.735000984e-02f, 1.733874192e-02f, 1.732744481e-02f, 1.731611852e-02f, 1.730476307e-02f, 1.729337849e-02f, 1.728196480e-02f, 1.727052202e-02f,
+1.725905016e-02f, 1.724754926e-02f, 1.723601934e-02f, 1.722446041e-02f, 1.721287250e-02f, 1.720125563e-02f, 1.718960983e-02f, 1.717793510e-02f, 1.716623149e-02f, 1.715449900e-02f,
+1.714273767e-02f, 1.713094750e-02f, 1.711912854e-02f, 1.710728079e-02f, 1.709540428e-02f, 1.708349903e-02f, 1.707156507e-02f, 1.705960242e-02f, 1.704761109e-02f, 1.703559112e-02f,
+1.702354253e-02f, 1.701146533e-02f, 1.699935956e-02f, 1.698722523e-02f, 1.697506236e-02f, 1.696287099e-02f, 1.695065113e-02f, 1.693840280e-02f, 1.692612604e-02f, 1.691382085e-02f,
+1.690148727e-02f, 1.688912532e-02f, 1.687673502e-02f, 1.686431640e-02f, 1.685186947e-02f, 1.683939427e-02f, 1.682689081e-02f, 1.681435911e-02f, 1.680179922e-02f, 1.678921113e-02f,
+1.677659489e-02f, 1.676395051e-02f, 1.675127801e-02f, 1.673857743e-02f, 1.672584878e-02f, 1.671309209e-02f, 1.670030738e-02f, 1.668749468e-02f, 1.667465400e-02f, 1.666178538e-02f,
+1.664888884e-02f, 1.663596440e-02f, 1.662301209e-02f, 1.661003193e-02f, 1.659702395e-02f, 1.658398816e-02f, 1.657092460e-02f, 1.655783328e-02f, 1.654471424e-02f, 1.653156750e-02f,
+1.651839308e-02f, 1.650519100e-02f, 1.649196130e-02f, 1.647870399e-02f, 1.646541910e-02f, 1.645210665e-02f, 1.643876668e-02f, 1.642539920e-02f, 1.641200425e-02f, 1.639858183e-02f,
+1.638513199e-02f, 1.637165474e-02f, 1.635815011e-02f, 1.634461813e-02f, 1.633105882e-02f, 1.631747220e-02f, 1.630385831e-02f, 1.629021716e-02f, 1.627654878e-02f, 1.626285320e-02f,
+1.624913045e-02f, 1.623538054e-02f, 1.622160350e-02f, 1.620779937e-02f, 1.619396816e-02f, 1.618010990e-02f, 1.616622462e-02f, 1.615231234e-02f, 1.613837308e-02f, 1.612440688e-02f,
+1.611041377e-02f, 1.609639375e-02f, 1.608234687e-02f, 1.606827315e-02f, 1.605417261e-02f, 1.604004529e-02f, 1.602589119e-02f, 1.601171037e-02f, 1.599750283e-02f, 1.598326860e-02f,
+1.596900772e-02f, 1.595472020e-02f, 1.594040608e-02f, 1.592606539e-02f, 1.591169813e-02f, 1.589730436e-02f, 1.588288408e-02f, 1.586843733e-02f, 1.585396414e-02f, 1.583946452e-02f,
+1.582493852e-02f, 1.581038615e-02f, 1.579580744e-02f, 1.578120242e-02f, 1.576657111e-02f, 1.575191355e-02f, 1.573722976e-02f, 1.572251976e-02f, 1.570778359e-02f, 1.569302127e-02f,
+1.567823283e-02f, 1.566341829e-02f, 1.564857769e-02f, 1.563371104e-02f, 1.561881839e-02f, 1.560389975e-02f, 1.558895515e-02f, 1.557398462e-02f, 1.555898819e-02f, 1.554396589e-02f,
+1.552891774e-02f, 1.551384377e-02f, 1.549874401e-02f, 1.548361848e-02f, 1.546846722e-02f, 1.545329026e-02f, 1.543808761e-02f, 1.542285931e-02f, 1.540760538e-02f, 1.539232587e-02f,
+1.537702078e-02f, 1.536169015e-02f, 1.534633402e-02f, 1.533095239e-02f, 1.531554532e-02f, 1.530011282e-02f, 1.528465492e-02f, 1.526917165e-02f, 1.525366303e-02f, 1.523812911e-02f,
+1.522256990e-02f, 1.520698544e-02f, 1.519137575e-02f, 1.517574086e-02f, 1.516008080e-02f, 1.514439560e-02f, 1.512868528e-02f, 1.511294989e-02f, 1.509718943e-02f, 1.508140396e-02f,
+1.506559348e-02f, 1.504975804e-02f, 1.503389766e-02f, 1.501801237e-02f, 1.500210220e-02f, 1.498616718e-02f, 1.497020733e-02f, 1.495422269e-02f, 1.493821329e-02f, 1.492217916e-02f,
+1.490612032e-02f, 1.489003680e-02f, 1.487392863e-02f, 1.485779585e-02f, 1.484163849e-02f, 1.482545656e-02f, 1.480925011e-02f, 1.479301915e-02f, 1.477676373e-02f, 1.476048387e-02f,
+1.474417960e-02f, 1.472785095e-02f, 1.471149795e-02f, 1.469512063e-02f, 1.467871902e-02f, 1.466229315e-02f, 1.464584305e-02f, 1.462936875e-02f, 1.461287028e-02f, 1.459634767e-02f,
+1.457980095e-02f, 1.456323015e-02f, 1.454663530e-02f, 1.453001643e-02f, 1.451337357e-02f, 1.449670676e-02f, 1.448001601e-02f, 1.446330137e-02f, 1.444656286e-02f, 1.442980052e-02f,
+1.441301437e-02f, 1.439620444e-02f, 1.437937077e-02f, 1.436251338e-02f, 1.434563231e-02f, 1.432872759e-02f, 1.431179924e-02f, 1.429484731e-02f, 1.427787181e-02f, 1.426087279e-02f,
+1.424385026e-02f, 1.422680427e-02f, 1.420973484e-02f, 1.419264201e-02f, 1.417552580e-02f, 1.415838625e-02f, 1.414122338e-02f, 1.412403724e-02f, 1.410682784e-02f, 1.408959523e-02f,
+1.407233943e-02f, 1.405506047e-02f, 1.403775839e-02f, 1.402043322e-02f, 1.400308498e-02f, 1.398571372e-02f, 1.396831945e-02f, 1.395090222e-02f, 1.393346206e-02f, 1.391599899e-02f,
+1.389851305e-02f, 1.388100426e-02f, 1.386347267e-02f, 1.384591831e-02f, 1.382834120e-02f, 1.381074137e-02f, 1.379311886e-02f, 1.377547371e-02f, 1.375780594e-02f, 1.374011558e-02f,
+1.372240267e-02f, 1.370466724e-02f, 1.368690932e-02f, 1.366912894e-02f, 1.365132614e-02f, 1.363350095e-02f, 1.361565339e-02f, 1.359778351e-02f, 1.357989134e-02f, 1.356197690e-02f,
+1.354404023e-02f, 1.352608136e-02f, 1.350810033e-02f, 1.349009716e-02f, 1.347207190e-02f, 1.345402456e-02f, 1.343595519e-02f, 1.341786382e-02f, 1.339975048e-02f, 1.338161520e-02f,
+1.336345802e-02f, 1.334527897e-02f, 1.332707808e-02f, 1.330885538e-02f, 1.329061091e-02f, 1.327234470e-02f, 1.325405678e-02f, 1.323574719e-02f, 1.321741596e-02f, 1.319906312e-02f,
+1.318068870e-02f, 1.316229275e-02f, 1.314387529e-02f, 1.312543635e-02f, 1.310697597e-02f, 1.308849418e-02f, 1.306999102e-02f, 1.305146652e-02f, 1.303292071e-02f, 1.301435362e-02f,
+1.299576529e-02f, 1.297715576e-02f, 1.295852505e-02f, 1.293987320e-02f, 1.292120024e-02f, 1.290250621e-02f, 1.288379114e-02f, 1.286505507e-02f, 1.284629802e-02f, 1.282752003e-02f,
+1.280872115e-02f, 1.278990138e-02f, 1.277106079e-02f, 1.275219939e-02f, 1.273331722e-02f, 1.271441432e-02f, 1.269549071e-02f, 1.267654644e-02f, 1.265758154e-02f, 1.263859604e-02f,
+1.261958997e-02f, 1.260056337e-02f, 1.258151628e-02f, 1.256244873e-02f, 1.254336075e-02f, 1.252425237e-02f, 1.250512364e-02f, 1.248597458e-02f, 1.246680524e-02f, 1.244761564e-02f,
+1.242840581e-02f, 1.240917580e-02f, 1.238992564e-02f, 1.237065536e-02f, 1.235136500e-02f, 1.233205459e-02f, 1.231272417e-02f, 1.229337377e-02f, 1.227400343e-02f, 1.225461317e-02f,
+1.223520304e-02f, 1.221577308e-02f, 1.219632331e-02f, 1.217685376e-02f, 1.215736449e-02f, 1.213785551e-02f, 1.211832687e-02f, 1.209877860e-02f, 1.207921074e-02f, 1.205962331e-02f,
+1.204001637e-02f, 1.202038993e-02f, 1.200074404e-02f, 1.198107873e-02f, 1.196139403e-02f, 1.194168999e-02f, 1.192196664e-02f, 1.190222401e-02f, 1.188246213e-02f, 1.186268105e-02f,
+1.184288080e-02f, 1.182306141e-02f, 1.180322292e-02f, 1.178336537e-02f, 1.176348878e-02f, 1.174359321e-02f, 1.172367867e-02f, 1.170374522e-02f, 1.168379287e-02f, 1.166382168e-02f,
+1.164383167e-02f, 1.162382288e-02f, 1.160379534e-02f, 1.158374910e-02f, 1.156368419e-02f, 1.154360064e-02f, 1.152349849e-02f, 1.150337778e-02f, 1.148323854e-02f, 1.146308081e-02f,
+1.144290462e-02f, 1.142271001e-02f, 1.140249701e-02f, 1.138226567e-02f, 1.136201602e-02f, 1.134174809e-02f, 1.132146192e-02f, 1.130115755e-02f, 1.128083501e-02f, 1.126049434e-02f,
+1.124013558e-02f, 1.121975876e-02f, 1.119936392e-02f, 1.117895109e-02f, 1.115852031e-02f, 1.113807163e-02f, 1.111760506e-02f, 1.109712066e-02f, 1.107661846e-02f, 1.105609849e-02f,
+1.103556079e-02f, 1.101500540e-02f, 1.099443235e-02f, 1.097384168e-02f, 1.095323343e-02f, 1.093260764e-02f, 1.091196433e-02f, 1.089130356e-02f, 1.087062535e-02f, 1.084992974e-02f,
+1.082921676e-02f, 1.080848647e-02f, 1.078773888e-02f, 1.076697405e-02f, 1.074619200e-02f, 1.072539278e-02f, 1.070457641e-02f, 1.068374295e-02f, 1.066289241e-02f, 1.064202485e-02f,
+1.062114030e-02f, 1.060023880e-02f, 1.057932038e-02f, 1.055838508e-02f, 1.053743293e-02f, 1.051646399e-02f, 1.049547827e-02f, 1.047447582e-02f, 1.045345669e-02f, 1.043242089e-02f,
+1.041136848e-02f, 1.039029949e-02f, 1.036921395e-02f, 1.034811191e-02f, 1.032699341e-02f, 1.030585847e-02f, 1.028470714e-02f, 1.026353945e-02f, 1.024235545e-02f, 1.022115516e-02f,
+1.019993864e-02f, 1.017870591e-02f, 1.015745701e-02f, 1.013619199e-02f, 1.011491087e-02f, 1.009361370e-02f, 1.007230051e-02f, 1.005097135e-02f, 1.002962625e-02f, 1.000826524e-02f,
+9.986888376e-03f, 9.965495682e-03f, 9.944087201e-03f, 9.922662969e-03f, 9.901223026e-03f, 9.879767409e-03f, 9.858296156e-03f, 9.836809306e-03f, 9.815306896e-03f, 9.793788966e-03f,
+9.772255552e-03f, 9.750706693e-03f, 9.729142428e-03f, 9.707562795e-03f, 9.685967832e-03f, 9.664357577e-03f, 9.642732068e-03f, 9.621091345e-03f, 9.599435445e-03f, 9.577764407e-03f,
+9.556078269e-03f, 9.534377070e-03f, 9.512660848e-03f, 9.490929641e-03f, 9.469183489e-03f, 9.447422429e-03f, 9.425646501e-03f, 9.403855743e-03f, 9.382050193e-03f, 9.360229890e-03f,
+9.338394873e-03f, 9.316545180e-03f, 9.294680851e-03f, 9.272801923e-03f, 9.250908437e-03f, 9.229000429e-03f, 9.207077940e-03f, 9.185141008e-03f, 9.163189672e-03f, 9.141223970e-03f,
+9.119243942e-03f, 9.097249627e-03f, 9.075241063e-03f, 9.053218290e-03f, 9.031181346e-03f, 9.009130270e-03f, 8.987065102e-03f, 8.964985880e-03f, 8.942892644e-03f, 8.920785432e-03f,
+8.898664284e-03f, 8.876529239e-03f, 8.854380336e-03f, 8.832217614e-03f, 8.810041112e-03f, 8.787850870e-03f, 8.765646926e-03f, 8.743429321e-03f, 8.721198093e-03f, 8.698953281e-03f,
+8.676694925e-03f, 8.654423065e-03f, 8.632137739e-03f, 8.609838987e-03f, 8.587526849e-03f, 8.565201363e-03f, 8.542862569e-03f, 8.520510507e-03f, 8.498145216e-03f, 8.475766736e-03f,
+8.453375106e-03f, 8.430970366e-03f, 8.408552555e-03f, 8.386121713e-03f, 8.363677879e-03f, 8.341221094e-03f, 8.318751396e-03f, 8.296268825e-03f, 8.273773422e-03f, 8.251265225e-03f,
+8.228744275e-03f, 8.206210610e-03f, 8.183664272e-03f, 8.161105300e-03f, 8.138533733e-03f, 8.115949611e-03f, 8.093352974e-03f, 8.070743863e-03f, 8.048122316e-03f, 8.025488374e-03f,
+8.002842077e-03f, 7.980183464e-03f, 7.957512576e-03f, 7.934829453e-03f, 7.912134134e-03f, 7.889426659e-03f, 7.866707069e-03f, 7.843975403e-03f, 7.821231702e-03f, 7.798476006e-03f,
+7.775708354e-03f, 7.752928787e-03f, 7.730137345e-03f, 7.707334069e-03f, 7.684518997e-03f, 7.661692171e-03f, 7.638853631e-03f, 7.616003417e-03f, 7.593141568e-03f, 7.570268126e-03f,
+7.547383131e-03f, 7.524486622e-03f, 7.501578641e-03f, 7.478659228e-03f, 7.455728422e-03f, 7.432786264e-03f, 7.409832795e-03f, 7.386868055e-03f, 7.363892084e-03f, 7.340904923e-03f,
+7.317906613e-03f, 7.294897193e-03f, 7.271876704e-03f, 7.248845186e-03f, 7.225802681e-03f, 7.202749229e-03f, 7.179684869e-03f, 7.156609644e-03f, 7.133523593e-03f, 7.110426756e-03f,
+7.087319175e-03f, 7.064200890e-03f, 7.041071942e-03f, 7.017932372e-03f, 6.994782219e-03f, 6.971621525e-03f, 6.948450330e-03f, 6.925268676e-03f, 6.902076602e-03f, 6.878874150e-03f,
+6.855661360e-03f, 6.832438273e-03f, 6.809204930e-03f, 6.785961372e-03f, 6.762707640e-03f, 6.739443773e-03f, 6.716169814e-03f, 6.692885803e-03f, 6.669591780e-03f, 6.646287788e-03f,
+6.622973866e-03f, 6.599650055e-03f, 6.576316397e-03f, 6.552972933e-03f, 6.529619703e-03f, 6.506256748e-03f, 6.482884110e-03f, 6.459501829e-03f, 6.436109947e-03f, 6.412708504e-03f,
+6.389297541e-03f, 6.365877100e-03f, 6.342447221e-03f, 6.319007946e-03f, 6.295559316e-03f, 6.272101372e-03f, 6.248634155e-03f, 6.225157706e-03f, 6.201672066e-03f, 6.178177276e-03f,
+6.154673379e-03f, 6.131160414e-03f, 6.107638423e-03f, 6.084107447e-03f, 6.060567528e-03f, 6.037018706e-03f, 6.013461023e-03f, 5.989894521e-03f, 5.966319240e-03f, 5.942735221e-03f,
+5.919142507e-03f, 5.895541138e-03f, 5.871931156e-03f, 5.848312602e-03f, 5.824685518e-03f, 5.801049944e-03f, 5.777405922e-03f, 5.753753494e-03f, 5.730092700e-03f, 5.706423583e-03f,
+5.682746184e-03f, 5.659060544e-03f, 5.635366705e-03f, 5.611664707e-03f, 5.587954594e-03f, 5.564236405e-03f, 5.540510183e-03f, 5.516775968e-03f, 5.493033804e-03f, 5.469283730e-03f,
+5.445525789e-03f, 5.421760022e-03f, 5.397986471e-03f, 5.374205177e-03f, 5.350416182e-03f, 5.326619527e-03f, 5.302815254e-03f, 5.279003405e-03f, 5.255184021e-03f, 5.231357144e-03f,
+5.207522816e-03f, 5.183681077e-03f, 5.159831971e-03f, 5.135975538e-03f, 5.112111820e-03f, 5.088240859e-03f, 5.064362696e-03f, 5.040477374e-03f, 5.016584934e-03f, 4.992685417e-03f,
+4.968778866e-03f, 4.944865322e-03f, 4.920944827e-03f, 4.897017422e-03f, 4.873083150e-03f, 4.849142052e-03f, 4.825194171e-03f, 4.801239547e-03f, 4.777278223e-03f, 4.753310240e-03f,
+4.729335640e-03f, 4.705354466e-03f, 4.681366759e-03f, 4.657372560e-03f, 4.633371912e-03f, 4.609364857e-03f, 4.585351436e-03f, 4.561331691e-03f, 4.537305665e-03f, 4.513273398e-03f,
+4.489234934e-03f, 4.465190313e-03f, 4.441139579e-03f, 4.417082772e-03f, 4.393019935e-03f, 4.368951109e-03f, 4.344876338e-03f, 4.320795661e-03f, 4.296709123e-03f, 4.272616764e-03f,
+4.248518626e-03f, 4.224414752e-03f, 4.200305183e-03f, 4.176189962e-03f, 4.152069131e-03f, 4.127942731e-03f, 4.103810805e-03f, 4.079673394e-03f, 4.055530541e-03f, 4.031382287e-03f,
+4.007228676e-03f, 3.983069748e-03f, 3.958905546e-03f, 3.934736112e-03f, 3.910561488e-03f, 3.886381716e-03f, 3.862196838e-03f, 3.838006897e-03f, 3.813811934e-03f, 3.789611991e-03f,
+3.765407111e-03f, 3.741197336e-03f, 3.716982708e-03f, 3.692763269e-03f, 3.668539061e-03f, 3.644310126e-03f, 3.620076506e-03f, 3.595838245e-03f, 3.571595382e-03f, 3.547347962e-03f,
+3.523096026e-03f, 3.498839616e-03f, 3.474578775e-03f, 3.450313544e-03f, 3.426043966e-03f, 3.401770083e-03f, 3.377491937e-03f, 3.353209571e-03f, 3.328923026e-03f, 3.304632345e-03f,
+3.280337570e-03f, 3.256038743e-03f, 3.231735907e-03f, 3.207429103e-03f, 3.183118375e-03f, 3.158803763e-03f, 3.134485311e-03f, 3.110163060e-03f, 3.085837054e-03f, 3.061507333e-03f,
+3.037173941e-03f, 3.012836920e-03f, 2.988496311e-03f, 2.964152158e-03f, 2.939804502e-03f, 2.915453386e-03f, 2.891098851e-03f, 2.866740941e-03f, 2.842379698e-03f, 2.818015163e-03f,
+2.793647380e-03f, 2.769276390e-03f, 2.744902236e-03f, 2.720524959e-03f, 2.696144603e-03f, 2.671761210e-03f, 2.647374821e-03f, 2.622985480e-03f, 2.598593228e-03f, 2.574198108e-03f,
+2.549800162e-03f, 2.525399432e-03f, 2.500995961e-03f, 2.476589792e-03f, 2.452180965e-03f, 2.427769525e-03f, 2.403355512e-03f, 2.378938970e-03f, 2.354519940e-03f, 2.330098466e-03f,
+2.305674588e-03f, 2.281248351e-03f, 2.256819795e-03f, 2.232388964e-03f, 2.207955899e-03f, 2.183520644e-03f, 2.159083239e-03f, 2.134643729e-03f, 2.110202154e-03f, 2.085758558e-03f,
+2.061312982e-03f, 2.036865470e-03f, 2.012416062e-03f, 1.987964803e-03f, 1.963511733e-03f, 1.939056896e-03f, 1.914600334e-03f, 1.890142088e-03f, 1.865682202e-03f, 1.841220718e-03f,
+1.816757678e-03f, 1.792293124e-03f, 1.767827099e-03f, 1.743359645e-03f, 1.718890805e-03f, 1.694420620e-03f, 1.669949134e-03f, 1.645476387e-03f, 1.621002424e-03f, 1.596527286e-03f,
+1.572051015e-03f, 1.547573654e-03f, 1.523095246e-03f, 1.498615831e-03f, 1.474135454e-03f, 1.449654156e-03f, 1.425171979e-03f, 1.400688966e-03f, 1.376205159e-03f, 1.351720600e-03f,
+1.327235333e-03f, 1.302749398e-03f, 1.278262839e-03f, 1.253775697e-03f, 1.229288016e-03f, 1.204799837e-03f, 1.180311203e-03f, 1.155822156e-03f, 1.131332738e-03f, 1.106842991e-03f,
+1.082352959e-03f, 1.057862682e-03f, 1.033372205e-03f, 1.008881568e-03f, 9.843908141e-04f, 9.598999858e-04f, 9.354091252e-04f, 9.109182745e-04f, 8.864274762e-04f, 8.619367724e-04f,
+8.374462054e-04f, 8.129558176e-04f, 7.884656511e-04f, 7.639757484e-04f, 7.394861515e-04f, 7.149969028e-04f, 6.905080446e-04f, 6.660196191e-04f, 6.415316685e-04f, 6.170442352e-04f,
+5.925573612e-04f, 5.680710890e-04f, 5.435854608e-04f, 5.191005186e-04f, 4.946163049e-04f, 4.701328618e-04f, 4.456502316e-04f, 4.211684564e-04f, 3.966875785e-04f, 3.722076400e-04f,
+3.477286833e-04f, 3.232507504e-04f, 2.987738837e-04f, 2.742981252e-04f, 2.498235171e-04f, 2.253501017e-04f, 2.008779211e-04f, 1.764070175e-04f, 1.519374331e-04f, 1.274692100e-04f,
+1.030023903e-04f, 7.853701630e-05f, 5.407313005e-05f, 2.961077371e-05f, 5.149989409e-06f, -1.930918071e-05f, -4.376669453e-05f, -6.822250994e-05f, -9.267658481e-05f, -1.171288771e-04f,
+-1.415793446e-04f, -1.660279452e-04f, -1.904746370e-04f, -2.149193777e-04f, -2.393621254e-04f, -2.638028379e-04f, -2.882414732e-04f, -3.126779892e-04f, -3.371123439e-04f, -3.615444952e-04f,
+-3.859744011e-04f, -4.104020196e-04f, -4.348273086e-04f, -4.592502261e-04f, -4.836707302e-04f, -5.080887787e-04f, -5.325043298e-04f, -5.569173413e-04f, -5.813277714e-04f, -6.057355780e-04f,
+-6.301407193e-04f, -6.545431531e-04f, -6.789428377e-04f, -7.033397309e-04f, -7.277337910e-04f, -7.521249759e-04f, -7.765132437e-04f, -8.008985526e-04f, -8.252808605e-04f, -8.496601257e-04f,
+-8.740363062e-04f, -8.984093602e-04f, -9.227792457e-04f, -9.471459209e-04f, -9.715093439e-04f, -9.958694729e-04f, -1.020226266e-03f, -1.044579682e-03f, -1.068929678e-03f, -1.093276212e-03f,
+-1.117619244e-03f, -1.141958730e-03f, -1.166294630e-03f, -1.190626901e-03f, -1.214955503e-03f, -1.239280392e-03f, -1.263601527e-03f, -1.287918867e-03f, -1.312232369e-03f, -1.336541992e-03f,
+-1.360847695e-03f, -1.385149435e-03f, -1.409447172e-03f, -1.433740862e-03f, -1.458030465e-03f, -1.482315939e-03f, -1.506597242e-03f, -1.530874332e-03f, -1.555147169e-03f, -1.579415709e-03f,
+-1.603679913e-03f, -1.627939737e-03f, -1.652195141e-03f, -1.676446083e-03f, -1.700692521e-03f, -1.724934414e-03f, -1.749171720e-03f, -1.773404398e-03f, -1.797632405e-03f, -1.821855702e-03f,
+-1.846074245e-03f, -1.870287994e-03f, -1.894496907e-03f, -1.918700943e-03f, -1.942900059e-03f, -1.967094216e-03f, -1.991283371e-03f, -2.015467482e-03f, -2.039646509e-03f, -2.063820410e-03f,
+-2.087989143e-03f, -2.112152668e-03f, -2.136310942e-03f, -2.160463925e-03f, -2.184611575e-03f, -2.208753850e-03f, -2.232890710e-03f, -2.257022113e-03f, -2.281148018e-03f, -2.305268384e-03f,
+-2.329383168e-03f, -2.353492331e-03f, -2.377595830e-03f, -2.401693625e-03f, -2.425785674e-03f, -2.449871936e-03f, -2.473952370e-03f, -2.498026935e-03f, -2.522095588e-03f, -2.546158291e-03f,
+-2.570215000e-03f, -2.594265675e-03f, -2.618310275e-03f, -2.642348759e-03f, -2.666381086e-03f, -2.690407214e-03f, -2.714427103e-03f, -2.738440711e-03f, -2.762447997e-03f, -2.786448921e-03f,
+-2.810443441e-03f, -2.834431516e-03f, -2.858413106e-03f, -2.882388169e-03f, -2.906356665e-03f, -2.930318552e-03f, -2.954273789e-03f, -2.978222336e-03f, -3.002164152e-03f, -3.026099195e-03f,
+-3.050027426e-03f, -3.073948802e-03f, -3.097863284e-03f, -3.121770830e-03f, -3.145671399e-03f, -3.169564951e-03f, -3.193451446e-03f, -3.217330841e-03f, -3.241203097e-03f, -3.265068172e-03f,
+-3.288926027e-03f, -3.312776619e-03f, -3.336619909e-03f, -3.360455856e-03f, -3.384284420e-03f, -3.408105558e-03f, -3.431919232e-03f, -3.455725400e-03f, -3.479524021e-03f, -3.503315055e-03f,
+-3.527098462e-03f, -3.550874201e-03f, -3.574642232e-03f, -3.598402513e-03f, -3.622155004e-03f, -3.645899665e-03f, -3.669636456e-03f, -3.693365335e-03f, -3.717086263e-03f, -3.740799199e-03f,
+-3.764504103e-03f, -3.788200934e-03f, -3.811889651e-03f, -3.835570215e-03f, -3.859242586e-03f, -3.882906722e-03f, -3.906562583e-03f, -3.930210130e-03f, -3.953849321e-03f, -3.977480117e-03f,
+-4.001102478e-03f, -4.024716362e-03f, -4.048321731e-03f, -4.071918543e-03f, -4.095506759e-03f, -4.119086339e-03f, -4.142657241e-03f, -4.166219427e-03f, -4.189772856e-03f, -4.213317487e-03f,
+-4.236853282e-03f, -4.260380199e-03f, -4.283898200e-03f, -4.307407243e-03f, -4.330907288e-03f, -4.354398297e-03f, -4.377880228e-03f, -4.401353043e-03f, -4.424816700e-03f, -4.448271160e-03f,
+-4.471716384e-03f, -4.495152331e-03f, -4.518578961e-03f, -4.541996235e-03f, -4.565404113e-03f, -4.588802554e-03f, -4.612191520e-03f, -4.635570971e-03f, -4.658940866e-03f, -4.682301166e-03f,
+-4.705651831e-03f, -4.728992822e-03f, -4.752324099e-03f, -4.775645623e-03f, -4.798957353e-03f, -4.822259250e-03f, -4.845551275e-03f, -4.868833388e-03f, -4.892105549e-03f, -4.915367719e-03f,
+-4.938619858e-03f, -4.961861928e-03f, -4.985093887e-03f, -5.008315698e-03f, -5.031527321e-03f, -5.054728715e-03f, -5.077919842e-03f, -5.101100663e-03f, -5.124271138e-03f, -5.147431227e-03f,
+-5.170580892e-03f, -5.193720094e-03f, -5.216848792e-03f, -5.239966947e-03f, -5.263074522e-03f, -5.286171475e-03f, -5.309257769e-03f, -5.332333363e-03f, -5.355398219e-03f, -5.378452298e-03f,
+-5.401495561e-03f, -5.424527968e-03f, -5.447549480e-03f, -5.470560059e-03f, -5.493559665e-03f, -5.516548260e-03f, -5.539525804e-03f, -5.562492259e-03f, -5.585447585e-03f, -5.608391744e-03f,
+-5.631324697e-03f, -5.654246404e-03f, -5.677156828e-03f, -5.700055929e-03f, -5.722943669e-03f, -5.745820009e-03f, -5.768684909e-03f, -5.791538332e-03f, -5.814380238e-03f, -5.837210589e-03f,
+-5.860029347e-03f, -5.882836472e-03f, -5.905631926e-03f, -5.928415671e-03f, -5.951187667e-03f, -5.973947877e-03f, -5.996696262e-03f, -6.019432782e-03f, -6.042157401e-03f, -6.064870079e-03f,
+-6.087570778e-03f, -6.110259460e-03f, -6.132936085e-03f, -6.155600617e-03f, -6.178253016e-03f, -6.200893244e-03f, -6.223521263e-03f, -6.246137035e-03f, -6.268740520e-03f, -6.291331683e-03f,
+-6.313910483e-03f, -6.336476882e-03f, -6.359030844e-03f, -6.381572329e-03f, -6.404101299e-03f, -6.426617717e-03f, -6.449121544e-03f, -6.471612743e-03f, -6.494091274e-03f, -6.516557101e-03f,
+-6.539010186e-03f, -6.561450489e-03f, -6.583877975e-03f, -6.606292604e-03f, -6.628694338e-03f, -6.651083141e-03f, -6.673458974e-03f, -6.695821799e-03f, -6.718171579e-03f, -6.740508276e-03f,
+-6.762831852e-03f, -6.785142269e-03f, -6.807439490e-03f, -6.829723478e-03f, -6.851994194e-03f, -6.874251601e-03f, -6.896495662e-03f, -6.918726339e-03f, -6.940943594e-03f, -6.963147390e-03f,
+-6.985337690e-03f, -7.007514456e-03f, -7.029677651e-03f, -7.051827237e-03f, -7.073963177e-03f, -7.096085434e-03f, -7.118193970e-03f, -7.140288748e-03f, -7.162369731e-03f, -7.184436882e-03f,
+-7.206490163e-03f, -7.228529538e-03f, -7.250554969e-03f, -7.272566419e-03f, -7.294563851e-03f, -7.316547228e-03f, -7.338516512e-03f, -7.360471668e-03f, -7.382412658e-03f, -7.404339444e-03f,
+-7.426251991e-03f, -7.448150261e-03f, -7.470034217e-03f, -7.491903822e-03f, -7.513759041e-03f, -7.535599835e-03f, -7.557426168e-03f, -7.579238003e-03f, -7.601035304e-03f, -7.622818035e-03f,
+-7.644586157e-03f, -7.666339635e-03f, -7.688078433e-03f, -7.709802513e-03f, -7.731511838e-03f, -7.753206374e-03f, -7.774886082e-03f, -7.796550927e-03f, -7.818200872e-03f, -7.839835881e-03f,
+-7.861455917e-03f, -7.883060944e-03f, -7.904650926e-03f, -7.926225827e-03f, -7.947785609e-03f, -7.969330238e-03f, -7.990859676e-03f, -8.012373888e-03f, -8.033872837e-03f, -8.055356487e-03f,
+-8.076824803e-03f, -8.098277748e-03f, -8.119715286e-03f, -8.141137381e-03f, -8.162543997e-03f, -8.183935099e-03f, -8.205310649e-03f, -8.226670614e-03f, -8.248014956e-03f, -8.269343639e-03f,
+-8.290656629e-03f, -8.311953888e-03f, -8.333235383e-03f, -8.354501076e-03f, -8.375750932e-03f, -8.396984915e-03f, -8.418202990e-03f, -8.439405122e-03f, -8.460591274e-03f, -8.481761411e-03f,
+-8.502915498e-03f, -8.524053500e-03f, -8.545175379e-03f, -8.566281103e-03f, -8.587370634e-03f, -8.608443938e-03f, -8.629500979e-03f, -8.650541722e-03f, -8.671566132e-03f, -8.692574173e-03f,
+-8.713565811e-03f, -8.734541009e-03f, -8.755499734e-03f, -8.776441950e-03f, -8.797367622e-03f, -8.818276714e-03f, -8.839169193e-03f, -8.860045022e-03f, -8.880904167e-03f, -8.901746593e-03f,
+-8.922572265e-03f, -8.943381148e-03f, -8.964173208e-03f, -8.984948409e-03f, -9.005706717e-03f, -9.026448097e-03f, -9.047172515e-03f, -9.067879935e-03f, -9.088570324e-03f, -9.109243646e-03f,
+-9.129899867e-03f, -9.150538952e-03f, -9.171160868e-03f, -9.191765579e-03f, -9.212353050e-03f, -9.232923249e-03f, -9.253476139e-03f, -9.274011687e-03f, -9.294529859e-03f, -9.315030620e-03f,
+-9.335513936e-03f, -9.355979773e-03f, -9.376428097e-03f, -9.396858873e-03f, -9.417272067e-03f, -9.437667645e-03f, -9.458045574e-03f, -9.478405819e-03f, -9.498748346e-03f, -9.519073121e-03f,
+-9.539380110e-03f, -9.559669280e-03f, -9.579940596e-03f, -9.600194025e-03f, -9.620429533e-03f, -9.640647086e-03f, -9.660846651e-03f, -9.681028193e-03f, -9.701191679e-03f, -9.721337076e-03f,
+-9.741464349e-03f, -9.761573466e-03f, -9.781664393e-03f, -9.801737096e-03f, -9.821791541e-03f, -9.841827697e-03f, -9.861845528e-03f, -9.881845001e-03f, -9.901826084e-03f, -9.921788744e-03f,
+-9.941732945e-03f, -9.961658657e-03f, -9.981565845e-03f, -1.000145448e-02f, -1.002132452e-02f, -1.004117593e-02f, -1.006100870e-02f, -1.008082277e-02f, -1.010061812e-02f, -1.012039472e-02f,
+-1.014015252e-02f, -1.015989151e-02f, -1.017961165e-02f, -1.019931289e-02f, -1.021899522e-02f, -1.023865860e-02f, -1.025830299e-02f, -1.027792836e-02f, -1.029753469e-02f, -1.031712193e-02f,
+-1.033669005e-02f, -1.035623903e-02f, -1.037576883e-02f, -1.039527942e-02f, -1.041477076e-02f, -1.043424282e-02f, -1.045369558e-02f, -1.047312899e-02f, -1.049254302e-02f, -1.051193766e-02f,
+-1.053131285e-02f, -1.055066857e-02f, -1.057000479e-02f, -1.058932147e-02f, -1.060861858e-02f, -1.062789610e-02f, -1.064715398e-02f, -1.066639221e-02f, -1.068561073e-02f, -1.070480953e-02f,
+-1.072398857e-02f, -1.074314782e-02f, -1.076228725e-02f, -1.078140682e-02f, -1.080050650e-02f, -1.081958627e-02f, -1.083864609e-02f, -1.085768593e-02f, -1.087670576e-02f, -1.089570554e-02f,
+-1.091468525e-02f, -1.093364484e-02f, -1.095258431e-02f, -1.097150360e-02f, -1.099040269e-02f, -1.100928155e-02f, -1.102814014e-02f, -1.104697844e-02f, -1.106579641e-02f, -1.108459403e-02f,
+-1.110337126e-02f, -1.112212807e-02f, -1.114086442e-02f, -1.115958030e-02f, -1.117827566e-02f, -1.119695048e-02f, -1.121560473e-02f, -1.123423837e-02f, -1.125285138e-02f, -1.127144372e-02f,
+-1.129001536e-02f, -1.130856627e-02f, -1.132709643e-02f, -1.134560579e-02f, -1.136409433e-02f, -1.138256203e-02f, -1.140100884e-02f, -1.141943474e-02f, -1.143783970e-02f, -1.145622369e-02f,
+-1.147458667e-02f, -1.149292862e-02f, -1.151124951e-02f, -1.152954931e-02f, -1.154782798e-02f, -1.156608549e-02f, -1.158432182e-02f, -1.160253694e-02f, -1.162073081e-02f, -1.163890341e-02f,
+-1.165705471e-02f, -1.167518467e-02f, -1.169329326e-02f, -1.171138046e-02f, -1.172944624e-02f, -1.174749057e-02f, -1.176551341e-02f, -1.178351473e-02f, -1.180149452e-02f, -1.181945273e-02f,
+-1.183738934e-02f, -1.185530432e-02f, -1.187319764e-02f, -1.189106927e-02f, -1.190891917e-02f, -1.192674733e-02f, -1.194455371e-02f, -1.196233828e-02f, -1.198010101e-02f, -1.199784188e-02f,
+-1.201556085e-02f, -1.203325790e-02f, -1.205093299e-02f, -1.206858610e-02f, -1.208621720e-02f, -1.210382626e-02f, -1.212141324e-02f, -1.213897813e-02f, -1.215652089e-02f, -1.217404149e-02f,
+-1.219153991e-02f, -1.220901611e-02f, -1.222647007e-02f, -1.224390176e-02f, -1.226131115e-02f, -1.227869821e-02f, -1.229606291e-02f, -1.231340522e-02f, -1.233072512e-02f, -1.234802258e-02f,
+-1.236529757e-02f, -1.238255006e-02f, -1.239978002e-02f, -1.241698742e-02f, -1.243417224e-02f, -1.245133444e-02f, -1.246847401e-02f, -1.248559091e-02f, -1.250268511e-02f, -1.251975658e-02f,
+-1.253680530e-02f, -1.255383124e-02f, -1.257083438e-02f, -1.258781467e-02f, -1.260477210e-02f, -1.262170664e-02f, -1.263861826e-02f, -1.265550693e-02f, -1.267237263e-02f, -1.268921532e-02f,
+-1.270603498e-02f, -1.272283158e-02f, -1.273960510e-02f, -1.275635551e-02f, -1.277308277e-02f, -1.278978687e-02f, -1.280646777e-02f, -1.282312545e-02f, -1.283975988e-02f, -1.285637104e-02f,
+-1.287295889e-02f, -1.288952341e-02f, -1.290606457e-02f, -1.292258234e-02f, -1.293907670e-02f, -1.295554763e-02f, -1.297199509e-02f, -1.298841905e-02f, -1.300481950e-02f, -1.302119640e-02f,
+-1.303754972e-02f, -1.305387945e-02f, -1.307018555e-02f, -1.308646799e-02f, -1.310272676e-02f, -1.311896182e-02f, -1.313517315e-02f, -1.315136072e-02f, -1.316752450e-02f, -1.318366447e-02f,
+-1.319978060e-02f, -1.321587287e-02f, -1.323194125e-02f, -1.324798571e-02f, -1.326400623e-02f, -1.328000278e-02f, -1.329597533e-02f, -1.331192387e-02f, -1.332784835e-02f, -1.334374877e-02f,
+-1.335962508e-02f, -1.337547727e-02f, -1.339130531e-02f, -1.340710917e-02f, -1.342288883e-02f, -1.343864427e-02f, -1.345437545e-02f, -1.347008235e-02f, -1.348576494e-02f, -1.350142321e-02f,
+-1.351705712e-02f, -1.353266665e-02f, -1.354825178e-02f, -1.356381247e-02f, -1.357934871e-02f, -1.359486047e-02f, -1.361034772e-02f, -1.362581043e-02f, -1.364124859e-02f, -1.365666217e-02f,
+-1.367205114e-02f, -1.368741548e-02f, -1.370275516e-02f, -1.371807016e-02f, -1.373336045e-02f, -1.374862601e-02f, -1.376386682e-02f, -1.377908284e-02f, -1.379427406e-02f, -1.380944044e-02f,
+-1.382458198e-02f, -1.383969863e-02f, -1.385479038e-02f, -1.386985720e-02f, -1.388489907e-02f, -1.389991596e-02f, -1.391490785e-02f, -1.392987472e-02f, -1.394481653e-02f, -1.395973327e-02f,
+-1.397462492e-02f, -1.398949144e-02f, -1.400433281e-02f, -1.401914902e-02f, -1.403394003e-02f, -1.404870582e-02f, -1.406344637e-02f, -1.407816166e-02f, -1.409285166e-02f, -1.410751634e-02f,
+-1.412215569e-02f, -1.413676968e-02f, -1.415135828e-02f, -1.416592148e-02f, -1.418045924e-02f, -1.419497155e-02f, -1.420945839e-02f, -1.422391972e-02f, -1.423835553e-02f, -1.425276579e-02f,
+-1.426715048e-02f, -1.428150957e-02f, -1.429584305e-02f, -1.431015089e-02f, -1.432443307e-02f, -1.433868956e-02f, -1.435292034e-02f, -1.436712539e-02f, -1.438130468e-02f, -1.439545820e-02f,
+-1.440958591e-02f, -1.442368781e-02f, -1.443776386e-02f, -1.445181403e-02f, -1.446583832e-02f, -1.447983670e-02f, -1.449380914e-02f, -1.450775562e-02f, -1.452167612e-02f, -1.453557062e-02f,
+-1.454943909e-02f, -1.456328151e-02f, -1.457709787e-02f, -1.459088813e-02f, -1.460465228e-02f, -1.461839029e-02f, -1.463210215e-02f, -1.464578783e-02f, -1.465944730e-02f, -1.467308055e-02f,
+-1.468668755e-02f, -1.470026829e-02f, -1.471382274e-02f, -1.472735087e-02f, -1.474085268e-02f, -1.475432813e-02f, -1.476777720e-02f, -1.478119988e-02f, -1.479459614e-02f, -1.480796596e-02f,
+-1.482130932e-02f, -1.483462619e-02f, -1.484791657e-02f, -1.486118041e-02f, -1.487441771e-02f, -1.488762845e-02f, -1.490081259e-02f, -1.491397013e-02f, -1.492710103e-02f, -1.494020529e-02f,
+-1.495328287e-02f, -1.496633376e-02f, -1.497935793e-02f, -1.499235537e-02f, -1.500532606e-02f, -1.501826997e-02f, -1.503118708e-02f, -1.504407738e-02f, -1.505694083e-02f, -1.506977743e-02f,
+-1.508258716e-02f, -1.509536998e-02f, -1.510812588e-02f, -1.512085485e-02f, -1.513355685e-02f, -1.514623188e-02f, -1.515887990e-02f, -1.517150091e-02f, -1.518409488e-02f, -1.519666178e-02f,
+-1.520920161e-02f, -1.522171433e-02f, -1.523419994e-02f, -1.524665841e-02f, -1.525908972e-02f, -1.527149385e-02f, -1.528387078e-02f, -1.529622049e-02f, -1.530854297e-02f, -1.532083818e-02f,
+-1.533310613e-02f, -1.534534677e-02f, -1.535756010e-02f, -1.536974610e-02f, -1.538190474e-02f, -1.539403601e-02f, -1.540613989e-02f, -1.541821636e-02f, -1.543026539e-02f, -1.544228698e-02f,
+-1.545428110e-02f, -1.546624773e-02f, -1.547818686e-02f, -1.549009846e-02f, -1.550198251e-02f, -1.551383901e-02f, -1.552566792e-02f, -1.553746924e-02f, -1.554924293e-02f, -1.556098899e-02f,
+-1.557270739e-02f, -1.558439812e-02f, -1.559606116e-02f, -1.560769649e-02f, -1.561930409e-02f, -1.563088394e-02f, -1.564243603e-02f, -1.565396033e-02f, -1.566545684e-02f, -1.567692552e-02f,
+-1.568836636e-02f, -1.569977936e-02f, -1.571116447e-02f, -1.572252170e-02f, -1.573385102e-02f, -1.574515241e-02f, -1.575642586e-02f, -1.576767135e-02f, -1.577888885e-02f, -1.579007836e-02f,
+-1.580123986e-02f, -1.581237332e-02f, -1.582347874e-02f, -1.583455608e-02f, -1.584560535e-02f, -1.585662651e-02f, -1.586761955e-02f, -1.587858446e-02f, -1.588952122e-02f, -1.590042981e-02f,
+-1.591131021e-02f, -1.592216240e-02f, -1.593298638e-02f, -1.594378212e-02f, -1.595454961e-02f, -1.596528882e-02f, -1.597599975e-02f, -1.598668237e-02f, -1.599733667e-02f, -1.600796264e-02f,
+-1.601856025e-02f, -1.602912949e-02f, -1.603967034e-02f, -1.605018280e-02f, -1.606066683e-02f, -1.607112242e-02f, -1.608154957e-02f, -1.609194825e-02f, -1.610231844e-02f, -1.611266013e-02f,
+-1.612297331e-02f, -1.613325796e-02f, -1.614351405e-02f, -1.615374159e-02f, -1.616394054e-02f, -1.617411090e-02f, -1.618425265e-02f, -1.619436577e-02f, -1.620445025e-02f, -1.621450607e-02f,
+-1.622453322e-02f, -1.623453168e-02f, -1.624450144e-02f, -1.625444248e-02f, -1.626435478e-02f, -1.627423833e-02f, -1.628409312e-02f, -1.629391913e-02f, -1.630371634e-02f, -1.631348474e-02f,
+-1.632322432e-02f, -1.633293505e-02f, -1.634261693e-02f, -1.635226994e-02f, -1.636189407e-02f, -1.637148930e-02f, -1.638105561e-02f, -1.639059300e-02f, -1.640010144e-02f, -1.640958092e-02f,
+-1.641903143e-02f, -1.642845295e-02f, -1.643784548e-02f, -1.644720898e-02f, -1.645654346e-02f, -1.646584890e-02f, -1.647512527e-02f, -1.648437257e-02f, -1.649359079e-02f, -1.650277991e-02f,
+-1.651193991e-02f, -1.652107078e-02f, -1.653017252e-02f, -1.653924509e-02f, -1.654828850e-02f, -1.655730272e-02f, -1.656628775e-02f, -1.657524356e-02f, -1.658417016e-02f, -1.659306751e-02f,
+-1.660193561e-02f, -1.661077445e-02f, -1.661958401e-02f, -1.662836428e-02f, -1.663711524e-02f, -1.664583689e-02f, -1.665452920e-02f, -1.666319218e-02f, -1.667182579e-02f, -1.668043004e-02f,
+-1.668900490e-02f, -1.669755037e-02f, -1.670606642e-02f, -1.671455306e-02f, -1.672301026e-02f, -1.673143802e-02f, -1.673983631e-02f, -1.674820514e-02f, -1.675654448e-02f, -1.676485432e-02f,
+-1.677313465e-02f, -1.678138546e-02f, -1.678960674e-02f, -1.679779847e-02f, -1.680596065e-02f, -1.681409325e-02f, -1.682219627e-02f, -1.683026969e-02f, -1.683831351e-02f, -1.684632770e-02f,
+-1.685431227e-02f, -1.686226719e-02f, -1.687019246e-02f, -1.687808807e-02f, -1.688595399e-02f, -1.689379023e-02f, -1.690159676e-02f, -1.690937359e-02f, -1.691712068e-02f, -1.692483805e-02f,
+-1.693252566e-02f, -1.694018352e-02f, -1.694781161e-02f, -1.695540991e-02f, -1.696297843e-02f, -1.697051714e-02f, -1.697802604e-02f, -1.698550511e-02f, -1.699295434e-02f, -1.700037373e-02f,
+-1.700776326e-02f, -1.701512292e-02f, -1.702245271e-02f, -1.702975260e-02f, -1.703702259e-02f, -1.704426267e-02f, -1.705147283e-02f, -1.705865305e-02f, -1.706580333e-02f, -1.707292366e-02f,
+-1.708001402e-02f, -1.708707441e-02f, -1.709410482e-02f, -1.710110523e-02f, -1.710807564e-02f, -1.711501603e-02f, -1.712192640e-02f, -1.712880673e-02f, -1.713565702e-02f, -1.714247725e-02f,
+-1.714926742e-02f, -1.715602752e-02f, -1.716275753e-02f, -1.716945745e-02f, -1.717612726e-02f, -1.718276696e-02f, -1.718937654e-02f, -1.719595599e-02f, -1.720250530e-02f, -1.720902446e-02f,
+-1.721551346e-02f, -1.722197228e-02f, -1.722840094e-02f, -1.723479940e-02f, -1.724116767e-02f, -1.724750573e-02f, -1.725381358e-02f, -1.726009120e-02f, -1.726633860e-02f, -1.727255575e-02f,
+-1.727874265e-02f, -1.728489929e-02f, -1.729102567e-02f, -1.729712177e-02f, -1.730318759e-02f, -1.730922312e-02f, -1.731522834e-02f, -1.732120325e-02f, -1.732714785e-02f, -1.733306212e-02f,
+-1.733894606e-02f, -1.734479965e-02f, -1.735062289e-02f, -1.735641578e-02f, -1.736217829e-02f, -1.736791044e-02f, -1.737361220e-02f, -1.737928357e-02f, -1.738492454e-02f, -1.739053510e-02f,
+-1.739611525e-02f, -1.740166498e-02f, -1.740718428e-02f, -1.741267315e-02f, -1.741813157e-02f, -1.742355954e-02f, -1.742895705e-02f, -1.743432409e-02f, -1.743966066e-02f, -1.744496675e-02f,
+-1.745024235e-02f, -1.745548746e-02f, -1.746070206e-02f, -1.746588615e-02f, -1.747103973e-02f, -1.747616279e-02f, -1.748125531e-02f, -1.748631730e-02f, -1.749134875e-02f, -1.749634964e-02f,
+-1.750131998e-02f, -1.750625976e-02f, -1.751116896e-02f, -1.751604759e-02f, -1.752089564e-02f, -1.752571309e-02f, -1.753049996e-02f, -1.753525622e-02f, -1.753998187e-02f, -1.754467690e-02f,
+-1.754934132e-02f, -1.755397511e-02f, -1.755857827e-02f, -1.756315079e-02f, -1.756769266e-02f, -1.757220389e-02f, -1.757668446e-02f, -1.758113437e-02f, -1.758555361e-02f, -1.758994218e-02f,
+-1.759430006e-02f, -1.759862727e-02f, -1.760292379e-02f, -1.760718961e-02f, -1.761142473e-02f, -1.761562914e-02f, -1.761980284e-02f, -1.762394583e-02f, -1.762805810e-02f, -1.763213964e-02f,
+-1.763619045e-02f, -1.764021052e-02f, -1.764419985e-02f, -1.764815843e-02f, -1.765208627e-02f, -1.765598335e-02f, -1.765984966e-02f, -1.766368522e-02f, -1.766749000e-02f, -1.767126400e-02f,
+-1.767500723e-02f, -1.767871968e-02f, -1.768240134e-02f, -1.768605220e-02f, -1.768967227e-02f, -1.769326154e-02f, -1.769682000e-02f, -1.770034766e-02f, -1.770384450e-02f, -1.770731052e-02f,
+-1.771074572e-02f, -1.771415010e-02f, -1.771752365e-02f, -1.772086636e-02f, -1.772417824e-02f, -1.772745928e-02f, -1.773070948e-02f, -1.773392883e-02f, -1.773711732e-02f, -1.774027496e-02f,
+-1.774340175e-02f, -1.774649767e-02f, -1.774956273e-02f, -1.775259692e-02f, -1.775560024e-02f, -1.775857268e-02f, -1.776151425e-02f, -1.776442493e-02f, -1.776730474e-02f, -1.777015365e-02f,
+-1.777297168e-02f, -1.777575881e-02f, -1.777851505e-02f, -1.778124039e-02f, -1.778393483e-02f, -1.778659837e-02f, -1.778923100e-02f, -1.779183272e-02f, -1.779440354e-02f, -1.779694343e-02f,
+-1.779945242e-02f, -1.780193048e-02f, -1.780437763e-02f, -1.780679385e-02f, -1.780917915e-02f, -1.781153352e-02f, -1.781385696e-02f, -1.781614947e-02f, -1.781841105e-02f, -1.782064169e-02f,
+-1.782284140e-02f, -1.782501017e-02f, -1.782714800e-02f, -1.782925488e-02f, -1.783133083e-02f, -1.783337583e-02f, -1.783538988e-02f, -1.783737298e-02f, -1.783932514e-02f, -1.784124634e-02f,
+-1.784313660e-02f, -1.784499590e-02f, -1.784682424e-02f, -1.784862163e-02f, -1.785038806e-02f, -1.785212354e-02f, -1.785382806e-02f, -1.785550161e-02f, -1.785714421e-02f, -1.785875585e-02f,
+-1.786033652e-02f, -1.786188623e-02f, -1.786340498e-02f, -1.786489276e-02f, -1.786634958e-02f, -1.786777543e-02f, -1.786917032e-02f, -1.787053424e-02f, -1.787186720e-02f, -1.787316918e-02f,
+-1.787444021e-02f, -1.787568026e-02f, -1.787688935e-02f, -1.787806747e-02f, -1.787921462e-02f, -1.788033081e-02f, -1.788141603e-02f, -1.788247028e-02f, -1.788349357e-02f, -1.788448589e-02f,
+-1.788544724e-02f, -1.788637762e-02f, -1.788727705e-02f, -1.788814550e-02f, -1.788898299e-02f, -1.788978952e-02f, -1.789056509e-02f, -1.789130969e-02f, -1.789202333e-02f, -1.789270601e-02f,
+-1.789335772e-02f, -1.789397848e-02f, -1.789456828e-02f, -1.789512713e-02f, -1.789565501e-02f, -1.789615194e-02f, -1.789661792e-02f, -1.789705294e-02f, -1.789745702e-02f, -1.789783014e-02f,
+-1.789817231e-02f, -1.789848354e-02f, -1.789876381e-02f, -1.789901315e-02f, -1.789923154e-02f, -1.789941899e-02f, -1.789957550e-02f, -1.789970107e-02f, -1.789979571e-02f, -1.789985941e-02f,
+-1.789989218e-02f, -1.789989401e-02f, -1.789986492e-02f, -1.789980491e-02f, -1.789971397e-02f, -1.789959210e-02f, -1.789943932e-02f, -1.789925562e-02f, -1.789904100e-02f, -1.789879547e-02f,
+-1.789851903e-02f, -1.789821168e-02f, -1.789787343e-02f, -1.789750428e-02f, -1.789710422e-02f, -1.789667326e-02f, -1.789621141e-02f, -1.789571867e-02f, -1.789519504e-02f, -1.789464053e-02f,
+-1.789405513e-02f, -1.789343885e-02f, -1.789279169e-02f, -1.789211366e-02f, -1.789140475e-02f, -1.789066498e-02f, -1.788989435e-02f, -1.788909285e-02f, -1.788826050e-02f, -1.788739729e-02f,
+-1.788650323e-02f, -1.788557833e-02f, -1.788462258e-02f, -1.788363599e-02f, -1.788261856e-02f, -1.788157030e-02f, -1.788049121e-02f, -1.787938130e-02f, -1.787824057e-02f, -1.787706902e-02f,
+-1.787586666e-02f, -1.787463348e-02f, -1.787336951e-02f, -1.787207473e-02f, -1.787074916e-02f, -1.786939279e-02f, -1.786800564e-02f, -1.786658770e-02f, -1.786513899e-02f, -1.786365950e-02f,
+-1.786214924e-02f, -1.786060821e-02f, -1.785903643e-02f, -1.785743389e-02f, -1.785580060e-02f, -1.785413656e-02f, -1.785244178e-02f, -1.785071626e-02f, -1.784896001e-02f, -1.784717304e-02f,
+-1.784535534e-02f, -1.784350693e-02f, -1.784162781e-02f, -1.783971798e-02f, -1.783777745e-02f, -1.783580623e-02f, -1.783380431e-02f, -1.783177171e-02f, -1.782970843e-02f, -1.782761448e-02f,
+-1.782548986e-02f, -1.782333458e-02f, -1.782114865e-02f, -1.781893206e-02f, -1.781668483e-02f, -1.781440696e-02f, -1.781209845e-02f, -1.780975932e-02f, -1.780738957e-02f, -1.780498920e-02f,
+-1.780255822e-02f, -1.780009665e-02f, -1.779760447e-02f, -1.779508171e-02f, -1.779252836e-02f, -1.778994443e-02f, -1.778732993e-02f, -1.778468487e-02f, -1.778200925e-02f, -1.777930308e-02f,
+-1.777656637e-02f, -1.777379911e-02f, -1.777100133e-02f, -1.776817302e-02f, -1.776531420e-02f, -1.776242486e-02f, -1.775950502e-02f, -1.775655468e-02f, -1.775357386e-02f, -1.775056255e-02f,
+-1.774752076e-02f, -1.774444851e-02f, -1.774134580e-02f, -1.773821264e-02f, -1.773504902e-02f, -1.773185497e-02f, -1.772863049e-02f, -1.772537559e-02f, -1.772209027e-02f, -1.771877454e-02f,
+-1.771542841e-02f, -1.771205189e-02f, -1.770864498e-02f, -1.770520769e-02f, -1.770174004e-02f, -1.769824203e-02f, -1.769471366e-02f, -1.769115494e-02f, -1.768756589e-02f, -1.768394651e-02f,
+-1.768029681e-02f, -1.767661680e-02f, -1.767290648e-02f, -1.766916587e-02f, -1.766539497e-02f, -1.766159379e-02f, -1.765776234e-02f, -1.765390063e-02f, -1.765000866e-02f, -1.764608646e-02f,
+-1.764213401e-02f, -1.763815134e-02f, -1.763413845e-02f, -1.763009535e-02f, -1.762602205e-02f, -1.762191856e-02f, -1.761778489e-02f, -1.761362104e-02f, -1.760942703e-02f, -1.760520286e-02f,
+-1.760094855e-02f, -1.759666411e-02f, -1.759234953e-02f, -1.758800484e-02f, -1.758363004e-02f, -1.757922514e-02f, -1.757479015e-02f, -1.757032509e-02f, -1.756582995e-02f, -1.756130475e-02f,
+-1.755674951e-02f, -1.755216422e-02f, -1.754754890e-02f, -1.754290356e-02f, -1.753822821e-02f, -1.753352286e-02f, -1.752878752e-02f, -1.752402220e-02f, -1.751922691e-02f, -1.751440165e-02f,
+-1.750954645e-02f, -1.750466131e-02f, -1.749974624e-02f, -1.749480125e-02f, -1.748982635e-02f, -1.748482156e-02f, -1.747978687e-02f, -1.747472231e-02f, -1.746962789e-02f, -1.746450361e-02f,
+-1.745934948e-02f, -1.745416552e-02f, -1.744895174e-02f, -1.744370815e-02f, -1.743843476e-02f, -1.743313157e-02f, -1.742779861e-02f, -1.742243588e-02f, -1.741704340e-02f, -1.741162116e-02f,
+-1.740616920e-02f, -1.740068751e-02f, -1.739517611e-02f, -1.738963502e-02f, -1.738406423e-02f, -1.737846377e-02f, -1.737283364e-02f, -1.736717386e-02f, -1.736148444e-02f, -1.735576539e-02f,
+-1.735001672e-02f, -1.734423844e-02f, -1.733843057e-02f, -1.733259311e-02f, -1.732672609e-02f, -1.732082951e-02f, -1.731490338e-02f, -1.730894772e-02f, -1.730296253e-02f, -1.729694784e-02f,
+-1.729090364e-02f, -1.728482997e-02f, -1.727872682e-02f, -1.727259421e-02f, -1.726643215e-02f, -1.726024066e-02f, -1.725401974e-02f, -1.724776942e-02f, -1.724148969e-02f, -1.723518059e-02f,
+-1.722884211e-02f, -1.722247427e-02f, -1.721607708e-02f, -1.720965057e-02f, -1.720319473e-02f, -1.719670959e-02f, -1.719019515e-02f, -1.718365143e-02f, -1.717707844e-02f, -1.717047620e-02f,
+-1.716384472e-02f, -1.715718401e-02f, -1.715049409e-02f, -1.714377496e-02f, -1.713702665e-02f, -1.713024917e-02f, -1.712344252e-02f, -1.711660673e-02f, -1.710974180e-02f, -1.710284776e-02f,
+-1.709592461e-02f, -1.708897237e-02f, -1.708199105e-02f, -1.707498066e-02f, -1.706794123e-02f, -1.706087276e-02f, -1.705377527e-02f, -1.704664878e-02f, -1.703949328e-02f, -1.703230881e-02f,
+-1.702509538e-02f, -1.701785299e-02f, -1.701058167e-02f, -1.700328143e-02f, -1.699595228e-02f, -1.698859424e-02f, -1.698120732e-02f, -1.697379153e-02f, -1.696634690e-02f, -1.695887343e-02f,
+-1.695137114e-02f, -1.694384005e-02f, -1.693628017e-02f, -1.692869152e-02f, -1.692107410e-02f, -1.691342794e-02f, -1.690575305e-02f, -1.689804945e-02f, -1.689031714e-02f, -1.688255615e-02f,
+-1.687476650e-02f, -1.686694819e-02f, -1.685910124e-02f, -1.685122566e-02f, -1.684332149e-02f, -1.683538871e-02f, -1.682742737e-02f, -1.681943746e-02f, -1.681141900e-02f, -1.680337202e-02f,
+-1.679529652e-02f, -1.678719253e-02f, -1.677906005e-02f, -1.677089911e-02f, -1.676270971e-02f, -1.675449189e-02f, -1.674624564e-02f, -1.673797099e-02f, -1.672966796e-02f, -1.672133655e-02f,
+-1.671297679e-02f, -1.670458870e-02f, -1.669617228e-02f, -1.668772756e-02f, -1.667925455e-02f, -1.667075327e-02f, -1.666222373e-02f, -1.665366595e-02f, -1.664507996e-02f, -1.663646575e-02f,
+-1.662782336e-02f, -1.661915279e-02f, -1.661045407e-02f, -1.660172721e-02f, -1.659297223e-02f, -1.658418915e-02f, -1.657537798e-02f, -1.656653873e-02f, -1.655767143e-02f, -1.654877610e-02f,
+-1.653985275e-02f, -1.653090139e-02f, -1.652192205e-02f, -1.651291474e-02f, -1.650387949e-02f, -1.649481630e-02f, -1.648572519e-02f, -1.647660619e-02f, -1.646745930e-02f, -1.645828456e-02f,
+-1.644908196e-02f, -1.643985155e-02f, -1.643059332e-02f, -1.642130730e-02f, -1.641199350e-02f, -1.640265195e-02f, -1.639328266e-02f, -1.638388565e-02f, -1.637446094e-02f, -1.636500855e-02f,
+-1.635552849e-02f, -1.634602078e-02f, -1.633648544e-02f, -1.632692249e-02f, -1.631733194e-02f, -1.630771383e-02f, -1.629806815e-02f, -1.628839494e-02f, -1.627869421e-02f, -1.626896597e-02f,
+-1.625921026e-02f, -1.624942708e-02f, -1.623961645e-02f, -1.622977840e-02f, -1.621991295e-02f, -1.621002010e-02f, -1.620009988e-02f, -1.619015231e-02f, -1.618017741e-02f, -1.617017520e-02f,
+-1.616014569e-02f, -1.615008891e-02f, -1.614000487e-02f, -1.612989359e-02f, -1.611975510e-02f, -1.610958941e-02f, -1.609939654e-02f, -1.608917651e-02f, -1.607892934e-02f, -1.606865505e-02f,
+-1.605835366e-02f, -1.604802519e-02f, -1.603766965e-02f, -1.602728707e-02f, -1.601687747e-02f, -1.600644087e-02f, -1.599597728e-02f, -1.598548673e-02f, -1.597496923e-02f, -1.596442481e-02f,
+-1.595385349e-02f, -1.594325528e-02f, -1.593263021e-02f, -1.592197830e-02f, -1.591129956e-02f, -1.590059402e-02f, -1.588986170e-02f, -1.587910261e-02f, -1.586831678e-02f, -1.585750423e-02f,
+-1.584666497e-02f, -1.583579904e-02f, -1.582490644e-02f, -1.581398720e-02f, -1.580304135e-02f, -1.579206889e-02f, -1.578106985e-02f, -1.577004426e-02f, -1.575899213e-02f, -1.574791349e-02f,
+-1.573680834e-02f, -1.572567673e-02f, -1.571451866e-02f, -1.570333415e-02f, -1.569212324e-02f, -1.568088593e-02f, -1.566962226e-02f, -1.565833223e-02f, -1.564701588e-02f, -1.563567323e-02f,
+-1.562430428e-02f, -1.561290908e-02f, -1.560148763e-02f, -1.559003997e-02f, -1.557856610e-02f, -1.556706605e-02f, -1.555553985e-02f, -1.554398752e-02f, -1.553240907e-02f, -1.552080453e-02f,
+-1.550917392e-02f, -1.549751727e-02f, -1.548583459e-02f, -1.547412590e-02f, -1.546239123e-02f, -1.545063060e-02f, -1.543884404e-02f, -1.542703155e-02f, -1.541519318e-02f, -1.540332893e-02f,
+-1.539143883e-02f, -1.537952290e-02f, -1.536758117e-02f, -1.535561366e-02f, -1.534362038e-02f, -1.533160137e-02f, -1.531955663e-02f, -1.530748621e-02f, -1.529539012e-02f, -1.528326837e-02f,
+-1.527112100e-02f, -1.525894803e-02f, -1.524674948e-02f, -1.523452536e-02f, -1.522227572e-02f, -1.521000056e-02f, -1.519769991e-02f, -1.518537379e-02f, -1.517302223e-02f, -1.516064525e-02f,
+-1.514824288e-02f, -1.513581512e-02f, -1.512336202e-02f, -1.511088359e-02f, -1.509837985e-02f, -1.508585083e-02f, -1.507329655e-02f, -1.506071704e-02f, -1.504811231e-02f, -1.503548239e-02f,
+-1.502282731e-02f, -1.501014709e-02f, -1.499744175e-02f, -1.498471131e-02f, -1.497195581e-02f, -1.495917525e-02f, -1.494636967e-02f, -1.493353909e-02f, -1.492068354e-02f, -1.490780303e-02f,
+-1.489489759e-02f, -1.488196725e-02f, -1.486901203e-02f, -1.485603195e-02f, -1.484302704e-02f, -1.482999732e-02f, -1.481694281e-02f, -1.480386355e-02f, -1.479075954e-02f, -1.477763083e-02f,
+-1.476447742e-02f, -1.475129936e-02f, -1.473809665e-02f, -1.472486933e-02f, -1.471161742e-02f, -1.469834094e-02f, -1.468503992e-02f, -1.467171439e-02f, -1.465836436e-02f, -1.464498986e-02f,
+-1.463159092e-02f, -1.461816756e-02f, -1.460471981e-02f, -1.459124769e-02f, -1.457775123e-02f, -1.456423044e-02f, -1.455068536e-02f, -1.453711602e-02f, -1.452352242e-02f, -1.450990461e-02f,
+-1.449626261e-02f, -1.448259643e-02f, -1.446890612e-02f, -1.445519168e-02f, -1.444145315e-02f, -1.442769055e-02f, -1.441390391e-02f, -1.440009325e-02f, -1.438625860e-02f, -1.437239998e-02f,
+-1.435851742e-02f, -1.434461095e-02f, -1.433068058e-02f, -1.431672635e-02f, -1.430274828e-02f, -1.428874640e-02f, -1.427472073e-02f, -1.426067130e-02f, -1.424659813e-02f, -1.423250125e-02f,
+-1.421838069e-02f, -1.420423647e-02f, -1.419006862e-02f, -1.417587716e-02f, -1.416166212e-02f, -1.414742352e-02f, -1.413316140e-02f, -1.411887577e-02f, -1.410456667e-02f, -1.409023412e-02f,
+-1.407587815e-02f, -1.406149878e-02f, -1.404709603e-02f, -1.403266995e-02f, -1.401822054e-02f, -1.400374784e-02f, -1.398925188e-02f, -1.397473268e-02f, -1.396019027e-02f, -1.394562467e-02f,
+-1.393103591e-02f, -1.391642402e-02f, -1.390178903e-02f, -1.388713096e-02f, -1.387244983e-02f, -1.385774568e-02f, -1.384301853e-02f, -1.382826841e-02f, -1.381349535e-02f, -1.379869937e-02f,
+-1.378388050e-02f, -1.376903876e-02f, -1.375417419e-02f, -1.373928681e-02f, -1.372437665e-02f, -1.370944373e-02f, -1.369448809e-02f, -1.367950974e-02f, -1.366450873e-02f, -1.364948506e-02f,
+-1.363443878e-02f, -1.361936991e-02f, -1.360427848e-02f, -1.358916451e-02f, -1.357402803e-02f, -1.355886907e-02f, -1.354368766e-02f, -1.352848383e-02f, -1.351325759e-02f, -1.349800899e-02f,
+-1.348273804e-02f, -1.346744478e-02f, -1.345212924e-02f, -1.343679143e-02f, -1.342143140e-02f, -1.340604916e-02f, -1.339064475e-02f, -1.337521819e-02f, -1.335976951e-02f, -1.334429875e-02f,
+-1.332880592e-02f, -1.331329105e-02f, -1.329775418e-02f, -1.328219534e-02f, -1.326661454e-02f, -1.325101182e-02f, -1.323538721e-02f, -1.321974074e-02f, -1.320407242e-02f, -1.318838231e-02f,
+-1.317267041e-02f, -1.315693676e-02f, -1.314118139e-02f, -1.312540433e-02f, -1.310960560e-02f, -1.309378524e-02f, -1.307794327e-02f, -1.306207972e-02f, -1.304619462e-02f, -1.303028800e-02f,
+-1.301435989e-02f, -1.299841031e-02f, -1.298243930e-02f, -1.296644689e-02f, -1.295043310e-02f, -1.293439796e-02f, -1.291834150e-02f, -1.290226376e-02f, -1.288616475e-02f, -1.287004452e-02f,
+-1.285390308e-02f, -1.283774047e-02f, -1.282155672e-02f, -1.280535185e-02f, -1.278912590e-02f, -1.277287889e-02f, -1.275661086e-02f, -1.274032183e-02f, -1.272401183e-02f, -1.270768090e-02f,
+-1.269132906e-02f, -1.267495634e-02f, -1.265856277e-02f, -1.264214839e-02f, -1.262571321e-02f, -1.260925728e-02f, -1.259278061e-02f, -1.257628325e-02f, -1.255976521e-02f, -1.254322654e-02f,
+-1.252666725e-02f, -1.251008739e-02f, -1.249348697e-02f, -1.247686604e-02f, -1.246022461e-02f, -1.244356272e-02f, -1.242688040e-02f, -1.241017768e-02f, -1.239345460e-02f, -1.237671117e-02f,
+-1.235994743e-02f, -1.234316341e-02f, -1.232635914e-02f, -1.230953466e-02f, -1.229268998e-02f, -1.227582515e-02f, -1.225894019e-02f, -1.224203513e-02f, -1.222511001e-02f, -1.220816485e-02f,
+-1.219119968e-02f, -1.217421454e-02f, -1.215720946e-02f, -1.214018446e-02f, -1.212313957e-02f, -1.210607484e-02f, -1.208899028e-02f, -1.207188593e-02f, -1.205476182e-02f, -1.203761798e-02f,
+-1.202045445e-02f, -1.200327124e-02f, -1.198606840e-02f, -1.196884596e-02f, -1.195160394e-02f, -1.193434237e-02f, -1.191706129e-02f, -1.189976074e-02f, -1.188244073e-02f, -1.186510130e-02f,
+-1.184774248e-02f, -1.183036431e-02f, -1.181296681e-02f, -1.179555002e-02f, -1.177811396e-02f, -1.176065867e-02f, -1.174318419e-02f, -1.172569053e-02f, -1.170817774e-02f, -1.169064584e-02f,
+-1.167309486e-02f, -1.165552484e-02f, -1.163793581e-02f, -1.162032781e-02f, -1.160270085e-02f, -1.158505498e-02f, -1.156739022e-02f, -1.154970661e-02f, -1.153200418e-02f, -1.151428295e-02f,
+-1.149654297e-02f, -1.147878427e-02f, -1.146100687e-02f, -1.144321081e-02f, -1.142539611e-02f, -1.140756282e-02f, -1.138971097e-02f, -1.137184058e-02f, -1.135395168e-02f, -1.133604432e-02f,
+-1.131811852e-02f, -1.130017431e-02f, -1.128221173e-02f, -1.126423081e-02f, -1.124623158e-02f, -1.122821407e-02f, -1.121017832e-02f, -1.119212435e-02f, -1.117405220e-02f, -1.115596191e-02f,
+-1.113785350e-02f, -1.111972701e-02f, -1.110158247e-02f, -1.108341991e-02f, -1.106523936e-02f, -1.104704086e-02f, -1.102882444e-02f, -1.101059014e-02f, -1.099233797e-02f, -1.097406799e-02f,
+-1.095578021e-02f, -1.093747468e-02f, -1.091915143e-02f, -1.090081048e-02f, -1.088245188e-02f, -1.086407564e-02f, -1.084568182e-02f, -1.082727044e-02f, -1.080884152e-02f, -1.079039512e-02f,
+-1.077193125e-02f, -1.075344996e-02f, -1.073495127e-02f, -1.071643521e-02f, -1.069790183e-02f, -1.067935115e-02f, -1.066078321e-02f, -1.064219804e-02f, -1.062359567e-02f, -1.060497614e-02f,
+-1.058633948e-02f, -1.056768573e-02f, -1.054901491e-02f, -1.053032706e-02f, -1.051162221e-02f, -1.049290040e-02f, -1.047416166e-02f, -1.045540602e-02f, -1.043663352e-02f, -1.041784420e-02f,
+-1.039903807e-02f, -1.038021518e-02f, -1.036137557e-02f, -1.034251926e-02f, -1.032364628e-02f, -1.030475668e-02f, -1.028585049e-02f, -1.026692773e-02f, -1.024798845e-02f, -1.022903267e-02f,
+-1.021006044e-02f, -1.019107178e-02f, -1.017206672e-02f, -1.015304531e-02f, -1.013400758e-02f, -1.011495356e-02f, -1.009588328e-02f, -1.007679678e-02f, -1.005769409e-02f, -1.003857524e-02f,
+-1.001944028e-02f, -1.000028923e-02f, -9.981122129e-03f, -9.961939010e-03f, -9.942739908e-03f, -9.923524857e-03f, -9.904293890e-03f, -9.885047042e-03f, -9.865784348e-03f, -9.846505841e-03f,
+-9.827211557e-03f, -9.807901528e-03f, -9.788575791e-03f, -9.769234378e-03f, -9.749877325e-03f, -9.730504665e-03f, -9.711116434e-03f, -9.691712665e-03f, -9.672293394e-03f, -9.652858655e-03f,
+-9.633408482e-03f, -9.613942909e-03f, -9.594461973e-03f, -9.574965706e-03f, -9.555454144e-03f, -9.535927322e-03f, -9.516385274e-03f, -9.496828035e-03f, -9.477255639e-03f, -9.457668122e-03f,
+-9.438065518e-03f, -9.418447861e-03f, -9.398815188e-03f, -9.379167533e-03f, -9.359504929e-03f, -9.339827414e-03f, -9.320135021e-03f, -9.300427785e-03f, -9.280705741e-03f, -9.260968925e-03f,
+-9.241217372e-03f, -9.221451115e-03f, -9.201670192e-03f, -9.181874635e-03f, -9.162064482e-03f, -9.142239766e-03f, -9.122400524e-03f, -9.102546790e-03f, -9.082678599e-03f, -9.062795986e-03f,
+-9.042898988e-03f, -9.022987639e-03f, -9.003061974e-03f, -8.983122029e-03f, -8.963167840e-03f, -8.943199441e-03f, -8.923216867e-03f, -8.903220156e-03f, -8.883209340e-03f, -8.863184458e-03f,
+-8.843145542e-03f, -8.823092630e-03f, -8.803025757e-03f, -8.782944958e-03f, -8.762850269e-03f, -8.742741725e-03f, -8.722619363e-03f, -8.702483217e-03f, -8.682333323e-03f, -8.662169717e-03f,
+-8.641992436e-03f, -8.621801513e-03f, -8.601596986e-03f, -8.581378889e-03f, -8.561147259e-03f, -8.540902132e-03f, -8.520643543e-03f, -8.500371528e-03f, -8.480086123e-03f, -8.459787364e-03f,
+-8.439475287e-03f, -8.419149927e-03f, -8.398811322e-03f, -8.378459505e-03f, -8.358094515e-03f, -8.337716386e-03f, -8.317325155e-03f, -8.296920857e-03f, -8.276503530e-03f, -8.256073208e-03f,
+-8.235629928e-03f, -8.215173727e-03f, -8.194704639e-03f, -8.174222702e-03f, -8.153727952e-03f, -8.133220424e-03f, -8.112700156e-03f, -8.092167183e-03f, -8.071621541e-03f, -8.051063268e-03f,
+-8.030492398e-03f, -8.009908969e-03f, -7.989313017e-03f, -7.968704578e-03f, -7.948083689e-03f, -7.927450386e-03f, -7.906804705e-03f, -7.886146683e-03f, -7.865476356e-03f, -7.844793761e-03f,
+-7.824098935e-03f, -7.803391913e-03f, -7.782672733e-03f, -7.761941430e-03f, -7.741198042e-03f, -7.720442606e-03f, -7.699675156e-03f, -7.678895732e-03f, -7.658104368e-03f, -7.637301102e-03f,
+-7.616485970e-03f, -7.595659009e-03f, -7.574820256e-03f, -7.553969747e-03f, -7.533107520e-03f, -7.512233610e-03f, -7.491348056e-03f, -7.470450893e-03f, -7.449542158e-03f, -7.428621889e-03f,
+-7.407690122e-03f, -7.386746893e-03f, -7.365792241e-03f, -7.344826202e-03f, -7.323848812e-03f, -7.302860109e-03f, -7.281860130e-03f, -7.260848912e-03f, -7.239826491e-03f, -7.218792904e-03f,
+-7.197748190e-03f, -7.176692384e-03f, -7.155625524e-03f, -7.134547647e-03f, -7.113458790e-03f, -7.092358990e-03f, -7.071248285e-03f, -7.050126711e-03f, -7.028994305e-03f, -7.007851105e-03f,
+-6.986697148e-03f, -6.965532472e-03f, -6.944357113e-03f, -6.923171108e-03f, -6.901974495e-03f, -6.880767312e-03f, -6.859549595e-03f, -6.838321382e-03f, -6.817082710e-03f, -6.795833616e-03f,
+-6.774574138e-03f, -6.753304314e-03f, -6.732024180e-03f, -6.710733774e-03f, -6.689433134e-03f, -6.668122296e-03f, -6.646801299e-03f, -6.625470179e-03f, -6.604128975e-03f, -6.582777724e-03f,
+-6.561416462e-03f, -6.540045229e-03f, -6.518664061e-03f, -6.497272996e-03f, -6.475872071e-03f, -6.454461324e-03f, -6.433040793e-03f, -6.411610515e-03f, -6.390170528e-03f, -6.368720870e-03f,
+-6.347261578e-03f, -6.325792689e-03f, -6.304314242e-03f, -6.282826275e-03f, -6.261328824e-03f, -6.239821928e-03f, -6.218305625e-03f, -6.196779951e-03f, -6.175244946e-03f, -6.153700646e-03f,
+-6.132147090e-03f, -6.110584315e-03f, -6.089012359e-03f, -6.067431260e-03f, -6.045841056e-03f, -6.024241785e-03f, -6.002633484e-03f, -5.981016192e-03f, -5.959389946e-03f, -5.937754784e-03f,
+-5.916110745e-03f, -5.894457866e-03f, -5.872796185e-03f, -5.851125740e-03f, -5.829446569e-03f, -5.807758710e-03f, -5.786062201e-03f, -5.764357080e-03f, -5.742643385e-03f, -5.720921154e-03f,
+-5.699190426e-03f, -5.677451238e-03f, -5.655703628e-03f, -5.633947634e-03f, -5.612183296e-03f, -5.590410649e-03f, -5.568629734e-03f, -5.546840587e-03f, -5.525043248e-03f, -5.503237753e-03f,
+-5.481424142e-03f, -5.459602453e-03f, -5.437772724e-03f, -5.415934992e-03f, -5.394089297e-03f, -5.372235676e-03f, -5.350374168e-03f, -5.328504810e-03f, -5.306627642e-03f, -5.284742701e-03f,
+-5.262850027e-03f, -5.240949656e-03f, -5.219041627e-03f, -5.197125979e-03f, -5.175202751e-03f, -5.153271979e-03f, -5.131333703e-03f, -5.109387962e-03f, -5.087434793e-03f, -5.065474234e-03f,
+-5.043506325e-03f, -5.021531103e-03f, -4.999548608e-03f, -4.977558877e-03f, -4.955561949e-03f, -4.933557862e-03f, -4.911546655e-03f, -4.889528366e-03f, -4.867503033e-03f, -4.845470697e-03f,
+-4.823431393e-03f, -4.801385162e-03f, -4.779332042e-03f, -4.757272071e-03f, -4.735205287e-03f, -4.713131730e-03f, -4.691051438e-03f, -4.668964449e-03f, -4.646870802e-03f, -4.624770535e-03f,
+-4.602663688e-03f, -4.580550299e-03f, -4.558430405e-03f, -4.536304047e-03f, -4.514171262e-03f, -4.492032090e-03f, -4.469886568e-03f, -4.447734736e-03f, -4.425576631e-03f, -4.403412294e-03f,
+-4.381241762e-03f, -4.359065074e-03f, -4.336882269e-03f, -4.314693385e-03f, -4.292498462e-03f, -4.270297538e-03f, -4.248090651e-03f, -4.225877840e-03f, -4.203659145e-03f, -4.181434603e-03f,
+-4.159204255e-03f, -4.136968137e-03f, -4.114726290e-03f, -4.092478751e-03f, -4.070225560e-03f, -4.047966756e-03f, -4.025702376e-03f, -4.003432461e-03f, -3.981157049e-03f, -3.958876178e-03f,
+-3.936589888e-03f, -3.914298217e-03f, -3.892001205e-03f, -3.869698889e-03f, -3.847391309e-03f, -3.825078504e-03f, -3.802760512e-03f, -3.780437373e-03f, -3.758109126e-03f, -3.735775808e-03f,
+-3.713437459e-03f, -3.691094119e-03f, -3.668745825e-03f, -3.646392617e-03f, -3.624034534e-03f, -3.601671614e-03f, -3.579303897e-03f, -3.556931422e-03f, -3.534554226e-03f, -3.512172351e-03f,
+-3.489785833e-03f, -3.467394713e-03f, -3.444999028e-03f, -3.422598819e-03f, -3.400194125e-03f, -3.377784983e-03f, -3.355371433e-03f, -3.332953515e-03f, -3.310531266e-03f, -3.288104727e-03f,
+-3.265673935e-03f, -3.243238931e-03f, -3.220799752e-03f, -3.198356439e-03f, -3.175909030e-03f, -3.153457564e-03f, -3.131002080e-03f, -3.108542617e-03f, -3.086079215e-03f, -3.063611912e-03f,
+-3.041140747e-03f, -3.018665759e-03f, -2.996186988e-03f, -2.973704472e-03f, -2.951218251e-03f, -2.928728363e-03f, -2.906234848e-03f, -2.883737745e-03f, -2.861237093e-03f, -2.838732930e-03f,
+-2.816225296e-03f, -2.793714231e-03f, -2.771199772e-03f, -2.748681960e-03f, -2.726160833e-03f, -2.703636431e-03f, -2.681108792e-03f, -2.658577956e-03f, -2.636043961e-03f, -2.613506847e-03f,
+-2.590966654e-03f, -2.568423419e-03f, -2.545877183e-03f, -2.523327984e-03f, -2.500775861e-03f, -2.478220854e-03f, -2.455663002e-03f, -2.433102344e-03f, -2.410538918e-03f, -2.387972765e-03f,
+-2.365403923e-03f, -2.342832432e-03f, -2.320258330e-03f, -2.297681656e-03f, -2.275102451e-03f, -2.252520752e-03f, -2.229936600e-03f, -2.207350033e-03f, -2.184761091e-03f, -2.162169812e-03f,
+-2.139576236e-03f, -2.116980402e-03f, -2.094382349e-03f, -2.071782116e-03f, -2.049179743e-03f, -2.026575268e-03f, -2.003968731e-03f, -1.981360171e-03f, -1.958749628e-03f, -1.936137139e-03f,
+-1.913522745e-03f, -1.890906484e-03f, -1.868288397e-03f, -1.845668521e-03f, -1.823046896e-03f, -1.800423562e-03f, -1.777798557e-03f, -1.755171921e-03f, -1.732543693e-03f, -1.709913911e-03f,
+-1.687282616e-03f, -1.664649847e-03f, -1.642015641e-03f, -1.619380040e-03f, -1.596743081e-03f, -1.574104805e-03f, -1.551465249e-03f, -1.528824455e-03f, -1.506182459e-03f, -1.483539303e-03f,
+-1.460895024e-03f, -1.438249663e-03f, -1.415603258e-03f, -1.392955848e-03f, -1.370307473e-03f, -1.347658171e-03f, -1.325007983e-03f, -1.302356947e-03f, -1.279705102e-03f, -1.257052488e-03f,
+-1.234399143e-03f, -1.211745107e-03f, -1.189090419e-03f, -1.166435118e-03f, -1.143779243e-03f, -1.121122834e-03f, -1.098465929e-03f, -1.075808569e-03f, -1.053150791e-03f, -1.030492635e-03f,
+-1.007834140e-03f, -9.851753458e-04f, -9.625162910e-04f, -9.398570148e-04f, -9.171975564e-04f, -8.945379550e-04f, -8.718782496e-04f, -8.492184794e-04f, -8.265586835e-04f, -8.038989011e-04f,
+-7.812391713e-04f, -7.585795333e-04f, -7.359200260e-04f, -7.132606887e-04f, -6.906015605e-04f, -6.679426805e-04f, -6.452840878e-04f, -6.226258214e-04f, -5.999679206e-04f, -5.773104244e-04f,
+-5.546533720e-04f, -5.319968023e-04f, -5.093407545e-04f, -4.866852678e-04f, -4.640303811e-04f, -4.413761335e-04f, -4.187225642e-04f, -3.960697123e-04f, -3.734176167e-04f, -3.507663165e-04f,
+-3.281158509e-04f, -3.054662588e-04f, -2.828175794e-04f, -2.601698516e-04f, -2.375231146e-04f, -2.148774074e-04f, -1.922327689e-04f, -1.695892383e-04f, -1.469468546e-04f, -1.243056568e-04f,
+-1.016656839e-04f, -7.902697489e-05f, -5.638956888e-05f, -3.375350482e-05f, -1.111882172e-05f, 1.151444143e-05f, 3.414624562e-05f, 5.677655188e-05f, 7.940532121e-05f, 1.020325147e-04f,
+1.246580932e-04f, 1.472820180e-04f, 1.699042499e-04f, 1.925247501e-04f, 2.151434796e-04f, 2.377603994e-04f, 2.603754706e-04f, 2.829886543e-04f, 3.055999116e-04f, 3.282092035e-04f,
+3.508164911e-04f, 3.734217355e-04f, 3.960248978e-04f, 4.186259391e-04f, 4.412248205e-04f, 4.638215031e-04f, 4.864159480e-04f, 5.090081164e-04f, 5.315979694e-04f, 5.541854682e-04f,
+5.767705738e-04f, 5.993532474e-04f, 6.219334503e-04f, 6.445111435e-04f, 6.670862882e-04f, 6.896588456e-04f, 7.122287770e-04f, 7.347960434e-04f, 7.573606061e-04f, 7.799224263e-04f,
+8.024814653e-04f, 8.250376841e-04f, 8.475910441e-04f, 8.701415066e-04f, 8.926890326e-04f, 9.152335836e-04f, 9.377751207e-04f, 9.603136053e-04f, 9.828489985e-04f, 1.005381262e-03f,
+1.027910356e-03f, 1.050436243e-03f, 1.072958884e-03f, 1.095478240e-03f, 1.117994273e-03f, 1.140506943e-03f, 1.163016213e-03f, 1.185522043e-03f, 1.208024395e-03f, 1.230523231e-03f,
+1.253018510e-03f, 1.275510196e-03f, 1.297998250e-03f, 1.320482632e-03f, 1.342963304e-03f, 1.365440228e-03f, 1.387913365e-03f, 1.410382676e-03f, 1.432848124e-03f, 1.455309668e-03f,
+1.477767272e-03f, 1.500220896e-03f, 1.522670501e-03f, 1.545116050e-03f, 1.567557504e-03f, 1.589994824e-03f, 1.612427972e-03f, 1.634856909e-03f, 1.657281597e-03f, 1.679701997e-03f,
+1.702118071e-03f, 1.724529781e-03f, 1.746937088e-03f, 1.769339953e-03f, 1.791738339e-03f, 1.814132207e-03f, 1.836521518e-03f, 1.858906235e-03f, 1.881286318e-03f, 1.903661730e-03f,
+1.926032431e-03f, 1.948398385e-03f, 1.970759552e-03f, 1.993115894e-03f, 2.015467373e-03f, 2.037813950e-03f, 2.060155588e-03f, 2.082492247e-03f, 2.104823891e-03f, 2.127150480e-03f,
+2.149471976e-03f, 2.171788341e-03f, 2.194099537e-03f, 2.216405526e-03f, 2.238706269e-03f, 2.261001728e-03f, 2.283291866e-03f, 2.305576643e-03f, 2.327856023e-03f, 2.350129966e-03f,
+2.372398434e-03f, 2.394661390e-03f, 2.416918796e-03f, 2.439170612e-03f, 2.461416802e-03f, 2.483657327e-03f, 2.505892149e-03f, 2.528121230e-03f, 2.550344533e-03f, 2.572562018e-03f,
+2.594773648e-03f, 2.616979386e-03f, 2.639179193e-03f, 2.661373030e-03f, 2.683560861e-03f, 2.705742647e-03f, 2.727918351e-03f, 2.750087934e-03f, 2.772251358e-03f, 2.794408586e-03f,
+2.816559580e-03f, 2.838704302e-03f, 2.860842714e-03f, 2.882974779e-03f, 2.905100457e-03f, 2.927219713e-03f, 2.949332507e-03f, 2.971438802e-03f, 2.993538561e-03f, 3.015631745e-03f,
+3.037718317e-03f, 3.059798239e-03f, 3.081871474e-03f, 3.103937984e-03f, 3.125997730e-03f, 3.148050676e-03f, 3.170096783e-03f, 3.192136015e-03f, 3.214168333e-03f, 3.236193700e-03f,
+3.258212079e-03f, 3.280223431e-03f, 3.302227719e-03f, 3.324224906e-03f, 3.346214953e-03f, 3.368197825e-03f, 3.390173482e-03f, 3.412141888e-03f, 3.434103005e-03f, 3.456056796e-03f,
+3.478003223e-03f, 3.499942248e-03f, 3.521873835e-03f, 3.543797946e-03f, 3.565714543e-03f, 3.587623590e-03f, 3.609525048e-03f, 3.631418881e-03f, 3.653305051e-03f, 3.675183521e-03f,
+3.697054253e-03f, 3.718917210e-03f, 3.740772356e-03f, 3.762619653e-03f, 3.784459062e-03f, 3.806290549e-03f, 3.828114074e-03f, 3.849929602e-03f, 3.871737094e-03f, 3.893536514e-03f,
+3.915327824e-03f, 3.937110988e-03f, 3.958885968e-03f, 3.980652727e-03f, 4.002411228e-03f, 4.024161435e-03f, 4.045903309e-03f, 4.067636815e-03f, 4.089361915e-03f, 4.111078571e-03f,
+4.132786748e-03f, 4.154486408e-03f, 4.176177514e-03f, 4.197860030e-03f, 4.219533918e-03f, 4.241199141e-03f, 4.262855664e-03f, 4.284503448e-03f, 4.306142457e-03f, 4.327772654e-03f,
+4.349394002e-03f, 4.371006466e-03f, 4.392610007e-03f, 4.414204589e-03f, 4.435790176e-03f, 4.457366730e-03f, 4.478934215e-03f, 4.500492595e-03f, 4.522041832e-03f, 4.543581891e-03f,
+4.565112734e-03f, 4.586634324e-03f, 4.608146626e-03f, 4.629649603e-03f, 4.651143218e-03f, 4.672627435e-03f, 4.694102216e-03f, 4.715567527e-03f, 4.737023329e-03f, 4.758469588e-03f,
+4.779906265e-03f, 4.801333326e-03f, 4.822750733e-03f, 4.844158450e-03f, 4.865556442e-03f, 4.886944670e-03f, 4.908323100e-03f, 4.929691694e-03f, 4.951050417e-03f, 4.972399233e-03f,
+4.993738104e-03f, 5.015066996e-03f, 5.036385871e-03f, 5.057694693e-03f, 5.078993427e-03f, 5.100282036e-03f, 5.121560484e-03f, 5.142828736e-03f, 5.164086753e-03f, 5.185334502e-03f,
+5.206571946e-03f, 5.227799048e-03f, 5.249015773e-03f, 5.270222085e-03f, 5.291417948e-03f, 5.312603326e-03f, 5.333778182e-03f, 5.354942482e-03f, 5.376096189e-03f, 5.397239267e-03f,
+5.418371681e-03f, 5.439493394e-03f, 5.460604371e-03f, 5.481704577e-03f, 5.502793974e-03f, 5.523872529e-03f, 5.544940204e-03f, 5.565996964e-03f, 5.587042774e-03f, 5.608077598e-03f,
+5.629101400e-03f, 5.650114145e-03f, 5.671115797e-03f, 5.692106321e-03f, 5.713085680e-03f, 5.734053840e-03f, 5.755010765e-03f, 5.775956419e-03f, 5.796890767e-03f, 5.817813774e-03f,
+5.838725404e-03f, 5.859625622e-03f, 5.880514393e-03f, 5.901391680e-03f, 5.922257449e-03f, 5.943111665e-03f, 5.963954291e-03f, 5.984785294e-03f, 6.005604637e-03f, 6.026412286e-03f,
+6.047208205e-03f, 6.067992359e-03f, 6.088764714e-03f, 6.109525233e-03f, 6.130273881e-03f, 6.151010625e-03f, 6.171735428e-03f, 6.192448255e-03f, 6.213149072e-03f, 6.233837844e-03f,
+6.254514535e-03f, 6.275179111e-03f, 6.295831537e-03f, 6.316471777e-03f, 6.337099798e-03f, 6.357715563e-03f, 6.378319039e-03f, 6.398910191e-03f, 6.419488983e-03f, 6.440055381e-03f,
+6.460609350e-03f, 6.481150856e-03f, 6.501679864e-03f, 6.522196339e-03f, 6.542700247e-03f, 6.563191553e-03f, 6.583670221e-03f, 6.604136219e-03f, 6.624589511e-03f, 6.645030063e-03f,
+6.665457840e-03f, 6.685872808e-03f, 6.706274932e-03f, 6.726664178e-03f, 6.747040512e-03f, 6.767403899e-03f, 6.787754304e-03f, 6.808091695e-03f, 6.828416035e-03f, 6.848727291e-03f,
+6.869025429e-03f, 6.889310415e-03f, 6.909582214e-03f, 6.929840791e-03f, 6.950086114e-03f, 6.970318148e-03f, 6.990536858e-03f, 7.010742211e-03f, 7.030934173e-03f, 7.051112709e-03f,
+7.071277786e-03f, 7.091429370e-03f, 7.111567426e-03f, 7.131691921e-03f, 7.151802821e-03f, 7.171900092e-03f, 7.191983700e-03f, 7.212053611e-03f, 7.232109792e-03f, 7.252152209e-03f,
+7.272180828e-03f, 7.292195615e-03f, 7.312196537e-03f, 7.332183559e-03f, 7.352156649e-03f, 7.372115773e-03f, 7.392060897e-03f, 7.411991988e-03f, 7.431909012e-03f, 7.451811935e-03f,
+7.471700725e-03f, 7.491575347e-03f, 7.511435768e-03f, 7.531281955e-03f, 7.551113875e-03f, 7.570931493e-03f, 7.590734778e-03f, 7.610523695e-03f, 7.630298211e-03f, 7.650058293e-03f,
+7.669803908e-03f, 7.689535023e-03f, 7.709251604e-03f, 7.728953618e-03f, 7.748641033e-03f, 7.768313815e-03f, 7.787971931e-03f, 7.807615348e-03f, 7.827244033e-03f, 7.846857953e-03f,
+7.866457075e-03f, 7.886041367e-03f, 7.905610795e-03f, 7.925165327e-03f, 7.944704929e-03f, 7.964229569e-03f, 7.983739215e-03f, 8.003233833e-03f, 8.022713390e-03f, 8.042177855e-03f,
+8.061627194e-03f, 8.081061374e-03f, 8.100480364e-03f, 8.119884131e-03f, 8.139272641e-03f, 8.158645863e-03f, 8.178003764e-03f, 8.197346311e-03f, 8.216673472e-03f, 8.235985216e-03f,
+8.255281508e-03f, 8.274562318e-03f, 8.293827612e-03f, 8.313077359e-03f, 8.332311525e-03f, 8.351530080e-03f, 8.370732990e-03f, 8.389920224e-03f, 8.409091749e-03f, 8.428247534e-03f,
+8.447387545e-03f, 8.466511752e-03f, 8.485620122e-03f, 8.504712623e-03f, 8.523789223e-03f, 8.542849891e-03f, 8.561894593e-03f, 8.580923299e-03f, 8.599935977e-03f, 8.618932595e-03f,
+8.637913120e-03f, 8.656877521e-03f, 8.675825768e-03f, 8.694757826e-03f, 8.713673666e-03f, 8.732573256e-03f, 8.751456563e-03f, 8.770323556e-03f, 8.789174205e-03f, 8.808008476e-03f,
+8.826826339e-03f, 8.845627762e-03f, 8.864412715e-03f, 8.883181164e-03f, 8.901933080e-03f, 8.920668430e-03f, 8.939387184e-03f, 8.958089310e-03f, 8.976774777e-03f, 8.995443554e-03f,
+9.014095609e-03f, 9.032730911e-03f, 9.051349430e-03f, 9.069951133e-03f, 9.088535991e-03f, 9.107103972e-03f, 9.125655045e-03f, 9.144189179e-03f, 9.162706343e-03f, 9.181206506e-03f,
+9.199689638e-03f, 9.218155707e-03f, 9.236604683e-03f, 9.255036535e-03f, 9.273451232e-03f, 9.291848743e-03f, 9.310229038e-03f, 9.328592087e-03f, 9.346937858e-03f, 9.365266320e-03f,
+9.383577445e-03f, 9.401871200e-03f, 9.420147555e-03f, 9.438406480e-03f, 9.456647945e-03f, 9.474871919e-03f, 9.493078371e-03f, 9.511267272e-03f, 9.529438590e-03f, 9.547592297e-03f,
+9.565728361e-03f, 9.583846753e-03f, 9.601947441e-03f, 9.620030397e-03f, 9.638095589e-03f, 9.656142989e-03f, 9.674172565e-03f, 9.692184288e-03f, 9.710178128e-03f, 9.728154055e-03f,
+9.746112038e-03f, 9.764052049e-03f, 9.781974057e-03f, 9.799878032e-03f, 9.817763945e-03f, 9.835631766e-03f, 9.853481466e-03f, 9.871313013e-03f, 9.889126380e-03f, 9.906921535e-03f,
+9.924698451e-03f, 9.942457096e-03f, 9.960197443e-03f, 9.977919460e-03f, 9.995623119e-03f, 1.001330839e-02f, 1.003097524e-02f, 1.004862365e-02f, 1.006625358e-02f, 1.008386501e-02f,
+1.010145790e-02f, 1.011903223e-02f, 1.013658797e-02f, 1.015412508e-02f, 1.017164355e-02f, 1.018914333e-02f, 1.020662440e-02f, 1.022408674e-02f, 1.024153031e-02f, 1.025895508e-02f,
+1.027636103e-02f, 1.029374813e-02f, 1.031111634e-02f, 1.032846564e-02f, 1.034579600e-02f, 1.036310739e-02f, 1.038039979e-02f, 1.039767316e-02f, 1.041492747e-02f, 1.043216270e-02f,
+1.044937882e-02f, 1.046657579e-02f, 1.048375360e-02f, 1.050091221e-02f, 1.051805160e-02f, 1.053517173e-02f, 1.055227258e-02f, 1.056935411e-02f, 1.058641631e-02f, 1.060345914e-02f,
+1.062048257e-02f, 1.063748658e-02f, 1.065447114e-02f, 1.067143622e-02f, 1.068838179e-02f, 1.070530783e-02f, 1.072221430e-02f, 1.073910117e-02f, 1.075596843e-02f, 1.077281604e-02f,
+1.078964397e-02f, 1.080645220e-02f, 1.082324070e-02f, 1.084000944e-02f, 1.085675840e-02f, 1.087348753e-02f, 1.089019683e-02f, 1.090688626e-02f, 1.092355578e-02f, 1.094020539e-02f,
+1.095683504e-02f, 1.097344471e-02f, 1.099003438e-02f, 1.100660400e-02f, 1.102315357e-02f, 1.103968305e-02f, 1.105619241e-02f, 1.107268163e-02f, 1.108915068e-02f, 1.110559952e-02f,
+1.112202815e-02f, 1.113843652e-02f, 1.115482461e-02f, 1.117119239e-02f, 1.118753984e-02f, 1.120386694e-02f, 1.122017364e-02f, 1.123645993e-02f, 1.125272577e-02f, 1.126897115e-02f,
+1.128519604e-02f, 1.130140040e-02f, 1.131758422e-02f, 1.133374746e-02f, 1.134989010e-02f, 1.136601211e-02f, 1.138211347e-02f, 1.139819415e-02f, 1.141425411e-02f, 1.143029335e-02f,
+1.144631182e-02f, 1.146230951e-02f, 1.147828639e-02f, 1.149424242e-02f, 1.151017759e-02f, 1.152609187e-02f, 1.154198523e-02f, 1.155785765e-02f, 1.157370910e-02f, 1.158953955e-02f,
+1.160534898e-02f, 1.162113736e-02f, 1.163690467e-02f, 1.165265087e-02f, 1.166837596e-02f, 1.168407989e-02f, 1.169976264e-02f, 1.171542419e-02f, 1.173106451e-02f, 1.174668357e-02f,
+1.176228136e-02f, 1.177785784e-02f, 1.179341299e-02f, 1.180894678e-02f, 1.182445919e-02f, 1.183995019e-02f, 1.185541976e-02f, 1.187086787e-02f, 1.188629450e-02f, 1.190169961e-02f,
+1.191708320e-02f, 1.193244522e-02f, 1.194778566e-02f, 1.196310449e-02f, 1.197840168e-02f, 1.199367722e-02f, 1.200893106e-02f, 1.202416320e-02f, 1.203937361e-02f, 1.205456225e-02f,
+1.206972911e-02f, 1.208487416e-02f, 1.209999738e-02f, 1.211509873e-02f, 1.213017820e-02f, 1.214523577e-02f, 1.216027140e-02f, 1.217528507e-02f, 1.219027677e-02f, 1.220524645e-02f,
+1.222019410e-02f, 1.223511970e-02f, 1.225002322e-02f, 1.226490463e-02f, 1.227976392e-02f, 1.229460105e-02f, 1.230941601e-02f, 1.232420876e-02f, 1.233897929e-02f, 1.235372757e-02f,
+1.236845358e-02f, 1.238315728e-02f, 1.239783867e-02f, 1.241249771e-02f, 1.242713438e-02f, 1.244174866e-02f, 1.245634052e-02f, 1.247090994e-02f, 1.248545690e-02f, 1.249998136e-02f,
+1.251448332e-02f, 1.252896274e-02f, 1.254341960e-02f, 1.255785388e-02f, 1.257226555e-02f, 1.258665459e-02f, 1.260102098e-02f, 1.261536469e-02f, 1.262968570e-02f, 1.264398399e-02f,
+1.265825953e-02f, 1.267251230e-02f, 1.268674228e-02f, 1.270094944e-02f, 1.271513376e-02f, 1.272929523e-02f, 1.274343380e-02f, 1.275754947e-02f, 1.277164221e-02f, 1.278571199e-02f,
+1.279975880e-02f, 1.281378260e-02f, 1.282778339e-02f, 1.284176113e-02f, 1.285571580e-02f, 1.286964738e-02f, 1.288355584e-02f, 1.289744118e-02f, 1.291130335e-02f, 1.292514234e-02f,
+1.293895813e-02f, 1.295275070e-02f, 1.296652001e-02f, 1.298026606e-02f, 1.299398881e-02f, 1.300768825e-02f, 1.302136435e-02f, 1.303501709e-02f, 1.304864646e-02f, 1.306225241e-02f,
+1.307583495e-02f, 1.308939403e-02f, 1.310292965e-02f, 1.311644178e-02f, 1.312993039e-02f, 1.314339547e-02f, 1.315683699e-02f, 1.317025493e-02f, 1.318364928e-02f, 1.319702000e-02f,
+1.321036708e-02f, 1.322369049e-02f, 1.323699022e-02f, 1.325026624e-02f, 1.326351853e-02f, 1.327674707e-02f, 1.328995184e-02f, 1.330313281e-02f, 1.331628997e-02f, 1.332942330e-02f,
+1.334253276e-02f, 1.335561835e-02f, 1.336868005e-02f, 1.338171782e-02f, 1.339473165e-02f, 1.340772151e-02f, 1.342068740e-02f, 1.343362928e-02f, 1.344654713e-02f, 1.345944094e-02f,
+1.347231069e-02f, 1.348515634e-02f, 1.349797789e-02f, 1.351077531e-02f, 1.352354858e-02f, 1.353629769e-02f, 1.354902260e-02f, 1.356172330e-02f, 1.357439977e-02f, 1.358705199e-02f,
+1.359967994e-02f, 1.361228359e-02f, 1.362486294e-02f, 1.363741795e-02f, 1.364994861e-02f, 1.366245489e-02f, 1.367493679e-02f, 1.368739427e-02f, 1.369982732e-02f, 1.371223592e-02f,
+1.372462004e-02f, 1.373697967e-02f, 1.374931479e-02f, 1.376162538e-02f, 1.377391142e-02f, 1.378617288e-02f, 1.379840976e-02f, 1.381062202e-02f, 1.382280965e-02f, 1.383497264e-02f,
+1.384711095e-02f, 1.385922458e-02f, 1.387131350e-02f, 1.388337769e-02f, 1.389541714e-02f, 1.390743182e-02f, 1.391942172e-02f, 1.393138681e-02f, 1.394332708e-02f, 1.395524251e-02f,
+1.396713307e-02f, 1.397899876e-02f, 1.399083954e-02f, 1.400265541e-02f, 1.401444635e-02f, 1.402621232e-02f, 1.403795333e-02f, 1.404966934e-02f, 1.406136033e-02f, 1.407302630e-02f,
+1.408466722e-02f, 1.409628307e-02f, 1.410787384e-02f, 1.411943950e-02f, 1.413098004e-02f, 1.414249544e-02f, 1.415398568e-02f, 1.416545074e-02f, 1.417689061e-02f, 1.418830526e-02f,
+1.419969468e-02f, 1.421105885e-02f, 1.422239775e-02f, 1.423371136e-02f, 1.424499967e-02f, 1.425626266e-02f, 1.426750031e-02f, 1.427871260e-02f, 1.428989952e-02f, 1.430106104e-02f,
+1.431219715e-02f, 1.432330784e-02f, 1.433439307e-02f, 1.434545285e-02f, 1.435648714e-02f, 1.436749593e-02f, 1.437847921e-02f, 1.438943695e-02f, 1.440036915e-02f, 1.441127577e-02f,
+1.442215681e-02f, 1.443301225e-02f, 1.444384207e-02f, 1.445464625e-02f, 1.446542478e-02f, 1.447617764e-02f, 1.448690480e-02f, 1.449760627e-02f, 1.450828201e-02f, 1.451893202e-02f,
+1.452955627e-02f, 1.454015475e-02f, 1.455072744e-02f, 1.456127432e-02f, 1.457179539e-02f, 1.458229061e-02f, 1.459275998e-02f, 1.460320348e-02f, 1.461362109e-02f, 1.462401280e-02f,
+1.463437859e-02f, 1.464471844e-02f, 1.465503234e-02f, 1.466532027e-02f, 1.467558221e-02f, 1.468581815e-02f, 1.469602808e-02f, 1.470621197e-02f, 1.471636981e-02f, 1.472650159e-02f,
+1.473660729e-02f, 1.474668689e-02f, 1.475674038e-02f, 1.476676774e-02f, 1.477676895e-02f, 1.478674401e-02f, 1.479669289e-02f, 1.480661558e-02f, 1.481651207e-02f, 1.482638233e-02f,
+1.483622635e-02f, 1.484604413e-02f, 1.485583563e-02f, 1.486560085e-02f, 1.487533978e-02f, 1.488505239e-02f, 1.489473867e-02f, 1.490439861e-02f, 1.491403219e-02f, 1.492363940e-02f,
+1.493322022e-02f, 1.494277463e-02f, 1.495230263e-02f, 1.496180419e-02f, 1.497127931e-02f, 1.498072796e-02f, 1.499015014e-02f, 1.499954582e-02f, 1.500891500e-02f, 1.501825766e-02f,
+1.502757378e-02f, 1.503686336e-02f, 1.504612637e-02f, 1.505536280e-02f, 1.506457263e-02f, 1.507375586e-02f, 1.508291247e-02f, 1.509204245e-02f, 1.510114577e-02f, 1.511022244e-02f,
+1.511927242e-02f, 1.512829571e-02f, 1.513729230e-02f, 1.514626217e-02f, 1.515520530e-02f, 1.516412169e-02f, 1.517301132e-02f, 1.518187418e-02f, 1.519071024e-02f, 1.519951951e-02f,
+1.520830196e-02f, 1.521705758e-02f, 1.522578636e-02f, 1.523448828e-02f, 1.524316334e-02f, 1.525181152e-02f, 1.526043280e-02f, 1.526902717e-02f, 1.527759462e-02f, 1.528613513e-02f,
+1.529464870e-02f, 1.530313531e-02f, 1.531159494e-02f, 1.532002759e-02f, 1.532843324e-02f, 1.533681187e-02f, 1.534516348e-02f, 1.535348806e-02f, 1.536178558e-02f, 1.537005604e-02f,
+1.537829943e-02f, 1.538651572e-02f, 1.539470492e-02f, 1.540286700e-02f, 1.541100196e-02f, 1.541910978e-02f, 1.542719045e-02f, 1.543524395e-02f, 1.544327029e-02f, 1.545126943e-02f,
+1.545924138e-02f, 1.546718611e-02f, 1.547510363e-02f, 1.548299391e-02f, 1.549085694e-02f, 1.549869271e-02f, 1.550650121e-02f, 1.551428243e-02f, 1.552203636e-02f, 1.552976298e-02f,
+1.553746228e-02f, 1.554513426e-02f, 1.555277889e-02f, 1.556039617e-02f, 1.556798609e-02f, 1.557554864e-02f, 1.558308379e-02f, 1.559059156e-02f, 1.559807191e-02f, 1.560552484e-02f,
+1.561295034e-02f, 1.562034840e-02f, 1.562771901e-02f, 1.563506215e-02f, 1.564237781e-02f, 1.564966600e-02f, 1.565692668e-02f, 1.566415986e-02f, 1.567136551e-02f, 1.567854364e-02f,
+1.568569423e-02f, 1.569281727e-02f, 1.569991275e-02f, 1.570698065e-02f, 1.571402097e-02f, 1.572103371e-02f, 1.572801883e-02f, 1.573497635e-02f, 1.574190624e-02f, 1.574880850e-02f,
+1.575568311e-02f, 1.576253007e-02f, 1.576934937e-02f, 1.577614099e-02f, 1.578290493e-02f, 1.578964117e-02f, 1.579634971e-02f, 1.580303053e-02f, 1.580968363e-02f, 1.581630900e-02f,
+1.582290663e-02f, 1.582947650e-02f, 1.583601861e-02f, 1.584253295e-02f, 1.584901950e-02f, 1.585547827e-02f, 1.586190923e-02f, 1.586831239e-02f, 1.587468772e-02f, 1.588103523e-02f,
+1.588735490e-02f, 1.589364673e-02f, 1.589991069e-02f, 1.590614680e-02f, 1.591235503e-02f, 1.591853537e-02f, 1.592468783e-02f, 1.593081238e-02f, 1.593690902e-02f, 1.594297775e-02f,
+1.594901855e-02f, 1.595503141e-02f, 1.596101633e-02f, 1.596697330e-02f, 1.597290230e-02f, 1.597880333e-02f, 1.598467639e-02f, 1.599052146e-02f, 1.599633853e-02f, 1.600212760e-02f,
+1.600788866e-02f, 1.601362170e-02f, 1.601932671e-02f, 1.602500369e-02f, 1.603065262e-02f, 1.603627350e-02f, 1.604186631e-02f, 1.604743106e-02f, 1.605296774e-02f, 1.605847633e-02f,
+1.606395683e-02f, 1.606940923e-02f, 1.607483352e-02f, 1.608022970e-02f, 1.608559776e-02f, 1.609093769e-02f, 1.609624948e-02f, 1.610153312e-02f, 1.610678862e-02f, 1.611201595e-02f,
+1.611721512e-02f, 1.612238612e-02f, 1.612752893e-02f, 1.613264356e-02f, 1.613772999e-02f, 1.614278822e-02f, 1.614781824e-02f, 1.615282005e-02f, 1.615779363e-02f, 1.616273898e-02f,
+1.616765610e-02f, 1.617254497e-02f, 1.617740560e-02f, 1.618223797e-02f, 1.618704207e-02f, 1.619181791e-02f, 1.619656547e-02f, 1.620128475e-02f, 1.620597574e-02f, 1.621063843e-02f,
+1.621527282e-02f, 1.621987891e-02f, 1.622445668e-02f, 1.622900613e-02f, 1.623352726e-02f, 1.623802005e-02f, 1.624248451e-02f, 1.624692062e-02f, 1.625132838e-02f, 1.625570779e-02f,
+1.626005883e-02f, 1.626438151e-02f, 1.626867582e-02f, 1.627294174e-02f, 1.627717929e-02f, 1.628138844e-02f, 1.628556920e-02f, 1.628972155e-02f, 1.629384551e-02f, 1.629794105e-02f,
+1.630200817e-02f, 1.630604687e-02f, 1.631005715e-02f, 1.631403899e-02f, 1.631799239e-02f, 1.632191736e-02f, 1.632581387e-02f, 1.632968193e-02f, 1.633352154e-02f, 1.633733268e-02f,
+1.634111536e-02f, 1.634486957e-02f, 1.634859530e-02f, 1.635229254e-02f, 1.635596131e-02f, 1.635960158e-02f, 1.636321336e-02f, 1.636679664e-02f, 1.637035141e-02f, 1.637387768e-02f,
+1.637737544e-02f, 1.638084467e-02f, 1.638428539e-02f, 1.638769759e-02f, 1.639108125e-02f, 1.639443638e-02f, 1.639776298e-02f, 1.640106103e-02f, 1.640433054e-02f, 1.640757150e-02f,
+1.641078391e-02f, 1.641396776e-02f, 1.641712305e-02f, 1.642024978e-02f, 1.642334794e-02f, 1.642641753e-02f, 1.642945855e-02f, 1.643247099e-02f, 1.643545484e-02f, 1.643841011e-02f,
+1.644133680e-02f, 1.644423489e-02f, 1.644710439e-02f, 1.644994529e-02f, 1.645275759e-02f, 1.645554129e-02f, 1.645829638e-02f, 1.646102286e-02f, 1.646372072e-02f, 1.646638998e-02f,
+1.646903061e-02f, 1.647164262e-02f, 1.647422601e-02f, 1.647678077e-02f, 1.647930690e-02f, 1.648180441e-02f, 1.648427327e-02f, 1.648671350e-02f, 1.648912509e-02f, 1.649150804e-02f,
+1.649386235e-02f, 1.649618801e-02f, 1.649848502e-02f, 1.650075338e-02f, 1.650299309e-02f, 1.650520414e-02f, 1.650738654e-02f, 1.650954028e-02f, 1.651166535e-02f, 1.651376177e-02f,
+1.651582952e-02f, 1.651786860e-02f, 1.651987902e-02f, 1.652186076e-02f, 1.652381384e-02f, 1.652573824e-02f, 1.652763397e-02f, 1.652950102e-02f, 1.653133940e-02f, 1.653314909e-02f,
+1.653493011e-02f, 1.653668244e-02f, 1.653840610e-02f, 1.654010107e-02f, 1.654176735e-02f, 1.654340495e-02f, 1.654501386e-02f, 1.654659408e-02f, 1.654814562e-02f, 1.654966846e-02f,
+1.655116262e-02f, 1.655262808e-02f, 1.655406485e-02f, 1.655547293e-02f, 1.655685231e-02f, 1.655820300e-02f, 1.655952500e-02f, 1.656081830e-02f, 1.656208291e-02f, 1.656331881e-02f,
+1.656452603e-02f, 1.656570454e-02f, 1.656685436e-02f, 1.656797549e-02f, 1.656906791e-02f, 1.657013164e-02f, 1.657116667e-02f, 1.657217301e-02f, 1.657315064e-02f, 1.657409958e-02f,
+1.657501983e-02f, 1.657591137e-02f, 1.657677422e-02f, 1.657760838e-02f, 1.657841383e-02f, 1.657919060e-02f, 1.657993866e-02f, 1.658065803e-02f, 1.658134871e-02f, 1.658201070e-02f,
+1.658264399e-02f, 1.658324859e-02f, 1.658382450e-02f, 1.658437172e-02f, 1.658489025e-02f, 1.658538009e-02f, 1.658584124e-02f, 1.658627371e-02f, 1.658667749e-02f, 1.658705258e-02f,
+1.658739900e-02f, 1.658771672e-02f, 1.658800577e-02f, 1.658826614e-02f, 1.658849783e-02f, 1.658870085e-02f, 1.658887518e-02f, 1.658902085e-02f, 1.658913784e-02f, 1.658922616e-02f,
+1.658928581e-02f, 1.658931679e-02f, 1.658931911e-02f, 1.658929276e-02f, 1.658923775e-02f, 1.658915408e-02f, 1.658904175e-02f, 1.658890077e-02f, 1.658873113e-02f, 1.658853283e-02f,
+1.658830589e-02f, 1.658805030e-02f, 1.658776606e-02f, 1.658745318e-02f, 1.658711166e-02f, 1.658674150e-02f, 1.658634270e-02f, 1.658591527e-02f, 1.658545921e-02f, 1.658497452e-02f,
+1.658446120e-02f, 1.658391926e-02f, 1.658334870e-02f, 1.658274952e-02f, 1.658212172e-02f, 1.658146531e-02f, 1.658078030e-02f, 1.658006667e-02f, 1.657932445e-02f, 1.657855362e-02f,
+1.657775419e-02f, 1.657692617e-02f, 1.657606956e-02f, 1.657518436e-02f, 1.657427058e-02f, 1.657332821e-02f, 1.657235727e-02f, 1.657135776e-02f, 1.657032967e-02f, 1.656927302e-02f,
+1.656818780e-02f, 1.656707402e-02f, 1.656593169e-02f, 1.656476080e-02f, 1.656356137e-02f, 1.656233339e-02f, 1.656107687e-02f, 1.655979181e-02f, 1.655847822e-02f, 1.655713610e-02f,
+1.655576546e-02f, 1.655436630e-02f, 1.655293862e-02f, 1.655148242e-02f, 1.654999772e-02f, 1.654848452e-02f, 1.654694281e-02f, 1.654537262e-02f, 1.654377393e-02f, 1.654214675e-02f,
+1.654049110e-02f, 1.653880697e-02f, 1.653709436e-02f, 1.653535329e-02f, 1.653358376e-02f, 1.653178577e-02f, 1.652995933e-02f, 1.652810444e-02f, 1.652622110e-02f, 1.652430933e-02f,
+1.652236913e-02f, 1.652040050e-02f, 1.651840344e-02f, 1.651637797e-02f, 1.651432409e-02f, 1.651224180e-02f, 1.651013111e-02f, 1.650799203e-02f, 1.650582455e-02f, 1.650362869e-02f,
+1.650140445e-02f, 1.649915184e-02f, 1.649687086e-02f, 1.649456151e-02f, 1.649222381e-02f, 1.648985776e-02f, 1.648746337e-02f, 1.648504063e-02f, 1.648258956e-02f, 1.648011017e-02f,
+1.647760246e-02f, 1.647506643e-02f, 1.647250209e-02f, 1.646990945e-02f, 1.646728851e-02f, 1.646463928e-02f, 1.646196177e-02f, 1.645925598e-02f, 1.645652192e-02f, 1.645375960e-02f,
+1.645096902e-02f, 1.644815019e-02f, 1.644530311e-02f, 1.644242780e-02f, 1.643952425e-02f, 1.643659248e-02f, 1.643363249e-02f, 1.643064429e-02f, 1.642762789e-02f, 1.642458329e-02f,
+1.642151050e-02f, 1.641840953e-02f, 1.641528038e-02f, 1.641212307e-02f, 1.640893759e-02f, 1.640572396e-02f, 1.640248218e-02f, 1.639921227e-02f, 1.639591422e-02f, 1.639258804e-02f,
+1.638923375e-02f, 1.638585135e-02f, 1.638244085e-02f, 1.637900225e-02f, 1.637553557e-02f, 1.637204081e-02f, 1.636851798e-02f, 1.636496708e-02f, 1.636138813e-02f, 1.635778113e-02f,
+1.635414609e-02f, 1.635048302e-02f, 1.634679193e-02f, 1.634307282e-02f, 1.633932570e-02f, 1.633555059e-02f, 1.633174748e-02f, 1.632791640e-02f, 1.632405734e-02f, 1.632017031e-02f,
+1.631625533e-02f, 1.631231239e-02f, 1.630834152e-02f, 1.630434272e-02f, 1.630031599e-02f, 1.629626135e-02f, 1.629217880e-02f, 1.628806836e-02f, 1.628393003e-02f, 1.627976382e-02f,
+1.627556974e-02f, 1.627134780e-02f, 1.626709801e-02f, 1.626282038e-02f, 1.625851491e-02f, 1.625418162e-02f, 1.624982051e-02f, 1.624543159e-02f, 1.624101488e-02f, 1.623657038e-02f,
+1.623209811e-02f, 1.622759806e-02f, 1.622307026e-02f, 1.621851471e-02f, 1.621393141e-02f, 1.620932039e-02f, 1.620468164e-02f, 1.620001519e-02f, 1.619532103e-02f, 1.619059918e-02f,
+1.618584965e-02f, 1.618107245e-02f, 1.617626759e-02f, 1.617143508e-02f, 1.616657492e-02f, 1.616168714e-02f, 1.615677173e-02f, 1.615182871e-02f, 1.614685809e-02f, 1.614185989e-02f,
+1.613683410e-02f, 1.613178074e-02f, 1.612669982e-02f, 1.612159135e-02f, 1.611645535e-02f, 1.611129182e-02f, 1.610610077e-02f, 1.610088221e-02f, 1.609563616e-02f, 1.609036262e-02f,
+1.608506161e-02f, 1.607973314e-02f, 1.607437722e-02f, 1.606899385e-02f, 1.606358305e-02f, 1.605814484e-02f, 1.605267921e-02f, 1.604718619e-02f, 1.604166579e-02f, 1.603611801e-02f,
+1.603054286e-02f, 1.602494037e-02f, 1.601931053e-02f, 1.601365336e-02f, 1.600796888e-02f, 1.600225709e-02f, 1.599651801e-02f, 1.599075164e-02f, 1.598495800e-02f, 1.597913710e-02f,
+1.597328896e-02f, 1.596741358e-02f, 1.596151097e-02f, 1.595558115e-02f, 1.594962413e-02f, 1.594363993e-02f, 1.593762854e-02f, 1.593158999e-02f, 1.592552429e-02f, 1.591943145e-02f,
+1.591331149e-02f, 1.590716440e-02f, 1.590099021e-02f, 1.589478894e-02f, 1.588856058e-02f, 1.588230516e-02f, 1.587602268e-02f, 1.586971316e-02f, 1.586337662e-02f, 1.585701306e-02f,
+1.585062249e-02f, 1.584420494e-02f, 1.583776040e-02f, 1.583128891e-02f, 1.582479046e-02f, 1.581826507e-02f, 1.581171275e-02f, 1.580513352e-02f, 1.579852739e-02f, 1.579189438e-02f,
+1.578523449e-02f, 1.577854774e-02f, 1.577183414e-02f, 1.576509370e-02f, 1.575832645e-02f, 1.575153239e-02f, 1.574471153e-02f, 1.573786389e-02f, 1.573098949e-02f, 1.572408833e-02f,
+1.571716043e-02f, 1.571020581e-02f, 1.570322447e-02f, 1.569621643e-02f, 1.568918171e-02f, 1.568212031e-02f, 1.567503226e-02f, 1.566791757e-02f, 1.566077624e-02f, 1.565360830e-02f,
+1.564641375e-02f, 1.563919262e-02f, 1.563194491e-02f, 1.562467065e-02f, 1.561736984e-02f, 1.561004249e-02f, 1.560268863e-02f, 1.559530827e-02f, 1.558790142e-02f, 1.558046810e-02f,
+1.557300832e-02f, 1.556552209e-02f, 1.555800943e-02f, 1.555047036e-02f, 1.554290489e-02f, 1.553531303e-02f, 1.552769479e-02f, 1.552005021e-02f, 1.551237928e-02f, 1.550468202e-02f,
+1.549695845e-02f, 1.548920859e-02f, 1.548143244e-02f, 1.547363002e-02f, 1.546580136e-02f, 1.545794646e-02f, 1.545006533e-02f, 1.544215800e-02f, 1.543422448e-02f, 1.542626478e-02f,
+1.541827893e-02f, 1.541026693e-02f, 1.540222879e-02f, 1.539416455e-02f, 1.538607421e-02f, 1.537795778e-02f, 1.536981529e-02f, 1.536164674e-02f, 1.535345216e-02f, 1.534523156e-02f,
+1.533698496e-02f, 1.532871237e-02f, 1.532041380e-02f, 1.531208928e-02f, 1.530373882e-02f, 1.529536243e-02f, 1.528696014e-02f, 1.527853195e-02f, 1.527007789e-02f, 1.526159797e-02f,
+1.525309220e-02f, 1.524456061e-02f, 1.523600321e-02f, 1.522742001e-02f, 1.521881103e-02f, 1.521017629e-02f, 1.520151581e-02f, 1.519282960e-02f, 1.518411768e-02f, 1.517538006e-02f,
+1.516661676e-02f, 1.515782780e-02f, 1.514901319e-02f, 1.514017296e-02f, 1.513130711e-02f, 1.512241568e-02f, 1.511349866e-02f, 1.510455608e-02f, 1.509558796e-02f, 1.508659431e-02f,
+1.507757515e-02f, 1.506853050e-02f, 1.505946038e-02f, 1.505036480e-02f, 1.504124377e-02f, 1.503209733e-02f, 1.502292547e-02f, 1.501372823e-02f, 1.500450562e-02f, 1.499525765e-02f,
+1.498598435e-02f, 1.497668573e-02f, 1.496736181e-02f, 1.495801261e-02f, 1.494863814e-02f, 1.493923842e-02f, 1.492981348e-02f, 1.492036332e-02f, 1.491088797e-02f, 1.490138744e-02f,
+1.489186175e-02f, 1.488231092e-02f, 1.487273498e-02f, 1.486313392e-02f, 1.485350778e-02f, 1.484385658e-02f, 1.483418032e-02f, 1.482447903e-02f, 1.481475273e-02f, 1.480500144e-02f,
+1.479522517e-02f, 1.478542394e-02f, 1.477559777e-02f, 1.476574668e-02f, 1.475587069e-02f, 1.474596982e-02f, 1.473604408e-02f, 1.472609349e-02f, 1.471611808e-02f, 1.470611785e-02f,
+1.469609284e-02f, 1.468604306e-02f, 1.467596852e-02f, 1.466586925e-02f, 1.465574527e-02f, 1.464559659e-02f, 1.463542324e-02f, 1.462522523e-02f, 1.461500258e-02f, 1.460475531e-02f,
+1.459448344e-02f, 1.458418699e-02f, 1.457386598e-02f, 1.456352043e-02f, 1.455315036e-02f, 1.454275578e-02f, 1.453233672e-02f, 1.452189319e-02f, 1.451142523e-02f, 1.450093283e-02f,
+1.449041604e-02f, 1.447987485e-02f, 1.446930930e-02f, 1.445871941e-02f, 1.444810518e-02f, 1.443746666e-02f, 1.442680384e-02f, 1.441611676e-02f, 1.440540543e-02f, 1.439466988e-02f,
+1.438391012e-02f, 1.437312617e-02f, 1.436231806e-02f, 1.435148580e-02f, 1.434062941e-02f, 1.432974892e-02f, 1.431884434e-02f, 1.430791570e-02f, 1.429696302e-02f, 1.428598630e-02f,
+1.427498559e-02f, 1.426396089e-02f, 1.425291223e-02f, 1.424183963e-02f, 1.423074310e-02f, 1.421962267e-02f, 1.420847837e-02f, 1.419731020e-02f, 1.418611819e-02f, 1.417490237e-02f,
+1.416366275e-02f, 1.415239935e-02f, 1.414111220e-02f, 1.412980131e-02f, 1.411846671e-02f, 1.410710842e-02f, 1.409572645e-02f, 1.408432084e-02f, 1.407289159e-02f, 1.406143874e-02f,
+1.404996230e-02f, 1.403846230e-02f, 1.402693875e-02f, 1.401539168e-02f, 1.400382111e-02f, 1.399222706e-02f, 1.398060955e-02f, 1.396896860e-02f, 1.395730424e-02f, 1.394561648e-02f,
+1.393390535e-02f, 1.392217088e-02f, 1.391041307e-02f, 1.389863195e-02f, 1.388682756e-02f, 1.387499989e-02f, 1.386314899e-02f, 1.385127487e-02f, 1.383937754e-02f, 1.382745705e-02f,
+1.381551340e-02f, 1.380354661e-02f, 1.379155672e-02f, 1.377954374e-02f, 1.376750770e-02f, 1.375544861e-02f, 1.374336651e-02f, 1.373126140e-02f, 1.371913332e-02f, 1.370698228e-02f,
+1.369480832e-02f, 1.368261144e-02f, 1.367039168e-02f, 1.365814905e-02f, 1.364588358e-02f, 1.363359530e-02f, 1.362128422e-02f, 1.360895036e-02f, 1.359659376e-02f, 1.358421442e-02f,
+1.357181238e-02f, 1.355938766e-02f, 1.354694028e-02f, 1.353447026e-02f, 1.352197763e-02f, 1.350946241e-02f, 1.349692462e-02f, 1.348436429e-02f, 1.347178143e-02f, 1.345917608e-02f,
+1.344654825e-02f, 1.343389797e-02f, 1.342122526e-02f, 1.340853014e-02f, 1.339581264e-02f, 1.338307279e-02f, 1.337031060e-02f, 1.335752609e-02f, 1.334471930e-02f, 1.333189024e-02f,
+1.331903894e-02f, 1.330616543e-02f, 1.329326972e-02f, 1.328035183e-02f, 1.326741180e-02f, 1.325444965e-02f, 1.324146540e-02f, 1.322845907e-02f, 1.321543069e-02f, 1.320238028e-02f,
+1.318930787e-02f, 1.317621348e-02f, 1.316309713e-02f, 1.314995885e-02f, 1.313679866e-02f, 1.312361659e-02f, 1.311041265e-02f, 1.309718688e-02f, 1.308393930e-02f, 1.307066993e-02f,
+1.305737880e-02f, 1.304406593e-02f, 1.303073134e-02f, 1.301737507e-02f, 1.300399713e-02f, 1.299059755e-02f, 1.297717635e-02f, 1.296373355e-02f, 1.295026919e-02f, 1.293678329e-02f,
+1.292327587e-02f, 1.290974695e-02f, 1.289619657e-02f, 1.288262474e-02f, 1.286903149e-02f, 1.285541685e-02f, 1.284178083e-02f, 1.282812347e-02f, 1.281444479e-02f, 1.280074482e-02f,
+1.278702357e-02f, 1.277328108e-02f, 1.275951737e-02f, 1.274573247e-02f, 1.273192639e-02f, 1.271809917e-02f, 1.270425083e-02f, 1.269038139e-02f, 1.267649088e-02f, 1.266257933e-02f,
+1.264864677e-02f, 1.263469321e-02f, 1.262071868e-02f, 1.260672320e-02f, 1.259270681e-02f, 1.257866953e-02f, 1.256461139e-02f, 1.255053240e-02f, 1.253643260e-02f, 1.252231200e-02f,
+1.250817065e-02f, 1.249400856e-02f, 1.247982575e-02f, 1.246562226e-02f, 1.245139811e-02f, 1.243715332e-02f, 1.242288792e-02f, 1.240860195e-02f, 1.239429541e-02f, 1.237996834e-02f,
+1.236562077e-02f, 1.235125272e-02f, 1.233686422e-02f, 1.232245529e-02f, 1.230802596e-02f, 1.229357625e-02f, 1.227910620e-02f, 1.226461582e-02f, 1.225010515e-02f, 1.223557421e-02f,
+1.222102303e-02f, 1.220645163e-02f, 1.219186004e-02f, 1.217724828e-02f, 1.216261639e-02f, 1.214796439e-02f, 1.213329230e-02f, 1.211860016e-02f, 1.210388798e-02f, 1.208915580e-02f,
+1.207440364e-02f, 1.205963154e-02f, 1.204483950e-02f, 1.203002757e-02f, 1.201519577e-02f, 1.200034413e-02f, 1.198547266e-02f, 1.197058141e-02f, 1.195567040e-02f, 1.194073965e-02f,
+1.192578918e-02f, 1.191081904e-02f, 1.189582924e-02f, 1.188081982e-02f, 1.186579079e-02f, 1.185074219e-02f, 1.183567404e-02f, 1.182058638e-02f, 1.180547922e-02f, 1.179035260e-02f,
+1.177520654e-02f, 1.176004107e-02f, 1.174485621e-02f, 1.172965201e-02f, 1.171442847e-02f, 1.169918564e-02f, 1.168392353e-02f, 1.166864217e-02f, 1.165334160e-02f, 1.163802184e-02f,
+1.162268292e-02f, 1.160732486e-02f, 1.159194769e-02f, 1.157655145e-02f, 1.156113615e-02f, 1.154570183e-02f, 1.153024852e-02f, 1.151477623e-02f, 1.149928501e-02f, 1.148377487e-02f,
+1.146824585e-02f, 1.145269797e-02f, 1.143713127e-02f, 1.142154576e-02f, 1.140594149e-02f, 1.139031847e-02f, 1.137467673e-02f, 1.135901630e-02f, 1.134333722e-02f, 1.132763950e-02f,
+1.131192319e-02f, 1.129618829e-02f, 1.128043485e-02f, 1.126466290e-02f, 1.124887245e-02f, 1.123306354e-02f, 1.121723620e-02f, 1.120139045e-02f, 1.118552633e-02f, 1.116964386e-02f,
+1.115374307e-02f, 1.113782400e-02f, 1.112188666e-02f, 1.110593108e-02f, 1.108995731e-02f, 1.107396536e-02f, 1.105795526e-02f, 1.104192704e-02f, 1.102588073e-02f, 1.100981637e-02f,
+1.099373397e-02f, 1.097763357e-02f, 1.096151519e-02f, 1.094537887e-02f, 1.092922464e-02f, 1.091305252e-02f, 1.089686254e-02f, 1.088065473e-02f, 1.086442912e-02f, 1.084818574e-02f,
+1.083192462e-02f, 1.081564579e-02f, 1.079934928e-02f, 1.078303511e-02f, 1.076670332e-02f, 1.075035393e-02f, 1.073398697e-02f, 1.071760248e-02f, 1.070120049e-02f, 1.068478101e-02f,
+1.066834409e-02f, 1.065188975e-02f, 1.063541801e-02f, 1.061892892e-02f, 1.060242250e-02f, 1.058589878e-02f, 1.056935778e-02f, 1.055279955e-02f, 1.053622410e-02f, 1.051963147e-02f,
+1.050302169e-02f, 1.048639479e-02f, 1.046975079e-02f, 1.045308973e-02f, 1.043641164e-02f, 1.041971654e-02f, 1.040300447e-02f, 1.038627546e-02f, 1.036952953e-02f, 1.035276672e-02f,
+1.033598705e-02f, 1.031919056e-02f, 1.030237728e-02f, 1.028554724e-02f, 1.026870046e-02f, 1.025183697e-02f, 1.023495682e-02f, 1.021806002e-02f, 1.020114661e-02f, 1.018421661e-02f,
+1.016727006e-02f, 1.015030699e-02f, 1.013332743e-02f, 1.011633141e-02f, 1.009931896e-02f, 1.008229010e-02f, 1.006524488e-02f, 1.004818332e-02f, 1.003110544e-02f, 1.001401129e-02f,
+9.996900891e-03f, 9.979774273e-03f, 9.962631468e-03f, 9.945472506e-03f, 9.928297418e-03f, 9.911106235e-03f, 9.893898988e-03f, 9.876675706e-03f, 9.859436422e-03f, 9.842181165e-03f,
+9.824909966e-03f, 9.807622857e-03f, 9.790319867e-03f, 9.773001029e-03f, 9.755666372e-03f, 9.738315928e-03f, 9.720949728e-03f, 9.703567802e-03f, 9.686170182e-03f, 9.668756898e-03f,
+9.651327982e-03f, 9.633883465e-03f, 9.616423377e-03f, 9.598947750e-03f, 9.581456616e-03f, 9.563950004e-03f, 9.546427947e-03f, 9.528890475e-03f, 9.511337621e-03f, 9.493769414e-03f,
+9.476185887e-03f, 9.458587070e-03f, 9.440972996e-03f, 9.423343694e-03f, 9.405699198e-03f, 9.388039538e-03f, 9.370364745e-03f, 9.352674851e-03f, 9.334969888e-03f, 9.317249887e-03f,
+9.299514879e-03f, 9.281764897e-03f, 9.263999971e-03f, 9.246220134e-03f, 9.228425416e-03f, 9.210615850e-03f, 9.192791467e-03f, 9.174952300e-03f, 9.157098378e-03f, 9.139229736e-03f,
+9.121346403e-03f, 9.103448412e-03f, 9.085535795e-03f, 9.067608584e-03f, 9.049666810e-03f, 9.031710505e-03f, 9.013739702e-03f, 8.995754432e-03f, 8.977754727e-03f, 8.959740619e-03f,
+8.941712140e-03f, 8.923669322e-03f, 8.905612197e-03f, 8.887540798e-03f, 8.869455155e-03f, 8.851355303e-03f, 8.833241271e-03f, 8.815113094e-03f, 8.796970802e-03f, 8.778814429e-03f,
+8.760644005e-03f, 8.742459564e-03f, 8.724261138e-03f, 8.706048760e-03f, 8.687822460e-03f, 8.669582272e-03f, 8.651328229e-03f, 8.633060362e-03f, 8.614778703e-03f, 8.596483286e-03f,
+8.578174143e-03f, 8.559851306e-03f, 8.541514808e-03f, 8.523164680e-03f, 8.504800957e-03f, 8.486423670e-03f, 8.468032851e-03f, 8.449628535e-03f, 8.431210752e-03f, 8.412779535e-03f,
+8.394334919e-03f, 8.375876934e-03f, 8.357405614e-03f, 8.338920991e-03f, 8.320423099e-03f, 8.301911969e-03f, 8.283387635e-03f, 8.264850130e-03f, 8.246299486e-03f, 8.227735736e-03f,
+8.209158914e-03f, 8.190569051e-03f, 8.171966181e-03f, 8.153350337e-03f, 8.134721552e-03f, 8.116079858e-03f, 8.097425289e-03f, 8.078757878e-03f, 8.060077658e-03f, 8.041384661e-03f,
+8.022678921e-03f, 8.003960471e-03f, 7.985229344e-03f, 7.966485573e-03f, 7.947729192e-03f, 7.928960233e-03f, 7.910178729e-03f, 7.891384715e-03f, 7.872578223e-03f, 7.853759286e-03f,
+7.834927937e-03f, 7.816084211e-03f, 7.797228140e-03f, 7.778359757e-03f, 7.759479096e-03f, 7.740586190e-03f, 7.721681073e-03f, 7.702763778e-03f, 7.683834338e-03f, 7.664892788e-03f,
+7.645939159e-03f, 7.626973487e-03f, 7.607995803e-03f, 7.589006143e-03f, 7.570004538e-03f, 7.550991024e-03f, 7.531965633e-03f, 7.512928399e-03f, 7.493879356e-03f, 7.474818537e-03f,
+7.455745976e-03f, 7.436661707e-03f, 7.417565762e-03f, 7.398458177e-03f, 7.379338985e-03f, 7.360208218e-03f, 7.341065912e-03f, 7.321912100e-03f, 7.302746815e-03f, 7.283570092e-03f,
+7.264381965e-03f, 7.245182466e-03f, 7.225971631e-03f, 7.206749492e-03f, 7.187516084e-03f, 7.168271441e-03f, 7.149015596e-03f, 7.129748584e-03f, 7.110470439e-03f, 7.091181194e-03f,
+7.071880883e-03f, 7.052569541e-03f, 7.033247201e-03f, 7.013913898e-03f, 6.994569666e-03f, 6.975214538e-03f, 6.955848549e-03f, 6.936471733e-03f, 6.917084125e-03f, 6.897685757e-03f,
+6.878276664e-03f, 6.858856882e-03f, 6.839426442e-03f, 6.819985381e-03f, 6.800533732e-03f, 6.781071530e-03f, 6.761598808e-03f, 6.742115601e-03f, 6.722621943e-03f, 6.703117869e-03f,
+6.683603412e-03f, 6.664078608e-03f, 6.644543490e-03f, 6.624998094e-03f, 6.605442452e-03f, 6.585876600e-03f, 6.566300573e-03f, 6.546714404e-03f, 6.527118128e-03f, 6.507511779e-03f,
+6.487895393e-03f, 6.468269003e-03f, 6.448632643e-03f, 6.428986350e-03f, 6.409330156e-03f, 6.389664097e-03f, 6.369988207e-03f, 6.350302520e-03f, 6.330607072e-03f, 6.310901897e-03f,
+6.291187030e-03f, 6.271462505e-03f, 6.251728356e-03f, 6.231984619e-03f, 6.212231329e-03f, 6.192468519e-03f, 6.172696225e-03f, 6.152914481e-03f, 6.133123322e-03f, 6.113322783e-03f,
+6.093512899e-03f, 6.073693705e-03f, 6.053865234e-03f, 6.034027522e-03f, 6.014180605e-03f, 5.994324516e-03f, 5.974459290e-03f, 5.954584963e-03f, 5.934701570e-03f, 5.914809144e-03f,
+5.894907722e-03f, 5.874997337e-03f, 5.855078026e-03f, 5.835149822e-03f, 5.815212762e-03f, 5.795266879e-03f, 5.775312209e-03f, 5.755348787e-03f, 5.735376647e-03f, 5.715395826e-03f,
+5.695406357e-03f, 5.675408277e-03f, 5.655401619e-03f, 5.635386420e-03f, 5.615362713e-03f, 5.595330535e-03f, 5.575289921e-03f, 5.555240905e-03f, 5.535183522e-03f, 5.515117809e-03f,
+5.495043799e-03f, 5.474961529e-03f, 5.454871033e-03f, 5.434772346e-03f, 5.414665505e-03f, 5.394550543e-03f, 5.374427497e-03f, 5.354296401e-03f, 5.334157290e-03f, 5.314010201e-03f,
+5.293855168e-03f, 5.273692227e-03f, 5.253521413e-03f, 5.233342760e-03f, 5.213156306e-03f, 5.192962084e-03f, 5.172760130e-03f, 5.152550480e-03f, 5.132333169e-03f, 5.112108233e-03f,
+5.091875706e-03f, 5.071635624e-03f, 5.051388023e-03f, 5.031132938e-03f, 5.010870404e-03f, 4.990600457e-03f, 4.970323133e-03f, 4.950038466e-03f, 4.929746493e-03f, 4.909447248e-03f,
+4.889140768e-03f, 4.868827088e-03f, 4.848506243e-03f, 4.828178268e-03f, 4.807843201e-03f, 4.787501075e-03f, 4.767151926e-03f, 4.746795791e-03f, 4.726432705e-03f, 4.706062702e-03f,
+4.685685820e-03f, 4.665302093e-03f, 4.644911557e-03f, 4.624514248e-03f, 4.604110202e-03f, 4.583699453e-03f, 4.563282038e-03f, 4.542857993e-03f, 4.522427352e-03f, 4.501990152e-03f,
+4.481546429e-03f, 4.461096218e-03f, 4.440639554e-03f, 4.420176475e-03f, 4.399707014e-03f, 4.379231209e-03f, 4.358749094e-03f, 4.338260706e-03f, 4.317766080e-03f, 4.297265253e-03f,
+4.276758259e-03f, 4.256245135e-03f, 4.235725916e-03f, 4.215200639e-03f, 4.194669338e-03f, 4.174132051e-03f, 4.153588812e-03f, 4.133039659e-03f, 4.112484625e-03f, 4.091923748e-03f,
+4.071357063e-03f, 4.050784606e-03f, 4.030206413e-03f, 4.009622520e-03f, 3.989032962e-03f, 3.968437777e-03f, 3.947836998e-03f, 3.927230663e-03f, 3.906618808e-03f, 3.886001468e-03f,
+3.865378679e-03f, 3.844750477e-03f, 3.824116899e-03f, 3.803477980e-03f, 3.782833755e-03f, 3.762184262e-03f, 3.741529536e-03f, 3.720869613e-03f, 3.700204529e-03f, 3.679534320e-03f,
+3.658859023e-03f, 3.638178672e-03f, 3.617493304e-03f, 3.596802956e-03f, 3.576107662e-03f, 3.555407460e-03f, 3.534702385e-03f, 3.513992474e-03f, 3.493277762e-03f, 3.472558285e-03f,
+3.451834080e-03f, 3.431105182e-03f, 3.410371628e-03f, 3.389633454e-03f, 3.368890696e-03f, 3.348143390e-03f, 3.327391572e-03f, 3.306635278e-03f, 3.285874544e-03f, 3.265109407e-03f,
+3.244339902e-03f, 3.223566066e-03f, 3.202787935e-03f, 3.182005545e-03f, 3.161218933e-03f, 3.140428133e-03f, 3.119633183e-03f, 3.098834119e-03f, 3.078030976e-03f, 3.057223791e-03f,
+3.036412601e-03f, 3.015597441e-03f, 2.994778347e-03f, 2.973955356e-03f, 2.953128505e-03f, 2.932297828e-03f, 2.911463362e-03f, 2.890625145e-03f, 2.869783210e-03f, 2.848937596e-03f,
+2.828088339e-03f, 2.807235473e-03f, 2.786379037e-03f, 2.765519065e-03f, 2.744655594e-03f, 2.723788661e-03f, 2.702918301e-03f, 2.682044552e-03f, 2.661167448e-03f, 2.640287027e-03f,
+2.619403325e-03f, 2.598516377e-03f, 2.577626221e-03f, 2.556732892e-03f, 2.535836428e-03f, 2.514936863e-03f, 2.494034234e-03f, 2.473128578e-03f, 2.452219931e-03f, 2.431308329e-03f,
+2.410393809e-03f, 2.389476407e-03f, 2.368556158e-03f, 2.347633100e-03f, 2.326707269e-03f, 2.305778700e-03f, 2.284847431e-03f, 2.263913498e-03f, 2.242976936e-03f, 2.222037783e-03f,
+2.201096075e-03f, 2.180151847e-03f, 2.159205137e-03f, 2.138255980e-03f, 2.117304413e-03f, 2.096350472e-03f, 2.075394193e-03f, 2.054435614e-03f, 2.033474770e-03f, 2.012511697e-03f,
+1.991546432e-03f, 1.970579012e-03f, 1.949609472e-03f, 1.928637849e-03f, 1.907664179e-03f, 1.886688499e-03f, 1.865710845e-03f, 1.844731253e-03f, 1.823749760e-03f, 1.802766401e-03f,
+1.781781214e-03f, 1.760794235e-03f, 1.739805500e-03f, 1.718815045e-03f, 1.697822907e-03f, 1.676829122e-03f, 1.655833727e-03f, 1.634836757e-03f, 1.613838250e-03f, 1.592838241e-03f,
+1.571836767e-03f, 1.550833865e-03f, 1.529829570e-03f, 1.508823919e-03f, 1.487816948e-03f, 1.466808694e-03f, 1.445799193e-03f, 1.424788481e-03f, 1.403776596e-03f, 1.382763572e-03f,
+1.361749447e-03f, 1.340734257e-03f, 1.319718038e-03f, 1.298700826e-03f, 1.277682659e-03f, 1.256663571e-03f, 1.235643601e-03f, 1.214622783e-03f, 1.193601155e-03f, 1.172578752e-03f,
+1.151555611e-03f, 1.130531769e-03f, 1.109507262e-03f, 1.088482126e-03f, 1.067456397e-03f, 1.046430111e-03f, 1.025403307e-03f, 1.004376018e-03f, 9.833482823e-04f, 9.623201358e-04f,
+9.412916148e-04f, 9.202627557e-04f, 8.992335947e-04f, 8.782041682e-04f, 8.571745126e-04f, 8.361446641e-04f, 8.151146592e-04f, 7.940845341e-04f, 7.730543251e-04f, 7.520240687e-04f,
+7.309938010e-04f, 7.099635585e-04f, 6.889333774e-04f, 6.679032940e-04f, 6.468733447e-04f, 6.258435658e-04f, 6.048139936e-04f, 5.837846644e-04f, 5.627556144e-04f, 5.417268801e-04f,
+5.206984976e-04f, 4.996705033e-04f, 4.786429335e-04f, 4.576158244e-04f, 4.365892124e-04f, 4.155631337e-04f, 3.945376245e-04f, 3.735127213e-04f, 3.524884602e-04f, 3.314648775e-04f,
+3.104420095e-04f, 2.894198925e-04f, 2.683985626e-04f, 2.473780562e-04f, 2.263584095e-04f, 2.053396588e-04f, 1.843218403e-04f, 1.633049901e-04f, 1.422891447e-04f, 1.212743402e-04f,
+1.002606128e-04f, 7.924799875e-05f, 5.823653428e-05f, 3.722625560e-05f, 1.621719893e-05f, -4.790599534e-06f, -2.579710359e-05f, -4.680227703e-05f, -6.780608367e-05f, -8.880848732e-05f,
+-1.098094518e-04f, -1.308089409e-04f, -1.518069185e-04f, -1.728033484e-04f, -1.937981944e-04f, -2.147914204e-04f, -2.357829902e-04f, -2.567728677e-04f, -2.777610167e-04f, -2.987474011e-04f,
+-3.197319847e-04f, -3.407147315e-04f, -3.616956053e-04f, -3.826745699e-04f, -4.036515893e-04f, -4.246266274e-04f, -4.455996480e-04f, -4.665706151e-04f, -4.875394925e-04f, -5.085062443e-04f,
+-5.294708342e-04f, -5.504332263e-04f, -5.713933844e-04f, -5.923512726e-04f, -6.133068547e-04f, -6.342600947e-04f, -6.552109566e-04f, -6.761594043e-04f, -6.971054018e-04f, -7.180489131e-04f,
+-7.389899021e-04f, -7.599283329e-04f, -7.808641694e-04f, -8.017973757e-04f, -8.227279158e-04f, -8.436557536e-04f, -8.645808532e-04f, -8.855031787e-04f, -9.064226940e-04f, -9.273393632e-04f,
+-9.482531504e-04f, -9.691640196e-04f, -9.900719350e-04f, -1.010976860e-03f, -1.031878760e-03f, -1.052777598e-03f, -1.073673339e-03f, -1.094565946e-03f, -1.115455383e-03f, -1.136341616e-03f,
+-1.157224607e-03f, -1.178104322e-03f, -1.198980723e-03f, -1.219853776e-03f, -1.240723444e-03f, -1.261589692e-03f, -1.282452484e-03f, -1.303311784e-03f, -1.324167556e-03f, -1.345019764e-03f,
+-1.365868373e-03f, -1.386713347e-03f, -1.407554649e-03f, -1.428392246e-03f, -1.449226099e-03f, -1.470056174e-03f, -1.490882436e-03f, -1.511704847e-03f, -1.532523373e-03f, -1.553337978e-03f,
+-1.574148627e-03f, -1.594955282e-03f, -1.615757909e-03f, -1.636556473e-03f, -1.657350937e-03f, -1.678141265e-03f, -1.698927423e-03f, -1.719709374e-03f, -1.740487083e-03f, -1.761260514e-03f,
+-1.782029632e-03f, -1.802794400e-03f, -1.823554784e-03f, -1.844310748e-03f, -1.865062256e-03f, -1.885809273e-03f, -1.906551763e-03f, -1.927289690e-03f, -1.948023020e-03f, -1.968751715e-03f,
+-1.989475742e-03f, -2.010195065e-03f, -2.030909647e-03f, -2.051619454e-03f, -2.072324450e-03f, -2.093024599e-03f, -2.113719867e-03f, -2.134410217e-03f, -2.155095615e-03f, -2.175776024e-03f,
+-2.196451410e-03f, -2.217121737e-03f, -2.237786969e-03f, -2.258447072e-03f, -2.279102009e-03f, -2.299751746e-03f, -2.320396248e-03f, -2.341035478e-03f, -2.361669402e-03f, -2.382297984e-03f,
+-2.402921188e-03f, -2.423538981e-03f, -2.444151326e-03f, -2.464758188e-03f, -2.485359531e-03f, -2.505955322e-03f, -2.526545524e-03f, -2.547130102e-03f, -2.567709020e-03f, -2.588282245e-03f,
+-2.608849740e-03f, -2.629411471e-03f, -2.649967402e-03f, -2.670517498e-03f, -2.691061724e-03f, -2.711600045e-03f, -2.732132426e-03f, -2.752658831e-03f, -2.773179226e-03f, -2.793693575e-03f,
+-2.814201844e-03f, -2.834703997e-03f, -2.855200000e-03f, -2.875689817e-03f, -2.896173413e-03f, -2.916650754e-03f, -2.937121804e-03f, -2.957586528e-03f, -2.978044892e-03f, -2.998496860e-03f,
+-3.018942398e-03f, -3.039381471e-03f, -3.059814043e-03f, -3.080240080e-03f, -3.100659548e-03f, -3.121072410e-03f, -3.141478632e-03f, -3.161878180e-03f, -3.182271019e-03f, -3.202657114e-03f,
+-3.223036429e-03f, -3.243408931e-03f, -3.263774584e-03f, -3.284133354e-03f, -3.304485206e-03f, -3.324830105e-03f, -3.345168016e-03f, -3.365498906e-03f, -3.385822738e-03f, -3.406139480e-03f,
+-3.426449095e-03f, -3.446751549e-03f, -3.467046808e-03f, -3.487334836e-03f, -3.507615601e-03f, -3.527889065e-03f, -3.548155197e-03f, -3.568413959e-03f, -3.588665319e-03f, -3.608909242e-03f,
+-3.629145693e-03f, -3.649374637e-03f, -3.669596041e-03f, -3.689809869e-03f, -3.710016087e-03f, -3.730214662e-03f, -3.750405557e-03f, -3.770588740e-03f, -3.790764175e-03f, -3.810931829e-03f,
+-3.831091666e-03f, -3.851243653e-03f, -3.871387755e-03f, -3.891523938e-03f, -3.911652168e-03f, -3.931772410e-03f, -3.951884630e-03f, -3.971988794e-03f, -3.992084868e-03f, -4.012172817e-03f,
+-4.032252607e-03f, -4.052324204e-03f, -4.072387575e-03f, -4.092442684e-03f, -4.112489497e-03f, -4.132527981e-03f, -4.152558101e-03f, -4.172579824e-03f, -4.192593115e-03f, -4.212597940e-03f,
+-4.232594266e-03f, -4.252582057e-03f, -4.272561281e-03f, -4.292531902e-03f, -4.312493888e-03f, -4.332447205e-03f, -4.352391817e-03f, -4.372327692e-03f, -4.392254796e-03f, -4.412173094e-03f,
+-4.432082553e-03f, -4.451983139e-03f, -4.471874818e-03f, -4.491757556e-03f, -4.511631320e-03f, -4.531496075e-03f, -4.551351789e-03f, -4.571198427e-03f, -4.591035955e-03f, -4.610864340e-03f,
+-4.630683548e-03f, -4.650493546e-03f, -4.670294300e-03f, -4.690085776e-03f, -4.709867940e-03f, -4.729640759e-03f, -4.749404200e-03f, -4.769158229e-03f, -4.788902812e-03f, -4.808637915e-03f,
+-4.828363506e-03f, -4.848079551e-03f, -4.867786016e-03f, -4.887482868e-03f, -4.907170074e-03f, -4.926847599e-03f, -4.946515411e-03f, -4.966173477e-03f, -4.985821762e-03f, -5.005460234e-03f,
+-5.025088859e-03f, -5.044707604e-03f, -5.064316436e-03f, -5.083915321e-03f, -5.103504227e-03f, -5.123083119e-03f, -5.142651966e-03f, -5.162210732e-03f, -5.181759387e-03f, -5.201297895e-03f,
+-5.220826225e-03f, -5.240344343e-03f, -5.259852215e-03f, -5.279349810e-03f, -5.298837094e-03f, -5.318314033e-03f, -5.337780595e-03f, -5.357236747e-03f, -5.376682456e-03f, -5.396117689e-03f,
+-5.415542413e-03f, -5.434956595e-03f, -5.454360202e-03f, -5.473753202e-03f, -5.493135561e-03f, -5.512507247e-03f, -5.531868226e-03f, -5.551218467e-03f, -5.570557936e-03f, -5.589886601e-03f,
+-5.609204429e-03f, -5.628511386e-03f, -5.647807442e-03f, -5.667092562e-03f, -5.686366714e-03f, -5.705629866e-03f, -5.724881985e-03f, -5.744123038e-03f, -5.763352993e-03f, -5.782571818e-03f,
+-5.801779479e-03f, -5.820975945e-03f, -5.840161182e-03f, -5.859335159e-03f, -5.878497843e-03f, -5.897649201e-03f, -5.916789202e-03f, -5.935917813e-03f, -5.955035000e-03f, -5.974140734e-03f,
+-5.993234980e-03f, -6.012317706e-03f, -6.031388881e-03f, -6.050448472e-03f, -6.069496447e-03f, -6.088532774e-03f, -6.107557420e-03f, -6.126570354e-03f, -6.145571543e-03f, -6.164560955e-03f,
+-6.183538558e-03f, -6.202504320e-03f, -6.221458210e-03f, -6.240400194e-03f, -6.259330241e-03f, -6.278248320e-03f, -6.297154397e-03f, -6.316048442e-03f, -6.334930422e-03f, -6.353800306e-03f,
+-6.372658061e-03f, -6.391503656e-03f, -6.410337059e-03f, -6.429158238e-03f, -6.447967161e-03f, -6.466763797e-03f, -6.485548114e-03f, -6.504320081e-03f, -6.523079665e-03f, -6.541826835e-03f,
+-6.560561559e-03f, -6.579283806e-03f, -6.597993544e-03f, -6.616690742e-03f, -6.635375368e-03f, -6.654047390e-03f, -6.672706778e-03f, -6.691353499e-03f, -6.709987523e-03f, -6.728608817e-03f,
+-6.747217351e-03f, -6.765813093e-03f, -6.784396012e-03f, -6.802966076e-03f, -6.821523254e-03f, -6.840067515e-03f, -6.858598828e-03f, -6.877117162e-03f, -6.895622484e-03f, -6.914114765e-03f,
+-6.932593972e-03f, -6.951060076e-03f, -6.969513044e-03f, -6.987952846e-03f, -7.006379450e-03f, -7.024792826e-03f, -7.043192943e-03f, -7.061579769e-03f, -7.079953274e-03f, -7.098313427e-03f,
+-7.116660196e-03f, -7.134993552e-03f, -7.153313463e-03f, -7.171619898e-03f, -7.189912827e-03f, -7.208192218e-03f, -7.226458042e-03f, -7.244710267e-03f, -7.262948862e-03f, -7.281173798e-03f,
+-7.299385043e-03f, -7.317582566e-03f, -7.335766338e-03f, -7.353936327e-03f, -7.372092503e-03f, -7.390234836e-03f, -7.408363295e-03f, -7.426477849e-03f, -7.444578468e-03f, -7.462665122e-03f,
+-7.480737781e-03f, -7.498796413e-03f, -7.516840989e-03f, -7.534871478e-03f, -7.552887851e-03f, -7.570890076e-03f, -7.588878123e-03f, -7.606851963e-03f, -7.624811565e-03f, -7.642756900e-03f,
+-7.660687936e-03f, -7.678604643e-03f, -7.696506993e-03f, -7.714394954e-03f, -7.732268497e-03f, -7.750127592e-03f, -7.767972209e-03f, -7.785802317e-03f, -7.803617887e-03f, -7.821418889e-03f,
+-7.839205293e-03f, -7.856977070e-03f, -7.874734189e-03f, -7.892476620e-03f, -7.910204335e-03f, -7.927917303e-03f, -7.945615495e-03f, -7.963298880e-03f, -7.980967430e-03f, -7.998621115e-03f,
+-8.016259904e-03f, -8.033883769e-03f, -8.051492680e-03f, -8.069086608e-03f, -8.086665523e-03f, -8.104229395e-03f, -8.121778195e-03f, -8.139311894e-03f, -8.156830463e-03f, -8.174333872e-03f,
+-8.191822091e-03f, -8.209295092e-03f, -8.226752845e-03f, -8.244195321e-03f, -8.261622491e-03f, -8.279034326e-03f, -8.296430796e-03f, -8.313811873e-03f, -8.331177527e-03f, -8.348527729e-03f,
+-8.365862451e-03f, -8.383181663e-03f, -8.400485336e-03f, -8.417773441e-03f, -8.435045950e-03f, -8.452302834e-03f, -8.469544063e-03f, -8.486769610e-03f, -8.503979444e-03f, -8.521173537e-03f,
+-8.538351862e-03f, -8.555514388e-03f, -8.572661087e-03f, -8.589791931e-03f, -8.606906891e-03f, -8.624005939e-03f, -8.641089045e-03f, -8.658156181e-03f, -8.675207319e-03f, -8.692242431e-03f,
+-8.709261487e-03f, -8.726264460e-03f, -8.743251320e-03f, -8.760222041e-03f, -8.777176593e-03f, -8.794114947e-03f, -8.811037077e-03f, -8.827942953e-03f, -8.844832548e-03f, -8.861705833e-03f,
+-8.878562780e-03f, -8.895403360e-03f, -8.912227547e-03f, -8.929035311e-03f, -8.945826625e-03f, -8.962601461e-03f, -8.979359790e-03f, -8.996101586e-03f, -9.012826819e-03f, -9.029535463e-03f,
+-9.046227488e-03f, -9.062902868e-03f, -9.079561575e-03f, -9.096203580e-03f, -9.112828857e-03f, -9.129437377e-03f, -9.146029112e-03f, -9.162604036e-03f, -9.179162120e-03f, -9.195703338e-03f,
+-9.212227660e-03f, -9.228735061e-03f, -9.245225512e-03f, -9.261698986e-03f, -9.278155456e-03f, -9.294594894e-03f, -9.311017272e-03f, -9.327422564e-03f, -9.343810742e-03f, -9.360181780e-03f,
+-9.376535649e-03f, -9.392872322e-03f, -9.409191773e-03f, -9.425493974e-03f, -9.441778898e-03f, -9.458046518e-03f, -9.474296807e-03f, -9.490529738e-03f, -9.506745284e-03f, -9.522943418e-03f,
+-9.539124113e-03f, -9.555287343e-03f, -9.571433080e-03f, -9.587561297e-03f, -9.603671968e-03f, -9.619765067e-03f, -9.635840565e-03f, -9.651898437e-03f, -9.667938657e-03f, -9.683961196e-03f,
+-9.699966029e-03f, -9.715953129e-03f, -9.731922470e-03f, -9.747874026e-03f, -9.763807768e-03f, -9.779723672e-03f, -9.795621711e-03f, -9.811501858e-03f, -9.827364088e-03f, -9.843208373e-03f,
+-9.859034688e-03f, -9.874843006e-03f, -9.890633301e-03f, -9.906405547e-03f, -9.922159718e-03f, -9.937895787e-03f, -9.953613729e-03f, -9.969313518e-03f, -9.984995127e-03f, -1.000065853e-02f,
+-1.001630370e-02f, -1.003193062e-02f, -1.004753925e-02f, -1.006312957e-02f, -1.007870156e-02f, -1.009425519e-02f, -1.010979043e-02f, -1.012530726e-02f, -1.014080565e-02f, -1.015628558e-02f,
+-1.017174702e-02f, -1.018718994e-02f, -1.020261432e-02f, -1.021802014e-02f, -1.023340737e-02f, -1.024877598e-02f, -1.026412595e-02f, -1.027945725e-02f, -1.029476986e-02f, -1.031006375e-02f,
+-1.032533890e-02f, -1.034059528e-02f, -1.035583286e-02f, -1.037105163e-02f, -1.038625155e-02f, -1.040143261e-02f, -1.041659476e-02f, -1.043173800e-02f, -1.044686230e-02f, -1.046196763e-02f,
+-1.047705396e-02f, -1.049212127e-02f, -1.050716954e-02f, -1.052219874e-02f, -1.053720885e-02f, -1.055219984e-02f, -1.056717168e-02f, -1.058212436e-02f, -1.059705784e-02f, -1.061197211e-02f,
+-1.062686714e-02f, -1.064174290e-02f, -1.065659937e-02f, -1.067143652e-02f, -1.068625434e-02f, -1.070105279e-02f, -1.071583185e-02f, -1.073059150e-02f, -1.074533171e-02f, -1.076005247e-02f,
+-1.077475373e-02f, -1.078943549e-02f, -1.080409771e-02f, -1.081874037e-02f, -1.083336345e-02f, -1.084796693e-02f, -1.086255077e-02f, -1.087711497e-02f, -1.089165948e-02f, -1.090618429e-02f,
+-1.092068937e-02f, -1.093517471e-02f, -1.094964027e-02f, -1.096408603e-02f, -1.097851197e-02f, -1.099291807e-02f, -1.100730430e-02f, -1.102167063e-02f, -1.103601705e-02f, -1.105034353e-02f,
+-1.106465005e-02f, -1.107893658e-02f, -1.109320310e-02f, -1.110744959e-02f, -1.112167602e-02f, -1.113588237e-02f, -1.115006862e-02f, -1.116423474e-02f, -1.117838071e-02f, -1.119250651e-02f,
+-1.120661211e-02f, -1.122069749e-02f, -1.123476263e-02f, -1.124880750e-02f, -1.126283209e-02f, -1.127683636e-02f, -1.129082030e-02f, -1.130478388e-02f, -1.131872708e-02f, -1.133264988e-02f,
+-1.134655225e-02f, -1.136043417e-02f, -1.137429562e-02f, -1.138813658e-02f, -1.140195702e-02f, -1.141575692e-02f, -1.142953626e-02f, -1.144329501e-02f, -1.145703316e-02f, -1.147075067e-02f,
+-1.148444754e-02f, -1.149812373e-02f, -1.151177922e-02f, -1.152541400e-02f, -1.153902803e-02f, -1.155262130e-02f, -1.156619378e-02f, -1.157974545e-02f, -1.159327630e-02f, -1.160678629e-02f,
+-1.162027541e-02f, -1.163374363e-02f, -1.164719093e-02f, -1.166061730e-02f, -1.167402270e-02f, -1.168740711e-02f, -1.170077052e-02f, -1.171411290e-02f, -1.172743424e-02f, -1.174073450e-02f,
+-1.175401367e-02f, -1.176727172e-02f, -1.178050864e-02f, -1.179372439e-02f, -1.180691897e-02f, -1.182009235e-02f, -1.183324451e-02f, -1.184637542e-02f, -1.185948507e-02f, -1.187257343e-02f,
+-1.188564048e-02f, -1.189868621e-02f, -1.191171058e-02f, -1.192471358e-02f, -1.193769519e-02f, -1.195065539e-02f, -1.196359415e-02f, -1.197651145e-02f, -1.198940728e-02f, -1.200228161e-02f,
+-1.201513442e-02f, -1.202796569e-02f, -1.204077540e-02f, -1.205356353e-02f, -1.206633005e-02f, -1.207907496e-02f, -1.209179822e-02f, -1.210449981e-02f, -1.211717972e-02f, -1.212983793e-02f,
+-1.214247440e-02f, -1.215508914e-02f, -1.216768210e-02f, -1.218025328e-02f, -1.219280265e-02f, -1.220533019e-02f, -1.221783588e-02f, -1.223031971e-02f, -1.224278164e-02f, -1.225522167e-02f,
+-1.226763976e-02f, -1.228003591e-02f, -1.229241009e-02f, -1.230476227e-02f, -1.231709245e-02f, -1.232940060e-02f, -1.234168670e-02f, -1.235395073e-02f, -1.236619267e-02f, -1.237841250e-02f,
+-1.239061020e-02f, -1.240278576e-02f, -1.241493914e-02f, -1.242707034e-02f, -1.243917933e-02f, -1.245126609e-02f, -1.246333061e-02f, -1.247537286e-02f, -1.248739283e-02f, -1.249939049e-02f,
+-1.251136582e-02f, -1.252331881e-02f, -1.253524944e-02f, -1.254715769e-02f, -1.255904354e-02f, -1.257090696e-02f, -1.258274795e-02f, -1.259456648e-02f, -1.260636253e-02f, -1.261813608e-02f,
+-1.262988711e-02f, -1.264161562e-02f, -1.265332157e-02f, -1.266500494e-02f, -1.267666573e-02f, -1.268830390e-02f, -1.269991945e-02f, -1.271151235e-02f, -1.272308258e-02f, -1.273463013e-02f,
+-1.274615497e-02f, -1.275765709e-02f, -1.276913648e-02f, -1.278059310e-02f, -1.279202695e-02f, -1.280343800e-02f, -1.281482623e-02f, -1.282619164e-02f, -1.283753419e-02f, -1.284885388e-02f,
+-1.286015068e-02f, -1.287142458e-02f, -1.288267555e-02f, -1.289390358e-02f, -1.290510865e-02f, -1.291629075e-02f, -1.292744985e-02f, -1.293858593e-02f, -1.294969899e-02f, -1.296078900e-02f,
+-1.297185594e-02f, -1.298289980e-02f, -1.299392056e-02f, -1.300491819e-02f, -1.301589269e-02f, -1.302684404e-02f, -1.303777222e-02f, -1.304867720e-02f, -1.305955898e-02f, -1.307041754e-02f,
+-1.308125285e-02f, -1.309206490e-02f, -1.310285368e-02f, -1.311361917e-02f, -1.312436134e-02f, -1.313508019e-02f, -1.314577569e-02f, -1.315644784e-02f, -1.316709660e-02f, -1.317772196e-02f,
+-1.318832392e-02f, -1.319890244e-02f, -1.320945752e-02f, -1.321998914e-02f, -1.323049727e-02f, -1.324098191e-02f, -1.325144304e-02f, -1.326188063e-02f, -1.327229468e-02f, -1.328268516e-02f,
+-1.329305207e-02f, -1.330339538e-02f, -1.331371508e-02f, -1.332401114e-02f, -1.333428357e-02f, -1.334453233e-02f, -1.335475741e-02f, -1.336495880e-02f, -1.337513648e-02f, -1.338529043e-02f,
+-1.339542064e-02f, -1.340552709e-02f, -1.341560977e-02f, -1.342566865e-02f, -1.343570373e-02f, -1.344571499e-02f, -1.345570241e-02f, -1.346566597e-02f, -1.347560567e-02f, -1.348552147e-02f,
+-1.349541338e-02f, -1.350528137e-02f, -1.351512543e-02f, -1.352494554e-02f, -1.353474169e-02f, -1.354451385e-02f, -1.355426203e-02f, -1.356398619e-02f, -1.357368633e-02f, -1.358336243e-02f,
+-1.359301447e-02f, -1.360264244e-02f, -1.361224633e-02f, -1.362182611e-02f, -1.363138178e-02f, -1.364091331e-02f, -1.365042070e-02f, -1.365990393e-02f, -1.366936298e-02f, -1.367879784e-02f,
+-1.368820850e-02f, -1.369759493e-02f, -1.370695713e-02f, -1.371629508e-02f, -1.372560876e-02f, -1.373489817e-02f, -1.374416328e-02f, -1.375340408e-02f, -1.376262056e-02f, -1.377181270e-02f,
+-1.378098049e-02f, -1.379012391e-02f, -1.379924296e-02f, -1.380833760e-02f, -1.381740784e-02f, -1.382645366e-02f, -1.383547504e-02f, -1.384447196e-02f, -1.385344442e-02f, -1.386239240e-02f,
+-1.387131589e-02f, -1.388021487e-02f, -1.388908933e-02f, -1.389793926e-02f, -1.390676463e-02f, -1.391556544e-02f, -1.392434168e-02f, -1.393309332e-02f, -1.394182036e-02f, -1.395052279e-02f,
+-1.395920058e-02f, -1.396785373e-02f, -1.397648222e-02f, -1.398508604e-02f, -1.399366518e-02f, -1.400221961e-02f, -1.401074934e-02f, -1.401925434e-02f, -1.402773460e-02f, -1.403619012e-02f,
+-1.404462086e-02f, -1.405302684e-02f, -1.406140802e-02f, -1.406976440e-02f, -1.407809596e-02f, -1.408640269e-02f, -1.409468459e-02f, -1.410294163e-02f, -1.411117380e-02f, -1.411938109e-02f,
+-1.412756349e-02f, -1.413572098e-02f, -1.414385355e-02f, -1.415196120e-02f, -1.416004390e-02f, -1.416810165e-02f, -1.417613443e-02f, -1.418414223e-02f, -1.419212503e-02f, -1.420008284e-02f,
+-1.420801562e-02f, -1.421592338e-02f, -1.422380609e-02f, -1.423166375e-02f, -1.423949635e-02f, -1.424730387e-02f, -1.425508630e-02f, -1.426284363e-02f, -1.427057584e-02f, -1.427828293e-02f,
+-1.428596488e-02f, -1.429362169e-02f, -1.430125333e-02f, -1.430885981e-02f, -1.431644110e-02f, -1.432399719e-02f, -1.433152808e-02f, -1.433903375e-02f, -1.434651419e-02f, -1.435396939e-02f,
+-1.436139933e-02f, -1.436880402e-02f, -1.437618342e-02f, -1.438353755e-02f, -1.439086637e-02f, -1.439816989e-02f, -1.440544809e-02f, -1.441270095e-02f, -1.441992848e-02f, -1.442713065e-02f,
+-1.443430746e-02f, -1.444145890e-02f, -1.444858495e-02f, -1.445568560e-02f, -1.446276085e-02f, -1.446981068e-02f, -1.447683508e-02f, -1.448383405e-02f, -1.449080756e-02f, -1.449775562e-02f,
+-1.450467821e-02f, -1.451157531e-02f, -1.451844693e-02f, -1.452529304e-02f, -1.453211364e-02f, -1.453890872e-02f, -1.454567827e-02f, -1.455242228e-02f, -1.455914074e-02f, -1.456583363e-02f,
+-1.457250095e-02f, -1.457914269e-02f, -1.458575884e-02f, -1.459234938e-02f, -1.459891432e-02f, -1.460545363e-02f, -1.461196731e-02f, -1.461845535e-02f, -1.462491774e-02f, -1.463135447e-02f,
+-1.463776553e-02f, -1.464415091e-02f, -1.465051060e-02f, -1.465684459e-02f, -1.466315287e-02f, -1.466943544e-02f, -1.467569229e-02f, -1.468192339e-02f, -1.468812875e-02f, -1.469430836e-02f,
+-1.470046221e-02f, -1.470659028e-02f, -1.471269257e-02f, -1.471876907e-02f, -1.472481978e-02f, -1.473084467e-02f, -1.473684375e-02f, -1.474281700e-02f, -1.474876442e-02f, -1.475468600e-02f,
+-1.476058172e-02f, -1.476645158e-02f, -1.477229558e-02f, -1.477811369e-02f, -1.478390593e-02f, -1.478967226e-02f, -1.479541270e-02f, -1.480112722e-02f, -1.480681582e-02f, -1.481247850e-02f,
+-1.481811524e-02f, -1.482372604e-02f, -1.482931088e-02f, -1.483486976e-02f, -1.484040268e-02f, -1.484590962e-02f, -1.485139058e-02f, -1.485684554e-02f, -1.486227450e-02f, -1.486767746e-02f,
+-1.487305440e-02f, -1.487840531e-02f, -1.488373020e-02f, -1.488902905e-02f, -1.489430185e-02f, -1.489954860e-02f, -1.490476928e-02f, -1.490996390e-02f, -1.491513244e-02f, -1.492027490e-02f,
+-1.492539127e-02f, -1.493048154e-02f, -1.493554570e-02f, -1.494058376e-02f, -1.494559569e-02f, -1.495058150e-02f, -1.495554117e-02f, -1.496047470e-02f, -1.496538209e-02f, -1.497026332e-02f,
+-1.497511839e-02f, -1.497994729e-02f, -1.498475002e-02f, -1.498952657e-02f, -1.499427692e-02f, -1.499900109e-02f, -1.500369905e-02f, -1.500837080e-02f, -1.501301634e-02f, -1.501763566e-02f,
+-1.502222875e-02f, -1.502679561e-02f, -1.503133623e-02f, -1.503585060e-02f, -1.504033872e-02f, -1.504480058e-02f, -1.504923618e-02f, -1.505364550e-02f, -1.505802855e-02f, -1.506238532e-02f,
+-1.506671580e-02f, -1.507101998e-02f, -1.507529786e-02f, -1.507954944e-02f, -1.508377470e-02f, -1.508797365e-02f, -1.509214627e-02f, -1.509629257e-02f, -1.510041253e-02f, -1.510450615e-02f,
+-1.510857342e-02f, -1.511261435e-02f, -1.511662892e-02f, -1.512061712e-02f, -1.512457896e-02f, -1.512851443e-02f, -1.513242352e-02f, -1.513630622e-02f, -1.514016254e-02f, -1.514399247e-02f,
+-1.514779600e-02f, -1.515157312e-02f, -1.515532384e-02f, -1.515904815e-02f, -1.516274603e-02f, -1.516641750e-02f, -1.517006254e-02f, -1.517368115e-02f, -1.517727332e-02f, -1.518083905e-02f,
+-1.518437833e-02f, -1.518789117e-02f, -1.519137755e-02f, -1.519483747e-02f, -1.519827092e-02f, -1.520167791e-02f, -1.520505843e-02f, -1.520841247e-02f, -1.521174004e-02f, -1.521504111e-02f,
+-1.521831570e-02f, -1.522156380e-02f, -1.522478540e-02f, -1.522798050e-02f, -1.523114909e-02f, -1.523429118e-02f, -1.523740675e-02f, -1.524049581e-02f, -1.524355834e-02f, -1.524659436e-02f,
+-1.524960384e-02f, -1.525258680e-02f, -1.525554322e-02f, -1.525847311e-02f, -1.526137645e-02f, -1.526425325e-02f, -1.526710350e-02f, -1.526992720e-02f, -1.527272434e-02f, -1.527549493e-02f,
+-1.527823895e-02f, -1.528095641e-02f, -1.528364731e-02f, -1.528631163e-02f, -1.528894938e-02f, -1.529156056e-02f, -1.529414515e-02f, -1.529670316e-02f, -1.529923459e-02f, -1.530173943e-02f,
+-1.530421768e-02f, -1.530666934e-02f, -1.530909440e-02f, -1.531149286e-02f, -1.531386473e-02f, -1.531620999e-02f, -1.531852864e-02f, -1.532082068e-02f, -1.532308612e-02f, -1.532532494e-02f,
+-1.532753715e-02f, -1.532972274e-02f, -1.533188171e-02f, -1.533401406e-02f, -1.533611978e-02f, -1.533819888e-02f, -1.534025135e-02f, -1.534227720e-02f, -1.534427641e-02f, -1.534624898e-02f,
+-1.534819493e-02f, -1.535011423e-02f, -1.535200690e-02f, -1.535387293e-02f, -1.535571231e-02f, -1.535752505e-02f, -1.535931115e-02f, -1.536107060e-02f, -1.536280340e-02f, -1.536450955e-02f,
+-1.536618906e-02f, -1.536784191e-02f, -1.536946810e-02f, -1.537106764e-02f, -1.537264053e-02f, -1.537418676e-02f, -1.537570634e-02f, -1.537719925e-02f, -1.537866550e-02f, -1.538010510e-02f,
+-1.538151803e-02f, -1.538290430e-02f, -1.538426391e-02f, -1.538559685e-02f, -1.538690313e-02f, -1.538818274e-02f, -1.538943569e-02f, -1.539066197e-02f, -1.539186158e-02f, -1.539303453e-02f,
+-1.539418081e-02f, -1.539530042e-02f, -1.539639336e-02f, -1.539745964e-02f, -1.539849924e-02f, -1.539951218e-02f, -1.540049844e-02f, -1.540145804e-02f, -1.540239097e-02f, -1.540329722e-02f,
+-1.540417681e-02f, -1.540502973e-02f, -1.540585598e-02f, -1.540665556e-02f, -1.540742847e-02f, -1.540817472e-02f, -1.540889429e-02f, -1.540958720e-02f, -1.541025344e-02f, -1.541089301e-02f,
+-1.541150592e-02f, -1.541209216e-02f, -1.541265174e-02f, -1.541318465e-02f, -1.541369089e-02f, -1.541417048e-02f, -1.541462340e-02f, -1.541504966e-02f, -1.541544925e-02f, -1.541582219e-02f,
+-1.541616847e-02f, -1.541648809e-02f, -1.541678106e-02f, -1.541704737e-02f, -1.541728702e-02f, -1.541750002e-02f, -1.541768637e-02f, -1.541784607e-02f, -1.541797911e-02f, -1.541808551e-02f,
+-1.541816527e-02f, -1.541821837e-02f, -1.541824484e-02f, -1.541824466e-02f, -1.541821784e-02f, -1.541816438e-02f, -1.541808429e-02f, -1.541797755e-02f, -1.541784419e-02f, -1.541768419e-02f,
+-1.541749756e-02f, -1.541728431e-02f, -1.541704443e-02f, -1.541677792e-02f, -1.541648479e-02f, -1.541616505e-02f, -1.541581868e-02f, -1.541544570e-02f, -1.541504610e-02f, -1.541461990e-02f,
+-1.541416708e-02f, -1.541368766e-02f, -1.541318164e-02f, -1.541264901e-02f, -1.541208979e-02f, -1.541150396e-02f, -1.541089155e-02f, -1.541025254e-02f, -1.540958695e-02f, -1.540889477e-02f,
+-1.540817600e-02f, -1.540743066e-02f, -1.540665874e-02f, -1.540586024e-02f, -1.540503518e-02f, -1.540418354e-02f, -1.540330534e-02f, -1.540240058e-02f, -1.540146926e-02f, -1.540051138e-02f,
+-1.539952695e-02f, -1.539851598e-02f, -1.539747845e-02f, -1.539641439e-02f, -1.539532378e-02f, -1.539420664e-02f, -1.539306297e-02f, -1.539189277e-02f, -1.539069604e-02f, -1.538947279e-02f,
+-1.538822303e-02f, -1.538694675e-02f, -1.538564396e-02f, -1.538431467e-02f, -1.538295888e-02f, -1.538157658e-02f, -1.538016779e-02f, -1.537873252e-02f, -1.537727075e-02f, -1.537578250e-02f,
+-1.537426778e-02f, -1.537272658e-02f, -1.537115892e-02f, -1.536956478e-02f, -1.536794419e-02f, -1.536629714e-02f, -1.536462364e-02f, -1.536292369e-02f, -1.536119730e-02f, -1.535944447e-02f,
+-1.535766521e-02f, -1.535585952e-02f, -1.535402740e-02f, -1.535216886e-02f, -1.535028391e-02f, -1.534837255e-02f, -1.534643478e-02f, -1.534447062e-02f, -1.534248006e-02f, -1.534046311e-02f,
+-1.533841977e-02f, -1.533635005e-02f, -1.533425396e-02f, -1.533213150e-02f, -1.532998268e-02f, -1.532780749e-02f, -1.532560596e-02f, -1.532337807e-02f, -1.532112384e-02f, -1.531884328e-02f,
+-1.531653638e-02f, -1.531420315e-02f, -1.531184361e-02f, -1.530945775e-02f, -1.530704558e-02f, -1.530460711e-02f, -1.530214234e-02f, -1.529965128e-02f, -1.529713393e-02f, -1.529459030e-02f,
+-1.529202040e-02f, -1.528942423e-02f, -1.528680179e-02f, -1.528415311e-02f, -1.528147817e-02f, -1.527877699e-02f, -1.527604957e-02f, -1.527329592e-02f, -1.527051604e-02f, -1.526770995e-02f,
+-1.526487764e-02f, -1.526201913e-02f, -1.525913442e-02f, -1.525622352e-02f, -1.525328643e-02f, -1.525032316e-02f, -1.524733372e-02f, -1.524431812e-02f, -1.524127635e-02f, -1.523820844e-02f,
+-1.523511438e-02f, -1.523199418e-02f, -1.522884784e-02f, -1.522567539e-02f, -1.522247681e-02f, -1.521925213e-02f, -1.521600134e-02f, -1.521272446e-02f, -1.520942149e-02f, -1.520609244e-02f,
+-1.520273731e-02f, -1.519935612e-02f, -1.519594887e-02f, -1.519251556e-02f, -1.518905621e-02f, -1.518557083e-02f, -1.518205941e-02f, -1.517852197e-02f, -1.517495852e-02f, -1.517136907e-02f,
+-1.516775361e-02f, -1.516411217e-02f, -1.516044474e-02f, -1.515675133e-02f, -1.515303196e-02f, -1.514928663e-02f, -1.514551535e-02f, -1.514171813e-02f, -1.513789497e-02f, -1.513404588e-02f,
+-1.513017088e-02f, -1.512626997e-02f, -1.512234315e-02f, -1.511839044e-02f, -1.511441185e-02f, -1.511040737e-02f, -1.510637703e-02f, -1.510232084e-02f, -1.509823878e-02f, -1.509413089e-02f,
+-1.508999716e-02f, -1.508583761e-02f, -1.508165224e-02f, -1.507744107e-02f, -1.507320409e-02f, -1.506894133e-02f, -1.506465278e-02f, -1.506033846e-02f, -1.505599838e-02f, -1.505163254e-02f,
+-1.504724096e-02f, -1.504282364e-02f, -1.503838060e-02f, -1.503391184e-02f, -1.502941737e-02f, -1.502489720e-02f, -1.502035134e-02f, -1.501577980e-02f, -1.501118259e-02f, -1.500655972e-02f,
+-1.500191120e-02f, -1.499723703e-02f, -1.499253724e-02f, -1.498781182e-02f, -1.498306078e-02f, -1.497828415e-02f, -1.497348191e-02f, -1.496865410e-02f, -1.496380071e-02f, -1.495892176e-02f,
+-1.495401725e-02f, -1.494908720e-02f, -1.494413161e-02f, -1.493915050e-02f, -1.493414388e-02f, -1.492911175e-02f, -1.492405413e-02f, -1.491897103e-02f, -1.491386245e-02f, -1.490872841e-02f,
+-1.490356892e-02f, -1.489838399e-02f, -1.489317363e-02f, -1.488793784e-02f, -1.488267665e-02f, -1.487739005e-02f, -1.487207807e-02f, -1.486674071e-02f, -1.486137798e-02f, -1.485598989e-02f,
+-1.485057646e-02f, -1.484513770e-02f, -1.483967361e-02f, -1.483418420e-02f, -1.482866950e-02f, -1.482312950e-02f, -1.481756422e-02f, -1.481197368e-02f, -1.480635787e-02f, -1.480071683e-02f,
+-1.479505054e-02f, -1.478935903e-02f, -1.478364231e-02f, -1.477790039e-02f, -1.477213328e-02f, -1.476634099e-02f, -1.476052353e-02f, -1.475468092e-02f, -1.474881316e-02f, -1.474292027e-02f,
+-1.473700227e-02f, -1.473105915e-02f, -1.472509094e-02f, -1.471909764e-02f, -1.471307927e-02f, -1.470703584e-02f, -1.470096735e-02f, -1.469487383e-02f, -1.468875529e-02f, -1.468261173e-02f,
+-1.467644318e-02f, -1.467024963e-02f, -1.466403110e-02f, -1.465778762e-02f, -1.465151917e-02f, -1.464522579e-02f, -1.463890749e-02f, -1.463256426e-02f, -1.462619614e-02f, -1.461980312e-02f,
+-1.461338523e-02f, -1.460694247e-02f, -1.460047486e-02f, -1.459398241e-02f, -1.458746513e-02f, -1.458092304e-02f, -1.457435614e-02f, -1.456776446e-02f, -1.456114800e-02f, -1.455450678e-02f,
+-1.454784081e-02f, -1.454115010e-02f, -1.453443467e-02f, -1.452769453e-02f, -1.452092969e-02f, -1.451414016e-02f, -1.450732597e-02f, -1.450048711e-02f, -1.449362361e-02f, -1.448673548e-02f,
+-1.447982273e-02f, -1.447288538e-02f, -1.446592343e-02f, -1.445893691e-02f, -1.445192582e-02f, -1.444489019e-02f, -1.443783001e-02f, -1.443074531e-02f, -1.442363611e-02f, -1.441650240e-02f,
+-1.440934422e-02f, -1.440216156e-02f, -1.439495446e-02f, -1.438772291e-02f, -1.438046693e-02f, -1.437318654e-02f, -1.436588176e-02f, -1.435855259e-02f, -1.435119905e-02f, -1.434382115e-02f,
+-1.433641891e-02f, -1.432899234e-02f, -1.432154146e-02f, -1.431406628e-02f, -1.430656682e-02f, -1.429904309e-02f, -1.429149510e-02f, -1.428392286e-02f, -1.427632641e-02f, -1.426870574e-02f,
+-1.426106087e-02f, -1.425339182e-02f, -1.424569860e-02f, -1.423798122e-02f, -1.423023971e-02f, -1.422247408e-02f, -1.421468433e-02f, -1.420687049e-02f, -1.419903257e-02f, -1.419117059e-02f,
+-1.418328456e-02f, -1.417537449e-02f, -1.416744041e-02f, -1.415948232e-02f, -1.415150024e-02f, -1.414349419e-02f, -1.413546418e-02f, -1.412741023e-02f, -1.411933235e-02f, -1.411123055e-02f,
+-1.410310486e-02f, -1.409495529e-02f, -1.408678185e-02f, -1.407858457e-02f, -1.407036345e-02f, -1.406211850e-02f, -1.405384976e-02f, -1.404555723e-02f, -1.403724092e-02f, -1.402890086e-02f,
+-1.402053706e-02f, -1.401214953e-02f, -1.400373830e-02f, -1.399530337e-02f, -1.398684477e-02f, -1.397836251e-02f, -1.396985660e-02f, -1.396132706e-02f, -1.395277391e-02f, -1.394419716e-02f,
+-1.393559684e-02f, -1.392697295e-02f, -1.391832551e-02f, -1.390965455e-02f, -1.390096006e-02f, -1.389224208e-02f, -1.388350062e-02f, -1.387473569e-02f, -1.386594732e-02f, -1.385713551e-02f,
+-1.384830029e-02f, -1.383944166e-02f, -1.383055966e-02f, -1.382165429e-02f, -1.381272557e-02f, -1.380377352e-02f, -1.379479815e-02f, -1.378579949e-02f, -1.377677755e-02f, -1.376773234e-02f,
+-1.375866388e-02f, -1.374957220e-02f, -1.374045730e-02f, -1.373131920e-02f, -1.372215793e-02f, -1.371297350e-02f, -1.370376592e-02f, -1.369453521e-02f, -1.368528140e-02f, -1.367600449e-02f,
+-1.366670451e-02f, -1.365738147e-02f, -1.364803539e-02f, -1.363866629e-02f, -1.362927418e-02f, -1.361985909e-02f, -1.361042102e-02f, -1.360096001e-02f, -1.359147606e-02f, -1.358196919e-02f,
+-1.357243943e-02f, -1.356288678e-02f, -1.355331127e-02f, -1.354371292e-02f, -1.353409174e-02f, -1.352444775e-02f, -1.351478097e-02f, -1.350509142e-02f, -1.349537911e-02f, -1.348564406e-02f,
+-1.347588630e-02f, -1.346610583e-02f, -1.345630269e-02f, -1.344647688e-02f, -1.343662842e-02f, -1.342675734e-02f, -1.341686365e-02f, -1.340694737e-02f, -1.339700851e-02f, -1.338704710e-02f,
+-1.337706316e-02f, -1.336705670e-02f, -1.335702775e-02f, -1.334697631e-02f, -1.333690242e-02f, -1.332680608e-02f, -1.331668732e-02f, -1.330654616e-02f, -1.329638261e-02f, -1.328619670e-02f,
+-1.327598844e-02f, -1.326575785e-02f, -1.325550495e-02f, -1.324522976e-02f, -1.323493230e-02f, -1.322461259e-02f, -1.321427065e-02f, -1.320390649e-02f, -1.319352014e-02f, -1.318311161e-02f,
+-1.317268092e-02f, -1.316222811e-02f, -1.315175317e-02f, -1.314125613e-02f, -1.313073702e-02f, -1.312019585e-02f, -1.310963264e-02f, -1.309904741e-02f, -1.308844018e-02f, -1.307781097e-02f,
+-1.306715979e-02f, -1.305648668e-02f, -1.304579165e-02f, -1.303507471e-02f, -1.302433590e-02f, -1.301357522e-02f, -1.300279270e-02f, -1.299198835e-02f, -1.298116221e-02f, -1.297031428e-02f,
+-1.295944459e-02f, -1.294855316e-02f, -1.293764001e-02f, -1.292670515e-02f, -1.291574862e-02f, -1.290477042e-02f, -1.289377058e-02f, -1.288274912e-02f, -1.287170606e-02f, -1.286064142e-02f,
+-1.284955522e-02f, -1.283844748e-02f, -1.282731823e-02f, -1.281616747e-02f, -1.280499524e-02f, -1.279380155e-02f, -1.278258642e-02f, -1.277134988e-02f, -1.276009194e-02f, -1.274881263e-02f,
+-1.273751196e-02f, -1.272618997e-02f, -1.271484666e-02f, -1.270348205e-02f, -1.269209618e-02f, -1.268068906e-02f, -1.266926071e-02f, -1.265781115e-02f, -1.264634041e-02f, -1.263484850e-02f,
+-1.262333545e-02f, -1.261180127e-02f, -1.260024600e-02f, -1.258866964e-02f, -1.257707222e-02f, -1.256545376e-02f, -1.255381429e-02f, -1.254215382e-02f, -1.253047238e-02f, -1.251876999e-02f,
+-1.250704666e-02f, -1.249530243e-02f, -1.248353731e-02f, -1.247175132e-02f, -1.245994448e-02f, -1.244811683e-02f, -1.243626837e-02f, -1.242439913e-02f, -1.241250913e-02f, -1.240059840e-02f,
+-1.238866695e-02f, -1.237671481e-02f, -1.236474200e-02f, -1.235274854e-02f, -1.234073445e-02f, -1.232869976e-02f, -1.231664449e-02f, -1.230456865e-02f, -1.229247228e-02f, -1.228035538e-02f,
+-1.226821800e-02f, -1.225606014e-02f, -1.224388183e-02f, -1.223168310e-02f, -1.221946395e-02f, -1.220722443e-02f, -1.219496454e-02f, -1.218268432e-02f, -1.217038378e-02f, -1.215806294e-02f,
+-1.214572184e-02f, -1.213336049e-02f, -1.212097891e-02f, -1.210857712e-02f, -1.209615516e-02f, -1.208371304e-02f, -1.207125078e-02f, -1.205876841e-02f, -1.204626595e-02f, -1.203374342e-02f,
+-1.202120085e-02f, -1.200863825e-02f, -1.199605566e-02f, -1.198345309e-02f, -1.197083057e-02f, -1.195818812e-02f, -1.194552576e-02f, -1.193284352e-02f, -1.192014142e-02f, -1.190741948e-02f,
+-1.189467773e-02f, -1.188191619e-02f, -1.186913487e-02f, -1.185633382e-02f, -1.184351304e-02f, -1.183067256e-02f, -1.181781241e-02f, -1.180493261e-02f, -1.179203318e-02f, -1.177911415e-02f,
+-1.176617553e-02f, -1.175321736e-02f, -1.174023965e-02f, -1.172724243e-02f, -1.171422573e-02f, -1.170118956e-02f, -1.168813396e-02f, -1.167505894e-02f, -1.166196452e-02f, -1.164885074e-02f,
+-1.163571762e-02f, -1.162256517e-02f, -1.160939343e-02f, -1.159620241e-02f, -1.158299215e-02f, -1.156976266e-02f, -1.155651397e-02f, -1.154324610e-02f, -1.152995908e-02f, -1.151665293e-02f,
+-1.150332768e-02f, -1.148998335e-02f, -1.147661996e-02f, -1.146323753e-02f, -1.144983611e-02f, -1.143641569e-02f, -1.142297632e-02f, -1.140951802e-02f, -1.139604080e-02f, -1.138254470e-02f,
+-1.136902973e-02f, -1.135549593e-02f, -1.134194332e-02f, -1.132837191e-02f, -1.131478175e-02f, -1.130117284e-02f, -1.128754523e-02f, -1.127389892e-02f, -1.126023394e-02f, -1.124655033e-02f,
+-1.123284810e-02f, -1.121912728e-02f, -1.120538790e-02f, -1.119162997e-02f, -1.117785353e-02f, -1.116405859e-02f, -1.115024519e-02f, -1.113641335e-02f, -1.112256309e-02f, -1.110869444e-02f,
+-1.109480742e-02f, -1.108090207e-02f, -1.106697839e-02f, -1.105303643e-02f, -1.103907620e-02f, -1.102509773e-02f, -1.101110104e-02f, -1.099708616e-02f, -1.098305312e-02f, -1.096900194e-02f,
+-1.095493264e-02f, -1.094084526e-02f, -1.092673981e-02f, -1.091261633e-02f, -1.089847483e-02f, -1.088431534e-02f, -1.087013789e-02f, -1.085594251e-02f, -1.084172922e-02f, -1.082749804e-02f,
+-1.081324900e-02f, -1.079898213e-02f, -1.078469746e-02f, -1.077039500e-02f, -1.075607478e-02f, -1.074173683e-02f, -1.072738118e-02f, -1.071300785e-02f, -1.069861687e-02f, -1.068420826e-02f,
+-1.066978205e-02f, -1.065533826e-02f, -1.064087693e-02f, -1.062639807e-02f, -1.061190172e-02f, -1.059738789e-02f, -1.058285662e-02f, -1.056830793e-02f, -1.055374185e-02f, -1.053915840e-02f,
+-1.052455761e-02f, -1.050993951e-02f, -1.049530412e-02f, -1.048065147e-02f, -1.046598159e-02f, -1.045129449e-02f, -1.043659022e-02f, -1.042186878e-02f, -1.040713022e-02f, -1.039237456e-02f,
+-1.037760182e-02f, -1.036281203e-02f, -1.034800521e-02f, -1.033318140e-02f, -1.031834062e-02f, -1.030348290e-02f, -1.028860826e-02f, -1.027371673e-02f, -1.025880834e-02f, -1.024388311e-02f,
+-1.022894107e-02f, -1.021398225e-02f, -1.019900667e-02f, -1.018401436e-02f, -1.016900535e-02f, -1.015397967e-02f, -1.013893733e-02f, -1.012387838e-02f, -1.010880283e-02f, -1.009371071e-02f,
+-1.007860205e-02f, -1.006347688e-02f, -1.004833522e-02f, -1.003317711e-02f, -1.001800256e-02f, -1.000281161e-02f, -9.987604275e-03f, -9.972380594e-03f, -9.957140590e-03f, -9.941884290e-03f,
+-9.926611722e-03f, -9.911322913e-03f, -9.896017890e-03f, -9.880696681e-03f, -9.865359313e-03f, -9.850005814e-03f, -9.834636211e-03f, -9.819250531e-03f, -9.803848803e-03f, -9.788431053e-03f,
+-9.772997309e-03f, -9.757547599e-03f, -9.742081951e-03f, -9.726600392e-03f, -9.711102949e-03f, -9.695589651e-03f, -9.680060526e-03f, -9.664515600e-03f, -9.648954903e-03f, -9.633378461e-03f,
+-9.617786302e-03f, -9.602178455e-03f, -9.586554947e-03f, -9.570915806e-03f, -9.555261061e-03f, -9.539590738e-03f, -9.523904867e-03f, -9.508203474e-03f, -9.492486589e-03f, -9.476754239e-03f,
+-9.461006452e-03f, -9.445243257e-03f, -9.429464681e-03f, -9.413670752e-03f, -9.397861500e-03f, -9.382036952e-03f, -9.366197136e-03f, -9.350342081e-03f, -9.334471815e-03f, -9.318586366e-03f,
+-9.302685763e-03f, -9.286770033e-03f, -9.270839206e-03f, -9.254893310e-03f, -9.238932372e-03f, -9.222956423e-03f, -9.206965489e-03f, -9.190959601e-03f, -9.174938785e-03f, -9.158903071e-03f,
+-9.142852488e-03f, -9.126787063e-03f, -9.110706826e-03f, -9.094611805e-03f, -9.078502029e-03f, -9.062377527e-03f, -9.046238326e-03f, -9.030084457e-03f, -9.013915948e-03f, -8.997732828e-03f,
+-8.981535125e-03f, -8.965322868e-03f, -8.949096086e-03f, -8.932854809e-03f, -8.916599064e-03f, -8.900328881e-03f, -8.884044289e-03f, -8.867745317e-03f, -8.851431994e-03f, -8.835104349e-03f,
+-8.818762411e-03f, -8.802406208e-03f, -8.786035771e-03f, -8.769651128e-03f, -8.753252308e-03f, -8.736839341e-03f, -8.720412256e-03f, -8.703971082e-03f, -8.687515847e-03f, -8.671046582e-03f,
+-8.654563316e-03f, -8.638066078e-03f, -8.621554898e-03f, -8.605029803e-03f, -8.588490825e-03f, -8.571937993e-03f, -8.555371335e-03f, -8.538790882e-03f, -8.522196662e-03f, -8.505588706e-03f,
+-8.488967042e-03f, -8.472331700e-03f, -8.455682711e-03f, -8.439020102e-03f, -8.422343905e-03f, -8.405654148e-03f, -8.388950862e-03f, -8.372234075e-03f, -8.355503818e-03f, -8.338760120e-03f,
+-8.322003010e-03f, -8.305232520e-03f, -8.288448678e-03f, -8.271651514e-03f, -8.254841059e-03f, -8.238017341e-03f, -8.221180391e-03f, -8.204330238e-03f, -8.187466913e-03f, -8.170590445e-03f,
+-8.153700864e-03f, -8.136798201e-03f, -8.119882485e-03f, -8.102953746e-03f, -8.086012014e-03f, -8.069057320e-03f, -8.052089693e-03f, -8.035109163e-03f, -8.018115761e-03f, -8.001109516e-03f,
+-7.984090459e-03f, -7.967058620e-03f, -7.950014029e-03f, -7.932956716e-03f, -7.915886712e-03f, -7.898804046e-03f, -7.881708749e-03f, -7.864600852e-03f, -7.847480384e-03f, -7.830347376e-03f,
+-7.813201858e-03f, -7.796043860e-03f, -7.778873414e-03f, -7.761690549e-03f, -7.744495295e-03f, -7.727287684e-03f, -7.710067745e-03f, -7.692835510e-03f, -7.675591008e-03f, -7.658334270e-03f,
+-7.641065326e-03f, -7.623784208e-03f, -7.606490946e-03f, -7.589185570e-03f, -7.571868111e-03f, -7.554538599e-03f, -7.537197066e-03f, -7.519843542e-03f, -7.502478057e-03f, -7.485100642e-03f,
+-7.467711329e-03f, -7.450310147e-03f, -7.432897128e-03f, -7.415472302e-03f, -7.398035700e-03f, -7.380587353e-03f, -7.363127291e-03f, -7.345655547e-03f, -7.328172149e-03f, -7.310677130e-03f,
+-7.293170520e-03f, -7.275652351e-03f, -7.258122652e-03f, -7.240581456e-03f, -7.223028793e-03f, -7.205464693e-03f, -7.187889189e-03f, -7.170302311e-03f, -7.152704090e-03f, -7.135094557e-03f,
+-7.117473743e-03f, -7.099841680e-03f, -7.082198398e-03f, -7.064543929e-03f, -7.046878304e-03f, -7.029201554e-03f, -7.011513710e-03f, -6.993814803e-03f, -6.976104865e-03f, -6.958383927e-03f,
+-6.940652020e-03f, -6.922909175e-03f, -6.905155424e-03f, -6.887390798e-03f, -6.869615329e-03f, -6.851829047e-03f, -6.834031984e-03f, -6.816224171e-03f, -6.798405641e-03f, -6.780576423e-03f,
+-6.762736550e-03f, -6.744886053e-03f, -6.727024964e-03f, -6.709153314e-03f, -6.691271134e-03f, -6.673378457e-03f, -6.655475312e-03f, -6.637561733e-03f, -6.619637751e-03f, -6.601703397e-03f,
+-6.583758703e-03f, -6.565803700e-03f, -6.547838420e-03f, -6.529862895e-03f, -6.511877156e-03f, -6.493881235e-03f, -6.475875164e-03f, -6.457858974e-03f, -6.439832698e-03f, -6.421796366e-03f,
+-6.403750011e-03f, -6.385693664e-03f, -6.367627358e-03f, -6.349551123e-03f, -6.331464992e-03f, -6.313368997e-03f, -6.295263169e-03f, -6.277147540e-03f, -6.259022143e-03f, -6.240887008e-03f,
+-6.222742169e-03f, -6.204587656e-03f, -6.186423502e-03f, -6.168249739e-03f, -6.150066398e-03f, -6.131873512e-03f, -6.113671113e-03f, -6.095459232e-03f, -6.077237902e-03f, -6.059007154e-03f,
+-6.040767022e-03f, -6.022517536e-03f, -6.004258729e-03f, -5.985990633e-03f, -5.967713280e-03f, -5.949426702e-03f, -5.931130931e-03f, -5.912826000e-03f, -5.894511941e-03f, -5.876188785e-03f,
+-5.857856565e-03f, -5.839515313e-03f, -5.821165062e-03f, -5.802805843e-03f, -5.784437690e-03f, -5.766060633e-03f, -5.747674705e-03f, -5.729279940e-03f, -5.710876368e-03f, -5.692464022e-03f,
+-5.674042935e-03f, -5.655613139e-03f, -5.637174666e-03f, -5.618727549e-03f, -5.600271820e-03f, -5.581807511e-03f, -5.563334655e-03f, -5.544853284e-03f, -5.526363431e-03f, -5.507865127e-03f,
+-5.489358407e-03f, -5.470843301e-03f, -5.452319842e-03f, -5.433788064e-03f, -5.415247998e-03f, -5.396699677e-03f, -5.378143133e-03f, -5.359578399e-03f, -5.341005508e-03f, -5.322424492e-03f,
+-5.303835384e-03f, -5.285238216e-03f, -5.266633020e-03f, -5.248019831e-03f, -5.229398679e-03f, -5.210769598e-03f, -5.192132620e-03f, -5.173487779e-03f, -5.154835106e-03f, -5.136174635e-03f,
+-5.117506397e-03f, -5.098830426e-03f, -5.080146755e-03f, -5.061455416e-03f, -5.042756442e-03f, -5.024049866e-03f, -5.005335720e-03f, -4.986614037e-03f, -4.967884851e-03f, -4.949148193e-03f,
+-4.930404097e-03f, -4.911652595e-03f, -4.892893720e-03f, -4.874127506e-03f, -4.855353984e-03f, -4.836573188e-03f, -4.817785151e-03f, -4.798989906e-03f, -4.780187484e-03f, -4.761377920e-03f,
+-4.742561247e-03f, -4.723737496e-03f, -4.704906702e-03f, -4.686068896e-03f, -4.667224113e-03f, -4.648372384e-03f, -4.629513744e-03f, -4.610648224e-03f, -4.591775858e-03f, -4.572896679e-03f,
+-4.554010720e-03f, -4.535118014e-03f, -4.516218593e-03f, -4.497312492e-03f, -4.478399743e-03f, -4.459480379e-03f, -4.440554433e-03f, -4.421621938e-03f, -4.402682927e-03f, -4.383737434e-03f,
+-4.364785491e-03f, -4.345827132e-03f, -4.326862390e-03f, -4.307891298e-03f, -4.288913889e-03f, -4.269930195e-03f, -4.250940252e-03f, -4.231944090e-03f, -4.212941745e-03f, -4.193933248e-03f,
+-4.174918633e-03f, -4.155897934e-03f, -4.136871183e-03f, -4.117838414e-03f, -4.098799659e-03f, -4.079754953e-03f, -4.060704328e-03f, -4.041647818e-03f, -4.022585456e-03f, -4.003517275e-03f,
+-3.984443308e-03f, -3.965363590e-03f, -3.946278152e-03f, -3.927187029e-03f, -3.908090253e-03f, -3.888987858e-03f, -3.869879878e-03f, -3.850766345e-03f, -3.831647293e-03f, -3.812522756e-03f,
+-3.793392766e-03f, -3.774257357e-03f, -3.755116563e-03f, -3.735970416e-03f, -3.716818951e-03f, -3.697662200e-03f, -3.678500197e-03f, -3.659332975e-03f, -3.640160568e-03f, -3.620983010e-03f,
+-3.601800333e-03f, -3.582612571e-03f, -3.563419758e-03f, -3.544221926e-03f, -3.525019110e-03f, -3.505811343e-03f, -3.486598658e-03f, -3.467381090e-03f, -3.448158670e-03f, -3.428931433e-03f,
+-3.409699412e-03f, -3.390462641e-03f, -3.371221154e-03f, -3.351974983e-03f, -3.332724162e-03f, -3.313468726e-03f, -3.294208706e-03f, -3.274944138e-03f, -3.255675054e-03f, -3.236401488e-03f,
+-3.217123473e-03f, -3.197841044e-03f, -3.178554233e-03f, -3.159263074e-03f, -3.139967601e-03f, -3.120667848e-03f, -3.101363847e-03f, -3.082055634e-03f, -3.062743240e-03f, -3.043426700e-03f,
+-3.024106047e-03f, -3.004781316e-03f, -2.985452539e-03f, -2.966119750e-03f, -2.946782983e-03f, -2.927442271e-03f, -2.908097649e-03f, -2.888749149e-03f, -2.869396806e-03f, -2.850040653e-03f,
+-2.830680723e-03f, -2.811317051e-03f, -2.791949670e-03f, -2.772578614e-03f, -2.753203916e-03f, -2.733825610e-03f, -2.714443729e-03f, -2.695058309e-03f, -2.675669381e-03f, -2.656276980e-03f,
+-2.636881140e-03f, -2.617481893e-03f, -2.598079275e-03f, -2.578673318e-03f, -2.559264057e-03f, -2.539851525e-03f, -2.520435755e-03f, -2.501016782e-03f, -2.481594640e-03f, -2.462169361e-03f,
+-2.442740980e-03f, -2.423309530e-03f, -2.403875045e-03f, -2.384437560e-03f, -2.364997107e-03f, -2.345553720e-03f, -2.326107434e-03f, -2.306658282e-03f, -2.287206297e-03f, -2.267751514e-03f,
+-2.248293966e-03f, -2.228833687e-03f, -2.209370710e-03f, -2.189905070e-03f, -2.170436801e-03f, -2.150965936e-03f, -2.131492508e-03f, -2.112016552e-03f, -2.092538102e-03f, -2.073057191e-03f,
+-2.053573853e-03f, -2.034088121e-03f, -2.014600030e-03f, -1.995109614e-03f, -1.975616906e-03f, -1.956121940e-03f, -1.936624750e-03f, -1.917125369e-03f, -1.897623832e-03f, -1.878120172e-03f,
+-1.858614423e-03f, -1.839106619e-03f, -1.819596793e-03f, -1.800084980e-03f, -1.780571213e-03f, -1.761055527e-03f, -1.741537954e-03f, -1.722018529e-03f, -1.702497286e-03f, -1.682974258e-03f,
+-1.663449480e-03f, -1.643922984e-03f, -1.624394805e-03f, -1.604864977e-03f, -1.585333534e-03f, -1.565800509e-03f, -1.546265936e-03f, -1.526729849e-03f, -1.507192282e-03f, -1.487653268e-03f,
+-1.468112842e-03f, -1.448571038e-03f, -1.429027888e-03f, -1.409483428e-03f, -1.389937690e-03f, -1.370390710e-03f, -1.350842519e-03f, -1.331293153e-03f, -1.311742645e-03f, -1.292191030e-03f,
+-1.272638339e-03f, -1.253084609e-03f, -1.233529872e-03f, -1.213974163e-03f, -1.194417514e-03f, -1.174859961e-03f, -1.155301537e-03f, -1.135742275e-03f, -1.116182209e-03f, -1.096621374e-03f,
+-1.077059803e-03f, -1.057497530e-03f, -1.037934589e-03f, -1.018371014e-03f, -9.988068377e-04f, -9.792420950e-04f, -9.596768193e-04f, -9.401110446e-04f, -9.205448046e-04f, -9.009781332e-04f,
+-8.814110642e-04f, -8.618436313e-04f, -8.422758685e-04f, -8.227078096e-04f, -8.031394883e-04f, -7.835709384e-04f, -7.640021938e-04f, -7.444332883e-04f, -7.248642557e-04f, -7.052951298e-04f,
+-6.857259444e-04f, -6.661567332e-04f, -6.465875302e-04f, -6.270183691e-04f, -6.074492836e-04f, -5.878803076e-04f, -5.683114749e-04f, -5.487428193e-04f, -5.291743745e-04f, -5.096061743e-04f,
+-4.900382526e-04f, -4.704706430e-04f, -4.509033794e-04f, -4.313364956e-04f, -4.117700252e-04f, -3.922040022e-04f, -3.726384602e-04f, -3.530734330e-04f, -3.335089543e-04f, -3.139450580e-04f,
+-2.943817778e-04f, -2.748191474e-04f, -2.552572006e-04f, -2.356959712e-04f, -2.161354928e-04f, -1.965757991e-04f, -1.770169241e-04f, -1.574589013e-04f, -1.379017645e-04f, -1.183455474e-04f,
+-9.879028381e-05f, -7.923600735e-05f, -5.968275176e-05f, -4.013055077e-05f, -2.057943806e-05f, -1.029447347e-06f, 1.851938767e-05f, 3.806703331e-05f, 5.761345586e-05f, 7.715862166e-05f,
+9.670249700e-05f, 1.162450482e-04f, 1.357862417e-04f, 1.553260436e-04f, 1.748644205e-04f, 1.944013385e-04f, 2.139367641e-04f, 2.334706636e-04f, 2.530030034e-04f, 2.725337498e-04f,
+2.920628691e-04f, 3.115903278e-04f, 3.311160922e-04f, 3.506401288e-04f, 3.701624038e-04f, 3.896828836e-04f, 4.092015347e-04f, 4.287183235e-04f, 4.482332163e-04f, 4.677461797e-04f,
+4.872571798e-04f, 5.067661833e-04f, 5.262731565e-04f, 5.457780659e-04f, 5.652808778e-04f, 5.847815588e-04f, 6.042800753e-04f, 6.237763937e-04f, 6.432704804e-04f, 6.627623021e-04f,
+6.822518250e-04f, 7.017390157e-04f, 7.212238408e-04f, 7.407062666e-04f, 7.601862596e-04f, 7.796637864e-04f, 7.991388135e-04f, 8.186113074e-04f, 8.380812345e-04f, 8.575485615e-04f,
+8.770132548e-04f, 8.964752811e-04f, 9.159346067e-04f, 9.353911984e-04f, 9.548450226e-04f, 9.742960459e-04f, 9.937442350e-04f, 1.013189556e-03f, 1.032631976e-03f, 1.052071462e-03f,
+1.071507980e-03f, 1.090941496e-03f, 1.110371977e-03f, 1.129799391e-03f, 1.149223703e-03f, 1.168644880e-03f, 1.188062889e-03f, 1.207477696e-03f, 1.226889269e-03f, 1.246297573e-03f,
+1.265702575e-03f, 1.285104243e-03f, 1.304502543e-03f, 1.323897441e-03f, 1.343288904e-03f, 1.362676899e-03f, 1.382061393e-03f, 1.401442352e-03f, 1.420819744e-03f, 1.440193534e-03f,
+1.459563690e-03f, 1.478930178e-03f, 1.498292965e-03f, 1.517652019e-03f, 1.537007305e-03f, 1.556358790e-03f, 1.575706442e-03f, 1.595050227e-03f, 1.614390111e-03f, 1.633726063e-03f,
+1.653058048e-03f, 1.672386033e-03f, 1.691709986e-03f, 1.711029873e-03f, 1.730345661e-03f, 1.749657317e-03f, 1.768964808e-03f, 1.788268101e-03f, 1.807567162e-03f, 1.826861958e-03f,
+1.846152458e-03f, 1.865438626e-03f, 1.884720431e-03f, 1.903997839e-03f, 1.923270818e-03f, 1.942539333e-03f, 1.961803353e-03f, 1.981062844e-03f, 2.000317774e-03f, 2.019568108e-03f,
+2.038813815e-03f, 2.058054861e-03f, 2.077291214e-03f, 2.096522840e-03f, 2.115749706e-03f, 2.134971780e-03f, 2.154189029e-03f, 2.173401419e-03f, 2.192608918e-03f, 2.211811494e-03f,
+2.231009112e-03f, 2.250201740e-03f, 2.269389346e-03f, 2.288571896e-03f, 2.307749358e-03f, 2.326921699e-03f, 2.346088886e-03f, 2.365250886e-03f, 2.384407666e-03f, 2.403559195e-03f,
+2.422705438e-03f, 2.441846363e-03f, 2.460981938e-03f, 2.480112130e-03f, 2.499236905e-03f, 2.518356232e-03f, 2.537470077e-03f, 2.556578408e-03f, 2.575681192e-03f, 2.594778397e-03f,
+2.613869990e-03f, 2.632955938e-03f, 2.652036209e-03f, 2.671110769e-03f, 2.690179587e-03f, 2.709242630e-03f, 2.728299865e-03f, 2.747351259e-03f, 2.766396781e-03f, 2.785436397e-03f,
+2.804470076e-03f, 2.823497783e-03f, 2.842519488e-03f, 2.861535157e-03f, 2.880544758e-03f, 2.899548259e-03f, 2.918545626e-03f, 2.937536829e-03f, 2.956521833e-03f, 2.975500607e-03f,
+2.994473119e-03f, 3.013439335e-03f, 3.032399224e-03f, 3.051352753e-03f, 3.070299890e-03f, 3.089240603e-03f, 3.108174858e-03f, 3.127102625e-03f, 3.146023870e-03f, 3.164938561e-03f,
+3.183846666e-03f, 3.202748153e-03f, 3.221642989e-03f, 3.240531142e-03f, 3.259412581e-03f, 3.278287272e-03f, 3.297155183e-03f, 3.316016283e-03f, 3.334870539e-03f, 3.353717919e-03f,
+3.372558392e-03f, 3.391391923e-03f, 3.410218483e-03f, 3.429038038e-03f, 3.447850556e-03f, 3.466656006e-03f, 3.485454355e-03f, 3.504245571e-03f, 3.523029622e-03f, 3.541806477e-03f,
+3.560576103e-03f, 3.579338468e-03f, 3.598093540e-03f, 3.616841288e-03f, 3.635581679e-03f, 3.654314681e-03f, 3.673040263e-03f, 3.691758392e-03f, 3.710469037e-03f, 3.729172166e-03f,
+3.747867747e-03f, 3.766555748e-03f, 3.785236137e-03f, 3.803908882e-03f, 3.822573953e-03f, 3.841231316e-03f, 3.859880940e-03f, 3.878522794e-03f, 3.897156845e-03f, 3.915783062e-03f,
+3.934401413e-03f, 3.953011867e-03f, 3.971614392e-03f, 3.990208956e-03f, 4.008795527e-03f, 4.027374074e-03f, 4.045944566e-03f, 4.064506970e-03f, 4.083061255e-03f, 4.101607390e-03f,
+4.120145343e-03f, 4.138675082e-03f, 4.157196576e-03f, 4.175709794e-03f, 4.194214703e-03f, 4.212711273e-03f, 4.231199473e-03f, 4.249679269e-03f, 4.268150632e-03f, 4.286613530e-03f,
+4.305067931e-03f, 4.323513804e-03f, 4.341951117e-03f, 4.360379840e-03f, 4.378799941e-03f, 4.397211389e-03f, 4.415614152e-03f, 4.434008199e-03f, 4.452393499e-03f, 4.470770020e-03f,
+4.489137732e-03f, 4.507496604e-03f, 4.525846603e-03f, 4.544187699e-03f, 4.562519861e-03f, 4.580843057e-03f, 4.599157257e-03f, 4.617462429e-03f, 4.635758543e-03f, 4.654045567e-03f,
+4.672323469e-03f, 4.690592220e-03f, 4.708851788e-03f, 4.727102143e-03f, 4.745343252e-03f, 4.763575086e-03f, 4.781797612e-03f, 4.800010802e-03f, 4.818214622e-03f, 4.836409043e-03f,
+4.854594034e-03f, 4.872769564e-03f, 4.890935601e-03f, 4.909092116e-03f, 4.927239077e-03f, 4.945376454e-03f, 4.963504215e-03f, 4.981622331e-03f, 4.999730770e-03f, 5.017829502e-03f,
+5.035918495e-03f, 5.053997720e-03f, 5.072067146e-03f, 5.090126741e-03f, 5.108176476e-03f, 5.126216320e-03f, 5.144246242e-03f, 5.162266212e-03f, 5.180276199e-03f, 5.198276173e-03f,
+5.216266103e-03f, 5.234245958e-03f, 5.252215709e-03f, 5.270175325e-03f, 5.288124774e-03f, 5.306064028e-03f, 5.323993056e-03f, 5.341911826e-03f, 5.359820310e-03f, 5.377718476e-03f,
+5.395606294e-03f, 5.413483734e-03f, 5.431350766e-03f, 5.449207360e-03f, 5.467053484e-03f, 5.484889110e-03f, 5.502714206e-03f, 5.520528743e-03f, 5.538332691e-03f, 5.556126019e-03f,
+5.573908697e-03f, 5.591680696e-03f, 5.609441985e-03f, 5.627192534e-03f, 5.644932313e-03f, 5.662661292e-03f, 5.680379441e-03f, 5.698086730e-03f, 5.715783129e-03f, 5.733468609e-03f,
+5.751143139e-03f, 5.768806690e-03f, 5.786459231e-03f, 5.804100733e-03f, 5.821731166e-03f, 5.839350500e-03f, 5.856958705e-03f, 5.874555752e-03f, 5.892141611e-03f, 5.909716253e-03f,
+5.927279647e-03f, 5.944831763e-03f, 5.962372573e-03f, 5.979902046e-03f, 5.997420154e-03f, 6.014926865e-03f, 6.032422152e-03f, 6.049905984e-03f, 6.067378331e-03f, 6.084839165e-03f,
+6.102288455e-03f, 6.119726173e-03f, 6.137152289e-03f, 6.154566773e-03f, 6.171969596e-03f, 6.189360729e-03f, 6.206740142e-03f, 6.224107806e-03f, 6.241463692e-03f, 6.258807771e-03f,
+6.276140012e-03f, 6.293460388e-03f, 6.310768868e-03f, 6.328065424e-03f, 6.345350026e-03f, 6.362622645e-03f, 6.379883253e-03f, 6.397131819e-03f, 6.414368315e-03f, 6.431592713e-03f,
+6.448804982e-03f, 6.466005093e-03f, 6.483193019e-03f, 6.500368730e-03f, 6.517532196e-03f, 6.534683389e-03f, 6.551822281e-03f, 6.568948841e-03f, 6.586063043e-03f, 6.603164855e-03f,
+6.620254250e-03f, 6.637331199e-03f, 6.654395674e-03f, 6.671447645e-03f, 6.688487083e-03f, 6.705513961e-03f, 6.722528249e-03f, 6.739529918e-03f, 6.756518941e-03f, 6.773495288e-03f,
+6.790458931e-03f, 6.807409842e-03f, 6.824347991e-03f, 6.841273351e-03f, 6.858185893e-03f, 6.875085588e-03f, 6.891972408e-03f, 6.908846324e-03f, 6.925707309e-03f, 6.942555334e-03f,
+6.959390370e-03f, 6.976212389e-03f, 6.993021364e-03f, 7.009817265e-03f, 7.026600064e-03f, 7.043369733e-03f, 7.060126245e-03f, 7.076869570e-03f, 7.093599681e-03f, 7.110316550e-03f,
+7.127020148e-03f, 7.143710448e-03f, 7.160387421e-03f, 7.177051039e-03f, 7.193701275e-03f, 7.210338100e-03f, 7.226961486e-03f, 7.243571406e-03f, 7.260167832e-03f, 7.276750735e-03f,
+7.293320089e-03f, 7.309875864e-03f, 7.326418034e-03f, 7.342946571e-03f, 7.359461446e-03f, 7.375962632e-03f, 7.392450102e-03f, 7.408923827e-03f, 7.425383781e-03f, 7.441829935e-03f,
+7.458262262e-03f, 7.474680734e-03f, 7.491085324e-03f, 7.507476004e-03f, 7.523852747e-03f, 7.540215525e-03f, 7.556564311e-03f, 7.572899078e-03f, 7.589219797e-03f, 7.605526442e-03f,
+7.621818986e-03f, 7.638097401e-03f, 7.654361659e-03f, 7.670611734e-03f, 7.686847599e-03f, 7.703069225e-03f, 7.719276586e-03f, 7.735469655e-03f, 7.751648405e-03f, 7.767812808e-03f,
+7.783962838e-03f, 7.800098467e-03f, 7.816219669e-03f, 7.832326416e-03f, 7.848418681e-03f, 7.864496438e-03f, 7.880559659e-03f, 7.896608318e-03f, 7.912642388e-03f, 7.928661842e-03f,
+7.944666653e-03f, 7.960656794e-03f, 7.976632239e-03f, 7.992592962e-03f, 8.008538934e-03f, 8.024470130e-03f, 8.040386522e-03f, 8.056288085e-03f, 8.072174792e-03f, 8.088046616e-03f,
+8.103903531e-03f, 8.119745509e-03f, 8.135572525e-03f, 8.151384553e-03f, 8.167181565e-03f, 8.182963535e-03f, 8.198730437e-03f, 8.214482245e-03f, 8.230218933e-03f, 8.245940473e-03f,
+8.261646840e-03f, 8.277338007e-03f, 8.293013949e-03f, 8.308674639e-03f, 8.324320051e-03f, 8.339950159e-03f, 8.355564936e-03f, 8.371164358e-03f, 8.386748396e-03f, 8.402317027e-03f,
+8.417870223e-03f, 8.433407959e-03f, 8.448930209e-03f, 8.464436946e-03f, 8.479928146e-03f, 8.495403782e-03f, 8.510863828e-03f, 8.526308259e-03f, 8.541737048e-03f, 8.557150171e-03f,
+8.572547601e-03f, 8.587929313e-03f, 8.603295281e-03f, 8.618645479e-03f, 8.633979882e-03f, 8.649298465e-03f, 8.664601201e-03f, 8.679888066e-03f, 8.695159033e-03f, 8.710414078e-03f,
+8.725653175e-03f, 8.740876299e-03f, 8.756083424e-03f, 8.771274525e-03f, 8.786449576e-03f, 8.801608553e-03f, 8.816751430e-03f, 8.831878182e-03f, 8.846988783e-03f, 8.862083209e-03f,
+8.877161435e-03f, 8.892223435e-03f, 8.907269185e-03f, 8.922298659e-03f, 8.937311832e-03f, 8.952308679e-03f, 8.967289176e-03f, 8.982253298e-03f, 8.997201019e-03f, 9.012132314e-03f,
+9.027047160e-03f, 9.041945531e-03f, 9.056827402e-03f, 9.071692749e-03f, 9.086541547e-03f, 9.101373771e-03f, 9.116189397e-03f, 9.130988399e-03f, 9.145770754e-03f, 9.160536438e-03f,
+9.175285424e-03f, 9.190017689e-03f, 9.204733209e-03f, 9.219431959e-03f, 9.234113914e-03f, 9.248779051e-03f, 9.263427344e-03f, 9.278058770e-03f, 9.292673304e-03f, 9.307270922e-03f,
+9.321851601e-03f, 9.336415314e-03f, 9.350962040e-03f, 9.365491752e-03f, 9.380004428e-03f, 9.394500043e-03f, 9.408978573e-03f, 9.423439995e-03f, 9.437884283e-03f, 9.452311415e-03f,
+9.466721366e-03f, 9.481114113e-03f, 9.495489631e-03f, 9.509847897e-03f, 9.524188887e-03f, 9.538512577e-03f, 9.552818944e-03f, 9.567107964e-03f, 9.581379613e-03f, 9.595633867e-03f,
+9.609870704e-03f, 9.624090099e-03f, 9.638292029e-03f, 9.652476470e-03f, 9.666643399e-03f, 9.680792792e-03f, 9.694924627e-03f, 9.709038879e-03f, 9.723135526e-03f, 9.737214543e-03f,
+9.751275909e-03f, 9.765319599e-03f, 9.779345590e-03f, 9.793353859e-03f, 9.807344383e-03f, 9.821317139e-03f, 9.835272104e-03f, 9.849209254e-03f, 9.863128567e-03f, 9.877030020e-03f,
+9.890913590e-03f, 9.904779253e-03f, 9.918626987e-03f, 9.932456769e-03f, 9.946268577e-03f, 9.960062386e-03f, 9.973838176e-03f, 9.987595922e-03f, 1.000133560e-02f, 1.001505719e-02f,
+1.002876068e-02f, 1.004244602e-02f, 1.005611321e-02f, 1.006976223e-02f, 1.008339304e-02f, 1.009700562e-02f, 1.011059996e-02f, 1.012417604e-02f, 1.013773382e-02f, 1.015127328e-02f,
+1.016479442e-02f, 1.017829719e-02f, 1.019178158e-02f, 1.020524757e-02f, 1.021869514e-02f, 1.023212426e-02f, 1.024553491e-02f, 1.025892707e-02f, 1.027230072e-02f, 1.028565583e-02f,
+1.029899239e-02f, 1.031231037e-02f, 1.032560974e-02f, 1.033889049e-02f, 1.035215260e-02f, 1.036539605e-02f, 1.037862080e-02f, 1.039182684e-02f, 1.040501416e-02f, 1.041818272e-02f,
+1.043133250e-02f, 1.044446349e-02f, 1.045757566e-02f, 1.047066899e-02f, 1.048374346e-02f, 1.049679905e-02f, 1.050983573e-02f, 1.052285349e-02f, 1.053585230e-02f, 1.054883214e-02f,
+1.056179299e-02f, 1.057473484e-02f, 1.058765765e-02f, 1.060056140e-02f, 1.061344609e-02f, 1.062631168e-02f, 1.063915815e-02f, 1.065198548e-02f, 1.066479365e-02f, 1.067758265e-02f,
+1.069035244e-02f, 1.070310302e-02f, 1.071583435e-02f, 1.072854642e-02f, 1.074123920e-02f, 1.075391268e-02f, 1.076656683e-02f, 1.077920164e-02f, 1.079181708e-02f, 1.080441313e-02f,
+1.081698977e-02f, 1.082954699e-02f, 1.084208475e-02f, 1.085460305e-02f, 1.086710185e-02f, 1.087958115e-02f, 1.089204091e-02f, 1.090448112e-02f, 1.091690176e-02f, 1.092930281e-02f,
+1.094168424e-02f, 1.095404604e-02f, 1.096638819e-02f, 1.097871066e-02f, 1.099101345e-02f, 1.100329651e-02f, 1.101555985e-02f, 1.102780343e-02f, 1.104002724e-02f, 1.105223125e-02f,
+1.106441546e-02f, 1.107657982e-02f, 1.108872434e-02f, 1.110084898e-02f, 1.111295373e-02f, 1.112503857e-02f, 1.113710347e-02f, 1.114914843e-02f, 1.116117341e-02f, 1.117317840e-02f,
+1.118516338e-02f, 1.119712833e-02f, 1.120907323e-02f, 1.122099807e-02f, 1.123290281e-02f, 1.124478745e-02f, 1.125665196e-02f, 1.126849632e-02f, 1.128032052e-02f, 1.129212453e-02f,
+1.130390833e-02f, 1.131567192e-02f, 1.132741526e-02f, 1.133913834e-02f, 1.135084114e-02f, 1.136252364e-02f, 1.137418582e-02f, 1.138582767e-02f, 1.139744915e-02f, 1.140905027e-02f,
+1.142063098e-02f, 1.143219129e-02f, 1.144373116e-02f, 1.145525059e-02f, 1.146674954e-02f, 1.147822801e-02f, 1.148968596e-02f, 1.150112340e-02f, 1.151254029e-02f, 1.152393662e-02f,
+1.153531237e-02f, 1.154666751e-02f, 1.155800205e-02f, 1.156931594e-02f, 1.158060918e-02f, 1.159188175e-02f, 1.160313363e-02f, 1.161436480e-02f, 1.162557524e-02f, 1.163676494e-02f,
+1.164793387e-02f, 1.165908202e-02f, 1.167020938e-02f, 1.168131591e-02f, 1.169240161e-02f, 1.170346646e-02f, 1.171451043e-02f, 1.172553352e-02f, 1.173653570e-02f, 1.174751696e-02f,
+1.175847727e-02f, 1.176941662e-02f, 1.178033499e-02f, 1.179123237e-02f, 1.180210874e-02f, 1.181296408e-02f, 1.182379836e-02f, 1.183461159e-02f, 1.184540372e-02f, 1.185617476e-02f,
+1.186692468e-02f, 1.187765347e-02f, 1.188836110e-02f, 1.189904757e-02f, 1.190971285e-02f, 1.192035692e-02f, 1.193097977e-02f, 1.194158138e-02f, 1.195216174e-02f, 1.196272083e-02f,
+1.197325863e-02f, 1.198377512e-02f, 1.199427028e-02f, 1.200474411e-02f, 1.201519658e-02f, 1.202562768e-02f, 1.203603738e-02f, 1.204642568e-02f, 1.205679256e-02f, 1.206713799e-02f,
+1.207746197e-02f, 1.208776447e-02f, 1.209804549e-02f, 1.210830499e-02f, 1.211854298e-02f, 1.212875942e-02f, 1.213895431e-02f, 1.214912763e-02f, 1.215927935e-02f, 1.216940948e-02f,
+1.217951798e-02f, 1.218960484e-02f, 1.219967005e-02f, 1.220971359e-02f, 1.221973545e-02f, 1.222973560e-02f, 1.223971403e-02f, 1.224967074e-02f, 1.225960569e-02f, 1.226951887e-02f,
+1.227941028e-02f, 1.228927989e-02f, 1.229912768e-02f, 1.230895365e-02f, 1.231875777e-02f, 1.232854003e-02f, 1.233830042e-02f, 1.234803892e-02f, 1.235775551e-02f, 1.236745017e-02f,
+1.237712290e-02f, 1.238677368e-02f, 1.239640248e-02f, 1.240600931e-02f, 1.241559413e-02f, 1.242515694e-02f, 1.243469772e-02f, 1.244421646e-02f, 1.245371313e-02f, 1.246318774e-02f,
+1.247264025e-02f, 1.248207065e-02f, 1.249147894e-02f, 1.250086509e-02f, 1.251022909e-02f, 1.251957092e-02f, 1.252889058e-02f, 1.253818804e-02f, 1.254746329e-02f, 1.255671632e-02f,
+1.256594711e-02f, 1.257515565e-02f, 1.258434191e-02f, 1.259350590e-02f, 1.260264759e-02f, 1.261176696e-02f, 1.262086402e-02f, 1.262993873e-02f, 1.263899108e-02f, 1.264802107e-02f,
+1.265702867e-02f, 1.266601388e-02f, 1.267497668e-02f, 1.268391704e-02f, 1.269283497e-02f, 1.270173045e-02f, 1.271060345e-02f, 1.271945398e-02f, 1.272828201e-02f, 1.273708752e-02f,
+1.274587052e-02f, 1.275463097e-02f, 1.276336888e-02f, 1.277208422e-02f, 1.278077698e-02f, 1.278944715e-02f, 1.279809471e-02f, 1.280671965e-02f, 1.281532195e-02f, 1.282390161e-02f,
+1.283245861e-02f, 1.284099294e-02f, 1.284950458e-02f, 1.285799351e-02f, 1.286645973e-02f, 1.287490323e-02f, 1.288332398e-02f, 1.289172198e-02f, 1.290009722e-02f, 1.290844967e-02f,
+1.291677933e-02f, 1.292508618e-02f, 1.293337021e-02f, 1.294163141e-02f, 1.294986977e-02f, 1.295808527e-02f, 1.296627789e-02f, 1.297444764e-02f, 1.298259448e-02f, 1.299071842e-02f,
+1.299881943e-02f, 1.300689751e-02f, 1.301495264e-02f, 1.302298481e-02f, 1.303099401e-02f, 1.303898023e-02f, 1.304694345e-02f, 1.305488365e-02f, 1.306280084e-02f, 1.307069499e-02f,
+1.307856609e-02f, 1.308641414e-02f, 1.309423911e-02f, 1.310204100e-02f, 1.310981980e-02f, 1.311757548e-02f, 1.312530805e-02f, 1.313301749e-02f, 1.314070378e-02f, 1.314836692e-02f,
+1.315600689e-02f, 1.316362368e-02f, 1.317121728e-02f, 1.317878767e-02f, 1.318633485e-02f, 1.319385881e-02f, 1.320135953e-02f, 1.320883700e-02f, 1.321629120e-02f, 1.322372214e-02f,
+1.323112979e-02f, 1.323851415e-02f, 1.324587519e-02f, 1.325321293e-02f, 1.326052733e-02f, 1.326781839e-02f, 1.327508610e-02f, 1.328233044e-02f, 1.328955141e-02f, 1.329674900e-02f,
+1.330392319e-02f, 1.331107397e-02f, 1.331820133e-02f, 1.332530527e-02f, 1.333238576e-02f, 1.333944281e-02f, 1.334647639e-02f, 1.335348650e-02f, 1.336047312e-02f, 1.336743625e-02f,
+1.337437588e-02f, 1.338129199e-02f, 1.338818457e-02f, 1.339505362e-02f, 1.340189912e-02f, 1.340872107e-02f, 1.341551944e-02f, 1.342229424e-02f, 1.342904545e-02f, 1.343577306e-02f,
+1.344247706e-02f, 1.344915744e-02f, 1.345581420e-02f, 1.346244731e-02f, 1.346905677e-02f, 1.347564258e-02f, 1.348220471e-02f, 1.348874317e-02f, 1.349525793e-02f, 1.350174900e-02f,
+1.350821636e-02f, 1.351465999e-02f, 1.352107990e-02f, 1.352747607e-02f, 1.353384850e-02f, 1.354019716e-02f, 1.354652206e-02f, 1.355282318e-02f, 1.355910052e-02f, 1.356535406e-02f,
+1.357158379e-02f, 1.357778971e-02f, 1.358397181e-02f, 1.359013007e-02f, 1.359626449e-02f, 1.360237506e-02f, 1.360846177e-02f, 1.361452461e-02f, 1.362056357e-02f, 1.362657864e-02f,
+1.363256982e-02f, 1.363853709e-02f, 1.364448044e-02f, 1.365039987e-02f, 1.365629537e-02f, 1.366216693e-02f, 1.366801454e-02f, 1.367383819e-02f, 1.367963787e-02f, 1.368541358e-02f,
+1.369116530e-02f, 1.369689302e-02f, 1.370259675e-02f, 1.370827647e-02f, 1.371393217e-02f, 1.371956384e-02f, 1.372517147e-02f, 1.373075507e-02f, 1.373631461e-02f, 1.374185009e-02f,
+1.374736151e-02f, 1.375284884e-02f, 1.375831210e-02f, 1.376375126e-02f, 1.376916632e-02f, 1.377455727e-02f, 1.377992411e-02f, 1.378526682e-02f, 1.379058541e-02f, 1.379587985e-02f,
+1.380115015e-02f, 1.380639629e-02f, 1.381161826e-02f, 1.381681607e-02f, 1.382198970e-02f, 1.382713915e-02f, 1.383226440e-02f, 1.383736545e-02f, 1.384244230e-02f, 1.384749493e-02f,
+1.385252334e-02f, 1.385752752e-02f, 1.386250746e-02f, 1.386746316e-02f, 1.387239460e-02f, 1.387730179e-02f, 1.388218472e-02f, 1.388704337e-02f, 1.389187774e-02f, 1.389668783e-02f,
+1.390147362e-02f, 1.390623511e-02f, 1.391097230e-02f, 1.391568518e-02f, 1.392037373e-02f, 1.392503796e-02f, 1.392967785e-02f, 1.393429341e-02f, 1.393888461e-02f, 1.394345147e-02f,
+1.394799396e-02f, 1.395251209e-02f, 1.395700585e-02f, 1.396147523e-02f, 1.396592022e-02f, 1.397034082e-02f, 1.397473703e-02f, 1.397910883e-02f, 1.398345622e-02f, 1.398777919e-02f,
+1.399207775e-02f, 1.399635187e-02f, 1.400060157e-02f, 1.400482682e-02f, 1.400902763e-02f, 1.401320398e-02f, 1.401735588e-02f, 1.402148332e-02f, 1.402558628e-02f, 1.402966478e-02f,
+1.403371879e-02f, 1.403774832e-02f, 1.404175335e-02f, 1.404573389e-02f, 1.404968993e-02f, 1.405362146e-02f, 1.405752848e-02f, 1.406141098e-02f, 1.406526896e-02f, 1.406910241e-02f,
+1.407291133e-02f, 1.407669570e-02f, 1.408045554e-02f, 1.408419082e-02f, 1.408790155e-02f, 1.409158772e-02f, 1.409524933e-02f, 1.409888636e-02f, 1.410249883e-02f, 1.410608672e-02f,
+1.410965002e-02f, 1.411318873e-02f, 1.411670286e-02f, 1.412019238e-02f, 1.412365731e-02f, 1.412709762e-02f, 1.413051333e-02f, 1.413390442e-02f, 1.413727089e-02f, 1.414061274e-02f,
+1.414392996e-02f, 1.414722254e-02f, 1.415049049e-02f, 1.415373380e-02f, 1.415695246e-02f, 1.416014648e-02f, 1.416331584e-02f, 1.416646054e-02f, 1.416958058e-02f, 1.417267596e-02f,
+1.417574666e-02f, 1.417879269e-02f, 1.418181405e-02f, 1.418481072e-02f, 1.418778271e-02f, 1.419073002e-02f, 1.419365263e-02f, 1.419655054e-02f, 1.419942376e-02f, 1.420227227e-02f,
+1.420509607e-02f, 1.420789517e-02f, 1.421066955e-02f, 1.421341922e-02f, 1.421614417e-02f, 1.421884440e-02f, 1.422151989e-02f, 1.422417066e-02f, 1.422679670e-02f, 1.422939800e-02f,
+1.423197457e-02f, 1.423452639e-02f, 1.423705347e-02f, 1.423955580e-02f, 1.424203338e-02f, 1.424448620e-02f, 1.424691427e-02f, 1.424931759e-02f, 1.425169614e-02f, 1.425404992e-02f,
+1.425637894e-02f, 1.425868319e-02f, 1.426096267e-02f, 1.426321738e-02f, 1.426544731e-02f, 1.426765246e-02f, 1.426983282e-02f, 1.427198841e-02f, 1.427411921e-02f, 1.427622522e-02f,
+1.427830643e-02f, 1.428036286e-02f, 1.428239449e-02f, 1.428440133e-02f, 1.428638336e-02f, 1.428834060e-02f, 1.429027303e-02f, 1.429218066e-02f, 1.429406348e-02f, 1.429592149e-02f,
+1.429775470e-02f, 1.429956309e-02f, 1.430134667e-02f, 1.430310543e-02f, 1.430483938e-02f, 1.430654851e-02f, 1.430823281e-02f, 1.430989230e-02f, 1.431152697e-02f, 1.431313681e-02f,
+1.431472182e-02f, 1.431628201e-02f, 1.431781737e-02f, 1.431932791e-02f, 1.432081361e-02f, 1.432227448e-02f, 1.432371052e-02f, 1.432512172e-02f, 1.432650809e-02f, 1.432786963e-02f,
+1.432920633e-02f, 1.433051819e-02f, 1.433180522e-02f, 1.433306740e-02f, 1.433430475e-02f, 1.433551725e-02f, 1.433670492e-02f, 1.433786774e-02f, 1.433900573e-02f, 1.434011886e-02f,
+1.434120716e-02f, 1.434227062e-02f, 1.434330923e-02f, 1.434432299e-02f, 1.434531191e-02f, 1.434627599e-02f, 1.434721522e-02f, 1.434812961e-02f, 1.434901915e-02f, 1.434988385e-02f,
+1.435072370e-02f, 1.435153871e-02f, 1.435232887e-02f, 1.435309418e-02f, 1.435383465e-02f, 1.435455028e-02f, 1.435524106e-02f, 1.435590700e-02f, 1.435654809e-02f, 1.435716434e-02f,
+1.435775575e-02f, 1.435832231e-02f, 1.435886403e-02f, 1.435938091e-02f, 1.435987295e-02f, 1.436034015e-02f, 1.436078250e-02f, 1.436120002e-02f, 1.436159270e-02f, 1.436196054e-02f,
+1.436230354e-02f, 1.436262171e-02f, 1.436291504e-02f, 1.436318354e-02f, 1.436342720e-02f, 1.436364603e-02f, 1.436384003e-02f, 1.436400920e-02f, 1.436415354e-02f, 1.436427306e-02f,
+1.436436774e-02f, 1.436443760e-02f, 1.436448264e-02f, 1.436450286e-02f, 1.436449825e-02f, 1.436446882e-02f, 1.436441458e-02f, 1.436433552e-02f, 1.436423164e-02f, 1.436410295e-02f,
+1.436394945e-02f, 1.436377113e-02f, 1.436356801e-02f, 1.436334009e-02f, 1.436308735e-02f, 1.436280982e-02f, 1.436250748e-02f, 1.436218035e-02f, 1.436182842e-02f, 1.436145169e-02f,
+1.436105017e-02f, 1.436062386e-02f, 1.436017276e-02f, 1.435969688e-02f, 1.435919621e-02f, 1.435867076e-02f, 1.435812053e-02f, 1.435754552e-02f, 1.435694574e-02f, 1.435632118e-02f,
+1.435567186e-02f, 1.435499777e-02f, 1.435429892e-02f, 1.435357530e-02f, 1.435282693e-02f, 1.435205379e-02f, 1.435125591e-02f, 1.435043327e-02f, 1.434958589e-02f, 1.434871376e-02f,
+1.434781689e-02f, 1.434689528e-02f, 1.434594894e-02f, 1.434497786e-02f, 1.434398205e-02f, 1.434296152e-02f, 1.434191626e-02f, 1.434084628e-02f, 1.433975159e-02f, 1.433863218e-02f,
+1.433748806e-02f, 1.433631924e-02f, 1.433512571e-02f, 1.433390748e-02f, 1.433266456e-02f, 1.433139694e-02f, 1.433010464e-02f, 1.432878765e-02f, 1.432744598e-02f, 1.432607963e-02f,
+1.432468860e-02f, 1.432327291e-02f, 1.432183255e-02f, 1.432036752e-02f, 1.431887784e-02f, 1.431736351e-02f, 1.431582452e-02f, 1.431426089e-02f, 1.431267261e-02f, 1.431105970e-02f,
+1.430942216e-02f, 1.430775998e-02f, 1.430607318e-02f, 1.430436176e-02f, 1.430262572e-02f, 1.430086507e-02f, 1.429907981e-02f, 1.429726995e-02f, 1.429543549e-02f, 1.429357644e-02f,
+1.429169280e-02f, 1.428978457e-02f, 1.428785176e-02f, 1.428589438e-02f, 1.428391243e-02f, 1.428190591e-02f, 1.427987484e-02f, 1.427781920e-02f, 1.427573902e-02f, 1.427363429e-02f,
+1.427150502e-02f, 1.426935122e-02f, 1.426717288e-02f, 1.426497002e-02f, 1.426274264e-02f, 1.426049075e-02f, 1.425821435e-02f, 1.425591344e-02f, 1.425358804e-02f, 1.425123814e-02f,
+1.424886375e-02f, 1.424646488e-02f, 1.424404154e-02f, 1.424159372e-02f, 1.423912145e-02f, 1.423662471e-02f, 1.423410351e-02f, 1.423155787e-02f, 1.422898779e-02f, 1.422639327e-02f,
+1.422377432e-02f, 1.422113095e-02f, 1.421846315e-02f, 1.421577095e-02f, 1.421305434e-02f, 1.421031333e-02f, 1.420754792e-02f, 1.420475813e-02f, 1.420194396e-02f, 1.419910541e-02f,
+1.419624249e-02f, 1.419335521e-02f, 1.419044357e-02f, 1.418750758e-02f, 1.418454725e-02f, 1.418156258e-02f, 1.417855359e-02f, 1.417552027e-02f, 1.417246263e-02f, 1.416938068e-02f,
+1.416627443e-02f, 1.416314388e-02f, 1.415998904e-02f, 1.415680992e-02f, 1.415360653e-02f, 1.415037886e-02f, 1.414712693e-02f, 1.414385075e-02f, 1.414055032e-02f, 1.413722565e-02f,
+1.413387674e-02f, 1.413050361e-02f, 1.412710625e-02f, 1.412368469e-02f, 1.412023892e-02f, 1.411676896e-02f, 1.411327480e-02f, 1.410975646e-02f, 1.410621395e-02f, 1.410264726e-02f,
+1.409905642e-02f, 1.409544143e-02f, 1.409180229e-02f, 1.408813902e-02f, 1.408445161e-02f, 1.408074008e-02f, 1.407700444e-02f, 1.407324470e-02f, 1.406946086e-02f, 1.406565292e-02f,
+1.406182091e-02f, 1.405796482e-02f, 1.405408466e-02f, 1.405018045e-02f, 1.404625218e-02f, 1.404229988e-02f, 1.403832354e-02f, 1.403432318e-02f, 1.403029880e-02f, 1.402625041e-02f,
+1.402217802e-02f, 1.401808164e-02f, 1.401396128e-02f, 1.400981694e-02f, 1.400564864e-02f, 1.400145638e-02f, 1.399724017e-02f, 1.399300002e-02f, 1.398873594e-02f, 1.398444793e-02f,
+1.398013601e-02f, 1.397580019e-02f, 1.397144047e-02f, 1.396705687e-02f, 1.396264938e-02f, 1.395821803e-02f, 1.395376282e-02f, 1.394928375e-02f, 1.394478085e-02f, 1.394025411e-02f,
+1.393570354e-02f, 1.393112917e-02f, 1.392653098e-02f, 1.392190900e-02f, 1.391726324e-02f, 1.391259370e-02f, 1.390790039e-02f, 1.390318332e-02f, 1.389844251e-02f, 1.389367795e-02f,
+1.388888967e-02f, 1.388407766e-02f, 1.387924195e-02f, 1.387438254e-02f, 1.386949943e-02f, 1.386459265e-02f, 1.385966219e-02f, 1.385470807e-02f, 1.384973031e-02f, 1.384472890e-02f,
+1.383970386e-02f, 1.383465520e-02f, 1.382958292e-02f, 1.382448705e-02f, 1.381936759e-02f, 1.381422454e-02f, 1.380905793e-02f, 1.380386776e-02f, 1.379865404e-02f, 1.379341677e-02f,
+1.378815598e-02f, 1.378287167e-02f, 1.377756386e-02f, 1.377223254e-02f, 1.376687774e-02f, 1.376149947e-02f, 1.375609773e-02f, 1.375067253e-02f, 1.374522389e-02f, 1.373975182e-02f,
+1.373425632e-02f, 1.372873741e-02f, 1.372319511e-02f, 1.371762941e-02f, 1.371204033e-02f, 1.370642789e-02f, 1.370079209e-02f, 1.369513294e-02f, 1.368945046e-02f, 1.368374466e-02f,
+1.367801555e-02f, 1.367226313e-02f, 1.366648742e-02f, 1.366068844e-02f, 1.365486619e-02f, 1.364902069e-02f, 1.364315194e-02f, 1.363725995e-02f, 1.363134475e-02f, 1.362540634e-02f,
+1.361944473e-02f, 1.361345993e-02f, 1.360745196e-02f, 1.360142083e-02f, 1.359536655e-02f, 1.358928912e-02f, 1.358318857e-02f, 1.357706491e-02f, 1.357091814e-02f, 1.356474828e-02f,
+1.355855534e-02f, 1.355233933e-02f, 1.354610027e-02f, 1.353983816e-02f, 1.353355302e-02f, 1.352724487e-02f, 1.352091371e-02f, 1.351455955e-02f, 1.350818241e-02f, 1.350178230e-02f,
+1.349535923e-02f, 1.348891322e-02f, 1.348244428e-02f, 1.347595241e-02f, 1.346943764e-02f, 1.346289998e-02f, 1.345633943e-02f, 1.344975601e-02f, 1.344314974e-02f, 1.343652062e-02f,
+1.342986867e-02f, 1.342319390e-02f, 1.341649633e-02f, 1.340977596e-02f, 1.340303281e-02f, 1.339626690e-02f, 1.338947823e-02f, 1.338266682e-02f, 1.337583269e-02f, 1.336897584e-02f,
+1.336209629e-02f, 1.335519405e-02f, 1.334826913e-02f, 1.334132155e-02f, 1.333435133e-02f, 1.332735847e-02f, 1.332034299e-02f, 1.331330490e-02f, 1.330624421e-02f, 1.329916095e-02f,
+1.329205511e-02f, 1.328492673e-02f, 1.327777580e-02f, 1.327060234e-02f, 1.326340637e-02f, 1.325618791e-02f, 1.324894695e-02f, 1.324168353e-02f, 1.323439764e-02f, 1.322708932e-02f,
+1.321975856e-02f, 1.321240539e-02f, 1.320502981e-02f, 1.319763185e-02f, 1.319021151e-02f, 1.318276881e-02f, 1.317530377e-02f, 1.316781640e-02f, 1.316030670e-02f, 1.315277471e-02f,
+1.314522042e-02f, 1.313764387e-02f, 1.313004505e-02f, 1.312242398e-02f, 1.311478069e-02f, 1.310711517e-02f, 1.309942746e-02f, 1.309171756e-02f, 1.308398548e-02f, 1.307623125e-02f,
+1.306845487e-02f, 1.306065637e-02f, 1.305283575e-02f, 1.304499303e-02f, 1.303712822e-02f, 1.302924135e-02f, 1.302133242e-02f, 1.301340145e-02f, 1.300544846e-02f, 1.299747346e-02f,
+1.298947646e-02f, 1.298145748e-02f, 1.297341654e-02f, 1.296535365e-02f, 1.295726882e-02f, 1.294916208e-02f, 1.294103343e-02f, 1.293288289e-02f, 1.292471048e-02f, 1.291651621e-02f,
+1.290830010e-02f, 1.290006217e-02f, 1.289180242e-02f, 1.288352088e-02f, 1.287521755e-02f, 1.286689246e-02f, 1.285854562e-02f, 1.285017705e-02f, 1.284178677e-02f, 1.283337478e-02f,
+1.282494110e-02f, 1.281648575e-02f, 1.280800875e-02f, 1.279951011e-02f, 1.279098985e-02f, 1.278244798e-02f, 1.277388452e-02f, 1.276529949e-02f, 1.275669290e-02f, 1.274806477e-02f,
+1.273941511e-02f, 1.273074394e-02f, 1.272205127e-02f, 1.271333713e-02f, 1.270460153e-02f, 1.269584448e-02f, 1.268706601e-02f, 1.267826612e-02f, 1.266944484e-02f, 1.266060217e-02f,
+1.265173815e-02f, 1.264285278e-02f, 1.263394608e-02f, 1.262501806e-02f, 1.261606876e-02f, 1.260709817e-02f, 1.259810632e-02f, 1.258909322e-02f, 1.258005889e-02f, 1.257100335e-02f,
+1.256192662e-02f, 1.255282870e-02f, 1.254370963e-02f, 1.253456941e-02f, 1.252540806e-02f, 1.251622560e-02f, 1.250702205e-02f, 1.249779743e-02f, 1.248855174e-02f, 1.247928501e-02f,
+1.246999726e-02f, 1.246068850e-02f, 1.245135874e-02f, 1.244200802e-02f, 1.243263634e-02f, 1.242324372e-02f, 1.241383018e-02f, 1.240439574e-02f, 1.239494041e-02f, 1.238546422e-02f,
+1.237596717e-02f, 1.236644929e-02f, 1.235691059e-02f, 1.234735110e-02f, 1.233777083e-02f, 1.232816979e-02f, 1.231854801e-02f, 1.230890551e-02f, 1.229924229e-02f, 1.228955839e-02f,
+1.227985381e-02f, 1.227012858e-02f, 1.226038271e-02f, 1.225061622e-02f, 1.224082913e-02f, 1.223102145e-02f, 1.222119322e-02f, 1.221134443e-02f, 1.220147512e-02f, 1.219158530e-02f,
+1.218167498e-02f, 1.217174420e-02f, 1.216179295e-02f, 1.215182127e-02f, 1.214182918e-02f, 1.213181668e-02f, 1.212178380e-02f, 1.211173056e-02f, 1.210165697e-02f, 1.209156306e-02f,
+1.208144884e-02f, 1.207131433e-02f, 1.206115956e-02f, 1.205098453e-02f, 1.204078927e-02f, 1.203057379e-02f, 1.202033812e-02f, 1.201008228e-02f, 1.199980627e-02f, 1.198951013e-02f,
+1.197919387e-02f, 1.196885751e-02f, 1.195850107e-02f, 1.194812457e-02f, 1.193772802e-02f, 1.192731145e-02f, 1.191687488e-02f, 1.190641832e-02f, 1.189594179e-02f, 1.188544532e-02f,
+1.187492892e-02f, 1.186439261e-02f, 1.185383641e-02f, 1.184326034e-02f, 1.183266442e-02f, 1.182204867e-02f, 1.181141311e-02f, 1.180075775e-02f, 1.179008263e-02f, 1.177938775e-02f,
+1.176867314e-02f, 1.175793881e-02f, 1.174718479e-02f, 1.173641110e-02f, 1.172561775e-02f, 1.171480477e-02f, 1.170397218e-02f, 1.169311998e-02f, 1.168224822e-02f, 1.167135690e-02f,
+1.166044604e-02f, 1.164951567e-02f, 1.163856580e-02f, 1.162759646e-02f, 1.161660766e-02f, 1.160559943e-02f, 1.159457178e-02f, 1.158352474e-02f, 1.157245833e-02f, 1.156137256e-02f,
+1.155026745e-02f, 1.153914303e-02f, 1.152799932e-02f, 1.151683634e-02f, 1.150565410e-02f, 1.149445263e-02f, 1.148323195e-02f, 1.147199208e-02f, 1.146073304e-02f, 1.144945485e-02f,
+1.143815753e-02f, 1.142684110e-02f, 1.141550558e-02f, 1.140415099e-02f, 1.139277736e-02f, 1.138138470e-02f, 1.136997304e-02f, 1.135854239e-02f, 1.134709278e-02f, 1.133562423e-02f,
+1.132413675e-02f, 1.131263037e-02f, 1.130110511e-02f, 1.128956100e-02f, 1.127799805e-02f, 1.126641627e-02f, 1.125481571e-02f, 1.124319637e-02f, 1.123155827e-02f, 1.121990145e-02f,
+1.120822591e-02f, 1.119653168e-02f, 1.118481878e-02f, 1.117308724e-02f, 1.116133707e-02f, 1.114956830e-02f, 1.113778094e-02f, 1.112597502e-02f, 1.111415057e-02f, 1.110230759e-02f,
+1.109044612e-02f, 1.107856617e-02f, 1.106666776e-02f, 1.105475093e-02f, 1.104281568e-02f, 1.103086204e-02f, 1.101889004e-02f, 1.100689969e-02f, 1.099489102e-02f, 1.098286404e-02f,
+1.097081879e-02f, 1.095875528e-02f, 1.094667353e-02f, 1.093457356e-02f, 1.092245541e-02f, 1.091031908e-02f, 1.089816460e-02f, 1.088599200e-02f, 1.087380130e-02f, 1.086159251e-02f,
+1.084936566e-02f, 1.083712077e-02f, 1.082485787e-02f, 1.081257697e-02f, 1.080027810e-02f, 1.078796129e-02f, 1.077562654e-02f, 1.076327390e-02f, 1.075090337e-02f, 1.073851498e-02f,
+1.072610875e-02f, 1.071368471e-02f, 1.070124288e-02f, 1.068878327e-02f, 1.067630592e-02f, 1.066381085e-02f, 1.065129807e-02f, 1.063876761e-02f, 1.062621950e-02f, 1.061365375e-02f,
+1.060107039e-02f, 1.058846945e-02f, 1.057585093e-02f, 1.056321488e-02f, 1.055056130e-02f, 1.053789023e-02f, 1.052520168e-02f, 1.051249568e-02f, 1.049977225e-02f, 1.048703142e-02f,
+1.047427321e-02f, 1.046149763e-02f, 1.044870472e-02f, 1.043589450e-02f, 1.042306698e-02f, 1.041022220e-02f, 1.039736018e-02f, 1.038448093e-02f, 1.037158449e-02f, 1.035867087e-02f,
+1.034574011e-02f, 1.033279221e-02f, 1.031982721e-02f, 1.030684513e-02f, 1.029384600e-02f, 1.028082983e-02f, 1.026779665e-02f, 1.025474648e-02f, 1.024167935e-02f, 1.022859528e-02f,
+1.021549429e-02f, 1.020237641e-02f, 1.018924166e-02f, 1.017609007e-02f, 1.016292165e-02f, 1.014973644e-02f, 1.013653445e-02f, 1.012331571e-02f, 1.011008025e-02f, 1.009682808e-02f,
+1.008355924e-02f, 1.007027374e-02f, 1.005697160e-02f, 1.004365287e-02f, 1.003031754e-02f, 1.001696566e-02f, 1.000359725e-02f, 9.990212318e-03f, 9.976810903e-03f, 9.963393026e-03f,
+9.949958709e-03f, 9.936507978e-03f, 9.923040857e-03f, 9.909557369e-03f, 9.896057539e-03f, 9.882541391e-03f, 9.869008950e-03f, 9.855460240e-03f, 9.841895285e-03f, 9.828314109e-03f,
+9.814716738e-03f, 9.801103195e-03f, 9.787473504e-03f, 9.773827691e-03f, 9.760165780e-03f, 9.746487795e-03f, 9.732793761e-03f, 9.719083702e-03f, 9.705357643e-03f, 9.691615609e-03f,
+9.677857625e-03f, 9.664083714e-03f, 9.650293903e-03f, 9.636488214e-03f, 9.622666674e-03f, 9.608829308e-03f, 9.594976138e-03f, 9.581107192e-03f, 9.567222493e-03f, 9.553322067e-03f,
+9.539405938e-03f, 9.525474131e-03f, 9.511526672e-03f, 9.497563585e-03f, 9.483584895e-03f, 9.469590628e-03f, 9.455580808e-03f, 9.441555461e-03f, 9.427514611e-03f, 9.413458284e-03f,
+9.399386505e-03f, 9.385299299e-03f, 9.371196692e-03f, 9.357078708e-03f, 9.342945373e-03f, 9.328796712e-03f, 9.314632751e-03f, 9.300453515e-03f, 9.286259029e-03f, 9.272049319e-03f,
+9.257824410e-03f, 9.243584327e-03f, 9.229329096e-03f, 9.215058743e-03f, 9.200773293e-03f, 9.186472772e-03f, 9.172157204e-03f, 9.157826617e-03f, 9.143481034e-03f, 9.129120483e-03f,
+9.114744988e-03f, 9.100354576e-03f, 9.085949272e-03f, 9.071529102e-03f, 9.057094091e-03f, 9.042644266e-03f, 9.028179652e-03f, 9.013700274e-03f, 8.999206160e-03f, 8.984697335e-03f,
+8.970173824e-03f, 8.955635654e-03f, 8.941082851e-03f, 8.926515440e-03f, 8.911933447e-03f, 8.897336900e-03f, 8.882725823e-03f, 8.868100242e-03f, 8.853460185e-03f, 8.838805676e-03f,
+8.824136743e-03f, 8.809453411e-03f, 8.794755706e-03f, 8.780043655e-03f, 8.765317284e-03f, 8.750576619e-03f, 8.735821687e-03f, 8.721052513e-03f, 8.706269124e-03f, 8.691471547e-03f,
+8.676659808e-03f, 8.661833933e-03f, 8.646993949e-03f, 8.632139882e-03f, 8.617271758e-03f, 8.602389605e-03f, 8.587493448e-03f, 8.572583314e-03f, 8.557659230e-03f, 8.542721223e-03f,
+8.527769318e-03f, 8.512803542e-03f, 8.497823923e-03f, 8.482830487e-03f, 8.467823260e-03f, 8.452802270e-03f, 8.437767542e-03f, 8.422719104e-03f, 8.407656983e-03f, 8.392581205e-03f,
+8.377491798e-03f, 8.362388787e-03f, 8.347272200e-03f, 8.332142064e-03f, 8.316998406e-03f, 8.301841252e-03f, 8.286670630e-03f, 8.271486567e-03f, 8.256289089e-03f, 8.241078224e-03f,
+8.225853998e-03f, 8.210616439e-03f, 8.195365574e-03f, 8.180101430e-03f, 8.164824034e-03f, 8.149533413e-03f, 8.134229595e-03f, 8.118912606e-03f, 8.103582474e-03f, 8.088239226e-03f,
+8.072882889e-03f, 8.057513491e-03f, 8.042131058e-03f, 8.026735619e-03f, 8.011327201e-03f, 7.995905830e-03f, 7.980471535e-03f, 7.965024342e-03f, 7.949564279e-03f, 7.934091374e-03f,
+7.918605654e-03f, 7.903107147e-03f, 7.887595879e-03f, 7.872071879e-03f, 7.856535174e-03f, 7.840985792e-03f, 7.825423760e-03f, 7.809849106e-03f, 7.794261858e-03f, 7.778662042e-03f,
+7.763049688e-03f, 7.747424821e-03f, 7.731787472e-03f, 7.716137666e-03f, 7.700475431e-03f, 7.684800797e-03f, 7.669113789e-03f, 7.653414437e-03f, 7.637702767e-03f, 7.621978808e-03f,
+7.606242588e-03f, 7.590494134e-03f, 7.574733475e-03f, 7.558960638e-03f, 7.543175651e-03f, 7.527378543e-03f, 7.511569341e-03f, 7.495748073e-03f, 7.479914767e-03f, 7.464069451e-03f,
+7.448212154e-03f, 7.432342904e-03f, 7.416461728e-03f, 7.400568654e-03f, 7.384663712e-03f, 7.368746928e-03f, 7.352818331e-03f, 7.336877950e-03f, 7.320925812e-03f, 7.304961946e-03f,
+7.288986380e-03f, 7.272999143e-03f, 7.257000262e-03f, 7.240989766e-03f, 7.224967683e-03f, 7.208934041e-03f, 7.192888870e-03f, 7.176832196e-03f, 7.160764050e-03f, 7.144684458e-03f,
+7.128593450e-03f, 7.112491054e-03f, 7.096377299e-03f, 7.080252212e-03f, 7.064115823e-03f, 7.047968160e-03f, 7.031809251e-03f, 7.015639126e-03f, 6.999457812e-03f, 6.983265338e-03f,
+6.967061733e-03f, 6.950847026e-03f, 6.934621245e-03f, 6.918384418e-03f, 6.902136575e-03f, 6.885877744e-03f, 6.869607955e-03f, 6.853327234e-03f, 6.837035612e-03f, 6.820733118e-03f,
+6.804419779e-03f, 6.788095625e-03f, 6.771760684e-03f, 6.755414986e-03f, 6.739058559e-03f, 6.722691432e-03f, 6.706313634e-03f, 6.689925194e-03f, 6.673526141e-03f, 6.657116504e-03f,
+6.640696311e-03f, 6.624265592e-03f, 6.607824376e-03f, 6.591372691e-03f, 6.574910567e-03f, 6.558438033e-03f, 6.541955118e-03f, 6.525461850e-03f, 6.508958260e-03f, 6.492444375e-03f,
+6.475920226e-03f, 6.459385840e-03f, 6.442841249e-03f, 6.426286480e-03f, 6.409721562e-03f, 6.393146526e-03f, 6.376561400e-03f, 6.359966213e-03f, 6.343360995e-03f, 6.326745774e-03f,
+6.310120581e-03f, 6.293485445e-03f, 6.276840394e-03f, 6.260185459e-03f, 6.243520667e-03f, 6.226846050e-03f, 6.210161636e-03f, 6.193467454e-03f, 6.176763534e-03f, 6.160049906e-03f,
+6.143326598e-03f, 6.126593641e-03f, 6.109851063e-03f, 6.093098895e-03f, 6.076337165e-03f, 6.059565903e-03f, 6.042785139e-03f, 6.025994903e-03f, 6.009195223e-03f, 5.992386129e-03f,
+5.975567651e-03f, 5.958739818e-03f, 5.941902661e-03f, 5.925056209e-03f, 5.908200490e-03f, 5.891335536e-03f, 5.874461375e-03f, 5.857578038e-03f, 5.840685554e-03f, 5.823783952e-03f,
+5.806873263e-03f, 5.789953516e-03f, 5.773024741e-03f, 5.756086967e-03f, 5.739140225e-03f, 5.722184545e-03f, 5.705219955e-03f, 5.688246486e-03f, 5.671264168e-03f, 5.654273030e-03f,
+5.637273103e-03f, 5.620264416e-03f, 5.603246999e-03f, 5.586220882e-03f, 5.569186095e-03f, 5.552142668e-03f, 5.535090631e-03f, 5.518030013e-03f, 5.500960845e-03f, 5.483883157e-03f,
+5.466796978e-03f, 5.449702339e-03f, 5.432599270e-03f, 5.415487801e-03f, 5.398367961e-03f, 5.381239781e-03f, 5.364103291e-03f, 5.346958521e-03f, 5.329805501e-03f, 5.312644261e-03f,
+5.295474831e-03f, 5.278297242e-03f, 5.261111523e-03f, 5.243917705e-03f, 5.226715818e-03f, 5.209505891e-03f, 5.192287956e-03f, 5.175062042e-03f, 5.157828180e-03f, 5.140586400e-03f,
+5.123336732e-03f, 5.106079206e-03f, 5.088813853e-03f, 5.071540702e-03f, 5.054259785e-03f, 5.036971131e-03f, 5.019674771e-03f, 5.002370735e-03f, 4.985059053e-03f, 4.967739756e-03f,
+4.950412874e-03f, 4.933078438e-03f, 4.915736477e-03f, 4.898387023e-03f, 4.881030105e-03f, 4.863665754e-03f, 4.846294001e-03f, 4.828914875e-03f, 4.811528408e-03f, 4.794134630e-03f,
+4.776733571e-03f, 4.759325261e-03f, 4.741909732e-03f, 4.724487013e-03f, 4.707057136e-03f, 4.689620130e-03f, 4.672176027e-03f, 4.654724856e-03f, 4.637266648e-03f, 4.619801435e-03f,
+4.602329246e-03f, 4.584850112e-03f, 4.567364063e-03f, 4.549871131e-03f, 4.532371346e-03f, 4.514864738e-03f, 4.497351338e-03f, 4.479831177e-03f, 4.462304286e-03f, 4.444770694e-03f,
+4.427230433e-03f, 4.409683533e-03f, 4.392130026e-03f, 4.374569941e-03f, 4.357003310e-03f, 4.339430163e-03f, 4.321850531e-03f, 4.304264445e-03f, 4.286671935e-03f, 4.269073032e-03f,
+4.251467767e-03f, 4.233856171e-03f, 4.216238274e-03f, 4.198614108e-03f, 4.180983702e-03f, 4.163347089e-03f, 4.145704298e-03f, 4.128055361e-03f, 4.110400308e-03f, 4.092739171e-03f,
+4.075071979e-03f, 4.057398765e-03f, 4.039719558e-03f, 4.022034390e-03f, 4.004343292e-03f, 3.986646294e-03f, 3.968943428e-03f, 3.951234724e-03f, 3.933520213e-03f, 3.915799926e-03f,
+3.898073894e-03f, 3.880342149e-03f, 3.862604720e-03f, 3.844861639e-03f, 3.827112938e-03f, 3.809358646e-03f, 3.791598795e-03f, 3.773833416e-03f, 3.756062540e-03f, 3.738286198e-03f,
+3.720504421e-03f, 3.702717240e-03f, 3.684924686e-03f, 3.667126789e-03f, 3.649323582e-03f, 3.631515095e-03f, 3.613701360e-03f, 3.595882406e-03f, 3.578058266e-03f, 3.560228971e-03f,
+3.542394550e-03f, 3.524555037e-03f, 3.506710461e-03f, 3.488860854e-03f, 3.471006247e-03f, 3.453146671e-03f, 3.435282158e-03f, 3.417412737e-03f, 3.399538442e-03f, 3.381659302e-03f,
+3.363775348e-03f, 3.345886613e-03f, 3.327993127e-03f, 3.310094921e-03f, 3.292192027e-03f, 3.274284475e-03f, 3.256372298e-03f, 3.238455525e-03f, 3.220534189e-03f, 3.202608320e-03f,
+3.184677951e-03f, 3.166743111e-03f, 3.148803832e-03f, 3.130860146e-03f, 3.112912084e-03f, 3.094959676e-03f, 3.077002955e-03f, 3.059041952e-03f, 3.041076697e-03f, 3.023107222e-03f,
+3.005133558e-03f, 2.987155737e-03f, 2.969173790e-03f, 2.951187748e-03f, 2.933197643e-03f, 2.915203505e-03f, 2.897205367e-03f, 2.879203259e-03f, 2.861197213e-03f, 2.843187260e-03f,
+2.825173431e-03f, 2.807155758e-03f, 2.789134272e-03f, 2.771109004e-03f, 2.753079987e-03f, 2.735047250e-03f, 2.717010826e-03f, 2.698970746e-03f, 2.680927041e-03f, 2.662879742e-03f,
+2.644828882e-03f, 2.626774491e-03f, 2.608716601e-03f, 2.590655243e-03f, 2.572590448e-03f, 2.554522249e-03f, 2.536450675e-03f, 2.518375760e-03f, 2.500297533e-03f, 2.482216028e-03f,
+2.464131274e-03f, 2.446043304e-03f, 2.427952148e-03f, 2.409857839e-03f, 2.391760407e-03f, 2.373659885e-03f, 2.355556303e-03f, 2.337449694e-03f, 2.319340087e-03f, 2.301227516e-03f,
+2.283112011e-03f, 2.264993604e-03f, 2.246872326e-03f, 2.228748209e-03f, 2.210621285e-03f, 2.192491584e-03f, 2.174359138e-03f, 2.156223979e-03f, 2.138086138e-03f, 2.119945646e-03f,
+2.101802536e-03f, 2.083656838e-03f, 2.065508585e-03f, 2.047357807e-03f, 2.029204536e-03f, 2.011048803e-03f, 1.992890641e-03f, 1.974730080e-03f, 1.956567153e-03f, 1.938401890e-03f,
+1.920234323e-03f, 1.902064484e-03f, 1.883892403e-03f, 1.865718114e-03f, 1.847541646e-03f, 1.829363033e-03f, 1.811182304e-03f, 1.792999492e-03f, 1.774814629e-03f, 1.756627745e-03f,
+1.738438873e-03f, 1.720248043e-03f, 1.702055288e-03f, 1.683860638e-03f, 1.665664126e-03f, 1.647465784e-03f, 1.629265641e-03f, 1.611063731e-03f, 1.592860084e-03f, 1.574654732e-03f,
+1.556447707e-03f, 1.538239040e-03f, 1.520028763e-03f, 1.501816908e-03f, 1.483603505e-03f, 1.465388586e-03f, 1.447172184e-03f, 1.428954329e-03f, 1.410735053e-03f, 1.392514387e-03f,
+1.374292364e-03f, 1.356069015e-03f, 1.337844370e-03f, 1.319618463e-03f, 1.301391324e-03f, 1.283162984e-03f, 1.264933477e-03f, 1.246702832e-03f, 1.228471082e-03f, 1.210238258e-03f,
+1.192004391e-03f, 1.173769514e-03f, 1.155533658e-03f, 1.137296854e-03f, 1.119059134e-03f, 1.100820529e-03f, 1.082581071e-03f, 1.064340792e-03f, 1.046099723e-03f, 1.027857896e-03f,
+1.009615341e-03f, 9.913720919e-04f, 9.731281788e-04f, 9.548836335e-04f, 9.366384876e-04f, 9.183927726e-04f, 9.001465201e-04f, 8.818997617e-04f, 8.636525289e-04f, 8.454048532e-04f,
+8.271567661e-04f, 8.089082993e-04f, 7.906594842e-04f, 7.724103525e-04f, 7.541609355e-04f, 7.359112650e-04f, 7.176613723e-04f, 6.994112891e-04f, 6.811610468e-04f, 6.629106771e-04f,
+6.446602113e-04f, 6.264096812e-04f, 6.081591181e-04f, 5.899085537e-04f, 5.716580193e-04f, 5.534075467e-04f, 5.351571672e-04f, 5.169069123e-04f, 4.986568137e-04f, 4.804069029e-04f,
+4.621572112e-04f, 4.439077703e-04f, 4.256586116e-04f, 4.074097667e-04f, 3.891612670e-04f, 3.709131441e-04f, 3.526654294e-04f, 3.344181544e-04f, 3.161713507e-04f, 2.979250497e-04f,
+2.796792829e-04f, 2.614340818e-04f, 2.431894778e-04f, 2.249455025e-04f, 2.067021874e-04f, 1.884595638e-04f, 1.702176633e-04f, 1.519765173e-04f, 1.337361573e-04f, 1.154966148e-04f,
+9.725792114e-05f, 7.902010787e-05f, 6.078320641e-05f, 4.254724821e-05f, 2.431226472e-05f, 6.078287362e-06f, -1.215465242e-05f, -3.038652318e-05f, -4.861729351e-05f, -6.684693198e-05f,
+-8.507540716e-05f, -1.033026876e-04f, -1.215287420e-04f, -1.397535388e-04f, -1.579770467e-04f, -1.761992343e-04f, -1.944200702e-04f, -2.126395229e-04f, -2.308575611e-04f, -2.490741534e-04f,
+-2.672892684e-04f, -2.855028748e-04f, -3.037149411e-04f, -3.219254360e-04f, -3.401343282e-04f, -3.583415863e-04f, -3.765471789e-04f, -3.947510746e-04f, -4.129532423e-04f, -4.311536504e-04f,
+-4.493522676e-04f, -4.675490627e-04f, -4.857440043e-04f, -5.039370611e-04f, -5.221282017e-04f, -5.403173950e-04f, -5.585046094e-04f, -5.766898139e-04f, -5.948729770e-04f, -6.130540674e-04f,
+-6.312330540e-04f, -6.494099053e-04f, -6.675845902e-04f, -6.857570774e-04f, -7.039273356e-04f, -7.220953335e-04f, -7.402610400e-04f, -7.584244237e-04f, -7.765854534e-04f, -7.947440979e-04f,
+-8.129003260e-04f, -8.310541064e-04f, -8.492054080e-04f, -8.673541995e-04f, -8.855004496e-04f, -9.036441273e-04f, -9.217852014e-04f, -9.399236405e-04f, -9.580594137e-04f, -9.761924896e-04f,
+-9.943228372e-04f, -1.012450425e-03f, -1.030575223e-03f, -1.048697198e-03f, -1.066816321e-03f, -1.084932559e-03f, -1.103045882e-03f, -1.121156259e-03f, -1.139263659e-03f, -1.157368050e-03f,
+-1.175469401e-03f, -1.193567682e-03f, -1.211662860e-03f, -1.229754906e-03f, -1.247843788e-03f, -1.265929475e-03f, -1.284011936e-03f, -1.302091139e-03f, -1.320167055e-03f, -1.338239651e-03f,
+-1.356308897e-03f, -1.374374762e-03f, -1.392437214e-03f, -1.410496223e-03f, -1.428551758e-03f, -1.446603788e-03f, -1.464652282e-03f, -1.482697208e-03f, -1.500738536e-03f, -1.518776235e-03f,
+-1.536810274e-03f, -1.554840622e-03f, -1.572867249e-03f, -1.590890122e-03f, -1.608909211e-03f, -1.626924486e-03f, -1.644935916e-03f, -1.662943469e-03f, -1.680947114e-03f, -1.698946822e-03f,
+-1.716942560e-03f, -1.734934298e-03f, -1.752922006e-03f, -1.770905652e-03f, -1.788885206e-03f, -1.806860636e-03f, -1.824831912e-03f, -1.842799004e-03f, -1.860761879e-03f, -1.878720509e-03f,
+-1.896674861e-03f, -1.914624905e-03f, -1.932570611e-03f, -1.950511947e-03f, -1.968448882e-03f, -1.986381387e-03f, -2.004309430e-03f, -2.022232981e-03f, -2.040152009e-03f, -2.058066483e-03f,
+-2.075976372e-03f, -2.093881647e-03f, -2.111782275e-03f, -2.129678227e-03f, -2.147569472e-03f, -2.165455980e-03f, -2.183337719e-03f, -2.201214659e-03f, -2.219086770e-03f, -2.236954020e-03f,
+-2.254816380e-03f, -2.272673818e-03f, -2.290526305e-03f, -2.308373809e-03f, -2.326216301e-03f, -2.344053748e-03f, -2.361886122e-03f, -2.379713392e-03f, -2.397535526e-03f, -2.415352495e-03f,
+-2.433164268e-03f, -2.450970814e-03f, -2.468772104e-03f, -2.486568106e-03f, -2.504358791e-03f, -2.522144127e-03f, -2.539924085e-03f, -2.557698634e-03f, -2.575467743e-03f, -2.593231383e-03f,
+-2.610989522e-03f, -2.628742131e-03f, -2.646489179e-03f, -2.664230636e-03f, -2.681966472e-03f, -2.699696656e-03f, -2.717421157e-03f, -2.735139946e-03f, -2.752852993e-03f, -2.770560266e-03f,
+-2.788261737e-03f, -2.805957374e-03f, -2.823647147e-03f, -2.841331027e-03f, -2.859008982e-03f, -2.876680983e-03f, -2.894347000e-03f, -2.912007002e-03f, -2.929660959e-03f, -2.947308842e-03f,
+-2.964950619e-03f, -2.982586261e-03f, -3.000215738e-03f, -3.017839019e-03f, -3.035456075e-03f, -3.053066876e-03f, -3.070671390e-03f, -3.088269590e-03f, -3.105861443e-03f, -3.123446921e-03f,
+-3.141025993e-03f, -3.158598629e-03f, -3.176164800e-03f, -3.193724475e-03f, -3.211277624e-03f, -3.228824218e-03f, -3.246364227e-03f, -3.263897620e-03f, -3.281424367e-03f, -3.298944440e-03f,
+-3.316457807e-03f, -3.333964440e-03f, -3.351464307e-03f, -3.368957380e-03f, -3.386443629e-03f, -3.403923023e-03f, -3.421395533e-03f, -3.438861130e-03f, -3.456319782e-03f, -3.473771462e-03f,
+-3.491216138e-03f, -3.508653781e-03f, -3.526084362e-03f, -3.543507851e-03f, -3.560924217e-03f, -3.578333432e-03f, -3.595735466e-03f, -3.613130289e-03f, -3.630517871e-03f, -3.647898183e-03f,
+-3.665271195e-03f, -3.682636878e-03f, -3.699995202e-03f, -3.717346137e-03f, -3.734689655e-03f, -3.752025724e-03f, -3.769354317e-03f, -3.786675403e-03f, -3.803988953e-03f, -3.821294937e-03f,
+-3.838593327e-03f, -3.855884092e-03f, -3.873167203e-03f, -3.890442631e-03f, -3.907710346e-03f, -3.924970319e-03f, -3.942222520e-03f, -3.959466921e-03f, -3.976703491e-03f, -3.993932203e-03f,
+-4.011153025e-03f, -4.028365929e-03f, -4.045570886e-03f, -4.062767866e-03f, -4.079956841e-03f, -4.097137780e-03f, -4.114310656e-03f, -4.131475437e-03f, -4.148632096e-03f, -4.165780603e-03f,
+-4.182920930e-03f, -4.200053046e-03f, -4.217176922e-03f, -4.234292531e-03f, -4.251399842e-03f, -4.268498826e-03f, -4.285589455e-03f, -4.302671700e-03f, -4.319745530e-03f, -4.336810918e-03f,
+-4.353867835e-03f, -4.370916251e-03f, -4.387956137e-03f, -4.404987464e-03f, -4.422010205e-03f, -4.439024329e-03f, -4.456029807e-03f, -4.473026612e-03f, -4.490014714e-03f, -4.506994083e-03f,
+-4.523964692e-03f, -4.540926512e-03f, -4.557879513e-03f, -4.574823668e-03f, -4.591758946e-03f, -4.608685321e-03f, -4.625602761e-03f, -4.642511240e-03f, -4.659410728e-03f, -4.676301197e-03f,
+-4.693182618e-03f, -4.710054963e-03f, -4.726918202e-03f, -4.743772307e-03f, -4.760617249e-03f, -4.777453001e-03f, -4.794279533e-03f, -4.811096817e-03f, -4.827904825e-03f, -4.844703527e-03f,
+-4.861492896e-03f, -4.878272903e-03f, -4.895043519e-03f, -4.911804716e-03f, -4.928556466e-03f, -4.945298740e-03f, -4.962031510e-03f, -4.978754748e-03f, -4.995468425e-03f, -5.012172512e-03f,
+-5.028866983e-03f, -5.045551807e-03f, -5.062226958e-03f, -5.078892406e-03f, -5.095548124e-03f, -5.112194083e-03f, -5.128830255e-03f, -5.145456613e-03f, -5.162073127e-03f, -5.178679770e-03f,
+-5.195276513e-03f, -5.211863329e-03f, -5.228440189e-03f, -5.245007066e-03f, -5.261563930e-03f, -5.278110755e-03f, -5.294647513e-03f, -5.311174174e-03f, -5.327690712e-03f, -5.344197098e-03f,
+-5.360693305e-03f, -5.377179304e-03f, -5.393655068e-03f, -5.410120568e-03f, -5.426575777e-03f, -5.443020668e-03f, -5.459455211e-03f, -5.475879380e-03f, -5.492293147e-03f, -5.508696484e-03f,
+-5.525089363e-03f, -5.541471756e-03f, -5.557843636e-03f, -5.574204976e-03f, -5.590555746e-03f, -5.606895921e-03f, -5.623225472e-03f, -5.639544371e-03f, -5.655852591e-03f, -5.672150105e-03f,
+-5.688436885e-03f, -5.704712903e-03f, -5.720978132e-03f, -5.737232544e-03f, -5.753476113e-03f, -5.769708810e-03f, -5.785930608e-03f, -5.802141480e-03f, -5.818341398e-03f, -5.834530335e-03f,
+-5.850708264e-03f, -5.866875158e-03f, -5.883030988e-03f, -5.899175728e-03f, -5.915309351e-03f, -5.931431829e-03f, -5.947543135e-03f, -5.963643242e-03f, -5.979732123e-03f, -5.995809751e-03f,
+-6.011876098e-03f, -6.027931137e-03f, -6.043974842e-03f, -6.060007185e-03f, -6.076028139e-03f, -6.092037677e-03f, -6.108035772e-03f, -6.124022398e-03f, -6.139997527e-03f, -6.155961132e-03f,
+-6.171913187e-03f, -6.187853664e-03f, -6.203782537e-03f, -6.219699778e-03f, -6.235605361e-03f, -6.251499260e-03f, -6.267381447e-03f, -6.283251896e-03f, -6.299110579e-03f, -6.314957471e-03f,
+-6.330792544e-03f, -6.346615772e-03f, -6.362427128e-03f, -6.378226585e-03f, -6.394014117e-03f, -6.409789698e-03f, -6.425553301e-03f, -6.441304898e-03f, -6.457044464e-03f, -6.472771973e-03f,
+-6.488487397e-03f, -6.504190710e-03f, -6.519881887e-03f, -6.535560899e-03f, -6.551227722e-03f, -6.566882328e-03f, -6.582524692e-03f, -6.598154787e-03f, -6.613772586e-03f, -6.629378064e-03f,
+-6.644971194e-03f, -6.660551950e-03f, -6.676120306e-03f, -6.691676235e-03f, -6.707219712e-03f, -6.722750710e-03f, -6.738269203e-03f, -6.753775166e-03f, -6.769268571e-03f, -6.784749393e-03f,
+-6.800217607e-03f, -6.815673185e-03f, -6.831116102e-03f, -6.846546333e-03f, -6.861963850e-03f, -6.877368629e-03f, -6.892760643e-03f, -6.908139866e-03f, -6.923506274e-03f, -6.938859839e-03f,
+-6.954200536e-03f, -6.969528339e-03f, -6.984843223e-03f, -7.000145162e-03f, -7.015434130e-03f, -7.030710101e-03f, -7.045973051e-03f, -7.061222952e-03f, -7.076459780e-03f, -7.091683510e-03f,
+-7.106894115e-03f, -7.122091569e-03f, -7.137275849e-03f, -7.152446927e-03f, -7.167604779e-03f, -7.182749379e-03f, -7.197880702e-03f, -7.212998722e-03f, -7.228103415e-03f, -7.243194754e-03f,
+-7.258272714e-03f, -7.273337271e-03f, -7.288388398e-03f, -7.303426071e-03f, -7.318450265e-03f, -7.333460953e-03f, -7.348458112e-03f, -7.363441716e-03f, -7.378411740e-03f, -7.393368159e-03f,
+-7.408310947e-03f, -7.423240080e-03f, -7.438155533e-03f, -7.453057280e-03f, -7.467945297e-03f, -7.482819559e-03f, -7.497680041e-03f, -7.512526718e-03f, -7.527359566e-03f, -7.542178558e-03f,
+-7.556983671e-03f, -7.571774880e-03f, -7.586552160e-03f, -7.601315487e-03f, -7.616064835e-03f, -7.630800180e-03f, -7.645521497e-03f, -7.660228762e-03f, -7.674921949e-03f, -7.689601036e-03f,
+-7.704265996e-03f, -7.718916806e-03f, -7.733553441e-03f, -7.748175876e-03f, -7.762784087e-03f, -7.777378049e-03f, -7.791957739e-03f, -7.806523132e-03f, -7.821074203e-03f, -7.835610929e-03f,
+-7.850133284e-03f, -7.864641245e-03f, -7.879134787e-03f, -7.893613886e-03f, -7.908078519e-03f, -7.922528660e-03f, -7.936964286e-03f, -7.951385373e-03f, -7.965791896e-03f, -7.980183831e-03f,
+-7.994561155e-03f, -8.008923844e-03f, -8.023271873e-03f, -8.037605218e-03f, -8.051923856e-03f, -8.066227763e-03f, -8.080516915e-03f, -8.094791288e-03f, -8.109050858e-03f, -8.123295601e-03f,
+-8.137525494e-03f, -8.151740513e-03f, -8.165940635e-03f, -8.180125834e-03f, -8.194296089e-03f, -8.208451375e-03f, -8.222591669e-03f, -8.236716947e-03f, -8.250827185e-03f, -8.264922361e-03f,
+-8.279002450e-03f, -8.293067430e-03f, -8.307117276e-03f, -8.321151965e-03f, -8.335171475e-03f, -8.349175780e-03f, -8.363164860e-03f, -8.377138689e-03f, -8.391097245e-03f, -8.405040504e-03f,
+-8.418968444e-03f, -8.432881041e-03f, -8.446778271e-03f, -8.460660113e-03f, -8.474526542e-03f, -8.488377536e-03f, -8.502213071e-03f, -8.516033125e-03f, -8.529837675e-03f, -8.543626697e-03f,
+-8.557400169e-03f, -8.571158068e-03f, -8.584900371e-03f, -8.598627054e-03f, -8.612338097e-03f, -8.626033474e-03f, -8.639713164e-03f, -8.653377145e-03f, -8.667025392e-03f, -8.680657885e-03f,
+-8.694274599e-03f, -8.707875512e-03f, -8.721460603e-03f, -8.735029847e-03f, -8.748583223e-03f, -8.762120709e-03f, -8.775642281e-03f, -8.789147917e-03f, -8.802637595e-03f, -8.816111293e-03f,
+-8.829568988e-03f, -8.843010657e-03f, -8.856436279e-03f, -8.869845831e-03f, -8.883239291e-03f, -8.896616637e-03f, -8.909977846e-03f, -8.923322896e-03f, -8.936651766e-03f, -8.949964433e-03f,
+-8.963260876e-03f, -8.976541071e-03f, -8.989804997e-03f, -9.003052632e-03f, -9.016283955e-03f, -9.029498942e-03f, -9.042697573e-03f, -9.055879825e-03f, -9.069045677e-03f, -9.082195107e-03f,
+-9.095328093e-03f, -9.108444612e-03f, -9.121544645e-03f, -9.134628168e-03f, -9.147695161e-03f, -9.160745601e-03f, -9.173779467e-03f, -9.186796738e-03f, -9.199797392e-03f, -9.212781406e-03f,
+-9.225748761e-03f, -9.238699435e-03f, -9.251633405e-03f, -9.264550651e-03f, -9.277451151e-03f, -9.290334885e-03f, -9.303201829e-03f, -9.316051965e-03f, -9.328885269e-03f, -9.341701722e-03f,
+-9.354501301e-03f, -9.367283986e-03f, -9.380049756e-03f, -9.392798589e-03f, -9.405530464e-03f, -9.418245361e-03f, -9.430943258e-03f, -9.443624135e-03f, -9.456287970e-03f, -9.468934743e-03f,
+-9.481564432e-03f, -9.494177018e-03f, -9.506772478e-03f, -9.519350793e-03f, -9.531911941e-03f, -9.544455903e-03f, -9.556982656e-03f, -9.569492181e-03f, -9.581984456e-03f, -9.594459462e-03f,
+-9.606917178e-03f, -9.619357583e-03f, -9.631780657e-03f, -9.644186379e-03f, -9.656574728e-03f, -9.668945685e-03f, -9.681299229e-03f, -9.693635340e-03f, -9.705953997e-03f, -9.718255180e-03f,
+-9.730538869e-03f, -9.742805044e-03f, -9.755053684e-03f, -9.767284769e-03f, -9.779498279e-03f, -9.791694195e-03f, -9.803872495e-03f, -9.816033161e-03f, -9.828176171e-03f, -9.840301506e-03f,
+-9.852409147e-03f, -9.864499072e-03f, -9.876571263e-03f, -9.888625700e-03f, -9.900662361e-03f, -9.912681229e-03f, -9.924682283e-03f, -9.936665503e-03f, -9.948630871e-03f, -9.960578365e-03f,
+-9.972507966e-03f, -9.984419656e-03f, -9.996313414e-03f, -1.000818922e-02f, -1.002004706e-02f, -1.003188690e-02f, -1.004370874e-02f, -1.005551255e-02f, -1.006729830e-02f, -1.007906600e-02f,
+-1.009081560e-02f, -1.010254710e-02f, -1.011426047e-02f, -1.012595570e-02f, -1.013763276e-02f, -1.014929164e-02f, -1.016093232e-02f, -1.017255478e-02f, -1.018415900e-02f, -1.019574496e-02f,
+-1.020731264e-02f, -1.021886202e-02f, -1.023039309e-02f, -1.024190583e-02f, -1.025340021e-02f, -1.026487621e-02f, -1.027633383e-02f, -1.028777303e-02f, -1.029919381e-02f, -1.031059614e-02f,
+-1.032198001e-02f, -1.033334538e-02f, -1.034469226e-02f, -1.035602062e-02f, -1.036733043e-02f, -1.037862168e-02f, -1.038989436e-02f, -1.040114845e-02f, -1.041238391e-02f, -1.042360075e-02f,
+-1.043479894e-02f, -1.044597845e-02f, -1.045713928e-02f, -1.046828141e-02f, -1.047940481e-02f, -1.049050947e-02f, -1.050159537e-02f, -1.051266249e-02f, -1.052371082e-02f, -1.053474033e-02f,
+-1.054575101e-02f, -1.055674284e-02f, -1.056771580e-02f, -1.057866988e-02f, -1.058960505e-02f, -1.060052130e-02f, -1.061141862e-02f, -1.062229697e-02f, -1.063315635e-02f, -1.064399674e-02f,
+-1.065481812e-02f, -1.066562048e-02f, -1.067640378e-02f, -1.068716803e-02f, -1.069791319e-02f, -1.070863926e-02f, -1.071934621e-02f, -1.073003403e-02f, -1.074070271e-02f, -1.075135221e-02f,
+-1.076198253e-02f, -1.077259365e-02f, -1.078318554e-02f, -1.079375821e-02f, -1.080431162e-02f, -1.081484576e-02f, -1.082536061e-02f, -1.083585615e-02f, -1.084633238e-02f, -1.085678927e-02f,
+-1.086722680e-02f, -1.087764496e-02f, -1.088804373e-02f, -1.089842309e-02f, -1.090878303e-02f, -1.091912353e-02f, -1.092944458e-02f, -1.093974615e-02f, -1.095002823e-02f, -1.096029080e-02f,
+-1.097053386e-02f, -1.098075737e-02f, -1.099096132e-02f, -1.100114571e-02f, -1.101131050e-02f, -1.102145569e-02f, -1.103158125e-02f, -1.104168718e-02f, -1.105177345e-02f, -1.106184005e-02f,
+-1.107188697e-02f, -1.108191418e-02f, -1.109192167e-02f, -1.110190942e-02f, -1.111187743e-02f, -1.112182566e-02f, -1.113175411e-02f, -1.114166276e-02f, -1.115155159e-02f, -1.116142059e-02f,
+-1.117126975e-02f, -1.118109903e-02f, -1.119090844e-02f, -1.120069796e-02f, -1.121046756e-02f, -1.122021723e-02f, -1.122994697e-02f, -1.123965674e-02f, -1.124934654e-02f, -1.125901635e-02f,
+-1.126866615e-02f, -1.127829593e-02f, -1.128790568e-02f, -1.129749537e-02f, -1.130706500e-02f, -1.131661455e-02f, -1.132614399e-02f, -1.133565333e-02f, -1.134514253e-02f, -1.135461159e-02f,
+-1.136406050e-02f, -1.137348922e-02f, -1.138289776e-02f, -1.139228610e-02f, -1.140165421e-02f, -1.141100209e-02f, -1.142032972e-02f, -1.142963709e-02f, -1.143892418e-02f, -1.144819097e-02f,
+-1.145743745e-02f, -1.146666361e-02f, -1.147586943e-02f, -1.148505490e-02f, -1.149422000e-02f, -1.150336471e-02f, -1.151248903e-02f, -1.152159294e-02f, -1.153067642e-02f, -1.153973946e-02f,
+-1.154878204e-02f, -1.155780415e-02f, -1.156680578e-02f, -1.157578691e-02f, -1.158474753e-02f, -1.159368762e-02f, -1.160260716e-02f, -1.161150615e-02f, -1.162038458e-02f, -1.162924241e-02f,
+-1.163807965e-02f, -1.164689627e-02f, -1.165569227e-02f, -1.166446763e-02f, -1.167322233e-02f, -1.168195637e-02f, -1.169066972e-02f, -1.169936237e-02f, -1.170803432e-02f, -1.171668554e-02f,
+-1.172531602e-02f, -1.173392575e-02f, -1.174251472e-02f, -1.175108291e-02f, -1.175963030e-02f, -1.176815689e-02f, -1.177666266e-02f, -1.178514760e-02f, -1.179361169e-02f, -1.180205491e-02f,
+-1.181047727e-02f, -1.181887874e-02f, -1.182725931e-02f, -1.183561896e-02f, -1.184395769e-02f, -1.185227548e-02f, -1.186057232e-02f, -1.186884819e-02f, -1.187710308e-02f, -1.188533698e-02f,
+-1.189354987e-02f, -1.190174174e-02f, -1.190991259e-02f, -1.191806239e-02f, -1.192619113e-02f, -1.193429880e-02f, -1.194238539e-02f, -1.195045088e-02f, -1.195849527e-02f, -1.196651853e-02f,
+-1.197452067e-02f, -1.198250165e-02f, -1.199046148e-02f, -1.199840013e-02f, -1.200631760e-02f, -1.201421388e-02f, -1.202208894e-02f, -1.202994279e-02f, -1.203777540e-02f, -1.204558676e-02f,
+-1.205337687e-02f, -1.206114571e-02f, -1.206889326e-02f, -1.207661952e-02f, -1.208432448e-02f, -1.209200811e-02f, -1.209967041e-02f, -1.210731137e-02f, -1.211493098e-02f, -1.212252922e-02f,
+-1.213010607e-02f, -1.213766154e-02f, -1.214519561e-02f, -1.215270826e-02f, -1.216019949e-02f, -1.216766927e-02f, -1.217511761e-02f, -1.218254449e-02f, -1.218994989e-02f, -1.219733381e-02f,
+-1.220469624e-02f, -1.221203715e-02f, -1.221935655e-02f, -1.222665442e-02f, -1.223393074e-02f, -1.224118552e-02f, -1.224841873e-02f, -1.225563036e-02f, -1.226282041e-02f, -1.226998885e-02f,
+-1.227713569e-02f, -1.228426091e-02f, -1.229136450e-02f, -1.229844645e-02f, -1.230550674e-02f, -1.231254537e-02f, -1.231956232e-02f, -1.232655759e-02f, -1.233353116e-02f, -1.234048302e-02f,
+-1.234741316e-02f, -1.235432158e-02f, -1.236120825e-02f, -1.236807317e-02f, -1.237491634e-02f, -1.238173773e-02f, -1.238853734e-02f, -1.239531515e-02f, -1.240207116e-02f, -1.240880536e-02f,
+-1.241551774e-02f, -1.242220827e-02f, -1.242887697e-02f, -1.243552381e-02f, -1.244214878e-02f, -1.244875188e-02f, -1.245533310e-02f, -1.246189241e-02f, -1.246842983e-02f, -1.247494532e-02f,
+-1.248143889e-02f, -1.248791052e-02f, -1.249436021e-02f, -1.250078794e-02f, -1.250719371e-02f, -1.251357750e-02f, -1.251993931e-02f, -1.252627912e-02f, -1.253259693e-02f, -1.253889272e-02f,
+-1.254516649e-02f, -1.255141822e-02f, -1.255764791e-02f, -1.256385555e-02f, -1.257004113e-02f, -1.257620464e-02f, -1.258234606e-02f, -1.258846540e-02f, -1.259456263e-02f, -1.260063776e-02f,
+-1.260669077e-02f, -1.261272165e-02f, -1.261873039e-02f, -1.262471699e-02f, -1.263068144e-02f, -1.263662372e-02f, -1.264254383e-02f, -1.264844176e-02f, -1.265431749e-02f, -1.266017103e-02f,
+-1.266600236e-02f, -1.267181147e-02f, -1.267759836e-02f, -1.268336301e-02f, -1.268910542e-02f, -1.269482558e-02f, -1.270052347e-02f, -1.270619910e-02f, -1.271185245e-02f, -1.271748351e-02f,
+-1.272309228e-02f, -1.272867875e-02f, -1.273424290e-02f, -1.273978474e-02f, -1.274530425e-02f, -1.275080142e-02f, -1.275627624e-02f, -1.276172872e-02f, -1.276715883e-02f, -1.277256657e-02f,
+-1.277795194e-02f, -1.278331492e-02f, -1.278865551e-02f, -1.279397370e-02f, -1.279926948e-02f, -1.280454284e-02f, -1.280979378e-02f, -1.281502228e-02f, -1.282022835e-02f, -1.282541196e-02f,
+-1.283057313e-02f, -1.283571182e-02f, -1.284082805e-02f, -1.284592180e-02f, -1.285099307e-02f, -1.285604184e-02f, -1.286106811e-02f, -1.286607187e-02f, -1.287105311e-02f, -1.287601184e-02f,
+-1.288094803e-02f, -1.288586168e-02f, -1.289075279e-02f, -1.289562135e-02f, -1.290046735e-02f, -1.290529079e-02f, -1.291009165e-02f, -1.291486993e-02f, -1.291962562e-02f, -1.292435872e-02f,
+-1.292906922e-02f, -1.293375712e-02f, -1.293842239e-02f, -1.294306505e-02f, -1.294768508e-02f, -1.295228247e-02f, -1.295685722e-02f, -1.296140933e-02f, -1.296593878e-02f, -1.297044556e-02f,
+-1.297492969e-02f, -1.297939113e-02f, -1.298382990e-02f, -1.298824598e-02f, -1.299263936e-02f, -1.299701005e-02f, -1.300135803e-02f, -1.300568330e-02f, -1.300998585e-02f, -1.301426568e-02f,
+-1.301852278e-02f, -1.302275714e-02f, -1.302696875e-02f, -1.303115762e-02f, -1.303532374e-02f, -1.303946709e-02f, -1.304358768e-02f, -1.304768550e-02f, -1.305176054e-02f, -1.305581279e-02f,
+-1.305984226e-02f, -1.306384893e-02f, -1.306783280e-02f, -1.307179387e-02f, -1.307573212e-02f, -1.307964756e-02f, -1.308354017e-02f, -1.308740996e-02f, -1.309125691e-02f, -1.309508102e-02f,
+-1.309888229e-02f, -1.310266071e-02f, -1.310641628e-02f, -1.311014898e-02f, -1.311385882e-02f, -1.311754579e-02f, -1.312120989e-02f, -1.312485111e-02f, -1.312846944e-02f, -1.313206488e-02f,
+-1.313563742e-02f, -1.313918707e-02f, -1.314271381e-02f, -1.314621764e-02f, -1.314969856e-02f, -1.315315656e-02f, -1.315659164e-02f, -1.316000378e-02f, -1.316339300e-02f, -1.316675927e-02f,
+-1.317010261e-02f, -1.317342300e-02f, -1.317672044e-02f, -1.317999492e-02f, -1.318324644e-02f, -1.318647500e-02f, -1.318968060e-02f, -1.319286321e-02f, -1.319602286e-02f, -1.319915952e-02f,
+-1.320227320e-02f, -1.320536389e-02f, -1.320843158e-02f, -1.321147628e-02f, -1.321449798e-02f, -1.321749667e-02f, -1.322047236e-02f, -1.322342503e-02f, -1.322635469e-02f, -1.322926132e-02f,
+-1.323214494e-02f, -1.323500552e-02f, -1.323784308e-02f, -1.324065760e-02f, -1.324344908e-02f, -1.324621752e-02f, -1.324896291e-02f, -1.325168526e-02f, -1.325438455e-02f, -1.325706079e-02f,
+-1.325971397e-02f, -1.326234409e-02f, -1.326495114e-02f, -1.326753513e-02f, -1.327009604e-02f, -1.327263388e-02f, -1.327514864e-02f, -1.327764032e-02f, -1.328010892e-02f, -1.328255443e-02f,
+-1.328497685e-02f, -1.328737618e-02f, -1.328975241e-02f, -1.329210555e-02f, -1.329443558e-02f, -1.329674251e-02f, -1.329902634e-02f, -1.330128705e-02f, -1.330352466e-02f, -1.330573915e-02f,
+-1.330793052e-02f, -1.331009878e-02f, -1.331224391e-02f, -1.331436592e-02f, -1.331646480e-02f, -1.331854056e-02f, -1.332059318e-02f, -1.332262267e-02f, -1.332462903e-02f, -1.332661225e-02f,
+-1.332857233e-02f, -1.333050927e-02f, -1.333242306e-02f, -1.333431371e-02f, -1.333618121e-02f, -1.333802557e-02f, -1.333984677e-02f, -1.334164482e-02f, -1.334341971e-02f, -1.334517145e-02f,
+-1.334690003e-02f, -1.334860544e-02f, -1.335028770e-02f, -1.335194679e-02f, -1.335358272e-02f, -1.335519549e-02f, -1.335678508e-02f, -1.335835151e-02f, -1.335989476e-02f, -1.336141484e-02f,
+-1.336291175e-02f, -1.336438549e-02f, -1.336583605e-02f, -1.336726343e-02f, -1.336866764e-02f, -1.337004866e-02f, -1.337140651e-02f, -1.337274117e-02f, -1.337405265e-02f, -1.337534095e-02f,
+-1.337660607e-02f, -1.337784800e-02f, -1.337906674e-02f, -1.338026230e-02f, -1.338143467e-02f, -1.338258385e-02f, -1.338370984e-02f, -1.338481265e-02f, -1.338589226e-02f, -1.338694868e-02f,
+-1.338798192e-02f, -1.338899196e-02f, -1.338997881e-02f, -1.339094246e-02f, -1.339188293e-02f, -1.339280020e-02f, -1.339369427e-02f, -1.339456516e-02f, -1.339541285e-02f, -1.339623735e-02f,
+-1.339703865e-02f, -1.339781676e-02f, -1.339857167e-02f, -1.339930339e-02f, -1.340001192e-02f, -1.340069725e-02f, -1.340135939e-02f, -1.340199834e-02f, -1.340261409e-02f, -1.340320665e-02f,
+-1.340377602e-02f, -1.340432219e-02f, -1.340484518e-02f, -1.340534497e-02f, -1.340582157e-02f, -1.340627497e-02f, -1.340670519e-02f, -1.340711222e-02f, -1.340749606e-02f, -1.340785671e-02f,
+-1.340819418e-02f, -1.340850846e-02f, -1.340879955e-02f, -1.340906745e-02f, -1.340931217e-02f, -1.340953371e-02f, -1.340973207e-02f, -1.340990724e-02f, -1.341005923e-02f, -1.341018804e-02f,
+-1.341029368e-02f, -1.341037614e-02f, -1.341043542e-02f, -1.341047152e-02f, -1.341048445e-02f, -1.341047421e-02f, -1.341044080e-02f, -1.341038422e-02f, -1.341030447e-02f, -1.341020156e-02f,
+-1.341007547e-02f, -1.340992623e-02f, -1.340975382e-02f, -1.340955825e-02f, -1.340933952e-02f, -1.340909764e-02f, -1.340883260e-02f, -1.340854440e-02f, -1.340823306e-02f, -1.340789856e-02f,
+-1.340754091e-02f, -1.340716012e-02f, -1.340675619e-02f, -1.340632911e-02f, -1.340587889e-02f, -1.340540553e-02f, -1.340490904e-02f, -1.340438941e-02f, -1.340384666e-02f, -1.340328077e-02f,
+-1.340269175e-02f, -1.340207961e-02f, -1.340144435e-02f, -1.340078597e-02f, -1.340010447e-02f, -1.339939985e-02f, -1.339867212e-02f, -1.339792128e-02f, -1.339714734e-02f, -1.339635029e-02f,
+-1.339553014e-02f, -1.339468688e-02f, -1.339382054e-02f, -1.339293109e-02f, -1.339201856e-02f, -1.339108294e-02f, -1.339012423e-02f, -1.338914244e-02f, -1.338813758e-02f, -1.338710963e-02f,
+-1.338605861e-02f, -1.338498453e-02f, -1.338388737e-02f, -1.338276716e-02f, -1.338162388e-02f, -1.338045754e-02f, -1.337926815e-02f, -1.337805572e-02f, -1.337682023e-02f, -1.337556170e-02f,
+-1.337428013e-02f, -1.337297553e-02f, -1.337164789e-02f, -1.337029722e-02f, -1.336892352e-02f, -1.336752681e-02f, -1.336610707e-02f, -1.336466432e-02f, -1.336319856e-02f, -1.336170980e-02f,
+-1.336019803e-02f, -1.335866326e-02f, -1.335710550e-02f, -1.335552474e-02f, -1.335392100e-02f, -1.335229427e-02f, -1.335064457e-02f, -1.334897189e-02f, -1.334727624e-02f, -1.334555762e-02f,
+-1.334381604e-02f, -1.334205151e-02f, -1.334026402e-02f, -1.333845358e-02f, -1.333662019e-02f, -1.333476387e-02f, -1.333288461e-02f, -1.333098242e-02f, -1.332905730e-02f, -1.332710926e-02f,
+-1.332513831e-02f, -1.332314444e-02f, -1.332112766e-02f, -1.331908798e-02f, -1.331702540e-02f, -1.331493993e-02f, -1.331283157e-02f, -1.331070033e-02f, -1.330854620e-02f, -1.330636921e-02f,
+-1.330416935e-02f, -1.330194662e-02f, -1.329970103e-02f, -1.329743259e-02f, -1.329514131e-02f, -1.329282718e-02f, -1.329049021e-02f, -1.328813041e-02f, -1.328574779e-02f, -1.328334234e-02f,
+-1.328091408e-02f, -1.327846301e-02f, -1.327598913e-02f, -1.327349245e-02f, -1.327097298e-02f, -1.326843072e-02f, -1.326586568e-02f, -1.326327787e-02f, -1.326066728e-02f, -1.325803393e-02f,
+-1.325537782e-02f, -1.325269895e-02f, -1.324999734e-02f, -1.324727299e-02f, -1.324452590e-02f, -1.324175608e-02f, -1.323896354e-02f, -1.323614828e-02f, -1.323331031e-02f, -1.323044963e-02f,
+-1.322756626e-02f, -1.322466019e-02f, -1.322173144e-02f, -1.321878001e-02f, -1.321580591e-02f, -1.321280913e-02f, -1.320978970e-02f, -1.320674762e-02f, -1.320368288e-02f, -1.320059551e-02f,
+-1.319748550e-02f, -1.319435287e-02f, -1.319119761e-02f, -1.318801974e-02f, -1.318481926e-02f, -1.318159618e-02f, -1.317835051e-02f, -1.317508225e-02f, -1.317179141e-02f, -1.316847800e-02f,
+-1.316514202e-02f, -1.316178348e-02f, -1.315840239e-02f, -1.315499876e-02f, -1.315157259e-02f, -1.314812389e-02f, -1.314465266e-02f, -1.314115892e-02f, -1.313764267e-02f, -1.313410392e-02f,
+-1.313054268e-02f, -1.312695895e-02f, -1.312335274e-02f, -1.311972406e-02f, -1.311607292e-02f, -1.311239931e-02f, -1.310870327e-02f, -1.310498478e-02f, -1.310124385e-02f, -1.309748050e-02f,
+-1.309369474e-02f, -1.308988656e-02f, -1.308605598e-02f, -1.308220301e-02f, -1.307832765e-02f, -1.307442991e-02f, -1.307050980e-02f, -1.306656733e-02f, -1.306260250e-02f, -1.305861533e-02f,
+-1.305460582e-02f, -1.305057398e-02f, -1.304651982e-02f, -1.304244335e-02f, -1.303834457e-02f, -1.303422349e-02f, -1.303008013e-02f, -1.302591448e-02f, -1.302172657e-02f, -1.301751639e-02f,
+-1.301328396e-02f, -1.300902928e-02f, -1.300475236e-02f, -1.300045322e-02f, -1.299613185e-02f, -1.299178828e-02f, -1.298742250e-02f, -1.298303453e-02f, -1.297862437e-02f, -1.297419204e-02f,
+-1.296973754e-02f, -1.296526088e-02f, -1.296076207e-02f, -1.295624113e-02f, -1.295169805e-02f, -1.294713285e-02f, -1.294254554e-02f, -1.293793612e-02f, -1.293330461e-02f, -1.292865102e-02f,
+-1.292397535e-02f, -1.291927761e-02f, -1.291455781e-02f, -1.290981597e-02f, -1.290505209e-02f, -1.290026618e-02f, -1.289545825e-02f, -1.289062831e-02f, -1.288577638e-02f, -1.288090245e-02f,
+-1.287600654e-02f, -1.287108865e-02f, -1.286614881e-02f, -1.286118702e-02f, -1.285620328e-02f, -1.285119761e-02f, -1.284617002e-02f, -1.284112052e-02f, -1.283604912e-02f, -1.283095582e-02f,
+-1.282584064e-02f, -1.282070359e-02f, -1.281554468e-02f, -1.281036391e-02f, -1.280516130e-02f, -1.279993687e-02f, -1.279469061e-02f, -1.278942254e-02f, -1.278413267e-02f, -1.277882101e-02f,
+-1.277348756e-02f, -1.276813235e-02f, -1.276275539e-02f, -1.275735667e-02f, -1.275193621e-02f, -1.274649403e-02f, -1.274103013e-02f, -1.273554453e-02f, -1.273003723e-02f, -1.272450824e-02f,
+-1.271895759e-02f, -1.271338526e-02f, -1.270779129e-02f, -1.270217568e-02f, -1.269653843e-02f, -1.269087957e-02f, -1.268519910e-02f, -1.267949703e-02f, -1.267377337e-02f, -1.266802814e-02f,
+-1.266226135e-02f, -1.265647300e-02f, -1.265066312e-02f, -1.264483170e-02f, -1.263897876e-02f, -1.263310432e-02f, -1.262720837e-02f, -1.262129095e-02f, -1.261535205e-02f, -1.260939169e-02f,
+-1.260340988e-02f, -1.259740663e-02f, -1.259138195e-02f, -1.258533585e-02f, -1.257926836e-02f, -1.257317947e-02f, -1.256706920e-02f, -1.256093756e-02f, -1.255478456e-02f, -1.254861022e-02f,
+-1.254241454e-02f, -1.253619755e-02f, -1.252995924e-02f, -1.252369964e-02f, -1.251741875e-02f, -1.251111658e-02f, -1.250479316e-02f, -1.249844849e-02f, -1.249208258e-02f, -1.248569544e-02f,
+-1.247928709e-02f, -1.247285755e-02f, -1.246640681e-02f, -1.245993490e-02f, -1.245344182e-02f, -1.244692760e-02f, -1.244039223e-02f, -1.243383574e-02f, -1.242725814e-02f, -1.242065943e-02f,
+-1.241403964e-02f, -1.240739877e-02f, -1.240073684e-02f, -1.239405385e-02f, -1.238734983e-02f, -1.238062479e-02f, -1.237387873e-02f, -1.236711168e-02f, -1.236032363e-02f, -1.235351462e-02f,
+-1.234668464e-02f, -1.233983372e-02f, -1.233296186e-02f, -1.232606908e-02f, -1.231915539e-02f, -1.231222081e-02f, -1.230526534e-02f, -1.229828901e-02f, -1.229129182e-02f, -1.228427378e-02f,
+-1.227723492e-02f, -1.227017525e-02f, -1.226309477e-02f, -1.225599350e-02f, -1.224887145e-02f, -1.224172865e-02f, -1.223456509e-02f, -1.222738080e-02f, -1.222017579e-02f, -1.221295007e-02f,
+-1.220570366e-02f, -1.219843657e-02f, -1.219114881e-02f, -1.218384039e-02f, -1.217651134e-02f, -1.216916166e-02f, -1.216179138e-02f, -1.215440049e-02f, -1.214698902e-02f, -1.213955698e-02f,
+-1.213210438e-02f, -1.212463125e-02f, -1.211713758e-02f, -1.210962340e-02f, -1.210208872e-02f, -1.209453356e-02f, -1.208695793e-02f, -1.207936184e-02f, -1.207174530e-02f, -1.206410834e-02f,
+-1.205645097e-02f, -1.204877319e-02f, -1.204107503e-02f, -1.203335650e-02f, -1.202561762e-02f, -1.201785839e-02f, -1.201007884e-02f, -1.200227897e-02f, -1.199445880e-02f, -1.198661836e-02f,
+-1.197875764e-02f, -1.197087667e-02f, -1.196297546e-02f, -1.195505403e-02f, -1.194711238e-02f, -1.193915055e-02f, -1.193116853e-02f, -1.192316635e-02f, -1.191514402e-02f, -1.190710155e-02f,
+-1.189903897e-02f, -1.189095628e-02f, -1.188285350e-02f, -1.187473064e-02f, -1.186658773e-02f, -1.185842477e-02f, -1.185024178e-02f, -1.184203878e-02f, -1.183381579e-02f, -1.182557281e-02f,
+-1.181730986e-02f, -1.180902696e-02f, -1.180072412e-02f, -1.179240136e-02f, -1.178405870e-02f, -1.177569614e-02f, -1.176731371e-02f, -1.175891142e-02f, -1.175048929e-02f, -1.174204733e-02f,
+-1.173358556e-02f, -1.172510400e-02f, -1.171660265e-02f, -1.170808153e-02f, -1.169954067e-02f, -1.169098008e-02f, -1.168239977e-02f, -1.167379975e-02f, -1.166518005e-02f, -1.165654069e-02f,
+-1.164788167e-02f, -1.163920301e-02f, -1.163050473e-02f, -1.162178685e-02f, -1.161304937e-02f, -1.160429233e-02f, -1.159551573e-02f, -1.158671959e-02f, -1.157790392e-02f, -1.156906875e-02f,
+-1.156021409e-02f, -1.155133995e-02f, -1.154244635e-02f, -1.153353331e-02f, -1.152460085e-02f, -1.151564898e-02f, -1.150667771e-02f, -1.149768707e-02f, -1.148867707e-02f, -1.147964773e-02f,
+-1.147059907e-02f, -1.146153109e-02f, -1.145244382e-02f, -1.144333728e-02f, -1.143421148e-02f, -1.142506644e-02f, -1.141590217e-02f, -1.140671869e-02f, -1.139751602e-02f, -1.138829418e-02f,
+-1.137905319e-02f, -1.136979305e-02f, -1.136051379e-02f, -1.135121542e-02f, -1.134189797e-02f, -1.133256144e-02f, -1.132320586e-02f, -1.131383124e-02f, -1.130443760e-02f, -1.129502496e-02f,
+-1.128559334e-02f, -1.127614275e-02f, -1.126667320e-02f, -1.125718473e-02f, -1.124767734e-02f, -1.123815105e-02f, -1.122860588e-02f, -1.121904185e-02f, -1.120945897e-02f, -1.119985726e-02f,
+-1.119023675e-02f, -1.118059744e-02f, -1.117093936e-02f, -1.116126252e-02f, -1.115156694e-02f, -1.114185264e-02f, -1.113211964e-02f, -1.112236795e-02f, -1.111259759e-02f, -1.110280859e-02f,
+-1.109300095e-02f, -1.108317469e-02f, -1.107332985e-02f, -1.106346642e-02f, -1.105358444e-02f, -1.104368391e-02f, -1.103376486e-02f, -1.102382730e-02f, -1.101387126e-02f, -1.100389675e-02f,
+-1.099390379e-02f, -1.098389239e-02f, -1.097386259e-02f, -1.096381438e-02f, -1.095374780e-02f, -1.094366286e-02f, -1.093355958e-02f, -1.092343798e-02f, -1.091329808e-02f, -1.090313989e-02f,
+-1.089296344e-02f, -1.088276873e-02f, -1.087255580e-02f, -1.086232466e-02f, -1.085207533e-02f, -1.084180782e-02f, -1.083152216e-02f, -1.082121837e-02f, -1.081089645e-02f, -1.080055644e-02f,
+-1.079019836e-02f, -1.077982221e-02f, -1.076942802e-02f, -1.075901581e-02f, -1.074858560e-02f, -1.073813740e-02f, -1.072767124e-02f, -1.071718713e-02f, -1.070668510e-02f, -1.069616516e-02f,
+-1.068562733e-02f, -1.067507163e-02f, -1.066449808e-02f, -1.065390671e-02f, -1.064329752e-02f, -1.063267053e-02f, -1.062202578e-02f, -1.061136327e-02f, -1.060068303e-02f, -1.058998508e-02f,
+-1.057926943e-02f, -1.056853610e-02f, -1.055778512e-02f, -1.054701651e-02f, -1.053623027e-02f, -1.052542644e-02f, -1.051460504e-02f, -1.050376607e-02f, -1.049290957e-02f, -1.048203555e-02f,
+-1.047114403e-02f, -1.046023503e-02f, -1.044930857e-02f, -1.043836468e-02f, -1.042740336e-02f, -1.041642465e-02f, -1.040542856e-02f, -1.039441511e-02f, -1.038338432e-02f, -1.037233621e-02f,
+-1.036127080e-02f, -1.035018811e-02f, -1.033908816e-02f, -1.032797098e-02f, -1.031683657e-02f, -1.030568497e-02f, -1.029451619e-02f, -1.028333025e-02f, -1.027212717e-02f, -1.026090698e-02f,
+-1.024966969e-02f, -1.023841533e-02f, -1.022714390e-02f, -1.021585544e-02f, -1.020454997e-02f, -1.019322750e-02f, -1.018188806e-02f, -1.017053166e-02f, -1.015915834e-02f, -1.014776809e-02f,
+-1.013636096e-02f, -1.012493696e-02f, -1.011349610e-02f, -1.010203842e-02f, -1.009056392e-02f, -1.007907264e-02f, -1.006756459e-02f, -1.005603979e-02f, -1.004449827e-02f, -1.003294004e-02f,
+-1.002136513e-02f, -1.000977356e-02f, -9.998165340e-03f, -9.986540502e-03f, -9.974899064e-03f, -9.963241047e-03f, -9.951566471e-03f, -9.939875359e-03f, -9.928167731e-03f, -9.916443609e-03f,
+-9.904703013e-03f, -9.892945964e-03f, -9.881172485e-03f, -9.869382596e-03f, -9.857576318e-03f, -9.845753673e-03f, -9.833914683e-03f, -9.822059368e-03f, -9.810187750e-03f, -9.798299850e-03f,
+-9.786395690e-03f, -9.774475291e-03f, -9.762538676e-03f, -9.750585864e-03f, -9.738616879e-03f, -9.726631740e-03f, -9.714630471e-03f, -9.702613093e-03f, -9.690579627e-03f, -9.678530096e-03f,
+-9.666464520e-03f, -9.654382921e-03f, -9.642285322e-03f, -9.630171744e-03f, -9.618042209e-03f, -9.605896739e-03f, -9.593735356e-03f, -9.581558081e-03f, -9.569364936e-03f, -9.557155944e-03f,
+-9.544931127e-03f, -9.532690506e-03f, -9.520434103e-03f, -9.508161941e-03f, -9.495874042e-03f, -9.483570427e-03f, -9.471251120e-03f, -9.458916141e-03f, -9.446565514e-03f, -9.434199260e-03f,
+-9.421817401e-03f, -9.409419961e-03f, -9.397006961e-03f, -9.384578423e-03f, -9.372134371e-03f, -9.359674825e-03f, -9.347199810e-03f, -9.334709346e-03f, -9.322203457e-03f, -9.309682165e-03f,
+-9.297145492e-03f, -9.284593462e-03f, -9.272026096e-03f, -9.259443417e-03f, -9.246845448e-03f, -9.234232212e-03f, -9.221603730e-03f, -9.208960026e-03f, -9.196301122e-03f, -9.183627042e-03f,
+-9.170937807e-03f, -9.158233441e-03f, -9.145513966e-03f, -9.132779406e-03f, -9.120029783e-03f, -9.107265119e-03f, -9.094485439e-03f, -9.081690764e-03f, -9.068881118e-03f, -9.056056524e-03f,
+-9.043217004e-03f, -9.030362582e-03f, -9.017493281e-03f, -9.004609123e-03f, -8.991710133e-03f, -8.978796332e-03f, -8.965867745e-03f, -8.952924394e-03f, -8.939966302e-03f, -8.926993494e-03f,
+-8.914005991e-03f, -8.901003817e-03f, -8.887986996e-03f, -8.874955551e-03f, -8.861909504e-03f, -8.848848881e-03f, -8.835773703e-03f, -8.822683994e-03f, -8.809579779e-03f, -8.796461079e-03f,
+-8.783327919e-03f, -8.770180322e-03f, -8.757018312e-03f, -8.743841912e-03f, -8.730651146e-03f, -8.717446037e-03f, -8.704226609e-03f, -8.690992886e-03f, -8.677744891e-03f, -8.664482648e-03f,
+-8.651206181e-03f, -8.637915513e-03f, -8.624610668e-03f, -8.611291670e-03f, -8.597958543e-03f, -8.584611311e-03f, -8.571249997e-03f, -8.557874626e-03f, -8.544485220e-03f, -8.531081805e-03f,
+-8.517664404e-03f, -8.504233041e-03f, -8.490787739e-03f, -8.477328524e-03f, -8.463855419e-03f, -8.450368448e-03f, -8.436867635e-03f, -8.423353005e-03f, -8.409824581e-03f, -8.396282387e-03f,
+-8.382726448e-03f, -8.369156788e-03f, -8.355573431e-03f, -8.341976402e-03f, -8.328365724e-03f, -8.314741422e-03f, -8.301103520e-03f, -8.287452043e-03f, -8.273787014e-03f, -8.260108459e-03f,
+-8.246416401e-03f, -8.232710866e-03f, -8.218991876e-03f, -8.205259458e-03f, -8.191513635e-03f, -8.177754432e-03f, -8.163981873e-03f, -8.150195984e-03f, -8.136396788e-03f, -8.122584309e-03f,
+-8.108758574e-03f, -8.094919606e-03f, -8.081067430e-03f, -8.067202070e-03f, -8.053323552e-03f, -8.039431900e-03f, -8.025527138e-03f, -8.011609292e-03f, -7.997678387e-03f, -7.983734446e-03f,
+-7.969777496e-03f, -7.955807560e-03f, -7.941824664e-03f, -7.927828832e-03f, -7.913820090e-03f, -7.899798462e-03f, -7.885763973e-03f, -7.871716649e-03f, -7.857656514e-03f, -7.843583593e-03f,
+-7.829497911e-03f, -7.815399494e-03f, -7.801288366e-03f, -7.787164552e-03f, -7.773028078e-03f, -7.758878969e-03f, -7.744717249e-03f, -7.730542945e-03f, -7.716356081e-03f, -7.702156682e-03f,
+-7.687944774e-03f, -7.673720382e-03f, -7.659483531e-03f, -7.645234247e-03f, -7.630972554e-03f, -7.616698479e-03f, -7.602412046e-03f, -7.588113280e-03f, -7.573802208e-03f, -7.559478855e-03f,
+-7.545143246e-03f, -7.530795406e-03f, -7.516435362e-03f, -7.502063138e-03f, -7.487678759e-03f, -7.473282253e-03f, -7.458873643e-03f, -7.444452957e-03f, -7.430020218e-03f, -7.415575453e-03f,
+-7.401118688e-03f, -7.386649948e-03f, -7.372169259e-03f, -7.357676646e-03f, -7.343172135e-03f, -7.328655752e-03f, -7.314127523e-03f, -7.299587473e-03f, -7.285035629e-03f, -7.270472015e-03f,
+-7.255896659e-03f, -7.241309585e-03f, -7.226710819e-03f, -7.212100388e-03f, -7.197478317e-03f, -7.182844632e-03f, -7.168199359e-03f, -7.153542525e-03f, -7.138874154e-03f, -7.124194274e-03f,
+-7.109502909e-03f, -7.094800087e-03f, -7.080085832e-03f, -7.065360172e-03f, -7.050623132e-03f, -7.035874738e-03f, -7.021115017e-03f, -7.006343994e-03f, -6.991561696e-03f, -6.976768148e-03f,
+-6.961963378e-03f, -6.947147411e-03f, -6.932320274e-03f, -6.917481992e-03f, -6.902632592e-03f, -6.887772100e-03f, -6.872900543e-03f, -6.858017947e-03f, -6.843124338e-03f, -6.828219743e-03f,
+-6.813304187e-03f, -6.798377698e-03f, -6.783440301e-03f, -6.768492024e-03f, -6.753532892e-03f, -6.738562932e-03f, -6.723582170e-03f, -6.708590633e-03f, -6.693588348e-03f, -6.678575340e-03f,
+-6.663551637e-03f, -6.648517265e-03f, -6.633472251e-03f, -6.618416621e-03f, -6.603350402e-03f, -6.588273619e-03f, -6.573186301e-03f, -6.558088474e-03f, -6.542980164e-03f, -6.527861398e-03f,
+-6.512732203e-03f, -6.497592605e-03f, -6.482442632e-03f, -6.467282309e-03f, -6.452111664e-03f, -6.436930724e-03f, -6.421739515e-03f, -6.406538064e-03f, -6.391326398e-03f, -6.376104543e-03f,
+-6.360872528e-03f, -6.345630378e-03f, -6.330378120e-03f, -6.315115782e-03f, -6.299843390e-03f, -6.284560971e-03f, -6.269268553e-03f, -6.253966161e-03f, -6.238653824e-03f, -6.223331568e-03f,
+-6.207999420e-03f, -6.192657407e-03f, -6.177305557e-03f, -6.161943896e-03f, -6.146572452e-03f, -6.131191251e-03f, -6.115800320e-03f, -6.100399688e-03f, -6.084989380e-03f, -6.069569425e-03f,
+-6.054139848e-03f, -6.038700679e-03f, -6.023251942e-03f, -6.007793667e-03f, -5.992325880e-03f, -5.976848608e-03f, -5.961361879e-03f, -5.945865720e-03f, -5.930360159e-03f, -5.914845221e-03f,
+-5.899320936e-03f, -5.883787330e-03f, -5.868244430e-03f, -5.852692264e-03f, -5.837130860e-03f, -5.821560244e-03f, -5.805980444e-03f, -5.790391488e-03f, -5.774793403e-03f, -5.759186217e-03f,
+-5.743569956e-03f, -5.727944649e-03f, -5.712310323e-03f, -5.696667005e-03f, -5.681014723e-03f, -5.665353504e-03f, -5.649683377e-03f, -5.634004368e-03f, -5.618316505e-03f, -5.602619817e-03f,
+-5.586914329e-03f, -5.571200071e-03f, -5.555477069e-03f, -5.539745351e-03f, -5.524004946e-03f, -5.508255880e-03f, -5.492498181e-03f, -5.476731878e-03f, -5.460956997e-03f, -5.445173567e-03f,
+-5.429381614e-03f, -5.413581168e-03f, -5.397772256e-03f, -5.381954905e-03f, -5.366129144e-03f, -5.350294999e-03f, -5.334452500e-03f, -5.318601673e-03f, -5.302742547e-03f, -5.286875150e-03f,
+-5.270999508e-03f, -5.255115652e-03f, -5.239223607e-03f, -5.223323402e-03f, -5.207415065e-03f, -5.191498625e-03f, -5.175574108e-03f, -5.159641543e-03f, -5.143700957e-03f, -5.127752380e-03f,
+-5.111795838e-03f, -5.095831360e-03f, -5.079858974e-03f, -5.063878708e-03f, -5.047890589e-03f, -5.031894647e-03f, -5.015890908e-03f, -4.999879402e-03f, -4.983860156e-03f, -4.967833198e-03f,
+-4.951798557e-03f, -4.935756260e-03f, -4.919706336e-03f, -4.903648812e-03f, -4.887583718e-03f, -4.871511081e-03f, -4.855430929e-03f, -4.839343290e-03f, -4.823248194e-03f, -4.807145667e-03f,
+-4.791035739e-03f, -4.774918437e-03f, -4.758793790e-03f, -4.742661826e-03f, -4.726522573e-03f, -4.710376059e-03f, -4.694222314e-03f, -4.678061364e-03f, -4.661893239e-03f, -4.645717967e-03f,
+-4.629535576e-03f, -4.613346094e-03f, -4.597149551e-03f, -4.580945973e-03f, -4.564735390e-03f, -4.548517830e-03f, -4.532293322e-03f, -4.516061893e-03f, -4.499823573e-03f, -4.483578389e-03f,
+-4.467326370e-03f, -4.451067545e-03f, -4.434801942e-03f, -4.418529589e-03f, -4.402250516e-03f, -4.385964750e-03f, -4.369672320e-03f, -4.353373254e-03f, -4.337067582e-03f, -4.320755331e-03f,
+-4.304436530e-03f, -4.288111208e-03f, -4.271779394e-03f, -4.255441115e-03f, -4.239096400e-03f, -4.222745279e-03f, -4.206387779e-03f, -4.190023929e-03f, -4.173653758e-03f, -4.157277295e-03f,
+-4.140894567e-03f, -4.124505605e-03f, -4.108110436e-03f, -4.091709089e-03f, -4.075301593e-03f, -4.058887976e-03f, -4.042468267e-03f, -4.026042495e-03f, -4.009610689e-03f, -3.993172877e-03f,
+-3.976729088e-03f, -3.960279351e-03f, -3.943823695e-03f, -3.927362147e-03f, -3.910894738e-03f, -3.894421495e-03f, -3.877942448e-03f, -3.861457625e-03f, -3.844967056e-03f, -3.828470769e-03f,
+-3.811968792e-03f, -3.795461155e-03f, -3.778947886e-03f, -3.762429015e-03f, -3.745904569e-03f, -3.729374579e-03f, -3.712839073e-03f, -3.696298079e-03f, -3.679751627e-03f, -3.663199745e-03f,
+-3.646642463e-03f, -3.630079809e-03f, -3.613511812e-03f, -3.596938502e-03f, -3.580359906e-03f, -3.563776055e-03f, -3.547186976e-03f, -3.530592699e-03f, -3.513993253e-03f, -3.497388667e-03f,
+-3.480778969e-03f, -3.464164189e-03f, -3.447544356e-03f, -3.430919499e-03f, -3.414289646e-03f, -3.397654827e-03f, -3.381015071e-03f, -3.364370406e-03f, -3.347720863e-03f, -3.331066469e-03f,
+-3.314407253e-03f, -3.297743246e-03f, -3.281074476e-03f, -3.264400971e-03f, -3.247722762e-03f, -3.231039877e-03f, -3.214352345e-03f, -3.197660195e-03f, -3.180963457e-03f, -3.164262159e-03f,
+-3.147556331e-03f, -3.130846001e-03f, -3.114131199e-03f, -3.097411955e-03f, -3.080688296e-03f, -3.063960252e-03f, -3.047227853e-03f, -3.030491127e-03f, -3.013750104e-03f, -2.997004813e-03f,
+-2.980255282e-03f, -2.963501542e-03f, -2.946743621e-03f, -2.929981549e-03f, -2.913215354e-03f, -2.896445066e-03f, -2.879670714e-03f, -2.862892327e-03f, -2.846109935e-03f, -2.829323567e-03f,
+-2.812533251e-03f, -2.795739018e-03f, -2.778940896e-03f, -2.762138914e-03f, -2.745333102e-03f, -2.728523490e-03f, -2.711710105e-03f, -2.694892979e-03f, -2.678072139e-03f, -2.661247615e-03f,
+-2.644419436e-03f, -2.627587632e-03f, -2.610752233e-03f, -2.593913266e-03f, -2.577070761e-03f, -2.560224749e-03f, -2.543375257e-03f, -2.526522316e-03f, -2.509665955e-03f, -2.492806202e-03f,
+-2.475943088e-03f, -2.459076641e-03f, -2.442206892e-03f, -2.425333868e-03f, -2.408457600e-03f, -2.391578117e-03f, -2.374695449e-03f, -2.357809624e-03f, -2.340920671e-03f, -2.324028621e-03f,
+-2.307133503e-03f, -2.290235346e-03f, -2.273334179e-03f, -2.256430031e-03f, -2.239522933e-03f, -2.222612913e-03f, -2.205700001e-03f, -2.188784226e-03f, -2.171865618e-03f, -2.154944206e-03f,
+-2.138020019e-03f, -2.121093086e-03f, -2.104163438e-03f, -2.087231104e-03f, -2.070296112e-03f, -2.053358492e-03f, -2.036418275e-03f, -2.019475488e-03f, -2.002530162e-03f, -1.985582326e-03f,
+-1.968632009e-03f, -1.951679241e-03f, -1.934724051e-03f, -1.917766469e-03f, -1.900806524e-03f, -1.883844245e-03f, -1.866879662e-03f, -1.849912805e-03f, -1.832943702e-03f, -1.815972383e-03f,
+-1.798998878e-03f, -1.782023216e-03f, -1.765045427e-03f, -1.748065540e-03f, -1.731083584e-03f, -1.714099589e-03f, -1.697113584e-03f, -1.680125599e-03f, -1.663135663e-03f, -1.646143806e-03f,
+-1.629150057e-03f, -1.612154446e-03f, -1.595157001e-03f, -1.578157754e-03f, -1.561156732e-03f, -1.544153966e-03f, -1.527149484e-03f, -1.510143317e-03f, -1.493135494e-03f, -1.476126044e-03f,
+-1.459114997e-03f, -1.442102382e-03f, -1.425088229e-03f, -1.408072567e-03f, -1.391055426e-03f, -1.374036835e-03f, -1.357016823e-03f, -1.339995421e-03f, -1.322972657e-03f, -1.305948562e-03f,
+-1.288923164e-03f, -1.271896493e-03f, -1.254868579e-03f, -1.237839450e-03f, -1.220809137e-03f, -1.203777669e-03f, -1.186745076e-03f, -1.169711386e-03f, -1.152676630e-03f, -1.135640837e-03f,
+-1.118604036e-03f, -1.101566257e-03f, -1.084527530e-03f, -1.067487883e-03f, -1.050447346e-03f, -1.033405950e-03f, -1.016363723e-03f, -9.993206940e-04f, -9.822768938e-04f, -9.652323513e-04f,
+-9.481870961e-04f, -9.311411575e-04f, -9.140945652e-04f, -8.970473485e-04f, -8.799995370e-04f, -8.629511601e-04f, -8.459022474e-04f, -8.288528282e-04f, -8.118029321e-04f, -7.947525886e-04f,
+-7.777018271e-04f, -7.606506771e-04f, -7.435991681e-04f, -7.265473296e-04f, -7.094951909e-04f, -6.924427817e-04f, -6.753901313e-04f, -6.583372693e-04f, -6.412842250e-04f, -6.242310280e-04f,
+-6.071777078e-04f, -5.901242938e-04f, -5.730708154e-04f, -5.560173021e-04f, -5.389637834e-04f, -5.219102887e-04f, -5.048568476e-04f, -4.878034894e-04f, -4.707502435e-04f, -4.536971395e-04f,
+-4.366442068e-04f, -4.195914749e-04f, -4.025389731e-04f, -3.854867309e-04f, -3.684347779e-04f, -3.513831433e-04f, -3.343318566e-04f, -3.172809474e-04f, -3.002304449e-04f, -2.831803786e-04f,
+-2.661307781e-04f, -2.490816726e-04f, -2.320330916e-04f, -2.149850645e-04f, -1.979376207e-04f, -1.808907898e-04f, -1.638446009e-04f, -1.467990837e-04f, -1.297542674e-04f, -1.127101815e-04f,
+-9.566685539e-05f, -7.862431844e-05f, -6.158260006e-05f, -4.454172964e-05f, -2.750173657e-05f, -1.046265023e-05f, 6.575500001e-06f, 2.361268474e-05f, 4.064887462e-05f, 5.768404026e-05f,
+7.471815230e-05f, 9.175118138e-05f, 1.087830981e-04f, 1.258138732e-04f, 1.428434772e-04f, 1.598718808e-04f, 1.768990547e-04f, 1.939249696e-04f, 2.109495960e-04f, 2.279729046e-04f,
+2.449948662e-04f, 2.620154514e-04f, 2.790346308e-04f, 2.960523752e-04f, 3.130686552e-04f, 3.300834416e-04f, 3.470967050e-04f, 3.641084160e-04f, 3.811185456e-04f, 3.981270642e-04f,
+4.151339427e-04f, 4.321391517e-04f, 4.491426620e-04f, 4.661444443e-04f, 4.831444693e-04f, 5.001427078e-04f, 5.171391305e-04f, 5.341337081e-04f, 5.511264114e-04f, 5.681172112e-04f,
+5.851060782e-04f, 6.020929831e-04f, 6.190778968e-04f, 6.360607900e-04f, 6.530416334e-04f, 6.700203980e-04f, 6.869970544e-04f, 7.039715734e-04f, 7.209439259e-04f, 7.379140827e-04f,
+7.548820145e-04f, 7.718476922e-04f, 7.888110866e-04f, 8.057721685e-04f, 8.227309088e-04f, 8.396872783e-04f, 8.566412479e-04f, 8.735927883e-04f, 8.905418705e-04f, 9.074884653e-04f,
+9.244325436e-04f, 9.413740762e-04f, 9.583130340e-04f, 9.752493880e-04f, 9.921831090e-04f, 1.009114168e-03f, 1.026042536e-03f, 1.042968183e-03f, 1.059891081e-03f, 1.076811201e-03f,
+1.093728513e-03f, 1.110642988e-03f, 1.127554598e-03f, 1.144463313e-03f, 1.161369105e-03f, 1.178271943e-03f, 1.195171800e-03f, 1.212068646e-03f, 1.228962452e-03f, 1.245853190e-03f,
+1.262740829e-03f, 1.279625342e-03f, 1.296506698e-03f, 1.313384870e-03f, 1.330259828e-03f, 1.347131544e-03f, 1.363999987e-03f, 1.380865130e-03f, 1.397726944e-03f, 1.414585398e-03f,
+1.431440466e-03f, 1.448292116e-03f, 1.465140322e-03f, 1.481985053e-03f, 1.498826281e-03f, 1.515663977e-03f, 1.532498112e-03f, 1.549328657e-03f, 1.566155584e-03f, 1.582978863e-03f,
+1.599798465e-03f, 1.616614363e-03f, 1.633426526e-03f, 1.650234926e-03f, 1.667039535e-03f, 1.683840323e-03f, 1.700637261e-03f, 1.717430322e-03f, 1.734219475e-03f, 1.751004693e-03f,
+1.767785946e-03f, 1.784563206e-03f, 1.801336444e-03f, 1.818105631e-03f, 1.834870739e-03f, 1.851631738e-03f, 1.868388600e-03f, 1.885141297e-03f, 1.901889799e-03f, 1.918634079e-03f,
+1.935374106e-03f, 1.952109853e-03f, 1.968841291e-03f, 1.985568391e-03f, 2.002291125e-03f, 2.019009463e-03f, 2.035723378e-03f, 2.052432841e-03f, 2.069137822e-03f, 2.085838295e-03f,
+2.102534229e-03f, 2.119225596e-03f, 2.135912368e-03f, 2.152594516e-03f, 2.169272012e-03f, 2.185944826e-03f, 2.202612931e-03f, 2.219276299e-03f, 2.235934899e-03f, 2.252588705e-03f,
+2.269237687e-03f, 2.285881817e-03f, 2.302521066e-03f, 2.319155407e-03f, 2.335784810e-03f, 2.352409247e-03f, 2.369028689e-03f, 2.385643109e-03f, 2.402252478e-03f, 2.418856767e-03f,
+2.435455949e-03f, 2.452049994e-03f, 2.468638874e-03f, 2.485222561e-03f, 2.501801026e-03f, 2.518374242e-03f, 2.534942179e-03f, 2.551504811e-03f, 2.568062107e-03f, 2.584614040e-03f,
+2.601160582e-03f, 2.617701704e-03f, 2.634237378e-03f, 2.650767577e-03f, 2.667292270e-03f, 2.683811431e-03f, 2.700325031e-03f, 2.716833042e-03f, 2.733335436e-03f, 2.749832184e-03f,
+2.766323259e-03f, 2.782808632e-03f, 2.799288274e-03f, 2.815762159e-03f, 2.832230257e-03f, 2.848692541e-03f, 2.865148982e-03f, 2.881599553e-03f, 2.898044225e-03f, 2.914482971e-03f,
+2.930915761e-03f, 2.947342569e-03f, 2.963763365e-03f, 2.980178123e-03f, 2.996586814e-03f, 3.012989409e-03f, 3.029385882e-03f, 3.045776204e-03f, 3.062160347e-03f, 3.078538283e-03f,
+3.094909984e-03f, 3.111275423e-03f, 3.127634571e-03f, 3.143987400e-03f, 3.160333883e-03f, 3.176673991e-03f, 3.193007697e-03f, 3.209334974e-03f, 3.225655792e-03f, 3.241970125e-03f,
+3.258277944e-03f, 3.274579221e-03f, 3.290873930e-03f, 3.307162041e-03f, 3.323443528e-03f, 3.339718362e-03f, 3.355986517e-03f, 3.372247963e-03f, 3.388502674e-03f, 3.404750621e-03f,
+3.420991777e-03f, 3.437226115e-03f, 3.453453606e-03f, 3.469674223e-03f, 3.485887939e-03f, 3.502094725e-03f, 3.518294555e-03f, 3.534487400e-03f, 3.550673233e-03f, 3.566852026e-03f,
+3.583023752e-03f, 3.599188384e-03f, 3.615345893e-03f, 3.631496253e-03f, 3.647639435e-03f, 3.663775413e-03f, 3.679904158e-03f, 3.696025644e-03f, 3.712139843e-03f, 3.728246727e-03f,
+3.744346269e-03f, 3.760438442e-03f, 3.776523219e-03f, 3.792600571e-03f, 3.808670472e-03f, 3.824732894e-03f, 3.840787809e-03f, 3.856835192e-03f, 3.872875014e-03f, 3.888907248e-03f,
+3.904931866e-03f, 3.920948842e-03f, 3.936958148e-03f, 3.952959758e-03f, 3.968953643e-03f, 3.984939776e-03f, 4.000918132e-03f, 4.016888681e-03f, 4.032851398e-03f, 4.048806254e-03f,
+4.064753223e-03f, 4.080692279e-03f, 4.096623392e-03f, 4.112546538e-03f, 4.128461688e-03f, 4.144368815e-03f, 4.160267893e-03f, 4.176158894e-03f, 4.192041792e-03f, 4.207916559e-03f,
+4.223783169e-03f, 4.239641595e-03f, 4.255491808e-03f, 4.271333784e-03f, 4.287167495e-03f, 4.302992913e-03f, 4.318810012e-03f, 4.334618766e-03f, 4.350419147e-03f, 4.366211128e-03f,
+4.381994683e-03f, 4.397769785e-03f, 4.413536407e-03f, 4.429294523e-03f, 4.445044105e-03f, 4.460785127e-03f, 4.476517562e-03f, 4.492241384e-03f, 4.507956565e-03f, 4.523663080e-03f,
+4.539360901e-03f, 4.555050002e-03f, 4.570730356e-03f, 4.586401937e-03f, 4.602064718e-03f, 4.617718673e-03f, 4.633363774e-03f, 4.648999996e-03f, 4.664627312e-03f, 4.680245695e-03f,
+4.695855120e-03f, 4.711455558e-03f, 4.727046985e-03f, 4.742629374e-03f, 4.758202697e-03f, 4.773766930e-03f, 4.789322045e-03f, 4.804868016e-03f, 4.820404816e-03f, 4.835932421e-03f,
+4.851450802e-03f, 4.866959934e-03f, 4.882459790e-03f, 4.897950345e-03f, 4.913431572e-03f, 4.928903445e-03f, 4.944365937e-03f, 4.959819023e-03f, 4.975262676e-03f, 4.990696870e-03f,
+5.006121579e-03f, 5.021536778e-03f, 5.036942438e-03f, 5.052338536e-03f, 5.067725044e-03f, 5.083101937e-03f, 5.098469188e-03f, 5.113826772e-03f, 5.129174663e-03f, 5.144512834e-03f,
+5.159841260e-03f, 5.175159914e-03f, 5.190468771e-03f, 5.205767806e-03f, 5.221056991e-03f, 5.236336301e-03f, 5.251605711e-03f, 5.266865194e-03f, 5.282114725e-03f, 5.297354278e-03f,
+5.312583827e-03f, 5.327803347e-03f, 5.343012811e-03f, 5.358212194e-03f, 5.373401470e-03f, 5.388580614e-03f, 5.403749600e-03f, 5.418908403e-03f, 5.434056996e-03f, 5.449195354e-03f,
+5.464323451e-03f, 5.479441263e-03f, 5.494548763e-03f, 5.509645926e-03f, 5.524732726e-03f, 5.539809139e-03f, 5.554875137e-03f, 5.569930697e-03f, 5.584975792e-03f, 5.600010398e-03f,
+5.615034488e-03f, 5.630048038e-03f, 5.645051022e-03f, 5.660043414e-03f, 5.675025191e-03f, 5.689996325e-03f, 5.704956792e-03f, 5.719906567e-03f, 5.734845624e-03f, 5.749773939e-03f,
+5.764691486e-03f, 5.779598239e-03f, 5.794494174e-03f, 5.809379266e-03f, 5.824253490e-03f, 5.839116819e-03f, 5.853969230e-03f, 5.868810698e-03f, 5.883641197e-03f, 5.898460702e-03f,
+5.913269188e-03f, 5.928066630e-03f, 5.942853004e-03f, 5.957628285e-03f, 5.972392447e-03f, 5.987145466e-03f, 6.001887316e-03f, 6.016617974e-03f, 6.031337413e-03f, 6.046045610e-03f,
+6.060742540e-03f, 6.075428177e-03f, 6.090102497e-03f, 6.104765476e-03f, 6.119417089e-03f, 6.134057310e-03f, 6.148686116e-03f, 6.163303482e-03f, 6.177909382e-03f, 6.192503793e-03f,
+6.207086690e-03f, 6.221658049e-03f, 6.236217844e-03f, 6.250766052e-03f, 6.265302647e-03f, 6.279827606e-03f, 6.294340904e-03f, 6.308842517e-03f, 6.323332419e-03f, 6.337810588e-03f,
+6.352276998e-03f, 6.366731625e-03f, 6.381174444e-03f, 6.395605433e-03f, 6.410024565e-03f, 6.424431818e-03f, 6.438827166e-03f, 6.453210586e-03f, 6.467582053e-03f, 6.481941543e-03f,
+6.496289033e-03f, 6.510624497e-03f, 6.524947913e-03f, 6.539259255e-03f, 6.553558500e-03f, 6.567845623e-03f, 6.582120602e-03f, 6.596383411e-03f, 6.610634027e-03f, 6.624872426e-03f,
+6.639098583e-03f, 6.653312476e-03f, 6.667514080e-03f, 6.681703372e-03f, 6.695880327e-03f, 6.710044921e-03f, 6.724197132e-03f, 6.738336935e-03f, 6.752464306e-03f, 6.766579222e-03f,
+6.780681659e-03f, 6.794771594e-03f, 6.808849002e-03f, 6.822913860e-03f, 6.836966145e-03f, 6.851005833e-03f, 6.865032900e-03f, 6.879047323e-03f, 6.893049079e-03f, 6.907038144e-03f,
+6.921014494e-03f, 6.934978106e-03f, 6.948928956e-03f, 6.962867022e-03f, 6.976792280e-03f, 6.990704706e-03f, 7.004604278e-03f, 7.018490971e-03f, 7.032364763e-03f, 7.046225631e-03f,
+7.060073550e-03f, 7.073908499e-03f, 7.087730453e-03f, 7.101539390e-03f, 7.115335287e-03f, 7.129118120e-03f, 7.142887867e-03f, 7.156644503e-03f, 7.170388007e-03f, 7.184118356e-03f,
+7.197835525e-03f, 7.211539493e-03f, 7.225230236e-03f, 7.238907732e-03f, 7.252571957e-03f, 7.266222889e-03f, 7.279860505e-03f, 7.293484782e-03f, 7.307095698e-03f, 7.320693228e-03f,
+7.334277352e-03f, 7.347848045e-03f, 7.361405286e-03f, 7.374949052e-03f, 7.388479320e-03f, 7.401996067e-03f, 7.415499271e-03f, 7.428988909e-03f, 7.442464959e-03f, 7.455927398e-03f,
+7.469376204e-03f, 7.482811354e-03f, 7.496232826e-03f, 7.509640597e-03f, 7.523034645e-03f, 7.536414948e-03f, 7.549781483e-03f, 7.563134228e-03f, 7.576473161e-03f, 7.589798259e-03f,
+7.603109500e-03f, 7.616406862e-03f, 7.629690322e-03f, 7.642959860e-03f, 7.656215451e-03f, 7.669457075e-03f, 7.682684709e-03f, 7.695898331e-03f, 7.709097920e-03f, 7.722283452e-03f,
+7.735454906e-03f, 7.748612261e-03f, 7.761755493e-03f, 7.774884582e-03f, 7.787999505e-03f, 7.801100241e-03f, 7.814186767e-03f, 7.827259062e-03f, 7.840317104e-03f, 7.853360871e-03f,
+7.866390342e-03f, 7.879405495e-03f, 7.892406308e-03f, 7.905392759e-03f, 7.918364827e-03f, 7.931322491e-03f, 7.944265728e-03f, 7.957194517e-03f, 7.970108837e-03f, 7.983008666e-03f,
+7.995893982e-03f, 8.008764765e-03f, 8.021620992e-03f, 8.034462643e-03f, 8.047289695e-03f, 8.060102129e-03f, 8.072899921e-03f, 8.085683052e-03f, 8.098451499e-03f, 8.111205242e-03f,
+8.123944259e-03f, 8.136668530e-03f, 8.149378032e-03f, 8.162072745e-03f, 8.174752648e-03f, 8.187417720e-03f, 8.200067939e-03f, 8.212703285e-03f, 8.225323736e-03f, 8.237929272e-03f,
+8.250519871e-03f, 8.263095514e-03f, 8.275656178e-03f, 8.288201843e-03f, 8.300732489e-03f, 8.313248093e-03f, 8.325748637e-03f, 8.338234098e-03f, 8.350704456e-03f, 8.363159691e-03f,
+8.375599781e-03f, 8.388024706e-03f, 8.400434446e-03f, 8.412828980e-03f, 8.425208287e-03f, 8.437572347e-03f, 8.449921139e-03f, 8.462254643e-03f, 8.474572838e-03f, 8.486875704e-03f,
+8.499163221e-03f, 8.511435368e-03f, 8.523692124e-03f, 8.535933471e-03f, 8.548159386e-03f, 8.560369850e-03f, 8.572564843e-03f, 8.584744344e-03f, 8.596908334e-03f, 8.609056792e-03f,
+8.621189698e-03f, 8.633307032e-03f, 8.645408774e-03f, 8.657494904e-03f, 8.669565402e-03f, 8.681620247e-03f, 8.693659421e-03f, 8.705682902e-03f, 8.717690672e-03f, 8.729682709e-03f,
+8.741658996e-03f, 8.753619511e-03f, 8.765564234e-03f, 8.777493147e-03f, 8.789406229e-03f, 8.801303461e-03f, 8.813184822e-03f, 8.825050294e-03f, 8.836899857e-03f, 8.848733491e-03f,
+8.860551177e-03f, 8.872352894e-03f, 8.884138624e-03f, 8.895908347e-03f, 8.907662044e-03f, 8.919399695e-03f, 8.931121281e-03f, 8.942826783e-03f, 8.954516181e-03f, 8.966189455e-03f,
+8.977846587e-03f, 8.989487558e-03f, 9.001112348e-03f, 9.012720938e-03f, 9.024313308e-03f, 9.035889441e-03f, 9.047449316e-03f, 9.058992914e-03f, 9.070520217e-03f, 9.082031206e-03f,
+9.093525861e-03f, 9.105004164e-03f, 9.116466096e-03f, 9.127911637e-03f, 9.139340770e-03f, 9.150753474e-03f, 9.162149732e-03f, 9.173529524e-03f, 9.184892832e-03f, 9.196239638e-03f,
+9.207569921e-03f, 9.218883665e-03f, 9.230180850e-03f, 9.241461457e-03f, 9.252725468e-03f, 9.263972865e-03f, 9.275203628e-03f, 9.286417741e-03f, 9.297615183e-03f, 9.308795936e-03f,
+9.319959984e-03f, 9.331107305e-03f, 9.342237884e-03f, 9.353351701e-03f, 9.364448738e-03f, 9.375528976e-03f, 9.386592398e-03f, 9.397638986e-03f, 9.408668720e-03f, 9.419681584e-03f,
+9.430677559e-03f, 9.441656627e-03f, 9.452618770e-03f, 9.463563970e-03f, 9.474492209e-03f, 9.485403469e-03f, 9.496297732e-03f, 9.507174981e-03f, 9.518035197e-03f, 9.528878362e-03f,
+9.539704460e-03f, 9.550513471e-03f, 9.561305379e-03f, 9.572080166e-03f, 9.582837814e-03f, 9.593578305e-03f, 9.604301622e-03f, 9.615007747e-03f, 9.625696663e-03f, 9.636368353e-03f,
+9.647022798e-03f, 9.657659981e-03f, 9.668279885e-03f, 9.678882493e-03f, 9.689467786e-03f, 9.700035749e-03f, 9.710586363e-03f, 9.721119612e-03f, 9.731635477e-03f, 9.742133942e-03f,
+9.752614990e-03f, 9.763078604e-03f, 9.773524766e-03f, 9.783953459e-03f, 9.794364667e-03f, 9.804758372e-03f, 9.815134557e-03f, 9.825493206e-03f, 9.835834301e-03f, 9.846157826e-03f,
+9.856463764e-03f, 9.866752097e-03f, 9.877022810e-03f, 9.887275885e-03f, 9.897511305e-03f, 9.907729055e-03f, 9.917929117e-03f, 9.928111474e-03f, 9.938276110e-03f, 9.948423009e-03f,
+9.958552154e-03f, 9.968663528e-03f, 9.978757115e-03f, 9.988832899e-03f, 9.998890862e-03f, 1.000893099e-02f, 1.001895326e-02f, 1.002895767e-02f, 1.003894419e-02f, 1.004891281e-02f,
+1.005886351e-02f, 1.006879628e-02f, 1.007871109e-02f, 1.008860794e-02f, 1.009848681e-02f, 1.010834768e-02f, 1.011819054e-02f, 1.012801536e-02f, 1.013782214e-02f, 1.014761086e-02f,
+1.015738150e-02f, 1.016713404e-02f, 1.017686848e-02f, 1.018658478e-02f, 1.019628295e-02f, 1.020596296e-02f, 1.021562480e-02f, 1.022526844e-02f, 1.023489389e-02f, 1.024450111e-02f,
+1.025409010e-02f, 1.026366084e-02f, 1.027321331e-02f, 1.028274750e-02f, 1.029226339e-02f, 1.030176097e-02f, 1.031124022e-02f, 1.032070112e-02f, 1.033014367e-02f, 1.033956784e-02f,
+1.034897362e-02f, 1.035836100e-02f, 1.036772996e-02f, 1.037708048e-02f, 1.038641256e-02f, 1.039572617e-02f, 1.040502129e-02f, 1.041429792e-02f, 1.042355605e-02f, 1.043279564e-02f,
+1.044201670e-02f, 1.045121920e-02f, 1.046040313e-02f, 1.046956847e-02f, 1.047871522e-02f, 1.048784335e-02f, 1.049695285e-02f, 1.050604371e-02f, 1.051511591e-02f, 1.052416944e-02f,
+1.053320428e-02f, 1.054222041e-02f, 1.055121783e-02f, 1.056019652e-02f, 1.056915646e-02f, 1.057809764e-02f, 1.058702005e-02f, 1.059592367e-02f, 1.060480848e-02f, 1.061367448e-02f,
+1.062252165e-02f, 1.063134996e-02f, 1.064015942e-02f, 1.064895001e-02f, 1.065772170e-02f, 1.066647449e-02f, 1.067520837e-02f, 1.068392331e-02f, 1.069261931e-02f, 1.070129635e-02f,
+1.070995442e-02f, 1.071859350e-02f, 1.072721358e-02f, 1.073581464e-02f, 1.074439668e-02f, 1.075295968e-02f, 1.076150362e-02f, 1.077002849e-02f, 1.077853427e-02f, 1.078702096e-02f,
+1.079548854e-02f, 1.080393700e-02f, 1.081236632e-02f, 1.082077649e-02f, 1.082916749e-02f, 1.083753932e-02f, 1.084589195e-02f, 1.085422538e-02f, 1.086253959e-02f, 1.087083457e-02f,
+1.087911031e-02f, 1.088736679e-02f, 1.089560399e-02f, 1.090382192e-02f, 1.091202054e-02f, 1.092019986e-02f, 1.092835985e-02f, 1.093650051e-02f, 1.094462182e-02f, 1.095272376e-02f,
+1.096080633e-02f, 1.096886951e-02f, 1.097691329e-02f, 1.098493766e-02f, 1.099294260e-02f, 1.100092810e-02f, 1.100889415e-02f, 1.101684073e-02f, 1.102476784e-02f, 1.103267546e-02f,
+1.104056357e-02f, 1.104843217e-02f, 1.105628124e-02f, 1.106411078e-02f, 1.107192075e-02f, 1.107971117e-02f, 1.108748201e-02f, 1.109523325e-02f, 1.110296490e-02f, 1.111067693e-02f,
+1.111836934e-02f, 1.112604210e-02f, 1.113369522e-02f, 1.114132867e-02f, 1.114894245e-02f, 1.115653654e-02f, 1.116411094e-02f, 1.117166562e-02f, 1.117920058e-02f, 1.118671580e-02f,
+1.119421128e-02f, 1.120168699e-02f, 1.120914294e-02f, 1.121657911e-02f, 1.122399548e-02f, 1.123139204e-02f, 1.123876879e-02f, 1.124612571e-02f, 1.125346279e-02f, 1.126078002e-02f,
+1.126807738e-02f, 1.127535487e-02f, 1.128261247e-02f, 1.128985017e-02f, 1.129706796e-02f, 1.130426583e-02f, 1.131144377e-02f, 1.131860177e-02f, 1.132573981e-02f, 1.133285789e-02f,
+1.133995599e-02f, 1.134703410e-02f, 1.135409221e-02f, 1.136113031e-02f, 1.136814839e-02f, 1.137514643e-02f, 1.138212444e-02f, 1.138908238e-02f, 1.139602027e-02f, 1.140293807e-02f,
+1.140983579e-02f, 1.141671341e-02f, 1.142357093e-02f, 1.143040832e-02f, 1.143722558e-02f, 1.144402271e-02f, 1.145079968e-02f, 1.145755649e-02f, 1.146429312e-02f, 1.147100958e-02f,
+1.147770584e-02f, 1.148438189e-02f, 1.149103774e-02f, 1.149767335e-02f, 1.150428873e-02f, 1.151088387e-02f, 1.151745875e-02f, 1.152401337e-02f, 1.153054771e-02f, 1.153706176e-02f,
+1.154355552e-02f, 1.155002897e-02f, 1.155648210e-02f, 1.156291491e-02f, 1.156932738e-02f, 1.157571950e-02f, 1.158209127e-02f, 1.158844267e-02f, 1.159477370e-02f, 1.160108433e-02f,
+1.160737458e-02f, 1.161364442e-02f, 1.161989384e-02f, 1.162612284e-02f, 1.163233140e-02f, 1.163851952e-02f, 1.164468719e-02f, 1.165083439e-02f, 1.165696112e-02f, 1.166306737e-02f,
+1.166915313e-02f, 1.167521839e-02f, 1.168126313e-02f, 1.168728736e-02f, 1.169329106e-02f, 1.169927422e-02f, 1.170523684e-02f, 1.171117889e-02f, 1.171710039e-02f, 1.172300130e-02f,
+1.172888164e-02f, 1.173474138e-02f, 1.174058052e-02f, 1.174639905e-02f, 1.175219696e-02f, 1.175797424e-02f, 1.176373089e-02f, 1.176946688e-02f, 1.177518223e-02f, 1.178087691e-02f,
+1.178655092e-02f, 1.179220425e-02f, 1.179783689e-02f, 1.180344883e-02f, 1.180904006e-02f, 1.181461058e-02f, 1.182016038e-02f, 1.182568944e-02f, 1.183119777e-02f, 1.183668534e-02f,
+1.184215216e-02f, 1.184759822e-02f, 1.185302350e-02f, 1.185842799e-02f, 1.186381170e-02f, 1.186917461e-02f, 1.187451672e-02f, 1.187983801e-02f, 1.188513848e-02f, 1.189041811e-02f,
+1.189567691e-02f, 1.190091486e-02f, 1.190613196e-02f, 1.191132820e-02f, 1.191650357e-02f, 1.192165806e-02f, 1.192679166e-02f, 1.193190437e-02f, 1.193699619e-02f, 1.194206709e-02f,
+1.194711707e-02f, 1.195214614e-02f, 1.195715427e-02f, 1.196214146e-02f, 1.196710771e-02f, 1.197205301e-02f, 1.197697734e-02f, 1.198188071e-02f, 1.198676310e-02f, 1.199162451e-02f,
+1.199646493e-02f, 1.200128435e-02f, 1.200608276e-02f, 1.201086017e-02f, 1.201561656e-02f, 1.202035192e-02f, 1.202506625e-02f, 1.202975954e-02f, 1.203443178e-02f, 1.203908297e-02f,
+1.204371310e-02f, 1.204832216e-02f, 1.205291015e-02f, 1.205747706e-02f, 1.206202288e-02f, 1.206654761e-02f, 1.207105124e-02f, 1.207553376e-02f, 1.207999516e-02f, 1.208443545e-02f,
+1.208885461e-02f, 1.209325263e-02f, 1.209762952e-02f, 1.210198526e-02f, 1.210631985e-02f, 1.211063328e-02f, 1.211492554e-02f, 1.211919663e-02f, 1.212344655e-02f, 1.212767528e-02f,
+1.213188282e-02f, 1.213606917e-02f, 1.214023431e-02f, 1.214437825e-02f, 1.214850097e-02f, 1.215260247e-02f, 1.215668275e-02f, 1.216074179e-02f, 1.216477960e-02f, 1.216879616e-02f,
+1.217279148e-02f, 1.217676554e-02f, 1.218071834e-02f, 1.218464987e-02f, 1.218856013e-02f, 1.219244912e-02f, 1.219631682e-02f, 1.220016323e-02f, 1.220398835e-02f, 1.220779217e-02f,
+1.221157469e-02f, 1.221533589e-02f, 1.221907578e-02f, 1.222279435e-02f, 1.222649160e-02f, 1.223016751e-02f, 1.223382209e-02f, 1.223745532e-02f, 1.224106721e-02f, 1.224465775e-02f,
+1.224822693e-02f, 1.225177475e-02f, 1.225530121e-02f, 1.225880629e-02f, 1.226229000e-02f, 1.226575232e-02f, 1.226919326e-02f, 1.227261281e-02f, 1.227601096e-02f, 1.227938772e-02f,
+1.228274307e-02f, 1.228607701e-02f, 1.228938953e-02f, 1.229268064e-02f, 1.229595033e-02f, 1.229919858e-02f, 1.230242541e-02f, 1.230563080e-02f, 1.230881475e-02f, 1.231197726e-02f,
+1.231511831e-02f, 1.231823791e-02f, 1.232133606e-02f, 1.232441274e-02f, 1.232746796e-02f, 1.233050171e-02f, 1.233351398e-02f, 1.233650478e-02f, 1.233947409e-02f, 1.234242192e-02f,
+1.234534826e-02f, 1.234825311e-02f, 1.235113646e-02f, 1.235399830e-02f, 1.235683864e-02f, 1.235965748e-02f, 1.236245480e-02f, 1.236523060e-02f, 1.236798489e-02f, 1.237071765e-02f,
+1.237342889e-02f, 1.237611859e-02f, 1.237878676e-02f, 1.238143340e-02f, 1.238405849e-02f, 1.238666204e-02f, 1.238924405e-02f, 1.239180450e-02f, 1.239434340e-02f, 1.239686075e-02f,
+1.239935653e-02f, 1.240183075e-02f, 1.240428340e-02f, 1.240671449e-02f, 1.240912400e-02f, 1.241151194e-02f, 1.241387830e-02f, 1.241622308e-02f, 1.241854627e-02f, 1.242084788e-02f,
+1.242312790e-02f, 1.242538633e-02f, 1.242762316e-02f, 1.242983840e-02f, 1.243203203e-02f, 1.243420406e-02f, 1.243635449e-02f, 1.243848331e-02f, 1.244059052e-02f, 1.244267611e-02f,
+1.244474009e-02f, 1.244678246e-02f, 1.244880320e-02f, 1.245080232e-02f, 1.245277982e-02f, 1.245473569e-02f, 1.245666993e-02f, 1.245858254e-02f, 1.246047352e-02f, 1.246234287e-02f,
+1.246419057e-02f, 1.246601664e-02f, 1.246782106e-02f, 1.246960385e-02f, 1.247136499e-02f, 1.247310448e-02f, 1.247482232e-02f, 1.247651851e-02f, 1.247819305e-02f, 1.247984594e-02f,
+1.248147717e-02f, 1.248308675e-02f, 1.248467466e-02f, 1.248624092e-02f, 1.248778551e-02f, 1.248930844e-02f, 1.249080971e-02f, 1.249228931e-02f, 1.249374725e-02f, 1.249518351e-02f,
+1.249659811e-02f, 1.249799103e-02f, 1.249936228e-02f, 1.250071186e-02f, 1.250203977e-02f, 1.250334600e-02f, 1.250463055e-02f, 1.250589342e-02f, 1.250713462e-02f, 1.250835413e-02f,
+1.250955197e-02f, 1.251072812e-02f, 1.251188259e-02f, 1.251301538e-02f, 1.251412648e-02f, 1.251521590e-02f, 1.251628364e-02f, 1.251732969e-02f, 1.251835405e-02f, 1.251935673e-02f,
+1.252033771e-02f, 1.252129701e-02f, 1.252223462e-02f, 1.252315055e-02f, 1.252404478e-02f, 1.252491732e-02f, 1.252576818e-02f, 1.252659734e-02f, 1.252740481e-02f, 1.252819059e-02f,
+1.252895468e-02f, 1.252969708e-02f, 1.253041779e-02f, 1.253111681e-02f, 1.253179414e-02f, 1.253244977e-02f, 1.253308372e-02f, 1.253369597e-02f, 1.253428654e-02f, 1.253485541e-02f,
+1.253540259e-02f, 1.253592808e-02f, 1.253643189e-02f, 1.253691400e-02f, 1.253737442e-02f, 1.253781316e-02f, 1.253823021e-02f, 1.253862556e-02f, 1.253899924e-02f, 1.253935122e-02f,
+1.253968152e-02f, 1.253999014e-02f, 1.254027706e-02f, 1.254054231e-02f, 1.254078587e-02f, 1.254100775e-02f, 1.254120795e-02f, 1.254138646e-02f, 1.254154330e-02f, 1.254167846e-02f,
+1.254179194e-02f, 1.254188374e-02f, 1.254195387e-02f, 1.254200232e-02f, 1.254202909e-02f, 1.254203420e-02f, 1.254201763e-02f, 1.254197939e-02f, 1.254191949e-02f, 1.254183791e-02f,
+1.254173467e-02f, 1.254160977e-02f, 1.254146320e-02f, 1.254129497e-02f, 1.254110508e-02f, 1.254089353e-02f, 1.254066032e-02f, 1.254040545e-02f, 1.254012893e-02f, 1.253983076e-02f,
+1.253951094e-02f, 1.253916947e-02f, 1.253880635e-02f, 1.253842159e-02f, 1.253801518e-02f, 1.253758713e-02f, 1.253713744e-02f, 1.253666611e-02f, 1.253617315e-02f, 1.253565855e-02f,
+1.253512232e-02f, 1.253456446e-02f, 1.253398498e-02f, 1.253338386e-02f, 1.253276113e-02f, 1.253211677e-02f, 1.253145080e-02f, 1.253076321e-02f, 1.253005401e-02f, 1.252932319e-02f,
+1.252857077e-02f, 1.252779674e-02f, 1.252700111e-02f, 1.252618387e-02f, 1.252534504e-02f, 1.252448461e-02f, 1.252360258e-02f, 1.252269897e-02f, 1.252177377e-02f, 1.252082698e-02f,
+1.251985861e-02f, 1.251886867e-02f, 1.251785714e-02f, 1.251682404e-02f, 1.251576938e-02f, 1.251469314e-02f, 1.251359534e-02f, 1.251247598e-02f, 1.251133506e-02f, 1.251017258e-02f,
+1.250898855e-02f, 1.250778298e-02f, 1.250655586e-02f, 1.250530720e-02f, 1.250403699e-02f, 1.250274526e-02f, 1.250143199e-02f, 1.250009719e-02f, 1.249874087e-02f, 1.249736302e-02f,
+1.249596366e-02f, 1.249454279e-02f, 1.249310040e-02f, 1.249163651e-02f, 1.249015111e-02f, 1.248864421e-02f, 1.248711582e-02f, 1.248556594e-02f, 1.248399457e-02f, 1.248240171e-02f,
+1.248078738e-02f, 1.247915157e-02f, 1.247749428e-02f, 1.247581553e-02f, 1.247411531e-02f, 1.247239364e-02f, 1.247065051e-02f, 1.246888592e-02f, 1.246709989e-02f, 1.246529242e-02f,
+1.246346351e-02f, 1.246161316e-02f, 1.245974139e-02f, 1.245784819e-02f, 1.245593356e-02f, 1.245399752e-02f, 1.245204007e-02f, 1.245006122e-02f, 1.244806095e-02f, 1.244603929e-02f,
+1.244399624e-02f, 1.244193180e-02f, 1.243984597e-02f, 1.243773877e-02f, 1.243561019e-02f, 1.243346024e-02f, 1.243128892e-02f, 1.242909625e-02f, 1.242688222e-02f, 1.242464684e-02f,
+1.242239011e-02f, 1.242011205e-02f, 1.241781265e-02f, 1.241549192e-02f, 1.241314987e-02f, 1.241078650e-02f, 1.240840182e-02f, 1.240599582e-02f, 1.240356853e-02f, 1.240111993e-02f,
+1.239865005e-02f, 1.239615887e-02f, 1.239364642e-02f, 1.239111269e-02f, 1.238855769e-02f, 1.238598142e-02f, 1.238338389e-02f, 1.238076512e-02f, 1.237812509e-02f, 1.237546382e-02f,
+1.237278131e-02f, 1.237007758e-02f, 1.236735262e-02f, 1.236460644e-02f, 1.236183905e-02f, 1.235905045e-02f, 1.235624065e-02f, 1.235340966e-02f, 1.235055747e-02f, 1.234768411e-02f,
+1.234478956e-02f, 1.234187385e-02f, 1.233893697e-02f, 1.233597894e-02f, 1.233299975e-02f, 1.232999942e-02f, 1.232697795e-02f, 1.232393534e-02f, 1.232087161e-02f, 1.231778676e-02f,
+1.231468080e-02f, 1.231155373e-02f, 1.230840556e-02f, 1.230523630e-02f, 1.230204595e-02f, 1.229883452e-02f, 1.229560201e-02f, 1.229234844e-02f, 1.228907381e-02f, 1.228577813e-02f,
+1.228246140e-02f, 1.227912363e-02f, 1.227576482e-02f, 1.227238500e-02f, 1.226898415e-02f, 1.226556229e-02f, 1.226211943e-02f, 1.225865557e-02f, 1.225517072e-02f, 1.225166489e-02f,
+1.224813808e-02f, 1.224459030e-02f, 1.224102156e-02f, 1.223743187e-02f, 1.223382123e-02f, 1.223018965e-02f, 1.222653714e-02f, 1.222286371e-02f, 1.221916936e-02f, 1.221545410e-02f,
+1.221171794e-02f, 1.220796088e-02f, 1.220418294e-02f, 1.220038412e-02f, 1.219656443e-02f, 1.219272387e-02f, 1.218886246e-02f, 1.218498020e-02f, 1.218107710e-02f, 1.217715317e-02f,
+1.217320842e-02f, 1.216924285e-02f, 1.216525647e-02f, 1.216124930e-02f, 1.215722133e-02f, 1.215317257e-02f, 1.214910304e-02f, 1.214501275e-02f, 1.214090169e-02f, 1.213676988e-02f,
+1.213261733e-02f, 1.212844405e-02f, 1.212425004e-02f, 1.212003531e-02f, 1.211579988e-02f, 1.211154374e-02f, 1.210726691e-02f, 1.210296939e-02f, 1.209865121e-02f, 1.209431235e-02f,
+1.208995284e-02f, 1.208557267e-02f, 1.208117187e-02f, 1.207675044e-02f, 1.207230838e-02f, 1.206784571e-02f, 1.206336243e-02f, 1.205885855e-02f, 1.205433409e-02f, 1.204978905e-02f,
+1.204522344e-02f, 1.204063727e-02f, 1.203603055e-02f, 1.203140328e-02f, 1.202675549e-02f, 1.202208716e-02f, 1.201739833e-02f, 1.201268898e-02f, 1.200795914e-02f, 1.200320882e-02f,
+1.199843801e-02f, 1.199364674e-02f, 1.198883501e-02f, 1.198400283e-02f, 1.197915020e-02f, 1.197427715e-02f, 1.196938368e-02f, 1.196446979e-02f, 1.195953551e-02f, 1.195458083e-02f,
+1.194960576e-02f, 1.194461033e-02f, 1.193959453e-02f, 1.193455838e-02f, 1.192950189e-02f, 1.192442506e-02f, 1.191932791e-02f, 1.191421044e-02f, 1.190907267e-02f, 1.190391461e-02f,
+1.189873626e-02f, 1.189353764e-02f, 1.188831876e-02f, 1.188307962e-02f, 1.187782024e-02f, 1.187254062e-02f, 1.186724078e-02f, 1.186192073e-02f, 1.185658048e-02f, 1.185122004e-02f,
+1.184583941e-02f, 1.184043861e-02f, 1.183501766e-02f, 1.182957655e-02f, 1.182411530e-02f, 1.181863392e-02f, 1.181313243e-02f, 1.180761082e-02f, 1.180206912e-02f, 1.179650733e-02f,
+1.179092547e-02f, 1.178532354e-02f, 1.177970156e-02f, 1.177405953e-02f, 1.176839747e-02f, 1.176271539e-02f, 1.175701329e-02f, 1.175129120e-02f, 1.174554912e-02f, 1.173978706e-02f,
+1.173400503e-02f, 1.172820305e-02f, 1.172238112e-02f, 1.171653926e-02f, 1.171067748e-02f, 1.170479578e-02f, 1.169889419e-02f, 1.169297270e-02f, 1.168703134e-02f, 1.168107012e-02f,
+1.167508904e-02f, 1.166908811e-02f, 1.166306736e-02f, 1.165702678e-02f, 1.165096640e-02f, 1.164488621e-02f, 1.163878625e-02f, 1.163266651e-02f, 1.162652700e-02f, 1.162036775e-02f,
+1.161418876e-02f, 1.160799004e-02f, 1.160177160e-02f, 1.159553347e-02f, 1.158927564e-02f, 1.158299813e-02f, 1.157670095e-02f, 1.157038412e-02f, 1.156404764e-02f, 1.155769153e-02f,
+1.155131581e-02f, 1.154492047e-02f, 1.153850554e-02f, 1.153207103e-02f, 1.152561694e-02f, 1.151914330e-02f, 1.151265011e-02f, 1.150613739e-02f, 1.149960514e-02f, 1.149305338e-02f,
+1.148648213e-02f, 1.147989139e-02f, 1.147328118e-02f, 1.146665151e-02f, 1.146000240e-02f, 1.145333385e-02f, 1.144664587e-02f, 1.143993849e-02f, 1.143321171e-02f, 1.142646555e-02f,
+1.141970001e-02f, 1.141291512e-02f, 1.140611088e-02f, 1.139928730e-02f, 1.139244441e-02f, 1.138558221e-02f, 1.137870071e-02f, 1.137179994e-02f, 1.136487989e-02f, 1.135794059e-02f,
+1.135098205e-02f, 1.134400428e-02f, 1.133700729e-02f, 1.132999110e-02f, 1.132295571e-02f, 1.131590116e-02f, 1.130882744e-02f, 1.130173456e-02f, 1.129462256e-02f, 1.128749142e-02f,
+1.128034118e-02f, 1.127317184e-02f, 1.126598342e-02f, 1.125877593e-02f, 1.125154938e-02f, 1.124430379e-02f, 1.123703917e-02f, 1.122975553e-02f, 1.122245290e-02f, 1.121513127e-02f,
+1.120779067e-02f, 1.120043111e-02f, 1.119305260e-02f, 1.118565516e-02f, 1.117823880e-02f, 1.117080353e-02f, 1.116334937e-02f, 1.115587633e-02f, 1.114838443e-02f, 1.114087368e-02f,
+1.113334410e-02f, 1.112579569e-02f, 1.111822847e-02f, 1.111064246e-02f, 1.110303767e-02f, 1.109541412e-02f, 1.108777181e-02f, 1.108011077e-02f, 1.107243100e-02f, 1.106473253e-02f,
+1.105701536e-02f, 1.104927951e-02f, 1.104152500e-02f, 1.103375184e-02f, 1.102596004e-02f, 1.101814962e-02f, 1.101032059e-02f, 1.100247296e-02f, 1.099460676e-02f, 1.098672200e-02f,
+1.097881869e-02f, 1.097089684e-02f, 1.096295647e-02f, 1.095499760e-02f, 1.094702024e-02f, 1.093902440e-02f, 1.093101010e-02f, 1.092297736e-02f, 1.091492618e-02f, 1.090685659e-02f,
+1.089876860e-02f, 1.089066223e-02f, 1.088253748e-02f, 1.087439437e-02f, 1.086623293e-02f, 1.085805316e-02f, 1.084985508e-02f, 1.084163870e-02f, 1.083340405e-02f, 1.082515113e-02f,
+1.081687996e-02f, 1.080859055e-02f, 1.080028293e-02f, 1.079195710e-02f, 1.078361308e-02f, 1.077525090e-02f, 1.076687055e-02f, 1.075847206e-02f, 1.075005545e-02f, 1.074162072e-02f,
+1.073316790e-02f, 1.072469700e-02f, 1.071620804e-02f, 1.070770103e-02f, 1.069917598e-02f, 1.069063292e-02f, 1.068207186e-02f, 1.067349281e-02f, 1.066489579e-02f, 1.065628081e-02f,
+1.064764790e-02f, 1.063899707e-02f, 1.063032833e-02f, 1.062164170e-02f, 1.061293720e-02f, 1.060421484e-02f, 1.059547464e-02f, 1.058671661e-02f, 1.057794077e-02f, 1.056914714e-02f,
+1.056033573e-02f, 1.055150655e-02f, 1.054265964e-02f, 1.053379499e-02f, 1.052491263e-02f, 1.051601258e-02f, 1.050709484e-02f, 1.049815944e-02f, 1.048920640e-02f, 1.048023572e-02f,
+1.047124743e-02f, 1.046224154e-02f, 1.045321807e-02f, 1.044417704e-02f, 1.043511846e-02f, 1.042604234e-02f, 1.041694872e-02f, 1.040783759e-02f, 1.039870898e-02f, 1.038956291e-02f,
+1.038039939e-02f, 1.037121843e-02f, 1.036202007e-02f, 1.035280430e-02f, 1.034357116e-02f, 1.033432065e-02f, 1.032505280e-02f, 1.031576761e-02f, 1.030646511e-02f, 1.029714532e-02f,
+1.028780825e-02f, 1.027845391e-02f, 1.026908234e-02f, 1.025969353e-02f, 1.025028751e-02f, 1.024086431e-02f, 1.023142392e-02f, 1.022196638e-02f, 1.021249169e-02f, 1.020299988e-02f,
+1.019349097e-02f, 1.018396496e-02f, 1.017442189e-02f, 1.016486176e-02f, 1.015528459e-02f, 1.014569040e-02f, 1.013607921e-02f, 1.012645104e-02f, 1.011680590e-02f, 1.010714381e-02f,
+1.009746478e-02f, 1.008776885e-02f, 1.007805602e-02f, 1.006832631e-02f, 1.005857973e-02f, 1.004881632e-02f, 1.003903608e-02f, 1.002923903e-02f, 1.001942519e-02f, 1.000959458e-02f,
+9.999747220e-03f, 9.989883121e-03f, 9.980002304e-03f, 9.970104787e-03f, 9.960190588e-03f, 9.950259725e-03f, 9.940312216e-03f, 9.930348079e-03f, 9.920367333e-03f, 9.910369995e-03f,
+9.900356084e-03f, 9.890325617e-03f, 9.880278614e-03f, 9.870215092e-03f, 9.860135070e-03f, 9.850038566e-03f, 9.839925599e-03f, 9.829796186e-03f, 9.819650346e-03f, 9.809488098e-03f,
+9.799309460e-03f, 9.789114450e-03f, 9.778903087e-03f, 9.768675390e-03f, 9.758431378e-03f, 9.748171067e-03f, 9.737894479e-03f, 9.727601630e-03f, 9.717292540e-03f, 9.706967227e-03f,
+9.696625710e-03f, 9.686268009e-03f, 9.675894140e-03f, 9.665504125e-03f, 9.655097980e-03f, 9.644675726e-03f, 9.634237381e-03f, 9.623782964e-03f, 9.613312494e-03f, 9.602825989e-03f,
+9.592323470e-03f, 9.581804954e-03f, 9.571270461e-03f, 9.560720011e-03f, 9.550153621e-03f, 9.539571312e-03f, 9.528973102e-03f, 9.518359011e-03f, 9.507729058e-03f, 9.497083261e-03f,
+9.486421641e-03f, 9.475744217e-03f, 9.465051007e-03f, 9.454342032e-03f, 9.443617310e-03f, 9.432876861e-03f, 9.422120705e-03f, 9.411348861e-03f, 9.400561348e-03f, 9.389758186e-03f,
+9.378939394e-03f, 9.368104992e-03f, 9.357254999e-03f, 9.346389436e-03f, 9.335508321e-03f, 9.324611675e-03f, 9.313699517e-03f, 9.302771866e-03f, 9.291828743e-03f, 9.280870167e-03f,
+9.269896159e-03f, 9.258906737e-03f, 9.247901921e-03f, 9.236881733e-03f, 9.225846190e-03f, 9.214795314e-03f, 9.203729124e-03f, 9.192647640e-03f, 9.181550883e-03f, 9.170438871e-03f,
+9.159311626e-03f, 9.148169167e-03f, 9.137011515e-03f, 9.125838689e-03f, 9.114650709e-03f, 9.103447597e-03f, 9.092229371e-03f, 9.080996052e-03f, 9.069747661e-03f, 9.058484218e-03f,
+9.047205742e-03f, 9.035912255e-03f, 9.024603776e-03f, 9.013280326e-03f, 9.001941926e-03f, 8.990588595e-03f, 8.979220354e-03f, 8.967837224e-03f, 8.956439225e-03f, 8.945026378e-03f,
+8.933598703e-03f, 8.922156221e-03f, 8.910698952e-03f, 8.899226916e-03f, 8.887740136e-03f, 8.876238630e-03f, 8.864722420e-03f, 8.853191527e-03f, 8.841645971e-03f, 8.830085773e-03f,
+8.818510954e-03f, 8.806921535e-03f, 8.795317536e-03f, 8.783698978e-03f, 8.772065883e-03f, 8.760418270e-03f, 8.748756161e-03f, 8.737079578e-03f, 8.725388540e-03f, 8.713683069e-03f,
+8.701963186e-03f, 8.690228911e-03f, 8.678480267e-03f, 8.666717274e-03f, 8.654939953e-03f, 8.643148325e-03f, 8.631342412e-03f, 8.619522234e-03f, 8.607687813e-03f, 8.595839170e-03f,
+8.583976327e-03f, 8.572099304e-03f, 8.560208123e-03f, 8.548302805e-03f, 8.536383372e-03f, 8.524449845e-03f, 8.512502244e-03f, 8.500540593e-03f, 8.488564912e-03f, 8.476575222e-03f,
+8.464571546e-03f, 8.452553904e-03f, 8.440522318e-03f, 8.428476810e-03f, 8.416417401e-03f, 8.404344113e-03f, 8.392256967e-03f, 8.380155985e-03f, 8.368041190e-03f, 8.355912601e-03f,
+8.343770242e-03f, 8.331614134e-03f, 8.319444298e-03f, 8.307260757e-03f, 8.295063532e-03f, 8.282852645e-03f, 8.270628117e-03f, 8.258389972e-03f, 8.246138230e-03f, 8.233872914e-03f,
+8.221594045e-03f, 8.209301646e-03f, 8.196995738e-03f, 8.184676344e-03f, 8.172343485e-03f, 8.159997184e-03f, 8.147637462e-03f, 8.135264341e-03f, 8.122877845e-03f, 8.110477994e-03f,
+8.098064811e-03f, 8.085638319e-03f, 8.073198539e-03f, 8.060745494e-03f, 8.048279205e-03f, 8.035799696e-03f, 8.023306988e-03f, 8.010801104e-03f, 7.998282065e-03f, 7.985749896e-03f,
+7.973204617e-03f, 7.960646251e-03f, 7.948074820e-03f, 7.935490348e-03f, 7.922892856e-03f, 7.910282367e-03f, 7.897658904e-03f, 7.885022488e-03f, 7.872373143e-03f, 7.859710891e-03f,
+7.847035755e-03f, 7.834347757e-03f, 7.821646920e-03f, 7.808933266e-03f, 7.796206818e-03f, 7.783467600e-03f, 7.770715633e-03f, 7.757950940e-03f, 7.745173544e-03f, 7.732383468e-03f,
+7.719580735e-03f, 7.706765367e-03f, 7.693937387e-03f, 7.681096819e-03f, 7.668243684e-03f, 7.655378007e-03f, 7.642499809e-03f, 7.629609114e-03f, 7.616705944e-03f, 7.603790323e-03f,
+7.590862274e-03f, 7.577921820e-03f, 7.564968983e-03f, 7.552003787e-03f, 7.539026254e-03f, 7.526036409e-03f, 7.513034274e-03f, 7.500019872e-03f, 7.486993226e-03f, 7.473954359e-03f,
+7.460903296e-03f, 7.447840058e-03f, 7.434764669e-03f, 7.421677153e-03f, 7.408577533e-03f, 7.395465831e-03f, 7.382342072e-03f, 7.369206278e-03f, 7.356058474e-03f, 7.342898681e-03f,
+7.329726925e-03f, 7.316543227e-03f, 7.303347612e-03f, 7.290140103e-03f, 7.276920724e-03f, 7.263689498e-03f, 7.250446448e-03f, 7.237191598e-03f, 7.223924971e-03f, 7.210646592e-03f,
+7.197356484e-03f, 7.184054669e-03f, 7.170741173e-03f, 7.157416018e-03f, 7.144079229e-03f, 7.130730828e-03f, 7.117370840e-03f, 7.103999288e-03f, 7.090616196e-03f, 7.077221588e-03f,
+7.063815488e-03f, 7.050397919e-03f, 7.036968905e-03f, 7.023528470e-03f, 7.010076638e-03f, 6.996613433e-03f, 6.983138878e-03f, 6.969652997e-03f, 6.956155815e-03f, 6.942647356e-03f,
+6.929127642e-03f, 6.915596699e-03f, 6.902054551e-03f, 6.888501220e-03f, 6.874936732e-03f, 6.861361110e-03f, 6.847774378e-03f, 6.834176561e-03f, 6.820567682e-03f, 6.806947766e-03f,
+6.793316837e-03f, 6.779674919e-03f, 6.766022036e-03f, 6.752358212e-03f, 6.738683472e-03f, 6.724997840e-03f, 6.711301339e-03f, 6.697593995e-03f, 6.683875832e-03f, 6.670146873e-03f,
+6.656407143e-03f, 6.642656667e-03f, 6.628895468e-03f, 6.615123572e-03f, 6.601341002e-03f, 6.587547783e-03f, 6.573743939e-03f, 6.559929495e-03f, 6.546104476e-03f, 6.532268904e-03f,
+6.518422807e-03f, 6.504566206e-03f, 6.490699128e-03f, 6.476821597e-03f, 6.462933636e-03f, 6.449035272e-03f, 6.435126528e-03f, 6.421207429e-03f, 6.407277999e-03f, 6.393338264e-03f,
+6.379388247e-03f, 6.365427974e-03f, 6.351457470e-03f, 6.337476758e-03f, 6.323485863e-03f, 6.309484811e-03f, 6.295473626e-03f, 6.281452333e-03f, 6.267420957e-03f, 6.253379522e-03f,
+6.239328053e-03f, 6.225266575e-03f, 6.211195113e-03f, 6.197113691e-03f, 6.183022336e-03f, 6.168921070e-03f, 6.154809920e-03f, 6.140688911e-03f, 6.126558066e-03f, 6.112417412e-03f,
+6.098266973e-03f, 6.084106774e-03f, 6.069936840e-03f, 6.055757197e-03f, 6.041567868e-03f, 6.027368880e-03f, 6.013160257e-03f, 5.998942024e-03f, 5.984714207e-03f, 5.970476830e-03f,
+5.956229919e-03f, 5.941973499e-03f, 5.927707594e-03f, 5.913432231e-03f, 5.899147434e-03f, 5.884853228e-03f, 5.870549639e-03f, 5.856236692e-03f, 5.841914412e-03f, 5.827582825e-03f,
+5.813241955e-03f, 5.798891828e-03f, 5.784532469e-03f, 5.770163904e-03f, 5.755786157e-03f, 5.741399255e-03f, 5.727003223e-03f, 5.712598085e-03f, 5.698183868e-03f, 5.683760596e-03f,
+5.669328296e-03f, 5.654886992e-03f, 5.640436710e-03f, 5.625977475e-03f, 5.611509314e-03f, 5.597032251e-03f, 5.582546311e-03f, 5.568051521e-03f, 5.553547906e-03f, 5.539035492e-03f,
+5.524514303e-03f, 5.509984366e-03f, 5.495445707e-03f, 5.480898350e-03f, 5.466342321e-03f, 5.451777646e-03f, 5.437204351e-03f, 5.422622461e-03f, 5.408032002e-03f, 5.393433000e-03f,
+5.378825480e-03f, 5.364209468e-03f, 5.349584990e-03f, 5.334952071e-03f, 5.320310737e-03f, 5.305661014e-03f, 5.291002928e-03f, 5.276336504e-03f, 5.261661769e-03f, 5.246978747e-03f,
+5.232287466e-03f, 5.217587950e-03f, 5.202880226e-03f, 5.188164319e-03f, 5.173440255e-03f, 5.158708061e-03f, 5.143967762e-03f, 5.129219383e-03f, 5.114462952e-03f, 5.099698493e-03f,
+5.084926033e-03f, 5.070145598e-03f, 5.055357213e-03f, 5.040560905e-03f, 5.025756700e-03f, 5.010944623e-03f, 4.996124701e-03f, 4.981296960e-03f, 4.966461426e-03f, 4.951618124e-03f,
+4.936767082e-03f, 4.921908324e-03f, 4.907041877e-03f, 4.892167767e-03f, 4.877286021e-03f, 4.862396664e-03f, 4.847499723e-03f, 4.832595223e-03f, 4.817683191e-03f, 4.802763653e-03f,
+4.787836636e-03f, 4.772902164e-03f, 4.757960266e-03f, 4.743010966e-03f, 4.728054291e-03f, 4.713090267e-03f, 4.698118921e-03f, 4.683140279e-03f, 4.668154367e-03f, 4.653161211e-03f,
+4.638160838e-03f, 4.623153274e-03f, 4.608138545e-03f, 4.593116677e-03f, 4.578087698e-03f, 4.563051633e-03f, 4.548008508e-03f, 4.532958351e-03f, 4.517901187e-03f, 4.502837043e-03f,
+4.487765945e-03f, 4.472687920e-03f, 4.457602994e-03f, 4.442511193e-03f, 4.427412544e-03f, 4.412307074e-03f, 4.397194808e-03f, 4.382075774e-03f, 4.366949998e-03f, 4.351817506e-03f,
+4.336678324e-03f, 4.321532481e-03f, 4.306380001e-03f, 4.291220911e-03f, 4.276055239e-03f, 4.260883010e-03f, 4.245704251e-03f, 4.230518988e-03f, 4.215327249e-03f, 4.200129060e-03f,
+4.184924448e-03f, 4.169713438e-03f, 4.154496058e-03f, 4.139272335e-03f, 4.124042294e-03f, 4.108805963e-03f, 4.093563369e-03f, 4.078314537e-03f, 4.063059495e-03f, 4.047798270e-03f,
+4.032530887e-03f, 4.017257375e-03f, 4.001977758e-03f, 3.986692065e-03f, 3.971400322e-03f, 3.956102556e-03f, 3.940798793e-03f, 3.925489061e-03f, 3.910173385e-03f, 3.894851793e-03f,
+3.879524312e-03f, 3.864190968e-03f, 3.848851788e-03f, 3.833506799e-03f, 3.818156028e-03f, 3.802799502e-03f, 3.787437247e-03f, 3.772069291e-03f, 3.756695660e-03f, 3.741316380e-03f,
+3.725931480e-03f, 3.710540986e-03f, 3.695144924e-03f, 3.679743322e-03f, 3.664336207e-03f, 3.648923605e-03f, 3.633505543e-03f, 3.618082049e-03f, 3.602653149e-03f, 3.587218870e-03f,
+3.571779239e-03f, 3.556334284e-03f, 3.540884030e-03f, 3.525428506e-03f, 3.509967737e-03f, 3.494501752e-03f, 3.479030577e-03f, 3.463554239e-03f, 3.448072764e-03f, 3.432586181e-03f,
+3.417094516e-03f, 3.401597797e-03f, 3.386096049e-03f, 3.370589301e-03f, 3.355077579e-03f, 3.339560911e-03f, 3.324039323e-03f, 3.308512842e-03f, 3.292981496e-03f, 3.277445312e-03f,
+3.261904317e-03f, 3.246358538e-03f, 3.230808002e-03f, 3.215252736e-03f, 3.199692767e-03f, 3.184128123e-03f, 3.168558830e-03f, 3.152984916e-03f, 3.137406408e-03f, 3.121823333e-03f,
+3.106235719e-03f, 3.090643591e-03f, 3.075046979e-03f, 3.059445908e-03f, 3.043840406e-03f, 3.028230500e-03f, 3.012616218e-03f, 2.996997586e-03f, 2.981374632e-03f, 2.965747383e-03f,
+2.950115867e-03f, 2.934480109e-03f, 2.918840139e-03f, 2.903195983e-03f, 2.887547667e-03f, 2.871895221e-03f, 2.856238670e-03f, 2.840578042e-03f, 2.824913364e-03f, 2.809244664e-03f,
+2.793571969e-03f, 2.777895306e-03f, 2.762214703e-03f, 2.746530186e-03f, 2.730841783e-03f, 2.715149522e-03f, 2.699453430e-03f, 2.683753533e-03f, 2.668049860e-03f, 2.652342437e-03f,
+2.636631293e-03f, 2.620916454e-03f, 2.605197948e-03f, 2.589475801e-03f, 2.573750043e-03f, 2.558020699e-03f, 2.542287797e-03f, 2.526551364e-03f, 2.510811429e-03f, 2.495068018e-03f,
+2.479321159e-03f, 2.463570878e-03f, 2.447817204e-03f, 2.432060164e-03f, 2.416299786e-03f, 2.400536095e-03f, 2.384769121e-03f, 2.368998891e-03f, 2.353225431e-03f, 2.337448770e-03f,
+2.321668935e-03f, 2.305885952e-03f, 2.290099851e-03f, 2.274310657e-03f, 2.258518399e-03f, 2.242723104e-03f, 2.226924800e-03f, 2.211123513e-03f, 2.195319272e-03f, 2.179512103e-03f,
+2.163702035e-03f, 2.147889094e-03f, 2.132073309e-03f, 2.116254706e-03f, 2.100433313e-03f, 2.084609158e-03f, 2.068782269e-03f, 2.052952672e-03f, 2.037120395e-03f, 2.021285465e-03f,
+2.005447911e-03f, 1.989607759e-03f, 1.973765037e-03f, 1.957919773e-03f, 1.942071995e-03f, 1.926221728e-03f, 1.910369002e-03f, 1.894513844e-03f, 1.878656281e-03f, 1.862796340e-03f,
+1.846934050e-03f, 1.831069438e-03f, 1.815202531e-03f, 1.799333356e-03f, 1.783461942e-03f, 1.767588316e-03f, 1.751712506e-03f, 1.735834538e-03f, 1.719954442e-03f, 1.704072243e-03f,
+1.688187969e-03f, 1.672301649e-03f, 1.656413310e-03f, 1.640522979e-03f, 1.624630684e-03f, 1.608736453e-03f, 1.592840312e-03f, 1.576942290e-03f, 1.561042414e-03f, 1.545140712e-03f,
+1.529237211e-03f, 1.513331938e-03f, 1.497424923e-03f, 1.481516191e-03f, 1.465605771e-03f, 1.449693689e-03f, 1.433779975e-03f, 1.417864655e-03f, 1.401947756e-03f, 1.386029307e-03f,
+1.370109336e-03f, 1.354187868e-03f, 1.338264933e-03f, 1.322340558e-03f, 1.306414770e-03f, 1.290487597e-03f, 1.274559067e-03f, 1.258629206e-03f, 1.242698044e-03f, 1.226765606e-03f,
+1.210831922e-03f, 1.194897018e-03f, 1.178960922e-03f, 1.163023662e-03f, 1.147085265e-03f, 1.131145759e-03f, 1.115205172e-03f, 1.099263530e-03f, 1.083320863e-03f, 1.067377196e-03f,
+1.051432558e-03f, 1.035486977e-03f, 1.019540480e-03f, 1.003593094e-03f, 9.876448476e-04f, 9.716957680e-04f, 9.557458828e-04f, 9.397952197e-04f, 9.238438061e-04f, 9.078916698e-04f,
+8.919388382e-04f, 8.759853391e-04f, 8.600312000e-04f, 8.440764484e-04f, 8.281211120e-04f, 8.121652184e-04f, 7.962087952e-04f, 7.802518699e-04f, 7.642944701e-04f, 7.483366235e-04f,
+7.323783577e-04f, 7.164197001e-04f, 7.004606785e-04f, 6.845013203e-04f, 6.685416532e-04f, 6.525817048e-04f, 6.366215027e-04f, 6.206610744e-04f, 6.047004475e-04f, 5.887396496e-04f,
+5.727787083e-04f, 5.568176511e-04f, 5.408565057e-04f, 5.248952996e-04f, 5.089340603e-04f, 4.929728156e-04f, 4.770115928e-04f, 4.610504197e-04f, 4.450893237e-04f, 4.291283325e-04f,
+4.131674736e-04f, 3.972067745e-04f, 3.812462629e-04f, 3.652859663e-04f, 3.493259122e-04f, 3.333661282e-04f, 3.174066418e-04f, 3.014474807e-04f, 2.854886723e-04f, 2.695302442e-04f,
+2.535722240e-04f, 2.376146392e-04f, 2.216575173e-04f, 2.057008859e-04f, 1.897447725e-04f, 1.737892047e-04f, 1.578342099e-04f, 1.418798157e-04f, 1.259260497e-04f, 1.099729394e-04f,
+9.402051216e-05f, 7.806879568e-05f, 6.211781740e-05f, 4.616760486e-05f, 3.021818556e-05f, 1.426958700e-05f, -1.678163308e-06f, -1.762503786e-05f, -3.357100916e-05f, -4.951604971e-05f,
+-6.546013202e-05f, -8.140322861e-05f, -9.734531197e-05f, -1.132863546e-04f, -1.292263291e-04f, -1.451652080e-04f, -1.611029637e-04f, -1.770395688e-04f, -1.929749958e-04f, -2.089092173e-04f,
+-2.248422059e-04f, -2.407739340e-04f, -2.567043742e-04f, -2.726334990e-04f, -2.885612811e-04f, -3.044876930e-04f, -3.204127072e-04f, -3.363362963e-04f, -3.522584329e-04f, -3.681790895e-04f,
+-3.840982388e-04f, -4.000158533e-04f, -4.159319056e-04f, -4.318463683e-04f, -4.477592140e-04f, -4.636704153e-04f, -4.795799448e-04f, -4.954877751e-04f, -5.113938788e-04f, -5.272982286e-04f,
+-5.432007970e-04f, -5.591015567e-04f, -5.750004803e-04f, -5.908975406e-04f, -6.067927100e-04f, -6.226859612e-04f, -6.385772670e-04f, -6.544665999e-04f, -6.703539326e-04f, -6.862392378e-04f,
+-7.021224881e-04f, -7.180036563e-04f, -7.338827150e-04f, -7.497596369e-04f, -7.656343946e-04f, -7.815069610e-04f, -7.973773086e-04f, -8.132454102e-04f, -8.291112385e-04f, -8.449747662e-04f,
+-8.608359661e-04f, -8.766948108e-04f, -8.925512732e-04f, -9.084053259e-04f, -9.242569417e-04f, -9.401060933e-04f, -9.559527535e-04f, -9.717968951e-04f, -9.876384908e-04f, -1.003477513e-03f,
+-1.019313936e-03f, -1.035147730e-03f, -1.050978871e-03f, -1.066807329e-03f, -1.082633078e-03f, -1.098456090e-03f, -1.114276339e-03f, -1.130093798e-03f, -1.145908438e-03f, -1.161720234e-03f,
+-1.177529157e-03f, -1.193335181e-03f, -1.209138279e-03f, -1.224938423e-03f, -1.240735586e-03f, -1.256529742e-03f, -1.272320862e-03f, -1.288108920e-03f, -1.303893889e-03f, -1.319675742e-03f,
+-1.335454452e-03f, -1.351229990e-03f, -1.367002332e-03f, -1.382771449e-03f, -1.398537314e-03f, -1.414299900e-03f, -1.430059181e-03f, -1.445815128e-03f, -1.461567716e-03f, -1.477316917e-03f,
+-1.493062704e-03f, -1.508805050e-03f, -1.524543928e-03f, -1.540279311e-03f, -1.556011173e-03f, -1.571739485e-03f, -1.587464222e-03f, -1.603185355e-03f, -1.618902859e-03f, -1.634616706e-03f,
+-1.650326870e-03f, -1.666033322e-03f, -1.681736038e-03f, -1.697434988e-03f, -1.713130148e-03f, -1.728821489e-03f, -1.744508984e-03f, -1.760192608e-03f, -1.775872333e-03f, -1.791548132e-03f,
+-1.807219978e-03f, -1.822887845e-03f, -1.838551705e-03f, -1.854211532e-03f, -1.869867299e-03f, -1.885518979e-03f, -1.901166545e-03f, -1.916809971e-03f, -1.932449229e-03f, -1.948084293e-03f,
+-1.963715137e-03f, -1.979341733e-03f, -1.994964054e-03f, -2.010582074e-03f, -2.026195766e-03f, -2.041805104e-03f, -2.057410060e-03f, -2.073010609e-03f, -2.088606722e-03f, -2.104198374e-03f,
+-2.119785538e-03f, -2.135368187e-03f, -2.150946294e-03f, -2.166519833e-03f, -2.182088777e-03f, -2.197653100e-03f, -2.213212775e-03f, -2.228767775e-03f, -2.244318074e-03f, -2.259863644e-03f,
+-2.275404460e-03f, -2.290940495e-03f, -2.306471722e-03f, -2.321998115e-03f, -2.337519647e-03f, -2.353036292e-03f, -2.368548023e-03f, -2.384054813e-03f, -2.399556637e-03f, -2.415053466e-03f,
+-2.430545276e-03f, -2.446032040e-03f, -2.461513730e-03f, -2.476990321e-03f, -2.492461787e-03f, -2.507928100e-03f, -2.523389234e-03f, -2.538845163e-03f, -2.554295860e-03f, -2.569741300e-03f,
+-2.585181455e-03f, -2.600616300e-03f, -2.616045807e-03f, -2.631469951e-03f, -2.646888705e-03f, -2.662302042e-03f, -2.677709938e-03f, -2.693112364e-03f, -2.708509295e-03f, -2.723900705e-03f,
+-2.739286567e-03f, -2.754666855e-03f, -2.770041543e-03f, -2.785410605e-03f, -2.800774013e-03f, -2.816131743e-03f, -2.831483768e-03f, -2.846830061e-03f, -2.862170596e-03f, -2.877505348e-03f,
+-2.892834290e-03f, -2.908157395e-03f, -2.923474639e-03f, -2.938785994e-03f, -2.954091434e-03f, -2.969390934e-03f, -2.984684467e-03f, -2.999972007e-03f, -3.015253528e-03f, -3.030529004e-03f,
+-3.045798410e-03f, -3.061061718e-03f, -3.076318903e-03f, -3.091569939e-03f, -3.106814799e-03f, -3.122053459e-03f, -3.137285891e-03f, -3.152512070e-03f, -3.167731970e-03f, -3.182945566e-03f,
+-3.198152830e-03f, -3.213353737e-03f, -3.228548262e-03f, -3.243736377e-03f, -3.258918059e-03f, -3.274093280e-03f, -3.289262014e-03f, -3.304424236e-03f, -3.319579921e-03f, -3.334729041e-03f,
+-3.349871572e-03f, -3.365007488e-03f, -3.380136762e-03f, -3.395259369e-03f, -3.410375284e-03f, -3.425484480e-03f, -3.440586932e-03f, -3.455682614e-03f, -3.470771500e-03f, -3.485853565e-03f,
+-3.500928783e-03f, -3.515997128e-03f, -3.531058575e-03f, -3.546113098e-03f, -3.561160671e-03f, -3.576201269e-03f, -3.591234866e-03f, -3.606261437e-03f, -3.621280956e-03f, -3.636293397e-03f,
+-3.651298736e-03f, -3.666296945e-03f, -3.681288001e-03f, -3.696271876e-03f, -3.711248547e-03f, -3.726217987e-03f, -3.741180171e-03f, -3.756135074e-03f, -3.771082669e-03f, -3.786022932e-03f,
+-3.800955838e-03f, -3.815881360e-03f, -3.830799474e-03f, -3.845710153e-03f, -3.860613374e-03f, -3.875509110e-03f, -3.890397335e-03f, -3.905278026e-03f, -3.920151156e-03f, -3.935016700e-03f,
+-3.949874634e-03f, -3.964724930e-03f, -3.979567566e-03f, -3.994402514e-03f, -4.009229751e-03f, -4.024049250e-03f, -4.038860987e-03f, -4.053664936e-03f, -4.068461073e-03f, -4.083249372e-03f,
+-4.098029808e-03f, -4.112802356e-03f, -4.127566991e-03f, -4.142323688e-03f, -4.157072421e-03f, -4.171813166e-03f, -4.186545898e-03f, -4.201270592e-03f, -4.215987222e-03f, -4.230695764e-03f,
+-4.245396192e-03f, -4.260088483e-03f, -4.274772610e-03f, -4.289448549e-03f, -4.304116276e-03f, -4.318775764e-03f, -4.333426990e-03f, -4.348069928e-03f, -4.362704553e-03f, -4.377330841e-03f,
+-4.391948768e-03f, -4.406558307e-03f, -4.421159435e-03f, -4.435752126e-03f, -4.450336356e-03f, -4.464912100e-03f, -4.479479334e-03f, -4.494038032e-03f, -4.508588171e-03f, -4.523129724e-03f,
+-4.537662669e-03f, -4.552186979e-03f, -4.566702631e-03f, -4.581209600e-03f, -4.595707861e-03f, -4.610197389e-03f, -4.624678161e-03f, -4.639150152e-03f, -4.653613336e-03f, -4.668067690e-03f,
+-4.682513189e-03f, -4.696949809e-03f, -4.711377525e-03f, -4.725796312e-03f, -4.740206147e-03f, -4.754607005e-03f, -4.768998862e-03f, -4.783381692e-03f, -4.797755472e-03f, -4.812120178e-03f,
+-4.826475785e-03f, -4.840822269e-03f, -4.855159605e-03f, -4.869487770e-03f, -4.883806738e-03f, -4.898116487e-03f, -4.912416991e-03f, -4.926708226e-03f, -4.940990169e-03f, -4.955262794e-03f,
+-4.969526079e-03f, -4.983779998e-03f, -4.998024528e-03f, -5.012259645e-03f, -5.026485324e-03f, -5.040701541e-03f, -5.054908273e-03f, -5.069105495e-03f, -5.083293184e-03f, -5.097471315e-03f,
+-5.111639864e-03f, -5.125798808e-03f, -5.139948122e-03f, -5.154087783e-03f, -5.168217767e-03f, -5.182338049e-03f, -5.196448607e-03f, -5.210549415e-03f, -5.224640451e-03f, -5.238721691e-03f,
+-5.252793110e-03f, -5.266854685e-03f, -5.280906392e-03f, -5.294948207e-03f, -5.308980107e-03f, -5.323002069e-03f, -5.337014067e-03f, -5.351016080e-03f, -5.365008082e-03f, -5.378990051e-03f,
+-5.392961962e-03f, -5.406923793e-03f, -5.420875519e-03f, -5.434817118e-03f, -5.448748565e-03f, -5.462669837e-03f, -5.476580911e-03f, -5.490481763e-03f, -5.504372369e-03f, -5.518252707e-03f,
+-5.532122752e-03f, -5.545982482e-03f, -5.559831873e-03f, -5.573670902e-03f, -5.587499545e-03f, -5.601317778e-03f, -5.615125580e-03f, -5.628922926e-03f, -5.642709793e-03f, -5.656486158e-03f,
+-5.670251998e-03f, -5.684007289e-03f, -5.697752008e-03f, -5.711486133e-03f, -5.725209639e-03f, -5.738922504e-03f, -5.752624705e-03f, -5.766316219e-03f, -5.779997022e-03f, -5.793667092e-03f,
+-5.807326405e-03f, -5.820974939e-03f, -5.834612671e-03f, -5.848239576e-03f, -5.861855634e-03f, -5.875460820e-03f, -5.889055112e-03f, -5.902638487e-03f, -5.916210921e-03f, -5.929772393e-03f,
+-5.943322879e-03f, -5.956862357e-03f, -5.970390803e-03f, -5.983908196e-03f, -5.997414511e-03f, -6.010909727e-03f, -6.024393821e-03f, -6.037866770e-03f, -6.051328551e-03f, -6.064779143e-03f,
+-6.078218521e-03f, -6.091646664e-03f, -6.105063548e-03f, -6.118469152e-03f, -6.131863453e-03f, -6.145246429e-03f, -6.158618056e-03f, -6.171978313e-03f, -6.185327176e-03f, -6.198664624e-03f,
+-6.211990634e-03f, -6.225305183e-03f, -6.238608250e-03f, -6.251899812e-03f, -6.265179847e-03f, -6.278448331e-03f, -6.291705244e-03f, -6.304950562e-03f, -6.318184264e-03f, -6.331406327e-03f,
+-6.344616729e-03f, -6.357815448e-03f, -6.371002462e-03f, -6.384177748e-03f, -6.397341285e-03f, -6.410493050e-03f, -6.423633021e-03f, -6.436761176e-03f, -6.449877494e-03f, -6.462981952e-03f,
+-6.476074527e-03f, -6.489155200e-03f, -6.502223946e-03f, -6.515280745e-03f, -6.528325574e-03f, -6.541358411e-03f, -6.554379236e-03f, -6.567388025e-03f, -6.580384757e-03f, -6.593369410e-03f,
+-6.606341963e-03f, -6.619302394e-03f, -6.632250680e-03f, -6.645186801e-03f, -6.658110734e-03f, -6.671022459e-03f, -6.683921952e-03f, -6.696809194e-03f, -6.709684161e-03f, -6.722546833e-03f,
+-6.735397188e-03f, -6.748235204e-03f, -6.761060861e-03f, -6.773874136e-03f, -6.786675007e-03f, -6.799463455e-03f, -6.812239456e-03f, -6.825002990e-03f, -6.837754036e-03f, -6.850492571e-03f,
+-6.863218576e-03f, -6.875932028e-03f, -6.888632905e-03f, -6.901321188e-03f, -6.913996855e-03f, -6.926659884e-03f, -6.939310254e-03f, -6.951947944e-03f, -6.964572933e-03f, -6.977185200e-03f,
+-6.989784724e-03f, -7.002371484e-03f, -7.014945458e-03f, -7.027506625e-03f, -7.040054966e-03f, -7.052590458e-03f, -7.065113080e-03f, -7.077622813e-03f, -7.090119634e-03f, -7.102603523e-03f,
+-7.115074459e-03f, -7.127532422e-03f, -7.139977390e-03f, -7.152409343e-03f, -7.164828259e-03f, -7.177234119e-03f, -7.189626901e-03f, -7.202006585e-03f, -7.214373150e-03f, -7.226726575e-03f,
+-7.239066840e-03f, -7.251393924e-03f, -7.263707807e-03f, -7.276008468e-03f, -7.288295887e-03f, -7.300570042e-03f, -7.312830914e-03f, -7.325078483e-03f, -7.337312727e-03f, -7.349533626e-03f,
+-7.361741160e-03f, -7.373935308e-03f, -7.386116051e-03f, -7.398283368e-03f, -7.410437238e-03f, -7.422577641e-03f, -7.434704558e-03f, -7.446817967e-03f, -7.458917849e-03f, -7.471004184e-03f,
+-7.483076951e-03f, -7.495136130e-03f, -7.507181702e-03f, -7.519213645e-03f, -7.531231941e-03f, -7.543236569e-03f, -7.555227508e-03f, -7.567204740e-03f, -7.579168244e-03f, -7.591118000e-03f,
+-7.603053989e-03f, -7.614976190e-03f, -7.626884583e-03f, -7.638779149e-03f, -7.650659869e-03f, -7.662526721e-03f, -7.674379688e-03f, -7.686218747e-03f, -7.698043881e-03f, -7.709855070e-03f,
+-7.721652293e-03f, -7.733435531e-03f, -7.745204765e-03f, -7.756959975e-03f, -7.768701141e-03f, -7.780428244e-03f, -7.792141265e-03f, -7.803840184e-03f, -7.815524981e-03f, -7.827195637e-03f,
+-7.838852133e-03f, -7.850494450e-03f, -7.862122567e-03f, -7.873736466e-03f, -7.885336128e-03f, -7.896921532e-03f, -7.908492661e-03f, -7.920049494e-03f, -7.931592013e-03f, -7.943120199e-03f,
+-7.954634031e-03f, -7.966133492e-03f, -7.977618561e-03f, -7.989089221e-03f, -8.000545452e-03f, -8.011987234e-03f, -8.023414550e-03f, -8.034827379e-03f, -8.046225704e-03f, -8.057609505e-03f,
+-8.068978763e-03f, -8.080333460e-03f, -8.091673576e-03f, -8.102999094e-03f, -8.114309993e-03f, -8.125606256e-03f, -8.136887863e-03f, -8.148154796e-03f, -8.159407037e-03f, -8.170644566e-03f,
+-8.181867365e-03f, -8.193075416e-03f, -8.204268700e-03f, -8.215447198e-03f, -8.226610891e-03f, -8.237759763e-03f, -8.248893793e-03f, -8.260012963e-03f, -8.271117256e-03f, -8.282206652e-03f,
+-8.293281134e-03f, -8.304340683e-03f, -8.315385281e-03f, -8.326414909e-03f, -8.337429550e-03f, -8.348429184e-03f, -8.359413795e-03f, -8.370383363e-03f, -8.381337871e-03f, -8.392277300e-03f,
+-8.403201633e-03f, -8.414110851e-03f, -8.425004936e-03f, -8.435883871e-03f, -8.446747637e-03f, -8.457596216e-03f, -8.468429591e-03f, -8.479247744e-03f, -8.490050657e-03f, -8.500838311e-03f,
+-8.511610690e-03f, -8.522367775e-03f, -8.533109548e-03f, -8.543835993e-03f, -8.554547090e-03f, -8.565242824e-03f, -8.575923175e-03f, -8.586588126e-03f, -8.597237660e-03f, -8.607871759e-03f,
+-8.618490406e-03f, -8.629093583e-03f, -8.639681273e-03f, -8.650253458e-03f, -8.660810120e-03f, -8.671351243e-03f, -8.681876809e-03f, -8.692386801e-03f, -8.702881201e-03f, -8.713359992e-03f,
+-8.723823157e-03f, -8.734270679e-03f, -8.744702540e-03f, -8.755118723e-03f, -8.765519211e-03f, -8.775903988e-03f, -8.786273035e-03f, -8.796626336e-03f, -8.806963874e-03f, -8.817285632e-03f,
+-8.827591593e-03f, -8.837881740e-03f, -8.848156055e-03f, -8.858414523e-03f, -8.868657126e-03f, -8.878883848e-03f, -8.889094671e-03f, -8.899289579e-03f, -8.909468555e-03f, -8.919631583e-03f,
+-8.929778645e-03f, -8.939909725e-03f, -8.950024807e-03f, -8.960123874e-03f, -8.970206908e-03f, -8.980273895e-03f, -8.990324817e-03f, -9.000359657e-03f, -9.010378400e-03f, -9.020381028e-03f,
+-9.030367526e-03f, -9.040337877e-03f, -9.050292064e-03f, -9.060230072e-03f, -9.070151884e-03f, -9.080057484e-03f, -9.089946855e-03f, -9.099819982e-03f, -9.109676848e-03f, -9.119517437e-03f,
+-9.129341734e-03f, -9.139149721e-03f, -9.148941382e-03f, -9.158716703e-03f, -9.168475666e-03f, -9.178218257e-03f, -9.187944458e-03f, -9.197654254e-03f, -9.207347629e-03f, -9.217024568e-03f,
+-9.226685054e-03f, -9.236329072e-03f, -9.245956605e-03f, -9.255567639e-03f, -9.265162157e-03f, -9.274740144e-03f, -9.284301584e-03f, -9.293846461e-03f, -9.303374761e-03f, -9.312886467e-03f,
+-9.322381563e-03f, -9.331860035e-03f, -9.341321867e-03f, -9.350767043e-03f, -9.360195549e-03f, -9.369607368e-03f, -9.379002485e-03f, -9.388380885e-03f, -9.397742553e-03f, -9.407087473e-03f,
+-9.416415631e-03f, -9.425727010e-03f, -9.435021596e-03f, -9.444299374e-03f, -9.453560329e-03f, -9.462804445e-03f, -9.472031707e-03f, -9.481242101e-03f, -9.490435611e-03f, -9.499612222e-03f,
+-9.508771921e-03f, -9.517914690e-03f, -9.527040517e-03f, -9.536149385e-03f, -9.545241280e-03f, -9.554316188e-03f, -9.563374093e-03f, -9.572414982e-03f, -9.581438838e-03f, -9.590445647e-03f,
+-9.599435396e-03f, -9.608408069e-03f, -9.617363651e-03f, -9.626302129e-03f, -9.635223487e-03f, -9.644127711e-03f, -9.653014787e-03f, -9.661884700e-03f, -9.670737436e-03f, -9.679572981e-03f,
+-9.688391320e-03f, -9.697192438e-03f, -9.705976323e-03f, -9.714742958e-03f, -9.723492331e-03f, -9.732224427e-03f, -9.740939232e-03f, -9.749636732e-03f, -9.758316912e-03f, -9.766979759e-03f,
+-9.775625258e-03f, -9.784253396e-03f, -9.792864159e-03f, -9.801457532e-03f, -9.810033502e-03f, -9.818592055e-03f, -9.827133178e-03f, -9.835656855e-03f, -9.844163074e-03f, -9.852651821e-03f,
+-9.861123082e-03f, -9.869576843e-03f, -9.878013091e-03f, -9.886431812e-03f, -9.894832993e-03f, -9.903216619e-03f, -9.911582679e-03f, -9.919931157e-03f, -9.928262040e-03f, -9.936575315e-03f,
+-9.944870970e-03f, -9.953148989e-03f, -9.961409360e-03f, -9.969652070e-03f, -9.977877106e-03f, -9.986084453e-03f, -9.994274099e-03f, -1.000244603e-02f, -1.001060024e-02f, -1.001873670e-02f,
+-1.002685541e-02f, -1.003495635e-02f, -1.004303952e-02f, -1.005110489e-02f, -1.005915245e-02f, -1.006718220e-02f, -1.007519411e-02f, -1.008318818e-02f, -1.009116440e-02f, -1.009912274e-02f,
+-1.010706320e-02f, -1.011498577e-02f, -1.012289042e-02f, -1.013077716e-02f, -1.013864596e-02f, -1.014649682e-02f, -1.015432971e-02f, -1.016214464e-02f, -1.016994158e-02f, -1.017772052e-02f,
+-1.018548146e-02f, -1.019322437e-02f, -1.020094926e-02f, -1.020865609e-02f, -1.021634487e-02f, -1.022401557e-02f, -1.023166820e-02f, -1.023930272e-02f, -1.024691914e-02f, -1.025451744e-02f,
+-1.026209761e-02f, -1.026965964e-02f, -1.027720351e-02f, -1.028472921e-02f, -1.029223673e-02f, -1.029972606e-02f, -1.030719719e-02f, -1.031465010e-02f, -1.032208478e-02f, -1.032950122e-02f,
+-1.033689941e-02f, -1.034427934e-02f, -1.035164099e-02f, -1.035898436e-02f, -1.036630943e-02f, -1.037361619e-02f, -1.038090462e-02f, -1.038817473e-02f, -1.039542648e-02f, -1.040265989e-02f,
+-1.040987492e-02f, -1.041707158e-02f, -1.042424984e-02f, -1.043140970e-02f, -1.043855115e-02f, -1.044567418e-02f, -1.045277876e-02f, -1.045986490e-02f, -1.046693259e-02f, -1.047398180e-02f,
+-1.048101253e-02f, -1.048802477e-02f, -1.049501851e-02f, -1.050199373e-02f, -1.050895042e-02f, -1.051588858e-02f, -1.052280820e-02f, -1.052970925e-02f, -1.053659174e-02f, -1.054345564e-02f,
+-1.055030095e-02f, -1.055712767e-02f, -1.056393577e-02f, -1.057072524e-02f, -1.057749609e-02f, -1.058424828e-02f, -1.059098183e-02f, -1.059769670e-02f, -1.060439290e-02f, -1.061107042e-02f,
+-1.061772923e-02f, -1.062436934e-02f, -1.063099073e-02f, -1.063759339e-02f, -1.064417731e-02f, -1.065074248e-02f, -1.065728889e-02f, -1.066381653e-02f, -1.067032539e-02f, -1.067681546e-02f,
+-1.068328672e-02f, -1.068973918e-02f, -1.069617282e-02f, -1.070258762e-02f, -1.070898358e-02f, -1.071536070e-02f, -1.072171895e-02f, -1.072805832e-02f, -1.073437882e-02f, -1.074068043e-02f,
+-1.074696313e-02f, -1.075322693e-02f, -1.075947180e-02f, -1.076569774e-02f, -1.077190474e-02f, -1.077809280e-02f, -1.078426189e-02f, -1.079041201e-02f, -1.079654316e-02f, -1.080265532e-02f,
+-1.080874848e-02f, -1.081482263e-02f, -1.082087776e-02f, -1.082691387e-02f, -1.083293094e-02f, -1.083892897e-02f, -1.084490795e-02f, -1.085086786e-02f, -1.085680869e-02f, -1.086273045e-02f,
+-1.086863311e-02f, -1.087451668e-02f, -1.088038113e-02f, -1.088622647e-02f, -1.089205267e-02f, -1.089785975e-02f, -1.090364767e-02f, -1.090941644e-02f, -1.091516605e-02f, -1.092089648e-02f,
+-1.092660774e-02f, -1.093229980e-02f, -1.093797266e-02f, -1.094362632e-02f, -1.094926076e-02f, -1.095487597e-02f, -1.096047195e-02f, -1.096604869e-02f, -1.097160618e-02f, -1.097714441e-02f,
+-1.098266337e-02f, -1.098816305e-02f, -1.099364345e-02f, -1.099910455e-02f, -1.100454635e-02f, -1.100996885e-02f, -1.101537202e-02f, -1.102075587e-02f, -1.102612038e-02f, -1.103146555e-02f,
+-1.103679137e-02f, -1.104209783e-02f, -1.104738492e-02f, -1.105265263e-02f, -1.105790096e-02f, -1.106312990e-02f, -1.106833944e-02f, -1.107352957e-02f, -1.107870028e-02f, -1.108385158e-02f,
+-1.108898344e-02f, -1.109409586e-02f, -1.109918883e-02f, -1.110426235e-02f, -1.110931641e-02f, -1.111435100e-02f, -1.111936610e-02f, -1.112436173e-02f, -1.112933786e-02f, -1.113429449e-02f,
+-1.113923161e-02f, -1.114414922e-02f, -1.114904730e-02f, -1.115392586e-02f, -1.115878487e-02f, -1.116362434e-02f, -1.116844426e-02f, -1.117324462e-02f, -1.117802541e-02f, -1.118278663e-02f,
+-1.118752827e-02f, -1.119225032e-02f, -1.119695277e-02f, -1.120163562e-02f, -1.120629887e-02f, -1.121094249e-02f, -1.121556649e-02f, -1.122017087e-02f, -1.122475560e-02f, -1.122932069e-02f,
+-1.123386613e-02f, -1.123839191e-02f, -1.124289803e-02f, -1.124738448e-02f, -1.125185124e-02f, -1.125629833e-02f, -1.126072572e-02f, -1.126513342e-02f, -1.126952141e-02f, -1.127388969e-02f,
+-1.127823825e-02f, -1.128256709e-02f, -1.128687620e-02f, -1.129116557e-02f, -1.129543520e-02f, -1.129968509e-02f, -1.130391521e-02f, -1.130812558e-02f, -1.131231617e-02f, -1.131648700e-02f,
+-1.132063804e-02f, -1.132476930e-02f, -1.132888076e-02f, -1.133297243e-02f, -1.133704429e-02f, -1.134109634e-02f, -1.134512858e-02f, -1.134914099e-02f, -1.135313357e-02f, -1.135710633e-02f,
+-1.136105924e-02f, -1.136499231e-02f, -1.136890552e-02f, -1.137279888e-02f, -1.137667238e-02f, -1.138052601e-02f, -1.138435977e-02f, -1.138817364e-02f, -1.139196764e-02f, -1.139574174e-02f,
+-1.139949595e-02f, -1.140323025e-02f, -1.140694465e-02f, -1.141063914e-02f, -1.141431371e-02f, -1.141796836e-02f, -1.142160309e-02f, -1.142521787e-02f, -1.142881273e-02f, -1.143238764e-02f,
+-1.143594260e-02f, -1.143947761e-02f, -1.144299266e-02f, -1.144648774e-02f, -1.144996286e-02f, -1.145341801e-02f, -1.145685318e-02f, -1.146026836e-02f, -1.146366356e-02f, -1.146703877e-02f,
+-1.147039398e-02f, -1.147372919e-02f, -1.147704439e-02f, -1.148033958e-02f, -1.148361475e-02f, -1.148686991e-02f, -1.149010504e-02f, -1.149332014e-02f, -1.149651521e-02f, -1.149969024e-02f,
+-1.150284522e-02f, -1.150598016e-02f, -1.150909505e-02f, -1.151218988e-02f, -1.151526466e-02f, -1.151831937e-02f, -1.152135401e-02f, -1.152436858e-02f, -1.152736307e-02f, -1.153033748e-02f,
+-1.153329181e-02f, -1.153622605e-02f, -1.153914019e-02f, -1.154203424e-02f, -1.154490819e-02f, -1.154776204e-02f, -1.155059577e-02f, -1.155340940e-02f, -1.155620291e-02f, -1.155897630e-02f,
+-1.156172957e-02f, -1.156446271e-02f, -1.156717572e-02f, -1.156986859e-02f, -1.157254133e-02f, -1.157519393e-02f, -1.157782638e-02f, -1.158043868e-02f, -1.158303084e-02f, -1.158560283e-02f,
+-1.158815467e-02f, -1.159068635e-02f, -1.159319787e-02f, -1.159568921e-02f, -1.159816038e-02f, -1.160061138e-02f, -1.160304221e-02f, -1.160545285e-02f, -1.160784331e-02f, -1.161021358e-02f,
+-1.161256366e-02f, -1.161489355e-02f, -1.161720324e-02f, -1.161949273e-02f, -1.162176203e-02f, -1.162401112e-02f, -1.162624000e-02f, -1.162844867e-02f, -1.163063713e-02f, -1.163280537e-02f,
+-1.163495340e-02f, -1.163708120e-02f, -1.163918879e-02f, -1.164127614e-02f, -1.164334327e-02f, -1.164539017e-02f, -1.164741684e-02f, -1.164942327e-02f, -1.165140946e-02f, -1.165337541e-02f,
+-1.165532112e-02f, -1.165724659e-02f, -1.165915181e-02f, -1.166103677e-02f, -1.166290149e-02f, -1.166474596e-02f, -1.166657017e-02f, -1.166837412e-02f, -1.167015781e-02f, -1.167192124e-02f,
+-1.167366441e-02f, -1.167538731e-02f, -1.167708994e-02f, -1.167877231e-02f, -1.168043440e-02f, -1.168207623e-02f, -1.168369777e-02f, -1.168529904e-02f, -1.168688004e-02f, -1.168844075e-02f,
+-1.168998118e-02f, -1.169150133e-02f, -1.169300120e-02f, -1.169448078e-02f, -1.169594008e-02f, -1.169737908e-02f, -1.169879780e-02f, -1.170019622e-02f, -1.170157435e-02f, -1.170293219e-02f,
+-1.170426973e-02f, -1.170558698e-02f, -1.170688393e-02f, -1.170816058e-02f, -1.170941693e-02f, -1.171065298e-02f, -1.171186873e-02f, -1.171306417e-02f, -1.171423931e-02f, -1.171539415e-02f,
+-1.171652868e-02f, -1.171764291e-02f, -1.171873683e-02f, -1.171981044e-02f, -1.172086374e-02f, -1.172189673e-02f, -1.172290941e-02f, -1.172390178e-02f, -1.172487384e-02f, -1.172582559e-02f,
+-1.172675702e-02f, -1.172766814e-02f, -1.172855895e-02f, -1.172942944e-02f, -1.173027962e-02f, -1.173110949e-02f, -1.173191904e-02f, -1.173270827e-02f, -1.173347719e-02f, -1.173422579e-02f,
+-1.173495408e-02f, -1.173566205e-02f, -1.173634970e-02f, -1.173701704e-02f, -1.173766406e-02f, -1.173829076e-02f, -1.173889715e-02f, -1.173948322e-02f, -1.174004898e-02f, -1.174059441e-02f,
+-1.174111954e-02f, -1.174162434e-02f, -1.174210884e-02f, -1.174257301e-02f, -1.174301687e-02f, -1.174344042e-02f, -1.174384365e-02f, -1.174422657e-02f, -1.174458917e-02f, -1.174493146e-02f,
+-1.174525344e-02f, -1.174555511e-02f, -1.174583646e-02f, -1.174609750e-02f, -1.174633824e-02f, -1.174655866e-02f, -1.174675878e-02f, -1.174693858e-02f, -1.174709809e-02f, -1.174723728e-02f,
+-1.174735617e-02f, -1.174745475e-02f, -1.174753303e-02f, -1.174759101e-02f, -1.174762868e-02f, -1.174764606e-02f, -1.174764313e-02f, -1.174761991e-02f, -1.174757639e-02f, -1.174751257e-02f,
+-1.174742846e-02f, -1.174732405e-02f, -1.174719936e-02f, -1.174705437e-02f, -1.174688909e-02f, -1.174670352e-02f, -1.174649766e-02f, -1.174627152e-02f, -1.174602510e-02f, -1.174575839e-02f,
+-1.174547140e-02f, -1.174516414e-02f, -1.174483659e-02f, -1.174448877e-02f, -1.174412067e-02f, -1.174373230e-02f, -1.174332367e-02f, -1.174289476e-02f, -1.174244558e-02f, -1.174197614e-02f,
+-1.174148644e-02f, -1.174097647e-02f, -1.174044624e-02f, -1.173989576e-02f, -1.173932502e-02f, -1.173873403e-02f, -1.173812279e-02f, -1.173749129e-02f, -1.173683955e-02f, -1.173616757e-02f,
+-1.173547534e-02f, -1.173476287e-02f, -1.173403017e-02f, -1.173327723e-02f, -1.173250406e-02f, -1.173171065e-02f, -1.173089702e-02f, -1.173006316e-02f, -1.172920908e-02f, -1.172833478e-02f,
+-1.172744026e-02f, -1.172652552e-02f, -1.172559058e-02f, -1.172463542e-02f, -1.172366005e-02f, -1.172266448e-02f, -1.172164871e-02f, -1.172061274e-02f, -1.171955658e-02f, -1.171848022e-02f,
+-1.171738367e-02f, -1.171626693e-02f, -1.171513001e-02f, -1.171397291e-02f, -1.171279563e-02f, -1.171159818e-02f, -1.171038055e-02f, -1.170914276e-02f, -1.170788480e-02f, -1.170660668e-02f,
+-1.170530840e-02f, -1.170398997e-02f, -1.170265138e-02f, -1.170129265e-02f, -1.169991377e-02f, -1.169851475e-02f, -1.169709559e-02f, -1.169565629e-02f, -1.169419687e-02f, -1.169271732e-02f,
+-1.169121764e-02f, -1.168969784e-02f, -1.168815793e-02f, -1.168659791e-02f, -1.168501777e-02f, -1.168341753e-02f, -1.168179720e-02f, -1.168015676e-02f, -1.167849623e-02f, -1.167681561e-02f,
+-1.167511490e-02f, -1.167339412e-02f, -1.167165325e-02f, -1.166989232e-02f, -1.166811131e-02f, -1.166631024e-02f, -1.166448911e-02f, -1.166264792e-02f, -1.166078668e-02f, -1.165890540e-02f,
+-1.165700407e-02f, -1.165508270e-02f, -1.165314129e-02f, -1.165117985e-02f, -1.164919839e-02f, -1.164719691e-02f, -1.164517541e-02f, -1.164313390e-02f, -1.164107238e-02f, -1.163899086e-02f,
+-1.163688934e-02f, -1.163476782e-02f, -1.163262632e-02f, -1.163046483e-02f, -1.162828337e-02f, -1.162608193e-02f, -1.162386052e-02f, -1.162161914e-02f, -1.161935781e-02f, -1.161707652e-02f,
+-1.161477528e-02f, -1.161245410e-02f, -1.161011298e-02f, -1.160775192e-02f, -1.160537093e-02f, -1.160297002e-02f, -1.160054919e-02f, -1.159810845e-02f, -1.159564780e-02f, -1.159316725e-02f,
+-1.159066680e-02f, -1.158814645e-02f, -1.158560622e-02f, -1.158304611e-02f, -1.158046612e-02f, -1.157786627e-02f, -1.157524654e-02f, -1.157260696e-02f, -1.156994753e-02f, -1.156726825e-02f,
+-1.156456912e-02f, -1.156185016e-02f, -1.155911137e-02f, -1.155635276e-02f, -1.155357432e-02f, -1.155077607e-02f, -1.154795802e-02f, -1.154512016e-02f, -1.154226251e-02f, -1.153938507e-02f,
+-1.153648785e-02f, -1.153357085e-02f, -1.153063407e-02f, -1.152767754e-02f, -1.152470124e-02f, -1.152170520e-02f, -1.151868940e-02f, -1.151565387e-02f, -1.151259860e-02f, -1.150952361e-02f,
+-1.150642889e-02f, -1.150331446e-02f, -1.150018032e-02f, -1.149702648e-02f, -1.149385295e-02f, -1.149065973e-02f, -1.148744682e-02f, -1.148421424e-02f, -1.148096199e-02f, -1.147769008e-02f,
+-1.147439851e-02f, -1.147108730e-02f, -1.146775644e-02f, -1.146440595e-02f, -1.146103583e-02f, -1.145764609e-02f, -1.145423674e-02f, -1.145080778e-02f, -1.144735921e-02f, -1.144389106e-02f,
+-1.144040332e-02f, -1.143689600e-02f, -1.143336910e-02f, -1.142982265e-02f, -1.142625663e-02f, -1.142267106e-02f, -1.141906595e-02f, -1.141544131e-02f, -1.141179714e-02f, -1.140813344e-02f,
+-1.140445023e-02f, -1.140074752e-02f, -1.139702530e-02f, -1.139328360e-02f, -1.138952241e-02f, -1.138574174e-02f, -1.138194160e-02f, -1.137812201e-02f, -1.137428296e-02f, -1.137042446e-02f,
+-1.136654653e-02f, -1.136264916e-02f, -1.135873237e-02f, -1.135479617e-02f, -1.135084056e-02f, -1.134686555e-02f, -1.134287115e-02f, -1.133885737e-02f, -1.133482421e-02f, -1.133077169e-02f,
+-1.132669980e-02f, -1.132260857e-02f, -1.131849799e-02f, -1.131436807e-02f, -1.131021883e-02f, -1.130605027e-02f, -1.130186240e-02f, -1.129765523e-02f, -1.129342877e-02f, -1.128918302e-02f,
+-1.128491799e-02f, -1.128063370e-02f, -1.127633014e-02f, -1.127200733e-02f, -1.126766528e-02f, -1.126330400e-02f, -1.125892349e-02f, -1.125452376e-02f, -1.125010482e-02f, -1.124566668e-02f,
+-1.124120936e-02f, -1.123673284e-02f, -1.123223716e-02f, -1.122772231e-02f, -1.122318830e-02f, -1.121863515e-02f, -1.121406286e-02f, -1.120947144e-02f, -1.120486089e-02f, -1.120023124e-02f,
+-1.119558248e-02f, -1.119091463e-02f, -1.118622770e-02f, -1.118152169e-02f, -1.117679662e-02f, -1.117205248e-02f, -1.116728930e-02f, -1.116250709e-02f, -1.115770584e-02f, -1.115288557e-02f,
+-1.114804629e-02f, -1.114318802e-02f, -1.113831075e-02f, -1.113341449e-02f, -1.112849927e-02f, -1.112356508e-02f, -1.111861194e-02f, -1.111363985e-02f, -1.110864883e-02f, -1.110363889e-02f,
+-1.109861003e-02f, -1.109356226e-02f, -1.108849560e-02f, -1.108341006e-02f, -1.107830563e-02f, -1.107318234e-02f, -1.106804020e-02f, -1.106287921e-02f, -1.105769938e-02f, -1.105250072e-02f,
+-1.104728325e-02f, -1.104204697e-02f, -1.103679190e-02f, -1.103151804e-02f, -1.102622540e-02f, -1.102091400e-02f, -1.101558384e-02f, -1.101023493e-02f, -1.100486729e-02f, -1.099948093e-02f,
+-1.099407585e-02f, -1.098865206e-02f, -1.098320958e-02f, -1.097774842e-02f, -1.097226859e-02f, -1.096677009e-02f, -1.096125294e-02f, -1.095571715e-02f, -1.095016272e-02f, -1.094458968e-02f,
+-1.093899802e-02f, -1.093338777e-02f, -1.092775893e-02f, -1.092211151e-02f, -1.091644552e-02f, -1.091076098e-02f, -1.090505789e-02f, -1.089933627e-02f, -1.089359612e-02f, -1.088783746e-02f,
+-1.088206030e-02f, -1.087626465e-02f, -1.087045052e-02f, -1.086461792e-02f, -1.085876686e-02f, -1.085289735e-02f, -1.084700941e-02f, -1.084110305e-02f, -1.083517827e-02f, -1.082923509e-02f,
+-1.082327352e-02f, -1.081729357e-02f, -1.081129525e-02f, -1.080527858e-02f, -1.079924356e-02f, -1.079319020e-02f, -1.078711853e-02f, -1.078102854e-02f, -1.077492025e-02f, -1.076879368e-02f,
+-1.076264883e-02f, -1.075648571e-02f, -1.075030434e-02f, -1.074410474e-02f, -1.073788690e-02f, -1.073165084e-02f, -1.072539657e-02f, -1.071912412e-02f, -1.071283347e-02f, -1.070652466e-02f,
+-1.070019769e-02f, -1.069385257e-02f, -1.068748932e-02f, -1.068110795e-02f, -1.067470846e-02f, -1.066829087e-02f, -1.066185520e-02f, -1.065540145e-02f, -1.064892964e-02f, -1.064243978e-02f,
+-1.063593188e-02f, -1.062940596e-02f, -1.062286202e-02f, -1.061630008e-02f, -1.060972015e-02f, -1.060312224e-02f, -1.059650637e-02f, -1.058987254e-02f, -1.058322078e-02f, -1.057655108e-02f,
+-1.056986348e-02f, -1.056315797e-02f, -1.055643457e-02f, -1.054969329e-02f, -1.054293415e-02f, -1.053615716e-02f, -1.052936233e-02f, -1.052254967e-02f, -1.051571920e-02f, -1.050887092e-02f,
+-1.050200486e-02f, -1.049512102e-02f, -1.048821942e-02f, -1.048130007e-02f, -1.047436299e-02f, -1.046740818e-02f, -1.046043566e-02f, -1.045344544e-02f, -1.044643753e-02f, -1.043941196e-02f,
+-1.043236872e-02f, -1.042530784e-02f, -1.041822933e-02f, -1.041113319e-02f, -1.040401946e-02f, -1.039688812e-02f, -1.038973921e-02f, -1.038257274e-02f, -1.037538871e-02f, -1.036818714e-02f,
+-1.036096804e-02f, -1.035373143e-02f, -1.034647732e-02f, -1.033920573e-02f, -1.033191666e-02f, -1.032461014e-02f, -1.031728617e-02f, -1.030994477e-02f, -1.030258595e-02f, -1.029520972e-02f,
+-1.028781611e-02f, -1.028040511e-02f, -1.027297676e-02f, -1.026553105e-02f, -1.025806801e-02f, -1.025058765e-02f, -1.024308998e-02f, -1.023557501e-02f, -1.022804277e-02f, -1.022049326e-02f,
+-1.021292649e-02f, -1.020534249e-02f, -1.019774127e-02f, -1.019012283e-02f, -1.018248720e-02f, -1.017483438e-02f, -1.016716440e-02f, -1.015947726e-02f, -1.015177299e-02f, -1.014405159e-02f,
+-1.013631308e-02f, -1.012855747e-02f, -1.012078478e-02f, -1.011299502e-02f, -1.010518821e-02f, -1.009736436e-02f, -1.008952348e-02f, -1.008166559e-02f, -1.007379071e-02f, -1.006589885e-02f,
+-1.005799002e-02f, -1.005006424e-02f, -1.004212152e-02f, -1.003416187e-02f, -1.002618532e-02f, -1.001819188e-02f, -1.001018155e-02f, -1.000215437e-02f, -9.994110328e-03f, -9.986049457e-03f,
+-9.977971765e-03f, -9.969877269e-03f, -9.961765983e-03f, -9.953637922e-03f, -9.945493101e-03f, -9.937331535e-03f, -9.929153239e-03f, -9.920958227e-03f, -9.912746516e-03f, -9.904518119e-03f,
+-9.896273053e-03f, -9.888011332e-03f, -9.879732972e-03f, -9.871437988e-03f, -9.863126394e-03f, -9.854798207e-03f, -9.846453441e-03f, -9.838092111e-03f, -9.829714234e-03f, -9.821319825e-03f,
+-9.812908898e-03f, -9.804481470e-03f, -9.796037555e-03f, -9.787577169e-03f, -9.779100329e-03f, -9.770607048e-03f, -9.762097344e-03f, -9.753571231e-03f, -9.745028724e-03f, -9.736469841e-03f,
+-9.727894596e-03f, -9.719303004e-03f, -9.710695083e-03f, -9.702070847e-03f, -9.693430312e-03f, -9.684773495e-03f, -9.676100410e-03f, -9.667411074e-03f, -9.658705503e-03f, -9.649983713e-03f,
+-9.641245718e-03f, -9.632491537e-03f, -9.623721184e-03f, -9.614934675e-03f, -9.606132027e-03f, -9.597313256e-03f, -9.588478377e-03f, -9.579627407e-03f, -9.570760363e-03f, -9.561877259e-03f,
+-9.552978113e-03f, -9.544062941e-03f, -9.535131758e-03f, -9.526184582e-03f, -9.517221428e-03f, -9.508242313e-03f, -9.499247254e-03f, -9.490236266e-03f, -9.481209366e-03f, -9.472166571e-03f,
+-9.463107896e-03f, -9.454033360e-03f, -9.444942977e-03f, -9.435836765e-03f, -9.426714740e-03f, -9.417576919e-03f, -9.408423318e-03f, -9.399253955e-03f, -9.390068845e-03f, -9.380868006e-03f,
+-9.371651454e-03f, -9.362419206e-03f, -9.353171279e-03f, -9.343907690e-03f, -9.334628455e-03f, -9.325333591e-03f, -9.316023116e-03f, -9.306697046e-03f, -9.297355398e-03f, -9.287998189e-03f,
+-9.278625436e-03f, -9.269237157e-03f, -9.259833367e-03f, -9.250414085e-03f, -9.240979328e-03f, -9.231529111e-03f, -9.222063454e-03f, -9.212582372e-03f, -9.203085884e-03f, -9.193574006e-03f,
+-9.184046755e-03f, -9.174504150e-03f, -9.164946206e-03f, -9.155372942e-03f, -9.145784375e-03f, -9.136180522e-03f, -9.126561401e-03f, -9.116927029e-03f, -9.107277423e-03f, -9.097612602e-03f,
+-9.087932582e-03f, -9.078237382e-03f, -9.068527018e-03f, -9.058801508e-03f, -9.049060871e-03f, -9.039305122e-03f, -9.029534282e-03f, -9.019748366e-03f, -9.009947392e-03f, -9.000131379e-03f,
+-8.990300345e-03f, -8.980454306e-03f, -8.970593281e-03f, -8.960717287e-03f, -8.950826343e-03f, -8.940920467e-03f, -8.930999675e-03f, -8.921063987e-03f, -8.911113420e-03f, -8.901147993e-03f,
+-8.891167722e-03f, -8.881172627e-03f, -8.871162725e-03f, -8.861138034e-03f, -8.851098573e-03f, -8.841044360e-03f, -8.830975412e-03f, -8.820891749e-03f, -8.810793387e-03f, -8.800680346e-03f,
+-8.790552644e-03f, -8.780410299e-03f, -8.770253329e-03f, -8.760081753e-03f, -8.749895588e-03f, -8.739694855e-03f, -8.729479570e-03f, -8.719249752e-03f, -8.709005420e-03f, -8.698746592e-03f,
+-8.688473286e-03f, -8.678185522e-03f, -8.667883318e-03f, -8.657566692e-03f, -8.647235662e-03f, -8.636890249e-03f, -8.626530469e-03f, -8.616156343e-03f, -8.605767888e-03f, -8.595365123e-03f,
+-8.584948067e-03f, -8.574516739e-03f, -8.564071158e-03f, -8.553611342e-03f, -8.543137310e-03f, -8.532649081e-03f, -8.522146674e-03f, -8.511630109e-03f, -8.501099402e-03f, -8.490554575e-03f,
+-8.479995645e-03f, -8.469422633e-03f, -8.458835555e-03f, -8.448234433e-03f, -8.437619285e-03f, -8.426990129e-03f, -8.416346986e-03f, -8.405689873e-03f, -8.395018812e-03f, -8.384333819e-03f,
+-8.373634916e-03f, -8.362922120e-03f, -8.352195452e-03f, -8.341454930e-03f, -8.330700575e-03f, -8.319932404e-03f, -8.309150438e-03f, -8.298354696e-03f, -8.287545197e-03f, -8.276721960e-03f,
+-8.265885006e-03f, -8.255034353e-03f, -8.244170022e-03f, -8.233292031e-03f, -8.222400400e-03f, -8.211495149e-03f, -8.200576297e-03f, -8.189643864e-03f, -8.178697869e-03f, -8.167738332e-03f,
+-8.156765273e-03f, -8.145778712e-03f, -8.134778667e-03f, -8.123765160e-03f, -8.112738209e-03f, -8.101697834e-03f, -8.090644056e-03f, -8.079576894e-03f, -8.068496367e-03f, -8.057402496e-03f,
+-8.046295301e-03f, -8.035174801e-03f, -8.024041017e-03f, -8.012893968e-03f, -8.001733674e-03f, -7.990560156e-03f, -7.979373433e-03f, -7.968173525e-03f, -7.956960453e-03f, -7.945734236e-03f,
+-7.934494895e-03f, -7.923242450e-03f, -7.911976920e-03f, -7.900698327e-03f, -7.889406690e-03f, -7.878102029e-03f, -7.866784365e-03f, -7.855453718e-03f, -7.844110108e-03f, -7.832753555e-03f,
+-7.821384081e-03f, -7.810001704e-03f, -7.798606446e-03f, -7.787198327e-03f, -7.775777367e-03f, -7.764343587e-03f, -7.752897007e-03f, -7.741437648e-03f, -7.729965530e-03f, -7.718480673e-03f,
+-7.706983098e-03f, -7.695472827e-03f, -7.683949878e-03f, -7.672414273e-03f, -7.660866033e-03f, -7.649305177e-03f, -7.637731728e-03f, -7.626145705e-03f, -7.614547128e-03f, -7.602936020e-03f,
+-7.591312400e-03f, -7.579676290e-03f, -7.568027709e-03f, -7.556366680e-03f, -7.544693222e-03f, -7.533007356e-03f, -7.521309104e-03f, -7.509598486e-03f, -7.497875523e-03f, -7.486140237e-03f,
+-7.474392647e-03f, -7.462632775e-03f, -7.450860642e-03f, -7.439076269e-03f, -7.427279677e-03f, -7.415470887e-03f, -7.403649920e-03f, -7.391816797e-03f, -7.379971539e-03f, -7.368114167e-03f,
+-7.356244703e-03f, -7.344363168e-03f, -7.332469582e-03f, -7.320563967e-03f, -7.308646345e-03f, -7.296716735e-03f, -7.284775161e-03f, -7.272821642e-03f, -7.260856201e-03f, -7.248878858e-03f,
+-7.236889635e-03f, -7.224888554e-03f, -7.212875635e-03f, -7.200850900e-03f, -7.188814370e-03f, -7.176766067e-03f, -7.164706012e-03f, -7.152634228e-03f, -7.140550734e-03f, -7.128455553e-03f,
+-7.116348706e-03f, -7.104230215e-03f, -7.092100102e-03f, -7.079958387e-03f, -7.067805093e-03f, -7.055640241e-03f, -7.043463853e-03f, -7.031275951e-03f, -7.019076555e-03f, -7.006865688e-03f,
+-6.994643372e-03f, -6.982409628e-03f, -6.970164478e-03f, -6.957907944e-03f, -6.945640048e-03f, -6.933360810e-03f, -6.921070254e-03f, -6.908768401e-03f, -6.896455273e-03f, -6.884130892e-03f,
+-6.871795279e-03f, -6.859448457e-03f, -6.847090447e-03f, -6.834721272e-03f, -6.822340953e-03f, -6.809949513e-03f, -6.797546973e-03f, -6.785133355e-03f, -6.772708682e-03f, -6.760272976e-03f,
+-6.747826258e-03f, -6.735368551e-03f, -6.722899876e-03f, -6.710420257e-03f, -6.697929715e-03f, -6.685428271e-03f, -6.672915950e-03f, -6.660392772e-03f, -6.647858760e-03f, -6.635313936e-03f,
+-6.622758322e-03f, -6.610191941e-03f, -6.597614815e-03f, -6.585026966e-03f, -6.572428417e-03f, -6.559819189e-03f, -6.547199306e-03f, -6.534568789e-03f, -6.521927662e-03f, -6.509275945e-03f,
+-6.496613663e-03f, -6.483940837e-03f, -6.471257489e-03f, -6.458563643e-03f, -6.445859321e-03f, -6.433144545e-03f, -6.420419337e-03f, -6.407683721e-03f, -6.394937718e-03f, -6.382181352e-03f,
+-6.369414645e-03f, -6.356637620e-03f, -6.343850299e-03f, -6.331052705e-03f, -6.318244860e-03f, -6.305426788e-03f, -6.292598511e-03f, -6.279760051e-03f, -6.266911431e-03f, -6.254052675e-03f,
+-6.241183805e-03f, -6.228304843e-03f, -6.215415812e-03f, -6.202516736e-03f, -6.189607637e-03f, -6.176688538e-03f, -6.163759462e-03f, -6.150820431e-03f, -6.137871469e-03f, -6.124912598e-03f,
+-6.111943842e-03f, -6.098965222e-03f, -6.085976763e-03f, -6.072978488e-03f, -6.059970418e-03f, -6.046952578e-03f, -6.033924990e-03f, -6.020887677e-03f, -6.007840662e-03f, -5.994783968e-03f,
+-5.981717619e-03f, -5.968641638e-03f, -5.955556047e-03f, -5.942460870e-03f, -5.929356130e-03f, -5.916241849e-03f, -5.903118052e-03f, -5.889984761e-03f, -5.876842000e-03f, -5.863689792e-03f,
+-5.850528159e-03f, -5.837357126e-03f, -5.824176716e-03f, -5.810986951e-03f, -5.797787855e-03f, -5.784579451e-03f, -5.771361764e-03f, -5.758134815e-03f, -5.744898629e-03f, -5.731653228e-03f,
+-5.718398636e-03f, -5.705134877e-03f, -5.691861974e-03f, -5.678579951e-03f, -5.665288830e-03f, -5.651988635e-03f, -5.638679390e-03f, -5.625361118e-03f, -5.612033842e-03f, -5.598697587e-03f,
+-5.585352375e-03f, -5.571998231e-03f, -5.558635178e-03f, -5.545263238e-03f, -5.531882437e-03f, -5.518492797e-03f, -5.505094343e-03f, -5.491687097e-03f, -5.478271083e-03f, -5.464846325e-03f,
+-5.451412847e-03f, -5.437970672e-03f, -5.424519825e-03f, -5.411060328e-03f, -5.397592205e-03f, -5.384115481e-03f, -5.370630179e-03f, -5.357136322e-03f, -5.343633935e-03f, -5.330123041e-03f,
+-5.316603664e-03f, -5.303075828e-03f, -5.289539556e-03f, -5.275994873e-03f, -5.262441802e-03f, -5.248880368e-03f, -5.235310593e-03f, -5.221732503e-03f, -5.208146121e-03f, -5.194551470e-03f,
+-5.180948575e-03f, -5.167337459e-03f, -5.153718148e-03f, -5.140090664e-03f, -5.126455031e-03f, -5.112811274e-03f, -5.099159417e-03f, -5.085499483e-03f, -5.071831497e-03f, -5.058155482e-03f,
+-5.044471463e-03f, -5.030779464e-03f, -5.017079509e-03f, -5.003371622e-03f, -4.989655827e-03f, -4.975932148e-03f, -4.962200610e-03f, -4.948461236e-03f, -4.934714050e-03f, -4.920959077e-03f,
+-4.907196342e-03f, -4.893425867e-03f, -4.879647678e-03f, -4.865861798e-03f, -4.852068253e-03f, -4.838267065e-03f, -4.824458260e-03f, -4.810641861e-03f, -4.796817893e-03f, -4.782986380e-03f,
+-4.769147347e-03f, -4.755300817e-03f, -4.741446815e-03f, -4.727585366e-03f, -4.713716494e-03f, -4.699840222e-03f, -4.685956576e-03f, -4.672065580e-03f, -4.658167259e-03f, -4.644261636e-03f,
+-4.630348736e-03f, -4.616428583e-03f, -4.602501202e-03f, -4.588566618e-03f, -4.574624855e-03f, -4.560675936e-03f, -4.546719888e-03f, -4.532756734e-03f, -4.518786499e-03f, -4.504809207e-03f,
+-4.490824883e-03f, -4.476833551e-03f, -4.462835236e-03f, -4.448829962e-03f, -4.434817755e-03f, -4.420798638e-03f, -4.406772636e-03f, -4.392739775e-03f, -4.378700077e-03f, -4.364653569e-03f,
+-4.350600274e-03f, -4.336540217e-03f, -4.322473424e-03f, -4.308399918e-03f, -4.294319724e-03f, -4.280232868e-03f, -4.266139373e-03f, -4.252039264e-03f, -4.237932566e-03f, -4.223819305e-03f,
+-4.209699503e-03f, -4.195573187e-03f, -4.181440381e-03f, -4.167301110e-03f, -4.153155399e-03f, -4.139003271e-03f, -4.124844753e-03f, -4.110679869e-03f, -4.096508644e-03f, -4.082331102e-03f,
+-4.068147268e-03f, -4.053957168e-03f, -4.039760826e-03f, -4.025558267e-03f, -4.011349516e-03f, -3.997134597e-03f, -3.982913536e-03f, -3.968686357e-03f, -3.954453086e-03f, -3.940213747e-03f,
+-3.925968366e-03f, -3.911716966e-03f, -3.897459574e-03f, -3.883196214e-03f, -3.868926910e-03f, -3.854651689e-03f, -3.840370575e-03f, -3.826083592e-03f, -3.811790767e-03f, -3.797492124e-03f,
+-3.783187687e-03f, -3.768877482e-03f, -3.754561535e-03f, -3.740239870e-03f, -3.725912511e-03f, -3.711579485e-03f, -3.697240816e-03f, -3.682896529e-03f, -3.668546650e-03f, -3.654191203e-03f,
+-3.639830214e-03f, -3.625463707e-03f, -3.611091709e-03f, -3.596714243e-03f, -3.582331335e-03f, -3.567943010e-03f, -3.553549294e-03f, -3.539150211e-03f, -3.524745787e-03f, -3.510336047e-03f,
+-3.495921015e-03f, -3.481500718e-03f, -3.467075180e-03f, -3.452644427e-03f, -3.438208483e-03f, -3.423767375e-03f, -3.409321127e-03f, -3.394869764e-03f, -3.380413312e-03f, -3.365951796e-03f,
+-3.351485241e-03f, -3.337013672e-03f, -3.322537115e-03f, -3.308055596e-03f, -3.293569138e-03f, -3.279077768e-03f, -3.264581511e-03f, -3.250080392e-03f, -3.235574437e-03f, -3.221063670e-03f,
+-3.206548118e-03f, -3.192027805e-03f, -3.177502756e-03f, -3.162972998e-03f, -3.148438556e-03f, -3.133899454e-03f, -3.119355719e-03f, -3.104807375e-03f, -3.090254448e-03f, -3.075696963e-03f,
+-3.061134947e-03f, -3.046568423e-03f, -3.031997418e-03f, -3.017421957e-03f, -3.002842065e-03f, -2.988257769e-03f, -2.973669092e-03f, -2.959076061e-03f, -2.944478701e-03f, -2.929877038e-03f,
+-2.915271097e-03f, -2.900660903e-03f, -2.886046483e-03f, -2.871427860e-03f, -2.856805062e-03f, -2.842178113e-03f, -2.827547039e-03f, -2.812911865e-03f, -2.798272617e-03f, -2.783629321e-03f,
+-2.768982002e-03f, -2.754330684e-03f, -2.739675395e-03f, -2.725016160e-03f, -2.710353003e-03f, -2.695685951e-03f, -2.681015029e-03f, -2.666340263e-03f, -2.651661678e-03f, -2.636979300e-03f,
+-2.622293154e-03f, -2.607603266e-03f, -2.592909661e-03f, -2.578212366e-03f, -2.563511405e-03f, -2.548806804e-03f, -2.534098590e-03f, -2.519386786e-03f, -2.504671420e-03f, -2.489952517e-03f,
+-2.475230101e-03f, -2.460504200e-03f, -2.445774838e-03f, -2.431042042e-03f, -2.416305836e-03f, -2.401566247e-03f, -2.386823299e-03f, -2.372077020e-03f, -2.357327434e-03f, -2.342574567e-03f,
+-2.327818444e-03f, -2.313059092e-03f, -2.298296536e-03f, -2.283530802e-03f, -2.268761915e-03f, -2.253989901e-03f, -2.239214786e-03f, -2.224436596e-03f, -2.209655355e-03f, -2.194871091e-03f,
+-2.180083828e-03f, -2.165293592e-03f, -2.150500409e-03f, -2.135704305e-03f, -2.120905305e-03f, -2.106103436e-03f, -2.091298722e-03f, -2.076491190e-03f, -2.061680865e-03f, -2.046867773e-03f,
+-2.032051940e-03f, -2.017233391e-03f, -2.002412153e-03f, -1.987588250e-03f, -1.972761710e-03f, -1.957932557e-03f, -1.943100817e-03f, -1.928266516e-03f, -1.913429680e-03f, -1.898590335e-03f,
+-1.883748505e-03f, -1.868904218e-03f, -1.854057499e-03f, -1.839208374e-03f, -1.824356868e-03f, -1.809503007e-03f, -1.794646817e-03f, -1.779788324e-03f, -1.764927553e-03f, -1.750064531e-03f,
+-1.735199283e-03f, -1.720331835e-03f, -1.705462213e-03f, -1.690590442e-03f, -1.675716549e-03f, -1.660840559e-03f, -1.645962498e-03f, -1.631082391e-03f, -1.616200266e-03f, -1.601316147e-03f,
+-1.586430060e-03f, -1.571542031e-03f, -1.556652086e-03f, -1.541760251e-03f, -1.526866551e-03f, -1.511971013e-03f, -1.497073661e-03f, -1.482174523e-03f, -1.467273624e-03f, -1.452370990e-03f,
+-1.437466646e-03f, -1.422560619e-03f, -1.407652933e-03f, -1.392743616e-03f, -1.377832693e-03f, -1.362920189e-03f, -1.348006132e-03f, -1.333090545e-03f, -1.318173456e-03f, -1.303254890e-03f,
+-1.288334873e-03f, -1.273413431e-03f, -1.258490590e-03f, -1.243566375e-03f, -1.228640813e-03f, -1.213713928e-03f, -1.198785748e-03f, -1.183856298e-03f, -1.168925604e-03f, -1.153993692e-03f,
+-1.139060587e-03f, -1.124126316e-03f, -1.109190903e-03f, -1.094254376e-03f, -1.079316760e-03f, -1.064378081e-03f, -1.049438365e-03f, -1.034497637e-03f, -1.019555924e-03f, -1.004613251e-03f,
+-9.896696442e-04f, -9.747251295e-04f, -9.597797327e-04f, -9.448334798e-04f, -9.298863964e-04f, -9.149385086e-04f, -8.999898422e-04f, -8.850404231e-04f, -8.700902770e-04f, -8.551394300e-04f,
+-8.401879077e-04f, -8.252357362e-04f, -8.102829413e-04f, -7.953295488e-04f, -7.803755847e-04f, -7.654210747e-04f, -7.504660447e-04f, -7.355105206e-04f, -7.205545283e-04f, -7.055980936e-04f,
+-6.906412424e-04f, -6.756840005e-04f, -6.607263938e-04f, -6.457684481e-04f, -6.308101894e-04f, -6.158516435e-04f, -6.008928362e-04f, -5.859337933e-04f, -5.709745408e-04f, -5.560151045e-04f,
+-5.410555102e-04f, -5.260957838e-04f, -5.111359512e-04f, -4.961760381e-04f, -4.812160705e-04f, -4.662560742e-04f, -4.512960749e-04f, -4.363360987e-04f, -4.213761713e-04f, -4.064163185e-04f,
+-3.914565662e-04f, -3.764969403e-04f, -3.615374665e-04f, -3.465781707e-04f, -3.316190788e-04f, -3.166602165e-04f, -3.017016097e-04f, -2.867432842e-04f, -2.717852658e-04f, -2.568275805e-04f,
+-2.418702539e-04f, -2.269133119e-04f, -2.119567803e-04f, -1.970006850e-04f, -1.820450517e-04f, -1.670899063e-04f, -1.521352746e-04f, -1.371811823e-04f, -1.222276554e-04f, -1.072747195e-04f,
+-9.232240045e-05f, -7.737072411e-05f, -6.241971625e-05f, -4.746940266e-05f, -3.251980912e-05f, -1.757096141e-05f, -2.622885336e-06f, 1.232439334e-05f, 2.727084882e-05f, 4.221645535e-05f,
+5.716118715e-05f, 7.210501844e-05f, 8.704792347e-05f, 1.019898765e-04f, 1.169308517e-04f, 1.318708233e-04f, 1.468097657e-04f, 1.617476529e-04f, 1.766844594e-04f, 1.916201594e-04f,
+2.065547270e-04f, 2.214881366e-04f, 2.364203624e-04f, 2.513513788e-04f, 2.662811599e-04f, 2.812096801e-04f, 2.961369136e-04f, 3.110628347e-04f, 3.259874177e-04f, 3.409106368e-04f,
+3.558324665e-04f, 3.707528810e-04f, 3.856718545e-04f, 4.005893614e-04f, 4.155053760e-04f, 4.304198726e-04f, 4.453328255e-04f, 4.602442091e-04f, 4.751539976e-04f, 4.900621655e-04f,
+5.049686869e-04f, 5.198735364e-04f, 5.347766881e-04f, 5.496781165e-04f, 5.645777959e-04f, 5.794757007e-04f, 5.943718052e-04f, 6.092660838e-04f, 6.241585108e-04f, 6.390490607e-04f,
+6.539377078e-04f, 6.688244264e-04f, 6.837091910e-04f, 6.985919760e-04f, 7.134727558e-04f, 7.283515047e-04f, 7.432281971e-04f, 7.581028076e-04f, 7.729753105e-04f, 7.878456801e-04f,
+8.027138910e-04f, 8.175799176e-04f, 8.324437343e-04f, 8.473053155e-04f, 8.621646358e-04f, 8.770216695e-04f, 8.918763911e-04f, 9.067287751e-04f, 9.215787959e-04f, 9.364264280e-04f,
+9.512716459e-04f, 9.661144241e-04f, 9.809547370e-04f, 9.957925592e-04f, 1.010627865e-03f, 1.025460629e-03f, 1.040290827e-03f, 1.055118431e-03f, 1.069943417e-03f, 1.084765760e-03f,
+1.099585433e-03f, 1.114402412e-03f, 1.129216671e-03f, 1.144028184e-03f, 1.158836926e-03f, 1.173642873e-03f, 1.188445997e-03f, 1.203246274e-03f, 1.218043679e-03f, 1.232838185e-03f,
+1.247629768e-03f, 1.262418403e-03f, 1.277204063e-03f, 1.291986724e-03f, 1.306766359e-03f, 1.321542945e-03f, 1.336316454e-03f, 1.351086863e-03f, 1.365854145e-03f, 1.380618276e-03f,
+1.395379229e-03f, 1.410136980e-03f, 1.424891503e-03f, 1.439642774e-03f, 1.454390766e-03f, 1.469135454e-03f, 1.483876813e-03f, 1.498614818e-03f, 1.513349444e-03f, 1.528080665e-03f,
+1.542808456e-03f, 1.557532791e-03f, 1.572253646e-03f, 1.586970996e-03f, 1.601684814e-03f, 1.616395076e-03f, 1.631101756e-03f, 1.645804830e-03f, 1.660504272e-03f, 1.675200056e-03f,
+1.689892159e-03f, 1.704580554e-03f, 1.719265216e-03f, 1.733946121e-03f, 1.748623242e-03f, 1.763296555e-03f, 1.777966036e-03f, 1.792631657e-03f, 1.807293396e-03f, 1.821951225e-03f,
+1.836605121e-03f, 1.851255058e-03f, 1.865901011e-03f, 1.880542955e-03f, 1.895180864e-03f, 1.909814715e-03f, 1.924444481e-03f, 1.939070138e-03f, 1.953691661e-03f, 1.968309024e-03f,
+1.982922203e-03f, 1.997531172e-03f, 2.012135907e-03f, 2.026736383e-03f, 2.041332574e-03f, 2.055924455e-03f, 2.070512002e-03f, 2.085095190e-03f, 2.099673994e-03f, 2.114248388e-03f,
+2.128818348e-03f, 2.143383848e-03f, 2.157944865e-03f, 2.172501373e-03f, 2.187053346e-03f, 2.201600761e-03f, 2.216143593e-03f, 2.230681815e-03f, 2.245215405e-03f, 2.259744336e-03f,
+2.274268583e-03f, 2.288788123e-03f, 2.303302930e-03f, 2.317812980e-03f, 2.332318247e-03f, 2.346818707e-03f, 2.361314334e-03f, 2.375805105e-03f, 2.390290994e-03f, 2.404771977e-03f,
+2.419248029e-03f, 2.433719125e-03f, 2.448185241e-03f, 2.462646351e-03f, 2.477102431e-03f, 2.491553456e-03f, 2.505999402e-03f, 2.520440244e-03f, 2.534875957e-03f, 2.549306517e-03f,
+2.563731899e-03f, 2.578152078e-03f, 2.592567029e-03f, 2.606976729e-03f, 2.621381152e-03f, 2.635780274e-03f, 2.650174070e-03f, 2.664562515e-03f, 2.678945586e-03f, 2.693323257e-03f,
+2.707695504e-03f, 2.722062303e-03f, 2.736423629e-03f, 2.750779456e-03f, 2.765129762e-03f, 2.779474521e-03f, 2.793813710e-03f, 2.808147302e-03f, 2.822475275e-03f, 2.836797603e-03f,
+2.851114262e-03f, 2.865425227e-03f, 2.879730475e-03f, 2.894029981e-03f, 2.908323720e-03f, 2.922611669e-03f, 2.936893802e-03f, 2.951170095e-03f, 2.965440524e-03f, 2.979705065e-03f,
+2.993963693e-03f, 3.008216384e-03f, 3.022463114e-03f, 3.036703858e-03f, 3.050938593e-03f, 3.065167293e-03f, 3.079389935e-03f, 3.093606494e-03f, 3.107816946e-03f, 3.122021267e-03f,
+3.136219433e-03f, 3.150411419e-03f, 3.164597202e-03f, 3.178776757e-03f, 3.192950059e-03f, 3.207117086e-03f, 3.221277812e-03f, 3.235432214e-03f, 3.249580267e-03f, 3.263721947e-03f,
+3.277857231e-03f, 3.291986094e-03f, 3.306108512e-03f, 3.320224461e-03f, 3.334333917e-03f, 3.348436856e-03f, 3.362533254e-03f, 3.376623087e-03f, 3.390706331e-03f, 3.404782962e-03f,
+3.418852957e-03f, 3.432916290e-03f, 3.446972938e-03f, 3.461022878e-03f, 3.475066085e-03f, 3.489102535e-03f, 3.503132205e-03f, 3.517155070e-03f, 3.531171108e-03f, 3.545180293e-03f,
+3.559182603e-03f, 3.573178012e-03f, 3.587166499e-03f, 3.601148038e-03f, 3.615122606e-03f, 3.629090179e-03f, 3.643050733e-03f, 3.657004245e-03f, 3.670950691e-03f, 3.684890047e-03f,
+3.698822290e-03f, 3.712747396e-03f, 3.726665341e-03f, 3.740576101e-03f, 3.754479653e-03f, 3.768375973e-03f, 3.782265038e-03f, 3.796146824e-03f, 3.810021308e-03f, 3.823888465e-03f,
+3.837748272e-03f, 3.851600707e-03f, 3.865445744e-03f, 3.879283361e-03f, 3.893113534e-03f, 3.906936240e-03f, 3.920751455e-03f, 3.934559156e-03f, 3.948359319e-03f, 3.962151921e-03f,
+3.975936938e-03f, 3.989714347e-03f, 4.003484125e-03f, 4.017246248e-03f, 4.031000693e-03f, 4.044747436e-03f, 4.058486455e-03f, 4.072217726e-03f, 4.085941225e-03f, 4.099656929e-03f,
+4.113364815e-03f, 4.127064860e-03f, 4.140757041e-03f, 4.154441334e-03f, 4.168117715e-03f, 4.181786163e-03f, 4.195446653e-03f, 4.209099163e-03f, 4.222743669e-03f, 4.236380148e-03f,
+4.250008577e-03f, 4.263628934e-03f, 4.277241194e-03f, 4.290845334e-03f, 4.304441333e-03f, 4.318029166e-03f, 4.331608811e-03f, 4.345180244e-03f, 4.358743443e-03f, 4.372298384e-03f,
+4.385845045e-03f, 4.399383403e-03f, 4.412913434e-03f, 4.426435116e-03f, 4.439948426e-03f, 4.453453341e-03f, 4.466949838e-03f, 4.480437895e-03f, 4.493917487e-03f, 4.507388593e-03f,
+4.520851190e-03f, 4.534305255e-03f, 4.547750765e-03f, 4.561187698e-03f, 4.574616030e-03f, 4.588035738e-03f, 4.601446801e-03f, 4.614849196e-03f, 4.628242899e-03f, 4.641627888e-03f,
+4.655004141e-03f, 4.668371635e-03f, 4.681730347e-03f, 4.695080254e-03f, 4.708421334e-03f, 4.721753565e-03f, 4.735076923e-03f, 4.748391387e-03f, 4.761696934e-03f, 4.774993541e-03f,
+4.788281186e-03f, 4.801559845e-03f, 4.814829498e-03f, 4.828090122e-03f, 4.841341693e-03f, 4.854584190e-03f, 4.867817590e-03f, 4.881041870e-03f, 4.894257010e-03f, 4.907462985e-03f,
+4.920659774e-03f, 4.933847355e-03f, 4.947025704e-03f, 4.960194801e-03f, 4.973354623e-03f, 4.986505146e-03f, 4.999646350e-03f, 5.012778213e-03f, 5.025900710e-03f, 5.039013822e-03f,
+5.052117525e-03f, 5.065211797e-03f, 5.078296617e-03f, 5.091371962e-03f, 5.104437810e-03f, 5.117494139e-03f, 5.130540927e-03f, 5.143578151e-03f, 5.156605791e-03f, 5.169623824e-03f,
+5.182632227e-03f, 5.195630980e-03f, 5.208620060e-03f, 5.221599445e-03f, 5.234569113e-03f, 5.247529042e-03f, 5.260479211e-03f, 5.273419598e-03f, 5.286350180e-03f, 5.299270937e-03f,
+5.312181845e-03f, 5.325082884e-03f, 5.337974032e-03f, 5.350855267e-03f, 5.363726567e-03f, 5.376587910e-03f, 5.389439275e-03f, 5.402280640e-03f, 5.415111984e-03f, 5.427933285e-03f,
+5.440744521e-03f, 5.453545670e-03f, 5.466336712e-03f, 5.479117624e-03f, 5.491888386e-03f, 5.504648974e-03f, 5.517399369e-03f, 5.530139548e-03f, 5.542869490e-03f, 5.555589174e-03f,
+5.568298578e-03f, 5.580997681e-03f, 5.593686461e-03f, 5.606364897e-03f, 5.619032968e-03f, 5.631690652e-03f, 5.644337928e-03f, 5.656974775e-03f, 5.669601172e-03f, 5.682217096e-03f,
+5.694822528e-03f, 5.707417445e-03f, 5.720001827e-03f, 5.732575652e-03f, 5.745138900e-03f, 5.757691548e-03f, 5.770233577e-03f, 5.782764964e-03f, 5.795285689e-03f, 5.807795731e-03f,
+5.820295069e-03f, 5.832783681e-03f, 5.845261547e-03f, 5.857728646e-03f, 5.870184956e-03f, 5.882630457e-03f, 5.895065128e-03f, 5.907488948e-03f, 5.919901897e-03f, 5.932303952e-03f,
+5.944695094e-03f, 5.957075301e-03f, 5.969444553e-03f, 5.981802829e-03f, 5.994150108e-03f, 6.006486370e-03f, 6.018811593e-03f, 6.031125758e-03f, 6.043428843e-03f, 6.055720827e-03f,
+6.068001691e-03f, 6.080271413e-03f, 6.092529973e-03f, 6.104777350e-03f, 6.117013524e-03f, 6.129238474e-03f, 6.141452180e-03f, 6.153654621e-03f, 6.165845777e-03f, 6.178025626e-03f,
+6.190194150e-03f, 6.202351327e-03f, 6.214497137e-03f, 6.226631559e-03f, 6.238754574e-03f, 6.250866161e-03f, 6.262966299e-03f, 6.275054969e-03f, 6.287132149e-03f, 6.299197821e-03f,
+6.311251963e-03f, 6.323294555e-03f, 6.335325577e-03f, 6.347345010e-03f, 6.359352832e-03f, 6.371349024e-03f, 6.383333566e-03f, 6.395306437e-03f, 6.407267618e-03f, 6.419217088e-03f,
+6.431154828e-03f, 6.443080817e-03f, 6.454995036e-03f, 6.466897464e-03f, 6.478788082e-03f, 6.490666869e-03f, 6.502533806e-03f, 6.514388873e-03f, 6.526232050e-03f, 6.538063318e-03f,
+6.549882656e-03f, 6.561690044e-03f, 6.573485464e-03f, 6.585268894e-03f, 6.597040317e-03f, 6.608799710e-03f, 6.620547056e-03f, 6.632282335e-03f, 6.644005526e-03f, 6.655716610e-03f,
+6.667415569e-03f, 6.679102381e-03f, 6.690777027e-03f, 6.702439489e-03f, 6.714089746e-03f, 6.725727780e-03f, 6.737353569e-03f, 6.748967096e-03f, 6.760568341e-03f, 6.772157284e-03f,
+6.783733906e-03f, 6.795298188e-03f, 6.806850110e-03f, 6.818389654e-03f, 6.829916799e-03f, 6.841431526e-03f, 6.852933817e-03f, 6.864423652e-03f, 6.875901012e-03f, 6.887365877e-03f,
+6.898818230e-03f, 6.910258049e-03f, 6.921685317e-03f, 6.933100015e-03f, 6.944502123e-03f, 6.955891622e-03f, 6.967268493e-03f, 6.978632718e-03f, 6.989984277e-03f, 7.001323151e-03f,
+7.012649322e-03f, 7.023962770e-03f, 7.035263477e-03f, 7.046551424e-03f, 7.057826592e-03f, 7.069088963e-03f, 7.080338517e-03f, 7.091575235e-03f, 7.102799100e-03f, 7.114010092e-03f,
+7.125208193e-03f, 7.136393383e-03f, 7.147565646e-03f, 7.158724960e-03f, 7.169871309e-03f, 7.181004674e-03f, 7.192125036e-03f, 7.203232376e-03f, 7.214326676e-03f, 7.225407918e-03f,
+7.236476083e-03f, 7.247531153e-03f, 7.258573109e-03f, 7.269601933e-03f, 7.280617607e-03f, 7.291620112e-03f, 7.302609429e-03f, 7.313585542e-03f, 7.324548431e-03f, 7.335498078e-03f,
+7.346434466e-03f, 7.357357575e-03f, 7.368267387e-03f, 7.379163886e-03f, 7.390047051e-03f, 7.400916866e-03f, 7.411773312e-03f, 7.422616372e-03f, 7.433446026e-03f, 7.444262258e-03f,
+7.455065049e-03f, 7.465854382e-03f, 7.476630237e-03f, 7.487392598e-03f, 7.498141447e-03f, 7.508876766e-03f, 7.519598536e-03f, 7.530306741e-03f, 7.541001362e-03f, 7.551682382e-03f,
+7.562349782e-03f, 7.573003546e-03f, 7.583643655e-03f, 7.594270092e-03f, 7.604882839e-03f, 7.615481879e-03f, 7.626067194e-03f, 7.636638767e-03f, 7.647196579e-03f, 7.657740614e-03f,
+7.668270854e-03f, 7.678787282e-03f, 7.689289879e-03f, 7.699778629e-03f, 7.710253515e-03f, 7.720714519e-03f, 7.731161623e-03f, 7.741594810e-03f, 7.752014064e-03f, 7.762419366e-03f,
+7.772810700e-03f, 7.783188049e-03f, 7.793551394e-03f, 7.803900720e-03f, 7.814236008e-03f, 7.824557242e-03f, 7.834864405e-03f, 7.845157480e-03f, 7.855436449e-03f, 7.865701296e-03f,
+7.875952004e-03f, 7.886188555e-03f, 7.896410933e-03f, 7.906619121e-03f, 7.916813102e-03f, 7.926992859e-03f, 7.937158375e-03f, 7.947309634e-03f, 7.957446618e-03f, 7.967569312e-03f,
+7.977677698e-03f, 7.987771759e-03f, 7.997851479e-03f, 8.007916842e-03f, 8.017967830e-03f, 8.028004427e-03f, 8.038026617e-03f, 8.048034383e-03f, 8.058027708e-03f, 8.068006575e-03f,
+8.077970970e-03f, 8.087920874e-03f, 8.097856272e-03f, 8.107777147e-03f, 8.117683483e-03f, 8.127575263e-03f, 8.137452472e-03f, 8.147315092e-03f, 8.157163109e-03f, 8.166996504e-03f,
+8.176815263e-03f, 8.186619369e-03f, 8.196408805e-03f, 8.206183557e-03f, 8.215943607e-03f, 8.225688939e-03f, 8.235419538e-03f, 8.245135388e-03f, 8.254836472e-03f, 8.264522775e-03f,
+8.274194280e-03f, 8.283850972e-03f, 8.293492834e-03f, 8.303119852e-03f, 8.312732008e-03f, 8.322329288e-03f, 8.331911675e-03f, 8.341479154e-03f, 8.351031709e-03f, 8.360569325e-03f,
+8.370091985e-03f, 8.379599673e-03f, 8.389092375e-03f, 8.398570075e-03f, 8.408032757e-03f, 8.417480406e-03f, 8.426913006e-03f, 8.436330541e-03f, 8.445732996e-03f, 8.455120356e-03f,
+8.464492606e-03f, 8.473849729e-03f, 8.483191711e-03f, 8.492518536e-03f, 8.501830189e-03f, 8.511126654e-03f, 8.520407917e-03f, 8.529673962e-03f, 8.538924774e-03f, 8.548160338e-03f,
+8.557380639e-03f, 8.566585661e-03f, 8.575775389e-03f, 8.584949809e-03f, 8.594108905e-03f, 8.603252663e-03f, 8.612381067e-03f, 8.621494102e-03f, 8.630591754e-03f, 8.639674008e-03f,
+8.648740848e-03f, 8.657792260e-03f, 8.666828230e-03f, 8.675848741e-03f, 8.684853780e-03f, 8.693843332e-03f, 8.702817383e-03f, 8.711775916e-03f, 8.720718918e-03f, 8.729646375e-03f,
+8.738558271e-03f, 8.747454592e-03f, 8.756335324e-03f, 8.765200451e-03f, 8.774049960e-03f, 8.782883836e-03f, 8.791702065e-03f, 8.800504632e-03f, 8.809291523e-03f, 8.818062723e-03f,
+8.826818218e-03f, 8.835557995e-03f, 8.844282038e-03f, 8.852990333e-03f, 8.861682867e-03f, 8.870359624e-03f, 8.879020592e-03f, 8.887665755e-03f, 8.896295100e-03f, 8.904908612e-03f,
+8.913506278e-03f, 8.922088084e-03f, 8.930654015e-03f, 8.939204058e-03f, 8.947738199e-03f, 8.956256423e-03f, 8.964758717e-03f, 8.973245068e-03f, 8.981715460e-03f, 8.990169882e-03f,
+8.998608318e-03f, 9.007030755e-03f, 9.015437179e-03f, 9.023827577e-03f, 9.032201935e-03f, 9.040560240e-03f, 9.048902477e-03f, 9.057228634e-03f, 9.065538696e-03f, 9.073832651e-03f,
+9.082110485e-03f, 9.090372184e-03f, 9.098617734e-03f, 9.106847124e-03f, 9.115060338e-03f, 9.123257365e-03f, 9.131438190e-03f, 9.139602801e-03f, 9.147751183e-03f, 9.155883324e-03f,
+9.163999212e-03f, 9.172098831e-03f, 9.180182170e-03f, 9.188249216e-03f, 9.196299954e-03f, 9.204334373e-03f, 9.212352459e-03f, 9.220354199e-03f, 9.228339581e-03f, 9.236308591e-03f,
+9.244261216e-03f, 9.252197444e-03f, 9.260117262e-03f, 9.268020656e-03f, 9.275907615e-03f, 9.283778125e-03f, 9.291632174e-03f, 9.299469749e-03f, 9.307290838e-03f, 9.315095427e-03f,
+9.322883504e-03f, 9.330655057e-03f, 9.338410073e-03f, 9.346148539e-03f, 9.353870443e-03f, 9.361575773e-03f, 9.369264516e-03f, 9.376936660e-03f, 9.384592192e-03f, 9.392231100e-03f,
+9.399853371e-03f, 9.407458995e-03f, 9.415047957e-03f, 9.422620246e-03f, 9.430175850e-03f, 9.437714757e-03f, 9.445236954e-03f, 9.452742430e-03f, 9.460231172e-03f, 9.467703168e-03f,
+9.475158406e-03f, 9.482596875e-03f, 9.490018561e-03f, 9.497423455e-03f, 9.504811542e-03f, 9.512182813e-03f, 9.519537254e-03f, 9.526874854e-03f, 9.534195601e-03f, 9.541499483e-03f,
+9.548786490e-03f, 9.556056608e-03f, 9.563309827e-03f, 9.570546134e-03f, 9.577765519e-03f, 9.584967969e-03f, 9.592153473e-03f, 9.599322020e-03f, 9.606473598e-03f, 9.613608195e-03f,
+9.620725801e-03f, 9.627826403e-03f, 9.634909991e-03f, 9.641976553e-03f, 9.649026078e-03f, 9.656058554e-03f, 9.663073970e-03f, 9.670072316e-03f, 9.677053579e-03f, 9.684017749e-03f,
+9.690964815e-03f, 9.697894766e-03f, 9.704807589e-03f, 9.711703276e-03f, 9.718581814e-03f, 9.725443192e-03f, 9.732287400e-03f, 9.739114426e-03f, 9.745924260e-03f, 9.752716891e-03f,
+9.759492309e-03f, 9.766250501e-03f, 9.772991458e-03f, 9.779715169e-03f, 9.786421623e-03f, 9.793110810e-03f, 9.799782718e-03f, 9.806437337e-03f, 9.813074658e-03f, 9.819694668e-03f,
+9.826297358e-03f, 9.832882717e-03f, 9.839450734e-03f, 9.846001400e-03f, 9.852534704e-03f, 9.859050635e-03f, 9.865549184e-03f, 9.872030339e-03f, 9.878494091e-03f, 9.884940429e-03f,
+9.891369344e-03f, 9.897780824e-03f, 9.904174860e-03f, 9.910551442e-03f, 9.916910559e-03f, 9.923252202e-03f, 9.929576361e-03f, 9.935883025e-03f, 9.942172185e-03f, 9.948443830e-03f,
+9.954697951e-03f, 9.960934538e-03f, 9.967153581e-03f, 9.973355070e-03f, 9.979538996e-03f, 9.985705348e-03f, 9.991854118e-03f, 9.997985294e-03f, 1.000409887e-02f, 1.001019483e-02f,
+1.001627317e-02f, 1.002233388e-02f, 1.002837695e-02f, 1.003440237e-02f, 1.004041013e-02f, 1.004640022e-02f, 1.005237263e-02f, 1.005832735e-02f, 1.006426438e-02f, 1.007018370e-02f,
+1.007608531e-02f, 1.008196919e-02f, 1.008783533e-02f, 1.009368373e-02f, 1.009951438e-02f, 1.010532727e-02f, 1.011112239e-02f, 1.011689972e-02f, 1.012265927e-02f, 1.012840102e-02f,
+1.013412496e-02f, 1.013983109e-02f, 1.014551939e-02f, 1.015118986e-02f, 1.015684249e-02f, 1.016247726e-02f, 1.016809418e-02f, 1.017369323e-02f, 1.017927439e-02f, 1.018483768e-02f,
+1.019038306e-02f, 1.019591055e-02f, 1.020142012e-02f, 1.020691177e-02f, 1.021238549e-02f, 1.021784128e-02f, 1.022327912e-02f, 1.022869900e-02f, 1.023410092e-02f, 1.023948487e-02f,
+1.024485084e-02f, 1.025019882e-02f, 1.025552881e-02f, 1.026084079e-02f, 1.026613476e-02f, 1.027141070e-02f, 1.027666862e-02f, 1.028190850e-02f, 1.028713034e-02f, 1.029233412e-02f,
+1.029751984e-02f, 1.030268749e-02f, 1.030783707e-02f, 1.031296856e-02f, 1.031808195e-02f, 1.032317725e-02f, 1.032825443e-02f, 1.033331350e-02f, 1.033835444e-02f, 1.034337726e-02f,
+1.034838193e-02f, 1.035336845e-02f, 1.035833682e-02f, 1.036328703e-02f, 1.036821906e-02f, 1.037313292e-02f, 1.037802859e-02f, 1.038290607e-02f, 1.038776535e-02f, 1.039260642e-02f,
+1.039742928e-02f, 1.040223391e-02f, 1.040702031e-02f, 1.041178848e-02f, 1.041653840e-02f, 1.042127007e-02f, 1.042598348e-02f, 1.043067862e-02f, 1.043535549e-02f, 1.044001408e-02f,
+1.044465438e-02f, 1.044927639e-02f, 1.045388010e-02f, 1.045846550e-02f, 1.046303258e-02f, 1.046758134e-02f, 1.047211177e-02f, 1.047662387e-02f, 1.048111762e-02f, 1.048559302e-02f,
+1.049005007e-02f, 1.049448875e-02f, 1.049890906e-02f, 1.050331100e-02f, 1.050769455e-02f, 1.051205971e-02f, 1.051640648e-02f, 1.052073484e-02f, 1.052504480e-02f, 1.052933634e-02f,
+1.053360945e-02f, 1.053786414e-02f, 1.054210040e-02f, 1.054631821e-02f, 1.055051757e-02f, 1.055469848e-02f, 1.055886093e-02f, 1.056300491e-02f, 1.056713043e-02f, 1.057123746e-02f,
+1.057532601e-02f, 1.057939606e-02f, 1.058344762e-02f, 1.058748068e-02f, 1.059149523e-02f, 1.059549126e-02f, 1.059946877e-02f, 1.060342776e-02f, 1.060736821e-02f, 1.061129012e-02f,
+1.061519349e-02f, 1.061907832e-02f, 1.062294458e-02f, 1.062679228e-02f, 1.063062142e-02f, 1.063443198e-02f, 1.063822397e-02f, 1.064199737e-02f, 1.064575219e-02f, 1.064948840e-02f,
+1.065320602e-02f, 1.065690503e-02f, 1.066058544e-02f, 1.066424722e-02f, 1.066789038e-02f, 1.067151492e-02f, 1.067512082e-02f, 1.067870809e-02f, 1.068227671e-02f, 1.068582669e-02f,
+1.068935801e-02f, 1.069287067e-02f, 1.069636467e-02f, 1.069984001e-02f, 1.070329667e-02f, 1.070673465e-02f, 1.071015394e-02f, 1.071355455e-02f, 1.071693647e-02f, 1.072029969e-02f,
+1.072364420e-02f, 1.072697001e-02f, 1.073027711e-02f, 1.073356549e-02f, 1.073683515e-02f, 1.074008608e-02f, 1.074331828e-02f, 1.074653174e-02f, 1.074972647e-02f, 1.075290245e-02f,
+1.075605968e-02f, 1.075919816e-02f, 1.076231788e-02f, 1.076541883e-02f, 1.076850102e-02f, 1.077156444e-02f, 1.077460909e-02f, 1.077763495e-02f, 1.078064203e-02f, 1.078363033e-02f,
+1.078659983e-02f, 1.078955053e-02f, 1.079248244e-02f, 1.079539554e-02f, 1.079828983e-02f, 1.080116531e-02f, 1.080402197e-02f, 1.080685981e-02f, 1.080967883e-02f, 1.081247902e-02f,
+1.081526038e-02f, 1.081802290e-02f, 1.082076658e-02f, 1.082349142e-02f, 1.082619741e-02f, 1.082888455e-02f, 1.083155284e-02f, 1.083420227e-02f, 1.083683284e-02f, 1.083944454e-02f,
+1.084203738e-02f, 1.084461134e-02f, 1.084716642e-02f, 1.084970263e-02f, 1.085221996e-02f, 1.085471840e-02f, 1.085719795e-02f, 1.085965861e-02f, 1.086210037e-02f, 1.086452324e-02f,
+1.086692720e-02f, 1.086931226e-02f, 1.087167841e-02f, 1.087402565e-02f, 1.087635398e-02f, 1.087866338e-02f, 1.088095387e-02f, 1.088322544e-02f, 1.088547807e-02f, 1.088771178e-02f,
+1.088992656e-02f, 1.089212241e-02f, 1.089429931e-02f, 1.089645728e-02f, 1.089859630e-02f, 1.090071638e-02f, 1.090281751e-02f, 1.090489968e-02f, 1.090696291e-02f, 1.090900718e-02f,
+1.091103249e-02f, 1.091303884e-02f, 1.091502622e-02f, 1.091699464e-02f, 1.091894410e-02f, 1.092087458e-02f, 1.092278609e-02f, 1.092467862e-02f, 1.092655217e-02f, 1.092840675e-02f,
+1.093024234e-02f, 1.093205895e-02f, 1.093385658e-02f, 1.093563521e-02f, 1.093739486e-02f, 1.093913551e-02f, 1.094085717e-02f, 1.094255983e-02f, 1.094424350e-02f, 1.094590816e-02f,
+1.094755382e-02f, 1.094918048e-02f, 1.095078813e-02f, 1.095237677e-02f, 1.095394641e-02f, 1.095549703e-02f, 1.095702865e-02f, 1.095854124e-02f, 1.096003483e-02f, 1.096150939e-02f,
+1.096296494e-02f, 1.096440146e-02f, 1.096581896e-02f, 1.096721744e-02f, 1.096859690e-02f, 1.096995733e-02f, 1.097129873e-02f, 1.097262111e-02f, 1.097392445e-02f, 1.097520876e-02f,
+1.097647404e-02f, 1.097772029e-02f, 1.097894750e-02f, 1.098015567e-02f, 1.098134481e-02f, 1.098251491e-02f, 1.098366598e-02f, 1.098479800e-02f, 1.098591098e-02f, 1.098700492e-02f,
+1.098807981e-02f, 1.098913567e-02f, 1.099017247e-02f, 1.099119024e-02f, 1.099218896e-02f, 1.099316863e-02f, 1.099412925e-02f, 1.099507083e-02f, 1.099599335e-02f, 1.099689683e-02f,
+1.099778126e-02f, 1.099864664e-02f, 1.099949297e-02f, 1.100032025e-02f, 1.100112847e-02f, 1.100191764e-02f, 1.100268777e-02f, 1.100343883e-02f, 1.100417085e-02f, 1.100488381e-02f,
+1.100557772e-02f, 1.100625258e-02f, 1.100690838e-02f, 1.100754513e-02f, 1.100816282e-02f, 1.100876147e-02f, 1.100934105e-02f, 1.100990159e-02f, 1.101044307e-02f, 1.101096549e-02f,
+1.101146886e-02f, 1.101195318e-02f, 1.101241845e-02f, 1.101286466e-02f, 1.101329182e-02f, 1.101369992e-02f, 1.101408898e-02f, 1.101445898e-02f, 1.101480993e-02f, 1.101514183e-02f,
+1.101545468e-02f, 1.101574848e-02f, 1.101602322e-02f, 1.101627892e-02f, 1.101651557e-02f, 1.101673318e-02f, 1.101693173e-02f, 1.101711124e-02f, 1.101727170e-02f, 1.101741312e-02f,
+1.101753549e-02f, 1.101763882e-02f, 1.101772311e-02f, 1.101778835e-02f, 1.101783455e-02f, 1.101786172e-02f, 1.101786984e-02f, 1.101785892e-02f, 1.101782897e-02f, 1.101777998e-02f,
+1.101771196e-02f, 1.101762490e-02f, 1.101751881e-02f, 1.101739369e-02f, 1.101724954e-02f, 1.101708636e-02f, 1.101690415e-02f, 1.101670291e-02f, 1.101648265e-02f, 1.101624337e-02f,
+1.101598506e-02f, 1.101570773e-02f, 1.101541139e-02f, 1.101509602e-02f, 1.101476164e-02f, 1.101440825e-02f, 1.101403584e-02f, 1.101364442e-02f, 1.101323399e-02f, 1.101280455e-02f,
+1.101235611e-02f, 1.101188866e-02f, 1.101140221e-02f, 1.101089676e-02f, 1.101037231e-02f, 1.100982886e-02f, 1.100926642e-02f, 1.100868498e-02f, 1.100808456e-02f, 1.100746514e-02f,
+1.100682674e-02f, 1.100616935e-02f, 1.100549298e-02f, 1.100479763e-02f, 1.100408330e-02f, 1.100335000e-02f, 1.100259772e-02f, 1.100182647e-02f, 1.100103625e-02f, 1.100022706e-02f,
+1.099939891e-02f, 1.099855180e-02f, 1.099768573e-02f, 1.099680070e-02f, 1.099589672e-02f, 1.099497379e-02f, 1.099403190e-02f, 1.099307107e-02f, 1.099209130e-02f, 1.099109258e-02f,
+1.099007493e-02f, 1.098903834e-02f, 1.098798282e-02f, 1.098690837e-02f, 1.098581499e-02f, 1.098470268e-02f, 1.098357146e-02f, 1.098242131e-02f, 1.098125226e-02f, 1.098006428e-02f,
+1.097885740e-02f, 1.097763162e-02f, 1.097638693e-02f, 1.097512334e-02f, 1.097384085e-02f, 1.097253947e-02f, 1.097121920e-02f, 1.096988004e-02f, 1.096852200e-02f, 1.096714508e-02f,
+1.096574928e-02f, 1.096433460e-02f, 1.096290106e-02f, 1.096144865e-02f, 1.095997738e-02f, 1.095848725e-02f, 1.095697826e-02f, 1.095545042e-02f, 1.095390373e-02f, 1.095233819e-02f,
+1.095075382e-02f, 1.094915061e-02f, 1.094752856e-02f, 1.094588768e-02f, 1.094422798e-02f, 1.094254945e-02f, 1.094085211e-02f, 1.093913595e-02f, 1.093740098e-02f, 1.093564720e-02f,
+1.093387462e-02f, 1.093208325e-02f, 1.093027307e-02f, 1.092844411e-02f, 1.092659636e-02f, 1.092472983e-02f, 1.092284453e-02f, 1.092094045e-02f, 1.091901760e-02f, 1.091707598e-02f,
+1.091511560e-02f, 1.091313647e-02f, 1.091113859e-02f, 1.090912196e-02f, 1.090708659e-02f, 1.090503247e-02f, 1.090295963e-02f, 1.090086805e-02f, 1.089875776e-02f, 1.089662874e-02f,
+1.089448100e-02f, 1.089231456e-02f, 1.089012941e-02f, 1.088792556e-02f, 1.088570301e-02f, 1.088346177e-02f, 1.088120184e-02f, 1.087892324e-02f, 1.087662595e-02f, 1.087431000e-02f,
+1.087197538e-02f, 1.086962209e-02f, 1.086725015e-02f, 1.086485956e-02f, 1.086245032e-02f, 1.086002244e-02f, 1.085757593e-02f, 1.085511078e-02f, 1.085262701e-02f, 1.085012461e-02f,
+1.084760361e-02f, 1.084506399e-02f, 1.084250577e-02f, 1.083992895e-02f, 1.083733353e-02f, 1.083471953e-02f, 1.083208695e-02f, 1.082943578e-02f, 1.082676605e-02f, 1.082407775e-02f,
+1.082137089e-02f, 1.081864548e-02f, 1.081590152e-02f, 1.081313901e-02f, 1.081035797e-02f, 1.080755840e-02f, 1.080474030e-02f, 1.080190368e-02f, 1.079904854e-02f, 1.079617490e-02f,
+1.079328276e-02f, 1.079037212e-02f, 1.078744299e-02f, 1.078449537e-02f, 1.078152928e-02f, 1.077854471e-02f, 1.077554168e-02f, 1.077252020e-02f, 1.076948025e-02f, 1.076642186e-02f,
+1.076334503e-02f, 1.076024977e-02f, 1.075713607e-02f, 1.075400396e-02f, 1.075085342e-02f, 1.074768448e-02f, 1.074449714e-02f, 1.074129140e-02f, 1.073806727e-02f, 1.073482476e-02f,
+1.073156387e-02f, 1.072828461e-02f, 1.072498699e-02f, 1.072167101e-02f, 1.071833668e-02f, 1.071498401e-02f, 1.071161300e-02f, 1.070822367e-02f, 1.070481600e-02f, 1.070139003e-02f,
+1.069794574e-02f, 1.069448315e-02f, 1.069100227e-02f, 1.068750310e-02f, 1.068398565e-02f, 1.068044992e-02f, 1.067689593e-02f, 1.067332368e-02f, 1.066973317e-02f, 1.066612442e-02f,
+1.066249743e-02f, 1.065885221e-02f, 1.065518876e-02f, 1.065150710e-02f, 1.064780723e-02f, 1.064408916e-02f, 1.064035289e-02f, 1.063659843e-02f, 1.063282580e-02f, 1.062903499e-02f,
+1.062522602e-02f, 1.062139889e-02f, 1.061755362e-02f, 1.061369020e-02f, 1.060980864e-02f, 1.060590896e-02f, 1.060199116e-02f, 1.059805525e-02f, 1.059410123e-02f, 1.059012912e-02f,
+1.058613893e-02f, 1.058213065e-02f, 1.057810430e-02f, 1.057405988e-02f, 1.056999741e-02f, 1.056591690e-02f, 1.056181834e-02f, 1.055770175e-02f, 1.055356713e-02f, 1.054941450e-02f,
+1.054524386e-02f, 1.054105522e-02f, 1.053684859e-02f, 1.053262398e-02f, 1.052838139e-02f, 1.052412083e-02f, 1.051984232e-02f, 1.051554585e-02f, 1.051123144e-02f, 1.050689911e-02f,
+1.050254884e-02f, 1.049818066e-02f, 1.049379457e-02f, 1.048939058e-02f, 1.048496870e-02f, 1.048052894e-02f, 1.047607131e-02f, 1.047159580e-02f, 1.046710245e-02f, 1.046259124e-02f,
+1.045806220e-02f, 1.045351533e-02f, 1.044895063e-02f, 1.044436812e-02f, 1.043976781e-02f, 1.043514971e-02f, 1.043051382e-02f, 1.042586015e-02f, 1.042118871e-02f, 1.041649952e-02f,
+1.041179257e-02f, 1.040706789e-02f, 1.040232547e-02f, 1.039756533e-02f, 1.039278748e-02f, 1.038799192e-02f, 1.038317867e-02f, 1.037834773e-02f, 1.037349911e-02f, 1.036863283e-02f,
+1.036374889e-02f, 1.035884731e-02f, 1.035392808e-02f, 1.034899122e-02f, 1.034403675e-02f, 1.033906466e-02f, 1.033407497e-02f, 1.032906769e-02f, 1.032404283e-02f, 1.031900040e-02f,
+1.031394040e-02f, 1.030886286e-02f, 1.030376776e-02f, 1.029865514e-02f, 1.029352499e-02f, 1.028837732e-02f, 1.028321216e-02f, 1.027802949e-02f, 1.027282935e-02f, 1.026761173e-02f,
+1.026237664e-02f, 1.025712410e-02f, 1.025185412e-02f, 1.024656670e-02f, 1.024126185e-02f, 1.023593960e-02f, 1.023059993e-02f, 1.022524288e-02f, 1.021986844e-02f, 1.021447662e-02f,
+1.020906744e-02f, 1.020364091e-02f, 1.019819704e-02f, 1.019273583e-02f, 1.018725730e-02f, 1.018176146e-02f, 1.017624832e-02f, 1.017071788e-02f, 1.016517017e-02f, 1.015960519e-02f,
+1.015402294e-02f, 1.014842345e-02f, 1.014280672e-02f, 1.013717276e-02f, 1.013152158e-02f, 1.012585320e-02f, 1.012016762e-02f, 1.011446486e-02f, 1.010874492e-02f, 1.010300782e-02f,
+1.009725356e-02f, 1.009148217e-02f, 1.008569364e-02f, 1.007988799e-02f, 1.007406524e-02f, 1.006822538e-02f, 1.006236844e-02f, 1.005649443e-02f, 1.005060334e-02f, 1.004469521e-02f,
+1.003877003e-02f, 1.003282782e-02f, 1.002686859e-02f, 1.002089235e-02f, 1.001489911e-02f, 1.000888888e-02f, 1.000286168e-02f, 9.996817515e-03f, 9.990756397e-03f, 9.984678337e-03f,
+9.978583347e-03f, 9.972471438e-03f, 9.966342622e-03f, 9.960196911e-03f, 9.954034315e-03f, 9.947854846e-03f, 9.941658516e-03f, 9.935445336e-03f, 9.929215319e-03f, 9.922968475e-03f,
+9.916704817e-03f, 9.910424356e-03f, 9.904127103e-03f, 9.897813072e-03f, 9.891482272e-03f, 9.885134717e-03f, 9.878770418e-03f, 9.872389388e-03f, 9.865991637e-03f, 9.859577177e-03f,
+9.853146022e-03f, 9.846698182e-03f, 9.840233671e-03f, 9.833752499e-03f, 9.827254679e-03f, 9.820740223e-03f, 9.814209143e-03f, 9.807661452e-03f, 9.801097161e-03f, 9.794516283e-03f,
+9.787918831e-03f, 9.781304815e-03f, 9.774674249e-03f, 9.768027145e-03f, 9.761363515e-03f, 9.754683372e-03f, 9.747986728e-03f, 9.741273596e-03f, 9.734543987e-03f, 9.727797915e-03f,
+9.721035393e-03f, 9.714256431e-03f, 9.707461044e-03f, 9.700649244e-03f, 9.693821043e-03f, 9.686976454e-03f, 9.680115490e-03f, 9.673238164e-03f, 9.666344488e-03f, 9.659434475e-03f,
+9.652508137e-03f, 9.645565489e-03f, 9.638606542e-03f, 9.631631309e-03f, 9.624639804e-03f, 9.617632039e-03f, 9.610608027e-03f, 9.603567781e-03f, 9.596511315e-03f, 9.589438641e-03f,
+9.582349772e-03f, 9.575244722e-03f, 9.568123503e-03f, 9.560986129e-03f, 9.553832614e-03f, 9.546662969e-03f, 9.539477209e-03f, 9.532275346e-03f, 9.525057395e-03f, 9.517823367e-03f,
+9.510573278e-03f, 9.503307139e-03f, 9.496024965e-03f, 9.488726769e-03f, 9.481412564e-03f, 9.474082364e-03f, 9.466736182e-03f, 9.459374032e-03f, 9.451995928e-03f, 9.444601882e-03f,
+9.437191909e-03f, 9.429766023e-03f, 9.422324236e-03f, 9.414866563e-03f, 9.407393017e-03f, 9.399903613e-03f, 9.392398363e-03f, 9.384877282e-03f, 9.377340384e-03f, 9.369787682e-03f,
+9.362219190e-03f, 9.354634923e-03f, 9.347034893e-03f, 9.339419116e-03f, 9.331787605e-03f, 9.324140374e-03f, 9.316477437e-03f, 9.308798809e-03f, 9.301104502e-03f, 9.293394532e-03f,
+9.285668913e-03f, 9.277927658e-03f, 9.270170783e-03f, 9.262398301e-03f, 9.254610226e-03f, 9.246806573e-03f, 9.238987355e-03f, 9.231152589e-03f, 9.223302287e-03f, 9.215436464e-03f,
+9.207555134e-03f, 9.199658313e-03f, 9.191746014e-03f, 9.183818252e-03f, 9.175875041e-03f, 9.167916397e-03f, 9.159942333e-03f, 9.151952864e-03f, 9.143948004e-03f, 9.135927770e-03f,
+9.127892174e-03f, 9.119841232e-03f, 9.111774958e-03f, 9.103693368e-03f, 9.095596476e-03f, 9.087484296e-03f, 9.079356844e-03f, 9.071214135e-03f, 9.063056183e-03f, 9.054883003e-03f,
+9.046694611e-03f, 9.038491020e-03f, 9.030272247e-03f, 9.022038306e-03f, 9.013789212e-03f, 9.005524980e-03f, 8.997245625e-03f, 8.988951163e-03f, 8.980641608e-03f, 8.972316976e-03f,
+8.963977282e-03f, 8.955622541e-03f, 8.947252768e-03f, 8.938867978e-03f, 8.930468188e-03f, 8.922053412e-03f, 8.913623665e-03f, 8.905178962e-03f, 8.896719320e-03f, 8.888244754e-03f,
+8.879755279e-03f, 8.871250910e-03f, 8.862731663e-03f, 8.854197553e-03f, 8.845648597e-03f, 8.837084809e-03f, 8.828506205e-03f, 8.819912801e-03f, 8.811304612e-03f, 8.802681655e-03f,
+8.794043944e-03f, 8.785391495e-03f, 8.776724325e-03f, 8.768042448e-03f, 8.759345881e-03f, 8.750634640e-03f, 8.741908740e-03f, 8.733168197e-03f, 8.724413027e-03f, 8.715643246e-03f,
+8.706858869e-03f, 8.698059914e-03f, 8.689246395e-03f, 8.680418329e-03f, 8.671575732e-03f, 8.662718620e-03f, 8.653847009e-03f, 8.644960914e-03f, 8.636060353e-03f, 8.627145341e-03f,
+8.618215894e-03f, 8.609272029e-03f, 8.600313762e-03f, 8.591341109e-03f, 8.582354086e-03f, 8.573352710e-03f, 8.564336996e-03f, 8.555306962e-03f, 8.546262624e-03f, 8.537203997e-03f,
+8.528131099e-03f, 8.519043946e-03f, 8.509942554e-03f, 8.500826940e-03f, 8.491697120e-03f, 8.482553111e-03f, 8.473394929e-03f, 8.464222591e-03f, 8.455036114e-03f, 8.445835514e-03f,
+8.436620807e-03f, 8.427392011e-03f, 8.418149142e-03f, 8.408892217e-03f, 8.399621253e-03f, 8.390336266e-03f, 8.381037272e-03f, 8.371724290e-03f, 8.362397336e-03f, 8.353056426e-03f,
+8.343701578e-03f, 8.334332808e-03f, 8.324950133e-03f, 8.315553571e-03f, 8.306143137e-03f, 8.296718850e-03f, 8.287280726e-03f, 8.277828783e-03f, 8.268363037e-03f, 8.258883505e-03f,
+8.249390204e-03f, 8.239883153e-03f, 8.230362367e-03f, 8.220827864e-03f, 8.211279661e-03f, 8.201717775e-03f, 8.192142225e-03f, 8.182553026e-03f, 8.172950196e-03f, 8.163333753e-03f,
+8.153703713e-03f, 8.144060095e-03f, 8.134402915e-03f, 8.124732191e-03f, 8.115047941e-03f, 8.105350182e-03f, 8.095638930e-03f, 8.085914205e-03f, 8.076176023e-03f, 8.066424401e-03f,
+8.056659358e-03f, 8.046880911e-03f, 8.037089078e-03f, 8.027283876e-03f, 8.017465322e-03f, 8.007633435e-03f, 7.997788233e-03f, 7.987929732e-03f, 7.978057951e-03f, 7.968172907e-03f,
+7.958274619e-03f, 7.948363103e-03f, 7.938438379e-03f, 7.928500463e-03f, 7.918549373e-03f, 7.908585128e-03f, 7.898607745e-03f, 7.888617243e-03f, 7.878613639e-03f, 7.868596951e-03f,
+7.858567197e-03f, 7.848524395e-03f, 7.838468563e-03f, 7.828399720e-03f, 7.818317884e-03f, 7.808223071e-03f, 7.798115302e-03f, 7.787994593e-03f, 7.777860963e-03f, 7.767714430e-03f,
+7.757555012e-03f, 7.747382728e-03f, 7.737197596e-03f, 7.726999634e-03f, 7.716788860e-03f, 7.706565293e-03f, 7.696328952e-03f, 7.686079853e-03f, 7.675818016e-03f, 7.665543460e-03f,
+7.655256202e-03f, 7.644956261e-03f, 7.634643656e-03f, 7.624318405e-03f, 7.613980526e-03f, 7.603630038e-03f, 7.593266960e-03f, 7.582891310e-03f, 7.572503107e-03f, 7.562102369e-03f,
+7.551689115e-03f, 7.541263364e-03f, 7.530825134e-03f, 7.520374444e-03f, 7.509911313e-03f, 7.499435759e-03f, 7.488947801e-03f, 7.478447459e-03f, 7.467934750e-03f, 7.457409694e-03f,
+7.446872309e-03f, 7.436322615e-03f, 7.425760630e-03f, 7.415186372e-03f, 7.404599862e-03f, 7.394001118e-03f, 7.383390159e-03f, 7.372767003e-03f, 7.362131670e-03f, 7.351484179e-03f,
+7.340824550e-03f, 7.330152800e-03f, 7.319468949e-03f, 7.308773016e-03f, 7.298065020e-03f, 7.287344981e-03f, 7.276612917e-03f, 7.265868849e-03f, 7.255112794e-03f, 7.244344772e-03f,
+7.233564802e-03f, 7.222772905e-03f, 7.211969098e-03f, 7.201153401e-03f, 7.190325834e-03f, 7.179486415e-03f, 7.168635165e-03f, 7.157772102e-03f, 7.146897247e-03f, 7.136010617e-03f,
+7.125112234e-03f, 7.114202116e-03f, 7.103280282e-03f, 7.092346753e-03f, 7.081401547e-03f, 7.070444685e-03f, 7.059476185e-03f, 7.048496068e-03f, 7.037504353e-03f, 7.026501059e-03f,
+7.015486206e-03f, 7.004459814e-03f, 6.993421903e-03f, 6.982372492e-03f, 6.971311600e-03f, 6.960239249e-03f, 6.949155456e-03f, 6.938060242e-03f, 6.926953628e-03f, 6.915835631e-03f,
+6.904706274e-03f, 6.893565574e-03f, 6.882413553e-03f, 6.871250229e-03f, 6.860075624e-03f, 6.848889756e-03f, 6.837692645e-03f, 6.826484312e-03f, 6.815264777e-03f, 6.804034060e-03f,
+6.792792179e-03f, 6.781539157e-03f, 6.770275012e-03f, 6.758999764e-03f, 6.747713434e-03f, 6.736416042e-03f, 6.725107608e-03f, 6.713788152e-03f, 6.702457694e-03f, 6.691116254e-03f,
+6.679763852e-03f, 6.668400509e-03f, 6.657026245e-03f, 6.645641080e-03f, 6.634245035e-03f, 6.622838129e-03f, 6.611420382e-03f, 6.599991816e-03f, 6.588552451e-03f, 6.577102306e-03f,
+6.565641402e-03f, 6.554169760e-03f, 6.542687400e-03f, 6.531194342e-03f, 6.519690607e-03f, 6.508176215e-03f, 6.496651186e-03f, 6.485115542e-03f, 6.473569302e-03f, 6.462012488e-03f,
+6.450445119e-03f, 6.438867216e-03f, 6.427278800e-03f, 6.415679891e-03f, 6.404070510e-03f, 6.392450678e-03f, 6.380820414e-03f, 6.369179741e-03f, 6.357528677e-03f, 6.345867245e-03f,
+6.334195465e-03f, 6.322513357e-03f, 6.310820943e-03f, 6.299118242e-03f, 6.287405276e-03f, 6.275682066e-03f, 6.263948632e-03f, 6.252204995e-03f, 6.240451176e-03f, 6.228687196e-03f,
+6.216913076e-03f, 6.205128836e-03f, 6.193334497e-03f, 6.181530081e-03f, 6.169715608e-03f, 6.157891099e-03f, 6.146056576e-03f, 6.134212058e-03f, 6.122357568e-03f, 6.110493126e-03f,
+6.098618753e-03f, 6.086734470e-03f, 6.074840298e-03f, 6.062936259e-03f, 6.051022373e-03f, 6.039098661e-03f, 6.027165146e-03f, 6.015221847e-03f, 6.003268785e-03f, 5.991305983e-03f,
+5.979333462e-03f, 5.967351241e-03f, 5.955359344e-03f, 5.943357790e-03f, 5.931346601e-03f, 5.919325799e-03f, 5.907295404e-03f, 5.895255438e-03f, 5.883205923e-03f, 5.871146879e-03f,
+5.859078328e-03f, 5.847000292e-03f, 5.834912791e-03f, 5.822815847e-03f, 5.810709481e-03f, 5.798593716e-03f, 5.786468571e-03f, 5.774334069e-03f, 5.762190232e-03f, 5.750037080e-03f,
+5.737874635e-03f, 5.725702919e-03f, 5.713521953e-03f, 5.701331758e-03f, 5.689132357e-03f, 5.676923771e-03f, 5.664706021e-03f, 5.652479129e-03f, 5.640243116e-03f, 5.627998005e-03f,
+5.615743816e-03f, 5.603480572e-03f, 5.591208294e-03f, 5.578927004e-03f, 5.566636723e-03f, 5.554337474e-03f, 5.542029277e-03f, 5.529712155e-03f, 5.517386130e-03f, 5.505051222e-03f,
+5.492707455e-03f, 5.480354849e-03f, 5.467993427e-03f, 5.455623210e-03f, 5.443244221e-03f, 5.430856481e-03f, 5.418460011e-03f, 5.406054834e-03f, 5.393640972e-03f, 5.381218447e-03f,
+5.368787280e-03f, 5.356347493e-03f, 5.343899109e-03f, 5.331442149e-03f, 5.318976636e-03f, 5.306502591e-03f, 5.294020036e-03f, 5.281528994e-03f, 5.269029485e-03f, 5.256521534e-03f,
+5.244005160e-03f, 5.231480388e-03f, 5.218947237e-03f, 5.206405732e-03f, 5.193855893e-03f, 5.181297743e-03f, 5.168731305e-03f, 5.156156599e-03f, 5.143573649e-03f, 5.130982476e-03f,
+5.118383103e-03f, 5.105775552e-03f, 5.093159845e-03f, 5.080536005e-03f, 5.067904053e-03f, 5.055264012e-03f, 5.042615904e-03f, 5.029959751e-03f, 5.017295576e-03f, 5.004623401e-03f,
+4.991943248e-03f, 4.979255140e-03f, 4.966559099e-03f, 4.953855147e-03f, 4.941143307e-03f, 4.928423601e-03f, 4.915696052e-03f, 4.902960681e-03f, 4.890217511e-03f, 4.877466565e-03f,
+4.864707866e-03f, 4.851941435e-03f, 4.839167294e-03f, 4.826385468e-03f, 4.813595977e-03f, 4.800798845e-03f, 4.787994094e-03f, 4.775181746e-03f, 4.762361825e-03f, 4.749534352e-03f,
+4.736699350e-03f, 4.723856842e-03f, 4.711006851e-03f, 4.698149398e-03f, 4.685284507e-03f, 4.672412200e-03f, 4.659532500e-03f, 4.646645429e-03f, 4.633751010e-03f, 4.620849266e-03f,
+4.607940219e-03f, 4.595023893e-03f, 4.582100309e-03f, 4.569169491e-03f, 4.556231461e-03f, 4.543286242e-03f, 4.530333856e-03f, 4.517374327e-03f, 4.504407678e-03f, 4.491433930e-03f,
+4.478453107e-03f, 4.465465232e-03f, 4.452470327e-03f, 4.439468415e-03f, 4.426459519e-03f, 4.413443662e-03f, 4.400420867e-03f, 4.387391157e-03f, 4.374354554e-03f, 4.361311081e-03f,
+4.348260762e-03f, 4.335203619e-03f, 4.322139675e-03f, 4.309068953e-03f, 4.295991475e-03f, 4.282907266e-03f, 4.269816348e-03f, 4.256718743e-03f, 4.243614476e-03f, 4.230503568e-03f,
+4.217386042e-03f, 4.204261923e-03f, 4.191131233e-03f, 4.177993994e-03f, 4.164850230e-03f, 4.151699964e-03f, 4.138543220e-03f, 4.125380019e-03f, 4.112210385e-03f, 4.099034342e-03f,
+4.085851912e-03f, 4.072663119e-03f, 4.059467985e-03f, 4.046266534e-03f, 4.033058789e-03f, 4.019844772e-03f, 4.006624508e-03f, 3.993398019e-03f, 3.980165329e-03f, 3.966926461e-03f,
+3.953681437e-03f, 3.940430281e-03f, 3.927173017e-03f, 3.913909668e-03f, 3.900640256e-03f, 3.887364805e-03f, 3.874083338e-03f, 3.860795879e-03f, 3.847502451e-03f, 3.834203077e-03f,
+3.820897780e-03f, 3.807586584e-03f, 3.794269512e-03f, 3.780946587e-03f, 3.767617833e-03f, 3.754283273e-03f, 3.740942930e-03f, 3.727596828e-03f, 3.714244989e-03f, 3.700887439e-03f,
+3.687524199e-03f, 3.674155293e-03f, 3.660780744e-03f, 3.647400577e-03f, 3.634014814e-03f, 3.620623478e-03f, 3.607226594e-03f, 3.593824185e-03f, 3.580416274e-03f, 3.567002884e-03f,
+3.553584039e-03f, 3.540159763e-03f, 3.526730078e-03f, 3.513295009e-03f, 3.499854579e-03f, 3.486408812e-03f, 3.472957730e-03f, 3.459501358e-03f, 3.446039719e-03f, 3.432572836e-03f,
+3.419100733e-03f, 3.405623434e-03f, 3.392140962e-03f, 3.378653341e-03f, 3.365160595e-03f, 3.351662746e-03f, 3.338159818e-03f, 3.324651836e-03f, 3.311138822e-03f, 3.297620801e-03f,
+3.284097795e-03f, 3.270569829e-03f, 3.257036926e-03f, 3.243499110e-03f, 3.229956405e-03f, 3.216408833e-03f, 3.202856419e-03f, 3.189299187e-03f, 3.175737160e-03f, 3.162170361e-03f,
+3.148598815e-03f, 3.135022546e-03f, 3.121441576e-03f, 3.107855929e-03f, 3.094265630e-03f, 3.080670702e-03f, 3.067071169e-03f, 3.053467054e-03f, 3.039858382e-03f, 3.026245175e-03f,
+3.012627458e-03f, 2.999005255e-03f, 2.985378589e-03f, 2.971747484e-03f, 2.958111963e-03f, 2.944472052e-03f, 2.930827773e-03f, 2.917179150e-03f, 2.903526207e-03f, 2.889868968e-03f,
+2.876207456e-03f, 2.862541696e-03f, 2.848871712e-03f, 2.835197526e-03f, 2.821519164e-03f, 2.807836648e-03f, 2.794150003e-03f, 2.780459253e-03f, 2.766764421e-03f, 2.753065531e-03f,
+2.739362608e-03f, 2.725655675e-03f, 2.711944755e-03f, 2.698229874e-03f, 2.684511054e-03f, 2.670788320e-03f, 2.657061696e-03f, 2.643331205e-03f, 2.629596871e-03f, 2.615858719e-03f,
+2.602116772e-03f, 2.588371055e-03f, 2.574621590e-03f, 2.560868403e-03f, 2.547111517e-03f, 2.533350955e-03f, 2.519586743e-03f, 2.505818904e-03f, 2.492047462e-03f, 2.478272441e-03f,
+2.464493864e-03f, 2.450711757e-03f, 2.436926142e-03f, 2.423137045e-03f, 2.409344488e-03f, 2.395548496e-03f, 2.381749094e-03f, 2.367946304e-03f, 2.354140151e-03f, 2.340330659e-03f,
+2.326517852e-03f, 2.312701755e-03f, 2.298882390e-03f, 2.285059783e-03f, 2.271233957e-03f, 2.257404936e-03f, 2.243572744e-03f, 2.229737406e-03f, 2.215898945e-03f, 2.202057386e-03f,
+2.188212753e-03f, 2.174365069e-03f, 2.160514359e-03f, 2.146660647e-03f, 2.132803956e-03f, 2.118944312e-03f, 2.105081738e-03f, 2.091216259e-03f, 2.077347897e-03f, 2.063476678e-03f,
+2.049602626e-03f, 2.035725764e-03f, 2.021846117e-03f, 2.007963710e-03f, 1.994078565e-03f, 1.980190707e-03f, 1.966300161e-03f, 1.952406950e-03f, 1.938511099e-03f, 1.924612632e-03f,
+1.910711572e-03f, 1.896807945e-03f, 1.882901774e-03f, 1.868993083e-03f, 1.855081897e-03f, 1.841168239e-03f, 1.827252134e-03f, 1.813333607e-03f, 1.799412680e-03f, 1.785489379e-03f,
+1.771563728e-03f, 1.757635750e-03f, 1.743705471e-03f, 1.729772913e-03f, 1.715838102e-03f, 1.701901061e-03f, 1.687961815e-03f, 1.674020387e-03f, 1.660076803e-03f, 1.646131087e-03f,
+1.632183261e-03f, 1.618233352e-03f, 1.604281382e-03f, 1.590327376e-03f, 1.576371359e-03f, 1.562413354e-03f, 1.548453387e-03f, 1.534491480e-03f, 1.520527658e-03f, 1.506561946e-03f,
+1.492594367e-03f, 1.478624946e-03f, 1.464653708e-03f, 1.450680676e-03f, 1.436705874e-03f, 1.422729327e-03f, 1.408751060e-03f, 1.394771095e-03f, 1.380789458e-03f, 1.366806173e-03f,
+1.352821264e-03f, 1.338834755e-03f, 1.324846671e-03f, 1.310857036e-03f, 1.296865873e-03f, 1.282873208e-03f, 1.268879064e-03f, 1.254883466e-03f, 1.240886439e-03f, 1.226888005e-03f,
+1.212888190e-03f, 1.198887018e-03f, 1.184884513e-03f, 1.170880699e-03f, 1.156875601e-03f, 1.142869242e-03f, 1.128861648e-03f, 1.114852842e-03f, 1.100842849e-03f, 1.086831692e-03f,
+1.072819397e-03f, 1.058805987e-03f, 1.044791487e-03f, 1.030775921e-03f, 1.016759313e-03f, 1.002741688e-03f, 9.887230693e-04f, 9.747034818e-04f, 9.606829496e-04f, 9.466614970e-04f,
+9.326391483e-04f, 9.186159277e-04f, 9.045918595e-04f, 8.905669680e-04f, 8.765412774e-04f, 8.625148121e-04f, 8.484875962e-04f, 8.344596542e-04f, 8.204310101e-04f, 8.064016884e-04f,
+7.923717133e-04f, 7.783411090e-04f, 7.643098998e-04f, 7.502781101e-04f, 7.362457640e-04f, 7.222128859e-04f, 7.081794999e-04f, 6.941456305e-04f, 6.801113018e-04f, 6.660765381e-04f,
+6.520413638e-04f, 6.380058030e-04f, 6.239698800e-04f, 6.099336191e-04f, 5.958970445e-04f, 5.818601806e-04f, 5.678230516e-04f, 5.537856817e-04f, 5.397480952e-04f, 5.257103165e-04f,
+5.116723696e-04f, 4.976342790e-04f, 4.835960688e-04f, 4.695577633e-04f, 4.555193868e-04f, 4.414809636e-04f, 4.274425178e-04f, 4.134040737e-04f, 3.993656557e-04f, 3.853272879e-04f,
+3.712889946e-04f, 3.572508000e-04f, 3.432127284e-04f, 3.291748040e-04f, 3.151370511e-04f, 3.010994939e-04f, 2.870621566e-04f, 2.730250636e-04f, 2.589882390e-04f, 2.449517070e-04f,
+2.309154920e-04f, 2.168796180e-04f, 2.028441095e-04f, 1.888089905e-04f, 1.747742853e-04f, 1.607400182e-04f, 1.467062133e-04f, 1.326728949e-04f, 1.186400872e-04f, 1.046078145e-04f,
+9.057610080e-05f, 7.654497047e-05f, 6.251444769e-05f, 4.848455666e-05f, 3.445532159e-05f, 2.042676667e-05f, 6.398916109e-06f, -7.628205901e-06f, -2.165457516e-05f, -3.568016749e-05f,
+-4.970495869e-05f, -6.372892457e-05f, -7.775204096e-05f, -9.177428367e-05f, -1.057956285e-04f, -1.198160513e-04f, -1.338355280e-04f, -1.478540342e-04f, -1.618715459e-04f, -1.758880389e-04f,
+-1.899034891e-04f, -2.039178722e-04f, -2.179311641e-04f, -2.319433407e-04f, -2.459543779e-04f, -2.599642514e-04f, -2.739729372e-04f, -2.879804110e-04f, -3.019866489e-04f, -3.159916265e-04f,
+-3.299953199e-04f, -3.439977049e-04f, -3.579987573e-04f, -3.719984530e-04f, -3.859967680e-04f, -3.999936781e-04f, -4.139891593e-04f, -4.279831873e-04f, -4.419757382e-04f, -4.559667877e-04f,
+-4.699563119e-04f, -4.839442867e-04f, -4.979306879e-04f, -5.119154915e-04f, -5.258986733e-04f, -5.398802094e-04f, -5.538600757e-04f, -5.678382481e-04f, -5.818147025e-04f, -5.957894149e-04f,
+-6.097623612e-04f, -6.237335174e-04f, -6.377028595e-04f, -6.516703634e-04f, -6.656360051e-04f, -6.795997605e-04f, -6.935616057e-04f, -7.075215165e-04f, -7.214794691e-04f, -7.354354393e-04f,
+-7.493894032e-04f, -7.633413368e-04f, -7.772912161e-04f, -7.912390171e-04f, -8.051847158e-04f, -8.191282882e-04f, -8.330697103e-04f, -8.470089582e-04f, -8.609460080e-04f, -8.748808356e-04f,
+-8.888134171e-04f, -9.027437285e-04f, -9.166717459e-04f, -9.305974454e-04f, -9.445208030e-04f, -9.584417948e-04f, -9.723603969e-04f, -9.862765853e-04f, -1.000190336e-03f, -1.014101626e-03f,
+-1.028010430e-03f, -1.041916724e-03f, -1.055820486e-03f, -1.069721690e-03f, -1.083620314e-03f, -1.097516333e-03f, -1.111409723e-03f, -1.125300460e-03f, -1.139188521e-03f, -1.153073882e-03f,
+-1.166956519e-03f, -1.180836408e-03f, -1.194713525e-03f, -1.208587847e-03f, -1.222459349e-03f, -1.236328008e-03f, -1.250193800e-03f, -1.264056701e-03f, -1.277916687e-03f, -1.291773735e-03f,
+-1.305627821e-03f, -1.319478920e-03f, -1.333327010e-03f, -1.347172067e-03f, -1.361014066e-03f, -1.374852984e-03f, -1.388688798e-03f, -1.402521482e-03f, -1.416351015e-03f, -1.430177372e-03f,
+-1.444000528e-03f, -1.457820462e-03f, -1.471637148e-03f, -1.485450564e-03f, -1.499260685e-03f, -1.513067488e-03f, -1.526870949e-03f, -1.540671045e-03f, -1.554467751e-03f, -1.568261044e-03f,
+-1.582050901e-03f, -1.595837298e-03f, -1.609620211e-03f, -1.623399617e-03f, -1.637175491e-03f, -1.650947811e-03f, -1.664716553e-03f, -1.678481693e-03f, -1.692243208e-03f, -1.706001073e-03f,
+-1.719755266e-03f, -1.733505763e-03f, -1.747252540e-03f, -1.760995573e-03f, -1.774734840e-03f, -1.788470317e-03f, -1.802201980e-03f, -1.815929805e-03f, -1.829653769e-03f, -1.843373849e-03f,
+-1.857090021e-03f, -1.870802262e-03f, -1.884510548e-03f, -1.898214855e-03f, -1.911915161e-03f, -1.925611441e-03f, -1.939303673e-03f, -1.952991832e-03f, -1.966675896e-03f, -1.980355841e-03f,
+-1.994031643e-03f, -2.007703280e-03f, -2.021370727e-03f, -2.035033961e-03f, -2.048692960e-03f, -2.062347699e-03f, -2.075998156e-03f, -2.089644306e-03f, -2.103286127e-03f, -2.116923595e-03f,
+-2.130556686e-03f, -2.144185379e-03f, -2.157809649e-03f, -2.171429472e-03f, -2.185044826e-03f, -2.198655688e-03f, -2.212262033e-03f, -2.225863840e-03f, -2.239461084e-03f, -2.253053742e-03f,
+-2.266641791e-03f, -2.280225209e-03f, -2.293803970e-03f, -2.307378053e-03f, -2.320947435e-03f, -2.334512091e-03f, -2.348071999e-03f, -2.361627136e-03f, -2.375177478e-03f, -2.388723002e-03f,
+-2.402263686e-03f, -2.415799506e-03f, -2.429330438e-03f, -2.442856460e-03f, -2.456377549e-03f, -2.469893682e-03f, -2.483404835e-03f, -2.496910985e-03f, -2.510412110e-03f, -2.523908186e-03f,
+-2.537399190e-03f, -2.550885100e-03f, -2.564365891e-03f, -2.577841542e-03f, -2.591312029e-03f, -2.604777329e-03f, -2.618237419e-03f, -2.631692276e-03f, -2.645141878e-03f, -2.658586200e-03f,
+-2.672025221e-03f, -2.685458918e-03f, -2.698887266e-03f, -2.712310245e-03f, -2.725727829e-03f, -2.739139998e-03f, -2.752546727e-03f, -2.765947995e-03f, -2.779343777e-03f, -2.792734052e-03f,
+-2.806118795e-03f, -2.819497986e-03f, -2.832871600e-03f, -2.846239615e-03f, -2.859602009e-03f, -2.872958757e-03f, -2.886309838e-03f, -2.899655229e-03f, -2.912994907e-03f, -2.926328850e-03f,
+-2.939657033e-03f, -2.952979436e-03f, -2.966296035e-03f, -2.979606807e-03f, -2.992911730e-03f, -3.006210781e-03f, -3.019503937e-03f, -3.032791176e-03f, -3.046072475e-03f, -3.059347812e-03f,
+-3.072617164e-03f, -3.085880507e-03f, -3.099137821e-03f, -3.112389081e-03f, -3.125634266e-03f, -3.138873353e-03f, -3.152106319e-03f, -3.165333142e-03f, -3.178553799e-03f, -3.191768268e-03f,
+-3.204976527e-03f, -3.218178552e-03f, -3.231374321e-03f, -3.244563813e-03f, -3.257747003e-03f, -3.270923871e-03f, -3.284094393e-03f, -3.297258547e-03f, -3.310416311e-03f, -3.323567663e-03f,
+-3.336712579e-03f, -3.349851037e-03f, -3.362983016e-03f, -3.376108493e-03f, -3.389227445e-03f, -3.402339851e-03f, -3.415445687e-03f, -3.428544932e-03f, -3.441637563e-03f, -3.454723558e-03f,
+-3.467802895e-03f, -3.480875552e-03f, -3.493941506e-03f, -3.507000734e-03f, -3.520053216e-03f, -3.533098929e-03f, -3.546137850e-03f, -3.559169957e-03f, -3.572195228e-03f, -3.585213642e-03f,
+-3.598225175e-03f, -3.611229806e-03f, -3.624227513e-03f, -3.637218274e-03f, -3.650202065e-03f, -3.663178867e-03f, -3.676148656e-03f, -3.689111410e-03f, -3.702067107e-03f, -3.715015726e-03f,
+-3.727957244e-03f, -3.740891640e-03f, -3.753818891e-03f, -3.766738975e-03f, -3.779651871e-03f, -3.792557556e-03f, -3.805456009e-03f, -3.818347208e-03f, -3.831231130e-03f, -3.844107755e-03f,
+-3.856977060e-03f, -3.869839022e-03f, -3.882693622e-03f, -3.895540836e-03f, -3.908380642e-03f, -3.921213020e-03f, -3.934037947e-03f, -3.946855402e-03f, -3.959665362e-03f, -3.972467806e-03f,
+-3.985262712e-03f, -3.998050059e-03f, -4.010829825e-03f, -4.023601988e-03f, -4.036366527e-03f, -4.049123419e-03f, -4.061872644e-03f, -4.074614179e-03f, -4.087348003e-03f, -4.100074095e-03f,
+-4.112792432e-03f, -4.125502994e-03f, -4.138205759e-03f, -4.150900704e-03f, -4.163587810e-03f, -4.176267053e-03f, -4.188938413e-03f, -4.201601869e-03f, -4.214257398e-03f, -4.226904979e-03f,
+-4.239544591e-03f, -4.252176213e-03f, -4.264799823e-03f, -4.277415399e-03f, -4.290022921e-03f, -4.302622366e-03f, -4.315213714e-03f, -4.327796944e-03f, -4.340372033e-03f, -4.352938961e-03f,
+-4.365497706e-03f, -4.378048248e-03f, -4.390590564e-03f, -4.403124634e-03f, -4.415650436e-03f, -4.428167950e-03f, -4.440677153e-03f, -4.453178026e-03f, -4.465670546e-03f, -4.478154692e-03f,
+-4.490630444e-03f, -4.503097781e-03f, -4.515556680e-03f, -4.528007122e-03f, -4.540449084e-03f, -4.552882547e-03f, -4.565307488e-03f, -4.577723888e-03f, -4.590131724e-03f, -4.602530977e-03f,
+-4.614921624e-03f, -4.627303646e-03f, -4.639677021e-03f, -4.652041727e-03f, -4.664397746e-03f, -4.676745054e-03f, -4.689083632e-03f, -4.701413459e-03f, -4.713734513e-03f, -4.726046775e-03f,
+-4.738350223e-03f, -4.750644836e-03f, -4.762930594e-03f, -4.775207475e-03f, -4.787475460e-03f, -4.799734527e-03f, -4.811984656e-03f, -4.824225826e-03f, -4.836458016e-03f, -4.848681206e-03f,
+-4.860895375e-03f, -4.873100502e-03f, -4.885296568e-03f, -4.897483550e-03f, -4.909661429e-03f, -4.921830184e-03f, -4.933989794e-03f, -4.946140240e-03f, -4.958281500e-03f, -4.970413554e-03f,
+-4.982536381e-03f, -4.994649962e-03f, -5.006754275e-03f, -5.018849300e-03f, -5.030935017e-03f, -5.043011406e-03f, -5.055078445e-03f, -5.067136115e-03f, -5.079184396e-03f, -5.091223267e-03f,
+-5.103252707e-03f, -5.115272697e-03f, -5.127283215e-03f, -5.139284243e-03f, -5.151275760e-03f, -5.163257745e-03f, -5.175230178e-03f, -5.187193039e-03f, -5.199146308e-03f, -5.211089965e-03f,
+-5.223023990e-03f, -5.234948362e-03f, -5.246863061e-03f, -5.258768068e-03f, -5.270663362e-03f, -5.282548924e-03f, -5.294424733e-03f, -5.306290769e-03f, -5.318147012e-03f, -5.329993442e-03f,
+-5.341830040e-03f, -5.353656785e-03f, -5.365473658e-03f, -5.377280638e-03f, -5.389077707e-03f, -5.400864842e-03f, -5.412642026e-03f, -5.424409239e-03f, -5.436166459e-03f, -5.447913668e-03f,
+-5.459650846e-03f, -5.471377973e-03f, -5.483095030e-03f, -5.494801996e-03f, -5.506498852e-03f, -5.518185578e-03f, -5.529862155e-03f, -5.541528563e-03f, -5.553184783e-03f, -5.564830794e-03f,
+-5.576466577e-03f, -5.588092113e-03f, -5.599707382e-03f, -5.611312364e-03f, -5.622907041e-03f, -5.634491392e-03f, -5.646065398e-03f, -5.657629040e-03f, -5.669182298e-03f, -5.680725153e-03f,
+-5.692257585e-03f, -5.703779575e-03f, -5.715291104e-03f, -5.726792152e-03f, -5.738282700e-03f, -5.749762729e-03f, -5.761232220e-03f, -5.772691152e-03f, -5.784139508e-03f, -5.795577267e-03f,
+-5.807004410e-03f, -5.818420919e-03f, -5.829826774e-03f, -5.841221956e-03f, -5.852606446e-03f, -5.863980225e-03f, -5.875343273e-03f, -5.886695573e-03f, -5.898037103e-03f, -5.909367846e-03f,
+-5.920687783e-03f, -5.931996894e-03f, -5.943295161e-03f, -5.954582565e-03f, -5.965859086e-03f, -5.977124706e-03f, -5.988379406e-03f, -5.999623167e-03f, -6.010855970e-03f, -6.022077797e-03f,
+-6.033288628e-03f, -6.044488445e-03f, -6.055677229e-03f, -6.066854961e-03f, -6.078021623e-03f, -6.089177195e-03f, -6.100321660e-03f, -6.111454998e-03f, -6.122577191e-03f, -6.133688220e-03f,
+-6.144788066e-03f, -6.155876712e-03f, -6.166954138e-03f, -6.178020326e-03f, -6.189075257e-03f, -6.200118913e-03f, -6.211151275e-03f, -6.222172325e-03f, -6.233182045e-03f, -6.244180416e-03f,
+-6.255167419e-03f, -6.266143036e-03f, -6.277107250e-03f, -6.288060041e-03f, -6.299001391e-03f, -6.309931282e-03f, -6.320849695e-03f, -6.331756613e-03f, -6.342652017e-03f, -6.353535889e-03f,
+-6.364408211e-03f, -6.375268964e-03f, -6.386118130e-03f, -6.396955692e-03f, -6.407781631e-03f, -6.418595929e-03f, -6.429398568e-03f, -6.440189530e-03f, -6.450968797e-03f, -6.461736350e-03f,
+-6.472492173e-03f, -6.483236246e-03f, -6.493968552e-03f, -6.504689074e-03f, -6.515397792e-03f, -6.526094690e-03f, -6.536779750e-03f, -6.547452953e-03f, -6.558114281e-03f, -6.568763718e-03f,
+-6.579401245e-03f, -6.590026844e-03f, -6.600640498e-03f, -6.611242189e-03f, -6.621831899e-03f, -6.632409611e-03f, -6.642975307e-03f, -6.653528970e-03f, -6.664070581e-03f, -6.674600123e-03f,
+-6.685117579e-03f, -6.695622932e-03f, -6.706116163e-03f, -6.716597255e-03f, -6.727066190e-03f, -6.737522952e-03f, -6.747967523e-03f, -6.758399885e-03f, -6.768820021e-03f, -6.779227913e-03f,
+-6.789623545e-03f, -6.800006899e-03f, -6.810377958e-03f, -6.820736704e-03f, -6.831083120e-03f, -6.841417189e-03f, -6.851738894e-03f, -6.862048217e-03f, -6.872345142e-03f, -6.882629651e-03f,
+-6.892901728e-03f, -6.903161354e-03f, -6.913408513e-03f, -6.923643188e-03f, -6.933865363e-03f, -6.944075019e-03f, -6.954272140e-03f, -6.964456709e-03f, -6.974628709e-03f, -6.984788123e-03f,
+-6.994934934e-03f, -7.005069126e-03f, -7.015190681e-03f, -7.025299583e-03f, -7.035395815e-03f, -7.045479360e-03f, -7.055550202e-03f, -7.065608323e-03f, -7.075653707e-03f, -7.085686337e-03f,
+-7.095706197e-03f, -7.105713269e-03f, -7.115707538e-03f, -7.125688987e-03f, -7.135657599e-03f, -7.145613358e-03f, -7.155556247e-03f, -7.165486249e-03f, -7.175403348e-03f, -7.185307528e-03f,
+-7.195198773e-03f, -7.205077065e-03f, -7.214942388e-03f, -7.224794727e-03f, -7.234634065e-03f, -7.244460384e-03f, -7.254273670e-03f, -7.264073906e-03f, -7.273861076e-03f, -7.283635162e-03f,
+-7.293396150e-03f, -7.303144023e-03f, -7.312878765e-03f, -7.322600360e-03f, -7.332308791e-03f, -7.342004043e-03f, -7.351686100e-03f, -7.361354944e-03f, -7.371010562e-03f, -7.380652935e-03f,
+-7.390282050e-03f, -7.399897888e-03f, -7.409500436e-03f, -7.419089676e-03f, -7.428665593e-03f, -7.438228172e-03f, -7.447777395e-03f, -7.457313248e-03f, -7.466835714e-03f, -7.476344779e-03f,
+-7.485840426e-03f, -7.495322639e-03f, -7.504791403e-03f, -7.514246702e-03f, -7.523688521e-03f, -7.533116843e-03f, -7.542531654e-03f, -7.551932938e-03f, -7.561320679e-03f, -7.570694862e-03f,
+-7.580055471e-03f, -7.589402491e-03f, -7.598735906e-03f, -7.608055702e-03f, -7.617361861e-03f, -7.626654371e-03f, -7.635933214e-03f, -7.645198375e-03f, -7.654449840e-03f, -7.663687593e-03f,
+-7.672911619e-03f, -7.682121902e-03f, -7.691318428e-03f, -7.700501181e-03f, -7.709670146e-03f, -7.718825308e-03f, -7.727966652e-03f, -7.737094162e-03f, -7.746207825e-03f, -7.755307624e-03f,
+-7.764393545e-03f, -7.773465573e-03f, -7.782523692e-03f, -7.791567889e-03f, -7.800598147e-03f, -7.809614453e-03f, -7.818616791e-03f, -7.827605147e-03f, -7.836579505e-03f, -7.845539851e-03f,
+-7.854486171e-03f, -7.863418449e-03f, -7.872336670e-03f, -7.881240821e-03f, -7.890130886e-03f, -7.899006851e-03f, -7.907868702e-03f, -7.916716423e-03f, -7.925550000e-03f, -7.934369419e-03f,
+-7.943174665e-03f, -7.951965723e-03f, -7.960742580e-03f, -7.969505221e-03f, -7.978253631e-03f, -7.986987796e-03f, -7.995707702e-03f, -8.004413334e-03f, -8.013104679e-03f, -8.021781721e-03f,
+-8.030444447e-03f, -8.039092842e-03f, -8.047726892e-03f, -8.056346584e-03f, -8.064951902e-03f, -8.073542833e-03f, -8.082119363e-03f, -8.090681477e-03f, -8.099229162e-03f, -8.107762404e-03f,
+-8.116281188e-03f, -8.124785501e-03f, -8.133275328e-03f, -8.141750657e-03f, -8.150211472e-03f, -8.158657761e-03f, -8.167089508e-03f, -8.175506701e-03f, -8.183909326e-03f, -8.192297369e-03f,
+-8.200670816e-03f, -8.209029653e-03f, -8.217373867e-03f, -8.225703445e-03f, -8.234018372e-03f, -8.242318635e-03f, -8.250604220e-03f, -8.258875114e-03f, -8.267131303e-03f, -8.275372775e-03f,
+-8.283599514e-03f, -8.291811509e-03f, -8.300008745e-03f, -8.308191209e-03f, -8.316358888e-03f, -8.324511768e-03f, -8.332649837e-03f, -8.340773080e-03f, -8.348881485e-03f, -8.356975038e-03f,
+-8.365053727e-03f, -8.373117537e-03f, -8.381166456e-03f, -8.389200471e-03f, -8.397219569e-03f, -8.405223736e-03f, -8.413212959e-03f, -8.421187226e-03f, -8.429146524e-03f, -8.437090839e-03f,
+-8.445020159e-03f, -8.452934470e-03f, -8.460833760e-03f, -8.468718016e-03f, -8.476587225e-03f, -8.484441375e-03f, -8.492280451e-03f, -8.500104443e-03f, -8.507913337e-03f, -8.515707120e-03f,
+-8.523485780e-03f, -8.531249303e-03f, -8.538997678e-03f, -8.546730892e-03f, -8.554448932e-03f, -8.562151786e-03f, -8.569839441e-03f, -8.577511885e-03f, -8.585169105e-03f, -8.592811089e-03f,
+-8.600437824e-03f, -8.608049299e-03f, -8.615645500e-03f, -8.623226415e-03f, -8.630792033e-03f, -8.638342340e-03f, -8.645877325e-03f, -8.653396975e-03f, -8.660901279e-03f, -8.668390223e-03f,
+-8.675863797e-03f, -8.683321987e-03f, -8.690764781e-03f, -8.698192169e-03f, -8.705604137e-03f, -8.713000674e-03f, -8.720381767e-03f, -8.727747405e-03f, -8.735097576e-03f, -8.742432268e-03f,
+-8.749751469e-03f, -8.757055168e-03f, -8.764343351e-03f, -8.771616008e-03f, -8.778873128e-03f, -8.786114697e-03f, -8.793340705e-03f, -8.800551140e-03f, -8.807745989e-03f, -8.814925243e-03f,
+-8.822088888e-03f, -8.829236914e-03f, -8.836369309e-03f, -8.843486061e-03f, -8.850587159e-03f, -8.857672592e-03f, -8.864742347e-03f, -8.871796414e-03f, -8.878834782e-03f, -8.885857438e-03f,
+-8.892864373e-03f, -8.899855573e-03f, -8.906831029e-03f, -8.913790729e-03f, -8.920734661e-03f, -8.927662815e-03f, -8.934575179e-03f, -8.941471742e-03f, -8.948352494e-03f, -8.955217423e-03f,
+-8.962066518e-03f, -8.968899768e-03f, -8.975717162e-03f, -8.982518689e-03f, -8.989304339e-03f, -8.996074100e-03f, -9.002827962e-03f, -9.009565913e-03f, -9.016287943e-03f, -9.022994041e-03f,
+-9.029684196e-03f, -9.036358399e-03f, -9.043016637e-03f, -9.049658900e-03f, -9.056285178e-03f, -9.062895460e-03f, -9.069489736e-03f, -9.076067994e-03f, -9.082630225e-03f, -9.089176417e-03f,
+-9.095706561e-03f, -9.102220646e-03f, -9.108718661e-03f, -9.115200597e-03f, -9.121666443e-03f, -9.128116188e-03f, -9.134549822e-03f, -9.140967335e-03f, -9.147368716e-03f, -9.153753957e-03f,
+-9.160123045e-03f, -9.166475972e-03f, -9.172812726e-03f, -9.179133299e-03f, -9.185437679e-03f, -9.191725857e-03f, -9.197997823e-03f, -9.204253567e-03f, -9.210493078e-03f, -9.216716347e-03f,
+-9.222923365e-03f, -9.229114120e-03f, -9.235288604e-03f, -9.241446806e-03f, -9.247588717e-03f, -9.253714327e-03f, -9.259823626e-03f, -9.265916605e-03f, -9.271993253e-03f, -9.278053562e-03f,
+-9.284097521e-03f, -9.290125121e-03f, -9.296136353e-03f, -9.302131206e-03f, -9.308109672e-03f, -9.314071741e-03f, -9.320017404e-03f, -9.325946650e-03f, -9.331859472e-03f, -9.337755858e-03f,
+-9.343635801e-03f, -9.349499290e-03f, -9.355346317e-03f, -9.361176872e-03f, -9.366990946e-03f, -9.372788530e-03f, -9.378569615e-03f, -9.384334191e-03f, -9.390082250e-03f, -9.395813782e-03f,
+-9.401528778e-03f, -9.407227230e-03f, -9.412909128e-03f, -9.418574464e-03f, -9.424223228e-03f, -9.429855412e-03f, -9.435471007e-03f, -9.441070003e-03f, -9.446652393e-03f, -9.452218167e-03f,
+-9.457767317e-03f, -9.463299834e-03f, -9.468815709e-03f, -9.474314933e-03f, -9.479797498e-03f, -9.485263396e-03f, -9.490712618e-03f, -9.496145154e-03f, -9.501560998e-03f, -9.506960139e-03f,
+-9.512342571e-03f, -9.517708284e-03f, -9.523057270e-03f, -9.528389520e-03f, -9.533705027e-03f, -9.539003782e-03f, -9.544285776e-03f, -9.549551002e-03f, -9.554799451e-03f, -9.560031115e-03f,
+-9.565245986e-03f, -9.570444056e-03f, -9.575625316e-03f, -9.580789759e-03f, -9.585937377e-03f, -9.591068161e-03f, -9.596182104e-03f, -9.601279197e-03f, -9.606359433e-03f, -9.611422803e-03f,
+-9.616469301e-03f, -9.621498918e-03f, -9.626511646e-03f, -9.631507477e-03f, -9.636486405e-03f, -9.641448420e-03f, -9.646393516e-03f, -9.651321684e-03f, -9.656232918e-03f, -9.661127209e-03f,
+-9.666004550e-03f, -9.670864933e-03f, -9.675708351e-03f, -9.680534797e-03f, -9.685344262e-03f, -9.690136740e-03f, -9.694912223e-03f, -9.699670704e-03f, -9.704412176e-03f, -9.709136630e-03f,
+-9.713844061e-03f, -9.718534460e-03f, -9.723207820e-03f, -9.727864135e-03f, -9.732503397e-03f, -9.737125599e-03f, -9.741730733e-03f, -9.746318794e-03f, -9.750889773e-03f, -9.755443664e-03f,
+-9.759980460e-03f, -9.764500154e-03f, -9.769002739e-03f, -9.773488208e-03f, -9.777956554e-03f, -9.782407770e-03f, -9.786841850e-03f, -9.791258787e-03f, -9.795658574e-03f, -9.800041205e-03f,
+-9.804406672e-03f, -9.808754970e-03f, -9.813086090e-03f, -9.817400028e-03f, -9.821696776e-03f, -9.825976328e-03f, -9.830238678e-03f, -9.834483818e-03f, -9.838711742e-03f, -9.842922445e-03f,
+-9.847115919e-03f, -9.851292159e-03f, -9.855451158e-03f, -9.859592909e-03f, -9.863717407e-03f, -9.867824645e-03f, -9.871914618e-03f, -9.875987318e-03f, -9.880042740e-03f, -9.884080878e-03f,
+-9.888101725e-03f, -9.892105276e-03f, -9.896091524e-03f, -9.900060464e-03f, -9.904012090e-03f, -9.907946395e-03f, -9.911863374e-03f, -9.915763022e-03f, -9.919645331e-03f, -9.923510296e-03f,
+-9.927357913e-03f, -9.931188174e-03f, -9.935001074e-03f, -9.938796607e-03f, -9.942574769e-03f, -9.946335552e-03f, -9.950078952e-03f, -9.953804964e-03f, -9.957513580e-03f, -9.961204797e-03f,
+-9.964878608e-03f, -9.968535009e-03f, -9.972173993e-03f, -9.975795555e-03f, -9.979399691e-03f, -9.982986394e-03f, -9.986555659e-03f, -9.990107482e-03f, -9.993641857e-03f, -9.997158778e-03f,
+-1.000065824e-02f, -1.000414024e-02f, -1.000760477e-02f, -1.001105183e-02f, -1.001448141e-02f, -1.001789350e-02f, -1.002128811e-02f, -1.002466522e-02f, -1.002802483e-02f, -1.003136694e-02f,
+-1.003469154e-02f, -1.003799863e-02f, -1.004128820e-02f, -1.004456025e-02f, -1.004781477e-02f, -1.005105176e-02f, -1.005427121e-02f, -1.005747312e-02f, -1.006065748e-02f, -1.006382429e-02f,
+-1.006697355e-02f, -1.007010525e-02f, -1.007321938e-02f, -1.007631594e-02f, -1.007939494e-02f, -1.008245635e-02f, -1.008550018e-02f, -1.008852643e-02f, -1.009153508e-02f, -1.009452614e-02f,
+-1.009749960e-02f, -1.010045546e-02f, -1.010339371e-02f, -1.010631435e-02f, -1.010921737e-02f, -1.011210278e-02f, -1.011497055e-02f, -1.011782071e-02f, -1.012065322e-02f, -1.012346811e-02f,
+-1.012626535e-02f, -1.012904495e-02f, -1.013180690e-02f, -1.013455120e-02f, -1.013727785e-02f, -1.013998683e-02f, -1.014267816e-02f, -1.014535181e-02f, -1.014800780e-02f, -1.015064611e-02f,
+-1.015326675e-02f, -1.015586970e-02f, -1.015845497e-02f, -1.016102255e-02f, -1.016357244e-02f, -1.016610463e-02f, -1.016861913e-02f, -1.017111592e-02f, -1.017359501e-02f, -1.017605638e-02f,
+-1.017850005e-02f, -1.018092600e-02f, -1.018333423e-02f, -1.018572474e-02f, -1.018809753e-02f, -1.019045258e-02f, -1.019278991e-02f, -1.019510950e-02f, -1.019741135e-02f, -1.019969546e-02f,
+-1.020196183e-02f, -1.020421045e-02f, -1.020644132e-02f, -1.020865444e-02f, -1.021084980e-02f, -1.021302741e-02f, -1.021518725e-02f, -1.021732933e-02f, -1.021945364e-02f, -1.022156019e-02f,
+-1.022364896e-02f, -1.022571995e-02f, -1.022777317e-02f, -1.022980861e-02f, -1.023182626e-02f, -1.023382613e-02f, -1.023580822e-02f, -1.023777251e-02f, -1.023971901e-02f, -1.024164771e-02f,
+-1.024355862e-02f, -1.024545173e-02f, -1.024732703e-02f, -1.024918453e-02f, -1.025102422e-02f, -1.025284610e-02f, -1.025465018e-02f, -1.025643643e-02f, -1.025820488e-02f, -1.025995550e-02f,
+-1.026168831e-02f, -1.026340329e-02f, -1.026510045e-02f, -1.026677978e-02f, -1.026844129e-02f, -1.027008496e-02f, -1.027171080e-02f, -1.027331881e-02f, -1.027490899e-02f, -1.027648132e-02f,
+-1.027803582e-02f, -1.027957248e-02f, -1.028109129e-02f, -1.028259226e-02f, -1.028407538e-02f, -1.028554066e-02f, -1.028698809e-02f, -1.028841766e-02f, -1.028982938e-02f, -1.029122325e-02f,
+-1.029259927e-02f, -1.029395743e-02f, -1.029529773e-02f, -1.029662017e-02f, -1.029792475e-02f, -1.029921146e-02f, -1.030048032e-02f, -1.030173131e-02f, -1.030296443e-02f, -1.030417968e-02f,
+-1.030537707e-02f, -1.030655659e-02f, -1.030771824e-02f, -1.030886201e-02f, -1.030998792e-02f, -1.031109595e-02f, -1.031218610e-02f, -1.031325838e-02f, -1.031431278e-02f, -1.031534931e-02f,
+-1.031636795e-02f, -1.031736872e-02f, -1.031835161e-02f, -1.031931662e-02f, -1.032026374e-02f, -1.032119299e-02f, -1.032210435e-02f, -1.032299783e-02f, -1.032387342e-02f, -1.032473113e-02f,
+-1.032557096e-02f, -1.032639289e-02f, -1.032719695e-02f, -1.032798311e-02f, -1.032875139e-02f, -1.032950178e-02f, -1.033023429e-02f, -1.033094890e-02f, -1.033164563e-02f, -1.033232447e-02f,
+-1.033298542e-02f, -1.033362848e-02f, -1.033425365e-02f, -1.033486093e-02f, -1.033545033e-02f, -1.033602183e-02f, -1.033657544e-02f, -1.033711117e-02f, -1.033762900e-02f, -1.033812895e-02f,
+-1.033861100e-02f, -1.033907517e-02f, -1.033952145e-02f, -1.033994983e-02f, -1.034036033e-02f, -1.034075294e-02f, -1.034112766e-02f, -1.034148450e-02f, -1.034182344e-02f, -1.034214450e-02f,
+-1.034244767e-02f, -1.034273295e-02f, -1.034300035e-02f, -1.034324986e-02f, -1.034348149e-02f, -1.034369523e-02f, -1.034389109e-02f, -1.034406906e-02f, -1.034422916e-02f, -1.034437137e-02f,
+-1.034449569e-02f, -1.034460214e-02f, -1.034469071e-02f, -1.034476139e-02f, -1.034481420e-02f, -1.034484913e-02f, -1.034486619e-02f, -1.034486536e-02f, -1.034484667e-02f, -1.034481010e-02f,
+-1.034475565e-02f, -1.034468334e-02f, -1.034459315e-02f, -1.034448510e-02f, -1.034435917e-02f, -1.034421538e-02f, -1.034405372e-02f, -1.034387419e-02f, -1.034367681e-02f, -1.034346156e-02f,
+-1.034322844e-02f, -1.034297747e-02f, -1.034270864e-02f, -1.034242195e-02f, -1.034211741e-02f, -1.034179501e-02f, -1.034145476e-02f, -1.034109666e-02f, -1.034072071e-02f, -1.034032691e-02f,
+-1.033991526e-02f, -1.033948577e-02f, -1.033903843e-02f, -1.033857326e-02f, -1.033809024e-02f, -1.033758939e-02f, -1.033707070e-02f, -1.033653417e-02f, -1.033597982e-02f, -1.033540763e-02f,
+-1.033481761e-02f, -1.033420977e-02f, -1.033358410e-02f, -1.033294061e-02f, -1.033227930e-02f, -1.033160017e-02f, -1.033090322e-02f, -1.033018846e-02f, -1.032945588e-02f, -1.032870550e-02f,
+-1.032793731e-02f, -1.032715131e-02f, -1.032634751e-02f, -1.032552591e-02f, -1.032468651e-02f, -1.032382931e-02f, -1.032295432e-02f, -1.032206154e-02f, -1.032115097e-02f, -1.032022261e-02f,
+-1.031927647e-02f, -1.031831255e-02f, -1.031733085e-02f, -1.031633137e-02f, -1.031531412e-02f, -1.031427910e-02f, -1.031322631e-02f, -1.031215576e-02f, -1.031106744e-02f, -1.030996137e-02f,
+-1.030883753e-02f, -1.030769595e-02f, -1.030653661e-02f, -1.030535952e-02f, -1.030416469e-02f, -1.030295212e-02f, -1.030172180e-02f, -1.030047375e-02f, -1.029920797e-02f, -1.029792446e-02f,
+-1.029662322e-02f, -1.029530426e-02f, -1.029396758e-02f, -1.029261318e-02f, -1.029124106e-02f, -1.028985124e-02f, -1.028844371e-02f, -1.028701847e-02f, -1.028557553e-02f, -1.028411490e-02f,
+-1.028263657e-02f, -1.028114056e-02f, -1.027962685e-02f, -1.027809547e-02f, -1.027654640e-02f, -1.027497966e-02f, -1.027339524e-02f, -1.027179316e-02f, -1.027017341e-02f, -1.026853600e-02f,
+-1.026688093e-02f, -1.026520821e-02f, -1.026351784e-02f, -1.026180983e-02f, -1.026008417e-02f, -1.025834087e-02f, -1.025657994e-02f, -1.025480138e-02f, -1.025300519e-02f, -1.025119138e-02f,
+-1.024935995e-02f, -1.024751090e-02f, -1.024564425e-02f, -1.024375999e-02f, -1.024185813e-02f, -1.023993867e-02f, -1.023800162e-02f, -1.023604698e-02f, -1.023407475e-02f, -1.023208495e-02f,
+-1.023007756e-02f, -1.022805261e-02f, -1.022601009e-02f, -1.022395000e-02f, -1.022187236e-02f, -1.021977716e-02f, -1.021766442e-02f, -1.021553413e-02f, -1.021338630e-02f, -1.021122093e-02f,
+-1.020903803e-02f, -1.020683761e-02f, -1.020461967e-02f, -1.020238420e-02f, -1.020013123e-02f, -1.019786075e-02f, -1.019557277e-02f, -1.019326729e-02f, -1.019094431e-02f, -1.018860385e-02f,
+-1.018624591e-02f, -1.018387049e-02f, -1.018147759e-02f, -1.017906723e-02f, -1.017663941e-02f, -1.017419413e-02f, -1.017173140e-02f, -1.016925121e-02f, -1.016675359e-02f, -1.016423853e-02f,
+-1.016170604e-02f, -1.015915613e-02f, -1.015658879e-02f, -1.015400404e-02f, -1.015140187e-02f, -1.014878231e-02f, -1.014614534e-02f, -1.014349098e-02f, -1.014081923e-02f, -1.013813010e-02f,
+-1.013542359e-02f, -1.013269971e-02f, -1.012995846e-02f, -1.012719985e-02f, -1.012442389e-02f, -1.012163058e-02f, -1.011881993e-02f, -1.011599193e-02f, -1.011314661e-02f, -1.011028396e-02f,
+-1.010740399e-02f, -1.010450671e-02f, -1.010159212e-02f, -1.009866022e-02f, -1.009571103e-02f, -1.009274455e-02f, -1.008976079e-02f, -1.008675974e-02f, -1.008374143e-02f, -1.008070585e-02f,
+-1.007765300e-02f, -1.007458291e-02f, -1.007149557e-02f, -1.006839098e-02f, -1.006526916e-02f, -1.006213011e-02f, -1.005897384e-02f, -1.005580036e-02f, -1.005260966e-02f, -1.004940176e-02f,
+-1.004617667e-02f, -1.004293438e-02f, -1.003967491e-02f, -1.003639826e-02f, -1.003310444e-02f, -1.002979346e-02f, -1.002646532e-02f, -1.002312003e-02f, -1.001975759e-02f, -1.001637802e-02f,
+-1.001298132e-02f, -1.000956749e-02f, -1.000613654e-02f, -1.000268849e-02f, -9.999223330e-03f, -9.995741074e-03f, -9.992241729e-03f, -9.988725301e-03f, -9.985191796e-03f, -9.981641223e-03f,
+-9.978073588e-03f, -9.974488899e-03f, -9.970887161e-03f, -9.967268383e-03f, -9.963632571e-03f, -9.959979734e-03f, -9.956309877e-03f, -9.952623008e-03f, -9.948919135e-03f, -9.945198264e-03f,
+-9.941460403e-03f, -9.937705560e-03f, -9.933933741e-03f, -9.930144955e-03f, -9.926339208e-03f, -9.922516508e-03f, -9.918676862e-03f, -9.914820279e-03f, -9.910946765e-03f, -9.907056328e-03f,
+-9.903148976e-03f, -9.899224717e-03f, -9.895283557e-03f, -9.891325505e-03f, -9.887350569e-03f, -9.883358756e-03f, -9.879350074e-03f, -9.875324530e-03f, -9.871282134e-03f, -9.867222891e-03f,
+-9.863146811e-03f, -9.859053902e-03f, -9.854944171e-03f, -9.850817626e-03f, -9.846674275e-03f, -9.842514126e-03f, -9.838337188e-03f, -9.834143469e-03f, -9.829932975e-03f, -9.825705717e-03f,
+-9.821461701e-03f, -9.817200937e-03f, -9.812923432e-03f, -9.808629194e-03f, -9.804318233e-03f, -9.799990555e-03f, -9.795646170e-03f, -9.791285086e-03f, -9.786907312e-03f, -9.782512855e-03f,
+-9.778101724e-03f, -9.773673929e-03f, -9.769229476e-03f, -9.764768375e-03f, -9.760290635e-03f, -9.755796263e-03f, -9.751285270e-03f, -9.746757662e-03f, -9.742213449e-03f, -9.737652641e-03f,
+-9.733075244e-03f, -9.728481269e-03f, -9.723870724e-03f, -9.719243617e-03f, -9.714599959e-03f, -9.709939757e-03f, -9.705263020e-03f, -9.700569758e-03f, -9.695859979e-03f, -9.691133693e-03f,
+-9.686390908e-03f, -9.681631634e-03f, -9.676855879e-03f, -9.672063653e-03f, -9.667254964e-03f, -9.662429823e-03f, -9.657588238e-03f, -9.652730218e-03f, -9.647855773e-03f, -9.642964912e-03f,
+-9.638057644e-03f, -9.633133979e-03f, -9.628193926e-03f, -9.623237494e-03f, -9.618264693e-03f, -9.613275532e-03f, -9.608270021e-03f, -9.603248168e-03f, -9.598209985e-03f, -9.593155480e-03f,
+-9.588084663e-03f, -9.582997543e-03f, -9.577894130e-03f, -9.572774434e-03f, -9.567638465e-03f, -9.562486231e-03f, -9.557317744e-03f, -9.552133012e-03f, -9.546932046e-03f, -9.541714855e-03f,
+-9.536481450e-03f, -9.531231839e-03f, -9.525966034e-03f, -9.520684043e-03f, -9.515385878e-03f, -9.510071547e-03f, -9.504741062e-03f, -9.499394431e-03f, -9.494031665e-03f, -9.488652775e-03f,
+-9.483257770e-03f, -9.477846660e-03f, -9.472419456e-03f, -9.466976168e-03f, -9.461516807e-03f, -9.456041381e-03f, -9.450549902e-03f, -9.445042381e-03f, -9.439518826e-03f, -9.433979250e-03f,
+-9.428423661e-03f, -9.422852072e-03f, -9.417264491e-03f, -9.411660930e-03f, -9.406041399e-03f, -9.400405908e-03f, -9.394754469e-03f, -9.389087091e-03f, -9.383403786e-03f, -9.377704564e-03f,
+-9.371989436e-03f, -9.366258412e-03f, -9.360511503e-03f, -9.354748720e-03f, -9.348970074e-03f, -9.343175575e-03f, -9.337365235e-03f, -9.331539064e-03f, -9.325697073e-03f, -9.319839273e-03f,
+-9.313965675e-03f, -9.308076290e-03f, -9.302171129e-03f, -9.296250203e-03f, -9.290313523e-03f, -9.284361100e-03f, -9.278392945e-03f, -9.272409070e-03f, -9.266409485e-03f, -9.260394202e-03f,
+-9.254363231e-03f, -9.248316585e-03f, -9.242254274e-03f, -9.236176310e-03f, -9.230082704e-03f, -9.223973467e-03f, -9.217848611e-03f, -9.211708147e-03f, -9.205552087e-03f, -9.199380441e-03f,
+-9.193193222e-03f, -9.186990441e-03f, -9.180772110e-03f, -9.174538239e-03f, -9.168288841e-03f, -9.162023928e-03f, -9.155743510e-03f, -9.149447600e-03f, -9.143136209e-03f, -9.136809349e-03f,
+-9.130467031e-03f, -9.124109268e-03f, -9.117736072e-03f, -9.111347453e-03f, -9.104943424e-03f, -9.098523997e-03f, -9.092089183e-03f, -9.085638995e-03f, -9.079173445e-03f, -9.072692544e-03f,
+-9.066196304e-03f, -9.059684738e-03f, -9.053157858e-03f, -9.046615675e-03f, -9.040058202e-03f, -9.033485450e-03f, -9.026897433e-03f, -9.020294162e-03f, -9.013675649e-03f, -9.007041907e-03f,
+-9.000392948e-03f, -8.993728784e-03f, -8.987049427e-03f, -8.980354890e-03f, -8.973645185e-03f, -8.966920325e-03f, -8.960180322e-03f, -8.953425188e-03f, -8.946654936e-03f, -8.939869578e-03f,
+-8.933069127e-03f, -8.926253595e-03f, -8.919422996e-03f, -8.912577341e-03f, -8.905716642e-03f, -8.898840914e-03f, -8.891950168e-03f, -8.885044418e-03f, -8.878123675e-03f, -8.871187952e-03f,
+-8.864237263e-03f, -8.857271620e-03f, -8.850291036e-03f, -8.843295524e-03f, -8.836285096e-03f, -8.829259766e-03f, -8.822219547e-03f, -8.815164450e-03f, -8.808094490e-03f, -8.801009680e-03f,
+-8.793910031e-03f, -8.786795558e-03f, -8.779666274e-03f, -8.772522191e-03f, -8.765363323e-03f, -8.758189682e-03f, -8.751001283e-03f, -8.743798138e-03f, -8.736580260e-03f, -8.729347662e-03f,
+-8.722100359e-03f, -8.714838362e-03f, -8.707561686e-03f, -8.700270344e-03f, -8.692964349e-03f, -8.685643715e-03f, -8.678308454e-03f, -8.670958581e-03f, -8.663594109e-03f, -8.656215051e-03f,
+-8.648821421e-03f, -8.641413232e-03f, -8.633990498e-03f, -8.626553233e-03f, -8.619101450e-03f, -8.611635163e-03f, -8.604154385e-03f, -8.596659130e-03f, -8.589149412e-03f, -8.581625244e-03f,
+-8.574086641e-03f, -8.566533616e-03f, -8.558966182e-03f, -8.551384355e-03f, -8.543788147e-03f, -8.536177572e-03f, -8.528552644e-03f, -8.520913378e-03f, -8.513259787e-03f, -8.505591885e-03f,
+-8.497909686e-03f, -8.490213205e-03f, -8.482502454e-03f, -8.474777449e-03f, -8.467038203e-03f, -8.459284731e-03f, -8.451517046e-03f, -8.443735163e-03f, -8.435939096e-03f, -8.428128859e-03f,
+-8.420304466e-03f, -8.412465933e-03f, -8.404613271e-03f, -8.396746498e-03f, -8.388865625e-03f, -8.380970669e-03f, -8.373061643e-03f, -8.365138562e-03f, -8.357201439e-03f, -8.349250290e-03f,
+-8.341285130e-03f, -8.333305971e-03f, -8.325312830e-03f, -8.317305720e-03f, -8.309284657e-03f, -8.301249654e-03f, -8.293200726e-03f, -8.285137888e-03f, -8.277061155e-03f, -8.268970541e-03f,
+-8.260866061e-03f, -8.252747730e-03f, -8.244615562e-03f, -8.236469573e-03f, -8.228309776e-03f, -8.220136187e-03f, -8.211948821e-03f, -8.203747693e-03f, -8.195532817e-03f, -8.187304208e-03f,
+-8.179061881e-03f, -8.170805852e-03f, -8.162536135e-03f, -8.154252745e-03f, -8.145955697e-03f, -8.137645006e-03f, -8.129320688e-03f, -8.120982757e-03f, -8.112631229e-03f, -8.104266118e-03f,
+-8.095887441e-03f, -8.087495211e-03f, -8.079089444e-03f, -8.070670156e-03f, -8.062237362e-03f, -8.053791076e-03f, -8.045331315e-03f, -8.036858094e-03f, -8.028371427e-03f, -8.019871330e-03f,
+-8.011357820e-03f, -8.002830910e-03f, -7.994290617e-03f, -7.985736956e-03f, -7.977169942e-03f, -7.968589591e-03f, -7.959995919e-03f, -7.951388940e-03f, -7.942768671e-03f, -7.934135128e-03f,
+-7.925488325e-03f, -7.916828278e-03f, -7.908155003e-03f, -7.899468516e-03f, -7.890768833e-03f, -7.882055969e-03f, -7.873329939e-03f, -7.864590760e-03f, -7.855838448e-03f, -7.847073017e-03f,
+-7.838294485e-03f, -7.829502867e-03f, -7.820698178e-03f, -7.811880435e-03f, -7.803049653e-03f, -7.794205849e-03f, -7.785349039e-03f, -7.776479238e-03f, -7.767596462e-03f, -7.758700728e-03f,
+-7.749792051e-03f, -7.740870448e-03f, -7.731935934e-03f, -7.722988527e-03f, -7.714028241e-03f, -7.705055093e-03f, -7.696069099e-03f, -7.687070276e-03f, -7.678058639e-03f, -7.669034206e-03f,
+-7.659996991e-03f, -7.650947012e-03f, -7.641884284e-03f, -7.632808825e-03f, -7.623720649e-03f, -7.614619775e-03f, -7.605506218e-03f, -7.596379994e-03f, -7.587241120e-03f, -7.578089612e-03f,
+-7.568925488e-03f, -7.559748762e-03f, -7.550559453e-03f, -7.541357576e-03f, -7.532143148e-03f, -7.522916185e-03f, -7.513676704e-03f, -7.504424723e-03f, -7.495160256e-03f, -7.485883322e-03f,
+-7.476593936e-03f, -7.467292116e-03f, -7.457977877e-03f, -7.448651238e-03f, -7.439312214e-03f, -7.429960823e-03f, -7.420597080e-03f, -7.411221004e-03f, -7.401832611e-03f, -7.392431917e-03f,
+-7.383018940e-03f, -7.373593696e-03f, -7.364156203e-03f, -7.354706477e-03f, -7.345244536e-03f, -7.335770395e-03f, -7.326284073e-03f, -7.316785587e-03f, -7.307274953e-03f, -7.297752188e-03f,
+-7.288217309e-03f, -7.278670335e-03f, -7.269111281e-03f, -7.259540165e-03f, -7.249957004e-03f, -7.240361815e-03f, -7.230754616e-03f, -7.221135423e-03f, -7.211504254e-03f, -7.201861127e-03f,
+-7.192206058e-03f, -7.182539064e-03f, -7.172860164e-03f, -7.163169374e-03f, -7.153466712e-03f, -7.143752195e-03f, -7.134025841e-03f, -7.124287667e-03f, -7.114537690e-03f, -7.104775928e-03f,
+-7.095002398e-03f, -7.085217118e-03f, -7.075420106e-03f, -7.065611378e-03f, -7.055790953e-03f, -7.045958848e-03f, -7.036115081e-03f, -7.026259668e-03f, -7.016392629e-03f, -7.006513980e-03f,
+-6.996623740e-03f, -6.986721925e-03f, -6.976808554e-03f, -6.966883645e-03f, -6.956947214e-03f, -6.946999280e-03f, -6.937039861e-03f, -6.927068975e-03f, -6.917086638e-03f, -6.907092870e-03f,
+-6.897087688e-03f, -6.887071109e-03f, -6.877043153e-03f, -6.867003836e-03f, -6.856953176e-03f, -6.846891192e-03f, -6.836817902e-03f, -6.826733323e-03f, -6.816637474e-03f, -6.806530372e-03f,
+-6.796412036e-03f, -6.786282484e-03f, -6.776141733e-03f, -6.765989802e-03f, -6.755826709e-03f, -6.745652473e-03f, -6.735467110e-03f, -6.725270640e-03f, -6.715063081e-03f, -6.704844450e-03f,
+-6.694614767e-03f, -6.684374049e-03f, -6.674122314e-03f, -6.663859582e-03f, -6.653585869e-03f, -6.643301196e-03f, -6.633005579e-03f, -6.622699037e-03f, -6.612381589e-03f, -6.602053253e-03f,
+-6.591714047e-03f, -6.581363990e-03f, -6.571003100e-03f, -6.560631396e-03f, -6.550248896e-03f, -6.539855619e-03f, -6.529451583e-03f, -6.519036807e-03f, -6.508611309e-03f, -6.498175108e-03f,
+-6.487728223e-03f, -6.477270672e-03f, -6.466802473e-03f, -6.456323646e-03f, -6.445834208e-03f, -6.435334180e-03f, -6.424823578e-03f, -6.414302423e-03f, -6.403770733e-03f, -6.393228526e-03f,
+-6.382675821e-03f, -6.372112638e-03f, -6.361538994e-03f, -6.350954909e-03f, -6.340360402e-03f, -6.329755490e-03f, -6.319140195e-03f, -6.308514533e-03f, -6.297878524e-03f, -6.287232187e-03f,
+-6.276575541e-03f, -6.265908605e-03f, -6.255231397e-03f, -6.244543938e-03f, -6.233846245e-03f, -6.223138337e-03f, -6.212420235e-03f, -6.201691956e-03f, -6.190953520e-03f, -6.180204947e-03f,
+-6.169446254e-03f, -6.158677461e-03f, -6.147898588e-03f, -6.137109653e-03f, -6.126310676e-03f, -6.115501676e-03f, -6.104682672e-03f, -6.093853682e-03f, -6.083014728e-03f, -6.072165827e-03f,
+-6.061306999e-03f, -6.050438263e-03f, -6.039559638e-03f, -6.028671145e-03f, -6.017772802e-03f, -6.006864628e-03f, -5.995946643e-03f, -5.985018866e-03f, -5.974081317e-03f, -5.963134014e-03f,
+-5.952176979e-03f, -5.941210229e-03f, -5.930233784e-03f, -5.919247664e-03f, -5.908251889e-03f, -5.897246477e-03f, -5.886231449e-03f, -5.875206823e-03f, -5.864172620e-03f, -5.853128858e-03f,
+-5.842075559e-03f, -5.831012740e-03f, -5.819940422e-03f, -5.808858624e-03f, -5.797767366e-03f, -5.786666668e-03f, -5.775556549e-03f, -5.764437029e-03f, -5.753308128e-03f, -5.742169865e-03f,
+-5.731022261e-03f, -5.719865334e-03f, -5.708699104e-03f, -5.697523593e-03f, -5.686338818e-03f, -5.675144800e-03f, -5.663941559e-03f, -5.652729115e-03f, -5.641507488e-03f, -5.630276696e-03f,
+-5.619036761e-03f, -5.607787702e-03f, -5.596529539e-03f, -5.585262292e-03f, -5.573985981e-03f, -5.562700626e-03f, -5.551406247e-03f, -5.540102863e-03f, -5.528790495e-03f, -5.517469164e-03f,
+-5.506138887e-03f, -5.494799687e-03f, -5.483451583e-03f, -5.472094595e-03f, -5.460728743e-03f, -5.449354047e-03f, -5.437970527e-03f, -5.426578204e-03f, -5.415177097e-03f, -5.403767227e-03f,
+-5.392348614e-03f, -5.380921278e-03f, -5.369485239e-03f, -5.358040518e-03f, -5.346587134e-03f, -5.335125109e-03f, -5.323654461e-03f, -5.312175212e-03f, -5.300687382e-03f, -5.289190991e-03f,
+-5.277686059e-03f, -5.266172607e-03f, -5.254650654e-03f, -5.243120222e-03f, -5.231581331e-03f, -5.220034001e-03f, -5.208478252e-03f, -5.196914105e-03f, -5.185341581e-03f, -5.173760699e-03f,
+-5.162171480e-03f, -5.150573945e-03f, -5.138968114e-03f, -5.127354008e-03f, -5.115731646e-03f, -5.104101050e-03f, -5.092462241e-03f, -5.080815237e-03f, -5.069160061e-03f, -5.057496733e-03f,
+-5.045825273e-03f, -5.034145702e-03f, -5.022458041e-03f, -5.010762309e-03f, -4.999058528e-03f, -4.987346719e-03f, -4.975626901e-03f, -4.963899097e-03f, -4.952163325e-03f, -4.940419608e-03f,
+-4.928667965e-03f, -4.916908418e-03f, -4.905140987e-03f, -4.893365693e-03f, -4.881582557e-03f, -4.869791599e-03f, -4.857992841e-03f, -4.846186302e-03f, -4.834372004e-03f, -4.822549968e-03f,
+-4.810720214e-03f, -4.798882764e-03f, -4.787037638e-03f, -4.775184856e-03f, -4.763324441e-03f, -4.751456412e-03f, -4.739580792e-03f, -4.727697599e-03f, -4.715806856e-03f, -4.703908584e-03f,
+-4.692002803e-03f, -4.680089534e-03f, -4.668168799e-03f, -4.656240618e-03f, -4.644305012e-03f, -4.632362003e-03f, -4.620411611e-03f, -4.608453857e-03f, -4.596488763e-03f, -4.584516349e-03f,
+-4.572536636e-03f, -4.560549646e-03f, -4.548555400e-03f, -4.536553919e-03f, -4.524545223e-03f, -4.512529335e-03f, -4.500506275e-03f, -4.488476064e-03f, -4.476438723e-03f, -4.464394274e-03f,
+-4.452342738e-03f, -4.440284136e-03f, -4.428218489e-03f, -4.416145818e-03f, -4.404066145e-03f, -4.391979491e-03f, -4.379885876e-03f, -4.367785324e-03f, -4.355677853e-03f, -4.343563487e-03f,
+-4.331442246e-03f, -4.319314151e-03f, -4.307179224e-03f, -4.295037487e-03f, -4.282888959e-03f, -4.270733664e-03f, -4.258571621e-03f, -4.246402853e-03f, -4.234227381e-03f, -4.222045226e-03f,
+-4.209856410e-03f, -4.197660954e-03f, -4.185458879e-03f, -4.173250207e-03f, -4.161034960e-03f, -4.148813158e-03f, -4.136584823e-03f, -4.124349977e-03f, -4.112108641e-03f, -4.099860837e-03f,
+-4.087606586e-03f, -4.075345910e-03f, -4.063078830e-03f, -4.050805367e-03f, -4.038525544e-03f, -4.026239382e-03f, -4.013946901e-03f, -4.001648125e-03f, -3.989343074e-03f, -3.977031770e-03f,
+-3.964714235e-03f, -3.952390490e-03f, -3.940060557e-03f, -3.927724458e-03f, -3.915382213e-03f, -3.903033846e-03f, -3.890679376e-03f, -3.878318827e-03f, -3.865952220e-03f, -3.853579576e-03f,
+-3.841200917e-03f, -3.828816265e-03f, -3.816425641e-03f, -3.804029068e-03f, -3.791626566e-03f, -3.779218159e-03f, -3.766803866e-03f, -3.754383711e-03f, -3.741957715e-03f, -3.729525900e-03f,
+-3.717088287e-03f, -3.704644898e-03f, -3.692195756e-03f, -3.679740881e-03f, -3.667280296e-03f, -3.654814023e-03f, -3.642342083e-03f, -3.629864498e-03f, -3.617381290e-03f, -3.604892482e-03f,
+-3.592398093e-03f, -3.579898148e-03f, -3.567392667e-03f, -3.554881673e-03f, -3.542365187e-03f, -3.529843231e-03f, -3.517315828e-03f, -3.504782998e-03f, -3.492244765e-03f, -3.479701149e-03f,
+-3.467152173e-03f, -3.454597860e-03f, -3.442038230e-03f, -3.429473306e-03f, -3.416903110e-03f, -3.404327663e-03f, -3.391746988e-03f, -3.379161108e-03f, -3.366570042e-03f, -3.353973815e-03f,
+-3.341372448e-03f, -3.328765962e-03f, -3.316154381e-03f, -3.303537725e-03f, -3.290916018e-03f, -3.278289281e-03f, -3.265657536e-03f, -3.253020805e-03f, -3.240379110e-03f, -3.227732474e-03f,
+-3.215080919e-03f, -3.202424466e-03f, -3.189763138e-03f, -3.177096957e-03f, -3.164425946e-03f, -3.151750125e-03f, -3.139069518e-03f, -3.126384146e-03f, -3.113694032e-03f, -3.100999198e-03f,
+-3.088299665e-03f, -3.075595457e-03f, -3.062886596e-03f, -3.050173103e-03f, -3.037455001e-03f, -3.024732312e-03f, -3.012005058e-03f, -2.999273261e-03f, -2.986536945e-03f, -2.973796130e-03f,
+-2.961050839e-03f, -2.948301095e-03f, -2.935546920e-03f, -2.922788335e-03f, -2.910025364e-03f, -2.897258028e-03f, -2.884486350e-03f, -2.871710352e-03f, -2.858930057e-03f, -2.846145486e-03f,
+-2.833356662e-03f, -2.820563608e-03f, -2.807766345e-03f, -2.794964896e-03f, -2.782159283e-03f, -2.769349529e-03f, -2.756535656e-03f, -2.743717686e-03f, -2.730895642e-03f, -2.718069546e-03f,
+-2.705239421e-03f, -2.692405288e-03f, -2.679567170e-03f, -2.666725090e-03f, -2.653879070e-03f, -2.641029132e-03f, -2.628175299e-03f, -2.615317593e-03f, -2.602456037e-03f, -2.589590652e-03f,
+-2.576721462e-03f, -2.563848489e-03f, -2.550971756e-03f, -2.538091284e-03f, -2.525207096e-03f, -2.512319214e-03f, -2.499427662e-03f, -2.486532462e-03f, -2.473633635e-03f, -2.460731205e-03f,
+-2.447825194e-03f, -2.434915624e-03f, -2.422002518e-03f, -2.409085899e-03f, -2.396165788e-03f, -2.383242209e-03f, -2.370315184e-03f, -2.357384735e-03f, -2.344450886e-03f, -2.331513658e-03f,
+-2.318573073e-03f, -2.305629156e-03f, -2.292681927e-03f, -2.279731410e-03f, -2.266777627e-03f, -2.253820601e-03f, -2.240860354e-03f, -2.227896909e-03f, -2.214930289e-03f, -2.201960515e-03f,
+-2.188987611e-03f, -2.176011599e-03f, -2.163032501e-03f, -2.150050341e-03f, -2.137065141e-03f, -2.124076923e-03f, -2.111085710e-03f, -2.098091525e-03f, -2.085094390e-03f, -2.072094328e-03f,
+-2.059091361e-03f, -2.046085513e-03f, -2.033076805e-03f, -2.020065260e-03f, -2.007050901e-03f, -1.994033751e-03f, -1.981013832e-03f, -1.967991167e-03f, -1.954965779e-03f, -1.941937689e-03f,
+-1.928906921e-03f, -1.915873498e-03f, -1.902837442e-03f, -1.889798775e-03f, -1.876757521e-03f, -1.863713702e-03f, -1.850667341e-03f, -1.837618460e-03f, -1.824567082e-03f, -1.811513230e-03f,
+-1.798456926e-03f, -1.785398194e-03f, -1.772337055e-03f, -1.759273533e-03f, -1.746207649e-03f, -1.733139428e-03f, -1.720068892e-03f, -1.706996062e-03f, -1.693920963e-03f, -1.680843616e-03f,
+-1.667764045e-03f, -1.654682272e-03f, -1.641598319e-03f, -1.628512211e-03f, -1.615423968e-03f, -1.602333614e-03f, -1.589241173e-03f, -1.576146665e-03f, -1.563050115e-03f, -1.549951545e-03f,
+-1.536850977e-03f, -1.523748434e-03f, -1.510643940e-03f, -1.497537517e-03f, -1.484429187e-03f, -1.471318973e-03f, -1.458206899e-03f, -1.445092986e-03f, -1.431977258e-03f, -1.418859738e-03f,
+-1.405740447e-03f, -1.392619410e-03f, -1.379496647e-03f, -1.366372184e-03f, -1.353246041e-03f, -1.340118242e-03f, -1.326988810e-03f, -1.313857768e-03f, -1.300725137e-03f, -1.287590942e-03f,
+-1.274455204e-03f, -1.261317947e-03f, -1.248179193e-03f, -1.235038965e-03f, -1.221897286e-03f, -1.208754179e-03f, -1.195609666e-03f, -1.182463770e-03f, -1.169316514e-03f, -1.156167921e-03f,
+-1.143018014e-03f, -1.129866814e-03f, -1.116714346e-03f, -1.103560632e-03f, -1.090405694e-03f, -1.077249556e-03f, -1.064092241e-03f, -1.050933770e-03f, -1.037774167e-03f, -1.024613455e-03f,
+-1.011451656e-03f, -9.982887935e-04f, -9.851248900e-04f, -9.719599683e-04f, -9.587940513e-04f, -9.456271616e-04f, -9.324593222e-04f, -9.192905558e-04f, -9.061208852e-04f, -8.929503332e-04f,
+-8.797789227e-04f, -8.666066764e-04f, -8.534336170e-04f, -8.402597675e-04f, -8.270851506e-04f, -8.139097891e-04f, -8.007337059e-04f, -7.875569236e-04f, -7.743794652e-04f, -7.612013534e-04f,
+-7.480226110e-04f, -7.348432608e-04f, -7.216633257e-04f, -7.084828283e-04f, -6.953017916e-04f, -6.821202383e-04f, -6.689381913e-04f, -6.557556732e-04f, -6.425727070e-04f, -6.293893154e-04f,
+-6.162055211e-04f, -6.030213471e-04f, -5.898368162e-04f, -5.766519510e-04f, -5.634667744e-04f, -5.502813092e-04f, -5.370955782e-04f, -5.239096042e-04f, -5.107234099e-04f, -4.975370182e-04f,
+-4.843504519e-04f, -4.711637338e-04f, -4.579768865e-04f, -4.447899330e-04f, -4.316028960e-04f, -4.184157984e-04f, -4.052286628e-04f, -3.920415120e-04f, -3.788543690e-04f, -3.656672563e-04f,
+-3.524801969e-04f, -3.392932135e-04f, -3.261063288e-04f, -3.129195657e-04f, -2.997329469e-04f, -2.865464953e-04f, -2.733602334e-04f, -2.601741843e-04f, -2.469883705e-04f, -2.338028150e-04f,
+-2.206175403e-04f, -2.074325694e-04f, -1.942479250e-04f, -1.810636298e-04f, -1.678797066e-04f, -1.546961781e-04f, -1.415130672e-04f, -1.283303965e-04f, -1.151481888e-04f, -1.019664669e-04f,
+-8.878525346e-05f, -7.560457130e-05f, -6.242444314e-05f, -4.924489173e-05f, -3.606593979e-05f, -2.288761007e-05f, -9.709925301e-06f, 3.467091786e-06f, 1.664341846e-05f, 2.981903199e-05f,
+4.299390966e-05f, 5.616802873e-05f, 6.934136650e-05f, 8.251390023e-05f, 9.568560723e-05f, 1.088564648e-04f, 1.220264501e-04f, 1.351955406e-04f, 1.483637136e-04f, 1.615309462e-04f,
+1.746972159e-04f, 1.878624999e-04f, 2.010267755e-04f, 2.141900200e-04f, 2.273522109e-04f, 2.405133252e-04f, 2.536733405e-04f, 2.668322340e-04f, 2.799899830e-04f, 2.931465649e-04f,
+3.063019570e-04f, 3.194561366e-04f, 3.326090810e-04f, 3.457607677e-04f, 3.589111739e-04f, 3.720602771e-04f, 3.852080544e-04f, 3.983544834e-04f, 4.114995413e-04f, 4.246432056e-04f,
+4.377854535e-04f, 4.509262625e-04f, 4.640656100e-04f, 4.772034732e-04f, 4.903398296e-04f, 5.034746566e-04f, 5.166079316e-04f, 5.297396319e-04f, 5.428697349e-04f, 5.559982181e-04f,
+5.691250589e-04f, 5.822502346e-04f, 5.953737226e-04f, 6.084955005e-04f, 6.216155455e-04f, 6.347338351e-04f, 6.478503468e-04f, 6.609650580e-04f, 6.740779461e-04f, 6.871889886e-04f,
+7.002981629e-04f, 7.134054464e-04f, 7.265108166e-04f, 7.396142510e-04f, 7.527157271e-04f, 7.658152222e-04f, 7.789127139e-04f, 7.920081796e-04f, 8.051015969e-04f, 8.181929432e-04f,
+8.312821959e-04f, 8.443693327e-04f, 8.574543310e-04f, 8.705371683e-04f, 8.836178221e-04f, 8.966962699e-04f, 9.097724893e-04f, 9.228464577e-04f, 9.359181527e-04f, 9.489875519e-04f,
+9.620546328e-04f, 9.751193729e-04f, 9.881817498e-04f, 1.001241741e-03f, 1.014299324e-03f, 1.027354477e-03f, 1.040407176e-03f, 1.053457400e-03f, 1.066505127e-03f, 1.079550333e-03f,
+1.092592996e-03f, 1.105633095e-03f, 1.118670606e-03f, 1.131705507e-03f, 1.144737776e-03f, 1.157767391e-03f, 1.170794328e-03f, 1.183818567e-03f, 1.196840083e-03f, 1.209858856e-03f,
+1.222874862e-03f, 1.235888079e-03f, 1.248898486e-03f, 1.261906059e-03f, 1.274910776e-03f, 1.287912615e-03f, 1.300911554e-03f, 1.313907570e-03f, 1.326900642e-03f, 1.339890746e-03f,
+1.352877860e-03f, 1.365861963e-03f, 1.378843032e-03f, 1.391821044e-03f, 1.404795977e-03f, 1.417767810e-03f, 1.430736520e-03f, 1.443702084e-03f, 1.456664481e-03f, 1.469623687e-03f,
+1.482579682e-03f, 1.495532443e-03f, 1.508481947e-03f, 1.521428172e-03f, 1.534371096e-03f, 1.547310698e-03f, 1.560246954e-03f, 1.573179842e-03f, 1.586109341e-03f, 1.599035429e-03f,
+1.611958082e-03f, 1.624877279e-03f, 1.637792999e-03f, 1.650705217e-03f, 1.663613914e-03f, 1.676519065e-03f, 1.689420650e-03f, 1.702318647e-03f, 1.715213032e-03f, 1.728103784e-03f,
+1.740990882e-03f, 1.753874302e-03f, 1.766754023e-03f, 1.779630023e-03f, 1.792502279e-03f, 1.805370770e-03f, 1.818235474e-03f, 1.831096368e-03f, 1.843953431e-03f, 1.856806640e-03f,
+1.869655974e-03f, 1.882501410e-03f, 1.895342927e-03f, 1.908180503e-03f, 1.921014115e-03f, 1.933843742e-03f, 1.946669361e-03f, 1.959490951e-03f, 1.972308490e-03f, 1.985121956e-03f,
+1.997931327e-03f, 2.010736580e-03f, 2.023537695e-03f, 2.036334649e-03f, 2.049127420e-03f, 2.061915987e-03f, 2.074700327e-03f, 2.087480419e-03f, 2.100256241e-03f, 2.113027771e-03f,
+2.125794986e-03f, 2.138557866e-03f, 2.151316389e-03f, 2.164070532e-03f, 2.176820274e-03f, 2.189565593e-03f, 2.202306468e-03f, 2.215042876e-03f, 2.227774795e-03f, 2.240502205e-03f,
+2.253225082e-03f, 2.265943406e-03f, 2.278657155e-03f, 2.291366307e-03f, 2.304070840e-03f, 2.316770733e-03f, 2.329465963e-03f, 2.342156510e-03f, 2.354842351e-03f, 2.367523465e-03f,
+2.380199830e-03f, 2.392871424e-03f, 2.405538227e-03f, 2.418200215e-03f, 2.430857369e-03f, 2.443509665e-03f, 2.456157082e-03f, 2.468799599e-03f, 2.481437195e-03f, 2.494069847e-03f,
+2.506697534e-03f, 2.519320235e-03f, 2.531937927e-03f, 2.544550590e-03f, 2.557158202e-03f, 2.569760741e-03f, 2.582358186e-03f, 2.594950515e-03f, 2.607537707e-03f, 2.620119741e-03f,
+2.632696594e-03f, 2.645268246e-03f, 2.657834675e-03f, 2.670395859e-03f, 2.682951777e-03f, 2.695502409e-03f, 2.708047731e-03f, 2.720587723e-03f, 2.733122364e-03f, 2.745651632e-03f,
+2.758175506e-03f, 2.770693964e-03f, 2.783206985e-03f, 2.795714548e-03f, 2.808216631e-03f, 2.820713214e-03f, 2.833204274e-03f, 2.845689791e-03f, 2.858169742e-03f, 2.870644108e-03f,
+2.883112867e-03f, 2.895575996e-03f, 2.908033477e-03f, 2.920485286e-03f, 2.932931402e-03f, 2.945371806e-03f, 2.957806474e-03f, 2.970235387e-03f, 2.982658523e-03f, 2.995075860e-03f,
+3.007487378e-03f, 3.019893056e-03f, 3.032292872e-03f, 3.044686805e-03f, 3.057074835e-03f, 3.069456939e-03f, 3.081833098e-03f, 3.094203289e-03f, 3.106567493e-03f, 3.118925687e-03f,
+3.131277851e-03f, 3.143623963e-03f, 3.155964003e-03f, 3.168297950e-03f, 3.180625783e-03f, 3.192947481e-03f, 3.205263022e-03f, 3.217572386e-03f, 3.229875552e-03f, 3.242172499e-03f,
+3.254463206e-03f, 3.266747652e-03f, 3.279025816e-03f, 3.291297677e-03f, 3.303563215e-03f, 3.315822409e-03f, 3.328075237e-03f, 3.340321679e-03f, 3.352561714e-03f, 3.364795322e-03f,
+3.377022481e-03f, 3.389243170e-03f, 3.401457370e-03f, 3.413665058e-03f, 3.425866215e-03f, 3.438060820e-03f, 3.450248851e-03f, 3.462430289e-03f, 3.474605112e-03f, 3.486773300e-03f,
+3.498934832e-03f, 3.511089687e-03f, 3.523237846e-03f, 3.535379286e-03f, 3.547513988e-03f, 3.559641931e-03f, 3.571763094e-03f, 3.583877457e-03f, 3.595984999e-03f, 3.608085700e-03f,
+3.620179538e-03f, 3.632266494e-03f, 3.644346548e-03f, 3.656419677e-03f, 3.668485863e-03f, 3.680545084e-03f, 3.692597320e-03f, 3.704642550e-03f, 3.716680755e-03f, 3.728711913e-03f,
+3.740736004e-03f, 3.752753009e-03f, 3.764762906e-03f, 3.776765674e-03f, 3.788761295e-03f, 3.800749747e-03f, 3.812731010e-03f, 3.824705063e-03f, 3.836671887e-03f, 3.848631461e-03f,
+3.860583765e-03f, 3.872528778e-03f, 3.884466481e-03f, 3.896396852e-03f, 3.908319872e-03f, 3.920235521e-03f, 3.932143778e-03f, 3.944044624e-03f, 3.955938037e-03f, 3.967823998e-03f,
+3.979702487e-03f, 3.991573483e-03f, 4.003436967e-03f, 4.015292918e-03f, 4.027141316e-03f, 4.038982142e-03f, 4.050815374e-03f, 4.062640994e-03f, 4.074458980e-03f, 4.086269314e-03f,
+4.098071974e-03f, 4.109866942e-03f, 4.121654196e-03f, 4.133433717e-03f, 4.145205486e-03f, 4.156969482e-03f, 4.168725685e-03f, 4.180474075e-03f, 4.192214632e-03f, 4.203947338e-03f,
+4.215672170e-03f, 4.227389111e-03f, 4.239098140e-03f, 4.250799237e-03f, 4.262492382e-03f, 4.274177556e-03f, 4.285854739e-03f, 4.297523910e-03f, 4.309185051e-03f, 4.320838142e-03f,
+4.332483163e-03f, 4.344120093e-03f, 4.355748914e-03f, 4.367369606e-03f, 4.378982150e-03f, 4.390586524e-03f, 4.402182711e-03f, 4.413770690e-03f, 4.425350441e-03f, 4.436921946e-03f,
+4.448485184e-03f, 4.460040136e-03f, 4.471586783e-03f, 4.483125105e-03f, 4.494655082e-03f, 4.506176695e-03f, 4.517689924e-03f, 4.529194751e-03f, 4.540691155e-03f, 4.552179117e-03f,
+4.563658618e-03f, 4.575129639e-03f, 4.586592159e-03f, 4.598046160e-03f, 4.609491623e-03f, 4.620928527e-03f, 4.632356854e-03f, 4.643776584e-03f, 4.655187698e-03f, 4.666590178e-03f,
+4.677984002e-03f, 4.689369153e-03f, 4.700745611e-03f, 4.712113357e-03f, 4.723472371e-03f, 4.734822636e-03f, 4.746164130e-03f, 4.757496836e-03f, 4.768820733e-03f, 4.780135804e-03f,
+4.791442029e-03f, 4.802739388e-03f, 4.814027863e-03f, 4.825307435e-03f, 4.836578085e-03f, 4.847839793e-03f, 4.859092541e-03f, 4.870336310e-03f, 4.881571080e-03f, 4.892796833e-03f,
+4.904013551e-03f, 4.915221213e-03f, 4.926419801e-03f, 4.937609296e-03f, 4.948789680e-03f, 4.959960934e-03f, 4.971123038e-03f, 4.982275973e-03f, 4.993419722e-03f, 5.004554266e-03f,
+5.015679584e-03f, 5.026795660e-03f, 5.037902474e-03f, 5.049000007e-03f, 5.060088240e-03f, 5.071167156e-03f, 5.082236735e-03f, 5.093296959e-03f, 5.104347808e-03f, 5.115389266e-03f,
+5.126421312e-03f, 5.137443928e-03f, 5.148457097e-03f, 5.159460798e-03f, 5.170455014e-03f, 5.181439727e-03f, 5.192414917e-03f, 5.203380566e-03f, 5.214336656e-03f, 5.225283168e-03f,
+5.236220085e-03f, 5.247147387e-03f, 5.258065056e-03f, 5.268973074e-03f, 5.279871422e-03f, 5.290760083e-03f, 5.301639037e-03f, 5.312508267e-03f, 5.323367754e-03f, 5.334217480e-03f,
+5.345057427e-03f, 5.355887577e-03f, 5.366707911e-03f, 5.377518411e-03f, 5.388319059e-03f, 5.399109836e-03f, 5.409890726e-03f, 5.420661709e-03f, 5.431422768e-03f, 5.442173884e-03f,
+5.452915039e-03f, 5.463646216e-03f, 5.474367396e-03f, 5.485078561e-03f, 5.495779694e-03f, 5.506470776e-03f, 5.517151789e-03f, 5.527822716e-03f, 5.538483538e-03f, 5.549134238e-03f,
+5.559774798e-03f, 5.570405200e-03f, 5.581025426e-03f, 5.591635458e-03f, 5.602235278e-03f, 5.612824870e-03f, 5.623404214e-03f, 5.633973293e-03f, 5.644532090e-03f, 5.655080586e-03f,
+5.665618765e-03f, 5.676146608e-03f, 5.686664097e-03f, 5.697171216e-03f, 5.707667946e-03f, 5.718154270e-03f, 5.728630171e-03f, 5.739095630e-03f, 5.749550630e-03f, 5.759995154e-03f,
+5.770429184e-03f, 5.780852703e-03f, 5.791265693e-03f, 5.801668136e-03f, 5.812060017e-03f, 5.822441316e-03f, 5.832812016e-03f, 5.843172101e-03f, 5.853521553e-03f, 5.863860354e-03f,
+5.874188487e-03f, 5.884505936e-03f, 5.894812682e-03f, 5.905108708e-03f, 5.915393998e-03f, 5.925668533e-03f, 5.935932297e-03f, 5.946185273e-03f, 5.956427444e-03f, 5.966658791e-03f,
+5.976879299e-03f, 5.987088950e-03f, 5.997287726e-03f, 6.007475612e-03f, 6.017652590e-03f, 6.027818642e-03f, 6.037973753e-03f, 6.048117904e-03f, 6.058251080e-03f, 6.068373262e-03f,
+6.078484434e-03f, 6.088584580e-03f, 6.098673682e-03f, 6.108751724e-03f, 6.118818688e-03f, 6.128874558e-03f, 6.138919317e-03f, 6.148952948e-03f, 6.158975434e-03f, 6.168986760e-03f,
+6.178986907e-03f, 6.188975860e-03f, 6.198953601e-03f, 6.208920115e-03f, 6.218875384e-03f, 6.228819391e-03f, 6.238752121e-03f, 6.248673556e-03f, 6.258583680e-03f, 6.268482477e-03f,
+6.278369929e-03f, 6.288246022e-03f, 6.298110737e-03f, 6.307964058e-03f, 6.317805970e-03f, 6.327636456e-03f, 6.337455498e-03f, 6.347263082e-03f, 6.357059190e-03f, 6.366843807e-03f,
+6.376616915e-03f, 6.386378499e-03f, 6.396128543e-03f, 6.405867029e-03f, 6.415593943e-03f, 6.425309267e-03f, 6.435012986e-03f, 6.444705083e-03f, 6.454385542e-03f, 6.464054348e-03f,
+6.473711483e-03f, 6.483356933e-03f, 6.492990680e-03f, 6.502612709e-03f, 6.512223004e-03f, 6.521821548e-03f, 6.531408327e-03f, 6.540983323e-03f, 6.550546521e-03f, 6.560097906e-03f,
+6.569637460e-03f, 6.579165169e-03f, 6.588681016e-03f, 6.598184986e-03f, 6.607677062e-03f, 6.617157230e-03f, 6.626625473e-03f, 6.636081775e-03f, 6.645526122e-03f, 6.654958496e-03f,
+6.664378883e-03f, 6.673787266e-03f, 6.683183631e-03f, 6.692567961e-03f, 6.701940241e-03f, 6.711300455e-03f, 6.720648589e-03f, 6.729984625e-03f, 6.739308549e-03f, 6.748620346e-03f,
+6.757920000e-03f, 6.767207495e-03f, 6.776482816e-03f, 6.785745947e-03f, 6.794996874e-03f, 6.804235581e-03f, 6.813462052e-03f, 6.822676272e-03f, 6.831878227e-03f, 6.841067900e-03f,
+6.850245276e-03f, 6.859410341e-03f, 6.868563079e-03f, 6.877703475e-03f, 6.886831513e-03f, 6.895947180e-03f, 6.905050458e-03f, 6.914141334e-03f, 6.923219792e-03f, 6.932285818e-03f,
+6.941339396e-03f, 6.950380511e-03f, 6.959409148e-03f, 6.968425293e-03f, 6.977428930e-03f, 6.986420045e-03f, 6.995398622e-03f, 7.004364647e-03f, 7.013318105e-03f, 7.022258982e-03f,
+7.031187261e-03f, 7.040102929e-03f, 7.049005971e-03f, 7.057896371e-03f, 7.066774117e-03f, 7.075639191e-03f, 7.084491581e-03f, 7.093331272e-03f, 7.102158248e-03f, 7.110972495e-03f,
+7.119773998e-03f, 7.128562744e-03f, 7.137338718e-03f, 7.146101904e-03f, 7.154852289e-03f, 7.163589858e-03f, 7.172314597e-03f, 7.181026490e-03f, 7.189725525e-03f, 7.198411687e-03f,
+7.207084960e-03f, 7.215745331e-03f, 7.224392786e-03f, 7.233027310e-03f, 7.241648890e-03f, 7.250257510e-03f, 7.258853156e-03f, 7.267435815e-03f, 7.276005473e-03f, 7.284562114e-03f,
+7.293105726e-03f, 7.301636293e-03f, 7.310153803e-03f, 7.318658240e-03f, 7.327149591e-03f, 7.335627842e-03f, 7.344092978e-03f, 7.352544987e-03f, 7.360983854e-03f, 7.369409564e-03f,
+7.377822105e-03f, 7.386221463e-03f, 7.394607623e-03f, 7.402980571e-03f, 7.411340295e-03f, 7.419686780e-03f, 7.428020012e-03f, 7.436339978e-03f, 7.444646664e-03f, 7.452940056e-03f,
+7.461220142e-03f, 7.469486906e-03f, 7.477740336e-03f, 7.485980418e-03f, 7.494207138e-03f, 7.502420483e-03f, 7.510620440e-03f, 7.518806995e-03f, 7.526980134e-03f, 7.535139844e-03f,
+7.543286112e-03f, 7.551418924e-03f, 7.559538267e-03f, 7.567644128e-03f, 7.575736493e-03f, 7.583815349e-03f, 7.591880683e-03f, 7.599932481e-03f, 7.607970731e-03f, 7.615995419e-03f,
+7.624006531e-03f, 7.632004056e-03f, 7.639987979e-03f, 7.647958288e-03f, 7.655914969e-03f, 7.663858010e-03f, 7.671787398e-03f, 7.679703119e-03f, 7.687605160e-03f, 7.695493510e-03f,
+7.703368153e-03f, 7.711229079e-03f, 7.719076273e-03f, 7.726909724e-03f, 7.734729418e-03f, 7.742535342e-03f, 7.750327484e-03f, 7.758105831e-03f, 7.765870370e-03f, 7.773621088e-03f,
+7.781357974e-03f, 7.789081013e-03f, 7.796790194e-03f, 7.804485505e-03f, 7.812166931e-03f, 7.819834461e-03f, 7.827488083e-03f, 7.835127783e-03f, 7.842753549e-03f, 7.850365370e-03f,
+7.857963232e-03f, 7.865547123e-03f, 7.873117030e-03f, 7.880672942e-03f, 7.888214846e-03f, 7.895742729e-03f, 7.903256580e-03f, 7.910756386e-03f, 7.918242135e-03f, 7.925713814e-03f,
+7.933171412e-03f, 7.940614916e-03f, 7.948044315e-03f, 7.955459595e-03f, 7.962860746e-03f, 7.970247755e-03f, 7.977620609e-03f, 7.984979298e-03f, 7.992323808e-03f, 7.999654129e-03f,
+8.006970247e-03f, 8.014272152e-03f, 8.021559831e-03f, 8.028833272e-03f, 8.036092464e-03f, 8.043337395e-03f, 8.050568053e-03f, 8.057784426e-03f, 8.064986502e-03f, 8.072174271e-03f,
+8.079347719e-03f, 8.086506837e-03f, 8.093651610e-03f, 8.100782030e-03f, 8.107898083e-03f, 8.114999758e-03f, 8.122087043e-03f, 8.129159928e-03f, 8.136218401e-03f, 8.143262449e-03f,
+8.150292063e-03f, 8.157307230e-03f, 8.164307938e-03f, 8.171294178e-03f, 8.178265937e-03f, 8.185223204e-03f, 8.192165967e-03f, 8.199094216e-03f, 8.206007940e-03f, 8.212907126e-03f,
+8.219791765e-03f, 8.226661844e-03f, 8.233517353e-03f, 8.240358281e-03f, 8.247184616e-03f, 8.253996348e-03f, 8.260793465e-03f, 8.267575956e-03f, 8.274343811e-03f, 8.281097019e-03f,
+8.287835569e-03f, 8.294559449e-03f, 8.301268649e-03f, 8.307963158e-03f, 8.314642966e-03f, 8.321308061e-03f, 8.327958433e-03f, 8.334594071e-03f, 8.341214964e-03f, 8.347821102e-03f,
+8.354412474e-03f, 8.360989070e-03f, 8.367550878e-03f, 8.374097888e-03f, 8.380630090e-03f, 8.387147473e-03f, 8.393650027e-03f, 8.400137741e-03f, 8.406610605e-03f, 8.413068609e-03f,
+8.419511741e-03f, 8.425939991e-03f, 8.432353351e-03f, 8.438751807e-03f, 8.445135352e-03f, 8.451503974e-03f, 8.457857663e-03f, 8.464196410e-03f, 8.470520203e-03f, 8.476829032e-03f,
+8.483122888e-03f, 8.489401761e-03f, 8.495665640e-03f, 8.501914515e-03f, 8.508148376e-03f, 8.514367214e-03f, 8.520571018e-03f, 8.526759779e-03f, 8.532933486e-03f, 8.539092129e-03f,
+8.545235699e-03f, 8.551364186e-03f, 8.557477580e-03f, 8.563575872e-03f, 8.569659051e-03f, 8.575727108e-03f, 8.581780032e-03f, 8.587817816e-03f, 8.593840448e-03f, 8.599847919e-03f,
+8.605840220e-03f, 8.611817341e-03f, 8.617779272e-03f, 8.623726004e-03f, 8.629657528e-03f, 8.635573833e-03f, 8.641474912e-03f, 8.647360753e-03f, 8.653231348e-03f, 8.659086687e-03f,
+8.664926762e-03f, 8.670751562e-03f, 8.676561079e-03f, 8.682355304e-03f, 8.688134226e-03f, 8.693897837e-03f, 8.699646128e-03f, 8.705379089e-03f, 8.711096712e-03f, 8.716798987e-03f,
+8.722485905e-03f, 8.728157458e-03f, 8.733813636e-03f, 8.739454430e-03f, 8.745079832e-03f, 8.750689832e-03f, 8.756284421e-03f, 8.761863591e-03f, 8.767427333e-03f, 8.772975638e-03f,
+8.778508497e-03f, 8.784025902e-03f, 8.789527843e-03f, 8.795014312e-03f, 8.800485301e-03f, 8.805940800e-03f, 8.811380801e-03f, 8.816805296e-03f, 8.822214275e-03f, 8.827607731e-03f,
+8.832985655e-03f, 8.838348038e-03f, 8.843694872e-03f, 8.849026149e-03f, 8.854341859e-03f, 8.859641995e-03f, 8.864926549e-03f, 8.870195511e-03f, 8.875448874e-03f, 8.880686630e-03f,
+8.885908769e-03f, 8.891115285e-03f, 8.896306168e-03f, 8.901481411e-03f, 8.906641006e-03f, 8.911784943e-03f, 8.916913216e-03f, 8.922025817e-03f, 8.927122736e-03f, 8.932203967e-03f,
+8.937269501e-03f, 8.942319331e-03f, 8.947353447e-03f, 8.952371844e-03f, 8.957374512e-03f, 8.962361443e-03f, 8.967332631e-03f, 8.972288067e-03f, 8.977227744e-03f, 8.982151653e-03f,
+8.987059787e-03f, 8.991952139e-03f, 8.996828701e-03f, 9.001689465e-03f, 9.006534423e-03f, 9.011363569e-03f, 9.016176894e-03f, 9.020974391e-03f, 9.025756052e-03f, 9.030521871e-03f,
+9.035271839e-03f, 9.040005950e-03f, 9.044724196e-03f, 9.049426569e-03f, 9.054113063e-03f, 9.058783669e-03f, 9.063438382e-03f, 9.068077193e-03f, 9.072700095e-03f, 9.077307082e-03f,
+9.081898146e-03f, 9.086473279e-03f, 9.091032476e-03f, 9.095575728e-03f, 9.100103029e-03f, 9.104614372e-03f, 9.109109750e-03f, 9.113589156e-03f, 9.118052583e-03f, 9.122500024e-03f,
+9.126931472e-03f, 9.131346920e-03f, 9.135746362e-03f, 9.140129791e-03f, 9.144497201e-03f, 9.148848583e-03f, 9.153183932e-03f, 9.157503241e-03f, 9.161806504e-03f, 9.166093713e-03f,
+9.170364863e-03f, 9.174619946e-03f, 9.178858956e-03f, 9.183081887e-03f, 9.187288733e-03f, 9.191479486e-03f, 9.195654140e-03f, 9.199812689e-03f, 9.203955127e-03f, 9.208081447e-03f,
+9.212191643e-03f, 9.216285709e-03f, 9.220363638e-03f, 9.224425425e-03f, 9.228471063e-03f, 9.232500545e-03f, 9.236513867e-03f, 9.240511021e-03f, 9.244492001e-03f, 9.248456803e-03f,
+9.252405419e-03f, 9.256337843e-03f, 9.260254070e-03f, 9.264154094e-03f, 9.268037909e-03f, 9.271905508e-03f, 9.275756887e-03f, 9.279592039e-03f, 9.283410958e-03f, 9.287213639e-03f,
+9.291000077e-03f, 9.294770264e-03f, 9.298524196e-03f, 9.302261867e-03f, 9.305983271e-03f, 9.309688404e-03f, 9.313377258e-03f, 9.317049829e-03f, 9.320706111e-03f, 9.324346099e-03f,
+9.327969787e-03f, 9.331577170e-03f, 9.335168242e-03f, 9.338742999e-03f, 9.342301434e-03f, 9.345843543e-03f, 9.349369320e-03f, 9.352878759e-03f, 9.356371857e-03f, 9.359848607e-03f,
+9.363309004e-03f, 9.366753044e-03f, 9.370180720e-03f, 9.373592029e-03f, 9.376986964e-03f, 9.380365522e-03f, 9.383727697e-03f, 9.387073483e-03f, 9.390402877e-03f, 9.393715873e-03f,
+9.397012466e-03f, 9.400292651e-03f, 9.403556424e-03f, 9.406803780e-03f, 9.410034714e-03f, 9.413249222e-03f, 9.416447298e-03f, 9.419628938e-03f, 9.422794137e-03f, 9.425942891e-03f,
+9.429075195e-03f, 9.432191045e-03f, 9.435290436e-03f, 9.438373363e-03f, 9.441439822e-03f, 9.444489809e-03f, 9.447523319e-03f, 9.450540347e-03f, 9.453540891e-03f, 9.456524944e-03f,
+9.459492503e-03f, 9.462443563e-03f, 9.465378121e-03f, 9.468296172e-03f, 9.471197711e-03f, 9.474082735e-03f, 9.476951240e-03f, 9.479803221e-03f, 9.482638675e-03f, 9.485457597e-03f,
+9.488259983e-03f, 9.491045830e-03f, 9.493815133e-03f, 9.496567888e-03f, 9.499304092e-03f, 9.502023741e-03f, 9.504726830e-03f, 9.507413357e-03f, 9.510083317e-03f, 9.512736706e-03f,
+9.515373521e-03f, 9.517993758e-03f, 9.520597413e-03f, 9.523184483e-03f, 9.525754964e-03f, 9.528308853e-03f, 9.530846145e-03f, 9.533366838e-03f, 9.535870928e-03f, 9.538358412e-03f,
+9.540829285e-03f, 9.543283545e-03f, 9.545721189e-03f, 9.548142212e-03f, 9.550546612e-03f, 9.552934385e-03f, 9.555305528e-03f, 9.557660038e-03f, 9.559997912e-03f, 9.562319145e-03f,
+9.564623737e-03f, 9.566911682e-03f, 9.569182978e-03f, 9.571437622e-03f, 9.573675611e-03f, 9.575896942e-03f, 9.578101612e-03f, 9.580289618e-03f, 9.582460957e-03f, 9.584615626e-03f,
+9.586753622e-03f, 9.588874943e-03f, 9.590979586e-03f, 9.593067547e-03f, 9.595138825e-03f, 9.597193416e-03f, 9.599231317e-03f, 9.601252527e-03f, 9.603257043e-03f, 9.605244861e-03f,
+9.607215979e-03f, 9.609170395e-03f, 9.611108107e-03f, 9.613029111e-03f, 9.614933406e-03f, 9.616820988e-03f, 9.618691856e-03f, 9.620546006e-03f, 9.622383438e-03f, 9.624204148e-03f,
+9.626008134e-03f, 9.627795394e-03f, 9.629565926e-03f, 9.631319727e-03f, 9.633056796e-03f, 9.634777130e-03f, 9.636480727e-03f, 9.638167584e-03f, 9.639837701e-03f, 9.641491075e-03f,
+9.643127704e-03f, 9.644747585e-03f, 9.646350718e-03f, 9.647937100e-03f, 9.649506729e-03f, 9.651059603e-03f, 9.652595721e-03f, 9.654115081e-03f, 9.655617681e-03f, 9.657103519e-03f,
+9.658572593e-03f, 9.660024903e-03f, 9.661460446e-03f, 9.662879221e-03f, 9.664281226e-03f, 9.665666459e-03f, 9.667034919e-03f, 9.668386605e-03f, 9.669721515e-03f, 9.671039647e-03f,
+9.672341001e-03f, 9.673625574e-03f, 9.674893366e-03f, 9.676144375e-03f, 9.677378600e-03f, 9.678596039e-03f, 9.679796692e-03f, 9.680980557e-03f, 9.682147633e-03f, 9.683297918e-03f,
+9.684431412e-03f, 9.685548114e-03f, 9.686648023e-03f, 9.687731136e-03f, 9.688797455e-03f, 9.689846977e-03f, 9.690879701e-03f, 9.691895627e-03f, 9.692894754e-03f, 9.693877080e-03f,
+9.694842606e-03f, 9.695791330e-03f, 9.696723252e-03f, 9.697638370e-03f, 9.698536684e-03f, 9.699418194e-03f, 9.700282898e-03f, 9.701130797e-03f, 9.701961888e-03f, 9.702776173e-03f,
+9.703573650e-03f, 9.704354319e-03f, 9.705118180e-03f, 9.705865231e-03f, 9.706595473e-03f, 9.707308905e-03f, 9.708005526e-03f, 9.708685337e-03f, 9.709348337e-03f, 9.709994526e-03f,
+9.710623904e-03f, 9.711236470e-03f, 9.711832224e-03f, 9.712411166e-03f, 9.712973296e-03f, 9.713518613e-03f, 9.714047119e-03f, 9.714558812e-03f, 9.715053692e-03f, 9.715531760e-03f,
+9.715993016e-03f, 9.716437460e-03f, 9.716865091e-03f, 9.717275911e-03f, 9.717669919e-03f, 9.718047115e-03f, 9.718407499e-03f, 9.718751072e-03f, 9.719077835e-03f, 9.719387786e-03f,
+9.719680928e-03f, 9.719957259e-03f, 9.720216781e-03f, 9.720459494e-03f, 9.720685398e-03f, 9.720894494e-03f, 9.721086782e-03f, 9.721262263e-03f, 9.721420937e-03f, 9.721562805e-03f,
+9.721687868e-03f, 9.721796127e-03f, 9.721887581e-03f, 9.721962232e-03f, 9.722020080e-03f, 9.722061126e-03f, 9.722085371e-03f, 9.722092816e-03f, 9.722083462e-03f, 9.722057309e-03f,
+9.722014359e-03f, 9.721954612e-03f, 9.721878069e-03f, 9.721784732e-03f, 9.721674601e-03f, 9.721547677e-03f, 9.721403962e-03f, 9.721243457e-03f, 9.721066162e-03f, 9.720872080e-03f,
+9.720661210e-03f, 9.720433555e-03f, 9.720189115e-03f, 9.719927892e-03f, 9.719649888e-03f, 9.719355103e-03f, 9.719043539e-03f, 9.718715198e-03f, 9.718370080e-03f, 9.718008187e-03f,
+9.717629521e-03f, 9.717234084e-03f, 9.716821876e-03f, 9.716392900e-03f, 9.715947157e-03f, 9.715484648e-03f, 9.715005375e-03f, 9.714509341e-03f, 9.713996546e-03f, 9.713466993e-03f,
+9.712920683e-03f, 9.712357618e-03f, 9.711777800e-03f, 9.711181231e-03f, 9.710567912e-03f, 9.709937846e-03f, 9.709291034e-03f, 9.708627479e-03f, 9.707947182e-03f, 9.707250146e-03f,
+9.706536373e-03f, 9.705805864e-03f, 9.705058622e-03f, 9.704294649e-03f, 9.703513948e-03f, 9.702716519e-03f, 9.701902367e-03f, 9.701071492e-03f, 9.700223897e-03f, 9.699359585e-03f,
+9.698478558e-03f, 9.697580818e-03f, 9.696666368e-03f, 9.695735210e-03f, 9.694787346e-03f, 9.693822780e-03f, 9.692841513e-03f, 9.691843548e-03f, 9.690828888e-03f, 9.689797536e-03f,
+9.688749493e-03f, 9.687684764e-03f, 9.686603349e-03f, 9.685505253e-03f, 9.684390477e-03f, 9.683259026e-03f, 9.682110900e-03f, 9.680946104e-03f, 9.679764640e-03f, 9.678566512e-03f,
+9.677351721e-03f, 9.676120271e-03f, 9.674872166e-03f, 9.673607407e-03f, 9.672325998e-03f, 9.671027942e-03f, 9.669713243e-03f, 9.668381903e-03f, 9.667033925e-03f, 9.665669313e-03f,
+9.664288070e-03f, 9.662890199e-03f, 9.661475704e-03f, 9.660044587e-03f, 9.658596852e-03f, 9.657132503e-03f, 9.655651542e-03f, 9.654153974e-03f, 9.652639801e-03f, 9.651109027e-03f,
+9.649561656e-03f, 9.647997692e-03f, 9.646417136e-03f, 9.644819994e-03f, 9.643206269e-03f, 9.641575965e-03f, 9.639929085e-03f, 9.638265633e-03f, 9.636585612e-03f, 9.634889027e-03f,
+9.633175881e-03f, 9.631446177e-03f, 9.629699921e-03f, 9.627937116e-03f, 9.626157765e-03f, 9.624361872e-03f, 9.622549443e-03f, 9.620720479e-03f, 9.618874986e-03f, 9.617012968e-03f,
+9.615134428e-03f, 9.613239371e-03f, 9.611327801e-03f, 9.609399722e-03f, 9.607455138e-03f, 9.605494053e-03f, 9.603516472e-03f, 9.601522399e-03f, 9.599511838e-03f, 9.597484793e-03f,
+9.595441269e-03f, 9.593381271e-03f, 9.591304802e-03f, 9.589211867e-03f, 9.587102471e-03f, 9.584976618e-03f, 9.582834312e-03f, 9.580675559e-03f, 9.578500362e-03f, 9.576308726e-03f,
+9.574100657e-03f, 9.571876158e-03f, 9.569635234e-03f, 9.567377890e-03f, 9.565104131e-03f, 9.562813962e-03f, 9.560507387e-03f, 9.558184410e-03f, 9.555845038e-03f, 9.553489275e-03f,
+9.551117126e-03f, 9.548728595e-03f, 9.546323689e-03f, 9.543902410e-03f, 9.541464766e-03f, 9.539010760e-03f, 9.536540399e-03f, 9.534053686e-03f, 9.531550627e-03f, 9.529031228e-03f,
+9.526495493e-03f, 9.523943428e-03f, 9.521375038e-03f, 9.518790329e-03f, 9.516189304e-03f, 9.513571971e-03f, 9.510938334e-03f, 9.508288398e-03f, 9.505622170e-03f, 9.502939654e-03f,
+9.500240856e-03f, 9.497525782e-03f, 9.494794437e-03f, 9.492046826e-03f, 9.489282955e-03f, 9.486502830e-03f, 9.483706457e-03f, 9.480893841e-03f, 9.478064987e-03f, 9.475219902e-03f,
+9.472358591e-03f, 9.469481060e-03f, 9.466587315e-03f, 9.463677362e-03f, 9.460751206e-03f, 9.457808854e-03f, 9.454850311e-03f, 9.451875584e-03f, 9.448884677e-03f, 9.445877598e-03f,
+9.442854353e-03f, 9.439814946e-03f, 9.436759385e-03f, 9.433687676e-03f, 9.430599824e-03f, 9.427495836e-03f, 9.424375718e-03f, 9.421239477e-03f, 9.418087118e-03f, 9.414918648e-03f,
+9.411734073e-03f, 9.408533399e-03f, 9.405316633e-03f, 9.402083781e-03f, 9.398834850e-03f, 9.395569846e-03f, 9.392288776e-03f, 9.388991645e-03f, 9.385678461e-03f, 9.382349230e-03f,
+9.379003959e-03f, 9.375642654e-03f, 9.372265322e-03f, 9.368871970e-03f, 9.365462604e-03f, 9.362037230e-03f, 9.358595857e-03f, 9.355138490e-03f, 9.351665136e-03f, 9.348175802e-03f,
+9.344670495e-03f, 9.341149222e-03f, 9.337611990e-03f, 9.334058806e-03f, 9.330489676e-03f, 9.326904608e-03f, 9.323303608e-03f, 9.319686684e-03f, 9.316053843e-03f, 9.312405092e-03f,
+9.308740437e-03f, 9.305059887e-03f, 9.301363448e-03f, 9.297651128e-03f, 9.293922933e-03f, 9.290178871e-03f, 9.286418950e-03f, 9.282643176e-03f, 9.278851557e-03f, 9.275044100e-03f,
+9.271220813e-03f, 9.267381704e-03f, 9.263526778e-03f, 9.259656045e-03f, 9.255769512e-03f, 9.251867185e-03f, 9.247949073e-03f, 9.244015183e-03f, 9.240065523e-03f, 9.236100101e-03f,
+9.232118924e-03f, 9.228121999e-03f, 9.224109335e-03f, 9.220080939e-03f, 9.216036820e-03f, 9.211976984e-03f, 9.207901439e-03f, 9.203810195e-03f, 9.199703257e-03f, 9.195580635e-03f,
+9.191442337e-03f, 9.187288369e-03f, 9.183118740e-03f, 9.178933459e-03f, 9.174732533e-03f, 9.170515970e-03f, 9.166283779e-03f, 9.162035967e-03f, 9.157772542e-03f, 9.153493514e-03f,
+9.149198889e-03f, 9.144888677e-03f, 9.140562885e-03f, 9.136221522e-03f, 9.131864596e-03f, 9.127492115e-03f, 9.123104088e-03f, 9.118700523e-03f, 9.114281429e-03f, 9.109846814e-03f,
+9.105396686e-03f, 9.100931054e-03f, 9.096449926e-03f, 9.091953311e-03f, 9.087441218e-03f, 9.082913655e-03f, 9.078370631e-03f, 9.073812154e-03f, 9.069238233e-03f, 9.064648877e-03f,
+9.060044094e-03f, 9.055423893e-03f, 9.050788284e-03f, 9.046137274e-03f, 9.041470873e-03f, 9.036789090e-03f, 9.032091933e-03f, 9.027379411e-03f, 9.022651533e-03f, 9.017908309e-03f,
+9.013149746e-03f, 9.008375855e-03f, 9.003586644e-03f, 8.998782122e-03f, 8.993962299e-03f, 8.989127183e-03f, 8.984276784e-03f, 8.979411110e-03f, 8.974530172e-03f, 8.969633978e-03f,
+8.964722537e-03f, 8.959795858e-03f, 8.954853952e-03f, 8.949896827e-03f, 8.944924493e-03f, 8.939936959e-03f, 8.934934234e-03f, 8.929916328e-03f, 8.924883251e-03f, 8.919835011e-03f,
+8.914771619e-03f, 8.909693083e-03f, 8.904599414e-03f, 8.899490621e-03f, 8.894366713e-03f, 8.889227701e-03f, 8.884073593e-03f, 8.878904400e-03f, 8.873720131e-03f, 8.868520796e-03f,
+8.863306405e-03f, 8.858076968e-03f, 8.852832493e-03f, 8.847572992e-03f, 8.842298474e-03f, 8.837008949e-03f, 8.831704427e-03f, 8.826384917e-03f, 8.821050431e-03f, 8.815700976e-03f,
+8.810336565e-03f, 8.804957206e-03f, 8.799562911e-03f, 8.794153688e-03f, 8.788729548e-03f, 8.783290501e-03f, 8.777836558e-03f, 8.772367728e-03f, 8.766884022e-03f, 8.761385450e-03f,
+8.755872022e-03f, 8.750343749e-03f, 8.744800640e-03f, 8.739242707e-03f, 8.733669959e-03f, 8.728082408e-03f, 8.722480062e-03f, 8.716862934e-03f, 8.711231032e-03f, 8.705584369e-03f,
+8.699922953e-03f, 8.694246797e-03f, 8.688555910e-03f, 8.682850303e-03f, 8.677129986e-03f, 8.671394971e-03f, 8.665645268e-03f, 8.659880887e-03f, 8.654101839e-03f, 8.648308136e-03f,
+8.642499787e-03f, 8.636676804e-03f, 8.630839197e-03f, 8.624986978e-03f, 8.619120157e-03f, 8.613238744e-03f, 8.607342752e-03f, 8.601432190e-03f, 8.595507070e-03f, 8.589567403e-03f,
+8.583613200e-03f, 8.577644472e-03f, 8.571661230e-03f, 8.565663484e-03f, 8.559651247e-03f, 8.553624529e-03f, 8.547583341e-03f, 8.541527695e-03f, 8.535457601e-03f, 8.529373072e-03f,
+8.523274118e-03f, 8.517160750e-03f, 8.511032980e-03f, 8.504890820e-03f, 8.498734280e-03f, 8.492563371e-03f, 8.486378106e-03f, 8.480178496e-03f, 8.473964552e-03f, 8.467736286e-03f,
+8.461493709e-03f, 8.455236832e-03f, 8.448965668e-03f, 8.442680227e-03f, 8.436380522e-03f, 8.430066564e-03f, 8.423738365e-03f, 8.417395935e-03f, 8.411039288e-03f, 8.404668435e-03f,
+8.398283387e-03f, 8.391884156e-03f, 8.385470754e-03f, 8.379043193e-03f, 8.372601485e-03f, 8.366145641e-03f, 8.359675673e-03f, 8.353191594e-03f, 8.346693415e-03f, 8.340181148e-03f,
+8.333654805e-03f, 8.327114399e-03f, 8.320559940e-03f, 8.313991442e-03f, 8.307408916e-03f, 8.300812374e-03f, 8.294201829e-03f, 8.287577293e-03f, 8.280938777e-03f, 8.274286295e-03f,
+8.267619857e-03f, 8.260939477e-03f, 8.254245167e-03f, 8.247536939e-03f, 8.240814805e-03f, 8.234078777e-03f, 8.227328869e-03f, 8.220565092e-03f, 8.213787458e-03f, 8.206995981e-03f,
+8.200190673e-03f, 8.193371545e-03f, 8.186538611e-03f, 8.179691883e-03f, 8.172831374e-03f, 8.165957096e-03f, 8.159069062e-03f, 8.152167284e-03f, 8.145251775e-03f, 8.138322548e-03f,
+8.131379615e-03f, 8.124422990e-03f, 8.117452684e-03f, 8.110468710e-03f, 8.103471082e-03f, 8.096459812e-03f, 8.089434913e-03f, 8.082396397e-03f, 8.075344278e-03f, 8.068278569e-03f,
+8.061199282e-03f, 8.054106430e-03f, 8.047000027e-03f, 8.039880085e-03f, 8.032746617e-03f, 8.025599636e-03f, 8.018439156e-03f, 8.011265189e-03f, 8.004077748e-03f, 7.996876847e-03f,
+7.989662499e-03f, 7.982434717e-03f, 7.975193513e-03f, 7.967938902e-03f, 7.960670896e-03f, 7.953389509e-03f, 7.946094754e-03f, 7.938786645e-03f, 7.931465194e-03f, 7.924130414e-03f,
+7.916782320e-03f, 7.909420925e-03f, 7.902046242e-03f, 7.894658284e-03f, 7.887257065e-03f, 7.879842599e-03f, 7.872414898e-03f, 7.864973977e-03f, 7.857519849e-03f, 7.850052527e-03f,
+7.842572025e-03f, 7.835078357e-03f, 7.827571537e-03f, 7.820051577e-03f, 7.812518492e-03f, 7.804972295e-03f, 7.797413000e-03f, 7.789840621e-03f, 7.782255172e-03f, 7.774656666e-03f,
+7.767045117e-03f, 7.759420538e-03f, 7.751782945e-03f, 7.744132350e-03f, 7.736468768e-03f, 7.728792212e-03f, 7.721102696e-03f, 7.713400235e-03f, 7.705684842e-03f, 7.697956531e-03f,
+7.690215317e-03f, 7.682461212e-03f, 7.674694233e-03f, 7.666914391e-03f, 7.659121702e-03f, 7.651316180e-03f, 7.643497839e-03f, 7.635666693e-03f, 7.627822756e-03f, 7.619966042e-03f,
+7.612096566e-03f, 7.604214342e-03f, 7.596319384e-03f, 7.588411706e-03f, 7.580491323e-03f, 7.572558250e-03f, 7.564612499e-03f, 7.556654087e-03f, 7.548683027e-03f, 7.540699333e-03f,
+7.532703021e-03f, 7.524694104e-03f, 7.516672597e-03f, 7.508638515e-03f, 7.500591872e-03f, 7.492532682e-03f, 7.484460961e-03f, 7.476376722e-03f, 7.468279981e-03f, 7.460170752e-03f,
+7.452049050e-03f, 7.443914889e-03f, 7.435768284e-03f, 7.427609250e-03f, 7.419437801e-03f, 7.411253953e-03f, 7.403057719e-03f, 7.394849116e-03f, 7.386628157e-03f, 7.378394858e-03f,
+7.370149233e-03f, 7.361891297e-03f, 7.353621065e-03f, 7.345338553e-03f, 7.337043774e-03f, 7.328736744e-03f, 7.320417479e-03f, 7.312085992e-03f, 7.303742299e-03f, 7.295386415e-03f,
+7.287018356e-03f, 7.278638135e-03f, 7.270245769e-03f, 7.261841272e-03f, 7.253424660e-03f, 7.244995947e-03f, 7.236555149e-03f, 7.228102282e-03f, 7.219637359e-03f, 7.211160397e-03f,
+7.202671411e-03f, 7.194170416e-03f, 7.185657428e-03f, 7.177132461e-03f, 7.168595531e-03f, 7.160046654e-03f, 7.151485845e-03f, 7.142913118e-03f, 7.134328491e-03f, 7.125731977e-03f,
+7.117123593e-03f, 7.108503354e-03f, 7.099871276e-03f, 7.091227374e-03f, 7.082571663e-03f, 7.073904160e-03f, 7.065224879e-03f, 7.056533836e-03f, 7.047831048e-03f, 7.039116529e-03f,
+7.030390296e-03f, 7.021652363e-03f, 7.012902747e-03f, 7.004141463e-03f, 6.995368528e-03f, 6.986583956e-03f, 6.977787764e-03f, 6.968979968e-03f, 6.960160582e-03f, 6.951329624e-03f,
+6.942487109e-03f, 6.933633052e-03f, 6.924767470e-03f, 6.915890379e-03f, 6.907001794e-03f, 6.898101732e-03f, 6.889190208e-03f, 6.880267239e-03f, 6.871332840e-03f, 6.862387027e-03f,
+6.853429817e-03f, 6.844461225e-03f, 6.835481269e-03f, 6.826489962e-03f, 6.817487323e-03f, 6.808473367e-03f, 6.799448110e-03f, 6.790411568e-03f, 6.781363758e-03f, 6.772304695e-03f,
+6.763234396e-03f, 6.754152878e-03f, 6.745060156e-03f, 6.735956247e-03f, 6.726841167e-03f, 6.717714932e-03f, 6.708577559e-03f, 6.699429064e-03f, 6.690269463e-03f, 6.681098774e-03f,
+6.671917011e-03f, 6.662724192e-03f, 6.653520334e-03f, 6.644305452e-03f, 6.635079563e-03f, 6.625842684e-03f, 6.616594831e-03f, 6.607336020e-03f, 6.598066269e-03f, 6.588785594e-03f,
+6.579494011e-03f, 6.570191537e-03f, 6.560878188e-03f, 6.551553982e-03f, 6.542218935e-03f, 6.532873064e-03f, 6.523516385e-03f, 6.514148915e-03f, 6.504770671e-03f, 6.495381669e-03f,
+6.485981927e-03f, 6.476571461e-03f, 6.467150288e-03f, 6.457718425e-03f, 6.448275888e-03f, 6.438822695e-03f, 6.429358862e-03f, 6.419884406e-03f, 6.410399345e-03f, 6.400903694e-03f,
+6.391397472e-03f, 6.381880695e-03f, 6.372353379e-03f, 6.362815543e-03f, 6.353267203e-03f, 6.343708376e-03f, 6.334139079e-03f, 6.324559329e-03f, 6.314969144e-03f, 6.305368539e-03f,
+6.295757534e-03f, 6.286136144e-03f, 6.276504386e-03f, 6.266862279e-03f, 6.257209839e-03f, 6.247547084e-03f, 6.237874029e-03f, 6.228190694e-03f, 6.218497095e-03f, 6.208793249e-03f,
+6.199079174e-03f, 6.189354887e-03f, 6.179620405e-03f, 6.169875746e-03f, 6.160120927e-03f, 6.150355965e-03f, 6.140580878e-03f, 6.130795683e-03f, 6.121000398e-03f, 6.111195039e-03f,
+6.101379626e-03f, 6.091554174e-03f, 6.081718702e-03f, 6.071873226e-03f, 6.062017765e-03f, 6.052152337e-03f, 6.042276957e-03f, 6.032391645e-03f, 6.022496418e-03f, 6.012591293e-03f,
+6.002676288e-03f, 5.992751421e-03f, 5.982816709e-03f, 5.972872170e-03f, 5.962917821e-03f, 5.952953681e-03f, 5.942979767e-03f, 5.932996097e-03f, 5.923002688e-03f, 5.912999559e-03f,
+5.902986726e-03f, 5.892964209e-03f, 5.882932024e-03f, 5.872890190e-03f, 5.862838724e-03f, 5.852777644e-03f, 5.842706969e-03f, 5.832626715e-03f, 5.822536901e-03f, 5.812437546e-03f,
+5.802328665e-03f, 5.792210279e-03f, 5.782082404e-03f, 5.771945059e-03f, 5.761798262e-03f, 5.751642030e-03f, 5.741476383e-03f, 5.731301336e-03f, 5.721116910e-03f, 5.710923122e-03f,
+5.700719989e-03f, 5.690507531e-03f, 5.680285765e-03f, 5.670054709e-03f, 5.659814382e-03f, 5.649564802e-03f, 5.639305986e-03f, 5.629037954e-03f, 5.618760723e-03f, 5.608474311e-03f,
+5.598178737e-03f, 5.587874019e-03f, 5.577560175e-03f, 5.567237224e-03f, 5.556905184e-03f, 5.546564073e-03f, 5.536213910e-03f, 5.525854712e-03f, 5.515486499e-03f, 5.505109288e-03f,
+5.494723099e-03f, 5.484327948e-03f, 5.473923856e-03f, 5.463510840e-03f, 5.453088918e-03f, 5.442658110e-03f, 5.432218433e-03f, 5.421769907e-03f, 5.411312549e-03f, 5.400846379e-03f,
+5.390371414e-03f, 5.379887673e-03f, 5.369395175e-03f, 5.358893939e-03f, 5.348383982e-03f, 5.337865324e-03f, 5.327337984e-03f, 5.316801979e-03f, 5.306257329e-03f, 5.295704052e-03f,
+5.285142166e-03f, 5.274571692e-03f, 5.263992646e-03f, 5.253405049e-03f, 5.242808918e-03f, 5.232204272e-03f, 5.221591131e-03f, 5.210969513e-03f, 5.200339436e-03f, 5.189700920e-03f,
+5.179053983e-03f, 5.168398645e-03f, 5.157734923e-03f, 5.147062838e-03f, 5.136382407e-03f, 5.125693650e-03f, 5.114996585e-03f, 5.104291232e-03f, 5.093577609e-03f, 5.082855735e-03f,
+5.072125630e-03f, 5.061387312e-03f, 5.050640800e-03f, 5.039886113e-03f, 5.029123270e-03f, 5.018352290e-03f, 5.007573193e-03f, 4.996785997e-03f, 4.985990721e-03f, 4.975187385e-03f,
+4.964376006e-03f, 4.953556606e-03f, 4.942729202e-03f, 4.931893814e-03f, 4.921050461e-03f, 4.910199161e-03f, 4.899339935e-03f, 4.888472801e-03f, 4.877597779e-03f, 4.866714888e-03f,
+4.855824146e-03f, 4.844925574e-03f, 4.834019190e-03f, 4.823105013e-03f, 4.812183064e-03f, 4.801253360e-03f, 4.790315922e-03f, 4.779370769e-03f, 4.768417920e-03f, 4.757457394e-03f,
+4.746489211e-03f, 4.735513389e-03f, 4.724529950e-03f, 4.713538910e-03f, 4.702540292e-03f, 4.691534112e-03f, 4.680520391e-03f, 4.669499149e-03f, 4.658470405e-03f, 4.647434177e-03f,
+4.636390487e-03f, 4.625339352e-03f, 4.614280793e-03f, 4.603214829e-03f, 4.592141480e-03f, 4.581060765e-03f, 4.569972703e-03f, 4.558877315e-03f, 4.547774619e-03f, 4.536664635e-03f,
+4.525547384e-03f, 4.514422883e-03f, 4.503291154e-03f, 4.492152215e-03f, 4.481006086e-03f, 4.469852788e-03f, 4.458692338e-03f, 4.447524758e-03f, 4.436350067e-03f, 4.425168284e-03f,
+4.413979429e-03f, 4.402783522e-03f, 4.391580582e-03f, 4.380370630e-03f, 4.369153685e-03f, 4.357929766e-03f, 4.346698894e-03f, 4.335461088e-03f, 4.324216368e-03f, 4.312964754e-03f,
+4.301706265e-03f, 4.290440922e-03f, 4.279168744e-03f, 4.267889751e-03f, 4.256603962e-03f, 4.245311399e-03f, 4.234012080e-03f, 4.222706025e-03f, 4.211393255e-03f, 4.200073789e-03f,
+4.188747647e-03f, 4.177414849e-03f, 4.166075415e-03f, 4.154729364e-03f, 4.143376718e-03f, 4.132017495e-03f, 4.120651716e-03f, 4.109279401e-03f, 4.097900569e-03f, 4.086515241e-03f,
+4.075123437e-03f, 4.063725176e-03f, 4.052320479e-03f, 4.040909366e-03f, 4.029491856e-03f, 4.018067971e-03f, 4.006637729e-03f, 3.995201151e-03f, 3.983758257e-03f, 3.972309068e-03f,
+3.960853602e-03f, 3.949391881e-03f, 3.937923925e-03f, 3.926449753e-03f, 3.914969386e-03f, 3.903482844e-03f, 3.891990146e-03f, 3.880491315e-03f, 3.868986368e-03f, 3.857475327e-03f,
+3.845958212e-03f, 3.834435043e-03f, 3.822905840e-03f, 3.811370624e-03f, 3.799829415e-03f, 3.788282232e-03f, 3.776729097e-03f, 3.765170029e-03f, 3.753605049e-03f, 3.742034176e-03f,
+3.730457433e-03f, 3.718874838e-03f, 3.707286411e-03f, 3.695692175e-03f, 3.684092147e-03f, 3.672486350e-03f, 3.660874803e-03f, 3.649257526e-03f, 3.637634541e-03f, 3.626005867e-03f,
+3.614371525e-03f, 3.602731535e-03f, 3.591085917e-03f, 3.579434692e-03f, 3.567777881e-03f, 3.556115504e-03f, 3.544447580e-03f, 3.532774132e-03f, 3.521095179e-03f, 3.509410741e-03f,
+3.497720839e-03f, 3.486025494e-03f, 3.474324726e-03f, 3.462618555e-03f, 3.450907003e-03f, 3.439190088e-03f, 3.427467833e-03f, 3.415740258e-03f, 3.404007383e-03f, 3.392269228e-03f,
+3.380525815e-03f, 3.368777163e-03f, 3.357023293e-03f, 3.345264227e-03f, 3.333499984e-03f, 3.321730585e-03f, 3.309956051e-03f, 3.298176402e-03f, 3.286391659e-03f, 3.274601842e-03f,
+3.262806973e-03f, 3.251007071e-03f, 3.239202158e-03f, 3.227392254e-03f, 3.215577379e-03f, 3.203757555e-03f, 3.191932802e-03f, 3.180103141e-03f, 3.168268593e-03f, 3.156429177e-03f,
+3.144584915e-03f, 3.132735828e-03f, 3.120881937e-03f, 3.109023261e-03f, 3.097159822e-03f, 3.085291640e-03f, 3.073418737e-03f, 3.061541132e-03f, 3.049658848e-03f, 3.037771904e-03f,
+3.025880321e-03f, 3.013984120e-03f, 3.002083322e-03f, 2.990177948e-03f, 2.978268018e-03f, 2.966353554e-03f, 2.954434576e-03f, 2.942511104e-03f, 2.930583161e-03f, 2.918650766e-03f,
+2.906713940e-03f, 2.894772705e-03f, 2.882827080e-03f, 2.870877088e-03f, 2.858922749e-03f, 2.846964083e-03f, 2.835001112e-03f, 2.823033857e-03f, 2.811062338e-03f, 2.799086576e-03f,
+2.787106592e-03f, 2.775122408e-03f, 2.763134044e-03f, 2.751141520e-03f, 2.739144859e-03f, 2.727144080e-03f, 2.715139206e-03f, 2.703130256e-03f, 2.691117251e-03f, 2.679100214e-03f,
+2.667079164e-03f, 2.655054122e-03f, 2.643025111e-03f, 2.630992149e-03f, 2.618955260e-03f, 2.606914463e-03f, 2.594869779e-03f, 2.582821230e-03f, 2.570768837e-03f, 2.558712620e-03f,
+2.546652601e-03f, 2.534588801e-03f, 2.522521240e-03f, 2.510449940e-03f, 2.498374922e-03f, 2.486296207e-03f, 2.474213816e-03f, 2.462127769e-03f, 2.450038089e-03f, 2.437944796e-03f,
+2.425847910e-03f, 2.413747455e-03f, 2.401643449e-03f, 2.389535915e-03f, 2.377424874e-03f, 2.365310346e-03f, 2.353192353e-03f, 2.341070916e-03f, 2.328946056e-03f, 2.316817794e-03f,
+2.304686151e-03f, 2.292551149e-03f, 2.280412808e-03f, 2.268271150e-03f, 2.256126195e-03f, 2.243977966e-03f, 2.231826483e-03f, 2.219671767e-03f, 2.207513839e-03f, 2.195352721e-03f,
+2.183188434e-03f, 2.171020999e-03f, 2.158850437e-03f, 2.146676769e-03f, 2.134500017e-03f, 2.122320202e-03f, 2.110137344e-03f, 2.097951466e-03f, 2.085762588e-03f, 2.073570731e-03f,
+2.061375917e-03f, 2.049178168e-03f, 2.036977503e-03f, 2.024773945e-03f, 2.012567515e-03f, 2.000358233e-03f, 1.988146122e-03f, 1.975931202e-03f, 1.963713494e-03f, 1.951493021e-03f,
+1.939269803e-03f, 1.927043861e-03f, 1.914815216e-03f, 1.902583891e-03f, 1.890349906e-03f, 1.878113282e-03f, 1.865874041e-03f, 1.853632205e-03f, 1.841387793e-03f, 1.829140828e-03f,
+1.816891331e-03f, 1.804639323e-03f, 1.792384826e-03f, 1.780127860e-03f, 1.767868447e-03f, 1.755606609e-03f, 1.743342367e-03f, 1.731075741e-03f, 1.718806754e-03f, 1.706535427e-03f,
+1.694261780e-03f, 1.681985836e-03f, 1.669707615e-03f, 1.657427139e-03f, 1.645144430e-03f, 1.632859508e-03f, 1.620572395e-03f, 1.608283112e-03f, 1.595991681e-03f, 1.583698123e-03f,
+1.571402460e-03f, 1.559104712e-03f, 1.546804901e-03f, 1.534503048e-03f, 1.522199175e-03f, 1.509893303e-03f, 1.497585454e-03f, 1.485275649e-03f, 1.472963908e-03f, 1.460650254e-03f,
+1.448334709e-03f, 1.436017292e-03f, 1.423698026e-03f, 1.411376933e-03f, 1.399054032e-03f, 1.386729347e-03f, 1.374402898e-03f, 1.362074706e-03f, 1.349744793e-03f, 1.337413181e-03f,
+1.325079891e-03f, 1.312744943e-03f, 1.300408361e-03f, 1.288070164e-03f, 1.275730374e-03f, 1.263389014e-03f, 1.251046103e-03f, 1.238701664e-03f, 1.226355718e-03f, 1.214008287e-03f,
+1.201659391e-03f, 1.189309052e-03f, 1.176957292e-03f, 1.164604132e-03f, 1.152249594e-03f, 1.139893698e-03f, 1.127536466e-03f, 1.115177921e-03f, 1.102818082e-03f, 1.090456972e-03f,
+1.078094612e-03f, 1.065731023e-03f, 1.053366227e-03f, 1.041000245e-03f, 1.028633099e-03f, 1.016264810e-03f, 1.003895399e-03f, 9.915248885e-04f, 9.791532991e-04f, 9.667806526e-04f,
+9.544069702e-04f, 9.420322735e-04f, 9.296565838e-04f, 9.172799227e-04f, 9.049023115e-04f, 8.925237716e-04f, 8.801443246e-04f, 8.677639918e-04f, 8.553827946e-04f, 8.430007546e-04f,
+8.306178931e-04f, 8.182342316e-04f, 8.058497915e-04f, 7.934645942e-04f, 7.810786612e-04f, 7.686920140e-04f, 7.563046739e-04f, 7.439166624e-04f, 7.315280009e-04f, 7.191387109e-04f,
+7.067488138e-04f, 6.943583311e-04f, 6.819672841e-04f, 6.695756944e-04f, 6.571835832e-04f, 6.447909722e-04f, 6.323978827e-04f, 6.200043362e-04f, 6.076103541e-04f, 5.952159577e-04f,
+5.828211687e-04f, 5.704260084e-04f, 5.580304981e-04f, 5.456346595e-04f, 5.332385138e-04f, 5.208420826e-04f, 5.084453873e-04f, 4.960484492e-04f, 4.836512899e-04f, 4.712539307e-04f,
+4.588563931e-04f, 4.464586985e-04f, 4.340608683e-04f, 4.216629240e-04f, 4.092648870e-04f, 3.968667787e-04f, 3.844686206e-04f, 3.720704340e-04f, 3.596722404e-04f, 3.472740612e-04f,
+3.348759178e-04f, 3.224778316e-04f, 3.100798241e-04f, 2.976819167e-04f, 2.852841308e-04f, 2.728864877e-04f, 2.604890090e-04f, 2.480917160e-04f, 2.356946301e-04f, 2.232977728e-04f,
+2.109011654e-04f, 1.985048293e-04f, 1.861087860e-04f, 1.737130568e-04f, 1.613176632e-04f, 1.489226266e-04f, 1.365279683e-04f, 1.241337097e-04f, 1.117398723e-04f, 9.934647736e-05f,
+8.695354636e-05f, 7.456110066e-05f, 6.216916165e-05f, 4.977775070e-05f, 3.738688920e-05f, 2.499659852e-05f, 1.260690006e-05f, 2.178151723e-07f, -1.217063476e-05f, -2.455842837e-05f,
+-3.694554429e-05f, -4.933196115e-05f, -6.171765759e-05f, -7.410261224e-05f, -8.648680375e-05f, -9.887021077e-05f, -1.112528119e-04f, -1.236345859e-04f, -1.360155113e-04f, -1.483955668e-04f,
+-1.607747310e-04f, -1.731529827e-04f, -1.855303004e-04f, -1.979066629e-04f, -2.102820488e-04f, -2.226564368e-04f, -2.350298055e-04f, -2.474021336e-04f, -2.597733999e-04f, -2.721435829e-04f,
+-2.845126613e-04f, -2.968806140e-04f, -3.092474195e-04f, -3.216130565e-04f, -3.339775037e-04f, -3.463407399e-04f, -3.587027437e-04f, -3.710634938e-04f, -3.834229690e-04f, -3.957811480e-04f,
+-4.081380094e-04f, -4.204935320e-04f, -4.328476946e-04f, -4.452004757e-04f, -4.575518543e-04f, -4.699018090e-04f, -4.822503185e-04f, -4.945973615e-04f, -5.069429169e-04f, -5.192869634e-04f,
+-5.316294797e-04f, -5.439704446e-04f, -5.563098368e-04f, -5.686476351e-04f, -5.809838183e-04f, -5.933183651e-04f, -6.056512543e-04f, -6.179824647e-04f, -6.303119751e-04f, -6.426397642e-04f,
+-6.549658109e-04f, -6.672900939e-04f, -6.796125921e-04f, -6.919332841e-04f, -7.042521490e-04f, -7.165691653e-04f, -7.288843121e-04f, -7.411975680e-04f, -7.535089120e-04f, -7.658183227e-04f,
+-7.781257792e-04f, -7.904312602e-04f, -8.027347445e-04f, -8.150362110e-04f, -8.273356386e-04f, -8.396330061e-04f, -8.519282923e-04f, -8.642214762e-04f, -8.765125365e-04f, -8.888014522e-04f,
+-9.010882022e-04f, -9.133727653e-04f, -9.256551205e-04f, -9.379352465e-04f, -9.502131224e-04f, -9.624887270e-04f, -9.747620392e-04f, -9.870330379e-04f, -9.993017021e-04f, -1.011568011e-03f,
+-1.023831943e-03f, -1.036093477e-03f, -1.048352592e-03f, -1.060609267e-03f, -1.072863482e-03f, -1.085115214e-03f, -1.097364444e-03f, -1.109611149e-03f, -1.121855310e-03f, -1.134096904e-03f,
+-1.146335911e-03f, -1.158572310e-03f, -1.170806080e-03f, -1.183037200e-03f, -1.195265649e-03f, -1.207491405e-03f, -1.219714449e-03f, -1.231934758e-03f, -1.244152312e-03f, -1.256367091e-03f,
+-1.268579072e-03f, -1.280788235e-03f, -1.292994560e-03f, -1.305198024e-03f, -1.317398608e-03f, -1.329596290e-03f, -1.341791050e-03f, -1.353982866e-03f, -1.366171717e-03f, -1.378357584e-03f,
+-1.390540443e-03f, -1.402720276e-03f, -1.414897061e-03f, -1.427070777e-03f, -1.439241403e-03f, -1.451408918e-03f, -1.463573302e-03f, -1.475734533e-03f, -1.487892591e-03f, -1.500047456e-03f,
+-1.512199105e-03f, -1.524347518e-03f, -1.536492675e-03f, -1.548634554e-03f, -1.560773136e-03f, -1.572908398e-03f, -1.585040321e-03f, -1.597168883e-03f, -1.609294063e-03f, -1.621415842e-03f,
+-1.633534197e-03f, -1.645649109e-03f, -1.657760557e-03f, -1.669868519e-03f, -1.681972975e-03f, -1.694073905e-03f, -1.706171287e-03f, -1.718265102e-03f, -1.730355327e-03f, -1.742441943e-03f,
+-1.754524929e-03f, -1.766604264e-03f, -1.778679927e-03f, -1.790751898e-03f, -1.802820157e-03f, -1.814884681e-03f, -1.826945452e-03f, -1.839002447e-03f, -1.851055647e-03f, -1.863105031e-03f,
+-1.875150579e-03f, -1.887192268e-03f, -1.899230080e-03f, -1.911263994e-03f, -1.923293988e-03f, -1.935320042e-03f, -1.947342136e-03f, -1.959360249e-03f, -1.971374361e-03f, -1.983384451e-03f,
+-1.995390498e-03f, -2.007392482e-03f, -2.019390382e-03f, -2.031384179e-03f, -2.043373850e-03f, -2.055359377e-03f, -2.067340738e-03f, -2.079317913e-03f, -2.091290881e-03f, -2.103259622e-03f,
+-2.115224116e-03f, -2.127184341e-03f, -2.139140279e-03f, -2.151091907e-03f, -2.163039206e-03f, -2.174982155e-03f, -2.186920735e-03f, -2.198854923e-03f, -2.210784701e-03f, -2.222710048e-03f,
+-2.234630942e-03f, -2.246547365e-03f, -2.258459296e-03f, -2.270366713e-03f, -2.282269598e-03f, -2.294167929e-03f, -2.306061686e-03f, -2.317950849e-03f, -2.329835398e-03f, -2.341715313e-03f,
+-2.353590572e-03f, -2.365461156e-03f, -2.377327044e-03f, -2.389188217e-03f, -2.401044654e-03f, -2.412896335e-03f, -2.424743239e-03f, -2.436585346e-03f, -2.448422636e-03f, -2.460255090e-03f,
+-2.472082686e-03f, -2.483905404e-03f, -2.495723225e-03f, -2.507536128e-03f, -2.519344093e-03f, -2.531147099e-03f, -2.542945128e-03f, -2.554738158e-03f, -2.566526170e-03f, -2.578309142e-03f,
+-2.590087057e-03f, -2.601859892e-03f, -2.613627628e-03f, -2.625390246e-03f, -2.637147724e-03f, -2.648900043e-03f, -2.660647184e-03f, -2.672389125e-03f, -2.684125846e-03f, -2.695857329e-03f,
+-2.707583552e-03f, -2.719304497e-03f, -2.731020142e-03f, -2.742730468e-03f, -2.754435455e-03f, -2.766135082e-03f, -2.777829331e-03f, -2.789518181e-03f, -2.801201612e-03f, -2.812879605e-03f,
+-2.824552138e-03f, -2.836219194e-03f, -2.847880751e-03f, -2.859536789e-03f, -2.871187290e-03f, -2.882832232e-03f, -2.894471597e-03f, -2.906105364e-03f, -2.917733514e-03f, -2.929356026e-03f,
+-2.940972882e-03f, -2.952584060e-03f, -2.964189542e-03f, -2.975789308e-03f, -2.987383338e-03f, -2.998971612e-03f, -3.010554110e-03f, -3.022130813e-03f, -3.033701701e-03f, -3.045266755e-03f,
+-3.056825954e-03f, -3.068379279e-03f, -3.079926710e-03f, -3.091468228e-03f, -3.103003814e-03f, -3.114533446e-03f, -3.126057107e-03f, -3.137574775e-03f, -3.149086433e-03f, -3.160592059e-03f,
+-3.172091635e-03f, -3.183585140e-03f, -3.195072556e-03f, -3.206553863e-03f, -3.218029041e-03f, -3.229498071e-03f, -3.240960933e-03f, -3.252417609e-03f, -3.263868077e-03f, -3.275312319e-03f,
+-3.286750316e-03f, -3.298182047e-03f, -3.309607494e-03f, -3.321026638e-03f, -3.332439458e-03f, -3.343845935e-03f, -3.355246050e-03f, -3.366639784e-03f, -3.378027117e-03f, -3.389408030e-03f,
+-3.400782503e-03f, -3.412150518e-03f, -3.423512055e-03f, -3.434867094e-03f, -3.446215616e-03f, -3.457557603e-03f, -3.468893034e-03f, -3.480221891e-03f, -3.491544154e-03f, -3.502859804e-03f,
+-3.514168822e-03f, -3.525471189e-03f, -3.536766885e-03f, -3.548055892e-03f, -3.559338189e-03f, -3.570613759e-03f, -3.581882581e-03f, -3.593144638e-03f, -3.604399909e-03f, -3.615648375e-03f,
+-3.626890018e-03f, -3.638124818e-03f, -3.649352757e-03f, -3.660573815e-03f, -3.671787973e-03f, -3.682995212e-03f, -3.694195513e-03f, -3.705388858e-03f, -3.716575227e-03f, -3.727754601e-03f,
+-3.738926961e-03f, -3.750092289e-03f, -3.761250565e-03f, -3.772401771e-03f, -3.783545887e-03f, -3.794682895e-03f, -3.805812776e-03f, -3.816935511e-03f, -3.828051081e-03f, -3.839159467e-03f,
+-3.850260651e-03f, -3.861354614e-03f, -3.872441336e-03f, -3.883520799e-03f, -3.894592985e-03f, -3.905657874e-03f, -3.916715448e-03f, -3.927765688e-03f, -3.938808575e-03f, -3.949844091e-03f,
+-3.960872217e-03f, -3.971892934e-03f, -3.982906224e-03f, -3.993912068e-03f, -4.004910447e-03f, -4.015901343e-03f, -4.026884737e-03f, -4.037860611e-03f, -4.048828946e-03f, -4.059789723e-03f,
+-4.070742923e-03f, -4.081688529e-03f, -4.092626522e-03f, -4.103556884e-03f, -4.114479594e-03f, -4.125394637e-03f, -4.136301992e-03f, -4.147201641e-03f, -4.158093567e-03f, -4.168977750e-03f,
+-4.179854172e-03f, -4.190722814e-03f, -4.201583660e-03f, -4.212436689e-03f, -4.223281883e-03f, -4.234119226e-03f, -4.244948697e-03f, -4.255770278e-03f, -4.266583952e-03f, -4.277389700e-03f,
+-4.288187504e-03f, -4.298977346e-03f, -4.309759207e-03f, -4.320533069e-03f, -4.331298914e-03f, -4.342056724e-03f, -4.352806480e-03f, -4.363548165e-03f, -4.374281760e-03f, -4.385007247e-03f,
+-4.395724608e-03f, -4.406433825e-03f, -4.417134880e-03f, -4.427827754e-03f, -4.438512430e-03f, -4.449188890e-03f, -4.459857116e-03f, -4.470517089e-03f, -4.481168792e-03f, -4.491812207e-03f,
+-4.502447315e-03f, -4.513074099e-03f, -4.523692540e-03f, -4.534302622e-03f, -4.544904326e-03f, -4.555497633e-03f, -4.566082527e-03f, -4.576658990e-03f, -4.587227003e-03f, -4.597786548e-03f,
+-4.608337609e-03f, -4.618880166e-03f, -4.629414203e-03f, -4.639939701e-03f, -4.650456644e-03f, -4.660965012e-03f, -4.671464789e-03f, -4.681955956e-03f, -4.692438496e-03f, -4.702912392e-03f,
+-4.713377625e-03f, -4.723834178e-03f, -4.734282034e-03f, -4.744721174e-03f, -4.755151582e-03f, -4.765573239e-03f, -4.775986129e-03f, -4.786390232e-03f, -4.796785533e-03f, -4.807172014e-03f,
+-4.817549656e-03f, -4.827918443e-03f, -4.838278357e-03f, -4.848629380e-03f, -4.858971496e-03f, -4.869304687e-03f, -4.879628935e-03f, -4.889944222e-03f, -4.900250533e-03f, -4.910547849e-03f,
+-4.920836153e-03f, -4.931115427e-03f, -4.941385655e-03f, -4.951646819e-03f, -4.961898901e-03f, -4.972141886e-03f, -4.982375754e-03f, -4.992600490e-03f, -5.002816075e-03f, -5.013022494e-03f,
+-5.023219728e-03f, -5.033407760e-03f, -5.043586573e-03f, -5.053756151e-03f, -5.063916476e-03f, -5.074067531e-03f, -5.084209299e-03f, -5.094341762e-03f, -5.104464905e-03f, -5.114578709e-03f,
+-5.124683159e-03f, -5.134778236e-03f, -5.144863924e-03f, -5.154940206e-03f, -5.165007065e-03f, -5.175064484e-03f, -5.185112446e-03f, -5.195150935e-03f, -5.205179933e-03f, -5.215199424e-03f,
+-5.225209391e-03f, -5.235209817e-03f, -5.245200685e-03f, -5.255181979e-03f, -5.265153681e-03f, -5.275115775e-03f, -5.285068244e-03f, -5.295011072e-03f, -5.304944242e-03f, -5.314867737e-03f,
+-5.324781541e-03f, -5.334685637e-03f, -5.344580008e-03f, -5.354464637e-03f, -5.364339509e-03f, -5.374204606e-03f, -5.384059912e-03f, -5.393905411e-03f, -5.403741086e-03f, -5.413566920e-03f,
+-5.423382898e-03f, -5.433189002e-03f, -5.442985216e-03f, -5.452771524e-03f, -5.462547909e-03f, -5.472314355e-03f, -5.482070845e-03f, -5.491817364e-03f, -5.501553895e-03f, -5.511280421e-03f,
+-5.520996927e-03f, -5.530703395e-03f, -5.540399811e-03f, -5.550086157e-03f, -5.559762417e-03f, -5.569428575e-03f, -5.579084616e-03f, -5.588730522e-03f, -5.598366277e-03f, -5.607991866e-03f,
+-5.617607273e-03f, -5.627212480e-03f, -5.636807473e-03f, -5.646392235e-03f, -5.655966751e-03f, -5.665531003e-03f, -5.675084976e-03f, -5.684628655e-03f, -5.694162023e-03f, -5.703685064e-03f,
+-5.713197762e-03f, -5.722700101e-03f, -5.732192066e-03f, -5.741673641e-03f, -5.751144810e-03f, -5.760605556e-03f, -5.770055865e-03f, -5.779495719e-03f, -5.788925105e-03f, -5.798344005e-03f,
+-5.807752405e-03f, -5.817150287e-03f, -5.826537638e-03f, -5.835914440e-03f, -5.845280679e-03f, -5.854636338e-03f, -5.863981402e-03f, -5.873315856e-03f, -5.882639684e-03f, -5.891952870e-03f,
+-5.901255399e-03f, -5.910547255e-03f, -5.919828423e-03f, -5.929098887e-03f, -5.938358631e-03f, -5.947607641e-03f, -5.956845901e-03f, -5.966073396e-03f, -5.975290109e-03f, -5.984496026e-03f,
+-5.993691132e-03f, -6.002875411e-03f, -6.012048847e-03f, -6.021211426e-03f, -6.030363131e-03f, -6.039503949e-03f, -6.048633864e-03f, -6.057752859e-03f, -6.066860922e-03f, -6.075958035e-03f,
+-6.085044184e-03f, -6.094119354e-03f, -6.103183529e-03f, -6.112236695e-03f, -6.121278837e-03f, -6.130309938e-03f, -6.139329986e-03f, -6.148338963e-03f, -6.157336856e-03f, -6.166323650e-03f,
+-6.175299329e-03f, -6.184263878e-03f, -6.193217283e-03f, -6.202159528e-03f, -6.211090600e-03f, -6.220010482e-03f, -6.228919160e-03f, -6.237816620e-03f, -6.246702846e-03f, -6.255577824e-03f,
+-6.264441539e-03f, -6.273293976e-03f, -6.282135120e-03f, -6.290964957e-03f, -6.299783473e-03f, -6.308590652e-03f, -6.317386479e-03f, -6.326170941e-03f, -6.334944022e-03f, -6.343705709e-03f,
+-6.352455986e-03f, -6.361194839e-03f, -6.369922253e-03f, -6.378638214e-03f, -6.387342708e-03f, -6.396035720e-03f, -6.404717235e-03f, -6.413387240e-03f, -6.422045719e-03f, -6.430692658e-03f,
+-6.439328044e-03f, -6.447951862e-03f, -6.456564096e-03f, -6.465164734e-03f, -6.473753761e-03f, -6.482331163e-03f, -6.490896925e-03f, -6.499451033e-03f, -6.507993473e-03f, -6.516524231e-03f,
+-6.525043293e-03f, -6.533550644e-03f, -6.542046271e-03f, -6.550530159e-03f, -6.559002294e-03f, -6.567462663e-03f, -6.575911251e-03f, -6.584348045e-03f, -6.592773030e-03f, -6.601186192e-03f,
+-6.609587517e-03f, -6.617976993e-03f, -6.626354603e-03f, -6.634720336e-03f, -6.643074177e-03f, -6.651416111e-03f, -6.659746126e-03f, -6.668064208e-03f, -6.676370342e-03f, -6.684664515e-03f,
+-6.692946714e-03f, -6.701216924e-03f, -6.709475133e-03f, -6.717721325e-03f, -6.725955488e-03f, -6.734177608e-03f, -6.742387672e-03f, -6.750585666e-03f, -6.758771576e-03f, -6.766945388e-03f,
+-6.775107090e-03f, -6.783256668e-03f, -6.791394108e-03f, -6.799519397e-03f, -6.807632522e-03f, -6.815733469e-03f, -6.823822224e-03f, -6.831898775e-03f, -6.839963108e-03f, -6.848015210e-03f,
+-6.856055067e-03f, -6.864082667e-03f, -6.872097995e-03f, -6.880101039e-03f, -6.888091786e-03f, -6.896070222e-03f, -6.904036334e-03f, -6.911990109e-03f, -6.919931535e-03f, -6.927860597e-03f,
+-6.935777283e-03f, -6.943681580e-03f, -6.951573474e-03f, -6.959452954e-03f, -6.967320005e-03f, -6.975174614e-03f, -6.983016770e-03f, -6.990846459e-03f, -6.998663668e-03f, -7.006468384e-03f,
+-7.014260594e-03f, -7.022040286e-03f, -7.029807446e-03f, -7.037562063e-03f, -7.045304123e-03f, -7.053033613e-03f, -7.060750521e-03f, -7.068454834e-03f, -7.076146539e-03f, -7.083825625e-03f,
+-7.091492077e-03f, -7.099145884e-03f, -7.106787033e-03f, -7.114415511e-03f, -7.122031306e-03f, -7.129634405e-03f, -7.137224797e-03f, -7.144802468e-03f, -7.152367405e-03f, -7.159919598e-03f,
+-7.167459032e-03f, -7.174985696e-03f, -7.182499578e-03f, -7.190000665e-03f, -7.197488944e-03f, -7.204964404e-03f, -7.212427033e-03f, -7.219876817e-03f, -7.227313745e-03f, -7.234737805e-03f,
+-7.242148984e-03f, -7.249547270e-03f, -7.256932652e-03f, -7.264305117e-03f, -7.271664652e-03f, -7.279011247e-03f, -7.286344889e-03f, -7.293665565e-03f, -7.300973265e-03f, -7.308267975e-03f,
+-7.315549684e-03f, -7.322818381e-03f, -7.330074052e-03f, -7.337316687e-03f, -7.344546274e-03f, -7.351762800e-03f, -7.358966254e-03f, -7.366156624e-03f, -7.373333898e-03f, -7.380498066e-03f,
+-7.387649113e-03f, -7.394787031e-03f, -7.401911805e-03f, -7.409023426e-03f, -7.416121881e-03f, -7.423207158e-03f, -7.430279247e-03f, -7.437338136e-03f, -7.444383812e-03f, -7.451416265e-03f,
+-7.458435483e-03f, -7.465441455e-03f, -7.472434169e-03f, -7.479413614e-03f, -7.486379778e-03f, -7.493332650e-03f, -7.500272219e-03f, -7.507198474e-03f, -7.514111402e-03f, -7.521010994e-03f,
+-7.527897237e-03f, -7.534770121e-03f, -7.541629634e-03f, -7.548475765e-03f, -7.555308503e-03f, -7.562127837e-03f, -7.568933755e-03f, -7.575726247e-03f, -7.582505302e-03f, -7.589270908e-03f,
+-7.596023055e-03f, -7.602761731e-03f, -7.609486926e-03f, -7.616198629e-03f, -7.622896829e-03f, -7.629581514e-03f, -7.636252675e-03f, -7.642910300e-03f, -7.649554378e-03f, -7.656184899e-03f,
+-7.662801852e-03f, -7.669405225e-03f, -7.675995010e-03f, -7.682571194e-03f, -7.689133767e-03f, -7.695682718e-03f, -7.702218037e-03f, -7.708739714e-03f, -7.715247737e-03f, -7.721742096e-03f,
+-7.728222781e-03f, -7.734689780e-03f, -7.741143085e-03f, -7.747582683e-03f, -7.754008565e-03f, -7.760420721e-03f, -7.766819139e-03f, -7.773203810e-03f, -7.779574724e-03f, -7.785931869e-03f,
+-7.792275236e-03f, -7.798604814e-03f, -7.804920594e-03f, -7.811222564e-03f, -7.817510716e-03f, -7.823785038e-03f, -7.830045520e-03f, -7.836292153e-03f, -7.842524926e-03f, -7.848743829e-03f,
+-7.854948853e-03f, -7.861139987e-03f, -7.867317221e-03f, -7.873480545e-03f, -7.879629950e-03f, -7.885765425e-03f, -7.891886960e-03f, -7.897994547e-03f, -7.904088174e-03f, -7.910167832e-03f,
+-7.916233511e-03f, -7.922285202e-03f, -7.928322894e-03f, -7.934346578e-03f, -7.940356245e-03f, -7.946351884e-03f, -7.952333486e-03f, -7.958301042e-03f, -7.964254541e-03f, -7.970193975e-03f,
+-7.976119333e-03f, -7.982030607e-03f, -7.987927786e-03f, -7.993810861e-03f, -7.999679823e-03f, -8.005534662e-03f, -8.011375370e-03f, -8.017201935e-03f, -8.023014351e-03f, -8.028812605e-03f,
+-8.034596691e-03f, -8.040366598e-03f, -8.046122317e-03f, -8.051863839e-03f, -8.057591154e-03f, -8.063304254e-03f, -8.069003129e-03f, -8.074687771e-03f, -8.080358170e-03f, -8.086014317e-03f,
+-8.091656203e-03f, -8.097283818e-03f, -8.102897155e-03f, -8.108496204e-03f, -8.114080956e-03f, -8.119651403e-03f, -8.125207534e-03f, -8.130749342e-03f, -8.136276818e-03f, -8.141789952e-03f,
+-8.147288736e-03f, -8.152773162e-03f, -8.158243220e-03f, -8.163698902e-03f, -8.169140199e-03f, -8.174567102e-03f, -8.179979603e-03f, -8.185377693e-03f, -8.190761364e-03f, -8.196130606e-03f,
+-8.201485412e-03f, -8.206825773e-03f, -8.212151681e-03f, -8.217463126e-03f, -8.222760101e-03f, -8.228042597e-03f, -8.233310606e-03f, -8.238564119e-03f, -8.243803128e-03f, -8.249027625e-03f,
+-8.254237602e-03f, -8.259433049e-03f, -8.264613960e-03f, -8.269780325e-03f, -8.274932137e-03f, -8.280069387e-03f, -8.285192068e-03f, -8.290300171e-03f, -8.295393688e-03f, -8.300472610e-03f,
+-8.305536931e-03f, -8.310586642e-03f, -8.315621735e-03f, -8.320642202e-03f, -8.325648035e-03f, -8.330639226e-03f, -8.335615768e-03f, -8.340577652e-03f, -8.345524871e-03f, -8.350457417e-03f,
+-8.355375281e-03f, -8.360278458e-03f, -8.365166938e-03f, -8.370040713e-03f, -8.374899777e-03f, -8.379744122e-03f, -8.384573740e-03f, -8.389388623e-03f, -8.394188764e-03f, -8.398974156e-03f,
+-8.403744790e-03f, -8.408500659e-03f, -8.413241757e-03f, -8.417968075e-03f, -8.422679606e-03f, -8.427376342e-03f, -8.432058277e-03f, -8.436725402e-03f, -8.441377712e-03f, -8.446015197e-03f,
+-8.450637852e-03f, -8.455245669e-03f, -8.459838640e-03f, -8.464416759e-03f, -8.468980018e-03f, -8.473528410e-03f, -8.478061928e-03f, -8.482580566e-03f, -8.487084315e-03f, -8.491573170e-03f,
+-8.496047122e-03f, -8.500506165e-03f, -8.504950293e-03f, -8.509379497e-03f, -8.513793772e-03f, -8.518193110e-03f, -8.522577505e-03f, -8.526946949e-03f, -8.531301437e-03f, -8.535640960e-03f,
+-8.539965513e-03f, -8.544275089e-03f, -8.548569681e-03f, -8.552849282e-03f, -8.557113887e-03f, -8.561363487e-03f, -8.565598077e-03f, -8.569817650e-03f, -8.574022199e-03f, -8.578211719e-03f,
+-8.582386202e-03f, -8.586545642e-03f, -8.590690033e-03f, -8.594819368e-03f, -8.598933642e-03f, -8.603032846e-03f, -8.607116977e-03f, -8.611186026e-03f, -8.615239988e-03f, -8.619278856e-03f,
+-8.623302625e-03f, -8.627311288e-03f, -8.631304838e-03f, -8.635283271e-03f, -8.639246580e-03f, -8.643194758e-03f, -8.647127799e-03f, -8.651045699e-03f, -8.654948450e-03f, -8.658836046e-03f,
+-8.662708482e-03f, -8.666565752e-03f, -8.670407850e-03f, -8.674234770e-03f, -8.678046506e-03f, -8.681843053e-03f, -8.685624404e-03f, -8.689390554e-03f, -8.693141497e-03f, -8.696877227e-03f,
+-8.700597739e-03f, -8.704303028e-03f, -8.707993086e-03f, -8.711667910e-03f, -8.715327492e-03f, -8.718971829e-03f, -8.722600914e-03f, -8.726214741e-03f, -8.729813306e-03f, -8.733396602e-03f,
+-8.736964625e-03f, -8.740517369e-03f, -8.744054829e-03f, -8.747576999e-03f, -8.751083874e-03f, -8.754575448e-03f, -8.758051718e-03f, -8.761512676e-03f, -8.764958319e-03f, -8.768388640e-03f,
+-8.771803635e-03f, -8.775203299e-03f, -8.778587627e-03f, -8.781956613e-03f, -8.785310252e-03f, -8.788648540e-03f, -8.791971471e-03f, -8.795279041e-03f, -8.798571244e-03f, -8.801848076e-03f,
+-8.805109532e-03f, -8.808355607e-03f, -8.811586296e-03f, -8.814801594e-03f, -8.818001497e-03f, -8.821185999e-03f, -8.824355097e-03f, -8.827508785e-03f, -8.830647059e-03f, -8.833769913e-03f,
+-8.836877345e-03f, -8.839969348e-03f, -8.843045919e-03f, -8.846107052e-03f, -8.849152744e-03f, -8.852182990e-03f, -8.855197785e-03f, -8.858197125e-03f, -8.861181005e-03f, -8.864149422e-03f,
+-8.867102371e-03f, -8.870039848e-03f, -8.872961847e-03f, -8.875868366e-03f, -8.878759399e-03f, -8.881634944e-03f, -8.884494994e-03f, -8.887339547e-03f, -8.890168598e-03f, -8.892982143e-03f,
+-8.895780178e-03f, -8.898562699e-03f, -8.901329702e-03f, -8.904081183e-03f, -8.906817137e-03f, -8.909537562e-03f, -8.912242453e-03f, -8.914931806e-03f, -8.917605618e-03f, -8.920263884e-03f,
+-8.922906601e-03f, -8.925533765e-03f, -8.928145372e-03f, -8.930741419e-03f, -8.933321902e-03f, -8.935886816e-03f, -8.938436160e-03f, -8.940969928e-03f, -8.943488118e-03f, -8.945990725e-03f,
+-8.948477747e-03f, -8.950949179e-03f, -8.953405019e-03f, -8.955845262e-03f, -8.958269907e-03f, -8.960678948e-03f, -8.963072382e-03f, -8.965450207e-03f, -8.967812419e-03f, -8.970159015e-03f,
+-8.972489991e-03f, -8.974805345e-03f, -8.977105073e-03f, -8.979389171e-03f, -8.981657637e-03f, -8.983910468e-03f, -8.986147660e-03f, -8.988369211e-03f, -8.990575117e-03f, -8.992765375e-03f,
+-8.994939983e-03f, -8.997098937e-03f, -8.999242235e-03f, -9.001369874e-03f, -9.003481850e-03f, -9.005578161e-03f, -9.007658804e-03f, -9.009723776e-03f, -9.011773075e-03f, -9.013806697e-03f,
+-9.015824641e-03f, -9.017826903e-03f, -9.019813481e-03f, -9.021784371e-03f, -9.023739572e-03f, -9.025679081e-03f, -9.027602896e-03f, -9.029511013e-03f, -9.031403430e-03f, -9.033280146e-03f,
+-9.035141156e-03f, -9.036986460e-03f, -9.038816054e-03f, -9.040629937e-03f, -9.042428105e-03f, -9.044210557e-03f, -9.045977291e-03f, -9.047728303e-03f, -9.049463592e-03f, -9.051183156e-03f,
+-9.052886992e-03f, -9.054575099e-03f, -9.056247474e-03f, -9.057904115e-03f, -9.059545020e-03f, -9.061170188e-03f, -9.062779615e-03f, -9.064373300e-03f, -9.065951242e-03f, -9.067513438e-03f,
+-9.069059885e-03f, -9.070590584e-03f, -9.072105531e-03f, -9.073604725e-03f, -9.075088163e-03f, -9.076555845e-03f, -9.078007769e-03f, -9.079443932e-03f, -9.080864334e-03f, -9.082268971e-03f,
+-9.083657844e-03f, -9.085030950e-03f, -9.086388288e-03f, -9.087729856e-03f, -9.089055652e-03f, -9.090365675e-03f, -9.091659925e-03f, -9.092938398e-03f, -9.094201095e-03f, -9.095448012e-03f,
+-9.096679150e-03f, -9.097894507e-03f, -9.099094081e-03f, -9.100277872e-03f, -9.101445877e-03f, -9.102598096e-03f, -9.103734528e-03f, -9.104855172e-03f, -9.105960025e-03f, -9.107049088e-03f,
+-9.108122359e-03f, -9.109179837e-03f, -9.110221521e-03f, -9.111247410e-03f, -9.112257503e-03f, -9.113251800e-03f, -9.114230299e-03f, -9.115192999e-03f, -9.116139899e-03f, -9.117070999e-03f,
+-9.117986298e-03f, -9.118885796e-03f, -9.119769490e-03f, -9.120637381e-03f, -9.121489468e-03f, -9.122325751e-03f, -9.123146228e-03f, -9.123950899e-03f, -9.124739763e-03f, -9.125512820e-03f,
+-9.126270070e-03f, -9.127011512e-03f, -9.127737145e-03f, -9.128446968e-03f, -9.129140983e-03f, -9.129819187e-03f, -9.130481581e-03f, -9.131128165e-03f, -9.131758938e-03f, -9.132373899e-03f,
+-9.132973049e-03f, -9.133556388e-03f, -9.134123914e-03f, -9.134675629e-03f, -9.135211531e-03f, -9.135731621e-03f, -9.136235899e-03f, -9.136724364e-03f, -9.137197016e-03f, -9.137653857e-03f,
+-9.138094884e-03f, -9.138520099e-03f, -9.138929502e-03f, -9.139323093e-03f, -9.139700871e-03f, -9.140062837e-03f, -9.140408992e-03f, -9.140739335e-03f, -9.141053866e-03f, -9.141352587e-03f,
+-9.141635496e-03f, -9.141902595e-03f, -9.142153884e-03f, -9.142389363e-03f, -9.142609033e-03f, -9.142812894e-03f, -9.143000946e-03f, -9.143173191e-03f, -9.143329627e-03f, -9.143470257e-03f,
+-9.143595080e-03f, -9.143704098e-03f, -9.143797310e-03f, -9.143874718e-03f, -9.143936322e-03f, -9.143982122e-03f, -9.144012120e-03f, -9.144026317e-03f, -9.144024712e-03f, -9.144007308e-03f,
+-9.143974104e-03f, -9.143925102e-03f, -9.143860302e-03f, -9.143779705e-03f, -9.143683313e-03f, -9.143571126e-03f, -9.143443146e-03f, -9.143299373e-03f, -9.143139808e-03f, -9.142964452e-03f,
+-9.142773307e-03f, -9.142566374e-03f, -9.142343654e-03f, -9.142105148e-03f, -9.141850857e-03f, -9.141580783e-03f, -9.141294926e-03f, -9.140993288e-03f, -9.140675871e-03f, -9.140342676e-03f,
+-9.139993704e-03f, -9.139628956e-03f, -9.139248435e-03f, -9.138852140e-03f, -9.138440075e-03f, -9.138012240e-03f, -9.137568637e-03f, -9.137109268e-03f, -9.136634134e-03f, -9.136143237e-03f,
+-9.135636578e-03f, -9.135114159e-03f, -9.134575982e-03f, -9.134022049e-03f, -9.133452361e-03f, -9.132866920e-03f, -9.132265728e-03f, -9.131648787e-03f, -9.131016098e-03f, -9.130367664e-03f,
+-9.129703486e-03f, -9.129023567e-03f, -9.128327908e-03f, -9.127616512e-03f, -9.126889380e-03f, -9.126146514e-03f, -9.125387917e-03f, -9.124613591e-03f, -9.123823538e-03f, -9.123017759e-03f,
+-9.122196258e-03f, -9.121359036e-03f, -9.120506095e-03f, -9.119637439e-03f, -9.118753069e-03f, -9.117852987e-03f, -9.116937197e-03f, -9.116005699e-03f, -9.115058497e-03f, -9.114095594e-03f,
+-9.113116991e-03f, -9.112122691e-03f, -9.111112697e-03f, -9.110087010e-03f, -9.109045635e-03f, -9.107988573e-03f, -9.106915827e-03f, -9.105827399e-03f, -9.104723293e-03f, -9.103603511e-03f,
+-9.102468055e-03f, -9.101316929e-03f, -9.100150135e-03f, -9.098967677e-03f, -9.097769556e-03f, -9.096555776e-03f, -9.095326340e-03f, -9.094081250e-03f, -9.092820510e-03f, -9.091544122e-03f,
+-9.090252090e-03f, -9.088944417e-03f, -9.087621105e-03f, -9.086282158e-03f, -9.084927578e-03f, -9.083557370e-03f, -9.082171536e-03f, -9.080770079e-03f, -9.079353003e-03f, -9.077920310e-03f,
+-9.076472005e-03f, -9.075008089e-03f, -9.073528568e-03f, -9.072033443e-03f, -9.070522719e-03f, -9.068996399e-03f, -9.067454486e-03f, -9.065896984e-03f, -9.064323895e-03f, -9.062735225e-03f,
+-9.061130976e-03f, -9.059511151e-03f, -9.057875755e-03f, -9.056224791e-03f, -9.054558263e-03f, -9.052876174e-03f, -9.051178528e-03f, -9.049465328e-03f, -9.047736580e-03f, -9.045992285e-03f,
+-9.044232449e-03f, -9.042457074e-03f, -9.040666166e-03f, -9.038859727e-03f, -9.037037761e-03f, -9.035200273e-03f, -9.033347267e-03f, -9.031478746e-03f, -9.029594715e-03f, -9.027695177e-03f,
+-9.025780136e-03f, -9.023849598e-03f, -9.021903565e-03f, -9.019942042e-03f, -9.017965034e-03f, -9.015972544e-03f, -9.013964576e-03f, -9.011941136e-03f, -9.009902226e-03f, -9.007847852e-03f,
+-9.005778018e-03f, -9.003692727e-03f, -9.001591986e-03f, -8.999475797e-03f, -8.997344166e-03f, -8.995197097e-03f, -8.993034594e-03f, -8.990856662e-03f, -8.988663305e-03f, -8.986454529e-03f,
+-8.984230337e-03f, -8.981990734e-03f, -8.979735726e-03f, -8.977465315e-03f, -8.975179509e-03f, -8.972878310e-03f, -8.970561724e-03f, -8.968229755e-03f, -8.965882409e-03f, -8.963519690e-03f,
+-8.961141604e-03f, -8.958748154e-03f, -8.956339346e-03f, -8.953915185e-03f, -8.951475676e-03f, -8.949020824e-03f, -8.946550633e-03f, -8.944065110e-03f, -8.941564258e-03f, -8.939048084e-03f,
+-8.936516591e-03f, -8.933969786e-03f, -8.931407674e-03f, -8.928830259e-03f, -8.926237548e-03f, -8.923629544e-03f, -8.921006254e-03f, -8.918367683e-03f, -8.915713836e-03f, -8.913044718e-03f,
+-8.910360336e-03f, -8.907660694e-03f, -8.904945797e-03f, -8.902215652e-03f, -8.899470264e-03f, -8.896709637e-03f, -8.893933779e-03f, -8.891142694e-03f, -8.888336388e-03f, -8.885514867e-03f,
+-8.882678135e-03f, -8.879826200e-03f, -8.876959066e-03f, -8.874076740e-03f, -8.871179227e-03f, -8.868266533e-03f, -8.865338663e-03f, -8.862395624e-03f, -8.859437421e-03f, -8.856464061e-03f,
+-8.853475548e-03f, -8.850471890e-03f, -8.847453092e-03f, -8.844419160e-03f, -8.841370100e-03f, -8.838305918e-03f, -8.835226621e-03f, -8.832132213e-03f, -8.829022702e-03f, -8.825898094e-03f,
+-8.822758394e-03f, -8.819603609e-03f, -8.816433745e-03f, -8.813248809e-03f, -8.810048806e-03f, -8.806833743e-03f, -8.803603626e-03f, -8.800358462e-03f, -8.797098257e-03f, -8.793823017e-03f,
+-8.790532749e-03f, -8.787227459e-03f, -8.783907154e-03f, -8.780571840e-03f, -8.777221524e-03f, -8.773856212e-03f, -8.770475911e-03f, -8.767080628e-03f, -8.763670368e-03f, -8.760245140e-03f,
+-8.756804948e-03f, -8.753349801e-03f, -8.749879705e-03f, -8.746394667e-03f, -8.742894692e-03f, -8.739379789e-03f, -8.735849964e-03f, -8.732305224e-03f, -8.728745576e-03f, -8.725171027e-03f,
+-8.721581583e-03f, -8.717977252e-03f, -8.714358040e-03f, -8.710723955e-03f, -8.707075003e-03f, -8.703411193e-03f, -8.699732530e-03f, -8.696039022e-03f, -8.692330676e-03f, -8.688607499e-03f,
+-8.684869498e-03f, -8.681116681e-03f, -8.677349055e-03f, -8.673566627e-03f, -8.669769405e-03f, -8.665957395e-03f, -8.662130605e-03f, -8.658289043e-03f, -8.654432715e-03f, -8.650561629e-03f,
+-8.646675794e-03f, -8.642775215e-03f, -8.638859901e-03f, -8.634929859e-03f, -8.630985097e-03f, -8.627025622e-03f, -8.623051441e-03f, -8.619062564e-03f, -8.615058996e-03f, -8.611040746e-03f,
+-8.607007821e-03f, -8.602960230e-03f, -8.598897979e-03f, -8.594821077e-03f, -8.590729532e-03f, -8.586623350e-03f, -8.582502541e-03f, -8.578367112e-03f, -8.574217071e-03f, -8.570052425e-03f,
+-8.565873183e-03f, -8.561679353e-03f, -8.557470942e-03f, -8.553247959e-03f, -8.549010412e-03f, -8.544758309e-03f, -8.540491657e-03f, -8.536210465e-03f, -8.531914742e-03f, -8.527604494e-03f,
+-8.523279732e-03f, -8.518940461e-03f, -8.514586692e-03f, -8.510218432e-03f, -8.505835689e-03f, -8.501438472e-03f, -8.497026789e-03f, -8.492600649e-03f, -8.488160059e-03f, -8.483705029e-03f,
+-8.479235566e-03f, -8.474751680e-03f, -8.470253378e-03f, -8.465740669e-03f, -8.461213562e-03f, -8.456672065e-03f, -8.452116187e-03f, -8.447545936e-03f, -8.442961321e-03f, -8.438362351e-03f,
+-8.433749034e-03f, -8.429121379e-03f, -8.424479395e-03f, -8.419823091e-03f, -8.415152474e-03f, -8.410467555e-03f, -8.405768342e-03f, -8.401054844e-03f, -8.396327069e-03f, -8.391585026e-03f,
+-8.386828725e-03f, -8.382058175e-03f, -8.377273384e-03f, -8.372474361e-03f, -8.367661116e-03f, -8.362833657e-03f, -8.357991993e-03f, -8.353136134e-03f, -8.348266089e-03f, -8.343381866e-03f,
+-8.338483475e-03f, -8.333570926e-03f, -8.328644227e-03f, -8.323703387e-03f, -8.318748417e-03f, -8.313779324e-03f, -8.308796119e-03f, -8.303798811e-03f, -8.298787408e-03f, -8.293761922e-03f,
+-8.288722360e-03f, -8.283668732e-03f, -8.278601048e-03f, -8.273519318e-03f, -8.268423550e-03f, -8.263313754e-03f, -8.258189941e-03f, -8.253052118e-03f, -8.247900296e-03f, -8.242734485e-03f,
+-8.237554695e-03f, -8.232360934e-03f, -8.227153212e-03f, -8.221931540e-03f, -8.216695927e-03f, -8.211446382e-03f, -8.206182916e-03f, -8.200905539e-03f, -8.195614259e-03f, -8.190309088e-03f,
+-8.184990034e-03f, -8.179657108e-03f, -8.174310320e-03f, -8.168949679e-03f, -8.163575196e-03f, -8.158186881e-03f, -8.152784743e-03f, -8.147368793e-03f, -8.141939040e-03f, -8.136495496e-03f,
+-8.131038169e-03f, -8.125567070e-03f, -8.120082209e-03f, -8.114583597e-03f, -8.109071243e-03f, -8.103545158e-03f, -8.098005352e-03f, -8.092451835e-03f, -8.086884618e-03f, -8.081303711e-03f,
+-8.075709123e-03f, -8.070100867e-03f, -8.064478951e-03f, -8.058843387e-03f, -8.053194185e-03f, -8.047531355e-03f, -8.041854908e-03f, -8.036164854e-03f, -8.030461203e-03f, -8.024743967e-03f,
+-8.019013156e-03f, -8.013268781e-03f, -8.007510851e-03f, -8.001739379e-03f, -7.995954373e-03f, -7.990155846e-03f, -7.984343808e-03f, -7.978518269e-03f, -7.972679240e-03f, -7.966826732e-03f,
+-7.960960756e-03f, -7.955081323e-03f, -7.949188443e-03f, -7.943282128e-03f, -7.937362388e-03f, -7.931429234e-03f, -7.925482677e-03f, -7.919522729e-03f, -7.913549399e-03f, -7.907562699e-03f,
+-7.901562641e-03f, -7.895549234e-03f, -7.889522491e-03f, -7.883482422e-03f, -7.877429038e-03f, -7.871362351e-03f, -7.865282372e-03f, -7.859189111e-03f, -7.853082580e-03f, -7.846962791e-03f,
+-7.840829754e-03f, -7.834683481e-03f, -7.828523984e-03f, -7.822351272e-03f, -7.816165359e-03f, -7.809966254e-03f, -7.803753970e-03f, -7.797528518e-03f, -7.791289909e-03f, -7.785038155e-03f,
+-7.778773267e-03f, -7.772495257e-03f, -7.766204136e-03f, -7.759899916e-03f, -7.753582608e-03f, -7.747252224e-03f, -7.740908776e-03f, -7.734552275e-03f, -7.728182732e-03f, -7.721800160e-03f,
+-7.715404571e-03f, -7.708995975e-03f, -7.702574384e-03f, -7.696139812e-03f, -7.689692268e-03f, -7.683231765e-03f, -7.676758315e-03f, -7.670271929e-03f, -7.663772620e-03f, -7.657260400e-03f,
+-7.650735279e-03f, -7.644197271e-03f, -7.637646387e-03f, -7.631082639e-03f, -7.624506039e-03f, -7.617916599e-03f, -7.611314331e-03f, -7.604699248e-03f, -7.598071361e-03f, -7.591430682e-03f,
+-7.584777224e-03f, -7.578110999e-03f, -7.571432018e-03f, -7.564740294e-03f, -7.558035840e-03f, -7.551318667e-03f, -7.544588788e-03f, -7.537846215e-03f, -7.531090960e-03f, -7.524323036e-03f,
+-7.517542454e-03f, -7.510749228e-03f, -7.503943370e-03f, -7.497124892e-03f, -7.490293806e-03f, -7.483450125e-03f, -7.476593862e-03f, -7.469725029e-03f, -7.462843638e-03f, -7.455949702e-03f,
+-7.449043233e-03f, -7.442124245e-03f, -7.435192749e-03f, -7.428248758e-03f, -7.421292285e-03f, -7.414323343e-03f, -7.407341944e-03f, -7.400348101e-03f, -7.393341827e-03f, -7.386323134e-03f,
+-7.379292035e-03f, -7.372248543e-03f, -7.365192671e-03f, -7.358124431e-03f, -7.351043837e-03f, -7.343950901e-03f, -7.336845636e-03f, -7.329728055e-03f, -7.322598171e-03f, -7.315455997e-03f,
+-7.308301545e-03f, -7.301134830e-03f, -7.293955863e-03f, -7.286764659e-03f, -7.279561229e-03f, -7.272345587e-03f, -7.265117746e-03f, -7.257877720e-03f, -7.250625520e-03f, -7.243361162e-03f,
+-7.236084656e-03f, -7.228796018e-03f, -7.221495260e-03f, -7.214182395e-03f, -7.206857436e-03f, -7.199520398e-03f, -7.192171292e-03f, -7.184810133e-03f, -7.177436933e-03f, -7.170051706e-03f,
+-7.162654466e-03f, -7.155245226e-03f, -7.147823999e-03f, -7.140390799e-03f, -7.132945639e-03f, -7.125488532e-03f, -7.118019492e-03f, -7.110538534e-03f, -7.103045669e-03f, -7.095540912e-03f,
+-7.088024276e-03f, -7.080495775e-03f, -7.072955422e-03f, -7.065403232e-03f, -7.057839217e-03f, -7.050263392e-03f, -7.042675769e-03f, -7.035076364e-03f, -7.027465189e-03f, -7.019842258e-03f,
+-7.012207586e-03f, -7.004561185e-03f, -6.996903070e-03f, -6.989233254e-03f, -6.981551752e-03f, -6.973858577e-03f, -6.966153743e-03f, -6.958437264e-03f, -6.950709153e-03f, -6.942969426e-03f,
+-6.935218096e-03f, -6.927455176e-03f, -6.919680681e-03f, -6.911894625e-03f, -6.904097021e-03f, -6.896287885e-03f, -6.888467230e-03f, -6.880635069e-03f, -6.872791418e-03f, -6.864936290e-03f,
+-6.857069700e-03f, -6.849191662e-03f, -6.841302189e-03f, -6.833401296e-03f, -6.825488998e-03f, -6.817565308e-03f, -6.809630241e-03f, -6.801683811e-03f, -6.793726033e-03f, -6.785756920e-03f,
+-6.777776487e-03f, -6.769784749e-03f, -6.761781720e-03f, -6.753767414e-03f, -6.745741845e-03f, -6.737705029e-03f, -6.729656979e-03f, -6.721597711e-03f, -6.713527237e-03f, -6.705445574e-03f,
+-6.697352736e-03f, -6.689248736e-03f, -6.681133590e-03f, -6.673007313e-03f, -6.664869918e-03f, -6.656721421e-03f, -6.648561836e-03f, -6.640391178e-03f, -6.632209461e-03f, -6.624016701e-03f,
+-6.615812911e-03f, -6.607598107e-03f, -6.599372304e-03f, -6.591135516e-03f, -6.582887757e-03f, -6.574629044e-03f, -6.566359390e-03f, -6.558078810e-03f, -6.549787320e-03f, -6.541484934e-03f,
+-6.533171666e-03f, -6.524847533e-03f, -6.516512549e-03f, -6.508166729e-03f, -6.499810088e-03f, -6.491442640e-03f, -6.483064401e-03f, -6.474675386e-03f, -6.466275611e-03f, -6.457865089e-03f,
+-6.449443836e-03f, -6.441011867e-03f, -6.432569197e-03f, -6.424115842e-03f, -6.415651816e-03f, -6.407177136e-03f, -6.398691815e-03f, -6.390195869e-03f, -6.381689313e-03f, -6.373172163e-03f,
+-6.364644433e-03f, -6.356106140e-03f, -6.347557298e-03f, -6.338997923e-03f, -6.330428030e-03f, -6.321847634e-03f, -6.313256751e-03f, -6.304655395e-03f, -6.296043584e-03f, -6.287421331e-03f,
+-6.278788652e-03f, -6.270145563e-03f, -6.261492080e-03f, -6.252828217e-03f, -6.244153990e-03f, -6.235469415e-03f, -6.226774507e-03f, -6.218069282e-03f, -6.209353755e-03f, -6.200627942e-03f,
+-6.191891859e-03f, -6.183145521e-03f, -6.174388943e-03f, -6.165622142e-03f, -6.156845133e-03f, -6.148057932e-03f, -6.139260554e-03f, -6.130453016e-03f, -6.121635332e-03f, -6.112807519e-03f,
+-6.103969592e-03f, -6.095121568e-03f, -6.086263462e-03f, -6.077395289e-03f, -6.068517066e-03f, -6.059628809e-03f, -6.050730533e-03f, -6.041822254e-03f, -6.032903988e-03f, -6.023975752e-03f,
+-6.015037561e-03f, -6.006089430e-03f, -5.997131376e-03f, -5.988163416e-03f, -5.979185564e-03f, -5.970197837e-03f, -5.961200251e-03f, -5.952192822e-03f, -5.943175566e-03f, -5.934148500e-03f,
+-5.925111638e-03f, -5.916064998e-03f, -5.907008595e-03f, -5.897942446e-03f, -5.888866567e-03f, -5.879780973e-03f, -5.870685682e-03f, -5.861580709e-03f, -5.852466071e-03f, -5.843341783e-03f,
+-5.834207863e-03f, -5.825064326e-03f, -5.815911188e-03f, -5.806748467e-03f, -5.797576177e-03f, -5.788394337e-03f, -5.779202961e-03f, -5.770002066e-03f, -5.760791669e-03f, -5.751571786e-03f,
+-5.742342434e-03f, -5.733103629e-03f, -5.723855386e-03f, -5.714597724e-03f, -5.705330658e-03f, -5.696054205e-03f, -5.686768381e-03f, -5.677473203e-03f, -5.668168687e-03f, -5.658854850e-03f,
+-5.649531708e-03f, -5.640199278e-03f, -5.630857577e-03f, -5.621506622e-03f, -5.612146428e-03f, -5.602777012e-03f, -5.593398392e-03f, -5.584010584e-03f, -5.574613604e-03f, -5.565207469e-03f,
+-5.555792196e-03f, -5.546367802e-03f, -5.536934304e-03f, -5.527491717e-03f, -5.518040060e-03f, -5.508579348e-03f, -5.499109598e-03f, -5.489630828e-03f, -5.480143055e-03f, -5.470646294e-03f,
+-5.461140563e-03f, -5.451625879e-03f, -5.442102259e-03f, -5.432569719e-03f, -5.423028277e-03f, -5.413477949e-03f, -5.403918752e-03f, -5.394350704e-03f, -5.384773822e-03f, -5.375188121e-03f,
+-5.365593620e-03f, -5.355990336e-03f, -5.346378285e-03f, -5.336757484e-03f, -5.327127951e-03f, -5.317489702e-03f, -5.307842755e-03f, -5.298187127e-03f, -5.288522835e-03f, -5.278849896e-03f,
+-5.269168327e-03f, -5.259478146e-03f, -5.249779369e-03f, -5.240072014e-03f, -5.230356098e-03f, -5.220631638e-03f, -5.210898652e-03f, -5.201157156e-03f, -5.191407169e-03f, -5.181648706e-03f,
+-5.171881786e-03f, -5.162106426e-03f, -5.152322643e-03f, -5.142530454e-03f, -5.132729877e-03f, -5.122920930e-03f, -5.113103629e-03f, -5.103277992e-03f, -5.093444036e-03f, -5.083601779e-03f,
+-5.073751238e-03f, -5.063892431e-03f, -5.054025374e-03f, -5.044150087e-03f, -5.034266585e-03f, -5.024374887e-03f, -5.014475010e-03f, -5.004566971e-03f, -4.994650789e-03f, -4.984726480e-03f,
+-4.974794062e-03f, -4.964853553e-03f, -4.954904970e-03f, -4.944948332e-03f, -4.934983654e-03f, -4.925010956e-03f, -4.915030255e-03f, -4.905041568e-03f, -4.895044914e-03f, -4.885040309e-03f,
+-4.875027771e-03f, -4.865007319e-03f, -4.854978970e-03f, -4.844942741e-03f, -4.834898651e-03f, -4.824846716e-03f, -4.814786956e-03f, -4.804719387e-03f, -4.794644028e-03f, -4.784560896e-03f,
+-4.774470009e-03f, -4.764371385e-03f, -4.754265042e-03f, -4.744150998e-03f, -4.734029269e-03f, -4.723899875e-03f, -4.713762834e-03f, -4.703618162e-03f, -4.693465879e-03f, -4.683306001e-03f,
+-4.673138548e-03f, -4.662963536e-03f, -4.652780984e-03f, -4.642590910e-03f, -4.632393332e-03f, -4.622188267e-03f, -4.611975735e-03f, -4.601755752e-03f, -4.591528337e-03f, -4.581293508e-03f,
+-4.571051283e-03f, -4.560801680e-03f, -4.550544717e-03f, -4.540280412e-03f, -4.530008783e-03f, -4.519729849e-03f, -4.509443628e-03f, -4.499150137e-03f, -4.488849396e-03f, -4.478541421e-03f,
+-4.468226231e-03f, -4.457903845e-03f, -4.447574280e-03f, -4.437237556e-03f, -4.426893689e-03f, -4.416542698e-03f, -4.406184603e-03f, -4.395819419e-03f, -4.385447167e-03f, -4.375067864e-03f,
+-4.364681529e-03f, -4.354288180e-03f, -4.343887835e-03f, -4.333480512e-03f, -4.323066231e-03f, -4.312645008e-03f, -4.302216863e-03f, -4.291781815e-03f, -4.281339880e-03f, -4.270891078e-03f,
+-4.260435428e-03f, -4.249972946e-03f, -4.239503653e-03f, -4.229027567e-03f, -4.218544705e-03f, -4.208055086e-03f, -4.197558729e-03f, -4.187055653e-03f, -4.176545875e-03f, -4.166029414e-03f,
+-4.155506289e-03f, -4.144976518e-03f, -4.134440120e-03f, -4.123897114e-03f, -4.113347517e-03f, -4.102791349e-03f, -4.092228628e-03f, -4.081659372e-03f, -4.071083601e-03f, -4.060501332e-03f,
+-4.049912585e-03f, -4.039317378e-03f, -4.028715729e-03f, -4.018107658e-03f, -4.007493182e-03f, -3.996872322e-03f, -3.986245094e-03f, -3.975611519e-03f, -3.964971614e-03f, -3.954325399e-03f,
+-3.943672892e-03f, -3.933014111e-03f, -3.922349076e-03f, -3.911677806e-03f, -3.901000318e-03f, -3.890316632e-03f, -3.879626767e-03f, -3.868930742e-03f, -3.858228574e-03f, -3.847520283e-03f,
+-3.836805888e-03f, -3.826085408e-03f, -3.815358861e-03f, -3.804626267e-03f, -3.793887643e-03f, -3.783143010e-03f, -3.772392385e-03f, -3.761635788e-03f, -3.750873238e-03f, -3.740104753e-03f,
+-3.729330353e-03f, -3.718550056e-03f, -3.707763881e-03f, -3.696971847e-03f, -3.686173974e-03f, -3.675370280e-03f, -3.664560783e-03f, -3.653745504e-03f, -3.642924461e-03f, -3.632097673e-03f,
+-3.621265158e-03f, -3.610426937e-03f, -3.599583028e-03f, -3.588733449e-03f, -3.577878221e-03f, -3.567017362e-03f, -3.556150891e-03f, -3.545278827e-03f, -3.534401190e-03f, -3.523517998e-03f,
+-3.512629270e-03f, -3.501735026e-03f, -3.490835284e-03f, -3.479930065e-03f, -3.469019386e-03f, -3.458103267e-03f, -3.447181727e-03f, -3.436254786e-03f, -3.425322462e-03f, -3.414384774e-03f,
+-3.403441743e-03f, -3.392493386e-03f, -3.381539723e-03f, -3.370580774e-03f, -3.359616557e-03f, -3.348647092e-03f, -3.337672398e-03f, -3.326692494e-03f, -3.315707400e-03f, -3.304717134e-03f,
+-3.293721716e-03f, -3.282721166e-03f, -3.271715501e-03f, -3.260704743e-03f, -3.249688909e-03f, -3.238668020e-03f, -3.227642094e-03f, -3.216611151e-03f, -3.205575211e-03f, -3.194534292e-03f,
+-3.183488413e-03f, -3.172437595e-03f, -3.161381857e-03f, -3.150321217e-03f, -3.139255696e-03f, -3.128185312e-03f, -3.117110085e-03f, -3.106030034e-03f, -3.094945180e-03f, -3.083855540e-03f,
+-3.072761135e-03f, -3.061661984e-03f, -3.050558106e-03f, -3.039449521e-03f, -3.028336248e-03f, -3.017218307e-03f, -3.006095717e-03f, -2.994968498e-03f, -2.983836668e-03f, -2.972700248e-03f,
+-2.961559257e-03f, -2.950413715e-03f, -2.939263640e-03f, -2.928109053e-03f, -2.916949973e-03f, -2.905786419e-03f, -2.894618411e-03f, -2.883445969e-03f, -2.872269112e-03f, -2.861087859e-03f,
+-2.849902230e-03f, -2.838712245e-03f, -2.827517923e-03f, -2.816319284e-03f, -2.805116347e-03f, -2.793909132e-03f, -2.782697658e-03f, -2.771481946e-03f, -2.760262014e-03f, -2.749037882e-03f,
+-2.737809571e-03f, -2.726577098e-03f, -2.715340485e-03f, -2.704099750e-03f, -2.692854914e-03f, -2.681605996e-03f, -2.670353015e-03f, -2.659095992e-03f, -2.647834945e-03f, -2.636569895e-03f,
+-2.625300862e-03f, -2.614027864e-03f, -2.602750921e-03f, -2.591470054e-03f, -2.580185282e-03f, -2.568896625e-03f, -2.557604102e-03f, -2.546307733e-03f, -2.535007538e-03f, -2.523703536e-03f,
+-2.512395748e-03f, -2.501084192e-03f, -2.489768889e-03f, -2.478449859e-03f, -2.467127121e-03f, -2.455800694e-03f, -2.444470600e-03f, -2.433136856e-03f, -2.421799484e-03f, -2.410458503e-03f,
+-2.399113933e-03f, -2.387765793e-03f, -2.376414103e-03f, -2.365058884e-03f, -2.353700155e-03f, -2.342337935e-03f, -2.330972245e-03f, -2.319603104e-03f, -2.308230532e-03f, -2.296854549e-03f,
+-2.285475175e-03f, -2.274092430e-03f, -2.262706333e-03f, -2.251316904e-03f, -2.239924164e-03f, -2.228528131e-03f, -2.217128827e-03f, -2.205726270e-03f, -2.194320480e-03f, -2.182911479e-03f,
+-2.171499284e-03f, -2.160083917e-03f, -2.148665397e-03f, -2.137243744e-03f, -2.125818977e-03f, -2.114391118e-03f, -2.102960185e-03f, -2.091526199e-03f, -2.080089179e-03f, -2.068649146e-03f,
+-2.057206119e-03f, -2.045760118e-03f, -2.034311163e-03f, -2.022859275e-03f, -2.011404472e-03f, -1.999946776e-03f, -1.988486205e-03f, -1.977022781e-03f, -1.965556522e-03f, -1.954087449e-03f,
+-1.942615581e-03f, -1.931140940e-03f, -1.919663544e-03f, -1.908183413e-03f, -1.896700568e-03f, -1.885215029e-03f, -1.873726815e-03f, -1.862235947e-03f, -1.850742445e-03f, -1.839246328e-03f,
+-1.827747616e-03f, -1.816246330e-03f, -1.804742490e-03f, -1.793236115e-03f, -1.781727225e-03f, -1.770215841e-03f, -1.758701983e-03f, -1.747185670e-03f, -1.735666923e-03f, -1.724145761e-03f,
+-1.712622205e-03f, -1.701096275e-03f, -1.689567991e-03f, -1.678037372e-03f, -1.666504439e-03f, -1.654969212e-03f, -1.643431710e-03f, -1.631891955e-03f, -1.620349966e-03f, -1.608805762e-03f,
+-1.597259365e-03f, -1.585710794e-03f, -1.574160069e-03f, -1.562607211e-03f, -1.551052238e-03f, -1.539495173e-03f, -1.527936033e-03f, -1.516374840e-03f, -1.504811614e-03f, -1.493246375e-03f,
+-1.481679142e-03f, -1.470109937e-03f, -1.458538778e-03f, -1.446965687e-03f, -1.435390682e-03f, -1.423813785e-03f, -1.412235015e-03f, -1.400654393e-03f, -1.389071938e-03f, -1.377487671e-03f,
+-1.365901612e-03f, -1.354313781e-03f, -1.342724197e-03f, -1.331132882e-03f, -1.319539855e-03f, -1.307945136e-03f, -1.296348746e-03f, -1.284750704e-03f, -1.273151031e-03f, -1.261549747e-03f,
+-1.249946872e-03f, -1.238342426e-03f, -1.226736429e-03f, -1.215128901e-03f, -1.203519863e-03f, -1.191909335e-03f, -1.180297336e-03f, -1.168683887e-03f, -1.157069008e-03f, -1.145452720e-03f,
+-1.133835041e-03f, -1.122215993e-03f, -1.110595596e-03f, -1.098973869e-03f, -1.087350834e-03f, -1.075726509e-03f, -1.064100915e-03f, -1.052474073e-03f, -1.040846002e-03f, -1.029216723e-03f,
+-1.017586256e-03f, -1.005954620e-03f, -9.943218369e-04f, -9.826879258e-04f, -9.710529071e-04f, -9.594168010e-04f, -9.477796276e-04f, -9.361414070e-04f, -9.245021595e-04f, -9.128619052e-04f,
+-9.012206643e-04f, -8.895784569e-04f, -8.779353032e-04f, -8.662912233e-04f, -8.546462375e-04f, -8.430003658e-04f, -8.313536286e-04f, -8.197060458e-04f, -8.080576377e-04f, -7.964084244e-04f,
+-7.847584262e-04f, -7.731076632e-04f, -7.614561555e-04f, -7.498039233e-04f, -7.381509868e-04f, -7.264973662e-04f, -7.148430817e-04f, -7.031881533e-04f, -6.915326013e-04f, -6.798764458e-04f,
+-6.682197070e-04f, -6.565624051e-04f, -6.449045602e-04f, -6.332461926e-04f, -6.215873223e-04f, -6.099279696e-04f, -5.982681546e-04f, -5.866078975e-04f, -5.749472185e-04f, -5.632861377e-04f,
+-5.516246752e-04f, -5.399628514e-04f, -5.283006862e-04f, -5.166382000e-04f, -5.049754128e-04f, -4.933123448e-04f, -4.816490162e-04f, -4.699854472e-04f, -4.583216578e-04f, -4.466576684e-04f,
+-4.349934990e-04f, -4.233291698e-04f, -4.116647010e-04f, -4.000001126e-04f, -3.883354250e-04f, -3.766706582e-04f, -3.650058324e-04f, -3.533409678e-04f, -3.416760844e-04f, -3.300112026e-04f,
+-3.183463423e-04f, -3.066815239e-04f, -2.950167673e-04f, -2.833520928e-04f, -2.716875206e-04f, -2.600230707e-04f, -2.483587633e-04f, -2.366946186e-04f, -2.250306567e-04f, -2.133668977e-04f,
+-2.017033618e-04f, -1.900400692e-04f, -1.783770399e-04f, -1.667142942e-04f, -1.550518521e-04f, -1.433897337e-04f, -1.317279593e-04f, -1.200665489e-04f, -1.084055226e-04f, -9.674490071e-05f,
+-8.508470319e-05f, -7.342495023e-05f, -6.176566193e-05f, -5.010685842e-05f, -3.844855981e-05f, -2.679078623e-05f, -1.513355779e-05f, -3.476894598e-06f, 8.179183231e-06f, 1.983465559e-05f,
+3.148950237e-05f, 4.314370347e-05f, 5.479723878e-05f, 6.645008821e-05f, 7.810223166e-05f, 8.975364903e-05f, 1.014043202e-04f, 1.130542252e-04f, 1.247033437e-04f, 1.363516559e-04f,
+1.479991415e-04f, 1.596457805e-04f, 1.712915528e-04f, 1.829364384e-04f, 1.945804171e-04f, 2.062234690e-04f, 2.178655738e-04f, 2.295067116e-04f, 2.411468623e-04f, 2.527860058e-04f,
+2.644241222e-04f, 2.760611912e-04f, 2.876971929e-04f, 2.993321072e-04f, 3.109659141e-04f, 3.225985935e-04f, 3.342301254e-04f, 3.458604898e-04f, 3.574896665e-04f, 3.691176357e-04f,
+3.807443772e-04f, 3.923698710e-04f, 4.039940971e-04f, 4.156170356e-04f, 4.272386663e-04f, 4.388589692e-04f, 4.504779244e-04f, 4.620955118e-04f, 4.737117115e-04f, 4.853265034e-04f,
+4.969398676e-04f, 5.085517840e-04f, 5.201622327e-04f, 5.317711937e-04f, 5.433786469e-04f, 5.549845725e-04f, 5.665889504e-04f, 5.781917607e-04f, 5.897929834e-04f, 6.013925986e-04f,
+6.129905862e-04f, 6.245869264e-04f, 6.361815991e-04f, 6.477745845e-04f, 6.593658626e-04f, 6.709554134e-04f, 6.825432170e-04f, 6.941292535e-04f, 7.057135029e-04f, 7.172959454e-04f,
+7.288765609e-04f, 7.404553297e-04f, 7.520322318e-04f, 7.636072472e-04f, 7.751803561e-04f, 7.867515385e-04f, 7.983207747e-04f, 8.098880446e-04f, 8.214533284e-04f, 8.330166063e-04f,
+8.445778583e-04f, 8.561370645e-04f, 8.676942052e-04f, 8.792492604e-04f, 8.908022103e-04f, 9.023530351e-04f, 9.139017148e-04f, 9.254482296e-04f, 9.369925598e-04f, 9.485346854e-04f,
+9.600745867e-04f, 9.716122437e-04f, 9.831476368e-04f, 9.946807460e-04f, 1.006211552e-03f, 1.017740034e-03f, 1.029266173e-03f, 1.040789949e-03f, 1.052311342e-03f, 1.063830332e-03f,
+1.075346900e-03f, 1.086861026e-03f, 1.098372690e-03f, 1.109881872e-03f, 1.121388553e-03f, 1.132892712e-03f, 1.144394331e-03f, 1.155893389e-03f, 1.167389866e-03f, 1.178883744e-03f,
+1.190375001e-03f, 1.201863619e-03f, 1.213349577e-03f, 1.224832857e-03f, 1.236313437e-03f, 1.247791300e-03f, 1.259266424e-03f, 1.270738790e-03f, 1.282208379e-03f, 1.293675170e-03f,
+1.305139145e-03f, 1.316600283e-03f, 1.328058565e-03f, 1.339513971e-03f, 1.350966482e-03f, 1.362416078e-03f, 1.373862738e-03f, 1.385306445e-03f, 1.396747177e-03f, 1.408184916e-03f,
+1.419619642e-03f, 1.431051335e-03f, 1.442479975e-03f, 1.453905544e-03f, 1.465328020e-03f, 1.476747386e-03f, 1.488163621e-03f, 1.499576705e-03f, 1.510986620e-03f, 1.522393345e-03f,
+1.533796862e-03f, 1.545197149e-03f, 1.556594189e-03f, 1.567987961e-03f, 1.579378446e-03f, 1.590765625e-03f, 1.602149477e-03f, 1.613529984e-03f, 1.624907126e-03f, 1.636280883e-03f,
+1.647651236e-03f, 1.659018165e-03f, 1.670381652e-03f, 1.681741676e-03f, 1.693098218e-03f, 1.704451259e-03f, 1.715800779e-03f, 1.727146759e-03f, 1.738489179e-03f, 1.749828020e-03f,
+1.761163262e-03f, 1.772494887e-03f, 1.783822874e-03f, 1.795147205e-03f, 1.806467860e-03f, 1.817784819e-03f, 1.829098064e-03f, 1.840407574e-03f, 1.851713331e-03f, 1.863015315e-03f,
+1.874313507e-03f, 1.885607888e-03f, 1.896898437e-03f, 1.908185137e-03f, 1.919467967e-03f, 1.930746908e-03f, 1.942021942e-03f, 1.953293048e-03f, 1.964560207e-03f, 1.975823401e-03f,
+1.987082609e-03f, 1.998337814e-03f, 2.009588994e-03f, 2.020836132e-03f, 2.032079208e-03f, 2.043318202e-03f, 2.054553096e-03f, 2.065783871e-03f, 2.077010506e-03f, 2.088232984e-03f,
+2.099451284e-03f, 2.110665387e-03f, 2.121875276e-03f, 2.133080929e-03f, 2.144282328e-03f, 2.155479455e-03f, 2.166672289e-03f, 2.177860813e-03f, 2.189045005e-03f, 2.200224849e-03f,
+2.211400323e-03f, 2.222571410e-03f, 2.233738091e-03f, 2.244900345e-03f, 2.256058155e-03f, 2.267211500e-03f, 2.278360363e-03f, 2.289504724e-03f, 2.300644563e-03f, 2.311779863e-03f,
+2.322910604e-03f, 2.334036766e-03f, 2.345158332e-03f, 2.356275281e-03f, 2.367387596e-03f, 2.378495256e-03f, 2.389598244e-03f, 2.400696540e-03f, 2.411790124e-03f, 2.422878980e-03f,
+2.433963086e-03f, 2.445042425e-03f, 2.456116978e-03f, 2.467186725e-03f, 2.478251648e-03f, 2.489311728e-03f, 2.500366946e-03f, 2.511417283e-03f, 2.522462720e-03f, 2.533503239e-03f,
+2.544538821e-03f, 2.555569446e-03f, 2.566595097e-03f, 2.577615753e-03f, 2.588631398e-03f, 2.599642010e-03f, 2.610647573e-03f, 2.621648067e-03f, 2.632643474e-03f, 2.643633774e-03f,
+2.654618949e-03f, 2.665598980e-03f, 2.676573849e-03f, 2.687543536e-03f, 2.698508024e-03f, 2.709467293e-03f, 2.720421325e-03f, 2.731370101e-03f, 2.742313602e-03f, 2.753251811e-03f,
+2.764184707e-03f, 2.775112273e-03f, 2.786034490e-03f, 2.796951340e-03f, 2.807862803e-03f, 2.818768861e-03f, 2.829669496e-03f, 2.840564689e-03f, 2.851454422e-03f, 2.862338675e-03f,
+2.873217431e-03f, 2.884090671e-03f, 2.894958377e-03f, 2.905820529e-03f, 2.916677110e-03f, 2.927528101e-03f, 2.938373483e-03f, 2.949213238e-03f, 2.960047348e-03f, 2.970875794e-03f,
+2.981698558e-03f, 2.992515621e-03f, 3.003326966e-03f, 3.014132572e-03f, 3.024932423e-03f, 3.035726500e-03f, 3.046514784e-03f, 3.057297257e-03f, 3.068073902e-03f, 3.078844698e-03f,
+3.089609629e-03f, 3.100368675e-03f, 3.111121819e-03f, 3.121869043e-03f, 3.132610327e-03f, 3.143345654e-03f, 3.154075006e-03f, 3.164798364e-03f, 3.175515709e-03f, 3.186227025e-03f,
+3.196932293e-03f, 3.207631493e-03f, 3.218324609e-03f, 3.229011623e-03f, 3.239692515e-03f, 3.250367268e-03f, 3.261035863e-03f, 3.271698283e-03f, 3.282354510e-03f, 3.293004525e-03f,
+3.303648310e-03f, 3.314285847e-03f, 3.324917118e-03f, 3.335542106e-03f, 3.346160791e-03f, 3.356773157e-03f, 3.367379184e-03f, 3.377978856e-03f, 3.388572153e-03f, 3.399159059e-03f,
+3.409739554e-03f, 3.420313622e-03f, 3.430881244e-03f, 3.441442401e-03f, 3.451997078e-03f, 3.462545254e-03f, 3.473086913e-03f, 3.483622037e-03f, 3.494150608e-03f, 3.504672607e-03f,
+3.515188017e-03f, 3.525696821e-03f, 3.536199000e-03f, 3.546694536e-03f, 3.557183413e-03f, 3.567665611e-03f, 3.578141114e-03f, 3.588609903e-03f, 3.599071960e-03f, 3.609527269e-03f,
+3.619975811e-03f, 3.630417568e-03f, 3.640852523e-03f, 3.651280659e-03f, 3.661701957e-03f, 3.672116400e-03f, 3.682523969e-03f, 3.692924649e-03f, 3.703318420e-03f, 3.713705266e-03f,
+3.724085169e-03f, 3.734458110e-03f, 3.744824073e-03f, 3.755183041e-03f, 3.765534994e-03f, 3.775879917e-03f, 3.786217791e-03f, 3.796548599e-03f, 3.806872324e-03f, 3.817188947e-03f,
+3.827498452e-03f, 3.837800821e-03f, 3.848096036e-03f, 3.858384081e-03f, 3.868664938e-03f, 3.878938588e-03f, 3.889205016e-03f, 3.899464204e-03f, 3.909716133e-03f, 3.919960788e-03f,
+3.930198150e-03f, 3.940428203e-03f, 3.950650928e-03f, 3.960866309e-03f, 3.971074329e-03f, 3.981274969e-03f, 3.991468214e-03f, 4.001654045e-03f, 4.011832445e-03f, 4.022003398e-03f,
+4.032166886e-03f, 4.042322892e-03f, 4.052471398e-03f, 4.062612387e-03f, 4.072745844e-03f, 4.082871749e-03f, 4.092990086e-03f, 4.103100839e-03f, 4.113203989e-03f, 4.123299521e-03f,
+4.133387416e-03f, 4.143467658e-03f, 4.153540229e-03f, 4.163605114e-03f, 4.173662294e-03f, 4.183711753e-03f, 4.193753473e-03f, 4.203787439e-03f, 4.213813632e-03f, 4.223832036e-03f,
+4.233842635e-03f, 4.243845410e-03f, 4.253840346e-03f, 4.263827425e-03f, 4.273806631e-03f, 4.283777946e-03f, 4.293741354e-03f, 4.303696838e-03f, 4.313644381e-03f, 4.323583967e-03f,
+4.333515579e-03f, 4.343439199e-03f, 4.353354812e-03f, 4.363262400e-03f, 4.373161947e-03f, 4.383053436e-03f, 4.392936850e-03f, 4.402812173e-03f, 4.412679388e-03f, 4.422538478e-03f,
+4.432389427e-03f, 4.442232219e-03f, 4.452066836e-03f, 4.461893262e-03f, 4.471711480e-03f, 4.481521474e-03f, 4.491323228e-03f, 4.501116724e-03f, 4.510901947e-03f, 4.520678880e-03f,
+4.530447506e-03f, 4.540207809e-03f, 4.549959773e-03f, 4.559703381e-03f, 4.569438616e-03f, 4.579165462e-03f, 4.588883904e-03f, 4.598593924e-03f, 4.608295506e-03f, 4.617988634e-03f,
+4.627673291e-03f, 4.637349462e-03f, 4.647017129e-03f, 4.656676278e-03f, 4.666326890e-03f, 4.675968951e-03f, 4.685602444e-03f, 4.695227352e-03f, 4.704843660e-03f, 4.714451351e-03f,
+4.724050409e-03f, 4.733640819e-03f, 4.743222563e-03f, 4.752795626e-03f, 4.762359992e-03f, 4.771915644e-03f, 4.781462567e-03f, 4.791000745e-03f, 4.800530161e-03f, 4.810050799e-03f,
+4.819562643e-03f, 4.829065679e-03f, 4.838559888e-03f, 4.848045256e-03f, 4.857521767e-03f, 4.866989404e-03f, 4.876448152e-03f, 4.885897995e-03f, 4.895338916e-03f, 4.904770901e-03f,
+4.914193933e-03f, 4.923607997e-03f, 4.933013076e-03f, 4.942409155e-03f, 4.951796218e-03f, 4.961174249e-03f, 4.970543233e-03f, 4.979903153e-03f, 4.989253995e-03f, 4.998595742e-03f,
+5.007928379e-03f, 5.017251890e-03f, 5.026566259e-03f, 5.035871471e-03f, 5.045167510e-03f, 5.054454361e-03f, 5.063732007e-03f, 5.073000435e-03f, 5.082259627e-03f, 5.091509568e-03f,
+5.100750243e-03f, 5.109981637e-03f, 5.119203733e-03f, 5.128416517e-03f, 5.137619973e-03f, 5.146814085e-03f, 5.155998839e-03f, 5.165174218e-03f, 5.174340207e-03f, 5.183496792e-03f,
+5.192643956e-03f, 5.201781684e-03f, 5.210909961e-03f, 5.220028772e-03f, 5.229138102e-03f, 5.238237935e-03f, 5.247328255e-03f, 5.256409048e-03f, 5.265480299e-03f, 5.274541992e-03f,
+5.283594113e-03f, 5.292636645e-03f, 5.301669574e-03f, 5.310692885e-03f, 5.319706562e-03f, 5.328710591e-03f, 5.337704956e-03f, 5.346689643e-03f, 5.355664636e-03f, 5.364629921e-03f,
+5.373585482e-03f, 5.382531304e-03f, 5.391467373e-03f, 5.400393673e-03f, 5.409310190e-03f, 5.418216908e-03f, 5.427113814e-03f, 5.436000891e-03f, 5.444878125e-03f, 5.453745501e-03f,
+5.462603004e-03f, 5.471450621e-03f, 5.480288335e-03f, 5.489116131e-03f, 5.497933997e-03f, 5.506741915e-03f, 5.515539873e-03f, 5.524327854e-03f, 5.533105845e-03f, 5.541873831e-03f,
+5.550631797e-03f, 5.559379729e-03f, 5.568117611e-03f, 5.576845429e-03f, 5.585563170e-03f, 5.594270817e-03f, 5.602968358e-03f, 5.611655776e-03f, 5.620333058e-03f, 5.629000189e-03f,
+5.637657155e-03f, 5.646303941e-03f, 5.654940533e-03f, 5.663566916e-03f, 5.672183077e-03f, 5.680789000e-03f, 5.689384671e-03f, 5.697970077e-03f, 5.706545202e-03f, 5.715110032e-03f,
+5.723664554e-03f, 5.732208752e-03f, 5.740742613e-03f, 5.749266123e-03f, 5.757779266e-03f, 5.766282030e-03f, 5.774774399e-03f, 5.783256360e-03f, 5.791727899e-03f, 5.800189001e-03f,
+5.808639653e-03f, 5.817079839e-03f, 5.825509547e-03f, 5.833928762e-03f, 5.842337471e-03f, 5.850735658e-03f, 5.859123311e-03f, 5.867500415e-03f, 5.875866957e-03f, 5.884222922e-03f,
+5.892568296e-03f, 5.900903066e-03f, 5.909227217e-03f, 5.917540737e-03f, 5.925843610e-03f, 5.934135824e-03f, 5.942417365e-03f, 5.950688218e-03f, 5.958948370e-03f, 5.967197807e-03f,
+5.975436516e-03f, 5.983664483e-03f, 5.991881694e-03f, 6.000088135e-03f, 6.008283793e-03f, 6.016468655e-03f, 6.024642706e-03f, 6.032805933e-03f, 6.040958323e-03f, 6.049099862e-03f,
+6.057230536e-03f, 6.065350332e-03f, 6.073459237e-03f, 6.081557237e-03f, 6.089644318e-03f, 6.097720468e-03f, 6.105785672e-03f, 6.113839918e-03f, 6.121883192e-03f, 6.129915480e-03f,
+6.137936770e-03f, 6.145947049e-03f, 6.153946301e-03f, 6.161934516e-03f, 6.169911678e-03f, 6.177877776e-03f, 6.185832796e-03f, 6.193776724e-03f, 6.201709548e-03f, 6.209631254e-03f,
+6.217541830e-03f, 6.225441261e-03f, 6.233329536e-03f, 6.241206641e-03f, 6.249072562e-03f, 6.256927288e-03f, 6.264770804e-03f, 6.272603099e-03f, 6.280424158e-03f, 6.288233970e-03f,
+6.296032520e-03f, 6.303819797e-03f, 6.311595787e-03f, 6.319360478e-03f, 6.327113856e-03f, 6.334855909e-03f, 6.342586624e-03f, 6.350305988e-03f, 6.358013989e-03f, 6.365710613e-03f,
+6.373395848e-03f, 6.381069682e-03f, 6.388732101e-03f, 6.396383093e-03f, 6.404022646e-03f, 6.411650746e-03f, 6.419267381e-03f, 6.426872539e-03f, 6.434466206e-03f, 6.442048371e-03f,
+6.449619021e-03f, 6.457178144e-03f, 6.464725726e-03f, 6.472261755e-03f, 6.479786220e-03f, 6.487299107e-03f, 6.494800405e-03f, 6.502290100e-03f, 6.509768181e-03f, 6.517234635e-03f,
+6.524689450e-03f, 6.532132613e-03f, 6.539564112e-03f, 6.546983936e-03f, 6.554392071e-03f, 6.561788506e-03f, 6.569173229e-03f, 6.576546226e-03f, 6.583907487e-03f, 6.591256999e-03f,
+6.598594749e-03f, 6.605920727e-03f, 6.613234919e-03f, 6.620537313e-03f, 6.627827899e-03f, 6.635106663e-03f, 6.642373594e-03f, 6.649628679e-03f, 6.656871907e-03f, 6.664103266e-03f,
+6.671322744e-03f, 6.678530329e-03f, 6.685726010e-03f, 6.692909774e-03f, 6.700081609e-03f, 6.707241505e-03f, 6.714389448e-03f, 6.721525428e-03f, 6.728649432e-03f, 6.735761449e-03f,
+6.742861467e-03f, 6.749949475e-03f, 6.757025461e-03f, 6.764089413e-03f, 6.771141320e-03f, 6.778181170e-03f, 6.785208952e-03f, 6.792224653e-03f, 6.799228263e-03f, 6.806219771e-03f,
+6.813199163e-03f, 6.820166430e-03f, 6.827121560e-03f, 6.834064541e-03f, 6.840995361e-03f, 6.847914011e-03f, 6.854820477e-03f, 6.861714750e-03f, 6.868596817e-03f, 6.875466667e-03f,
+6.882324290e-03f, 6.889169673e-03f, 6.896002806e-03f, 6.902823678e-03f, 6.909632277e-03f, 6.916428592e-03f, 6.923212612e-03f, 6.929984326e-03f, 6.936743723e-03f, 6.943490791e-03f,
+6.950225521e-03f, 6.956947900e-03f, 6.963657918e-03f, 6.970355563e-03f, 6.977040826e-03f, 6.983713695e-03f, 6.990374158e-03f, 6.997022206e-03f, 7.003657827e-03f, 7.010281010e-03f,
+7.016891745e-03f, 7.023490021e-03f, 7.030075827e-03f, 7.036649153e-03f, 7.043209987e-03f, 7.049758319e-03f, 7.056294138e-03f, 7.062817434e-03f, 7.069328195e-03f, 7.075826412e-03f,
+7.082312074e-03f, 7.088785169e-03f, 7.095245689e-03f, 7.101693621e-03f, 7.108128956e-03f, 7.114551684e-03f, 7.120961792e-03f, 7.127359272e-03f, 7.133744113e-03f, 7.140116304e-03f,
+7.146475835e-03f, 7.152822696e-03f, 7.159156876e-03f, 7.165478366e-03f, 7.171787154e-03f, 7.178083230e-03f, 7.184366585e-03f, 7.190637208e-03f, 7.196895088e-03f, 7.203140217e-03f,
+7.209372583e-03f, 7.215592176e-03f, 7.221798987e-03f, 7.227993005e-03f, 7.234174220e-03f, 7.240342622e-03f, 7.246498202e-03f, 7.252640949e-03f, 7.258770853e-03f, 7.264887904e-03f,
+7.270992092e-03f, 7.277083408e-03f, 7.283161842e-03f, 7.289227383e-03f, 7.295280022e-03f, 7.301319750e-03f, 7.307346555e-03f, 7.313360429e-03f, 7.319361362e-03f, 7.325349345e-03f,
+7.331324366e-03f, 7.337286417e-03f, 7.343235489e-03f, 7.349171571e-03f, 7.355094653e-03f, 7.361004728e-03f, 7.366901783e-03f, 7.372785811e-03f, 7.378656802e-03f, 7.384514746e-03f,
+7.390359634e-03f, 7.396191456e-03f, 7.402010203e-03f, 7.407815866e-03f, 7.413608434e-03f, 7.419387900e-03f, 7.425154253e-03f, 7.430907484e-03f, 7.436647584e-03f, 7.442374544e-03f,
+7.448088354e-03f, 7.453789006e-03f, 7.459476489e-03f, 7.465150796e-03f, 7.470811916e-03f, 7.476459840e-03f, 7.482094561e-03f, 7.487716067e-03f, 7.493324352e-03f, 7.498919404e-03f,
+7.504501216e-03f, 7.510069779e-03f, 7.515625082e-03f, 7.521167119e-03f, 7.526695879e-03f, 7.532211354e-03f, 7.537713535e-03f, 7.543202412e-03f, 7.548677979e-03f, 7.554140224e-03f,
+7.559589140e-03f, 7.565024719e-03f, 7.570446950e-03f, 7.575855826e-03f, 7.581251338e-03f, 7.586633478e-03f, 7.592002236e-03f, 7.597357603e-03f, 7.602699573e-03f, 7.608028135e-03f,
+7.613343282e-03f, 7.618645004e-03f, 7.623933294e-03f, 7.629208143e-03f, 7.634469542e-03f, 7.639717484e-03f, 7.644951959e-03f, 7.650172959e-03f, 7.655380476e-03f, 7.660574503e-03f,
+7.665755029e-03f, 7.670922048e-03f, 7.676075550e-03f, 7.681215528e-03f, 7.686341974e-03f, 7.691454879e-03f, 7.696554235e-03f, 7.701640034e-03f, 7.706712268e-03f, 7.711770928e-03f,
+7.716816008e-03f, 7.721847498e-03f, 7.726865391e-03f, 7.731869679e-03f, 7.736860354e-03f, 7.741837407e-03f, 7.746800832e-03f, 7.751750619e-03f, 7.756686762e-03f, 7.761609252e-03f,
+7.766518081e-03f, 7.771413243e-03f, 7.776294728e-03f, 7.781162530e-03f, 7.786016640e-03f, 7.790857051e-03f, 7.795683755e-03f, 7.800496745e-03f, 7.805296013e-03f, 7.810081551e-03f,
+7.814853351e-03f, 7.819611407e-03f, 7.824355711e-03f, 7.829086254e-03f, 7.833803031e-03f, 7.838506032e-03f, 7.843195251e-03f, 7.847870681e-03f, 7.852532314e-03f, 7.857180142e-03f,
+7.861814159e-03f, 7.866434357e-03f, 7.871040728e-03f, 7.875633266e-03f, 7.880211963e-03f, 7.884776813e-03f, 7.889327807e-03f, 7.893864938e-03f, 7.898388201e-03f, 7.902897586e-03f,
+7.907393088e-03f, 7.911874700e-03f, 7.916342413e-03f, 7.920796222e-03f, 7.925236119e-03f, 7.929662097e-03f, 7.934074149e-03f, 7.938472269e-03f, 7.942856450e-03f, 7.947226684e-03f,
+7.951582964e-03f, 7.955925285e-03f, 7.960253639e-03f, 7.964568019e-03f, 7.968868419e-03f, 7.973154832e-03f, 7.977427251e-03f, 7.981685669e-03f, 7.985930081e-03f, 7.990160479e-03f,
+7.994376856e-03f, 7.998579207e-03f, 8.002767524e-03f, 8.006941801e-03f, 8.011102031e-03f, 8.015248209e-03f, 8.019380327e-03f, 8.023498379e-03f, 8.027602359e-03f, 8.031692261e-03f,
+8.035768077e-03f, 8.039829802e-03f, 8.043877430e-03f, 8.047910954e-03f, 8.051930367e-03f, 8.055935664e-03f, 8.059926839e-03f, 8.063903884e-03f, 8.067866795e-03f, 8.071815565e-03f,
+8.075750187e-03f, 8.079670657e-03f, 8.083576967e-03f, 8.087469111e-03f, 8.091347084e-03f, 8.095210880e-03f, 8.099060493e-03f, 8.102895916e-03f, 8.106717145e-03f, 8.110524172e-03f,
+8.114316992e-03f, 8.118095600e-03f, 8.121859989e-03f, 8.125610153e-03f, 8.129346088e-03f, 8.133067787e-03f, 8.136775244e-03f, 8.140468454e-03f, 8.144147411e-03f, 8.147812110e-03f,
+8.151462545e-03f, 8.155098710e-03f, 8.158720599e-03f, 8.162328208e-03f, 8.165921531e-03f, 8.169500561e-03f, 8.173065295e-03f, 8.176615726e-03f, 8.180151848e-03f, 8.183673657e-03f,
+8.187181148e-03f, 8.190674314e-03f, 8.194153150e-03f, 8.197617652e-03f, 8.201067814e-03f, 8.204503630e-03f, 8.207925096e-03f, 8.211332207e-03f, 8.214724956e-03f, 8.218103340e-03f,
+8.221467352e-03f, 8.224816988e-03f, 8.228152243e-03f, 8.231473112e-03f, 8.234779589e-03f, 8.238071670e-03f, 8.241349350e-03f, 8.244612624e-03f, 8.247861487e-03f, 8.251095933e-03f,
+8.254315959e-03f, 8.257521559e-03f, 8.260712729e-03f, 8.263889464e-03f, 8.267051758e-03f, 8.270199608e-03f, 8.273333008e-03f, 8.276451954e-03f, 8.279556442e-03f, 8.282646466e-03f,
+8.285722022e-03f, 8.288783105e-03f, 8.291829711e-03f, 8.294861835e-03f, 8.297879474e-03f, 8.300882621e-03f, 8.303871273e-03f, 8.306845426e-03f, 8.309805075e-03f, 8.312750215e-03f,
+8.315680843e-03f, 8.318596954e-03f, 8.321498543e-03f, 8.324385607e-03f, 8.327258140e-03f, 8.330116140e-03f, 8.332959601e-03f, 8.335788520e-03f, 8.338602892e-03f, 8.341402714e-03f,
+8.344187980e-03f, 8.346958688e-03f, 8.349714832e-03f, 8.352456410e-03f, 8.355183416e-03f, 8.357895847e-03f, 8.360593700e-03f, 8.363276969e-03f, 8.365945652e-03f, 8.368599744e-03f,
+8.371239242e-03f, 8.373864141e-03f, 8.376474438e-03f, 8.379070130e-03f, 8.381651211e-03f, 8.384217679e-03f, 8.386769531e-03f, 8.389306761e-03f, 8.391829367e-03f, 8.394337345e-03f,
+8.396830692e-03f, 8.399309403e-03f, 8.401773475e-03f, 8.404222906e-03f, 8.406657690e-03f, 8.409077826e-03f, 8.411483309e-03f, 8.413874135e-03f, 8.416250303e-03f, 8.418611807e-03f,
+8.420958646e-03f, 8.423290815e-03f, 8.425608311e-03f, 8.427911131e-03f, 8.430199272e-03f, 8.432472731e-03f, 8.434731504e-03f, 8.436975588e-03f, 8.439204980e-03f, 8.441419677e-03f,
+8.443619676e-03f, 8.445804974e-03f, 8.447975568e-03f, 8.450131454e-03f, 8.452272630e-03f, 8.454399093e-03f, 8.456510840e-03f, 8.458607868e-03f, 8.460690175e-03f, 8.462757756e-03f,
+8.464810610e-03f, 8.466848733e-03f, 8.468872123e-03f, 8.470880778e-03f, 8.472874694e-03f, 8.474853868e-03f, 8.476818299e-03f, 8.478767983e-03f, 8.480702917e-03f, 8.482623100e-03f,
+8.484528528e-03f, 8.486419200e-03f, 8.488295112e-03f, 8.490156261e-03f, 8.492002647e-03f, 8.493834265e-03f, 8.495651114e-03f, 8.497453192e-03f, 8.499240495e-03f, 8.501013022e-03f,
+8.502770770e-03f, 8.504513737e-03f, 8.506241921e-03f, 8.507955320e-03f, 8.509653930e-03f, 8.511337751e-03f, 8.513006779e-03f, 8.514661013e-03f, 8.516300451e-03f, 8.517925091e-03f,
+8.519534930e-03f, 8.521129966e-03f, 8.522710198e-03f, 8.524275624e-03f, 8.525826240e-03f, 8.527362047e-03f, 8.528883041e-03f, 8.530389221e-03f, 8.531880585e-03f, 8.533357131e-03f,
+8.534818858e-03f, 8.536265763e-03f, 8.537697844e-03f, 8.539115101e-03f, 8.540517531e-03f, 8.541905133e-03f, 8.543277905e-03f, 8.544635846e-03f, 8.545978953e-03f, 8.547307225e-03f,
+8.548620661e-03f, 8.549919260e-03f, 8.551203019e-03f, 8.552471937e-03f, 8.553726013e-03f, 8.554965246e-03f, 8.556189633e-03f, 8.557399174e-03f, 8.558593867e-03f, 8.559773712e-03f,
+8.560938706e-03f, 8.562088848e-03f, 8.563224137e-03f, 8.564344573e-03f, 8.565450153e-03f, 8.566540877e-03f, 8.567616743e-03f, 8.568677751e-03f, 8.569723899e-03f, 8.570755186e-03f,
+8.571771612e-03f, 8.572773174e-03f, 8.573759873e-03f, 8.574731707e-03f, 8.575688676e-03f, 8.576630778e-03f, 8.577558012e-03f, 8.578470378e-03f, 8.579367875e-03f, 8.580250502e-03f,
+8.581118259e-03f, 8.581971144e-03f, 8.582809156e-03f, 8.583632296e-03f, 8.584440563e-03f, 8.585233955e-03f, 8.586012472e-03f, 8.586776114e-03f, 8.587524880e-03f, 8.588258770e-03f,
+8.588977782e-03f, 8.589681917e-03f, 8.590371174e-03f, 8.591045553e-03f, 8.591705053e-03f, 8.592349673e-03f, 8.592979414e-03f, 8.593594275e-03f, 8.594194256e-03f, 8.594779357e-03f,
+8.595349576e-03f, 8.595904915e-03f, 8.596445372e-03f, 8.596970948e-03f, 8.597481642e-03f, 8.597977455e-03f, 8.598458386e-03f, 8.598924435e-03f, 8.599375602e-03f, 8.599811887e-03f,
+8.600233291e-03f, 8.600639812e-03f, 8.601031451e-03f, 8.601408209e-03f, 8.601770085e-03f, 8.602117079e-03f, 8.602449192e-03f, 8.602766424e-03f, 8.603068775e-03f, 8.603356244e-03f,
+8.603628834e-03f, 8.603886543e-03f, 8.604129372e-03f, 8.604357321e-03f, 8.604570391e-03f, 8.604768582e-03f, 8.604951895e-03f, 8.605120330e-03f, 8.605273887e-03f, 8.605412566e-03f,
+8.605536370e-03f, 8.605645297e-03f, 8.605739349e-03f, 8.605818526e-03f, 8.605882828e-03f, 8.605932257e-03f, 8.605966813e-03f, 8.605986497e-03f, 8.605991309e-03f, 8.605981250e-03f,
+8.605956321e-03f, 8.605916523e-03f, 8.605861856e-03f, 8.605792322e-03f, 8.605707921e-03f, 8.605608654e-03f, 8.605494523e-03f, 8.605365527e-03f, 8.605221668e-03f, 8.605062947e-03f,
+8.604889366e-03f, 8.604700924e-03f, 8.604497624e-03f, 8.604279466e-03f, 8.604046451e-03f, 8.603798580e-03f, 8.603535856e-03f, 8.603258278e-03f, 8.602965849e-03f, 8.602658568e-03f,
+8.602336439e-03f, 8.601999462e-03f, 8.601647637e-03f, 8.601280968e-03f, 8.600899454e-03f, 8.600503099e-03f, 8.600091901e-03f, 8.599665865e-03f, 8.599224990e-03f, 8.598769278e-03f,
+8.598298732e-03f, 8.597813352e-03f, 8.597313140e-03f, 8.596798097e-03f, 8.596268226e-03f, 8.595723528e-03f, 8.595164004e-03f, 8.594589657e-03f, 8.594000488e-03f, 8.593396499e-03f,
+8.592777691e-03f, 8.592144067e-03f, 8.591495628e-03f, 8.590832377e-03f, 8.590154314e-03f, 8.589461443e-03f, 8.588753764e-03f, 8.588031281e-03f, 8.587293994e-03f, 8.586541906e-03f,
+8.585775019e-03f, 8.584993336e-03f, 8.584196857e-03f, 8.583385586e-03f, 8.582559524e-03f, 8.581718674e-03f, 8.580863037e-03f, 8.579992617e-03f, 8.579107414e-03f, 8.578207433e-03f,
+8.577292674e-03f, 8.576363140e-03f, 8.575418834e-03f, 8.574459758e-03f, 8.573485914e-03f, 8.572497305e-03f, 8.571493933e-03f, 8.570475801e-03f, 8.569442911e-03f, 8.568395265e-03f,
+8.567332867e-03f, 8.566255719e-03f, 8.565163823e-03f, 8.564057182e-03f, 8.562935799e-03f, 8.561799676e-03f, 8.560648817e-03f, 8.559483223e-03f, 8.558302898e-03f, 8.557107844e-03f,
+8.555898065e-03f, 8.554673562e-03f, 8.553434340e-03f, 8.552180400e-03f, 8.550911746e-03f, 8.549628380e-03f, 8.548330306e-03f, 8.547017527e-03f, 8.545690045e-03f, 8.544347864e-03f,
+8.542990986e-03f, 8.541619416e-03f, 8.540233155e-03f, 8.538832207e-03f, 8.537416575e-03f, 8.535986263e-03f, 8.534541273e-03f, 8.533081609e-03f, 8.531607274e-03f, 8.530118272e-03f,
+8.528614605e-03f, 8.527096277e-03f, 8.525563291e-03f, 8.524015652e-03f, 8.522453361e-03f, 8.520876423e-03f, 8.519284841e-03f, 8.517678619e-03f, 8.516057759e-03f, 8.514422267e-03f,
+8.512772144e-03f, 8.511107396e-03f, 8.509428024e-03f, 8.507734034e-03f, 8.506025429e-03f, 8.504302211e-03f, 8.502564386e-03f, 8.500811957e-03f, 8.499044927e-03f, 8.497263301e-03f,
+8.495467082e-03f, 8.493656274e-03f, 8.491830881e-03f, 8.489990906e-03f, 8.488136355e-03f, 8.486267230e-03f, 8.484383535e-03f, 8.482485276e-03f, 8.480572455e-03f, 8.478645076e-03f,
+8.476703144e-03f, 8.474746664e-03f, 8.472775638e-03f, 8.470790071e-03f, 8.468789967e-03f, 8.466775331e-03f, 8.464746166e-03f, 8.462702477e-03f, 8.460644269e-03f, 8.458571545e-03f,
+8.456484309e-03f, 8.454382567e-03f, 8.452266322e-03f, 8.450135579e-03f, 8.447990342e-03f, 8.445830616e-03f, 8.443656405e-03f, 8.441467714e-03f, 8.439264547e-03f, 8.437046908e-03f,
+8.434814803e-03f, 8.432568236e-03f, 8.430307211e-03f, 8.428031733e-03f, 8.425741807e-03f, 8.423437437e-03f, 8.421118629e-03f, 8.418785386e-03f, 8.416437714e-03f, 8.414075617e-03f,
+8.411699101e-03f, 8.409308169e-03f, 8.406902828e-03f, 8.404483081e-03f, 8.402048935e-03f, 8.399600392e-03f, 8.397137460e-03f, 8.394660142e-03f, 8.392168443e-03f, 8.389662369e-03f,
+8.387141925e-03f, 8.384607115e-03f, 8.382057946e-03f, 8.379494421e-03f, 8.376916547e-03f, 8.374324328e-03f, 8.371717769e-03f, 8.369096876e-03f, 8.366461654e-03f, 8.363812109e-03f,
+8.361148245e-03f, 8.358470068e-03f, 8.355777583e-03f, 8.353070795e-03f, 8.350349711e-03f, 8.347614335e-03f, 8.344864673e-03f, 8.342100731e-03f, 8.339322513e-03f, 8.336530026e-03f,
+8.333723275e-03f, 8.330902265e-03f, 8.328067002e-03f, 8.325217492e-03f, 8.322353740e-03f, 8.319475753e-03f, 8.316583535e-03f, 8.313677092e-03f, 8.310756431e-03f, 8.307821556e-03f,
+8.304872474e-03f, 8.301909191e-03f, 8.298931712e-03f, 8.295940043e-03f, 8.292934191e-03f, 8.289914160e-03f, 8.286879958e-03f, 8.283831589e-03f, 8.280769060e-03f, 8.277692377e-03f,
+8.274601546e-03f, 8.271496573e-03f, 8.268377464e-03f, 8.265244225e-03f, 8.262096863e-03f, 8.258935383e-03f, 8.255759791e-03f, 8.252570095e-03f, 8.249366299e-03f, 8.246148411e-03f,
+8.242916436e-03f, 8.239670381e-03f, 8.236410252e-03f, 8.233136056e-03f, 8.229847798e-03f, 8.226545486e-03f, 8.223229125e-03f, 8.219898723e-03f, 8.216554285e-03f, 8.213195818e-03f,
+8.209823329e-03f, 8.206436824e-03f, 8.203036310e-03f, 8.199621793e-03f, 8.196193279e-03f, 8.192750776e-03f, 8.189294291e-03f, 8.185823829e-03f, 8.182339397e-03f, 8.178841003e-03f,
+8.175328653e-03f, 8.171802354e-03f, 8.168262112e-03f, 8.164707935e-03f, 8.161139828e-03f, 8.157557800e-03f, 8.153961857e-03f, 8.150352006e-03f, 8.146728254e-03f, 8.143090607e-03f,
+8.139439073e-03f, 8.135773659e-03f, 8.132094372e-03f, 8.128401219e-03f, 8.124694206e-03f, 8.120973342e-03f, 8.117238633e-03f, 8.113490086e-03f, 8.109727709e-03f, 8.105951508e-03f,
+8.102161492e-03f, 8.098357666e-03f, 8.094540039e-03f, 8.090708618e-03f, 8.086863410e-03f, 8.083004422e-03f, 8.079131663e-03f, 8.075245138e-03f, 8.071344855e-03f, 8.067430823e-03f,
+8.063503048e-03f, 8.059561538e-03f, 8.055606301e-03f, 8.051637344e-03f, 8.047654674e-03f, 8.043658299e-03f, 8.039648226e-03f, 8.035624464e-03f, 8.031587020e-03f, 8.027535902e-03f,
+8.023471117e-03f, 8.019392673e-03f, 8.015300577e-03f, 8.011194839e-03f, 8.007075464e-03f, 8.002942461e-03f, 7.998795839e-03f, 7.994635604e-03f, 7.990461765e-03f, 7.986274329e-03f,
+7.982073305e-03f, 7.977858700e-03f, 7.973630523e-03f, 7.969388781e-03f, 7.965133482e-03f, 7.960864635e-03f, 7.956582247e-03f, 7.952286326e-03f, 7.947976882e-03f, 7.943653921e-03f,
+7.939317452e-03f, 7.934967483e-03f, 7.930604023e-03f, 7.926227079e-03f, 7.921836660e-03f, 7.917432773e-03f, 7.913015428e-03f, 7.908584633e-03f, 7.904140396e-03f, 7.899682725e-03f,
+7.895211629e-03f, 7.890727115e-03f, 7.886229194e-03f, 7.881717872e-03f, 7.877193159e-03f, 7.872655062e-03f, 7.868103592e-03f, 7.863538755e-03f, 7.858960560e-03f, 7.854369017e-03f,
+7.849764134e-03f, 7.845145919e-03f, 7.840514381e-03f, 7.835869528e-03f, 7.831211370e-03f, 7.826539915e-03f, 7.821855172e-03f, 7.817157150e-03f, 7.812445857e-03f, 7.807721302e-03f,
+7.802983494e-03f, 7.798232443e-03f, 7.793468156e-03f, 7.788690642e-03f, 7.783899911e-03f, 7.779095972e-03f, 7.774278833e-03f, 7.769448504e-03f, 7.764604993e-03f, 7.759748310e-03f,
+7.754878463e-03f, 7.749995462e-03f, 7.745099316e-03f, 7.740190034e-03f, 7.735267625e-03f, 7.730332098e-03f, 7.725383462e-03f, 7.720421727e-03f, 7.715446902e-03f, 7.710458996e-03f,
+7.705458018e-03f, 7.700443978e-03f, 7.695416885e-03f, 7.690376748e-03f, 7.685323577e-03f, 7.680257381e-03f, 7.675178170e-03f, 7.670085952e-03f, 7.664980738e-03f, 7.659862537e-03f,
+7.654731358e-03f, 7.649587211e-03f, 7.644430105e-03f, 7.639260050e-03f, 7.634077056e-03f, 7.628881132e-03f, 7.623672288e-03f, 7.618450534e-03f, 7.613215878e-03f, 7.607968332e-03f,
+7.602707903e-03f, 7.597434604e-03f, 7.592148442e-03f, 7.586849428e-03f, 7.581537572e-03f, 7.576212883e-03f, 7.570875371e-03f, 7.565525047e-03f, 7.560161919e-03f, 7.554785999e-03f,
+7.549397295e-03f, 7.543995819e-03f, 7.538581579e-03f, 7.533154586e-03f, 7.527714850e-03f, 7.522262381e-03f, 7.516797188e-03f, 7.511319283e-03f, 7.505828675e-03f, 7.500325374e-03f,
+7.494809391e-03f, 7.489280735e-03f, 7.483739417e-03f, 7.478185447e-03f, 7.472618835e-03f, 7.467039592e-03f, 7.461447727e-03f, 7.455843252e-03f, 7.450226175e-03f, 7.444596509e-03f,
+7.438954263e-03f, 7.433299447e-03f, 7.427632072e-03f, 7.421952148e-03f, 7.416259686e-03f, 7.410554696e-03f, 7.404837189e-03f, 7.399107175e-03f, 7.393364665e-03f, 7.387609669e-03f,
+7.381842198e-03f, 7.376062263e-03f, 7.370269873e-03f, 7.364465040e-03f, 7.358647775e-03f, 7.352818087e-03f, 7.346975989e-03f, 7.341121489e-03f, 7.335254600e-03f, 7.329375332e-03f,
+7.323483696e-03f, 7.317579702e-03f, 7.311663362e-03f, 7.305734685e-03f, 7.299793684e-03f, 7.293840369e-03f, 7.287874751e-03f, 7.281896840e-03f, 7.275906648e-03f, 7.269904186e-03f,
+7.263889465e-03f, 7.257862495e-03f, 7.251823288e-03f, 7.245771855e-03f, 7.239708207e-03f, 7.233632354e-03f, 7.227544309e-03f, 7.221444082e-03f, 7.215331684e-03f, 7.209207127e-03f,
+7.203070422e-03f, 7.196921579e-03f, 7.190760611e-03f, 7.184587528e-03f, 7.178402342e-03f, 7.172205063e-03f, 7.165995704e-03f, 7.159774276e-03f, 7.153540790e-03f, 7.147295257e-03f,
+7.141037689e-03f, 7.134768097e-03f, 7.128486493e-03f, 7.122192888e-03f, 7.115887293e-03f, 7.109569721e-03f, 7.103240182e-03f, 7.096898689e-03f, 7.090545252e-03f, 7.084179883e-03f,
+7.077802594e-03f, 7.071413397e-03f, 7.065012303e-03f, 7.058599323e-03f, 7.052174471e-03f, 7.045737756e-03f, 7.039289191e-03f, 7.032828788e-03f, 7.026356558e-03f, 7.019872513e-03f,
+7.013376666e-03f, 7.006869027e-03f, 7.000349609e-03f, 6.993818423e-03f, 6.987275482e-03f, 6.980720797e-03f, 6.974154380e-03f, 6.967576243e-03f, 6.960986398e-03f, 6.954384857e-03f,
+6.947771633e-03f, 6.941146736e-03f, 6.934510179e-03f, 6.927861975e-03f, 6.921202135e-03f, 6.914530671e-03f, 6.907847596e-03f, 6.901152921e-03f, 6.894446659e-03f, 6.887728821e-03f,
+6.880999421e-03f, 6.874258470e-03f, 6.867505981e-03f, 6.860741965e-03f, 6.853966435e-03f, 6.847179404e-03f, 6.840380883e-03f, 6.833570885e-03f, 6.826749423e-03f, 6.819916508e-03f,
+6.813072153e-03f, 6.806216371e-03f, 6.799349173e-03f, 6.792470573e-03f, 6.785580582e-03f, 6.778679214e-03f, 6.771766480e-03f, 6.764842394e-03f, 6.757906968e-03f, 6.750960213e-03f,
+6.744002144e-03f, 6.737032772e-03f, 6.730052111e-03f, 6.723060172e-03f, 6.716056968e-03f, 6.709042513e-03f, 6.702016818e-03f, 6.694979897e-03f, 6.687931762e-03f, 6.680872425e-03f,
+6.673801901e-03f, 6.666720201e-03f, 6.659627338e-03f, 6.652523325e-03f, 6.645408175e-03f, 6.638281901e-03f, 6.631144516e-03f, 6.623996032e-03f, 6.616836463e-03f, 6.609665820e-03f,
+6.602484119e-03f, 6.595291370e-03f, 6.588087588e-03f, 6.580872785e-03f, 6.573646974e-03f, 6.566410169e-03f, 6.559162382e-03f, 6.551903627e-03f, 6.544633916e-03f, 6.537353262e-03f,
+6.530061680e-03f, 6.522759181e-03f, 6.515445780e-03f, 6.508121489e-03f, 6.500786321e-03f, 6.493440290e-03f, 6.486083409e-03f, 6.478715691e-03f, 6.471337150e-03f, 6.463947799e-03f,
+6.456547651e-03f, 6.449136719e-03f, 6.441715017e-03f, 6.434282558e-03f, 6.426839355e-03f, 6.419385423e-03f, 6.411920773e-03f, 6.404445421e-03f, 6.396959379e-03f, 6.389462660e-03f,
+6.381955279e-03f, 6.374437249e-03f, 6.366908582e-03f, 6.359369294e-03f, 6.351819397e-03f, 6.344258905e-03f, 6.336687831e-03f, 6.329106189e-03f, 6.321513994e-03f, 6.313911257e-03f,
+6.306297994e-03f, 6.298674217e-03f, 6.291039941e-03f, 6.283395179e-03f, 6.275739946e-03f, 6.268074253e-03f, 6.260398116e-03f, 6.252711549e-03f, 6.245014564e-03f, 6.237307177e-03f,
+6.229589400e-03f, 6.221861247e-03f, 6.214122733e-03f, 6.206373872e-03f, 6.198614676e-03f, 6.190845161e-03f, 6.183065340e-03f, 6.175275227e-03f, 6.167474836e-03f, 6.159664181e-03f,
+6.151843276e-03f, 6.144012136e-03f, 6.136170773e-03f, 6.128319203e-03f, 6.120457438e-03f, 6.112585495e-03f, 6.104703385e-03f, 6.096811125e-03f, 6.088908727e-03f, 6.080996206e-03f,
+6.073073576e-03f, 6.065140851e-03f, 6.057198046e-03f, 6.049245175e-03f, 6.041282252e-03f, 6.033309291e-03f, 6.025326306e-03f, 6.017333313e-03f, 6.009330324e-03f, 6.001317355e-03f,
+5.993294420e-03f, 5.985261533e-03f, 5.977218709e-03f, 5.969165962e-03f, 5.961103306e-03f, 5.953030756e-03f, 5.944948326e-03f, 5.936856031e-03f, 5.928753885e-03f, 5.920641903e-03f,
+5.912520099e-03f, 5.904388487e-03f, 5.896247083e-03f, 5.888095901e-03f, 5.879934956e-03f, 5.871764261e-03f, 5.863583832e-03f, 5.855393683e-03f, 5.847193829e-03f, 5.838984285e-03f,
+5.830765065e-03f, 5.822536183e-03f, 5.814297656e-03f, 5.806049496e-03f, 5.797791720e-03f, 5.789524342e-03f, 5.781247376e-03f, 5.772960837e-03f, 5.764664741e-03f, 5.756359102e-03f,
+5.748043934e-03f, 5.739719253e-03f, 5.731385074e-03f, 5.723041411e-03f, 5.714688279e-03f, 5.706325694e-03f, 5.697953670e-03f, 5.689572221e-03f, 5.681181364e-03f, 5.672781113e-03f,
+5.664371483e-03f, 5.655952488e-03f, 5.647524145e-03f, 5.639086468e-03f, 5.630639472e-03f, 5.622183172e-03f, 5.613717583e-03f, 5.605242720e-03f, 5.596758599e-03f, 5.588265235e-03f,
+5.579762642e-03f, 5.571250836e-03f, 5.562729832e-03f, 5.554199646e-03f, 5.545660291e-03f, 5.537111785e-03f, 5.528554141e-03f, 5.519987375e-03f, 5.511411503e-03f, 5.502826539e-03f,
+5.494232499e-03f, 5.485629399e-03f, 5.477017253e-03f, 5.468396077e-03f, 5.459765886e-03f, 5.451126696e-03f, 5.442478521e-03f, 5.433821378e-03f, 5.425155282e-03f, 5.416480248e-03f,
+5.407796292e-03f, 5.399103429e-03f, 5.390401675e-03f, 5.381691044e-03f, 5.372971553e-03f, 5.364243217e-03f, 5.355506052e-03f, 5.346760073e-03f, 5.338005295e-03f, 5.329241735e-03f,
+5.320469407e-03f, 5.311688329e-03f, 5.302898514e-03f, 5.294099978e-03f, 5.285292738e-03f, 5.276476809e-03f, 5.267652207e-03f, 5.258818947e-03f, 5.249977045e-03f, 5.241126517e-03f,
+5.232267378e-03f, 5.223399644e-03f, 5.214523332e-03f, 5.205638456e-03f, 5.196745032e-03f, 5.187843077e-03f, 5.178932606e-03f, 5.170013635e-03f, 5.161086180e-03f, 5.152150256e-03f,
+5.143205880e-03f, 5.134253067e-03f, 5.125291834e-03f, 5.116322195e-03f, 5.107344168e-03f, 5.098357768e-03f, 5.089363010e-03f, 5.080359912e-03f, 5.071348489e-03f, 5.062328756e-03f,
+5.053300730e-03f, 5.044264428e-03f, 5.035219864e-03f, 5.026167055e-03f, 5.017106017e-03f, 5.008036767e-03f, 4.998959319e-03f, 4.989873691e-03f, 4.980779898e-03f, 4.971677957e-03f,
+4.962567884e-03f, 4.953449694e-03f, 4.944323404e-03f, 4.935189031e-03f, 4.926046589e-03f, 4.916896097e-03f, 4.907737569e-03f, 4.898571022e-03f, 4.889396472e-03f, 4.880213936e-03f,
+4.871023429e-03f, 4.861824969e-03f, 4.852618570e-03f, 4.843404251e-03f, 4.834182026e-03f, 4.824951913e-03f, 4.815713927e-03f, 4.806468086e-03f, 4.797214404e-03f, 4.787952900e-03f,
+4.778683588e-03f, 4.769406486e-03f, 4.760121611e-03f, 4.750828977e-03f, 4.741528602e-03f, 4.732220503e-03f, 4.722904695e-03f, 4.713581196e-03f, 4.704250021e-03f, 4.694911188e-03f,
+4.685564712e-03f, 4.676210611e-03f, 4.666848900e-03f, 4.657479597e-03f, 4.648102718e-03f, 4.638718280e-03f, 4.629326299e-03f, 4.619926791e-03f, 4.610519774e-03f, 4.601105264e-03f,
+4.591683278e-03f, 4.582253831e-03f, 4.572816942e-03f, 4.563372627e-03f, 4.553920902e-03f, 4.544461784e-03f, 4.534995290e-03f, 4.525521436e-03f, 4.516040239e-03f, 4.506551717e-03f,
+4.497055885e-03f, 4.487552761e-03f, 4.478042361e-03f, 4.468524702e-03f, 4.458999801e-03f, 4.449467675e-03f, 4.439928341e-03f, 4.430381815e-03f, 4.420828114e-03f, 4.411267255e-03f,
+4.401699256e-03f, 4.392124132e-03f, 4.382541901e-03f, 4.372952580e-03f, 4.363356185e-03f, 4.353752735e-03f, 4.344142244e-03f, 4.334524731e-03f, 4.324900213e-03f, 4.315268706e-03f,
+4.305630228e-03f, 4.295984795e-03f, 4.286332424e-03f, 4.276673133e-03f, 4.267006939e-03f, 4.257333858e-03f, 4.247653908e-03f, 4.237967105e-03f, 4.228273467e-03f, 4.218573011e-03f,
+4.208865754e-03f, 4.199151714e-03f, 4.189430906e-03f, 4.179703349e-03f, 4.169969059e-03f, 4.160228054e-03f, 4.150480351e-03f, 4.140725967e-03f, 4.130964919e-03f, 4.121197224e-03f,
+4.111422900e-03f, 4.101641964e-03f, 4.091854433e-03f, 4.082060324e-03f, 4.072259655e-03f, 4.062452443e-03f, 4.052638705e-03f, 4.042818458e-03f, 4.032991720e-03f, 4.023158508e-03f,
+4.013318839e-03f, 4.003472730e-03f, 3.993620200e-03f, 3.983761265e-03f, 3.973895943e-03f, 3.964024251e-03f, 3.954146206e-03f, 3.944261826e-03f, 3.934371128e-03f, 3.924474130e-03f,
+3.914570848e-03f, 3.904661302e-03f, 3.894745507e-03f, 3.884823481e-03f, 3.874895242e-03f, 3.864960808e-03f, 3.855020195e-03f, 3.845073421e-03f, 3.835120504e-03f, 3.825161462e-03f,
+3.815196311e-03f, 3.805225069e-03f, 3.795247754e-03f, 3.785264383e-03f, 3.775274975e-03f, 3.765279545e-03f, 3.755278113e-03f, 3.745270696e-03f, 3.735257310e-03f, 3.725237974e-03f,
+3.715212706e-03f, 3.705181523e-03f, 3.695144442e-03f, 3.685101482e-03f, 3.675052660e-03f, 3.664997993e-03f, 3.654937500e-03f, 3.644871197e-03f, 3.634799103e-03f, 3.624721236e-03f,
+3.614637612e-03f, 3.604548251e-03f, 3.594453168e-03f, 3.584352383e-03f, 3.574245913e-03f, 3.564133775e-03f, 3.554015988e-03f, 3.543892569e-03f, 3.533763536e-03f, 3.523628907e-03f,
+3.513488699e-03f, 3.503342931e-03f, 3.493191620e-03f, 3.483034784e-03f, 3.472872440e-03f, 3.462704608e-03f, 3.452531303e-03f, 3.442352546e-03f, 3.432168352e-03f, 3.421978740e-03f,
+3.411783728e-03f, 3.401583334e-03f, 3.391377576e-03f, 3.381166472e-03f, 3.370950039e-03f, 3.360728295e-03f, 3.350501259e-03f, 3.340268948e-03f, 3.330031380e-03f, 3.319788574e-03f,
+3.309540547e-03f, 3.299287317e-03f, 3.289028902e-03f, 3.278765320e-03f, 3.268496589e-03f, 3.258222728e-03f, 3.247943753e-03f, 3.237659684e-03f, 3.227370537e-03f, 3.217076332e-03f,
+3.206777087e-03f, 3.196472818e-03f, 3.186163545e-03f, 3.175849285e-03f, 3.165530057e-03f, 3.155205878e-03f, 3.144876767e-03f, 3.134542741e-03f, 3.124203820e-03f, 3.113860020e-03f,
+3.103511360e-03f, 3.093157859e-03f, 3.082799534e-03f, 3.072436403e-03f, 3.062068485e-03f, 3.051695798e-03f, 3.041318359e-03f, 3.030936188e-03f, 3.020549302e-03f, 3.010157719e-03f,
+2.999761458e-03f, 2.989360537e-03f, 2.978954974e-03f, 2.968544787e-03f, 2.958129995e-03f, 2.947710615e-03f, 2.937286667e-03f, 2.926858167e-03f, 2.916425135e-03f, 2.905987588e-03f,
+2.895545546e-03f, 2.885099025e-03f, 2.874648045e-03f, 2.864192624e-03f, 2.853732780e-03f, 2.843268531e-03f, 2.832799896e-03f, 2.822326893e-03f, 2.811849540e-03f, 2.801367856e-03f,
+2.790881858e-03f, 2.780391566e-03f, 2.769896997e-03f, 2.759398171e-03f, 2.748895104e-03f, 2.738387817e-03f, 2.727876326e-03f, 2.717360650e-03f, 2.706840809e-03f, 2.696316819e-03f,
+2.685788701e-03f, 2.675256471e-03f, 2.664720148e-03f, 2.654179751e-03f, 2.643635298e-03f, 2.633086808e-03f, 2.622534299e-03f, 2.611977790e-03f, 2.601417298e-03f, 2.590852842e-03f,
+2.580284442e-03f, 2.569712115e-03f, 2.559135879e-03f, 2.548555753e-03f, 2.537971757e-03f, 2.527383907e-03f, 2.516792223e-03f, 2.506196723e-03f, 2.495597426e-03f, 2.484994350e-03f,
+2.474387513e-03f, 2.463776935e-03f, 2.453162633e-03f, 2.442544627e-03f, 2.431922934e-03f, 2.421297574e-03f, 2.410668564e-03f, 2.400035924e-03f, 2.389399671e-03f, 2.378759826e-03f,
+2.368116405e-03f, 2.357469427e-03f, 2.346818912e-03f, 2.336164878e-03f, 2.325507343e-03f, 2.314846326e-03f, 2.304181846e-03f, 2.293513920e-03f, 2.282842568e-03f, 2.272167809e-03f,
+2.261489661e-03f, 2.250808142e-03f, 2.240123271e-03f, 2.229435068e-03f, 2.218743549e-03f, 2.208048735e-03f, 2.197350644e-03f, 2.186649294e-03f, 2.175944704e-03f, 2.165236893e-03f,
+2.154525879e-03f, 2.143811681e-03f, 2.133094318e-03f, 2.122373808e-03f, 2.111650170e-03f, 2.100923423e-03f, 2.090193586e-03f, 2.079460677e-03f, 2.068724714e-03f, 2.057985717e-03f,
+2.047243704e-03f, 2.036498695e-03f, 2.025750707e-03f, 2.014999759e-03f, 2.004245870e-03f, 1.993489060e-03f, 1.982729346e-03f, 1.971966747e-03f, 1.961201282e-03f, 1.950432970e-03f,
+1.939661830e-03f, 1.928887879e-03f, 1.918111138e-03f, 1.907331625e-03f, 1.896549358e-03f, 1.885764357e-03f, 1.874976640e-03f, 1.864186226e-03f, 1.853393133e-03f, 1.842597381e-03f,
+1.831798988e-03f, 1.820997973e-03f, 1.810194355e-03f, 1.799388152e-03f, 1.788579384e-03f, 1.777768070e-03f, 1.766954227e-03f, 1.756137875e-03f, 1.745319033e-03f, 1.734497719e-03f,
+1.723673952e-03f, 1.712847752e-03f, 1.702019137e-03f, 1.691188125e-03f, 1.680354736e-03f, 1.669518988e-03f, 1.658680901e-03f, 1.647840493e-03f, 1.636997783e-03f, 1.626152790e-03f,
+1.615305532e-03f, 1.604456029e-03f, 1.593604299e-03f, 1.582750362e-03f, 1.571894236e-03f, 1.561035939e-03f, 1.550175492e-03f, 1.539312912e-03f, 1.528448219e-03f, 1.517581432e-03f,
+1.506712568e-03f, 1.495841648e-03f, 1.484968691e-03f, 1.474093714e-03f, 1.463216737e-03f, 1.452337779e-03f, 1.441456858e-03f, 1.430573995e-03f, 1.419689206e-03f, 1.408802513e-03f,
+1.397913932e-03f, 1.387023484e-03f, 1.376131186e-03f, 1.365237059e-03f, 1.354341121e-03f, 1.343443391e-03f, 1.332543887e-03f, 1.321642630e-03f, 1.310739636e-03f, 1.299834927e-03f,
+1.288928520e-03f, 1.278020434e-03f, 1.267110689e-03f, 1.256199303e-03f, 1.245286295e-03f, 1.234371684e-03f, 1.223455490e-03f, 1.212537730e-03f, 1.201618425e-03f, 1.190697592e-03f,
+1.179775251e-03f, 1.168851421e-03f, 1.157926121e-03f, 1.146999369e-03f, 1.136071186e-03f, 1.125141588e-03f, 1.114210597e-03f, 1.103278230e-03f, 1.092344506e-03f, 1.081409445e-03f,
+1.070473065e-03f, 1.059535386e-03f, 1.048596426e-03f, 1.037656204e-03f, 1.026714739e-03f, 1.015772051e-03f, 1.004828158e-03f, 9.938830792e-04f, 9.829368334e-04f, 9.719894398e-04f,
+9.610409172e-04f, 9.500912846e-04f, 9.391405611e-04f, 9.281887656e-04f, 9.172359171e-04f, 9.062820345e-04f, 8.953271369e-04f, 8.843712432e-04f, 8.734143723e-04f, 8.624565433e-04f,
+8.514977752e-04f, 8.405380869e-04f, 8.295774975e-04f, 8.186160258e-04f, 8.076536909e-04f, 7.966905118e-04f, 7.857265074e-04f, 7.747616968e-04f, 7.637960989e-04f, 7.528297326e-04f,
+7.418626171e-04f, 7.308947713e-04f, 7.199262141e-04f, 7.089569645e-04f, 6.979870416e-04f, 6.870164644e-04f, 6.760452517e-04f, 6.650734226e-04f, 6.541009962e-04f, 6.431279913e-04f,
+6.321544269e-04f, 6.211803222e-04f, 6.102056959e-04f, 5.992305672e-04f, 5.882549550e-04f, 5.772788783e-04f, 5.663023561e-04f, 5.553254074e-04f, 5.443480511e-04f, 5.333703063e-04f,
+5.223921919e-04f, 5.114137270e-04f, 5.004349305e-04f, 4.894558213e-04f, 4.784764186e-04f, 4.674967412e-04f, 4.565168081e-04f, 4.455366384e-04f, 4.345562510e-04f, 4.235756649e-04f,
+4.125948991e-04f, 4.016139726e-04f, 3.906329042e-04f, 3.796517132e-04f, 3.686704183e-04f, 3.576890386e-04f, 3.467075930e-04f, 3.357261006e-04f, 3.247445803e-04f, 3.137630511e-04f,
+3.027815319e-04f, 2.918000418e-04f, 2.808185997e-04f, 2.698372245e-04f, 2.588559353e-04f, 2.478747510e-04f, 2.368936906e-04f, 2.259127731e-04f, 2.149320173e-04f, 2.039514423e-04f,
+1.929710671e-04f, 1.819909106e-04f, 1.710109917e-04f, 1.600313295e-04f, 1.490519428e-04f, 1.380728507e-04f, 1.270940720e-04f, 1.161156258e-04f, 1.051375310e-04f, 9.415980658e-05f,
+8.318247141e-05f, 7.220554448e-05f, 6.122904473e-05f, 5.025299110e-05f, 3.927740255e-05f, 2.830229801e-05f, 1.732769641e-05f, 6.353616691e-06f, -4.619922207e-06f, -1.559290136e-05f,
+-2.656530182e-05f, -3.753710468e-05f, -4.850829101e-05f, -5.947884187e-05f, -7.044873835e-05f, -8.141796152e-05f, -9.238649247e-05f, -1.033543123e-04f, -1.143214020e-04f, -1.252877428e-04f,
+-1.362533158e-04f, -1.472181019e-04f, -1.581820824e-04f, -1.691452382e-04f, -1.801075506e-04f, -1.910690006e-04f, -2.020295693e-04f, -2.129892378e-04f, -2.239479873e-04f, -2.349057988e-04f,
+-2.458626535e-04f, -2.568185324e-04f, -2.677734167e-04f, -2.787272876e-04f, -2.896801261e-04f, -3.006319134e-04f, -3.115826306e-04f, -3.225322588e-04f, -3.334807792e-04f, -3.444281729e-04f,
+-3.553744210e-04f, -3.663195048e-04f, -3.772634053e-04f, -3.882061037e-04f, -3.991475811e-04f, -4.100878188e-04f, -4.210267978e-04f, -4.319644993e-04f, -4.429009046e-04f, -4.538359947e-04f,
+-4.647697509e-04f, -4.757021543e-04f, -4.866331861e-04f, -4.975628274e-04f, -5.084910595e-04f, -5.194178636e-04f, -5.303432208e-04f, -5.412671124e-04f, -5.521895195e-04f, -5.631104234e-04f,
+-5.740298052e-04f, -5.849476462e-04f, -5.958639275e-04f, -6.067786304e-04f, -6.176917362e-04f, -6.286032260e-04f, -6.395130811e-04f, -6.504212826e-04f, -6.613278120e-04f, -6.722326502e-04f,
+-6.831357788e-04f, -6.940371787e-04f, -7.049368314e-04f, -7.158347181e-04f, -7.267308200e-04f, -7.376251185e-04f, -7.485175946e-04f, -7.594082299e-04f, -7.702970054e-04f, -7.811839026e-04f,
+-7.920689026e-04f, -8.029519868e-04f, -8.138331364e-04f, -8.247123328e-04f, -8.355895573e-04f, -8.464647912e-04f, -8.573380157e-04f, -8.682092122e-04f, -8.790783620e-04f, -8.899454465e-04f,
+-9.008104469e-04f, -9.116733446e-04f, -9.225341209e-04f, -9.333927573e-04f, -9.442492349e-04f, -9.551035352e-04f, -9.659556395e-04f, -9.768055293e-04f, -9.876531857e-04f, -9.984985903e-04f,
+-1.009341724e-03f, -1.020182569e-03f, -1.031021107e-03f, -1.041857317e-03f, -1.052691183e-03f, -1.063522686e-03f, -1.074351806e-03f, -1.085178525e-03f, -1.096002826e-03f, -1.106824688e-03f,
+-1.117644094e-03f, -1.128461024e-03f, -1.139275461e-03f, -1.150087386e-03f, -1.160896781e-03f, -1.171703625e-03f, -1.182507902e-03f, -1.193309593e-03f, -1.204108679e-03f, -1.214905141e-03f,
+-1.225698962e-03f, -1.236490122e-03f, -1.247278603e-03f, -1.258064386e-03f, -1.268847454e-03f, -1.279627787e-03f, -1.290405367e-03f, -1.301180176e-03f, -1.311952195e-03f, -1.322721405e-03f,
+-1.333487789e-03f, -1.344251327e-03f, -1.355012001e-03f, -1.365769793e-03f, -1.376524685e-03f, -1.387276657e-03f, -1.398025692e-03f, -1.408771771e-03f, -1.419514876e-03f, -1.430254988e-03f,
+-1.440992088e-03f, -1.451726159e-03f, -1.462457183e-03f, -1.473185139e-03f, -1.483910011e-03f, -1.494631780e-03f, -1.505350427e-03f, -1.516065935e-03f, -1.526778284e-03f, -1.537487457e-03f,
+-1.548193435e-03f, -1.558896199e-03f, -1.569595732e-03f, -1.580292015e-03f, -1.590985030e-03f, -1.601674758e-03f, -1.612361182e-03f, -1.623044282e-03f, -1.633724041e-03f, -1.644400440e-03f,
+-1.655073462e-03f, -1.665743087e-03f, -1.676409297e-03f, -1.687072075e-03f, -1.697731402e-03f, -1.708387259e-03f, -1.719039629e-03f, -1.729688493e-03f, -1.740333834e-03f, -1.750975632e-03f,
+-1.761613869e-03f, -1.772248529e-03f, -1.782879591e-03f, -1.793507038e-03f, -1.804130853e-03f, -1.814751015e-03f, -1.825367509e-03f, -1.835980315e-03f, -1.846589415e-03f, -1.857194791e-03f,
+-1.867796425e-03f, -1.878394299e-03f, -1.888988394e-03f, -1.899578693e-03f, -1.910165178e-03f, -1.920747829e-03f, -1.931326631e-03f, -1.941901563e-03f, -1.952472608e-03f, -1.963039749e-03f,
+-1.973602966e-03f, -1.984162242e-03f, -1.994717560e-03f, -2.005268900e-03f, -2.015816245e-03f, -2.026359576e-03f, -2.036898877e-03f, -2.047434128e-03f, -2.057965312e-03f, -2.068492410e-03f,
+-2.079015406e-03f, -2.089534280e-03f, -2.100049015e-03f, -2.110559593e-03f, -2.121065996e-03f, -2.131568206e-03f, -2.142066205e-03f, -2.152559975e-03f, -2.163049499e-03f, -2.173534757e-03f,
+-2.184015733e-03f, -2.194492409e-03f, -2.204964766e-03f, -2.215432787e-03f, -2.225896454e-03f, -2.236355749e-03f, -2.246810654e-03f, -2.257261151e-03f, -2.267707223e-03f, -2.278148851e-03f,
+-2.288586018e-03f, -2.299018707e-03f, -2.309446898e-03f, -2.319870575e-03f, -2.330289720e-03f, -2.340704314e-03f, -2.351114341e-03f, -2.361519782e-03f, -2.371920620e-03f, -2.382316836e-03f,
+-2.392708414e-03f, -2.403095335e-03f, -2.413477582e-03f, -2.423855137e-03f, -2.434227982e-03f, -2.444596099e-03f, -2.454959472e-03f, -2.465318082e-03f, -2.475671912e-03f, -2.486020943e-03f,
+-2.496365159e-03f, -2.506704542e-03f, -2.517039074e-03f, -2.527368737e-03f, -2.537693514e-03f, -2.548013387e-03f, -2.558328339e-03f, -2.568638352e-03f, -2.578943409e-03f, -2.589243492e-03f,
+-2.599538583e-03f, -2.609828665e-03f, -2.620113720e-03f, -2.630393732e-03f, -2.640668682e-03f, -2.650938552e-03f, -2.661203326e-03f, -2.671462986e-03f, -2.681717514e-03f, -2.691966893e-03f,
+-2.702211106e-03f, -2.712450135e-03f, -2.722683962e-03f, -2.732912571e-03f, -2.743135944e-03f, -2.753354063e-03f, -2.763566911e-03f, -2.773774470e-03f, -2.783976724e-03f, -2.794173655e-03f,
+-2.804365245e-03f, -2.814551478e-03f, -2.824732335e-03f, -2.834907800e-03f, -2.845077855e-03f, -2.855242484e-03f, -2.865401668e-03f, -2.875555390e-03f, -2.885703633e-03f, -2.895846381e-03f,
+-2.905983615e-03f, -2.916115318e-03f, -2.926241473e-03f, -2.936362064e-03f, -2.946477072e-03f, -2.956586480e-03f, -2.966690272e-03f, -2.976788431e-03f, -2.986880938e-03f, -2.996967777e-03f,
+-3.007048931e-03f, -3.017124382e-03f, -3.027194114e-03f, -3.037258109e-03f, -3.047316350e-03f, -3.057368821e-03f, -3.067415503e-03f, -3.077456381e-03f, -3.087491436e-03f, -3.097520653e-03f,
+-3.107544013e-03f, -3.117561500e-03f, -3.127573097e-03f, -3.137578787e-03f, -3.147578553e-03f, -3.157572377e-03f, -3.167560244e-03f, -3.177542135e-03f, -3.187518034e-03f, -3.197487925e-03f,
+-3.207451789e-03f, -3.217409611e-03f, -3.227361373e-03f, -3.237307058e-03f, -3.247246650e-03f, -3.257180132e-03f, -3.267107487e-03f, -3.277028697e-03f, -3.286943747e-03f, -3.296852619e-03f,
+-3.306755296e-03f, -3.316651763e-03f, -3.326542001e-03f, -3.336425994e-03f, -3.346303726e-03f, -3.356175179e-03f, -3.366040337e-03f, -3.375899184e-03f, -3.385751702e-03f, -3.395597874e-03f,
+-3.405437685e-03f, -3.415271117e-03f, -3.425098154e-03f, -3.434918778e-03f, -3.444732975e-03f, -3.454540725e-03f, -3.464342015e-03f, -3.474136825e-03f, -3.483925141e-03f, -3.493706945e-03f,
+-3.503482220e-03f, -3.513250951e-03f, -3.523013121e-03f, -3.532768713e-03f, -3.542517710e-03f, -3.552260096e-03f, -3.561995855e-03f, -3.571724970e-03f, -3.581447425e-03f, -3.591163203e-03f,
+-3.600872287e-03f, -3.610574662e-03f, -3.620270311e-03f, -3.629959217e-03f, -3.639641364e-03f, -3.649316736e-03f, -3.658985316e-03f, -3.668647088e-03f, -3.678302036e-03f, -3.687950142e-03f,
+-3.697591392e-03f, -3.707225768e-03f, -3.716853254e-03f, -3.726473835e-03f, -3.736087493e-03f, -3.745694213e-03f, -3.755293977e-03f, -3.764886771e-03f, -3.774472577e-03f, -3.784051380e-03f,
+-3.793623164e-03f, -3.803187911e-03f, -3.812745606e-03f, -3.822296234e-03f, -3.831839776e-03f, -3.841376219e-03f, -3.850905545e-03f, -3.860427738e-03f, -3.869942782e-03f, -3.879450661e-03f,
+-3.888951360e-03f, -3.898444861e-03f, -3.907931150e-03f, -3.917410209e-03f, -3.926882023e-03f, -3.936346576e-03f, -3.945803852e-03f, -3.955253835e-03f, -3.964696510e-03f, -3.974131859e-03f,
+-3.983559867e-03f, -3.992980518e-03f, -4.002393797e-03f, -4.011799687e-03f, -4.021198172e-03f, -4.030589238e-03f, -4.039972867e-03f, -4.049349044e-03f, -4.058717753e-03f, -4.068078978e-03f,
+-4.077432704e-03f, -4.086778914e-03f, -4.096117594e-03f, -4.105448727e-03f, -4.114772297e-03f, -4.124088289e-03f, -4.133396687e-03f, -4.142697475e-03f, -4.151990638e-03f, -4.161276160e-03f,
+-4.170554025e-03f, -4.179824218e-03f, -4.189086722e-03f, -4.198341523e-03f, -4.207588605e-03f, -4.216827953e-03f, -4.226059549e-03f, -4.235283380e-03f, -4.244499430e-03f, -4.253707682e-03f,
+-4.262908122e-03f, -4.272100733e-03f, -4.281285502e-03f, -4.290462411e-03f, -4.299631446e-03f, -4.308792591e-03f, -4.317945830e-03f, -4.327091149e-03f, -4.336228532e-03f, -4.345357963e-03f,
+-4.354479427e-03f, -4.363592909e-03f, -4.372698393e-03f, -4.381795864e-03f, -4.390885307e-03f, -4.399966706e-03f, -4.409040047e-03f, -4.418105313e-03f, -4.427162490e-03f, -4.436211563e-03f,
+-4.445252515e-03f, -4.454285333e-03f, -4.463310000e-03f, -4.472326501e-03f, -4.481334822e-03f, -4.490334948e-03f, -4.499326862e-03f, -4.508310550e-03f, -4.517285997e-03f, -4.526253188e-03f,
+-4.535212108e-03f, -4.544162741e-03f, -4.553105073e-03f, -4.562039088e-03f, -4.570964772e-03f, -4.579882109e-03f, -4.588791085e-03f, -4.597691684e-03f, -4.606583892e-03f, -4.615467693e-03f,
+-4.624343074e-03f, -4.633210018e-03f, -4.642068511e-03f, -4.650918538e-03f, -4.659760084e-03f, -4.668593134e-03f, -4.677417674e-03f, -4.686233689e-03f, -4.695041163e-03f, -4.703840083e-03f,
+-4.712630433e-03f, -4.721412198e-03f, -4.730185364e-03f, -4.738949916e-03f, -4.747705840e-03f, -4.756453120e-03f, -4.765191742e-03f, -4.773921692e-03f, -4.782642954e-03f, -4.791355514e-03f,
+-4.800059358e-03f, -4.808754470e-03f, -4.817440837e-03f, -4.826118443e-03f, -4.834787275e-03f, -4.843447317e-03f, -4.852098555e-03f, -4.860740974e-03f, -4.869374561e-03f, -4.877999300e-03f,
+-4.886615178e-03f, -4.895222179e-03f, -4.903820289e-03f, -4.912409494e-03f, -4.920989780e-03f, -4.929561132e-03f, -4.938123535e-03f, -4.946676976e-03f, -4.955221440e-03f, -4.963756912e-03f,
+-4.972283379e-03f, -4.980800826e-03f, -4.989309239e-03f, -4.997808604e-03f, -5.006298906e-03f, -5.014780132e-03f, -5.023252266e-03f, -5.031715295e-03f, -5.040169205e-03f, -5.048613981e-03f,
+-5.057049610e-03f, -5.065476077e-03f, -5.073893368e-03f, -5.082301469e-03f, -5.090700366e-03f, -5.099090045e-03f, -5.107470492e-03f, -5.115841693e-03f, -5.124203634e-03f, -5.132556301e-03f,
+-5.140899680e-03f, -5.149233757e-03f, -5.157558518e-03f, -5.165873949e-03f, -5.174180036e-03f, -5.182476766e-03f, -5.190764124e-03f, -5.199042097e-03f, -5.207310671e-03f, -5.215569831e-03f,
+-5.223819565e-03f, -5.232059859e-03f, -5.240290698e-03f, -5.248512069e-03f, -5.256723958e-03f, -5.264926352e-03f, -5.273119237e-03f, -5.281302598e-03f, -5.289476423e-03f, -5.297640698e-03f,
+-5.305795409e-03f, -5.313940543e-03f, -5.322076086e-03f, -5.330202024e-03f, -5.338318344e-03f, -5.346425032e-03f, -5.354522076e-03f, -5.362609460e-03f, -5.370687172e-03f, -5.378755199e-03f,
+-5.386813526e-03f, -5.394862141e-03f, -5.402901030e-03f, -5.410930179e-03f, -5.418949576e-03f, -5.426959206e-03f, -5.434959058e-03f, -5.442949116e-03f, -5.450929368e-03f, -5.458899801e-03f,
+-5.466860401e-03f, -5.474811155e-03f, -5.482752050e-03f, -5.490683072e-03f, -5.498604209e-03f, -5.506515447e-03f, -5.514416773e-03f, -5.522308174e-03f, -5.530189636e-03f, -5.538061147e-03f,
+-5.545922694e-03f, -5.553774263e-03f, -5.561615841e-03f, -5.569447416e-03f, -5.577268974e-03f, -5.585080502e-03f, -5.592881987e-03f, -5.600673417e-03f, -5.608454778e-03f, -5.616226058e-03f,
+-5.623987242e-03f, -5.631738320e-03f, -5.639479277e-03f, -5.647210101e-03f, -5.654930779e-03f, -5.662641298e-03f, -5.670341645e-03f, -5.678031808e-03f, -5.685711774e-03f, -5.693381530e-03f,
+-5.701041063e-03f, -5.708690360e-03f, -5.716329409e-03f, -5.723958198e-03f, -5.731576713e-03f, -5.739184941e-03f, -5.746782871e-03f, -5.754370490e-03f, -5.761947785e-03f, -5.769514742e-03f,
+-5.777071351e-03f, -5.784617599e-03f, -5.792153472e-03f, -5.799678958e-03f, -5.807194045e-03f, -5.814698721e-03f, -5.822192972e-03f, -5.829676787e-03f, -5.837150153e-03f, -5.844613058e-03f,
+-5.852065489e-03f, -5.859507434e-03f, -5.866938881e-03f, -5.874359817e-03f, -5.881770230e-03f, -5.889170108e-03f, -5.896559439e-03f, -5.903938209e-03f, -5.911306408e-03f, -5.918664023e-03f,
+-5.926011041e-03f, -5.933347451e-03f, -5.940673240e-03f, -5.947988397e-03f, -5.955292909e-03f, -5.962586763e-03f, -5.969869949e-03f, -5.977142454e-03f, -5.984404265e-03f, -5.991655372e-03f,
+-5.998895761e-03f, -6.006125421e-03f, -6.013344341e-03f, -6.020552507e-03f, -6.027749908e-03f, -6.034936533e-03f, -6.042112369e-03f, -6.049277405e-03f, -6.056431628e-03f, -6.063575027e-03f,
+-6.070707591e-03f, -6.077829306e-03f, -6.084940162e-03f, -6.092040147e-03f, -6.099129249e-03f, -6.106207456e-03f, -6.113274757e-03f, -6.120331139e-03f, -6.127376593e-03f, -6.134411104e-03f,
+-6.141434664e-03f, -6.148447258e-03f, -6.155448877e-03f, -6.162439508e-03f, -6.169419140e-03f, -6.176387761e-03f, -6.183345360e-03f, -6.190291926e-03f, -6.197227446e-03f, -6.204151911e-03f,
+-6.211065307e-03f, -6.217967624e-03f, -6.224858851e-03f, -6.231738975e-03f, -6.238607986e-03f, -6.245465873e-03f, -6.252312624e-03f, -6.259148228e-03f, -6.265972673e-03f, -6.272785948e-03f,
+-6.279588043e-03f, -6.286378946e-03f, -6.293158645e-03f, -6.299927130e-03f, -6.306684390e-03f, -6.313430413e-03f, -6.320165188e-03f, -6.326888705e-03f, -6.333600951e-03f, -6.340301917e-03f,
+-6.346991591e-03f, -6.353669962e-03f, -6.360337020e-03f, -6.366992752e-03f, -6.373637149e-03f, -6.380270199e-03f, -6.386891892e-03f, -6.393502216e-03f, -6.400101161e-03f, -6.406688716e-03f,
+-6.413264870e-03f, -6.419829612e-03f, -6.426382932e-03f, -6.432924819e-03f, -6.439455261e-03f, -6.445974250e-03f, -6.452481772e-03f, -6.458977819e-03f, -6.465462379e-03f, -6.471935442e-03f,
+-6.478396997e-03f, -6.484847034e-03f, -6.491285542e-03f, -6.497712510e-03f, -6.504127928e-03f, -6.510531785e-03f, -6.516924071e-03f, -6.523304776e-03f, -6.529673889e-03f, -6.536031399e-03f,
+-6.542377296e-03f, -6.548711571e-03f, -6.555034211e-03f, -6.561345208e-03f, -6.567644551e-03f, -6.573932229e-03f, -6.580208232e-03f, -6.586472550e-03f, -6.592725173e-03f, -6.598966090e-03f,
+-6.605195292e-03f, -6.611412768e-03f, -6.617618508e-03f, -6.623812501e-03f, -6.629994738e-03f, -6.636165209e-03f, -6.642323904e-03f, -6.648470812e-03f, -6.654605923e-03f, -6.660729228e-03f,
+-6.666840717e-03f, -6.672940379e-03f, -6.679028204e-03f, -6.685104183e-03f, -6.691168306e-03f, -6.697220563e-03f, -6.703260943e-03f, -6.709289438e-03f, -6.715306038e-03f, -6.721310731e-03f,
+-6.727303510e-03f, -6.733284363e-03f, -6.739253282e-03f, -6.745210256e-03f, -6.751155276e-03f, -6.757088333e-03f, -6.763009416e-03f, -6.768918515e-03f, -6.774815623e-03f, -6.780700727e-03f,
+-6.786573820e-03f, -6.792434892e-03f, -6.798283932e-03f, -6.804120933e-03f, -6.809945883e-03f, -6.815758774e-03f, -6.821559596e-03f, -6.827348340e-03f, -6.833124996e-03f, -6.838889555e-03f,
+-6.844642008e-03f, -6.850382345e-03f, -6.856110557e-03f, -6.861826635e-03f, -6.867530570e-03f, -6.873222351e-03f, -6.878901971e-03f, -6.884569419e-03f, -6.890224687e-03f, -6.895867766e-03f,
+-6.901498645e-03f, -6.907117317e-03f, -6.912723772e-03f, -6.918318001e-03f, -6.923899995e-03f, -6.929469745e-03f, -6.935027242e-03f, -6.940572476e-03f, -6.946105440e-03f, -6.951626124e-03f,
+-6.957134518e-03f, -6.962630615e-03f, -6.968114406e-03f, -6.973585880e-03f, -6.979045031e-03f, -6.984491848e-03f, -6.989926323e-03f, -6.995348448e-03f, -7.000758213e-03f, -7.006155609e-03f,
+-7.011540629e-03f, -7.016913263e-03f, -7.022273503e-03f, -7.027621340e-03f, -7.032956766e-03f, -7.038279771e-03f, -7.043590347e-03f, -7.048888487e-03f, -7.054174180e-03f, -7.059447420e-03f,
+-7.064708196e-03f, -7.069956501e-03f, -7.075192327e-03f, -7.080415664e-03f, -7.085626505e-03f, -7.090824841e-03f, -7.096010664e-03f, -7.101183965e-03f, -7.106344736e-03f, -7.111492969e-03f,
+-7.116628656e-03f, -7.121751788e-03f, -7.126862357e-03f, -7.131960355e-03f, -7.137045774e-03f, -7.142118605e-03f, -7.147178841e-03f, -7.152226473e-03f, -7.157261493e-03f, -7.162283894e-03f,
+-7.167293666e-03f, -7.172290803e-03f, -7.177275296e-03f, -7.182247136e-03f, -7.187206317e-03f, -7.192152831e-03f, -7.197086668e-03f, -7.202007822e-03f, -7.206916285e-03f, -7.211812048e-03f,
+-7.216695104e-03f, -7.221565445e-03f, -7.226423064e-03f, -7.231267952e-03f, -7.236100102e-03f, -7.240919506e-03f, -7.245726156e-03f, -7.250520045e-03f, -7.255301166e-03f, -7.260069510e-03f,
+-7.264825069e-03f, -7.269567837e-03f, -7.274297806e-03f, -7.279014968e-03f, -7.283719316e-03f, -7.288410842e-03f, -7.293089539e-03f, -7.297755399e-03f, -7.302408415e-03f, -7.307048580e-03f,
+-7.311675886e-03f, -7.316290326e-03f, -7.320891892e-03f, -7.325480577e-03f, -7.330056374e-03f, -7.334619276e-03f, -7.339169275e-03f, -7.343706365e-03f, -7.348230537e-03f, -7.352741785e-03f,
+-7.357240102e-03f, -7.361725481e-03f, -7.366197913e-03f, -7.370657394e-03f, -7.375103914e-03f, -7.379537468e-03f, -7.383958048e-03f, -7.388365648e-03f, -7.392760260e-03f, -7.397141877e-03f,
+-7.401510492e-03f, -7.405866100e-03f, -7.410208691e-03f, -7.414538261e-03f, -7.418854802e-03f, -7.423158307e-03f, -7.427448769e-03f, -7.431726182e-03f, -7.435990539e-03f, -7.440241833e-03f,
+-7.444480058e-03f, -7.448705207e-03f, -7.452917272e-03f, -7.457116249e-03f, -7.461302129e-03f, -7.465474907e-03f, -7.469634576e-03f, -7.473781129e-03f, -7.477914559e-03f, -7.482034862e-03f,
+-7.486142029e-03f, -7.490236054e-03f, -7.494316932e-03f, -7.498384655e-03f, -7.502439218e-03f, -7.506480613e-03f, -7.510508835e-03f, -7.514523877e-03f, -7.518525734e-03f, -7.522514398e-03f,
+-7.526489863e-03f, -7.530452124e-03f, -7.534401175e-03f, -7.538337008e-03f, -7.542259618e-03f, -7.546168998e-03f, -7.550065144e-03f, -7.553948048e-03f, -7.557817704e-03f, -7.561674107e-03f,
+-7.565517251e-03f, -7.569347129e-03f, -7.573163736e-03f, -7.576967065e-03f, -7.580757111e-03f, -7.584533868e-03f, -7.588297330e-03f, -7.592047491e-03f, -7.595784346e-03f, -7.599507888e-03f,
+-7.603218112e-03f, -7.606915012e-03f, -7.610598582e-03f, -7.614268817e-03f, -7.617925711e-03f, -7.621569259e-03f, -7.625199454e-03f, -7.628816291e-03f, -7.632419764e-03f, -7.636009869e-03f,
+-7.639586599e-03f, -7.643149949e-03f, -7.646699913e-03f, -7.650236487e-03f, -7.653759664e-03f, -7.657269439e-03f, -7.660765806e-03f, -7.664248761e-03f, -7.667718299e-03f, -7.671174412e-03f,
+-7.674617098e-03f, -7.678046349e-03f, -7.681462161e-03f, -7.684864529e-03f, -7.688253447e-03f, -7.691628910e-03f, -7.694990914e-03f, -7.698339453e-03f, -7.701674521e-03f, -7.704996114e-03f,
+-7.708304227e-03f, -7.711598854e-03f, -7.714879992e-03f, -7.718147633e-03f, -7.721401775e-03f, -7.724642411e-03f, -7.727869537e-03f, -7.731083148e-03f, -7.734283239e-03f, -7.737469805e-03f,
+-7.740642842e-03f, -7.743802344e-03f, -7.746948307e-03f, -7.750080725e-03f, -7.753199596e-03f, -7.756304912e-03f, -7.759396671e-03f, -7.762474867e-03f, -7.765539495e-03f, -7.768590551e-03f,
+-7.771628031e-03f, -7.774651930e-03f, -7.777662243e-03f, -7.780658965e-03f, -7.783642093e-03f, -7.786611622e-03f, -7.789567547e-03f, -7.792509864e-03f, -7.795438568e-03f, -7.798353655e-03f,
+-7.801255122e-03f, -7.804142962e-03f, -7.807017173e-03f, -7.809877750e-03f, -7.812724688e-03f, -7.815557984e-03f, -7.818377633e-03f, -7.821183630e-03f, -7.823975973e-03f, -7.826754656e-03f,
+-7.829519676e-03f, -7.832271028e-03f, -7.835008709e-03f, -7.837732714e-03f, -7.840443039e-03f, -7.843139680e-03f, -7.845822634e-03f, -7.848491896e-03f, -7.851147463e-03f, -7.853789330e-03f,
+-7.856417494e-03f, -7.859031951e-03f, -7.861632697e-03f, -7.864219728e-03f, -7.866793040e-03f, -7.869352630e-03f, -7.871898494e-03f, -7.874430628e-03f, -7.876949029e-03f, -7.879453693e-03f,
+-7.881944615e-03f, -7.884421794e-03f, -7.886885224e-03f, -7.889334903e-03f, -7.891770827e-03f, -7.894192992e-03f, -7.896601395e-03f, -7.898996032e-03f, -7.901376901e-03f, -7.903743997e-03f,
+-7.906097317e-03f, -7.908436857e-03f, -7.910762616e-03f, -7.913074588e-03f, -7.915372771e-03f, -7.917657162e-03f, -7.919927757e-03f, -7.922184553e-03f, -7.924427546e-03f, -7.926656735e-03f,
+-7.928872114e-03f, -7.931073683e-03f, -7.933261436e-03f, -7.935435371e-03f, -7.937595486e-03f, -7.939741777e-03f, -7.941874240e-03f, -7.943992874e-03f, -7.946097675e-03f, -7.948188639e-03f,
+-7.950265765e-03f, -7.952329050e-03f, -7.954378489e-03f, -7.956414082e-03f, -7.958435824e-03f, -7.960443713e-03f, -7.962437746e-03f, -7.964417920e-03f, -7.966384234e-03f, -7.968336683e-03f,
+-7.970275266e-03f, -7.972199979e-03f, -7.974110820e-03f, -7.976007787e-03f, -7.977890877e-03f, -7.979760086e-03f, -7.981615414e-03f, -7.983456857e-03f, -7.985284413e-03f, -7.987098079e-03f,
+-7.988897852e-03f, -7.990683732e-03f, -7.992455714e-03f, -7.994213797e-03f, -7.995957978e-03f, -7.997688256e-03f, -7.999404627e-03f, -8.001107089e-03f, -8.002795641e-03f, -8.004470280e-03f,
+-8.006131004e-03f, -8.007777810e-03f, -8.009410697e-03f, -8.011029662e-03f, -8.012634703e-03f, -8.014225819e-03f, -8.015803007e-03f, -8.017366265e-03f, -8.018915591e-03f, -8.020450983e-03f,
+-8.021972439e-03f, -8.023479958e-03f, -8.024973536e-03f, -8.026453174e-03f, -8.027918868e-03f, -8.029370616e-03f, -8.030808418e-03f, -8.032232271e-03f, -8.033642173e-03f, -8.035038123e-03f,
+-8.036420119e-03f, -8.037788159e-03f, -8.039142242e-03f, -8.040482366e-03f, -8.041808529e-03f, -8.043120729e-03f, -8.044418966e-03f, -8.045703238e-03f, -8.046973543e-03f, -8.048229879e-03f,
+-8.049472246e-03f, -8.050700641e-03f, -8.051915064e-03f, -8.053115512e-03f, -8.054301985e-03f, -8.055474482e-03f, -8.056633000e-03f, -8.057777538e-03f, -8.058908096e-03f, -8.060024672e-03f,
+-8.061127265e-03f, -8.062215873e-03f, -8.063290495e-03f, -8.064351131e-03f, -8.065397779e-03f, -8.066430438e-03f, -8.067449107e-03f, -8.068453785e-03f, -8.069444471e-03f, -8.070421163e-03f,
+-8.071383861e-03f, -8.072332565e-03f, -8.073267272e-03f, -8.074187982e-03f, -8.075094694e-03f, -8.075987407e-03f, -8.076866121e-03f, -8.077730835e-03f, -8.078581547e-03f, -8.079418258e-03f,
+-8.080240965e-03f, -8.081049669e-03f, -8.081844370e-03f, -8.082625065e-03f, -8.083391755e-03f, -8.084144439e-03f, -8.084883116e-03f, -8.085607786e-03f, -8.086318448e-03f, -8.087015102e-03f,
+-8.087697747e-03f, -8.088366383e-03f, -8.089021009e-03f, -8.089661625e-03f, -8.090288230e-03f, -8.090900824e-03f, -8.091499407e-03f, -8.092083979e-03f, -8.092654538e-03f, -8.093211086e-03f,
+-8.093753620e-03f, -8.094282142e-03f, -8.094796651e-03f, -8.095297147e-03f, -8.095783630e-03f, -8.096256099e-03f, -8.096714555e-03f, -8.097158997e-03f, -8.097589425e-03f, -8.098005839e-03f,
+-8.098408240e-03f, -8.098796627e-03f, -8.099171001e-03f, -8.099531360e-03f, -8.099877706e-03f, -8.100210039e-03f, -8.100528358e-03f, -8.100832664e-03f, -8.101122957e-03f, -8.101399237e-03f,
+-8.101661505e-03f, -8.101909760e-03f, -8.102144003e-03f, -8.102364235e-03f, -8.102570455e-03f, -8.102762663e-03f, -8.102940861e-03f, -8.103105049e-03f, -8.103255227e-03f, -8.103391395e-03f,
+-8.103513554e-03f, -8.103621705e-03f, -8.103715848e-03f, -8.103795983e-03f, -8.103862111e-03f, -8.103914233e-03f, -8.103952349e-03f, -8.103976460e-03f, -8.103986567e-03f, -8.103982670e-03f,
+-8.103964770e-03f, -8.103932867e-03f, -8.103886964e-03f, -8.103827059e-03f, -8.103753154e-03f, -8.103665251e-03f, -8.103563348e-03f, -8.103447449e-03f, -8.103317553e-03f, -8.103173662e-03f,
+-8.103015775e-03f, -8.102843896e-03f, -8.102658023e-03f, -8.102458159e-03f, -8.102244305e-03f, -8.102016460e-03f, -8.101774628e-03f, -8.101518808e-03f, -8.101249002e-03f, -8.100965211e-03f,
+-8.100667436e-03f, -8.100355679e-03f, -8.100029940e-03f, -8.099690221e-03f, -8.099336524e-03f, -8.098968848e-03f, -8.098587197e-03f, -8.098191571e-03f, -8.097781972e-03f, -8.097358400e-03f,
+-8.096920858e-03f, -8.096469347e-03f, -8.096003868e-03f, -8.095524423e-03f, -8.095031014e-03f, -8.094523641e-03f, -8.094002307e-03f, -8.093467014e-03f, -8.092917761e-03f, -8.092354553e-03f,
+-8.091777389e-03f, -8.091186272e-03f, -8.090581204e-03f, -8.089962186e-03f, -8.089329220e-03f, -8.088682307e-03f, -8.088021450e-03f, -8.087346651e-03f, -8.086657911e-03f, -8.085955232e-03f,
+-8.085238617e-03f, -8.084508066e-03f, -8.083763583e-03f, -8.083005168e-03f, -8.082232824e-03f, -8.081446554e-03f, -8.080646358e-03f, -8.079832240e-03f, -8.079004201e-03f, -8.078162243e-03f,
+-8.077306369e-03f, -8.076436581e-03f, -8.075552881e-03f, -8.074655270e-03f, -8.073743753e-03f, -8.072818329e-03f, -8.071879003e-03f, -8.070925776e-03f, -8.069958651e-03f, -8.068977630e-03f,
+-8.067982715e-03f, -8.066973909e-03f, -8.065951214e-03f, -8.064914633e-03f, -8.063864168e-03f, -8.062799821e-03f, -8.061721596e-03f, -8.060629495e-03f, -8.059523520e-03f, -8.058403674e-03f,
+-8.057269960e-03f, -8.056122380e-03f, -8.054960937e-03f, -8.053785634e-03f, -8.052596473e-03f, -8.051393457e-03f, -8.050176589e-03f, -8.048945871e-03f, -8.047701307e-03f, -8.046442900e-03f,
+-8.045170652e-03f, -8.043884565e-03f, -8.042584644e-03f, -8.041270891e-03f, -8.039943309e-03f, -8.038601900e-03f, -8.037246669e-03f, -8.035877617e-03f, -8.034494749e-03f, -8.033098066e-03f,
+-8.031687573e-03f, -8.030263272e-03f, -8.028825167e-03f, -8.027373260e-03f, -8.025907555e-03f, -8.024428055e-03f, -8.022934764e-03f, -8.021427684e-03f, -8.019906819e-03f, -8.018372172e-03f,
+-8.016823747e-03f, -8.015261546e-03f, -8.013685574e-03f, -8.012095834e-03f, -8.010492329e-03f, -8.008875062e-03f, -8.007244038e-03f, -8.005599259e-03f, -8.003940729e-03f, -8.002268452e-03f,
+-8.000582431e-03f, -7.998882670e-03f, -7.997169173e-03f, -7.995441943e-03f, -7.993700983e-03f, -7.991946298e-03f, -7.990177891e-03f, -7.988395766e-03f, -7.986599927e-03f, -7.984790378e-03f,
+-7.982967122e-03f, -7.981130163e-03f, -7.979279505e-03f, -7.977415151e-03f, -7.975537107e-03f, -7.973645376e-03f, -7.971739961e-03f, -7.969820867e-03f, -7.967888097e-03f, -7.965941657e-03f,
+-7.963981549e-03f, -7.962007777e-03f, -7.960020347e-03f, -7.958019262e-03f, -7.956004526e-03f, -7.953976143e-03f, -7.951934118e-03f, -7.949878455e-03f, -7.947809157e-03f, -7.945726230e-03f,
+-7.943629677e-03f, -7.941519504e-03f, -7.939395713e-03f, -7.937258310e-03f, -7.935107298e-03f, -7.932942683e-03f, -7.930764469e-03f, -7.928572660e-03f, -7.926367260e-03f, -7.924148275e-03f,
+-7.921915708e-03f, -7.919669564e-03f, -7.917409848e-03f, -7.915136564e-03f, -7.912849717e-03f, -7.910549312e-03f, -7.908235353e-03f, -7.905907845e-03f, -7.903566792e-03f, -7.901212200e-03f,
+-7.898844072e-03f, -7.896462415e-03f, -7.894067232e-03f, -7.891658528e-03f, -7.889236309e-03f, -7.886800579e-03f, -7.884351342e-03f, -7.881888605e-03f, -7.879412372e-03f, -7.876922647e-03f,
+-7.874419436e-03f, -7.871902744e-03f, -7.869372575e-03f, -7.866828936e-03f, -7.864271830e-03f, -7.861701263e-03f, -7.859117241e-03f, -7.856519767e-03f, -7.853908849e-03f, -7.851284489e-03f,
+-7.848646695e-03f, -7.845995470e-03f, -7.843330821e-03f, -7.840652752e-03f, -7.837961270e-03f, -7.835256378e-03f, -7.832538083e-03f, -7.829806390e-03f, -7.827061304e-03f, -7.824302831e-03f,
+-7.821530976e-03f, -7.818745744e-03f, -7.815947142e-03f, -7.813135174e-03f, -7.810309846e-03f, -7.807471164e-03f, -7.804619133e-03f, -7.801753759e-03f, -7.798875048e-03f, -7.795983004e-03f,
+-7.793077634e-03f, -7.790158944e-03f, -7.787226939e-03f, -7.784281625e-03f, -7.781323007e-03f, -7.778351092e-03f, -7.775365885e-03f, -7.772367392e-03f, -7.769355619e-03f, -7.766330571e-03f,
+-7.763292256e-03f, -7.760240678e-03f, -7.757175843e-03f, -7.754097758e-03f, -7.751006428e-03f, -7.747901860e-03f, -7.744784059e-03f, -7.741653031e-03f, -7.738508784e-03f, -7.735351322e-03f,
+-7.732180651e-03f, -7.728996779e-03f, -7.725799711e-03f, -7.722589453e-03f, -7.719366011e-03f, -7.716129392e-03f, -7.712879603e-03f, -7.709616648e-03f, -7.706340535e-03f, -7.703051270e-03f,
+-7.699748859e-03f, -7.696433309e-03f, -7.693104625e-03f, -7.689762815e-03f, -7.686407885e-03f, -7.683039841e-03f, -7.679658689e-03f, -7.676264437e-03f, -7.672857091e-03f, -7.669436657e-03f,
+-7.666003142e-03f, -7.662556552e-03f, -7.659096894e-03f, -7.655624175e-03f, -7.652138401e-03f, -7.648639579e-03f, -7.645127716e-03f, -7.641602819e-03f, -7.638064893e-03f, -7.634513947e-03f,
+-7.630949986e-03f, -7.627373017e-03f, -7.623783049e-03f, -7.620180086e-03f, -7.616564136e-03f, -7.612935206e-03f, -7.609293304e-03f, -7.605638435e-03f, -7.601970607e-03f, -7.598289826e-03f,
+-7.594596101e-03f, -7.590889437e-03f, -7.587169842e-03f, -7.583437324e-03f, -7.579691888e-03f, -7.575933542e-03f, -7.572162294e-03f, -7.568378150e-03f, -7.564581118e-03f, -7.560771205e-03f,
+-7.556948418e-03f, -7.553112764e-03f, -7.549264250e-03f, -7.545402885e-03f, -7.541528675e-03f, -7.537641627e-03f, -7.533741750e-03f, -7.529829049e-03f, -7.525903534e-03f, -7.521965210e-03f,
+-7.518014086e-03f, -7.514050169e-03f, -7.510073467e-03f, -7.506083986e-03f, -7.502081736e-03f, -7.498066722e-03f, -7.494038953e-03f, -7.489998436e-03f, -7.485945180e-03f, -7.481879190e-03f,
+-7.477800476e-03f, -7.473709045e-03f, -7.469604905e-03f, -7.465488062e-03f, -7.461358526e-03f, -7.457216304e-03f, -7.453061403e-03f, -7.448893832e-03f, -7.444713598e-03f, -7.440520710e-03f,
+-7.436315174e-03f, -7.432096999e-03f, -7.427866193e-03f, -7.423622764e-03f, -7.419366720e-03f, -7.415098068e-03f, -7.410816817e-03f, -7.406522975e-03f, -7.402216550e-03f, -7.397897550e-03f,
+-7.393565982e-03f, -7.389221856e-03f, -7.384865179e-03f, -7.380495959e-03f, -7.376114205e-03f, -7.371719924e-03f, -7.367313126e-03f, -7.362893818e-03f, -7.358462008e-03f, -7.354017705e-03f,
+-7.349560917e-03f, -7.345091653e-03f, -7.340609920e-03f, -7.336115727e-03f, -7.331609083e-03f, -7.327089996e-03f, -7.322558474e-03f, -7.318014526e-03f, -7.313458160e-03f, -7.308889385e-03f,
+-7.304308209e-03f, -7.299714641e-03f, -7.295108689e-03f, -7.290490362e-03f, -7.285859669e-03f, -7.281216618e-03f, -7.276561218e-03f, -7.271893477e-03f, -7.267213404e-03f, -7.262521009e-03f,
+-7.257816298e-03f, -7.253099282e-03f, -7.248369970e-03f, -7.243628369e-03f, -7.238874488e-03f, -7.234108337e-03f, -7.229329925e-03f, -7.224539260e-03f, -7.219736351e-03f, -7.214921207e-03f,
+-7.210093836e-03f, -7.205254249e-03f, -7.200402454e-03f, -7.195538459e-03f, -7.190662275e-03f, -7.185773909e-03f, -7.180873371e-03f, -7.175960671e-03f, -7.171035816e-03f, -7.166098817e-03f,
+-7.161149682e-03f, -7.156188421e-03f, -7.151215042e-03f, -7.146229556e-03f, -7.141231970e-03f, -7.136222295e-03f, -7.131200540e-03f, -7.126166714e-03f, -7.121120826e-03f, -7.116062885e-03f,
+-7.110992901e-03f, -7.105910884e-03f, -7.100816842e-03f, -7.095710785e-03f, -7.090592723e-03f, -7.085462665e-03f, -7.080320620e-03f, -7.075166598e-03f, -7.070000608e-03f, -7.064822661e-03f,
+-7.059632764e-03f, -7.054430929e-03f, -7.049217164e-03f, -7.043991480e-03f, -7.038753885e-03f, -7.033504390e-03f, -7.028243004e-03f, -7.022969737e-03f, -7.017684598e-03f, -7.012387598e-03f,
+-7.007078745e-03f, -7.001758051e-03f, -6.996425524e-03f, -6.991081174e-03f, -6.985725011e-03f, -6.980357046e-03f, -6.974977287e-03f, -6.969585745e-03f, -6.964182430e-03f, -6.958767351e-03f,
+-6.953340519e-03f, -6.947901944e-03f, -6.942451635e-03f, -6.936989602e-03f, -6.931515856e-03f, -6.926030407e-03f, -6.920533264e-03f, -6.915024438e-03f, -6.909503939e-03f, -6.903971777e-03f,
+-6.898427961e-03f, -6.892872503e-03f, -6.887305413e-03f, -6.881726700e-03f, -6.876136375e-03f, -6.870534448e-03f, -6.864920930e-03f, -6.859295830e-03f, -6.853659159e-03f, -6.848010927e-03f,
+-6.842351144e-03f, -6.836679822e-03f, -6.830996970e-03f, -6.825302599e-03f, -6.819596719e-03f, -6.813879340e-03f, -6.808150474e-03f, -6.802410130e-03f, -6.796658319e-03f, -6.790895051e-03f,
+-6.785120337e-03f, -6.779334188e-03f, -6.773536615e-03f, -6.767727626e-03f, -6.761907235e-03f, -6.756075450e-03f, -6.750232283e-03f, -6.744377744e-03f, -6.738511844e-03f, -6.732634593e-03f,
+-6.726746003e-03f, -6.720846085e-03f, -6.714934848e-03f, -6.709012304e-03f, -6.703078463e-03f, -6.697133336e-03f, -6.691176935e-03f, -6.685209269e-03f, -6.679230351e-03f, -6.673240190e-03f,
+-6.667238798e-03f, -6.661226185e-03f, -6.655202363e-03f, -6.649167343e-03f, -6.643121135e-03f, -6.637063750e-03f, -6.630995200e-03f, -6.624915496e-03f, -6.618824648e-03f, -6.612722668e-03f,
+-6.606609567e-03f, -6.600485355e-03f, -6.594350045e-03f, -6.588203647e-03f, -6.582046172e-03f, -6.575877632e-03f, -6.569698038e-03f, -6.563507401e-03f, -6.557305732e-03f, -6.551093042e-03f,
+-6.544869344e-03f, -6.538634647e-03f, -6.532388964e-03f, -6.526132306e-03f, -6.519864684e-03f, -6.513586109e-03f, -6.507296594e-03f, -6.500996149e-03f, -6.494684785e-03f, -6.488362515e-03f,
+-6.482029350e-03f, -6.475685300e-03f, -6.469330379e-03f, -6.462964596e-03f, -6.456587965e-03f, -6.450200495e-03f, -6.443802200e-03f, -6.437393090e-03f, -6.430973177e-03f, -6.424542473e-03f,
+-6.418100989e-03f, -6.411648738e-03f, -6.405185730e-03f, -6.398711977e-03f, -6.392227492e-03f, -6.385732286e-03f, -6.379226370e-03f, -6.372709757e-03f, -6.366182458e-03f, -6.359644485e-03f,
+-6.353095850e-03f, -6.346536564e-03f, -6.339966641e-03f, -6.333386090e-03f, -6.326794926e-03f, -6.320193158e-03f, -6.313580800e-03f, -6.306957863e-03f, -6.300324359e-03f, -6.293680300e-03f,
+-6.287025698e-03f, -6.280360566e-03f, -6.273684915e-03f, -6.266998757e-03f, -6.260302104e-03f, -6.253594969e-03f, -6.246877364e-03f, -6.240149300e-03f, -6.233410790e-03f, -6.226661846e-03f,
+-6.219902481e-03f, -6.213132706e-03f, -6.206352533e-03f, -6.199561975e-03f, -6.192761044e-03f, -6.185949753e-03f, -6.179128114e-03f, -6.172296138e-03f, -6.165453839e-03f, -6.158601228e-03f,
+-6.151738318e-03f, -6.144865122e-03f, -6.137981651e-03f, -6.131087919e-03f, -6.124183937e-03f, -6.117269718e-03f, -6.110345274e-03f, -6.103410619e-03f, -6.096465764e-03f, -6.089510722e-03f,
+-6.082545505e-03f, -6.075570127e-03f, -6.068584599e-03f, -6.061588934e-03f, -6.054583145e-03f, -6.047567245e-03f, -6.040541245e-03f, -6.033505159e-03f, -6.026458999e-03f, -6.019402778e-03f,
+-6.012336509e-03f, -6.005260205e-03f, -5.998173877e-03f, -5.991077540e-03f, -5.983971205e-03f, -5.976854885e-03f, -5.969728593e-03f, -5.962592343e-03f, -5.955446146e-03f, -5.948290016e-03f,
+-5.941123966e-03f, -5.933948008e-03f, -5.926762155e-03f, -5.919566421e-03f, -5.912360818e-03f, -5.905145358e-03f, -5.897920056e-03f, -5.890684924e-03f, -5.883439975e-03f, -5.876185222e-03f,
+-5.868920678e-03f, -5.861646356e-03f, -5.854362269e-03f, -5.847068431e-03f, -5.839764853e-03f, -5.832451551e-03f, -5.825128535e-03f, -5.817795821e-03f, -5.810453420e-03f, -5.803101346e-03f,
+-5.795739613e-03f, -5.788368233e-03f, -5.780987219e-03f, -5.773596586e-03f, -5.766196345e-03f, -5.758786511e-03f, -5.751367096e-03f, -5.743938115e-03f, -5.736499579e-03f, -5.729051504e-03f,
+-5.721593901e-03f, -5.714126784e-03f, -5.706650168e-03f, -5.699164064e-03f, -5.691668487e-03f, -5.684163449e-03f, -5.676648965e-03f, -5.669125048e-03f, -5.661591711e-03f, -5.654048968e-03f,
+-5.646496832e-03f, -5.638935317e-03f, -5.631364436e-03f, -5.623784203e-03f, -5.616194632e-03f, -5.608595735e-03f, -5.600987527e-03f, -5.593370022e-03f, -5.585743232e-03f, -5.578107172e-03f,
+-5.570461854e-03f, -5.562807294e-03f, -5.555143504e-03f, -5.547470498e-03f, -5.539788291e-03f, -5.532096895e-03f, -5.524396324e-03f, -5.516686592e-03f, -5.508967714e-03f, -5.501239702e-03f,
+-5.493502571e-03f, -5.485756334e-03f, -5.478001005e-03f, -5.470236598e-03f, -5.462463128e-03f, -5.454680607e-03f, -5.446889050e-03f, -5.439088470e-03f, -5.431278882e-03f, -5.423460300e-03f,
+-5.415632737e-03f, -5.407796207e-03f, -5.399950725e-03f, -5.392096304e-03f, -5.384232959e-03f, -5.376360703e-03f, -5.368479551e-03f, -5.360589516e-03f, -5.352690613e-03f, -5.344782856e-03f,
+-5.336866259e-03f, -5.328940836e-03f, -5.321006600e-03f, -5.313063567e-03f, -5.305111751e-03f, -5.297151165e-03f, -5.289181824e-03f, -5.281203742e-03f, -5.273216933e-03f, -5.265221411e-03f,
+-5.257217192e-03f, -5.249204288e-03f, -5.241182714e-03f, -5.233152486e-03f, -5.225113616e-03f, -5.217066119e-03f, -5.209010009e-03f, -5.200945302e-03f, -5.192872011e-03f, -5.184790150e-03f,
+-5.176699734e-03f, -5.168600778e-03f, -5.160493296e-03f, -5.152377302e-03f, -5.144252810e-03f, -5.136119836e-03f, -5.127978394e-03f, -5.119828497e-03f, -5.111670161e-03f, -5.103503401e-03f,
+-5.095328230e-03f, -5.087144663e-03f, -5.078952715e-03f, -5.070752401e-03f, -5.062543734e-03f, -5.054326730e-03f, -5.046101403e-03f, -5.037867768e-03f, -5.029625840e-03f, -5.021375632e-03f,
+-5.013117161e-03f, -5.004850440e-03f, -4.996575483e-03f, -4.988292307e-03f, -4.980000926e-03f, -4.971701353e-03f, -4.963393605e-03f, -4.955077695e-03f, -4.946753640e-03f, -4.938421452e-03f,
+-4.930081148e-03f, -4.921732742e-03f, -4.913376248e-03f, -4.905011682e-03f, -4.896639059e-03f, -4.888258394e-03f, -4.879869700e-03f, -4.871472994e-03f, -4.863068289e-03f, -4.854655602e-03f,
+-4.846234947e-03f, -4.837806339e-03f, -4.829369792e-03f, -4.820925323e-03f, -4.812472945e-03f, -4.804012674e-03f, -4.795544524e-03f, -4.787068512e-03f, -4.778584652e-03f, -4.770092958e-03f,
+-4.761593447e-03f, -4.753086132e-03f, -4.744571030e-03f, -4.736048155e-03f, -4.727517522e-03f, -4.718979147e-03f, -4.710433045e-03f, -4.701879230e-03f, -4.693317719e-03f, -4.684748525e-03f,
+-4.676171665e-03f, -4.667587153e-03f, -4.658995006e-03f, -4.650395237e-03f, -4.641787862e-03f, -4.633172897e-03f, -4.624550356e-03f, -4.615920256e-03f, -4.607282611e-03f, -4.598637436e-03f,
+-4.589984748e-03f, -4.581324561e-03f, -4.572656890e-03f, -4.563981751e-03f, -4.555299159e-03f, -4.546609131e-03f, -4.537911680e-03f, -4.529206822e-03f, -4.520494574e-03f, -4.511774950e-03f,
+-4.503047965e-03f, -4.494313636e-03f, -4.485571977e-03f, -4.476823005e-03f, -4.468066734e-03f, -4.459303180e-03f, -4.450532359e-03f, -4.441754285e-03f, -4.432968976e-03f, -4.424176445e-03f,
+-4.415376709e-03f, -4.406569784e-03f, -4.397755684e-03f, -4.388934426e-03f, -4.380106025e-03f, -4.371270497e-03f, -4.362427857e-03f, -4.353578120e-03f, -4.344721304e-03f, -4.335857422e-03f,
+-4.326986492e-03f, -4.318108528e-03f, -4.309223546e-03f, -4.300331562e-03f, -4.291432592e-03f, -4.282526651e-03f, -4.273613756e-03f, -4.264693921e-03f, -4.255767163e-03f, -4.246833497e-03f,
+-4.237892940e-03f, -4.228945506e-03f, -4.219991212e-03f, -4.211030074e-03f, -4.202062107e-03f, -4.193087328e-03f, -4.184105752e-03f, -4.175117394e-03f, -4.166122272e-03f, -4.157120400e-03f,
+-4.148111795e-03f, -4.139096472e-03f, -4.130074447e-03f, -4.121045737e-03f, -4.112010358e-03f, -4.102968324e-03f, -4.093919653e-03f, -4.084864360e-03f, -4.075802461e-03f, -4.066733972e-03f,
+-4.057658909e-03f, -4.048577288e-03f, -4.039489126e-03f, -4.030394437e-03f, -4.021293239e-03f, -4.012185547e-03f, -4.003071377e-03f, -3.993950746e-03f, -3.984823669e-03f, -3.975690163e-03f,
+-3.966550243e-03f, -3.957403926e-03f, -3.948251228e-03f, -3.939092165e-03f, -3.929926753e-03f, -3.920755009e-03f, -3.911576948e-03f, -3.902392587e-03f, -3.893201941e-03f, -3.884005028e-03f,
+-3.874801863e-03f, -3.865592462e-03f, -3.856376842e-03f, -3.847155019e-03f, -3.837927009e-03f, -3.828692828e-03f, -3.819452493e-03f, -3.810206020e-03f, -3.800953425e-03f, -3.791694725e-03f,
+-3.782429936e-03f, -3.773159074e-03f, -3.763882155e-03f, -3.754599196e-03f, -3.745310213e-03f, -3.736015222e-03f, -3.726714241e-03f, -3.717407285e-03f, -3.708094370e-03f, -3.698775513e-03f,
+-3.689450730e-03f, -3.680120039e-03f, -3.670783454e-03f, -3.661440994e-03f, -3.652092673e-03f, -3.642738509e-03f, -3.633378517e-03f, -3.624012715e-03f, -3.614641119e-03f, -3.605263746e-03f,
+-3.595880611e-03f, -3.586491732e-03f, -3.577097124e-03f, -3.567696805e-03f, -3.558290791e-03f, -3.548879098e-03f, -3.539461744e-03f, -3.530038743e-03f, -3.520610114e-03f, -3.511175873e-03f,
+-3.501736036e-03f, -3.492290620e-03f, -3.482839641e-03f, -3.473383117e-03f, -3.463921063e-03f, -3.454453496e-03f, -3.444980433e-03f, -3.435501891e-03f, -3.426017886e-03f, -3.416528435e-03f,
+-3.407033555e-03f, -3.397533262e-03f, -3.388027573e-03f, -3.378516504e-03f, -3.369000073e-03f, -3.359478295e-03f, -3.349951189e-03f, -3.340418770e-03f, -3.330881055e-03f, -3.321338061e-03f,
+-3.311789805e-03f, -3.302236304e-03f, -3.292677573e-03f, -3.283113631e-03f, -3.273544493e-03f, -3.263970177e-03f, -3.254390700e-03f, -3.244806077e-03f, -3.235216327e-03f, -3.225621465e-03f,
+-3.216021510e-03f, -3.206416476e-03f, -3.196806382e-03f, -3.187191245e-03f, -3.177571080e-03f, -3.167945906e-03f, -3.158315738e-03f, -3.148680594e-03f, -3.139040490e-03f, -3.129395445e-03f,
+-3.119745473e-03f, -3.110090593e-03f, -3.100430821e-03f, -3.090766175e-03f, -3.081096671e-03f, -3.071422325e-03f, -3.061743156e-03f, -3.052059180e-03f, -3.042370414e-03f, -3.032676875e-03f,
+-3.022978580e-03f, -3.013275546e-03f, -3.003567790e-03f, -2.993855329e-03f, -2.984138180e-03f, -2.974416360e-03f, -2.964689886e-03f, -2.954958775e-03f, -2.945223044e-03f, -2.935482710e-03f,
+-2.925737791e-03f, -2.915988303e-03f, -2.906234264e-03f, -2.896475689e-03f, -2.886712598e-03f, -2.876945006e-03f, -2.867172931e-03f, -2.857396390e-03f, -2.847615399e-03f, -2.837829977e-03f,
+-2.828040140e-03f, -2.818245906e-03f, -2.808447291e-03f, -2.798644312e-03f, -2.788836988e-03f, -2.779025334e-03f, -2.769209369e-03f, -2.759389108e-03f, -2.749564571e-03f, -2.739735773e-03f,
+-2.729902732e-03f, -2.720065465e-03f, -2.710223989e-03f, -2.700378322e-03f, -2.690528481e-03f, -2.680674482e-03f, -2.670816344e-03f, -2.660954083e-03f, -2.651087717e-03f, -2.641217263e-03f,
+-2.631342738e-03f, -2.621464159e-03f, -2.611581544e-03f, -2.601694910e-03f, -2.591804275e-03f, -2.581909655e-03f, -2.572011068e-03f, -2.562108531e-03f, -2.552202061e-03f, -2.542291677e-03f,
+-2.532377394e-03f, -2.522459231e-03f, -2.512537205e-03f, -2.502611333e-03f, -2.492681632e-03f, -2.482748120e-03f, -2.472810814e-03f, -2.462869731e-03f, -2.452924890e-03f, -2.442976307e-03f,
+-2.433023999e-03f, -2.423067984e-03f, -2.413108280e-03f, -2.403144904e-03f, -2.393177872e-03f, -2.383207204e-03f, -2.373232915e-03f, -2.363255024e-03f, -2.353273547e-03f, -2.343288503e-03f,
+-2.333299908e-03f, -2.323307781e-03f, -2.313312138e-03f, -2.303312997e-03f, -2.293310376e-03f, -2.283304291e-03f, -2.273294761e-03f, -2.263281802e-03f, -2.253265433e-03f, -2.243245671e-03f,
+-2.233222533e-03f, -2.223196037e-03f, -2.213166200e-03f, -2.203133040e-03f, -2.193096574e-03f, -2.183056820e-03f, -2.173013795e-03f, -2.162967516e-03f, -2.152918003e-03f, -2.142865270e-03f,
+-2.132809338e-03f, -2.122750222e-03f, -2.112687940e-03f, -2.102622511e-03f, -2.092553951e-03f, -2.082482278e-03f, -2.072407510e-03f, -2.062329664e-03f, -2.052248758e-03f, -2.042164809e-03f,
+-2.032077835e-03f, -2.021987853e-03f, -2.011894882e-03f, -2.001798938e-03f, -1.991700039e-03f, -1.981598204e-03f, -1.971493448e-03f, -1.961385791e-03f, -1.951275249e-03f, -1.941161841e-03f,
+-1.931045584e-03f, -1.920926495e-03f, -1.910804592e-03f, -1.900679893e-03f, -1.890552415e-03f, -1.880422177e-03f, -1.870289195e-03f, -1.860153487e-03f, -1.850015072e-03f, -1.839873966e-03f,
+-1.829730187e-03f, -1.819583753e-03f, -1.809434682e-03f, -1.799282991e-03f, -1.789128698e-03f, -1.778971821e-03f, -1.768812377e-03f, -1.758650384e-03f, -1.748485859e-03f, -1.738318821e-03f,
+-1.728149287e-03f, -1.717977275e-03f, -1.707802802e-03f, -1.697625886e-03f, -1.687446545e-03f, -1.677264797e-03f, -1.667080659e-03f, -1.656894149e-03f, -1.646705284e-03f, -1.636514083e-03f,
+-1.626320564e-03f, -1.616124743e-03f, -1.605926638e-03f, -1.595726268e-03f, -1.585523651e-03f, -1.575318802e-03f, -1.565111742e-03f, -1.554902487e-03f, -1.544691055e-03f, -1.534477463e-03f,
+-1.524261730e-03f, -1.514043874e-03f, -1.503823912e-03f, -1.493601861e-03f, -1.483377740e-03f, -1.473151567e-03f, -1.462923358e-03f, -1.452693133e-03f, -1.442460908e-03f, -1.432226702e-03f,
+-1.421990532e-03f, -1.411752416e-03f, -1.401512372e-03f, -1.391270417e-03f, -1.381026570e-03f, -1.370780848e-03f, -1.360533270e-03f, -1.350283851e-03f, -1.340032612e-03f, -1.329779569e-03f,
+-1.319524740e-03f, -1.309268143e-03f, -1.299009796e-03f, -1.288749717e-03f, -1.278487923e-03f, -1.268224433e-03f, -1.257959263e-03f, -1.247692433e-03f, -1.237423959e-03f, -1.227153859e-03f,
+-1.216882153e-03f, -1.206608856e-03f, -1.196333987e-03f, -1.186057564e-03f, -1.175779605e-03f, -1.165500128e-03f, -1.155219150e-03f, -1.144936689e-03f, -1.134652763e-03f, -1.124367390e-03f,
+-1.114080588e-03f, -1.103792374e-03f, -1.093502767e-03f, -1.083211784e-03f, -1.072919443e-03f, -1.062625762e-03f, -1.052330759e-03f, -1.042034452e-03f, -1.031736858e-03f, -1.021437996e-03f,
+-1.011137883e-03f, -1.000836537e-03f, -9.905339761e-04f, -9.802302180e-04f, -9.699252806e-04f, -9.596191817e-04f, -9.493119393e-04f, -9.390035711e-04f, -9.286940952e-04f, -9.183835292e-04f,
+-9.080718912e-04f, -8.977591989e-04f, -8.874454703e-04f, -8.771307232e-04f, -8.668149755e-04f, -8.564982450e-04f, -8.461805497e-04f, -8.358619074e-04f, -8.255423360e-04f, -8.152218533e-04f,
+-8.049004773e-04f, -7.945782258e-04f, -7.842551167e-04f, -7.739311679e-04f, -7.636063972e-04f, -7.532808226e-04f, -7.429544619e-04f, -7.326273330e-04f, -7.222994538e-04f, -7.119708421e-04f,
+-7.016415159e-04f, -6.913114930e-04f, -6.809807914e-04f, -6.706494288e-04f, -6.603174232e-04f, -6.499847924e-04f, -6.396515544e-04f, -6.293177271e-04f, -6.189833282e-04f, -6.086483758e-04f,
+-5.983128876e-04f, -5.879768816e-04f, -5.776403757e-04f, -5.673033877e-04f, -5.569659355e-04f, -5.466280370e-04f, -5.362897102e-04f, -5.259509727e-04f, -5.156118427e-04f, -5.052723379e-04f,
+-4.949324762e-04f, -4.845922755e-04f, -4.742517538e-04f, -4.639109288e-04f, -4.535698184e-04f, -4.432284406e-04f, -4.328868132e-04f, -4.225449541e-04f, -4.122028812e-04f, -4.018606124e-04f,
+-3.915181655e-04f, -3.811755584e-04f, -3.708328090e-04f, -3.604899352e-04f, -3.501469548e-04f, -3.398038858e-04f, -3.294607459e-04f, -3.191175532e-04f, -3.087743253e-04f, -2.984310804e-04f,
+-2.880878361e-04f, -2.777446104e-04f, -2.674014211e-04f, -2.570582861e-04f, -2.467152233e-04f, -2.363722505e-04f, -2.260293857e-04f, -2.156866466e-04f, -2.053440511e-04f, -1.950016172e-04f,
+-1.846593626e-04f, -1.743173053e-04f, -1.639754630e-04f, -1.536338536e-04f, -1.432924951e-04f, -1.329514052e-04f, -1.226106018e-04f, -1.122701028e-04f, -1.019299260e-04f, -9.159008925e-05f,
+-8.125061041e-05f, -7.091150732e-05f, -6.057279783e-05f, -5.023449979e-05f, -3.989663103e-05f, -2.955920940e-05f, -1.922225273e-05f, -8.885778869e-06f, 1.450194356e-06f, 1.178564911e-05f,
+2.212056756e-05f, 3.245493188e-05f, 4.278872423e-05f, 5.312192680e-05f, 6.345452175e-05f, 7.378649127e-05f, 8.411781753e-05f, 9.444848272e-05f, 1.047784690e-04f, 1.151077586e-04f,
+1.254363337e-04f, 1.357641764e-04f, 1.460912691e-04f, 1.564175937e-04f, 1.667431327e-04f, 1.770678680e-04f, 1.873917821e-04f, 1.977148570e-04f, 2.080370749e-04f, 2.183584181e-04f,
+2.286788689e-04f, 2.389984093e-04f, 2.493170216e-04f, 2.596346880e-04f, 2.699513908e-04f, 2.802671122e-04f, 2.905818343e-04f, 3.008955395e-04f, 3.112082099e-04f, 3.215198278e-04f,
+3.318303755e-04f, 3.421398351e-04f, 3.524481889e-04f, 3.627554191e-04f, 3.730615081e-04f, 3.833664380e-04f, 3.936701910e-04f, 4.039727496e-04f, 4.142740958e-04f, 4.245742121e-04f,
+4.348730805e-04f, 4.451706835e-04f, 4.554670033e-04f, 4.657620221e-04f, 4.760557222e-04f, 4.863480859e-04f, 4.966390955e-04f, 5.069287334e-04f, 5.172169816e-04f, 5.275038227e-04f,
+5.377892388e-04f, 5.480732122e-04f, 5.583557253e-04f, 5.686367604e-04f, 5.789162997e-04f, 5.891943257e-04f, 5.994708205e-04f, 6.097457666e-04f, 6.200191463e-04f, 6.302909418e-04f,
+6.405611355e-04f, 6.508297098e-04f, 6.610966469e-04f, 6.713619293e-04f, 6.816255393e-04f, 6.918874591e-04f, 7.021476713e-04f, 7.124061581e-04f, 7.226629019e-04f, 7.329178850e-04f,
+7.431710899e-04f, 7.534224989e-04f, 7.636720943e-04f, 7.739198587e-04f, 7.841657742e-04f, 7.944098234e-04f, 8.046519887e-04f, 8.148922523e-04f, 8.251305968e-04f, 8.353670045e-04f,
+8.456014579e-04f, 8.558339393e-04f, 8.660644312e-04f, 8.762929160e-04f, 8.865193762e-04f, 8.967437941e-04f, 9.069661521e-04f, 9.171864329e-04f, 9.274046186e-04f, 9.376206920e-04f,
+9.478346353e-04f, 9.580464310e-04f, 9.682560617e-04f, 9.784635097e-04f, 9.886687576e-04f, 9.988717878e-04f, 1.009072583e-03f, 1.019271125e-03f, 1.029467397e-03f, 1.039661381e-03f,
+1.049853061e-03f, 1.060042417e-03f, 1.070229433e-03f, 1.080414092e-03f, 1.090596375e-03f, 1.100776266e-03f, 1.110953746e-03f, 1.121128799e-03f, 1.131301407e-03f, 1.141471553e-03f,
+1.151639218e-03f, 1.161804387e-03f, 1.171967040e-03f, 1.182127161e-03f, 1.192284732e-03f, 1.202439737e-03f, 1.212592156e-03f, 1.222741974e-03f, 1.232889173e-03f, 1.243033734e-03f,
+1.253175642e-03f, 1.263314878e-03f, 1.273451425e-03f, 1.283585266e-03f, 1.293716383e-03f, 1.303844759e-03f, 1.313970377e-03f, 1.324093219e-03f, 1.334213267e-03f, 1.344330506e-03f,
+1.354444916e-03f, 1.364556482e-03f, 1.374665184e-03f, 1.384771008e-03f, 1.394873934e-03f, 1.404973945e-03f, 1.415071025e-03f, 1.425165156e-03f, 1.435256320e-03f, 1.445344501e-03f,
+1.455429681e-03f, 1.465511843e-03f, 1.475590970e-03f, 1.485667043e-03f, 1.495740047e-03f, 1.505809964e-03f, 1.515876776e-03f, 1.525940466e-03f, 1.536001018e-03f, 1.546058413e-03f,
+1.556112635e-03f, 1.566163667e-03f, 1.576211490e-03f, 1.586256089e-03f, 1.596297445e-03f, 1.606335542e-03f, 1.616370363e-03f, 1.626401890e-03f, 1.636430106e-03f, 1.646454994e-03f,
+1.656476536e-03f, 1.666494717e-03f, 1.676509517e-03f, 1.686520921e-03f, 1.696528912e-03f, 1.706533471e-03f, 1.716534583e-03f, 1.726532229e-03f, 1.736526393e-03f, 1.746517058e-03f,
+1.756504207e-03f, 1.766487822e-03f, 1.776467886e-03f, 1.786444383e-03f, 1.796417295e-03f, 1.806386606e-03f, 1.816352297e-03f, 1.826314353e-03f, 1.836272756e-03f, 1.846227489e-03f,
+1.856178536e-03f, 1.866125878e-03f, 1.876069500e-03f, 1.886009383e-03f, 1.895945512e-03f, 1.905877869e-03f, 1.915806437e-03f, 1.925731199e-03f, 1.935652138e-03f, 1.945569238e-03f,
+1.955482481e-03f, 1.965391851e-03f, 1.975297330e-03f, 1.985198902e-03f, 1.995096549e-03f, 2.004990255e-03f, 2.014880003e-03f, 2.024765775e-03f, 2.034647556e-03f, 2.044525328e-03f,
+2.054399075e-03f, 2.064268779e-03f, 2.074134423e-03f, 2.083995992e-03f, 2.093853467e-03f, 2.103706832e-03f, 2.113556071e-03f, 2.123401166e-03f, 2.133242101e-03f, 2.143078859e-03f,
+2.152911422e-03f, 2.162739775e-03f, 2.172563901e-03f, 2.182383783e-03f, 2.192199403e-03f, 2.202010746e-03f, 2.211817794e-03f, 2.221620531e-03f, 2.231418941e-03f, 2.241213005e-03f,
+2.251002709e-03f, 2.260788034e-03f, 2.270568964e-03f, 2.280345483e-03f, 2.290117575e-03f, 2.299885221e-03f, 2.309648406e-03f, 2.319407113e-03f, 2.329161325e-03f, 2.338911026e-03f,
+2.348656199e-03f, 2.358396828e-03f, 2.368132895e-03f, 2.377864385e-03f, 2.387591280e-03f, 2.397313564e-03f, 2.407031221e-03f, 2.416744234e-03f, 2.426452587e-03f, 2.436156262e-03f,
+2.445855243e-03f, 2.455549515e-03f, 2.465239060e-03f, 2.474923861e-03f, 2.484603903e-03f, 2.494279169e-03f, 2.503949642e-03f, 2.513615306e-03f, 2.523276144e-03f, 2.532932140e-03f,
+2.542583278e-03f, 2.552229541e-03f, 2.561870913e-03f, 2.571507377e-03f, 2.581138916e-03f, 2.590765515e-03f, 2.600387158e-03f, 2.610003826e-03f, 2.619615506e-03f, 2.629222179e-03f,
+2.638823830e-03f, 2.648420442e-03f, 2.658011998e-03f, 2.667598484e-03f, 2.677179882e-03f, 2.686756176e-03f, 2.696327349e-03f, 2.705893387e-03f, 2.715454271e-03f, 2.725009986e-03f,
+2.734560516e-03f, 2.744105844e-03f, 2.753645954e-03f, 2.763180830e-03f, 2.772710456e-03f, 2.782234816e-03f, 2.791753893e-03f, 2.801267671e-03f, 2.810776134e-03f, 2.820279266e-03f,
+2.829777050e-03f, 2.839269471e-03f, 2.848756513e-03f, 2.858238158e-03f, 2.867714392e-03f, 2.877185198e-03f, 2.886650560e-03f, 2.896110462e-03f, 2.905564887e-03f, 2.915013820e-03f,
+2.924457245e-03f, 2.933895146e-03f, 2.943327506e-03f, 2.952754310e-03f, 2.962175541e-03f, 2.971591184e-03f, 2.981001222e-03f, 2.990405640e-03f, 2.999804422e-03f, 3.009197552e-03f,
+3.018585013e-03f, 3.027966790e-03f, 3.037342866e-03f, 3.046713227e-03f, 3.056077856e-03f, 3.065436737e-03f, 3.074789854e-03f, 3.084137192e-03f, 3.093478734e-03f, 3.102814465e-03f,
+3.112144368e-03f, 3.121468429e-03f, 3.130786631e-03f, 3.140098958e-03f, 3.149405395e-03f, 3.158705926e-03f, 3.168000535e-03f, 3.177289206e-03f, 3.186571923e-03f, 3.195848671e-03f,
+3.205119434e-03f, 3.214384197e-03f, 3.223642943e-03f, 3.232895657e-03f, 3.242142324e-03f, 3.251382927e-03f, 3.260617450e-03f, 3.269845879e-03f, 3.279068198e-03f, 3.288284391e-03f,
+3.297494442e-03f, 3.306698335e-03f, 3.315896056e-03f, 3.325087588e-03f, 3.334272917e-03f, 3.343452025e-03f, 3.352624899e-03f, 3.361791522e-03f, 3.370951879e-03f, 3.380105954e-03f,
+3.389253732e-03f, 3.398395197e-03f, 3.407530334e-03f, 3.416659127e-03f, 3.425781562e-03f, 3.434897621e-03f, 3.444007291e-03f, 3.453110555e-03f, 3.462207399e-03f, 3.471297806e-03f,
+3.480381762e-03f, 3.489459251e-03f, 3.498530257e-03f, 3.507594766e-03f, 3.516652762e-03f, 3.525704229e-03f, 3.534749153e-03f, 3.543787517e-03f, 3.552819308e-03f, 3.561844509e-03f,
+3.570863105e-03f, 3.579875081e-03f, 3.588880422e-03f, 3.597879112e-03f, 3.606871137e-03f, 3.615856481e-03f, 3.624835128e-03f, 3.633807064e-03f, 3.642772274e-03f, 3.651730742e-03f,
+3.660682454e-03f, 3.669627393e-03f, 3.678565546e-03f, 3.687496896e-03f, 3.696421429e-03f, 3.705339130e-03f, 3.714249983e-03f, 3.723153974e-03f, 3.732051088e-03f, 3.740941309e-03f,
+3.749824623e-03f, 3.758701014e-03f, 3.767570467e-03f, 3.776432968e-03f, 3.785288502e-03f, 3.794137053e-03f, 3.802978607e-03f, 3.811813149e-03f, 3.820640663e-03f, 3.829461135e-03f,
+3.838274551e-03f, 3.847080894e-03f, 3.855880151e-03f, 3.864672306e-03f, 3.873457345e-03f, 3.882235253e-03f, 3.891006014e-03f, 3.899769615e-03f, 3.908526040e-03f, 3.917275275e-03f,
+3.926017304e-03f, 3.934752114e-03f, 3.943479689e-03f, 3.952200015e-03f, 3.960913076e-03f, 3.969618859e-03f, 3.978317349e-03f, 3.987008530e-03f, 3.995692389e-03f, 4.004368910e-03f,
+4.013038079e-03f, 4.021699882e-03f, 4.030354303e-03f, 4.039001329e-03f, 4.047640944e-03f, 4.056273134e-03f, 4.064897885e-03f, 4.073515182e-03f, 4.082125010e-03f, 4.090727356e-03f,
+4.099322203e-03f, 4.107909539e-03f, 4.116489348e-03f, 4.125061617e-03f, 4.133626330e-03f, 4.142183473e-03f, 4.150733032e-03f, 4.159274993e-03f, 4.167809340e-03f, 4.176336060e-03f,
+4.184855139e-03f, 4.193366562e-03f, 4.201870314e-03f, 4.210366381e-03f, 4.218854750e-03f, 4.227335406e-03f, 4.235808334e-03f, 4.244273520e-03f, 4.252730950e-03f, 4.261180610e-03f,
+4.269622486e-03f, 4.278056563e-03f, 4.286482827e-03f, 4.294901264e-03f, 4.303311860e-03f, 4.311714601e-03f, 4.320109473e-03f, 4.328496460e-03f, 4.336875551e-03f, 4.345246729e-03f,
+4.353609982e-03f, 4.361965295e-03f, 4.370312655e-03f, 4.378652046e-03f, 4.386983455e-03f, 4.395306869e-03f, 4.403622273e-03f, 4.411929652e-03f, 4.420228994e-03f, 4.428520285e-03f,
+4.436803509e-03f, 4.445078655e-03f, 4.453345706e-03f, 4.461604650e-03f, 4.469855474e-03f, 4.478098162e-03f, 4.486332701e-03f, 4.494559077e-03f, 4.502777277e-03f, 4.510987286e-03f,
+4.519189092e-03f, 4.527382680e-03f, 4.535568036e-03f, 4.543745146e-03f, 4.551913998e-03f, 4.560074577e-03f, 4.568226869e-03f, 4.576370861e-03f, 4.584506540e-03f, 4.592633891e-03f,
+4.600752901e-03f, 4.608863557e-03f, 4.616965844e-03f, 4.625059749e-03f, 4.633145259e-03f, 4.641222360e-03f, 4.649291038e-03f, 4.657351281e-03f, 4.665403074e-03f, 4.673446404e-03f,
+4.681481257e-03f, 4.689507621e-03f, 4.697525481e-03f, 4.705534824e-03f, 4.713535637e-03f, 4.721527907e-03f, 4.729511619e-03f, 4.737486761e-03f, 4.745453320e-03f, 4.753411281e-03f,
+4.761360632e-03f, 4.769301359e-03f, 4.777233449e-03f, 4.785156889e-03f, 4.793071665e-03f, 4.800977765e-03f, 4.808875174e-03f, 4.816763881e-03f, 4.824643871e-03f, 4.832515131e-03f,
+4.840377649e-03f, 4.848231411e-03f, 4.856076403e-03f, 4.863912614e-03f, 4.871740029e-03f, 4.879558636e-03f, 4.887368422e-03f, 4.895169373e-03f, 4.902961477e-03f, 4.910744720e-03f,
+4.918519089e-03f, 4.926284573e-03f, 4.934041156e-03f, 4.941788827e-03f, 4.949527573e-03f, 4.957257380e-03f, 4.964978237e-03f, 4.972690129e-03f, 4.980393044e-03f, 4.988086969e-03f,
+4.995771891e-03f, 5.003447798e-03f, 5.011114677e-03f, 5.018772514e-03f, 5.026421298e-03f, 5.034061015e-03f, 5.041691652e-03f, 5.049313197e-03f, 5.056925637e-03f, 5.064528960e-03f,
+5.072123153e-03f, 5.079708202e-03f, 5.087284096e-03f, 5.094850822e-03f, 5.102408367e-03f, 5.109956718e-03f, 5.117495863e-03f, 5.125025790e-03f, 5.132546486e-03f, 5.140057938e-03f,
+5.147560134e-03f, 5.155053061e-03f, 5.162536707e-03f, 5.170011059e-03f, 5.177476105e-03f, 5.184931833e-03f, 5.192378230e-03f, 5.199815283e-03f, 5.207242981e-03f, 5.214661310e-03f,
+5.222070259e-03f, 5.229469816e-03f, 5.236859967e-03f, 5.244240701e-03f, 5.251612005e-03f, 5.258973867e-03f, 5.266326275e-03f, 5.273669216e-03f, 5.281002679e-03f, 5.288326651e-03f,
+5.295641120e-03f, 5.302946074e-03f, 5.310241500e-03f, 5.317527387e-03f, 5.324803723e-03f, 5.332070494e-03f, 5.339327690e-03f, 5.346575298e-03f, 5.353813307e-03f, 5.361041703e-03f,
+5.368260475e-03f, 5.375469612e-03f, 5.382669101e-03f, 5.389858929e-03f, 5.397039087e-03f, 5.404209560e-03f, 5.411370338e-03f, 5.418521408e-03f, 5.425662759e-03f, 5.432794379e-03f,
+5.439916255e-03f, 5.447028377e-03f, 5.454130732e-03f, 5.461223309e-03f, 5.468306095e-03f, 5.475379079e-03f, 5.482442250e-03f, 5.489495595e-03f, 5.496539103e-03f, 5.503572763e-03f,
+5.510596562e-03f, 5.517610488e-03f, 5.524614531e-03f, 5.531608679e-03f, 5.538592920e-03f, 5.545567242e-03f, 5.552531634e-03f, 5.559486085e-03f, 5.566430582e-03f, 5.573365115e-03f,
+5.580289671e-03f, 5.587204240e-03f, 5.594108810e-03f, 5.601003370e-03f, 5.607887908e-03f, 5.614762412e-03f, 5.621626872e-03f, 5.628481276e-03f, 5.635325612e-03f, 5.642159870e-03f,
+5.648984037e-03f, 5.655798104e-03f, 5.662602058e-03f, 5.669395888e-03f, 5.676179583e-03f, 5.682953132e-03f, 5.689716523e-03f, 5.696469746e-03f, 5.703212789e-03f, 5.709945641e-03f,
+5.716668291e-03f, 5.723380728e-03f, 5.730082940e-03f, 5.736774918e-03f, 5.743456649e-03f, 5.750128122e-03f, 5.756789327e-03f, 5.763440253e-03f, 5.770080888e-03f, 5.776711222e-03f,
+5.783331244e-03f, 5.789940942e-03f, 5.796540306e-03f, 5.803129325e-03f, 5.809707989e-03f, 5.816276285e-03f, 5.822834204e-03f, 5.829381735e-03f, 5.835918866e-03f, 5.842445588e-03f,
+5.848961889e-03f, 5.855467758e-03f, 5.861963185e-03f, 5.868448159e-03f, 5.874922670e-03f, 5.881386706e-03f, 5.887840258e-03f, 5.894283314e-03f, 5.900715864e-03f, 5.907137897e-03f,
+5.913549403e-03f, 5.919950371e-03f, 5.926340791e-03f, 5.932720652e-03f, 5.939089944e-03f, 5.945448655e-03f, 5.951796777e-03f, 5.958134297e-03f, 5.964461207e-03f, 5.970777494e-03f,
+5.977083150e-03f, 5.983378164e-03f, 5.989662525e-03f, 5.995936223e-03f, 6.002199247e-03f, 6.008451588e-03f, 6.014693235e-03f, 6.020924178e-03f, 6.027144407e-03f, 6.033353911e-03f,
+6.039552680e-03f, 6.045740704e-03f, 6.051917973e-03f, 6.058084477e-03f, 6.064240206e-03f, 6.070385149e-03f, 6.076519297e-03f, 6.082642639e-03f, 6.088755165e-03f, 6.094856866e-03f,
+6.100947731e-03f, 6.107027750e-03f, 6.113096914e-03f, 6.119155212e-03f, 6.125202635e-03f, 6.131239172e-03f, 6.137264815e-03f, 6.143279552e-03f, 6.149283374e-03f, 6.155276271e-03f,
+6.161258233e-03f, 6.167229251e-03f, 6.173189315e-03f, 6.179138415e-03f, 6.185076541e-03f, 6.191003684e-03f, 6.196919834e-03f, 6.202824981e-03f, 6.208719116e-03f, 6.214602228e-03f,
+6.220474309e-03f, 6.226335349e-03f, 6.232185337e-03f, 6.238024266e-03f, 6.243852124e-03f, 6.249668903e-03f, 6.255474593e-03f, 6.261269185e-03f, 6.267052669e-03f, 6.272825035e-03f,
+6.278586275e-03f, 6.284336378e-03f, 6.290075336e-03f, 6.295803139e-03f, 6.301519778e-03f, 6.307225243e-03f, 6.312919526e-03f, 6.318602616e-03f, 6.324274505e-03f, 6.329935183e-03f,
+6.335584641e-03f, 6.341222871e-03f, 6.346849862e-03f, 6.352465606e-03f, 6.358070093e-03f, 6.363663314e-03f, 6.369245261e-03f, 6.374815924e-03f, 6.380375293e-03f, 6.385923361e-03f,
+6.391460118e-03f, 6.396985555e-03f, 6.402499663e-03f, 6.408002433e-03f, 6.413493856e-03f, 6.418973924e-03f, 6.424442626e-03f, 6.429899955e-03f, 6.435345902e-03f, 6.440780457e-03f,
+6.446203612e-03f, 6.451615359e-03f, 6.457015687e-03f, 6.462404589e-03f, 6.467782056e-03f, 6.473148079e-03f, 6.478502650e-03f, 6.483845759e-03f, 6.489177398e-03f, 6.494497558e-03f,
+6.499806231e-03f, 6.505103409e-03f, 6.510389082e-03f, 6.515663242e-03f, 6.520925880e-03f, 6.526176988e-03f, 6.531416558e-03f, 6.536644581e-03f, 6.541861049e-03f, 6.547065952e-03f,
+6.552259284e-03f, 6.557441034e-03f, 6.562611196e-03f, 6.567769759e-03f, 6.572916718e-03f, 6.578052062e-03f, 6.583175783e-03f, 6.588287875e-03f, 6.593388327e-03f, 6.598477132e-03f,
+6.603554281e-03f, 6.608619767e-03f, 6.613673582e-03f, 6.618715716e-03f, 6.623746162e-03f, 6.628764913e-03f, 6.633771959e-03f, 6.638767293e-03f, 6.643750906e-03f, 6.648722791e-03f,
+6.653682940e-03f, 6.658631345e-03f, 6.663567997e-03f, 6.668492889e-03f, 6.673406012e-03f, 6.678307360e-03f, 6.683196924e-03f, 6.688074696e-03f, 6.692940668e-03f, 6.697794832e-03f,
+6.702637182e-03f, 6.707467708e-03f, 6.712286404e-03f, 6.717093261e-03f, 6.721888272e-03f, 6.726671428e-03f, 6.731442724e-03f, 6.736202149e-03f, 6.740949698e-03f, 6.745685363e-03f,
+6.750409135e-03f, 6.755121008e-03f, 6.759820973e-03f, 6.764509023e-03f, 6.769185152e-03f, 6.773849350e-03f, 6.778501612e-03f, 6.783141928e-03f, 6.787770293e-03f, 6.792386698e-03f,
+6.796991136e-03f, 6.801583600e-03f, 6.806164082e-03f, 6.810732576e-03f, 6.815289073e-03f, 6.819833567e-03f, 6.824366050e-03f, 6.828886515e-03f, 6.833394955e-03f, 6.837891363e-03f,
+6.842375731e-03f, 6.846848052e-03f, 6.851308320e-03f, 6.855756527e-03f, 6.860192666e-03f, 6.864616729e-03f, 6.869028711e-03f, 6.873428603e-03f, 6.877816400e-03f, 6.882192093e-03f,
+6.886555676e-03f, 6.890907143e-03f, 6.895246485e-03f, 6.899573696e-03f, 6.903888770e-03f, 6.908191700e-03f, 6.912482478e-03f, 6.916761097e-03f, 6.921027552e-03f, 6.925281835e-03f,
+6.929523940e-03f, 6.933753860e-03f, 6.937971587e-03f, 6.942177116e-03f, 6.946370440e-03f, 6.950551552e-03f, 6.954720446e-03f, 6.958877114e-03f, 6.963021551e-03f, 6.967153750e-03f,
+6.971273704e-03f, 6.975381406e-03f, 6.979476851e-03f, 6.983560032e-03f, 6.987630942e-03f, 6.991689575e-03f, 6.995735925e-03f, 6.999769985e-03f, 7.003791748e-03f, 7.007801209e-03f,
+7.011798361e-03f, 7.015783198e-03f, 7.019755714e-03f, 7.023715902e-03f, 7.027663756e-03f, 7.031599270e-03f, 7.035522438e-03f, 7.039433253e-03f, 7.043331710e-03f, 7.047217802e-03f,
+7.051091523e-03f, 7.054952868e-03f, 7.058801829e-03f, 7.062638402e-03f, 7.066462579e-03f, 7.070274355e-03f, 7.074073725e-03f, 7.077860682e-03f, 7.081635219e-03f, 7.085397333e-03f,
+7.089147015e-03f, 7.092884261e-03f, 7.096609065e-03f, 7.100321421e-03f, 7.104021322e-03f, 7.107708764e-03f, 7.111383741e-03f, 7.115046246e-03f, 7.118696275e-03f, 7.122333821e-03f,
+7.125958879e-03f, 7.129571443e-03f, 7.133171508e-03f, 7.136759067e-03f, 7.140334116e-03f, 7.143896648e-03f, 7.147446659e-03f, 7.150984143e-03f, 7.154509094e-03f, 7.158021506e-03f,
+7.161521375e-03f, 7.165008695e-03f, 7.168483461e-03f, 7.171945667e-03f, 7.175395307e-03f, 7.178832377e-03f, 7.182256871e-03f, 7.185668784e-03f, 7.189068111e-03f, 7.192454845e-03f,
+7.195828983e-03f, 7.199190519e-03f, 7.202539448e-03f, 7.205875764e-03f, 7.209199463e-03f, 7.212510539e-03f, 7.215808987e-03f, 7.219094802e-03f, 7.222367980e-03f, 7.225628515e-03f,
+7.228876401e-03f, 7.232111635e-03f, 7.235334211e-03f, 7.238544124e-03f, 7.241741370e-03f, 7.244925942e-03f, 7.248097838e-03f, 7.251257051e-03f, 7.254403577e-03f, 7.257537411e-03f,
+7.260658548e-03f, 7.263766983e-03f, 7.266862713e-03f, 7.269945731e-03f, 7.273016034e-03f, 7.276073617e-03f, 7.279118474e-03f, 7.282150602e-03f, 7.285169996e-03f, 7.288176651e-03f,
+7.291170563e-03f, 7.294151726e-03f, 7.297120138e-03f, 7.300075792e-03f, 7.303018685e-03f, 7.305948813e-03f, 7.308866170e-03f, 7.311770752e-03f, 7.314662555e-03f, 7.317541575e-03f,
+7.320407808e-03f, 7.323261248e-03f, 7.326101892e-03f, 7.328929735e-03f, 7.331744774e-03f, 7.334547003e-03f, 7.337336419e-03f, 7.340113017e-03f, 7.342876794e-03f, 7.345627746e-03f,
+7.348365867e-03f, 7.351091154e-03f, 7.353803604e-03f, 7.356503211e-03f, 7.359189972e-03f, 7.361863883e-03f, 7.364524940e-03f, 7.367173139e-03f, 7.369808476e-03f, 7.372430947e-03f,
+7.375040548e-03f, 7.377637275e-03f, 7.380221125e-03f, 7.382792094e-03f, 7.385350178e-03f, 7.387895372e-03f, 7.390427674e-03f, 7.392947080e-03f, 7.395453585e-03f, 7.397947187e-03f,
+7.400427881e-03f, 7.402895664e-03f, 7.405350533e-03f, 7.407792483e-03f, 7.410221511e-03f, 7.412637614e-03f, 7.415040787e-03f, 7.417431028e-03f, 7.419808334e-03f, 7.422172699e-03f,
+7.424524122e-03f, 7.426862599e-03f, 7.429188126e-03f, 7.431500700e-03f, 7.433800317e-03f, 7.436086975e-03f, 7.438360669e-03f, 7.440621398e-03f, 7.442869156e-03f, 7.445103942e-03f,
+7.447325752e-03f, 7.449534582e-03f, 7.451730431e-03f, 7.453913293e-03f, 7.456083167e-03f, 7.458240049e-03f, 7.460383936e-03f, 7.462514825e-03f, 7.464632714e-03f, 7.466737598e-03f,
+7.468829475e-03f, 7.470908343e-03f, 7.472974197e-03f, 7.475027036e-03f, 7.477066856e-03f, 7.479093654e-03f, 7.481107428e-03f, 7.483108175e-03f, 7.485095892e-03f, 7.487070576e-03f,
+7.489032224e-03f, 7.490980834e-03f, 7.492916403e-03f, 7.494838928e-03f, 7.496748406e-03f, 7.498644836e-03f, 7.500528213e-03f, 7.502398537e-03f, 7.504255803e-03f, 7.506100011e-03f,
+7.507931156e-03f, 7.509749236e-03f, 7.511554250e-03f, 7.513346194e-03f, 7.515125066e-03f, 7.516890864e-03f, 7.518643585e-03f, 7.520383227e-03f, 7.522109787e-03f, 7.523823264e-03f,
+7.525523655e-03f, 7.527210957e-03f, 7.528885168e-03f, 7.530546287e-03f, 7.532194310e-03f, 7.533829237e-03f, 7.535451063e-03f, 7.537059788e-03f, 7.538655409e-03f, 7.540237925e-03f,
+7.541807332e-03f, 7.543363630e-03f, 7.544906815e-03f, 7.546436886e-03f, 7.547953842e-03f, 7.549457679e-03f, 7.550948396e-03f, 7.552425991e-03f, 7.553890463e-03f, 7.555341809e-03f,
+7.556780027e-03f, 7.558205116e-03f, 7.559617074e-03f, 7.561015899e-03f, 7.562401589e-03f, 7.563774143e-03f, 7.565133558e-03f, 7.566479834e-03f, 7.567812968e-03f, 7.569132959e-03f,
+7.570439805e-03f, 7.571733505e-03f, 7.573014057e-03f, 7.574281459e-03f, 7.575535710e-03f, 7.576776808e-03f, 7.578004753e-03f, 7.579219541e-03f, 7.580421173e-03f, 7.581609647e-03f,
+7.582784960e-03f, 7.583947113e-03f, 7.585096102e-03f, 7.586231928e-03f, 7.587354589e-03f, 7.588464083e-03f, 7.589560410e-03f, 7.590643567e-03f, 7.591713555e-03f, 7.592770371e-03f,
+7.593814014e-03f, 7.594844484e-03f, 7.595861779e-03f, 7.596865898e-03f, 7.597856840e-03f, 7.598834603e-03f, 7.599799188e-03f, 7.600750593e-03f, 7.601688817e-03f, 7.602613858e-03f,
+7.603525717e-03f, 7.604424391e-03f, 7.605309881e-03f, 7.606182185e-03f, 7.607041303e-03f, 7.607887233e-03f, 7.608719975e-03f, 7.609539528e-03f, 7.610345891e-03f, 7.611139064e-03f,
+7.611919046e-03f, 7.612685835e-03f, 7.613439433e-03f, 7.614179837e-03f, 7.614907047e-03f, 7.615621063e-03f, 7.616321884e-03f, 7.617009509e-03f, 7.617683939e-03f, 7.618345172e-03f,
+7.618993207e-03f, 7.619628046e-03f, 7.620249686e-03f, 7.620858128e-03f, 7.621453371e-03f, 7.622035415e-03f, 7.622604259e-03f, 7.623159904e-03f, 7.623702349e-03f, 7.624231593e-03f,
+7.624747636e-03f, 7.625250479e-03f, 7.625740121e-03f, 7.626216561e-03f, 7.626679800e-03f, 7.627129837e-03f, 7.627566672e-03f, 7.627990306e-03f, 7.628400738e-03f, 7.628797968e-03f,
+7.629181995e-03f, 7.629552821e-03f, 7.629910445e-03f, 7.630254867e-03f, 7.630586087e-03f, 7.630904106e-03f, 7.631208922e-03f, 7.631500537e-03f, 7.631778951e-03f, 7.632044164e-03f,
+7.632296175e-03f, 7.632534986e-03f, 7.632760596e-03f, 7.632973006e-03f, 7.633172216e-03f, 7.633358226e-03f, 7.633531037e-03f, 7.633690649e-03f, 7.633837062e-03f, 7.633970277e-03f,
+7.634090295e-03f, 7.634197115e-03f, 7.634290738e-03f, 7.634371165e-03f, 7.634438396e-03f, 7.634492431e-03f, 7.634533272e-03f, 7.634560919e-03f, 7.634575372e-03f, 7.634576633e-03f,
+7.634564701e-03f, 7.634539577e-03f, 7.634501263e-03f, 7.634449759e-03f, 7.634385065e-03f, 7.634307182e-03f, 7.634216112e-03f, 7.634111854e-03f, 7.633994411e-03f, 7.633863782e-03f,
+7.633719968e-03f, 7.633562972e-03f, 7.633392792e-03f, 7.633209431e-03f, 7.633012889e-03f, 7.632803167e-03f, 7.632580267e-03f, 7.632344189e-03f, 7.632094934e-03f, 7.631832504e-03f,
+7.631556900e-03f, 7.631268122e-03f, 7.630966172e-03f, 7.630651052e-03f, 7.630322761e-03f, 7.629981302e-03f, 7.629626676e-03f, 7.629258884e-03f, 7.628877927e-03f, 7.628483807e-03f,
+7.628076524e-03f, 7.627656081e-03f, 7.627222479e-03f, 7.626775719e-03f, 7.626315802e-03f, 7.625842730e-03f, 7.625356505e-03f, 7.624857128e-03f, 7.624344600e-03f, 7.623818923e-03f,
+7.623280099e-03f, 7.622728129e-03f, 7.622163014e-03f, 7.621584757e-03f, 7.620993359e-03f, 7.620388822e-03f, 7.619771147e-03f, 7.619140336e-03f, 7.618496392e-03f, 7.617839314e-03f,
+7.617169107e-03f, 7.616485770e-03f, 7.615789307e-03f, 7.615079718e-03f, 7.614357006e-03f, 7.613621173e-03f, 7.612872221e-03f, 7.612110151e-03f, 7.611334966e-03f, 7.610546667e-03f,
+7.609745257e-03f, 7.608930738e-03f, 7.608103111e-03f, 7.607262379e-03f, 7.606408543e-03f, 7.605541607e-03f, 7.604661572e-03f, 7.603768440e-03f, 7.602862214e-03f, 7.601942895e-03f,
+7.601010486e-03f, 7.600064990e-03f, 7.599106407e-03f, 7.598134742e-03f, 7.597149996e-03f, 7.596152171e-03f, 7.595141271e-03f, 7.594117296e-03f, 7.593080250e-03f, 7.592030136e-03f,
+7.590966955e-03f, 7.589890709e-03f, 7.588801403e-03f, 7.587699038e-03f, 7.586583616e-03f, 7.585455140e-03f, 7.584313614e-03f, 7.583159039e-03f, 7.581991418e-03f, 7.580810753e-03f,
+7.579617048e-03f, 7.578410306e-03f, 7.577190528e-03f, 7.575957718e-03f, 7.574711878e-03f, 7.573453012e-03f, 7.572181122e-03f, 7.570896210e-03f, 7.569598281e-03f, 7.568287336e-03f,
+7.566963378e-03f, 7.565626412e-03f, 7.564276438e-03f, 7.562913461e-03f, 7.561537484e-03f, 7.560148509e-03f, 7.558746539e-03f, 7.557331579e-03f, 7.555903629e-03f, 7.554462695e-03f,
+7.553008779e-03f, 7.551541883e-03f, 7.550062012e-03f, 7.548569169e-03f, 7.547063356e-03f, 7.545544577e-03f, 7.544012835e-03f, 7.542468134e-03f, 7.540910477e-03f, 7.539339867e-03f,
+7.537756307e-03f, 7.536159801e-03f, 7.534550353e-03f, 7.532927965e-03f, 7.531292642e-03f, 7.529644386e-03f, 7.527983201e-03f, 7.526309091e-03f, 7.524622059e-03f, 7.522922109e-03f,
+7.521209244e-03f, 7.519483468e-03f, 7.517744785e-03f, 7.515993198e-03f, 7.514228710e-03f, 7.512451326e-03f, 7.510661050e-03f, 7.508857884e-03f, 7.507041834e-03f, 7.505212901e-03f,
+7.503371092e-03f, 7.501516408e-03f, 7.499648854e-03f, 7.497768434e-03f, 7.495875152e-03f, 7.493969012e-03f, 7.492050017e-03f, 7.490118172e-03f, 7.488173480e-03f, 7.486215946e-03f,
+7.484245574e-03f, 7.482262367e-03f, 7.480266329e-03f, 7.478257466e-03f, 7.476235780e-03f, 7.474201276e-03f, 7.472153959e-03f, 7.470093832e-03f, 7.468020899e-03f, 7.465935165e-03f,
+7.463836634e-03f, 7.461725310e-03f, 7.459601198e-03f, 7.457464302e-03f, 7.455314626e-03f, 7.453152174e-03f, 7.450976951e-03f, 7.448788962e-03f, 7.446588210e-03f, 7.444374700e-03f,
+7.442148437e-03f, 7.439909425e-03f, 7.437657669e-03f, 7.435393172e-03f, 7.433115940e-03f, 7.430825978e-03f, 7.428523289e-03f, 7.426207879e-03f, 7.423879752e-03f, 7.421538912e-03f,
+7.419185365e-03f, 7.416819115e-03f, 7.414440167e-03f, 7.412048525e-03f, 7.409644195e-03f, 7.407227180e-03f, 7.404797487e-03f, 7.402355119e-03f, 7.399900082e-03f, 7.397432380e-03f,
+7.394952019e-03f, 7.392459003e-03f, 7.389953337e-03f, 7.387435026e-03f, 7.384904076e-03f, 7.382360490e-03f, 7.379804275e-03f, 7.377235435e-03f, 7.374653975e-03f, 7.372059901e-03f,
+7.369453217e-03f, 7.366833928e-03f, 7.364202041e-03f, 7.361557559e-03f, 7.358900488e-03f, 7.356230834e-03f, 7.353548602e-03f, 7.350853796e-03f, 7.348146422e-03f, 7.345426486e-03f,
+7.342693992e-03f, 7.339948947e-03f, 7.337191355e-03f, 7.334421222e-03f, 7.331638553e-03f, 7.328843354e-03f, 7.326035630e-03f, 7.323215386e-03f, 7.320382629e-03f, 7.317537364e-03f,
+7.314679595e-03f, 7.311809329e-03f, 7.308926572e-03f, 7.306031328e-03f, 7.303123604e-03f, 7.300203406e-03f, 7.297270738e-03f, 7.294325606e-03f, 7.291368017e-03f, 7.288397976e-03f,
+7.285415489e-03f, 7.282420561e-03f, 7.279413198e-03f, 7.276393406e-03f, 7.273361192e-03f, 7.270316560e-03f, 7.267259517e-03f, 7.264190068e-03f, 7.261108220e-03f, 7.258013979e-03f,
+7.254907349e-03f, 7.251788339e-03f, 7.248656952e-03f, 7.245513196e-03f, 7.242357077e-03f, 7.239188600e-03f, 7.236007771e-03f, 7.232814598e-03f, 7.229609085e-03f, 7.226391239e-03f,
+7.223161066e-03f, 7.219918573e-03f, 7.216663766e-03f, 7.213396650e-03f, 7.210117232e-03f, 7.206825519e-03f, 7.203521516e-03f, 7.200205230e-03f, 7.196876668e-03f, 7.193535836e-03f,
+7.190182739e-03f, 7.186817385e-03f, 7.183439780e-03f, 7.180049930e-03f, 7.176647842e-03f, 7.173233522e-03f, 7.169806977e-03f, 7.166368214e-03f, 7.162917238e-03f, 7.159454057e-03f,
+7.155978677e-03f, 7.152491104e-03f, 7.148991346e-03f, 7.145479409e-03f, 7.141955299e-03f, 7.138419024e-03f, 7.134870590e-03f, 7.131310003e-03f, 7.127737271e-03f, 7.124152400e-03f,
+7.120555398e-03f, 7.116946270e-03f, 7.113325024e-03f, 7.109691667e-03f, 7.106046205e-03f, 7.102388646e-03f, 7.098718995e-03f, 7.095037262e-03f, 7.091343451e-03f, 7.087637570e-03f,
+7.083919627e-03f, 7.080189628e-03f, 7.076447580e-03f, 7.072693491e-03f, 7.068927367e-03f, 7.065149216e-03f, 7.061359044e-03f, 7.057556859e-03f, 7.053742668e-03f, 7.049916478e-03f,
+7.046078297e-03f, 7.042228131e-03f, 7.038365988e-03f, 7.034491875e-03f, 7.030605799e-03f, 7.026707769e-03f, 7.022797790e-03f, 7.018875870e-03f, 7.014942018e-03f, 7.010996239e-03f,
+7.007038542e-03f, 7.003068935e-03f, 6.999087423e-03f, 6.995094015e-03f, 6.991088719e-03f, 6.987071542e-03f, 6.983042491e-03f, 6.979001575e-03f, 6.974948799e-03f, 6.970884173e-03f,
+6.966807704e-03f, 6.962719399e-03f, 6.958619266e-03f, 6.954507313e-03f, 6.950383548e-03f, 6.946247977e-03f, 6.942100610e-03f, 6.937941453e-03f, 6.933770514e-03f, 6.929587802e-03f,
+6.925393324e-03f, 6.921187087e-03f, 6.916969100e-03f, 6.912739371e-03f, 6.908497907e-03f, 6.904244717e-03f, 6.899979808e-03f, 6.895703188e-03f, 6.891414865e-03f, 6.887114847e-03f,
+6.882803143e-03f, 6.878479760e-03f, 6.874144707e-03f, 6.869797990e-03f, 6.865439619e-03f, 6.861069602e-03f, 6.856687947e-03f, 6.852294661e-03f, 6.847889753e-03f, 6.843473232e-03f,
+6.839045105e-03f, 6.834605381e-03f, 6.830154067e-03f, 6.825691173e-03f, 6.821216706e-03f, 6.816730675e-03f, 6.812233088e-03f, 6.807723953e-03f, 6.803203280e-03f, 6.798671075e-03f,
+6.794127348e-03f, 6.789572107e-03f, 6.785005361e-03f, 6.780427117e-03f, 6.775837385e-03f, 6.771236173e-03f, 6.766623489e-03f, 6.761999342e-03f, 6.757363740e-03f, 6.752716693e-03f,
+6.748058209e-03f, 6.743388295e-03f, 6.738706962e-03f, 6.734014217e-03f, 6.729310070e-03f, 6.724594529e-03f, 6.719867602e-03f, 6.715129299e-03f, 6.710379627e-03f, 6.705618597e-03f,
+6.700846217e-03f, 6.696062495e-03f, 6.691267441e-03f, 6.686461062e-03f, 6.681643369e-03f, 6.676814370e-03f, 6.671974074e-03f, 6.667122490e-03f, 6.662259626e-03f, 6.657385492e-03f,
+6.652500097e-03f, 6.647603449e-03f, 6.642695559e-03f, 6.637776434e-03f, 6.632846083e-03f, 6.627904517e-03f, 6.622951744e-03f, 6.617987773e-03f, 6.613012613e-03f, 6.608026273e-03f,
+6.603028763e-03f, 6.598020092e-03f, 6.593000269e-03f, 6.587969303e-03f, 6.582927204e-03f, 6.577873980e-03f, 6.572809641e-03f, 6.567734196e-03f, 6.562647655e-03f, 6.557550028e-03f,
+6.552441322e-03f, 6.547321548e-03f, 6.542190715e-03f, 6.537048833e-03f, 6.531895911e-03f, 6.526731958e-03f, 6.521556983e-03f, 6.516370998e-03f, 6.511174010e-03f, 6.505966029e-03f,
+6.500747066e-03f, 6.495517129e-03f, 6.490276228e-03f, 6.485024373e-03f, 6.479761573e-03f, 6.474487838e-03f, 6.469203177e-03f, 6.463907601e-03f, 6.458601119e-03f, 6.453283740e-03f,
+6.447955475e-03f, 6.442616333e-03f, 6.437266324e-03f, 6.431905458e-03f, 6.426533744e-03f, 6.421151192e-03f, 6.415757813e-03f, 6.410353616e-03f, 6.404938610e-03f, 6.399512807e-03f,
+6.394076215e-03f, 6.388628844e-03f, 6.383170706e-03f, 6.377701809e-03f, 6.372222163e-03f, 6.366731779e-03f, 6.361230666e-03f, 6.355718835e-03f, 6.350196296e-03f, 6.344663058e-03f,
+6.339119133e-03f, 6.333564529e-03f, 6.327999257e-03f, 6.322423327e-03f, 6.316836750e-03f, 6.311239535e-03f, 6.305631693e-03f, 6.300013234e-03f, 6.294384169e-03f, 6.288744506e-03f,
+6.283094258e-03f, 6.277433433e-03f, 6.271762043e-03f, 6.266080097e-03f, 6.260387607e-03f, 6.254684581e-03f, 6.248971032e-03f, 6.243246968e-03f, 6.237512401e-03f, 6.231767341e-03f,
+6.226011799e-03f, 6.220245784e-03f, 6.214469308e-03f, 6.208682380e-03f, 6.202885012e-03f, 6.197077214e-03f, 6.191258997e-03f, 6.185430370e-03f, 6.179591345e-03f, 6.173741932e-03f,
+6.167882142e-03f, 6.162011986e-03f, 6.156131474e-03f, 6.150240616e-03f, 6.144339424e-03f, 6.138427909e-03f, 6.132506080e-03f, 6.126573949e-03f, 6.120631526e-03f, 6.114678823e-03f,
+6.108715850e-03f, 6.102742618e-03f, 6.096759137e-03f, 6.090765419e-03f, 6.084761474e-03f, 6.078747314e-03f, 6.072722948e-03f, 6.066688389e-03f, 6.060643647e-03f, 6.054588733e-03f,
+6.048523658e-03f, 6.042448432e-03f, 6.036363068e-03f, 6.030267576e-03f, 6.024161966e-03f, 6.018046251e-03f, 6.011920441e-03f, 6.005784547e-03f, 5.999638580e-03f, 5.993482552e-03f,
+5.987316473e-03f, 5.981140355e-03f, 5.974954209e-03f, 5.968758046e-03f, 5.962551877e-03f, 5.956335714e-03f, 5.950109567e-03f, 5.943873449e-03f, 5.937627370e-03f, 5.931371341e-03f,
+5.925105374e-03f, 5.918829480e-03f, 5.912543671e-03f, 5.906247958e-03f, 5.899942351e-03f, 5.893626864e-03f, 5.887301506e-03f, 5.880966290e-03f, 5.874621227e-03f, 5.868266328e-03f,
+5.861901605e-03f, 5.855527070e-03f, 5.849142733e-03f, 5.842748606e-03f, 5.836344701e-03f, 5.829931030e-03f, 5.823507603e-03f, 5.817074433e-03f, 5.810631532e-03f, 5.804178910e-03f,
+5.797716579e-03f, 5.791244551e-03f, 5.784762838e-03f, 5.778271452e-03f, 5.771770403e-03f, 5.765259705e-03f, 5.758739368e-03f, 5.752209404e-03f, 5.745669825e-03f, 5.739120643e-03f,
+5.732561870e-03f, 5.725993517e-03f, 5.719415596e-03f, 5.712828119e-03f, 5.706231099e-03f, 5.699624546e-03f, 5.693008472e-03f, 5.686382891e-03f, 5.679747813e-03f, 5.673103250e-03f,
+5.666449215e-03f, 5.659785719e-03f, 5.653112774e-03f, 5.646430393e-03f, 5.639738587e-03f, 5.633037369e-03f, 5.626326750e-03f, 5.619606743e-03f, 5.612877359e-03f, 5.606138611e-03f,
+5.599390510e-03f, 5.592633070e-03f, 5.585866302e-03f, 5.579090218e-03f, 5.572304830e-03f, 5.565510151e-03f, 5.558706192e-03f, 5.551892967e-03f, 5.545070487e-03f, 5.538238764e-03f,
+5.531397811e-03f, 5.524547640e-03f, 5.517688263e-03f, 5.510819693e-03f, 5.503941942e-03f, 5.497055023e-03f, 5.490158946e-03f, 5.483253726e-03f, 5.476339374e-03f, 5.469415904e-03f,
+5.462483326e-03f, 5.455541654e-03f, 5.448590900e-03f, 5.441631076e-03f, 5.434662196e-03f, 5.427684271e-03f, 5.420697314e-03f, 5.413701338e-03f, 5.406696354e-03f, 5.399682377e-03f,
+5.392659417e-03f, 5.385627489e-03f, 5.378586603e-03f, 5.371536774e-03f, 5.364478013e-03f, 5.357410334e-03f, 5.350333748e-03f, 5.343248269e-03f, 5.336153910e-03f, 5.329050682e-03f,
+5.321938599e-03f, 5.314817673e-03f, 5.307687918e-03f, 5.300549345e-03f, 5.293401968e-03f, 5.286245800e-03f, 5.279080853e-03f, 5.271907140e-03f, 5.264724673e-03f, 5.257533467e-03f,
+5.250333533e-03f, 5.243124885e-03f, 5.235907535e-03f, 5.228681496e-03f, 5.221446782e-03f, 5.214203404e-03f, 5.206951377e-03f, 5.199690713e-03f, 5.192421425e-03f, 5.185143526e-03f,
+5.177857028e-03f, 5.170561946e-03f, 5.163258292e-03f, 5.155946079e-03f, 5.148625320e-03f, 5.141296029e-03f, 5.133958217e-03f, 5.126611900e-03f, 5.119257088e-03f, 5.111893797e-03f,
+5.104522038e-03f, 5.097141825e-03f, 5.089753171e-03f, 5.082356090e-03f, 5.074950594e-03f, 5.067536697e-03f, 5.060114411e-03f, 5.052683751e-03f, 5.045244730e-03f, 5.037797360e-03f,
+5.030341655e-03f, 5.022877629e-03f, 5.015405294e-03f, 5.007924664e-03f, 5.000435753e-03f, 4.992938573e-03f, 4.985433138e-03f, 4.977919461e-03f, 4.970397557e-03f, 4.962867437e-03f,
+4.955329116e-03f, 4.947782607e-03f, 4.940227924e-03f, 4.932665079e-03f, 4.925094087e-03f, 4.917514961e-03f, 4.909927714e-03f, 4.902332360e-03f, 4.894728912e-03f, 4.887117385e-03f,
+4.879497791e-03f, 4.871870144e-03f, 4.864234458e-03f, 4.856590746e-03f, 4.848939022e-03f, 4.841279299e-03f, 4.833611592e-03f, 4.825935913e-03f, 4.818252277e-03f, 4.810560696e-03f,
+4.802861186e-03f, 4.795153759e-03f, 4.787438429e-03f, 4.779715210e-03f, 4.771984116e-03f, 4.764245161e-03f, 4.756498357e-03f, 4.748743719e-03f, 4.740981261e-03f, 4.733210997e-03f,
+4.725432940e-03f, 4.717647104e-03f, 4.709853503e-03f, 4.702052151e-03f, 4.694243062e-03f, 4.686426249e-03f, 4.678601727e-03f, 4.670769509e-03f, 4.662929609e-03f, 4.655082042e-03f,
+4.647226821e-03f, 4.639363960e-03f, 4.631493473e-03f, 4.623615375e-03f, 4.615729678e-03f, 4.607836397e-03f, 4.599935547e-03f, 4.592027140e-03f, 4.584111192e-03f, 4.576187716e-03f,
+4.568256726e-03f, 4.560318236e-03f, 4.552372261e-03f, 4.544418815e-03f, 4.536457911e-03f, 4.528489564e-03f, 4.520513787e-03f, 4.512530596e-03f, 4.504540004e-03f, 4.496542026e-03f,
+4.488536675e-03f, 4.480523966e-03f, 4.472503913e-03f, 4.464476530e-03f, 4.456441831e-03f, 4.448399831e-03f, 4.440350545e-03f, 4.432293985e-03f, 4.424230167e-03f, 4.416159104e-03f,
+4.408080812e-03f, 4.399995304e-03f, 4.391902595e-03f, 4.383802699e-03f, 4.375695631e-03f, 4.367581404e-03f, 4.359460034e-03f, 4.351331534e-03f, 4.343195919e-03f, 4.335053203e-03f,
+4.326903401e-03f, 4.318746528e-03f, 4.310582597e-03f, 4.302411623e-03f, 4.294233621e-03f, 4.286048605e-03f, 4.277856590e-03f, 4.269657589e-03f, 4.261451619e-03f, 4.253238692e-03f,
+4.245018824e-03f, 4.236792029e-03f, 4.228558322e-03f, 4.220317717e-03f, 4.212070229e-03f, 4.203815873e-03f, 4.195554663e-03f, 4.187286614e-03f, 4.179011739e-03f, 4.170730055e-03f,
+4.162441576e-03f, 4.154146316e-03f, 4.145844289e-03f, 4.137535512e-03f, 4.129219997e-03f, 4.120897761e-03f, 4.112568818e-03f, 4.104233182e-03f, 4.095890868e-03f, 4.087541891e-03f,
+4.079186266e-03f, 4.070824007e-03f, 4.062455130e-03f, 4.054079649e-03f, 4.045697578e-03f, 4.037308933e-03f, 4.028913729e-03f, 4.020511980e-03f, 4.012103701e-03f, 4.003688907e-03f,
+3.995267613e-03f, 3.986839834e-03f, 3.978405584e-03f, 3.969964879e-03f, 3.961517733e-03f, 3.953064162e-03f, 3.944604180e-03f, 3.936137802e-03f, 3.927665043e-03f, 3.919185918e-03f,
+3.910700443e-03f, 3.902208631e-03f, 3.893710499e-03f, 3.885206060e-03f, 3.876695331e-03f, 3.868178326e-03f, 3.859655059e-03f, 3.851125547e-03f, 3.842589804e-03f, 3.834047845e-03f,
+3.825499686e-03f, 3.816945341e-03f, 3.808384825e-03f, 3.799818154e-03f, 3.791245343e-03f, 3.782666406e-03f, 3.774081360e-03f, 3.765490218e-03f, 3.756892997e-03f, 3.748289711e-03f,
+3.739680375e-03f, 3.731065005e-03f, 3.722443616e-03f, 3.713816223e-03f, 3.705182842e-03f, 3.696543487e-03f, 3.687898173e-03f, 3.679246917e-03f, 3.670589733e-03f, 3.661926636e-03f,
+3.653257642e-03f, 3.644582766e-03f, 3.635902023e-03f, 3.627215429e-03f, 3.618522999e-03f, 3.609824747e-03f, 3.601120691e-03f, 3.592410844e-03f, 3.583695222e-03f, 3.574973841e-03f,
+3.566246715e-03f, 3.557513861e-03f, 3.548775294e-03f, 3.540031028e-03f, 3.531281080e-03f, 3.522525464e-03f, 3.513764197e-03f, 3.504997293e-03f, 3.496224769e-03f, 3.487446638e-03f,
+3.478662918e-03f, 3.469873623e-03f, 3.461078769e-03f, 3.452278371e-03f, 3.443472445e-03f, 3.434661006e-03f, 3.425844070e-03f, 3.417021653e-03f, 3.408193769e-03f, 3.399360434e-03f,
+3.390521664e-03f, 3.381677475e-03f, 3.372827881e-03f, 3.363972899e-03f, 3.355112544e-03f, 3.346246832e-03f, 3.337375778e-03f, 3.328499398e-03f, 3.319617707e-03f, 3.310730721e-03f,
+3.301838456e-03f, 3.292940927e-03f, 3.284038150e-03f, 3.275130141e-03f, 3.266216915e-03f, 3.257298488e-03f, 3.248374875e-03f, 3.239446092e-03f, 3.230512156e-03f, 3.221573081e-03f,
+3.212628883e-03f, 3.203679578e-03f, 3.194725182e-03f, 3.185765710e-03f, 3.176801179e-03f, 3.167831603e-03f, 3.158857000e-03f, 3.149877383e-03f, 3.140892770e-03f, 3.131903176e-03f,
+3.122908616e-03f, 3.113909107e-03f, 3.104904664e-03f, 3.095895304e-03f, 3.086881041e-03f, 3.077861892e-03f, 3.068837873e-03f, 3.059808999e-03f, 3.050775286e-03f, 3.041736750e-03f,
+3.032693408e-03f, 3.023645274e-03f, 3.014592365e-03f, 3.005534696e-03f, 2.996472284e-03f, 2.987405144e-03f, 2.978333293e-03f, 2.969256746e-03f, 2.960175518e-03f, 2.951089627e-03f,
+2.941999088e-03f, 2.932903917e-03f, 2.923804129e-03f, 2.914699741e-03f, 2.905590769e-03f, 2.896477229e-03f, 2.887359136e-03f, 2.878236507e-03f, 2.869109358e-03f, 2.859977704e-03f,
+2.850841562e-03f, 2.841700947e-03f, 2.832555876e-03f, 2.823406365e-03f, 2.814252430e-03f, 2.805094086e-03f, 2.795931350e-03f, 2.786764238e-03f, 2.777592766e-03f, 2.768416950e-03f,
+2.759236806e-03f, 2.750052350e-03f, 2.740863598e-03f, 2.731670566e-03f, 2.722473271e-03f, 2.713271728e-03f, 2.704065954e-03f, 2.694855965e-03f, 2.685641776e-03f, 2.676423404e-03f,
+2.667200866e-03f, 2.657974177e-03f, 2.648743353e-03f, 2.639508410e-03f, 2.630269366e-03f, 2.621026235e-03f, 2.611779034e-03f, 2.602527780e-03f, 2.593272488e-03f, 2.584013174e-03f,
+2.574749856e-03f, 2.565482548e-03f, 2.556211268e-03f, 2.546936030e-03f, 2.537656853e-03f, 2.528373752e-03f, 2.519086742e-03f, 2.509795841e-03f, 2.500501065e-03f, 2.491202429e-03f,
+2.481899951e-03f, 2.472593646e-03f, 2.463283531e-03f, 2.453969621e-03f, 2.444651934e-03f, 2.435330485e-03f, 2.426005291e-03f, 2.416676368e-03f, 2.407343733e-03f, 2.398007401e-03f,
+2.388667389e-03f, 2.379323714e-03f, 2.369976391e-03f, 2.360625437e-03f, 2.351270869e-03f, 2.341912702e-03f, 2.332550953e-03f, 2.323185639e-03f, 2.313816776e-03f, 2.304444379e-03f,
+2.295068466e-03f, 2.285689053e-03f, 2.276306156e-03f, 2.266919791e-03f, 2.257529976e-03f, 2.248136726e-03f, 2.238740058e-03f, 2.229339988e-03f, 2.219936533e-03f, 2.210529708e-03f,
+2.201119532e-03f, 2.191706019e-03f, 2.182289186e-03f, 2.172869050e-03f, 2.163445627e-03f, 2.154018934e-03f, 2.144588987e-03f, 2.135155803e-03f, 2.125719397e-03f, 2.116279787e-03f,
+2.106836989e-03f, 2.097391019e-03f, 2.087941894e-03f, 2.078489631e-03f, 2.069034245e-03f, 2.059575754e-03f, 2.050114174e-03f, 2.040649521e-03f, 2.031181811e-03f, 2.021711063e-03f,
+2.012237291e-03f, 2.002760512e-03f, 1.993280743e-03f, 1.983798001e-03f, 1.974312302e-03f, 1.964823662e-03f, 1.955332098e-03f, 1.945837627e-03f, 1.936340265e-03f, 1.926840029e-03f,
+1.917336935e-03f, 1.907831000e-03f, 1.898322240e-03f, 1.888810673e-03f, 1.879296313e-03f, 1.869779179e-03f, 1.860259287e-03f, 1.850736653e-03f, 1.841211293e-03f, 1.831683226e-03f,
+1.822152466e-03f, 1.812619031e-03f, 1.803082937e-03f, 1.793544201e-03f, 1.784002840e-03f, 1.774458869e-03f, 1.764912307e-03f, 1.755363168e-03f, 1.745811471e-03f, 1.736257231e-03f,
+1.726700466e-03f, 1.717141191e-03f, 1.707579424e-03f, 1.698015182e-03f, 1.688448479e-03f, 1.678879335e-03f, 1.669307764e-03f, 1.659733785e-03f, 1.650157413e-03f, 1.640578664e-03f,
+1.630997557e-03f, 1.621414107e-03f, 1.611828332e-03f, 1.602240247e-03f, 1.592649869e-03f, 1.583057216e-03f, 1.573462303e-03f, 1.563865148e-03f, 1.554265768e-03f, 1.544664178e-03f,
+1.535060396e-03f, 1.525454438e-03f, 1.515846322e-03f, 1.506236063e-03f, 1.496623678e-03f, 1.487009185e-03f, 1.477392600e-03f, 1.467773939e-03f, 1.458153219e-03f, 1.448530458e-03f,
+1.438905672e-03f, 1.429278877e-03f, 1.419650090e-03f, 1.410019328e-03f, 1.400386608e-03f, 1.390751946e-03f, 1.381115360e-03f, 1.371476866e-03f, 1.361836480e-03f, 1.352194220e-03f,
+1.342550102e-03f, 1.332904143e-03f, 1.323256360e-03f, 1.313606769e-03f, 1.303955387e-03f, 1.294302232e-03f, 1.284647319e-03f, 1.274990666e-03f, 1.265332289e-03f, 1.255672205e-03f,
+1.246010432e-03f, 1.236346984e-03f, 1.226681881e-03f, 1.217015137e-03f, 1.207346771e-03f, 1.197676798e-03f, 1.188005236e-03f, 1.178332101e-03f, 1.168657410e-03f, 1.158981180e-03f,
+1.149303429e-03f, 1.139624171e-03f, 1.129943425e-03f, 1.120261207e-03f, 1.110577534e-03f, 1.100892423e-03f, 1.091205890e-03f, 1.081517953e-03f, 1.071828628e-03f, 1.062137932e-03f,
+1.052445882e-03f, 1.042752494e-03f, 1.033057786e-03f, 1.023361774e-03f, 1.013664475e-03f, 1.003965905e-03f, 9.942660831e-04f, 9.845650242e-04f, 9.748627457e-04f, 9.651592643e-04f,
+9.554545970e-04f, 9.457487604e-04f, 9.360417715e-04f, 9.263336471e-04f, 9.166244041e-04f, 9.069140591e-04f, 8.972026291e-04f, 8.874901310e-04f, 8.777765815e-04f, 8.680619974e-04f,
+8.583463957e-04f, 8.486297932e-04f, 8.389122066e-04f, 8.291936529e-04f, 8.194741488e-04f, 8.097537113e-04f, 8.000323571e-04f, 7.903101031e-04f, 7.805869662e-04f, 7.708629631e-04f,
+7.611381108e-04f, 7.514124260e-04f, 7.416859257e-04f, 7.319586267e-04f, 7.222305457e-04f, 7.125016997e-04f, 7.027721056e-04f, 6.930417801e-04f, 6.833107401e-04f, 6.735790024e-04f,
+6.638465840e-04f, 6.541135016e-04f, 6.443797722e-04f, 6.346454125e-04f, 6.249104394e-04f, 6.151748697e-04f, 6.054387204e-04f, 5.957020082e-04f, 5.859647501e-04f, 5.762269628e-04f,
+5.664886632e-04f, 5.567498682e-04f, 5.470105947e-04f, 5.372708594e-04f, 5.275306792e-04f, 5.177900710e-04f, 5.080490516e-04f, 4.983076380e-04f, 4.885658468e-04f, 4.788236950e-04f,
+4.690811995e-04f, 4.593383770e-04f, 4.495952445e-04f, 4.398518188e-04f, 4.301081167e-04f, 4.203641550e-04f, 4.106199508e-04f, 4.008755207e-04f, 3.911308816e-04f, 3.813860504e-04f,
+3.716410439e-04f, 3.618958790e-04f, 3.521505725e-04f, 3.424051413e-04f, 3.326596022e-04f, 3.229139720e-04f, 3.131682676e-04f, 3.034225059e-04f, 2.936767037e-04f, 2.839308777e-04f,
+2.741850450e-04f, 2.644392222e-04f, 2.546934263e-04f, 2.449476740e-04f, 2.352019823e-04f, 2.254563679e-04f, 2.157108477e-04f, 2.059654386e-04f, 1.962201572e-04f, 1.864750206e-04f,
+1.767300455e-04f, 1.669852487e-04f, 1.572406471e-04f, 1.474962576e-04f, 1.377520968e-04f, 1.280081817e-04f, 1.182645291e-04f, 1.085211558e-04f, 9.877807857e-05f, 8.903531432e-05f,
+7.929287983e-05f, 6.955079191e-05f, 5.980906739e-05f, 5.006772308e-05f, 4.032677579e-05f, 3.058624233e-05f, 2.084613952e-05f, 1.110648415e-05f, 1.367293040e-06f, -8.371417008e-06f,
+-1.810962919e-05f, -2.784732671e-05f, -3.758449276e-05f, -4.732111054e-05f, -5.705716327e-05f, -6.679263414e-05f, -7.652750637e-05f, -8.626176315e-05f, -9.599538771e-05f, -1.057283633e-04f,
+-1.154606730e-04f, -1.251923002e-04f, -1.349232280e-04f, -1.446534396e-04f, -1.543829184e-04f, -1.641116474e-04f, -1.738396100e-04f, -1.835667894e-04f, -1.932931687e-04f, -2.030187313e-04f,
+-2.127434603e-04f, -2.224673390e-04f, -2.321903507e-04f, -2.419124786e-04f, -2.516337059e-04f, -2.613540159e-04f, -2.710733918e-04f, -2.807918169e-04f, -2.905092745e-04f, -3.002257477e-04f,
+-3.099412199e-04f, -3.196556743e-04f, -3.293690942e-04f, -3.390814629e-04f, -3.487927635e-04f, -3.585029795e-04f, -3.682120941e-04f, -3.779200905e-04f, -3.876269520e-04f, -3.973326619e-04f,
+-4.070372036e-04f, -4.167405602e-04f, -4.264427152e-04f, -4.361436517e-04f, -4.458433531e-04f, -4.555418027e-04f, -4.652389838e-04f, -4.749348796e-04f, -4.846294736e-04f, -4.943227490e-04f,
+-5.040146891e-04f, -5.137052773e-04f, -5.233944969e-04f, -5.330823311e-04f, -5.427687634e-04f, -5.524537771e-04f, -5.621373555e-04f, -5.718194819e-04f, -5.815001397e-04f, -5.911793123e-04f,
+-6.008569829e-04f, -6.105331350e-04f, -6.202077518e-04f, -6.298808168e-04f, -6.395523134e-04f, -6.492222248e-04f, -6.588905344e-04f, -6.685572257e-04f, -6.782222820e-04f, -6.878856867e-04f,
+-6.975474231e-04f, -7.072074747e-04f, -7.168658249e-04f, -7.265224570e-04f, -7.361773544e-04f, -7.458305006e-04f, -7.554818790e-04f, -7.651314729e-04f, -7.747792658e-04f, -7.844252411e-04f,
+-7.940693823e-04f, -8.037116727e-04f, -8.133520958e-04f, -8.229906350e-04f, -8.326272738e-04f, -8.422619956e-04f, -8.518947838e-04f, -8.615256219e-04f, -8.711544934e-04f, -8.807813818e-04f,
+-8.904062704e-04f, -9.000291428e-04f, -9.096499824e-04f, -9.192687727e-04f, -9.288854971e-04f, -9.385001393e-04f, -9.481126826e-04f, -9.577231106e-04f, -9.673314068e-04f, -9.769375546e-04f,
+-9.865415376e-04f, -9.961433392e-04f, -1.005742943e-03f, -1.015340333e-03f, -1.024935492e-03f, -1.034528403e-03f, -1.044119051e-03f, -1.053707419e-03f, -1.063293490e-03f, -1.072877248e-03f,
+-1.082458677e-03f, -1.092037760e-03f, -1.101614480e-03f, -1.111188822e-03f, -1.120760768e-03f, -1.130330303e-03f, -1.139897410e-03f, -1.149462072e-03f, -1.159024273e-03f, -1.168583997e-03f,
+-1.178141228e-03f, -1.187695948e-03f, -1.197248142e-03f, -1.206797793e-03f, -1.216344885e-03f, -1.225889402e-03f, -1.235431326e-03f, -1.244970642e-03f, -1.254507334e-03f, -1.264041384e-03f,
+-1.273572778e-03f, -1.283101497e-03f, -1.292627527e-03f, -1.302150850e-03f, -1.311671451e-03f, -1.321189312e-03f, -1.330704419e-03f, -1.340216754e-03f, -1.349726301e-03f, -1.359233043e-03f,
+-1.368736966e-03f, -1.378238051e-03f, -1.387736284e-03f, -1.397231647e-03f, -1.406724125e-03f, -1.416213701e-03f, -1.425700359e-03f, -1.435184083e-03f, -1.444664856e-03f, -1.454142662e-03f,
+-1.463617486e-03f, -1.473089310e-03f, -1.482558119e-03f, -1.492023896e-03f, -1.501486625e-03f, -1.510946290e-03f, -1.520402875e-03f, -1.529856363e-03f, -1.539306739e-03f, -1.548753986e-03f,
+-1.558198088e-03f, -1.567639029e-03f, -1.577076793e-03f, -1.586511363e-03f, -1.595942724e-03f, -1.605370859e-03f, -1.614795752e-03f, -1.624217387e-03f, -1.633635748e-03f, -1.643050819e-03f,
+-1.652462583e-03f, -1.661871026e-03f, -1.671276129e-03f, -1.680677879e-03f, -1.690076257e-03f, -1.699471249e-03f, -1.708862838e-03f, -1.718251008e-03f, -1.727635743e-03f, -1.737017027e-03f,
+-1.746394845e-03f, -1.755769179e-03f, -1.765140014e-03f, -1.774507335e-03f, -1.783871124e-03f, -1.793231366e-03f, -1.802588045e-03f, -1.811941145e-03f, -1.821290650e-03f, -1.830636544e-03f,
+-1.839978811e-03f, -1.849317435e-03f, -1.858652400e-03f, -1.867983690e-03f, -1.877311290e-03f, -1.886635182e-03f, -1.895955352e-03f, -1.905271784e-03f, -1.914584461e-03f, -1.923893367e-03f,
+-1.933198488e-03f, -1.942499806e-03f, -1.951797306e-03f, -1.961090972e-03f, -1.970380789e-03f, -1.979666739e-03f, -1.988948809e-03f, -1.998226981e-03f, -2.007501239e-03f, -2.016771569e-03f,
+-2.026037954e-03f, -2.035300378e-03f, -2.044558825e-03f, -2.053813281e-03f, -2.063063728e-03f, -2.072310151e-03f, -2.081552535e-03f, -2.090790864e-03f, -2.100025121e-03f, -2.109255291e-03f,
+-2.118481359e-03f, -2.127703308e-03f, -2.136921124e-03f, -2.146134789e-03f, -2.155344289e-03f, -2.164549607e-03f, -2.173750729e-03f, -2.182947638e-03f, -2.192140318e-03f, -2.201328755e-03f,
+-2.210512932e-03f, -2.219692833e-03f, -2.228868444e-03f, -2.238039748e-03f, -2.247206729e-03f, -2.256369373e-03f, -2.265527663e-03f, -2.274681585e-03f, -2.283831121e-03f, -2.292976257e-03f,
+-2.302116978e-03f, -2.311253266e-03f, -2.320385108e-03f, -2.329512487e-03f, -2.338635389e-03f, -2.347753796e-03f, -2.356867694e-03f, -2.365977068e-03f, -2.375081901e-03f, -2.384182179e-03f,
+-2.393277885e-03f, -2.402369004e-03f, -2.411455522e-03f, -2.420537421e-03f, -2.429614688e-03f, -2.438687306e-03f, -2.447755259e-03f, -2.456818534e-03f, -2.465877113e-03f, -2.474930982e-03f,
+-2.483980126e-03f, -2.493024528e-03f, -2.502064173e-03f, -2.511099047e-03f, -2.520129133e-03f, -2.529154417e-03f, -2.538174883e-03f, -2.547190515e-03f, -2.556201299e-03f, -2.565207219e-03f,
+-2.574208259e-03f, -2.583204405e-03f, -2.592195640e-03f, -2.601181951e-03f, -2.610163320e-03f, -2.619139734e-03f, -2.628111177e-03f, -2.637077634e-03f, -2.646039089e-03f, -2.654995527e-03f,
+-2.663946934e-03f, -2.672893293e-03f, -2.681834589e-03f, -2.690770808e-03f, -2.699701934e-03f, -2.708627952e-03f, -2.717548847e-03f, -2.726464603e-03f, -2.735375206e-03f, -2.744280640e-03f,
+-2.753180890e-03f, -2.762075942e-03f, -2.770965780e-03f, -2.779850388e-03f, -2.788729752e-03f, -2.797603857e-03f, -2.806472688e-03f, -2.815336229e-03f, -2.824194465e-03f, -2.833047383e-03f,
+-2.841894965e-03f, -2.850737198e-03f, -2.859574067e-03f, -2.868405555e-03f, -2.877231650e-03f, -2.886052334e-03f, -2.894867595e-03f, -2.903677415e-03f, -2.912481781e-03f, -2.921280678e-03f,
+-2.930074091e-03f, -2.938862004e-03f, -2.947644403e-03f, -2.956421273e-03f, -2.965192599e-03f, -2.973958366e-03f, -2.982718560e-03f, -2.991473165e-03f, -3.000222166e-03f, -3.008965549e-03f,
+-3.017703300e-03f, -3.026435402e-03f, -3.035161841e-03f, -3.043882603e-03f, -3.052597673e-03f, -3.061307036e-03f, -3.070010677e-03f, -3.078708581e-03f, -3.087400734e-03f, -3.096087121e-03f,
+-3.104767727e-03f, -3.113442538e-03f, -3.122111538e-03f, -3.130774714e-03f, -3.139432050e-03f, -3.148083531e-03f, -3.156729144e-03f, -3.165368873e-03f, -3.174002705e-03f, -3.182630623e-03f,
+-3.191252614e-03f, -3.199868662e-03f, -3.208478755e-03f, -3.217082876e-03f, -3.225681011e-03f, -3.234273146e-03f, -3.242859266e-03f, -3.251439356e-03f, -3.260013403e-03f, -3.268581391e-03f,
+-3.277143307e-03f, -3.285699134e-03f, -3.294248860e-03f, -3.302792470e-03f, -3.311329948e-03f, -3.319861282e-03f, -3.328386455e-03f, -3.336905454e-03f, -3.345418265e-03f, -3.353924873e-03f,
+-3.362425263e-03f, -3.370919422e-03f, -3.379407335e-03f, -3.387888987e-03f, -3.396364364e-03f, -3.404833452e-03f, -3.413296236e-03f, -3.421752703e-03f, -3.430202838e-03f, -3.438646626e-03f,
+-3.447084054e-03f, -3.455515107e-03f, -3.463939770e-03f, -3.472358030e-03f, -3.480769873e-03f, -3.489175284e-03f, -3.497574248e-03f, -3.505966753e-03f, -3.514352783e-03f, -3.522732324e-03f,
+-3.531105363e-03f, -3.539471884e-03f, -3.547831875e-03f, -3.556185321e-03f, -3.564532207e-03f, -3.572872520e-03f, -3.581206245e-03f, -3.589533369e-03f, -3.597853878e-03f, -3.606167757e-03f,
+-3.614474992e-03f, -3.622775569e-03f, -3.631069475e-03f, -3.639356695e-03f, -3.647637215e-03f, -3.655911022e-03f, -3.664178101e-03f, -3.672438439e-03f, -3.680692021e-03f, -3.688938833e-03f,
+-3.697178862e-03f, -3.705412094e-03f, -3.713638515e-03f, -3.721858111e-03f, -3.730070868e-03f, -3.738276772e-03f, -3.746475810e-03f, -3.754667967e-03f, -3.762853230e-03f, -3.771031585e-03f,
+-3.779203018e-03f, -3.787367516e-03f, -3.795525064e-03f, -3.803675649e-03f, -3.811819257e-03f, -3.819955875e-03f, -3.828085489e-03f, -3.836208084e-03f, -3.844323648e-03f, -3.852432167e-03f,
+-3.860533626e-03f, -3.868628013e-03f, -3.876715314e-03f, -3.884795515e-03f, -3.892868602e-03f, -3.900934562e-03f, -3.908993382e-03f, -3.917045047e-03f, -3.925089545e-03f, -3.933126861e-03f,
+-3.941156982e-03f, -3.949179895e-03f, -3.957195586e-03f, -3.965204041e-03f, -3.973205248e-03f, -3.981199192e-03f, -3.989185861e-03f, -3.997165240e-03f, -4.005137316e-03f, -4.013102077e-03f,
+-4.021059508e-03f, -4.029009596e-03f, -4.036952328e-03f, -4.044887691e-03f, -4.052815670e-03f, -4.060736253e-03f, -4.068649427e-03f, -4.076555177e-03f, -4.084453492e-03f, -4.092344357e-03f,
+-4.100227759e-03f, -4.108103686e-03f, -4.115972123e-03f, -4.123833057e-03f, -4.131686477e-03f, -4.139532367e-03f, -4.147370715e-03f, -4.155201508e-03f, -4.163024732e-03f, -4.170840375e-03f,
+-4.178648424e-03f, -4.186448865e-03f, -4.194241685e-03f, -4.202026870e-03f, -4.209804409e-03f, -4.217574288e-03f, -4.225336494e-03f, -4.233091014e-03f, -4.240837834e-03f, -4.248576942e-03f,
+-4.256308326e-03f, -4.264031971e-03f, -4.271747865e-03f, -4.279455995e-03f, -4.287156347e-03f, -4.294848911e-03f, -4.302533671e-03f, -4.310210615e-03f, -4.317879731e-03f, -4.325541006e-03f,
+-4.333194426e-03f, -4.340839979e-03f, -4.348477653e-03f, -4.356107433e-03f, -4.363729308e-03f, -4.371343265e-03f, -4.378949291e-03f, -4.386547372e-03f, -4.394137498e-03f, -4.401719654e-03f,
+-4.409293828e-03f, -4.416860007e-03f, -4.424418179e-03f, -4.431968331e-03f, -4.439510450e-03f, -4.447044524e-03f, -4.454570541e-03f, -4.462088486e-03f, -4.469598349e-03f, -4.477100116e-03f,
+-4.484593774e-03f, -4.492079312e-03f, -4.499556716e-03f, -4.507025975e-03f, -4.514487075e-03f, -4.521940005e-03f, -4.529384751e-03f, -4.536821302e-03f, -4.544249644e-03f, -4.551669766e-03f,
+-4.559081654e-03f, -4.566485297e-03f, -4.573880683e-03f, -4.581267798e-03f, -4.588646631e-03f, -4.596017168e-03f, -4.603379399e-03f, -4.610733310e-03f, -4.618078889e-03f, -4.625416124e-03f,
+-4.632745003e-03f, -4.640065513e-03f, -4.647377643e-03f, -4.654681379e-03f, -4.661976710e-03f, -4.669263624e-03f, -4.676542108e-03f, -4.683812150e-03f, -4.691073738e-03f, -4.698326860e-03f,
+-4.705571504e-03f, -4.712807658e-03f, -4.720035310e-03f, -4.727254447e-03f, -4.734465058e-03f, -4.741667130e-03f, -4.748860651e-03f, -4.756045610e-03f, -4.763221995e-03f, -4.770389793e-03f,
+-4.777548993e-03f, -4.784699582e-03f, -4.791841549e-03f, -4.798974882e-03f, -4.806099568e-03f, -4.813215597e-03f, -4.820322956e-03f, -4.827421633e-03f, -4.834511616e-03f, -4.841592894e-03f,
+-4.848665455e-03f, -4.855729287e-03f, -4.862784378e-03f, -4.869830717e-03f, -4.876868291e-03f, -4.883897090e-03f, -4.890917100e-03f, -4.897928312e-03f, -4.904930712e-03f, -4.911924290e-03f,
+-4.918909033e-03f, -4.925884930e-03f, -4.932851970e-03f, -4.939810141e-03f, -4.946759430e-03f, -4.953699828e-03f, -4.960631321e-03f, -4.967553899e-03f, -4.974467550e-03f, -4.981372263e-03f,
+-4.988268025e-03f, -4.995154827e-03f, -5.002032655e-03f, -5.008901499e-03f, -5.015761347e-03f, -5.022612188e-03f, -5.029454011e-03f, -5.036286804e-03f, -5.043110555e-03f, -5.049925254e-03f,
+-5.056730889e-03f, -5.063527448e-03f, -5.070314921e-03f, -5.077093297e-03f, -5.083862563e-03f, -5.090622709e-03f, -5.097373723e-03f, -5.104115595e-03f, -5.110848312e-03f, -5.117571865e-03f,
+-5.124286241e-03f, -5.130991430e-03f, -5.137687420e-03f, -5.144374200e-03f, -5.151051760e-03f, -5.157720088e-03f, -5.164379172e-03f, -5.171029003e-03f, -5.177669569e-03f, -5.184300859e-03f,
+-5.190922862e-03f, -5.197535567e-03f, -5.204138962e-03f, -5.210733038e-03f, -5.217317783e-03f, -5.223893187e-03f, -5.230459237e-03f, -5.237015924e-03f, -5.243563237e-03f, -5.250101164e-03f,
+-5.256629696e-03f, -5.263148820e-03f, -5.269658527e-03f, -5.276158805e-03f, -5.282649644e-03f, -5.289131033e-03f, -5.295602961e-03f, -5.302065418e-03f, -5.308518392e-03f, -5.314961874e-03f,
+-5.321395852e-03f, -5.327820317e-03f, -5.334235256e-03f, -5.340640660e-03f, -5.347036518e-03f, -5.353422820e-03f, -5.359799554e-03f, -5.366166711e-03f, -5.372524280e-03f, -5.378872250e-03f,
+-5.385210611e-03f, -5.391539352e-03f, -5.397858463e-03f, -5.404167933e-03f, -5.410467753e-03f, -5.416757911e-03f, -5.423038397e-03f, -5.429309202e-03f, -5.435570313e-03f, -5.441821722e-03f,
+-5.448063418e-03f, -5.454295390e-03f, -5.460517629e-03f, -5.466730123e-03f, -5.472932864e-03f, -5.479125839e-03f, -5.485309040e-03f, -5.491482456e-03f, -5.497646077e-03f, -5.503799893e-03f,
+-5.509943894e-03f, -5.516078068e-03f, -5.522202408e-03f, -5.528316901e-03f, -5.534421539e-03f, -5.540516310e-03f, -5.546601206e-03f, -5.552676216e-03f, -5.558741330e-03f, -5.564796538e-03f,
+-5.570841830e-03f, -5.576877196e-03f, -5.582902626e-03f, -5.588918111e-03f, -5.594923640e-03f, -5.600919204e-03f, -5.606904792e-03f, -5.612880395e-03f, -5.618846003e-03f, -5.624801606e-03f,
+-5.630747194e-03f, -5.636682758e-03f, -5.642608288e-03f, -5.648523773e-03f, -5.654429206e-03f, -5.660324574e-03f, -5.666209870e-03f, -5.672085083e-03f, -5.677950204e-03f, -5.683805222e-03f,
+-5.689650129e-03f, -5.695484915e-03f, -5.701309570e-03f, -5.707124085e-03f, -5.712928449e-03f, -5.718722655e-03f, -5.724506691e-03f, -5.730280549e-03f, -5.736044219e-03f, -5.741797692e-03f,
+-5.747540958e-03f, -5.753274007e-03f, -5.758996831e-03f, -5.764709420e-03f, -5.770411765e-03f, -5.776103856e-03f, -5.781785684e-03f, -5.787457240e-03f, -5.793118514e-03f, -5.798769497e-03f,
+-5.804410180e-03f, -5.810040553e-03f, -5.815660608e-03f, -5.821270335e-03f, -5.826869726e-03f, -5.832458770e-03f, -5.838037458e-03f, -5.843605783e-03f, -5.849163733e-03f, -5.854711302e-03f,
+-5.860248478e-03f, -5.865775254e-03f, -5.871291620e-03f, -5.876797567e-03f, -5.882293087e-03f, -5.887778169e-03f, -5.893252806e-03f, -5.898716988e-03f, -5.904170707e-03f, -5.909613953e-03f,
+-5.915046718e-03f, -5.920468993e-03f, -5.925880768e-03f, -5.931282036e-03f, -5.936672786e-03f, -5.942053012e-03f, -5.947422703e-03f, -5.952781851e-03f, -5.958130447e-03f, -5.963468482e-03f,
+-5.968795949e-03f, -5.974112837e-03f, -5.979419139e-03f, -5.984714846e-03f, -5.989999948e-03f, -5.995274439e-03f, -6.000538308e-03f, -6.005791548e-03f, -6.011034150e-03f, -6.016266105e-03f,
+-6.021487405e-03f, -6.026698041e-03f, -6.031898005e-03f, -6.037087288e-03f, -6.042265882e-03f, -6.047433779e-03f, -6.052590970e-03f, -6.057737447e-03f, -6.062873201e-03f, -6.067998224e-03f,
+-6.073112508e-03f, -6.078216044e-03f, -6.083308825e-03f, -6.088390841e-03f, -6.093462085e-03f, -6.098522548e-03f, -6.103572223e-03f, -6.108611100e-03f, -6.113639173e-03f, -6.118656432e-03f,
+-6.123662869e-03f, -6.128658477e-03f, -6.133643247e-03f, -6.138617172e-03f, -6.143580242e-03f, -6.148532451e-03f, -6.153473790e-03f, -6.158404252e-03f, -6.163323827e-03f, -6.168232508e-03f,
+-6.173130288e-03f, -6.178017158e-03f, -6.182893111e-03f, -6.187758138e-03f, -6.192612232e-03f, -6.197455384e-03f, -6.202287588e-03f, -6.207108835e-03f, -6.211919117e-03f, -6.216718427e-03f,
+-6.221506756e-03f, -6.226284098e-03f, -6.231050445e-03f, -6.235805788e-03f, -6.240550120e-03f, -6.245283434e-03f, -6.250005721e-03f, -6.254716975e-03f, -6.259417188e-03f, -6.264106351e-03f,
+-6.268784458e-03f, -6.273451500e-03f, -6.278107472e-03f, -6.282752364e-03f, -6.287386169e-03f, -6.292008881e-03f, -6.296620491e-03f, -6.301220992e-03f, -6.305810378e-03f, -6.310388639e-03f,
+-6.314955769e-03f, -6.319511761e-03f, -6.324056608e-03f, -6.328590301e-03f, -6.333112834e-03f, -6.337624200e-03f, -6.342124391e-03f, -6.346613400e-03f, -6.351091220e-03f, -6.355557844e-03f,
+-6.360013264e-03f, -6.364457473e-03f, -6.368890464e-03f, -6.373312231e-03f, -6.377722766e-03f, -6.382122062e-03f, -6.386510111e-03f, -6.390886908e-03f, -6.395252444e-03f, -6.399606713e-03f,
+-6.403949709e-03f, -6.408281423e-03f, -6.412601849e-03f, -6.416910981e-03f, -6.421208811e-03f, -6.425495332e-03f, -6.429770538e-03f, -6.434034421e-03f, -6.438286976e-03f, -6.442528194e-03f,
+-6.446758070e-03f, -6.450976597e-03f, -6.455183768e-03f, -6.459379575e-03f, -6.463564014e-03f, -6.467737076e-03f, -6.471898755e-03f, -6.476049045e-03f, -6.480187939e-03f, -6.484315430e-03f,
+-6.488431513e-03f, -6.492536179e-03f, -6.496629423e-03f, -6.500711238e-03f, -6.504781619e-03f, -6.508840557e-03f, -6.512888047e-03f, -6.516924083e-03f, -6.520948658e-03f, -6.524961765e-03f,
+-6.528963399e-03f, -6.532953552e-03f, -6.536932219e-03f, -6.540899393e-03f, -6.544855069e-03f, -6.548799239e-03f, -6.552731897e-03f, -6.556653038e-03f, -6.560562655e-03f, -6.564460742e-03f,
+-6.568347292e-03f, -6.572222300e-03f, -6.576085760e-03f, -6.579937664e-03f, -6.583778008e-03f, -6.587606785e-03f, -6.591423990e-03f, -6.595229615e-03f, -6.599023656e-03f, -6.602806106e-03f,
+-6.606576959e-03f, -6.610336209e-03f, -6.614083850e-03f, -6.617819877e-03f, -6.621544284e-03f, -6.625257064e-03f, -6.628958212e-03f, -6.632647722e-03f, -6.636325588e-03f, -6.639991805e-03f,
+-6.643646366e-03f, -6.647289266e-03f, -6.650920500e-03f, -6.654540061e-03f, -6.658147944e-03f, -6.661744143e-03f, -6.665328652e-03f, -6.668901467e-03f, -6.672462581e-03f, -6.676011989e-03f,
+-6.679549685e-03f, -6.683075664e-03f, -6.686589920e-03f, -6.690092447e-03f, -6.693583241e-03f, -6.697062296e-03f, -6.700529606e-03f, -6.703985166e-03f, -6.707428970e-03f, -6.710861014e-03f,
+-6.714281292e-03f, -6.717689798e-03f, -6.721086527e-03f, -6.724471474e-03f, -6.727844634e-03f, -6.731206001e-03f, -6.734555570e-03f, -6.737893337e-03f, -6.741219295e-03f, -6.744533440e-03f,
+-6.747835766e-03f, -6.751126269e-03f, -6.754404943e-03f, -6.757671783e-03f, -6.760926784e-03f, -6.764169942e-03f, -6.767401250e-03f, -6.770620705e-03f, -6.773828301e-03f, -6.777024033e-03f,
+-6.780207896e-03f, -6.783379885e-03f, -6.786539996e-03f, -6.789688223e-03f, -6.792824562e-03f, -6.795949008e-03f, -6.799061556e-03f, -6.802162202e-03f, -6.805250939e-03f, -6.808327765e-03f,
+-6.811392673e-03f, -6.814445660e-03f, -6.817486721e-03f, -6.820515850e-03f, -6.823533044e-03f, -6.826538298e-03f, -6.829531606e-03f, -6.832512966e-03f, -6.835482371e-03f, -6.838439817e-03f,
+-6.841385301e-03f, -6.844318817e-03f, -6.847240360e-03f, -6.850149928e-03f, -6.853047514e-03f, -6.855933115e-03f, -6.858806726e-03f, -6.861668343e-03f, -6.864517962e-03f, -6.867355578e-03f,
+-6.870181187e-03f, -6.872994784e-03f, -6.875796366e-03f, -6.878585927e-03f, -6.881363465e-03f, -6.884128974e-03f, -6.886882451e-03f, -6.889623891e-03f, -6.892353290e-03f, -6.895070645e-03f,
+-6.897775950e-03f, -6.900469202e-03f, -6.903150397e-03f, -6.905819531e-03f, -6.908476599e-03f, -6.911121599e-03f, -6.913754525e-03f, -6.916375374e-03f, -6.918984141e-03f, -6.921580824e-03f,
+-6.924165418e-03f, -6.926737920e-03f, -6.929298324e-03f, -6.931846629e-03f, -6.934382829e-03f, -6.936906921e-03f, -6.939418901e-03f, -6.941918766e-03f, -6.944406512e-03f, -6.946882134e-03f,
+-6.949345630e-03f, -6.951796996e-03f, -6.954236228e-03f, -6.956663323e-03f, -6.959078276e-03f, -6.961481085e-03f, -6.963871745e-03f, -6.966250254e-03f, -6.968616608e-03f, -6.970970803e-03f,
+-6.973312835e-03f, -6.975642702e-03f, -6.977960400e-03f, -6.980265925e-03f, -6.982559275e-03f, -6.984840445e-03f, -6.987109433e-03f, -6.989366235e-03f, -6.991610848e-03f, -6.993843268e-03f,
+-6.996063493e-03f, -6.998271519e-03f, -7.000467343e-03f, -7.002650961e-03f, -7.004822371e-03f, -7.006981569e-03f, -7.009128552e-03f, -7.011263318e-03f, -7.013385863e-03f, -7.015496183e-03f,
+-7.017594277e-03f, -7.019680140e-03f, -7.021753771e-03f, -7.023815165e-03f, -7.025864321e-03f, -7.027901234e-03f, -7.029925903e-03f, -7.031938324e-03f, -7.033938494e-03f, -7.035926411e-03f,
+-7.037902071e-03f, -7.039865473e-03f, -7.041816612e-03f, -7.043755487e-03f, -7.045682094e-03f, -7.047596432e-03f, -7.049498496e-03f, -7.051388286e-03f, -7.053265796e-03f, -7.055131027e-03f,
+-7.056983973e-03f, -7.058824634e-03f, -7.060653006e-03f, -7.062469088e-03f, -7.064272875e-03f, -7.066064366e-03f, -7.067843559e-03f, -7.069610451e-03f, -7.071365039e-03f, -7.073107321e-03f,
+-7.074837295e-03f, -7.076554958e-03f, -7.078260308e-03f, -7.079953342e-03f, -7.081634059e-03f, -7.083302455e-03f, -7.084958530e-03f, -7.086602280e-03f, -7.088233703e-03f, -7.089852796e-03f,
+-7.091459559e-03f, -7.093053989e-03f, -7.094636083e-03f, -7.096205839e-03f, -7.097763255e-03f, -7.099308330e-03f, -7.100841061e-03f, -7.102361446e-03f, -7.103869483e-03f, -7.105365170e-03f,
+-7.106848505e-03f, -7.108319487e-03f, -7.109778112e-03f, -7.111224380e-03f, -7.112658289e-03f, -7.114079836e-03f, -7.115489019e-03f, -7.116885838e-03f, -7.118270289e-03f, -7.119642372e-03f,
+-7.121002085e-03f, -7.122349425e-03f, -7.123684392e-03f, -7.125006983e-03f, -7.126317197e-03f, -7.127615031e-03f, -7.128900486e-03f, -7.130173558e-03f, -7.131434246e-03f, -7.132682549e-03f,
+-7.133918466e-03f, -7.135141993e-03f, -7.136353132e-03f, -7.137551878e-03f, -7.138738232e-03f, -7.139912192e-03f, -7.141073756e-03f, -7.142222923e-03f, -7.143359692e-03f, -7.144484060e-03f,
+-7.145596028e-03f, -7.146695594e-03f, -7.147782755e-03f, -7.148857512e-03f, -7.149919863e-03f, -7.150969806e-03f, -7.152007340e-03f, -7.153032465e-03f, -7.154045179e-03f, -7.155045480e-03f,
+-7.156033369e-03f, -7.157008843e-03f, -7.157971902e-03f, -7.158922545e-03f, -7.159860770e-03f, -7.160786576e-03f, -7.161699964e-03f, -7.162600930e-03f, -7.163489476e-03f, -7.164365599e-03f,
+-7.165229299e-03f, -7.166080575e-03f, -7.166919427e-03f, -7.167745852e-03f, -7.168559851e-03f, -7.169361423e-03f, -7.170150566e-03f, -7.170927281e-03f, -7.171691566e-03f, -7.172443421e-03f,
+-7.173182845e-03f, -7.173909837e-03f, -7.174624398e-03f, -7.175326525e-03f, -7.176016219e-03f, -7.176693478e-03f, -7.177358303e-03f, -7.178010694e-03f, -7.178650648e-03f, -7.179278166e-03f,
+-7.179893248e-03f, -7.180495892e-03f, -7.181086099e-03f, -7.181663869e-03f, -7.182229200e-03f, -7.182782092e-03f, -7.183322545e-03f, -7.183850560e-03f, -7.184366134e-03f, -7.184869269e-03f,
+-7.185359964e-03f, -7.185838218e-03f, -7.186304032e-03f, -7.186757405e-03f, -7.187198337e-03f, -7.187626828e-03f, -7.188042878e-03f, -7.188446486e-03f, -7.188837654e-03f, -7.189216380e-03f,
+-7.189582664e-03f, -7.189936507e-03f, -7.190277908e-03f, -7.190606868e-03f, -7.190923387e-03f, -7.191227465e-03f, -7.191519101e-03f, -7.191798296e-03f, -7.192065050e-03f, -7.192319363e-03f,
+-7.192561235e-03f, -7.192790668e-03f, -7.193007659e-03f, -7.193212211e-03f, -7.193404324e-03f, -7.193583996e-03f, -7.193751230e-03f, -7.193906025e-03f, -7.194048381e-03f, -7.194178299e-03f,
+-7.194295780e-03f, -7.194400823e-03f, -7.194493429e-03f, -7.194573599e-03f, -7.194641333e-03f, -7.194696632e-03f, -7.194739496e-03f, -7.194769925e-03f, -7.194787921e-03f, -7.194793483e-03f,
+-7.194786613e-03f, -7.194767310e-03f, -7.194735577e-03f, -7.194691413e-03f, -7.194634819e-03f, -7.194565795e-03f, -7.194484343e-03f, -7.194390463e-03f, -7.194284157e-03f, -7.194165424e-03f,
+-7.194034266e-03f, -7.193890683e-03f, -7.193734676e-03f, -7.193566247e-03f, -7.193385396e-03f, -7.193192124e-03f, -7.192986432e-03f, -7.192768321e-03f, -7.192537792e-03f, -7.192294846e-03f,
+-7.192039484e-03f, -7.191771707e-03f, -7.191491516e-03f, -7.191198913e-03f, -7.190893897e-03f, -7.190576472e-03f, -7.190246637e-03f, -7.189904394e-03f, -7.189549743e-03f, -7.189182688e-03f,
+-7.188803227e-03f, -7.188411364e-03f, -7.188007099e-03f, -7.187590433e-03f, -7.187161368e-03f, -7.186719904e-03f, -7.186266045e-03f, -7.185799790e-03f, -7.185321142e-03f, -7.184830101e-03f,
+-7.184326670e-03f, -7.183810849e-03f, -7.183282640e-03f, -7.182742045e-03f, -7.182189066e-03f, -7.181623703e-03f, -7.181045959e-03f, -7.180455834e-03f, -7.179853332e-03f, -7.179238452e-03f,
+-7.178611198e-03f, -7.177971570e-03f, -7.177319571e-03f, -7.176655202e-03f, -7.175978465e-03f, -7.175289361e-03f, -7.174587893e-03f, -7.173874063e-03f, -7.173147871e-03f, -7.172409321e-03f,
+-7.171658413e-03f, -7.170895151e-03f, -7.170119535e-03f, -7.169331567e-03f, -7.168531251e-03f, -7.167718587e-03f, -7.166893578e-03f, -7.166056225e-03f, -7.165206532e-03f, -7.164344499e-03f,
+-7.163470129e-03f, -7.162583424e-03f, -7.161684387e-03f, -7.160773019e-03f, -7.159849322e-03f, -7.158913299e-03f, -7.157964953e-03f, -7.157004284e-03f, -7.156031296e-03f, -7.155045991e-03f,
+-7.154048371e-03f, -7.153038439e-03f, -7.152016196e-03f, -7.150981646e-03f, -7.149934790e-03f, -7.148875631e-03f, -7.147804172e-03f, -7.146720414e-03f, -7.145624361e-03f, -7.144516015e-03f,
+-7.143395378e-03f, -7.142262453e-03f, -7.141117243e-03f, -7.139959750e-03f, -7.138789977e-03f, -7.137607926e-03f, -7.136413600e-03f, -7.135207002e-03f, -7.133988134e-03f, -7.132756999e-03f,
+-7.131513600e-03f, -7.130257939e-03f, -7.128990020e-03f, -7.127709845e-03f, -7.126417417e-03f, -7.125112739e-03f, -7.123795814e-03f, -7.122466644e-03f, -7.121125233e-03f, -7.119771583e-03f,
+-7.118405697e-03f, -7.117027578e-03f, -7.115637230e-03f, -7.114234655e-03f, -7.112819857e-03f, -7.111392838e-03f, -7.109953601e-03f, -7.108502150e-03f, -7.107038487e-03f, -7.105562616e-03f,
+-7.104074540e-03f, -7.102574263e-03f, -7.101061786e-03f, -7.099537114e-03f, -7.098000250e-03f, -7.096451197e-03f, -7.094889958e-03f, -7.093316537e-03f, -7.091730937e-03f, -7.090133160e-03f,
+-7.088523212e-03f, -7.086901095e-03f, -7.085266812e-03f, -7.083620366e-03f, -7.081961762e-03f, -7.080291003e-03f, -7.078608092e-03f, -7.076913033e-03f, -7.075205829e-03f, -7.073486484e-03f,
+-7.071755002e-03f, -7.070011385e-03f, -7.068255638e-03f, -7.066487765e-03f, -7.064707768e-03f, -7.062915651e-03f, -7.061111419e-03f, -7.059295076e-03f, -7.057466623e-03f, -7.055626067e-03f,
+-7.053773409e-03f, -7.051908655e-03f, -7.050031807e-03f, -7.048142870e-03f, -7.046241848e-03f, -7.044328744e-03f, -7.042403563e-03f, -7.040466308e-03f, -7.038516983e-03f, -7.036555593e-03f,
+-7.034582140e-03f, -7.032596630e-03f, -7.030599066e-03f, -7.028589453e-03f, -7.026567793e-03f, -7.024534093e-03f, -7.022488354e-03f, -7.020430583e-03f, -7.018360782e-03f, -7.016278956e-03f,
+-7.014185110e-03f, -7.012079247e-03f, -7.009961371e-03f, -7.007831488e-03f, -7.005689600e-03f, -7.003535713e-03f, -7.001369831e-03f, -6.999191958e-03f, -6.997002099e-03f, -6.994800257e-03f,
+-6.992586438e-03f, -6.990360645e-03f, -6.988122883e-03f, -6.985873157e-03f, -6.983611471e-03f, -6.981337830e-03f, -6.979052238e-03f, -6.976754699e-03f, -6.974445218e-03f, -6.972123801e-03f,
+-6.969790450e-03f, -6.967445172e-03f, -6.965087970e-03f, -6.962718849e-03f, -6.960337815e-03f, -6.957944871e-03f, -6.955540022e-03f, -6.953123274e-03f, -6.950694630e-03f, -6.948254097e-03f,
+-6.945801677e-03f, -6.943337377e-03f, -6.940861202e-03f, -6.938373155e-03f, -6.935873242e-03f, -6.933361468e-03f, -6.930837838e-03f, -6.928302356e-03f, -6.925755028e-03f, -6.923195859e-03f,
+-6.920624854e-03f, -6.918042017e-03f, -6.915447354e-03f, -6.912840870e-03f, -6.910222569e-03f, -6.907592458e-03f, -6.904950541e-03f, -6.902296823e-03f, -6.899631309e-03f, -6.896954006e-03f,
+-6.894264917e-03f, -6.891564048e-03f, -6.888851404e-03f, -6.886126991e-03f, -6.883390814e-03f, -6.880642879e-03f, -6.877883189e-03f, -6.875111752e-03f, -6.872328572e-03f, -6.869533655e-03f,
+-6.866727005e-03f, -6.863908629e-03f, -6.861078532e-03f, -6.858236720e-03f, -6.855383197e-03f, -6.852517970e-03f, -6.849641044e-03f, -6.846752424e-03f, -6.843852116e-03f, -6.840940126e-03f,
+-6.838016459e-03f, -6.835081122e-03f, -6.832134118e-03f, -6.829175455e-03f, -6.826205138e-03f, -6.823223172e-03f, -6.820229564e-03f, -6.817224319e-03f, -6.814207442e-03f, -6.811178941e-03f,
+-6.808138819e-03f, -6.805087084e-03f, -6.802023742e-03f, -6.798948797e-03f, -6.795862256e-03f, -6.792764125e-03f, -6.789654409e-03f, -6.786533115e-03f, -6.783400249e-03f, -6.780255817e-03f,
+-6.777099824e-03f, -6.773932277e-03f, -6.770753181e-03f, -6.767562543e-03f, -6.764360369e-03f, -6.761146665e-03f, -6.757921437e-03f, -6.754684692e-03f, -6.751436434e-03f, -6.748176672e-03f,
+-6.744905410e-03f, -6.741622654e-03f, -6.738328413e-03f, -6.735022690e-03f, -6.731705494e-03f, -6.728376829e-03f, -6.725036703e-03f, -6.721685122e-03f, -6.718322091e-03f, -6.714947619e-03f,
+-6.711561710e-03f, -6.708164371e-03f, -6.704755609e-03f, -6.701335430e-03f, -6.697903841e-03f, -6.694460848e-03f, -6.691006457e-03f, -6.687540676e-03f, -6.684063511e-03f, -6.680574967e-03f,
+-6.677075053e-03f, -6.673563774e-03f, -6.670041138e-03f, -6.666507150e-03f, -6.662961817e-03f, -6.659405147e-03f, -6.655837145e-03f, -6.652257820e-03f, -6.648667176e-03f, -6.645065221e-03f,
+-6.641451963e-03f, -6.637827407e-03f, -6.634191560e-03f, -6.630544430e-03f, -6.626886023e-03f, -6.623216346e-03f, -6.619535406e-03f, -6.615843210e-03f, -6.612139765e-03f, -6.608425078e-03f,
+-6.604699155e-03f, -6.600962004e-03f, -6.597213632e-03f, -6.593454045e-03f, -6.589683252e-03f, -6.585901258e-03f, -6.582108072e-03f, -6.578303699e-03f, -6.574488148e-03f, -6.570661425e-03f,
+-6.566823538e-03f, -6.562974493e-03f, -6.559114298e-03f, -6.555242961e-03f, -6.551360488e-03f, -6.547466886e-03f, -6.543562164e-03f, -6.539646327e-03f, -6.535719385e-03f, -6.531781343e-03f,
+-6.527832209e-03f, -6.523871991e-03f, -6.519900696e-03f, -6.515918332e-03f, -6.511924905e-03f, -6.507920423e-03f, -6.503904895e-03f, -6.499878326e-03f, -6.495840726e-03f, -6.491792100e-03f,
+-6.487732458e-03f, -6.483661805e-03f, -6.479580151e-03f, -6.475487502e-03f, -6.471383867e-03f, -6.467269252e-03f, -6.463143665e-03f, -6.459007115e-03f, -6.454859609e-03f, -6.450701154e-03f,
+-6.446531758e-03f, -6.442351429e-03f, -6.438160175e-03f, -6.433958004e-03f, -6.429744923e-03f, -6.425520940e-03f, -6.421286063e-03f, -6.417040300e-03f, -6.412783659e-03f, -6.408516147e-03f,
+-6.404237773e-03f, -6.399948544e-03f, -6.395648469e-03f, -6.391337555e-03f, -6.387015810e-03f, -6.382683243e-03f, -6.378339862e-03f, -6.373985673e-03f, -6.369620686e-03f, -6.365244909e-03f,
+-6.360858349e-03f, -6.356461015e-03f, -6.352052915e-03f, -6.347634057e-03f, -6.343204450e-03f, -6.338764100e-03f, -6.334313018e-03f, -6.329851210e-03f, -6.325378685e-03f, -6.320895452e-03f,
+-6.316401518e-03f, -6.311896892e-03f, -6.307381582e-03f, -6.302855597e-03f, -6.298318945e-03f, -6.293771634e-03f, -6.289213672e-03f, -6.284645069e-03f, -6.280065832e-03f, -6.275475970e-03f,
+-6.270875491e-03f, -6.266264405e-03f, -6.261642718e-03f, -6.257010441e-03f, -6.252367580e-03f, -6.247714146e-03f, -6.243050146e-03f, -6.238375589e-03f, -6.233690484e-03f, -6.228994840e-03f,
+-6.224288664e-03f, -6.219571965e-03f, -6.214844753e-03f, -6.210107036e-03f, -6.205358822e-03f, -6.200600121e-03f, -6.195830941e-03f, -6.191051291e-03f, -6.186261179e-03f, -6.181460615e-03f,
+-6.176649607e-03f, -6.171828164e-03f, -6.166996295e-03f, -6.162154009e-03f, -6.157301314e-03f, -6.152438220e-03f, -6.147564736e-03f, -6.142680870e-03f, -6.137786631e-03f, -6.132882029e-03f,
+-6.127967072e-03f, -6.123041769e-03f, -6.118106130e-03f, -6.113160163e-03f, -6.108203877e-03f, -6.103237282e-03f, -6.098260387e-03f, -6.093273200e-03f, -6.088275731e-03f, -6.083267989e-03f,
+-6.078249984e-03f, -6.073221723e-03f, -6.068183217e-03f, -6.063134475e-03f, -6.058075506e-03f, -6.053006319e-03f, -6.047926924e-03f, -6.042837329e-03f, -6.037737545e-03f, -6.032627580e-03f,
+-6.027507443e-03f, -6.022377145e-03f, -6.017236694e-03f, -6.012086100e-03f, -6.006925372e-03f, -6.001754519e-03f, -5.996573552e-03f, -5.991382480e-03f, -5.986181311e-03f, -5.980970056e-03f,
+-5.975748723e-03f, -5.970517324e-03f, -5.965275866e-03f, -5.960024360e-03f, -5.954762815e-03f, -5.949491241e-03f, -5.944209647e-03f, -5.938918043e-03f, -5.933616439e-03f, -5.928304844e-03f,
+-5.922983268e-03f, -5.917651721e-03f, -5.912310212e-03f, -5.906958751e-03f, -5.901597348e-03f, -5.896226012e-03f, -5.890844754e-03f, -5.885453583e-03f, -5.880052509e-03f, -5.874641541e-03f,
+-5.869220691e-03f, -5.863789966e-03f, -5.858349378e-03f, -5.852898936e-03f, -5.847438651e-03f, -5.841968531e-03f, -5.836488587e-03f, -5.830998829e-03f, -5.825499267e-03f, -5.819989911e-03f,
+-5.814470771e-03f, -5.808941857e-03f, -5.803403179e-03f, -5.797854747e-03f, -5.792296570e-03f, -5.786728660e-03f, -5.781151027e-03f, -5.775563679e-03f, -5.769966628e-03f, -5.764359884e-03f,
+-5.758743457e-03f, -5.753117356e-03f, -5.747481593e-03f, -5.741836177e-03f, -5.736181119e-03f, -5.730516429e-03f, -5.724842117e-03f, -5.719158194e-03f, -5.713464669e-03f, -5.707761553e-03f,
+-5.702048857e-03f, -5.696326590e-03f, -5.690594764e-03f, -5.684853388e-03f, -5.679102473e-03f, -5.673342029e-03f, -5.667572067e-03f, -5.661792597e-03f, -5.656003629e-03f, -5.650205175e-03f,
+-5.644397244e-03f, -5.638579848e-03f, -5.632752996e-03f, -5.626916699e-03f, -5.621070967e-03f, -5.615215812e-03f, -5.609351244e-03f, -5.603477273e-03f, -5.597593910e-03f, -5.591701166e-03f,
+-5.585799052e-03f, -5.579887577e-03f, -5.573966753e-03f, -5.568036590e-03f, -5.562097099e-03f, -5.556148291e-03f, -5.550190177e-03f, -5.544222767e-03f, -5.538246072e-03f, -5.532260102e-03f,
+-5.526264870e-03f, -5.520260384e-03f, -5.514246658e-03f, -5.508223700e-03f, -5.502191522e-03f, -5.496150135e-03f, -5.490099550e-03f, -5.484039778e-03f, -5.477970829e-03f, -5.471892714e-03f,
+-5.465805446e-03f, -5.459709033e-03f, -5.453603489e-03f, -5.447488822e-03f, -5.441365045e-03f, -5.435232169e-03f, -5.429090204e-03f, -5.422939162e-03f, -5.416779053e-03f, -5.410609890e-03f,
+-5.404431682e-03f, -5.398244441e-03f, -5.392048178e-03f, -5.385842905e-03f, -5.379628632e-03f, -5.373405371e-03f, -5.367173133e-03f, -5.360931928e-03f, -5.354681769e-03f, -5.348422667e-03f,
+-5.342154632e-03f, -5.335877677e-03f, -5.329591812e-03f, -5.323297048e-03f, -5.316993397e-03f, -5.310680871e-03f, -5.304359481e-03f, -5.298029237e-03f, -5.291690152e-03f, -5.285342236e-03f,
+-5.278985502e-03f, -5.272619961e-03f, -5.266245623e-03f, -5.259862501e-03f, -5.253470606e-03f, -5.247069949e-03f, -5.240660542e-03f, -5.234242397e-03f, -5.227815525e-03f, -5.221379937e-03f,
+-5.214935645e-03f, -5.208482661e-03f, -5.202020996e-03f, -5.195550662e-03f, -5.189071670e-03f, -5.182584032e-03f, -5.176087760e-03f, -5.169582865e-03f, -5.163069359e-03f, -5.156547254e-03f,
+-5.150016561e-03f, -5.143477292e-03f, -5.136929459e-03f, -5.130373074e-03f, -5.123808147e-03f, -5.117234692e-03f, -5.110652720e-03f, -5.104062242e-03f, -5.097463271e-03f, -5.090855818e-03f,
+-5.084239895e-03f, -5.077615514e-03f, -5.070982686e-03f, -5.064341425e-03f, -5.057691740e-03f, -5.051033646e-03f, -5.044367153e-03f, -5.037692273e-03f, -5.031009018e-03f, -5.024317401e-03f,
+-5.017617433e-03f, -5.010909126e-03f, -5.004192492e-03f, -4.997467543e-03f, -4.990734292e-03f, -4.983992750e-03f, -4.977242930e-03f, -4.970484842e-03f, -4.963718501e-03f, -4.956943917e-03f,
+-4.950161102e-03f, -4.943370070e-03f, -4.936570831e-03f, -4.929763399e-03f, -4.922947785e-03f, -4.916124002e-03f, -4.909292061e-03f, -4.902451975e-03f, -4.895603756e-03f, -4.888747417e-03f,
+-4.881882969e-03f, -4.875010425e-03f, -4.868129797e-03f, -4.861241098e-03f, -4.854344340e-03f, -4.847439534e-03f, -4.840526694e-03f, -4.833605831e-03f, -4.826676959e-03f, -4.819740089e-03f,
+-4.812795234e-03f, -4.805842406e-03f, -4.798881618e-03f, -4.791912882e-03f, -4.784936210e-03f, -4.777951616e-03f, -4.770959110e-03f, -4.763958707e-03f, -4.756950418e-03f, -4.749934256e-03f,
+-4.742910233e-03f, -4.735878362e-03f, -4.728838655e-03f, -4.721791126e-03f, -4.714735786e-03f, -4.707672648e-03f, -4.700601725e-03f, -4.693523029e-03f, -4.686436573e-03f, -4.679342370e-03f,
+-4.672240432e-03f, -4.665130771e-03f, -4.658013402e-03f, -4.650888335e-03f, -4.643755585e-03f, -4.636615163e-03f, -4.629467082e-03f, -4.622311355e-03f, -4.615147995e-03f, -4.607977015e-03f,
+-4.600798427e-03f, -4.593612244e-03f, -4.586418479e-03f, -4.579217145e-03f, -4.572008254e-03f, -4.564791819e-03f, -4.557567854e-03f, -4.550336371e-03f, -4.543097382e-03f, -4.535850902e-03f,
+-4.528596942e-03f, -4.521335516e-03f, -4.514066636e-03f, -4.506790315e-03f, -4.499506567e-03f, -4.492215405e-03f, -4.484916840e-03f, -4.477610887e-03f, -4.470297558e-03f, -4.462976866e-03f,
+-4.455648825e-03f, -4.448313447e-03f, -4.440970745e-03f, -4.433620733e-03f, -4.426263423e-03f, -4.418898828e-03f, -4.411526962e-03f, -4.404147838e-03f, -4.396761469e-03f, -4.389367867e-03f,
+-4.381967047e-03f, -4.374559021e-03f, -4.367143802e-03f, -4.359721403e-03f, -4.352291839e-03f, -4.344855121e-03f, -4.337411263e-03f, -4.329960279e-03f, -4.322502181e-03f, -4.315036983e-03f,
+-4.307564699e-03f, -4.300085340e-03f, -4.292598921e-03f, -4.285105455e-03f, -4.277604955e-03f, -4.270097434e-03f, -4.262582906e-03f, -4.255061384e-03f, -4.247532882e-03f, -4.239997413e-03f,
+-4.232454990e-03f, -4.224905626e-03f, -4.217349335e-03f, -4.209786130e-03f, -4.202216026e-03f, -4.194639034e-03f, -4.187055169e-03f, -4.179464444e-03f, -4.171866873e-03f, -4.164262468e-03f,
+-4.156651244e-03f, -4.149033214e-03f, -4.141408392e-03f, -4.133776790e-03f, -4.126138423e-03f, -4.118493303e-03f, -4.110841446e-03f, -4.103182863e-03f, -4.095517569e-03f, -4.087845577e-03f,
+-4.080166901e-03f, -4.072481555e-03f, -4.064789551e-03f, -4.057090905e-03f, -4.049385628e-03f, -4.041673736e-03f, -4.033955240e-03f, -4.026230157e-03f, -4.018498498e-03f, -4.010760278e-03f,
+-4.003015510e-03f, -3.995264208e-03f, -3.987506385e-03f, -3.979742056e-03f, -3.971971235e-03f, -3.964193934e-03f, -3.956410168e-03f, -3.948619951e-03f, -3.940823295e-03f, -3.933020216e-03f,
+-3.925210726e-03f, -3.917394841e-03f, -3.909572572e-03f, -3.901743935e-03f, -3.893908943e-03f, -3.886067610e-03f, -3.878219950e-03f, -3.870365977e-03f, -3.862505704e-03f, -3.854639146e-03f,
+-3.846766316e-03f, -3.838887228e-03f, -3.831001897e-03f, -3.823110336e-03f, -3.815212558e-03f, -3.807308579e-03f, -3.799398412e-03f, -3.791482072e-03f, -3.783559571e-03f, -3.775630924e-03f,
+-3.767696145e-03f, -3.759755248e-03f, -3.751808247e-03f, -3.743855156e-03f, -3.735895989e-03f, -3.727930760e-03f, -3.719959484e-03f, -3.711982174e-03f, -3.703998844e-03f, -3.696009509e-03f,
+-3.688014182e-03f, -3.680012878e-03f, -3.672005611e-03f, -3.663992394e-03f, -3.655973243e-03f, -3.647948171e-03f, -3.639917192e-03f, -3.631880321e-03f, -3.623837572e-03f, -3.615788958e-03f,
+-3.607734495e-03f, -3.599674196e-03f, -3.591608076e-03f, -3.583536148e-03f, -3.575458427e-03f, -3.567374928e-03f, -3.559285663e-03f, -3.551190649e-03f, -3.543089899e-03f, -3.534983427e-03f,
+-3.526871248e-03f, -3.518753375e-03f, -3.510629824e-03f, -3.502500608e-03f, -3.494365742e-03f, -3.486225241e-03f, -3.478079117e-03f, -3.469927387e-03f, -3.461770064e-03f, -3.453607163e-03f,
+-3.445438697e-03f, -3.437264682e-03f, -3.429085132e-03f, -3.420900061e-03f, -3.412709483e-03f, -3.404513414e-03f, -3.396311867e-03f, -3.388104857e-03f, -3.379892398e-03f, -3.371674505e-03f,
+-3.363451192e-03f, -3.355222474e-03f, -3.346988366e-03f, -3.338748881e-03f, -3.330504034e-03f, -3.322253840e-03f, -3.313998314e-03f, -3.305737469e-03f, -3.297471320e-03f, -3.289199883e-03f,
+-3.280923171e-03f, -3.272641198e-03f, -3.264353981e-03f, -3.256061532e-03f, -3.247763868e-03f, -3.239461001e-03f, -3.231152948e-03f, -3.222839722e-03f, -3.214521338e-03f, -3.206197811e-03f,
+-3.197869156e-03f, -3.189535387e-03f, -3.181196518e-03f, -3.172852565e-03f, -3.164503541e-03f, -3.156149463e-03f, -3.147790344e-03f, -3.139426199e-03f, -3.131057043e-03f, -3.122682890e-03f,
+-3.114303756e-03f, -3.105919654e-03f, -3.097530601e-03f, -3.089136609e-03f, -3.080737695e-03f, -3.072333873e-03f, -3.063925158e-03f, -3.055511564e-03f, -3.047093106e-03f, -3.038669799e-03f,
+-3.030241659e-03f, -3.021808698e-03f, -3.013370934e-03f, -3.004928379e-03f, -2.996481050e-03f, -2.988028960e-03f, -2.979572126e-03f, -2.971110561e-03f, -2.962644280e-03f, -2.954173299e-03f,
+-2.945697632e-03f, -2.937217294e-03f, -2.928732300e-03f, -2.920242664e-03f, -2.911748403e-03f, -2.903249530e-03f, -2.894746061e-03f, -2.886238010e-03f, -2.877725393e-03f, -2.869208224e-03f,
+-2.860686518e-03f, -2.852160290e-03f, -2.843629556e-03f, -2.835094330e-03f, -2.826554627e-03f, -2.818010462e-03f, -2.809461850e-03f, -2.800908806e-03f, -2.792351346e-03f, -2.783789483e-03f,
+-2.775223234e-03f, -2.766652612e-03f, -2.758077634e-03f, -2.749498314e-03f, -2.740914667e-03f, -2.732326709e-03f, -2.723734453e-03f, -2.715137916e-03f, -2.706537113e-03f, -2.697932058e-03f,
+-2.689322766e-03f, -2.680709254e-03f, -2.672091535e-03f, -2.663469624e-03f, -2.654843538e-03f, -2.646213291e-03f, -2.637578898e-03f, -2.628940375e-03f, -2.620297735e-03f, -2.611650996e-03f,
+-2.603000171e-03f, -2.594345276e-03f, -2.585686326e-03f, -2.577023336e-03f, -2.568356322e-03f, -2.559685298e-03f, -2.551010280e-03f, -2.542331283e-03f, -2.533648322e-03f, -2.524961412e-03f,
+-2.516270568e-03f, -2.507575807e-03f, -2.498877142e-03f, -2.490174589e-03f, -2.481468164e-03f, -2.472757882e-03f, -2.464043757e-03f, -2.455325806e-03f, -2.446604042e-03f, -2.437878483e-03f,
+-2.429149142e-03f, -2.420416035e-03f, -2.411679178e-03f, -2.402938586e-03f, -2.394194273e-03f, -2.385446256e-03f, -2.376694550e-03f, -2.367939169e-03f, -2.359180130e-03f, -2.350417447e-03f,
+-2.341651136e-03f, -2.332881212e-03f, -2.324107690e-03f, -2.315330587e-03f, -2.306549916e-03f, -2.297765695e-03f, -2.288977937e-03f, -2.280186658e-03f, -2.271391874e-03f, -2.262593600e-03f,
+-2.253791851e-03f, -2.244986643e-03f, -2.236177991e-03f, -2.227365910e-03f, -2.218550417e-03f, -2.209731525e-03f, -2.200909252e-03f, -2.192083612e-03f, -2.183254620e-03f, -2.174422292e-03f,
+-2.165586643e-03f, -2.156747690e-03f, -2.147905446e-03f, -2.139059928e-03f, -2.130211152e-03f, -2.121359132e-03f, -2.112503884e-03f, -2.103645423e-03f, -2.094783766e-03f, -2.085918927e-03f,
+-2.077050921e-03f, -2.068179766e-03f, -2.059305475e-03f, -2.050428064e-03f, -2.041547550e-03f, -2.032663946e-03f, -2.023777270e-03f, -2.014887536e-03f, -2.005994760e-03f, -1.997098957e-03f,
+-1.988200143e-03f, -1.979298334e-03f, -1.970393544e-03f, -1.961485790e-03f, -1.952575087e-03f, -1.943661451e-03f, -1.934744897e-03f, -1.925825440e-03f, -1.916903097e-03f, -1.907977883e-03f,
+-1.899049812e-03f, -1.890118902e-03f, -1.881185168e-03f, -1.872248624e-03f, -1.863309287e-03f, -1.854367173e-03f, -1.845422296e-03f, -1.836474672e-03f, -1.827524318e-03f, -1.818571248e-03f,
+-1.809615479e-03f, -1.800657025e-03f, -1.791695903e-03f, -1.782732127e-03f, -1.773765715e-03f, -1.764796681e-03f, -1.755825040e-03f, -1.746850810e-03f, -1.737874004e-03f, -1.728894640e-03f,
+-1.719912731e-03f, -1.710928295e-03f, -1.701941347e-03f, -1.692951902e-03f, -1.683959976e-03f, -1.674965585e-03f, -1.665968745e-03f, -1.656969470e-03f, -1.647967777e-03f, -1.638963682e-03f,
+-1.629957199e-03f, -1.620948346e-03f, -1.611937137e-03f, -1.602923588e-03f, -1.593907714e-03f, -1.584889533e-03f, -1.575869058e-03f, -1.566846307e-03f, -1.557821294e-03f, -1.548794036e-03f,
+-1.539764547e-03f, -1.530732844e-03f, -1.521698943e-03f, -1.512662859e-03f, -1.503624608e-03f, -1.494584205e-03f, -1.485541667e-03f, -1.476497009e-03f, -1.467450247e-03f, -1.458401396e-03f,
+-1.449350472e-03f, -1.440297492e-03f, -1.431242470e-03f, -1.422185423e-03f, -1.413126366e-03f, -1.404065316e-03f, -1.395002287e-03f, -1.385937295e-03f, -1.376870357e-03f, -1.367801488e-03f,
+-1.358730704e-03f, -1.349658020e-03f, -1.340583453e-03f, -1.331507018e-03f, -1.322428730e-03f, -1.313348607e-03f, -1.304266663e-03f, -1.295182914e-03f, -1.286097376e-03f, -1.277010065e-03f,
+-1.267920997e-03f, -1.258830187e-03f, -1.249737651e-03f, -1.240643406e-03f, -1.231547466e-03f, -1.222449848e-03f, -1.213350567e-03f, -1.204249639e-03f, -1.195147080e-03f, -1.186042907e-03f,
+-1.176937133e-03f, -1.167829777e-03f, -1.158720852e-03f, -1.149610376e-03f, -1.140498363e-03f, -1.131384830e-03f, -1.122269793e-03f, -1.113153267e-03f, -1.104035269e-03f, -1.094915813e-03f,
+-1.085794916e-03f, -1.076672594e-03f, -1.067548862e-03f, -1.058423737e-03f, -1.049297234e-03f, -1.040169369e-03f, -1.031040158e-03f, -1.021909616e-03f, -1.012777760e-03f, -1.003644606e-03f,
+-9.945101684e-04f, -9.853744641e-04f, -9.762375088e-04f, -9.670993182e-04f, -9.579599083e-04f, -9.488192948e-04f, -9.396774937e-04f, -9.305345208e-04f, -9.213903919e-04f, -9.122451229e-04f,
+-9.030987297e-04f, -8.939512281e-04f, -8.848026339e-04f, -8.756529631e-04f, -8.665022316e-04f, -8.573504550e-04f, -8.481976495e-04f, -8.390438307e-04f, -8.298890146e-04f, -8.207332170e-04f,
+-8.115764538e-04f, -8.024187409e-04f, -7.932600941e-04f, -7.841005294e-04f, -7.749400625e-04f, -7.657787094e-04f, -7.566164860e-04f, -7.474534080e-04f, -7.382894914e-04f, -7.291247521e-04f,
+-7.199592059e-04f, -7.107928687e-04f, -7.016257565e-04f, -6.924578849e-04f, -6.832892701e-04f, -6.741199277e-04f, -6.649498738e-04f, -6.557791241e-04f, -6.466076946e-04f, -6.374356012e-04f,
+-6.282628596e-04f, -6.190894859e-04f, -6.099154959e-04f, -6.007409054e-04f, -5.915657304e-04f, -5.823899868e-04f, -5.732136903e-04f, -5.640368570e-04f, -5.548595026e-04f, -5.456816432e-04f,
+-5.365032944e-04f, -5.273244723e-04f, -5.181451928e-04f, -5.089654716e-04f, -4.997853247e-04f, -4.906047680e-04f, -4.814238173e-04f, -4.722424886e-04f, -4.630607977e-04f, -4.538787605e-04f,
+-4.446963929e-04f, -4.355137107e-04f, -4.263307299e-04f, -4.171474664e-04f, -4.079639359e-04f, -3.987801544e-04f, -3.895961378e-04f, -3.804119020e-04f, -3.712274628e-04f, -3.620428361e-04f,
+-3.528580378e-04f, -3.436730838e-04f, -3.344879900e-04f, -3.253027721e-04f, -3.161174462e-04f, -3.069320281e-04f, -2.977465336e-04f, -2.885609787e-04f, -2.793753791e-04f, -2.701897509e-04f,
+-2.610041098e-04f, -2.518184717e-04f, -2.426328526e-04f, -2.334472682e-04f, -2.242617344e-04f, -2.150762672e-04f, -2.058908823e-04f, -1.967055957e-04f, -1.875204232e-04f, -1.783353807e-04f,
+-1.691504840e-04f, -1.599657491e-04f, -1.507811917e-04f, -1.415968277e-04f, -1.324126730e-04f, -1.232287435e-04f, -1.140450549e-04f, -1.048616233e-04f, -9.567846433e-05f, -8.649559396e-05f,
+-7.731302800e-05f, -6.813078233e-05f, -5.894887277e-05f, -4.976731520e-05f, -4.058612544e-05f, -3.140531936e-05f, -2.222491279e-05f, -1.304492157e-05f, -3.865361547e-06f, 5.313751436e-06f,
+1.449240154e-05f, 2.367057294e-05f, 3.284824979e-05f, 4.202541625e-05f, 5.120205651e-05f, 6.037815472e-05f, 6.955369506e-05f, 7.872866170e-05f, 8.790303881e-05f, 9.707681058e-05f,
+1.062499612e-04f, 1.154224748e-04f, 1.245943356e-04f, 1.337655278e-04f, 1.429360355e-04f, 1.521058430e-04f, 1.612749345e-04f, 1.704432941e-04f, 1.796109060e-04f, 1.887777544e-04f,
+1.979438236e-04f, 2.071090977e-04f, 2.162735609e-04f, 2.254371974e-04f, 2.345999915e-04f, 2.437619274e-04f, 2.529229892e-04f, 2.620831611e-04f, 2.712424275e-04f, 2.804007725e-04f,
+2.895581803e-04f, 2.987146351e-04f, 3.078701213e-04f, 3.170246229e-04f, 3.261781243e-04f, 3.353306096e-04f, 3.444820632e-04f, 3.536324692e-04f, 3.627818119e-04f, 3.719300755e-04f,
+3.810772443e-04f, 3.902233025e-04f, 3.993682344e-04f, 4.085120242e-04f, 4.176546562e-04f, 4.267961147e-04f, 4.359363838e-04f, 4.450754480e-04f, 4.542132913e-04f, 4.633498982e-04f,
+4.724852529e-04f, 4.816193397e-04f, 4.907521427e-04f, 4.998836465e-04f, 5.090138351e-04f, 5.181426929e-04f, 5.272702042e-04f, 5.363963534e-04f, 5.455211246e-04f, 5.546445022e-04f,
+5.637664705e-04f, 5.728870137e-04f, 5.820061163e-04f, 5.911237626e-04f, 6.002399367e-04f, 6.093546232e-04f, 6.184678062e-04f, 6.275794702e-04f, 6.366895994e-04f, 6.457981781e-04f,
+6.549051909e-04f, 6.640106218e-04f, 6.731144554e-04f, 6.822166759e-04f, 6.913172678e-04f, 7.004162153e-04f, 7.095135028e-04f, 7.186091147e-04f, 7.277030354e-04f, 7.367952492e-04f,
+7.458857404e-04f, 7.549744936e-04f, 7.640614930e-04f, 7.731467231e-04f, 7.822301682e-04f, 7.913118127e-04f, 8.003916410e-04f, 8.094696376e-04f, 8.185457867e-04f, 8.276200729e-04f,
+8.366924806e-04f, 8.457629941e-04f, 8.548315979e-04f, 8.638982765e-04f, 8.729630141e-04f, 8.820257953e-04f, 8.910866046e-04f, 9.001454263e-04f, 9.092022448e-04f, 9.182570448e-04f,
+9.273098105e-04f, 9.363605265e-04f, 9.454091772e-04f, 9.544557471e-04f, 9.635002206e-04f, 9.725425823e-04f, 9.815828166e-04f, 9.906209080e-04f, 9.996568410e-04f, 1.008690600e-03f,
+1.017722170e-03f, 1.026751534e-03f, 1.035778679e-03f, 1.044803587e-03f, 1.053826244e-03f, 1.062846634e-03f, 1.071864742e-03f, 1.080880552e-03f, 1.089894049e-03f, 1.098905217e-03f,
+1.107914041e-03f, 1.116920505e-03f, 1.125924594e-03f, 1.134926293e-03f, 1.143925585e-03f, 1.152922457e-03f, 1.161916891e-03f, 1.170908873e-03f, 1.179898388e-03f, 1.188885419e-03f,
+1.197869952e-03f, 1.206851971e-03f, 1.215831461e-03f, 1.224808407e-03f, 1.233782792e-03f, 1.242754601e-03f, 1.251723820e-03f, 1.260690433e-03f, 1.269654424e-03f, 1.278615779e-03f,
+1.287574481e-03f, 1.296530515e-03f, 1.305483867e-03f, 1.314434520e-03f, 1.323382460e-03f, 1.332327671e-03f, 1.341270137e-03f, 1.350209844e-03f, 1.359146776e-03f, 1.368080918e-03f,
+1.377012255e-03f, 1.385940770e-03f, 1.394866450e-03f, 1.403789278e-03f, 1.412709240e-03f, 1.421626319e-03f, 1.430540502e-03f, 1.439451772e-03f, 1.448360114e-03f, 1.457265514e-03f,
+1.466167955e-03f, 1.475067423e-03f, 1.483963902e-03f, 1.492857377e-03f, 1.501747834e-03f, 1.510635256e-03f, 1.519519628e-03f, 1.528400936e-03f, 1.537279164e-03f, 1.546154297e-03f,
+1.555026320e-03f, 1.563895217e-03f, 1.572760973e-03f, 1.581623574e-03f, 1.590483004e-03f, 1.599339248e-03f, 1.608192290e-03f, 1.617042116e-03f, 1.625888711e-03f, 1.634732059e-03f,
+1.643572145e-03f, 1.652408955e-03f, 1.661242472e-03f, 1.670072683e-03f, 1.678899571e-03f, 1.687723122e-03f, 1.696543321e-03f, 1.705360152e-03f, 1.714173601e-03f, 1.722983652e-03f,
+1.731790290e-03f, 1.740593501e-03f, 1.749393270e-03f, 1.758189580e-03f, 1.766982418e-03f, 1.775771768e-03f, 1.784557616e-03f, 1.793339945e-03f, 1.802118742e-03f, 1.810893991e-03f,
+1.819665677e-03f, 1.828433786e-03f, 1.837198301e-03f, 1.845959209e-03f, 1.854716495e-03f, 1.863470143e-03f, 1.872220138e-03f, 1.880966466e-03f, 1.889709111e-03f, 1.898448059e-03f,
+1.907183295e-03f, 1.915914803e-03f, 1.924642570e-03f, 1.933366579e-03f, 1.942086817e-03f, 1.950803268e-03f, 1.959515917e-03f, 1.968224750e-03f, 1.976929751e-03f, 1.985630906e-03f,
+1.994328201e-03f, 2.003021619e-03f, 2.011711147e-03f, 2.020396769e-03f, 2.029078471e-03f, 2.037756237e-03f, 2.046430054e-03f, 2.055099906e-03f, 2.063765778e-03f, 2.072427656e-03f,
+2.081085526e-03f, 2.089739371e-03f, 2.098389177e-03f, 2.107034931e-03f, 2.115676616e-03f, 2.124314218e-03f, 2.132947723e-03f, 2.141577116e-03f, 2.150202382e-03f, 2.158823506e-03f,
+2.167440473e-03f, 2.176053270e-03f, 2.184661881e-03f, 2.193266292e-03f, 2.201866487e-03f, 2.210462453e-03f, 2.219054175e-03f, 2.227641637e-03f, 2.236224826e-03f, 2.244803727e-03f,
+2.253378325e-03f, 2.261948606e-03f, 2.270514554e-03f, 2.279076156e-03f, 2.287633397e-03f, 2.296186262e-03f, 2.304734737e-03f, 2.313278806e-03f, 2.321818457e-03f, 2.330353673e-03f,
+2.338884441e-03f, 2.347410746e-03f, 2.355932574e-03f, 2.364449909e-03f, 2.372962738e-03f, 2.381471046e-03f, 2.389974818e-03f, 2.398474041e-03f, 2.406968699e-03f, 2.415458778e-03f,
+2.423944264e-03f, 2.432425142e-03f, 2.440901398e-03f, 2.449373017e-03f, 2.457839986e-03f, 2.466302289e-03f, 2.474759912e-03f, 2.483212841e-03f, 2.491661061e-03f, 2.500104559e-03f,
+2.508543319e-03f, 2.516977328e-03f, 2.525406571e-03f, 2.533831033e-03f, 2.542250701e-03f, 2.550665560e-03f, 2.559075596e-03f, 2.567480794e-03f, 2.575881141e-03f, 2.584276621e-03f,
+2.592667221e-03f, 2.601052927e-03f, 2.609433723e-03f, 2.617809597e-03f, 2.626180533e-03f, 2.634546518e-03f, 2.642907537e-03f, 2.651263576e-03f, 2.659614621e-03f, 2.667960657e-03f,
+2.676301672e-03f, 2.684637649e-03f, 2.692968576e-03f, 2.701294437e-03f, 2.709615220e-03f, 2.717930909e-03f, 2.726241492e-03f, 2.734546952e-03f, 2.742847277e-03f, 2.751142453e-03f,
+2.759432465e-03f, 2.767717299e-03f, 2.775996941e-03f, 2.784271377e-03f, 2.792540593e-03f, 2.800804576e-03f, 2.809063310e-03f, 2.817316783e-03f, 2.825564979e-03f, 2.833807886e-03f,
+2.842045488e-03f, 2.850277773e-03f, 2.858504725e-03f, 2.866726332e-03f, 2.874942579e-03f, 2.883153453e-03f, 2.891358938e-03f, 2.899559022e-03f, 2.907753691e-03f, 2.915942931e-03f,
+2.924126727e-03f, 2.932305066e-03f, 2.940477934e-03f, 2.948645317e-03f, 2.956807201e-03f, 2.964963574e-03f, 2.973114419e-03f, 2.981259725e-03f, 2.989399477e-03f, 2.997533661e-03f,
+3.005662263e-03f, 3.013785271e-03f, 3.021902669e-03f, 3.030014444e-03f, 3.038120583e-03f, 3.046221072e-03f, 3.054315897e-03f, 3.062405044e-03f, 3.070488500e-03f, 3.078566251e-03f,
+3.086638283e-03f, 3.094704582e-03f, 3.102765136e-03f, 3.110819930e-03f, 3.118868950e-03f, 3.126912184e-03f, 3.134949617e-03f, 3.142981236e-03f, 3.151007027e-03f, 3.159026977e-03f,
+3.167041072e-03f, 3.175049299e-03f, 3.183051643e-03f, 3.191048092e-03f, 3.199038632e-03f, 3.207023250e-03f, 3.215001931e-03f, 3.222974663e-03f, 3.230941431e-03f, 3.238902224e-03f,
+3.246857026e-03f, 3.254805825e-03f, 3.262748606e-03f, 3.270685358e-03f, 3.278616066e-03f, 3.286540717e-03f, 3.294459297e-03f, 3.302371793e-03f, 3.310278192e-03f, 3.318178481e-03f,
+3.326072645e-03f, 3.333960672e-03f, 3.341842549e-03f, 3.349718261e-03f, 3.357587796e-03f, 3.365451141e-03f, 3.373308282e-03f, 3.381159206e-03f, 3.389003899e-03f, 3.396842349e-03f,
+3.404674542e-03f, 3.412500465e-03f, 3.420320104e-03f, 3.428133448e-03f, 3.435940481e-03f, 3.443741192e-03f, 3.451535566e-03f, 3.459323592e-03f, 3.467105255e-03f, 3.474880542e-03f,
+3.482649441e-03f, 3.490411939e-03f, 3.498168021e-03f, 3.505917676e-03f, 3.513660890e-03f, 3.521397650e-03f, 3.529127943e-03f, 3.536851755e-03f, 3.544569075e-03f, 3.552279888e-03f,
+3.559984183e-03f, 3.567681945e-03f, 3.575373162e-03f, 3.583057821e-03f, 3.590735909e-03f, 3.598407413e-03f, 3.606072321e-03f, 3.613730618e-03f, 3.621382293e-03f, 3.629027332e-03f,
+3.636665723e-03f, 3.644297452e-03f, 3.651922507e-03f, 3.659540875e-03f, 3.667152543e-03f, 3.674757499e-03f, 3.682355728e-03f, 3.689947220e-03f, 3.697531961e-03f, 3.705109937e-03f,
+3.712681137e-03f, 3.720245548e-03f, 3.727803156e-03f, 3.735353950e-03f, 3.742897916e-03f, 3.750435042e-03f, 3.757965314e-03f, 3.765488722e-03f, 3.773005251e-03f, 3.780514889e-03f,
+3.788017623e-03f, 3.795513442e-03f, 3.803002331e-03f, 3.810484280e-03f, 3.817959274e-03f, 3.825427301e-03f, 3.832888350e-03f, 3.840342407e-03f, 3.847789460e-03f, 3.855229496e-03f,
+3.862662503e-03f, 3.870088468e-03f, 3.877507379e-03f, 3.884919223e-03f, 3.892323988e-03f, 3.899721662e-03f, 3.907112231e-03f, 3.914495684e-03f, 3.921872009e-03f, 3.929241192e-03f,
+3.936603221e-03f, 3.943958085e-03f, 3.951305770e-03f, 3.958646265e-03f, 3.965979556e-03f, 3.973305632e-03f, 3.980624481e-03f, 3.987936090e-03f, 3.995240446e-03f, 4.002537538e-03f,
+4.009827354e-03f, 4.017109880e-03f, 4.024385106e-03f, 4.031653018e-03f, 4.038913604e-03f, 4.046166853e-03f, 4.053412752e-03f, 4.060651289e-03f, 4.067882451e-03f, 4.075106227e-03f,
+4.082322605e-03f, 4.089531572e-03f, 4.096733117e-03f, 4.103927227e-03f, 4.111113890e-03f, 4.118293094e-03f, 4.125464827e-03f, 4.132629078e-03f, 4.139785833e-03f, 4.146935082e-03f,
+4.154076811e-03f, 4.161211010e-03f, 4.168337666e-03f, 4.175456767e-03f, 4.182568302e-03f, 4.189672258e-03f, 4.196768623e-03f, 4.203857387e-03f, 4.210938535e-03f, 4.218012058e-03f,
+4.225077943e-03f, 4.232136178e-03f, 4.239186751e-03f, 4.246229651e-03f, 4.253264866e-03f, 4.260292383e-03f, 4.267312192e-03f, 4.274324281e-03f, 4.281328637e-03f, 4.288325250e-03f,
+4.295314106e-03f, 4.302295195e-03f, 4.309268506e-03f, 4.316234025e-03f, 4.323191742e-03f, 4.330141646e-03f, 4.337083723e-03f, 4.344017964e-03f, 4.350944355e-03f, 4.357862887e-03f,
+4.364773546e-03f, 4.371676322e-03f, 4.378571202e-03f, 4.385458176e-03f, 4.392337232e-03f, 4.399208359e-03f, 4.406071544e-03f, 4.412926777e-03f, 4.419774046e-03f, 4.426613340e-03f,
+4.433444646e-03f, 4.440267955e-03f, 4.447083253e-03f, 4.453890531e-03f, 4.460689776e-03f, 4.467480978e-03f, 4.474264125e-03f, 4.481039205e-03f, 4.487806207e-03f, 4.494565121e-03f,
+4.501315934e-03f, 4.508058635e-03f, 4.514793214e-03f, 4.521519659e-03f, 4.528237958e-03f, 4.534948101e-03f, 4.541650077e-03f, 4.548343873e-03f, 4.555029480e-03f, 4.561706885e-03f,
+4.568376079e-03f, 4.575037048e-03f, 4.581689784e-03f, 4.588334273e-03f, 4.594970506e-03f, 4.601598472e-03f, 4.608218158e-03f, 4.614829555e-03f, 4.621432651e-03f, 4.628027435e-03f,
+4.634613897e-03f, 4.641192024e-03f, 4.647761807e-03f, 4.654323235e-03f, 4.660876295e-03f, 4.667420979e-03f, 4.673957273e-03f, 4.680485169e-03f, 4.687004654e-03f, 4.693515719e-03f,
+4.700018352e-03f, 4.706512542e-03f, 4.712998278e-03f, 4.719475551e-03f, 4.725944348e-03f, 4.732404660e-03f, 4.738856475e-03f, 4.745299783e-03f, 4.751734573e-03f, 4.758160834e-03f,
+4.764578556e-03f, 4.770987728e-03f, 4.777388339e-03f, 4.783780380e-03f, 4.790163838e-03f, 4.796538703e-03f, 4.802904966e-03f, 4.809262615e-03f, 4.815611640e-03f, 4.821952030e-03f,
+4.828283774e-03f, 4.834606863e-03f, 4.840921285e-03f, 4.847227031e-03f, 4.853524090e-03f, 4.859812450e-03f, 4.866092103e-03f, 4.872363037e-03f, 4.878625242e-03f, 4.884878707e-03f,
+4.891123423e-03f, 4.897359379e-03f, 4.903586564e-03f, 4.909804969e-03f, 4.916014582e-03f, 4.922215394e-03f, 4.928407395e-03f, 4.934590573e-03f, 4.940764920e-03f, 4.946930423e-03f,
+4.953087075e-03f, 4.959234863e-03f, 4.965373779e-03f, 4.971503811e-03f, 4.977624950e-03f, 4.983737186e-03f, 4.989840507e-03f, 4.995934906e-03f, 5.002020370e-03f, 5.008096891e-03f,
+5.014164457e-03f, 5.020223060e-03f, 5.026272689e-03f, 5.032313333e-03f, 5.038344984e-03f, 5.044367631e-03f, 5.050381264e-03f, 5.056385873e-03f, 5.062381448e-03f, 5.068367979e-03f,
+5.074345457e-03f, 5.080313872e-03f, 5.086273213e-03f, 5.092223470e-03f, 5.098164635e-03f, 5.104096697e-03f, 5.110019646e-03f, 5.115933473e-03f, 5.121838168e-03f, 5.127733720e-03f,
+5.133620121e-03f, 5.139497360e-03f, 5.145365429e-03f, 5.151224316e-03f, 5.157074013e-03f, 5.162914510e-03f, 5.168745797e-03f, 5.174567865e-03f, 5.180380704e-03f, 5.186184304e-03f,
+5.191978656e-03f, 5.197763750e-03f, 5.203539578e-03f, 5.209306128e-03f, 5.215063392e-03f, 5.220811360e-03f, 5.226550023e-03f, 5.232279371e-03f, 5.237999396e-03f, 5.243710086e-03f,
+5.249411434e-03f, 5.255103429e-03f, 5.260786063e-03f, 5.266459325e-03f, 5.272123207e-03f, 5.277777699e-03f, 5.283422793e-03f, 5.289058477e-03f, 5.294684745e-03f, 5.300301585e-03f,
+5.305908989e-03f, 5.311506948e-03f, 5.317095453e-03f, 5.322674493e-03f, 5.328244061e-03f, 5.333804146e-03f, 5.339354741e-03f, 5.344895835e-03f, 5.350427420e-03f, 5.355949486e-03f,
+5.361462024e-03f, 5.366965026e-03f, 5.372458483e-03f, 5.377942384e-03f, 5.383416722e-03f, 5.388881487e-03f, 5.394336670e-03f, 5.399782263e-03f, 5.405218257e-03f, 5.410644641e-03f,
+5.416061409e-03f, 5.421468550e-03f, 5.426866056e-03f, 5.432253918e-03f, 5.437632127e-03f, 5.443000675e-03f, 5.448359552e-03f, 5.453708750e-03f, 5.459048260e-03f, 5.464378073e-03f,
+5.469698181e-03f, 5.475008575e-03f, 5.480309246e-03f, 5.485600185e-03f, 5.490881384e-03f, 5.496152834e-03f, 5.501414527e-03f, 5.506666453e-03f, 5.511908605e-03f, 5.517140974e-03f,
+5.522363551e-03f, 5.527576327e-03f, 5.532779295e-03f, 5.537972445e-03f, 5.543155770e-03f, 5.548329260e-03f, 5.553492907e-03f, 5.558646703e-03f, 5.563790640e-03f, 5.568924708e-03f,
+5.574048900e-03f, 5.579163207e-03f, 5.584267621e-03f, 5.589362133e-03f, 5.594446736e-03f, 5.599521421e-03f, 5.604586179e-03f, 5.609641002e-03f, 5.614685883e-03f, 5.619720813e-03f,
+5.624745783e-03f, 5.629760786e-03f, 5.634765813e-03f, 5.639760856e-03f, 5.644745907e-03f, 5.649720958e-03f, 5.654686001e-03f, 5.659641028e-03f, 5.664586031e-03f, 5.669521001e-03f,
+5.674445930e-03f, 5.679360811e-03f, 5.684265636e-03f, 5.689160396e-03f, 5.694045084e-03f, 5.698919692e-03f, 5.703784211e-03f, 5.708638634e-03f, 5.713482953e-03f, 5.718317160e-03f,
+5.723141248e-03f, 5.727955208e-03f, 5.732759032e-03f, 5.737552713e-03f, 5.742336244e-03f, 5.747109615e-03f, 5.751872820e-03f, 5.756625851e-03f, 5.761368699e-03f, 5.766101359e-03f,
+5.770823820e-03f, 5.775536077e-03f, 5.780238121e-03f, 5.784929945e-03f, 5.789611541e-03f, 5.794282902e-03f, 5.798944020e-03f, 5.803594887e-03f, 5.808235496e-03f, 5.812865839e-03f,
+5.817485910e-03f, 5.822095700e-03f, 5.826695202e-03f, 5.831284408e-03f, 5.835863312e-03f, 5.840431905e-03f, 5.844990181e-03f, 5.849538131e-03f, 5.854075750e-03f, 5.858603028e-03f,
+5.863119960e-03f, 5.867626537e-03f, 5.872122753e-03f, 5.876608599e-03f, 5.881084070e-03f, 5.885549157e-03f, 5.890003854e-03f, 5.894448154e-03f, 5.898882048e-03f, 5.903305530e-03f,
+5.907718594e-03f, 5.912121231e-03f, 5.916513434e-03f, 5.920895198e-03f, 5.925266513e-03f, 5.929627375e-03f, 5.933977774e-03f, 5.938317706e-03f, 5.942647161e-03f, 5.946966135e-03f,
+5.951274619e-03f, 5.955572606e-03f, 5.959860090e-03f, 5.964137065e-03f, 5.968403522e-03f, 5.972659455e-03f, 5.976904858e-03f, 5.981139723e-03f, 5.985364043e-03f, 5.989577813e-03f,
+5.993781025e-03f, 5.997973672e-03f, 6.002155748e-03f, 6.006327246e-03f, 6.010488159e-03f, 6.014638481e-03f, 6.018778205e-03f, 6.022907324e-03f, 6.027025832e-03f, 6.031133722e-03f,
+6.035230987e-03f, 6.039317622e-03f, 6.043393619e-03f, 6.047458972e-03f, 6.051513675e-03f, 6.055557720e-03f, 6.059591102e-03f, 6.063613815e-03f, 6.067625850e-03f, 6.071627203e-03f,
+6.075617867e-03f, 6.079597836e-03f, 6.083567102e-03f, 6.087525661e-03f, 6.091473505e-03f, 6.095410628e-03f, 6.099337024e-03f, 6.103252687e-03f, 6.107157610e-03f, 6.111051787e-03f,
+6.114935213e-03f, 6.118807880e-03f, 6.122669783e-03f, 6.126520915e-03f, 6.130361271e-03f, 6.134190845e-03f, 6.138009629e-03f, 6.141817619e-03f, 6.145614808e-03f, 6.149401190e-03f,
+6.153176759e-03f, 6.156941509e-03f, 6.160695434e-03f, 6.164438529e-03f, 6.168170786e-03f, 6.171892201e-03f, 6.175602768e-03f, 6.179302480e-03f, 6.182991331e-03f, 6.186669317e-03f,
+6.190336431e-03f, 6.193992667e-03f, 6.197638019e-03f, 6.201272482e-03f, 6.204896050e-03f, 6.208508717e-03f, 6.212110478e-03f, 6.215701327e-03f, 6.219281257e-03f, 6.222850265e-03f,
+6.226408343e-03f, 6.229955487e-03f, 6.233491690e-03f, 6.237016947e-03f, 6.240531253e-03f, 6.244034602e-03f, 6.247526989e-03f, 6.251008408e-03f, 6.254478853e-03f, 6.257938319e-03f,
+6.261386801e-03f, 6.264824294e-03f, 6.268250791e-03f, 6.271666287e-03f, 6.275070778e-03f, 6.278464258e-03f, 6.281846721e-03f, 6.285218162e-03f, 6.288578576e-03f, 6.291927958e-03f,
+6.295266302e-03f, 6.298593604e-03f, 6.301909857e-03f, 6.305215057e-03f, 6.308509199e-03f, 6.311792277e-03f, 6.315064287e-03f, 6.318325222e-03f, 6.321575079e-03f, 6.324813852e-03f,
+6.328041536e-03f, 6.331258126e-03f, 6.334463617e-03f, 6.337658004e-03f, 6.340841282e-03f, 6.344013446e-03f, 6.347174492e-03f, 6.350324413e-03f, 6.353463206e-03f, 6.356590865e-03f,
+6.359707386e-03f, 6.362812763e-03f, 6.365906993e-03f, 6.368990070e-03f, 6.372061989e-03f, 6.375122746e-03f, 6.378172335e-03f, 6.381210753e-03f, 6.384237994e-03f, 6.387254054e-03f,
+6.390258928e-03f, 6.393252612e-03f, 6.396235101e-03f, 6.399206389e-03f, 6.402166474e-03f, 6.405115349e-03f, 6.408053012e-03f, 6.410979456e-03f, 6.413894678e-03f, 6.416798672e-03f,
+6.419691436e-03f, 6.422572964e-03f, 6.425443251e-03f, 6.428302294e-03f, 6.431150087e-03f, 6.433986628e-03f, 6.436811910e-03f, 6.439625931e-03f, 6.442428685e-03f, 6.445220168e-03f,
+6.448000376e-03f, 6.450769306e-03f, 6.453526951e-03f, 6.456273310e-03f, 6.459008376e-03f, 6.461732146e-03f, 6.464444617e-03f, 6.467145783e-03f, 6.469835640e-03f, 6.472514185e-03f,
+6.475181414e-03f, 6.477837322e-03f, 6.480481905e-03f, 6.483115160e-03f, 6.485737082e-03f, 6.488347668e-03f, 6.490946913e-03f, 6.493534813e-03f, 6.496111366e-03f, 6.498676566e-03f,
+6.501230409e-03f, 6.503772893e-03f, 6.506304013e-03f, 6.508823765e-03f, 6.511332146e-03f, 6.513829152e-03f, 6.516314779e-03f, 6.518789023e-03f, 6.521251880e-03f, 6.523703348e-03f,
+6.526143422e-03f, 6.528572098e-03f, 6.530989373e-03f, 6.533395244e-03f, 6.535789706e-03f, 6.538172757e-03f, 6.540544392e-03f, 6.542904608e-03f, 6.545253401e-03f, 6.547590769e-03f,
+6.549916707e-03f, 6.552231213e-03f, 6.554534282e-03f, 6.556825911e-03f, 6.559106098e-03f, 6.561374838e-03f, 6.563632128e-03f, 6.565877964e-03f, 6.568112345e-03f, 6.570335265e-03f,
+6.572546723e-03f, 6.574746714e-03f, 6.576935235e-03f, 6.579112284e-03f, 6.581277857e-03f, 6.583431950e-03f, 6.585574562e-03f, 6.587705688e-03f, 6.589825325e-03f, 6.591933471e-03f,
+6.594030122e-03f, 6.596115275e-03f, 6.598188927e-03f, 6.600251076e-03f, 6.602301717e-03f, 6.604340849e-03f, 6.606368469e-03f, 6.608384572e-03f, 6.610389157e-03f, 6.612382220e-03f,
+6.614363759e-03f, 6.616333771e-03f, 6.618292253e-03f, 6.620239201e-03f, 6.622174615e-03f, 6.624098489e-03f, 6.626010823e-03f, 6.627911612e-03f, 6.629800855e-03f, 6.631678549e-03f,
+6.633544690e-03f, 6.635399277e-03f, 6.637242306e-03f, 6.639073776e-03f, 6.640893683e-03f, 6.642702025e-03f, 6.644498799e-03f, 6.646284003e-03f, 6.648057635e-03f, 6.649819691e-03f,
+6.651570170e-03f, 6.653309068e-03f, 6.655036384e-03f, 6.656752115e-03f, 6.658456258e-03f, 6.660148812e-03f, 6.661829774e-03f, 6.663499141e-03f, 6.665156912e-03f, 6.666803084e-03f,
+6.668437654e-03f, 6.670060621e-03f, 6.671671982e-03f, 6.673271735e-03f, 6.674859877e-03f, 6.676436408e-03f, 6.678001324e-03f, 6.679554623e-03f, 6.681096304e-03f, 6.682626364e-03f,
+6.684144800e-03f, 6.685651612e-03f, 6.687146797e-03f, 6.688630353e-03f, 6.690102278e-03f, 6.691562570e-03f, 6.693011227e-03f, 6.694448248e-03f, 6.695873629e-03f, 6.697287370e-03f,
+6.698689468e-03f, 6.700079923e-03f, 6.701458730e-03f, 6.702825890e-03f, 6.704181401e-03f, 6.705525259e-03f, 6.706857465e-03f, 6.708178015e-03f, 6.709486909e-03f, 6.710784144e-03f,
+6.712069719e-03f, 6.713343632e-03f, 6.714605883e-03f, 6.715856468e-03f, 6.717095386e-03f, 6.718322637e-03f, 6.719538218e-03f, 6.720742128e-03f, 6.721934365e-03f, 6.723114928e-03f,
+6.724283815e-03f, 6.725441025e-03f, 6.726586557e-03f, 6.727720409e-03f, 6.728842580e-03f, 6.729953068e-03f, 6.731051872e-03f, 6.732138991e-03f, 6.733214423e-03f, 6.734278167e-03f,
+6.735330222e-03f, 6.736370587e-03f, 6.737399260e-03f, 6.738416240e-03f, 6.739421527e-03f, 6.740415118e-03f, 6.741397013e-03f, 6.742367211e-03f, 6.743325710e-03f, 6.744272509e-03f,
+6.745207608e-03f, 6.746131005e-03f, 6.747042700e-03f, 6.747942691e-03f, 6.748830977e-03f, 6.749707557e-03f, 6.750572431e-03f, 6.751425598e-03f, 6.752267056e-03f, 6.753096805e-03f,
+6.753914843e-03f, 6.754721171e-03f, 6.755515787e-03f, 6.756298691e-03f, 6.757069881e-03f, 6.757829357e-03f, 6.758577118e-03f, 6.759313164e-03f, 6.760037493e-03f, 6.760750106e-03f,
+6.761451001e-03f, 6.762140178e-03f, 6.762817636e-03f, 6.763483375e-03f, 6.764137393e-03f, 6.764779692e-03f, 6.765410269e-03f, 6.766029124e-03f, 6.766636258e-03f, 6.767231669e-03f,
+6.767815357e-03f, 6.768387322e-03f, 6.768947563e-03f, 6.769496079e-03f, 6.770032871e-03f, 6.770557939e-03f, 6.771071281e-03f, 6.771572897e-03f, 6.772062788e-03f, 6.772540952e-03f,
+6.773007390e-03f, 6.773462102e-03f, 6.773905086e-03f, 6.774336344e-03f, 6.774755875e-03f, 6.775163678e-03f, 6.775559754e-03f, 6.775944102e-03f, 6.776316723e-03f, 6.776677616e-03f,
+6.777026782e-03f, 6.777364219e-03f, 6.777689929e-03f, 6.778003912e-03f, 6.778306166e-03f, 6.778596693e-03f, 6.778875492e-03f, 6.779142564e-03f, 6.779397909e-03f, 6.779641526e-03f,
+6.779873416e-03f, 6.780093580e-03f, 6.780302016e-03f, 6.780498727e-03f, 6.780683711e-03f, 6.780856969e-03f, 6.781018501e-03f, 6.781168308e-03f, 6.781306390e-03f, 6.781432747e-03f,
+6.781547380e-03f, 6.781650289e-03f, 6.781741474e-03f, 6.781820937e-03f, 6.781888676e-03f, 6.781944693e-03f, 6.781988989e-03f, 6.782021563e-03f, 6.782042416e-03f, 6.782051549e-03f,
+6.782048963e-03f, 6.782034658e-03f, 6.782008634e-03f, 6.781970892e-03f, 6.781921433e-03f, 6.781860257e-03f, 6.781787366e-03f, 6.781702760e-03f, 6.781606439e-03f, 6.781498404e-03f,
+6.781378657e-03f, 6.781247197e-03f, 6.781104026e-03f, 6.780949145e-03f, 6.780782554e-03f, 6.780604254e-03f, 6.780414246e-03f, 6.780212531e-03f, 6.779999111e-03f, 6.779773985e-03f,
+6.779537155e-03f, 6.779288622e-03f, 6.779028386e-03f, 6.778756450e-03f, 6.778472813e-03f, 6.778177478e-03f, 6.777870444e-03f, 6.777551714e-03f, 6.777221288e-03f, 6.776879167e-03f,
+6.776525353e-03f, 6.776159847e-03f, 6.775782650e-03f, 6.775393763e-03f, 6.774993188e-03f, 6.774580926e-03f, 6.774156977e-03f, 6.773721344e-03f, 6.773274028e-03f, 6.772815029e-03f,
+6.772344350e-03f, 6.771861992e-03f, 6.771367956e-03f, 6.770862244e-03f, 6.770344857e-03f, 6.769815796e-03f, 6.769275063e-03f, 6.768722660e-03f, 6.768158589e-03f, 6.767582849e-03f,
+6.766995444e-03f, 6.766396375e-03f, 6.765785643e-03f, 6.765163250e-03f, 6.764529198e-03f, 6.763883489e-03f, 6.763226123e-03f, 6.762557103e-03f, 6.761876431e-03f, 6.761184108e-03f,
+6.760480136e-03f, 6.759764516e-03f, 6.759037252e-03f, 6.758298344e-03f, 6.757547794e-03f, 6.756785604e-03f, 6.756011776e-03f, 6.755226313e-03f, 6.754429215e-03f, 6.753620485e-03f,
+6.752800125e-03f, 6.751968137e-03f, 6.751124523e-03f, 6.750269284e-03f, 6.749402424e-03f, 6.748523943e-03f, 6.747633845e-03f, 6.746732131e-03f, 6.745818803e-03f, 6.744893863e-03f,
+6.743957314e-03f, 6.743009159e-03f, 6.742049398e-03f, 6.741078034e-03f, 6.740095070e-03f, 6.739100508e-03f, 6.738094350e-03f, 6.737076598e-03f, 6.736047255e-03f, 6.735006323e-03f,
+6.733953804e-03f, 6.732889702e-03f, 6.731814017e-03f, 6.730726754e-03f, 6.729627913e-03f, 6.728517498e-03f, 6.727395512e-03f, 6.726261955e-03f, 6.725116832e-03f, 6.723960145e-03f,
+6.722791896e-03f, 6.721612088e-03f, 6.720420723e-03f, 6.719217804e-03f, 6.718003334e-03f, 6.716777316e-03f, 6.715539751e-03f, 6.714290643e-03f, 6.713029995e-03f, 6.711757809e-03f,
+6.710474088e-03f, 6.709178835e-03f, 6.707872053e-03f, 6.706553744e-03f, 6.705223911e-03f, 6.703882558e-03f, 6.702529687e-03f, 6.701165300e-03f, 6.699789402e-03f, 6.698401994e-03f,
+6.697003080e-03f, 6.695592663e-03f, 6.694170746e-03f, 6.692737331e-03f, 6.691292423e-03f, 6.689836023e-03f, 6.688368135e-03f, 6.686888763e-03f, 6.685397908e-03f, 6.683895575e-03f,
+6.682381767e-03f, 6.680856486e-03f, 6.679319737e-03f, 6.677771521e-03f, 6.676211843e-03f, 6.674640705e-03f, 6.673058111e-03f, 6.671464065e-03f, 6.669858569e-03f, 6.668241627e-03f,
+6.666613242e-03f, 6.664973418e-03f, 6.663322158e-03f, 6.661659465e-03f, 6.659985343e-03f, 6.658299796e-03f, 6.656602826e-03f, 6.654894438e-03f, 6.653174634e-03f, 6.651443419e-03f,
+6.649700796e-03f, 6.647946768e-03f, 6.646181339e-03f, 6.644404513e-03f, 6.642616293e-03f, 6.640816684e-03f, 6.639005687e-03f, 6.637183309e-03f, 6.635349551e-03f, 6.633504418e-03f,
+6.631647913e-03f, 6.629780041e-03f, 6.627900805e-03f, 6.626010209e-03f, 6.624108257e-03f, 6.622194952e-03f, 6.620270298e-03f, 6.618334300e-03f, 6.616386961e-03f, 6.614428285e-03f,
+6.612458276e-03f, 6.610476939e-03f, 6.608484276e-03f, 6.606480293e-03f, 6.604464992e-03f, 6.602438379e-03f, 6.600400456e-03f, 6.598351229e-03f, 6.596290701e-03f, 6.594218877e-03f,
+6.592135761e-03f, 6.590041356e-03f, 6.587935667e-03f, 6.585818698e-03f, 6.583690453e-03f, 6.581550937e-03f, 6.579400154e-03f, 6.577238108e-03f, 6.575064803e-03f, 6.572880244e-03f,
+6.570684435e-03f, 6.568477381e-03f, 6.566259085e-03f, 6.564029552e-03f, 6.561788787e-03f, 6.559536793e-03f, 6.557273577e-03f, 6.554999141e-03f, 6.552713490e-03f, 6.550416629e-03f,
+6.548108563e-03f, 6.545789295e-03f, 6.543458831e-03f, 6.541117175e-03f, 6.538764332e-03f, 6.536400306e-03f, 6.534025102e-03f, 6.531638725e-03f, 6.529241178e-03f, 6.526832468e-03f,
+6.524412598e-03f, 6.521981574e-03f, 6.519539400e-03f, 6.517086080e-03f, 6.514621621e-03f, 6.512146026e-03f, 6.509659300e-03f, 6.507161448e-03f, 6.504652476e-03f, 6.502132387e-03f,
+6.499601187e-03f, 6.497058881e-03f, 6.494505474e-03f, 6.491940970e-03f, 6.489365375e-03f, 6.486778693e-03f, 6.484180930e-03f, 6.481572091e-03f, 6.478952181e-03f, 6.476321204e-03f,
+6.473679166e-03f, 6.471026072e-03f, 6.468361928e-03f, 6.465686737e-03f, 6.463000507e-03f, 6.460303240e-03f, 6.457594944e-03f, 6.454875622e-03f, 6.452145281e-03f, 6.449403926e-03f,
+6.446651561e-03f, 6.443888193e-03f, 6.441113825e-03f, 6.438328465e-03f, 6.435532117e-03f, 6.432724787e-03f, 6.429906479e-03f, 6.427077200e-03f, 6.424236954e-03f, 6.421385748e-03f,
+6.418523586e-03f, 6.415650474e-03f, 6.412766419e-03f, 6.409871424e-03f, 6.406965496e-03f, 6.404048641e-03f, 6.401120863e-03f, 6.398182169e-03f, 6.395232563e-03f, 6.392272053e-03f,
+6.389300643e-03f, 6.386318339e-03f, 6.383325147e-03f, 6.380321072e-03f, 6.377306120e-03f, 6.374280297e-03f, 6.371243609e-03f, 6.368196062e-03f, 6.365137660e-03f, 6.362068411e-03f,
+6.358988320e-03f, 6.355897392e-03f, 6.352795635e-03f, 6.349683052e-03f, 6.346559652e-03f, 6.343425438e-03f, 6.340280418e-03f, 6.337124597e-03f, 6.333957982e-03f, 6.330780578e-03f,
+6.327592391e-03f, 6.324393428e-03f, 6.321183694e-03f, 6.317963195e-03f, 6.314731938e-03f, 6.311489929e-03f, 6.308237174e-03f, 6.304973678e-03f, 6.301699449e-03f, 6.298414492e-03f,
+6.295118814e-03f, 6.291812421e-03f, 6.288495318e-03f, 6.285167513e-03f, 6.281829012e-03f, 6.278479820e-03f, 6.275119944e-03f, 6.271749391e-03f, 6.268368167e-03f, 6.264976278e-03f,
+6.261573731e-03f, 6.258160531e-03f, 6.254736686e-03f, 6.251302202e-03f, 6.247857086e-03f, 6.244401343e-03f, 6.240934980e-03f, 6.237458005e-03f, 6.233970422e-03f, 6.230472240e-03f,
+6.226963464e-03f, 6.223444101e-03f, 6.219914158e-03f, 6.216373641e-03f, 6.212822557e-03f, 6.209260912e-03f, 6.205688714e-03f, 6.202105969e-03f, 6.198512683e-03f, 6.194908864e-03f,
+6.191294518e-03f, 6.187669652e-03f, 6.184034273e-03f, 6.180388387e-03f, 6.176732001e-03f, 6.173065122e-03f, 6.169387758e-03f, 6.165699914e-03f, 6.162001598e-03f, 6.158292817e-03f,
+6.154573577e-03f, 6.150843886e-03f, 6.147103751e-03f, 6.143353177e-03f, 6.139592174e-03f, 6.135820746e-03f, 6.132038903e-03f, 6.128246649e-03f, 6.124443994e-03f, 6.120630943e-03f,
+6.116807504e-03f, 6.112973684e-03f, 6.109129490e-03f, 6.105274929e-03f, 6.101410008e-03f, 6.097534735e-03f, 6.093649117e-03f, 6.089753161e-03f, 6.085846874e-03f, 6.081930264e-03f,
+6.078003337e-03f, 6.074066102e-03f, 6.070118565e-03f, 6.066160733e-03f, 6.062192615e-03f, 6.058214217e-03f, 6.054225547e-03f, 6.050226612e-03f, 6.046217420e-03f, 6.042197977e-03f,
+6.038168293e-03f, 6.034128373e-03f, 6.030078226e-03f, 6.026017858e-03f, 6.021947279e-03f, 6.017866494e-03f, 6.013775512e-03f, 6.009674340e-03f, 6.005562985e-03f, 6.001441456e-03f,
+5.997309760e-03f, 5.993167905e-03f, 5.989015898e-03f, 5.984853747e-03f, 5.980681459e-03f, 5.976499043e-03f, 5.972306506e-03f, 5.968103855e-03f, 5.963891100e-03f, 5.959668246e-03f,
+5.955435303e-03f, 5.951192278e-03f, 5.946939178e-03f, 5.942676012e-03f, 5.938402788e-03f, 5.934119513e-03f, 5.929826195e-03f, 5.925522843e-03f, 5.921209463e-03f, 5.916886065e-03f,
+5.912552656e-03f, 5.908209243e-03f, 5.903855836e-03f, 5.899492442e-03f, 5.895119069e-03f, 5.890735725e-03f, 5.886342418e-03f, 5.881939156e-03f, 5.877525948e-03f, 5.873102801e-03f,
+5.868669724e-03f, 5.864226724e-03f, 5.859773811e-03f, 5.855310991e-03f, 5.850838274e-03f, 5.846355667e-03f, 5.841863179e-03f, 5.837360819e-03f, 5.832848593e-03f, 5.828326511e-03f,
+5.823794581e-03f, 5.819252811e-03f, 5.814701209e-03f, 5.810139785e-03f, 5.805568545e-03f, 5.800987499e-03f, 5.796396655e-03f, 5.791796022e-03f, 5.787185607e-03f, 5.782565420e-03f,
+5.777935469e-03f, 5.773295761e-03f, 5.768646307e-03f, 5.763987113e-03f, 5.759318190e-03f, 5.754639545e-03f, 5.749951187e-03f, 5.745253124e-03f, 5.740545365e-03f, 5.735827919e-03f,
+5.731100794e-03f, 5.726364000e-03f, 5.721617544e-03f, 5.716861435e-03f, 5.712095682e-03f, 5.707320294e-03f, 5.702535279e-03f, 5.697740647e-03f, 5.692936405e-03f, 5.688122564e-03f,
+5.683299130e-03f, 5.678466114e-03f, 5.673623524e-03f, 5.668771369e-03f, 5.663909658e-03f, 5.659038400e-03f, 5.654157603e-03f, 5.649267277e-03f, 5.644367430e-03f, 5.639458072e-03f,
+5.634539210e-03f, 5.629610856e-03f, 5.624673016e-03f, 5.619725700e-03f, 5.614768918e-03f, 5.609802678e-03f, 5.604826990e-03f, 5.599841862e-03f, 5.594847303e-03f, 5.589843323e-03f,
+5.584829931e-03f, 5.579807136e-03f, 5.574774946e-03f, 5.569733372e-03f, 5.564682422e-03f, 5.559622105e-03f, 5.554552431e-03f, 5.549473409e-03f, 5.544385048e-03f, 5.539287358e-03f,
+5.534180347e-03f, 5.529064026e-03f, 5.523938402e-03f, 5.518803486e-03f, 5.513659287e-03f, 5.508505814e-03f, 5.503343077e-03f, 5.498171085e-03f, 5.492989847e-03f, 5.487799373e-03f,
+5.482599673e-03f, 5.477390755e-03f, 5.472172629e-03f, 5.466945304e-03f, 5.461708791e-03f, 5.456463098e-03f, 5.451208236e-03f, 5.445944213e-03f, 5.440671039e-03f, 5.435388724e-03f,
+5.430097277e-03f, 5.424796708e-03f, 5.419487027e-03f, 5.414168242e-03f, 5.408840365e-03f, 5.403503404e-03f, 5.398157369e-03f, 5.392802270e-03f, 5.387438116e-03f, 5.382064918e-03f,
+5.376682684e-03f, 5.371291426e-03f, 5.365891151e-03f, 5.360481871e-03f, 5.355063595e-03f, 5.349636332e-03f, 5.344200094e-03f, 5.338754888e-03f, 5.333300727e-03f, 5.327837618e-03f,
+5.322365572e-03f, 5.316884599e-03f, 5.311394710e-03f, 5.305895913e-03f, 5.300388218e-03f, 5.294871637e-03f, 5.289346178e-03f, 5.283811851e-03f, 5.278268668e-03f, 5.272716637e-03f,
+5.267155769e-03f, 5.261586073e-03f, 5.256007560e-03f, 5.250420240e-03f, 5.244824124e-03f, 5.239219220e-03f, 5.233605539e-03f, 5.227983092e-03f, 5.222351888e-03f, 5.216711938e-03f,
+5.211063251e-03f, 5.205405839e-03f, 5.199739711e-03f, 5.194064877e-03f, 5.188381348e-03f, 5.182689133e-03f, 5.176988244e-03f, 5.171278691e-03f, 5.165560483e-03f, 5.159833631e-03f,
+5.154098146e-03f, 5.148354037e-03f, 5.142601315e-03f, 5.136839991e-03f, 5.131070075e-03f, 5.125291576e-03f, 5.119504507e-03f, 5.113708876e-03f, 5.107904695e-03f, 5.102091974e-03f,
+5.096270723e-03f, 5.090440953e-03f, 5.084602674e-03f, 5.078755897e-03f, 5.072900633e-03f, 5.067036891e-03f, 5.061164683e-03f, 5.055284019e-03f, 5.049394910e-03f, 5.043497366e-03f,
+5.037591397e-03f, 5.031677015e-03f, 5.025754230e-03f, 5.019823053e-03f, 5.013883494e-03f, 5.007935565e-03f, 5.001979275e-03f, 4.996014635e-03f, 4.990041657e-03f, 4.984060350e-03f,
+4.978070726e-03f, 4.972072796e-03f, 4.966066569e-03f, 4.960052058e-03f, 4.954029272e-03f, 4.947998223e-03f, 4.941958922e-03f, 4.935911379e-03f, 4.929855604e-03f, 4.923791610e-03f,
+4.917719407e-03f, 4.911639005e-03f, 4.905550416e-03f, 4.899453651e-03f, 4.893348720e-03f, 4.887235634e-03f, 4.881114405e-03f, 4.874985044e-03f, 4.868847561e-03f, 4.862701967e-03f,
+4.856548274e-03f, 4.850386492e-03f, 4.844216633e-03f, 4.838038707e-03f, 4.831852726e-03f, 4.825658701e-03f, 4.819456642e-03f, 4.813246562e-03f, 4.807028470e-03f, 4.800802379e-03f,
+4.794568299e-03f, 4.788326242e-03f, 4.782076219e-03f, 4.775818240e-03f, 4.769552317e-03f, 4.763278462e-03f, 4.756996685e-03f, 4.750706998e-03f, 4.744409413e-03f, 4.738103939e-03f,
+4.731790589e-03f, 4.725469374e-03f, 4.719140306e-03f, 4.712803394e-03f, 4.706458652e-03f, 4.700106090e-03f, 4.693745720e-03f, 4.687377552e-03f, 4.681001599e-03f, 4.674617872e-03f,
+4.668226381e-03f, 4.661827140e-03f, 4.655420158e-03f, 4.649005448e-03f, 4.642583021e-03f, 4.636152889e-03f, 4.629715062e-03f, 4.623269553e-03f, 4.616816372e-03f, 4.610355532e-03f,
+4.603887045e-03f, 4.597410920e-03f, 4.590927171e-03f, 4.584435809e-03f, 4.577936845e-03f, 4.571430291e-03f, 4.564916158e-03f, 4.558394458e-03f, 4.551865204e-03f, 4.545328406e-03f,
+4.538784076e-03f, 4.532232225e-03f, 4.525672867e-03f, 4.519106011e-03f, 4.512531670e-03f, 4.505949856e-03f, 4.499360581e-03f, 4.492763855e-03f, 4.486159692e-03f, 4.479548102e-03f,
+4.472929097e-03f, 4.466302690e-03f, 4.459668892e-03f, 4.453027715e-03f, 4.446379171e-03f, 4.439723271e-03f, 4.433060028e-03f, 4.426389453e-03f, 4.419711558e-03f, 4.413026356e-03f,
+4.406333857e-03f, 4.399634075e-03f, 4.392927020e-03f, 4.386212705e-03f, 4.379491143e-03f, 4.372762343e-03f, 4.366026320e-03f, 4.359283085e-03f, 4.352532649e-03f, 4.345775025e-03f,
+4.339010225e-03f, 4.332238260e-03f, 4.325459144e-03f, 4.318672888e-03f, 4.311879503e-03f, 4.305079003e-03f, 4.298271399e-03f, 4.291456704e-03f, 4.284634929e-03f, 4.277806086e-03f,
+4.270970189e-03f, 4.264127248e-03f, 4.257277277e-03f, 4.250420286e-03f, 4.243556290e-03f, 4.236685299e-03f, 4.229807325e-03f, 4.222922382e-03f, 4.216030482e-03f, 4.209131636e-03f,
+4.202225857e-03f, 4.195313157e-03f, 4.188393549e-03f, 4.181467044e-03f, 4.174533655e-03f, 4.167593395e-03f, 4.160646276e-03f, 4.153692309e-03f, 4.146731508e-03f, 4.139763885e-03f,
+4.132789452e-03f, 4.125808221e-03f, 4.118820205e-03f, 4.111825417e-03f, 4.104823869e-03f, 4.097815572e-03f, 4.090800541e-03f, 4.083778786e-03f, 4.076750321e-03f, 4.069715158e-03f,
+4.062673310e-03f, 4.055624788e-03f, 4.048569606e-03f, 4.041507776e-03f, 4.034439311e-03f, 4.027364223e-03f, 4.020282525e-03f, 4.013194228e-03f, 4.006099347e-03f, 3.998997893e-03f,
+3.991889879e-03f, 3.984775317e-03f, 3.977654221e-03f, 3.970526602e-03f, 3.963392474e-03f, 3.956251849e-03f, 3.949104740e-03f, 3.941951160e-03f, 3.934791120e-03f, 3.927624634e-03f,
+3.920451715e-03f, 3.913272375e-03f, 3.906086627e-03f, 3.898894484e-03f, 3.891695958e-03f, 3.884491062e-03f, 3.877279810e-03f, 3.870062213e-03f, 3.862838284e-03f, 3.855608037e-03f,
+3.848371484e-03f, 3.841128637e-03f, 3.833879511e-03f, 3.826624117e-03f, 3.819362468e-03f, 3.812094578e-03f, 3.804820459e-03f, 3.797540124e-03f, 3.790253586e-03f, 3.782960857e-03f,
+3.775661952e-03f, 3.768356882e-03f, 3.761045660e-03f, 3.753728300e-03f, 3.746404815e-03f, 3.739075217e-03f, 3.731739519e-03f, 3.724397734e-03f, 3.717049876e-03f, 3.709695957e-03f,
+3.702335991e-03f, 3.694969990e-03f, 3.687597967e-03f, 3.680219936e-03f, 3.672835909e-03f, 3.665445899e-03f, 3.658049920e-03f, 3.650647985e-03f, 3.643240106e-03f, 3.635826298e-03f,
+3.628406572e-03f, 3.620980942e-03f, 3.613549422e-03f, 3.606112023e-03f, 3.598668760e-03f, 3.591219646e-03f, 3.583764693e-03f, 3.576303916e-03f, 3.568837326e-03f, 3.561364938e-03f,
+3.553886764e-03f, 3.546402817e-03f, 3.538913112e-03f, 3.531417661e-03f, 3.523916477e-03f, 3.516409574e-03f, 3.508896964e-03f, 3.501378662e-03f, 3.493854680e-03f, 3.486325032e-03f,
+3.478789731e-03f, 3.471248790e-03f, 3.463702222e-03f, 3.456150041e-03f, 3.448592261e-03f, 3.441028894e-03f, 3.433459954e-03f, 3.425885455e-03f, 3.418305408e-03f, 3.410719829e-03f,
+3.403128730e-03f, 3.395532125e-03f, 3.387930027e-03f, 3.380322450e-03f, 3.372709407e-03f, 3.365090910e-03f, 3.357466975e-03f, 3.349837614e-03f, 3.342202841e-03f, 3.334562669e-03f,
+3.326917111e-03f, 3.319266182e-03f, 3.311609894e-03f, 3.303948262e-03f, 3.296281298e-03f, 3.288609016e-03f, 3.280931429e-03f, 3.273248552e-03f, 3.265560398e-03f, 3.257866979e-03f,
+3.250168311e-03f, 3.242464406e-03f, 3.234755278e-03f, 3.227040940e-03f, 3.219321406e-03f, 3.211596690e-03f, 3.203866806e-03f, 3.196131766e-03f, 3.188391585e-03f, 3.180646275e-03f,
+3.172895852e-03f, 3.165140328e-03f, 3.157379717e-03f, 3.149614033e-03f, 3.141843289e-03f, 3.134067500e-03f, 3.126286678e-03f, 3.118500837e-03f, 3.110709992e-03f, 3.102914156e-03f,
+3.095113342e-03f, 3.087307564e-03f, 3.079496837e-03f, 3.071681173e-03f, 3.063860587e-03f, 3.056035092e-03f, 3.048204702e-03f, 3.040369431e-03f, 3.032529293e-03f, 3.024684301e-03f,
+3.016834469e-03f, 3.008979811e-03f, 3.001120341e-03f, 2.993256072e-03f, 2.985387019e-03f, 2.977513195e-03f, 2.969634615e-03f, 2.961751291e-03f, 2.953863238e-03f, 2.945970470e-03f,
+2.938073000e-03f, 2.930170843e-03f, 2.922264012e-03f, 2.914352521e-03f, 2.906436385e-03f, 2.898515616e-03f, 2.890590229e-03f, 2.882660238e-03f, 2.874725657e-03f, 2.866786500e-03f,
+2.858842780e-03f, 2.850894512e-03f, 2.842941710e-03f, 2.834984387e-03f, 2.827022557e-03f, 2.819056235e-03f, 2.811085435e-03f, 2.803110170e-03f, 2.795130454e-03f, 2.787146302e-03f,
+2.779157727e-03f, 2.771164744e-03f, 2.763167366e-03f, 2.755165608e-03f, 2.747159484e-03f, 2.739149007e-03f, 2.731134192e-03f, 2.723115053e-03f, 2.715091604e-03f, 2.707063858e-03f,
+2.699031831e-03f, 2.690995535e-03f, 2.682954986e-03f, 2.674910197e-03f, 2.666861183e-03f, 2.658807957e-03f, 2.650750534e-03f, 2.642688927e-03f, 2.634623152e-03f, 2.626553221e-03f,
+2.618479150e-03f, 2.610400952e-03f, 2.602318642e-03f, 2.594232233e-03f, 2.586141740e-03f, 2.578047177e-03f, 2.569948559e-03f, 2.561845899e-03f, 2.553739211e-03f, 2.545628510e-03f,
+2.537513811e-03f, 2.529395127e-03f, 2.521272472e-03f, 2.513145861e-03f, 2.505015307e-03f, 2.496880827e-03f, 2.488742432e-03f, 2.480600138e-03f, 2.472453959e-03f, 2.464303910e-03f,
+2.456150004e-03f, 2.447992256e-03f, 2.439830679e-03f, 2.431665290e-03f, 2.423496100e-03f, 2.415323126e-03f, 2.407146381e-03f, 2.398965880e-03f, 2.390781637e-03f, 2.382593666e-03f,
+2.374401981e-03f, 2.366206597e-03f, 2.358007529e-03f, 2.349804790e-03f, 2.341598395e-03f, 2.333388359e-03f, 2.325174695e-03f, 2.316957418e-03f, 2.308736543e-03f, 2.300512083e-03f,
+2.292284054e-03f, 2.284052469e-03f, 2.275817343e-03f, 2.267578691e-03f, 2.259336526e-03f, 2.251090864e-03f, 2.242841718e-03f, 2.234589104e-03f, 2.226333034e-03f, 2.218073525e-03f,
+2.209810590e-03f, 2.201544244e-03f, 2.193274502e-03f, 2.185001377e-03f, 2.176724884e-03f, 2.168445038e-03f, 2.160161853e-03f, 2.151875343e-03f, 2.143585524e-03f, 2.135292409e-03f,
+2.126996014e-03f, 2.118696351e-03f, 2.110393437e-03f, 2.102087286e-03f, 2.093777912e-03f, 2.085465329e-03f, 2.077149552e-03f, 2.068830596e-03f, 2.060508476e-03f, 2.052183205e-03f,
+2.043854798e-03f, 2.035523270e-03f, 2.027188635e-03f, 2.018850908e-03f, 2.010510104e-03f, 2.002166237e-03f, 1.993819321e-03f, 1.985469372e-03f, 1.977116403e-03f, 1.968760430e-03f,
+1.960401467e-03f, 1.952039528e-03f, 1.943674628e-03f, 1.935306782e-03f, 1.926936004e-03f, 1.918562309e-03f, 1.910185712e-03f, 1.901806227e-03f, 1.893423869e-03f, 1.885038652e-03f,
+1.876650591e-03f, 1.868259701e-03f, 1.859865996e-03f, 1.851469491e-03f, 1.843070200e-03f, 1.834668139e-03f, 1.826263322e-03f, 1.817855763e-03f, 1.809445478e-03f, 1.801032480e-03f,
+1.792616785e-03f, 1.784198407e-03f, 1.775777362e-03f, 1.767353662e-03f, 1.758927324e-03f, 1.750498362e-03f, 1.742066791e-03f, 1.733632625e-03f, 1.725195879e-03f, 1.716756568e-03f,
+1.708314706e-03f, 1.699870308e-03f, 1.691423390e-03f, 1.682973965e-03f, 1.674522048e-03f, 1.666067655e-03f, 1.657610799e-03f, 1.649151496e-03f, 1.640689760e-03f, 1.632225606e-03f,
+1.623759049e-03f, 1.615290103e-03f, 1.606818784e-03f, 1.598345105e-03f, 1.589869083e-03f, 1.581390731e-03f, 1.572910064e-03f, 1.564427097e-03f, 1.555941846e-03f, 1.547454323e-03f,
+1.538964546e-03f, 1.530472527e-03f, 1.521978282e-03f, 1.513481826e-03f, 1.504983174e-03f, 1.496482340e-03f, 1.487979339e-03f, 1.479474186e-03f, 1.470966896e-03f, 1.462457483e-03f,
+1.453945963e-03f, 1.445432349e-03f, 1.436916658e-03f, 1.428398904e-03f, 1.419879101e-03f, 1.411357264e-03f, 1.402833409e-03f, 1.394307550e-03f, 1.385779702e-03f, 1.377249879e-03f,
+1.368718097e-03f, 1.360184371e-03f, 1.351648715e-03f, 1.343111144e-03f, 1.334571672e-03f, 1.326030316e-03f, 1.317487089e-03f, 1.308942007e-03f, 1.300395084e-03f, 1.291846336e-03f,
+1.283295776e-03f, 1.274743421e-03f, 1.266189284e-03f, 1.257633381e-03f, 1.249075726e-03f, 1.240516335e-03f, 1.231955223e-03f, 1.223392403e-03f, 1.214827891e-03f, 1.206261703e-03f,
+1.197693852e-03f, 1.189124354e-03f, 1.180553224e-03f, 1.171980476e-03f, 1.163406125e-03f, 1.154830187e-03f, 1.146252676e-03f, 1.137673607e-03f, 1.129092995e-03f, 1.120510854e-03f,
+1.111927201e-03f, 1.103342049e-03f, 1.094755414e-03f, 1.086167311e-03f, 1.077577754e-03f, 1.068986758e-03f, 1.060394338e-03f, 1.051800510e-03f, 1.043205287e-03f, 1.034608686e-03f,
+1.026010721e-03f, 1.017411406e-03f, 1.008810757e-03f, 1.000208789e-03f, 9.916055171e-04f, 9.830009553e-04f, 9.743951189e-04f, 9.657880230e-04f, 9.571796825e-04f, 9.485701123e-04f,
+9.399593273e-04f, 9.313473425e-04f, 9.227341728e-04f, 9.141198331e-04f, 9.055043385e-04f, 8.968877038e-04f, 8.882699440e-04f, 8.796510740e-04f, 8.710311089e-04f, 8.624100634e-04f,
+8.537879527e-04f, 8.451647915e-04f, 8.365405950e-04f, 8.279153780e-04f, 8.192891555e-04f, 8.106619424e-04f, 8.020337537e-04f, 7.934046044e-04f, 7.847745094e-04f, 7.761434837e-04f,
+7.675115423e-04f, 7.588787000e-04f, 7.502449719e-04f, 7.416103729e-04f, 7.329749180e-04f, 7.243386221e-04f, 7.157015003e-04f, 7.070635674e-04f, 6.984248385e-04f, 6.897853284e-04f,
+6.811450523e-04f, 6.725040250e-04f, 6.638622615e-04f, 6.552197768e-04f, 6.465765858e-04f, 6.379327036e-04f, 6.292881450e-04f, 6.206429251e-04f, 6.119970588e-04f, 6.033505612e-04f,
+5.947034471e-04f, 5.860557315e-04f, 5.774074295e-04f, 5.687585560e-04f, 5.601091259e-04f, 5.514591542e-04f, 5.428086560e-04f, 5.341576462e-04f, 5.255061397e-04f, 5.168541515e-04f,
+5.082016966e-04f, 4.995487900e-04f, 4.908954467e-04f, 4.822416816e-04f, 4.735875097e-04f, 4.649329459e-04f, 4.562780053e-04f, 4.476227029e-04f, 4.389670535e-04f, 4.303110722e-04f,
+4.216547739e-04f, 4.129981736e-04f, 4.043412864e-04f, 3.956841270e-04f, 3.870267107e-04f, 3.783690522e-04f, 3.697111666e-04f, 3.610530688e-04f, 3.523947739e-04f, 3.437362967e-04f,
+3.350776523e-04f, 3.264188557e-04f, 3.177599217e-04f, 3.091008654e-04f, 3.004417017e-04f, 2.917824456e-04f, 2.831231121e-04f, 2.744637162e-04f, 2.658042727e-04f, 2.571447967e-04f,
+2.484853031e-04f, 2.398258070e-04f, 2.311663232e-04f, 2.225068667e-04f, 2.138474525e-04f, 2.051880955e-04f, 1.965288107e-04f, 1.878696131e-04f, 1.792105177e-04f, 1.705515393e-04f,
+1.618926929e-04f, 1.532339935e-04f, 1.445754561e-04f, 1.359170955e-04f, 1.272589268e-04f, 1.186009649e-04f, 1.099432248e-04f, 1.012857214e-04f, 9.262846957e-05f, 8.397148437e-05f,
+7.531478072e-05f, 6.665837354e-05f, 5.800227779e-05f, 4.934650841e-05f, 4.069108034e-05f, 3.203600852e-05f, 2.338130789e-05f, 1.472699338e-05f, 6.073079921e-06f, -2.580417543e-06f,
+-1.123348408e-05f, -1.988610477e-05f, -2.853826467e-05f, -3.718994886e-05f, -4.584114242e-05f, -5.449183041e-05f, -6.314199792e-05f, -7.179163003e-05f, -8.044071181e-05f, -8.908922835e-05f,
+-9.773716472e-05f, -1.063845060e-04f, -1.150312373e-04f, -1.236773438e-04f, -1.323228104e-04f, -1.409676223e-04f, -1.496117646e-04f, -1.582552223e-04f, -1.668979807e-04f, -1.755400247e-04f,
+-1.841813395e-04f, -1.928219102e-04f, -2.014617218e-04f, -2.101007596e-04f, -2.187390086e-04f, -2.273764539e-04f, -2.360130806e-04f, -2.446488739e-04f, -2.532838188e-04f, -2.619179006e-04f,
+-2.705511043e-04f, -2.791834150e-04f, -2.878148178e-04f, -2.964452980e-04f, -3.050748406e-04f, -3.137034308e-04f, -3.223310537e-04f, -3.309576944e-04f, -3.395833382e-04f, -3.482079700e-04f,
+-3.568315751e-04f, -3.654541387e-04f, -3.740756458e-04f, -3.826960817e-04f, -3.913154315e-04f, -3.999336803e-04f, -4.085508133e-04f, -4.171668158e-04f, -4.257816727e-04f, -4.343953694e-04f,
+-4.430078910e-04f, -4.516192226e-04f, -4.602293495e-04f, -4.688382568e-04f, -4.774459298e-04f, -4.860523535e-04f, -4.946575132e-04f, -5.032613942e-04f, -5.118639815e-04f, -5.204652603e-04f,
+-5.290652160e-04f, -5.376638336e-04f, -5.462610984e-04f, -5.548569957e-04f, -5.634515105e-04f, -5.720446282e-04f, -5.806363340e-04f, -5.892266130e-04f, -5.978154506e-04f, -6.064028319e-04f,
+-6.149887421e-04f, -6.235731666e-04f, -6.321560905e-04f, -6.407374991e-04f, -6.493173777e-04f, -6.578957114e-04f, -6.664724856e-04f, -6.750476854e-04f, -6.836212963e-04f, -6.921933033e-04f,
+-7.007636919e-04f, -7.093324472e-04f, -7.178995545e-04f, -7.264649992e-04f, -7.350287664e-04f, -7.435908416e-04f, -7.521512098e-04f, -7.607098566e-04f, -7.692667671e-04f, -7.778219267e-04f,
+-7.863753206e-04f, -7.949269342e-04f, -8.034767528e-04f, -8.120247616e-04f, -8.205709461e-04f, -8.291152915e-04f, -8.376577832e-04f, -8.461984065e-04f, -8.547371467e-04f, -8.632739891e-04f,
+-8.718089192e-04f, -8.803419222e-04f, -8.888729835e-04f, -8.974020885e-04f, -9.059292225e-04f, -9.144543709e-04f, -9.229775190e-04f, -9.314986523e-04f, -9.400177560e-04f, -9.485348156e-04f,
+-9.570498165e-04f, -9.655627440e-04f, -9.740735835e-04f, -9.825823205e-04f, -9.910889403e-04f, -9.995934284e-04f, -1.008095770e-03f, -1.016595951e-03f, -1.025093956e-03f, -1.033589771e-03f,
+-1.042083382e-03f, -1.050574773e-03f, -1.059063931e-03f, -1.067550840e-03f, -1.076035486e-03f, -1.084517855e-03f, -1.092997931e-03f, -1.101475702e-03f, -1.109951151e-03f, -1.118424264e-03f,
+-1.126895028e-03f, -1.135363426e-03f, -1.143829446e-03f, -1.152293072e-03f, -1.160754290e-03f, -1.169213085e-03f, -1.177669442e-03f, -1.186123348e-03f, -1.194574788e-03f, -1.203023748e-03f,
+-1.211470212e-03f, -1.219914166e-03f, -1.228355597e-03f, -1.236794489e-03f, -1.245230828e-03f, -1.253664600e-03f, -1.262095789e-03f, -1.270524383e-03f, -1.278950365e-03f, -1.287373723e-03f,
+-1.295794440e-03f, -1.304212504e-03f, -1.312627899e-03f, -1.321040612e-03f, -1.329450627e-03f, -1.337857931e-03f, -1.346262508e-03f, -1.354664345e-03f, -1.363063427e-03f, -1.371459740e-03f,
+-1.379853270e-03f, -1.388244001e-03f, -1.396631920e-03f, -1.405017013e-03f, -1.413399264e-03f, -1.421778660e-03f, -1.430155187e-03f, -1.438528829e-03f, -1.446899573e-03f, -1.455267405e-03f,
+-1.463632309e-03f, -1.471994272e-03f, -1.480353280e-03f, -1.488709317e-03f, -1.497062371e-03f, -1.505412426e-03f, -1.513759468e-03f, -1.522103483e-03f, -1.530444457e-03f, -1.538782375e-03f,
+-1.547117223e-03f, -1.555448988e-03f, -1.563777654e-03f, -1.572103207e-03f, -1.580425634e-03f, -1.588744920e-03f, -1.597061050e-03f, -1.605374011e-03f, -1.613683788e-03f, -1.621990368e-03f,
+-1.630293735e-03f, -1.638593876e-03f, -1.646890777e-03f, -1.655184423e-03f, -1.663474801e-03f, -1.671761895e-03f, -1.680045692e-03f, -1.688326178e-03f, -1.696603339e-03f, -1.704877160e-03f,
+-1.713147628e-03f, -1.721414727e-03f, -1.729678445e-03f, -1.737938767e-03f, -1.746195679e-03f, -1.754449166e-03f, -1.762699215e-03f, -1.770945812e-03f, -1.779188942e-03f, -1.787428591e-03f,
+-1.795664746e-03f, -1.803897393e-03f, -1.812126516e-03f, -1.820352103e-03f, -1.828574139e-03f, -1.836792610e-03f, -1.845007502e-03f, -1.853218802e-03f, -1.861426494e-03f, -1.869630566e-03f,
+-1.877831002e-03f, -1.886027790e-03f, -1.894220915e-03f, -1.902410363e-03f, -1.910596120e-03f, -1.918778172e-03f, -1.926956506e-03f, -1.935131107e-03f, -1.943301961e-03f, -1.951469055e-03f,
+-1.959632374e-03f, -1.967791905e-03f, -1.975947633e-03f, -1.984099545e-03f, -1.992247627e-03f, -2.000391865e-03f, -2.008532245e-03f, -2.016668754e-03f, -2.024801376e-03f, -2.032930099e-03f,
+-2.041054909e-03f, -2.049175792e-03f, -2.057292733e-03f, -2.065405720e-03f, -2.073514738e-03f, -2.081619773e-03f, -2.089720812e-03f, -2.097817841e-03f, -2.105910846e-03f, -2.113999813e-03f,
+-2.122084729e-03f, -2.130165580e-03f, -2.138242351e-03f, -2.146315030e-03f, -2.154383602e-03f, -2.162448054e-03f, -2.170508372e-03f, -2.178564542e-03f, -2.186616551e-03f, -2.194664384e-03f,
+-2.202708029e-03f, -2.210747471e-03f, -2.218782697e-03f, -2.226813693e-03f, -2.234840445e-03f, -2.242862941e-03f, -2.250881165e-03f, -2.258895105e-03f, -2.266904747e-03f, -2.274910076e-03f,
+-2.282911081e-03f, -2.290907746e-03f, -2.298900059e-03f, -2.306888006e-03f, -2.314871572e-03f, -2.322850746e-03f, -2.330825512e-03f, -2.338795858e-03f, -2.346761770e-03f, -2.354723234e-03f,
+-2.362680237e-03f, -2.370632765e-03f, -2.378580805e-03f, -2.386524344e-03f, -2.394463367e-03f, -2.402397861e-03f, -2.410327813e-03f, -2.418253210e-03f, -2.426174037e-03f, -2.434090282e-03f,
+-2.442001930e-03f, -2.449908969e-03f, -2.457811386e-03f, -2.465709165e-03f, -2.473602295e-03f, -2.481490762e-03f, -2.489374552e-03f, -2.497253652e-03f, -2.505128049e-03f, -2.512997729e-03f,
+-2.520862679e-03f, -2.528722885e-03f, -2.536578334e-03f, -2.544429014e-03f, -2.552274909e-03f, -2.560116008e-03f, -2.567952297e-03f, -2.575783763e-03f, -2.583610391e-03f, -2.591432170e-03f,
+-2.599249085e-03f, -2.607061124e-03f, -2.614868273e-03f, -2.622670519e-03f, -2.630467848e-03f, -2.638260248e-03f, -2.646047705e-03f, -2.653830207e-03f, -2.661607739e-03f, -2.669380288e-03f,
+-2.677147842e-03f, -2.684910388e-03f, -2.692667911e-03f, -2.700420400e-03f, -2.708167840e-03f, -2.715910219e-03f, -2.723647523e-03f, -2.731379740e-03f, -2.739106856e-03f, -2.746828858e-03f,
+-2.754545733e-03f, -2.762257468e-03f, -2.769964051e-03f, -2.777665467e-03f, -2.785361704e-03f, -2.793052749e-03f, -2.800738588e-03f, -2.808419209e-03f, -2.816094599e-03f, -2.823764745e-03f,
+-2.831429634e-03f, -2.839089252e-03f, -2.846743586e-03f, -2.854392625e-03f, -2.862036355e-03f, -2.869674762e-03f, -2.877307834e-03f, -2.884935559e-03f, -2.892557922e-03f, -2.900174912e-03f,
+-2.907786515e-03f, -2.915392718e-03f, -2.922993509e-03f, -2.930588874e-03f, -2.938178802e-03f, -2.945763278e-03f, -2.953342291e-03f, -2.960915826e-03f, -2.968483873e-03f, -2.976046417e-03f,
+-2.983603445e-03f, -2.991154946e-03f, -2.998700907e-03f, -3.006241313e-03f, -3.013776154e-03f, -3.021305416e-03f, -3.028829086e-03f, -3.036347151e-03f, -3.043859599e-03f, -3.051366418e-03f,
+-3.058867594e-03f, -3.066363115e-03f, -3.073852968e-03f, -3.081337140e-03f, -3.088815620e-03f, -3.096288393e-03f, -3.103755448e-03f, -3.111216772e-03f, -3.118672352e-03f, -3.126122176e-03f,
+-3.133566231e-03f, -3.141004504e-03f, -3.148436984e-03f, -3.155863657e-03f, -3.163284511e-03f, -3.170699533e-03f, -3.178108711e-03f, -3.185512032e-03f, -3.192909484e-03f, -3.200301054e-03f,
+-3.207686730e-03f, -3.215066499e-03f, -3.222440350e-03f, -3.229808268e-03f, -3.237170243e-03f, -3.244526261e-03f, -3.251876311e-03f, -3.259220379e-03f, -3.266558453e-03f, -3.273890521e-03f,
+-3.281216571e-03f, -3.288536591e-03f, -3.295850567e-03f, -3.303158487e-03f, -3.310460340e-03f, -3.317756113e-03f, -3.325045793e-03f, -3.332329368e-03f, -3.339606827e-03f, -3.346878156e-03f,
+-3.354143344e-03f, -3.361402378e-03f, -3.368655246e-03f, -3.375901935e-03f, -3.383142434e-03f, -3.390376731e-03f, -3.397604812e-03f, -3.404826667e-03f, -3.412042282e-03f, -3.419251646e-03f,
+-3.426454746e-03f, -3.433651570e-03f, -3.440842107e-03f, -3.448026344e-03f, -3.455204269e-03f, -3.462375869e-03f, -3.469541134e-03f, -3.476700050e-03f, -3.483852606e-03f, -3.490998789e-03f,
+-3.498138589e-03f, -3.505271991e-03f, -3.512398985e-03f, -3.519519559e-03f, -3.526633700e-03f, -3.533741397e-03f, -3.540842638e-03f, -3.547937410e-03f, -3.555025702e-03f, -3.562107502e-03f,
+-3.569182797e-03f, -3.576251577e-03f, -3.583313829e-03f, -3.590369541e-03f, -3.597418701e-03f, -3.604461298e-03f, -3.611497319e-03f, -3.618526753e-03f, -3.625549588e-03f, -3.632565813e-03f,
+-3.639575414e-03f, -3.646578382e-03f, -3.653574703e-03f, -3.660564366e-03f, -3.667547359e-03f, -3.674523671e-03f, -3.681493290e-03f, -3.688456204e-03f, -3.695412402e-03f, -3.702361871e-03f,
+-3.709304600e-03f, -3.716240577e-03f, -3.723169792e-03f, -3.730092231e-03f, -3.737007884e-03f, -3.743916739e-03f, -3.750818784e-03f, -3.757714007e-03f, -3.764602398e-03f, -3.771483944e-03f,
+-3.778358635e-03f, -3.785226457e-03f, -3.792087401e-03f, -3.798941454e-03f, -3.805788605e-03f, -3.812628842e-03f, -3.819462154e-03f, -3.826288529e-03f, -3.833107957e-03f, -3.839920425e-03f,
+-3.846725922e-03f, -3.853524437e-03f, -3.860315958e-03f, -3.867100474e-03f, -3.873877974e-03f, -3.880648445e-03f, -3.887411878e-03f, -3.894168260e-03f, -3.900917580e-03f, -3.907659827e-03f,
+-3.914394989e-03f, -3.921123056e-03f, -3.927844016e-03f, -3.934557857e-03f, -3.941264569e-03f, -3.947964140e-03f, -3.954656559e-03f, -3.961341815e-03f, -3.968019896e-03f, -3.974690792e-03f,
+-3.981354491e-03f, -3.988010982e-03f, -3.994660254e-03f, -4.001302295e-03f, -4.007937096e-03f, -4.014564643e-03f, -4.021184928e-03f, -4.027797937e-03f, -4.034403661e-03f, -4.041002089e-03f,
+-4.047593208e-03f, -4.054177009e-03f, -4.060753479e-03f, -4.067322609e-03f, -4.073884387e-03f, -4.080438802e-03f, -4.086985844e-03f, -4.093525501e-03f, -4.100057762e-03f, -4.106582616e-03f,
+-4.113100053e-03f, -4.119610062e-03f, -4.126112631e-03f, -4.132607750e-03f, -4.139095408e-03f, -4.145575595e-03f, -4.152048298e-03f, -4.158513509e-03f, -4.164971215e-03f, -4.171421405e-03f,
+-4.177864070e-03f, -4.184299199e-03f, -4.190726780e-03f, -4.197146802e-03f, -4.203559256e-03f, -4.209964131e-03f, -4.216361415e-03f, -4.222751099e-03f, -4.229133170e-03f, -4.235507620e-03f,
+-4.241874437e-03f, -4.248233610e-03f, -4.254585129e-03f, -4.260928984e-03f, -4.267265163e-03f, -4.273593656e-03f, -4.279914453e-03f, -4.286227543e-03f, -4.292532916e-03f, -4.298830560e-03f,
+-4.305120466e-03f, -4.311402623e-03f, -4.317677021e-03f, -4.323943648e-03f, -4.330202496e-03f, -4.336453552e-03f, -4.342696807e-03f, -4.348932251e-03f, -4.355159873e-03f, -4.361379662e-03f,
+-4.367591608e-03f, -4.373795702e-03f, -4.379991932e-03f, -4.386180288e-03f, -4.392360760e-03f, -4.398533338e-03f, -4.404698012e-03f, -4.410854770e-03f, -4.417003603e-03f, -4.423144501e-03f,
+-4.429277453e-03f, -4.435402450e-03f, -4.441519481e-03f, -4.447628535e-03f, -4.453729603e-03f, -4.459822675e-03f, -4.465907740e-03f, -4.471984788e-03f, -4.478053809e-03f, -4.484114794e-03f,
+-4.490167731e-03f, -4.496212612e-03f, -4.502249425e-03f, -4.508278161e-03f, -4.514298810e-03f, -4.520311362e-03f, -4.526315807e-03f, -4.532312135e-03f, -4.538300335e-03f, -4.544280399e-03f,
+-4.550252315e-03f, -4.556216075e-03f, -4.562171667e-03f, -4.568119083e-03f, -4.574058313e-03f, -4.579989346e-03f, -4.585912173e-03f, -4.591826784e-03f, -4.597733169e-03f, -4.603631318e-03f,
+-4.609521221e-03f, -4.615402870e-03f, -4.621276253e-03f, -4.627141362e-03f, -4.632998186e-03f, -4.638846716e-03f, -4.644686942e-03f, -4.650518854e-03f, -4.656342443e-03f, -4.662157699e-03f,
+-4.667964613e-03f, -4.673763175e-03f, -4.679553374e-03f, -4.685335203e-03f, -4.691108650e-03f, -4.696873707e-03f, -4.702630364e-03f, -4.708378611e-03f, -4.714118440e-03f, -4.719849839e-03f,
+-4.725572801e-03f, -4.731287315e-03f, -4.736993371e-03f, -4.742690962e-03f, -4.748380076e-03f, -4.754060705e-03f, -4.759732840e-03f, -4.765396470e-03f, -4.771051587e-03f, -4.776698181e-03f,
+-4.782336243e-03f, -4.787965764e-03f, -4.793586733e-03f, -4.799199143e-03f, -4.804802983e-03f, -4.810398245e-03f, -4.815984918e-03f, -4.821562995e-03f, -4.827132465e-03f, -4.832693320e-03f,
+-4.838245550e-03f, -4.843789147e-03f, -4.849324100e-03f, -4.854850401e-03f, -4.860368041e-03f, -4.865877011e-03f, -4.871377301e-03f, -4.876868902e-03f, -4.882351806e-03f, -4.887826003e-03f,
+-4.893291485e-03f, -4.898748242e-03f, -4.904196265e-03f, -4.909635545e-03f, -4.915066074e-03f, -4.920487842e-03f, -4.925900841e-03f, -4.931305061e-03f, -4.936700494e-03f, -4.942087130e-03f,
+-4.947464962e-03f, -4.952833979e-03f, -4.958194174e-03f, -4.963545537e-03f, -4.968888059e-03f, -4.974221732e-03f, -4.979546547e-03f, -4.984862496e-03f, -4.990169569e-03f, -4.995467757e-03f,
+-5.000757052e-03f, -5.006037446e-03f, -5.011308929e-03f, -5.016571494e-03f, -5.021825130e-03f, -5.027069830e-03f, -5.032305586e-03f, -5.037532387e-03f, -5.042750227e-03f, -5.047959095e-03f,
+-5.053158984e-03f, -5.058349886e-03f, -5.063531791e-03f, -5.068704691e-03f, -5.073868578e-03f, -5.079023443e-03f, -5.084169277e-03f, -5.089306073e-03f, -5.094433822e-03f, -5.099552515e-03f,
+-5.104662143e-03f, -5.109762700e-03f, -5.114854176e-03f, -5.119936562e-03f, -5.125009851e-03f, -5.130074035e-03f, -5.135129104e-03f, -5.140175051e-03f, -5.145211867e-03f, -5.150239545e-03f,
+-5.155258075e-03f, -5.160267450e-03f, -5.165267661e-03f, -5.170258701e-03f, -5.175240560e-03f, -5.180213232e-03f, -5.185176707e-03f, -5.190130978e-03f, -5.195076037e-03f, -5.200011875e-03f,
+-5.204938484e-03f, -5.209855857e-03f, -5.214763985e-03f, -5.219662861e-03f, -5.224552475e-03f, -5.229432821e-03f, -5.234303890e-03f, -5.239165675e-03f, -5.244018166e-03f, -5.248861358e-03f,
+-5.253695241e-03f, -5.258519807e-03f, -5.263335049e-03f, -5.268140960e-03f, -5.272937530e-03f, -5.277724752e-03f, -5.282502619e-03f, -5.287271123e-03f, -5.292030255e-03f, -5.296780009e-03f,
+-5.301520375e-03f, -5.306251348e-03f, -5.310972918e-03f, -5.315685079e-03f, -5.320387822e-03f, -5.325081140e-03f, -5.329765025e-03f, -5.334439470e-03f, -5.339104467e-03f, -5.343760008e-03f,
+-5.348406086e-03f, -5.353042693e-03f, -5.357669822e-03f, -5.362287465e-03f, -5.366895614e-03f, -5.371494263e-03f, -5.376083404e-03f, -5.380663029e-03f, -5.385233130e-03f, -5.389793701e-03f,
+-5.394344734e-03f, -5.398886221e-03f, -5.403418156e-03f, -5.407940530e-03f, -5.412453337e-03f, -5.416956569e-03f, -5.421450219e-03f, -5.425934279e-03f, -5.430408743e-03f, -5.434873603e-03f,
+-5.439328851e-03f, -5.443774481e-03f, -5.448210485e-03f, -5.452636856e-03f, -5.457053588e-03f, -5.461460672e-03f, -5.465858102e-03f, -5.470245870e-03f, -5.474623970e-03f, -5.478992394e-03f,
+-5.483351135e-03f, -5.487700187e-03f, -5.492039541e-03f, -5.496369192e-03f, -5.500689132e-03f, -5.504999355e-03f, -5.509299852e-03f, -5.513590618e-03f, -5.517871645e-03f, -5.522142926e-03f,
+-5.526404455e-03f, -5.530656225e-03f, -5.534898228e-03f, -5.539130458e-03f, -5.543352908e-03f, -5.547565572e-03f, -5.551768442e-03f, -5.555961511e-03f, -5.560144774e-03f, -5.564318222e-03f,
+-5.568481850e-03f, -5.572635651e-03f, -5.576779618e-03f, -5.580913744e-03f, -5.585038023e-03f, -5.589152448e-03f, -5.593257013e-03f, -5.597351710e-03f, -5.601436533e-03f, -5.605511476e-03f,
+-5.609576533e-03f, -5.613631695e-03f, -5.617676958e-03f, -5.621712315e-03f, -5.625737758e-03f, -5.629753282e-03f, -5.633758880e-03f, -5.637754546e-03f, -5.641740273e-03f, -5.645716056e-03f,
+-5.649681886e-03f, -5.653637759e-03f, -5.657583668e-03f, -5.661519606e-03f, -5.665445567e-03f, -5.669361545e-03f, -5.673267534e-03f, -5.677163527e-03f, -5.681049518e-03f, -5.684925501e-03f,
+-5.688791470e-03f, -5.692647418e-03f, -5.696493340e-03f, -5.700329229e-03f, -5.704155078e-03f, -5.707970883e-03f, -5.711776637e-03f, -5.715572333e-03f, -5.719357966e-03f, -5.723133530e-03f,
+-5.726899018e-03f, -5.730654425e-03f, -5.734399744e-03f, -5.738134970e-03f, -5.741860097e-03f, -5.745575118e-03f, -5.749280029e-03f, -5.752974822e-03f, -5.756659492e-03f, -5.760334033e-03f,
+-5.763998440e-03f, -5.767652706e-03f, -5.771296826e-03f, -5.774930793e-03f, -5.778554603e-03f, -5.782168249e-03f, -5.785771726e-03f, -5.789365027e-03f, -5.792948148e-03f, -5.796521082e-03f,
+-5.800083824e-03f, -5.803636367e-03f, -5.807178708e-03f, -5.810710839e-03f, -5.814232756e-03f, -5.817744452e-03f, -5.821245922e-03f, -5.824737161e-03f, -5.828218163e-03f, -5.831688923e-03f,
+-5.835149434e-03f, -5.838599692e-03f, -5.842039691e-03f, -5.845469426e-03f, -5.848888891e-03f, -5.852298081e-03f, -5.855696991e-03f, -5.859085614e-03f, -5.862463946e-03f, -5.865831982e-03f,
+-5.869189716e-03f, -5.872537142e-03f, -5.875874256e-03f, -5.879201053e-03f, -5.882517526e-03f, -5.885823671e-03f, -5.889119483e-03f, -5.892404956e-03f, -5.895680086e-03f, -5.898944866e-03f,
+-5.902199293e-03f, -5.905443360e-03f, -5.908677064e-03f, -5.911900397e-03f, -5.915113357e-03f, -5.918315937e-03f, -5.921508132e-03f, -5.924689939e-03f, -5.927861350e-03f, -5.931022363e-03f,
+-5.934172971e-03f, -5.937313169e-03f, -5.940442954e-03f, -5.943562319e-03f, -5.946671261e-03f, -5.949769773e-03f, -5.952857852e-03f, -5.955935493e-03f, -5.959002690e-03f, -5.962059439e-03f,
+-5.965105735e-03f, -5.968141574e-03f, -5.971166950e-03f, -5.974181859e-03f, -5.977186297e-03f, -5.980180258e-03f, -5.983163738e-03f, -5.986136732e-03f, -5.989099236e-03f, -5.992051245e-03f,
+-5.994992755e-03f, -5.997923760e-03f, -6.000844257e-03f, -6.003754241e-03f, -6.006653707e-03f, -6.009542651e-03f, -6.012421068e-03f, -6.015288954e-03f, -6.018146305e-03f, -6.020993116e-03f,
+-6.023829382e-03f, -6.026655100e-03f, -6.029470264e-03f, -6.032274871e-03f, -6.035068917e-03f, -6.037852396e-03f, -6.040625305e-03f, -6.043387639e-03f, -6.046139394e-03f, -6.048880567e-03f,
+-6.051611152e-03f, -6.054331145e-03f, -6.057040543e-03f, -6.059739341e-03f, -6.062427535e-03f, -6.065105120e-03f, -6.067772094e-03f, -6.070428451e-03f, -6.073074188e-03f, -6.075709300e-03f,
+-6.078333784e-03f, -6.080947636e-03f, -6.083550850e-03f, -6.086143425e-03f, -6.088725355e-03f, -6.091296637e-03f, -6.093857266e-03f, -6.096407240e-03f, -6.098946553e-03f, -6.101475202e-03f,
+-6.103993184e-03f, -6.106500494e-03f, -6.108997129e-03f, -6.111483085e-03f, -6.113958357e-03f, -6.116422943e-03f, -6.118876839e-03f, -6.121320040e-03f, -6.123752543e-03f, -6.126174346e-03f,
+-6.128585442e-03f, -6.130985830e-03f, -6.133375506e-03f, -6.135754466e-03f, -6.138122706e-03f, -6.140480223e-03f, -6.142827013e-03f, -6.145163073e-03f, -6.147488399e-03f, -6.149802988e-03f,
+-6.152106836e-03f, -6.154399940e-03f, -6.156682296e-03f, -6.158953902e-03f, -6.161214753e-03f, -6.163464846e-03f, -6.165704178e-03f, -6.167932746e-03f, -6.170150545e-03f, -6.172357574e-03f,
+-6.174553828e-03f, -6.176739305e-03f, -6.178914001e-03f, -6.181077912e-03f, -6.183231036e-03f, -6.185373370e-03f, -6.187504910e-03f, -6.189625653e-03f, -6.191735597e-03f, -6.193834737e-03f,
+-6.195923071e-03f, -6.198000595e-03f, -6.200067308e-03f, -6.202123205e-03f, -6.204168283e-03f, -6.206202541e-03f, -6.208225973e-03f, -6.210238579e-03f, -6.212240354e-03f, -6.214231296e-03f,
+-6.216211402e-03f, -6.218180669e-03f, -6.220139094e-03f, -6.222086675e-03f, -6.224023407e-03f, -6.225949290e-03f, -6.227864319e-03f, -6.229768493e-03f, -6.231661807e-03f, -6.233544261e-03f,
+-6.235415850e-03f, -6.237276572e-03f, -6.239126425e-03f, -6.240965406e-03f, -6.242793512e-03f, -6.244610740e-03f, -6.246417088e-03f, -6.248212554e-03f, -6.249997134e-03f, -6.251770827e-03f,
+-6.253533630e-03f, -6.255285539e-03f, -6.257026554e-03f, -6.258756670e-03f, -6.260475887e-03f, -6.262184201e-03f, -6.263881610e-03f, -6.265568111e-03f, -6.267243702e-03f, -6.268908382e-03f,
+-6.270562147e-03f, -6.272204995e-03f, -6.273836923e-03f, -6.275457931e-03f, -6.277068015e-03f, -6.278667172e-03f, -6.280255402e-03f, -6.281832701e-03f, -6.283399068e-03f, -6.284954500e-03f,
+-6.286498995e-03f, -6.288032551e-03f, -6.289555166e-03f, -6.291066838e-03f, -6.292567565e-03f, -6.294057344e-03f, -6.295536174e-03f, -6.297004052e-03f, -6.298460977e-03f, -6.299906947e-03f,
+-6.301341960e-03f, -6.302766013e-03f, -6.304179105e-03f, -6.305581234e-03f, -6.306972398e-03f, -6.308352595e-03f, -6.309721823e-03f, -6.311080081e-03f, -6.312427367e-03f, -6.313763678e-03f,
+-6.315089014e-03f, -6.316403372e-03f, -6.317706751e-03f, -6.318999149e-03f, -6.320280564e-03f, -6.321550994e-03f, -6.322810439e-03f, -6.324058895e-03f, -6.325296363e-03f, -6.326522839e-03f,
+-6.327738323e-03f, -6.328942813e-03f, -6.330136308e-03f, -6.331318805e-03f, -6.332490303e-03f, -6.333650802e-03f, -6.334800299e-03f, -6.335938793e-03f, -6.337066282e-03f, -6.338182766e-03f,
+-6.339288242e-03f, -6.340382710e-03f, -6.341466168e-03f, -6.342538615e-03f, -6.343600049e-03f, -6.344650469e-03f, -6.345689874e-03f, -6.346718262e-03f, -6.347735633e-03f, -6.348741985e-03f,
+-6.349737317e-03f, -6.350721628e-03f, -6.351694916e-03f, -6.352657181e-03f, -6.353608421e-03f, -6.354548636e-03f, -6.355477823e-03f, -6.356395983e-03f, -6.357303114e-03f, -6.358199215e-03f,
+-6.359084284e-03f, -6.359958322e-03f, -6.360821327e-03f, -6.361673298e-03f, -6.362514235e-03f, -6.363344135e-03f, -6.364162999e-03f, -6.364970826e-03f, -6.365767614e-03f, -6.366553363e-03f,
+-6.367328072e-03f, -6.368091740e-03f, -6.368844367e-03f, -6.369585952e-03f, -6.370316493e-03f, -6.371035991e-03f, -6.371744444e-03f, -6.372441852e-03f, -6.373128214e-03f, -6.373803530e-03f,
+-6.374467799e-03f, -6.375121020e-03f, -6.375763193e-03f, -6.376394317e-03f, -6.377014391e-03f, -6.377623416e-03f, -6.378221391e-03f, -6.378808314e-03f, -6.379384186e-03f, -6.379949007e-03f,
+-6.380502775e-03f, -6.381045490e-03f, -6.381577152e-03f, -6.382097761e-03f, -6.382607317e-03f, -6.383105818e-03f, -6.383593264e-03f, -6.384069656e-03f, -6.384534993e-03f, -6.384989275e-03f,
+-6.385432501e-03f, -6.385864671e-03f, -6.386285786e-03f, -6.386695844e-03f, -6.387094846e-03f, -6.387482792e-03f, -6.387859681e-03f, -6.388225513e-03f, -6.388580289e-03f, -6.388924008e-03f,
+-6.389256670e-03f, -6.389578275e-03f, -6.389888823e-03f, -6.390188315e-03f, -6.390476749e-03f, -6.390754127e-03f, -6.391020447e-03f, -6.391275712e-03f, -6.391519919e-03f, -6.391753070e-03f,
+-6.391975165e-03f, -6.392186204e-03f, -6.392386187e-03f, -6.392575114e-03f, -6.392752985e-03f, -6.392919801e-03f, -6.393075562e-03f, -6.393220268e-03f, -6.393353920e-03f, -6.393476518e-03f,
+-6.393588061e-03f, -6.393688552e-03f, -6.393777989e-03f, -6.393856373e-03f, -6.393923705e-03f, -6.393979985e-03f, -6.394025214e-03f, -6.394059392e-03f, -6.394082519e-03f, -6.394094596e-03f,
+-6.394095624e-03f, -6.394085603e-03f, -6.394064533e-03f, -6.394032416e-03f, -6.393989252e-03f, -6.393935041e-03f, -6.393869784e-03f, -6.393793481e-03f, -6.393706134e-03f, -6.393607744e-03f,
+-6.393498310e-03f, -6.393377833e-03f, -6.393246315e-03f, -6.393103756e-03f, -6.392950157e-03f, -6.392785518e-03f, -6.392609841e-03f, -6.392423126e-03f, -6.392225375e-03f, -6.392016587e-03f,
+-6.391796765e-03f, -6.391565908e-03f, -6.391324019e-03f, -6.391071097e-03f, -6.390807144e-03f, -6.390532161e-03f, -6.390246148e-03f, -6.389949108e-03f, -6.389641040e-03f, -6.389321946e-03f,
+-6.388991828e-03f, -6.388650685e-03f, -6.388298520e-03f, -6.387935333e-03f, -6.387561126e-03f, -6.387175900e-03f, -6.386779656e-03f, -6.386372395e-03f, -6.385954119e-03f, -6.385524829e-03f,
+-6.385084525e-03f, -6.384633210e-03f, -6.384170885e-03f, -6.383697550e-03f, -6.383213208e-03f, -6.382717860e-03f, -6.382211507e-03f, -6.381694151e-03f, -6.381165792e-03f, -6.380626433e-03f,
+-6.380076075e-03f, -6.379514720e-03f, -6.378942368e-03f, -6.378359022e-03f, -6.377764683e-03f, -6.377159352e-03f, -6.376543032e-03f, -6.375915723e-03f, -6.375277428e-03f, -6.374628148e-03f,
+-6.373967885e-03f, -6.373296640e-03f, -6.372614415e-03f, -6.371921212e-03f, -6.371217033e-03f, -6.370501879e-03f, -6.369775752e-03f, -6.369038653e-03f, -6.368290586e-03f, -6.367531551e-03f,
+-6.366761551e-03f, -6.365980586e-03f, -6.365188660e-03f, -6.364385774e-03f, -6.363571930e-03f, -6.362747130e-03f, -6.361911376e-03f, -6.361064670e-03f, -6.360207013e-03f, -6.359338409e-03f,
+-6.358458858e-03f, -6.357568364e-03f, -6.356666927e-03f, -6.355754551e-03f, -6.354831237e-03f, -6.353896987e-03f, -6.352951804e-03f, -6.351995690e-03f, -6.351028646e-03f, -6.350050676e-03f,
+-6.349061781e-03f, -6.348061964e-03f, -6.347051227e-03f, -6.346029571e-03f, -6.344997001e-03f, -6.343953517e-03f, -6.342899122e-03f, -6.341833819e-03f, -6.340757609e-03f, -6.339670496e-03f,
+-6.338572482e-03f, -6.337463568e-03f, -6.336343758e-03f, -6.335213055e-03f, -6.334071460e-03f, -6.332918975e-03f, -6.331755605e-03f, -6.330581350e-03f, -6.329396214e-03f, -6.328200200e-03f,
+-6.326993309e-03f, -6.325775545e-03f, -6.324546910e-03f, -6.323307407e-03f, -6.322057038e-03f, -6.320795806e-03f, -6.319523714e-03f, -6.318240765e-03f, -6.316946961e-03f, -6.315642306e-03f,
+-6.314326801e-03f, -6.313000450e-03f, -6.311663255e-03f, -6.310315220e-03f, -6.308956347e-03f, -6.307586639e-03f, -6.306206099e-03f, -6.304814731e-03f, -6.303412536e-03f, -6.301999518e-03f,
+-6.300575679e-03f, -6.299141024e-03f, -6.297695554e-03f, -6.296239274e-03f, -6.294772185e-03f, -6.293294291e-03f, -6.291805595e-03f, -6.290306100e-03f, -6.288795810e-03f, -6.287274727e-03f,
+-6.285742855e-03f, -6.284200196e-03f, -6.282646754e-03f, -6.281082533e-03f, -6.279507535e-03f, -6.277921764e-03f, -6.276325222e-03f, -6.274717914e-03f, -6.273099842e-03f, -6.271471010e-03f,
+-6.269831421e-03f, -6.268181079e-03f, -6.266519987e-03f, -6.264848148e-03f, -6.263165566e-03f, -6.261472244e-03f, -6.259768186e-03f, -6.258053395e-03f, -6.256327874e-03f, -6.254591628e-03f,
+-6.252844659e-03f, -6.251086972e-03f, -6.249318569e-03f, -6.247539454e-03f, -6.245749632e-03f, -6.243949105e-03f, -6.242137877e-03f, -6.240315952e-03f, -6.238483334e-03f, -6.236640026e-03f,
+-6.234786032e-03f, -6.232921355e-03f, -6.231046000e-03f, -6.229159970e-03f, -6.227263269e-03f, -6.225355901e-03f, -6.223437869e-03f, -6.221509178e-03f, -6.219569831e-03f, -6.217619833e-03f,
+-6.215659186e-03f, -6.213687895e-03f, -6.211705964e-03f, -6.209713397e-03f, -6.207710198e-03f, -6.205696371e-03f, -6.203671920e-03f, -6.201636848e-03f, -6.199591160e-03f, -6.197534860e-03f,
+-6.195467952e-03f, -6.193390440e-03f, -6.191302329e-03f, -6.189203621e-03f, -6.187094323e-03f, -6.184974436e-03f, -6.182843967e-03f, -6.180702919e-03f, -6.178551296e-03f, -6.176389102e-03f,
+-6.174216342e-03f, -6.172033020e-03f, -6.169839141e-03f, -6.167634708e-03f, -6.165419726e-03f, -6.163194200e-03f, -6.160958133e-03f, -6.158711530e-03f, -6.156454395e-03f, -6.154186734e-03f,
+-6.151908549e-03f, -6.149619847e-03f, -6.147320631e-03f, -6.145010905e-03f, -6.142690675e-03f, -6.140359944e-03f, -6.138018718e-03f, -6.135667000e-03f, -6.133304796e-03f, -6.130932110e-03f,
+-6.128548947e-03f, -6.126155311e-03f, -6.123751207e-03f, -6.121336640e-03f, -6.118911613e-03f, -6.116476133e-03f, -6.114030204e-03f, -6.111573830e-03f, -6.109107016e-03f, -6.106629767e-03f,
+-6.104142088e-03f, -6.101643984e-03f, -6.099135459e-03f, -6.096616519e-03f, -6.094087167e-03f, -6.091547410e-03f, -6.088997251e-03f, -6.086436696e-03f, -6.083865751e-03f, -6.081284418e-03f,
+-6.078692705e-03f, -6.076090615e-03f, -6.073478154e-03f, -6.070855327e-03f, -6.068222139e-03f, -6.065578594e-03f, -6.062924698e-03f, -6.060260457e-03f, -6.057585874e-03f, -6.054900956e-03f,
+-6.052205707e-03f, -6.049500132e-03f, -6.046784238e-03f, -6.044058028e-03f, -6.041321509e-03f, -6.038574685e-03f, -6.035817561e-03f, -6.033050144e-03f, -6.030272437e-03f, -6.027484448e-03f,
+-6.024686180e-03f, -6.021877639e-03f, -6.019058831e-03f, -6.016229761e-03f, -6.013390434e-03f, -6.010540856e-03f, -6.007681032e-03f, -6.004810967e-03f, -6.001930668e-03f, -5.999040139e-03f,
+-5.996139386e-03f, -5.993228415e-03f, -5.990307231e-03f, -5.987375840e-03f, -5.984434246e-03f, -5.981482457e-03f, -5.978520477e-03f, -5.975548312e-03f, -5.972565968e-03f, -5.969573449e-03f,
+-5.966570763e-03f, -5.963557915e-03f, -5.960534910e-03f, -5.957501754e-03f, -5.954458453e-03f, -5.951405013e-03f, -5.948341439e-03f, -5.945267737e-03f, -5.942183913e-03f, -5.939089973e-03f,
+-5.935985922e-03f, -5.932871767e-03f, -5.929747514e-03f, -5.926613167e-03f, -5.923468734e-03f, -5.920314220e-03f, -5.917149632e-03f, -5.913974974e-03f, -5.910790253e-03f, -5.907595475e-03f,
+-5.904390646e-03f, -5.901175773e-03f, -5.897950860e-03f, -5.894715915e-03f, -5.891470943e-03f, -5.888215950e-03f, -5.884950943e-03f, -5.881675927e-03f, -5.878390909e-03f, -5.875095895e-03f,
+-5.871790891e-03f, -5.868475904e-03f, -5.865150939e-03f, -5.861816003e-03f, -5.858471102e-03f, -5.855116242e-03f, -5.851751430e-03f, -5.848376671e-03f, -5.844991973e-03f, -5.841597342e-03f,
+-5.838192783e-03f, -5.834778304e-03f, -5.831353910e-03f, -5.827919609e-03f, -5.824475406e-03f, -5.821021308e-03f, -5.817557321e-03f, -5.814083452e-03f, -5.810599707e-03f, -5.807106094e-03f,
+-5.803602618e-03f, -5.800089285e-03f, -5.796566103e-03f, -5.793033078e-03f, -5.789490217e-03f, -5.785937526e-03f, -5.782375012e-03f, -5.778802682e-03f, -5.775220541e-03f, -5.771628598e-03f,
+-5.768026858e-03f, -5.764415328e-03f, -5.760794015e-03f, -5.757162926e-03f, -5.753522068e-03f, -5.749871446e-03f, -5.746211069e-03f, -5.742540942e-03f, -5.738861073e-03f, -5.735171468e-03f,
+-5.731472135e-03f, -5.727763080e-03f, -5.724044310e-03f, -5.720315833e-03f, -5.716577654e-03f, -5.712829780e-03f, -5.709072220e-03f, -5.705304980e-03f, -5.701528066e-03f, -5.697741486e-03f,
+-5.693945246e-03f, -5.690139355e-03f, -5.686323818e-03f, -5.682498644e-03f, -5.678663838e-03f, -5.674819409e-03f, -5.670965362e-03f, -5.667101707e-03f, -5.663228448e-03f, -5.659345595e-03f,
+-5.655453153e-03f, -5.651551130e-03f, -5.647639533e-03f, -5.643718371e-03f, -5.639787648e-03f, -5.635847374e-03f, -5.631897555e-03f, -5.627938199e-03f, -5.623969312e-03f, -5.619990903e-03f,
+-5.616002979e-03f, -5.612005546e-03f, -5.607998613e-03f, -5.603982186e-03f, -5.599956273e-03f, -5.595920882e-03f, -5.591876020e-03f, -5.587821695e-03f, -5.583757913e-03f, -5.579684682e-03f,
+-5.575602011e-03f, -5.571509906e-03f, -5.567408375e-03f, -5.563297425e-03f, -5.559177064e-03f, -5.555047300e-03f, -5.550908141e-03f, -5.546759593e-03f, -5.542601665e-03f, -5.538434363e-03f,
+-5.534257697e-03f, -5.530071673e-03f, -5.525876299e-03f, -5.521671583e-03f, -5.517457533e-03f, -5.513234156e-03f, -5.509001460e-03f, -5.504759453e-03f, -5.500508143e-03f, -5.496247537e-03f,
+-5.491977643e-03f, -5.487698470e-03f, -5.483410024e-03f, -5.479112314e-03f, -5.474805348e-03f, -5.470489134e-03f, -5.466163679e-03f, -5.461828992e-03f, -5.457485080e-03f, -5.453131951e-03f,
+-5.448769614e-03f, -5.444398076e-03f, -5.440017345e-03f, -5.435627430e-03f, -5.431228338e-03f, -5.426820078e-03f, -5.422402657e-03f, -5.417976084e-03f, -5.413540366e-03f, -5.409095512e-03f,
+-5.404641531e-03f, -5.400178429e-03f, -5.395706215e-03f, -5.391224898e-03f, -5.386734486e-03f, -5.382234986e-03f, -5.377726408e-03f, -5.373208759e-03f, -5.368682047e-03f, -5.364146281e-03f,
+-5.359601469e-03f, -5.355047620e-03f, -5.350484741e-03f, -5.345912841e-03f, -5.341331929e-03f, -5.336742012e-03f, -5.332143100e-03f, -5.327535200e-03f, -5.322918321e-03f, -5.318292471e-03f,
+-5.313657659e-03f, -5.309013893e-03f, -5.304361182e-03f, -5.299699534e-03f, -5.295028958e-03f, -5.290349462e-03f, -5.285661054e-03f, -5.280963744e-03f, -5.276257540e-03f, -5.271542449e-03f,
+-5.266818482e-03f, -5.262085647e-03f, -5.257343951e-03f, -5.252593404e-03f, -5.247834015e-03f, -5.243065792e-03f, -5.238288743e-03f, -5.233502878e-03f, -5.228708205e-03f, -5.223904733e-03f,
+-5.219092471e-03f, -5.214271427e-03f, -5.209441610e-03f, -5.204603028e-03f, -5.199755692e-03f, -5.194899609e-03f, -5.190034788e-03f, -5.185161239e-03f, -5.180278969e-03f, -5.175387989e-03f,
+-5.170488306e-03f, -5.165579929e-03f, -5.160662869e-03f, -5.155737132e-03f, -5.150802730e-03f, -5.145859669e-03f, -5.140907960e-03f, -5.135947611e-03f, -5.130978631e-03f, -5.126001030e-03f,
+-5.121014816e-03f, -5.116019999e-03f, -5.111016586e-03f, -5.106004589e-03f, -5.100984015e-03f, -5.095954873e-03f, -5.090917174e-03f, -5.085870925e-03f, -5.080816137e-03f, -5.075752817e-03f,
+-5.070680976e-03f, -5.065600623e-03f, -5.060511766e-03f, -5.055414416e-03f, -5.050308580e-03f, -5.045194269e-03f, -5.040071492e-03f, -5.034940257e-03f, -5.029800575e-03f, -5.024652455e-03f,
+-5.019495905e-03f, -5.014330936e-03f, -5.009157556e-03f, -5.003975774e-03f, -4.998785602e-03f, -4.993587046e-03f, -4.988380118e-03f, -4.983164826e-03f, -4.977941180e-03f, -4.972709190e-03f,
+-4.967468864e-03f, -4.962220212e-03f, -4.956963244e-03f, -4.951697969e-03f, -4.946424397e-03f, -4.941142537e-03f, -4.935852399e-03f, -4.930553992e-03f, -4.925247326e-03f, -4.919932410e-03f,
+-4.914609254e-03f, -4.909277868e-03f, -4.903938261e-03f, -4.898590443e-03f, -4.893234424e-03f, -4.887870213e-03f, -4.882497819e-03f, -4.877117254e-03f, -4.871728525e-03f, -4.866331643e-03f,
+-4.860926618e-03f, -4.855513460e-03f, -4.850092177e-03f, -4.844662781e-03f, -4.839225280e-03f, -4.833779685e-03f, -4.828326005e-03f, -4.822864250e-03f, -4.817394430e-03f, -4.811916555e-03f,
+-4.806430635e-03f, -4.800936679e-03f, -4.795434697e-03f, -4.789924700e-03f, -4.784406698e-03f, -4.778880699e-03f, -4.773346715e-03f, -4.767804754e-03f, -4.762254828e-03f, -4.756696946e-03f,
+-4.751131118e-03f, -4.745557354e-03f, -4.739975664e-03f, -4.734386058e-03f, -4.728788546e-03f, -4.723183138e-03f, -4.717569845e-03f, -4.711948676e-03f, -4.706319642e-03f, -4.700682752e-03f,
+-4.695038017e-03f, -4.689385446e-03f, -4.683725051e-03f, -4.678056841e-03f, -4.672380826e-03f, -4.666697017e-03f, -4.661005423e-03f, -4.655306056e-03f, -4.649598925e-03f, -4.643884040e-03f,
+-4.638161412e-03f, -4.632431050e-03f, -4.626692966e-03f, -4.620947170e-03f, -4.615193672e-03f, -4.609432481e-03f, -4.603663609e-03f, -4.597887066e-03f, -4.592102863e-03f, -4.586311008e-03f,
+-4.580511514e-03f, -4.574704390e-03f, -4.568889647e-03f, -4.563067295e-03f, -4.557237345e-03f, -4.551399807e-03f, -4.545554691e-03f, -4.539702009e-03f, -4.533841770e-03f, -4.527973985e-03f,
+-4.522098664e-03f, -4.516215818e-03f, -4.510325458e-03f, -4.504427595e-03f, -4.498522237e-03f, -4.492609397e-03f, -4.486689085e-03f, -4.480761312e-03f, -4.474826087e-03f, -4.468883422e-03f,
+-4.462933328e-03f, -4.456975814e-03f, -4.451010892e-03f, -4.445038572e-03f, -4.439058865e-03f, -4.433071782e-03f, -4.427077333e-03f, -4.421075529e-03f, -4.415066382e-03f, -4.409049900e-03f,
+-4.403026096e-03f, -4.396994980e-03f, -4.390956563e-03f, -4.384910856e-03f, -4.378857869e-03f, -4.372797613e-03f, -4.366730100e-03f, -4.360655339e-03f, -4.354573343e-03f, -4.348484121e-03f,
+-4.342387684e-03f, -4.336284044e-03f, -4.330173211e-03f, -4.324055197e-03f, -4.317930012e-03f, -4.311797667e-03f, -4.305658173e-03f, -4.299511541e-03f, -4.293357782e-03f, -4.287196907e-03f,
+-4.281028927e-03f, -4.274853853e-03f, -4.268671696e-03f, -4.262482467e-03f, -4.256286177e-03f, -4.250082837e-03f, -4.243872459e-03f, -4.237655053e-03f, -4.231430630e-03f, -4.225199201e-03f,
+-4.218960779e-03f, -4.212715372e-03f, -4.206462994e-03f, -4.200203655e-03f, -4.193937366e-03f, -4.187664138e-03f, -4.181383983e-03f, -4.175096911e-03f, -4.168802935e-03f, -4.162502064e-03f,
+-4.156194311e-03f, -4.149879686e-03f, -4.143558202e-03f, -4.137229868e-03f, -4.130894697e-03f, -4.124552699e-03f, -4.118203886e-03f, -4.111848270e-03f, -4.105485861e-03f, -4.099116671e-03f,
+-4.092740711e-03f, -4.086357993e-03f, -4.079968527e-03f, -4.073572326e-03f, -4.067169401e-03f, -4.060759763e-03f, -4.054343423e-03f, -4.047920393e-03f, -4.041490685e-03f, -4.035054309e-03f,
+-4.028611278e-03f, -4.022161602e-03f, -4.015705294e-03f, -4.009242364e-03f, -4.002772824e-03f, -3.996296686e-03f, -3.989813961e-03f, -3.983324661e-03f, -3.976828797e-03f, -3.970326381e-03f,
+-3.963817424e-03f, -3.957301938e-03f, -3.950779934e-03f, -3.944251425e-03f, -3.937716421e-03f, -3.931174935e-03f, -3.924626977e-03f, -3.918072560e-03f, -3.911511695e-03f, -3.904944394e-03f,
+-3.898370669e-03f, -3.891790530e-03f, -3.885203991e-03f, -3.878611062e-03f, -3.872011755e-03f, -3.865406083e-03f, -3.858794056e-03f, -3.852175686e-03f, -3.845550986e-03f, -3.838919966e-03f,
+-3.832282640e-03f, -3.825639018e-03f, -3.818989112e-03f, -3.812332934e-03f, -3.805670496e-03f, -3.799001810e-03f, -3.792326888e-03f, -3.785645740e-03f, -3.778958381e-03f, -3.772264820e-03f,
+-3.765565070e-03f, -3.758859143e-03f, -3.752147051e-03f, -3.745428805e-03f, -3.738704418e-03f, -3.731973902e-03f, -3.725237268e-03f, -3.718494528e-03f, -3.711745694e-03f, -3.704990779e-03f,
+-3.698229794e-03f, -3.691462752e-03f, -3.684689663e-03f, -3.677910541e-03f, -3.671125397e-03f, -3.664334243e-03f, -3.657537092e-03f, -3.650733955e-03f, -3.643924844e-03f, -3.637109772e-03f,
+-3.630288750e-03f, -3.623461790e-03f, -3.616628906e-03f, -3.609790108e-03f, -3.602945409e-03f, -3.596094821e-03f, -3.589238356e-03f, -3.582376027e-03f, -3.575507844e-03f, -3.568633822e-03f,
+-3.561753971e-03f, -3.554868304e-03f, -3.547976833e-03f, -3.541079570e-03f, -3.534176528e-03f, -3.527267719e-03f, -3.520353154e-03f, -3.513432847e-03f, -3.506506809e-03f, -3.499575052e-03f,
+-3.492637590e-03f, -3.485694434e-03f, -3.478745596e-03f, -3.471791089e-03f, -3.464830925e-03f, -3.457865116e-03f, -3.450893675e-03f, -3.443916613e-03f, -3.436933945e-03f, -3.429945680e-03f,
+-3.422951833e-03f, -3.415952415e-03f, -3.408947439e-03f, -3.401936917e-03f, -3.394920862e-03f, -3.387899285e-03f, -3.380872199e-03f, -3.373839618e-03f, -3.366801552e-03f, -3.359758015e-03f,
+-3.352709019e-03f, -3.345654577e-03f, -3.338594700e-03f, -3.331529402e-03f, -3.324458694e-03f, -3.317382590e-03f, -3.310301102e-03f, -3.303214242e-03f, -3.296122022e-03f, -3.289024457e-03f,
+-3.281921557e-03f, -3.274813335e-03f, -3.267699805e-03f, -3.260580978e-03f, -3.253456867e-03f, -3.246327484e-03f, -3.239192843e-03f, -3.232052956e-03f, -3.224907835e-03f, -3.217757493e-03f,
+-3.210601943e-03f, -3.203441197e-03f, -3.196275268e-03f, -3.189104168e-03f, -3.181927910e-03f, -3.174746508e-03f, -3.167559972e-03f, -3.160368317e-03f, -3.153171555e-03f, -3.145969698e-03f,
+-3.138762760e-03f, -3.131550752e-03f, -3.124333688e-03f, -3.117111580e-03f, -3.109884442e-03f, -3.102652285e-03f, -3.095415123e-03f, -3.088172968e-03f, -3.080925833e-03f, -3.073673731e-03f,
+-3.066416674e-03f, -3.059154676e-03f, -3.051887749e-03f, -3.044615906e-03f, -3.037339160e-03f, -3.030057523e-03f, -3.022771009e-03f, -3.015479630e-03f, -3.008183399e-03f, -3.000882329e-03f,
+-2.993576433e-03f, -2.986265724e-03f, -2.978950214e-03f, -2.971629916e-03f, -2.964304844e-03f, -2.956975010e-03f, -2.949640427e-03f, -2.942301108e-03f, -2.934957066e-03f, -2.927608313e-03f,
+-2.920254864e-03f, -2.912896730e-03f, -2.905533925e-03f, -2.898166461e-03f, -2.890794352e-03f, -2.883417610e-03f, -2.876036249e-03f, -2.868650281e-03f, -2.861259720e-03f, -2.853864579e-03f,
+-2.846464869e-03f, -2.839060605e-03f, -2.831651800e-03f, -2.824238466e-03f, -2.816820617e-03f, -2.809398265e-03f, -2.801971424e-03f, -2.794540107e-03f, -2.787104326e-03f, -2.779664095e-03f,
+-2.772219427e-03f, -2.764770336e-03f, -2.757316833e-03f, -2.749858932e-03f, -2.742396646e-03f, -2.734929989e-03f, -2.727458974e-03f, -2.719983613e-03f, -2.712503920e-03f, -2.705019907e-03f,
+-2.697531589e-03f, -2.690038978e-03f, -2.682542087e-03f, -2.675040930e-03f, -2.667535519e-03f, -2.660025868e-03f, -2.652511991e-03f, -2.644993899e-03f, -2.637471607e-03f, -2.629945127e-03f,
+-2.622414474e-03f, -2.614879659e-03f, -2.607340697e-03f, -2.599797600e-03f, -2.592250382e-03f, -2.584699056e-03f, -2.577143636e-03f, -2.569584133e-03f, -2.562020563e-03f, -2.554452938e-03f,
+-2.546881270e-03f, -2.539305575e-03f, -2.531725864e-03f, -2.524142152e-03f, -2.516554451e-03f, -2.508962775e-03f, -2.501367137e-03f, -2.493767550e-03f, -2.486164028e-03f, -2.478556584e-03f,
+-2.470945232e-03f, -2.463329984e-03f, -2.455710855e-03f, -2.448087857e-03f, -2.440461004e-03f, -2.432830309e-03f, -2.425195785e-03f, -2.417557447e-03f, -2.409915307e-03f, -2.402269378e-03f,
+-2.394619675e-03f, -2.386966210e-03f, -2.379308998e-03f, -2.371648050e-03f, -2.363983382e-03f, -2.356315005e-03f, -2.348642935e-03f, -2.340967183e-03f, -2.333287764e-03f, -2.325604691e-03f,
+-2.317917977e-03f, -2.310227636e-03f, -2.302533682e-03f, -2.294836127e-03f, -2.287134986e-03f, -2.279430271e-03f, -2.271721997e-03f, -2.264010177e-03f, -2.256294824e-03f, -2.248575951e-03f,
+-2.240853573e-03f, -2.233127703e-03f, -2.225398354e-03f, -2.217665540e-03f, -2.209929275e-03f, -2.202189571e-03f, -2.194446443e-03f, -2.186699904e-03f, -2.178949967e-03f, -2.171196646e-03f,
+-2.163439956e-03f, -2.155679908e-03f, -2.147916518e-03f, -2.140149797e-03f, -2.132379761e-03f, -2.124606423e-03f, -2.116829795e-03f, -2.109049893e-03f, -2.101266728e-03f, -2.093480316e-03f,
+-2.085690670e-03f, -2.077897802e-03f, -2.070101728e-03f, -2.062302460e-03f, -2.054500012e-03f, -2.046694398e-03f, -2.038885631e-03f, -2.031073726e-03f, -2.023258695e-03f, -2.015440552e-03f,
+-2.007619312e-03f, -1.999794987e-03f, -1.991967591e-03f, -1.984137139e-03f, -1.976303643e-03f, -1.968467118e-03f, -1.960627577e-03f, -1.952785034e-03f, -1.944939502e-03f, -1.937090995e-03f,
+-1.929239528e-03f, -1.921385113e-03f, -1.913527764e-03f, -1.905667495e-03f, -1.897804320e-03f, -1.889938253e-03f, -1.882069307e-03f, -1.874197496e-03f, -1.866322833e-03f, -1.858445333e-03f,
+-1.850565010e-03f, -1.842681876e-03f, -1.834795946e-03f, -1.826907234e-03f, -1.819015753e-03f, -1.811121517e-03f, -1.803224539e-03f, -1.795324835e-03f, -1.787422417e-03f, -1.779517298e-03f,
+-1.771609494e-03f, -1.763699018e-03f, -1.755785883e-03f, -1.747870104e-03f, -1.739951694e-03f, -1.732030667e-03f, -1.724107036e-03f, -1.716180817e-03f, -1.708252022e-03f, -1.700320665e-03f,
+-1.692386760e-03f, -1.684450321e-03f, -1.676511362e-03f, -1.668569896e-03f, -1.660625938e-03f, -1.652679502e-03f, -1.644730600e-03f, -1.636779248e-03f, -1.628825458e-03f, -1.620869246e-03f,
+-1.612910623e-03f, -1.604949606e-03f, -1.596986207e-03f, -1.589020440e-03f, -1.581052319e-03f, -1.573081858e-03f, -1.565109071e-03f, -1.557133972e-03f, -1.549156574e-03f, -1.541176892e-03f,
+-1.533194940e-03f, -1.525210731e-03f, -1.517224279e-03f, -1.509235599e-03f, -1.501244704e-03f, -1.493251607e-03f, -1.485256324e-03f, -1.477258867e-03f, -1.469259252e-03f, -1.461257491e-03f,
+-1.453253599e-03f, -1.445247589e-03f, -1.437239476e-03f, -1.429229273e-03f, -1.421216995e-03f, -1.413202656e-03f, -1.405186268e-03f, -1.397167847e-03f, -1.389147406e-03f, -1.381124959e-03f,
+-1.373100521e-03f, -1.365074104e-03f, -1.357045724e-03f, -1.349015394e-03f, -1.340983127e-03f, -1.332948939e-03f, -1.324912843e-03f, -1.316874852e-03f, -1.308834982e-03f, -1.300793246e-03f,
+-1.292749657e-03f, -1.284704230e-03f, -1.276656980e-03f, -1.268607919e-03f, -1.260557062e-03f, -1.252504423e-03f, -1.244450016e-03f, -1.236393854e-03f, -1.228335953e-03f, -1.220276326e-03f,
+-1.212214986e-03f, -1.204151948e-03f, -1.196087227e-03f, -1.188020835e-03f, -1.179952787e-03f, -1.171883098e-03f, -1.163811780e-03f, -1.155738849e-03f, -1.147664317e-03f, -1.139588200e-03f,
+-1.131510511e-03f, -1.123431264e-03f, -1.115350473e-03f, -1.107268153e-03f, -1.099184317e-03f, -1.091098979e-03f, -1.083012154e-03f, -1.074923855e-03f, -1.066834096e-03f, -1.058742893e-03f,
+-1.050650257e-03f, -1.042556205e-03f, -1.034460749e-03f, -1.026363904e-03f, -1.018265684e-03f, -1.010166102e-03f, -1.002065174e-03f, -9.939629124e-04f, -9.858593321e-04f, -9.777544469e-04f,
+-9.696482710e-04f, -9.615408184e-04f, -9.534321031e-04f, -9.453221392e-04f, -9.372109409e-04f, -9.290985222e-04f, -9.209848971e-04f, -9.128700798e-04f, -9.047540843e-04f, -8.966369247e-04f,
+-8.885186151e-04f, -8.803991696e-04f, -8.722786023e-04f, -8.641569272e-04f, -8.560341584e-04f, -8.479103101e-04f, -8.397853963e-04f, -8.316594311e-04f, -8.235324286e-04f, -8.154044029e-04f,
+-8.072753681e-04f, -7.991453383e-04f, -7.910143276e-04f, -7.828823501e-04f, -7.747494198e-04f, -7.666155510e-04f, -7.584807576e-04f, -7.503450538e-04f, -7.422084537e-04f, -7.340709714e-04f,
+-7.259326210e-04f, -7.177934166e-04f, -7.096533724e-04f, -7.015125023e-04f, -6.933708206e-04f, -6.852283413e-04f, -6.770850786e-04f, -6.689410465e-04f, -6.607962591e-04f, -6.526507307e-04f,
+-6.445044752e-04f, -6.363575069e-04f, -6.282098397e-04f, -6.200614879e-04f, -6.119124655e-04f, -6.037627867e-04f, -5.956124655e-04f, -5.874615162e-04f, -5.793099527e-04f, -5.711577892e-04f,
+-5.630050399e-04f, -5.548517188e-04f, -5.466978401e-04f, -5.385434178e-04f, -5.303884662e-04f, -5.222329993e-04f, -5.140770312e-04f, -5.059205760e-04f, -4.977636480e-04f, -4.896062611e-04f,
+-4.814484295e-04f, -4.732901674e-04f, -4.651314887e-04f, -4.569724078e-04f, -4.488129386e-04f, -4.406530954e-04f, -4.324928921e-04f, -4.243323430e-04f, -4.161714621e-04f, -4.080102636e-04f,
+-3.998487616e-04f, -3.916869702e-04f, -3.835249035e-04f, -3.753625757e-04f, -3.672000008e-04f, -3.590371930e-04f, -3.508741664e-04f, -3.427109350e-04f, -3.345475132e-04f, -3.263839148e-04f,
+-3.182201541e-04f, -3.100562452e-04f, -3.018922021e-04f, -2.937280391e-04f, -2.855637701e-04f, -2.773994094e-04f, -2.692349710e-04f, -2.610704691e-04f, -2.529059177e-04f, -2.447413310e-04f,
+-2.365767231e-04f, -2.284121080e-04f, -2.202475000e-04f, -2.120829130e-04f, -2.039183613e-04f, -1.957538589e-04f, -1.875894199e-04f, -1.794250584e-04f, -1.712607885e-04f, -1.630966244e-04f,
+-1.549325802e-04f, -1.467686698e-04f, -1.386049075e-04f, -1.304413074e-04f, -1.222778834e-04f, -1.141146498e-04f, -1.059516207e-04f, -9.778881002e-05f, -8.962623199e-05f, -8.146390068e-05f,
+-7.330183017e-05f, -6.514003455e-05f, -5.697852792e-05f, -4.881732437e-05f, -4.065643797e-05f, -3.249588282e-05f, -2.433567300e-05f, -1.617582260e-05f, -8.016345689e-06f, 1.427436401e-07f,
+8.301431311e-06f, 1.645970325e-05f, 2.461754537e-05f, 3.277494361e-05f, 4.093188388e-05f, 4.908835212e-05f, 5.724433425e-05f, 6.539981621e-05f, 7.355478393e-05f, 8.170922334e-05f,
+8.986312038e-05f, 9.801646098e-05f, 1.061692311e-04f, 1.143214166e-04f, 1.224730036e-04f, 1.306239778e-04f, 1.387743254e-04f, 1.469240321e-04f, 1.550730841e-04f, 1.632214671e-04f,
+1.713691672e-04f, 1.795161704e-04f, 1.876624626e-04f, 1.958080296e-04f, 2.039528576e-04f, 2.120969325e-04f, 2.202402402e-04f, 2.283827667e-04f, 2.365244980e-04f, 2.446654199e-04f,
+2.528055187e-04f, 2.609447800e-04f, 2.690831901e-04f, 2.772207348e-04f, 2.853574001e-04f, 2.934931720e-04f, 3.016280365e-04f, 3.097619796e-04f, 3.178949873e-04f, 3.260270455e-04f,
+3.341581403e-04f, 3.422882576e-04f, 3.504173835e-04f, 3.585455039e-04f, 3.666726049e-04f, 3.747986725e-04f, 3.829236926e-04f, 3.910476514e-04f, 3.991705347e-04f, 4.072923286e-04f,
+4.154130192e-04f, 4.235325925e-04f, 4.316510344e-04f, 4.397683310e-04f, 4.478844684e-04f, 4.559994325e-04f, 4.641132095e-04f, 4.722257853e-04f, 4.803371460e-04f, 4.884472776e-04f,
+4.965561663e-04f, 5.046637979e-04f, 5.127701586e-04f, 5.208752345e-04f, 5.289790115e-04f, 5.370814758e-04f, 5.451826134e-04f, 5.532824104e-04f, 5.613808529e-04f, 5.694779269e-04f,
+5.775736184e-04f, 5.856679137e-04f, 5.937607987e-04f, 6.018522596e-04f, 6.099422824e-04f, 6.180308533e-04f, 6.261179582e-04f, 6.342035834e-04f, 6.422877149e-04f, 6.503703389e-04f,
+6.584514413e-04f, 6.665310085e-04f, 6.746090263e-04f, 6.826854811e-04f, 6.907603588e-04f, 6.988336457e-04f, 7.069053279e-04f, 7.149753914e-04f, 7.230438224e-04f, 7.311106071e-04f,
+7.391757316e-04f, 7.472391820e-04f, 7.553009445e-04f, 7.633610053e-04f, 7.714193504e-04f, 7.794759661e-04f, 7.875308386e-04f, 7.955839539e-04f, 8.036352983e-04f, 8.116848579e-04f,
+8.197326190e-04f, 8.277785676e-04f, 8.358226901e-04f, 8.438649725e-04f, 8.519054010e-04f, 8.599439620e-04f, 8.679806415e-04f, 8.760154258e-04f, 8.840483010e-04f, 8.920792535e-04f,
+9.001082693e-04f, 9.081353348e-04f, 9.161604362e-04f, 9.241835596e-04f, 9.322046914e-04f, 9.402238177e-04f, 9.482409248e-04f, 9.562559990e-04f, 9.642690265e-04f, 9.722799935e-04f,
+9.802888863e-04f, 9.882956913e-04f, 9.963003945e-04f, 1.004302982e-03f, 1.012303441e-03f, 1.020301757e-03f, 1.028297916e-03f, 1.036291906e-03f, 1.044283711e-03f, 1.052273318e-03f,
+1.060260714e-03f, 1.068245885e-03f, 1.076228818e-03f, 1.084209498e-03f, 1.092187911e-03f, 1.100164045e-03f, 1.108137886e-03f, 1.116109419e-03f, 1.124078632e-03f, 1.132045510e-03f,
+1.140010040e-03f, 1.147972209e-03f, 1.155932002e-03f, 1.163889406e-03f, 1.171844407e-03f, 1.179796992e-03f, 1.187747147e-03f, 1.195694859e-03f, 1.203640113e-03f, 1.211582897e-03f,
+1.219523197e-03f, 1.227460998e-03f, 1.235396288e-03f, 1.243329053e-03f, 1.251259279e-03f, 1.259186953e-03f, 1.267112061e-03f, 1.275034589e-03f, 1.282954525e-03f, 1.290871854e-03f,
+1.298786563e-03f, 1.306698638e-03f, 1.314608066e-03f, 1.322514834e-03f, 1.330418927e-03f, 1.338320332e-03f, 1.346219036e-03f, 1.354115025e-03f, 1.362008286e-03f, 1.369898805e-03f,
+1.377786569e-03f, 1.385671564e-03f, 1.393553777e-03f, 1.401433193e-03f, 1.409309801e-03f, 1.417183586e-03f, 1.425054534e-03f, 1.432922633e-03f, 1.440787869e-03f, 1.448650228e-03f,
+1.456509697e-03f, 1.464366262e-03f, 1.472219911e-03f, 1.480070629e-03f, 1.487918404e-03f, 1.495763222e-03f, 1.503605068e-03f, 1.511443931e-03f, 1.519279797e-03f, 1.527112652e-03f,
+1.534942482e-03f, 1.542769275e-03f, 1.550593017e-03f, 1.558413695e-03f, 1.566231296e-03f, 1.574045805e-03f, 1.581857210e-03f, 1.589665497e-03f, 1.597470653e-03f, 1.605272665e-03f,
+1.613071519e-03f, 1.620867202e-03f, 1.628659700e-03f, 1.636449001e-03f, 1.644235092e-03f, 1.652017957e-03f, 1.659797586e-03f, 1.667573963e-03f, 1.675347077e-03f, 1.683116913e-03f,
+1.690883458e-03f, 1.698646700e-03f, 1.706406624e-03f, 1.714163218e-03f, 1.721916469e-03f, 1.729666362e-03f, 1.737412886e-03f, 1.745156026e-03f, 1.752895769e-03f, 1.760632103e-03f,
+1.768365014e-03f, 1.776094489e-03f, 1.783820515e-03f, 1.791543078e-03f, 1.799262165e-03f, 1.806977764e-03f, 1.814689860e-03f, 1.822398442e-03f, 1.830103495e-03f, 1.837805007e-03f,
+1.845502964e-03f, 1.853197353e-03f, 1.860888162e-03f, 1.868575377e-03f, 1.876258984e-03f, 1.883938972e-03f, 1.891615326e-03f, 1.899288034e-03f, 1.906957083e-03f, 1.914622459e-03f,
+1.922284150e-03f, 1.929942142e-03f, 1.937596423e-03f, 1.945246978e-03f, 1.952893796e-03f, 1.960536864e-03f, 1.968176167e-03f, 1.975811694e-03f, 1.983443431e-03f, 1.991071365e-03f,
+1.998695484e-03f, 2.006315773e-03f, 2.013932221e-03f, 2.021544814e-03f, 2.029153540e-03f, 2.036758385e-03f, 2.044359336e-03f, 2.051956381e-03f, 2.059549506e-03f, 2.067138699e-03f,
+2.074723946e-03f, 2.082305236e-03f, 2.089882554e-03f, 2.097455888e-03f, 2.105025225e-03f, 2.112590553e-03f, 2.120151857e-03f, 2.127709127e-03f, 2.135262347e-03f, 2.142811507e-03f,
+2.150356592e-03f, 2.157897591e-03f, 2.165434489e-03f, 2.172967275e-03f, 2.180495936e-03f, 2.188020458e-03f, 2.195540830e-03f, 2.203057037e-03f, 2.210569068e-03f, 2.218076910e-03f,
+2.225580549e-03f, 2.233079974e-03f, 2.240575171e-03f, 2.248066128e-03f, 2.255552831e-03f, 2.263035269e-03f, 2.270513428e-03f, 2.277987295e-03f, 2.285456859e-03f, 2.292922106e-03f,
+2.300383024e-03f, 2.307839599e-03f, 2.315291820e-03f, 2.322739674e-03f, 2.330183147e-03f, 2.337622228e-03f, 2.345056904e-03f, 2.352487161e-03f, 2.359912988e-03f, 2.367334372e-03f,
+2.374751300e-03f, 2.382163760e-03f, 2.389571738e-03f, 2.396975223e-03f, 2.404374202e-03f, 2.411768663e-03f, 2.419158592e-03f, 2.426543977e-03f, 2.433924806e-03f, 2.441301066e-03f,
+2.448672744e-03f, 2.456039829e-03f, 2.463402307e-03f, 2.470760167e-03f, 2.478113395e-03f, 2.485461979e-03f, 2.492805907e-03f, 2.500145166e-03f, 2.507479744e-03f, 2.514809628e-03f,
+2.522134806e-03f, 2.529455265e-03f, 2.536770993e-03f, 2.544081979e-03f, 2.551388208e-03f, 2.558689669e-03f, 2.565986350e-03f, 2.573278237e-03f, 2.580565320e-03f, 2.587847584e-03f,
+2.595125019e-03f, 2.602397611e-03f, 2.609665349e-03f, 2.616928220e-03f, 2.624186212e-03f, 2.631439311e-03f, 2.638687507e-03f, 2.645930787e-03f, 2.653169139e-03f, 2.660402549e-03f,
+2.667631007e-03f, 2.674854500e-03f, 2.682073015e-03f, 2.689286540e-03f, 2.696495064e-03f, 2.703698573e-03f, 2.710897056e-03f, 2.718090501e-03f, 2.725278895e-03f, 2.732462226e-03f,
+2.739640482e-03f, 2.746813651e-03f, 2.753981721e-03f, 2.761144679e-03f, 2.768302514e-03f, 2.775455213e-03f, 2.782602764e-03f, 2.789745155e-03f, 2.796882374e-03f, 2.804014409e-03f,
+2.811141248e-03f, 2.818262879e-03f, 2.825379290e-03f, 2.832490468e-03f, 2.839596402e-03f, 2.846697080e-03f, 2.853792489e-03f, 2.860882618e-03f, 2.867967455e-03f, 2.875046987e-03f,
+2.882121203e-03f, 2.889190091e-03f, 2.896253639e-03f, 2.903311834e-03f, 2.910364666e-03f, 2.917412121e-03f, 2.924454189e-03f, 2.931490856e-03f, 2.938522112e-03f, 2.945547945e-03f,
+2.952568341e-03f, 2.959583291e-03f, 2.966592781e-03f, 2.973596801e-03f, 2.980595337e-03f, 2.987588379e-03f, 2.994575914e-03f, 3.001557931e-03f, 3.008534418e-03f, 3.015505363e-03f,
+3.022470754e-03f, 3.029430580e-03f, 3.036384829e-03f, 3.043333489e-03f, 3.050276548e-03f, 3.057213995e-03f, 3.064145817e-03f, 3.071072004e-03f, 3.077992544e-03f, 3.084907424e-03f,
+3.091816633e-03f, 3.098720160e-03f, 3.105617993e-03f, 3.112510120e-03f, 3.119396530e-03f, 3.126277211e-03f, 3.133152151e-03f, 3.140021339e-03f, 3.146884763e-03f, 3.153742411e-03f,
+3.160594273e-03f, 3.167440336e-03f, 3.174280589e-03f, 3.181115021e-03f, 3.187943619e-03f, 3.194766373e-03f, 3.201583271e-03f, 3.208394301e-03f, 3.215199452e-03f, 3.221998712e-03f,
+3.228792071e-03f, 3.235579516e-03f, 3.242361036e-03f, 3.249136619e-03f, 3.255906255e-03f, 3.262669932e-03f, 3.269427638e-03f, 3.276179362e-03f, 3.282925093e-03f, 3.289664819e-03f,
+3.296398530e-03f, 3.303126213e-03f, 3.309847857e-03f, 3.316563451e-03f, 3.323272984e-03f, 3.329976444e-03f, 3.336673821e-03f, 3.343365102e-03f, 3.350050277e-03f, 3.356729334e-03f,
+3.363402262e-03f, 3.370069050e-03f, 3.376729686e-03f, 3.383384160e-03f, 3.390032461e-03f, 3.396674576e-03f, 3.403310495e-03f, 3.409940207e-03f, 3.416563701e-03f, 3.423180965e-03f,
+3.429791988e-03f, 3.436396759e-03f, 3.442995268e-03f, 3.449587502e-03f, 3.456173451e-03f, 3.462753104e-03f, 3.469326450e-03f, 3.475893478e-03f, 3.482454176e-03f, 3.489008534e-03f,
+3.495556540e-03f, 3.502098185e-03f, 3.508633455e-03f, 3.515162342e-03f, 3.521684833e-03f, 3.528200918e-03f, 3.534710586e-03f, 3.541213825e-03f, 3.547710626e-03f, 3.554200976e-03f,
+3.560684866e-03f, 3.567162284e-03f, 3.573633219e-03f, 3.580097661e-03f, 3.586555598e-03f, 3.593007021e-03f, 3.599451917e-03f, 3.605890277e-03f, 3.612322088e-03f, 3.618747342e-03f,
+3.625166026e-03f, 3.631578130e-03f, 3.637983644e-03f, 3.644382556e-03f, 3.650774856e-03f, 3.657160533e-03f, 3.663539576e-03f, 3.669911975e-03f, 3.676277719e-03f, 3.682636797e-03f,
+3.688989199e-03f, 3.695334914e-03f, 3.701673931e-03f, 3.708006240e-03f, 3.714331831e-03f, 3.720650691e-03f, 3.726962812e-03f, 3.733268182e-03f, 3.739566791e-03f, 3.745858628e-03f,
+3.752143683e-03f, 3.758421945e-03f, 3.764693404e-03f, 3.770958049e-03f, 3.777215869e-03f, 3.783466855e-03f, 3.789710996e-03f, 3.795948280e-03f, 3.802178699e-03f, 3.808402241e-03f,
+3.814618896e-03f, 3.820828654e-03f, 3.827031504e-03f, 3.833227436e-03f, 3.839416439e-03f, 3.845598503e-03f, 3.851773618e-03f, 3.857941774e-03f, 3.864102959e-03f, 3.870257165e-03f,
+3.876404380e-03f, 3.882544594e-03f, 3.888677797e-03f, 3.894803979e-03f, 3.900923130e-03f, 3.907035239e-03f, 3.913140295e-03f, 3.919238290e-03f, 3.925329212e-03f, 3.931413052e-03f,
+3.937489799e-03f, 3.943559443e-03f, 3.949621975e-03f, 3.955677383e-03f, 3.961725658e-03f, 3.967766790e-03f, 3.973800768e-03f, 3.979827583e-03f, 3.985847224e-03f, 3.991859682e-03f,
+3.997864946e-03f, 4.003863006e-03f, 4.009853853e-03f, 4.015837476e-03f, 4.021813865e-03f, 4.027783011e-03f, 4.033744903e-03f, 4.039699532e-03f, 4.045646887e-03f, 4.051586959e-03f,
+4.057519738e-03f, 4.063445214e-03f, 4.069363376e-03f, 4.075274216e-03f, 4.081177722e-03f, 4.087073887e-03f, 4.092962698e-03f, 4.098844148e-03f, 4.104718225e-03f, 4.110584921e-03f,
+4.116444225e-03f, 4.122296128e-03f, 4.128140619e-03f, 4.133977690e-03f, 4.139807330e-03f, 4.145629530e-03f, 4.151444280e-03f, 4.157251570e-03f, 4.163051391e-03f, 4.168843733e-03f,
+4.174628586e-03f, 4.180405941e-03f, 4.186175789e-03f, 4.191938118e-03f, 4.197692921e-03f, 4.203440187e-03f, 4.209179907e-03f, 4.214912071e-03f, 4.220636670e-03f, 4.226353694e-03f,
+4.232063134e-03f, 4.237764980e-03f, 4.243459223e-03f, 4.249145853e-03f, 4.254824861e-03f, 4.260496237e-03f, 4.266159972e-03f, 4.271816057e-03f, 4.277464482e-03f, 4.283105237e-03f,
+4.288738314e-03f, 4.294363704e-03f, 4.299981395e-03f, 4.305591381e-03f, 4.311193650e-03f, 4.316788194e-03f, 4.322375003e-03f, 4.327954069e-03f, 4.333525381e-03f, 4.339088932e-03f,
+4.344644710e-03f, 4.350192708e-03f, 4.355732916e-03f, 4.361265325e-03f, 4.366789925e-03f, 4.372306708e-03f, 4.377815665e-03f, 4.383316785e-03f, 4.388810061e-03f, 4.394295483e-03f,
+4.399773041e-03f, 4.405242728e-03f, 4.410704533e-03f, 4.416158447e-03f, 4.421604463e-03f, 4.427042570e-03f, 4.432472760e-03f, 4.437895023e-03f, 4.443309352e-03f, 4.448715735e-03f,
+4.454114166e-03f, 4.459504634e-03f, 4.464887132e-03f, 4.470261649e-03f, 4.475628177e-03f, 4.480986708e-03f, 4.486337232e-03f, 4.491679740e-03f, 4.497014224e-03f, 4.502340675e-03f,
+4.507659084e-03f, 4.512969442e-03f, 4.518271741e-03f, 4.523565971e-03f, 4.528852124e-03f, 4.534130192e-03f, 4.539400164e-03f, 4.544662034e-03f, 4.549915792e-03f, 4.555161429e-03f,
+4.560398937e-03f, 4.565628306e-03f, 4.570849530e-03f, 4.576062598e-03f, 4.581267502e-03f, 4.586464234e-03f, 4.591652785e-03f, 4.596833147e-03f, 4.602005310e-03f, 4.607169267e-03f,
+4.612325008e-03f, 4.617472526e-03f, 4.622611812e-03f, 4.627742858e-03f, 4.632865654e-03f, 4.637980193e-03f, 4.643086465e-03f, 4.648184464e-03f, 4.653274179e-03f, 4.658355604e-03f,
+4.663428729e-03f, 4.668493546e-03f, 4.673550047e-03f, 4.678598224e-03f, 4.683638067e-03f, 4.688669569e-03f, 4.693692722e-03f, 4.698707518e-03f, 4.703713947e-03f, 4.708712002e-03f,
+4.713701674e-03f, 4.718682956e-03f, 4.723655839e-03f, 4.728620316e-03f, 4.733576376e-03f, 4.738524014e-03f, 4.743463220e-03f, 4.748393987e-03f, 4.753316306e-03f, 4.758230169e-03f,
+4.763135568e-03f, 4.768032495e-03f, 4.772920943e-03f, 4.777800902e-03f, 4.782672365e-03f, 4.787535325e-03f, 4.792389772e-03f, 4.797235699e-03f, 4.802073099e-03f, 4.806901962e-03f,
+4.811722282e-03f, 4.816534050e-03f, 4.821337259e-03f, 4.826131900e-03f, 4.830917966e-03f, 4.835695448e-03f, 4.840464340e-03f, 4.845224633e-03f, 4.849976319e-03f, 4.854719391e-03f,
+4.859453840e-03f, 4.864179660e-03f, 4.868896842e-03f, 4.873605378e-03f, 4.878305261e-03f, 4.882996484e-03f, 4.887679038e-03f, 4.892352916e-03f, 4.897018110e-03f, 4.901674613e-03f,
+4.906322416e-03f, 4.910961513e-03f, 4.915591896e-03f, 4.920213556e-03f, 4.924826488e-03f, 4.929430682e-03f, 4.934026132e-03f, 4.938612830e-03f, 4.943190769e-03f, 4.947759941e-03f,
+4.952320338e-03f, 4.956871953e-03f, 4.961414779e-03f, 4.965948809e-03f, 4.970474034e-03f, 4.974990448e-03f, 4.979498043e-03f, 4.983996811e-03f, 4.988486747e-03f, 4.992967841e-03f,
+4.997440087e-03f, 5.001903477e-03f, 5.006358005e-03f, 5.010803663e-03f, 5.015240444e-03f, 5.019668340e-03f, 5.024087344e-03f, 5.028497449e-03f, 5.032898649e-03f, 5.037290935e-03f,
+5.041674300e-03f, 5.046048738e-03f, 5.050414242e-03f, 5.054770803e-03f, 5.059118416e-03f, 5.063457073e-03f, 5.067786767e-03f, 5.072107491e-03f, 5.076419237e-03f, 5.080722000e-03f,
+5.085015772e-03f, 5.089300545e-03f, 5.093576314e-03f, 5.097843071e-03f, 5.102100808e-03f, 5.106349520e-03f, 5.110589200e-03f, 5.114819840e-03f, 5.119041433e-03f, 5.123253973e-03f,
+5.127457453e-03f, 5.131651866e-03f, 5.135837205e-03f, 5.140013464e-03f, 5.144180635e-03f, 5.148338713e-03f, 5.152487689e-03f, 5.156627558e-03f, 5.160758313e-03f, 5.164879947e-03f,
+5.168992454e-03f, 5.173095826e-03f, 5.177190057e-03f, 5.181275141e-03f, 5.185351071e-03f, 5.189417840e-03f, 5.193475441e-03f, 5.197523869e-03f, 5.201563117e-03f, 5.205593177e-03f,
+5.209614045e-03f, 5.213625712e-03f, 5.217628173e-03f, 5.221621421e-03f, 5.225605449e-03f, 5.229580252e-03f, 5.233545823e-03f, 5.237502155e-03f, 5.241449243e-03f, 5.245387079e-03f,
+5.249315657e-03f, 5.253234972e-03f, 5.257145016e-03f, 5.261045783e-03f, 5.264937268e-03f, 5.268819463e-03f, 5.272692363e-03f, 5.276555962e-03f, 5.280410252e-03f, 5.284255229e-03f,
+5.288090885e-03f, 5.291917215e-03f, 5.295734212e-03f, 5.299541871e-03f, 5.303340185e-03f, 5.307129147e-03f, 5.310908753e-03f, 5.314678996e-03f, 5.318439869e-03f, 5.322191368e-03f,
+5.325933485e-03f, 5.329666215e-03f, 5.333389552e-03f, 5.337103489e-03f, 5.340808022e-03f, 5.344503143e-03f, 5.348188848e-03f, 5.351865129e-03f, 5.355531982e-03f, 5.359189400e-03f,
+5.362837378e-03f, 5.366475909e-03f, 5.370104989e-03f, 5.373724610e-03f, 5.377334767e-03f, 5.380935455e-03f, 5.384526668e-03f, 5.388108399e-03f, 5.391680644e-03f, 5.395243396e-03f,
+5.398796650e-03f, 5.402340401e-03f, 5.405874642e-03f, 5.409399367e-03f, 5.412914572e-03f, 5.416420251e-03f, 5.419916398e-03f, 5.423403007e-03f, 5.426880073e-03f, 5.430347591e-03f,
+5.433805554e-03f, 5.437253958e-03f, 5.440692797e-03f, 5.444122065e-03f, 5.447541757e-03f, 5.450951867e-03f, 5.454352391e-03f, 5.457743322e-03f, 5.461124656e-03f, 5.464496387e-03f,
+5.467858509e-03f, 5.471211017e-03f, 5.474553907e-03f, 5.477887171e-03f, 5.481210807e-03f, 5.484524807e-03f, 5.487829167e-03f, 5.491123882e-03f, 5.494408946e-03f, 5.497684354e-03f,
+5.500950101e-03f, 5.504206182e-03f, 5.507452592e-03f, 5.510689325e-03f, 5.513916377e-03f, 5.517133741e-03f, 5.520341414e-03f, 5.523539391e-03f, 5.526727665e-03f, 5.529906232e-03f,
+5.533075088e-03f, 5.536234226e-03f, 5.539383642e-03f, 5.542523332e-03f, 5.545653290e-03f, 5.548773511e-03f, 5.551883990e-03f, 5.554984723e-03f, 5.558075704e-03f, 5.561156929e-03f,
+5.564228393e-03f, 5.567290091e-03f, 5.570342018e-03f, 5.573384169e-03f, 5.576416540e-03f, 5.579439126e-03f, 5.582451922e-03f, 5.585454924e-03f, 5.588448126e-03f, 5.591431524e-03f,
+5.594405114e-03f, 5.597368890e-03f, 5.600322848e-03f, 5.603266984e-03f, 5.606201292e-03f, 5.609125769e-03f, 5.612040409e-03f, 5.614945208e-03f, 5.617840162e-03f, 5.620725266e-03f,
+5.623600516e-03f, 5.626465907e-03f, 5.629321434e-03f, 5.632167093e-03f, 5.635002880e-03f, 5.637828791e-03f, 5.640644820e-03f, 5.643450964e-03f, 5.646247218e-03f, 5.649033578e-03f,
+5.651810039e-03f, 5.654576598e-03f, 5.657333249e-03f, 5.660079989e-03f, 5.662816814e-03f, 5.665543718e-03f, 5.668260698e-03f, 5.670967750e-03f, 5.673664870e-03f, 5.676352053e-03f,
+5.679029295e-03f, 5.681696592e-03f, 5.684353940e-03f, 5.687001334e-03f, 5.689638772e-03f, 5.692266248e-03f, 5.694883758e-03f, 5.697491300e-03f, 5.700088867e-03f, 5.702676458e-03f,
+5.705254067e-03f, 5.707821690e-03f, 5.710379324e-03f, 5.712926965e-03f, 5.715464609e-03f, 5.717992252e-03f, 5.720509889e-03f, 5.723017518e-03f, 5.725515134e-03f, 5.728002734e-03f,
+5.730480314e-03f, 5.732947869e-03f, 5.735405397e-03f, 5.737852893e-03f, 5.740290354e-03f, 5.742717775e-03f, 5.745135154e-03f, 5.747542487e-03f, 5.749939769e-03f, 5.752326998e-03f,
+5.754704169e-03f, 5.757071279e-03f, 5.759428325e-03f, 5.761775303e-03f, 5.764112208e-03f, 5.766439039e-03f, 5.768755791e-03f, 5.771062460e-03f, 5.773359044e-03f, 5.775645538e-03f,
+5.777921940e-03f, 5.780188246e-03f, 5.782444452e-03f, 5.784690555e-03f, 5.786926552e-03f, 5.789152439e-03f, 5.791368213e-03f, 5.793573870e-03f, 5.795769408e-03f, 5.797954823e-03f,
+5.800130111e-03f, 5.802295270e-03f, 5.804450296e-03f, 5.806595186e-03f, 5.808729937e-03f, 5.810854546e-03f, 5.812969009e-03f, 5.815073323e-03f, 5.817167485e-03f, 5.819251492e-03f,
+5.821325342e-03f, 5.823389029e-03f, 5.825442553e-03f, 5.827485910e-03f, 5.829519096e-03f, 5.831542108e-03f, 5.833554945e-03f, 5.835557602e-03f, 5.837550077e-03f, 5.839532366e-03f,
+5.841504468e-03f, 5.843466378e-03f, 5.845418095e-03f, 5.847359614e-03f, 5.849290934e-03f, 5.851212052e-03f, 5.853122964e-03f, 5.855023668e-03f, 5.856914161e-03f, 5.858794440e-03f,
+5.860664503e-03f, 5.862524347e-03f, 5.864373969e-03f, 5.866213367e-03f, 5.868042537e-03f, 5.869861477e-03f, 5.871670185e-03f, 5.873468658e-03f, 5.875256893e-03f, 5.877034888e-03f,
+5.878802639e-03f, 5.880560146e-03f, 5.882307404e-03f, 5.884044412e-03f, 5.885771166e-03f, 5.887487666e-03f, 5.889193907e-03f, 5.890889888e-03f, 5.892575606e-03f, 5.894251059e-03f,
+5.895916245e-03f, 5.897571160e-03f, 5.899215803e-03f, 5.900850171e-03f, 5.902474263e-03f, 5.904088075e-03f, 5.905691605e-03f, 5.907284852e-03f, 5.908867812e-03f, 5.910440485e-03f,
+5.912002866e-03f, 5.913554955e-03f, 5.915096749e-03f, 5.916628246e-03f, 5.918149444e-03f, 5.919660341e-03f, 5.921160934e-03f, 5.922651221e-03f, 5.924131201e-03f, 5.925600872e-03f,
+5.927060231e-03f, 5.928509276e-03f, 5.929948005e-03f, 5.931376417e-03f, 5.932794509e-03f, 5.934202279e-03f, 5.935599726e-03f, 5.936986848e-03f, 5.938363642e-03f, 5.939730108e-03f,
+5.941086242e-03f, 5.942432043e-03f, 5.943767510e-03f, 5.945092640e-03f, 5.946407432e-03f, 5.947711884e-03f, 5.949005995e-03f, 5.950289762e-03f, 5.951563183e-03f, 5.952826258e-03f,
+5.954078984e-03f, 5.955321360e-03f, 5.956553385e-03f, 5.957775055e-03f, 5.958986371e-03f, 5.960187330e-03f, 5.961377931e-03f, 5.962558172e-03f, 5.963728052e-03f, 5.964887569e-03f,
+5.966036721e-03f, 5.967175508e-03f, 5.968303928e-03f, 5.969421979e-03f, 5.970529660e-03f, 5.971626969e-03f, 5.972713906e-03f, 5.973790468e-03f, 5.974856655e-03f, 5.975912464e-03f,
+5.976957896e-03f, 5.977992948e-03f, 5.979017619e-03f, 5.980031908e-03f, 5.981035814e-03f, 5.982029335e-03f, 5.983012470e-03f, 5.983985219e-03f, 5.984947579e-03f, 5.985899550e-03f,
+5.986841131e-03f, 5.987772320e-03f, 5.988693117e-03f, 5.989603520e-03f, 5.990503528e-03f, 5.991393140e-03f, 5.992272356e-03f, 5.993141173e-03f, 5.993999592e-03f, 5.994847611e-03f,
+5.995685230e-03f, 5.996512446e-03f, 5.997329260e-03f, 5.998135671e-03f, 5.998931677e-03f, 5.999717278e-03f, 6.000492473e-03f, 6.001257261e-03f, 6.002011641e-03f, 6.002755612e-03f,
+6.003489175e-03f, 6.004212327e-03f, 6.004925068e-03f, 6.005627398e-03f, 6.006319316e-03f, 6.007000821e-03f, 6.007671912e-03f, 6.008332589e-03f, 6.008982852e-03f, 6.009622699e-03f,
+6.010252129e-03f, 6.010871143e-03f, 6.011479740e-03f, 6.012077920e-03f, 6.012665681e-03f, 6.013243023e-03f, 6.013809946e-03f, 6.014366450e-03f, 6.014912533e-03f, 6.015448195e-03f,
+6.015973437e-03f, 6.016488257e-03f, 6.016992656e-03f, 6.017486632e-03f, 6.017970186e-03f, 6.018443318e-03f, 6.018906026e-03f, 6.019358310e-03f, 6.019800171e-03f, 6.020231609e-03f,
+6.020652622e-03f, 6.021063210e-03f, 6.021463375e-03f, 6.021853114e-03f, 6.022232429e-03f, 6.022601318e-03f, 6.022959783e-03f, 6.023307822e-03f, 6.023645436e-03f, 6.023972624e-03f,
+6.024289387e-03f, 6.024595725e-03f, 6.024891637e-03f, 6.025177123e-03f, 6.025452184e-03f, 6.025716819e-03f, 6.025971029e-03f, 6.026214814e-03f, 6.026448174e-03f, 6.026671108e-03f,
+6.026883618e-03f, 6.027085702e-03f, 6.027277362e-03f, 6.027458597e-03f, 6.027629408e-03f, 6.027789795e-03f, 6.027939758e-03f, 6.028079298e-03f, 6.028208414e-03f, 6.028327107e-03f,
+6.028435377e-03f, 6.028533225e-03f, 6.028620651e-03f, 6.028697655e-03f, 6.028764238e-03f, 6.028820400e-03f, 6.028866142e-03f, 6.028901463e-03f, 6.028926365e-03f, 6.028940847e-03f,
+6.028944911e-03f, 6.028938557e-03f, 6.028921785e-03f, 6.028894596e-03f, 6.028856990e-03f, 6.028808969e-03f, 6.028750532e-03f, 6.028681680e-03f, 6.028602414e-03f, 6.028512735e-03f,
+6.028412643e-03f, 6.028302139e-03f, 6.028181223e-03f, 6.028049897e-03f, 6.027908160e-03f, 6.027756015e-03f, 6.027593461e-03f, 6.027420499e-03f, 6.027237131e-03f, 6.027043357e-03f,
+6.026839177e-03f, 6.026624593e-03f, 6.026399606e-03f, 6.026164216e-03f, 6.025918425e-03f, 6.025662233e-03f, 6.025395641e-03f, 6.025118651e-03f, 6.024831263e-03f, 6.024533478e-03f,
+6.024225297e-03f, 6.023906722e-03f, 6.023577753e-03f, 6.023238392e-03f, 6.022888639e-03f, 6.022528496e-03f, 6.022157964e-03f, 6.021777044e-03f, 6.021385737e-03f, 6.020984044e-03f,
+6.020571967e-03f, 6.020149506e-03f, 6.019716664e-03f, 6.019273441e-03f, 6.018819838e-03f, 6.018355857e-03f, 6.017881500e-03f, 6.017396767e-03f, 6.016901659e-03f, 6.016396179e-03f,
+6.015880328e-03f, 6.015354106e-03f, 6.014817516e-03f, 6.014270558e-03f, 6.013713235e-03f, 6.013145548e-03f, 6.012567498e-03f, 6.011979087e-03f, 6.011380316e-03f, 6.010771186e-03f,
+6.010151701e-03f, 6.009521860e-03f, 6.008881665e-03f, 6.008231119e-03f, 6.007570223e-03f, 6.006898978e-03f, 6.006217387e-03f, 6.005525450e-03f, 6.004823169e-03f, 6.004110547e-03f,
+6.003387585e-03f, 6.002654285e-03f, 6.001910648e-03f, 6.001156677e-03f, 6.000392372e-03f, 5.999617737e-03f, 5.998832772e-03f, 5.998037480e-03f, 5.997231863e-03f, 5.996415922e-03f,
+5.995589659e-03f, 5.994753077e-03f, 5.993906177e-03f, 5.993048961e-03f, 5.992181432e-03f, 5.991303590e-03f, 5.990415439e-03f, 5.989516980e-03f, 5.988608216e-03f, 5.987689148e-03f,
+5.986759778e-03f, 5.985820109e-03f, 5.984870143e-03f, 5.983909882e-03f, 5.982939328e-03f, 5.981958483e-03f, 5.980967349e-03f, 5.979965930e-03f, 5.978954226e-03f, 5.977932240e-03f,
+5.976899975e-03f, 5.975857432e-03f, 5.974804615e-03f, 5.973741525e-03f, 5.972668164e-03f, 5.971584536e-03f, 5.970490642e-03f, 5.969386485e-03f, 5.968272067e-03f, 5.967147391e-03f,
+5.966012459e-03f, 5.964867273e-03f, 5.963711837e-03f, 5.962546152e-03f, 5.961370221e-03f, 5.960184047e-03f, 5.958987632e-03f, 5.957780979e-03f, 5.956564090e-03f, 5.955336968e-03f,
+5.954099616e-03f, 5.952852036e-03f, 5.951594230e-03f, 5.950326203e-03f, 5.949047955e-03f, 5.947759491e-03f, 5.946460812e-03f, 5.945151921e-03f, 5.943832822e-03f, 5.942503517e-03f,
+5.941164008e-03f, 5.939814299e-03f, 5.938454393e-03f, 5.937084292e-03f, 5.935703999e-03f, 5.934313516e-03f, 5.932912848e-03f, 5.931501997e-03f, 5.930080966e-03f, 5.928649757e-03f,
+5.927208374e-03f, 5.925756820e-03f, 5.924295097e-03f, 5.922823209e-03f, 5.921341159e-03f, 5.919848950e-03f, 5.918346585e-03f, 5.916834066e-03f, 5.915311398e-03f, 5.913778583e-03f,
+5.912235625e-03f, 5.910682526e-03f, 5.909119290e-03f, 5.907545920e-03f, 5.905962419e-03f, 5.904368790e-03f, 5.902765037e-03f, 5.901151163e-03f, 5.899527172e-03f, 5.897893065e-03f,
+5.896248848e-03f, 5.894594523e-03f, 5.892930093e-03f, 5.891255562e-03f, 5.889570934e-03f, 5.887876211e-03f, 5.886171398e-03f, 5.884456497e-03f, 5.882731512e-03f, 5.880996446e-03f,
+5.879251304e-03f, 5.877496088e-03f, 5.875730802e-03f, 5.873955449e-03f, 5.872170034e-03f, 5.870374560e-03f, 5.868569030e-03f, 5.866753447e-03f, 5.864927817e-03f, 5.863092142e-03f,
+5.861246425e-03f, 5.859390671e-03f, 5.857524883e-03f, 5.855649066e-03f, 5.853763222e-03f, 5.851867355e-03f, 5.849961470e-03f, 5.848045570e-03f, 5.846119659e-03f, 5.844183740e-03f,
+5.842237818e-03f, 5.840281896e-03f, 5.838315979e-03f, 5.836340069e-03f, 5.834354172e-03f, 5.832358290e-03f, 5.830352428e-03f, 5.828336590e-03f, 5.826310780e-03f, 5.824275002e-03f,
+5.822229260e-03f, 5.820173557e-03f, 5.818107898e-03f, 5.816032288e-03f, 5.813946729e-03f, 5.811851226e-03f, 5.809745784e-03f, 5.807630406e-03f, 5.805505096e-03f, 5.803369859e-03f,
+5.801224699e-03f, 5.799069619e-03f, 5.796904625e-03f, 5.794729721e-03f, 5.792544910e-03f, 5.790350197e-03f, 5.788145587e-03f, 5.785931083e-03f, 5.783706689e-03f, 5.781472411e-03f,
+5.779228253e-03f, 5.776974218e-03f, 5.774710312e-03f, 5.772436538e-03f, 5.770152902e-03f, 5.767859407e-03f, 5.765556058e-03f, 5.763242859e-03f, 5.760919815e-03f, 5.758586931e-03f,
+5.756244210e-03f, 5.753891658e-03f, 5.751529279e-03f, 5.749157078e-03f, 5.746775059e-03f, 5.744383226e-03f, 5.741981585e-03f, 5.739570140e-03f, 5.737148895e-03f, 5.734717856e-03f,
+5.732277027e-03f, 5.729826412e-03f, 5.727366017e-03f, 5.724895846e-03f, 5.722415904e-03f, 5.719926196e-03f, 5.717426726e-03f, 5.714917499e-03f, 5.712398520e-03f, 5.709869795e-03f,
+5.707331327e-03f, 5.704783121e-03f, 5.702225183e-03f, 5.699657518e-03f, 5.697080129e-03f, 5.694493023e-03f, 5.691896204e-03f, 5.689289678e-03f, 5.686673448e-03f, 5.684047520e-03f,
+5.681411900e-03f, 5.678766592e-03f, 5.676111601e-03f, 5.673446932e-03f, 5.670772591e-03f, 5.668088582e-03f, 5.665394910e-03f, 5.662691582e-03f, 5.659978601e-03f, 5.657255973e-03f,
+5.654523704e-03f, 5.651781797e-03f, 5.649030260e-03f, 5.646269096e-03f, 5.643498311e-03f, 5.640717911e-03f, 5.637927900e-03f, 5.635128284e-03f, 5.632319068e-03f, 5.629500258e-03f,
+5.626671859e-03f, 5.623833876e-03f, 5.620986314e-03f, 5.618129180e-03f, 5.615262478e-03f, 5.612386214e-03f, 5.609500393e-03f, 5.606605020e-03f, 5.603700102e-03f, 5.600785644e-03f,
+5.597861651e-03f, 5.594928128e-03f, 5.591985082e-03f, 5.589032518e-03f, 5.586070441e-03f, 5.583098857e-03f, 5.580117772e-03f, 5.577127190e-03f, 5.574127119e-03f, 5.571117563e-03f,
+5.568098528e-03f, 5.565070020e-03f, 5.562032045e-03f, 5.558984608e-03f, 5.555927714e-03f, 5.552861371e-03f, 5.549785583e-03f, 5.546700356e-03f, 5.543605696e-03f, 5.540501609e-03f,
+5.537388101e-03f, 5.534265177e-03f, 5.531132844e-03f, 5.527991107e-03f, 5.524839972e-03f, 5.521679445e-03f, 5.518509533e-03f, 5.515330240e-03f, 5.512141573e-03f, 5.508943538e-03f,
+5.505736141e-03f, 5.502519387e-03f, 5.499293284e-03f, 5.496057836e-03f, 5.492813050e-03f, 5.489558932e-03f, 5.486295489e-03f, 5.483022725e-03f, 5.479740648e-03f, 5.476449264e-03f,
+5.473148578e-03f, 5.469838596e-03f, 5.466519326e-03f, 5.463190773e-03f, 5.459852943e-03f, 5.456505842e-03f, 5.453149478e-03f, 5.449783855e-03f, 5.446408981e-03f, 5.443024861e-03f,
+5.439631502e-03f, 5.436228910e-03f, 5.432817092e-03f, 5.429396054e-03f, 5.425965802e-03f, 5.422526343e-03f, 5.419077683e-03f, 5.415619828e-03f, 5.412152785e-03f, 5.408676561e-03f,
+5.405191161e-03f, 5.401696593e-03f, 5.398192862e-03f, 5.394679975e-03f, 5.391157940e-03f, 5.387626761e-03f, 5.384086447e-03f, 5.380537003e-03f, 5.376978435e-03f, 5.373410752e-03f,
+5.369833959e-03f, 5.366248062e-03f, 5.362653069e-03f, 5.359048986e-03f, 5.355435820e-03f, 5.351813578e-03f, 5.348182265e-03f, 5.344541890e-03f, 5.340892458e-03f, 5.337233977e-03f,
+5.333566453e-03f, 5.329889893e-03f, 5.326204304e-03f, 5.322509692e-03f, 5.318806065e-03f, 5.315093429e-03f, 5.311371791e-03f, 5.307641158e-03f, 5.303901537e-03f, 5.300152935e-03f,
+5.296395358e-03f, 5.292628814e-03f, 5.288853310e-03f, 5.285068852e-03f, 5.281275448e-03f, 5.277473104e-03f, 5.273661828e-03f, 5.269841626e-03f, 5.266012506e-03f, 5.262174475e-03f,
+5.258327539e-03f, 5.254471706e-03f, 5.250606983e-03f, 5.246733377e-03f, 5.242850896e-03f, 5.238959545e-03f, 5.235059333e-03f, 5.231150267e-03f, 5.227232353e-03f, 5.223305600e-03f,
+5.219370014e-03f, 5.215425602e-03f, 5.211472372e-03f, 5.207510331e-03f, 5.203539486e-03f, 5.199559845e-03f, 5.195571415e-03f, 5.191574203e-03f, 5.187568216e-03f, 5.183553462e-03f,
+5.179529949e-03f, 5.175497683e-03f, 5.171456673e-03f, 5.167406924e-03f, 5.163348446e-03f, 5.159281245e-03f, 5.155205329e-03f, 5.151120705e-03f, 5.147027381e-03f, 5.142925364e-03f,
+5.138814662e-03f, 5.134695282e-03f, 5.130567232e-03f, 5.126430520e-03f, 5.122285152e-03f, 5.118131137e-03f, 5.113968482e-03f, 5.109797195e-03f, 5.105617283e-03f, 5.101428754e-03f,
+5.097231617e-03f, 5.093025877e-03f, 5.088811544e-03f, 5.084588624e-03f, 5.080357126e-03f, 5.076117057e-03f, 5.071868425e-03f, 5.067611238e-03f, 5.063345504e-03f, 5.059071229e-03f,
+5.054788423e-03f, 5.050497093e-03f, 5.046197247e-03f, 5.041888892e-03f, 5.037572037e-03f, 5.033246689e-03f, 5.028912856e-03f, 5.024570547e-03f, 5.020219769e-03f, 5.015860529e-03f,
+5.011492837e-03f, 5.007116700e-03f, 5.002732125e-03f, 4.998339122e-03f, 4.993937697e-03f, 4.989527860e-03f, 4.985109617e-03f, 4.980682977e-03f, 4.976247949e-03f, 4.971804539e-03f,
+4.967352757e-03f, 4.962892610e-03f, 4.958424107e-03f, 4.953947255e-03f, 4.949462063e-03f, 4.944968539e-03f, 4.940466691e-03f, 4.935956527e-03f, 4.931438056e-03f, 4.926911285e-03f,
+4.922376224e-03f, 4.917832879e-03f, 4.913281260e-03f, 4.908721375e-03f, 4.904153231e-03f, 4.899576838e-03f, 4.894992204e-03f, 4.890399336e-03f, 4.885798244e-03f, 4.881188935e-03f,
+4.876571418e-03f, 4.871945702e-03f, 4.867311794e-03f, 4.862669704e-03f, 4.858019439e-03f, 4.853361008e-03f, 4.848694420e-03f, 4.844019682e-03f, 4.839336804e-03f, 4.834645794e-03f,
+4.829946661e-03f, 4.825239412e-03f, 4.820524057e-03f, 4.815800604e-03f, 4.811069061e-03f, 4.806329438e-03f, 4.801581742e-03f, 4.796825983e-03f, 4.792062169e-03f, 4.787290308e-03f,
+4.782510409e-03f, 4.777722482e-03f, 4.772926534e-03f, 4.768122574e-03f, 4.763310611e-03f, 4.758490654e-03f, 4.753662711e-03f, 4.748826791e-03f, 4.743982903e-03f, 4.739131056e-03f,
+4.734271258e-03f, 4.729403518e-03f, 4.724527846e-03f, 4.719644249e-03f, 4.714752736e-03f, 4.709853317e-03f, 4.704946001e-03f, 4.700030795e-03f, 4.695107710e-03f, 4.690176754e-03f,
+4.685237935e-03f, 4.680291263e-03f, 4.675336747e-03f, 4.670374396e-03f, 4.665404218e-03f, 4.660426223e-03f, 4.655440420e-03f, 4.650446817e-03f, 4.645445424e-03f, 4.640436249e-03f,
+4.635419302e-03f, 4.630394591e-03f, 4.625362127e-03f, 4.620321917e-03f, 4.615273972e-03f, 4.610218299e-03f, 4.605154908e-03f, 4.600083809e-03f, 4.595005010e-03f, 4.589918521e-03f,
+4.584824351e-03f, 4.579722508e-03f, 4.574613003e-03f, 4.569495844e-03f, 4.564371041e-03f, 4.559238602e-03f, 4.554098537e-03f, 4.548950856e-03f, 4.543795567e-03f, 4.538632680e-03f,
+4.533462204e-03f, 4.528284149e-03f, 4.523098523e-03f, 4.517905337e-03f, 4.512704599e-03f, 4.507496319e-03f, 4.502280506e-03f, 4.497057169e-03f, 4.491826319e-03f, 4.486587963e-03f,
+4.481342113e-03f, 4.476088777e-03f, 4.470827964e-03f, 4.465559685e-03f, 4.460283948e-03f, 4.455000763e-03f, 4.449710140e-03f, 4.444412088e-03f, 4.439106616e-03f, 4.433793735e-03f,
+4.428473453e-03f, 4.423145781e-03f, 4.417810727e-03f, 4.412468302e-03f, 4.407118514e-03f, 4.401761374e-03f, 4.396396892e-03f, 4.391025076e-03f, 4.385645937e-03f, 4.380259484e-03f,
+4.374865726e-03f, 4.369464675e-03f, 4.364056338e-03f, 4.358640726e-03f, 4.353217849e-03f, 4.347787716e-03f, 4.342350337e-03f, 4.336905722e-03f, 4.331453881e-03f, 4.325994822e-03f,
+4.320528557e-03f, 4.315055095e-03f, 4.309574446e-03f, 4.304086619e-03f, 4.298591625e-03f, 4.293089473e-03f, 4.287580173e-03f, 4.282063735e-03f, 4.276540169e-03f, 4.271009485e-03f,
+4.265471692e-03f, 4.259926801e-03f, 4.254374821e-03f, 4.248815763e-03f, 4.243249636e-03f, 4.237676451e-03f, 4.232096217e-03f, 4.226508945e-03f, 4.220914643e-03f, 4.215313323e-03f,
+4.209704995e-03f, 4.204089668e-03f, 4.198467352e-03f, 4.192838058e-03f, 4.187201796e-03f, 4.181558575e-03f, 4.175908406e-03f, 4.170251299e-03f, 4.164587264e-03f, 4.158916311e-03f,
+4.153238450e-03f, 4.147553692e-03f, 4.141862046e-03f, 4.136163523e-03f, 4.130458133e-03f, 4.124745886e-03f, 4.119026792e-03f, 4.113300862e-03f, 4.107568106e-03f, 4.101828534e-03f,
+4.096082156e-03f, 4.090328982e-03f, 4.084569024e-03f, 4.078802290e-03f, 4.073028792e-03f, 4.067248540e-03f, 4.061461544e-03f, 4.055667814e-03f, 4.049867360e-03f, 4.044060194e-03f,
+4.038246326e-03f, 4.032425765e-03f, 4.026598522e-03f, 4.020764608e-03f, 4.014924033e-03f, 4.009076807e-03f, 4.003222941e-03f, 3.997362446e-03f, 3.991495331e-03f, 3.985621607e-03f,
+3.979741285e-03f, 3.973854375e-03f, 3.967960888e-03f, 3.962060835e-03f, 3.956154224e-03f, 3.950241068e-03f, 3.944321377e-03f, 3.938395161e-03f, 3.932462431e-03f, 3.926523197e-03f,
+3.920577471e-03f, 3.914625262e-03f, 3.908666581e-03f, 3.902701439e-03f, 3.896729847e-03f, 3.890751815e-03f, 3.884767353e-03f, 3.878776473e-03f, 3.872779185e-03f, 3.866775499e-03f,
+3.860765427e-03f, 3.854748980e-03f, 3.848726167e-03f, 3.842696999e-03f, 3.836661488e-03f, 3.830619644e-03f, 3.824571478e-03f, 3.818517000e-03f, 3.812456222e-03f, 3.806389154e-03f,
+3.800315806e-03f, 3.794236191e-03f, 3.788150318e-03f, 3.782058198e-03f, 3.775959842e-03f, 3.769855262e-03f, 3.763744467e-03f, 3.757627469e-03f, 3.751504279e-03f, 3.745374907e-03f,
+3.739239365e-03f, 3.733097663e-03f, 3.726949812e-03f, 3.720795823e-03f, 3.714635707e-03f, 3.708469476e-03f, 3.702297139e-03f, 3.696118708e-03f, 3.689934194e-03f, 3.683743608e-03f,
+3.677546961e-03f, 3.671344264e-03f, 3.665135528e-03f, 3.658920764e-03f, 3.652699983e-03f, 3.646473196e-03f, 3.640240414e-03f, 3.634001648e-03f, 3.627756909e-03f, 3.621506209e-03f,
+3.615249558e-03f, 3.608986967e-03f, 3.602718448e-03f, 3.596444012e-03f, 3.590163670e-03f, 3.583877433e-03f, 3.577585312e-03f, 3.571287318e-03f, 3.564983463e-03f, 3.558673757e-03f,
+3.552358213e-03f, 3.546036840e-03f, 3.539709651e-03f, 3.533376656e-03f, 3.527037868e-03f, 3.520693296e-03f, 3.514342952e-03f, 3.507986847e-03f, 3.501624994e-03f, 3.495257402e-03f,
+3.488884084e-03f, 3.482505051e-03f, 3.476120313e-03f, 3.469729883e-03f, 3.463333771e-03f, 3.456931989e-03f, 3.450524548e-03f, 3.444111460e-03f, 3.437692735e-03f, 3.431268386e-03f,
+3.424838424e-03f, 3.418402860e-03f, 3.411961705e-03f, 3.405514971e-03f, 3.399062669e-03f, 3.392604811e-03f, 3.386141408e-03f, 3.379672472e-03f, 3.373198014e-03f, 3.366718045e-03f,
+3.360232577e-03f, 3.353741622e-03f, 3.347245190e-03f, 3.340743294e-03f, 3.334235945e-03f, 3.327723154e-03f, 3.321204933e-03f, 3.314681294e-03f, 3.308152248e-03f, 3.301617806e-03f,
+3.295077981e-03f, 3.288532783e-03f, 3.281982224e-03f, 3.275426316e-03f, 3.268865071e-03f, 3.262298499e-03f, 3.255726614e-03f, 3.249149425e-03f, 3.242566946e-03f, 3.235979187e-03f,
+3.229386160e-03f, 3.222787877e-03f, 3.216184349e-03f, 3.209575589e-03f, 3.202961607e-03f, 3.196342416e-03f, 3.189718027e-03f, 3.183088452e-03f, 3.176453703e-03f, 3.169813791e-03f,
+3.163168728e-03f, 3.156518526e-03f, 3.149863196e-03f, 3.143202751e-03f, 3.136537202e-03f, 3.129866560e-03f, 3.123190838e-03f, 3.116510048e-03f, 3.109824201e-03f, 3.103133308e-03f,
+3.096437383e-03f, 3.089736436e-03f, 3.083030479e-03f, 3.076319525e-03f, 3.069603585e-03f, 3.062882671e-03f, 3.056156795e-03f, 3.049425968e-03f, 3.042690203e-03f, 3.035949512e-03f,
+3.029203905e-03f, 3.022453396e-03f, 3.015697997e-03f, 3.008937718e-03f, 3.002172572e-03f, 2.995402571e-03f, 2.988627727e-03f, 2.981848052e-03f, 2.975063557e-03f, 2.968274255e-03f,
+2.961480158e-03f, 2.954681277e-03f, 2.947877625e-03f, 2.941069214e-03f, 2.934256055e-03f, 2.927438161e-03f, 2.920615544e-03f, 2.913788215e-03f, 2.906956187e-03f, 2.900119472e-03f,
+2.893278081e-03f, 2.886432027e-03f, 2.879581322e-03f, 2.872725978e-03f, 2.865866007e-03f, 2.859001422e-03f, 2.852132233e-03f, 2.845258454e-03f, 2.838380096e-03f, 2.831497171e-03f,
+2.824609692e-03f, 2.817717671e-03f, 2.810821120e-03f, 2.803920051e-03f, 2.797014476e-03f, 2.790104407e-03f, 2.783189857e-03f, 2.776270837e-03f, 2.769347360e-03f, 2.762419439e-03f,
+2.755487084e-03f, 2.748550309e-03f, 2.741609125e-03f, 2.734663546e-03f, 2.727713582e-03f, 2.720759246e-03f, 2.713800551e-03f, 2.706837509e-03f, 2.699870132e-03f, 2.692898432e-03f,
+2.685922421e-03f, 2.678942112e-03f, 2.671957517e-03f, 2.664968649e-03f, 2.657975519e-03f, 2.650978140e-03f, 2.643976524e-03f, 2.636970684e-03f, 2.629960631e-03f, 2.622946379e-03f,
+2.615927939e-03f, 2.608905323e-03f, 2.601878545e-03f, 2.594847617e-03f, 2.587812550e-03f, 2.580773357e-03f, 2.573730051e-03f, 2.566682644e-03f, 2.559631148e-03f, 2.552575576e-03f,
+2.545515940e-03f, 2.538452252e-03f, 2.531384526e-03f, 2.524312772e-03f, 2.517237005e-03f, 2.510157235e-03f, 2.503073476e-03f, 2.495985740e-03f, 2.488894040e-03f, 2.481798387e-03f,
+2.474698795e-03f, 2.467595275e-03f, 2.460487841e-03f, 2.453376505e-03f, 2.446261278e-03f, 2.439142175e-03f, 2.432019207e-03f, 2.424892386e-03f, 2.417761726e-03f, 2.410627238e-03f,
+2.403488936e-03f, 2.396346832e-03f, 2.389200937e-03f, 2.382051266e-03f, 2.374897830e-03f, 2.367740642e-03f, 2.360579714e-03f, 2.353415060e-03f, 2.346246691e-03f, 2.339074620e-03f,
+2.331898860e-03f, 2.324719423e-03f, 2.317536322e-03f, 2.310349569e-03f, 2.303159178e-03f, 2.295965161e-03f, 2.288767529e-03f, 2.281566297e-03f, 2.274361476e-03f, 2.267153079e-03f,
+2.259941120e-03f, 2.252725609e-03f, 2.245506561e-03f, 2.238283987e-03f, 2.231057901e-03f, 2.223828315e-03f, 2.216595241e-03f, 2.209358693e-03f, 2.202118683e-03f, 2.194875224e-03f,
+2.187628328e-03f, 2.180378008e-03f, 2.173124278e-03f, 2.165867148e-03f, 2.158606633e-03f, 2.151342745e-03f, 2.144075496e-03f, 2.136804900e-03f, 2.129530969e-03f, 2.122253715e-03f,
+2.114973153e-03f, 2.107689293e-03f, 2.100402150e-03f, 2.093111735e-03f, 2.085818063e-03f, 2.078521144e-03f, 2.071220992e-03f, 2.063917621e-03f, 2.056611042e-03f, 2.049301268e-03f,
+2.041988313e-03f, 2.034672189e-03f, 2.027352909e-03f, 2.020030485e-03f, 2.012704930e-03f, 2.005376258e-03f, 1.998044481e-03f, 1.990709612e-03f, 1.983371664e-03f, 1.976030649e-03f,
+1.968686580e-03f, 1.961339471e-03f, 1.953989334e-03f, 1.946636182e-03f, 1.939280027e-03f, 1.931920883e-03f, 1.924558763e-03f, 1.917193679e-03f, 1.909825644e-03f, 1.902454671e-03f,
+1.895080773e-03f, 1.887703964e-03f, 1.880324255e-03f, 1.872941659e-03f, 1.865556190e-03f, 1.858167861e-03f, 1.850776684e-03f, 1.843382672e-03f, 1.835985839e-03f, 1.828586196e-03f,
+1.821183758e-03f, 1.813778537e-03f, 1.806370545e-03f, 1.798959797e-03f, 1.791546304e-03f, 1.784130080e-03f, 1.776711137e-03f, 1.769289490e-03f, 1.761865150e-03f, 1.754438130e-03f,
+1.747008444e-03f, 1.739576104e-03f, 1.732141124e-03f, 1.724703516e-03f, 1.717263294e-03f, 1.709820470e-03f, 1.702375058e-03f, 1.694927070e-03f, 1.687476519e-03f, 1.680023419e-03f,
+1.672567782e-03f, 1.665109621e-03f, 1.657648950e-03f, 1.650185781e-03f, 1.642720128e-03f, 1.635252003e-03f, 1.627781420e-03f, 1.620308391e-03f, 1.612832930e-03f, 1.605355049e-03f,
+1.597874762e-03f, 1.590392082e-03f, 1.582907022e-03f, 1.575419594e-03f, 1.567929812e-03f, 1.560437689e-03f, 1.552943238e-03f, 1.545446472e-03f, 1.537947404e-03f, 1.530446047e-03f,
+1.522942414e-03f, 1.515436519e-03f, 1.507928374e-03f, 1.500417992e-03f, 1.492905387e-03f, 1.485390572e-03f, 1.477873560e-03f, 1.470354363e-03f, 1.462832995e-03f, 1.455309470e-03f,
+1.447783799e-03f, 1.440255997e-03f, 1.432726076e-03f, 1.425194050e-03f, 1.417659931e-03f, 1.410123733e-03f, 1.402585469e-03f, 1.395045152e-03f, 1.387502795e-03f, 1.379958411e-03f,
+1.372412014e-03f, 1.364863616e-03f, 1.357313231e-03f, 1.349760871e-03f, 1.342206551e-03f, 1.334650283e-03f, 1.327092080e-03f, 1.319531955e-03f, 1.311969922e-03f, 1.304405994e-03f,
+1.296840183e-03f, 1.289272504e-03f, 1.281702969e-03f, 1.274131591e-03f, 1.266558384e-03f, 1.258983361e-03f, 1.251406534e-03f, 1.243827918e-03f, 1.236247525e-03f, 1.228665369e-03f,
+1.221081462e-03f, 1.213495818e-03f, 1.205908450e-03f, 1.198319371e-03f, 1.190728595e-03f, 1.183136135e-03f, 1.175542003e-03f, 1.167946214e-03f, 1.160348779e-03f, 1.152749714e-03f,
+1.145149029e-03f, 1.137546740e-03f, 1.129942859e-03f, 1.122337399e-03f, 1.114730374e-03f, 1.107121797e-03f, 1.099511680e-03f, 1.091900038e-03f, 1.084286883e-03f, 1.076672229e-03f,
+1.069056089e-03f, 1.061438476e-03f, 1.053819404e-03f, 1.046198885e-03f, 1.038576933e-03f, 1.030953561e-03f, 1.023328782e-03f, 1.015702610e-03f, 1.008075058e-03f, 1.000446139e-03f,
+9.928158662e-04f, 9.851842531e-04f, 9.775513128e-04f, 9.699170585e-04f, 9.622815037e-04f, 9.546446614e-04f, 9.470065451e-04f, 9.393671678e-04f, 9.317265430e-04f, 9.240846838e-04f,
+9.164416036e-04f, 9.087973155e-04f, 9.011518329e-04f, 8.935051691e-04f, 8.858573373e-04f, 8.782083507e-04f, 8.705582227e-04f, 8.629069665e-04f, 8.552545954e-04f, 8.476011227e-04f,
+8.399465617e-04f, 8.322909256e-04f, 8.246342277e-04f, 8.169764813e-04f, 8.093176998e-04f, 8.016578963e-04f, 7.939970841e-04f, 7.863352766e-04f, 7.786724871e-04f, 7.710087288e-04f,
+7.633440150e-04f, 7.556783590e-04f, 7.480117741e-04f, 7.403442736e-04f, 7.326758708e-04f, 7.250065790e-04f, 7.173364115e-04f, 7.096653816e-04f, 7.019935025e-04f, 6.943207876e-04f,
+6.866472502e-04f, 6.789729035e-04f, 6.712977610e-04f, 6.636218358e-04f, 6.559451413e-04f, 6.482676908e-04f, 6.405894975e-04f, 6.329105749e-04f, 6.252309362e-04f, 6.175505946e-04f,
+6.098695636e-04f, 6.021878564e-04f, 5.945054863e-04f, 5.868224666e-04f, 5.791388107e-04f, 5.714545318e-04f, 5.637696433e-04f, 5.560841585e-04f, 5.483980906e-04f, 5.407114530e-04f,
+5.330242590e-04f, 5.253365219e-04f, 5.176482551e-04f, 5.099594717e-04f, 5.022701852e-04f, 4.945804089e-04f, 4.868901560e-04f, 4.791994399e-04f, 4.715082739e-04f, 4.638166713e-04f,
+4.561246454e-04f, 4.484322095e-04f, 4.407393770e-04f, 4.330461611e-04f, 4.253525752e-04f, 4.176586326e-04f, 4.099643465e-04f, 4.022697304e-04f, 3.945747974e-04f, 3.868795610e-04f,
+3.791840345e-04f, 3.714882311e-04f, 3.637921641e-04f, 3.560958470e-04f, 3.483992929e-04f, 3.407025152e-04f, 3.330055272e-04f, 3.253083423e-04f, 3.176109736e-04f, 3.099134347e-04f,
+3.022157386e-04f, 2.945178989e-04f, 2.868199286e-04f, 2.791218413e-04f, 2.714236502e-04f, 2.637253685e-04f, 2.560270097e-04f, 2.483285869e-04f, 2.406301136e-04f, 2.329316030e-04f,
+2.252330684e-04f, 2.175345231e-04f, 2.098359805e-04f, 2.021374538e-04f, 1.944389563e-04f, 1.867405013e-04f, 1.790421022e-04f, 1.713437723e-04f, 1.636455248e-04f, 1.559473730e-04f,
+1.482493302e-04f, 1.405514098e-04f, 1.328536250e-04f, 1.251559891e-04f, 1.174585154e-04f, 1.097612173e-04f, 1.020641079e-04f, 9.436720066e-05f, 8.667050878e-05f, 7.897404557e-05f,
+7.127782432e-05f, 6.358185831e-05f, 5.588616083e-05f, 4.819074518e-05f, 4.049562462e-05f, 3.280081245e-05f, 2.510632194e-05f, 1.741216638e-05f, 9.718359047e-06f, 2.024913214e-06f,
+-5.668157842e-06f, -1.336084084e-05f, -2.105312252e-05f, -2.874498959e-05f, -3.643642879e-05f, -4.412742685e-05f, -5.181797050e-05f, -5.950804648e-05f, -6.719764151e-05f, -7.488674234e-05f,
+-8.257533570e-05f, -9.026340833e-05f, -9.795094697e-05f, -1.056379384e-04f, -1.133243693e-04f, -1.210102264e-04f, -1.286954965e-04f, -1.363801664e-04f, -1.440642227e-04f, -1.517476523e-04f,
+-1.594304419e-04f, -1.671125783e-04f, -1.747940481e-04f, -1.824748383e-04f, -1.901549354e-04f, -1.978343263e-04f, -2.055129978e-04f, -2.131909367e-04f, -2.208681296e-04f, -2.285445633e-04f,
+-2.362202247e-04f, -2.438951006e-04f, -2.515691776e-04f, -2.592424425e-04f, -2.669148822e-04f, -2.745864835e-04f, -2.822572330e-04f, -2.899271177e-04f, -2.975961242e-04f, -3.052642394e-04f,
+-3.129314501e-04f, -3.205977431e-04f, -3.282631051e-04f, -3.359275230e-04f, -3.435909835e-04f, -3.512534736e-04f, -3.589149799e-04f, -3.665754893e-04f, -3.742349886e-04f, -3.818934646e-04f,
+-3.895509041e-04f, -3.972072940e-04f, -4.048626211e-04f, -4.125168721e-04f, -4.201700340e-04f, -4.278220936e-04f, -4.354730376e-04f, -4.431228529e-04f, -4.507715264e-04f, -4.584190449e-04f,
+-4.660653952e-04f, -4.737105642e-04f, -4.813545387e-04f, -4.889973056e-04f, -4.966388517e-04f, -5.042791639e-04f, -5.119182290e-04f, -5.195560340e-04f, -5.271925656e-04f, -5.348278108e-04f,
+-5.424617563e-04f, -5.500943891e-04f, -5.577256961e-04f, -5.653556641e-04f, -5.729842800e-04f, -5.806115308e-04f, -5.882374032e-04f, -5.958618841e-04f, -6.034849606e-04f, -6.111066194e-04f,
+-6.187268474e-04f, -6.263456317e-04f, -6.339629590e-04f, -6.415788162e-04f, -6.491931904e-04f, -6.568060684e-04f, -6.644174371e-04f, -6.720272834e-04f, -6.796355943e-04f, -6.872423568e-04f,
+-6.948475576e-04f, -7.024511838e-04f, -7.100532223e-04f, -7.176536601e-04f, -7.252524841e-04f, -7.328496812e-04f, -7.404452384e-04f, -7.480391426e-04f, -7.556313809e-04f, -7.632219401e-04f,
+-7.708108072e-04f, -7.783979693e-04f, -7.859834133e-04f, -7.935671261e-04f, -8.011490947e-04f, -8.087293061e-04f, -8.163077474e-04f, -8.238844055e-04f, -8.314592673e-04f, -8.390323200e-04f,
+-8.466035504e-04f, -8.541729457e-04f, -8.617404928e-04f, -8.693061786e-04f, -8.768699904e-04f, -8.844319150e-04f, -8.919919395e-04f, -8.995500509e-04f, -9.071062363e-04f, -9.146604827e-04f,
+-9.222127771e-04f, -9.297631066e-04f, -9.373114582e-04f, -9.448578190e-04f, -9.524021761e-04f, -9.599445164e-04f, -9.674848272e-04f, -9.750230953e-04f, -9.825593080e-04f, -9.900934523e-04f,
+-9.976255153e-04f, -1.005155484e-03f, -1.012683346e-03f, -1.020209087e-03f, -1.027732696e-03f, -1.035254158e-03f, -1.042773462e-03f, -1.050290595e-03f, -1.057805543e-03f, -1.065318293e-03f,
+-1.072828833e-03f, -1.080337150e-03f, -1.087843231e-03f, -1.095347064e-03f, -1.102848634e-03f, -1.110347930e-03f, -1.117844939e-03f, -1.125339647e-03f, -1.132832042e-03f, -1.140322112e-03f,
+-1.147809842e-03f, -1.155295221e-03f, -1.162778236e-03f, -1.170258873e-03f, -1.177737120e-03f, -1.185212965e-03f, -1.192686394e-03f, -1.200157394e-03f, -1.207625953e-03f, -1.215092059e-03f,
+-1.222555697e-03f, -1.230016856e-03f, -1.237475523e-03f, -1.244931684e-03f, -1.252385328e-03f, -1.259836441e-03f, -1.267285011e-03f, -1.274731024e-03f, -1.282174469e-03f, -1.289615332e-03f,
+-1.297053601e-03f, -1.304489263e-03f, -1.311922305e-03f, -1.319352715e-03f, -1.326780479e-03f, -1.334205586e-03f, -1.341628022e-03f, -1.349047775e-03f, -1.356464831e-03f, -1.363879179e-03f,
+-1.371290806e-03f, -1.378699699e-03f, -1.386105845e-03f, -1.393509232e-03f, -1.400909846e-03f, -1.408307676e-03f, -1.415702709e-03f, -1.423094932e-03f, -1.430484332e-03f, -1.437870897e-03f,
+-1.445254614e-03f, -1.452635471e-03f, -1.460013455e-03f, -1.467388553e-03f, -1.474760753e-03f, -1.482130042e-03f, -1.489496407e-03f, -1.496859837e-03f, -1.504220318e-03f, -1.511577837e-03f,
+-1.518932383e-03f, -1.526283943e-03f, -1.533632503e-03f, -1.540978052e-03f, -1.548320578e-03f, -1.555660066e-03f, -1.562996506e-03f, -1.570329884e-03f, -1.577660188e-03f, -1.584987405e-03f,
+-1.592311524e-03f, -1.599632530e-03f, -1.606950413e-03f, -1.614265159e-03f, -1.621576755e-03f, -1.628885191e-03f, -1.636190452e-03f, -1.643492526e-03f, -1.650791402e-03f, -1.658087066e-03f,
+-1.665379506e-03f, -1.672668710e-03f, -1.679954666e-03f, -1.687237360e-03f, -1.694516780e-03f, -1.701792914e-03f, -1.709065750e-03f, -1.716335275e-03f, -1.723601477e-03f, -1.730864343e-03f,
+-1.738123861e-03f, -1.745380019e-03f, -1.752632804e-03f, -1.759882203e-03f, -1.767128205e-03f, -1.774370798e-03f, -1.781609968e-03f, -1.788845703e-03f, -1.796077992e-03f, -1.803306821e-03f,
+-1.810532179e-03f, -1.817754053e-03f, -1.824972431e-03f, -1.832187301e-03f, -1.839398649e-03f, -1.846606465e-03f, -1.853810735e-03f, -1.861011448e-03f, -1.868208590e-03f, -1.875402151e-03f,
+-1.882592117e-03f, -1.889778477e-03f, -1.896961218e-03f, -1.904140327e-03f, -1.911315793e-03f, -1.918487604e-03f, -1.925655747e-03f, -1.932820210e-03f, -1.939980981e-03f, -1.947138047e-03f,
+-1.954291397e-03f, -1.961441018e-03f, -1.968586898e-03f, -1.975729026e-03f, -1.982867388e-03f, -1.990001972e-03f, -1.997132767e-03f, -2.004259761e-03f, -2.011382940e-03f, -2.018502294e-03f,
+-2.025617809e-03f, -2.032729475e-03f, -2.039837278e-03f, -2.046941207e-03f, -2.054041250e-03f, -2.061137394e-03f, -2.068229628e-03f, -2.075317939e-03f, -2.082402315e-03f, -2.089482744e-03f,
+-2.096559215e-03f, -2.103631715e-03f, -2.110700232e-03f, -2.117764755e-03f, -2.124825270e-03f, -2.131881767e-03f, -2.138934233e-03f, -2.145982656e-03f, -2.153027024e-03f, -2.160067325e-03f,
+-2.167103548e-03f, -2.174135680e-03f, -2.181163709e-03f, -2.188187624e-03f, -2.195207412e-03f, -2.202223061e-03f, -2.209234561e-03f, -2.216241898e-03f, -2.223245060e-03f, -2.230244037e-03f,
+-2.237238816e-03f, -2.244229384e-03f, -2.251215731e-03f, -2.258197845e-03f, -2.265175713e-03f, -2.272149323e-03f, -2.279118665e-03f, -2.286083725e-03f, -2.293044493e-03f, -2.300000956e-03f,
+-2.306953103e-03f, -2.313900921e-03f, -2.320844399e-03f, -2.327783526e-03f, -2.334718289e-03f, -2.341648676e-03f, -2.348574677e-03f, -2.355496278e-03f, -2.362413469e-03f, -2.369326238e-03f,
+-2.376234572e-03f, -2.383138461e-03f, -2.390037892e-03f, -2.396932854e-03f, -2.403823335e-03f, -2.410709324e-03f, -2.417590808e-03f, -2.424467776e-03f, -2.431340217e-03f, -2.438208118e-03f,
+-2.445071469e-03f, -2.451930257e-03f, -2.458784470e-03f, -2.465634098e-03f, -2.472479129e-03f, -2.479319550e-03f, -2.486155351e-03f, -2.492986520e-03f, -2.499813045e-03f, -2.506634915e-03f,
+-2.513452117e-03f, -2.520264642e-03f, -2.527072476e-03f, -2.533875609e-03f, -2.540674029e-03f, -2.547467724e-03f, -2.554256683e-03f, -2.561040895e-03f, -2.567820348e-03f, -2.574595030e-03f,
+-2.581364930e-03f, -2.588130036e-03f, -2.594890338e-03f, -2.601645823e-03f, -2.608396481e-03f, -2.615142299e-03f, -2.621883267e-03f, -2.628619373e-03f, -2.635350605e-03f, -2.642076952e-03f,
+-2.648798403e-03f, -2.655514947e-03f, -2.662226571e-03f, -2.668933265e-03f, -2.675635018e-03f, -2.682331817e-03f, -2.689023652e-03f, -2.695710512e-03f, -2.702392384e-03f, -2.709069259e-03f,
+-2.715741123e-03f, -2.722407967e-03f, -2.729069779e-03f, -2.735726547e-03f, -2.742378261e-03f, -2.749024909e-03f, -2.755666479e-03f, -2.762302962e-03f, -2.768934344e-03f, -2.775560616e-03f,
+-2.782181767e-03f, -2.788797783e-03f, -2.795408656e-03f, -2.802014373e-03f, -2.808614923e-03f, -2.815210296e-03f, -2.821800479e-03f, -2.828385463e-03f, -2.834965235e-03f, -2.841539785e-03f,
+-2.848109101e-03f, -2.854673173e-03f, -2.861231990e-03f, -2.867785539e-03f, -2.874333811e-03f, -2.880876794e-03f, -2.887414477e-03f, -2.893946849e-03f, -2.900473900e-03f, -2.906995617e-03f,
+-2.913511991e-03f, -2.920023009e-03f, -2.926528662e-03f, -2.933028937e-03f, -2.939523825e-03f, -2.946013314e-03f, -2.952497393e-03f, -2.958976051e-03f, -2.965449278e-03f, -2.971917062e-03f,
+-2.978379393e-03f, -2.984836259e-03f, -2.991287650e-03f, -2.997733555e-03f, -3.004173963e-03f, -3.010608863e-03f, -3.017038244e-03f, -3.023462096e-03f, -3.029880407e-03f, -3.036293167e-03f,
+-3.042700366e-03f, -3.049101991e-03f, -3.055498032e-03f, -3.061888480e-03f, -3.068273322e-03f, -3.074652548e-03f, -3.081026147e-03f, -3.087394110e-03f, -3.093756424e-03f, -3.100113079e-03f,
+-3.106464064e-03f, -3.112809370e-03f, -3.119148984e-03f, -3.125482897e-03f, -3.131811098e-03f, -3.138133576e-03f, -3.144450320e-03f, -3.150761320e-03f, -3.157066565e-03f, -3.163366044e-03f,
+-3.169659748e-03f, -3.175947665e-03f, -3.182229785e-03f, -3.188506097e-03f, -3.194776591e-03f, -3.201041256e-03f, -3.207300081e-03f, -3.213553056e-03f, -3.219800171e-03f, -3.226041415e-03f,
+-3.232276778e-03f, -3.238506249e-03f, -3.244729817e-03f, -3.250947472e-03f, -3.257159204e-03f, -3.263365002e-03f, -3.269564856e-03f, -3.275758755e-03f, -3.281946689e-03f, -3.288128648e-03f,
+-3.294304621e-03f, -3.300474598e-03f, -3.306638568e-03f, -3.312796521e-03f, -3.318948447e-03f, -3.325094335e-03f, -3.331234175e-03f, -3.337367957e-03f, -3.343495670e-03f, -3.349617305e-03f,
+-3.355732850e-03f, -3.361842297e-03f, -3.367945633e-03f, -3.374042849e-03f, -3.380133936e-03f, -3.386218882e-03f, -3.392297677e-03f, -3.398370312e-03f, -3.404436776e-03f, -3.410497058e-03f,
+-3.416551149e-03f, -3.422599039e-03f, -3.428640717e-03f, -3.434676173e-03f, -3.440705398e-03f, -3.446728380e-03f, -3.452745111e-03f, -3.458755579e-03f, -3.464759775e-03f, -3.470757689e-03f,
+-3.476749310e-03f, -3.482734629e-03f, -3.488713635e-03f, -3.494686319e-03f, -3.500652671e-03f, -3.506612680e-03f, -3.512566336e-03f, -3.518513630e-03f, -3.524454552e-03f, -3.530389091e-03f,
+-3.536317238e-03f, -3.542238983e-03f, -3.548154315e-03f, -3.554063226e-03f, -3.559965704e-03f, -3.565861741e-03f, -3.571751326e-03f, -3.577634449e-03f, -3.583511101e-03f, -3.589381272e-03f,
+-3.595244952e-03f, -3.601102130e-03f, -3.606952799e-03f, -3.612796946e-03f, -3.618634563e-03f, -3.624465641e-03f, -3.630290168e-03f, -3.636108136e-03f, -3.641919535e-03f, -3.647724355e-03f,
+-3.653522586e-03f, -3.659314218e-03f, -3.665099243e-03f, -3.670877650e-03f, -3.676649430e-03f, -3.682414572e-03f, -3.688173068e-03f, -3.693924907e-03f, -3.699670081e-03f, -3.705408579e-03f,
+-3.711140392e-03f, -3.716865510e-03f, -3.722583924e-03f, -3.728295624e-03f, -3.734000601e-03f, -3.739698845e-03f, -3.745390347e-03f, -3.751075097e-03f, -3.756753085e-03f, -3.762424303e-03f,
+-3.768088740e-03f, -3.773746387e-03f, -3.779397236e-03f, -3.785041275e-03f, -3.790678497e-03f, -3.796308891e-03f, -3.801932448e-03f, -3.807549159e-03f, -3.813159014e-03f, -3.818762005e-03f,
+-3.824358121e-03f, -3.829947353e-03f, -3.835529693e-03f, -3.841105130e-03f, -3.846673656e-03f, -3.852235260e-03f, -3.857789935e-03f, -3.863337670e-03f, -3.868878457e-03f, -3.874412286e-03f,
+-3.879939147e-03f, -3.885459033e-03f, -3.890971933e-03f, -3.896477838e-03f, -3.901976740e-03f, -3.907468628e-03f, -3.912953494e-03f, -3.918431329e-03f, -3.923902124e-03f, -3.929365869e-03f,
+-3.934822556e-03f, -3.940272175e-03f, -3.945714717e-03f, -3.951150173e-03f, -3.956578535e-03f, -3.961999792e-03f, -3.967413937e-03f, -3.972820960e-03f, -3.978220852e-03f, -3.983613604e-03f,
+-3.988999207e-03f, -3.994377652e-03f, -3.999748931e-03f, -4.005113034e-03f, -4.010469953e-03f, -4.015819678e-03f, -4.021162200e-03f, -4.026497512e-03f, -4.031825603e-03f, -4.037146465e-03f,
+-4.042460089e-03f, -4.047766467e-03f, -4.053065589e-03f, -4.058357448e-03f, -4.063642033e-03f, -4.068919336e-03f, -4.074189348e-03f, -4.079452062e-03f, -4.084707467e-03f, -4.089955556e-03f,
+-4.095196319e-03f, -4.100429747e-03f, -4.105655833e-03f, -4.110874568e-03f, -4.116085942e-03f, -4.121289947e-03f, -4.126486575e-03f, -4.131675817e-03f, -4.136857664e-03f, -4.142032108e-03f,
+-4.147199140e-03f, -4.152358752e-03f, -4.157510934e-03f, -4.162655679e-03f, -4.167792978e-03f, -4.172922823e-03f, -4.178045205e-03f, -4.183160114e-03f, -4.188267544e-03f, -4.193367486e-03f,
+-4.198459931e-03f, -4.203544870e-03f, -4.208622295e-03f, -4.213692199e-03f, -4.218754572e-03f, -4.223809406e-03f, -4.228856692e-03f, -4.233896423e-03f, -4.238928590e-03f, -4.243953185e-03f,
+-4.248970199e-03f, -4.253979624e-03f, -4.258981452e-03f, -4.263975675e-03f, -4.268962284e-03f, -4.273941270e-03f, -4.278912627e-03f, -4.283876345e-03f, -4.288832417e-03f, -4.293780834e-03f,
+-4.298721588e-03f, -4.303654671e-03f, -4.308580074e-03f, -4.313497791e-03f, -4.318407811e-03f, -4.323310128e-03f, -4.328204733e-03f, -4.333091619e-03f, -4.337970776e-03f, -4.342842198e-03f,
+-4.347705876e-03f, -4.352561802e-03f, -4.357409967e-03f, -4.362250365e-03f, -4.367082987e-03f, -4.371907825e-03f, -4.376724871e-03f, -4.381534117e-03f, -4.386335555e-03f, -4.391129178e-03f,
+-4.395914977e-03f, -4.400692944e-03f, -4.405463073e-03f, -4.410225354e-03f, -4.414979780e-03f, -4.419726343e-03f, -4.424465036e-03f, -4.429195850e-03f, -4.433918778e-03f, -4.438633811e-03f,
+-4.443340943e-03f, -4.448040166e-03f, -4.452731471e-03f, -4.457414851e-03f, -4.462090299e-03f, -4.466757806e-03f, -4.471417365e-03f, -4.476068968e-03f, -4.480712608e-03f, -4.485348277e-03f,
+-4.489975968e-03f, -4.494595672e-03f, -4.499207382e-03f, -4.503811091e-03f, -4.508406791e-03f, -4.512994474e-03f, -4.517574134e-03f, -4.522145762e-03f, -4.526709351e-03f, -4.531264893e-03f,
+-4.535812381e-03f, -4.540351808e-03f, -4.544883166e-03f, -4.549406447e-03f, -4.553921645e-03f, -4.558428752e-03f, -4.562927760e-03f, -4.567418662e-03f, -4.571901450e-03f, -4.576376118e-03f,
+-4.580842658e-03f, -4.585301063e-03f, -4.589751325e-03f, -4.594193437e-03f, -4.598627392e-03f, -4.603053183e-03f, -4.607470801e-03f, -4.611880241e-03f, -4.616281495e-03f, -4.620674556e-03f,
+-4.625059415e-03f, -4.629436068e-03f, -4.633804505e-03f, -4.638164720e-03f, -4.642516706e-03f, -4.646860456e-03f, -4.651195963e-03f, -4.655523219e-03f, -4.659842218e-03f, -4.664152952e-03f,
+-4.668455414e-03f, -4.672749598e-03f, -4.677035496e-03f, -4.681313101e-03f, -4.685582407e-03f, -4.689843406e-03f, -4.694096092e-03f, -4.698340457e-03f, -4.702576495e-03f, -4.706804198e-03f,
+-4.711023560e-03f, -4.715234574e-03f, -4.719437233e-03f, -4.723631530e-03f, -4.727817459e-03f, -4.731995012e-03f, -4.736164183e-03f, -4.740324964e-03f, -4.744477350e-03f, -4.748621333e-03f,
+-4.752756907e-03f, -4.756884064e-03f, -4.761002799e-03f, -4.765113105e-03f, -4.769214974e-03f, -4.773308400e-03f, -4.777393376e-03f, -4.781469897e-03f, -4.785537954e-03f, -4.789597543e-03f,
+-4.793648655e-03f, -4.797691284e-03f, -4.801725424e-03f, -4.805751069e-03f, -4.809768211e-03f, -4.813776845e-03f, -4.817776963e-03f, -4.821768559e-03f, -4.825751627e-03f, -4.829726161e-03f,
+-4.833692153e-03f, -4.837649597e-03f, -4.841598488e-03f, -4.845538818e-03f, -4.849470581e-03f, -4.853393771e-03f, -4.857308381e-03f, -4.861214405e-03f, -4.865111838e-03f, -4.869000671e-03f,
+-4.872880900e-03f, -4.876752518e-03f, -4.880615518e-03f, -4.884469895e-03f, -4.888315641e-03f, -4.892152752e-03f, -4.895981220e-03f, -4.899801040e-03f, -4.903612205e-03f, -4.907414709e-03f,
+-4.911208547e-03f, -4.914993711e-03f, -4.918770196e-03f, -4.922537995e-03f, -4.926297104e-03f, -4.930047514e-03f, -4.933789222e-03f, -4.937522219e-03f, -4.941246501e-03f, -4.944962062e-03f,
+-4.948668894e-03f, -4.952366994e-03f, -4.956056353e-03f, -4.959736968e-03f, -4.963408831e-03f, -4.967071936e-03f, -4.970726278e-03f, -4.974371852e-03f, -4.978008650e-03f, -4.981636667e-03f,
+-4.985255898e-03f, -4.988866336e-03f, -4.992467976e-03f, -4.996060812e-03f, -4.999644838e-03f, -5.003220049e-03f, -5.006786438e-03f, -5.010344000e-03f, -5.013892729e-03f, -5.017432619e-03f,
+-5.020963666e-03f, -5.024485863e-03f, -5.027999204e-03f, -5.031503684e-03f, -5.034999297e-03f, -5.038486038e-03f, -5.041963901e-03f, -5.045432880e-03f, -5.048892970e-03f, -5.052344166e-03f,
+-5.055786461e-03f, -5.059219851e-03f, -5.062644330e-03f, -5.066059892e-03f, -5.069466532e-03f, -5.072864244e-03f, -5.076253024e-03f, -5.079632865e-03f, -5.083003762e-03f, -5.086365710e-03f,
+-5.089718704e-03f, -5.093062737e-03f, -5.096397806e-03f, -5.099723904e-03f, -5.103041025e-03f, -5.106349166e-03f, -5.109648320e-03f, -5.112938483e-03f, -5.116219649e-03f, -5.119491812e-03f,
+-5.122754968e-03f, -5.126009112e-03f, -5.129254238e-03f, -5.132490341e-03f, -5.135717415e-03f, -5.138935457e-03f, -5.142144460e-03f, -5.145344420e-03f, -5.148535332e-03f, -5.151717189e-03f,
+-5.154889988e-03f, -5.158053724e-03f, -5.161208391e-03f, -5.164353984e-03f, -5.167490498e-03f, -5.170617929e-03f, -5.173736271e-03f, -5.176845520e-03f, -5.179945670e-03f, -5.183036717e-03f,
+-5.186118655e-03f, -5.189191481e-03f, -5.192255188e-03f, -5.195309772e-03f, -5.198355229e-03f, -5.201391553e-03f, -5.204418740e-03f, -5.207436785e-03f, -5.210445683e-03f, -5.213445430e-03f,
+-5.216436020e-03f, -5.219417449e-03f, -5.222389712e-03f, -5.225352805e-03f, -5.228306722e-03f, -5.231251460e-03f, -5.234187014e-03f, -5.237113378e-03f, -5.240030549e-03f, -5.242938522e-03f,
+-5.245837291e-03f, -5.248726854e-03f, -5.251607205e-03f, -5.254478339e-03f, -5.257340252e-03f, -5.260192940e-03f, -5.263036398e-03f, -5.265870621e-03f, -5.268695606e-03f, -5.271511348e-03f,
+-5.274317842e-03f, -5.277115084e-03f, -5.279903069e-03f, -5.282681794e-03f, -5.285451254e-03f, -5.288211444e-03f, -5.290962361e-03f, -5.293703999e-03f, -5.296436355e-03f, -5.299159425e-03f,
+-5.301873203e-03f, -5.304577687e-03f, -5.307272871e-03f, -5.309958752e-03f, -5.312635325e-03f, -5.315302586e-03f, -5.317960531e-03f, -5.320609157e-03f, -5.323248457e-03f, -5.325878430e-03f,
+-5.328499070e-03f, -5.331110373e-03f, -5.333712336e-03f, -5.336304955e-03f, -5.338888225e-03f, -5.341462142e-03f, -5.344026702e-03f, -5.346581902e-03f, -5.349127738e-03f, -5.351664204e-03f,
+-5.354191299e-03f, -5.356709017e-03f, -5.359217355e-03f, -5.361716309e-03f, -5.364205875e-03f, -5.366686049e-03f, -5.369156828e-03f, -5.371618207e-03f, -5.374070183e-03f, -5.376512752e-03f,
+-5.378945911e-03f, -5.381369654e-03f, -5.383783980e-03f, -5.386188884e-03f, -5.388584362e-03f, -5.390970411e-03f, -5.393347027e-03f, -5.395714206e-03f, -5.398071946e-03f, -5.400420241e-03f,
+-5.402759089e-03f, -5.405088486e-03f, -5.407408429e-03f, -5.409718913e-03f, -5.412019936e-03f, -5.414311494e-03f, -5.416593583e-03f, -5.418866200e-03f, -5.421129341e-03f, -5.423383003e-03f,
+-5.425627183e-03f, -5.427861878e-03f, -5.430087083e-03f, -5.432302795e-03f, -5.434509011e-03f, -5.436705728e-03f, -5.438892943e-03f, -5.441070651e-03f, -5.443238850e-03f, -5.445397537e-03f,
+-5.447546707e-03f, -5.449686359e-03f, -5.451816489e-03f, -5.453937093e-03f, -5.456048168e-03f, -5.458149711e-03f, -5.460241720e-03f, -5.462324190e-03f, -5.464397119e-03f, -5.466460504e-03f,
+-5.468514341e-03f, -5.470558627e-03f, -5.472593360e-03f, -5.474618536e-03f, -5.476634152e-03f, -5.478640206e-03f, -5.480636694e-03f, -5.482623613e-03f, -5.484600960e-03f, -5.486568733e-03f,
+-5.488526929e-03f, -5.490475543e-03f, -5.492414575e-03f, -5.494344020e-03f, -5.496263876e-03f, -5.498174140e-03f, -5.500074810e-03f, -5.501965881e-03f, -5.503847353e-03f, -5.505719221e-03f,
+-5.507581483e-03f, -5.509434137e-03f, -5.511277179e-03f, -5.513110607e-03f, -5.514934418e-03f, -5.516748610e-03f, -5.518553180e-03f, -5.520348125e-03f, -5.522133442e-03f, -5.523909129e-03f,
+-5.525675184e-03f, -5.527431603e-03f, -5.529178385e-03f, -5.530915526e-03f, -5.532643025e-03f, -5.534360878e-03f, -5.536069083e-03f, -5.537767638e-03f, -5.539456541e-03f, -5.541135788e-03f,
+-5.542805377e-03f, -5.544465306e-03f, -5.546115573e-03f, -5.547756175e-03f, -5.549387110e-03f, -5.551008375e-03f, -5.552619968e-03f, -5.554221887e-03f, -5.555814130e-03f, -5.557396694e-03f,
+-5.558969577e-03f, -5.560532776e-03f, -5.562086290e-03f, -5.563630117e-03f, -5.565164253e-03f, -5.566688698e-03f, -5.568203448e-03f, -5.569708502e-03f, -5.571203858e-03f, -5.572689513e-03f,
+-5.574165465e-03f, -5.575631713e-03f, -5.577088253e-03f, -5.578535085e-03f, -5.579972206e-03f, -5.581399615e-03f, -5.582817308e-03f, -5.584225284e-03f, -5.585623542e-03f, -5.587012079e-03f,
+-5.588390893e-03f, -5.589759983e-03f, -5.591119347e-03f, -5.592468982e-03f, -5.593808887e-03f, -5.595139059e-03f, -5.596459499e-03f, -5.597770202e-03f, -5.599071168e-03f, -5.600362395e-03f,
+-5.601643881e-03f, -5.602915624e-03f, -5.604177623e-03f, -5.605429876e-03f, -5.606672381e-03f, -5.607905137e-03f, -5.609128141e-03f, -5.610341393e-03f, -5.611544890e-03f, -5.612738632e-03f,
+-5.613922616e-03f, -5.615096841e-03f, -5.616261305e-03f, -5.617416007e-03f, -5.618560946e-03f, -5.619696119e-03f, -5.620821526e-03f, -5.621937164e-03f, -5.623043033e-03f, -5.624139131e-03f,
+-5.625225456e-03f, -5.626302008e-03f, -5.627368785e-03f, -5.628425784e-03f, -5.629473006e-03f, -5.630510449e-03f, -5.631538111e-03f, -5.632555992e-03f, -5.633564089e-03f, -5.634562402e-03f,
+-5.635550929e-03f, -5.636529670e-03f, -5.637498622e-03f, -5.638457785e-03f, -5.639407158e-03f, -5.640346739e-03f, -5.641276527e-03f, -5.642196522e-03f, -5.643106721e-03f, -5.644007125e-03f,
+-5.644897731e-03f, -5.645778539e-03f, -5.646649548e-03f, -5.647510757e-03f, -5.648362164e-03f, -5.649203769e-03f, -5.650035571e-03f, -5.650857569e-03f, -5.651669762e-03f, -5.652472148e-03f,
+-5.653264728e-03f, -5.654047500e-03f, -5.654820463e-03f, -5.655583617e-03f, -5.656336960e-03f, -5.657080492e-03f, -5.657814212e-03f, -5.658538119e-03f, -5.659252213e-03f, -5.659956492e-03f,
+-5.660650957e-03f, -5.661335605e-03f, -5.662010437e-03f, -5.662675452e-03f, -5.663330649e-03f, -5.663976028e-03f, -5.664611588e-03f, -5.665237327e-03f, -5.665853247e-03f, -5.666459346e-03f,
+-5.667055623e-03f, -5.667642078e-03f, -5.668218711e-03f, -5.668785520e-03f, -5.669342506e-03f, -5.669889668e-03f, -5.670427006e-03f, -5.670954519e-03f, -5.671472206e-03f, -5.671980067e-03f,
+-5.672478103e-03f, -5.672966312e-03f, -5.673444693e-03f, -5.673913248e-03f, -5.674371975e-03f, -5.674820874e-03f, -5.675259945e-03f, -5.675689188e-03f, -5.676108602e-03f, -5.676518187e-03f,
+-5.676917942e-03f, -5.677307869e-03f, -5.677687965e-03f, -5.678058232e-03f, -5.678418670e-03f, -5.678769277e-03f, -5.679110054e-03f, -5.679441000e-03f, -5.679762116e-03f, -5.680073402e-03f,
+-5.680374858e-03f, -5.680666483e-03f, -5.680948277e-03f, -5.681220241e-03f, -5.681482374e-03f, -5.681734677e-03f, -5.681977149e-03f, -5.682209791e-03f, -5.682432602e-03f, -5.682645584e-03f,
+-5.682848735e-03f, -5.683042056e-03f, -5.683225548e-03f, -5.683399209e-03f, -5.683563042e-03f, -5.683717045e-03f, -5.683861219e-03f, -5.683995564e-03f, -5.684120081e-03f, -5.684234769e-03f,
+-5.684339629e-03f, -5.684434662e-03f, -5.684519867e-03f, -5.684595246e-03f, -5.684660797e-03f, -5.684716522e-03f, -5.684762422e-03f, -5.684798495e-03f, -5.684824744e-03f, -5.684841168e-03f,
+-5.684847767e-03f, -5.684844543e-03f, -5.684831496e-03f, -5.684808626e-03f, -5.684775934e-03f, -5.684733420e-03f, -5.684681084e-03f, -5.684618929e-03f, -5.684546953e-03f, -5.684465158e-03f,
+-5.684373544e-03f, -5.684272112e-03f, -5.684160863e-03f, -5.684039796e-03f, -5.683908914e-03f, -5.683768217e-03f, -5.683617704e-03f, -5.683457378e-03f, -5.683287239e-03f, -5.683107287e-03f,
+-5.682917524e-03f, -5.682717950e-03f, -5.682508566e-03f, -5.682289373e-03f, -5.682060372e-03f, -5.681821563e-03f, -5.681572948e-03f, -5.681314527e-03f, -5.681046302e-03f, -5.680768273e-03f,
+-5.680480442e-03f, -5.680182808e-03f, -5.679875374e-03f, -5.679558140e-03f, -5.679231108e-03f, -5.678894278e-03f, -5.678547651e-03f, -5.678191229e-03f, -5.677825012e-03f, -5.677449002e-03f,
+-5.677063200e-03f, -5.676667607e-03f, -5.676262224e-03f, -5.675847053e-03f, -5.675422094e-03f, -5.674987348e-03f, -5.674542818e-03f, -5.674088504e-03f, -5.673624408e-03f, -5.673150530e-03f,
+-5.672666872e-03f, -5.672173436e-03f, -5.671670222e-03f, -5.671157233e-03f, -5.670634469e-03f, -5.670101932e-03f, -5.669559623e-03f, -5.669007543e-03f, -5.668445695e-03f, -5.667874080e-03f,
+-5.667292698e-03f, -5.666701552e-03f, -5.666100643e-03f, -5.665489972e-03f, -5.664869541e-03f, -5.664239352e-03f, -5.663599407e-03f, -5.662949706e-03f, -5.662290251e-03f, -5.661621044e-03f,
+-5.660942087e-03f, -5.660253381e-03f, -5.659554928e-03f, -5.658846730e-03f, -5.658128788e-03f, -5.657401104e-03f, -5.656663680e-03f, -5.655916517e-03f, -5.655159618e-03f, -5.654392984e-03f,
+-5.653616616e-03f, -5.652830518e-03f, -5.652034690e-03f, -5.651229134e-03f, -5.650413853e-03f, -5.649588847e-03f, -5.648754120e-03f, -5.647909673e-03f, -5.647055508e-03f, -5.646191626e-03f,
+-5.645318031e-03f, -5.644434723e-03f, -5.643541705e-03f, -5.642638979e-03f, -5.641726547e-03f, -5.640804411e-03f, -5.639872573e-03f, -5.638931035e-03f, -5.637979799e-03f, -5.637018868e-03f,
+-5.636048243e-03f, -5.635067926e-03f, -5.634077921e-03f, -5.633078228e-03f, -5.632068851e-03f, -5.631049791e-03f, -5.630021050e-03f, -5.628982632e-03f, -5.627934537e-03f, -5.626876769e-03f,
+-5.625809330e-03f, -5.624732222e-03f, -5.623645448e-03f, -5.622549009e-03f, -5.621442908e-03f, -5.620327148e-03f, -5.619201731e-03f, -5.618066659e-03f, -5.616921935e-03f, -5.615767561e-03f,
+-5.614603540e-03f, -5.613429874e-03f, -5.612246565e-03f, -5.611053617e-03f, -5.609851032e-03f, -5.608638812e-03f, -5.607416960e-03f, -5.606185478e-03f, -5.604944369e-03f, -5.603693636e-03f,
+-5.602433281e-03f, -5.601163308e-03f, -5.599883718e-03f, -5.598594514e-03f, -5.597295699e-03f, -5.595987276e-03f, -5.594669247e-03f, -5.593341616e-03f, -5.592004384e-03f, -5.590657556e-03f,
+-5.589301133e-03f, -5.587935118e-03f, -5.586559514e-03f, -5.585174325e-03f, -5.583779552e-03f, -5.582375200e-03f, -5.580961270e-03f, -5.579537765e-03f, -5.578104689e-03f, -5.576662045e-03f,
+-5.575209835e-03f, -5.573748062e-03f, -5.572276730e-03f, -5.570795842e-03f, -5.569305399e-03f, -5.567805407e-03f, -5.566295867e-03f, -5.564776782e-03f, -5.563248157e-03f, -5.561709993e-03f,
+-5.560162294e-03f, -5.558605063e-03f, -5.557038304e-03f, -5.555462019e-03f, -5.553876212e-03f, -5.552280885e-03f, -5.550676043e-03f, -5.549061688e-03f, -5.547437823e-03f, -5.545804453e-03f,
+-5.544161580e-03f, -5.542509207e-03f, -5.540847338e-03f, -5.539175976e-03f, -5.537495124e-03f, -5.535804786e-03f, -5.534104966e-03f, -5.532395666e-03f, -5.530676890e-03f, -5.528948642e-03f,
+-5.527210925e-03f, -5.525463742e-03f, -5.523707097e-03f, -5.521940993e-03f, -5.520165435e-03f, -5.518380424e-03f, -5.516585966e-03f, -5.514782063e-03f, -5.512968720e-03f, -5.511145939e-03f,
+-5.509313725e-03f, -5.507472080e-03f, -5.505621010e-03f, -5.503760516e-03f, -5.501890604e-03f, -5.500011276e-03f, -5.498122536e-03f, -5.496224389e-03f, -5.494316837e-03f, -5.492399886e-03f,
+-5.490473537e-03f, -5.488537796e-03f, -5.486592665e-03f, -5.484638150e-03f, -5.482674253e-03f, -5.480700979e-03f, -5.478718330e-03f, -5.476726313e-03f, -5.474724929e-03f, -5.472714183e-03f,
+-5.470694080e-03f, -5.468664622e-03f, -5.466625815e-03f, -5.464577661e-03f, -5.462520165e-03f, -5.460453331e-03f, -5.458377163e-03f, -5.456291665e-03f, -5.454196842e-03f, -5.452092696e-03f,
+-5.449979232e-03f, -5.447856455e-03f, -5.445724369e-03f, -5.443582976e-03f, -5.441432283e-03f, -5.439272293e-03f, -5.437103010e-03f, -5.434924438e-03f, -5.432736582e-03f, -5.430539445e-03f,
+-5.428333033e-03f, -5.426117349e-03f, -5.423892397e-03f, -5.421658183e-03f, -5.419414709e-03f, -5.417161982e-03f, -5.414900004e-03f, -5.412628780e-03f, -5.410348315e-03f, -5.408058613e-03f,
+-5.405759679e-03f, -5.403451516e-03f, -5.401134130e-03f, -5.398807524e-03f, -5.396471704e-03f, -5.394126674e-03f, -5.391772438e-03f, -5.389409000e-03f, -5.387036366e-03f, -5.384654540e-03f,
+-5.382263526e-03f, -5.379863329e-03f, -5.377453954e-03f, -5.375035405e-03f, -5.372607687e-03f, -5.370170804e-03f, -5.367724762e-03f, -5.365269564e-03f, -5.362805216e-03f, -5.360331722e-03f,
+-5.357849087e-03f, -5.355357316e-03f, -5.352856413e-03f, -5.350346384e-03f, -5.347827232e-03f, -5.345298963e-03f, -5.342761582e-03f, -5.340215094e-03f, -5.337659503e-03f, -5.335094814e-03f,
+-5.332521032e-03f, -5.329938161e-03f, -5.327346208e-03f, -5.324745177e-03f, -5.322135072e-03f, -5.319515899e-03f, -5.316887663e-03f, -5.314250368e-03f, -5.311604020e-03f, -5.308948624e-03f,
+-5.306284184e-03f, -5.303610706e-03f, -5.300928195e-03f, -5.298236656e-03f, -5.295536094e-03f, -5.292826514e-03f, -5.290107921e-03f, -5.287380320e-03f, -5.284643717e-03f, -5.281898117e-03f,
+-5.279143525e-03f, -5.276379945e-03f, -5.273607384e-03f, -5.270825847e-03f, -5.268035338e-03f, -5.265235863e-03f, -5.262427428e-03f, -5.259610037e-03f, -5.256783696e-03f, -5.253948411e-03f,
+-5.251104186e-03f, -5.248251027e-03f, -5.245388939e-03f, -5.242517928e-03f, -5.239637999e-03f, -5.236749158e-03f, -5.233851409e-03f, -5.230944759e-03f, -5.228029213e-03f, -5.225104776e-03f,
+-5.222171454e-03f, -5.219229252e-03f, -5.216278176e-03f, -5.213318232e-03f, -5.210349424e-03f, -5.207371759e-03f, -5.204385242e-03f, -5.201389878e-03f, -5.198385674e-03f, -5.195372635e-03f,
+-5.192350766e-03f, -5.189320074e-03f, -5.186280563e-03f, -5.183232240e-03f, -5.180175110e-03f, -5.177109180e-03f, -5.174034454e-03f, -5.170950938e-03f, -5.167858639e-03f, -5.164757561e-03f,
+-5.161647712e-03f, -5.158529095e-03f, -5.155401719e-03f, -5.152265587e-03f, -5.149120707e-03f, -5.145967084e-03f, -5.142804723e-03f, -5.139633631e-03f, -5.136453814e-03f, -5.133265278e-03f,
+-5.130068028e-03f, -5.126862070e-03f, -5.123647411e-03f, -5.120424056e-03f, -5.117192012e-03f, -5.113951284e-03f, -5.110701878e-03f, -5.107443801e-03f, -5.104177059e-03f, -5.100901657e-03f,
+-5.097617601e-03f, -5.094324899e-03f, -5.091023556e-03f, -5.087713577e-03f, -5.084394970e-03f, -5.081067740e-03f, -5.077731894e-03f, -5.074387437e-03f, -5.071034376e-03f, -5.067672717e-03f,
+-5.064302467e-03f, -5.060923631e-03f, -5.057536217e-03f, -5.054140229e-03f, -5.050735675e-03f, -5.047322560e-03f, -5.043900892e-03f, -5.040470676e-03f, -5.037031918e-03f, -5.033584626e-03f,
+-5.030128805e-03f, -5.026664462e-03f, -5.023191604e-03f, -5.019710236e-03f, -5.016220365e-03f, -5.012721998e-03f, -5.009215141e-03f, -5.005699800e-03f, -5.002175982e-03f, -4.998643694e-03f,
+-4.995102942e-03f, -4.991553733e-03f, -4.987996072e-03f, -4.984429967e-03f, -4.980855425e-03f, -4.977272451e-03f, -4.973681053e-03f, -4.970081237e-03f, -4.966473009e-03f, -4.962856377e-03f,
+-4.959231347e-03f, -4.955597926e-03f, -4.951956120e-03f, -4.948305936e-03f, -4.944647381e-03f, -4.940980462e-03f, -4.937305185e-03f, -4.933621557e-03f, -4.929929584e-03f, -4.926229275e-03f,
+-4.922520634e-03f, -4.918803670e-03f, -4.915078389e-03f, -4.911344798e-03f, -4.907602904e-03f, -4.903852714e-03f, -4.900094234e-03f, -4.896327471e-03f, -4.892552433e-03f, -4.888769126e-03f,
+-4.884977558e-03f, -4.881177734e-03f, -4.877369663e-03f, -4.873553351e-03f, -4.869728805e-03f, -4.865896032e-03f, -4.862055039e-03f, -4.858205834e-03f, -4.854348423e-03f, -4.850482813e-03f,
+-4.846609012e-03f, -4.842727027e-03f, -4.838836864e-03f, -4.834938530e-03f, -4.831032034e-03f, -4.827117382e-03f, -4.823194581e-03f, -4.819263638e-03f, -4.815324561e-03f, -4.811377357e-03f,
+-4.807422033e-03f, -4.803458596e-03f, -4.799487054e-03f, -4.795507413e-03f, -4.791519682e-03f, -4.787523866e-03f, -4.783519975e-03f, -4.779508014e-03f, -4.775487992e-03f, -4.771459916e-03f,
+-4.767423792e-03f, -4.763379629e-03f, -4.759327433e-03f, -4.755267213e-03f, -4.751198975e-03f, -4.747122727e-03f, -4.743038477e-03f, -4.738946231e-03f, -4.734845998e-03f, -4.730737784e-03f,
+-4.726621598e-03f, -4.722497447e-03f, -4.718365338e-03f, -4.714225279e-03f, -4.710077277e-03f, -4.705921340e-03f, -4.701757476e-03f, -4.697585692e-03f, -4.693405995e-03f, -4.689218394e-03f,
+-4.685022896e-03f, -4.680819508e-03f, -4.676608239e-03f, -4.672389096e-03f, -4.668162086e-03f, -4.663927217e-03f, -4.659684498e-03f, -4.655433935e-03f, -4.651175536e-03f, -4.646909310e-03f,
+-4.642635264e-03f, -4.638353405e-03f, -4.634063742e-03f, -4.629766282e-03f, -4.625461033e-03f, -4.621148003e-03f, -4.616827200e-03f, -4.612498631e-03f, -4.608162305e-03f, -4.603818229e-03f,
+-4.599466412e-03f, -4.595106860e-03f, -4.590739583e-03f, -4.586364587e-03f, -4.581981882e-03f, -4.577591474e-03f, -4.573193372e-03f, -4.568787584e-03f, -4.564374118e-03f, -4.559952981e-03f,
+-4.555524183e-03f, -4.551087730e-03f, -4.546643631e-03f, -4.542191894e-03f, -4.537732527e-03f, -4.533265538e-03f, -4.528790935e-03f, -4.524308726e-03f, -4.519818920e-03f, -4.515321525e-03f,
+-4.510816548e-03f, -4.506303998e-03f, -4.501783883e-03f, -4.497256211e-03f, -4.492720990e-03f, -4.488178230e-03f, -4.483627937e-03f, -4.479070120e-03f, -4.474504787e-03f, -4.469931947e-03f,
+-4.465351607e-03f, -4.460763777e-03f, -4.456168464e-03f, -4.451565677e-03f, -4.446955424e-03f, -4.442337714e-03f, -4.437712554e-03f, -4.433079953e-03f, -4.428439919e-03f, -4.423792462e-03f,
+-4.419137588e-03f, -4.414475307e-03f, -4.409805628e-03f, -4.405128558e-03f, -4.400444105e-03f, -4.395752279e-03f, -4.391053088e-03f, -4.386346541e-03f, -4.381632645e-03f, -4.376911409e-03f,
+-4.372182843e-03f, -4.367446953e-03f, -4.362703750e-03f, -4.357953241e-03f, -4.353195436e-03f, -4.348430341e-03f, -4.343657968e-03f, -4.338878323e-03f, -4.334091415e-03f, -4.329297254e-03f,
+-4.324495847e-03f, -4.319687203e-03f, -4.314871332e-03f, -4.310048242e-03f, -4.305217940e-03f, -4.300380437e-03f, -4.295535741e-03f, -4.290683860e-03f, -4.285824804e-03f, -4.280958581e-03f,
+-4.276085199e-03f, -4.271204668e-03f, -4.266316997e-03f, -4.261422193e-03f, -4.256520267e-03f, -4.251611226e-03f, -4.246695080e-03f, -4.241771837e-03f, -4.236841507e-03f, -4.231904098e-03f,
+-4.226959619e-03f, -4.222008079e-03f, -4.217049487e-03f, -4.212083851e-03f, -4.207111182e-03f, -4.202131486e-03f, -4.197144775e-03f, -4.192151056e-03f, -4.187150339e-03f, -4.182142632e-03f,
+-4.177127945e-03f, -4.172106286e-03f, -4.167077665e-03f, -4.162042090e-03f, -4.156999571e-03f, -4.151950116e-03f, -4.146893736e-03f, -4.141830438e-03f, -4.136760232e-03f, -4.131683127e-03f,
+-4.126599132e-03f, -4.121508257e-03f, -4.116410510e-03f, -4.111305900e-03f, -4.106194437e-03f, -4.101076130e-03f, -4.095950988e-03f, -4.090819020e-03f, -4.085680236e-03f, -4.080534644e-03f,
+-4.075382254e-03f, -4.070223076e-03f, -4.065057117e-03f, -4.059884389e-03f, -4.054704899e-03f, -4.049518657e-03f, -4.044325673e-03f, -4.039125956e-03f, -4.033919514e-03f, -4.028706358e-03f,
+-4.023486497e-03f, -4.018259940e-03f, -4.013026697e-03f, -4.007786776e-03f, -4.002540188e-03f, -3.997286941e-03f, -3.992027045e-03f, -3.986760510e-03f, -3.981487344e-03f, -3.976207558e-03f,
+-3.970921160e-03f, -3.965628161e-03f, -3.960328570e-03f, -3.955022395e-03f, -3.949709648e-03f, -3.944390336e-03f, -3.939064470e-03f, -3.933732060e-03f, -3.928393114e-03f, -3.923047642e-03f,
+-3.917695654e-03f, -3.912337160e-03f, -3.906972168e-03f, -3.901600690e-03f, -3.896222733e-03f, -3.890838308e-03f, -3.885447425e-03f, -3.880050093e-03f, -3.874646321e-03f, -3.869236120e-03f,
+-3.863819498e-03f, -3.858396467e-03f, -3.852967035e-03f, -3.847531212e-03f, -3.842089007e-03f, -3.836640432e-03f, -3.831185494e-03f, -3.825724204e-03f, -3.820256573e-03f, -3.814782608e-03f,
+-3.809302321e-03f, -3.803815721e-03f, -3.798322818e-03f, -3.792823621e-03f, -3.787318141e-03f, -3.781806387e-03f, -3.776288369e-03f, -3.770764097e-03f, -3.765233581e-03f, -3.759696830e-03f,
+-3.754153855e-03f, -3.748604666e-03f, -3.743049271e-03f, -3.737487682e-03f, -3.731919908e-03f, -3.726345960e-03f, -3.720765846e-03f, -3.715179577e-03f, -3.709587163e-03f, -3.703988614e-03f,
+-3.698383939e-03f, -3.692773150e-03f, -3.687156255e-03f, -3.681533265e-03f, -3.675904190e-03f, -3.670269040e-03f, -3.664627824e-03f, -3.658980554e-03f, -3.653327239e-03f, -3.647667888e-03f,
+-3.642002513e-03f, -3.636331123e-03f, -3.630653729e-03f, -3.624970340e-03f, -3.619280966e-03f, -3.613585618e-03f, -3.607884306e-03f, -3.602177040e-03f, -3.596463830e-03f, -3.590744686e-03f,
+-3.585019619e-03f, -3.579288638e-03f, -3.573551754e-03f, -3.567808977e-03f, -3.562060318e-03f, -3.556305786e-03f, -3.550545391e-03f, -3.544779145e-03f, -3.539007056e-03f, -3.533229137e-03f,
+-3.527445396e-03f, -3.521655843e-03f, -3.515860491e-03f, -3.510059348e-03f, -3.504252424e-03f, -3.498439731e-03f, -3.492621279e-03f, -3.486797077e-03f, -3.480967137e-03f, -3.475131468e-03f,
+-3.469290081e-03f, -3.463442987e-03f, -3.457590195e-03f, -3.451731717e-03f, -3.445867561e-03f, -3.439997740e-03f, -3.434122263e-03f, -3.428241141e-03f, -3.422354385e-03f, -3.416462004e-03f,
+-3.410564009e-03f, -3.404660410e-03f, -3.398751219e-03f, -3.392836445e-03f, -3.386916099e-03f, -3.380990192e-03f, -3.375058734e-03f, -3.369121736e-03f, -3.363179208e-03f, -3.357231160e-03f,
+-3.351277604e-03f, -3.345318549e-03f, -3.339354007e-03f, -3.333383987e-03f, -3.327408502e-03f, -3.321427560e-03f, -3.315441173e-03f, -3.309449351e-03f, -3.303452105e-03f, -3.297449446e-03f,
+-3.291441384e-03f, -3.285427930e-03f, -3.279409095e-03f, -3.273384888e-03f, -3.267355322e-03f, -3.261320406e-03f, -3.255280151e-03f, -3.249234568e-03f, -3.243183668e-03f, -3.237127461e-03f,
+-3.231065958e-03f, -3.224999170e-03f, -3.218927108e-03f, -3.212849782e-03f, -3.206767203e-03f, -3.200679382e-03f, -3.194586329e-03f, -3.188488056e-03f, -3.182384573e-03f, -3.176275892e-03f,
+-3.170162022e-03f, -3.164042974e-03f, -3.157918760e-03f, -3.151789390e-03f, -3.145654876e-03f, -3.139515227e-03f, -3.133370456e-03f, -3.127220572e-03f, -3.121065587e-03f, -3.114905511e-03f,
+-3.108740355e-03f, -3.102570131e-03f, -3.096394849e-03f, -3.090214521e-03f, -3.084029156e-03f, -3.077838766e-03f, -3.071643362e-03f, -3.065442956e-03f, -3.059237557e-03f, -3.053027176e-03f,
+-3.046811826e-03f, -3.040591516e-03f, -3.034366258e-03f, -3.028136063e-03f, -3.021900942e-03f, -3.015660906e-03f, -3.009415965e-03f, -3.003166131e-03f, -2.996911415e-03f, -2.990651828e-03f,
+-2.984387381e-03f, -2.978118085e-03f, -2.971843951e-03f, -2.965564991e-03f, -2.959281215e-03f, -2.952992634e-03f, -2.946699259e-03f, -2.940401103e-03f, -2.934098175e-03f, -2.927790487e-03f,
+-2.921478049e-03f, -2.915160874e-03f, -2.908838973e-03f, -2.902512355e-03f, -2.896181034e-03f, -2.889845019e-03f, -2.883504322e-03f, -2.877158954e-03f, -2.870808927e-03f, -2.864454251e-03f,
+-2.858094937e-03f, -2.851730998e-03f, -2.845362444e-03f, -2.838989287e-03f, -2.832611537e-03f, -2.826229206e-03f, -2.819842305e-03f, -2.813450845e-03f, -2.807054839e-03f, -2.800654296e-03f,
+-2.794249228e-03f, -2.787839647e-03f, -2.781425564e-03f, -2.775006990e-03f, -2.768583937e-03f, -2.762156415e-03f, -2.755724436e-03f, -2.749288012e-03f, -2.742847154e-03f, -2.736401873e-03f,
+-2.729952180e-03f, -2.723498087e-03f, -2.717039605e-03f, -2.710576746e-03f, -2.704109521e-03f, -2.697637941e-03f, -2.691162018e-03f, -2.684681763e-03f, -2.678197188e-03f, -2.671708304e-03f,
+-2.665215122e-03f, -2.658717654e-03f, -2.652215911e-03f, -2.645709905e-03f, -2.639199647e-03f, -2.632685149e-03f, -2.626166422e-03f, -2.619643477e-03f, -2.613116327e-03f, -2.606584982e-03f,
+-2.600049454e-03f, -2.593509755e-03f, -2.586965896e-03f, -2.580417888e-03f, -2.573865744e-03f, -2.567309474e-03f, -2.560749090e-03f, -2.554184604e-03f, -2.547616027e-03f, -2.541043370e-03f,
+-2.534466647e-03f, -2.527885867e-03f, -2.521301042e-03f, -2.514712185e-03f, -2.508119306e-03f, -2.501522417e-03f, -2.494921531e-03f, -2.488316657e-03f, -2.481707809e-03f, -2.475094997e-03f,
+-2.468478234e-03f, -2.461857531e-03f, -2.455232899e-03f, -2.448604350e-03f, -2.441971896e-03f, -2.435335548e-03f, -2.428695319e-03f, -2.422051219e-03f, -2.415403261e-03f, -2.408751456e-03f,
+-2.402095816e-03f, -2.395436352e-03f, -2.388773077e-03f, -2.382106002e-03f, -2.375435138e-03f, -2.368760497e-03f, -2.362082092e-03f, -2.355399933e-03f, -2.348714033e-03f, -2.342024403e-03f,
+-2.335331055e-03f, -2.328634001e-03f, -2.321933252e-03f, -2.315228821e-03f, -2.308520718e-03f, -2.301808957e-03f, -2.295093547e-03f, -2.288374503e-03f, -2.281651834e-03f, -2.274925554e-03f,
+-2.268195673e-03f, -2.261462204e-03f, -2.254725158e-03f, -2.247984547e-03f, -2.241240383e-03f, -2.234492678e-03f, -2.227741444e-03f, -2.220986692e-03f, -2.214228435e-03f, -2.207466684e-03f,
+-2.200701451e-03f, -2.193932747e-03f, -2.187160586e-03f, -2.180384978e-03f, -2.173605936e-03f, -2.166823471e-03f, -2.160037596e-03f, -2.153248322e-03f, -2.146455660e-03f, -2.139659624e-03f,
+-2.132860225e-03f, -2.126057475e-03f, -2.119251385e-03f, -2.112441968e-03f, -2.105629236e-03f, -2.098813200e-03f, -2.091993872e-03f, -2.085171266e-03f, -2.078345391e-03f, -2.071516261e-03f,
+-2.064683887e-03f, -2.057848281e-03f, -2.051009456e-03f, -2.044167423e-03f, -2.037322194e-03f, -2.030473781e-03f, -2.023622196e-03f, -2.016767452e-03f, -2.009909560e-03f, -2.003048532e-03f,
+-1.996184380e-03f, -1.989317116e-03f, -1.982446752e-03f, -1.975573301e-03f, -1.968696774e-03f, -1.961817183e-03f, -1.954934541e-03f, -1.948048859e-03f, -1.941160150e-03f, -1.934268425e-03f,
+-1.927373696e-03f, -1.920475976e-03f, -1.913575277e-03f, -1.906671610e-03f, -1.899764989e-03f, -1.892855424e-03f, -1.885942928e-03f, -1.879027514e-03f, -1.872109192e-03f, -1.865187976e-03f,
+-1.858263877e-03f, -1.851336908e-03f, -1.844407080e-03f, -1.837474406e-03f, -1.830538897e-03f, -1.823600567e-03f, -1.816659427e-03f, -1.809715489e-03f, -1.802768765e-03f, -1.795819268e-03f,
+-1.788867009e-03f, -1.781912001e-03f, -1.774954256e-03f, -1.767993786e-03f, -1.761030604e-03f, -1.754064721e-03f, -1.747096149e-03f, -1.740124901e-03f, -1.733150989e-03f, -1.726174426e-03f,
+-1.719195222e-03f, -1.712213391e-03f, -1.705228945e-03f, -1.698241896e-03f, -1.691252256e-03f, -1.684260037e-03f, -1.677265251e-03f, -1.670267911e-03f, -1.663268030e-03f, -1.656265618e-03f,
+-1.649260689e-03f, -1.642253254e-03f, -1.635243326e-03f, -1.628230918e-03f, -1.621216040e-03f, -1.614198707e-03f, -1.607178929e-03f, -1.600156719e-03f, -1.593132089e-03f, -1.586105052e-03f,
+-1.579075620e-03f, -1.572043805e-03f, -1.565009619e-03f, -1.557973075e-03f, -1.550934185e-03f, -1.543892961e-03f, -1.536849415e-03f, -1.529803560e-03f, -1.522755409e-03f, -1.515704972e-03f,
+-1.508652264e-03f, -1.501597295e-03f, -1.494540078e-03f, -1.487480626e-03f, -1.480418951e-03f, -1.473355065e-03f, -1.466288981e-03f, -1.459220710e-03f, -1.452150266e-03f, -1.445077659e-03f,
+-1.438002904e-03f, -1.430926012e-03f, -1.423846995e-03f, -1.416765866e-03f, -1.409682637e-03f, -1.402597321e-03f, -1.395509929e-03f, -1.388420475e-03f, -1.381328970e-03f, -1.374235426e-03f,
+-1.367139858e-03f, -1.360042275e-03f, -1.352942692e-03f, -1.345841120e-03f, -1.338737572e-03f, -1.331632059e-03f, -1.324524595e-03f, -1.317415192e-03f, -1.310303862e-03f, -1.303190618e-03f,
+-1.296075472e-03f, -1.288958436e-03f, -1.281839523e-03f, -1.274718744e-03f, -1.267596114e-03f, -1.260471643e-03f, -1.253345345e-03f, -1.246217231e-03f, -1.239087315e-03f, -1.231955608e-03f,
+-1.224822123e-03f, -1.217686872e-03f, -1.210549868e-03f, -1.203411124e-03f, -1.196270651e-03f, -1.189128462e-03f, -1.181984570e-03f, -1.174838986e-03f, -1.167691724e-03f, -1.160542796e-03f,
+-1.153392213e-03f, -1.146239990e-03f, -1.139086138e-03f, -1.131930669e-03f, -1.124773596e-03f, -1.117614931e-03f, -1.110454688e-03f, -1.103292877e-03f, -1.096129513e-03f, -1.088964607e-03f,
+-1.081798171e-03f, -1.074630218e-03f, -1.067460762e-03f, -1.060289813e-03f, -1.053117385e-03f, -1.045943489e-03f, -1.038768140e-03f, -1.031591348e-03f, -1.024413126e-03f, -1.017233488e-03f,
+-1.010052445e-03f, -1.002870009e-03f, -9.956861943e-04f, -9.885010121e-04f, -9.813144752e-04f, -9.741265961e-04f, -9.669373872e-04f, -9.597468611e-04f, -9.525550302e-04f, -9.453619070e-04f,
+-9.381675041e-04f, -9.309718339e-04f, -9.237749089e-04f, -9.165767416e-04f, -9.093773445e-04f, -9.021767301e-04f, -8.949749110e-04f, -8.877718996e-04f, -8.805677084e-04f, -8.733623499e-04f,
+-8.661558367e-04f, -8.589481812e-04f, -8.517393960e-04f, -8.445294936e-04f, -8.373184865e-04f, -8.301063871e-04f, -8.228932081e-04f, -8.156789619e-04f, -8.084636611e-04f, -8.012473182e-04f,
+-7.940299457e-04f, -7.868115560e-04f, -7.795921619e-04f, -7.723717757e-04f, -7.651504100e-04f, -7.579280773e-04f, -7.507047902e-04f, -7.434805611e-04f, -7.362554027e-04f, -7.290293274e-04f,
+-7.218023477e-04f, -7.145744763e-04f, -7.073457256e-04f, -7.001161082e-04f, -6.928856366e-04f, -6.856543234e-04f, -6.784221810e-04f, -6.711892221e-04f, -6.639554591e-04f, -6.567209046e-04f,
+-6.494855711e-04f, -6.422494713e-04f, -6.350126175e-04f, -6.277750225e-04f, -6.205366986e-04f, -6.132976585e-04f, -6.060579147e-04f, -5.988174797e-04f, -5.915763661e-04f, -5.843345865e-04f,
+-5.770921533e-04f, -5.698490791e-04f, -5.626053766e-04f, -5.553610581e-04f, -5.481161364e-04f, -5.408706238e-04f, -5.336245331e-04f, -5.263778766e-04f, -5.191306670e-04f, -5.118829169e-04f,
+-5.046346387e-04f, -4.973858450e-04f, -4.901365484e-04f, -4.828867615e-04f, -4.756364967e-04f, -4.683857667e-04f, -4.611345839e-04f, -4.538829610e-04f, -4.466309104e-04f, -4.393784448e-04f,
+-4.321255767e-04f, -4.248723187e-04f, -4.176186832e-04f, -4.103646829e-04f, -4.031103304e-04f, -3.958556380e-04f, -3.886006185e-04f, -3.813452844e-04f, -3.740896481e-04f, -3.668337224e-04f,
+-3.595775196e-04f, -3.523210525e-04f, -3.450643334e-04f, -3.378073751e-04f, -3.305501900e-04f, -3.232927906e-04f, -3.160351896e-04f, -3.087773995e-04f, -3.015194328e-04f, -2.942613022e-04f,
+-2.870030200e-04f, -2.797445990e-04f, -2.724860516e-04f, -2.652273903e-04f, -2.579686279e-04f, -2.507097767e-04f, -2.434508493e-04f, -2.361918583e-04f, -2.289328162e-04f, -2.216737356e-04f,
+-2.144146291e-04f, -2.071555091e-04f, -1.998963882e-04f, -1.926372789e-04f, -1.853781939e-04f, -1.781191456e-04f, -1.708601466e-04f, -1.636012094e-04f, -1.563423465e-04f, -1.490835706e-04f,
+-1.418248941e-04f, -1.345663296e-04f, -1.273078896e-04f, -1.200495867e-04f, -1.127914333e-04f, -1.055334421e-04f, -9.827562555e-05f, -9.101799618e-05f, -8.376056654e-05f, -7.650334915e-05f,
+-6.924635654e-05f, -6.198960126e-05f, -5.473309581e-05f, -4.747685274e-05f, -4.022088456e-05f, -3.296520381e-05f, -2.570982300e-05f, -1.845475466e-05f, -1.120001131e-05f, -3.945605472e-06f,
+3.308450339e-06f, 1.056214360e-05f, 1.781546180e-05f, 2.506839242e-05f, 3.232092294e-05f, 3.957304086e-05f, 4.682473366e-05f, 5.407598883e-05f, 6.132679386e-05f, 6.857713625e-05f,
+7.582700349e-05f, 8.307638307e-05f, 9.032526250e-05f, 9.757362926e-05f, 1.048214709e-04f, 1.120687748e-04f, 1.193155286e-04f, 1.265617197e-04f, 1.338073357e-04f, 1.410523641e-04f,
+1.482967923e-04f, 1.555406079e-04f, 1.627837984e-04f, 1.700263513e-04f, 1.772682541e-04f, 1.845094944e-04f, 1.917500597e-04f, 1.989899374e-04f, 2.062291151e-04f, 2.134675804e-04f,
+2.207053207e-04f, 2.279423236e-04f, 2.351785766e-04f, 2.424140673e-04f, 2.496487832e-04f, 2.568827118e-04f, 2.641158406e-04f, 2.713481572e-04f, 2.785796492e-04f, 2.858103041e-04f,
+2.930401094e-04f, 3.002690527e-04f, 3.074971215e-04f, 3.147243034e-04f, 3.219505859e-04f, 3.291759567e-04f, 3.364004032e-04f, 3.436239130e-04f, 3.508464737e-04f, 3.580680728e-04f,
+3.652886980e-04f, 3.725083367e-04f, 3.797269766e-04f, 3.869446052e-04f, 3.941612102e-04f, 4.013767790e-04f, 4.085912993e-04f, 4.158047586e-04f, 4.230171446e-04f, 4.302284449e-04f,
+4.374386469e-04f, 4.446477384e-04f, 4.518557069e-04f, 4.590625400e-04f, 4.662682254e-04f, 4.734727505e-04f, 4.806761031e-04f, 4.878782708e-04f, 4.950792411e-04f, 5.022790016e-04f,
+5.094775401e-04f, 5.166748441e-04f, 5.238709012e-04f, 5.310656990e-04f, 5.382592252e-04f, 5.454514675e-04f, 5.526424134e-04f, 5.598320506e-04f, 5.670203668e-04f, 5.742073495e-04f,
+5.813929864e-04f, 5.885772653e-04f, 5.957601736e-04f, 6.029416991e-04f, 6.101218295e-04f, 6.173005523e-04f, 6.244778554e-04f, 6.316537262e-04f, 6.388281526e-04f, 6.460011221e-04f,
+6.531726224e-04f, 6.603426414e-04f, 6.675111665e-04f, 6.746781855e-04f, 6.818436861e-04f, 6.890076560e-04f, 6.961700828e-04f, 7.033309544e-04f, 7.104902583e-04f, 7.176479823e-04f,
+7.248041141e-04f, 7.319586414e-04f, 7.391115519e-04f, 7.462628334e-04f, 7.534124735e-04f, 7.605604600e-04f, 7.677067806e-04f, 7.748514231e-04f, 7.819943752e-04f, 7.891356246e-04f,
+7.962751590e-04f, 8.034129663e-04f, 8.105490341e-04f, 8.176833503e-04f, 8.248159026e-04f, 8.319466787e-04f, 8.390756664e-04f, 8.462028534e-04f, 8.533282276e-04f, 8.604517768e-04f,
+8.675734887e-04f, 8.746933510e-04f, 8.818113516e-04f, 8.889274783e-04f, 8.960417188e-04f, 9.031540611e-04f, 9.102644927e-04f, 9.173730017e-04f, 9.244795757e-04f, 9.315842026e-04f,
+9.386868703e-04f, 9.457875665e-04f, 9.528862790e-04f, 9.599829958e-04f, 9.670777046e-04f, 9.741703932e-04f, 9.812610496e-04f, 9.883496615e-04f, 9.954362168e-04f, 1.002520703e-03f,
+1.009603109e-03f, 1.016683422e-03f, 1.023761629e-03f, 1.030837720e-03f, 1.037911681e-03f, 1.044983500e-03f, 1.052053166e-03f, 1.059120666e-03f, 1.066185988e-03f, 1.073249120e-03f,
+1.080310051e-03f, 1.087368767e-03f, 1.094425257e-03f, 1.101479508e-03f, 1.108531509e-03f, 1.115581248e-03f, 1.122628712e-03f, 1.129673890e-03f, 1.136716769e-03f, 1.143757337e-03f,
+1.150795582e-03f, 1.157831493e-03f, 1.164865056e-03f, 1.171896261e-03f, 1.178925095e-03f, 1.185951546e-03f, 1.192975602e-03f, 1.199997251e-03f, 1.207016481e-03f, 1.214033279e-03f,
+1.221047635e-03f, 1.228059536e-03f, 1.235068970e-03f, 1.242075924e-03f, 1.249080388e-03f, 1.256082349e-03f, 1.263081794e-03f, 1.270078713e-03f, 1.277073093e-03f, 1.284064922e-03f,
+1.291054188e-03f, 1.298040879e-03f, 1.305024984e-03f, 1.312006490e-03f, 1.318985385e-03f, 1.325961658e-03f, 1.332935296e-03f, 1.339906288e-03f, 1.346874622e-03f, 1.353840285e-03f,
+1.360803267e-03f, 1.367763554e-03f, 1.374721135e-03f, 1.381675999e-03f, 1.388628133e-03f, 1.395577525e-03f, 1.402524164e-03f, 1.409468038e-03f, 1.416409134e-03f, 1.423347441e-03f,
+1.430282948e-03f, 1.437215642e-03f, 1.444145511e-03f, 1.451072543e-03f, 1.457996728e-03f, 1.464918052e-03f, 1.471836505e-03f, 1.478752074e-03f, 1.485664747e-03f, 1.492574513e-03f,
+1.499481360e-03f, 1.506385276e-03f, 1.513286250e-03f, 1.520184269e-03f, 1.527079321e-03f, 1.533971396e-03f, 1.540860481e-03f, 1.547746564e-03f, 1.554629635e-03f, 1.561509680e-03f,
+1.568386688e-03f, 1.575260648e-03f, 1.582131547e-03f, 1.588999375e-03f, 1.595864119e-03f, 1.602725768e-03f, 1.609584309e-03f, 1.616439732e-03f, 1.623292024e-03f, 1.630141174e-03f,
+1.636987170e-03f, 1.643830001e-03f, 1.650669655e-03f, 1.657506119e-03f, 1.664339384e-03f, 1.671169436e-03f, 1.677996264e-03f, 1.684819857e-03f, 1.691640202e-03f, 1.698457289e-03f,
+1.705271106e-03f, 1.712081641e-03f, 1.718888882e-03f, 1.725692818e-03f, 1.732493438e-03f, 1.739290729e-03f, 1.746084680e-03f, 1.752875279e-03f, 1.759662516e-03f, 1.766446378e-03f,
+1.773226854e-03f, 1.780003932e-03f, 1.786777601e-03f, 1.793547849e-03f, 1.800314665e-03f, 1.807078036e-03f, 1.813837953e-03f, 1.820594402e-03f, 1.827347374e-03f, 1.834096855e-03f,
+1.840842835e-03f, 1.847585302e-03f, 1.854324245e-03f, 1.861059651e-03f, 1.867791511e-03f, 1.874519812e-03f, 1.881244543e-03f, 1.887965692e-03f, 1.894683248e-03f, 1.901397199e-03f,
+1.908107535e-03f, 1.914814243e-03f, 1.921517312e-03f, 1.928216732e-03f, 1.934912489e-03f, 1.941604574e-03f, 1.948292974e-03f, 1.954977679e-03f, 1.961658677e-03f, 1.968335956e-03f,
+1.975009505e-03f, 1.981679314e-03f, 1.988345369e-03f, 1.995007661e-03f, 2.001666178e-03f, 2.008320908e-03f, 2.014971841e-03f, 2.021618964e-03f, 2.028262267e-03f, 2.034901739e-03f,
+2.041537367e-03f, 2.048169141e-03f, 2.054797050e-03f, 2.061421082e-03f, 2.068041225e-03f, 2.074657470e-03f, 2.081269804e-03f, 2.087878216e-03f, 2.094482696e-03f, 2.101083231e-03f,
+2.107679810e-03f, 2.114272423e-03f, 2.120861059e-03f, 2.127445705e-03f, 2.134026351e-03f, 2.140602986e-03f, 2.147175598e-03f, 2.153744176e-03f, 2.160308710e-03f, 2.166869187e-03f,
+2.173425598e-03f, 2.179977930e-03f, 2.186526173e-03f, 2.193070315e-03f, 2.199610346e-03f, 2.206146254e-03f, 2.212678029e-03f, 2.219205658e-03f, 2.225729131e-03f, 2.232248438e-03f,
+2.238763566e-03f, 2.245274506e-03f, 2.251781245e-03f, 2.258283772e-03f, 2.264782078e-03f, 2.271276151e-03f, 2.277765979e-03f, 2.284251551e-03f, 2.290732858e-03f, 2.297209887e-03f,
+2.303682628e-03f, 2.310151070e-03f, 2.316615202e-03f, 2.323075012e-03f, 2.329530490e-03f, 2.335981626e-03f, 2.342428407e-03f, 2.348870823e-03f, 2.355308864e-03f, 2.361742518e-03f,
+2.368171774e-03f, 2.374596622e-03f, 2.381017050e-03f, 2.387433048e-03f, 2.393844605e-03f, 2.400251710e-03f, 2.406654352e-03f, 2.413052520e-03f, 2.419446204e-03f, 2.425835392e-03f,
+2.432220074e-03f, 2.438600239e-03f, 2.444975877e-03f, 2.451346975e-03f, 2.457713525e-03f, 2.464075514e-03f, 2.470432932e-03f, 2.476785769e-03f, 2.483134013e-03f, 2.489477653e-03f,
+2.495816680e-03f, 2.502151083e-03f, 2.508480849e-03f, 2.514805970e-03f, 2.521126434e-03f, 2.527442231e-03f, 2.533753349e-03f, 2.540059778e-03f, 2.546361508e-03f, 2.552658528e-03f,
+2.558950827e-03f, 2.565238395e-03f, 2.571521220e-03f, 2.577799293e-03f, 2.584072602e-03f, 2.590341138e-03f, 2.596604889e-03f, 2.602863844e-03f, 2.609117994e-03f, 2.615367328e-03f,
+2.621611835e-03f, 2.627851505e-03f, 2.634086326e-03f, 2.640316290e-03f, 2.646541384e-03f, 2.652761598e-03f, 2.658976923e-03f, 2.665187347e-03f, 2.671392860e-03f, 2.677593452e-03f,
+2.683789112e-03f, 2.689979829e-03f, 2.696165593e-03f, 2.702346394e-03f, 2.708522221e-03f, 2.714693064e-03f, 2.720858913e-03f, 2.727019756e-03f, 2.733175584e-03f, 2.739326386e-03f,
+2.745472152e-03f, 2.751612872e-03f, 2.757748534e-03f, 2.763879130e-03f, 2.770004647e-03f, 2.776125077e-03f, 2.782240408e-03f, 2.788350631e-03f, 2.794455735e-03f, 2.800555709e-03f,
+2.806650544e-03f, 2.812740230e-03f, 2.818824755e-03f, 2.824904110e-03f, 2.830978284e-03f, 2.837047268e-03f, 2.843111050e-03f, 2.849169622e-03f, 2.855222972e-03f, 2.861271090e-03f,
+2.867313966e-03f, 2.873351590e-03f, 2.879383952e-03f, 2.885411042e-03f, 2.891432849e-03f, 2.897449363e-03f, 2.903460575e-03f, 2.909466474e-03f, 2.915467049e-03f, 2.921462291e-03f,
+2.927452191e-03f, 2.933436736e-03f, 2.939415918e-03f, 2.945389727e-03f, 2.951358152e-03f, 2.957321184e-03f, 2.963278812e-03f, 2.969231026e-03f, 2.975177817e-03f, 2.981119173e-03f,
+2.987055087e-03f, 2.992985546e-03f, 2.998910542e-03f, 3.004830064e-03f, 3.010744102e-03f, 3.016652647e-03f, 3.022555688e-03f, 3.028453216e-03f, 3.034345221e-03f, 3.040231692e-03f,
+3.046112620e-03f, 3.051987995e-03f, 3.057857807e-03f, 3.063722047e-03f, 3.069580703e-03f, 3.075433768e-03f, 3.081281230e-03f, 3.087123079e-03f, 3.092959307e-03f, 3.098789903e-03f,
+3.104614857e-03f, 3.110434160e-03f, 3.116247801e-03f, 3.122055772e-03f, 3.127858062e-03f, 3.133654662e-03f, 3.139445561e-03f, 3.145230751e-03f, 3.151010221e-03f, 3.156783961e-03f,
+3.162551963e-03f, 3.168314215e-03f, 3.174070710e-03f, 3.179821436e-03f, 3.185566385e-03f, 3.191305546e-03f, 3.197038911e-03f, 3.202766469e-03f, 3.208488210e-03f, 3.214204126e-03f,
+3.219914206e-03f, 3.225618442e-03f, 3.231316822e-03f, 3.237009339e-03f, 3.242695982e-03f, 3.248376742e-03f, 3.254051609e-03f, 3.259720574e-03f, 3.265383627e-03f, 3.271040759e-03f,
+3.276691960e-03f, 3.282337221e-03f, 3.287976532e-03f, 3.293609885e-03f, 3.299237268e-03f, 3.304858674e-03f, 3.310474092e-03f, 3.316083513e-03f, 3.321686929e-03f, 3.327284328e-03f,
+3.332875703e-03f, 3.338461043e-03f, 3.344040340e-03f, 3.349613583e-03f, 3.355180764e-03f, 3.360741874e-03f, 3.366296902e-03f, 3.371845841e-03f, 3.377388679e-03f, 3.382925409e-03f,
+3.388456020e-03f, 3.393980504e-03f, 3.399498852e-03f, 3.405011053e-03f, 3.410517100e-03f, 3.416016982e-03f, 3.421510691e-03f, 3.426998217e-03f, 3.432479551e-03f, 3.437954684e-03f,
+3.443423607e-03f, 3.448886310e-03f, 3.454342785e-03f, 3.459793023e-03f, 3.465237013e-03f, 3.470674748e-03f, 3.476106218e-03f, 3.481531414e-03f, 3.486950327e-03f, 3.492362948e-03f,
+3.497769268e-03f, 3.503169277e-03f, 3.508562967e-03f, 3.513950330e-03f, 3.519331354e-03f, 3.524706033e-03f, 3.530074357e-03f, 3.535436316e-03f, 3.540791902e-03f, 3.546141106e-03f,
+3.551483920e-03f, 3.556820333e-03f, 3.562150338e-03f, 3.567473925e-03f, 3.572791085e-03f, 3.578101810e-03f, 3.583406091e-03f, 3.588703918e-03f, 3.593995284e-03f, 3.599280178e-03f,
+3.604558594e-03f, 3.609830520e-03f, 3.615095950e-03f, 3.620354873e-03f, 3.625607282e-03f, 3.630853167e-03f, 3.636092520e-03f, 3.641325332e-03f, 3.646551594e-03f, 3.651771298e-03f,
+3.656984435e-03f, 3.662190995e-03f, 3.667390972e-03f, 3.672584355e-03f, 3.677771137e-03f, 3.682951308e-03f, 3.688124860e-03f, 3.693291784e-03f, 3.698452072e-03f, 3.703605715e-03f,
+3.708752705e-03f, 3.713893033e-03f, 3.719026690e-03f, 3.724153668e-03f, 3.729273958e-03f, 3.734387552e-03f, 3.739494442e-03f, 3.744594618e-03f, 3.749688073e-03f, 3.754774798e-03f,
+3.759854784e-03f, 3.764928023e-03f, 3.769994507e-03f, 3.775054226e-03f, 3.780107174e-03f, 3.785153341e-03f, 3.790192718e-03f, 3.795225299e-03f, 3.800251073e-03f, 3.805270034e-03f,
+3.810282171e-03f, 3.815287478e-03f, 3.820285946e-03f, 3.825277567e-03f, 3.830262331e-03f, 3.835240232e-03f, 3.840211260e-03f, 3.845175408e-03f, 3.850132668e-03f, 3.855083030e-03f,
+3.860026487e-03f, 3.864963030e-03f, 3.869892652e-03f, 3.874815345e-03f, 3.879731099e-03f, 3.884639907e-03f, 3.889541761e-03f, 3.894436653e-03f, 3.899324574e-03f, 3.904205516e-03f,
+3.909079472e-03f, 3.913946433e-03f, 3.918806392e-03f, 3.923659339e-03f, 3.928505268e-03f, 3.933344169e-03f, 3.938176036e-03f, 3.943000860e-03f, 3.947818633e-03f, 3.952629346e-03f,
+3.957432993e-03f, 3.962229565e-03f, 3.967019055e-03f, 3.971801453e-03f, 3.976576753e-03f, 3.981344947e-03f, 3.986106026e-03f, 3.990859983e-03f, 3.995606809e-03f, 4.000346498e-03f,
+4.005079040e-03f, 4.009804430e-03f, 4.014522657e-03f, 4.019233715e-03f, 4.023937596e-03f, 4.028634293e-03f, 4.033323796e-03f, 4.038006100e-03f, 4.042681195e-03f, 4.047349074e-03f,
+4.052009730e-03f, 4.056663155e-03f, 4.061309340e-03f, 4.065948279e-03f, 4.070579964e-03f, 4.075204387e-03f, 4.079821541e-03f, 4.084431417e-03f, 4.089034008e-03f, 4.093629307e-03f,
+4.098217306e-03f, 4.102797998e-03f, 4.107371375e-03f, 4.111937429e-03f, 4.116496152e-03f, 4.121047538e-03f, 4.125591579e-03f, 4.130128268e-03f, 4.134657596e-03f, 4.139179556e-03f,
+4.143694142e-03f, 4.148201345e-03f, 4.152701158e-03f, 4.157193574e-03f, 4.161678585e-03f, 4.166156184e-03f, 4.170626364e-03f, 4.175089116e-03f, 4.179544435e-03f, 4.183992312e-03f,
+4.188432740e-03f, 4.192865712e-03f, 4.197291220e-03f, 4.201709258e-03f, 4.206119818e-03f, 4.210522892e-03f, 4.214918474e-03f, 4.219306557e-03f, 4.223687132e-03f, 4.228060193e-03f,
+4.232425733e-03f, 4.236783745e-03f, 4.241134221e-03f, 4.245477154e-03f, 4.249812537e-03f, 4.254140363e-03f, 4.258460625e-03f, 4.262773316e-03f, 4.267078428e-03f, 4.271375955e-03f,
+4.275665890e-03f, 4.279948225e-03f, 4.284222953e-03f, 4.288490068e-03f, 4.292749563e-03f, 4.297001430e-03f, 4.301245662e-03f, 4.305482253e-03f, 4.309711196e-03f, 4.313932483e-03f,
+4.318146108e-03f, 4.322352064e-03f, 4.326550344e-03f, 4.330740941e-03f, 4.334923849e-03f, 4.339099059e-03f, 4.343266567e-03f, 4.347426364e-03f, 4.351578443e-03f, 4.355722799e-03f,
+4.359859425e-03f, 4.363988312e-03f, 4.368109456e-03f, 4.372222849e-03f, 4.376328484e-03f, 4.380426355e-03f, 4.384516454e-03f, 4.388598776e-03f, 4.392673314e-03f, 4.396740060e-03f,
+4.400799009e-03f, 4.404850153e-03f, 4.408893487e-03f, 4.412929002e-03f, 4.416956694e-03f, 4.420976555e-03f, 4.424988578e-03f, 4.428992758e-03f, 4.432989088e-03f, 4.436977560e-03f,
+4.440958169e-03f, 4.444930908e-03f, 4.448895771e-03f, 4.452852751e-03f, 4.456801842e-03f, 4.460743036e-03f, 4.464676329e-03f, 4.468601713e-03f, 4.472519183e-03f, 4.476428731e-03f,
+4.480330351e-03f, 4.484224037e-03f, 4.488109783e-03f, 4.491987582e-03f, 4.495857428e-03f, 4.499719315e-03f, 4.503573236e-03f, 4.507419185e-03f, 4.511257157e-03f, 4.515087144e-03f,
+4.518909140e-03f, 4.522723139e-03f, 4.526529136e-03f, 4.530327123e-03f, 4.534117095e-03f, 4.537899045e-03f, 4.541672968e-03f, 4.545438857e-03f, 4.549196706e-03f, 4.552946510e-03f,
+4.556688261e-03f, 4.560421954e-03f, 4.564147583e-03f, 4.567865141e-03f, 4.571574624e-03f, 4.575276024e-03f, 4.578969335e-03f, 4.582654553e-03f, 4.586331670e-03f, 4.590000682e-03f,
+4.593661581e-03f, 4.597314362e-03f, 4.600959019e-03f, 4.604595546e-03f, 4.608223937e-03f, 4.611844187e-03f, 4.615456290e-03f, 4.619060239e-03f, 4.622656029e-03f, 4.626243654e-03f,
+4.629823108e-03f, 4.633394386e-03f, 4.636957481e-03f, 4.640512389e-03f, 4.644059102e-03f, 4.647597616e-03f, 4.651127925e-03f, 4.654650023e-03f, 4.658163904e-03f, 4.661669564e-03f,
+4.665166995e-03f, 4.668656192e-03f, 4.672137151e-03f, 4.675609864e-03f, 4.679074328e-03f, 4.682530535e-03f, 4.685978481e-03f, 4.689418159e-03f, 4.692849565e-03f, 4.696272693e-03f,
+4.699687537e-03f, 4.703094092e-03f, 4.706492353e-03f, 4.709882313e-03f, 4.713263968e-03f, 4.716637311e-03f, 4.720002339e-03f, 4.723359044e-03f, 4.726707423e-03f, 4.730047469e-03f,
+4.733379176e-03f, 4.736702541e-03f, 4.740017557e-03f, 4.743324219e-03f, 4.746622522e-03f, 4.749912460e-03f, 4.753194029e-03f, 4.756467222e-03f, 4.759732035e-03f, 4.762988463e-03f,
+4.766236500e-03f, 4.769476141e-03f, 4.772707380e-03f, 4.775930214e-03f, 4.779144636e-03f, 4.782350641e-03f, 4.785548225e-03f, 4.788737382e-03f, 4.791918107e-03f, 4.795090395e-03f,
+4.798254241e-03f, 4.801409639e-03f, 4.804556586e-03f, 4.807695075e-03f, 4.810825103e-03f, 4.813946663e-03f, 4.817059751e-03f, 4.820164361e-03f, 4.823260490e-03f, 4.826348131e-03f,
+4.829427281e-03f, 4.832497934e-03f, 4.835560085e-03f, 4.838613730e-03f, 4.841658863e-03f, 4.844695480e-03f, 4.847723575e-03f, 4.850743145e-03f, 4.853754184e-03f, 4.856756688e-03f,
+4.859750651e-03f, 4.862736069e-03f, 4.865712938e-03f, 4.868681252e-03f, 4.871641006e-03f, 4.874592197e-03f, 4.877534819e-03f, 4.880468868e-03f, 4.883394340e-03f, 4.886311228e-03f,
+4.889219530e-03f, 4.892119239e-03f, 4.895010353e-03f, 4.897892865e-03f, 4.900766772e-03f, 4.903632069e-03f, 4.906488751e-03f, 4.909336815e-03f, 4.912176255e-03f, 4.915007067e-03f,
+4.917829246e-03f, 4.920642788e-03f, 4.923447689e-03f, 4.926243945e-03f, 4.929031550e-03f, 4.931810500e-03f, 4.934580791e-03f, 4.937342419e-03f, 4.940095380e-03f, 4.942839668e-03f,
+4.945575280e-03f, 4.948302212e-03f, 4.951020458e-03f, 4.953730015e-03f, 4.956430879e-03f, 4.959123045e-03f, 4.961806510e-03f, 4.964481268e-03f, 4.967147316e-03f, 4.969804649e-03f,
+4.972453264e-03f, 4.975093156e-03f, 4.977724321e-03f, 4.980346755e-03f, 4.982960453e-03f, 4.985565413e-03f, 4.988161629e-03f, 4.990749098e-03f, 4.993327815e-03f, 4.995897777e-03f,
+4.998458980e-03f, 5.001011419e-03f, 5.003555091e-03f, 5.006089991e-03f, 5.008616116e-03f, 5.011133462e-03f, 5.013642025e-03f, 5.016141800e-03f, 5.018632785e-03f, 5.021114975e-03f,
+5.023588366e-03f, 5.026052954e-03f, 5.028508736e-03f, 5.030955708e-03f, 5.033393866e-03f, 5.035823206e-03f, 5.038243725e-03f, 5.040655418e-03f, 5.043058283e-03f, 5.045452315e-03f,
+5.047837510e-03f, 5.050213865e-03f, 5.052581377e-03f, 5.054940041e-03f, 5.057289853e-03f, 5.059630812e-03f, 5.061962912e-03f, 5.064286150e-03f, 5.066600522e-03f, 5.068906026e-03f,
+5.071202657e-03f, 5.073490411e-03f, 5.075769287e-03f, 5.078039279e-03f, 5.080300384e-03f, 5.082552599e-03f, 5.084795921e-03f, 5.087030346e-03f, 5.089255870e-03f, 5.091472491e-03f,
+5.093680204e-03f, 5.095879007e-03f, 5.098068896e-03f, 5.100249867e-03f, 5.102421918e-03f, 5.104585045e-03f, 5.106739245e-03f, 5.108884514e-03f, 5.111020850e-03f, 5.113148248e-03f,
+5.115266706e-03f, 5.117376221e-03f, 5.119476789e-03f, 5.121568407e-03f, 5.123651072e-03f, 5.125724780e-03f, 5.127789530e-03f, 5.129845317e-03f, 5.131892138e-03f, 5.133929990e-03f,
+5.135958871e-03f, 5.137978777e-03f, 5.139989705e-03f, 5.141991652e-03f, 5.143984615e-03f, 5.145968592e-03f, 5.147943578e-03f, 5.149909571e-03f, 5.151866569e-03f, 5.153814568e-03f,
+5.155753565e-03f, 5.157683557e-03f, 5.159604542e-03f, 5.161516516e-03f, 5.163419478e-03f, 5.165313423e-03f, 5.167198349e-03f, 5.169074253e-03f, 5.170941133e-03f, 5.172798986e-03f,
+5.174647808e-03f, 5.176487598e-03f, 5.178318352e-03f, 5.180140068e-03f, 5.181952742e-03f, 5.183756373e-03f, 5.185550958e-03f, 5.187336494e-03f, 5.189112978e-03f, 5.190880408e-03f,
+5.192638781e-03f, 5.194388094e-03f, 5.196128345e-03f, 5.197859532e-03f, 5.199581652e-03f, 5.201294702e-03f, 5.202998679e-03f, 5.204693582e-03f, 5.206379408e-03f, 5.208056154e-03f,
+5.209723818e-03f, 5.211382398e-03f, 5.213031890e-03f, 5.214672294e-03f, 5.216303605e-03f, 5.217925822e-03f, 5.219538943e-03f, 5.221142965e-03f, 5.222737886e-03f, 5.224323703e-03f,
+5.225900415e-03f, 5.227468019e-03f, 5.229026512e-03f, 5.230575893e-03f, 5.232116159e-03f, 5.233647308e-03f, 5.235169338e-03f, 5.236682247e-03f, 5.238186032e-03f, 5.239680692e-03f,
+5.241166223e-03f, 5.242642625e-03f, 5.244109895e-03f, 5.245568031e-03f, 5.247017030e-03f, 5.248456892e-03f, 5.249887613e-03f, 5.251309191e-03f, 5.252721626e-03f, 5.254124914e-03f,
+5.255519054e-03f, 5.256904044e-03f, 5.258279881e-03f, 5.259646565e-03f, 5.261004092e-03f, 5.262352462e-03f, 5.263691672e-03f, 5.265021720e-03f, 5.266342604e-03f, 5.267654324e-03f,
+5.268956876e-03f, 5.270250259e-03f, 5.271534472e-03f, 5.272809512e-03f, 5.274075378e-03f, 5.275332068e-03f, 5.276579580e-03f, 5.277817913e-03f, 5.279047065e-03f, 5.280267034e-03f,
+5.281477819e-03f, 5.282679417e-03f, 5.283871828e-03f, 5.285055050e-03f, 5.286229081e-03f, 5.287393919e-03f, 5.288549563e-03f, 5.289696012e-03f, 5.290833264e-03f, 5.291961317e-03f,
+5.293080170e-03f, 5.294189821e-03f, 5.295290269e-03f, 5.296381513e-03f, 5.297463551e-03f, 5.298536382e-03f, 5.299600004e-03f, 5.300654415e-03f, 5.301699616e-03f, 5.302735603e-03f,
+5.303762376e-03f, 5.304779934e-03f, 5.305788275e-03f, 5.306787398e-03f, 5.307777301e-03f, 5.308757984e-03f, 5.309729445e-03f, 5.310691683e-03f, 5.311644697e-03f, 5.312588485e-03f,
+5.313523046e-03f, 5.314448380e-03f, 5.315364484e-03f, 5.316271359e-03f, 5.317169002e-03f, 5.318057413e-03f, 5.318936591e-03f, 5.319806534e-03f, 5.320667241e-03f, 5.321518713e-03f,
+5.322360946e-03f, 5.323193941e-03f, 5.324017696e-03f, 5.324832211e-03f, 5.325637485e-03f, 5.326433516e-03f, 5.327220304e-03f, 5.327997847e-03f, 5.328766145e-03f, 5.329525198e-03f,
+5.330275003e-03f, 5.331015561e-03f, 5.331746871e-03f, 5.332468931e-03f, 5.333181741e-03f, 5.333885300e-03f, 5.334579607e-03f, 5.335264662e-03f, 5.335940464e-03f, 5.336607012e-03f,
+5.337264305e-03f, 5.337912344e-03f, 5.338551126e-03f, 5.339180652e-03f, 5.339800921e-03f, 5.340411932e-03f, 5.341013684e-03f, 5.341606178e-03f, 5.342189412e-03f, 5.342763386e-03f,
+5.343328100e-03f, 5.343883552e-03f, 5.344429742e-03f, 5.344966671e-03f, 5.345494337e-03f, 5.346012740e-03f, 5.346521879e-03f, 5.347021755e-03f, 5.347512366e-03f, 5.347993712e-03f,
+5.348465794e-03f, 5.348928609e-03f, 5.349382160e-03f, 5.349826444e-03f, 5.350261461e-03f, 5.350687212e-03f, 5.351103696e-03f, 5.351510912e-03f, 5.351908861e-03f, 5.352297542e-03f,
+5.352676956e-03f, 5.353047101e-03f, 5.353407978e-03f, 5.353759586e-03f, 5.354101925e-03f, 5.354434996e-03f, 5.354758798e-03f, 5.355073331e-03f, 5.355378594e-03f, 5.355674589e-03f,
+5.355961314e-03f, 5.356238770e-03f, 5.356506957e-03f, 5.356765874e-03f, 5.357015522e-03f, 5.357255901e-03f, 5.357487010e-03f, 5.357708851e-03f, 5.357921422e-03f, 5.358124724e-03f,
+5.358318758e-03f, 5.358503522e-03f, 5.358679018e-03f, 5.358845245e-03f, 5.359002204e-03f, 5.359149895e-03f, 5.359288318e-03f, 5.359417473e-03f, 5.359537361e-03f, 5.359647981e-03f,
+5.359749335e-03f, 5.359841421e-03f, 5.359924242e-03f, 5.359997796e-03f, 5.360062085e-03f, 5.360117108e-03f, 5.360162866e-03f, 5.360199359e-03f, 5.360226588e-03f, 5.360244553e-03f,
+5.360253255e-03f, 5.360252693e-03f, 5.360242869e-03f, 5.360223783e-03f, 5.360195436e-03f, 5.360157827e-03f, 5.360110958e-03f, 5.360054829e-03f, 5.359989440e-03f, 5.359914792e-03f,
+5.359830886e-03f, 5.359737722e-03f, 5.359635302e-03f, 5.359523624e-03f, 5.359402691e-03f, 5.359272503e-03f, 5.359133060e-03f, 5.358984363e-03f, 5.358826414e-03f, 5.358659212e-03f,
+5.358482758e-03f, 5.358297053e-03f, 5.358102099e-03f, 5.357897895e-03f, 5.357684443e-03f, 5.357461743e-03f, 5.357229796e-03f, 5.356988603e-03f, 5.356738166e-03f, 5.356478484e-03f,
+5.356209558e-03f, 5.355931391e-03f, 5.355643982e-03f, 5.355347332e-03f, 5.355041443e-03f, 5.354726316e-03f, 5.354401951e-03f, 5.354068349e-03f, 5.353725512e-03f, 5.353373441e-03f,
+5.353012136e-03f, 5.352641599e-03f, 5.352261830e-03f, 5.351872832e-03f, 5.351474604e-03f, 5.351067149e-03f, 5.350650467e-03f, 5.350224560e-03f, 5.349789428e-03f, 5.349345074e-03f,
+5.348891497e-03f, 5.348428700e-03f, 5.347956683e-03f, 5.347475448e-03f, 5.346984997e-03f, 5.346485330e-03f, 5.345976448e-03f, 5.345458354e-03f, 5.344931049e-03f, 5.344394533e-03f,
+5.343848808e-03f, 5.343293876e-03f, 5.342729738e-03f, 5.342156396e-03f, 5.341573850e-03f, 5.340982103e-03f, 5.340381155e-03f, 5.339771009e-03f, 5.339151666e-03f, 5.338523127e-03f,
+5.337885394e-03f, 5.337238469e-03f, 5.336582352e-03f, 5.335917046e-03f, 5.335242553e-03f, 5.334558873e-03f, 5.333866008e-03f, 5.333163961e-03f, 5.332452732e-03f, 5.331732324e-03f,
+5.331002739e-03f, 5.330263977e-03f, 5.329516040e-03f, 5.328758931e-03f, 5.327992651e-03f, 5.327217202e-03f, 5.326432585e-03f, 5.325638803e-03f, 5.324835858e-03f, 5.324023750e-03f,
+5.323202483e-03f, 5.322372057e-03f, 5.321532475e-03f, 5.320683739e-03f, 5.319825850e-03f, 5.318958811e-03f, 5.318082623e-03f, 5.317197288e-03f, 5.316302809e-03f, 5.315399188e-03f,
+5.314486425e-03f, 5.313564525e-03f, 5.312633487e-03f, 5.311693315e-03f, 5.310744011e-03f, 5.309785577e-03f, 5.308818014e-03f, 5.307841325e-03f, 5.306855512e-03f, 5.305860578e-03f,
+5.304856524e-03f, 5.303843352e-03f, 5.302821065e-03f, 5.301789665e-03f, 5.300749154e-03f, 5.299699535e-03f, 5.298640810e-03f, 5.297572980e-03f, 5.296496049e-03f, 5.295410018e-03f,
+5.294314890e-03f, 5.293210668e-03f, 5.292097353e-03f, 5.290974948e-03f, 5.289843455e-03f, 5.288702878e-03f, 5.287553217e-03f, 5.286394476e-03f, 5.285226657e-03f, 5.284049763e-03f,
+5.282863795e-03f, 5.281668758e-03f, 5.280464652e-03f, 5.279251481e-03f, 5.278029247e-03f, 5.276797952e-03f, 5.275557600e-03f, 5.274308192e-03f, 5.273049732e-03f, 5.271782222e-03f,
+5.270505665e-03f, 5.269220063e-03f, 5.267925419e-03f, 5.266621736e-03f, 5.265309016e-03f, 5.263987262e-03f, 5.262656477e-03f, 5.261316664e-03f, 5.259967825e-03f, 5.258609963e-03f,
+5.257243080e-03f, 5.255867181e-03f, 5.254482267e-03f, 5.253088341e-03f, 5.251685407e-03f, 5.250273467e-03f, 5.248852523e-03f, 5.247422580e-03f, 5.245983639e-03f, 5.244535704e-03f,
+5.243078778e-03f, 5.241612863e-03f, 5.240137963e-03f, 5.238654080e-03f, 5.237161218e-03f, 5.235659380e-03f, 5.234148568e-03f, 5.232628786e-03f, 5.231100036e-03f, 5.229562323e-03f,
+5.228015648e-03f, 5.226460016e-03f, 5.224895428e-03f, 5.223321889e-03f, 5.221739402e-03f, 5.220147969e-03f, 5.218547594e-03f, 5.216938280e-03f, 5.215320030e-03f, 5.213692848e-03f,
+5.212056736e-03f, 5.210411699e-03f, 5.208757739e-03f, 5.207094859e-03f, 5.205423064e-03f, 5.203742355e-03f, 5.202052737e-03f, 5.200354214e-03f, 5.198646787e-03f, 5.196930461e-03f,
+5.195205240e-03f, 5.193471126e-03f, 5.191728123e-03f, 5.189976234e-03f, 5.188215463e-03f, 5.186445813e-03f, 5.184667289e-03f, 5.182879893e-03f, 5.181083628e-03f, 5.179278499e-03f,
+5.177464509e-03f, 5.175641662e-03f, 5.173809961e-03f, 5.171969409e-03f, 5.170120011e-03f, 5.168261770e-03f, 5.166394690e-03f, 5.164518774e-03f, 5.162634025e-03f, 5.160740449e-03f,
+5.158838048e-03f, 5.156926826e-03f, 5.155006786e-03f, 5.153077934e-03f, 5.151140272e-03f, 5.149193804e-03f, 5.147238533e-03f, 5.145274465e-03f, 5.143301602e-03f, 5.141319949e-03f,
+5.139329508e-03f, 5.137330285e-03f, 5.135322283e-03f, 5.133305506e-03f, 5.131279958e-03f, 5.129245643e-03f, 5.127202564e-03f, 5.125150726e-03f, 5.123090133e-03f, 5.121020788e-03f,
+5.118942696e-03f, 5.116855861e-03f, 5.114760286e-03f, 5.112655977e-03f, 5.110542936e-03f, 5.108421168e-03f, 5.106290677e-03f, 5.104151467e-03f, 5.102003542e-03f, 5.099846907e-03f,
+5.097681565e-03f, 5.095507521e-03f, 5.093324779e-03f, 5.091133343e-03f, 5.088933218e-03f, 5.086724407e-03f, 5.084506915e-03f, 5.082280745e-03f, 5.080045904e-03f, 5.077802393e-03f,
+5.075550219e-03f, 5.073289385e-03f, 5.071019895e-03f, 5.068741755e-03f, 5.066454968e-03f, 5.064159538e-03f, 5.061855470e-03f, 5.059542769e-03f, 5.057221439e-03f, 5.054891484e-03f,
+5.052552909e-03f, 5.050205718e-03f, 5.047849916e-03f, 5.045485507e-03f, 5.043112496e-03f, 5.040730887e-03f, 5.038340685e-03f, 5.035941894e-03f, 5.033534519e-03f, 5.031118564e-03f,
+5.028694035e-03f, 5.026260935e-03f, 5.023819270e-03f, 5.021369044e-03f, 5.018910261e-03f, 5.016442926e-03f, 5.013967045e-03f, 5.011482621e-03f, 5.008989659e-03f, 5.006488165e-03f,
+5.003978143e-03f, 5.001459597e-03f, 4.998932532e-03f, 4.996396954e-03f, 4.993852867e-03f, 4.991300275e-03f, 4.988739184e-03f, 4.986169599e-03f, 4.983591523e-03f, 4.981004964e-03f,
+4.978409924e-03f, 4.975806409e-03f, 4.973194424e-03f, 4.970573974e-03f, 4.967945063e-03f, 4.965307697e-03f, 4.962661882e-03f, 4.960007620e-03f, 4.957344919e-03f, 4.954673782e-03f,
+4.951994215e-03f, 4.949306222e-03f, 4.946609810e-03f, 4.943904982e-03f, 4.941191745e-03f, 4.938470103e-03f, 4.935740060e-03f, 4.933001624e-03f, 4.930254797e-03f, 4.927499587e-03f,
+4.924735997e-03f, 4.921964033e-03f, 4.919183701e-03f, 4.916395005e-03f, 4.913597950e-03f, 4.910792543e-03f, 4.907978787e-03f, 4.905156690e-03f, 4.902326254e-03f, 4.899487487e-03f,
+4.896640394e-03f, 4.893784979e-03f, 4.890921248e-03f, 4.888049206e-03f, 4.885168859e-03f, 4.882280213e-03f, 4.879383272e-03f, 4.876478042e-03f, 4.873564528e-03f, 4.870642736e-03f,
+4.867712671e-03f, 4.864774340e-03f, 4.861827746e-03f, 4.858872896e-03f, 4.855909796e-03f, 4.852938450e-03f, 4.849958864e-03f, 4.846971045e-03f, 4.843974997e-03f, 4.840970726e-03f,
+4.837958237e-03f, 4.834937537e-03f, 4.831908631e-03f, 4.828871524e-03f, 4.825826222e-03f, 4.822772731e-03f, 4.819711057e-03f, 4.816641204e-03f, 4.813563180e-03f, 4.810476989e-03f,
+4.807382638e-03f, 4.804280132e-03f, 4.801169477e-03f, 4.798050678e-03f, 4.794923742e-03f, 4.791788674e-03f, 4.788645480e-03f, 4.785494165e-03f, 4.782334737e-03f, 4.779167200e-03f,
+4.775991561e-03f, 4.772807825e-03f, 4.769615998e-03f, 4.766416087e-03f, 4.763208096e-03f, 4.759992033e-03f, 4.756767903e-03f, 4.753535711e-03f, 4.750295465e-03f, 4.747047169e-03f,
+4.743790830e-03f, 4.740526455e-03f, 4.737254048e-03f, 4.733973616e-03f, 4.730685166e-03f, 4.727388703e-03f, 4.724084233e-03f, 4.720771762e-03f, 4.717451297e-03f, 4.714122843e-03f,
+4.710786408e-03f, 4.707441996e-03f, 4.704089614e-03f, 4.700729269e-03f, 4.697360966e-03f, 4.693984712e-03f, 4.690600513e-03f, 4.687208375e-03f, 4.683808305e-03f, 4.680400308e-03f,
+4.676984391e-03f, 4.673560560e-03f, 4.670128822e-03f, 4.666689183e-03f, 4.663241649e-03f, 4.659786227e-03f, 4.656322922e-03f, 4.652851742e-03f, 4.649372693e-03f, 4.645885780e-03f,
+4.642391012e-03f, 4.638888393e-03f, 4.635377930e-03f, 4.631859630e-03f, 4.628333500e-03f, 4.624799545e-03f, 4.621257773e-03f, 4.617708189e-03f, 4.614150801e-03f, 4.610585614e-03f,
+4.607012636e-03f, 4.603431873e-03f, 4.599843331e-03f, 4.596247018e-03f, 4.592642939e-03f, 4.589031101e-03f, 4.585411511e-03f, 4.581784176e-03f, 4.578149101e-03f, 4.574506295e-03f,
+4.570855763e-03f, 4.567197513e-03f, 4.563531550e-03f, 4.559857882e-03f, 4.556176515e-03f, 4.552487457e-03f, 4.548790713e-03f, 4.545086291e-03f, 4.541374197e-03f, 4.537654439e-03f,
+4.533927022e-03f, 4.530191955e-03f, 4.526449243e-03f, 4.522698893e-03f, 4.518940913e-03f, 4.515175309e-03f, 4.511402088e-03f, 4.507621257e-03f, 4.503832823e-03f, 4.500036793e-03f,
+4.496233173e-03f, 4.492421972e-03f, 4.488603195e-03f, 4.484776849e-03f, 4.480942942e-03f, 4.477101481e-03f, 4.473252473e-03f, 4.469395924e-03f, 4.465531841e-03f, 4.461660233e-03f,
+4.457781105e-03f, 4.453894465e-03f, 4.450000320e-03f, 4.446098678e-03f, 4.442189544e-03f, 4.438272926e-03f, 4.434348832e-03f, 4.430417269e-03f, 4.426478243e-03f, 4.422531763e-03f,
+4.418577834e-03f, 4.414616464e-03f, 4.410647662e-03f, 4.406671432e-03f, 4.402687784e-03f, 4.398696724e-03f, 4.394698260e-03f, 4.390692398e-03f, 4.386679146e-03f, 4.382658512e-03f,
+4.378630502e-03f, 4.374595124e-03f, 4.370552386e-03f, 4.366502294e-03f, 4.362444856e-03f, 4.358380080e-03f, 4.354307972e-03f, 4.350228541e-03f, 4.346141793e-03f, 4.342047736e-03f,
+4.337946378e-03f, 4.333837725e-03f, 4.329721786e-03f, 4.325598568e-03f, 4.321468077e-03f, 4.317330323e-03f, 4.313185312e-03f, 4.309033052e-03f, 4.304873550e-03f, 4.300706814e-03f,
+4.296532852e-03f, 4.292351670e-03f, 4.288163278e-03f, 4.283967681e-03f, 4.279764888e-03f, 4.275554907e-03f, 4.271337745e-03f, 4.267113409e-03f, 4.262881908e-03f, 4.258643248e-03f,
+4.254397439e-03f, 4.250144486e-03f, 4.245884399e-03f, 4.241617185e-03f, 4.237342851e-03f, 4.233061405e-03f, 4.228772856e-03f, 4.224477210e-03f, 4.220174476e-03f, 4.215864661e-03f,
+4.211547773e-03f, 4.207223820e-03f, 4.202892809e-03f, 4.198554750e-03f, 4.194209648e-03f, 4.189857513e-03f, 4.185498353e-03f, 4.181132174e-03f, 4.176758985e-03f, 4.172378794e-03f,
+4.167991608e-03f, 4.163597437e-03f, 4.159196286e-03f, 4.154788166e-03f, 4.150373083e-03f, 4.145951045e-03f, 4.141522061e-03f, 4.137086138e-03f, 4.132643285e-03f, 4.128193509e-03f,
+4.123736818e-03f, 4.119273222e-03f, 4.114802726e-03f, 4.110325341e-03f, 4.105841073e-03f, 4.101349931e-03f, 4.096851923e-03f, 4.092347057e-03f, 4.087835341e-03f, 4.083316784e-03f,
+4.078791392e-03f, 4.074259176e-03f, 4.069720142e-03f, 4.065174299e-03f, 4.060621656e-03f, 4.056062219e-03f, 4.051495998e-03f, 4.046923001e-03f, 4.042343236e-03f, 4.037756712e-03f,
+4.033163435e-03f, 4.028563416e-03f, 4.023956661e-03f, 4.019343180e-03f, 4.014722981e-03f, 4.010096071e-03f, 4.005462460e-03f, 4.000822156e-03f, 3.996175166e-03f, 3.991521500e-03f,
+3.986861166e-03f, 3.982194171e-03f, 3.977520526e-03f, 3.972840237e-03f, 3.968153313e-03f, 3.963459763e-03f, 3.958759595e-03f, 3.954052818e-03f, 3.949339440e-03f, 3.944619470e-03f,
+3.939892915e-03f, 3.935159785e-03f, 3.930420088e-03f, 3.925673833e-03f, 3.920921027e-03f, 3.916161681e-03f, 3.911395801e-03f, 3.906623397e-03f, 3.901844478e-03f, 3.897059051e-03f,
+3.892267126e-03f, 3.887468710e-03f, 3.882663814e-03f, 3.877852444e-03f, 3.873034611e-03f, 3.868210322e-03f, 3.863379586e-03f, 3.858542412e-03f, 3.853698809e-03f, 3.848848785e-03f,
+3.843992349e-03f, 3.839129509e-03f, 3.834260275e-03f, 3.829384655e-03f, 3.824502658e-03f, 3.819614292e-03f, 3.814719567e-03f, 3.809818491e-03f, 3.804911073e-03f, 3.799997321e-03f,
+3.795077245e-03f, 3.790150853e-03f, 3.785218154e-03f, 3.780279157e-03f, 3.775333871e-03f, 3.770382305e-03f, 3.765424467e-03f, 3.760460367e-03f, 3.755490013e-03f, 3.750513414e-03f,
+3.745530579e-03f, 3.740541517e-03f, 3.735546237e-03f, 3.730544748e-03f, 3.725537059e-03f, 3.720523179e-03f, 3.715503116e-03f, 3.710476880e-03f, 3.705444480e-03f, 3.700405924e-03f,
+3.695361222e-03f, 3.690310383e-03f, 3.685253416e-03f, 3.680190330e-03f, 3.675121133e-03f, 3.670045835e-03f, 3.664964446e-03f, 3.659876973e-03f, 3.654783427e-03f, 3.649683816e-03f,
+3.644578149e-03f, 3.639466436e-03f, 3.634348685e-03f, 3.629224906e-03f, 3.624095108e-03f, 3.618959301e-03f, 3.613817492e-03f, 3.608669692e-03f, 3.603515909e-03f, 3.598356154e-03f,
+3.593190434e-03f, 3.588018760e-03f, 3.582841140e-03f, 3.577657584e-03f, 3.572468101e-03f, 3.567272700e-03f, 3.562071391e-03f, 3.556864182e-03f, 3.551651083e-03f, 3.546432104e-03f,
+3.541207254e-03f, 3.535976541e-03f, 3.530739976e-03f, 3.525497568e-03f, 3.520249325e-03f, 3.514995258e-03f, 3.509735376e-03f, 3.504469688e-03f, 3.499198203e-03f, 3.493920931e-03f,
+3.488637882e-03f, 3.483349064e-03f, 3.478054487e-03f, 3.472754161e-03f, 3.467448095e-03f, 3.462136299e-03f, 3.456818781e-03f, 3.451495552e-03f, 3.446166620e-03f, 3.440831996e-03f,
+3.435491689e-03f, 3.430145708e-03f, 3.424794063e-03f, 3.419436763e-03f, 3.414073819e-03f, 3.408705239e-03f, 3.403331033e-03f, 3.397951210e-03f, 3.392565781e-03f, 3.387174754e-03f,
+3.381778140e-03f, 3.376375948e-03f, 3.370968188e-03f, 3.365554868e-03f, 3.360136000e-03f, 3.354711592e-03f, 3.349281654e-03f, 3.343846195e-03f, 3.338405226e-03f, 3.332958757e-03f,
+3.327506796e-03f, 3.322049353e-03f, 3.316586439e-03f, 3.311118062e-03f, 3.305644234e-03f, 3.300164962e-03f, 3.294680258e-03f, 3.289190130e-03f, 3.283694589e-03f, 3.278193644e-03f,
+3.272687306e-03f, 3.267175583e-03f, 3.261658486e-03f, 3.256136024e-03f, 3.250608208e-03f, 3.245075046e-03f, 3.239536550e-03f, 3.233992728e-03f, 3.228443591e-03f, 3.222889149e-03f,
+3.217329411e-03f, 3.211764386e-03f, 3.206194086e-03f, 3.200618520e-03f, 3.195037698e-03f, 3.189451629e-03f, 3.183860324e-03f, 3.178263793e-03f, 3.172662045e-03f, 3.167055091e-03f,
+3.161442940e-03f, 3.155825602e-03f, 3.150203087e-03f, 3.144575406e-03f, 3.138942568e-03f, 3.133304583e-03f, 3.127661462e-03f, 3.122013214e-03f, 3.116359848e-03f, 3.110701377e-03f,
+3.105037808e-03f, 3.099369153e-03f, 3.093695421e-03f, 3.088016623e-03f, 3.082332768e-03f, 3.076643866e-03f, 3.070949929e-03f, 3.065250965e-03f, 3.059546985e-03f, 3.053837998e-03f,
+3.048124016e-03f, 3.042405048e-03f, 3.036681104e-03f, 3.030952195e-03f, 3.025218330e-03f, 3.019479520e-03f, 3.013735775e-03f, 3.007987105e-03f, 3.002233520e-03f, 2.996475031e-03f,
+2.990711647e-03f, 2.984943379e-03f, 2.979170237e-03f, 2.973392231e-03f, 2.967609372e-03f, 2.961821669e-03f, 2.956029133e-03f, 2.950231775e-03f, 2.944429604e-03f, 2.938622630e-03f,
+2.932810865e-03f, 2.926994317e-03f, 2.921172999e-03f, 2.915346919e-03f, 2.909516088e-03f, 2.903680517e-03f, 2.897840215e-03f, 2.891995194e-03f, 2.886145462e-03f, 2.880291032e-03f,
+2.874431913e-03f, 2.868568115e-03f, 2.862699649e-03f, 2.856826525e-03f, 2.850948754e-03f, 2.845066346e-03f, 2.839179311e-03f, 2.833287660e-03f, 2.827391403e-03f, 2.821490550e-03f,
+2.815585113e-03f, 2.809675101e-03f, 2.803760525e-03f, 2.797841395e-03f, 2.791917722e-03f, 2.785989516e-03f, 2.780056788e-03f, 2.774119548e-03f, 2.768177806e-03f, 2.762231574e-03f,
+2.756280862e-03f, 2.750325679e-03f, 2.744366037e-03f, 2.738401947e-03f, 2.732433418e-03f, 2.726460461e-03f, 2.720483087e-03f, 2.714501306e-03f, 2.708515130e-03f, 2.702524567e-03f,
+2.696529630e-03f, 2.690530328e-03f, 2.684526672e-03f, 2.678518673e-03f, 2.672506342e-03f, 2.666489688e-03f, 2.660468723e-03f, 2.654443457e-03f, 2.648413901e-03f, 2.642380065e-03f,
+2.636341960e-03f, 2.630299598e-03f, 2.624252987e-03f, 2.618202139e-03f, 2.612147065e-03f, 2.606087776e-03f, 2.600024281e-03f, 2.593956592e-03f, 2.587884720e-03f, 2.581808674e-03f,
+2.575728467e-03f, 2.569644108e-03f, 2.563555608e-03f, 2.557462978e-03f, 2.551366229e-03f, 2.545265371e-03f, 2.539160416e-03f, 2.533051373e-03f, 2.526938254e-03f, 2.520821070e-03f,
+2.514699830e-03f, 2.508574547e-03f, 2.502445231e-03f, 2.496311892e-03f, 2.490174541e-03f, 2.484033190e-03f, 2.477887848e-03f, 2.471738528e-03f, 2.465585239e-03f, 2.459427992e-03f,
+2.453266799e-03f, 2.447101670e-03f, 2.440932616e-03f, 2.434759647e-03f, 2.428582776e-03f, 2.422402012e-03f, 2.416217366e-03f, 2.410028850e-03f, 2.403836474e-03f, 2.397640248e-03f,
+2.391440185e-03f, 2.385236295e-03f, 2.379028589e-03f, 2.372817077e-03f, 2.366601771e-03f, 2.360382681e-03f, 2.354159819e-03f, 2.347933195e-03f, 2.341702821e-03f, 2.335468707e-03f,
+2.329230864e-03f, 2.322989304e-03f, 2.316744037e-03f, 2.310495074e-03f, 2.304242426e-03f, 2.297986104e-03f, 2.291726119e-03f, 2.285462483e-03f, 2.279195206e-03f, 2.272924298e-03f,
+2.266649772e-03f, 2.260371639e-03f, 2.254089908e-03f, 2.247804592e-03f, 2.241515700e-03f, 2.235223246e-03f, 2.228927238e-03f, 2.222627689e-03f, 2.216324610e-03f, 2.210018011e-03f,
+2.203707904e-03f, 2.197394299e-03f, 2.191077209e-03f, 2.184756643e-03f, 2.178432613e-03f, 2.172105130e-03f, 2.165774205e-03f, 2.159439850e-03f, 2.153102075e-03f, 2.146760892e-03f,
+2.140416311e-03f, 2.134068344e-03f, 2.127717002e-03f, 2.121362296e-03f, 2.115004237e-03f, 2.108642836e-03f, 2.102278105e-03f, 2.095910055e-03f, 2.089538697e-03f, 2.083164041e-03f,
+2.076786100e-03f, 2.070404884e-03f, 2.064020405e-03f, 2.057632673e-03f, 2.051241701e-03f, 2.044847498e-03f, 2.038450077e-03f, 2.032049449e-03f, 2.025645624e-03f, 2.019238614e-03f,
+2.012828431e-03f, 2.006415085e-03f, 1.999998588e-03f, 1.993578951e-03f, 1.987156185e-03f, 1.980730301e-03f, 1.974301311e-03f, 1.967869226e-03f, 1.961434058e-03f, 1.954995817e-03f,
+1.948554515e-03f, 1.942110162e-03f, 1.935662772e-03f, 1.929212354e-03f, 1.922758919e-03f, 1.916302480e-03f, 1.909843048e-03f, 1.903380634e-03f, 1.896915248e-03f, 1.890446904e-03f,
+1.883975611e-03f, 1.877501381e-03f, 1.871024226e-03f, 1.864544156e-03f, 1.858061184e-03f, 1.851575320e-03f, 1.845086577e-03f, 1.838594964e-03f, 1.832100494e-03f, 1.825603178e-03f,
+1.819103027e-03f, 1.812600053e-03f, 1.806094267e-03f, 1.799585680e-03f, 1.793074304e-03f, 1.786560151e-03f, 1.780043231e-03f, 1.773523556e-03f, 1.767001137e-03f, 1.760475987e-03f,
+1.753948115e-03f, 1.747417534e-03f, 1.740884255e-03f, 1.734348290e-03f, 1.727809650e-03f, 1.721268346e-03f, 1.714724389e-03f, 1.708177792e-03f, 1.701628566e-03f, 1.695076721e-03f,
+1.688522271e-03f, 1.681965225e-03f, 1.675405596e-03f, 1.668843394e-03f, 1.662278632e-03f, 1.655711321e-03f, 1.649141473e-03f, 1.642569098e-03f, 1.635994208e-03f, 1.629416815e-03f,
+1.622836931e-03f, 1.616254566e-03f, 1.609669732e-03f, 1.603082441e-03f, 1.596492705e-03f, 1.589900534e-03f, 1.583305941e-03f, 1.576708936e-03f, 1.570109532e-03f, 1.563507739e-03f,
+1.556903570e-03f, 1.550297036e-03f, 1.543688149e-03f, 1.537076919e-03f, 1.530463359e-03f, 1.523847479e-03f, 1.517229293e-03f, 1.510608810e-03f, 1.503986044e-03f, 1.497361004e-03f,
+1.490733703e-03f, 1.484104153e-03f, 1.477472365e-03f, 1.470838350e-03f, 1.464202120e-03f, 1.457563687e-03f, 1.450923063e-03f, 1.444280258e-03f, 1.437635284e-03f, 1.430988154e-03f,
+1.424338878e-03f, 1.417687468e-03f, 1.411033936e-03f, 1.404378294e-03f, 1.397720552e-03f, 1.391060723e-03f, 1.384398819e-03f, 1.377734850e-03f, 1.371068829e-03f, 1.364400767e-03f,
+1.357730675e-03f, 1.351058566e-03f, 1.344384451e-03f, 1.337708341e-03f, 1.331030249e-03f, 1.324350185e-03f, 1.317668162e-03f, 1.310984191e-03f, 1.304298284e-03f, 1.297610452e-03f,
+1.290920708e-03f, 1.284229062e-03f, 1.277535526e-03f, 1.270840113e-03f, 1.264142833e-03f, 1.257443699e-03f, 1.250742722e-03f, 1.244039914e-03f, 1.237335286e-03f, 1.230628850e-03f,
+1.223920617e-03f, 1.217210601e-03f, 1.210498811e-03f, 1.203785260e-03f, 1.197069960e-03f, 1.190352922e-03f, 1.183634158e-03f, 1.176913679e-03f, 1.170191498e-03f, 1.163467625e-03f,
+1.156742073e-03f, 1.150014854e-03f, 1.143285979e-03f, 1.136555459e-03f, 1.129823307e-03f, 1.123089534e-03f, 1.116354153e-03f, 1.109617173e-03f, 1.102878609e-03f, 1.096138470e-03f,
+1.089396769e-03f, 1.082653518e-03f, 1.075908728e-03f, 1.069162411e-03f, 1.062414579e-03f, 1.055665243e-03f, 1.048914415e-03f, 1.042162108e-03f, 1.035408332e-03f, 1.028653099e-03f,
+1.021896422e-03f, 1.015138312e-03f, 1.008378780e-03f, 1.001617839e-03f, 9.948554997e-04f, 9.880917747e-04f, 9.813266753e-04f, 9.745602133e-04f, 9.677924006e-04f, 9.610232489e-04f,
+9.542527698e-04f, 9.474809753e-04f, 9.407078771e-04f, 9.339334869e-04f, 9.271578166e-04f, 9.203808778e-04f, 9.136026823e-04f, 9.068232420e-04f, 9.000425687e-04f, 8.932606739e-04f,
+8.864775697e-04f, 8.796932677e-04f, 8.729077798e-04f, 8.661211176e-04f, 8.593332931e-04f, 8.525443179e-04f, 8.457542039e-04f, 8.389629629e-04f, 8.321706066e-04f, 8.253771469e-04f,
+8.185825955e-04f, 8.117869643e-04f, 8.049902650e-04f, 7.981925094e-04f, 7.913937094e-04f, 7.845938766e-04f, 7.777930231e-04f, 7.709911604e-04f, 7.641883005e-04f, 7.573844551e-04f,
+7.505796361e-04f, 7.437738553e-04f, 7.369671244e-04f, 7.301594552e-04f, 7.233508597e-04f, 7.165413496e-04f, 7.097309366e-04f, 7.029196327e-04f, 6.961074496e-04f, 6.892943992e-04f,
+6.824804932e-04f, 6.756657435e-04f, 6.688501619e-04f, 6.620337603e-04f, 6.552165503e-04f, 6.483985440e-04f, 6.415797530e-04f, 6.347601892e-04f, 6.279398644e-04f, 6.211187905e-04f,
+6.142969793e-04f, 6.074744425e-04f, 6.006511921e-04f, 5.938272398e-04f, 5.870025975e-04f, 5.801772770e-04f, 5.733512901e-04f, 5.665246487e-04f, 5.596973646e-04f, 5.528694496e-04f,
+5.460409156e-04f, 5.392117743e-04f, 5.323820376e-04f, 5.255517174e-04f, 5.187208254e-04f, 5.118893736e-04f, 5.050573737e-04f, 4.982248375e-04f, 4.913917770e-04f, 4.845582039e-04f,
+4.777241300e-04f, 4.708895673e-04f, 4.640545275e-04f, 4.572190225e-04f, 4.503830641e-04f, 4.435466642e-04f, 4.367098345e-04f, 4.298725870e-04f, 4.230349334e-04f, 4.161968855e-04f,
+4.093584554e-04f, 4.025196546e-04f, 3.956804952e-04f, 3.888409889e-04f, 3.820011476e-04f, 3.751609831e-04f, 3.683205072e-04f, 3.614797318e-04f, 3.546386687e-04f, 3.477973297e-04f,
+3.409557268e-04f, 3.341138716e-04f, 3.272717762e-04f, 3.204294522e-04f, 3.135869115e-04f, 3.067441660e-04f, 2.999012275e-04f, 2.930581078e-04f, 2.862148188e-04f, 2.793713723e-04f,
+2.725277801e-04f, 2.656840541e-04f, 2.588402061e-04f, 2.519962479e-04f, 2.451521914e-04f, 2.383080484e-04f, 2.314638307e-04f, 2.246195501e-04f, 2.177752186e-04f, 2.109308479e-04f,
+2.040864498e-04f, 1.972420362e-04f, 1.903976189e-04f, 1.835532097e-04f, 1.767088205e-04f, 1.698644630e-04f, 1.630201492e-04f, 1.561758908e-04f, 1.493316997e-04f, 1.424875877e-04f,
+1.356435666e-04f, 1.287996482e-04f, 1.219558443e-04f, 1.151121668e-04f, 1.082686276e-04f, 1.014252383e-04f, 9.458201087e-05f, 8.773895708e-05f, 8.089608876e-05f, 7.405341771e-05f,
+6.721095577e-05f, 6.036871473e-05f, 5.352670642e-05f, 4.668494263e-05f, 3.984343520e-05f, 3.300219592e-05f, 2.616123660e-05f, 1.932056905e-05f, 1.248020509e-05f, 5.640156501e-06f,
+-1.199564896e-06f, -8.038947301e-06f, -1.487797891e-05f, -2.171664793e-05f, -2.855494255e-05f, -3.539285098e-05f, -4.223036142e-05f, -4.906746207e-05f, -5.590414115e-05f, -6.274038685e-05f,
+-6.957618738e-05f, -7.641153095e-05f, -8.324640578e-05f, -9.008080008e-05f, -9.691470205e-05f, -1.037480999e-04f, -1.105809819e-04f, -1.174133362e-04f, -1.242451511e-04f, -1.310764147e-04f,
+-1.379071153e-04f, -1.447372411e-04f, -1.515667804e-04f, -1.583957213e-04f, -1.652240521e-04f, -1.720517611e-04f, -1.788788364e-04f, -1.857052663e-04f, -1.925310391e-04f, -1.993561428e-04f,
+-2.061805659e-04f, -2.130042966e-04f, -2.198273230e-04f, -2.266496335e-04f, -2.334712162e-04f, -2.402920595e-04f, -2.471121515e-04f, -2.539314805e-04f, -2.607500349e-04f, -2.675678027e-04f,
+-2.743847724e-04f, -2.812009321e-04f, -2.880162701e-04f, -2.948307747e-04f, -3.016444341e-04f, -3.084572367e-04f, -3.152691706e-04f, -3.220802241e-04f, -3.288903856e-04f, -3.356996433e-04f,
+-3.425079854e-04f, -3.493154003e-04f, -3.561218763e-04f, -3.629274015e-04f, -3.697319644e-04f, -3.765355532e-04f, -3.833381561e-04f, -3.901397615e-04f, -3.969403577e-04f, -4.037399330e-04f,
+-4.105384757e-04f, -4.173359740e-04f, -4.241324163e-04f, -4.309277909e-04f, -4.377220861e-04f, -4.445152902e-04f, -4.513073915e-04f, -4.580983784e-04f, -4.648882391e-04f, -4.716769620e-04f,
+-4.784645355e-04f, -4.852509477e-04f, -4.920361871e-04f, -4.988202421e-04f, -5.056031008e-04f, -5.123847518e-04f, -5.191651832e-04f, -5.259443835e-04f, -5.327223410e-04f, -5.394990440e-04f,
+-5.462744810e-04f, -5.530486402e-04f, -5.598215100e-04f, -5.665930788e-04f, -5.733633349e-04f, -5.801322667e-04f, -5.868998626e-04f, -5.936661109e-04f, -6.004310000e-04f, -6.071945184e-04f,
+-6.139566543e-04f, -6.207173961e-04f, -6.274767323e-04f, -6.342346512e-04f, -6.409911412e-04f, -6.477461907e-04f, -6.544997882e-04f, -6.612519219e-04f, -6.680025804e-04f, -6.747517520e-04f,
+-6.814994251e-04f, -6.882455881e-04f, -6.949902296e-04f, -7.017333378e-04f, -7.084749012e-04f, -7.152149082e-04f, -7.219533473e-04f, -7.286902069e-04f, -7.354254755e-04f, -7.421591414e-04f,
+-7.488911931e-04f, -7.556216191e-04f, -7.623504077e-04f, -7.690775476e-04f, -7.758030270e-04f, -7.825268346e-04f, -7.892489586e-04f, -7.959693877e-04f, -8.026881103e-04f, -8.094051148e-04f,
+-8.161203897e-04f, -8.228339236e-04f, -8.295457048e-04f, -8.362557219e-04f, -8.429639634e-04f, -8.496704178e-04f, -8.563750735e-04f, -8.630779191e-04f, -8.697789430e-04f, -8.764781339e-04f,
+-8.831754802e-04f, -8.898709703e-04f, -8.965645929e-04f, -9.032563365e-04f, -9.099461896e-04f, -9.166341407e-04f, -9.233201783e-04f, -9.300042911e-04f, -9.366864675e-04f, -9.433666961e-04f,
+-9.500449654e-04f, -9.567212640e-04f, -9.633955805e-04f, -9.700679035e-04f, -9.767382214e-04f, -9.834065229e-04f, -9.900727965e-04f, -9.967370309e-04f, -1.003399215e-03f, -1.010059336e-03f,
+-1.016717384e-03f, -1.023373347e-03f, -1.030027214e-03f, -1.036678973e-03f, -1.043328613e-03f, -1.049976123e-03f, -1.056621490e-03f, -1.063264705e-03f, -1.069905755e-03f, -1.076544628e-03f,
+-1.083181315e-03f, -1.089815802e-03f, -1.096448080e-03f, -1.103078136e-03f, -1.109705960e-03f, -1.116331539e-03f, -1.122954863e-03f, -1.129575920e-03f, -1.136194699e-03f, -1.142811189e-03f,
+-1.149425377e-03f, -1.156037254e-03f, -1.162646807e-03f, -1.169254026e-03f, -1.175858898e-03f, -1.182461414e-03f, -1.189061560e-03f, -1.195659327e-03f, -1.202254703e-03f, -1.208847676e-03f,
+-1.215438235e-03f, -1.222026370e-03f, -1.228612068e-03f, -1.235195319e-03f, -1.241776111e-03f, -1.248354433e-03f, -1.254930273e-03f, -1.261503621e-03f, -1.268074466e-03f, -1.274642795e-03f,
+-1.281208598e-03f, -1.287771864e-03f, -1.294332581e-03f, -1.300890738e-03f, -1.307446324e-03f, -1.313999328e-03f, -1.320549739e-03f, -1.327097545e-03f, -1.333642735e-03f, -1.340185298e-03f,
+-1.346725222e-03f, -1.353262498e-03f, -1.359797112e-03f, -1.366329056e-03f, -1.372858316e-03f, -1.379384882e-03f, -1.385908743e-03f, -1.392429888e-03f, -1.398948306e-03f, -1.405463984e-03f,
+-1.411976914e-03f, -1.418487082e-03f, -1.424994479e-03f, -1.431499092e-03f, -1.438000911e-03f, -1.444499925e-03f, -1.450996123e-03f, -1.457489494e-03f, -1.463980026e-03f, -1.470467708e-03f,
+-1.476952530e-03f, -1.483434480e-03f, -1.489913547e-03f, -1.496389720e-03f, -1.502862989e-03f, -1.509333342e-03f, -1.515800768e-03f, -1.522265255e-03f, -1.528726794e-03f, -1.535185373e-03f,
+-1.541640981e-03f, -1.548093606e-03f, -1.554543239e-03f, -1.560989868e-03f, -1.567433481e-03f, -1.573874069e-03f, -1.580311619e-03f, -1.586746122e-03f, -1.593177566e-03f, -1.599605939e-03f,
+-1.606031232e-03f, -1.612453433e-03f, -1.618872532e-03f, -1.625288516e-03f, -1.631701376e-03f, -1.638111100e-03f, -1.644517678e-03f, -1.650921099e-03f, -1.657321351e-03f, -1.663718424e-03f,
+-1.670112307e-03f, -1.676502989e-03f, -1.682890459e-03f, -1.689274706e-03f, -1.695655719e-03f, -1.702033488e-03f, -1.708408002e-03f, -1.714779249e-03f, -1.721147220e-03f, -1.727511902e-03f,
+-1.733873286e-03f, -1.740231360e-03f, -1.746586113e-03f, -1.752937536e-03f, -1.759285616e-03f, -1.765630344e-03f, -1.771971708e-03f, -1.778309697e-03f, -1.784644301e-03f, -1.790975510e-03f,
+-1.797303311e-03f, -1.803627695e-03f, -1.809948650e-03f, -1.816266167e-03f, -1.822580234e-03f, -1.828890840e-03f, -1.835197975e-03f, -1.841501628e-03f, -1.847801788e-03f, -1.854098445e-03f,
+-1.860391587e-03f, -1.866681205e-03f, -1.872967287e-03f, -1.879249823e-03f, -1.885528802e-03f, -1.891804213e-03f, -1.898076046e-03f, -1.904344290e-03f, -1.910608935e-03f, -1.916869969e-03f,
+-1.923127383e-03f, -1.929381165e-03f, -1.935631305e-03f, -1.941877792e-03f, -1.948120615e-03f, -1.954359765e-03f, -1.960595230e-03f, -1.966827000e-03f, -1.973055065e-03f, -1.979279412e-03f,
+-1.985500033e-03f, -1.991716917e-03f, -1.997930052e-03f, -2.004139429e-03f, -2.010345037e-03f, -2.016546865e-03f, -2.022744903e-03f, -2.028939140e-03f, -2.035129566e-03f, -2.041316170e-03f,
+-2.047498942e-03f, -2.053677871e-03f, -2.059852947e-03f, -2.066024159e-03f, -2.072191497e-03f, -2.078354950e-03f, -2.084514508e-03f, -2.090670161e-03f, -2.096821897e-03f, -2.102969708e-03f,
+-2.109113581e-03f, -2.115253507e-03f, -2.121389475e-03f, -2.127521475e-03f, -2.133649497e-03f, -2.139773529e-03f, -2.145893562e-03f, -2.152009586e-03f, -2.158121590e-03f, -2.164229563e-03f,
+-2.170333495e-03f, -2.176433376e-03f, -2.182529196e-03f, -2.188620944e-03f, -2.194708609e-03f, -2.200792183e-03f, -2.206871653e-03f, -2.212947011e-03f, -2.219018245e-03f, -2.225085345e-03f,
+-2.231148302e-03f, -2.237207104e-03f, -2.243261742e-03f, -2.249312205e-03f, -2.255358483e-03f, -2.261400566e-03f, -2.267438444e-03f, -2.273472105e-03f, -2.279501541e-03f, -2.285526741e-03f,
+-2.291547694e-03f, -2.297564391e-03f, -2.303576822e-03f, -2.309584975e-03f, -2.315588841e-03f, -2.321588410e-03f, -2.327583672e-03f, -2.333574616e-03f, -2.339561233e-03f, -2.345543512e-03f,
+-2.351521442e-03f, -2.357495015e-03f, -2.363464220e-03f, -2.369429046e-03f, -2.375389484e-03f, -2.381345524e-03f, -2.387297155e-03f, -2.393244368e-03f, -2.399187152e-03f, -2.405125497e-03f,
+-2.411059394e-03f, -2.416988832e-03f, -2.422913801e-03f, -2.428834291e-03f, -2.434750293e-03f, -2.440661796e-03f, -2.446568790e-03f, -2.452471265e-03f, -2.458369211e-03f, -2.464262619e-03f,
+-2.470151478e-03f, -2.476035778e-03f, -2.481915510e-03f, -2.487790663e-03f, -2.493661228e-03f, -2.499527195e-03f, -2.505388553e-03f, -2.511245293e-03f, -2.517097405e-03f, -2.522944879e-03f,
+-2.528787705e-03f, -2.534625873e-03f, -2.540459374e-03f, -2.546288197e-03f, -2.552112334e-03f, -2.557931773e-03f, -2.563746505e-03f, -2.569556520e-03f, -2.575361809e-03f, -2.581162362e-03f,
+-2.586958168e-03f, -2.592749219e-03f, -2.598535504e-03f, -2.604317013e-03f, -2.610093738e-03f, -2.615865667e-03f, -2.621632792e-03f, -2.627395102e-03f, -2.633152588e-03f, -2.638905240e-03f,
+-2.644653049e-03f, -2.650396004e-03f, -2.656134097e-03f, -2.661867317e-03f, -2.667595654e-03f, -2.673319100e-03f, -2.679037644e-03f, -2.684751277e-03f, -2.690459989e-03f, -2.696163771e-03f,
+-2.701862613e-03f, -2.707556504e-03f, -2.713245437e-03f, -2.718929401e-03f, -2.724608386e-03f, -2.730282383e-03f, -2.735951383e-03f, -2.741615375e-03f, -2.747274351e-03f, -2.752928301e-03f,
+-2.758577215e-03f, -2.764221084e-03f, -2.769859898e-03f, -2.775493647e-03f, -2.781122323e-03f, -2.786745916e-03f, -2.792364416e-03f, -2.797977814e-03f, -2.803586101e-03f, -2.809189266e-03f,
+-2.814787301e-03f, -2.820380196e-03f, -2.825967942e-03f, -2.831550529e-03f, -2.837127948e-03f, -2.842700190e-03f, -2.848267245e-03f, -2.853829104e-03f, -2.859385757e-03f, -2.864937195e-03f,
+-2.870483409e-03f, -2.876024389e-03f, -2.881560127e-03f, -2.887090612e-03f, -2.892615836e-03f, -2.898135789e-03f, -2.903650462e-03f, -2.909159846e-03f, -2.914663931e-03f, -2.920162708e-03f,
+-2.925656169e-03f, -2.931144303e-03f, -2.936627101e-03f, -2.942104555e-03f, -2.947576655e-03f, -2.953043391e-03f, -2.958504756e-03f, -2.963960739e-03f, -2.969411331e-03f, -2.974856523e-03f,
+-2.980296307e-03f, -2.985730672e-03f, -2.991159610e-03f, -2.996583112e-03f, -3.002001169e-03f, -3.007413771e-03f, -3.012820909e-03f, -3.018222575e-03f, -3.023618759e-03f, -3.029009452e-03f,
+-3.034394645e-03f, -3.039774330e-03f, -3.045148496e-03f, -3.050517136e-03f, -3.055880240e-03f, -3.061237799e-03f, -3.066589804e-03f, -3.071936246e-03f, -3.077277116e-03f, -3.082612405e-03f,
+-3.087942105e-03f, -3.093266206e-03f, -3.098584700e-03f, -3.103897576e-03f, -3.109204828e-03f, -3.114506445e-03f, -3.119802419e-03f, -3.125092741e-03f, -3.130377402e-03f, -3.135656394e-03f,
+-3.140929706e-03f, -3.146197331e-03f, -3.151459260e-03f, -3.156715484e-03f, -3.161965994e-03f, -3.167210781e-03f, -3.172449837e-03f, -3.177683153e-03f, -3.182910719e-03f, -3.188132528e-03f,
+-3.193348570e-03f, -3.198558837e-03f, -3.203763320e-03f, -3.208962011e-03f, -3.214154900e-03f, -3.219341979e-03f, -3.224523239e-03f, -3.229698673e-03f, -3.234868270e-03f, -3.240032022e-03f,
+-3.245189921e-03f, -3.250341958e-03f, -3.255488124e-03f, -3.260628412e-03f, -3.265762811e-03f, -3.270891315e-03f, -3.276013913e-03f, -3.281130598e-03f, -3.286241361e-03f, -3.291346193e-03f,
+-3.296445086e-03f, -3.301538032e-03f, -3.306625022e-03f, -3.311706047e-03f, -3.316781098e-03f, -3.321850169e-03f, -3.326913249e-03f, -3.331970331e-03f, -3.337021406e-03f, -3.342066465e-03f,
+-3.347105501e-03f, -3.352138504e-03f, -3.357165467e-03f, -3.362186381e-03f, -3.367201238e-03f, -3.372210028e-03f, -3.377212745e-03f, -3.382209379e-03f, -3.387199923e-03f, -3.392184367e-03f,
+-3.397162704e-03f, -3.402134926e-03f, -3.407101023e-03f, -3.412060988e-03f, -3.417014812e-03f, -3.421962488e-03f, -3.426904007e-03f, -3.431839360e-03f, -3.436768540e-03f, -3.441691538e-03f,
+-3.446608346e-03f, -3.451518956e-03f, -3.456423360e-03f, -3.461321549e-03f, -3.466213516e-03f, -3.471099251e-03f, -3.475978748e-03f, -3.480851998e-03f, -3.485718993e-03f, -3.490579725e-03f,
+-3.495434185e-03f, -3.500282365e-03f, -3.505124259e-03f, -3.509959856e-03f, -3.514789151e-03f, -3.519612133e-03f, -3.524428796e-03f, -3.529239131e-03f, -3.534043130e-03f, -3.538840786e-03f,
+-3.543632091e-03f, -3.548417035e-03f, -3.553195612e-03f, -3.557967814e-03f, -3.562733632e-03f, -3.567493059e-03f, -3.572246086e-03f, -3.576992706e-03f, -3.581732912e-03f, -3.586466694e-03f,
+-3.591194046e-03f, -3.595914959e-03f, -3.600629425e-03f, -3.605337437e-03f, -3.610038987e-03f, -3.614734067e-03f, -3.619422670e-03f, -3.624104787e-03f, -3.628780410e-03f, -3.633449533e-03f,
+-3.638112147e-03f, -3.642768244e-03f, -3.647417817e-03f, -3.652060858e-03f, -3.656697359e-03f, -3.661327313e-03f, -3.665950712e-03f, -3.670567548e-03f, -3.675177814e-03f, -3.679781502e-03f,
+-3.684378605e-03f, -3.688969114e-03f, -3.693553022e-03f, -3.698130322e-03f, -3.702701005e-03f, -3.707265065e-03f, -3.711822494e-03f, -3.716373284e-03f, -3.720917428e-03f, -3.725454919e-03f,
+-3.729985747e-03f, -3.734509908e-03f, -3.739027391e-03f, -3.743538191e-03f, -3.748042300e-03f, -3.752539710e-03f, -3.757030414e-03f, -3.761514405e-03f, -3.765991674e-03f, -3.770462215e-03f,
+-3.774926021e-03f, -3.779383083e-03f, -3.783833395e-03f, -3.788276948e-03f, -3.792713737e-03f, -3.797143753e-03f, -3.801566989e-03f, -3.805983438e-03f, -3.810393092e-03f, -3.814795945e-03f,
+-3.819191989e-03f, -3.823581216e-03f, -3.827963620e-03f, -3.832339193e-03f, -3.836707928e-03f, -3.841069817e-03f, -3.845424855e-03f, -3.849773032e-03f, -3.854114343e-03f, -3.858448780e-03f,
+-3.862776336e-03f, -3.867097004e-03f, -3.871410776e-03f, -3.875717646e-03f, -3.880017606e-03f, -3.884310649e-03f, -3.888596769e-03f, -3.892875958e-03f, -3.897148209e-03f, -3.901413515e-03f,
+-3.905671869e-03f, -3.909923264e-03f, -3.914167693e-03f, -3.918405150e-03f, -3.922635626e-03f, -3.926859115e-03f, -3.931075611e-03f, -3.935285106e-03f, -3.939487593e-03f, -3.943683065e-03f,
+-3.947871516e-03f, -3.952052938e-03f, -3.956227325e-03f, -3.960394670e-03f, -3.964554966e-03f, -3.968708206e-03f, -3.972854383e-03f, -3.976993491e-03f, -3.981125522e-03f, -3.985250470e-03f,
+-3.989368329e-03f, -3.993479090e-03f, -3.997582749e-03f, -4.001679297e-03f, -4.005768728e-03f, -4.009851035e-03f, -4.013926213e-03f, -4.017994253e-03f, -4.022055149e-03f, -4.026108896e-03f,
+-4.030155485e-03f, -4.034194910e-03f, -4.038227166e-03f, -4.042252244e-03f, -4.046270139e-03f, -4.050280844e-03f, -4.054284352e-03f, -4.058280657e-03f, -4.062269752e-03f, -4.066251631e-03f,
+-4.070226287e-03f, -4.074193714e-03f, -4.078153905e-03f, -4.082106853e-03f, -4.086052553e-03f, -4.089990997e-03f, -4.093922180e-03f, -4.097846095e-03f, -4.101762735e-03f, -4.105672094e-03f,
+-4.109574166e-03f, -4.113468944e-03f, -4.117356421e-03f, -4.121236593e-03f, -4.125109451e-03f, -4.128974991e-03f, -4.132833204e-03f, -4.136684086e-03f, -4.140527630e-03f, -4.144363830e-03f,
+-4.148192679e-03f, -4.152014171e-03f, -4.155828300e-03f, -4.159635060e-03f, -4.163434444e-03f, -4.167226446e-03f, -4.171011060e-03f, -4.174788280e-03f, -4.178558100e-03f, -4.182320514e-03f,
+-4.186075514e-03f, -4.189823096e-03f, -4.193563254e-03f, -4.197295980e-03f, -4.201021269e-03f, -4.204739116e-03f, -4.208449513e-03f, -4.212152455e-03f, -4.215847936e-03f, -4.219535949e-03f,
+-4.223216489e-03f, -4.226889550e-03f, -4.230555126e-03f, -4.234213211e-03f, -4.237863799e-03f, -4.241506883e-03f, -4.245142459e-03f, -4.248770519e-03f, -4.252391059e-03f, -4.256004072e-03f,
+-4.259609553e-03f, -4.263207495e-03f, -4.266797893e-03f, -4.270380741e-03f, -4.273956033e-03f, -4.277523763e-03f, -4.281083926e-03f, -4.284636515e-03f, -4.288181526e-03f, -4.291718951e-03f,
+-4.295248786e-03f, -4.298771025e-03f, -4.302285662e-03f, -4.305792691e-03f, -4.309292107e-03f, -4.312783903e-03f, -4.316268075e-03f, -4.319744617e-03f, -4.323213522e-03f, -4.326674786e-03f,
+-4.330128403e-03f, -4.333574367e-03f, -4.337012673e-03f, -4.340443315e-03f, -4.343866287e-03f, -4.347281584e-03f, -4.350689201e-03f, -4.354089132e-03f, -4.357481371e-03f, -4.360865913e-03f,
+-4.364242753e-03f, -4.367611884e-03f, -4.370973302e-03f, -4.374327002e-03f, -4.377672977e-03f, -4.381011222e-03f, -4.384341733e-03f, -4.387664503e-03f, -4.390979527e-03f, -4.394286801e-03f,
+-4.397586317e-03f, -4.400878072e-03f, -4.404162060e-03f, -4.407438276e-03f, -4.410706714e-03f, -4.413967369e-03f, -4.417220235e-03f, -4.420465309e-03f, -4.423702584e-03f, -4.426932055e-03f,
+-4.430153717e-03f, -4.433367564e-03f, -4.436573593e-03f, -4.439771797e-03f, -4.442962171e-03f, -4.446144710e-03f, -4.449319410e-03f, -4.452486264e-03f, -4.455645268e-03f, -4.458796418e-03f,
+-4.461939707e-03f, -4.465075130e-03f, -4.468202684e-03f, -4.471322362e-03f, -4.474434159e-03f, -4.477538072e-03f, -4.480634094e-03f, -4.483722221e-03f, -4.486802448e-03f, -4.489874769e-03f,
+-4.492939181e-03f, -4.495995677e-03f, -4.499044254e-03f, -4.502084906e-03f, -4.505117628e-03f, -4.508142416e-03f, -4.511159265e-03f, -4.514168170e-03f, -4.517169125e-03f, -4.520162127e-03f,
+-4.523147171e-03f, -4.526124251e-03f, -4.529093363e-03f, -4.532054503e-03f, -4.535007665e-03f, -4.537952845e-03f, -4.540890038e-03f, -4.543819239e-03f, -4.546740445e-03f, -4.549653649e-03f,
+-4.552558848e-03f, -4.555456037e-03f, -4.558345211e-03f, -4.561226366e-03f, -4.564099496e-03f, -4.566964599e-03f, -4.569821668e-03f, -4.572670700e-03f, -4.575511689e-03f, -4.578344632e-03f,
+-4.581169524e-03f, -4.583986360e-03f, -4.586795136e-03f, -4.589595847e-03f, -4.592388490e-03f, -4.595173059e-03f, -4.597949550e-03f, -4.600717959e-03f, -4.603478282e-03f, -4.606230513e-03f,
+-4.608974649e-03f, -4.611710686e-03f, -4.614438618e-03f, -4.617158442e-03f, -4.619870154e-03f, -4.622573748e-03f, -4.625269222e-03f, -4.627956570e-03f, -4.630635788e-03f, -4.633306872e-03f,
+-4.635969818e-03f, -4.638624622e-03f, -4.641271280e-03f, -4.643909786e-03f, -4.646540138e-03f, -4.649162331e-03f, -4.651776360e-03f, -4.654382223e-03f, -4.656979914e-03f, -4.659569430e-03f,
+-4.662150766e-03f, -4.664723919e-03f, -4.667288884e-03f, -4.669845657e-03f, -4.672394235e-03f, -4.674934613e-03f, -4.677466787e-03f, -4.679990754e-03f, -4.682506510e-03f, -4.685014050e-03f,
+-4.687513370e-03f, -4.690004467e-03f, -4.692487337e-03f, -4.694961976e-03f, -4.697428380e-03f, -4.699886545e-03f, -4.702336467e-03f, -4.704778143e-03f, -4.707211568e-03f, -4.709636739e-03f,
+-4.712053652e-03f, -4.714462304e-03f, -4.716862690e-03f, -4.719254807e-03f, -4.721638652e-03f, -4.724014219e-03f, -4.726381506e-03f, -4.728740509e-03f, -4.731091225e-03f, -4.733433649e-03f,
+-4.735767779e-03f, -4.738093609e-03f, -4.740411138e-03f, -4.742720360e-03f, -4.745021274e-03f, -4.747313874e-03f, -4.749598158e-03f, -4.751874122e-03f, -4.754141762e-03f, -4.756401076e-03f,
+-4.758652058e-03f, -4.760894707e-03f, -4.763129018e-03f, -4.765354989e-03f, -4.767572615e-03f, -4.769781893e-03f, -4.771982820e-03f, -4.774175392e-03f, -4.776359606e-03f, -4.778535459e-03f,
+-4.780702948e-03f, -4.782862068e-03f, -4.785012817e-03f, -4.787155191e-03f, -4.789289188e-03f, -4.791414803e-03f, -4.793532034e-03f, -4.795640877e-03f, -4.797741329e-03f, -4.799833387e-03f,
+-4.801917047e-03f, -4.803992307e-03f, -4.806059163e-03f, -4.808117613e-03f, -4.810167652e-03f, -4.812209278e-03f, -4.814242488e-03f, -4.816267279e-03f, -4.818283647e-03f, -4.820291590e-03f,
+-4.822291104e-03f, -4.824282187e-03f, -4.826264835e-03f, -4.828239045e-03f, -4.830204814e-03f, -4.832162140e-03f, -4.834111020e-03f, -4.836051450e-03f, -4.837983427e-03f, -4.839906949e-03f,
+-4.841822013e-03f, -4.843728615e-03f, -4.845626754e-03f, -4.847516425e-03f, -4.849397627e-03f, -4.851270356e-03f, -4.853134610e-03f, -4.854990385e-03f, -4.856837680e-03f, -4.858676491e-03f,
+-4.860506815e-03f, -4.862328649e-03f, -4.864141992e-03f, -4.865946840e-03f, -4.867743191e-03f, -4.869531041e-03f, -4.871310389e-03f, -4.873081231e-03f, -4.874843565e-03f, -4.876597388e-03f,
+-4.878342698e-03f, -4.880079492e-03f, -4.881807768e-03f, -4.883527522e-03f, -4.885238753e-03f, -4.886941458e-03f, -4.888635634e-03f, -4.890321278e-03f, -4.891998389e-03f, -4.893666964e-03f,
+-4.895327001e-03f, -4.896978496e-03f, -4.898621447e-03f, -4.900255853e-03f, -4.901881711e-03f, -4.903499017e-03f, -4.905107771e-03f, -4.906707969e-03f, -4.908299609e-03f, -4.909882689e-03f,
+-4.911457207e-03f, -4.913023160e-03f, -4.914580546e-03f, -4.916129363e-03f, -4.917669608e-03f, -4.919201280e-03f, -4.920724375e-03f, -4.922238892e-03f, -4.923744829e-03f, -4.925242183e-03f,
+-4.926730952e-03f, -4.928211135e-03f, -4.929682728e-03f, -4.931145731e-03f, -4.932600140e-03f, -4.934045953e-03f, -4.935483170e-03f, -4.936911786e-03f, -4.938331801e-03f, -4.939743213e-03f,
+-4.941146019e-03f, -4.942540218e-03f, -4.943925807e-03f, -4.945302784e-03f, -4.946671148e-03f, -4.948030896e-03f, -4.949382028e-03f, -4.950724540e-03f, -4.952058430e-03f, -4.953383698e-03f,
+-4.954700341e-03f, -4.956008357e-03f, -4.957307744e-03f, -4.958598501e-03f, -4.959880626e-03f, -4.961154117e-03f, -4.962418972e-03f, -4.963675189e-03f, -4.964922768e-03f, -4.966161705e-03f,
+-4.967391999e-03f, -4.968613649e-03f, -4.969826653e-03f, -4.971031009e-03f, -4.972226716e-03f, -4.973413772e-03f, -4.974592175e-03f, -4.975761923e-03f, -4.976923016e-03f, -4.978075451e-03f,
+-4.979219227e-03f, -4.980354343e-03f, -4.981480796e-03f, -4.982598586e-03f, -4.983707711e-03f, -4.984808169e-03f, -4.985899959e-03f, -4.986983079e-03f, -4.988057528e-03f, -4.989123305e-03f,
+-4.990180408e-03f, -4.991228836e-03f, -4.992268587e-03f, -4.993299659e-03f, -4.994322053e-03f, -4.995335766e-03f, -4.996340797e-03f, -4.997337144e-03f, -4.998324807e-03f, -4.999303784e-03f,
+-5.000274074e-03f, -5.001235675e-03f, -5.002188587e-03f, -5.003132808e-03f, -5.004068336e-03f, -5.004995172e-03f, -5.005913313e-03f, -5.006822758e-03f, -5.007723507e-03f, -5.008615557e-03f,
+-5.009498909e-03f, -5.010373561e-03f, -5.011239511e-03f, -5.012096759e-03f, -5.012945304e-03f, -5.013785145e-03f, -5.014616280e-03f, -5.015438709e-03f, -5.016252431e-03f, -5.017057444e-03f,
+-5.017853748e-03f, -5.018641342e-03f, -5.019420224e-03f, -5.020190395e-03f, -5.020951852e-03f, -5.021704596e-03f, -5.022448625e-03f, -5.023183938e-03f, -5.023910535e-03f, -5.024628415e-03f,
+-5.025337576e-03f, -5.026038019e-03f, -5.026729742e-03f, -5.027412744e-03f, -5.028087026e-03f, -5.028752585e-03f, -5.029409422e-03f, -5.030057536e-03f, -5.030696925e-03f, -5.031327590e-03f,
+-5.031949530e-03f, -5.032562743e-03f, -5.033167230e-03f, -5.033762990e-03f, -5.034350022e-03f, -5.034928325e-03f, -5.035497899e-03f, -5.036058744e-03f, -5.036610859e-03f, -5.037154243e-03f,
+-5.037688896e-03f, -5.038214818e-03f, -5.038732007e-03f, -5.039240464e-03f, -5.039740188e-03f, -5.040231178e-03f, -5.040713435e-03f, -5.041186957e-03f, -5.041651745e-03f, -5.042107797e-03f,
+-5.042555114e-03f, -5.042993696e-03f, -5.043423541e-03f, -5.043844651e-03f, -5.044257023e-03f, -5.044660659e-03f, -5.045055557e-03f, -5.045441718e-03f, -5.045819141e-03f, -5.046187826e-03f,
+-5.046547774e-03f, -5.046898983e-03f, -5.047241453e-03f, -5.047575185e-03f, -5.047900178e-03f, -5.048216432e-03f, -5.048523947e-03f, -5.048822723e-03f, -5.049112760e-03f, -5.049394057e-03f,
+-5.049666615e-03f, -5.049930434e-03f, -5.050185513e-03f, -5.050431853e-03f, -5.050669453e-03f, -5.050898314e-03f, -5.051118436e-03f, -5.051329818e-03f, -5.051532461e-03f, -5.051726365e-03f,
+-5.051911530e-03f, -5.052087956e-03f, -5.052255643e-03f, -5.052414592e-03f, -5.052564802e-03f, -5.052706273e-03f, -5.052839006e-03f, -5.052963002e-03f, -5.053078259e-03f, -5.053184780e-03f,
+-5.053282562e-03f, -5.053371608e-03f, -5.053451917e-03f, -5.053523490e-03f, -5.053586326e-03f, -5.053640427e-03f, -5.053685792e-03f, -5.053722422e-03f, -5.053750317e-03f, -5.053769478e-03f,
+-5.053779905e-03f, -5.053781599e-03f, -5.053774559e-03f, -5.053758786e-03f, -5.053734282e-03f, -5.053701045e-03f, -5.053659077e-03f, -5.053608379e-03f, -5.053548950e-03f, -5.053480791e-03f,
+-5.053403904e-03f, -5.053318287e-03f, -5.053223943e-03f, -5.053120871e-03f, -5.053009073e-03f, -5.052888548e-03f, -5.052759297e-03f, -5.052621322e-03f, -5.052474622e-03f, -5.052319199e-03f,
+-5.052155053e-03f, -5.051982185e-03f, -5.051800595e-03f, -5.051610285e-03f, -5.051411255e-03f, -5.051203506e-03f, -5.050987038e-03f, -5.050761853e-03f, -5.050527951e-03f, -5.050285333e-03f,
+-5.050034000e-03f, -5.049773953e-03f, -5.049505192e-03f, -5.049227719e-03f, -5.048941535e-03f, -5.048646640e-03f, -5.048343035e-03f, -5.048030722e-03f, -5.047709701e-03f, -5.047379973e-03f,
+-5.047041540e-03f, -5.046694402e-03f, -5.046338560e-03f, -5.045974015e-03f, -5.045600769e-03f, -5.045218822e-03f, -5.044828176e-03f, -5.044428832e-03f, -5.044020790e-03f, -5.043604052e-03f,
+-5.043178620e-03f, -5.042744493e-03f, -5.042301675e-03f, -5.041850164e-03f, -5.041389964e-03f, -5.040921074e-03f, -5.040443497e-03f, -5.039957233e-03f, -5.039462285e-03f, -5.038958652e-03f,
+-5.038446337e-03f, -5.037925340e-03f, -5.037395663e-03f, -5.036857308e-03f, -5.036310276e-03f, -5.035754567e-03f, -5.035190184e-03f, -5.034617128e-03f, -5.034035401e-03f, -5.033445003e-03f,
+-5.032845936e-03f, -5.032238202e-03f, -5.031621802e-03f, -5.030996738e-03f, -5.030363010e-03f, -5.029720622e-03f, -5.029069574e-03f, -5.028409867e-03f, -5.027741504e-03f, -5.027064485e-03f,
+-5.026378813e-03f, -5.025684490e-03f, -5.024981516e-03f, -5.024269893e-03f, -5.023549623e-03f, -5.022820708e-03f, -5.022083150e-03f, -5.021336950e-03f, -5.020582109e-03f, -5.019818630e-03f,
+-5.019046514e-03f, -5.018265763e-03f, -5.017476379e-03f, -5.016678364e-03f, -5.015871719e-03f, -5.015056446e-03f, -5.014232547e-03f, -5.013400025e-03f, -5.012558880e-03f, -5.011709114e-03f,
+-5.010850730e-03f, -5.009983730e-03f, -5.009108115e-03f, -5.008223888e-03f, -5.007331049e-03f, -5.006429602e-03f, -5.005519548e-03f, -5.004600889e-03f, -5.003673628e-03f, -5.002737766e-03f,
+-5.001793305e-03f, -5.000840247e-03f, -4.999878595e-03f, -4.998908351e-03f, -4.997929516e-03f, -4.996942092e-03f, -4.995946083e-03f, -4.994941489e-03f, -4.993928314e-03f, -4.992906559e-03f,
+-4.991876227e-03f, -4.990837319e-03f, -4.989789838e-03f, -4.988733787e-03f, -4.987669166e-03f, -4.986595980e-03f, -4.985514229e-03f, -4.984423917e-03f, -4.983325045e-03f, -4.982217617e-03f,
+-4.981101633e-03f, -4.979977097e-03f, -4.978844011e-03f, -4.977702377e-03f, -4.976552198e-03f, -4.975393476e-03f, -4.974226214e-03f, -4.973050413e-03f, -4.971866077e-03f, -4.970673208e-03f,
+-4.969471808e-03f, -4.968261880e-03f, -4.967043427e-03f, -4.965816450e-03f, -4.964580953e-03f, -4.963336938e-03f, -4.962084407e-03f, -4.960823364e-03f, -4.959553810e-03f, -4.958275749e-03f,
+-4.956989183e-03f, -4.955694114e-03f, -4.954390546e-03f, -4.953078481e-03f, -4.951757921e-03f, -4.950428870e-03f, -4.949091330e-03f, -4.947745303e-03f, -4.946390794e-03f, -4.945027803e-03f,
+-4.943656335e-03f, -4.942276391e-03f, -4.940887975e-03f, -4.939491090e-03f, -4.938085738e-03f, -4.936671922e-03f, -4.935249645e-03f, -4.933818910e-03f, -4.932379720e-03f, -4.930932077e-03f,
+-4.929475986e-03f, -4.928011447e-03f, -4.926538466e-03f, -4.925057043e-03f, -4.923567183e-03f, -4.922068889e-03f, -4.920562163e-03f, -4.919047008e-03f, -4.917523428e-03f, -4.915991426e-03f,
+-4.914451004e-03f, -4.912902165e-03f, -4.911344914e-03f, -4.909779252e-03f, -4.908205184e-03f, -4.906622711e-03f, -4.905031838e-03f, -4.903432567e-03f, -4.901824902e-03f, -4.900208846e-03f,
+-4.898584401e-03f, -4.896951572e-03f, -4.895310361e-03f, -4.893660772e-03f, -4.892002809e-03f, -4.890336473e-03f, -4.888661769e-03f, -4.886978699e-03f, -4.885287268e-03f, -4.883587479e-03f,
+-4.881879334e-03f, -4.880162838e-03f, -4.878437993e-03f, -4.876704803e-03f, -4.874963272e-03f, -4.873213402e-03f, -4.871455198e-03f, -4.869688662e-03f, -4.867913799e-03f, -4.866130611e-03f,
+-4.864339102e-03f, -4.862539276e-03f, -4.860731136e-03f, -4.858914686e-03f, -4.857089930e-03f, -4.855256870e-03f, -4.853415510e-03f, -4.851565854e-03f, -4.849707906e-03f, -4.847841669e-03f,
+-4.845967147e-03f, -4.844084344e-03f, -4.842193263e-03f, -4.840293907e-03f, -4.838386281e-03f, -4.836470389e-03f, -4.834546233e-03f, -4.832613818e-03f, -4.830673147e-03f, -4.828724225e-03f,
+-4.826767054e-03f, -4.824801639e-03f, -4.822827984e-03f, -4.820846092e-03f, -4.818855968e-03f, -4.816857614e-03f, -4.814851035e-03f, -4.812836235e-03f, -4.810813218e-03f, -4.808781988e-03f,
+-4.806742547e-03f, -4.804694902e-03f, -4.802639054e-03f, -4.800575009e-03f, -4.798502770e-03f, -4.796422342e-03f, -4.794333727e-03f, -4.792236931e-03f, -4.790131958e-03f, -4.788018810e-03f,
+-4.785897493e-03f, -4.783768011e-03f, -4.781630367e-03f, -4.779484566e-03f, -4.777330611e-03f, -4.775168508e-03f, -4.772998259e-03f, -4.770819870e-03f, -4.768633344e-03f, -4.766438685e-03f,
+-4.764235898e-03f, -4.762024988e-03f, -4.759805957e-03f, -4.757578810e-03f, -4.755343553e-03f, -4.753100188e-03f, -4.750848720e-03f, -4.748589154e-03f, -4.746321493e-03f, -4.744045743e-03f,
+-4.741761907e-03f, -4.739469990e-03f, -4.737169996e-03f, -4.734861929e-03f, -4.732545794e-03f, -4.730221596e-03f, -4.727889338e-03f, -4.725549026e-03f, -4.723200663e-03f, -4.720844253e-03f,
+-4.718479803e-03f, -4.716107315e-03f, -4.713726795e-03f, -4.711338247e-03f, -4.708941675e-03f, -4.706537085e-03f, -4.704124480e-03f, -4.701703865e-03f, -4.699275244e-03f, -4.696838624e-03f,
+-4.694394007e-03f, -4.691941398e-03f, -4.689480803e-03f, -4.687012226e-03f, -4.684535671e-03f, -4.682051143e-03f, -4.679558647e-03f, -4.677058188e-03f, -4.674549769e-03f, -4.672033397e-03f,
+-4.669509076e-03f, -4.666976810e-03f, -4.664436604e-03f, -4.661888463e-03f, -4.659332393e-03f, -4.656768396e-03f, -4.654196480e-03f, -4.651616647e-03f, -4.649028904e-03f, -4.646433254e-03f,
+-4.643829704e-03f, -4.641218257e-03f, -4.638598919e-03f, -4.635971694e-03f, -4.633336588e-03f, -4.630693606e-03f, -4.628042752e-03f, -4.625384031e-03f, -4.622717449e-03f, -4.620043010e-03f,
+-4.617360719e-03f, -4.614670582e-03f, -4.611972603e-03f, -4.609266787e-03f, -4.606553140e-03f, -4.603831667e-03f, -4.601102372e-03f, -4.598365262e-03f, -4.595620340e-03f, -4.592867612e-03f,
+-4.590107083e-03f, -4.587338759e-03f, -4.584562644e-03f, -4.581778744e-03f, -4.578987064e-03f, -4.576187609e-03f, -4.573380384e-03f, -4.570565395e-03f, -4.567742646e-03f, -4.564912144e-03f,
+-4.562073893e-03f, -4.559227898e-03f, -4.556374166e-03f, -4.553512700e-03f, -4.550643508e-03f, -4.547766593e-03f, -4.544881961e-03f, -4.541989618e-03f, -4.539089569e-03f, -4.536181819e-03f,
+-4.533266374e-03f, -4.530343240e-03f, -4.527412421e-03f, -4.524473923e-03f, -4.521527751e-03f, -4.518573912e-03f, -4.515612410e-03f, -4.512643251e-03f, -4.509666441e-03f, -4.506681984e-03f,
+-4.503689887e-03f, -4.500690156e-03f, -4.497682795e-03f, -4.494667810e-03f, -4.491645207e-03f, -4.488614991e-03f, -4.485577168e-03f, -4.482531744e-03f, -4.479478725e-03f, -4.476418115e-03f,
+-4.473349921e-03f, -4.470274148e-03f, -4.467190802e-03f, -4.464099889e-03f, -4.461001414e-03f, -4.457895383e-03f, -4.454781802e-03f, -4.451660677e-03f, -4.448532013e-03f, -4.445395816e-03f,
+-4.442252093e-03f, -4.439100848e-03f, -4.435942087e-03f, -4.432775817e-03f, -4.429602043e-03f, -4.426420771e-03f, -4.423232007e-03f, -4.420035757e-03f, -4.416832027e-03f, -4.413620823e-03f,
+-4.410402149e-03f, -4.407176014e-03f, -4.403942422e-03f, -4.400701379e-03f, -4.397452891e-03f, -4.394196965e-03f, -4.390933606e-03f, -4.387662821e-03f, -4.384384615e-03f, -4.381098994e-03f,
+-4.377805965e-03f, -4.374505533e-03f, -4.371197705e-03f, -4.367882486e-03f, -4.364559883e-03f, -4.361229902e-03f, -4.357892549e-03f, -4.354547829e-03f, -4.351195751e-03f, -4.347836318e-03f,
+-4.344469538e-03f, -4.341095417e-03f, -4.337713960e-03f, -4.334325175e-03f, -4.330929067e-03f, -4.327525643e-03f, -4.324114908e-03f, -4.320696870e-03f, -4.317271534e-03f, -4.313838906e-03f,
+-4.310398994e-03f, -4.306951802e-03f, -4.303497338e-03f, -4.300035608e-03f, -4.296566619e-03f, -4.293090375e-03f, -4.289606885e-03f, -4.286116154e-03f, -4.282618188e-03f, -4.279112995e-03f,
+-4.275600580e-03f, -4.272080950e-03f, -4.268554112e-03f, -4.265020071e-03f, -4.261478834e-03f, -4.257930409e-03f, -4.254374800e-03f, -4.250812015e-03f, -4.247242061e-03f, -4.243664943e-03f,
+-4.240080668e-03f, -4.236489244e-03f, -4.232890675e-03f, -4.229284970e-03f, -4.225672134e-03f, -4.222052175e-03f, -4.218425098e-03f, -4.214790911e-03f, -4.211149619e-03f, -4.207501230e-03f,
+-4.203845751e-03f, -4.200183187e-03f, -4.196513546e-03f, -4.192836835e-03f, -4.189153059e-03f, -4.185462227e-03f, -4.181764343e-03f, -4.178059416e-03f, -4.174347452e-03f, -4.170628458e-03f,
+-4.166902440e-03f, -4.163169406e-03f, -4.159429361e-03f, -4.155682314e-03f, -4.151928270e-03f, -4.148167237e-03f, -4.144399221e-03f, -4.140624229e-03f, -4.136842269e-03f, -4.133053346e-03f,
+-4.129257469e-03f, -4.125454643e-03f, -4.121644876e-03f, -4.117828174e-03f, -4.114004545e-03f, -4.110173996e-03f, -4.106336533e-03f, -4.102492164e-03f, -4.098640895e-03f, -4.094782733e-03f,
+-4.090917686e-03f, -4.087045760e-03f, -4.083166963e-03f, -4.079281301e-03f, -4.075388782e-03f, -4.071489413e-03f, -4.067583200e-03f, -4.063670151e-03f, -4.059750273e-03f, -4.055823573e-03f,
+-4.051890058e-03f, -4.047949736e-03f, -4.044002613e-03f, -4.040048696e-03f, -4.036087993e-03f, -4.032120511e-03f, -4.028146258e-03f, -4.024165239e-03f, -4.020177463e-03f, -4.016182937e-03f,
+-4.012181668e-03f, -4.008173663e-03f, -4.004158930e-03f, -4.000137475e-03f, -3.996109307e-03f, -3.992074431e-03f, -3.988032857e-03f, -3.983984590e-03f, -3.979929639e-03f, -3.975868010e-03f,
+-3.971799711e-03f, -3.967724750e-03f, -3.963643133e-03f, -3.959554868e-03f, -3.955459963e-03f, -3.951358425e-03f, -3.947250261e-03f, -3.943135479e-03f, -3.939014085e-03f, -3.934886089e-03f,
+-3.930751496e-03f, -3.926610315e-03f, -3.922462554e-03f, -3.918308218e-03f, -3.914147317e-03f, -3.909979857e-03f, -3.905805846e-03f, -3.901625292e-03f, -3.897438202e-03f, -3.893244583e-03f,
+-3.889044444e-03f, -3.884837792e-03f, -3.880624634e-03f, -3.876404978e-03f, -3.872178832e-03f, -3.867946203e-03f, -3.863707099e-03f, -3.859461528e-03f, -3.855209496e-03f, -3.850951013e-03f,
+-3.846686085e-03f, -3.842414720e-03f, -3.838136927e-03f, -3.833852712e-03f, -3.829562083e-03f, -3.825265048e-03f, -3.820961616e-03f, -3.816651793e-03f, -3.812335587e-03f, -3.808013006e-03f,
+-3.803684058e-03f, -3.799348751e-03f, -3.795007093e-03f, -3.790659090e-03f, -3.786304752e-03f, -3.781944086e-03f, -3.777577100e-03f, -3.773203802e-03f, -3.768824199e-03f, -3.764438299e-03f,
+-3.760046111e-03f, -3.755647642e-03f, -3.751242900e-03f, -3.746831893e-03f, -3.742414629e-03f, -3.737991117e-03f, -3.733561363e-03f, -3.729125376e-03f, -3.724683163e-03f, -3.720234734e-03f,
+-3.715780095e-03f, -3.711319256e-03f, -3.706852223e-03f, -3.702379004e-03f, -3.697899609e-03f, -3.693414045e-03f, -3.688922320e-03f, -3.684424441e-03f, -3.679920418e-03f, -3.675410258e-03f,
+-3.670893970e-03f, -3.666371560e-03f, -3.661843039e-03f, -3.657308413e-03f, -3.652767691e-03f, -3.648220880e-03f, -3.643667990e-03f, -3.639109028e-03f, -3.634544003e-03f, -3.629972922e-03f,
+-3.625395794e-03f, -3.620812627e-03f, -3.616223430e-03f, -3.611628209e-03f, -3.607026975e-03f, -3.602419735e-03f, -3.597806496e-03f, -3.593187269e-03f, -3.588562060e-03f, -3.583930878e-03f,
+-3.579293731e-03f, -3.574650628e-03f, -3.570001578e-03f, -3.565346587e-03f, -3.560685665e-03f, -3.556018820e-03f, -3.551346061e-03f, -3.546667395e-03f, -3.541982832e-03f, -3.537292378e-03f,
+-3.532596044e-03f, -3.527893837e-03f, -3.523185766e-03f, -3.518471839e-03f, -3.513752064e-03f, -3.509026450e-03f, -3.504295006e-03f, -3.499557740e-03f, -3.494814660e-03f, -3.490065775e-03f,
+-3.485311094e-03f, -3.480550624e-03f, -3.475784375e-03f, -3.471012355e-03f, -3.466234572e-03f, -3.461451035e-03f, -3.456661753e-03f, -3.451866733e-03f, -3.447065986e-03f, -3.442259518e-03f,
+-3.437447340e-03f, -3.432629459e-03f, -3.427805884e-03f, -3.422976623e-03f, -3.418141686e-03f, -3.413301081e-03f, -3.408454817e-03f, -3.403602901e-03f, -3.398745344e-03f, -3.393882153e-03f,
+-3.389013337e-03f, -3.384138905e-03f, -3.379258866e-03f, -3.374373228e-03f, -3.369482000e-03f, -3.364585191e-03f, -3.359682810e-03f, -3.354774864e-03f, -3.349861364e-03f, -3.344942318e-03f,
+-3.340017734e-03f, -3.335087621e-03f, -3.330151989e-03f, -3.325210845e-03f, -3.320264199e-03f, -3.315312060e-03f, -3.310354437e-03f, -3.305391337e-03f, -3.300422771e-03f, -3.295448746e-03f,
+-3.290469272e-03f, -3.285484358e-03f, -3.280494013e-03f, -3.275498245e-03f, -3.270497063e-03f, -3.265490477e-03f, -3.260478494e-03f, -3.255461125e-03f, -3.250438378e-03f, -3.245410262e-03f,
+-3.240376786e-03f, -3.235337959e-03f, -3.230293789e-03f, -3.225244287e-03f, -3.220189460e-03f, -3.215129318e-03f, -3.210063870e-03f, -3.204993125e-03f, -3.199917092e-03f, -3.194835779e-03f,
+-3.189749197e-03f, -3.184657354e-03f, -3.179560258e-03f, -3.174457920e-03f, -3.169350348e-03f, -3.164237551e-03f, -3.159119539e-03f, -3.153996320e-03f, -3.148867904e-03f, -3.143734300e-03f,
+-3.138595516e-03f, -3.133451563e-03f, -3.128302448e-03f, -3.123148182e-03f, -3.117988773e-03f, -3.112824231e-03f, -3.107654565e-03f, -3.102479783e-03f, -3.097299896e-03f, -3.092114912e-03f,
+-3.086924841e-03f, -3.081729692e-03f, -3.076529473e-03f, -3.071324195e-03f, -3.066113867e-03f, -3.060898497e-03f, -3.055678095e-03f, -3.050452670e-03f, -3.045222233e-03f, -3.039986790e-03f,
+-3.034746354e-03f, -3.029500931e-03f, -3.024250532e-03f, -3.018995167e-03f, -3.013734844e-03f, -3.008469572e-03f, -3.003199362e-03f, -2.997924222e-03f, -2.992644162e-03f, -2.987359191e-03f,
+-2.982069319e-03f, -2.976774554e-03f, -2.971474907e-03f, -2.966170387e-03f, -2.960861002e-03f, -2.955546764e-03f, -2.950227680e-03f, -2.944903761e-03f, -2.939575015e-03f, -2.934241453e-03f,
+-2.928903083e-03f, -2.923559916e-03f, -2.918211960e-03f, -2.912859226e-03f, -2.907501722e-03f, -2.902139458e-03f, -2.896772444e-03f, -2.891400689e-03f, -2.886024203e-03f, -2.880642995e-03f,
+-2.875257074e-03f, -2.869866451e-03f, -2.864471135e-03f, -2.859071135e-03f, -2.853666461e-03f, -2.848257122e-03f, -2.842843128e-03f, -2.837424489e-03f, -2.832001215e-03f, -2.826573314e-03f,
+-2.821140796e-03f, -2.815703672e-03f, -2.810261951e-03f, -2.804815641e-03f, -2.799364754e-03f, -2.793909298e-03f, -2.788449284e-03f, -2.782984720e-03f, -2.777515617e-03f, -2.772041984e-03f,
+-2.766563831e-03f, -2.761081168e-03f, -2.755594004e-03f, -2.750102350e-03f, -2.744606213e-03f, -2.739105606e-03f, -2.733600536e-03f, -2.728091015e-03f, -2.722577051e-03f, -2.717058655e-03f,
+-2.711535835e-03f, -2.706008603e-03f, -2.700476967e-03f, -2.694940938e-03f, -2.689400525e-03f, -2.683855738e-03f, -2.678306587e-03f, -2.672753082e-03f, -2.667195232e-03f, -2.661633048e-03f,
+-2.656066538e-03f, -2.650495713e-03f, -2.644920584e-03f, -2.639341158e-03f, -2.633757448e-03f, -2.628169461e-03f, -2.622577209e-03f, -2.616980701e-03f, -2.611379947e-03f, -2.605774957e-03f,
+-2.600165740e-03f, -2.594552307e-03f, -2.588934668e-03f, -2.583312832e-03f, -2.577686810e-03f, -2.572056611e-03f, -2.566422245e-03f, -2.560783722e-03f, -2.555141053e-03f, -2.549494246e-03f,
+-2.543843313e-03f, -2.538188263e-03f, -2.532529105e-03f, -2.526865851e-03f, -2.521198510e-03f, -2.515527091e-03f, -2.509851606e-03f, -2.504172063e-03f, -2.498488474e-03f, -2.492800848e-03f,
+-2.487109194e-03f, -2.481413524e-03f, -2.475713847e-03f, -2.470010173e-03f, -2.464302513e-03f, -2.458590875e-03f, -2.452875271e-03f, -2.447155710e-03f, -2.441432203e-03f, -2.435704760e-03f,
+-2.429973390e-03f, -2.424238104e-03f, -2.418498912e-03f, -2.412755824e-03f, -2.407008850e-03f, -2.401258000e-03f, -2.395503284e-03f, -2.389744713e-03f, -2.383982297e-03f, -2.378216045e-03f,
+-2.372445969e-03f, -2.366672077e-03f, -2.360894381e-03f, -2.355112890e-03f, -2.349327615e-03f, -2.343538566e-03f, -2.337745753e-03f, -2.331949185e-03f, -2.326148875e-03f, -2.320344830e-03f,
+-2.314537063e-03f, -2.308725583e-03f, -2.302910400e-03f, -2.297091524e-03f, -2.291268966e-03f, -2.285442736e-03f, -2.279612845e-03f, -2.273779302e-03f, -2.267942117e-03f, -2.262101302e-03f,
+-2.256256866e-03f, -2.250408819e-03f, -2.244557172e-03f, -2.238701936e-03f, -2.232843119e-03f, -2.226980734e-03f, -2.221114790e-03f, -2.215245297e-03f, -2.209372265e-03f, -2.203495706e-03f,
+-2.197615629e-03f, -2.191732044e-03f, -2.185844963e-03f, -2.179954395e-03f, -2.174060350e-03f, -2.168162840e-03f, -2.162261874e-03f, -2.156357463e-03f, -2.150449617e-03f, -2.144538346e-03f,
+-2.138623661e-03f, -2.132705573e-03f, -2.126784092e-03f, -2.120859227e-03f, -2.114930990e-03f, -2.108999391e-03f, -2.103064440e-03f, -2.097126148e-03f, -2.091184525e-03f, -2.085239582e-03f,
+-2.079291329e-03f, -2.073339776e-03f, -2.067384935e-03f, -2.061426814e-03f, -2.055465426e-03f, -2.049500780e-03f, -2.043532886e-03f, -2.037561756e-03f, -2.031587400e-03f, -2.025609828e-03f,
+-2.019629050e-03f, -2.013645078e-03f, -2.007657921e-03f, -2.001667591e-03f, -1.995674097e-03f, -1.989677451e-03f, -1.983677662e-03f, -1.977674742e-03f, -1.971668700e-03f, -1.965659548e-03f,
+-1.959647295e-03f, -1.953631953e-03f, -1.947613532e-03f, -1.941592042e-03f, -1.935567495e-03f, -1.929539900e-03f, -1.923509268e-03f, -1.917475610e-03f, -1.911438936e-03f, -1.905399258e-03f,
+-1.899356585e-03f, -1.893310927e-03f, -1.887262297e-03f, -1.881210704e-03f, -1.875156159e-03f, -1.869098672e-03f, -1.863038254e-03f, -1.856974916e-03f, -1.850908669e-03f, -1.844839522e-03f,
+-1.838767487e-03f, -1.832692574e-03f, -1.826614794e-03f, -1.820534158e-03f, -1.814450676e-03f, -1.808364359e-03f, -1.802275217e-03f, -1.796183261e-03f, -1.790088502e-03f, -1.783990951e-03f,
+-1.777890618e-03f, -1.771787513e-03f, -1.765681649e-03f, -1.759573034e-03f, -1.753461680e-03f, -1.747347598e-03f, -1.741230798e-03f, -1.735111291e-03f, -1.728989088e-03f, -1.722864200e-03f,
+-1.716736636e-03f, -1.710606409e-03f, -1.704473527e-03f, -1.698338004e-03f, -1.692199848e-03f, -1.686059071e-03f, -1.679915684e-03f, -1.673769697e-03f, -1.667621121e-03f, -1.661469966e-03f,
+-1.655316244e-03f, -1.649159966e-03f, -1.643001142e-03f, -1.636839782e-03f, -1.630675898e-03f, -1.624509500e-03f, -1.618340600e-03f, -1.612169207e-03f, -1.605995334e-03f, -1.599818989e-03f,
+-1.593640185e-03f, -1.587458933e-03f, -1.581275242e-03f, -1.575089124e-03f, -1.568900589e-03f, -1.562709649e-03f, -1.556516313e-03f, -1.550320594e-03f, -1.544122502e-03f, -1.537922047e-03f,
+-1.531719241e-03f, -1.525514094e-03f, -1.519306617e-03f, -1.513096822e-03f, -1.506884718e-03f, -1.500670316e-03f, -1.494453628e-03f, -1.488234665e-03f, -1.482013437e-03f, -1.475789955e-03f,
+-1.469564230e-03f, -1.463336273e-03f, -1.457106094e-03f, -1.450873705e-03f, -1.444639117e-03f, -1.438402340e-03f, -1.432163385e-03f, -1.425922263e-03f, -1.419678986e-03f, -1.413433563e-03f,
+-1.407186006e-03f, -1.400936326e-03f, -1.394684533e-03f, -1.388430639e-03f, -1.382174654e-03f, -1.375916590e-03f, -1.369656457e-03f, -1.363394266e-03f, -1.357130028e-03f, -1.350863755e-03f,
+-1.344595456e-03f, -1.338325143e-03f, -1.332052827e-03f, -1.325778519e-03f, -1.319502230e-03f, -1.313223970e-03f, -1.306943751e-03f, -1.300661583e-03f, -1.294377478e-03f, -1.288091446e-03f,
+-1.281803499e-03f, -1.275513647e-03f, -1.269221902e-03f, -1.262928273e-03f, -1.256632773e-03f, -1.250335413e-03f, -1.244036202e-03f, -1.237735153e-03f, -1.231432276e-03f, -1.225127582e-03f,
+-1.218821082e-03f, -1.212512788e-03f, -1.206202709e-03f, -1.199890858e-03f, -1.193577244e-03f, -1.187261880e-03f, -1.180944776e-03f, -1.174625943e-03f, -1.168305392e-03f, -1.161983135e-03f,
+-1.155659181e-03f, -1.149333543e-03f, -1.143006230e-03f, -1.136677255e-03f, -1.130346628e-03f, -1.124014361e-03f, -1.117680463e-03f, -1.111344947e-03f, -1.105007823e-03f, -1.098669103e-03f,
+-1.092328797e-03f, -1.085986916e-03f, -1.079643471e-03f, -1.073298475e-03f, -1.066951936e-03f, -1.060603867e-03f, -1.054254279e-03f, -1.047903183e-03f, -1.041550589e-03f, -1.035196509e-03f,
+-1.028840953e-03f, -1.022483934e-03f, -1.016125461e-03f, -1.009765547e-03f, -1.003404201e-03f, -9.970414357e-04f, -9.906772615e-04f, -9.843116894e-04f, -9.779447307e-04f, -9.715763964e-04f,
+-9.652066975e-04f, -9.588356451e-04f, -9.524632503e-04f, -9.460895242e-04f, -9.397144779e-04f, -9.333381224e-04f, -9.269604688e-04f, -9.205815282e-04f, -9.142013117e-04f, -9.078198304e-04f,
+-9.014370954e-04f, -8.950531177e-04f, -8.886679085e-04f, -8.822814789e-04f, -8.758938399e-04f, -8.695050026e-04f, -8.631149782e-04f, -8.567237777e-04f, -8.503314123e-04f, -8.439378931e-04f,
+-8.375432311e-04f, -8.311474375e-04f, -8.247505233e-04f, -8.183524998e-04f, -8.119533779e-04f, -8.055531688e-04f, -7.991518837e-04f, -7.927495336e-04f, -7.863461297e-04f, -7.799416830e-04f,
+-7.735362047e-04f, -7.671297060e-04f, -7.607221978e-04f, -7.543136914e-04f, -7.479041979e-04f, -7.414937285e-04f, -7.350822941e-04f, -7.286699060e-04f, -7.222565752e-04f, -7.158423130e-04f,
+-7.094271305e-04f, -7.030110387e-04f, -6.965940488e-04f, -6.901761720e-04f, -6.837574193e-04f, -6.773378019e-04f, -6.709173310e-04f, -6.644960177e-04f, -6.580738731e-04f, -6.516509084e-04f,
+-6.452271347e-04f, -6.388025631e-04f, -6.323772048e-04f, -6.259510709e-04f, -6.195241726e-04f, -6.130965210e-04f, -6.066681273e-04f, -6.002390025e-04f, -5.938091579e-04f, -5.873786047e-04f,
+-5.809473538e-04f, -5.745154166e-04f, -5.680828041e-04f, -5.616495275e-04f, -5.552155979e-04f, -5.487810265e-04f, -5.423458245e-04f, -5.359100030e-04f, -5.294735731e-04f, -5.230365460e-04f,
+-5.165989328e-04f, -5.101607448e-04f, -5.037219930e-04f, -4.972826887e-04f, -4.908428429e-04f, -4.844024668e-04f, -4.779615716e-04f, -4.715201685e-04f, -4.650782686e-04f, -4.586358830e-04f,
+-4.521930229e-04f, -4.457496994e-04f, -4.393059238e-04f, -4.328617072e-04f, -4.264170607e-04f, -4.199719955e-04f, -4.135265228e-04f, -4.070806537e-04f, -4.006343993e-04f, -3.941877709e-04f,
+-3.877407796e-04f, -3.812934365e-04f, -3.748457528e-04f, -3.683977397e-04f, -3.619494083e-04f, -3.555007698e-04f, -3.490518353e-04f, -3.426026160e-04f, -3.361531231e-04f, -3.297033677e-04f,
+-3.232533610e-04f, -3.168031142e-04f, -3.103526383e-04f, -3.039019446e-04f, -2.974510441e-04f, -2.909999482e-04f, -2.845486679e-04f, -2.780972143e-04f, -2.716455987e-04f, -2.651938322e-04f,
+-2.587419260e-04f, -2.522898912e-04f, -2.458377389e-04f, -2.393854804e-04f, -2.329331267e-04f, -2.264806891e-04f, -2.200281786e-04f, -2.135756065e-04f, -2.071229839e-04f, -2.006703220e-04f,
+-1.942176318e-04f, -1.877649246e-04f, -1.813122115e-04f, -1.748595037e-04f, -1.684068122e-04f, -1.619541484e-04f, -1.555015232e-04f, -1.490489479e-04f, -1.425964335e-04f, -1.361439914e-04f,
+-1.296916325e-04f, -1.232393681e-04f, -1.167872092e-04f, -1.103351671e-04f, -1.038832529e-04f, -9.743147771e-05f, -9.097985267e-05f, -8.452838893e-05f, -7.807709764e-05f, -7.162598993e-05f,
+-6.517507695e-05f, -5.872436983e-05f, -5.227387970e-05f, -4.582361772e-05f, -3.937359500e-05f, -3.292382269e-05f, -2.647431192e-05f, -2.002507382e-05f, -1.357611952e-05f, -7.127460151e-06f,
+-6.791068466e-07f, 5.768929267e-06f, 1.221663706e-05f, 1.866400542e-05f, 2.511102320e-05f, 3.155767929e-05f, 3.800396257e-05f, 4.444986192e-05f, 5.089536620e-05f, 5.734046432e-05f,
+6.378514514e-05f, 7.022939755e-05f, 7.667321043e-05f, 8.311657268e-05f, 8.955947318e-05f, 9.600190082e-05f, 1.024438445e-04f, 1.088852931e-04f, 1.153262355e-04f, 1.217666606e-04f,
+1.282065573e-04f, 1.346459145e-04f, 1.410847211e-04f, 1.475229661e-04f, 1.539606382e-04f, 1.603977264e-04f, 1.668342197e-04f, 1.732701068e-04f, 1.797053768e-04f, 1.861400185e-04f,
+1.925740209e-04f, 1.990073728e-04f, 2.054400632e-04f, 2.118720810e-04f, 2.183034151e-04f, 2.247340544e-04f, 2.311639879e-04f, 2.375932045e-04f, 2.440216930e-04f, 2.504494425e-04f,
+2.568764419e-04f, 2.633026800e-04f, 2.697281458e-04f, 2.761528283e-04f, 2.825767164e-04f, 2.889997990e-04f, 2.954220651e-04f, 3.018435036e-04f, 3.082641034e-04f, 3.146838536e-04f,
+3.211027430e-04f, 3.275207605e-04f, 3.339378953e-04f, 3.403541361e-04f, 3.467694720e-04f, 3.531838919e-04f, 3.595973848e-04f, 3.660099397e-04f, 3.724215454e-04f, 3.788321911e-04f,
+3.852418655e-04f, 3.916505578e-04f, 3.980582569e-04f, 4.044649517e-04f, 4.108706313e-04f, 4.172752846e-04f, 4.236789006e-04f, 4.300814683e-04f, 4.364829766e-04f, 4.428834147e-04f,
+4.492827714e-04f, 4.556810358e-04f, 4.620781968e-04f, 4.684742434e-04f, 4.748691648e-04f, 4.812629497e-04f, 4.876555874e-04f, 4.940470667e-04f, 5.004373767e-04f, 5.068265064e-04f,
+5.132144449e-04f, 5.196011810e-04f, 5.259867040e-04f, 5.323710027e-04f, 5.387540662e-04f, 5.451358836e-04f, 5.515164439e-04f, 5.578957361e-04f, 5.642737492e-04f, 5.706504723e-04f,
+5.770258945e-04f, 5.834000048e-04f, 5.897727922e-04f, 5.961442457e-04f, 6.025143546e-04f, 6.088831077e-04f, 6.152504942e-04f, 6.216165031e-04f, 6.279811235e-04f, 6.343443445e-04f,
+6.407061551e-04f, 6.470665444e-04f, 6.534255016e-04f, 6.597830156e-04f, 6.661390755e-04f, 6.724936705e-04f, 6.788467897e-04f, 6.851984220e-04f, 6.915485567e-04f, 6.978971829e-04f,
+7.042442895e-04f, 7.105898658e-04f, 7.169339009e-04f, 7.232763838e-04f, 7.296173037e-04f, 7.359566497e-04f, 7.422944109e-04f, 7.486305765e-04f, 7.549651355e-04f, 7.612980772e-04f,
+7.676293906e-04f, 7.739590649e-04f, 7.802870892e-04f, 7.866134526e-04f, 7.929381445e-04f, 7.992611537e-04f, 8.055824696e-04f, 8.119020814e-04f, 8.182199780e-04f, 8.245361488e-04f,
+8.308505829e-04f, 8.371632694e-04f, 8.434741976e-04f, 8.497833566e-04f, 8.560907356e-04f, 8.623963239e-04f, 8.687001105e-04f, 8.750020847e-04f, 8.813022356e-04f, 8.876005526e-04f,
+8.938970248e-04f, 9.001916413e-04f, 9.064843915e-04f, 9.127752645e-04f, 9.190642496e-04f, 9.253513360e-04f, 9.316365128e-04f, 9.379197694e-04f, 9.442010950e-04f, 9.504804788e-04f,
+9.567579101e-04f, 9.630333781e-04f, 9.693068721e-04f, 9.755783812e-04f, 9.818478949e-04f, 9.881154023e-04f, 9.943808928e-04f, 1.000644355e-03f, 1.006905780e-03f, 1.013165155e-03f,
+1.019422470e-03f, 1.025677715e-03f, 1.031930878e-03f, 1.038181950e-03f, 1.044430918e-03f, 1.050677774e-03f, 1.056922505e-03f, 1.063165101e-03f, 1.069405552e-03f, 1.075643847e-03f,
+1.081879975e-03f, 1.088113926e-03f, 1.094345689e-03f, 1.100575252e-03f, 1.106802607e-03f, 1.113027741e-03f, 1.119250644e-03f, 1.125471306e-03f, 1.131689716e-03f, 1.137905863e-03f,
+1.144119737e-03f, 1.150331328e-03f, 1.156540623e-03f, 1.162747613e-03f, 1.168952288e-03f, 1.175154636e-03f, 1.181354648e-03f, 1.187552311e-03f, 1.193747617e-03f, 1.199940553e-03f,
+1.206131111e-03f, 1.212319278e-03f, 1.218505045e-03f, 1.224688401e-03f, 1.230869335e-03f, 1.237047837e-03f, 1.243223896e-03f, 1.249397502e-03f, 1.255568644e-03f, 1.261737312e-03f,
+1.267903494e-03f, 1.274067181e-03f, 1.280228363e-03f, 1.286387027e-03f, 1.292543165e-03f, 1.298696765e-03f, 1.304847817e-03f, 1.310996310e-03f, 1.317142235e-03f, 1.323285579e-03f,
+1.329426334e-03f, 1.335564488e-03f, 1.341700031e-03f, 1.347832953e-03f, 1.353963243e-03f, 1.360090890e-03f, 1.366215884e-03f, 1.372338215e-03f, 1.378457873e-03f, 1.384574846e-03f,
+1.390689124e-03f, 1.396800697e-03f, 1.402909555e-03f, 1.409015687e-03f, 1.415119082e-03f, 1.421219731e-03f, 1.427317622e-03f, 1.433412746e-03f, 1.439505092e-03f, 1.445594649e-03f,
+1.451681408e-03f, 1.457765358e-03f, 1.463846488e-03f, 1.469924788e-03f, 1.476000248e-03f, 1.482072857e-03f, 1.488142605e-03f, 1.494209483e-03f, 1.500273478e-03f, 1.506334581e-03f,
+1.512392782e-03f, 1.518448071e-03f, 1.524500436e-03f, 1.530549869e-03f, 1.536596357e-03f, 1.542639892e-03f, 1.548680462e-03f, 1.554718058e-03f, 1.560752670e-03f, 1.566784286e-03f,
+1.572812897e-03f, 1.578838492e-03f, 1.584861062e-03f, 1.590880595e-03f, 1.596897082e-03f, 1.602910512e-03f, 1.608920876e-03f, 1.614928162e-03f, 1.620932361e-03f, 1.626933463e-03f,
+1.632931456e-03f, 1.638926332e-03f, 1.644918080e-03f, 1.650906689e-03f, 1.656892150e-03f, 1.662874452e-03f, 1.668853584e-03f, 1.674829538e-03f, 1.680802303e-03f, 1.686771868e-03f,
+1.692738223e-03f, 1.698701359e-03f, 1.704661265e-03f, 1.710617931e-03f, 1.716571346e-03f, 1.722521501e-03f, 1.728468386e-03f, 1.734411991e-03f, 1.740352304e-03f, 1.746289317e-03f,
+1.752223019e-03f, 1.758153400e-03f, 1.764080450e-03f, 1.770004159e-03f, 1.775924517e-03f, 1.781841513e-03f, 1.787755139e-03f, 1.793665382e-03f, 1.799572235e-03f, 1.805475686e-03f,
+1.811375725e-03f, 1.817272343e-03f, 1.823165530e-03f, 1.829055275e-03f, 1.834941568e-03f, 1.840824400e-03f, 1.846703760e-03f, 1.852579639e-03f, 1.858452026e-03f, 1.864320912e-03f,
+1.870186286e-03f, 1.876048139e-03f, 1.881906461e-03f, 1.887761241e-03f, 1.893612470e-03f, 1.899460138e-03f, 1.905304234e-03f, 1.911144750e-03f, 1.916981674e-03f, 1.922814998e-03f,
+1.928644711e-03f, 1.934470803e-03f, 1.940293265e-03f, 1.946112086e-03f, 1.951927257e-03f, 1.957738767e-03f, 1.963546608e-03f, 1.969350768e-03f, 1.975151239e-03f, 1.980948011e-03f,
+1.986741073e-03f, 1.992530415e-03f, 1.998316029e-03f, 2.004097903e-03f, 2.009876029e-03f, 2.015650396e-03f, 2.021420995e-03f, 2.027187816e-03f, 2.032950850e-03f, 2.038710085e-03f,
+2.044465513e-03f, 2.050217124e-03f, 2.055964908e-03f, 2.061708855e-03f, 2.067448956e-03f, 2.073185201e-03f, 2.078917580e-03f, 2.084646083e-03f, 2.090370702e-03f, 2.096091425e-03f,
+2.101808243e-03f, 2.107521147e-03f, 2.113230127e-03f, 2.118935174e-03f, 2.124636277e-03f, 2.130333427e-03f, 2.136026614e-03f, 2.141715829e-03f, 2.147401063e-03f, 2.153082304e-03f,
+2.158759544e-03f, 2.164432774e-03f, 2.170101983e-03f, 2.175767162e-03f, 2.181428302e-03f, 2.187085392e-03f, 2.192738423e-03f, 2.198387387e-03f, 2.204032272e-03f, 2.209673070e-03f,
+2.215309771e-03f, 2.220942365e-03f, 2.226570843e-03f, 2.232195196e-03f, 2.237815413e-03f, 2.243431486e-03f, 2.249043405e-03f, 2.254651160e-03f, 2.260254743e-03f, 2.265854142e-03f,
+2.271449350e-03f, 2.277040356e-03f, 2.282627151e-03f, 2.288209726e-03f, 2.293788070e-03f, 2.299362176e-03f, 2.304932033e-03f, 2.310497632e-03f, 2.316058963e-03f, 2.321616017e-03f,
+2.327168785e-03f, 2.332717258e-03f, 2.338261425e-03f, 2.343801278e-03f, 2.349336807e-03f, 2.354868003e-03f, 2.360394856e-03f, 2.365917358e-03f, 2.371435499e-03f, 2.376949269e-03f,
+2.382458659e-03f, 2.387963660e-03f, 2.393464263e-03f, 2.398960458e-03f, 2.404452236e-03f, 2.409939587e-03f, 2.415422504e-03f, 2.420900975e-03f, 2.426374993e-03f, 2.431844547e-03f,
+2.437309629e-03f, 2.442770229e-03f, 2.448226339e-03f, 2.453677948e-03f, 2.459125048e-03f, 2.464567629e-03f, 2.470005683e-03f, 2.475439200e-03f, 2.480868170e-03f, 2.486292586e-03f,
+2.491712437e-03f, 2.497127715e-03f, 2.502538410e-03f, 2.507944514e-03f, 2.513346016e-03f, 2.518742909e-03f, 2.524135183e-03f, 2.529522828e-03f, 2.534905836e-03f, 2.540284198e-03f,
+2.545657905e-03f, 2.551026947e-03f, 2.556391316e-03f, 2.561751002e-03f, 2.567105997e-03f, 2.572456291e-03f, 2.577801876e-03f, 2.583142742e-03f, 2.588478880e-03f, 2.593810282e-03f,
+2.599136938e-03f, 2.604458840e-03f, 2.609775979e-03f, 2.615088344e-03f, 2.620395929e-03f, 2.625698723e-03f, 2.630996718e-03f, 2.636289905e-03f, 2.641578275e-03f, 2.646861819e-03f,
+2.652140528e-03f, 2.657414393e-03f, 2.662683406e-03f, 2.667947557e-03f, 2.673206838e-03f, 2.678461240e-03f, 2.683710753e-03f, 2.688955370e-03f, 2.694195081e-03f, 2.699429878e-03f,
+2.704659752e-03f, 2.709884693e-03f, 2.715104693e-03f, 2.720319744e-03f, 2.725529836e-03f, 2.730734962e-03f, 2.735935111e-03f, 2.741130276e-03f, 2.746320447e-03f, 2.751505616e-03f,
+2.756685774e-03f, 2.761860913e-03f, 2.767031024e-03f, 2.772196097e-03f, 2.777356125e-03f, 2.782511099e-03f, 2.787661010e-03f, 2.792805850e-03f, 2.797945609e-03f, 2.803080279e-03f,
+2.808209852e-03f, 2.813334319e-03f, 2.818453671e-03f, 2.823567899e-03f, 2.828676996e-03f, 2.833780953e-03f, 2.838879760e-03f, 2.843973410e-03f, 2.849061894e-03f, 2.854145204e-03f,
+2.859223330e-03f, 2.864296264e-03f, 2.869363998e-03f, 2.874426524e-03f, 2.879483832e-03f, 2.884535915e-03f, 2.889582763e-03f, 2.894624369e-03f, 2.899660724e-03f, 2.904691820e-03f,
+2.909717647e-03f, 2.914738198e-03f, 2.919753464e-03f, 2.924763438e-03f, 2.929768109e-03f, 2.934767471e-03f, 2.939761514e-03f, 2.944750230e-03f, 2.949733612e-03f, 2.954711650e-03f,
+2.959684336e-03f, 2.964651662e-03f, 2.969613620e-03f, 2.974570201e-03f, 2.979521397e-03f, 2.984467200e-03f, 2.989407601e-03f, 2.994342593e-03f, 2.999272166e-03f, 3.004196313e-03f,
+3.009115025e-03f, 3.014028295e-03f, 3.018936113e-03f, 3.023838472e-03f, 3.028735364e-03f, 3.033626780e-03f, 3.038512712e-03f, 3.043393152e-03f, 3.048268092e-03f, 3.053137523e-03f,
+3.058001439e-03f, 3.062859829e-03f, 3.067712687e-03f, 3.072560004e-03f, 3.077401772e-03f, 3.082237983e-03f, 3.087068628e-03f, 3.091893701e-03f, 3.096713192e-03f, 3.101527094e-03f,
+3.106335399e-03f, 3.111138098e-03f, 3.115935184e-03f, 3.120726649e-03f, 3.125512484e-03f, 3.130292681e-03f, 3.135067234e-03f, 3.139836132e-03f, 3.144599370e-03f, 3.149356938e-03f,
+3.154108829e-03f, 3.158855035e-03f, 3.163595548e-03f, 3.168330360e-03f, 3.173059462e-03f, 3.177782848e-03f, 3.182500510e-03f, 3.187212439e-03f, 3.191918627e-03f, 3.196619068e-03f,
+3.201313752e-03f, 3.206002672e-03f, 3.210685821e-03f, 3.215363190e-03f, 3.220034771e-03f, 3.224700558e-03f, 3.229360542e-03f, 3.234014715e-03f, 3.238663069e-03f, 3.243305598e-03f,
+3.247942292e-03f, 3.252573145e-03f, 3.257198149e-03f, 3.261817295e-03f, 3.266430577e-03f, 3.271037987e-03f, 3.275639516e-03f, 3.280235158e-03f, 3.284824904e-03f, 3.289408747e-03f,
+3.293986679e-03f, 3.298558694e-03f, 3.303124782e-03f, 3.307684937e-03f, 3.312239150e-03f, 3.316787415e-03f, 3.321329724e-03f, 3.325866069e-03f, 3.330396443e-03f, 3.334920838e-03f,
+3.339439246e-03f, 3.343951661e-03f, 3.348458074e-03f, 3.352958479e-03f, 3.357452867e-03f, 3.361941231e-03f, 3.366423564e-03f, 3.370899858e-03f, 3.375370106e-03f, 3.379834300e-03f,
+3.384292433e-03f, 3.388744498e-03f, 3.393190487e-03f, 3.397630393e-03f, 3.402064208e-03f, 3.406491926e-03f, 3.410913538e-03f, 3.415329037e-03f, 3.419738417e-03f, 3.424141669e-03f,
+3.428538786e-03f, 3.432929762e-03f, 3.437314589e-03f, 3.441693259e-03f, 3.446065765e-03f, 3.450432101e-03f, 3.454792258e-03f, 3.459146230e-03f, 3.463494010e-03f, 3.467835589e-03f,
+3.472170961e-03f, 3.476500120e-03f, 3.480823056e-03f, 3.485139765e-03f, 3.489450237e-03f, 3.493754467e-03f, 3.498052447e-03f, 3.502344169e-03f, 3.506629627e-03f, 3.510908815e-03f,
+3.515181723e-03f, 3.519448346e-03f, 3.523708677e-03f, 3.527962708e-03f, 3.532210433e-03f, 3.536451844e-03f, 3.540686934e-03f, 3.544915696e-03f, 3.549138124e-03f, 3.553354210e-03f,
+3.557563948e-03f, 3.561767330e-03f, 3.565964350e-03f, 3.570155000e-03f, 3.574339273e-03f, 3.578517163e-03f, 3.582688663e-03f, 3.586853766e-03f, 3.591012465e-03f, 3.595164754e-03f,
+3.599310624e-03f, 3.603450070e-03f, 3.607583084e-03f, 3.611709660e-03f, 3.615829791e-03f, 3.619943471e-03f, 3.624050691e-03f, 3.628151447e-03f, 3.632245730e-03f, 3.636333534e-03f,
+3.640414852e-03f, 3.644489678e-03f, 3.648558005e-03f, 3.652619826e-03f, 3.656675135e-03f, 3.660723924e-03f, 3.664766187e-03f, 3.668801918e-03f, 3.672831110e-03f, 3.676853756e-03f,
+3.680869849e-03f, 3.684879383e-03f, 3.688882352e-03f, 3.692878748e-03f, 3.696868565e-03f, 3.700851797e-03f, 3.704828437e-03f, 3.708798478e-03f, 3.712761914e-03f, 3.716718739e-03f,
+3.720668945e-03f, 3.724612527e-03f, 3.728549478e-03f, 3.732479791e-03f, 3.736403460e-03f, 3.740320479e-03f, 3.744230840e-03f, 3.748134539e-03f, 3.752031567e-03f, 3.755921919e-03f,
+3.759805589e-03f, 3.763682570e-03f, 3.767552855e-03f, 3.771416439e-03f, 3.775273315e-03f, 3.779123476e-03f, 3.782966917e-03f, 3.786803630e-03f, 3.790633611e-03f, 3.794456851e-03f,
+3.798273346e-03f, 3.802083089e-03f, 3.805886073e-03f, 3.809682293e-03f, 3.813471742e-03f, 3.817254414e-03f, 3.821030303e-03f, 3.824799402e-03f, 3.828561706e-03f, 3.832317207e-03f,
+3.836065901e-03f, 3.839807781e-03f, 3.843542841e-03f, 3.847271074e-03f, 3.850992475e-03f, 3.854707037e-03f, 3.858414754e-03f, 3.862115621e-03f, 3.865809632e-03f, 3.869496779e-03f,
+3.873177058e-03f, 3.876850462e-03f, 3.880516985e-03f, 3.884176621e-03f, 3.887829364e-03f, 3.891475209e-03f, 3.895114148e-03f, 3.898746178e-03f, 3.902371290e-03f, 3.905989480e-03f,
+3.909600741e-03f, 3.913205068e-03f, 3.916802455e-03f, 3.920392896e-03f, 3.923976385e-03f, 3.927552915e-03f, 3.931122483e-03f, 3.934685080e-03f, 3.938240703e-03f, 3.941789344e-03f,
+3.945330998e-03f, 3.948865660e-03f, 3.952393323e-03f, 3.955913982e-03f, 3.959427631e-03f, 3.962934265e-03f, 3.966433877e-03f, 3.969926462e-03f, 3.973412015e-03f, 3.976890528e-03f,
+3.980361998e-03f, 3.983826418e-03f, 3.987283783e-03f, 3.990734087e-03f, 3.994177324e-03f, 3.997613489e-03f, 4.001042576e-03f, 4.004464579e-03f, 4.007879494e-03f, 4.011287314e-03f,
+4.014688034e-03f, 4.018081649e-03f, 4.021468153e-03f, 4.024847540e-03f, 4.028219804e-03f, 4.031584942e-03f, 4.034942946e-03f, 4.038293812e-03f, 4.041637534e-03f, 4.044974107e-03f,
+4.048303525e-03f, 4.051625782e-03f, 4.054940875e-03f, 4.058248796e-03f, 4.061549541e-03f, 4.064843105e-03f, 4.068129481e-03f, 4.071408666e-03f, 4.074680652e-03f, 4.077945436e-03f,
+4.081203012e-03f, 4.084453374e-03f, 4.087696518e-03f, 4.090932438e-03f, 4.094161128e-03f, 4.097382584e-03f, 4.100596801e-03f, 4.103803772e-03f, 4.107003494e-03f, 4.110195960e-03f,
+4.113381167e-03f, 4.116559107e-03f, 4.119729777e-03f, 4.122893172e-03f, 4.126049285e-03f, 4.129198113e-03f, 4.132339650e-03f, 4.135473890e-03f, 4.138600830e-03f, 4.141720463e-03f,
+4.144832785e-03f, 4.147937791e-03f, 4.151035476e-03f, 4.154125834e-03f, 4.157208861e-03f, 4.160284552e-03f, 4.163352902e-03f, 4.166413906e-03f, 4.169467559e-03f, 4.172513856e-03f,
+4.175552793e-03f, 4.178584363e-03f, 4.181608563e-03f, 4.184625388e-03f, 4.187634832e-03f, 4.190636892e-03f, 4.193631561e-03f, 4.196618836e-03f, 4.199598711e-03f, 4.202571182e-03f,
+4.205536243e-03f, 4.208493891e-03f, 4.211444121e-03f, 4.214386926e-03f, 4.217322304e-03f, 4.220250250e-03f, 4.223170757e-03f, 4.226083823e-03f, 4.228989442e-03f, 4.231887609e-03f,
+4.234778321e-03f, 4.237661571e-03f, 4.240537357e-03f, 4.243405672e-03f, 4.246266513e-03f, 4.249119875e-03f, 4.251965753e-03f, 4.254804143e-03f, 4.257635041e-03f, 4.260458441e-03f,
+4.263274339e-03f, 4.266082731e-03f, 4.268883613e-03f, 4.271676979e-03f, 4.274462825e-03f, 4.277241148e-03f, 4.280011942e-03f, 4.282775203e-03f, 4.285530926e-03f, 4.288279108e-03f,
+4.291019744e-03f, 4.293752829e-03f, 4.296478360e-03f, 4.299196331e-03f, 4.301906739e-03f, 4.304609579e-03f, 4.307304847e-03f, 4.309992538e-03f, 4.312672649e-03f, 4.315345175e-03f,
+4.318010112e-03f, 4.320667456e-03f, 4.323317202e-03f, 4.325959346e-03f, 4.328593884e-03f, 4.331220812e-03f, 4.333840126e-03f, 4.336451821e-03f, 4.339055893e-03f, 4.341652339e-03f,
+4.344241154e-03f, 4.346822334e-03f, 4.349395875e-03f, 4.351961773e-03f, 4.354520024e-03f, 4.357070624e-03f, 4.359613568e-03f, 4.362148853e-03f, 4.364676475e-03f, 4.367196429e-03f,
+4.369708713e-03f, 4.372213321e-03f, 4.374710250e-03f, 4.377199496e-03f, 4.379681056e-03f, 4.382154924e-03f, 4.384621097e-03f, 4.387079572e-03f, 4.389530344e-03f, 4.391973410e-03f,
+4.394408766e-03f, 4.396836407e-03f, 4.399256331e-03f, 4.401668533e-03f, 4.404073010e-03f, 4.406469757e-03f, 4.408858771e-03f, 4.411240049e-03f, 4.413613586e-03f, 4.415979379e-03f,
+4.418337424e-03f, 4.420687718e-03f, 4.423030256e-03f, 4.425365036e-03f, 4.427692052e-03f, 4.430011303e-03f, 4.432322784e-03f, 4.434626491e-03f, 4.436922421e-03f, 4.439210571e-03f,
+4.441490936e-03f, 4.443763514e-03f, 4.446028300e-03f, 4.448285292e-03f, 4.450534485e-03f, 4.452775876e-03f, 4.455009462e-03f, 4.457235239e-03f, 4.459453204e-03f, 4.461663353e-03f,
+4.463865683e-03f, 4.466060191e-03f, 4.468246872e-03f, 4.470425725e-03f, 4.472596744e-03f, 4.474759927e-03f, 4.476915271e-03f, 4.479062772e-03f, 4.481202427e-03f, 4.483334233e-03f,
+4.485458186e-03f, 4.487574282e-03f, 4.489682520e-03f, 4.491782895e-03f, 4.493875404e-03f, 4.495960044e-03f, 4.498036812e-03f, 4.500105705e-03f, 4.502166719e-03f, 4.504219851e-03f,
+4.506265099e-03f, 4.508302458e-03f, 4.510331926e-03f, 4.512353500e-03f, 4.514367176e-03f, 4.516372952e-03f, 4.518370824e-03f, 4.520360789e-03f, 4.522342845e-03f, 4.524316988e-03f,
+4.526283216e-03f, 4.528241524e-03f, 4.530191911e-03f, 4.532134373e-03f, 4.534068908e-03f, 4.535995512e-03f, 4.537914182e-03f, 4.539824915e-03f, 4.541727710e-03f, 4.543622562e-03f,
+4.545509468e-03f, 4.547388427e-03f, 4.549259435e-03f, 4.551122489e-03f, 4.552977586e-03f, 4.554824724e-03f, 4.556663900e-03f, 4.558495111e-03f, 4.560318354e-03f, 4.562133627e-03f,
+4.563940926e-03f, 4.565740250e-03f, 4.567531594e-03f, 4.569314958e-03f, 4.571090337e-03f, 4.572857729e-03f, 4.574617132e-03f, 4.576368543e-03f, 4.578111959e-03f, 4.579847378e-03f,
+4.581574797e-03f, 4.583294214e-03f, 4.585005625e-03f, 4.586709029e-03f, 4.588404423e-03f, 4.590091804e-03f, 4.591771169e-03f, 4.593442517e-03f, 4.595105845e-03f, 4.596761150e-03f,
+4.598408430e-03f, 4.600047682e-03f, 4.601678904e-03f, 4.603302093e-03f, 4.604917248e-03f, 4.606524365e-03f, 4.608123443e-03f, 4.609714479e-03f, 4.611297470e-03f, 4.612872415e-03f,
+4.614439310e-03f, 4.615998154e-03f, 4.617548945e-03f, 4.619091679e-03f, 4.620626355e-03f, 4.622152971e-03f, 4.623671524e-03f, 4.625182012e-03f, 4.626684434e-03f, 4.628178785e-03f,
+4.629665065e-03f, 4.631143272e-03f, 4.632613403e-03f, 4.634075455e-03f, 4.635529428e-03f, 4.636975318e-03f, 4.638413124e-03f, 4.639842844e-03f, 4.641264475e-03f, 4.642678015e-03f,
+4.644083463e-03f, 4.645480817e-03f, 4.646870073e-03f, 4.648251232e-03f, 4.649624289e-03f, 4.650989244e-03f, 4.652346094e-03f, 4.653694838e-03f, 4.655035474e-03f, 4.656367999e-03f,
+4.657692412e-03f, 4.659008710e-03f, 4.660316893e-03f, 4.661616958e-03f, 4.662908903e-03f, 4.664192727e-03f, 4.665468427e-03f, 4.666736002e-03f, 4.667995451e-03f, 4.669246770e-03f,
+4.670489959e-03f, 4.671725016e-03f, 4.672951939e-03f, 4.674170726e-03f, 4.675381376e-03f, 4.676583886e-03f, 4.677778256e-03f, 4.678964484e-03f, 4.680142567e-03f, 4.681312505e-03f,
+4.682474296e-03f, 4.683627937e-03f, 4.684773428e-03f, 4.685910767e-03f, 4.687039953e-03f, 4.688160983e-03f, 4.689273856e-03f, 4.690378572e-03f, 4.691475127e-03f, 4.692563521e-03f,
+4.693643753e-03f, 4.694715820e-03f, 4.695779722e-03f, 4.696835457e-03f, 4.697883023e-03f, 4.698922419e-03f, 4.699953644e-03f, 4.700976696e-03f, 4.701991574e-03f, 4.702998277e-03f,
+4.703996803e-03f, 4.704987152e-03f, 4.705969320e-03f, 4.706943309e-03f, 4.707909115e-03f, 4.708866738e-03f, 4.709816177e-03f, 4.710757430e-03f, 4.711690496e-03f, 4.712615374e-03f,
+4.713532062e-03f, 4.714440561e-03f, 4.715340867e-03f, 4.716232981e-03f, 4.717116901e-03f, 4.717992626e-03f, 4.718860155e-03f, 4.719719486e-03f, 4.720570619e-03f, 4.721413553e-03f,
+4.722248286e-03f, 4.723074818e-03f, 4.723893147e-03f, 4.724703273e-03f, 4.725505195e-03f, 4.726298911e-03f, 4.727084420e-03f, 4.727861722e-03f, 4.728630816e-03f, 4.729391700e-03f,
+4.730144374e-03f, 4.730888837e-03f, 4.731625089e-03f, 4.732353127e-03f, 4.733072952e-03f, 4.733784562e-03f, 4.734487957e-03f, 4.735183135e-03f, 4.735870097e-03f, 4.736548841e-03f,
+4.737219367e-03f, 4.737881673e-03f, 4.738535760e-03f, 4.739181626e-03f, 4.739819270e-03f, 4.740448692e-03f, 4.741069892e-03f, 4.741682868e-03f, 4.742287619e-03f, 4.742884147e-03f,
+4.743472448e-03f, 4.744052524e-03f, 4.744624373e-03f, 4.745187996e-03f, 4.745743390e-03f, 4.746290556e-03f, 4.746829493e-03f, 4.747360201e-03f, 4.747882679e-03f, 4.748396927e-03f,
+4.748902944e-03f, 4.749400730e-03f, 4.749890284e-03f, 4.750371606e-03f, 4.750844695e-03f, 4.751309551e-03f, 4.751766173e-03f, 4.752214562e-03f, 4.752654717e-03f, 4.753086637e-03f,
+4.753510323e-03f, 4.753925773e-03f, 4.754332988e-03f, 4.754731966e-03f, 4.755122709e-03f, 4.755505216e-03f, 4.755879486e-03f, 4.756245519e-03f, 4.756603315e-03f, 4.756952873e-03f,
+4.757294195e-03f, 4.757627278e-03f, 4.757952124e-03f, 4.758268732e-03f, 4.758577102e-03f, 4.758877233e-03f, 4.759169126e-03f, 4.759452781e-03f, 4.759728197e-03f, 4.759995375e-03f,
+4.760254314e-03f, 4.760505014e-03f, 4.760747475e-03f, 4.760981698e-03f, 4.761207682e-03f, 4.761425427e-03f, 4.761634934e-03f, 4.761836202e-03f, 4.762029231e-03f, 4.762214022e-03f,
+4.762390575e-03f, 4.762558889e-03f, 4.762718965e-03f, 4.762870803e-03f, 4.763014403e-03f, 4.763149765e-03f, 4.763276890e-03f, 4.763395777e-03f, 4.763506427e-03f, 4.763608841e-03f,
+4.763703017e-03f, 4.763788957e-03f, 4.763866660e-03f, 4.763936128e-03f, 4.763997360e-03f, 4.764050357e-03f, 4.764095118e-03f, 4.764131645e-03f, 4.764159937e-03f, 4.764179995e-03f,
+4.764191820e-03f, 4.764195411e-03f, 4.764190770e-03f, 4.764177896e-03f, 4.764156790e-03f, 4.764127452e-03f, 4.764089884e-03f, 4.764044084e-03f, 4.763990055e-03f, 4.763927795e-03f,
+4.763857307e-03f, 4.763778590e-03f, 4.763691645e-03f, 4.763596472e-03f, 4.763493073e-03f, 4.763381447e-03f, 4.763261595e-03f, 4.763133518e-03f, 4.762997216e-03f, 4.762852691e-03f,
+4.762699942e-03f, 4.762538971e-03f, 4.762369778e-03f, 4.762192364e-03f, 4.762006729e-03f, 4.761812875e-03f, 4.761610801e-03f, 4.761400510e-03f, 4.761182001e-03f, 4.760955275e-03f,
+4.760720333e-03f, 4.760477176e-03f, 4.760225805e-03f, 4.759966221e-03f, 4.759698424e-03f, 4.759422415e-03f, 4.759138195e-03f, 4.758845766e-03f, 4.758545127e-03f, 4.758236281e-03f,
+4.757919227e-03f, 4.757593967e-03f, 4.757260502e-03f, 4.756918833e-03f, 4.756568961e-03f, 4.756210886e-03f, 4.755844610e-03f, 4.755470134e-03f, 4.755087459e-03f, 4.754696585e-03f,
+4.754297515e-03f, 4.753890249e-03f, 4.753474788e-03f, 4.753051134e-03f, 4.752619287e-03f, 4.752179248e-03f, 4.751731020e-03f, 4.751274602e-03f, 4.750809997e-03f, 4.750337205e-03f,
+4.749856228e-03f, 4.749367067e-03f, 4.748869722e-03f, 4.748364196e-03f, 4.747850490e-03f, 4.747328605e-03f, 4.746798542e-03f, 4.746260302e-03f, 4.745713887e-03f, 4.745159299e-03f,
+4.744596538e-03f, 4.744025607e-03f, 4.743446505e-03f, 4.742859236e-03f, 4.742263799e-03f, 4.741660197e-03f, 4.741048432e-03f, 4.740428504e-03f, 4.739800415e-03f, 4.739164166e-03f,
+4.738519759e-03f, 4.737867196e-03f, 4.737206478e-03f, 4.736537607e-03f, 4.735860584e-03f, 4.735175410e-03f, 4.734482088e-03f, 4.733780619e-03f, 4.733071004e-03f, 4.732353246e-03f,
+4.731627345e-03f, 4.730893304e-03f, 4.730151124e-03f, 4.729400806e-03f, 4.728642353e-03f, 4.727875767e-03f, 4.727101048e-03f, 4.726318200e-03f, 4.725527222e-03f, 4.724728118e-03f,
+4.723920889e-03f, 4.723105537e-03f, 4.722282063e-03f, 4.721450470e-03f, 4.720610759e-03f, 4.719762932e-03f, 4.718906991e-03f, 4.718042938e-03f, 4.717170775e-03f, 4.716290503e-03f,
+4.715402125e-03f, 4.714505643e-03f, 4.713601058e-03f, 4.712688373e-03f, 4.711767589e-03f, 4.710838708e-03f, 4.709901733e-03f, 4.708956665e-03f, 4.708003507e-03f, 4.707042260e-03f,
+4.706072927e-03f, 4.705095510e-03f, 4.704110010e-03f, 4.703116430e-03f, 4.702114773e-03f, 4.701105039e-03f, 4.700087231e-03f, 4.699061352e-03f, 4.698027404e-03f, 4.696985388e-03f,
+4.695935308e-03f, 4.694877164e-03f, 4.693810960e-03f, 4.692736697e-03f, 4.691654379e-03f, 4.690564006e-03f, 4.689465582e-03f, 4.688359109e-03f, 4.687244589e-03f, 4.686122024e-03f,
+4.684991417e-03f, 4.683852770e-03f, 4.682706085e-03f, 4.681551366e-03f, 4.680388613e-03f, 4.679217830e-03f, 4.678039019e-03f, 4.676852183e-03f, 4.675657323e-03f, 4.674454443e-03f,
+4.673243545e-03f, 4.672024631e-03f, 4.670797704e-03f, 4.669562766e-03f, 4.668319820e-03f, 4.667068869e-03f, 4.665809915e-03f, 4.664542960e-03f, 4.663268007e-03f, 4.661985059e-03f,
+4.660694119e-03f, 4.659395188e-03f, 4.658088270e-03f, 4.656773368e-03f, 4.655450483e-03f, 4.654119619e-03f, 4.652780778e-03f, 4.651433963e-03f, 4.650079177e-03f, 4.648716423e-03f,
+4.647345703e-03f, 4.645967020e-03f, 4.644580376e-03f, 4.643185775e-03f, 4.641783220e-03f, 4.640372712e-03f, 4.638954256e-03f, 4.637527854e-03f, 4.636093508e-03f, 4.634651222e-03f,
+4.633200998e-03f, 4.631742840e-03f, 4.630276750e-03f, 4.628802731e-03f, 4.627320786e-03f, 4.625830919e-03f, 4.624333131e-03f, 4.622827427e-03f, 4.621313809e-03f, 4.619792279e-03f,
+4.618262842e-03f, 4.616725500e-03f, 4.615180256e-03f, 4.613627113e-03f, 4.612066075e-03f, 4.610497144e-03f, 4.608920323e-03f, 4.607335616e-03f, 4.605743026e-03f, 4.604142556e-03f,
+4.602534208e-03f, 4.600917987e-03f, 4.599293895e-03f, 4.597661936e-03f, 4.596022113e-03f, 4.594374428e-03f, 4.592718886e-03f, 4.591055489e-03f, 4.589384241e-03f, 4.587705145e-03f,
+4.586018205e-03f, 4.584323423e-03f, 4.582620803e-03f, 4.580910348e-03f, 4.579192062e-03f, 4.577465947e-03f, 4.575732008e-03f, 4.573990248e-03f, 4.572240670e-03f, 4.570483278e-03f,
+4.568718074e-03f, 4.566945063e-03f, 4.565164247e-03f, 4.563375631e-03f, 4.561579218e-03f, 4.559775011e-03f, 4.557963014e-03f, 4.556143230e-03f, 4.554315663e-03f, 4.552480316e-03f,
+4.550637193e-03f, 4.548786297e-03f, 4.546927633e-03f, 4.545061203e-03f, 4.543187012e-03f, 4.541305063e-03f, 4.539415359e-03f, 4.537517904e-03f, 4.535612702e-03f, 4.533699756e-03f,
+4.531779071e-03f, 4.529850650e-03f, 4.527914496e-03f, 4.525970614e-03f, 4.524019007e-03f, 4.522059678e-03f, 4.520092632e-03f, 4.518117873e-03f, 4.516135404e-03f, 4.514145229e-03f,
+4.512147351e-03f, 4.510141776e-03f, 4.508128505e-03f, 4.506107544e-03f, 4.504078897e-03f, 4.502042566e-03f, 4.499998557e-03f, 4.497946872e-03f, 4.495887516e-03f, 4.493820494e-03f,
+4.491745807e-03f, 4.489663462e-03f, 4.487573461e-03f, 4.485475809e-03f, 4.483370510e-03f, 4.481257567e-03f, 4.479136985e-03f, 4.477008768e-03f, 4.474872919e-03f, 4.472729444e-03f,
+4.470578345e-03f, 4.468419627e-03f, 4.466253295e-03f, 4.464079352e-03f, 4.461897803e-03f, 4.459708650e-03f, 4.457511900e-03f, 4.455307556e-03f, 4.453095621e-03f, 4.450876101e-03f,
+4.448649000e-03f, 4.446414321e-03f, 4.444172069e-03f, 4.441922249e-03f, 4.439664863e-03f, 4.437399918e-03f, 4.435127417e-03f, 4.432847363e-03f, 4.430559763e-03f, 4.428264620e-03f,
+4.425961937e-03f, 4.423651721e-03f, 4.421333975e-03f, 4.419008702e-03f, 4.416675909e-03f, 4.414335599e-03f, 4.411987777e-03f, 4.409632446e-03f, 4.407269612e-03f, 4.404899280e-03f,
+4.402521452e-03f, 4.400136134e-03f, 4.397743331e-03f, 4.395343047e-03f, 4.392935286e-03f, 4.390520053e-03f, 4.388097352e-03f, 4.385667189e-03f, 4.383229567e-03f, 4.380784491e-03f,
+4.378331966e-03f, 4.375871996e-03f, 4.373404587e-03f, 4.370929742e-03f, 4.368447466e-03f, 4.365957764e-03f, 4.363460641e-03f, 4.360956101e-03f, 4.358444150e-03f, 4.355924790e-03f,
+4.353398029e-03f, 4.350863869e-03f, 4.348322316e-03f, 4.345773375e-03f, 4.343217051e-03f, 4.340653347e-03f, 4.338082270e-03f, 4.335503823e-03f, 4.332918012e-03f, 4.330324842e-03f,
+4.327724316e-03f, 4.325116441e-03f, 4.322501221e-03f, 4.319878661e-03f, 4.317248766e-03f, 4.314611540e-03f, 4.311966989e-03f, 4.309315118e-03f, 4.306655931e-03f, 4.303989433e-03f,
+4.301315630e-03f, 4.298634527e-03f, 4.295946128e-03f, 4.293250438e-03f, 4.290547462e-03f, 4.287837207e-03f, 4.285119675e-03f, 4.282394874e-03f, 4.279662807e-03f, 4.276923479e-03f,
+4.274176897e-03f, 4.271423064e-03f, 4.268661986e-03f, 4.265893669e-03f, 4.263118117e-03f, 4.260335335e-03f, 4.257545329e-03f, 4.254748104e-03f, 4.251943665e-03f, 4.249132017e-03f,
+4.246313165e-03f, 4.243487115e-03f, 4.240653872e-03f, 4.237813441e-03f, 4.234965827e-03f, 4.232111037e-03f, 4.229249074e-03f, 4.226379944e-03f, 4.223503653e-03f, 4.220620206e-03f,
+4.217729608e-03f, 4.214831865e-03f, 4.211926981e-03f, 4.209014963e-03f, 4.206095816e-03f, 4.203169545e-03f, 4.200236155e-03f, 4.197295652e-03f, 4.194348042e-03f, 4.191393329e-03f,
+4.188431520e-03f, 4.185462619e-03f, 4.182486633e-03f, 4.179503566e-03f, 4.176513425e-03f, 4.173516214e-03f, 4.170511940e-03f, 4.167500607e-03f, 4.164482222e-03f, 4.161456790e-03f,
+4.158424316e-03f, 4.155384806e-03f, 4.152338266e-03f, 4.149284702e-03f, 4.146224118e-03f, 4.143156521e-03f, 4.140081916e-03f, 4.137000309e-03f, 4.133911705e-03f, 4.130816111e-03f,
+4.127713531e-03f, 4.124603973e-03f, 4.121487440e-03f, 4.118363940e-03f, 4.115233477e-03f, 4.112096058e-03f, 4.108951689e-03f, 4.105800374e-03f, 4.102642121e-03f, 4.099476934e-03f,
+4.096304820e-03f, 4.093125784e-03f, 4.089939832e-03f, 4.086746970e-03f, 4.083547204e-03f, 4.080340540e-03f, 4.077126984e-03f, 4.073906541e-03f, 4.070679217e-03f, 4.067445019e-03f,
+4.064203952e-03f, 4.060956023e-03f, 4.057701236e-03f, 4.054439599e-03f, 4.051171117e-03f, 4.047895796e-03f, 4.044613642e-03f, 4.041324661e-03f, 4.038028860e-03f, 4.034726243e-03f,
+4.031416818e-03f, 4.028100590e-03f, 4.024777566e-03f, 4.021447750e-03f, 4.018111151e-03f, 4.014767773e-03f, 4.011417622e-03f, 4.008060706e-03f, 4.004697029e-03f, 4.001326599e-03f,
+3.997949421e-03f, 3.994565501e-03f, 3.991174846e-03f, 3.987777462e-03f, 3.984373355e-03f, 3.980962531e-03f, 3.977544997e-03f, 3.974120758e-03f, 3.970689822e-03f, 3.967252193e-03f,
+3.963807879e-03f, 3.960356886e-03f, 3.956899220e-03f, 3.953434887e-03f, 3.949963894e-03f, 3.946486247e-03f, 3.943001953e-03f, 3.939511017e-03f, 3.936013446e-03f, 3.932509247e-03f,
+3.928998425e-03f, 3.925480988e-03f, 3.921956941e-03f, 3.918426291e-03f, 3.914889045e-03f, 3.911345209e-03f, 3.907794789e-03f, 3.904237792e-03f, 3.900674224e-03f, 3.897104092e-03f,
+3.893527403e-03f, 3.889944162e-03f, 3.886354376e-03f, 3.882758053e-03f, 3.879155197e-03f, 3.875545817e-03f, 3.871929918e-03f, 3.868307507e-03f, 3.864678590e-03f, 3.861043175e-03f,
+3.857401268e-03f, 3.853752875e-03f, 3.850098003e-03f, 3.846436659e-03f, 3.842768850e-03f, 3.839094581e-03f, 3.835413860e-03f, 3.831726693e-03f, 3.828033088e-03f, 3.824333050e-03f,
+3.820626586e-03f, 3.816913704e-03f, 3.813194410e-03f, 3.809468710e-03f, 3.805736612e-03f, 3.801998122e-03f, 3.798253247e-03f, 3.794501993e-03f, 3.790744368e-03f, 3.786980379e-03f,
+3.783210032e-03f, 3.779433333e-03f, 3.775650291e-03f, 3.771860911e-03f, 3.768065201e-03f, 3.764263167e-03f, 3.760454817e-03f, 3.756640157e-03f, 3.752819194e-03f, 3.748991935e-03f,
+3.745158386e-03f, 3.741318556e-03f, 3.737472451e-03f, 3.733620077e-03f, 3.729761442e-03f, 3.725896553e-03f, 3.722025417e-03f, 3.718148040e-03f, 3.714264430e-03f, 3.710374594e-03f,
+3.706478539e-03f, 3.702576271e-03f, 3.698667798e-03f, 3.694753127e-03f, 3.690832266e-03f, 3.686905220e-03f, 3.682971998e-03f, 3.679032605e-03f, 3.675087051e-03f, 3.671135340e-03f,
+3.667177482e-03f, 3.663213482e-03f, 3.659243348e-03f, 3.655267087e-03f, 3.651284707e-03f, 3.647296214e-03f, 3.643301615e-03f, 3.639300919e-03f, 3.635294131e-03f, 3.631281260e-03f,
+3.627262313e-03f, 3.623237296e-03f, 3.619206217e-03f, 3.615169084e-03f, 3.611125903e-03f, 3.607076683e-03f, 3.603021429e-03f, 3.598960150e-03f, 3.594892852e-03f, 3.590819544e-03f,
+3.586740232e-03f, 3.582654924e-03f, 3.578563627e-03f, 3.574466349e-03f, 3.570363097e-03f, 3.566253878e-03f, 3.562138699e-03f, 3.558017569e-03f, 3.553890494e-03f, 3.549757482e-03f,
+3.545618541e-03f, 3.541473677e-03f, 3.537322899e-03f, 3.533166213e-03f, 3.529003628e-03f, 3.524835150e-03f, 3.520660788e-03f, 3.516480548e-03f, 3.512294438e-03f, 3.508102466e-03f,
+3.503904640e-03f, 3.499700966e-03f, 3.495491453e-03f, 3.491276107e-03f, 3.487054938e-03f, 3.482827951e-03f, 3.478595155e-03f, 3.474356557e-03f, 3.470112165e-03f, 3.465861987e-03f,
+3.461606029e-03f, 3.457344301e-03f, 3.453076809e-03f, 3.448803561e-03f, 3.444524565e-03f, 3.440239828e-03f, 3.435949359e-03f, 3.431653164e-03f, 3.427351252e-03f, 3.423043630e-03f,
+3.418730306e-03f, 3.414411288e-03f, 3.410086583e-03f, 3.405756200e-03f, 3.401420145e-03f, 3.397078428e-03f, 3.392731055e-03f, 3.388378034e-03f, 3.384019373e-03f, 3.379655080e-03f,
+3.375285163e-03f, 3.370909630e-03f, 3.366528488e-03f, 3.362141746e-03f, 3.357749410e-03f, 3.353351490e-03f, 3.348947992e-03f, 3.344538926e-03f, 3.340124298e-03f, 3.335704116e-03f,
+3.331278389e-03f, 3.326847124e-03f, 3.322410330e-03f, 3.317968014e-03f, 3.313520185e-03f, 3.309066849e-03f, 3.304608016e-03f, 3.300143693e-03f, 3.295673888e-03f, 3.291198609e-03f,
+3.286717864e-03f, 3.282231661e-03f, 3.277740009e-03f, 3.273242914e-03f, 3.268740386e-03f, 3.264232432e-03f, 3.259719061e-03f, 3.255200280e-03f, 3.250676097e-03f, 3.246146521e-03f,
+3.241611560e-03f, 3.237071222e-03f, 3.232525514e-03f, 3.227974445e-03f, 3.223418024e-03f, 3.218856258e-03f, 3.214289155e-03f, 3.209716724e-03f, 3.205138972e-03f, 3.200555909e-03f,
+3.195967541e-03f, 3.191373878e-03f, 3.186774928e-03f, 3.182170698e-03f, 3.177561197e-03f, 3.172946433e-03f, 3.168326414e-03f, 3.163701149e-03f, 3.159070646e-03f, 3.154434914e-03f,
+3.149793959e-03f, 3.145147791e-03f, 3.140496419e-03f, 3.135839849e-03f, 3.131178091e-03f, 3.126511153e-03f, 3.121839043e-03f, 3.117161770e-03f, 3.112479342e-03f, 3.107791767e-03f,
+3.103099053e-03f, 3.098401209e-03f, 3.093698244e-03f, 3.088990165e-03f, 3.084276982e-03f, 3.079558702e-03f, 3.074835334e-03f, 3.070106886e-03f, 3.065373367e-03f, 3.060634785e-03f,
+3.055891148e-03f, 3.051142466e-03f, 3.046388746e-03f, 3.041629997e-03f, 3.036866228e-03f, 3.032097446e-03f, 3.027323661e-03f, 3.022544881e-03f, 3.017761114e-03f, 3.012972369e-03f,
+3.008178655e-03f, 3.003379979e-03f, 2.998576351e-03f, 2.993767780e-03f, 2.988954272e-03f, 2.984135838e-03f, 2.979312486e-03f, 2.974484224e-03f, 2.969651061e-03f, 2.964813005e-03f,
+2.959970066e-03f, 2.955122251e-03f, 2.950269569e-03f, 2.945412030e-03f, 2.940549641e-03f, 2.935682411e-03f, 2.930810350e-03f, 2.925933465e-03f, 2.921051765e-03f, 2.916165259e-03f,
+2.911273955e-03f, 2.906377863e-03f, 2.901476991e-03f, 2.896571347e-03f, 2.891660941e-03f, 2.886745781e-03f, 2.881825875e-03f, 2.876901234e-03f, 2.871971864e-03f, 2.867037776e-03f,
+2.862098977e-03f, 2.857155478e-03f, 2.852207285e-03f, 2.847254409e-03f, 2.842296857e-03f, 2.837334640e-03f, 2.832367764e-03f, 2.827396241e-03f, 2.822420077e-03f, 2.817439283e-03f,
+2.812453866e-03f, 2.807463836e-03f, 2.802469201e-03f, 2.797469971e-03f, 2.792466155e-03f, 2.787457760e-03f, 2.782444796e-03f, 2.777427273e-03f, 2.772405198e-03f, 2.767378580e-03f,
+2.762347430e-03f, 2.757311755e-03f, 2.752271564e-03f, 2.747226867e-03f, 2.742177673e-03f, 2.737123989e-03f, 2.732065826e-03f, 2.727003192e-03f, 2.721936096e-03f, 2.716864547e-03f,
+2.711788555e-03f, 2.706708127e-03f, 2.701623274e-03f, 2.696534004e-03f, 2.691440326e-03f, 2.686342249e-03f, 2.681239783e-03f, 2.676132936e-03f, 2.671021717e-03f, 2.665906135e-03f,
+2.660786200e-03f, 2.655661920e-03f, 2.650533304e-03f, 2.645400363e-03f, 2.640263103e-03f, 2.635121536e-03f, 2.629975670e-03f, 2.624825513e-03f, 2.619671076e-03f, 2.614512367e-03f,
+2.609349395e-03f, 2.604182170e-03f, 2.599010700e-03f, 2.593834995e-03f, 2.588655064e-03f, 2.583470916e-03f, 2.578282560e-03f, 2.573090006e-03f, 2.567893262e-03f, 2.562692338e-03f,
+2.557487243e-03f, 2.552277986e-03f, 2.547064577e-03f, 2.541847024e-03f, 2.536625337e-03f, 2.531399525e-03f, 2.526169597e-03f, 2.520935563e-03f, 2.515697432e-03f, 2.510455212e-03f,
+2.505208914e-03f, 2.499958547e-03f, 2.494704119e-03f, 2.489445640e-03f, 2.484183120e-03f, 2.478916568e-03f, 2.473645992e-03f, 2.468371403e-03f, 2.463092810e-03f, 2.457810221e-03f,
+2.452523647e-03f, 2.447233096e-03f, 2.441938578e-03f, 2.436640103e-03f, 2.431337679e-03f, 2.426031316e-03f, 2.420721023e-03f, 2.415406810e-03f, 2.410088687e-03f, 2.404766661e-03f,
+2.399440744e-03f, 2.394110944e-03f, 2.388777271e-03f, 2.383439733e-03f, 2.378098342e-03f, 2.372753105e-03f, 2.367404032e-03f, 2.362051133e-03f, 2.356694418e-03f, 2.351333895e-03f,
+2.345969574e-03f, 2.340601465e-03f, 2.335229577e-03f, 2.329853920e-03f, 2.324474502e-03f, 2.319091334e-03f, 2.313704425e-03f, 2.308313784e-03f, 2.302919422e-03f, 2.297521346e-03f,
+2.292119568e-03f, 2.286714096e-03f, 2.281304941e-03f, 2.275892110e-03f, 2.270475615e-03f, 2.265055465e-03f, 2.259631668e-03f, 2.254204236e-03f, 2.248773177e-03f, 2.243338500e-03f,
+2.237900216e-03f, 2.232458334e-03f, 2.227012864e-03f, 2.221563814e-03f, 2.216111196e-03f, 2.210655018e-03f, 2.205195290e-03f, 2.199732021e-03f, 2.194265221e-03f, 2.188794901e-03f,
+2.183321069e-03f, 2.177843735e-03f, 2.172362908e-03f, 2.166878599e-03f, 2.161390817e-03f, 2.155899572e-03f, 2.150404873e-03f, 2.144906730e-03f, 2.139405153e-03f, 2.133900151e-03f,
+2.128391734e-03f, 2.122879911e-03f, 2.117364694e-03f, 2.111846090e-03f, 2.106324110e-03f, 2.100798763e-03f, 2.095270060e-03f, 2.089738010e-03f, 2.084202622e-03f, 2.078663907e-03f,
+2.073121874e-03f, 2.067576533e-03f, 2.062027894e-03f, 2.056475966e-03f, 2.050920759e-03f, 2.045362283e-03f, 2.039800547e-03f, 2.034235562e-03f, 2.028667338e-03f, 2.023095883e-03f,
+2.017521208e-03f, 2.011943323e-03f, 2.006362237e-03f, 2.000777960e-03f, 1.995190502e-03f, 1.989599874e-03f, 1.984006083e-03f, 1.978409141e-03f, 1.972809058e-03f, 1.967205842e-03f,
+1.961599505e-03f, 1.955990055e-03f, 1.950377503e-03f, 1.944761859e-03f, 1.939143131e-03f, 1.933521331e-03f, 1.927896469e-03f, 1.922268553e-03f, 1.916637594e-03f, 1.911003601e-03f,
+1.905366585e-03f, 1.899726556e-03f, 1.894083523e-03f, 1.888437496e-03f, 1.882788486e-03f, 1.877136502e-03f, 1.871481553e-03f, 1.865823651e-03f, 1.860162804e-03f, 1.854499024e-03f,
+1.848832319e-03f, 1.843162699e-03f, 1.837490175e-03f, 1.831814757e-03f, 1.826136454e-03f, 1.820455277e-03f, 1.814771235e-03f, 1.809084339e-03f, 1.803394598e-03f, 1.797702022e-03f,
+1.792006621e-03f, 1.786308406e-03f, 1.780607386e-03f, 1.774903571e-03f, 1.769196972e-03f, 1.763487597e-03f, 1.757775459e-03f, 1.752060565e-03f, 1.746342926e-03f, 1.740622553e-03f,
+1.734899455e-03f, 1.729173643e-03f, 1.723445126e-03f, 1.717713914e-03f, 1.711980018e-03f, 1.706243447e-03f, 1.700504212e-03f, 1.694762322e-03f, 1.689017788e-03f, 1.683270619e-03f,
+1.677520827e-03f, 1.671768420e-03f, 1.666013409e-03f, 1.660255804e-03f, 1.654495615e-03f, 1.648732852e-03f, 1.642967525e-03f, 1.637199645e-03f, 1.631429221e-03f, 1.625656264e-03f,
+1.619880783e-03f, 1.614102789e-03f, 1.608322291e-03f, 1.602539301e-03f, 1.596753827e-03f, 1.590965881e-03f, 1.585175472e-03f, 1.579382610e-03f, 1.573587306e-03f, 1.567789570e-03f,
+1.561989411e-03f, 1.556186841e-03f, 1.550381868e-03f, 1.544574504e-03f, 1.538764758e-03f, 1.532952641e-03f, 1.527138163e-03f, 1.521321333e-03f, 1.515502162e-03f, 1.509680661e-03f,
+1.503856839e-03f, 1.498030707e-03f, 1.492202274e-03f, 1.486371552e-03f, 1.480538549e-03f, 1.474703277e-03f, 1.468865746e-03f, 1.463025965e-03f, 1.457183945e-03f, 1.451339696e-03f,
+1.445493229e-03f, 1.439644553e-03f, 1.433793679e-03f, 1.427940617e-03f, 1.422085377e-03f, 1.416227970e-03f, 1.410368405e-03f, 1.404506693e-03f, 1.398642845e-03f, 1.392776870e-03f,
+1.386908778e-03f, 1.381038580e-03f, 1.375166287e-03f, 1.369291908e-03f, 1.363415453e-03f, 1.357536934e-03f, 1.351656359e-03f, 1.345773740e-03f, 1.339889087e-03f, 1.334002409e-03f,
+1.328113718e-03f, 1.322223023e-03f, 1.316330335e-03f, 1.310435665e-03f, 1.304539021e-03f, 1.298640415e-03f, 1.292739857e-03f, 1.286837358e-03f, 1.280932927e-03f, 1.275026574e-03f,
+1.269118311e-03f, 1.263208147e-03f, 1.257296093e-03f, 1.251382159e-03f, 1.245466355e-03f, 1.239548692e-03f, 1.233629180e-03f, 1.227707830e-03f, 1.221784651e-03f, 1.215859654e-03f,
+1.209932849e-03f, 1.204004247e-03f, 1.198073857e-03f, 1.192141691e-03f, 1.186207759e-03f, 1.180272071e-03f, 1.174334637e-03f, 1.168395467e-03f, 1.162454573e-03f, 1.156511964e-03f,
+1.150567651e-03f, 1.144621644e-03f, 1.138673953e-03f, 1.132724589e-03f, 1.126773562e-03f, 1.120820883e-03f, 1.114866562e-03f, 1.108910608e-03f, 1.102953034e-03f, 1.096993849e-03f,
+1.091033063e-03f, 1.085070686e-03f, 1.079106730e-03f, 1.073141205e-03f, 1.067174120e-03f, 1.061205487e-03f, 1.055235315e-03f, 1.049263616e-03f, 1.043290399e-03f, 1.037315675e-03f,
+1.031339454e-03f, 1.025361747e-03f, 1.019382564e-03f, 1.013401915e-03f, 1.007419812e-03f, 1.001436264e-03f, 9.954512810e-04f, 9.894648747e-04f, 9.834770549e-04f, 9.774878321e-04f,
+9.714972167e-04f, 9.655052191e-04f, 9.595118498e-04f, 9.535171191e-04f, 9.475210376e-04f, 9.415236155e-04f, 9.355248635e-04f, 9.295247918e-04f, 9.235234109e-04f, 9.175207313e-04f,
+9.115167634e-04f, 9.055115177e-04f, 8.995050045e-04f, 8.934972343e-04f, 8.874882177e-04f, 8.814779649e-04f, 8.754664865e-04f, 8.694537929e-04f, 8.634398945e-04f, 8.574248019e-04f,
+8.514085254e-04f, 8.453910756e-04f, 8.393724628e-04f, 8.333526976e-04f, 8.273317903e-04f, 8.213097515e-04f, 8.152865917e-04f, 8.092623212e-04f, 8.032369506e-04f, 7.972104903e-04f,
+7.911829508e-04f, 7.851543425e-04f, 7.791246760e-04f, 7.730939617e-04f, 7.670622100e-04f, 7.610294315e-04f, 7.549956366e-04f, 7.489608358e-04f, 7.429250396e-04f, 7.368882584e-04f,
+7.308505028e-04f, 7.248117833e-04f, 7.187721102e-04f, 7.127314941e-04f, 7.066899455e-04f, 7.006474748e-04f, 6.946040926e-04f, 6.885598094e-04f, 6.825146355e-04f, 6.764685816e-04f,
+6.704216581e-04f, 6.643738755e-04f, 6.583252443e-04f, 6.522757750e-04f, 6.462254781e-04f, 6.401743641e-04f, 6.341224434e-04f, 6.280697267e-04f, 6.220162243e-04f, 6.159619468e-04f,
+6.099069047e-04f, 6.038511084e-04f, 5.977945686e-04f, 5.917372956e-04f, 5.856793000e-04f, 5.796205924e-04f, 5.735611831e-04f, 5.675010827e-04f, 5.614403018e-04f, 5.553788507e-04f,
+5.493167401e-04f, 5.432539805e-04f, 5.371905823e-04f, 5.311265560e-04f, 5.250619123e-04f, 5.189966615e-04f, 5.129308142e-04f, 5.068643808e-04f, 5.007973721e-04f, 4.947297983e-04f,
+4.886616701e-04f, 4.825929979e-04f, 4.765237923e-04f, 4.704540638e-04f, 4.643838229e-04f, 4.583130801e-04f, 4.522418460e-04f, 4.461701310e-04f, 4.400979456e-04f, 4.340253005e-04f,
+4.279522060e-04f, 4.218786728e-04f, 4.158047112e-04f, 4.097303320e-04f, 4.036555455e-04f, 3.975803623e-04f, 3.915047928e-04f, 3.854288478e-04f, 3.793525375e-04f, 3.732758726e-04f,
+3.671988636e-04f, 3.611215210e-04f, 3.550438553e-04f, 3.489658771e-04f, 3.428875968e-04f, 3.368090249e-04f, 3.307301721e-04f, 3.246510488e-04f, 3.185716655e-04f, 3.124920327e-04f,
+3.064121610e-04f, 3.003320610e-04f, 2.942517430e-04f, 2.881712176e-04f, 2.820904954e-04f, 2.760095868e-04f, 2.699285024e-04f, 2.638472527e-04f, 2.577658482e-04f, 2.516842994e-04f,
+2.456026169e-04f, 2.395208112e-04f, 2.334388927e-04f, 2.273568720e-04f, 2.212747596e-04f, 2.151925661e-04f, 2.091103019e-04f, 2.030279775e-04f, 1.969456035e-04f, 1.908631904e-04f,
+1.847807487e-04f, 1.786982889e-04f, 1.726158215e-04f, 1.665333570e-04f, 1.604509060e-04f, 1.543684789e-04f, 1.482860863e-04f, 1.422037386e-04f, 1.361214464e-04f, 1.300392203e-04f,
+1.239570706e-04f, 1.178750079e-04f, 1.117930427e-04f, 1.057111856e-04f, 9.962944691e-05f, 9.354783729e-05f, 8.746636719e-05f, 8.138504712e-05f, 7.530388758e-05f, 6.922289907e-05f,
+6.314209209e-05f, 5.706147714e-05f, 5.098106472e-05f, 4.490086533e-05f, 3.882088946e-05f, 3.274114761e-05f, 2.666165027e-05f, 2.058240794e-05f, 1.450343111e-05f, 8.424730278e-06f,
+2.346315926e-06f, -3.731801452e-06f, -9.809611368e-06f, -1.588710333e-05f, -2.196426686e-05f, -2.804109146e-05f, -3.411756666e-05f, -4.019368196e-05f, -4.626942690e-05f, -5.234479097e-05f,
+-5.841976371e-05f, -6.449433464e-05f, -7.056849327e-05f, -7.664222914e-05f, -8.271553176e-05f, -8.878839067e-05f, -9.486079538e-05f, -1.009327354e-04f, -1.070042004e-04f, -1.130751797e-04f,
+-1.191456629e-04f, -1.252156397e-04f, -1.312850994e-04f, -1.373540317e-04f, -1.434224260e-04f, -1.494902720e-04f, -1.555575591e-04f, -1.616242769e-04f, -1.676904150e-04f, -1.737559628e-04f,
+-1.798209100e-04f, -1.858852461e-04f, -1.919489606e-04f, -1.980120431e-04f, -2.040744832e-04f, -2.101362703e-04f, -2.161973941e-04f, -2.222578442e-04f, -2.283176100e-04f, -2.343766811e-04f,
+-2.404350471e-04f, -2.464926976e-04f, -2.525496222e-04f, -2.586058103e-04f, -2.646612516e-04f, -2.707159356e-04f, -2.767698520e-04f, -2.828229903e-04f, -2.888753400e-04f, -2.949268908e-04f,
+-3.009776322e-04f, -3.070275538e-04f, -3.130766453e-04f, -3.191248961e-04f, -3.251722959e-04f, -3.312188343e-04f, -3.372645009e-04f, -3.433092852e-04f, -3.493531769e-04f, -3.553961655e-04f,
+-3.614382407e-04f, -3.674793920e-04f, -3.735196092e-04f, -3.795588817e-04f, -3.855971992e-04f, -3.916345513e-04f, -3.976709276e-04f, -4.037063177e-04f, -4.097407113e-04f, -4.157740980e-04f,
+-4.218064674e-04f, -4.278378091e-04f, -4.338681127e-04f, -4.398973679e-04f, -4.459255643e-04f, -4.519526916e-04f, -4.579787394e-04f, -4.640036973e-04f, -4.700275549e-04f, -4.760503020e-04f,
+-4.820719281e-04f, -4.880924230e-04f, -4.941117762e-04f, -5.001299774e-04f, -5.061470163e-04f, -5.121628825e-04f, -5.181775657e-04f, -5.241910556e-04f, -5.302033418e-04f, -5.362144139e-04f,
+-5.422242618e-04f, -5.482328750e-04f, -5.542402432e-04f, -5.602463561e-04f, -5.662512034e-04f, -5.722547748e-04f, -5.782570599e-04f, -5.842580485e-04f, -5.902577302e-04f, -5.962560947e-04f,
+-6.022531318e-04f, -6.082488311e-04f, -6.142431824e-04f, -6.202361753e-04f, -6.262277996e-04f, -6.322180449e-04f, -6.382069011e-04f, -6.441943578e-04f, -6.501804047e-04f, -6.561650315e-04f,
+-6.621482281e-04f, -6.681299840e-04f, -6.741102891e-04f, -6.800891332e-04f, -6.860665058e-04f, -6.920423968e-04f, -6.980167959e-04f, -7.039896929e-04f, -7.099610776e-04f, -7.159309396e-04f,
+-7.218992687e-04f, -7.278660548e-04f, -7.338312875e-04f, -7.397949566e-04f, -7.457570519e-04f, -7.517175633e-04f, -7.576764803e-04f, -7.636337930e-04f, -7.695894909e-04f, -7.755435639e-04f,
+-7.814960019e-04f, -7.874467945e-04f, -7.933959317e-04f, -7.993434031e-04f, -8.052891986e-04f, -8.112333081e-04f, -8.171757212e-04f, -8.231164279e-04f, -8.290554180e-04f, -8.349926812e-04f,
+-8.409282074e-04f, -8.468619865e-04f, -8.527940082e-04f, -8.587242624e-04f, -8.646527389e-04f, -8.705794276e-04f, -8.765043184e-04f, -8.824274010e-04f, -8.883486653e-04f, -8.942681013e-04f,
+-9.001856987e-04f, -9.061014473e-04f, -9.120153372e-04f, -9.179273581e-04f, -9.238375000e-04f, -9.297457527e-04f, -9.356521060e-04f, -9.415565500e-04f, -9.474590744e-04f, -9.533596691e-04f,
+-9.592583242e-04f, -9.651550294e-04f, -9.710497746e-04f, -9.769425499e-04f, -9.828333450e-04f, -9.887221500e-04f, -9.946089547e-04f, -1.000493749e-03f, -1.006376523e-03f, -1.012257267e-03f,
+-1.018135969e-03f, -1.024012622e-03f, -1.029887214e-03f, -1.035759735e-03f, -1.041630175e-03f, -1.047498524e-03f, -1.053364773e-03f, -1.059228911e-03f, -1.065090928e-03f, -1.070950814e-03f,
+-1.076808559e-03f, -1.082664153e-03f, -1.088517586e-03f, -1.094368848e-03f, -1.100217930e-03f, -1.106064820e-03f, -1.111909509e-03f, -1.117751987e-03f, -1.123592245e-03f, -1.129430271e-03f,
+-1.135266057e-03f, -1.141099591e-03f, -1.146930865e-03f, -1.152759868e-03f, -1.158586590e-03f, -1.164411022e-03f, -1.170233153e-03f, -1.176052973e-03f, -1.181870473e-03f, -1.187685642e-03f,
+-1.193498470e-03f, -1.199308949e-03f, -1.205117066e-03f, -1.210922814e-03f, -1.216726182e-03f, -1.222527159e-03f, -1.228325737e-03f, -1.234121905e-03f, -1.239915653e-03f, -1.245706971e-03f,
+-1.251495850e-03f, -1.257282279e-03f, -1.263066249e-03f, -1.268847750e-03f, -1.274626772e-03f, -1.280403305e-03f, -1.286177339e-03f, -1.291948865e-03f, -1.297717872e-03f, -1.303484351e-03f,
+-1.309248292e-03f, -1.315009684e-03f, -1.320768519e-03f, -1.326524786e-03f, -1.332278476e-03f, -1.338029579e-03f, -1.343778084e-03f, -1.349523983e-03f, -1.355267265e-03f, -1.361007920e-03f,
+-1.366745939e-03f, -1.372481312e-03f, -1.378214029e-03f, -1.383944081e-03f, -1.389671457e-03f, -1.395396148e-03f, -1.401118144e-03f, -1.406837436e-03f, -1.412554013e-03f, -1.418267865e-03f,
+-1.423978984e-03f, -1.429687360e-03f, -1.435392982e-03f, -1.441095841e-03f, -1.446795927e-03f, -1.452493230e-03f, -1.458187741e-03f, -1.463879451e-03f, -1.469568349e-03f, -1.475254425e-03f,
+-1.480937670e-03f, -1.486618075e-03f, -1.492295630e-03f, -1.497970324e-03f, -1.503642149e-03f, -1.509311094e-03f, -1.514977150e-03f, -1.520640308e-03f, -1.526300557e-03f, -1.531957889e-03f,
+-1.537612292e-03f, -1.543263759e-03f, -1.548912279e-03f, -1.554557842e-03f, -1.560200440e-03f, -1.565840061e-03f, -1.571476698e-03f, -1.577110339e-03f, -1.582740976e-03f, -1.588368600e-03f,
+-1.593993199e-03f, -1.599614766e-03f, -1.605233289e-03f, -1.610848761e-03f, -1.616461170e-03f, -1.622070509e-03f, -1.627676766e-03f, -1.633279933e-03f, -1.638880000e-03f, -1.644476957e-03f,
+-1.650070795e-03f, -1.655661505e-03f, -1.661249077e-03f, -1.666833501e-03f, -1.672414768e-03f, -1.677992869e-03f, -1.683567793e-03f, -1.689139533e-03f, -1.694708077e-03f, -1.700273417e-03f,
+-1.705835542e-03f, -1.711394445e-03f, -1.716950115e-03f, -1.722502542e-03f, -1.728051718e-03f, -1.733597633e-03f, -1.739140277e-03f, -1.744679641e-03f, -1.750215717e-03f, -1.755748493e-03f,
+-1.761277961e-03f, -1.766804112e-03f, -1.772326935e-03f, -1.777846423e-03f, -1.783362564e-03f, -1.788875351e-03f, -1.794384773e-03f, -1.799890822e-03f, -1.805393487e-03f, -1.810892760e-03f,
+-1.816388632e-03f, -1.821881092e-03f, -1.827370132e-03f, -1.832855742e-03f, -1.838337913e-03f, -1.843816635e-03f, -1.849291900e-03f, -1.854763698e-03f, -1.860232020e-03f, -1.865696856e-03f,
+-1.871158198e-03f, -1.876616035e-03f, -1.882070359e-03f, -1.887521161e-03f, -1.892968431e-03f, -1.898412159e-03f, -1.903852338e-03f, -1.909288957e-03f, -1.914722007e-03f, -1.920151480e-03f,
+-1.925577365e-03f, -1.930999654e-03f, -1.936418337e-03f, -1.941833406e-03f, -1.947244851e-03f, -1.952652663e-03f, -1.958056832e-03f, -1.963457350e-03f, -1.968854208e-03f, -1.974247396e-03f,
+-1.979636905e-03f, -1.985022727e-03f, -1.990404851e-03f, -1.995783269e-03f, -2.001157971e-03f, -2.006528950e-03f, -2.011896194e-03f, -2.017259697e-03f, -2.022619447e-03f, -2.027975437e-03f,
+-2.033327657e-03f, -2.038676098e-03f, -2.044020751e-03f, -2.049361607e-03f, -2.054698657e-03f, -2.060031892e-03f, -2.065361303e-03f, -2.070686881e-03f, -2.076008617e-03f, -2.081326502e-03f,
+-2.086640526e-03f, -2.091950681e-03f, -2.097256959e-03f, -2.102559349e-03f, -2.107857843e-03f, -2.113152432e-03f, -2.118443107e-03f, -2.123729859e-03f, -2.129012680e-03f, -2.134291559e-03f,
+-2.139566489e-03f, -2.144837460e-03f, -2.150104464e-03f, -2.155367491e-03f, -2.160626533e-03f, -2.165881581e-03f, -2.171132625e-03f, -2.176379657e-03f, -2.181622669e-03f, -2.186861651e-03f,
+-2.192096594e-03f, -2.197327490e-03f, -2.202554329e-03f, -2.207777104e-03f, -2.212995804e-03f, -2.218210422e-03f, -2.223420948e-03f, -2.228627374e-03f, -2.233829690e-03f, -2.239027889e-03f,
+-2.244221961e-03f, -2.249411897e-03f, -2.254597689e-03f, -2.259779329e-03f, -2.264956806e-03f, -2.270130113e-03f, -2.275299241e-03f, -2.280464180e-03f, -2.285624923e-03f, -2.290781461e-03f,
+-2.295933784e-03f, -2.301081885e-03f, -2.306225754e-03f, -2.311365383e-03f, -2.316500764e-03f, -2.321631886e-03f, -2.326758743e-03f, -2.331881325e-03f, -2.336999623e-03f, -2.342113630e-03f,
+-2.347223335e-03f, -2.352328732e-03f, -2.357429810e-03f, -2.362526562e-03f, -2.367618978e-03f, -2.372707052e-03f, -2.377790772e-03f, -2.382870132e-03f, -2.387945123e-03f, -2.393015735e-03f,
+-2.398081961e-03f, -2.403143792e-03f, -2.408201220e-03f, -2.413254235e-03f, -2.418302830e-03f, -2.423346995e-03f, -2.428386723e-03f, -2.433422005e-03f, -2.438452832e-03f, -2.443479196e-03f,
+-2.448501089e-03f, -2.453518502e-03f, -2.458531426e-03f, -2.463539853e-03f, -2.468543775e-03f, -2.473543184e-03f, -2.478538070e-03f, -2.483528426e-03f, -2.488514242e-03f, -2.493495512e-03f,
+-2.498472225e-03f, -2.503444375e-03f, -2.508411952e-03f, -2.513374948e-03f, -2.518333355e-03f, -2.523287165e-03f, -2.528236369e-03f, -2.533180958e-03f, -2.538120925e-03f, -2.543056262e-03f,
+-2.547986959e-03f, -2.552913009e-03f, -2.557834403e-03f, -2.562751133e-03f, -2.567663191e-03f, -2.572570568e-03f, -2.577473257e-03f, -2.582371249e-03f, -2.587264536e-03f, -2.592153109e-03f,
+-2.597036960e-03f, -2.601916082e-03f, -2.606790466e-03f, -2.611660103e-03f, -2.616524987e-03f, -2.621385107e-03f, -2.626240457e-03f, -2.631091028e-03f, -2.635936812e-03f, -2.640777801e-03f,
+-2.645613986e-03f, -2.650445360e-03f, -2.655271915e-03f, -2.660093642e-03f, -2.664910533e-03f, -2.669722580e-03f, -2.674529776e-03f, -2.679332111e-03f, -2.684129579e-03f, -2.688922170e-03f,
+-2.693709878e-03f, -2.698492693e-03f, -2.703270608e-03f, -2.708043615e-03f, -2.712811706e-03f, -2.717574873e-03f, -2.722333107e-03f, -2.727086401e-03f, -2.731834748e-03f, -2.736578138e-03f,
+-2.741316564e-03f, -2.746050018e-03f, -2.750778493e-03f, -2.755501979e-03f, -2.760220470e-03f, -2.764933957e-03f, -2.769642433e-03f, -2.774345889e-03f, -2.779044318e-03f, -2.783737712e-03f,
+-2.788426062e-03f, -2.793109362e-03f, -2.797787603e-03f, -2.802460778e-03f, -2.807128878e-03f, -2.811791896e-03f, -2.816449824e-03f, -2.821102654e-03f, -2.825750378e-03f, -2.830392990e-03f,
+-2.835030480e-03f, -2.839662841e-03f, -2.844290065e-03f, -2.848912145e-03f, -2.853529073e-03f, -2.858140841e-03f, -2.862747442e-03f, -2.867348867e-03f, -2.871945109e-03f, -2.876536161e-03f,
+-2.881122014e-03f, -2.885702662e-03f, -2.890278095e-03f, -2.894848308e-03f, -2.899413291e-03f, -2.903973038e-03f, -2.908527541e-03f, -2.913076792e-03f, -2.917620783e-03f, -2.922159508e-03f,
+-2.926692957e-03f, -2.931221125e-03f, -2.935744003e-03f, -2.940261584e-03f, -2.944773860e-03f, -2.949280824e-03f, -2.953782467e-03f, -2.958278784e-03f, -2.962769765e-03f, -2.967255404e-03f,
+-2.971735694e-03f, -2.976210625e-03f, -2.980680192e-03f, -2.985144387e-03f, -2.989603202e-03f, -2.994056630e-03f, -2.998504663e-03f, -3.002947295e-03f, -3.007384516e-03f, -3.011816321e-03f,
+-3.016242702e-03f, -3.020663651e-03f, -3.025079162e-03f, -3.029489226e-03f, -3.033893836e-03f, -3.038292985e-03f, -3.042686666e-03f, -3.047074871e-03f, -3.051457593e-03f, -3.055834825e-03f,
+-3.060206559e-03f, -3.064572789e-03f, -3.068933506e-03f, -3.073288704e-03f, -3.077638375e-03f, -3.081982513e-03f, -3.086321109e-03f, -3.090654157e-03f, -3.094981649e-03f, -3.099303579e-03f,
+-3.103619939e-03f, -3.107930721e-03f, -3.112235919e-03f, -3.116535526e-03f, -3.120829534e-03f, -3.125117936e-03f, -3.129400726e-03f, -3.133677895e-03f, -3.137949437e-03f, -3.142215345e-03f,
+-3.146475612e-03f, -3.150730230e-03f, -3.154979193e-03f, -3.159222493e-03f, -3.163460124e-03f, -3.167692077e-03f, -3.171918348e-03f, -3.176138927e-03f, -3.180353809e-03f, -3.184562986e-03f,
+-3.188766451e-03f, -3.192964198e-03f, -3.197156219e-03f, -3.201342508e-03f, -3.205523056e-03f, -3.209697859e-03f, -3.213866908e-03f, -3.218030196e-03f, -3.222187718e-03f, -3.226339465e-03f,
+-3.230485431e-03f, -3.234625609e-03f, -3.238759992e-03f, -3.242888574e-03f, -3.247011347e-03f, -3.251128305e-03f, -3.255239440e-03f, -3.259344747e-03f, -3.263444218e-03f, -3.267537846e-03f,
+-3.271625625e-03f, -3.275707548e-03f, -3.279783608e-03f, -3.283853798e-03f, -3.287918112e-03f, -3.291976542e-03f, -3.296029083e-03f, -3.300075727e-03f, -3.304116468e-03f, -3.308151299e-03f,
+-3.312180213e-03f, -3.316203204e-03f, -3.320220266e-03f, -3.324231390e-03f, -3.328236571e-03f, -3.332235802e-03f, -3.336229077e-03f, -3.340216389e-03f, -3.344197731e-03f, -3.348173097e-03f,
+-3.352142480e-03f, -3.356105873e-03f, -3.360063270e-03f, -3.364014665e-03f, -3.367960051e-03f, -3.371899422e-03f, -3.375832770e-03f, -3.379760090e-03f, -3.383681374e-03f, -3.387596617e-03f,
+-3.391505812e-03f, -3.395408953e-03f, -3.399306033e-03f, -3.403197045e-03f, -3.407081984e-03f, -3.410960842e-03f, -3.414833614e-03f, -3.418700293e-03f, -3.422560873e-03f, -3.426415346e-03f,
+-3.430263708e-03f, -3.434105951e-03f, -3.437942070e-03f, -3.441772058e-03f, -3.445595908e-03f, -3.449413614e-03f, -3.453225170e-03f, -3.457030571e-03f, -3.460829808e-03f, -3.464622877e-03f,
+-3.468409771e-03f, -3.472190483e-03f, -3.475965008e-03f, -3.479733339e-03f, -3.483495470e-03f, -3.487251395e-03f, -3.491001108e-03f, -3.494744602e-03f, -3.498481872e-03f, -3.502212910e-03f,
+-3.505937712e-03f, -3.509656271e-03f, -3.513368580e-03f, -3.517074635e-03f, -3.520774428e-03f, -3.524467953e-03f, -3.528155205e-03f, -3.531836177e-03f, -3.535510864e-03f, -3.539179258e-03f,
+-3.542841356e-03f, -3.546497149e-03f, -3.550146633e-03f, -3.553789801e-03f, -3.557426647e-03f, -3.561057165e-03f, -3.564681350e-03f, -3.568299196e-03f, -3.571910695e-03f, -3.575515844e-03f,
+-3.579114635e-03f, -3.582707062e-03f, -3.586293121e-03f, -3.589872804e-03f, -3.593446106e-03f, -3.597013022e-03f, -3.600573545e-03f, -3.604127670e-03f, -3.607675390e-03f, -3.611216700e-03f,
+-3.614751594e-03f, -3.618280067e-03f, -3.621802112e-03f, -3.625317724e-03f, -3.628826896e-03f, -3.632329625e-03f, -3.635825902e-03f, -3.639315723e-03f, -3.642799083e-03f, -3.646275975e-03f,
+-3.649746393e-03f, -3.653210333e-03f, -3.656667788e-03f, -3.660118752e-03f, -3.663563221e-03f, -3.667001188e-03f, -3.670432648e-03f, -3.673857595e-03f, -3.677276024e-03f, -3.680687928e-03f,
+-3.684093303e-03f, -3.687492143e-03f, -3.690884443e-03f, -3.694270196e-03f, -3.697649398e-03f, -3.701022042e-03f, -3.704388123e-03f, -3.707747636e-03f, -3.711100576e-03f, -3.714446936e-03f,
+-3.717786712e-03f, -3.721119898e-03f, -3.724446488e-03f, -3.727766477e-03f, -3.731079860e-03f, -3.734386631e-03f, -3.737686785e-03f, -3.740980316e-03f, -3.744267219e-03f, -3.747547490e-03f,
+-3.750821121e-03f, -3.754088109e-03f, -3.757348448e-03f, -3.760602132e-03f, -3.763849156e-03f, -3.767089516e-03f, -3.770323204e-03f, -3.773550218e-03f, -3.776770550e-03f, -3.779984196e-03f,
+-3.783191151e-03f, -3.786391410e-03f, -3.789584966e-03f, -3.792771816e-03f, -3.795951954e-03f, -3.799125374e-03f, -3.802292072e-03f, -3.805452043e-03f, -3.808605281e-03f, -3.811751781e-03f,
+-3.814891538e-03f, -3.818024547e-03f, -3.821150803e-03f, -3.824270301e-03f, -3.827383036e-03f, -3.830489002e-03f, -3.833588196e-03f, -3.836680611e-03f, -3.839766243e-03f, -3.842845086e-03f,
+-3.845917136e-03f, -3.848982388e-03f, -3.852040837e-03f, -3.855092478e-03f, -3.858137305e-03f, -3.861175315e-03f, -3.864206501e-03f, -3.867230860e-03f, -3.870248386e-03f, -3.873259075e-03f,
+-3.876262921e-03f, -3.879259919e-03f, -3.882250066e-03f, -3.885233356e-03f, -3.888209784e-03f, -3.891179345e-03f, -3.894142035e-03f, -3.897097849e-03f, -3.900046781e-03f, -3.902988829e-03f,
+-3.905923985e-03f, -3.908852247e-03f, -3.911773609e-03f, -3.914688066e-03f, -3.917595614e-03f, -3.920496247e-03f, -3.923389963e-03f, -3.926276755e-03f, -3.929156619e-03f, -3.932029550e-03f,
+-3.934895545e-03f, -3.937754597e-03f, -3.940606704e-03f, -3.943451859e-03f, -3.946290058e-03f, -3.949121298e-03f, -3.951945573e-03f, -3.954762879e-03f, -3.957573211e-03f, -3.960376564e-03f,
+-3.963172936e-03f, -3.965962319e-03f, -3.968744712e-03f, -3.971520108e-03f, -3.974288503e-03f, -3.977049894e-03f, -3.979804275e-03f, -3.982551642e-03f, -3.985291991e-03f, -3.988025317e-03f,
+-3.990751616e-03f, -3.993470884e-03f, -3.996183116e-03f, -3.998888308e-03f, -4.001586456e-03f, -4.004277555e-03f, -4.006961601e-03f, -4.009638589e-03f, -4.012308516e-03f, -4.014971377e-03f,
+-4.017627168e-03f, -4.020275885e-03f, -4.022917523e-03f, -4.025552079e-03f, -4.028179547e-03f, -4.030799924e-03f, -4.033413206e-03f, -4.036019388e-03f, -4.038618467e-03f, -4.041210438e-03f,
+-4.043795297e-03f, -4.046373040e-03f, -4.048943663e-03f, -4.051507161e-03f, -4.054063532e-03f, -4.056612769e-03f, -4.059154871e-03f, -4.061689832e-03f, -4.064217648e-03f, -4.066738316e-03f,
+-4.069251832e-03f, -4.071758191e-03f, -4.074257389e-03f, -4.076749423e-03f, -4.079234289e-03f, -4.081711983e-03f, -4.084182500e-03f, -4.086645837e-03f, -4.089101990e-03f, -4.091550954e-03f,
+-4.093992728e-03f, -4.096427305e-03f, -4.098854683e-03f, -4.101274857e-03f, -4.103687825e-03f, -4.106093581e-03f, -4.108492122e-03f, -4.110883445e-03f, -4.113267546e-03f, -4.115644420e-03f,
+-4.118014064e-03f, -4.120376475e-03f, -4.122731649e-03f, -4.125079581e-03f, -4.127420269e-03f, -4.129753708e-03f, -4.132079895e-03f, -4.134398826e-03f, -4.136710498e-03f, -4.139014907e-03f,
+-4.141312049e-03f, -4.143601921e-03f, -4.145884518e-03f, -4.148159839e-03f, -4.150427878e-03f, -4.152688633e-03f, -4.154942100e-03f, -4.157188275e-03f, -4.159427154e-03f, -4.161658735e-03f,
+-4.163883014e-03f, -4.166099987e-03f, -4.168309651e-03f, -4.170512003e-03f, -4.172707038e-03f, -4.174894754e-03f, -4.177075147e-03f, -4.179248213e-03f, -4.181413950e-03f, -4.183572354e-03f,
+-4.185723421e-03f, -4.187867149e-03f, -4.190003533e-03f, -4.192132571e-03f, -4.194254259e-03f, -4.196368594e-03f, -4.198475573e-03f, -4.200575192e-03f, -4.202667448e-03f, -4.204752338e-03f,
+-4.206829859e-03f, -4.208900007e-03f, -4.210962779e-03f, -4.213018172e-03f, -4.215066183e-03f, -4.217106808e-03f, -4.219140045e-03f, -4.221165890e-03f, -4.223184341e-03f, -4.225195393e-03f,
+-4.227199044e-03f, -4.229195292e-03f, -4.231184132e-03f, -4.233165561e-03f, -4.235139577e-03f, -4.237106177e-03f, -4.239065357e-03f, -4.241017115e-03f, -4.242961448e-03f, -4.244898352e-03f,
+-4.246827824e-03f, -4.248749862e-03f, -4.250664463e-03f, -4.252571624e-03f, -4.254471341e-03f, -4.256363612e-03f, -4.258248434e-03f, -4.260125804e-03f, -4.261995719e-03f, -4.263858177e-03f,
+-4.265713174e-03f, -4.267560708e-03f, -4.269400775e-03f, -4.271233374e-03f, -4.273058501e-03f, -4.274876153e-03f, -4.276686328e-03f, -4.278489023e-03f, -4.280284235e-03f, -4.282071961e-03f,
+-4.283852199e-03f, -4.285624947e-03f, -4.287390200e-03f, -4.289147957e-03f, -4.290898215e-03f, -4.292640972e-03f, -4.294376224e-03f, -4.296103969e-03f, -4.297824205e-03f, -4.299536928e-03f,
+-4.301242137e-03f, -4.302939828e-03f, -4.304630000e-03f, -4.306312649e-03f, -4.307987773e-03f, -4.309655369e-03f, -4.311315436e-03f, -4.312967970e-03f, -4.314612969e-03f, -4.316250431e-03f,
+-4.317880353e-03f, -4.319502732e-03f, -4.321117567e-03f, -4.322724855e-03f, -4.324324592e-03f, -4.325916778e-03f, -4.327501410e-03f, -4.329078485e-03f, -4.330648001e-03f, -4.332209955e-03f,
+-4.333764346e-03f, -4.335311170e-03f, -4.336850427e-03f, -4.338382112e-03f, -4.339906225e-03f, -4.341422763e-03f, -4.342931723e-03f, -4.344433104e-03f, -4.345926902e-03f, -4.347413117e-03f,
+-4.348891745e-03f, -4.350362785e-03f, -4.351826235e-03f, -4.353282091e-03f, -4.354730353e-03f, -4.356171018e-03f, -4.357604084e-03f, -4.359029548e-03f, -4.360447409e-03f, -4.361857665e-03f,
+-4.363260313e-03f, -4.364655352e-03f, -4.366042779e-03f, -4.367422593e-03f, -4.368794791e-03f, -4.370159372e-03f, -4.371516333e-03f, -4.372865672e-03f, -4.374207388e-03f, -4.375541479e-03f,
+-4.376867943e-03f, -4.378186777e-03f, -4.379497980e-03f, -4.380801550e-03f, -4.382097485e-03f, -4.383385784e-03f, -4.384666444e-03f, -4.385939463e-03f, -4.387204840e-03f, -4.388462573e-03f,
+-4.389712661e-03f, -4.390955100e-03f, -4.392189890e-03f, -4.393417029e-03f, -4.394636516e-03f, -4.395848347e-03f, -4.397052522e-03f, -4.398249039e-03f, -4.399437897e-03f, -4.400619093e-03f,
+-4.401792626e-03f, -4.402958494e-03f, -4.404116696e-03f, -4.405267230e-03f, -4.406410094e-03f, -4.407545287e-03f, -4.408672807e-03f, -4.409792654e-03f, -4.410904824e-03f, -4.412009316e-03f,
+-4.413106130e-03f, -4.414195264e-03f, -4.415276715e-03f, -4.416350483e-03f, -4.417416566e-03f, -4.418474963e-03f, -4.419525671e-03f, -4.420568691e-03f, -4.421604020e-03f, -4.422631657e-03f,
+-4.423651600e-03f, -4.424663848e-03f, -4.425668400e-03f, -4.426665255e-03f, -4.427654411e-03f, -4.428635866e-03f, -4.429609620e-03f, -4.430575671e-03f, -4.431534017e-03f, -4.432484659e-03f,
+-4.433427593e-03f, -4.434362820e-03f, -4.435290337e-03f, -4.436210144e-03f, -4.437122240e-03f, -4.438026622e-03f, -4.438923291e-03f, -4.439812245e-03f, -4.440693482e-03f, -4.441567002e-03f,
+-4.442432803e-03f, -4.443290884e-03f, -4.444141245e-03f, -4.444983884e-03f, -4.445818800e-03f, -4.446645992e-03f, -4.447465459e-03f, -4.448277200e-03f, -4.449081213e-03f, -4.449877499e-03f,
+-4.450666055e-03f, -4.451446882e-03f, -4.452219977e-03f, -4.452985340e-03f, -4.453742971e-03f, -4.454492867e-03f, -4.455235029e-03f, -4.455969455e-03f, -4.456696145e-03f, -4.457415097e-03f,
+-4.458126311e-03f, -4.458829786e-03f, -4.459525520e-03f, -4.460213514e-03f, -4.460893767e-03f, -4.461566277e-03f, -4.462231043e-03f, -4.462888066e-03f, -4.463537344e-03f, -4.464178877e-03f,
+-4.464812664e-03f, -4.465438704e-03f, -4.466056996e-03f, -4.466667540e-03f, -4.467270335e-03f, -4.467865381e-03f, -4.468452676e-03f, -4.469032221e-03f, -4.469604014e-03f, -4.470168055e-03f,
+-4.470724343e-03f, -4.471272878e-03f, -4.471813660e-03f, -4.472346687e-03f, -4.472871959e-03f, -4.473389476e-03f, -4.473899237e-03f, -4.474401241e-03f, -4.474895489e-03f, -4.475381979e-03f,
+-4.475860711e-03f, -4.476331685e-03f, -4.476794901e-03f, -4.477250357e-03f, -4.477698054e-03f, -4.478137991e-03f, -4.478570168e-03f, -4.478994584e-03f, -4.479411239e-03f, -4.479820133e-03f,
+-4.480221265e-03f, -4.480614636e-03f, -4.481000244e-03f, -4.481378089e-03f, -4.481748172e-03f, -4.482110492e-03f, -4.482465048e-03f, -4.482811841e-03f, -4.483150871e-03f, -4.483482136e-03f,
+-4.483805637e-03f, -4.484121374e-03f, -4.484429347e-03f, -4.484729554e-03f, -4.485021998e-03f, -4.485306676e-03f, -4.485583589e-03f, -4.485852738e-03f, -4.486114121e-03f, -4.486367739e-03f,
+-4.486613592e-03f, -4.486851679e-03f, -4.487082002e-03f, -4.487304558e-03f, -4.487519350e-03f, -4.487726376e-03f, -4.487925637e-03f, -4.488117133e-03f, -4.488300864e-03f, -4.488476829e-03f,
+-4.488645030e-03f, -4.488805465e-03f, -4.488958136e-03f, -4.489103042e-03f, -4.489240183e-03f, -4.489369560e-03f, -4.489491173e-03f, -4.489605021e-03f, -4.489711106e-03f, -4.489809427e-03f,
+-4.489899985e-03f, -4.489982779e-03f, -4.490057810e-03f, -4.490125079e-03f, -4.490184584e-03f, -4.490236328e-03f, -4.490280310e-03f, -4.490316530e-03f, -4.490344989e-03f, -4.490365688e-03f,
+-4.490378625e-03f, -4.490383802e-03f, -4.490381220e-03f, -4.490370877e-03f, -4.490352776e-03f, -4.490326917e-03f, -4.490293298e-03f, -4.490251923e-03f, -4.490202790e-03f, -4.490145900e-03f,
+-4.490081253e-03f, -4.490008851e-03f, -4.489928694e-03f, -4.489840781e-03f, -4.489745114e-03f, -4.489641694e-03f, -4.489530520e-03f, -4.489411594e-03f, -4.489284916e-03f, -4.489150486e-03f,
+-4.489008306e-03f, -4.488858375e-03f, -4.488700695e-03f, -4.488535266e-03f, -4.488362089e-03f, -4.488181164e-03f, -4.487992492e-03f, -4.487796075e-03f, -4.487591912e-03f, -4.487380004e-03f,
+-4.487160352e-03f, -4.486932958e-03f, -4.486697821e-03f, -4.486454942e-03f, -4.486204323e-03f, -4.485945963e-03f, -4.485679865e-03f, -4.485406028e-03f, -4.485124454e-03f, -4.484835143e-03f,
+-4.484538097e-03f, -4.484233316e-03f, -4.483920801e-03f, -4.483600553e-03f, -4.483272573e-03f, -4.482936862e-03f, -4.482593421e-03f, -4.482242251e-03f, -4.481883353e-03f, -4.481516728e-03f,
+-4.481142377e-03f, -4.480760300e-03f, -4.480370500e-03f, -4.479972976e-03f, -4.479567731e-03f, -4.479154765e-03f, -4.478734079e-03f, -4.478305675e-03f, -4.477869553e-03f, -4.477425715e-03f,
+-4.476974161e-03f, -4.476514894e-03f, -4.476047914e-03f, -4.475573222e-03f, -4.475090820e-03f, -4.474600708e-03f, -4.474102888e-03f, -4.473597362e-03f, -4.473084130e-03f, -4.472563194e-03f,
+-4.472034555e-03f, -4.471498214e-03f, -4.470954173e-03f, -4.470402433e-03f, -4.469842995e-03f, -4.469275861e-03f, -4.468701032e-03f, -4.468118509e-03f, -4.467528294e-03f, -4.466930389e-03f,
+-4.466324794e-03f, -4.465711510e-03f, -4.465090541e-03f, -4.464461886e-03f, -4.463825548e-03f, -4.463181527e-03f, -4.462529826e-03f, -4.461870446e-03f, -4.461203388e-03f, -4.460528654e-03f,
+-4.459846245e-03f, -4.459156164e-03f, -4.458458411e-03f, -4.457752988e-03f, -4.457039897e-03f, -4.456319140e-03f, -4.455590717e-03f, -4.454854632e-03f, -4.454110884e-03f, -4.453359477e-03f,
+-4.452600411e-03f, -4.451833689e-03f, -4.451059311e-03f, -4.450277281e-03f, -4.449487598e-03f, -4.448690267e-03f, -4.447885287e-03f, -4.447072661e-03f, -4.446252390e-03f, -4.445424477e-03f,
+-4.444588923e-03f, -4.443745730e-03f, -4.442894900e-03f, -4.442036435e-03f, -4.441170336e-03f, -4.440296605e-03f, -4.439415245e-03f, -4.438526257e-03f, -4.437629643e-03f, -4.436725406e-03f,
+-4.435813546e-03f, -4.434894066e-03f, -4.433966968e-03f, -4.433032254e-03f, -4.432089926e-03f, -4.431139986e-03f, -4.430182435e-03f, -4.429217277e-03f, -4.428244513e-03f, -4.427264144e-03f,
+-4.426276174e-03f, -4.425280604e-03f, -4.424277436e-03f, -4.423266673e-03f, -4.422248316e-03f, -4.421222368e-03f, -4.420188831e-03f, -4.419147707e-03f, -4.418098998e-03f, -4.417042706e-03f,
+-4.415978834e-03f, -4.414907383e-03f, -4.413828357e-03f, -4.412741757e-03f, -4.411647585e-03f, -4.410545844e-03f, -4.409436536e-03f, -4.408319664e-03f, -4.407195229e-03f, -4.406063234e-03f,
+-4.404923681e-03f, -4.403776573e-03f, -4.402621912e-03f, -4.401459700e-03f, -4.400289940e-03f, -4.399112634e-03f, -4.397927785e-03f, -4.396735394e-03f, -4.395535465e-03f, -4.394328000e-03f,
+-4.393113001e-03f, -4.391890471e-03f, -4.390660413e-03f, -4.389422828e-03f, -4.388177719e-03f, -4.386925089e-03f, -4.385664941e-03f, -4.384397276e-03f, -4.383122098e-03f, -4.381839408e-03f,
+-4.380549211e-03f, -4.379251508e-03f, -4.377946301e-03f, -4.376633594e-03f, -4.375313389e-03f, -4.373985689e-03f, -4.372650496e-03f, -4.371307814e-03f, -4.369957644e-03f, -4.368599990e-03f,
+-4.367234854e-03f, -4.365862238e-03f, -4.364482147e-03f, -4.363094582e-03f, -4.361699546e-03f, -4.360297043e-03f, -4.358887074e-03f, -4.357469642e-03f, -4.356044751e-03f, -4.354612404e-03f,
+-4.353172602e-03f, -4.351725350e-03f, -4.350270649e-03f, -4.348808503e-03f, -4.347338914e-03f, -4.345861886e-03f, -4.344377422e-03f, -4.342885524e-03f, -4.341386195e-03f, -4.339879438e-03f,
+-4.338365257e-03f, -4.336843654e-03f, -4.335314632e-03f, -4.333778195e-03f, -4.332234345e-03f, -4.330683085e-03f, -4.329124418e-03f, -4.327558348e-03f, -4.325984877e-03f, -4.324404009e-03f,
+-4.322815747e-03f, -4.321220093e-03f, -4.319617051e-03f, -4.318006625e-03f, -4.316388816e-03f, -4.314763629e-03f, -4.313131067e-03f, -4.311491132e-03f, -4.309843828e-03f, -4.308189158e-03f,
+-4.306527126e-03f, -4.304857734e-03f, -4.303180986e-03f, -4.301496885e-03f, -4.299805435e-03f, -4.298106638e-03f, -4.296400498e-03f, -4.294687018e-03f, -4.292966202e-03f, -4.291238053e-03f,
+-4.289502575e-03f, -4.287759770e-03f, -4.286009642e-03f, -4.284252194e-03f, -4.282487430e-03f, -4.280715354e-03f, -4.278935968e-03f, -4.277149276e-03f, -4.275355282e-03f, -4.273553989e-03f,
+-4.271745401e-03f, -4.269929520e-03f, -4.268106351e-03f, -4.266275896e-03f, -4.264438161e-03f, -4.262593147e-03f, -4.260740859e-03f, -4.258881300e-03f, -4.257014474e-03f, -4.255140384e-03f,
+-4.253259034e-03f, -4.251370428e-03f, -4.249474569e-03f, -4.247571461e-03f, -4.245661107e-03f, -4.243743511e-03f, -4.241818677e-03f, -4.239886608e-03f, -4.237947309e-03f, -4.236000782e-03f,
+-4.234047032e-03f, -4.232086063e-03f, -4.230117877e-03f, -4.228142479e-03f, -4.226159873e-03f, -4.224170063e-03f, -4.222173051e-03f, -4.220168843e-03f, -4.218157441e-03f, -4.216138850e-03f,
+-4.214113073e-03f, -4.212080115e-03f, -4.210039979e-03f, -4.207992670e-03f, -4.205938190e-03f, -4.203876544e-03f, -4.201807736e-03f, -4.199731769e-03f, -4.197648649e-03f, -4.195558378e-03f,
+-4.193460960e-03f, -4.191356400e-03f, -4.189244702e-03f, -4.187125870e-03f, -4.184999907e-03f, -4.182866817e-03f, -4.180726606e-03f, -4.178579276e-03f, -4.176424832e-03f, -4.174263277e-03f,
+-4.172094617e-03f, -4.169918855e-03f, -4.167735995e-03f, -4.165546041e-03f, -4.163348997e-03f, -4.161144869e-03f, -4.158933659e-03f, -4.156715372e-03f, -4.154490012e-03f, -4.152257583e-03f,
+-4.150018090e-03f, -4.147771536e-03f, -4.145517927e-03f, -4.143257265e-03f, -4.140989556e-03f, -4.138714804e-03f, -4.136433013e-03f, -4.134144187e-03f, -4.131848331e-03f, -4.129545449e-03f,
+-4.127235545e-03f, -4.124918623e-03f, -4.122594689e-03f, -4.120263746e-03f, -4.117925798e-03f, -4.115580851e-03f, -4.113228908e-03f, -4.110869974e-03f, -4.108504053e-03f, -4.106131150e-03f,
+-4.103751269e-03f, -4.101364415e-03f, -4.098970592e-03f, -4.096569805e-03f, -4.094162057e-03f, -4.091747355e-03f, -4.089325701e-03f, -4.086897101e-03f, -4.084461559e-03f, -4.082019080e-03f,
+-4.079569668e-03f, -4.077113329e-03f, -4.074650065e-03f, -4.072179883e-03f, -4.069702786e-03f, -4.067218780e-03f, -4.064727869e-03f, -4.062230057e-03f, -4.059725350e-03f, -4.057213751e-03f,
+-4.054695266e-03f, -4.052169900e-03f, -4.049637656e-03f, -4.047098540e-03f, -4.044552557e-03f, -4.041999711e-03f, -4.039440006e-03f, -4.036873449e-03f, -4.034300043e-03f, -4.031719793e-03f,
+-4.029132704e-03f, -4.026538782e-03f, -4.023938030e-03f, -4.021330453e-03f, -4.018716057e-03f, -4.016094846e-03f, -4.013466825e-03f, -4.010831999e-03f, -4.008190373e-03f, -4.005541952e-03f,
+-4.002886741e-03f, -4.000224744e-03f, -3.997555967e-03f, -3.994880414e-03f, -3.992198091e-03f, -3.989509002e-03f, -3.986813152e-03f, -3.984110547e-03f, -3.981401192e-03f, -3.978685090e-03f,
+-3.975962249e-03f, -3.973232672e-03f, -3.970496364e-03f, -3.967753331e-03f, -3.965003578e-03f, -3.962247109e-03f, -3.959483931e-03f, -3.956714047e-03f, -3.953937464e-03f, -3.951154185e-03f,
+-3.948364217e-03f, -3.945567565e-03f, -3.942764233e-03f, -3.939954228e-03f, -3.937137553e-03f, -3.934314214e-03f, -3.931484218e-03f, -3.928647567e-03f, -3.925804269e-03f, -3.922954328e-03f,
+-3.920097749e-03f, -3.917234538e-03f, -3.914364700e-03f, -3.911488240e-03f, -3.908605164e-03f, -3.905715476e-03f, -3.902819183e-03f, -3.899916289e-03f, -3.897006800e-03f, -3.894090722e-03f,
+-3.891168059e-03f, -3.888238817e-03f, -3.885303001e-03f, -3.882360617e-03f, -3.879411670e-03f, -3.876456166e-03f, -3.873494110e-03f, -3.870525507e-03f, -3.867550363e-03f, -3.864568684e-03f,
+-3.861580474e-03f, -3.858585740e-03f, -3.855584487e-03f, -3.852576720e-03f, -3.849562445e-03f, -3.846541667e-03f, -3.843514392e-03f, -3.840480626e-03f, -3.837440374e-03f, -3.834393641e-03f,
+-3.831340434e-03f, -3.828280758e-03f, -3.825214618e-03f, -3.822142020e-03f, -3.819062969e-03f, -3.815977473e-03f, -3.812885535e-03f, -3.809787161e-03f, -3.806682358e-03f, -3.803571132e-03f,
+-3.800453486e-03f, -3.797329429e-03f, -3.794198964e-03f, -3.791062098e-03f, -3.787918837e-03f, -3.784769186e-03f, -3.781613151e-03f, -3.778450738e-03f, -3.775281953e-03f, -3.772106801e-03f,
+-3.768925289e-03f, -3.765737421e-03f, -3.762543205e-03f, -3.759342645e-03f, -3.756135748e-03f, -3.752922519e-03f, -3.749702964e-03f, -3.746477090e-03f, -3.743244902e-03f, -3.740006405e-03f,
+-3.736761607e-03f, -3.733510512e-03f, -3.730253127e-03f, -3.726989458e-03f, -3.723719510e-03f, -3.720443290e-03f, -3.717160804e-03f, -3.713872057e-03f, -3.710577055e-03f, -3.707275805e-03f,
+-3.703968313e-03f, -3.700654584e-03f, -3.697334625e-03f, -3.694008442e-03f, -3.690676040e-03f, -3.687337426e-03f, -3.683992606e-03f, -3.680641585e-03f, -3.677284371e-03f, -3.673920969e-03f,
+-3.670551385e-03f, -3.667175626e-03f, -3.663793697e-03f, -3.660405605e-03f, -3.657011356e-03f, -3.653610956e-03f, -3.650204411e-03f, -3.646791727e-03f, -3.643372911e-03f, -3.639947969e-03f,
+-3.636516907e-03f, -3.633079731e-03f, -3.629636448e-03f, -3.626187064e-03f, -3.622731584e-03f, -3.619270016e-03f, -3.615802365e-03f, -3.612328639e-03f, -3.608848842e-03f, -3.605362982e-03f,
+-3.601871065e-03f, -3.598373097e-03f, -3.594869085e-03f, -3.591359034e-03f, -3.587842952e-03f, -3.584320844e-03f, -3.580792717e-03f, -3.577258578e-03f, -3.573718433e-03f, -3.570172287e-03f,
+-3.566620149e-03f, -3.563062023e-03f, -3.559497917e-03f, -3.555927837e-03f, -3.552351789e-03f, -3.548769781e-03f, -3.545181817e-03f, -3.541587906e-03f, -3.537988053e-03f, -3.534382265e-03f,
+-3.530770548e-03f, -3.527152910e-03f, -3.523529356e-03f, -3.519899893e-03f, -3.516264527e-03f, -3.512623266e-03f, -3.508976116e-03f, -3.505323083e-03f, -3.501664174e-03f, -3.497999396e-03f,
+-3.494328755e-03f, -3.490652258e-03f, -3.486969912e-03f, -3.483281722e-03f, -3.479587697e-03f, -3.475887842e-03f, -3.472182164e-03f, -3.468470670e-03f, -3.464753367e-03f, -3.461030261e-03f,
+-3.457301359e-03f, -3.453566668e-03f, -3.449826195e-03f, -3.446079945e-03f, -3.442327927e-03f, -3.438570147e-03f, -3.434806611e-03f, -3.431037326e-03f, -3.427262300e-03f, -3.423481538e-03f,
+-3.419695049e-03f, -3.415902838e-03f, -3.412104912e-03f, -3.408301279e-03f, -3.404491945e-03f, -3.400676917e-03f, -3.396856202e-03f, -3.393029807e-03f, -3.389197738e-03f, -3.385360003e-03f,
+-3.381516608e-03f, -3.377667561e-03f, -3.373812868e-03f, -3.369952537e-03f, -3.366086574e-03f, -3.362214986e-03f, -3.358337780e-03f, -3.354454963e-03f, -3.350566543e-03f, -3.346672525e-03f,
+-3.342772918e-03f, -3.338867728e-03f, -3.334956962e-03f, -3.331040628e-03f, -3.327118731e-03f, -3.323191280e-03f, -3.319258282e-03f, -3.315319742e-03f, -3.311375670e-03f, -3.307426071e-03f,
+-3.303470953e-03f, -3.299510322e-03f, -3.295544187e-03f, -3.291572553e-03f, -3.287595429e-03f, -3.283612822e-03f, -3.279624737e-03f, -3.275631184e-03f, -3.271632168e-03f, -3.267627698e-03f,
+-3.263617779e-03f, -3.259602420e-03f, -3.255581628e-03f, -3.251555410e-03f, -3.247523772e-03f, -3.243486723e-03f, -3.239444270e-03f, -3.235396419e-03f, -3.231343179e-03f, -3.227284556e-03f,
+-3.223220557e-03f, -3.219151191e-03f, -3.215076463e-03f, -3.210996383e-03f, -3.206910956e-03f, -3.202820190e-03f, -3.198724093e-03f, -3.194622672e-03f, -3.190515933e-03f, -3.186403886e-03f,
+-3.182286536e-03f, -3.178163892e-03f, -3.174035961e-03f, -3.169902749e-03f, -3.165764265e-03f, -3.161620516e-03f, -3.157471509e-03f, -3.153317253e-03f, -3.149157753e-03f, -3.144993018e-03f,
+-3.140823055e-03f, -3.136647872e-03f, -3.132467476e-03f, -3.128281874e-03f, -3.124091074e-03f, -3.119895084e-03f, -3.115693911e-03f, -3.111487563e-03f, -3.107276047e-03f, -3.103059370e-03f,
+-3.098837540e-03f, -3.094610565e-03f, -3.090378453e-03f, -3.086141210e-03f, -3.081898845e-03f, -3.077651365e-03f, -3.073398777e-03f, -3.069141090e-03f, -3.064878310e-03f, -3.060610446e-03f,
+-3.056337505e-03f, -3.052059495e-03f, -3.047776423e-03f, -3.043488297e-03f, -3.039195124e-03f, -3.034896913e-03f, -3.030593671e-03f, -3.026285406e-03f, -3.021972125e-03f, -3.017653836e-03f,
+-3.013330547e-03f, -3.009002266e-03f, -3.004669000e-03f, -3.000330757e-03f, -2.995987544e-03f, -2.991639370e-03f, -2.987286242e-03f, -2.982928169e-03f, -2.978565157e-03f, -2.974197215e-03f,
+-2.969824350e-03f, -2.965446570e-03f, -2.961063883e-03f, -2.956676297e-03f, -2.952283820e-03f, -2.947886459e-03f, -2.943484222e-03f, -2.939077118e-03f, -2.934665154e-03f, -2.930248337e-03f,
+-2.925826676e-03f, -2.921400179e-03f, -2.916968854e-03f, -2.912532708e-03f, -2.908091749e-03f, -2.903645985e-03f, -2.899195425e-03f, -2.894740075e-03f, -2.890279945e-03f, -2.885815042e-03f,
+-2.881345373e-03f, -2.876870948e-03f, -2.872391773e-03f, -2.867907857e-03f, -2.863419208e-03f, -2.858925834e-03f, -2.854427743e-03f, -2.849924942e-03f, -2.845417440e-03f, -2.840905246e-03f,
+-2.836388366e-03f, -2.831866809e-03f, -2.827340582e-03f, -2.822809695e-03f, -2.818274155e-03f, -2.813733971e-03f, -2.809189149e-03f, -2.804639699e-03f, -2.800085628e-03f, -2.795526945e-03f,
+-2.790963657e-03f, -2.786395773e-03f, -2.781823301e-03f, -2.777246248e-03f, -2.772664624e-03f, -2.768078437e-03f, -2.763487693e-03f, -2.758892402e-03f, -2.754292572e-03f, -2.749688211e-03f,
+-2.745079327e-03f, -2.740465928e-03f, -2.735848023e-03f, -2.731225620e-03f, -2.726598726e-03f, -2.721967350e-03f, -2.717331501e-03f, -2.712691187e-03f, -2.708046415e-03f, -2.703397194e-03f,
+-2.698743533e-03f, -2.694085439e-03f, -2.689422921e-03f, -2.684755987e-03f, -2.680084646e-03f, -2.675408905e-03f, -2.670728773e-03f, -2.666044259e-03f, -2.661355370e-03f, -2.656662116e-03f,
+-2.651964503e-03f, -2.647262541e-03f, -2.642556238e-03f, -2.637845603e-03f, -2.633130643e-03f, -2.628411367e-03f, -2.623687783e-03f, -2.618959900e-03f, -2.614227727e-03f, -2.609491271e-03f,
+-2.604750541e-03f, -2.600005545e-03f, -2.595256292e-03f, -2.590502790e-03f, -2.585745048e-03f, -2.580983073e-03f, -2.576216876e-03f, -2.571446463e-03f, -2.566671843e-03f, -2.561893026e-03f,
+-2.557110018e-03f, -2.552322830e-03f, -2.547531468e-03f, -2.542735943e-03f, -2.537936261e-03f, -2.533132433e-03f, -2.528324466e-03f, -2.523512368e-03f, -2.518696149e-03f, -2.513875816e-03f,
+-2.509051379e-03f, -2.504222846e-03f, -2.499390225e-03f, -2.494553525e-03f, -2.489712755e-03f, -2.484867923e-03f, -2.480019037e-03f, -2.475166107e-03f, -2.470309141e-03f, -2.465448147e-03f,
+-2.460583134e-03f, -2.455714111e-03f, -2.450841086e-03f, -2.445964068e-03f, -2.441083065e-03f, -2.436198087e-03f, -2.431309141e-03f, -2.426416237e-03f, -2.421519383e-03f, -2.416618588e-03f,
+-2.411713860e-03f, -2.406805208e-03f, -2.401892641e-03f, -2.396976168e-03f, -2.392055796e-03f, -2.387131536e-03f, -2.382203394e-03f, -2.377271382e-03f, -2.372335506e-03f, -2.367395776e-03f,
+-2.362452200e-03f, -2.357504787e-03f, -2.352553547e-03f, -2.347598486e-03f, -2.342639616e-03f, -2.337676943e-03f, -2.332710478e-03f, -2.327740228e-03f, -2.322766202e-03f, -2.317788410e-03f,
+-2.312806860e-03f, -2.307821560e-03f, -2.302832520e-03f, -2.297839749e-03f, -2.292843255e-03f, -2.287843047e-03f, -2.282839134e-03f, -2.277831524e-03f, -2.272820227e-03f, -2.267805252e-03f,
+-2.262786607e-03f, -2.257764301e-03f, -2.252738343e-03f, -2.247708741e-03f, -2.242675506e-03f, -2.237638645e-03f, -2.232598167e-03f, -2.227554082e-03f, -2.222506398e-03f, -2.217455125e-03f,
+-2.212400270e-03f, -2.207341843e-03f, -2.202279854e-03f, -2.197214310e-03f, -2.192145221e-03f, -2.187072595e-03f, -2.181996442e-03f, -2.176916771e-03f, -2.171833590e-03f, -2.166746909e-03f,
+-2.161656736e-03f, -2.156563081e-03f, -2.151465952e-03f, -2.146365359e-03f, -2.141261310e-03f, -2.136153814e-03f, -2.131042880e-03f, -2.125928518e-03f, -2.120810737e-03f, -2.115689544e-03f,
+-2.110564950e-03f, -2.105436964e-03f, -2.100305594e-03f, -2.095170850e-03f, -2.090032740e-03f, -2.084891273e-03f, -2.079746460e-03f, -2.074598308e-03f, -2.069446826e-03f, -2.064292025e-03f,
+-2.059133912e-03f, -2.053972498e-03f, -2.048807790e-03f, -2.043639799e-03f, -2.038468533e-03f, -2.033294001e-03f, -2.028116213e-03f, -2.022935177e-03f, -2.017750903e-03f, -2.012563400e-03f,
+-2.007372677e-03f, -2.002178742e-03f, -1.996981606e-03f, -1.991781278e-03f, -1.986577765e-03f, -1.981371079e-03f, -1.976161227e-03f, -1.970948219e-03f, -1.965732064e-03f, -1.960512771e-03f,
+-1.955290350e-03f, -1.950064810e-03f, -1.944836159e-03f, -1.939604407e-03f, -1.934369564e-03f, -1.929131638e-03f, -1.923890638e-03f, -1.918646574e-03f, -1.913399456e-03f, -1.908149291e-03f,
+-1.902896091e-03f, -1.897639862e-03f, -1.892380616e-03f, -1.887118361e-03f, -1.881853106e-03f, -1.876584861e-03f, -1.871313635e-03f, -1.866039437e-03f, -1.860762277e-03f, -1.855482163e-03f,
+-1.850199105e-03f, -1.844913113e-03f, -1.839624195e-03f, -1.834332361e-03f, -1.829037620e-03f, -1.823739981e-03f, -1.818439454e-03f, -1.813136048e-03f, -1.807829773e-03f, -1.802520637e-03f,
+-1.797208650e-03f, -1.791893821e-03f, -1.786576160e-03f, -1.781255675e-03f, -1.775932377e-03f, -1.770606275e-03f, -1.765277377e-03f, -1.759945694e-03f, -1.754611235e-03f, -1.749274008e-03f,
+-1.743934024e-03f, -1.738591292e-03f, -1.733245820e-03f, -1.727897619e-03f, -1.722546698e-03f, -1.717193066e-03f, -1.711836733e-03f, -1.706477708e-03f, -1.701116000e-03f, -1.695751619e-03f,
+-1.690384574e-03f, -1.685014875e-03f, -1.679642531e-03f, -1.674267551e-03f, -1.668889945e-03f, -1.663509723e-03f, -1.658126893e-03f, -1.652741465e-03f, -1.647353449e-03f, -1.641962854e-03f,
+-1.636569689e-03f, -1.631173964e-03f, -1.625775689e-03f, -1.620374872e-03f, -1.614971524e-03f, -1.609565653e-03f, -1.604157270e-03f, -1.598746383e-03f, -1.593333003e-03f, -1.587917138e-03f,
+-1.582498798e-03f, -1.577077993e-03f, -1.571654732e-03f, -1.566229024e-03f, -1.560800879e-03f, -1.555370308e-03f, -1.549937318e-03f, -1.544501920e-03f, -1.539064122e-03f, -1.533623936e-03f,
+-1.528181370e-03f, -1.522736433e-03f, -1.517289136e-03f, -1.511839487e-03f, -1.506387496e-03f, -1.500933174e-03f, -1.495476528e-03f, -1.490017570e-03f, -1.484556308e-03f, -1.479092752e-03f,
+-1.473626912e-03f, -1.468158796e-03f, -1.462688416e-03f, -1.457215779e-03f, -1.451740896e-03f, -1.446263777e-03f, -1.440784431e-03f, -1.435302867e-03f, -1.429819096e-03f, -1.424333126e-03f,
+-1.418844967e-03f, -1.413354629e-03f, -1.407862122e-03f, -1.402367455e-03f, -1.396870637e-03f, -1.391371679e-03f, -1.385870589e-03f, -1.380367379e-03f, -1.374862056e-03f, -1.369354631e-03f,
+-1.363845113e-03f, -1.358333513e-03f, -1.352819839e-03f, -1.347304101e-03f, -1.341786309e-03f, -1.336266473e-03f, -1.330744602e-03f, -1.325220706e-03f, -1.319694794e-03f, -1.314166876e-03f,
+-1.308636962e-03f, -1.303105061e-03f, -1.297571184e-03f, -1.292035339e-03f, -1.286497537e-03f, -1.280957786e-03f, -1.275416098e-03f, -1.269872481e-03f, -1.264326945e-03f, -1.258779499e-03f,
+-1.253230154e-03f, -1.247678920e-03f, -1.242125805e-03f, -1.236570819e-03f, -1.231013973e-03f, -1.225455276e-03f, -1.219894737e-03f, -1.214332367e-03f, -1.208768174e-03f, -1.203202170e-03f,
+-1.197634362e-03f, -1.192064762e-03f, -1.186493379e-03f, -1.180920222e-03f, -1.175345301e-03f, -1.169768627e-03f, -1.164190208e-03f, -1.158610055e-03f, -1.153028177e-03f, -1.147444583e-03f,
+-1.141859285e-03f, -1.136272291e-03f, -1.130683610e-03f, -1.125093254e-03f, -1.119501232e-03f, -1.113907552e-03f, -1.108312226e-03f, -1.102715263e-03f, -1.097116672e-03f, -1.091516464e-03f,
+-1.085914648e-03f, -1.080311233e-03f, -1.074706231e-03f, -1.069099649e-03f, -1.063491499e-03f, -1.057881790e-03f, -1.052270532e-03f, -1.046657734e-03f, -1.041043406e-03f, -1.035427558e-03f,
+-1.029810201e-03f, -1.024191342e-03f, -1.018570994e-03f, -1.012949164e-03f, -1.007325863e-03f, -1.001701102e-03f, -9.960748883e-04f, -9.904472333e-04f, -9.848181465e-04f, -9.791876376e-04f,
+-9.735557165e-04f, -9.679223930e-04f, -9.622876768e-04f, -9.566515777e-04f, -9.510141056e-04f, -9.453752704e-04f, -9.397350817e-04f, -9.340935494e-04f, -9.284506833e-04f, -9.228064933e-04f,
+-9.171609891e-04f, -9.115141807e-04f, -9.058660777e-04f, -9.002166901e-04f, -8.945660276e-04f, -8.889141001e-04f, -8.832609175e-04f, -8.776064894e-04f, -8.719508259e-04f, -8.662939367e-04f,
+-8.606358316e-04f, -8.549765206e-04f, -8.493160133e-04f, -8.436543198e-04f, -8.379914498e-04f, -8.323274131e-04f, -8.266622196e-04f, -8.209958792e-04f, -8.153284017e-04f, -8.096597970e-04f,
+-8.039900748e-04f, -7.983192452e-04f, -7.926473178e-04f, -7.869743026e-04f, -7.813002095e-04f, -7.756250482e-04f, -7.699488287e-04f, -7.642715608e-04f, -7.585932544e-04f, -7.529139193e-04f,
+-7.472335655e-04f, -7.415522027e-04f, -7.358698408e-04f, -7.301864898e-04f, -7.245021595e-04f, -7.188168597e-04f, -7.131306003e-04f, -7.074433912e-04f, -7.017552423e-04f, -6.960661635e-04f,
+-6.903761646e-04f, -6.846852555e-04f, -6.789934461e-04f, -6.733007463e-04f, -6.676071659e-04f, -6.619127149e-04f, -6.562174031e-04f, -6.505212404e-04f, -6.448242367e-04f, -6.391264019e-04f,
+-6.334277458e-04f, -6.277282784e-04f, -6.220280095e-04f, -6.163269491e-04f, -6.106251070e-04f, -6.049224931e-04f, -5.992191174e-04f, -5.935149896e-04f, -5.878101198e-04f, -5.821045177e-04f,
+-5.763981934e-04f, -5.706911566e-04f, -5.649834173e-04f, -5.592749855e-04f, -5.535658709e-04f, -5.478560835e-04f, -5.421456331e-04f, -5.364345298e-04f, -5.307227834e-04f, -5.250104038e-04f,
+-5.192974008e-04f, -5.135837845e-04f, -5.078695647e-04f, -5.021547513e-04f, -4.964393542e-04f, -4.907233833e-04f, -4.850068486e-04f, -4.792897599e-04f, -4.735721271e-04f, -4.678539602e-04f,
+-4.621352691e-04f, -4.564160636e-04f, -4.506963537e-04f, -4.449761493e-04f, -4.392554603e-04f, -4.335342966e-04f, -4.278126681e-04f, -4.220905847e-04f, -4.163680564e-04f, -4.106450931e-04f,
+-4.049217046e-04f, -3.991979009e-04f, -3.934736918e-04f, -3.877490874e-04f, -3.820240975e-04f, -3.762987320e-04f, -3.705730009e-04f, -3.648469140e-04f, -3.591204813e-04f, -3.533937126e-04f,
+-3.476666179e-04f, -3.419392072e-04f, -3.362114903e-04f, -3.304834771e-04f, -3.247551775e-04f, -3.190266015e-04f, -3.132977590e-04f, -3.075686598e-04f, -3.018393140e-04f, -2.961097314e-04f,
+-2.903799219e-04f, -2.846498954e-04f, -2.789196619e-04f, -2.731892313e-04f, -2.674586134e-04f, -2.617278183e-04f, -2.559968557e-04f, -2.502657357e-04f, -2.445344681e-04f, -2.388030628e-04f,
+-2.330715297e-04f, -2.273398789e-04f, -2.216081201e-04f, -2.158762633e-04f, -2.101443184e-04f, -2.044122953e-04f, -1.986802039e-04f, -1.929480541e-04f, -1.872158559e-04f, -1.814836191e-04f,
+-1.757513536e-04f, -1.700190694e-04f, -1.642867764e-04f, -1.585544844e-04f, -1.528222034e-04f, -1.470899433e-04f, -1.413577140e-04f, -1.356255254e-04f, -1.298933874e-04f, -1.241613099e-04f,
+-1.184293027e-04f, -1.126973759e-04f, -1.069655393e-04f, -1.012338028e-04f, -9.550217628e-05f, -8.977066969e-05f, -8.403929290e-05f, -7.830805581e-05f, -7.257696832e-05f, -6.684604034e-05f,
+-6.111528174e-05f, -5.538470244e-05f, -4.965431231e-05f, -4.392412127e-05f, -3.819413919e-05f, -3.246437598e-05f, -2.673484151e-05f, -2.100554569e-05f, -1.527649840e-05f, -9.547709531e-06f,
+-3.819188968e-06f, 1.909053402e-06f, 7.637007694e-06f, 1.336466402e-05f, 1.909201250e-05f, 2.481904326e-05f, 3.054574640e-05f, 3.627211205e-05f, 4.199813033e-05f, 4.772379137e-05f,
+5.344908528e-05f, 5.917400219e-05f, 6.489853223e-05f, 7.062266551e-05f, 7.634639218e-05f, 8.206970235e-05f, 8.779258616e-05f, 9.351503374e-05f, 9.923703522e-05f, 1.049585807e-04f,
+1.106796604e-04f, 1.164002644e-04f, 1.221203828e-04f, 1.278400059e-04f, 1.335591236e-04f, 1.392777262e-04f, 1.449958038e-04f, 1.507133466e-04f, 1.564303447e-04f, 1.621467882e-04f,
+1.678626673e-04f, 1.735779721e-04f, 1.792926929e-04f, 1.850068197e-04f, 1.907203427e-04f, 1.964332520e-04f, 2.021455379e-04f, 2.078571905e-04f, 2.135681999e-04f, 2.192785563e-04f,
+2.249882498e-04f, 2.306972707e-04f, 2.364056091e-04f, 2.421132552e-04f, 2.478201990e-04f, 2.535264310e-04f, 2.592319410e-04f, 2.649367195e-04f, 2.706407565e-04f, 2.763440422e-04f,
+2.820465668e-04f, 2.877483205e-04f, 2.934492935e-04f, 2.991494759e-04f, 3.048488579e-04f, 3.105474298e-04f, 3.162451817e-04f, 3.219421039e-04f, 3.276381864e-04f, 3.333334196e-04f,
+3.390277936e-04f, 3.447212986e-04f, 3.504139248e-04f, 3.561056624e-04f, 3.617965017e-04f, 3.674864328e-04f, 3.731754460e-04f, 3.788635314e-04f, 3.845506794e-04f, 3.902368800e-04f,
+3.959221236e-04f, 4.016064003e-04f, 4.072897004e-04f, 4.129720141e-04f, 4.186533316e-04f, 4.243336431e-04f, 4.300129390e-04f, 4.356912094e-04f, 4.413684446e-04f, 4.470446348e-04f,
+4.527197702e-04f, 4.583938411e-04f, 4.640668378e-04f, 4.697387505e-04f, 4.754095694e-04f, 4.810792848e-04f, 4.867478870e-04f, 4.924153661e-04f, 4.980817126e-04f, 5.037469166e-04f,
+5.094109684e-04f, 5.150738583e-04f, 5.207355765e-04f, 5.263961134e-04f, 5.320554592e-04f, 5.377136041e-04f, 5.433705385e-04f, 5.490262526e-04f, 5.546807368e-04f, 5.603339813e-04f,
+5.659859764e-04f, 5.716367124e-04f, 5.772861796e-04f, 5.829343684e-04f, 5.885812689e-04f, 5.942268715e-04f, 5.998711666e-04f, 6.055141444e-04f, 6.111557952e-04f, 6.167961094e-04f,
+6.224350773e-04f, 6.280726892e-04f, 6.337089354e-04f, 6.393438063e-04f, 6.449772921e-04f, 6.506093833e-04f, 6.562400701e-04f, 6.618693429e-04f, 6.674971921e-04f, 6.731236079e-04f,
+6.787485808e-04f, 6.843721010e-04f, 6.899941590e-04f, 6.956147451e-04f, 7.012338496e-04f, 7.068514630e-04f, 7.124675755e-04f, 7.180821776e-04f, 7.236952596e-04f, 7.293068119e-04f,
+7.349168248e-04f, 7.405252889e-04f, 7.461321943e-04f, 7.517375316e-04f, 7.573412911e-04f, 7.629434633e-04f, 7.685440384e-04f, 7.741430070e-04f, 7.797403594e-04f, 7.853360860e-04f,
+7.909301772e-04f, 7.965226235e-04f, 8.021134153e-04f, 8.077025430e-04f, 8.132899969e-04f, 8.188757676e-04f, 8.244598455e-04f, 8.300422210e-04f, 8.356228845e-04f, 8.412018265e-04f,
+8.467790374e-04f, 8.523545077e-04f, 8.579282279e-04f, 8.635001883e-04f, 8.690703794e-04f, 8.746387918e-04f, 8.802054158e-04f, 8.857702420e-04f, 8.913332607e-04f, 8.968944626e-04f,
+9.024538380e-04f, 9.080113775e-04f, 9.135670714e-04f, 9.191209105e-04f, 9.246728850e-04f, 9.302229856e-04f, 9.357712027e-04f, 9.413175268e-04f, 9.468619484e-04f, 9.524044581e-04f,
+9.579450463e-04f, 9.634837037e-04f, 9.690204206e-04f, 9.745551877e-04f, 9.800879955e-04f, 9.856188344e-04f, 9.911476951e-04f, 9.966745681e-04f, 1.002199444e-03f, 1.007722313e-03f,
+1.013243166e-03f, 1.018761994e-03f, 1.024278787e-03f, 1.029793535e-03f, 1.035306230e-03f, 1.040816861e-03f, 1.046325420e-03f, 1.051831896e-03f, 1.057336282e-03f, 1.062838566e-03f,
+1.068338740e-03f, 1.073836794e-03f, 1.079332720e-03f, 1.084826506e-03f, 1.090318145e-03f, 1.095807627e-03f, 1.101294942e-03f, 1.106780081e-03f, 1.112263035e-03f, 1.117743794e-03f,
+1.123222349e-03f, 1.128698690e-03f, 1.134172809e-03f, 1.139644696e-03f, 1.145114340e-03f, 1.150581735e-03f, 1.156046869e-03f, 1.161509733e-03f, 1.166970319e-03f, 1.172428616e-03f,
+1.177884616e-03f, 1.183338309e-03f, 1.188789686e-03f, 1.194238738e-03f, 1.199685455e-03f, 1.205129828e-03f, 1.210571848e-03f, 1.216011505e-03f, 1.221448790e-03f, 1.226883694e-03f,
+1.232316207e-03f, 1.237746321e-03f, 1.243174026e-03f, 1.248599313e-03f, 1.254022172e-03f, 1.259442595e-03f, 1.264860571e-03f, 1.270276093e-03f, 1.275689150e-03f, 1.281099733e-03f,
+1.286507833e-03f, 1.291913441e-03f, 1.297316548e-03f, 1.302717145e-03f, 1.308115221e-03f, 1.313510769e-03f, 1.318903778e-03f, 1.324294240e-03f, 1.329682145e-03f, 1.335067485e-03f,
+1.340450250e-03f, 1.345830431e-03f, 1.351208018e-03f, 1.356583003e-03f, 1.361955377e-03f, 1.367325129e-03f, 1.372692252e-03f, 1.378056736e-03f, 1.383418571e-03f, 1.388777750e-03f,
+1.394134262e-03f, 1.399488098e-03f, 1.404839250e-03f, 1.410187708e-03f, 1.415533462e-03f, 1.420876505e-03f, 1.426216827e-03f, 1.431554419e-03f, 1.436889271e-03f, 1.442221375e-03f,
+1.447550722e-03f, 1.452877302e-03f, 1.458201106e-03f, 1.463522126e-03f, 1.468840352e-03f, 1.474155776e-03f, 1.479468387e-03f, 1.484778178e-03f, 1.490085139e-03f, 1.495389260e-03f,
+1.500690534e-03f, 1.505988951e-03f, 1.511284502e-03f, 1.516577178e-03f, 1.521866971e-03f, 1.527153870e-03f, 1.532437867e-03f, 1.537718953e-03f, 1.542997119e-03f, 1.548272356e-03f,
+1.553544656e-03f, 1.558814008e-03f, 1.564080405e-03f, 1.569343837e-03f, 1.574604295e-03f, 1.579861771e-03f, 1.585116255e-03f, 1.590367738e-03f, 1.595616212e-03f, 1.600861668e-03f,
+1.606104096e-03f, 1.611343489e-03f, 1.616579836e-03f, 1.621813129e-03f, 1.627043359e-03f, 1.632270517e-03f, 1.637494595e-03f, 1.642715583e-03f, 1.647933473e-03f, 1.653148255e-03f,
+1.658359922e-03f, 1.663568463e-03f, 1.668773871e-03f, 1.673976136e-03f, 1.679175249e-03f, 1.684371202e-03f, 1.689563986e-03f, 1.694753592e-03f, 1.699940012e-03f, 1.705123235e-03f,
+1.710303255e-03f, 1.715480061e-03f, 1.720653645e-03f, 1.725823998e-03f, 1.730991112e-03f, 1.736154978e-03f, 1.741315587e-03f, 1.746472930e-03f, 1.751626998e-03f, 1.756777783e-03f,
+1.761925276e-03f, 1.767069468e-03f, 1.772210351e-03f, 1.777347915e-03f, 1.782482153e-03f, 1.787613055e-03f, 1.792740613e-03f, 1.797864817e-03f, 1.802985660e-03f, 1.808103133e-03f,
+1.813217226e-03f, 1.818327932e-03f, 1.823435241e-03f, 1.828539146e-03f, 1.833639636e-03f, 1.838736704e-03f, 1.843830342e-03f, 1.848920539e-03f, 1.854007288e-03f, 1.859090581e-03f,
+1.864170408e-03f, 1.869246761e-03f, 1.874319631e-03f, 1.879389010e-03f, 1.884454889e-03f, 1.889517260e-03f, 1.894576113e-03f, 1.899631441e-03f, 1.904683235e-03f, 1.909731486e-03f,
+1.914776186e-03f, 1.919817327e-03f, 1.924854898e-03f, 1.929888893e-03f, 1.934919303e-03f, 1.939946118e-03f, 1.944969332e-03f, 1.949988934e-03f, 1.955004917e-03f, 1.960017272e-03f,
+1.965025991e-03f, 1.970031065e-03f, 1.975032485e-03f, 1.980030244e-03f, 1.985024333e-03f, 1.990014742e-03f, 1.995001465e-03f, 1.999984492e-03f, 2.004963816e-03f, 2.009939427e-03f,
+2.014911317e-03f, 2.019879477e-03f, 2.024843901e-03f, 2.029804578e-03f, 2.034761500e-03f, 2.039714660e-03f, 2.044664049e-03f, 2.049609659e-03f, 2.054551480e-03f, 2.059489505e-03f,
+2.064423726e-03f, 2.069354134e-03f, 2.074280720e-03f, 2.079203477e-03f, 2.084122396e-03f, 2.089037469e-03f, 2.093948687e-03f, 2.098856043e-03f, 2.103759527e-03f, 2.108659132e-03f,
+2.113554850e-03f, 2.118446671e-03f, 2.123334589e-03f, 2.128218594e-03f, 2.133098678e-03f, 2.137974834e-03f, 2.142847052e-03f, 2.147715325e-03f, 2.152579644e-03f, 2.157440002e-03f,
+2.162296390e-03f, 2.167148799e-03f, 2.171997222e-03f, 2.176841651e-03f, 2.181682077e-03f, 2.186518492e-03f, 2.191350887e-03f, 2.196179256e-03f, 2.201003589e-03f, 2.205823879e-03f,
+2.210640118e-03f, 2.215452296e-03f, 2.220260407e-03f, 2.225064442e-03f, 2.229864392e-03f, 2.234660251e-03f, 2.239452009e-03f, 2.244239660e-03f, 2.249023193e-03f, 2.253802603e-03f,
+2.258577879e-03f, 2.263349016e-03f, 2.268116003e-03f, 2.272878834e-03f, 2.277637501e-03f, 2.282391995e-03f, 2.287142308e-03f, 2.291888432e-03f, 2.296630360e-03f, 2.301368083e-03f,
+2.306101594e-03f, 2.310830884e-03f, 2.315555946e-03f, 2.320276771e-03f, 2.324993351e-03f, 2.329705679e-03f, 2.334413747e-03f, 2.339117547e-03f, 2.343817070e-03f, 2.348512310e-03f,
+2.353203257e-03f, 2.357889905e-03f, 2.362572245e-03f, 2.367250269e-03f, 2.371923969e-03f, 2.376593339e-03f, 2.381258369e-03f, 2.385919052e-03f, 2.390575380e-03f, 2.395227346e-03f,
+2.399874941e-03f, 2.404518157e-03f, 2.409156987e-03f, 2.413791424e-03f, 2.418421459e-03f, 2.423047084e-03f, 2.427668291e-03f, 2.432285074e-03f, 2.436897424e-03f, 2.441505333e-03f,
+2.446108794e-03f, 2.450707799e-03f, 2.455302340e-03f, 2.459892410e-03f, 2.464478000e-03f, 2.469059104e-03f, 2.473635713e-03f, 2.478207819e-03f, 2.482775416e-03f, 2.487338495e-03f,
+2.491897049e-03f, 2.496451069e-03f, 2.501000549e-03f, 2.505545481e-03f, 2.510085857e-03f, 2.514621670e-03f, 2.519152911e-03f, 2.523679574e-03f, 2.528201650e-03f, 2.532719133e-03f,
+2.537232014e-03f, 2.541740286e-03f, 2.546243941e-03f, 2.550742972e-03f, 2.555237372e-03f, 2.559727132e-03f, 2.564212246e-03f, 2.568692705e-03f, 2.573168503e-03f, 2.577639631e-03f,
+2.582106082e-03f, 2.586567850e-03f, 2.591024925e-03f, 2.595477301e-03f, 2.599924971e-03f, 2.604367926e-03f, 2.608806160e-03f, 2.613239665e-03f, 2.617668433e-03f, 2.622092458e-03f,
+2.626511731e-03f, 2.630926246e-03f, 2.635335995e-03f, 2.639740970e-03f, 2.644141164e-03f, 2.648536570e-03f, 2.652927181e-03f, 2.657312989e-03f, 2.661693986e-03f, 2.666070166e-03f,
+2.670441521e-03f, 2.674808044e-03f, 2.679169727e-03f, 2.683526564e-03f, 2.687878546e-03f, 2.692225667e-03f, 2.696567920e-03f, 2.700905296e-03f, 2.705237790e-03f, 2.709565393e-03f,
+2.713888098e-03f, 2.718205899e-03f, 2.722518787e-03f, 2.726826757e-03f, 2.731129799e-03f, 2.735427908e-03f, 2.739721077e-03f, 2.744009297e-03f, 2.748292562e-03f, 2.752570864e-03f,
+2.756844197e-03f, 2.761112554e-03f, 2.765375927e-03f, 2.769634308e-03f, 2.773887692e-03f, 2.778136071e-03f, 2.782379438e-03f, 2.786617785e-03f, 2.790851106e-03f, 2.795079393e-03f,
+2.799302640e-03f, 2.803520840e-03f, 2.807733985e-03f, 2.811942068e-03f, 2.816145083e-03f, 2.820343022e-03f, 2.824535879e-03f, 2.828723646e-03f, 2.832906316e-03f, 2.837083883e-03f,
+2.841256339e-03f, 2.845423678e-03f, 2.849585892e-03f, 2.853742975e-03f, 2.857894920e-03f, 2.862041719e-03f, 2.866183366e-03f, 2.870319855e-03f, 2.874451177e-03f, 2.878577326e-03f,
+2.882698296e-03f, 2.886814080e-03f, 2.890924669e-03f, 2.895030059e-03f, 2.899130242e-03f, 2.903225210e-03f, 2.907314958e-03f, 2.911399479e-03f, 2.915478765e-03f, 2.919552809e-03f,
+2.923621606e-03f, 2.927685149e-03f, 2.931743430e-03f, 2.935796442e-03f, 2.939844180e-03f, 2.943886636e-03f, 2.947923804e-03f, 2.951955677e-03f, 2.955982248e-03f, 2.960003510e-03f,
+2.964019457e-03f, 2.968030082e-03f, 2.972035379e-03f, 2.976035341e-03f, 2.980029961e-03f, 2.984019232e-03f, 2.988003148e-03f, 2.991981703e-03f, 2.995954889e-03f, 2.999922700e-03f,
+3.003885130e-03f, 3.007842172e-03f, 3.011793819e-03f, 3.015740065e-03f, 3.019680903e-03f, 3.023616327e-03f, 3.027546329e-03f, 3.031470905e-03f, 3.035390047e-03f, 3.039303748e-03f,
+3.043212002e-03f, 3.047114803e-03f, 3.051012145e-03f, 3.054904020e-03f, 3.058790422e-03f, 3.062671345e-03f, 3.066546782e-03f, 3.070416728e-03f, 3.074281175e-03f, 3.078140117e-03f,
+3.081993547e-03f, 3.085841461e-03f, 3.089683850e-03f, 3.093520708e-03f, 3.097352030e-03f, 3.101177809e-03f, 3.104998039e-03f, 3.108812712e-03f, 3.112621824e-03f, 3.116425367e-03f,
+3.120223336e-03f, 3.124015724e-03f, 3.127802524e-03f, 3.131583731e-03f, 3.135359338e-03f, 3.139129339e-03f, 3.142893728e-03f, 3.146652499e-03f, 3.150405645e-03f, 3.154153160e-03f,
+3.157895038e-03f, 3.161631272e-03f, 3.165361857e-03f, 3.169086787e-03f, 3.172806055e-03f, 3.176519655e-03f, 3.180227581e-03f, 3.183929826e-03f, 3.187626386e-03f, 3.191317253e-03f,
+3.195002421e-03f, 3.198681885e-03f, 3.202355639e-03f, 3.206023675e-03f, 3.209685989e-03f, 3.213342574e-03f, 3.216993424e-03f, 3.220638534e-03f, 3.224277896e-03f, 3.227911506e-03f,
+3.231539357e-03f, 3.235161443e-03f, 3.238777758e-03f, 3.242388296e-03f, 3.245993051e-03f, 3.249592018e-03f, 3.253185190e-03f, 3.256772562e-03f, 3.260354127e-03f, 3.263929880e-03f,
+3.267499815e-03f, 3.271063925e-03f, 3.274622206e-03f, 3.278174651e-03f, 3.281721254e-03f, 3.285262009e-03f, 3.288796911e-03f, 3.292325954e-03f, 3.295849132e-03f, 3.299366439e-03f,
+3.302877870e-03f, 3.306383418e-03f, 3.309883078e-03f, 3.313376845e-03f, 3.316864711e-03f, 3.320346673e-03f, 3.323822723e-03f, 3.327292856e-03f, 3.330757067e-03f, 3.334215350e-03f,
+3.337667699e-03f, 3.341114108e-03f, 3.344554573e-03f, 3.347989086e-03f, 3.351417643e-03f, 3.354840238e-03f, 3.358256865e-03f, 3.361667519e-03f, 3.365072194e-03f, 3.368470884e-03f,
+3.371863584e-03f, 3.375250289e-03f, 3.378630992e-03f, 3.382005689e-03f, 3.385374373e-03f, 3.388737040e-03f, 3.392093683e-03f, 3.395444297e-03f, 3.398788877e-03f, 3.402127418e-03f,
+3.405459913e-03f, 3.408786357e-03f, 3.412106745e-03f, 3.415421072e-03f, 3.418729331e-03f, 3.422031519e-03f, 3.425327628e-03f, 3.428617654e-03f, 3.431901591e-03f, 3.435179435e-03f,
+3.438451179e-03f, 3.441716818e-03f, 3.444976347e-03f, 3.448229761e-03f, 3.451477054e-03f, 3.454718222e-03f, 3.457953258e-03f, 3.461182157e-03f, 3.464404914e-03f, 3.467621525e-03f,
+3.470831983e-03f, 3.474036283e-03f, 3.477234421e-03f, 3.480426390e-03f, 3.483612186e-03f, 3.486791804e-03f, 3.489965238e-03f, 3.493132484e-03f, 3.496293535e-03f, 3.499448387e-03f,
+3.502597035e-03f, 3.505739473e-03f, 3.508875697e-03f, 3.512005701e-03f, 3.515129480e-03f, 3.518247030e-03f, 3.521358344e-03f, 3.524463419e-03f, 3.527562248e-03f, 3.530654828e-03f,
+3.533741152e-03f, 3.536821216e-03f, 3.539895015e-03f, 3.542962544e-03f, 3.546023798e-03f, 3.549078771e-03f, 3.552127460e-03f, 3.555169858e-03f, 3.558205962e-03f, 3.561235765e-03f,
+3.564259264e-03f, 3.567276453e-03f, 3.570287327e-03f, 3.573291881e-03f, 3.576290112e-03f, 3.579282013e-03f, 3.582267579e-03f, 3.585246807e-03f, 3.588219691e-03f, 3.591186226e-03f,
+3.594146408e-03f, 3.597100232e-03f, 3.600047692e-03f, 3.602988785e-03f, 3.605923505e-03f, 3.608851848e-03f, 3.611773808e-03f, 3.614689382e-03f, 3.617598564e-03f, 3.620501351e-03f,
+3.623397736e-03f, 3.626287715e-03f, 3.629171284e-03f, 3.632048438e-03f, 3.634919173e-03f, 3.637783483e-03f, 3.640641364e-03f, 3.643492812e-03f, 3.646337822e-03f, 3.649176389e-03f,
+3.652008509e-03f, 3.654834177e-03f, 3.657653388e-03f, 3.660466138e-03f, 3.663272423e-03f, 3.666072238e-03f, 3.668865578e-03f, 3.671652439e-03f, 3.674432817e-03f, 3.677206706e-03f,
+3.679974103e-03f, 3.682735003e-03f, 3.685489402e-03f, 3.688237294e-03f, 3.690978677e-03f, 3.693713544e-03f, 3.696441893e-03f, 3.699163718e-03f, 3.701879015e-03f, 3.704587780e-03f,
+3.707290008e-03f, 3.709985696e-03f, 3.712674838e-03f, 3.715357430e-03f, 3.718033469e-03f, 3.720702949e-03f, 3.723365867e-03f, 3.726022218e-03f, 3.728671998e-03f, 3.731315203e-03f,
+3.733951828e-03f, 3.736581869e-03f, 3.739205323e-03f, 3.741822184e-03f, 3.744432449e-03f, 3.747036113e-03f, 3.749633173e-03f, 3.752223624e-03f, 3.754807461e-03f, 3.757384682e-03f,
+3.759955281e-03f, 3.762519255e-03f, 3.765076599e-03f, 3.767627310e-03f, 3.770171383e-03f, 3.772708814e-03f, 3.775239600e-03f, 3.777763735e-03f, 3.780281217e-03f, 3.782792041e-03f,
+3.785296203e-03f, 3.787793699e-03f, 3.790284525e-03f, 3.792768678e-03f, 3.795246152e-03f, 3.797716945e-03f, 3.800181052e-03f, 3.802638469e-03f, 3.805089193e-03f, 3.807533220e-03f,
+3.809970545e-03f, 3.812401165e-03f, 3.814825076e-03f, 3.817242274e-03f, 3.819652755e-03f, 3.822056515e-03f, 3.824453552e-03f, 3.826843859e-03f, 3.829227435e-03f, 3.831604275e-03f,
+3.833974376e-03f, 3.836337733e-03f, 3.838694343e-03f, 3.841044202e-03f, 3.843387307e-03f, 3.845723653e-03f, 3.848053238e-03f, 3.850376057e-03f, 3.852692106e-03f, 3.855001382e-03f,
+3.857303882e-03f, 3.859599602e-03f, 3.861888537e-03f, 3.864170685e-03f, 3.866446042e-03f, 3.868714604e-03f, 3.870976368e-03f, 3.873231330e-03f, 3.875479486e-03f, 3.877720834e-03f,
+3.879955369e-03f, 3.882183088e-03f, 3.884403987e-03f, 3.886618063e-03f, 3.888825313e-03f, 3.891025733e-03f, 3.893219319e-03f, 3.895406068e-03f, 3.897585977e-03f, 3.899759042e-03f,
+3.901925260e-03f, 3.904084627e-03f, 3.906237140e-03f, 3.908382796e-03f, 3.910521591e-03f, 3.912653522e-03f, 3.914778585e-03f, 3.916896778e-03f, 3.919008097e-03f, 3.921112538e-03f,
+3.923210098e-03f, 3.925300775e-03f, 3.927384564e-03f, 3.929461463e-03f, 3.931531468e-03f, 3.933594575e-03f, 3.935650783e-03f, 3.937700088e-03f, 3.939742485e-03f, 3.941777973e-03f,
+3.943806548e-03f, 3.945828207e-03f, 3.947842946e-03f, 3.949850763e-03f, 3.951851655e-03f, 3.953845617e-03f, 3.955832648e-03f, 3.957812745e-03f, 3.959785903e-03f, 3.961752120e-03f,
+3.963711393e-03f, 3.965663719e-03f, 3.967609095e-03f, 3.969547518e-03f, 3.971478985e-03f, 3.973403492e-03f, 3.975321038e-03f, 3.977231618e-03f, 3.979135230e-03f, 3.981031872e-03f,
+3.982921539e-03f, 3.984804230e-03f, 3.986679941e-03f, 3.988548669e-03f, 3.990410412e-03f, 3.992265166e-03f, 3.994112929e-03f, 3.995953698e-03f, 3.997787470e-03f, 3.999614243e-03f,
+4.001434013e-03f, 4.003246777e-03f, 4.005052533e-03f, 4.006851279e-03f, 4.008643011e-03f, 4.010427726e-03f, 4.012205423e-03f, 4.013976097e-03f, 4.015739747e-03f, 4.017496370e-03f,
+4.019245962e-03f, 4.020988522e-03f, 4.022724047e-03f, 4.024452534e-03f, 4.026173980e-03f, 4.027888383e-03f, 4.029595741e-03f, 4.031296049e-03f, 4.032989307e-03f, 4.034675512e-03f,
+4.036354660e-03f, 4.038026749e-03f, 4.039691778e-03f, 4.041349742e-03f, 4.043000640e-03f, 4.044644470e-03f, 4.046281228e-03f, 4.047910913e-03f, 4.049533521e-03f, 4.051149051e-03f,
+4.052757499e-03f, 4.054358864e-03f, 4.055953143e-03f, 4.057540334e-03f, 4.059120434e-03f, 4.060693441e-03f, 4.062259353e-03f, 4.063818167e-03f, 4.065369880e-03f, 4.066914491e-03f,
+4.068451998e-03f, 4.069982397e-03f, 4.071505687e-03f, 4.073021865e-03f, 4.074530929e-03f, 4.076032877e-03f, 4.077527707e-03f, 4.079015416e-03f, 4.080496002e-03f, 4.081969463e-03f,
+4.083435797e-03f, 4.084895001e-03f, 4.086347074e-03f, 4.087792013e-03f, 4.089229816e-03f, 4.090660481e-03f, 4.092084005e-03f, 4.093500388e-03f, 4.094909626e-03f, 4.096311718e-03f,
+4.097706661e-03f, 4.099094454e-03f, 4.100475094e-03f, 4.101848579e-03f, 4.103214908e-03f, 4.104574078e-03f, 4.105926088e-03f, 4.107270935e-03f, 4.108608617e-03f, 4.109939133e-03f,
+4.111262480e-03f, 4.112578657e-03f, 4.113887662e-03f, 4.115189492e-03f, 4.116484146e-03f, 4.117771622e-03f, 4.119051919e-03f, 4.120325033e-03f, 4.121590964e-03f, 4.122849710e-03f,
+4.124101268e-03f, 4.125345637e-03f, 4.126582816e-03f, 4.127812802e-03f, 4.129035593e-03f, 4.130251189e-03f, 4.131459586e-03f, 4.132660784e-03f, 4.133854781e-03f, 4.135041574e-03f,
+4.136221163e-03f, 4.137393546e-03f, 4.138558720e-03f, 4.139716685e-03f, 4.140867439e-03f, 4.142010979e-03f, 4.143147305e-03f, 4.144276414e-03f, 4.145398306e-03f, 4.146512979e-03f,
+4.147620430e-03f, 4.148720659e-03f, 4.149813664e-03f, 4.150899443e-03f, 4.151977996e-03f, 4.153049320e-03f, 4.154113413e-03f, 4.155170275e-03f, 4.156219904e-03f, 4.157262299e-03f,
+4.158297458e-03f, 4.159325379e-03f, 4.160346061e-03f, 4.161359504e-03f, 4.162365705e-03f, 4.163364663e-03f, 4.164356376e-03f, 4.165340844e-03f, 4.166318065e-03f, 4.167288038e-03f,
+4.168250761e-03f, 4.169206233e-03f, 4.170154453e-03f, 4.171095419e-03f, 4.172029131e-03f, 4.172955586e-03f, 4.173874784e-03f, 4.174786724e-03f, 4.175691404e-03f, 4.176588823e-03f,
+4.177478980e-03f, 4.178361874e-03f, 4.179237503e-03f, 4.180105867e-03f, 4.180966964e-03f, 4.181820793e-03f, 4.182667354e-03f, 4.183506644e-03f, 4.184338663e-03f, 4.185163409e-03f,
+4.185980883e-03f, 4.186791082e-03f, 4.187594006e-03f, 4.188389653e-03f, 4.189178023e-03f, 4.189959114e-03f, 4.190732926e-03f, 4.191499458e-03f, 4.192258709e-03f, 4.193010677e-03f,
+4.193755361e-03f, 4.194492762e-03f, 4.195222878e-03f, 4.195945707e-03f, 4.196661250e-03f, 4.197369505e-03f, 4.198070471e-03f, 4.198764148e-03f, 4.199450535e-03f, 4.200129631e-03f,
+4.200801435e-03f, 4.201465946e-03f, 4.202123163e-03f, 4.202773087e-03f, 4.203415715e-03f, 4.204051047e-03f, 4.204679083e-03f, 4.205299822e-03f, 4.205913263e-03f, 4.206519405e-03f,
+4.207118248e-03f, 4.207709791e-03f, 4.208294033e-03f, 4.208870974e-03f, 4.209440613e-03f, 4.210002950e-03f, 4.210557983e-03f, 4.211105713e-03f, 4.211646138e-03f, 4.212179259e-03f,
+4.212705074e-03f, 4.213223583e-03f, 4.213734785e-03f, 4.214238680e-03f, 4.214735268e-03f, 4.215224548e-03f, 4.215706519e-03f, 4.216181181e-03f, 4.216648534e-03f, 4.217108577e-03f,
+4.217561309e-03f, 4.218006731e-03f, 4.218444842e-03f, 4.218875641e-03f, 4.219299128e-03f, 4.219715303e-03f, 4.220124165e-03f, 4.220525714e-03f, 4.220919950e-03f, 4.221306872e-03f,
+4.221686480e-03f, 4.222058774e-03f, 4.222423754e-03f, 4.222781418e-03f, 4.223131768e-03f, 4.223474802e-03f, 4.223810521e-03f, 4.224138924e-03f, 4.224460012e-03f, 4.224773783e-03f,
+4.225080238e-03f, 4.225379376e-03f, 4.225671198e-03f, 4.225955703e-03f, 4.226232891e-03f, 4.226502762e-03f, 4.226765316e-03f, 4.227020553e-03f, 4.227268472e-03f, 4.227509074e-03f,
+4.227742359e-03f, 4.227968327e-03f, 4.228186977e-03f, 4.228398309e-03f, 4.228602324e-03f, 4.228799022e-03f, 4.228988402e-03f, 4.229170465e-03f, 4.229345211e-03f, 4.229512639e-03f,
+4.229672750e-03f, 4.229825544e-03f, 4.229971021e-03f, 4.230109181e-03f, 4.230240024e-03f, 4.230363551e-03f, 4.230479761e-03f, 4.230588655e-03f, 4.230690232e-03f, 4.230784494e-03f,
+4.230871440e-03f, 4.230951071e-03f, 4.231023386e-03f, 4.231088386e-03f, 4.231146071e-03f, 4.231196442e-03f, 4.231239498e-03f, 4.231275241e-03f, 4.231303670e-03f, 4.231324785e-03f,
+4.231338587e-03f, 4.231345077e-03f, 4.231344255e-03f, 4.231336120e-03f, 4.231320674e-03f, 4.231297916e-03f, 4.231267848e-03f, 4.231230469e-03f, 4.231185781e-03f, 4.231133783e-03f,
+4.231074476e-03f, 4.231007860e-03f, 4.230933936e-03f, 4.230852704e-03f, 4.230764166e-03f, 4.230668321e-03f, 4.230565169e-03f, 4.230454712e-03f, 4.230336951e-03f, 4.230211884e-03f,
+4.230079514e-03f, 4.229939841e-03f, 4.229792865e-03f, 4.229638587e-03f, 4.229477008e-03f, 4.229308128e-03f, 4.229131947e-03f, 4.228948468e-03f, 4.228757690e-03f, 4.228559613e-03f,
+4.228354239e-03f, 4.228141569e-03f, 4.227921603e-03f, 4.227694342e-03f, 4.227459786e-03f, 4.227217936e-03f, 4.226968794e-03f, 4.226712360e-03f, 4.226448634e-03f, 4.226177619e-03f,
+4.225899313e-03f, 4.225613719e-03f, 4.225320837e-03f, 4.225020668e-03f, 4.224713212e-03f, 4.224398472e-03f, 4.224076447e-03f, 4.223747139e-03f, 4.223410548e-03f, 4.223066676e-03f,
+4.222715523e-03f, 4.222357090e-03f, 4.221991379e-03f, 4.221618390e-03f, 4.221238125e-03f, 4.220850584e-03f, 4.220455768e-03f, 4.220053679e-03f, 4.219644318e-03f, 4.219227685e-03f,
+4.218803781e-03f, 4.218372609e-03f, 4.217934168e-03f, 4.217488461e-03f, 4.217035487e-03f, 4.216575249e-03f, 4.216107747e-03f, 4.215632983e-03f, 4.215150957e-03f, 4.214661672e-03f,
+4.214165128e-03f, 4.213661326e-03f, 4.213150268e-03f, 4.212631954e-03f, 4.212106387e-03f, 4.211573567e-03f, 4.211033496e-03f, 4.210486175e-03f, 4.209931606e-03f, 4.209369788e-03f,
+4.208800725e-03f, 4.208224417e-03f, 4.207640866e-03f, 4.207050073e-03f, 4.206452039e-03f, 4.205846766e-03f, 4.205234255e-03f, 4.204614508e-03f, 4.203987526e-03f, 4.203353310e-03f,
+4.202711862e-03f, 4.202063184e-03f, 4.201407276e-03f, 4.200744141e-03f, 4.200073780e-03f, 4.199396195e-03f, 4.198711386e-03f, 4.198019356e-03f, 4.197320105e-03f, 4.196613637e-03f,
+4.195899951e-03f, 4.195179051e-03f, 4.194450937e-03f, 4.193715611e-03f, 4.192973074e-03f, 4.192223329e-03f, 4.191466377e-03f, 4.190702219e-03f, 4.189930857e-03f, 4.189152294e-03f,
+4.188366530e-03f, 4.187573568e-03f, 4.186773409e-03f, 4.185966055e-03f, 4.185151507e-03f, 4.184329768e-03f, 4.183500839e-03f, 4.182664721e-03f, 4.181821418e-03f, 4.180970930e-03f,
+4.180113260e-03f, 4.179248409e-03f, 4.178376379e-03f, 4.177497172e-03f, 4.176610789e-03f, 4.175717234e-03f, 4.174816507e-03f, 4.173908611e-03f, 4.172993547e-03f, 4.172071317e-03f,
+4.171141924e-03f, 4.170205370e-03f, 4.169261655e-03f, 4.168310783e-03f, 4.167352755e-03f, 4.166387574e-03f, 4.165415241e-03f, 4.164435758e-03f, 4.163449127e-03f, 4.162455351e-03f,
+4.161454432e-03f, 4.160446371e-03f, 4.159431171e-03f, 4.158408834e-03f, 4.157379362e-03f, 4.156342756e-03f, 4.155299021e-03f, 4.154248156e-03f, 4.153190165e-03f, 4.152125050e-03f,
+4.151052813e-03f, 4.149973456e-03f, 4.148886981e-03f, 4.147793391e-03f, 4.146692688e-03f, 4.145584874e-03f, 4.144469951e-03f, 4.143347922e-03f, 4.142218789e-03f, 4.141082554e-03f,
+4.139939220e-03f, 4.138788789e-03f, 4.137631263e-03f, 4.136466644e-03f, 4.135294936e-03f, 4.134116140e-03f, 4.132930258e-03f, 4.131737294e-03f, 4.130537249e-03f, 4.129330127e-03f,
+4.128115928e-03f, 4.126894657e-03f, 4.125666315e-03f, 4.124430905e-03f, 4.123188429e-03f, 4.121938890e-03f, 4.120682290e-03f, 4.119418632e-03f, 4.118147918e-03f, 4.116870152e-03f,
+4.115585335e-03f, 4.114293469e-03f, 4.112994559e-03f, 4.111688606e-03f, 4.110375612e-03f, 4.109055581e-03f, 4.107728515e-03f, 4.106394417e-03f, 4.105053289e-03f, 4.103705135e-03f,
+4.102349956e-03f, 4.100987755e-03f, 4.099618536e-03f, 4.098242300e-03f, 4.096859051e-03f, 4.095468791e-03f, 4.094071524e-03f, 4.092667251e-03f, 4.091255976e-03f, 4.089837701e-03f,
+4.088412429e-03f, 4.086980164e-03f, 4.085540907e-03f, 4.084094662e-03f, 4.082641432e-03f, 4.081181218e-03f, 4.079714026e-03f, 4.078239856e-03f, 4.076758712e-03f, 4.075270597e-03f,
+4.073775514e-03f, 4.072273466e-03f, 4.070764455e-03f, 4.069248486e-03f, 4.067725560e-03f, 4.066195680e-03f, 4.064658850e-03f, 4.063115073e-03f, 4.061564351e-03f, 4.060006688e-03f,
+4.058442087e-03f, 4.056870550e-03f, 4.055292082e-03f, 4.053706684e-03f, 4.052114360e-03f, 4.050515113e-03f, 4.048908947e-03f, 4.047295863e-03f, 4.045675866e-03f, 4.044048959e-03f,
+4.042415144e-03f, 4.040774426e-03f, 4.039126806e-03f, 4.037472288e-03f, 4.035810877e-03f, 4.034142573e-03f, 4.032467382e-03f, 4.030785306e-03f, 4.029096348e-03f, 4.027400512e-03f,
+4.025697801e-03f, 4.023988218e-03f, 4.022271766e-03f, 4.020548449e-03f, 4.018818271e-03f, 4.017081234e-03f, 4.015337342e-03f, 4.013586598e-03f, 4.011829005e-03f, 4.010064568e-03f,
+4.008293288e-03f, 4.006515171e-03f, 4.004730218e-03f, 4.002938434e-03f, 4.001139823e-03f, 3.999334386e-03f, 3.997522129e-03f, 3.995703053e-03f, 3.993877164e-03f, 3.992044464e-03f,
+3.990204957e-03f, 3.988358646e-03f, 3.986505535e-03f, 3.984645628e-03f, 3.982778928e-03f, 3.980905438e-03f, 3.979025162e-03f, 3.977138104e-03f, 3.975244267e-03f, 3.973343656e-03f,
+3.971436273e-03f, 3.969522122e-03f, 3.967601206e-03f, 3.965673531e-03f, 3.963739098e-03f, 3.961797913e-03f, 3.959849978e-03f, 3.957895297e-03f, 3.955933874e-03f, 3.953965713e-03f,
+3.951990817e-03f, 3.950009190e-03f, 3.948020836e-03f, 3.946025759e-03f, 3.944023963e-03f, 3.942015450e-03f, 3.940000226e-03f, 3.937978294e-03f, 3.935949657e-03f, 3.933914320e-03f,
+3.931872287e-03f, 3.929823560e-03f, 3.927768145e-03f, 3.925706045e-03f, 3.923637264e-03f, 3.921561805e-03f, 3.919479674e-03f, 3.917390873e-03f, 3.915295406e-03f, 3.913193279e-03f,
+3.911084493e-03f, 3.908969055e-03f, 3.906846967e-03f, 3.904718233e-03f, 3.902582858e-03f, 3.900440845e-03f, 3.898292199e-03f, 3.896136924e-03f, 3.893975023e-03f, 3.891806502e-03f,
+3.889631362e-03f, 3.887449610e-03f, 3.885261249e-03f, 3.883066283e-03f, 3.880864716e-03f, 3.878656553e-03f, 3.876441797e-03f, 3.874220453e-03f, 3.871992524e-03f, 3.869758016e-03f,
+3.867516932e-03f, 3.865269276e-03f, 3.863015053e-03f, 3.860754267e-03f, 3.858486921e-03f, 3.856213022e-03f, 3.853932571e-03f, 3.851645575e-03f, 3.849352037e-03f, 3.847051961e-03f,
+3.844745352e-03f, 3.842432214e-03f, 3.840112551e-03f, 3.837786368e-03f, 3.835453669e-03f, 3.833114458e-03f, 3.830768740e-03f, 3.828416520e-03f, 3.826057800e-03f, 3.823692587e-03f,
+3.821320884e-03f, 3.818942696e-03f, 3.816558027e-03f, 3.814166882e-03f, 3.811769264e-03f, 3.809365180e-03f, 3.806954632e-03f, 3.804537626e-03f, 3.802114166e-03f, 3.799684256e-03f,
+3.797247902e-03f, 3.794805107e-03f, 3.792355876e-03f, 3.789900214e-03f, 3.787438125e-03f, 3.784969614e-03f, 3.782494685e-03f, 3.780013344e-03f, 3.777525594e-03f, 3.775031440e-03f,
+3.772530887e-03f, 3.770023940e-03f, 3.767510602e-03f, 3.764990880e-03f, 3.762464777e-03f, 3.759932298e-03f, 3.757393448e-03f, 3.754848232e-03f, 3.752296654e-03f, 3.749738719e-03f,
+3.747174431e-03f, 3.744603796e-03f, 3.742026819e-03f, 3.739443503e-03f, 3.736853854e-03f, 3.734257877e-03f, 3.731655577e-03f, 3.729046957e-03f, 3.726432024e-03f, 3.723810781e-03f,
+3.721183234e-03f, 3.718549388e-03f, 3.715909247e-03f, 3.713262816e-03f, 3.710610101e-03f, 3.707951106e-03f, 3.705285835e-03f, 3.702614295e-03f, 3.699936489e-03f, 3.697252424e-03f,
+3.694562103e-03f, 3.691865531e-03f, 3.689162715e-03f, 3.686453658e-03f, 3.683738365e-03f, 3.681016843e-03f, 3.678289095e-03f, 3.675555127e-03f, 3.672814943e-03f, 3.670068549e-03f,
+3.667315950e-03f, 3.664557151e-03f, 3.661792157e-03f, 3.659020973e-03f, 3.656243604e-03f, 3.653460056e-03f, 3.650670332e-03f, 3.647874440e-03f, 3.645072383e-03f, 3.642264166e-03f,
+3.639449796e-03f, 3.636629277e-03f, 3.633802614e-03f, 3.630969813e-03f, 3.628130878e-03f, 3.625285815e-03f, 3.622434630e-03f, 3.619577327e-03f, 3.616713911e-03f, 3.613844388e-03f,
+3.610968764e-03f, 3.608087043e-03f, 3.605199230e-03f, 3.602305332e-03f, 3.599405352e-03f, 3.596499298e-03f, 3.593587173e-03f, 3.590668984e-03f, 3.587744735e-03f, 3.584814432e-03f,
+3.581878080e-03f, 3.578935686e-03f, 3.575987253e-03f, 3.573032788e-03f, 3.570072295e-03f, 3.567105781e-03f, 3.564133251e-03f, 3.561154710e-03f, 3.558170163e-03f, 3.555179617e-03f,
+3.552183076e-03f, 3.549180546e-03f, 3.546172033e-03f, 3.543157542e-03f, 3.540137078e-03f, 3.537110647e-03f, 3.534078255e-03f, 3.531039907e-03f, 3.527995608e-03f, 3.524945365e-03f,
+3.521889183e-03f, 3.518827067e-03f, 3.515759022e-03f, 3.512685056e-03f, 3.509605172e-03f, 3.506519378e-03f, 3.503427677e-03f, 3.500330077e-03f, 3.497226582e-03f, 3.494117199e-03f,
+3.491001933e-03f, 3.487880789e-03f, 3.484753774e-03f, 3.481620893e-03f, 3.478482151e-03f, 3.475337555e-03f, 3.472187111e-03f, 3.469030823e-03f, 3.465868698e-03f, 3.462700741e-03f,
+3.459526959e-03f, 3.456347356e-03f, 3.453161939e-03f, 3.449970714e-03f, 3.446773687e-03f, 3.443570862e-03f, 3.440362247e-03f, 3.437147846e-03f, 3.433927666e-03f, 3.430701712e-03f,
+3.427469991e-03f, 3.424232509e-03f, 3.420989270e-03f, 3.417740281e-03f, 3.414485549e-03f, 3.411225078e-03f, 3.407958875e-03f, 3.404686946e-03f, 3.401409296e-03f, 3.398125932e-03f,
+3.394836860e-03f, 3.391542085e-03f, 3.388241614e-03f, 3.384935452e-03f, 3.381623605e-03f, 3.378306080e-03f, 3.374982883e-03f, 3.371654019e-03f, 3.368319495e-03f, 3.364979316e-03f,
+3.361633489e-03f, 3.358282020e-03f, 3.354924915e-03f, 3.351562179e-03f, 3.348193820e-03f, 3.344819842e-03f, 3.341440253e-03f, 3.338055058e-03f, 3.334664264e-03f, 3.331267876e-03f,
+3.327865901e-03f, 3.324458345e-03f, 3.321045214e-03f, 3.317626514e-03f, 3.314202251e-03f, 3.310772432e-03f, 3.307337063e-03f, 3.303896150e-03f, 3.300449700e-03f, 3.296997718e-03f,
+3.293540210e-03f, 3.290077184e-03f, 3.286608644e-03f, 3.283134599e-03f, 3.279655053e-03f, 3.276170013e-03f, 3.272679485e-03f, 3.269183477e-03f, 3.265681993e-03f, 3.262175041e-03f,
+3.258662626e-03f, 3.255144755e-03f, 3.251621435e-03f, 3.248092671e-03f, 3.244558470e-03f, 3.241018839e-03f, 3.237473784e-03f, 3.233923311e-03f, 3.230367426e-03f, 3.226806137e-03f,
+3.223239449e-03f, 3.219667369e-03f, 3.216089903e-03f, 3.212507059e-03f, 3.208918841e-03f, 3.205325257e-03f, 3.201726314e-03f, 3.198122017e-03f, 3.194512374e-03f, 3.190897390e-03f,
+3.187277072e-03f, 3.183651427e-03f, 3.180020462e-03f, 3.176384182e-03f, 3.172742594e-03f, 3.169095706e-03f, 3.165443523e-03f, 3.161786052e-03f, 3.158123299e-03f, 3.154455272e-03f,
+3.150781977e-03f, 3.147103420e-03f, 3.143419609e-03f, 3.139730549e-03f, 3.136036247e-03f, 3.132336711e-03f, 3.128631946e-03f, 3.124921959e-03f, 3.121206757e-03f, 3.117486347e-03f,
+3.113760736e-03f, 3.110029929e-03f, 3.106293934e-03f, 3.102552758e-03f, 3.098806406e-03f, 3.095054887e-03f, 3.091298207e-03f, 3.087536371e-03f, 3.083769388e-03f, 3.079997264e-03f,
+3.076220006e-03f, 3.072437620e-03f, 3.068650113e-03f, 3.064857493e-03f, 3.061059765e-03f, 3.057256937e-03f, 3.053449016e-03f, 3.049636008e-03f, 3.045817920e-03f, 3.041994760e-03f,
+3.038166533e-03f, 3.034333247e-03f, 3.030494909e-03f, 3.026651525e-03f, 3.022803103e-03f, 3.018949649e-03f, 3.015091171e-03f, 3.011227674e-03f, 3.007359167e-03f, 3.003485656e-03f,
+2.999607147e-03f, 2.995723649e-03f, 2.991835168e-03f, 2.987941710e-03f, 2.984043284e-03f, 2.980139895e-03f, 2.976231551e-03f, 2.972318259e-03f, 2.968400026e-03f, 2.964476858e-03f,
+2.960548764e-03f, 2.956615749e-03f, 2.952677821e-03f, 2.948734988e-03f, 2.944787255e-03f, 2.940834631e-03f, 2.936877122e-03f, 2.932914735e-03f, 2.928947477e-03f, 2.924975356e-03f,
+2.920998379e-03f, 2.917016552e-03f, 2.913029883e-03f, 2.909038379e-03f, 2.905042047e-03f, 2.901040895e-03f, 2.897034929e-03f, 2.893024156e-03f, 2.889008584e-03f, 2.884988220e-03f,
+2.880963071e-03f, 2.876933145e-03f, 2.872898448e-03f, 2.868858987e-03f, 2.864814771e-03f, 2.860765806e-03f, 2.856712099e-03f, 2.852653658e-03f, 2.848590489e-03f, 2.844522601e-03f,
+2.840450000e-03f, 2.836372694e-03f, 2.832290690e-03f, 2.828203995e-03f, 2.824112617e-03f, 2.820016562e-03f, 2.815915839e-03f, 2.811810454e-03f, 2.807700415e-03f, 2.803585729e-03f,
+2.799466404e-03f, 2.795342446e-03f, 2.791213864e-03f, 2.787080664e-03f, 2.782942854e-03f, 2.778800441e-03f, 2.774653434e-03f, 2.770501838e-03f, 2.766345661e-03f, 2.762184912e-03f,
+2.758019597e-03f, 2.753849724e-03f, 2.749675300e-03f, 2.745496332e-03f, 2.741312829e-03f, 2.737124797e-03f, 2.732932244e-03f, 2.728735178e-03f, 2.724533605e-03f, 2.720327534e-03f,
+2.716116972e-03f, 2.711901927e-03f, 2.707682405e-03f, 2.703458415e-03f, 2.699229963e-03f, 2.694997059e-03f, 2.690759708e-03f, 2.686517919e-03f, 2.682271699e-03f, 2.678021056e-03f,
+2.673765997e-03f, 2.669506529e-03f, 2.665242662e-03f, 2.660974401e-03f, 2.656701755e-03f, 2.652424731e-03f, 2.648143336e-03f, 2.643857580e-03f, 2.639567468e-03f, 2.635273009e-03f,
+2.630974210e-03f, 2.626671080e-03f, 2.622363625e-03f, 2.618051853e-03f, 2.613735772e-03f, 2.609415390e-03f, 2.605090714e-03f, 2.600761752e-03f, 2.596428512e-03f, 2.592091001e-03f,
+2.587749227e-03f, 2.583403199e-03f, 2.579052922e-03f, 2.574698406e-03f, 2.570339658e-03f, 2.565976686e-03f, 2.561609497e-03f, 2.557238099e-03f, 2.552862501e-03f, 2.548482709e-03f,
+2.544098732e-03f, 2.539710577e-03f, 2.535318252e-03f, 2.530921765e-03f, 2.526521124e-03f, 2.522116337e-03f, 2.517707411e-03f, 2.513294354e-03f, 2.508877174e-03f, 2.504455879e-03f,
+2.500030477e-03f, 2.495600975e-03f, 2.491167382e-03f, 2.486729705e-03f, 2.482287953e-03f, 2.477842132e-03f, 2.473392251e-03f, 2.468938318e-03f, 2.464480341e-03f, 2.460018328e-03f,
+2.455552286e-03f, 2.451082223e-03f, 2.446608148e-03f, 2.442130068e-03f, 2.437647992e-03f, 2.433161927e-03f, 2.428671881e-03f, 2.424177862e-03f, 2.419679878e-03f, 2.415177937e-03f,
+2.410672047e-03f, 2.406162216e-03f, 2.401648453e-03f, 2.397130764e-03f, 2.392609158e-03f, 2.388083643e-03f, 2.383554228e-03f, 2.379020919e-03f, 2.374483726e-03f, 2.369942655e-03f,
+2.365397716e-03f, 2.360848916e-03f, 2.356296263e-03f, 2.351739766e-03f, 2.347179432e-03f, 2.342615269e-03f, 2.338047286e-03f, 2.333475490e-03f, 2.328899891e-03f, 2.324320495e-03f,
+2.319737311e-03f, 2.315150347e-03f, 2.310559611e-03f, 2.305965112e-03f, 2.301366856e-03f, 2.296764854e-03f, 2.292159112e-03f, 2.287549639e-03f, 2.282936442e-03f, 2.278319531e-03f,
+2.273698914e-03f, 2.269074597e-03f, 2.264446591e-03f, 2.259814902e-03f, 2.255179539e-03f, 2.250540510e-03f, 2.245897824e-03f, 2.241251488e-03f, 2.236601511e-03f, 2.231947901e-03f,
+2.227290667e-03f, 2.222629816e-03f, 2.217965356e-03f, 2.213297297e-03f, 2.208625646e-03f, 2.203950411e-03f, 2.199271601e-03f, 2.194589224e-03f, 2.189903288e-03f, 2.185213802e-03f,
+2.180520773e-03f, 2.175824211e-03f, 2.171124123e-03f, 2.166420518e-03f, 2.161713404e-03f, 2.157002789e-03f, 2.152288681e-03f, 2.147571090e-03f, 2.142850023e-03f, 2.138125488e-03f,
+2.133397494e-03f, 2.128666050e-03f, 2.123931163e-03f, 2.119192843e-03f, 2.114451096e-03f, 2.109705933e-03f, 2.104957360e-03f, 2.100205387e-03f, 2.095450021e-03f, 2.090691272e-03f,
+2.085929148e-03f, 2.081163656e-03f, 2.076394806e-03f, 2.071622606e-03f, 2.066847064e-03f, 2.062068189e-03f, 2.057285988e-03f, 2.052500472e-03f, 2.047711647e-03f, 2.042919523e-03f,
+2.038124107e-03f, 2.033325409e-03f, 2.028523436e-03f, 2.023718198e-03f, 2.018909702e-03f, 2.014097958e-03f, 2.009282973e-03f, 2.004464756e-03f, 1.999643316e-03f, 1.994818661e-03f,
+1.989990800e-03f, 1.985159740e-03f, 1.980325491e-03f, 1.975488062e-03f, 1.970647460e-03f, 1.965803694e-03f, 1.960956773e-03f, 1.956106705e-03f, 1.951253499e-03f, 1.946397163e-03f,
+1.941537706e-03f, 1.936675136e-03f, 1.931809462e-03f, 1.926940693e-03f, 1.922068837e-03f, 1.917193903e-03f, 1.912315898e-03f, 1.907434833e-03f, 1.902550715e-03f, 1.897663553e-03f,
+1.892773356e-03f, 1.887880132e-03f, 1.882983890e-03f, 1.878084638e-03f, 1.873182385e-03f, 1.868277140e-03f, 1.863368911e-03f, 1.858457707e-03f, 1.853543537e-03f, 1.848626409e-03f,
+1.843706331e-03f, 1.838783313e-03f, 1.833857364e-03f, 1.828928491e-03f, 1.823996704e-03f, 1.819062010e-03f, 1.814124420e-03f, 1.809183941e-03f, 1.804240582e-03f, 1.799294352e-03f,
+1.794345260e-03f, 1.789393314e-03f, 1.784438523e-03f, 1.779480895e-03f, 1.774520440e-03f, 1.769557166e-03f, 1.764591082e-03f, 1.759622196e-03f, 1.754650518e-03f, 1.749676055e-03f,
+1.744698818e-03f, 1.739718813e-03f, 1.734736051e-03f, 1.729750540e-03f, 1.724762288e-03f, 1.719771305e-03f, 1.714777600e-03f, 1.709781180e-03f, 1.704782055e-03f, 1.699780233e-03f,
+1.694775724e-03f, 1.689768536e-03f, 1.684758677e-03f, 1.679746158e-03f, 1.674730985e-03f, 1.669713169e-03f, 1.664692719e-03f, 1.659669642e-03f, 1.654643947e-03f, 1.649615645e-03f,
+1.644584742e-03f, 1.639551249e-03f, 1.634515173e-03f, 1.629476525e-03f, 1.624435312e-03f, 1.619391543e-03f, 1.614345228e-03f, 1.609296375e-03f, 1.604244993e-03f, 1.599191091e-03f,
+1.594134678e-03f, 1.589075762e-03f, 1.584014353e-03f, 1.578950459e-03f, 1.573884089e-03f, 1.568815253e-03f, 1.563743958e-03f, 1.558670214e-03f, 1.553594030e-03f, 1.548515415e-03f,
+1.543434377e-03f, 1.538350926e-03f, 1.533265070e-03f, 1.528176818e-03f, 1.523086180e-03f, 1.517993163e-03f, 1.512897778e-03f, 1.507800032e-03f, 1.502699935e-03f, 1.497597497e-03f,
+1.492492724e-03f, 1.487385628e-03f, 1.482276216e-03f, 1.477164498e-03f, 1.472050482e-03f, 1.466934178e-03f, 1.461815594e-03f, 1.456694739e-03f, 1.451571623e-03f, 1.446446254e-03f,
+1.441318642e-03f, 1.436188794e-03f, 1.431056721e-03f, 1.425922431e-03f, 1.420785933e-03f, 1.415647237e-03f, 1.410506350e-03f, 1.405363283e-03f, 1.400218044e-03f, 1.395070642e-03f,
+1.389921086e-03f, 1.384769386e-03f, 1.379615549e-03f, 1.374459586e-03f, 1.369301505e-03f, 1.364141315e-03f, 1.358979026e-03f, 1.353814645e-03f, 1.348648183e-03f, 1.343479649e-03f,
+1.338309050e-03f, 1.333136397e-03f, 1.327961699e-03f, 1.322784964e-03f, 1.317606202e-03f, 1.312425421e-03f, 1.307242631e-03f, 1.302057840e-03f, 1.296871059e-03f, 1.291682295e-03f,
+1.286491558e-03f, 1.281298857e-03f, 1.276104201e-03f, 1.270907599e-03f, 1.265709060e-03f, 1.260508594e-03f, 1.255306209e-03f, 1.250101914e-03f, 1.244895719e-03f, 1.239687633e-03f,
+1.234477664e-03f, 1.229265822e-03f, 1.224052116e-03f, 1.218836555e-03f, 1.213619148e-03f, 1.208399905e-03f, 1.203178833e-03f, 1.197955944e-03f, 1.192731244e-03f, 1.187504745e-03f,
+1.182276454e-03f, 1.177046381e-03f, 1.171814535e-03f, 1.166580926e-03f, 1.161345562e-03f, 1.156108452e-03f, 1.150869606e-03f, 1.145629032e-03f, 1.140386741e-03f, 1.135142740e-03f,
+1.129897040e-03f, 1.124649649e-03f, 1.119400577e-03f, 1.114149832e-03f, 1.108897424e-03f, 1.103643361e-03f, 1.098387654e-03f, 1.093130312e-03f, 1.087871342e-03f, 1.082610756e-03f,
+1.077348561e-03f, 1.072084767e-03f, 1.066819383e-03f, 1.061552419e-03f, 1.056283883e-03f, 1.051013785e-03f, 1.045742133e-03f, 1.040468938e-03f, 1.035194208e-03f, 1.029917952e-03f,
+1.024640180e-03f, 1.019360901e-03f, 1.014080124e-03f, 1.008797858e-03f, 1.003514113e-03f, 9.982288969e-04f, 9.929422200e-04f, 9.876540910e-04f, 9.823645194e-04f, 9.770735142e-04f,
+9.717810847e-04f, 9.664872402e-04f, 9.611919897e-04f, 9.558953426e-04f, 9.505973081e-04f, 9.452978954e-04f, 9.399971138e-04f, 9.346949723e-04f, 9.293914804e-04f, 9.240866472e-04f,
+9.187804819e-04f, 9.134729939e-04f, 9.081641923e-04f, 9.028540863e-04f, 8.975426852e-04f, 8.922299984e-04f, 8.869160349e-04f, 8.816008040e-04f, 8.762843151e-04f, 8.709665773e-04f,
+8.656475999e-04f, 8.603273921e-04f, 8.550059633e-04f, 8.496833226e-04f, 8.443594794e-04f, 8.390344428e-04f, 8.337082222e-04f, 8.283808268e-04f, 8.230522659e-04f, 8.177225488e-04f,
+8.123916846e-04f, 8.070596827e-04f, 8.017265524e-04f, 7.963923029e-04f, 7.910569435e-04f, 7.857204835e-04f, 7.803829321e-04f, 7.750442987e-04f, 7.697045925e-04f, 7.643638228e-04f,
+7.590219988e-04f, 7.536791300e-04f, 7.483352254e-04f, 7.429902945e-04f, 7.376443465e-04f, 7.322973908e-04f, 7.269494365e-04f, 7.216004930e-04f, 7.162505697e-04f, 7.108996757e-04f,
+7.055478203e-04f, 7.001950130e-04f, 6.948412629e-04f, 6.894865794e-04f, 6.841309718e-04f, 6.787744493e-04f, 6.734170214e-04f, 6.680586972e-04f, 6.626994860e-04f, 6.573393973e-04f,
+6.519784403e-04f, 6.466166243e-04f, 6.412539586e-04f, 6.358904525e-04f, 6.305261153e-04f, 6.251609564e-04f, 6.197949851e-04f, 6.144282107e-04f, 6.090606424e-04f, 6.036922896e-04f,
+5.983231617e-04f, 5.929532679e-04f, 5.875826175e-04f, 5.822112200e-04f, 5.768390845e-04f, 5.714662204e-04f, 5.660926371e-04f, 5.607183439e-04f, 5.553433500e-04f, 5.499676648e-04f,
+5.445912977e-04f, 5.392142579e-04f, 5.338365548e-04f, 5.284581978e-04f, 5.230791960e-04f, 5.176995590e-04f, 5.123192959e-04f, 5.069384161e-04f, 5.015569290e-04f, 4.961748439e-04f,
+4.907921701e-04f, 4.854089170e-04f, 4.800250938e-04f, 4.746407099e-04f, 4.692557747e-04f, 4.638702975e-04f, 4.584842876e-04f, 4.530977543e-04f, 4.477107070e-04f, 4.423231550e-04f,
+4.369351077e-04f, 4.315465744e-04f, 4.261575644e-04f, 4.207680870e-04f, 4.153781517e-04f, 4.099877677e-04f, 4.045969443e-04f, 3.992056910e-04f, 3.938140170e-04f, 3.884219318e-04f,
+3.830294445e-04f, 3.776365647e-04f, 3.722433015e-04f, 3.668496644e-04f, 3.614556626e-04f, 3.560613056e-04f, 3.506666027e-04f, 3.452715632e-04f, 3.398761964e-04f, 3.344805117e-04f,
+3.290845184e-04f, 3.236882260e-04f, 3.182916436e-04f, 3.128947807e-04f, 3.074976465e-04f, 3.021002505e-04f, 2.967026020e-04f, 2.913047103e-04f, 2.859065847e-04f, 2.805082347e-04f,
+2.751096694e-04f, 2.697108984e-04f, 2.643119308e-04f, 2.589127762e-04f, 2.535134437e-04f, 2.481139427e-04f, 2.427142827e-04f, 2.373144728e-04f, 2.319145225e-04f, 2.265144411e-04f,
+2.211142379e-04f, 2.157139223e-04f, 2.103135036e-04f, 2.049129912e-04f, 1.995123943e-04f, 1.941117224e-04f, 1.887109847e-04f, 1.833101906e-04f, 1.779093495e-04f, 1.725084706e-04f,
+1.671075633e-04f, 1.617066370e-04f, 1.563057009e-04f, 1.509047645e-04f, 1.455038369e-04f, 1.401029277e-04f, 1.347020461e-04f, 1.293012014e-04f, 1.239004029e-04f, 1.184996601e-04f,
+1.130989822e-04f, 1.076983786e-04f, 1.022978586e-04f, 9.689743148e-05f, 9.149710662e-05f, 8.609689334e-05f, 8.069680096e-05f, 7.529683882e-05f, 6.989701623e-05f, 6.449734252e-05f,
+5.909782701e-05f, 5.369847904e-05f, 4.829930791e-05f, 4.290032296e-05f, 3.750153350e-05f, 3.210294886e-05f, 2.670457835e-05f, 2.130643129e-05f, 1.590851700e-05f, 1.051084480e-05f,
+5.113424005e-06f, -2.837360749e-07f, -5.680626123e-06f, -1.107723682e-05f, -1.647355887e-05f, -2.186958295e-05f, -2.726529974e-05f, -3.266069995e-05f, -3.805577426e-05f, -4.345051336e-05f,
+-4.884490796e-05f, -5.423894874e-05f, -5.963262640e-05f, -6.502593163e-05f, -7.041885514e-05f, -7.581138763e-05f, -8.120351979e-05f, -8.659524232e-05f, -9.198654594e-05f, -9.737742133e-05f,
+-1.027678592e-04f, -1.081578503e-04f, -1.135473853e-04f, -1.189364549e-04f, -1.243250498e-04f, -1.297131607e-04f, -1.351007784e-04f, -1.404878935e-04f, -1.458744968e-04f, -1.512605790e-04f,
+-1.566461309e-04f, -1.620311430e-04f, -1.674156062e-04f, -1.727995111e-04f, -1.781828486e-04f, -1.835656093e-04f, -1.889477839e-04f, -1.943293632e-04f, -1.997103378e-04f, -2.050906987e-04f,
+-2.104704363e-04f, -2.158495416e-04f, -2.212280053e-04f, -2.266058180e-04f, -2.319829705e-04f, -2.373594535e-04f, -2.427352579e-04f, -2.481103743e-04f, -2.534847934e-04f, -2.588585061e-04f,
+-2.642315031e-04f, -2.696037751e-04f, -2.749753129e-04f, -2.803461072e-04f, -2.857161488e-04f, -2.910854285e-04f, -2.964539369e-04f, -3.018216650e-04f, -3.071886033e-04f, -3.125547428e-04f,
+-3.179200741e-04f, -3.232845880e-04f, -3.286482754e-04f, -3.340111269e-04f, -3.393731333e-04f, -3.447342855e-04f, -3.500945742e-04f, -3.554539901e-04f, -3.608125241e-04f, -3.661701670e-04f,
+-3.715269094e-04f, -3.768827423e-04f, -3.822376564e-04f, -3.875916425e-04f, -3.929446914e-04f, -3.982967939e-04f, -4.036479407e-04f, -4.089981228e-04f, -4.143473308e-04f, -4.196955556e-04f,
+-4.250427880e-04f, -4.303890188e-04f, -4.357342389e-04f, -4.410784389e-04f, -4.464216098e-04f, -4.517637424e-04f, -4.571048275e-04f, -4.624448558e-04f, -4.677838183e-04f, -4.731217057e-04f,
+-4.784585090e-04f, -4.837942188e-04f, -4.891288261e-04f, -4.944623217e-04f, -4.997946964e-04f, -5.051259410e-04f, -5.104560465e-04f, -5.157850036e-04f, -5.211128032e-04f, -5.264394362e-04f,
+-5.317648934e-04f, -5.370891656e-04f, -5.424122438e-04f, -5.477341187e-04f, -5.530547813e-04f, -5.583742224e-04f, -5.636924328e-04f, -5.690094035e-04f, -5.743251254e-04f, -5.796395892e-04f,
+-5.849527859e-04f, -5.902647063e-04f, -5.955753414e-04f, -6.008846820e-04f, -6.061927190e-04f, -6.114994433e-04f, -6.168048458e-04f, -6.221089175e-04f, -6.274116491e-04f, -6.327130316e-04f,
+-6.380130559e-04f, -6.433117130e-04f, -6.486089937e-04f, -6.539048889e-04f, -6.591993895e-04f, -6.644924866e-04f, -6.697841709e-04f, -6.750744335e-04f, -6.803632652e-04f, -6.856506570e-04f,
+-6.909365999e-04f, -6.962210846e-04f, -7.015041023e-04f, -7.067856439e-04f, -7.120657002e-04f, -7.173442622e-04f, -7.226213210e-04f, -7.278968674e-04f, -7.331708923e-04f, -7.384433869e-04f,
+-7.437143420e-04f, -7.489837486e-04f, -7.542515976e-04f, -7.595178801e-04f, -7.647825870e-04f, -7.700457093e-04f, -7.753072380e-04f, -7.805671641e-04f, -7.858254785e-04f, -7.910821723e-04f,
+-7.963372364e-04f, -8.015906619e-04f, -8.068424397e-04f, -8.120925609e-04f, -8.173410165e-04f, -8.225877974e-04f, -8.278328948e-04f, -8.330762995e-04f, -8.383180027e-04f, -8.435579954e-04f,
+-8.487962685e-04f, -8.540328132e-04f, -8.592676205e-04f, -8.645006814e-04f, -8.697319869e-04f, -8.749615281e-04f, -8.801892961e-04f, -8.854152818e-04f, -8.906394765e-04f, -8.958618710e-04f,
+-9.010824565e-04f, -9.063012241e-04f, -9.115181648e-04f, -9.167332698e-04f, -9.219465300e-04f, -9.271579365e-04f, -9.323674805e-04f, -9.375751531e-04f, -9.427809453e-04f, -9.479848482e-04f,
+-9.531868530e-04f, -9.583869506e-04f, -9.635851324e-04f, -9.687813893e-04f, -9.739757124e-04f, -9.791680930e-04f, -9.843585221e-04f, -9.895469908e-04f, -9.947334903e-04f, -9.999180117e-04f,
+-1.005100546e-03f, -1.010281085e-03f, -1.015459619e-03f, -1.020636139e-03f, -1.025810638e-03f, -1.030983104e-03f, -1.036153531e-03f, -1.041321909e-03f, -1.046488230e-03f, -1.051652484e-03f,
+-1.056814662e-03f, -1.061974756e-03f, -1.067132758e-03f, -1.072288657e-03f, -1.077442446e-03f, -1.082594116e-03f, -1.087743657e-03f, -1.092891062e-03f, -1.098036320e-03f, -1.103179425e-03f,
+-1.108320365e-03f, -1.113459134e-03f, -1.118595722e-03f, -1.123730120e-03f, -1.128862320e-03f, -1.133992312e-03f, -1.139120089e-03f, -1.144245641e-03f, -1.149368959e-03f, -1.154490036e-03f,
+-1.159608861e-03f, -1.164725427e-03f, -1.169839725e-03f, -1.174951745e-03f, -1.180061479e-03f, -1.185168919e-03f, -1.190274056e-03f, -1.195376881e-03f, -1.200477385e-03f, -1.205575560e-03f,
+-1.210671397e-03f, -1.215764887e-03f, -1.220856021e-03f, -1.225944792e-03f, -1.231031190e-03f, -1.236115206e-03f, -1.241196832e-03f, -1.246276059e-03f, -1.251352879e-03f, -1.256427283e-03f,
+-1.261499262e-03f, -1.266568808e-03f, -1.271635912e-03f, -1.276700565e-03f, -1.281762759e-03f, -1.286822484e-03f, -1.291879734e-03f, -1.296934498e-03f, -1.301986768e-03f, -1.307036536e-03f,
+-1.312083793e-03f, -1.317128531e-03f, -1.322170740e-03f, -1.327210413e-03f, -1.332247540e-03f, -1.337282114e-03f, -1.342314124e-03f, -1.347343564e-03f, -1.352370424e-03f, -1.357394697e-03f,
+-1.362416372e-03f, -1.367435442e-03f, -1.372451898e-03f, -1.377465732e-03f, -1.382476935e-03f, -1.387485499e-03f, -1.392491414e-03f, -1.397494673e-03f, -1.402495268e-03f, -1.407493188e-03f,
+-1.412488427e-03f, -1.417480975e-03f, -1.422470825e-03f, -1.427457967e-03f, -1.432442392e-03f, -1.437424094e-03f, -1.442403062e-03f, -1.447379290e-03f, -1.452352767e-03f, -1.457323486e-03f,
+-1.462291438e-03f, -1.467256615e-03f, -1.472219009e-03f, -1.477178610e-03f, -1.482135411e-03f, -1.487089403e-03f, -1.492040578e-03f, -1.496988927e-03f, -1.501934442e-03f, -1.506877114e-03f,
+-1.511816935e-03f, -1.516753897e-03f, -1.521687991e-03f, -1.526619209e-03f, -1.531547542e-03f, -1.536472982e-03f, -1.541395522e-03f, -1.546315151e-03f, -1.551231863e-03f, -1.556145648e-03f,
+-1.561056499e-03f, -1.565964406e-03f, -1.570869362e-03f, -1.575771359e-03f, -1.580670387e-03f, -1.585566440e-03f, -1.590459507e-03f, -1.595349582e-03f, -1.600236655e-03f, -1.605120719e-03f,
+-1.610001765e-03f, -1.614879785e-03f, -1.619754770e-03f, -1.624626713e-03f, -1.629495605e-03f, -1.634361438e-03f, -1.639224203e-03f, -1.644083893e-03f, -1.648940498e-03f, -1.653794012e-03f,
+-1.658644425e-03f, -1.663491729e-03f, -1.668335917e-03f, -1.673176979e-03f, -1.678014908e-03f, -1.682849696e-03f, -1.687681334e-03f, -1.692509814e-03f, -1.697335128e-03f, -1.702157267e-03f,
+-1.706976224e-03f, -1.711791991e-03f, -1.716604559e-03f, -1.721413920e-03f, -1.726220066e-03f, -1.731022989e-03f, -1.735822680e-03f, -1.740619132e-03f, -1.745412336e-03f, -1.750202284e-03f,
+-1.754988969e-03f, -1.759772382e-03f, -1.764552514e-03f, -1.769329359e-03f, -1.774102907e-03f, -1.778873151e-03f, -1.783640082e-03f, -1.788403693e-03f, -1.793163975e-03f, -1.797920921e-03f,
+-1.802674522e-03f, -1.807424771e-03f, -1.812171658e-03f, -1.816915177e-03f, -1.821655319e-03f, -1.826392076e-03f, -1.831125440e-03f, -1.835855404e-03f, -1.840581958e-03f, -1.845305096e-03f,
+-1.850024809e-03f, -1.854741089e-03f, -1.859453928e-03f, -1.864163318e-03f, -1.868869252e-03f, -1.873571720e-03f, -1.878270717e-03f, -1.882966232e-03f, -1.887658259e-03f, -1.892346789e-03f,
+-1.897031815e-03f, -1.901713329e-03f, -1.906391322e-03f, -1.911065787e-03f, -1.915736716e-03f, -1.920404101e-03f, -1.925067935e-03f, -1.929728208e-03f, -1.934384914e-03f, -1.939038044e-03f,
+-1.943687591e-03f, -1.948333547e-03f, -1.952975904e-03f, -1.957614654e-03f, -1.962249789e-03f, -1.966881301e-03f, -1.971509183e-03f, -1.976133427e-03f, -1.980754025e-03f, -1.985370969e-03f,
+-1.989984252e-03f, -1.994593865e-03f, -1.999199800e-03f, -2.003802051e-03f, -2.008400609e-03f, -2.012995467e-03f, -2.017586616e-03f, -2.022174050e-03f, -2.026757759e-03f, -2.031337737e-03f,
+-2.035913976e-03f, -2.040486468e-03f, -2.045055206e-03f, -2.049620181e-03f, -2.054181386e-03f, -2.058738813e-03f, -2.063292455e-03f, -2.067842303e-03f, -2.072388351e-03f, -2.076930590e-03f,
+-2.081469014e-03f, -2.086003613e-03f, -2.090534381e-03f, -2.095061310e-03f, -2.099584393e-03f, -2.104103621e-03f, -2.108618987e-03f, -2.113130483e-03f, -2.117638103e-03f, -2.122141838e-03f,
+-2.126641680e-03f, -2.131137622e-03f, -2.135629657e-03f, -2.140117777e-03f, -2.144601975e-03f, -2.149082242e-03f, -2.153558571e-03f, -2.158030955e-03f, -2.162499387e-03f, -2.166963858e-03f,
+-2.171424361e-03f, -2.175880889e-03f, -2.180333434e-03f, -2.184781989e-03f, -2.189226546e-03f, -2.193667098e-03f, -2.198103637e-03f, -2.202536155e-03f, -2.206964646e-03f, -2.211389102e-03f,
+-2.215809515e-03f, -2.220225879e-03f, -2.224638184e-03f, -2.229046425e-03f, -2.233450594e-03f, -2.237850682e-03f, -2.242246684e-03f, -2.246638591e-03f, -2.251026397e-03f, -2.255410093e-03f,
+-2.259789672e-03f, -2.264165127e-03f, -2.268536452e-03f, -2.272903637e-03f, -2.277266676e-03f, -2.281625562e-03f, -2.285980287e-03f, -2.290330845e-03f, -2.294677226e-03f, -2.299019426e-03f,
+-2.303357435e-03f, -2.307691247e-03f, -2.312020855e-03f, -2.316346251e-03f, -2.320667428e-03f, -2.324984378e-03f, -2.329297095e-03f, -2.333605571e-03f, -2.337909800e-03f, -2.342209772e-03f,
+-2.346505483e-03f, -2.350796924e-03f, -2.355084088e-03f, -2.359366968e-03f, -2.363645556e-03f, -2.367919847e-03f, -2.372189831e-03f, -2.376455503e-03f, -2.380716855e-03f, -2.384973880e-03f,
+-2.389226571e-03f, -2.393474920e-03f, -2.397718921e-03f, -2.401958566e-03f, -2.406193849e-03f, -2.410424761e-03f, -2.414651297e-03f, -2.418873449e-03f, -2.423091210e-03f, -2.427304573e-03f,
+-2.431513530e-03f, -2.435718076e-03f, -2.439918202e-03f, -2.444113901e-03f, -2.448305168e-03f, -2.452491994e-03f, -2.456674372e-03f, -2.460852296e-03f, -2.465025759e-03f, -2.469194754e-03f,
+-2.473359273e-03f, -2.477519309e-03f, -2.481674857e-03f, -2.485825908e-03f, -2.489972456e-03f, -2.494114494e-03f, -2.498252014e-03f, -2.502385011e-03f, -2.506513477e-03f, -2.510637405e-03f,
+-2.514756788e-03f, -2.518871620e-03f, -2.522981893e-03f, -2.527087601e-03f, -2.531188736e-03f, -2.535285293e-03f, -2.539377263e-03f, -2.543464641e-03f, -2.547547419e-03f, -2.551625590e-03f,
+-2.555699149e-03f, -2.559768087e-03f, -2.563832398e-03f, -2.567892076e-03f, -2.571947113e-03f, -2.575997503e-03f, -2.580043239e-03f, -2.584084314e-03f, -2.588120722e-03f, -2.592152455e-03f,
+-2.596179508e-03f, -2.600201872e-03f, -2.604219542e-03f, -2.608232512e-03f, -2.612240773e-03f, -2.616244320e-03f, -2.620243145e-03f, -2.624237243e-03f, -2.628226606e-03f, -2.632211228e-03f,
+-2.636191102e-03f, -2.640166221e-03f, -2.644136580e-03f, -2.648102170e-03f, -2.652062986e-03f, -2.656019022e-03f, -2.659970269e-03f, -2.663916723e-03f, -2.667858375e-03f, -2.671795221e-03f,
+-2.675727252e-03f, -2.679654463e-03f, -2.683576848e-03f, -2.687494398e-03f, -2.691407109e-03f, -2.695314973e-03f, -2.699217984e-03f, -2.703116135e-03f, -2.707009420e-03f, -2.710897833e-03f,
+-2.714781366e-03f, -2.718660015e-03f, -2.722533771e-03f, -2.726402628e-03f, -2.730266581e-03f, -2.734125623e-03f, -2.737979747e-03f, -2.741828947e-03f, -2.745673216e-03f, -2.749512548e-03f,
+-2.753346937e-03f, -2.757176376e-03f, -2.761000860e-03f, -2.764820380e-03f, -2.768634932e-03f, -2.772444509e-03f, -2.776249105e-03f, -2.780048712e-03f, -2.783843326e-03f, -2.787632939e-03f,
+-2.791417545e-03f, -2.795197139e-03f, -2.798971713e-03f, -2.802741261e-03f, -2.806505778e-03f, -2.810265257e-03f, -2.814019691e-03f, -2.817769075e-03f, -2.821513402e-03f, -2.825252666e-03f,
+-2.828986861e-03f, -2.832715980e-03f, -2.836440018e-03f, -2.840158968e-03f, -2.843872824e-03f, -2.847581580e-03f, -2.851285230e-03f, -2.854983767e-03f, -2.858677186e-03f, -2.862365480e-03f,
+-2.866048643e-03f, -2.869726670e-03f, -2.873399553e-03f, -2.877067287e-03f, -2.880729866e-03f, -2.884387284e-03f, -2.888039535e-03f, -2.891686612e-03f, -2.895328510e-03f, -2.898965222e-03f,
+-2.902596743e-03f, -2.906223066e-03f, -2.909844186e-03f, -2.913460096e-03f, -2.917070791e-03f, -2.920676265e-03f, -2.924276511e-03f, -2.927871523e-03f, -2.931461297e-03f, -2.935045825e-03f,
+-2.938625102e-03f, -2.942199121e-03f, -2.945767878e-03f, -2.949331366e-03f, -2.952889578e-03f, -2.956442511e-03f, -2.959990156e-03f, -2.963532509e-03f, -2.967069564e-03f, -2.970601314e-03f,
+-2.974127755e-03f, -2.977648879e-03f, -2.981164682e-03f, -2.984675158e-03f, -2.988180300e-03f, -2.991680103e-03f, -2.995174561e-03f, -2.998663669e-03f, -3.002147420e-03f, -3.005625810e-03f,
+-3.009098831e-03f, -3.012566479e-03f, -3.016028747e-03f, -3.019485630e-03f, -3.022937123e-03f, -3.026383219e-03f, -3.029823913e-03f, -3.033259199e-03f, -3.036689071e-03f, -3.040113525e-03f,
+-3.043532554e-03f, -3.046946152e-03f, -3.050354314e-03f, -3.053757035e-03f, -3.057154308e-03f, -3.060546129e-03f, -3.063932491e-03f, -3.067313388e-03f, -3.070688817e-03f, -3.074058770e-03f,
+-3.077423242e-03f, -3.080782229e-03f, -3.084135723e-03f, -3.087483720e-03f, -3.090826214e-03f, -3.094163200e-03f, -3.097494672e-03f, -3.100820625e-03f, -3.104141053e-03f, -3.107455951e-03f,
+-3.110765313e-03f, -3.114069134e-03f, -3.117367409e-03f, -3.120660131e-03f, -3.123947296e-03f, -3.127228898e-03f, -3.130504932e-03f, -3.133775393e-03f, -3.137040274e-03f, -3.140299572e-03f,
+-3.143553279e-03f, -3.146801392e-03f, -3.150043904e-03f, -3.153280811e-03f, -3.156512106e-03f, -3.159737786e-03f, -3.162957843e-03f, -3.166172274e-03f, -3.169381073e-03f, -3.172584234e-03f,
+-3.175781753e-03f, -3.178973624e-03f, -3.182159842e-03f, -3.185340401e-03f, -3.188515297e-03f, -3.191684524e-03f, -3.194848077e-03f, -3.198005951e-03f, -3.201158140e-03f, -3.204304640e-03f,
+-3.207445446e-03f, -3.210580551e-03f, -3.213709952e-03f, -3.216833643e-03f, -3.219951619e-03f, -3.223063874e-03f, -3.226170404e-03f, -3.229271204e-03f, -3.232366268e-03f, -3.235455591e-03f,
+-3.238539169e-03f, -3.241616996e-03f, -3.244689068e-03f, -3.247755379e-03f, -3.250815924e-03f, -3.253870699e-03f, -3.256919697e-03f, -3.259962915e-03f, -3.263000348e-03f, -3.266031990e-03f,
+-3.269057836e-03f, -3.272077882e-03f, -3.275092122e-03f, -3.278100552e-03f, -3.281103167e-03f, -3.284099961e-03f, -3.287090931e-03f, -3.290076070e-03f, -3.293055375e-03f, -3.296028840e-03f,
+-3.298996461e-03f, -3.301958232e-03f, -3.304914149e-03f, -3.307864207e-03f, -3.310808401e-03f, -3.313746727e-03f, -3.316679180e-03f, -3.319605754e-03f, -3.322526445e-03f, -3.325441249e-03f,
+-3.328350161e-03f, -3.331253175e-03f, -3.334150287e-03f, -3.337041493e-03f, -3.339926788e-03f, -3.342806166e-03f, -3.345679624e-03f, -3.348547157e-03f, -3.351408760e-03f, -3.354264428e-03f,
+-3.357114157e-03f, -3.359957942e-03f, -3.362795778e-03f, -3.365627662e-03f, -3.368453588e-03f, -3.371273551e-03f, -3.374087548e-03f, -3.376895573e-03f, -3.379697622e-03f, -3.382493691e-03f,
+-3.385283774e-03f, -3.388067868e-03f, -3.390845968e-03f, -3.393618070e-03f, -3.396384168e-03f, -3.399144259e-03f, -3.401898338e-03f, -3.404646400e-03f, -3.407388441e-03f, -3.410124457e-03f,
+-3.412854443e-03f, -3.415578395e-03f, -3.418296309e-03f, -3.421008179e-03f, -3.423714002e-03f, -3.426413773e-03f, -3.429107488e-03f, -3.431795143e-03f, -3.434476732e-03f, -3.437152253e-03f,
+-3.439821700e-03f, -3.442485069e-03f, -3.445142356e-03f, -3.447793557e-03f, -3.450438667e-03f, -3.453077683e-03f, -3.455710599e-03f, -3.458337411e-03f, -3.460958116e-03f, -3.463572709e-03f,
+-3.466181186e-03f, -3.468783543e-03f, -3.471379775e-03f, -3.473969879e-03f, -3.476553850e-03f, -3.479131683e-03f, -3.481703376e-03f, -3.484268923e-03f, -3.486828321e-03f, -3.489381566e-03f,
+-3.491928652e-03f, -3.494469577e-03f, -3.497004337e-03f, -3.499532926e-03f, -3.502055341e-03f, -3.504571579e-03f, -3.507081634e-03f, -3.509585504e-03f, -3.512083183e-03f, -3.514574668e-03f,
+-3.517059955e-03f, -3.519539041e-03f, -3.522011920e-03f, -3.524478589e-03f, -3.526939044e-03f, -3.529393281e-03f, -3.531841296e-03f, -3.534283086e-03f, -3.536718646e-03f, -3.539147973e-03f,
+-3.541571062e-03f, -3.543987909e-03f, -3.546398512e-03f, -3.548802865e-03f, -3.551200966e-03f, -3.553592810e-03f, -3.555978394e-03f, -3.558357713e-03f, -3.560730764e-03f, -3.563097543e-03f,
+-3.565458046e-03f, -3.567812270e-03f, -3.570160211e-03f, -3.572501864e-03f, -3.574837228e-03f, -3.577166296e-03f, -3.579489067e-03f, -3.581805536e-03f, -3.584115699e-03f, -3.586419553e-03f,
+-3.588717094e-03f, -3.591008319e-03f, -3.593293223e-03f, -3.595571804e-03f, -3.597844057e-03f, -3.600109980e-03f, -3.602369567e-03f, -3.604622817e-03f, -3.606869725e-03f, -3.609110287e-03f,
+-3.611344501e-03f, -3.613572362e-03f, -3.615793867e-03f, -3.618009012e-03f, -3.620217795e-03f, -3.622420211e-03f, -3.624616257e-03f, -3.626805930e-03f, -3.628989226e-03f, -3.631166141e-03f,
+-3.633336673e-03f, -3.635500817e-03f, -3.637658570e-03f, -3.639809930e-03f, -3.641954892e-03f, -3.644093453e-03f, -3.646225610e-03f, -3.648351359e-03f, -3.650470697e-03f, -3.652583621e-03f,
+-3.654690128e-03f, -3.656790213e-03f, -3.658883874e-03f, -3.660971108e-03f, -3.663051911e-03f, -3.665126279e-03f, -3.667194210e-03f, -3.669255701e-03f, -3.671310748e-03f, -3.673359347e-03f,
+-3.675401496e-03f, -3.677437192e-03f, -3.679466431e-03f, -3.681489210e-03f, -3.683505526e-03f, -3.685515376e-03f, -3.687518756e-03f, -3.689515664e-03f, -3.691506096e-03f, -3.693490049e-03f,
+-3.695467521e-03f, -3.697438507e-03f, -3.699403006e-03f, -3.701361013e-03f, -3.703312526e-03f, -3.705257542e-03f, -3.707196058e-03f, -3.709128070e-03f, -3.711053576e-03f, -3.712972573e-03f,
+-3.714885057e-03f, -3.716791027e-03f, -3.718690477e-03f, -3.720583407e-03f, -3.722469813e-03f, -3.724349691e-03f, -3.726223040e-03f, -3.728089855e-03f, -3.729950135e-03f, -3.731803876e-03f,
+-3.733651075e-03f, -3.735491730e-03f, -3.737325838e-03f, -3.739153396e-03f, -3.740974400e-03f, -3.742788849e-03f, -3.744596739e-03f, -3.746398068e-03f, -3.748192833e-03f, -3.749981030e-03f,
+-3.751762658e-03f, -3.753537714e-03f, -3.755306194e-03f, -3.757068096e-03f, -3.758823418e-03f, -3.760572156e-03f, -3.762314309e-03f, -3.764049872e-03f, -3.765778845e-03f, -3.767501223e-03f,
+-3.769217004e-03f, -3.770926186e-03f, -3.772628766e-03f, -3.774324742e-03f, -3.776014110e-03f, -3.777696869e-03f, -3.779373015e-03f, -3.781042547e-03f, -3.782705461e-03f, -3.784361755e-03f,
+-3.786011426e-03f, -3.787654473e-03f, -3.789290891e-03f, -3.790920680e-03f, -3.792543836e-03f, -3.794160358e-03f, -3.795770241e-03f, -3.797373485e-03f, -3.798970087e-03f, -3.800560043e-03f,
+-3.802143353e-03f, -3.803720013e-03f, -3.805290021e-03f, -3.806853374e-03f, -3.808410071e-03f, -3.809960109e-03f, -3.811503485e-03f, -3.813040197e-03f, -3.814570243e-03f, -3.816093621e-03f,
+-3.817610328e-03f, -3.819120363e-03f, -3.820623721e-03f, -3.822120403e-03f, -3.823610404e-03f, -3.825093724e-03f, -3.826570359e-03f, -3.828040308e-03f, -3.829503568e-03f, -3.830960137e-03f,
+-3.832410013e-03f, -3.833853194e-03f, -3.835289677e-03f, -3.836719461e-03f, -3.838142543e-03f, -3.839558922e-03f, -3.840968594e-03f, -3.842371559e-03f, -3.843767813e-03f, -3.845157356e-03f,
+-3.846540183e-03f, -3.847916295e-03f, -3.849285688e-03f, -3.850648361e-03f, -3.852004312e-03f, -3.853353538e-03f, -3.854696038e-03f, -3.856031809e-03f, -3.857360850e-03f, -3.858683159e-03f,
+-3.859998733e-03f, -3.861307572e-03f, -3.862609672e-03f, -3.863905032e-03f, -3.865193650e-03f, -3.866475525e-03f, -3.867750653e-03f, -3.869019034e-03f, -3.870280666e-03f, -3.871535546e-03f,
+-3.872783674e-03f, -3.874025046e-03f, -3.875259662e-03f, -3.876487519e-03f, -3.877708616e-03f, -3.878922950e-03f, -3.880130521e-03f, -3.881331327e-03f, -3.882525365e-03f, -3.883712634e-03f,
+-3.884893132e-03f, -3.886066858e-03f, -3.887233810e-03f, -3.888393985e-03f, -3.889547384e-03f, -3.890694003e-03f, -3.891833841e-03f, -3.892966897e-03f, -3.894093169e-03f, -3.895212655e-03f,
+-3.896325355e-03f, -3.897431265e-03f, -3.898530385e-03f, -3.899622712e-03f, -3.900708247e-03f, -3.901786986e-03f, -3.902858929e-03f, -3.903924074e-03f, -3.904982419e-03f, -3.906033963e-03f,
+-3.907078705e-03f, -3.908116642e-03f, -3.909147774e-03f, -3.910172099e-03f, -3.911189616e-03f, -3.912200323e-03f, -3.913204219e-03f, -3.914201303e-03f, -3.915191572e-03f, -3.916175026e-03f,
+-3.917151664e-03f, -3.918121483e-03f, -3.919084484e-03f, -3.920040663e-03f, -3.920990021e-03f, -3.921932555e-03f, -3.922868265e-03f, -3.923797149e-03f, -3.924719205e-03f, -3.925634434e-03f,
+-3.926542833e-03f, -3.927444401e-03f, -3.928339137e-03f, -3.929227039e-03f, -3.930108108e-03f, -3.930982341e-03f, -3.931849736e-03f, -3.932710294e-03f, -3.933564013e-03f, -3.934410892e-03f,
+-3.935250929e-03f, -3.936084124e-03f, -3.936910476e-03f, -3.937729983e-03f, -3.938542644e-03f, -3.939348458e-03f, -3.940147424e-03f, -3.940939542e-03f, -3.941724810e-03f, -3.942503227e-03f,
+-3.943274791e-03f, -3.944039504e-03f, -3.944797362e-03f, -3.945548365e-03f, -3.946292513e-03f, -3.947029804e-03f, -3.947760237e-03f, -3.948483811e-03f, -3.949200526e-03f, -3.949910381e-03f,
+-3.950613375e-03f, -3.951309506e-03f, -3.951998774e-03f, -3.952681179e-03f, -3.953356719e-03f, -3.954025393e-03f, -3.954687201e-03f, -3.955342142e-03f, -3.955990215e-03f, -3.956631419e-03f,
+-3.957265754e-03f, -3.957893219e-03f, -3.958513813e-03f, -3.959127535e-03f, -3.959734384e-03f, -3.960334361e-03f, -3.960927464e-03f, -3.961513692e-03f, -3.962093045e-03f, -3.962665523e-03f,
+-3.963231124e-03f, -3.963789848e-03f, -3.964341694e-03f, -3.964886662e-03f, -3.965424751e-03f, -3.965955961e-03f, -3.966480290e-03f, -3.966997739e-03f, -3.967508307e-03f, -3.968011993e-03f,
+-3.968508797e-03f, -3.968998718e-03f, -3.969481756e-03f, -3.969957910e-03f, -3.970427180e-03f, -3.970889565e-03f, -3.971345065e-03f, -3.971793680e-03f, -3.972235408e-03f, -3.972670251e-03f,
+-3.973098206e-03f, -3.973519274e-03f, -3.973933454e-03f, -3.974340747e-03f, -3.974741151e-03f, -3.975134666e-03f, -3.975521293e-03f, -3.975901030e-03f, -3.976273877e-03f, -3.976639835e-03f,
+-3.976998902e-03f, -3.977351078e-03f, -3.977696364e-03f, -3.978034759e-03f, -3.978366263e-03f, -3.978690875e-03f, -3.979008595e-03f, -3.979319424e-03f, -3.979623360e-03f, -3.979920404e-03f,
+-3.980210555e-03f, -3.980493814e-03f, -3.980770181e-03f, -3.981039654e-03f, -3.981302234e-03f, -3.981557921e-03f, -3.981806715e-03f, -3.982048616e-03f, -3.982283623e-03f, -3.982511737e-03f,
+-3.982732957e-03f, -3.982947284e-03f, -3.983154717e-03f, -3.983355257e-03f, -3.983548903e-03f, -3.983735655e-03f, -3.983915514e-03f, -3.984088480e-03f, -3.984254552e-03f, -3.984413730e-03f,
+-3.984566015e-03f, -3.984711407e-03f, -3.984849906e-03f, -3.984981512e-03f, -3.985106225e-03f, -3.985224045e-03f, -3.985334973e-03f, -3.985439008e-03f, -3.985536150e-03f, -3.985626401e-03f,
+-3.985709759e-03f, -3.985786226e-03f, -3.985855801e-03f, -3.985918485e-03f, -3.985974278e-03f, -3.986023179e-03f, -3.986065191e-03f, -3.986100312e-03f, -3.986128543e-03f, -3.986149884e-03f,
+-3.986164335e-03f, -3.986171898e-03f, -3.986172572e-03f, -3.986166357e-03f, -3.986153255e-03f, -3.986133264e-03f, -3.986106387e-03f, -3.986072622e-03f, -3.986031971e-03f, -3.985984434e-03f,
+-3.985930011e-03f, -3.985868703e-03f, -3.985800510e-03f, -3.985725432e-03f, -3.985643471e-03f, -3.985554626e-03f, -3.985458899e-03f, -3.985356289e-03f, -3.985246797e-03f, -3.985130424e-03f,
+-3.985007170e-03f, -3.984877036e-03f, -3.984740023e-03f, -3.984596130e-03f, -3.984445359e-03f, -3.984287710e-03f, -3.984123183e-03f, -3.983951780e-03f, -3.983773502e-03f, -3.983588347e-03f,
+-3.983396318e-03f, -3.983197416e-03f, -3.982991639e-03f, -3.982778991e-03f, -3.982559470e-03f, -3.982333078e-03f, -3.982099816e-03f, -3.981859684e-03f, -3.981612683e-03f, -3.981358814e-03f,
+-3.981098077e-03f, -3.980830474e-03f, -3.980556006e-03f, -3.980274672e-03f, -3.979986474e-03f, -3.979691413e-03f, -3.979389490e-03f, -3.979080704e-03f, -3.978765059e-03f, -3.978442553e-03f,
+-3.978113189e-03f, -3.977776966e-03f, -3.977433887e-03f, -3.977083951e-03f, -3.976727160e-03f, -3.976363515e-03f, -3.975993017e-03f, -3.975615667e-03f, -3.975231465e-03f, -3.974840413e-03f,
+-3.974442512e-03f, -3.974037762e-03f, -3.973626166e-03f, -3.973207723e-03f, -3.972782435e-03f, -3.972350303e-03f, -3.971911329e-03f, -3.971465512e-03f, -3.971012855e-03f, -3.970553359e-03f,
+-3.970087024e-03f, -3.969613851e-03f, -3.969133843e-03f, -3.968647000e-03f, -3.968153323e-03f, -3.967652813e-03f, -3.967145472e-03f, -3.966631301e-03f, -3.966110302e-03f, -3.965582474e-03f,
+-3.965047820e-03f, -3.964506341e-03f, -3.963958038e-03f, -3.963402913e-03f, -3.962840966e-03f, -3.962272200e-03f, -3.961696614e-03f, -3.961114212e-03f, -3.960524993e-03f, -3.959928960e-03f,
+-3.959326114e-03f, -3.958716456e-03f, -3.958099987e-03f, -3.957476710e-03f, -3.956846625e-03f, -3.956209734e-03f, -3.955566038e-03f, -3.954915538e-03f, -3.954258237e-03f, -3.953594136e-03f,
+-3.952923236e-03f, -3.952245538e-03f, -3.951561044e-03f, -3.950869757e-03f, -3.950171676e-03f, -3.949466804e-03f, -3.948755143e-03f, -3.948036693e-03f, -3.947311457e-03f, -3.946579436e-03f,
+-3.945840632e-03f, -3.945095046e-03f, -3.944342680e-03f, -3.943583535e-03f, -3.942817614e-03f, -3.942044917e-03f, -3.941265448e-03f, -3.940479206e-03f, -3.939686194e-03f, -3.938886414e-03f,
+-3.938079867e-03f, -3.937266556e-03f, -3.936446481e-03f, -3.935619645e-03f, -3.934786049e-03f, -3.933945695e-03f, -3.933098585e-03f, -3.932244721e-03f, -3.931384105e-03f, -3.930516738e-03f,
+-3.929642622e-03f, -3.928761759e-03f, -3.927874151e-03f, -3.926979800e-03f, -3.926078708e-03f, -3.925170876e-03f, -3.924256306e-03f, -3.923335001e-03f, -3.922406963e-03f, -3.921472192e-03f,
+-3.920530692e-03f, -3.919582464e-03f, -3.918627510e-03f, -3.917665833e-03f, -3.916697433e-03f, -3.915722314e-03f, -3.914740477e-03f, -3.913751924e-03f, -3.912756657e-03f, -3.911754678e-03f,
+-3.910745990e-03f, -3.909730595e-03f, -3.908708494e-03f, -3.907679689e-03f, -3.906644184e-03f, -3.905601979e-03f, -3.904553077e-03f, -3.903497481e-03f, -3.902435192e-03f, -3.901366212e-03f,
+-3.900290544e-03f, -3.899208190e-03f, -3.898119152e-03f, -3.897023432e-03f, -3.895921033e-03f, -3.894811956e-03f, -3.893696205e-03f, -3.892573781e-03f, -3.891444686e-03f, -3.890308923e-03f,
+-3.889166495e-03f, -3.888017403e-03f, -3.886861649e-03f, -3.885699237e-03f, -3.884530168e-03f, -3.883354445e-03f, -3.882172070e-03f, -3.880983046e-03f, -3.879787375e-03f, -3.878585058e-03f,
+-3.877376100e-03f, -3.876160502e-03f, -3.874938266e-03f, -3.873709396e-03f, -3.872473893e-03f, -3.871231760e-03f, -3.869982999e-03f, -3.868727613e-03f, -3.867465605e-03f, -3.866196976e-03f,
+-3.864921730e-03f, -3.863639869e-03f, -3.862351396e-03f, -3.861056313e-03f, -3.859754622e-03f, -3.858446327e-03f, -3.857131429e-03f, -3.855809932e-03f, -3.854481838e-03f, -3.853147150e-03f,
+-3.851805870e-03f, -3.850458001e-03f, -3.849103546e-03f, -3.847742507e-03f, -3.846374887e-03f, -3.845000688e-03f, -3.843619914e-03f, -3.842232567e-03f, -3.840838650e-03f, -3.839438166e-03f,
+-3.838031116e-03f, -3.836617505e-03f, -3.835197335e-03f, -3.833770608e-03f, -3.832337328e-03f, -3.830897497e-03f, -3.829451118e-03f, -3.827998194e-03f, -3.826538727e-03f, -3.825072722e-03f,
+-3.823600179e-03f, -3.822121103e-03f, -3.820635496e-03f, -3.819143361e-03f, -3.817644701e-03f, -3.816139519e-03f, -3.814627818e-03f, -3.813109601e-03f, -3.811584870e-03f, -3.810053629e-03f,
+-3.808515881e-03f, -3.806971628e-03f, -3.805420874e-03f, -3.803863621e-03f, -3.802299873e-03f, -3.800729633e-03f, -3.799152904e-03f, -3.797569688e-03f, -3.795979989e-03f, -3.794383810e-03f,
+-3.792781154e-03f, -3.791172024e-03f, -3.789556423e-03f, -3.787934354e-03f, -3.786305821e-03f, -3.784670827e-03f, -3.783029374e-03f, -3.781381466e-03f, -3.779727106e-03f, -3.778066297e-03f,
+-3.776399043e-03f, -3.774725346e-03f, -3.773045211e-03f, -3.771358639e-03f, -3.769665634e-03f, -3.767966200e-03f, -3.766260340e-03f, -3.764548057e-03f, -3.762829355e-03f, -3.761104236e-03f,
+-3.759372703e-03f, -3.757634762e-03f, -3.755890413e-03f, -3.754139662e-03f, -3.752382511e-03f, -3.750618963e-03f, -3.748849023e-03f, -3.747072693e-03f, -3.745289977e-03f, -3.743500877e-03f,
+-3.741705399e-03f, -3.739903544e-03f, -3.738095317e-03f, -3.736280721e-03f, -3.734459759e-03f, -3.732632435e-03f, -3.730798752e-03f, -3.728958714e-03f, -3.727112324e-03f, -3.725259586e-03f,
+-3.723400503e-03f, -3.721535079e-03f, -3.719663317e-03f, -3.717785222e-03f, -3.715900795e-03f, -3.714010042e-03f, -3.712112966e-03f, -3.710209569e-03f, -3.708299857e-03f, -3.706383832e-03f,
+-3.704461498e-03f, -3.702532859e-03f, -3.700597918e-03f, -3.698656679e-03f, -3.696709146e-03f, -3.694755322e-03f, -3.692795211e-03f, -3.690828817e-03f, -3.688856144e-03f, -3.686877194e-03f,
+-3.684891973e-03f, -3.682900484e-03f, -3.680902729e-03f, -3.678898714e-03f, -3.676888442e-03f, -3.674871917e-03f, -3.672849143e-03f, -3.670820122e-03f, -3.668784860e-03f, -3.666743360e-03f,
+-3.664695626e-03f, -3.662641662e-03f, -3.660581471e-03f, -3.658515057e-03f, -3.656442425e-03f, -3.654363578e-03f, -3.652278521e-03f, -3.650187256e-03f, -3.648089788e-03f, -3.645986122e-03f,
+-3.643876260e-03f, -3.641760207e-03f, -3.639637966e-03f, -3.637509543e-03f, -3.635374940e-03f, -3.633234162e-03f, -3.631087212e-03f, -3.628934096e-03f, -3.626774816e-03f, -3.624609377e-03f,
+-3.622437783e-03f, -3.620260038e-03f, -3.618076146e-03f, -3.615886111e-03f, -3.613689938e-03f, -3.611487629e-03f, -3.609279190e-03f, -3.607064625e-03f, -3.604843937e-03f, -3.602617131e-03f,
+-3.600384211e-03f, -3.598145181e-03f, -3.595900046e-03f, -3.593648809e-03f, -3.591391474e-03f, -3.589128047e-03f, -3.586858531e-03f, -3.584582930e-03f, -3.582301249e-03f, -3.580013491e-03f,
+-3.577719662e-03f, -3.575419765e-03f, -3.573113804e-03f, -3.570801785e-03f, -3.568483710e-03f, -3.566159586e-03f, -3.563829415e-03f, -3.561493202e-03f, -3.559150952e-03f, -3.556802669e-03f,
+-3.554448357e-03f, -3.552088020e-03f, -3.549721664e-03f, -3.547349292e-03f, -3.544970908e-03f, -3.542586518e-03f, -3.540196126e-03f, -3.537799735e-03f, -3.535397351e-03f, -3.532988978e-03f,
+-3.530574621e-03f, -3.528154283e-03f, -3.525727970e-03f, -3.523295685e-03f, -3.520857434e-03f, -3.518413221e-03f, -3.515963050e-03f, -3.513506926e-03f, -3.511044853e-03f, -3.508576837e-03f,
+-3.506102881e-03f, -3.503622990e-03f, -3.501137169e-03f, -3.498645423e-03f, -3.496147755e-03f, -3.493644171e-03f, -3.491134674e-03f, -3.488619271e-03f, -3.486097965e-03f, -3.483570762e-03f,
+-3.481037665e-03f, -3.478498679e-03f, -3.475953810e-03f, -3.473403061e-03f, -3.470846438e-03f, -3.468283945e-03f, -3.465715587e-03f, -3.463141369e-03f, -3.460561295e-03f, -3.457975371e-03f,
+-3.455383600e-03f, -3.452785988e-03f, -3.450182539e-03f, -3.447573259e-03f, -3.444958152e-03f, -3.442337223e-03f, -3.439710476e-03f, -3.437077917e-03f, -3.434439551e-03f, -3.431795381e-03f,
+-3.429145414e-03f, -3.426489654e-03f, -3.423828105e-03f, -3.421160774e-03f, -3.418487664e-03f, -3.415808780e-03f, -3.413124128e-03f, -3.410433712e-03f, -3.407737538e-03f, -3.405035610e-03f,
+-3.402327933e-03f, -3.399614513e-03f, -3.396895353e-03f, -3.394170460e-03f, -3.391439838e-03f, -3.388703492e-03f, -3.385961427e-03f, -3.383213649e-03f, -3.380460161e-03f, -3.377700971e-03f,
+-3.374936081e-03f, -3.372165498e-03f, -3.369389226e-03f, -3.366607271e-03f, -3.363819637e-03f, -3.361026331e-03f, -3.358227356e-03f, -3.355422718e-03f, -3.352612422e-03f, -3.349796474e-03f,
+-3.346974878e-03f, -3.344147639e-03f, -3.341314763e-03f, -3.338476256e-03f, -3.335632121e-03f, -3.332782365e-03f, -3.329926992e-03f, -3.327066008e-03f, -3.324199417e-03f, -3.321327226e-03f,
+-3.318449440e-03f, -3.315566063e-03f, -3.312677101e-03f, -3.309782559e-03f, -3.306882443e-03f, -3.303976758e-03f, -3.301065508e-03f, -3.298148700e-03f, -3.295226339e-03f, -3.292298430e-03f,
+-3.289364978e-03f, -3.286425989e-03f, -3.283481469e-03f, -3.280531421e-03f, -3.277575853e-03f, -3.274614768e-03f, -3.271648173e-03f, -3.268676074e-03f, -3.265698474e-03f, -3.262715381e-03f,
+-3.259726799e-03f, -3.256732733e-03f, -3.253733190e-03f, -3.250728175e-03f, -3.247717692e-03f, -3.244701748e-03f, -3.241680348e-03f, -3.238653498e-03f, -3.235621203e-03f, -3.232583468e-03f,
+-3.229540299e-03f, -3.226491702e-03f, -3.223437682e-03f, -3.220378245e-03f, -3.217313397e-03f, -3.214243142e-03f, -3.211167486e-03f, -3.208086435e-03f, -3.204999996e-03f, -3.201908172e-03f,
+-3.198810970e-03f, -3.195708395e-03f, -3.192600454e-03f, -3.189487151e-03f, -3.186368493e-03f, -3.183244485e-03f, -3.180115132e-03f, -3.176980441e-03f, -3.173840417e-03f, -3.170695065e-03f,
+-3.167544392e-03f, -3.164388403e-03f, -3.161227104e-03f, -3.158060501e-03f, -3.154888599e-03f, -3.151711404e-03f, -3.148528922e-03f, -3.145341158e-03f, -3.142148119e-03f, -3.138949810e-03f,
+-3.135746237e-03f, -3.132537406e-03f, -3.129323323e-03f, -3.126103992e-03f, -3.122879421e-03f, -3.119649615e-03f, -3.116414580e-03f, -3.113174322e-03f, -3.109928846e-03f, -3.106678159e-03f,
+-3.103422266e-03f, -3.100161173e-03f, -3.096894887e-03f, -3.093623412e-03f, -3.090346756e-03f, -3.087064923e-03f, -3.083777920e-03f, -3.080485753e-03f, -3.077188428e-03f, -3.073885950e-03f,
+-3.070578326e-03f, -3.067265561e-03f, -3.063947663e-03f, -3.060624635e-03f, -3.057296485e-03f, -3.053963219e-03f, -3.050624843e-03f, -3.047281362e-03f, -3.043932782e-03f, -3.040579111e-03f,
+-3.037220353e-03f, -3.033856515e-03f, -3.030487603e-03f, -3.027113622e-03f, -3.023734580e-03f, -3.020350482e-03f, -3.016961334e-03f, -3.013567143e-03f, -3.010167914e-03f, -3.006763653e-03f,
+-3.003354368e-03f, -2.999940063e-03f, -2.996520745e-03f, -2.993096420e-03f, -2.989667095e-03f, -2.986232775e-03f, -2.982793467e-03f, -2.979349177e-03f, -2.975899911e-03f, -2.972445675e-03f,
+-2.968986476e-03f, -2.965522320e-03f, -2.962053213e-03f, -2.958579160e-03f, -2.955100170e-03f, -2.951616247e-03f, -2.948127398e-03f, -2.944633629e-03f, -2.941134947e-03f, -2.937631358e-03f,
+-2.934122868e-03f, -2.930609484e-03f, -2.927091211e-03f, -2.923568057e-03f, -2.920040027e-03f, -2.916507127e-03f, -2.912969365e-03f, -2.909426747e-03f, -2.905879278e-03f, -2.902326965e-03f,
+-2.898769815e-03f, -2.895207835e-03f, -2.891641029e-03f, -2.888069406e-03f, -2.884492970e-03f, -2.880911730e-03f, -2.877325690e-03f, -2.873734858e-03f, -2.870139240e-03f, -2.866538842e-03f,
+-2.862933672e-03f, -2.859323734e-03f, -2.855709037e-03f, -2.852089585e-03f, -2.848465387e-03f, -2.844836448e-03f, -2.841202775e-03f, -2.837564374e-03f, -2.833921252e-03f, -2.830273415e-03f,
+-2.826620870e-03f, -2.822963624e-03f, -2.819301683e-03f, -2.815635053e-03f, -2.811963742e-03f, -2.808287755e-03f, -2.804607100e-03f, -2.800921783e-03f, -2.797231810e-03f, -2.793537188e-03f,
+-2.789837925e-03f, -2.786134025e-03f, -2.782425497e-03f, -2.778712346e-03f, -2.774994580e-03f, -2.771272204e-03f, -2.767545226e-03f, -2.763813653e-03f, -2.760077490e-03f, -2.756336746e-03f,
+-2.752591425e-03f, -2.748841536e-03f, -2.745087084e-03f, -2.741328077e-03f, -2.737564521e-03f, -2.733796424e-03f, -2.730023791e-03f, -2.726246629e-03f, -2.722464945e-03f, -2.718678747e-03f,
+-2.714888040e-03f, -2.711092832e-03f, -2.707293129e-03f, -2.703488938e-03f, -2.699680266e-03f, -2.695867120e-03f, -2.692049506e-03f, -2.688227431e-03f, -2.684400903e-03f, -2.680569928e-03f,
+-2.676734512e-03f, -2.672894663e-03f, -2.669050388e-03f, -2.665201693e-03f, -2.661348586e-03f, -2.657491072e-03f, -2.653629160e-03f, -2.649762856e-03f, -2.645892166e-03f, -2.642017099e-03f,
+-2.638137659e-03f, -2.634253856e-03f, -2.630365695e-03f, -2.626473184e-03f, -2.622576328e-03f, -2.618675137e-03f, -2.614769615e-03f, -2.610859771e-03f, -2.606945612e-03f, -2.603027143e-03f,
+-2.599104373e-03f, -2.595177308e-03f, -2.591245955e-03f, -2.587310321e-03f, -2.583370414e-03f, -2.579426240e-03f, -2.575477806e-03f, -2.571525119e-03f, -2.567568187e-03f, -2.563607017e-03f,
+-2.559641615e-03f, -2.555671988e-03f, -2.551698144e-03f, -2.547720090e-03f, -2.543737833e-03f, -2.539751379e-03f, -2.535760737e-03f, -2.531765912e-03f, -2.527766913e-03f, -2.523763746e-03f,
+-2.519756419e-03f, -2.515744938e-03f, -2.511729311e-03f, -2.507709545e-03f, -2.503685647e-03f, -2.499657624e-03f, -2.495625483e-03f, -2.491589232e-03f, -2.487548878e-03f, -2.483504428e-03f,
+-2.479455889e-03f, -2.475403268e-03f, -2.471346572e-03f, -2.467285810e-03f, -2.463220987e-03f, -2.459152111e-03f, -2.455079190e-03f, -2.451002231e-03f, -2.446921240e-03f, -2.442836226e-03f,
+-2.438747195e-03f, -2.434654154e-03f, -2.430557112e-03f, -2.426456075e-03f, -2.422351051e-03f, -2.418242046e-03f, -2.414129068e-03f, -2.410012125e-03f, -2.405891224e-03f, -2.401766372e-03f,
+-2.397637576e-03f, -2.393504843e-03f, -2.389368182e-03f, -2.385227600e-03f, -2.381083103e-03f, -2.376934699e-03f, -2.372782396e-03f, -2.368626200e-03f, -2.364466120e-03f, -2.360302163e-03f,
+-2.356134335e-03f, -2.351962645e-03f, -2.347787100e-03f, -2.343607707e-03f, -2.339424473e-03f, -2.335237407e-03f, -2.331046515e-03f, -2.326851805e-03f, -2.322653284e-03f, -2.318450961e-03f,
+-2.314244841e-03f, -2.310034933e-03f, -2.305821245e-03f, -2.301603783e-03f, -2.297382555e-03f, -2.293157569e-03f, -2.288928832e-03f, -2.284696352e-03f, -2.280460135e-03f, -2.276220191e-03f,
+-2.271976525e-03f, -2.267729146e-03f, -2.263478061e-03f, -2.259223279e-03f, -2.254964805e-03f, -2.250702648e-03f, -2.246436815e-03f, -2.242167315e-03f, -2.237894153e-03f, -2.233617339e-03f,
+-2.229336880e-03f, -2.225052782e-03f, -2.220765055e-03f, -2.216473705e-03f, -2.212178739e-03f, -2.207880167e-03f, -2.203577994e-03f, -2.199272230e-03f, -2.194962880e-03f, -2.190649954e-03f,
+-2.186333459e-03f, -2.182013401e-03f, -2.177689790e-03f, -2.173362632e-03f, -2.169031936e-03f, -2.164697709e-03f, -2.160359958e-03f, -2.156018691e-03f, -2.151673917e-03f, -2.147325642e-03f,
+-2.142973874e-03f, -2.138618621e-03f, -2.134259891e-03f, -2.129897692e-03f, -2.125532030e-03f, -2.121162915e-03f, -2.116790353e-03f, -2.112414352e-03f, -2.108034921e-03f, -2.103652066e-03f,
+-2.099265796e-03f, -2.094876118e-03f, -2.090483040e-03f, -2.086086570e-03f, -2.081686715e-03f, -2.077283484e-03f, -2.072876884e-03f, -2.068466923e-03f, -2.064053609e-03f, -2.059636949e-03f,
+-2.055216951e-03f, -2.050793624e-03f, -2.046366974e-03f, -2.041937010e-03f, -2.037503740e-03f, -2.033067171e-03f, -2.028627311e-03f, -2.024184168e-03f, -2.019737750e-03f, -2.015288065e-03f,
+-2.010835121e-03f, -2.006378925e-03f, -2.001919485e-03f, -1.997456810e-03f, -1.992990906e-03f, -1.988521783e-03f, -1.984049447e-03f, -1.979573907e-03f, -1.975095171e-03f, -1.970613246e-03f,
+-1.966128141e-03f, -1.961639862e-03f, -1.957148420e-03f, -1.952653820e-03f, -1.948156071e-03f, -1.943655182e-03f, -1.939151159e-03f, -1.934644012e-03f, -1.930133747e-03f, -1.925620373e-03f,
+-1.921103897e-03f, -1.916584329e-03f, -1.912061675e-03f, -1.907535944e-03f, -1.903007143e-03f, -1.898475281e-03f, -1.893940366e-03f, -1.889402405e-03f, -1.884861406e-03f, -1.880317379e-03f,
+-1.875770330e-03f, -1.871220267e-03f, -1.866667199e-03f, -1.862111134e-03f, -1.857552079e-03f, -1.852990043e-03f, -1.848425034e-03f, -1.843857060e-03f, -1.839286128e-03f, -1.834712247e-03f,
+-1.830135425e-03f, -1.825555670e-03f, -1.820972990e-03f, -1.816387393e-03f, -1.811798887e-03f, -1.807207481e-03f, -1.802613182e-03f, -1.798015998e-03f, -1.793415937e-03f, -1.788813009e-03f,
+-1.784207220e-03f, -1.779598578e-03f, -1.774987093e-03f, -1.770372771e-03f, -1.765755622e-03f, -1.761135653e-03f, -1.756512872e-03f, -1.751887288e-03f, -1.747258908e-03f, -1.742627741e-03f,
+-1.737993795e-03f, -1.733357079e-03f, -1.728717599e-03f, -1.724075365e-03f, -1.719430384e-03f, -1.714782665e-03f, -1.710132215e-03f, -1.705479044e-03f, -1.700823159e-03f, -1.696164568e-03f,
+-1.691503280e-03f, -1.686839303e-03f, -1.682172645e-03f, -1.677503314e-03f, -1.672831318e-03f, -1.668156666e-03f, -1.663479365e-03f, -1.658799425e-03f, -1.654116853e-03f, -1.649431657e-03f,
+-1.644743846e-03f, -1.640053428e-03f, -1.635360411e-03f, -1.630664803e-03f, -1.625966613e-03f, -1.621265849e-03f, -1.616562519e-03f, -1.611856632e-03f, -1.607148195e-03f, -1.602437217e-03f,
+-1.597723706e-03f, -1.593007671e-03f, -1.588289119e-03f, -1.583568059e-03f, -1.578844500e-03f, -1.574118450e-03f, -1.569389916e-03f, -1.564658907e-03f, -1.559925432e-03f, -1.555189499e-03f,
+-1.550451115e-03f, -1.545710290e-03f, -1.540967032e-03f, -1.536221349e-03f, -1.531473249e-03f, -1.526722741e-03f, -1.521969833e-03f, -1.517214534e-03f, -1.512456850e-03f, -1.507696793e-03f,
+-1.502934368e-03f, -1.498169585e-03f, -1.493402452e-03f, -1.488632978e-03f, -1.483861170e-03f, -1.479087038e-03f, -1.474310589e-03f, -1.469531832e-03f, -1.464750775e-03f, -1.459967427e-03f,
+-1.455181796e-03f, -1.450393891e-03f, -1.445603719e-03f, -1.440811289e-03f, -1.436016610e-03f, -1.431219690e-03f, -1.426420538e-03f, -1.421619161e-03f, -1.416815568e-03f, -1.412009768e-03f,
+-1.407201769e-03f, -1.402391580e-03f, -1.397579208e-03f, -1.392764663e-03f, -1.387947952e-03f, -1.383129085e-03f, -1.378308069e-03f, -1.373484913e-03f, -1.368659626e-03f, -1.363832216e-03f,
+-1.359002691e-03f, -1.354171060e-03f, -1.349337331e-03f, -1.344501513e-03f, -1.339663614e-03f, -1.334823643e-03f, -1.329981608e-03f, -1.325137517e-03f, -1.320291380e-03f, -1.315443204e-03f,
+-1.310592999e-03f, -1.305740771e-03f, -1.300886531e-03f, -1.296030287e-03f, -1.291172046e-03f, -1.286311818e-03f, -1.281449611e-03f, -1.276585433e-03f, -1.271719293e-03f, -1.266851200e-03f,
+-1.261981162e-03f, -1.257109188e-03f, -1.252235285e-03f, -1.247359463e-03f, -1.242481730e-03f, -1.237602095e-03f, -1.232720566e-03f, -1.227837152e-03f, -1.222951861e-03f, -1.218064701e-03f,
+-1.213175682e-03f, -1.208284812e-03f, -1.203392099e-03f, -1.198497552e-03f, -1.193601180e-03f, -1.188702990e-03f, -1.183802992e-03f, -1.178901195e-03f, -1.173997606e-03f, -1.169092234e-03f,
+-1.164185088e-03f, -1.159276177e-03f, -1.154365508e-03f, -1.149453091e-03f, -1.144538935e-03f, -1.139623046e-03f, -1.134705436e-03f, -1.129786111e-03f, -1.124865080e-03f, -1.119942353e-03f,
+-1.115017937e-03f, -1.110091842e-03f, -1.105164075e-03f, -1.100234646e-03f, -1.095303563e-03f, -1.090370835e-03f, -1.085436469e-03f, -1.080500476e-03f, -1.075562863e-03f, -1.070623639e-03f,
+-1.065682813e-03f, -1.060740394e-03f, -1.055796389e-03f, -1.050850808e-03f, -1.045903659e-03f, -1.040954951e-03f, -1.036004692e-03f, -1.031052891e-03f, -1.026099558e-03f, -1.021144699e-03f,
+-1.016188325e-03f, -1.011230443e-03f, -1.006271062e-03f, -1.001310192e-03f, -9.963478397e-04f, -9.913840150e-04f, -9.864187261e-04f, -9.814519818e-04f, -9.764837906e-04f, -9.715141613e-04f,
+-9.665431026e-04f, -9.615706230e-04f, -9.565967313e-04f, -9.516214360e-04f, -9.466447460e-04f, -9.416666698e-04f, -9.366872162e-04f, -9.317063937e-04f, -9.267242111e-04f, -9.217406771e-04f,
+-9.167558003e-04f, -9.117695894e-04f, -9.067820531e-04f, -9.017932001e-04f, -8.968030391e-04f, -8.918115788e-04f, -8.868188278e-04f, -8.818247948e-04f, -8.768294886e-04f, -8.718329179e-04f,
+-8.668350913e-04f, -8.618360175e-04f, -8.568357052e-04f, -8.518341633e-04f, -8.468314002e-04f, -8.418274248e-04f, -8.368222458e-04f, -8.318158719e-04f, -8.268083117e-04f, -8.217995741e-04f,
+-8.167896676e-04f, -8.117786011e-04f, -8.067663833e-04f, -8.017530228e-04f, -7.967385284e-04f, -7.917229088e-04f, -7.867061728e-04f, -7.816883291e-04f, -7.766693863e-04f, -7.716493532e-04f,
+-7.666282387e-04f, -7.616060513e-04f, -7.565827998e-04f, -7.515584929e-04f, -7.465331395e-04f, -7.415067482e-04f, -7.364793277e-04f, -7.314508869e-04f, -7.264214344e-04f, -7.213909790e-04f,
+-7.163595294e-04f, -7.113270944e-04f, -7.062936827e-04f, -7.012593031e-04f, -6.962239643e-04f, -6.911876751e-04f, -6.861504442e-04f, -6.811122804e-04f, -6.760731924e-04f, -6.710331890e-04f,
+-6.659922789e-04f, -6.609504709e-04f, -6.559077738e-04f, -6.508641963e-04f, -6.458197472e-04f, -6.407744352e-04f, -6.357282691e-04f, -6.306812577e-04f, -6.256334097e-04f, -6.205847339e-04f,
+-6.155352390e-04f, -6.104849339e-04f, -6.054338273e-04f, -6.003819279e-04f, -5.953292446e-04f, -5.902757861e-04f, -5.852215611e-04f, -5.801665786e-04f, -5.751108471e-04f, -5.700543755e-04f,
+-5.649971727e-04f, -5.599392472e-04f, -5.548806080e-04f, -5.498212638e-04f, -5.447612234e-04f, -5.397004956e-04f, -5.346390891e-04f, -5.295770128e-04f, -5.245142753e-04f, -5.194508856e-04f,
+-5.143868523e-04f, -5.093221843e-04f, -5.042568903e-04f, -4.991909792e-04f, -4.941244597e-04f, -4.890573406e-04f, -4.839896307e-04f, -4.789213387e-04f, -4.738524735e-04f, -4.687830439e-04f,
+-4.637130586e-04f, -4.586425265e-04f, -4.535714562e-04f, -4.484998567e-04f, -4.434277367e-04f, -4.383551050e-04f, -4.332819704e-04f, -4.282083417e-04f, -4.231342276e-04f, -4.180596370e-04f,
+-4.129845787e-04f, -4.079090614e-04f, -4.028330940e-04f, -3.977566852e-04f, -3.926798439e-04f, -3.876025788e-04f, -3.825248988e-04f, -3.774468125e-04f, -3.723683289e-04f, -3.672894567e-04f,
+-3.622102048e-04f, -3.571305818e-04f, -3.520505967e-04f, -3.469702582e-04f, -3.418895750e-04f, -3.368085561e-04f, -3.317272102e-04f, -3.266455461e-04f, -3.215635726e-04f, -3.164812985e-04f,
+-3.113987326e-04f, -3.063158836e-04f, -3.012327605e-04f, -2.961493720e-04f, -2.910657268e-04f, -2.859818339e-04f, -2.808977019e-04f, -2.758133397e-04f, -2.707287561e-04f, -2.656439599e-04f,
+-2.605589598e-04f, -2.554737647e-04f, -2.503883834e-04f, -2.453028247e-04f, -2.402170973e-04f, -2.351312102e-04f, -2.300451719e-04f, -2.249589915e-04f, -2.198726776e-04f, -2.147862390e-04f,
+-2.096996847e-04f, -2.046130232e-04f, -1.995262635e-04f, -1.944394144e-04f, -1.893524846e-04f, -1.842654829e-04f, -1.791784181e-04f, -1.740912991e-04f, -1.690041346e-04f, -1.639169334e-04f,
+-1.588297043e-04f, -1.537424561e-04f, -1.486551976e-04f, -1.435679375e-04f, -1.384806848e-04f, -1.333934481e-04f, -1.283062363e-04f, -1.232190581e-04f, -1.181319223e-04f, -1.130448378e-04f,
+-1.079578133e-04f, -1.028708576e-04f, -9.778397946e-05f, -9.269718773e-05f, -8.761049115e-05f, -8.252389853e-05f, -7.743741865e-05f, -7.235106028e-05f, -6.726483222e-05f, -6.217874325e-05f,
+-5.709280215e-05f, -5.200701771e-05f, -4.692139870e-05f, -4.183595390e-05f, -3.675069210e-05f, -3.166562208e-05f, -2.658075261e-05f, -2.149609247e-05f, -1.641165043e-05f, -1.132743528e-05f,
+-6.243455792e-06f, -1.159720732e-06f, 3.923761121e-06f, 9.006980995e-06f, 1.408993012e-05f, 1.917259972e-05f, 2.425498103e-05f, 2.933706529e-05f, 3.441884371e-05f, 3.950030754e-05f,
+4.458144801e-05f, 4.966225635e-05f, 5.474272381e-05f, 5.982284161e-05f, 6.490260100e-05f, 6.998199321e-05f, 7.506100949e-05f, 8.013964107e-05f, 8.521787920e-05f, 9.029571513e-05f,
+9.537314009e-05f, 1.004501453e-04f, 1.055267221e-04f, 1.106028617e-04f, 1.156785552e-04f, 1.207537941e-04f, 1.258285695e-04f, 1.309028727e-04f, 1.359766949e-04f, 1.410500274e-04f,
+1.461228614e-04f, 1.511951883e-04f, 1.562669992e-04f, 1.613382855e-04f, 1.664090383e-04f, 1.714792490e-04f, 1.765489088e-04f, 1.816180090e-04f, 1.866865409e-04f, 1.917544957e-04f,
+1.968218647e-04f, 2.018886391e-04f, 2.069548103e-04f, 2.120203695e-04f, 2.170853079e-04f, 2.221496170e-04f, 2.272132879e-04f, 2.322763119e-04f, 2.373386803e-04f, 2.424003844e-04f,
+2.474614155e-04f, 2.525217649e-04f, 2.575814238e-04f, 2.626403836e-04f, 2.676986355e-04f, 2.727561709e-04f, 2.778129810e-04f, 2.828690571e-04f, 2.879243905e-04f, 2.929789725e-04f,
+2.980327945e-04f, 3.030858477e-04f, 3.081381235e-04f, 3.131896131e-04f, 3.182403078e-04f, 3.232901991e-04f, 3.283392781e-04f, 3.333875362e-04f, 3.384349647e-04f, 3.434815549e-04f,
+3.485272982e-04f, 3.535721859e-04f, 3.586162092e-04f, 3.636593596e-04f, 3.687016283e-04f, 3.737430068e-04f, 3.787834862e-04f, 3.838230580e-04f, 3.888617135e-04f, 3.938994439e-04f,
+3.989362408e-04f, 4.039720954e-04f, 4.090069990e-04f, 4.140409430e-04f, 4.190739188e-04f, 4.241059176e-04f, 4.291369309e-04f, 4.341669500e-04f, 4.391959663e-04f, 4.442239711e-04f,
+4.492509557e-04f, 4.542769116e-04f, 4.593018302e-04f, 4.643257027e-04f, 4.693485205e-04f, 4.743702751e-04f, 4.793909578e-04f, 4.844105599e-04f, 4.894290729e-04f, 4.944464881e-04f,
+4.994627970e-04f, 5.044779908e-04f, 5.094920611e-04f, 5.145049991e-04f, 5.195167963e-04f, 5.245274441e-04f, 5.295369339e-04f, 5.345452570e-04f, 5.395524049e-04f, 5.445583690e-04f,
+5.495631407e-04f, 5.545667114e-04f, 5.595690725e-04f, 5.645702154e-04f, 5.695701316e-04f, 5.745688124e-04f, 5.795662494e-04f, 5.845624338e-04f, 5.895573573e-04f, 5.945510110e-04f,
+5.995433866e-04f, 6.045344755e-04f, 6.095242690e-04f, 6.145127587e-04f, 6.194999359e-04f, 6.244857921e-04f, 6.294703189e-04f, 6.344535075e-04f, 6.394353495e-04f, 6.444158364e-04f,
+6.493949595e-04f, 6.543727104e-04f, 6.593490806e-04f, 6.643240614e-04f, 6.692976444e-04f, 6.742698211e-04f, 6.792405828e-04f, 6.842099212e-04f, 6.891778276e-04f, 6.941442937e-04f,
+6.991093107e-04f, 7.040728704e-04f, 7.090349641e-04f, 7.139955833e-04f, 7.189547196e-04f, 7.239123644e-04f, 7.288685093e-04f, 7.338231457e-04f, 7.387762652e-04f, 7.437278594e-04f,
+7.486779196e-04f, 7.536264375e-04f, 7.585734045e-04f, 7.635188123e-04f, 7.684626522e-04f, 7.734049160e-04f, 7.783455950e-04f, 7.832846808e-04f, 7.882221651e-04f, 7.931580393e-04f,
+7.980922949e-04f, 8.030249236e-04f, 8.079559169e-04f, 8.128852663e-04f, 8.178129635e-04f, 8.227389999e-04f, 8.276633672e-04f, 8.325860569e-04f, 8.375070606e-04f, 8.424263699e-04f,
+8.473439764e-04f, 8.522598716e-04f, 8.571740472e-04f, 8.620864947e-04f, 8.669972057e-04f, 8.719061719e-04f, 8.768133848e-04f, 8.817188361e-04f, 8.866225173e-04f, 8.915244201e-04f,
+8.964245361e-04f, 9.013228568e-04f, 9.062193741e-04f, 9.111140794e-04f, 9.160069644e-04f, 9.208980207e-04f, 9.257872400e-04f, 9.306746139e-04f, 9.355601341e-04f, 9.404437922e-04f,
+9.453255798e-04f, 9.502054887e-04f, 9.550835104e-04f, 9.599596367e-04f, 9.648338592e-04f, 9.697061696e-04f, 9.745765596e-04f, 9.794450208e-04f, 9.843115449e-04f, 9.891761237e-04f,
+9.940387487e-04f, 9.988994118e-04f, 1.003758105e-03f, 1.008614819e-03f, 1.013469546e-03f, 1.018322278e-03f, 1.023173007e-03f, 1.028021723e-03f, 1.032868420e-03f, 1.037713089e-03f,
+1.042555721e-03f, 1.047396308e-03f, 1.052234842e-03f, 1.057071314e-03f, 1.061905717e-03f, 1.066738042e-03f, 1.071568281e-03f, 1.076396426e-03f, 1.081222468e-03f, 1.086046399e-03f,
+1.090868211e-03f, 1.095687896e-03f, 1.100505445e-03f, 1.105320851e-03f, 1.110134105e-03f, 1.114945198e-03f, 1.119754123e-03f, 1.124560872e-03f, 1.129365435e-03f, 1.134167806e-03f,
+1.138967976e-03f, 1.143765936e-03f, 1.148561679e-03f, 1.153355196e-03f, 1.158146479e-03f, 1.162935521e-03f, 1.167722312e-03f, 1.172506844e-03f, 1.177289111e-03f, 1.182069102e-03f,
+1.186846811e-03f, 1.191622229e-03f, 1.196395347e-03f, 1.201166159e-03f, 1.205934655e-03f, 1.210700828e-03f, 1.215464669e-03f, 1.220226170e-03f, 1.224985324e-03f, 1.229742121e-03f,
+1.234496555e-03f, 1.239248616e-03f, 1.243998297e-03f, 1.248745590e-03f, 1.253490487e-03f, 1.258232979e-03f, 1.262973058e-03f, 1.267710717e-03f, 1.272445947e-03f, 1.277178741e-03f,
+1.281909090e-03f, 1.286636985e-03f, 1.291362420e-03f, 1.296085386e-03f, 1.300805875e-03f, 1.305523879e-03f, 1.310239390e-03f, 1.314952400e-03f, 1.319662900e-03f, 1.324370884e-03f,
+1.329076343e-03f, 1.333779268e-03f, 1.338479652e-03f, 1.343177487e-03f, 1.347872766e-03f, 1.352565478e-03f, 1.357255618e-03f, 1.361943177e-03f, 1.366628147e-03f, 1.371310520e-03f,
+1.375990288e-03f, 1.380667443e-03f, 1.385341977e-03f, 1.390013882e-03f, 1.394683151e-03f, 1.399349775e-03f, 1.404013746e-03f, 1.408675057e-03f, 1.413333699e-03f, 1.417989665e-03f,
+1.422642946e-03f, 1.427293536e-03f, 1.431941425e-03f, 1.436586606e-03f, 1.441229072e-03f, 1.445868813e-03f, 1.450505823e-03f, 1.455140094e-03f, 1.459771617e-03f, 1.464400384e-03f,
+1.469026389e-03f, 1.473649623e-03f, 1.478270077e-03f, 1.482887745e-03f, 1.487502619e-03f, 1.492114690e-03f, 1.496723951e-03f, 1.501330394e-03f, 1.505934011e-03f, 1.510534795e-03f,
+1.515132737e-03f, 1.519727830e-03f, 1.524320065e-03f, 1.528909436e-03f, 1.533495935e-03f, 1.538079552e-03f, 1.542660282e-03f, 1.547238116e-03f, 1.551813046e-03f, 1.556385064e-03f,
+1.560954163e-03f, 1.565520335e-03f, 1.570083573e-03f, 1.574643868e-03f, 1.579201212e-03f, 1.583755599e-03f, 1.588307020e-03f, 1.592855468e-03f, 1.597400935e-03f, 1.601943412e-03f,
+1.606482894e-03f, 1.611019371e-03f, 1.615552836e-03f, 1.620083282e-03f, 1.624610700e-03f, 1.629135084e-03f, 1.633656425e-03f, 1.638174715e-03f, 1.642689948e-03f, 1.647202115e-03f,
+1.651711209e-03f, 1.656217223e-03f, 1.660720147e-03f, 1.665219976e-03f, 1.669716701e-03f, 1.674210314e-03f, 1.678700809e-03f, 1.683188177e-03f, 1.687672411e-03f, 1.692153503e-03f,
+1.696631446e-03f, 1.701106232e-03f, 1.705577854e-03f, 1.710046303e-03f, 1.714511573e-03f, 1.718973656e-03f, 1.723432544e-03f, 1.727888230e-03f, 1.732340706e-03f, 1.736789965e-03f,
+1.741235998e-03f, 1.745678800e-03f, 1.750118361e-03f, 1.754554675e-03f, 1.758987734e-03f, 1.763417531e-03f, 1.767844058e-03f, 1.772267308e-03f, 1.776687272e-03f, 1.781103945e-03f,
+1.785517317e-03f, 1.789927382e-03f, 1.794334133e-03f, 1.798737561e-03f, 1.803137660e-03f, 1.807534421e-03f, 1.811927839e-03f, 1.816317904e-03f, 1.820704610e-03f, 1.825087949e-03f,
+1.829467914e-03f, 1.833844498e-03f, 1.838217692e-03f, 1.842587490e-03f, 1.846953885e-03f, 1.851316868e-03f, 1.855676433e-03f, 1.860032573e-03f, 1.864385279e-03f, 1.868734544e-03f,
+1.873080362e-03f, 1.877422724e-03f, 1.881761624e-03f, 1.886097054e-03f, 1.890429007e-03f, 1.894757475e-03f, 1.899082452e-03f, 1.903403930e-03f, 1.907721901e-03f, 1.912036358e-03f,
+1.916347295e-03f, 1.920654703e-03f, 1.924958576e-03f, 1.929258906e-03f, 1.933555686e-03f, 1.937848909e-03f, 1.942138567e-03f, 1.946424654e-03f, 1.950707161e-03f, 1.954986083e-03f,
+1.959261411e-03f, 1.963533138e-03f, 1.967801258e-03f, 1.972065763e-03f, 1.976326645e-03f, 1.980583898e-03f, 1.984837515e-03f, 1.989087488e-03f, 1.993333810e-03f, 1.997576474e-03f,
+2.001815473e-03f, 2.006050799e-03f, 2.010282447e-03f, 2.014510407e-03f, 2.018734674e-03f, 2.022955240e-03f, 2.027172098e-03f, 2.031385241e-03f, 2.035594662e-03f, 2.039800354e-03f,
+2.044002309e-03f, 2.048200521e-03f, 2.052394983e-03f, 2.056585687e-03f, 2.060772627e-03f, 2.064955795e-03f, 2.069135184e-03f, 2.073310788e-03f, 2.077482599e-03f, 2.081650611e-03f,
+2.085814815e-03f, 2.089975206e-03f, 2.094131776e-03f, 2.098284519e-03f, 2.102433427e-03f, 2.106578493e-03f, 2.110719710e-03f, 2.114857072e-03f, 2.118990572e-03f, 2.123120201e-03f,
+2.127245955e-03f, 2.131367825e-03f, 2.135485804e-03f, 2.139599887e-03f, 2.143710065e-03f, 2.147816332e-03f, 2.151918682e-03f, 2.156017106e-03f, 2.160111599e-03f, 2.164202153e-03f,
+2.168288761e-03f, 2.172371417e-03f, 2.176450114e-03f, 2.180524845e-03f, 2.184595603e-03f, 2.188662381e-03f, 2.192725173e-03f, 2.196783971e-03f, 2.200838770e-03f, 2.204889561e-03f,
+2.208936338e-03f, 2.212979095e-03f, 2.217017824e-03f, 2.221052519e-03f, 2.225083173e-03f, 2.229109780e-03f, 2.233132332e-03f, 2.237150823e-03f, 2.241165246e-03f, 2.245175594e-03f,
+2.249181861e-03f, 2.253184039e-03f, 2.257182123e-03f, 2.261176106e-03f, 2.265165980e-03f, 2.269151739e-03f, 2.273133377e-03f, 2.277110886e-03f, 2.281084261e-03f, 2.285053493e-03f,
+2.289018578e-03f, 2.292979508e-03f, 2.296936276e-03f, 2.300888876e-03f, 2.304837301e-03f, 2.308781545e-03f, 2.312721601e-03f, 2.316657462e-03f, 2.320589122e-03f, 2.324516574e-03f,
+2.328439812e-03f, 2.332358829e-03f, 2.336273619e-03f, 2.340184174e-03f, 2.344090489e-03f, 2.347992557e-03f, 2.351890371e-03f, 2.355783925e-03f, 2.359673212e-03f, 2.363558226e-03f,
+2.367438961e-03f, 2.371315409e-03f, 2.375187565e-03f, 2.379055421e-03f, 2.382918972e-03f, 2.386778211e-03f, 2.390633131e-03f, 2.394483726e-03f, 2.398329990e-03f, 2.402171916e-03f,
+2.406009498e-03f, 2.409842729e-03f, 2.413671603e-03f, 2.417496114e-03f, 2.421316255e-03f, 2.425132019e-03f, 2.428943401e-03f, 2.432750394e-03f, 2.436552991e-03f, 2.440351187e-03f,
+2.444144975e-03f, 2.447934348e-03f, 2.451719301e-03f, 2.455499827e-03f, 2.459275919e-03f, 2.463047572e-03f, 2.466814779e-03f, 2.470577533e-03f, 2.474335829e-03f, 2.478089661e-03f,
+2.481839021e-03f, 2.485583904e-03f, 2.489324303e-03f, 2.493060213e-03f, 2.496791627e-03f, 2.500518538e-03f, 2.504240941e-03f, 2.507958830e-03f, 2.511672197e-03f, 2.515381038e-03f,
+2.519085345e-03f, 2.522785113e-03f, 2.526480335e-03f, 2.530171006e-03f, 2.533857119e-03f, 2.537538668e-03f, 2.541215646e-03f, 2.544888049e-03f, 2.548555869e-03f, 2.552219100e-03f,
+2.555877737e-03f, 2.559531774e-03f, 2.563181203e-03f, 2.566826020e-03f, 2.570466218e-03f, 2.574101790e-03f, 2.577732732e-03f, 2.581359037e-03f, 2.584980699e-03f, 2.588597711e-03f,
+2.592210069e-03f, 2.595817765e-03f, 2.599420794e-03f, 2.603019150e-03f, 2.606612827e-03f, 2.610201819e-03f, 2.613786120e-03f, 2.617365723e-03f, 2.620940624e-03f, 2.624510816e-03f,
+2.628076293e-03f, 2.631637049e-03f, 2.635193079e-03f, 2.638744376e-03f, 2.642290934e-03f, 2.645832748e-03f, 2.649369812e-03f, 2.652902120e-03f, 2.656429665e-03f, 2.659952443e-03f,
+2.663470447e-03f, 2.666983672e-03f, 2.670492111e-03f, 2.673995759e-03f, 2.677494610e-03f, 2.680988658e-03f, 2.684477897e-03f, 2.687962323e-03f, 2.691441927e-03f, 2.694916706e-03f,
+2.698386654e-03f, 2.701851763e-03f, 2.705312030e-03f, 2.708767447e-03f, 2.712218010e-03f, 2.715663713e-03f, 2.719104549e-03f, 2.722540514e-03f, 2.725971601e-03f, 2.729397805e-03f,
+2.732819120e-03f, 2.736235540e-03f, 2.739647060e-03f, 2.743053675e-03f, 2.746455377e-03f, 2.749852163e-03f, 2.753244026e-03f, 2.756630961e-03f, 2.760012962e-03f, 2.763390023e-03f,
+2.766762139e-03f, 2.770129304e-03f, 2.773491513e-03f, 2.776848760e-03f, 2.780201040e-03f, 2.783548347e-03f, 2.786890675e-03f, 2.790228019e-03f, 2.793560374e-03f, 2.796887734e-03f,
+2.800210093e-03f, 2.803527446e-03f, 2.806839788e-03f, 2.810147112e-03f, 2.813449414e-03f, 2.816746689e-03f, 2.820038930e-03f, 2.823326132e-03f, 2.826608290e-03f, 2.829885398e-03f,
+2.833157451e-03f, 2.836424444e-03f, 2.839686371e-03f, 2.842943227e-03f, 2.846195006e-03f, 2.849441703e-03f, 2.852683313e-03f, 2.855919831e-03f, 2.859151250e-03f, 2.862377566e-03f,
+2.865598773e-03f, 2.868814867e-03f, 2.872025841e-03f, 2.875231690e-03f, 2.878432410e-03f, 2.881627995e-03f, 2.884818439e-03f, 2.888003738e-03f, 2.891183886e-03f, 2.894358877e-03f,
+2.897528708e-03f, 2.900693372e-03f, 2.903852864e-03f, 2.907007179e-03f, 2.910156312e-03f, 2.913300258e-03f, 2.916439011e-03f, 2.919572566e-03f, 2.922700919e-03f, 2.925824064e-03f,
+2.928941995e-03f, 2.932054709e-03f, 2.935162199e-03f, 2.938264460e-03f, 2.941361488e-03f, 2.944453278e-03f, 2.947539824e-03f, 2.950621121e-03f, 2.953697164e-03f, 2.956767948e-03f,
+2.959833468e-03f, 2.962893719e-03f, 2.965948696e-03f, 2.968998395e-03f, 2.972042809e-03f, 2.975081934e-03f, 2.978115765e-03f, 2.981144297e-03f, 2.984167526e-03f, 2.987185445e-03f,
+2.990198050e-03f, 2.993205337e-03f, 2.996207300e-03f, 2.999203934e-03f, 3.002195235e-03f, 3.005181197e-03f, 3.008161816e-03f, 3.011137087e-03f, 3.014107005e-03f, 3.017071564e-03f,
+3.020030761e-03f, 3.022984590e-03f, 3.025933047e-03f, 3.028876126e-03f, 3.031813824e-03f, 3.034746134e-03f, 3.037673052e-03f, 3.040594574e-03f, 3.043510695e-03f, 3.046421410e-03f,
+3.049326714e-03f, 3.052226602e-03f, 3.055121070e-03f, 3.058010112e-03f, 3.060893725e-03f, 3.063771904e-03f, 3.066644643e-03f, 3.069511939e-03f, 3.072373786e-03f, 3.075230179e-03f,
+3.078081115e-03f, 3.080926588e-03f, 3.083766594e-03f, 3.086601129e-03f, 3.089430187e-03f, 3.092253763e-03f, 3.095071854e-03f, 3.097884455e-03f, 3.100691561e-03f, 3.103493168e-03f,
+3.106289270e-03f, 3.109079864e-03f, 3.111864945e-03f, 3.114644509e-03f, 3.117418550e-03f, 3.120187064e-03f, 3.122950048e-03f, 3.125707496e-03f, 3.128459403e-03f, 3.131205766e-03f,
+3.133946580e-03f, 3.136681840e-03f, 3.139411542e-03f, 3.142135682e-03f, 3.144854255e-03f, 3.147567257e-03f, 3.150274683e-03f, 3.152976529e-03f, 3.155672790e-03f, 3.158363463e-03f,
+3.161048542e-03f, 3.163728024e-03f, 3.166401904e-03f, 3.169070177e-03f, 3.171732840e-03f, 3.174389888e-03f, 3.177041317e-03f, 3.179687122e-03f, 3.182327299e-03f, 3.184961845e-03f,
+3.187590754e-03f, 3.190214022e-03f, 3.192831645e-03f, 3.195443620e-03f, 3.198049940e-03f, 3.200650604e-03f, 3.203245605e-03f, 3.205834941e-03f, 3.208418606e-03f, 3.210996597e-03f,
+3.213568910e-03f, 3.216135540e-03f, 3.218696483e-03f, 3.221251735e-03f, 3.223801292e-03f, 3.226345149e-03f, 3.228883304e-03f, 3.231415751e-03f, 3.233942486e-03f, 3.236463506e-03f,
+3.238978806e-03f, 3.241488382e-03f, 3.243992231e-03f, 3.246490348e-03f, 3.248982729e-03f, 3.251469370e-03f, 3.253950267e-03f, 3.256425416e-03f, 3.258894814e-03f, 3.261358455e-03f,
+3.263816337e-03f, 3.266268455e-03f, 3.268714806e-03f, 3.271155384e-03f, 3.273590187e-03f, 3.276019211e-03f, 3.278442451e-03f, 3.280859904e-03f, 3.283271566e-03f, 3.285677432e-03f,
+3.288077500e-03f, 3.290471765e-03f, 3.292860223e-03f, 3.295242871e-03f, 3.297619705e-03f, 3.299990720e-03f, 3.302355914e-03f, 3.304715281e-03f, 3.307068820e-03f, 3.309416525e-03f,
+3.311758393e-03f, 3.314094420e-03f, 3.316424603e-03f, 3.318748937e-03f, 3.321067419e-03f, 3.323380046e-03f, 3.325686814e-03f, 3.327987718e-03f, 3.330282755e-03f, 3.332571922e-03f,
+3.334855215e-03f, 3.337132630e-03f, 3.339404164e-03f, 3.341669813e-03f, 3.343929573e-03f, 3.346183441e-03f, 3.348431413e-03f, 3.350673485e-03f, 3.352909655e-03f, 3.355139918e-03f,
+3.357364270e-03f, 3.359582710e-03f, 3.361795231e-03f, 3.364001832e-03f, 3.366202509e-03f, 3.368397258e-03f, 3.370586076e-03f, 3.372768959e-03f, 3.374945904e-03f, 3.377116907e-03f,
+3.379281965e-03f, 3.381441074e-03f, 3.383594232e-03f, 3.385741434e-03f, 3.387882677e-03f, 3.390017958e-03f, 3.392147273e-03f, 3.394270619e-03f, 3.396387993e-03f, 3.398499391e-03f,
+3.400604809e-03f, 3.402704246e-03f, 3.404797697e-03f, 3.406885158e-03f, 3.408966627e-03f, 3.411042101e-03f, 3.413111575e-03f, 3.415175048e-03f, 3.417232515e-03f, 3.419283973e-03f,
+3.421329419e-03f, 3.423368849e-03f, 3.425402262e-03f, 3.427429652e-03f, 3.429451018e-03f, 3.431466356e-03f, 3.433475662e-03f, 3.435478934e-03f, 3.437476169e-03f, 3.439467363e-03f,
+3.441452513e-03f, 3.443431616e-03f, 3.445404668e-03f, 3.447371668e-03f, 3.449332611e-03f, 3.451287495e-03f, 3.453236317e-03f, 3.455179073e-03f, 3.457115760e-03f, 3.459046376e-03f,
+3.460970917e-03f, 3.462889381e-03f, 3.464801763e-03f, 3.466708062e-03f, 3.468608275e-03f, 3.470502398e-03f, 3.472390428e-03f, 3.474272363e-03f, 3.476148199e-03f, 3.478017933e-03f,
+3.479881564e-03f, 3.481739087e-03f, 3.483590500e-03f, 3.485435799e-03f, 3.487274983e-03f, 3.489108048e-03f, 3.490934991e-03f, 3.492755810e-03f, 3.494570502e-03f, 3.496379063e-03f,
+3.498181491e-03f, 3.499977783e-03f, 3.501767937e-03f, 3.503551949e-03f, 3.505329817e-03f, 3.507101538e-03f, 3.508867110e-03f, 3.510626529e-03f, 3.512379793e-03f, 3.514126899e-03f,
+3.515867844e-03f, 3.517602626e-03f, 3.519331242e-03f, 3.521053689e-03f, 3.522769965e-03f, 3.524480067e-03f, 3.526183993e-03f, 3.527881739e-03f, 3.529573303e-03f, 3.531258683e-03f,
+3.532937875e-03f, 3.534610878e-03f, 3.536277689e-03f, 3.537938305e-03f, 3.539592723e-03f, 3.541240942e-03f, 3.542882957e-03f, 3.544518768e-03f, 3.546148372e-03f, 3.547771765e-03f,
+3.549388946e-03f, 3.550999912e-03f, 3.552604660e-03f, 3.554203189e-03f, 3.555795495e-03f, 3.557381576e-03f, 3.558961430e-03f, 3.560535054e-03f, 3.562102446e-03f, 3.563663604e-03f,
+3.565218525e-03f, 3.566767206e-03f, 3.568309646e-03f, 3.569845843e-03f, 3.571375792e-03f, 3.572899493e-03f, 3.574416944e-03f, 3.575928141e-03f, 3.577433082e-03f, 3.578931766e-03f,
+3.580424189e-03f, 3.581910350e-03f, 3.583390247e-03f, 3.584863877e-03f, 3.586331237e-03f, 3.587792326e-03f, 3.589247142e-03f, 3.590695682e-03f, 3.592137944e-03f, 3.593573926e-03f,
+3.595003626e-03f, 3.596427041e-03f, 3.597844170e-03f, 3.599255010e-03f, 3.600659559e-03f, 3.602057816e-03f, 3.603449777e-03f, 3.604835441e-03f, 3.606214807e-03f, 3.607587870e-03f,
+3.608954631e-03f, 3.610315086e-03f, 3.611669234e-03f, 3.613017072e-03f, 3.614358599e-03f, 3.615693813e-03f, 3.617022711e-03f, 3.618345291e-03f, 3.619661553e-03f, 3.620971493e-03f,
+3.622275110e-03f, 3.623572401e-03f, 3.624863366e-03f, 3.626148001e-03f, 3.627426306e-03f, 3.628698277e-03f, 3.629963914e-03f, 3.631223215e-03f, 3.632476177e-03f, 3.633722798e-03f,
+3.634963078e-03f, 3.636197014e-03f, 3.637424604e-03f, 3.638645846e-03f, 3.639860739e-03f, 3.641069281e-03f, 3.642271470e-03f, 3.643467304e-03f, 3.644656782e-03f, 3.645839902e-03f,
+3.647016662e-03f, 3.648187060e-03f, 3.649351095e-03f, 3.650508766e-03f, 3.651660069e-03f, 3.652805004e-03f, 3.653943570e-03f, 3.655075763e-03f, 3.656201583e-03f, 3.657321029e-03f,
+3.658434098e-03f, 3.659540789e-03f, 3.660641100e-03f, 3.661735030e-03f, 3.662822577e-03f, 3.663903740e-03f, 3.664978516e-03f, 3.666046906e-03f, 3.667108906e-03f, 3.668164515e-03f,
+3.669213733e-03f, 3.670256557e-03f, 3.671292987e-03f, 3.672323019e-03f, 3.673346654e-03f, 3.674363889e-03f, 3.675374724e-03f, 3.676379156e-03f, 3.677377185e-03f, 3.678368809e-03f,
+3.679354026e-03f, 3.680332836e-03f, 3.681305236e-03f, 3.682271226e-03f, 3.683230803e-03f, 3.684183968e-03f, 3.685130718e-03f, 3.686071052e-03f, 3.687004969e-03f, 3.687932468e-03f,
+3.688853546e-03f, 3.689768204e-03f, 3.690676440e-03f, 3.691578252e-03f, 3.692473639e-03f, 3.693362600e-03f, 3.694245134e-03f, 3.695121240e-03f, 3.695990916e-03f, 3.696854162e-03f,
+3.697710975e-03f, 3.698561356e-03f, 3.699405302e-03f, 3.700242812e-03f, 3.701073887e-03f, 3.701898523e-03f, 3.702716721e-03f, 3.703528480e-03f, 3.704333797e-03f, 3.705132672e-03f,
+3.705925105e-03f, 3.706711093e-03f, 3.707490637e-03f, 3.708263734e-03f, 3.709030384e-03f, 3.709790586e-03f, 3.710544339e-03f, 3.711291642e-03f, 3.712032493e-03f, 3.712766893e-03f,
+3.713494840e-03f, 3.714216333e-03f, 3.714931371e-03f, 3.715639954e-03f, 3.716342079e-03f, 3.717037748e-03f, 3.717726958e-03f, 3.718409709e-03f, 3.719085999e-03f, 3.719755829e-03f,
+3.720419197e-03f, 3.721076102e-03f, 3.721726544e-03f, 3.722370522e-03f, 3.723008035e-03f, 3.723639082e-03f, 3.724263662e-03f, 3.724881775e-03f, 3.725493421e-03f, 3.726098597e-03f,
+3.726697304e-03f, 3.727289541e-03f, 3.727875307e-03f, 3.728454601e-03f, 3.729027423e-03f, 3.729593772e-03f, 3.730153648e-03f, 3.730707049e-03f, 3.731253975e-03f, 3.731794426e-03f,
+3.732328401e-03f, 3.732855900e-03f, 3.733376921e-03f, 3.733891464e-03f, 3.734399529e-03f, 3.734901115e-03f, 3.735396221e-03f, 3.735884848e-03f, 3.736366994e-03f, 3.736842659e-03f,
+3.737311842e-03f, 3.737774544e-03f, 3.738230762e-03f, 3.738680498e-03f, 3.739123751e-03f, 3.739560520e-03f, 3.739990804e-03f, 3.740414604e-03f, 3.740831918e-03f, 3.741242748e-03f,
+3.741647091e-03f, 3.742044948e-03f, 3.742436318e-03f, 3.742821202e-03f, 3.743199598e-03f, 3.743571507e-03f, 3.743936927e-03f, 3.744295860e-03f, 3.744648304e-03f, 3.744994259e-03f,
+3.745333725e-03f, 3.745666701e-03f, 3.745993188e-03f, 3.746313186e-03f, 3.746626693e-03f, 3.746933710e-03f, 3.747234236e-03f, 3.747528272e-03f, 3.747815817e-03f, 3.748096870e-03f,
+3.748371433e-03f, 3.748639504e-03f, 3.748901084e-03f, 3.749156172e-03f, 3.749404769e-03f, 3.749646874e-03f, 3.749882487e-03f, 3.750111607e-03f, 3.750334236e-03f, 3.750550373e-03f,
+3.750760018e-03f, 3.750963170e-03f, 3.751159830e-03f, 3.751349998e-03f, 3.751533674e-03f, 3.751710857e-03f, 3.751881548e-03f, 3.752045748e-03f, 3.752203454e-03f, 3.752354669e-03f,
+3.752499392e-03f, 3.752637623e-03f, 3.752769362e-03f, 3.752894610e-03f, 3.753013366e-03f, 3.753125630e-03f, 3.753231403e-03f, 3.753330684e-03f, 3.753423475e-03f, 3.753509774e-03f,
+3.753589583e-03f, 3.753662902e-03f, 3.753729730e-03f, 3.753790068e-03f, 3.753843916e-03f, 3.753891274e-03f, 3.753932143e-03f, 3.753966522e-03f, 3.753994413e-03f, 3.754015815e-03f,
+3.754030729e-03f, 3.754039155e-03f, 3.754041093e-03f, 3.754036544e-03f, 3.754025507e-03f, 3.754007984e-03f, 3.753983974e-03f, 3.753953479e-03f, 3.753916498e-03f, 3.753873031e-03f,
+3.753823080e-03f, 3.753766644e-03f, 3.753703725e-03f, 3.753634322e-03f, 3.753558435e-03f, 3.753476066e-03f, 3.753387215e-03f, 3.753291882e-03f, 3.753190068e-03f, 3.753081773e-03f,
+3.752966998e-03f, 3.752845744e-03f, 3.752718010e-03f, 3.752583798e-03f, 3.752443107e-03f, 3.752295939e-03f, 3.752142295e-03f, 3.751982173e-03f, 3.751815577e-03f, 3.751642505e-03f,
+3.751462959e-03f, 3.751276939e-03f, 3.751084445e-03f, 3.750885479e-03f, 3.750680042e-03f, 3.750468133e-03f, 3.750249754e-03f, 3.750024905e-03f, 3.749793587e-03f, 3.749555800e-03f,
+3.749311547e-03f, 3.749060826e-03f, 3.748803639e-03f, 3.748539987e-03f, 3.748269870e-03f, 3.747993289e-03f, 3.747710246e-03f, 3.747420741e-03f, 3.747124774e-03f, 3.746822347e-03f,
+3.746513460e-03f, 3.746198114e-03f, 3.745876311e-03f, 3.745548050e-03f, 3.745213334e-03f, 3.744872162e-03f, 3.744524536e-03f, 3.744170456e-03f, 3.743809924e-03f, 3.743442941e-03f,
+3.743069507e-03f, 3.742689624e-03f, 3.742303292e-03f, 3.741910512e-03f, 3.741511286e-03f, 3.741105614e-03f, 3.740693498e-03f, 3.740274938e-03f, 3.739849936e-03f, 3.739418493e-03f,
+3.738980609e-03f, 3.738536286e-03f, 3.738085525e-03f, 3.737628326e-03f, 3.737164692e-03f, 3.736694623e-03f, 3.736218120e-03f, 3.735735185e-03f, 3.735245819e-03f, 3.734750022e-03f,
+3.734247796e-03f, 3.733739143e-03f, 3.733224062e-03f, 3.732702557e-03f, 3.732174627e-03f, 3.731640274e-03f, 3.731099500e-03f, 3.730552305e-03f, 3.729998691e-03f, 3.729438659e-03f,
+3.728872211e-03f, 3.728299347e-03f, 3.727720069e-03f, 3.727134379e-03f, 3.726542277e-03f, 3.725943765e-03f, 3.725338845e-03f, 3.724727517e-03f, 3.724109784e-03f, 3.723485646e-03f,
+3.722855105e-03f, 3.722218162e-03f, 3.721574819e-03f, 3.720925078e-03f, 3.720268938e-03f, 3.719606403e-03f, 3.718937474e-03f, 3.718262152e-03f, 3.717580438e-03f, 3.716892334e-03f,
+3.716197841e-03f, 3.715496962e-03f, 3.714789697e-03f, 3.714076049e-03f, 3.713356018e-03f, 3.712629606e-03f, 3.711896816e-03f, 3.711157647e-03f, 3.710412103e-03f, 3.709660184e-03f,
+3.708901893e-03f, 3.708137230e-03f, 3.707366198e-03f, 3.706588798e-03f, 3.705805032e-03f, 3.705014901e-03f, 3.704218408e-03f, 3.703415553e-03f, 3.702606340e-03f, 3.701790768e-03f,
+3.700968841e-03f, 3.700140559e-03f, 3.699305925e-03f, 3.698464940e-03f, 3.697617606e-03f, 3.696763925e-03f, 3.695903899e-03f, 3.695037529e-03f, 3.694164818e-03f, 3.693285766e-03f,
+3.692400377e-03f, 3.691508651e-03f, 3.690610591e-03f, 3.689706199e-03f, 3.688795476e-03f, 3.687878424e-03f, 3.686955045e-03f, 3.686025342e-03f, 3.685089315e-03f, 3.684146968e-03f,
+3.683198301e-03f, 3.682243318e-03f, 3.681282019e-03f, 3.680314407e-03f, 3.679340484e-03f, 3.678360252e-03f, 3.677373712e-03f, 3.676380868e-03f, 3.675381720e-03f, 3.674376271e-03f,
+3.673364524e-03f, 3.672346479e-03f, 3.671322139e-03f, 3.670291507e-03f, 3.669254584e-03f, 3.668211372e-03f, 3.667161874e-03f, 3.666106092e-03f, 3.665044028e-03f, 3.663975683e-03f,
+3.662901060e-03f, 3.661820162e-03f, 3.660732991e-03f, 3.659639548e-03f, 3.658539836e-03f, 3.657433857e-03f, 3.656321613e-03f, 3.655203107e-03f, 3.654078341e-03f, 3.652947317e-03f,
+3.651810037e-03f, 3.650666504e-03f, 3.649516719e-03f, 3.648360686e-03f, 3.647198407e-03f, 3.646029883e-03f, 3.644855118e-03f, 3.643674113e-03f, 3.642486871e-03f, 3.641293394e-03f,
+3.640093685e-03f, 3.638887746e-03f, 3.637675579e-03f, 3.636457187e-03f, 3.635232572e-03f, 3.634001737e-03f, 3.632764685e-03f, 3.631521416e-03f, 3.630271935e-03f, 3.629016243e-03f,
+3.627754344e-03f, 3.626486238e-03f, 3.625211930e-03f, 3.623931421e-03f, 3.622644715e-03f, 3.621351812e-03f, 3.620052717e-03f, 3.618747432e-03f, 3.617435959e-03f, 3.616118300e-03f,
+3.614794459e-03f, 3.613464438e-03f, 3.612128240e-03f, 3.610785867e-03f, 3.609437321e-03f, 3.608082606e-03f, 3.606721725e-03f, 3.605354679e-03f, 3.603981472e-03f, 3.602602105e-03f,
+3.601216583e-03f, 3.599824907e-03f, 3.598427081e-03f, 3.597023106e-03f, 3.595612986e-03f, 3.594196724e-03f, 3.592774322e-03f, 3.591345783e-03f, 3.589911110e-03f, 3.588470305e-03f,
+3.587023372e-03f, 3.585570313e-03f, 3.584111131e-03f, 3.582645829e-03f, 3.581174409e-03f, 3.579696875e-03f, 3.578213230e-03f, 3.576723475e-03f, 3.575227615e-03f, 3.573725652e-03f,
+3.572217589e-03f, 3.570703429e-03f, 3.569183174e-03f, 3.567656828e-03f, 3.566124394e-03f, 3.564585874e-03f, 3.563041272e-03f, 3.561490591e-03f, 3.559933833e-03f, 3.558371002e-03f,
+3.556802100e-03f, 3.555227130e-03f, 3.553646097e-03f, 3.552059002e-03f, 3.550465848e-03f, 3.548866640e-03f, 3.547261379e-03f, 3.545650069e-03f, 3.544032713e-03f, 3.542409314e-03f,
+3.540779875e-03f, 3.539144400e-03f, 3.537502891e-03f, 3.535855351e-03f, 3.534201785e-03f, 3.532542194e-03f, 3.530876582e-03f, 3.529204952e-03f, 3.527527308e-03f, 3.525843653e-03f,
+3.524153989e-03f, 3.522458321e-03f, 3.520756650e-03f, 3.519048982e-03f, 3.517335318e-03f, 3.515615662e-03f, 3.513890017e-03f, 3.512158387e-03f, 3.510420775e-03f, 3.508677185e-03f,
+3.506927618e-03f, 3.505172080e-03f, 3.503410573e-03f, 3.501643100e-03f, 3.499869665e-03f, 3.498090272e-03f, 3.496304923e-03f, 3.494513622e-03f, 3.492716372e-03f, 3.490913178e-03f,
+3.489104041e-03f, 3.487288967e-03f, 3.485467957e-03f, 3.483641016e-03f, 3.481808147e-03f, 3.479969353e-03f, 3.478124638e-03f, 3.476274006e-03f, 3.474417460e-03f, 3.472555003e-03f,
+3.470686639e-03f, 3.468812371e-03f, 3.466932203e-03f, 3.465046140e-03f, 3.463154183e-03f, 3.461256336e-03f, 3.459352605e-03f, 3.457442990e-03f, 3.455527498e-03f, 3.453606130e-03f,
+3.451678891e-03f, 3.449745785e-03f, 3.447806814e-03f, 3.445861983e-03f, 3.443911295e-03f, 3.441954754e-03f, 3.439992363e-03f, 3.438024127e-03f, 3.436050049e-03f, 3.434070132e-03f,
+3.432084381e-03f, 3.430092799e-03f, 3.428095389e-03f, 3.426092156e-03f, 3.424083104e-03f, 3.422068236e-03f, 3.420047555e-03f, 3.418021066e-03f, 3.415988773e-03f, 3.413950679e-03f,
+3.411906788e-03f, 3.409857104e-03f, 3.407801631e-03f, 3.405740372e-03f, 3.403673331e-03f, 3.401600513e-03f, 3.399521922e-03f, 3.397437560e-03f, 3.395347432e-03f, 3.393251542e-03f,
+3.391149893e-03f, 3.389042491e-03f, 3.386929338e-03f, 3.384810438e-03f, 3.382685796e-03f, 3.380555416e-03f, 3.378419301e-03f, 3.376277455e-03f, 3.374129883e-03f, 3.371976588e-03f,
+3.369817575e-03f, 3.367652847e-03f, 3.365482408e-03f, 3.363306263e-03f, 3.361124416e-03f, 3.358936870e-03f, 3.356743630e-03f, 3.354544699e-03f, 3.352340083e-03f, 3.350129784e-03f,
+3.347913808e-03f, 3.345692157e-03f, 3.343464837e-03f, 3.341231852e-03f, 3.338993204e-03f, 3.336748900e-03f, 3.334498942e-03f, 3.332243336e-03f, 3.329982085e-03f, 3.327715193e-03f,
+3.325442665e-03f, 3.323164504e-03f, 3.320880716e-03f, 3.318591304e-03f, 3.316296273e-03f, 3.313995626e-03f, 3.311689369e-03f, 3.309377504e-03f, 3.307060038e-03f, 3.304736973e-03f,
+3.302408314e-03f, 3.300074066e-03f, 3.297734233e-03f, 3.295388818e-03f, 3.293037828e-03f, 3.290681265e-03f, 3.288319134e-03f, 3.285951440e-03f, 3.283578186e-03f, 3.281199378e-03f,
+3.278815020e-03f, 3.276425115e-03f, 3.274029669e-03f, 3.271628686e-03f, 3.269222170e-03f, 3.266810126e-03f, 3.264392559e-03f, 3.261969472e-03f, 3.259540870e-03f, 3.257106757e-03f,
+3.254667139e-03f, 3.252222019e-03f, 3.249771402e-03f, 3.247315293e-03f, 3.244853697e-03f, 3.242386616e-03f, 3.239914057e-03f, 3.237436024e-03f, 3.234952521e-03f, 3.232463553e-03f,
+3.229969124e-03f, 3.227469239e-03f, 3.224963903e-03f, 3.222453120e-03f, 3.219936895e-03f, 3.217415232e-03f, 3.214888137e-03f, 3.212355613e-03f, 3.209817666e-03f, 3.207274299e-03f,
+3.204725519e-03f, 3.202171328e-03f, 3.199611733e-03f, 3.197046738e-03f, 3.194476347e-03f, 3.191900565e-03f, 3.189319397e-03f, 3.186732848e-03f, 3.184140922e-03f, 3.181543625e-03f,
+3.178940960e-03f, 3.176332933e-03f, 3.173719548e-03f, 3.171100811e-03f, 3.168476726e-03f, 3.165847297e-03f, 3.163212530e-03f, 3.160572430e-03f, 3.157927000e-03f, 3.155276247e-03f,
+3.152620175e-03f, 3.149958789e-03f, 3.147292094e-03f, 3.144620094e-03f, 3.141942795e-03f, 3.139260201e-03f, 3.136572317e-03f, 3.133879148e-03f, 3.131180700e-03f, 3.128476976e-03f,
+3.125767983e-03f, 3.123053724e-03f, 3.120334206e-03f, 3.117609432e-03f, 3.114879408e-03f, 3.112144138e-03f, 3.109403629e-03f, 3.106657884e-03f, 3.103906909e-03f, 3.101150709e-03f,
+3.098389289e-03f, 3.095622654e-03f, 3.092850808e-03f, 3.090073758e-03f, 3.087291508e-03f, 3.084504062e-03f, 3.081711427e-03f, 3.078913607e-03f, 3.076110608e-03f, 3.073302434e-03f,
+3.070489091e-03f, 3.067670583e-03f, 3.064846916e-03f, 3.062018095e-03f, 3.059184125e-03f, 3.056345012e-03f, 3.053500760e-03f, 3.050651375e-03f, 3.047796861e-03f, 3.044937224e-03f,
+3.042072470e-03f, 3.039202603e-03f, 3.036327629e-03f, 3.033447552e-03f, 3.030562379e-03f, 3.027672114e-03f, 3.024776763e-03f, 3.021876330e-03f, 3.018970821e-03f, 3.016060242e-03f,
+3.013144598e-03f, 3.010223893e-03f, 3.007298134e-03f, 3.004367326e-03f, 3.001431473e-03f, 2.998490581e-03f, 2.995544657e-03f, 2.992593704e-03f, 2.989637728e-03f, 2.986676735e-03f,
+2.983710730e-03f, 2.980739718e-03f, 2.977763705e-03f, 2.974782696e-03f, 2.971796697e-03f, 2.968805713e-03f, 2.965809749e-03f, 2.962808811e-03f, 2.959802904e-03f, 2.956792034e-03f,
+2.953776206e-03f, 2.950755426e-03f, 2.947729698e-03f, 2.944699030e-03f, 2.941663425e-03f, 2.938622890e-03f, 2.935577430e-03f, 2.932527051e-03f, 2.929471757e-03f, 2.926411556e-03f,
+2.923346451e-03f, 2.920276449e-03f, 2.917201556e-03f, 2.914121776e-03f, 2.911037115e-03f, 2.907947580e-03f, 2.904853175e-03f, 2.901753906e-03f, 2.898649779e-03f, 2.895540799e-03f,
+2.892426972e-03f, 2.889308304e-03f, 2.886184800e-03f, 2.883056466e-03f, 2.879923307e-03f, 2.876785330e-03f, 2.873642539e-03f, 2.870494941e-03f, 2.867342541e-03f, 2.864185345e-03f,
+2.861023359e-03f, 2.857856588e-03f, 2.854685037e-03f, 2.851508714e-03f, 2.848327623e-03f, 2.845141770e-03f, 2.841951161e-03f, 2.838755802e-03f, 2.835555698e-03f, 2.832350856e-03f,
+2.829141280e-03f, 2.825926977e-03f, 2.822707953e-03f, 2.819484213e-03f, 2.816255764e-03f, 2.813022610e-03f, 2.809784758e-03f, 2.806542214e-03f, 2.803294984e-03f, 2.800043072e-03f,
+2.796786486e-03f, 2.793525231e-03f, 2.790259313e-03f, 2.786988738e-03f, 2.783713511e-03f, 2.780433639e-03f, 2.777149128e-03f, 2.773859983e-03f, 2.770566210e-03f, 2.767267816e-03f,
+2.763964805e-03f, 2.760657185e-03f, 2.757344961e-03f, 2.754028139e-03f, 2.750706725e-03f, 2.747380725e-03f, 2.744050145e-03f, 2.740714991e-03f, 2.737375269e-03f, 2.734030984e-03f,
+2.730682144e-03f, 2.727328754e-03f, 2.723970819e-03f, 2.720608347e-03f, 2.717241342e-03f, 2.713869812e-03f, 2.710493762e-03f, 2.707113198e-03f, 2.703728127e-03f, 2.700338554e-03f,
+2.696944485e-03f, 2.693545927e-03f, 2.690142885e-03f, 2.686735366e-03f, 2.683323376e-03f, 2.679906921e-03f, 2.676486008e-03f, 2.673060641e-03f, 2.669630828e-03f, 2.666196574e-03f,
+2.662757886e-03f, 2.659314770e-03f, 2.655867232e-03f, 2.652415279e-03f, 2.648958915e-03f, 2.645498149e-03f, 2.642032985e-03f, 2.638563430e-03f, 2.635089490e-03f, 2.631611172e-03f,
+2.628128482e-03f, 2.624641425e-03f, 2.621150009e-03f, 2.617654239e-03f, 2.614154122e-03f, 2.610649664e-03f, 2.607140871e-03f, 2.603627750e-03f, 2.600110306e-03f, 2.596588546e-03f,
+2.593062477e-03f, 2.589532105e-03f, 2.585997436e-03f, 2.582458476e-03f, 2.578915232e-03f, 2.575367710e-03f, 2.571815916e-03f, 2.568259857e-03f, 2.564699539e-03f, 2.561134969e-03f,
+2.557566152e-03f, 2.553993096e-03f, 2.550415806e-03f, 2.546834289e-03f, 2.543248552e-03f, 2.539658601e-03f, 2.536064441e-03f, 2.532466081e-03f, 2.528863525e-03f, 2.525256782e-03f,
+2.521645856e-03f, 2.518030754e-03f, 2.514411484e-03f, 2.510788050e-03f, 2.507160461e-03f, 2.503528722e-03f, 2.499892839e-03f, 2.496252820e-03f, 2.492608671e-03f, 2.488960398e-03f,
+2.485308008e-03f, 2.481651507e-03f, 2.477990902e-03f, 2.474326200e-03f, 2.470657406e-03f, 2.466984528e-03f, 2.463307572e-03f, 2.459626544e-03f, 2.455941452e-03f, 2.452252301e-03f,
+2.448559099e-03f, 2.444861851e-03f, 2.441160565e-03f, 2.437455247e-03f, 2.433745904e-03f, 2.430032542e-03f, 2.426315168e-03f, 2.422593788e-03f, 2.418868410e-03f, 2.415139039e-03f,
+2.411405683e-03f, 2.407668349e-03f, 2.403927041e-03f, 2.400181769e-03f, 2.396432537e-03f, 2.392679354e-03f, 2.388922224e-03f, 2.385161156e-03f, 2.381396156e-03f, 2.377627231e-03f,
+2.373854386e-03f, 2.370077630e-03f, 2.366296968e-03f, 2.362512408e-03f, 2.358723956e-03f, 2.354931619e-03f, 2.351135404e-03f, 2.347335317e-03f, 2.343531366e-03f, 2.339723556e-03f,
+2.335911895e-03f, 2.332096390e-03f, 2.328277047e-03f, 2.324453873e-03f, 2.320626876e-03f, 2.316796060e-03f, 2.312961435e-03f, 2.309123005e-03f, 2.305280779e-03f, 2.301434763e-03f,
+2.297584964e-03f, 2.293731389e-03f, 2.289874044e-03f, 2.286012936e-03f, 2.282148073e-03f, 2.278279461e-03f, 2.274407107e-03f, 2.270531017e-03f, 2.266651200e-03f, 2.262767661e-03f,
+2.258880408e-03f, 2.254989447e-03f, 2.251094786e-03f, 2.247196431e-03f, 2.243294389e-03f, 2.239388668e-03f, 2.235479273e-03f, 2.231566213e-03f, 2.227649493e-03f, 2.223729122e-03f,
+2.219805105e-03f, 2.215877450e-03f, 2.211946164e-03f, 2.208011254e-03f, 2.204072727e-03f, 2.200130590e-03f, 2.196184849e-03f, 2.192235512e-03f, 2.188282586e-03f, 2.184326077e-03f,
+2.180365994e-03f, 2.176402342e-03f, 2.172435129e-03f, 2.168464362e-03f, 2.164490048e-03f, 2.160512194e-03f, 2.156530807e-03f, 2.152545894e-03f, 2.148557463e-03f, 2.144565519e-03f,
+2.140570071e-03f, 2.136571126e-03f, 2.132568689e-03f, 2.128562770e-03f, 2.124553374e-03f, 2.120540509e-03f, 2.116524182e-03f, 2.112504399e-03f, 2.108481169e-03f, 2.104454498e-03f,
+2.100424394e-03f, 2.096390863e-03f, 2.092353913e-03f, 2.088313550e-03f, 2.084269783e-03f, 2.080222618e-03f, 2.076172062e-03f, 2.072118122e-03f, 2.068060806e-03f, 2.064000121e-03f,
+2.059936074e-03f, 2.055868672e-03f, 2.051797923e-03f, 2.047723833e-03f, 2.043646410e-03f, 2.039565661e-03f, 2.035481594e-03f, 2.031394215e-03f, 2.027303531e-03f, 2.023209551e-03f,
+2.019112280e-03f, 2.015011728e-03f, 2.010907900e-03f, 2.006800803e-03f, 2.002690446e-03f, 1.998576836e-03f, 1.994459979e-03f, 1.990339883e-03f, 1.986216556e-03f, 1.982090004e-03f,
+1.977960235e-03f, 1.973827257e-03f, 1.969691076e-03f, 1.965551699e-03f, 1.961409135e-03f, 1.957263390e-03f, 1.953114472e-03f, 1.948962389e-03f, 1.944807146e-03f, 1.940648752e-03f,
+1.936487215e-03f, 1.932322541e-03f, 1.928154738e-03f, 1.923983813e-03f, 1.919809773e-03f, 1.915632627e-03f, 1.911452380e-03f, 1.907269042e-03f, 1.903082618e-03f, 1.898893117e-03f,
+1.894700546e-03f, 1.890504912e-03f, 1.886306223e-03f, 1.882104486e-03f, 1.877899709e-03f, 1.873691898e-03f, 1.869481061e-03f, 1.865267207e-03f, 1.861050341e-03f, 1.856830473e-03f,
+1.852607608e-03f, 1.848381755e-03f, 1.844152921e-03f, 1.839921113e-03f, 1.835686339e-03f, 1.831448607e-03f, 1.827207923e-03f, 1.822964296e-03f, 1.818717732e-03f, 1.814468240e-03f,
+1.810215827e-03f, 1.805960500e-03f, 1.801702266e-03f, 1.797441134e-03f, 1.793177111e-03f, 1.788910204e-03f, 1.784640421e-03f, 1.780367770e-03f, 1.776092257e-03f, 1.771813891e-03f,
+1.767532678e-03f, 1.763248627e-03f, 1.758961745e-03f, 1.754672040e-03f, 1.750379519e-03f, 1.746084190e-03f, 1.741786060e-03f, 1.737485136e-03f, 1.733181428e-03f, 1.728874941e-03f,
+1.724565684e-03f, 1.720253664e-03f, 1.715938888e-03f, 1.711621366e-03f, 1.707301103e-03f, 1.702978107e-03f, 1.698652387e-03f, 1.694323950e-03f, 1.689992803e-03f, 1.685658954e-03f,
+1.681322411e-03f, 1.676983181e-03f, 1.672641271e-03f, 1.668296691e-03f, 1.663949447e-03f, 1.659599546e-03f, 1.655246997e-03f, 1.650891807e-03f, 1.646533984e-03f, 1.642173536e-03f,
+1.637810469e-03f, 1.633444793e-03f, 1.629076514e-03f, 1.624705640e-03f, 1.620332179e-03f, 1.615956139e-03f, 1.611577526e-03f, 1.607196350e-03f, 1.602812617e-03f, 1.598426336e-03f,
+1.594037514e-03f, 1.589646158e-03f, 1.585252278e-03f, 1.580855879e-03f, 1.576456970e-03f, 1.572055559e-03f, 1.567651653e-03f, 1.563245260e-03f, 1.558836389e-03f, 1.554425046e-03f,
+1.550011239e-03f, 1.545594976e-03f, 1.541176265e-03f, 1.536755114e-03f, 1.532331530e-03f, 1.527905522e-03f, 1.523477096e-03f, 1.519046261e-03f, 1.514613025e-03f, 1.510177395e-03f,
+1.505739379e-03f, 1.501298984e-03f, 1.496856220e-03f, 1.492411093e-03f, 1.487963611e-03f, 1.483513782e-03f, 1.479061614e-03f, 1.474607114e-03f, 1.470150292e-03f, 1.465691153e-03f,
+1.461229707e-03f, 1.456765960e-03f, 1.452299921e-03f, 1.447831598e-03f, 1.443360999e-03f, 1.438888130e-03f, 1.434413001e-03f, 1.429935619e-03f, 1.425455992e-03f, 1.420974127e-03f,
+1.416490033e-03f, 1.412003717e-03f, 1.407515188e-03f, 1.403024453e-03f, 1.398531520e-03f, 1.394036396e-03f, 1.389539091e-03f, 1.385039611e-03f, 1.380537965e-03f, 1.376034160e-03f,
+1.371528204e-03f, 1.367020106e-03f, 1.362509873e-03f, 1.357997512e-03f, 1.353483033e-03f, 1.348966443e-03f, 1.344447749e-03f, 1.339926960e-03f, 1.335404084e-03f, 1.330879128e-03f,
+1.326352100e-03f, 1.321823009e-03f, 1.317291862e-03f, 1.312758668e-03f, 1.308223433e-03f, 1.303686167e-03f, 1.299146877e-03f, 1.294605571e-03f, 1.290062256e-03f, 1.285516942e-03f,
+1.280969635e-03f, 1.276420345e-03f, 1.271869078e-03f, 1.267315842e-03f, 1.262760647e-03f, 1.258203499e-03f, 1.253644407e-03f, 1.249083378e-03f, 1.244520421e-03f, 1.239955544e-03f,
+1.235388754e-03f, 1.230820060e-03f, 1.226249470e-03f, 1.221676991e-03f, 1.217102631e-03f, 1.212526399e-03f, 1.207948303e-03f, 1.203368350e-03f, 1.198786549e-03f, 1.194202907e-03f,
+1.189617433e-03f, 1.185030135e-03f, 1.180441020e-03f, 1.175850097e-03f, 1.171257373e-03f, 1.166662858e-03f, 1.162066558e-03f, 1.157468481e-03f, 1.152868637e-03f, 1.148267033e-03f,
+1.143663676e-03f, 1.139058575e-03f, 1.134451738e-03f, 1.129843174e-03f, 1.125232889e-03f, 1.120620893e-03f, 1.116007192e-03f, 1.111391796e-03f, 1.106774713e-03f, 1.102155950e-03f,
+1.097535515e-03f, 1.092913416e-03f, 1.088289663e-03f, 1.083664262e-03f, 1.079037221e-03f, 1.074408550e-03f, 1.069778255e-03f, 1.065146346e-03f, 1.060512829e-03f, 1.055877714e-03f,
+1.051241008e-03f, 1.046602719e-03f, 1.041962855e-03f, 1.037321426e-03f, 1.032678438e-03f, 1.028033899e-03f, 1.023387819e-03f, 1.018740204e-03f, 1.014091064e-03f, 1.009440405e-03f,
+1.004788237e-03f, 1.000134567e-03f, 9.954794044e-04f, 9.908227559e-04f, 9.861646302e-04f, 9.815050354e-04f, 9.768439797e-04f, 9.721814710e-04f, 9.675175177e-04f, 9.628521278e-04f,
+9.581853094e-04f, 9.535170707e-04f, 9.488474199e-04f, 9.441763650e-04f, 9.395039142e-04f, 9.348300757e-04f, 9.301548576e-04f, 9.254782680e-04f, 9.208003152e-04f, 9.161210072e-04f,
+9.114403522e-04f, 9.067583584e-04f, 9.020750339e-04f, 8.973903869e-04f, 8.927044256e-04f, 8.880171581e-04f, 8.833285926e-04f, 8.786387372e-04f, 8.739476002e-04f, 8.692551896e-04f,
+8.645615138e-04f, 8.598665807e-04f, 8.551703987e-04f, 8.504729759e-04f, 8.457743205e-04f, 8.410744407e-04f, 8.363733446e-04f, 8.316710404e-04f, 8.269675364e-04f, 8.222628406e-04f,
+8.175569614e-04f, 8.128499069e-04f, 8.081416852e-04f, 8.034323047e-04f, 7.987217734e-04f, 7.940100996e-04f, 7.892972915e-04f, 7.845833573e-04f, 7.798683052e-04f, 7.751521434e-04f,
+7.704348800e-04f, 7.657165234e-04f, 7.609970817e-04f, 7.562765631e-04f, 7.515549759e-04f, 7.468323282e-04f, 7.421086283e-04f, 7.373838843e-04f, 7.326581046e-04f, 7.279312973e-04f,
+7.232034706e-04f, 7.184746329e-04f, 7.137447922e-04f, 7.090139568e-04f, 7.042821349e-04f, 6.995493349e-04f, 6.948155648e-04f, 6.900808330e-04f, 6.853451476e-04f, 6.806085169e-04f,
+6.758709491e-04f, 6.711324525e-04f, 6.663930353e-04f, 6.616527057e-04f, 6.569114720e-04f, 6.521693424e-04f, 6.474263252e-04f, 6.426824285e-04f, 6.379376607e-04f, 6.331920300e-04f,
+6.284455446e-04f, 6.236982128e-04f, 6.189500427e-04f, 6.142010428e-04f, 6.094512212e-04f, 6.047005861e-04f, 5.999491459e-04f, 5.951969087e-04f, 5.904438828e-04f, 5.856900766e-04f,
+5.809354981e-04f, 5.761801558e-04f, 5.714240577e-04f, 5.666672123e-04f, 5.619096278e-04f, 5.571513124e-04f, 5.523922743e-04f, 5.476325219e-04f, 5.428720634e-04f, 5.381109071e-04f,
+5.333490612e-04f, 5.285865340e-04f, 5.238233337e-04f, 5.190594687e-04f, 5.142949472e-04f, 5.095297774e-04f, 5.047639677e-04f, 4.999975262e-04f, 4.952304613e-04f, 4.904627813e-04f,
+4.856944943e-04f, 4.809256088e-04f, 4.761561329e-04f, 4.713860749e-04f, 4.666154431e-04f, 4.618442458e-04f, 4.570724912e-04f, 4.523001876e-04f, 4.475273433e-04f, 4.427539666e-04f,
+4.379800658e-04f, 4.332056490e-04f, 4.284307247e-04f, 4.236553010e-04f, 4.188793863e-04f, 4.141029889e-04f, 4.093261169e-04f, 4.045487787e-04f, 3.997709826e-04f, 3.949927369e-04f,
+3.902140498e-04f, 3.854349296e-04f, 3.806553846e-04f, 3.758754231e-04f, 3.710950533e-04f, 3.663142836e-04f, 3.615331222e-04f, 3.567515774e-04f, 3.519696575e-04f, 3.471873707e-04f,
+3.424047255e-04f, 3.376217299e-04f, 3.328383924e-04f, 3.280547212e-04f, 3.232707246e-04f, 3.184864108e-04f, 3.137017882e-04f, 3.089168651e-04f, 3.041316497e-04f, 2.993461503e-04f,
+2.945603751e-04f, 2.897743326e-04f, 2.849880310e-04f, 2.802014785e-04f, 2.754146834e-04f, 2.706276540e-04f, 2.658403987e-04f, 2.610529256e-04f, 2.562652432e-04f, 2.514773596e-04f,
+2.466892831e-04f, 2.419010221e-04f, 2.371125847e-04f, 2.323239794e-04f, 2.275352144e-04f, 2.227462979e-04f, 2.179572383e-04f, 2.131680438e-04f, 2.083787227e-04f, 2.035892834e-04f,
+1.987997340e-04f, 1.940100829e-04f, 1.892203383e-04f, 1.844305086e-04f, 1.796406020e-04f, 1.748506268e-04f, 1.700605912e-04f, 1.652705037e-04f, 1.604803723e-04f, 1.556902055e-04f,
+1.509000115e-04f, 1.461097986e-04f, 1.413195750e-04f, 1.365293491e-04f, 1.317391291e-04f, 1.269489233e-04f, 1.221587400e-04f, 1.173685874e-04f, 1.125784738e-04f, 1.077884076e-04f,
+1.029983969e-04f, 9.820845014e-05f, 9.341857548e-05f, 8.862878122e-05f, 8.383907564e-05f, 7.904946701e-05f, 7.425996361e-05f, 6.947057371e-05f, 6.468130557e-05f, 5.989216748e-05f,
+5.510316770e-05f, 5.031431450e-05f, 4.552561615e-05f, 4.073708091e-05f, 3.594871706e-05f, 3.116053286e-05f, 2.637253658e-05f, 2.158473648e-05f, 1.679714083e-05f, 1.200975788e-05f,
+7.222595914e-06f, 2.435663180e-06f, -2.351032057e-06f, -7.137481536e-06f, -1.192367700e-05f, -1.670961019e-05f, -2.149527284e-05f, -2.628065670e-05f, -3.106575352e-05f, -3.585055503e-05f,
+-4.063505299e-05f, -4.541923913e-05f, -5.020310522e-05f, -5.498664299e-05f, -5.976984420e-05f, -6.455270059e-05f, -6.933520393e-05f, -7.411734595e-05f, -7.889911842e-05f, -8.368051308e-05f,
+-8.846152171e-05f, -9.324213604e-05f, -9.802234784e-05f, -1.028021489e-04f, -1.075815309e-04f, -1.123604857e-04f, -1.171390050e-04f, -1.219170805e-04f, -1.266947041e-04f, -1.314718675e-04f,
+-1.362485625e-04f, -1.410247808e-04f, -1.458005143e-04f, -1.505757546e-04f, -1.553504936e-04f, -1.601247230e-04f, -1.648984346e-04f, -1.696716202e-04f, -1.744442715e-04f, -1.792163804e-04f,
+-1.839879386e-04f, -1.887589379e-04f, -1.935293701e-04f, -1.982992269e-04f, -2.030685002e-04f, -2.078371818e-04f, -2.126052633e-04f, -2.173727367e-04f, -2.221395937e-04f, -2.269058261e-04f,
+-2.316714257e-04f, -2.364363842e-04f, -2.412006936e-04f, -2.459643456e-04f, -2.507273319e-04f, -2.554896444e-04f, -2.602512750e-04f, -2.650122153e-04f, -2.697724572e-04f, -2.745319925e-04f,
+-2.792908131e-04f, -2.840489107e-04f, -2.888062772e-04f, -2.935629043e-04f, -2.983187839e-04f, -3.030739078e-04f, -3.078282678e-04f, -3.125818558e-04f, -3.173346635e-04f, -3.220866829e-04f,
+-3.268379056e-04f, -3.315883236e-04f, -3.363379287e-04f, -3.410867126e-04f, -3.458346674e-04f, -3.505817847e-04f, -3.553280564e-04f, -3.600734744e-04f, -3.648180305e-04f, -3.695617166e-04f,
+-3.743045244e-04f, -3.790464459e-04f, -3.837874729e-04f, -3.885275972e-04f, -3.932668107e-04f, -3.980051052e-04f, -4.027424727e-04f, -4.074789049e-04f, -4.122143938e-04f, -4.169489311e-04f,
+-4.216825089e-04f, -4.264151188e-04f, -4.311467528e-04f, -4.358774029e-04f, -4.406070607e-04f, -4.453357183e-04f, -4.500633674e-04f, -4.547900001e-04f, -4.595156081e-04f, -4.642401833e-04f,
+-4.689637177e-04f, -4.736862031e-04f, -4.784076315e-04f, -4.831279946e-04f, -4.878472844e-04f, -4.925654928e-04f, -4.972826118e-04f, -5.019986331e-04f, -5.067135487e-04f, -5.114273506e-04f,
+-5.161400306e-04f, -5.208515806e-04f, -5.255619926e-04f, -5.302712584e-04f, -5.349793701e-04f, -5.396863194e-04f, -5.443920984e-04f, -5.490966990e-04f, -5.538001130e-04f, -5.585023325e-04f,
+-5.632033493e-04f, -5.679031554e-04f, -5.726017427e-04f, -5.772991032e-04f, -5.819952288e-04f, -5.866901115e-04f, -5.913837432e-04f, -5.960761159e-04f, -6.007672214e-04f, -6.054570519e-04f,
+-6.101455992e-04f, -6.148328553e-04f, -6.195188121e-04f, -6.242034617e-04f, -6.288867959e-04f, -6.335688068e-04f, -6.382494864e-04f, -6.429288266e-04f, -6.476068194e-04f, -6.522834568e-04f,
+-6.569587307e-04f, -6.616326333e-04f, -6.663051563e-04f, -6.709762920e-04f, -6.756460321e-04f, -6.803143688e-04f, -6.849812941e-04f, -6.896467999e-04f, -6.943108783e-04f, -6.989735212e-04f,
+-7.036347208e-04f, -7.082944689e-04f, -7.129527577e-04f, -7.176095791e-04f, -7.222649252e-04f, -7.269187880e-04f, -7.315711595e-04f, -7.362220319e-04f, -7.408713970e-04f, -7.455192469e-04f,
+-7.501655738e-04f, -7.548103696e-04f, -7.594536264e-04f, -7.640953362e-04f, -7.687354912e-04f, -7.733740833e-04f, -7.780111046e-04f, -7.826465472e-04f, -7.872804032e-04f, -7.919126646e-04f,
+-7.965433235e-04f, -8.011723720e-04f, -8.057998021e-04f, -8.104256060e-04f, -8.150497758e-04f, -8.196723034e-04f, -8.242931811e-04f, -8.289124009e-04f, -8.335299549e-04f, -8.381458352e-04f,
+-8.427600340e-04f, -8.473725433e-04f, -8.519833553e-04f, -8.565924620e-04f, -8.611998556e-04f, -8.658055283e-04f, -8.704094721e-04f, -8.750116791e-04f, -8.796121416e-04f, -8.842108516e-04f,
+-8.888078013e-04f, -8.934029828e-04f, -8.979963883e-04f, -9.025880100e-04f, -9.071778399e-04f, -9.117658702e-04f, -9.163520932e-04f, -9.209365010e-04f, -9.255190856e-04f, -9.300998394e-04f,
+-9.346787545e-04f, -9.392558230e-04f, -9.438310372e-04f, -9.484043893e-04f, -9.529758713e-04f, -9.575454756e-04f, -9.621131943e-04f, -9.666790196e-04f, -9.712429438e-04f, -9.758049589e-04f,
+-9.803650573e-04f, -9.849232312e-04f, -9.894794728e-04f, -9.940337742e-04f, -9.985861278e-04f, -1.003136526e-03f, -1.007684960e-03f, -1.012231424e-03f, -1.016775908e-03f, -1.021318406e-03f,
+-1.025858909e-03f, -1.030397411e-03f, -1.034933902e-03f, -1.039468375e-03f, -1.044000824e-03f, -1.048531239e-03f, -1.053059613e-03f, -1.057585939e-03f, -1.062110208e-03f, -1.066632414e-03f,
+-1.071152547e-03f, -1.075670602e-03f, -1.080186569e-03f, -1.084700441e-03f, -1.089212211e-03f, -1.093721870e-03f, -1.098229412e-03f, -1.102734828e-03f, -1.107238111e-03f, -1.111739253e-03f,
+-1.116238246e-03f, -1.120735083e-03f, -1.125229756e-03f, -1.129722258e-03f, -1.134212580e-03f, -1.138700716e-03f, -1.143186657e-03f, -1.147670395e-03f, -1.152151924e-03f, -1.156631235e-03f,
+-1.161108322e-03f, -1.165583175e-03f, -1.170055788e-03f, -1.174526154e-03f, -1.178994264e-03f, -1.183460110e-03f, -1.187923686e-03f, -1.192384983e-03f, -1.196843995e-03f, -1.201300713e-03f,
+-1.205755129e-03f, -1.210207237e-03f, -1.214657029e-03f, -1.219104497e-03f, -1.223549633e-03f, -1.227992431e-03f, -1.232432882e-03f, -1.236870978e-03f, -1.241306714e-03f, -1.245740079e-03f,
+-1.250171068e-03f, -1.254599673e-03f, -1.259025886e-03f, -1.263449700e-03f, -1.267871106e-03f, -1.272290099e-03f, -1.276706669e-03f, -1.281120810e-03f, -1.285532514e-03f, -1.289941773e-03f,
+-1.294348581e-03f, -1.298752929e-03f, -1.303154810e-03f, -1.307554217e-03f, -1.311951142e-03f, -1.316345578e-03f, -1.320737517e-03f, -1.325126951e-03f, -1.329513874e-03f, -1.333898277e-03f,
+-1.338280154e-03f, -1.342659497e-03f, -1.347036298e-03f, -1.351410551e-03f, -1.355782247e-03f, -1.360151379e-03f, -1.364517940e-03f, -1.368881922e-03f, -1.373243318e-03f, -1.377602121e-03f,
+-1.381958322e-03f, -1.386311916e-03f, -1.390662894e-03f, -1.395011248e-03f, -1.399356973e-03f, -1.403700059e-03f, -1.408040501e-03f, -1.412378289e-03f, -1.416713418e-03f, -1.421045880e-03f,
+-1.425375666e-03f, -1.429702771e-03f, -1.434027187e-03f, -1.438348906e-03f, -1.442667921e-03f, -1.446984224e-03f, -1.451297809e-03f, -1.455608668e-03f, -1.459916794e-03f, -1.464222179e-03f,
+-1.468524816e-03f, -1.472824699e-03f, -1.477121818e-03f, -1.481416168e-03f, -1.485707741e-03f, -1.489996529e-03f, -1.494282526e-03f, -1.498565724e-03f, -1.502846116e-03f, -1.507123695e-03f,
+-1.511398453e-03f, -1.515670383e-03f, -1.519939478e-03f, -1.524205730e-03f, -1.528469133e-03f, -1.532729680e-03f, -1.536987362e-03f, -1.541242173e-03f, -1.545494105e-03f, -1.549743152e-03f,
+-1.553989306e-03f, -1.558232561e-03f, -1.562472907e-03f, -1.566710340e-03f, -1.570944851e-03f, -1.575176433e-03f, -1.579405079e-03f, -1.583630782e-03f, -1.587853535e-03f, -1.592073331e-03f,
+-1.596290162e-03f, -1.600504021e-03f, -1.604714902e-03f, -1.608922797e-03f, -1.613127698e-03f, -1.617329600e-03f, -1.621528494e-03f, -1.625724374e-03f, -1.629917232e-03f, -1.634107062e-03f,
+-1.638293857e-03f, -1.642477608e-03f, -1.646658310e-03f, -1.650835955e-03f, -1.655010536e-03f, -1.659182045e-03f, -1.663350477e-03f, -1.667515824e-03f, -1.671678079e-03f, -1.675837234e-03f,
+-1.679993283e-03f, -1.684146219e-03f, -1.688296035e-03f, -1.692442723e-03f, -1.696586278e-03f, -1.700726690e-03f, -1.704863955e-03f, -1.708998064e-03f, -1.713129011e-03f, -1.717256789e-03f,
+-1.721381391e-03f, -1.725502809e-03f, -1.729621038e-03f, -1.733736069e-03f, -1.737847896e-03f, -1.741956512e-03f, -1.746061910e-03f, -1.750164084e-03f, -1.754263025e-03f, -1.758358728e-03f,
+-1.762451186e-03f, -1.766540390e-03f, -1.770626336e-03f, -1.774709015e-03f, -1.778788420e-03f, -1.782864546e-03f, -1.786937385e-03f, -1.791006930e-03f, -1.795073174e-03f, -1.799136110e-03f,
+-1.803195732e-03f, -1.807252033e-03f, -1.811305006e-03f, -1.815354643e-03f, -1.819400939e-03f, -1.823443887e-03f, -1.827483478e-03f, -1.831519708e-03f, -1.835552569e-03f, -1.839582053e-03f,
+-1.843608155e-03f, -1.847630868e-03f, -1.851650184e-03f, -1.855666098e-03f, -1.859678601e-03f, -1.863687688e-03f, -1.867693352e-03f, -1.871695586e-03f, -1.875694383e-03f, -1.879689737e-03f,
+-1.883681640e-03f, -1.887670086e-03f, -1.891655069e-03f, -1.895636581e-03f, -1.899614616e-03f, -1.903589168e-03f, -1.907560229e-03f, -1.911527792e-03f, -1.915491852e-03f, -1.919452401e-03f,
+-1.923409434e-03f, -1.927362942e-03f, -1.931312920e-03f, -1.935259360e-03f, -1.939202257e-03f, -1.943141603e-03f, -1.947077393e-03f, -1.951009618e-03f, -1.954938273e-03f, -1.958863352e-03f,
+-1.962784847e-03f, -1.966702752e-03f, -1.970617060e-03f, -1.974527764e-03f, -1.978434859e-03f, -1.982338338e-03f, -1.986238193e-03f, -1.990134419e-03f, -1.994027009e-03f, -1.997915956e-03f,
+-2.001801254e-03f, -2.005682896e-03f, -2.009560877e-03f, -2.013435188e-03f, -2.017305824e-03f, -2.021172778e-03f, -2.025036044e-03f, -2.028895616e-03f, -2.032751486e-03f, -2.036603648e-03f,
+-2.040452096e-03f, -2.044296824e-03f, -2.048137824e-03f, -2.051975091e-03f, -2.055808618e-03f, -2.059638398e-03f, -2.063464426e-03f, -2.067286694e-03f, -2.071105196e-03f, -2.074919927e-03f,
+-2.078730879e-03f, -2.082538046e-03f, -2.086341422e-03f, -2.090141000e-03f, -2.093936774e-03f, -2.097728737e-03f, -2.101516884e-03f, -2.105301208e-03f, -2.109081702e-03f, -2.112858361e-03f,
+-2.116631177e-03f, -2.120400145e-03f, -2.124165258e-03f, -2.127926510e-03f, -2.131683894e-03f, -2.135437405e-03f, -2.139187036e-03f, -2.142932780e-03f, -2.146674632e-03f, -2.150412585e-03f,
+-2.154146633e-03f, -2.157876770e-03f, -2.161602989e-03f, -2.165325284e-03f, -2.169043649e-03f, -2.172758078e-03f, -2.176468564e-03f, -2.180175102e-03f, -2.183877684e-03f, -2.187576306e-03f,
+-2.191270960e-03f, -2.194961640e-03f, -2.198648341e-03f, -2.202331056e-03f, -2.206009779e-03f, -2.209684504e-03f, -2.213355224e-03f, -2.217021934e-03f, -2.220684628e-03f, -2.224343299e-03f,
+-2.227997940e-03f, -2.231648547e-03f, -2.235295113e-03f, -2.238937631e-03f, -2.242576097e-03f, -2.246210503e-03f, -2.249840843e-03f, -2.253467112e-03f, -2.257089304e-03f, -2.260707412e-03f,
+-2.264321430e-03f, -2.267931352e-03f, -2.271537173e-03f, -2.275138886e-03f, -2.278736486e-03f, -2.282329965e-03f, -2.285919319e-03f, -2.289504541e-03f, -2.293085625e-03f, -2.296662566e-03f,
+-2.300235356e-03f, -2.303803991e-03f, -2.307368465e-03f, -2.310928771e-03f, -2.314484903e-03f, -2.318036856e-03f, -2.321584624e-03f, -2.325128200e-03f, -2.328667579e-03f, -2.332202755e-03f,
+-2.335733722e-03f, -2.339260474e-03f, -2.342783005e-03f, -2.346301309e-03f, -2.349815381e-03f, -2.353325215e-03f, -2.356830804e-03f, -2.360332143e-03f, -2.363829227e-03f, -2.367322048e-03f,
+-2.370810602e-03f, -2.374294883e-03f, -2.377774884e-03f, -2.381250601e-03f, -2.384722026e-03f, -2.388189155e-03f, -2.391651982e-03f, -2.395110501e-03f, -2.398564705e-03f, -2.402014591e-03f,
+-2.405460150e-03f, -2.408901379e-03f, -2.412338271e-03f, -2.415770820e-03f, -2.419199021e-03f, -2.422622869e-03f, -2.426042356e-03f, -2.429457478e-03f, -2.432868229e-03f, -2.436274604e-03f,
+-2.439676596e-03f, -2.443074200e-03f, -2.446467410e-03f, -2.449856221e-03f, -2.453240627e-03f, -2.456620623e-03f, -2.459996202e-03f, -2.463367359e-03f, -2.466734089e-03f, -2.470096386e-03f,
+-2.473454245e-03f, -2.476807659e-03f, -2.480156624e-03f, -2.483501133e-03f, -2.486841181e-03f, -2.490176763e-03f, -2.493507874e-03f, -2.496834506e-03f, -2.500156656e-03f, -2.503474317e-03f,
+-2.506787484e-03f, -2.510096151e-03f, -2.513400314e-03f, -2.516699966e-03f, -2.519995102e-03f, -2.523285717e-03f, -2.526571804e-03f, -2.529853360e-03f, -2.533130377e-03f, -2.536402852e-03f,
+-2.539670778e-03f, -2.542934149e-03f, -2.546192962e-03f, -2.549447209e-03f, -2.552696886e-03f, -2.555941988e-03f, -2.559182508e-03f, -2.562418442e-03f, -2.565649784e-03f, -2.568876530e-03f,
+-2.572098672e-03f, -2.575316207e-03f, -2.578529129e-03f, -2.581737433e-03f, -2.584941112e-03f, -2.588140163e-03f, -2.591334579e-03f, -2.594524356e-03f, -2.597709488e-03f, -2.600889969e-03f,
+-2.604065795e-03f, -2.607236961e-03f, -2.610403460e-03f, -2.613565289e-03f, -2.616722440e-03f, -2.619874911e-03f, -2.623022694e-03f, -2.626165786e-03f, -2.629304180e-03f, -2.632437872e-03f,
+-2.635566856e-03f, -2.638691127e-03f, -2.641810681e-03f, -2.644925511e-03f, -2.648035614e-03f, -2.651140982e-03f, -2.654241613e-03f, -2.657337500e-03f, -2.660428638e-03f, -2.663515022e-03f,
+-2.666596647e-03f, -2.669673509e-03f, -2.672745601e-03f, -2.675812919e-03f, -2.678875458e-03f, -2.681933213e-03f, -2.684986178e-03f, -2.688034349e-03f, -2.691077721e-03f, -2.694116288e-03f,
+-2.697150046e-03f, -2.700178990e-03f, -2.703203114e-03f, -2.706222414e-03f, -2.709236884e-03f, -2.712246521e-03f, -2.715251318e-03f, -2.718251270e-03f, -2.721246374e-03f, -2.724236624e-03f,
+-2.727222014e-03f, -2.730202541e-03f, -2.733178199e-03f, -2.736148983e-03f, -2.739114889e-03f, -2.742075911e-03f, -2.745032045e-03f, -2.747983285e-03f, -2.750929628e-03f, -2.753871067e-03f,
+-2.756807599e-03f, -2.759739219e-03f, -2.762665921e-03f, -2.765587701e-03f, -2.768504553e-03f, -2.771416474e-03f, -2.774323459e-03f, -2.777225502e-03f, -2.780122599e-03f, -2.783014745e-03f,
+-2.785901936e-03f, -2.788784166e-03f, -2.791661431e-03f, -2.794533726e-03f, -2.797401047e-03f, -2.800263389e-03f, -2.803120746e-03f, -2.805973115e-03f, -2.808820491e-03f, -2.811662869e-03f,
+-2.814500244e-03f, -2.817332612e-03f, -2.820159968e-03f, -2.822982308e-03f, -2.825799626e-03f, -2.828611919e-03f, -2.831419181e-03f, -2.834221409e-03f, -2.837018596e-03f, -2.839810740e-03f,
+-2.842597835e-03f, -2.845379877e-03f, -2.848156860e-03f, -2.850928782e-03f, -2.853695636e-03f, -2.856457420e-03f, -2.859214127e-03f, -2.861965754e-03f, -2.864712295e-03f, -2.867453748e-03f,
+-2.870190106e-03f, -2.872921366e-03f, -2.875647523e-03f, -2.878368573e-03f, -2.881084512e-03f, -2.883795334e-03f, -2.886501035e-03f, -2.889201611e-03f, -2.891897058e-03f, -2.894587371e-03f,
+-2.897272546e-03f, -2.899952578e-03f, -2.902627464e-03f, -2.905297198e-03f, -2.907961776e-03f, -2.910621194e-03f, -2.913275448e-03f, -2.915924533e-03f, -2.918568445e-03f, -2.921207180e-03f,
+-2.923840733e-03f, -2.926469100e-03f, -2.929092278e-03f, -2.931710260e-03f, -2.934323044e-03f, -2.936930625e-03f, -2.939532999e-03f, -2.942130161e-03f, -2.944722108e-03f, -2.947308834e-03f,
+-2.949890337e-03f, -2.952466611e-03f, -2.955037653e-03f, -2.957603458e-03f, -2.960164023e-03f, -2.962719342e-03f, -2.965269412e-03f, -2.967814229e-03f, -2.970353789e-03f, -2.972888086e-03f,
+-2.975417119e-03f, -2.977940881e-03f, -2.980459370e-03f, -2.982972581e-03f, -2.985480510e-03f, -2.987983152e-03f, -2.990480505e-03f, -2.992972563e-03f, -2.995459323e-03f, -2.997940781e-03f,
+-3.000416933e-03f, -3.002887774e-03f, -3.005353301e-03f, -3.007813510e-03f, -3.010268396e-03f, -3.012717956e-03f, -3.015162186e-03f, -3.017601082e-03f, -3.020034640e-03f, -3.022462856e-03f,
+-3.024885726e-03f, -3.027303245e-03f, -3.029715411e-03f, -3.032122220e-03f, -3.034523667e-03f, -3.036919748e-03f, -3.039310460e-03f, -3.041695799e-03f, -3.044075761e-03f, -3.046450342e-03f,
+-3.048819538e-03f, -3.051183346e-03f, -3.053541761e-03f, -3.055894781e-03f, -3.058242400e-03f, -3.060584616e-03f, -3.062921424e-03f, -3.065252820e-03f, -3.067578802e-03f, -3.069899365e-03f,
+-3.072214506e-03f, -3.074524220e-03f, -3.076828505e-03f, -3.079127355e-03f, -3.081420769e-03f, -3.083708741e-03f, -3.085991269e-03f, -3.088268348e-03f, -3.090539975e-03f, -3.092806147e-03f,
+-3.095066859e-03f, -3.097322108e-03f, -3.099571891e-03f, -3.101816204e-03f, -3.104055042e-03f, -3.106288403e-03f, -3.108516284e-03f, -3.110738680e-03f, -3.112955587e-03f, -3.115167003e-03f,
+-3.117372924e-03f, -3.119573346e-03f, -3.121768266e-03f, -3.123957680e-03f, -3.126141584e-03f, -3.128319976e-03f, -3.130492852e-03f, -3.132660208e-03f, -3.134822040e-03f, -3.136978346e-03f,
+-3.139129122e-03f, -3.141274365e-03f, -3.143414070e-03f, -3.145548235e-03f, -3.147676856e-03f, -3.149799930e-03f, -3.151917453e-03f, -3.154029423e-03f, -3.156135835e-03f, -3.158236686e-03f,
+-3.160331973e-03f, -3.162421693e-03f, -3.164505842e-03f, -3.166584418e-03f, -3.168657415e-03f, -3.170724833e-03f, -3.172786666e-03f, -3.174842912e-03f, -3.176893567e-03f, -3.178938629e-03f,
+-3.180978094e-03f, -3.183011958e-03f, -3.185040219e-03f, -3.187062874e-03f, -3.189079918e-03f, -3.191091349e-03f, -3.193097164e-03f, -3.195097360e-03f, -3.197091933e-03f, -3.199080880e-03f,
+-3.201064198e-03f, -3.203041884e-03f, -3.205013934e-03f, -3.206980347e-03f, -3.208941118e-03f, -3.210896244e-03f, -3.212845722e-03f, -3.214789550e-03f, -3.216727724e-03f, -3.218660241e-03f,
+-3.220587098e-03f, -3.222508292e-03f, -3.224423820e-03f, -3.226333679e-03f, -3.228237866e-03f, -3.230136378e-03f, -3.232029212e-03f, -3.233916365e-03f, -3.235797833e-03f, -3.237673615e-03f,
+-3.239543707e-03f, -3.241408106e-03f, -3.243266809e-03f, -3.245119813e-03f, -3.246967116e-03f, -3.248808714e-03f, -3.250644604e-03f, -3.252474785e-03f, -3.254299252e-03f, -3.256118003e-03f,
+-3.257931035e-03f, -3.259738345e-03f, -3.261539931e-03f, -3.263335789e-03f, -3.265125917e-03f, -3.266910312e-03f, -3.268688971e-03f, -3.270461891e-03f, -3.272229070e-03f, -3.273990505e-03f,
+-3.275746193e-03f, -3.277496131e-03f, -3.279240317e-03f, -3.280978748e-03f, -3.282711420e-03f, -3.284438333e-03f, -3.286159482e-03f, -3.287874865e-03f, -3.289584480e-03f, -3.291288323e-03f,
+-3.292986393e-03f, -3.294678685e-03f, -3.296365199e-03f, -3.298045931e-03f, -3.299720879e-03f, -3.301390039e-03f, -3.303053410e-03f, -3.304710989e-03f, -3.306362773e-03f, -3.308008759e-03f,
+-3.309648946e-03f, -3.311283330e-03f, -3.312911910e-03f, -3.314534682e-03f, -3.316151644e-03f, -3.317762793e-03f, -3.319368128e-03f, -3.320967645e-03f, -3.322561342e-03f, -3.324149217e-03f,
+-3.325731267e-03f, -3.327307489e-03f, -3.328877882e-03f, -3.330442443e-03f, -3.332001170e-03f, -3.333554059e-03f, -3.335101109e-03f, -3.336642318e-03f, -3.338177682e-03f, -3.339707200e-03f,
+-3.341230869e-03f, -3.342748687e-03f, -3.344260652e-03f, -3.345766761e-03f, -3.347267012e-03f, -3.348761403e-03f, -3.350249931e-03f, -3.351732594e-03f, -3.353209389e-03f, -3.354680316e-03f,
+-3.356145371e-03f, -3.357604551e-03f, -3.359057856e-03f, -3.360505283e-03f, -3.361946828e-03f, -3.363382492e-03f, -3.364812270e-03f, -3.366236161e-03f, -3.367654163e-03f, -3.369066273e-03f,
+-3.370472490e-03f, -3.371872811e-03f, -3.373267234e-03f, -3.374655758e-03f, -3.376038379e-03f, -3.377415096e-03f, -3.378785907e-03f, -3.380150810e-03f, -3.381509803e-03f, -3.382862883e-03f,
+-3.384210048e-03f, -3.385551298e-03f, -3.386886629e-03f, -3.388216039e-03f, -3.389539527e-03f, -3.390857090e-03f, -3.392168727e-03f, -3.393474436e-03f, -3.394774214e-03f, -3.396068060e-03f,
+-3.397355972e-03f, -3.398637947e-03f, -3.399913984e-03f, -3.401184082e-03f, -3.402448238e-03f, -3.403706449e-03f, -3.404958716e-03f, -3.406205034e-03f, -3.407445404e-03f, -3.408679822e-03f,
+-3.409908287e-03f, -3.411130797e-03f, -3.412347351e-03f, -3.413557946e-03f, -3.414762581e-03f, -3.415961254e-03f, -3.417153963e-03f, -3.418340706e-03f, -3.419521483e-03f, -3.420696290e-03f,
+-3.421865126e-03f, -3.423027990e-03f, -3.424184880e-03f, -3.425335794e-03f, -3.426480730e-03f, -3.427619687e-03f, -3.428752663e-03f, -3.429879657e-03f, -3.431000666e-03f, -3.432115689e-03f,
+-3.433224725e-03f, -3.434327772e-03f, -3.435424828e-03f, -3.436515892e-03f, -3.437600962e-03f, -3.438680036e-03f, -3.439753114e-03f, -3.440820193e-03f, -3.441881271e-03f, -3.442936349e-03f,
+-3.443985423e-03f, -3.445028492e-03f, -3.446065555e-03f, -3.447096611e-03f, -3.448121657e-03f, -3.449140693e-03f, -3.450153717e-03f, -3.451160727e-03f, -3.452161723e-03f, -3.453156702e-03f,
+-3.454145663e-03f, -3.455128605e-03f, -3.456105527e-03f, -3.457076426e-03f, -3.458041303e-03f, -3.459000154e-03f, -3.459952980e-03f, -3.460899778e-03f, -3.461840547e-03f, -3.462775287e-03f,
+-3.463703995e-03f, -3.464626670e-03f, -3.465543312e-03f, -3.466453918e-03f, -3.467358488e-03f, -3.468257020e-03f, -3.469149513e-03f, -3.470035966e-03f, -3.470916377e-03f, -3.471790746e-03f,
+-3.472659071e-03f, -3.473521350e-03f, -3.474377584e-03f, -3.475227770e-03f, -3.476071908e-03f, -3.476909995e-03f, -3.477742032e-03f, -3.478568017e-03f, -3.479387949e-03f, -3.480201827e-03f,
+-3.481009649e-03f, -3.481811415e-03f, -3.482607123e-03f, -3.483396772e-03f, -3.484180362e-03f, -3.484957892e-03f, -3.485729359e-03f, -3.486494764e-03f, -3.487254105e-03f, -3.488007382e-03f,
+-3.488754592e-03f, -3.489495736e-03f, -3.490230812e-03f, -3.490959820e-03f, -3.491682758e-03f, -3.492399625e-03f, -3.493110421e-03f, -3.493815144e-03f, -3.494513794e-03f, -3.495206369e-03f,
+-3.495892870e-03f, -3.496573295e-03f, -3.497247642e-03f, -3.497915912e-03f, -3.498578103e-03f, -3.499234215e-03f, -3.499884247e-03f, -3.500528198e-03f, -3.501166066e-03f, -3.501797852e-03f,
+-3.502423555e-03f, -3.503043173e-03f, -3.503656707e-03f, -3.504264155e-03f, -3.504865516e-03f, -3.505460790e-03f, -3.506049976e-03f, -3.506633073e-03f, -3.507210081e-03f, -3.507781000e-03f,
+-3.508345827e-03f, -3.508904563e-03f, -3.509457207e-03f, -3.510003758e-03f, -3.510544216e-03f, -3.511078580e-03f, -3.511606850e-03f, -3.512129024e-03f, -3.512645103e-03f, -3.513155085e-03f,
+-3.513658970e-03f, -3.514156758e-03f, -3.514648448e-03f, -3.515134039e-03f, -3.515613531e-03f, -3.516086924e-03f, -3.516554216e-03f, -3.517015408e-03f, -3.517470499e-03f, -3.517919488e-03f,
+-3.518362375e-03f, -3.518799160e-03f, -3.519229842e-03f, -3.519654420e-03f, -3.520072894e-03f, -3.520485264e-03f, -3.520891530e-03f, -3.521291690e-03f, -3.521685746e-03f, -3.522073695e-03f,
+-3.522455538e-03f, -3.522831275e-03f, -3.523200905e-03f, -3.523564428e-03f, -3.523921843e-03f, -3.524273150e-03f, -3.524618350e-03f, -3.524957441e-03f, -3.525290423e-03f, -3.525617296e-03f,
+-3.525938061e-03f, -3.526252715e-03f, -3.526561261e-03f, -3.526863696e-03f, -3.527160021e-03f, -3.527450236e-03f, -3.527734340e-03f, -3.528012334e-03f, -3.528284217e-03f, -3.528549989e-03f,
+-3.528809650e-03f, -3.529063199e-03f, -3.529310638e-03f, -3.529551964e-03f, -3.529787179e-03f, -3.530016282e-03f, -3.530239274e-03f, -3.530456153e-03f, -3.530666920e-03f, -3.530871576e-03f,
+-3.531070119e-03f, -3.531262551e-03f, -3.531448870e-03f, -3.531629077e-03f, -3.531803172e-03f, -3.531971155e-03f, -3.532133025e-03f, -3.532288784e-03f, -3.532438430e-03f, -3.532581965e-03f,
+-3.532719388e-03f, -3.532850698e-03f, -3.532975897e-03f, -3.533094985e-03f, -3.533207961e-03f, -3.533314825e-03f, -3.533415578e-03f, -3.533510220e-03f, -3.533598750e-03f, -3.533681170e-03f,
+-3.533757479e-03f, -3.533827678e-03f, -3.533891766e-03f, -3.533949744e-03f, -3.534001612e-03f, -3.534047370e-03f, -3.534087019e-03f, -3.534120559e-03f, -3.534147989e-03f, -3.534169311e-03f,
+-3.534184524e-03f, -3.534193630e-03f, -3.534196627e-03f, -3.534193516e-03f, -3.534184299e-03f, -3.534168974e-03f, -3.534147543e-03f, -3.534120005e-03f, -3.534086362e-03f, -3.534046613e-03f,
+-3.534000759e-03f, -3.533948800e-03f, -3.533890736e-03f, -3.533826569e-03f, -3.533756298e-03f, -3.533679924e-03f, -3.533597447e-03f, -3.533508869e-03f, -3.533414188e-03f, -3.533313406e-03f,
+-3.533206523e-03f, -3.533093540e-03f, -3.532974457e-03f, -3.532849275e-03f, -3.532717994e-03f, -3.532580614e-03f, -3.532437137e-03f, -3.532287563e-03f, -3.532131892e-03f, -3.531970126e-03f,
+-3.531802264e-03f, -3.531628307e-03f, -3.531448256e-03f, -3.531262111e-03f, -3.531069873e-03f, -3.530871543e-03f, -3.530667122e-03f, -3.530456609e-03f, -3.530240006e-03f, -3.530017314e-03f,
+-3.529788532e-03f, -3.529553663e-03f, -3.529312705e-03f, -3.529065661e-03f, -3.528812531e-03f, -3.528553316e-03f, -3.528288016e-03f, -3.528016632e-03f, -3.527739165e-03f, -3.527455616e-03f,
+-3.527165986e-03f, -3.526870274e-03f, -3.526568484e-03f, -3.526260614e-03f, -3.525946666e-03f, -3.525626640e-03f, -3.525300539e-03f, -3.524968361e-03f, -3.524630109e-03f, -3.524285783e-03f,
+-3.523935385e-03f, -3.523578914e-03f, -3.523216372e-03f, -3.522847761e-03f, -3.522473080e-03f, -3.522092331e-03f, -3.521705514e-03f, -3.521312632e-03f, -3.520913684e-03f, -3.520508671e-03f,
+-3.520097596e-03f, -3.519680458e-03f, -3.519257259e-03f, -3.518828000e-03f, -3.518392682e-03f, -3.517951305e-03f, -3.517503872e-03f, -3.517050383e-03f, -3.516590838e-03f, -3.516125240e-03f,
+-3.515653590e-03f, -3.515175888e-03f, -3.514692135e-03f, -3.514202334e-03f, -3.513706484e-03f, -3.513204587e-03f, -3.512696645e-03f, -3.512182658e-03f, -3.511662627e-03f, -3.511136555e-03f,
+-3.510604441e-03f, -3.510066288e-03f, -3.509522096e-03f, -3.508971867e-03f, -3.508415602e-03f, -3.507853303e-03f, -3.507284970e-03f, -3.506710604e-03f, -3.506130208e-03f, -3.505543783e-03f,
+-3.504951329e-03f, -3.504352848e-03f, -3.503748342e-03f, -3.503137811e-03f, -3.502521258e-03f, -3.501898683e-03f, -3.501270088e-03f, -3.500635474e-03f, -3.499994844e-03f, -3.499348197e-03f,
+-3.498695535e-03f, -3.498036861e-03f, -3.497372175e-03f, -3.496701479e-03f, -3.496024774e-03f, -3.495342062e-03f, -3.494653345e-03f, -3.493958623e-03f, -3.493257898e-03f, -3.492551173e-03f,
+-3.491838447e-03f, -3.491119724e-03f, -3.490395003e-03f, -3.489664288e-03f, -3.488927579e-03f, -3.488184879e-03f, -3.487436188e-03f, -3.486681508e-03f, -3.485920842e-03f, -3.485154189e-03f,
+-3.484381553e-03f, -3.483602935e-03f, -3.482818336e-03f, -3.482027759e-03f, -3.481231204e-03f, -3.480428673e-03f, -3.479620169e-03f, -3.478805692e-03f, -3.477985245e-03f, -3.477158829e-03f,
+-3.476326446e-03f, -3.475488098e-03f, -3.474643787e-03f, -3.473793513e-03f, -3.472937280e-03f, -3.472075088e-03f, -3.471206940e-03f, -3.470332838e-03f, -3.469452782e-03f, -3.468566776e-03f,
+-3.467674821e-03f, -3.466776918e-03f, -3.465873070e-03f, -3.464963278e-03f, -3.464047544e-03f, -3.463125871e-03f, -3.462198260e-03f, -3.461264712e-03f, -3.460325231e-03f, -3.459379817e-03f,
+-3.458428473e-03f, -3.457471201e-03f, -3.456508003e-03f, -3.455538880e-03f, -3.454563834e-03f, -3.453582868e-03f, -3.452595984e-03f, -3.451603184e-03f, -3.450604469e-03f, -3.449599841e-03f,
+-3.448589303e-03f, -3.447572857e-03f, -3.446550505e-03f, -3.445522248e-03f, -3.444488090e-03f, -3.443448031e-03f, -3.442402074e-03f, -3.441350222e-03f, -3.440292476e-03f, -3.439228838e-03f,
+-3.438159311e-03f, -3.437083896e-03f, -3.436002597e-03f, -3.434915414e-03f, -3.433822351e-03f, -3.432723409e-03f, -3.431618591e-03f, -3.430507898e-03f, -3.429391334e-03f, -3.428268899e-03f,
+-3.427140598e-03f, -3.426006430e-03f, -3.424866400e-03f, -3.423720509e-03f, -3.422568760e-03f, -3.421411155e-03f, -3.420247695e-03f, -3.419078384e-03f, -3.417903224e-03f, -3.416722217e-03f,
+-3.415535365e-03f, -3.414342671e-03f, -3.413144137e-03f, -3.411939766e-03f, -3.410729559e-03f, -3.409513520e-03f, -3.408291650e-03f, -3.407063953e-03f, -3.405830430e-03f, -3.404591083e-03f,
+-3.403345916e-03f, -3.402094931e-03f, -3.400838130e-03f, -3.399575516e-03f, -3.398307091e-03f, -3.397032857e-03f, -3.395752818e-03f, -3.394466975e-03f, -3.393175332e-03f, -3.391877890e-03f,
+-3.390574653e-03f, -3.389265622e-03f, -3.387950801e-03f, -3.386630191e-03f, -3.385303796e-03f, -3.383971618e-03f, -3.382633660e-03f, -3.381289924e-03f, -3.379940413e-03f, -3.378585130e-03f,
+-3.377224076e-03f, -3.375857255e-03f, -3.374484670e-03f, -3.373106323e-03f, -3.371722217e-03f, -3.370332354e-03f, -3.368936737e-03f, -3.367535370e-03f, -3.366128253e-03f, -3.364715391e-03f,
+-3.363296787e-03f, -3.361872441e-03f, -3.360442359e-03f, -3.359006542e-03f, -3.357564992e-03f, -3.356117714e-03f, -3.354664709e-03f, -3.353205981e-03f, -3.351741532e-03f, -3.350271365e-03f,
+-3.348795483e-03f, -3.347313888e-03f, -3.345826584e-03f, -3.344333574e-03f, -3.342834860e-03f, -3.341330445e-03f, -3.339820333e-03f, -3.338304525e-03f, -3.336783025e-03f, -3.335255836e-03f,
+-3.333722961e-03f, -3.332184402e-03f, -3.330640163e-03f, -3.329090247e-03f, -3.327534656e-03f, -3.325973394e-03f, -3.324406463e-03f, -3.322833866e-03f, -3.321255608e-03f, -3.319671689e-03f,
+-3.318082115e-03f, -3.316486886e-03f, -3.314886008e-03f, -3.313279482e-03f, -3.311667312e-03f, -3.310049501e-03f, -3.308426051e-03f, -3.306796967e-03f, -3.305162251e-03f, -3.303521905e-03f,
+-3.301875935e-03f, -3.300224341e-03f, -3.298567129e-03f, -3.296904299e-03f, -3.295235857e-03f, -3.293561805e-03f, -3.291882146e-03f, -3.290196884e-03f, -3.288506021e-03f, -3.286809561e-03f,
+-3.285107507e-03f, -3.283399863e-03f, -3.281686631e-03f, -3.279967814e-03f, -3.278243417e-03f, -3.276513442e-03f, -3.274777892e-03f, -3.273036771e-03f, -3.271290083e-03f, -3.269537830e-03f,
+-3.267780015e-03f, -3.266016643e-03f, -3.264247715e-03f, -3.262473237e-03f, -3.260693211e-03f, -3.258907640e-03f, -3.257116528e-03f, -3.255319878e-03f, -3.253517693e-03f, -3.251709978e-03f,
+-3.249896735e-03f, -3.248077967e-03f, -3.246253679e-03f, -3.244423874e-03f, -3.242588554e-03f, -3.240747724e-03f, -3.238901387e-03f, -3.237049546e-03f, -3.235192206e-03f, -3.233329369e-03f,
+-3.231461038e-03f, -3.229587218e-03f, -3.227707912e-03f, -3.225823124e-03f, -3.223932856e-03f, -3.222037113e-03f, -3.220135898e-03f, -3.218229215e-03f, -3.216317067e-03f, -3.214399457e-03f,
+-3.212476390e-03f, -3.210547870e-03f, -3.208613898e-03f, -3.206674480e-03f, -3.204729619e-03f, -3.202779318e-03f, -3.200823582e-03f, -3.198862413e-03f, -3.196895816e-03f, -3.194923793e-03f,
+-3.192946350e-03f, -3.190963489e-03f, -3.188975215e-03f, -3.186981530e-03f, -3.184982439e-03f, -3.182977945e-03f, -3.180968052e-03f, -3.178952765e-03f, -3.176932085e-03f, -3.174906019e-03f,
+-3.172874568e-03f, -3.170837737e-03f, -3.168795530e-03f, -3.166747951e-03f, -3.164695003e-03f, -3.162636690e-03f, -3.160573016e-03f, -3.158503984e-03f, -3.156429600e-03f, -3.154349866e-03f,
+-3.152264786e-03f, -3.150174365e-03f, -3.148078606e-03f, -3.145977513e-03f, -3.143871090e-03f, -3.141759340e-03f, -3.139642269e-03f, -3.137519879e-03f, -3.135392175e-03f, -3.133259160e-03f,
+-3.131120839e-03f, -3.128977216e-03f, -3.126828294e-03f, -3.124674077e-03f, -3.122514570e-03f, -3.120349776e-03f, -3.118179700e-03f, -3.116004346e-03f, -3.113823716e-03f, -3.111637817e-03f,
+-3.109446651e-03f, -3.107250222e-03f, -3.105048536e-03f, -3.102841595e-03f, -3.100629404e-03f, -3.098411967e-03f, -3.096189288e-03f, -3.093961371e-03f, -3.091728220e-03f, -3.089489840e-03f,
+-3.087246234e-03f, -3.084997407e-03f, -3.082743363e-03f, -3.080484106e-03f, -3.078219640e-03f, -3.075949969e-03f, -3.073675098e-03f, -3.071395030e-03f, -3.069109771e-03f, -3.066819323e-03f,
+-3.064523692e-03f, -3.062222882e-03f, -3.059916896e-03f, -3.057605739e-03f, -3.055289416e-03f, -3.052967930e-03f, -3.050641287e-03f, -3.048309489e-03f, -3.045972542e-03f, -3.043630449e-03f,
+-3.041283216e-03f, -3.038930846e-03f, -3.036573343e-03f, -3.034210713e-03f, -3.031842959e-03f, -3.029470085e-03f, -3.027092097e-03f, -3.024708998e-03f, -3.022320793e-03f, -3.019927487e-03f,
+-3.017529083e-03f, -3.015125585e-03f, -3.012717000e-03f, -3.010303330e-03f, -3.007884580e-03f, -3.005460755e-03f, -3.003031860e-03f, -3.000597897e-03f, -2.998158873e-03f, -2.995714792e-03f,
+-2.993265657e-03f, -2.990811474e-03f, -2.988352247e-03f, -2.985887981e-03f, -2.983418680e-03f, -2.980944348e-03f, -2.978464990e-03f, -2.975980611e-03f, -2.973491215e-03f, -2.970996807e-03f,
+-2.968497391e-03f, -2.965992972e-03f, -2.963483554e-03f, -2.960969143e-03f, -2.958449742e-03f, -2.955925356e-03f, -2.953395990e-03f, -2.950861649e-03f, -2.948322337e-03f, -2.945778058e-03f,
+-2.943228818e-03f, -2.940674621e-03f, -2.938115472e-03f, -2.935551375e-03f, -2.932982335e-03f, -2.930408357e-03f, -2.927829446e-03f, -2.925245605e-03f, -2.922656841e-03f, -2.920063157e-03f,
+-2.917464559e-03f, -2.914861050e-03f, -2.912252637e-03f, -2.909639323e-03f, -2.907021114e-03f, -2.904398013e-03f, -2.901770027e-03f, -2.899137159e-03f, -2.896499415e-03f, -2.893856799e-03f,
+-2.891209316e-03f, -2.888556971e-03f, -2.885899769e-03f, -2.883237715e-03f, -2.880570813e-03f, -2.877899068e-03f, -2.875222485e-03f, -2.872541070e-03f, -2.869854827e-03f, -2.867163760e-03f,
+-2.864467875e-03f, -2.861767177e-03f, -2.859061670e-03f, -2.856351359e-03f, -2.853636250e-03f, -2.850916348e-03f, -2.848191656e-03f, -2.845462181e-03f, -2.842727927e-03f, -2.839988899e-03f,
+-2.837245102e-03f, -2.834496542e-03f, -2.831743222e-03f, -2.828985149e-03f, -2.826222326e-03f, -2.823454760e-03f, -2.820682455e-03f, -2.817905416e-03f, -2.815123648e-03f, -2.812337157e-03f,
+-2.809545946e-03f, -2.806750022e-03f, -2.803949390e-03f, -2.801144054e-03f, -2.798334020e-03f, -2.795519292e-03f, -2.792699877e-03f, -2.789875778e-03f, -2.787047001e-03f, -2.784213551e-03f,
+-2.781375434e-03f, -2.778532654e-03f, -2.775685217e-03f, -2.772833127e-03f, -2.769976390e-03f, -2.767115012e-03f, -2.764248996e-03f, -2.761378350e-03f, -2.758503076e-03f, -2.755623182e-03f,
+-2.752738672e-03f, -2.749849551e-03f, -2.746955824e-03f, -2.744057497e-03f, -2.741154575e-03f, -2.738247064e-03f, -2.735334968e-03f, -2.732418292e-03f, -2.729497043e-03f, -2.726571225e-03f,
+-2.723640844e-03f, -2.720705904e-03f, -2.717766412e-03f, -2.714822372e-03f, -2.711873790e-03f, -2.708920671e-03f, -2.705963021e-03f, -2.703000845e-03f, -2.700034147e-03f, -2.697062934e-03f,
+-2.694087212e-03f, -2.691106984e-03f, -2.688122257e-03f, -2.685133036e-03f, -2.682139327e-03f, -2.679141134e-03f, -2.676138464e-03f, -2.673131321e-03f, -2.670119711e-03f, -2.667103640e-03f,
+-2.664083113e-03f, -2.661058135e-03f, -2.658028712e-03f, -2.654994849e-03f, -2.651956552e-03f, -2.648913827e-03f, -2.645866678e-03f, -2.642815111e-03f, -2.639759132e-03f, -2.636698747e-03f,
+-2.633633960e-03f, -2.630564777e-03f, -2.627491204e-03f, -2.624413246e-03f, -2.621330910e-03f, -2.618244200e-03f, -2.615153121e-03f, -2.612057680e-03f, -2.608957883e-03f, -2.605853734e-03f,
+-2.602745239e-03f, -2.599632404e-03f, -2.596515235e-03f, -2.593393737e-03f, -2.590267915e-03f, -2.587137776e-03f, -2.584003324e-03f, -2.580864567e-03f, -2.577721508e-03f, -2.574574154e-03f,
+-2.571422511e-03f, -2.568266584e-03f, -2.565106379e-03f, -2.561941901e-03f, -2.558773157e-03f, -2.555600152e-03f, -2.552422891e-03f, -2.549241380e-03f, -2.546055626e-03f, -2.542865633e-03f,
+-2.539671408e-03f, -2.536472956e-03f, -2.533270283e-03f, -2.530063394e-03f, -2.526852296e-03f, -2.523636995e-03f, -2.520417495e-03f, -2.517193803e-03f, -2.513965925e-03f, -2.510733866e-03f,
+-2.507497632e-03f, -2.504257229e-03f, -2.501012663e-03f, -2.497763940e-03f, -2.494511065e-03f, -2.491254044e-03f, -2.487992883e-03f, -2.484727588e-03f, -2.481458165e-03f, -2.478184620e-03f,
+-2.474906958e-03f, -2.471625185e-03f, -2.468339308e-03f, -2.465049332e-03f, -2.461755263e-03f, -2.458457107e-03f, -2.455154870e-03f, -2.451848557e-03f, -2.448538175e-03f, -2.445223730e-03f,
+-2.441905227e-03f, -2.438582673e-03f, -2.435256073e-03f, -2.431925434e-03f, -2.428590761e-03f, -2.425252060e-03f, -2.421909338e-03f, -2.418562600e-03f, -2.415211852e-03f, -2.411857101e-03f,
+-2.408498351e-03f, -2.405135610e-03f, -2.401768883e-03f, -2.398398177e-03f, -2.395023497e-03f, -2.391644849e-03f, -2.388262240e-03f, -2.384875675e-03f, -2.381485160e-03f, -2.378090702e-03f,
+-2.374692307e-03f, -2.371289981e-03f, -2.367883729e-03f, -2.364473558e-03f, -2.361059474e-03f, -2.357641483e-03f, -2.354219591e-03f, -2.350793805e-03f, -2.347364130e-03f, -2.343930572e-03f,
+-2.340493138e-03f, -2.337051834e-03f, -2.333606666e-03f, -2.330157640e-03f, -2.326704762e-03f, -2.323248039e-03f, -2.319787476e-03f, -2.316323080e-03f, -2.312854857e-03f, -2.309382813e-03f,
+-2.305906954e-03f, -2.302427286e-03f, -2.298943817e-03f, -2.295456551e-03f, -2.291965496e-03f, -2.288470657e-03f, -2.284972040e-03f, -2.281469653e-03f, -2.277963500e-03f, -2.274453589e-03f,
+-2.270939925e-03f, -2.267422515e-03f, -2.263901366e-03f, -2.260376482e-03f, -2.256847872e-03f, -2.253315540e-03f, -2.249779494e-03f, -2.246239739e-03f, -2.242696282e-03f, -2.239149130e-03f,
+-2.235598287e-03f, -2.232043762e-03f, -2.228485560e-03f, -2.224923687e-03f, -2.221358150e-03f, -2.217788955e-03f, -2.214216109e-03f, -2.210639618e-03f, -2.207059488e-03f, -2.203475726e-03f,
+-2.199888337e-03f, -2.196297329e-03f, -2.192702708e-03f, -2.189104480e-03f, -2.185502651e-03f, -2.181897229e-03f, -2.178288219e-03f, -2.174675628e-03f, -2.171059462e-03f, -2.167439727e-03f,
+-2.163816431e-03f, -2.160189579e-03f, -2.156559179e-03f, -2.152925236e-03f, -2.149287756e-03f, -2.145646747e-03f, -2.142002215e-03f, -2.138354167e-03f, -2.134702608e-03f, -2.131047545e-03f,
+-2.127388985e-03f, -2.123726935e-03f, -2.120061400e-03f, -2.116392388e-03f, -2.112719905e-03f, -2.109043956e-03f, -2.105364550e-03f, -2.101681692e-03f, -2.097995389e-03f, -2.094305648e-03f,
+-2.090612475e-03f, -2.086915876e-03f, -2.083215859e-03f, -2.079512429e-03f, -2.075805593e-03f, -2.072095359e-03f, -2.068381732e-03f, -2.064664719e-03f, -2.060944326e-03f, -2.057220561e-03f,
+-2.053493430e-03f, -2.049762940e-03f, -2.046029096e-03f, -2.042291906e-03f, -2.038551377e-03f, -2.034807514e-03f, -2.031060325e-03f, -2.027309817e-03f, -2.023555995e-03f, -2.019798867e-03f,
+-2.016038439e-03f, -2.012274718e-03f, -2.008507711e-03f, -2.004737424e-03f, -2.000963864e-03f, -1.997187037e-03f, -1.993406951e-03f, -1.989623612e-03f, -1.985837027e-03f, -1.982047202e-03f,
+-1.978254144e-03f, -1.974457860e-03f, -1.970658357e-03f, -1.966855641e-03f, -1.963049719e-03f, -1.959240597e-03f, -1.955428284e-03f, -1.951612784e-03f, -1.947794106e-03f, -1.943972255e-03f,
+-1.940147240e-03f, -1.936319065e-03f, -1.932487739e-03f, -1.928653267e-03f, -1.924815657e-03f, -1.920974916e-03f, -1.917131050e-03f, -1.913284066e-03f, -1.909433971e-03f, -1.905580771e-03f,
+-1.901724474e-03f, -1.897865087e-03f, -1.894002615e-03f, -1.890137067e-03f, -1.886268448e-03f, -1.882396766e-03f, -1.878522028e-03f, -1.874644240e-03f, -1.870763409e-03f, -1.866879542e-03f,
+-1.862992647e-03f, -1.859102729e-03f, -1.855209796e-03f, -1.851313854e-03f, -1.847414911e-03f, -1.843512973e-03f, -1.839608048e-03f, -1.835700141e-03f, -1.831789261e-03f, -1.827875414e-03f,
+-1.823958606e-03f, -1.820038846e-03f, -1.816116139e-03f, -1.812190493e-03f, -1.808261914e-03f, -1.804330410e-03f, -1.800395987e-03f, -1.796458653e-03f, -1.792518414e-03f, -1.788575278e-03f,
+-1.784629251e-03f, -1.780680340e-03f, -1.776728552e-03f, -1.772773894e-03f, -1.768816374e-03f, -1.764855998e-03f, -1.760892773e-03f, -1.756926706e-03f, -1.752957805e-03f, -1.748986075e-03f,
+-1.745011525e-03f, -1.741034161e-03f, -1.737053990e-03f, -1.733071019e-03f, -1.729085256e-03f, -1.725096706e-03f, -1.721105378e-03f, -1.717111279e-03f, -1.713114415e-03f, -1.709114793e-03f,
+-1.705112421e-03f, -1.701107305e-03f, -1.697099453e-03f, -1.693088871e-03f, -1.689075568e-03f, -1.685059549e-03f, -1.681040822e-03f, -1.677019394e-03f, -1.672995272e-03f, -1.668968463e-03f,
+-1.664938975e-03f, -1.660906813e-03f, -1.656871987e-03f, -1.652834502e-03f, -1.648794365e-03f, -1.644751584e-03f, -1.640706167e-03f, -1.636658119e-03f, -1.632607448e-03f, -1.628554162e-03f,
+-1.624498267e-03f, -1.620439771e-03f, -1.616378681e-03f, -1.612315003e-03f, -1.608248745e-03f, -1.604179915e-03f, -1.600108519e-03f, -1.596034564e-03f, -1.591958059e-03f, -1.587879009e-03f,
+-1.583797422e-03f, -1.579713305e-03f, -1.575626666e-03f, -1.571537511e-03f, -1.567445848e-03f, -1.563351684e-03f, -1.559255027e-03f, -1.555155883e-03f, -1.551054259e-03f, -1.546950163e-03f,
+-1.542843602e-03f, -1.538734584e-03f, -1.534623115e-03f, -1.530509203e-03f, -1.526392854e-03f, -1.522274077e-03f, -1.518152879e-03f, -1.514029266e-03f, -1.509903246e-03f, -1.505774826e-03f,
+-1.501644014e-03f, -1.497510816e-03f, -1.493375240e-03f, -1.489237294e-03f, -1.485096984e-03f, -1.480954318e-03f, -1.476809303e-03f, -1.472661946e-03f, -1.468512255e-03f, -1.464360237e-03f,
+-1.460205899e-03f, -1.456049248e-03f, -1.451890293e-03f, -1.447729039e-03f, -1.443565495e-03f, -1.439399668e-03f, -1.435231565e-03f, -1.431061193e-03f, -1.426888560e-03f, -1.422713673e-03f,
+-1.418536539e-03f, -1.414357166e-03f, -1.410175561e-03f, -1.405991731e-03f, -1.401805684e-03f, -1.397617427e-03f, -1.393426967e-03f, -1.389234313e-03f, -1.385039470e-03f, -1.380842447e-03f,
+-1.376643251e-03f, -1.372441888e-03f, -1.368238368e-03f, -1.364032696e-03f, -1.359824881e-03f, -1.355614930e-03f, -1.351402849e-03f, -1.347188647e-03f, -1.342972331e-03f, -1.338753909e-03f,
+-1.334533386e-03f, -1.330310772e-03f, -1.326086074e-03f, -1.321859298e-03f, -1.317630453e-03f, -1.313399545e-03f, -1.309166583e-03f, -1.304931573e-03f, -1.300694522e-03f, -1.296455440e-03f,
+-1.292214332e-03f, -1.287971206e-03f, -1.283726070e-03f, -1.279478932e-03f, -1.275229798e-03f, -1.270978675e-03f, -1.266725573e-03f, -1.262470497e-03f, -1.258213455e-03f, -1.253954456e-03f,
+-1.249693505e-03f, -1.245430612e-03f, -1.241165782e-03f, -1.236899025e-03f, -1.232630346e-03f, -1.228359754e-03f, -1.224087257e-03f, -1.219812860e-03f, -1.215536573e-03f, -1.211258403e-03f,
+-1.206978356e-03f, -1.202696441e-03f, -1.198412665e-03f, -1.194127036e-03f, -1.189839560e-03f, -1.185550246e-03f, -1.181259102e-03f, -1.176966133e-03f, -1.172671349e-03f, -1.168374757e-03f,
+-1.164076363e-03f, -1.159776176e-03f, -1.155474203e-03f, -1.151170452e-03f, -1.146864930e-03f, -1.142557645e-03f, -1.138248604e-03f, -1.133937815e-03f, -1.129625285e-03f, -1.125311022e-03f,
+-1.120995034e-03f, -1.116677327e-03f, -1.112357910e-03f, -1.108036790e-03f, -1.103713975e-03f, -1.099389472e-03f, -1.095063288e-03f, -1.090735432e-03f, -1.086405911e-03f, -1.082074732e-03f,
+-1.077741903e-03f, -1.073407432e-03f, -1.069071326e-03f, -1.064733592e-03f, -1.060394239e-03f, -1.056053274e-03f, -1.051710704e-03f, -1.047366537e-03f, -1.043020781e-03f, -1.038673444e-03f,
+-1.034324532e-03f, -1.029974053e-03f, -1.025622015e-03f, -1.021268426e-03f, -1.016913294e-03f, -1.012556625e-03f, -1.008198427e-03f, -1.003838709e-03f, -9.994774773e-04f, -9.951147399e-04f,
+-9.907505043e-04f, -9.863847782e-04f, -9.820175693e-04f, -9.776488851e-04f, -9.732787333e-04f, -9.689071215e-04f, -9.645340574e-04f, -9.601595485e-04f, -9.557836025e-04f, -9.514062270e-04f,
+-9.470274297e-04f, -9.426472183e-04f, -9.382656002e-04f, -9.338825833e-04f, -9.294981751e-04f, -9.251123834e-04f, -9.207252156e-04f, -9.163366796e-04f, -9.119467829e-04f, -9.075555332e-04f,
+-9.031629381e-04f, -8.987690054e-04f, -8.943737427e-04f, -8.899771576e-04f, -8.855792578e-04f, -8.811800510e-04f, -8.767795449e-04f, -8.723777471e-04f, -8.679746652e-04f, -8.635703071e-04f,
+-8.591646803e-04f, -8.547577925e-04f, -8.503496514e-04f, -8.459402647e-04f, -8.415296400e-04f, -8.371177852e-04f, -8.327047077e-04f, -8.282904154e-04f, -8.238749159e-04f, -8.194582170e-04f,
+-8.150403262e-04f, -8.106212513e-04f, -8.062010001e-04f, -8.017795801e-04f, -7.973569992e-04f, -7.929332649e-04f, -7.885083851e-04f, -7.840823673e-04f, -7.796552194e-04f, -7.752269490e-04f,
+-7.707975639e-04f, -7.663670717e-04f, -7.619354801e-04f, -7.575027970e-04f, -7.530690299e-04f, -7.486341867e-04f, -7.441982749e-04f, -7.397613025e-04f, -7.353232770e-04f, -7.308842062e-04f,
+-7.264440978e-04f, -7.220029596e-04f, -7.175607992e-04f, -7.131176245e-04f, -7.086734431e-04f, -7.042282627e-04f, -6.997820912e-04f, -6.953349362e-04f, -6.908868054e-04f, -6.864377067e-04f,
+-6.819876477e-04f, -6.775366362e-04f, -6.730846799e-04f, -6.686317866e-04f, -6.641779640e-04f, -6.597232199e-04f, -6.552675619e-04f, -6.508109980e-04f, -6.463535357e-04f, -6.418951828e-04f,
+-6.374359472e-04f, -6.329758365e-04f, -6.285148585e-04f, -6.240530209e-04f, -6.195903316e-04f, -6.151267982e-04f, -6.106624285e-04f, -6.061972304e-04f, -6.017312114e-04f, -5.972643795e-04f,
+-5.927967423e-04f, -5.883283077e-04f, -5.838590833e-04f, -5.793890770e-04f, -5.749182965e-04f, -5.704467496e-04f, -5.659744440e-04f, -5.615013875e-04f, -5.570275879e-04f, -5.525530530e-04f,
+-5.480777905e-04f, -5.436018082e-04f, -5.391251139e-04f, -5.346477152e-04f, -5.301696202e-04f, -5.256908364e-04f, -5.212113716e-04f, -5.167312337e-04f, -5.122504304e-04f, -5.077689696e-04f,
+-5.032868588e-04f, -4.988041061e-04f, -4.943207191e-04f, -4.898367055e-04f, -4.853520733e-04f, -4.808668302e-04f, -4.763809839e-04f, -4.718945423e-04f, -4.674075130e-04f, -4.629199040e-04f,
+-4.584317230e-04f, -4.539429778e-04f, -4.494536761e-04f, -4.449638258e-04f, -4.404734346e-04f, -4.359825104e-04f, -4.314910609e-04f, -4.269990939e-04f, -4.225066172e-04f, -4.180136386e-04f,
+-4.135201658e-04f, -4.090262067e-04f, -4.045317691e-04f, -4.000368607e-04f, -3.955414894e-04f, -3.910456629e-04f, -3.865493891e-04f, -3.820526756e-04f, -3.775555304e-04f, -3.730579612e-04f,
+-3.685599758e-04f, -3.640615820e-04f, -3.595627876e-04f, -3.550636004e-04f, -3.505640282e-04f, -3.460640787e-04f, -3.415637598e-04f, -3.370630793e-04f, -3.325620450e-04f, -3.280606647e-04f,
+-3.235589461e-04f, -3.190568970e-04f, -3.145545254e-04f, -3.100518389e-04f, -3.055488453e-04f, -3.010455525e-04f, -2.965419683e-04f, -2.920381004e-04f, -2.875339566e-04f, -2.830295448e-04f,
+-2.785248727e-04f, -2.740199482e-04f, -2.695147790e-04f, -2.650093730e-04f, -2.605037379e-04f, -2.559978815e-04f, -2.514918117e-04f, -2.469855362e-04f, -2.424790628e-04f, -2.379723994e-04f,
+-2.334655537e-04f, -2.289585335e-04f, -2.244513467e-04f, -2.199440009e-04f, -2.154365041e-04f, -2.109288640e-04f, -2.064210885e-04f, -2.019131852e-04f, -1.974051620e-04f, -1.928970268e-04f,
+-1.883887873e-04f, -1.838804512e-04f, -1.793720265e-04f, -1.748635208e-04f, -1.703549421e-04f, -1.658462980e-04f, -1.613375964e-04f, -1.568288451e-04f, -1.523200519e-04f, -1.478112245e-04f,
+-1.433023708e-04f, -1.387934985e-04f, -1.342846155e-04f, -1.297757295e-04f, -1.252668484e-04f, -1.207579798e-04f, -1.162491317e-04f, -1.117403118e-04f, -1.072315279e-04f, -1.027227878e-04f,
+-9.821409928e-05f, -9.370547011e-05f, -8.919690810e-05f, -8.468842104e-05f, -8.018001671e-05f, -7.567170291e-05f, -7.116348741e-05f, -6.665537800e-05f, -6.214738248e-05f, -5.763950862e-05f,
+-5.313176421e-05f, -4.862415703e-05f, -4.411669488e-05f, -3.960938552e-05f, -3.510223674e-05f, -3.059525633e-05f, -2.608845206e-05f, -2.158183171e-05f, -1.707540307e-05f, -1.256917390e-05f,
+-8.063152001e-06f, -3.557345134e-06f, 9.482389208e-07f, 5.453592388e-06f, 9.958707493e-06f, 1.446357646e-05f, 1.896819152e-05f, 2.347254490e-05f, 2.797662882e-05f, 3.248043553e-05f,
+3.698395724e-05f, 4.148718618e-05f, 4.599011460e-05f, 5.049273472e-05f, 5.499503878e-05f, 5.949701902e-05f, 6.399866766e-05f, 6.849997694e-05f, 7.300093911e-05f, 7.750154640e-05f,
+8.200179106e-05f, 8.650166532e-05f, 9.100116142e-05f, 9.550027161e-05f, 9.999898813e-05f, 1.044973032e-04f, 1.089952091e-04f, 1.134926981e-04f, 1.179897625e-04f, 1.224863943e-04f,
+1.269825860e-04f, 1.314783298e-04f, 1.359736179e-04f, 1.404684426e-04f, 1.449627961e-04f, 1.494566707e-04f, 1.539500586e-04f, 1.584429522e-04f, 1.629353436e-04f, 1.674272251e-04f,
+1.719185891e-04f, 1.764094276e-04f, 1.808997332e-04f, 1.853894979e-04f, 1.898787140e-04f, 1.943673739e-04f, 1.988554698e-04f, 2.033429939e-04f, 2.078299386e-04f, 2.123162961e-04f,
+2.168020587e-04f, 2.212872187e-04f, 2.257717683e-04f, 2.302556999e-04f, 2.347390056e-04f, 2.392216779e-04f, 2.437037089e-04f, 2.481850910e-04f, 2.526658165e-04f, 2.571458776e-04f,
+2.616252666e-04f, 2.661039759e-04f, 2.705819977e-04f, 2.750593243e-04f, 2.795359480e-04f, 2.840118612e-04f, 2.884870560e-04f, 2.929615249e-04f, 2.974352601e-04f, 3.019082539e-04f,
+3.063804987e-04f, 3.108519867e-04f, 3.153227103e-04f, 3.197926617e-04f, 3.242618333e-04f, 3.287302174e-04f, 3.331978063e-04f, 3.376645924e-04f, 3.421305679e-04f, 3.465957252e-04f,
+3.510600565e-04f, 3.555235544e-04f, 3.599862109e-04f, 3.644480186e-04f, 3.689089697e-04f, 3.733690565e-04f, 3.778282714e-04f, 3.822866068e-04f, 3.867440549e-04f, 3.912006081e-04f,
+3.956562587e-04f, 4.001109992e-04f, 4.045648218e-04f, 4.090177189e-04f, 4.134696829e-04f, 4.179207060e-04f, 4.223707807e-04f, 4.268198993e-04f, 4.312680542e-04f, 4.357152377e-04f,
+4.401614422e-04f, 4.446066601e-04f, 4.490508837e-04f, 4.534941053e-04f, 4.579363175e-04f, 4.623775125e-04f, 4.668176827e-04f, 4.712568205e-04f, 4.756949183e-04f, 4.801319685e-04f,
+4.845679634e-04f, 4.890028955e-04f, 4.934367570e-04f, 4.978695405e-04f, 5.023012383e-04f, 5.067318428e-04f, 5.111613464e-04f, 5.155897415e-04f, 5.200170205e-04f, 5.244431758e-04f,
+5.288681998e-04f, 5.332920850e-04f, 5.377148237e-04f, 5.421364084e-04f, 5.465568314e-04f, 5.509760852e-04f, 5.553941623e-04f, 5.598110550e-04f, 5.642267557e-04f, 5.686412570e-04f,
+5.730545511e-04f, 5.774666307e-04f, 5.818774880e-04f, 5.862871156e-04f, 5.906955058e-04f, 5.951026512e-04f, 5.995085441e-04f, 6.039131771e-04f, 6.083165425e-04f, 6.127186328e-04f,
+6.171194406e-04f, 6.215189581e-04f, 6.259171780e-04f, 6.303140926e-04f, 6.347096945e-04f, 6.391039761e-04f, 6.434969298e-04f, 6.478885482e-04f, 6.522788238e-04f, 6.566677489e-04f,
+6.610553162e-04f, 6.654415180e-04f, 6.698263469e-04f, 6.742097953e-04f, 6.785918559e-04f, 6.829725209e-04f, 6.873517830e-04f, 6.917296347e-04f, 6.961060685e-04f, 7.004810768e-04f,
+7.048546522e-04f, 7.092267871e-04f, 7.135974742e-04f, 7.179667060e-04f, 7.223344749e-04f, 7.267007734e-04f, 7.310655942e-04f, 7.354289297e-04f, 7.397907725e-04f, 7.441511151e-04f,
+7.485099501e-04f, 7.528672700e-04f, 7.572230673e-04f, 7.615773346e-04f, 7.659300645e-04f, 7.702812494e-04f, 7.746308820e-04f, 7.789789549e-04f, 7.833254605e-04f, 7.876703915e-04f,
+7.920137404e-04f, 7.963554998e-04f, 8.006956623e-04f, 8.050342204e-04f, 8.093711668e-04f, 8.137064940e-04f, 8.180401946e-04f, 8.223722613e-04f, 8.267026865e-04f, 8.310314630e-04f,
+8.353585832e-04f, 8.396840399e-04f, 8.440078256e-04f, 8.483299329e-04f, 8.526503545e-04f, 8.569690830e-04f, 8.612861109e-04f, 8.656014310e-04f, 8.699150358e-04f, 8.742269180e-04f,
+8.785370702e-04f, 8.828454850e-04f, 8.871521552e-04f, 8.914570733e-04f, 8.957602320e-04f, 9.000616239e-04f, 9.043612417e-04f, 9.086590781e-04f, 9.129551257e-04f, 9.172493772e-04f,
+9.215418253e-04f, 9.258324626e-04f, 9.301212818e-04f, 9.344082755e-04f, 9.386934366e-04f, 9.429767576e-04f, 9.472582313e-04f, 9.515378503e-04f, 9.558156073e-04f, 9.600914951e-04f,
+9.643655064e-04f, 9.686376338e-04f, 9.729078700e-04f, 9.771762079e-04f, 9.814426401e-04f, 9.857071593e-04f, 9.899697582e-04f, 9.942304297e-04f, 9.984891663e-04f, 1.002745961e-03f,
+1.007000806e-03f, 1.011253695e-03f, 1.015504620e-03f, 1.019753574e-03f, 1.024000550e-03f, 1.028245540e-03f, 1.032488537e-03f, 1.036729534e-03f, 1.040968524e-03f, 1.045205500e-03f,
+1.049440454e-03f, 1.053673379e-03f, 1.057904268e-03f, 1.062133114e-03f, 1.066359909e-03f, 1.070584646e-03f, 1.074807319e-03f, 1.079027919e-03f, 1.083246441e-03f, 1.087462875e-03f,
+1.091677216e-03f, 1.095889457e-03f, 1.100099589e-03f, 1.104307606e-03f, 1.108513500e-03f, 1.112717266e-03f, 1.116918894e-03f, 1.121118379e-03f, 1.125315712e-03f, 1.129510888e-03f,
+1.133703898e-03f, 1.137894736e-03f, 1.142083395e-03f, 1.146269867e-03f, 1.150454145e-03f, 1.154636222e-03f, 1.158816091e-03f, 1.162993745e-03f, 1.167169177e-03f, 1.171342380e-03f,
+1.175513346e-03f, 1.179682068e-03f, 1.183848540e-03f, 1.188012755e-03f, 1.192174704e-03f, 1.196334382e-03f, 1.200491780e-03f, 1.204646893e-03f, 1.208799713e-03f, 1.212950232e-03f,
+1.217098445e-03f, 1.221244343e-03f, 1.225387920e-03f, 1.229529168e-03f, 1.233668081e-03f, 1.237804652e-03f, 1.241938873e-03f, 1.246070738e-03f, 1.250200240e-03f, 1.254327371e-03f,
+1.258452124e-03f, 1.262574493e-03f, 1.266694470e-03f, 1.270812049e-03f, 1.274927223e-03f, 1.279039984e-03f, 1.283150325e-03f, 1.287258240e-03f, 1.291363721e-03f, 1.295466763e-03f,
+1.299567356e-03f, 1.303665496e-03f, 1.307761174e-03f, 1.311854384e-03f, 1.315945118e-03f, 1.320033371e-03f, 1.324119134e-03f, 1.328202402e-03f, 1.332283166e-03f, 1.336361421e-03f,
+1.340437159e-03f, 1.344510373e-03f, 1.348581056e-03f, 1.352649202e-03f, 1.356714804e-03f, 1.360777854e-03f, 1.364838346e-03f, 1.368896273e-03f, 1.372951628e-03f, 1.377004404e-03f,
+1.381054594e-03f, 1.385102192e-03f, 1.389147190e-03f, 1.393189582e-03f, 1.397229361e-03f, 1.401266520e-03f, 1.405301051e-03f, 1.409332950e-03f, 1.413362207e-03f, 1.417388817e-03f,
+1.421412773e-03f, 1.425434068e-03f, 1.429452696e-03f, 1.433468648e-03f, 1.437481919e-03f, 1.441492502e-03f, 1.445500390e-03f, 1.449505576e-03f, 1.453508053e-03f, 1.457507815e-03f,
+1.461504855e-03f, 1.465499166e-03f, 1.469490741e-03f, 1.473479573e-03f, 1.477465657e-03f, 1.481448984e-03f, 1.485429549e-03f, 1.489407345e-03f, 1.493382364e-03f, 1.497354600e-03f,
+1.501324046e-03f, 1.505290697e-03f, 1.509254544e-03f, 1.513215581e-03f, 1.517173802e-03f, 1.521129200e-03f, 1.525081768e-03f, 1.529031499e-03f, 1.532978387e-03f, 1.536922425e-03f,
+1.540863607e-03f, 1.544801925e-03f, 1.548737374e-03f, 1.552669946e-03f, 1.556599634e-03f, 1.560526433e-03f, 1.564450335e-03f, 1.568371335e-03f, 1.572289424e-03f, 1.576204597e-03f,
+1.580116847e-03f, 1.584026167e-03f, 1.587932552e-03f, 1.591835993e-03f, 1.595736485e-03f, 1.599634021e-03f, 1.603528594e-03f, 1.607420198e-03f, 1.611308826e-03f, 1.615194472e-03f,
+1.619077130e-03f, 1.622956791e-03f, 1.626833451e-03f, 1.630707102e-03f, 1.634577738e-03f, 1.638445353e-03f, 1.642309939e-03f, 1.646171490e-03f, 1.650030001e-03f, 1.653885464e-03f,
+1.657737872e-03f, 1.661587220e-03f, 1.665433500e-03f, 1.669276707e-03f, 1.673116834e-03f, 1.676953874e-03f, 1.680787820e-03f, 1.684618668e-03f, 1.688446409e-03f, 1.692271037e-03f,
+1.696092547e-03f, 1.699910931e-03f, 1.703726183e-03f, 1.707538297e-03f, 1.711347266e-03f, 1.715153084e-03f, 1.718955745e-03f, 1.722755241e-03f, 1.726551567e-03f, 1.730344717e-03f,
+1.734134683e-03f, 1.737921459e-03f, 1.741705040e-03f, 1.745485418e-03f, 1.749262587e-03f, 1.753036542e-03f, 1.756807275e-03f, 1.760574780e-03f, 1.764339051e-03f, 1.768100081e-03f,
+1.771857865e-03f, 1.775612396e-03f, 1.779363667e-03f, 1.783111672e-03f, 1.786856406e-03f, 1.790597861e-03f, 1.794336031e-03f, 1.798070910e-03f, 1.801802492e-03f, 1.805530770e-03f,
+1.809255739e-03f, 1.812977391e-03f, 1.816695721e-03f, 1.820410723e-03f, 1.824122390e-03f, 1.827830715e-03f, 1.831535693e-03f, 1.835237318e-03f, 1.838935582e-03f, 1.842630481e-03f,
+1.846322008e-03f, 1.850010155e-03f, 1.853694919e-03f, 1.857376291e-03f, 1.861054267e-03f, 1.864728839e-03f, 1.868400002e-03f, 1.872067749e-03f, 1.875732074e-03f, 1.879392972e-03f,
+1.883050435e-03f, 1.886704458e-03f, 1.890355035e-03f, 1.894002160e-03f, 1.897645826e-03f, 1.901286027e-03f, 1.904922757e-03f, 1.908556010e-03f, 1.912185781e-03f, 1.915812062e-03f,
+1.919434848e-03f, 1.923054132e-03f, 1.926669909e-03f, 1.930282173e-03f, 1.933890917e-03f, 1.937496136e-03f, 1.941097823e-03f, 1.944695972e-03f, 1.948290578e-03f, 1.951881633e-03f,
+1.955469133e-03f, 1.959053072e-03f, 1.962633442e-03f, 1.966210239e-03f, 1.969783455e-03f, 1.973353086e-03f, 1.976919125e-03f, 1.980481567e-03f, 1.984040404e-03f, 1.987595632e-03f,
+1.991147244e-03f, 1.994695235e-03f, 1.998239598e-03f, 2.001780327e-03f, 2.005317417e-03f, 2.008850862e-03f, 2.012380655e-03f, 2.015906791e-03f, 2.019429264e-03f, 2.022948068e-03f,
+2.026463197e-03f, 2.029974645e-03f, 2.033482407e-03f, 2.036986475e-03f, 2.040486846e-03f, 2.043983512e-03f, 2.047476468e-03f, 2.050965708e-03f, 2.054451226e-03f, 2.057933017e-03f,
+2.061411074e-03f, 2.064885391e-03f, 2.068355964e-03f, 2.071822785e-03f, 2.075285850e-03f, 2.078745152e-03f, 2.082200686e-03f, 2.085652446e-03f, 2.089100426e-03f, 2.092544620e-03f,
+2.095985023e-03f, 2.099421629e-03f, 2.102854432e-03f, 2.106283426e-03f, 2.109708605e-03f, 2.113129965e-03f, 2.116547499e-03f, 2.119961201e-03f, 2.123371066e-03f, 2.126777088e-03f,
+2.130179262e-03f, 2.133577581e-03f, 2.136972040e-03f, 2.140362634e-03f, 2.143749356e-03f, 2.147132201e-03f, 2.150511163e-03f, 2.153886238e-03f, 2.157257418e-03f, 2.160624699e-03f,
+2.163988075e-03f, 2.167347540e-03f, 2.170703088e-03f, 2.174054715e-03f, 2.177402414e-03f, 2.180746179e-03f, 2.184086007e-03f, 2.187421889e-03f, 2.190753822e-03f, 2.194081800e-03f,
+2.197405816e-03f, 2.200725866e-03f, 2.204041944e-03f, 2.207354044e-03f, 2.210662162e-03f, 2.213966290e-03f, 2.217266425e-03f, 2.220562560e-03f, 2.223854689e-03f, 2.227142808e-03f,
+2.230426911e-03f, 2.233706993e-03f, 2.236983047e-03f, 2.240255069e-03f, 2.243523053e-03f, 2.246786994e-03f, 2.250046886e-03f, 2.253302723e-03f, 2.256554501e-03f, 2.259802214e-03f,
+2.263045857e-03f, 2.266285423e-03f, 2.269520908e-03f, 2.272752307e-03f, 2.275979613e-03f, 2.279202823e-03f, 2.282421929e-03f, 2.285636927e-03f, 2.288847812e-03f, 2.292054578e-03f,
+2.295257220e-03f, 2.298455733e-03f, 2.301650110e-03f, 2.304840348e-03f, 2.308026440e-03f, 2.311208382e-03f, 2.314386167e-03f, 2.317559791e-03f, 2.320729249e-03f, 2.323894535e-03f,
+2.327055644e-03f, 2.330212571e-03f, 2.333365310e-03f, 2.336513856e-03f, 2.339658204e-03f, 2.342798349e-03f, 2.345934286e-03f, 2.349066009e-03f, 2.352193513e-03f, 2.355316793e-03f,
+2.358435844e-03f, 2.361550661e-03f, 2.364661238e-03f, 2.367767570e-03f, 2.370869652e-03f, 2.373967479e-03f, 2.377061047e-03f, 2.380150348e-03f, 2.383235380e-03f, 2.386316136e-03f,
+2.389392611e-03f, 2.392464801e-03f, 2.395532700e-03f, 2.398596302e-03f, 2.401655604e-03f, 2.404710600e-03f, 2.407761285e-03f, 2.410807654e-03f, 2.413849701e-03f, 2.416887422e-03f,
+2.419920812e-03f, 2.422949865e-03f, 2.425974578e-03f, 2.428994944e-03f, 2.432010958e-03f, 2.435022617e-03f, 2.438029914e-03f, 2.441032844e-03f, 2.444031404e-03f, 2.447025587e-03f,
+2.450015390e-03f, 2.453000806e-03f, 2.455981831e-03f, 2.458958460e-03f, 2.461930688e-03f, 2.464898511e-03f, 2.467861922e-03f, 2.470820919e-03f, 2.473775494e-03f, 2.476725645e-03f,
+2.479671365e-03f, 2.482612650e-03f, 2.485549495e-03f, 2.488481895e-03f, 2.491409846e-03f, 2.494333342e-03f, 2.497252379e-03f, 2.500166952e-03f, 2.503077056e-03f, 2.505982686e-03f,
+2.508883837e-03f, 2.511780505e-03f, 2.514672686e-03f, 2.517560373e-03f, 2.520443562e-03f, 2.523322250e-03f, 2.526196430e-03f, 2.529066098e-03f, 2.531931250e-03f, 2.534791880e-03f,
+2.537647985e-03f, 2.540499558e-03f, 2.543346596e-03f, 2.546189094e-03f, 2.549027048e-03f, 2.551860452e-03f, 2.554689301e-03f, 2.557513592e-03f, 2.560333319e-03f, 2.563148479e-03f,
+2.565959065e-03f, 2.568765075e-03f, 2.571566502e-03f, 2.574363343e-03f, 2.577155592e-03f, 2.579943246e-03f, 2.582726299e-03f, 2.585504748e-03f, 2.588278587e-03f, 2.591047812e-03f,
+2.593812418e-03f, 2.596572402e-03f, 2.599327757e-03f, 2.602078481e-03f, 2.604824567e-03f, 2.607566013e-03f, 2.610302812e-03f, 2.613034962e-03f, 2.615762456e-03f, 2.618485292e-03f,
+2.621203464e-03f, 2.623916968e-03f, 2.626625799e-03f, 2.629329953e-03f, 2.632029426e-03f, 2.634724213e-03f, 2.637414309e-03f, 2.640099711e-03f, 2.642780414e-03f, 2.645456413e-03f,
+2.648127705e-03f, 2.650794284e-03f, 2.653456146e-03f, 2.656113288e-03f, 2.658765704e-03f, 2.661413390e-03f, 2.664056343e-03f, 2.666694557e-03f, 2.669328028e-03f, 2.671956753e-03f,
+2.674580726e-03f, 2.677199944e-03f, 2.679814401e-03f, 2.682424095e-03f, 2.685029020e-03f, 2.687629173e-03f, 2.690224548e-03f, 2.692815143e-03f, 2.695400952e-03f, 2.697981972e-03f,
+2.700558197e-03f, 2.703129625e-03f, 2.705696250e-03f, 2.708258069e-03f, 2.710815078e-03f, 2.713367271e-03f, 2.715914646e-03f, 2.718457197e-03f, 2.720994922e-03f, 2.723527815e-03f,
+2.726055872e-03f, 2.728579090e-03f, 2.731097464e-03f, 2.733610990e-03f, 2.736119664e-03f, 2.738623482e-03f, 2.741122440e-03f, 2.743616533e-03f, 2.746105759e-03f, 2.748590112e-03f,
+2.751069589e-03f, 2.753544185e-03f, 2.756013897e-03f, 2.758478720e-03f, 2.760938651e-03f, 2.763393686e-03f, 2.765843820e-03f, 2.768289050e-03f, 2.770729371e-03f, 2.773164780e-03f,
+2.775595272e-03f, 2.778020844e-03f, 2.780441492e-03f, 2.782857212e-03f, 2.785267999e-03f, 2.787673851e-03f, 2.790074763e-03f, 2.792470731e-03f, 2.794861751e-03f, 2.797247819e-03f,
+2.799628932e-03f, 2.802005086e-03f, 2.804376277e-03f, 2.806742501e-03f, 2.809103753e-03f, 2.811460031e-03f, 2.813811331e-03f, 2.816157648e-03f, 2.818498979e-03f, 2.820835321e-03f,
+2.823166668e-03f, 2.825493018e-03f, 2.827814367e-03f, 2.830130711e-03f, 2.832442046e-03f, 2.834748369e-03f, 2.837049675e-03f, 2.839345962e-03f, 2.841637224e-03f, 2.843923460e-03f,
+2.846204664e-03f, 2.848480834e-03f, 2.850751965e-03f, 2.853018055e-03f, 2.855279098e-03f, 2.857535092e-03f, 2.859786033e-03f, 2.862031918e-03f, 2.864272742e-03f, 2.866508502e-03f,
+2.868739195e-03f, 2.870964817e-03f, 2.873185364e-03f, 2.875400832e-03f, 2.877611219e-03f, 2.879816521e-03f, 2.882016733e-03f, 2.884211853e-03f, 2.886401877e-03f, 2.888586802e-03f,
+2.890766623e-03f, 2.892941338e-03f, 2.895110942e-03f, 2.897275433e-03f, 2.899434808e-03f, 2.901589061e-03f, 2.903738191e-03f, 2.905882193e-03f, 2.908021064e-03f, 2.910154801e-03f,
+2.912283400e-03f, 2.914406858e-03f, 2.916525172e-03f, 2.918638337e-03f, 2.920746351e-03f, 2.922849211e-03f, 2.924946912e-03f, 2.927039452e-03f, 2.929126827e-03f, 2.931209034e-03f,
+2.933286069e-03f, 2.935357929e-03f, 2.937424612e-03f, 2.939486113e-03f, 2.941542429e-03f, 2.943593557e-03f, 2.945639494e-03f, 2.947680236e-03f, 2.949715780e-03f, 2.951746123e-03f,
+2.953771262e-03f, 2.955791193e-03f, 2.957805914e-03f, 2.959815420e-03f, 2.961819709e-03f, 2.963818778e-03f, 2.965812623e-03f, 2.967801242e-03f, 2.969784630e-03f, 2.971762785e-03f,
+2.973735704e-03f, 2.975703383e-03f, 2.977665820e-03f, 2.979623011e-03f, 2.981574954e-03f, 2.983521644e-03f, 2.985463080e-03f, 2.987399257e-03f, 2.989330173e-03f, 2.991255825e-03f,
+2.993176210e-03f, 2.995091324e-03f, 2.997001165e-03f, 2.998905729e-03f, 3.000805014e-03f, 3.002699016e-03f, 3.004587733e-03f, 3.006471162e-03f, 3.008349299e-03f, 3.010222142e-03f,
+3.012089687e-03f, 3.013951932e-03f, 3.015808874e-03f, 3.017660509e-03f, 3.019506835e-03f, 3.021347849e-03f, 3.023183548e-03f, 3.025013929e-03f, 3.026838990e-03f, 3.028658727e-03f,
+3.030473137e-03f, 3.032282217e-03f, 3.034085966e-03f, 3.035884379e-03f, 3.037677455e-03f, 3.039465189e-03f, 3.041247580e-03f, 3.043024625e-03f, 3.044796320e-03f, 3.046562664e-03f,
+3.048323652e-03f, 3.050079283e-03f, 3.051829554e-03f, 3.053574462e-03f, 3.055314004e-03f, 3.057048177e-03f, 3.058776979e-03f, 3.060500407e-03f, 3.062218458e-03f, 3.063931130e-03f,
+3.065638420e-03f, 3.067340326e-03f, 3.069036844e-03f, 3.070727971e-03f, 3.072413706e-03f, 3.074094046e-03f, 3.075768988e-03f, 3.077438529e-03f, 3.079102667e-03f, 3.080761399e-03f,
+3.082414723e-03f, 3.084062635e-03f, 3.085705135e-03f, 3.087342218e-03f, 3.088973882e-03f, 3.090600125e-03f, 3.092220945e-03f, 3.093836338e-03f, 3.095446302e-03f, 3.097050835e-03f,
+3.098649935e-03f, 3.100243598e-03f, 3.101831822e-03f, 3.103414605e-03f, 3.104991944e-03f, 3.106563837e-03f, 3.108130282e-03f, 3.109691276e-03f, 3.111246816e-03f, 3.112796900e-03f,
+3.114341526e-03f, 3.115880692e-03f, 3.117414394e-03f, 3.118942631e-03f, 3.120465401e-03f, 3.121982700e-03f, 3.123494527e-03f, 3.125000879e-03f, 3.126501754e-03f, 3.127997150e-03f,
+3.129487063e-03f, 3.130971493e-03f, 3.132450437e-03f, 3.133923892e-03f, 3.135391856e-03f, 3.136854327e-03f, 3.138311303e-03f, 3.139762781e-03f, 3.141208759e-03f, 3.142649235e-03f,
+3.144084207e-03f, 3.145513673e-03f, 3.146937630e-03f, 3.148356076e-03f, 3.149769009e-03f, 3.151176427e-03f, 3.152578328e-03f, 3.153974709e-03f, 3.155365569e-03f, 3.156750905e-03f,
+3.158130715e-03f, 3.159504997e-03f, 3.160873750e-03f, 3.162236970e-03f, 3.163594656e-03f, 3.164946806e-03f, 3.166293417e-03f, 3.167634489e-03f, 3.168970018e-03f, 3.170300002e-03f,
+3.171624440e-03f, 3.172943330e-03f, 3.174256669e-03f, 3.175564456e-03f, 3.176866689e-03f, 3.178163365e-03f, 3.179454483e-03f, 3.180740040e-03f, 3.182020036e-03f, 3.183294467e-03f,
+3.184563333e-03f, 3.185826630e-03f, 3.187084358e-03f, 3.188336513e-03f, 3.189583096e-03f, 3.190824102e-03f, 3.192059532e-03f, 3.193289382e-03f, 3.194513651e-03f, 3.195732338e-03f,
+3.196945439e-03f, 3.198152955e-03f, 3.199354881e-03f, 3.200551218e-03f, 3.201741963e-03f, 3.202927114e-03f, 3.204106670e-03f, 3.205280629e-03f, 3.206448989e-03f, 3.207611748e-03f,
+3.208768905e-03f, 3.209920457e-03f, 3.211066404e-03f, 3.212206744e-03f, 3.213341474e-03f, 3.214470593e-03f, 3.215594100e-03f, 3.216711993e-03f, 3.217824270e-03f, 3.218930930e-03f,
+3.220031970e-03f, 3.221127390e-03f, 3.222217187e-03f, 3.223301361e-03f, 3.224379909e-03f, 3.225452830e-03f, 3.226520123e-03f, 3.227581785e-03f, 3.228637815e-03f, 3.229688213e-03f,
+3.230732975e-03f, 3.231772101e-03f, 3.232805590e-03f, 3.233833439e-03f, 3.234855647e-03f, 3.235872213e-03f, 3.236883135e-03f, 3.237888412e-03f, 3.238888042e-03f, 3.239882024e-03f,
+3.240870357e-03f, 3.241853039e-03f, 3.242830068e-03f, 3.243801444e-03f, 3.244767164e-03f, 3.245727228e-03f, 3.246681634e-03f, 3.247630381e-03f, 3.248573467e-03f, 3.249510891e-03f,
+3.250442652e-03f, 3.251368748e-03f, 3.252289178e-03f, 3.253203941e-03f, 3.254113036e-03f, 3.255016460e-03f, 3.255914214e-03f, 3.256806295e-03f, 3.257692703e-03f, 3.258573436e-03f,
+3.259448492e-03f, 3.260317872e-03f, 3.261181573e-03f, 3.262039594e-03f, 3.262891935e-03f, 3.263738593e-03f, 3.264579568e-03f, 3.265414859e-03f, 3.266244464e-03f, 3.267068382e-03f,
+3.267886612e-03f, 3.268699154e-03f, 3.269506005e-03f, 3.270307165e-03f, 3.271102633e-03f, 3.271892408e-03f, 3.272676488e-03f, 3.273454872e-03f, 3.274227560e-03f, 3.274994551e-03f,
+3.275755842e-03f, 3.276511434e-03f, 3.277261326e-03f, 3.278005515e-03f, 3.278744002e-03f, 3.279476786e-03f, 3.280203864e-03f, 3.280925237e-03f, 3.281640903e-03f, 3.282350862e-03f,
+3.283055113e-03f, 3.283753654e-03f, 3.284446485e-03f, 3.285133604e-03f, 3.285815011e-03f, 3.286490706e-03f, 3.287160686e-03f, 3.287824952e-03f, 3.288483502e-03f, 3.289136336e-03f,
+3.289783453e-03f, 3.290424851e-03f, 3.291060531e-03f, 3.291690490e-03f, 3.292314730e-03f, 3.292933248e-03f, 3.293546043e-03f, 3.294153116e-03f, 3.294754466e-03f, 3.295350091e-03f,
+3.295939991e-03f, 3.296524165e-03f, 3.297102612e-03f, 3.297675333e-03f, 3.298242325e-03f, 3.298803589e-03f, 3.299359123e-03f, 3.299908927e-03f, 3.300453001e-03f, 3.300991344e-03f,
+3.301523954e-03f, 3.302050832e-03f, 3.302571977e-03f, 3.303087388e-03f, 3.303597065e-03f, 3.304101006e-03f, 3.304599212e-03f, 3.305091682e-03f, 3.305578416e-03f, 3.306059412e-03f,
+3.306534670e-03f, 3.307004190e-03f, 3.307467971e-03f, 3.307926013e-03f, 3.308378315e-03f, 3.308824877e-03f, 3.309265698e-03f, 3.309700778e-03f, 3.310130116e-03f, 3.310553711e-03f,
+3.310971565e-03f, 3.311383675e-03f, 3.311790042e-03f, 3.312190664e-03f, 3.312585543e-03f, 3.312974677e-03f, 3.313358066e-03f, 3.313735709e-03f, 3.314107607e-03f, 3.314473759e-03f,
+3.314834164e-03f, 3.315188822e-03f, 3.315537734e-03f, 3.315880898e-03f, 3.316218314e-03f, 3.316549982e-03f, 3.316875902e-03f, 3.317196073e-03f, 3.317510496e-03f, 3.317819169e-03f,
+3.318122093e-03f, 3.318419268e-03f, 3.318710692e-03f, 3.318996367e-03f, 3.319276292e-03f, 3.319550466e-03f, 3.319818890e-03f, 3.320081563e-03f, 3.320338486e-03f, 3.320589657e-03f,
+3.320835077e-03f, 3.321074745e-03f, 3.321308663e-03f, 3.321536829e-03f, 3.321759243e-03f, 3.321975905e-03f, 3.322186816e-03f, 3.322391975e-03f, 3.322591382e-03f, 3.322785036e-03f,
+3.322972939e-03f, 3.323155090e-03f, 3.323331489e-03f, 3.323502135e-03f, 3.323667030e-03f, 3.323826172e-03f, 3.323979563e-03f, 3.324127201e-03f, 3.324269087e-03f, 3.324405222e-03f,
+3.324535604e-03f, 3.324660235e-03f, 3.324779114e-03f, 3.324892241e-03f, 3.324999617e-03f, 3.325101241e-03f, 3.325197114e-03f, 3.325287236e-03f, 3.325371606e-03f, 3.325450226e-03f,
+3.325523095e-03f, 3.325590213e-03f, 3.325651581e-03f, 3.325707199e-03f, 3.325757067e-03f, 3.325801184e-03f, 3.325839553e-03f, 3.325872171e-03f, 3.325899041e-03f, 3.325920162e-03f,
+3.325935534e-03f, 3.325945158e-03f, 3.325949033e-03f, 3.325947161e-03f, 3.325939541e-03f, 3.325926174e-03f, 3.325907061e-03f, 3.325882200e-03f, 3.325851593e-03f, 3.325815241e-03f,
+3.325773143e-03f, 3.325725300e-03f, 3.325671712e-03f, 3.325612379e-03f, 3.325547303e-03f, 3.325476482e-03f, 3.325399919e-03f, 3.325317613e-03f, 3.325229565e-03f, 3.325135775e-03f,
+3.325036243e-03f, 3.324930970e-03f, 3.324819957e-03f, 3.324703204e-03f, 3.324580711e-03f, 3.324452479e-03f, 3.324318509e-03f, 3.324178801e-03f, 3.324033355e-03f, 3.323882173e-03f,
+3.323725254e-03f, 3.323562599e-03f, 3.323394210e-03f, 3.323220085e-03f, 3.323040227e-03f, 3.322854635e-03f, 3.322663310e-03f, 3.322466253e-03f, 3.322263465e-03f, 3.322054945e-03f,
+3.321840696e-03f, 3.321620716e-03f, 3.321395008e-03f, 3.321163572e-03f, 3.320926408e-03f, 3.320683517e-03f, 3.320434900e-03f, 3.320180558e-03f, 3.319920491e-03f, 3.319654700e-03f,
+3.319383186e-03f, 3.319105949e-03f, 3.318822991e-03f, 3.318534312e-03f, 3.318239912e-03f, 3.317939794e-03f, 3.317633957e-03f, 3.317322402e-03f, 3.317005131e-03f, 3.316682143e-03f,
+3.316353441e-03f, 3.316019024e-03f, 3.315678893e-03f, 3.315333051e-03f, 3.314981496e-03f, 3.314624231e-03f, 3.314261256e-03f, 3.313892572e-03f, 3.313518180e-03f, 3.313138081e-03f,
+3.312752276e-03f, 3.312360766e-03f, 3.311963551e-03f, 3.311560634e-03f, 3.311152014e-03f, 3.310737693e-03f, 3.310317671e-03f, 3.309891951e-03f, 3.309460532e-03f, 3.309023417e-03f,
+3.308580605e-03f, 3.308132098e-03f, 3.307677897e-03f, 3.307218003e-03f, 3.306752418e-03f, 3.306281142e-03f, 3.305804176e-03f, 3.305321522e-03f, 3.304833180e-03f, 3.304339152e-03f,
+3.303839439e-03f, 3.303334042e-03f, 3.302822963e-03f, 3.302306201e-03f, 3.301783760e-03f, 3.301255639e-03f, 3.300721840e-03f, 3.300182364e-03f, 3.299637213e-03f, 3.299086387e-03f,
+3.298529888e-03f, 3.297967718e-03f, 3.297399877e-03f, 3.296826366e-03f, 3.296247187e-03f, 3.295662342e-03f, 3.295071831e-03f, 3.294475656e-03f, 3.293873819e-03f, 3.293266319e-03f,
+3.292653160e-03f, 3.292034342e-03f, 3.291409866e-03f, 3.290779734e-03f, 3.290143948e-03f, 3.289502508e-03f, 3.288855416e-03f, 3.288202674e-03f, 3.287544282e-03f, 3.286880243e-03f,
+3.286210558e-03f, 3.285535228e-03f, 3.284854254e-03f, 3.284167639e-03f, 3.283475383e-03f, 3.282777489e-03f, 3.282073957e-03f, 3.281364789e-03f, 3.280649986e-03f, 3.279929551e-03f,
+3.279203484e-03f, 3.278471788e-03f, 3.277734463e-03f, 3.276991512e-03f, 3.276242935e-03f, 3.275488735e-03f, 3.274728913e-03f, 3.273963471e-03f, 3.273192410e-03f, 3.272415731e-03f,
+3.271633438e-03f, 3.270845530e-03f, 3.270052010e-03f, 3.269252880e-03f, 3.268448141e-03f, 3.267637794e-03f, 3.266821842e-03f, 3.266000286e-03f, 3.265173128e-03f, 3.264340370e-03f,
+3.263502013e-03f, 3.262658059e-03f, 3.261808510e-03f, 3.260953367e-03f, 3.260092633e-03f, 3.259226309e-03f, 3.258354396e-03f, 3.257476897e-03f, 3.256593814e-03f, 3.255705148e-03f,
+3.254810901e-03f, 3.253911075e-03f, 3.253005672e-03f, 3.252094694e-03f, 3.251178141e-03f, 3.250256018e-03f, 3.249328324e-03f, 3.248395063e-03f, 3.247456235e-03f, 3.246511844e-03f,
+3.245561890e-03f, 3.244606376e-03f, 3.243645304e-03f, 3.242678675e-03f, 3.241706492e-03f, 3.240728756e-03f, 3.239745470e-03f, 3.238756636e-03f, 3.237762255e-03f, 3.236762329e-03f,
+3.235756861e-03f, 3.234745853e-03f, 3.233729306e-03f, 3.232707223e-03f, 3.231679605e-03f, 3.230646455e-03f, 3.229607775e-03f, 3.228563566e-03f, 3.227513832e-03f, 3.226458573e-03f,
+3.225397793e-03f, 3.224331493e-03f, 3.223259675e-03f, 3.222182342e-03f, 3.221099496e-03f, 3.220011138e-03f, 3.218917271e-03f, 3.217817898e-03f, 3.216713020e-03f, 3.215602639e-03f,
+3.214486758e-03f, 3.213365379e-03f, 3.212238504e-03f, 3.211106135e-03f, 3.209968275e-03f, 3.208824926e-03f, 3.207676090e-03f, 3.206521769e-03f, 3.205361966e-03f, 3.204196683e-03f,
+3.203025922e-03f, 3.201849686e-03f, 3.200667976e-03f, 3.199480796e-03f, 3.198288147e-03f, 3.197090032e-03f, 3.195886453e-03f, 3.194677413e-03f, 3.193462914e-03f, 3.192242957e-03f,
+3.191017547e-03f, 3.189786685e-03f, 3.188550373e-03f, 3.187308614e-03f, 3.186061410e-03f, 3.184808764e-03f, 3.183550678e-03f, 3.182287155e-03f, 3.181018197e-03f, 3.179743806e-03f,
+3.178463986e-03f, 3.177178738e-03f, 3.175888065e-03f, 3.174591970e-03f, 3.173290455e-03f, 3.171983522e-03f, 3.170671174e-03f, 3.169353415e-03f, 3.168030245e-03f, 3.166701668e-03f,
+3.165367687e-03f, 3.164028303e-03f, 3.162683520e-03f, 3.161333340e-03f, 3.159977766e-03f, 3.158616800e-03f, 3.157250445e-03f, 3.155878704e-03f, 3.154501579e-03f, 3.153119073e-03f,
+3.151731188e-03f, 3.150337928e-03f, 3.148939295e-03f, 3.147535291e-03f, 3.146125920e-03f, 3.144711183e-03f, 3.143291085e-03f, 3.141865627e-03f, 3.140434812e-03f, 3.138998643e-03f,
+3.137557123e-03f, 3.136110254e-03f, 3.134658040e-03f, 3.133200482e-03f, 3.131737585e-03f, 3.130269350e-03f, 3.128795780e-03f, 3.127316879e-03f, 3.125832649e-03f, 3.124343093e-03f,
+3.122848213e-03f, 3.121348013e-03f, 3.119842496e-03f, 3.118331664e-03f, 3.116815520e-03f, 3.115294068e-03f, 3.113767309e-03f, 3.112235248e-03f, 3.110697886e-03f, 3.109155227e-03f,
+3.107607274e-03f, 3.106054030e-03f, 3.104495497e-03f, 3.102931678e-03f, 3.101362578e-03f, 3.099788198e-03f, 3.098208541e-03f, 3.096623611e-03f, 3.095033410e-03f, 3.093437942e-03f,
+3.091837210e-03f, 3.090231216e-03f, 3.088619964e-03f, 3.087003457e-03f, 3.085381697e-03f, 3.083754689e-03f, 3.082122434e-03f, 3.080484936e-03f, 3.078842198e-03f, 3.077194224e-03f,
+3.075541016e-03f, 3.073882577e-03f, 3.072218911e-03f, 3.070550021e-03f, 3.068875910e-03f, 3.067196580e-03f, 3.065512036e-03f, 3.063822281e-03f, 3.062127316e-03f, 3.060427147e-03f,
+3.058721776e-03f, 3.057011206e-03f, 3.055295440e-03f, 3.053574482e-03f, 3.051848335e-03f, 3.050117002e-03f, 3.048380486e-03f, 3.046638791e-03f, 3.044891920e-03f, 3.043139876e-03f,
+3.041382663e-03f, 3.039620283e-03f, 3.037852741e-03f, 3.036080039e-03f, 3.034302180e-03f, 3.032519169e-03f, 3.030731008e-03f, 3.028937702e-03f, 3.027139252e-03f, 3.025335663e-03f,
+3.023526937e-03f, 3.021713079e-03f, 3.019894092e-03f, 3.018069979e-03f, 3.016240743e-03f, 3.014406388e-03f, 3.012566918e-03f, 3.010722335e-03f, 3.008872644e-03f, 3.007017847e-03f,
+3.005157949e-03f, 3.003292952e-03f, 3.001422860e-03f, 2.999547677e-03f, 2.997667406e-03f, 2.995782051e-03f, 2.993891615e-03f, 2.991996102e-03f, 2.990095514e-03f, 2.988189857e-03f,
+2.986279133e-03f, 2.984363346e-03f, 2.982442499e-03f, 2.980516596e-03f, 2.978585641e-03f, 2.976649637e-03f, 2.974708588e-03f, 2.972762497e-03f, 2.970811368e-03f, 2.968855205e-03f,
+2.966894011e-03f, 2.964927791e-03f, 2.962956546e-03f, 2.960980283e-03f, 2.958999003e-03f, 2.957012710e-03f, 2.955021409e-03f, 2.953025103e-03f, 2.951023796e-03f, 2.949017491e-03f,
+2.947006192e-03f, 2.944989903e-03f, 2.942968628e-03f, 2.940942370e-03f, 2.938911134e-03f, 2.936874922e-03f, 2.934833739e-03f, 2.932787588e-03f, 2.930736473e-03f, 2.928680399e-03f,
+2.926619368e-03f, 2.924553385e-03f, 2.922482454e-03f, 2.920406578e-03f, 2.918325761e-03f, 2.916240007e-03f, 2.914149319e-03f, 2.912053703e-03f, 2.909953161e-03f, 2.907847698e-03f,
+2.905737317e-03f, 2.903622022e-03f, 2.901501817e-03f, 2.899376707e-03f, 2.897246694e-03f, 2.895111784e-03f, 2.892971979e-03f, 2.890827284e-03f, 2.888677703e-03f, 2.886523240e-03f,
+2.884363898e-03f, 2.882199682e-03f, 2.880030596e-03f, 2.877856643e-03f, 2.875677828e-03f, 2.873494155e-03f, 2.871305628e-03f, 2.869112250e-03f, 2.866914026e-03f, 2.864710960e-03f,
+2.862503056e-03f, 2.860290318e-03f, 2.858072750e-03f, 2.855850356e-03f, 2.853623140e-03f, 2.851391106e-03f, 2.849154259e-03f, 2.846912602e-03f, 2.844666140e-03f, 2.842414877e-03f,
+2.840158817e-03f, 2.837897963e-03f, 2.835632321e-03f, 2.833361894e-03f, 2.831086687e-03f, 2.828806704e-03f, 2.826521948e-03f, 2.824232424e-03f, 2.821938137e-03f, 2.819639090e-03f,
+2.817335288e-03f, 2.815026734e-03f, 2.812713434e-03f, 2.810395391e-03f, 2.808072610e-03f, 2.805745095e-03f, 2.803412850e-03f, 2.801075879e-03f, 2.798734187e-03f, 2.796387778e-03f,
+2.794036657e-03f, 2.791680827e-03f, 2.789320293e-03f, 2.786955059e-03f, 2.784585129e-03f, 2.782210509e-03f, 2.779831202e-03f, 2.777447212e-03f, 2.775058544e-03f, 2.772665203e-03f,
+2.770267192e-03f, 2.767864517e-03f, 2.765457180e-03f, 2.763045188e-03f, 2.760628544e-03f, 2.758207253e-03f, 2.755781318e-03f, 2.753350746e-03f, 2.750915539e-03f, 2.748475703e-03f,
+2.746031241e-03f, 2.743582159e-03f, 2.741128461e-03f, 2.738670151e-03f, 2.736207233e-03f, 2.733739713e-03f, 2.731267595e-03f, 2.728790883e-03f, 2.726309582e-03f, 2.723823696e-03f,
+2.721333230e-03f, 2.718838188e-03f, 2.716338575e-03f, 2.713834395e-03f, 2.711325654e-03f, 2.708812355e-03f, 2.706294503e-03f, 2.703772104e-03f, 2.701245160e-03f, 2.698713677e-03f,
+2.696177660e-03f, 2.693637113e-03f, 2.691092041e-03f, 2.688542449e-03f, 2.685988340e-03f, 2.683429720e-03f, 2.680866593e-03f, 2.678298965e-03f, 2.675726839e-03f, 2.673150220e-03f,
+2.670569114e-03f, 2.667983524e-03f, 2.665393456e-03f, 2.662798913e-03f, 2.660199902e-03f, 2.657596426e-03f, 2.654988490e-03f, 2.652376100e-03f, 2.649759259e-03f, 2.647137973e-03f,
+2.644512246e-03f, 2.641882083e-03f, 2.639247488e-03f, 2.636608468e-03f, 2.633965026e-03f, 2.631317167e-03f, 2.628664896e-03f, 2.626008217e-03f, 2.623347136e-03f, 2.620681658e-03f,
+2.618011787e-03f, 2.615337528e-03f, 2.612658886e-03f, 2.609975866e-03f, 2.607288472e-03f, 2.604596710e-03f, 2.601900585e-03f, 2.599200100e-03f, 2.596495262e-03f, 2.593786075e-03f,
+2.591072543e-03f, 2.588354673e-03f, 2.585632469e-03f, 2.582905935e-03f, 2.580175077e-03f, 2.577439899e-03f, 2.574700407e-03f, 2.571956605e-03f, 2.569208499e-03f, 2.566456094e-03f,
+2.563699393e-03f, 2.560938403e-03f, 2.558173129e-03f, 2.555403575e-03f, 2.552629746e-03f, 2.549851648e-03f, 2.547069285e-03f, 2.544282662e-03f, 2.541491785e-03f, 2.538696659e-03f,
+2.535897288e-03f, 2.533093677e-03f, 2.530285833e-03f, 2.527473759e-03f, 2.524657461e-03f, 2.521836944e-03f, 2.519012212e-03f, 2.516183272e-03f, 2.513350128e-03f, 2.510512786e-03f,
+2.507671250e-03f, 2.504825525e-03f, 2.501975617e-03f, 2.499121531e-03f, 2.496263272e-03f, 2.493400845e-03f, 2.490534255e-03f, 2.487663508e-03f, 2.484788608e-03f, 2.481909561e-03f,
+2.479026372e-03f, 2.476139047e-03f, 2.473247589e-03f, 2.470352006e-03f, 2.467452301e-03f, 2.464548480e-03f, 2.461640548e-03f, 2.458728511e-03f, 2.455812374e-03f, 2.452892141e-03f,
+2.449967819e-03f, 2.447039412e-03f, 2.444106927e-03f, 2.441170367e-03f, 2.438229738e-03f, 2.435285046e-03f, 2.432336296e-03f, 2.429383494e-03f, 2.426426643e-03f, 2.423465751e-03f,
+2.420500822e-03f, 2.417531861e-03f, 2.414558874e-03f, 2.411581867e-03f, 2.408600844e-03f, 2.405615810e-03f, 2.402626773e-03f, 2.399633735e-03f, 2.396636704e-03f, 2.393635684e-03f,
+2.390630681e-03f, 2.387621700e-03f, 2.384608746e-03f, 2.381591826e-03f, 2.378570944e-03f, 2.375546106e-03f, 2.372517317e-03f, 2.369484583e-03f, 2.366447909e-03f, 2.363407300e-03f,
+2.360362763e-03f, 2.357314302e-03f, 2.354261923e-03f, 2.351205631e-03f, 2.348145433e-03f, 2.345081332e-03f, 2.342013336e-03f, 2.338941449e-03f, 2.335865677e-03f, 2.332786026e-03f,
+2.329702500e-03f, 2.326615106e-03f, 2.323523849e-03f, 2.320428735e-03f, 2.317329769e-03f, 2.314226956e-03f, 2.311120302e-03f, 2.308009814e-03f, 2.304895495e-03f, 2.301777353e-03f,
+2.298655392e-03f, 2.295529618e-03f, 2.292400037e-03f, 2.289266654e-03f, 2.286129476e-03f, 2.282988506e-03f, 2.279843752e-03f, 2.276695219e-03f, 2.273542912e-03f, 2.270386837e-03f,
+2.267227000e-03f, 2.264063406e-03f, 2.260896061e-03f, 2.257724971e-03f, 2.254550141e-03f, 2.251371577e-03f, 2.248189285e-03f, 2.245003270e-03f, 2.241813539e-03f, 2.238620096e-03f,
+2.235422948e-03f, 2.232222100e-03f, 2.229017558e-03f, 2.225809327e-03f, 2.222597414e-03f, 2.219381825e-03f, 2.216162564e-03f, 2.212939637e-03f, 2.209713052e-03f, 2.206482812e-03f,
+2.203248924e-03f, 2.200011394e-03f, 2.196770227e-03f, 2.193525430e-03f, 2.190277008e-03f, 2.187024967e-03f, 2.183769312e-03f, 2.180510050e-03f, 2.177247186e-03f, 2.173980726e-03f,
+2.170710676e-03f, 2.167437042e-03f, 2.164159830e-03f, 2.160879045e-03f, 2.157594694e-03f, 2.154306781e-03f, 2.151015314e-03f, 2.147720297e-03f, 2.144421738e-03f, 2.141119641e-03f,
+2.137814013e-03f, 2.134504859e-03f, 2.131192185e-03f, 2.127875998e-03f, 2.124556303e-03f, 2.121233106e-03f, 2.117906413e-03f, 2.114576230e-03f, 2.111242563e-03f, 2.107905418e-03f,
+2.104564800e-03f, 2.101220716e-03f, 2.097873172e-03f, 2.094522174e-03f, 2.091167727e-03f, 2.087809838e-03f, 2.084448512e-03f, 2.081083756e-03f, 2.077715575e-03f, 2.074343976e-03f,
+2.070968964e-03f, 2.067590546e-03f, 2.064208727e-03f, 2.060823514e-03f, 2.057434913e-03f, 2.054042929e-03f, 2.050647569e-03f, 2.047248839e-03f, 2.043846744e-03f, 2.040441291e-03f,
+2.037032486e-03f, 2.033620335e-03f, 2.030204843e-03f, 2.026786018e-03f, 2.023363865e-03f, 2.019938391e-03f, 2.016509600e-03f, 2.013077500e-03f, 2.009642097e-03f, 2.006203396e-03f,
+2.002761403e-03f, 1.999316126e-03f, 1.995867569e-03f, 1.992415740e-03f, 1.988960644e-03f, 1.985502287e-03f, 1.982040676e-03f, 1.978575816e-03f, 1.975107715e-03f, 1.971636377e-03f,
+1.968161809e-03f, 1.964684018e-03f, 1.961203009e-03f, 1.957718788e-03f, 1.954231363e-03f, 1.950740738e-03f, 1.947246921e-03f, 1.943749917e-03f, 1.940249733e-03f, 1.936746375e-03f,
+1.933239849e-03f, 1.929730161e-03f, 1.926217317e-03f, 1.922701325e-03f, 1.919182189e-03f, 1.915659917e-03f, 1.912134514e-03f, 1.908605986e-03f, 1.905074341e-03f, 1.901539584e-03f,
+1.898001721e-03f, 1.894460760e-03f, 1.890916705e-03f, 1.887369564e-03f, 1.883819342e-03f, 1.880266046e-03f, 1.876709683e-03f, 1.873150258e-03f, 1.869587778e-03f, 1.866022249e-03f,
+1.862453677e-03f, 1.858882069e-03f, 1.855307432e-03f, 1.851729770e-03f, 1.848149092e-03f, 1.844565403e-03f, 1.840978709e-03f, 1.837389017e-03f, 1.833796333e-03f, 1.830200664e-03f,
+1.826602016e-03f, 1.823000395e-03f, 1.819395808e-03f, 1.815788260e-03f, 1.812177760e-03f, 1.808564312e-03f, 1.804947923e-03f, 1.801328600e-03f, 1.797706349e-03f, 1.794081176e-03f,
+1.790453088e-03f, 1.786822091e-03f, 1.783188193e-03f, 1.779551398e-03f, 1.775911714e-03f, 1.772269146e-03f, 1.768623703e-03f, 1.764975389e-03f, 1.761324211e-03f, 1.757670176e-03f,
+1.754013291e-03f, 1.750353561e-03f, 1.746690994e-03f, 1.743025595e-03f, 1.739357371e-03f, 1.735686329e-03f, 1.732012475e-03f, 1.728335815e-03f, 1.724656357e-03f, 1.720974106e-03f,
+1.717289070e-03f, 1.713601254e-03f, 1.709910665e-03f, 1.706217310e-03f, 1.702521195e-03f, 1.698822327e-03f, 1.695120712e-03f, 1.691416356e-03f, 1.687709267e-03f, 1.683999451e-03f,
+1.680286915e-03f, 1.676571664e-03f, 1.672853706e-03f, 1.669133047e-03f, 1.665409694e-03f, 1.661683653e-03f, 1.657954931e-03f, 1.654223534e-03f, 1.650489469e-03f, 1.646752743e-03f,
+1.643013362e-03f, 1.639271332e-03f, 1.635526662e-03f, 1.631779356e-03f, 1.628029421e-03f, 1.624276865e-03f, 1.620521694e-03f, 1.616763914e-03f, 1.613003532e-03f, 1.609240555e-03f,
+1.605474989e-03f, 1.601706842e-03f, 1.597936119e-03f, 1.594162827e-03f, 1.590386973e-03f, 1.586608564e-03f, 1.582827606e-03f, 1.579044106e-03f, 1.575258070e-03f, 1.571469506e-03f,
+1.567678419e-03f, 1.563884818e-03f, 1.560088707e-03f, 1.556290095e-03f, 1.552488987e-03f, 1.548685391e-03f, 1.544879312e-03f, 1.541070759e-03f, 1.537259737e-03f, 1.533446253e-03f,
+1.529630314e-03f, 1.525811927e-03f, 1.521991098e-03f, 1.518167834e-03f, 1.514342142e-03f, 1.510514028e-03f, 1.506683500e-03f, 1.502850564e-03f, 1.499015227e-03f, 1.495177495e-03f,
+1.491337376e-03f, 1.487494875e-03f, 1.483650001e-03f, 1.479802759e-03f, 1.475953156e-03f, 1.472101200e-03f, 1.468246896e-03f, 1.464390252e-03f, 1.460531275e-03f, 1.456669971e-03f,
+1.452806347e-03f, 1.448940409e-03f, 1.445072166e-03f, 1.441201623e-03f, 1.437328787e-03f, 1.433453665e-03f, 1.429576264e-03f, 1.425696591e-03f, 1.421814652e-03f, 1.417930455e-03f,
+1.414044006e-03f, 1.410155311e-03f, 1.406264379e-03f, 1.402371215e-03f, 1.398475827e-03f, 1.394578222e-03f, 1.390678405e-03f, 1.386776385e-03f, 1.382872167e-03f, 1.378965759e-03f,
+1.375057168e-03f, 1.371146401e-03f, 1.367233464e-03f, 1.363318364e-03f, 1.359401108e-03f, 1.355481703e-03f, 1.351560156e-03f, 1.347636474e-03f, 1.343710664e-03f, 1.339782732e-03f,
+1.335852686e-03f, 1.331920532e-03f, 1.327986277e-03f, 1.324049929e-03f, 1.320111494e-03f, 1.316170978e-03f, 1.312228390e-03f, 1.308283735e-03f, 1.304337021e-03f, 1.300388255e-03f,
+1.296437444e-03f, 1.292484594e-03f, 1.288529712e-03f, 1.284572806e-03f, 1.280613883e-03f, 1.276652948e-03f, 1.272690010e-03f, 1.268725075e-03f, 1.264758151e-03f, 1.260789243e-03f,
+1.256818360e-03f, 1.252845507e-03f, 1.248870693e-03f, 1.244893923e-03f, 1.240915206e-03f, 1.236934547e-03f, 1.232951955e-03f, 1.228967435e-03f, 1.224980995e-03f, 1.220992642e-03f,
+1.217002383e-03f, 1.213010225e-03f, 1.209016175e-03f, 1.205020239e-03f, 1.201022426e-03f, 1.197022741e-03f, 1.193021192e-03f, 1.189017786e-03f, 1.185012530e-03f, 1.181005431e-03f,
+1.176996495e-03f, 1.172985731e-03f, 1.168973145e-03f, 1.164958743e-03f, 1.160942534e-03f, 1.156924524e-03f, 1.152904719e-03f, 1.148883128e-03f, 1.144859758e-03f, 1.140834614e-03f,
+1.136807705e-03f, 1.132779037e-03f, 1.128748617e-03f, 1.124716453e-03f, 1.120682551e-03f, 1.116646919e-03f, 1.112609564e-03f, 1.108570492e-03f, 1.104529711e-03f, 1.100487227e-03f,
+1.096443049e-03f, 1.092397183e-03f, 1.088349635e-03f, 1.084300414e-03f, 1.080249526e-03f, 1.076196978e-03f, 1.072142778e-03f, 1.068086932e-03f, 1.064029448e-03f, 1.059970333e-03f,
+1.055909593e-03f, 1.051847236e-03f, 1.047783269e-03f, 1.043717699e-03f, 1.039650533e-03f, 1.035581779e-03f, 1.031511443e-03f, 1.027439533e-03f, 1.023366055e-03f, 1.019291017e-03f,
+1.015214426e-03f, 1.011136289e-03f, 1.007056613e-03f, 1.002975405e-03f, 9.988926726e-04f, 9.948084229e-04f, 9.907226628e-04f, 9.866353995e-04f, 9.825466402e-04f, 9.784563919e-04f,
+9.743646620e-04f, 9.702714574e-04f, 9.661767853e-04f, 9.620806529e-04f, 9.579830674e-04f, 9.538840359e-04f, 9.497835655e-04f, 9.456816634e-04f, 9.415783369e-04f, 9.374735929e-04f,
+9.333674388e-04f, 9.292598817e-04f, 9.251509287e-04f, 9.210405870e-04f, 9.169288638e-04f, 9.128157663e-04f, 9.087013017e-04f, 9.045854771e-04f, 9.004682997e-04f, 8.963497767e-04f,
+8.922299153e-04f, 8.881087227e-04f, 8.839862060e-04f, 8.798623725e-04f, 8.757372294e-04f, 8.716107838e-04f, 8.674830429e-04f, 8.633540141e-04f, 8.592237043e-04f, 8.550921209e-04f,
+8.509592711e-04f, 8.468251620e-04f, 8.426898010e-04f, 8.385531951e-04f, 8.344153516e-04f, 8.302762777e-04f, 8.261359807e-04f, 8.219944677e-04f, 8.178517460e-04f, 8.137078227e-04f,
+8.095627052e-04f, 8.054164007e-04f, 8.012689162e-04f, 7.971202592e-04f, 7.929704368e-04f, 7.888194563e-04f, 7.846673249e-04f, 7.805140498e-04f, 7.763596382e-04f, 7.722040974e-04f,
+7.680474347e-04f, 7.638896573e-04f, 7.597307724e-04f, 7.555707872e-04f, 7.514097091e-04f, 7.472475452e-04f, 7.430843029e-04f, 7.389199893e-04f, 7.347546117e-04f, 7.305881773e-04f,
+7.264206935e-04f, 7.222521675e-04f, 7.180826065e-04f, 7.139120178e-04f, 7.097404086e-04f, 7.055677863e-04f, 7.013941580e-04f, 6.972195311e-04f, 6.930439128e-04f, 6.888673104e-04f,
+6.846897311e-04f, 6.805111822e-04f, 6.763316710e-04f, 6.721512048e-04f, 6.679697908e-04f, 6.637874363e-04f, 6.596041486e-04f, 6.554199349e-04f, 6.512348026e-04f, 6.470487589e-04f,
+6.428618111e-04f, 6.386739665e-04f, 6.344852324e-04f, 6.302956160e-04f, 6.261051246e-04f, 6.219137656e-04f, 6.177215462e-04f, 6.135284737e-04f, 6.093345554e-04f, 6.051397985e-04f,
+6.009442105e-04f, 5.967477985e-04f, 5.925505699e-04f, 5.883525319e-04f, 5.841536919e-04f, 5.799540572e-04f, 5.757536350e-04f, 5.715524326e-04f, 5.673504574e-04f, 5.631477167e-04f,
+5.589442177e-04f, 5.547399678e-04f, 5.505349743e-04f, 5.463292444e-04f, 5.421227855e-04f, 5.379156049e-04f, 5.337077099e-04f, 5.294991078e-04f, 5.252898059e-04f, 5.210798116e-04f,
+5.168691320e-04f, 5.126577746e-04f, 5.084457467e-04f, 5.042330555e-04f, 5.000197085e-04f, 4.958057128e-04f, 4.915910759e-04f, 4.873758050e-04f, 4.831599074e-04f, 4.789433905e-04f,
+4.747262616e-04f, 4.705085280e-04f, 4.662901971e-04f, 4.620712761e-04f, 4.578517724e-04f, 4.536316933e-04f, 4.494110460e-04f, 4.451898381e-04f, 4.409680767e-04f, 4.367457692e-04f,
+4.325229229e-04f, 4.282995451e-04f, 4.240756433e-04f, 4.198512246e-04f, 4.156262964e-04f, 4.114008661e-04f, 4.071749410e-04f, 4.029485284e-04f, 3.987216356e-04f, 3.944942700e-04f,
+3.902664388e-04f, 3.860381495e-04f, 3.818094094e-04f, 3.775802258e-04f, 3.733506059e-04f, 3.691205573e-04f, 3.648900871e-04f, 3.606592027e-04f, 3.564279115e-04f, 3.521962208e-04f,
+3.479641379e-04f, 3.437316702e-04f, 3.394988249e-04f, 3.352656095e-04f, 3.310320312e-04f, 3.267980975e-04f, 3.225638155e-04f, 3.183291928e-04f, 3.140942365e-04f, 3.098589540e-04f,
+3.056233528e-04f, 3.013874400e-04f, 2.971512232e-04f, 2.929147094e-04f, 2.886779063e-04f, 2.844408209e-04f, 2.802034608e-04f, 2.759658332e-04f, 2.717279455e-04f, 2.674898049e-04f,
+2.632514190e-04f, 2.590127949e-04f, 2.547739400e-04f, 2.505348617e-04f, 2.462955673e-04f, 2.420560642e-04f, 2.378163596e-04f, 2.335764609e-04f, 2.293363754e-04f, 2.250961106e-04f,
+2.208556736e-04f, 2.166150720e-04f, 2.123743129e-04f, 2.081334038e-04f, 2.038923519e-04f, 1.996511647e-04f, 1.954098494e-04f, 1.911684133e-04f, 1.869268639e-04f, 1.826852085e-04f,
+1.784434543e-04f, 1.742016088e-04f, 1.699596792e-04f, 1.657176730e-04f, 1.614755974e-04f, 1.572334597e-04f, 1.529912673e-04f, 1.487490276e-04f, 1.445067479e-04f, 1.402644355e-04f,
+1.360220977e-04f, 1.317797418e-04f, 1.275373753e-04f, 1.232950054e-04f, 1.190526395e-04f, 1.148102849e-04f, 1.105679490e-04f, 1.063256390e-04f, 1.020833623e-04f, 9.784112620e-05f,
+9.359893807e-05f, 8.935680524e-05f, 8.511473501e-05f, 8.087273473e-05f, 7.663081172e-05f, 7.238897330e-05f, 6.814722681e-05f, 6.390557957e-05f, 5.966403890e-05f, 5.542261214e-05f,
+5.118130660e-05f, 4.694012960e-05f, 4.269908848e-05f, 3.845819056e-05f, 3.421744315e-05f, 2.997685359e-05f, 2.573642918e-05f, 2.149617725e-05f, 1.725610512e-05f, 1.301622011e-05f,
+8.776529531e-06f, 4.537040709e-06f, 2.977609569e-07f, -3.941302409e-06f, -8.180142073e-06f, -1.241875072e-05f, -1.665712104e-05f, -2.089524572e-05f, -2.513311744e-05f, -2.937072890e-05f,
+-3.360807278e-05f, -3.784514177e-05f, -4.208192857e-05f, -4.631842587e-05f, -5.055462636e-05f, -5.479052274e-05f, -5.902610769e-05f, -6.326137392e-05f, -6.749631412e-05f, -7.173092098e-05f,
+-7.596518722e-05f, -8.019910552e-05f, -8.443266860e-05f, -8.866586914e-05f, -9.289869985e-05f, -9.713115343e-05f, -1.013632226e-04f, -1.055949000e-04f, -1.098261785e-04f, -1.140570506e-04f,
+-1.182875092e-04f, -1.225175468e-04f, -1.267471563e-04f, -1.309763304e-04f, -1.352050617e-04f, -1.394333429e-04f, -1.436611668e-04f, -1.478885262e-04f, -1.521154136e-04f, -1.563418219e-04f,
+-1.605677438e-04f, -1.647931719e-04f, -1.690180990e-04f, -1.732425179e-04f, -1.774664212e-04f, -1.816898016e-04f, -1.859126520e-04f, -1.901349650e-04f, -1.943567334e-04f, -1.985779499e-04f,
+-2.027986071e-04f, -2.070186980e-04f, -2.112382151e-04f, -2.154571513e-04f, -2.196754993e-04f, -2.238932517e-04f, -2.281104014e-04f, -2.323269411e-04f, -2.365428636e-04f, -2.407581615e-04f,
+-2.449728277e-04f, -2.491868548e-04f, -2.534002357e-04f, -2.576129630e-04f, -2.618250296e-04f, -2.660364281e-04f, -2.702471514e-04f, -2.744571923e-04f, -2.786665433e-04f, -2.828751974e-04f,
+-2.870831472e-04f, -2.912903857e-04f, -2.954969054e-04f, -2.997026992e-04f, -3.039077598e-04f, -3.081120800e-04f, -3.123156527e-04f, -3.165184705e-04f, -3.207205262e-04f, -3.249218126e-04f,
+-3.291223225e-04f, -3.333220487e-04f, -3.375209840e-04f, -3.417191211e-04f, -3.459164528e-04f, -3.501129719e-04f, -3.543086712e-04f, -3.585035435e-04f, -3.626975815e-04f, -3.668907782e-04f,
+-3.710831262e-04f, -3.752746184e-04f, -3.794652475e-04f, -3.836550064e-04f, -3.878438879e-04f, -3.920318848e-04f, -3.962189898e-04f, -4.004051959e-04f, -4.045904957e-04f, -4.087748822e-04f,
+-4.129583481e-04f, -4.171408862e-04f, -4.213224894e-04f, -4.255031505e-04f, -4.296828623e-04f, -4.338616177e-04f, -4.380394094e-04f, -4.422162303e-04f, -4.463920733e-04f, -4.505669311e-04f,
+-4.547407966e-04f, -4.589136626e-04f, -4.630855220e-04f, -4.672563675e-04f, -4.714261922e-04f, -4.755949887e-04f, -4.797627500e-04f, -4.839294689e-04f, -4.880951383e-04f, -4.922597509e-04f,
+-4.964232997e-04f, -5.005857776e-04f, -5.047471773e-04f, -5.089074917e-04f, -5.130667138e-04f, -5.172248363e-04f, -5.213818522e-04f, -5.255377543e-04f, -5.296925354e-04f, -5.338461886e-04f,
+-5.379987066e-04f, -5.421500823e-04f, -5.463003087e-04f, -5.504493785e-04f, -5.545972848e-04f, -5.587440203e-04f, -5.628895780e-04f, -5.670339507e-04f, -5.711771314e-04f, -5.753191130e-04f,
+-5.794598884e-04f, -5.835994504e-04f, -5.877377920e-04f, -5.918749061e-04f, -5.960107856e-04f, -6.001454234e-04f, -6.042788125e-04f, -6.084109457e-04f, -6.125418160e-04f, -6.166714163e-04f,
+-6.207997396e-04f, -6.249267787e-04f, -6.290525266e-04f, -6.331769762e-04f, -6.373001205e-04f, -6.414219525e-04f, -6.455424649e-04f, -6.496616509e-04f, -6.537795034e-04f, -6.578960152e-04f,
+-6.620111794e-04f, -6.661249889e-04f, -6.702374367e-04f, -6.743485157e-04f, -6.784582189e-04f, -6.825665393e-04f, -6.866734698e-04f, -6.907790035e-04f, -6.948831332e-04f, -6.989858520e-04f,
+-7.030871528e-04f, -7.071870287e-04f, -7.112854726e-04f, -7.153824775e-04f, -7.194780364e-04f, -7.235721423e-04f, -7.276647882e-04f, -7.317559671e-04f, -7.358456720e-04f, -7.399338959e-04f,
+-7.440206318e-04f, -7.481058728e-04f, -7.521896118e-04f, -7.562718419e-04f, -7.603525561e-04f, -7.644317474e-04f, -7.685094088e-04f, -7.725855334e-04f, -7.766601142e-04f, -7.807331443e-04f,
+-7.848046166e-04f, -7.888745243e-04f, -7.929428604e-04f, -7.970096179e-04f, -8.010747898e-04f, -8.051383693e-04f, -8.092003494e-04f, -8.132607231e-04f, -8.173194836e-04f, -8.213766238e-04f,
+-8.254321369e-04f, -8.294860159e-04f, -8.335382540e-04f, -8.375888441e-04f, -8.416377794e-04f, -8.456850529e-04f, -8.497306578e-04f, -8.537745872e-04f, -8.578168341e-04f, -8.618573916e-04f,
+-8.658962529e-04f, -8.699334110e-04f, -8.739688591e-04f, -8.780025902e-04f, -8.820345976e-04f, -8.860648742e-04f, -8.900934133e-04f, -8.941202079e-04f, -8.981452513e-04f, -9.021685364e-04f,
+-9.061900565e-04f, -9.102098047e-04f, -9.142277742e-04f, -9.182439580e-04f, -9.222583494e-04f, -9.262709415e-04f, -9.302817274e-04f, -9.342907003e-04f, -9.382978534e-04f, -9.423031799e-04f,
+-9.463066729e-04f, -9.503083255e-04f, -9.543081310e-04f, -9.583060826e-04f, -9.623021734e-04f, -9.662963967e-04f, -9.702887455e-04f, -9.742792132e-04f, -9.782677928e-04f, -9.822544777e-04f,
+-9.862392610e-04f, -9.902221360e-04f, -9.942030957e-04f, -9.981821336e-04f, -1.002159243e-03f, -1.006134416e-03f, -1.010107648e-03f, -1.014078930e-03f, -1.018048257e-03f, -1.022015621e-03f,
+-1.025981015e-03f, -1.029944434e-03f, -1.033905870e-03f, -1.037865316e-03f, -1.041822766e-03f, -1.045778213e-03f, -1.049731650e-03f, -1.053683071e-03f, -1.057632469e-03f, -1.061579836e-03f,
+-1.065525167e-03f, -1.069468454e-03f, -1.073409692e-03f, -1.077348873e-03f, -1.081285990e-03f, -1.085221037e-03f, -1.089154007e-03f, -1.093084893e-03f, -1.097013689e-03f, -1.100940389e-03f,
+-1.104864984e-03f, -1.108787469e-03f, -1.112707838e-03f, -1.116626082e-03f, -1.120542197e-03f, -1.124456174e-03f, -1.128368008e-03f, -1.132277692e-03f, -1.136185218e-03f, -1.140090581e-03f,
+-1.143993774e-03f, -1.147894790e-03f, -1.151793623e-03f, -1.155690265e-03f, -1.159584711e-03f, -1.163476953e-03f, -1.167366986e-03f, -1.171254802e-03f, -1.175140395e-03f, -1.179023758e-03f,
+-1.182904884e-03f, -1.186783768e-03f, -1.190660402e-03f, -1.194534780e-03f, -1.198406895e-03f, -1.202276741e-03f, -1.206144312e-03f, -1.210009599e-03f, -1.213872598e-03f, -1.217733301e-03f,
+-1.221591702e-03f, -1.225447795e-03f, -1.229301572e-03f, -1.233153028e-03f, -1.237002155e-03f, -1.240848947e-03f, -1.244693399e-03f, -1.248535502e-03f, -1.252375251e-03f, -1.256212639e-03f,
+-1.260047659e-03f, -1.263880306e-03f, -1.267710572e-03f, -1.271538451e-03f, -1.275363937e-03f, -1.279187023e-03f, -1.283007703e-03f, -1.286825970e-03f, -1.290641817e-03f, -1.294455239e-03f,
+-1.298266228e-03f, -1.302074779e-03f, -1.305880884e-03f, -1.309684538e-03f, -1.313485733e-03f, -1.317284465e-03f, -1.321080725e-03f, -1.324874507e-03f, -1.328665806e-03f, -1.332454615e-03f,
+-1.336240927e-03f, -1.340024736e-03f, -1.343806035e-03f, -1.347584818e-03f, -1.351361079e-03f, -1.355134812e-03f, -1.358906009e-03f, -1.362674665e-03f, -1.366440772e-03f, -1.370204326e-03f,
+-1.373965319e-03f, -1.377723745e-03f, -1.381479597e-03f, -1.385232870e-03f, -1.388983557e-03f, -1.392731651e-03f, -1.396477147e-03f, -1.400220037e-03f, -1.403960316e-03f, -1.407697977e-03f,
+-1.411433014e-03f, -1.415165421e-03f, -1.418895191e-03f, -1.422622318e-03f, -1.426346795e-03f, -1.430068617e-03f, -1.433787777e-03f, -1.437504268e-03f, -1.441218085e-03f, -1.444929221e-03f,
+-1.448637670e-03f, -1.452343426e-03f, -1.456046482e-03f, -1.459746833e-03f, -1.463444471e-03f, -1.467139390e-03f, -1.470831585e-03f, -1.474521049e-03f, -1.478207776e-03f, -1.481891760e-03f,
+-1.485572994e-03f, -1.489251472e-03f, -1.492927188e-03f, -1.496600136e-03f, -1.500270310e-03f, -1.503937702e-03f, -1.507602308e-03f, -1.511264121e-03f, -1.514923135e-03f, -1.518579343e-03f,
+-1.522232740e-03f, -1.525883319e-03f, -1.529531074e-03f, -1.533175999e-03f, -1.536818088e-03f, -1.540457335e-03f, -1.544093733e-03f, -1.547727276e-03f, -1.551357959e-03f, -1.554985774e-03f,
+-1.558610717e-03f, -1.562232780e-03f, -1.565851958e-03f, -1.569468245e-03f, -1.573081634e-03f, -1.576692120e-03f, -1.580299696e-03f, -1.583904356e-03f, -1.587506095e-03f, -1.591104905e-03f,
+-1.594700782e-03f, -1.598293718e-03f, -1.601883709e-03f, -1.605470747e-03f, -1.609054827e-03f, -1.612635943e-03f, -1.616214088e-03f, -1.619789258e-03f, -1.623361444e-03f, -1.626930643e-03f,
+-1.630496847e-03f, -1.634060051e-03f, -1.637620248e-03f, -1.641177433e-03f, -1.644731600e-03f, -1.648282742e-03f, -1.651830854e-03f, -1.655375929e-03f, -1.658917963e-03f, -1.662456947e-03f,
+-1.665992878e-03f, -1.669525749e-03f, -1.673055553e-03f, -1.676582285e-03f, -1.680105940e-03f, -1.683626510e-03f, -1.687143991e-03f, -1.690658375e-03f, -1.694169658e-03f, -1.697677834e-03f,
+-1.701182896e-03f, -1.704684838e-03f, -1.708183655e-03f, -1.711679341e-03f, -1.715171890e-03f, -1.718661296e-03f, -1.722147553e-03f, -1.725630655e-03f, -1.729110597e-03f, -1.732587372e-03f,
+-1.736060975e-03f, -1.739531401e-03f, -1.742998642e-03f, -1.746462693e-03f, -1.749923549e-03f, -1.753381203e-03f, -1.756835651e-03f, -1.760286885e-03f, -1.763734900e-03f, -1.767179691e-03f,
+-1.770621251e-03f, -1.774059576e-03f, -1.777494658e-03f, -1.780926492e-03f, -1.784355073e-03f, -1.787780395e-03f, -1.791202452e-03f, -1.794621238e-03f, -1.798036748e-03f, -1.801448975e-03f,
+-1.804857915e-03f, -1.808263560e-03f, -1.811665907e-03f, -1.815064948e-03f, -1.818460678e-03f, -1.821853092e-03f, -1.825242184e-03f, -1.828627948e-03f, -1.832010378e-03f, -1.835389469e-03f,
+-1.838765215e-03f, -1.842137610e-03f, -1.845506650e-03f, -1.848872327e-03f, -1.852234637e-03f, -1.855593574e-03f, -1.858949132e-03f, -1.862301305e-03f, -1.865650089e-03f, -1.868995476e-03f,
+-1.872337463e-03f, -1.875676042e-03f, -1.879011210e-03f, -1.882342959e-03f, -1.885671284e-03f, -1.888996180e-03f, -1.892317642e-03f, -1.895635663e-03f, -1.898950238e-03f, -1.902261362e-03f,
+-1.905569029e-03f, -1.908873233e-03f, -1.912173969e-03f, -1.915471232e-03f, -1.918765015e-03f, -1.922055314e-03f, -1.925342122e-03f, -1.928625435e-03f, -1.931905247e-03f, -1.935181552e-03f,
+-1.938454346e-03f, -1.941723621e-03f, -1.944989373e-03f, -1.948251597e-03f, -1.951510287e-03f, -1.954765438e-03f, -1.958017043e-03f, -1.961265099e-03f, -1.964509598e-03f, -1.967750536e-03f,
+-1.970987908e-03f, -1.974221708e-03f, -1.977451930e-03f, -1.980678570e-03f, -1.983901621e-03f, -1.987121079e-03f, -1.990336938e-03f, -1.993549192e-03f, -1.996757837e-03f, -1.999962867e-03f,
+-2.003164276e-03f, -2.006362059e-03f, -2.009556212e-03f, -2.012746728e-03f, -2.015933602e-03f, -2.019116829e-03f, -2.022296403e-03f, -2.025472320e-03f, -2.028644574e-03f, -2.031813160e-03f,
+-2.034978072e-03f, -2.038139305e-03f, -2.041296854e-03f, -2.044450713e-03f, -2.047600878e-03f, -2.050747343e-03f, -2.053890103e-03f, -2.057029152e-03f, -2.060164485e-03f, -2.063296098e-03f,
+-2.066423985e-03f, -2.069548140e-03f, -2.072668558e-03f, -2.075785235e-03f, -2.078898165e-03f, -2.082007343e-03f, -2.085112764e-03f, -2.088214422e-03f, -2.091312312e-03f, -2.094406430e-03f,
+-2.097496769e-03f, -2.100583326e-03f, -2.103666094e-03f, -2.106745069e-03f, -2.109820245e-03f, -2.112891618e-03f, -2.115959182e-03f, -2.119022932e-03f, -2.122082864e-03f, -2.125138971e-03f,
+-2.128191249e-03f, -2.131239692e-03f, -2.134284297e-03f, -2.137325057e-03f, -2.140361968e-03f, -2.143395024e-03f, -2.146424221e-03f, -2.149449553e-03f, -2.152471016e-03f, -2.155488604e-03f,
+-2.158502312e-03f, -2.161512136e-03f, -2.164518070e-03f, -2.167520110e-03f, -2.170518250e-03f, -2.173512485e-03f, -2.176502811e-03f, -2.179489223e-03f, -2.182471714e-03f, -2.185450282e-03f,
+-2.188424920e-03f, -2.191395623e-03f, -2.194362388e-03f, -2.197325208e-03f, -2.200284079e-03f, -2.203238996e-03f, -2.206189954e-03f, -2.209136949e-03f, -2.212079974e-03f, -2.215019026e-03f,
+-2.217954100e-03f, -2.220885190e-03f, -2.223812292e-03f, -2.226735401e-03f, -2.229654512e-03f, -2.232569620e-03f, -2.235480721e-03f, -2.238387809e-03f, -2.241290880e-03f, -2.244189929e-03f,
+-2.247084952e-03f, -2.249975942e-03f, -2.252862896e-03f, -2.255745809e-03f, -2.258624676e-03f, -2.261499493e-03f, -2.264370253e-03f, -2.267236954e-03f, -2.270099589e-03f, -2.272958155e-03f,
+-2.275812646e-03f, -2.278663058e-03f, -2.281509386e-03f, -2.284351626e-03f, -2.287189772e-03f, -2.290023820e-03f, -2.292853765e-03f, -2.295679603e-03f, -2.298501329e-03f, -2.301318938e-03f,
+-2.304132426e-03f, -2.306941788e-03f, -2.309747019e-03f, -2.312548114e-03f, -2.315345070e-03f, -2.318137881e-03f, -2.320926543e-03f, -2.323711051e-03f, -2.326491401e-03f, -2.329267588e-03f,
+-2.332039607e-03f, -2.334807454e-03f, -2.337571124e-03f, -2.340330613e-03f, -2.343085916e-03f, -2.345837029e-03f, -2.348583947e-03f, -2.351326665e-03f, -2.354065180e-03f, -2.356799486e-03f,
+-2.359529579e-03f, -2.362255454e-03f, -2.364977107e-03f, -2.367694534e-03f, -2.370407730e-03f, -2.373116691e-03f, -2.375821411e-03f, -2.378521887e-03f, -2.381218115e-03f, -2.383910089e-03f,
+-2.386597805e-03f, -2.389281259e-03f, -2.391960447e-03f, -2.394635364e-03f, -2.397306005e-03f, -2.399972367e-03f, -2.402634444e-03f, -2.405292233e-03f, -2.407945729e-03f, -2.410594928e-03f,
+-2.413239825e-03f, -2.415880416e-03f, -2.418516697e-03f, -2.421148663e-03f, -2.423776311e-03f, -2.426399635e-03f, -2.429018631e-03f, -2.431633295e-03f, -2.434243623e-03f, -2.436849611e-03f,
+-2.439451254e-03f, -2.442048548e-03f, -2.444641488e-03f, -2.447230071e-03f, -2.449814292e-03f, -2.452394147e-03f, -2.454969632e-03f, -2.457540742e-03f, -2.460107474e-03f, -2.462669822e-03f,
+-2.465227783e-03f, -2.467781353e-03f, -2.470330528e-03f, -2.472875302e-03f, -2.475415673e-03f, -2.477951636e-03f, -2.480483186e-03f, -2.483010320e-03f, -2.485533034e-03f, -2.488051322e-03f,
+-2.490565183e-03f, -2.493074610e-03f, -2.495579600e-03f, -2.498080149e-03f, -2.500576253e-03f, -2.503067907e-03f, -2.505555108e-03f, -2.508037852e-03f, -2.510516134e-03f, -2.512989951e-03f,
+-2.515459298e-03f, -2.517924172e-03f, -2.520384568e-03f, -2.522840482e-03f, -2.525291910e-03f, -2.527738849e-03f, -2.530181294e-03f, -2.532619241e-03f, -2.535052686e-03f, -2.537481626e-03f,
+-2.539906057e-03f, -2.542325973e-03f, -2.544741373e-03f, -2.547152250e-03f, -2.549558602e-03f, -2.551960425e-03f, -2.554357715e-03f, -2.556750467e-03f, -2.559138679e-03f, -2.561522345e-03f,
+-2.563901463e-03f, -2.566276028e-03f, -2.568646036e-03f, -2.571011484e-03f, -2.573372367e-03f, -2.575728682e-03f, -2.578080426e-03f, -2.580427593e-03f, -2.582770181e-03f, -2.585108185e-03f,
+-2.587441602e-03f, -2.589770428e-03f, -2.592094659e-03f, -2.594414292e-03f, -2.596729322e-03f, -2.599039746e-03f, -2.601345559e-03f, -2.603646760e-03f, -2.605943342e-03f, -2.608235304e-03f,
+-2.610522641e-03f, -2.612805349e-03f, -2.615083425e-03f, -2.617356864e-03f, -2.619625664e-03f, -2.621889821e-03f, -2.624149331e-03f, -2.626404190e-03f, -2.628654394e-03f, -2.630899941e-03f,
+-2.633140825e-03f, -2.635377045e-03f, -2.637608596e-03f, -2.639835474e-03f, -2.642057675e-03f, -2.644275197e-03f, -2.646488036e-03f, -2.648696188e-03f, -2.650899649e-03f, -2.653098416e-03f,
+-2.655292486e-03f, -2.657481854e-03f, -2.659666518e-03f, -2.661846473e-03f, -2.664021717e-03f, -2.666192245e-03f, -2.668358054e-03f, -2.670519141e-03f, -2.672675502e-03f, -2.674827134e-03f,
+-2.676974033e-03f, -2.679116196e-03f, -2.681253619e-03f, -2.683386299e-03f, -2.685514233e-03f, -2.687637416e-03f, -2.689755846e-03f, -2.691869519e-03f, -2.693978432e-03f, -2.696082581e-03f,
+-2.698181963e-03f, -2.700276574e-03f, -2.702366412e-03f, -2.704451473e-03f, -2.706531752e-03f, -2.708607248e-03f, -2.710677957e-03f, -2.712743875e-03f, -2.714804999e-03f, -2.716861326e-03f,
+-2.718912853e-03f, -2.720959575e-03f, -2.723001491e-03f, -2.725038596e-03f, -2.727070887e-03f, -2.729098362e-03f, -2.731121016e-03f, -2.733138846e-03f, -2.735151850e-03f, -2.737160025e-03f,
+-2.739163366e-03f, -2.741161870e-03f, -2.743155535e-03f, -2.745144357e-03f, -2.747128334e-03f, -2.749107461e-03f, -2.751081736e-03f, -2.753051155e-03f, -2.755015716e-03f, -2.756975414e-03f,
+-2.758930248e-03f, -2.760880214e-03f, -2.762825309e-03f, -2.764765530e-03f, -2.766700873e-03f, -2.768631336e-03f, -2.770556915e-03f, -2.772477607e-03f, -2.774393410e-03f, -2.776304320e-03f,
+-2.778210334e-03f, -2.780111450e-03f, -2.782007663e-03f, -2.783898971e-03f, -2.785785372e-03f, -2.787666862e-03f, -2.789543437e-03f, -2.791415096e-03f, -2.793281835e-03f, -2.795143651e-03f,
+-2.797000541e-03f, -2.798852502e-03f, -2.800699532e-03f, -2.802541626e-03f, -2.804378784e-03f, -2.806211000e-03f, -2.808038273e-03f, -2.809860600e-03f, -2.811677977e-03f, -2.813490403e-03f,
+-2.815297873e-03f, -2.817100385e-03f, -2.818897937e-03f, -2.820690525e-03f, -2.822478147e-03f, -2.824260799e-03f, -2.826038479e-03f, -2.827811184e-03f, -2.829578912e-03f, -2.831341658e-03f,
+-2.833099422e-03f, -2.834852199e-03f, -2.836599988e-03f, -2.838342785e-03f, -2.840080587e-03f, -2.841813393e-03f, -2.843541198e-03f, -2.845264001e-03f, -2.846981798e-03f, -2.848694587e-03f,
+-2.850402366e-03f, -2.852105131e-03f, -2.853802880e-03f, -2.855495610e-03f, -2.857183319e-03f, -2.858866003e-03f, -2.860543661e-03f, -2.862216289e-03f, -2.863883886e-03f, -2.865546447e-03f,
+-2.867203971e-03f, -2.868856455e-03f, -2.870503897e-03f, -2.872146294e-03f, -2.873783643e-03f, -2.875415941e-03f, -2.877043187e-03f, -2.878665378e-03f, -2.880282510e-03f, -2.881894582e-03f,
+-2.883501591e-03f, -2.885103535e-03f, -2.886700411e-03f, -2.888292216e-03f, -2.889878948e-03f, -2.891460604e-03f, -2.893037183e-03f, -2.894608681e-03f, -2.896175097e-03f, -2.897736427e-03f,
+-2.899292669e-03f, -2.900843821e-03f, -2.902389881e-03f, -2.903930845e-03f, -2.905466712e-03f, -2.906997480e-03f, -2.908523145e-03f, -2.910043705e-03f, -2.911559159e-03f, -2.913069503e-03f,
+-2.914574736e-03f, -2.916074854e-03f, -2.917569857e-03f, -2.919059740e-03f, -2.920544503e-03f, -2.922024143e-03f, -2.923498657e-03f, -2.924968043e-03f, -2.926432299e-03f, -2.927891423e-03f,
+-2.929345412e-03f, -2.930794264e-03f, -2.932237977e-03f, -2.933676549e-03f, -2.935109977e-03f, -2.936538259e-03f, -2.937961393e-03f, -2.939379378e-03f, -2.940792209e-03f, -2.942199887e-03f,
+-2.943602407e-03f, -2.944999769e-03f, -2.946391969e-03f, -2.947779007e-03f, -2.949160879e-03f, -2.950537584e-03f, -2.951909119e-03f, -2.953275482e-03f, -2.954636672e-03f, -2.955992686e-03f,
+-2.957343522e-03f, -2.958689178e-03f, -2.960029652e-03f, -2.961364942e-03f, -2.962695046e-03f, -2.964019962e-03f, -2.965339687e-03f, -2.966654221e-03f, -2.967963560e-03f, -2.969267703e-03f,
+-2.970566647e-03f, -2.971860392e-03f, -2.973148934e-03f, -2.974432272e-03f, -2.975710405e-03f, -2.976983329e-03f, -2.978251043e-03f, -2.979513546e-03f, -2.980770834e-03f, -2.982022907e-03f,
+-2.983269763e-03f, -2.984511399e-03f, -2.985747814e-03f, -2.986979005e-03f, -2.988204972e-03f, -2.989425711e-03f, -2.990641222e-03f, -2.991851502e-03f, -2.993056550e-03f, -2.994256364e-03f,
+-2.995450941e-03f, -2.996640281e-03f, -2.997824381e-03f, -2.999003240e-03f, -3.000176856e-03f, -3.001345226e-03f, -3.002508350e-03f, -3.003666226e-03f, -3.004818852e-03f, -3.005966225e-03f,
+-3.007108345e-03f, -3.008245210e-03f, -3.009376818e-03f, -3.010503167e-03f, -3.011624256e-03f, -3.012740083e-03f, -3.013850646e-03f, -3.014955944e-03f, -3.016055975e-03f, -3.017150737e-03f,
+-3.018240229e-03f, -3.019324450e-03f, -3.020403397e-03f, -3.021477069e-03f, -3.022545464e-03f, -3.023608581e-03f, -3.024666419e-03f, -3.025718975e-03f, -3.026766248e-03f, -3.027808237e-03f,
+-3.028844940e-03f, -3.029876355e-03f, -3.030902482e-03f, -3.031923318e-03f, -3.032938862e-03f, -3.033949113e-03f, -3.034954069e-03f, -3.035953729e-03f, -3.036948090e-03f, -3.037937153e-03f,
+-3.038920914e-03f, -3.039899374e-03f, -3.040872530e-03f, -3.041840381e-03f, -3.042802926e-03f, -3.043760163e-03f, -3.044712091e-03f, -3.045658708e-03f, -3.046600014e-03f, -3.047536006e-03f,
+-3.048466684e-03f, -3.049392045e-03f, -3.050312090e-03f, -3.051226816e-03f, -3.052136222e-03f, -3.053040307e-03f, -3.053939070e-03f, -3.054832509e-03f, -3.055720622e-03f, -3.056603410e-03f,
+-3.057480870e-03f, -3.058353001e-03f, -3.059219803e-03f, -3.060081273e-03f, -3.060937411e-03f, -3.061788215e-03f, -3.062633684e-03f, -3.063473817e-03f, -3.064308613e-03f, -3.065138071e-03f,
+-3.065962189e-03f, -3.066780966e-03f, -3.067594402e-03f, -3.068402495e-03f, -3.069205244e-03f, -3.070002647e-03f, -3.070794704e-03f, -3.071581414e-03f, -3.072362775e-03f, -3.073138787e-03f,
+-3.073909448e-03f, -3.074674758e-03f, -3.075434715e-03f, -3.076189318e-03f, -3.076938566e-03f, -3.077682458e-03f, -3.078420994e-03f, -3.079154172e-03f, -3.079881991e-03f, -3.080604450e-03f,
+-3.081321549e-03f, -3.082033286e-03f, -3.082739660e-03f, -3.083440670e-03f, -3.084136316e-03f, -3.084826596e-03f, -3.085511510e-03f, -3.086191057e-03f, -3.086865236e-03f, -3.087534045e-03f,
+-3.088197484e-03f, -3.088855553e-03f, -3.089508250e-03f, -3.090155574e-03f, -3.090797525e-03f, -3.091434101e-03f, -3.092065303e-03f, -3.092691129e-03f, -3.093311577e-03f, -3.093926649e-03f,
+-3.094536342e-03f, -3.095140656e-03f, -3.095739591e-03f, -3.096333144e-03f, -3.096921317e-03f, -3.097504107e-03f, -3.098081515e-03f, -3.098653539e-03f, -3.099220178e-03f, -3.099781433e-03f,
+-3.100337302e-03f, -3.100887785e-03f, -3.101432881e-03f, -3.101972589e-03f, -3.102506909e-03f, -3.103035840e-03f, -3.103559382e-03f, -3.104077533e-03f, -3.104590293e-03f, -3.105097662e-03f,
+-3.105599639e-03f, -3.106096223e-03f, -3.106587414e-03f, -3.107073211e-03f, -3.107553614e-03f, -3.108028622e-03f, -3.108498234e-03f, -3.108962450e-03f, -3.109421270e-03f, -3.109874693e-03f,
+-3.110322718e-03f, -3.110765346e-03f, -3.111202575e-03f, -3.111634404e-03f, -3.112060835e-03f, -3.112481865e-03f, -3.112897495e-03f, -3.113307724e-03f, -3.113712552e-03f, -3.114111978e-03f,
+-3.114506002e-03f, -3.114894624e-03f, -3.115277843e-03f, -3.115655658e-03f, -3.116028070e-03f, -3.116395078e-03f, -3.116756681e-03f, -3.117112880e-03f, -3.117463673e-03f, -3.117809062e-03f,
+-3.118149044e-03f, -3.118483621e-03f, -3.118812791e-03f, -3.119136554e-03f, -3.119454911e-03f, -3.119767861e-03f, -3.120075403e-03f, -3.120377537e-03f, -3.120674264e-03f, -3.120965582e-03f,
+-3.121251492e-03f, -3.121531993e-03f, -3.121807086e-03f, -3.122076769e-03f, -3.122341044e-03f, -3.122599909e-03f, -3.122853364e-03f, -3.123101410e-03f, -3.123344046e-03f, -3.123581271e-03f,
+-3.123813087e-03f, -3.124039493e-03f, -3.124260488e-03f, -3.124476072e-03f, -3.124686246e-03f, -3.124891010e-03f, -3.125090363e-03f, -3.125284304e-03f, -3.125472835e-03f, -3.125655956e-03f,
+-3.125833665e-03f, -3.126005963e-03f, -3.126172850e-03f, -3.126334326e-03f, -3.126490392e-03f, -3.126641046e-03f, -3.126786289e-03f, -3.126926122e-03f, -3.127060543e-03f, -3.127189553e-03f,
+-3.127313153e-03f, -3.127431342e-03f, -3.127544121e-03f, -3.127651488e-03f, -3.127753445e-03f, -3.127849992e-03f, -3.127941129e-03f, -3.128026855e-03f, -3.128107172e-03f, -3.128182078e-03f,
+-3.128251575e-03f, -3.128315662e-03f, -3.128374339e-03f, -3.128427608e-03f, -3.128475467e-03f, -3.128517918e-03f, -3.128554960e-03f, -3.128586593e-03f, -3.128612818e-03f, -3.128633635e-03f,
+-3.128649045e-03f, -3.128659047e-03f, -3.128663641e-03f, -3.128662829e-03f, -3.128656610e-03f, -3.128644985e-03f, -3.128627953e-03f, -3.128605516e-03f, -3.128577673e-03f, -3.128544425e-03f,
+-3.128505772e-03f, -3.128461715e-03f, -3.128412254e-03f, -3.128357389e-03f, -3.128297120e-03f, -3.128231449e-03f, -3.128160374e-03f, -3.128083898e-03f, -3.128002020e-03f, -3.127914740e-03f,
+-3.127822060e-03f, -3.127723979e-03f, -3.127620498e-03f, -3.127511617e-03f, -3.127397337e-03f, -3.127277659e-03f, -3.127152582e-03f, -3.127022107e-03f, -3.126886236e-03f, -3.126744967e-03f,
+-3.126598303e-03f, -3.126446243e-03f, -3.126288787e-03f, -3.126125938e-03f, -3.125957694e-03f, -3.125784057e-03f, -3.125605027e-03f, -3.125420604e-03f, -3.125230790e-03f, -3.125035585e-03f,
+-3.124834990e-03f, -3.124629005e-03f, -3.124417630e-03f, -3.124200867e-03f, -3.123978716e-03f, -3.123751178e-03f, -3.123518253e-03f, -3.123279943e-03f, -3.123036247e-03f, -3.122787167e-03f,
+-3.122532703e-03f, -3.122272856e-03f, -3.122007626e-03f, -3.121737015e-03f, -3.121461023e-03f, -3.121179651e-03f, -3.120892900e-03f, -3.120600770e-03f, -3.120303262e-03f, -3.120000377e-03f,
+-3.119692116e-03f, -3.119378480e-03f, -3.119059469e-03f, -3.118735084e-03f, -3.118405326e-03f, -3.118070196e-03f, -3.117729696e-03f, -3.117383824e-03f, -3.117032583e-03f, -3.116675974e-03f,
+-3.116313997e-03f, -3.115946653e-03f, -3.115573943e-03f, -3.115195868e-03f, -3.114812430e-03f, -3.114423628e-03f, -3.114029463e-03f, -3.113629938e-03f, -3.113225053e-03f, -3.112814808e-03f,
+-3.112399205e-03f, -3.111978244e-03f, -3.111551928e-03f, -3.111120256e-03f, -3.110683230e-03f, -3.110240850e-03f, -3.109793119e-03f, -3.109340036e-03f, -3.108881603e-03f, -3.108417822e-03f,
+-3.107948692e-03f, -3.107474215e-03f, -3.106994393e-03f, -3.106509226e-03f, -3.106018716e-03f, -3.105522863e-03f, -3.105021669e-03f, -3.104515134e-03f, -3.104003261e-03f, -3.103486050e-03f,
+-3.102963502e-03f, -3.102435619e-03f, -3.101902401e-03f, -3.101363851e-03f, -3.100819968e-03f, -3.100270755e-03f, -3.099716212e-03f, -3.099156341e-03f, -3.098591143e-03f, -3.098020620e-03f,
+-3.097444771e-03f, -3.096863600e-03f, -3.096277107e-03f, -3.095685293e-03f, -3.095088160e-03f, -3.094485708e-03f, -3.093877940e-03f, -3.093264857e-03f, -3.092646459e-03f, -3.092022749e-03f,
+-3.091393728e-03f, -3.090759396e-03f, -3.090119756e-03f, -3.089474808e-03f, -3.088824555e-03f, -3.088168997e-03f, -3.087508136e-03f, -3.086841973e-03f, -3.086170510e-03f, -3.085493748e-03f,
+-3.084811689e-03f, -3.084124334e-03f, -3.083431684e-03f, -3.082733742e-03f, -3.082030508e-03f, -3.081321984e-03f, -3.080608171e-03f, -3.079889072e-03f, -3.079164687e-03f, -3.078435018e-03f,
+-3.077700066e-03f, -3.076959834e-03f, -3.076214322e-03f, -3.075463532e-03f, -3.074707466e-03f, -3.073946126e-03f, -3.073179512e-03f, -3.072407627e-03f, -3.071630472e-03f, -3.070848049e-03f,
+-3.070060359e-03f, -3.069267404e-03f, -3.068469186e-03f, -3.067665706e-03f, -3.066856966e-03f, -3.066042968e-03f, -3.065223713e-03f, -3.064399203e-03f, -3.063569440e-03f, -3.062734425e-03f,
+-3.061894160e-03f, -3.061048647e-03f, -3.060197887e-03f, -3.059341883e-03f, -3.058480636e-03f, -3.057614147e-03f, -3.056742420e-03f, -3.055865454e-03f, -3.054983253e-03f, -3.054095817e-03f,
+-3.053203149e-03f, -3.052305251e-03f, -3.051402124e-03f, -3.050493770e-03f, -3.049580192e-03f, -3.048661390e-03f, -3.047737367e-03f, -3.046808124e-03f, -3.045873664e-03f, -3.044933988e-03f,
+-3.043989099e-03f, -3.043038998e-03f, -3.042083686e-03f, -3.041123167e-03f, -3.040157441e-03f, -3.039186512e-03f, -3.038210380e-03f, -3.037229048e-03f, -3.036242517e-03f, -3.035250790e-03f,
+-3.034253869e-03f, -3.033251756e-03f, -3.032244452e-03f, -3.031231960e-03f, -3.030214281e-03f, -3.029191418e-03f, -3.028163373e-03f, -3.027130147e-03f, -3.026091744e-03f, -3.025048164e-03f,
+-3.023999410e-03f, -3.022945484e-03f, -3.021886389e-03f, -3.020822125e-03f, -3.019752696e-03f, -3.018678103e-03f, -3.017598349e-03f, -3.016513435e-03f, -3.015423365e-03f, -3.014328139e-03f,
+-3.013227760e-03f, -3.012122231e-03f, -3.011011553e-03f, -3.009895729e-03f, -3.008774760e-03f, -3.007648650e-03f, -3.006517400e-03f, -3.005381012e-03f, -3.004239489e-03f, -3.003092833e-03f,
+-3.001941046e-03f, -3.000784131e-03f, -2.999622089e-03f, -2.998454923e-03f, -2.997282636e-03f, -2.996105229e-03f, -2.994922704e-03f, -2.993735065e-03f, -2.992542314e-03f, -2.991344452e-03f,
+-2.990141483e-03f, -2.988933407e-03f, -2.987720229e-03f, -2.986501950e-03f, -2.985278572e-03f, -2.984050098e-03f, -2.982816531e-03f, -2.981577872e-03f, -2.980334124e-03f, -2.979085290e-03f,
+-2.977831372e-03f, -2.976572372e-03f, -2.975308293e-03f, -2.974039137e-03f, -2.972764907e-03f, -2.971485605e-03f, -2.970201233e-03f, -2.968911795e-03f, -2.967617292e-03f, -2.966317728e-03f,
+-2.965013104e-03f, -2.963703423e-03f, -2.962388687e-03f, -2.961068900e-03f, -2.959744064e-03f, -2.958414181e-03f, -2.957079253e-03f, -2.955739284e-03f, -2.954394276e-03f, -2.953044232e-03f,
+-2.951689153e-03f, -2.950329044e-03f, -2.948963905e-03f, -2.947593741e-03f, -2.946218553e-03f, -2.944838345e-03f, -2.943453118e-03f, -2.942062876e-03f, -2.940667621e-03f, -2.939267356e-03f,
+-2.937862083e-03f, -2.936451806e-03f, -2.935036526e-03f, -2.933616247e-03f, -2.932190972e-03f, -2.930760702e-03f, -2.929325441e-03f, -2.927885192e-03f, -2.926439957e-03f, -2.924989739e-03f,
+-2.923534541e-03f, -2.922074365e-03f, -2.920609214e-03f, -2.919139092e-03f, -2.917664001e-03f, -2.916183943e-03f, -2.914698922e-03f, -2.913208940e-03f, -2.911714000e-03f, -2.910214105e-03f,
+-2.908709258e-03f, -2.907199462e-03f, -2.905684720e-03f, -2.904165034e-03f, -2.902640407e-03f, -2.901110842e-03f, -2.899576343e-03f, -2.898036911e-03f, -2.896492551e-03f, -2.894943264e-03f,
+-2.893389054e-03f, -2.891829924e-03f, -2.890265876e-03f, -2.888696914e-03f, -2.887123041e-03f, -2.885544259e-03f, -2.883960572e-03f, -2.882371982e-03f, -2.880778493e-03f, -2.879180108e-03f,
+-2.877576829e-03f, -2.875968659e-03f, -2.874355602e-03f, -2.872737661e-03f, -2.871114838e-03f, -2.869487138e-03f, -2.867854562e-03f, -2.866217114e-03f, -2.864574796e-03f, -2.862927613e-03f,
+-2.861275567e-03f, -2.859618662e-03f, -2.857956899e-03f, -2.856290283e-03f, -2.854618817e-03f, -2.852942504e-03f, -2.851261346e-03f, -2.849575348e-03f, -2.847884511e-03f, -2.846188840e-03f,
+-2.844488338e-03f, -2.842783007e-03f, -2.841072852e-03f, -2.839357874e-03f, -2.837638078e-03f, -2.835913467e-03f, -2.834184043e-03f, -2.832449810e-03f, -2.830710772e-03f, -2.828966931e-03f,
+-2.827218291e-03f, -2.825464855e-03f, -2.823706626e-03f, -2.821943608e-03f, -2.820175804e-03f, -2.818403218e-03f, -2.816625851e-03f, -2.814843709e-03f, -2.813056794e-03f, -2.811265109e-03f,
+-2.809468658e-03f, -2.807667445e-03f, -2.805861472e-03f, -2.804050742e-03f, -2.802235261e-03f, -2.800415030e-03f, -2.798590053e-03f, -2.796760333e-03f, -2.794925874e-03f, -2.793086680e-03f,
+-2.791242753e-03f, -2.789394098e-03f, -2.787540717e-03f, -2.785682614e-03f, -2.783819793e-03f, -2.781952256e-03f, -2.780080008e-03f, -2.778203052e-03f, -2.776321391e-03f, -2.774435030e-03f,
+-2.772543970e-03f, -2.770648217e-03f, -2.768747772e-03f, -2.766842641e-03f, -2.764932826e-03f, -2.763018332e-03f, -2.761099160e-03f, -2.759175316e-03f, -2.757246803e-03f, -2.755313624e-03f,
+-2.753375782e-03f, -2.751433283e-03f, -2.749486128e-03f, -2.747534321e-03f, -2.745577867e-03f, -2.743616769e-03f, -2.741651031e-03f, -2.739680655e-03f, -2.737705646e-03f, -2.735726008e-03f,
+-2.733741744e-03f, -2.731752857e-03f, -2.729759352e-03f, -2.727761232e-03f, -2.725758501e-03f, -2.723751162e-03f, -2.721739219e-03f, -2.719722677e-03f, -2.717701538e-03f, -2.715675806e-03f,
+-2.713645486e-03f, -2.711610580e-03f, -2.709571093e-03f, -2.707527028e-03f, -2.705478389e-03f, -2.703425181e-03f, -2.701367406e-03f, -2.699305068e-03f, -2.697238172e-03f, -2.695166721e-03f,
+-2.693090718e-03f, -2.691010169e-03f, -2.688925076e-03f, -2.686835443e-03f, -2.684741274e-03f, -2.682642574e-03f, -2.680539346e-03f, -2.678431593e-03f, -2.676319320e-03f, -2.674202531e-03f,
+-2.672081229e-03f, -2.669955418e-03f, -2.667825103e-03f, -2.665690287e-03f, -2.663550974e-03f, -2.661407168e-03f, -2.659258873e-03f, -2.657106093e-03f, -2.654948831e-03f, -2.652787093e-03f,
+-2.650620881e-03f, -2.648450200e-03f, -2.646275054e-03f, -2.644095446e-03f, -2.641911382e-03f, -2.639722864e-03f, -2.637529896e-03f, -2.635332484e-03f, -2.633130630e-03f, -2.630924339e-03f,
+-2.628713615e-03f, -2.626498462e-03f, -2.624278884e-03f, -2.622054884e-03f, -2.619826468e-03f, -2.617593639e-03f, -2.615356402e-03f, -2.613114759e-03f, -2.610868716e-03f, -2.608618277e-03f,
+-2.606363445e-03f, -2.604104226e-03f, -2.601840622e-03f, -2.599572638e-03f, -2.597300278e-03f, -2.595023547e-03f, -2.592742448e-03f, -2.590456986e-03f, -2.588167165e-03f, -2.585872989e-03f,
+-2.583574462e-03f, -2.581271589e-03f, -2.578964373e-03f, -2.576652819e-03f, -2.574336931e-03f, -2.572016713e-03f, -2.569692170e-03f, -2.567363306e-03f, -2.565030124e-03f, -2.562692630e-03f,
+-2.560350828e-03f, -2.558004721e-03f, -2.555654314e-03f, -2.553299612e-03f, -2.550940618e-03f, -2.548577338e-03f, -2.546209774e-03f, -2.543837932e-03f, -2.541461816e-03f, -2.539081430e-03f,
+-2.536696779e-03f, -2.534307867e-03f, -2.531914697e-03f, -2.529517276e-03f, -2.527115606e-03f, -2.524709693e-03f, -2.522299540e-03f, -2.519885153e-03f, -2.517466534e-03f, -2.515043690e-03f,
+-2.512616624e-03f, -2.510185341e-03f, -2.507749845e-03f, -2.505310140e-03f, -2.502866231e-03f, -2.500418123e-03f, -2.497965819e-03f, -2.495509325e-03f, -2.493048645e-03f, -2.490583782e-03f,
+-2.488114743e-03f, -2.485641530e-03f, -2.483164150e-03f, -2.480682605e-03f, -2.478196901e-03f, -2.475707043e-03f, -2.473213034e-03f, -2.470714879e-03f, -2.468212583e-03f, -2.465706150e-03f,
+-2.463195585e-03f, -2.460680893e-03f, -2.458162077e-03f, -2.455639143e-03f, -2.453112095e-03f, -2.450580938e-03f, -2.448045676e-03f, -2.445506314e-03f, -2.442962856e-03f, -2.440415307e-03f,
+-2.437863672e-03f, -2.435307956e-03f, -2.432748162e-03f, -2.430184295e-03f, -2.427616361e-03f, -2.425044364e-03f, -2.422468308e-03f, -2.419888198e-03f, -2.417304039e-03f, -2.414715836e-03f,
+-2.412123593e-03f, -2.409527314e-03f, -2.406927005e-03f, -2.404322671e-03f, -2.401714315e-03f, -2.399101943e-03f, -2.396485560e-03f, -2.393865169e-03f, -2.391240777e-03f, -2.388612387e-03f,
+-2.385980004e-03f, -2.383343633e-03f, -2.380703280e-03f, -2.378058948e-03f, -2.375410642e-03f, -2.372758367e-03f, -2.370102129e-03f, -2.367441931e-03f, -2.364777779e-03f, -2.362109677e-03f,
+-2.359437631e-03f, -2.356761644e-03f, -2.354081722e-03f, -2.351397870e-03f, -2.348710093e-03f, -2.346018395e-03f, -2.343322781e-03f, -2.340623256e-03f, -2.337919825e-03f, -2.335212493e-03f,
+-2.332501264e-03f, -2.329786145e-03f, -2.327067138e-03f, -2.324344250e-03f, -2.321617485e-03f, -2.318886849e-03f, -2.316152346e-03f, -2.313413980e-03f, -2.310671758e-03f, -2.307925683e-03f,
+-2.305175762e-03f, -2.302421998e-03f, -2.299664397e-03f, -2.296902963e-03f, -2.294137703e-03f, -2.291368620e-03f, -2.288595719e-03f, -2.285819007e-03f, -2.283038487e-03f, -2.280254164e-03f,
+-2.277466044e-03f, -2.274674132e-03f, -2.271878433e-03f, -2.269078951e-03f, -2.266275692e-03f, -2.263468660e-03f, -2.260657862e-03f, -2.257843301e-03f, -2.255024984e-03f, -2.252202914e-03f,
+-2.249377098e-03f, -2.246547539e-03f, -2.243714244e-03f, -2.240877217e-03f, -2.238036463e-03f, -2.235191988e-03f, -2.232343797e-03f, -2.229491894e-03f, -2.226636285e-03f, -2.223776976e-03f,
+-2.220913970e-03f, -2.218047273e-03f, -2.215176891e-03f, -2.212302829e-03f, -2.209425091e-03f, -2.206543683e-03f, -2.203658610e-03f, -2.200769877e-03f, -2.197877490e-03f, -2.194981453e-03f,
+-2.192081772e-03f, -2.189178452e-03f, -2.186271498e-03f, -2.183360915e-03f, -2.180446709e-03f, -2.177528885e-03f, -2.174607448e-03f, -2.171682403e-03f, -2.168753756e-03f, -2.165821512e-03f,
+-2.162885675e-03f, -2.159946252e-03f, -2.157003247e-03f, -2.154056666e-03f, -2.151106515e-03f, -2.148152797e-03f, -2.145195520e-03f, -2.142234687e-03f, -2.139270304e-03f, -2.136302377e-03f,
+-2.133330911e-03f, -2.130355912e-03f, -2.127377383e-03f, -2.124395332e-03f, -2.121409762e-03f, -2.118420681e-03f, -2.115428092e-03f, -2.112432001e-03f, -2.109432414e-03f, -2.106429336e-03f,
+-2.103422772e-03f, -2.100412728e-03f, -2.097399209e-03f, -2.094382220e-03f, -2.091361767e-03f, -2.088337856e-03f, -2.085310491e-03f, -2.082279678e-03f, -2.079245423e-03f, -2.076207730e-03f,
+-2.073166606e-03f, -2.070122056e-03f, -2.067074085e-03f, -2.064022698e-03f, -2.060967902e-03f, -2.057909701e-03f, -2.054848101e-03f, -2.051783108e-03f, -2.048714726e-03f, -2.045642962e-03f,
+-2.042567821e-03f, -2.039489308e-03f, -2.036407429e-03f, -2.033322190e-03f, -2.030233595e-03f, -2.027141651e-03f, -2.024046363e-03f, -2.020947736e-03f, -2.017845776e-03f, -2.014740489e-03f,
+-2.011631880e-03f, -2.008519954e-03f, -2.005404717e-03f, -2.002286176e-03f, -1.999164334e-03f, -1.996039198e-03f, -1.992910774e-03f, -1.989779066e-03f, -1.986644081e-03f, -1.983505824e-03f,
+-1.980364301e-03f, -1.977219517e-03f, -1.974071478e-03f, -1.970920190e-03f, -1.967765658e-03f, -1.964607887e-03f, -1.961446884e-03f, -1.958282654e-03f, -1.955115203e-03f, -1.951944536e-03f,
+-1.948770658e-03f, -1.945593577e-03f, -1.942413296e-03f, -1.939229823e-03f, -1.936043162e-03f, -1.932853319e-03f, -1.929660300e-03f, -1.926464111e-03f, -1.923264757e-03f, -1.920062244e-03f,
+-1.916856578e-03f, -1.913647764e-03f, -1.910435808e-03f, -1.907220716e-03f, -1.904002494e-03f, -1.900781147e-03f, -1.897556680e-03f, -1.894329101e-03f, -1.891098414e-03f, -1.887864625e-03f,
+-1.884627740e-03f, -1.881387764e-03f, -1.878144704e-03f, -1.874898566e-03f, -1.871649354e-03f, -1.868397075e-03f, -1.865141734e-03f, -1.861883338e-03f, -1.858621892e-03f, -1.855357402e-03f,
+-1.852089873e-03f, -1.848819312e-03f, -1.845545725e-03f, -1.842269116e-03f, -1.838989493e-03f, -1.835706860e-03f, -1.832421223e-03f, -1.829132590e-03f, -1.825840964e-03f, -1.822546352e-03f,
+-1.819248761e-03f, -1.815948195e-03f, -1.812644661e-03f, -1.809338164e-03f, -1.806028711e-03f, -1.802716307e-03f, -1.799400958e-03f, -1.796082671e-03f, -1.792761450e-03f, -1.789437302e-03f,
+-1.786110232e-03f, -1.782780247e-03f, -1.779447353e-03f, -1.776111555e-03f, -1.772772860e-03f, -1.769431272e-03f, -1.766086799e-03f, -1.762739446e-03f, -1.759389219e-03f, -1.756036124e-03f,
+-1.752680166e-03f, -1.749321353e-03f, -1.745959690e-03f, -1.742595182e-03f, -1.739227836e-03f, -1.735857657e-03f, -1.732484653e-03f, -1.729108828e-03f, -1.725730188e-03f, -1.722348740e-03f,
+-1.718964490e-03f, -1.715577443e-03f, -1.712187606e-03f, -1.708794985e-03f, -1.705399585e-03f, -1.702001412e-03f, -1.698600474e-03f, -1.695196774e-03f, -1.691790321e-03f, -1.688381119e-03f,
+-1.684969175e-03f, -1.681554495e-03f, -1.678137085e-03f, -1.674716950e-03f, -1.671294097e-03f, -1.667868532e-03f, -1.664440262e-03f, -1.661009291e-03f, -1.657575626e-03f, -1.654139274e-03f,
+-1.650700240e-03f, -1.647258531e-03f, -1.643814151e-03f, -1.640367109e-03f, -1.636917409e-03f, -1.633465058e-03f, -1.630010061e-03f, -1.626552426e-03f, -1.623092158e-03f, -1.619629263e-03f,
+-1.616163747e-03f, -1.612695616e-03f, -1.609224878e-03f, -1.605751536e-03f, -1.602275599e-03f, -1.598797072e-03f, -1.595315961e-03f, -1.591832272e-03f, -1.588346011e-03f, -1.584857185e-03f,
+-1.581365800e-03f, -1.577871862e-03f, -1.574375377e-03f, -1.570876351e-03f, -1.567374790e-03f, -1.563870701e-03f, -1.560364090e-03f, -1.556854963e-03f, -1.553343326e-03f, -1.549829185e-03f,
+-1.546312547e-03f, -1.542793418e-03f, -1.539271804e-03f, -1.535747711e-03f, -1.532221145e-03f, -1.528692114e-03f, -1.525160622e-03f, -1.521626676e-03f, -1.518090282e-03f, -1.514551447e-03f,
+-1.511010177e-03f, -1.507466478e-03f, -1.503920356e-03f, -1.500371818e-03f, -1.496820869e-03f, -1.493267517e-03f, -1.489711767e-03f, -1.486153626e-03f, -1.482593099e-03f, -1.479030194e-03f,
+-1.475464916e-03f, -1.471897272e-03f, -1.468327268e-03f, -1.464754911e-03f, -1.461180205e-03f, -1.457603159e-03f, -1.454023778e-03f, -1.450442069e-03f, -1.446858037e-03f, -1.443271690e-03f,
+-1.439683033e-03f, -1.436092072e-03f, -1.432498815e-03f, -1.428903268e-03f, -1.425305436e-03f, -1.421705326e-03f, -1.418102944e-03f, -1.414498298e-03f, -1.410891392e-03f, -1.407282234e-03f,
+-1.403670830e-03f, -1.400057186e-03f, -1.396441309e-03f, -1.392823204e-03f, -1.389202879e-03f, -1.385580340e-03f, -1.381955592e-03f, -1.378328643e-03f, -1.374699499e-03f, -1.371068166e-03f,
+-1.367434650e-03f, -1.363798958e-03f, -1.360161097e-03f, -1.356521073e-03f, -1.352878891e-03f, -1.349234560e-03f, -1.345588084e-03f, -1.341939470e-03f, -1.338288726e-03f, -1.334635856e-03f,
+-1.330980869e-03f, -1.327323769e-03f, -1.323664564e-03f, -1.320003259e-03f, -1.316339863e-03f, -1.312674379e-03f, -1.309006817e-03f, -1.305337180e-03f, -1.301665477e-03f, -1.297991714e-03f,
+-1.294315897e-03f, -1.290638032e-03f, -1.286958126e-03f, -1.283276185e-03f, -1.279592217e-03f, -1.275906226e-03f, -1.272218221e-03f, -1.268528207e-03f, -1.264836191e-03f, -1.261142179e-03f,
+-1.257446178e-03f, -1.253748194e-03f, -1.250048234e-03f, -1.246346304e-03f, -1.242642411e-03f, -1.238936561e-03f, -1.235228761e-03f, -1.231519017e-03f, -1.227807336e-03f, -1.224093724e-03f,
+-1.220378188e-03f, -1.216660735e-03f, -1.212941370e-03f, -1.209220101e-03f, -1.205496933e-03f, -1.201771874e-03f, -1.198044931e-03f, -1.194316108e-03f, -1.190585414e-03f, -1.186852854e-03f,
+-1.183118435e-03f, -1.179382164e-03f, -1.175644048e-03f, -1.171904092e-03f, -1.168162304e-03f, -1.164418689e-03f, -1.160673255e-03f, -1.156926008e-03f, -1.153176955e-03f, -1.149426102e-03f,
+-1.145673455e-03f, -1.141919022e-03f, -1.138162809e-03f, -1.134404823e-03f, -1.130645069e-03f, -1.126883556e-03f, -1.123120288e-03f, -1.119355274e-03f, -1.115588519e-03f, -1.111820030e-03f,
+-1.108049814e-03f, -1.104277877e-03f, -1.100504225e-03f, -1.096728867e-03f, -1.092951807e-03f, -1.089173054e-03f, -1.085392612e-03f, -1.081610490e-03f, -1.077826693e-03f, -1.074041229e-03f,
+-1.070254103e-03f, -1.066465323e-03f, -1.062674895e-03f, -1.058882825e-03f, -1.055089121e-03f, -1.051293789e-03f, -1.047496836e-03f, -1.043698268e-03f, -1.039898092e-03f, -1.036096315e-03f,
+-1.032292943e-03f, -1.028487983e-03f, -1.024681441e-03f, -1.020873325e-03f, -1.017063641e-03f, -1.013252395e-03f, -1.009439594e-03f, -1.005625246e-03f, -1.001809355e-03f, -9.979919306e-04f,
+-9.941729777e-04f, -9.903525034e-04f, -9.865305144e-04f, -9.827070174e-04f, -9.788820191e-04f, -9.750555261e-04f, -9.712275451e-04f, -9.673980829e-04f, -9.635671461e-04f, -9.597347415e-04f,
+-9.559008756e-04f, -9.520655553e-04f, -9.482287872e-04f, -9.443905781e-04f, -9.405509346e-04f, -9.367098635e-04f, -9.328673714e-04f, -9.290234651e-04f, -9.251781513e-04f, -9.213314367e-04f,
+-9.174833280e-04f, -9.136338320e-04f, -9.097829554e-04f, -9.059307049e-04f, -9.020770872e-04f, -8.982221091e-04f, -8.943657773e-04f, -8.905080986e-04f, -8.866490796e-04f, -8.827887271e-04f,
+-8.789270478e-04f, -8.750640486e-04f, -8.711997361e-04f, -8.673341171e-04f, -8.634671983e-04f, -8.595989865e-04f, -8.557294884e-04f, -8.518587108e-04f, -8.479866605e-04f, -8.441133441e-04f,
+-8.402387685e-04f, -8.363629405e-04f, -8.324858667e-04f, -8.286075540e-04f, -8.247280091e-04f, -8.208472387e-04f, -8.169652498e-04f, -8.130820489e-04f, -8.091976430e-04f, -8.053120387e-04f,
+-8.014252429e-04f, -7.975372623e-04f, -7.936481038e-04f, -7.897577740e-04f, -7.858662798e-04f, -7.819736280e-04f, -7.780798253e-04f, -7.741848786e-04f, -7.702887946e-04f, -7.663915801e-04f,
+-7.624932420e-04f, -7.585937869e-04f, -7.546932218e-04f, -7.507915534e-04f, -7.468887884e-04f, -7.429849338e-04f, -7.390799963e-04f, -7.351739828e-04f, -7.312668999e-04f, -7.273587546e-04f,
+-7.234495536e-04f, -7.195393038e-04f, -7.156280119e-04f, -7.117156849e-04f, -7.078023294e-04f, -7.038879523e-04f, -6.999725604e-04f, -6.960561606e-04f, -6.921387597e-04f, -6.882203644e-04f,
+-6.843009817e-04f, -6.803806183e-04f, -6.764592810e-04f, -6.725369768e-04f, -6.686137123e-04f, -6.646894946e-04f, -6.607643303e-04f, -6.568382263e-04f, -6.529111894e-04f, -6.489832266e-04f,
+-6.450543445e-04f, -6.411245501e-04f, -6.371938502e-04f, -6.332622517e-04f, -6.293297613e-04f, -6.253963859e-04f, -6.214621324e-04f, -6.175270076e-04f, -6.135910184e-04f, -6.096541715e-04f,
+-6.057164740e-04f, -6.017779325e-04f, -5.978385539e-04f, -5.938983452e-04f, -5.899573131e-04f, -5.860154645e-04f, -5.820728062e-04f, -5.781293452e-04f, -5.741850883e-04f, -5.702400423e-04f,
+-5.662942141e-04f, -5.623476105e-04f, -5.584002384e-04f, -5.544521047e-04f, -5.505032163e-04f, -5.465535799e-04f, -5.426032026e-04f, -5.386520910e-04f, -5.347002521e-04f, -5.307476928e-04f,
+-5.267944200e-04f, -5.228404404e-04f, -5.188857610e-04f, -5.149303887e-04f, -5.109743302e-04f, -5.070175926e-04f, -5.030601826e-04f, -4.991021071e-04f, -4.951433731e-04f, -4.911839873e-04f,
+-4.872239567e-04f, -4.832632881e-04f, -4.793019885e-04f, -4.753400646e-04f, -4.713775234e-04f, -4.674143718e-04f, -4.634506166e-04f, -4.594862647e-04f, -4.555213231e-04f, -4.515557985e-04f,
+-4.475896979e-04f, -4.436230281e-04f, -4.396557961e-04f, -4.356880086e-04f, -4.317196727e-04f, -4.277507952e-04f, -4.237813830e-04f, -4.198114429e-04f, -4.158409819e-04f, -4.118700069e-04f,
+-4.078985247e-04f, -4.039265422e-04f, -3.999540663e-04f, -3.959811039e-04f, -3.920076620e-04f, -3.880337473e-04f, -3.840593668e-04f, -3.800845274e-04f, -3.761092360e-04f, -3.721334994e-04f,
+-3.681573246e-04f, -3.641807184e-04f, -3.602036878e-04f, -3.562262396e-04f, -3.522483808e-04f, -3.482701182e-04f, -3.442914587e-04f, -3.403124093e-04f, -3.363329767e-04f, -3.323531681e-04f,
+-3.283729901e-04f, -3.243924497e-04f, -3.204115539e-04f, -3.164303095e-04f, -3.124487234e-04f, -3.084668025e-04f, -3.044845537e-04f, -3.005019839e-04f, -2.965191001e-04f, -2.925359090e-04f,
+-2.885524177e-04f, -2.845686329e-04f, -2.805845617e-04f, -2.766002109e-04f, -2.726155874e-04f, -2.686306982e-04f, -2.646455500e-04f, -2.606601498e-04f, -2.566745046e-04f, -2.526886212e-04f,
+-2.487025065e-04f, -2.447161674e-04f, -2.407296109e-04f, -2.367428437e-04f, -2.327558729e-04f, -2.287687053e-04f, -2.247813478e-04f, -2.207938074e-04f, -2.168060909e-04f, -2.128182052e-04f,
+-2.088301572e-04f, -2.048419539e-04f, -2.008536021e-04f, -1.968651087e-04f, -1.928764807e-04f, -1.888877249e-04f, -1.848988482e-04f, -1.809098576e-04f, -1.769207599e-04f, -1.729315620e-04f,
+-1.689422709e-04f, -1.649528934e-04f, -1.609634364e-04f, -1.569739069e-04f, -1.529843116e-04f, -1.489946577e-04f, -1.450049518e-04f, -1.410152010e-04f, -1.370254120e-04f, -1.330355919e-04f,
+-1.290457476e-04f, -1.250558858e-04f, -1.210660135e-04f, -1.170761377e-04f, -1.130862652e-04f, -1.090964028e-04f, -1.051065576e-04f, -1.011167363e-04f, -9.712694591e-05f, -9.313719330e-05f,
+-8.914748536e-05f, -8.515782899e-05f, -8.116823107e-05f, -7.717869850e-05f, -7.318923817e-05f, -6.919985697e-05f, -6.521056179e-05f, -6.122135952e-05f, -5.723225706e-05f, -5.324326128e-05f,
+-4.925437908e-05f, -4.526561736e-05f, -4.127698298e-05f, -3.728848285e-05f, -3.330012385e-05f, -2.931191286e-05f, -2.532385677e-05f, -2.133596247e-05f, -1.734823683e-05f, -1.336068675e-05f,
+-9.373319098e-06f, -5.386140763e-06f, -1.399158625e-06f, 2.587620435e-06f, 6.574189537e-06f, 1.056054180e-05f, 1.454667035e-05f, 1.853256831e-05f, 2.251822880e-05f, 2.650364494e-05f,
+3.048880985e-05f, 3.447371668e-05f, 3.845835853e-05f, 4.244272854e-05f, 4.642681984e-05f, 5.041062554e-05f, 5.439413880e-05f, 5.837735272e-05f, 6.236026045e-05f, 6.634285512e-05f,
+7.032512985e-05f, 7.430707779e-05f, 7.828869207e-05f, 8.226996582e-05f, 8.625089218e-05f, 9.023146430e-05f, 9.421167530e-05f, 9.819151832e-05f, 1.021709865e-04f, 1.061500730e-04f,
+1.101287710e-04f, 1.141070735e-04f, 1.180849738e-04f, 1.220624650e-04f, 1.260395402e-04f, 1.300161926e-04f, 1.339924153e-04f, 1.379682015e-04f, 1.419435443e-04f, 1.459184369e-04f,
+1.498928725e-04f, 1.538668441e-04f, 1.578403450e-04f, 1.618133683e-04f, 1.657859071e-04f, 1.697579547e-04f, 1.737295042e-04f, 1.777005487e-04f, 1.816710814e-04f, 1.856410954e-04f,
+1.896105840e-04f, 1.935795403e-04f, 1.975479575e-04f, 2.015158287e-04f, 2.054831472e-04f, 2.094499060e-04f, 2.134160983e-04f, 2.173817174e-04f, 2.213467564e-04f, 2.253112085e-04f,
+2.292750668e-04f, 2.332383246e-04f, 2.372009750e-04f, 2.411630112e-04f, 2.451244263e-04f, 2.490852137e-04f, 2.530453664e-04f, 2.570048777e-04f, 2.609637407e-04f, 2.649219486e-04f,
+2.688794947e-04f, 2.728363720e-04f, 2.767925739e-04f, 2.807480935e-04f, 2.847029240e-04f, 2.886570586e-04f, 2.926104906e-04f, 2.965632130e-04f, 3.005152192e-04f, 3.044665022e-04f,
+3.084170555e-04f, 3.123668720e-04f, 3.163159451e-04f, 3.202642680e-04f, 3.242118339e-04f, 3.281586360e-04f, 3.321046675e-04f, 3.360499216e-04f, 3.399943916e-04f, 3.439380706e-04f,
+3.478809520e-04f, 3.518230289e-04f, 3.557642946e-04f, 3.597047423e-04f, 3.636443652e-04f, 3.675831565e-04f, 3.715211096e-04f, 3.754582175e-04f, 3.793944737e-04f, 3.833298712e-04f,
+3.872644035e-04f, 3.911980636e-04f, 3.951308448e-04f, 3.990627405e-04f, 4.029937438e-04f, 4.069238480e-04f, 4.108530463e-04f, 4.147813320e-04f, 4.187086984e-04f, 4.226351388e-04f,
+4.265606463e-04f, 4.304852142e-04f, 4.344088359e-04f, 4.383315046e-04f, 4.422532135e-04f, 4.461739559e-04f, 4.500937251e-04f, 4.540125144e-04f, 4.579303170e-04f, 4.618471263e-04f,
+4.657629355e-04f, 4.696777379e-04f, 4.735915267e-04f, 4.775042953e-04f, 4.814160370e-04f, 4.853267451e-04f, 4.892364127e-04f, 4.931450334e-04f, 4.970526002e-04f, 5.009591066e-04f,
+5.048645459e-04f, 5.087689113e-04f, 5.126721961e-04f, 5.165743938e-04f, 5.204754975e-04f, 5.243755006e-04f, 5.282743964e-04f, 5.321721782e-04f, 5.360688394e-04f, 5.399643732e-04f,
+5.438587731e-04f, 5.477520323e-04f, 5.516441441e-04f, 5.555351019e-04f, 5.594248990e-04f, 5.633135288e-04f, 5.672009846e-04f, 5.710872598e-04f, 5.749723476e-04f, 5.788562415e-04f,
+5.827389347e-04f, 5.866204207e-04f, 5.905006927e-04f, 5.943797442e-04f, 5.982575685e-04f, 6.021341590e-04f, 6.060095090e-04f, 6.098836119e-04f, 6.137564610e-04f, 6.176280498e-04f,
+6.214983716e-04f, 6.253674197e-04f, 6.292351876e-04f, 6.331016687e-04f, 6.369668563e-04f, 6.408307438e-04f, 6.446933246e-04f, 6.485545921e-04f, 6.524145397e-04f, 6.562731608e-04f,
+6.601304487e-04f, 6.639863970e-04f, 6.678409989e-04f, 6.716942479e-04f, 6.755461375e-04f, 6.793966609e-04f, 6.832458117e-04f, 6.870935833e-04f, 6.909399690e-04f, 6.947849623e-04f,
+6.986285567e-04f, 7.024707455e-04f, 7.063115222e-04f, 7.101508802e-04f, 7.139888130e-04f, 7.178253140e-04f, 7.216603766e-04f, 7.254939944e-04f, 7.293261606e-04f, 7.331568689e-04f,
+7.369861126e-04f, 7.408138852e-04f, 7.446401801e-04f, 7.484649909e-04f, 7.522883110e-04f, 7.561101338e-04f, 7.599304529e-04f, 7.637492617e-04f, 7.675665536e-04f, 7.713823223e-04f,
+7.751965611e-04f, 7.790092635e-04f, 7.828204230e-04f, 7.866300332e-04f, 7.904380875e-04f, 7.942445794e-04f, 7.980495024e-04f, 8.018528500e-04f, 8.056546158e-04f, 8.094547932e-04f,
+8.132533758e-04f, 8.170503570e-04f, 8.208457304e-04f, 8.246394896e-04f, 8.284316279e-04f, 8.322221391e-04f, 8.360110165e-04f, 8.397982538e-04f, 8.435838445e-04f, 8.473677821e-04f,
+8.511500601e-04f, 8.549306722e-04f, 8.587096118e-04f, 8.624868726e-04f, 8.662624480e-04f, 8.700363317e-04f, 8.738085172e-04f, 8.775789981e-04f, 8.813477679e-04f, 8.851148202e-04f,
+8.888801486e-04f, 8.926437467e-04f, 8.964056081e-04f, 9.001657263e-04f, 9.039240950e-04f, 9.076807077e-04f, 9.114355580e-04f, 9.151886396e-04f, 9.189399461e-04f, 9.226894709e-04f,
+9.264372079e-04f, 9.301831505e-04f, 9.339272924e-04f, 9.376696272e-04f, 9.414101486e-04f, 9.451488501e-04f, 9.488857255e-04f, 9.526207683e-04f, 9.563539721e-04f, 9.600853307e-04f,
+9.638148377e-04f, 9.675424867e-04f, 9.712682713e-04f, 9.749921853e-04f, 9.787142222e-04f, 9.824343759e-04f, 9.861526398e-04f, 9.898690077e-04f, 9.935834733e-04f, 9.972960302e-04f,
+1.001006672e-03f, 1.004715393e-03f, 1.008422186e-03f, 1.012127045e-03f, 1.015829964e-03f, 1.019530937e-03f, 1.023229956e-03f, 1.026927017e-03f, 1.030622112e-03f, 1.034315235e-03f,
+1.038006381e-03f, 1.041695542e-03f, 1.045382713e-03f, 1.049067887e-03f, 1.052751058e-03f, 1.056432220e-03f, 1.060111366e-03f, 1.063788490e-03f, 1.067463587e-03f, 1.071136648e-03f,
+1.074807670e-03f, 1.078476644e-03f, 1.082143566e-03f, 1.085808428e-03f, 1.089471225e-03f, 1.093131950e-03f, 1.096790597e-03f, 1.100447160e-03f, 1.104101633e-03f, 1.107754009e-03f,
+1.111404283e-03f, 1.115052447e-03f, 1.118698496e-03f, 1.122342424e-03f, 1.125984224e-03f, 1.129623891e-03f, 1.133261417e-03f, 1.136896798e-03f, 1.140530026e-03f, 1.144161096e-03f,
+1.147790001e-03f, 1.151416735e-03f, 1.155041293e-03f, 1.158663668e-03f, 1.162283853e-03f, 1.165901843e-03f, 1.169517631e-03f, 1.173131212e-03f, 1.176742579e-03f, 1.180351726e-03f,
+1.183958647e-03f, 1.187563336e-03f, 1.191165787e-03f, 1.194765993e-03f, 1.198363949e-03f, 1.201959648e-03f, 1.205553085e-03f, 1.209144253e-03f, 1.212733146e-03f, 1.216319758e-03f,
+1.219904083e-03f, 1.223486115e-03f, 1.227065848e-03f, 1.230643276e-03f, 1.234218392e-03f, 1.237791191e-03f, 1.241361666e-03f, 1.244929813e-03f, 1.248495623e-03f, 1.252059092e-03f,
+1.255620214e-03f, 1.259178981e-03f, 1.262735390e-03f, 1.266289432e-03f, 1.269841103e-03f, 1.273390396e-03f, 1.276937305e-03f, 1.280481825e-03f, 1.284023949e-03f, 1.287563671e-03f,
+1.291100985e-03f, 1.294635886e-03f, 1.298168367e-03f, 1.301698422e-03f, 1.305226046e-03f, 1.308751232e-03f, 1.312273974e-03f, 1.315794267e-03f, 1.319312104e-03f, 1.322827480e-03f,
+1.326340389e-03f, 1.329850824e-03f, 1.333358780e-03f, 1.336864250e-03f, 1.340367229e-03f, 1.343867712e-03f, 1.347365691e-03f, 1.350861161e-03f, 1.354354117e-03f, 1.357844552e-03f,
+1.361332460e-03f, 1.364817835e-03f, 1.368300672e-03f, 1.371780965e-03f, 1.375258708e-03f, 1.378733894e-03f, 1.382206519e-03f, 1.385676575e-03f, 1.389144058e-03f, 1.392608962e-03f,
+1.396071280e-03f, 1.399531006e-03f, 1.402988136e-03f, 1.406442663e-03f, 1.409894580e-03f, 1.413343884e-03f, 1.416790566e-03f, 1.420234623e-03f, 1.423676047e-03f, 1.427114834e-03f,
+1.430550977e-03f, 1.433984470e-03f, 1.437415308e-03f, 1.440843485e-03f, 1.444268995e-03f, 1.447691832e-03f, 1.451111991e-03f, 1.454529466e-03f, 1.457944250e-03f, 1.461356339e-03f,
+1.464765727e-03f, 1.468172407e-03f, 1.471576374e-03f, 1.474977623e-03f, 1.478376146e-03f, 1.481771940e-03f, 1.485164998e-03f, 1.488555314e-03f, 1.491942883e-03f, 1.495327698e-03f,
+1.498709755e-03f, 1.502089047e-03f, 1.505465569e-03f, 1.508839315e-03f, 1.512210280e-03f, 1.515578457e-03f, 1.518943841e-03f, 1.522306427e-03f, 1.525666208e-03f, 1.529023180e-03f,
+1.532377335e-03f, 1.535728670e-03f, 1.539077177e-03f, 1.542422852e-03f, 1.545765689e-03f, 1.549105682e-03f, 1.552442826e-03f, 1.555777114e-03f, 1.559108542e-03f, 1.562437104e-03f,
+1.565762794e-03f, 1.569085606e-03f, 1.572405535e-03f, 1.575722575e-03f, 1.579036721e-03f, 1.582347968e-03f, 1.585656308e-03f, 1.588961738e-03f, 1.592264252e-03f, 1.595563843e-03f,
+1.598860506e-03f, 1.602154237e-03f, 1.605445028e-03f, 1.608732876e-03f, 1.612017773e-03f, 1.615299715e-03f, 1.618578697e-03f, 1.621854712e-03f, 1.625127755e-03f, 1.628397821e-03f,
+1.631664904e-03f, 1.634928998e-03f, 1.638190099e-03f, 1.641448200e-03f, 1.644703296e-03f, 1.647955383e-03f, 1.651204453e-03f, 1.654450502e-03f, 1.657693525e-03f, 1.660933515e-03f,
+1.664170468e-03f, 1.667404378e-03f, 1.670635239e-03f, 1.673863047e-03f, 1.677087795e-03f, 1.680309479e-03f, 1.683528092e-03f, 1.686743630e-03f, 1.689956088e-03f, 1.693165458e-03f,
+1.696371738e-03f, 1.699574920e-03f, 1.702774999e-03f, 1.705971971e-03f, 1.709165830e-03f, 1.712356570e-03f, 1.715544186e-03f, 1.718728673e-03f, 1.721910025e-03f, 1.725088238e-03f,
+1.728263305e-03f, 1.731435222e-03f, 1.734603983e-03f, 1.737769582e-03f, 1.740932015e-03f, 1.744091276e-03f, 1.747247361e-03f, 1.750400262e-03f, 1.753549976e-03f, 1.756696497e-03f,
+1.759839820e-03f, 1.762979939e-03f, 1.766116850e-03f, 1.769250546e-03f, 1.772381024e-03f, 1.775508276e-03f, 1.778632299e-03f, 1.781753087e-03f, 1.784870635e-03f, 1.787984937e-03f,
+1.791095989e-03f, 1.794203785e-03f, 1.797308320e-03f, 1.800409588e-03f, 1.803507585e-03f, 1.806602305e-03f, 1.809693744e-03f, 1.812781895e-03f, 1.815866755e-03f, 1.818948317e-03f,
+1.822026576e-03f, 1.825101528e-03f, 1.828173168e-03f, 1.831241489e-03f, 1.834306487e-03f, 1.837368157e-03f, 1.840426494e-03f, 1.843481492e-03f, 1.846533147e-03f, 1.849581453e-03f,
+1.852626406e-03f, 1.855668000e-03f, 1.858706230e-03f, 1.861741091e-03f, 1.864772578e-03f, 1.867800685e-03f, 1.870825409e-03f, 1.873846743e-03f, 1.876864684e-03f, 1.879879225e-03f,
+1.882890361e-03f, 1.885898088e-03f, 1.888902401e-03f, 1.891903295e-03f, 1.894900764e-03f, 1.897894803e-03f, 1.900885409e-03f, 1.903872575e-03f, 1.906856296e-03f, 1.909836568e-03f,
+1.912813386e-03f, 1.915786744e-03f, 1.918756639e-03f, 1.921723064e-03f, 1.924686015e-03f, 1.927645486e-03f, 1.930601474e-03f, 1.933553973e-03f, 1.936502978e-03f, 1.939448484e-03f,
+1.942390486e-03f, 1.945328980e-03f, 1.948263960e-03f, 1.951195422e-03f, 1.954123360e-03f, 1.957047771e-03f, 1.959968648e-03f, 1.962885987e-03f, 1.965799784e-03f, 1.968710033e-03f,
+1.971616729e-03f, 1.974519869e-03f, 1.977419446e-03f, 1.980315456e-03f, 1.983207894e-03f, 1.986096756e-03f, 1.988982036e-03f, 1.991863730e-03f, 1.994741833e-03f, 1.997616340e-03f,
+2.000487247e-03f, 2.003354548e-03f, 2.006218240e-03f, 2.009078316e-03f, 2.011934773e-03f, 2.014787605e-03f, 2.017636808e-03f, 2.020482377e-03f, 2.023324308e-03f, 2.026162595e-03f,
+2.028997234e-03f, 2.031828221e-03f, 2.034655550e-03f, 2.037479217e-03f, 2.040299217e-03f, 2.043115545e-03f, 2.045928198e-03f, 2.048737169e-03f, 2.051542455e-03f, 2.054344050e-03f,
+2.057141951e-03f, 2.059936152e-03f, 2.062726649e-03f, 2.065513438e-03f, 2.068296513e-03f, 2.071075870e-03f, 2.073851504e-03f, 2.076623411e-03f, 2.079391586e-03f, 2.082156025e-03f,
+2.084916723e-03f, 2.087673675e-03f, 2.090426877e-03f, 2.093176324e-03f, 2.095922012e-03f, 2.098663937e-03f, 2.101402092e-03f, 2.104136475e-03f, 2.106867081e-03f, 2.109593904e-03f,
+2.112316941e-03f, 2.115036187e-03f, 2.117751638e-03f, 2.120463288e-03f, 2.123171134e-03f, 2.125875171e-03f, 2.128575395e-03f, 2.131271801e-03f, 2.133964384e-03f, 2.136653140e-03f,
+2.139338065e-03f, 2.142019155e-03f, 2.144696404e-03f, 2.147369809e-03f, 2.150039364e-03f, 2.152705067e-03f, 2.155366911e-03f, 2.158024893e-03f, 2.160679008e-03f, 2.163329253e-03f,
+2.165975622e-03f, 2.168618111e-03f, 2.171256716e-03f, 2.173891433e-03f, 2.176522257e-03f, 2.179149183e-03f, 2.181772208e-03f, 2.184391328e-03f, 2.187006536e-03f, 2.189617831e-03f,
+2.192225206e-03f, 2.194828659e-03f, 2.197428184e-03f, 2.200023777e-03f, 2.202615435e-03f, 2.205203152e-03f, 2.207786924e-03f, 2.210366748e-03f, 2.212942618e-03f, 2.215514532e-03f,
+2.218082483e-03f, 2.220646469e-03f, 2.223206485e-03f, 2.225762527e-03f, 2.228314590e-03f, 2.230862671e-03f, 2.233406765e-03f, 2.235946868e-03f, 2.238482975e-03f, 2.241015083e-03f,
+2.243543188e-03f, 2.246067285e-03f, 2.248587370e-03f, 2.251103438e-03f, 2.253615487e-03f, 2.256123512e-03f, 2.258627508e-03f, 2.261127471e-03f, 2.263623398e-03f, 2.266115284e-03f,
+2.268603125e-03f, 2.271086917e-03f, 2.273566656e-03f, 2.276042338e-03f, 2.278513959e-03f, 2.280981514e-03f, 2.283445000e-03f, 2.285904413e-03f, 2.288359749e-03f, 2.290811003e-03f,
+2.293258171e-03f, 2.295701250e-03f, 2.298140236e-03f, 2.300575124e-03f, 2.303005911e-03f, 2.305432592e-03f, 2.307855164e-03f, 2.310273622e-03f, 2.312687963e-03f, 2.315098182e-03f,
+2.317504276e-03f, 2.319906241e-03f, 2.322304073e-03f, 2.324697768e-03f, 2.327087321e-03f, 2.329472730e-03f, 2.331853990e-03f, 2.334231097e-03f, 2.336604047e-03f, 2.338972837e-03f,
+2.341337462e-03f, 2.343697919e-03f, 2.346054204e-03f, 2.348406312e-03f, 2.350754241e-03f, 2.353097986e-03f, 2.355437544e-03f, 2.357772910e-03f, 2.360104081e-03f, 2.362431053e-03f,
+2.364753823e-03f, 2.367072385e-03f, 2.369386737e-03f, 2.371696875e-03f, 2.374002795e-03f, 2.376304494e-03f, 2.378601967e-03f, 2.380895210e-03f, 2.383184221e-03f, 2.385468995e-03f,
+2.387749528e-03f, 2.390025817e-03f, 2.392297859e-03f, 2.394565648e-03f, 2.396829183e-03f, 2.399088458e-03f, 2.401343471e-03f, 2.403594217e-03f, 2.405840694e-03f, 2.408082896e-03f,
+2.410320822e-03f, 2.412554466e-03f, 2.414783826e-03f, 2.417008897e-03f, 2.419229677e-03f, 2.421446161e-03f, 2.423658346e-03f, 2.425866228e-03f, 2.428069804e-03f, 2.430269071e-03f,
+2.432464023e-03f, 2.434654659e-03f, 2.436840974e-03f, 2.439022965e-03f, 2.441200628e-03f, 2.443373960e-03f, 2.445542957e-03f, 2.447707616e-03f, 2.449867933e-03f, 2.452023904e-03f,
+2.454175527e-03f, 2.456322798e-03f, 2.458465712e-03f, 2.460604268e-03f, 2.462738460e-03f, 2.464868287e-03f, 2.466993744e-03f, 2.469114827e-03f, 2.471231534e-03f, 2.473343862e-03f,
+2.475451805e-03f, 2.477555362e-03f, 2.479654529e-03f, 2.481749301e-03f, 2.483839677e-03f, 2.485925653e-03f, 2.488007224e-03f, 2.490084389e-03f, 2.492157143e-03f, 2.494225483e-03f,
+2.496289406e-03f, 2.498348908e-03f, 2.500403986e-03f, 2.502454637e-03f, 2.504500858e-03f, 2.506542645e-03f, 2.508579994e-03f, 2.510612903e-03f, 2.512641368e-03f, 2.514665387e-03f,
+2.516684955e-03f, 2.518700069e-03f, 2.520710727e-03f, 2.522716925e-03f, 2.524718659e-03f, 2.526715927e-03f, 2.528708725e-03f, 2.530697051e-03f, 2.532680900e-03f, 2.534660270e-03f,
+2.536635157e-03f, 2.538605558e-03f, 2.540571471e-03f, 2.542532892e-03f, 2.544489817e-03f, 2.546442244e-03f, 2.548390170e-03f, 2.550333591e-03f, 2.552272504e-03f, 2.554206906e-03f,
+2.556136795e-03f, 2.558062166e-03f, 2.559983017e-03f, 2.561899345e-03f, 2.563811146e-03f, 2.565718418e-03f, 2.567621158e-03f, 2.569519362e-03f, 2.571413027e-03f, 2.573302151e-03f,
+2.575186730e-03f, 2.577066762e-03f, 2.578942242e-03f, 2.580813170e-03f, 2.582679540e-03f, 2.584541351e-03f, 2.586398599e-03f, 2.588251281e-03f, 2.590099395e-03f, 2.591942937e-03f,
+2.593781905e-03f, 2.595616295e-03f, 2.597446105e-03f, 2.599271332e-03f, 2.601091972e-03f, 2.602908024e-03f, 2.604719483e-03f, 2.606526347e-03f, 2.608328614e-03f, 2.610126279e-03f,
+2.611919342e-03f, 2.613707797e-03f, 2.615491644e-03f, 2.617270878e-03f, 2.619045498e-03f, 2.620815499e-03f, 2.622580880e-03f, 2.624341638e-03f, 2.626097769e-03f, 2.627849271e-03f,
+2.629596142e-03f, 2.631338378e-03f, 2.633075976e-03f, 2.634808935e-03f, 2.636537250e-03f, 2.638260920e-03f, 2.639979942e-03f, 2.641694312e-03f, 2.643404029e-03f, 2.645109089e-03f,
+2.646809490e-03f, 2.648505229e-03f, 2.650196303e-03f, 2.651882710e-03f, 2.653564447e-03f, 2.655241511e-03f, 2.656913900e-03f, 2.658581611e-03f, 2.660244642e-03f, 2.661902989e-03f,
+2.663556650e-03f, 2.665205623e-03f, 2.666849905e-03f, 2.668489493e-03f, 2.670124385e-03f, 2.671754578e-03f, 2.673380070e-03f, 2.675000857e-03f, 2.676616939e-03f, 2.678228311e-03f,
+2.679834971e-03f, 2.681436917e-03f, 2.683034147e-03f, 2.684626657e-03f, 2.686214445e-03f, 2.687797510e-03f, 2.689375847e-03f, 2.690949456e-03f, 2.692518332e-03f, 2.694082475e-03f,
+2.695641881e-03f, 2.697196548e-03f, 2.698746473e-03f, 2.700291655e-03f, 2.701832090e-03f, 2.703367776e-03f, 2.704898711e-03f, 2.706424893e-03f, 2.707946319e-03f, 2.709462986e-03f,
+2.710974892e-03f, 2.712482036e-03f, 2.713984414e-03f, 2.715482024e-03f, 2.716974864e-03f, 2.718462932e-03f, 2.719946225e-03f, 2.721424740e-03f, 2.722898476e-03f, 2.724367431e-03f,
+2.725831601e-03f, 2.727290985e-03f, 2.728745581e-03f, 2.730195386e-03f, 2.731640397e-03f, 2.733080614e-03f, 2.734516032e-03f, 2.735946651e-03f, 2.737372468e-03f, 2.738793480e-03f,
+2.740209686e-03f, 2.741621084e-03f, 2.743027670e-03f, 2.744429444e-03f, 2.745826402e-03f, 2.747218543e-03f, 2.748605864e-03f, 2.749988364e-03f, 2.751366039e-03f, 2.752738889e-03f,
+2.754106911e-03f, 2.755470102e-03f, 2.756828461e-03f, 2.758181986e-03f, 2.759530674e-03f, 2.760874524e-03f, 2.762213533e-03f, 2.763547700e-03f, 2.764877021e-03f, 2.766201496e-03f,
+2.767521122e-03f, 2.768835897e-03f, 2.770145819e-03f, 2.771450886e-03f, 2.772751096e-03f, 2.774046447e-03f, 2.775336938e-03f, 2.776622565e-03f, 2.777903328e-03f, 2.779179224e-03f,
+2.780450251e-03f, 2.781716407e-03f, 2.782977691e-03f, 2.784234100e-03f, 2.785485632e-03f, 2.786732286e-03f, 2.787974060e-03f, 2.789210952e-03f, 2.790442959e-03f, 2.791670081e-03f,
+2.792892315e-03f, 2.794109659e-03f, 2.795322111e-03f, 2.796529670e-03f, 2.797732334e-03f, 2.798930101e-03f, 2.800122969e-03f, 2.801310936e-03f, 2.802494001e-03f, 2.803672161e-03f,
+2.804845415e-03f, 2.806013762e-03f, 2.807177199e-03f, 2.808335725e-03f, 2.809489337e-03f, 2.810638035e-03f, 2.811781816e-03f, 2.812920679e-03f, 2.814054621e-03f, 2.815183643e-03f,
+2.816307740e-03f, 2.817426913e-03f, 2.818541159e-03f, 2.819650476e-03f, 2.820754863e-03f, 2.821854319e-03f, 2.822948841e-03f, 2.824038428e-03f, 2.825123078e-03f, 2.826202790e-03f,
+2.827277562e-03f, 2.828347393e-03f, 2.829412280e-03f, 2.830472223e-03f, 2.831527220e-03f, 2.832577269e-03f, 2.833622368e-03f, 2.834662516e-03f, 2.835697712e-03f, 2.836727954e-03f,
+2.837753241e-03f, 2.838773570e-03f, 2.839788941e-03f, 2.840799352e-03f, 2.841804801e-03f, 2.842805287e-03f, 2.843800808e-03f, 2.844791364e-03f, 2.845776952e-03f, 2.846757572e-03f,
+2.847733221e-03f, 2.848703898e-03f, 2.849669602e-03f, 2.850630332e-03f, 2.851586085e-03f, 2.852536862e-03f, 2.853482659e-03f, 2.854423477e-03f, 2.855359312e-03f, 2.856290165e-03f,
+2.857216034e-03f, 2.858136918e-03f, 2.859052814e-03f, 2.859963722e-03f, 2.860869641e-03f, 2.861770568e-03f, 2.862666504e-03f, 2.863557446e-03f, 2.864443394e-03f, 2.865324345e-03f,
+2.866200300e-03f, 2.867071255e-03f, 2.867937212e-03f, 2.868798167e-03f, 2.869654119e-03f, 2.870505069e-03f, 2.871351014e-03f, 2.872191953e-03f, 2.873027884e-03f, 2.873858808e-03f,
+2.874684722e-03f, 2.875505626e-03f, 2.876321518e-03f, 2.877132397e-03f, 2.877938262e-03f, 2.878739112e-03f, 2.879534945e-03f, 2.880325762e-03f, 2.881111559e-03f, 2.881892337e-03f,
+2.882668095e-03f, 2.883438830e-03f, 2.884204543e-03f, 2.884965232e-03f, 2.885720895e-03f, 2.886471533e-03f, 2.887217144e-03f, 2.887957727e-03f, 2.888693280e-03f, 2.889423804e-03f,
+2.890149296e-03f, 2.890869756e-03f, 2.891585183e-03f, 2.892295576e-03f, 2.893000934e-03f, 2.893701257e-03f, 2.894396542e-03f, 2.895086789e-03f, 2.895771997e-03f, 2.896452166e-03f,
+2.897127294e-03f, 2.897797380e-03f, 2.898462424e-03f, 2.899122425e-03f, 2.899777381e-03f, 2.900427292e-03f, 2.901072157e-03f, 2.901711976e-03f, 2.902346747e-03f, 2.902976469e-03f,
+2.903601142e-03f, 2.904220765e-03f, 2.904835337e-03f, 2.905444857e-03f, 2.906049324e-03f, 2.906648738e-03f, 2.907243099e-03f, 2.907832404e-03f, 2.908416653e-03f, 2.908995847e-03f,
+2.909569983e-03f, 2.910139061e-03f, 2.910703081e-03f, 2.911262041e-03f, 2.911815941e-03f, 2.912364781e-03f, 2.912908560e-03f, 2.913447276e-03f, 2.913980929e-03f, 2.914509520e-03f,
+2.915033046e-03f, 2.915551507e-03f, 2.916064904e-03f, 2.916573234e-03f, 2.917076498e-03f, 2.917574694e-03f, 2.918067823e-03f, 2.918555883e-03f, 2.919038875e-03f, 2.919516797e-03f,
+2.919989649e-03f, 2.920457430e-03f, 2.920920140e-03f, 2.921377779e-03f, 2.921830345e-03f, 2.922277839e-03f, 2.922720259e-03f, 2.923157605e-03f, 2.923589878e-03f, 2.924017075e-03f,
+2.924439197e-03f, 2.924856244e-03f, 2.925268214e-03f, 2.925675108e-03f, 2.926076925e-03f, 2.926473664e-03f, 2.926865326e-03f, 2.927251909e-03f, 2.927633413e-03f, 2.928009839e-03f,
+2.928381185e-03f, 2.928747450e-03f, 2.929108636e-03f, 2.929464741e-03f, 2.929815765e-03f, 2.930161708e-03f, 2.930502570e-03f, 2.930838349e-03f, 2.931169046e-03f, 2.931494660e-03f,
+2.931815192e-03f, 2.932130640e-03f, 2.932441005e-03f, 2.932746286e-03f, 2.933046483e-03f, 2.933341596e-03f, 2.933631624e-03f, 2.933916568e-03f, 2.934196427e-03f, 2.934471200e-03f,
+2.934740888e-03f, 2.935005491e-03f, 2.935265007e-03f, 2.935519438e-03f, 2.935768782e-03f, 2.936013041e-03f, 2.936252212e-03f, 2.936486297e-03f, 2.936715296e-03f, 2.936939207e-03f,
+2.937158031e-03f, 2.937371769e-03f, 2.937580418e-03f, 2.937783981e-03f, 2.937982456e-03f, 2.938175844e-03f, 2.938364144e-03f, 2.938547356e-03f, 2.938725481e-03f, 2.938898517e-03f,
+2.939066467e-03f, 2.939229328e-03f, 2.939387101e-03f, 2.939539787e-03f, 2.939687384e-03f, 2.939829894e-03f, 2.939967316e-03f, 2.940099651e-03f, 2.940226897e-03f, 2.940349056e-03f,
+2.940466127e-03f, 2.940578111e-03f, 2.940685007e-03f, 2.940786815e-03f, 2.940883536e-03f, 2.940975170e-03f, 2.941061717e-03f, 2.941143176e-03f, 2.941219549e-03f, 2.941290835e-03f,
+2.941357034e-03f, 2.941418147e-03f, 2.941474173e-03f, 2.941525113e-03f, 2.941570968e-03f, 2.941611736e-03f, 2.941647419e-03f, 2.941678016e-03f, 2.941703528e-03f, 2.941723955e-03f,
+2.941739297e-03f, 2.941749555e-03f, 2.941754728e-03f, 2.941754818e-03f, 2.941749823e-03f, 2.941739745e-03f, 2.941724584e-03f, 2.941704340e-03f, 2.941679013e-03f, 2.941648604e-03f,
+2.941613113e-03f, 2.941572540e-03f, 2.941526886e-03f, 2.941476151e-03f, 2.941420335e-03f, 2.941359439e-03f, 2.941293462e-03f, 2.941222407e-03f, 2.941146272e-03f, 2.941065058e-03f,
+2.940978766e-03f, 2.940887396e-03f, 2.940790949e-03f, 2.940689424e-03f, 2.940582823e-03f, 2.940471145e-03f, 2.940354392e-03f, 2.940232563e-03f, 2.940105659e-03f, 2.939973681e-03f,
+2.939836630e-03f, 2.939694504e-03f, 2.939547306e-03f, 2.939395036e-03f, 2.939237694e-03f, 2.939075280e-03f, 2.938907796e-03f, 2.938735242e-03f, 2.938557618e-03f, 2.938374925e-03f,
+2.938187163e-03f, 2.937994334e-03f, 2.937796437e-03f, 2.937593473e-03f, 2.937385444e-03f, 2.937172349e-03f, 2.936954189e-03f, 2.936730965e-03f, 2.936502677e-03f, 2.936269327e-03f,
+2.936030914e-03f, 2.935787440e-03f, 2.935538905e-03f, 2.935285309e-03f, 2.935026655e-03f, 2.934762941e-03f, 2.934494169e-03f, 2.934220340e-03f, 2.933941455e-03f, 2.933657514e-03f,
+2.933368517e-03f, 2.933074466e-03f, 2.932775362e-03f, 2.932471205e-03f, 2.932161996e-03f, 2.931847736e-03f, 2.931528425e-03f, 2.931204065e-03f, 2.930874655e-03f, 2.930540198e-03f,
+2.930200694e-03f, 2.929856144e-03f, 2.929506548e-03f, 2.929151908e-03f, 2.928792224e-03f, 2.928427498e-03f, 2.928057729e-03f, 2.927682920e-03f, 2.927303070e-03f, 2.926918181e-03f,
+2.926528255e-03f, 2.926133290e-03f, 2.925733290e-03f, 2.925328254e-03f, 2.924918184e-03f, 2.924503080e-03f, 2.924082943e-03f, 2.923657776e-03f, 2.923227577e-03f, 2.922792350e-03f,
+2.922352093e-03f, 2.921906810e-03f, 2.921456499e-03f, 2.921001164e-03f, 2.920540804e-03f, 2.920075421e-03f, 2.919605015e-03f, 2.919129589e-03f, 2.918649142e-03f, 2.918163676e-03f,
+2.917673193e-03f, 2.917177692e-03f, 2.916677176e-03f, 2.916171646e-03f, 2.915661102e-03f, 2.915145546e-03f, 2.914624978e-03f, 2.914099401e-03f, 2.913568815e-03f, 2.913033222e-03f,
+2.912492621e-03f, 2.911947016e-03f, 2.911396407e-03f, 2.910840795e-03f, 2.910280181e-03f, 2.909714567e-03f, 2.909143954e-03f, 2.908568342e-03f, 2.907987735e-03f, 2.907402131e-03f,
+2.906811534e-03f, 2.906215944e-03f, 2.905615363e-03f, 2.905009791e-03f, 2.904399230e-03f, 2.903783681e-03f, 2.903163147e-03f, 2.902537627e-03f, 2.901907124e-03f, 2.901271638e-03f,
+2.900631172e-03f, 2.899985725e-03f, 2.899335301e-03f, 2.898679900e-03f, 2.898019524e-03f, 2.897354173e-03f, 2.896683850e-03f, 2.896008556e-03f, 2.895328292e-03f, 2.894643059e-03f,
+2.893952860e-03f, 2.893257695e-03f, 2.892557566e-03f, 2.891852475e-03f, 2.891142423e-03f, 2.890427411e-03f, 2.889707441e-03f, 2.888982514e-03f, 2.888252633e-03f, 2.887517797e-03f,
+2.886778010e-03f, 2.886033273e-03f, 2.885283586e-03f, 2.884528952e-03f, 2.883769372e-03f, 2.883004848e-03f, 2.882235382e-03f, 2.881460974e-03f, 2.880681627e-03f, 2.879897342e-03f,
+2.879108120e-03f, 2.878313964e-03f, 2.877514875e-03f, 2.876710854e-03f, 2.875901904e-03f, 2.875088025e-03f, 2.874269221e-03f, 2.873445491e-03f, 2.872616838e-03f, 2.871783264e-03f,
+2.870944770e-03f, 2.870101358e-03f, 2.869253030e-03f, 2.868399788e-03f, 2.867541632e-03f, 2.866678565e-03f, 2.865810589e-03f, 2.864937706e-03f, 2.864059916e-03f, 2.863177223e-03f,
+2.862289627e-03f, 2.861397131e-03f, 2.860499736e-03f, 2.859597444e-03f, 2.858690257e-03f, 2.857778176e-03f, 2.856861205e-03f, 2.855939343e-03f, 2.855012594e-03f, 2.854080959e-03f,
+2.853144440e-03f, 2.852203039e-03f, 2.851256757e-03f, 2.850305598e-03f, 2.849349561e-03f, 2.848388650e-03f, 2.847422866e-03f, 2.846452212e-03f, 2.845476689e-03f, 2.844496299e-03f,
+2.843511044e-03f, 2.842520925e-03f, 2.841525946e-03f, 2.840526108e-03f, 2.839521413e-03f, 2.838511862e-03f, 2.837497459e-03f, 2.836478204e-03f, 2.835454101e-03f, 2.834425150e-03f,
+2.833391354e-03f, 2.832352716e-03f, 2.831309236e-03f, 2.830260917e-03f, 2.829207762e-03f, 2.828149772e-03f, 2.827086949e-03f, 2.826019296e-03f, 2.824946814e-03f, 2.823869506e-03f,
+2.822787373e-03f, 2.821700418e-03f, 2.820608643e-03f, 2.819512051e-03f, 2.818410642e-03f, 2.817304420e-03f, 2.816193387e-03f, 2.815077544e-03f, 2.813956894e-03f, 2.812831440e-03f,
+2.811701182e-03f, 2.810566124e-03f, 2.809426268e-03f, 2.808281616e-03f, 2.807132169e-03f, 2.805977932e-03f, 2.804818905e-03f, 2.803655090e-03f, 2.802486491e-03f, 2.801313109e-03f,
+2.800134947e-03f, 2.798952007e-03f, 2.797764291e-03f, 2.796571802e-03f, 2.795374541e-03f, 2.794172512e-03f, 2.792965716e-03f, 2.791754156e-03f, 2.790537835e-03f, 2.789316753e-03f,
+2.788090915e-03f, 2.786860322e-03f, 2.785624976e-03f, 2.784384881e-03f, 2.783140038e-03f, 2.781890449e-03f, 2.780636118e-03f, 2.779377047e-03f, 2.778113237e-03f, 2.776844692e-03f,
+2.775571414e-03f, 2.774293405e-03f, 2.773010668e-03f, 2.771723205e-03f, 2.770431019e-03f, 2.769134112e-03f, 2.767832487e-03f, 2.766526146e-03f, 2.765215092e-03f, 2.763899327e-03f,
+2.762578853e-03f, 2.761253674e-03f, 2.759923792e-03f, 2.758589209e-03f, 2.757249928e-03f, 2.755905951e-03f, 2.754557281e-03f, 2.753203921e-03f, 2.751845873e-03f, 2.750483139e-03f,
+2.749115723e-03f, 2.747743627e-03f, 2.746366854e-03f, 2.744985405e-03f, 2.743599285e-03f, 2.742208495e-03f, 2.740813038e-03f, 2.739412916e-03f, 2.738008133e-03f, 2.736598692e-03f,
+2.735184593e-03f, 2.733765842e-03f, 2.732342439e-03f, 2.730914389e-03f, 2.729481692e-03f, 2.728044353e-03f, 2.726602374e-03f, 2.725155758e-03f, 2.723704507e-03f, 2.722248625e-03f,
+2.720788113e-03f, 2.719322975e-03f, 2.717853214e-03f, 2.716378832e-03f, 2.714899832e-03f, 2.713416216e-03f, 2.711927989e-03f, 2.710435152e-03f, 2.708937708e-03f, 2.707435660e-03f,
+2.705929011e-03f, 2.704417764e-03f, 2.702901922e-03f, 2.701381487e-03f, 2.699856462e-03f, 2.698326851e-03f, 2.696792656e-03f, 2.695253880e-03f, 2.693710526e-03f, 2.692162596e-03f,
+2.690610094e-03f, 2.689053023e-03f, 2.687491386e-03f, 2.685925185e-03f, 2.684354423e-03f, 2.682779104e-03f, 2.681199230e-03f, 2.679614805e-03f, 2.678025830e-03f, 2.676432310e-03f,
+2.674834248e-03f, 2.673231645e-03f, 2.671624506e-03f, 2.670012833e-03f, 2.668396630e-03f, 2.666775898e-03f, 2.665150643e-03f, 2.663520865e-03f, 2.661886569e-03f, 2.660247758e-03f,
+2.658604434e-03f, 2.656956600e-03f, 2.655304261e-03f, 2.653647418e-03f, 2.651986075e-03f, 2.650320236e-03f, 2.648649902e-03f, 2.646975078e-03f, 2.645295766e-03f, 2.643611969e-03f,
+2.641923692e-03f, 2.640230936e-03f, 2.638533705e-03f, 2.636832002e-03f, 2.635125830e-03f, 2.633415193e-03f, 2.631700094e-03f, 2.629980536e-03f, 2.628256521e-03f, 2.626528054e-03f,
+2.624795137e-03f, 2.623057775e-03f, 2.621315969e-03f, 2.619569723e-03f, 2.617819041e-03f, 2.616063925e-03f, 2.614304379e-03f, 2.612540407e-03f, 2.610772011e-03f, 2.608999195e-03f,
+2.607221962e-03f, 2.605440316e-03f, 2.603654259e-03f, 2.601863795e-03f, 2.600068928e-03f, 2.598269660e-03f, 2.596465995e-03f, 2.594657937e-03f, 2.592845488e-03f, 2.591028653e-03f,
+2.589207433e-03f, 2.587381834e-03f, 2.585551858e-03f, 2.583717508e-03f, 2.581878789e-03f, 2.580035702e-03f, 2.578188253e-03f, 2.576336444e-03f, 2.574480278e-03f, 2.572619760e-03f,
+2.570754892e-03f, 2.568885678e-03f, 2.567012121e-03f, 2.565134225e-03f, 2.563251994e-03f, 2.561365430e-03f, 2.559474538e-03f, 2.557579321e-03f, 2.555679782e-03f, 2.553775924e-03f,
+2.551867752e-03f, 2.549955269e-03f, 2.548038478e-03f, 2.546117384e-03f, 2.544191988e-03f, 2.542262296e-03f, 2.540328310e-03f, 2.538390034e-03f, 2.536447472e-03f, 2.534500628e-03f,
+2.532549504e-03f, 2.530594105e-03f, 2.528634433e-03f, 2.526670494e-03f, 2.524702289e-03f, 2.522729824e-03f, 2.520753101e-03f, 2.518772124e-03f, 2.516786898e-03f, 2.514797424e-03f,
+2.512803708e-03f, 2.510805752e-03f, 2.508803561e-03f, 2.506797139e-03f, 2.504786488e-03f, 2.502771612e-03f, 2.500752516e-03f, 2.498729203e-03f, 2.496701676e-03f, 2.494669940e-03f,
+2.492633997e-03f, 2.490593853e-03f, 2.488549510e-03f, 2.486500973e-03f, 2.484448245e-03f, 2.482391329e-03f, 2.480330230e-03f, 2.478264952e-03f, 2.476195498e-03f, 2.474121872e-03f,
+2.472044077e-03f, 2.469962118e-03f, 2.467875999e-03f, 2.465785723e-03f, 2.463691294e-03f, 2.461592715e-03f, 2.459489992e-03f, 2.457383127e-03f, 2.455272125e-03f, 2.453156988e-03f,
+2.451037722e-03f, 2.448914331e-03f, 2.446786817e-03f, 2.444655184e-03f, 2.442519438e-03f, 2.440379581e-03f, 2.438235618e-03f, 2.436087552e-03f, 2.433935388e-03f, 2.431779129e-03f,
+2.429618779e-03f, 2.427454342e-03f, 2.425285823e-03f, 2.423113224e-03f, 2.420936551e-03f, 2.418755807e-03f, 2.416570995e-03f, 2.414382121e-03f, 2.412189188e-03f, 2.409992200e-03f,
+2.407791161e-03f, 2.405586074e-03f, 2.403376945e-03f, 2.401163777e-03f, 2.398946574e-03f, 2.396725341e-03f, 2.394500080e-03f, 2.392270797e-03f, 2.390037495e-03f, 2.387800178e-03f,
+2.385558851e-03f, 2.383313518e-03f, 2.381064182e-03f, 2.378810848e-03f, 2.376553519e-03f, 2.374292201e-03f, 2.372026897e-03f, 2.369757610e-03f, 2.367484346e-03f, 2.365207109e-03f,
+2.362925902e-03f, 2.360640730e-03f, 2.358351597e-03f, 2.356058507e-03f, 2.353761464e-03f, 2.351460472e-03f, 2.349155536e-03f, 2.346846660e-03f, 2.344533847e-03f, 2.342217103e-03f,
+2.339896431e-03f, 2.337571836e-03f, 2.335243322e-03f, 2.332910892e-03f, 2.330574552e-03f, 2.328234305e-03f, 2.325890156e-03f, 2.323542109e-03f, 2.321190169e-03f, 2.318834339e-03f,
+2.316474623e-03f, 2.314111027e-03f, 2.311743554e-03f, 2.309372209e-03f, 2.306996996e-03f, 2.304617919e-03f, 2.302234982e-03f, 2.299848191e-03f, 2.297457548e-03f, 2.295063059e-03f,
+2.292664729e-03f, 2.290262560e-03f, 2.287856558e-03f, 2.285446727e-03f, 2.283033071e-03f, 2.280615595e-03f, 2.278194303e-03f, 2.275769199e-03f, 2.273340288e-03f, 2.270907574e-03f,
+2.268471062e-03f, 2.266030756e-03f, 2.263586661e-03f, 2.261138780e-03f, 2.258687119e-03f, 2.256231681e-03f, 2.253772471e-03f, 2.251309494e-03f, 2.248842754e-03f, 2.246372256e-03f,
+2.243898004e-03f, 2.241420002e-03f, 2.238938255e-03f, 2.236452767e-03f, 2.233963543e-03f, 2.231470588e-03f, 2.228973906e-03f, 2.226473501e-03f, 2.223969377e-03f, 2.221461541e-03f,
+2.218949995e-03f, 2.216434745e-03f, 2.213915795e-03f, 2.211393149e-03f, 2.208866813e-03f, 2.206336790e-03f, 2.203803086e-03f, 2.201265704e-03f, 2.198724650e-03f, 2.196179927e-03f,
+2.193631542e-03f, 2.191079497e-03f, 2.188523799e-03f, 2.185964450e-03f, 2.183401457e-03f, 2.180834823e-03f, 2.178264554e-03f, 2.175690653e-03f, 2.173113126e-03f, 2.170531977e-03f,
+2.167947210e-03f, 2.165358832e-03f, 2.162766845e-03f, 2.160171255e-03f, 2.157572066e-03f, 2.154969284e-03f, 2.152362913e-03f, 2.149752957e-03f, 2.147139421e-03f, 2.144522310e-03f,
+2.141901628e-03f, 2.139277381e-03f, 2.136649573e-03f, 2.134018209e-03f, 2.131383293e-03f, 2.128744831e-03f, 2.126102827e-03f, 2.123457285e-03f, 2.120808210e-03f, 2.118155608e-03f,
+2.115499483e-03f, 2.112839840e-03f, 2.110176684e-03f, 2.107510018e-03f, 2.104839849e-03f, 2.102166181e-03f, 2.099489019e-03f, 2.096808367e-03f, 2.094124230e-03f, 2.091436614e-03f,
+2.088745522e-03f, 2.086050961e-03f, 2.083352934e-03f, 2.080651447e-03f, 2.077946504e-03f, 2.075238110e-03f, 2.072526270e-03f, 2.069810990e-03f, 2.067092273e-03f, 2.064370125e-03f,
+2.061644550e-03f, 2.058915554e-03f, 2.056183141e-03f, 2.053447317e-03f, 2.050708085e-03f, 2.047965452e-03f, 2.045219422e-03f, 2.042470000e-03f, 2.039717190e-03f, 2.036960998e-03f,
+2.034201429e-03f, 2.031438488e-03f, 2.028672179e-03f, 2.025902508e-03f, 2.023129480e-03f, 2.020353099e-03f, 2.017573370e-03f, 2.014790299e-03f, 2.012003890e-03f, 2.009214148e-03f,
+2.006421080e-03f, 2.003624688e-03f, 2.000824979e-03f, 1.998021957e-03f, 1.995215628e-03f, 1.992405996e-03f, 1.989593067e-03f, 1.986776845e-03f, 1.983957336e-03f, 1.981134544e-03f,
+1.978308475e-03f, 1.975479134e-03f, 1.972646525e-03f, 1.969810655e-03f, 1.966971527e-03f, 1.964129147e-03f, 1.961283521e-03f, 1.958434652e-03f, 1.955582547e-03f, 1.952727210e-03f,
+1.949868646e-03f, 1.947006861e-03f, 1.944141860e-03f, 1.941273647e-03f, 1.938402229e-03f, 1.935527609e-03f, 1.932649794e-03f, 1.929768788e-03f, 1.926884596e-03f, 1.923997224e-03f,
+1.921106676e-03f, 1.918212959e-03f, 1.915316077e-03f, 1.912416035e-03f, 1.909512838e-03f, 1.906606492e-03f, 1.903697002e-03f, 1.900784372e-03f, 1.897868609e-03f, 1.894949718e-03f,
+1.892027702e-03f, 1.889102569e-03f, 1.886174323e-03f, 1.883242969e-03f, 1.880308512e-03f, 1.877370958e-03f, 1.874430312e-03f, 1.871486580e-03f, 1.868539765e-03f, 1.865589875e-03f,
+1.862636913e-03f, 1.859680886e-03f, 1.856721798e-03f, 1.853759654e-03f, 1.850794461e-03f, 1.847826223e-03f, 1.844854946e-03f, 1.841880635e-03f, 1.838903294e-03f, 1.835922931e-03f,
+1.832939549e-03f, 1.829953154e-03f, 1.826963751e-03f, 1.823971347e-03f, 1.820975945e-03f, 1.817977552e-03f, 1.814976172e-03f, 1.811971812e-03f, 1.808964476e-03f, 1.805954170e-03f,
+1.802940899e-03f, 1.799924669e-03f, 1.796905484e-03f, 1.793883351e-03f, 1.790858274e-03f, 1.787830259e-03f, 1.784799312e-03f, 1.781765437e-03f, 1.778728641e-03f, 1.775688928e-03f,
+1.772646304e-03f, 1.769600775e-03f, 1.766552345e-03f, 1.763501021e-03f, 1.760446807e-03f, 1.757389709e-03f, 1.754329733e-03f, 1.751266884e-03f, 1.748201167e-03f, 1.745132588e-03f,
+1.742061152e-03f, 1.738986865e-03f, 1.735909732e-03f, 1.732829759e-03f, 1.729746951e-03f, 1.726661314e-03f, 1.723572852e-03f, 1.720481572e-03f, 1.717387480e-03f, 1.714290580e-03f,
+1.711190878e-03f, 1.708088379e-03f, 1.704983090e-03f, 1.701875015e-03f, 1.698764160e-03f, 1.695650531e-03f, 1.692534133e-03f, 1.689414972e-03f, 1.686293053e-03f, 1.683168382e-03f,
+1.680040964e-03f, 1.676910804e-03f, 1.673777910e-03f, 1.670642285e-03f, 1.667503935e-03f, 1.664362867e-03f, 1.661219085e-03f, 1.658072596e-03f, 1.654923404e-03f, 1.651771516e-03f,
+1.648616937e-03f, 1.645459672e-03f, 1.642299727e-03f, 1.639137108e-03f, 1.635971821e-03f, 1.632803870e-03f, 1.629633263e-03f, 1.626460003e-03f, 1.623284097e-03f, 1.620105550e-03f,
+1.616924369e-03f, 1.613740558e-03f, 1.610554124e-03f, 1.607365072e-03f, 1.604173407e-03f, 1.600979135e-03f, 1.597782263e-03f, 1.594582795e-03f, 1.591380737e-03f, 1.588176096e-03f,
+1.584968876e-03f, 1.581759083e-03f, 1.578546723e-03f, 1.575331802e-03f, 1.572114325e-03f, 1.568894299e-03f, 1.565671728e-03f, 1.562446618e-03f, 1.559218976e-03f, 1.555988806e-03f,
+1.552756115e-03f, 1.549520908e-03f, 1.546283192e-03f, 1.543042971e-03f, 1.539800251e-03f, 1.536555039e-03f, 1.533307339e-03f, 1.530057159e-03f, 1.526804503e-03f, 1.523549376e-03f,
+1.520291786e-03f, 1.517031738e-03f, 1.513769237e-03f, 1.510504289e-03f, 1.507236900e-03f, 1.503967076e-03f, 1.500694822e-03f, 1.497420145e-03f, 1.494143050e-03f, 1.490863543e-03f,
+1.487581629e-03f, 1.484297315e-03f, 1.481010606e-03f, 1.477721509e-03f, 1.474430028e-03f, 1.471136170e-03f, 1.467839940e-03f, 1.464541345e-03f, 1.461240390e-03f, 1.457937081e-03f,
+1.454631423e-03f, 1.451323424e-03f, 1.448013088e-03f, 1.444700421e-03f, 1.441385429e-03f, 1.438068119e-03f, 1.434748495e-03f, 1.431426564e-03f, 1.428102332e-03f, 1.424775804e-03f,
+1.421446987e-03f, 1.418115886e-03f, 1.414782506e-03f, 1.411446855e-03f, 1.408108938e-03f, 1.404768760e-03f, 1.401426328e-03f, 1.398081648e-03f, 1.394734725e-03f, 1.391385565e-03f,
+1.388034175e-03f, 1.384680559e-03f, 1.381324725e-03f, 1.377966678e-03f, 1.374606423e-03f, 1.371243968e-03f, 1.367879317e-03f, 1.364512477e-03f, 1.361143453e-03f, 1.357772252e-03f,
+1.354398879e-03f, 1.351023341e-03f, 1.347645643e-03f, 1.344265791e-03f, 1.340883792e-03f, 1.337499651e-03f, 1.334113374e-03f, 1.330724967e-03f, 1.327334436e-03f, 1.323941788e-03f,
+1.320547027e-03f, 1.317150161e-03f, 1.313751194e-03f, 1.310350133e-03f, 1.306946985e-03f, 1.303541754e-03f, 1.300134447e-03f, 1.296725071e-03f, 1.293313630e-03f, 1.289900131e-03f,
+1.286484580e-03f, 1.283066983e-03f, 1.279647346e-03f, 1.276225676e-03f, 1.272801977e-03f, 1.269376256e-03f, 1.265948519e-03f, 1.262518772e-03f, 1.259087022e-03f, 1.255653274e-03f,
+1.252217533e-03f, 1.248779808e-03f, 1.245340102e-03f, 1.241898423e-03f, 1.238454776e-03f, 1.235009167e-03f, 1.231561603e-03f, 1.228112090e-03f, 1.224660633e-03f, 1.221207239e-03f,
+1.217751914e-03f, 1.214294663e-03f, 1.210835494e-03f, 1.207374411e-03f, 1.203911421e-03f, 1.200446531e-03f, 1.196979746e-03f, 1.193511072e-03f, 1.190040516e-03f, 1.186568083e-03f,
+1.183093779e-03f, 1.179617612e-03f, 1.176139586e-03f, 1.172659708e-03f, 1.169177984e-03f, 1.165694421e-03f, 1.162209023e-03f, 1.158721798e-03f, 1.155232752e-03f, 1.151741890e-03f,
+1.148249219e-03f, 1.144754745e-03f, 1.141258474e-03f, 1.137760412e-03f, 1.134260565e-03f, 1.130758940e-03f, 1.127255542e-03f, 1.123750378e-03f, 1.120243454e-03f, 1.116734776e-03f,
+1.113224350e-03f, 1.109712182e-03f, 1.106198279e-03f, 1.102682647e-03f, 1.099165291e-03f, 1.095646219e-03f, 1.092125436e-03f, 1.088602948e-03f, 1.085078761e-03f, 1.081552882e-03f,
+1.078025318e-03f, 1.074496073e-03f, 1.070965154e-03f, 1.067432568e-03f, 1.063898321e-03f, 1.060362418e-03f, 1.056824866e-03f, 1.053285672e-03f, 1.049744841e-03f, 1.046202380e-03f,
+1.042658294e-03f, 1.039112591e-03f, 1.035565276e-03f, 1.032016355e-03f, 1.028465835e-03f, 1.024913722e-03f, 1.021360022e-03f, 1.017804742e-03f, 1.014247887e-03f, 1.010689464e-03f,
+1.007129479e-03f, 1.003567938e-03f, 1.000004848e-03f, 9.964402140e-04f, 9.928740435e-04f, 9.893063422e-04f, 9.857371164e-04f, 9.821663723e-04f, 9.785941163e-04f, 9.750203544e-04f,
+9.714450931e-04f, 9.678683385e-04f, 9.642900969e-04f, 9.607103746e-04f, 9.571291779e-04f, 9.535465129e-04f, 9.499623860e-04f, 9.463768034e-04f, 9.427897715e-04f, 9.392012964e-04f,
+9.356113845e-04f, 9.320200421e-04f, 9.284272753e-04f, 9.248330906e-04f, 9.212374942e-04f, 9.176404923e-04f, 9.140420914e-04f, 9.104422976e-04f, 9.068411172e-04f, 9.032385566e-04f,
+8.996346220e-04f, 8.960293198e-04f, 8.924226563e-04f, 8.888146377e-04f, 8.852052703e-04f, 8.815945606e-04f, 8.779825147e-04f, 8.743691390e-04f, 8.707544398e-04f, 8.671384235e-04f,
+8.635210962e-04f, 8.599024645e-04f, 8.562825345e-04f, 8.526613126e-04f, 8.490388052e-04f, 8.454150185e-04f, 8.417899589e-04f, 8.381636328e-04f, 8.345360464e-04f, 8.309072061e-04f,
+8.272771182e-04f, 8.236457890e-04f, 8.200132250e-04f, 8.163794324e-04f, 8.127444176e-04f, 8.091081870e-04f, 8.054707468e-04f, 8.018321035e-04f, 7.981922634e-04f, 7.945512328e-04f,
+7.909090181e-04f, 7.872656256e-04f, 7.836210618e-04f, 7.799753329e-04f, 7.763284453e-04f, 7.726804055e-04f, 7.690312197e-04f, 7.653808943e-04f, 7.617294357e-04f, 7.580768503e-04f,
+7.544231444e-04f, 7.507683244e-04f, 7.471123967e-04f, 7.434553676e-04f, 7.397972436e-04f, 7.361380310e-04f, 7.324777362e-04f, 7.288163656e-04f, 7.251539255e-04f, 7.214904224e-04f,
+7.178258626e-04f, 7.141602525e-04f, 7.104935986e-04f, 7.068259071e-04f, 7.031571846e-04f, 6.994874373e-04f, 6.958166717e-04f, 6.921448942e-04f, 6.884721112e-04f, 6.847983291e-04f,
+6.811235542e-04f, 6.774477930e-04f, 6.737710519e-04f, 6.700933374e-04f, 6.664146557e-04f, 6.627350133e-04f, 6.590544166e-04f, 6.553728721e-04f, 6.516903861e-04f, 6.480069651e-04f,
+6.443226154e-04f, 6.406373435e-04f, 6.369511559e-04f, 6.332640588e-04f, 6.295760588e-04f, 6.258871623e-04f, 6.221973756e-04f, 6.185067052e-04f, 6.148151576e-04f, 6.111227392e-04f,
+6.074294563e-04f, 6.037353154e-04f, 6.000403230e-04f, 5.963444854e-04f, 5.926478092e-04f, 5.889503007e-04f, 5.852519663e-04f, 5.815528126e-04f, 5.778528459e-04f, 5.741520727e-04f,
+5.704504994e-04f, 5.667481325e-04f, 5.630449783e-04f, 5.593410434e-04f, 5.556363342e-04f, 5.519308571e-04f, 5.482246185e-04f, 5.445176250e-04f, 5.408098829e-04f, 5.371013987e-04f,
+5.333921789e-04f, 5.296822299e-04f, 5.259715581e-04f, 5.222601700e-04f, 5.185480721e-04f, 5.148352708e-04f, 5.111217726e-04f, 5.074075838e-04f, 5.036927110e-04f, 4.999771607e-04f,
+4.962609392e-04f, 4.925440531e-04f, 4.888265088e-04f, 4.851083127e-04f, 4.813894714e-04f, 4.776699912e-04f, 4.739498787e-04f, 4.702291402e-04f, 4.665077824e-04f, 4.627858115e-04f,
+4.590632342e-04f, 4.553400568e-04f, 4.516162858e-04f, 4.478919278e-04f, 4.441669891e-04f, 4.404414762e-04f, 4.367153956e-04f, 4.329887538e-04f, 4.292615572e-04f, 4.255338123e-04f,
+4.218055256e-04f, 4.180767035e-04f, 4.143473526e-04f, 4.106174793e-04f, 4.068870900e-04f, 4.031561913e-04f, 3.994247895e-04f, 3.956928913e-04f, 3.919605031e-04f, 3.882276313e-04f,
+3.844942824e-04f, 3.807604629e-04f, 3.770261793e-04f, 3.732914380e-04f, 3.695562456e-04f, 3.658206084e-04f, 3.620845331e-04f, 3.583480260e-04f, 3.546110937e-04f, 3.508737427e-04f,
+3.471359793e-04f, 3.433978101e-04f, 3.396592416e-04f, 3.359202803e-04f, 3.321809326e-04f, 3.284412050e-04f, 3.247011041e-04f, 3.209606362e-04f, 3.172198079e-04f, 3.134786256e-04f,
+3.097370959e-04f, 3.059952253e-04f, 3.022530201e-04f, 2.985104869e-04f, 2.947676323e-04f, 2.910244625e-04f, 2.872809843e-04f, 2.835372040e-04f, 2.797931281e-04f, 2.760487631e-04f,
+2.723041155e-04f, 2.685591918e-04f, 2.648139985e-04f, 2.610685420e-04f, 2.573228289e-04f, 2.535768656e-04f, 2.498306586e-04f, 2.460842145e-04f, 2.423375396e-04f, 2.385906405e-04f,
+2.348435237e-04f, 2.310961957e-04f, 2.273486628e-04f, 2.236009318e-04f, 2.198530089e-04f, 2.161049008e-04f, 2.123566138e-04f, 2.086081545e-04f, 2.048595294e-04f, 2.011107450e-04f,
+1.973618077e-04f, 1.936127241e-04f, 1.898635005e-04f, 1.861141436e-04f, 1.823646597e-04f, 1.786150555e-04f, 1.748653373e-04f, 1.711155116e-04f, 1.673655851e-04f, 1.636155640e-04f,
+1.598654549e-04f, 1.561152644e-04f, 1.523649988e-04f, 1.486146647e-04f, 1.448642686e-04f, 1.411138169e-04f, 1.373633161e-04f, 1.336127727e-04f, 1.298621933e-04f, 1.261115842e-04f,
+1.223609519e-04f, 1.186103031e-04f, 1.148596440e-04f, 1.111089813e-04f, 1.073583213e-04f, 1.036076707e-04f, 9.985703578e-05f, 9.610642312e-05f, 9.235583918e-05f, 8.860529044e-05f,
+8.485478338e-05f, 8.110432449e-05f, 7.735392025e-05f, 7.360357712e-05f, 6.985330159e-05f, 6.610310014e-05f, 6.235297925e-05f, 5.860294540e-05f, 5.485300505e-05f, 5.110316469e-05f,
+4.735343079e-05f, 4.360380983e-05f, 3.985430828e-05f, 3.610493262e-05f, 3.235568931e-05f, 2.860658484e-05f, 2.485762568e-05f, 2.110881829e-05f, 1.736016915e-05f, 1.361168474e-05f,
+9.863371507e-06f, 6.115235937e-06f, 2.367284494e-06f, -1.380476354e-06f, -5.128040138e-06f, -8.875400392e-06f, -1.262255065e-05f, -1.636948445e-05f, -2.011619532e-05f, -2.386267680e-05f,
+-2.760892243e-05f, -3.135492574e-05f, -3.510068027e-05f, -3.884617957e-05f, -4.259141716e-05f, -4.633638660e-05f, -5.008108143e-05f, -5.382549517e-05f, -5.756962139e-05f, -6.131345362e-05f,
+-6.505698541e-05f, -6.880021030e-05f, -7.254312183e-05f, -7.628571357e-05f, -8.002797905e-05f, -8.376991182e-05f, -8.751150544e-05f, -9.125275345e-05f, -9.499364941e-05f, -9.873418687e-05f,
+-1.024743594e-04f, -1.062141605e-04f, -1.099535838e-04f, -1.136926228e-04f, -1.174312711e-04f, -1.211695222e-04f, -1.249073697e-04f, -1.286448072e-04f, -1.323818281e-04f, -1.361184262e-04f,
+-1.398545949e-04f, -1.435903279e-04f, -1.473256186e-04f, -1.510604606e-04f, -1.547948476e-04f, -1.585287730e-04f, -1.622622305e-04f, -1.659952136e-04f, -1.697277159e-04f, -1.734597310e-04f,
+-1.771912524e-04f, -1.809222738e-04f, -1.846527886e-04f, -1.883827906e-04f, -1.921122732e-04f, -1.958412300e-04f, -1.995696546e-04f, -2.032975407e-04f, -2.070248817e-04f, -2.107516714e-04f,
+-2.144779031e-04f, -2.182035707e-04f, -2.219286676e-04f, -2.256531874e-04f, -2.293771237e-04f, -2.331004702e-04f, -2.368232204e-04f, -2.405453679e-04f, -2.442669063e-04f, -2.479878292e-04f,
+-2.517081303e-04f, -2.554278030e-04f, -2.591468411e-04f, -2.628652381e-04f, -2.665829876e-04f, -2.703000833e-04f, -2.740165187e-04f, -2.777322875e-04f, -2.814473832e-04f, -2.851617995e-04f,
+-2.888755301e-04f, -2.925885684e-04f, -2.963009082e-04f, -3.000125431e-04f, -3.037234666e-04f, -3.074336725e-04f, -3.111431542e-04f, -3.148519055e-04f, -3.185599200e-04f, -3.222671914e-04f,
+-3.259737131e-04f, -3.296794789e-04f, -3.333844825e-04f, -3.370887174e-04f, -3.407921772e-04f, -3.444948557e-04f, -3.481967465e-04f, -3.518978432e-04f, -3.555981394e-04f, -3.592976288e-04f,
+-3.629963051e-04f, -3.666941619e-04f, -3.703911928e-04f, -3.740873915e-04f, -3.777827517e-04f, -3.814772670e-04f, -3.851709310e-04f, -3.888637375e-04f, -3.925556801e-04f, -3.962467524e-04f,
+-3.999369482e-04f, -4.036262610e-04f, -4.073146847e-04f, -4.110022127e-04f, -4.146888389e-04f, -4.183745568e-04f, -4.220593602e-04f, -4.257432427e-04f, -4.294261981e-04f, -4.331082199e-04f,
+-4.367893020e-04f, -4.404694379e-04f, -4.441486214e-04f, -4.478268461e-04f, -4.515041057e-04f, -4.551803941e-04f, -4.588557047e-04f, -4.625300314e-04f, -4.662033678e-04f, -4.698757076e-04f,
+-4.735470446e-04f, -4.772173725e-04f, -4.808866849e-04f, -4.845549755e-04f, -4.882222382e-04f, -4.918884665e-04f, -4.955536543e-04f, -4.992177952e-04f, -5.028808829e-04f, -5.065429113e-04f,
+-5.102038739e-04f, -5.138637646e-04f, -5.175225770e-04f, -5.211803049e-04f, -5.248369421e-04f, -5.284924822e-04f, -5.321469191e-04f, -5.358002464e-04f, -5.394524578e-04f, -5.431035472e-04f,
+-5.467535083e-04f, -5.504023349e-04f, -5.540500206e-04f, -5.576965592e-04f, -5.613419446e-04f, -5.649861704e-04f, -5.686292305e-04f, -5.722711185e-04f, -5.759118283e-04f, -5.795513536e-04f,
+-5.831896882e-04f, -5.868268258e-04f, -5.904627603e-04f, -5.940974855e-04f, -5.977309950e-04f, -6.013632827e-04f, -6.049943424e-04f, -6.086241678e-04f, -6.122527528e-04f, -6.158800911e-04f,
+-6.195061766e-04f, -6.231310030e-04f, -6.267545641e-04f, -6.303768538e-04f, -6.339978658e-04f, -6.376175940e-04f, -6.412360321e-04f, -6.448531740e-04f, -6.484690135e-04f, -6.520835445e-04f,
+-6.556967606e-04f, -6.593086558e-04f, -6.629192239e-04f, -6.665284587e-04f, -6.701363540e-04f, -6.737429038e-04f, -6.773481017e-04f, -6.809519417e-04f, -6.845544175e-04f, -6.881555231e-04f,
+-6.917552523e-04f, -6.953535990e-04f, -6.989505569e-04f, -7.025461199e-04f, -7.061402820e-04f, -7.097330369e-04f, -7.133243786e-04f, -7.169143008e-04f, -7.205027975e-04f, -7.240898626e-04f,
+-7.276754898e-04f, -7.312596731e-04f, -7.348424064e-04f, -7.384236836e-04f, -7.420034985e-04f, -7.455818450e-04f, -7.491587170e-04f, -7.527341085e-04f, -7.563080132e-04f, -7.598804252e-04f,
+-7.634513383e-04f, -7.670207463e-04f, -7.705886434e-04f, -7.741550232e-04f, -7.777198798e-04f, -7.812832071e-04f, -7.848449990e-04f, -7.884052494e-04f, -7.919639522e-04f, -7.955211014e-04f,
+-7.990766910e-04f, -8.026307147e-04f, -8.061831667e-04f, -8.097340408e-04f, -8.132833309e-04f, -8.168310310e-04f, -8.203771352e-04f, -8.239216372e-04f, -8.274645311e-04f, -8.310058109e-04f,
+-8.345454705e-04f, -8.380835038e-04f, -8.416199049e-04f, -8.451546677e-04f, -8.486877861e-04f, -8.522192543e-04f, -8.557490661e-04f, -8.592772155e-04f, -8.628036965e-04f, -8.663285032e-04f,
+-8.698516295e-04f, -8.733730694e-04f, -8.768928168e-04f, -8.804108659e-04f, -8.839272107e-04f, -8.874418450e-04f, -8.909547630e-04f, -8.944659587e-04f, -8.979754261e-04f, -9.014831591e-04f,
+-9.049891519e-04f, -9.084933985e-04f, -9.119958929e-04f, -9.154966291e-04f, -9.189956012e-04f, -9.224928033e-04f, -9.259882293e-04f, -9.294818733e-04f, -9.329737294e-04f, -9.364637917e-04f,
+-9.399520541e-04f, -9.434385108e-04f, -9.469231559e-04f, -9.504059833e-04f, -9.538869872e-04f, -9.573661617e-04f, -9.608435008e-04f, -9.643189987e-04f, -9.677926493e-04f, -9.712644469e-04f,
+-9.747343855e-04f, -9.782024591e-04f, -9.816686620e-04f, -9.851329882e-04f, -9.885954318e-04f, -9.920559869e-04f, -9.955146477e-04f, -9.989714083e-04f, -1.002426263e-03f, -1.005879205e-03f,
+-1.009330230e-03f, -1.012779331e-03f, -1.016226502e-03f, -1.019671738e-03f, -1.023115033e-03f, -1.026556380e-03f, -1.029995775e-03f, -1.033433211e-03f, -1.036868682e-03f, -1.040302182e-03f,
+-1.043733706e-03f, -1.047163248e-03f, -1.050590803e-03f, -1.054016363e-03f, -1.057439924e-03f, -1.060861479e-03f, -1.064281023e-03f, -1.067698550e-03f, -1.071114054e-03f, -1.074527529e-03f,
+-1.077938970e-03f, -1.081348371e-03f, -1.084755726e-03f, -1.088161029e-03f, -1.091564274e-03f, -1.094965457e-03f, -1.098364570e-03f, -1.101761608e-03f, -1.105156565e-03f, -1.108549436e-03f,
+-1.111940215e-03f, -1.115328896e-03f, -1.118715473e-03f, -1.122099941e-03f, -1.125482293e-03f, -1.128862525e-03f, -1.132240630e-03f, -1.135616603e-03f, -1.138990438e-03f, -1.142362129e-03f,
+-1.145731670e-03f, -1.149099057e-03f, -1.152464282e-03f, -1.155827341e-03f, -1.159188227e-03f, -1.162546935e-03f, -1.165903460e-03f, -1.169257795e-03f, -1.172609935e-03f, -1.175959874e-03f,
+-1.179307607e-03f, -1.182653128e-03f, -1.185996431e-03f, -1.189337511e-03f, -1.192676361e-03f, -1.196012977e-03f, -1.199347352e-03f, -1.202679481e-03f, -1.206009359e-03f, -1.209336979e-03f,
+-1.212662336e-03f, -1.215985425e-03f, -1.219306239e-03f, -1.222624774e-03f, -1.225941023e-03f, -1.229254981e-03f, -1.232566642e-03f, -1.235876001e-03f, -1.239183052e-03f, -1.242487790e-03f,
+-1.245790209e-03f, -1.249090303e-03f, -1.252388066e-03f, -1.255683494e-03f, -1.258976581e-03f, -1.262267320e-03f, -1.265555707e-03f, -1.268841736e-03f, -1.272125401e-03f, -1.275406697e-03f,
+-1.278685618e-03f, -1.281962159e-03f, -1.285236314e-03f, -1.288508078e-03f, -1.291777445e-03f, -1.295044410e-03f, -1.298308966e-03f, -1.301571109e-03f, -1.304830833e-03f, -1.308088133e-03f,
+-1.311343002e-03f, -1.314595436e-03f, -1.317845429e-03f, -1.321092976e-03f, -1.324338071e-03f, -1.327580708e-03f, -1.330820882e-03f, -1.334058588e-03f, -1.337293820e-03f, -1.340526573e-03f,
+-1.343756841e-03f, -1.346984619e-03f, -1.350209901e-03f, -1.353432682e-03f, -1.356652956e-03f, -1.359870719e-03f, -1.363085964e-03f, -1.366298686e-03f, -1.369508880e-03f, -1.372716540e-03f,
+-1.375921661e-03f, -1.379124238e-03f, -1.382324264e-03f, -1.385521736e-03f, -1.388716646e-03f, -1.391908991e-03f, -1.395098764e-03f, -1.398285960e-03f, -1.401470574e-03f, -1.404652600e-03f,
+-1.407832034e-03f, -1.411008869e-03f, -1.414183100e-03f, -1.417354722e-03f, -1.420523730e-03f, -1.423690118e-03f, -1.426853882e-03f, -1.430015014e-03f, -1.433173511e-03f, -1.436329367e-03f,
+-1.439482577e-03f, -1.442633135e-03f, -1.445781036e-03f, -1.448926275e-03f, -1.452068846e-03f, -1.455208744e-03f, -1.458345964e-03f, -1.461480501e-03f, -1.464612349e-03f, -1.467741503e-03f,
+-1.470867958e-03f, -1.473991708e-03f, -1.477112749e-03f, -1.480231074e-03f, -1.483346679e-03f, -1.486459559e-03f, -1.489569708e-03f, -1.492677121e-03f, -1.495781792e-03f, -1.498883717e-03f,
+-1.501982891e-03f, -1.505079308e-03f, -1.508172962e-03f, -1.511263849e-03f, -1.514351964e-03f, -1.517437301e-03f, -1.520519856e-03f, -1.523599622e-03f, -1.526676595e-03f, -1.529750769e-03f,
+-1.532822140e-03f, -1.535890703e-03f, -1.538956451e-03f, -1.542019380e-03f, -1.545079485e-03f, -1.548136761e-03f, -1.551191203e-03f, -1.554242804e-03f, -1.557291561e-03f, -1.560337469e-03f,
+-1.563380521e-03f, -1.566420713e-03f, -1.569458040e-03f, -1.572492497e-03f, -1.575524078e-03f, -1.578552779e-03f, -1.581578594e-03f, -1.584601519e-03f, -1.587621548e-03f, -1.590638676e-03f,
+-1.593652898e-03f, -1.596664210e-03f, -1.599672605e-03f, -1.602678080e-03f, -1.605680628e-03f, -1.608680245e-03f, -1.611676927e-03f, -1.614670667e-03f, -1.617661461e-03f, -1.620649304e-03f,
+-1.623634190e-03f, -1.626616116e-03f, -1.629595075e-03f, -1.632571063e-03f, -1.635544075e-03f, -1.638514106e-03f, -1.641481151e-03f, -1.644445204e-03f, -1.647406262e-03f, -1.650364318e-03f,
+-1.653319369e-03f, -1.656271408e-03f, -1.659220432e-03f, -1.662166434e-03f, -1.665109411e-03f, -1.668049358e-03f, -1.670986269e-03f, -1.673920139e-03f, -1.676850964e-03f, -1.679778738e-03f,
+-1.682703457e-03f, -1.685625116e-03f, -1.688543710e-03f, -1.691459234e-03f, -1.694371683e-03f, -1.697281053e-03f, -1.700187338e-03f, -1.703090534e-03f, -1.705990635e-03f, -1.708887637e-03f,
+-1.711781536e-03f, -1.714672325e-03f, -1.717560001e-03f, -1.720444558e-03f, -1.723325993e-03f, -1.726204299e-03f, -1.729079472e-03f, -1.731951507e-03f, -1.734820400e-03f, -1.737686145e-03f,
+-1.740548739e-03f, -1.743408175e-03f, -1.746264450e-03f, -1.749117559e-03f, -1.751967496e-03f, -1.754814257e-03f, -1.757657838e-03f, -1.760498233e-03f, -1.763335437e-03f, -1.766169447e-03f,
+-1.769000258e-03f, -1.771827863e-03f, -1.774652260e-03f, -1.777473443e-03f, -1.780291407e-03f, -1.783106148e-03f, -1.785917661e-03f, -1.788725942e-03f, -1.791530985e-03f, -1.794332786e-03f,
+-1.797131340e-03f, -1.799926643e-03f, -1.802718690e-03f, -1.805507476e-03f, -1.808292997e-03f, -1.811075249e-03f, -1.813854225e-03f, -1.816629922e-03f, -1.819402336e-03f, -1.822171460e-03f,
+-1.824937292e-03f, -1.827699826e-03f, -1.830459058e-03f, -1.833214983e-03f, -1.835967596e-03f, -1.838716893e-03f, -1.841462870e-03f, -1.844205521e-03f, -1.846944843e-03f, -1.849680830e-03f,
+-1.852413478e-03f, -1.855142783e-03f, -1.857868740e-03f, -1.860591344e-03f, -1.863310591e-03f, -1.866026477e-03f, -1.868738996e-03f, -1.871448145e-03f, -1.874153919e-03f, -1.876856313e-03f,
+-1.879555323e-03f, -1.882250944e-03f, -1.884943172e-03f, -1.887632003e-03f, -1.890317431e-03f, -1.892999453e-03f, -1.895678064e-03f, -1.898353260e-03f, -1.901025035e-03f, -1.903693387e-03f,
+-1.906358309e-03f, -1.909019799e-03f, -1.911677851e-03f, -1.914332460e-03f, -1.916983624e-03f, -1.919631336e-03f, -1.922275594e-03f, -1.924916391e-03f, -1.927553725e-03f, -1.930187591e-03f,
+-1.932817983e-03f, -1.935444899e-03f, -1.938068333e-03f, -1.940688281e-03f, -1.943304739e-03f, -1.945917702e-03f, -1.948527167e-03f, -1.951133129e-03f, -1.953735583e-03f, -1.956334525e-03f,
+-1.958929951e-03f, -1.961521856e-03f, -1.964110237e-03f, -1.966695089e-03f, -1.969276408e-03f, -1.971854189e-03f, -1.974428428e-03f, -1.976999121e-03f, -1.979566264e-03f, -1.982129852e-03f,
+-1.984689881e-03f, -1.987246347e-03f, -1.989799246e-03f, -1.992348573e-03f, -1.994894325e-03f, -1.997436496e-03f, -1.999975084e-03f, -2.002510083e-03f, -2.005041489e-03f, -2.007569298e-03f,
+-2.010093507e-03f, -2.012614110e-03f, -2.015131104e-03f, -2.017644485e-03f, -2.020154248e-03f, -2.022660389e-03f, -2.025162904e-03f, -2.027661789e-03f, -2.030157040e-03f, -2.032648653e-03f,
+-2.035136623e-03f, -2.037620947e-03f, -2.040101620e-03f, -2.042578638e-03f, -2.045051998e-03f, -2.047521694e-03f, -2.049987724e-03f, -2.052450082e-03f, -2.054908766e-03f, -2.057363770e-03f,
+-2.059815091e-03f, -2.062262724e-03f, -2.064706667e-03f, -2.067146914e-03f, -2.069583461e-03f, -2.072016305e-03f, -2.074445442e-03f, -2.076870868e-03f, -2.079292577e-03f, -2.081710568e-03f,
+-2.084124835e-03f, -2.086535375e-03f, -2.088942183e-03f, -2.091345256e-03f, -2.093744590e-03f, -2.096140181e-03f, -2.098532024e-03f, -2.100920117e-03f, -2.103304454e-03f, -2.105685032e-03f,
+-2.108061848e-03f, -2.110434896e-03f, -2.112804174e-03f, -2.115169678e-03f, -2.117531403e-03f, -2.119889345e-03f, -2.122243501e-03f, -2.124593868e-03f, -2.126940440e-03f, -2.129283214e-03f,
+-2.131622187e-03f, -2.133957354e-03f, -2.136288711e-03f, -2.138616256e-03f, -2.140939983e-03f, -2.143259890e-03f, -2.145575972e-03f, -2.147888225e-03f, -2.150196646e-03f, -2.152501231e-03f,
+-2.154801976e-03f, -2.157098878e-03f, -2.159391932e-03f, -2.161681135e-03f, -2.163966484e-03f, -2.166247973e-03f, -2.168525600e-03f, -2.170799361e-03f, -2.173069252e-03f, -2.175335270e-03f,
+-2.177597410e-03f, -2.179855670e-03f, -2.182110044e-03f, -2.184360530e-03f, -2.186607124e-03f, -2.188849823e-03f, -2.191088621e-03f, -2.193323517e-03f, -2.195554506e-03f, -2.197781585e-03f,
+-2.200004749e-03f, -2.202223996e-03f, -2.204439322e-03f, -2.206650722e-03f, -2.208858194e-03f, -2.211061734e-03f, -2.213261338e-03f, -2.215457002e-03f, -2.217648724e-03f, -2.219836499e-03f,
+-2.222020324e-03f, -2.224200195e-03f, -2.226376109e-03f, -2.228548062e-03f, -2.230716051e-03f, -2.232880071e-03f, -2.235040121e-03f, -2.237196195e-03f, -2.239348291e-03f, -2.241496405e-03f,
+-2.243640533e-03f, -2.245780673e-03f, -2.247916820e-03f, -2.250048970e-03f, -2.252177122e-03f, -2.254301270e-03f, -2.256421413e-03f, -2.258537545e-03f, -2.260649664e-03f, -2.262757766e-03f,
+-2.264861848e-03f, -2.266961907e-03f, -2.269057938e-03f, -2.271149939e-03f, -2.273237906e-03f, -2.275321836e-03f, -2.277401726e-03f, -2.279477571e-03f, -2.281549369e-03f, -2.283617116e-03f,
+-2.285680809e-03f, -2.287740445e-03f, -2.289796019e-03f, -2.291847530e-03f, -2.293894973e-03f, -2.295938345e-03f, -2.297977643e-03f, -2.300012864e-03f, -2.302044004e-03f, -2.304071060e-03f,
+-2.306094028e-03f, -2.308112906e-03f, -2.310127690e-03f, -2.312138377e-03f, -2.314144963e-03f, -2.316147445e-03f, -2.318145821e-03f, -2.320140087e-03f, -2.322130239e-03f, -2.324116274e-03f,
+-2.326098189e-03f, -2.328075982e-03f, -2.330049648e-03f, -2.332019185e-03f, -2.333984589e-03f, -2.335945857e-03f, -2.337902986e-03f, -2.339855973e-03f, -2.341804815e-03f, -2.343749508e-03f,
+-2.345690049e-03f, -2.347626436e-03f, -2.349558665e-03f, -2.351486733e-03f, -2.353410636e-03f, -2.355330373e-03f, -2.357245939e-03f, -2.359157331e-03f, -2.361064547e-03f, -2.362967583e-03f,
+-2.364866437e-03f, -2.366761105e-03f, -2.368651584e-03f, -2.370537872e-03f, -2.372419964e-03f, -2.374297858e-03f, -2.376171552e-03f, -2.378041041e-03f, -2.379906324e-03f, -2.381767396e-03f,
+-2.383624256e-03f, -2.385476899e-03f, -2.387325324e-03f, -2.389169527e-03f, -2.391009504e-03f, -2.392845254e-03f, -2.394676773e-03f, -2.396504058e-03f, -2.398327107e-03f, -2.400145916e-03f,
+-2.401960482e-03f, -2.403770803e-03f, -2.405576875e-03f, -2.407378697e-03f, -2.409176264e-03f, -2.410969574e-03f, -2.412758624e-03f, -2.414543411e-03f, -2.416323932e-03f, -2.418100185e-03f,
+-2.419872167e-03f, -2.421639874e-03f, -2.423403305e-03f, -2.425162455e-03f, -2.426917323e-03f, -2.428667905e-03f, -2.430414199e-03f, -2.432156202e-03f, -2.433893911e-03f, -2.435627324e-03f,
+-2.437356437e-03f, -2.439081247e-03f, -2.440801753e-03f, -2.442517951e-03f, -2.444229839e-03f, -2.445937413e-03f, -2.447640672e-03f, -2.449339612e-03f, -2.451034230e-03f, -2.452724525e-03f,
+-2.454410493e-03f, -2.456092131e-03f, -2.457769437e-03f, -2.459442409e-03f, -2.461111043e-03f, -2.462775337e-03f, -2.464435288e-03f, -2.466090893e-03f, -2.467742151e-03f, -2.469389058e-03f,
+-2.471031612e-03f, -2.472669810e-03f, -2.474303649e-03f, -2.475933128e-03f, -2.477558242e-03f, -2.479178991e-03f, -2.480795370e-03f, -2.482407378e-03f, -2.484015012e-03f, -2.485618270e-03f,
+-2.487217148e-03f, -2.488811645e-03f, -2.490401758e-03f, -2.491987484e-03f, -2.493568821e-03f, -2.495145767e-03f, -2.496718318e-03f, -2.498286473e-03f, -2.499850228e-03f, -2.501409582e-03f,
+-2.502964532e-03f, -2.504515075e-03f, -2.506061209e-03f, -2.507602932e-03f, -2.509140241e-03f, -2.510673134e-03f, -2.512201608e-03f, -2.513725661e-03f, -2.515245291e-03f, -2.516760494e-03f,
+-2.518271270e-03f, -2.519777614e-03f, -2.521279526e-03f, -2.522777002e-03f, -2.524270040e-03f, -2.525758638e-03f, -2.527242794e-03f, -2.528722505e-03f, -2.530197769e-03f, -2.531668583e-03f,
+-2.533134946e-03f, -2.534596855e-03f, -2.536054307e-03f, -2.537507301e-03f, -2.538955833e-03f, -2.540399903e-03f, -2.541839507e-03f, -2.543274643e-03f, -2.544705310e-03f, -2.546131504e-03f,
+-2.547553224e-03f, -2.548970467e-03f, -2.550383232e-03f, -2.551791515e-03f, -2.553195315e-03f, -2.554594629e-03f, -2.555989456e-03f, -2.557379793e-03f, -2.558765638e-03f, -2.560146989e-03f,
+-2.561523844e-03f, -2.562896200e-03f, -2.564264056e-03f, -2.565627408e-03f, -2.566986256e-03f, -2.568340597e-03f, -2.569690429e-03f, -2.571035750e-03f, -2.572376558e-03f, -2.573712850e-03f,
+-2.575044625e-03f, -2.576371880e-03f, -2.577694614e-03f, -2.579012824e-03f, -2.580326509e-03f, -2.581635666e-03f, -2.582940293e-03f, -2.584240389e-03f, -2.585535950e-03f, -2.586826977e-03f,
+-2.588113465e-03f, -2.589395414e-03f, -2.590672821e-03f, -2.591945684e-03f, -2.593214002e-03f, -2.594477772e-03f, -2.595736993e-03f, -2.596991662e-03f, -2.598241778e-03f, -2.599487338e-03f,
+-2.600728341e-03f, -2.601964786e-03f, -2.603196669e-03f, -2.604423989e-03f, -2.605646744e-03f, -2.606864933e-03f, -2.608078553e-03f, -2.609287603e-03f, -2.610492080e-03f, -2.611691984e-03f,
+-2.612887311e-03f, -2.614078061e-03f, -2.615264231e-03f, -2.616445819e-03f, -2.617622825e-03f, -2.618795245e-03f, -2.619963079e-03f, -2.621126324e-03f, -2.622284979e-03f, -2.623439041e-03f,
+-2.624588510e-03f, -2.625733383e-03f, -2.626873659e-03f, -2.628009336e-03f, -2.629140412e-03f, -2.630266886e-03f, -2.631388755e-03f, -2.632506018e-03f, -2.633618674e-03f, -2.634726720e-03f,
+-2.635830156e-03f, -2.636928979e-03f, -2.638023187e-03f, -2.639112780e-03f, -2.640197755e-03f, -2.641278111e-03f, -2.642353846e-03f, -2.643424958e-03f, -2.644491446e-03f, -2.645553309e-03f,
+-2.646610545e-03f, -2.647663151e-03f, -2.648711127e-03f, -2.649754471e-03f, -2.650793182e-03f, -2.651827257e-03f, -2.652856696e-03f, -2.653881497e-03f, -2.654901658e-03f, -2.655917177e-03f,
+-2.656928054e-03f, -2.657934287e-03f, -2.658935873e-03f, -2.659932813e-03f, -2.660925104e-03f, -2.661912744e-03f, -2.662895733e-03f, -2.663874069e-03f, -2.664847750e-03f, -2.665816775e-03f,
+-2.666781143e-03f, -2.667740851e-03f, -2.668695900e-03f, -2.669646287e-03f, -2.670592010e-03f, -2.671533070e-03f, -2.672469463e-03f, -2.673401189e-03f, -2.674328246e-03f, -2.675250634e-03f,
+-2.676168350e-03f, -2.677081393e-03f, -2.677989763e-03f, -2.678893457e-03f, -2.679792474e-03f, -2.680686814e-03f, -2.681576474e-03f, -2.682461454e-03f, -2.683341751e-03f, -2.684217366e-03f,
+-2.685088296e-03f, -2.685954541e-03f, -2.686816099e-03f, -2.687672968e-03f, -2.688525149e-03f, -2.689372638e-03f, -2.690215436e-03f, -2.691053541e-03f, -2.691886951e-03f, -2.692715666e-03f,
+-2.693539684e-03f, -2.694359005e-03f, -2.695173626e-03f, -2.695983548e-03f, -2.696788768e-03f, -2.697589286e-03f, -2.698385100e-03f, -2.699176209e-03f, -2.699962613e-03f, -2.700744309e-03f,
+-2.701521298e-03f, -2.702293577e-03f, -2.703061146e-03f, -2.703824004e-03f, -2.704582149e-03f, -2.705335581e-03f, -2.706084298e-03f, -2.706828300e-03f, -2.707567585e-03f, -2.708302153e-03f,
+-2.709032002e-03f, -2.709757131e-03f, -2.710477540e-03f, -2.711193226e-03f, -2.711904190e-03f, -2.712610431e-03f, -2.713311947e-03f, -2.714008737e-03f, -2.714700801e-03f, -2.715388137e-03f,
+-2.716070745e-03f, -2.716748623e-03f, -2.717421771e-03f, -2.718090188e-03f, -2.718753872e-03f, -2.719412824e-03f, -2.720067042e-03f, -2.720716524e-03f, -2.721361272e-03f, -2.722001282e-03f,
+-2.722636556e-03f, -2.723267090e-03f, -2.723892886e-03f, -2.724513942e-03f, -2.725130257e-03f, -2.725741831e-03f, -2.726348662e-03f, -2.726950750e-03f, -2.727548094e-03f, -2.728140693e-03f,
+-2.728728547e-03f, -2.729311654e-03f, -2.729890014e-03f, -2.730463627e-03f, -2.731032490e-03f, -2.731596605e-03f, -2.732155969e-03f, -2.732710583e-03f, -2.733260445e-03f, -2.733805555e-03f,
+-2.734345912e-03f, -2.734881516e-03f, -2.735412365e-03f, -2.735938460e-03f, -2.736459799e-03f, -2.736976381e-03f, -2.737488207e-03f, -2.737995275e-03f, -2.738497586e-03f, -2.738995137e-03f,
+-2.739487929e-03f, -2.739975961e-03f, -2.740459233e-03f, -2.740937743e-03f, -2.741411492e-03f, -2.741880478e-03f, -2.742344702e-03f, -2.742804162e-03f, -2.743258858e-03f, -2.743708790e-03f,
+-2.744153956e-03f, -2.744594358e-03f, -2.745029993e-03f, -2.745460861e-03f, -2.745886963e-03f, -2.746308296e-03f, -2.746724862e-03f, -2.747136660e-03f, -2.747543688e-03f, -2.747945947e-03f,
+-2.748343436e-03f, -2.748736155e-03f, -2.749124103e-03f, -2.749507280e-03f, -2.749885685e-03f, -2.750259319e-03f, -2.750628180e-03f, -2.750992268e-03f, -2.751351583e-03f, -2.751706125e-03f,
+-2.752055892e-03f, -2.752400886e-03f, -2.752741105e-03f, -2.753076549e-03f, -2.753407218e-03f, -2.753733111e-03f, -2.754054228e-03f, -2.754370569e-03f, -2.754682134e-03f, -2.754988922e-03f,
+-2.755290933e-03f, -2.755588166e-03f, -2.755880622e-03f, -2.756168300e-03f, -2.756451200e-03f, -2.756729322e-03f, -2.757002665e-03f, -2.757271229e-03f, -2.757535014e-03f, -2.757794020e-03f,
+-2.758048247e-03f, -2.758297694e-03f, -2.758542361e-03f, -2.758782248e-03f, -2.759017355e-03f, -2.759247682e-03f, -2.759473229e-03f, -2.759693995e-03f, -2.759909980e-03f, -2.760121184e-03f,
+-2.760327607e-03f, -2.760529250e-03f, -2.760726111e-03f, -2.760918191e-03f, -2.761105489e-03f, -2.761288007e-03f, -2.761465742e-03f, -2.761638697e-03f, -2.761806869e-03f, -2.761970260e-03f,
+-2.762128870e-03f, -2.762282697e-03f, -2.762431743e-03f, -2.762576008e-03f, -2.762715490e-03f, -2.762850191e-03f, -2.762980110e-03f, -2.763105248e-03f, -2.763225604e-03f, -2.763341178e-03f,
+-2.763451971e-03f, -2.763557983e-03f, -2.763659213e-03f, -2.763755662e-03f, -2.763847329e-03f, -2.763934215e-03f, -2.764016321e-03f, -2.764093645e-03f, -2.764166189e-03f, -2.764233951e-03f,
+-2.764296934e-03f, -2.764355135e-03f, -2.764408557e-03f, -2.764457198e-03f, -2.764501060e-03f, -2.764540141e-03f, -2.764574443e-03f, -2.764603966e-03f, -2.764628709e-03f, -2.764648674e-03f,
+-2.764663859e-03f, -2.764674266e-03f, -2.764679895e-03f, -2.764680746e-03f, -2.764676818e-03f, -2.764668113e-03f, -2.764654631e-03f, -2.764636372e-03f, -2.764613336e-03f, -2.764585523e-03f,
+-2.764552935e-03f, -2.764515570e-03f, -2.764473430e-03f, -2.764426514e-03f, -2.764374824e-03f, -2.764318359e-03f, -2.764257120e-03f, -2.764191107e-03f, -2.764120320e-03f, -2.764044760e-03f,
+-2.763964428e-03f, -2.763879323e-03f, -2.763789446e-03f, -2.763694797e-03f, -2.763595377e-03f, -2.763491187e-03f, -2.763382226e-03f, -2.763268496e-03f, -2.763149996e-03f, -2.763026727e-03f,
+-2.762898689e-03f, -2.762765883e-03f, -2.762628310e-03f, -2.762485970e-03f, -2.762338863e-03f, -2.762186990e-03f, -2.762030351e-03f, -2.761868948e-03f, -2.761702780e-03f, -2.761531847e-03f,
+-2.761356152e-03f, -2.761175693e-03f, -2.760990472e-03f, -2.760800490e-03f, -2.760605746e-03f, -2.760406241e-03f, -2.760201977e-03f, -2.759992953e-03f, -2.759779170e-03f, -2.759560630e-03f,
+-2.759337331e-03f, -2.759109276e-03f, -2.758876464e-03f, -2.758638897e-03f, -2.758396575e-03f, -2.758149498e-03f, -2.757897668e-03f, -2.757641085e-03f, -2.757379749e-03f, -2.757113662e-03f,
+-2.756842824e-03f, -2.756567236e-03f, -2.756286899e-03f, -2.756001813e-03f, -2.755711979e-03f, -2.755417397e-03f, -2.755118070e-03f, -2.754813996e-03f, -2.754505178e-03f, -2.754191616e-03f,
+-2.753873310e-03f, -2.753550262e-03f, -2.753222472e-03f, -2.752889941e-03f, -2.752552670e-03f, -2.752210660e-03f, -2.751863911e-03f, -2.751512425e-03f, -2.751156202e-03f, -2.750795244e-03f,
+-2.750429550e-03f, -2.750059122e-03f, -2.749683961e-03f, -2.749304067e-03f, -2.748919443e-03f, -2.748530087e-03f, -2.748136002e-03f, -2.747737189e-03f, -2.747333647e-03f, -2.746925379e-03f,
+-2.746512385e-03f, -2.746094667e-03f, -2.745672224e-03f, -2.745245058e-03f, -2.744813171e-03f, -2.744376562e-03f, -2.743935234e-03f, -2.743489186e-03f, -2.743038421e-03f, -2.742582939e-03f,
+-2.742122741e-03f, -2.741657828e-03f, -2.741188201e-03f, -2.740713862e-03f, -2.740234811e-03f, -2.739751049e-03f, -2.739262578e-03f, -2.738769399e-03f, -2.738271512e-03f, -2.737768919e-03f,
+-2.737261621e-03f, -2.736749619e-03f, -2.736232914e-03f, -2.735711507e-03f, -2.735185400e-03f, -2.734654594e-03f, -2.734119089e-03f, -2.733578887e-03f, -2.733033990e-03f, -2.732484397e-03f,
+-2.731930112e-03f, -2.731371133e-03f, -2.730807464e-03f, -2.730239105e-03f, -2.729666057e-03f, -2.729088322e-03f, -2.728505901e-03f, -2.727918795e-03f, -2.727327005e-03f, -2.726730533e-03f,
+-2.726129379e-03f, -2.725523546e-03f, -2.724913034e-03f, -2.724297845e-03f, -2.723677981e-03f, -2.723053441e-03f, -2.722424228e-03f, -2.721790344e-03f, -2.721151788e-03f, -2.720508564e-03f,
+-2.719860671e-03f, -2.719208112e-03f, -2.718550888e-03f, -2.717889000e-03f, -2.717222449e-03f, -2.716551238e-03f, -2.715875367e-03f, -2.715194837e-03f, -2.714509651e-03f, -2.713819810e-03f,
+-2.713125314e-03f, -2.712426167e-03f, -2.711722368e-03f, -2.711013919e-03f, -2.710300823e-03f, -2.709583080e-03f, -2.708860691e-03f, -2.708133659e-03f, -2.707401985e-03f, -2.706665670e-03f,
+-2.705924716e-03f, -2.705179125e-03f, -2.704428897e-03f, -2.703674035e-03f, -2.702914540e-03f, -2.702150413e-03f, -2.701381657e-03f, -2.700608272e-03f, -2.699830261e-03f, -2.699047624e-03f,
+-2.698260364e-03f, -2.697468482e-03f, -2.696671979e-03f, -2.695870858e-03f, -2.695065120e-03f, -2.694254766e-03f, -2.693439799e-03f, -2.692620219e-03f, -2.691796029e-03f, -2.690967229e-03f,
+-2.690133823e-03f, -2.689295811e-03f, -2.688453196e-03f, -2.687605978e-03f, -2.686754160e-03f, -2.685897743e-03f, -2.685036730e-03f, -2.684171121e-03f, -2.683300918e-03f, -2.682426124e-03f,
+-2.681546740e-03f, -2.680662767e-03f, -2.679774208e-03f, -2.678881064e-03f, -2.677983338e-03f, -2.677081030e-03f, -2.676174143e-03f, -2.675262678e-03f, -2.674346638e-03f, -2.673426024e-03f,
+-2.672500837e-03f, -2.671571081e-03f, -2.670636756e-03f, -2.669697864e-03f, -2.668754408e-03f, -2.667806389e-03f, -2.666853809e-03f, -2.665896670e-03f, -2.664934974e-03f, -2.663968723e-03f,
+-2.662997918e-03f, -2.662022562e-03f, -2.661042657e-03f, -2.660058204e-03f, -2.659069205e-03f, -2.658075662e-03f, -2.657077578e-03f, -2.656074954e-03f, -2.655067793e-03f, -2.654056095e-03f,
+-2.653039864e-03f, -2.652019100e-03f, -2.650993807e-03f, -2.649963986e-03f, -2.648929640e-03f, -2.647890769e-03f, -2.646847377e-03f, -2.645799465e-03f, -2.644747035e-03f, -2.643690090e-03f,
+-2.642628631e-03f, -2.641562661e-03f, -2.640492181e-03f, -2.639417194e-03f, -2.638337701e-03f, -2.637253706e-03f, -2.636165210e-03f, -2.635072214e-03f, -2.633974722e-03f, -2.632872735e-03f,
+-2.631766256e-03f, -2.630655286e-03f, -2.629539828e-03f, -2.628419884e-03f, -2.627295457e-03f, -2.626166547e-03f, -2.625033158e-03f, -2.623895292e-03f, -2.622752950e-03f, -2.621606136e-03f,
+-2.620454851e-03f, -2.619299097e-03f, -2.618138877e-03f, -2.616974194e-03f, -2.615805048e-03f, -2.614631443e-03f, -2.613453381e-03f, -2.612270863e-03f, -2.611083893e-03f, -2.609892473e-03f,
+-2.608696604e-03f, -2.607496290e-03f, -2.606291532e-03f, -2.605082333e-03f, -2.603868695e-03f, -2.602650621e-03f, -2.601428112e-03f, -2.600201171e-03f, -2.598969801e-03f, -2.597734004e-03f,
+-2.596493782e-03f, -2.595249137e-03f, -2.594000073e-03f, -2.592746590e-03f, -2.591488693e-03f, -2.590226383e-03f, -2.588959662e-03f, -2.587688533e-03f, -2.586412999e-03f, -2.585133061e-03f,
+-2.583848723e-03f, -2.582559986e-03f, -2.581266854e-03f, -2.579969329e-03f, -2.578667412e-03f, -2.577361107e-03f, -2.576050416e-03f, -2.574735342e-03f, -2.573415887e-03f, -2.572092054e-03f,
+-2.570763844e-03f, -2.569431261e-03f, -2.568094308e-03f, -2.566752986e-03f, -2.565407298e-03f, -2.564057248e-03f, -2.562702836e-03f, -2.561344067e-03f, -2.559980942e-03f, -2.558613464e-03f,
+-2.557241636e-03f, -2.555865460e-03f, -2.554484939e-03f, -2.553100076e-03f, -2.551710872e-03f, -2.550317332e-03f, -2.548919456e-03f, -2.547517249e-03f, -2.546110713e-03f, -2.544699850e-03f,
+-2.543284663e-03f, -2.541865154e-03f, -2.540441327e-03f, -2.539013184e-03f, -2.537580728e-03f, -2.536143961e-03f, -2.534702886e-03f, -2.533257506e-03f, -2.531807824e-03f, -2.530353842e-03f,
+-2.528895563e-03f, -2.527432990e-03f, -2.525966125e-03f, -2.524494972e-03f, -2.523019533e-03f, -2.521539811e-03f, -2.520055808e-03f, -2.518567528e-03f, -2.517074972e-03f, -2.515578145e-03f,
+-2.514077049e-03f, -2.512571686e-03f, -2.511062060e-03f, -2.509548174e-03f, -2.508030029e-03f, -2.506507629e-03f, -2.504980977e-03f, -2.503450076e-03f, -2.501914928e-03f, -2.500375537e-03f,
+-2.498831905e-03f, -2.497284036e-03f, -2.495731931e-03f, -2.494175595e-03f, -2.492615029e-03f, -2.491050237e-03f, -2.489481222e-03f, -2.487907987e-03f, -2.486330534e-03f, -2.484748867e-03f,
+-2.483162989e-03f, -2.481572902e-03f, -2.479978609e-03f, -2.478380114e-03f, -2.476777419e-03f, -2.475170528e-03f, -2.473559443e-03f, -2.471944167e-03f, -2.470324704e-03f, -2.468701057e-03f,
+-2.467073228e-03f, -2.465441220e-03f, -2.463805037e-03f, -2.462164681e-03f, -2.460520156e-03f, -2.458871465e-03f, -2.457218611e-03f, -2.455561596e-03f, -2.453900425e-03f, -2.452235099e-03f,
+-2.450565622e-03f, -2.448891998e-03f, -2.447214229e-03f, -2.445532318e-03f, -2.443846269e-03f, -2.442156085e-03f, -2.440461768e-03f, -2.438763323e-03f, -2.437060751e-03f, -2.435354057e-03f,
+-2.433643243e-03f, -2.431928313e-03f, -2.430209269e-03f, -2.428486116e-03f, -2.426758856e-03f, -2.425027492e-03f, -2.423292028e-03f, -2.421552466e-03f, -2.419808810e-03f, -2.418061064e-03f,
+-2.416309230e-03f, -2.414553312e-03f, -2.412793313e-03f, -2.411029236e-03f, -2.409261085e-03f, -2.407488862e-03f, -2.405712571e-03f, -2.403932216e-03f, -2.402147799e-03f, -2.400359324e-03f,
+-2.398566794e-03f, -2.396770213e-03f, -2.394969584e-03f, -2.393164910e-03f, -2.391356194e-03f, -2.389543440e-03f, -2.387726651e-03f, -2.385905831e-03f, -2.384080982e-03f, -2.382252109e-03f,
+-2.380419214e-03f, -2.378582302e-03f, -2.376741374e-03f, -2.374896436e-03f, -2.373047489e-03f, -2.371194538e-03f, -2.369337587e-03f, -2.367476637e-03f, -2.365611693e-03f, -2.363742759e-03f,
+-2.361869837e-03f, -2.359992931e-03f, -2.358112045e-03f, -2.356227182e-03f, -2.354338346e-03f, -2.352445539e-03f, -2.350548766e-03f, -2.348648030e-03f, -2.346743334e-03f, -2.344834682e-03f,
+-2.342922078e-03f, -2.341005524e-03f, -2.339085025e-03f, -2.337160584e-03f, -2.335232205e-03f, -2.333299890e-03f, -2.331363644e-03f, -2.329423471e-03f, -2.327479373e-03f, -2.325531354e-03f,
+-2.323579418e-03f, -2.321623569e-03f, -2.319663810e-03f, -2.317700144e-03f, -2.315732575e-03f, -2.313761107e-03f, -2.311785744e-03f, -2.309806489e-03f, -2.307823345e-03f, -2.305836317e-03f,
+-2.303845407e-03f, -2.301850620e-03f, -2.299851960e-03f, -2.297849429e-03f, -2.295843032e-03f, -2.293832772e-03f, -2.291818653e-03f, -2.289800678e-03f, -2.287778852e-03f, -2.285753177e-03f,
+-2.283723659e-03f, -2.281690299e-03f, -2.279653103e-03f, -2.277612074e-03f, -2.275567215e-03f, -2.273518530e-03f, -2.271466024e-03f, -2.269409699e-03f, -2.267349559e-03f, -2.265285609e-03f,
+-2.263217852e-03f, -2.261146292e-03f, -2.259070932e-03f, -2.256991777e-03f, -2.254908830e-03f, -2.252822095e-03f, -2.250731575e-03f, -2.248637275e-03f, -2.246539199e-03f, -2.244437350e-03f,
+-2.242331731e-03f, -2.240222348e-03f, -2.238109203e-03f, -2.235992301e-03f, -2.233871646e-03f, -2.231747240e-03f, -2.229619089e-03f, -2.227487196e-03f, -2.225351565e-03f, -2.223212200e-03f,
+-2.221069104e-03f, -2.218922282e-03f, -2.216771737e-03f, -2.214617474e-03f, -2.212459496e-03f, -2.210297807e-03f, -2.208132412e-03f, -2.205963313e-03f, -2.203790516e-03f, -2.201614023e-03f,
+-2.199433840e-03f, -2.197249970e-03f, -2.195062416e-03f, -2.192871183e-03f, -2.190676275e-03f, -2.188477696e-03f, -2.186275450e-03f, -2.184069541e-03f, -2.181859972e-03f, -2.179646748e-03f,
+-2.177429873e-03f, -2.175209351e-03f, -2.172985186e-03f, -2.170757382e-03f, -2.168525942e-03f, -2.166290872e-03f, -2.164052175e-03f, -2.161809855e-03f, -2.159563916e-03f, -2.157314362e-03f,
+-2.155061198e-03f, -2.152804427e-03f, -2.150544054e-03f, -2.148280082e-03f, -2.146012516e-03f, -2.143741360e-03f, -2.141466617e-03f, -2.139188293e-03f, -2.136906391e-03f, -2.134620915e-03f,
+-2.132331870e-03f, -2.130039259e-03f, -2.127743087e-03f, -2.125443358e-03f, -2.123140075e-03f, -2.120833245e-03f, -2.118522869e-03f, -2.116208953e-03f, -2.113891501e-03f, -2.111570516e-03f,
+-2.109246004e-03f, -2.106917968e-03f, -2.104586413e-03f, -2.102251343e-03f, -2.099912761e-03f, -2.097570673e-03f, -2.095225082e-03f, -2.092875993e-03f, -2.090523409e-03f, -2.088167336e-03f,
+-2.085807777e-03f, -2.083444737e-03f, -2.081078220e-03f, -2.078708230e-03f, -2.076334772e-03f, -2.073957849e-03f, -2.071577466e-03f, -2.069193628e-03f, -2.066806338e-03f, -2.064415602e-03f,
+-2.062021422e-03f, -2.059623805e-03f, -2.057222753e-03f, -2.054818271e-03f, -2.052410364e-03f, -2.049999036e-03f, -2.047584291e-03f, -2.045166134e-03f, -2.042744569e-03f, -2.040319600e-03f,
+-2.037891232e-03f, -2.035459468e-03f, -2.033024315e-03f, -2.030585775e-03f, -2.028143853e-03f, -2.025698555e-03f, -2.023249883e-03f, -2.020797842e-03f, -2.018342438e-03f, -2.015883673e-03f,
+-2.013421554e-03f, -2.010956084e-03f, -2.008487267e-03f, -2.006015108e-03f, -2.003539612e-03f, -2.001060782e-03f, -1.998578624e-03f, -1.996093142e-03f, -1.993604340e-03f, -1.991112223e-03f,
+-1.988616795e-03f, -1.986118061e-03f, -1.983616025e-03f, -1.981110692e-03f, -1.978602066e-03f, -1.976090152e-03f, -1.973574954e-03f, -1.971056477e-03f, -1.968534725e-03f, -1.966009703e-03f,
+-1.963481416e-03f, -1.960949867e-03f, -1.958415062e-03f, -1.955877005e-03f, -1.953335700e-03f, -1.950791153e-03f, -1.948243367e-03f, -1.945692348e-03f, -1.943138099e-03f, -1.940580626e-03f,
+-1.938019933e-03f, -1.935456024e-03f, -1.932888905e-03f, -1.930318579e-03f, -1.927745052e-03f, -1.925168328e-03f, -1.922588411e-03f, -1.920005307e-03f, -1.917419020e-03f, -1.914829554e-03f,
+-1.912236915e-03f, -1.909641106e-03f, -1.907042133e-03f, -1.904440000e-03f, -1.901834712e-03f, -1.899226273e-03f, -1.896614689e-03f, -1.893999963e-03f, -1.891382101e-03f, -1.888761107e-03f,
+-1.886136986e-03f, -1.883509742e-03f, -1.880879381e-03f, -1.878245907e-03f, -1.875609325e-03f, -1.872969639e-03f, -1.870326854e-03f, -1.867680975e-03f, -1.865032007e-03f, -1.862379954e-03f,
+-1.859724821e-03f, -1.857066613e-03f, -1.854405335e-03f, -1.851740991e-03f, -1.849073586e-03f, -1.846403125e-03f, -1.843729613e-03f, -1.841053054e-03f, -1.838373454e-03f, -1.835690817e-03f,
+-1.833005147e-03f, -1.830316450e-03f, -1.827624731e-03f, -1.824929994e-03f, -1.822232244e-03f, -1.819531485e-03f, -1.816827724e-03f, -1.814120964e-03f, -1.811411210e-03f, -1.808698468e-03f,
+-1.805982742e-03f, -1.803264037e-03f, -1.800542357e-03f, -1.797817708e-03f, -1.795090095e-03f, -1.792359522e-03f, -1.789625994e-03f, -1.786889516e-03f, -1.784150094e-03f, -1.781407731e-03f,
+-1.778662433e-03f, -1.775914205e-03f, -1.773163051e-03f, -1.770408977e-03f, -1.767651987e-03f, -1.764892086e-03f, -1.762129280e-03f, -1.759363573e-03f, -1.756594970e-03f, -1.753823476e-03f,
+-1.751049096e-03f, -1.748271835e-03f, -1.745491698e-03f, -1.742708690e-03f, -1.739922816e-03f, -1.737134080e-03f, -1.734342488e-03f, -1.731548045e-03f, -1.728750755e-03f, -1.725950624e-03f,
+-1.723147657e-03f, -1.720341858e-03f, -1.717533233e-03f, -1.714721787e-03f, -1.711907524e-03f, -1.709090450e-03f, -1.706270570e-03f, -1.703447888e-03f, -1.700622410e-03f, -1.697794141e-03f,
+-1.694963086e-03f, -1.692129250e-03f, -1.689292637e-03f, -1.686453253e-03f, -1.683611103e-03f, -1.680766193e-03f, -1.677918526e-03f, -1.675068109e-03f, -1.672214945e-03f, -1.669359041e-03f,
+-1.666500402e-03f, -1.663639032e-03f, -1.660774936e-03f, -1.657908120e-03f, -1.655038589e-03f, -1.652166348e-03f, -1.649291402e-03f, -1.646413755e-03f, -1.643533414e-03f, -1.640650383e-03f,
+-1.637764668e-03f, -1.634876273e-03f, -1.631985204e-03f, -1.629091466e-03f, -1.626195063e-03f, -1.623296002e-03f, -1.620394287e-03f, -1.617489923e-03f, -1.614582916e-03f, -1.611673271e-03f,
+-1.608760992e-03f, -1.605846086e-03f, -1.602928557e-03f, -1.600008410e-03f, -1.597085651e-03f, -1.594160284e-03f, -1.591232316e-03f, -1.588301751e-03f, -1.585368594e-03f, -1.582432851e-03f,
+-1.579494526e-03f, -1.576553626e-03f, -1.573610155e-03f, -1.570664118e-03f, -1.567715521e-03f, -1.564764369e-03f, -1.561810667e-03f, -1.558854420e-03f, -1.555895634e-03f, -1.552934314e-03f,
+-1.549970465e-03f, -1.547004092e-03f, -1.544035201e-03f, -1.541063797e-03f, -1.538089885e-03f, -1.535113470e-03f, -1.532134558e-03f, -1.529153154e-03f, -1.526169263e-03f, -1.523182891e-03f,
+-1.520194043e-03f, -1.517202724e-03f, -1.514208939e-03f, -1.511212694e-03f, -1.508213995e-03f, -1.505212845e-03f, -1.502209251e-03f, -1.499203218e-03f, -1.496194752e-03f, -1.493183857e-03f,
+-1.490170539e-03f, -1.487154803e-03f, -1.484136656e-03f, -1.481116101e-03f, -1.478093144e-03f, -1.475067791e-03f, -1.472040047e-03f, -1.469009918e-03f, -1.465977408e-03f, -1.462942523e-03f,
+-1.459905269e-03f, -1.456865651e-03f, -1.453823674e-03f, -1.450779344e-03f, -1.447732665e-03f, -1.444683645e-03f, -1.441632286e-03f, -1.438578597e-03f, -1.435522580e-03f, -1.432464243e-03f,
+-1.429403590e-03f, -1.426340627e-03f, -1.423275359e-03f, -1.420207792e-03f, -1.417137930e-03f, -1.414065781e-03f, -1.410991348e-03f, -1.407914638e-03f, -1.404835655e-03f, -1.401754406e-03f,
+-1.398670895e-03f, -1.395585128e-03f, -1.392497111e-03f, -1.389406849e-03f, -1.386314348e-03f, -1.383219612e-03f, -1.380122648e-03f, -1.377023461e-03f, -1.373922056e-03f, -1.370818439e-03f,
+-1.367712615e-03f, -1.364604590e-03f, -1.361494370e-03f, -1.358381959e-03f, -1.355267363e-03f, -1.352150588e-03f, -1.349031640e-03f, -1.345910523e-03f, -1.342787243e-03f, -1.339661807e-03f,
+-1.336534218e-03f, -1.333404484e-03f, -1.330272608e-03f, -1.327138598e-03f, -1.324002458e-03f, -1.320864194e-03f, -1.317723811e-03f, -1.314581316e-03f, -1.311436713e-03f, -1.308290008e-03f,
+-1.305141207e-03f, -1.301990314e-03f, -1.298837337e-03f, -1.295682280e-03f, -1.292525149e-03f, -1.289365949e-03f, -1.286204686e-03f, -1.283041366e-03f, -1.279875994e-03f, -1.276708576e-03f,
+-1.273539117e-03f, -1.270367623e-03f, -1.267194099e-03f, -1.264018551e-03f, -1.260840985e-03f, -1.257661407e-03f, -1.254479821e-03f, -1.251296234e-03f, -1.248110650e-03f, -1.244923077e-03f,
+-1.241733519e-03f, -1.238541981e-03f, -1.235348470e-03f, -1.232152992e-03f, -1.228955551e-03f, -1.225756153e-03f, -1.222554805e-03f, -1.219351511e-03f, -1.216146278e-03f, -1.212939110e-03f,
+-1.209730014e-03f, -1.206518996e-03f, -1.203306060e-03f, -1.200091213e-03f, -1.196874460e-03f, -1.193655807e-03f, -1.190435259e-03f, -1.187212823e-03f, -1.183988503e-03f, -1.180762306e-03f,
+-1.177534238e-03f, -1.174304303e-03f, -1.171072507e-03f, -1.167838857e-03f, -1.164603358e-03f, -1.161366016e-03f, -1.158126835e-03f, -1.154885823e-03f, -1.151642985e-03f, -1.148398326e-03f,
+-1.145151852e-03f, -1.141903569e-03f, -1.138653482e-03f, -1.135401598e-03f, -1.132147921e-03f, -1.128892458e-03f, -1.125635215e-03f, -1.122376197e-03f, -1.119115409e-03f, -1.115852859e-03f,
+-1.112588550e-03f, -1.109322489e-03f, -1.106054683e-03f, -1.102785135e-03f, -1.099513853e-03f, -1.096240842e-03f, -1.092966108e-03f, -1.089689656e-03f, -1.086411493e-03f, -1.083131623e-03f,
+-1.079850054e-03f, -1.076566789e-03f, -1.073281836e-03f, -1.069995200e-03f, -1.066706887e-03f, -1.063416903e-03f, -1.060125253e-03f, -1.056831942e-03f, -1.053536978e-03f, -1.050240366e-03f,
+-1.046942111e-03f, -1.043642219e-03f, -1.040340697e-03f, -1.037037549e-03f, -1.033732782e-03f, -1.030426401e-03f, -1.027118413e-03f, -1.023808822e-03f, -1.020497636e-03f, -1.017184859e-03f,
+-1.013870497e-03f, -1.010554557e-03f, -1.007237044e-03f, -1.003917964e-03f, -1.000597322e-03f, -9.972751250e-04f, -9.939513784e-04f, -9.906260880e-04f, -9.872992595e-04f, -9.839708990e-04f,
+-9.806410121e-04f, -9.773096047e-04f, -9.739766826e-04f, -9.706422518e-04f, -9.673063180e-04f, -9.639688870e-04f, -9.606299648e-04f, -9.572895572e-04f, -9.539476700e-04f, -9.506043090e-04f,
+-9.472594802e-04f, -9.439131894e-04f, -9.405654424e-04f, -9.372162452e-04f, -9.338656035e-04f, -9.305135232e-04f, -9.271600103e-04f, -9.238050705e-04f, -9.204487099e-04f, -9.170909341e-04f,
+-9.137317491e-04f, -9.103711609e-04f, -9.070091752e-04f, -9.036457979e-04f, -9.002810350e-04f, -8.969148924e-04f, -8.935473758e-04f, -8.901784913e-04f, -8.868082446e-04f, -8.834366418e-04f,
+-8.800636886e-04f, -8.766893911e-04f, -8.733137550e-04f, -8.699367864e-04f, -8.665584911e-04f, -8.631788749e-04f, -8.597979440e-04f, -8.564157040e-04f, -8.530321611e-04f, -8.496473209e-04f,
+-8.462611896e-04f, -8.428737730e-04f, -8.394850770e-04f, -8.360951076e-04f, -8.327038707e-04f, -8.293113722e-04f, -8.259176180e-04f, -8.225226141e-04f, -8.191263664e-04f, -8.157288808e-04f,
+-8.123301633e-04f, -8.089302198e-04f, -8.055290563e-04f, -8.021266786e-04f, -7.987230928e-04f, -7.953183048e-04f, -7.919123206e-04f, -7.885051460e-04f, -7.850967870e-04f, -7.816872496e-04f,
+-7.782765398e-04f, -7.748646635e-04f, -7.714516266e-04f, -7.680374352e-04f, -7.646220951e-04f, -7.612056123e-04f, -7.577879929e-04f, -7.543692428e-04f, -7.509493678e-04f, -7.475283741e-04f,
+-7.441062676e-04f, -7.406830542e-04f, -7.372587399e-04f, -7.338333308e-04f, -7.304068327e-04f, -7.269792517e-04f, -7.235505937e-04f, -7.201208648e-04f, -7.166900708e-04f, -7.132582179e-04f,
+-7.098253119e-04f, -7.063913589e-04f, -7.029563649e-04f, -6.995203358e-04f, -6.960832776e-04f, -6.926451964e-04f, -6.892060981e-04f, -6.857659887e-04f, -6.823248743e-04f, -6.788827608e-04f,
+-6.754396542e-04f, -6.719955606e-04f, -6.685504858e-04f, -6.651044361e-04f, -6.616574173e-04f, -6.582094354e-04f, -6.547604965e-04f, -6.513106066e-04f, -6.478597716e-04f, -6.444079977e-04f,
+-6.409552908e-04f, -6.375016569e-04f, -6.340471021e-04f, -6.305916324e-04f, -6.271352537e-04f, -6.236779722e-04f, -6.202197937e-04f, -6.167607245e-04f, -6.133007704e-04f, -6.098399376e-04f,
+-6.063782320e-04f, -6.029156596e-04f, -5.994522266e-04f, -5.959879388e-04f, -5.925228025e-04f, -5.890568235e-04f, -5.855900080e-04f, -5.821223619e-04f, -5.786538913e-04f, -5.751846023e-04f,
+-5.717145008e-04f, -5.682435930e-04f, -5.647718848e-04f, -5.612993823e-04f, -5.578260916e-04f, -5.543520186e-04f, -5.508771695e-04f, -5.474015503e-04f, -5.439251670e-04f, -5.404480257e-04f,
+-5.369701323e-04f, -5.334914931e-04f, -5.300121140e-04f, -5.265320011e-04f, -5.230511604e-04f, -5.195695980e-04f, -5.160873200e-04f, -5.126043323e-04f, -5.091206411e-04f, -5.056362524e-04f,
+-5.021511723e-04f, -4.986654068e-04f, -4.951789620e-04f, -4.916918439e-04f, -4.882040587e-04f, -4.847156124e-04f, -4.812265110e-04f, -4.777367606e-04f, -4.742463672e-04f, -4.707553371e-04f,
+-4.672636761e-04f, -4.637713904e-04f, -4.602784860e-04f, -4.567849690e-04f, -4.532908456e-04f, -4.497961217e-04f, -4.463008034e-04f, -4.428048968e-04f, -4.393084079e-04f, -4.358113430e-04f,
+-4.323137079e-04f, -4.288155088e-04f, -4.253167518e-04f, -4.218174429e-04f, -4.183175883e-04f, -4.148171940e-04f, -4.113162660e-04f, -4.078148105e-04f, -4.043128335e-04f, -4.008103411e-04f,
+-3.973073395e-04f, -3.938038346e-04f, -3.902998326e-04f, -3.867953395e-04f, -3.832903614e-04f, -3.797849044e-04f, -3.762789747e-04f, -3.727725782e-04f, -3.692657210e-04f, -3.657584093e-04f,
+-3.622506492e-04f, -3.587424466e-04f, -3.552338078e-04f, -3.517247387e-04f, -3.482152456e-04f, -3.447053343e-04f, -3.411950112e-04f, -3.376842822e-04f, -3.341731534e-04f, -3.306616309e-04f,
+-3.271497209e-04f, -3.236374293e-04f, -3.201247623e-04f, -3.166117260e-04f, -3.130983265e-04f, -3.095845699e-04f, -3.060704622e-04f, -3.025560095e-04f, -2.990412180e-04f, -2.955260937e-04f,
+-2.920106428e-04f, -2.884948713e-04f, -2.849787852e-04f, -2.814623908e-04f, -2.779456941e-04f, -2.744287012e-04f, -2.709114181e-04f, -2.673938511e-04f, -2.638760061e-04f, -2.603578893e-04f,
+-2.568395067e-04f, -2.533208645e-04f, -2.498019688e-04f, -2.462828256e-04f, -2.427634411e-04f, -2.392438213e-04f, -2.357239723e-04f, -2.322039003e-04f, -2.286836113e-04f, -2.251631114e-04f,
+-2.216424067e-04f, -2.181215034e-04f, -2.146004074e-04f, -2.110791250e-04f, -2.075576622e-04f, -2.040360250e-04f, -2.005142197e-04f, -1.969922522e-04f, -1.934701288e-04f, -1.899478554e-04f,
+-1.864254382e-04f, -1.829028832e-04f, -1.793801966e-04f, -1.758573845e-04f, -1.723344530e-04f, -1.688114081e-04f, -1.652882559e-04f, -1.617650026e-04f, -1.582416542e-04f, -1.547182169e-04f,
+-1.511946966e-04f, -1.476710996e-04f, -1.441474319e-04f, -1.406236997e-04f, -1.370999089e-04f, -1.335760657e-04f, -1.300521762e-04f, -1.265282465e-04f, -1.230042826e-04f, -1.194802908e-04f,
+-1.159562769e-04f, -1.124322473e-04f, -1.089082078e-04f, -1.053841648e-04f, -1.018601241e-04f, -9.833609193e-05f, -9.481207438e-05f, -9.128807752e-05f, -8.776410745e-05f, -8.424017026e-05f,
+-8.071627202e-05f, -7.719241884e-05f, -7.366861680e-05f, -7.014487198e-05f, -6.662119048e-05f, -6.309757838e-05f, -5.957404177e-05f, -5.605058673e-05f, -5.252721935e-05f, -4.900394571e-05f,
+-4.548077190e-05f, -4.195770401e-05f, -3.843474811e-05f, -3.491191029e-05f, -3.138919663e-05f, -2.786661322e-05f, -2.434416613e-05f, -2.082186145e-05f, -1.729970525e-05f, -1.377770362e-05f,
+-1.025586264e-05f, -6.734188376e-06f, -3.212686917e-06f, 3.086356630e-07f, 3.829773287e-06f, 7.350719879e-06f, 1.087146936e-05f, 1.439201567e-05f, 1.791235271e-05f, 2.143247443e-05f,
+2.495237474e-05f, 2.847204758e-05f, 3.199148687e-05f, 3.551068655e-05f, 3.902964054e-05f, 4.254834278e-05f, 4.606678719e-05f, 4.958496771e-05f, 5.310287827e-05f, 5.662051281e-05f,
+6.013786526e-05f, 6.365492955e-05f, 6.717169963e-05f, 7.068816942e-05f, 7.420433287e-05f, 7.772018392e-05f, 8.123571651e-05f, 8.475092457e-05f, 8.826580205e-05f, 9.178034290e-05f,
+9.529454104e-05f, 9.880839044e-05f, 1.023218850e-04f, 1.058350187e-04f, 1.093477856e-04f, 1.128601794e-04f, 1.163721942e-04f, 1.198838240e-04f, 1.233950626e-04f, 1.269059041e-04f,
+1.304163424e-04f, 1.339263714e-04f, 1.374359851e-04f, 1.409451775e-04f, 1.444539424e-04f, 1.479622740e-04f, 1.514701661e-04f, 1.549776126e-04f, 1.584846076e-04f, 1.619911450e-04f,
+1.654972188e-04f, 1.690028229e-04f, 1.725079514e-04f, 1.760125981e-04f, 1.795167570e-04f, 1.830204221e-04f, 1.865235875e-04f, 1.900262470e-04f, 1.935283945e-04f, 1.970300242e-04f,
+2.005311300e-04f, 2.040317058e-04f, 2.075317457e-04f, 2.110312435e-04f, 2.145301933e-04f, 2.180285891e-04f, 2.215264249e-04f, 2.250236945e-04f, 2.285203921e-04f, 2.320165116e-04f,
+2.355120470e-04f, 2.390069923e-04f, 2.425013414e-04f, 2.459950884e-04f, 2.494882273e-04f, 2.529807520e-04f, 2.564726565e-04f, 2.599639349e-04f, 2.634545812e-04f, 2.669445892e-04f,
+2.704339532e-04f, 2.739226669e-04f, 2.774107245e-04f, 2.808981200e-04f, 2.843848473e-04f, 2.878709006e-04f, 2.913562736e-04f, 2.948409606e-04f, 2.983249555e-04f, 3.018082523e-04f,
+3.052908451e-04f, 3.087727278e-04f, 3.122538945e-04f, 3.157343392e-04f, 3.192140559e-04f, 3.226930386e-04f, 3.261712814e-04f, 3.296487783e-04f, 3.331255233e-04f, 3.366015105e-04f,
+3.400767339e-04f, 3.435511875e-04f, 3.470248653e-04f, 3.504977615e-04f, 3.539698699e-04f, 3.574411848e-04f, 3.609117000e-04f, 3.643814097e-04f, 3.678503079e-04f, 3.713183887e-04f,
+3.747856460e-04f, 3.782520740e-04f, 3.817176667e-04f, 3.851824182e-04f, 3.886463224e-04f, 3.921093735e-04f, 3.955715656e-04f, 3.990328926e-04f, 4.024933487e-04f, 4.059529279e-04f,
+4.094116243e-04f, 4.128694320e-04f, 4.163263449e-04f, 4.197823573e-04f, 4.232374631e-04f, 4.266916565e-04f, 4.301449314e-04f, 4.335972821e-04f, 4.370487026e-04f, 4.404991869e-04f,
+4.439487292e-04f, 4.473973235e-04f, 4.508449640e-04f, 4.542916446e-04f, 4.577373596e-04f, 4.611821030e-04f, 4.646258688e-04f, 4.680686513e-04f, 4.715104445e-04f, 4.749512425e-04f,
+4.783910394e-04f, 4.818298293e-04f, 4.852676064e-04f, 4.887043647e-04f, 4.921400984e-04f, 4.955748015e-04f, 4.990084682e-04f, 5.024410926e-04f, 5.058726688e-04f, 5.093031910e-04f,
+5.127326533e-04f, 5.161610498e-04f, 5.195883746e-04f, 5.230146219e-04f, 5.264397858e-04f, 5.298638604e-04f, 5.332868399e-04f, 5.367087184e-04f, 5.401294901e-04f, 5.435491491e-04f,
+5.469676896e-04f, 5.503851057e-04f, 5.538013915e-04f, 5.572165413e-04f, 5.606305491e-04f, 5.640434092e-04f, 5.674551156e-04f, 5.708656626e-04f, 5.742750443e-04f, 5.776832550e-04f,
+5.810902887e-04f, 5.844961396e-04f, 5.879008019e-04f, 5.913042698e-04f, 5.947065375e-04f, 5.981075992e-04f, 6.015074489e-04f, 6.049060810e-04f, 6.083034897e-04f, 6.116996690e-04f,
+6.150946132e-04f, 6.184883165e-04f, 6.218807731e-04f, 6.252719772e-04f, 6.286619231e-04f, 6.320506048e-04f, 6.354380166e-04f, 6.388241528e-04f, 6.422090076e-04f, 6.455925750e-04f,
+6.489748495e-04f, 6.523558252e-04f, 6.557354963e-04f, 6.591138571e-04f, 6.624909017e-04f, 6.658666245e-04f, 6.692410196e-04f, 6.726140813e-04f, 6.759858039e-04f, 6.793561815e-04f,
+6.827252084e-04f, 6.860928789e-04f, 6.894591872e-04f, 6.928241276e-04f, 6.961876943e-04f, 6.995498816e-04f, 7.029106838e-04f, 7.062700950e-04f, 7.096281096e-04f, 7.129847219e-04f,
+7.163399261e-04f, 7.196937165e-04f, 7.230460873e-04f, 7.263970329e-04f, 7.297465476e-04f, 7.330946255e-04f, 7.364412611e-04f, 7.397864485e-04f, 7.431301822e-04f, 7.464724563e-04f,
+7.498132653e-04f, 7.531526033e-04f, 7.564904647e-04f, 7.598268439e-04f, 7.631617350e-04f, 7.664951325e-04f, 7.698270306e-04f, 7.731574237e-04f, 7.764863061e-04f, 7.798136722e-04f,
+7.831395161e-04f, 7.864638324e-04f, 7.897866152e-04f, 7.931078590e-04f, 7.964275581e-04f, 7.997457068e-04f, 8.030622995e-04f, 8.063773306e-04f, 8.096907943e-04f, 8.130026850e-04f,
+8.163129972e-04f, 8.196217251e-04f, 8.229288631e-04f, 8.262344056e-04f, 8.295383470e-04f, 8.328406816e-04f, 8.361414038e-04f, 8.394405080e-04f, 8.427379885e-04f, 8.460338399e-04f,
+8.493280563e-04f, 8.526206324e-04f, 8.559115623e-04f, 8.592008406e-04f, 8.624884616e-04f, 8.657744197e-04f, 8.690587094e-04f, 8.723413251e-04f, 8.756222611e-04f, 8.789015119e-04f,
+8.821790719e-04f, 8.854549356e-04f, 8.887290973e-04f, 8.920015515e-04f, 8.952722926e-04f, 8.985413151e-04f, 9.018086134e-04f, 9.050741819e-04f, 9.083380151e-04f, 9.116001075e-04f,
+9.148604535e-04f, 9.181190475e-04f, 9.213758840e-04f, 9.246309575e-04f, 9.278842624e-04f, 9.311357933e-04f, 9.343855445e-04f, 9.376335106e-04f, 9.408796860e-04f, 9.441240652e-04f,
+9.473666428e-04f, 9.506074131e-04f, 9.538463708e-04f, 9.570835102e-04f, 9.603188259e-04f, 9.635523125e-04f, 9.667839643e-04f, 9.700137759e-04f, 9.732417419e-04f, 9.764678567e-04f,
+9.796921149e-04f, 9.829145109e-04f, 9.861350394e-04f, 9.893536948e-04f, 9.925704717e-04f, 9.957853647e-04f, 9.989983682e-04f, 1.002209477e-03f, 1.005418685e-03f, 1.008625988e-03f,
+1.011831379e-03f, 1.015034853e-03f, 1.018236406e-03f, 1.021436031e-03f, 1.024633723e-03f, 1.027829476e-03f, 1.031023286e-03f, 1.034215147e-03f, 1.037405053e-03f, 1.040592998e-03f,
+1.043778979e-03f, 1.046962988e-03f, 1.050145022e-03f, 1.053325073e-03f, 1.056503138e-03f, 1.059679210e-03f, 1.062853284e-03f, 1.066025355e-03f, 1.069195417e-03f, 1.072363466e-03f,
+1.075529495e-03f, 1.078693500e-03f, 1.081855474e-03f, 1.085015413e-03f, 1.088173311e-03f, 1.091329163e-03f, 1.094482964e-03f, 1.097634708e-03f, 1.100784389e-03f, 1.103932003e-03f,
+1.107077545e-03f, 1.110221008e-03f, 1.113362387e-03f, 1.116501678e-03f, 1.119638875e-03f, 1.122773972e-03f, 1.125906965e-03f, 1.129037848e-03f, 1.132166615e-03f, 1.135293262e-03f,
+1.138417782e-03f, 1.141540172e-03f, 1.144660425e-03f, 1.147778536e-03f, 1.150894500e-03f, 1.154008312e-03f, 1.157119966e-03f, 1.160229457e-03f, 1.163336781e-03f, 1.166441930e-03f,
+1.169544902e-03f, 1.172645689e-03f, 1.175744287e-03f, 1.178840691e-03f, 1.181934895e-03f, 1.185026894e-03f, 1.188116684e-03f, 1.191204258e-03f, 1.194289611e-03f, 1.197372739e-03f,
+1.200453636e-03f, 1.203532297e-03f, 1.206608716e-03f, 1.209682889e-03f, 1.212754810e-03f, 1.215824474e-03f, 1.218891876e-03f, 1.221957010e-03f, 1.225019872e-03f, 1.228080457e-03f,
+1.231138759e-03f, 1.234194772e-03f, 1.237248493e-03f, 1.240299915e-03f, 1.243349034e-03f, 1.246395844e-03f, 1.249440340e-03f, 1.252482518e-03f, 1.255522371e-03f, 1.258559895e-03f,
+1.261595085e-03f, 1.264627936e-03f, 1.267658442e-03f, 1.270686598e-03f, 1.273712399e-03f, 1.276735841e-03f, 1.279756918e-03f, 1.282775624e-03f, 1.285791956e-03f, 1.288805907e-03f,
+1.291817473e-03f, 1.294826648e-03f, 1.297833428e-03f, 1.300837807e-03f, 1.303839781e-03f, 1.306839344e-03f, 1.309836491e-03f, 1.312831218e-03f, 1.315823518e-03f, 1.318813388e-03f,
+1.321800822e-03f, 1.324785814e-03f, 1.327768361e-03f, 1.330748457e-03f, 1.333726096e-03f, 1.336701275e-03f, 1.339673987e-03f, 1.342644229e-03f, 1.345611994e-03f, 1.348577278e-03f,
+1.351540076e-03f, 1.354500383e-03f, 1.357458194e-03f, 1.360413504e-03f, 1.363366308e-03f, 1.366316601e-03f, 1.369264378e-03f, 1.372209634e-03f, 1.375152364e-03f, 1.378092563e-03f,
+1.381030226e-03f, 1.383965349e-03f, 1.386897926e-03f, 1.389827952e-03f, 1.392755423e-03f, 1.395680333e-03f, 1.398602678e-03f, 1.401522453e-03f, 1.404439653e-03f, 1.407354272e-03f,
+1.410266306e-03f, 1.413175751e-03f, 1.416082600e-03f, 1.418986850e-03f, 1.421888495e-03f, 1.424787531e-03f, 1.427683953e-03f, 1.430577755e-03f, 1.433468933e-03f, 1.436357482e-03f,
+1.439243398e-03f, 1.442126674e-03f, 1.445007308e-03f, 1.447885293e-03f, 1.450760625e-03f, 1.453633299e-03f, 1.456503310e-03f, 1.459370653e-03f, 1.462235324e-03f, 1.465097318e-03f,
+1.467956629e-03f, 1.470813254e-03f, 1.473667187e-03f, 1.476518424e-03f, 1.479366959e-03f, 1.482212789e-03f, 1.485055907e-03f, 1.487896310e-03f, 1.490733993e-03f, 1.493568951e-03f,
+1.496401178e-03f, 1.499230672e-03f, 1.502057425e-03f, 1.504881435e-03f, 1.507702696e-03f, 1.510521203e-03f, 1.513336952e-03f, 1.516149938e-03f, 1.518960156e-03f, 1.521767602e-03f,
+1.524572271e-03f, 1.527374157e-03f, 1.530173258e-03f, 1.532969567e-03f, 1.535763080e-03f, 1.538553792e-03f, 1.541341699e-03f, 1.544126796e-03f, 1.546909079e-03f, 1.549688542e-03f,
+1.552465181e-03f, 1.555238992e-03f, 1.558009970e-03f, 1.560778109e-03f, 1.563543406e-03f, 1.566305856e-03f, 1.569065455e-03f, 1.571822196e-03f, 1.574576077e-03f, 1.577327092e-03f,
+1.580075237e-03f, 1.582820508e-03f, 1.585562898e-03f, 1.588302405e-03f, 1.591039023e-03f, 1.593772748e-03f, 1.596503575e-03f, 1.599231500e-03f, 1.601956518e-03f, 1.604678625e-03f,
+1.607397816e-03f, 1.610114086e-03f, 1.612827431e-03f, 1.615537847e-03f, 1.618245328e-03f, 1.620949871e-03f, 1.623651470e-03f, 1.626350122e-03f, 1.629045822e-03f, 1.631738565e-03f,
+1.634428346e-03f, 1.637115162e-03f, 1.639799008e-03f, 1.642479879e-03f, 1.645157771e-03f, 1.647832680e-03f, 1.650504600e-03f, 1.653173528e-03f, 1.655839459e-03f, 1.658502388e-03f,
+1.661162312e-03f, 1.663819225e-03f, 1.666473123e-03f, 1.669124002e-03f, 1.671771858e-03f, 1.674416685e-03f, 1.677058480e-03f, 1.679697238e-03f, 1.682332955e-03f, 1.684965626e-03f,
+1.687595248e-03f, 1.690221814e-03f, 1.692845322e-03f, 1.695465767e-03f, 1.698083144e-03f, 1.700697450e-03f, 1.703308679e-03f, 1.705916827e-03f, 1.708521890e-03f, 1.711123864e-03f,
+1.713722745e-03f, 1.716318527e-03f, 1.718911208e-03f, 1.721500781e-03f, 1.724087244e-03f, 1.726670591e-03f, 1.729250819e-03f, 1.731827923e-03f, 1.734401899e-03f, 1.736972742e-03f,
+1.739540449e-03f, 1.742105015e-03f, 1.744666435e-03f, 1.747224706e-03f, 1.749779824e-03f, 1.752331783e-03f, 1.754880580e-03f, 1.757426211e-03f, 1.759968671e-03f, 1.762507956e-03f,
+1.765044061e-03f, 1.767576984e-03f, 1.770106719e-03f, 1.772633262e-03f, 1.775156609e-03f, 1.777676755e-03f, 1.780193698e-03f, 1.782707432e-03f, 1.785217953e-03f, 1.787725257e-03f,
+1.790229340e-03f, 1.792730198e-03f, 1.795227826e-03f, 1.797722221e-03f, 1.800213379e-03f, 1.802701294e-03f, 1.805185964e-03f, 1.807667383e-03f, 1.810145548e-03f, 1.812620455e-03f,
+1.815092100e-03f, 1.817560478e-03f, 1.820025585e-03f, 1.822487418e-03f, 1.824945972e-03f, 1.827401243e-03f, 1.829853228e-03f, 1.832301921e-03f, 1.834747319e-03f, 1.837189418e-03f,
+1.839628214e-03f, 1.842063703e-03f, 1.844495881e-03f, 1.846924743e-03f, 1.849350286e-03f, 1.851772506e-03f, 1.854191398e-03f, 1.856606959e-03f, 1.859019185e-03f, 1.861428072e-03f,
+1.863833615e-03f, 1.866235811e-03f, 1.868634656e-03f, 1.871030145e-03f, 1.873422275e-03f, 1.875811042e-03f, 1.878196442e-03f, 1.880578471e-03f, 1.882957125e-03f, 1.885332400e-03f,
+1.887704293e-03f, 1.890072798e-03f, 1.892437913e-03f, 1.894799633e-03f, 1.897157955e-03f, 1.899512874e-03f, 1.901864387e-03f, 1.904212490e-03f, 1.906557179e-03f, 1.908898450e-03f,
+1.911236299e-03f, 1.913570722e-03f, 1.915901716e-03f, 1.918229276e-03f, 1.920553400e-03f, 1.922874082e-03f, 1.925191319e-03f, 1.927505108e-03f, 1.929815444e-03f, 1.932122324e-03f,
+1.934425744e-03f, 1.936725700e-03f, 1.939022188e-03f, 1.941315205e-03f, 1.943604746e-03f, 1.945890808e-03f, 1.948173388e-03f, 1.950452481e-03f, 1.952728083e-03f, 1.955000192e-03f,
+1.957268802e-03f, 1.959533911e-03f, 1.961795515e-03f, 1.964053609e-03f, 1.966308191e-03f, 1.968559257e-03f, 1.970806802e-03f, 1.973050823e-03f, 1.975291317e-03f, 1.977528280e-03f,
+1.979761707e-03f, 1.981991596e-03f, 1.984217943e-03f, 1.986440744e-03f, 1.988659995e-03f, 1.990875693e-03f, 1.993087834e-03f, 1.995296414e-03f, 1.997501431e-03f, 1.999702879e-03f,
+2.001900757e-03f, 2.004095059e-03f, 2.006285782e-03f, 2.008472924e-03f, 2.010656479e-03f, 2.012836445e-03f, 2.015012819e-03f, 2.017185595e-03f, 2.019354772e-03f, 2.021520345e-03f,
+2.023682310e-03f, 2.025840665e-03f, 2.027995406e-03f, 2.030146529e-03f, 2.032294030e-03f, 2.034437907e-03f, 2.036578155e-03f, 2.038714771e-03f, 2.040847751e-03f, 2.042977093e-03f,
+2.045102793e-03f, 2.047224846e-03f, 2.049343250e-03f, 2.051458002e-03f, 2.053569097e-03f, 2.055676532e-03f, 2.057780304e-03f, 2.059880409e-03f, 2.061976845e-03f, 2.064069607e-03f,
+2.066158691e-03f, 2.068244096e-03f, 2.070325817e-03f, 2.072403850e-03f, 2.074478193e-03f, 2.076548842e-03f, 2.078615794e-03f, 2.080679045e-03f, 2.082738592e-03f, 2.084794431e-03f,
+2.086846560e-03f, 2.088894974e-03f, 2.090939671e-03f, 2.092980647e-03f, 2.095017899e-03f, 2.097051423e-03f, 2.099081217e-03f, 2.101107276e-03f, 2.103129598e-03f, 2.105148179e-03f,
+2.107163016e-03f, 2.109174106e-03f, 2.111181445e-03f, 2.113185031e-03f, 2.115184859e-03f, 2.117180926e-03f, 2.119173231e-03f, 2.121161768e-03f, 2.123146535e-03f, 2.125127528e-03f,
+2.127104745e-03f, 2.129078183e-03f, 2.131047837e-03f, 2.133013705e-03f, 2.134975783e-03f, 2.136934069e-03f, 2.138888559e-03f, 2.140839250e-03f, 2.142786139e-03f, 2.144729223e-03f,
+2.146668498e-03f, 2.148603961e-03f, 2.150535610e-03f, 2.152463440e-03f, 2.154387450e-03f, 2.156307636e-03f, 2.158223994e-03f, 2.160136522e-03f, 2.162045216e-03f, 2.163950073e-03f,
+2.165851091e-03f, 2.167748267e-03f, 2.169641596e-03f, 2.171531076e-03f, 2.173416704e-03f, 2.175298478e-03f, 2.177176393e-03f, 2.179050447e-03f, 2.180920637e-03f, 2.182786959e-03f,
+2.184649412e-03f, 2.186507991e-03f, 2.188362694e-03f, 2.190213517e-03f, 2.192060459e-03f, 2.193903515e-03f, 2.195742683e-03f, 2.197577959e-03f, 2.199409342e-03f, 2.201236827e-03f,
+2.203060413e-03f, 2.204880095e-03f, 2.206695871e-03f, 2.208507738e-03f, 2.210315694e-03f, 2.212119735e-03f, 2.213919858e-03f, 2.215716060e-03f, 2.217508339e-03f, 2.219296692e-03f,
+2.221081116e-03f, 2.222861607e-03f, 2.224638163e-03f, 2.226410782e-03f, 2.228179460e-03f, 2.229944194e-03f, 2.231704982e-03f, 2.233461820e-03f, 2.235214707e-03f, 2.236963638e-03f,
+2.238708612e-03f, 2.240449625e-03f, 2.242186675e-03f, 2.243919759e-03f, 2.245648874e-03f, 2.247374018e-03f, 2.249095187e-03f, 2.250812378e-03f, 2.252525590e-03f, 2.254234819e-03f,
+2.255940062e-03f, 2.257641318e-03f, 2.259338582e-03f, 2.261031853e-03f, 2.262721127e-03f, 2.264406402e-03f, 2.266087675e-03f, 2.267764944e-03f, 2.269438206e-03f, 2.271107458e-03f,
+2.272772697e-03f, 2.274433921e-03f, 2.276091127e-03f, 2.277744313e-03f, 2.279393476e-03f, 2.281038612e-03f, 2.282679721e-03f, 2.284316798e-03f, 2.285949841e-03f, 2.287578849e-03f,
+2.289203817e-03f, 2.290824744e-03f, 2.292441627e-03f, 2.294054463e-03f, 2.295663250e-03f, 2.297267985e-03f, 2.298868666e-03f, 2.300465289e-03f, 2.302057854e-03f, 2.303646356e-03f,
+2.305230794e-03f, 2.306811165e-03f, 2.308387466e-03f, 2.309959695e-03f, 2.311527849e-03f, 2.313091927e-03f, 2.314651924e-03f, 2.316207840e-03f, 2.317759671e-03f, 2.319307416e-03f,
+2.320851070e-03f, 2.322390633e-03f, 2.323926102e-03f, 2.325457473e-03f, 2.326984746e-03f, 2.328507916e-03f, 2.330026983e-03f, 2.331541943e-03f, 2.333052795e-03f, 2.334559535e-03f,
+2.336062161e-03f, 2.337560671e-03f, 2.339055063e-03f, 2.340545334e-03f, 2.342031482e-03f, 2.343513505e-03f, 2.344991399e-03f, 2.346465164e-03f, 2.347934796e-03f, 2.349400293e-03f,
+2.350861652e-03f, 2.352318873e-03f, 2.353771951e-03f, 2.355220886e-03f, 2.356665674e-03f, 2.358106314e-03f, 2.359542803e-03f, 2.360975138e-03f, 2.362403318e-03f, 2.363827341e-03f,
+2.365247203e-03f, 2.366662904e-03f, 2.368074440e-03f, 2.369481809e-03f, 2.370885010e-03f, 2.372284040e-03f, 2.373678896e-03f, 2.375069577e-03f, 2.376456080e-03f, 2.377838404e-03f,
+2.379216546e-03f, 2.380590503e-03f, 2.381960275e-03f, 2.383325857e-03f, 2.384687250e-03f, 2.386044450e-03f, 2.387397454e-03f, 2.388746262e-03f, 2.390090871e-03f, 2.391431279e-03f,
+2.392767484e-03f, 2.394099483e-03f, 2.395427275e-03f, 2.396750857e-03f, 2.398070228e-03f, 2.399385386e-03f, 2.400696327e-03f, 2.402003051e-03f, 2.403305555e-03f, 2.404603838e-03f,
+2.405897896e-03f, 2.407187729e-03f, 2.408473334e-03f, 2.409754709e-03f, 2.411031853e-03f, 2.412304763e-03f, 2.413573436e-03f, 2.414837873e-03f, 2.416098069e-03f, 2.417354024e-03f,
+2.418605735e-03f, 2.419853201e-03f, 2.421096419e-03f, 2.422335388e-03f, 2.423570105e-03f, 2.424800570e-03f, 2.426026779e-03f, 2.427248731e-03f, 2.428466424e-03f, 2.429679857e-03f,
+2.430889026e-03f, 2.432093932e-03f, 2.433294570e-03f, 2.434490941e-03f, 2.435683042e-03f, 2.436870870e-03f, 2.438054425e-03f, 2.439233704e-03f, 2.440408706e-03f, 2.441579429e-03f,
+2.442745871e-03f, 2.443908029e-03f, 2.445065904e-03f, 2.446219492e-03f, 2.447368792e-03f, 2.448513802e-03f, 2.449654520e-03f, 2.450790945e-03f, 2.451923075e-03f, 2.453050908e-03f,
+2.454174443e-03f, 2.455293677e-03f, 2.456408609e-03f, 2.457519238e-03f, 2.458625561e-03f, 2.459727577e-03f, 2.460825285e-03f, 2.461918682e-03f, 2.463007767e-03f, 2.464092538e-03f,
+2.465172993e-03f, 2.466249132e-03f, 2.467320952e-03f, 2.468388452e-03f, 2.469451630e-03f, 2.470510484e-03f, 2.471565014e-03f, 2.472615216e-03f, 2.473661091e-03f, 2.474702635e-03f,
+2.475739848e-03f, 2.476772728e-03f, 2.477801273e-03f, 2.478825482e-03f, 2.479845354e-03f, 2.480860886e-03f, 2.481872078e-03f, 2.482878927e-03f, 2.483881433e-03f, 2.484879593e-03f,
+2.485873407e-03f, 2.486862872e-03f, 2.487847988e-03f, 2.488828752e-03f, 2.489805164e-03f, 2.490777222e-03f, 2.491744924e-03f, 2.492708269e-03f, 2.493667255e-03f, 2.494621882e-03f,
+2.495572147e-03f, 2.496518050e-03f, 2.497459588e-03f, 2.498396761e-03f, 2.499329567e-03f, 2.500258005e-03f, 2.501182073e-03f, 2.502101770e-03f, 2.503017095e-03f, 2.503928046e-03f,
+2.504834621e-03f, 2.505736821e-03f, 2.506634642e-03f, 2.507528085e-03f, 2.508417147e-03f, 2.509301827e-03f, 2.510182125e-03f, 2.511058038e-03f, 2.511929565e-03f, 2.512796706e-03f,
+2.513659458e-03f, 2.514517821e-03f, 2.515371794e-03f, 2.516221374e-03f, 2.517066562e-03f, 2.517907355e-03f, 2.518743752e-03f, 2.519575753e-03f, 2.520403356e-03f, 2.521226559e-03f,
+2.522045363e-03f, 2.522859764e-03f, 2.523669763e-03f, 2.524475358e-03f, 2.525276548e-03f, 2.526073331e-03f, 2.526865708e-03f, 2.527653675e-03f, 2.528437233e-03f, 2.529216381e-03f,
+2.529991116e-03f, 2.530761439e-03f, 2.531527347e-03f, 2.532288840e-03f, 2.533045917e-03f, 2.533798577e-03f, 2.534546818e-03f, 2.535290639e-03f, 2.536030041e-03f, 2.536765020e-03f,
+2.537495577e-03f, 2.538221711e-03f, 2.538943419e-03f, 2.539660702e-03f, 2.540373559e-03f, 2.541081987e-03f, 2.541785987e-03f, 2.542485558e-03f, 2.543180697e-03f, 2.543871405e-03f,
+2.544557681e-03f, 2.545239523e-03f, 2.545916931e-03f, 2.546589903e-03f, 2.547258439e-03f, 2.547922537e-03f, 2.548582198e-03f, 2.549237419e-03f, 2.549888200e-03f, 2.550534541e-03f,
+2.551176440e-03f, 2.551813896e-03f, 2.552446908e-03f, 2.553075477e-03f, 2.553699600e-03f, 2.554319277e-03f, 2.554934507e-03f, 2.555545289e-03f, 2.556151623e-03f, 2.556753508e-03f,
+2.557350942e-03f, 2.557943926e-03f, 2.558532457e-03f, 2.559116537e-03f, 2.559696162e-03f, 2.560271334e-03f, 2.560842051e-03f, 2.561408313e-03f, 2.561970118e-03f, 2.562527466e-03f,
+2.563080356e-03f, 2.563628787e-03f, 2.564172760e-03f, 2.564712272e-03f, 2.565247324e-03f, 2.565777915e-03f, 2.566304043e-03f, 2.566825709e-03f, 2.567342911e-03f, 2.567855650e-03f,
+2.568363924e-03f, 2.568867732e-03f, 2.569367075e-03f, 2.569861951e-03f, 2.570352360e-03f, 2.570838301e-03f, 2.571319773e-03f, 2.571796777e-03f, 2.572269311e-03f, 2.572737375e-03f,
+2.573200968e-03f, 2.573660089e-03f, 2.574114739e-03f, 2.574564917e-03f, 2.575010621e-03f, 2.575451852e-03f, 2.575888609e-03f, 2.576320891e-03f, 2.576748699e-03f, 2.577172031e-03f,
+2.577590886e-03f, 2.578005265e-03f, 2.578415168e-03f, 2.578820592e-03f, 2.579221539e-03f, 2.579618007e-03f, 2.580009996e-03f, 2.580397506e-03f, 2.580780537e-03f, 2.581159087e-03f,
+2.581533156e-03f, 2.581902745e-03f, 2.582267852e-03f, 2.582628477e-03f, 2.582984620e-03f, 2.583336281e-03f, 2.583683458e-03f, 2.584026152e-03f, 2.584364363e-03f, 2.584698089e-03f,
+2.585027332e-03f, 2.585352089e-03f, 2.585672362e-03f, 2.585988149e-03f, 2.586299450e-03f, 2.586606266e-03f, 2.586908595e-03f, 2.587206438e-03f, 2.587499794e-03f, 2.587788663e-03f,
+2.588073044e-03f, 2.588352938e-03f, 2.588628344e-03f, 2.588899262e-03f, 2.589165692e-03f, 2.589427633e-03f, 2.589685085e-03f, 2.589938049e-03f, 2.590186523e-03f, 2.590430508e-03f,
+2.590670003e-03f, 2.590905009e-03f, 2.591135524e-03f, 2.591361550e-03f, 2.591583085e-03f, 2.591800130e-03f, 2.592012685e-03f, 2.592220749e-03f, 2.592424322e-03f, 2.592623404e-03f,
+2.592817996e-03f, 2.593008096e-03f, 2.593193705e-03f, 2.593374823e-03f, 2.593551449e-03f, 2.593723584e-03f, 2.593891228e-03f, 2.594054380e-03f, 2.594213041e-03f, 2.594367210e-03f,
+2.594516887e-03f, 2.594662073e-03f, 2.594802767e-03f, 2.594938969e-03f, 2.595070680e-03f, 2.595197899e-03f, 2.595320626e-03f, 2.595438862e-03f, 2.595552606e-03f, 2.595661858e-03f,
+2.595766619e-03f, 2.595866889e-03f, 2.595962667e-03f, 2.596053954e-03f, 2.596140750e-03f, 2.596223054e-03f, 2.596300868e-03f, 2.596374190e-03f, 2.596443022e-03f, 2.596507363e-03f,
+2.596567213e-03f, 2.596622573e-03f, 2.596673442e-03f, 2.596719822e-03f, 2.596761711e-03f, 2.596799110e-03f, 2.596832020e-03f, 2.596860440e-03f, 2.596884371e-03f, 2.596903813e-03f,
+2.596918766e-03f, 2.596929230e-03f, 2.596935205e-03f, 2.596936693e-03f, 2.596933692e-03f, 2.596926204e-03f, 2.596914227e-03f, 2.596897764e-03f, 2.596876814e-03f, 2.596851377e-03f,
+2.596821453e-03f, 2.596787043e-03f, 2.596748147e-03f, 2.596704766e-03f, 2.596656899e-03f, 2.596604548e-03f, 2.596547712e-03f, 2.596486391e-03f, 2.596420587e-03f, 2.596350299e-03f,
+2.596275527e-03f, 2.596196273e-03f, 2.596112536e-03f, 2.596024317e-03f, 2.595931617e-03f, 2.595834435e-03f, 2.595732772e-03f, 2.595626628e-03f, 2.595516005e-03f, 2.595400902e-03f,
+2.595281319e-03f, 2.595157258e-03f, 2.595028718e-03f, 2.594895700e-03f, 2.594758205e-03f, 2.594616233e-03f, 2.594469785e-03f, 2.594318860e-03f, 2.594163460e-03f, 2.594003585e-03f,
+2.593839236e-03f, 2.593670412e-03f, 2.593497115e-03f, 2.593319346e-03f, 2.593137104e-03f, 2.592950390e-03f, 2.592759204e-03f, 2.592563548e-03f, 2.592363422e-03f, 2.592158827e-03f,
+2.591949762e-03f, 2.591736229e-03f, 2.591518229e-03f, 2.591295761e-03f, 2.591068827e-03f, 2.590837427e-03f, 2.590601561e-03f, 2.590361231e-03f, 2.590116437e-03f, 2.589867180e-03f,
+2.589613460e-03f, 2.589355278e-03f, 2.589092635e-03f, 2.588825531e-03f, 2.588553968e-03f, 2.588277945e-03f, 2.587997463e-03f, 2.587712524e-03f, 2.587423128e-03f, 2.587129276e-03f,
+2.586830968e-03f, 2.586528205e-03f, 2.586220988e-03f, 2.585909318e-03f, 2.585593195e-03f, 2.585272621e-03f, 2.584947596e-03f, 2.584618120e-03f, 2.584284195e-03f, 2.583945822e-03f,
+2.583603001e-03f, 2.583255733e-03f, 2.582904019e-03f, 2.582547860e-03f, 2.582187256e-03f, 2.581822209e-03f, 2.581452720e-03f, 2.581078788e-03f, 2.580700416e-03f, 2.580317603e-03f,
+2.579930352e-03f, 2.579538662e-03f, 2.579142535e-03f, 2.578741972e-03f, 2.578336973e-03f, 2.577927540e-03f, 2.577513673e-03f, 2.577095373e-03f, 2.576672642e-03f, 2.576245480e-03f,
+2.575813889e-03f, 2.575377868e-03f, 2.574937420e-03f, 2.574492545e-03f, 2.574043245e-03f, 2.573589519e-03f, 2.573131370e-03f, 2.572668798e-03f, 2.572201804e-03f, 2.571730390e-03f,
+2.571254556e-03f, 2.570774304e-03f, 2.570289634e-03f, 2.569800548e-03f, 2.569307046e-03f, 2.568809130e-03f, 2.568306801e-03f, 2.567800060e-03f, 2.567288908e-03f, 2.566773346e-03f,
+2.566253375e-03f, 2.565728997e-03f, 2.565200212e-03f, 2.564667023e-03f, 2.564129428e-03f, 2.563587431e-03f, 2.563041033e-03f, 2.562490233e-03f, 2.561935034e-03f, 2.561375437e-03f,
+2.560811442e-03f, 2.560243052e-03f, 2.559670267e-03f, 2.559093089e-03f, 2.558511519e-03f, 2.557925557e-03f, 2.557335206e-03f, 2.556740467e-03f, 2.556141340e-03f, 2.555537827e-03f,
+2.554929930e-03f, 2.554317649e-03f, 2.553700986e-03f, 2.553079942e-03f, 2.552454519e-03f, 2.551824718e-03f, 2.551190540e-03f, 2.550551986e-03f, 2.549909058e-03f, 2.549261757e-03f,
+2.548610085e-03f, 2.547954042e-03f, 2.547293631e-03f, 2.546628852e-03f, 2.545959708e-03f, 2.545286198e-03f, 2.544608325e-03f, 2.543926091e-03f, 2.543239496e-03f, 2.542548542e-03f,
+2.541853230e-03f, 2.541153562e-03f, 2.540449540e-03f, 2.539741164e-03f, 2.539028436e-03f, 2.538311358e-03f, 2.537589931e-03f, 2.536864157e-03f, 2.536134036e-03f, 2.535399571e-03f,
+2.534660763e-03f, 2.533917614e-03f, 2.533170125e-03f, 2.532418297e-03f, 2.531662132e-03f, 2.530901633e-03f, 2.530136799e-03f, 2.529367633e-03f, 2.528594136e-03f, 2.527816310e-03f,
+2.527034156e-03f, 2.526247677e-03f, 2.525456873e-03f, 2.524661746e-03f, 2.523862298e-03f, 2.523058531e-03f, 2.522250445e-03f, 2.521438043e-03f, 2.520621326e-03f, 2.519800296e-03f,
+2.518974955e-03f, 2.518145304e-03f, 2.517311345e-03f, 2.516473079e-03f, 2.515630509e-03f, 2.514783635e-03f, 2.513932460e-03f, 2.513076986e-03f, 2.512217213e-03f, 2.511353144e-03f,
+2.510484780e-03f, 2.509612124e-03f, 2.508735176e-03f, 2.507853939e-03f, 2.506968415e-03f, 2.506078604e-03f, 2.505184509e-03f, 2.504286132e-03f, 2.503383475e-03f, 2.502476539e-03f,
+2.501565325e-03f, 2.500649837e-03f, 2.499730075e-03f, 2.498806041e-03f, 2.497877738e-03f, 2.496945167e-03f, 2.496008330e-03f, 2.495067228e-03f, 2.494121865e-03f, 2.493172240e-03f,
+2.492218357e-03f, 2.491260217e-03f, 2.490297823e-03f, 2.489331175e-03f, 2.488360276e-03f, 2.487385128e-03f, 2.486405733e-03f, 2.485422092e-03f, 2.484434208e-03f, 2.483442082e-03f,
+2.482445716e-03f, 2.481445113e-03f, 2.480440274e-03f, 2.479431202e-03f, 2.478417898e-03f, 2.477400363e-03f, 2.476378601e-03f, 2.475352614e-03f, 2.474322402e-03f, 2.473287968e-03f,
+2.472249315e-03f, 2.471206444e-03f, 2.470159357e-03f, 2.469108056e-03f, 2.468052544e-03f, 2.466992822e-03f, 2.465928892e-03f, 2.464860757e-03f, 2.463788418e-03f, 2.462711878e-03f,
+2.461631138e-03f, 2.460546202e-03f, 2.459457070e-03f, 2.458363745e-03f, 2.457266229e-03f, 2.456164524e-03f, 2.455058633e-03f, 2.453948557e-03f, 2.452834298e-03f, 2.451715860e-03f,
+2.450593243e-03f, 2.449466450e-03f, 2.448335484e-03f, 2.447200345e-03f, 2.446061038e-03f, 2.444917563e-03f, 2.443769923e-03f, 2.442618120e-03f, 2.441462157e-03f, 2.440302035e-03f,
+2.439137757e-03f, 2.437969325e-03f, 2.436796741e-03f, 2.435620008e-03f, 2.434439127e-03f, 2.433254102e-03f, 2.432064934e-03f, 2.430871625e-03f, 2.429674178e-03f, 2.428472596e-03f,
+2.427266880e-03f, 2.426057032e-03f, 2.424843056e-03f, 2.423624952e-03f, 2.422402725e-03f, 2.421176376e-03f, 2.419945907e-03f, 2.418711320e-03f, 2.417472619e-03f, 2.416229805e-03f,
+2.414982881e-03f, 2.413731848e-03f, 2.412476711e-03f, 2.411217470e-03f, 2.409954129e-03f, 2.408686689e-03f, 2.407415153e-03f, 2.406139524e-03f, 2.404859804e-03f, 2.403575995e-03f,
+2.402288100e-03f, 2.400996121e-03f, 2.399700061e-03f, 2.398399922e-03f, 2.397095706e-03f, 2.395787417e-03f, 2.394475056e-03f, 2.393158626e-03f, 2.391838130e-03f, 2.390513569e-03f,
+2.389184948e-03f, 2.387852267e-03f, 2.386515529e-03f, 2.385174738e-03f, 2.383829896e-03f, 2.382481004e-03f, 2.381128066e-03f, 2.379771085e-03f, 2.378410062e-03f, 2.377045000e-03f,
+2.375675903e-03f, 2.374302771e-03f, 2.372925609e-03f, 2.371544419e-03f, 2.370159203e-03f, 2.368769964e-03f, 2.367376704e-03f, 2.365979427e-03f, 2.364578134e-03f, 2.363172828e-03f,
+2.361763513e-03f, 2.360350190e-03f, 2.358932862e-03f, 2.357511533e-03f, 2.356086204e-03f, 2.354656878e-03f, 2.353223559e-03f, 2.351786248e-03f, 2.350344949e-03f, 2.348899663e-03f,
+2.347450394e-03f, 2.345997145e-03f, 2.344539918e-03f, 2.343078716e-03f, 2.341613542e-03f, 2.340144398e-03f, 2.338671288e-03f, 2.337194213e-03f, 2.335713177e-03f, 2.334228182e-03f,
+2.332739232e-03f, 2.331246328e-03f, 2.329749475e-03f, 2.328248674e-03f, 2.326743928e-03f, 2.325235241e-03f, 2.323722615e-03f, 2.322206052e-03f, 2.320685557e-03f, 2.319161130e-03f,
+2.317632776e-03f, 2.316100498e-03f, 2.314564297e-03f, 2.313024177e-03f, 2.311480141e-03f, 2.309932192e-03f, 2.308380332e-03f, 2.306824565e-03f, 2.305264893e-03f, 2.303701319e-03f,
+2.302133846e-03f, 2.300562478e-03f, 2.298987216e-03f, 2.297408065e-03f, 2.295825026e-03f, 2.294238103e-03f, 2.292647298e-03f, 2.291052615e-03f, 2.289454057e-03f, 2.287851627e-03f,
+2.286245327e-03f, 2.284635161e-03f, 2.283021131e-03f, 2.281403240e-03f, 2.279781493e-03f, 2.278155890e-03f, 2.276526437e-03f, 2.274893135e-03f, 2.273255987e-03f, 2.271614997e-03f,
+2.269970168e-03f, 2.268321503e-03f, 2.266669004e-03f, 2.265012675e-03f, 2.263352519e-03f, 2.261688539e-03f, 2.260020738e-03f, 2.258349119e-03f, 2.256673686e-03f, 2.254994440e-03f,
+2.253311386e-03f, 2.251624527e-03f, 2.249933865e-03f, 2.248239404e-03f, 2.246541147e-03f, 2.244839097e-03f, 2.243133257e-03f, 2.241423630e-03f, 2.239710220e-03f, 2.237993029e-03f,
+2.236272061e-03f, 2.234547320e-03f, 2.232818807e-03f, 2.231086527e-03f, 2.229350482e-03f, 2.227610676e-03f, 2.225867111e-03f, 2.224119792e-03f, 2.222368722e-03f, 2.220613903e-03f,
+2.218855338e-03f, 2.217093032e-03f, 2.215326987e-03f, 2.213557207e-03f, 2.211783694e-03f, 2.210006453e-03f, 2.208225485e-03f, 2.206440796e-03f, 2.204652387e-03f, 2.202860262e-03f,
+2.201064425e-03f, 2.199264879e-03f, 2.197461627e-03f, 2.195654672e-03f, 2.193844018e-03f, 2.192029667e-03f, 2.190211625e-03f, 2.188389893e-03f, 2.186564474e-03f, 2.184735374e-03f,
+2.182902594e-03f, 2.181066138e-03f, 2.179226009e-03f, 2.177382212e-03f, 2.175534748e-03f, 2.173683623e-03f, 2.171828838e-03f, 2.169970397e-03f, 2.168108305e-03f, 2.166242564e-03f,
+2.164373177e-03f, 2.162500148e-03f, 2.160623481e-03f, 2.158743179e-03f, 2.156859245e-03f, 2.154971683e-03f, 2.153080496e-03f, 2.151185687e-03f, 2.149287262e-03f, 2.147385221e-03f,
+2.145479570e-03f, 2.143570311e-03f, 2.141657449e-03f, 2.139740986e-03f, 2.137820926e-03f, 2.135897273e-03f, 2.133970030e-03f, 2.132039201e-03f, 2.130104789e-03f, 2.128166797e-03f,
+2.126225230e-03f, 2.124280090e-03f, 2.122331382e-03f, 2.120379109e-03f, 2.118423274e-03f, 2.116463882e-03f, 2.114500934e-03f, 2.112534436e-03f, 2.110564391e-03f, 2.108590802e-03f,
+2.106613673e-03f, 2.104633008e-03f, 2.102648810e-03f, 2.100661082e-03f, 2.098669829e-03f, 2.096675054e-03f, 2.094676761e-03f, 2.092674953e-03f, 2.090669634e-03f, 2.088660808e-03f,
+2.086648477e-03f, 2.084632647e-03f, 2.082613320e-03f, 2.080590501e-03f, 2.078564193e-03f, 2.076534399e-03f, 2.074501123e-03f, 2.072464370e-03f, 2.070424142e-03f, 2.068380443e-03f,
+2.066333278e-03f, 2.064282650e-03f, 2.062228562e-03f, 2.060171018e-03f, 2.058110023e-03f, 2.056045580e-03f, 2.053977691e-03f, 2.051906363e-03f, 2.049831597e-03f, 2.047753398e-03f,
+2.045671770e-03f, 2.043586716e-03f, 2.041498241e-03f, 2.039406347e-03f, 2.037311039e-03f, 2.035212321e-03f, 2.033110196e-03f, 2.031004668e-03f, 2.028895741e-03f, 2.026783419e-03f,
+2.024667706e-03f, 2.022548605e-03f, 2.020426121e-03f, 2.018300256e-03f, 2.016171016e-03f, 2.014038404e-03f, 2.011902423e-03f, 2.009763078e-03f, 2.007620373e-03f, 2.005474311e-03f,
+2.003324896e-03f, 2.001172132e-03f, 1.999016023e-03f, 1.996856574e-03f, 1.994693787e-03f, 1.992527667e-03f, 1.990358217e-03f, 1.988185443e-03f, 1.986009346e-03f, 1.983829933e-03f,
+1.981647205e-03f, 1.979461168e-03f, 1.977271826e-03f, 1.975079182e-03f, 1.972883240e-03f, 1.970684004e-03f, 1.968481478e-03f, 1.966275667e-03f, 1.964066573e-03f, 1.961854202e-03f,
+1.959638557e-03f, 1.957419642e-03f, 1.955197462e-03f, 1.952972019e-03f, 1.950743319e-03f, 1.948511365e-03f, 1.946276161e-03f, 1.944037711e-03f, 1.941796020e-03f, 1.939551091e-03f,
+1.937302929e-03f, 1.935051537e-03f, 1.932796919e-03f, 1.930539080e-03f, 1.928278024e-03f, 1.926013755e-03f, 1.923746276e-03f, 1.921475592e-03f, 1.919201707e-03f, 1.916924626e-03f,
+1.914644351e-03f, 1.912360888e-03f, 1.910074241e-03f, 1.907784413e-03f, 1.905491408e-03f, 1.903195232e-03f, 1.900895887e-03f, 1.898593378e-03f, 1.896287710e-03f, 1.893978886e-03f,
+1.891666911e-03f, 1.889351788e-03f, 1.887033522e-03f, 1.884712118e-03f, 1.882387578e-03f, 1.880059908e-03f, 1.877729111e-03f, 1.875395193e-03f, 1.873058156e-03f, 1.870718005e-03f,
+1.868374745e-03f, 1.866028380e-03f, 1.863678913e-03f, 1.861326349e-03f, 1.858970693e-03f, 1.856611948e-03f, 1.854250119e-03f, 1.851885210e-03f, 1.849517225e-03f, 1.847146169e-03f,
+1.844772045e-03f, 1.842394858e-03f, 1.840014613e-03f, 1.837631314e-03f, 1.835244964e-03f, 1.832855568e-03f, 1.830463131e-03f, 1.828067657e-03f, 1.825669149e-03f, 1.823267613e-03f,
+1.820863053e-03f, 1.818455472e-03f, 1.816044876e-03f, 1.813631268e-03f, 1.811214654e-03f, 1.808795036e-03f, 1.806372420e-03f, 1.803946811e-03f, 1.801518211e-03f, 1.799086626e-03f,
+1.796652060e-03f, 1.794214518e-03f, 1.791774003e-03f, 1.789330521e-03f, 1.786884075e-03f, 1.784434669e-03f, 1.781982310e-03f, 1.779526999e-03f, 1.777068743e-03f, 1.774607546e-03f,
+1.772143411e-03f, 1.769676344e-03f, 1.767206348e-03f, 1.764733428e-03f, 1.762257589e-03f, 1.759778836e-03f, 1.757297171e-03f, 1.754812600e-03f, 1.752325128e-03f, 1.749834759e-03f,
+1.747341496e-03f, 1.744845346e-03f, 1.742346312e-03f, 1.739844398e-03f, 1.737339609e-03f, 1.734831950e-03f, 1.732321426e-03f, 1.729808039e-03f, 1.727291796e-03f, 1.724772700e-03f,
+1.722250757e-03f, 1.719725970e-03f, 1.717198344e-03f, 1.714667884e-03f, 1.712134594e-03f, 1.709598478e-03f, 1.707059542e-03f, 1.704517789e-03f, 1.701973225e-03f, 1.699425854e-03f,
+1.696875680e-03f, 1.694322708e-03f, 1.691766942e-03f, 1.689208388e-03f, 1.686647049e-03f, 1.684082930e-03f, 1.681516036e-03f, 1.678946371e-03f, 1.676373941e-03f, 1.673798749e-03f,
+1.671220800e-03f, 1.668640099e-03f, 1.666056650e-03f, 1.663470458e-03f, 1.660881528e-03f, 1.658289863e-03f, 1.655695470e-03f, 1.653098352e-03f, 1.650498514e-03f, 1.647895961e-03f,
+1.645290698e-03f, 1.642682728e-03f, 1.640072057e-03f, 1.637458689e-03f, 1.634842629e-03f, 1.632223882e-03f, 1.629602452e-03f, 1.626978344e-03f, 1.624351562e-03f, 1.621722112e-03f,
+1.619089998e-03f, 1.616455225e-03f, 1.613817797e-03f, 1.611177719e-03f, 1.608534996e-03f, 1.605889633e-03f, 1.603241633e-03f, 1.600591003e-03f, 1.597937746e-03f, 1.595281868e-03f,
+1.592623372e-03f, 1.589962265e-03f, 1.587298550e-03f, 1.584632232e-03f, 1.581963317e-03f, 1.579291808e-03f, 1.576617711e-03f, 1.573941030e-03f, 1.571261770e-03f, 1.568579936e-03f,
+1.565895533e-03f, 1.563208565e-03f, 1.560519037e-03f, 1.557826955e-03f, 1.555132321e-03f, 1.552435143e-03f, 1.549735424e-03f, 1.547033169e-03f, 1.544328383e-03f, 1.541621070e-03f,
+1.538911236e-03f, 1.536198886e-03f, 1.533484024e-03f, 1.530766654e-03f, 1.528046783e-03f, 1.525324414e-03f, 1.522599553e-03f, 1.519872204e-03f, 1.517142372e-03f, 1.514410063e-03f,
+1.511675280e-03f, 1.508938029e-03f, 1.506198315e-03f, 1.503456142e-03f, 1.500711516e-03f, 1.497964440e-03f, 1.495214921e-03f, 1.492462963e-03f, 1.489708571e-03f, 1.486951749e-03f,
+1.484192503e-03f, 1.481430838e-03f, 1.478666758e-03f, 1.475900269e-03f, 1.473131375e-03f, 1.470360081e-03f, 1.467586392e-03f, 1.464810313e-03f, 1.462031849e-03f, 1.459251005e-03f,
+1.456467785e-03f, 1.453682196e-03f, 1.450894241e-03f, 1.448103925e-03f, 1.445311255e-03f, 1.442516233e-03f, 1.439718867e-03f, 1.436919159e-03f, 1.434117116e-03f, 1.431312743e-03f,
+1.428506044e-03f, 1.425697024e-03f, 1.422885688e-03f, 1.420072041e-03f, 1.417256089e-03f, 1.414437836e-03f, 1.411617288e-03f, 1.408794448e-03f, 1.405969323e-03f, 1.403141917e-03f,
+1.400312235e-03f, 1.397480282e-03f, 1.394646064e-03f, 1.391809585e-03f, 1.388970850e-03f, 1.386129865e-03f, 1.383286634e-03f, 1.380441162e-03f, 1.377593455e-03f, 1.374743517e-03f,
+1.371891354e-03f, 1.369036970e-03f, 1.366180371e-03f, 1.363321561e-03f, 1.360460547e-03f, 1.357597332e-03f, 1.354731921e-03f, 1.351864321e-03f, 1.348994536e-03f, 1.346122571e-03f,
+1.343248431e-03f, 1.340372121e-03f, 1.337493646e-03f, 1.334613012e-03f, 1.331730223e-03f, 1.328845285e-03f, 1.325958203e-03f, 1.323068981e-03f, 1.320177625e-03f, 1.317284140e-03f,
+1.314388532e-03f, 1.311490804e-03f, 1.308590963e-03f, 1.305689014e-03f, 1.302784960e-03f, 1.299878809e-03f, 1.296970565e-03f, 1.294060232e-03f, 1.291147817e-03f, 1.288233324e-03f,
+1.285316758e-03f, 1.282398125e-03f, 1.279477430e-03f, 1.276554678e-03f, 1.273629873e-03f, 1.270703022e-03f, 1.267774129e-03f, 1.264843200e-03f, 1.261910240e-03f, 1.258975253e-03f,
+1.256038246e-03f, 1.253099222e-03f, 1.250158189e-03f, 1.247215150e-03f, 1.244270110e-03f, 1.241323076e-03f, 1.238374052e-03f, 1.235423043e-03f, 1.232470055e-03f, 1.229515093e-03f,
+1.226558162e-03f, 1.223599267e-03f, 1.220638414e-03f, 1.217675607e-03f, 1.214710852e-03f, 1.211744155e-03f, 1.208775520e-03f, 1.205804952e-03f, 1.202832457e-03f, 1.199858041e-03f,
+1.196881707e-03f, 1.193903463e-03f, 1.190923312e-03f, 1.187941260e-03f, 1.184957312e-03f, 1.181971475e-03f, 1.178983752e-03f, 1.175994149e-03f, 1.173002671e-03f, 1.170009324e-03f,
+1.167014113e-03f, 1.164017044e-03f, 1.161018120e-03f, 1.158017349e-03f, 1.155014734e-03f, 1.152010282e-03f, 1.149003998e-03f, 1.145995886e-03f, 1.142985953e-03f, 1.139974203e-03f,
+1.136960642e-03f, 1.133945275e-03f, 1.130928107e-03f, 1.127909144e-03f, 1.124888392e-03f, 1.121865854e-03f, 1.118841537e-03f, 1.115815447e-03f, 1.112787587e-03f, 1.109757964e-03f,
+1.106726584e-03f, 1.103693450e-03f, 1.100658569e-03f, 1.097621946e-03f, 1.094583587e-03f, 1.091543496e-03f, 1.088501679e-03f, 1.085458141e-03f, 1.082412888e-03f, 1.079365926e-03f,
+1.076317258e-03f, 1.073266892e-03f, 1.070214831e-03f, 1.067161082e-03f, 1.064105650e-03f, 1.061048540e-03f, 1.057989758e-03f, 1.054929309e-03f, 1.051867198e-03f, 1.048803431e-03f,
+1.045738013e-03f, 1.042670950e-03f, 1.039602246e-03f, 1.036531908e-03f, 1.033459940e-03f, 1.030386349e-03f, 1.027311139e-03f, 1.024234315e-03f, 1.021155885e-03f, 1.018075851e-03f,
+1.014994221e-03f, 1.011911000e-03f, 1.008826192e-03f, 1.005739804e-03f, 1.002651840e-03f, 9.995623066e-04f, 9.964712088e-04f, 9.933785520e-04f, 9.902843417e-04f, 9.871885832e-04f,
+9.840912820e-04f, 9.809924436e-04f, 9.778920734e-04f, 9.747901768e-04f, 9.716867592e-04f, 9.685818262e-04f, 9.654753831e-04f, 9.623674354e-04f, 9.592579886e-04f, 9.561470480e-04f,
+9.530346193e-04f, 9.499207077e-04f, 9.468053189e-04f, 9.436884581e-04f, 9.405701310e-04f, 9.374503430e-04f, 9.343290995e-04f, 9.312064060e-04f, 9.280822680e-04f, 9.249566910e-04f,
+9.218296804e-04f, 9.187012418e-04f, 9.155713805e-04f, 9.124401021e-04f, 9.093074122e-04f, 9.061733160e-04f, 9.030378193e-04f, 8.999009274e-04f, 8.967626458e-04f, 8.936229801e-04f,
+8.904819357e-04f, 8.873395182e-04f, 8.841957330e-04f, 8.810505857e-04f, 8.779040817e-04f, 8.747562266e-04f, 8.716070259e-04f, 8.684564851e-04f, 8.653046097e-04f, 8.621514052e-04f,
+8.589968772e-04f, 8.558410311e-04f, 8.526838726e-04f, 8.495254071e-04f, 8.463656401e-04f, 8.432045772e-04f, 8.400422240e-04f, 8.368785858e-04f, 8.337136684e-04f, 8.305474772e-04f,
+8.273800177e-04f, 8.242112956e-04f, 8.210413163e-04f, 8.178700853e-04f, 8.146976084e-04f, 8.115238909e-04f, 8.083489384e-04f, 8.051727566e-04f, 8.019953508e-04f, 7.988167268e-04f,
+7.956368901e-04f, 7.924558461e-04f, 7.892736006e-04f, 7.860901590e-04f, 7.829055269e-04f, 7.797197099e-04f, 7.765327135e-04f, 7.733445433e-04f, 7.701552050e-04f, 7.669647040e-04f,
+7.637730459e-04f, 7.605802363e-04f, 7.573862809e-04f, 7.541911851e-04f, 7.509949546e-04f, 7.477975949e-04f, 7.445991117e-04f, 7.413995104e-04f, 7.381987968e-04f, 7.349969764e-04f,
+7.317940547e-04f, 7.285900375e-04f, 7.253849302e-04f, 7.221787385e-04f, 7.189714679e-04f, 7.157631242e-04f, 7.125537128e-04f, 7.093432394e-04f, 7.061317096e-04f, 7.029191290e-04f,
+6.997055031e-04f, 6.964908377e-04f, 6.932751383e-04f, 6.900584105e-04f, 6.868406600e-04f, 6.836218924e-04f, 6.804021132e-04f, 6.771813281e-04f, 6.739595427e-04f, 6.707367627e-04f,
+6.675129936e-04f, 6.642882411e-04f, 6.610625109e-04f, 6.578358084e-04f, 6.546081394e-04f, 6.513795096e-04f, 6.481499244e-04f, 6.449193896e-04f, 6.416879108e-04f, 6.384554936e-04f,
+6.352221437e-04f, 6.319878667e-04f, 6.287526682e-04f, 6.255165540e-04f, 6.222795295e-04f, 6.190416005e-04f, 6.158027726e-04f, 6.125630515e-04f, 6.093224427e-04f, 6.060809520e-04f,
+6.028385850e-04f, 5.995953474e-04f, 5.963512447e-04f, 5.931062827e-04f, 5.898604671e-04f, 5.866138033e-04f, 5.833662972e-04f, 5.801179544e-04f, 5.768687805e-04f, 5.736187812e-04f,
+5.703679621e-04f, 5.671163290e-04f, 5.638638874e-04f, 5.606106431e-04f, 5.573566017e-04f, 5.541017689e-04f, 5.508461503e-04f, 5.475897516e-04f, 5.443325785e-04f, 5.410746366e-04f,
+5.378159317e-04f, 5.345564694e-04f, 5.312962553e-04f, 5.280352952e-04f, 5.247735947e-04f, 5.215111594e-04f, 5.182479952e-04f, 5.149841076e-04f, 5.117195023e-04f, 5.084541851e-04f,
+5.051881615e-04f, 5.019214373e-04f, 4.986540182e-04f, 4.953859098e-04f, 4.921171179e-04f, 4.888476480e-04f, 4.855775059e-04f, 4.823066974e-04f, 4.790352280e-04f, 4.757631034e-04f,
+4.724903295e-04f, 4.692169117e-04f, 4.659428559e-04f, 4.626681678e-04f, 4.593928529e-04f, 4.561169171e-04f, 4.528403659e-04f, 4.495632052e-04f, 4.462854406e-04f, 4.430070778e-04f,
+4.397281225e-04f, 4.364485803e-04f, 4.331684571e-04f, 4.298877585e-04f, 4.266064901e-04f, 4.233246578e-04f, 4.200422672e-04f, 4.167593239e-04f, 4.134758338e-04f, 4.101918025e-04f,
+4.069072357e-04f, 4.036221391e-04f, 4.003365184e-04f, 3.970503794e-04f, 3.937637277e-04f, 3.904765690e-04f, 3.871889091e-04f, 3.839007537e-04f, 3.806121084e-04f, 3.773229790e-04f,
+3.740333712e-04f, 3.707432908e-04f, 3.674527433e-04f, 3.641617346e-04f, 3.608702703e-04f, 3.575783561e-04f, 3.542859978e-04f, 3.509932011e-04f, 3.476999717e-04f, 3.444063153e-04f,
+3.411122376e-04f, 3.378177444e-04f, 3.345228413e-04f, 3.312275341e-04f, 3.279318285e-04f, 3.246357302e-04f, 3.213392449e-04f, 3.180423783e-04f, 3.147451362e-04f, 3.114475243e-04f,
+3.081495483e-04f, 3.048512139e-04f, 3.015525269e-04f, 2.982534929e-04f, 2.949541177e-04f, 2.916544069e-04f, 2.883543664e-04f, 2.850540019e-04f, 2.817533190e-04f, 2.784523235e-04f,
+2.751510210e-04f, 2.718494175e-04f, 2.685475184e-04f, 2.652453297e-04f, 2.619428569e-04f, 2.586401058e-04f, 2.553370822e-04f, 2.520337918e-04f, 2.487302402e-04f, 2.454264333e-04f,
+2.421223766e-04f, 2.388180761e-04f, 2.355135373e-04f, 2.322087660e-04f, 2.289037680e-04f, 2.255985489e-04f, 2.222931145e-04f, 2.189874705e-04f, 2.156816227e-04f, 2.123755766e-04f,
+2.090693382e-04f, 2.057629131e-04f, 2.024563070e-04f, 1.991495256e-04f, 1.958425747e-04f, 1.925354600e-04f, 1.892281873e-04f, 1.859207622e-04f, 1.826131904e-04f, 1.793054778e-04f,
+1.759976300e-04f, 1.726896527e-04f, 1.693815517e-04f, 1.660733327e-04f, 1.627650014e-04f, 1.594565636e-04f, 1.561480249e-04f, 1.528393911e-04f, 1.495306680e-04f, 1.462218612e-04f,
+1.429129764e-04f, 1.396040194e-04f, 1.362949960e-04f, 1.329859117e-04f, 1.296767724e-04f, 1.263675838e-04f, 1.230583516e-04f, 1.197490815e-04f, 1.164397793e-04f, 1.131304506e-04f,
+1.098211012e-04f, 1.065117368e-04f, 1.032023631e-04f, 9.989298586e-05f, 9.658361079e-05f, 9.327424361e-05f, 8.996489004e-05f, 8.665555579e-05f, 8.334624658e-05f, 8.003696814e-05f,
+7.672772617e-05f, 7.341852640e-05f, 7.010937454e-05f, 6.680027632e-05f, 6.349123744e-05f, 6.018226362e-05f, 5.687336059e-05f, 5.356453405e-05f, 5.025578972e-05f, 4.694713331e-05f,
+4.363857055e-05f, 4.033010713e-05f, 3.702174878e-05f, 3.371350120e-05f, 3.040537012e-05f, 2.709736123e-05f, 2.378948026e-05f, 2.048173291e-05f, 1.717412489e-05f, 1.386666191e-05f,
+1.055934969e-05f, 7.252193920e-06f, 3.945200319e-06f, 6.383745921e-07f, -2.668277554e-06f, -5.974750414e-06f, -9.281038283e-06f, -1.258713545e-05f, -1.589303623e-05f, -1.919873489e-05f,
+-2.250422575e-05f, -2.580950310e-05f, -2.911456124e-05f, -3.241939447e-05f, -3.572399709e-05f, -3.902836340e-05f, -4.233248770e-05f, -4.563636429e-05f, -4.893998747e-05f, -5.224335155e-05f,
+-5.554645084e-05f, -5.884927963e-05f, -6.215183224e-05f, -6.545410297e-05f, -6.875608612e-05f, -7.205777601e-05f, -7.535916695e-05f, -7.866025324e-05f, -8.196102919e-05f, -8.526148912e-05f,
+-8.856162734e-05f, -9.186143816e-05f, -9.516091589e-05f, -9.846005486e-05f, -1.017588494e-04f, -1.050572937e-04f, -1.083553823e-04f, -1.116531093e-04f, -1.149504692e-04f, -1.182474562e-04f,
+-1.215440647e-04f, -1.248402889e-04f, -1.281361233e-04f, -1.314315621e-04f, -1.347265996e-04f, -1.380212302e-04f, -1.413154483e-04f, -1.446092480e-04f, -1.479026239e-04f, -1.511955701e-04f,
+-1.544880810e-04f, -1.577801510e-04f, -1.610717744e-04f, -1.643629456e-04f, -1.676536587e-04f, -1.709439083e-04f, -1.742336887e-04f, -1.775229941e-04f, -1.808118189e-04f, -1.841001574e-04f,
+-1.873880041e-04f, -1.906753532e-04f, -1.939621991e-04f, -1.972485361e-04f, -2.005343586e-04f, -2.038196609e-04f, -2.071044375e-04f, -2.103886825e-04f, -2.136723904e-04f, -2.169555555e-04f,
+-2.202381723e-04f, -2.235202349e-04f, -2.268017379e-04f, -2.300826755e-04f, -2.333630421e-04f, -2.366428321e-04f, -2.399220399e-04f, -2.432006597e-04f, -2.464786860e-04f, -2.497561131e-04f,
+-2.530329355e-04f, -2.563091474e-04f, -2.595847432e-04f, -2.628597173e-04f, -2.661340641e-04f, -2.694077780e-04f, -2.726808533e-04f, -2.759532844e-04f, -2.792250656e-04f, -2.824961915e-04f,
+-2.857666562e-04f, -2.890364543e-04f, -2.923055801e-04f, -2.955740280e-04f, -2.988417924e-04f, -3.021088677e-04f, -3.053752482e-04f, -3.086409283e-04f, -3.119059025e-04f, -3.151701652e-04f,
+-3.184337106e-04f, -3.216965333e-04f, -3.249586276e-04f, -3.282199880e-04f, -3.314806088e-04f, -3.347404844e-04f, -3.379996092e-04f, -3.412579777e-04f, -3.445155843e-04f, -3.477724233e-04f,
+-3.510284892e-04f, -3.542837763e-04f, -3.575382792e-04f, -3.607919922e-04f, -3.640449097e-04f, -3.672970262e-04f, -3.705483361e-04f, -3.737988338e-04f, -3.770485136e-04f, -3.802973702e-04f,
+-3.835453978e-04f, -3.867925910e-04f, -3.900389440e-04f, -3.932844515e-04f, -3.965291078e-04f, -3.997729073e-04f, -4.030158445e-04f, -4.062579138e-04f, -4.094991097e-04f, -4.127394266e-04f,
+-4.159788590e-04f, -4.192174013e-04f, -4.224550479e-04f, -4.256917934e-04f, -4.289276321e-04f, -4.321625585e-04f, -4.353965671e-04f, -4.386296524e-04f, -4.418618087e-04f, -4.450930306e-04f,
+-4.483233125e-04f, -4.515526489e-04f, -4.547810342e-04f, -4.580084630e-04f, -4.612349297e-04f, -4.644604288e-04f, -4.676849547e-04f, -4.709085019e-04f, -4.741310649e-04f, -4.773526383e-04f,
+-4.805732164e-04f, -4.837927937e-04f, -4.870113648e-04f, -4.902289242e-04f, -4.934454663e-04f, -4.966609856e-04f, -4.998754766e-04f, -5.030889339e-04f, -5.063013518e-04f, -5.095127250e-04f,
+-5.127230480e-04f, -5.159323151e-04f, -5.191405210e-04f, -5.223476602e-04f, -5.255537271e-04f, -5.287587163e-04f, -5.319626223e-04f, -5.351654397e-04f, -5.383671629e-04f, -5.415677864e-04f,
+-5.447673048e-04f, -5.479657127e-04f, -5.511630045e-04f, -5.543591748e-04f, -5.575542181e-04f, -5.607481290e-04f, -5.639409020e-04f, -5.671325316e-04f, -5.703230124e-04f, -5.735123389e-04f,
+-5.767005057e-04f, -5.798875074e-04f, -5.830733384e-04f, -5.862579934e-04f, -5.894414668e-04f, -5.926237533e-04f, -5.958048474e-04f, -5.989847437e-04f, -6.021634368e-04f, -6.053409212e-04f,
+-6.085171915e-04f, -6.116922422e-04f, -6.148660680e-04f, -6.180386634e-04f, -6.212100230e-04f, -6.243801414e-04f, -6.275490132e-04f, -6.307166329e-04f, -6.338829952e-04f, -6.370480946e-04f,
+-6.402119258e-04f, -6.433744833e-04f, -6.465357618e-04f, -6.496957558e-04f, -6.528544600e-04f, -6.560118689e-04f, -6.591679773e-04f, -6.623227796e-04f, -6.654762705e-04f, -6.686284446e-04f,
+-6.717792966e-04f, -6.749288210e-04f, -6.780770126e-04f, -6.812238658e-04f, -6.843693754e-04f, -6.875135361e-04f, -6.906563423e-04f, -6.937977888e-04f, -6.969378702e-04f, -7.000765812e-04f,
+-7.032139164e-04f, -7.063498704e-04f, -7.094844379e-04f, -7.126176136e-04f, -7.157493922e-04f, -7.188797682e-04f, -7.220087363e-04f, -7.251362912e-04f, -7.282624277e-04f, -7.313871403e-04f,
+-7.345104237e-04f, -7.376322726e-04f, -7.407526817e-04f, -7.438716456e-04f, -7.469891591e-04f, -7.501052169e-04f, -7.532198136e-04f, -7.563329439e-04f, -7.594446025e-04f, -7.625547842e-04f,
+-7.656634836e-04f, -7.687706954e-04f, -7.718764143e-04f, -7.749806351e-04f, -7.780833525e-04f, -7.811845611e-04f, -7.842842557e-04f, -7.873824311e-04f, -7.904790819e-04f, -7.935742029e-04f,
+-7.966677888e-04f, -7.997598343e-04f, -8.028503342e-04f, -8.059392833e-04f, -8.090266762e-04f, -8.121125077e-04f, -8.151967725e-04f, -8.182794655e-04f, -8.213605813e-04f, -8.244401148e-04f,
+-8.275180606e-04f, -8.305944136e-04f, -8.336691685e-04f, -8.367423201e-04f, -8.398138631e-04f, -8.428837924e-04f, -8.459521027e-04f, -8.490187888e-04f, -8.520838455e-04f, -8.551472675e-04f,
+-8.582090497e-04f, -8.612691869e-04f, -8.643276738e-04f, -8.673845052e-04f, -8.704396761e-04f, -8.734931811e-04f, -8.765450150e-04f, -8.795951728e-04f, -8.826436492e-04f, -8.856904390e-04f,
+-8.887355370e-04f, -8.917789381e-04f, -8.948206372e-04f, -8.978606289e-04f, -9.008989083e-04f, -9.039354700e-04f, -9.069703091e-04f, -9.100034202e-04f, -9.130347983e-04f, -9.160644381e-04f,
+-9.190923347e-04f, -9.221184827e-04f, -9.251428772e-04f, -9.281655128e-04f, -9.311863846e-04f, -9.342054874e-04f, -9.372228161e-04f, -9.402383655e-04f, -9.432521305e-04f, -9.462641060e-04f,
+-9.492742869e-04f, -9.522826681e-04f, -9.552892445e-04f, -9.582940110e-04f, -9.612969624e-04f, -9.642980938e-04f, -9.672974000e-04f, -9.702948758e-04f, -9.732905163e-04f, -9.762843164e-04f,
+-9.792762709e-04f, -9.822663748e-04f, -9.852546230e-04f, -9.882410106e-04f, -9.912255323e-04f, -9.942081831e-04f, -9.971889580e-04f, -1.000167852e-03f, -1.003144860e-03f, -1.006119977e-03f,
+-1.009093198e-03f, -1.012064517e-03f, -1.015033931e-03f, -1.018001433e-03f, -1.020967019e-03f, -1.023930684e-03f, -1.026892422e-03f, -1.029852229e-03f, -1.032810100e-03f, -1.035766029e-03f,
+-1.038720013e-03f, -1.041672044e-03f, -1.044622120e-03f, -1.047570234e-03f, -1.050516382e-03f, -1.053460558e-03f, -1.056402759e-03f, -1.059342978e-03f, -1.062281210e-03f, -1.065217452e-03f,
+-1.068151697e-03f, -1.071083941e-03f, -1.074014179e-03f, -1.076942406e-03f, -1.079868617e-03f, -1.082792807e-03f, -1.085714971e-03f, -1.088635104e-03f, -1.091553201e-03f, -1.094469258e-03f,
+-1.097383269e-03f, -1.100295229e-03f, -1.103205133e-03f, -1.106112978e-03f, -1.109018756e-03f, -1.111922465e-03f, -1.114824098e-03f, -1.117723652e-03f, -1.120621120e-03f, -1.123516498e-03f,
+-1.126409782e-03f, -1.129300966e-03f, -1.132190045e-03f, -1.135077015e-03f, -1.137961870e-03f, -1.140844607e-03f, -1.143725219e-03f, -1.146603702e-03f, -1.149480052e-03f, -1.152354262e-03f,
+-1.155226330e-03f, -1.158096249e-03f, -1.160964014e-03f, -1.163829622e-03f, -1.166693067e-03f, -1.169554344e-03f, -1.172413448e-03f, -1.175270375e-03f, -1.178125120e-03f, -1.180977678e-03f,
+-1.183828044e-03f, -1.186676213e-03f, -1.189522181e-03f, -1.192365942e-03f, -1.195207493e-03f, -1.198046828e-03f, -1.200883942e-03f, -1.203718830e-03f, -1.206551489e-03f, -1.209381912e-03f,
+-1.212210095e-03f, -1.215036035e-03f, -1.217859724e-03f, -1.220681160e-03f, -1.223500337e-03f, -1.226317250e-03f, -1.229131895e-03f, -1.231944267e-03f, -1.234754361e-03f, -1.237562173e-03f,
+-1.240367697e-03f, -1.243170929e-03f, -1.245971865e-03f, -1.248770499e-03f, -1.251566826e-03f, -1.254360843e-03f, -1.257152545e-03f, -1.259941926e-03f, -1.262728982e-03f, -1.265513709e-03f,
+-1.268296101e-03f, -1.271076154e-03f, -1.273853863e-03f, -1.276629224e-03f, -1.279402232e-03f, -1.282172882e-03f, -1.284941170e-03f, -1.287707090e-03f, -1.290470639e-03f, -1.293231811e-03f,
+-1.295990603e-03f, -1.298747009e-03f, -1.301501024e-03f, -1.304252645e-03f, -1.307001866e-03f, -1.309748682e-03f, -1.312493090e-03f, -1.315235085e-03f, -1.317974661e-03f, -1.320711815e-03f,
+-1.323446541e-03f, -1.326178836e-03f, -1.328908694e-03f, -1.331636111e-03f, -1.334361083e-03f, -1.337083604e-03f, -1.339803671e-03f, -1.342521278e-03f, -1.345236421e-03f, -1.347949096e-03f,
+-1.350659298e-03f, -1.353367022e-03f, -1.356072264e-03f, -1.358775020e-03f, -1.361475284e-03f, -1.364173052e-03f, -1.366868320e-03f, -1.369561084e-03f, -1.372251338e-03f, -1.374939078e-03f,
+-1.377624300e-03f, -1.380306998e-03f, -1.382987170e-03f, -1.385664809e-03f, -1.388339913e-03f, -1.391012475e-03f, -1.393682492e-03f, -1.396349959e-03f, -1.399014872e-03f, -1.401677226e-03f,
+-1.404337017e-03f, -1.406994240e-03f, -1.409648891e-03f, -1.412300966e-03f, -1.414950459e-03f, -1.417597367e-03f, -1.420241685e-03f, -1.422883409e-03f, -1.425522533e-03f, -1.428159055e-03f,
+-1.430792969e-03f, -1.433424271e-03f, -1.436052956e-03f, -1.438679021e-03f, -1.441302460e-03f, -1.443923269e-03f, -1.446541445e-03f, -1.449156982e-03f, -1.451769876e-03f, -1.454380123e-03f,
+-1.456987719e-03f, -1.459592658e-03f, -1.462194938e-03f, -1.464794552e-03f, -1.467391498e-03f, -1.469985770e-03f, -1.472577365e-03f, -1.475166277e-03f, -1.477752503e-03f, -1.480336039e-03f,
+-1.482916879e-03f, -1.485495020e-03f, -1.488070457e-03f, -1.490643187e-03f, -1.493213204e-03f, -1.495780505e-03f, -1.498345085e-03f, -1.500906939e-03f, -1.503466064e-03f, -1.506022456e-03f,
+-1.508576109e-03f, -1.511127021e-03f, -1.513675185e-03f, -1.516220599e-03f, -1.518763258e-03f, -1.521303158e-03f, -1.523840294e-03f, -1.526374663e-03f, -1.528906259e-03f, -1.531435079e-03f,
+-1.533961119e-03f, -1.536484374e-03f, -1.539004840e-03f, -1.541522514e-03f, -1.544037389e-03f, -1.546549464e-03f, -1.549058733e-03f, -1.551565191e-03f, -1.554068836e-03f, -1.556569663e-03f,
+-1.559067667e-03f, -1.561562844e-03f, -1.564055191e-03f, -1.566544703e-03f, -1.569031376e-03f, -1.571515206e-03f, -1.573996188e-03f, -1.576474319e-03f, -1.578949594e-03f, -1.581422010e-03f,
+-1.583891562e-03f, -1.586358245e-03f, -1.588822057e-03f, -1.591282992e-03f, -1.593741047e-03f, -1.596196218e-03f, -1.598648501e-03f, -1.601097890e-03f, -1.603544383e-03f, -1.605987976e-03f,
+-1.608428663e-03f, -1.610866442e-03f, -1.613301308e-03f, -1.615733257e-03f, -1.618162285e-03f, -1.620588387e-03f, -1.623011561e-03f, -1.625431802e-03f, -1.627849105e-03f, -1.630263467e-03f,
+-1.632674884e-03f, -1.635083352e-03f, -1.637488867e-03f, -1.639891424e-03f, -1.642291020e-03f, -1.644687651e-03f, -1.647081313e-03f, -1.649472001e-03f, -1.651859713e-03f, -1.654244443e-03f,
+-1.656626188e-03f, -1.659004944e-03f, -1.661380708e-03f, -1.663753474e-03f, -1.666123239e-03f, -1.668490000e-03f, -1.670853752e-03f, -1.673214491e-03f, -1.675572213e-03f, -1.677926915e-03f,
+-1.680278593e-03f, -1.682627242e-03f, -1.684972859e-03f, -1.687315440e-03f, -1.689654981e-03f, -1.691991478e-03f, -1.694324928e-03f, -1.696655325e-03f, -1.698982667e-03f, -1.701306950e-03f,
+-1.703628170e-03f, -1.705946322e-03f, -1.708261404e-03f, -1.710573411e-03f, -1.712882339e-03f, -1.715188185e-03f, -1.717490944e-03f, -1.719790614e-03f, -1.722087189e-03f, -1.724380667e-03f,
+-1.726671044e-03f, -1.728958315e-03f, -1.731242477e-03f, -1.733523527e-03f, -1.735801459e-03f, -1.738076272e-03f, -1.740347960e-03f, -1.742616520e-03f, -1.744881949e-03f, -1.747144242e-03f,
+-1.749403396e-03f, -1.751659407e-03f, -1.753912271e-03f, -1.756161986e-03f, -1.758408546e-03f, -1.760651948e-03f, -1.762892189e-03f, -1.765129264e-03f, -1.767363171e-03f, -1.769593905e-03f,
+-1.771821462e-03f, -1.774045840e-03f, -1.776267034e-03f, -1.778485041e-03f, -1.780699856e-03f, -1.782911478e-03f, -1.785119900e-03f, -1.787325121e-03f, -1.789527136e-03f, -1.791725942e-03f,
+-1.793921536e-03f, -1.796113912e-03f, -1.798303069e-03f, -1.800489002e-03f, -1.802671707e-03f, -1.804851182e-03f, -1.807027422e-03f, -1.809200424e-03f, -1.811370184e-03f, -1.813536699e-03f,
+-1.815699966e-03f, -1.817859979e-03f, -1.820016737e-03f, -1.822170235e-03f, -1.824320471e-03f, -1.826467439e-03f, -1.828611137e-03f, -1.830751562e-03f, -1.832888710e-03f, -1.835022576e-03f,
+-1.837153159e-03f, -1.839280454e-03f, -1.841404457e-03f, -1.843525166e-03f, -1.845642576e-03f, -1.847756685e-03f, -1.849867489e-03f, -1.851974983e-03f, -1.854079166e-03f, -1.856180033e-03f,
+-1.858277581e-03f, -1.860371806e-03f, -1.862462706e-03f, -1.864550276e-03f, -1.866634513e-03f, -1.868715414e-03f, -1.870792975e-03f, -1.872867194e-03f, -1.874938065e-03f, -1.877005587e-03f,
+-1.879069756e-03f, -1.881130567e-03f, -1.883188019e-03f, -1.885242107e-03f, -1.887292829e-03f, -1.889340180e-03f, -1.891384158e-03f, -1.893424758e-03f, -1.895461979e-03f, -1.897495816e-03f,
+-1.899526266e-03f, -1.901553326e-03f, -1.903576992e-03f, -1.905597261e-03f, -1.907614130e-03f, -1.909627595e-03f, -1.911637654e-03f, -1.913644303e-03f, -1.915647538e-03f, -1.917647356e-03f,
+-1.919643755e-03f, -1.921636730e-03f, -1.923626279e-03f, -1.925612398e-03f, -1.927595084e-03f, -1.929574333e-03f, -1.931550144e-03f, -1.933522511e-03f, -1.935491433e-03f, -1.937456905e-03f,
+-1.939418925e-03f, -1.941377490e-03f, -1.943332595e-03f, -1.945284239e-03f, -1.947232417e-03f, -1.949177127e-03f, -1.951118366e-03f, -1.953056130e-03f, -1.954990416e-03f, -1.956921221e-03f,
+-1.958848542e-03f, -1.960772375e-03f, -1.962692718e-03f, -1.964609567e-03f, -1.966522920e-03f, -1.968432773e-03f, -1.970339122e-03f, -1.972241966e-03f, -1.974141301e-03f, -1.976037123e-03f,
+-1.977929430e-03f, -1.979818218e-03f, -1.981703485e-03f, -1.983585227e-03f, -1.985463442e-03f, -1.987338126e-03f, -1.989209276e-03f, -1.991076889e-03f, -1.992940962e-03f, -1.994801492e-03f,
+-1.996658477e-03f, -1.998511912e-03f, -2.000361796e-03f, -2.002208125e-03f, -2.004050895e-03f, -2.005890105e-03f, -2.007725750e-03f, -2.009557829e-03f, -2.011386338e-03f, -2.013211273e-03f,
+-2.015032633e-03f, -2.016850414e-03f, -2.018664614e-03f, -2.020475228e-03f, -2.022282255e-03f, -2.024085692e-03f, -2.025885534e-03f, -2.027681781e-03f, -2.029474428e-03f, -2.031263472e-03f,
+-2.033048912e-03f, -2.034830743e-03f, -2.036608964e-03f, -2.038383570e-03f, -2.040154560e-03f, -2.041921931e-03f, -2.043685679e-03f, -2.045445801e-03f, -2.047202296e-03f, -2.048955159e-03f,
+-2.050704389e-03f, -2.052449982e-03f, -2.054191935e-03f, -2.055930246e-03f, -2.057664912e-03f, -2.059395931e-03f, -2.061123298e-03f, -2.062847012e-03f, -2.064567069e-03f, -2.066283468e-03f,
+-2.067996204e-03f, -2.069705277e-03f, -2.071410681e-03f, -2.073112416e-03f, -2.074810477e-03f, -2.076504863e-03f, -2.078195571e-03f, -2.079882598e-03f, -2.081565940e-03f, -2.083245597e-03f,
+-2.084921564e-03f, -2.086593839e-03f, -2.088262419e-03f, -2.089927302e-03f, -2.091588486e-03f, -2.093245966e-03f, -2.094899741e-03f, -2.096549808e-03f, -2.098196165e-03f, -2.099838808e-03f,
+-2.101477736e-03f, -2.103112944e-03f, -2.104744432e-03f, -2.106372195e-03f, -2.107996233e-03f, -2.109616541e-03f, -2.111233117e-03f, -2.112845960e-03f, -2.114455065e-03f, -2.116060431e-03f,
+-2.117662055e-03f, -2.119259934e-03f, -2.120854067e-03f, -2.122444449e-03f, -2.124031080e-03f, -2.125613955e-03f, -2.127193073e-03f, -2.128768432e-03f, -2.130340028e-03f, -2.131907859e-03f,
+-2.133471922e-03f, -2.135032216e-03f, -2.136588738e-03f, -2.138141484e-03f, -2.139690453e-03f, -2.141235642e-03f, -2.142777049e-03f, -2.144314671e-03f, -2.145848506e-03f, -2.147378551e-03f,
+-2.148904804e-03f, -2.150427263e-03f, -2.151945924e-03f, -2.153460786e-03f, -2.154971846e-03f, -2.156479102e-03f, -2.157982551e-03f, -2.159482191e-03f, -2.160978020e-03f, -2.162470035e-03f,
+-2.163958233e-03f, -2.165442613e-03f, -2.166923172e-03f, -2.168399908e-03f, -2.169872818e-03f, -2.171341900e-03f, -2.172807152e-03f, -2.174268571e-03f, -2.175726155e-03f, -2.177179902e-03f,
+-2.178629809e-03f, -2.180075875e-03f, -2.181518096e-03f, -2.182956471e-03f, -2.184390996e-03f, -2.185821671e-03f, -2.187248493e-03f, -2.188671458e-03f, -2.190090566e-03f, -2.191505814e-03f,
+-2.192917200e-03f, -2.194324721e-03f, -2.195728375e-03f, -2.197128160e-03f, -2.198524074e-03f, -2.199916115e-03f, -2.201304280e-03f, -2.202688567e-03f, -2.204068974e-03f, -2.205445499e-03f,
+-2.206818139e-03f, -2.208186893e-03f, -2.209551758e-03f, -2.210912733e-03f, -2.212269814e-03f, -2.213623000e-03f, -2.214972289e-03f, -2.216317679e-03f, -2.217659167e-03f, -2.218996752e-03f,
+-2.220330430e-03f, -2.221660201e-03f, -2.222986062e-03f, -2.224308011e-03f, -2.225626046e-03f, -2.226940165e-03f, -2.228250365e-03f, -2.229556645e-03f, -2.230859003e-03f, -2.232157437e-03f,
+-2.233451944e-03f, -2.234742523e-03f, -2.236029171e-03f, -2.237311887e-03f, -2.238590668e-03f, -2.239865513e-03f, -2.241136419e-03f, -2.242403385e-03f, -2.243666408e-03f, -2.244925487e-03f,
+-2.246180620e-03f, -2.247431804e-03f, -2.248679038e-03f, -2.249922320e-03f, -2.251161647e-03f, -2.252397019e-03f, -2.253628432e-03f, -2.254855886e-03f, -2.256079377e-03f, -2.257298905e-03f,
+-2.258514467e-03f, -2.259726062e-03f, -2.260933687e-03f, -2.262137340e-03f, -2.263337021e-03f, -2.264532726e-03f, -2.265724455e-03f, -2.266912205e-03f, -2.268095974e-03f, -2.269275761e-03f,
+-2.270451563e-03f, -2.271623379e-03f, -2.272791208e-03f, -2.273955047e-03f, -2.275114894e-03f, -2.276270748e-03f, -2.277422607e-03f, -2.278570469e-03f, -2.279714332e-03f, -2.280854195e-03f,
+-2.281990056e-03f, -2.283121912e-03f, -2.284249764e-03f, -2.285373607e-03f, -2.286493442e-03f, -2.287609266e-03f, -2.288721077e-03f, -2.289828874e-03f, -2.290932655e-03f, -2.292032418e-03f,
+-2.293128162e-03f, -2.294219885e-03f, -2.295307585e-03f, -2.296391261e-03f, -2.297470911e-03f, -2.298546533e-03f, -2.299618125e-03f, -2.300685687e-03f, -2.301749216e-03f, -2.302808711e-03f,
+-2.303864170e-03f, -2.304915592e-03f, -2.305962974e-03f, -2.307006316e-03f, -2.308045615e-03f, -2.309080871e-03f, -2.310112081e-03f, -2.311139245e-03f, -2.312162360e-03f, -2.313181424e-03f,
+-2.314196437e-03f, -2.315207397e-03f, -2.316214302e-03f, -2.317217151e-03f, -2.318215943e-03f, -2.319210674e-03f, -2.320201346e-03f, -2.321187954e-03f, -2.322170500e-03f, -2.323148979e-03f,
+-2.324123393e-03f, -2.325093738e-03f, -2.326060013e-03f, -2.327022217e-03f, -2.327980349e-03f, -2.328934407e-03f, -2.329884389e-03f, -2.330830294e-03f, -2.331772122e-03f, -2.332709869e-03f,
+-2.333643535e-03f, -2.334573119e-03f, -2.335498619e-03f, -2.336420034e-03f, -2.337337362e-03f, -2.338250603e-03f, -2.339159753e-03f, -2.340064814e-03f, -2.340965782e-03f, -2.341862656e-03f,
+-2.342755436e-03f, -2.343644120e-03f, -2.344528707e-03f, -2.345409194e-03f, -2.346285582e-03f, -2.347157869e-03f, -2.348026053e-03f, -2.348890133e-03f, -2.349750107e-03f, -2.350605976e-03f,
+-2.351457737e-03f, -2.352305389e-03f, -2.353148930e-03f, -2.353988361e-03f, -2.354823678e-03f, -2.355654882e-03f, -2.356481971e-03f, -2.357304943e-03f, -2.358123798e-03f, -2.358938534e-03f,
+-2.359749151e-03f, -2.360555646e-03f, -2.361358019e-03f, -2.362156268e-03f, -2.362950393e-03f, -2.363740393e-03f, -2.364526265e-03f, -2.365308009e-03f, -2.366085624e-03f, -2.366859109e-03f,
+-2.367628463e-03f, -2.368393684e-03f, -2.369154771e-03f, -2.369911724e-03f, -2.370664541e-03f, -2.371413221e-03f, -2.372157763e-03f, -2.372898166e-03f, -2.373634429e-03f, -2.374366550e-03f,
+-2.375094530e-03f, -2.375818366e-03f, -2.376538059e-03f, -2.377253606e-03f, -2.377965006e-03f, -2.378672259e-03f, -2.379375364e-03f, -2.380074320e-03f, -2.380769125e-03f, -2.381459780e-03f,
+-2.382146282e-03f, -2.382828630e-03f, -2.383506825e-03f, -2.384180864e-03f, -2.384850747e-03f, -2.385516474e-03f, -2.386178042e-03f, -2.386835452e-03f, -2.387488702e-03f, -2.388137791e-03f,
+-2.388782718e-03f, -2.389423483e-03f, -2.390060085e-03f, -2.390692522e-03f, -2.391320795e-03f, -2.391944901e-03f, -2.392564841e-03f, -2.393180613e-03f, -2.393792216e-03f, -2.394399650e-03f,
+-2.395002914e-03f, -2.395602006e-03f, -2.396196927e-03f, -2.396787676e-03f, -2.397374250e-03f, -2.397956651e-03f, -2.398534877e-03f, -2.399108926e-03f, -2.399678800e-03f, -2.400244496e-03f,
+-2.400806013e-03f, -2.401363352e-03f, -2.401916512e-03f, -2.402465491e-03f, -2.403010289e-03f, -2.403550905e-03f, -2.404087339e-03f, -2.404619590e-03f, -2.405147657e-03f, -2.405671539e-03f,
+-2.406191236e-03f, -2.406706747e-03f, -2.407218072e-03f, -2.407725209e-03f, -2.408228158e-03f, -2.408726919e-03f, -2.409221491e-03f, -2.409711872e-03f, -2.410198064e-03f, -2.410680064e-03f,
+-2.411157873e-03f, -2.411631489e-03f, -2.412100912e-03f, -2.412566142e-03f, -2.413027178e-03f, -2.413484019e-03f, -2.413936665e-03f, -2.414385116e-03f, -2.414829370e-03f, -2.415269427e-03f,
+-2.415705287e-03f, -2.416136949e-03f, -2.416564412e-03f, -2.416987676e-03f, -2.417406741e-03f, -2.417821606e-03f, -2.418232271e-03f, -2.418638734e-03f, -2.419040997e-03f, -2.419439057e-03f,
+-2.419832915e-03f, -2.420222570e-03f, -2.420608022e-03f, -2.420989270e-03f, -2.421366314e-03f, -2.421739153e-03f, -2.422107787e-03f, -2.422472216e-03f, -2.422832439e-03f, -2.423188456e-03f,
+-2.423540266e-03f, -2.423887870e-03f, -2.424231265e-03f, -2.424570453e-03f, -2.424905433e-03f, -2.425236205e-03f, -2.425562768e-03f, -2.425885121e-03f, -2.426203265e-03f, -2.426517199e-03f,
+-2.426826923e-03f, -2.427132437e-03f, -2.427433740e-03f, -2.427730832e-03f, -2.428023712e-03f, -2.428312381e-03f, -2.428596838e-03f, -2.428877083e-03f, -2.429153115e-03f, -2.429424935e-03f,
+-2.429692541e-03f, -2.429955935e-03f, -2.430215115e-03f, -2.430470081e-03f, -2.430720834e-03f, -2.430967373e-03f, -2.431209697e-03f, -2.431447807e-03f, -2.431681702e-03f, -2.431911383e-03f,
+-2.432136848e-03f, -2.432358098e-03f, -2.432575133e-03f, -2.432787953e-03f, -2.432996557e-03f, -2.433200945e-03f, -2.433401117e-03f, -2.433597073e-03f, -2.433788813e-03f, -2.433976337e-03f,
+-2.434159645e-03f, -2.434338736e-03f, -2.434513610e-03f, -2.434684268e-03f, -2.434850710e-03f, -2.435012935e-03f, -2.435170942e-03f, -2.435324733e-03f, -2.435474308e-03f, -2.435619665e-03f,
+-2.435760805e-03f, -2.435897729e-03f, -2.436030435e-03f, -2.436158925e-03f, -2.436283197e-03f, -2.436403253e-03f, -2.436519091e-03f, -2.436630713e-03f, -2.436738118e-03f, -2.436841306e-03f,
+-2.436940277e-03f, -2.437035031e-03f, -2.437125569e-03f, -2.437211890e-03f, -2.437293994e-03f, -2.437371882e-03f, -2.437445554e-03f, -2.437515009e-03f, -2.437580249e-03f, -2.437641272e-03f,
+-2.437698079e-03f, -2.437750670e-03f, -2.437799046e-03f, -2.437843206e-03f, -2.437883151e-03f, -2.437918880e-03f, -2.437950394e-03f, -2.437977694e-03f, -2.438000778e-03f, -2.438019649e-03f,
+-2.438034304e-03f, -2.438044746e-03f, -2.438050973e-03f, -2.438052987e-03f, -2.438050788e-03f, -2.438044375e-03f, -2.438033749e-03f, -2.438018910e-03f, -2.437999858e-03f, -2.437976594e-03f,
+-2.437949119e-03f, -2.437917431e-03f, -2.437881532e-03f, -2.437841421e-03f, -2.437797100e-03f, -2.437748568e-03f, -2.437695826e-03f, -2.437638874e-03f, -2.437577712e-03f, -2.437512340e-03f,
+-2.437442760e-03f, -2.437368971e-03f, -2.437290974e-03f, -2.437208768e-03f, -2.437122355e-03f, -2.437031735e-03f, -2.436936908e-03f, -2.436837875e-03f, -2.436734635e-03f, -2.436627190e-03f,
+-2.436515539e-03f, -2.436399684e-03f, -2.436279624e-03f, -2.436155361e-03f, -2.436026893e-03f, -2.435894223e-03f, -2.435757350e-03f, -2.435616275e-03f, -2.435470998e-03f, -2.435321519e-03f,
+-2.435167840e-03f, -2.435009961e-03f, -2.434847882e-03f, -2.434681604e-03f, -2.434511126e-03f, -2.434336451e-03f, -2.434157578e-03f, -2.433974508e-03f, -2.433787241e-03f, -2.433595777e-03f,
+-2.433400119e-03f, -2.433200265e-03f, -2.432996217e-03f, -2.432787975e-03f, -2.432575540e-03f, -2.432358912e-03f, -2.432138092e-03f, -2.431913080e-03f, -2.431683878e-03f, -2.431450485e-03f,
+-2.431212903e-03f, -2.430971131e-03f, -2.430725172e-03f, -2.430475024e-03f, -2.430220690e-03f, -2.429962169e-03f, -2.429699463e-03f, -2.429432571e-03f, -2.429161495e-03f, -2.428886235e-03f,
+-2.428606793e-03f, -2.428323168e-03f, -2.428035362e-03f, -2.427743374e-03f, -2.427447207e-03f, -2.427146860e-03f, -2.426842335e-03f, -2.426533631e-03f, -2.426220751e-03f, -2.425903694e-03f,
+-2.425582462e-03f, -2.425257054e-03f, -2.424927473e-03f, -2.424593719e-03f, -2.424255792e-03f, -2.423913693e-03f, -2.423567423e-03f, -2.423216984e-03f, -2.422862375e-03f, -2.422503598e-03f,
+-2.422140654e-03f, -2.421773542e-03f, -2.421402265e-03f, -2.421026823e-03f, -2.420647217e-03f, -2.420263448e-03f, -2.419875517e-03f, -2.419483424e-03f, -2.419087170e-03f, -2.418686757e-03f,
+-2.418282185e-03f, -2.417873456e-03f, -2.417460569e-03f, -2.417043527e-03f, -2.416622329e-03f, -2.416196978e-03f, -2.415767473e-03f, -2.415333817e-03f, -2.414896009e-03f, -2.414454051e-03f,
+-2.414007944e-03f, -2.413557688e-03f, -2.413103286e-03f, -2.412644737e-03f, -2.412182043e-03f, -2.411715205e-03f, -2.411244224e-03f, -2.410769101e-03f, -2.410289836e-03f, -2.409806432e-03f,
+-2.409318889e-03f, -2.408827208e-03f, -2.408331390e-03f, -2.407831436e-03f, -2.407327347e-03f, -2.406819125e-03f, -2.406306771e-03f, -2.405790285e-03f, -2.405269669e-03f, -2.404744924e-03f,
+-2.404216051e-03f, -2.403683050e-03f, -2.403145925e-03f, -2.402604674e-03f, -2.402059300e-03f, -2.401509804e-03f, -2.400956187e-03f, -2.400398450e-03f, -2.399836594e-03f, -2.399270620e-03f,
+-2.398700530e-03f, -2.398126325e-03f, -2.397548006e-03f, -2.396965575e-03f, -2.396379032e-03f, -2.395788378e-03f, -2.395193616e-03f, -2.394594745e-03f, -2.393991769e-03f, -2.393384686e-03f,
+-2.392773500e-03f, -2.392158212e-03f, -2.391538821e-03f, -2.390915331e-03f, -2.390287742e-03f, -2.389656055e-03f, -2.389020272e-03f, -2.388380394e-03f, -2.387736422e-03f, -2.387088358e-03f,
+-2.386436203e-03f, -2.385779959e-03f, -2.385119626e-03f, -2.384455206e-03f, -2.383786701e-03f, -2.383114112e-03f, -2.382437440e-03f, -2.381756686e-03f, -2.381071853e-03f, -2.380382940e-03f,
+-2.379689951e-03f, -2.378992886e-03f, -2.378291747e-03f, -2.377586534e-03f, -2.376877250e-03f, -2.376163897e-03f, -2.375446474e-03f, -2.374724984e-03f, -2.373999429e-03f, -2.373269810e-03f,
+-2.372536127e-03f, -2.371798384e-03f, -2.371056581e-03f, -2.370310719e-03f, -2.369560801e-03f, -2.368806827e-03f, -2.368048800e-03f, -2.367286721e-03f, -2.366520590e-03f, -2.365750411e-03f,
+-2.364976184e-03f, -2.364197912e-03f, -2.363415594e-03f, -2.362629234e-03f, -2.361838832e-03f, -2.361044391e-03f, -2.360245912e-03f, -2.359443395e-03f, -2.358636844e-03f, -2.357826260e-03f,
+-2.357011644e-03f, -2.356192998e-03f, -2.355370323e-03f, -2.354543621e-03f, -2.353712895e-03f, -2.352878144e-03f, -2.352039372e-03f, -2.351196579e-03f, -2.350349768e-03f, -2.349498940e-03f,
+-2.348644097e-03f, -2.347785240e-03f, -2.346922372e-03f, -2.346055493e-03f, -2.345184606e-03f, -2.344309712e-03f, -2.343430813e-03f, -2.342547911e-03f, -2.341661008e-03f, -2.340770105e-03f,
+-2.339875203e-03f, -2.338976306e-03f, -2.338073414e-03f, -2.337166529e-03f, -2.336255654e-03f, -2.335340789e-03f, -2.334421937e-03f, -2.333499099e-03f, -2.332572278e-03f, -2.331641475e-03f,
+-2.330706692e-03f, -2.329767930e-03f, -2.328825192e-03f, -2.327878479e-03f, -2.326927794e-03f, -2.325973137e-03f, -2.325014512e-03f, -2.324051919e-03f, -2.323085362e-03f, -2.322114840e-03f,
+-2.321140358e-03f, -2.320161915e-03f, -2.319179515e-03f, -2.318193159e-03f, -2.317202849e-03f, -2.316208587e-03f, -2.315210375e-03f, -2.314208215e-03f, -2.313202109e-03f, -2.312192059e-03f,
+-2.311178066e-03f, -2.310160133e-03f, -2.309138261e-03f, -2.308112454e-03f, -2.307082711e-03f, -2.306049037e-03f, -2.305011432e-03f, -2.303969899e-03f, -2.302924439e-03f, -2.301875055e-03f,
+-2.300821748e-03f, -2.299764521e-03f, -2.298703376e-03f, -2.297638315e-03f, -2.296569339e-03f, -2.295496451e-03f, -2.294419654e-03f, -2.293338948e-03f, -2.292254336e-03f, -2.291165820e-03f,
+-2.290073403e-03f, -2.288977086e-03f, -2.287876871e-03f, -2.286772761e-03f, -2.285664758e-03f, -2.284552863e-03f, -2.283437079e-03f, -2.282317408e-03f, -2.281193853e-03f, -2.280066414e-03f,
+-2.278935096e-03f, -2.277799899e-03f, -2.276660825e-03f, -2.275517878e-03f, -2.274371059e-03f, -2.273220370e-03f, -2.272065814e-03f, -2.270907392e-03f, -2.269745108e-03f, -2.268578962e-03f,
+-2.267408958e-03f, -2.266235098e-03f, -2.265057383e-03f, -2.263875817e-03f, -2.262690401e-03f, -2.261501137e-03f, -2.260308029e-03f, -2.259111077e-03f, -2.257910285e-03f, -2.256705655e-03f,
+-2.255497188e-03f, -2.254284888e-03f, -2.253068756e-03f, -2.251848795e-03f, -2.250625008e-03f, -2.249397395e-03f, -2.248165961e-03f, -2.246930707e-03f, -2.245691635e-03f, -2.244448748e-03f,
+-2.243202048e-03f, -2.241951538e-03f, -2.240697220e-03f, -2.239439096e-03f, -2.238177168e-03f, -2.236911440e-03f, -2.235641913e-03f, -2.234368589e-03f, -2.233091473e-03f, -2.231810564e-03f,
+-2.230525867e-03f, -2.229237383e-03f, -2.227945115e-03f, -2.226649065e-03f, -2.225349236e-03f, -2.224045631e-03f, -2.222738251e-03f, -2.221427099e-03f, -2.220112178e-03f, -2.218793489e-03f,
+-2.217471037e-03f, -2.216144822e-03f, -2.214814848e-03f, -2.213481117e-03f, -2.212143631e-03f, -2.210802394e-03f, -2.209457407e-03f, -2.208108673e-03f, -2.206756194e-03f, -2.205399974e-03f,
+-2.204040015e-03f, -2.202676318e-03f, -2.201308888e-03f, -2.199937726e-03f, -2.198562835e-03f, -2.197184217e-03f, -2.195801875e-03f, -2.194415812e-03f, -2.193026031e-03f, -2.191632533e-03f,
+-2.190235321e-03f, -2.188834399e-03f, -2.187429768e-03f, -2.186021432e-03f, -2.184609393e-03f, -2.183193653e-03f, -2.181774215e-03f, -2.180351083e-03f, -2.178924258e-03f, -2.177493743e-03f,
+-2.176059541e-03f, -2.174621654e-03f, -2.173180086e-03f, -2.171734838e-03f, -2.170285915e-03f, -2.168833317e-03f, -2.167377049e-03f, -2.165917112e-03f, -2.164453509e-03f, -2.162986244e-03f,
+-2.161515319e-03f, -2.160040736e-03f, -2.158562499e-03f, -2.157080610e-03f, -2.155595072e-03f, -2.154105887e-03f, -2.152613059e-03f, -2.151116590e-03f, -2.149616483e-03f, -2.148112740e-03f,
+-2.146605365e-03f, -2.145094361e-03f, -2.143579730e-03f, -2.142061474e-03f, -2.140539598e-03f, -2.139014103e-03f, -2.137484992e-03f, -2.135952269e-03f, -2.134415935e-03f, -2.132875995e-03f,
+-2.131332451e-03f, -2.129785305e-03f, -2.128234560e-03f, -2.126680220e-03f, -2.125122288e-03f, -2.123560765e-03f, -2.121995656e-03f, -2.120426962e-03f, -2.118854687e-03f, -2.117278834e-03f,
+-2.115699406e-03f, -2.114116405e-03f, -2.112529835e-03f, -2.110939698e-03f, -2.109345998e-03f, -2.107748737e-03f, -2.106147918e-03f, -2.104543545e-03f, -2.102935619e-03f, -2.101324145e-03f,
+-2.099709125e-03f, -2.098090562e-03f, -2.096468459e-03f, -2.094842819e-03f, -2.093213646e-03f, -2.091580941e-03f, -2.089944708e-03f, -2.088304951e-03f, -2.086661672e-03f, -2.085014874e-03f,
+-2.083364560e-03f, -2.081710733e-03f, -2.080053397e-03f, -2.078392554e-03f, -2.076728207e-03f, -2.075060360e-03f, -2.073389015e-03f, -2.071714176e-03f, -2.070035845e-03f, -2.068354027e-03f,
+-2.066668723e-03f, -2.064979937e-03f, -2.063287672e-03f, -2.061591932e-03f, -2.059892718e-03f, -2.058190035e-03f, -2.056483886e-03f, -2.054774273e-03f, -2.053061200e-03f, -2.051344670e-03f,
+-2.049624686e-03f, -2.047901252e-03f, -2.046174369e-03f, -2.044444043e-03f, -2.042710275e-03f, -2.040973069e-03f, -2.039232428e-03f, -2.037488355e-03f, -2.035740854e-03f, -2.033989928e-03f,
+-2.032235580e-03f, -2.030477812e-03f, -2.028716630e-03f, -2.026952034e-03f, -2.025184030e-03f, -2.023412619e-03f, -2.021637806e-03f, -2.019859593e-03f, -2.018077985e-03f, -2.016292983e-03f,
+-2.014504591e-03f, -2.012712814e-03f, -2.010917653e-03f, -2.009119112e-03f, -2.007317194e-03f, -2.005511904e-03f, -2.003703243e-03f, -2.001891216e-03f, -2.000075825e-03f, -1.998257074e-03f,
+-1.996434967e-03f, -1.994609506e-03f, -1.992780695e-03f, -1.990948538e-03f, -1.989113037e-03f, -1.987274196e-03f, -1.985432018e-03f, -1.983586507e-03f, -1.981737666e-03f, -1.979885499e-03f,
+-1.978030008e-03f, -1.976171198e-03f, -1.974309071e-03f, -1.972443631e-03f, -1.970574882e-03f, -1.968702826e-03f, -1.966827468e-03f, -1.964948810e-03f, -1.963066856e-03f, -1.961181610e-03f,
+-1.959293074e-03f, -1.957401253e-03f, -1.955506150e-03f, -1.953607768e-03f, -1.951706110e-03f, -1.949801181e-03f, -1.947892984e-03f, -1.945981521e-03f, -1.944066797e-03f, -1.942148815e-03f,
+-1.940227579e-03f, -1.938303092e-03f, -1.936375357e-03f, -1.934444378e-03f, -1.932510159e-03f, -1.930572703e-03f, -1.928632013e-03f, -1.926688094e-03f, -1.924740948e-03f, -1.922790579e-03f,
+-1.920836991e-03f, -1.918880187e-03f, -1.916920171e-03f, -1.914956947e-03f, -1.912990517e-03f, -1.911020886e-03f, -1.909048057e-03f, -1.907072034e-03f, -1.905092820e-03f, -1.903110419e-03f,
+-1.901124834e-03f, -1.899136069e-03f, -1.897144128e-03f, -1.895149015e-03f, -1.893150732e-03f, -1.891149283e-03f, -1.889144673e-03f, -1.887136904e-03f, -1.885125981e-03f, -1.883111907e-03f,
+-1.881094685e-03f, -1.879074320e-03f, -1.877050815e-03f, -1.875024174e-03f, -1.872994399e-03f, -1.870961496e-03f, -1.868925468e-03f, -1.866886318e-03f, -1.864844050e-03f, -1.862798667e-03f,
+-1.860750175e-03f, -1.858698575e-03f, -1.856643872e-03f, -1.854586070e-03f, -1.852525172e-03f, -1.850461182e-03f, -1.848394104e-03f, -1.846323942e-03f, -1.844250699e-03f, -1.842174378e-03f,
+-1.840094985e-03f, -1.838012522e-03f, -1.835926993e-03f, -1.833838402e-03f, -1.831746753e-03f, -1.829652050e-03f, -1.827554296e-03f, -1.825453495e-03f, -1.823349651e-03f, -1.821242768e-03f,
+-1.819132850e-03f, -1.817019899e-03f, -1.814903921e-03f, -1.812784919e-03f, -1.810662897e-03f, -1.808537859e-03f, -1.806409808e-03f, -1.804278748e-03f, -1.802144683e-03f, -1.800007618e-03f,
+-1.797867555e-03f, -1.795724499e-03f, -1.793578453e-03f, -1.791429422e-03f, -1.789277410e-03f, -1.787122419e-03f, -1.784964455e-03f, -1.782803520e-03f, -1.780639620e-03f, -1.778472757e-03f,
+-1.776302936e-03f, -1.774130160e-03f, -1.771954434e-03f, -1.769775762e-03f, -1.767594146e-03f, -1.765409592e-03f, -1.763222103e-03f, -1.761031684e-03f, -1.758838337e-03f, -1.756642067e-03f,
+-1.754442878e-03f, -1.752240775e-03f, -1.750035760e-03f, -1.747827838e-03f, -1.745617012e-03f, -1.743403288e-03f, -1.741186668e-03f, -1.738967157e-03f, -1.736744759e-03f, -1.734519477e-03f,
+-1.732291317e-03f, -1.730060281e-03f, -1.727826373e-03f, -1.725589599e-03f, -1.723349961e-03f, -1.721107464e-03f, -1.718862112e-03f, -1.716613909e-03f, -1.714362859e-03f, -1.712108966e-03f,
+-1.709852233e-03f, -1.707592666e-03f, -1.705330268e-03f, -1.703065043e-03f, -1.700796995e-03f, -1.698526129e-03f, -1.696252447e-03f, -1.693975956e-03f, -1.691696658e-03f, -1.689414557e-03f,
+-1.687129658e-03f, -1.684841965e-03f, -1.682551482e-03f, -1.680258213e-03f, -1.677962163e-03f, -1.675663334e-03f, -1.673361732e-03f, -1.671057360e-03f, -1.668750223e-03f, -1.666440325e-03f,
+-1.664127669e-03f, -1.661812261e-03f, -1.659494104e-03f, -1.657173202e-03f, -1.654849560e-03f, -1.652523181e-03f, -1.650194070e-03f, -1.647862231e-03f, -1.645527669e-03f, -1.643190387e-03f,
+-1.640850389e-03f, -1.638507680e-03f, -1.636162264e-03f, -1.633814145e-03f, -1.631463328e-03f, -1.629109816e-03f, -1.626753613e-03f, -1.624394725e-03f, -1.622033155e-03f, -1.619668907e-03f,
+-1.617301986e-03f, -1.614932396e-03f, -1.612560141e-03f, -1.610185225e-03f, -1.607807653e-03f, -1.605427429e-03f, -1.603044556e-03f, -1.600659041e-03f, -1.598270885e-03f, -1.595880095e-03f,
+-1.593486674e-03f, -1.591090626e-03f, -1.588691956e-03f, -1.586290668e-03f, -1.583886767e-03f, -1.581480256e-03f, -1.579071139e-03f, -1.576659422e-03f, -1.574245109e-03f, -1.571828203e-03f,
+-1.569408710e-03f, -1.566986632e-03f, -1.564561976e-03f, -1.562134745e-03f, -1.559704943e-03f, -1.557272575e-03f, -1.554837645e-03f, -1.552400158e-03f, -1.549960117e-03f, -1.547517527e-03f,
+-1.545072393e-03f, -1.542624719e-03f, -1.540174509e-03f, -1.537721768e-03f, -1.535266500e-03f, -1.532808709e-03f, -1.530348399e-03f, -1.527885576e-03f, -1.525420244e-03f, -1.522952406e-03f,
+-1.520482068e-03f, -1.518009233e-03f, -1.515533906e-03f, -1.513056092e-03f, -1.510575795e-03f, -1.508093020e-03f, -1.505607770e-03f, -1.503120050e-03f, -1.500629865e-03f, -1.498137219e-03f,
+-1.495642117e-03f, -1.493144562e-03f, -1.490644560e-03f, -1.488142115e-03f, -1.485637231e-03f, -1.483129913e-03f, -1.480620165e-03f, -1.478107992e-03f, -1.475593398e-03f, -1.473076388e-03f,
+-1.470556966e-03f, -1.468035136e-03f, -1.465510904e-03f, -1.462984273e-03f, -1.460455248e-03f, -1.457923834e-03f, -1.455390035e-03f, -1.452853855e-03f, -1.450315300e-03f, -1.447774373e-03f,
+-1.445231079e-03f, -1.442685423e-03f, -1.440137410e-03f, -1.437587043e-03f, -1.435034327e-03f, -1.432479267e-03f, -1.429921867e-03f, -1.427362132e-03f, -1.424800067e-03f, -1.422235675e-03f,
+-1.419668962e-03f, -1.417099932e-03f, -1.414528590e-03f, -1.411954940e-03f, -1.409378987e-03f, -1.406800735e-03f, -1.404220189e-03f, -1.401637354e-03f, -1.399052234e-03f, -1.396464833e-03f,
+-1.393875157e-03f, -1.391283209e-03f, -1.388688996e-03f, -1.386092520e-03f, -1.383493787e-03f, -1.380892801e-03f, -1.378289567e-03f, -1.375684090e-03f, -1.373076374e-03f, -1.370466423e-03f,
+-1.367854243e-03f, -1.365239839e-03f, -1.362623213e-03f, -1.360004373e-03f, -1.357383321e-03f, -1.354760063e-03f, -1.352134603e-03f, -1.349506946e-03f, -1.346877096e-03f, -1.344245059e-03f,
+-1.341610839e-03f, -1.338974441e-03f, -1.336335868e-03f, -1.333695127e-03f, -1.331052221e-03f, -1.328407156e-03f, -1.325759935e-03f, -1.323110564e-03f, -1.320459048e-03f, -1.317805391e-03f,
+-1.315149597e-03f, -1.312491672e-03f, -1.309831620e-03f, -1.307169446e-03f, -1.304505155e-03f, -1.301838751e-03f, -1.299170239e-03f, -1.296499623e-03f, -1.293826910e-03f, -1.291152102e-03f,
+-1.288475206e-03f, -1.285796225e-03f, -1.283115164e-03f, -1.280432029e-03f, -1.277746824e-03f, -1.275059553e-03f, -1.272370222e-03f, -1.269678835e-03f, -1.266985397e-03f, -1.264289913e-03f,
+-1.261592387e-03f, -1.258892825e-03f, -1.256191230e-03f, -1.253487609e-03f, -1.250781965e-03f, -1.248074303e-03f, -1.245364629e-03f, -1.242652946e-03f, -1.239939260e-03f, -1.237223576e-03f,
+-1.234505898e-03f, -1.231786232e-03f, -1.229064581e-03f, -1.226340951e-03f, -1.223615346e-03f, -1.220887772e-03f, -1.218158234e-03f, -1.215426735e-03f, -1.212693281e-03f, -1.209957877e-03f,
+-1.207220527e-03f, -1.204481237e-03f, -1.201740011e-03f, -1.198996854e-03f, -1.196251771e-03f, -1.193504766e-03f, -1.190755845e-03f, -1.188005013e-03f, -1.185252274e-03f, -1.182497633e-03f,
+-1.179741095e-03f, -1.176982665e-03f, -1.174222347e-03f, -1.171460148e-03f, -1.168696070e-03f, -1.165930121e-03f, -1.163162303e-03f, -1.160392623e-03f, -1.157621084e-03f, -1.154847693e-03f,
+-1.152072453e-03f, -1.149295370e-03f, -1.146516448e-03f, -1.143735693e-03f, -1.140953110e-03f, -1.138168702e-03f, -1.135382476e-03f, -1.132594436e-03f, -1.129804588e-03f, -1.127012935e-03f,
+-1.124219483e-03f, -1.121424236e-03f, -1.118627201e-03f, -1.115828381e-03f, -1.113027782e-03f, -1.110225408e-03f, -1.107421265e-03f, -1.104615357e-03f, -1.101807690e-03f, -1.098998267e-03f,
+-1.096187095e-03f, -1.093374179e-03f, -1.090559522e-03f, -1.087743131e-03f, -1.084925009e-03f, -1.082105163e-03f, -1.079283597e-03f, -1.076460315e-03f, -1.073635324e-03f, -1.070808627e-03f,
+-1.067980231e-03f, -1.065150139e-03f, -1.062318357e-03f, -1.059484890e-03f, -1.056649742e-03f, -1.053812920e-03f, -1.050974427e-03f, -1.048134270e-03f, -1.045292451e-03f, -1.042448978e-03f,
+-1.039603855e-03f, -1.036757086e-03f, -1.033908677e-03f, -1.031058633e-03f, -1.028206959e-03f, -1.025353660e-03f, -1.022498740e-03f, -1.019642206e-03f, -1.016784061e-03f, -1.013924311e-03f,
+-1.011062962e-03f, -1.008200017e-03f, -1.005335482e-03f, -1.002469363e-03f, -9.996016631e-04f, -9.967323888e-04f, -9.938615446e-04f, -9.909891356e-04f, -9.881151670e-04f, -9.852396436e-04f,
+-9.823625707e-04f, -9.794839532e-04f, -9.766037962e-04f, -9.737221047e-04f, -9.708388839e-04f, -9.679541388e-04f, -9.650678744e-04f, -9.621800958e-04f, -9.592908082e-04f, -9.564000165e-04f,
+-9.535077258e-04f, -9.506139413e-04f, -9.477186680e-04f, -9.448219110e-04f, -9.419236753e-04f, -9.390239661e-04f, -9.361227885e-04f, -9.332201475e-04f, -9.303160483e-04f, -9.274104959e-04f,
+-9.245034954e-04f, -9.215950520e-04f, -9.186851707e-04f, -9.157738567e-04f, -9.128611150e-04f, -9.099469508e-04f, -9.070313691e-04f, -9.041143752e-04f, -9.011959741e-04f, -8.982761709e-04f,
+-8.953549707e-04f, -8.924323788e-04f, -8.895084001e-04f, -8.865830398e-04f, -8.836563032e-04f, -8.807281952e-04f, -8.777987210e-04f, -8.748678858e-04f, -8.719356947e-04f, -8.690021528e-04f,
+-8.660672653e-04f, -8.631310374e-04f, -8.601934741e-04f, -8.572545806e-04f, -8.543143621e-04f, -8.513728237e-04f, -8.484299706e-04f, -8.454858079e-04f, -8.425403409e-04f, -8.395935745e-04f,
+-8.366455141e-04f, -8.336961648e-04f, -8.307455317e-04f, -8.277936200e-04f, -8.248404349e-04f, -8.218859816e-04f, -8.189302652e-04f, -8.159732909e-04f, -8.130150639e-04f, -8.100555893e-04f,
+-8.070948724e-04f, -8.041329184e-04f, -8.011697323e-04f, -7.982053194e-04f, -7.952396849e-04f, -7.922728340e-04f, -7.893047719e-04f, -7.863355038e-04f, -7.833650348e-04f, -7.803933702e-04f,
+-7.774205151e-04f, -7.744464748e-04f, -7.714712544e-04f, -7.684948593e-04f, -7.655172945e-04f, -7.625385653e-04f, -7.595586769e-04f, -7.565776345e-04f, -7.535954434e-04f, -7.506121086e-04f,
+-7.476276356e-04f, -7.446420294e-04f, -7.416552953e-04f, -7.386674385e-04f, -7.356784643e-04f, -7.326883778e-04f, -7.296971844e-04f, -7.267048891e-04f, -7.237114973e-04f, -7.207170142e-04f,
+-7.177214451e-04f, -7.147247951e-04f, -7.117270694e-04f, -7.087282734e-04f, -7.057284123e-04f, -7.027274913e-04f, -6.997255157e-04f, -6.967224906e-04f, -6.937184214e-04f, -6.907133133e-04f,
+-6.877071716e-04f, -6.847000014e-04f, -6.816918081e-04f, -6.786825969e-04f, -6.756723731e-04f, -6.726611419e-04f, -6.696489085e-04f, -6.666356783e-04f, -6.636214565e-04f, -6.606062483e-04f,
+-6.575900590e-04f, -6.545728940e-04f, -6.515547584e-04f, -6.485356575e-04f, -6.455155966e-04f, -6.424945810e-04f, -6.394726159e-04f, -6.364497066e-04f, -6.334258584e-04f, -6.304010765e-04f,
+-6.273753663e-04f, -6.243487330e-04f, -6.213211819e-04f, -6.182927183e-04f, -6.152633474e-04f, -6.122330746e-04f, -6.092019051e-04f, -6.061698443e-04f, -6.031368973e-04f, -6.001030696e-04f,
+-5.970683663e-04f, -5.940327928e-04f, -5.909963544e-04f, -5.879590563e-04f, -5.849209039e-04f, -5.818819025e-04f, -5.788420573e-04f, -5.758013737e-04f, -5.727598569e-04f, -5.697175123e-04f,
+-5.666743451e-04f, -5.636303607e-04f, -5.605855644e-04f, -5.575399614e-04f, -5.544935571e-04f, -5.514463568e-04f, -5.483983659e-04f, -5.453495895e-04f, -5.423000330e-04f, -5.392497018e-04f,
+-5.361986011e-04f, -5.331467362e-04f, -5.300941126e-04f, -5.270407354e-04f, -5.239866101e-04f, -5.209317418e-04f, -5.178761360e-04f, -5.148197980e-04f, -5.117627331e-04f, -5.087049466e-04f,
+-5.056464438e-04f, -5.025872301e-04f, -4.995273107e-04f, -4.964666911e-04f, -4.934053765e-04f, -4.903433723e-04f, -4.872806838e-04f, -4.842173163e-04f, -4.811532751e-04f, -4.780885657e-04f,
+-4.750231933e-04f, -4.719571632e-04f, -4.688904808e-04f, -4.658231514e-04f, -4.627551804e-04f, -4.596865731e-04f, -4.566173349e-04f, -4.535474710e-04f, -4.504769868e-04f, -4.474058877e-04f,
+-4.443341789e-04f, -4.412618659e-04f, -4.381889540e-04f, -4.351154485e-04f, -4.320413548e-04f, -4.289666782e-04f, -4.258914240e-04f, -4.228155976e-04f, -4.197392044e-04f, -4.166622497e-04f,
+-4.135847388e-04f, -4.105066771e-04f, -4.074280699e-04f, -4.043489227e-04f, -4.012692407e-04f, -3.981890292e-04f, -3.951082938e-04f, -3.920270396e-04f, -3.889452720e-04f, -3.858629965e-04f,
+-3.827802184e-04f, -3.796969429e-04f, -3.766131755e-04f, -3.735289216e-04f, -3.704441864e-04f, -3.673589754e-04f, -3.642732939e-04f, -3.611871472e-04f, -3.581005408e-04f, -3.550134799e-04f,
+-3.519259699e-04f, -3.488380163e-04f, -3.457496243e-04f, -3.426607993e-04f, -3.395715468e-04f, -3.364818719e-04f, -3.333917802e-04f, -3.303012769e-04f, -3.272103674e-04f, -3.241190572e-04f,
+-3.210273515e-04f, -3.179352557e-04f, -3.148427753e-04f, -3.117499154e-04f, -3.086566817e-04f, -3.055630792e-04f, -3.024691136e-04f, -2.993747901e-04f, -2.962801140e-04f, -2.931850908e-04f,
+-2.900897259e-04f, -2.869940245e-04f, -2.838979921e-04f, -2.808016340e-04f, -2.777049556e-04f, -2.746079623e-04f, -2.715106594e-04f, -2.684130523e-04f, -2.653151464e-04f, -2.622169471e-04f,
+-2.591184597e-04f, -2.560196895e-04f, -2.529206421e-04f, -2.498213226e-04f, -2.467217366e-04f, -2.436218893e-04f, -2.405217862e-04f, -2.374214326e-04f, -2.343208339e-04f, -2.312199954e-04f,
+-2.281189226e-04f, -2.250176208e-04f, -2.219160954e-04f, -2.188143517e-04f, -2.157123952e-04f, -2.126102311e-04f, -2.095078649e-04f, -2.064053020e-04f, -2.033025477e-04f, -2.001996073e-04f,
+-1.970964864e-04f, -1.939931901e-04f, -1.908897240e-04f, -1.877860934e-04f, -1.846823036e-04f, -1.815783600e-04f, -1.784742680e-04f, -1.753700331e-04f, -1.722656604e-04f, -1.691611555e-04f,
+-1.660565237e-04f, -1.629517703e-04f, -1.598469008e-04f, -1.567419205e-04f, -1.536368347e-04f, -1.505316490e-04f, -1.474263685e-04f, -1.443209988e-04f, -1.412155451e-04f, -1.381100129e-04f,
+-1.350044075e-04f, -1.318987342e-04f, -1.287929986e-04f, -1.256872058e-04f, -1.225813614e-04f, -1.194754707e-04f, -1.163695389e-04f, -1.132635716e-04f, -1.101575741e-04f, -1.070515518e-04f,
+-1.039455099e-04f, -1.008394540e-04f, -9.773338931e-05f, -9.462732126e-05f, -9.152125521e-05f, -8.841519654e-05f, -8.530915059e-05f, -8.220312276e-05f, -7.909711839e-05f, -7.599114287e-05f,
+-7.288520155e-05f, -6.977929981e-05f, -6.667344300e-05f, -6.356763650e-05f, -6.046188567e-05f, -5.735619588e-05f, -5.425057248e-05f, -5.114502085e-05f, -4.803954635e-05f, -4.493415434e-05f,
+-4.182885019e-05f, -3.872363925e-05f, -3.561852689e-05f, -3.251351847e-05f, -2.940861935e-05f, -2.630383490e-05f, -2.319917047e-05f, -2.009463142e-05f, -1.699022312e-05f, -1.388595091e-05f,
+-1.078182016e-05f, -7.677836232e-06f, -4.574004475e-06f, -1.470330248e-06f, 1.633181093e-06f, 4.736524192e-06f, 7.839693695e-06f, 1.094268425e-05f, 1.404549050e-05f, 1.714810709e-05f,
+2.025052867e-05f, 2.335274989e-05f, 2.645476539e-05f, 2.955656983e-05f, 3.265815786e-05f, 3.575952413e-05f, 3.886066328e-05f, 4.196156998e-05f, 4.506223887e-05f, 4.816266460e-05f,
+5.126284184e-05f, 5.436276523e-05f, 5.746242944e-05f, 6.056182911e-05f, 6.366095891e-05f, 6.675981349e-05f, 6.985838751e-05f, 7.295667563e-05f, 7.605467252e-05f, 7.915237282e-05f,
+8.224977121e-05f, 8.534686235e-05f, 8.844364089e-05f, 9.154010151e-05f, 9.463623887e-05f, 9.773204763e-05f, 1.008275225e-04f, 1.039226580e-04f, 1.070174490e-04f, 1.101118901e-04f,
+1.132059759e-04f, 1.162997011e-04f, 1.193930604e-04f, 1.224860485e-04f, 1.255786600e-04f, 1.286708896e-04f, 1.317627320e-04f, 1.348541819e-04f, 1.379452339e-04f, 1.410358827e-04f,
+1.441261231e-04f, 1.472159496e-04f, 1.503053570e-04f, 1.533943399e-04f, 1.564828930e-04f, 1.595710111e-04f, 1.626586887e-04f, 1.657459207e-04f, 1.688327016e-04f, 1.719190262e-04f,
+1.750048891e-04f, 1.780902851e-04f, 1.811752088e-04f, 1.842596549e-04f, 1.873436182e-04f, 1.904270933e-04f, 1.935100748e-04f, 1.965925576e-04f, 1.996745364e-04f, 2.027560057e-04f,
+2.058369603e-04f, 2.089173950e-04f, 2.119973043e-04f, 2.150766831e-04f, 2.181555260e-04f, 2.212338278e-04f, 2.243115831e-04f, 2.273887866e-04f, 2.304654331e-04f, 2.335415173e-04f,
+2.366170339e-04f, 2.396919776e-04f, 2.427663431e-04f, 2.458401251e-04f, 2.489133184e-04f, 2.519859176e-04f, 2.550579176e-04f, 2.581293130e-04f, 2.612000985e-04f, 2.642702689e-04f,
+2.673398188e-04f, 2.704087431e-04f, 2.734770365e-04f, 2.765446936e-04f, 2.796117092e-04f, 2.826780781e-04f, 2.857437950e-04f, 2.888088545e-04f, 2.918732516e-04f, 2.949369808e-04f,
+2.980000369e-04f, 3.010624148e-04f, 3.041241090e-04f, 3.071851144e-04f, 3.102454257e-04f, 3.133050376e-04f, 3.163639450e-04f, 3.194221425e-04f, 3.224796249e-04f, 3.255363870e-04f,
+3.285924235e-04f, 3.316477292e-04f, 3.347022988e-04f, 3.377561271e-04f, 3.408092088e-04f, 3.438615387e-04f, 3.469131117e-04f, 3.499639223e-04f, 3.530139655e-04f, 3.560632360e-04f,
+3.591117285e-04f, 3.621594378e-04f, 3.652063587e-04f, 3.682524860e-04f, 3.712978145e-04f, 3.743423389e-04f, 3.773860540e-04f, 3.804289546e-04f, 3.834710354e-04f, 3.865122914e-04f,
+3.895527171e-04f, 3.925923076e-04f, 3.956310574e-04f, 3.986689615e-04f, 4.017060146e-04f, 4.047422115e-04f, 4.077775470e-04f, 4.108120159e-04f, 4.138456130e-04f, 4.168783332e-04f,
+4.199101712e-04f, 4.229411218e-04f, 4.259711798e-04f, 4.290003401e-04f, 4.320285974e-04f, 4.350559466e-04f, 4.380823825e-04f, 4.411079000e-04f, 4.441324937e-04f, 4.471561586e-04f,
+4.501788894e-04f, 4.532006811e-04f, 4.562215283e-04f, 4.592414261e-04f, 4.622603691e-04f, 4.652783522e-04f, 4.682953703e-04f, 4.713114181e-04f, 4.743264906e-04f, 4.773405826e-04f,
+4.803536889e-04f, 4.833658043e-04f, 4.863769237e-04f, 4.893870420e-04f, 4.923961540e-04f, 4.954042545e-04f, 4.984113384e-04f, 5.014174006e-04f, 5.044224360e-04f, 5.074264393e-04f,
+5.104294055e-04f, 5.134313293e-04f, 5.164322058e-04f, 5.194320297e-04f, 5.224307959e-04f, 5.254284993e-04f, 5.284251348e-04f, 5.314206973e-04f, 5.344151815e-04f, 5.374085825e-04f,
+5.404008950e-04f, 5.433921141e-04f, 5.463822345e-04f, 5.493712511e-04f, 5.523591590e-04f, 5.553459528e-04f, 5.583316276e-04f, 5.613161782e-04f, 5.642995996e-04f, 5.672818867e-04f,
+5.702630342e-04f, 5.732430373e-04f, 5.762218907e-04f, 5.791995894e-04f, 5.821761282e-04f, 5.851515022e-04f, 5.881257063e-04f, 5.910987353e-04f, 5.940705841e-04f, 5.970412478e-04f,
+6.000107212e-04f, 6.029789993e-04f, 6.059460770e-04f, 6.089119492e-04f, 6.118766109e-04f, 6.148400570e-04f, 6.178022824e-04f, 6.207632822e-04f, 6.237230512e-04f, 6.266815844e-04f,
+6.296388768e-04f, 6.325949232e-04f, 6.355497188e-04f, 6.385032583e-04f, 6.414555369e-04f, 6.444065493e-04f, 6.473562908e-04f, 6.503047560e-04f, 6.532519402e-04f, 6.561978382e-04f,
+6.591424450e-04f, 6.620857555e-04f, 6.650277649e-04f, 6.679684680e-04f, 6.709078598e-04f, 6.738459354e-04f, 6.767826897e-04f, 6.797181177e-04f, 6.826522145e-04f, 6.855849749e-04f,
+6.885163941e-04f, 6.914464670e-04f, 6.943751886e-04f, 6.973025540e-04f, 7.002285581e-04f, 7.031531959e-04f, 7.060764626e-04f, 7.089983531e-04f, 7.119188624e-04f, 7.148379855e-04f,
+7.177557176e-04f, 7.206720535e-04f, 7.235869884e-04f, 7.265005173e-04f, 7.294126352e-04f, 7.323233372e-04f, 7.352326183e-04f, 7.381404735e-04f, 7.410468980e-04f, 7.439518867e-04f,
+7.468554347e-04f, 7.497575371e-04f, 7.526581890e-04f, 7.555573853e-04f, 7.584551212e-04f, 7.613513918e-04f, 7.642461920e-04f, 7.671395171e-04f, 7.700313620e-04f, 7.729217218e-04f,
+7.758105917e-04f, 7.786979667e-04f, 7.815838419e-04f, 7.844682123e-04f, 7.873510732e-04f, 7.902324195e-04f, 7.931122465e-04f, 7.959905491e-04f, 7.988673225e-04f, 8.017425619e-04f,
+8.046162622e-04f, 8.074884187e-04f, 8.103590264e-04f, 8.132280805e-04f, 8.160955761e-04f, 8.189615083e-04f, 8.218258723e-04f, 8.246886632e-04f, 8.275498761e-04f, 8.304095061e-04f,
+8.332675484e-04f, 8.361239982e-04f, 8.389788506e-04f, 8.418321008e-04f, 8.446837438e-04f, 8.475337749e-04f, 8.503821892e-04f, 8.532289819e-04f, 8.560741481e-04f, 8.589176831e-04f,
+8.617595819e-04f, 8.645998398e-04f, 8.674384520e-04f, 8.702754136e-04f, 8.731107197e-04f, 8.759443657e-04f, 8.787763467e-04f, 8.816066578e-04f, 8.844352943e-04f, 8.872622514e-04f,
+8.900875243e-04f, 8.929111081e-04f, 8.957329982e-04f, 8.985531897e-04f, 9.013716778e-04f, 9.041884577e-04f, 9.070035247e-04f, 9.098168740e-04f, 9.126285009e-04f, 9.154384005e-04f,
+9.182465680e-04f, 9.210529988e-04f, 9.238576881e-04f, 9.266606311e-04f, 9.294618231e-04f, 9.322612593e-04f, 9.350589349e-04f, 9.378548453e-04f, 9.406489857e-04f, 9.434413513e-04f,
+9.462319375e-04f, 9.490207395e-04f, 9.518077525e-04f, 9.545929719e-04f, 9.573763929e-04f, 9.601580108e-04f, 9.629378210e-04f, 9.657158186e-04f, 9.684919991e-04f, 9.712663576e-04f,
+9.740388895e-04f, 9.768095901e-04f, 9.795784548e-04f, 9.823454787e-04f, 9.851106573e-04f, 9.878739859e-04f, 9.906354597e-04f, 9.933950741e-04f, 9.961528245e-04f, 9.989087061e-04f,
+1.001662714e-03f, 1.004414845e-03f, 1.007165092e-03f, 1.009913452e-03f, 1.012659920e-03f, 1.015404492e-03f, 1.018147162e-03f, 1.020887926e-03f, 1.023626779e-03f, 1.026363718e-03f,
+1.029098736e-03f, 1.031831830e-03f, 1.034562995e-03f, 1.037292227e-03f, 1.040019520e-03f, 1.042744870e-03f, 1.045468272e-03f, 1.048189723e-03f, 1.050909216e-03f, 1.053626749e-03f,
+1.056342315e-03f, 1.059055911e-03f, 1.061767532e-03f, 1.064477173e-03f, 1.067184829e-03f, 1.069890497e-03f, 1.072594172e-03f, 1.075295849e-03f, 1.077995523e-03f, 1.080693190e-03f,
+1.083388845e-03f, 1.086082484e-03f, 1.088774103e-03f, 1.091463696e-03f, 1.094151259e-03f, 1.096836788e-03f, 1.099520278e-03f, 1.102201725e-03f, 1.104881123e-03f, 1.107558469e-03f,
+1.110233758e-03f, 1.112906986e-03f, 1.115578148e-03f, 1.118247239e-03f, 1.120914255e-03f, 1.123579191e-03f, 1.126242044e-03f, 1.128902808e-03f, 1.131561479e-03f, 1.134218052e-03f,
+1.136872524e-03f, 1.139524889e-03f, 1.142175143e-03f, 1.144823282e-03f, 1.147469301e-03f, 1.150113195e-03f, 1.152754961e-03f, 1.155394594e-03f, 1.158032089e-03f, 1.160667442e-03f,
+1.163300648e-03f, 1.165931704e-03f, 1.168560603e-03f, 1.171187344e-03f, 1.173811919e-03f, 1.176434326e-03f, 1.179054560e-03f, 1.181672617e-03f, 1.184288491e-03f, 1.186902180e-03f,
+1.189513677e-03f, 1.192122980e-03f, 1.194730082e-03f, 1.197334981e-03f, 1.199937672e-03f, 1.202538150e-03f, 1.205136411e-03f, 1.207732450e-03f, 1.210326264e-03f, 1.212917847e-03f,
+1.215507196e-03f, 1.218094306e-03f, 1.220679173e-03f, 1.223261792e-03f, 1.225842160e-03f, 1.228420271e-03f, 1.230996121e-03f, 1.233569707e-03f, 1.236141023e-03f, 1.238710066e-03f,
+1.241276830e-03f, 1.243841313e-03f, 1.246403509e-03f, 1.248963414e-03f, 1.251521024e-03f, 1.254076335e-03f, 1.256629342e-03f, 1.259180041e-03f, 1.261728428e-03f, 1.264274498e-03f,
+1.266818247e-03f, 1.269359671e-03f, 1.271898766e-03f, 1.274435527e-03f, 1.276969950e-03f, 1.279502031e-03f, 1.282031765e-03f, 1.284559149e-03f, 1.287084178e-03f, 1.289606847e-03f,
+1.292127154e-03f, 1.294645092e-03f, 1.297160659e-03f, 1.299673850e-03f, 1.302184660e-03f, 1.304693086e-03f, 1.307199124e-03f, 1.309702768e-03f, 1.312204015e-03f, 1.314702861e-03f,
+1.317199301e-03f, 1.319693332e-03f, 1.322184949e-03f, 1.324674148e-03f, 1.327160925e-03f, 1.329645275e-03f, 1.332127194e-03f, 1.334606679e-03f, 1.337083726e-03f, 1.339558329e-03f,
+1.342030485e-03f, 1.344500189e-03f, 1.346967438e-03f, 1.349432228e-03f, 1.351894554e-03f, 1.354354412e-03f, 1.356811798e-03f, 1.359266708e-03f, 1.361719138e-03f, 1.364169083e-03f,
+1.366616541e-03f, 1.369061505e-03f, 1.371503973e-03f, 1.373943941e-03f, 1.376381404e-03f, 1.378816357e-03f, 1.381248798e-03f, 1.383678722e-03f, 1.386106125e-03f, 1.388531003e-03f,
+1.390953352e-03f, 1.393373168e-03f, 1.395790446e-03f, 1.398205183e-03f, 1.400617374e-03f, 1.403027017e-03f, 1.405434106e-03f, 1.407838637e-03f, 1.410240607e-03f, 1.412640012e-03f,
+1.415036847e-03f, 1.417431108e-03f, 1.419822792e-03f, 1.422211895e-03f, 1.424598412e-03f, 1.426982340e-03f, 1.429363674e-03f, 1.431742411e-03f, 1.434118547e-03f, 1.436492077e-03f,
+1.438862998e-03f, 1.441231306e-03f, 1.443596996e-03f, 1.445960065e-03f, 1.448320510e-03f, 1.450678325e-03f, 1.453033507e-03f, 1.455386052e-03f, 1.457735956e-03f, 1.460083216e-03f,
+1.462427827e-03f, 1.464769785e-03f, 1.467109087e-03f, 1.469445728e-03f, 1.471779705e-03f, 1.474111014e-03f, 1.476439651e-03f, 1.478765612e-03f, 1.481088893e-03f, 1.483409490e-03f,
+1.485727400e-03f, 1.488042618e-03f, 1.490355141e-03f, 1.492664965e-03f, 1.494972086e-03f, 1.497276500e-03f, 1.499578204e-03f, 1.501877192e-03f, 1.504173463e-03f, 1.506467011e-03f,
+1.508757834e-03f, 1.511045926e-03f, 1.513331285e-03f, 1.515613907e-03f, 1.517893787e-03f, 1.520170922e-03f, 1.522445309e-03f, 1.524716943e-03f, 1.526985820e-03f, 1.529251938e-03f,
+1.531515292e-03f, 1.533775877e-03f, 1.536033692e-03f, 1.538288731e-03f, 1.540540992e-03f, 1.542790469e-03f, 1.545037161e-03f, 1.547281062e-03f, 1.549522169e-03f, 1.551760479e-03f,
+1.553995987e-03f, 1.556228690e-03f, 1.558458585e-03f, 1.560685667e-03f, 1.562909933e-03f, 1.565131379e-03f, 1.567350002e-03f, 1.569565797e-03f, 1.571778762e-03f, 1.573988892e-03f,
+1.576196184e-03f, 1.578400633e-03f, 1.580602238e-03f, 1.582800993e-03f, 1.584996895e-03f, 1.587189941e-03f, 1.589380126e-03f, 1.591567448e-03f, 1.593751902e-03f, 1.595933486e-03f,
+1.598112195e-03f, 1.600288025e-03f, 1.602460974e-03f, 1.604631037e-03f, 1.606798211e-03f, 1.608962492e-03f, 1.611123878e-03f, 1.613282363e-03f, 1.615437945e-03f, 1.617590620e-03f,
+1.619740385e-03f, 1.621887235e-03f, 1.624031168e-03f, 1.626172180e-03f, 1.628310267e-03f, 1.630445425e-03f, 1.632577652e-03f, 1.634706943e-03f, 1.636833296e-03f, 1.638956706e-03f,
+1.641077171e-03f, 1.643194686e-03f, 1.645309248e-03f, 1.647420853e-03f, 1.649529499e-03f, 1.651635181e-03f, 1.653737897e-03f, 1.655837642e-03f, 1.657934413e-03f, 1.660028207e-03f,
+1.662119021e-03f, 1.664206850e-03f, 1.666291692e-03f, 1.668373542e-03f, 1.670452398e-03f, 1.672528256e-03f, 1.674601113e-03f, 1.676670964e-03f, 1.678737808e-03f, 1.680801640e-03f,
+1.682862457e-03f, 1.684920255e-03f, 1.686975032e-03f, 1.689026784e-03f, 1.691075506e-03f, 1.693121197e-03f, 1.695163853e-03f, 1.697203470e-03f, 1.699240044e-03f, 1.701273573e-03f,
+1.703304054e-03f, 1.705331482e-03f, 1.707355855e-03f, 1.709377169e-03f, 1.711395421e-03f, 1.713410607e-03f, 1.715422725e-03f, 1.717431770e-03f, 1.719437740e-03f, 1.721440631e-03f,
+1.723440441e-03f, 1.725437165e-03f, 1.727430800e-03f, 1.729421343e-03f, 1.731408792e-03f, 1.733393142e-03f, 1.735374390e-03f, 1.737352533e-03f, 1.739327568e-03f, 1.741299492e-03f,
+1.743268301e-03f, 1.745233992e-03f, 1.747196562e-03f, 1.749156007e-03f, 1.751112325e-03f, 1.753065512e-03f, 1.755015565e-03f, 1.756962481e-03f, 1.758906256e-03f, 1.760846888e-03f,
+1.762784373e-03f, 1.764718708e-03f, 1.766649890e-03f, 1.768577915e-03f, 1.770502781e-03f, 1.772424484e-03f, 1.774343022e-03f, 1.776258390e-03f, 1.778170587e-03f, 1.780079608e-03f,
+1.781985451e-03f, 1.783888112e-03f, 1.785787589e-03f, 1.787683878e-03f, 1.789576977e-03f, 1.791466881e-03f, 1.793353588e-03f, 1.795237095e-03f, 1.797117400e-03f, 1.798994497e-03f,
+1.800868386e-03f, 1.802739062e-03f, 1.804606522e-03f, 1.806470764e-03f, 1.808331785e-03f, 1.810189580e-03f, 1.812044149e-03f, 1.813895486e-03f, 1.815743590e-03f, 1.817588457e-03f,
+1.819430084e-03f, 1.821268468e-03f, 1.823103607e-03f, 1.824935497e-03f, 1.826764135e-03f, 1.828589519e-03f, 1.830411644e-03f, 1.832230509e-03f, 1.834046110e-03f, 1.835858445e-03f,
+1.837667510e-03f, 1.839473302e-03f, 1.841275819e-03f, 1.843075058e-03f, 1.844871015e-03f, 1.846663688e-03f, 1.848453074e-03f, 1.850239169e-03f, 1.852021972e-03f, 1.853801478e-03f,
+1.855577686e-03f, 1.857350592e-03f, 1.859120193e-03f, 1.860886487e-03f, 1.862649470e-03f, 1.864409140e-03f, 1.866165494e-03f, 1.867918529e-03f, 1.869668242e-03f, 1.871414630e-03f,
+1.873157691e-03f, 1.874897422e-03f, 1.876633819e-03f, 1.878366880e-03f, 1.880096603e-03f, 1.881822983e-03f, 1.883546020e-03f, 1.885265709e-03f, 1.886982048e-03f, 1.888695034e-03f,
+1.890404665e-03f, 1.892110937e-03f, 1.893813848e-03f, 1.895513395e-03f, 1.897209576e-03f, 1.898902387e-03f, 1.900591825e-03f, 1.902277889e-03f, 1.903960576e-03f, 1.905639881e-03f,
+1.907315804e-03f, 1.908988341e-03f, 1.910657490e-03f, 1.912323247e-03f, 1.913985610e-03f, 1.915644577e-03f, 1.917300144e-03f, 1.918952310e-03f, 1.920601070e-03f, 1.922246424e-03f,
+1.923888367e-03f, 1.925526898e-03f, 1.927162013e-03f, 1.928793711e-03f, 1.930421988e-03f, 1.932046842e-03f, 1.933668269e-03f, 1.935286269e-03f, 1.936900837e-03f, 1.938511972e-03f,
+1.940119670e-03f, 1.941723930e-03f, 1.943324748e-03f, 1.944922122e-03f, 1.946516050e-03f, 1.948106528e-03f, 1.949693554e-03f, 1.951277127e-03f, 1.952857242e-03f, 1.954433898e-03f,
+1.956007092e-03f, 1.957576821e-03f, 1.959143084e-03f, 1.960705877e-03f, 1.962265198e-03f, 1.963821044e-03f, 1.965373413e-03f, 1.966922303e-03f, 1.968467711e-03f, 1.970009634e-03f,
+1.971548070e-03f, 1.973083016e-03f, 1.974614471e-03f, 1.976142431e-03f, 1.977666895e-03f, 1.979187859e-03f, 1.980705321e-03f, 1.982219279e-03f, 1.983729731e-03f, 1.985236673e-03f,
+1.986740104e-03f, 1.988240021e-03f, 1.989736422e-03f, 1.991229304e-03f, 1.992718665e-03f, 1.994204503e-03f, 1.995686815e-03f, 1.997165598e-03f, 1.998640851e-03f, 2.000112571e-03f,
+2.001580756e-03f, 2.003045403e-03f, 2.004506510e-03f, 2.005964075e-03f, 2.007418095e-03f, 2.008868568e-03f, 2.010315492e-03f, 2.011758864e-03f, 2.013198683e-03f, 2.014634945e-03f,
+2.016067649e-03f, 2.017496792e-03f, 2.018922371e-03f, 2.020344386e-03f, 2.021762833e-03f, 2.023177710e-03f, 2.024589015e-03f, 2.025996745e-03f, 2.027400899e-03f, 2.028801474e-03f,
+2.030198468e-03f, 2.031591879e-03f, 2.032981704e-03f, 2.034367942e-03f, 2.035750589e-03f, 2.037129645e-03f, 2.038505106e-03f, 2.039876970e-03f, 2.041245236e-03f, 2.042609901e-03f,
+2.043970963e-03f, 2.045328420e-03f, 2.046682270e-03f, 2.048032510e-03f, 2.049379138e-03f, 2.050722153e-03f, 2.052061551e-03f, 2.053397332e-03f, 2.054729493e-03f, 2.056058031e-03f,
+2.057382945e-03f, 2.058704233e-03f, 2.060021892e-03f, 2.061335920e-03f, 2.062646316e-03f, 2.063953077e-03f, 2.065256202e-03f, 2.066555687e-03f, 2.067851531e-03f, 2.069143733e-03f,
+2.070432289e-03f, 2.071717199e-03f, 2.072998459e-03f, 2.074276068e-03f, 2.075550024e-03f, 2.076820326e-03f, 2.078086970e-03f, 2.079349954e-03f, 2.080609278e-03f, 2.081864939e-03f,
+2.083116934e-03f, 2.084365263e-03f, 2.085609923e-03f, 2.086850912e-03f, 2.088088227e-03f, 2.089321868e-03f, 2.090551833e-03f, 2.091778118e-03f, 2.093000723e-03f, 2.094219646e-03f,
+2.095434884e-03f, 2.096646436e-03f, 2.097854299e-03f, 2.099058472e-03f, 2.100258954e-03f, 2.101455741e-03f, 2.102648833e-03f, 2.103838227e-03f, 2.105023922e-03f, 2.106205915e-03f,
+2.107384205e-03f, 2.108558790e-03f, 2.109729668e-03f, 2.110896838e-03f, 2.112060297e-03f, 2.113220044e-03f, 2.114376076e-03f, 2.115528393e-03f, 2.116676992e-03f, 2.117821872e-03f,
+2.118963030e-03f, 2.120100465e-03f, 2.121234176e-03f, 2.122364160e-03f, 2.123490415e-03f, 2.124612941e-03f, 2.125731734e-03f, 2.126846795e-03f, 2.127958119e-03f, 2.129065707e-03f,
+2.130169556e-03f, 2.131269665e-03f, 2.132366032e-03f, 2.133458655e-03f, 2.134547532e-03f, 2.135632662e-03f, 2.136714043e-03f, 2.137791674e-03f, 2.138865553e-03f, 2.139935678e-03f,
+2.141002047e-03f, 2.142064659e-03f, 2.143123512e-03f, 2.144178605e-03f, 2.145229936e-03f, 2.146277503e-03f, 2.147321305e-03f, 2.148361341e-03f, 2.149397607e-03f, 2.150430104e-03f,
+2.151458829e-03f, 2.152483781e-03f, 2.153504958e-03f, 2.154522359e-03f, 2.155535982e-03f, 2.156545825e-03f, 2.157551888e-03f, 2.158554168e-03f, 2.159552664e-03f, 2.160547374e-03f,
+2.161538297e-03f, 2.162525432e-03f, 2.163508777e-03f, 2.164488330e-03f, 2.165464090e-03f, 2.166436055e-03f, 2.167404224e-03f, 2.168368596e-03f, 2.169329169e-03f, 2.170285941e-03f,
+2.171238912e-03f, 2.172188079e-03f, 2.173133441e-03f, 2.174074998e-03f, 2.175012746e-03f, 2.175946686e-03f, 2.176876815e-03f, 2.177803132e-03f, 2.178725636e-03f, 2.179644325e-03f,
+2.180559199e-03f, 2.181470255e-03f, 2.182377492e-03f, 2.183280909e-03f, 2.184180504e-03f, 2.185076277e-03f, 2.185968225e-03f, 2.186856348e-03f, 2.187740645e-03f, 2.188621112e-03f,
+2.189497751e-03f, 2.190370558e-03f, 2.191239534e-03f, 2.192104676e-03f, 2.192965984e-03f, 2.193823455e-03f, 2.194677089e-03f, 2.195526885e-03f, 2.196372841e-03f, 2.197214955e-03f,
+2.198053228e-03f, 2.198887657e-03f, 2.199718241e-03f, 2.200544979e-03f, 2.201367870e-03f, 2.202186913e-03f, 2.203002106e-03f, 2.203813447e-03f, 2.204620937e-03f, 2.205424574e-03f,
+2.206224356e-03f, 2.207020283e-03f, 2.207812353e-03f, 2.208600565e-03f, 2.209384918e-03f, 2.210165410e-03f, 2.210942041e-03f, 2.211714810e-03f, 2.212483715e-03f, 2.213248755e-03f,
+2.214009930e-03f, 2.214767237e-03f, 2.215520676e-03f, 2.216270247e-03f, 2.217015946e-03f, 2.217757775e-03f, 2.218495731e-03f, 2.219229813e-03f, 2.219960021e-03f, 2.220686353e-03f,
+2.221408809e-03f, 2.222127387e-03f, 2.222842086e-03f, 2.223552906e-03f, 2.224259844e-03f, 2.224962901e-03f, 2.225662075e-03f, 2.226357365e-03f, 2.227048770e-03f, 2.227736290e-03f,
+2.228419923e-03f, 2.229099668e-03f, 2.229775524e-03f, 2.230447490e-03f, 2.231115566e-03f, 2.231779751e-03f, 2.232440043e-03f, 2.233096441e-03f, 2.233748945e-03f, 2.234397554e-03f,
+2.235042266e-03f, 2.235683082e-03f, 2.236319999e-03f, 2.236953018e-03f, 2.237582136e-03f, 2.238207354e-03f, 2.238828671e-03f, 2.239446085e-03f, 2.240059595e-03f, 2.240669202e-03f,
+2.241274904e-03f, 2.241876700e-03f, 2.242474589e-03f, 2.243068571e-03f, 2.243658644e-03f, 2.244244808e-03f, 2.244827063e-03f, 2.245405407e-03f, 2.245979839e-03f, 2.246550359e-03f,
+2.247116966e-03f, 2.247679660e-03f, 2.248238438e-03f, 2.248793302e-03f, 2.249344249e-03f, 2.249891279e-03f, 2.250434392e-03f, 2.250973587e-03f, 2.251508862e-03f, 2.252040218e-03f,
+2.252567654e-03f, 2.253091168e-03f, 2.253610760e-03f, 2.254126430e-03f, 2.254638177e-03f, 2.255146000e-03f, 2.255649898e-03f, 2.256149871e-03f, 2.256645919e-03f, 2.257138040e-03f,
+2.257626233e-03f, 2.258110499e-03f, 2.258590836e-03f, 2.259067245e-03f, 2.259539724e-03f, 2.260008272e-03f, 2.260472890e-03f, 2.260933576e-03f, 2.261390330e-03f, 2.261843152e-03f,
+2.262292041e-03f, 2.262736995e-03f, 2.263178016e-03f, 2.263615101e-03f, 2.264048251e-03f, 2.264477466e-03f, 2.264902744e-03f, 2.265324084e-03f, 2.265741488e-03f, 2.266154953e-03f,
+2.266564480e-03f, 2.266970067e-03f, 2.267371716e-03f, 2.267769424e-03f, 2.268163192e-03f, 2.268553019e-03f, 2.268938904e-03f, 2.269320848e-03f, 2.269698849e-03f, 2.270072907e-03f,
+2.270443023e-03f, 2.270809195e-03f, 2.271171422e-03f, 2.271529705e-03f, 2.271884044e-03f, 2.272234437e-03f, 2.272580885e-03f, 2.272923386e-03f, 2.273261941e-03f, 2.273596549e-03f,
+2.273927210e-03f, 2.274253924e-03f, 2.274576690e-03f, 2.274895507e-03f, 2.275210376e-03f, 2.275521296e-03f, 2.275828267e-03f, 2.276131288e-03f, 2.276430359e-03f, 2.276725481e-03f,
+2.277016651e-03f, 2.277303871e-03f, 2.277587140e-03f, 2.277866458e-03f, 2.278141824e-03f, 2.278413239e-03f, 2.278680701e-03f, 2.278944210e-03f, 2.279203768e-03f, 2.279459372e-03f,
+2.279711023e-03f, 2.279958721e-03f, 2.280202466e-03f, 2.280442257e-03f, 2.280678093e-03f, 2.280909976e-03f, 2.281137905e-03f, 2.281361879e-03f, 2.281581898e-03f, 2.281797962e-03f,
+2.282010072e-03f, 2.282218226e-03f, 2.282422425e-03f, 2.282622669e-03f, 2.282818957e-03f, 2.283011289e-03f, 2.283199666e-03f, 2.283384086e-03f, 2.283564551e-03f, 2.283741059e-03f,
+2.283913611e-03f, 2.284082207e-03f, 2.284246847e-03f, 2.284407530e-03f, 2.284564256e-03f, 2.284717026e-03f, 2.284865839e-03f, 2.285010696e-03f, 2.285151595e-03f, 2.285288538e-03f,
+2.285421525e-03f, 2.285550554e-03f, 2.285675627e-03f, 2.285796742e-03f, 2.285913901e-03f, 2.286027103e-03f, 2.286136349e-03f, 2.286241637e-03f, 2.286342969e-03f, 2.286440344e-03f,
+2.286533763e-03f, 2.286623224e-03f, 2.286708730e-03f, 2.286790279e-03f, 2.286867871e-03f, 2.286941507e-03f, 2.287011187e-03f, 2.287076910e-03f, 2.287138678e-03f, 2.287196489e-03f,
+2.287250345e-03f, 2.287300245e-03f, 2.287346190e-03f, 2.287388178e-03f, 2.287426212e-03f, 2.287460290e-03f, 2.287490414e-03f, 2.287516582e-03f, 2.287538796e-03f, 2.287557055e-03f,
+2.287571360e-03f, 2.287581711e-03f, 2.287588107e-03f, 2.287590550e-03f, 2.287589040e-03f, 2.287583576e-03f, 2.287574159e-03f, 2.287560789e-03f, 2.287543466e-03f, 2.287522191e-03f,
+2.287496963e-03f, 2.287467784e-03f, 2.287434653e-03f, 2.287397571e-03f, 2.287356538e-03f, 2.287311553e-03f, 2.287262619e-03f, 2.287209734e-03f, 2.287152899e-03f, 2.287092114e-03f,
+2.287027380e-03f, 2.286958697e-03f, 2.286886066e-03f, 2.286809486e-03f, 2.286728958e-03f, 2.286644482e-03f, 2.286556059e-03f, 2.286463690e-03f, 2.286367373e-03f, 2.286267111e-03f,
+2.286162903e-03f, 2.286054749e-03f, 2.285942650e-03f, 2.285826607e-03f, 2.285706620e-03f, 2.285582688e-03f, 2.285454814e-03f, 2.285322997e-03f, 2.285187237e-03f, 2.285047535e-03f,
+2.284903892e-03f, 2.284756307e-03f, 2.284604782e-03f, 2.284449317e-03f, 2.284289912e-03f, 2.284126567e-03f, 2.283959284e-03f, 2.283788063e-03f, 2.283612905e-03f, 2.283433809e-03f,
+2.283250776e-03f, 2.283063807e-03f, 2.282872903e-03f, 2.282678063e-03f, 2.282479289e-03f, 2.282276581e-03f, 2.282069940e-03f, 2.281859366e-03f, 2.281644859e-03f, 2.281426421e-03f,
+2.281204052e-03f, 2.280977753e-03f, 2.280747523e-03f, 2.280513364e-03f, 2.280275277e-03f, 2.280033261e-03f, 2.279787318e-03f, 2.279537448e-03f, 2.279283652e-03f, 2.279025931e-03f,
+2.278764285e-03f, 2.278498714e-03f, 2.278229221e-03f, 2.277955804e-03f, 2.277678465e-03f, 2.277397205e-03f, 2.277112024e-03f, 2.276822923e-03f, 2.276529902e-03f, 2.276232963e-03f,
+2.275932106e-03f, 2.275627332e-03f, 2.275318641e-03f, 2.275006035e-03f, 2.274689514e-03f, 2.274369078e-03f, 2.274044729e-03f, 2.273716468e-03f, 2.273384294e-03f, 2.273048210e-03f,
+2.272708215e-03f, 2.272364311e-03f, 2.272016498e-03f, 2.271664777e-03f, 2.271309149e-03f, 2.270949614e-03f, 2.270586175e-03f, 2.270218830e-03f, 2.269847582e-03f, 2.269472432e-03f,
+2.269093379e-03f, 2.268710425e-03f, 2.268323570e-03f, 2.267932816e-03f, 2.267538164e-03f, 2.267139614e-03f, 2.266737167e-03f, 2.266330825e-03f, 2.265920587e-03f, 2.265506456e-03f,
+2.265088431e-03f, 2.264666514e-03f, 2.264240706e-03f, 2.263811008e-03f, 2.263377420e-03f, 2.262939944e-03f, 2.262498581e-03f, 2.262053331e-03f, 2.261604196e-03f, 2.261151176e-03f,
+2.260694273e-03f, 2.260233487e-03f, 2.259768820e-03f, 2.259300272e-03f, 2.258827845e-03f, 2.258351540e-03f, 2.257871357e-03f, 2.257387298e-03f, 2.256899363e-03f, 2.256407554e-03f,
+2.255911872e-03f, 2.255412318e-03f, 2.254908893e-03f, 2.254401598e-03f, 2.253890433e-03f, 2.253375401e-03f, 2.252856503e-03f, 2.252333738e-03f, 2.251807110e-03f, 2.251276618e-03f,
+2.250742263e-03f, 2.250204048e-03f, 2.249661972e-03f, 2.249116038e-03f, 2.248566245e-03f, 2.248012597e-03f, 2.247455093e-03f, 2.246893735e-03f, 2.246328523e-03f, 2.245759460e-03f,
+2.245186546e-03f, 2.244609783e-03f, 2.244029172e-03f, 2.243444713e-03f, 2.242856409e-03f, 2.242264260e-03f, 2.241668267e-03f, 2.241068433e-03f, 2.240464757e-03f, 2.239857242e-03f,
+2.239245889e-03f, 2.238630698e-03f, 2.238011671e-03f, 2.237388810e-03f, 2.236762116e-03f, 2.236131590e-03f, 2.235497232e-03f, 2.234859046e-03f, 2.234217031e-03f, 2.233571190e-03f,
+2.232921523e-03f, 2.232268032e-03f, 2.231610718e-03f, 2.230949582e-03f, 2.230284627e-03f, 2.229615852e-03f, 2.228943261e-03f, 2.228266853e-03f, 2.227586630e-03f, 2.226902595e-03f,
+2.226214747e-03f, 2.225523089e-03f, 2.224827621e-03f, 2.224128346e-03f, 2.223425265e-03f, 2.222718379e-03f, 2.222007689e-03f, 2.221293198e-03f, 2.220574905e-03f, 2.219852814e-03f,
+2.219126925e-03f, 2.218397240e-03f, 2.217663760e-03f, 2.216926486e-03f, 2.216185421e-03f, 2.215440566e-03f, 2.214691922e-03f, 2.213939490e-03f, 2.213183272e-03f, 2.212423271e-03f,
+2.211659486e-03f, 2.210891920e-03f, 2.210120574e-03f, 2.209345450e-03f, 2.208566550e-03f, 2.207783874e-03f, 2.206997425e-03f, 2.206207204e-03f, 2.205413212e-03f, 2.204615451e-03f,
+2.203813923e-03f, 2.203008630e-03f, 2.202199572e-03f, 2.201386752e-03f, 2.200570170e-03f, 2.199749830e-03f, 2.198925732e-03f, 2.198097878e-03f, 2.197266269e-03f, 2.196430908e-03f,
+2.195591795e-03f, 2.194748933e-03f, 2.193902323e-03f, 2.193051968e-03f, 2.192197867e-03f, 2.191340024e-03f, 2.190478439e-03f, 2.189613116e-03f, 2.188744054e-03f, 2.187871256e-03f,
+2.186994724e-03f, 2.186114460e-03f, 2.185230464e-03f, 2.184342740e-03f, 2.183451288e-03f, 2.182556110e-03f, 2.181657208e-03f, 2.180754584e-03f, 2.179848240e-03f, 2.178938177e-03f,
+2.178024397e-03f, 2.177106902e-03f, 2.176185694e-03f, 2.175260774e-03f, 2.174332145e-03f, 2.173399807e-03f, 2.172463763e-03f, 2.171524015e-03f, 2.170580565e-03f, 2.169633414e-03f,
+2.168682564e-03f, 2.167728017e-03f, 2.166769775e-03f, 2.165807839e-03f, 2.164842213e-03f, 2.163872896e-03f, 2.162899892e-03f, 2.161923203e-03f, 2.160942829e-03f, 2.159958773e-03f,
+2.158971037e-03f, 2.157979623e-03f, 2.156984533e-03f, 2.155985768e-03f, 2.154983331e-03f, 2.153977223e-03f, 2.152967446e-03f, 2.151954003e-03f, 2.150936896e-03f, 2.149916125e-03f,
+2.148891694e-03f, 2.147863604e-03f, 2.146831857e-03f, 2.145796455e-03f, 2.144757400e-03f, 2.143714694e-03f, 2.142668340e-03f, 2.141618338e-03f, 2.140564692e-03f, 2.139507402e-03f,
+2.138446472e-03f, 2.137381903e-03f, 2.136313698e-03f, 2.135241857e-03f, 2.134166384e-03f, 2.133087280e-03f, 2.132004548e-03f, 2.130918189e-03f, 2.129828205e-03f, 2.128734600e-03f,
+2.127637374e-03f, 2.126536529e-03f, 2.125432069e-03f, 2.124323995e-03f, 2.123212308e-03f, 2.122097012e-03f, 2.120978109e-03f, 2.119855600e-03f, 2.118729487e-03f, 2.117599773e-03f,
+2.116466461e-03f, 2.115329551e-03f, 2.114189046e-03f, 2.113044949e-03f, 2.111897261e-03f, 2.110745985e-03f, 2.109591123e-03f, 2.108432677e-03f, 2.107270649e-03f, 2.106105042e-03f,
+2.104935857e-03f, 2.103763098e-03f, 2.102586765e-03f, 2.101406862e-03f, 2.100223390e-03f, 2.099036352e-03f, 2.097845751e-03f, 2.096651587e-03f, 2.095453864e-03f, 2.094252584e-03f,
+2.093047749e-03f, 2.091839362e-03f, 2.090627424e-03f, 2.089411938e-03f, 2.088192906e-03f, 2.086970330e-03f, 2.085744214e-03f, 2.084514558e-03f, 2.083281366e-03f, 2.082044640e-03f,
+2.080804382e-03f, 2.079560594e-03f, 2.078313279e-03f, 2.077062439e-03f, 2.075808077e-03f, 2.074550195e-03f, 2.073288794e-03f, 2.072023878e-03f, 2.070755449e-03f, 2.069483510e-03f,
+2.068208062e-03f, 2.066929108e-03f, 2.065646650e-03f, 2.064360692e-03f, 2.063071235e-03f, 2.061778281e-03f, 2.060481834e-03f, 2.059181895e-03f, 2.057878467e-03f, 2.056571553e-03f,
+2.055261154e-03f, 2.053947274e-03f, 2.052629914e-03f, 2.051309078e-03f, 2.049984768e-03f, 2.048656986e-03f, 2.047325734e-03f, 2.045991016e-03f, 2.044652833e-03f, 2.043311188e-03f,
+2.041966084e-03f, 2.040617524e-03f, 2.039265508e-03f, 2.037910042e-03f, 2.036551125e-03f, 2.035188763e-03f, 2.033822955e-03f, 2.032453707e-03f, 2.031081019e-03f, 2.029704895e-03f,
+2.028325336e-03f, 2.026942347e-03f, 2.025555928e-03f, 2.024166083e-03f, 2.022772815e-03f, 2.021376125e-03f, 2.019976017e-03f, 2.018572493e-03f, 2.017165556e-03f, 2.015755208e-03f,
+2.014341452e-03f, 2.012924291e-03f, 2.011503727e-03f, 2.010079763e-03f, 2.008652401e-03f, 2.007221645e-03f, 2.005787496e-03f, 2.004349958e-03f, 2.002909033e-03f, 2.001464724e-03f,
+2.000017033e-03f, 1.998565964e-03f, 1.997111518e-03f, 1.995653699e-03f, 1.994192509e-03f, 1.992727951e-03f, 1.991260028e-03f, 1.989788742e-03f, 1.988314096e-03f, 1.986836093e-03f,
+1.985354736e-03f, 1.983870027e-03f, 1.982381969e-03f, 1.980890565e-03f, 1.979395818e-03f, 1.977897730e-03f, 1.976396304e-03f, 1.974891542e-03f, 1.973383449e-03f, 1.971872026e-03f,
+1.970357276e-03f, 1.968839202e-03f, 1.967317807e-03f, 1.965793094e-03f, 1.964265065e-03f, 1.962733724e-03f, 1.961199072e-03f, 1.959661114e-03f, 1.958119851e-03f, 1.956575287e-03f,
+1.955027424e-03f, 1.953476266e-03f, 1.951921815e-03f, 1.950364074e-03f, 1.948803045e-03f, 1.947238733e-03f, 1.945671139e-03f, 1.944100267e-03f, 1.942526119e-03f, 1.940948698e-03f,
+1.939368008e-03f, 1.937784051e-03f, 1.936196830e-03f, 1.934606347e-03f, 1.933012607e-03f, 1.931415612e-03f, 1.929815364e-03f, 1.928211867e-03f, 1.926605123e-03f, 1.924995137e-03f,
+1.923381909e-03f, 1.921765445e-03f, 1.920145746e-03f, 1.918522815e-03f, 1.916896655e-03f, 1.915267270e-03f, 1.913634663e-03f, 1.911998836e-03f, 1.910359792e-03f, 1.908717535e-03f,
+1.907072067e-03f, 1.905423391e-03f, 1.903771511e-03f, 1.902116429e-03f, 1.900458149e-03f, 1.898796674e-03f, 1.897132006e-03f, 1.895464149e-03f, 1.893793105e-03f, 1.892118878e-03f,
+1.890441471e-03f, 1.888760887e-03f, 1.887077129e-03f, 1.885390200e-03f, 1.883700103e-03f, 1.882006841e-03f, 1.880310418e-03f, 1.878610835e-03f, 1.876908098e-03f, 1.875202208e-03f,
+1.873493169e-03f, 1.871780984e-03f, 1.870065655e-03f, 1.868347187e-03f, 1.866625583e-03f, 1.864900844e-03f, 1.863172975e-03f, 1.861441979e-03f, 1.859707859e-03f, 1.857970618e-03f,
+1.856230259e-03f, 1.854486785e-03f, 1.852740200e-03f, 1.850990507e-03f, 1.849237709e-03f, 1.847481809e-03f, 1.845722810e-03f, 1.843960716e-03f, 1.842195529e-03f, 1.840427254e-03f,
+1.838655893e-03f, 1.836881449e-03f, 1.835103926e-03f, 1.833323326e-03f, 1.831539654e-03f, 1.829752913e-03f, 1.827963105e-03f, 1.826170233e-03f, 1.824374303e-03f, 1.822575315e-03f,
+1.820773274e-03f, 1.818968183e-03f, 1.817160046e-03f, 1.815348865e-03f, 1.813534644e-03f, 1.811717386e-03f, 1.809897094e-03f, 1.808073772e-03f, 1.806247424e-03f, 1.804418051e-03f,
+1.802585659e-03f, 1.800750249e-03f, 1.798911826e-03f, 1.797070393e-03f, 1.795225952e-03f, 1.793378508e-03f, 1.791528064e-03f, 1.789674623e-03f, 1.787818189e-03f, 1.785958764e-03f,
+1.784096353e-03f, 1.782230958e-03f, 1.780362583e-03f, 1.778491232e-03f, 1.776616907e-03f, 1.774739613e-03f, 1.772859352e-03f, 1.770976128e-03f, 1.769089945e-03f, 1.767200805e-03f,
+1.765308713e-03f, 1.763413671e-03f, 1.761515684e-03f, 1.759614754e-03f, 1.757710885e-03f, 1.755804081e-03f, 1.753894344e-03f, 1.751981679e-03f, 1.750066088e-03f, 1.748147576e-03f,
+1.746226146e-03f, 1.744301801e-03f, 1.742374545e-03f, 1.740444380e-03f, 1.738511312e-03f, 1.736575343e-03f, 1.734636476e-03f, 1.732694716e-03f, 1.730750065e-03f, 1.728802528e-03f,
+1.726852107e-03f, 1.724898807e-03f, 1.722942630e-03f, 1.720983581e-03f, 1.719021663e-03f, 1.717056879e-03f, 1.715089233e-03f, 1.713118729e-03f, 1.711145370e-03f, 1.709169159e-03f,
+1.707190101e-03f, 1.705208198e-03f, 1.703223455e-03f, 1.701235875e-03f, 1.699245461e-03f, 1.697252218e-03f, 1.695256148e-03f, 1.693257256e-03f, 1.691255545e-03f, 1.689251018e-03f,
+1.687243679e-03f, 1.685233532e-03f, 1.683220581e-03f, 1.681204828e-03f, 1.679186279e-03f, 1.677164935e-03f, 1.675140802e-03f, 1.673113882e-03f, 1.671084179e-03f, 1.669051698e-03f,
+1.667016441e-03f, 1.664978412e-03f, 1.662937615e-03f, 1.660894054e-03f, 1.658847732e-03f, 1.656798653e-03f, 1.654746821e-03f, 1.652692239e-03f, 1.650634911e-03f, 1.648574841e-03f,
+1.646512032e-03f, 1.644446489e-03f, 1.642378214e-03f, 1.640307212e-03f, 1.638233487e-03f, 1.636157041e-03f, 1.634077879e-03f, 1.631996005e-03f, 1.629911422e-03f, 1.627824134e-03f,
+1.625734145e-03f, 1.623641459e-03f, 1.621546079e-03f, 1.619448008e-03f, 1.617347252e-03f, 1.615243813e-03f, 1.613137696e-03f, 1.611028904e-03f, 1.608917441e-03f, 1.606803311e-03f,
+1.604686517e-03f, 1.602567063e-03f, 1.600444954e-03f, 1.598320193e-03f, 1.596192784e-03f, 1.594062730e-03f, 1.591930035e-03f, 1.589794704e-03f, 1.587656740e-03f, 1.585516147e-03f,
+1.583372929e-03f, 1.581227089e-03f, 1.579078632e-03f, 1.576927561e-03f, 1.574773880e-03f, 1.572617594e-03f, 1.570458705e-03f, 1.568297218e-03f, 1.566133136e-03f, 1.563966465e-03f,
+1.561797206e-03f, 1.559625365e-03f, 1.557450946e-03f, 1.555273951e-03f, 1.553094385e-03f, 1.550912252e-03f, 1.548727556e-03f, 1.546540301e-03f, 1.544350490e-03f, 1.542158128e-03f,
+1.539963219e-03f, 1.537765766e-03f, 1.535565773e-03f, 1.533363245e-03f, 1.531158184e-03f, 1.528950596e-03f, 1.526740485e-03f, 1.524527853e-03f, 1.522312705e-03f, 1.520095045e-03f,
+1.517874878e-03f, 1.515652206e-03f, 1.513427034e-03f, 1.511199366e-03f, 1.508969206e-03f, 1.506736558e-03f, 1.504501426e-03f, 1.502263814e-03f, 1.500023725e-03f, 1.497781165e-03f,
+1.495536136e-03f, 1.493288643e-03f, 1.491038691e-03f, 1.488786282e-03f, 1.486531421e-03f, 1.484274112e-03f, 1.482014359e-03f, 1.479752166e-03f, 1.477487537e-03f, 1.475220477e-03f,
+1.472950989e-03f, 1.470679077e-03f, 1.468404745e-03f, 1.466127997e-03f, 1.463848838e-03f, 1.461567272e-03f, 1.459283302e-03f, 1.456996933e-03f, 1.454708168e-03f, 1.452417013e-03f,
+1.450123470e-03f, 1.447827544e-03f, 1.445529240e-03f, 1.443228560e-03f, 1.440925510e-03f, 1.438620093e-03f, 1.436312314e-03f, 1.434002177e-03f, 1.431689685e-03f, 1.429374843e-03f,
+1.427057655e-03f, 1.424738125e-03f, 1.422416258e-03f, 1.420092057e-03f, 1.417765526e-03f, 1.415436670e-03f, 1.413105494e-03f, 1.410772000e-03f, 1.408436193e-03f, 1.406098077e-03f,
+1.403757657e-03f, 1.401414937e-03f, 1.399069921e-03f, 1.396722612e-03f, 1.394373016e-03f, 1.392021136e-03f, 1.389666977e-03f, 1.387310542e-03f, 1.384951836e-03f, 1.382590864e-03f,
+1.380227629e-03f, 1.377862135e-03f, 1.375494387e-03f, 1.373124389e-03f, 1.370752146e-03f, 1.368377661e-03f, 1.366000938e-03f, 1.363621982e-03f, 1.361240798e-03f, 1.358857388e-03f,
+1.356471759e-03f, 1.354083913e-03f, 1.351693855e-03f, 1.349301589e-03f, 1.346907120e-03f, 1.344510452e-03f, 1.342111589e-03f, 1.339710536e-03f, 1.337307296e-03f, 1.334901873e-03f,
+1.332494273e-03f, 1.330084500e-03f, 1.327672557e-03f, 1.325258449e-03f, 1.322842180e-03f, 1.320423755e-03f, 1.318003178e-03f, 1.315580453e-03f, 1.313155585e-03f, 1.310728577e-03f,
+1.308299435e-03f, 1.305868162e-03f, 1.303434762e-03f, 1.300999241e-03f, 1.298561602e-03f, 1.296121850e-03f, 1.293679989e-03f, 1.291236023e-03f, 1.288789957e-03f, 1.286341795e-03f,
+1.283891541e-03f, 1.281439200e-03f, 1.278984776e-03f, 1.276528274e-03f, 1.274069697e-03f, 1.271609051e-03f, 1.269146339e-03f, 1.266681566e-03f, 1.264214736e-03f, 1.261745854e-03f,
+1.259274924e-03f, 1.256801950e-03f, 1.254326937e-03f, 1.251849889e-03f, 1.249370811e-03f, 1.246889707e-03f, 1.244406581e-03f, 1.241921437e-03f, 1.239434281e-03f, 1.236945117e-03f,
+1.234453948e-03f, 1.231960780e-03f, 1.229465617e-03f, 1.226968463e-03f, 1.224469322e-03f, 1.221968200e-03f, 1.219465100e-03f, 1.216960027e-03f, 1.214452985e-03f, 1.211943980e-03f,
+1.209433014e-03f, 1.206920093e-03f, 1.204405222e-03f, 1.201888403e-03f, 1.199369643e-03f, 1.196848946e-03f, 1.194326315e-03f, 1.191801756e-03f, 1.189275273e-03f, 1.186746870e-03f,
+1.184216552e-03f, 1.181684323e-03f, 1.179150188e-03f, 1.176614151e-03f, 1.174076218e-03f, 1.171536391e-03f, 1.168994676e-03f, 1.166451077e-03f, 1.163905599e-03f, 1.161358247e-03f,
+1.158809024e-03f, 1.156257935e-03f, 1.153704985e-03f, 1.151150178e-03f, 1.148593520e-03f, 1.146035013e-03f, 1.143474663e-03f, 1.140912475e-03f, 1.138348452e-03f, 1.135782600e-03f,
+1.133214923e-03f, 1.130645425e-03f, 1.128074112e-03f, 1.125500986e-03f, 1.122926054e-03f, 1.120349320e-03f, 1.117770788e-03f, 1.115190462e-03f, 1.112608348e-03f, 1.110024450e-03f,
+1.107438772e-03f, 1.104851319e-03f, 1.102262096e-03f, 1.099671107e-03f, 1.097078357e-03f, 1.094483849e-03f, 1.091887590e-03f, 1.089289583e-03f, 1.086689833e-03f, 1.084088345e-03f,
+1.081485123e-03f, 1.078880172e-03f, 1.076273496e-03f, 1.073665100e-03f, 1.071054989e-03f, 1.068443167e-03f, 1.065829639e-03f, 1.063214409e-03f, 1.060597482e-03f, 1.057978863e-03f,
+1.055358556e-03f, 1.052736566e-03f, 1.050112898e-03f, 1.047487555e-03f, 1.044860544e-03f, 1.042231867e-03f, 1.039601531e-03f, 1.036969539e-03f, 1.034335897e-03f, 1.031700609e-03f,
+1.029063679e-03f, 1.026425112e-03f, 1.023784913e-03f, 1.021143087e-03f, 1.018499638e-03f, 1.015854571e-03f, 1.013207890e-03f, 1.010559600e-03f, 1.007909706e-03f, 1.005258213e-03f,
+1.002605125e-03f, 9.999504462e-04f, 9.972941822e-04f, 9.946363375e-04f, 9.919769165e-04f, 9.893159241e-04f, 9.866533649e-04f, 9.839892436e-04f, 9.813235649e-04f, 9.786563335e-04f,
+9.759875540e-04f, 9.733172312e-04f, 9.706453697e-04f, 9.679719743e-04f, 9.652970497e-04f, 9.626206005e-04f, 9.599426315e-04f, 9.572631474e-04f, 9.545821529e-04f, 9.518996528e-04f,
+9.492156516e-04f, 9.465301543e-04f, 9.438431653e-04f, 9.411546896e-04f, 9.384647319e-04f, 9.357732967e-04f, 9.330803890e-04f, 9.303860134e-04f, 9.276901746e-04f, 9.249928775e-04f,
+9.222941266e-04f, 9.195939269e-04f, 9.168922830e-04f, 9.141891996e-04f, 9.114846816e-04f, 9.087787336e-04f, 9.060713605e-04f, 9.033625669e-04f, 9.006523577e-04f, 8.979407376e-04f,
+8.952277113e-04f, 8.925132837e-04f, 8.897974595e-04f, 8.870802434e-04f, 8.843616403e-04f, 8.816416549e-04f, 8.789202919e-04f, 8.761975563e-04f, 8.734734526e-04f, 8.707479858e-04f,
+8.680211606e-04f, 8.652929818e-04f, 8.625634542e-04f, 8.598325825e-04f, 8.571003716e-04f, 8.543668263e-04f, 8.516319513e-04f, 8.488957515e-04f, 8.461582316e-04f, 8.434193965e-04f,
+8.406792510e-04f, 8.379377998e-04f, 8.351950478e-04f, 8.324509998e-04f, 8.297056606e-04f, 8.269590350e-04f, 8.242111278e-04f, 8.214619439e-04f, 8.187114880e-04f, 8.159597651e-04f,
+8.132067798e-04f, 8.104525371e-04f, 8.076970418e-04f, 8.049402986e-04f, 8.021823125e-04f, 7.994230883e-04f, 7.966626308e-04f, 7.939009448e-04f, 7.911380351e-04f, 7.883739067e-04f,
+7.856085644e-04f, 7.828420130e-04f, 7.800742573e-04f, 7.773053022e-04f, 7.745351526e-04f, 7.717638133e-04f, 7.689912892e-04f, 7.662175850e-04f, 7.634427058e-04f, 7.606666562e-04f,
+7.578894413e-04f, 7.551110658e-04f, 7.523315347e-04f, 7.495508527e-04f, 7.467690248e-04f, 7.439860558e-04f, 7.412019506e-04f, 7.384167140e-04f, 7.356303511e-04f, 7.328428665e-04f,
+7.300542652e-04f, 7.272645522e-04f, 7.244737321e-04f, 7.216818100e-04f, 7.188887908e-04f, 7.160946793e-04f, 7.132994803e-04f, 7.105031989e-04f, 7.077058398e-04f, 7.049074081e-04f,
+7.021079085e-04f, 6.993073459e-04f, 6.965057254e-04f, 6.937030517e-04f, 6.908993297e-04f, 6.880945644e-04f, 6.852887607e-04f, 6.824819235e-04f, 6.796740577e-04f, 6.768651681e-04f,
+6.740552598e-04f, 6.712443376e-04f, 6.684324064e-04f, 6.656194711e-04f, 6.628055367e-04f, 6.599906081e-04f, 6.571746902e-04f, 6.543577879e-04f, 6.515399061e-04f, 6.487210498e-04f,
+6.459012238e-04f, 6.430804332e-04f, 6.402586828e-04f, 6.374359776e-04f, 6.346123225e-04f, 6.317877224e-04f, 6.289621823e-04f, 6.261357070e-04f, 6.233083016e-04f, 6.204799710e-04f,
+6.176507200e-04f, 6.148205537e-04f, 6.119894770e-04f, 6.091574948e-04f, 6.063246121e-04f, 6.034908338e-04f, 6.006561649e-04f, 5.978206103e-04f, 5.949841750e-04f, 5.921468638e-04f,
+5.893086818e-04f, 5.864696340e-04f, 5.836297251e-04f, 5.807889604e-04f, 5.779473446e-04f, 5.751048827e-04f, 5.722615797e-04f, 5.694174406e-04f, 5.665724703e-04f, 5.637266737e-04f,
+5.608800559e-04f, 5.580326218e-04f, 5.551843764e-04f, 5.523353246e-04f, 5.494854714e-04f, 5.466348218e-04f, 5.437833807e-04f, 5.409311531e-04f, 5.380781441e-04f, 5.352243584e-04f,
+5.323698012e-04f, 5.295144775e-04f, 5.266583921e-04f, 5.238015500e-04f, 5.209439563e-04f, 5.180856160e-04f, 5.152265339e-04f, 5.123667151e-04f, 5.095061646e-04f, 5.066448873e-04f,
+5.037828882e-04f, 5.009201724e-04f, 4.980567448e-04f, 4.951926103e-04f, 4.923277741e-04f, 4.894622410e-04f, 4.865960161e-04f, 4.837291043e-04f, 4.808615107e-04f, 4.779932402e-04f,
+4.751242978e-04f, 4.722546886e-04f, 4.693844175e-04f, 4.665134895e-04f, 4.636419096e-04f, 4.607696829e-04f, 4.578968142e-04f, 4.550233087e-04f, 4.521491713e-04f, 4.492744070e-04f,
+4.463990208e-04f, 4.435230177e-04f, 4.406464028e-04f, 4.377691810e-04f, 4.348913573e-04f, 4.320129368e-04f, 4.291339244e-04f, 4.262543252e-04f, 4.233741441e-04f, 4.204933862e-04f,
+4.176120565e-04f, 4.147301601e-04f, 4.118477018e-04f, 4.089646867e-04f, 4.060811199e-04f, 4.031970063e-04f, 4.003123510e-04f, 3.974271590e-04f, 3.945414352e-04f, 3.916551848e-04f,
+3.887684127e-04f, 3.858811239e-04f, 3.829933235e-04f, 3.801050165e-04f, 3.772162079e-04f, 3.743269027e-04f, 3.714371059e-04f, 3.685468227e-04f, 3.656560578e-04f, 3.627648166e-04f,
+3.598731038e-04f, 3.569809246e-04f, 3.540882839e-04f, 3.511951869e-04f, 3.483016385e-04f, 3.454076437e-04f, 3.425132077e-04f, 3.396183353e-04f, 3.367230317e-04f, 3.338273018e-04f,
+3.309311507e-04f, 3.280345834e-04f, 3.251376050e-04f, 3.222402205e-04f, 3.193424348e-04f, 3.164442531e-04f, 3.135456804e-04f, 3.106467216e-04f, 3.077473819e-04f, 3.048476662e-04f,
+3.019475796e-04f, 2.990471272e-04f, 2.961463139e-04f, 2.932451448e-04f, 2.903436249e-04f, 2.874417593e-04f, 2.845395530e-04f, 2.816370110e-04f, 2.787341384e-04f, 2.758309401e-04f,
+2.729274213e-04f, 2.700235870e-04f, 2.671194421e-04f, 2.642149918e-04f, 2.613102411e-04f, 2.584051950e-04f, 2.554998586e-04f, 2.525942368e-04f, 2.496883348e-04f, 2.467821575e-04f,
+2.438757100e-04f, 2.409689974e-04f, 2.380620246e-04f, 2.351547968e-04f, 2.322473189e-04f, 2.293395960e-04f, 2.264316331e-04f, 2.235234354e-04f, 2.206150077e-04f, 2.177063551e-04f,
+2.147974828e-04f, 2.118883957e-04f, 2.089790989e-04f, 2.060695973e-04f, 2.031598962e-04f, 2.002500004e-04f, 1.973399150e-04f, 1.944296451e-04f, 1.915191957e-04f, 1.886085719e-04f,
+1.856977787e-04f, 1.827868210e-04f, 1.798757041e-04f, 1.769644329e-04f, 1.740530124e-04f, 1.711414477e-04f, 1.682297438e-04f, 1.653179058e-04f, 1.624059388e-04f, 1.594938476e-04f,
+1.565816375e-04f, 1.536693134e-04f, 1.507568803e-04f, 1.478443434e-04f, 1.449317076e-04f, 1.420189781e-04f, 1.391061597e-04f, 1.361932576e-04f, 1.332802768e-04f, 1.303672224e-04f,
+1.274540994e-04f, 1.245409127e-04f, 1.216276676e-04f, 1.187143689e-04f, 1.158010218e-04f, 1.128876313e-04f, 1.099742024e-04f, 1.070607401e-04f, 1.041472495e-04f, 1.012337357e-04f,
+9.832020363e-05f, 9.540665836e-05f, 9.249310493e-05f, 8.957954838e-05f, 8.666599373e-05f, 8.375244604e-05f, 8.083891033e-05f, 7.792539164e-05f, 7.501189500e-05f, 7.209842544e-05f,
+6.918498801e-05f, 6.627158774e-05f, 6.335822966e-05f, 6.044491880e-05f, 5.753166019e-05f, 5.461845888e-05f, 5.170531988e-05f, 4.879224824e-05f, 4.587924899e-05f, 4.296632714e-05f,
+4.005348775e-05f, 3.714073582e-05f, 3.422807641e-05f, 3.131551453e-05f, 2.840305521e-05f, 2.549070349e-05f, 2.257846439e-05f, 1.966634293e-05f, 1.675434415e-05f, 1.384247307e-05f,
+1.093073472e-05f, 8.019134123e-06f, 5.107676304e-06f, 2.196366288e-06f, -7.147909011e-07f, -3.625790239e-06f, -6.536626704e-06f, -9.447295273e-06f, -1.235779092e-05f, -1.526810864e-05f,
+-1.817824339e-05f, -2.108819016e-05f, -2.399794393e-05f, -2.690749968e-05f, -2.981685240e-05f, -3.272599706e-05f, -3.563492866e-05f, -3.854364216e-05f, -4.145213256e-05f, -4.436039484e-05f,
+-4.726842399e-05f, -5.017621499e-05f, -5.308376283e-05f, -5.599106249e-05f, -5.889810898e-05f, -6.180489726e-05f, -6.471142234e-05f, -6.761767921e-05f, -7.052366285e-05f, -7.342936826e-05f,
+-7.633479043e-05f, -7.923992436e-05f, -8.214476503e-05f, -8.504930745e-05f, -8.795354660e-05f, -9.085747749e-05f, -9.376109512e-05f, -9.666439447e-05f, -9.956737055e-05f, -1.024700184e-04f,
+-1.053723329e-04f, -1.082743092e-04f, -1.111759422e-04f, -1.140772269e-04f, -1.169781584e-04f, -1.198787317e-04f, -1.227789416e-04f, -1.256787834e-04f, -1.285782519e-04f, -1.314773422e-04f,
+-1.343760493e-04f, -1.372743681e-04f, -1.401722938e-04f, -1.430698213e-04f, -1.459669456e-04f, -1.488636618e-04f, -1.517599648e-04f, -1.546558497e-04f, -1.575513115e-04f, -1.604463452e-04f,
+-1.633409458e-04f, -1.662351084e-04f, -1.691288280e-04f, -1.720220996e-04f, -1.749149182e-04f, -1.778072788e-04f, -1.806991765e-04f, -1.835906063e-04f, -1.864815632e-04f, -1.893720422e-04f,
+-1.922620385e-04f, -1.951515469e-04f, -1.980405626e-04f, -2.009290806e-04f, -2.038170959e-04f, -2.067046035e-04f, -2.095915985e-04f, -2.124780760e-04f, -2.153640309e-04f, -2.182494582e-04f,
+-2.211343532e-04f, -2.240187107e-04f, -2.269025258e-04f, -2.297857936e-04f, -2.326685092e-04f, -2.355506674e-04f, -2.384322635e-04f, -2.413132925e-04f, -2.441937494e-04f, -2.470736292e-04f,
+-2.499529271e-04f, -2.528316380e-04f, -2.557097571e-04f, -2.585872793e-04f, -2.614641998e-04f, -2.643405136e-04f, -2.672162157e-04f, -2.700913013e-04f, -2.729657654e-04f, -2.758396030e-04f,
+-2.787128093e-04f, -2.815853792e-04f, -2.844573079e-04f, -2.873285904e-04f, -2.901992219e-04f, -2.930691973e-04f, -2.959385117e-04f, -2.988071603e-04f, -3.016751381e-04f, -3.045424402e-04f,
+-3.074090616e-04f, -3.102749975e-04f, -3.131402429e-04f, -3.160047930e-04f, -3.188686427e-04f, -3.217317872e-04f, -3.245942216e-04f, -3.274559409e-04f, -3.303169404e-04f, -3.331772149e-04f,
+-3.360367598e-04f, -3.388955699e-04f, -3.417536405e-04f, -3.446109667e-04f, -3.474675435e-04f, -3.503233660e-04f, -3.531784294e-04f, -3.560327288e-04f, -3.588862592e-04f, -3.617390158e-04f,
+-3.645909937e-04f, -3.674421879e-04f, -3.702925937e-04f, -3.731422061e-04f, -3.759910203e-04f, -3.788390313e-04f, -3.816862344e-04f, -3.845326245e-04f, -3.873781968e-04f, -3.902229465e-04f,
+-3.930668687e-04f, -3.959099585e-04f, -3.987522111e-04f, -4.015936215e-04f, -4.044341850e-04f, -4.072738965e-04f, -4.101127514e-04f, -4.129507447e-04f, -4.157878716e-04f, -4.186241271e-04f,
+-4.214595065e-04f, -4.242940050e-04f, -4.271276175e-04f, -4.299603394e-04f, -4.327921657e-04f, -4.356230916e-04f, -4.384531123e-04f, -4.412822228e-04f, -4.441104185e-04f, -4.469376944e-04f,
+-4.497640457e-04f, -4.525894675e-04f, -4.554139551e-04f, -4.582375036e-04f, -4.610601081e-04f, -4.638817639e-04f, -4.667024661e-04f, -4.695222099e-04f, -4.723409904e-04f, -4.751588029e-04f,
+-4.779756425e-04f, -4.807915044e-04f, -4.836063839e-04f, -4.864202760e-04f, -4.892331760e-04f, -4.920450790e-04f, -4.948559804e-04f, -4.976658751e-04f, -5.004747585e-04f, -5.032826258e-04f,
+-5.060894722e-04f, -5.088952927e-04f, -5.117000828e-04f, -5.145038375e-04f, -5.173065521e-04f, -5.201082218e-04f, -5.229088418e-04f, -5.257084073e-04f, -5.285069136e-04f, -5.313043558e-04f,
+-5.341007292e-04f, -5.368960290e-04f, -5.396902504e-04f, -5.424833887e-04f, -5.452754391e-04f, -5.480663968e-04f, -5.508562570e-04f, -5.536450151e-04f, -5.564326662e-04f, -5.592192055e-04f,
+-5.620046284e-04f, -5.647889301e-04f, -5.675721057e-04f, -5.703541507e-04f, -5.731350601e-04f, -5.759148293e-04f, -5.786934536e-04f, -5.814709281e-04f, -5.842472481e-04f, -5.870224090e-04f,
+-5.897964060e-04f, -5.925692343e-04f, -5.953408892e-04f, -5.981113660e-04f, -6.008806599e-04f, -6.036487663e-04f, -6.064156804e-04f, -6.091813975e-04f, -6.119459129e-04f, -6.147092219e-04f,
+-6.174713197e-04f, -6.202322017e-04f, -6.229918631e-04f, -6.257502993e-04f, -6.285075055e-04f, -6.312634770e-04f, -6.340182092e-04f, -6.367716973e-04f, -6.395239367e-04f, -6.422749226e-04f,
+-6.450246504e-04f, -6.477731154e-04f, -6.505203130e-04f, -6.532662383e-04f, -6.560108868e-04f, -6.587542538e-04f, -6.614963345e-04f, -6.642371244e-04f, -6.669766188e-04f, -6.697148130e-04f,
+-6.724517023e-04f, -6.751872821e-04f, -6.779215477e-04f, -6.806544945e-04f, -6.833861178e-04f, -6.861164129e-04f, -6.888453753e-04f, -6.915730002e-04f, -6.942992830e-04f, -6.970242192e-04f,
+-6.997478040e-04f, -7.024700328e-04f, -7.051909010e-04f, -7.079104039e-04f, -7.106285370e-04f, -7.133452955e-04f, -7.160606750e-04f, -7.187746707e-04f, -7.214872780e-04f, -7.241984924e-04f,
+-7.269083092e-04f, -7.296167238e-04f, -7.323237316e-04f, -7.350293280e-04f, -7.377335084e-04f, -7.404362682e-04f, -7.431376029e-04f, -7.458375077e-04f, -7.485359782e-04f, -7.512330097e-04f,
+-7.539285976e-04f, -7.566227375e-04f, -7.593154246e-04f, -7.620066544e-04f, -7.646964224e-04f, -7.673847240e-04f, -7.700715546e-04f, -7.727569096e-04f, -7.754407845e-04f, -7.781231747e-04f,
+-7.808040757e-04f, -7.834834829e-04f, -7.861613918e-04f, -7.888377977e-04f, -7.915126963e-04f, -7.941860828e-04f, -7.968579529e-04f, -7.995283019e-04f, -8.021971253e-04f, -8.048644186e-04f,
+-8.075301773e-04f, -8.101943968e-04f, -8.128570726e-04f, -8.155182002e-04f, -8.181777751e-04f, -8.208357927e-04f, -8.234922486e-04f, -8.261471383e-04f, -8.288004572e-04f, -8.314522008e-04f,
+-8.341023646e-04f, -8.367509442e-04f, -8.393979351e-04f, -8.420433327e-04f, -8.446871326e-04f, -8.473293303e-04f, -8.499699213e-04f, -8.526089011e-04f, -8.552462653e-04f, -8.578820094e-04f,
+-8.605161289e-04f, -8.631486194e-04f, -8.657794763e-04f, -8.684086953e-04f, -8.710362718e-04f, -8.736622015e-04f, -8.762864799e-04f, -8.789091025e-04f, -8.815300648e-04f, -8.841493625e-04f,
+-8.867669911e-04f, -8.893829462e-04f, -8.919972233e-04f, -8.946098180e-04f, -8.972207260e-04f, -8.998299426e-04f, -9.024374637e-04f, -9.050432846e-04f, -9.076474011e-04f, -9.102498086e-04f,
+-9.128505029e-04f, -9.154494795e-04f, -9.180467339e-04f, -9.206422619e-04f, -9.232360590e-04f, -9.258281208e-04f, -9.284184429e-04f, -9.310070210e-04f, -9.335938507e-04f, -9.361789275e-04f,
+-9.387622471e-04f, -9.413438053e-04f, -9.439235974e-04f, -9.465016193e-04f, -9.490778666e-04f, -9.516523348e-04f, -9.542250197e-04f, -9.567959169e-04f, -9.593650221e-04f, -9.619323308e-04f,
+-9.644978388e-04f, -9.670615417e-04f, -9.696234353e-04f, -9.721835150e-04f, -9.747417768e-04f, -9.772982161e-04f, -9.798528287e-04f, -9.824056103e-04f, -9.849565565e-04f, -9.875056631e-04f,
+-9.900529257e-04f, -9.925983401e-04f, -9.951419019e-04f, -9.976836068e-04f, -1.000223451e-03f, -1.002761429e-03f, -1.005297538e-03f, -1.007831772e-03f, -1.010364128e-03f, -1.012894602e-03f,
+-1.015423189e-03f, -1.017949885e-03f, -1.020474685e-03f, -1.022997586e-03f, -1.025518583e-03f, -1.028037672e-03f, -1.030554848e-03f, -1.033070108e-03f, -1.035583447e-03f, -1.038094860e-03f,
+-1.040604345e-03f, -1.043111895e-03f, -1.045617508e-03f, -1.048121179e-03f, -1.050622904e-03f, -1.053122678e-03f, -1.055620497e-03f, -1.058116357e-03f, -1.060610254e-03f, -1.063102184e-03f,
+-1.065592143e-03f, -1.068080125e-03f, -1.070566128e-03f, -1.073050147e-03f, -1.075532177e-03f, -1.078012215e-03f, -1.080490256e-03f, -1.082966296e-03f, -1.085440331e-03f, -1.087912357e-03f,
+-1.090382370e-03f, -1.092850365e-03f, -1.095316339e-03f, -1.097780286e-03f, -1.100242204e-03f, -1.102702087e-03f, -1.105159933e-03f, -1.107615736e-03f, -1.110069492e-03f, -1.112521198e-03f,
+-1.114970849e-03f, -1.117418441e-03f, -1.119863970e-03f, -1.122307431e-03f, -1.124748822e-03f, -1.127188137e-03f, -1.129625373e-03f, -1.132060525e-03f, -1.134493589e-03f, -1.136924562e-03f,
+-1.139353439e-03f, -1.141780216e-03f, -1.144204889e-03f, -1.146627453e-03f, -1.149047906e-03f, -1.151466242e-03f, -1.153882458e-03f, -1.156296550e-03f, -1.158708513e-03f, -1.161118344e-03f,
+-1.163526038e-03f, -1.165931592e-03f, -1.168335001e-03f, -1.170736261e-03f, -1.173135369e-03f, -1.175532320e-03f, -1.177927110e-03f, -1.180319735e-03f, -1.182710192e-03f, -1.185098475e-03f,
+-1.187484582e-03f, -1.189868509e-03f, -1.192250250e-03f, -1.194629802e-03f, -1.197007162e-03f, -1.199382325e-03f, -1.201755287e-03f, -1.204126044e-03f, -1.206494593e-03f, -1.208860928e-03f,
+-1.211225047e-03f, -1.213586946e-03f, -1.215946619e-03f, -1.218304064e-03f, -1.220659277e-03f, -1.223012253e-03f, -1.225362989e-03f, -1.227711480e-03f, -1.230057723e-03f, -1.232401713e-03f,
+-1.234743448e-03f, -1.237082922e-03f, -1.239420132e-03f, -1.241755075e-03f, -1.244087745e-03f, -1.246418140e-03f, -1.248746255e-03f, -1.251072086e-03f, -1.253395630e-03f, -1.255716882e-03f,
+-1.258035840e-03f, -1.260352498e-03f, -1.262666853e-03f, -1.264978901e-03f, -1.267288638e-03f, -1.269596061e-03f, -1.271901165e-03f, -1.274203947e-03f, -1.276504402e-03f, -1.278802528e-03f,
+-1.281098319e-03f, -1.283391773e-03f, -1.285682885e-03f, -1.287971652e-03f, -1.290258070e-03f, -1.292542134e-03f, -1.294823842e-03f, -1.297103188e-03f, -1.299380171e-03f, -1.301654785e-03f,
+-1.303927026e-03f, -1.306196892e-03f, -1.308464378e-03f, -1.310729480e-03f, -1.312992196e-03f, -1.315252520e-03f, -1.317510449e-03f, -1.319765979e-03f, -1.322019107e-03f, -1.324269829e-03f,
+-1.326518141e-03f, -1.328764039e-03f, -1.331007520e-03f, -1.333248579e-03f, -1.335487214e-03f, -1.337723420e-03f, -1.339957193e-03f, -1.342188531e-03f, -1.344417428e-03f, -1.346643882e-03f,
+-1.348867888e-03f, -1.351089444e-03f, -1.353308544e-03f, -1.355525187e-03f, -1.357739367e-03f, -1.359951081e-03f, -1.362160326e-03f, -1.364367097e-03f, -1.366571392e-03f, -1.368773206e-03f,
+-1.370972536e-03f, -1.373169378e-03f, -1.375363728e-03f, -1.377555583e-03f, -1.379744939e-03f, -1.381931793e-03f, -1.384116141e-03f, -1.386297978e-03f, -1.388477303e-03f, -1.390654110e-03f,
+-1.392828396e-03f, -1.395000158e-03f, -1.397169392e-03f, -1.399336095e-03f, -1.401500262e-03f, -1.403661891e-03f, -1.405820977e-03f, -1.407977518e-03f, -1.410131508e-03f, -1.412282946e-03f,
+-1.414431827e-03f, -1.416578147e-03f, -1.418721904e-03f, -1.420863093e-03f, -1.423001711e-03f, -1.425137755e-03f, -1.427271220e-03f, -1.429402104e-03f, -1.431530403e-03f, -1.433656113e-03f,
+-1.435779230e-03f, -1.437899752e-03f, -1.440017675e-03f, -1.442132994e-03f, -1.444245707e-03f, -1.446355811e-03f, -1.448463301e-03f, -1.450568174e-03f, -1.452670426e-03f, -1.454770055e-03f,
+-1.456867056e-03f, -1.458961427e-03f, -1.461053163e-03f, -1.463142262e-03f, -1.465228719e-03f, -1.467312531e-03f, -1.469393695e-03f, -1.471472208e-03f, -1.473548065e-03f, -1.475621264e-03f,
+-1.477691801e-03f, -1.479759672e-03f, -1.481824875e-03f, -1.483887405e-03f, -1.485947260e-03f, -1.488004435e-03f, -1.490058928e-03f, -1.492110735e-03f, -1.494159853e-03f, -1.496206278e-03f,
+-1.498250007e-03f, -1.500291036e-03f, -1.502329363e-03f, -1.504364983e-03f, -1.506397893e-03f, -1.508428091e-03f, -1.510455572e-03f, -1.512480333e-03f, -1.514502372e-03f, -1.516521683e-03f,
+-1.518538266e-03f, -1.520552115e-03f, -1.522563227e-03f, -1.524571600e-03f, -1.526577230e-03f, -1.528580113e-03f, -1.530580246e-03f, -1.532577627e-03f, -1.534572251e-03f, -1.536564115e-03f,
+-1.538553217e-03f, -1.540539552e-03f, -1.542523118e-03f, -1.544503911e-03f, -1.546481928e-03f, -1.548457166e-03f, -1.550429621e-03f, -1.552399290e-03f, -1.554366170e-03f, -1.556330257e-03f,
+-1.558291550e-03f, -1.560250043e-03f, -1.562205734e-03f, -1.564158620e-03f, -1.566108697e-03f, -1.568055963e-03f, -1.570000413e-03f, -1.571942046e-03f, -1.573880857e-03f, -1.575816843e-03f,
+-1.577750002e-03f, -1.579680330e-03f, -1.581607823e-03f, -1.583532479e-03f, -1.585454295e-03f, -1.587373267e-03f, -1.589289393e-03f, -1.591202668e-03f, -1.593113090e-03f, -1.595020656e-03f,
+-1.596925362e-03f, -1.598827206e-03f, -1.600726184e-03f, -1.602622294e-03f, -1.604515531e-03f, -1.606405893e-03f, -1.608293377e-03f, -1.610177980e-03f, -1.612059699e-03f, -1.613938529e-03f,
+-1.615814470e-03f, -1.617687517e-03f, -1.619557666e-03f, -1.621424917e-03f, -1.623289264e-03f, -1.625150705e-03f, -1.627009237e-03f, -1.628864858e-03f, -1.630717563e-03f, -1.632567349e-03f,
+-1.634414215e-03f, -1.636258156e-03f, -1.638099171e-03f, -1.639937254e-03f, -1.641772405e-03f, -1.643604619e-03f, -1.645433894e-03f, -1.647260226e-03f, -1.649083614e-03f, -1.650904052e-03f,
+-1.652721540e-03f, -1.654536073e-03f, -1.656347649e-03f, -1.658156265e-03f, -1.659961917e-03f, -1.661764603e-03f, -1.663564320e-03f, -1.665361065e-03f, -1.667154835e-03f, -1.668945627e-03f,
+-1.670733438e-03f, -1.672518266e-03f, -1.674300106e-03f, -1.676078957e-03f, -1.677854815e-03f, -1.679627678e-03f, -1.681397542e-03f, -1.683164405e-03f, -1.684928264e-03f, -1.686689116e-03f,
+-1.688446957e-03f, -1.690201786e-03f, -1.691953600e-03f, -1.693702394e-03f, -1.695448167e-03f, -1.697190916e-03f, -1.698930638e-03f, -1.700667330e-03f, -1.702400989e-03f, -1.704131612e-03f,
+-1.705859197e-03f, -1.707583741e-03f, -1.709305240e-03f, -1.711023693e-03f, -1.712739095e-03f, -1.714451446e-03f, -1.716160741e-03f, -1.717866977e-03f, -1.719570153e-03f, -1.721270265e-03f,
+-1.722967311e-03f, -1.724661288e-03f, -1.726352192e-03f, -1.728040022e-03f, -1.729724774e-03f, -1.731406446e-03f, -1.733085035e-03f, -1.734760539e-03f, -1.736432953e-03f, -1.738102277e-03f,
+-1.739768507e-03f, -1.741431640e-03f, -1.743091674e-03f, -1.744748606e-03f, -1.746402433e-03f, -1.748053153e-03f, -1.749700763e-03f, -1.751345260e-03f, -1.752986641e-03f, -1.754624905e-03f,
+-1.756260047e-03f, -1.757892066e-03f, -1.759520960e-03f, -1.761146724e-03f, -1.762769357e-03f, -1.764388856e-03f, -1.766005218e-03f, -1.767618441e-03f, -1.769228523e-03f, -1.770835459e-03f,
+-1.772439249e-03f, -1.774039889e-03f, -1.775637376e-03f, -1.777231709e-03f, -1.778822884e-03f, -1.780410900e-03f, -1.781995752e-03f, -1.783577440e-03f, -1.785155959e-03f, -1.786731309e-03f,
+-1.788303485e-03f, -1.789872486e-03f, -1.791438309e-03f, -1.793000951e-03f, -1.794560411e-03f, -1.796116685e-03f, -1.797669771e-03f, -1.799219666e-03f, -1.800766368e-03f, -1.802309875e-03f,
+-1.803850184e-03f, -1.805387292e-03f, -1.806921197e-03f, -1.808451896e-03f, -1.809979387e-03f, -1.811503668e-03f, -1.813024736e-03f, -1.814542589e-03f, -1.816057224e-03f, -1.817568638e-03f,
+-1.819076830e-03f, -1.820581797e-03f, -1.822083536e-03f, -1.823582045e-03f, -1.825077321e-03f, -1.826569363e-03f, -1.828058168e-03f, -1.829543732e-03f, -1.831026055e-03f, -1.832505134e-03f,
+-1.833980965e-03f, -1.835453548e-03f, -1.836922879e-03f, -1.838388956e-03f, -1.839851777e-03f, -1.841311339e-03f, -1.842767640e-03f, -1.844220678e-03f, -1.845670450e-03f, -1.847116955e-03f,
+-1.848560189e-03f, -1.850000150e-03f, -1.851436836e-03f, -1.852870246e-03f, -1.854300375e-03f, -1.855727223e-03f, -1.857150787e-03f, -1.858571064e-03f, -1.859988053e-03f, -1.861401751e-03f,
+-1.862812155e-03f, -1.864219264e-03f, -1.865623076e-03f, -1.867023587e-03f, -1.868420796e-03f, -1.869814701e-03f, -1.871205299e-03f, -1.872592588e-03f, -1.873976566e-03f, -1.875357230e-03f,
+-1.876734579e-03f, -1.878108611e-03f, -1.879479322e-03f, -1.880846711e-03f, -1.882210776e-03f, -1.883571515e-03f, -1.884928924e-03f, -1.886283003e-03f, -1.887633749e-03f, -1.888981160e-03f,
+-1.890325233e-03f, -1.891665967e-03f, -1.893003359e-03f, -1.894337408e-03f, -1.895668111e-03f, -1.896995466e-03f, -1.898319470e-03f, -1.899640123e-03f, -1.900957421e-03f, -1.902271363e-03f,
+-1.903581947e-03f, -1.904889170e-03f, -1.906193030e-03f, -1.907493525e-03f, -1.908790654e-03f, -1.910084414e-03f, -1.911374803e-03f, -1.912661819e-03f, -1.913945460e-03f, -1.915225725e-03f,
+-1.916502610e-03f, -1.917776114e-03f, -1.919046235e-03f, -1.920312970e-03f, -1.921576319e-03f, -1.922836279e-03f, -1.924092847e-03f, -1.925346023e-03f, -1.926595803e-03f, -1.927842186e-03f,
+-1.929085171e-03f, -1.930324754e-03f, -1.931560934e-03f, -1.932793710e-03f, -1.934023078e-03f, -1.935249038e-03f, -1.936471587e-03f, -1.937690724e-03f, -1.938906446e-03f, -1.940118751e-03f,
+-1.941327638e-03f, -1.942533105e-03f, -1.943735149e-03f, -1.944933769e-03f, -1.946128964e-03f, -1.947320730e-03f, -1.948509067e-03f, -1.949693972e-03f, -1.950875444e-03f, -1.952053480e-03f,
+-1.953228079e-03f, -1.954399239e-03f, -1.955566959e-03f, -1.956731235e-03f, -1.957892067e-03f, -1.959049453e-03f, -1.960203391e-03f, -1.961353878e-03f, -1.962500914e-03f, -1.963644496e-03f,
+-1.964784623e-03f, -1.965921293e-03f, -1.967054504e-03f, -1.968184254e-03f, -1.969310542e-03f, -1.970433365e-03f, -1.971552723e-03f, -1.972668612e-03f, -1.973781033e-03f, -1.974889982e-03f,
+-1.975995458e-03f, -1.977097460e-03f, -1.978195985e-03f, -1.979291032e-03f, -1.980382599e-03f, -1.981470685e-03f, -1.982555288e-03f, -1.983636406e-03f, -1.984714037e-03f, -1.985788180e-03f,
+-1.986858833e-03f, -1.987925995e-03f, -1.988989663e-03f, -1.990049837e-03f, -1.991106514e-03f, -1.992159693e-03f, -1.993209372e-03f, -1.994255550e-03f, -1.995298225e-03f, -1.996337395e-03f,
+-1.997373059e-03f, -1.998405215e-03f, -1.999433862e-03f, -2.000458998e-03f, -2.001480621e-03f, -2.002498730e-03f, -2.003513323e-03f, -2.004524399e-03f, -2.005531956e-03f, -2.006535993e-03f,
+-2.007536508e-03f, -2.008533499e-03f, -2.009526965e-03f, -2.010516905e-03f, -2.011503316e-03f, -2.012486198e-03f, -2.013465549e-03f, -2.014441367e-03f, -2.015413651e-03f, -2.016382400e-03f,
+-2.017347611e-03f, -2.018309284e-03f, -2.019267417e-03f, -2.020222008e-03f, -2.021173057e-03f, -2.022120561e-03f, -2.023064519e-03f, -2.024004930e-03f, -2.024941792e-03f, -2.025875105e-03f,
+-2.026804865e-03f, -2.027731073e-03f, -2.028653726e-03f, -2.029572823e-03f, -2.030488363e-03f, -2.031400345e-03f, -2.032308766e-03f, -2.033213627e-03f, -2.034114924e-03f, -2.035012658e-03f,
+-2.035906826e-03f, -2.036797427e-03f, -2.037684460e-03f, -2.038567924e-03f, -2.039447817e-03f, -2.040324137e-03f, -2.041196885e-03f, -2.042066057e-03f, -2.042931653e-03f, -2.043793672e-03f,
+-2.044652113e-03f, -2.045506973e-03f, -2.046358252e-03f, -2.047205949e-03f, -2.048050061e-03f, -2.048890589e-03f, -2.049727530e-03f, -2.050560884e-03f, -2.051390649e-03f, -2.052216823e-03f,
+-2.053039407e-03f, -2.053858398e-03f, -2.054673795e-03f, -2.055485597e-03f, -2.056293803e-03f, -2.057098412e-03f, -2.057899422e-03f, -2.058696832e-03f, -2.059490641e-03f, -2.060280848e-03f,
+-2.061067452e-03f, -2.061850452e-03f, -2.062629845e-03f, -2.063405632e-03f, -2.064177811e-03f, -2.064946381e-03f, -2.065711341e-03f, -2.066472689e-03f, -2.067230425e-03f, -2.067984548e-03f,
+-2.068735056e-03f, -2.069481948e-03f, -2.070225223e-03f, -2.070964880e-03f, -2.071700918e-03f, -2.072433336e-03f, -2.073162133e-03f, -2.073887307e-03f, -2.074608858e-03f, -2.075326785e-03f,
+-2.076041087e-03f, -2.076751762e-03f, -2.077458809e-03f, -2.078162228e-03f, -2.078862017e-03f, -2.079558176e-03f, -2.080250704e-03f, -2.080939599e-03f, -2.081624860e-03f, -2.082306487e-03f,
+-2.082984478e-03f, -2.083658833e-03f, -2.084329550e-03f, -2.084996629e-03f, -2.085660068e-03f, -2.086319867e-03f, -2.086976025e-03f, -2.087628541e-03f, -2.088277414e-03f, -2.088922642e-03f,
+-2.089564225e-03f, -2.090202163e-03f, -2.090836454e-03f, -2.091467097e-03f, -2.092094091e-03f, -2.092717436e-03f, -2.093337131e-03f, -2.093953175e-03f, -2.094565566e-03f, -2.095174304e-03f,
+-2.095779389e-03f, -2.096380819e-03f, -2.096978593e-03f, -2.097572711e-03f, -2.098163172e-03f, -2.098749975e-03f, -2.099333119e-03f, -2.099912603e-03f, -2.100488427e-03f, -2.101060590e-03f,
+-2.101629091e-03f, -2.102193929e-03f, -2.102755103e-03f, -2.103312613e-03f, -2.103866458e-03f, -2.104416637e-03f, -2.104963149e-03f, -2.105505994e-03f, -2.106045171e-03f, -2.106580679e-03f,
+-2.107112518e-03f, -2.107640686e-03f, -2.108165183e-03f, -2.108686009e-03f, -2.109203162e-03f, -2.109716641e-03f, -2.110226447e-03f, -2.110732579e-03f, -2.111235036e-03f, -2.111733816e-03f,
+-2.112228920e-03f, -2.112720347e-03f, -2.113208096e-03f, -2.113692167e-03f, -2.114172558e-03f, -2.114649270e-03f, -2.115122302e-03f, -2.115591652e-03f, -2.116057321e-03f, -2.116519308e-03f,
+-2.116977612e-03f, -2.117432233e-03f, -2.117883169e-03f, -2.118330421e-03f, -2.118773988e-03f, -2.119213870e-03f, -2.119650065e-03f, -2.120082573e-03f, -2.120511394e-03f, -2.120936527e-03f,
+-2.121357971e-03f, -2.121775727e-03f, -2.122189793e-03f, -2.122600169e-03f, -2.123006855e-03f, -2.123409850e-03f, -2.123809153e-03f, -2.124204764e-03f, -2.124596682e-03f, -2.124984908e-03f,
+-2.125369440e-03f, -2.125750279e-03f, -2.126127423e-03f, -2.126500872e-03f, -2.126870626e-03f, -2.127236684e-03f, -2.127599046e-03f, -2.127957711e-03f, -2.128312680e-03f, -2.128663951e-03f,
+-2.129011525e-03f, -2.129355400e-03f, -2.129695576e-03f, -2.130032054e-03f, -2.130364832e-03f, -2.130693911e-03f, -2.131019289e-03f, -2.131340967e-03f, -2.131658944e-03f, -2.131973220e-03f,
+-2.132283795e-03f, -2.132590667e-03f, -2.132893838e-03f, -2.133193306e-03f, -2.133489071e-03f, -2.133781133e-03f, -2.134069491e-03f, -2.134354146e-03f, -2.134635097e-03f, -2.134912343e-03f,
+-2.135185885e-03f, -2.135455722e-03f, -2.135721854e-03f, -2.135984280e-03f, -2.136243001e-03f, -2.136498016e-03f, -2.136749324e-03f, -2.136996927e-03f, -2.137240823e-03f, -2.137481012e-03f,
+-2.137717493e-03f, -2.137950268e-03f, -2.138179335e-03f, -2.138404695e-03f, -2.138626347e-03f, -2.138844291e-03f, -2.139058526e-03f, -2.139269053e-03f, -2.139475872e-03f, -2.139678982e-03f,
+-2.139878383e-03f, -2.140074075e-03f, -2.140266059e-03f, -2.140454332e-03f, -2.140638897e-03f, -2.140819752e-03f, -2.140996897e-03f, -2.141170333e-03f, -2.141340059e-03f, -2.141506075e-03f,
+-2.141668381e-03f, -2.141826977e-03f, -2.141981863e-03f, -2.142133038e-03f, -2.142280504e-03f, -2.142424259e-03f, -2.142564304e-03f, -2.142700638e-03f, -2.142833262e-03f, -2.142962175e-03f,
+-2.143087378e-03f, -2.143208870e-03f, -2.143326652e-03f, -2.143440723e-03f, -2.143551084e-03f, -2.143657735e-03f, -2.143760674e-03f, -2.143859904e-03f, -2.143955423e-03f, -2.144047231e-03f,
+-2.144135329e-03f, -2.144219717e-03f, -2.144300395e-03f, -2.144377362e-03f, -2.144450619e-03f, -2.144520166e-03f, -2.144586003e-03f, -2.144648131e-03f, -2.144706548e-03f, -2.144761256e-03f,
+-2.144812254e-03f, -2.144859543e-03f, -2.144903122e-03f, -2.144942992e-03f, -2.144979153e-03f, -2.145011605e-03f, -2.145040349e-03f, -2.145065383e-03f, -2.145086709e-03f, -2.145104327e-03f,
+-2.145118236e-03f, -2.145128438e-03f, -2.145134931e-03f, -2.145137717e-03f, -2.145136796e-03f, -2.145132167e-03f, -2.145123832e-03f, -2.145111789e-03f, -2.145096040e-03f, -2.145076585e-03f,
+-2.145053423e-03f, -2.145026556e-03f, -2.144995983e-03f, -2.144961704e-03f, -2.144923720e-03f, -2.144882032e-03f, -2.144836639e-03f, -2.144787542e-03f, -2.144734740e-03f, -2.144678235e-03f,
+-2.144618026e-03f, -2.144554115e-03f, -2.144486500e-03f, -2.144415183e-03f, -2.144340164e-03f, -2.144261443e-03f, -2.144179020e-03f, -2.144092896e-03f, -2.144003072e-03f, -2.143909547e-03f,
+-2.143812321e-03f, -2.143711396e-03f, -2.143606772e-03f, -2.143498449e-03f, -2.143386427e-03f, -2.143270707e-03f, -2.143151289e-03f, -2.143028174e-03f, -2.142901361e-03f, -2.142770853e-03f,
+-2.142636648e-03f, -2.142498747e-03f, -2.142357151e-03f, -2.142211860e-03f, -2.142062875e-03f, -2.141910196e-03f, -2.141753823e-03f, -2.141593758e-03f, -2.141430000e-03f, -2.141262550e-03f,
+-2.141091408e-03f, -2.140916575e-03f, -2.140738052e-03f, -2.140555839e-03f, -2.140369936e-03f, -2.140180344e-03f, -2.139987064e-03f, -2.139790096e-03f, -2.139589440e-03f, -2.139385098e-03f,
+-2.139177069e-03f, -2.138965355e-03f, -2.138749955e-03f, -2.138530871e-03f, -2.138308103e-03f, -2.138081651e-03f, -2.137851517e-03f, -2.137617700e-03f, -2.137380201e-03f, -2.137139022e-03f,
+-2.136894162e-03f, -2.136645622e-03f, -2.136393403e-03f, -2.136137506e-03f, -2.135877931e-03f, -2.135614678e-03f, -2.135347749e-03f, -2.135077144e-03f, -2.134802863e-03f, -2.134524908e-03f,
+-2.134243280e-03f, -2.133957977e-03f, -2.133669003e-03f, -2.133376356e-03f, -2.133080039e-03f, -2.132780051e-03f, -2.132476393e-03f, -2.132169066e-03f, -2.131858071e-03f, -2.131543408e-03f,
+-2.131225079e-03f, -2.130903084e-03f, -2.130577423e-03f, -2.130248098e-03f, -2.129915109e-03f, -2.129578457e-03f, -2.129238143e-03f, -2.128894168e-03f, -2.128546531e-03f, -2.128195236e-03f,
+-2.127840281e-03f, -2.127481667e-03f, -2.127119397e-03f, -2.126753470e-03f, -2.126383887e-03f, -2.126010649e-03f, -2.125633758e-03f, -2.125253213e-03f, -2.124869015e-03f, -2.124481167e-03f,
+-2.124089667e-03f, -2.123694518e-03f, -2.123295720e-03f, -2.122893274e-03f, -2.122487181e-03f, -2.122077442e-03f, -2.121664057e-03f, -2.121247028e-03f, -2.120826356e-03f, -2.120402041e-03f,
+-2.119974085e-03f, -2.119542487e-03f, -2.119107251e-03f, -2.118668375e-03f, -2.118225862e-03f, -2.117779711e-03f, -2.117329925e-03f, -2.116876504e-03f, -2.116419449e-03f, -2.115958761e-03f,
+-2.115494441e-03f, -2.115026491e-03f, -2.114554910e-03f, -2.114079700e-03f, -2.113600863e-03f, -2.113118398e-03f, -2.112632308e-03f, -2.112142593e-03f, -2.111649254e-03f, -2.111152292e-03f,
+-2.110651709e-03f, -2.110147505e-03f, -2.109639681e-03f, -2.109128239e-03f, -2.108613180e-03f, -2.108094504e-03f, -2.107572213e-03f, -2.107046308e-03f, -2.106516790e-03f, -2.105983660e-03f,
+-2.105446919e-03f, -2.104906569e-03f, -2.104362610e-03f, -2.103815043e-03f, -2.103263871e-03f, -2.102709093e-03f, -2.102150711e-03f, -2.101588727e-03f, -2.101023141e-03f, -2.100453954e-03f,
+-2.099881168e-03f, -2.099304784e-03f, -2.098724803e-03f, -2.098141227e-03f, -2.097554056e-03f, -2.096963291e-03f, -2.096368935e-03f, -2.095770987e-03f, -2.095169450e-03f, -2.094564325e-03f,
+-2.093955613e-03f, -2.093343314e-03f, -2.092727431e-03f, -2.092107965e-03f, -2.091484916e-03f, -2.090858286e-03f, -2.090228077e-03f, -2.089594290e-03f, -2.088956926e-03f, -2.088315986e-03f,
+-2.087671471e-03f, -2.087023383e-03f, -2.086371724e-03f, -2.085716494e-03f, -2.085057695e-03f, -2.084395328e-03f, -2.083729395e-03f, -2.083059896e-03f, -2.082386834e-03f, -2.081710209e-03f,
+-2.081030023e-03f, -2.080346278e-03f, -2.079658974e-03f, -2.078968113e-03f, -2.078273697e-03f, -2.077575726e-03f, -2.076874203e-03f, -2.076169128e-03f, -2.075460503e-03f, -2.074748330e-03f,
+-2.074032610e-03f, -2.073313344e-03f, -2.072590534e-03f, -2.071864181e-03f, -2.071134286e-03f, -2.070400852e-03f, -2.069663879e-03f, -2.068923369e-03f, -2.068179324e-03f, -2.067431745e-03f,
+-2.066680633e-03f, -2.065925990e-03f, -2.065167817e-03f, -2.064406117e-03f, -2.063640890e-03f, -2.062872137e-03f, -2.062099862e-03f, -2.061324064e-03f, -2.060544746e-03f, -2.059761909e-03f,
+-2.058975554e-03f, -2.058185684e-03f, -2.057392299e-03f, -2.056595402e-03f, -2.055794993e-03f, -2.054991075e-03f, -2.054183649e-03f, -2.053372716e-03f, -2.052558279e-03f, -2.051740339e-03f,
+-2.050918896e-03f, -2.050093954e-03f, -2.049265513e-03f, -2.048433576e-03f, -2.047598143e-03f, -2.046759217e-03f, -2.045916799e-03f, -2.045070891e-03f, -2.044221494e-03f, -2.043368611e-03f,
+-2.042512242e-03f, -2.041652389e-03f, -2.040789054e-03f, -2.039922240e-03f, -2.039051946e-03f, -2.038178176e-03f, -2.037300931e-03f, -2.036420212e-03f, -2.035536021e-03f, -2.034648361e-03f,
+-2.033757232e-03f, -2.032862636e-03f, -2.031964576e-03f, -2.031063053e-03f, -2.030158068e-03f, -2.029249623e-03f, -2.028337721e-03f, -2.027422363e-03f, -2.026503550e-03f, -2.025581285e-03f,
+-2.024655569e-03f, -2.023726404e-03f, -2.022793791e-03f, -2.021857734e-03f, -2.020918233e-03f, -2.019975290e-03f, -2.019028907e-03f, -2.018079086e-03f, -2.017125828e-03f, -2.016169137e-03f,
+-2.015209012e-03f, -2.014245457e-03f, -2.013278473e-03f, -2.012308061e-03f, -2.011334225e-03f, -2.010356965e-03f, -2.009376284e-03f, -2.008392183e-03f, -2.007404664e-03f, -2.006413729e-03f,
+-2.005419381e-03f, -2.004421621e-03f, -2.003420450e-03f, -2.002415871e-03f, -2.001407886e-03f, -2.000396497e-03f, -1.999381705e-03f, -1.998363513e-03f, -1.997341922e-03f, -1.996316935e-03f,
+-1.995288553e-03f, -1.994256778e-03f, -1.993221613e-03f, -1.992183059e-03f, -1.991141118e-03f, -1.990095792e-03f, -1.989047084e-03f, -1.987994995e-03f, -1.986939527e-03f, -1.985880682e-03f,
+-1.984818463e-03f, -1.983752870e-03f, -1.982683907e-03f, -1.981611576e-03f, -1.980535878e-03f, -1.979456815e-03f, -1.978374389e-03f, -1.977288603e-03f, -1.976199459e-03f, -1.975106958e-03f,
+-1.974011103e-03f, -1.972911896e-03f, -1.971809338e-03f, -1.970703433e-03f, -1.969594181e-03f, -1.968481586e-03f, -1.967365649e-03f, -1.966246372e-03f, -1.965123757e-03f, -1.963997807e-03f,
+-1.962868524e-03f, -1.961735910e-03f, -1.960599967e-03f, -1.959460696e-03f, -1.958318101e-03f, -1.957172184e-03f, -1.956022946e-03f, -1.954870390e-03f, -1.953714517e-03f, -1.952555331e-03f,
+-1.951392833e-03f, -1.950227026e-03f, -1.949057911e-03f, -1.947885491e-03f, -1.946709768e-03f, -1.945530744e-03f, -1.944348422e-03f, -1.943162803e-03f, -1.941973891e-03f, -1.940781687e-03f,
+-1.939586193e-03f, -1.938387411e-03f, -1.937185345e-03f, -1.935979996e-03f, -1.934771366e-03f, -1.933559458e-03f, -1.932344274e-03f, -1.931125816e-03f, -1.929904086e-03f, -1.928679088e-03f,
+-1.927450822e-03f, -1.926219292e-03f, -1.924984500e-03f, -1.923746447e-03f, -1.922505137e-03f, -1.921260572e-03f, -1.920012754e-03f, -1.918761684e-03f, -1.917507367e-03f, -1.916249804e-03f,
+-1.914988997e-03f, -1.913724948e-03f, -1.912457661e-03f, -1.911187137e-03f, -1.909913379e-03f, -1.908636389e-03f, -1.907356170e-03f, -1.906072723e-03f, -1.904786052e-03f, -1.903496159e-03f,
+-1.902203046e-03f, -1.900906715e-03f, -1.899607170e-03f, -1.898304411e-03f, -1.896998443e-03f, -1.895689267e-03f, -1.894376885e-03f, -1.893061301e-03f, -1.891742516e-03f, -1.890420533e-03f,
+-1.889095355e-03f, -1.887766984e-03f, -1.886435422e-03f, -1.885100672e-03f, -1.883762736e-03f, -1.882421617e-03f, -1.881077318e-03f, -1.879729840e-03f, -1.878379187e-03f, -1.877025360e-03f,
+-1.875668363e-03f, -1.874308198e-03f, -1.872944867e-03f, -1.871578373e-03f, -1.870208719e-03f, -1.868835906e-03f, -1.867459938e-03f, -1.866080817e-03f, -1.864698546e-03f, -1.863313127e-03f,
+-1.861924563e-03f, -1.860532856e-03f, -1.859138009e-03f, -1.857740025e-03f, -1.856338905e-03f, -1.854934654e-03f, -1.853527272e-03f, -1.852116764e-03f, -1.850703130e-03f, -1.849286375e-03f,
+-1.847866501e-03f, -1.846443510e-03f, -1.845017405e-03f, -1.843588189e-03f, -1.842155864e-03f, -1.840720432e-03f, -1.839281897e-03f, -1.837840262e-03f, -1.836395528e-03f, -1.834947699e-03f,
+-1.833496777e-03f, -1.832042765e-03f, -1.830585665e-03f, -1.829125480e-03f, -1.827662214e-03f, -1.826195868e-03f, -1.824726445e-03f, -1.823253949e-03f, -1.821778381e-03f, -1.820299744e-03f,
+-1.818818042e-03f, -1.817333276e-03f, -1.815845451e-03f, -1.814354567e-03f, -1.812860629e-03f, -1.811363638e-03f, -1.809863598e-03f, -1.808360512e-03f, -1.806854381e-03f, -1.805345210e-03f,
+-1.803833000e-03f, -1.802317755e-03f, -1.800799476e-03f, -1.799278168e-03f, -1.797753833e-03f, -1.796226473e-03f, -1.794696092e-03f, -1.793162692e-03f, -1.791626275e-03f, -1.790086846e-03f,
+-1.788544407e-03f, -1.786998960e-03f, -1.785450508e-03f, -1.783899054e-03f, -1.782344602e-03f, -1.780787153e-03f, -1.779226711e-03f, -1.777663279e-03f, -1.776096859e-03f, -1.774527454e-03f,
+-1.772955068e-03f, -1.771379702e-03f, -1.769801361e-03f, -1.768220046e-03f, -1.766635761e-03f, -1.765048509e-03f, -1.763458293e-03f, -1.761865114e-03f, -1.760268978e-03f, -1.758669885e-03f,
+-1.757067840e-03f, -1.755462845e-03f, -1.753854902e-03f, -1.752244016e-03f, -1.750630189e-03f, -1.749013424e-03f, -1.747393724e-03f, -1.745771091e-03f, -1.744145529e-03f, -1.742517041e-03f,
+-1.740885630e-03f, -1.739251298e-03f, -1.737614049e-03f, -1.735973886e-03f, -1.734330811e-03f, -1.732684828e-03f, -1.731035940e-03f, -1.729384149e-03f, -1.727729459e-03f, -1.726071873e-03f,
+-1.724411393e-03f, -1.722748024e-03f, -1.721081767e-03f, -1.719412625e-03f, -1.717740603e-03f, -1.716065702e-03f, -1.714387927e-03f, -1.712707279e-03f, -1.711023763e-03f, -1.709337381e-03f,
+-1.707648136e-03f, -1.705956031e-03f, -1.704261069e-03f, -1.702563254e-03f, -1.700862589e-03f, -1.699159076e-03f, -1.697452719e-03f, -1.695743521e-03f, -1.694031484e-03f, -1.692316613e-03f,
+-1.690598910e-03f, -1.688878378e-03f, -1.687155020e-03f, -1.685428840e-03f, -1.683699841e-03f, -1.681968026e-03f, -1.680233397e-03f, -1.678495959e-03f, -1.676755714e-03f, -1.675012665e-03f,
+-1.673266816e-03f, -1.671518170e-03f, -1.669766730e-03f, -1.668012499e-03f, -1.666255480e-03f, -1.664495676e-03f, -1.662733092e-03f, -1.660967729e-03f, -1.659199591e-03f, -1.657428682e-03f,
+-1.655655004e-03f, -1.653878561e-03f, -1.652099356e-03f, -1.650317391e-03f, -1.648532672e-03f, -1.646745200e-03f, -1.644954978e-03f, -1.643162011e-03f, -1.641366302e-03f, -1.639567853e-03f,
+-1.637766667e-03f, -1.635962749e-03f, -1.634156101e-03f, -1.632346727e-03f, -1.630534630e-03f, -1.628719813e-03f, -1.626902280e-03f, -1.625082033e-03f, -1.623259077e-03f, -1.621433414e-03f,
+-1.619605047e-03f, -1.617773981e-03f, -1.615940217e-03f, -1.614103761e-03f, -1.612264614e-03f, -1.610422781e-03f, -1.608578264e-03f, -1.606731067e-03f, -1.604881194e-03f, -1.603028647e-03f,
+-1.601173430e-03f, -1.599315546e-03f, -1.597454999e-03f, -1.595591792e-03f, -1.593725928e-03f, -1.591857411e-03f, -1.589986245e-03f, -1.588112431e-03f, -1.586235975e-03f, -1.584356879e-03f,
+-1.582475146e-03f, -1.580590781e-03f, -1.578703786e-03f, -1.576814165e-03f, -1.574921921e-03f, -1.573027058e-03f, -1.571129579e-03f, -1.569229488e-03f, -1.567326787e-03f, -1.565421481e-03f,
+-1.563513573e-03f, -1.561603065e-03f, -1.559689963e-03f, -1.557774269e-03f, -1.555855986e-03f, -1.553935119e-03f, -1.552011669e-03f, -1.550085642e-03f, -1.548157041e-03f, -1.546225868e-03f,
+-1.544292128e-03f, -1.542355823e-03f, -1.540416958e-03f, -1.538475536e-03f, -1.536531560e-03f, -1.534585034e-03f, -1.532635961e-03f, -1.530684345e-03f, -1.528730189e-03f, -1.526773498e-03f,
+-1.524814273e-03f, -1.522852520e-03f, -1.520888241e-03f, -1.518921440e-03f, -1.516952121e-03f, -1.514980287e-03f, -1.513005941e-03f, -1.511029087e-03f, -1.509049729e-03f, -1.507067871e-03f,
+-1.505083515e-03f, -1.503096665e-03f, -1.501107326e-03f, -1.499115500e-03f, -1.497121191e-03f, -1.495124403e-03f, -1.493125139e-03f, -1.491123403e-03f, -1.489119199e-03f, -1.487112529e-03f,
+-1.485103398e-03f, -1.483091810e-03f, -1.481077767e-03f, -1.479061274e-03f, -1.477042334e-03f, -1.475020951e-03f, -1.472997128e-03f, -1.470970869e-03f, -1.468942177e-03f, -1.466911057e-03f,
+-1.464877512e-03f, -1.462841545e-03f, -1.460803161e-03f, -1.458762362e-03f, -1.456719153e-03f, -1.454673537e-03f, -1.452625518e-03f, -1.450575099e-03f, -1.448522285e-03f, -1.446467078e-03f,
+-1.444409483e-03f, -1.442349503e-03f, -1.440287142e-03f, -1.438222404e-03f, -1.436155292e-03f, -1.434085810e-03f, -1.432013962e-03f, -1.429939751e-03f, -1.427863181e-03f, -1.425784256e-03f,
+-1.423702980e-03f, -1.421619356e-03f, -1.419533388e-03f, -1.417445080e-03f, -1.415354435e-03f, -1.413261458e-03f, -1.411166152e-03f, -1.409068520e-03f, -1.406968567e-03f, -1.404866296e-03f,
+-1.402761711e-03f, -1.400654815e-03f, -1.398545614e-03f, -1.396434109e-03f, -1.394320306e-03f, -1.392204207e-03f, -1.390085817e-03f, -1.387965140e-03f, -1.385842179e-03f, -1.383716938e-03f,
+-1.381589420e-03f, -1.379459630e-03f, -1.377327572e-03f, -1.375193249e-03f, -1.373056664e-03f, -1.370917823e-03f, -1.368776728e-03f, -1.366633384e-03f, -1.364487794e-03f, -1.362339962e-03f,
+-1.360189892e-03f, -1.358037588e-03f, -1.355883054e-03f, -1.353726293e-03f, -1.351567310e-03f, -1.349406107e-03f, -1.347242690e-03f, -1.345077062e-03f, -1.342909226e-03f, -1.340739187e-03f,
+-1.338566949e-03f, -1.336392515e-03f, -1.334215889e-03f, -1.332037075e-03f, -1.329856078e-03f, -1.327672900e-03f, -1.325487546e-03f, -1.323300020e-03f, -1.321110325e-03f, -1.318918466e-03f,
+-1.316724446e-03f, -1.314528270e-03f, -1.312329941e-03f, -1.310129463e-03f, -1.307926840e-03f, -1.305722076e-03f, -1.303515175e-03f, -1.301306141e-03f, -1.299094977e-03f, -1.296881689e-03f,
+-1.294666279e-03f, -1.292448751e-03f, -1.290229110e-03f, -1.288007360e-03f, -1.285783504e-03f, -1.283557546e-03f, -1.281329491e-03f, -1.279099343e-03f, -1.276867104e-03f, -1.274632780e-03f,
+-1.272396374e-03f, -1.270157890e-03f, -1.267917333e-03f, -1.265674706e-03f, -1.263430012e-03f, -1.261183258e-03f, -1.258934445e-03f, -1.256683578e-03f, -1.254430662e-03f, -1.252175700e-03f,
+-1.249918696e-03f, -1.247659654e-03f, -1.245398578e-03f, -1.243135473e-03f, -1.240870342e-03f, -1.238603189e-03f, -1.236334019e-03f, -1.234062835e-03f, -1.231789641e-03f, -1.229514441e-03f,
+-1.227237240e-03f, -1.224958042e-03f, -1.222676850e-03f, -1.220393669e-03f, -1.218108502e-03f, -1.215821355e-03f, -1.213532229e-03f, -1.211241131e-03f, -1.208948064e-03f, -1.206653031e-03f,
+-1.204356038e-03f, -1.202057088e-03f, -1.199756185e-03f, -1.197453333e-03f, -1.195148537e-03f, -1.192841800e-03f, -1.190533126e-03f, -1.188222521e-03f, -1.185909987e-03f, -1.183595529e-03f,
+-1.181279151e-03f, -1.178960856e-03f, -1.176640651e-03f, -1.174318537e-03f, -1.171994520e-03f, -1.169668603e-03f, -1.167340791e-03f, -1.165011088e-03f, -1.162679497e-03f, -1.160346024e-03f,
+-1.158010672e-03f, -1.155673445e-03f, -1.153334347e-03f, -1.150993384e-03f, -1.148650558e-03f, -1.146305873e-03f, -1.143959335e-03f, -1.141610947e-03f, -1.139260714e-03f, -1.136908639e-03f,
+-1.134554726e-03f, -1.132198981e-03f, -1.129841406e-03f, -1.127482007e-03f, -1.125120787e-03f, -1.122757751e-03f, -1.120392902e-03f, -1.118026245e-03f, -1.115657785e-03f, -1.113287525e-03f,
+-1.110915469e-03f, -1.108541622e-03f, -1.106165988e-03f, -1.103788571e-03f, -1.101409375e-03f, -1.099028405e-03f, -1.096645664e-03f, -1.094261158e-03f, -1.091874889e-03f, -1.089486863e-03f,
+-1.087097084e-03f, -1.084705556e-03f, -1.082312282e-03f, -1.079917268e-03f, -1.077520517e-03f, -1.075122034e-03f, -1.072721823e-03f, -1.070319889e-03f, -1.067916235e-03f, -1.065510865e-03f,
+-1.063103785e-03f, -1.060694997e-03f, -1.058284508e-03f, -1.055872320e-03f, -1.053458438e-03f, -1.051042866e-03f, -1.048625609e-03f, -1.046206671e-03f, -1.043786055e-03f, -1.041363768e-03f,
+-1.038939811e-03f, -1.036514191e-03f, -1.034086911e-03f, -1.031657975e-03f, -1.029227389e-03f, -1.026795155e-03f, -1.024361278e-03f, -1.021925764e-03f, -1.019488615e-03f, -1.017049836e-03f,
+-1.014609432e-03f, -1.012167407e-03f, -1.009723765e-03f, -1.007278511e-03f, -1.004831648e-03f, -1.002383182e-03f, -9.999331158e-04f, -9.974814544e-04f, -9.950282022e-04f, -9.925733634e-04f,
+-9.901169423e-04f, -9.876589433e-04f, -9.851993707e-04f, -9.827382288e-04f, -9.802755220e-04f, -9.778112547e-04f, -9.753454311e-04f, -9.728780556e-04f, -9.704091325e-04f, -9.679386663e-04f,
+-9.654666613e-04f, -9.629931217e-04f, -9.605180521e-04f, -9.580414567e-04f, -9.555633399e-04f, -9.530837060e-04f, -9.506025596e-04f, -9.481199048e-04f, -9.456357461e-04f, -9.431500878e-04f,
+-9.406629344e-04f, -9.381742902e-04f, -9.356841596e-04f, -9.331925470e-04f, -9.306994568e-04f, -9.282048933e-04f, -9.257088610e-04f, -9.232113642e-04f, -9.207124073e-04f, -9.182119948e-04f,
+-9.157101311e-04f, -9.132068205e-04f, -9.107020674e-04f, -9.081958763e-04f, -9.056882515e-04f, -9.031791975e-04f, -9.006687188e-04f, -8.981568196e-04f, -8.956435044e-04f, -8.931287778e-04f,
+-8.906126439e-04f, -8.880951074e-04f, -8.855761726e-04f, -8.830558440e-04f, -8.805341259e-04f, -8.780110229e-04f, -8.754865393e-04f, -8.729606796e-04f, -8.704334482e-04f, -8.679048497e-04f,
+-8.653748883e-04f, -8.628435686e-04f, -8.603108951e-04f, -8.577768721e-04f, -8.552415041e-04f, -8.527047956e-04f, -8.501667510e-04f, -8.476273749e-04f, -8.450866716e-04f, -8.425446456e-04f,
+-8.400013014e-04f, -8.374566434e-04f, -8.349106762e-04f, -8.323634042e-04f, -8.298148318e-04f, -8.272649636e-04f, -8.247138040e-04f, -8.221613574e-04f, -8.196076285e-04f, -8.170526217e-04f,
+-8.144963414e-04f, -8.119387921e-04f, -8.093799784e-04f, -8.068199046e-04f, -8.042585754e-04f, -8.016959952e-04f, -7.991321685e-04f, -7.965670998e-04f, -7.940007937e-04f, -7.914332545e-04f,
+-7.888644868e-04f, -7.862944952e-04f, -7.837232840e-04f, -7.811508580e-04f, -7.785772214e-04f, -7.760023790e-04f, -7.734263351e-04f, -7.708490943e-04f, -7.682706611e-04f, -7.656910401e-04f,
+-7.631102357e-04f, -7.605282526e-04f, -7.579450951e-04f, -7.553607679e-04f, -7.527752754e-04f, -7.501886223e-04f, -7.476008130e-04f, -7.450118520e-04f, -7.424217440e-04f, -7.398304935e-04f,
+-7.372381049e-04f, -7.346445829e-04f, -7.320499319e-04f, -7.294541566e-04f, -7.268572614e-04f, -7.242592510e-04f, -7.216601298e-04f, -7.190599024e-04f, -7.164585735e-04f, -7.138561475e-04f,
+-7.112526289e-04f, -7.086480225e-04f, -7.060423326e-04f, -7.034355639e-04f, -7.008277210e-04f, -6.982188083e-04f, -6.956088306e-04f, -6.929977922e-04f, -6.903856979e-04f, -6.877725522e-04f,
+-6.851583596e-04f, -6.825431248e-04f, -6.799268523e-04f, -6.773095467e-04f, -6.746912125e-04f, -6.720718544e-04f, -6.694514770e-04f, -6.668300847e-04f, -6.642076823e-04f, -6.615842742e-04f,
+-6.589598652e-04f, -6.563344597e-04f, -6.537080623e-04f, -6.510806778e-04f, -6.484523106e-04f, -6.458229653e-04f, -6.431926466e-04f, -6.405613590e-04f, -6.379291072e-04f, -6.352958957e-04f,
+-6.326617292e-04f, -6.300266122e-04f, -6.273905494e-04f, -6.247535453e-04f, -6.221156047e-04f, -6.194767320e-04f, -6.168369320e-04f, -6.141962091e-04f, -6.115545681e-04f, -6.089120135e-04f,
+-6.062685500e-04f, -6.036241822e-04f, -6.009789146e-04f, -5.983327520e-04f, -5.956856990e-04f, -5.930377601e-04f, -5.903889400e-04f, -5.877392433e-04f, -5.850886747e-04f, -5.824372387e-04f,
+-5.797849400e-04f, -5.771317833e-04f, -5.744777732e-04f, -5.718229142e-04f, -5.691672111e-04f, -5.665106685e-04f, -5.638532909e-04f, -5.611950832e-04f, -5.585360498e-04f, -5.558761954e-04f,
+-5.532155247e-04f, -5.505540423e-04f, -5.478917529e-04f, -5.452286611e-04f, -5.425647716e-04f, -5.399000889e-04f, -5.372346178e-04f, -5.345683629e-04f, -5.319013288e-04f, -5.292335202e-04f,
+-5.265649418e-04f, -5.238955982e-04f, -5.212254941e-04f, -5.185546340e-04f, -5.158830228e-04f, -5.132106650e-04f, -5.105375653e-04f, -5.078637283e-04f, -5.051891588e-04f, -5.025138613e-04f,
+-4.998378406e-04f, -4.971611013e-04f, -4.944836481e-04f, -4.918054856e-04f, -4.891266185e-04f, -4.864470515e-04f, -4.837667892e-04f, -4.810858364e-04f, -4.784041976e-04f, -4.757218777e-04f,
+-4.730388811e-04f, -4.703552126e-04f, -4.676708770e-04f, -4.649858788e-04f, -4.623002227e-04f, -4.596139134e-04f, -4.569269557e-04f, -4.542393541e-04f, -4.515511133e-04f, -4.488622381e-04f,
+-4.461727331e-04f, -4.434826030e-04f, -4.407918525e-04f, -4.381004863e-04f, -4.354085090e-04f, -4.327159253e-04f, -4.300227400e-04f, -4.273289577e-04f, -4.246345831e-04f, -4.219396209e-04f,
+-4.192440757e-04f, -4.165479523e-04f, -4.138512554e-04f, -4.111539897e-04f, -4.084561598e-04f, -4.057577704e-04f, -4.030588263e-04f, -4.003593321e-04f, -3.976592925e-04f, -3.949587123e-04f,
+-3.922575960e-04f, -3.895559485e-04f, -3.868537744e-04f, -3.841510784e-04f, -3.814478653e-04f, -3.787441396e-04f, -3.760399062e-04f, -3.733351697e-04f, -3.706299348e-04f, -3.679242063e-04f,
+-3.652179887e-04f, -3.625112869e-04f, -3.598041056e-04f, -3.570964494e-04f, -3.543883230e-04f, -3.516797312e-04f, -3.489706786e-04f, -3.462611700e-04f, -3.435512101e-04f, -3.408408036e-04f,
+-3.381299552e-04f, -3.354186696e-04f, -3.327069515e-04f, -3.299948056e-04f, -3.272822366e-04f, -3.245692493e-04f, -3.218558484e-04f, -3.191420385e-04f, -3.164278244e-04f, -3.137132108e-04f,
+-3.109982025e-04f, -3.082828040e-04f, -3.055670202e-04f, -3.028508558e-04f, -3.001343154e-04f, -2.974174038e-04f, -2.947001257e-04f, -2.919824858e-04f, -2.892644889e-04f, -2.865461396e-04f,
+-2.838274427e-04f, -2.811084029e-04f, -2.783890249e-04f, -2.756693134e-04f, -2.729492732e-04f, -2.702289089e-04f, -2.675082253e-04f, -2.647872271e-04f, -2.620659191e-04f, -2.593443059e-04f,
+-2.566223922e-04f, -2.539001829e-04f, -2.511776825e-04f, -2.484548959e-04f, -2.457318277e-04f, -2.430084827e-04f, -2.402848656e-04f, -2.375609812e-04f, -2.348368340e-04f, -2.321124290e-04f,
+-2.293877707e-04f, -2.266628639e-04f, -2.239377134e-04f, -2.212123238e-04f, -2.184866999e-04f, -2.157608464e-04f, -2.130347680e-04f, -2.103084695e-04f, -2.075819555e-04f, -2.048552309e-04f,
+-2.021283003e-04f, -1.994011684e-04f, -1.966738400e-04f, -1.939463199e-04f, -1.912186126e-04f, -1.884907230e-04f, -1.857626557e-04f, -1.830344156e-04f, -1.803060073e-04f, -1.775774355e-04f,
+-1.748487050e-04f, -1.721198205e-04f, -1.693907868e-04f, -1.666616085e-04f, -1.639322903e-04f, -1.612028371e-04f, -1.584732535e-04f, -1.557435442e-04f, -1.530137140e-04f, -1.502837676e-04f,
+-1.475537098e-04f, -1.448235452e-04f, -1.420932785e-04f, -1.393629146e-04f, -1.366324581e-04f, -1.339019137e-04f, -1.311712862e-04f, -1.284405803e-04f, -1.257098007e-04f, -1.229789522e-04f,
+-1.202480395e-04f, -1.175170672e-04f, -1.147860402e-04f, -1.120549630e-04f, -1.093238406e-04f, -1.065926775e-04f, -1.038614786e-04f, -1.011302485e-04f, -9.839899193e-05f, -9.566771365e-05f,
+-9.293641836e-05f, -9.020511080e-05f, -8.747379568e-05f, -8.474247773e-05f, -8.201116166e-05f, -7.927985219e-05f, -7.654855406e-05f, -7.381727197e-05f, -7.108601064e-05f, -6.835477481e-05f,
+-6.562356918e-05f, -6.289239847e-05f, -6.016126741e-05f, -5.743018071e-05f, -5.469914309e-05f, -5.196815928e-05f, -4.923723397e-05f, -4.650637190e-05f, -4.377557778e-05f, -4.104485633e-05f,
+-3.831421226e-05f, -3.558365029e-05f, -3.285317513e-05f, -3.012279150e-05f, -2.739250411e-05f, -2.466231767e-05f, -2.193223691e-05f, -1.920226653e-05f, -1.647241125e-05f, -1.374267577e-05f,
+-1.101306481e-05f, -8.283583085e-06f, -5.554235300e-06f, -2.825026167e-06f, -9.596039480e-08f, 2.632957306e-06f, 5.361722228e-06f, 8.090329661e-06f, 1.081877490e-05f, 1.354705323e-05f,
+1.627515996e-05f, 1.900309037e-05f, 2.173083976e-05f, 2.445840342e-05f, 2.718577665e-05f, 2.991295475e-05f, 3.263993301e-05f, 3.536670673e-05f, 3.809327121e-05f, 4.081962174e-05f,
+4.354575363e-05f, 4.627166218e-05f, 4.899734268e-05f, 5.172279044e-05f, 5.444800076e-05f, 5.717296893e-05f, 5.989769028e-05f, 6.262216009e-05f, 6.534637368e-05f, 6.807032634e-05f,
+7.079401339e-05f, 7.351743013e-05f, 7.624057187e-05f, 7.896343391e-05f, 8.168601157e-05f, 8.440830015e-05f, 8.713029497e-05f, 8.985199133e-05f, 9.257338456e-05f, 9.529446995e-05f,
+9.801524283e-05f, 1.007356985e-04f, 1.034558323e-04f, 1.061756395e-04f, 1.088951155e-04f, 1.116142555e-04f, 1.143330549e-04f, 1.170515090e-04f, 1.197696132e-04f, 1.224873626e-04f,
+1.252047528e-04f, 1.279217789e-04f, 1.306384363e-04f, 1.333547204e-04f, 1.360706264e-04f, 1.387861497e-04f, 1.415012856e-04f, 1.442160295e-04f, 1.469303766e-04f, 1.496443224e-04f,
+1.523578620e-04f, 1.550709910e-04f, 1.577837045e-04f, 1.604959979e-04f, 1.632078667e-04f, 1.659193060e-04f, 1.686303112e-04f, 1.713408778e-04f, 1.740510009e-04f, 1.767606760e-04f,
+1.794698984e-04f, 1.821786634e-04f, 1.848869664e-04f, 1.875948027e-04f, 1.903021677e-04f, 1.930090567e-04f, 1.957154650e-04f, 1.984213881e-04f, 2.011268212e-04f, 2.038317597e-04f,
+2.065361990e-04f, 2.092401344e-04f, 2.119435613e-04f, 2.146464749e-04f, 2.173488708e-04f, 2.200507442e-04f, 2.227520905e-04f, 2.254529050e-04f, 2.281531832e-04f, 2.308529203e-04f,
+2.335521117e-04f, 2.362507529e-04f, 2.389488391e-04f, 2.416463658e-04f, 2.443433282e-04f, 2.470397219e-04f, 2.497355420e-04f, 2.524307841e-04f, 2.551254435e-04f, 2.578195155e-04f,
+2.605129955e-04f, 2.632058790e-04f, 2.658981613e-04f, 2.685898377e-04f, 2.712809037e-04f, 2.739713546e-04f, 2.766611858e-04f, 2.793503927e-04f, 2.820389707e-04f, 2.847269151e-04f,
+2.874142215e-04f, 2.901008850e-04f, 2.927869012e-04f, 2.954722655e-04f, 2.981569731e-04f, 3.008410196e-04f, 3.035244003e-04f, 3.062071106e-04f, 3.088891460e-04f, 3.115705017e-04f,
+3.142511733e-04f, 3.169311561e-04f, 3.196104455e-04f, 3.222890370e-04f, 3.249669258e-04f, 3.276441076e-04f, 3.303205776e-04f, 3.329963313e-04f, 3.356713640e-04f, 3.383456713e-04f,
+3.410192485e-04f, 3.436920911e-04f, 3.463641944e-04f, 3.490355538e-04f, 3.517061649e-04f, 3.543760230e-04f, 3.570451236e-04f, 3.597134620e-04f, 3.623810338e-04f, 3.650478343e-04f,
+3.677138590e-04f, 3.703791033e-04f, 3.730435626e-04f, 3.757072325e-04f, 3.783701082e-04f, 3.810321853e-04f, 3.836934592e-04f, 3.863539254e-04f, 3.890135792e-04f, 3.916724162e-04f,
+3.943304318e-04f, 3.969876214e-04f, 3.996439805e-04f, 4.022995046e-04f, 4.049541890e-04f, 4.076080293e-04f, 4.102610210e-04f, 4.129131594e-04f, 4.155644400e-04f, 4.182148584e-04f,
+4.208644099e-04f, 4.235130900e-04f, 4.261608943e-04f, 4.288078181e-04f, 4.314538570e-04f, 4.340990064e-04f, 4.367432618e-04f, 4.393866187e-04f, 4.420290726e-04f, 4.446706189e-04f,
+4.473112531e-04f, 4.499509707e-04f, 4.525897672e-04f, 4.552276381e-04f, 4.578645789e-04f, 4.605005850e-04f, 4.631356520e-04f, 4.657697754e-04f, 4.684029506e-04f, 4.710351732e-04f,
+4.736664387e-04f, 4.762967425e-04f, 4.789260801e-04f, 4.815544472e-04f, 4.841818391e-04f, 4.868082515e-04f, 4.894336797e-04f, 4.920581194e-04f, 4.946815660e-04f, 4.973040151e-04f,
+4.999254622e-04f, 5.025459028e-04f, 5.051653324e-04f, 5.077837466e-04f, 5.104011409e-04f, 5.130175108e-04f, 5.156328519e-04f, 5.182471596e-04f, 5.208604296e-04f, 5.234726573e-04f,
+5.260838384e-04f, 5.286939683e-04f, 5.313030426e-04f, 5.339110569e-04f, 5.365180067e-04f, 5.391238875e-04f, 5.417286949e-04f, 5.443324245e-04f, 5.469350718e-04f, 5.495366323e-04f,
+5.521371017e-04f, 5.547364755e-04f, 5.573347493e-04f, 5.599319187e-04f, 5.625279791e-04f, 5.651229262e-04f, 5.677167556e-04f, 5.703094628e-04f, 5.729010434e-04f, 5.754914931e-04f,
+5.780808073e-04f, 5.806689817e-04f, 5.832560118e-04f, 5.858418933e-04f, 5.884266217e-04f, 5.910101927e-04f, 5.935926017e-04f, 5.961738446e-04f, 5.987539167e-04f, 6.013328138e-04f,
+6.039105315e-04f, 6.064870653e-04f, 6.090624108e-04f, 6.116365637e-04f, 6.142095197e-04f, 6.167812742e-04f, 6.193518230e-04f, 6.219211616e-04f, 6.244892857e-04f, 6.270561909e-04f,
+6.296218728e-04f, 6.321863271e-04f, 6.347495494e-04f, 6.373115354e-04f, 6.398722806e-04f, 6.424317807e-04f, 6.449900314e-04f, 6.475470283e-04f, 6.501027671e-04f, 6.526572433e-04f,
+6.552104528e-04f, 6.577623910e-04f, 6.603130537e-04f, 6.628624366e-04f, 6.654105352e-04f, 6.679573453e-04f, 6.705028625e-04f, 6.730470826e-04f, 6.755900011e-04f, 6.781316138e-04f,
+6.806719162e-04f, 6.832109042e-04f, 6.857485734e-04f, 6.882849195e-04f, 6.908199381e-04f, 6.933536250e-04f, 6.958859758e-04f, 6.984169863e-04f, 7.009466521e-04f, 7.034749690e-04f,
+7.060019326e-04f, 7.085275387e-04f, 7.110517829e-04f, 7.135746610e-04f, 7.160961686e-04f, 7.186163016e-04f, 7.211350556e-04f, 7.236524263e-04f, 7.261684095e-04f, 7.286830009e-04f,
+7.311961962e-04f, 7.337079912e-04f, 7.362183815e-04f, 7.387273630e-04f, 7.412349313e-04f, 7.437410823e-04f, 7.462458116e-04f, 7.487491150e-04f, 7.512509882e-04f, 7.537514271e-04f,
+7.562504273e-04f, 7.587479846e-04f, 7.612440948e-04f, 7.637387537e-04f, 7.662319569e-04f, 7.687237004e-04f, 7.712139798e-04f, 7.737027909e-04f, 7.761901296e-04f, 7.786759915e-04f,
+7.811603725e-04f, 7.836432684e-04f, 7.861246749e-04f, 7.886045878e-04f, 7.910830030e-04f, 7.935599162e-04f, 7.960353232e-04f, 7.985092199e-04f, 8.009816020e-04f, 8.034524654e-04f,
+8.059218059e-04f, 8.083896192e-04f, 8.108559012e-04f, 8.133206477e-04f, 8.157838545e-04f, 8.182455176e-04f, 8.207056326e-04f, 8.231641954e-04f, 8.256212019e-04f, 8.280766479e-04f,
+8.305305293e-04f, 8.329828418e-04f, 8.354335813e-04f, 8.378827438e-04f, 8.403303249e-04f, 8.427763207e-04f, 8.452207269e-04f, 8.476635394e-04f, 8.501047540e-04f, 8.525443667e-04f,
+8.549823733e-04f, 8.574187697e-04f, 8.598535518e-04f, 8.622867154e-04f, 8.647182564e-04f, 8.671481707e-04f, 8.695764542e-04f, 8.720031028e-04f, 8.744281124e-04f, 8.768514788e-04f,
+8.792731981e-04f, 8.816932660e-04f, 8.841116785e-04f, 8.865284315e-04f, 8.889435209e-04f, 8.913569426e-04f, 8.937686926e-04f, 8.961787668e-04f, 8.985871610e-04f, 9.009938713e-04f,
+9.033988935e-04f, 9.058022236e-04f, 9.082038576e-04f, 9.106037913e-04f, 9.130020207e-04f, 9.153985418e-04f, 9.177933505e-04f, 9.201864427e-04f, 9.225778145e-04f, 9.249674618e-04f,
+9.273553805e-04f, 9.297415666e-04f, 9.321260161e-04f, 9.345087249e-04f, 9.368896891e-04f, 9.392689046e-04f, 9.416463674e-04f, 9.440220735e-04f, 9.463960188e-04f, 9.487681994e-04f,
+9.511386113e-04f, 9.535072504e-04f, 9.558741127e-04f, 9.582391944e-04f, 9.606024913e-04f, 9.629639995e-04f, 9.653237150e-04f, 9.676816338e-04f, 9.700377519e-04f, 9.723920654e-04f,
+9.747445703e-04f, 9.770952627e-04f, 9.794441385e-04f, 9.817911938e-04f, 9.841364246e-04f, 9.864798271e-04f, 9.888213972e-04f, 9.911611309e-04f, 9.934990244e-04f, 9.958350738e-04f,
+9.981692750e-04f, 1.000501624e-03f, 1.002832117e-03f, 1.005160750e-03f, 1.007487520e-03f, 1.009812421e-03f, 1.012135451e-03f, 1.014456606e-03f, 1.016775880e-03f, 1.019093272e-03f,
+1.021408776e-03f, 1.023722389e-03f, 1.026034106e-03f, 1.028343925e-03f, 1.030651841e-03f, 1.032957850e-03f, 1.035261948e-03f, 1.037564132e-03f, 1.039864398e-03f, 1.042162741e-03f,
+1.044459158e-03f, 1.046753645e-03f, 1.049046198e-03f, 1.051336813e-03f, 1.053625487e-03f, 1.055912215e-03f, 1.058196994e-03f, 1.060479820e-03f, 1.062760689e-03f, 1.065039597e-03f,
+1.067316541e-03f, 1.069591516e-03f, 1.071864519e-03f, 1.074135545e-03f, 1.076404592e-03f, 1.078671655e-03f, 1.080936730e-03f, 1.083199814e-03f, 1.085460903e-03f, 1.087719993e-03f,
+1.089977080e-03f, 1.092232160e-03f, 1.094485231e-03f, 1.096736287e-03f, 1.098985325e-03f, 1.101232341e-03f, 1.103477332e-03f, 1.105720294e-03f, 1.107961223e-03f, 1.110200115e-03f,
+1.112436966e-03f, 1.114671774e-03f, 1.116904533e-03f, 1.119135240e-03f, 1.121363892e-03f, 1.123590485e-03f, 1.125815014e-03f, 1.128037477e-03f, 1.130257870e-03f, 1.132476188e-03f,
+1.134692428e-03f, 1.136906587e-03f, 1.139118660e-03f, 1.141328645e-03f, 1.143536536e-03f, 1.145742331e-03f, 1.147946026e-03f, 1.150147618e-03f, 1.152347101e-03f, 1.154544474e-03f,
+1.156739731e-03f, 1.158932870e-03f, 1.161123886e-03f, 1.163312777e-03f, 1.165499538e-03f, 1.167684166e-03f, 1.169866657e-03f, 1.172047007e-03f, 1.174225213e-03f, 1.176401271e-03f,
+1.178575178e-03f, 1.180746929e-03f, 1.182916522e-03f, 1.185083952e-03f, 1.187249216e-03f, 1.189412311e-03f, 1.191573232e-03f, 1.193731976e-03f, 1.195888540e-03f, 1.198042919e-03f,
+1.200195111e-03f, 1.202345112e-03f, 1.204492917e-03f, 1.206638524e-03f, 1.208781929e-03f, 1.210923128e-03f, 1.213062118e-03f, 1.215198895e-03f, 1.217333455e-03f, 1.219465795e-03f,
+1.221595912e-03f, 1.223723802e-03f, 1.225849461e-03f, 1.227972886e-03f, 1.230094072e-03f, 1.232213018e-03f, 1.234329719e-03f, 1.236444171e-03f, 1.238556371e-03f, 1.240666316e-03f,
+1.242774002e-03f, 1.244879425e-03f, 1.246982582e-03f, 1.249083470e-03f, 1.251182085e-03f, 1.253278423e-03f, 1.255372481e-03f, 1.257464255e-03f, 1.259553742e-03f, 1.261640939e-03f,
+1.263725842e-03f, 1.265808447e-03f, 1.267888751e-03f, 1.269966751e-03f, 1.272042443e-03f, 1.274115824e-03f, 1.276186889e-03f, 1.278255637e-03f, 1.280322062e-03f, 1.282386163e-03f,
+1.284447935e-03f, 1.286507375e-03f, 1.288564479e-03f, 1.290619244e-03f, 1.292671667e-03f, 1.294721744e-03f, 1.296769473e-03f, 1.298814848e-03f, 1.300857867e-03f, 1.302898528e-03f,
+1.304936825e-03f, 1.306972756e-03f, 1.309006317e-03f, 1.311037506e-03f, 1.313066318e-03f, 1.315092750e-03f, 1.317116800e-03f, 1.319138462e-03f, 1.321157735e-03f, 1.323174615e-03f,
+1.325189098e-03f, 1.327201182e-03f, 1.329210862e-03f, 1.331218135e-03f, 1.333222999e-03f, 1.335225449e-03f, 1.337225482e-03f, 1.339223096e-03f, 1.341218287e-03f, 1.343211050e-03f,
+1.345201384e-03f, 1.347189285e-03f, 1.349174750e-03f, 1.351157774e-03f, 1.353138356e-03f, 1.355116491e-03f, 1.357092176e-03f, 1.359065409e-03f, 1.361036185e-03f, 1.363004502e-03f,
+1.364970356e-03f, 1.366933744e-03f, 1.368894662e-03f, 1.370853108e-03f, 1.372809079e-03f, 1.374762570e-03f, 1.376713579e-03f, 1.378662103e-03f, 1.380608138e-03f, 1.382551681e-03f,
+1.384492728e-03f, 1.386431277e-03f, 1.388367325e-03f, 1.390300868e-03f, 1.392231903e-03f, 1.394160426e-03f, 1.396086435e-03f, 1.398009926e-03f, 1.399930897e-03f, 1.401849344e-03f,
+1.403765263e-03f, 1.405678652e-03f, 1.407589507e-03f, 1.409497826e-03f, 1.411403605e-03f, 1.413306841e-03f, 1.415207531e-03f, 1.417105671e-03f, 1.419001259e-03f, 1.420894292e-03f,
+1.422784765e-03f, 1.424672677e-03f, 1.426558024e-03f, 1.428440803e-03f, 1.430321010e-03f, 1.432198644e-03f, 1.434073699e-03f, 1.435946175e-03f, 1.437816066e-03f, 1.439683371e-03f,
+1.441548087e-03f, 1.443410209e-03f, 1.445269735e-03f, 1.447126663e-03f, 1.448980988e-03f, 1.450832708e-03f, 1.452681820e-03f, 1.454528320e-03f, 1.456372206e-03f, 1.458213475e-03f,
+1.460052124e-03f, 1.461888149e-03f, 1.463721547e-03f, 1.465552316e-03f, 1.467380453e-03f, 1.469205954e-03f, 1.471028816e-03f, 1.472849037e-03f, 1.474666614e-03f, 1.476481542e-03f,
+1.478293821e-03f, 1.480103445e-03f, 1.481910414e-03f, 1.483714722e-03f, 1.485516368e-03f, 1.487315349e-03f, 1.489111662e-03f, 1.490905302e-03f, 1.492696269e-03f, 1.494484559e-03f,
+1.496270168e-03f, 1.498053094e-03f, 1.499833334e-03f, 1.501610885e-03f, 1.503385744e-03f, 1.505157908e-03f, 1.506927374e-03f, 1.508694139e-03f, 1.510458201e-03f, 1.512219557e-03f,
+1.513978203e-03f, 1.515734137e-03f, 1.517487355e-03f, 1.519237856e-03f, 1.520985636e-03f, 1.522730691e-03f, 1.524473020e-03f, 1.526212620e-03f, 1.527949487e-03f, 1.529683619e-03f,
+1.531415013e-03f, 1.533143666e-03f, 1.534869575e-03f, 1.536592737e-03f, 1.538313150e-03f, 1.540030811e-03f, 1.541745716e-03f, 1.543457864e-03f, 1.545167251e-03f, 1.546873874e-03f,
+1.548577731e-03f, 1.550278819e-03f, 1.551977136e-03f, 1.553672677e-03f, 1.555365441e-03f, 1.557055425e-03f, 1.558742625e-03f, 1.560427040e-03f, 1.562108666e-03f, 1.563787501e-03f,
+1.565463543e-03f, 1.567136787e-03f, 1.568807231e-03f, 1.570474874e-03f, 1.572139711e-03f, 1.573801741e-03f, 1.575460960e-03f, 1.577117366e-03f, 1.578770957e-03f, 1.580421728e-03f,
+1.582069679e-03f, 1.583714805e-03f, 1.585357105e-03f, 1.586996576e-03f, 1.588633214e-03f, 1.590267018e-03f, 1.591897984e-03f, 1.593526111e-03f, 1.595151394e-03f, 1.596773833e-03f,
+1.598393423e-03f, 1.600010163e-03f, 1.601624049e-03f, 1.603235080e-03f, 1.604843252e-03f, 1.606448563e-03f, 1.608051010e-03f, 1.609650591e-03f, 1.611247303e-03f, 1.612841143e-03f,
+1.614432109e-03f, 1.616020198e-03f, 1.617605407e-03f, 1.619187735e-03f, 1.620767178e-03f, 1.622343735e-03f, 1.623917401e-03f, 1.625488175e-03f, 1.627056055e-03f, 1.628621037e-03f,
+1.630183119e-03f, 1.631742298e-03f, 1.633298573e-03f, 1.634851940e-03f, 1.636402397e-03f, 1.637949942e-03f, 1.639494571e-03f, 1.641036283e-03f, 1.642575075e-03f, 1.644110944e-03f,
+1.645643888e-03f, 1.647173905e-03f, 1.648700991e-03f, 1.650225145e-03f, 1.651746364e-03f, 1.653264645e-03f, 1.654779987e-03f, 1.656292386e-03f, 1.657801840e-03f, 1.659308347e-03f,
+1.660811904e-03f, 1.662312509e-03f, 1.663810159e-03f, 1.665304852e-03f, 1.666796586e-03f, 1.668285358e-03f, 1.669771165e-03f, 1.671254006e-03f, 1.672733877e-03f, 1.674210778e-03f,
+1.675684704e-03f, 1.677155654e-03f, 1.678623625e-03f, 1.680088615e-03f, 1.681550622e-03f, 1.683009643e-03f, 1.684465676e-03f, 1.685918718e-03f, 1.687368768e-03f, 1.688815822e-03f,
+1.690259879e-03f, 1.691700936e-03f, 1.693138991e-03f, 1.694574041e-03f, 1.696006084e-03f, 1.697435118e-03f, 1.698861141e-03f, 1.700284150e-03f, 1.701704144e-03f, 1.703121118e-03f,
+1.704535072e-03f, 1.705946004e-03f, 1.707353910e-03f, 1.708758788e-03f, 1.710160637e-03f, 1.711559454e-03f, 1.712955237e-03f, 1.714347983e-03f, 1.715737691e-03f, 1.717124358e-03f,
+1.718507981e-03f, 1.719888559e-03f, 1.721266090e-03f, 1.722640570e-03f, 1.724011999e-03f, 1.725380374e-03f, 1.726745691e-03f, 1.728107951e-03f, 1.729467149e-03f, 1.730823285e-03f,
+1.732176355e-03f, 1.733526358e-03f, 1.734873292e-03f, 1.736217153e-03f, 1.737557941e-03f, 1.738895653e-03f, 1.740230287e-03f, 1.741561841e-03f, 1.742890312e-03f, 1.744215698e-03f,
+1.745537998e-03f, 1.746857210e-03f, 1.748173330e-03f, 1.749486357e-03f, 1.750796290e-03f, 1.752103125e-03f, 1.753406860e-03f, 1.754707495e-03f, 1.756005026e-03f, 1.757299451e-03f,
+1.758590769e-03f, 1.759878977e-03f, 1.761164074e-03f, 1.762446057e-03f, 1.763724924e-03f, 1.765000673e-03f, 1.766273302e-03f, 1.767542810e-03f, 1.768809193e-03f, 1.770072450e-03f,
+1.771332580e-03f, 1.772589580e-03f, 1.773843447e-03f, 1.775094181e-03f, 1.776341778e-03f, 1.777586238e-03f, 1.778827558e-03f, 1.780065736e-03f, 1.781300770e-03f, 1.782532658e-03f,
+1.783761399e-03f, 1.784986989e-03f, 1.786209428e-03f, 1.787428714e-03f, 1.788644843e-03f, 1.789857816e-03f, 1.791067629e-03f, 1.792274280e-03f, 1.793477768e-03f, 1.794678092e-03f,
+1.795875248e-03f, 1.797069235e-03f, 1.798260051e-03f, 1.799447695e-03f, 1.800632164e-03f, 1.801813456e-03f, 1.802991570e-03f, 1.804166504e-03f, 1.805338256e-03f, 1.806506824e-03f,
+1.807672206e-03f, 1.808834400e-03f, 1.809993405e-03f, 1.811149219e-03f, 1.812301839e-03f, 1.813451265e-03f, 1.814597494e-03f, 1.815740524e-03f, 1.816880355e-03f, 1.818016982e-03f,
+1.819150406e-03f, 1.820280625e-03f, 1.821407636e-03f, 1.822531437e-03f, 1.823652028e-03f, 1.824769405e-03f, 1.825883568e-03f, 1.826994515e-03f, 1.828102244e-03f, 1.829206753e-03f,
+1.830308041e-03f, 1.831406105e-03f, 1.832500944e-03f, 1.833592557e-03f, 1.834680941e-03f, 1.835766095e-03f, 1.836848017e-03f, 1.837926706e-03f, 1.839002160e-03f, 1.840074376e-03f,
+1.841143354e-03f, 1.842209092e-03f, 1.843271588e-03f, 1.844330841e-03f, 1.845386848e-03f, 1.846439609e-03f, 1.847489121e-03f, 1.848535383e-03f, 1.849578393e-03f, 1.850618150e-03f,
+1.851654651e-03f, 1.852687897e-03f, 1.853717883e-03f, 1.854744611e-03f, 1.855768076e-03f, 1.856788279e-03f, 1.857805217e-03f, 1.858818889e-03f, 1.859829293e-03f, 1.860836428e-03f,
+1.861840292e-03f, 1.862840883e-03f, 1.863838201e-03f, 1.864832243e-03f, 1.865823007e-03f, 1.866810494e-03f, 1.867794700e-03f, 1.868775624e-03f, 1.869753266e-03f, 1.870727622e-03f,
+1.871698693e-03f, 1.872666475e-03f, 1.873630969e-03f, 1.874592172e-03f, 1.875550082e-03f, 1.876504699e-03f, 1.877456021e-03f, 1.878404047e-03f, 1.879348774e-03f, 1.880290202e-03f,
+1.881228329e-03f, 1.882163153e-03f, 1.883094674e-03f, 1.884022890e-03f, 1.884947799e-03f, 1.885869399e-03f, 1.886787691e-03f, 1.887702671e-03f, 1.888614339e-03f, 1.889522694e-03f,
+1.890427733e-03f, 1.891329456e-03f, 1.892227861e-03f, 1.893122947e-03f, 1.894014712e-03f, 1.894903155e-03f, 1.895788275e-03f, 1.896670071e-03f, 1.897548540e-03f, 1.898423682e-03f,
+1.899295495e-03f, 1.900163979e-03f, 1.901029131e-03f, 1.901890950e-03f, 1.902749436e-03f, 1.903604586e-03f, 1.904456400e-03f, 1.905304876e-03f, 1.906150013e-03f, 1.906991810e-03f,
+1.907830264e-03f, 1.908665376e-03f, 1.909497144e-03f, 1.910325567e-03f, 1.911150642e-03f, 1.911972370e-03f, 1.912790749e-03f, 1.913605777e-03f, 1.914417453e-03f, 1.915225777e-03f,
+1.916030747e-03f, 1.916832361e-03f, 1.917630619e-03f, 1.918425519e-03f, 1.919217061e-03f, 1.920005242e-03f, 1.920790062e-03f, 1.921571520e-03f, 1.922349614e-03f, 1.923124344e-03f,
+1.923895707e-03f, 1.924663704e-03f, 1.925428332e-03f, 1.926189591e-03f, 1.926947480e-03f, 1.927701997e-03f, 1.928453142e-03f, 1.929200912e-03f, 1.929945308e-03f, 1.930686328e-03f,
+1.931423970e-03f, 1.932158235e-03f, 1.932889120e-03f, 1.933616624e-03f, 1.934340748e-03f, 1.935061489e-03f, 1.935778846e-03f, 1.936492818e-03f, 1.937203405e-03f, 1.937910606e-03f,
+1.938614418e-03f, 1.939314842e-03f, 1.940011876e-03f, 1.940705519e-03f, 1.941395770e-03f, 1.942082628e-03f, 1.942766093e-03f, 1.943446162e-03f, 1.944122836e-03f, 1.944796113e-03f,
+1.945465992e-03f, 1.946132473e-03f, 1.946795553e-03f, 1.947455233e-03f, 1.948111512e-03f, 1.948764387e-03f, 1.949413860e-03f, 1.950059927e-03f, 1.950702590e-03f, 1.951341845e-03f,
+1.951977694e-03f, 1.952610135e-03f, 1.953239166e-03f, 1.953864787e-03f, 1.954486998e-03f, 1.955105797e-03f, 1.955721183e-03f, 1.956333155e-03f, 1.956941713e-03f, 1.957546856e-03f,
+1.958148583e-03f, 1.958746893e-03f, 1.959341785e-03f, 1.959933258e-03f, 1.960521312e-03f, 1.961105945e-03f, 1.961687158e-03f, 1.962264948e-03f, 1.962839316e-03f, 1.963410260e-03f,
+1.963977779e-03f, 1.964541873e-03f, 1.965102542e-03f, 1.965659783e-03f, 1.966213597e-03f, 1.966763983e-03f, 1.967310940e-03f, 1.967854467e-03f, 1.968394563e-03f, 1.968931228e-03f,
+1.969464461e-03f, 1.969994261e-03f, 1.970520627e-03f, 1.971043560e-03f, 1.971563057e-03f, 1.972079119e-03f, 1.972591744e-03f, 1.973100932e-03f, 1.973606683e-03f, 1.974108994e-03f,
+1.974607867e-03f, 1.975103300e-03f, 1.975595293e-03f, 1.976083844e-03f, 1.976568953e-03f, 1.977050620e-03f, 1.977528844e-03f, 1.978003625e-03f, 1.978474960e-03f, 1.978942851e-03f,
+1.979407296e-03f, 1.979868295e-03f, 1.980325848e-03f, 1.980779952e-03f, 1.981230609e-03f, 1.981677817e-03f, 1.982121576e-03f, 1.982561885e-03f, 1.982998743e-03f, 1.983432151e-03f,
+1.983862107e-03f, 1.984288611e-03f, 1.984711662e-03f, 1.985131261e-03f, 1.985547405e-03f, 1.985960096e-03f, 1.986369332e-03f, 1.986775112e-03f, 1.987177437e-03f, 1.987576305e-03f,
+1.987971717e-03f, 1.988363671e-03f, 1.988752168e-03f, 1.989137206e-03f, 1.989518785e-03f, 1.989896906e-03f, 1.990271567e-03f, 1.990642767e-03f, 1.991010507e-03f, 1.991374786e-03f,
+1.991735604e-03f, 1.992092960e-03f, 1.992446853e-03f, 1.992797283e-03f, 1.993144251e-03f, 1.993487755e-03f, 1.993827795e-03f, 1.994164370e-03f, 1.994497481e-03f, 1.994827127e-03f,
+1.995153307e-03f, 1.995476021e-03f, 1.995795269e-03f, 1.996111050e-03f, 1.996423364e-03f, 1.996732211e-03f, 1.997037590e-03f, 1.997339501e-03f, 1.997637944e-03f, 1.997932918e-03f,
+1.998224423e-03f, 1.998512459e-03f, 1.998797025e-03f, 1.999078121e-03f, 1.999355747e-03f, 1.999629902e-03f, 1.999900587e-03f, 2.000167800e-03f, 2.000431543e-03f, 2.000691813e-03f,
+2.000948612e-03f, 2.001201938e-03f, 2.001451792e-03f, 2.001698174e-03f, 2.001941082e-03f, 2.002180518e-03f, 2.002416480e-03f, 2.002648969e-03f, 2.002877983e-03f, 2.003103524e-03f,
+2.003325591e-03f, 2.003544183e-03f, 2.003759301e-03f, 2.003970944e-03f, 2.004179112e-03f, 2.004383806e-03f, 2.004585023e-03f, 2.004782766e-03f, 2.004977033e-03f, 2.005167824e-03f,
+2.005355140e-03f, 2.005538979e-03f, 2.005719342e-03f, 2.005896229e-03f, 2.006069640e-03f, 2.006239575e-03f, 2.006406032e-03f, 2.006569014e-03f, 2.006728518e-03f, 2.006884546e-03f,
+2.007037096e-03f, 2.007186170e-03f, 2.007331767e-03f, 2.007473886e-03f, 2.007612528e-03f, 2.007747694e-03f, 2.007879382e-03f, 2.008007592e-03f, 2.008132325e-03f, 2.008253581e-03f,
+2.008371360e-03f, 2.008485661e-03f, 2.008596485e-03f, 2.008703831e-03f, 2.008807700e-03f, 2.008908092e-03f, 2.009005006e-03f, 2.009098443e-03f, 2.009188402e-03f, 2.009274885e-03f,
+2.009357890e-03f, 2.009437418e-03f, 2.009513468e-03f, 2.009586042e-03f, 2.009655139e-03f, 2.009720758e-03f, 2.009782901e-03f, 2.009841567e-03f, 2.009896756e-03f, 2.009948469e-03f,
+2.009996705e-03f, 2.010041465e-03f, 2.010082748e-03f, 2.010120556e-03f, 2.010154887e-03f, 2.010185742e-03f, 2.010213122e-03f, 2.010237026e-03f, 2.010257454e-03f, 2.010274407e-03f,
+2.010287885e-03f, 2.010297888e-03f, 2.010304416e-03f, 2.010307470e-03f, 2.010307049e-03f, 2.010303153e-03f, 2.010295784e-03f, 2.010284940e-03f, 2.010270624e-03f, 2.010252833e-03f,
+2.010231569e-03f, 2.010206833e-03f, 2.010178623e-03f, 2.010146941e-03f, 2.010111787e-03f, 2.010073160e-03f, 2.010031062e-03f, 2.009985493e-03f, 2.009936452e-03f, 2.009883940e-03f,
+2.009827957e-03f, 2.009768504e-03f, 2.009705581e-03f, 2.009639188e-03f, 2.009569325e-03f, 2.009495993e-03f, 2.009419193e-03f, 2.009338923e-03f, 2.009255186e-03f, 2.009167980e-03f,
+2.009077307e-03f, 2.008983167e-03f, 2.008885560e-03f, 2.008784486e-03f, 2.008679947e-03f, 2.008571941e-03f, 2.008460470e-03f, 2.008345534e-03f, 2.008227133e-03f, 2.008105268e-03f,
+2.007979939e-03f, 2.007851147e-03f, 2.007718892e-03f, 2.007583174e-03f, 2.007443994e-03f, 2.007301352e-03f, 2.007155249e-03f, 2.007005685e-03f, 2.006852661e-03f, 2.006696176e-03f,
+2.006536232e-03f, 2.006372829e-03f, 2.006205968e-03f, 2.006035648e-03f, 2.005861871e-03f, 2.005684636e-03f, 2.005503945e-03f, 2.005319798e-03f, 2.005132195e-03f, 2.004941137e-03f,
+2.004746624e-03f, 2.004548657e-03f, 2.004347237e-03f, 2.004142364e-03f, 2.003934038e-03f, 2.003722261e-03f, 2.003507032e-03f, 2.003288352e-03f, 2.003066222e-03f, 2.002840642e-03f,
+2.002611613e-03f, 2.002379136e-03f, 2.002143211e-03f, 2.001903838e-03f, 2.001661019e-03f, 2.001414753e-03f, 2.001165043e-03f, 2.000911887e-03f, 2.000655287e-03f, 2.000395243e-03f,
+2.000131757e-03f, 1.999864828e-03f, 1.999594457e-03f, 1.999320646e-03f, 1.999043394e-03f, 1.998762702e-03f, 1.998478571e-03f, 1.998191002e-03f, 1.997899995e-03f, 1.997605552e-03f,
+1.997307672e-03f, 1.997006356e-03f, 1.996701606e-03f, 1.996393421e-03f, 1.996081803e-03f, 1.995766752e-03f, 1.995448270e-03f, 1.995126356e-03f, 1.994801011e-03f, 1.994472237e-03f,
+1.994140034e-03f, 1.993804402e-03f, 1.993465344e-03f, 1.993122858e-03f, 1.992776947e-03f, 1.992427610e-03f, 1.992074849e-03f, 1.991718665e-03f, 1.991359057e-03f, 1.990996028e-03f,
+1.990629578e-03f, 1.990259708e-03f, 1.989886418e-03f, 1.989509709e-03f, 1.989129583e-03f, 1.988746039e-03f, 1.988359080e-03f, 1.987968705e-03f, 1.987574916e-03f, 1.987177714e-03f,
+1.986777098e-03f, 1.986373071e-03f, 1.985965633e-03f, 1.985554786e-03f, 1.985140529e-03f, 1.984722863e-03f, 1.984301791e-03f, 1.983877312e-03f, 1.983449428e-03f, 1.983018139e-03f,
+1.982583447e-03f, 1.982145352e-03f, 1.981703855e-03f, 1.981258957e-03f, 1.980810660e-03f, 1.980358964e-03f, 1.979903870e-03f, 1.979445379e-03f, 1.978983492e-03f, 1.978518210e-03f,
+1.978049534e-03f, 1.977577466e-03f, 1.977102005e-03f, 1.976623153e-03f, 1.976140912e-03f, 1.975655281e-03f, 1.975166263e-03f, 1.974673857e-03f, 1.974178066e-03f, 1.973678890e-03f,
+1.973176331e-03f, 1.972670388e-03f, 1.972161064e-03f, 1.971648360e-03f, 1.971132276e-03f, 1.970612813e-03f, 1.970089973e-03f, 1.969563757e-03f, 1.969034166e-03f, 1.968501201e-03f,
+1.967964863e-03f, 1.967425153e-03f, 1.966882072e-03f, 1.966335621e-03f, 1.965785803e-03f, 1.965232616e-03f, 1.964676064e-03f, 1.964116147e-03f, 1.963552865e-03f, 1.962986221e-03f,
+1.962416216e-03f, 1.961842850e-03f, 1.961266124e-03f, 1.960686041e-03f, 1.960102601e-03f, 1.959515805e-03f, 1.958925655e-03f, 1.958332151e-03f, 1.957735295e-03f, 1.957135089e-03f,
+1.956531533e-03f, 1.955924628e-03f, 1.955314376e-03f, 1.954700779e-03f, 1.954083836e-03f, 1.953463550e-03f, 1.952839922e-03f, 1.952212953e-03f, 1.951582645e-03f, 1.950948998e-03f,
+1.950312014e-03f, 1.949671694e-03f, 1.949028039e-03f, 1.948381052e-03f, 1.947730732e-03f, 1.947077082e-03f, 1.946420102e-03f, 1.945759795e-03f, 1.945096160e-03f, 1.944429201e-03f,
+1.943758917e-03f, 1.943085311e-03f, 1.942408383e-03f, 1.941728135e-03f, 1.941044569e-03f, 1.940357685e-03f, 1.939667486e-03f, 1.938973972e-03f, 1.938277145e-03f, 1.937577006e-03f,
+1.936873557e-03f, 1.936166799e-03f, 1.935456733e-03f, 1.934743361e-03f, 1.934026684e-03f, 1.933306704e-03f, 1.932583422e-03f, 1.931856840e-03f, 1.931126958e-03f, 1.930393779e-03f,
+1.929657304e-03f, 1.928917534e-03f, 1.928174471e-03f, 1.927428116e-03f, 1.926678471e-03f, 1.925925537e-03f, 1.925169316e-03f, 1.924409809e-03f, 1.923647017e-03f, 1.922880943e-03f,
+1.922111587e-03f, 1.921338951e-03f, 1.920563037e-03f, 1.919783847e-03f, 1.919001381e-03f, 1.918215641e-03f, 1.917426629e-03f, 1.916634346e-03f, 1.915838794e-03f, 1.915039975e-03f,
+1.914237889e-03f, 1.913432539e-03f, 1.912623926e-03f, 1.911812052e-03f, 1.910996918e-03f, 1.910178526e-03f, 1.909356878e-03f, 1.908531974e-03f, 1.907703817e-03f, 1.906872409e-03f,
+1.906037750e-03f, 1.905199843e-03f, 1.904358689e-03f, 1.903514290e-03f, 1.902666647e-03f, 1.901815762e-03f, 1.900961637e-03f, 1.900104273e-03f, 1.899243672e-03f, 1.898379835e-03f,
+1.897512766e-03f, 1.896642464e-03f, 1.895768931e-03f, 1.894892171e-03f, 1.894012183e-03f, 1.893128970e-03f, 1.892242533e-03f, 1.891352875e-03f, 1.890459996e-03f, 1.889563899e-03f,
+1.888664586e-03f, 1.887762057e-03f, 1.886856316e-03f, 1.885947362e-03f, 1.885035200e-03f, 1.884119829e-03f, 1.883201252e-03f, 1.882279470e-03f, 1.881354486e-03f, 1.880426301e-03f,
+1.879494917e-03f, 1.878560335e-03f, 1.877622558e-03f, 1.876681587e-03f, 1.875737424e-03f, 1.874790071e-03f, 1.873839530e-03f, 1.872885802e-03f, 1.871928890e-03f, 1.870968794e-03f,
+1.870005518e-03f, 1.869039062e-03f, 1.868069429e-03f, 1.867096621e-03f, 1.866120639e-03f, 1.865141485e-03f, 1.864159161e-03f, 1.863173669e-03f, 1.862185011e-03f, 1.861193189e-03f,
+1.860198204e-03f, 1.859200059e-03f, 1.858198755e-03f, 1.857194294e-03f, 1.856186679e-03f, 1.855175911e-03f, 1.854161992e-03f, 1.853144923e-03f, 1.852124708e-03f, 1.851101347e-03f,
+1.850074844e-03f, 1.849045199e-03f, 1.848012414e-03f, 1.846976492e-03f, 1.845937435e-03f, 1.844895245e-03f, 1.843849922e-03f, 1.842801471e-03f, 1.841749892e-03f, 1.840695187e-03f,
+1.839637359e-03f, 1.838576409e-03f, 1.837512340e-03f, 1.836445153e-03f, 1.835374851e-03f, 1.834301435e-03f, 1.833224908e-03f, 1.832145271e-03f, 1.831062527e-03f, 1.829976677e-03f,
+1.828887725e-03f, 1.827795670e-03f, 1.826700517e-03f, 1.825602267e-03f, 1.824500922e-03f, 1.823396483e-03f, 1.822288954e-03f, 1.821178336e-03f, 1.820064631e-03f, 1.818947841e-03f,
+1.817827969e-03f, 1.816705016e-03f, 1.815578986e-03f, 1.814449878e-03f, 1.813317697e-03f, 1.812182444e-03f, 1.811044121e-03f, 1.809902730e-03f, 1.808758274e-03f, 1.807610754e-03f,
+1.806460173e-03f, 1.805306533e-03f, 1.804149836e-03f, 1.802990084e-03f, 1.801827279e-03f, 1.800661424e-03f, 1.799492521e-03f, 1.798320572e-03f, 1.797145578e-03f, 1.795967543e-03f,
+1.794786469e-03f, 1.793602357e-03f, 1.792415211e-03f, 1.791225031e-03f, 1.790031821e-03f, 1.788835582e-03f, 1.787636317e-03f, 1.786434029e-03f, 1.785228718e-03f, 1.784020388e-03f,
+1.782809041e-03f, 1.781594680e-03f, 1.780377305e-03f, 1.779156920e-03f, 1.777933527e-03f, 1.776707128e-03f, 1.775477726e-03f, 1.774245322e-03f, 1.773009919e-03f, 1.771771520e-03f,
+1.770530126e-03f, 1.769285740e-03f, 1.768038365e-03f, 1.766788002e-03f, 1.765534654e-03f, 1.764278323e-03f, 1.763019012e-03f, 1.761756723e-03f, 1.760491458e-03f, 1.759223219e-03f,
+1.757952010e-03f, 1.756677832e-03f, 1.755400687e-03f, 1.754120579e-03f, 1.752837509e-03f, 1.751551479e-03f, 1.750262493e-03f, 1.748970553e-03f, 1.747675660e-03f, 1.746377818e-03f,
+1.745077029e-03f, 1.743773295e-03f, 1.742466618e-03f, 1.741157002e-03f, 1.739844448e-03f, 1.738528959e-03f, 1.737210537e-03f, 1.735889185e-03f, 1.734564905e-03f, 1.733237699e-03f,
+1.731907571e-03f, 1.730574523e-03f, 1.729238556e-03f, 1.727899674e-03f, 1.726557879e-03f, 1.725213173e-03f, 1.723865559e-03f, 1.722515040e-03f, 1.721161617e-03f, 1.719805294e-03f,
+1.718446073e-03f, 1.717083956e-03f, 1.715718946e-03f, 1.714351046e-03f, 1.712980258e-03f, 1.711606584e-03f, 1.710230027e-03f, 1.708850589e-03f, 1.707468274e-03f, 1.706083084e-03f,
+1.704695020e-03f, 1.703304087e-03f, 1.701910285e-03f, 1.700513619e-03f, 1.699114090e-03f, 1.697711701e-03f, 1.696306455e-03f, 1.694898354e-03f, 1.693487400e-03f, 1.692073597e-03f,
+1.690656947e-03f, 1.689237453e-03f, 1.687815117e-03f, 1.686389941e-03f, 1.684961929e-03f, 1.683531084e-03f, 1.682097406e-03f, 1.680660900e-03f, 1.679221568e-03f, 1.677779413e-03f,
+1.676334437e-03f, 1.674886643e-03f, 1.673436033e-03f, 1.671982611e-03f, 1.670526378e-03f, 1.669067338e-03f, 1.667605493e-03f, 1.666140846e-03f, 1.664673400e-03f, 1.663203157e-03f,
+1.661730120e-03f, 1.660254291e-03f, 1.658775674e-03f, 1.657294271e-03f, 1.655810085e-03f, 1.654323118e-03f, 1.652833374e-03f, 1.651340854e-03f, 1.649845563e-03f, 1.648347501e-03f,
+1.646846673e-03f, 1.645343081e-03f, 1.643836727e-03f, 1.642327615e-03f, 1.640815747e-03f, 1.639301126e-03f, 1.637783754e-03f, 1.636263636e-03f, 1.634740772e-03f, 1.633215166e-03f,
+1.631686822e-03f, 1.630155741e-03f, 1.628621926e-03f, 1.627085380e-03f, 1.625546107e-03f, 1.624004108e-03f, 1.622459387e-03f, 1.620911947e-03f, 1.619361790e-03f, 1.617808918e-03f,
+1.616253336e-03f, 1.614695046e-03f, 1.613134050e-03f, 1.611570352e-03f, 1.610003954e-03f, 1.608434859e-03f, 1.606863071e-03f, 1.605288591e-03f, 1.603711423e-03f, 1.602131569e-03f,
+1.600549034e-03f, 1.598963818e-03f, 1.597375926e-03f, 1.595785360e-03f, 1.594192123e-03f, 1.592596218e-03f, 1.590997648e-03f, 1.589396416e-03f, 1.587792524e-03f, 1.586185977e-03f,
+1.584576775e-03f, 1.582964923e-03f, 1.581350424e-03f, 1.579733280e-03f, 1.578113494e-03f, 1.576491069e-03f, 1.574866009e-03f, 1.573238315e-03f, 1.571607992e-03f, 1.569975042e-03f,
+1.568339468e-03f, 1.566701273e-03f, 1.565060459e-03f, 1.563417031e-03f, 1.561770991e-03f, 1.560122341e-03f, 1.558471086e-03f, 1.556817227e-03f, 1.555160768e-03f, 1.553501712e-03f,
+1.551840062e-03f, 1.550175821e-03f, 1.548508992e-03f, 1.546839578e-03f, 1.545167582e-03f, 1.543493007e-03f, 1.541815855e-03f, 1.540136132e-03f, 1.538453838e-03f, 1.536768977e-03f,
+1.535081553e-03f, 1.533391568e-03f, 1.531699025e-03f, 1.530003928e-03f, 1.528306279e-03f, 1.526606082e-03f, 1.524903339e-03f, 1.523198054e-03f, 1.521490230e-03f, 1.519779870e-03f,
+1.518066977e-03f, 1.516351554e-03f, 1.514633604e-03f, 1.512913131e-03f, 1.511190137e-03f, 1.509464625e-03f, 1.507736599e-03f, 1.506006062e-03f, 1.504273017e-03f, 1.502537467e-03f,
+1.500799415e-03f, 1.499058865e-03f, 1.497315819e-03f, 1.495570280e-03f, 1.493822253e-03f, 1.492071739e-03f, 1.490318742e-03f, 1.488563266e-03f, 1.486805313e-03f, 1.485044887e-03f,
+1.483281990e-03f, 1.481516626e-03f, 1.479748799e-03f, 1.477978511e-03f, 1.476205765e-03f, 1.474430565e-03f, 1.472652915e-03f, 1.470872816e-03f, 1.469090272e-03f, 1.467305288e-03f,
+1.465517865e-03f, 1.463728007e-03f, 1.461935717e-03f, 1.460140999e-03f, 1.458343855e-03f, 1.456544289e-03f, 1.454742305e-03f, 1.452937905e-03f, 1.451131092e-03f, 1.449321871e-03f,
+1.447510244e-03f, 1.445696214e-03f, 1.443879785e-03f, 1.442060960e-03f, 1.440239742e-03f, 1.438416135e-03f, 1.436590142e-03f, 1.434761766e-03f, 1.432931010e-03f, 1.431097878e-03f,
+1.429262373e-03f, 1.427424498e-03f, 1.425584257e-03f, 1.423741652e-03f, 1.421896688e-03f, 1.420049368e-03f, 1.418199694e-03f, 1.416347671e-03f, 1.414493301e-03f, 1.412636588e-03f,
+1.410777536e-03f, 1.408916146e-03f, 1.407052424e-03f, 1.405186372e-03f, 1.403317994e-03f, 1.401447292e-03f, 1.399574271e-03f, 1.397698933e-03f, 1.395821283e-03f, 1.393941323e-03f,
+1.392059057e-03f, 1.390174487e-03f, 1.388287619e-03f, 1.386398454e-03f, 1.384506997e-03f, 1.382613251e-03f, 1.380717218e-03f, 1.378818903e-03f, 1.376918310e-03f, 1.375015440e-03f,
+1.373110298e-03f, 1.371202888e-03f, 1.369293211e-03f, 1.367381273e-03f, 1.365467077e-03f, 1.363550625e-03f, 1.361631922e-03f, 1.359710970e-03f, 1.357787774e-03f, 1.355862336e-03f,
+1.353934661e-03f, 1.352004751e-03f, 1.350072609e-03f, 1.348138241e-03f, 1.346201648e-03f, 1.344262835e-03f, 1.342321805e-03f, 1.340378561e-03f, 1.338433107e-03f, 1.336485446e-03f,
+1.334535582e-03f, 1.332583518e-03f, 1.330629258e-03f, 1.328672805e-03f, 1.326714164e-03f, 1.324753336e-03f, 1.322790326e-03f, 1.320825138e-03f, 1.318857774e-03f, 1.316888239e-03f,
+1.314916536e-03f, 1.312942668e-03f, 1.310966639e-03f, 1.308988452e-03f, 1.307008112e-03f, 1.305025621e-03f, 1.303040983e-03f, 1.301054202e-03f, 1.299065281e-03f, 1.297074224e-03f,
+1.295081034e-03f, 1.293085715e-03f, 1.291088270e-03f, 1.289088703e-03f, 1.287087018e-03f, 1.285083218e-03f, 1.283077307e-03f, 1.281069288e-03f, 1.279059165e-03f, 1.277046942e-03f,
+1.275032621e-03f, 1.273016207e-03f, 1.270997704e-03f, 1.268977114e-03f, 1.266954442e-03f, 1.264929691e-03f, 1.262902865e-03f, 1.260873967e-03f, 1.258843001e-03f, 1.256809971e-03f,
+1.254774879e-03f, 1.252737731e-03f, 1.250698529e-03f, 1.248657277e-03f, 1.246613979e-03f, 1.244568638e-03f, 1.242521259e-03f, 1.240471844e-03f, 1.238420397e-03f, 1.236366922e-03f,
+1.234311423e-03f, 1.232253904e-03f, 1.230194367e-03f, 1.228132817e-03f, 1.226069257e-03f, 1.224003691e-03f, 1.221936123e-03f, 1.219866557e-03f, 1.217794995e-03f, 1.215721442e-03f,
+1.213645902e-03f, 1.211568377e-03f, 1.209488873e-03f, 1.207407392e-03f, 1.205323938e-03f, 1.203238516e-03f, 1.201151128e-03f, 1.199061778e-03f, 1.196970470e-03f, 1.194877208e-03f,
+1.192781996e-03f, 1.190684837e-03f, 1.188585735e-03f, 1.186484694e-03f, 1.184381717e-03f, 1.182276809e-03f, 1.180169972e-03f, 1.178061212e-03f, 1.175950530e-03f, 1.173837932e-03f,
+1.171723421e-03f, 1.169607000e-03f, 1.167488674e-03f, 1.165368447e-03f, 1.163246321e-03f, 1.161122301e-03f, 1.158996391e-03f, 1.156868594e-03f, 1.154738914e-03f, 1.152607355e-03f,
+1.150473921e-03f, 1.148338615e-03f, 1.146201442e-03f, 1.144062405e-03f, 1.141921507e-03f, 1.139778753e-03f, 1.137634147e-03f, 1.135487692e-03f, 1.133339392e-03f, 1.131189251e-03f,
+1.129037273e-03f, 1.126883462e-03f, 1.124727820e-03f, 1.122570353e-03f, 1.120411065e-03f, 1.118249957e-03f, 1.116087036e-03f, 1.113922304e-03f, 1.111755766e-03f, 1.109587425e-03f,
+1.107417284e-03f, 1.105245349e-03f, 1.103071623e-03f, 1.100896109e-03f, 1.098718812e-03f, 1.096539735e-03f, 1.094358882e-03f, 1.092176257e-03f, 1.089991865e-03f, 1.087805708e-03f,
+1.085617791e-03f, 1.083428117e-03f, 1.081236691e-03f, 1.079043516e-03f, 1.076848597e-03f, 1.074651936e-03f, 1.072453539e-03f, 1.070253408e-03f, 1.068051549e-03f, 1.065847964e-03f,
+1.063642657e-03f, 1.061435633e-03f, 1.059226896e-03f, 1.057016449e-03f, 1.054804296e-03f, 1.052590441e-03f, 1.050374889e-03f, 1.048157642e-03f, 1.045938705e-03f, 1.043718083e-03f,
+1.041495778e-03f, 1.039271794e-03f, 1.037046137e-03f, 1.034818809e-03f, 1.032589814e-03f, 1.030359158e-03f, 1.028126842e-03f, 1.025892872e-03f, 1.023657251e-03f, 1.021419984e-03f,
+1.019181073e-03f, 1.016940524e-03f, 1.014698340e-03f, 1.012454526e-03f, 1.010209084e-03f, 1.007962019e-03f, 1.005713336e-03f, 1.003463037e-03f, 1.001211128e-03f, 9.989576113e-04f,
+9.967024918e-04f, 9.944457731e-04f, 9.921874595e-04f, 9.899275547e-04f, 9.876660629e-04f, 9.854029880e-04f, 9.831383340e-04f, 9.808721049e-04f, 9.786043048e-04f, 9.763349375e-04f,
+9.740640073e-04f, 9.717915179e-04f, 9.695174735e-04f, 9.672418781e-04f, 9.649647357e-04f, 9.626860503e-04f, 9.604058259e-04f, 9.581240666e-04f, 9.558407763e-04f, 9.535559592e-04f,
+9.512696193e-04f, 9.489817605e-04f, 9.466923870e-04f, 9.444015027e-04f, 9.421091118e-04f, 9.398152182e-04f, 9.375198260e-04f, 9.352229392e-04f, 9.329245620e-04f, 9.306246983e-04f,
+9.283233522e-04f, 9.260205278e-04f, 9.237162291e-04f, 9.214104603e-04f, 9.191032252e-04f, 9.167945282e-04f, 9.144843731e-04f, 9.121727641e-04f, 9.098597052e-04f, 9.075452006e-04f,
+9.052292543e-04f, 9.029118704e-04f, 9.005930529e-04f, 8.982728061e-04f, 8.959511338e-04f, 8.936280403e-04f, 8.913035297e-04f, 8.889776059e-04f, 8.866502732e-04f, 8.843215356e-04f,
+8.819913973e-04f, 8.796598623e-04f, 8.773269347e-04f, 8.749926187e-04f, 8.726569183e-04f, 8.703198377e-04f, 8.679813810e-04f, 8.656415523e-04f, 8.633003557e-04f, 8.609577954e-04f,
+8.586138755e-04f, 8.562686000e-04f, 8.539219732e-04f, 8.515739991e-04f, 8.492246819e-04f, 8.468740257e-04f, 8.445220347e-04f, 8.421687130e-04f, 8.398140647e-04f, 8.374580940e-04f,
+8.351008050e-04f, 8.327422019e-04f, 8.303822888e-04f, 8.280210699e-04f, 8.256585493e-04f, 8.232947311e-04f, 8.209296196e-04f, 8.185632189e-04f, 8.161955332e-04f, 8.138265666e-04f,
+8.114563232e-04f, 8.090848074e-04f, 8.067120231e-04f, 8.043379746e-04f, 8.019626661e-04f, 7.995861017e-04f, 7.972082856e-04f, 7.948292220e-04f, 7.924489151e-04f, 7.900673691e-04f,
+7.876845880e-04f, 7.853005762e-04f, 7.829153379e-04f, 7.805288771e-04f, 7.781411981e-04f, 7.757523051e-04f, 7.733622023e-04f, 7.709708939e-04f, 7.685783840e-04f, 7.661846770e-04f,
+7.637897769e-04f, 7.613936880e-04f, 7.589964145e-04f, 7.565979606e-04f, 7.541983306e-04f, 7.517975285e-04f, 7.493955587e-04f, 7.469924254e-04f, 7.445881327e-04f, 7.421826850e-04f,
+7.397760863e-04f, 7.373683410e-04f, 7.349594532e-04f, 7.325494273e-04f, 7.301382673e-04f, 7.277259776e-04f, 7.253125624e-04f, 7.228980259e-04f, 7.204823724e-04f, 7.180656060e-04f,
+7.156477310e-04f, 7.132287517e-04f, 7.108086724e-04f, 7.083874971e-04f, 7.059652303e-04f, 7.035418761e-04f, 7.011174388e-04f, 6.986919226e-04f, 6.962653318e-04f, 6.938376706e-04f,
+6.914089434e-04f, 6.889791543e-04f, 6.865483076e-04f, 6.841164075e-04f, 6.816834585e-04f, 6.792494646e-04f, 6.768144301e-04f, 6.743783594e-04f, 6.719412567e-04f, 6.695031262e-04f,
+6.670639723e-04f, 6.646237992e-04f, 6.621826111e-04f, 6.597404124e-04f, 6.572972074e-04f, 6.548530002e-04f, 6.524077953e-04f, 6.499615968e-04f, 6.475144090e-04f, 6.450662363e-04f,
+6.426170829e-04f, 6.401669531e-04f, 6.377158513e-04f, 6.352637816e-04f, 6.328107483e-04f, 6.303567559e-04f, 6.279018085e-04f, 6.254459105e-04f, 6.229890661e-04f, 6.205312797e-04f,
+6.180725555e-04f, 6.156128979e-04f, 6.131523112e-04f, 6.106907996e-04f, 6.082283675e-04f, 6.057650192e-04f, 6.033007590e-04f, 6.008355911e-04f, 5.983695200e-04f, 5.959025498e-04f,
+5.934346850e-04f, 5.909659299e-04f, 5.884962887e-04f, 5.860257658e-04f, 5.835543654e-04f, 5.810820920e-04f, 5.786089499e-04f, 5.761349433e-04f, 5.736600765e-04f, 5.711843540e-04f,
+5.687077800e-04f, 5.662303589e-04f, 5.637520950e-04f, 5.612729926e-04f, 5.587930560e-04f, 5.563122896e-04f, 5.538306978e-04f, 5.513482848e-04f, 5.488650549e-04f, 5.463810126e-04f,
+5.438961622e-04f, 5.414105080e-04f, 5.389240543e-04f, 5.364368055e-04f, 5.339487659e-04f, 5.314599399e-04f, 5.289703318e-04f, 5.264799460e-04f, 5.239887867e-04f, 5.214968585e-04f,
+5.190041655e-04f, 5.165107122e-04f, 5.140165029e-04f, 5.115215420e-04f, 5.090258338e-04f, 5.065293826e-04f, 5.040321929e-04f, 5.015342690e-04f, 4.990356152e-04f, 4.965362359e-04f,
+4.940361354e-04f, 4.915353182e-04f, 4.890337886e-04f, 4.865315509e-04f, 4.840286095e-04f, 4.815249688e-04f, 4.790206331e-04f, 4.765156068e-04f, 4.740098943e-04f, 4.715035000e-04f,
+4.689964281e-04f, 4.664886832e-04f, 4.639802695e-04f, 4.614711914e-04f, 4.589614533e-04f, 4.564510596e-04f, 4.539400146e-04f, 4.514283228e-04f, 4.489159885e-04f, 4.464030160e-04f,
+4.438894098e-04f, 4.413751743e-04f, 4.388603138e-04f, 4.363448326e-04f, 4.338287353e-04f, 4.313120261e-04f, 4.287947094e-04f, 4.262767897e-04f, 4.237582713e-04f, 4.212391587e-04f,
+4.187194561e-04f, 4.161991679e-04f, 4.136782987e-04f, 4.111568527e-04f, 4.086348343e-04f, 4.061122480e-04f, 4.035890981e-04f, 4.010653891e-04f, 3.985411252e-04f, 3.960163110e-04f,
+3.934909507e-04f, 3.909650489e-04f, 3.884386098e-04f, 3.859116379e-04f, 3.833841376e-04f, 3.808561133e-04f, 3.783275694e-04f, 3.757985102e-04f, 3.732689403e-04f, 3.707388639e-04f,
+3.682082854e-04f, 3.656772094e-04f, 3.631456402e-04f, 3.606135821e-04f, 3.580810396e-04f, 3.555480172e-04f, 3.530145191e-04f, 3.504805498e-04f, 3.479461137e-04f, 3.454112153e-04f,
+3.428758589e-04f, 3.403400489e-04f, 3.378037897e-04f, 3.352670858e-04f, 3.327299416e-04f, 3.301923614e-04f, 3.276543497e-04f, 3.251159109e-04f, 3.225770493e-04f, 3.200377695e-04f,
+3.174980758e-04f, 3.149579727e-04f, 3.124174644e-04f, 3.098765556e-04f, 3.073352505e-04f, 3.047935536e-04f, 3.022514693e-04f, 2.997090020e-04f, 2.971661562e-04f, 2.946229362e-04f,
+2.920793465e-04f, 2.895353915e-04f, 2.869910755e-04f, 2.844464031e-04f, 2.819013786e-04f, 2.793560065e-04f, 2.768102911e-04f, 2.742642369e-04f, 2.717178484e-04f, 2.691711299e-04f,
+2.666240858e-04f, 2.640767206e-04f, 2.615290387e-04f, 2.589810445e-04f, 2.564327424e-04f, 2.538841369e-04f, 2.513352324e-04f, 2.487860332e-04f, 2.462365439e-04f, 2.436867689e-04f,
+2.411367125e-04f, 2.385863792e-04f, 2.360357734e-04f, 2.334848995e-04f, 2.309337620e-04f, 2.283823653e-04f, 2.258307138e-04f, 2.232788120e-04f, 2.207266642e-04f, 2.181742749e-04f,
+2.156216484e-04f, 2.130687894e-04f, 2.105157021e-04f, 2.079623909e-04f, 2.054088604e-04f, 2.028551149e-04f, 2.003011589e-04f, 1.977469968e-04f, 1.951926330e-04f, 1.926380719e-04f,
+1.900833180e-04f, 1.875283757e-04f, 1.849732494e-04f, 1.824179436e-04f, 1.798624626e-04f, 1.773068109e-04f, 1.747509930e-04f, 1.721950132e-04f, 1.696388760e-04f, 1.670825858e-04f,
+1.645261470e-04f, 1.619695641e-04f, 1.594128415e-04f, 1.568559836e-04f, 1.542989948e-04f, 1.517418796e-04f, 1.491846424e-04f, 1.466272877e-04f, 1.440698197e-04f, 1.415122431e-04f,
+1.389545621e-04f, 1.363967813e-04f, 1.338389051e-04f, 1.312809378e-04f, 1.287228839e-04f, 1.261647479e-04f, 1.236065341e-04f, 1.210482470e-04f, 1.184898911e-04f, 1.159314706e-04f,
+1.133729902e-04f, 1.108144541e-04f, 1.082558669e-04f, 1.056972328e-04f, 1.031385565e-04f, 1.005798422e-04f, 9.802109449e-05f, 9.546231769e-05f, 9.290351626e-05f, 9.034469461e-05f,
+8.778585718e-05f, 8.522700838e-05f, 8.266815265e-05f, 8.010929440e-05f, 7.755043806e-05f, 7.499158805e-05f, 7.243274879e-05f, 6.987392471e-05f, 6.731512022e-05f, 6.475633975e-05f,
+6.219758772e-05f, 5.963886856e-05f, 5.708018667e-05f, 5.452154649e-05f, 5.196295244e-05f, 4.940440893e-05f, 4.684592037e-05f, 4.428749121e-05f, 4.172912584e-05f, 3.917082869e-05f,
+3.661260419e-05f, 3.405445673e-05f, 3.149639075e-05f, 2.893841067e-05f, 2.638052088e-05f, 2.382272583e-05f, 2.126502991e-05f, 1.870743755e-05f, 1.614995315e-05f, 1.359258114e-05f,
+1.103532594e-05f, 8.478191940e-06f, 5.921183570e-06f, 3.364305239e-06f, 8.075613591e-07f, -1.749043657e-06f, -4.305505399e-06f, -6.861819455e-06f, -9.417981415e-06f, -1.197398687e-05f,
+-1.452983141e-05f, -1.708551062e-05f, -1.964102010e-05f, -2.219635544e-05f, -2.475151223e-05f, -2.730648607e-05f, -2.986127255e-05f, -3.241586726e-05f, -3.497026580e-05f, -3.752446376e-05f,
+-4.007845674e-05f, -4.263224034e-05f, -4.518581015e-05f, -4.773916178e-05f, -5.029229081e-05f, -5.284519286e-05f, -5.539786351e-05f, -5.795029838e-05f, -6.050249305e-05f, -6.305444314e-05f,
+-6.560614424e-05f, -6.815759196e-05f, -7.070878191e-05f, -7.325970968e-05f, -7.581037088e-05f, -7.836076111e-05f, -8.091087600e-05f, -8.346071113e-05f, -8.601026212e-05f, -8.855952458e-05f,
+-9.110849412e-05f, -9.365716634e-05f, -9.620553687e-05f, -9.875360130e-05f, -1.013013553e-04f, -1.038487943e-04f, -1.063959142e-04f, -1.089427104e-04f, -1.114891786e-04f, -1.140353144e-04f,
+-1.165811134e-04f, -1.191265712e-04f, -1.216716835e-04f, -1.242164458e-04f, -1.267608539e-04f, -1.293049032e-04f, -1.318485895e-04f, -1.343919084e-04f, -1.369348554e-04f, -1.394774263e-04f,
+-1.420196165e-04f, -1.445614219e-04f, -1.471028379e-04f, -1.496438603e-04f, -1.521844845e-04f, -1.547247064e-04f, -1.572645215e-04f, -1.598039254e-04f, -1.623429138e-04f, -1.648814823e-04f,
+-1.674196265e-04f, -1.699573421e-04f, -1.724946247e-04f, -1.750314700e-04f, -1.775678736e-04f, -1.801038311e-04f, -1.826393382e-04f, -1.851743905e-04f, -1.877089837e-04f, -1.902431133e-04f,
+-1.927767751e-04f, -1.953099647e-04f, -1.978426778e-04f, -2.003749099e-04f, -2.029066568e-04f, -2.054379141e-04f, -2.079686774e-04f, -2.104989424e-04f, -2.130287048e-04f, -2.155579601e-04f,
+-2.180867041e-04f, -2.206149325e-04f, -2.231426408e-04f, -2.256698247e-04f, -2.281964800e-04f, -2.307226022e-04f, -2.332481870e-04f, -2.357732301e-04f, -2.382977272e-04f, -2.408216738e-04f,
+-2.433450658e-04f, -2.458678987e-04f, -2.483901682e-04f, -2.509118700e-04f, -2.534329998e-04f, -2.559535533e-04f, -2.584735260e-04f, -2.609929137e-04f, -2.635117121e-04f, -2.660299169e-04f,
+-2.685475236e-04f, -2.710645281e-04f, -2.735809260e-04f, -2.760967129e-04f, -2.786118846e-04f, -2.811264368e-04f, -2.836403650e-04f, -2.861536651e-04f, -2.886663328e-04f, -2.911783636e-04f,
+-2.936897533e-04f, -2.962004976e-04f, -2.987105922e-04f, -3.012200327e-04f, -3.037288150e-04f, -3.062369346e-04f, -3.087443873e-04f, -3.112511688e-04f, -3.137572748e-04f, -3.162627010e-04f,
+-3.187674431e-04f, -3.212714968e-04f, -3.237748578e-04f, -3.262775218e-04f, -3.287794846e-04f, -3.312807419e-04f, -3.337812893e-04f, -3.362811226e-04f, -3.387802375e-04f, -3.412786297e-04f,
+-3.437762950e-04f, -3.462732290e-04f, -3.487694275e-04f, -3.512648863e-04f, -3.537596010e-04f, -3.562535674e-04f, -3.587467812e-04f, -3.612392381e-04f, -3.637309339e-04f, -3.662218643e-04f,
+-3.687120251e-04f, -3.712014119e-04f, -3.736900205e-04f, -3.761778467e-04f, -3.786648862e-04f, -3.811511348e-04f, -3.836365882e-04f, -3.861212421e-04f, -3.886050922e-04f, -3.910881345e-04f,
+-3.935703645e-04f, -3.960517781e-04f, -3.985323709e-04f, -4.010121389e-04f, -4.034910776e-04f, -4.059691830e-04f, -4.084464507e-04f, -4.109228765e-04f, -4.133984561e-04f, -4.158731854e-04f,
+-4.183470602e-04f, -4.208200760e-04f, -4.232922289e-04f, -4.257635145e-04f, -4.282339286e-04f, -4.307034669e-04f, -4.331721254e-04f, -4.356398996e-04f, -4.381067855e-04f, -4.405727788e-04f,
+-4.430378753e-04f, -4.455020708e-04f, -4.479653611e-04f, -4.504277419e-04f, -4.528892091e-04f, -4.553497584e-04f, -4.578093857e-04f, -4.602680868e-04f, -4.627258574e-04f, -4.651826933e-04f,
+-4.676385905e-04f, -4.700935446e-04f, -4.725475514e-04f, -4.750006069e-04f, -4.774527067e-04f, -4.799038468e-04f, -4.823540229e-04f, -4.848032308e-04f, -4.872514664e-04f, -4.896987255e-04f,
+-4.921450039e-04f, -4.945902975e-04f, -4.970346020e-04f, -4.994779133e-04f, -5.019202272e-04f, -5.043615396e-04f, -5.068018463e-04f, -5.092411431e-04f, -5.116794259e-04f, -5.141166905e-04f,
+-5.165529327e-04f, -5.189881485e-04f, -5.214223335e-04f, -5.238554838e-04f, -5.262875952e-04f, -5.287186634e-04f, -5.311486844e-04f, -5.335776540e-04f, -5.360055680e-04f, -5.384324224e-04f,
+-5.408582130e-04f, -5.432829357e-04f, -5.457065863e-04f, -5.481291607e-04f, -5.505506547e-04f, -5.529710643e-04f, -5.553903854e-04f, -5.578086137e-04f, -5.602257452e-04f, -5.626417757e-04f,
+-5.650567012e-04f, -5.674705176e-04f, -5.698832206e-04f, -5.722948063e-04f, -5.747052705e-04f, -5.771146090e-04f, -5.795228179e-04f, -5.819298930e-04f, -5.843358301e-04f, -5.867406253e-04f,
+-5.891442743e-04f, -5.915467732e-04f, -5.939481178e-04f, -5.963483041e-04f, -5.987473279e-04f, -6.011451851e-04f, -6.035418718e-04f, -6.059373838e-04f, -6.083317170e-04f, -6.107248673e-04f,
+-6.131168308e-04f, -6.155076033e-04f, -6.178971807e-04f, -6.202855590e-04f, -6.226727342e-04f, -6.250587021e-04f, -6.274434587e-04f, -6.298270000e-04f, -6.322093219e-04f, -6.345904203e-04f,
+-6.369702912e-04f, -6.393489306e-04f, -6.417263344e-04f, -6.441024985e-04f, -6.464774190e-04f, -6.488510918e-04f, -6.512235128e-04f, -6.535946781e-04f, -6.559645836e-04f, -6.583332252e-04f,
+-6.607005990e-04f, -6.630667009e-04f, -6.654315269e-04f, -6.677950730e-04f, -6.701573351e-04f, -6.725183094e-04f, -6.748779916e-04f, -6.772363779e-04f, -6.795934643e-04f, -6.819492466e-04f,
+-6.843037210e-04f, -6.866568835e-04f, -6.890087300e-04f, -6.913592565e-04f, -6.937084591e-04f, -6.960563337e-04f, -6.984028764e-04f, -7.007480833e-04f, -7.030919502e-04f, -7.054344733e-04f,
+-7.077756485e-04f, -7.101154720e-04f, -7.124539396e-04f, -7.147910476e-04f, -7.171267918e-04f, -7.194611683e-04f, -7.217941732e-04f, -7.241258025e-04f, -7.264560523e-04f, -7.287849186e-04f,
+-7.311123974e-04f, -7.334384848e-04f, -7.357631770e-04f, -7.380864698e-04f, -7.404083594e-04f, -7.427288418e-04f, -7.450479132e-04f, -7.473655696e-04f, -7.496818070e-04f, -7.519966215e-04f,
+-7.543100092e-04f, -7.566219663e-04f, -7.589324887e-04f, -7.612415725e-04f, -7.635492139e-04f, -7.658554089e-04f, -7.681601536e-04f, -7.704634442e-04f, -7.727652767e-04f, -7.750656472e-04f,
+-7.773645518e-04f, -7.796619866e-04f, -7.819579478e-04f, -7.842524315e-04f, -7.865454337e-04f, -7.888369506e-04f, -7.911269783e-04f, -7.934155129e-04f, -7.957025506e-04f, -7.979880875e-04f,
+-8.002721197e-04f, -8.025546433e-04f, -8.048356546e-04f, -8.071151495e-04f, -8.093931244e-04f, -8.116695753e-04f, -8.139444983e-04f, -8.162178896e-04f, -8.184897455e-04f, -8.207600619e-04f,
+-8.230288352e-04f, -8.252960614e-04f, -8.275617367e-04f, -8.298258573e-04f, -8.320884194e-04f, -8.343494191e-04f, -8.366088526e-04f, -8.388667162e-04f, -8.411230059e-04f, -8.433777180e-04f,
+-8.456308486e-04f, -8.478823940e-04f, -8.501323503e-04f, -8.523807137e-04f, -8.546274805e-04f, -8.568726469e-04f, -8.591162090e-04f, -8.613581631e-04f, -8.635985053e-04f, -8.658372320e-04f,
+-8.680743392e-04f, -8.703098233e-04f, -8.725436804e-04f, -8.747759069e-04f, -8.770064988e-04f, -8.792354525e-04f, -8.814627642e-04f, -8.836884302e-04f, -8.859124466e-04f, -8.881348097e-04f,
+-8.903555158e-04f, -8.925745611e-04f, -8.947919419e-04f, -8.970076544e-04f, -8.992216949e-04f, -9.014340597e-04f, -9.036447451e-04f, -9.058537472e-04f, -9.080610624e-04f, -9.102666870e-04f,
+-9.124706172e-04f, -9.146728493e-04f, -9.168733796e-04f, -9.190722044e-04f, -9.212693200e-04f, -9.234647227e-04f, -9.256584088e-04f, -9.278503745e-04f, -9.300406163e-04f, -9.322291303e-04f,
+-9.344159130e-04f, -9.366009606e-04f, -9.387842694e-04f, -9.409658359e-04f, -9.431456562e-04f, -9.453237267e-04f, -9.475000438e-04f, -9.496746037e-04f, -9.518474029e-04f, -9.540184377e-04f,
+-9.561877043e-04f, -9.583551993e-04f, -9.605209188e-04f, -9.626848593e-04f, -9.648470171e-04f, -9.670073886e-04f, -9.691659702e-04f, -9.713227582e-04f, -9.734777489e-04f, -9.756309388e-04f,
+-9.777823243e-04f, -9.799319016e-04f, -9.820796673e-04f, -9.842256176e-04f, -9.863697490e-04f, -9.885120579e-04f, -9.906525407e-04f, -9.927911937e-04f, -9.949280134e-04f, -9.970629961e-04f,
+-9.991961384e-04f, -1.001327437e-03f, -1.003456887e-03f, -1.005584486e-03f, -1.007710231e-03f, -1.009834117e-03f, -1.011956141e-03f, -1.014076299e-03f, -1.016194589e-03f, -1.018311005e-03f,
+-1.020425546e-03f, -1.022538206e-03f, -1.024648984e-03f, -1.026757874e-03f, -1.028864875e-03f, -1.030969981e-03f, -1.033073189e-03f, -1.035174497e-03f, -1.037273900e-03f, -1.039371395e-03f,
+-1.041466979e-03f, -1.043560647e-03f, -1.045652397e-03f, -1.047742225e-03f, -1.049830127e-03f, -1.051916100e-03f, -1.054000140e-03f, -1.056082245e-03f, -1.058162409e-03f, -1.060240631e-03f,
+-1.062316906e-03f, -1.064391230e-03f, -1.066463602e-03f, -1.068534016e-03f, -1.070602470e-03f, -1.072668959e-03f, -1.074733482e-03f, -1.076796033e-03f, -1.078856610e-03f, -1.080915209e-03f,
+-1.082971827e-03f, -1.085026461e-03f, -1.087079106e-03f, -1.089129760e-03f, -1.091178418e-03f, -1.093225078e-03f, -1.095269737e-03f, -1.097312390e-03f, -1.099353034e-03f, -1.101391666e-03f,
+-1.103428283e-03f, -1.105462880e-03f, -1.107495456e-03f, -1.109526005e-03f, -1.111554526e-03f, -1.113581013e-03f, -1.115605465e-03f, -1.117627878e-03f, -1.119648248e-03f, -1.121666571e-03f,
+-1.123682846e-03f, -1.125697067e-03f, -1.127709232e-03f, -1.129719338e-03f, -1.131727380e-03f, -1.133733357e-03f, -1.135737263e-03f, -1.137739097e-03f, -1.139738854e-03f, -1.141736532e-03f,
+-1.143732127e-03f, -1.145725635e-03f, -1.147717053e-03f, -1.149706379e-03f, -1.151693608e-03f, -1.153678738e-03f, -1.155661764e-03f, -1.157642684e-03f, -1.159621495e-03f, -1.161598193e-03f,
+-1.163572774e-03f, -1.165545236e-03f, -1.167515576e-03f, -1.169483789e-03f, -1.171449872e-03f, -1.173413823e-03f, -1.175375639e-03f, -1.177335315e-03f, -1.179292848e-03f, -1.181248236e-03f,
+-1.183201475e-03f, -1.185152561e-03f, -1.187101492e-03f, -1.189048264e-03f, -1.190992874e-03f, -1.192935319e-03f, -1.194875596e-03f, -1.196813701e-03f, -1.198749630e-03f, -1.200683382e-03f,
+-1.202614952e-03f, -1.204544338e-03f, -1.206471535e-03f, -1.208396542e-03f, -1.210319354e-03f, -1.212239969e-03f, -1.214158384e-03f, -1.216074594e-03f, -1.217988597e-03f, -1.219900391e-03f,
+-1.221809970e-03f, -1.223717333e-03f, -1.225622477e-03f, -1.227525397e-03f, -1.229426092e-03f, -1.231324557e-03f, -1.233220789e-03f, -1.235114786e-03f, -1.237006545e-03f, -1.238896061e-03f,
+-1.240783332e-03f, -1.242668356e-03f, -1.244551128e-03f, -1.246431645e-03f, -1.248309905e-03f, -1.250185904e-03f, -1.252059640e-03f, -1.253931108e-03f, -1.255800307e-03f, -1.257667232e-03f,
+-1.259531881e-03f, -1.261394251e-03f, -1.263254339e-03f, -1.265112141e-03f, -1.266967654e-03f, -1.268820876e-03f, -1.270671803e-03f, -1.272520432e-03f, -1.274366760e-03f, -1.276210784e-03f,
+-1.278052501e-03f, -1.279891908e-03f, -1.281729002e-03f, -1.283563780e-03f, -1.285396239e-03f, -1.287226375e-03f, -1.289054186e-03f, -1.290879669e-03f, -1.292702820e-03f, -1.294523637e-03f,
+-1.296342117e-03f, -1.298158256e-03f, -1.299972052e-03f, -1.301783501e-03f, -1.303592601e-03f, -1.305399348e-03f, -1.307203740e-03f, -1.309005774e-03f, -1.310805446e-03f, -1.312602754e-03f,
+-1.314397694e-03f, -1.316190264e-03f, -1.317980461e-03f, -1.319768282e-03f, -1.321553723e-03f, -1.323336782e-03f, -1.325117456e-03f, -1.326895742e-03f, -1.328671637e-03f, -1.330445138e-03f,
+-1.332216242e-03f, -1.333984947e-03f, -1.335751248e-03f, -1.337515144e-03f, -1.339276631e-03f, -1.341035707e-03f, -1.342792369e-03f, -1.344546613e-03f, -1.346298437e-03f, -1.348047837e-03f,
+-1.349794812e-03f, -1.351539358e-03f, -1.353281472e-03f, -1.355021152e-03f, -1.356758394e-03f, -1.358493196e-03f, -1.360225554e-03f, -1.361955467e-03f, -1.363682930e-03f, -1.365407941e-03f,
+-1.367130498e-03f, -1.368850598e-03f, -1.370568237e-03f, -1.372283413e-03f, -1.373996123e-03f, -1.375706364e-03f, -1.377414133e-03f, -1.379119428e-03f, -1.380822246e-03f, -1.382522584e-03f,
+-1.384220438e-03f, -1.385915808e-03f, -1.387608688e-03f, -1.389299077e-03f, -1.390986973e-03f, -1.392672371e-03f, -1.394355270e-03f, -1.396035667e-03f, -1.397713558e-03f, -1.399388942e-03f,
+-1.401061814e-03f, -1.402732174e-03f, -1.404400017e-03f, -1.406065341e-03f, -1.407728144e-03f, -1.409388422e-03f, -1.411046173e-03f, -1.412701395e-03f, -1.414354084e-03f, -1.416004237e-03f,
+-1.417651853e-03f, -1.419296927e-03f, -1.420939459e-03f, -1.422579444e-03f, -1.424216881e-03f, -1.425851766e-03f, -1.427484096e-03f, -1.429113870e-03f, -1.430741085e-03f, -1.432365737e-03f,
+-1.433987824e-03f, -1.435607344e-03f, -1.437224294e-03f, -1.438838671e-03f, -1.440450472e-03f, -1.442059695e-03f, -1.443666338e-03f, -1.445270397e-03f, -1.446871869e-03f, -1.448470754e-03f,
+-1.450067047e-03f, -1.451660746e-03f, -1.453251848e-03f, -1.454840352e-03f, -1.456426253e-03f, -1.458009551e-03f, -1.459590241e-03f, -1.461168322e-03f, -1.462743791e-03f, -1.464316645e-03f,
+-1.465886882e-03f, -1.467454499e-03f, -1.469019494e-03f, -1.470581864e-03f, -1.472141606e-03f, -1.473698718e-03f, -1.475253198e-03f, -1.476805042e-03f, -1.478354249e-03f, -1.479900816e-03f,
+-1.481444740e-03f, -1.482986018e-03f, -1.484524649e-03f, -1.486060629e-03f, -1.487593957e-03f, -1.489124630e-03f, -1.490652644e-03f, -1.492177998e-03f, -1.493700690e-03f, -1.495220716e-03f,
+-1.496738075e-03f, -1.498252763e-03f, -1.499764778e-03f, -1.501274119e-03f, -1.502780781e-03f, -1.504284764e-03f, -1.505786064e-03f, -1.507284679e-03f, -1.508780607e-03f, -1.510273844e-03f,
+-1.511764390e-03f, -1.513252241e-03f, -1.514737394e-03f, -1.516219848e-03f, -1.517699600e-03f, -1.519176648e-03f, -1.520650989e-03f, -1.522122620e-03f, -1.523591540e-03f, -1.525057746e-03f,
+-1.526521236e-03f, -1.527982007e-03f, -1.529440056e-03f, -1.530895383e-03f, -1.532347983e-03f, -1.533797855e-03f, -1.535244997e-03f, -1.536689405e-03f, -1.538131079e-03f, -1.539570015e-03f,
+-1.541006210e-03f, -1.542439664e-03f, -1.543870373e-03f, -1.545298335e-03f, -1.546723548e-03f, -1.548146009e-03f, -1.549565716e-03f, -1.550982667e-03f, -1.552396860e-03f, -1.553808292e-03f,
+-1.555216960e-03f, -1.556622864e-03f, -1.558026000e-03f, -1.559426366e-03f, -1.560823959e-03f, -1.562218779e-03f, -1.563610822e-03f, -1.565000085e-03f, -1.566386568e-03f, -1.567770267e-03f,
+-1.569151181e-03f, -1.570529306e-03f, -1.571904642e-03f, -1.573277185e-03f, -1.574646933e-03f, -1.576013885e-03f, -1.577378038e-03f, -1.578739390e-03f, -1.580097938e-03f, -1.581453681e-03f,
+-1.582806616e-03f, -1.584156740e-03f, -1.585504053e-03f, -1.586848552e-03f, -1.588190234e-03f, -1.589529097e-03f, -1.590865140e-03f, -1.592198359e-03f, -1.593528754e-03f, -1.594856321e-03f,
+-1.596181059e-03f, -1.597502965e-03f, -1.598822038e-03f, -1.600138275e-03f, -1.601451674e-03f, -1.602762233e-03f, -1.604069949e-03f, -1.605374822e-03f, -1.606676848e-03f, -1.607976026e-03f,
+-1.609272354e-03f, -1.610565828e-03f, -1.611856449e-03f, -1.613144212e-03f, -1.614429117e-03f, -1.615711160e-03f, -1.616990341e-03f, -1.618266657e-03f, -1.619540106e-03f, -1.620810685e-03f,
+-1.622078394e-03f, -1.623343229e-03f, -1.624605189e-03f, -1.625864272e-03f, -1.627120476e-03f, -1.628373799e-03f, -1.629624238e-03f, -1.630871792e-03f, -1.632116459e-03f, -1.633358237e-03f,
+-1.634597123e-03f, -1.635833116e-03f, -1.637066214e-03f, -1.638296415e-03f, -1.639523717e-03f, -1.640748118e-03f, -1.641969615e-03f, -1.643188208e-03f, -1.644403894e-03f, -1.645616671e-03f,
+-1.646826537e-03f, -1.648033490e-03f, -1.649237529e-03f, -1.650438651e-03f, -1.651636854e-03f, -1.652832137e-03f, -1.654024498e-03f, -1.655213935e-03f, -1.656400445e-03f, -1.657584027e-03f,
+-1.658764680e-03f, -1.659942401e-03f, -1.661117188e-03f, -1.662289040e-03f, -1.663457954e-03f, -1.664623929e-03f, -1.665786963e-03f, -1.666947054e-03f, -1.668104200e-03f, -1.669258400e-03f,
+-1.670409651e-03f, -1.671557952e-03f, -1.672703300e-03f, -1.673845695e-03f, -1.674985134e-03f, -1.676121616e-03f, -1.677255138e-03f, -1.678385699e-03f, -1.679513297e-03f, -1.680637931e-03f,
+-1.681759598e-03f, -1.682878296e-03f, -1.683994025e-03f, -1.685106782e-03f, -1.686216565e-03f, -1.687323373e-03f, -1.688427204e-03f, -1.689528056e-03f, -1.690625927e-03f, -1.691720817e-03f,
+-1.692812722e-03f, -1.693901641e-03f, -1.694987573e-03f, -1.696070516e-03f, -1.697150468e-03f, -1.698227428e-03f, -1.699301393e-03f, -1.700372362e-03f, -1.701440333e-03f, -1.702505306e-03f,
+-1.703567277e-03f, -1.704626245e-03f, -1.705682209e-03f, -1.706735168e-03f, -1.707785118e-03f, -1.708832059e-03f, -1.709875989e-03f, -1.710916907e-03f, -1.711954810e-03f, -1.712989698e-03f,
+-1.714021568e-03f, -1.715050419e-03f, -1.716076249e-03f, -1.717099057e-03f, -1.718118841e-03f, -1.719135600e-03f, -1.720149331e-03f, -1.721160034e-03f, -1.722167707e-03f, -1.723172347e-03f,
+-1.724173955e-03f, -1.725172527e-03f, -1.726168063e-03f, -1.727160560e-03f, -1.728150019e-03f, -1.729136435e-03f, -1.730119810e-03f, -1.731100139e-03f, -1.732077424e-03f, -1.733051660e-03f,
+-1.734022848e-03f, -1.734990986e-03f, -1.735956072e-03f, -1.736918104e-03f, -1.737877082e-03f, -1.738833004e-03f, -1.739785867e-03f, -1.740735672e-03f, -1.741682415e-03f, -1.742626096e-03f,
+-1.743566714e-03f, -1.744504267e-03f, -1.745438753e-03f, -1.746370171e-03f, -1.747298519e-03f, -1.748223797e-03f, -1.749146002e-03f, -1.750065133e-03f, -1.750981190e-03f, -1.751894169e-03f,
+-1.752804071e-03f, -1.753710893e-03f, -1.754614634e-03f, -1.755515294e-03f, -1.756412869e-03f, -1.757307360e-03f, -1.758198764e-03f, -1.759087081e-03f, -1.759972308e-03f, -1.760854445e-03f,
+-1.761733491e-03f, -1.762609443e-03f, -1.763482300e-03f, -1.764352062e-03f, -1.765218727e-03f, -1.766082293e-03f, -1.766942759e-03f, -1.767800125e-03f, -1.768654387e-03f, -1.769505546e-03f,
+-1.770353600e-03f, -1.771198548e-03f, -1.772040388e-03f, -1.772879119e-03f, -1.773714740e-03f, -1.774547249e-03f, -1.775376646e-03f, -1.776202929e-03f, -1.777026096e-03f, -1.777846147e-03f,
+-1.778663080e-03f, -1.779476895e-03f, -1.780287589e-03f, -1.781095161e-03f, -1.781899611e-03f, -1.782700937e-03f, -1.783499138e-03f, -1.784294212e-03f, -1.785086159e-03f, -1.785874978e-03f,
+-1.786660666e-03f, -1.787443223e-03f, -1.788222648e-03f, -1.788998940e-03f, -1.789772097e-03f, -1.790542118e-03f, -1.791309002e-03f, -1.792072749e-03f, -1.792833356e-03f, -1.793590822e-03f,
+-1.794345147e-03f, -1.795096329e-03f, -1.795844368e-03f, -1.796589262e-03f, -1.797331009e-03f, -1.798069610e-03f, -1.798805062e-03f, -1.799537365e-03f, -1.800266518e-03f, -1.800992519e-03f,
+-1.801715368e-03f, -1.802435063e-03f, -1.803151603e-03f, -1.803864987e-03f, -1.804575215e-03f, -1.805282284e-03f, -1.805986195e-03f, -1.806686946e-03f, -1.807384535e-03f, -1.808078963e-03f,
+-1.808770228e-03f, -1.809458328e-03f, -1.810143263e-03f, -1.810825032e-03f, -1.811503634e-03f, -1.812179068e-03f, -1.812851333e-03f, -1.813520428e-03f, -1.814186351e-03f, -1.814849103e-03f,
+-1.815508681e-03f, -1.816165085e-03f, -1.816818315e-03f, -1.817468368e-03f, -1.818115245e-03f, -1.818758944e-03f, -1.819399464e-03f, -1.820036804e-03f, -1.820670964e-03f, -1.821301942e-03f,
+-1.821929738e-03f, -1.822554350e-03f, -1.823175779e-03f, -1.823794022e-03f, -1.824409079e-03f, -1.825020948e-03f, -1.825629631e-03f, -1.826235124e-03f, -1.826837428e-03f, -1.827436541e-03f,
+-1.828032464e-03f, -1.828625194e-03f, -1.829214731e-03f, -1.829801074e-03f, -1.830384222e-03f, -1.830964175e-03f, -1.831540932e-03f, -1.832114491e-03f, -1.832684853e-03f, -1.833252016e-03f,
+-1.833815979e-03f, -1.834376741e-03f, -1.834934303e-03f, -1.835488663e-03f, -1.836039819e-03f, -1.836587773e-03f, -1.837132522e-03f, -1.837674066e-03f, -1.838212404e-03f, -1.838747535e-03f,
+-1.839279460e-03f, -1.839808176e-03f, -1.840333683e-03f, -1.840855981e-03f, -1.841375069e-03f, -1.841890945e-03f, -1.842403610e-03f, -1.842913062e-03f, -1.843419302e-03f, -1.843922327e-03f,
+-1.844422138e-03f, -1.844918734e-03f, -1.845412114e-03f, -1.845902278e-03f, -1.846389224e-03f, -1.846872952e-03f, -1.847353462e-03f, -1.847830753e-03f, -1.848304824e-03f, -1.848775674e-03f,
+-1.849243303e-03f, -1.849707711e-03f, -1.850168896e-03f, -1.850626858e-03f, -1.851081596e-03f, -1.851533111e-03f, -1.851981400e-03f, -1.852426464e-03f, -1.852868302e-03f, -1.853306914e-03f,
+-1.853742298e-03f, -1.854174454e-03f, -1.854603383e-03f, -1.855029082e-03f, -1.855451552e-03f, -1.855870792e-03f, -1.856286801e-03f, -1.856699579e-03f, -1.857109126e-03f, -1.857515441e-03f,
+-1.857918522e-03f, -1.858318371e-03f, -1.858714986e-03f, -1.859108367e-03f, -1.859498513e-03f, -1.859885424e-03f, -1.860269099e-03f, -1.860649538e-03f, -1.861026740e-03f, -1.861400706e-03f,
+-1.861771433e-03f, -1.862138923e-03f, -1.862503174e-03f, -1.862864186e-03f, -1.863221958e-03f, -1.863576491e-03f, -1.863927784e-03f, -1.864275835e-03f, -1.864620646e-03f, -1.864962215e-03f,
+-1.865300542e-03f, -1.865635627e-03f, -1.865967469e-03f, -1.866296068e-03f, -1.866621423e-03f, -1.866943534e-03f, -1.867262401e-03f, -1.867578023e-03f, -1.867890400e-03f, -1.868199532e-03f,
+-1.868505418e-03f, -1.868808058e-03f, -1.869107451e-03f, -1.869403598e-03f, -1.869696497e-03f, -1.869986149e-03f, -1.870272553e-03f, -1.870555709e-03f, -1.870835617e-03f, -1.871112276e-03f,
+-1.871385686e-03f, -1.871655846e-03f, -1.871922757e-03f, -1.872186418e-03f, -1.872446829e-03f, -1.872703990e-03f, -1.872957899e-03f, -1.873208558e-03f, -1.873455966e-03f, -1.873700122e-03f,
+-1.873941026e-03f, -1.874178679e-03f, -1.874413079e-03f, -1.874644227e-03f, -1.874872122e-03f, -1.875096764e-03f, -1.875318154e-03f, -1.875536290e-03f, -1.875751173e-03f, -1.875962802e-03f,
+-1.876171177e-03f, -1.876376298e-03f, -1.876578165e-03f, -1.876776778e-03f, -1.876972136e-03f, -1.877164239e-03f, -1.877353088e-03f, -1.877538682e-03f, -1.877721020e-03f, -1.877900104e-03f,
+-1.878075932e-03f, -1.878248504e-03f, -1.878417821e-03f, -1.878583882e-03f, -1.878746687e-03f, -1.878906236e-03f, -1.879062530e-03f, -1.879215567e-03f, -1.879365348e-03f, -1.879511872e-03f,
+-1.879655141e-03f, -1.879795152e-03f, -1.879931908e-03f, -1.880065406e-03f, -1.880195648e-03f, -1.880322634e-03f, -1.880446363e-03f, -1.880566835e-03f, -1.880684050e-03f, -1.880798009e-03f,
+-1.880908710e-03f, -1.881016155e-03f, -1.881120343e-03f, -1.881221274e-03f, -1.881318949e-03f, -1.881413366e-03f, -1.881504527e-03f, -1.881592431e-03f, -1.881677079e-03f, -1.881758469e-03f,
+-1.881836603e-03f, -1.881911481e-03f, -1.881983102e-03f, -1.882051466e-03f, -1.882116574e-03f, -1.882178425e-03f, -1.882237020e-03f, -1.882292359e-03f, -1.882344442e-03f, -1.882393268e-03f,
+-1.882438839e-03f, -1.882481154e-03f, -1.882520213e-03f, -1.882556017e-03f, -1.882588564e-03f, -1.882617857e-03f, -1.882643894e-03f, -1.882666676e-03f, -1.882686203e-03f, -1.882702475e-03f,
+-1.882715493e-03f, -1.882725256e-03f, -1.882731765e-03f, -1.882735019e-03f, -1.882735019e-03f, -1.882731766e-03f, -1.882725258e-03f, -1.882715498e-03f, -1.882702484e-03f, -1.882686217e-03f,
+-1.882666697e-03f, -1.882643924e-03f, -1.882617899e-03f, -1.882588621e-03f, -1.882556092e-03f, -1.882520311e-03f, -1.882481278e-03f, -1.882438994e-03f, -1.882393459e-03f, -1.882344674e-03f,
+-1.882292638e-03f, -1.882237351e-03f, -1.882178815e-03f, -1.882117029e-03f, -1.882051993e-03f, -1.881983709e-03f, -1.881912175e-03f, -1.881837393e-03f, -1.881759363e-03f, -1.881678085e-03f,
+-1.881593560e-03f, -1.881505787e-03f, -1.881414768e-03f, -1.881320501e-03f, -1.881222989e-03f, -1.881122231e-03f, -1.881018227e-03f, -1.880910978e-03f, -1.880800484e-03f, -1.880686746e-03f,
+-1.880569764e-03f, -1.880449538e-03f, -1.880326068e-03f, -1.880199356e-03f, -1.880069402e-03f, -1.879936205e-03f, -1.879799767e-03f, -1.879660087e-03f, -1.879517166e-03f, -1.879371006e-03f,
+-1.879221605e-03f, -1.879068964e-03f, -1.878913085e-03f, -1.878753966e-03f, -1.878591610e-03f, -1.878426016e-03f, -1.878257184e-03f, -1.878085116e-03f, -1.877909811e-03f, -1.877731271e-03f,
+-1.877549495e-03f, -1.877364484e-03f, -1.877176239e-03f, -1.876984760e-03f, -1.876790047e-03f, -1.876592102e-03f, -1.876390924e-03f, -1.876186515e-03f, -1.875978874e-03f, -1.875768003e-03f,
+-1.875553901e-03f, -1.875336570e-03f, -1.875116010e-03f, -1.874892221e-03f, -1.874665204e-03f, -1.874434960e-03f, -1.874201488e-03f, -1.873964791e-03f, -1.873724868e-03f, -1.873481720e-03f,
+-1.873235348e-03f, -1.872985751e-03f, -1.872732931e-03f, -1.872476889e-03f, -1.872217625e-03f, -1.871955139e-03f, -1.871689433e-03f, -1.871420506e-03f, -1.871148360e-03f, -1.870872995e-03f,
+-1.870594412e-03f, -1.870312612e-03f, -1.870027594e-03f, -1.869739361e-03f, -1.869447912e-03f, -1.869153248e-03f, -1.868855369e-03f, -1.868554278e-03f, -1.868249974e-03f, -1.867942457e-03f,
+-1.867631730e-03f, -1.867317791e-03f, -1.867000643e-03f, -1.866680286e-03f, -1.866356720e-03f, -1.866029946e-03f, -1.865699966e-03f, -1.865366779e-03f, -1.865030387e-03f, -1.864690790e-03f,
+-1.864347989e-03f, -1.864001985e-03f, -1.863652778e-03f, -1.863300370e-03f, -1.862944761e-03f, -1.862585952e-03f, -1.862223944e-03f, -1.861858737e-03f, -1.861490333e-03f, -1.861118732e-03f,
+-1.860743934e-03f, -1.860365942e-03f, -1.859984755e-03f, -1.859600375e-03f, -1.859212802e-03f, -1.858822037e-03f, -1.858428081e-03f, -1.858030936e-03f, -1.857630600e-03f, -1.857227077e-03f,
+-1.856820366e-03f, -1.856410468e-03f, -1.855997385e-03f, -1.855581116e-03f, -1.855161664e-03f, -1.854739028e-03f, -1.854313211e-03f, -1.853884212e-03f, -1.853452033e-03f, -1.853016674e-03f,
+-1.852578137e-03f, -1.852136423e-03f, -1.851691531e-03f, -1.851243464e-03f, -1.850792223e-03f, -1.850337807e-03f, -1.849880219e-03f, -1.849419459e-03f, -1.848955528e-03f, -1.848488427e-03f,
+-1.848018157e-03f, -1.847544720e-03f, -1.847068115e-03f, -1.846588345e-03f, -1.846105409e-03f, -1.845619310e-03f, -1.845130047e-03f, -1.844637623e-03f, -1.844142038e-03f, -1.843643293e-03f,
+-1.843141390e-03f, -1.842636328e-03f, -1.842128110e-03f, -1.841616736e-03f, -1.841102208e-03f, -1.840584526e-03f, -1.840063692e-03f, -1.839539706e-03f, -1.839012570e-03f, -1.838482285e-03f,
+-1.837948851e-03f, -1.837412271e-03f, -1.836872545e-03f, -1.836329673e-03f, -1.835783659e-03f, -1.835234501e-03f, -1.834682202e-03f, -1.834126763e-03f, -1.833568184e-03f, -1.833006468e-03f,
+-1.832441614e-03f, -1.831873625e-03f, -1.831302501e-03f, -1.830728243e-03f, -1.830150854e-03f, -1.829570333e-03f, -1.828986682e-03f, -1.828399902e-03f, -1.827809995e-03f, -1.827216962e-03f,
+-1.826620803e-03f, -1.826021520e-03f, -1.825419115e-03f, -1.824813587e-03f, -1.824204940e-03f, -1.823593173e-03f, -1.822978289e-03f, -1.822360288e-03f, -1.821739171e-03f, -1.821114940e-03f,
+-1.820487597e-03f, -1.819857141e-03f, -1.819223576e-03f, -1.818586901e-03f, -1.817947118e-03f, -1.817304228e-03f, -1.816658234e-03f, -1.816009135e-03f, -1.815356934e-03f, -1.814701631e-03f,
+-1.814043228e-03f, -1.813381726e-03f, -1.812717127e-03f, -1.812049431e-03f, -1.811378641e-03f, -1.810704757e-03f, -1.810027781e-03f, -1.809347714e-03f, -1.808664557e-03f, -1.807978312e-03f,
+-1.807288981e-03f, -1.806596564e-03f, -1.805901063e-03f, -1.805202480e-03f, -1.804500815e-03f, -1.803796070e-03f, -1.803088246e-03f, -1.802377346e-03f, -1.801663369e-03f, -1.800946319e-03f,
+-1.800226195e-03f, -1.799503000e-03f, -1.798776734e-03f, -1.798047400e-03f, -1.797314999e-03f, -1.796579532e-03f, -1.795841001e-03f, -1.795099406e-03f, -1.794354750e-03f, -1.793607035e-03f,
+-1.792856260e-03f, -1.792102429e-03f, -1.791345541e-03f, -1.790585600e-03f, -1.789822606e-03f, -1.789056561e-03f, -1.788287466e-03f, -1.787515323e-03f, -1.786740133e-03f, -1.785961898e-03f,
+-1.785180619e-03f, -1.784396299e-03f, -1.783608937e-03f, -1.782818537e-03f, -1.782025099e-03f, -1.781228625e-03f, -1.780429116e-03f, -1.779626575e-03f, -1.778821002e-03f, -1.778012399e-03f,
+-1.777200768e-03f, -1.776386110e-03f, -1.775568428e-03f, -1.774747722e-03f, -1.773923993e-03f, -1.773097245e-03f, -1.772267477e-03f, -1.771434693e-03f, -1.770598893e-03f, -1.769760079e-03f,
+-1.768918253e-03f, -1.768073416e-03f, -1.767225570e-03f, -1.766374716e-03f, -1.765520857e-03f, -1.764663994e-03f, -1.763804128e-03f, -1.762941261e-03f, -1.762075395e-03f, -1.761206531e-03f,
+-1.760334672e-03f, -1.759459818e-03f, -1.758581972e-03f, -1.757701135e-03f, -1.756817309e-03f, -1.755930495e-03f, -1.755040696e-03f, -1.754147912e-03f, -1.753252147e-03f, -1.752353400e-03f,
+-1.751451675e-03f, -1.750546972e-03f, -1.749639294e-03f, -1.748728642e-03f, -1.747815018e-03f, -1.746898424e-03f, -1.745978862e-03f, -1.745056332e-03f, -1.744130838e-03f, -1.743202381e-03f,
+-1.742270961e-03f, -1.741336583e-03f, -1.740399246e-03f, -1.739458953e-03f, -1.738515706e-03f, -1.737569507e-03f, -1.736620356e-03f, -1.735668257e-03f, -1.734713210e-03f, -1.733755218e-03f,
+-1.732794283e-03f, -1.731830406e-03f, -1.730863589e-03f, -1.729893834e-03f, -1.728921143e-03f, -1.727945518e-03f, -1.726966960e-03f, -1.725985471e-03f, -1.725001054e-03f, -1.724013710e-03f,
+-1.723023440e-03f, -1.722030248e-03f, -1.721034134e-03f, -1.720035101e-03f, -1.719033150e-03f, -1.718028284e-03f, -1.717020504e-03f, -1.716009812e-03f, -1.714996210e-03f, -1.713979700e-03f,
+-1.712960284e-03f, -1.711937964e-03f, -1.710912742e-03f, -1.709884619e-03f, -1.708853598e-03f, -1.707819680e-03f, -1.706782868e-03f, -1.705743164e-03f, -1.704700569e-03f, -1.703655085e-03f,
+-1.702606715e-03f, -1.701555460e-03f, -1.700501322e-03f, -1.699444303e-03f, -1.698384406e-03f, -1.697321632e-03f, -1.696255983e-03f, -1.695187462e-03f, -1.694116070e-03f, -1.693041809e-03f,
+-1.691964681e-03f, -1.690884689e-03f, -1.689801834e-03f, -1.688716118e-03f, -1.687627544e-03f, -1.686536113e-03f, -1.685441828e-03f, -1.684344690e-03f, -1.683244702e-03f, -1.682141865e-03f,
+-1.681036183e-03f, -1.679927655e-03f, -1.678816286e-03f, -1.677702077e-03f, -1.676585029e-03f, -1.675465146e-03f, -1.674342429e-03f, -1.673216880e-03f, -1.672088502e-03f, -1.670957296e-03f,
+-1.669823265e-03f, -1.668686410e-03f, -1.667546734e-03f, -1.666404240e-03f, -1.665258928e-03f, -1.664110801e-03f, -1.662959862e-03f, -1.661806113e-03f, -1.660649555e-03f, -1.659490191e-03f,
+-1.658328023e-03f, -1.657163053e-03f, -1.655995283e-03f, -1.654824716e-03f, -1.653651353e-03f, -1.652475198e-03f, -1.651296251e-03f, -1.650114516e-03f, -1.648929994e-03f, -1.647742687e-03f,
+-1.646552599e-03f, -1.645359730e-03f, -1.644164084e-03f, -1.642965662e-03f, -1.641764467e-03f, -1.640560501e-03f, -1.639353766e-03f, -1.638144264e-03f, -1.636931998e-03f, -1.635716970e-03f,
+-1.634499182e-03f, -1.633278636e-03f, -1.632055336e-03f, -1.630829282e-03f, -1.629600477e-03f, -1.628368924e-03f, -1.627134624e-03f, -1.625897581e-03f, -1.624657795e-03f, -1.623415271e-03f,
+-1.622170009e-03f, -1.620922013e-03f, -1.619671284e-03f, -1.618417825e-03f, -1.617161638e-03f, -1.615902726e-03f, -1.614641090e-03f, -1.613376734e-03f, -1.612109659e-03f, -1.610839868e-03f,
+-1.609567363e-03f, -1.608292147e-03f, -1.607014221e-03f, -1.605733589e-03f, -1.604450252e-03f, -1.603164214e-03f, -1.601875475e-03f, -1.600584040e-03f, -1.599289909e-03f, -1.597993086e-03f,
+-1.596693573e-03f, -1.595391372e-03f, -1.594086485e-03f, -1.592778916e-03f, -1.591468666e-03f, -1.590155738e-03f, -1.588840135e-03f, -1.587521858e-03f, -1.586200910e-03f, -1.584877294e-03f,
+-1.583551012e-03f, -1.582222066e-03f, -1.580890459e-03f, -1.579556194e-03f, -1.578219272e-03f, -1.576879697e-03f, -1.575537470e-03f, -1.574192595e-03f, -1.572845073e-03f, -1.571494907e-03f,
+-1.570142100e-03f, -1.568786654e-03f, -1.567428572e-03f, -1.566067856e-03f, -1.564704508e-03f, -1.563338531e-03f, -1.561969928e-03f, -1.560598702e-03f, -1.559224853e-03f, -1.557848386e-03f,
+-1.556469302e-03f, -1.555087605e-03f, -1.553703296e-03f, -1.552316379e-03f, -1.550926855e-03f, -1.549534728e-03f, -1.548140000e-03f, -1.546742673e-03f, -1.545342750e-03f, -1.543940234e-03f,
+-1.542535126e-03f, -1.541127431e-03f, -1.539717150e-03f, -1.538304285e-03f, -1.536888840e-03f, -1.535470818e-03f, -1.534050219e-03f, -1.532627048e-03f, -1.531201307e-03f, -1.529772998e-03f,
+-1.528342125e-03f, -1.526908689e-03f, -1.525472693e-03f, -1.524034140e-03f, -1.522593033e-03f, -1.521149374e-03f, -1.519703165e-03f, -1.518254410e-03f, -1.516803111e-03f, -1.515349271e-03f,
+-1.513892893e-03f, -1.512433978e-03f, -1.510972530e-03f, -1.509508551e-03f, -1.508042045e-03f, -1.506573013e-03f, -1.505101459e-03f, -1.503627384e-03f, -1.502150793e-03f, -1.500671687e-03f,
+-1.499190069e-03f, -1.497705942e-03f, -1.496219308e-03f, -1.494730171e-03f, -1.493238533e-03f, -1.491744396e-03f, -1.490247764e-03f, -1.488748639e-03f, -1.487247024e-03f, -1.485742921e-03f,
+-1.484236334e-03f, -1.482727265e-03f, -1.481215716e-03f, -1.479701692e-03f, -1.478185193e-03f, -1.476666224e-03f, -1.475144787e-03f, -1.473620884e-03f, -1.472094518e-03f, -1.470565693e-03f,
+-1.469034411e-03f, -1.467500674e-03f, -1.465964486e-03f, -1.464425849e-03f, -1.462884766e-03f, -1.461341241e-03f, -1.459795274e-03f, -1.458246871e-03f, -1.456696033e-03f, -1.455142762e-03f,
+-1.453587063e-03f, -1.452028938e-03f, -1.450468389e-03f, -1.448905419e-03f, -1.447340032e-03f, -1.445772230e-03f, -1.444202016e-03f, -1.442629393e-03f, -1.441054363e-03f, -1.439476930e-03f,
+-1.437897096e-03f, -1.436314865e-03f, -1.434730238e-03f, -1.433143220e-03f, -1.431553812e-03f, -1.429962018e-03f, -1.428367841e-03f, -1.426771283e-03f, -1.425172347e-03f, -1.423571037e-03f,
+-1.421967355e-03f, -1.420361304e-03f, -1.418752887e-03f, -1.417142107e-03f, -1.415528967e-03f, -1.413913470e-03f, -1.412295618e-03f, -1.410675414e-03f, -1.409052863e-03f, -1.407427965e-03f,
+-1.405800725e-03f, -1.404171146e-03f, -1.402539229e-03f, -1.400904979e-03f, -1.399268398e-03f, -1.397629490e-03f, -1.395988256e-03f, -1.394344700e-03f, -1.392698826e-03f, -1.391050635e-03f,
+-1.389400131e-03f, -1.387747318e-03f, -1.386092197e-03f, -1.384434772e-03f, -1.382775046e-03f, -1.381113022e-03f, -1.379448703e-03f, -1.377782092e-03f, -1.376113192e-03f, -1.374442006e-03f,
+-1.372768536e-03f, -1.371092787e-03f, -1.369414761e-03f, -1.367734460e-03f, -1.366051889e-03f, -1.364367050e-03f, -1.362679946e-03f, -1.360990580e-03f, -1.359298955e-03f, -1.357605075e-03f,
+-1.355908942e-03f, -1.354210559e-03f, -1.352509930e-03f, -1.350807057e-03f, -1.349101944e-03f, -1.347394593e-03f, -1.345685009e-03f, -1.343973193e-03f, -1.342259148e-03f, -1.340542879e-03f,
+-1.338824388e-03f, -1.337103678e-03f, -1.335380752e-03f, -1.333655613e-03f, -1.331928265e-03f, -1.330198711e-03f, -1.328466953e-03f, -1.326732995e-03f, -1.324996840e-03f, -1.323258490e-03f,
+-1.321517950e-03f, -1.319775223e-03f, -1.318030310e-03f, -1.316283216e-03f, -1.314533944e-03f, -1.312782497e-03f, -1.311028878e-03f, -1.309273089e-03f, -1.307515135e-03f, -1.305755019e-03f,
+-1.303992743e-03f, -1.302228311e-03f, -1.300461726e-03f, -1.298692990e-03f, -1.296922109e-03f, -1.295149083e-03f, -1.293373917e-03f, -1.291596615e-03f, -1.289817178e-03f, -1.288035610e-03f,
+-1.286251915e-03f, -1.284466095e-03f, -1.282678154e-03f, -1.280888095e-03f, -1.279095922e-03f, -1.277301637e-03f, -1.275505243e-03f, -1.273706745e-03f, -1.271906144e-03f, -1.270103445e-03f,
+-1.268298651e-03f, -1.266491764e-03f, -1.264682788e-03f, -1.262871727e-03f, -1.261058583e-03f, -1.259243360e-03f, -1.257426061e-03f, -1.255606689e-03f, -1.253785248e-03f, -1.251961741e-03f,
+-1.250136171e-03f, -1.248308541e-03f, -1.246478855e-03f, -1.244647115e-03f, -1.242813326e-03f, -1.240977490e-03f, -1.239139611e-03f, -1.237299692e-03f, -1.235457737e-03f, -1.233613748e-03f,
+-1.231767729e-03f, -1.229919683e-03f, -1.228069614e-03f, -1.226217525e-03f, -1.224363418e-03f, -1.222507299e-03f, -1.220649169e-03f, -1.218789032e-03f, -1.216926891e-03f, -1.215062751e-03f,
+-1.213196613e-03f, -1.211328482e-03f, -1.209458361e-03f, -1.207586253e-03f, -1.205712161e-03f, -1.203836089e-03f, -1.201958041e-03f, -1.200078019e-03f, -1.198196026e-03f, -1.196312067e-03f,
+-1.194426145e-03f, -1.192538263e-03f, -1.190648424e-03f, -1.188756631e-03f, -1.186862889e-03f, -1.184967201e-03f, -1.183069569e-03f, -1.181169997e-03f, -1.179268489e-03f, -1.177365048e-03f,
+-1.175459678e-03f, -1.173552381e-03f, -1.171643162e-03f, -1.169732023e-03f, -1.167818969e-03f, -1.165904002e-03f, -1.163987126e-03f, -1.162068344e-03f, -1.160147659e-03f, -1.158225076e-03f,
+-1.156300598e-03f, -1.154374228e-03f, -1.152445969e-03f, -1.150515825e-03f, -1.148583799e-03f, -1.146649895e-03f, -1.144714116e-03f, -1.142776466e-03f, -1.140836948e-03f, -1.138895566e-03f,
+-1.136952322e-03f, -1.135007222e-03f, -1.133060267e-03f, -1.131111461e-03f, -1.129160809e-03f, -1.127208313e-03f, -1.125253976e-03f, -1.123297803e-03f, -1.121339797e-03f, -1.119379961e-03f,
+-1.117418299e-03f, -1.115454814e-03f, -1.113489510e-03f, -1.111522391e-03f, -1.109553459e-03f, -1.107582718e-03f, -1.105610172e-03f, -1.103635824e-03f, -1.101659679e-03f, -1.099681738e-03f,
+-1.097702007e-03f, -1.095720487e-03f, -1.093737184e-03f, -1.091752100e-03f, -1.089765239e-03f, -1.087776604e-03f, -1.085786200e-03f, -1.083794029e-03f, -1.081800095e-03f, -1.079804402e-03f,
+-1.077806952e-03f, -1.075807751e-03f, -1.073806801e-03f, -1.071804106e-03f, -1.069799669e-03f, -1.067793494e-03f, -1.065785585e-03f, -1.063775944e-03f, -1.061764577e-03f, -1.059751485e-03f,
+-1.057736674e-03f, -1.055720145e-03f, -1.053701904e-03f, -1.051681954e-03f, -1.049660297e-03f, -1.047636938e-03f, -1.045611881e-03f, -1.043585128e-03f, -1.041556684e-03f, -1.039526552e-03f,
+-1.037494735e-03f, -1.035461238e-03f, -1.033426064e-03f, -1.031389217e-03f, -1.029350699e-03f, -1.027310516e-03f, -1.025268669e-03f, -1.023225164e-03f, -1.021180003e-03f, -1.019133191e-03f,
+-1.017084730e-03f, -1.015034625e-03f, -1.012982879e-03f, -1.010929496e-03f, -1.008874480e-03f, -1.006817833e-03f, -1.004759560e-03f, -1.002699665e-03f, -1.000638150e-03f, -9.985750201e-04f,
+-9.965102785e-04f, -9.944439289e-04f, -9.923759749e-04f, -9.903064202e-04f, -9.882352685e-04f, -9.861625235e-04f, -9.840881887e-04f, -9.820122679e-04f, -9.799347647e-04f, -9.778556829e-04f,
+-9.757750261e-04f, -9.736927980e-04f, -9.716090023e-04f, -9.695236426e-04f, -9.674367227e-04f, -9.653482463e-04f, -9.632582170e-04f, -9.611666385e-04f, -9.590735146e-04f, -9.569788490e-04f,
+-9.548826453e-04f, -9.527849073e-04f, -9.506856386e-04f, -9.485848431e-04f, -9.464825244e-04f, -9.443786861e-04f, -9.422733322e-04f, -9.401664662e-04f, -9.380580919e-04f, -9.359482130e-04f,
+-9.338368333e-04f, -9.317239564e-04f, -9.296095862e-04f, -9.274937263e-04f, -9.253763806e-04f, -9.232575526e-04f, -9.211372463e-04f, -9.190154653e-04f, -9.168922133e-04f, -9.147674942e-04f,
+-9.126413117e-04f, -9.105136695e-04f, -9.083845714e-04f, -9.062540212e-04f, -9.041220226e-04f, -9.019885794e-04f, -8.998536953e-04f, -8.977173742e-04f, -8.955796197e-04f, -8.934404358e-04f,
+-8.912998261e-04f, -8.891577944e-04f, -8.870143445e-04f, -8.848694802e-04f, -8.827232053e-04f, -8.805755236e-04f, -8.784264388e-04f, -8.762759547e-04f, -8.741240752e-04f, -8.719708041e-04f,
+-8.698161451e-04f, -8.676601020e-04f, -8.655026787e-04f, -8.633438789e-04f, -8.611837064e-04f, -8.590221652e-04f, -8.568592589e-04f, -8.546949914e-04f, -8.525293665e-04f, -8.503623880e-04f,
+-8.481940598e-04f, -8.460243857e-04f, -8.438533694e-04f, -8.416810149e-04f, -8.395073259e-04f, -8.373323063e-04f, -8.351559600e-04f, -8.329782906e-04f, -8.307993022e-04f, -8.286189985e-04f,
+-8.264373833e-04f, -8.242544606e-04f, -8.220702341e-04f, -8.198847077e-04f, -8.176978853e-04f, -8.155097707e-04f, -8.133203678e-04f, -8.111296803e-04f, -8.089377123e-04f, -8.067444674e-04f,
+-8.045499497e-04f, -8.023541629e-04f, -8.001571110e-04f, -7.979587977e-04f, -7.957592270e-04f, -7.935584027e-04f, -7.913563288e-04f, -7.891530090e-04f, -7.869484473e-04f, -7.847426475e-04f,
+-7.825356135e-04f, -7.803273492e-04f, -7.781178586e-04f, -7.759071454e-04f, -7.736952135e-04f, -7.714820670e-04f, -7.692677095e-04f, -7.670521451e-04f, -7.648353777e-04f, -7.626174111e-04f,
+-7.603982492e-04f, -7.581778959e-04f, -7.559563552e-04f, -7.537336310e-04f, -7.515097271e-04f, -7.492846475e-04f, -7.470583960e-04f, -7.448309766e-04f, -7.426023933e-04f, -7.403726498e-04f,
+-7.381417502e-04f, -7.359096984e-04f, -7.336764982e-04f, -7.314421537e-04f, -7.292066686e-04f, -7.269700471e-04f, -7.247322929e-04f, -7.224934100e-04f, -7.202534024e-04f, -7.180122740e-04f,
+-7.157700286e-04f, -7.135266704e-04f, -7.112822031e-04f, -7.090366308e-04f, -7.067899573e-04f, -7.045421867e-04f, -7.022933228e-04f, -7.000433697e-04f, -6.977923312e-04f, -6.955402114e-04f,
+-6.932870141e-04f, -6.910327433e-04f, -6.887774030e-04f, -6.865209972e-04f, -6.842635298e-04f, -6.820050047e-04f, -6.797454259e-04f, -6.774847974e-04f, -6.752231232e-04f, -6.729604072e-04f,
+-6.706966534e-04f, -6.684318657e-04f, -6.661660481e-04f, -6.638992047e-04f, -6.616313393e-04f, -6.593624560e-04f, -6.570925587e-04f, -6.548216515e-04f, -6.525497382e-04f, -6.502768229e-04f,
+-6.480029096e-04f, -6.457280022e-04f, -6.434521047e-04f, -6.411752212e-04f, -6.388973555e-04f, -6.366185118e-04f, -6.343386940e-04f, -6.320579060e-04f, -6.297761520e-04f, -6.274934358e-04f,
+-6.252097615e-04f, -6.229251331e-04f, -6.206395546e-04f, -6.183530300e-04f, -6.160655633e-04f, -6.137771584e-04f, -6.114878195e-04f, -6.091975505e-04f, -6.069063554e-04f, -6.046142383e-04f,
+-6.023212031e-04f, -6.000272538e-04f, -5.977323946e-04f, -5.954366293e-04f, -5.931399621e-04f, -5.908423969e-04f, -5.885439378e-04f, -5.862445887e-04f, -5.839443537e-04f, -5.816432369e-04f,
+-5.793412422e-04f, -5.770383737e-04f, -5.747346355e-04f, -5.724300314e-04f, -5.701245656e-04f, -5.678182422e-04f, -5.655110651e-04f, -5.632030383e-04f, -5.608941660e-04f, -5.585844521e-04f,
+-5.562739007e-04f, -5.539625158e-04f, -5.516503015e-04f, -5.493372618e-04f, -5.470234008e-04f, -5.447087224e-04f, -5.423932308e-04f, -5.400769300e-04f, -5.377598241e-04f, -5.354419170e-04f,
+-5.331232129e-04f, -5.308037158e-04f, -5.284834297e-04f, -5.261623587e-04f, -5.238405069e-04f, -5.215178783e-04f, -5.191944770e-04f, -5.168703070e-04f, -5.145453724e-04f, -5.122196773e-04f,
+-5.098932256e-04f, -5.075660216e-04f, -5.052380692e-04f, -5.029093725e-04f, -5.005799355e-04f, -4.982497624e-04f, -4.959188573e-04f, -4.935872241e-04f, -4.912548669e-04f, -4.889217899e-04f,
+-4.865879970e-04f, -4.842534925e-04f, -4.819182802e-04f, -4.795823644e-04f, -4.772457491e-04f, -4.749084384e-04f, -4.725704363e-04f, -4.702317469e-04f, -4.678923744e-04f, -4.655523227e-04f,
+-4.632115960e-04f, -4.608701984e-04f, -4.585281339e-04f, -4.561854066e-04f, -4.538420207e-04f, -4.514979802e-04f, -4.491532891e-04f, -4.468079516e-04f, -4.444619718e-04f, -4.421153538e-04f,
+-4.397681016e-04f, -4.374202193e-04f, -4.350717111e-04f, -4.327225810e-04f, -4.303728331e-04f, -4.280224715e-04f, -4.256715004e-04f, -4.233199238e-04f, -4.209677458e-04f, -4.186149705e-04f,
+-4.162616020e-04f, -4.139076444e-04f, -4.115531018e-04f, -4.091979784e-04f, -4.068422781e-04f, -4.044860052e-04f, -4.021291637e-04f, -3.997717578e-04f, -3.974137915e-04f, -3.950552689e-04f,
+-3.926961942e-04f, -3.903365714e-04f, -3.879764047e-04f, -3.856156982e-04f, -3.832544560e-04f, -3.808926822e-04f, -3.785303809e-04f, -3.761675562e-04f, -3.738042122e-04f, -3.714403531e-04f,
+-3.690759830e-04f, -3.667111060e-04f, -3.643457261e-04f, -3.619798476e-04f, -3.596134745e-04f, -3.572466109e-04f, -3.548792611e-04f, -3.525114290e-04f, -3.501431188e-04f, -3.477743346e-04f,
+-3.454050806e-04f, -3.430353608e-04f, -3.406651795e-04f, -3.382945406e-04f, -3.359234484e-04f, -3.335519069e-04f, -3.311799203e-04f, -3.288074928e-04f, -3.264346283e-04f, -3.240613312e-04f,
+-3.216876054e-04f, -3.193134551e-04f, -3.169388844e-04f, -3.145638975e-04f, -3.121884986e-04f, -3.098126916e-04f, -3.074364808e-04f, -3.050598703e-04f, -3.026828641e-04f, -3.003054666e-04f,
+-2.979276817e-04f, -2.955495136e-04f, -2.931709664e-04f, -2.907920443e-04f, -2.884127514e-04f, -2.860330919e-04f, -2.836530698e-04f, -2.812726893e-04f, -2.788919546e-04f, -2.765108697e-04f,
+-2.741294389e-04f, -2.717476661e-04f, -2.693655557e-04f, -2.669831117e-04f, -2.646003382e-04f, -2.622172394e-04f, -2.598338195e-04f, -2.574500825e-04f, -2.550660326e-04f, -2.526816739e-04f,
+-2.502970106e-04f, -2.479120469e-04f, -2.455267868e-04f, -2.431412345e-04f, -2.407553941e-04f, -2.383692698e-04f, -2.359828657e-04f, -2.335961860e-04f, -2.312092347e-04f, -2.288220161e-04f,
+-2.264345343e-04f, -2.240467934e-04f, -2.216587975e-04f, -2.192705509e-04f, -2.168820576e-04f, -2.144933218e-04f, -2.121043476e-04f, -2.097151392e-04f, -2.073257007e-04f, -2.049360363e-04f,
+-2.025461501e-04f, -2.001560462e-04f, -1.977657288e-04f, -1.953752020e-04f, -1.929844700e-04f, -1.905935369e-04f, -1.882024069e-04f, -1.858110841e-04f, -1.834195726e-04f, -1.810278766e-04f,
+-1.786360003e-04f, -1.762439478e-04f, -1.738517231e-04f, -1.714593306e-04f, -1.690667743e-04f, -1.666740583e-04f, -1.642811868e-04f, -1.618881640e-04f, -1.594949940e-04f, -1.571016809e-04f,
+-1.547082289e-04f, -1.523146422e-04f, -1.499209248e-04f, -1.475270809e-04f, -1.451331147e-04f, -1.427390303e-04f, -1.403448319e-04f, -1.379505235e-04f, -1.355561094e-04f, -1.331615937e-04f,
+-1.307669805e-04f, -1.283722740e-04f, -1.259774784e-04f, -1.235825976e-04f, -1.211876360e-04f, -1.187925977e-04f, -1.163974867e-04f, -1.140023073e-04f, -1.116070636e-04f, -1.092117597e-04f,
+-1.068163998e-04f, -1.044209880e-04f, -1.020255284e-04f, -9.963002529e-05f, -9.723448270e-05f, -9.483890479e-05f, -9.244329572e-05f, -9.004765963e-05f, -8.765200065e-05f, -8.525632293e-05f,
+-8.286063061e-05f, -8.046492784e-05f, -7.806921875e-05f, -7.567350749e-05f, -7.327779819e-05f, -7.088209501e-05f, -6.848640207e-05f, -6.609072352e-05f, -6.369506351e-05f, -6.129942616e-05f,
+-5.890381562e-05f, -5.650823603e-05f, -5.411269153e-05f, -5.171718625e-05f, -4.932172434e-05f, -4.692630993e-05f, -4.453094717e-05f, -4.213564018e-05f, -3.974039311e-05f, -3.734521009e-05f,
+-3.495009526e-05f, -3.255505275e-05f, -3.016008671e-05f, -2.776520126e-05f, -2.537040055e-05f, -2.297568870e-05f, -2.058106985e-05f, -1.818654814e-05f, -1.579212769e-05f, -1.339781265e-05f,
+-1.100360715e-05f, -8.609515306e-06f, -6.215541265e-06f, -3.821689154e-06f, -1.427963105e-06f, 9.656327529e-07f, 3.359094288e-06f, 5.752417372e-06f, 8.145597874e-06f, 1.053863167e-05f,
+1.293151462e-05f, 1.532424261e-05f, 1.771681151e-05f, 2.010921718e-05f, 2.250145551e-05f, 2.489352237e-05f, 2.728541363e-05f, 2.967712517e-05f, 3.206865286e-05f, 3.445999258e-05f,
+3.685114022e-05f, 3.924209163e-05f, 4.163284271e-05f, 4.402338933e-05f, 4.641372737e-05f, 4.880385271e-05f, 5.119376124e-05f, 5.358344882e-05f, 5.597291135e-05f, 5.836214470e-05f,
+6.075114477e-05f, 6.313990743e-05f, 6.552842856e-05f, 6.791670405e-05f, 7.030472979e-05f, 7.269250167e-05f, 7.508001556e-05f, 7.746726736e-05f, 7.985425296e-05f, 8.224096824e-05f,
+8.462740909e-05f, 8.701357141e-05f, 8.939945108e-05f, 9.178504400e-05f, 9.417034606e-05f, 9.655535315e-05f, 9.894006116e-05f, 1.013244660e-04f, 1.037085635e-04f, 1.060923497e-04f,
+1.084758204e-04f, 1.108589715e-04f, 1.132417988e-04f, 1.156242984e-04f, 1.180064661e-04f, 1.203882978e-04f, 1.227697894e-04f, 1.251509368e-04f, 1.275317359e-04f, 1.299121827e-04f,
+1.322922729e-04f, 1.346720026e-04f, 1.370513676e-04f, 1.394303639e-04f, 1.418089873e-04f, 1.441872337e-04f, 1.465650992e-04f, 1.489425795e-04f, 1.513196706e-04f, 1.536963684e-04f,
+1.560726688e-04f, 1.584485678e-04f, 1.608240612e-04f, 1.631991449e-04f, 1.655738150e-04f, 1.679480672e-04f, 1.703218976e-04f, 1.726953020e-04f, 1.750682763e-04f, 1.774408166e-04f,
+1.798129186e-04f, 1.821845784e-04f, 1.845557918e-04f, 1.869265548e-04f, 1.892968633e-04f, 1.916667133e-04f, 1.940361006e-04f, 1.964050212e-04f, 1.987734711e-04f, 2.011414461e-04f,
+2.035089421e-04f, 2.058759553e-04f, 2.082424813e-04f, 2.106085163e-04f, 2.129740561e-04f, 2.153390967e-04f, 2.177036340e-04f, 2.200676639e-04f, 2.224311825e-04f, 2.247941855e-04f,
+2.271566691e-04f, 2.295186291e-04f, 2.318800614e-04f, 2.342409621e-04f, 2.366013271e-04f, 2.389611523e-04f, 2.413204336e-04f, 2.436791671e-04f, 2.460373486e-04f, 2.483949742e-04f,
+2.507520398e-04f, 2.531085413e-04f, 2.554644747e-04f, 2.578198359e-04f, 2.601746210e-04f, 2.625288259e-04f, 2.648824465e-04f, 2.672354788e-04f, 2.695879188e-04f, 2.719397625e-04f,
+2.742910057e-04f, 2.766416446e-04f, 2.789916749e-04f, 2.813410928e-04f, 2.836898942e-04f, 2.860380751e-04f, 2.883856314e-04f, 2.907325591e-04f, 2.930788543e-04f, 2.954245128e-04f,
+2.977695306e-04f, 3.001139038e-04f, 3.024576283e-04f, 3.048007002e-04f, 3.071431153e-04f, 3.094848697e-04f, 3.118259594e-04f, 3.141663803e-04f, 3.165061285e-04f, 3.188452000e-04f,
+3.211835907e-04f, 3.235212966e-04f, 3.258583138e-04f, 3.281946381e-04f, 3.305302658e-04f, 3.328651926e-04f, 3.351994147e-04f, 3.375329280e-04f, 3.398657286e-04f, 3.421978125e-04f,
+3.445291756e-04f, 3.468598139e-04f, 3.491897236e-04f, 3.515189005e-04f, 3.538473408e-04f, 3.561750404e-04f, 3.585019953e-04f, 3.608282016e-04f, 3.631536553e-04f, 3.654783524e-04f,
+3.678022890e-04f, 3.701254610e-04f, 3.724478644e-04f, 3.747694954e-04f, 3.770903499e-04f, 3.794104240e-04f, 3.817297137e-04f, 3.840482151e-04f, 3.863659241e-04f, 3.886828369e-04f,
+3.909989494e-04f, 3.933142576e-04f, 3.956287578e-04f, 3.979424458e-04f, 4.002553177e-04f, 4.025673696e-04f, 4.048785975e-04f, 4.071889976e-04f, 4.094985657e-04f, 4.118072980e-04f,
+4.141151906e-04f, 4.164222394e-04f, 4.187284406e-04f, 4.210337902e-04f, 4.233382843e-04f, 4.256419189e-04f, 4.279446902e-04f, 4.302465941e-04f, 4.325476267e-04f, 4.348477842e-04f,
+4.371470626e-04f, 4.394454579e-04f, 4.417429662e-04f, 4.440395837e-04f, 4.463353064e-04f, 4.486301303e-04f, 4.509240516e-04f, 4.532170663e-04f, 4.555091706e-04f, 4.578003605e-04f,
+4.600906321e-04f, 4.623799815e-04f, 4.646684048e-04f, 4.669558981e-04f, 4.692424575e-04f, 4.715280790e-04f, 4.738127589e-04f, 4.760964931e-04f, 4.783792779e-04f, 4.806611092e-04f,
+4.829419833e-04f, 4.852218962e-04f, 4.875008440e-04f, 4.897788229e-04f, 4.920558290e-04f, 4.943318583e-04f, 4.966069070e-04f, 4.988809713e-04f, 5.011540472e-04f, 5.034261309e-04f,
+5.056972185e-04f, 5.079673061e-04f, 5.102363899e-04f, 5.125044660e-04f, 5.147715306e-04f, 5.170375797e-04f, 5.193026095e-04f, 5.215666162e-04f, 5.238295958e-04f, 5.260915446e-04f,
+5.283524587e-04f, 5.306123343e-04f, 5.328711674e-04f, 5.351289543e-04f, 5.373856910e-04f, 5.396413739e-04f, 5.418959989e-04f, 5.441495623e-04f, 5.464020603e-04f, 5.486534890e-04f,
+5.509038445e-04f, 5.531531231e-04f, 5.554013209e-04f, 5.576484341e-04f, 5.598944588e-04f, 5.621393913e-04f, 5.643832277e-04f, 5.666259643e-04f, 5.688675971e-04f, 5.711081224e-04f,
+5.733475364e-04f, 5.755858352e-04f, 5.778230150e-04f, 5.800590722e-04f, 5.822940027e-04f, 5.845278029e-04f, 5.867604689e-04f, 5.889919970e-04f, 5.912223834e-04f, 5.934516242e-04f,
+5.956797156e-04f, 5.979066540e-04f, 6.001324354e-04f, 6.023570562e-04f, 6.045805125e-04f, 6.068028006e-04f, 6.090239166e-04f, 6.112438568e-04f, 6.134626175e-04f, 6.156801948e-04f,
+6.178965850e-04f, 6.201117844e-04f, 6.223257891e-04f, 6.245385955e-04f, 6.267501996e-04f, 6.289605979e-04f, 6.311697865e-04f, 6.333777617e-04f, 6.355845197e-04f, 6.377900569e-04f,
+6.399943693e-04f, 6.421974534e-04f, 6.443993053e-04f, 6.465999214e-04f, 6.487992979e-04f, 6.509974310e-04f, 6.531943170e-04f, 6.553899522e-04f, 6.575843330e-04f, 6.597774554e-04f,
+6.619693159e-04f, 6.641599107e-04f, 6.663492361e-04f, 6.685372884e-04f, 6.707240638e-04f, 6.729095587e-04f, 6.750937694e-04f, 6.772766921e-04f, 6.794583231e-04f, 6.816386589e-04f,
+6.838176955e-04f, 6.859954294e-04f, 6.881718569e-04f, 6.903469742e-04f, 6.925207778e-04f, 6.946932638e-04f, 6.968644287e-04f, 6.990342687e-04f, 7.012027802e-04f, 7.033699594e-04f,
+7.055358028e-04f, 7.077003066e-04f, 7.098634672e-04f, 7.120252810e-04f, 7.141857441e-04f, 7.163448531e-04f, 7.185026042e-04f, 7.206589938e-04f, 7.228140183e-04f, 7.249676739e-04f,
+7.271199570e-04f, 7.292708641e-04f, 7.314203914e-04f, 7.335685353e-04f, 7.357152922e-04f, 7.378606584e-04f, 7.400046303e-04f, 7.421472044e-04f, 7.442883768e-04f, 7.464281441e-04f,
+7.485665027e-04f, 7.507034488e-04f, 7.528389789e-04f, 7.549730893e-04f, 7.571057765e-04f, 7.592370369e-04f, 7.613668668e-04f, 7.634952627e-04f, 7.656222209e-04f, 7.677477378e-04f,
+7.698718099e-04f, 7.719944336e-04f, 7.741156052e-04f, 7.762353212e-04f, 7.783535780e-04f, 7.804703720e-04f, 7.825856997e-04f, 7.846995575e-04f, 7.868119417e-04f, 7.889228489e-04f,
+7.910322754e-04f, 7.931402178e-04f, 7.952466724e-04f, 7.973516356e-04f, 7.994551040e-04f, 8.015570739e-04f, 8.036575419e-04f, 8.057565043e-04f, 8.078539577e-04f, 8.099498984e-04f,
+8.120443230e-04f, 8.141372279e-04f, 8.162286096e-04f, 8.183184645e-04f, 8.204067891e-04f, 8.224935800e-04f, 8.245788335e-04f, 8.266625461e-04f, 8.287447144e-04f, 8.308253348e-04f,
+8.329044039e-04f, 8.349819180e-04f, 8.370578737e-04f, 8.391322676e-04f, 8.412050960e-04f, 8.432763555e-04f, 8.453460427e-04f, 8.474141540e-04f, 8.494806859e-04f, 8.515456349e-04f,
+8.536089976e-04f, 8.556707706e-04f, 8.577309502e-04f, 8.597895330e-04f, 8.618465157e-04f, 8.639018946e-04f, 8.659556664e-04f, 8.680078275e-04f, 8.700583746e-04f, 8.721073042e-04f,
+8.741546127e-04f, 8.762002969e-04f, 8.782443531e-04f, 8.802867780e-04f, 8.823275682e-04f, 8.843667202e-04f, 8.864042305e-04f, 8.884400958e-04f, 8.904743126e-04f, 8.925068774e-04f,
+8.945377869e-04f, 8.965670377e-04f, 8.985946263e-04f, 9.006205493e-04f, 9.026448034e-04f, 9.046673850e-04f, 9.066882908e-04f, 9.087075174e-04f, 9.107250614e-04f, 9.127409194e-04f,
+9.147550881e-04f, 9.167675639e-04f, 9.187783437e-04f, 9.207874238e-04f, 9.227948011e-04f, 9.248004720e-04f, 9.268044333e-04f, 9.288066816e-04f, 9.308072134e-04f, 9.328060255e-04f,
+9.348031145e-04f, 9.367984770e-04f, 9.387921097e-04f, 9.407840092e-04f, 9.427741721e-04f, 9.447625952e-04f, 9.467492751e-04f, 9.487342084e-04f, 9.507173919e-04f, 9.526988221e-04f,
+9.546784958e-04f, 9.566564096e-04f, 9.586325602e-04f, 9.606069444e-04f, 9.625795587e-04f, 9.645503999e-04f, 9.665194646e-04f, 9.684867496e-04f, 9.704522515e-04f, 9.724159671e-04f,
+9.743778931e-04f, 9.763380261e-04f, 9.782963629e-04f, 9.802529003e-04f, 9.822076348e-04f, 9.841605632e-04f, 9.861116823e-04f, 9.880609888e-04f, 9.900084794e-04f, 9.919541509e-04f,
+9.938980000e-04f, 9.958400234e-04f, 9.977802178e-04f, 9.997185801e-04f, 1.001655107e-03f, 1.003589795e-03f, 1.005522641e-03f, 1.007453643e-03f, 1.009382795e-03f, 1.011310096e-03f,
+1.013235543e-03f, 1.015159131e-03f, 1.017080858e-03f, 1.019000720e-03f, 1.020918715e-03f, 1.022834839e-03f, 1.024749088e-03f, 1.026661460e-03f, 1.028571952e-03f, 1.030480560e-03f,
+1.032387281e-03f, 1.034292112e-03f, 1.036195049e-03f, 1.038096090e-03f, 1.039995232e-03f, 1.041892470e-03f, 1.043787803e-03f, 1.045681226e-03f, 1.047572737e-03f, 1.049462332e-03f,
+1.051350009e-03f, 1.053235763e-03f, 1.055119593e-03f, 1.057001495e-03f, 1.058881465e-03f, 1.060759501e-03f, 1.062635599e-03f, 1.064509756e-03f, 1.066381970e-03f, 1.068252237e-03f,
+1.070120553e-03f, 1.071986917e-03f, 1.073851324e-03f, 1.075713771e-03f, 1.077574256e-03f, 1.079432775e-03f, 1.081289326e-03f, 1.083143905e-03f, 1.084996508e-03f, 1.086847134e-03f,
+1.088695778e-03f, 1.090542438e-03f, 1.092387111e-03f, 1.094229794e-03f, 1.096070483e-03f, 1.097909175e-03f, 1.099745868e-03f, 1.101580558e-03f, 1.103413243e-03f, 1.105243918e-03f,
+1.107072582e-03f, 1.108899231e-03f, 1.110723862e-03f, 1.112546472e-03f, 1.114367058e-03f, 1.116185616e-03f, 1.118002145e-03f, 1.119816641e-03f, 1.121629100e-03f, 1.123439521e-03f,
+1.125247899e-03f, 1.127054232e-03f, 1.128858517e-03f, 1.130660750e-03f, 1.132460930e-03f, 1.134259052e-03f, 1.136055114e-03f, 1.137849113e-03f, 1.139641045e-03f, 1.141430909e-03f,
+1.143218700e-03f, 1.145004417e-03f, 1.146788055e-03f, 1.148569612e-03f, 1.150349085e-03f, 1.152126471e-03f, 1.153901767e-03f, 1.155674971e-03f, 1.157446078e-03f, 1.159215087e-03f,
+1.160981994e-03f, 1.162746797e-03f, 1.164509491e-03f, 1.166270076e-03f, 1.168028547e-03f, 1.169784901e-03f, 1.171539136e-03f, 1.173291249e-03f, 1.175041237e-03f, 1.176789097e-03f,
+1.178534826e-03f, 1.180278421e-03f, 1.182019880e-03f, 1.183759199e-03f, 1.185496375e-03f, 1.187231406e-03f, 1.188964289e-03f, 1.190695020e-03f, 1.192423598e-03f, 1.194150019e-03f,
+1.195874280e-03f, 1.197596378e-03f, 1.199316311e-03f, 1.201034076e-03f, 1.202749669e-03f, 1.204463089e-03f, 1.206174332e-03f, 1.207883395e-03f, 1.209590275e-03f, 1.211294970e-03f,
+1.212997477e-03f, 1.214697793e-03f, 1.216395915e-03f, 1.218091841e-03f, 1.219785567e-03f, 1.221477091e-03f, 1.223166410e-03f, 1.224853521e-03f, 1.226538422e-03f, 1.228221109e-03f,
+1.229901580e-03f, 1.231579831e-03f, 1.233255862e-03f, 1.234929667e-03f, 1.236601246e-03f, 1.238270594e-03f, 1.239937709e-03f, 1.241602589e-03f, 1.243265231e-03f, 1.244925631e-03f,
+1.246583787e-03f, 1.248239697e-03f, 1.249893358e-03f, 1.251544767e-03f, 1.253193921e-03f, 1.254840817e-03f, 1.256485453e-03f, 1.258127826e-03f, 1.259767934e-03f, 1.261405773e-03f,
+1.263041341e-03f, 1.264674636e-03f, 1.266305654e-03f, 1.267934392e-03f, 1.269560849e-03f, 1.271185022e-03f, 1.272806907e-03f, 1.274426502e-03f, 1.276043805e-03f, 1.277658812e-03f,
+1.279271522e-03f, 1.280881931e-03f, 1.282490037e-03f, 1.284095837e-03f, 1.285699328e-03f, 1.287300508e-03f, 1.288899375e-03f, 1.290495925e-03f, 1.292090156e-03f, 1.293682066e-03f,
+1.295271651e-03f, 1.296858909e-03f, 1.298443837e-03f, 1.300026434e-03f, 1.301606696e-03f, 1.303184620e-03f, 1.304760204e-03f, 1.306333446e-03f, 1.307904343e-03f, 1.309472892e-03f,
+1.311039091e-03f, 1.312602937e-03f, 1.314164427e-03f, 1.315723559e-03f, 1.317280331e-03f, 1.318834740e-03f, 1.320386783e-03f, 1.321936457e-03f, 1.323483761e-03f, 1.325028692e-03f,
+1.326571247e-03f, 1.328111423e-03f, 1.329649218e-03f, 1.331184630e-03f, 1.332717656e-03f, 1.334248293e-03f, 1.335776540e-03f, 1.337302393e-03f, 1.338825849e-03f, 1.340346908e-03f,
+1.341865565e-03f, 1.343381819e-03f, 1.344895666e-03f, 1.346407106e-03f, 1.347916134e-03f, 1.349422749e-03f, 1.350926947e-03f, 1.352428728e-03f, 1.353928088e-03f, 1.355425024e-03f,
+1.356919535e-03f, 1.358411617e-03f, 1.359901269e-03f, 1.361388488e-03f, 1.362873271e-03f, 1.364355616e-03f, 1.365835521e-03f, 1.367312983e-03f, 1.368788000e-03f, 1.370260569e-03f,
+1.371730688e-03f, 1.373198355e-03f, 1.374663567e-03f, 1.376126321e-03f, 1.377586616e-03f, 1.379044449e-03f, 1.380499818e-03f, 1.381952720e-03f, 1.383403153e-03f, 1.384851114e-03f,
+1.386296601e-03f, 1.387739612e-03f, 1.389180144e-03f, 1.390618196e-03f, 1.392053764e-03f, 1.393486846e-03f, 1.394917441e-03f, 1.396345545e-03f, 1.397771156e-03f, 1.399194273e-03f,
+1.400614892e-03f, 1.402033011e-03f, 1.403448629e-03f, 1.404861742e-03f, 1.406272349e-03f, 1.407680447e-03f, 1.409086034e-03f, 1.410489108e-03f, 1.411889665e-03f, 1.413287705e-03f,
+1.414683224e-03f, 1.416076221e-03f, 1.417466693e-03f, 1.418854638e-03f, 1.420240054e-03f, 1.421622938e-03f, 1.423003288e-03f, 1.424381103e-03f, 1.425756379e-03f, 1.427129114e-03f,
+1.428499306e-03f, 1.429866954e-03f, 1.431232054e-03f, 1.432594605e-03f, 1.433954604e-03f, 1.435312049e-03f, 1.436666938e-03f, 1.438019269e-03f, 1.439369040e-03f, 1.440716248e-03f,
+1.442060890e-03f, 1.443402966e-03f, 1.444742473e-03f, 1.446079408e-03f, 1.447413770e-03f, 1.448745556e-03f, 1.450074764e-03f, 1.451401392e-03f, 1.452725438e-03f, 1.454046899e-03f,
+1.455365774e-03f, 1.456682061e-03f, 1.457995757e-03f, 1.459306859e-03f, 1.460615367e-03f, 1.461921278e-03f, 1.463224590e-03f, 1.464525300e-03f, 1.465823407e-03f, 1.467118908e-03f,
+1.468411802e-03f, 1.469702086e-03f, 1.470989758e-03f, 1.472274816e-03f, 1.473557259e-03f, 1.474837083e-03f, 1.476114287e-03f, 1.477388869e-03f, 1.478660827e-03f, 1.479930159e-03f,
+1.481196862e-03f, 1.482460935e-03f, 1.483722376e-03f, 1.484981182e-03f, 1.486237352e-03f, 1.487490883e-03f, 1.488741773e-03f, 1.489990022e-03f, 1.491235625e-03f, 1.492478582e-03f,
+1.493718891e-03f, 1.494956549e-03f, 1.496191555e-03f, 1.497423906e-03f, 1.498653600e-03f, 1.499880636e-03f, 1.501105012e-03f, 1.502326725e-03f, 1.503545774e-03f, 1.504762157e-03f,
+1.505975871e-03f, 1.507186915e-03f, 1.508395287e-03f, 1.509600984e-03f, 1.510804006e-03f, 1.512004350e-03f, 1.513202013e-03f, 1.514396995e-03f, 1.515589293e-03f, 1.516778906e-03f,
+1.517965831e-03f, 1.519150066e-03f, 1.520331610e-03f, 1.521510461e-03f, 1.522686617e-03f, 1.523860075e-03f, 1.525030835e-03f, 1.526198894e-03f, 1.527364250e-03f, 1.528526902e-03f,
+1.529686847e-03f, 1.530844084e-03f, 1.531998611e-03f, 1.533150427e-03f, 1.534299528e-03f, 1.535445914e-03f, 1.536589582e-03f, 1.537730531e-03f, 1.538868759e-03f, 1.540004264e-03f,
+1.541137044e-03f, 1.542267098e-03f, 1.543394424e-03f, 1.544519019e-03f, 1.545640883e-03f, 1.546760013e-03f, 1.547876407e-03f, 1.548990064e-03f, 1.550100982e-03f, 1.551209159e-03f,
+1.552314594e-03f, 1.553417285e-03f, 1.554517229e-03f, 1.555614425e-03f, 1.556708872e-03f, 1.557800568e-03f, 1.558889511e-03f, 1.559975699e-03f, 1.561059130e-03f, 1.562139803e-03f,
+1.563217716e-03f, 1.564292868e-03f, 1.565365256e-03f, 1.566434880e-03f, 1.567501736e-03f, 1.568565824e-03f, 1.569627142e-03f, 1.570685688e-03f, 1.571741461e-03f, 1.572794459e-03f,
+1.573844680e-03f, 1.574892122e-03f, 1.575936784e-03f, 1.576978665e-03f, 1.578017762e-03f, 1.579054074e-03f, 1.580087599e-03f, 1.581118336e-03f, 1.582146283e-03f, 1.583171439e-03f,
+1.584193801e-03f, 1.585213368e-03f, 1.586230140e-03f, 1.587244113e-03f, 1.588255286e-03f, 1.589263658e-03f, 1.590269228e-03f, 1.591271993e-03f, 1.592271952e-03f, 1.593269104e-03f,
+1.594263446e-03f, 1.595254978e-03f, 1.596243698e-03f, 1.597229604e-03f, 1.598212695e-03f, 1.599192969e-03f, 1.600170424e-03f, 1.601145060e-03f, 1.602116874e-03f, 1.603085865e-03f,
+1.604052031e-03f, 1.605015372e-03f, 1.605975885e-03f, 1.606933569e-03f, 1.607888423e-03f, 1.608840445e-03f, 1.609789633e-03f, 1.610735986e-03f, 1.611679503e-03f, 1.612620181e-03f,
+1.613558021e-03f, 1.614493019e-03f, 1.615425175e-03f, 1.616354488e-03f, 1.617280955e-03f, 1.618204576e-03f, 1.619125348e-03f, 1.620043271e-03f, 1.620958343e-03f, 1.621870563e-03f,
+1.622779929e-03f, 1.623686439e-03f, 1.624590093e-03f, 1.625490889e-03f, 1.626388826e-03f, 1.627283902e-03f, 1.628176115e-03f, 1.629065465e-03f, 1.629951950e-03f, 1.630835569e-03f,
+1.631716320e-03f, 1.632594202e-03f, 1.633469213e-03f, 1.634341353e-03f, 1.635210619e-03f, 1.636077011e-03f, 1.636940528e-03f, 1.637801167e-03f, 1.638658928e-03f, 1.639513809e-03f,
+1.640365808e-03f, 1.641214926e-03f, 1.642061159e-03f, 1.642904508e-03f, 1.643744970e-03f, 1.644582545e-03f, 1.645417231e-03f, 1.646249026e-03f, 1.647077931e-03f, 1.647903942e-03f,
+1.648727059e-03f, 1.649547282e-03f, 1.650364607e-03f, 1.651179035e-03f, 1.651990564e-03f, 1.652799192e-03f, 1.653604919e-03f, 1.654407744e-03f, 1.655207664e-03f, 1.656004679e-03f,
+1.656798788e-03f, 1.657589990e-03f, 1.658378282e-03f, 1.659163664e-03f, 1.659946136e-03f, 1.660725694e-03f, 1.661502340e-03f, 1.662276070e-03f, 1.663046885e-03f, 1.663814782e-03f,
+1.664579761e-03f, 1.665341821e-03f, 1.666100960e-03f, 1.666857178e-03f, 1.667610472e-03f, 1.668360843e-03f, 1.669108288e-03f, 1.669852807e-03f, 1.670594399e-03f, 1.671333062e-03f,
+1.672068796e-03f, 1.672801598e-03f, 1.673531469e-03f, 1.674258407e-03f, 1.674982411e-03f, 1.675703480e-03f, 1.676421612e-03f, 1.677136808e-03f, 1.677849065e-03f, 1.678558382e-03f,
+1.679264759e-03f, 1.679968195e-03f, 1.680668687e-03f, 1.681366237e-03f, 1.682060841e-03f, 1.682752500e-03f, 1.683441212e-03f, 1.684126976e-03f, 1.684809791e-03f, 1.685489657e-03f,
+1.686166572e-03f, 1.686840535e-03f, 1.687511545e-03f, 1.688179601e-03f, 1.688844702e-03f, 1.689506848e-03f, 1.690166037e-03f, 1.690822268e-03f, 1.691475540e-03f, 1.692125852e-03f,
+1.692773204e-03f, 1.693417594e-03f, 1.694059022e-03f, 1.694697486e-03f, 1.695332986e-03f, 1.695965520e-03f, 1.696595088e-03f, 1.697221689e-03f, 1.697845322e-03f, 1.698465986e-03f,
+1.699083679e-03f, 1.699698402e-03f, 1.700310153e-03f, 1.700918931e-03f, 1.701524736e-03f, 1.702127566e-03f, 1.702727421e-03f, 1.703324300e-03f, 1.703918202e-03f, 1.704509126e-03f,
+1.705097071e-03f, 1.705682036e-03f, 1.706264021e-03f, 1.706843025e-03f, 1.707419047e-03f, 1.707992085e-03f, 1.708562140e-03f, 1.709129210e-03f, 1.709693295e-03f, 1.710254394e-03f,
+1.710812505e-03f, 1.711367629e-03f, 1.711919764e-03f, 1.712468910e-03f, 1.713015065e-03f, 1.713558230e-03f, 1.714098402e-03f, 1.714635583e-03f, 1.715169770e-03f, 1.715700963e-03f,
+1.716229161e-03f, 1.716754363e-03f, 1.717276570e-03f, 1.717795779e-03f, 1.718311991e-03f, 1.718825204e-03f, 1.719335418e-03f, 1.719842632e-03f, 1.720346845e-03f, 1.720848057e-03f,
+1.721346267e-03f, 1.721841475e-03f, 1.722333679e-03f, 1.722822879e-03f, 1.723309074e-03f, 1.723792264e-03f, 1.724272447e-03f, 1.724749624e-03f, 1.725223794e-03f, 1.725694955e-03f,
+1.726163108e-03f, 1.726628251e-03f, 1.727090384e-03f, 1.727549507e-03f, 1.728005618e-03f, 1.728458718e-03f, 1.728908805e-03f, 1.729355879e-03f, 1.729799939e-03f, 1.730240985e-03f,
+1.730679016e-03f, 1.731114032e-03f, 1.731546031e-03f, 1.731975014e-03f, 1.732400980e-03f, 1.732823927e-03f, 1.733243857e-03f, 1.733660767e-03f, 1.734074659e-03f, 1.734485530e-03f,
+1.734893380e-03f, 1.735298209e-03f, 1.735700017e-03f, 1.736098803e-03f, 1.736494566e-03f, 1.736887306e-03f, 1.737277022e-03f, 1.737663714e-03f, 1.738047381e-03f, 1.738428023e-03f,
+1.738805639e-03f, 1.739180229e-03f, 1.739551792e-03f, 1.739920329e-03f, 1.740285838e-03f, 1.740648318e-03f, 1.741007770e-03f, 1.741364194e-03f, 1.741717587e-03f, 1.742067951e-03f,
+1.742415285e-03f, 1.742759588e-03f, 1.743100859e-03f, 1.743439100e-03f, 1.743774308e-03f, 1.744106484e-03f, 1.744435626e-03f, 1.744761736e-03f, 1.745084812e-03f, 1.745404855e-03f,
+1.745721862e-03f, 1.746035835e-03f, 1.746346773e-03f, 1.746654676e-03f, 1.746959542e-03f, 1.747261373e-03f, 1.747560166e-03f, 1.747855923e-03f, 1.748148643e-03f, 1.748438325e-03f,
+1.748724969e-03f, 1.749008575e-03f, 1.749289142e-03f, 1.749566670e-03f, 1.749841159e-03f, 1.750112609e-03f, 1.750381019e-03f, 1.750646388e-03f, 1.750908718e-03f, 1.751168006e-03f,
+1.751424254e-03f, 1.751677461e-03f, 1.751927626e-03f, 1.752174749e-03f, 1.752418830e-03f, 1.752659869e-03f, 1.752897865e-03f, 1.753132819e-03f, 1.753364730e-03f, 1.753593597e-03f,
+1.753819421e-03f, 1.754042201e-03f, 1.754261938e-03f, 1.754478630e-03f, 1.754692278e-03f, 1.754902882e-03f, 1.755110440e-03f, 1.755314954e-03f, 1.755516423e-03f, 1.755714847e-03f,
+1.755910225e-03f, 1.756102557e-03f, 1.756291844e-03f, 1.756478085e-03f, 1.756661280e-03f, 1.756841429e-03f, 1.757018531e-03f, 1.757192587e-03f, 1.757363596e-03f, 1.757531558e-03f,
+1.757696474e-03f, 1.757858342e-03f, 1.758017164e-03f, 1.758172938e-03f, 1.758325665e-03f, 1.758475345e-03f, 1.758621977e-03f, 1.758765561e-03f, 1.758906098e-03f, 1.759043587e-03f,
+1.759178029e-03f, 1.759309422e-03f, 1.759437768e-03f, 1.759563066e-03f, 1.759685315e-03f, 1.759804517e-03f, 1.759920670e-03f, 1.760033776e-03f, 1.760143833e-03f, 1.760250842e-03f,
+1.760354803e-03f, 1.760455716e-03f, 1.760553581e-03f, 1.760648397e-03f, 1.760740165e-03f, 1.760828885e-03f, 1.760914557e-03f, 1.760997181e-03f, 1.761076756e-03f, 1.761153284e-03f,
+1.761226764e-03f, 1.761297195e-03f, 1.761364579e-03f, 1.761428914e-03f, 1.761490202e-03f, 1.761548442e-03f, 1.761603635e-03f, 1.761655779e-03f, 1.761704877e-03f, 1.761750926e-03f,
+1.761793929e-03f, 1.761833884e-03f, 1.761870792e-03f, 1.761904653e-03f, 1.761935467e-03f, 1.761963234e-03f, 1.761987954e-03f, 1.762009628e-03f, 1.762028255e-03f, 1.762043836e-03f,
+1.762056371e-03f, 1.762065859e-03f, 1.762072302e-03f, 1.762075699e-03f, 1.762076051e-03f, 1.762073357e-03f, 1.762067618e-03f, 1.762058834e-03f, 1.762047005e-03f, 1.762032132e-03f,
+1.762014214e-03f, 1.761993251e-03f, 1.761969245e-03f, 1.761942195e-03f, 1.761912101e-03f, 1.761878964e-03f, 1.761842783e-03f, 1.761803560e-03f, 1.761761294e-03f, 1.761715985e-03f,
+1.761667634e-03f, 1.761616242e-03f, 1.761561807e-03f, 1.761504331e-03f, 1.761443814e-03f, 1.761380256e-03f, 1.761313658e-03f, 1.761244019e-03f, 1.761171340e-03f, 1.761095621e-03f,
+1.761016862e-03f, 1.760935065e-03f, 1.760850229e-03f, 1.760762354e-03f, 1.760671441e-03f, 1.760577490e-03f, 1.760480502e-03f, 1.760380476e-03f, 1.760277414e-03f, 1.760171315e-03f,
+1.760062180e-03f, 1.759950009e-03f, 1.759834802e-03f, 1.759716561e-03f, 1.759595285e-03f, 1.759470974e-03f, 1.759343630e-03f, 1.759213252e-03f, 1.759079841e-03f, 1.758943397e-03f,
+1.758803920e-03f, 1.758661412e-03f, 1.758515872e-03f, 1.758367301e-03f, 1.758215700e-03f, 1.758061068e-03f, 1.757903407e-03f, 1.757742716e-03f, 1.757578996e-03f, 1.757412247e-03f,
+1.757242471e-03f, 1.757069667e-03f, 1.756893836e-03f, 1.756714978e-03f, 1.756533094e-03f, 1.756348185e-03f, 1.756160250e-03f, 1.755969291e-03f, 1.755775307e-03f, 1.755578300e-03f,
+1.755378270e-03f, 1.755175217e-03f, 1.754969142e-03f, 1.754760045e-03f, 1.754547927e-03f, 1.754332789e-03f, 1.754114631e-03f, 1.753893453e-03f, 1.753669256e-03f, 1.753442041e-03f,
+1.753211808e-03f, 1.752978558e-03f, 1.752742292e-03f, 1.752503009e-03f, 1.752260711e-03f, 1.752015398e-03f, 1.751767070e-03f, 1.751515729e-03f, 1.751261375e-03f, 1.751004008e-03f,
+1.750743629e-03f, 1.750480239e-03f, 1.750213839e-03f, 1.749944428e-03f, 1.749672008e-03f, 1.749396579e-03f, 1.749118142e-03f, 1.748836698e-03f, 1.748552247e-03f, 1.748264789e-03f,
+1.747974326e-03f, 1.747680859e-03f, 1.747384387e-03f, 1.747084912e-03f, 1.746782434e-03f, 1.746476954e-03f, 1.746168472e-03f, 1.745856990e-03f, 1.745542508e-03f, 1.745225027e-03f,
+1.744904547e-03f, 1.744581069e-03f, 1.744254594e-03f, 1.743925123e-03f, 1.743592656e-03f, 1.743257194e-03f, 1.742918738e-03f, 1.742577289e-03f, 1.742232847e-03f, 1.741885413e-03f,
+1.741534988e-03f, 1.741181573e-03f, 1.740825168e-03f, 1.740465774e-03f, 1.740103393e-03f, 1.739738024e-03f, 1.739369669e-03f, 1.738998328e-03f, 1.738624002e-03f, 1.738246692e-03f,
+1.737866400e-03f, 1.737483125e-03f, 1.737096868e-03f, 1.736707631e-03f, 1.736315414e-03f, 1.735920217e-03f, 1.735522043e-03f, 1.735120892e-03f, 1.734716764e-03f, 1.734309660e-03f,
+1.733899582e-03f, 1.733486530e-03f, 1.733070505e-03f, 1.732651508e-03f, 1.732229540e-03f, 1.731804601e-03f, 1.731376693e-03f, 1.730945817e-03f, 1.730511973e-03f, 1.730075163e-03f,
+1.729635387e-03f, 1.729192646e-03f, 1.728746941e-03f, 1.728298273e-03f, 1.727846643e-03f, 1.727392052e-03f, 1.726934502e-03f, 1.726473992e-03f, 1.726010523e-03f, 1.725544098e-03f,
+1.725074716e-03f, 1.724602379e-03f, 1.724127088e-03f, 1.723648844e-03f, 1.723167647e-03f, 1.722683499e-03f, 1.722196401e-03f, 1.721706353e-03f, 1.721213357e-03f, 1.720717414e-03f,
+1.720218524e-03f, 1.719716690e-03f, 1.719211911e-03f, 1.718704189e-03f, 1.718193525e-03f, 1.717679920e-03f, 1.717163374e-03f, 1.716643890e-03f, 1.716121468e-03f, 1.715596109e-03f,
+1.715067815e-03f, 1.714536585e-03f, 1.714002422e-03f, 1.713465327e-03f, 1.712925300e-03f, 1.712382343e-03f, 1.711836457e-03f, 1.711287642e-03f, 1.710735901e-03f, 1.710181233e-03f,
+1.709623641e-03f, 1.709063126e-03f, 1.708499687e-03f, 1.707933328e-03f, 1.707364048e-03f, 1.706791849e-03f, 1.706216732e-03f, 1.705638698e-03f, 1.705057749e-03f, 1.704473886e-03f,
+1.703887109e-03f, 1.703297420e-03f, 1.702704820e-03f, 1.702109310e-03f, 1.701510892e-03f, 1.700909566e-03f, 1.700305335e-03f, 1.699698198e-03f, 1.699088158e-03f, 1.698475215e-03f,
+1.697859371e-03f, 1.697240627e-03f, 1.696618984e-03f, 1.695994443e-03f, 1.695367007e-03f, 1.694736675e-03f, 1.694103449e-03f, 1.693467330e-03f, 1.692828321e-03f, 1.692186421e-03f,
+1.691541632e-03f, 1.690893956e-03f, 1.690243394e-03f, 1.689589947e-03f, 1.688933616e-03f, 1.688274402e-03f, 1.687612308e-03f, 1.686947334e-03f, 1.686279481e-03f, 1.685608751e-03f,
+1.684935146e-03f, 1.684258666e-03f, 1.683579313e-03f, 1.682897088e-03f, 1.682211992e-03f, 1.681524027e-03f, 1.680833195e-03f, 1.680139496e-03f, 1.679442932e-03f, 1.678743504e-03f,
+1.678041214e-03f, 1.677336063e-03f, 1.676628053e-03f, 1.675917184e-03f, 1.675203458e-03f, 1.674486877e-03f, 1.673767442e-03f, 1.673045154e-03f, 1.672320015e-03f, 1.671592027e-03f,
+1.670861189e-03f, 1.670127505e-03f, 1.669390976e-03f, 1.668651602e-03f, 1.667909385e-03f, 1.667164328e-03f, 1.666416430e-03f, 1.665665694e-03f, 1.664912121e-03f, 1.664155713e-03f,
+1.663396471e-03f, 1.662634396e-03f, 1.661869491e-03f, 1.661101756e-03f, 1.660331193e-03f, 1.659557803e-03f, 1.658781588e-03f, 1.658002550e-03f, 1.657220689e-03f, 1.656436008e-03f,
+1.655648508e-03f, 1.654858191e-03f, 1.654065057e-03f, 1.653269109e-03f, 1.652470348e-03f, 1.651668776e-03f, 1.650864394e-03f, 1.650057203e-03f, 1.649247206e-03f, 1.648434403e-03f,
+1.647618797e-03f, 1.646800389e-03f, 1.645979181e-03f, 1.645155173e-03f, 1.644328368e-03f, 1.643498767e-03f, 1.642666373e-03f, 1.641831185e-03f, 1.640993207e-03f, 1.640152439e-03f,
+1.639308883e-03f, 1.638462542e-03f, 1.637613416e-03f, 1.636761506e-03f, 1.635906816e-03f, 1.635049346e-03f, 1.634189098e-03f, 1.633326074e-03f, 1.632460274e-03f, 1.631591702e-03f,
+1.630720359e-03f, 1.629846245e-03f, 1.628969364e-03f, 1.628089716e-03f, 1.627207303e-03f, 1.626322128e-03f, 1.625434191e-03f, 1.624543494e-03f, 1.623650039e-03f, 1.622753828e-03f,
+1.621854862e-03f, 1.620953144e-03f, 1.620048674e-03f, 1.619141455e-03f, 1.618231488e-03f, 1.617318775e-03f, 1.616403318e-03f, 1.615485118e-03f, 1.614564178e-03f, 1.613640498e-03f,
+1.612714081e-03f, 1.611784929e-03f, 1.610853042e-03f, 1.609918424e-03f, 1.608981076e-03f, 1.608040999e-03f, 1.607098195e-03f, 1.606152666e-03f, 1.605204414e-03f, 1.604253441e-03f,
+1.603299748e-03f, 1.602343338e-03f, 1.601384211e-03f, 1.600422370e-03f, 1.599457817e-03f, 1.598490554e-03f, 1.597520582e-03f, 1.596547903e-03f, 1.595572519e-03f, 1.594594431e-03f,
+1.593613643e-03f, 1.592630155e-03f, 1.591643969e-03f, 1.590655087e-03f, 1.589663512e-03f, 1.588669244e-03f, 1.587672286e-03f, 1.586672640e-03f, 1.585670307e-03f, 1.584665290e-03f,
+1.583657590e-03f, 1.582647209e-03f, 1.581634150e-03f, 1.580618413e-03f, 1.579600002e-03f, 1.578578917e-03f, 1.577555161e-03f, 1.576528735e-03f, 1.575499642e-03f, 1.574467884e-03f,
+1.573433462e-03f, 1.572396378e-03f, 1.571356635e-03f, 1.570314234e-03f, 1.569269177e-03f, 1.568221466e-03f, 1.567171103e-03f, 1.566118091e-03f, 1.565062430e-03f, 1.564004124e-03f,
+1.562943173e-03f, 1.561879581e-03f, 1.560813348e-03f, 1.559744478e-03f, 1.558672971e-03f, 1.557598830e-03f, 1.556522058e-03f, 1.555442655e-03f, 1.554360624e-03f, 1.553275967e-03f,
+1.552188687e-03f, 1.551098784e-03f, 1.550006261e-03f, 1.548911121e-03f, 1.547813364e-03f, 1.546712994e-03f, 1.545610012e-03f, 1.544504420e-03f, 1.543396221e-03f, 1.542285416e-03f,
+1.541172007e-03f, 1.540055997e-03f, 1.538937388e-03f, 1.537816181e-03f, 1.536692379e-03f, 1.535565984e-03f, 1.534436998e-03f, 1.533305423e-03f, 1.532171261e-03f, 1.531034514e-03f,
+1.529895185e-03f, 1.528753275e-03f, 1.527608787e-03f, 1.526461723e-03f, 1.525312084e-03f, 1.524159873e-03f, 1.523005093e-03f, 1.521847744e-03f, 1.520687830e-03f, 1.519525353e-03f,
+1.518360314e-03f, 1.517192716e-03f, 1.516022562e-03f, 1.514849852e-03f, 1.513674590e-03f, 1.512496777e-03f, 1.511316416e-03f, 1.510133508e-03f, 1.508948057e-03f, 1.507760064e-03f,
+1.506569532e-03f, 1.505376462e-03f, 1.504180857e-03f, 1.502982719e-03f, 1.501782051e-03f, 1.500578853e-03f, 1.499373130e-03f, 1.498164883e-03f, 1.496954113e-03f, 1.495740824e-03f,
+1.494525018e-03f, 1.493306697e-03f, 1.492085863e-03f, 1.490862518e-03f, 1.489636664e-03f, 1.488408305e-03f, 1.487177442e-03f, 1.485944077e-03f, 1.484708213e-03f, 1.483469852e-03f,
+1.482228996e-03f, 1.480985648e-03f, 1.479739809e-03f, 1.478491483e-03f, 1.477240671e-03f, 1.475987376e-03f, 1.474731599e-03f, 1.473473345e-03f, 1.472212613e-03f, 1.470949408e-03f,
+1.469683731e-03f, 1.468415585e-03f, 1.467144971e-03f, 1.465871893e-03f, 1.464596352e-03f, 1.463318351e-03f, 1.462037893e-03f, 1.460754979e-03f, 1.459469613e-03f, 1.458181795e-03f,
+1.456891530e-03f, 1.455598818e-03f, 1.454303663e-03f, 1.453006067e-03f, 1.451706032e-03f, 1.450403560e-03f, 1.449098655e-03f, 1.447791318e-03f, 1.446481551e-03f, 1.445169358e-03f,
+1.443854740e-03f, 1.442537701e-03f, 1.441218242e-03f, 1.439896365e-03f, 1.438572074e-03f, 1.437245370e-03f, 1.435916257e-03f, 1.434584736e-03f, 1.433250810e-03f, 1.431914482e-03f,
+1.430575753e-03f, 1.429234626e-03f, 1.427891105e-03f, 1.426545190e-03f, 1.425196885e-03f, 1.423846192e-03f, 1.422493114e-03f, 1.421137653e-03f, 1.419779811e-03f, 1.418419592e-03f,
+1.417056996e-03f, 1.415692028e-03f, 1.414324690e-03f, 1.412954983e-03f, 1.411582911e-03f, 1.410208475e-03f, 1.408831680e-03f, 1.407452526e-03f, 1.406071016e-03f, 1.404687154e-03f,
+1.403300941e-03f, 1.401912381e-03f, 1.400521475e-03f, 1.399128226e-03f, 1.397732637e-03f, 1.396334710e-03f, 1.394934447e-03f, 1.393531853e-03f, 1.392126928e-03f, 1.390719675e-03f,
+1.389310097e-03f, 1.387898197e-03f, 1.386483977e-03f, 1.385067440e-03f, 1.383648588e-03f, 1.382227424e-03f, 1.380803951e-03f, 1.379378170e-03f, 1.377950085e-03f, 1.376519699e-03f,
+1.375087013e-03f, 1.373652031e-03f, 1.372214754e-03f, 1.370775187e-03f, 1.369333330e-03f, 1.367889188e-03f, 1.366442762e-03f, 1.364994055e-03f, 1.363543070e-03f, 1.362089809e-03f,
+1.360634276e-03f, 1.359176472e-03f, 1.357716400e-03f, 1.356254064e-03f, 1.354789465e-03f, 1.353322606e-03f, 1.351853490e-03f, 1.350382120e-03f, 1.348908499e-03f, 1.347432628e-03f,
+1.345954511e-03f, 1.344474150e-03f, 1.342991549e-03f, 1.341506709e-03f, 1.340019633e-03f, 1.338530324e-03f, 1.337038786e-03f, 1.335545019e-03f, 1.334049028e-03f, 1.332550815e-03f,
+1.331050383e-03f, 1.329547734e-03f, 1.328042871e-03f, 1.326535796e-03f, 1.325026513e-03f, 1.323515025e-03f, 1.322001333e-03f, 1.320485441e-03f, 1.318967352e-03f, 1.317447068e-03f,
+1.315924592e-03f, 1.314399926e-03f, 1.312873074e-03f, 1.311344038e-03f, 1.309812822e-03f, 1.308279427e-03f, 1.306743856e-03f, 1.305206113e-03f, 1.303666200e-03f, 1.302124120e-03f,
+1.300579875e-03f, 1.299033469e-03f, 1.297484904e-03f, 1.295934184e-03f, 1.294381310e-03f, 1.292826285e-03f, 1.291269114e-03f, 1.289709797e-03f, 1.288148339e-03f, 1.286584741e-03f,
+1.285019007e-03f, 1.283451140e-03f, 1.281881142e-03f, 1.280309017e-03f, 1.278734766e-03f, 1.277158393e-03f, 1.275579901e-03f, 1.273999293e-03f, 1.272416571e-03f, 1.270831738e-03f,
+1.269244798e-03f, 1.267655752e-03f, 1.266064605e-03f, 1.264471358e-03f, 1.262876014e-03f, 1.261278578e-03f, 1.259679050e-03f, 1.258077435e-03f, 1.256473735e-03f, 1.254867953e-03f,
+1.253260091e-03f, 1.251650154e-03f, 1.250038143e-03f, 1.248424062e-03f, 1.246807914e-03f, 1.245189701e-03f, 1.243569426e-03f, 1.241947092e-03f, 1.240322703e-03f, 1.238696261e-03f,
+1.237067768e-03f, 1.235437229e-03f, 1.233804645e-03f, 1.232170021e-03f, 1.230533358e-03f, 1.228894660e-03f, 1.227253929e-03f, 1.225611169e-03f, 1.223966383e-03f, 1.222319573e-03f,
+1.220670742e-03f, 1.219019894e-03f, 1.217367031e-03f, 1.215712157e-03f, 1.214055274e-03f, 1.212396385e-03f, 1.210735494e-03f, 1.209072603e-03f, 1.207407715e-03f, 1.205740833e-03f,
+1.204071961e-03f, 1.202401101e-03f, 1.200728256e-03f, 1.199053429e-03f, 1.197376624e-03f, 1.195697843e-03f, 1.194017089e-03f, 1.192334365e-03f, 1.190649675e-03f, 1.188963021e-03f,
+1.187274406e-03f, 1.185583834e-03f, 1.183891307e-03f, 1.182196828e-03f, 1.180500401e-03f, 1.178802029e-03f, 1.177101714e-03f, 1.175399459e-03f, 1.173695269e-03f, 1.171989145e-03f,
+1.170281091e-03f, 1.168571109e-03f, 1.166859204e-03f, 1.165145377e-03f, 1.163429633e-03f, 1.161711974e-03f, 1.159992402e-03f, 1.158270922e-03f, 1.156547537e-03f, 1.154822249e-03f,
+1.153095061e-03f, 1.151365977e-03f, 1.149635000e-03f, 1.147902132e-03f, 1.146167378e-03f, 1.144430739e-03f, 1.142692219e-03f, 1.140951822e-03f, 1.139209550e-03f, 1.137465407e-03f,
+1.135719395e-03f, 1.133971517e-03f, 1.132221778e-03f, 1.130470179e-03f, 1.128716725e-03f, 1.126961418e-03f, 1.125204261e-03f, 1.123445258e-03f, 1.121684411e-03f, 1.119921724e-03f,
+1.118157200e-03f, 1.116390842e-03f, 1.114622653e-03f, 1.112852637e-03f, 1.111080796e-03f, 1.109307134e-03f, 1.107531654e-03f, 1.105754359e-03f, 1.103975252e-03f, 1.102194337e-03f,
+1.100411616e-03f, 1.098627093e-03f, 1.096840771e-03f, 1.095052653e-03f, 1.093262742e-03f, 1.091471042e-03f, 1.089677556e-03f, 1.087882286e-03f, 1.086085237e-03f, 1.084286411e-03f,
+1.082485812e-03f, 1.080683442e-03f, 1.078879305e-03f, 1.077073405e-03f, 1.075265744e-03f, 1.073456325e-03f, 1.071645153e-03f, 1.069832229e-03f, 1.068017558e-03f, 1.066201143e-03f,
+1.064382986e-03f, 1.062563091e-03f, 1.060741461e-03f, 1.058918100e-03f, 1.057093011e-03f, 1.055266197e-03f, 1.053437661e-03f, 1.051607406e-03f, 1.049775437e-03f, 1.047941755e-03f,
+1.046106365e-03f, 1.044269269e-03f, 1.042430471e-03f, 1.040589975e-03f, 1.038747782e-03f, 1.036903898e-03f, 1.035058324e-03f, 1.033211065e-03f, 1.031362123e-03f, 1.029511502e-03f,
+1.027659205e-03f, 1.025805236e-03f, 1.023949597e-03f, 1.022092292e-03f, 1.020233325e-03f, 1.018372698e-03f, 1.016510415e-03f, 1.014646479e-03f, 1.012780894e-03f, 1.010913663e-03f,
+1.009044789e-03f, 1.007174275e-03f, 1.005302126e-03f, 1.003428343e-03f, 1.001552931e-03f, 9.996758933e-04f, 9.977972323e-04f, 9.959169518e-04f, 9.940350552e-04f, 9.921515458e-04f,
+9.902664269e-04f, 9.883797019e-04f, 9.864913741e-04f, 9.846014469e-04f, 9.827099237e-04f, 9.808168078e-04f, 9.789221025e-04f, 9.770258113e-04f, 9.751279374e-04f, 9.732284844e-04f,
+9.713274554e-04f, 9.694248540e-04f, 9.675206835e-04f, 9.656149472e-04f, 9.637076486e-04f, 9.617987910e-04f, 9.598883778e-04f, 9.579764125e-04f, 9.560628983e-04f, 9.541478387e-04f,
+9.522312371e-04f, 9.503130970e-04f, 9.483934216e-04f, 9.464722144e-04f, 9.445494788e-04f, 9.426252182e-04f, 9.406994360e-04f, 9.387721357e-04f, 9.368433206e-04f, 9.349129942e-04f,
+9.329811599e-04f, 9.310478210e-04f, 9.291129812e-04f, 9.271766437e-04f, 9.252388120e-04f, 9.232994895e-04f, 9.213586798e-04f, 9.194163861e-04f, 9.174726119e-04f, 9.155273608e-04f,
+9.135806361e-04f, 9.116324413e-04f, 9.096827798e-04f, 9.077316550e-04f, 9.057790706e-04f, 9.038250298e-04f, 9.018695362e-04f, 8.999125932e-04f, 8.979542042e-04f, 8.959943728e-04f,
+8.940331025e-04f, 8.920703966e-04f, 8.901062586e-04f, 8.881406921e-04f, 8.861737006e-04f, 8.842052874e-04f, 8.822354560e-04f, 8.802642100e-04f, 8.782915529e-04f, 8.763174881e-04f,
+8.743420191e-04f, 8.723651495e-04f, 8.703868826e-04f, 8.684072220e-04f, 8.664261713e-04f, 8.644437339e-04f, 8.624599132e-04f, 8.604747129e-04f, 8.584881365e-04f, 8.565001873e-04f,
+8.545108690e-04f, 8.525201851e-04f, 8.505281391e-04f, 8.485347345e-04f, 8.465399748e-04f, 8.445438635e-04f, 8.425464042e-04f, 8.405476004e-04f, 8.385474557e-04f, 8.365459735e-04f,
+8.345431575e-04f, 8.325390110e-04f, 8.305335378e-04f, 8.285267412e-04f, 8.265186249e-04f, 8.245091924e-04f, 8.224984473e-04f, 8.204863931e-04f, 8.184730333e-04f, 8.164583715e-04f,
+8.144424113e-04f, 8.124251562e-04f, 8.104066098e-04f, 8.083867756e-04f, 8.063656572e-04f, 8.043432581e-04f, 8.023195821e-04f, 8.002946325e-04f, 7.982684130e-04f, 7.962409271e-04f,
+7.942121784e-04f, 7.921821706e-04f, 7.901509071e-04f, 7.881183916e-04f, 7.860846277e-04f, 7.840496188e-04f, 7.820133687e-04f, 7.799758809e-04f, 7.779371590e-04f, 7.758972066e-04f,
+7.738560272e-04f, 7.718136246e-04f, 7.697700022e-04f, 7.677251637e-04f, 7.656791127e-04f, 7.636318528e-04f, 7.615833875e-04f, 7.595337206e-04f, 7.574828556e-04f, 7.554307961e-04f,
+7.533775458e-04f, 7.513231082e-04f, 7.492674869e-04f, 7.472106857e-04f, 7.451527081e-04f, 7.430935577e-04f, 7.410332382e-04f, 7.389717531e-04f, 7.369091062e-04f, 7.348453010e-04f,
+7.327803412e-04f, 7.307142304e-04f, 7.286469723e-04f, 7.265785704e-04f, 7.245090285e-04f, 7.224383501e-04f, 7.203665390e-04f, 7.182935987e-04f, 7.162195329e-04f, 7.141443452e-04f,
+7.120680394e-04f, 7.099906189e-04f, 7.079120876e-04f, 7.058324491e-04f, 7.037517069e-04f, 7.016698649e-04f, 6.995869265e-04f, 6.975028956e-04f, 6.954177757e-04f, 6.933315705e-04f,
+6.912442838e-04f, 6.891559190e-04f, 6.870664800e-04f, 6.849759704e-04f, 6.828843939e-04f, 6.807917542e-04f, 6.786980548e-04f, 6.766032996e-04f, 6.745074921e-04f, 6.724106361e-04f,
+6.703127352e-04f, 6.682137932e-04f, 6.661138137e-04f, 6.640128004e-04f, 6.619107570e-04f, 6.598076872e-04f, 6.577035946e-04f, 6.555984831e-04f, 6.534923562e-04f, 6.513852176e-04f,
+6.492770712e-04f, 6.471679205e-04f, 6.450577692e-04f, 6.429466212e-04f, 6.408344800e-04f, 6.387213494e-04f, 6.366072331e-04f, 6.344921348e-04f, 6.323760582e-04f, 6.302590070e-04f,
+6.281409849e-04f, 6.260219958e-04f, 6.239020431e-04f, 6.217811308e-04f, 6.196592625e-04f, 6.175364419e-04f, 6.154126727e-04f, 6.132879588e-04f, 6.111623037e-04f, 6.090357112e-04f,
+6.069081852e-04f, 6.047797292e-04f, 6.026503470e-04f, 6.005200423e-04f, 5.983888190e-04f, 5.962566806e-04f, 5.941236311e-04f, 5.919896740e-04f, 5.898548131e-04f, 5.877190522e-04f,
+5.855823951e-04f, 5.834448454e-04f, 5.813064069e-04f, 5.791670833e-04f, 5.770268785e-04f, 5.748857961e-04f, 5.727438398e-04f, 5.706010136e-04f, 5.684573210e-04f, 5.663127659e-04f,
+5.641673520e-04f, 5.620210831e-04f, 5.598739628e-04f, 5.577259951e-04f, 5.555771836e-04f, 5.534275321e-04f, 5.512770444e-04f, 5.491257242e-04f, 5.469735753e-04f, 5.448206015e-04f,
+5.426668065e-04f, 5.405121941e-04f, 5.383567680e-04f, 5.362005322e-04f, 5.340434902e-04f, 5.318856459e-04f, 5.297270030e-04f, 5.275675654e-04f, 5.254073369e-04f, 5.232463211e-04f,
+5.210845218e-04f, 5.189219430e-04f, 5.167585882e-04f, 5.145944614e-04f, 5.124295663e-04f, 5.102639067e-04f, 5.080974863e-04f, 5.059303090e-04f, 5.037623786e-04f, 5.015936987e-04f,
+4.994242734e-04f, 4.972541062e-04f, 4.950832010e-04f, 4.929115617e-04f, 4.907391919e-04f, 4.885660956e-04f, 4.863922764e-04f, 4.842177383e-04f, 4.820424849e-04f, 4.798665201e-04f,
+4.776898477e-04f, 4.755124715e-04f, 4.733343953e-04f, 4.711556229e-04f, 4.689761581e-04f, 4.667960047e-04f, 4.646151665e-04f, 4.624336474e-04f, 4.602514511e-04f, 4.580685814e-04f,
+4.558850422e-04f, 4.537008373e-04f, 4.515159705e-04f, 4.493304455e-04f, 4.471442662e-04f, 4.449574365e-04f, 4.427699601e-04f, 4.405818409e-04f, 4.383930827e-04f, 4.362036892e-04f,
+4.340136644e-04f, 4.318230120e-04f, 4.296317358e-04f, 4.274398398e-04f, 4.252473276e-04f, 4.230542032e-04f, 4.208604703e-04f, 4.186661328e-04f, 4.164711946e-04f, 4.142756593e-04f,
+4.120795309e-04f, 4.098828132e-04f, 4.076855101e-04f, 4.054876252e-04f, 4.032891626e-04f, 4.010901260e-04f, 3.988905192e-04f, 3.966903461e-04f, 3.944896106e-04f, 3.922883164e-04f,
+3.900864674e-04f, 3.878840674e-04f, 3.856811202e-04f, 3.834776298e-04f, 3.812736000e-04f, 3.790690345e-04f, 3.768639372e-04f, 3.746583120e-04f, 3.724521627e-04f, 3.702454932e-04f,
+3.680383072e-04f, 3.658306087e-04f, 3.636224015e-04f, 3.614136894e-04f, 3.592044763e-04f, 3.569947659e-04f, 3.547845623e-04f, 3.525738692e-04f, 3.503626904e-04f, 3.481510299e-04f,
+3.459388914e-04f, 3.437262789e-04f, 3.415131961e-04f, 3.392996469e-04f, 3.370856352e-04f, 3.348711648e-04f, 3.326562396e-04f, 3.304408634e-04f, 3.282250401e-04f, 3.260087736e-04f,
+3.237920676e-04f, 3.215749261e-04f, 3.193573529e-04f, 3.171393519e-04f, 3.149209269e-04f, 3.127020818e-04f, 3.104828204e-04f, 3.082631466e-04f, 3.060430643e-04f, 3.038225773e-04f,
+3.016016895e-04f, 2.993804047e-04f, 2.971587268e-04f, 2.949366597e-04f, 2.927142073e-04f, 2.904913733e-04f, 2.882681617e-04f, 2.860445763e-04f, 2.838206210e-04f, 2.815962996e-04f,
+2.793716160e-04f, 2.771465742e-04f, 2.749211779e-04f, 2.726954310e-04f, 2.704693373e-04f, 2.682429008e-04f, 2.660161254e-04f, 2.637890148e-04f, 2.615615730e-04f, 2.593338038e-04f,
+2.571057111e-04f, 2.548772987e-04f, 2.526485706e-04f, 2.504195305e-04f, 2.481901825e-04f, 2.459605303e-04f, 2.437305778e-04f, 2.415003288e-04f, 2.392697874e-04f, 2.370389572e-04f,
+2.348078423e-04f, 2.325764464e-04f, 2.303447735e-04f, 2.281128274e-04f, 2.258806120e-04f, 2.236481311e-04f, 2.214153887e-04f, 2.191823886e-04f, 2.169491347e-04f, 2.147156308e-04f,
+2.124818809e-04f, 2.102478888e-04f, 2.080136584e-04f, 2.057791935e-04f, 2.035444981e-04f, 2.013095759e-04f, 1.990744310e-04f, 1.968390671e-04f, 1.946034882e-04f, 1.923676981e-04f,
+1.901317007e-04f, 1.878954998e-04f, 1.856590994e-04f, 1.834225034e-04f, 1.811857155e-04f, 1.789487397e-04f, 1.767115798e-04f, 1.744742398e-04f, 1.722367235e-04f, 1.699990348e-04f,
+1.677611775e-04f, 1.655231556e-04f, 1.632849729e-04f, 1.610466333e-04f, 1.588081407e-04f, 1.565694989e-04f, 1.543307119e-04f, 1.520917834e-04f, 1.498527175e-04f, 1.476135179e-04f,
+1.453741886e-04f, 1.431347334e-04f, 1.408951562e-04f, 1.386554608e-04f, 1.364156512e-04f, 1.341757313e-04f, 1.319357048e-04f, 1.296955758e-04f, 1.274553480e-04f, 1.252150254e-04f,
+1.229746118e-04f, 1.207341110e-04f, 1.184935271e-04f, 1.162528638e-04f, 1.140121251e-04f, 1.117713147e-04f, 1.095304367e-04f, 1.072894948e-04f, 1.050484929e-04f, 1.028074350e-04f,
+1.005663249e-04f, 9.832516644e-05f, 9.608396354e-05f, 9.384272006e-05f, 9.160143988e-05f, 8.936012688e-05f, 8.711878494e-05f, 8.487741792e-05f, 8.263602972e-05f, 8.039462419e-05f,
+7.815320523e-05f, 7.591177669e-05f, 7.367034246e-05f, 7.142890642e-05f, 6.918747243e-05f, 6.694604437e-05f, 6.470462611e-05f, 6.246322154e-05f, 6.022183451e-05f, 5.798046892e-05f,
+5.573912862e-05f, 5.349781749e-05f, 5.125653941e-05f, 4.901529824e-05f, 4.677409786e-05f, 4.453294214e-05f, 4.229183495e-05f, 4.005078017e-05f, 3.780978166e-05f, 3.556884329e-05f,
+3.332796894e-05f, 3.108716247e-05f, 2.884642776e-05f, 2.660576867e-05f, 2.436518907e-05f, 2.212469283e-05f, 1.988428381e-05f, 1.764396590e-05f, 1.540374295e-05f, 1.316361882e-05f,
+1.092359740e-05f, 8.683682538e-06f, 6.443878106e-06f, 4.204187967e-06f, 1.964615989e-06f, -2.748339660e-07f, -2.514158032e-06f, -4.753352347e-06f, -6.992413046e-06f, -9.231336267e-06f,
+-1.147011815e-05f, -1.370875483e-05f, -1.594724244e-05f, -1.818557713e-05f, -2.042375504e-05f, -2.266177230e-05f, -2.489962505e-05f, -2.713730944e-05f, -2.937482161e-05f, -3.161215770e-05f,
+-3.384931385e-05f, -3.608628621e-05f, -3.832307091e-05f, -4.055966411e-05f, -4.279606195e-05f, -4.503226056e-05f, -4.726825611e-05f, -4.950404474e-05f, -5.173962258e-05f, -5.397498579e-05f,
+-5.621013053e-05f, -5.844505292e-05f, -6.067974914e-05f, -6.291421532e-05f, -6.514844761e-05f, -6.738244218e-05f, -6.961619516e-05f, -7.184970271e-05f, -7.408296099e-05f, -7.631596614e-05f,
+-7.854871433e-05f, -8.078120171e-05f, -8.301342443e-05f, -8.524537864e-05f, -8.747706052e-05f, -8.970846621e-05f, -9.193959187e-05f, -9.417043366e-05f, -9.640098774e-05f, -9.863125028e-05f,
+-1.008612174e-04f, -1.030908853e-04f, -1.053202502e-04f, -1.075493082e-04f, -1.097780554e-04f, -1.120064881e-04f, -1.142346023e-04f, -1.164623943e-04f, -1.186898603e-04f, -1.209169963e-04f,
+-1.231437986e-04f, -1.253702634e-04f, -1.275963867e-04f, -1.298221648e-04f, -1.320475939e-04f, -1.342726701e-04f, -1.364973896e-04f, -1.387217486e-04f, -1.409457432e-04f, -1.431693696e-04f,
+-1.453926241e-04f, -1.476155027e-04f, -1.498380016e-04f, -1.520601171e-04f, -1.542818453e-04f, -1.565031825e-04f, -1.587241246e-04f, -1.609446681e-04f, -1.631648090e-04f, -1.653845435e-04f,
+-1.676038679e-04f, -1.698227782e-04f, -1.720412708e-04f, -1.742593417e-04f, -1.764769872e-04f, -1.786942034e-04f, -1.809109866e-04f, -1.831273330e-04f, -1.853432386e-04f, -1.875586999e-04f,
+-1.897737128e-04f, -1.919882737e-04f, -1.942023787e-04f, -1.964160240e-04f, -1.986292058e-04f, -2.008419203e-04f, -2.030541638e-04f, -2.052659324e-04f, -2.074772223e-04f, -2.096880297e-04f,
+-2.118983509e-04f, -2.141081820e-04f, -2.163175193e-04f, -2.185263589e-04f, -2.207346971e-04f, -2.229425301e-04f, -2.251498541e-04f, -2.273566653e-04f, -2.295629599e-04f, -2.317687341e-04f,
+-2.339739842e-04f, -2.361787063e-04f, -2.383828968e-04f, -2.405865517e-04f, -2.427896674e-04f, -2.449922400e-04f, -2.471942658e-04f, -2.493957410e-04f, -2.515966618e-04f, -2.537970245e-04f,
+-2.559968252e-04f, -2.581960603e-04f, -2.603947259e-04f, -2.625928182e-04f, -2.647903336e-04f, -2.669872682e-04f, -2.691836182e-04f, -2.713793800e-04f, -2.735745497e-04f, -2.757691236e-04f,
+-2.779630979e-04f, -2.801564689e-04f, -2.823492327e-04f, -2.845413858e-04f, -2.867329242e-04f, -2.889238442e-04f, -2.911141422e-04f, -2.933038143e-04f, -2.954928567e-04f, -2.976812659e-04f,
+-2.998690379e-04f, -3.020561690e-04f, -3.042426556e-04f, -3.064284938e-04f, -3.086136799e-04f, -3.107982102e-04f, -3.129820809e-04f, -3.151652883e-04f, -3.173478287e-04f, -3.195296983e-04f,
+-3.217108934e-04f, -3.238914103e-04f, -3.260712452e-04f, -3.282503944e-04f, -3.304288541e-04f, -3.326066207e-04f, -3.347836905e-04f, -3.369600596e-04f, -3.391357244e-04f, -3.413106811e-04f,
+-3.434849261e-04f, -3.456584555e-04f, -3.478312658e-04f, -3.500033532e-04f, -3.521747139e-04f, -3.543453442e-04f, -3.565152405e-04f, -3.586843991e-04f, -3.608528161e-04f, -3.630204880e-04f,
+-3.651874110e-04f, -3.673535814e-04f, -3.695189955e-04f, -3.716836496e-04f, -3.738475400e-04f, -3.760106630e-04f, -3.781730149e-04f, -3.803345921e-04f, -3.824953908e-04f, -3.846554073e-04f,
+-3.868146379e-04f, -3.889730790e-04f, -3.911307269e-04f, -3.932875779e-04f, -3.954436282e-04f, -3.975988743e-04f, -3.997533124e-04f, -4.019069389e-04f, -4.040597500e-04f, -4.062117422e-04f,
+-4.083629117e-04f, -4.105132548e-04f, -4.126627679e-04f, -4.148114474e-04f, -4.169592895e-04f, -4.191062906e-04f, -4.212524470e-04f, -4.233977551e-04f, -4.255422112e-04f, -4.276858116e-04f,
+-4.298285527e-04f, -4.319704309e-04f, -4.341114424e-04f, -4.362515836e-04f, -4.383908509e-04f, -4.405292406e-04f, -4.426667491e-04f, -4.448033727e-04f, -4.469391078e-04f, -4.490739508e-04f,
+-4.512078980e-04f, -4.533409457e-04f, -4.554730903e-04f, -4.576043283e-04f, -4.597346559e-04f, -4.618640695e-04f, -4.639925656e-04f, -4.661201404e-04f, -4.682467903e-04f, -4.703725118e-04f,
+-4.724973012e-04f, -4.746211549e-04f, -4.767440692e-04f, -4.788660405e-04f, -4.809870653e-04f, -4.831071399e-04f, -4.852262607e-04f, -4.873444241e-04f, -4.894616265e-04f, -4.915778643e-04f,
+-4.936931339e-04f, -4.958074316e-04f, -4.979207539e-04f, -5.000330971e-04f, -5.021444578e-04f, -5.042548322e-04f, -5.063642169e-04f, -5.084726081e-04f, -5.105800023e-04f, -5.126863960e-04f,
+-5.147917855e-04f, -5.168961673e-04f, -5.189995377e-04f, -5.211018933e-04f, -5.232032304e-04f, -5.253035454e-04f, -5.274028348e-04f, -5.295010950e-04f, -5.315983224e-04f, -5.336945135e-04f,
+-5.357896647e-04f, -5.378837724e-04f, -5.399768331e-04f, -5.420688432e-04f, -5.441597992e-04f, -5.462496974e-04f, -5.483385345e-04f, -5.504263067e-04f, -5.525130106e-04f, -5.545986426e-04f,
+-5.566831991e-04f, -5.587666767e-04f, -5.608490717e-04f, -5.629303807e-04f, -5.650106000e-04f, -5.670897262e-04f, -5.691677558e-04f, -5.712446852e-04f, -5.733205108e-04f, -5.753952292e-04f,
+-5.774688368e-04f, -5.795413301e-04f, -5.816127056e-04f, -5.836829597e-04f, -5.857520890e-04f, -5.878200899e-04f, -5.898869590e-04f, -5.919526926e-04f, -5.940172874e-04f, -5.960807398e-04f,
+-5.981430462e-04f, -6.002042033e-04f, -6.022642074e-04f, -6.043230552e-04f, -6.063807431e-04f, -6.084372676e-04f, -6.104926252e-04f, -6.125468124e-04f, -6.145998258e-04f, -6.166516619e-04f,
+-6.187023172e-04f, -6.207517882e-04f, -6.228000714e-04f, -6.248471634e-04f, -6.268930607e-04f, -6.289377598e-04f, -6.309812572e-04f, -6.330235496e-04f, -6.350646333e-04f, -6.371045051e-04f,
+-6.391431613e-04f, -6.411805986e-04f, -6.432168135e-04f, -6.452518025e-04f, -6.472855623e-04f, -6.493180893e-04f, -6.513493801e-04f, -6.533794313e-04f, -6.554082394e-04f, -6.574358010e-04f,
+-6.594621126e-04f, -6.614871709e-04f, -6.635109723e-04f, -6.655335136e-04f, -6.675547911e-04f, -6.695748016e-04f, -6.715935416e-04f, -6.736110076e-04f, -6.756271963e-04f, -6.776421043e-04f,
+-6.796557281e-04f, -6.816680643e-04f, -6.836791096e-04f, -6.856888605e-04f, -6.876973136e-04f, -6.897044655e-04f, -6.917103128e-04f, -6.937148521e-04f, -6.957180801e-04f, -6.977199934e-04f,
+-6.997205885e-04f, -7.017198620e-04f, -7.037178107e-04f, -7.057144311e-04f, -7.077097198e-04f, -7.097036735e-04f, -7.116962888e-04f, -7.136875623e-04f, -7.156774907e-04f, -7.176660705e-04f,
+-7.196532985e-04f, -7.216391712e-04f, -7.236236854e-04f, -7.256068376e-04f, -7.275886246e-04f, -7.295690429e-04f, -7.315480892e-04f, -7.335257602e-04f, -7.355020525e-04f, -7.374769628e-04f,
+-7.394504877e-04f, -7.414226240e-04f, -7.433933682e-04f, -7.453627171e-04f, -7.473306674e-04f, -7.492972157e-04f, -7.512623586e-04f, -7.532260929e-04f, -7.551884153e-04f, -7.571493224e-04f,
+-7.591088110e-04f, -7.610668777e-04f, -7.630235192e-04f, -7.649787322e-04f, -7.669325134e-04f, -7.688848596e-04f, -7.708357674e-04f, -7.727852335e-04f, -7.747332547e-04f, -7.766798276e-04f,
+-7.786249491e-04f, -7.805686157e-04f, -7.825108242e-04f, -7.844515714e-04f, -7.863908539e-04f, -7.883286686e-04f, -7.902650121e-04f, -7.921998811e-04f, -7.941332725e-04f, -7.960651829e-04f,
+-7.979956091e-04f, -7.999245478e-04f, -8.018519959e-04f, -8.037779499e-04f, -8.057024068e-04f, -8.076253632e-04f, -8.095468159e-04f, -8.114667617e-04f, -8.133851974e-04f, -8.153021196e-04f,
+-8.172175253e-04f, -8.191314110e-04f, -8.210437738e-04f, -8.229546102e-04f, -8.248639171e-04f, -8.267716913e-04f, -8.286779296e-04f, -8.305826287e-04f, -8.324857855e-04f, -8.343873967e-04f,
+-8.362874592e-04f, -8.381859698e-04f, -8.400829252e-04f, -8.419783222e-04f, -8.438721578e-04f, -8.457644286e-04f, -8.476551315e-04f, -8.495442634e-04f, -8.514318210e-04f, -8.533178012e-04f,
+-8.552022008e-04f, -8.570850166e-04f, -8.589662456e-04f, -8.608458844e-04f, -8.627239299e-04f, -8.646003791e-04f, -8.664752287e-04f, -8.683484755e-04f, -8.702201165e-04f, -8.720901486e-04f,
+-8.739585684e-04f, -8.758253730e-04f, -8.776905591e-04f, -8.795541237e-04f, -8.814160636e-04f, -8.832763757e-04f, -8.851350568e-04f, -8.869921039e-04f, -8.888475138e-04f, -8.907012834e-04f,
+-8.925534096e-04f, -8.944038892e-04f, -8.962527193e-04f, -8.980998966e-04f, -8.999454181e-04f, -9.017892807e-04f, -9.036314813e-04f, -9.054720167e-04f, -9.073108840e-04f, -9.091480799e-04f,
+-9.109836015e-04f, -9.128174457e-04f, -9.146496093e-04f, -9.164800894e-04f, -9.183088828e-04f, -9.201359865e-04f, -9.219613973e-04f, -9.237851124e-04f, -9.256071285e-04f, -9.274274426e-04f,
+-9.292460518e-04f, -9.310629529e-04f, -9.328781428e-04f, -9.346916187e-04f, -9.365033773e-04f, -9.383134157e-04f, -9.401217309e-04f, -9.419283198e-04f, -9.437331793e-04f, -9.455363066e-04f,
+-9.473376985e-04f, -9.491373520e-04f, -9.509352641e-04f, -9.527314319e-04f, -9.545258522e-04f, -9.563185222e-04f, -9.581094387e-04f, -9.598985989e-04f, -9.616859996e-04f, -9.634716380e-04f,
+-9.652555110e-04f, -9.670376157e-04f, -9.688179490e-04f, -9.705965080e-04f, -9.723732897e-04f, -9.741482911e-04f, -9.759215093e-04f, -9.776929413e-04f, -9.794625842e-04f, -9.812304349e-04f,
+-9.829964906e-04f, -9.847607482e-04f, -9.865232049e-04f, -9.882838577e-04f, -9.900427036e-04f, -9.917997397e-04f, -9.935549631e-04f, -9.953083708e-04f, -9.970599599e-04f, -9.988097275e-04f,
+-1.000557671e-03f, -1.002303786e-03f, -1.004048072e-03f, -1.005790524e-03f, -1.007531140e-03f, -1.009269918e-03f, -1.011006853e-03f, -1.012741943e-03f, -1.014475186e-03f, -1.016206578e-03f,
+-1.017936117e-03f, -1.019663800e-03f, -1.021389623e-03f, -1.023113584e-03f, -1.024835680e-03f, -1.026555908e-03f, -1.028274265e-03f, -1.029990749e-03f, -1.031705356e-03f, -1.033418084e-03f,
+-1.035128930e-03f, -1.036837890e-03f, -1.038544963e-03f, -1.040250145e-03f, -1.041953434e-03f, -1.043654826e-03f, -1.045354319e-03f, -1.047051910e-03f, -1.048747596e-03f, -1.050441374e-03f,
+-1.052133241e-03f, -1.053823196e-03f, -1.055511234e-03f, -1.057197353e-03f, -1.058881550e-03f, -1.060563823e-03f, -1.062244168e-03f, -1.063922583e-03f, -1.065599065e-03f, -1.067273611e-03f,
+-1.068946219e-03f, -1.070616886e-03f, -1.072285608e-03f, -1.073952383e-03f, -1.075617209e-03f, -1.077280082e-03f, -1.078941000e-03f, -1.080599960e-03f, -1.082256960e-03f, -1.083911996e-03f,
+-1.085565065e-03f, -1.087216166e-03f, -1.088865295e-03f, -1.090512450e-03f, -1.092157627e-03f, -1.093800824e-03f, -1.095442039e-03f, -1.097081268e-03f, -1.098718510e-03f, -1.100353760e-03f,
+-1.101987017e-03f, -1.103618277e-03f, -1.105247539e-03f, -1.106874799e-03f, -1.108500055e-03f, -1.110123303e-03f, -1.111744542e-03f, -1.113363768e-03f, -1.114980980e-03f, -1.116596173e-03f,
+-1.118209346e-03f, -1.119820496e-03f, -1.121429620e-03f, -1.123036715e-03f, -1.124641780e-03f, -1.126244810e-03f, -1.127845804e-03f, -1.129444759e-03f, -1.131041672e-03f, -1.132636541e-03f,
+-1.134229362e-03f, -1.135820134e-03f, -1.137408853e-03f, -1.138995518e-03f, -1.140580125e-03f, -1.142162671e-03f, -1.143743155e-03f, -1.145321574e-03f, -1.146897924e-03f, -1.148472204e-03f,
+-1.150044410e-03f, -1.151614540e-03f, -1.153182592e-03f, -1.154748563e-03f, -1.156312450e-03f, -1.157874251e-03f, -1.159433963e-03f, -1.160991584e-03f, -1.162547110e-03f, -1.164100540e-03f,
+-1.165651871e-03f, -1.167201101e-03f, -1.168748225e-03f, -1.170293244e-03f, -1.171836152e-03f, -1.173376949e-03f, -1.174915632e-03f, -1.176452197e-03f, -1.177986643e-03f, -1.179518967e-03f,
+-1.181049166e-03f, -1.182577238e-03f, -1.184103180e-03f, -1.185626991e-03f, -1.187148666e-03f, -1.188668205e-03f, -1.190185603e-03f, -1.191700860e-03f, -1.193213972e-03f, -1.194724936e-03f,
+-1.196233751e-03f, -1.197740414e-03f, -1.199244922e-03f, -1.200747273e-03f, -1.202247464e-03f, -1.203745493e-03f, -1.205241358e-03f, -1.206735056e-03f, -1.208226584e-03f, -1.209715940e-03f,
+-1.211203122e-03f, -1.212688127e-03f, -1.214170953e-03f, -1.215651597e-03f, -1.217130056e-03f, -1.218606330e-03f, -1.220080414e-03f, -1.221552307e-03f, -1.223022006e-03f, -1.224489508e-03f,
+-1.225954812e-03f, -1.227417915e-03f, -1.228878815e-03f, -1.230337508e-03f, -1.231793993e-03f, -1.233248268e-03f, -1.234700329e-03f, -1.236150175e-03f, -1.237597803e-03f, -1.239043210e-03f,
+-1.240486396e-03f, -1.241927356e-03f, -1.243366089e-03f, -1.244802592e-03f, -1.246236863e-03f, -1.247668899e-03f, -1.249098699e-03f, -1.250526260e-03f, -1.251951579e-03f, -1.253374655e-03f,
+-1.254795484e-03f, -1.256214065e-03f, -1.257630395e-03f, -1.259044472e-03f, -1.260456293e-03f, -1.261865857e-03f, -1.263273161e-03f, -1.264678202e-03f, -1.266080979e-03f, -1.267481489e-03f,
+-1.268879729e-03f, -1.270275698e-03f, -1.271669394e-03f, -1.273060813e-03f, -1.274449953e-03f, -1.275836813e-03f, -1.277221391e-03f, -1.278603682e-03f, -1.279983687e-03f, -1.281361402e-03f,
+-1.282736824e-03f, -1.284109953e-03f, -1.285480785e-03f, -1.286849319e-03f, -1.288215551e-03f, -1.289579481e-03f, -1.290941105e-03f, -1.292300421e-03f, -1.293657427e-03f, -1.295012122e-03f,
+-1.296364502e-03f, -1.297714566e-03f, -1.299062311e-03f, -1.300407735e-03f, -1.301750836e-03f, -1.303091612e-03f, -1.304430060e-03f, -1.305766179e-03f, -1.307099966e-03f, -1.308431419e-03f,
+-1.309760536e-03f, -1.311087315e-03f, -1.312411753e-03f, -1.313733848e-03f, -1.315053599e-03f, -1.316371002e-03f, -1.317686057e-03f, -1.318998760e-03f, -1.320309110e-03f, -1.321617105e-03f,
+-1.322922741e-03f, -1.324226019e-03f, -1.325526934e-03f, -1.326825485e-03f, -1.328121670e-03f, -1.329415487e-03f, -1.330706934e-03f, -1.331996008e-03f, -1.333282708e-03f, -1.334567031e-03f,
+-1.335848975e-03f, -1.337128539e-03f, -1.338405720e-03f, -1.339680515e-03f, -1.340952924e-03f, -1.342222944e-03f, -1.343490573e-03f, -1.344755809e-03f, -1.346018649e-03f, -1.347279092e-03f,
+-1.348537136e-03f, -1.349792778e-03f, -1.351046017e-03f, -1.352296851e-03f, -1.353545277e-03f, -1.354791294e-03f, -1.356034899e-03f, -1.357276090e-03f, -1.358514867e-03f, -1.359751225e-03f,
+-1.360985164e-03f, -1.362216682e-03f, -1.363445776e-03f, -1.364672445e-03f, -1.365896686e-03f, -1.367118497e-03f, -1.368337878e-03f, -1.369554824e-03f, -1.370769336e-03f, -1.371981410e-03f,
+-1.373191045e-03f, -1.374398238e-03f, -1.375602989e-03f, -1.376805294e-03f, -1.378005152e-03f, -1.379202561e-03f, -1.380397519e-03f, -1.381590024e-03f, -1.382780075e-03f, -1.383967668e-03f,
+-1.385152804e-03f, -1.386335478e-03f, -1.387515690e-03f, -1.388693438e-03f, -1.389868719e-03f, -1.391041533e-03f, -1.392211876e-03f, -1.393379747e-03f, -1.394545145e-03f, -1.395708067e-03f,
+-1.396868511e-03f, -1.398026476e-03f, -1.399181959e-03f, -1.400334960e-03f, -1.401485475e-03f, -1.402633504e-03f, -1.403779044e-03f, -1.404922093e-03f, -1.406062651e-03f, -1.407200713e-03f,
+-1.408336280e-03f, -1.409469349e-03f, -1.410599919e-03f, -1.411727987e-03f, -1.412853551e-03f, -1.413976611e-03f, -1.415097164e-03f, -1.416215208e-03f, -1.417330741e-03f, -1.418443762e-03f,
+-1.419554269e-03f, -1.420662261e-03f, -1.421767735e-03f, -1.422870689e-03f, -1.423971122e-03f, -1.425069033e-03f, -1.426164418e-03f, -1.427257278e-03f, -1.428347609e-03f, -1.429435410e-03f,
+-1.430520680e-03f, -1.431603416e-03f, -1.432683618e-03f, -1.433761282e-03f, -1.434836408e-03f, -1.435908993e-03f, -1.436979037e-03f, -1.438046537e-03f, -1.439111492e-03f, -1.440173899e-03f,
+-1.441233758e-03f, -1.442291067e-03f, -1.443345823e-03f, -1.444398025e-03f, -1.445447672e-03f, -1.446494762e-03f, -1.447539293e-03f, -1.448581263e-03f, -1.449620671e-03f, -1.450657516e-03f,
+-1.451691795e-03f, -1.452723507e-03f, -1.453752650e-03f, -1.454779223e-03f, -1.455803224e-03f, -1.456824651e-03f, -1.457843503e-03f, -1.458859778e-03f, -1.459873475e-03f, -1.460884591e-03f,
+-1.461893126e-03f, -1.462899078e-03f, -1.463902445e-03f, -1.464903225e-03f, -1.465901417e-03f, -1.466897020e-03f, -1.467890031e-03f, -1.468880450e-03f, -1.469868274e-03f, -1.470853503e-03f,
+-1.471836134e-03f, -1.472816166e-03f, -1.473793597e-03f, -1.474768427e-03f, -1.475740652e-03f, -1.476710273e-03f, -1.477677287e-03f, -1.478641692e-03f, -1.479603488e-03f, -1.480562673e-03f,
+-1.481519244e-03f, -1.482473202e-03f, -1.483424544e-03f, -1.484373268e-03f, -1.485319374e-03f, -1.486262859e-03f, -1.487203723e-03f, -1.488141963e-03f, -1.489077579e-03f, -1.490010568e-03f,
+-1.490940930e-03f, -1.491868663e-03f, -1.492793765e-03f, -1.493716236e-03f, -1.494636073e-03f, -1.495553275e-03f, -1.496467840e-03f, -1.497379768e-03f, -1.498289057e-03f, -1.499195705e-03f,
+-1.500099711e-03f, -1.501001073e-03f, -1.501899791e-03f, -1.502795863e-03f, -1.503689286e-03f, -1.504580061e-03f, -1.505468185e-03f, -1.506353658e-03f, -1.507236477e-03f, -1.508116642e-03f,
+-1.508994151e-03f, -1.509869002e-03f, -1.510741195e-03f, -1.511610727e-03f, -1.512477599e-03f, -1.513341807e-03f, -1.514203351e-03f, -1.515062230e-03f, -1.515918443e-03f, -1.516771987e-03f,
+-1.517622861e-03f, -1.518471065e-03f, -1.519316597e-03f, -1.520159456e-03f, -1.520999639e-03f, -1.521837147e-03f, -1.522671978e-03f, -1.523504130e-03f, -1.524333602e-03f, -1.525160393e-03f,
+-1.525984501e-03f, -1.526805926e-03f, -1.527624666e-03f, -1.528440719e-03f, -1.529254086e-03f, -1.530064763e-03f, -1.530872750e-03f, -1.531678047e-03f, -1.532480650e-03f, -1.533280560e-03f,
+-1.534077775e-03f, -1.534872294e-03f, -1.535664116e-03f, -1.536453238e-03f, -1.537239661e-03f, -1.538023383e-03f, -1.538804403e-03f, -1.539582719e-03f, -1.540358331e-03f, -1.541131237e-03f,
+-1.541901436e-03f, -1.542668927e-03f, -1.543433708e-03f, -1.544195779e-03f, -1.544955138e-03f, -1.545711784e-03f, -1.546465716e-03f, -1.547216934e-03f, -1.547965434e-03f, -1.548711218e-03f,
+-1.549454283e-03f, -1.550194628e-03f, -1.550932252e-03f, -1.551667154e-03f, -1.552399333e-03f, -1.553128788e-03f, -1.553855518e-03f, -1.554579522e-03f, -1.555300797e-03f, -1.556019345e-03f,
+-1.556735162e-03f, -1.557448249e-03f, -1.558158604e-03f, -1.558866226e-03f, -1.559571114e-03f, -1.560273267e-03f, -1.560972684e-03f, -1.561669364e-03f, -1.562363305e-03f, -1.563054508e-03f,
+-1.563742970e-03f, -1.564428690e-03f, -1.565111669e-03f, -1.565791903e-03f, -1.566469394e-03f, -1.567144139e-03f, -1.567816137e-03f, -1.568485389e-03f, -1.569151891e-03f, -1.569815645e-03f,
+-1.570476647e-03f, -1.571134899e-03f, -1.571790398e-03f, -1.572443143e-03f, -1.573093134e-03f, -1.573740370e-03f, -1.574384850e-03f, -1.575026572e-03f, -1.575665536e-03f, -1.576301741e-03f,
+-1.576935186e-03f, -1.577565869e-03f, -1.578193791e-03f, -1.578818950e-03f, -1.579441345e-03f, -1.580060975e-03f, -1.580677840e-03f, -1.581291938e-03f, -1.581903268e-03f, -1.582511830e-03f,
+-1.583117623e-03f, -1.583720646e-03f, -1.584320897e-03f, -1.584918377e-03f, -1.585513084e-03f, -1.586105017e-03f, -1.586694176e-03f, -1.587280559e-03f, -1.587864166e-03f, -1.588444995e-03f,
+-1.589023047e-03f, -1.589598320e-03f, -1.590170813e-03f, -1.590740526e-03f, -1.591307457e-03f, -1.591871607e-03f, -1.592432973e-03f, -1.592991555e-03f, -1.593547353e-03f, -1.594100366e-03f,
+-1.594650592e-03f, -1.595198031e-03f, -1.595742683e-03f, -1.596284546e-03f, -1.596823620e-03f, -1.597359903e-03f, -1.597893396e-03f, -1.598424097e-03f, -1.598952005e-03f, -1.599477121e-03f,
+-1.599999442e-03f, -1.600518969e-03f, -1.601035701e-03f, -1.601549636e-03f, -1.602060774e-03f, -1.602569115e-03f, -1.603074658e-03f, -1.603577401e-03f, -1.604077345e-03f, -1.604574488e-03f,
+-1.605068830e-03f, -1.605560370e-03f, -1.606049108e-03f, -1.606535042e-03f, -1.607018173e-03f, -1.607498499e-03f, -1.607976020e-03f, -1.608450734e-03f, -1.608922642e-03f, -1.609391743e-03f,
+-1.609858036e-03f, -1.610321521e-03f, -1.610782196e-03f, -1.611240061e-03f, -1.611695116e-03f, -1.612147360e-03f, -1.612596792e-03f, -1.613043412e-03f, -1.613487219e-03f, -1.613928212e-03f,
+-1.614366391e-03f, -1.614801755e-03f, -1.615234304e-03f, -1.615664037e-03f, -1.616090954e-03f, -1.616515053e-03f, -1.616936335e-03f, -1.617354798e-03f, -1.617770443e-03f, -1.618183268e-03f,
+-1.618593273e-03f, -1.619000458e-03f, -1.619404822e-03f, -1.619806364e-03f, -1.620205084e-03f, -1.620600982e-03f, -1.620994056e-03f, -1.621384306e-03f, -1.621771733e-03f, -1.622156334e-03f,
+-1.622538111e-03f, -1.622917062e-03f, -1.623293186e-03f, -1.623666484e-03f, -1.624036954e-03f, -1.624404597e-03f, -1.624769412e-03f, -1.625131398e-03f, -1.625490555e-03f, -1.625846883e-03f,
+-1.626200380e-03f, -1.626551048e-03f, -1.626898884e-03f, -1.627243888e-03f, -1.627586062e-03f, -1.627925402e-03f, -1.628261910e-03f, -1.628595586e-03f, -1.628926427e-03f, -1.629254435e-03f,
+-1.629579608e-03f, -1.629901947e-03f, -1.630221451e-03f, -1.630538119e-03f, -1.630851951e-03f, -1.631162947e-03f, -1.631471106e-03f, -1.631776429e-03f, -1.632078913e-03f, -1.632378561e-03f,
+-1.632675370e-03f, -1.632969340e-03f, -1.633260472e-03f, -1.633548765e-03f, -1.633834218e-03f, -1.634116831e-03f, -1.634396604e-03f, -1.634673537e-03f, -1.634947629e-03f, -1.635218880e-03f,
+-1.635487289e-03f, -1.635752857e-03f, -1.636015582e-03f, -1.636275465e-03f, -1.636532506e-03f, -1.636786704e-03f, -1.637038059e-03f, -1.637286570e-03f, -1.637532237e-03f, -1.637775061e-03f,
+-1.638015040e-03f, -1.638252175e-03f, -1.638486465e-03f, -1.638717910e-03f, -1.638946509e-03f, -1.639172264e-03f, -1.639395172e-03f, -1.639615235e-03f, -1.639832452e-03f, -1.640046822e-03f,
+-1.640258346e-03f, -1.640467022e-03f, -1.640672852e-03f, -1.640875835e-03f, -1.641075971e-03f, -1.641273258e-03f, -1.641467698e-03f, -1.641659291e-03f, -1.641848035e-03f, -1.642033931e-03f,
+-1.642216978e-03f, -1.642397177e-03f, -1.642574528e-03f, -1.642749029e-03f, -1.642920681e-03f, -1.643089485e-03f, -1.643255439e-03f, -1.643418543e-03f, -1.643578799e-03f, -1.643736204e-03f,
+-1.643890760e-03f, -1.644042466e-03f, -1.644191322e-03f, -1.644337328e-03f, -1.644480484e-03f, -1.644620789e-03f, -1.644758244e-03f, -1.644892849e-03f, -1.645024604e-03f, -1.645153508e-03f,
+-1.645279561e-03f, -1.645402764e-03f, -1.645523116e-03f, -1.645640617e-03f, -1.645755268e-03f, -1.645867067e-03f, -1.645976016e-03f, -1.646082114e-03f, -1.646185361e-03f, -1.646285757e-03f,
+-1.646383302e-03f, -1.646477997e-03f, -1.646569840e-03f, -1.646658832e-03f, -1.646744974e-03f, -1.646828264e-03f, -1.646908704e-03f, -1.646986293e-03f, -1.647061030e-03f, -1.647132917e-03f,
+-1.647201954e-03f, -1.647268139e-03f, -1.647331474e-03f, -1.647391958e-03f, -1.647449591e-03f, -1.647504374e-03f, -1.647556307e-03f, -1.647605389e-03f, -1.647651621e-03f, -1.647695002e-03f,
+-1.647735534e-03f, -1.647773215e-03f, -1.647808046e-03f, -1.647840028e-03f, -1.647869159e-03f, -1.647895441e-03f, -1.647918874e-03f, -1.647939457e-03f, -1.647957190e-03f, -1.647972075e-03f,
+-1.647984110e-03f, -1.647993297e-03f, -1.647999635e-03f, -1.648003124e-03f, -1.648003765e-03f, -1.648001557e-03f, -1.647996502e-03f, -1.647988598e-03f, -1.647977847e-03f, -1.647964248e-03f,
+-1.647947802e-03f, -1.647928508e-03f, -1.647906367e-03f, -1.647881380e-03f, -1.647853546e-03f, -1.647822865e-03f, -1.647789338e-03f, -1.647752966e-03f, -1.647713747e-03f, -1.647671683e-03f,
+-1.647626774e-03f, -1.647579019e-03f, -1.647528420e-03f, -1.647474976e-03f, -1.647418688e-03f, -1.647359556e-03f, -1.647297580e-03f, -1.647232760e-03f, -1.647165097e-03f, -1.647094591e-03f,
+-1.647021243e-03f, -1.646945051e-03f, -1.646866018e-03f, -1.646784143e-03f, -1.646699427e-03f, -1.646611869e-03f, -1.646521470e-03f, -1.646428231e-03f, -1.646332151e-03f, -1.646233232e-03f,
+-1.646131473e-03f, -1.646026874e-03f, -1.645919437e-03f, -1.645809161e-03f, -1.645696047e-03f, -1.645580095e-03f, -1.645461305e-03f, -1.645339678e-03f, -1.645215214e-03f, -1.645087914e-03f,
+-1.644957778e-03f, -1.644824806e-03f, -1.644688999e-03f, -1.644550357e-03f, -1.644408881e-03f, -1.644264571e-03f, -1.644117426e-03f, -1.643967449e-03f, -1.643814639e-03f, -1.643658996e-03f,
+-1.643500521e-03f, -1.643339215e-03f, -1.643175078e-03f, -1.643008110e-03f, -1.642838312e-03f, -1.642665684e-03f, -1.642490227e-03f, -1.642311941e-03f, -1.642130826e-03f, -1.641946884e-03f,
+-1.641760114e-03f, -1.641570517e-03f, -1.641378094e-03f, -1.641182845e-03f, -1.640984770e-03f, -1.640783871e-03f, -1.640580147e-03f, -1.640373599e-03f, -1.640164227e-03f, -1.639952033e-03f,
+-1.639737016e-03f, -1.639519177e-03f, -1.639298517e-03f, -1.639075037e-03f, -1.638848736e-03f, -1.638619615e-03f, -1.638387675e-03f, -1.638152917e-03f, -1.637915341e-03f, -1.637674947e-03f,
+-1.637431736e-03f, -1.637185709e-03f, -1.636936866e-03f, -1.636685209e-03f, -1.636430736e-03f, -1.636173450e-03f, -1.635913351e-03f, -1.635650438e-03f, -1.635384714e-03f, -1.635116178e-03f,
+-1.634844832e-03f, -1.634570675e-03f, -1.634293708e-03f, -1.634013933e-03f, -1.633731349e-03f, -1.633445957e-03f, -1.633157759e-03f, -1.632866754e-03f, -1.632572944e-03f, -1.632276328e-03f,
+-1.631976908e-03f, -1.631674684e-03f, -1.631369658e-03f, -1.631061829e-03f, -1.630751198e-03f, -1.630437767e-03f, -1.630121535e-03f, -1.629802504e-03f, -1.629480673e-03f, -1.629156045e-03f,
+-1.628828619e-03f, -1.628498397e-03f, -1.628165379e-03f, -1.627829565e-03f, -1.627490957e-03f, -1.627149556e-03f, -1.626805361e-03f, -1.626458374e-03f, -1.626108596e-03f, -1.625756027e-03f,
+-1.625400668e-03f, -1.625042519e-03f, -1.624681583e-03f, -1.624317858e-03f, -1.623951347e-03f, -1.623582050e-03f, -1.623209968e-03f, -1.622835101e-03f, -1.622457451e-03f, -1.622077017e-03f,
+-1.621693802e-03f, -1.621307806e-03f, -1.620919029e-03f, -1.620527472e-03f, -1.620133137e-03f, -1.619736024e-03f, -1.619336134e-03f, -1.618933468e-03f, -1.618528027e-03f, -1.618119811e-03f,
+-1.617708821e-03f, -1.617295059e-03f, -1.616878524e-03f, -1.616459219e-03f, -1.616037144e-03f, -1.615612299e-03f, -1.615184686e-03f, -1.614754306e-03f, -1.614321159e-03f, -1.613885247e-03f,
+-1.613446569e-03f, -1.613005128e-03f, -1.612560924e-03f, -1.612113958e-03f, -1.611664231e-03f, -1.611211744e-03f, -1.610756498e-03f, -1.610298493e-03f, -1.609837732e-03f, -1.609374213e-03f,
+-1.608907940e-03f, -1.608438912e-03f, -1.607967131e-03f, -1.607492597e-03f, -1.607015311e-03f, -1.606535275e-03f, -1.606052490e-03f, -1.605566956e-03f, -1.605078674e-03f, -1.604587646e-03f,
+-1.604093873e-03f, -1.603597354e-03f, -1.603098093e-03f, -1.602596088e-03f, -1.602091343e-03f, -1.601583856e-03f, -1.601073631e-03f, -1.600560667e-03f, -1.600044965e-03f, -1.599526528e-03f,
+-1.599005355e-03f, -1.598481447e-03f, -1.597954807e-03f, -1.597425435e-03f, -1.596893331e-03f, -1.596358498e-03f, -1.595820935e-03f, -1.595280645e-03f, -1.594737629e-03f, -1.594191886e-03f,
+-1.593643420e-03f, -1.593092229e-03f, -1.592538317e-03f, -1.591981683e-03f, -1.591422329e-03f, -1.590860257e-03f, -1.590295466e-03f, -1.589727959e-03f, -1.589157736e-03f, -1.588584799e-03f,
+-1.588009148e-03f, -1.587430786e-03f, -1.586849712e-03f, -1.586265929e-03f, -1.585679436e-03f, -1.585090237e-03f, -1.584498331e-03f, -1.583903720e-03f, -1.583306405e-03f, -1.582706387e-03f,
+-1.582103668e-03f, -1.581498248e-03f, -1.580890129e-03f, -1.580279312e-03f, -1.579665798e-03f, -1.579049589e-03f, -1.578430685e-03f, -1.577809088e-03f, -1.577184800e-03f, -1.576557820e-03f,
+-1.575928151e-03f, -1.575295794e-03f, -1.574660750e-03f, -1.574023020e-03f, -1.573382606e-03f, -1.572739509e-03f, -1.572093729e-03f, -1.571445269e-03f, -1.570794130e-03f, -1.570140313e-03f,
+-1.569483818e-03f, -1.568824648e-03f, -1.568162804e-03f, -1.567498287e-03f, -1.566831098e-03f, -1.566161239e-03f, -1.565488711e-03f, -1.564813515e-03f, -1.564135652e-03f, -1.563455125e-03f,
+-1.562771934e-03f, -1.562086080e-03f, -1.561397565e-03f, -1.560706390e-03f, -1.560012557e-03f, -1.559316067e-03f, -1.558616921e-03f, -1.557915121e-03f, -1.557210668e-03f, -1.556503563e-03f,
+-1.555793808e-03f, -1.555081404e-03f, -1.554366352e-03f, -1.553648655e-03f, -1.552928312e-03f, -1.552205327e-03f, -1.551479699e-03f, -1.550751431e-03f, -1.550020524e-03f, -1.549286979e-03f,
+-1.548550797e-03f, -1.547811981e-03f, -1.547070531e-03f, -1.546326450e-03f, -1.545579738e-03f, -1.544830396e-03f, -1.544078427e-03f, -1.543323832e-03f, -1.542566611e-03f, -1.541806768e-03f,
+-1.541044303e-03f, -1.540279217e-03f, -1.539511512e-03f, -1.538741190e-03f, -1.537968251e-03f, -1.537192699e-03f, -1.536414533e-03f, -1.535633755e-03f, -1.534850368e-03f, -1.534064372e-03f,
+-1.533275769e-03f, -1.532484561e-03f, -1.531690748e-03f, -1.530894333e-03f, -1.530095317e-03f, -1.529293702e-03f, -1.528489489e-03f, -1.527682679e-03f, -1.526873275e-03f, -1.526061277e-03f,
+-1.525246688e-03f, -1.524429508e-03f, -1.523609740e-03f, -1.522787384e-03f, -1.521962444e-03f, -1.521134919e-03f, -1.520304812e-03f, -1.519472124e-03f, -1.518636857e-03f, -1.517799013e-03f,
+-1.516958592e-03f, -1.516115597e-03f, -1.515270029e-03f, -1.514421890e-03f, -1.513571182e-03f, -1.512717905e-03f, -1.511862063e-03f, -1.511003655e-03f, -1.510142684e-03f, -1.509279152e-03f,
+-1.508413060e-03f, -1.507544410e-03f, -1.506673204e-03f, -1.505799442e-03f, -1.504923128e-03f, -1.504044261e-03f, -1.503162845e-03f, -1.502278881e-03f, -1.501392370e-03f, -1.500503314e-03f,
+-1.499611715e-03f, -1.498717574e-03f, -1.497820894e-03f, -1.496921675e-03f, -1.496019920e-03f, -1.495115631e-03f, -1.494208808e-03f, -1.493299454e-03f, -1.492387570e-03f, -1.491473158e-03f,
+-1.490556221e-03f, -1.489636758e-03f, -1.488714774e-03f, -1.487790268e-03f, -1.486863242e-03f, -1.485933700e-03f, -1.485001641e-03f, -1.484067069e-03f, -1.483129984e-03f, -1.482190389e-03f,
+-1.481248286e-03f, -1.480303675e-03f, -1.479356559e-03f, -1.478406940e-03f, -1.477454819e-03f, -1.476500198e-03f, -1.475543080e-03f, -1.474583465e-03f, -1.473621355e-03f, -1.472656753e-03f,
+-1.471689661e-03f, -1.470720079e-03f, -1.469748010e-03f, -1.468773456e-03f, -1.467796418e-03f, -1.466816898e-03f, -1.465834899e-03f, -1.464850421e-03f, -1.463863467e-03f, -1.462874039e-03f,
+-1.461882139e-03f, -1.460887768e-03f, -1.459890927e-03f, -1.458891621e-03f, -1.457889849e-03f, -1.456885613e-03f, -1.455878917e-03f, -1.454869761e-03f, -1.453858147e-03f, -1.452844078e-03f,
+-1.451827555e-03f, -1.450808580e-03f, -1.449787155e-03f, -1.448763283e-03f, -1.447736963e-03f, -1.446708200e-03f, -1.445676994e-03f, -1.444643348e-03f, -1.443607264e-03f, -1.442568743e-03f,
+-1.441527787e-03f, -1.440484398e-03f, -1.439438579e-03f, -1.438390331e-03f, -1.437339656e-03f, -1.436286556e-03f, -1.435231033e-03f, -1.434173089e-03f, -1.433112726e-03f, -1.432049947e-03f,
+-1.430984752e-03f, -1.429917143e-03f, -1.428847124e-03f, -1.427774696e-03f, -1.426699860e-03f, -1.425622619e-03f, -1.424542976e-03f, -1.423460931e-03f, -1.422376486e-03f, -1.421289645e-03f,
+-1.420200409e-03f, -1.419108779e-03f, -1.418014758e-03f, -1.416918349e-03f, -1.415819552e-03f, -1.414718370e-03f, -1.413614805e-03f, -1.412508860e-03f, -1.411400535e-03f, -1.410289834e-03f,
+-1.409176758e-03f, -1.408061309e-03f, -1.406943489e-03f, -1.405823301e-03f, -1.404700747e-03f, -1.403575828e-03f, -1.402448546e-03f, -1.401318905e-03f, -1.400186905e-03f, -1.399052549e-03f,
+-1.397915839e-03f, -1.396776777e-03f, -1.395635365e-03f, -1.394491606e-03f, -1.393345500e-03f, -1.392197052e-03f, -1.391046262e-03f, -1.389893133e-03f, -1.388737667e-03f, -1.387579865e-03f,
+-1.386419731e-03f, -1.385257266e-03f, -1.384092473e-03f, -1.382925353e-03f, -1.381755909e-03f, -1.380584143e-03f, -1.379410056e-03f, -1.378233652e-03f, -1.377054933e-03f, -1.375873899e-03f,
+-1.374690555e-03f, -1.373504901e-03f, -1.372316941e-03f, -1.371126675e-03f, -1.369934107e-03f, -1.368739239e-03f, -1.367542072e-03f, -1.366342610e-03f, -1.365140853e-03f, -1.363936805e-03f,
+-1.362730468e-03f, -1.361521843e-03f, -1.360310934e-03f, -1.359097741e-03f, -1.357882269e-03f, -1.356664518e-03f, -1.355444491e-03f, -1.354222190e-03f, -1.352997617e-03f, -1.351770776e-03f,
+-1.350541667e-03f, -1.349310293e-03f, -1.348076657e-03f, -1.346840761e-03f, -1.345602606e-03f, -1.344362196e-03f, -1.343119532e-03f, -1.341874617e-03f, -1.340627453e-03f, -1.339378043e-03f,
+-1.338126388e-03f, -1.336872491e-03f, -1.335616354e-03f, -1.334357980e-03f, -1.333097370e-03f, -1.331834528e-03f, -1.330569455e-03f, -1.329302153e-03f, -1.328032626e-03f, -1.326760876e-03f,
+-1.325486903e-03f, -1.324210712e-03f, -1.322932305e-03f, -1.321651683e-03f, -1.320368849e-03f, -1.319083805e-03f, -1.317796554e-03f, -1.316507098e-03f, -1.315215440e-03f, -1.313921581e-03f,
+-1.312625525e-03f, -1.311327273e-03f, -1.310026827e-03f, -1.308724192e-03f, -1.307419367e-03f, -1.306112357e-03f, -1.304803163e-03f, -1.303491788e-03f, -1.302178234e-03f, -1.300862503e-03f,
+-1.299544599e-03f, -1.298224523e-03f, -1.296902277e-03f, -1.295577865e-03f, -1.294251289e-03f, -1.292922550e-03f, -1.291591652e-03f, -1.290258596e-03f, -1.288923386e-03f, -1.287586023e-03f,
+-1.286246511e-03f, -1.284904851e-03f, -1.283561046e-03f, -1.282215099e-03f, -1.280867011e-03f, -1.279516786e-03f, -1.278164426e-03f, -1.276809933e-03f, -1.275453309e-03f, -1.274094558e-03f,
+-1.272733681e-03f, -1.271370682e-03f, -1.270005562e-03f, -1.268638324e-03f, -1.267268970e-03f, -1.265897504e-03f, -1.264523927e-03f, -1.263148243e-03f, -1.261770452e-03f, -1.260390559e-03f,
+-1.259008566e-03f, -1.257624474e-03f, -1.256238287e-03f, -1.254850007e-03f, -1.253459636e-03f, -1.252067178e-03f, -1.250672634e-03f, -1.249276008e-03f, -1.247877301e-03f, -1.246476516e-03f,
+-1.245073656e-03f, -1.243668723e-03f, -1.242261721e-03f, -1.240852650e-03f, -1.239441515e-03f, -1.238028317e-03f, -1.236613059e-03f, -1.235195744e-03f, -1.233776373e-03f, -1.232354951e-03f,
+-1.230931479e-03f, -1.229505960e-03f, -1.228078396e-03f, -1.226648791e-03f, -1.225217146e-03f, -1.223783464e-03f, -1.222347748e-03f, -1.220910001e-03f, -1.219470225e-03f, -1.218028422e-03f,
+-1.216584595e-03f, -1.215138748e-03f, -1.213690881e-03f, -1.212240999e-03f, -1.210789104e-03f, -1.209335198e-03f, -1.207879284e-03f, -1.206421364e-03f, -1.204961442e-03f, -1.203499520e-03f,
+-1.202035600e-03f, -1.200569685e-03f, -1.199101778e-03f, -1.197631881e-03f, -1.196159998e-03f, -1.194686130e-03f, -1.193210280e-03f, -1.191732452e-03f, -1.190252647e-03f, -1.188770869e-03f,
+-1.187287120e-03f, -1.185801403e-03f, -1.184313720e-03f, -1.182824074e-03f, -1.181332468e-03f, -1.179838904e-03f, -1.178343386e-03f, -1.176845915e-03f, -1.175346496e-03f, -1.173845129e-03f,
+-1.172341818e-03f, -1.170836566e-03f, -1.169329376e-03f, -1.167820249e-03f, -1.166309189e-03f, -1.164796199e-03f, -1.163281282e-03f, -1.161764439e-03f, -1.160245674e-03f, -1.158724989e-03f,
+-1.157202388e-03f, -1.155677872e-03f, -1.154151445e-03f, -1.152623110e-03f, -1.151092869e-03f, -1.149560725e-03f, -1.148026680e-03f, -1.146490738e-03f, -1.144952901e-03f, -1.143413172e-03f,
+-1.141871554e-03f, -1.140328049e-03f, -1.138782661e-03f, -1.137235392e-03f, -1.135686244e-03f, -1.134135222e-03f, -1.132582326e-03f, -1.131027561e-03f, -1.129470929e-03f, -1.127912433e-03f,
+-1.126352075e-03f, -1.124789859e-03f, -1.123225787e-03f, -1.121659861e-03f, -1.120092086e-03f, -1.118522463e-03f, -1.116950996e-03f, -1.115377687e-03f, -1.113802540e-03f, -1.112225556e-03f,
+-1.110646739e-03f, -1.109066091e-03f, -1.107483616e-03f, -1.105899316e-03f, -1.104313195e-03f, -1.102725254e-03f, -1.101135497e-03f, -1.099543927e-03f, -1.097950546e-03f, -1.096355357e-03f,
+-1.094758364e-03f, -1.093159569e-03f, -1.091558975e-03f, -1.089956584e-03f, -1.088352401e-03f, -1.086746427e-03f, -1.085138665e-03f, -1.083529119e-03f, -1.081917790e-03f, -1.080304683e-03f,
+-1.078689800e-03f, -1.077073144e-03f, -1.075454717e-03f, -1.073834524e-03f, -1.072212565e-03f, -1.070588846e-03f, -1.068963367e-03f, -1.067336133e-03f, -1.065707146e-03f, -1.064076409e-03f,
+-1.062443926e-03f, -1.060809698e-03f, -1.059173729e-03f, -1.057536021e-03f, -1.055896579e-03f, -1.054255404e-03f, -1.052612500e-03f, -1.050967869e-03f, -1.049321515e-03f, -1.047673440e-03f,
+-1.046023648e-03f, -1.044372140e-03f, -1.042718921e-03f, -1.041063994e-03f, -1.039407360e-03f, -1.037749024e-03f, -1.036088988e-03f, -1.034427254e-03f, -1.032763827e-03f, -1.031098709e-03f,
+-1.029431902e-03f, -1.027763411e-03f, -1.026093238e-03f, -1.024421385e-03f, -1.022747857e-03f, -1.021072655e-03f, -1.019395783e-03f, -1.017717244e-03f, -1.016037041e-03f, -1.014355177e-03f,
+-1.012671654e-03f, -1.010986477e-03f, -1.009299647e-03f, -1.007611168e-03f, -1.005921043e-03f, -1.004229275e-03f, -1.002535867e-03f, -1.000840822e-03f, -9.991441425e-04f, -9.974458322e-04f,
+-9.957458940e-04f, -9.940443308e-04f, -9.923411457e-04f, -9.906363417e-04f, -9.889299219e-04f, -9.872218893e-04f, -9.855122469e-04f, -9.838009977e-04f, -9.820881449e-04f, -9.803736915e-04f,
+-9.786576405e-04f, -9.769399951e-04f, -9.752207581e-04f, -9.734999328e-04f, -9.717775222e-04f, -9.700535293e-04f, -9.683279572e-04f, -9.666008090e-04f, -9.648720878e-04f, -9.631417966e-04f,
+-9.614099385e-04f, -9.596765166e-04f, -9.579415340e-04f, -9.562049938e-04f, -9.544668990e-04f, -9.527272528e-04f, -9.509860582e-04f, -9.492433184e-04f, -9.474990364e-04f, -9.457532154e-04f,
+-9.440058584e-04f, -9.422569686e-04f, -9.405065490e-04f, -9.387546029e-04f, -9.370011332e-04f, -9.352461431e-04f, -9.334896358e-04f, -9.317316143e-04f, -9.299720818e-04f, -9.282110414e-04f,
+-9.264484962e-04f, -9.246844494e-04f, -9.229189041e-04f, -9.211518635e-04f, -9.193833306e-04f, -9.176133086e-04f, -9.158418007e-04f, -9.140688100e-04f, -9.122943396e-04f, -9.105183928e-04f,
+-9.087409726e-04f, -9.069620822e-04f, -9.051817248e-04f, -9.033999036e-04f, -9.016166216e-04f, -8.998318821e-04f, -8.980456882e-04f, -8.962580431e-04f, -8.944689500e-04f, -8.926784120e-04f,
+-8.908864323e-04f, -8.890930142e-04f, -8.872981607e-04f, -8.855018751e-04f, -8.837041605e-04f, -8.819050202e-04f, -8.801044573e-04f, -8.783024750e-04f, -8.764990766e-04f, -8.746942651e-04f,
+-8.728880439e-04f, -8.710804161e-04f, -8.692713849e-04f, -8.674609535e-04f, -8.656491252e-04f, -8.638359031e-04f, -8.620212904e-04f, -8.602052905e-04f, -8.583879064e-04f, -8.565691414e-04f,
+-8.547489988e-04f, -8.529274817e-04f, -8.511045934e-04f, -8.492803372e-04f, -8.474547161e-04f, -8.456277336e-04f, -8.437993927e-04f, -8.419696968e-04f, -8.401386491e-04f, -8.383062528e-04f,
+-8.364725111e-04f, -8.346374274e-04f, -8.328010049e-04f, -8.309632468e-04f, -8.291241563e-04f, -8.272837367e-04f, -8.254419914e-04f, -8.235989234e-04f, -8.217545362e-04f, -8.199088329e-04f,
+-8.180618169e-04f, -8.162134913e-04f, -8.143638595e-04f, -8.125129247e-04f, -8.106606903e-04f, -8.088071594e-04f, -8.069523353e-04f, -8.050962214e-04f, -8.032388210e-04f, -8.013801372e-04f,
+-7.995201734e-04f, -7.976589328e-04f, -7.957964189e-04f, -7.939326348e-04f, -7.920675838e-04f, -7.902012693e-04f, -7.883336945e-04f, -7.864648628e-04f, -7.845947773e-04f, -7.827234416e-04f,
+-7.808508588e-04f, -7.789770322e-04f, -7.771019652e-04f, -7.752256611e-04f, -7.733481232e-04f, -7.714693548e-04f, -7.695893592e-04f, -7.677081397e-04f, -7.658256997e-04f, -7.639420425e-04f,
+-7.620571714e-04f, -7.601710898e-04f, -7.582838009e-04f, -7.563953081e-04f, -7.545056147e-04f, -7.526147241e-04f, -7.507226396e-04f, -7.488293646e-04f, -7.469349023e-04f, -7.450392561e-04f,
+-7.431424294e-04f, -7.412444255e-04f, -7.393452477e-04f, -7.374448995e-04f, -7.355433841e-04f, -7.336407049e-04f, -7.317368653e-04f, -7.298318686e-04f, -7.279257182e-04f, -7.260184174e-04f,
+-7.241099696e-04f, -7.222003782e-04f, -7.202896465e-04f, -7.183777779e-04f, -7.164647758e-04f, -7.145506435e-04f, -7.126353844e-04f, -7.107190019e-04f, -7.088014994e-04f, -7.068828802e-04f,
+-7.049631477e-04f, -7.030423053e-04f, -7.011203564e-04f, -6.991973043e-04f, -6.972731525e-04f, -6.953479044e-04f, -6.934215633e-04f, -6.914941326e-04f, -6.895656157e-04f, -6.876360160e-04f,
+-6.857053369e-04f, -6.837735819e-04f, -6.818407542e-04f, -6.799068574e-04f, -6.779718947e-04f, -6.760358697e-04f, -6.740987857e-04f, -6.721606461e-04f, -6.702214543e-04f, -6.682812139e-04f,
+-6.663399280e-04f, -6.643976003e-04f, -6.624542340e-04f, -6.605098327e-04f, -6.585643997e-04f, -6.566179384e-04f, -6.546704523e-04f, -6.527219449e-04f, -6.507724194e-04f, -6.488218794e-04f,
+-6.468703283e-04f, -6.449177695e-04f, -6.429642064e-04f, -6.410096426e-04f, -6.390540813e-04f, -6.370975261e-04f, -6.351399804e-04f, -6.331814476e-04f, -6.312219311e-04f, -6.292614345e-04f,
+-6.272999612e-04f, -6.253375145e-04f, -6.233740980e-04f, -6.214097151e-04f, -6.194443693e-04f, -6.174780639e-04f, -6.155108025e-04f, -6.135425885e-04f, -6.115734254e-04f, -6.096033166e-04f,
+-6.076322655e-04f, -6.056602758e-04f, -6.036873507e-04f, -6.017134938e-04f, -5.997387085e-04f, -5.977629983e-04f, -5.957863667e-04f, -5.938088171e-04f, -5.918303530e-04f, -5.898509779e-04f,
+-5.878706952e-04f, -5.858895084e-04f, -5.839074211e-04f, -5.819244366e-04f, -5.799405585e-04f, -5.779557902e-04f, -5.759701352e-04f, -5.739835971e-04f, -5.719961792e-04f, -5.700078850e-04f,
+-5.680187182e-04f, -5.660286820e-04f, -5.640377801e-04f, -5.620460159e-04f, -5.600533930e-04f, -5.580599147e-04f, -5.560655846e-04f, -5.540704062e-04f, -5.520743830e-04f, -5.500775185e-04f,
+-5.480798162e-04f, -5.460812796e-04f, -5.440819121e-04f, -5.420817174e-04f, -5.400806988e-04f, -5.380788600e-04f, -5.360762043e-04f, -5.340727354e-04f, -5.320684567e-04f, -5.300633717e-04f,
+-5.280574840e-04f, -5.260507971e-04f, -5.240433144e-04f, -5.220350395e-04f, -5.200259759e-04f, -5.180161272e-04f, -5.160054968e-04f, -5.139940882e-04f, -5.119819050e-04f, -5.099689508e-04f,
+-5.079552289e-04f, -5.059407430e-04f, -5.039254966e-04f, -5.019094932e-04f, -4.998927363e-04f, -4.978752295e-04f, -4.958569763e-04f, -4.938379802e-04f, -4.918182447e-04f, -4.897977734e-04f,
+-4.877765699e-04f, -4.857546376e-04f, -4.837319801e-04f, -4.817086009e-04f, -4.796845036e-04f, -4.776596917e-04f, -4.756341688e-04f, -4.736079383e-04f, -4.715810038e-04f, -4.695533690e-04f,
+-4.675250372e-04f, -4.654960122e-04f, -4.634662973e-04f, -4.614358962e-04f, -4.594048124e-04f, -4.573730494e-04f, -4.553406109e-04f, -4.533075003e-04f, -4.512737212e-04f, -4.492392772e-04f,
+-4.472041718e-04f, -4.451684086e-04f, -4.431319911e-04f, -4.410949229e-04f, -4.390572075e-04f, -4.370188486e-04f, -4.349798496e-04f, -4.329402141e-04f, -4.308999457e-04f, -4.288590480e-04f,
+-4.268175244e-04f, -4.247753787e-04f, -4.227326143e-04f, -4.206892348e-04f, -4.186452437e-04f, -4.166006448e-04f, -4.145554414e-04f, -4.125096372e-04f, -4.104632357e-04f, -4.084162406e-04f,
+-4.063686554e-04f, -4.043204836e-04f, -4.022717289e-04f, -4.002223948e-04f, -3.981724848e-04f, -3.961220027e-04f, -3.940709518e-04f, -3.920193359e-04f, -3.899671585e-04f, -3.879144232e-04f,
+-3.858611335e-04f, -3.838072931e-04f, -3.817529055e-04f, -3.796979743e-04f, -3.776425030e-04f, -3.755864954e-04f, -3.735299549e-04f, -3.714728851e-04f, -3.694152896e-04f, -3.673571721e-04f,
+-3.652985360e-04f, -3.632393851e-04f, -3.611797228e-04f, -3.591195527e-04f, -3.570588785e-04f, -3.549977038e-04f, -3.529360321e-04f, -3.508738670e-04f, -3.488112121e-04f, -3.467480711e-04f,
+-3.446844474e-04f, -3.426203447e-04f, -3.405557667e-04f, -3.384907168e-04f, -3.364251987e-04f, -3.343592160e-04f, -3.322927723e-04f, -3.302258711e-04f, -3.281585161e-04f, -3.260907109e-04f,
+-3.240224591e-04f, -3.219537643e-04f, -3.198846300e-04f, -3.178150599e-04f, -3.157450576e-04f, -3.136746266e-04f, -3.116037707e-04f, -3.095324933e-04f, -3.074607982e-04f, -3.053886888e-04f,
+-3.033161688e-04f, -3.012432419e-04f, -2.991699115e-04f, -2.970961814e-04f, -2.950220551e-04f, -2.929475363e-04f, -2.908726285e-04f, -2.887973353e-04f, -2.867216604e-04f, -2.846456074e-04f,
+-2.825691799e-04f, -2.804923814e-04f, -2.784152157e-04f, -2.763376863e-04f, -2.742597968e-04f, -2.721815508e-04f, -2.701029520e-04f, -2.680240040e-04f, -2.659447103e-04f, -2.638650747e-04f,
+-2.617851006e-04f, -2.597047918e-04f, -2.576241517e-04f, -2.555431842e-04f, -2.534618927e-04f, -2.513802809e-04f, -2.492983524e-04f, -2.472161108e-04f, -2.451335597e-04f, -2.430507028e-04f,
+-2.409675436e-04f, -2.388840859e-04f, -2.368003331e-04f, -2.347162890e-04f, -2.326319571e-04f, -2.305473410e-04f, -2.284624445e-04f, -2.263772710e-04f, -2.242918243e-04f, -2.222061079e-04f,
+-2.201201254e-04f, -2.180338806e-04f, -2.159473769e-04f, -2.138606181e-04f, -2.117736077e-04f, -2.096863494e-04f, -2.075988467e-04f, -2.055111034e-04f, -2.034231230e-04f, -2.013349092e-04f,
+-1.992464655e-04f, -1.971577957e-04f, -1.950689033e-04f, -1.929797919e-04f, -1.908904652e-04f, -1.888009268e-04f, -1.867111803e-04f, -1.846212293e-04f, -1.825310775e-04f, -1.804407285e-04f,
+-1.783501860e-04f, -1.762594534e-04f, -1.741685346e-04f, -1.720774330e-04f, -1.699861523e-04f, -1.678946962e-04f, -1.658030683e-04f, -1.637112721e-04f, -1.616193113e-04f, -1.595271896e-04f,
+-1.574349106e-04f, -1.553424779e-04f, -1.532498950e-04f, -1.511571658e-04f, -1.490642936e-04f, -1.469712823e-04f, -1.448781354e-04f, -1.427848566e-04f, -1.406914494e-04f, -1.385979175e-04f,
+-1.365042646e-04f, -1.344104942e-04f, -1.323166100e-04f, -1.302226156e-04f, -1.281285146e-04f, -1.260343106e-04f, -1.239400074e-04f, -1.218456084e-04f, -1.197511174e-04f, -1.176565379e-04f,
+-1.155618737e-04f, -1.134671282e-04f, -1.113723052e-04f, -1.092774082e-04f, -1.071824409e-04f, -1.050874069e-04f, -1.029923099e-04f, -1.008971534e-04f, -9.880194107e-05f, -9.670667658e-05f,
+-9.461136352e-05f, -9.251600552e-05f, -9.042060621e-05f, -8.832516921e-05f, -8.622969813e-05f, -8.413419662e-05f, -8.203866828e-05f, -7.994311675e-05f, -7.784754565e-05f, -7.575195860e-05f,
+-7.365635923e-05f, -7.156075115e-05f, -6.946513799e-05f, -6.736952338e-05f, -6.527391093e-05f, -6.317830427e-05f, -6.108270702e-05f, -5.898712281e-05f, -5.689155525e-05f, -5.479600796e-05f,
+-5.270048457e-05f, -5.060498870e-05f, -4.850952396e-05f, -4.641409399e-05f, -4.431870239e-05f, -4.222335279e-05f, -4.012804881e-05f, -3.803279406e-05f, -3.593759218e-05f, -3.384244676e-05f,
+-3.174736144e-05f, -2.965233984e-05f, -2.755738556e-05f, -2.546250223e-05f, -2.336769346e-05f, -2.127296287e-05f, -1.917831408e-05f, -1.708375071e-05f, -1.498927636e-05f, -1.289489466e-05f,
+-1.080060921e-05f, -8.706423645e-06f, -6.612341565e-06f, -4.518366587e-06f, -2.424502325e-06f, -3.307523924e-07f, 1.762879599e-06f, 3.856390035e-06f, 5.949775306e-06f, 8.043031800e-06f,
+1.013615590e-05f, 1.222914401e-05f, 1.432199251e-05f, 1.641469778e-05f, 1.850725623e-05f, 2.059966424e-05f, 2.269191821e-05f, 2.478401452e-05f, 2.687594957e-05f, 2.896771976e-05f,
+3.105932147e-05f, 3.315075110e-05f, 3.524200504e-05f, 3.733307969e-05f, 3.942397145e-05f, 4.151467671e-05f, 4.360519187e-05f, 4.569551332e-05f, 4.778563746e-05f, 4.987556070e-05f,
+5.196527942e-05f, 5.405479003e-05f, 5.614408894e-05f, 5.823317253e-05f, 6.032203721e-05f, 6.241067938e-05f, 6.449909545e-05f, 6.658728182e-05f, 6.867523488e-05f, 7.076295105e-05f,
+7.285042673e-05f, 7.493765833e-05f, 7.702464224e-05f, 7.911137488e-05f, 8.119785266e-05f, 8.328407197e-05f, 8.537002924e-05f, 8.745572087e-05f, 8.954114326e-05f, 9.162629284e-05f,
+9.371116600e-05f, 9.579575917e-05f, 9.788006876e-05f, 9.996409117e-05f, 1.020478228e-04f, 1.041312601e-04f, 1.062143995e-04f, 1.082972374e-04f, 1.103797702e-04f, 1.124619943e-04f,
+1.145439061e-04f, 1.166255021e-04f, 1.187067787e-04f, 1.207877322e-04f, 1.228683592e-04f, 1.249486561e-04f, 1.270286192e-04f, 1.291082450e-04f, 1.311875299e-04f, 1.332664703e-04f,
+1.353450627e-04f, 1.374233035e-04f, 1.395011891e-04f, 1.415787160e-04f, 1.436558805e-04f, 1.457326792e-04f, 1.478091084e-04f, 1.498851645e-04f, 1.519608441e-04f, 1.540361434e-04f,
+1.561110591e-04f, 1.581855874e-04f, 1.602597249e-04f, 1.623334680e-04f, 1.644068131e-04f, 1.664797566e-04f, 1.685522951e-04f, 1.706244248e-04f, 1.726961424e-04f, 1.747674441e-04f,
+1.768383265e-04f, 1.789087861e-04f, 1.809788191e-04f, 1.830484222e-04f, 1.851175917e-04f, 1.871863241e-04f, 1.892546158e-04f, 1.913224633e-04f, 1.933898631e-04f, 1.954568115e-04f,
+1.975233051e-04f, 1.995893403e-04f, 2.016549135e-04f, 2.037200212e-04f, 2.057846599e-04f, 2.078488261e-04f, 2.099125161e-04f, 2.119757264e-04f, 2.140384535e-04f, 2.161006939e-04f,
+2.181624441e-04f, 2.202237004e-04f, 2.222844594e-04f, 2.243447175e-04f, 2.264044711e-04f, 2.284637169e-04f, 2.305224511e-04f, 2.325806704e-04f, 2.346383711e-04f, 2.366955497e-04f,
+2.387522028e-04f, 2.408083267e-04f, 2.428639181e-04f, 2.449189732e-04f, 2.469734887e-04f, 2.490274610e-04f, 2.510808865e-04f, 2.531337618e-04f, 2.551860833e-04f, 2.572378476e-04f,
+2.592890511e-04f, 2.613396902e-04f, 2.633897616e-04f, 2.654392616e-04f, 2.674881868e-04f, 2.695365337e-04f, 2.715842986e-04f, 2.736314783e-04f, 2.756780690e-04f, 2.777240674e-04f,
+2.797694699e-04f, 2.818142730e-04f, 2.838584732e-04f, 2.859020671e-04f, 2.879450511e-04f, 2.899874217e-04f, 2.920291755e-04f, 2.940703089e-04f, 2.961108184e-04f, 2.981507006e-04f,
+3.001899519e-04f, 3.022285689e-04f, 3.042665481e-04f, 3.063038860e-04f, 3.083405791e-04f, 3.103766240e-04f, 3.124120171e-04f, 3.144467549e-04f, 3.164808340e-04f, 3.185142510e-04f,
+3.205470022e-04f, 3.225790844e-04f, 3.246104939e-04f, 3.266412273e-04f, 3.286712811e-04f, 3.307006519e-04f, 3.327293362e-04f, 3.347573305e-04f, 3.367846313e-04f, 3.388112353e-04f,
+3.408371389e-04f, 3.428623386e-04f, 3.448868311e-04f, 3.469106128e-04f, 3.489336803e-04f, 3.509560301e-04f, 3.529776588e-04f, 3.549985629e-04f, 3.570187390e-04f, 3.590381836e-04f,
+3.610568933e-04f, 3.630748646e-04f, 3.650920941e-04f, 3.671085783e-04f, 3.691243138e-04f, 3.711392972e-04f, 3.731535249e-04f, 3.751669936e-04f, 3.771796999e-04f, 3.791916402e-04f,
+3.812028112e-04f, 3.832132095e-04f, 3.852228315e-04f, 3.872316739e-04f, 3.892397332e-04f, 3.912470060e-04f, 3.932534890e-04f, 3.952591785e-04f, 3.972640714e-04f, 3.992681640e-04f,
+4.012714530e-04f, 4.032739351e-04f, 4.052756066e-04f, 4.072764644e-04f, 4.092765049e-04f, 4.112757247e-04f, 4.132741204e-04f, 4.152716886e-04f, 4.172684260e-04f, 4.192643290e-04f,
+4.212593944e-04f, 4.232536186e-04f, 4.252469984e-04f, 4.272395302e-04f, 4.292312108e-04f, 4.312220366e-04f, 4.332120044e-04f, 4.352011107e-04f, 4.371893521e-04f, 4.391767253e-04f,
+4.411632269e-04f, 4.431488534e-04f, 4.451336015e-04f, 4.471174678e-04f, 4.491004490e-04f, 4.510825416e-04f, 4.530637423e-04f, 4.550440477e-04f, 4.570234545e-04f, 4.590019592e-04f,
+4.609795585e-04f, 4.629562490e-04f, 4.649320274e-04f, 4.669068903e-04f, 4.688808344e-04f, 4.708538562e-04f, 4.728259524e-04f, 4.747971197e-04f, 4.767673547e-04f, 4.787366540e-04f,
+4.807050144e-04f, 4.826724324e-04f, 4.846389047e-04f, 4.866044280e-04f, 4.885689989e-04f, 4.905326141e-04f, 4.924952702e-04f, 4.944569639e-04f, 4.964176918e-04f, 4.983774507e-04f,
+5.003362372e-04f, 5.022940480e-04f, 5.042508797e-04f, 5.062067289e-04f, 5.081615925e-04f, 5.101154671e-04f, 5.120683492e-04f, 5.140202357e-04f, 5.159711232e-04f, 5.179210084e-04f,
+5.198698879e-04f, 5.218177585e-04f, 5.237646168e-04f, 5.257104596e-04f, 5.276552836e-04f, 5.295990853e-04f, 5.315418616e-04f, 5.334836091e-04f, 5.354243246e-04f, 5.373640046e-04f,
+5.393026461e-04f, 5.412402455e-04f, 5.431767997e-04f, 5.451123054e-04f, 5.470467593e-04f, 5.489801581e-04f, 5.509124985e-04f, 5.528437772e-04f, 5.547739910e-04f, 5.567031366e-04f,
+5.586312107e-04f, 5.605582100e-04f, 5.624841312e-04f, 5.644089712e-04f, 5.663327266e-04f, 5.682553942e-04f, 5.701769707e-04f, 5.720974528e-04f, 5.740168374e-04f, 5.759351210e-04f,
+5.778523005e-04f, 5.797683727e-04f, 5.816833342e-04f, 5.835971819e-04f, 5.855099125e-04f, 5.874215227e-04f, 5.893320093e-04f, 5.912413691e-04f, 5.931495988e-04f, 5.950566951e-04f,
+5.969626550e-04f, 5.988674751e-04f, 6.007711522e-04f, 6.026736830e-04f, 6.045750644e-04f, 6.064752932e-04f, 6.083743660e-04f, 6.102722798e-04f, 6.121690312e-04f, 6.140646171e-04f,
+6.159590343e-04f, 6.178522795e-04f, 6.197443495e-04f, 6.216352412e-04f, 6.235249513e-04f, 6.254134767e-04f, 6.273008141e-04f, 6.291869603e-04f, 6.310719122e-04f, 6.329556666e-04f,
+6.348382202e-04f, 6.367195699e-04f, 6.385997125e-04f, 6.404786448e-04f, 6.423563637e-04f, 6.442328659e-04f, 6.461081484e-04f, 6.479822078e-04f, 6.498550411e-04f, 6.517266451e-04f,
+6.535970166e-04f, 6.554661524e-04f, 6.573340494e-04f, 6.592007045e-04f, 6.610661144e-04f, 6.629302761e-04f, 6.647931863e-04f, 6.666548420e-04f, 6.685152399e-04f, 6.703743769e-04f,
+6.722322500e-04f, 6.740888559e-04f, 6.759441914e-04f, 6.777982536e-04f, 6.796510392e-04f, 6.815025451e-04f, 6.833527682e-04f, 6.852017054e-04f, 6.870493535e-04f, 6.888957094e-04f,
+6.907407700e-04f, 6.925845322e-04f, 6.944269928e-04f, 6.962681488e-04f, 6.981079971e-04f, 6.999465345e-04f, 7.017837579e-04f, 7.036196643e-04f, 7.054542505e-04f, 7.072875134e-04f,
+7.091194500e-04f, 7.109500572e-04f, 7.127793318e-04f, 7.146072707e-04f, 7.164338710e-04f, 7.182591295e-04f, 7.200830432e-04f, 7.219056088e-04f, 7.237268235e-04f, 7.255466841e-04f,
+7.273651875e-04f, 7.291823307e-04f, 7.309981107e-04f, 7.328125242e-04f, 7.346255684e-04f, 7.364372401e-04f, 7.382475363e-04f, 7.400564539e-04f, 7.418639899e-04f, 7.436701412e-04f,
+7.454749049e-04f, 7.472782778e-04f, 7.490802568e-04f, 7.508808391e-04f, 7.526800215e-04f, 7.544778011e-04f, 7.562741747e-04f, 7.580691394e-04f, 7.598626921e-04f, 7.616548298e-04f,
+7.634455495e-04f, 7.652348483e-04f, 7.670227230e-04f, 7.688091706e-04f, 7.705941882e-04f, 7.723777728e-04f, 7.741599213e-04f, 7.759406307e-04f, 7.777198981e-04f, 7.794977205e-04f,
+7.812740949e-04f, 7.830490182e-04f, 7.848224875e-04f, 7.865944998e-04f, 7.883650522e-04f, 7.901341416e-04f, 7.919017651e-04f, 7.936679197e-04f, 7.954326024e-04f, 7.971958103e-04f,
+7.989575404e-04f, 8.007177897e-04f, 8.024765554e-04f, 8.042338343e-04f, 8.059896237e-04f, 8.077439204e-04f, 8.094967217e-04f, 8.112480244e-04f, 8.129978258e-04f, 8.147461228e-04f,
+8.164929125e-04f, 8.182381920e-04f, 8.199819584e-04f, 8.217242086e-04f, 8.234649399e-04f, 8.252041492e-04f, 8.269418337e-04f, 8.286779904e-04f, 8.304126164e-04f, 8.321457089e-04f,
+8.338772648e-04f, 8.356072814e-04f, 8.373357556e-04f, 8.390626846e-04f, 8.407880655e-04f, 8.425118954e-04f, 8.442341714e-04f, 8.459548906e-04f, 8.476740502e-04f, 8.493916472e-04f,
+8.511076788e-04f, 8.528221420e-04f, 8.545350341e-04f, 8.562463521e-04f, 8.579560932e-04f, 8.596642545e-04f, 8.613708331e-04f, 8.630758263e-04f, 8.647792310e-04f, 8.664810446e-04f,
+8.681812640e-04f, 8.698798865e-04f, 8.715769093e-04f, 8.732723294e-04f, 8.749661441e-04f, 8.766583505e-04f, 8.783489457e-04f, 8.800379270e-04f, 8.817252915e-04f, 8.834110365e-04f,
+8.850951589e-04f, 8.867776562e-04f, 8.884585253e-04f, 8.901377636e-04f, 8.918153682e-04f, 8.934913363e-04f, 8.951656650e-04f, 8.968383517e-04f, 8.985093935e-04f, 9.001787876e-04f,
+9.018465312e-04f, 9.035126215e-04f, 9.051770558e-04f, 9.068398312e-04f, 9.085009449e-04f, 9.101603943e-04f, 9.118181765e-04f, 9.134742887e-04f, 9.151287283e-04f, 9.167814923e-04f,
+9.184325781e-04f, 9.200819829e-04f, 9.217297039e-04f, 9.233757385e-04f, 9.250200837e-04f, 9.266627370e-04f, 9.283036955e-04f, 9.299429565e-04f, 9.315805173e-04f, 9.332163751e-04f,
+9.348505272e-04f, 9.364829709e-04f, 9.381137034e-04f, 9.397427221e-04f, 9.413700242e-04f, 9.429956070e-04f, 9.446194678e-04f, 9.462416038e-04f, 9.478620124e-04f, 9.494806909e-04f,
+9.510976365e-04f, 9.527128467e-04f, 9.543263185e-04f, 9.559380495e-04f, 9.575480369e-04f, 9.591562780e-04f, 9.607627701e-04f, 9.623675106e-04f, 9.639704967e-04f, 9.655717259e-04f,
+9.671711954e-04f, 9.687689025e-04f, 9.703648447e-04f, 9.719590193e-04f, 9.735514235e-04f, 9.751420548e-04f, 9.767309105e-04f, 9.783179880e-04f, 9.799032845e-04f, 9.814867975e-04f,
+9.830685244e-04f, 9.846484625e-04f, 9.862266091e-04f, 9.878029617e-04f, 9.893775176e-04f, 9.909502742e-04f, 9.925212289e-04f, 9.940903791e-04f, 9.956577221e-04f, 9.972232554e-04f,
+9.987869764e-04f, 1.000348882e-03f, 1.001908971e-03f, 1.003467239e-03f, 1.005023685e-03f, 1.006578305e-03f, 1.008131097e-03f, 1.009682059e-03f, 1.011231188e-03f, 1.012778481e-03f,
+1.014323936e-03f, 1.015867551e-03f, 1.017409322e-03f, 1.018949247e-03f, 1.020487323e-03f, 1.022023549e-03f, 1.023557921e-03f, 1.025090437e-03f, 1.026621094e-03f, 1.028149890e-03f,
+1.029676822e-03f, 1.031201889e-03f, 1.032725086e-03f, 1.034246412e-03f, 1.035765864e-03f, 1.037283440e-03f, 1.038799137e-03f, 1.040312952e-03f, 1.041824884e-03f, 1.043334929e-03f,
+1.044843086e-03f, 1.046349351e-03f, 1.047853722e-03f, 1.049356196e-03f, 1.050856772e-03f, 1.052355447e-03f, 1.053852217e-03f, 1.055347081e-03f, 1.056840037e-03f, 1.058331081e-03f,
+1.059820211e-03f, 1.061307426e-03f, 1.062792721e-03f, 1.064276095e-03f, 1.065757546e-03f, 1.067237071e-03f, 1.068714667e-03f, 1.070190332e-03f, 1.071664064e-03f, 1.073135860e-03f,
+1.074605718e-03f, 1.076073635e-03f, 1.077539610e-03f, 1.079003638e-03f, 1.080465719e-03f, 1.081925849e-03f, 1.083384026e-03f, 1.084840249e-03f, 1.086294513e-03f, 1.087746818e-03f,
+1.089197160e-03f, 1.090645538e-03f, 1.092091948e-03f, 1.093536389e-03f, 1.094978857e-03f, 1.096419352e-03f, 1.097857869e-03f, 1.099294408e-03f, 1.100728965e-03f, 1.102161538e-03f,
+1.103592125e-03f, 1.105020724e-03f, 1.106447332e-03f, 1.107871946e-03f, 1.109294565e-03f, 1.110715186e-03f, 1.112133806e-03f, 1.113550424e-03f, 1.114965037e-03f, 1.116377642e-03f,
+1.117788238e-03f, 1.119196822e-03f, 1.120603392e-03f, 1.122007945e-03f, 1.123410479e-03f, 1.124810992e-03f, 1.126209481e-03f, 1.127605945e-03f, 1.129000380e-03f, 1.130392785e-03f,
+1.131783158e-03f, 1.133171495e-03f, 1.134557795e-03f, 1.135942056e-03f, 1.137324274e-03f, 1.138704449e-03f, 1.140082577e-03f, 1.141458656e-03f, 1.142832685e-03f, 1.144204660e-03f,
+1.145574580e-03f, 1.146942442e-03f, 1.148308244e-03f, 1.149671985e-03f, 1.151033660e-03f, 1.152393269e-03f, 1.153750809e-03f, 1.155106279e-03f, 1.156459674e-03f, 1.157810994e-03f,
+1.159160237e-03f, 1.160507399e-03f, 1.161852479e-03f, 1.163195475e-03f, 1.164536384e-03f, 1.165875205e-03f, 1.167211934e-03f, 1.168546570e-03f, 1.169879111e-03f, 1.171209554e-03f,
+1.172537897e-03f, 1.173864139e-03f, 1.175188276e-03f, 1.176510307e-03f, 1.177830230e-03f, 1.179148042e-03f, 1.180463741e-03f, 1.181777326e-03f, 1.183088793e-03f, 1.184398141e-03f,
+1.185705368e-03f, 1.187010471e-03f, 1.188313449e-03f, 1.189614299e-03f, 1.190913019e-03f, 1.192209607e-03f, 1.193504061e-03f, 1.194796378e-03f, 1.196086558e-03f, 1.197374596e-03f,
+1.198660492e-03f, 1.199944244e-03f, 1.201225849e-03f, 1.202505305e-03f, 1.203782610e-03f, 1.205057761e-03f, 1.206330758e-03f, 1.207601598e-03f, 1.208870278e-03f, 1.210136797e-03f,
+1.211401152e-03f, 1.212663342e-03f, 1.213923365e-03f, 1.215181218e-03f, 1.216436899e-03f, 1.217690407e-03f, 1.218941738e-03f, 1.220190893e-03f, 1.221437867e-03f, 1.222682659e-03f,
+1.223925268e-03f, 1.225165690e-03f, 1.226403925e-03f, 1.227639970e-03f, 1.228873823e-03f, 1.230105482e-03f, 1.231334945e-03f, 1.232562210e-03f, 1.233787275e-03f, 1.235010138e-03f,
+1.236230797e-03f, 1.237449250e-03f, 1.238665496e-03f, 1.239879531e-03f, 1.241091355e-03f, 1.242300965e-03f, 1.243508359e-03f, 1.244713535e-03f, 1.245916492e-03f, 1.247117227e-03f,
+1.248315738e-03f, 1.249512024e-03f, 1.250706082e-03f, 1.251897911e-03f, 1.253087509e-03f, 1.254274873e-03f, 1.255460002e-03f, 1.256642894e-03f, 1.257823547e-03f, 1.259001959e-03f,
+1.260178128e-03f, 1.261352052e-03f, 1.262523729e-03f, 1.263693158e-03f, 1.264860337e-03f, 1.266025263e-03f, 1.267187935e-03f, 1.268348351e-03f, 1.269506508e-03f, 1.270662406e-03f,
+1.271816042e-03f, 1.272967414e-03f, 1.274116521e-03f, 1.275263361e-03f, 1.276407931e-03f, 1.277550231e-03f, 1.278690257e-03f, 1.279828009e-03f, 1.280963484e-03f, 1.282096681e-03f,
+1.283227597e-03f, 1.284356232e-03f, 1.285482582e-03f, 1.286606647e-03f, 1.287728425e-03f, 1.288847913e-03f, 1.289965110e-03f, 1.291080014e-03f, 1.292192623e-03f, 1.293302936e-03f,
+1.294410950e-03f, 1.295516665e-03f, 1.296620077e-03f, 1.297721186e-03f, 1.298819989e-03f, 1.299916486e-03f, 1.301010673e-03f, 1.302102550e-03f, 1.303192114e-03f, 1.304279364e-03f,
+1.305364298e-03f, 1.306446914e-03f, 1.307527211e-03f, 1.308605186e-03f, 1.309680839e-03f, 1.310754167e-03f, 1.311825169e-03f, 1.312893842e-03f, 1.313960186e-03f, 1.315024198e-03f,
+1.316085877e-03f, 1.317145221e-03f, 1.318202229e-03f, 1.319256898e-03f, 1.320309227e-03f, 1.321359214e-03f, 1.322406859e-03f, 1.323452158e-03f, 1.324495110e-03f, 1.325535714e-03f,
+1.326573968e-03f, 1.327609870e-03f, 1.328643419e-03f, 1.329674612e-03f, 1.330703449e-03f, 1.331729928e-03f, 1.332754047e-03f, 1.333775804e-03f, 1.334795198e-03f, 1.335812227e-03f,
+1.336826889e-03f, 1.337839184e-03f, 1.338849108e-03f, 1.339856662e-03f, 1.340861842e-03f, 1.341864648e-03f, 1.342865078e-03f, 1.343863130e-03f, 1.344858803e-03f, 1.345852094e-03f,
+1.346843004e-03f, 1.347831529e-03f, 1.348817669e-03f, 1.349801421e-03f, 1.350782784e-03f, 1.351761758e-03f, 1.352738339e-03f, 1.353712527e-03f, 1.354684320e-03f, 1.355653716e-03f,
+1.356620715e-03f, 1.357585313e-03f, 1.358547511e-03f, 1.359507306e-03f, 1.360464696e-03f, 1.361419681e-03f, 1.362372259e-03f, 1.363322428e-03f, 1.364270187e-03f, 1.365215534e-03f,
+1.366158467e-03f, 1.367098986e-03f, 1.368037089e-03f, 1.368972774e-03f, 1.369906040e-03f, 1.370836886e-03f, 1.371765309e-03f, 1.372691308e-03f, 1.373614883e-03f, 1.374536031e-03f,
+1.375454751e-03f, 1.376371041e-03f, 1.377284901e-03f, 1.378196328e-03f, 1.379105322e-03f, 1.380011880e-03f, 1.380916002e-03f, 1.381817685e-03f, 1.382716930e-03f, 1.383613733e-03f,
+1.384508094e-03f, 1.385400012e-03f, 1.386289484e-03f, 1.387176510e-03f, 1.388061088e-03f, 1.388943217e-03f, 1.389822895e-03f, 1.390700120e-03f, 1.391574893e-03f, 1.392447211e-03f,
+1.393317072e-03f, 1.394184476e-03f, 1.395049422e-03f, 1.395911906e-03f, 1.396771930e-03f, 1.397629490e-03f, 1.398484586e-03f, 1.399337217e-03f, 1.400187380e-03f, 1.401035075e-03f,
+1.401880301e-03f, 1.402723056e-03f, 1.403563338e-03f, 1.404401147e-03f, 1.405236481e-03f, 1.406069339e-03f, 1.406899719e-03f, 1.407727621e-03f, 1.408553043e-03f, 1.409375983e-03f,
+1.410196440e-03f, 1.411014414e-03f, 1.411829903e-03f, 1.412642905e-03f, 1.413453419e-03f, 1.414261444e-03f, 1.415066980e-03f, 1.415870023e-03f, 1.416670574e-03f, 1.417468631e-03f,
+1.418264193e-03f, 1.419057259e-03f, 1.419847826e-03f, 1.420635895e-03f, 1.421421464e-03f, 1.422204532e-03f, 1.422985097e-03f, 1.423763158e-03f, 1.424538714e-03f, 1.425311764e-03f,
+1.426082307e-03f, 1.426850341e-03f, 1.427615866e-03f, 1.428378879e-03f, 1.429139381e-03f, 1.429897369e-03f, 1.430652843e-03f, 1.431405802e-03f, 1.432156243e-03f, 1.432904167e-03f,
+1.433649572e-03f, 1.434392456e-03f, 1.435132820e-03f, 1.435870661e-03f, 1.436605978e-03f, 1.437338770e-03f, 1.438069037e-03f, 1.438796777e-03f, 1.439521988e-03f, 1.440244671e-03f,
+1.440964823e-03f, 1.441682444e-03f, 1.442397532e-03f, 1.443110087e-03f, 1.443820107e-03f, 1.444527591e-03f, 1.445232539e-03f, 1.445934949e-03f, 1.446634819e-03f, 1.447332150e-03f,
+1.448026940e-03f, 1.448719187e-03f, 1.449408891e-03f, 1.450096051e-03f, 1.450780666e-03f, 1.451462734e-03f, 1.452142255e-03f, 1.452819228e-03f, 1.453493651e-03f, 1.454165523e-03f,
+1.454834845e-03f, 1.455501613e-03f, 1.456165829e-03f, 1.456827489e-03f, 1.457486595e-03f, 1.458143144e-03f, 1.458797135e-03f, 1.459448568e-03f, 1.460097441e-03f, 1.460743754e-03f,
+1.461387506e-03f, 1.462028696e-03f, 1.462667322e-03f, 1.463303383e-03f, 1.463936880e-03f, 1.464567810e-03f, 1.465196174e-03f, 1.465821969e-03f, 1.466445195e-03f, 1.467065852e-03f,
+1.467683937e-03f, 1.468299451e-03f, 1.468912392e-03f, 1.469522759e-03f, 1.470130552e-03f, 1.470735770e-03f, 1.471338411e-03f, 1.471938475e-03f, 1.472535961e-03f, 1.473130868e-03f,
+1.473723195e-03f, 1.474312941e-03f, 1.474900106e-03f, 1.475484688e-03f, 1.476066687e-03f, 1.476646101e-03f, 1.477222931e-03f, 1.477797175e-03f, 1.478368831e-03f, 1.478937901e-03f,
+1.479504382e-03f, 1.480068273e-03f, 1.480629575e-03f, 1.481188285e-03f, 1.481744404e-03f, 1.482297930e-03f, 1.482848863e-03f, 1.483397202e-03f, 1.483942946e-03f, 1.484486094e-03f,
+1.485026645e-03f, 1.485564600e-03f, 1.486099956e-03f, 1.486632713e-03f, 1.487162870e-03f, 1.487690427e-03f, 1.488215383e-03f, 1.488737737e-03f, 1.489257488e-03f, 1.489774635e-03f,
+1.490289179e-03f, 1.490801117e-03f, 1.491310450e-03f, 1.491817176e-03f, 1.492321296e-03f, 1.492822807e-03f, 1.493321710e-03f, 1.493818003e-03f, 1.494311686e-03f, 1.494802759e-03f,
+1.495291220e-03f, 1.495777069e-03f, 1.496260306e-03f, 1.496740928e-03f, 1.497218937e-03f, 1.497694331e-03f, 1.498167109e-03f, 1.498637271e-03f, 1.499104816e-03f, 1.499569744e-03f,
+1.500032053e-03f, 1.500491744e-03f, 1.500948815e-03f, 1.501403266e-03f, 1.501855096e-03f, 1.502304305e-03f, 1.502750892e-03f, 1.503194856e-03f, 1.503636197e-03f, 1.504074914e-03f,
+1.504511007e-03f, 1.504944474e-03f, 1.505375316e-03f, 1.505803532e-03f, 1.506229120e-03f, 1.506652082e-03f, 1.507072415e-03f, 1.507490120e-03f, 1.507905195e-03f, 1.508317641e-03f,
+1.508727456e-03f, 1.509134640e-03f, 1.509539194e-03f, 1.509941115e-03f, 1.510340403e-03f, 1.510737059e-03f, 1.511131080e-03f, 1.511522468e-03f, 1.511911221e-03f, 1.512297339e-03f,
+1.512680821e-03f, 1.513061667e-03f, 1.513439877e-03f, 1.513815449e-03f, 1.514188383e-03f, 1.514558679e-03f, 1.514926337e-03f, 1.515291355e-03f, 1.515653733e-03f, 1.516013472e-03f,
+1.516370569e-03f, 1.516725026e-03f, 1.517076841e-03f, 1.517426014e-03f, 1.517772545e-03f, 1.518116433e-03f, 1.518457677e-03f, 1.518796277e-03f, 1.519132234e-03f, 1.519465545e-03f,
+1.519796212e-03f, 1.520124233e-03f, 1.520449608e-03f, 1.520772337e-03f, 1.521092419e-03f, 1.521409854e-03f, 1.521724641e-03f, 1.522036781e-03f, 1.522346272e-03f, 1.522653114e-03f,
+1.522957308e-03f, 1.523258852e-03f, 1.523557746e-03f, 1.523853989e-03f, 1.524147583e-03f, 1.524438525e-03f, 1.524726816e-03f, 1.525012455e-03f, 1.525295443e-03f, 1.525575778e-03f,
+1.525853461e-03f, 1.526128490e-03f, 1.526400866e-03f, 1.526670589e-03f, 1.526937658e-03f, 1.527202072e-03f, 1.527463832e-03f, 1.527722937e-03f, 1.527979387e-03f, 1.528233182e-03f,
+1.528484320e-03f, 1.528732803e-03f, 1.528978630e-03f, 1.529221800e-03f, 1.529462313e-03f, 1.529700169e-03f, 1.529935368e-03f, 1.530167909e-03f, 1.530397792e-03f, 1.530625017e-03f,
+1.530849584e-03f, 1.531071492e-03f, 1.531290742e-03f, 1.531507332e-03f, 1.531721263e-03f, 1.531932535e-03f, 1.532141147e-03f, 1.532347099e-03f, 1.532550390e-03f, 1.532751022e-03f,
+1.532948993e-03f, 1.533144303e-03f, 1.533336953e-03f, 1.533526941e-03f, 1.533714269e-03f, 1.533898934e-03f, 1.534080939e-03f, 1.534260281e-03f, 1.534436962e-03f, 1.534610980e-03f,
+1.534782336e-03f, 1.534951030e-03f, 1.535117062e-03f, 1.535280431e-03f, 1.535441137e-03f, 1.535599180e-03f, 1.535754560e-03f, 1.535907277e-03f, 1.536057331e-03f, 1.536204721e-03f,
+1.536349448e-03f, 1.536491512e-03f, 1.536630912e-03f, 1.536767648e-03f, 1.536901720e-03f, 1.537033128e-03f, 1.537161873e-03f, 1.537287953e-03f, 1.537411369e-03f, 1.537532121e-03f,
+1.537650209e-03f, 1.537765633e-03f, 1.537878392e-03f, 1.537988487e-03f, 1.538095918e-03f, 1.538200684e-03f, 1.538302785e-03f, 1.538402222e-03f, 1.538498995e-03f, 1.538593103e-03f,
+1.538684546e-03f, 1.538773325e-03f, 1.538859440e-03f, 1.538942889e-03f, 1.539023675e-03f, 1.539101795e-03f, 1.539177252e-03f, 1.539250043e-03f, 1.539320171e-03f, 1.539387633e-03f,
+1.539452432e-03f, 1.539514566e-03f, 1.539574036e-03f, 1.539630841e-03f, 1.539684982e-03f, 1.539736460e-03f, 1.539785273e-03f, 1.539831422e-03f, 1.539874907e-03f, 1.539915728e-03f,
+1.539953885e-03f, 1.539989379e-03f, 1.540022209e-03f, 1.540052375e-03f, 1.540079878e-03f, 1.540104718e-03f, 1.540126895e-03f, 1.540146408e-03f, 1.540163258e-03f, 1.540177446e-03f,
+1.540188971e-03f, 1.540197833e-03f, 1.540204033e-03f, 1.540207570e-03f, 1.540208445e-03f, 1.540206659e-03f, 1.540202210e-03f, 1.540195100e-03f, 1.540185328e-03f, 1.540172894e-03f,
+1.540157800e-03f, 1.540140044e-03f, 1.540119628e-03f, 1.540096551e-03f, 1.540070813e-03f, 1.540042415e-03f, 1.540011357e-03f, 1.539977639e-03f, 1.539941262e-03f, 1.539902225e-03f,
+1.539860529e-03f, 1.539816174e-03f, 1.539769160e-03f, 1.539719487e-03f, 1.539667156e-03f, 1.539612168e-03f, 1.539554521e-03f, 1.539494217e-03f, 1.539431255e-03f, 1.539365636e-03f,
+1.539297361e-03f, 1.539226429e-03f, 1.539152841e-03f, 1.539076597e-03f, 1.538997697e-03f, 1.538916142e-03f, 1.538831931e-03f, 1.538745066e-03f, 1.538655546e-03f, 1.538563372e-03f,
+1.538468545e-03f, 1.538371063e-03f, 1.538270929e-03f, 1.538168141e-03f, 1.538062701e-03f, 1.537954608e-03f, 1.537843864e-03f, 1.537730468e-03f, 1.537614421e-03f, 1.537495723e-03f,
+1.537374374e-03f, 1.537250375e-03f, 1.537123727e-03f, 1.536994429e-03f, 1.536862482e-03f, 1.536727886e-03f, 1.536590642e-03f, 1.536450750e-03f, 1.536308210e-03f, 1.536163023e-03f,
+1.536015190e-03f, 1.535864710e-03f, 1.535711584e-03f, 1.535555813e-03f, 1.535397397e-03f, 1.535236336e-03f, 1.535072631e-03f, 1.534906282e-03f, 1.534737290e-03f, 1.534565655e-03f,
+1.534391377e-03f, 1.534214457e-03f, 1.534034896e-03f, 1.533852694e-03f, 1.533667851e-03f, 1.533480368e-03f, 1.533290245e-03f, 1.533097483e-03f, 1.532902083e-03f, 1.532704044e-03f,
+1.532503367e-03f, 1.532300053e-03f, 1.532094103e-03f, 1.531885516e-03f, 1.531674293e-03f, 1.531460435e-03f, 1.531243943e-03f, 1.531024816e-03f, 1.530803056e-03f, 1.530578663e-03f,
+1.530351637e-03f, 1.530121979e-03f, 1.529889689e-03f, 1.529654769e-03f, 1.529417218e-03f, 1.529177038e-03f, 1.528934228e-03f, 1.528688789e-03f, 1.528440723e-03f, 1.528190029e-03f,
+1.527936708e-03f, 1.527680760e-03f, 1.527422187e-03f, 1.527160989e-03f, 1.526897166e-03f, 1.526630719e-03f, 1.526361649e-03f, 1.526089956e-03f, 1.525815641e-03f, 1.525538705e-03f,
+1.525259147e-03f, 1.524976970e-03f, 1.524692172e-03f, 1.524404756e-03f, 1.524114722e-03f, 1.523822070e-03f, 1.523526801e-03f, 1.523228915e-03f, 1.522928414e-03f, 1.522625298e-03f,
+1.522319567e-03f, 1.522011223e-03f, 1.521700266e-03f, 1.521386697e-03f, 1.521070516e-03f, 1.520751724e-03f, 1.520430322e-03f, 1.520106310e-03f, 1.519779690e-03f, 1.519450461e-03f,
+1.519118625e-03f, 1.518784183e-03f, 1.518447135e-03f, 1.518107481e-03f, 1.517765223e-03f, 1.517420361e-03f, 1.517072897e-03f, 1.516722830e-03f, 1.516370161e-03f, 1.516014892e-03f,
+1.515657023e-03f, 1.515296555e-03f, 1.514933489e-03f, 1.514567824e-03f, 1.514199563e-03f, 1.513828706e-03f, 1.513455254e-03f, 1.513079207e-03f, 1.512700566e-03f, 1.512319333e-03f,
+1.511935507e-03f, 1.511549091e-03f, 1.511160084e-03f, 1.510768487e-03f, 1.510374301e-03f, 1.509977527e-03f, 1.509578167e-03f, 1.509176220e-03f, 1.508771687e-03f, 1.508364570e-03f,
+1.507954869e-03f, 1.507542585e-03f, 1.507127719e-03f, 1.506710272e-03f, 1.506290245e-03f, 1.505867638e-03f, 1.505442453e-03f, 1.505014690e-03f, 1.504584350e-03f, 1.504151434e-03f,
+1.503715943e-03f, 1.503277879e-03f, 1.502837241e-03f, 1.502394030e-03f, 1.501948248e-03f, 1.501499896e-03f, 1.501048974e-03f, 1.500595484e-03f, 1.500139426e-03f, 1.499680801e-03f,
+1.499219610e-03f, 1.498755855e-03f, 1.498289535e-03f, 1.497820653e-03f, 1.497349208e-03f, 1.496875203e-03f, 1.496398637e-03f, 1.495919512e-03f, 1.495437829e-03f, 1.494953589e-03f,
+1.494466793e-03f, 1.493977442e-03f, 1.493485536e-03f, 1.492991077e-03f, 1.492494066e-03f, 1.491994504e-03f, 1.491492391e-03f, 1.490987729e-03f, 1.490480519e-03f, 1.489970762e-03f,
+1.489458459e-03f, 1.488943611e-03f, 1.488426219e-03f, 1.487906283e-03f, 1.487383806e-03f, 1.486858788e-03f, 1.486331230e-03f, 1.485801133e-03f, 1.485268498e-03f, 1.484733327e-03f,
+1.484195620e-03f, 1.483655378e-03f, 1.483112603e-03f, 1.482567296e-03f, 1.482019457e-03f, 1.481469088e-03f, 1.480916190e-03f, 1.480360764e-03f, 1.479802811e-03f, 1.479242332e-03f,
+1.478679329e-03f, 1.478113802e-03f, 1.477545753e-03f, 1.476975182e-03f, 1.476402091e-03f, 1.475826481e-03f, 1.475248353e-03f, 1.474667708e-03f, 1.474084548e-03f, 1.473498873e-03f,
+1.472910685e-03f, 1.472319984e-03f, 1.471726773e-03f, 1.471131052e-03f, 1.470532822e-03f, 1.469932084e-03f, 1.469328841e-03f, 1.468723092e-03f, 1.468114839e-03f, 1.467504084e-03f,
+1.466890827e-03f, 1.466275070e-03f, 1.465656813e-03f, 1.465036059e-03f, 1.464412808e-03f, 1.463787062e-03f, 1.463158821e-03f, 1.462528087e-03f, 1.461894861e-03f, 1.461259145e-03f,
+1.460620940e-03f, 1.459980246e-03f, 1.459337066e-03f, 1.458691400e-03f, 1.458043250e-03f, 1.457392617e-03f, 1.456739501e-03f, 1.456083906e-03f, 1.455425831e-03f, 1.454765278e-03f,
+1.454102249e-03f, 1.453436744e-03f, 1.452768765e-03f, 1.452098313e-03f, 1.451425390e-03f, 1.450749997e-03f, 1.450072134e-03f, 1.449391804e-03f, 1.448709008e-03f, 1.448023747e-03f,
+1.447336022e-03f, 1.446645835e-03f, 1.445953187e-03f, 1.445258080e-03f, 1.444560514e-03f, 1.443860491e-03f, 1.443158013e-03f, 1.442453080e-03f, 1.441745694e-03f, 1.441035857e-03f,
+1.440323570e-03f, 1.439608834e-03f, 1.438891651e-03f, 1.438172022e-03f, 1.437449948e-03f, 1.436725431e-03f, 1.435998472e-03f, 1.435269072e-03f, 1.434537234e-03f, 1.433802958e-03f,
+1.433066245e-03f, 1.432327098e-03f, 1.431585517e-03f, 1.430841505e-03f, 1.430095061e-03f, 1.429346189e-03f, 1.428594889e-03f, 1.427841163e-03f, 1.427085011e-03f, 1.426326437e-03f,
+1.425565440e-03f, 1.424802023e-03f, 1.424036187e-03f, 1.423267934e-03f, 1.422497264e-03f, 1.421724180e-03f, 1.420948683e-03f, 1.420170773e-03f, 1.419390454e-03f, 1.418607726e-03f,
+1.417822591e-03f, 1.417035050e-03f, 1.416245105e-03f, 1.415452757e-03f, 1.414658008e-03f, 1.413860859e-03f, 1.413061312e-03f, 1.412259369e-03f, 1.411455030e-03f, 1.410648297e-03f,
+1.409839173e-03f, 1.409027658e-03f, 1.408213754e-03f, 1.407397462e-03f, 1.406578785e-03f, 1.405757723e-03f, 1.404934278e-03f, 1.404108452e-03f, 1.403280247e-03f, 1.402449663e-03f,
+1.401616703e-03f, 1.400781367e-03f, 1.399943659e-03f, 1.399103578e-03f, 1.398261127e-03f, 1.397416308e-03f, 1.396569122e-03f, 1.395719570e-03f, 1.394867654e-03f, 1.394013376e-03f,
+1.393156737e-03f, 1.392297740e-03f, 1.391436385e-03f, 1.390572674e-03f, 1.389706609e-03f, 1.388838192e-03f, 1.387967424e-03f, 1.387094306e-03f, 1.386218841e-03f, 1.385341030e-03f,
+1.384460875e-03f, 1.383578377e-03f, 1.382693538e-03f, 1.381806360e-03f, 1.380916844e-03f, 1.380024992e-03f, 1.379130806e-03f, 1.378234287e-03f, 1.377335437e-03f, 1.376434258e-03f,
+1.375530751e-03f, 1.374624919e-03f, 1.373716762e-03f, 1.372806283e-03f, 1.371893483e-03f, 1.370978365e-03f, 1.370060928e-03f, 1.369141177e-03f, 1.368219111e-03f, 1.367294733e-03f,
+1.366368044e-03f, 1.365439047e-03f, 1.364507743e-03f, 1.363574134e-03f, 1.362638221e-03f, 1.361700007e-03f, 1.360759492e-03f, 1.359816680e-03f, 1.358871570e-03f, 1.357924167e-03f,
+1.356974470e-03f, 1.356022482e-03f, 1.355068204e-03f, 1.354111639e-03f, 1.353152789e-03f, 1.352191654e-03f, 1.351228237e-03f, 1.350262539e-03f, 1.349294563e-03f, 1.348324310e-03f,
+1.347351782e-03f, 1.346376981e-03f, 1.345399908e-03f, 1.344420566e-03f, 1.343438956e-03f, 1.342455080e-03f, 1.341468940e-03f, 1.340480537e-03f, 1.339489874e-03f, 1.338496953e-03f,
+1.337501775e-03f, 1.336504342e-03f, 1.335504656e-03f, 1.334502718e-03f, 1.333498532e-03f, 1.332492097e-03f, 1.331483418e-03f, 1.330472494e-03f, 1.329459329e-03f, 1.328443923e-03f,
+1.327426280e-03f, 1.326406400e-03f, 1.325384286e-03f, 1.324359940e-03f, 1.323333363e-03f, 1.322304558e-03f, 1.321273525e-03f, 1.320240268e-03f, 1.319204788e-03f, 1.318167087e-03f,
+1.317127167e-03f, 1.316085030e-03f, 1.315040678e-03f, 1.313994112e-03f, 1.312945335e-03f, 1.311894349e-03f, 1.310841155e-03f, 1.309785755e-03f, 1.308728152e-03f, 1.307668348e-03f,
+1.306606344e-03f, 1.305542142e-03f, 1.304475744e-03f, 1.303407153e-03f, 1.302336370e-03f, 1.301263397e-03f, 1.300188236e-03f, 1.299110889e-03f, 1.298031359e-03f, 1.296949646e-03f,
+1.295865754e-03f, 1.294779684e-03f, 1.293691438e-03f, 1.292601018e-03f, 1.291508426e-03f, 1.290413664e-03f, 1.289316735e-03f, 1.288217640e-03f, 1.287116381e-03f, 1.286012960e-03f,
+1.284907379e-03f, 1.283799641e-03f, 1.282689747e-03f, 1.281577699e-03f, 1.280463500e-03f, 1.279347152e-03f, 1.278228656e-03f, 1.277108014e-03f, 1.275985229e-03f, 1.274860303e-03f,
+1.273733238e-03f, 1.272604035e-03f, 1.271472697e-03f, 1.270339227e-03f, 1.269203625e-03f, 1.268065895e-03f, 1.266926037e-03f, 1.265784056e-03f, 1.264639951e-03f, 1.263493726e-03f,
+1.262345383e-03f, 1.261194923e-03f, 1.260042350e-03f, 1.258887664e-03f, 1.257730868e-03f, 1.256571965e-03f, 1.255410956e-03f, 1.254247843e-03f, 1.253082629e-03f, 1.251915316e-03f,
+1.250745905e-03f, 1.249574400e-03f, 1.248400801e-03f, 1.247225112e-03f, 1.246047334e-03f, 1.244867470e-03f, 1.243685522e-03f, 1.242501492e-03f, 1.241315381e-03f, 1.240127193e-03f,
+1.238936929e-03f, 1.237744592e-03f, 1.236550184e-03f, 1.235353707e-03f, 1.234155162e-03f, 1.232954554e-03f, 1.231751882e-03f, 1.230547150e-03f, 1.229340361e-03f, 1.228131515e-03f,
+1.226920616e-03f, 1.225707665e-03f, 1.224492665e-03f, 1.223275618e-03f, 1.222056526e-03f, 1.220835392e-03f, 1.219612217e-03f, 1.218387004e-03f, 1.217159756e-03f, 1.215930473e-03f,
+1.214699159e-03f, 1.213465816e-03f, 1.212230446e-03f, 1.210993052e-03f, 1.209753635e-03f, 1.208512198e-03f, 1.207268743e-03f, 1.206023272e-03f, 1.204775788e-03f, 1.203526293e-03f,
+1.202274789e-03f, 1.201021278e-03f, 1.199765763e-03f, 1.198508247e-03f, 1.197248730e-03f, 1.195987216e-03f, 1.194723707e-03f, 1.193458206e-03f, 1.192190714e-03f, 1.190921233e-03f,
+1.189649767e-03f, 1.188376317e-03f, 1.187100886e-03f, 1.185823476e-03f, 1.184544089e-03f, 1.183262728e-03f, 1.181979395e-03f, 1.180694092e-03f, 1.179406822e-03f, 1.178117587e-03f,
+1.176826390e-03f, 1.175533232e-03f, 1.174238116e-03f, 1.172941045e-03f, 1.171642020e-03f, 1.170341045e-03f, 1.169038121e-03f, 1.167733251e-03f, 1.166426437e-03f, 1.165117681e-03f,
+1.163806987e-03f, 1.162494356e-03f, 1.161179791e-03f, 1.159863293e-03f, 1.158544867e-03f, 1.157224513e-03f, 1.155902234e-03f, 1.154578033e-03f, 1.153251912e-03f, 1.151923874e-03f,
+1.150593920e-03f, 1.149262054e-03f, 1.147928277e-03f, 1.146592592e-03f, 1.145255002e-03f, 1.143915509e-03f, 1.142574115e-03f, 1.141230823e-03f, 1.139885636e-03f, 1.138538555e-03f,
+1.137189583e-03f, 1.135838722e-03f, 1.134485975e-03f, 1.133131345e-03f, 1.131774834e-03f, 1.130416444e-03f, 1.129056178e-03f, 1.127694038e-03f, 1.126330027e-03f, 1.124964147e-03f,
+1.123596400e-03f, 1.122226790e-03f, 1.120855318e-03f, 1.119481987e-03f, 1.118106800e-03f, 1.116729759e-03f, 1.115350866e-03f, 1.113970124e-03f, 1.112587536e-03f, 1.111203104e-03f,
+1.109816830e-03f, 1.108428717e-03f, 1.107038768e-03f, 1.105646984e-03f, 1.104253369e-03f, 1.102857925e-03f, 1.101460655e-03f, 1.100061561e-03f, 1.098660645e-03f, 1.097257910e-03f,
+1.095853359e-03f, 1.094446994e-03f, 1.093038818e-03f, 1.091628833e-03f, 1.090217042e-03f, 1.088803447e-03f, 1.087388051e-03f, 1.085970856e-03f, 1.084551865e-03f, 1.083131081e-03f,
+1.081708506e-03f, 1.080284142e-03f, 1.078857993e-03f, 1.077430060e-03f, 1.076000347e-03f, 1.074568856e-03f, 1.073135589e-03f, 1.071700549e-03f, 1.070263739e-03f, 1.068825161e-03f,
+1.067384818e-03f, 1.065942712e-03f, 1.064498846e-03f, 1.063053223e-03f, 1.061605845e-03f, 1.060156715e-03f, 1.058705835e-03f, 1.057253208e-03f, 1.055798837e-03f, 1.054342724e-03f,
+1.052884872e-03f, 1.051425284e-03f, 1.049963961e-03f, 1.048500907e-03f, 1.047036125e-03f, 1.045569617e-03f, 1.044101385e-03f, 1.042631432e-03f, 1.041159761e-03f, 1.039686375e-03f,
+1.038211276e-03f, 1.036734467e-03f, 1.035255950e-03f, 1.033775728e-03f, 1.032293805e-03f, 1.030810181e-03f, 1.029324861e-03f, 1.027837846e-03f, 1.026349140e-03f, 1.024858745e-03f,
+1.023366664e-03f, 1.021872899e-03f, 1.020377453e-03f, 1.018880329e-03f, 1.017381530e-03f, 1.015881057e-03f, 1.014378915e-03f, 1.012875105e-03f, 1.011369631e-03f, 1.009862494e-03f,
+1.008353698e-03f, 1.006843245e-03f, 1.005331139e-03f, 1.003817381e-03f, 1.002301975e-03f, 1.000784922e-03f, 9.992662272e-04f, 9.977458915e-04f, 9.962239182e-04f, 9.947003100e-04f,
+9.931750696e-04f, 9.916481997e-04f, 9.901197031e-04f, 9.885895824e-04f, 9.870578405e-04f, 9.855244801e-04f, 9.839895039e-04f, 9.824529146e-04f, 9.809147150e-04f, 9.793749079e-04f,
+9.778334961e-04f, 9.762904821e-04f, 9.747458690e-04f, 9.731996593e-04f, 9.716518558e-04f, 9.701024614e-04f, 9.685514788e-04f, 9.669989107e-04f, 9.654447599e-04f, 9.638890293e-04f,
+9.623317216e-04f, 9.607728395e-04f, 9.592123859e-04f, 9.576503635e-04f, 9.560867752e-04f, 9.545216237e-04f, 9.529549118e-04f, 9.513866423e-04f, 9.498168181e-04f, 9.482454419e-04f,
+9.466725164e-04f, 9.450980447e-04f, 9.435220293e-04f, 9.419444733e-04f, 9.403653793e-04f, 9.387847501e-04f, 9.372025887e-04f, 9.356188978e-04f, 9.340336803e-04f, 9.324469390e-04f,
+9.308586766e-04f, 9.292688961e-04f, 9.276776003e-04f, 9.260847920e-04f, 9.244904741e-04f, 9.228946493e-04f, 9.212973206e-04f, 9.196984908e-04f, 9.180981627e-04f, 9.164963393e-04f,
+9.148930232e-04f, 9.132882175e-04f, 9.116819249e-04f, 9.100741483e-04f, 9.084648907e-04f, 9.068541547e-04f, 9.052419434e-04f, 9.036282596e-04f, 9.020131062e-04f, 9.003964860e-04f,
+8.987784019e-04f, 8.971588568e-04f, 8.955378536e-04f, 8.939153952e-04f, 8.922914844e-04f, 8.906661242e-04f, 8.890393174e-04f, 8.874110669e-04f, 8.857813757e-04f, 8.841502466e-04f,
+8.825176825e-04f, 8.808836864e-04f, 8.792482611e-04f, 8.776114096e-04f, 8.759731347e-04f, 8.743334394e-04f, 8.726923266e-04f, 8.710497992e-04f, 8.694058601e-04f, 8.677605122e-04f,
+8.661137586e-04f, 8.644656020e-04f, 8.628160455e-04f, 8.611650919e-04f, 8.595127442e-04f, 8.578590054e-04f, 8.562038783e-04f, 8.545473659e-04f, 8.528894712e-04f, 8.512301971e-04f,
+8.495695465e-04f, 8.479075224e-04f, 8.462441278e-04f, 8.445793656e-04f, 8.429132387e-04f, 8.412457501e-04f, 8.395769028e-04f, 8.379066997e-04f, 8.362351438e-04f, 8.345622381e-04f,
+8.328879855e-04f, 8.312123891e-04f, 8.295354517e-04f, 8.278571763e-04f, 8.261775660e-04f, 8.244966237e-04f, 8.228143524e-04f, 8.211307551e-04f, 8.194458347e-04f, 8.177595943e-04f,
+8.160720368e-04f, 8.143831653e-04f, 8.126929827e-04f, 8.110014920e-04f, 8.093086962e-04f, 8.076145983e-04f, 8.059192014e-04f, 8.042225084e-04f, 8.025245224e-04f, 8.008252463e-04f,
+7.991246831e-04f, 7.974228359e-04f, 7.957197077e-04f, 7.940153015e-04f, 7.923096203e-04f, 7.906026672e-04f, 7.888944452e-04f, 7.871849572e-04f, 7.854742063e-04f, 7.837621956e-04f,
+7.820489281e-04f, 7.803344068e-04f, 7.786186347e-04f, 7.769016149e-04f, 7.751833505e-04f, 7.734638444e-04f, 7.717430997e-04f, 7.700211195e-04f, 7.682979068e-04f, 7.665734646e-04f,
+7.648477960e-04f, 7.631209041e-04f, 7.613927919e-04f, 7.596634625e-04f, 7.579329189e-04f, 7.562011641e-04f, 7.544682014e-04f, 7.527340336e-04f, 7.509986639e-04f, 7.492620954e-04f,
+7.475243311e-04f, 7.457853740e-04f, 7.440452274e-04f, 7.423038942e-04f, 7.405613775e-04f, 7.388176804e-04f, 7.370728060e-04f, 7.353267573e-04f, 7.335795375e-04f, 7.318311496e-04f,
+7.300815968e-04f, 7.283308820e-04f, 7.265790085e-04f, 7.248259793e-04f, 7.230717975e-04f, 7.213164662e-04f, 7.195599884e-04f, 7.178023674e-04f, 7.160436062e-04f, 7.142837079e-04f,
+7.125226756e-04f, 7.107605124e-04f, 7.089972215e-04f, 7.072328059e-04f, 7.054672687e-04f, 7.037006132e-04f, 7.019328423e-04f, 7.001639593e-04f, 6.983939672e-04f, 6.966228691e-04f,
+6.948506682e-04f, 6.930773677e-04f, 6.913029705e-04f, 6.895274800e-04f, 6.877508991e-04f, 6.859732311e-04f, 6.841944791e-04f, 6.824146461e-04f, 6.806337354e-04f, 6.788517501e-04f,
+6.770686933e-04f, 6.752845681e-04f, 6.734993778e-04f, 6.717131254e-04f, 6.699258142e-04f, 6.681374472e-04f, 6.663480276e-04f, 6.645575586e-04f, 6.627660433e-04f, 6.609734848e-04f,
+6.591798864e-04f, 6.573852512e-04f, 6.555895824e-04f, 6.537928830e-04f, 6.519951564e-04f, 6.501964056e-04f, 6.483966338e-04f, 6.465958442e-04f, 6.447940399e-04f, 6.429912242e-04f,
+6.411874002e-04f, 6.393825710e-04f, 6.375767399e-04f, 6.357699101e-04f, 6.339620846e-04f, 6.321532668e-04f, 6.303434597e-04f, 6.285326666e-04f, 6.267208907e-04f, 6.249081351e-04f,
+6.230944030e-04f, 6.212796976e-04f, 6.194640222e-04f, 6.176473799e-04f, 6.158297738e-04f, 6.140112073e-04f, 6.121916834e-04f, 6.103712055e-04f, 6.085497766e-04f, 6.067274001e-04f,
+6.049040791e-04f, 6.030798167e-04f, 6.012546163e-04f, 5.994284810e-04f, 5.976014141e-04f, 5.957734187e-04f, 5.939444981e-04f, 5.921146554e-04f, 5.902838939e-04f, 5.884522169e-04f,
+5.866196274e-04f, 5.847861289e-04f, 5.829517243e-04f, 5.811164171e-04f, 5.792802104e-04f, 5.774431075e-04f, 5.756051115e-04f, 5.737662257e-04f, 5.719264533e-04f, 5.700857976e-04f,
+5.682442617e-04f, 5.664018490e-04f, 5.645585627e-04f, 5.627144059e-04f, 5.608693820e-04f, 5.590234941e-04f, 5.571767456e-04f, 5.553291396e-04f, 5.534806794e-04f, 5.516313682e-04f,
+5.497812093e-04f, 5.479302060e-04f, 5.460783614e-04f, 5.442256789e-04f, 5.423721616e-04f, 5.405178128e-04f, 5.386626359e-04f, 5.368066340e-04f, 5.349498103e-04f, 5.330921683e-04f,
+5.312337110e-04f, 5.293744418e-04f, 5.275143639e-04f, 5.256534806e-04f, 5.237917952e-04f, 5.219293108e-04f, 5.200660309e-04f, 5.182019586e-04f, 5.163370972e-04f, 5.144714500e-04f,
+5.126050202e-04f, 5.107378112e-04f, 5.088698261e-04f, 5.070010684e-04f, 5.051315411e-04f, 5.032612477e-04f, 5.013901914e-04f, 4.995183755e-04f, 4.976458032e-04f, 4.957724778e-04f,
+4.938984027e-04f, 4.920235810e-04f, 4.901480161e-04f, 4.882717113e-04f, 4.863946699e-04f, 4.845168950e-04f, 4.826383901e-04f, 4.807591585e-04f, 4.788792033e-04f, 4.769985279e-04f,
+4.751171356e-04f, 4.732350297e-04f, 4.713522134e-04f, 4.694686901e-04f, 4.675844631e-04f, 4.656995357e-04f, 4.638139111e-04f, 4.619275926e-04f, 4.600405837e-04f, 4.581528875e-04f,
+4.562645073e-04f, 4.543754465e-04f, 4.524857084e-04f, 4.505952963e-04f, 4.487042134e-04f, 4.468124632e-04f, 4.449200488e-04f, 4.430269737e-04f, 4.411332410e-04f, 4.392388542e-04f,
+4.373438166e-04f, 4.354481314e-04f, 4.335518019e-04f, 4.316548316e-04f, 4.297572236e-04f, 4.278589814e-04f, 4.259601082e-04f, 4.240606073e-04f, 4.221604821e-04f, 4.202597359e-04f,
+4.183583720e-04f, 4.164563938e-04f, 4.145538045e-04f, 4.126506074e-04f, 4.107468060e-04f, 4.088424036e-04f, 4.069374033e-04f, 4.050318087e-04f, 4.031256230e-04f, 4.012188495e-04f,
+3.993114916e-04f, 3.974035525e-04f, 3.954950358e-04f, 3.935859445e-04f, 3.916762822e-04f, 3.897660521e-04f, 3.878552576e-04f, 3.859439020e-04f, 3.840319886e-04f, 3.821195208e-04f,
+3.802065019e-04f, 3.782929352e-04f, 3.763788241e-04f, 3.744641720e-04f, 3.725489821e-04f, 3.706332579e-04f, 3.687170026e-04f, 3.668002196e-04f, 3.648829122e-04f, 3.629650838e-04f,
+3.610467377e-04f, 3.591278773e-04f, 3.572085060e-04f, 3.552886270e-04f, 3.533682437e-04f, 3.514473595e-04f, 3.495259776e-04f, 3.476041016e-04f, 3.456817347e-04f, 3.437588802e-04f,
+3.418355415e-04f, 3.399117220e-04f, 3.379874251e-04f, 3.360626540e-04f, 3.341374121e-04f, 3.322117028e-04f, 3.302855295e-04f, 3.283588954e-04f, 3.264318040e-04f, 3.245042586e-04f,
+3.225762626e-04f, 3.206478193e-04f, 3.187189321e-04f, 3.167896043e-04f, 3.148598393e-04f, 3.129296405e-04f, 3.109990112e-04f, 3.090679548e-04f, 3.071364747e-04f, 3.052045742e-04f,
+3.032722566e-04f, 3.013395254e-04f, 2.994063839e-04f, 2.974728355e-04f, 2.955388835e-04f, 2.936045313e-04f, 2.916697823e-04f, 2.897346398e-04f, 2.877991072e-04f, 2.858631879e-04f,
+2.839268852e-04f, 2.819902026e-04f, 2.800531433e-04f, 2.781157108e-04f, 2.761779083e-04f, 2.742397394e-04f, 2.723012074e-04f, 2.703623155e-04f, 2.684230673e-04f, 2.664834661e-04f,
+2.645435152e-04f, 2.626032180e-04f, 2.606625779e-04f, 2.587215983e-04f, 2.567802826e-04f, 2.548386340e-04f, 2.528966561e-04f, 2.509543521e-04f, 2.490117255e-04f, 2.470687796e-04f,
+2.451255178e-04f, 2.431819435e-04f, 2.412380601e-04f, 2.392938709e-04f, 2.373493793e-04f, 2.354045886e-04f, 2.334595024e-04f, 2.315141239e-04f, 2.295684565e-04f, 2.276225037e-04f,
+2.256762687e-04f, 2.237297550e-04f, 2.217829660e-04f, 2.198359050e-04f, 2.178885754e-04f, 2.159409806e-04f, 2.139931239e-04f, 2.120450089e-04f, 2.100966387e-04f, 2.081480169e-04f,
+2.061991468e-04f, 2.042500318e-04f, 2.023006752e-04f, 2.003510805e-04f, 1.984012511e-04f, 1.964511902e-04f, 1.945009014e-04f, 1.925503880e-04f, 1.905996533e-04f, 1.886487008e-04f,
+1.866975339e-04f, 1.847461559e-04f, 1.827945701e-04f, 1.808427801e-04f, 1.788907892e-04f, 1.769386008e-04f, 1.749862182e-04f, 1.730336448e-04f, 1.710808841e-04f, 1.691279394e-04f,
+1.671748141e-04f, 1.652215116e-04f, 1.632680353e-04f, 1.613143885e-04f, 1.593605747e-04f, 1.574065972e-04f, 1.554524594e-04f, 1.534981648e-04f, 1.515437166e-04f, 1.495891183e-04f,
+1.476343733e-04f, 1.456794850e-04f, 1.437244567e-04f, 1.417692918e-04f, 1.398139938e-04f, 1.378585660e-04f, 1.359030117e-04f, 1.339473345e-04f, 1.319915376e-04f, 1.300356245e-04f,
+1.280795985e-04f, 1.261234631e-04f, 1.241672216e-04f, 1.222108774e-04f, 1.202544339e-04f, 1.182978944e-04f, 1.163412625e-04f, 1.143845414e-04f, 1.124277346e-04f, 1.104708454e-04f,
+1.085138772e-04f, 1.065568334e-04f, 1.045997174e-04f, 1.026425327e-04f, 1.006852824e-04f, 9.872797018e-05f, 9.677059927e-05f, 9.481317310e-05f, 9.285569504e-05f, 9.089816848e-05f,
+8.894059682e-05f, 8.698298344e-05f, 8.502533172e-05f, 8.306764506e-05f, 8.110992683e-05f, 7.915218043e-05f, 7.719440923e-05f, 7.523661663e-05f, 7.327880601e-05f, 7.132098076e-05f,
+6.936314426e-05f, 6.740529989e-05f, 6.544745104e-05f, 6.348960110e-05f, 6.153175345e-05f, 5.957391147e-05f, 5.761607855e-05f, 5.565825807e-05f, 5.370045342e-05f, 5.174266797e-05f,
+4.978490512e-05f, 4.782716824e-05f, 4.586946072e-05f, 4.391178594e-05f, 4.195414727e-05f, 3.999654812e-05f, 3.803899184e-05f, 3.608148184e-05f, 3.412402148e-05f, 3.216661415e-05f,
+3.020926323e-05f, 2.825197210e-05f, 2.629474414e-05f, 2.433758273e-05f, 2.238049124e-05f, 2.042347307e-05f, 1.846653158e-05f, 1.650967015e-05f, 1.455289217e-05f, 1.259620100e-05f,
+1.063960004e-05f, 8.683092647e-06f, 6.726682207e-06f, 4.770372095e-06f, 2.814165686e-06f, 8.580663563e-07f, -1.097922519e-06f, -3.053797566e-06f, -5.009555409e-06f, -6.965192674e-06f,
+-8.920705989e-06f, -1.087609198e-05f, -1.283134727e-05f, -1.478646850e-05f, -1.674145228e-05f, -1.869629525e-05f, -2.065099403e-05f, -2.260554526e-05f, -2.455994557e-05f, -2.651419158e-05f,
+-2.846827993e-05f, -3.042220724e-05f, -3.237597015e-05f, -3.432956530e-05f, -3.628298930e-05f, -3.823623881e-05f, -4.018931044e-05f, -4.214220084e-05f, -4.409490664e-05f, -4.604742448e-05f,
+-4.799975098e-05f, -4.995188279e-05f, -5.190381654e-05f, -5.385554887e-05f, -5.580707642e-05f, -5.775839582e-05f, -5.970950372e-05f, -6.166039676e-05f, -6.361107156e-05f, -6.556152479e-05f,
+-6.751175306e-05f, -6.946175304e-05f, -7.141152136e-05f, -7.336105465e-05f, -7.531034958e-05f, -7.725940278e-05f, -7.920821089e-05f, -8.115677056e-05f, -8.310507843e-05f, -8.505313116e-05f,
+-8.700092539e-05f, -8.894845777e-05f, -9.089572494e-05f, -9.284272356e-05f, -9.478945028e-05f, -9.673590174e-05f, -9.868207460e-05f, -1.006279655e-04f, -1.025735711e-04f, -1.045188881e-04f,
+-1.064639130e-04f, -1.084086427e-04f, -1.103530736e-04f, -1.122972025e-04f, -1.142410261e-04f, -1.161845409e-04f, -1.181277437e-04f, -1.200706311e-04f, -1.220131998e-04f, -1.239554464e-04f,
+-1.258973675e-04f, -1.278389599e-04f, -1.297802203e-04f, -1.317211452e-04f, -1.336617313e-04f, -1.356019753e-04f, -1.375418740e-04f, -1.394814238e-04f, -1.414206215e-04f, -1.433594639e-04f,
+-1.452979474e-04f, -1.472360689e-04f, -1.491738249e-04f, -1.511112122e-04f, -1.530482274e-04f, -1.549848672e-04f, -1.569211283e-04f, -1.588570073e-04f, -1.607925010e-04f, -1.627276059e-04f,
+-1.646623188e-04f, -1.665966364e-04f, -1.685305552e-04f, -1.704640721e-04f, -1.723971837e-04f, -1.743298867e-04f, -1.762621777e-04f, -1.781940535e-04f, -1.801255107e-04f, -1.820565459e-04f,
+-1.839871560e-04f, -1.859173376e-04f, -1.878470873e-04f, -1.897764019e-04f, -1.917052780e-04f, -1.936337124e-04f, -1.955617017e-04f, -1.974892426e-04f, -1.994163319e-04f, -2.013429661e-04f,
+-2.032691421e-04f, -2.051948565e-04f, -2.071201059e-04f, -2.090448872e-04f, -2.109691970e-04f, -2.128930319e-04f, -2.148163888e-04f, -2.167392643e-04f, -2.186616551e-04f, -2.205835579e-04f,
+-2.225049694e-04f, -2.244258863e-04f, -2.263463054e-04f, -2.282662233e-04f, -2.301856368e-04f, -2.321045425e-04f, -2.340229372e-04f, -2.359408176e-04f, -2.378581804e-04f, -2.397750223e-04f,
+-2.416913401e-04f, -2.436071304e-04f, -2.455223899e-04f, -2.474371155e-04f, -2.493513038e-04f, -2.512649515e-04f, -2.531780553e-04f, -2.550906121e-04f, -2.570026184e-04f, -2.589140711e-04f,
+-2.608249668e-04f, -2.627353023e-04f, -2.646450744e-04f, -2.665542797e-04f, -2.684629149e-04f, -2.703709769e-04f, -2.722784624e-04f, -2.741853680e-04f, -2.760916905e-04f, -2.779974267e-04f,
+-2.799025733e-04f, -2.818071270e-04f, -2.837110846e-04f, -2.856144429e-04f, -2.875171985e-04f, -2.894193482e-04f, -2.913208888e-04f, -2.932218170e-04f, -2.951221295e-04f, -2.970218232e-04f,
+-2.989208947e-04f, -3.008193408e-04f, -3.027171583e-04f, -3.046143439e-04f, -3.065108944e-04f, -3.084068065e-04f, -3.103020770e-04f, -3.121967027e-04f, -3.140906803e-04f, -3.159840066e-04f,
+-3.178766783e-04f, -3.197686922e-04f, -3.216600451e-04f, -3.235507338e-04f, -3.254407550e-04f, -3.273301054e-04f, -3.292187820e-04f, -3.311067813e-04f, -3.329941003e-04f, -3.348807356e-04f,
+-3.367666841e-04f, -3.386519426e-04f, -3.405365078e-04f, -3.424203765e-04f, -3.443035454e-04f, -3.461860115e-04f, -3.480677714e-04f, -3.499488220e-04f, -3.518291600e-04f, -3.537087822e-04f,
+-3.555876854e-04f, -3.574658665e-04f, -3.593433221e-04f, -3.612200492e-04f, -3.630960445e-04f, -3.649713047e-04f, -3.668458268e-04f, -3.687196075e-04f, -3.705926435e-04f, -3.724649318e-04f,
+-3.743364691e-04f, -3.762072523e-04f, -3.780772780e-04f, -3.799465432e-04f, -3.818150447e-04f, -3.836827792e-04f, -3.855497437e-04f, -3.874159348e-04f, -3.892813494e-04f, -3.911459844e-04f,
+-3.930098366e-04f, -3.948729027e-04f, -3.967351797e-04f, -3.985966643e-04f, -4.004573533e-04f, -4.023172437e-04f, -4.041763321e-04f, -4.060346156e-04f, -4.078920908e-04f, -4.097487546e-04f,
+-4.116046039e-04f, -4.134596355e-04f, -4.153138463e-04f, -4.171672330e-04f, -4.190197926e-04f, -4.208715218e-04f, -4.227224176e-04f, -4.245724767e-04f, -4.264216960e-04f, -4.282700724e-04f,
+-4.301176028e-04f, -4.319642839e-04f, -4.338101126e-04f, -4.356550858e-04f, -4.374992004e-04f, -4.393424532e-04f, -4.411848411e-04f, -4.430263609e-04f, -4.448670095e-04f, -4.467067838e-04f,
+-4.485456806e-04f, -4.503836969e-04f, -4.522208294e-04f, -4.540570751e-04f, -4.558924309e-04f, -4.577268936e-04f, -4.595604600e-04f, -4.613931272e-04f, -4.632248919e-04f, -4.650557510e-04f,
+-4.668857015e-04f, -4.687147403e-04f, -4.705428641e-04f, -4.723700700e-04f, -4.741963547e-04f, -4.760217153e-04f, -4.778461485e-04f, -4.796696514e-04f, -4.814922207e-04f, -4.833138535e-04f,
+-4.851345465e-04f, -4.869542968e-04f, -4.887731012e-04f, -4.905909566e-04f, -4.924078599e-04f, -4.942238081e-04f, -4.960387981e-04f, -4.978528268e-04f, -4.996658911e-04f, -5.014779879e-04f,
+-5.032891141e-04f, -5.050992668e-04f, -5.069084427e-04f, -5.087166389e-04f, -5.105238522e-04f, -5.123300796e-04f, -5.141353181e-04f, -5.159395645e-04f, -5.177428159e-04f, -5.195450690e-04f,
+-5.213463210e-04f, -5.231465687e-04f, -5.249458091e-04f, -5.267440390e-04f, -5.285412556e-04f, -5.303374557e-04f, -5.321326363e-04f, -5.339267943e-04f, -5.357199266e-04f, -5.375120304e-04f,
+-5.393031024e-04f, -5.410931397e-04f, -5.428821393e-04f, -5.446700980e-04f, -5.464570130e-04f, -5.482428810e-04f, -5.500276992e-04f, -5.518114645e-04f, -5.535941738e-04f, -5.553758242e-04f,
+-5.571564127e-04f, -5.589359361e-04f, -5.607143916e-04f, -5.624917760e-04f, -5.642680864e-04f, -5.660433197e-04f, -5.678174730e-04f, -5.695905433e-04f, -5.713625275e-04f, -5.731334227e-04f,
+-5.749032258e-04f, -5.766719339e-04f, -5.784395439e-04f, -5.802060529e-04f, -5.819714578e-04f, -5.837357558e-04f, -5.854989437e-04f, -5.872610187e-04f, -5.890219777e-04f, -5.907818178e-04f,
+-5.925405359e-04f, -5.942981291e-04f, -5.960545945e-04f, -5.978099290e-04f, -5.995641297e-04f, -6.013171936e-04f, -6.030691177e-04f, -6.048198992e-04f, -6.065695350e-04f, -6.083180221e-04f,
+-6.100653577e-04f, -6.118115387e-04f, -6.135565622e-04f, -6.153004253e-04f, -6.170431250e-04f, -6.187846584e-04f, -6.205250225e-04f, -6.222642143e-04f, -6.240022310e-04f, -6.257390696e-04f,
+-6.274747272e-04f, -6.292092008e-04f, -6.309424875e-04f, -6.326745843e-04f, -6.344054884e-04f, -6.361351969e-04f, -6.378637067e-04f, -6.395910151e-04f, -6.413171190e-04f, -6.430420156e-04f,
+-6.447657019e-04f, -6.464881750e-04f, -6.482094320e-04f, -6.499294701e-04f, -6.516482863e-04f, -6.533658777e-04f, -6.550822414e-04f, -6.567973745e-04f, -6.585112742e-04f, -6.602239375e-04f,
+-6.619353615e-04f, -6.636455434e-04f, -6.653544802e-04f, -6.670621691e-04f, -6.687686073e-04f, -6.704737917e-04f, -6.721777197e-04f, -6.738803882e-04f, -6.755817944e-04f, -6.772819354e-04f,
+-6.789808084e-04f, -6.806784106e-04f, -6.823747389e-04f, -6.840697907e-04f, -6.857635630e-04f, -6.874560529e-04f, -6.891472577e-04f, -6.908371745e-04f, -6.925258004e-04f, -6.942131326e-04f,
+-6.958991682e-04f, -6.975839044e-04f, -6.992673383e-04f, -7.009494672e-04f, -7.026302882e-04f, -7.043097985e-04f, -7.059879952e-04f, -7.076648755e-04f, -7.093404366e-04f, -7.110146756e-04f,
+-7.126875898e-04f, -7.143591763e-04f, -7.160294324e-04f, -7.176983551e-04f, -7.193659418e-04f, -7.210321895e-04f, -7.226970955e-04f, -7.243606570e-04f, -7.260228712e-04f, -7.276837353e-04f,
+-7.293432465e-04f, -7.310014020e-04f, -7.326581991e-04f, -7.343136348e-04f, -7.359677065e-04f, -7.376204114e-04f, -7.392717467e-04f, -7.409217095e-04f, -7.425702972e-04f, -7.442175070e-04f,
+-7.458633361e-04f, -7.475077817e-04f, -7.491508411e-04f, -7.507925116e-04f, -7.524327902e-04f, -7.540716744e-04f, -7.557091613e-04f, -7.573452482e-04f, -7.589799323e-04f, -7.606132110e-04f,
+-7.622450814e-04f, -7.638755408e-04f, -7.655045865e-04f, -7.671322157e-04f, -7.687584258e-04f, -7.703832140e-04f, -7.720065775e-04f, -7.736285136e-04f, -7.752490196e-04f, -7.768680929e-04f,
+-7.784857306e-04f, -7.801019300e-04f, -7.817166886e-04f, -7.833300034e-04f, -7.849418719e-04f, -7.865522913e-04f, -7.881612590e-04f, -7.897687722e-04f, -7.913748282e-04f, -7.929794244e-04f,
+-7.945825580e-04f, -7.961842264e-04f, -7.977844269e-04f, -7.993831567e-04f, -8.009804133e-04f, -8.025761940e-04f, -8.041704960e-04f, -8.057633167e-04f, -8.073546534e-04f, -8.089445035e-04f,
+-8.105328644e-04f, -8.121197332e-04f, -8.137051074e-04f, -8.152889844e-04f, -8.168713615e-04f, -8.184522359e-04f, -8.200316052e-04f, -8.216094666e-04f, -8.231858175e-04f, -8.247606552e-04f,
+-8.263339772e-04f, -8.279057807e-04f, -8.294760633e-04f, -8.310448221e-04f, -8.326120547e-04f, -8.341777583e-04f, -8.357419304e-04f, -8.373045684e-04f, -8.388656696e-04f, -8.404252315e-04f,
+-8.419832513e-04f, -8.435397266e-04f, -8.450946547e-04f, -8.466480330e-04f, -8.481998589e-04f, -8.497501299e-04f, -8.512988433e-04f, -8.528459965e-04f, -8.543915870e-04f, -8.559356122e-04f,
+-8.574780695e-04f, -8.590189563e-04f, -8.605582700e-04f, -8.620960082e-04f, -8.636321681e-04f, -8.651667473e-04f, -8.666997432e-04f, -8.682311532e-04f, -8.697609748e-04f, -8.712892054e-04f,
+-8.728158425e-04f, -8.743408834e-04f, -8.758643258e-04f, -8.773861670e-04f, -8.789064045e-04f, -8.804250357e-04f, -8.819420582e-04f, -8.834574693e-04f, -8.849712666e-04f, -8.864834476e-04f,
+-8.879940097e-04f, -8.895029504e-04f, -8.910102672e-04f, -8.925159575e-04f, -8.940200190e-04f, -8.955224489e-04f, -8.970232450e-04f, -8.985224046e-04f, -9.000199252e-04f, -9.015158044e-04f,
+-9.030100397e-04f, -9.045026286e-04f, -9.059935686e-04f, -9.074828572e-04f, -9.089704919e-04f, -9.104564703e-04f, -9.119407898e-04f, -9.134234481e-04f, -9.149044426e-04f, -9.163837709e-04f,
+-9.178614306e-04f, -9.193374190e-04f, -9.208117339e-04f, -9.222843728e-04f, -9.237553331e-04f, -9.252246125e-04f, -9.266922086e-04f, -9.281581188e-04f, -9.296223407e-04f, -9.310848719e-04f,
+-9.325457100e-04f, -9.340048526e-04f, -9.354622972e-04f, -9.369180413e-04f, -9.383720827e-04f, -9.398244188e-04f, -9.412750472e-04f, -9.427239656e-04f, -9.441711715e-04f, -9.456166626e-04f,
+-9.470604364e-04f, -9.485024905e-04f, -9.499428225e-04f, -9.513814301e-04f, -9.528183109e-04f, -9.542534624e-04f, -9.556868824e-04f, -9.571185683e-04f, -9.585485179e-04f, -9.599767287e-04f,
+-9.614031984e-04f, -9.628279247e-04f, -9.642509052e-04f, -9.656721374e-04f, -9.670916191e-04f, -9.685093479e-04f, -9.699253214e-04f, -9.713395374e-04f, -9.727519934e-04f, -9.741626871e-04f,
+-9.755716162e-04f, -9.769787784e-04f, -9.783841713e-04f, -9.797877925e-04f, -9.811896398e-04f, -9.825897109e-04f, -9.839880034e-04f, -9.853845149e-04f, -9.867792433e-04f, -9.881721862e-04f,
+-9.895633412e-04f, -9.909527062e-04f, -9.923402787e-04f, -9.937260565e-04f, -9.951100373e-04f, -9.964922188e-04f, -9.978725987e-04f, -9.992511747e-04f, -1.000627945e-03f, -1.002002906e-03f,
+-1.003376057e-03f, -1.004747395e-03f, -1.006116917e-03f, -1.007484622e-03f, -1.008850508e-03f, -1.010214571e-03f, -1.011576810e-03f, -1.012937223e-03f, -1.014295806e-03f, -1.015652559e-03f,
+-1.017007479e-03f, -1.018360563e-03f, -1.019711809e-03f, -1.021061215e-03f, -1.022408780e-03f, -1.023754500e-03f, -1.025098373e-03f, -1.026440397e-03f, -1.027780570e-03f, -1.029118890e-03f,
+-1.030455355e-03f, -1.031789962e-03f, -1.033122709e-03f, -1.034453594e-03f, -1.035782615e-03f, -1.037109769e-03f, -1.038435055e-03f, -1.039758470e-03f, -1.041080011e-03f, -1.042399678e-03f,
+-1.043717467e-03f, -1.045033377e-03f, -1.046347405e-03f, -1.047659549e-03f, -1.048969808e-03f, -1.050278178e-03f, -1.051584657e-03f, -1.052889245e-03f, -1.054191937e-03f, -1.055492733e-03f,
+-1.056791630e-03f, -1.058088626e-03f, -1.059383719e-03f, -1.060676906e-03f, -1.061968186e-03f, -1.063257557e-03f, -1.064545015e-03f, -1.065830560e-03f, -1.067114190e-03f, -1.068395901e-03f,
+-1.069675692e-03f, -1.070953560e-03f, -1.072229505e-03f, -1.073503523e-03f, -1.074775613e-03f, -1.076045772e-03f, -1.077313998e-03f, -1.078580289e-03f, -1.079844644e-03f, -1.081107060e-03f,
+-1.082367535e-03f, -1.083626067e-03f, -1.084882653e-03f, -1.086137293e-03f, -1.087389983e-03f, -1.088640722e-03f, -1.089889508e-03f, -1.091136338e-03f, -1.092381211e-03f, -1.093624124e-03f,
+-1.094865076e-03f, -1.096104065e-03f, -1.097341088e-03f, -1.098576143e-03f, -1.099809229e-03f, -1.101040343e-03f, -1.102269483e-03f, -1.103496648e-03f, -1.104721835e-03f, -1.105945042e-03f,
+-1.107166268e-03f, -1.108385510e-03f, -1.109602767e-03f, -1.110818035e-03f, -1.112031315e-03f, -1.113242602e-03f, -1.114451896e-03f, -1.115659195e-03f, -1.116864495e-03f, -1.118067797e-03f,
+-1.119269097e-03f, -1.120468393e-03f, -1.121665684e-03f, -1.122860968e-03f, -1.124054242e-03f, -1.125245506e-03f, -1.126434756e-03f, -1.127621990e-03f, -1.128807208e-03f, -1.129990407e-03f,
+-1.131171585e-03f, -1.132350740e-03f, -1.133527870e-03f, -1.134702973e-03f, -1.135876048e-03f, -1.137047093e-03f, -1.138216105e-03f, -1.139383082e-03f, -1.140548024e-03f, -1.141710927e-03f,
+-1.142871790e-03f, -1.144030611e-03f, -1.145187389e-03f, -1.146342121e-03f, -1.147494805e-03f, -1.148645440e-03f, -1.149794023e-03f, -1.150940553e-03f, -1.152085029e-03f, -1.153227447e-03f,
+-1.154367807e-03f, -1.155506106e-03f, -1.156642342e-03f, -1.157776515e-03f, -1.158908621e-03f, -1.160038659e-03f, -1.161166627e-03f, -1.162292524e-03f, -1.163416347e-03f, -1.164538095e-03f,
+-1.165657765e-03f, -1.166775357e-03f, -1.167890868e-03f, -1.169004297e-03f, -1.170115641e-03f, -1.171224899e-03f, -1.172332069e-03f, -1.173437149e-03f, -1.174540138e-03f, -1.175641033e-03f,
+-1.176739833e-03f, -1.177836537e-03f, -1.178931141e-03f, -1.180023645e-03f, -1.181114047e-03f, -1.182202345e-03f, -1.183288538e-03f, -1.184372623e-03f, -1.185454598e-03f, -1.186534463e-03f,
+-1.187612214e-03f, -1.188687852e-03f, -1.189761373e-03f, -1.190832776e-03f, -1.191902059e-03f, -1.192969222e-03f, -1.194034260e-03f, -1.195097174e-03f, -1.196157962e-03f, -1.197216621e-03f,
+-1.198273150e-03f, -1.199327548e-03f, -1.200379812e-03f, -1.201429941e-03f, -1.202477933e-03f, -1.203523787e-03f, -1.204567501e-03f, -1.205609073e-03f, -1.206648501e-03f, -1.207685784e-03f,
+-1.208720920e-03f, -1.209753908e-03f, -1.210784745e-03f, -1.211813431e-03f, -1.212839963e-03f, -1.213864340e-03f, -1.214886560e-03f, -1.215906622e-03f, -1.216924524e-03f, -1.217940264e-03f,
+-1.218953840e-03f, -1.219965252e-03f, -1.220974497e-03f, -1.221981574e-03f, -1.222986481e-03f, -1.223989217e-03f, -1.224989779e-03f, -1.225988167e-03f, -1.226984378e-03f, -1.227978412e-03f,
+-1.228970266e-03f, -1.229959940e-03f, -1.230947430e-03f, -1.231932737e-03f, -1.232915857e-03f, -1.233896790e-03f, -1.234875535e-03f, -1.235852088e-03f, -1.236826450e-03f, -1.237798618e-03f,
+-1.238768591e-03f, -1.239736367e-03f, -1.240701945e-03f, -1.241665323e-03f, -1.242626500e-03f, -1.243585474e-03f, -1.244542244e-03f, -1.245496807e-03f, -1.246449163e-03f, -1.247399310e-03f,
+-1.248347247e-03f, -1.249292971e-03f, -1.250236482e-03f, -1.251177778e-03f, -1.252116858e-03f, -1.253053719e-03f, -1.253988361e-03f, -1.254920782e-03f, -1.255850981e-03f, -1.256778955e-03f,
+-1.257704704e-03f, -1.258628226e-03f, -1.259549520e-03f, -1.260468584e-03f, -1.261385416e-03f, -1.262300016e-03f, -1.263212382e-03f, -1.264122511e-03f, -1.265030404e-03f, -1.265936058e-03f,
+-1.266839473e-03f, -1.267740645e-03f, -1.268639575e-03f, -1.269536261e-03f, -1.270430701e-03f, -1.271322894e-03f, -1.272212838e-03f, -1.273100533e-03f, -1.273985976e-03f, -1.274869166e-03f,
+-1.275750102e-03f, -1.276628783e-03f, -1.277505206e-03f, -1.278379372e-03f, -1.279251277e-03f, -1.280120922e-03f, -1.280988304e-03f, -1.281853423e-03f, -1.282716276e-03f, -1.283576862e-03f,
+-1.284435181e-03f, -1.285291231e-03f, -1.286145009e-03f, -1.286996516e-03f, -1.287845750e-03f, -1.288692709e-03f, -1.289537392e-03f, -1.290379798e-03f, -1.291219925e-03f, -1.292057772e-03f,
+-1.292893338e-03f, -1.293726622e-03f, -1.294557621e-03f, -1.295386335e-03f, -1.296212763e-03f, -1.297036903e-03f, -1.297858754e-03f, -1.298678315e-03f, -1.299495584e-03f, -1.300310560e-03f,
+-1.301123242e-03f, -1.301933628e-03f, -1.302741718e-03f, -1.303547510e-03f, -1.304351002e-03f, -1.305152194e-03f, -1.305951084e-03f, -1.306747671e-03f, -1.307541954e-03f, -1.308333931e-03f,
+-1.309123602e-03f, -1.309910964e-03f, -1.310696017e-03f, -1.311478760e-03f, -1.312259191e-03f, -1.313037310e-03f, -1.313813114e-03f, -1.314586603e-03f, -1.315357775e-03f, -1.316126630e-03f,
+-1.316893166e-03f, -1.317657382e-03f, -1.318419276e-03f, -1.319178848e-03f, -1.319936097e-03f, -1.320691020e-03f, -1.321443618e-03f, -1.322193888e-03f, -1.322941830e-03f, -1.323687443e-03f,
+-1.324430725e-03f, -1.325171675e-03f, -1.325910293e-03f, -1.326646576e-03f, -1.327380524e-03f, -1.328112136e-03f, -1.328841410e-03f, -1.329568346e-03f, -1.330292942e-03f, -1.331015197e-03f,
+-1.331735110e-03f, -1.332452680e-03f, -1.333167906e-03f, -1.333880786e-03f, -1.334591321e-03f, -1.335299507e-03f, -1.336005346e-03f, -1.336708834e-03f, -1.337409972e-03f, -1.338108758e-03f,
+-1.338805191e-03f, -1.339499271e-03f, -1.340190995e-03f, -1.340880363e-03f, -1.341567374e-03f, -1.342252027e-03f, -1.342934321e-03f, -1.343614254e-03f, -1.344291826e-03f, -1.344967036e-03f,
+-1.345639883e-03f, -1.346310365e-03f, -1.346978481e-03f, -1.347644232e-03f, -1.348307614e-03f, -1.348968629e-03f, -1.349627273e-03f, -1.350283548e-03f, -1.350937451e-03f, -1.351588981e-03f,
+-1.352238138e-03f, -1.352884920e-03f, -1.353529328e-03f, -1.354171358e-03f, -1.354811012e-03f, -1.355448287e-03f, -1.356083182e-03f, -1.356715698e-03f, -1.357345832e-03f, -1.357973584e-03f,
+-1.358598953e-03f, -1.359221937e-03f, -1.359842537e-03f, -1.360460751e-03f, -1.361076578e-03f, -1.361690017e-03f, -1.362301068e-03f, -1.362909729e-03f, -1.363515999e-03f, -1.364119878e-03f,
+-1.364721364e-03f, -1.365320457e-03f, -1.365917156e-03f, -1.366511460e-03f, -1.367103368e-03f, -1.367692879e-03f, -1.368279992e-03f, -1.368864707e-03f, -1.369447022e-03f, -1.370026937e-03f,
+-1.370604451e-03f, -1.371179562e-03f, -1.371752271e-03f, -1.372322576e-03f, -1.372890476e-03f, -1.373455971e-03f, -1.374019060e-03f, -1.374579741e-03f, -1.375138014e-03f, -1.375693879e-03f,
+-1.376247334e-03f, -1.376798379e-03f, -1.377347012e-03f, -1.377893233e-03f, -1.378437041e-03f, -1.378978436e-03f, -1.379517416e-03f, -1.380053981e-03f, -1.380588130e-03f, -1.381119862e-03f,
+-1.381649176e-03f, -1.382176072e-03f, -1.382700549e-03f, -1.383222606e-03f, -1.383742243e-03f, -1.384259457e-03f, -1.384774250e-03f, -1.385286619e-03f, -1.385796565e-03f, -1.386304087e-03f,
+-1.386809183e-03f, -1.387311853e-03f, -1.387812097e-03f, -1.388309913e-03f, -1.388805302e-03f, -1.389298261e-03f, -1.389788791e-03f, -1.390276891e-03f, -1.390762559e-03f, -1.391245796e-03f,
+-1.391726601e-03f, -1.392204973e-03f, -1.392680911e-03f, -1.393154414e-03f, -1.393625483e-03f, -1.394094116e-03f, -1.394560312e-03f, -1.395024071e-03f, -1.395485393e-03f, -1.395944276e-03f,
+-1.396400720e-03f, -1.396854725e-03f, -1.397306289e-03f, -1.397755412e-03f, -1.398202093e-03f, -1.398646332e-03f, -1.399088129e-03f, -1.399527481e-03f, -1.399964390e-03f, -1.400398854e-03f,
+-1.400830872e-03f, -1.401260445e-03f, -1.401687571e-03f, -1.402112250e-03f, -1.402534481e-03f, -1.402954264e-03f, -1.403371598e-03f, -1.403786482e-03f, -1.404198916e-03f, -1.404608900e-03f,
+-1.405016432e-03f, -1.405421513e-03f, -1.405824141e-03f, -1.406224317e-03f, -1.406622038e-03f, -1.407017306e-03f, -1.407410120e-03f, -1.407800478e-03f, -1.408188381e-03f, -1.408573827e-03f,
+-1.408956817e-03f, -1.409337350e-03f, -1.409715425e-03f, -1.410091042e-03f, -1.410464200e-03f, -1.410834899e-03f, -1.411203138e-03f, -1.411568917e-03f, -1.411932235e-03f, -1.412293092e-03f,
+-1.412651487e-03f, -1.413007420e-03f, -1.413360891e-03f, -1.413711898e-03f, -1.414060442e-03f, -1.414406522e-03f, -1.414750137e-03f, -1.415091287e-03f, -1.415429972e-03f, -1.415766192e-03f,
+-1.416099944e-03f, -1.416431231e-03f, -1.416760050e-03f, -1.417086401e-03f, -1.417410285e-03f, -1.417731700e-03f, -1.418050646e-03f, -1.418367123e-03f, -1.418681131e-03f, -1.418992668e-03f,
+-1.419301735e-03f, -1.419608331e-03f, -1.419912456e-03f, -1.420214110e-03f, -1.420513291e-03f, -1.420810000e-03f, -1.421104237e-03f, -1.421396000e-03f, -1.421685290e-03f, -1.421972106e-03f,
+-1.422256448e-03f, -1.422538315e-03f, -1.422817707e-03f, -1.423094625e-03f, -1.423369067e-03f, -1.423641033e-03f, -1.423910522e-03f, -1.424177536e-03f, -1.424442072e-03f, -1.424704131e-03f,
+-1.424963713e-03f, -1.425220817e-03f, -1.425475443e-03f, -1.425727591e-03f, -1.425977260e-03f, -1.426224450e-03f, -1.426469161e-03f, -1.426711392e-03f, -1.426951144e-03f, -1.427188415e-03f,
+-1.427423206e-03f, -1.427655517e-03f, -1.427885347e-03f, -1.428112695e-03f, -1.428337563e-03f, -1.428559948e-03f, -1.428779852e-03f, -1.428997274e-03f, -1.429212213e-03f, -1.429424670e-03f,
+-1.429634644e-03f, -1.429842136e-03f, -1.430047144e-03f, -1.430249668e-03f, -1.430449709e-03f, -1.430647266e-03f, -1.430842339e-03f, -1.431034928e-03f, -1.431225033e-03f, -1.431412653e-03f,
+-1.431597788e-03f, -1.431780438e-03f, -1.431960603e-03f, -1.432138283e-03f, -1.432313477e-03f, -1.432486186e-03f, -1.432656409e-03f, -1.432824146e-03f, -1.432989397e-03f, -1.433152162e-03f,
+-1.433312440e-03f, -1.433470232e-03f, -1.433625538e-03f, -1.433778356e-03f, -1.433928688e-03f, -1.434076533e-03f, -1.434221890e-03f, -1.434364761e-03f, -1.434505144e-03f, -1.434643040e-03f,
+-1.434778448e-03f, -1.434911369e-03f, -1.435041802e-03f, -1.435169747e-03f, -1.435295205e-03f, -1.435418174e-03f, -1.435538656e-03f, -1.435656649e-03f, -1.435772155e-03f, -1.435885172e-03f,
+-1.435995701e-03f, -1.436103742e-03f, -1.436209295e-03f, -1.436312359e-03f, -1.436412935e-03f, -1.436511022e-03f, -1.436606621e-03f, -1.436699731e-03f, -1.436790353e-03f, -1.436878487e-03f,
+-1.436964132e-03f, -1.437047289e-03f, -1.437127957e-03f, -1.437206136e-03f, -1.437281827e-03f, -1.437355030e-03f, -1.437425744e-03f, -1.437493970e-03f, -1.437559707e-03f, -1.437622956e-03f,
+-1.437683716e-03f, -1.437741989e-03f, -1.437797773e-03f, -1.437851068e-03f, -1.437901876e-03f, -1.437950195e-03f, -1.437996027e-03f, -1.438039370e-03f, -1.438080226e-03f, -1.438118593e-03f,
+-1.438154473e-03f, -1.438187865e-03f, -1.438218770e-03f, -1.438247187e-03f, -1.438273116e-03f, -1.438296559e-03f, -1.438317514e-03f, -1.438335981e-03f, -1.438351962e-03f, -1.438365456e-03f,
+-1.438376464e-03f, -1.438384984e-03f, -1.438391018e-03f, -1.438394566e-03f, -1.438395627e-03f, -1.438394203e-03f, -1.438390292e-03f, -1.438383896e-03f, -1.438375014e-03f, -1.438363646e-03f,
+-1.438349793e-03f, -1.438333455e-03f, -1.438314632e-03f, -1.438293324e-03f, -1.438269531e-03f, -1.438243254e-03f, -1.438214493e-03f, -1.438183248e-03f, -1.438149518e-03f, -1.438113305e-03f,
+-1.438074609e-03f, -1.438033429e-03f, -1.437989766e-03f, -1.437943621e-03f, -1.437894993e-03f, -1.437843882e-03f, -1.437790289e-03f, -1.437734215e-03f, -1.437675658e-03f, -1.437614621e-03f,
+-1.437551102e-03f, -1.437485102e-03f, -1.437416621e-03f, -1.437345660e-03f, -1.437272219e-03f, -1.437196298e-03f, -1.437117897e-03f, -1.437037017e-03f, -1.436953658e-03f, -1.436867821e-03f,
+-1.436779505e-03f, -1.436688710e-03f, -1.436595438e-03f, -1.436499688e-03f, -1.436401461e-03f, -1.436300757e-03f, -1.436197576e-03f, -1.436091919e-03f, -1.435983786e-03f, -1.435873178e-03f,
+-1.435760094e-03f, -1.435644535e-03f, -1.435526501e-03f, -1.435405993e-03f, -1.435283012e-03f, -1.435157556e-03f, -1.435029627e-03f, -1.434899226e-03f, -1.434766352e-03f, -1.434631006e-03f,
+-1.434493188e-03f, -1.434352899e-03f, -1.434210138e-03f, -1.434064908e-03f, -1.433917206e-03f, -1.433767036e-03f, -1.433614395e-03f, -1.433459286e-03f, -1.433301708e-03f, -1.433141662e-03f,
+-1.432979148e-03f, -1.432814167e-03f, -1.432646719e-03f, -1.432476805e-03f, -1.432304424e-03f, -1.432129578e-03f, -1.431952267e-03f, -1.431772491e-03f, -1.431590251e-03f, -1.431405547e-03f,
+-1.431218379e-03f, -1.431028749e-03f, -1.430836656e-03f, -1.430642102e-03f, -1.430445086e-03f, -1.430245609e-03f, -1.430043671e-03f, -1.429839274e-03f, -1.429632417e-03f, -1.429423101e-03f,
+-1.429211326e-03f, -1.428997094e-03f, -1.428780404e-03f, -1.428561257e-03f, -1.428339654e-03f, -1.428115594e-03f, -1.427889080e-03f, -1.427660110e-03f, -1.427428687e-03f, -1.427194809e-03f,
+-1.426958478e-03f, -1.426719695e-03f, -1.426478459e-03f, -1.426234772e-03f, -1.425988634e-03f, -1.425740045e-03f, -1.425489007e-03f, -1.425235519e-03f, -1.424979583e-03f, -1.424721198e-03f,
+-1.424460366e-03f, -1.424197087e-03f, -1.423931362e-03f, -1.423663190e-03f, -1.423392574e-03f, -1.423119513e-03f, -1.422844009e-03f, -1.422566060e-03f, -1.422285670e-03f, -1.422002837e-03f,
+-1.421717563e-03f, -1.421429847e-03f, -1.421139692e-03f, -1.420847097e-03f, -1.420552064e-03f, -1.420254592e-03f, -1.419954682e-03f, -1.419652336e-03f, -1.419347554e-03f, -1.419040335e-03f,
+-1.418730682e-03f, -1.418418595e-03f, -1.418104074e-03f, -1.417787120e-03f, -1.417467734e-03f, -1.417145917e-03f, -1.416821669e-03f, -1.416494991e-03f, -1.416165883e-03f, -1.415834346e-03f,
+-1.415500382e-03f, -1.415163991e-03f, -1.414825172e-03f, -1.414483928e-03f, -1.414140259e-03f, -1.413794166e-03f, -1.413445649e-03f, -1.413094709e-03f, -1.412741347e-03f, -1.412385564e-03f,
+-1.412027360e-03f, -1.411666737e-03f, -1.411303694e-03f, -1.410938233e-03f, -1.410570354e-03f, -1.410200058e-03f, -1.409827347e-03f, -1.409452220e-03f, -1.409074679e-03f, -1.408694724e-03f,
+-1.408312357e-03f, -1.407927577e-03f, -1.407540386e-03f, -1.407150785e-03f, -1.406758774e-03f, -1.406364354e-03f, -1.405967527e-03f, -1.405568292e-03f, -1.405166651e-03f, -1.404762604e-03f,
+-1.404356153e-03f, -1.403947298e-03f, -1.403536040e-03f, -1.403122379e-03f, -1.402706318e-03f, -1.402287856e-03f, -1.401866995e-03f, -1.401443734e-03f, -1.401018077e-03f, -1.400590022e-03f,
+-1.400159571e-03f, -1.399726725e-03f, -1.399291484e-03f, -1.398853851e-03f, -1.398413824e-03f, -1.397971406e-03f, -1.397526598e-03f, -1.397079399e-03f, -1.396629812e-03f, -1.396177837e-03f,
+-1.395723475e-03f, -1.395266726e-03f, -1.394807592e-03f, -1.394346075e-03f, -1.393882173e-03f, -1.393415890e-03f, -1.392947225e-03f, -1.392476179e-03f, -1.392002754e-03f, -1.391526950e-03f,
+-1.391048769e-03f, -1.390568210e-03f, -1.390085277e-03f, -1.389599968e-03f, -1.389112286e-03f, -1.388622231e-03f, -1.388129804e-03f, -1.387635006e-03f, -1.387137838e-03f, -1.386638302e-03f,
+-1.386136398e-03f, -1.385632127e-03f, -1.385125490e-03f, -1.384616488e-03f, -1.384105123e-03f, -1.383591395e-03f, -1.383075305e-03f, -1.382556854e-03f, -1.382036044e-03f, -1.381512875e-03f,
+-1.380987348e-03f, -1.380459465e-03f, -1.379929227e-03f, -1.379396633e-03f, -1.378861687e-03f, -1.378324388e-03f, -1.377784738e-03f, -1.377242738e-03f, -1.376698388e-03f, -1.376151691e-03f,
+-1.375602646e-03f, -1.375051256e-03f, -1.374497520e-03f, -1.373941442e-03f, -1.373383020e-03f, -1.372822257e-03f, -1.372259153e-03f, -1.371693711e-03f, -1.371125930e-03f, -1.370555811e-03f,
+-1.369983357e-03f, -1.369408568e-03f, -1.368831446e-03f, -1.368251991e-03f, -1.367670204e-03f, -1.367086087e-03f, -1.366499641e-03f, -1.365910867e-03f, -1.365319766e-03f, -1.364726339e-03f,
+-1.364130588e-03f, -1.363532514e-03f, -1.362932117e-03f, -1.362329399e-03f, -1.361724362e-03f, -1.361117005e-03f, -1.360507331e-03f, -1.359895341e-03f, -1.359281036e-03f, -1.358664417e-03f,
+-1.358045485e-03f, -1.357424241e-03f, -1.356800688e-03f, -1.356174825e-03f, -1.355546654e-03f, -1.354916176e-03f, -1.354283394e-03f, -1.353648307e-03f, -1.353010916e-03f, -1.352371225e-03f,
+-1.351729232e-03f, -1.351084941e-03f, -1.350438351e-03f, -1.349789464e-03f, -1.349138282e-03f, -1.348484806e-03f, -1.347829037e-03f, -1.347170976e-03f, -1.346510624e-03f, -1.345847984e-03f,
+-1.345183055e-03f, -1.344515840e-03f, -1.343846339e-03f, -1.343174555e-03f, -1.342500487e-03f, -1.341824138e-03f, -1.341145509e-03f, -1.340464601e-03f, -1.339781416e-03f, -1.339095954e-03f,
+-1.338408217e-03f, -1.337718207e-03f, -1.337025925e-03f, -1.336331371e-03f, -1.335634548e-03f, -1.334935456e-03f, -1.334234098e-03f, -1.333530474e-03f, -1.332824586e-03f, -1.332116434e-03f,
+-1.331406022e-03f, -1.330693349e-03f, -1.329978417e-03f, -1.329261227e-03f, -1.328541782e-03f, -1.327820082e-03f, -1.327096128e-03f, -1.326369923e-03f, -1.325641467e-03f, -1.324910761e-03f,
+-1.324177808e-03f, -1.323442609e-03f, -1.322705164e-03f, -1.321965476e-03f, -1.321223546e-03f, -1.320479375e-03f, -1.319732964e-03f, -1.318984316e-03f, -1.318233431e-03f, -1.317480311e-03f,
+-1.316724957e-03f, -1.315967371e-03f, -1.315207555e-03f, -1.314445509e-03f, -1.313681235e-03f, -1.312914734e-03f, -1.312146009e-03f, -1.311375060e-03f, -1.310601888e-03f, -1.309826497e-03f,
+-1.309048886e-03f, -1.308269057e-03f, -1.307487012e-03f, -1.306702753e-03f, -1.305916280e-03f, -1.305127596e-03f, -1.304336701e-03f, -1.303543597e-03f, -1.302748286e-03f, -1.301950770e-03f,
+-1.301151049e-03f, -1.300349125e-03f, -1.299545000e-03f, -1.298738676e-03f, -1.297930153e-03f, -1.297119433e-03f, -1.296306519e-03f, -1.295491410e-03f, -1.294674110e-03f, -1.293854619e-03f,
+-1.293032939e-03f, -1.292209072e-03f, -1.291383019e-03f, -1.290554781e-03f, -1.289724360e-03f, -1.288891759e-03f, -1.288056977e-03f, -1.287220018e-03f, -1.286380882e-03f, -1.285539571e-03f,
+-1.284696087e-03f, -1.283850430e-03f, -1.283002604e-03f, -1.282152609e-03f, -1.281300447e-03f, -1.280446120e-03f, -1.279589629e-03f, -1.278730975e-03f, -1.277870161e-03f, -1.277007188e-03f,
+-1.276142058e-03f, -1.275274772e-03f, -1.274405331e-03f, -1.273533738e-03f, -1.272659995e-03f, -1.271784102e-03f, -1.270906061e-03f, -1.270025875e-03f, -1.269143544e-03f, -1.268259070e-03f,
+-1.267372456e-03f, -1.266483702e-03f, -1.265592811e-03f, -1.264699783e-03f, -1.263804621e-03f, -1.262907326e-03f, -1.262007901e-03f, -1.261106346e-03f, -1.260202663e-03f, -1.259296854e-03f,
+-1.258388921e-03f, -1.257478866e-03f, -1.256566689e-03f, -1.255652393e-03f, -1.254735980e-03f, -1.253817451e-03f, -1.252896808e-03f, -1.251974053e-03f, -1.251049186e-03f, -1.250122211e-03f,
+-1.249193129e-03f, -1.248261941e-03f, -1.247328650e-03f, -1.246393256e-03f, -1.245455762e-03f, -1.244516170e-03f, -1.243574481e-03f, -1.242630697e-03f, -1.241684819e-03f, -1.240736850e-03f,
+-1.239786791e-03f, -1.238834644e-03f, -1.237880411e-03f, -1.236924094e-03f, -1.235965693e-03f, -1.235005212e-03f, -1.234042652e-03f, -1.233078014e-03f, -1.232111300e-03f, -1.231142513e-03f,
+-1.230171654e-03f, -1.229198725e-03f, -1.228223727e-03f, -1.227246663e-03f, -1.226267534e-03f, -1.225286342e-03f, -1.224303088e-03f, -1.223317776e-03f, -1.222330406e-03f, -1.221340980e-03f,
+-1.220349500e-03f, -1.219355969e-03f, -1.218360387e-03f, -1.217362756e-03f, -1.216363080e-03f, -1.215361358e-03f, -1.214357594e-03f, -1.213351789e-03f, -1.212343944e-03f, -1.211334063e-03f,
+-1.210322146e-03f, -1.209308196e-03f, -1.208292213e-03f, -1.207274201e-03f, -1.206254162e-03f, -1.205232096e-03f, -1.204208006e-03f, -1.203181894e-03f, -1.202153761e-03f, -1.201123610e-03f,
+-1.200091443e-03f, -1.199057260e-03f, -1.198021065e-03f, -1.196982859e-03f, -1.195942645e-03f, -1.194900423e-03f, -1.193856196e-03f, -1.192809966e-03f, -1.191761734e-03f, -1.190711503e-03f,
+-1.189659275e-03f, -1.188605052e-03f, -1.187548834e-03f, -1.186490626e-03f, -1.185430427e-03f, -1.184368241e-03f, -1.183304069e-03f, -1.182237913e-03f, -1.181169776e-03f, -1.180099658e-03f,
+-1.179027563e-03f, -1.177953492e-03f, -1.176877446e-03f, -1.175799429e-03f, -1.174719442e-03f, -1.173637486e-03f, -1.172553565e-03f, -1.171467679e-03f, -1.170379832e-03f, -1.169290024e-03f,
+-1.168198258e-03f, -1.167104536e-03f, -1.166008860e-03f, -1.164911232e-03f, -1.163811654e-03f, -1.162710127e-03f, -1.161606655e-03f, -1.160501239e-03f, -1.159393880e-03f, -1.158284582e-03f,
+-1.157173346e-03f, -1.156060174e-03f, -1.154945068e-03f, -1.153828030e-03f, -1.152709062e-03f, -1.151588166e-03f, -1.150465345e-03f, -1.149340600e-03f, -1.148213934e-03f, -1.147085348e-03f,
+-1.145954844e-03f, -1.144822425e-03f, -1.143688093e-03f, -1.142551850e-03f, -1.141413697e-03f, -1.140273637e-03f, -1.139131672e-03f, -1.137987804e-03f, -1.136842036e-03f, -1.135694368e-03f,
+-1.134544804e-03f, -1.133393345e-03f, -1.132239994e-03f, -1.131084752e-03f, -1.129927622e-03f, -1.128768606e-03f, -1.127607706e-03f, -1.126444924e-03f, -1.125280262e-03f, -1.124113722e-03f,
+-1.122945307e-03f, -1.121775018e-03f, -1.120602858e-03f, -1.119428829e-03f, -1.118252933e-03f, -1.117075172e-03f, -1.115895548e-03f, -1.114714063e-03f, -1.113530720e-03f, -1.112345521e-03f,
+-1.111158467e-03f, -1.109969562e-03f, -1.108778806e-03f, -1.107586203e-03f, -1.106391755e-03f, -1.105195463e-03f, -1.103997330e-03f, -1.102797358e-03f, -1.101595549e-03f, -1.100391905e-03f,
+-1.099186429e-03f, -1.097979123e-03f, -1.096769989e-03f, -1.095559029e-03f, -1.094346245e-03f, -1.093131640e-03f, -1.091915216e-03f, -1.090696974e-03f, -1.089476918e-03f, -1.088255049e-03f,
+-1.087031369e-03f, -1.085805882e-03f, -1.084578588e-03f, -1.083349491e-03f, -1.082118592e-03f, -1.080885894e-03f, -1.079651399e-03f, -1.078415109e-03f, -1.077177027e-03f, -1.075937154e-03f,
+-1.074695493e-03f, -1.073452047e-03f, -1.072206816e-03f, -1.070959805e-03f, -1.069711014e-03f, -1.068460447e-03f, -1.067208105e-03f, -1.065953991e-03f, -1.064698107e-03f, -1.063440455e-03f,
+-1.062181037e-03f, -1.060919857e-03f, -1.059656915e-03f, -1.058392215e-03f, -1.057125759e-03f, -1.055857549e-03f, -1.054587587e-03f, -1.053315875e-03f, -1.052042417e-03f, -1.050767213e-03f,
+-1.049490267e-03f, -1.048211581e-03f, -1.046931157e-03f, -1.045648997e-03f, -1.044365104e-03f, -1.043079480e-03f, -1.041792128e-03f, -1.040503049e-03f, -1.039212246e-03f, -1.037919721e-03f,
+-1.036625477e-03f, -1.035329517e-03f, -1.034031841e-03f, -1.032732453e-03f, -1.031431356e-03f, -1.030128550e-03f, -1.028824040e-03f, -1.027517826e-03f, -1.026209912e-03f, -1.024900300e-03f,
+-1.023588992e-03f, -1.022275990e-03f, -1.020961298e-03f, -1.019644916e-03f, -1.018326849e-03f, -1.017007097e-03f, -1.015685664e-03f, -1.014362551e-03f, -1.013037762e-03f, -1.011711298e-03f,
+-1.010383162e-03f, -1.009053357e-03f, -1.007721884e-03f, -1.006388746e-03f, -1.005053946e-03f, -1.003717486e-03f, -1.002379368e-03f, -1.001039595e-03f, -9.996981693e-04f, -9.983550929e-04f,
+-9.970103686e-04f, -9.956639986e-04f, -9.943159855e-04f, -9.929663317e-04f, -9.916150395e-04f, -9.902621114e-04f, -9.889075499e-04f, -9.875513574e-04f, -9.861935363e-04f, -9.848340891e-04f,
+-9.834730182e-04f, -9.821103260e-04f, -9.807460150e-04f, -9.793800877e-04f, -9.780125465e-04f, -9.766433939e-04f, -9.752726323e-04f, -9.739002641e-04f, -9.725262920e-04f, -9.711507182e-04f,
+-9.697735454e-04f, -9.683947759e-04f, -9.670144122e-04f, -9.656324569e-04f, -9.642489124e-04f, -9.628637811e-04f, -9.614770656e-04f, -9.600887684e-04f, -9.586988919e-04f, -9.573074387e-04f,
+-9.559144112e-04f, -9.545198119e-04f, -9.531236434e-04f, -9.517259081e-04f, -9.503266086e-04f, -9.489257473e-04f, -9.475233268e-04f, -9.461193496e-04f, -9.447138182e-04f, -9.433067350e-04f,
+-9.418981028e-04f, -9.404879239e-04f, -9.390762009e-04f, -9.376629363e-04f, -9.362481327e-04f, -9.348317926e-04f, -9.334139184e-04f, -9.319945129e-04f, -9.305735785e-04f, -9.291511177e-04f,
+-9.277271331e-04f, -9.263016272e-04f, -9.248746027e-04f, -9.234460620e-04f, -9.220160078e-04f, -9.205844425e-04f, -9.191513687e-04f, -9.177167890e-04f, -9.162807060e-04f, -9.148431222e-04f,
+-9.134040403e-04f, -9.119634627e-04f, -9.105213920e-04f, -9.090778309e-04f, -9.076327820e-04f, -9.061862477e-04f, -9.047382307e-04f, -9.032887335e-04f, -9.018377589e-04f, -9.003853093e-04f,
+-8.989313873e-04f, -8.974759957e-04f, -8.960191368e-04f, -8.945608134e-04f, -8.931010281e-04f, -8.916397835e-04f, -8.901770821e-04f, -8.887129266e-04f, -8.872473197e-04f, -8.857802638e-04f,
+-8.843117617e-04f, -8.828418160e-04f, -8.813704292e-04f, -8.798976041e-04f, -8.784233433e-04f, -8.769476493e-04f, -8.754705248e-04f, -8.739919724e-04f, -8.725119949e-04f, -8.710305947e-04f,
+-8.695477747e-04f, -8.680635373e-04f, -8.665778854e-04f, -8.650908214e-04f, -8.636023481e-04f, -8.621124681e-04f, -8.606211841e-04f, -8.591284987e-04f, -8.576344146e-04f, -8.561389345e-04f,
+-8.546420610e-04f, -8.531437968e-04f, -8.516441445e-04f, -8.501431069e-04f, -8.486406866e-04f, -8.471368863e-04f, -8.456317086e-04f, -8.441251563e-04f, -8.426172321e-04f, -8.411079385e-04f,
+-8.395972784e-04f, -8.380852543e-04f, -8.365718690e-04f, -8.350571252e-04f, -8.335410256e-04f, -8.320235729e-04f, -8.305047697e-04f, -8.289846189e-04f, -8.274631230e-04f, -8.259402848e-04f,
+-8.244161070e-04f, -8.228905923e-04f, -8.213637435e-04f, -8.198355632e-04f, -8.183060542e-04f, -8.167752192e-04f, -8.152430608e-04f, -8.137095820e-04f, -8.121747852e-04f, -8.106386734e-04f,
+-8.091012492e-04f, -8.075625153e-04f, -8.060224746e-04f, -8.044811296e-04f, -8.029384833e-04f, -8.013945382e-04f, -7.998492972e-04f, -7.983027630e-04f, -7.967549384e-04f, -7.952058260e-04f,
+-7.936554287e-04f, -7.921037492e-04f, -7.905507903e-04f, -7.889965547e-04f, -7.874410451e-04f, -7.858842644e-04f, -7.843262153e-04f, -7.827669006e-04f, -7.812063231e-04f, -7.796444854e-04f,
+-7.780813904e-04f, -7.765170409e-04f, -7.749514396e-04f, -7.733845894e-04f, -7.718164929e-04f, -7.702471530e-04f, -7.686765725e-04f, -7.671047541e-04f, -7.655317007e-04f, -7.639574150e-04f,
+-7.623818998e-04f, -7.608051579e-04f, -7.592271921e-04f, -7.576480053e-04f, -7.560676001e-04f, -7.544859795e-04f, -7.529031462e-04f, -7.513191030e-04f, -7.497338528e-04f, -7.481473983e-04f,
+-7.465597423e-04f, -7.449708877e-04f, -7.433808373e-04f, -7.417895939e-04f, -7.401971603e-04f, -7.386035393e-04f, -7.370087339e-04f, -7.354127467e-04f, -7.338155806e-04f, -7.322172385e-04f,
+-7.306177231e-04f, -7.290170374e-04f, -7.274151841e-04f, -7.258121660e-04f, -7.242079861e-04f, -7.226026472e-04f, -7.209961521e-04f, -7.193885036e-04f, -7.177797046e-04f, -7.161697579e-04f,
+-7.145586664e-04f, -7.129464330e-04f, -7.113330604e-04f, -7.097185516e-04f, -7.081029094e-04f, -7.064861367e-04f, -7.048682363e-04f, -7.032492110e-04f, -7.016290638e-04f, -7.000077976e-04f,
+-6.983854151e-04f, -6.967619192e-04f, -6.951373129e-04f, -6.935115989e-04f, -6.918847803e-04f, -6.902568597e-04f, -6.886278402e-04f, -6.869977246e-04f, -6.853665157e-04f, -6.837342166e-04f,
+-6.821008299e-04f, -6.804663587e-04f, -6.788308059e-04f, -6.771941742e-04f, -6.755564666e-04f, -6.739176861e-04f, -6.722778354e-04f, -6.706369175e-04f, -6.689949353e-04f, -6.673518917e-04f,
+-6.657077896e-04f, -6.640626318e-04f, -6.624164214e-04f, -6.607691611e-04f, -6.591208540e-04f, -6.574715029e-04f, -6.558211107e-04f, -6.541696803e-04f, -6.525172148e-04f, -6.508637169e-04f,
+-6.492091895e-04f, -6.475536357e-04f, -6.458970584e-04f, -6.442394603e-04f, -6.425808446e-04f, -6.409212141e-04f, -6.392605717e-04f, -6.375989203e-04f, -6.359362630e-04f, -6.342726026e-04f,
+-6.326079420e-04f, -6.309422842e-04f, -6.292756322e-04f, -6.276079888e-04f, -6.259393571e-04f, -6.242697399e-04f, -6.225991402e-04f, -6.209275609e-04f, -6.192550050e-04f, -6.175814755e-04f,
+-6.159069752e-04f, -6.142315072e-04f, -6.125550743e-04f, -6.108776796e-04f, -6.091993260e-04f, -6.075200164e-04f, -6.058397538e-04f, -6.041585412e-04f, -6.024763816e-04f, -6.007932778e-04f,
+-5.991092329e-04f, -5.974242498e-04f, -5.957383315e-04f, -5.940514809e-04f, -5.923637011e-04f, -5.906749950e-04f, -5.889853655e-04f, -5.872948157e-04f, -5.856033485e-04f, -5.839109669e-04f,
+-5.822176739e-04f, -5.805234724e-04f, -5.788283655e-04f, -5.771323560e-04f, -5.754354471e-04f, -5.737376417e-04f, -5.720389427e-04f, -5.703393533e-04f, -5.686388762e-04f, -5.669375146e-04f,
+-5.652352715e-04f, -5.635321497e-04f, -5.618281524e-04f, -5.601232825e-04f, -5.584175430e-04f, -5.567109370e-04f, -5.550034673e-04f, -5.532951371e-04f, -5.515859493e-04f, -5.498759069e-04f,
+-5.481650129e-04f, -5.464532704e-04f, -5.447406823e-04f, -5.430272517e-04f, -5.413129815e-04f, -5.395978748e-04f, -5.378819346e-04f, -5.361651639e-04f, -5.344475657e-04f, -5.327291431e-04f,
+-5.310098990e-04f, -5.292898365e-04f, -5.275689586e-04f, -5.258472682e-04f, -5.241247686e-04f, -5.224014626e-04f, -5.206773532e-04f, -5.189524436e-04f, -5.172267368e-04f, -5.155002357e-04f,
+-5.137729434e-04f, -5.120448629e-04f, -5.103159974e-04f, -5.085863497e-04f, -5.068559229e-04f, -5.051247201e-04f, -5.033927444e-04f, -5.016599987e-04f, -4.999264860e-04f, -4.981922095e-04f,
+-4.964571722e-04f, -4.947213771e-04f, -4.929848272e-04f, -4.912475257e-04f, -4.895094755e-04f, -4.877706797e-04f, -4.860311413e-04f, -4.842908634e-04f, -4.825498491e-04f, -4.808081014e-04f,
+-4.790656234e-04f, -4.773224180e-04f, -4.755784884e-04f, -4.738338376e-04f, -4.720884687e-04f, -4.703423848e-04f, -4.685955888e-04f, -4.668480839e-04f, -4.650998731e-04f, -4.633509595e-04f,
+-4.616013462e-04f, -4.598510361e-04f, -4.581000324e-04f, -4.563483382e-04f, -4.545959565e-04f, -4.528428903e-04f, -4.510891428e-04f, -4.493347171e-04f, -4.475796161e-04f, -4.458238429e-04f,
+-4.440674008e-04f, -4.423102926e-04f, -4.405525215e-04f, -4.387940906e-04f, -4.370350029e-04f, -4.352752616e-04f, -4.335148696e-04f, -4.317538302e-04f, -4.299921463e-04f, -4.282298210e-04f,
+-4.264668575e-04f, -4.247032588e-04f, -4.229390280e-04f, -4.211741682e-04f, -4.194086825e-04f, -4.176425739e-04f, -4.158758456e-04f, -4.141085006e-04f, -4.123405420e-04f, -4.105719730e-04f,
+-4.088027966e-04f, -4.070330159e-04f, -4.052626339e-04f, -4.034916539e-04f, -4.017200789e-04f, -3.999479120e-04f, -3.981751563e-04f, -3.964018148e-04f, -3.946278908e-04f, -3.928533872e-04f,
+-3.910783072e-04f, -3.893026539e-04f, -3.875264304e-04f, -3.857496398e-04f, -3.839722852e-04f, -3.821943697e-04f, -3.804158964e-04f, -3.786368684e-04f, -3.768572889e-04f, -3.750771608e-04f,
+-3.732964875e-04f, -3.715152718e-04f, -3.697335170e-04f, -3.679512263e-04f, -3.661684025e-04f, -3.643850490e-04f, -3.626011688e-04f, -3.608167650e-04f, -3.590318408e-04f, -3.572463992e-04f,
+-3.554604434e-04f, -3.536739765e-04f, -3.518870015e-04f, -3.500995217e-04f, -3.483115402e-04f, -3.465230600e-04f, -3.447340843e-04f, -3.429446162e-04f, -3.411546588e-04f, -3.393642153e-04f,
+-3.375732887e-04f, -3.357818822e-04f, -3.339899990e-04f, -3.321976421e-04f, -3.304048147e-04f, -3.286115198e-04f, -3.268177607e-04f, -3.250235405e-04f, -3.232288622e-04f, -3.214337290e-04f,
+-3.196381441e-04f, -3.178421105e-04f, -3.160456315e-04f, -3.142487100e-04f, -3.124513494e-04f, -3.106535526e-04f, -3.088553228e-04f, -3.070566632e-04f, -3.052575769e-04f, -3.034580671e-04f,
+-3.016581368e-04f, -2.998577892e-04f, -2.980570274e-04f, -2.962558546e-04f, -2.944542739e-04f, -2.926522885e-04f, -2.908499014e-04f, -2.890471159e-04f, -2.872439351e-04f, -2.854403620e-04f,
+-2.836363999e-04f, -2.818320519e-04f, -2.800273211e-04f, -2.782222107e-04f, -2.764167237e-04f, -2.746108635e-04f, -2.728046330e-04f, -2.709980355e-04f, -2.691910741e-04f, -2.673837519e-04f,
+-2.655760720e-04f, -2.637680377e-04f, -2.619596521e-04f, -2.601509183e-04f, -2.583418394e-04f, -2.565324186e-04f, -2.547226591e-04f, -2.529125640e-04f, -2.511021364e-04f, -2.492913796e-04f,
+-2.474802966e-04f, -2.456688906e-04f, -2.438571647e-04f, -2.420451221e-04f, -2.402327660e-04f, -2.384200995e-04f, -2.366071257e-04f, -2.347938479e-04f, -2.329802691e-04f, -2.311663925e-04f,
+-2.293522212e-04f, -2.275377585e-04f, -2.257230075e-04f, -2.239079712e-04f, -2.220926530e-04f, -2.202770558e-04f, -2.184611830e-04f, -2.166450376e-04f, -2.148286228e-04f, -2.130119417e-04f,
+-2.111949975e-04f, -2.093777934e-04f, -2.075603325e-04f, -2.057426180e-04f, -2.039246531e-04f, -2.021064408e-04f, -2.002879843e-04f, -1.984692869e-04f, -1.966503516e-04f, -1.948311816e-04f,
+-1.930117801e-04f, -1.911921503e-04f, -1.893722952e-04f, -1.875522181e-04f, -1.857319221e-04f, -1.839114104e-04f, -1.820906861e-04f, -1.802697524e-04f, -1.784486124e-04f, -1.766272694e-04f,
+-1.748057264e-04f, -1.729839867e-04f, -1.711620533e-04f, -1.693399295e-04f, -1.675176184e-04f, -1.656951232e-04f, -1.638724470e-04f, -1.620495931e-04f, -1.602265644e-04f, -1.584033643e-04f,
+-1.565799959e-04f, -1.547564623e-04f, -1.529327667e-04f, -1.511089123e-04f, -1.492849022e-04f, -1.474607396e-04f, -1.456364276e-04f, -1.438119695e-04f, -1.419873683e-04f, -1.401626273e-04f,
+-1.383377496e-04f, -1.365127383e-04f, -1.346875967e-04f, -1.328623278e-04f, -1.310369349e-04f, -1.292114212e-04f, -1.273857897e-04f, -1.255600436e-04f, -1.237341861e-04f, -1.219082204e-04f,
+-1.200821496e-04f, -1.182559769e-04f, -1.164297055e-04f, -1.146033385e-04f, -1.127768790e-04f, -1.109503303e-04f, -1.091236955e-04f, -1.072969778e-04f, -1.054701803e-04f, -1.036433061e-04f,
+-1.018163586e-04f, -9.998934072e-05f, -9.816225574e-05f, -9.633510680e-05f, -9.450789706e-05f, -9.268062969e-05f, -9.085330784e-05f, -8.902593468e-05f, -8.719851337e-05f, -8.537104707e-05f,
+-8.354353894e-05f, -8.171599214e-05f, -7.988840984e-05f, -7.806079520e-05f, -7.623315137e-05f, -7.440548153e-05f, -7.257778882e-05f, -7.075007642e-05f, -6.892234747e-05f, -6.709460515e-05f,
+-6.526685260e-05f, -6.343909300e-05f, -6.161132951e-05f, -5.978356527e-05f, -5.795580345e-05f, -5.612804722e-05f, -5.430029972e-05f, -5.247256412e-05f, -5.064484358e-05f, -4.881714126e-05f,
+-4.698946031e-05f, -4.516180389e-05f, -4.333417517e-05f, -4.150657729e-05f, -3.967901341e-05f, -3.785148670e-05f, -3.602400031e-05f, -3.419655740e-05f, -3.236916112e-05f, -3.054181463e-05f,
+-2.871452108e-05f, -2.688728363e-05f, -2.506010544e-05f, -2.323298966e-05f, -2.140593945e-05f, -1.957895796e-05f, -1.775204834e-05f, -1.592521375e-05f, -1.409845734e-05f, -1.227178227e-05f,
+-1.044519169e-05f, -8.618688746e-06f, -6.792276597e-06f, -4.965958392e-06f, -3.139737285e-06f, -1.313616425e-06f, 5.124010351e-07f, 2.338311946e-06f, 4.164113158e-06f, 5.989801520e-06f,
+7.815373883e-06f, 9.640827099e-06f, 1.146615802e-05f, 1.329136349e-05f, 1.511644037e-05f, 1.694138552e-05f, 1.876619577e-05f, 2.059086799e-05f, 2.241539903e-05f, 2.423978575e-05f,
+2.606402499e-05f, 2.788811362e-05f, 2.971204849e-05f, 3.153582646e-05f, 3.335944437e-05f, 3.518289910e-05f, 3.700618749e-05f, 3.882930641e-05f, 4.065225271e-05f, 4.247502325e-05f,
+4.429761489e-05f, 4.612002449e-05f, 4.794224891e-05f, 4.976428501e-05f, 5.158612966e-05f, 5.340777971e-05f, 5.522923202e-05f, 5.705048347e-05f, 5.887153091e-05f, 6.069237121e-05f,
+6.251300122e-05f, 6.433341783e-05f, 6.615361788e-05f, 6.797359825e-05f, 6.979335581e-05f, 7.161288742e-05f, 7.343218995e-05f, 7.525126026e-05f, 7.707009524e-05f, 7.888869174e-05f,
+8.070704663e-05f, 8.252515679e-05f, 8.434301909e-05f, 8.616063040e-05f, 8.797798760e-05f, 8.979508755e-05f, 9.161192713e-05f, 9.342850321e-05f, 9.524481267e-05f, 9.706085239e-05f,
+9.887661924e-05f, 1.006921101e-04f, 1.025073218e-04f, 1.043222514e-04f, 1.061368955e-04f, 1.079512512e-04f, 1.097653153e-04f, 1.115790846e-04f, 1.133925561e-04f, 1.152057267e-04f,
+1.170185932e-04f, 1.188311526e-04f, 1.206434016e-04f, 1.224553372e-04f, 1.242669563e-04f, 1.260782557e-04f, 1.278892324e-04f, 1.296998832e-04f, 1.315102050e-04f, 1.333201948e-04f,
+1.351298493e-04f, 1.369391656e-04f, 1.387481404e-04f, 1.405567707e-04f, 1.423650534e-04f, 1.441729854e-04f, 1.459805635e-04f, 1.477877846e-04f, 1.495946458e-04f, 1.514011437e-04f,
+1.532072755e-04f, 1.550130378e-04f, 1.568184277e-04f, 1.586234421e-04f, 1.604280778e-04f, 1.622323318e-04f, 1.640362009e-04f, 1.658396821e-04f, 1.676427723e-04f, 1.694454683e-04f,
+1.712477671e-04f, 1.730496656e-04f, 1.748511606e-04f, 1.766522492e-04f, 1.784529282e-04f, 1.802531945e-04f, 1.820530451e-04f, 1.838524768e-04f, 1.856514865e-04f, 1.874500713e-04f,
+1.892482279e-04f, 1.910459533e-04f, 1.928432445e-04f, 1.946400983e-04f, 1.964365117e-04f, 1.982324815e-04f, 2.000280048e-04f, 2.018230784e-04f, 2.036176992e-04f, 2.054118642e-04f,
+2.072055703e-04f, 2.089988144e-04f, 2.107915935e-04f, 2.125839045e-04f, 2.143757443e-04f, 2.161671098e-04f, 2.179579979e-04f, 2.197484057e-04f, 2.215383300e-04f, 2.233277678e-04f,
+2.251167160e-04f, 2.269051715e-04f, 2.286931313e-04f, 2.304805923e-04f, 2.322675515e-04f, 2.340540057e-04f, 2.358399520e-04f, 2.376253873e-04f, 2.394103084e-04f, 2.411947125e-04f,
+2.429785963e-04f, 2.447619569e-04f, 2.465447912e-04f, 2.483270962e-04f, 2.501088687e-04f, 2.518901058e-04f, 2.536708045e-04f, 2.554509615e-04f, 2.572305740e-04f, 2.590096388e-04f,
+2.607881530e-04f, 2.625661135e-04f, 2.643435171e-04f, 2.661203610e-04f, 2.678966421e-04f, 2.696723572e-04f, 2.714475035e-04f, 2.732220778e-04f, 2.749960771e-04f, 2.767694983e-04f,
+2.785423386e-04f, 2.803145947e-04f, 2.820862638e-04f, 2.838573427e-04f, 2.856278284e-04f, 2.873977179e-04f, 2.891670083e-04f, 2.909356963e-04f, 2.927037791e-04f, 2.944712537e-04f,
+2.962381169e-04f, 2.980043658e-04f, 2.997699973e-04f, 3.015350085e-04f, 3.032993963e-04f, 3.050631577e-04f, 3.068262897e-04f, 3.085887893e-04f, 3.103506535e-04f, 3.121118793e-04f,
+3.138724636e-04f, 3.156324035e-04f, 3.173916959e-04f, 3.191503378e-04f, 3.209083263e-04f, 3.226656584e-04f, 3.244223310e-04f, 3.261783411e-04f, 3.279336858e-04f, 3.296883620e-04f,
+3.314423668e-04f, 3.331956972e-04f, 3.349483501e-04f, 3.367003226e-04f, 3.384516117e-04f, 3.402022144e-04f, 3.419521277e-04f, 3.437013486e-04f, 3.454498742e-04f, 3.471977015e-04f,
+3.489448275e-04f, 3.506912491e-04f, 3.524369635e-04f, 3.541819677e-04f, 3.559262586e-04f, 3.576698333e-04f, 3.594126888e-04f, 3.611548222e-04f, 3.628962305e-04f, 3.646369107e-04f,
+3.663768599e-04f, 3.681160751e-04f, 3.698545533e-04f, 3.715922915e-04f, 3.733292869e-04f, 3.750655363e-04f, 3.768010370e-04f, 3.785357859e-04f, 3.802697801e-04f, 3.820030166e-04f,
+3.837354924e-04f, 3.854672047e-04f, 3.871981504e-04f, 3.889283267e-04f, 3.906577305e-04f, 3.923863589e-04f, 3.941142091e-04f, 3.958412779e-04f, 3.975675626e-04f, 3.992930601e-04f,
+4.010177676e-04f, 4.027416821e-04f, 4.044648006e-04f, 4.061871202e-04f, 4.079086380e-04f, 4.096293511e-04f, 4.113492565e-04f, 4.130683513e-04f, 4.147866327e-04f, 4.165040975e-04f,
+4.182207430e-04f, 4.199365663e-04f, 4.216515643e-04f, 4.233657342e-04f, 4.250790731e-04f, 4.267915781e-04f, 4.285032461e-04f, 4.302140745e-04f, 4.319240601e-04f, 4.336332002e-04f,
+4.353414917e-04f, 4.370489319e-04f, 4.387555178e-04f, 4.404612465e-04f, 4.421661151e-04f, 4.438701207e-04f, 4.455732604e-04f, 4.472755313e-04f, 4.489769306e-04f, 4.506774553e-04f,
+4.523771025e-04f, 4.540758694e-04f, 4.557737531e-04f, 4.574707507e-04f, 4.591668592e-04f, 4.608620759e-04f, 4.625563979e-04f, 4.642498222e-04f, 4.659423460e-04f, 4.676339665e-04f,
+4.693246807e-04f, 4.710144858e-04f, 4.727033789e-04f, 4.743913571e-04f, 4.760784176e-04f, 4.777645576e-04f, 4.794497741e-04f, 4.811340643e-04f, 4.828174253e-04f, 4.844998543e-04f,
+4.861813484e-04f, 4.878619049e-04f, 4.895415207e-04f, 4.912201931e-04f, 4.928979193e-04f, 4.945746963e-04f, 4.962505214e-04f, 4.979253917e-04f, 4.995993043e-04f, 5.012722565e-04f,
+5.029442453e-04f, 5.046152680e-04f, 5.062853217e-04f, 5.079544036e-04f, 5.096225109e-04f, 5.112896407e-04f, 5.129557901e-04f, 5.146209565e-04f, 5.162851370e-04f, 5.179483286e-04f,
+5.196105287e-04f, 5.212717344e-04f, 5.229319429e-04f, 5.245911514e-04f, 5.262493571e-04f, 5.279065571e-04f, 5.295627487e-04f, 5.312179290e-04f, 5.328720953e-04f, 5.345252447e-04f,
+5.361773745e-04f, 5.378284818e-04f, 5.394785639e-04f, 5.411276179e-04f, 5.427756411e-04f, 5.444226307e-04f, 5.460685839e-04f, 5.477134980e-04f, 5.493573700e-04f, 5.510001973e-04f,
+5.526419771e-04f, 5.542827065e-04f, 5.559223829e-04f, 5.575610034e-04f, 5.591985653e-04f, 5.608350658e-04f, 5.624705021e-04f, 5.641048715e-04f, 5.657381712e-04f, 5.673703984e-04f,
+5.690015504e-04f, 5.706316245e-04f, 5.722606178e-04f, 5.738885277e-04f, 5.755153513e-04f, 5.771410859e-04f, 5.787657288e-04f, 5.803892772e-04f, 5.820117284e-04f, 5.836330797e-04f,
+5.852533283e-04f, 5.868724714e-04f, 5.884905063e-04f, 5.901074304e-04f, 5.917232408e-04f, 5.933379349e-04f, 5.949515098e-04f, 5.965639630e-04f, 5.981752916e-04f, 5.997854930e-04f,
+6.013945644e-04f, 6.030025031e-04f, 6.046093064e-04f, 6.062149716e-04f, 6.078194959e-04f, 6.094228768e-04f, 6.110251114e-04f, 6.126261970e-04f, 6.142261311e-04f, 6.158249107e-04f,
+6.174225334e-04f, 6.190189963e-04f, 6.206142968e-04f, 6.222084321e-04f, 6.238013997e-04f, 6.253931968e-04f, 6.269838207e-04f, 6.285732688e-04f, 6.301615383e-04f, 6.317486266e-04f,
+6.333345310e-04f, 6.349192489e-04f, 6.365027775e-04f, 6.380851143e-04f, 6.396662564e-04f, 6.412462014e-04f, 6.428249464e-04f, 6.444024890e-04f, 6.459788263e-04f, 6.475539557e-04f,
+6.491278746e-04f, 6.507005804e-04f, 6.522720703e-04f, 6.538423418e-04f, 6.554113922e-04f, 6.569792189e-04f, 6.585458191e-04f, 6.601111904e-04f, 6.616753300e-04f, 6.632382353e-04f,
+6.647999036e-04f, 6.663603325e-04f, 6.679195191e-04f, 6.694774610e-04f, 6.710341555e-04f, 6.725895999e-04f, 6.741437916e-04f, 6.756967281e-04f, 6.772484068e-04f, 6.787988249e-04f,
+6.803479800e-04f, 6.818958693e-04f, 6.834424904e-04f, 6.849878405e-04f, 6.865319172e-04f, 6.880747177e-04f, 6.896162396e-04f, 6.911564802e-04f, 6.926954369e-04f, 6.942331072e-04f,
+6.957694885e-04f, 6.973045781e-04f, 6.988383735e-04f, 7.003708722e-04f, 7.019020715e-04f, 7.034319690e-04f, 7.049605619e-04f, 7.064878478e-04f, 7.080138240e-04f, 7.095384881e-04f,
+7.110618374e-04f, 7.125838695e-04f, 7.141045817e-04f, 7.156239715e-04f, 7.171420363e-04f, 7.186587737e-04f, 7.201741810e-04f, 7.216882557e-04f, 7.232009953e-04f, 7.247123972e-04f,
+7.262224590e-04f, 7.277311780e-04f, 7.292385517e-04f, 7.307445776e-04f, 7.322492533e-04f, 7.337525761e-04f, 7.352545435e-04f, 7.367551531e-04f, 7.382544023e-04f, 7.397522885e-04f,
+7.412488094e-04f, 7.427439623e-04f, 7.442377448e-04f, 7.457301544e-04f, 7.472211885e-04f, 7.487108448e-04f, 7.501991206e-04f, 7.516860135e-04f, 7.531715209e-04f, 7.546556405e-04f,
+7.561383697e-04f, 7.576197061e-04f, 7.590996471e-04f, 7.605781903e-04f, 7.620553332e-04f, 7.635310733e-04f, 7.650054082e-04f, 7.664783354e-04f, 7.679498524e-04f, 7.694199568e-04f,
+7.708886461e-04f, 7.723559179e-04f, 7.738217697e-04f, 7.752861990e-04f, 7.767492034e-04f, 7.782107805e-04f, 7.796709278e-04f, 7.811296429e-04f, 7.825869233e-04f, 7.840427665e-04f,
+7.854971703e-04f, 7.869501321e-04f, 7.884016494e-04f, 7.898517200e-04f, 7.913003413e-04f, 7.927475110e-04f, 7.941932265e-04f, 7.956374856e-04f, 7.970802858e-04f, 7.985216246e-04f,
+7.999614997e-04f, 8.013999087e-04f, 8.028368492e-04f, 8.042723187e-04f, 8.057063149e-04f, 8.071388354e-04f, 8.085698778e-04f, 8.099994396e-04f, 8.114275186e-04f, 8.128541123e-04f,
+8.142792184e-04f, 8.157028345e-04f, 8.171249581e-04f, 8.185455870e-04f, 8.199647188e-04f, 8.213823510e-04f, 8.227984814e-04f, 8.242131075e-04f, 8.256262271e-04f, 8.270378377e-04f,
+8.284479370e-04f, 8.298565227e-04f, 8.312635923e-04f, 8.326691437e-04f, 8.340731744e-04f, 8.354756820e-04f, 8.368766643e-04f, 8.382761189e-04f, 8.396740435e-04f, 8.410704357e-04f,
+8.424652933e-04f, 8.438586139e-04f, 8.452503951e-04f, 8.466406348e-04f, 8.480293305e-04f, 8.494164799e-04f, 8.508020808e-04f, 8.521861308e-04f, 8.535686276e-04f, 8.549495690e-04f,
+8.563289526e-04f, 8.577067762e-04f, 8.590830374e-04f, 8.604577339e-04f, 8.618308635e-04f, 8.632024240e-04f, 8.645724129e-04f, 8.659408281e-04f, 8.673076672e-04f, 8.686729280e-04f,
+8.700366082e-04f, 8.713987056e-04f, 8.727592179e-04f, 8.741181428e-04f, 8.754754781e-04f, 8.768312215e-04f, 8.781853708e-04f, 8.795379237e-04f, 8.808888780e-04f, 8.822382314e-04f,
+8.835859817e-04f, 8.849321267e-04f, 8.862766641e-04f, 8.876195916e-04f, 8.889609072e-04f, 8.903006085e-04f, 8.916386933e-04f, 8.929751594e-04f, 8.943100045e-04f, 8.956432266e-04f,
+8.969748233e-04f, 8.983047924e-04f, 8.996331318e-04f, 9.009598393e-04f, 9.022849125e-04f, 9.036083495e-04f, 9.049301479e-04f, 9.062503055e-04f, 9.075688203e-04f, 9.088856899e-04f,
+9.102009122e-04f, 9.115144851e-04f, 9.128264063e-04f, 9.141366738e-04f, 9.154452852e-04f, 9.167522385e-04f, 9.180575315e-04f, 9.193611620e-04f, 9.206631279e-04f, 9.219634271e-04f,
+9.232620573e-04f, 9.245590164e-04f, 9.258543022e-04f, 9.271479128e-04f, 9.284398458e-04f, 9.297300992e-04f, 9.310186708e-04f, 9.323055584e-04f, 9.335907601e-04f, 9.348742736e-04f,
+9.361560969e-04f, 9.374362277e-04f, 9.387146640e-04f, 9.399914037e-04f, 9.412664447e-04f, 9.425397849e-04f, 9.438114221e-04f, 9.450813543e-04f, 9.463495793e-04f, 9.476160951e-04f,
+9.488808996e-04f, 9.501439907e-04f, 9.514053664e-04f, 9.526650244e-04f, 9.539229628e-04f, 9.551791795e-04f, 9.564336724e-04f, 9.576864394e-04f, 9.589374785e-04f, 9.601867877e-04f,
+9.614343647e-04f, 9.626802077e-04f, 9.639243145e-04f, 9.651666831e-04f, 9.664073115e-04f, 9.676461975e-04f, 9.688833393e-04f, 9.701187346e-04f, 9.713523816e-04f, 9.725842780e-04f,
+9.738144221e-04f, 9.750428116e-04f, 9.762694446e-04f, 9.774943191e-04f, 9.787174331e-04f, 9.799387845e-04f, 9.811583713e-04f, 9.823761915e-04f, 9.835922432e-04f, 9.848065243e-04f,
+9.860190328e-04f, 9.872297667e-04f, 9.884387241e-04f, 9.896459030e-04f, 9.908513013e-04f, 9.920549171e-04f, 9.932567484e-04f, 9.944567933e-04f, 9.956550497e-04f, 9.968515158e-04f,
+9.980461895e-04f, 9.992390688e-04f, 1.000430152e-03f, 1.001619437e-03f, 1.002806921e-03f, 1.003992604e-03f, 1.005176482e-03f, 1.006358555e-03f, 1.007538819e-03f, 1.008717274e-03f,
+1.009893917e-03f, 1.011068746e-03f, 1.012241759e-03f, 1.013412955e-03f, 1.014582331e-03f, 1.015749886e-03f, 1.016915617e-03f, 1.018079523e-03f, 1.019241602e-03f, 1.020401852e-03f,
+1.021560271e-03f, 1.022716857e-03f, 1.023871608e-03f, 1.025024523e-03f, 1.026175599e-03f, 1.027324835e-03f, 1.028472228e-03f, 1.029617777e-03f, 1.030761480e-03f, 1.031903336e-03f,
+1.033043341e-03f, 1.034181495e-03f, 1.035317795e-03f, 1.036452240e-03f, 1.037584828e-03f, 1.038715557e-03f, 1.039844425e-03f, 1.040971430e-03f, 1.042096570e-03f, 1.043219844e-03f,
+1.044341250e-03f, 1.045460785e-03f, 1.046578449e-03f, 1.047694239e-03f, 1.048808153e-03f, 1.049920190e-03f, 1.051030348e-03f, 1.052138625e-03f, 1.053245019e-03f, 1.054349528e-03f,
+1.055452151e-03f, 1.056552886e-03f, 1.057651730e-03f, 1.058748683e-03f, 1.059843743e-03f, 1.060936907e-03f, 1.062028174e-03f, 1.063117541e-03f, 1.064205009e-03f, 1.065290573e-03f,
+1.066374234e-03f, 1.067455988e-03f, 1.068535835e-03f, 1.069613772e-03f, 1.070689798e-03f, 1.071763911e-03f, 1.072836110e-03f, 1.073906391e-03f, 1.074974755e-03f, 1.076041198e-03f,
+1.077105720e-03f, 1.078168319e-03f, 1.079228992e-03f, 1.080287738e-03f, 1.081344556e-03f, 1.082399443e-03f, 1.083452399e-03f, 1.084503420e-03f, 1.085552507e-03f, 1.086599656e-03f,
+1.087644866e-03f, 1.088688136e-03f, 1.089729463e-03f, 1.090768847e-03f, 1.091806285e-03f, 1.092841776e-03f, 1.093875317e-03f, 1.094906908e-03f, 1.095936547e-03f, 1.096964232e-03f,
+1.097989962e-03f, 1.099013734e-03f, 1.100035547e-03f, 1.101055399e-03f, 1.102073289e-03f, 1.103089216e-03f, 1.104103176e-03f, 1.105115170e-03f, 1.106125195e-03f, 1.107133249e-03f,
+1.108139332e-03f, 1.109143440e-03f, 1.110145574e-03f, 1.111145730e-03f, 1.112143908e-03f, 1.113140106e-03f, 1.114134322e-03f, 1.115126554e-03f, 1.116116802e-03f, 1.117105063e-03f,
+1.118091336e-03f, 1.119075619e-03f, 1.120057911e-03f, 1.121038210e-03f, 1.122016515e-03f, 1.122992823e-03f, 1.123967134e-03f, 1.124939445e-03f, 1.125909756e-03f, 1.126878065e-03f,
+1.127844369e-03f, 1.128808669e-03f, 1.129770961e-03f, 1.130731244e-03f, 1.131689518e-03f, 1.132645780e-03f, 1.133600029e-03f, 1.134552263e-03f, 1.135502481e-03f, 1.136450681e-03f,
+1.137396862e-03f, 1.138341022e-03f, 1.139283159e-03f, 1.140223273e-03f, 1.141161362e-03f, 1.142097424e-03f, 1.143031457e-03f, 1.143963461e-03f, 1.144893433e-03f, 1.145821373e-03f,
+1.146747278e-03f, 1.147671148e-03f, 1.148592980e-03f, 1.149512774e-03f, 1.150430527e-03f, 1.151346239e-03f, 1.152259907e-03f, 1.153171531e-03f, 1.154081109e-03f, 1.154988639e-03f,
+1.155894121e-03f, 1.156797552e-03f, 1.157698931e-03f, 1.158598257e-03f, 1.159495528e-03f, 1.160390744e-03f, 1.161283901e-03f, 1.162175000e-03f, 1.163064038e-03f, 1.163951014e-03f,
+1.164835927e-03f, 1.165718775e-03f, 1.166599558e-03f, 1.167478272e-03f, 1.168354918e-03f, 1.169229494e-03f, 1.170101998e-03f, 1.170972429e-03f, 1.171840786e-03f, 1.172707067e-03f,
+1.173571270e-03f, 1.174433395e-03f, 1.175293440e-03f, 1.176151404e-03f, 1.177007285e-03f, 1.177861082e-03f, 1.178712794e-03f, 1.179562419e-03f, 1.180409956e-03f, 1.181255404e-03f,
+1.182098761e-03f, 1.182940025e-03f, 1.183779197e-03f, 1.184616273e-03f, 1.185451254e-03f, 1.186284137e-03f, 1.187114921e-03f, 1.187943606e-03f, 1.188770189e-03f, 1.189594669e-03f,
+1.190417046e-03f, 1.191237317e-03f, 1.192055481e-03f, 1.192871538e-03f, 1.193685486e-03f, 1.194497323e-03f, 1.195307049e-03f, 1.196114662e-03f, 1.196920160e-03f, 1.197723543e-03f,
+1.198524809e-03f, 1.199323957e-03f, 1.200120986e-03f, 1.200915894e-03f, 1.201708680e-03f, 1.202499344e-03f, 1.203287883e-03f, 1.204074296e-03f, 1.204858583e-03f, 1.205640742e-03f,
+1.206420772e-03f, 1.207198671e-03f, 1.207974438e-03f, 1.208748073e-03f, 1.209519573e-03f, 1.210288938e-03f, 1.211056167e-03f, 1.211821258e-03f, 1.212584210e-03f, 1.213345022e-03f,
+1.214103692e-03f, 1.214860220e-03f, 1.215614605e-03f, 1.216366844e-03f, 1.217116938e-03f, 1.217864884e-03f, 1.218610682e-03f, 1.219354330e-03f, 1.220095828e-03f, 1.220835174e-03f,
+1.221572367e-03f, 1.222307405e-03f, 1.223040289e-03f, 1.223771016e-03f, 1.224499585e-03f, 1.225225996e-03f, 1.225950246e-03f, 1.226672336e-03f, 1.227392264e-03f, 1.228110028e-03f,
+1.228825629e-03f, 1.229539063e-03f, 1.230250331e-03f, 1.230959432e-03f, 1.231666364e-03f, 1.232371126e-03f, 1.233073717e-03f, 1.233774136e-03f, 1.234472382e-03f, 1.235168453e-03f,
+1.235862350e-03f, 1.236554070e-03f, 1.237243612e-03f, 1.237930977e-03f, 1.238616161e-03f, 1.239299165e-03f, 1.239979988e-03f, 1.240658627e-03f, 1.241335083e-03f, 1.242009354e-03f,
+1.242681440e-03f, 1.243351338e-03f, 1.244019049e-03f, 1.244684570e-03f, 1.245347902e-03f, 1.246009043e-03f, 1.246667992e-03f, 1.247324747e-03f, 1.247979309e-03f, 1.248631676e-03f,
+1.249281847e-03f, 1.249929821e-03f, 1.250575596e-03f, 1.251219173e-03f, 1.251860550e-03f, 1.252499726e-03f, 1.253136700e-03f, 1.253771471e-03f, 1.254404038e-03f, 1.255034400e-03f,
+1.255662557e-03f, 1.256288507e-03f, 1.256912249e-03f, 1.257533782e-03f, 1.258153106e-03f, 1.258770220e-03f, 1.259385121e-03f, 1.259997811e-03f, 1.260608287e-03f, 1.261216549e-03f,
+1.261822595e-03f, 1.262426426e-03f, 1.263028039e-03f, 1.263627435e-03f, 1.264224611e-03f, 1.264819568e-03f, 1.265412305e-03f, 1.266002819e-03f, 1.266591112e-03f, 1.267177181e-03f,
+1.267761025e-03f, 1.268342645e-03f, 1.268922039e-03f, 1.269499206e-03f, 1.270074145e-03f, 1.270646856e-03f, 1.271217337e-03f, 1.271785588e-03f, 1.272351607e-03f, 1.272915395e-03f,
+1.273476950e-03f, 1.274036271e-03f, 1.274593358e-03f, 1.275148209e-03f, 1.275700825e-03f, 1.276251203e-03f, 1.276799343e-03f, 1.277345245e-03f, 1.277888907e-03f, 1.278430329e-03f,
+1.278969510e-03f, 1.279506449e-03f, 1.280041146e-03f, 1.280573599e-03f, 1.281103807e-03f, 1.281631771e-03f, 1.282157489e-03f, 1.282680960e-03f, 1.283202184e-03f, 1.283721160e-03f,
+1.284237887e-03f, 1.284752364e-03f, 1.285264591e-03f, 1.285774566e-03f, 1.286282290e-03f, 1.286787761e-03f, 1.287290978e-03f, 1.287791942e-03f, 1.288290650e-03f, 1.288787103e-03f,
+1.289281299e-03f, 1.289773239e-03f, 1.290262920e-03f, 1.290750344e-03f, 1.291235507e-03f, 1.291718411e-03f, 1.292199055e-03f, 1.292677437e-03f, 1.293153556e-03f, 1.293627414e-03f,
+1.294099007e-03f, 1.294568337e-03f, 1.295035402e-03f, 1.295500202e-03f, 1.295962735e-03f, 1.296423001e-03f, 1.296881001e-03f, 1.297336732e-03f, 1.297790194e-03f, 1.298241387e-03f,
+1.298690309e-03f, 1.299136961e-03f, 1.299581342e-03f, 1.300023451e-03f, 1.300463287e-03f, 1.300900850e-03f, 1.301336138e-03f, 1.301769153e-03f, 1.302199892e-03f, 1.302628356e-03f,
+1.303054543e-03f, 1.303478453e-03f, 1.303900086e-03f, 1.304319441e-03f, 1.304736517e-03f, 1.305151313e-03f, 1.305563830e-03f, 1.305974066e-03f, 1.306382022e-03f, 1.306787695e-03f,
+1.307191087e-03f, 1.307592195e-03f, 1.307991021e-03f, 1.308387562e-03f, 1.308781819e-03f, 1.309173791e-03f, 1.309563477e-03f, 1.309950878e-03f, 1.310335992e-03f, 1.310718818e-03f,
+1.311099357e-03f, 1.311477608e-03f, 1.311853570e-03f, 1.312227243e-03f, 1.312598626e-03f, 1.312967719e-03f, 1.313334521e-03f, 1.313699032e-03f, 1.314061251e-03f, 1.314421178e-03f,
+1.314778812e-03f, 1.315134153e-03f, 1.315487201e-03f, 1.315837954e-03f, 1.316186412e-03f, 1.316532575e-03f, 1.316876443e-03f, 1.317218015e-03f, 1.317557290e-03f, 1.317894268e-03f,
+1.318228949e-03f, 1.318561332e-03f, 1.318891417e-03f, 1.319219203e-03f, 1.319544690e-03f, 1.319867877e-03f, 1.320188764e-03f, 1.320507351e-03f, 1.320823637e-03f, 1.321137622e-03f,
+1.321449305e-03f, 1.321758685e-03f, 1.322065764e-03f, 1.322370539e-03f, 1.322673012e-03f, 1.322973180e-03f, 1.323271045e-03f, 1.323566605e-03f, 1.323859861e-03f, 1.324150811e-03f,
+1.324439456e-03f, 1.324725794e-03f, 1.325009827e-03f, 1.325291553e-03f, 1.325570972e-03f, 1.325848083e-03f, 1.326122887e-03f, 1.326395383e-03f, 1.326665571e-03f, 1.326933449e-03f,
+1.327199019e-03f, 1.327462280e-03f, 1.327723231e-03f, 1.327981872e-03f, 1.328238202e-03f, 1.328492222e-03f, 1.328743931e-03f, 1.328993329e-03f, 1.329240416e-03f, 1.329485190e-03f,
+1.329727653e-03f, 1.329967803e-03f, 1.330205641e-03f, 1.330441165e-03f, 1.330674377e-03f, 1.330905275e-03f, 1.331133859e-03f, 1.331360129e-03f, 1.331584085e-03f, 1.331805727e-03f,
+1.332025054e-03f, 1.332242065e-03f, 1.332456762e-03f, 1.332669143e-03f, 1.332879209e-03f, 1.333086958e-03f, 1.333292391e-03f, 1.333495508e-03f, 1.333696309e-03f, 1.333894792e-03f,
+1.334090959e-03f, 1.334284808e-03f, 1.334476340e-03f, 1.334665555e-03f, 1.334852451e-03f, 1.335037030e-03f, 1.335219290e-03f, 1.335399232e-03f, 1.335576856e-03f, 1.335752161e-03f,
+1.335925147e-03f, 1.336095813e-03f, 1.336264161e-03f, 1.336430189e-03f, 1.336593898e-03f, 1.336755288e-03f, 1.336914357e-03f, 1.337071106e-03f, 1.337225536e-03f, 1.337377645e-03f,
+1.337527434e-03f, 1.337674902e-03f, 1.337820050e-03f, 1.337962877e-03f, 1.338103384e-03f, 1.338241569e-03f, 1.338377434e-03f, 1.338510977e-03f, 1.338642199e-03f, 1.338771100e-03f,
+1.338897679e-03f, 1.339021937e-03f, 1.339143873e-03f, 1.339263488e-03f, 1.339380781e-03f, 1.339495753e-03f, 1.339608402e-03f, 1.339718730e-03f, 1.339826735e-03f, 1.339932419e-03f,
+1.340035780e-03f, 1.340136820e-03f, 1.340235537e-03f, 1.340331932e-03f, 1.340426005e-03f, 1.340517756e-03f, 1.340607185e-03f, 1.340694291e-03f, 1.340779075e-03f, 1.340861537e-03f,
+1.340941676e-03f, 1.341019493e-03f, 1.341094988e-03f, 1.341168160e-03f, 1.341239010e-03f, 1.341307538e-03f, 1.341373744e-03f, 1.341437627e-03f, 1.341499188e-03f, 1.341558427e-03f,
+1.341615344e-03f, 1.341669939e-03f, 1.341722212e-03f, 1.341772162e-03f, 1.341819791e-03f, 1.341865097e-03f, 1.341908082e-03f, 1.341948745e-03f, 1.341987086e-03f, 1.342023106e-03f,
+1.342056804e-03f, 1.342088180e-03f, 1.342117235e-03f, 1.342143969e-03f, 1.342168381e-03f, 1.342190472e-03f, 1.342210242e-03f, 1.342227692e-03f, 1.342242820e-03f, 1.342255627e-03f,
+1.342266114e-03f, 1.342274280e-03f, 1.342280126e-03f, 1.342283651e-03f, 1.342284857e-03f, 1.342283742e-03f, 1.342280307e-03f, 1.342274553e-03f, 1.342266479e-03f, 1.342256086e-03f,
+1.342243373e-03f, 1.342228341e-03f, 1.342210990e-03f, 1.342191320e-03f, 1.342169332e-03f, 1.342145025e-03f, 1.342118400e-03f, 1.342089457e-03f, 1.342058195e-03f, 1.342024616e-03f,
+1.341988720e-03f, 1.341950506e-03f, 1.341909975e-03f, 1.341867127e-03f, 1.341821962e-03f, 1.341774481e-03f, 1.341724683e-03f, 1.341672569e-03f, 1.341618140e-03f, 1.341561394e-03f,
+1.341502334e-03f, 1.341440958e-03f, 1.341377267e-03f, 1.341311262e-03f, 1.341242942e-03f, 1.341172307e-03f, 1.341099359e-03f, 1.341024098e-03f, 1.340946523e-03f, 1.340866634e-03f,
+1.340784433e-03f, 1.340699919e-03f, 1.340613093e-03f, 1.340523955e-03f, 1.340432506e-03f, 1.340338744e-03f, 1.340242672e-03f, 1.340144289e-03f, 1.340043595e-03f, 1.339940591e-03f,
+1.339835277e-03f, 1.339727654e-03f, 1.339617721e-03f, 1.339505479e-03f, 1.339390929e-03f, 1.339274070e-03f, 1.339154904e-03f, 1.339033429e-03f, 1.338909648e-03f, 1.338783559e-03f,
+1.338655164e-03f, 1.338524463e-03f, 1.338391456e-03f, 1.338256143e-03f, 1.338118526e-03f, 1.337978603e-03f, 1.337836376e-03f, 1.337691846e-03f, 1.337545011e-03f, 1.337395873e-03f,
+1.337244433e-03f, 1.337090690e-03f, 1.336934645e-03f, 1.336776298e-03f, 1.336615650e-03f, 1.336452702e-03f, 1.336287453e-03f, 1.336119904e-03f, 1.335950055e-03f, 1.335777907e-03f,
+1.335603461e-03f, 1.335426716e-03f, 1.335247674e-03f, 1.335066334e-03f, 1.334882697e-03f, 1.334696763e-03f, 1.334508534e-03f, 1.334318009e-03f, 1.334125189e-03f, 1.333930074e-03f,
+1.333732666e-03f, 1.333532963e-03f, 1.333330967e-03f, 1.333126679e-03f, 1.332920098e-03f, 1.332711226e-03f, 1.332500062e-03f, 1.332286607e-03f, 1.332070863e-03f, 1.331852828e-03f,
+1.331632504e-03f, 1.331409892e-03f, 1.331184991e-03f, 1.330957803e-03f, 1.330728327e-03f, 1.330496565e-03f, 1.330262517e-03f, 1.330026183e-03f, 1.329787564e-03f, 1.329546661e-03f,
+1.329303473e-03f, 1.329058003e-03f, 1.328810249e-03f, 1.328560214e-03f, 1.328307896e-03f, 1.328053298e-03f, 1.327796419e-03f, 1.327537260e-03f, 1.327275821e-03f, 1.327012104e-03f,
+1.326746109e-03f, 1.326477836e-03f, 1.326207286e-03f, 1.325934459e-03f, 1.325659357e-03f, 1.325381979e-03f, 1.325102327e-03f, 1.324820401e-03f, 1.324536201e-03f, 1.324249729e-03f,
+1.323960985e-03f, 1.323669969e-03f, 1.323376682e-03f, 1.323081125e-03f, 1.322783299e-03f, 1.322483204e-03f, 1.322180840e-03f, 1.321876209e-03f, 1.321569310e-03f, 1.321260146e-03f,
+1.320948716e-03f, 1.320635021e-03f, 1.320319061e-03f, 1.320000838e-03f, 1.319680352e-03f, 1.319357604e-03f, 1.319032595e-03f, 1.318705324e-03f, 1.318375793e-03f, 1.318044003e-03f,
+1.317709954e-03f, 1.317373647e-03f, 1.317035083e-03f, 1.316694262e-03f, 1.316351185e-03f, 1.316005853e-03f, 1.315658267e-03f, 1.315308427e-03f, 1.314956334e-03f, 1.314601989e-03f,
+1.314245392e-03f, 1.313886544e-03f, 1.313525447e-03f, 1.313162100e-03f, 1.312796505e-03f, 1.312428662e-03f, 1.312058572e-03f, 1.311686236e-03f, 1.311311655e-03f, 1.310934829e-03f,
+1.310555759e-03f, 1.310174446e-03f, 1.309790891e-03f, 1.309405094e-03f, 1.309017057e-03f, 1.308626779e-03f, 1.308234263e-03f, 1.307839508e-03f, 1.307442516e-03f, 1.307043288e-03f,
+1.306641823e-03f, 1.306238124e-03f, 1.305832191e-03f, 1.305424024e-03f, 1.305013624e-03f, 1.304600993e-03f, 1.304186131e-03f, 1.303769040e-03f, 1.303349719e-03f, 1.302928170e-03f,
+1.302504393e-03f, 1.302078390e-03f, 1.301650161e-03f, 1.301219708e-03f, 1.300787030e-03f, 1.300352130e-03f, 1.299915007e-03f, 1.299475663e-03f, 1.299034099e-03f, 1.298590315e-03f,
+1.298144313e-03f, 1.297696093e-03f, 1.297245656e-03f, 1.296793003e-03f, 1.296338135e-03f, 1.295881054e-03f, 1.295421759e-03f, 1.294960251e-03f, 1.294496533e-03f, 1.294030604e-03f,
+1.293562466e-03f, 1.293092119e-03f, 1.292619565e-03f, 1.292144804e-03f, 1.291667837e-03f, 1.291188666e-03f, 1.290707291e-03f, 1.290223713e-03f, 1.289737934e-03f, 1.289249953e-03f,
+1.288759773e-03f, 1.288267394e-03f, 1.287772817e-03f, 1.287276042e-03f, 1.286777072e-03f, 1.286275907e-03f, 1.285772548e-03f, 1.285266996e-03f, 1.284759252e-03f, 1.284249317e-03f,
+1.283737193e-03f, 1.283222879e-03f, 1.282706377e-03f, 1.282187688e-03f, 1.281666814e-03f, 1.281143755e-03f, 1.280618511e-03f, 1.280091085e-03f, 1.279561478e-03f, 1.279029689e-03f,
+1.278495721e-03f, 1.277959574e-03f, 1.277421250e-03f, 1.276880749e-03f, 1.276338073e-03f, 1.275793222e-03f, 1.275246199e-03f, 1.274697002e-03f, 1.274145635e-03f, 1.273592098e-03f,
+1.273036391e-03f, 1.272478517e-03f, 1.271918476e-03f, 1.271356269e-03f, 1.270791898e-03f, 1.270225363e-03f, 1.269656666e-03f, 1.269085807e-03f, 1.268512788e-03f, 1.267937610e-03f,
+1.267360274e-03f, 1.266780781e-03f, 1.266199133e-03f, 1.265615330e-03f, 1.265029373e-03f, 1.264441265e-03f, 1.263851005e-03f, 1.263258595e-03f, 1.262664036e-03f, 1.262067329e-03f,
+1.261468476e-03f, 1.260867478e-03f, 1.260264335e-03f, 1.259659049e-03f, 1.259051622e-03f, 1.258442053e-03f, 1.257830345e-03f, 1.257216499e-03f, 1.256600516e-03f, 1.255982396e-03f,
+1.255362142e-03f, 1.254739754e-03f, 1.254115234e-03f, 1.253488582e-03f, 1.252859801e-03f, 1.252228891e-03f, 1.251595853e-03f, 1.250960689e-03f, 1.250323400e-03f, 1.249683987e-03f,
+1.249042451e-03f, 1.248398794e-03f, 1.247753016e-03f, 1.247105120e-03f, 1.246455106e-03f, 1.245802976e-03f, 1.245148730e-03f, 1.244492370e-03f, 1.243833898e-03f, 1.243173314e-03f,
+1.242510620e-03f, 1.241845817e-03f, 1.241178907e-03f, 1.240509890e-03f, 1.239838768e-03f, 1.239165542e-03f, 1.238490214e-03f, 1.237812784e-03f, 1.237133255e-03f, 1.236451627e-03f,
+1.235767902e-03f, 1.235082080e-03f, 1.234394164e-03f, 1.233704154e-03f, 1.233012053e-03f, 1.232317860e-03f, 1.231621579e-03f, 1.230923209e-03f, 1.230222752e-03f, 1.229520210e-03f,
+1.228815583e-03f, 1.228108874e-03f, 1.227400084e-03f, 1.226689213e-03f, 1.225976264e-03f, 1.225261237e-03f, 1.224544134e-03f, 1.223824956e-03f, 1.223103705e-03f, 1.222380383e-03f,
+1.221654989e-03f, 1.220927527e-03f, 1.220197996e-03f, 1.219466399e-03f, 1.218732738e-03f, 1.217997012e-03f, 1.217259224e-03f, 1.216519375e-03f, 1.215777467e-03f, 1.215033501e-03f,
+1.214287478e-03f, 1.213539400e-03f, 1.212789268e-03f, 1.212037083e-03f, 1.211282848e-03f, 1.210526563e-03f, 1.209768229e-03f, 1.209007849e-03f, 1.208245424e-03f, 1.207480955e-03f,
+1.206714443e-03f, 1.205945891e-03f, 1.205175299e-03f, 1.204402669e-03f, 1.203628002e-03f, 1.202851300e-03f, 1.202072564e-03f, 1.201291796e-03f, 1.200508998e-03f, 1.199724170e-03f,
+1.198937314e-03f, 1.198148432e-03f, 1.197357525e-03f, 1.196564594e-03f, 1.195769642e-03f, 1.194972669e-03f, 1.194173678e-03f, 1.193372669e-03f, 1.192569644e-03f, 1.191764605e-03f,
+1.190957552e-03f, 1.190148489e-03f, 1.189337415e-03f, 1.188524334e-03f, 1.187709245e-03f, 1.186892151e-03f, 1.186073053e-03f, 1.185251954e-03f, 1.184428853e-03f, 1.183603753e-03f,
+1.182776656e-03f, 1.181947563e-03f, 1.181116475e-03f, 1.180283394e-03f, 1.179448322e-03f, 1.178611259e-03f, 1.177772209e-03f, 1.176931172e-03f, 1.176088150e-03f, 1.175243144e-03f,
+1.174396156e-03f, 1.173547188e-03f, 1.172696240e-03f, 1.171843316e-03f, 1.170988416e-03f, 1.170131542e-03f, 1.169272695e-03f, 1.168411878e-03f, 1.167549091e-03f, 1.166684337e-03f,
+1.165817616e-03f, 1.164948932e-03f, 1.164078284e-03f, 1.163205675e-03f, 1.162331107e-03f, 1.161454580e-03f, 1.160576097e-03f, 1.159695660e-03f, 1.158813269e-03f, 1.157928927e-03f,
+1.157042636e-03f, 1.156154396e-03f, 1.155264210e-03f, 1.154372078e-03f, 1.153478004e-03f, 1.152581988e-03f, 1.151684033e-03f, 1.150784139e-03f, 1.149882308e-03f, 1.148978543e-03f,
+1.148072845e-03f, 1.147165215e-03f, 1.146255655e-03f, 1.145344167e-03f, 1.144430753e-03f, 1.143515414e-03f, 1.142598152e-03f, 1.141678968e-03f, 1.140757865e-03f, 1.139834844e-03f,
+1.138909907e-03f, 1.137983055e-03f, 1.137054291e-03f, 1.136123615e-03f, 1.135191030e-03f, 1.134256537e-03f, 1.133320138e-03f, 1.132381835e-03f, 1.131441630e-03f, 1.130499524e-03f,
+1.129555519e-03f, 1.128609616e-03f, 1.127661818e-03f, 1.126712127e-03f, 1.125760543e-03f, 1.124807069e-03f, 1.123851707e-03f, 1.122894458e-03f, 1.121935324e-03f, 1.120974307e-03f,
+1.120011408e-03f, 1.119046630e-03f, 1.118079973e-03f, 1.117111441e-03f, 1.116141035e-03f, 1.115168755e-03f, 1.114194606e-03f, 1.113218587e-03f, 1.112240701e-03f, 1.111260950e-03f,
+1.110279335e-03f, 1.109295858e-03f, 1.108310522e-03f, 1.107323327e-03f, 1.106334276e-03f, 1.105343371e-03f, 1.104350613e-03f, 1.103356004e-03f, 1.102359546e-03f, 1.101361241e-03f,
+1.100361091e-03f, 1.099359097e-03f, 1.098355261e-03f, 1.097349586e-03f, 1.096342072e-03f, 1.095332723e-03f, 1.094321539e-03f, 1.093308523e-03f, 1.092293676e-03f, 1.091277001e-03f,
+1.090258498e-03f, 1.089238171e-03f, 1.088216020e-03f, 1.087192049e-03f, 1.086166258e-03f, 1.085138649e-03f, 1.084109225e-03f, 1.083077987e-03f, 1.082044938e-03f, 1.081010078e-03f,
+1.079973411e-03f, 1.078934937e-03f, 1.077894659e-03f, 1.076852579e-03f, 1.075808698e-03f, 1.074763019e-03f, 1.073715543e-03f, 1.072666272e-03f, 1.071615209e-03f, 1.070562355e-03f,
+1.069507712e-03f, 1.068451282e-03f, 1.067393067e-03f, 1.066333068e-03f, 1.065271289e-03f, 1.064207730e-03f, 1.063142394e-03f, 1.062075283e-03f, 1.061006398e-03f, 1.059935742e-03f,
+1.058863316e-03f, 1.057789123e-03f, 1.056713164e-03f, 1.055635441e-03f, 1.054555957e-03f, 1.053474713e-03f, 1.052391711e-03f, 1.051306954e-03f, 1.050220442e-03f, 1.049132179e-03f,
+1.048042166e-03f, 1.046950406e-03f, 1.045856899e-03f, 1.044761649e-03f, 1.043664657e-03f, 1.042565925e-03f, 1.041465455e-03f, 1.040363249e-03f, 1.039259309e-03f, 1.038153638e-03f,
+1.037046237e-03f, 1.035937107e-03f, 1.034826253e-03f, 1.033713674e-03f, 1.032599374e-03f, 1.031483354e-03f, 1.030365616e-03f, 1.029246162e-03f, 1.028124995e-03f, 1.027002117e-03f,
+1.025877529e-03f, 1.024751233e-03f, 1.023623232e-03f, 1.022493527e-03f, 1.021362121e-03f, 1.020229016e-03f, 1.019094214e-03f, 1.017957716e-03f, 1.016819526e-03f, 1.015679644e-03f,
+1.014538073e-03f, 1.013394816e-03f, 1.012249873e-03f, 1.011103248e-03f, 1.009954942e-03f, 1.008804958e-03f, 1.007653297e-03f, 1.006499962e-03f, 1.005344954e-03f, 1.004188276e-03f,
+1.003029930e-03f, 1.001869918e-03f, 1.000708242e-03f, 9.995449041e-04f, 9.983799066e-04f, 9.972132514e-04f, 9.960449408e-04f, 9.948749768e-04f, 9.937033616e-04f, 9.925300972e-04f,
+9.913551858e-04f, 9.901786295e-04f, 9.890004305e-04f, 9.878205908e-04f, 9.866391127e-04f, 9.854559982e-04f, 9.842712495e-04f, 9.830848688e-04f, 9.818968581e-04f, 9.807072196e-04f,
+9.795159556e-04f, 9.783230681e-04f, 9.771285592e-04f, 9.759324313e-04f, 9.747346863e-04f, 9.735353265e-04f, 9.723343541e-04f, 9.711317712e-04f, 9.699275799e-04f, 9.687217826e-04f,
+9.675143813e-04f, 9.663053782e-04f, 9.650947755e-04f, 9.638825754e-04f, 9.626687801e-04f, 9.614533918e-04f, 9.602364126e-04f, 9.590178448e-04f, 9.577976906e-04f, 9.565759521e-04f,
+9.553526316e-04f, 9.541277313e-04f, 9.529012534e-04f, 9.516732000e-04f, 9.504435735e-04f, 9.492123760e-04f, 9.479796098e-04f, 9.467452770e-04f, 9.455093799e-04f, 9.442719208e-04f,
+9.430329018e-04f, 9.417923252e-04f, 9.405501933e-04f, 9.393065082e-04f, 9.380612722e-04f, 9.368144875e-04f, 9.355661564e-04f, 9.343162812e-04f, 9.330648641e-04f, 9.318119073e-04f,
+9.305574131e-04f, 9.293013838e-04f, 9.280438216e-04f, 9.267847288e-04f, 9.255241076e-04f, 9.242619603e-04f, 9.229982892e-04f, 9.217330966e-04f, 9.204663848e-04f, 9.191981559e-04f,
+9.179284123e-04f, 9.166571564e-04f, 9.153843902e-04f, 9.141101163e-04f, 9.128343368e-04f, 9.115570540e-04f, 9.102782702e-04f, 9.089979878e-04f, 9.077162090e-04f, 9.064329362e-04f,
+9.051481716e-04f, 9.038619175e-04f, 9.025741763e-04f, 9.012849503e-04f, 8.999942417e-04f, 8.987020530e-04f, 8.974083864e-04f, 8.961132442e-04f, 8.948166288e-04f, 8.935185425e-04f,
+8.922189877e-04f, 8.909179666e-04f, 8.896154816e-04f, 8.883115350e-04f, 8.870061292e-04f, 8.856992665e-04f, 8.843909493e-04f, 8.830811799e-04f, 8.817699606e-04f, 8.804572939e-04f,
+8.791431820e-04f, 8.778276273e-04f, 8.765106322e-04f, 8.751921990e-04f, 8.738723301e-04f, 8.725510279e-04f, 8.712282947e-04f, 8.699041329e-04f, 8.685785449e-04f, 8.672515330e-04f,
+8.659230997e-04f, 8.645932473e-04f, 8.632619781e-04f, 8.619292946e-04f, 8.605951992e-04f, 8.592596942e-04f, 8.579227821e-04f, 8.565844652e-04f, 8.552447459e-04f, 8.539036266e-04f,
+8.525611098e-04f, 8.512171977e-04f, 8.498718929e-04f, 8.485251978e-04f, 8.471771147e-04f, 8.458276460e-04f, 8.444767942e-04f, 8.431245617e-04f, 8.417709509e-04f, 8.404159642e-04f,
+8.390596041e-04f, 8.377018730e-04f, 8.363427732e-04f, 8.349823073e-04f, 8.336204776e-04f, 8.322572866e-04f, 8.308927368e-04f, 8.295268305e-04f, 8.281595702e-04f, 8.267909584e-04f,
+8.254209975e-04f, 8.240496899e-04f, 8.226770381e-04f, 8.213030446e-04f, 8.199277117e-04f, 8.185510420e-04f, 8.171730379e-04f, 8.157937019e-04f, 8.144130364e-04f, 8.130310439e-04f,
+8.116477269e-04f, 8.102630878e-04f, 8.088771291e-04f, 8.074898533e-04f, 8.061012628e-04f, 8.047113601e-04f, 8.033201478e-04f, 8.019276282e-04f, 8.005338040e-04f, 7.991386774e-04f,
+7.977422511e-04f, 7.963445276e-04f, 7.949455093e-04f, 7.935451987e-04f, 7.921435983e-04f, 7.907407106e-04f, 7.893365382e-04f, 7.879310834e-04f, 7.865243489e-04f, 7.851163371e-04f,
+7.837070506e-04f, 7.822964917e-04f, 7.808846632e-04f, 7.794715674e-04f, 7.780572069e-04f, 7.766415843e-04f, 7.752247019e-04f, 7.738065624e-04f, 7.723871683e-04f, 7.709665221e-04f,
+7.695446264e-04f, 7.681214836e-04f, 7.666970962e-04f, 7.652714670e-04f, 7.638445983e-04f, 7.624164927e-04f, 7.609871527e-04f, 7.595565810e-04f, 7.581247800e-04f, 7.566917522e-04f,
+7.552575003e-04f, 7.538220268e-04f, 7.523853342e-04f, 7.509474252e-04f, 7.495083021e-04f, 7.480679677e-04f, 7.466264244e-04f, 7.451836749e-04f, 7.437397217e-04f, 7.422945673e-04f,
+7.408482143e-04f, 7.394006654e-04f, 7.379519230e-04f, 7.365019898e-04f, 7.350508683e-04f, 7.335985611e-04f, 7.321450707e-04f, 7.306903999e-04f, 7.292345510e-04f, 7.277775268e-04f,
+7.263193299e-04f, 7.248599627e-04f, 7.233994279e-04f, 7.219377281e-04f, 7.204748659e-04f, 7.190108439e-04f, 7.175456647e-04f, 7.160793308e-04f, 7.146118449e-04f, 7.131432097e-04f,
+7.116734276e-04f, 7.102025013e-04f, 7.087304334e-04f, 7.072572265e-04f, 7.057828833e-04f, 7.043074063e-04f, 7.028307982e-04f, 7.013530616e-04f, 6.998741991e-04f, 6.983942133e-04f,
+6.969131069e-04f, 6.954308824e-04f, 6.939475425e-04f, 6.924630899e-04f, 6.909775272e-04f, 6.894908569e-04f, 6.880030818e-04f, 6.865142044e-04f, 6.850242275e-04f, 6.835331536e-04f,
+6.820409854e-04f, 6.805477255e-04f, 6.790533766e-04f, 6.775579413e-04f, 6.760614223e-04f, 6.745638222e-04f, 6.730651437e-04f, 6.715653894e-04f, 6.700645620e-04f, 6.685626642e-04f,
+6.670596985e-04f, 6.655556677e-04f, 6.640505745e-04f, 6.625444214e-04f, 6.610372112e-04f, 6.595289464e-04f, 6.580196299e-04f, 6.565092643e-04f, 6.549978521e-04f, 6.534853962e-04f,
+6.519718991e-04f, 6.504573637e-04f, 6.489417924e-04f, 6.474251881e-04f, 6.459075533e-04f, 6.443888909e-04f, 6.428692034e-04f, 6.413484935e-04f, 6.398267640e-04f, 6.383040176e-04f,
+6.367802568e-04f, 6.352554845e-04f, 6.337297033e-04f, 6.322029159e-04f, 6.306751250e-04f, 6.291463333e-04f, 6.276165436e-04f, 6.260857584e-04f, 6.245539805e-04f, 6.230212127e-04f,
+6.214874576e-04f, 6.199527180e-04f, 6.184169964e-04f, 6.168802958e-04f, 6.153426187e-04f, 6.138039679e-04f, 6.122643461e-04f, 6.107237561e-04f, 6.091822005e-04f, 6.076396820e-04f,
+6.060962034e-04f, 6.045517675e-04f, 6.030063769e-04f, 6.014600343e-04f, 5.999127426e-04f, 5.983645043e-04f, 5.968153223e-04f, 5.952651994e-04f, 5.937141381e-04f, 5.921621413e-04f,
+5.906092117e-04f, 5.890553520e-04f, 5.875005650e-04f, 5.859448534e-04f, 5.843882200e-04f, 5.828306675e-04f, 5.812721986e-04f, 5.797128162e-04f, 5.781525228e-04f, 5.765913214e-04f,
+5.750292147e-04f, 5.734662053e-04f, 5.719022961e-04f, 5.703374898e-04f, 5.687717892e-04f, 5.672051970e-04f, 5.656377160e-04f, 5.640693490e-04f, 5.625000987e-04f, 5.609299678e-04f,
+5.593589592e-04f, 5.577870757e-04f, 5.562143199e-04f, 5.546406946e-04f, 5.530662027e-04f, 5.514908469e-04f, 5.499146299e-04f, 5.483375546e-04f, 5.467596237e-04f, 5.451808400e-04f,
+5.436012062e-04f, 5.420207253e-04f, 5.404393998e-04f, 5.388572327e-04f, 5.372742267e-04f, 5.356903846e-04f, 5.341057091e-04f, 5.325202032e-04f, 5.309338694e-04f, 5.293467108e-04f,
+5.277587299e-04f, 5.261699297e-04f, 5.245803129e-04f, 5.229898824e-04f, 5.213986408e-04f, 5.198065911e-04f, 5.182137360e-04f, 5.166200783e-04f, 5.150256208e-04f, 5.134303664e-04f,
+5.118343177e-04f, 5.102374777e-04f, 5.086398491e-04f, 5.070414348e-04f, 5.054422375e-04f, 5.038422601e-04f, 5.022415054e-04f, 5.006399761e-04f, 4.990376752e-04f, 4.974346054e-04f,
+4.958307695e-04f, 4.942261703e-04f, 4.926208107e-04f, 4.910146936e-04f, 4.894078216e-04f, 4.878001976e-04f, 4.861918245e-04f, 4.845827051e-04f, 4.829728422e-04f, 4.813622386e-04f,
+4.797508971e-04f, 4.781388207e-04f, 4.765260120e-04f, 4.749124740e-04f, 4.732982095e-04f, 4.716832213e-04f, 4.700675123e-04f, 4.684510852e-04f, 4.668339429e-04f, 4.652160883e-04f,
+4.635975242e-04f, 4.619782534e-04f, 4.603582787e-04f, 4.587376031e-04f, 4.571162294e-04f, 4.554941603e-04f, 4.538713988e-04f, 4.522479477e-04f, 4.506238098e-04f, 4.489989880e-04f,
+4.473734851e-04f, 4.457473040e-04f, 4.441204475e-04f, 4.424929186e-04f, 4.408647199e-04f, 4.392358545e-04f, 4.376063251e-04f, 4.359761346e-04f, 4.343452858e-04f, 4.327137817e-04f,
+4.310816250e-04f, 4.294488187e-04f, 4.278153656e-04f, 4.261812685e-04f, 4.245465304e-04f, 4.229111540e-04f, 4.212751423e-04f, 4.196384981e-04f, 4.180012242e-04f, 4.163633236e-04f,
+4.147247992e-04f, 4.130856537e-04f, 4.114458900e-04f, 4.098055111e-04f, 4.081645197e-04f, 4.065229189e-04f, 4.048807114e-04f, 4.032379000e-04f, 4.015944878e-04f, 3.999504775e-04f,
+3.983058721e-04f, 3.966606744e-04f, 3.950148873e-04f, 3.933685137e-04f, 3.917215564e-04f, 3.900740184e-04f, 3.884259025e-04f, 3.867772116e-04f, 3.851279486e-04f, 3.834781163e-04f,
+3.818277178e-04f, 3.801767557e-04f, 3.785252331e-04f, 3.768731528e-04f, 3.752205177e-04f, 3.735673307e-04f, 3.719135947e-04f, 3.702593126e-04f, 3.686044872e-04f, 3.669491215e-04f,
+3.652932184e-04f, 3.636367807e-04f, 3.619798113e-04f, 3.603223132e-04f, 3.586642892e-04f, 3.570057422e-04f, 3.553466752e-04f, 3.536870910e-04f, 3.520269925e-04f, 3.503663827e-04f,
+3.487052643e-04f, 3.470436404e-04f, 3.453815139e-04f, 3.437188875e-04f, 3.420557643e-04f, 3.403921472e-04f, 3.387280389e-04f, 3.370634426e-04f, 3.353983609e-04f, 3.337327970e-04f,
+3.320667536e-04f, 3.304002337e-04f, 3.287332402e-04f, 3.270657760e-04f, 3.253978439e-04f, 3.237294470e-04f, 3.220605882e-04f, 3.203912702e-04f, 3.187214961e-04f, 3.170512688e-04f,
+3.153805912e-04f, 3.137094661e-04f, 3.120378966e-04f, 3.103658855e-04f, 3.086934357e-04f, 3.070205502e-04f, 3.053472318e-04f, 3.036734836e-04f, 3.019993083e-04f, 3.003247090e-04f,
+2.986496885e-04f, 2.969742498e-04f, 2.952983958e-04f, 2.936221294e-04f, 2.919454536e-04f, 2.902683712e-04f, 2.885908851e-04f, 2.869129984e-04f, 2.852347139e-04f, 2.835560346e-04f,
+2.818769633e-04f, 2.801975030e-04f, 2.785176566e-04f, 2.768374271e-04f, 2.751568174e-04f, 2.734758304e-04f, 2.717944690e-04f, 2.701127362e-04f, 2.684306349e-04f, 2.667481680e-04f,
+2.650653384e-04f, 2.633821492e-04f, 2.616986031e-04f, 2.600147032e-04f, 2.583304524e-04f, 2.566458535e-04f, 2.549609096e-04f, 2.532756236e-04f, 2.515899984e-04f, 2.499040369e-04f,
+2.482177421e-04f, 2.465311169e-04f, 2.448441643e-04f, 2.431568871e-04f, 2.414692884e-04f, 2.397813710e-04f, 2.380931378e-04f, 2.364045919e-04f, 2.347157362e-04f, 2.330265736e-04f,
+2.313371070e-04f, 2.296473393e-04f, 2.279572736e-04f, 2.262669128e-04f, 2.245762597e-04f, 2.228853173e-04f, 2.211940887e-04f, 2.195025766e-04f, 2.178107841e-04f, 2.161187141e-04f,
+2.144263695e-04f, 2.127337533e-04f, 2.110408684e-04f, 2.093477178e-04f, 2.076543044e-04f, 2.059606311e-04f, 2.042667009e-04f, 2.025725167e-04f, 2.008780815e-04f, 1.991833982e-04f,
+1.974884698e-04f, 1.957932992e-04f, 1.940978894e-04f, 1.924022432e-04f, 1.907063637e-04f, 1.890102538e-04f, 1.873139164e-04f, 1.856173545e-04f, 1.839205710e-04f, 1.822235688e-04f,
+1.805263510e-04f, 1.788289205e-04f, 1.771312801e-04f, 1.754334330e-04f, 1.737353819e-04f, 1.720371298e-04f, 1.703386798e-04f, 1.686400347e-04f, 1.669411975e-04f, 1.652421712e-04f,
+1.635429586e-04f, 1.618435628e-04f, 1.601439866e-04f, 1.584442331e-04f, 1.567443052e-04f, 1.550442058e-04f, 1.533439379e-04f, 1.516435044e-04f, 1.499429083e-04f, 1.482421525e-04f,
+1.465412400e-04f, 1.448401738e-04f, 1.431389567e-04f, 1.414375917e-04f, 1.397360818e-04f, 1.380344299e-04f, 1.363326390e-04f, 1.346307121e-04f, 1.329286520e-04f, 1.312264617e-04f,
+1.295241442e-04f, 1.278217025e-04f, 1.261191394e-04f, 1.244164579e-04f, 1.227136610e-04f, 1.210107517e-04f, 1.193077328e-04f, 1.176046074e-04f, 1.159013783e-04f, 1.141980485e-04f,
+1.124946211e-04f, 1.107910988e-04f, 1.090874848e-04f, 1.073837818e-04f, 1.056799930e-04f, 1.039761212e-04f, 1.022721693e-04f, 1.005681404e-04f, 9.886403741e-05f, 9.715986321e-05f,
+9.545562080e-05f, 9.375131312e-05f, 9.204694312e-05f, 9.034251375e-05f, 8.863802797e-05f, 8.693348871e-05f, 8.522889893e-05f, 8.352426159e-05f, 8.181957962e-05f, 8.011485599e-05f,
+7.841009363e-05f, 7.670529550e-05f, 7.500046455e-05f, 7.329560372e-05f, 7.159071597e-05f, 6.988580424e-05f, 6.818087149e-05f, 6.647592065e-05f, 6.477095469e-05f, 6.306597654e-05f,
+6.136098915e-05f, 5.965599548e-05f, 5.795099847e-05f, 5.624600107e-05f, 5.454100622e-05f, 5.283601688e-05f, 5.113103599e-05f, 4.942606649e-05f, 4.772111134e-05f, 4.601617348e-05f,
+4.431125585e-05f, 4.260636141e-05f, 4.090149309e-05f, 3.919665385e-05f, 3.749184662e-05f, 3.578707436e-05f, 3.408234001e-05f, 3.237764652e-05f, 3.067299682e-05f, 2.896839386e-05f,
+2.726384059e-05f, 2.555933995e-05f, 2.385489489e-05f, 2.215050834e-05f, 2.044618325e-05f, 1.874192256e-05f, 1.703772922e-05f, 1.533360616e-05f, 1.362955633e-05f, 1.192558268e-05f,
+1.022168813e-05f, 8.517875632e-06f, 6.814148129e-06f, 5.110508557e-06f, 3.406959858e-06f, 1.703504971e-06f, 1.468342492e-10f, -1.703111612e-06f, -3.406267431e-06f, -5.109317682e-06f,
+-6.812259430e-06f, -8.515089735e-06f, -1.021780566e-05f, -1.192040427e-05f, -1.362288263e-05f, -1.532523780e-05f, -1.702746685e-05f, -1.872956684e-05f, -2.043153483e-05f, -2.213336790e-05f,
+-2.383506311e-05f, -2.553661752e-05f, -2.723802820e-05f, -2.893929222e-05f, -3.064040664e-05f, -3.234136854e-05f, -3.404217498e-05f, -3.574282304e-05f, -3.744330978e-05f, -3.914363226e-05f,
+-4.084378757e-05f, -4.254377277e-05f, -4.424358494e-05f, -4.594322114e-05f, -4.764267844e-05f, -4.934195393e-05f, -5.104104467e-05f, -5.273994774e-05f, -5.443866021e-05f, -5.613717915e-05f,
+-5.783550165e-05f, -5.953362477e-05f, -6.123154559e-05f, -6.292926120e-05f, -6.462676866e-05f, -6.632406505e-05f, -6.802114746e-05f, -6.971801296e-05f, -7.141465863e-05f, -7.311108155e-05f,
+-7.480727881e-05f, -7.650324747e-05f, -7.819898463e-05f, -7.989448737e-05f, -8.158975276e-05f, -8.328477790e-05f, -8.497955987e-05f, -8.667409574e-05f, -8.836838261e-05f, -9.006241757e-05f,
+-9.175619769e-05f, -9.344972006e-05f, -9.514298178e-05f, -9.683597993e-05f, -9.852871160e-05f, -1.002211739e-04f, -1.019133639e-04f, -1.036052786e-04f, -1.052969153e-04f, -1.069882709e-04f,
+-1.086793426e-04f, -1.103701274e-04f, -1.120606225e-04f, -1.137508250e-04f, -1.154407319e-04f, -1.171303403e-04f, -1.188196474e-04f, -1.205086502e-04f, -1.221973458e-04f, -1.238857314e-04f,
+-1.255738040e-04f, -1.272615607e-04f, -1.289489986e-04f, -1.306361149e-04f, -1.323229066e-04f, -1.340093709e-04f, -1.356955048e-04f, -1.373813054e-04f, -1.390667699e-04f, -1.407518954e-04f,
+-1.424366789e-04f, -1.441211176e-04f, -1.458052086e-04f, -1.474889489e-04f, -1.491723358e-04f, -1.508553663e-04f, -1.525380375e-04f, -1.542203465e-04f, -1.559022905e-04f, -1.575838665e-04f,
+-1.592650717e-04f, -1.609459032e-04f, -1.626263581e-04f, -1.643064336e-04f, -1.659861267e-04f, -1.676654345e-04f, -1.693443542e-04f, -1.710228829e-04f, -1.727010178e-04f, -1.743787559e-04f,
+-1.760560943e-04f, -1.777330303e-04f, -1.794095608e-04f, -1.810856831e-04f, -1.827613943e-04f, -1.844366915e-04f, -1.861115718e-04f, -1.877860323e-04f, -1.894600703e-04f, -1.911336827e-04f,
+-1.928068668e-04f, -1.944796197e-04f, -1.961519385e-04f, -1.978238203e-04f, -1.994952623e-04f, -2.011662616e-04f, -2.028368154e-04f, -2.045069208e-04f, -2.061765749e-04f, -2.078457749e-04f,
+-2.095145179e-04f, -2.111828010e-04f, -2.128506215e-04f, -2.145179764e-04f, -2.161848629e-04f, -2.178512781e-04f, -2.195172192e-04f, -2.211826833e-04f, -2.228476676e-04f, -2.245121693e-04f,
+-2.261761854e-04f, -2.278397131e-04f, -2.295027497e-04f, -2.311652921e-04f, -2.328273377e-04f, -2.344888835e-04f, -2.361499267e-04f, -2.378104645e-04f, -2.394704940e-04f, -2.411300124e-04f,
+-2.427890168e-04f, -2.444475044e-04f, -2.461054724e-04f, -2.477629180e-04f, -2.494198382e-04f, -2.510762303e-04f, -2.527320915e-04f, -2.543874188e-04f, -2.560422095e-04f, -2.576964608e-04f,
+-2.593501697e-04f, -2.610033336e-04f, -2.626559495e-04f, -2.643080147e-04f, -2.659595263e-04f, -2.676104814e-04f, -2.692608773e-04f, -2.709107112e-04f, -2.725599802e-04f, -2.742086816e-04f,
+-2.758568124e-04f, -2.775043699e-04f, -2.791513513e-04f, -2.807977537e-04f, -2.824435743e-04f, -2.840888104e-04f, -2.857334591e-04f, -2.873775176e-04f, -2.890209832e-04f, -2.906638529e-04f,
+-2.923061240e-04f, -2.939477937e-04f, -2.955888592e-04f, -2.972293176e-04f, -2.988691663e-04f, -3.005084023e-04f, -3.021470229e-04f, -3.037850254e-04f, -3.054224068e-04f, -3.070591644e-04f,
+-3.086952954e-04f, -3.103307970e-04f, -3.119656665e-04f, -3.135999010e-04f, -3.152334977e-04f, -3.168664539e-04f, -3.184987668e-04f, -3.201304336e-04f, -3.217614514e-04f, -3.233918177e-04f,
+-3.250215294e-04f, -3.266505840e-04f, -3.282789785e-04f, -3.299067102e-04f, -3.315337764e-04f, -3.331601742e-04f, -3.347859010e-04f, -3.364109539e-04f, -3.380353301e-04f, -3.396590269e-04f,
+-3.412820415e-04f, -3.429043712e-04f, -3.445260131e-04f, -3.461469646e-04f, -3.477672229e-04f, -3.493867852e-04f, -3.510056487e-04f, -3.526238106e-04f, -3.542412684e-04f, -3.558580191e-04f,
+-3.574740600e-04f, -3.590893884e-04f, -3.607040015e-04f, -3.623178966e-04f, -3.639310709e-04f, -3.655435217e-04f, -3.671552462e-04f, -3.687662417e-04f, -3.703765054e-04f, -3.719860347e-04f,
+-3.735948267e-04f, -3.752028788e-04f, -3.768101881e-04f, -3.784167520e-04f, -3.800225677e-04f, -3.816276325e-04f, -3.832319437e-04f, -3.848354985e-04f, -3.864382942e-04f, -3.880403281e-04f,
+-3.896415975e-04f, -3.912420995e-04f, -3.928418316e-04f, -3.944407910e-04f, -3.960389749e-04f, -3.976363807e-04f, -3.992330056e-04f, -4.008288469e-04f, -4.024239020e-04f, -4.040181680e-04f,
+-4.056116424e-04f, -4.072043223e-04f, -4.087962051e-04f, -4.103872880e-04f, -4.119775684e-04f, -4.135670436e-04f, -4.151557108e-04f, -4.167435674e-04f, -4.183306107e-04f, -4.199168379e-04f,
+-4.215022464e-04f, -4.230868335e-04f, -4.246705965e-04f, -4.262535327e-04f, -4.278356394e-04f, -4.294169139e-04f, -4.309973536e-04f, -4.325769557e-04f, -4.341557176e-04f, -4.357336366e-04f,
+-4.373107101e-04f, -4.388869352e-04f, -4.404623095e-04f, -4.420368301e-04f, -4.436104945e-04f, -4.451832999e-04f, -4.467552437e-04f, -4.483263232e-04f, -4.498965357e-04f, -4.514658787e-04f,
+-4.530343493e-04f, -4.546019451e-04f, -4.561686632e-04f, -4.577345011e-04f, -4.592994561e-04f, -4.608635256e-04f, -4.624267068e-04f, -4.639889972e-04f, -4.655503940e-04f, -4.671108947e-04f,
+-4.686704966e-04f, -4.702291971e-04f, -4.717869935e-04f, -4.733438831e-04f, -4.748998634e-04f, -4.764549317e-04f, -4.780090853e-04f, -4.795623217e-04f, -4.811146382e-04f, -4.826660322e-04f,
+-4.842165010e-04f, -4.857660420e-04f, -4.873146526e-04f, -4.888623302e-04f, -4.904090721e-04f, -4.919548758e-04f, -4.934997385e-04f, -4.950436578e-04f, -4.965866310e-04f, -4.981286554e-04f,
+-4.996697285e-04f, -5.012098477e-04f, -5.027490103e-04f, -5.042872137e-04f, -5.058244554e-04f, -5.073607327e-04f, -5.088960431e-04f, -5.104303839e-04f, -5.119637526e-04f, -5.134961465e-04f,
+-5.150275630e-04f, -5.165579997e-04f, -5.180874538e-04f, -5.196159229e-04f, -5.211434042e-04f, -5.226698953e-04f, -5.241953935e-04f, -5.257198963e-04f, -5.272434011e-04f, -5.287659053e-04f,
+-5.302874063e-04f, -5.318079017e-04f, -5.333273887e-04f, -5.348458649e-04f, -5.363633276e-04f, -5.378797743e-04f, -5.393952025e-04f, -5.409096096e-04f, -5.424229930e-04f, -5.439353502e-04f,
+-5.454466786e-04f, -5.469569757e-04f, -5.484662388e-04f, -5.499744656e-04f, -5.514816533e-04f, -5.529877996e-04f, -5.544929018e-04f, -5.559969573e-04f, -5.574999637e-04f, -5.590019185e-04f,
+-5.605028190e-04f, -5.620026627e-04f, -5.635014472e-04f, -5.649991699e-04f, -5.664958282e-04f, -5.679914197e-04f, -5.694859418e-04f, -5.709793920e-04f, -5.724717677e-04f, -5.739630666e-04f,
+-5.754532859e-04f, -5.769424233e-04f, -5.784304762e-04f, -5.799174422e-04f, -5.814033186e-04f, -5.828881030e-04f, -5.843717930e-04f, -5.858543859e-04f, -5.873358793e-04f, -5.888162707e-04f,
+-5.902955577e-04f, -5.917737376e-04f, -5.932508081e-04f, -5.947267666e-04f, -5.962016106e-04f, -5.976753378e-04f, -5.991479455e-04f, -6.006194313e-04f, -6.020897927e-04f, -6.035590273e-04f,
+-6.050271326e-04f, -6.064941060e-04f, -6.079599452e-04f, -6.094246477e-04f, -6.108882110e-04f, -6.123506326e-04f, -6.138119100e-04f, -6.152720409e-04f, -6.167310228e-04f, -6.181888532e-04f,
+-6.196455296e-04f, -6.211010496e-04f, -6.225554108e-04f, -6.240086107e-04f, -6.254606469e-04f, -6.269115169e-04f, -6.283612182e-04f, -6.298097485e-04f, -6.312571054e-04f, -6.327032863e-04f,
+-6.341482888e-04f, -6.355921106e-04f, -6.370347491e-04f, -6.384762021e-04f, -6.399164669e-04f, -6.413555413e-04f, -6.427934228e-04f, -6.442301090e-04f, -6.456655975e-04f, -6.470998858e-04f,
+-6.485329716e-04f, -6.499648525e-04f, -6.513955259e-04f, -6.528249897e-04f, -6.542532413e-04f, -6.556802783e-04f, -6.571060983e-04f, -6.585306991e-04f, -6.599540781e-04f, -6.613762329e-04f,
+-6.627971613e-04f, -6.642168607e-04f, -6.656353289e-04f, -6.670525635e-04f, -6.684685620e-04f, -6.698833220e-04f, -6.712968413e-04f, -6.727091175e-04f, -6.741201481e-04f, -6.755299308e-04f,
+-6.769384633e-04f, -6.783457432e-04f, -6.797517681e-04f, -6.811565357e-04f, -6.825600436e-04f, -6.839622894e-04f, -6.853632709e-04f, -6.867629856e-04f, -6.881614312e-04f, -6.895586055e-04f,
+-6.909545059e-04f, -6.923491303e-04f, -6.937424762e-04f, -6.951345413e-04f, -6.965253234e-04f, -6.979148200e-04f, -6.993030289e-04f, -7.006899476e-04f, -7.020755740e-04f, -7.034599056e-04f,
+-7.048429402e-04f, -7.062246755e-04f, -7.076051091e-04f, -7.089842387e-04f, -7.103620620e-04f, -7.117385767e-04f, -7.131137805e-04f, -7.144876712e-04f, -7.158602463e-04f, -7.172315037e-04f,
+-7.186014409e-04f, -7.199700558e-04f, -7.213373461e-04f, -7.227033094e-04f, -7.240679434e-04f, -7.254312460e-04f, -7.267932148e-04f, -7.281538475e-04f, -7.295131418e-04f, -7.308710956e-04f,
+-7.322277065e-04f, -7.335829722e-04f, -7.349368905e-04f, -7.362894592e-04f, -7.376406759e-04f, -7.389905384e-04f, -7.403390445e-04f, -7.416861919e-04f, -7.430319784e-04f, -7.443764016e-04f,
+-7.457194595e-04f, -7.470611496e-04f, -7.484014699e-04f, -7.497404180e-04f, -7.510779917e-04f, -7.524141888e-04f, -7.537490071e-04f, -7.550824443e-04f, -7.564144982e-04f, -7.577451666e-04f,
+-7.590744472e-04f, -7.604023379e-04f, -7.617288364e-04f, -7.630539406e-04f, -7.643776482e-04f, -7.656999569e-04f, -7.670208647e-04f, -7.683403693e-04f, -7.696584685e-04f, -7.709751601e-04f,
+-7.722904419e-04f, -7.736043117e-04f, -7.749167674e-04f, -7.762278067e-04f, -7.775374275e-04f, -7.788456276e-04f, -7.801524048e-04f, -7.814577569e-04f, -7.827616817e-04f, -7.840641772e-04f,
+-7.853652411e-04f, -7.866648712e-04f, -7.879630654e-04f, -7.892598216e-04f, -7.905551375e-04f, -7.918490111e-04f, -7.931414401e-04f, -7.944324225e-04f, -7.957219560e-04f, -7.970100385e-04f,
+-7.982966680e-04f, -7.995818421e-04f, -8.008655589e-04f, -8.021478162e-04f, -8.034286118e-04f, -8.047079437e-04f, -8.059858096e-04f, -8.072622075e-04f, -8.085371353e-04f, -8.098105907e-04f,
+-8.110825719e-04f, -8.123530765e-04f, -8.136221025e-04f, -8.148896478e-04f, -8.161557102e-04f, -8.174202878e-04f, -8.186833783e-04f, -8.199449798e-04f, -8.212050900e-04f, -8.224637069e-04f,
+-8.237208285e-04f, -8.249764525e-04f, -8.262305770e-04f, -8.274831999e-04f, -8.287343191e-04f, -8.299839325e-04f, -8.312320380e-04f, -8.324786336e-04f, -8.337237172e-04f, -8.349672868e-04f,
+-8.362093402e-04f, -8.374498755e-04f, -8.386888905e-04f, -8.399263833e-04f, -8.411623517e-04f, -8.423967938e-04f, -8.436297074e-04f, -8.448610905e-04f, -8.460909412e-04f, -8.473192573e-04f,
+-8.485460368e-04f, -8.497712777e-04f, -8.509949780e-04f, -8.522171356e-04f, -8.534377486e-04f, -8.546568149e-04f, -8.558743324e-04f, -8.570902992e-04f, -8.583047133e-04f, -8.595175726e-04f,
+-8.607288752e-04f, -8.619386190e-04f, -8.631468020e-04f, -8.643534223e-04f, -8.655584779e-04f, -8.667619667e-04f, -8.679638868e-04f, -8.691642361e-04f, -8.703630128e-04f, -8.715602148e-04f,
+-8.727558402e-04f, -8.739498869e-04f, -8.751423530e-04f, -8.763332366e-04f, -8.775225356e-04f, -8.787102481e-04f, -8.798963722e-04f, -8.810809058e-04f, -8.822638471e-04f, -8.834451941e-04f,
+-8.846249448e-04f, -8.858030973e-04f, -8.869796496e-04f, -8.881545998e-04f, -8.893279460e-04f, -8.904996862e-04f, -8.916698186e-04f, -8.928383411e-04f, -8.940052518e-04f, -8.951705489e-04f,
+-8.963342304e-04f, -8.974962943e-04f, -8.986567389e-04f, -8.998155621e-04f, -9.009727621e-04f, -9.021283369e-04f, -9.032822846e-04f, -9.044346034e-04f, -9.055852914e-04f, -9.067343466e-04f,
+-9.078817672e-04f, -9.090275512e-04f, -9.101716969e-04f, -9.113142023e-04f, -9.124550655e-04f, -9.135942847e-04f, -9.147318579e-04f, -9.158677834e-04f, -9.170020592e-04f, -9.181346835e-04f,
+-9.192656544e-04f, -9.203949701e-04f, -9.215226288e-04f, -9.226486284e-04f, -9.237729673e-04f, -9.248956435e-04f, -9.260166553e-04f, -9.271360008e-04f, -9.282536781e-04f, -9.293696854e-04f,
+-9.304840208e-04f, -9.315966827e-04f, -9.327076690e-04f, -9.338169781e-04f, -9.349246080e-04f, -9.360305570e-04f, -9.371348233e-04f, -9.382374050e-04f, -9.393383004e-04f, -9.404375075e-04f,
+-9.415350247e-04f, -9.426308502e-04f, -9.437249821e-04f, -9.448174186e-04f, -9.459081580e-04f, -9.469971985e-04f, -9.480845382e-04f, -9.491701755e-04f, -9.502541085e-04f, -9.513363354e-04f,
+-9.524168546e-04f, -9.534956641e-04f, -9.545727623e-04f, -9.556481474e-04f, -9.567218177e-04f, -9.577937713e-04f, -9.588640066e-04f, -9.599325217e-04f, -9.609993150e-04f, -9.620643846e-04f,
+-9.631277290e-04f, -9.641893462e-04f, -9.652492346e-04f, -9.663073924e-04f, -9.673638180e-04f, -9.684185096e-04f, -9.694714654e-04f, -9.705226838e-04f, -9.715721631e-04f, -9.726199014e-04f,
+-9.736658972e-04f, -9.747101487e-04f, -9.757526543e-04f, -9.767934121e-04f, -9.778324205e-04f, -9.788696779e-04f, -9.799051825e-04f, -9.809389327e-04f, -9.819709267e-04f, -9.830011629e-04f,
+-9.840296396e-04f, -9.850563551e-04f, -9.860813078e-04f, -9.871044959e-04f, -9.881259179e-04f, -9.891455721e-04f, -9.901634567e-04f, -9.911795702e-04f, -9.921939109e-04f, -9.932064771e-04f,
+-9.942172673e-04f, -9.952262797e-04f, -9.962335127e-04f, -9.972389646e-04f, -9.982426340e-04f, -9.992445190e-04f, -1.000244618e-03f, -1.001242930e-03f, -1.002239452e-03f, -1.003234184e-03f,
+-1.004227123e-03f, -1.005218268e-03f, -1.006207618e-03f, -1.007195170e-03f, -1.008180924e-03f, -1.009164877e-03f, -1.010147029e-03f, -1.011127376e-03f, -1.012105919e-03f, -1.013082654e-03f,
+-1.014057582e-03f, -1.015030699e-03f, -1.016002005e-03f, -1.016971497e-03f, -1.017939176e-03f, -1.018905037e-03f, -1.019869082e-03f, -1.020831306e-03f, -1.021791710e-03f, -1.022750292e-03f,
+-1.023707049e-03f, -1.024661981e-03f, -1.025615086e-03f, -1.026566362e-03f, -1.027515808e-03f, -1.028463422e-03f, -1.029409203e-03f, -1.030353149e-03f, -1.031295259e-03f, -1.032235531e-03f,
+-1.033173964e-03f, -1.034110556e-03f, -1.035045306e-03f, -1.035978211e-03f, -1.036909272e-03f, -1.037838485e-03f, -1.038765851e-03f, -1.039691366e-03f, -1.040615030e-03f, -1.041536841e-03f,
+-1.042456798e-03f, -1.043374899e-03f, -1.044291143e-03f, -1.045205528e-03f, -1.046118052e-03f, -1.047028715e-03f, -1.047937515e-03f, -1.048844451e-03f, -1.049749520e-03f, -1.050652722e-03f,
+-1.051554054e-03f, -1.052453517e-03f, -1.053351107e-03f, -1.054246824e-03f, -1.055140666e-03f, -1.056032632e-03f, -1.056922721e-03f, -1.057810930e-03f, -1.058697259e-03f, -1.059581706e-03f,
+-1.060464270e-03f, -1.061344949e-03f, -1.062223742e-03f, -1.063100647e-03f, -1.063975663e-03f, -1.064848789e-03f, -1.065720024e-03f, -1.066589365e-03f, -1.067456811e-03f, -1.068322362e-03f,
+-1.069186015e-03f, -1.070047770e-03f, -1.070907624e-03f, -1.071765577e-03f, -1.072621627e-03f, -1.073475773e-03f, -1.074328014e-03f, -1.075178347e-03f, -1.076026773e-03f, -1.076873288e-03f,
+-1.077717893e-03f, -1.078560585e-03f, -1.079401364e-03f, -1.080240227e-03f, -1.081077175e-03f, -1.081912204e-03f, -1.082745315e-03f, -1.083576505e-03f, -1.084405774e-03f, -1.085233119e-03f,
+-1.086058540e-03f, -1.086882036e-03f, -1.087703605e-03f, -1.088523245e-03f, -1.089340956e-03f, -1.090156736e-03f, -1.090970584e-03f, -1.091782498e-03f, -1.092592478e-03f, -1.093400522e-03f,
+-1.094206628e-03f, -1.095010796e-03f, -1.095813024e-03f, -1.096613311e-03f, -1.097411656e-03f, -1.098208057e-03f, -1.099002513e-03f, -1.099795022e-03f, -1.100585585e-03f, -1.101374198e-03f,
+-1.102160862e-03f, -1.102945575e-03f, -1.103728335e-03f, -1.104509141e-03f, -1.105287993e-03f, -1.106064888e-03f, -1.106839826e-03f, -1.107612806e-03f, -1.108383825e-03f, -1.109152884e-03f,
+-1.109919980e-03f, -1.110685113e-03f, -1.111448282e-03f, -1.112209484e-03f, -1.112968720e-03f, -1.113725987e-03f, -1.114481285e-03f, -1.115234612e-03f, -1.115985967e-03f, -1.116735349e-03f,
+-1.117482757e-03f, -1.118228190e-03f, -1.118971646e-03f, -1.119713125e-03f, -1.120452624e-03f, -1.121190144e-03f, -1.121925682e-03f, -1.122659238e-03f, -1.123390811e-03f, -1.124120399e-03f,
+-1.124848001e-03f, -1.125573616e-03f, -1.126297243e-03f, -1.127018881e-03f, -1.127738529e-03f, -1.128456185e-03f, -1.129171848e-03f, -1.129885518e-03f, -1.130597193e-03f, -1.131306872e-03f,
+-1.132014554e-03f, -1.132720238e-03f, -1.133423923e-03f, -1.134125607e-03f, -1.134825290e-03f, -1.135522970e-03f, -1.136218647e-03f, -1.136912319e-03f, -1.137603985e-03f, -1.138293644e-03f,
+-1.138981296e-03f, -1.139666938e-03f, -1.140350570e-03f, -1.141032192e-03f, -1.141711801e-03f, -1.142389396e-03f, -1.143064978e-03f, -1.143738544e-03f, -1.144410093e-03f, -1.145079625e-03f,
+-1.145747139e-03f, -1.146412633e-03f, -1.147076107e-03f, -1.147737559e-03f, -1.148396988e-03f, -1.149054394e-03f, -1.149709775e-03f, -1.150363130e-03f, -1.151014459e-03f, -1.151663760e-03f,
+-1.152311032e-03f, -1.152956275e-03f, -1.153599487e-03f, -1.154240667e-03f, -1.154879815e-03f, -1.155516929e-03f, -1.156152008e-03f, -1.156785052e-03f, -1.157416059e-03f, -1.158045029e-03f,
+-1.158671960e-03f, -1.159296852e-03f, -1.159919703e-03f, -1.160540513e-03f, -1.161159280e-03f, -1.161776004e-03f, -1.162390684e-03f, -1.163003319e-03f, -1.163613907e-03f, -1.164222449e-03f,
+-1.164828942e-03f, -1.165433387e-03f, -1.166035782e-03f, -1.166636126e-03f, -1.167234418e-03f, -1.167830658e-03f, -1.168424844e-03f, -1.169016975e-03f, -1.169607052e-03f, -1.170195072e-03f,
+-1.170781035e-03f, -1.171364940e-03f, -1.171946786e-03f, -1.172526573e-03f, -1.173104298e-03f, -1.173679963e-03f, -1.174253564e-03f, -1.174825103e-03f, -1.175394577e-03f, -1.175961986e-03f,
+-1.176527330e-03f, -1.177090606e-03f, -1.177651816e-03f, -1.178210956e-03f, -1.178768028e-03f, -1.179323029e-03f, -1.179875959e-03f, -1.180426818e-03f, -1.180975604e-03f, -1.181522316e-03f,
+-1.182066954e-03f, -1.182609517e-03f, -1.183150005e-03f, -1.183688415e-03f, -1.184224748e-03f, -1.184759003e-03f, -1.185291178e-03f, -1.185821274e-03f, -1.186349289e-03f, -1.186875222e-03f,
+-1.187399073e-03f, -1.187920841e-03f, -1.188440525e-03f, -1.188958124e-03f, -1.189473638e-03f, -1.189987066e-03f, -1.190498407e-03f, -1.191007660e-03f, -1.191514825e-03f, -1.192019900e-03f,
+-1.192522886e-03f, -1.193023781e-03f, -1.193522584e-03f, -1.194019295e-03f, -1.194513913e-03f, -1.195006438e-03f, -1.195496868e-03f, -1.195985203e-03f, -1.196471442e-03f, -1.196955585e-03f,
+-1.197437630e-03f, -1.197917577e-03f, -1.198395426e-03f, -1.198871175e-03f, -1.199344825e-03f, -1.199816373e-03f, -1.200285820e-03f, -1.200753165e-03f, -1.201218407e-03f, -1.201681545e-03f,
+-1.202142579e-03f, -1.202601509e-03f, -1.203058332e-03f, -1.203513050e-03f, -1.203965661e-03f, -1.204416164e-03f, -1.204864559e-03f, -1.205310845e-03f, -1.205755021e-03f, -1.206197088e-03f,
+-1.206637043e-03f, -1.207074888e-03f, -1.207510620e-03f, -1.207944240e-03f, -1.208375746e-03f, -1.208805138e-03f, -1.209232416e-03f, -1.209657579e-03f, -1.210080626e-03f, -1.210501556e-03f,
+-1.210920370e-03f, -1.211337066e-03f, -1.211751644e-03f, -1.212164103e-03f, -1.212574442e-03f, -1.212982662e-03f, -1.213388761e-03f, -1.213792740e-03f, -1.214194596e-03f, -1.214594330e-03f,
+-1.214991942e-03f, -1.215387430e-03f, -1.215780794e-03f, -1.216172034e-03f, -1.216561149e-03f, -1.216948138e-03f, -1.217333001e-03f, -1.217715737e-03f, -1.218096346e-03f, -1.218474828e-03f,
+-1.218851181e-03f, -1.219225405e-03f, -1.219597500e-03f, -1.219967466e-03f, -1.220335300e-03f, -1.220701005e-03f, -1.221064577e-03f, -1.221426018e-03f, -1.221785327e-03f, -1.222142502e-03f,
+-1.222497544e-03f, -1.222850453e-03f, -1.223201227e-03f, -1.223549866e-03f, -1.223896370e-03f, -1.224240739e-03f, -1.224582971e-03f, -1.224923066e-03f, -1.225261024e-03f, -1.225596845e-03f,
+-1.225930528e-03f, -1.226262072e-03f, -1.226591477e-03f, -1.226918742e-03f, -1.227243868e-03f, -1.227566854e-03f, -1.227887699e-03f, -1.228206402e-03f, -1.228522965e-03f, -1.228837385e-03f,
+-1.229149663e-03f, -1.229459797e-03f, -1.229767789e-03f, -1.230073637e-03f, -1.230377341e-03f, -1.230678901e-03f, -1.230978316e-03f, -1.231275585e-03f, -1.231570709e-03f, -1.231863687e-03f,
+-1.232154519e-03f, -1.232443203e-03f, -1.232729741e-03f, -1.233014131e-03f, -1.233296374e-03f, -1.233576468e-03f, -1.233854413e-03f, -1.234130210e-03f, -1.234403857e-03f, -1.234675355e-03f,
+-1.234944703e-03f, -1.235211900e-03f, -1.235476947e-03f, -1.235739843e-03f, -1.236000587e-03f, -1.236259180e-03f, -1.236515621e-03f, -1.236769909e-03f, -1.237022045e-03f, -1.237272029e-03f,
+-1.237519858e-03f, -1.237765535e-03f, -1.238009058e-03f, -1.238250426e-03f, -1.238489640e-03f, -1.238726700e-03f, -1.238961604e-03f, -1.239194354e-03f, -1.239424948e-03f, -1.239653386e-03f,
+-1.239879668e-03f, -1.240103793e-03f, -1.240325762e-03f, -1.240545575e-03f, -1.240763230e-03f, -1.240978728e-03f, -1.241192068e-03f, -1.241403251e-03f, -1.241612275e-03f, -1.241819141e-03f,
+-1.242023849e-03f, -1.242226398e-03f, -1.242426788e-03f, -1.242625018e-03f, -1.242821090e-03f, -1.243015001e-03f, -1.243206753e-03f, -1.243396345e-03f, -1.243583777e-03f, -1.243769048e-03f,
+-1.243952159e-03f, -1.244133108e-03f, -1.244311897e-03f, -1.244488525e-03f, -1.244662991e-03f, -1.244835296e-03f, -1.245005439e-03f, -1.245173420e-03f, -1.245339239e-03f, -1.245502896e-03f,
+-1.245664390e-03f, -1.245823722e-03f, -1.245980892e-03f, -1.246135898e-03f, -1.246288742e-03f, -1.246439423e-03f, -1.246587940e-03f, -1.246734294e-03f, -1.246878485e-03f, -1.247020512e-03f,
+-1.247160375e-03f, -1.247298075e-03f, -1.247433610e-03f, -1.247566982e-03f, -1.247698189e-03f, -1.247827233e-03f, -1.247954111e-03f, -1.248078826e-03f, -1.248201376e-03f, -1.248321761e-03f,
+-1.248439982e-03f, -1.248556038e-03f, -1.248669929e-03f, -1.248781655e-03f, -1.248891217e-03f, -1.248998613e-03f, -1.249103844e-03f, -1.249206910e-03f, -1.249307811e-03f, -1.249406547e-03f,
+-1.249503117e-03f, -1.249597522e-03f, -1.249689762e-03f, -1.249779836e-03f, -1.249867745e-03f, -1.249953488e-03f, -1.250037066e-03f, -1.250118479e-03f, -1.250197726e-03f, -1.250274807e-03f,
+-1.250349723e-03f, -1.250422474e-03f, -1.250493059e-03f, -1.250561479e-03f, -1.250627733e-03f, -1.250691821e-03f, -1.250753744e-03f, -1.250813502e-03f, -1.250871094e-03f, -1.250926521e-03f,
+-1.250979783e-03f, -1.251030879e-03f, -1.251079810e-03f, -1.251126576e-03f, -1.251171176e-03f, -1.251213611e-03f, -1.251253882e-03f, -1.251291987e-03f, -1.251327927e-03f, -1.251361703e-03f,
+-1.251393313e-03f, -1.251422759e-03f, -1.251450040e-03f, -1.251475157e-03f, -1.251498109e-03f, -1.251518896e-03f, -1.251537519e-03f, -1.251553978e-03f, -1.251568273e-03f, -1.251580404e-03f,
+-1.251590371e-03f, -1.251598174e-03f, -1.251603813e-03f, -1.251607289e-03f, -1.251608601e-03f, -1.251607750e-03f, -1.251604736e-03f, -1.251599558e-03f, -1.251592218e-03f, -1.251582715e-03f,
+-1.251571049e-03f, -1.251557220e-03f, -1.251541230e-03f, -1.251523077e-03f, -1.251502762e-03f, -1.251480285e-03f, -1.251455646e-03f, -1.251428846e-03f, -1.251399884e-03f, -1.251368762e-03f,
+-1.251335478e-03f, -1.251300033e-03f, -1.251262428e-03f, -1.251222662e-03f, -1.251180736e-03f, -1.251136650e-03f, -1.251090404e-03f, -1.251041998e-03f, -1.250991433e-03f, -1.250938709e-03f,
+-1.250883826e-03f, -1.250826784e-03f, -1.250767583e-03f, -1.250706224e-03f, -1.250642707e-03f, -1.250577032e-03f, -1.250509200e-03f, -1.250439210e-03f, -1.250367063e-03f, -1.250292759e-03f,
+-1.250216298e-03f, -1.250137681e-03f, -1.250056908e-03f, -1.249973979e-03f, -1.249888895e-03f, -1.249801655e-03f, -1.249712261e-03f, -1.249620711e-03f, -1.249527007e-03f, -1.249431149e-03f,
+-1.249333137e-03f, -1.249232972e-03f, -1.249130653e-03f, -1.249026181e-03f, -1.248919557e-03f, -1.248810780e-03f, -1.248699851e-03f, -1.248586771e-03f, -1.248471539e-03f, -1.248354156e-03f,
+-1.248234622e-03f, -1.248112938e-03f, -1.247989104e-03f, -1.247863120e-03f, -1.247734987e-03f, -1.247604705e-03f, -1.247472274e-03f, -1.247337695e-03f, -1.247200967e-03f, -1.247062092e-03f,
+-1.246921070e-03f, -1.246777901e-03f, -1.246632586e-03f, -1.246485124e-03f, -1.246335517e-03f, -1.246183764e-03f, -1.246029867e-03f, -1.245873824e-03f, -1.245715638e-03f, -1.245555308e-03f,
+-1.245392834e-03f, -1.245228218e-03f, -1.245061459e-03f, -1.244892558e-03f, -1.244721515e-03f, -1.244548331e-03f, -1.244373006e-03f, -1.244195540e-03f, -1.244015935e-03f, -1.243834190e-03f,
+-1.243650305e-03f, -1.243464283e-03f, -1.243276121e-03f, -1.243085822e-03f, -1.242893386e-03f, -1.242698813e-03f, -1.242502103e-03f, -1.242303258e-03f, -1.242102277e-03f, -1.241899161e-03f,
+-1.241693910e-03f, -1.241486526e-03f, -1.241277008e-03f, -1.241065356e-03f, -1.240851573e-03f, -1.240635657e-03f, -1.240417609e-03f, -1.240197431e-03f, -1.239975122e-03f, -1.239750682e-03f,
+-1.239524113e-03f, -1.239295416e-03f, -1.239064589e-03f, -1.238831635e-03f, -1.238596553e-03f, -1.238359344e-03f, -1.238120009e-03f, -1.237878548e-03f, -1.237634962e-03f, -1.237389250e-03f,
+-1.237141415e-03f, -1.236891456e-03f, -1.236639374e-03f, -1.236385169e-03f, -1.236128842e-03f, -1.235870394e-03f, -1.235609825e-03f, -1.235347136e-03f, -1.235082327e-03f, -1.234815399e-03f,
+-1.234546353e-03f, -1.234275188e-03f, -1.234001906e-03f, -1.233726508e-03f, -1.233448993e-03f, -1.233169362e-03f, -1.232887617e-03f, -1.232603758e-03f, -1.232317784e-03f, -1.232029698e-03f,
+-1.231739499e-03f, -1.231447189e-03f, -1.231152767e-03f, -1.230856234e-03f, -1.230557592e-03f, -1.230256840e-03f, -1.229953980e-03f, -1.229649011e-03f, -1.229341936e-03f, -1.229032753e-03f,
+-1.228721465e-03f, -1.228408071e-03f, -1.228092572e-03f, -1.227774970e-03f, -1.227455264e-03f, -1.227133455e-03f, -1.226809545e-03f, -1.226483533e-03f, -1.226155420e-03f, -1.225825207e-03f,
+-1.225492895e-03f, -1.225158485e-03f, -1.224821977e-03f, -1.224483371e-03f, -1.224142669e-03f, -1.223799872e-03f, -1.223454979e-03f, -1.223107992e-03f, -1.222758912e-03f, -1.222407738e-03f,
+-1.222054473e-03f, -1.221699116e-03f, -1.221341668e-03f, -1.220982131e-03f, -1.220620504e-03f, -1.220256790e-03f, -1.219890987e-03f, -1.219523097e-03f, -1.219153122e-03f, -1.218781061e-03f,
+-1.218406915e-03f, -1.218030685e-03f, -1.217652373e-03f, -1.217271978e-03f, -1.216889501e-03f, -1.216504944e-03f, -1.216118307e-03f, -1.215729591e-03f, -1.215338796e-03f, -1.214945924e-03f,
+-1.214550975e-03f, -1.214153950e-03f, -1.213754850e-03f, -1.213353676e-03f, -1.212950428e-03f, -1.212545107e-03f, -1.212137715e-03f, -1.211728251e-03f, -1.211316717e-03f, -1.210903114e-03f,
+-1.210487443e-03f, -1.210069703e-03f, -1.209649897e-03f, -1.209228025e-03f, -1.208804087e-03f, -1.208378085e-03f, -1.207950020e-03f, -1.207519892e-03f, -1.207087703e-03f, -1.206653452e-03f,
+-1.206217142e-03f, -1.205778772e-03f, -1.205338344e-03f, -1.204895859e-03f, -1.204451318e-03f, -1.204004721e-03f, -1.203556069e-03f, -1.203105363e-03f, -1.202652605e-03f, -1.202197794e-03f,
+-1.201740932e-03f, -1.201282021e-03f, -1.200821060e-03f, -1.200358050e-03f, -1.199892994e-03f, -1.199425890e-03f, -1.198956742e-03f, -1.198485548e-03f, -1.198012311e-03f, -1.197537031e-03f,
+-1.197059710e-03f, -1.196580347e-03f, -1.196098945e-03f, -1.195615503e-03f, -1.195130024e-03f, -1.194642507e-03f, -1.194152955e-03f, -1.193661367e-03f, -1.193167745e-03f, -1.192672090e-03f,
+-1.192174403e-03f, -1.191674684e-03f, -1.191172936e-03f, -1.190669158e-03f, -1.190163352e-03f, -1.189655518e-03f, -1.189145658e-03f, -1.188633773e-03f, -1.188119864e-03f, -1.187603932e-03f,
+-1.187085977e-03f, -1.186566001e-03f, -1.186044004e-03f, -1.185519989e-03f, -1.184993955e-03f, -1.184465905e-03f, -1.183935838e-03f, -1.183403756e-03f, -1.182869660e-03f, -1.182333551e-03f,
+-1.181795430e-03f, -1.181255298e-03f, -1.180713157e-03f, -1.180169006e-03f, -1.179622848e-03f, -1.179074683e-03f, -1.178524513e-03f, -1.177972338e-03f, -1.177418160e-03f, -1.176861979e-03f,
+-1.176303797e-03f, -1.175743614e-03f, -1.175181433e-03f, -1.174617253e-03f, -1.174051077e-03f, -1.173482905e-03f, -1.172912738e-03f, -1.172340577e-03f, -1.171766424e-03f, -1.171190279e-03f,
+-1.170612144e-03f, -1.170032020e-03f, -1.169449907e-03f, -1.168865808e-03f, -1.168279723e-03f, -1.167691653e-03f, -1.167101600e-03f, -1.166509564e-03f, -1.165915547e-03f, -1.165319549e-03f,
+-1.164721573e-03f, -1.164121619e-03f, -1.163519688e-03f, -1.162915782e-03f, -1.162309901e-03f, -1.161702047e-03f, -1.161092221e-03f, -1.160480424e-03f, -1.159866657e-03f, -1.159250922e-03f,
+-1.158633219e-03f, -1.158013551e-03f, -1.157391917e-03f, -1.156768319e-03f, -1.156142759e-03f, -1.155515238e-03f, -1.154885756e-03f, -1.154254315e-03f, -1.153620917e-03f, -1.152985562e-03f,
+-1.152348252e-03f, -1.151708987e-03f, -1.151067770e-03f, -1.150424600e-03f, -1.149779481e-03f, -1.149132412e-03f, -1.148483395e-03f, -1.147832431e-03f, -1.147179522e-03f, -1.146524668e-03f,
+-1.145867872e-03f, -1.145209133e-03f, -1.144548454e-03f, -1.143885836e-03f, -1.143221280e-03f, -1.142554787e-03f, -1.141886359e-03f, -1.141215996e-03f, -1.140543700e-03f, -1.139869473e-03f,
+-1.139193315e-03f, -1.138515228e-03f, -1.137835213e-03f, -1.137153272e-03f, -1.136469406e-03f, -1.135783615e-03f, -1.135095902e-03f, -1.134406268e-03f, -1.133714713e-03f, -1.133021240e-03f,
+-1.132325849e-03f, -1.131628542e-03f, -1.130929321e-03f, -1.130228186e-03f, -1.129525139e-03f, -1.128820181e-03f, -1.128113313e-03f, -1.127404537e-03f, -1.126693855e-03f, -1.125981267e-03f,
+-1.125266775e-03f, -1.124550380e-03f, -1.123832084e-03f, -1.123111887e-03f, -1.122389792e-03f, -1.121665800e-03f, -1.120939911e-03f, -1.120212128e-03f, -1.119482452e-03f, -1.118750884e-03f,
+-1.118017425e-03f, -1.117282077e-03f, -1.116544841e-03f, -1.115805719e-03f, -1.115064712e-03f, -1.114321822e-03f, -1.113577049e-03f, -1.112830396e-03f, -1.112081863e-03f, -1.111331452e-03f,
+-1.110579164e-03f, -1.109825002e-03f, -1.109068965e-03f, -1.108311057e-03f, -1.107551277e-03f, -1.106789628e-03f, -1.106026111e-03f, -1.105260727e-03f, -1.104493478e-03f, -1.103724365e-03f,
+-1.102953390e-03f, -1.102180554e-03f, -1.101405858e-03f, -1.100629305e-03f, -1.099850895e-03f, -1.099070630e-03f, -1.098288511e-03f, -1.097504541e-03f, -1.096718719e-03f, -1.095931048e-03f,
+-1.095141530e-03f, -1.094350165e-03f, -1.093556956e-03f, -1.092761903e-03f, -1.091965008e-03f, -1.091166273e-03f, -1.090365699e-03f, -1.089563287e-03f, -1.088759040e-03f, -1.087952959e-03f,
+-1.087145044e-03f, -1.086335298e-03f, -1.085523723e-03f, -1.084710319e-03f, -1.083895088e-03f, -1.083078031e-03f, -1.082259151e-03f, -1.081438449e-03f, -1.080615926e-03f, -1.079791584e-03f,
+-1.078965424e-03f, -1.078137447e-03f, -1.077307657e-03f, -1.076476053e-03f, -1.075642637e-03f, -1.074807412e-03f, -1.073970378e-03f, -1.073131537e-03f, -1.072290891e-03f, -1.071448442e-03f,
+-1.070604190e-03f, -1.069758137e-03f, -1.068910285e-03f, -1.068060636e-03f, -1.067209191e-03f, -1.066355951e-03f, -1.065500919e-03f, -1.064644096e-03f, -1.063785483e-03f, -1.062925082e-03f,
+-1.062062894e-03f, -1.061198922e-03f, -1.060333167e-03f, -1.059465629e-03f, -1.058596312e-03f, -1.057725217e-03f, -1.056852345e-03f, -1.055977697e-03f, -1.055101276e-03f, -1.054223083e-03f,
+-1.053343120e-03f, -1.052461388e-03f, -1.051577889e-03f, -1.050692624e-03f, -1.049805596e-03f, -1.048916806e-03f, -1.048026255e-03f, -1.047133945e-03f, -1.046239878e-03f, -1.045344055e-03f,
+-1.044446479e-03f, -1.043547150e-03f, -1.042646070e-03f, -1.041743242e-03f, -1.040838666e-03f, -1.039932345e-03f, -1.039024279e-03f, -1.038114472e-03f, -1.037202924e-03f, -1.036289637e-03f,
+-1.035374612e-03f, -1.034457852e-03f, -1.033539359e-03f, -1.032619133e-03f, -1.031697176e-03f, -1.030773491e-03f, -1.029848078e-03f, -1.028920941e-03f, -1.027992079e-03f, -1.027061496e-03f,
+-1.026129192e-03f, -1.025195170e-03f, -1.024259431e-03f, -1.023321976e-03f, -1.022382809e-03f, -1.021441929e-03f, -1.020499340e-03f, -1.019555042e-03f, -1.018609038e-03f, -1.017661330e-03f,
+-1.016711918e-03f, -1.015760805e-03f, -1.014807992e-03f, -1.013853482e-03f, -1.012897275e-03f, -1.011939375e-03f, -1.010979782e-03f, -1.010018498e-03f, -1.009055525e-03f, -1.008090864e-03f,
+-1.007124519e-03f, -1.006156489e-03f, -1.005186778e-03f, -1.004215387e-03f, -1.003242317e-03f, -1.002267570e-03f, -1.001291149e-03f, -1.000313055e-03f, -9.993332894e-04f, -9.983518544e-04f,
+-9.973687519e-04f, -9.963839834e-04f, -9.953975510e-04f, -9.944094563e-04f, -9.934197011e-04f, -9.924282873e-04f, -9.914352167e-04f, -9.904404911e-04f, -9.894441124e-04f, -9.884460822e-04f,
+-9.874464025e-04f, -9.864450751e-04f, -9.854421018e-04f, -9.844374845e-04f, -9.834312249e-04f, -9.824233249e-04f, -9.814137864e-04f, -9.804026112e-04f, -9.793898011e-04f, -9.783753580e-04f,
+-9.773592837e-04f, -9.763415802e-04f, -9.753222491e-04f, -9.743012925e-04f, -9.732787121e-04f, -9.722545099e-04f, -9.712286876e-04f, -9.702012472e-04f, -9.691721906e-04f, -9.681415195e-04f,
+-9.671092359e-04f, -9.660753417e-04f, -9.650398388e-04f, -9.640027289e-04f, -9.629640141e-04f, -9.619236962e-04f, -9.608817771e-04f, -9.598382587e-04f, -9.587931429e-04f, -9.577464316e-04f,
+-9.566981266e-04f, -9.556482300e-04f, -9.545967436e-04f, -9.535436694e-04f, -9.524890091e-04f, -9.514327649e-04f, -9.503749385e-04f, -9.493155319e-04f, -9.482545470e-04f, -9.471919858e-04f,
+-9.461278501e-04f, -9.450621420e-04f, -9.439948633e-04f, -9.429260160e-04f, -9.418556020e-04f, -9.407836233e-04f, -9.397100818e-04f, -9.386349795e-04f, -9.375583183e-04f, -9.364801001e-04f,
+-9.354003270e-04f, -9.343190008e-04f, -9.332361236e-04f, -9.321516973e-04f, -9.310657239e-04f, -9.299782053e-04f, -9.288891435e-04f, -9.277985405e-04f, -9.267063983e-04f, -9.256127188e-04f,
+-9.245175040e-04f, -9.234207559e-04f, -9.223224765e-04f, -9.212226678e-04f, -9.201213318e-04f, -9.190184704e-04f, -9.179140857e-04f, -9.168081796e-04f, -9.157007542e-04f, -9.145918115e-04f,
+-9.134813535e-04f, -9.123693821e-04f, -9.112558994e-04f, -9.101409075e-04f, -9.090244082e-04f, -9.079064037e-04f, -9.067868960e-04f, -9.056658870e-04f, -9.045433789e-04f, -9.034193736e-04f,
+-9.022938732e-04f, -9.011668797e-04f, -9.000383951e-04f, -8.989084216e-04f, -8.977769610e-04f, -8.966440155e-04f, -8.955095872e-04f, -8.943736780e-04f, -8.932362900e-04f, -8.920974252e-04f,
+-8.909570858e-04f, -8.898152738e-04f, -8.886719913e-04f, -8.875272402e-04f, -8.863810227e-04f, -8.852333409e-04f, -8.840841967e-04f, -8.829335924e-04f, -8.817815299e-04f, -8.806280113e-04f,
+-8.794730388e-04f, -8.783166143e-04f, -8.771587401e-04f, -8.759994181e-04f, -8.748386504e-04f, -8.736764392e-04f, -8.725127866e-04f, -8.713476946e-04f, -8.701811654e-04f, -8.690132010e-04f,
+-8.678438035e-04f, -8.666729751e-04f, -8.655007179e-04f, -8.643270339e-04f, -8.631519253e-04f, -8.619753942e-04f, -8.607974428e-04f, -8.596180730e-04f, -8.584372872e-04f, -8.572550873e-04f,
+-8.560714755e-04f, -8.548864540e-04f, -8.537000249e-04f, -8.525121902e-04f, -8.513229522e-04f, -8.501323130e-04f, -8.489402747e-04f, -8.477468395e-04f, -8.465520095e-04f, -8.453557869e-04f,
+-8.441581737e-04f, -8.429591723e-04f, -8.417587846e-04f, -8.405570130e-04f, -8.393538594e-04f, -8.381493262e-04f, -8.369434154e-04f, -8.357361293e-04f, -8.345274699e-04f, -8.333174395e-04f,
+-8.321060402e-04f, -8.308932743e-04f, -8.296791438e-04f, -8.284636510e-04f, -8.272467981e-04f, -8.260285872e-04f, -8.248090205e-04f, -8.235881002e-04f, -8.223658286e-04f, -8.211422077e-04f,
+-8.199172398e-04f, -8.186909271e-04f, -8.174632717e-04f, -8.162342760e-04f, -8.150039420e-04f, -8.137722721e-04f, -8.125392683e-04f, -8.113049329e-04f, -8.100692682e-04f, -8.088322763e-04f,
+-8.075939595e-04f, -8.063543200e-04f, -8.051133599e-04f, -8.038710816e-04f, -8.026274872e-04f, -8.013825789e-04f, -8.001363591e-04f, -7.988888299e-04f, -7.976399936e-04f, -7.963898524e-04f,
+-7.951384085e-04f, -7.938856642e-04f, -7.926316217e-04f, -7.913762833e-04f, -7.901196513e-04f, -7.888617277e-04f, -7.876025150e-04f, -7.863420154e-04f, -7.850802311e-04f, -7.838171643e-04f,
+-7.825528174e-04f, -7.812871926e-04f, -7.800202922e-04f, -7.787521184e-04f, -7.774826735e-04f, -7.762119597e-04f, -7.749399794e-04f, -7.736667348e-04f, -7.723922282e-04f, -7.711164619e-04f,
+-7.698394381e-04f, -7.685611591e-04f, -7.672816272e-04f, -7.660008448e-04f, -7.647188140e-04f, -7.634355372e-04f, -7.621510166e-04f, -7.608652547e-04f, -7.595782535e-04f, -7.582900156e-04f,
+-7.570005430e-04f, -7.557098383e-04f, -7.544179036e-04f, -7.531247412e-04f, -7.518303536e-04f, -7.505347429e-04f, -7.492379115e-04f, -7.479398617e-04f, -7.466405959e-04f, -7.453401162e-04f,
+-7.440384252e-04f, -7.427355250e-04f, -7.414314181e-04f, -7.401261067e-04f, -7.388195931e-04f, -7.375118797e-04f, -7.362029689e-04f, -7.348928629e-04f, -7.335815641e-04f, -7.322690748e-04f,
+-7.309553974e-04f, -7.296405342e-04f, -7.283244876e-04f, -7.270072599e-04f, -7.256888534e-04f, -7.243692705e-04f, -7.230485135e-04f, -7.217265848e-04f, -7.204034868e-04f, -7.190792218e-04f,
+-7.177537922e-04f, -7.164272002e-04f, -7.150994484e-04f, -7.137705390e-04f, -7.124404744e-04f, -7.111092571e-04f, -7.097768892e-04f, -7.084433733e-04f, -7.071087117e-04f, -7.057729068e-04f,
+-7.044359609e-04f, -7.030978764e-04f, -7.017586558e-04f, -7.004183013e-04f, -6.990768154e-04f, -6.977342005e-04f, -6.963904589e-04f, -6.950455930e-04f, -6.936996053e-04f, -6.923524981e-04f,
+-6.910042738e-04f, -6.896549348e-04f, -6.883044836e-04f, -6.869529224e-04f, -6.856002538e-04f, -6.842464801e-04f, -6.828916037e-04f, -6.815356270e-04f, -6.801785525e-04f, -6.788203825e-04f,
+-6.774611195e-04f, -6.761007658e-04f, -6.747393240e-04f, -6.733767963e-04f, -6.720131853e-04f, -6.706484934e-04f, -6.692827229e-04f, -6.679158763e-04f, -6.665479560e-04f, -6.651789645e-04f,
+-6.638089042e-04f, -6.624377775e-04f, -6.610655868e-04f, -6.596923346e-04f, -6.583180234e-04f, -6.569426555e-04f, -6.555662334e-04f, -6.541887595e-04f, -6.528102363e-04f, -6.514306663e-04f,
+-6.500500518e-04f, -6.486683953e-04f, -6.472856993e-04f, -6.459019663e-04f, -6.445171986e-04f, -6.431313987e-04f, -6.417445692e-04f, -6.403567124e-04f, -6.389678307e-04f, -6.375779268e-04f,
+-6.361870030e-04f, -6.347950618e-04f, -6.334021057e-04f, -6.320081370e-04f, -6.306131584e-04f, -6.292171723e-04f, -6.278201811e-04f, -6.264221873e-04f, -6.250231934e-04f, -6.236232019e-04f,
+-6.222222152e-04f, -6.208202359e-04f, -6.194172664e-04f, -6.180133092e-04f, -6.166083668e-04f, -6.152024416e-04f, -6.137955362e-04f, -6.123876530e-04f, -6.109787946e-04f, -6.095689634e-04f,
+-6.081581620e-04f, -6.067463928e-04f, -6.053336582e-04f, -6.039199610e-04f, -6.025053034e-04f, -6.010896881e-04f, -5.996731174e-04f, -5.982555941e-04f, -5.968371204e-04f, -5.954176990e-04f,
+-5.939973324e-04f, -5.925760230e-04f, -5.911537735e-04f, -5.897305862e-04f, -5.883064637e-04f, -5.868814085e-04f, -5.854554232e-04f, -5.840285103e-04f, -5.826006723e-04f, -5.811719116e-04f,
+-5.797422309e-04f, -5.783116327e-04f, -5.768801195e-04f, -5.754476937e-04f, -5.740143581e-04f, -5.725801150e-04f, -5.711449670e-04f, -5.697089166e-04f, -5.682719665e-04f, -5.668341191e-04f,
+-5.653953769e-04f, -5.639557425e-04f, -5.625152185e-04f, -5.610738073e-04f, -5.596315116e-04f, -5.581883338e-04f, -5.567442766e-04f, -5.552993424e-04f, -5.538535339e-04f, -5.524068535e-04f,
+-5.509593038e-04f, -5.495108875e-04f, -5.480616069e-04f, -5.466114647e-04f, -5.451604635e-04f, -5.437086058e-04f, -5.422558941e-04f, -5.408023311e-04f, -5.393479192e-04f, -5.378926612e-04f,
+-5.364365594e-04f, -5.349796165e-04f, -5.335218351e-04f, -5.320632176e-04f, -5.306037668e-04f, -5.291434852e-04f, -5.276823753e-04f, -5.262204397e-04f, -5.247576810e-04f, -5.232941017e-04f,
+-5.218297045e-04f, -5.203644920e-04f, -5.188984666e-04f, -5.174316310e-04f, -5.159639878e-04f, -5.144955396e-04f, -5.130262889e-04f, -5.115562384e-04f, -5.100853905e-04f, -5.086137480e-04f,
+-5.071413134e-04f, -5.056680892e-04f, -5.041940782e-04f, -5.027192828e-04f, -5.012437057e-04f, -4.997673495e-04f, -4.982902167e-04f, -4.968123101e-04f, -4.953336321e-04f, -4.938541853e-04f,
+-4.923739725e-04f, -4.908929961e-04f, -4.894112588e-04f, -4.879287632e-04f, -4.864455119e-04f, -4.849615076e-04f, -4.834767527e-04f, -4.819912500e-04f, -4.805050020e-04f, -4.790180113e-04f,
+-4.775302807e-04f, -4.760418126e-04f, -4.745526097e-04f, -4.730626746e-04f, -4.715720100e-04f, -4.700806184e-04f, -4.685885026e-04f, -4.670956650e-04f, -4.656021083e-04f, -4.641078352e-04f,
+-4.626128483e-04f, -4.611171502e-04f, -4.596207435e-04f, -4.581236308e-04f, -4.566258149e-04f, -4.551272982e-04f, -4.536280836e-04f, -4.521281735e-04f, -4.506275706e-04f, -4.491262776e-04f,
+-4.476242970e-04f, -4.461216316e-04f, -4.446182840e-04f, -4.431142567e-04f, -4.416095525e-04f, -4.401041740e-04f, -4.385981238e-04f, -4.370914046e-04f, -4.355840190e-04f, -4.340759696e-04f,
+-4.325672592e-04f, -4.310578903e-04f, -4.295478656e-04f, -4.280371878e-04f, -4.265258594e-04f, -4.250138832e-04f, -4.235012618e-04f, -4.219879979e-04f, -4.204740941e-04f, -4.189595530e-04f,
+-4.174443774e-04f, -4.159285699e-04f, -4.144121330e-04f, -4.128950696e-04f, -4.113773822e-04f, -4.098590736e-04f, -4.083401463e-04f, -4.068206031e-04f, -4.053004465e-04f, -4.037796793e-04f,
+-4.022583042e-04f, -4.007363237e-04f, -3.992137406e-04f, -3.976905576e-04f, -3.961667772e-04f, -3.946424022e-04f, -3.931174353e-04f, -3.915918790e-04f, -3.900657362e-04f, -3.885390094e-04f,
+-3.870117013e-04f, -3.854838146e-04f, -3.839553521e-04f, -3.824263162e-04f, -3.808967098e-04f, -3.793665355e-04f, -3.778357960e-04f, -3.763044940e-04f, -3.747726321e-04f, -3.732402130e-04f,
+-3.717072395e-04f, -3.701737142e-04f, -3.686396397e-04f, -3.671050188e-04f, -3.655698541e-04f, -3.640341484e-04f, -3.624979043e-04f, -3.609611245e-04f, -3.594238117e-04f, -3.578859686e-04f,
+-3.563475979e-04f, -3.548087022e-04f, -3.532692843e-04f, -3.517293468e-04f, -3.501888925e-04f, -3.486479240e-04f, -3.471064441e-04f, -3.455644554e-04f, -3.440219606e-04f, -3.424789624e-04f,
+-3.409354635e-04f, -3.393914667e-04f, -3.378469745e-04f, -3.363019898e-04f, -3.347565151e-04f, -3.332105533e-04f, -3.316641070e-04f, -3.301171789e-04f, -3.285697718e-04f, -3.270218882e-04f,
+-3.254735310e-04f, -3.239247028e-04f, -3.223754063e-04f, -3.208256443e-04f, -3.192754194e-04f, -3.177247344e-04f, -3.161735919e-04f, -3.146219947e-04f, -3.130699455e-04f, -3.115174470e-04f,
+-3.099645019e-04f, -3.084111129e-04f, -3.068572827e-04f, -3.053030140e-04f, -3.037483096e-04f, -3.021931721e-04f, -3.006376044e-04f, -2.990816090e-04f, -2.975251887e-04f, -2.959683462e-04f,
+-2.944110843e-04f, -2.928534056e-04f, -2.912953129e-04f, -2.897368089e-04f, -2.881778963e-04f, -2.866185778e-04f, -2.850588562e-04f, -2.834987341e-04f, -2.819382143e-04f, -2.803772995e-04f,
+-2.788159925e-04f, -2.772542959e-04f, -2.756922124e-04f, -2.741297449e-04f, -2.725668960e-04f, -2.710036684e-04f, -2.694400649e-04f, -2.678760882e-04f, -2.663117410e-04f, -2.647470261e-04f,
+-2.631819461e-04f, -2.616165039e-04f, -2.600507021e-04f, -2.584845434e-04f, -2.569180306e-04f, -2.553511664e-04f, -2.537839536e-04f, -2.522163948e-04f, -2.506484929e-04f, -2.490802504e-04f,
+-2.475116703e-04f, -2.459427551e-04f, -2.443735077e-04f, -2.428039307e-04f, -2.412340269e-04f, -2.396637991e-04f, -2.380932499e-04f, -2.365223821e-04f, -2.349511984e-04f, -2.333797016e-04f,
+-2.318078944e-04f, -2.302357796e-04f, -2.286633598e-04f, -2.270906378e-04f, -2.255176163e-04f, -2.239442982e-04f, -2.223706860e-04f, -2.207967826e-04f, -2.192225907e-04f, -2.176481131e-04f,
+-2.160733524e-04f, -2.144983114e-04f, -2.129229928e-04f, -2.113473995e-04f, -2.097715341e-04f, -2.081953993e-04f, -2.066189980e-04f, -2.050423328e-04f, -2.034654065e-04f, -2.018882218e-04f,
+-2.003107815e-04f, -1.987330883e-04f, -1.971551450e-04f, -1.955769543e-04f, -1.939985189e-04f, -1.924198416e-04f, -1.908409252e-04f, -1.892617723e-04f, -1.876823857e-04f, -1.861027682e-04f,
+-1.845229225e-04f, -1.829428514e-04f, -1.813625576e-04f, -1.797820438e-04f, -1.782013127e-04f, -1.766203672e-04f, -1.750392100e-04f, -1.734578439e-04f, -1.718762714e-04f, -1.702944955e-04f,
+-1.687125189e-04f, -1.671303443e-04f, -1.655479744e-04f, -1.639654120e-04f, -1.623826599e-04f, -1.607997208e-04f, -1.592165974e-04f, -1.576332925e-04f, -1.560498089e-04f, -1.544661492e-04f,
+-1.528823163e-04f, -1.512983128e-04f, -1.497141416e-04f, -1.481298054e-04f, -1.465453069e-04f, -1.449606489e-04f, -1.433758341e-04f, -1.417908652e-04f, -1.402057452e-04f, -1.386204765e-04f,
+-1.370350621e-04f, -1.354495047e-04f, -1.338638070e-04f, -1.322779718e-04f, -1.306920018e-04f, -1.291058997e-04f, -1.275196684e-04f, -1.259333106e-04f, -1.243468289e-04f, -1.227602263e-04f,
+-1.211735054e-04f, -1.195866689e-04f, -1.179997196e-04f, -1.164126604e-04f, -1.148254938e-04f, -1.132382227e-04f, -1.116508498e-04f, -1.100633779e-04f, -1.084758098e-04f, -1.068881480e-04f,
+-1.053003956e-04f, -1.037125550e-04f, -1.021246292e-04f, -1.005366209e-04f, -9.894853281e-05f, -9.736036767e-05f, -9.577212826e-05f, -9.418381731e-05f, -9.259543759e-05f, -9.100699184e-05f,
+-8.941848280e-05f, -8.782991324e-05f, -8.624128590e-05f, -8.465260352e-05f, -8.306386887e-05f, -8.147508468e-05f, -7.988625372e-05f, -7.829737872e-05f, -7.670846243e-05f, -7.511950762e-05f,
+-7.353051701e-05f, -7.194149338e-05f, -7.035243945e-05f, -6.876335799e-05f, -6.717425173e-05f, -6.558512344e-05f, -6.399597585e-05f, -6.240681172e-05f, -6.081763379e-05f, -5.922844482e-05f,
+-5.763924754e-05f, -5.605004471e-05f, -5.446083908e-05f, -5.287163339e-05f, -5.128243039e-05f, -4.969323282e-05f, -4.810404344e-05f, -4.651486499e-05f, -4.492570021e-05f, -4.333655186e-05f,
+-4.174742268e-05f, -4.015831542e-05f, -3.856923281e-05f, -3.698017761e-05f, -3.539115257e-05f, -3.380216042e-05f, -3.221320391e-05f, -3.062428579e-05f, -2.903540880e-05f, -2.744657569e-05f,
+-2.585778920e-05f, -2.426905207e-05f, -2.268036705e-05f, -2.109173688e-05f, -1.950316430e-05f, -1.791465205e-05f, -1.632620289e-05f, -1.473781955e-05f, -1.314950476e-05f, -1.156126129e-05f,
+-9.973091856e-06f, -8.384999211e-06f, -6.796986093e-06f, -5.209055244e-06f, -3.621209403e-06f, -2.033451309e-06f, -4.457837033e-07f, 1.141790676e-06f, 2.729269089e-06f, 4.316648799e-06f,
+5.903927065e-06f, 7.491101152e-06f, 9.078168320e-06f, 1.066512583e-05f, 1.225197095e-05f, 1.383870095e-05f, 1.542531308e-05f, 1.701180460e-05f, 1.859817279e-05f, 2.018441492e-05f,
+2.177052823e-05f, 2.335651000e-05f, 2.494235751e-05f, 2.652806800e-05f, 2.811363875e-05f, 2.969906703e-05f, 3.128435011e-05f, 3.286948525e-05f, 3.445446972e-05f, 3.603930079e-05f,
+3.762397573e-05f, 3.920849180e-05f, 4.079284629e-05f, 4.237703646e-05f, 4.396105958e-05f, 4.554491293e-05f, 4.712859377e-05f, 4.871209937e-05f, 5.029542702e-05f, 5.187857398e-05f,
+5.346153753e-05f, 5.504431495e-05f, 5.662690350e-05f, 5.820930046e-05f, 5.979150311e-05f, 6.137350873e-05f, 6.295531459e-05f, 6.453691796e-05f, 6.611831614e-05f, 6.769950639e-05f,
+6.928048600e-05f, 7.086125223e-05f, 7.244180239e-05f, 7.402213373e-05f, 7.560224356e-05f, 7.718212914e-05f, 7.876178776e-05f, 8.034121670e-05f, 8.192041324e-05f, 8.349937468e-05f,
+8.507809829e-05f, 8.665658135e-05f, 8.823482116e-05f, 8.981281500e-05f, 9.139056016e-05f, 9.296805392e-05f, 9.454529358e-05f, 9.612227641e-05f, 9.769899971e-05f, 9.927546077e-05f,
+1.008516569e-04f, 1.024275853e-04f, 1.040032434e-04f, 1.055786284e-04f, 1.071537376e-04f, 1.087285684e-04f, 1.103031179e-04f, 1.118773836e-04f, 1.134513626e-04f, 1.150250523e-04f,
+1.165984500e-04f, 1.181715530e-04f, 1.197443586e-04f, 1.213168641e-04f, 1.228890667e-04f, 1.244609638e-04f, 1.260325527e-04f, 1.276038307e-04f, 1.291747951e-04f, 1.307454431e-04f,
+1.323157722e-04f, 1.338857795e-04f, 1.354554625e-04f, 1.370248183e-04f, 1.385938444e-04f, 1.401625380e-04f, 1.417308964e-04f, 1.432989169e-04f, 1.448665969e-04f, 1.464339337e-04f,
+1.480009245e-04f, 1.495675667e-04f, 1.511338576e-04f, 1.526997945e-04f, 1.542653747e-04f, 1.558305956e-04f, 1.573954544e-04f, 1.589599484e-04f, 1.605240751e-04f, 1.620878316e-04f,
+1.636512154e-04f, 1.652142237e-04f, 1.667768538e-04f, 1.683391032e-04f, 1.699009690e-04f, 1.714624487e-04f, 1.730235395e-04f, 1.745842388e-04f, 1.761445438e-04f, 1.777044520e-04f,
+1.792639607e-04f, 1.808230671e-04f, 1.823817686e-04f, 1.839400626e-04f, 1.854979464e-04f, 1.870554172e-04f, 1.886124725e-04f, 1.901691095e-04f, 1.917253256e-04f, 1.932811182e-04f,
+1.948364845e-04f, 1.963914219e-04f, 1.979459278e-04f, 1.994999994e-04f, 2.010536342e-04f, 2.026068294e-04f, 2.041595824e-04f, 2.057118905e-04f, 2.072637512e-04f, 2.088151617e-04f,
+2.103661193e-04f, 2.119166215e-04f, 2.134666655e-04f, 2.150162487e-04f, 2.165653685e-04f, 2.181140222e-04f, 2.196622072e-04f, 2.212099208e-04f, 2.227571603e-04f, 2.243039232e-04f,
+2.258502067e-04f, 2.273960083e-04f, 2.289413252e-04f, 2.304861549e-04f, 2.320304947e-04f, 2.335743420e-04f, 2.351176940e-04f, 2.366605483e-04f, 2.382029021e-04f, 2.397447528e-04f,
+2.412860977e-04f, 2.428269343e-04f, 2.443672600e-04f, 2.459070719e-04f, 2.474463677e-04f, 2.489851445e-04f, 2.505233998e-04f, 2.520611309e-04f, 2.535983353e-04f, 2.551350103e-04f,
+2.566711533e-04f, 2.582067616e-04f, 2.597418326e-04f, 2.612763637e-04f, 2.628103523e-04f, 2.643437958e-04f, 2.658766915e-04f, 2.674090369e-04f, 2.689408292e-04f, 2.704720660e-04f,
+2.720027445e-04f, 2.735328622e-04f, 2.750624165e-04f, 2.765914047e-04f, 2.781198242e-04f, 2.796476725e-04f, 2.811749469e-04f, 2.827016448e-04f, 2.842277636e-04f, 2.857533007e-04f,
+2.872782536e-04f, 2.888026195e-04f, 2.903263959e-04f, 2.918495802e-04f, 2.933721699e-04f, 2.948941622e-04f, 2.964155547e-04f, 2.979363446e-04f, 2.994565295e-04f, 3.009761067e-04f,
+3.024950737e-04f, 3.040134278e-04f, 3.055311665e-04f, 3.070482871e-04f, 3.085647872e-04f, 3.100806640e-04f, 3.115959151e-04f, 3.131105378e-04f, 3.146245295e-04f, 3.161378878e-04f,
+3.176506099e-04f, 3.191626934e-04f, 3.206741356e-04f, 3.221849339e-04f, 3.236950859e-04f, 3.252045889e-04f, 3.267134403e-04f, 3.282216377e-04f, 3.297291783e-04f, 3.312360597e-04f,
+3.327422793e-04f, 3.342478345e-04f, 3.357527227e-04f, 3.372569415e-04f, 3.387604881e-04f, 3.402633602e-04f, 3.417655550e-04f, 3.432670701e-04f, 3.447679030e-04f, 3.462680509e-04f,
+3.477675115e-04f, 3.492662821e-04f, 3.507643602e-04f, 3.522617433e-04f, 3.537584287e-04f, 3.552544140e-04f, 3.567496966e-04f, 3.582442740e-04f, 3.597381436e-04f, 3.612313029e-04f,
+3.627237493e-04f, 3.642154803e-04f, 3.657064934e-04f, 3.671967860e-04f, 3.686863556e-04f, 3.701751997e-04f, 3.716633158e-04f, 3.731507012e-04f, 3.746373535e-04f, 3.761232702e-04f,
+3.776084487e-04f, 3.790928865e-04f, 3.805765811e-04f, 3.820595300e-04f, 3.835417306e-04f, 3.850231804e-04f, 3.865038769e-04f, 3.879838176e-04f, 3.894630000e-04f, 3.909414216e-04f,
+3.924190798e-04f, 3.938959722e-04f, 3.953720962e-04f, 3.968474493e-04f, 3.983220291e-04f, 3.997958330e-04f, 4.012688585e-04f, 4.027411032e-04f, 4.042125645e-04f, 4.056832399e-04f,
+4.071531269e-04f, 4.086222231e-04f, 4.100905259e-04f, 4.115580328e-04f, 4.130247415e-04f, 4.144906493e-04f, 4.159557538e-04f, 4.174200525e-04f, 4.188835429e-04f, 4.203462225e-04f,
+4.218080890e-04f, 4.232691397e-04f, 4.247293721e-04f, 4.261887840e-04f, 4.276473726e-04f, 4.291051357e-04f, 4.305620707e-04f, 4.320181750e-04f, 4.334734464e-04f, 4.349278823e-04f,
+4.363814802e-04f, 4.378342377e-04f, 4.392861523e-04f, 4.407372215e-04f, 4.421874430e-04f, 4.436368142e-04f, 4.450853327e-04f, 4.465329960e-04f, 4.479798017e-04f, 4.494257473e-04f,
+4.508708304e-04f, 4.523150485e-04f, 4.537583992e-04f, 4.552008801e-04f, 4.566424886e-04f, 4.580832225e-04f, 4.595230791e-04f, 4.609620561e-04f, 4.624001511e-04f, 4.638373616e-04f,
+4.652736852e-04f, 4.667091195e-04f, 4.681436619e-04f, 4.695773102e-04f, 4.710100618e-04f, 4.724419144e-04f, 4.738728655e-04f, 4.753029127e-04f, 4.767320537e-04f, 4.781602858e-04f,
+4.795876069e-04f, 4.810140144e-04f, 4.824395059e-04f, 4.838640790e-04f, 4.852877314e-04f, 4.867104605e-04f, 4.881322641e-04f, 4.895531397e-04f, 4.909730848e-04f, 4.923920972e-04f,
+4.938101743e-04f, 4.952273139e-04f, 4.966435135e-04f, 4.980587707e-04f, 4.994730831e-04f, 5.008864483e-04f, 5.022988641e-04f, 5.037103278e-04f, 5.051208373e-04f, 5.065303901e-04f,
+5.079389838e-04f, 5.093466160e-04f, 5.107532844e-04f, 5.121589866e-04f, 5.135637202e-04f, 5.149674828e-04f, 5.163702722e-04f, 5.177720858e-04f, 5.191729214e-04f, 5.205727766e-04f,
+5.219716490e-04f, 5.233695362e-04f, 5.247664360e-04f, 5.261623459e-04f, 5.275572636e-04f, 5.289511867e-04f, 5.303441130e-04f, 5.317360400e-04f, 5.331269653e-04f, 5.345168867e-04f,
+5.359058018e-04f, 5.372937083e-04f, 5.386806038e-04f, 5.400664860e-04f, 5.414513526e-04f, 5.428352011e-04f, 5.442180294e-04f, 5.455998350e-04f, 5.469806156e-04f, 5.483603689e-04f,
+5.497390927e-04f, 5.511167844e-04f, 5.524934419e-04f, 5.538690628e-04f, 5.552436448e-04f, 5.566171856e-04f, 5.579896829e-04f, 5.593611343e-04f, 5.607315376e-04f, 5.621008904e-04f,
+5.634691905e-04f, 5.648364355e-04f, 5.662026232e-04f, 5.675677511e-04f, 5.689318172e-04f, 5.702948189e-04f, 5.716567541e-04f, 5.730176205e-04f, 5.743774158e-04f, 5.757361376e-04f,
+5.770937837e-04f, 5.784503519e-04f, 5.798058398e-04f, 5.811602451e-04f, 5.825135657e-04f, 5.838657991e-04f, 5.852169431e-04f, 5.865669956e-04f, 5.879159541e-04f, 5.892638164e-04f,
+5.906105803e-04f, 5.919562435e-04f, 5.933008037e-04f, 5.946442587e-04f, 5.959866062e-04f, 5.973278440e-04f, 5.986679698e-04f, 6.000069814e-04f, 6.013448764e-04f, 6.026816527e-04f,
+6.040173081e-04f, 6.053518402e-04f, 6.066852469e-04f, 6.080175259e-04f, 6.093486749e-04f, 6.106786918e-04f, 6.120075742e-04f, 6.133353200e-04f, 6.146619270e-04f, 6.159873929e-04f,
+6.173117154e-04f, 6.186348925e-04f, 6.199569218e-04f, 6.212778011e-04f, 6.225975282e-04f, 6.239161010e-04f, 6.252335171e-04f, 6.265497744e-04f, 6.278648707e-04f, 6.291788038e-04f,
+6.304915714e-04f, 6.318031714e-04f, 6.331136016e-04f, 6.344228597e-04f, 6.357309437e-04f, 6.370378512e-04f, 6.383435801e-04f, 6.396481283e-04f, 6.409514934e-04f, 6.422536734e-04f,
+6.435546661e-04f, 6.448544693e-04f, 6.461530808e-04f, 6.474504984e-04f, 6.487467200e-04f, 6.500417433e-04f, 6.513355663e-04f, 6.526281868e-04f, 6.539196025e-04f, 6.552098114e-04f,
+6.564988113e-04f, 6.577866000e-04f, 6.590731753e-04f, 6.603585352e-04f, 6.616426775e-04f, 6.629255999e-04f, 6.642073004e-04f, 6.654877769e-04f, 6.667670271e-04f, 6.680450490e-04f,
+6.693218404e-04f, 6.705973992e-04f, 6.718717232e-04f, 6.731448104e-04f, 6.744166585e-04f, 6.756872655e-04f, 6.769566293e-04f, 6.782247476e-04f, 6.794916185e-04f, 6.807572398e-04f,
+6.820216093e-04f, 6.832847250e-04f, 6.845465847e-04f, 6.858071864e-04f, 6.870665279e-04f, 6.883246072e-04f, 6.895814221e-04f, 6.908369705e-04f, 6.920912504e-04f, 6.933442597e-04f,
+6.945959962e-04f, 6.958464578e-04f, 6.970956426e-04f, 6.983435484e-04f, 6.995901731e-04f, 7.008355146e-04f, 7.020795709e-04f, 7.033223399e-04f, 7.045638195e-04f, 7.058040077e-04f,
+7.070429023e-04f, 7.082805014e-04f, 7.095168028e-04f, 7.107518046e-04f, 7.119855045e-04f, 7.132179007e-04f, 7.144489909e-04f, 7.156787733e-04f, 7.169072457e-04f, 7.181344060e-04f,
+7.193602523e-04f, 7.205847825e-04f, 7.218079946e-04f, 7.230298865e-04f, 7.242504562e-04f, 7.254697016e-04f, 7.266876208e-04f, 7.279042117e-04f, 7.291194723e-04f, 7.303334005e-04f,
+7.315459943e-04f, 7.327572518e-04f, 7.339671709e-04f, 7.351757495e-04f, 7.363829858e-04f, 7.375888776e-04f, 7.387934230e-04f, 7.399966200e-04f, 7.411984666e-04f, 7.423989607e-04f,
+7.435981004e-04f, 7.447958837e-04f, 7.459923086e-04f, 7.471873730e-04f, 7.483810752e-04f, 7.495734129e-04f, 7.507643843e-04f, 7.519539874e-04f, 7.531422202e-04f, 7.543290807e-04f,
+7.555145670e-04f, 7.566986771e-04f, 7.578814090e-04f, 7.590627608e-04f, 7.602427305e-04f, 7.614213161e-04f, 7.625985157e-04f, 7.637743274e-04f, 7.649487492e-04f, 7.661217791e-04f,
+7.672934152e-04f, 7.684636556e-04f, 7.696324982e-04f, 7.707999413e-04f, 7.719659828e-04f, 7.731306208e-04f, 7.742938534e-04f, 7.754556786e-04f, 7.766160946e-04f, 7.777750993e-04f,
+7.789326910e-04f, 7.800888676e-04f, 7.812436273e-04f, 7.823969681e-04f, 7.835488882e-04f, 7.846993855e-04f, 7.858484583e-04f, 7.869961046e-04f, 7.881423226e-04f, 7.892871102e-04f,
+7.904304657e-04f, 7.915723871e-04f, 7.927128726e-04f, 7.938519202e-04f, 7.949895281e-04f, 7.961256944e-04f, 7.972604173e-04f, 7.983936947e-04f, 7.995255250e-04f, 8.006559061e-04f,
+8.017848362e-04f, 8.029123136e-04f, 8.040383362e-04f, 8.051629023e-04f, 8.062860099e-04f, 8.074076573e-04f, 8.085278426e-04f, 8.096465639e-04f, 8.107638193e-04f, 8.118796071e-04f,
+8.129939254e-04f, 8.141067724e-04f, 8.152181462e-04f, 8.163280449e-04f, 8.174364668e-04f, 8.185434101e-04f, 8.196488728e-04f, 8.207528532e-04f, 8.218553495e-04f, 8.229563598e-04f,
+8.240558823e-04f, 8.251539152e-04f, 8.262504568e-04f, 8.273455051e-04f, 8.284390584e-04f, 8.295311150e-04f, 8.306216729e-04f, 8.317107303e-04f, 8.327982856e-04f, 8.338843369e-04f,
+8.349688825e-04f, 8.360519204e-04f, 8.371334490e-04f, 8.382134665e-04f, 8.392919711e-04f, 8.403689610e-04f, 8.414444344e-04f, 8.425183896e-04f, 8.435908248e-04f, 8.446617383e-04f,
+8.457311283e-04f, 8.467989930e-04f, 8.478653307e-04f, 8.489301396e-04f, 8.499934179e-04f, 8.510551640e-04f, 8.521153761e-04f, 8.531740524e-04f, 8.542311912e-04f, 8.552867908e-04f,
+8.563408494e-04f, 8.573933652e-04f, 8.584443367e-04f, 8.594937620e-04f, 8.605416395e-04f, 8.615879673e-04f, 8.626327438e-04f, 8.636759673e-04f, 8.647176361e-04f, 8.657577484e-04f,
+8.667963026e-04f, 8.678332969e-04f, 8.688687296e-04f, 8.699025991e-04f, 8.709349037e-04f, 8.719656416e-04f, 8.729948112e-04f, 8.740224108e-04f, 8.750484387e-04f, 8.760728932e-04f,
+8.770957726e-04f, 8.781170754e-04f, 8.791367997e-04f, 8.801549439e-04f, 8.811715064e-04f, 8.821864856e-04f, 8.831998796e-04f, 8.842116870e-04f, 8.852219059e-04f, 8.862305349e-04f,
+8.872375721e-04f, 8.882430161e-04f, 8.892468651e-04f, 8.902491174e-04f, 8.912497716e-04f, 8.922488258e-04f, 8.932462786e-04f, 8.942421282e-04f, 8.952363731e-04f, 8.962290115e-04f,
+8.972200420e-04f, 8.982094628e-04f, 8.991972724e-04f, 9.001834691e-04f, 9.011680514e-04f, 9.021510176e-04f, 9.031323661e-04f, 9.041120954e-04f, 9.050902038e-04f, 9.060666897e-04f,
+9.070415516e-04f, 9.080147878e-04f, 9.089863968e-04f, 9.099563769e-04f, 9.109247267e-04f, 9.118914446e-04f, 9.128565288e-04f, 9.138199780e-04f, 9.147817904e-04f, 9.157419647e-04f,
+9.167004991e-04f, 9.176573921e-04f, 9.186126422e-04f, 9.195662478e-04f, 9.205182074e-04f, 9.214685194e-04f, 9.224171823e-04f, 9.233641945e-04f, 9.243095545e-04f, 9.252532608e-04f,
+9.261953118e-04f, 9.271357060e-04f, 9.280744418e-04f, 9.290115178e-04f, 9.299469324e-04f, 9.308806841e-04f, 9.318127714e-04f, 9.327431928e-04f, 9.336719467e-04f, 9.345990317e-04f,
+9.355244463e-04f, 9.364481889e-04f, 9.373702580e-04f, 9.382906522e-04f, 9.392093700e-04f, 9.401264099e-04f, 9.410417704e-04f, 9.419554499e-04f, 9.428674472e-04f, 9.437777605e-04f,
+9.446863886e-04f, 9.455933299e-04f, 9.464985829e-04f, 9.474021462e-04f, 9.483040183e-04f, 9.492041977e-04f, 9.501026831e-04f, 9.509994730e-04f, 9.518945658e-04f, 9.527879602e-04f,
+9.536796547e-04f, 9.545696478e-04f, 9.554579383e-04f, 9.563445245e-04f, 9.572294050e-04f, 9.581125786e-04f, 9.589940436e-04f, 9.598737987e-04f, 9.607518425e-04f, 9.616281736e-04f,
+9.625027905e-04f, 9.633756918e-04f, 9.642468762e-04f, 9.651163421e-04f, 9.659840884e-04f, 9.668501134e-04f, 9.677144158e-04f, 9.685769943e-04f, 9.694378475e-04f, 9.702969739e-04f,
+9.711543722e-04f, 9.720100410e-04f, 9.728639789e-04f, 9.737161846e-04f, 9.745666566e-04f, 9.754153937e-04f, 9.762623944e-04f, 9.771076574e-04f, 9.779511813e-04f, 9.787929648e-04f,
+9.796330065e-04f, 9.804713051e-04f, 9.813078593e-04f, 9.821426676e-04f, 9.829757287e-04f, 9.838070414e-04f, 9.846366043e-04f, 9.854644160e-04f, 9.862904752e-04f, 9.871147806e-04f,
+9.879373309e-04f, 9.887581248e-04f, 9.895771609e-04f, 9.903944379e-04f, 9.912099546e-04f, 9.920237096e-04f, 9.928357016e-04f, 9.936459293e-04f, 9.944543914e-04f, 9.952610867e-04f,
+9.960660138e-04f, 9.968691714e-04f, 9.976705584e-04f, 9.984701733e-04f, 9.992680149e-04f, 1.000064082e-03f, 1.000858373e-03f, 1.001650887e-03f, 1.002441623e-03f, 1.003230579e-03f,
+1.004017755e-03f, 1.004803148e-03f, 1.005586757e-03f, 1.006368583e-03f, 1.007148622e-03f, 1.007926874e-03f, 1.008703338e-03f, 1.009478012e-03f, 1.010250895e-03f, 1.011021986e-03f,
+1.011791284e-03f, 1.012558788e-03f, 1.013324495e-03f, 1.014088406e-03f, 1.014850519e-03f, 1.015610832e-03f, 1.016369345e-03f, 1.017126055e-03f, 1.017880963e-03f, 1.018634067e-03f,
+1.019385365e-03f, 1.020134857e-03f, 1.020882541e-03f, 1.021628416e-03f, 1.022372481e-03f, 1.023114734e-03f, 1.023855175e-03f, 1.024593803e-03f, 1.025330615e-03f, 1.026065612e-03f,
+1.026798792e-03f, 1.027530153e-03f, 1.028259694e-03f, 1.028987416e-03f, 1.029713315e-03f, 1.030437391e-03f, 1.031159644e-03f, 1.031880071e-03f, 1.032598672e-03f, 1.033315445e-03f,
+1.034030390e-03f, 1.034743505e-03f, 1.035454789e-03f, 1.036164241e-03f, 1.036871860e-03f, 1.037577645e-03f, 1.038281594e-03f, 1.038983708e-03f, 1.039683983e-03f, 1.040382420e-03f,
+1.041079017e-03f, 1.041773774e-03f, 1.042466688e-03f, 1.043157760e-03f, 1.043846987e-03f, 1.044534370e-03f, 1.045219906e-03f, 1.045903594e-03f, 1.046585435e-03f, 1.047265425e-03f,
+1.047943566e-03f, 1.048619854e-03f, 1.049294291e-03f, 1.049966873e-03f, 1.050637600e-03f, 1.051306472e-03f, 1.051973487e-03f, 1.052638644e-03f, 1.053301942e-03f, 1.053963380e-03f,
+1.054622958e-03f, 1.055280673e-03f, 1.055936525e-03f, 1.056590513e-03f, 1.057242635e-03f, 1.057892892e-03f, 1.058541282e-03f, 1.059187803e-03f, 1.059832455e-03f, 1.060475238e-03f,
+1.061116148e-03f, 1.061755187e-03f, 1.062392353e-03f, 1.063027645e-03f, 1.063661061e-03f, 1.064292601e-03f, 1.064922264e-03f, 1.065550050e-03f, 1.066175956e-03f, 1.066799982e-03f,
+1.067422127e-03f, 1.068042390e-03f, 1.068660771e-03f, 1.069277267e-03f, 1.069891879e-03f, 1.070504605e-03f, 1.071115444e-03f, 1.071724395e-03f, 1.072331458e-03f, 1.072936632e-03f,
+1.073539915e-03f, 1.074141306e-03f, 1.074740806e-03f, 1.075338412e-03f, 1.075934123e-03f, 1.076527940e-03f, 1.077119861e-03f, 1.077709885e-03f, 1.078298011e-03f, 1.078884238e-03f,
+1.079468566e-03f, 1.080050993e-03f, 1.080631519e-03f, 1.081210143e-03f, 1.081786863e-03f, 1.082361679e-03f, 1.082934591e-03f, 1.083505596e-03f, 1.084074695e-03f, 1.084641886e-03f,
+1.085207169e-03f, 1.085770542e-03f, 1.086332006e-03f, 1.086891558e-03f, 1.087449199e-03f, 1.088004926e-03f, 1.088558740e-03f, 1.089110640e-03f, 1.089660625e-03f, 1.090208693e-03f,
+1.090754844e-03f, 1.091299078e-03f, 1.091841393e-03f, 1.092381789e-03f, 1.092920265e-03f, 1.093456819e-03f, 1.093991452e-03f, 1.094524162e-03f, 1.095054948e-03f, 1.095583810e-03f,
+1.096110747e-03f, 1.096635759e-03f, 1.097158843e-03f, 1.097680000e-03f, 1.098199229e-03f, 1.098716529e-03f, 1.099231899e-03f, 1.099745339e-03f, 1.100256847e-03f, 1.100766423e-03f,
+1.101274066e-03f, 1.101779776e-03f, 1.102283551e-03f, 1.102785391e-03f, 1.103285295e-03f, 1.103783262e-03f, 1.104279292e-03f, 1.104773384e-03f, 1.105265537e-03f, 1.105755750e-03f,
+1.106244023e-03f, 1.106730355e-03f, 1.107214745e-03f, 1.107697192e-03f, 1.108177697e-03f, 1.108656257e-03f, 1.109132872e-03f, 1.109607543e-03f, 1.110080267e-03f, 1.110551044e-03f,
+1.111019874e-03f, 1.111486755e-03f, 1.111951688e-03f, 1.112414671e-03f, 1.112875704e-03f, 1.113334786e-03f, 1.113791917e-03f, 1.114247095e-03f, 1.114700320e-03f, 1.115151591e-03f,
+1.115600909e-03f, 1.116048271e-03f, 1.116493678e-03f, 1.116937128e-03f, 1.117378621e-03f, 1.117818157e-03f, 1.118255735e-03f, 1.118691354e-03f, 1.119125014e-03f, 1.119556713e-03f,
+1.119986452e-03f, 1.120414229e-03f, 1.120840044e-03f, 1.121263897e-03f, 1.121685786e-03f, 1.122105712e-03f, 1.122523673e-03f, 1.122939669e-03f, 1.123353699e-03f, 1.123765764e-03f,
+1.124175861e-03f, 1.124583991e-03f, 1.124990153e-03f, 1.125394346e-03f, 1.125796570e-03f, 1.126196825e-03f, 1.126595109e-03f, 1.126991422e-03f, 1.127385763e-03f, 1.127778133e-03f,
+1.128168530e-03f, 1.128556953e-03f, 1.128943403e-03f, 1.129327879e-03f, 1.129710380e-03f, 1.130090906e-03f, 1.130469455e-03f, 1.130846029e-03f, 1.131220625e-03f, 1.131593244e-03f,
+1.131963884e-03f, 1.132332546e-03f, 1.132699230e-03f, 1.133063933e-03f, 1.133426656e-03f, 1.133787399e-03f, 1.134146161e-03f, 1.134502941e-03f, 1.134857739e-03f, 1.135210554e-03f,
+1.135561386e-03f, 1.135910235e-03f, 1.136257100e-03f, 1.136601980e-03f, 1.136944874e-03f, 1.137285784e-03f, 1.137624707e-03f, 1.137961644e-03f, 1.138296594e-03f, 1.138629557e-03f,
+1.138960532e-03f, 1.139289519e-03f, 1.139616516e-03f, 1.139941525e-03f, 1.140264544e-03f, 1.140585573e-03f, 1.140904611e-03f, 1.141221659e-03f, 1.141536715e-03f, 1.141849779e-03f,
+1.142160852e-03f, 1.142469931e-03f, 1.142777017e-03f, 1.143082110e-03f, 1.143385210e-03f, 1.143686314e-03f, 1.143985424e-03f, 1.144282539e-03f, 1.144577659e-03f, 1.144870783e-03f,
+1.145161910e-03f, 1.145451041e-03f, 1.145738175e-03f, 1.146023311e-03f, 1.146306450e-03f, 1.146587590e-03f, 1.146866732e-03f, 1.147143875e-03f, 1.147419019e-03f, 1.147692164e-03f,
+1.147963308e-03f, 1.148232452e-03f, 1.148499595e-03f, 1.148764738e-03f, 1.149027879e-03f, 1.149289018e-03f, 1.149548156e-03f, 1.149805291e-03f, 1.150060423e-03f, 1.150313553e-03f,
+1.150564679e-03f, 1.150813802e-03f, 1.151060921e-03f, 1.151306035e-03f, 1.151549145e-03f, 1.151790250e-03f, 1.152029350e-03f, 1.152266445e-03f, 1.152501534e-03f, 1.152734617e-03f,
+1.152965694e-03f, 1.153194764e-03f, 1.153421827e-03f, 1.153646883e-03f, 1.153869932e-03f, 1.154090973e-03f, 1.154310006e-03f, 1.154527032e-03f, 1.154742048e-03f, 1.154955056e-03f,
+1.155166055e-03f, 1.155375045e-03f, 1.155582026e-03f, 1.155786997e-03f, 1.155989958e-03f, 1.156190909e-03f, 1.156389849e-03f, 1.156586779e-03f, 1.156781698e-03f, 1.156974606e-03f,
+1.157165503e-03f, 1.157354389e-03f, 1.157541263e-03f, 1.157726125e-03f, 1.157908975e-03f, 1.158089813e-03f, 1.158268638e-03f, 1.158445451e-03f, 1.158620251e-03f, 1.158793038e-03f,
+1.158963812e-03f, 1.159132572e-03f, 1.159299319e-03f, 1.159464053e-03f, 1.159626772e-03f, 1.159787478e-03f, 1.159946169e-03f, 1.160102846e-03f, 1.160257508e-03f, 1.160410156e-03f,
+1.160560790e-03f, 1.160709408e-03f, 1.160856011e-03f, 1.161000599e-03f, 1.161143172e-03f, 1.161283729e-03f, 1.161422271e-03f, 1.161558797e-03f, 1.161693307e-03f, 1.161825802e-03f,
+1.161956280e-03f, 1.162084743e-03f, 1.162211189e-03f, 1.162335619e-03f, 1.162458032e-03f, 1.162578429e-03f, 1.162696809e-03f, 1.162813173e-03f, 1.162927520e-03f, 1.163039850e-03f,
+1.163150163e-03f, 1.163258459e-03f, 1.163364738e-03f, 1.163469000e-03f, 1.163571245e-03f, 1.163671473e-03f, 1.163769683e-03f, 1.163865876e-03f, 1.163960052e-03f, 1.164052210e-03f,
+1.164142351e-03f, 1.164230474e-03f, 1.164316580e-03f, 1.164400668e-03f, 1.164482739e-03f, 1.164562792e-03f, 1.164640828e-03f, 1.164716845e-03f, 1.164790846e-03f, 1.164862828e-03f,
+1.164932793e-03f, 1.165000740e-03f, 1.165066670e-03f, 1.165130582e-03f, 1.165192476e-03f, 1.165252353e-03f, 1.165310212e-03f, 1.165366053e-03f, 1.165419877e-03f, 1.165471684e-03f,
+1.165521472e-03f, 1.165569244e-03f, 1.165614998e-03f, 1.165658734e-03f, 1.165700454e-03f, 1.165740156e-03f, 1.165777840e-03f, 1.165813508e-03f, 1.165847158e-03f, 1.165878791e-03f,
+1.165908408e-03f, 1.165936007e-03f, 1.165961589e-03f, 1.165985155e-03f, 1.166006704e-03f, 1.166026236e-03f, 1.166043752e-03f, 1.166059252e-03f, 1.166072735e-03f, 1.166084201e-03f,
+1.166093652e-03f, 1.166101086e-03f, 1.166106505e-03f, 1.166109908e-03f, 1.166111295e-03f, 1.166110666e-03f, 1.166108022e-03f, 1.166103362e-03f, 1.166096688e-03f, 1.166087998e-03f,
+1.166077293e-03f, 1.166064574e-03f, 1.166049839e-03f, 1.166033090e-03f, 1.166014327e-03f, 1.165993550e-03f, 1.165970758e-03f, 1.165945953e-03f, 1.165919133e-03f, 1.165890301e-03f,
+1.165859454e-03f, 1.165826595e-03f, 1.165791722e-03f, 1.165754837e-03f, 1.165715938e-03f, 1.165675028e-03f, 1.165632105e-03f, 1.165587169e-03f, 1.165540222e-03f, 1.165491263e-03f,
+1.165440293e-03f, 1.165387311e-03f, 1.165332318e-03f, 1.165275314e-03f, 1.165216300e-03f, 1.165155275e-03f, 1.165092240e-03f, 1.165027195e-03f, 1.164960140e-03f, 1.164891075e-03f,
+1.164820001e-03f, 1.164746918e-03f, 1.164671827e-03f, 1.164594726e-03f, 1.164515618e-03f, 1.164434501e-03f, 1.164351377e-03f, 1.164266245e-03f, 1.164179105e-03f, 1.164089959e-03f,
+1.163998806e-03f, 1.163905647e-03f, 1.163810481e-03f, 1.163713310e-03f, 1.163614133e-03f, 1.163512950e-03f, 1.163409763e-03f, 1.163304571e-03f, 1.163197374e-03f, 1.163088174e-03f,
+1.162976969e-03f, 1.162863762e-03f, 1.162748551e-03f, 1.162631337e-03f, 1.162512120e-03f, 1.162390902e-03f, 1.162267681e-03f, 1.162142459e-03f, 1.162015236e-03f, 1.161886012e-03f,
+1.161754787e-03f, 1.161621562e-03f, 1.161486337e-03f, 1.161349113e-03f, 1.161209890e-03f, 1.161068668e-03f, 1.160925448e-03f, 1.160780229e-03f, 1.160633013e-03f, 1.160483799e-03f,
+1.160332589e-03f, 1.160179382e-03f, 1.160024179e-03f, 1.159866981e-03f, 1.159707786e-03f, 1.159546597e-03f, 1.159383414e-03f, 1.159218236e-03f, 1.159051064e-03f, 1.158881899e-03f,
+1.158710741e-03f, 1.158537591e-03f, 1.158362448e-03f, 1.158185314e-03f, 1.158006188e-03f, 1.157825072e-03f, 1.157641965e-03f, 1.157456868e-03f, 1.157269781e-03f, 1.157080706e-03f,
+1.156889642e-03f, 1.156696589e-03f, 1.156501549e-03f, 1.156304522e-03f, 1.156105508e-03f, 1.155904507e-03f, 1.155701521e-03f, 1.155496549e-03f, 1.155289592e-03f, 1.155080650e-03f,
+1.154869725e-03f, 1.154656816e-03f, 1.154441924e-03f, 1.154225049e-03f, 1.154006193e-03f, 1.153785354e-03f, 1.153562535e-03f, 1.153337735e-03f, 1.153110955e-03f, 1.152882196e-03f,
+1.152651457e-03f, 1.152418740e-03f, 1.152184045e-03f, 1.151947373e-03f, 1.151708724e-03f, 1.151468098e-03f, 1.151225496e-03f, 1.150980919e-03f, 1.150734367e-03f, 1.150485841e-03f,
+1.150235341e-03f, 1.149982868e-03f, 1.149728423e-03f, 1.149472005e-03f, 1.149213616e-03f, 1.148953256e-03f, 1.148690926e-03f, 1.148426625e-03f, 1.148160356e-03f, 1.147892118e-03f,
+1.147621912e-03f, 1.147349738e-03f, 1.147075598e-03f, 1.146799491e-03f, 1.146521419e-03f, 1.146241381e-03f, 1.145959379e-03f, 1.145675413e-03f, 1.145389484e-03f, 1.145101592e-03f,
+1.144811738e-03f, 1.144519923e-03f, 1.144226146e-03f, 1.143930410e-03f, 1.143632714e-03f, 1.143333059e-03f, 1.143031446e-03f, 1.142727875e-03f, 1.142422347e-03f, 1.142114863e-03f,
+1.141805423e-03f, 1.141494028e-03f, 1.141180678e-03f, 1.140865375e-03f, 1.140548119e-03f, 1.140228910e-03f, 1.139907749e-03f, 1.139584638e-03f, 1.139259576e-03f, 1.138932564e-03f,
+1.138603603e-03f, 1.138272694e-03f, 1.137939837e-03f, 1.137605033e-03f, 1.137268282e-03f, 1.136929587e-03f, 1.136588946e-03f, 1.136246361e-03f, 1.135901832e-03f, 1.135555361e-03f,
+1.135206948e-03f, 1.134856593e-03f, 1.134504298e-03f, 1.134150063e-03f, 1.133793888e-03f, 1.133435775e-03f, 1.133075725e-03f, 1.132713737e-03f, 1.132349814e-03f, 1.131983954e-03f,
+1.131616160e-03f, 1.131246433e-03f, 1.130874771e-03f, 1.130501178e-03f, 1.130125652e-03f, 1.129748196e-03f, 1.129368810e-03f, 1.128987494e-03f, 1.128604249e-03f, 1.128219077e-03f,
+1.127831977e-03f, 1.127442952e-03f, 1.127052000e-03f, 1.126659124e-03f, 1.126264324e-03f, 1.125867601e-03f, 1.125468956e-03f, 1.125068389e-03f, 1.124665902e-03f, 1.124261494e-03f,
+1.123855168e-03f, 1.123446923e-03f, 1.123036761e-03f, 1.122624682e-03f, 1.122210687e-03f, 1.121794777e-03f, 1.121376953e-03f, 1.120957216e-03f, 1.120535567e-03f, 1.120112005e-03f,
+1.119686533e-03f, 1.119259151e-03f, 1.118829860e-03f, 1.118398661e-03f, 1.117965555e-03f, 1.117530542e-03f, 1.117093623e-03f, 1.116654799e-03f, 1.116214072e-03f, 1.115771442e-03f,
+1.115326909e-03f, 1.114880475e-03f, 1.114432141e-03f, 1.113981908e-03f, 1.113529776e-03f, 1.113075746e-03f, 1.112619819e-03f, 1.112161996e-03f, 1.111702279e-03f, 1.111240667e-03f,
+1.110777163e-03f, 1.110311765e-03f, 1.109844477e-03f, 1.109375298e-03f, 1.108904230e-03f, 1.108431273e-03f, 1.107956429e-03f, 1.107479697e-03f, 1.107001080e-03f, 1.106520579e-03f,
+1.106038193e-03f, 1.105553924e-03f, 1.105067774e-03f, 1.104579742e-03f, 1.104089830e-03f, 1.103598039e-03f, 1.103104370e-03f, 1.102608824e-03f, 1.102111402e-03f, 1.101612104e-03f,
+1.101110932e-03f, 1.100607887e-03f, 1.100102969e-03f, 1.099596180e-03f, 1.099087521e-03f, 1.098576992e-03f, 1.098064595e-03f, 1.097550331e-03f, 1.097034200e-03f, 1.096516204e-03f,
+1.095996343e-03f, 1.095474620e-03f, 1.094951034e-03f, 1.094425586e-03f, 1.093898278e-03f, 1.093369111e-03f, 1.092838086e-03f, 1.092305204e-03f, 1.091770465e-03f, 1.091233871e-03f,
+1.090695423e-03f, 1.090155122e-03f, 1.089612969e-03f, 1.089068965e-03f, 1.088523111e-03f, 1.087975408e-03f, 1.087425858e-03f, 1.086874460e-03f, 1.086321217e-03f, 1.085766129e-03f,
+1.085209198e-03f, 1.084650424e-03f, 1.084089809e-03f, 1.083527354e-03f, 1.082963059e-03f, 1.082396926e-03f, 1.081828956e-03f, 1.081259150e-03f, 1.080687509e-03f, 1.080114034e-03f,
+1.079538727e-03f, 1.078961588e-03f, 1.078382619e-03f, 1.077801820e-03f, 1.077219193e-03f, 1.076634739e-03f, 1.076048458e-03f, 1.075460353e-03f, 1.074870424e-03f, 1.074278673e-03f,
+1.073685100e-03f, 1.073089706e-03f, 1.072492493e-03f, 1.071893463e-03f, 1.071292615e-03f, 1.070689951e-03f, 1.070085473e-03f, 1.069479181e-03f, 1.068871077e-03f, 1.068261162e-03f,
+1.067649437e-03f, 1.067035902e-03f, 1.066420561e-03f, 1.065803412e-03f, 1.065184458e-03f, 1.064563700e-03f, 1.063941140e-03f, 1.063316777e-03f, 1.062690614e-03f, 1.062062651e-03f,
+1.061432890e-03f, 1.060801332e-03f, 1.060167978e-03f, 1.059532829e-03f, 1.058895887e-03f, 1.058257153e-03f, 1.057616628e-03f, 1.056974313e-03f, 1.056330209e-03f, 1.055684318e-03f,
+1.055036641e-03f, 1.054387179e-03f, 1.053735934e-03f, 1.053082905e-03f, 1.052428096e-03f, 1.051771507e-03f, 1.051113139e-03f, 1.050452993e-03f, 1.049791071e-03f, 1.049127374e-03f,
+1.048461904e-03f, 1.047794661e-03f, 1.047125646e-03f, 1.046454862e-03f, 1.045782309e-03f, 1.045107989e-03f, 1.044431902e-03f, 1.043754051e-03f, 1.043074435e-03f, 1.042393058e-03f,
+1.041709920e-03f, 1.041025021e-03f, 1.040338365e-03f, 1.039649951e-03f, 1.038959781e-03f, 1.038267857e-03f, 1.037574179e-03f, 1.036878749e-03f, 1.036181569e-03f, 1.035482639e-03f,
+1.034781962e-03f, 1.034079537e-03f, 1.033375367e-03f, 1.032669453e-03f, 1.031961796e-03f, 1.031252398e-03f, 1.030541260e-03f, 1.029828383e-03f, 1.029113768e-03f, 1.028397418e-03f,
+1.027679332e-03f, 1.026959513e-03f, 1.026237962e-03f, 1.025514681e-03f, 1.024789670e-03f, 1.024062930e-03f, 1.023334465e-03f, 1.022604274e-03f, 1.021872359e-03f, 1.021138721e-03f,
+1.020403363e-03f, 1.019666284e-03f, 1.018927487e-03f, 1.018186973e-03f, 1.017444743e-03f, 1.016700799e-03f, 1.015955143e-03f, 1.015207774e-03f, 1.014458696e-03f, 1.013707908e-03f,
+1.012955414e-03f, 1.012201213e-03f, 1.011445308e-03f, 1.010687700e-03f, 1.009928391e-03f, 1.009167381e-03f, 1.008404672e-03f, 1.007640265e-03f, 1.006874163e-03f, 1.006106366e-03f,
+1.005336876e-03f, 1.004565694e-03f, 1.003792822e-03f, 1.003018261e-03f, 1.002242012e-03f, 1.001464078e-03f, 1.000684459e-03f, 9.999031570e-04f, 9.991201733e-04f, 9.983355094e-04f,
+9.975491668e-04f, 9.967611470e-04f, 9.959714513e-04f, 9.951800813e-04f, 9.943870385e-04f, 9.935923242e-04f, 9.927959400e-04f, 9.919978874e-04f, 9.911981678e-04f, 9.903967827e-04f,
+9.895937336e-04f, 9.887890220e-04f, 9.879826493e-04f, 9.871746171e-04f, 9.863649269e-04f, 9.855535802e-04f, 9.847405784e-04f, 9.839259231e-04f, 9.831096157e-04f, 9.822916579e-04f,
+9.814720510e-04f, 9.806507967e-04f, 9.798278964e-04f, 9.790033516e-04f, 9.781771639e-04f, 9.773493348e-04f, 9.765198658e-04f, 9.756887585e-04f, 9.748560144e-04f, 9.740216351e-04f,
+9.731856220e-04f, 9.723479767e-04f, 9.715087008e-04f, 9.706677958e-04f, 9.698252632e-04f, 9.689811047e-04f, 9.681353217e-04f, 9.672879159e-04f, 9.664388887e-04f, 9.655882418e-04f,
+9.647359768e-04f, 9.638820951e-04f, 9.630265984e-04f, 9.621694882e-04f, 9.613107662e-04f, 9.604504338e-04f, 9.595884927e-04f, 9.587249445e-04f, 9.578597908e-04f, 9.569930331e-04f,
+9.561246731e-04f, 9.552547122e-04f, 9.543831523e-04f, 9.535099947e-04f, 9.526352413e-04f, 9.517588934e-04f, 9.508809529e-04f, 9.500014212e-04f, 9.491203000e-04f, 9.482375909e-04f,
+9.473532955e-04f, 9.464674155e-04f, 9.455799525e-04f, 9.446909081e-04f, 9.438002839e-04f, 9.429080816e-04f, 9.420143028e-04f, 9.411189492e-04f, 9.402220223e-04f, 9.393235239e-04f,
+9.384234556e-04f, 9.375218190e-04f, 9.366186158e-04f, 9.357138476e-04f, 9.348075161e-04f, 9.338996230e-04f, 9.329901699e-04f, 9.320791585e-04f, 9.311665904e-04f, 9.302524674e-04f,
+9.293367910e-04f, 9.284195630e-04f, 9.275007851e-04f, 9.265804589e-04f, 9.256585862e-04f, 9.247351685e-04f, 9.238102076e-04f, 9.228837052e-04f, 9.219556630e-04f, 9.210260826e-04f,
+9.200949658e-04f, 9.191623143e-04f, 9.182281297e-04f, 9.172924139e-04f, 9.163551684e-04f, 9.154163950e-04f, 9.144760955e-04f, 9.135342714e-04f, 9.125909247e-04f, 9.116460569e-04f,
+9.106996697e-04f, 9.097517651e-04f, 9.088023445e-04f, 9.078514099e-04f, 9.068989629e-04f, 9.059450052e-04f, 9.049895386e-04f, 9.040325649e-04f, 9.030740857e-04f, 9.021141029e-04f,
+9.011526181e-04f, 9.001896332e-04f, 8.992251498e-04f, 8.982591698e-04f, 8.972916949e-04f, 8.963227269e-04f, 8.953522675e-04f, 8.943803184e-04f, 8.934068816e-04f, 8.924319587e-04f,
+8.914555514e-04f, 8.904776617e-04f, 8.894982912e-04f, 8.885174418e-04f, 8.875351152e-04f, 8.865513132e-04f, 8.855660376e-04f, 8.845792902e-04f, 8.835910728e-04f, 8.826013871e-04f,
+8.816102351e-04f, 8.806176184e-04f, 8.796235389e-04f, 8.786279985e-04f, 8.776309988e-04f, 8.766325417e-04f, 8.756326291e-04f, 8.746312627e-04f, 8.736284443e-04f, 8.726241758e-04f,
+8.716184591e-04f, 8.706112958e-04f, 8.696026879e-04f, 8.685926372e-04f, 8.675811455e-04f, 8.665682147e-04f, 8.655538465e-04f, 8.645380429e-04f, 8.635208056e-04f, 8.625021366e-04f,
+8.614820376e-04f, 8.604605105e-04f, 8.594375572e-04f, 8.584131795e-04f, 8.573873792e-04f, 8.563601583e-04f, 8.553315186e-04f, 8.543014619e-04f, 8.532699901e-04f, 8.522371051e-04f,
+8.512028088e-04f, 8.501671030e-04f, 8.491299896e-04f, 8.480914704e-04f, 8.470515475e-04f, 8.460102225e-04f, 8.449674975e-04f, 8.439233743e-04f, 8.428778548e-04f, 8.418309409e-04f,
+8.407826344e-04f, 8.397329373e-04f, 8.386818515e-04f, 8.376293789e-04f, 8.365755213e-04f, 8.355202808e-04f, 8.344636591e-04f, 8.334056582e-04f, 8.323462800e-04f, 8.312855264e-04f,
+8.302233994e-04f, 8.291599008e-04f, 8.280950326e-04f, 8.270287967e-04f, 8.259611950e-04f, 8.248922295e-04f, 8.238219020e-04f, 8.227502146e-04f, 8.216771691e-04f, 8.206027675e-04f,
+8.195270117e-04f, 8.184499036e-04f, 8.173714453e-04f, 8.162916386e-04f, 8.152104855e-04f, 8.141279879e-04f, 8.130441479e-04f, 8.119589673e-04f, 8.108724481e-04f, 8.097845922e-04f,
+8.086954017e-04f, 8.076048785e-04f, 8.065130245e-04f, 8.054198417e-04f, 8.043253321e-04f, 8.032294977e-04f, 8.021323404e-04f, 8.010338622e-04f, 7.999340651e-04f, 7.988329511e-04f,
+7.977305221e-04f, 7.966267802e-04f, 7.955217272e-04f, 7.944153653e-04f, 7.933076964e-04f, 7.921987225e-04f, 7.910884455e-04f, 7.899768675e-04f, 7.888639905e-04f, 7.877498165e-04f,
+7.866343475e-04f, 7.855175855e-04f, 7.843995325e-04f, 7.832801905e-04f, 7.821595615e-04f, 7.810376475e-04f, 7.799144506e-04f, 7.787899728e-04f, 7.776642161e-04f, 7.765371825e-04f,
+7.754088740e-04f, 7.742792927e-04f, 7.731484405e-04f, 7.720163196e-04f, 7.708829320e-04f, 7.697482796e-04f, 7.686123646e-04f, 7.674751890e-04f, 7.663367547e-04f, 7.651970640e-04f,
+7.640561187e-04f, 7.629139209e-04f, 7.617704728e-04f, 7.606257763e-04f, 7.594798335e-04f, 7.583326464e-04f, 7.571842172e-04f, 7.560345479e-04f, 7.548836404e-04f, 7.537314970e-04f,
+7.525781197e-04f, 7.514235104e-04f, 7.502676714e-04f, 7.491106046e-04f, 7.479523122e-04f, 7.467927962e-04f, 7.456320587e-04f, 7.444701018e-04f, 7.433069276e-04f, 7.421425381e-04f,
+7.409769354e-04f, 7.398101216e-04f, 7.386420988e-04f, 7.374728692e-04f, 7.363024347e-04f, 7.351307975e-04f, 7.339579597e-04f, 7.327839234e-04f, 7.316086906e-04f, 7.304322636e-04f,
+7.292546443e-04f, 7.280758350e-04f, 7.268958376e-04f, 7.257146544e-04f, 7.245322874e-04f, 7.233487387e-04f, 7.221640105e-04f, 7.209781049e-04f, 7.197910240e-04f, 7.186027699e-04f,
+7.174133448e-04f, 7.162227507e-04f, 7.150309898e-04f, 7.138380643e-04f, 7.126439762e-04f, 7.114487278e-04f, 7.102523210e-04f, 7.090547581e-04f, 7.078560413e-04f, 7.066561726e-04f,
+7.054551542e-04f, 7.042529882e-04f, 7.030496768e-04f, 7.018452222e-04f, 7.006396264e-04f, 6.994328917e-04f, 6.982250201e-04f, 6.970160139e-04f, 6.958058752e-04f, 6.945946062e-04f,
+6.933822090e-04f, 6.921686858e-04f, 6.909540388e-04f, 6.897382701e-04f, 6.885213818e-04f, 6.873033762e-04f, 6.860842555e-04f, 6.848640218e-04f, 6.836426772e-04f, 6.824202240e-04f,
+6.811966644e-04f, 6.799720004e-04f, 6.787462344e-04f, 6.775193685e-04f, 6.762914048e-04f, 6.750623457e-04f, 6.738321931e-04f, 6.726009494e-04f, 6.713686168e-04f, 6.701351974e-04f,
+6.689006934e-04f, 6.676651071e-04f, 6.664284405e-04f, 6.651906961e-04f, 6.639518758e-04f, 6.627119820e-04f, 6.614710169e-04f, 6.602289826e-04f, 6.589858814e-04f, 6.577417155e-04f,
+6.564964871e-04f, 6.552501984e-04f, 6.540028516e-04f, 6.527544490e-04f, 6.515049928e-04f, 6.502544852e-04f, 6.490029283e-04f, 6.477503246e-04f, 6.464966761e-04f, 6.452419851e-04f,
+6.439862539e-04f, 6.427294846e-04f, 6.414716795e-04f, 6.402128409e-04f, 6.389529710e-04f, 6.376920719e-04f, 6.364301461e-04f, 6.351671956e-04f, 6.339032228e-04f, 6.326382299e-04f,
+6.313722191e-04f, 6.301051927e-04f, 6.288371530e-04f, 6.275681021e-04f, 6.262980424e-04f, 6.250269761e-04f, 6.237549055e-04f, 6.224818328e-04f, 6.212077603e-04f, 6.199326902e-04f,
+6.186566248e-04f, 6.173795664e-04f, 6.161015172e-04f, 6.148224796e-04f, 6.135424557e-04f, 6.122614479e-04f, 6.109794584e-04f, 6.096964895e-04f, 6.084125435e-04f, 6.071276226e-04f,
+6.058417292e-04f, 6.045548655e-04f, 6.032670338e-04f, 6.019782364e-04f, 6.006884755e-04f, 5.993977535e-04f, 5.981060726e-04f, 5.968134352e-04f, 5.955198435e-04f, 5.942252998e-04f,
+5.929298064e-04f, 5.916333656e-04f, 5.903359798e-04f, 5.890376511e-04f, 5.877383819e-04f, 5.864381746e-04f, 5.851370314e-04f, 5.838349546e-04f, 5.825319465e-04f, 5.812280095e-04f,
+5.799231458e-04f, 5.786173577e-04f, 5.773106476e-04f, 5.760030178e-04f, 5.746944706e-04f, 5.733850083e-04f, 5.720746333e-04f, 5.707633478e-04f, 5.694511541e-04f, 5.681380547e-04f,
+5.668240518e-04f, 5.655091477e-04f, 5.641933448e-04f, 5.628766454e-04f, 5.615590519e-04f, 5.602405665e-04f, 5.589211916e-04f, 5.576009295e-04f, 5.562797826e-04f, 5.549577531e-04f,
+5.536348436e-04f, 5.523110562e-04f, 5.509863933e-04f, 5.496608573e-04f, 5.483344505e-04f, 5.470071752e-04f, 5.456790338e-04f, 5.443500287e-04f, 5.430201622e-04f, 5.416894366e-04f,
+5.403578543e-04f, 5.390254177e-04f, 5.376921291e-04f, 5.363579908e-04f, 5.350230052e-04f, 5.336871748e-04f, 5.323505017e-04f, 5.310129885e-04f, 5.296746374e-04f, 5.283354508e-04f,
+5.269954311e-04f, 5.256545807e-04f, 5.243129019e-04f, 5.229703971e-04f, 5.216270686e-04f, 5.202829189e-04f, 5.189379503e-04f, 5.175921651e-04f, 5.162455658e-04f, 5.148981548e-04f,
+5.135499343e-04f, 5.122009069e-04f, 5.108510748e-04f, 5.095004404e-04f, 5.081490062e-04f, 5.067967745e-04f, 5.054437477e-04f, 5.040899282e-04f, 5.027353184e-04f, 5.013799206e-04f,
+5.000237373e-04f, 4.986667708e-04f, 4.973090236e-04f, 4.959504980e-04f, 4.945911964e-04f, 4.932311213e-04f, 4.918702750e-04f, 4.905086599e-04f, 4.891462784e-04f, 4.877831330e-04f,
+4.864192259e-04f, 4.850545597e-04f, 4.836891367e-04f, 4.823229594e-04f, 4.809560301e-04f, 4.795883513e-04f, 4.782199253e-04f, 4.768507546e-04f, 4.754808415e-04f, 4.741101886e-04f,
+4.727387982e-04f, 4.713666727e-04f, 4.699938145e-04f, 4.686202261e-04f, 4.672459099e-04f, 4.658708682e-04f, 4.644951036e-04f, 4.631186184e-04f, 4.617414151e-04f, 4.603634961e-04f,
+4.589848637e-04f, 4.576055205e-04f, 4.562254689e-04f, 4.548447113e-04f, 4.534632500e-04f, 4.520810876e-04f, 4.506982265e-04f, 4.493146691e-04f, 4.479304179e-04f, 4.465454752e-04f,
+4.451598436e-04f, 4.437735254e-04f, 4.423865231e-04f, 4.409988391e-04f, 4.396104759e-04f, 4.382214359e-04f, 4.368317215e-04f, 4.354413352e-04f, 4.340502795e-04f, 4.326585568e-04f,
+4.312661694e-04f, 4.298731200e-04f, 4.284794109e-04f, 4.270850445e-04f, 4.256900234e-04f, 4.242943499e-04f, 4.228980266e-04f, 4.215010558e-04f, 4.201034401e-04f, 4.187051819e-04f,
+4.173062835e-04f, 4.159067476e-04f, 4.145065766e-04f, 4.131057728e-04f, 4.117043389e-04f, 4.103022771e-04f, 4.088995901e-04f, 4.074962802e-04f, 4.060923499e-04f, 4.046878017e-04f,
+4.032826381e-04f, 4.018768614e-04f, 4.004704743e-04f, 3.990634791e-04f, 3.976558783e-04f, 3.962476744e-04f, 3.948388699e-04f, 3.934294672e-04f, 3.920194688e-04f, 3.906088771e-04f,
+3.891976947e-04f, 3.877859241e-04f, 3.863735676e-04f, 3.849606278e-04f, 3.835471072e-04f, 3.821330082e-04f, 3.807183333e-04f, 3.793030850e-04f, 3.778872658e-04f, 3.764708781e-04f,
+3.750539244e-04f, 3.736364073e-04f, 3.722183292e-04f, 3.707996926e-04f, 3.693804999e-04f, 3.679607537e-04f, 3.665404564e-04f, 3.651196106e-04f, 3.636982187e-04f, 3.622762833e-04f,
+3.608538067e-04f, 3.594307915e-04f, 3.580072402e-04f, 3.565831553e-04f, 3.551585393e-04f, 3.537333947e-04f, 3.523077239e-04f, 3.508815294e-04f, 3.494548139e-04f, 3.480275797e-04f,
+3.465998293e-04f, 3.451715653e-04f, 3.437427902e-04f, 3.423135064e-04f, 3.408837164e-04f, 3.394534229e-04f, 3.380226281e-04f, 3.365913348e-04f, 3.351595453e-04f, 3.337272622e-04f,
+3.322944880e-04f, 3.308612251e-04f, 3.294274761e-04f, 3.279932436e-04f, 3.265585299e-04f, 3.251233377e-04f, 3.236876694e-04f, 3.222515275e-04f, 3.208149146e-04f, 3.193778331e-04f,
+3.179402856e-04f, 3.165022746e-04f, 3.150638026e-04f, 3.136248721e-04f, 3.121854856e-04f, 3.107456457e-04f, 3.093053548e-04f, 3.078646155e-04f, 3.064234303e-04f, 3.049818017e-04f,
+3.035397322e-04f, 3.020972244e-04f, 3.006542808e-04f, 2.992109038e-04f, 2.977670961e-04f, 2.963228601e-04f, 2.948781983e-04f, 2.934331134e-04f, 2.919876077e-04f, 2.905416838e-04f,
+2.890953443e-04f, 2.876485917e-04f, 2.862014285e-04f, 2.847538572e-04f, 2.833058804e-04f, 2.818575005e-04f, 2.804087202e-04f, 2.789595418e-04f, 2.775099681e-04f, 2.760600015e-04f,
+2.746096444e-04f, 2.731588996e-04f, 2.717077694e-04f, 2.702562565e-04f, 2.688043633e-04f, 2.673520923e-04f, 2.658994462e-04f, 2.644464275e-04f, 2.629930386e-04f, 2.615392822e-04f,
+2.600851607e-04f, 2.586306767e-04f, 2.571758328e-04f, 2.557206314e-04f, 2.542650751e-04f, 2.528091664e-04f, 2.513529079e-04f, 2.498963022e-04f, 2.484393517e-04f, 2.469820590e-04f,
+2.455244266e-04f, 2.440664571e-04f, 2.426081530e-04f, 2.411495168e-04f, 2.396905512e-04f, 2.382312586e-04f, 2.367716415e-04f, 2.353117026e-04f, 2.338514444e-04f, 2.323908694e-04f,
+2.309299801e-04f, 2.294687791e-04f, 2.280072690e-04f, 2.265454522e-04f, 2.250833314e-04f, 2.236209091e-04f, 2.221581878e-04f, 2.206951700e-04f, 2.192318584e-04f, 2.177682555e-04f,
+2.163043637e-04f, 2.148401858e-04f, 2.133757241e-04f, 2.119109813e-04f, 2.104459599e-04f, 2.089806624e-04f, 2.075150915e-04f, 2.060492496e-04f, 2.045831393e-04f, 2.031167632e-04f,
+2.016501238e-04f, 2.001832236e-04f, 1.987160653e-04f, 1.972486513e-04f, 1.957809842e-04f, 1.943130666e-04f, 1.928449010e-04f, 1.913764900e-04f, 1.899078361e-04f, 1.884389419e-04f,
+1.869698099e-04f, 1.855004428e-04f, 1.840308429e-04f, 1.825610129e-04f, 1.810909554e-04f, 1.796206729e-04f, 1.781501680e-04f, 1.766794432e-04f, 1.752085010e-04f, 1.737373441e-04f,
+1.722659749e-04f, 1.707943961e-04f, 1.693226102e-04f, 1.678506198e-04f, 1.663784273e-04f, 1.649060354e-04f, 1.634334467e-04f, 1.619606636e-04f, 1.604876887e-04f, 1.590145247e-04f,
+1.575411740e-04f, 1.560676392e-04f, 1.545939229e-04f, 1.531200277e-04f, 1.516459560e-04f, 1.501717104e-04f, 1.486972936e-04f, 1.472227080e-04f, 1.457479563e-04f, 1.442730409e-04f,
+1.427979645e-04f, 1.413227296e-04f, 1.398473387e-04f, 1.383717945e-04f, 1.368960994e-04f, 1.354202561e-04f, 1.339442671e-04f, 1.324681350e-04f, 1.309918623e-04f, 1.295154516e-04f,
+1.280389054e-04f, 1.265622263e-04f, 1.250854169e-04f, 1.236084797e-04f, 1.221314173e-04f, 1.206542322e-04f, 1.191769271e-04f, 1.176995044e-04f, 1.162219668e-04f, 1.147443167e-04f,
+1.132665568e-04f, 1.117886896e-04f, 1.103107177e-04f, 1.088326437e-04f, 1.073544700e-04f, 1.058761993e-04f, 1.043978341e-04f, 1.029193770e-04f, 1.014408306e-04f, 9.996219733e-05f,
+9.848347984e-05f, 9.700468069e-05f, 9.552580243e-05f, 9.404684761e-05f, 9.256781881e-05f, 9.108871859e-05f, 8.960954949e-05f, 8.813031410e-05f, 8.665101496e-05f, 8.517165464e-05f,
+8.369223570e-05f, 8.221276070e-05f, 8.073323220e-05f, 7.925365276e-05f, 7.777402494e-05f, 7.629435131e-05f, 7.481463443e-05f, 7.333487685e-05f, 7.185508113e-05f, 7.037524985e-05f,
+6.889538554e-05f, 6.741549079e-05f, 6.593556814e-05f, 6.445562016e-05f, 6.297564940e-05f, 6.149565844e-05f, 6.001564981e-05f, 5.853562610e-05f, 5.705558985e-05f, 5.557554362e-05f,
+5.409548998e-05f, 5.261543149e-05f, 5.113537069e-05f, 4.965531015e-05f, 4.817525244e-05f, 4.669520010e-05f, 4.521515570e-05f, 4.373512179e-05f, 4.225510093e-05f, 4.077509569e-05f,
+3.929510861e-05f, 3.781514225e-05f, 3.633519918e-05f, 3.485528195e-05f, 3.337539311e-05f, 3.189553523e-05f, 3.041571085e-05f, 2.893592254e-05f, 2.745617285e-05f, 2.597646434e-05f,
+2.449679956e-05f, 2.301718107e-05f, 2.153761142e-05f, 2.005809317e-05f, 1.857862887e-05f, 1.709922107e-05f, 1.561987234e-05f, 1.414058522e-05f, 1.266136227e-05f, 1.118220604e-05f,
+9.703119091e-06f, 8.224103965e-06f, 6.745163218e-06f, 5.266299403e-06f, 3.787515073e-06f, 2.308812778e-06f, 8.301950700e-07f, -6.483354998e-07f, -2.126776381e-06f, -3.605125023e-06f,
+-5.083378875e-06f, -6.561535388e-06f, -8.039592013e-06f, -9.517546200e-06f, -1.099539540e-05f, -1.247313706e-05f, -1.395076865e-05f, -1.542828760e-05f, -1.690569137e-05f, -1.838297741e-05f,
+-1.986014319e-05f, -2.133718614e-05f, -2.281410373e-05f, -2.429089341e-05f, -2.576755263e-05f, -2.724407885e-05f, -2.872046953e-05f, -3.019672212e-05f, -3.167283407e-05f, -3.314880284e-05f,
+-3.462462590e-05f, -3.610030070e-05f, -3.757582469e-05f, -3.905119533e-05f, -4.052641009e-05f, -4.200146641e-05f, -4.347636177e-05f, -4.495109362e-05f, -4.642565942e-05f, -4.790005664e-05f,
+-4.937428273e-05f, -5.084833515e-05f, -5.232221137e-05f, -5.379590885e-05f, -5.526942505e-05f, -5.674275744e-05f, -5.821590348e-05f, -5.968886064e-05f, -6.116162638e-05f, -6.263419816e-05f,
+-6.410657345e-05f, -6.557874972e-05f, -6.705072444e-05f, -6.852249507e-05f, -6.999405908e-05f, -7.146541394e-05f, -7.293655711e-05f, -7.440748608e-05f, -7.587819830e-05f, -7.734869125e-05f,
+-7.881896240e-05f, -8.028900921e-05f, -8.175882917e-05f, -8.322841975e-05f, -8.469777842e-05f, -8.616690264e-05f, -8.763578991e-05f, -8.910443768e-05f, -9.057284344e-05f, -9.204100467e-05f,
+-9.350891883e-05f, -9.497658341e-05f, -9.644399589e-05f, -9.791115374e-05f, -9.937805444e-05f, -1.008446955e-04f, -1.023110743e-04f, -1.037771884e-04f, -1.052430354e-04f, -1.067086125e-04f,
+-1.081739174e-04f, -1.096389476e-04f, -1.111037004e-04f, -1.125681734e-04f, -1.140323641e-04f, -1.154962699e-04f, -1.169598884e-04f, -1.184232171e-04f, -1.198862533e-04f, -1.213489947e-04f,
+-1.228114387e-04f, -1.242735827e-04f, -1.257354244e-04f, -1.271969611e-04f, -1.286581903e-04f, -1.301191096e-04f, -1.315797165e-04f, -1.330400084e-04f, -1.344999829e-04f, -1.359596373e-04f,
+-1.374189693e-04f, -1.388779763e-04f, -1.403366559e-04f, -1.417950054e-04f, -1.432530225e-04f, -1.447107046e-04f, -1.461680492e-04f, -1.476250538e-04f, -1.490817160e-04f, -1.505380331e-04f,
+-1.519940028e-04f, -1.534496225e-04f, -1.549048898e-04f, -1.563598021e-04f, -1.578143569e-04f, -1.592685518e-04f, -1.607223842e-04f, -1.621758517e-04f, -1.636289518e-04f, -1.650816820e-04f,
+-1.665340397e-04f, -1.679860226e-04f, -1.694376281e-04f, -1.708888537e-04f, -1.723396970e-04f, -1.737901554e-04f, -1.752402266e-04f, -1.766899079e-04f, -1.781391969e-04f, -1.795880911e-04f,
+-1.810365882e-04f, -1.824846854e-04f, -1.839323805e-04f, -1.853796709e-04f, -1.868265541e-04f, -1.882730276e-04f, -1.897190891e-04f, -1.911647359e-04f, -1.926099657e-04f, -1.940547759e-04f,
+-1.954991642e-04f, -1.969431279e-04f, -1.983866647e-04f, -1.998297720e-04f, -2.012724475e-04f, -2.027146886e-04f, -2.041564928e-04f, -2.055978578e-04f, -2.070387810e-04f, -2.084792600e-04f,
+-2.099192923e-04f, -2.113588754e-04f, -2.127980069e-04f, -2.142366843e-04f, -2.156749052e-04f, -2.171126671e-04f, -2.185499676e-04f, -2.199868041e-04f, -2.214231743e-04f, -2.228590756e-04f,
+-2.242945057e-04f, -2.257294621e-04f, -2.271639422e-04f, -2.285979437e-04f, -2.300314642e-04f, -2.314645011e-04f, -2.328970521e-04f, -2.343291146e-04f, -2.357606862e-04f, -2.371917645e-04f,
+-2.386223471e-04f, -2.400524314e-04f, -2.414820151e-04f, -2.429110957e-04f, -2.443396708e-04f, -2.457677379e-04f, -2.471952946e-04f, -2.486223384e-04f, -2.500488670e-04f, -2.514748778e-04f,
+-2.529003685e-04f, -2.543253366e-04f, -2.557497797e-04f, -2.571736954e-04f, -2.585970811e-04f, -2.600199346e-04f, -2.614422533e-04f, -2.628640349e-04f, -2.642852769e-04f, -2.657059768e-04f,
+-2.671261324e-04f, -2.685457411e-04f, -2.699648005e-04f, -2.713833082e-04f, -2.728012617e-04f, -2.742186588e-04f, -2.756354969e-04f, -2.770517736e-04f, -2.784674865e-04f, -2.798826333e-04f,
+-2.812972114e-04f, -2.827112185e-04f, -2.841246522e-04f, -2.855375100e-04f, -2.869497896e-04f, -2.883614885e-04f, -2.897726044e-04f, -2.911831348e-04f, -2.925930774e-04f, -2.940024296e-04f,
+-2.954111892e-04f, -2.968193538e-04f, -2.982269208e-04f, -2.996338880e-04f, -3.010402529e-04f, -3.024460132e-04f, -3.038511664e-04f, -3.052557102e-04f, -3.066596421e-04f, -3.080629598e-04f,
+-3.094656609e-04f, -3.108677430e-04f, -3.122692037e-04f, -3.136700406e-04f, -3.150702514e-04f, -3.164698336e-04f, -3.178687849e-04f, -3.192671028e-04f, -3.206647851e-04f, -3.220618294e-04f,
+-3.234582331e-04f, -3.248539941e-04f, -3.262491099e-04f, -3.276435781e-04f, -3.290373964e-04f, -3.304305624e-04f, -3.318230737e-04f, -3.332149279e-04f, -3.346061228e-04f, -3.359966559e-04f,
+-3.373865248e-04f, -3.387757272e-04f, -3.401642608e-04f, -3.415521231e-04f, -3.429393119e-04f, -3.443258247e-04f, -3.457116592e-04f, -3.470968131e-04f, -3.484812840e-04f, -3.498650695e-04f,
+-3.512481673e-04f, -3.526305750e-04f, -3.540122903e-04f, -3.553933109e-04f, -3.567736344e-04f, -3.581532584e-04f, -3.595321806e-04f, -3.609103987e-04f, -3.622879104e-04f, -3.636647132e-04f,
+-3.650408049e-04f, -3.664161831e-04f, -3.677908454e-04f, -3.691647897e-04f, -3.705380134e-04f, -3.719105143e-04f, -3.732822901e-04f, -3.746533384e-04f, -3.760236570e-04f, -3.773932434e-04f,
+-3.787620953e-04f, -3.801302105e-04f, -3.814975866e-04f, -3.828642212e-04f, -3.842301122e-04f, -3.855952571e-04f, -3.869596536e-04f, -3.883232995e-04f, -3.896861924e-04f, -3.910483300e-04f,
+-3.924097100e-04f, -3.937703301e-04f, -3.951301879e-04f, -3.964892812e-04f, -3.978476077e-04f, -3.992051651e-04f, -4.005619510e-04f, -4.019179632e-04f, -4.032731994e-04f, -4.046276572e-04f,
+-4.059813344e-04f, -4.073342287e-04f, -4.086863379e-04f, -4.100376595e-04f, -4.113881913e-04f, -4.127379310e-04f, -4.140868764e-04f, -4.154350252e-04f, -4.167823750e-04f, -4.181289236e-04f,
+-4.194746687e-04f, -4.208196081e-04f, -4.221637394e-04f, -4.235070605e-04f, -4.248495689e-04f, -4.261912624e-04f, -4.275321389e-04f, -4.288721959e-04f, -4.302114312e-04f, -4.315498427e-04f,
+-4.328874279e-04f, -4.342241846e-04f, -4.355601107e-04f, -4.368952037e-04f, -4.382294616e-04f, -4.395628819e-04f, -4.408954624e-04f, -4.422272010e-04f, -4.435580953e-04f, -4.448881431e-04f,
+-4.462173421e-04f, -4.475456902e-04f, -4.488731850e-04f, -4.501998243e-04f, -4.515256058e-04f, -4.528505274e-04f, -4.541745868e-04f, -4.554977817e-04f, -4.568201100e-04f, -4.581415693e-04f,
+-4.594621574e-04f, -4.607818722e-04f, -4.621007114e-04f, -4.634186727e-04f, -4.647357540e-04f, -4.660519530e-04f, -4.673672675e-04f, -4.686816952e-04f, -4.699952340e-04f, -4.713078816e-04f,
+-4.726196358e-04f, -4.739304945e-04f, -4.752404553e-04f, -4.765495161e-04f, -4.778576747e-04f, -4.791649288e-04f, -4.804712763e-04f, -4.817767149e-04f, -4.830812425e-04f, -4.843848569e-04f,
+-4.856875558e-04f, -4.869893370e-04f, -4.882901984e-04f, -4.895901378e-04f, -4.908891529e-04f, -4.921872417e-04f, -4.934844018e-04f, -4.947806311e-04f, -4.960759275e-04f, -4.973702887e-04f,
+-4.986637125e-04f, -4.999561968e-04f, -5.012477395e-04f, -5.025383382e-04f, -5.038279909e-04f, -5.051166954e-04f, -5.064044495e-04f, -5.076912510e-04f, -5.089770978e-04f, -5.102619877e-04f,
+-5.115459185e-04f, -5.128288881e-04f, -5.141108944e-04f, -5.153919351e-04f, -5.166720081e-04f, -5.179511112e-04f, -5.192292423e-04f, -5.205063993e-04f, -5.217825800e-04f, -5.230577822e-04f,
+-5.243320038e-04f, -5.256052427e-04f, -5.268774967e-04f, -5.281487636e-04f, -5.294190414e-04f, -5.306883280e-04f, -5.319566210e-04f, -5.332239185e-04f, -5.344902183e-04f, -5.357555183e-04f,
+-5.370198163e-04f, -5.382831102e-04f, -5.395453980e-04f, -5.408066774e-04f, -5.420669463e-04f, -5.433262027e-04f, -5.445844444e-04f, -5.458416693e-04f, -5.470978753e-04f, -5.483530603e-04f,
+-5.496072222e-04f, -5.508603588e-04f, -5.521124681e-04f, -5.533635479e-04f, -5.546135962e-04f, -5.558626109e-04f, -5.571105898e-04f, -5.583575309e-04f, -5.596034321e-04f, -5.608482912e-04f,
+-5.620921063e-04f, -5.633348751e-04f, -5.645765957e-04f, -5.658172659e-04f, -5.670568836e-04f, -5.682954468e-04f, -5.695329535e-04f, -5.707694014e-04f, -5.720047886e-04f, -5.732391130e-04f,
+-5.744723724e-04f, -5.757045649e-04f, -5.769356884e-04f, -5.781657408e-04f, -5.793947200e-04f, -5.806226240e-04f, -5.818494507e-04f, -5.830751981e-04f, -5.842998641e-04f, -5.855234467e-04f,
+-5.867459438e-04f, -5.879673534e-04f, -5.891876733e-04f, -5.904069017e-04f, -5.916250363e-04f, -5.928420753e-04f, -5.940580165e-04f, -5.952728580e-04f, -5.964865976e-04f, -5.976992334e-04f,
+-5.989107633e-04f, -6.001211852e-04f, -6.013304973e-04f, -6.025386974e-04f, -6.037457835e-04f, -6.049517536e-04f, -6.061566057e-04f, -6.073603378e-04f, -6.085629478e-04f, -6.097644338e-04f,
+-6.109647937e-04f, -6.121640255e-04f, -6.133621272e-04f, -6.145590969e-04f, -6.157549325e-04f, -6.169496320e-04f, -6.181431934e-04f, -6.193356147e-04f, -6.205268940e-04f, -6.217170292e-04f,
+-6.229060183e-04f, -6.240938594e-04f, -6.252805505e-04f, -6.264660896e-04f, -6.276504748e-04f, -6.288337039e-04f, -6.300157751e-04f, -6.311966864e-04f, -6.323764358e-04f, -6.335550214e-04f,
+-6.347324412e-04f, -6.359086931e-04f, -6.370837753e-04f, -6.382576859e-04f, -6.394304227e-04f, -6.406019839e-04f, -6.417723675e-04f, -6.429415716e-04f, -6.441095942e-04f, -6.452764334e-04f,
+-6.464420872e-04f, -6.476065537e-04f, -6.487698309e-04f, -6.499319169e-04f, -6.510928098e-04f, -6.522525076e-04f, -6.534110084e-04f, -6.545683102e-04f, -6.557244112e-04f, -6.568793094e-04f,
+-6.580330029e-04f, -6.591854897e-04f, -6.603367679e-04f, -6.614868357e-04f, -6.626356911e-04f, -6.637833322e-04f, -6.649297570e-04f, -6.660749638e-04f, -6.672189505e-04f, -6.683617152e-04f,
+-6.695032562e-04f, -6.706435713e-04f, -6.717826589e-04f, -6.729205169e-04f, -6.740571435e-04f, -6.751925367e-04f, -6.763266948e-04f, -6.774596157e-04f, -6.785912977e-04f, -6.797217388e-04f,
+-6.808509372e-04f, -6.819788910e-04f, -6.831055983e-04f, -6.842310572e-04f, -6.853552658e-04f, -6.864782224e-04f, -6.875999250e-04f, -6.887203718e-04f, -6.898395608e-04f, -6.909574904e-04f,
+-6.920741585e-04f, -6.931895633e-04f, -6.943037030e-04f, -6.954165758e-04f, -6.965281797e-04f, -6.976385130e-04f, -6.987475737e-04f, -6.998553602e-04f, -7.009618704e-04f, -7.020671026e-04f,
+-7.031710550e-04f, -7.042737256e-04f, -7.053751128e-04f, -7.064752146e-04f, -7.075740293e-04f, -7.086715549e-04f, -7.097677898e-04f, -7.108627320e-04f, -7.119563798e-04f, -7.130487313e-04f,
+-7.141397848e-04f, -7.152295383e-04f, -7.163179903e-04f, -7.174051387e-04f, -7.184909818e-04f, -7.195755179e-04f, -7.206587451e-04f, -7.217406616e-04f, -7.228212656e-04f, -7.239005554e-04f,
+-7.249785291e-04f, -7.260551850e-04f, -7.271305214e-04f, -7.282045363e-04f, -7.292772280e-04f, -7.303485949e-04f, -7.314186350e-04f, -7.324873466e-04f, -7.335547280e-04f, -7.346207773e-04f,
+-7.356854929e-04f, -7.367488730e-04f, -7.378109157e-04f, -7.388716194e-04f, -7.399309823e-04f, -7.409890026e-04f, -7.420456786e-04f, -7.431010086e-04f, -7.441549908e-04f, -7.452076235e-04f,
+-7.462589048e-04f, -7.473088332e-04f, -7.483574068e-04f, -7.494046240e-04f, -7.504504829e-04f, -7.514949819e-04f, -7.525381193e-04f, -7.535798932e-04f, -7.546203021e-04f, -7.556593442e-04f,
+-7.566970177e-04f, -7.577333210e-04f, -7.587682524e-04f, -7.598018101e-04f, -7.608339924e-04f, -7.618647977e-04f, -7.628942243e-04f, -7.639222703e-04f, -7.649489343e-04f, -7.659742143e-04f,
+-7.669981089e-04f, -7.680206162e-04f, -7.690417347e-04f, -7.700614625e-04f, -7.710797981e-04f, -7.720967397e-04f, -7.731122858e-04f, -7.741264345e-04f, -7.751391843e-04f, -7.761505334e-04f,
+-7.771604803e-04f, -7.781690233e-04f, -7.791761606e-04f, -7.801818906e-04f, -7.811862118e-04f, -7.821891224e-04f, -7.831906207e-04f, -7.841907052e-04f, -7.851893742e-04f, -7.861866260e-04f,
+-7.871824591e-04f, -7.881768717e-04f, -7.891698622e-04f, -7.901614291e-04f, -7.911515706e-04f, -7.921402852e-04f, -7.931275713e-04f, -7.941134271e-04f, -7.950978511e-04f, -7.960808418e-04f,
+-7.970623973e-04f, -7.980425163e-04f, -7.990211969e-04f, -7.999984377e-04f, -8.009742371e-04f, -8.019485934e-04f, -8.029215050e-04f, -8.038929704e-04f, -8.048629879e-04f, -8.058315560e-04f,
+-8.067986730e-04f, -8.077643374e-04f, -8.087285477e-04f, -8.096913021e-04f, -8.106525993e-04f, -8.116124375e-04f, -8.125708152e-04f, -8.135277308e-04f, -8.144831828e-04f, -8.154371696e-04f,
+-8.163896897e-04f, -8.173407414e-04f, -8.182903233e-04f, -8.192384337e-04f, -8.201850712e-04f, -8.211302341e-04f, -8.220739210e-04f, -8.230161303e-04f, -8.239568604e-04f, -8.248961098e-04f,
+-8.258338770e-04f, -8.267701605e-04f, -8.277049587e-04f, -8.286382700e-04f, -8.295700930e-04f, -8.305004262e-04f, -8.314292680e-04f, -8.323566169e-04f, -8.332824714e-04f, -8.342068300e-04f,
+-8.351296911e-04f, -8.360510534e-04f, -8.369709152e-04f, -8.378892750e-04f, -8.388061314e-04f, -8.397214830e-04f, -8.406353281e-04f, -8.415476652e-04f, -8.424584930e-04f, -8.433678100e-04f,
+-8.442756145e-04f, -8.451819053e-04f, -8.460866807e-04f, -8.469899393e-04f, -8.478916797e-04f, -8.487919004e-04f, -8.496905998e-04f, -8.505877766e-04f, -8.514834294e-04f, -8.523775565e-04f,
+-8.532701566e-04f, -8.541612283e-04f, -8.550507700e-04f, -8.559387804e-04f, -8.568252580e-04f, -8.577102013e-04f, -8.585936089e-04f, -8.594754795e-04f, -8.603558114e-04f, -8.612346034e-04f,
+-8.621118540e-04f, -8.629875617e-04f, -8.638617252e-04f, -8.647343430e-04f, -8.656054137e-04f, -8.664749359e-04f, -8.673429082e-04f, -8.682093292e-04f, -8.690741975e-04f, -8.699375116e-04f,
+-8.707992702e-04f, -8.716594719e-04f, -8.725181153e-04f, -8.733751990e-04f, -8.742307216e-04f, -8.750846817e-04f, -8.759370779e-04f, -8.767879089e-04f, -8.776371733e-04f, -8.784848697e-04f,
+-8.793309968e-04f, -8.801755531e-04f, -8.810185373e-04f, -8.818599481e-04f, -8.826997840e-04f, -8.835380438e-04f, -8.843747260e-04f, -8.852098294e-04f, -8.860433525e-04f, -8.868752940e-04f,
+-8.877056527e-04f, -8.885344270e-04f, -8.893616158e-04f, -8.901872176e-04f, -8.910112312e-04f, -8.918336552e-04f, -8.926544883e-04f, -8.934737291e-04f, -8.942913764e-04f, -8.951074287e-04f,
+-8.959218849e-04f, -8.967347436e-04f, -8.975460035e-04f, -8.983556632e-04f, -8.991637215e-04f, -8.999701771e-04f, -9.007750287e-04f, -9.015782749e-04f, -9.023799145e-04f, -9.031799463e-04f,
+-9.039783688e-04f, -9.047751809e-04f, -9.055703812e-04f, -9.063639685e-04f, -9.071559414e-04f, -9.079462989e-04f, -9.087350394e-04f, -9.095221619e-04f, -9.103076649e-04f, -9.110915474e-04f,
+-9.118738079e-04f, -9.126544453e-04f, -9.134334583e-04f, -9.142108457e-04f, -9.149866061e-04f, -9.157607384e-04f, -9.165332414e-04f, -9.173041137e-04f, -9.180733541e-04f, -9.188409615e-04f,
+-9.196069346e-04f, -9.203712721e-04f, -9.211339729e-04f, -9.218950357e-04f, -9.226544593e-04f, -9.234122424e-04f, -9.241683840e-04f, -9.249228827e-04f, -9.256757374e-04f, -9.264269468e-04f,
+-9.271765098e-04f, -9.279244252e-04f, -9.286706917e-04f, -9.294153083e-04f, -9.301582736e-04f, -9.308995865e-04f, -9.316392458e-04f, -9.323772504e-04f, -9.331135990e-04f, -9.338482906e-04f,
+-9.345813238e-04f, -9.353126976e-04f, -9.360424108e-04f, -9.367704623e-04f, -9.374968508e-04f, -9.382215752e-04f, -9.389446344e-04f, -9.396660272e-04f, -9.403857524e-04f, -9.411038090e-04f,
+-9.418201958e-04f, -9.425349116e-04f, -9.432479553e-04f, -9.439593258e-04f, -9.446690219e-04f, -9.453770426e-04f, -9.460833867e-04f, -9.467880530e-04f, -9.474910405e-04f, -9.481923480e-04f,
+-9.488919745e-04f, -9.495899188e-04f, -9.502861798e-04f, -9.509807564e-04f, -9.516736476e-04f, -9.523648521e-04f, -9.530543690e-04f, -9.537421972e-04f, -9.544283355e-04f, -9.551127828e-04f,
+-9.557955382e-04f, -9.564766004e-04f, -9.571559685e-04f, -9.578336413e-04f, -9.585096178e-04f, -9.591838969e-04f, -9.598564776e-04f, -9.605273588e-04f, -9.611965395e-04f, -9.618640185e-04f,
+-9.625297948e-04f, -9.631938675e-04f, -9.638562353e-04f, -9.645168974e-04f, -9.651758526e-04f, -9.658331000e-04f, -9.664886384e-04f, -9.671424669e-04f, -9.677945844e-04f, -9.684449899e-04f,
+-9.690936825e-04f, -9.697406609e-04f, -9.703859243e-04f, -9.710294717e-04f, -9.716713020e-04f, -9.723114142e-04f, -9.729498073e-04f, -9.735864804e-04f, -9.742214323e-04f, -9.748546622e-04f,
+-9.754861691e-04f, -9.761159518e-04f, -9.767440096e-04f, -9.773703413e-04f, -9.779949460e-04f, -9.786178227e-04f, -9.792389705e-04f, -9.798583884e-04f, -9.804760754e-04f, -9.810920306e-04f,
+-9.817062529e-04f, -9.823187415e-04f, -9.829294953e-04f, -9.835385135e-04f, -9.841457951e-04f, -9.847513391e-04f, -9.853551446e-04f, -9.859572106e-04f, -9.865575363e-04f, -9.871561206e-04f,
+-9.877529627e-04f, -9.883480616e-04f, -9.889414165e-04f, -9.895330263e-04f, -9.901228902e-04f, -9.907110072e-04f, -9.912973764e-04f, -9.918819970e-04f, -9.924648680e-04f, -9.930459886e-04f,
+-9.936253577e-04f, -9.942029746e-04f, -9.947788383e-04f, -9.953529480e-04f, -9.959253027e-04f, -9.964959016e-04f, -9.970647437e-04f, -9.976318283e-04f, -9.981971544e-04f, -9.987607212e-04f,
+-9.993225278e-04f, -9.998825733e-04f, -1.000440857e-03f, -1.000997378e-03f, -1.001552135e-03f, -1.002105128e-03f, -1.002656355e-03f, -1.003205816e-03f, -1.003753510e-03f, -1.004299436e-03f,
+-1.004843594e-03f, -1.005385982e-03f, -1.005926599e-03f, -1.006465446e-03f, -1.007002520e-03f, -1.007537821e-03f, -1.008071349e-03f, -1.008603103e-03f, -1.009133081e-03f, -1.009661282e-03f,
+-1.010187707e-03f, -1.010712355e-03f, -1.011235223e-03f, -1.011756313e-03f, -1.012275622e-03f, -1.012793150e-03f, -1.013308897e-03f, -1.013822861e-03f, -1.014335042e-03f, -1.014845439e-03f,
+-1.015354051e-03f, -1.015860878e-03f, -1.016365918e-03f, -1.016869171e-03f, -1.017370636e-03f, -1.017870313e-03f, -1.018368200e-03f, -1.018864297e-03f, -1.019358603e-03f, -1.019851118e-03f,
+-1.020341840e-03f, -1.020830769e-03f, -1.021317904e-03f, -1.021803245e-03f, -1.022286790e-03f, -1.022768539e-03f, -1.023248491e-03f, -1.023726646e-03f, -1.024203003e-03f, -1.024677560e-03f,
+-1.025150318e-03f, -1.025621276e-03f, -1.026090433e-03f, -1.026557788e-03f, -1.027023340e-03f, -1.027487089e-03f, -1.027949035e-03f, -1.028409175e-03f, -1.028867511e-03f, -1.029324041e-03f,
+-1.029778764e-03f, -1.030231679e-03f, -1.030682787e-03f, -1.031132086e-03f, -1.031579576e-03f, -1.032025256e-03f, -1.032469126e-03f, -1.032911184e-03f, -1.033351430e-03f, -1.033789864e-03f,
+-1.034226484e-03f, -1.034661290e-03f, -1.035094282e-03f, -1.035525459e-03f, -1.035954820e-03f, -1.036382365e-03f, -1.036808092e-03f, -1.037232002e-03f, -1.037654094e-03f, -1.038074366e-03f,
+-1.038492819e-03f, -1.038909452e-03f, -1.039324264e-03f, -1.039737255e-03f, -1.040148424e-03f, -1.040557770e-03f, -1.040965293e-03f, -1.041370993e-03f, -1.041774868e-03f, -1.042176917e-03f,
+-1.042577142e-03f, -1.042975540e-03f, -1.043372112e-03f, -1.043766856e-03f, -1.044159773e-03f, -1.044550861e-03f, -1.044940120e-03f, -1.045327549e-03f, -1.045713149e-03f, -1.046096917e-03f,
+-1.046478855e-03f, -1.046858961e-03f, -1.047237234e-03f, -1.047613675e-03f, -1.047988282e-03f, -1.048361055e-03f, -1.048731994e-03f, -1.049101098e-03f, -1.049468366e-03f, -1.049833799e-03f,
+-1.050197394e-03f, -1.050559153e-03f, -1.050919074e-03f, -1.051277157e-03f, -1.051633401e-03f, -1.051987806e-03f, -1.052340371e-03f, -1.052691097e-03f, -1.053039982e-03f, -1.053387025e-03f,
+-1.053732227e-03f, -1.054075587e-03f, -1.054417104e-03f, -1.054756779e-03f, -1.055094609e-03f, -1.055430596e-03f, -1.055764738e-03f, -1.056097036e-03f, -1.056427488e-03f, -1.056756094e-03f,
+-1.057082854e-03f, -1.057407766e-03f, -1.057730832e-03f, -1.058052050e-03f, -1.058371420e-03f, -1.058688942e-03f, -1.059004614e-03f, -1.059318437e-03f, -1.059630410e-03f, -1.059940533e-03f,
+-1.060248805e-03f, -1.060555226e-03f, -1.060859795e-03f, -1.061162513e-03f, -1.061463378e-03f, -1.061762390e-03f, -1.062059549e-03f, -1.062354855e-03f, -1.062648306e-03f, -1.062939903e-03f,
+-1.063229646e-03f, -1.063517533e-03f, -1.063803564e-03f, -1.064087740e-03f, -1.064370059e-03f, -1.064650522e-03f, -1.064929128e-03f, -1.065205876e-03f, -1.065480766e-03f, -1.065753798e-03f,
+-1.066024972e-03f, -1.066294286e-03f, -1.066561742e-03f, -1.066827338e-03f, -1.067091074e-03f, -1.067352949e-03f, -1.067612964e-03f, -1.067871119e-03f, -1.068127411e-03f, -1.068381842e-03f,
+-1.068634412e-03f, -1.068885119e-03f, -1.069133963e-03f, -1.069380944e-03f, -1.069626063e-03f, -1.069869317e-03f, -1.070110708e-03f, -1.070350235e-03f, -1.070587897e-03f, -1.070823694e-03f,
+-1.071057626e-03f, -1.071289693e-03f, -1.071519895e-03f, -1.071748230e-03f, -1.071974700e-03f, -1.072199302e-03f, -1.072422038e-03f, -1.072642907e-03f, -1.072861909e-03f, -1.073079043e-03f,
+-1.073294309e-03f, -1.073507708e-03f, -1.073719238e-03f, -1.073928899e-03f, -1.074136691e-03f, -1.074342615e-03f, -1.074546668e-03f, -1.074748853e-03f, -1.074949167e-03f, -1.075147612e-03f,
+-1.075344186e-03f, -1.075538890e-03f, -1.075731723e-03f, -1.075922685e-03f, -1.076111776e-03f, -1.076298996e-03f, -1.076484344e-03f, -1.076667820e-03f, -1.076849424e-03f, -1.077029156e-03f,
+-1.077207015e-03f, -1.077383002e-03f, -1.077557116e-03f, -1.077729357e-03f, -1.077899725e-03f, -1.078068220e-03f, -1.078234841e-03f, -1.078399588e-03f, -1.078562462e-03f, -1.078723462e-03f,
+-1.078882587e-03f, -1.079039838e-03f, -1.079195214e-03f, -1.079348716e-03f, -1.079500343e-03f, -1.079650095e-03f, -1.079797971e-03f, -1.079943973e-03f, -1.080088099e-03f, -1.080230349e-03f,
+-1.080370724e-03f, -1.080509223e-03f, -1.080645846e-03f, -1.080780593e-03f, -1.080913464e-03f, -1.081044459e-03f, -1.081173577e-03f, -1.081300819e-03f, -1.081426184e-03f, -1.081549672e-03f,
+-1.081671283e-03f, -1.081791018e-03f, -1.081908875e-03f, -1.082024856e-03f, -1.082138959e-03f, -1.082251185e-03f, -1.082361533e-03f, -1.082470004e-03f, -1.082576598e-03f, -1.082681314e-03f,
+-1.082784152e-03f, -1.082885113e-03f, -1.082984195e-03f, -1.083081400e-03f, -1.083176727e-03f, -1.083270177e-03f, -1.083361748e-03f, -1.083451441e-03f, -1.083539256e-03f, -1.083625193e-03f,
+-1.083709251e-03f, -1.083791432e-03f, -1.083871734e-03f, -1.083950158e-03f, -1.084026704e-03f, -1.084101371e-03f, -1.084174161e-03f, -1.084245071e-03f, -1.084314104e-03f, -1.084381258e-03f,
+-1.084446534e-03f, -1.084509932e-03f, -1.084571451e-03f, -1.084631092e-03f, -1.084688854e-03f, -1.084744739e-03f, -1.084798744e-03f, -1.084850872e-03f, -1.084901122e-03f, -1.084949493e-03f,
+-1.084995986e-03f, -1.085040601e-03f, -1.085083338e-03f, -1.085124197e-03f, -1.085163177e-03f, -1.085200280e-03f, -1.085235505e-03f, -1.085268852e-03f, -1.085300321e-03f, -1.085329912e-03f,
+-1.085357625e-03f, -1.085383461e-03f, -1.085407420e-03f, -1.085429501e-03f, -1.085449704e-03f, -1.085468030e-03f, -1.085484479e-03f, -1.085499050e-03f, -1.085511745e-03f, -1.085522562e-03f,
+-1.085531503e-03f, -1.085538567e-03f, -1.085543754e-03f, -1.085547064e-03f, -1.085548498e-03f, -1.085548056e-03f, -1.085545737e-03f, -1.085541542e-03f, -1.085535471e-03f, -1.085527524e-03f,
+-1.085517702e-03f, -1.085506003e-03f, -1.085492429e-03f, -1.085476980e-03f, -1.085459656e-03f, -1.085440456e-03f, -1.085419381e-03f, -1.085396432e-03f, -1.085371608e-03f, -1.085344909e-03f,
+-1.085316337e-03f, -1.085285890e-03f, -1.085253568e-03f, -1.085219373e-03f, -1.085183305e-03f, -1.085145363e-03f, -1.085105547e-03f, -1.085063859e-03f, -1.085020297e-03f, -1.084974863e-03f,
+-1.084927556e-03f, -1.084878377e-03f, -1.084827325e-03f, -1.084774402e-03f, -1.084719607e-03f, -1.084662940e-03f, -1.084604402e-03f, -1.084543992e-03f, -1.084481712e-03f, -1.084417561e-03f,
+-1.084351540e-03f, -1.084283648e-03f, -1.084213886e-03f, -1.084142255e-03f, -1.084068754e-03f, -1.083993383e-03f, -1.083916144e-03f, -1.083837035e-03f, -1.083756059e-03f, -1.083673213e-03f,
+-1.083588500e-03f, -1.083501919e-03f, -1.083413470e-03f, -1.083323154e-03f, -1.083230971e-03f, -1.083136922e-03f, -1.083041005e-03f, -1.082943223e-03f, -1.082843575e-03f, -1.082742061e-03f,
+-1.082638682e-03f, -1.082533437e-03f, -1.082426328e-03f, -1.082317355e-03f, -1.082206517e-03f, -1.082093816e-03f, -1.081979251e-03f, -1.081862822e-03f, -1.081744531e-03f, -1.081624377e-03f,
+-1.081502361e-03f, -1.081378483e-03f, -1.081252744e-03f, -1.081125143e-03f, -1.080995681e-03f, -1.080864358e-03f, -1.080731175e-03f, -1.080596132e-03f, -1.080459230e-03f, -1.080320468e-03f,
+-1.080179847e-03f, -1.080037368e-03f, -1.079893031e-03f, -1.079746836e-03f, -1.079598783e-03f, -1.079448873e-03f, -1.079297107e-03f, -1.079143484e-03f, -1.078988005e-03f, -1.078830671e-03f,
+-1.078671481e-03f, -1.078510437e-03f, -1.078347538e-03f, -1.078182785e-03f, -1.078016178e-03f, -1.077847718e-03f, -1.077677406e-03f, -1.077505241e-03f, -1.077331224e-03f, -1.077155355e-03f,
+-1.076977635e-03f, -1.076798064e-03f, -1.076616643e-03f, -1.076433372e-03f, -1.076248252e-03f, -1.076061282e-03f, -1.075872464e-03f, -1.075681797e-03f, -1.075489283e-03f, -1.075294922e-03f,
+-1.075098713e-03f, -1.074900658e-03f, -1.074700758e-03f, -1.074499011e-03f, -1.074295420e-03f, -1.074089984e-03f, -1.073882704e-03f, -1.073673581e-03f, -1.073462614e-03f, -1.073249804e-03f,
+-1.073035152e-03f, -1.072818659e-03f, -1.072600324e-03f, -1.072380149e-03f, -1.072158133e-03f, -1.071934277e-03f, -1.071708583e-03f, -1.071481049e-03f, -1.071251677e-03f, -1.071020467e-03f,
+-1.070787420e-03f, -1.070552537e-03f, -1.070315817e-03f, -1.070077261e-03f, -1.069836871e-03f, -1.069594645e-03f, -1.069350585e-03f, -1.069104692e-03f, -1.068856966e-03f, -1.068607407e-03f,
+-1.068356017e-03f, -1.068102794e-03f, -1.067847741e-03f, -1.067590858e-03f, -1.067332145e-03f, -1.067071602e-03f, -1.066809231e-03f, -1.066545032e-03f, -1.066279006e-03f, -1.066011152e-03f,
+-1.065741472e-03f, -1.065469966e-03f, -1.065196635e-03f, -1.064921479e-03f, -1.064644500e-03f, -1.064365696e-03f, -1.064085070e-03f, -1.063802622e-03f, -1.063518352e-03f, -1.063232260e-03f,
+-1.062944349e-03f, -1.062654617e-03f, -1.062363066e-03f, -1.062069697e-03f, -1.061774509e-03f, -1.061477504e-03f, -1.061178682e-03f, -1.060878045e-03f, -1.060575591e-03f, -1.060271323e-03f,
+-1.059965240e-03f, -1.059657344e-03f, -1.059347635e-03f, -1.059036113e-03f, -1.058722780e-03f, -1.058407635e-03f, -1.058090681e-03f, -1.057771916e-03f, -1.057451343e-03f, -1.057128961e-03f,
+-1.056804771e-03f, -1.056478774e-03f, -1.056150971e-03f, -1.055821362e-03f, -1.055489948e-03f, -1.055156730e-03f, -1.054821708e-03f, -1.054484883e-03f, -1.054146256e-03f, -1.053805827e-03f,
+-1.053463597e-03f, -1.053119567e-03f, -1.052773737e-03f, -1.052426109e-03f, -1.052076683e-03f, -1.051725459e-03f, -1.051372438e-03f, -1.051017622e-03f, -1.050661010e-03f, -1.050302604e-03f,
+-1.049942404e-03f, -1.049580411e-03f, -1.049216626e-03f, -1.048851049e-03f, -1.048483681e-03f, -1.048114523e-03f, -1.047743576e-03f, -1.047370841e-03f, -1.046996317e-03f, -1.046620007e-03f,
+-1.046241910e-03f, -1.045862027e-03f, -1.045480360e-03f, -1.045096908e-03f, -1.044711674e-03f, -1.044324657e-03f, -1.043935858e-03f, -1.043545278e-03f, -1.043152918e-03f, -1.042758779e-03f,
+-1.042362861e-03f, -1.041965166e-03f, -1.041565693e-03f, -1.041164444e-03f, -1.040761420e-03f, -1.040356621e-03f, -1.039950049e-03f, -1.039541703e-03f, -1.039131585e-03f, -1.038719696e-03f,
+-1.038306037e-03f, -1.037890608e-03f, -1.037473409e-03f, -1.037054443e-03f, -1.036633710e-03f, -1.036211210e-03f, -1.035786945e-03f, -1.035360915e-03f, -1.034933121e-03f, -1.034503564e-03f,
+-1.034072245e-03f, -1.033639164e-03f, -1.033204324e-03f, -1.032767723e-03f, -1.032329364e-03f, -1.031889247e-03f, -1.031447373e-03f, -1.031003742e-03f, -1.030558357e-03f, -1.030111217e-03f,
+-1.029662324e-03f, -1.029211678e-03f, -1.028759280e-03f, -1.028305131e-03f, -1.027849233e-03f, -1.027391585e-03f, -1.026932189e-03f, -1.026471046e-03f, -1.026008156e-03f, -1.025543521e-03f,
+-1.025077142e-03f, -1.024609018e-03f, -1.024139153e-03f, -1.023667545e-03f, -1.023194196e-03f, -1.022719107e-03f, -1.022242280e-03f, -1.021763714e-03f, -1.021283411e-03f, -1.020801372e-03f,
+-1.020317597e-03f, -1.019832088e-03f, -1.019344846e-03f, -1.018855871e-03f, -1.018365164e-03f, -1.017872727e-03f, -1.017378561e-03f, -1.016882666e-03f, -1.016385043e-03f, -1.015885693e-03f,
+-1.015384617e-03f, -1.014881817e-03f, -1.014377293e-03f, -1.013871046e-03f, -1.013363077e-03f, -1.012853387e-03f, -1.012341978e-03f, -1.011828849e-03f, -1.011314003e-03f, -1.010797439e-03f,
+-1.010279160e-03f, -1.009759166e-03f, -1.009237457e-03f, -1.008714036e-03f, -1.008188903e-03f, -1.007662059e-03f, -1.007133505e-03f, -1.006603242e-03f, -1.006071272e-03f, -1.005537594e-03f,
+-1.005002211e-03f, -1.004465123e-03f, -1.003926331e-03f, -1.003385837e-03f, -1.002843640e-03f, -1.002299743e-03f, -1.001754147e-03f, -1.001206852e-03f, -1.000657859e-03f, -1.000107170e-03f,
+-9.995547861e-04f, -9.990007074e-04f, -9.984449354e-04f, -9.978874712e-04f, -9.973283158e-04f, -9.967674703e-04f, -9.962049359e-04f, -9.956407135e-04f, -9.950748042e-04f, -9.945072092e-04f,
+-9.939379294e-04f, -9.933669661e-04f, -9.927943202e-04f, -9.922199929e-04f, -9.916439853e-04f, -9.910662984e-04f, -9.904869334e-04f, -9.899058913e-04f, -9.893231733e-04f, -9.887387805e-04f,
+-9.881527140e-04f, -9.875649749e-04f, -9.869755643e-04f, -9.863844833e-04f, -9.857917331e-04f, -9.851973148e-04f, -9.846012295e-04f, -9.840034783e-04f, -9.834040625e-04f, -9.828029830e-04f,
+-9.822002411e-04f, -9.815958379e-04f, -9.809897746e-04f, -9.803820522e-04f, -9.797726720e-04f, -9.791616351e-04f, -9.785489426e-04f, -9.779345958e-04f, -9.773185957e-04f, -9.767009436e-04f,
+-9.760816405e-04f, -9.754606878e-04f, -9.748380865e-04f, -9.742138378e-04f, -9.735879429e-04f, -9.729604030e-04f, -9.723312193e-04f, -9.717003929e-04f, -9.710679251e-04f, -9.704338170e-04f,
+-9.697980699e-04f, -9.691606848e-04f, -9.685216632e-04f, -9.678810060e-04f, -9.672387146e-04f, -9.665947901e-04f, -9.659492338e-04f, -9.653020469e-04f, -9.646532306e-04f, -9.640027861e-04f,
+-9.633507146e-04f, -9.626970174e-04f, -9.620416957e-04f, -9.613847507e-04f, -9.607261837e-04f, -9.600659958e-04f, -9.594041884e-04f, -9.587407626e-04f, -9.580757198e-04f, -9.574090611e-04f,
+-9.567407879e-04f, -9.560709013e-04f, -9.553994027e-04f, -9.547262932e-04f, -9.540515741e-04f, -9.533752468e-04f, -9.526973124e-04f, -9.520177723e-04f, -9.513366277e-04f, -9.506538799e-04f,
+-9.499695301e-04f, -9.492835797e-04f, -9.485960299e-04f, -9.479068821e-04f, -9.472161374e-04f, -9.465237972e-04f, -9.458298628e-04f, -9.451343355e-04f, -9.444372165e-04f, -9.437385073e-04f,
+-9.430382090e-04f, -9.423363230e-04f, -9.416328506e-04f, -9.409277931e-04f, -9.402211518e-04f, -9.395129281e-04f, -9.388031232e-04f, -9.380917386e-04f, -9.373787754e-04f, -9.366642351e-04f,
+-9.359481189e-04f, -9.352304282e-04f, -9.345111644e-04f, -9.337903287e-04f, -9.330679226e-04f, -9.323439473e-04f, -9.316184043e-04f, -9.308912947e-04f, -9.301626201e-04f, -9.294323818e-04f,
+-9.287005810e-04f, -9.279672193e-04f, -9.272322979e-04f, -9.264958182e-04f, -9.257577815e-04f, -9.250181893e-04f, -9.242770429e-04f, -9.235343437e-04f, -9.227900931e-04f, -9.220442924e-04f,
+-9.212969430e-04f, -9.205480464e-04f, -9.197976038e-04f, -9.190456168e-04f, -9.182920866e-04f, -9.175370147e-04f, -9.167804025e-04f, -9.160222514e-04f, -9.152625628e-04f, -9.145013380e-04f,
+-9.137385786e-04f, -9.129742859e-04f, -9.122084613e-04f, -9.114411062e-04f, -9.106722221e-04f, -9.099018104e-04f, -9.091298725e-04f, -9.083564098e-04f, -9.075814238e-04f, -9.068049158e-04f,
+-9.060268874e-04f, -9.052473400e-04f, -9.044662750e-04f, -9.036836938e-04f, -9.028995979e-04f, -9.021139887e-04f, -9.013268678e-04f, -9.005382364e-04f, -8.997480962e-04f, -8.989564485e-04f,
+-8.981632948e-04f, -8.973686366e-04f, -8.965724754e-04f, -8.957748125e-04f, -8.949756495e-04f, -8.941749879e-04f, -8.933728290e-04f, -8.925691745e-04f, -8.917640258e-04f, -8.909573843e-04f,
+-8.901492515e-04f, -8.893396290e-04f, -8.885285182e-04f, -8.877159207e-04f, -8.869018378e-04f, -8.860862711e-04f, -8.852692222e-04f, -8.844506924e-04f, -8.836306834e-04f, -8.828091965e-04f,
+-8.819862334e-04f, -8.811617956e-04f, -8.803358844e-04f, -8.795085016e-04f, -8.786796485e-04f, -8.778493268e-04f, -8.770175379e-04f, -8.761842833e-04f, -8.753495647e-04f, -8.745133835e-04f,
+-8.736757412e-04f, -8.728366394e-04f, -8.719960796e-04f, -8.711540634e-04f, -8.703105924e-04f, -8.694656680e-04f, -8.686192918e-04f, -8.677714653e-04f, -8.669221902e-04f, -8.660714679e-04f,
+-8.652193001e-04f, -8.643656883e-04f, -8.635106340e-04f, -8.626541388e-04f, -8.617962043e-04f, -8.609368321e-04f, -8.600760237e-04f, -8.592137807e-04f, -8.583501046e-04f, -8.574849972e-04f,
+-8.566184598e-04f, -8.557504942e-04f, -8.548811019e-04f, -8.540102845e-04f, -8.531380436e-04f, -8.522643808e-04f, -8.513892977e-04f, -8.505127958e-04f, -8.496348769e-04f, -8.487555424e-04f,
+-8.478747940e-04f, -8.469926333e-04f, -8.461090619e-04f, -8.452240814e-04f, -8.443376935e-04f, -8.434498997e-04f, -8.425607017e-04f, -8.416701011e-04f, -8.407780995e-04f, -8.398846986e-04f,
+-8.389898999e-04f, -8.380937051e-04f, -8.371961159e-04f, -8.362971339e-04f, -8.353967607e-04f, -8.344949979e-04f, -8.335918472e-04f, -8.326873103e-04f, -8.317813888e-04f, -8.308740843e-04f,
+-8.299653985e-04f, -8.290553330e-04f, -8.281438895e-04f, -8.272310698e-04f, -8.263168753e-04f, -8.254013078e-04f, -8.244843690e-04f, -8.235660605e-04f, -8.226463840e-04f, -8.217253411e-04f,
+-8.208029336e-04f, -8.198791631e-04f, -8.189540313e-04f, -8.180275399e-04f, -8.170996905e-04f, -8.161704849e-04f, -8.152399247e-04f, -8.143080116e-04f, -8.133747474e-04f, -8.124401337e-04f,
+-8.115041721e-04f, -8.105668645e-04f, -8.096282125e-04f, -8.086882178e-04f, -8.077468822e-04f, -8.068042072e-04f, -8.058601948e-04f, -8.049148464e-04f, -8.039681639e-04f, -8.030201491e-04f,
+-8.020708035e-04f, -8.011201289e-04f, -8.001681271e-04f, -7.992147998e-04f, -7.982601487e-04f, -7.973041755e-04f, -7.963468819e-04f, -7.953882698e-04f, -7.944283408e-04f, -7.934670967e-04f,
+-7.925045392e-04f, -7.915406701e-04f, -7.905754911e-04f, -7.896090039e-04f, -7.886412104e-04f, -7.876721122e-04f, -7.867017111e-04f, -7.857300088e-04f, -7.847570072e-04f, -7.837827080e-04f,
+-7.828071130e-04f, -7.818302238e-04f, -7.808520424e-04f, -7.798725703e-04f, -7.788918096e-04f, -7.779097618e-04f, -7.769264287e-04f, -7.759418122e-04f, -7.749559141e-04f, -7.739687360e-04f,
+-7.729802799e-04f, -7.719905474e-04f, -7.709995404e-04f, -7.700072607e-04f, -7.690137100e-04f, -7.680188901e-04f, -7.670228029e-04f, -7.660254502e-04f, -7.650268336e-04f, -7.640269551e-04f,
+-7.630258165e-04f, -7.620234195e-04f, -7.610197660e-04f, -7.600148577e-04f, -7.590086966e-04f, -7.580012843e-04f, -7.569926228e-04f, -7.559827138e-04f, -7.549715592e-04f, -7.539591607e-04f,
+-7.529455203e-04f, -7.519306397e-04f, -7.509145207e-04f, -7.498971653e-04f, -7.488785752e-04f, -7.478587522e-04f, -7.468376983e-04f, -7.458154152e-04f, -7.447919047e-04f, -7.437671689e-04f,
+-7.427412093e-04f, -7.417140281e-04f, -7.406856268e-04f, -7.396560075e-04f, -7.386251720e-04f, -7.375931221e-04f, -7.365598597e-04f, -7.355253867e-04f, -7.344897048e-04f, -7.334528161e-04f,
+-7.324147222e-04f, -7.313754252e-04f, -7.303349269e-04f, -7.292932291e-04f, -7.282503337e-04f, -7.272062426e-04f, -7.261609577e-04f, -7.251144809e-04f, -7.240668139e-04f, -7.230179588e-04f,
+-7.219679174e-04f, -7.209166916e-04f, -7.198642833e-04f, -7.188106943e-04f, -7.177559266e-04f, -7.166999821e-04f, -7.156428626e-04f, -7.145845700e-04f, -7.135251063e-04f, -7.124644734e-04f,
+-7.114026731e-04f, -7.103397074e-04f, -7.092755782e-04f, -7.082102873e-04f, -7.071438367e-04f, -7.060762284e-04f, -7.050074641e-04f, -7.039375459e-04f, -7.028664757e-04f, -7.017942554e-04f,
+-7.007208868e-04f, -6.996463720e-04f, -6.985707128e-04f, -6.974939113e-04f, -6.964159692e-04f, -6.953368886e-04f, -6.942566713e-04f, -6.931753194e-04f, -6.920928348e-04f, -6.910092193e-04f,
+-6.899244750e-04f, -6.888386038e-04f, -6.877516076e-04f, -6.866634883e-04f, -6.855742480e-04f, -6.844838886e-04f, -6.833924119e-04f, -6.822998201e-04f, -6.812061150e-04f, -6.801112986e-04f,
+-6.790153729e-04f, -6.779183397e-04f, -6.768202012e-04f, -6.757209592e-04f, -6.746206157e-04f, -6.735191727e-04f, -6.724166321e-04f, -6.713129960e-04f, -6.702082663e-04f, -6.691024449e-04f,
+-6.679955339e-04f, -6.668875352e-04f, -6.657784508e-04f, -6.646682828e-04f, -6.635570330e-04f, -6.624447035e-04f, -6.613312962e-04f, -6.602168132e-04f, -6.591012564e-04f, -6.579846278e-04f,
+-6.568669295e-04f, -6.557481634e-04f, -6.546283315e-04f, -6.535074358e-04f, -6.523854784e-04f, -6.512624612e-04f, -6.501383862e-04f, -6.490132554e-04f, -6.478870709e-04f, -6.467598347e-04f,
+-6.456315487e-04f, -6.445022151e-04f, -6.433718357e-04f, -6.422404126e-04f, -6.411079479e-04f, -6.399744435e-04f, -6.388399015e-04f, -6.377043240e-04f, -6.365677128e-04f, -6.354300701e-04f,
+-6.342913979e-04f, -6.331516982e-04f, -6.320109731e-04f, -6.308692245e-04f, -6.297264546e-04f, -6.285826653e-04f, -6.274378588e-04f, -6.262920369e-04f, -6.251452018e-04f, -6.239973556e-04f,
+-6.228485002e-04f, -6.216986378e-04f, -6.205477703e-04f, -6.193958998e-04f, -6.182430284e-04f, -6.170891581e-04f, -6.159342910e-04f, -6.147784291e-04f, -6.136215745e-04f, -6.124637293e-04f,
+-6.113048954e-04f, -6.101450751e-04f, -6.089842702e-04f, -6.078224830e-04f, -6.066597155e-04f, -6.054959697e-04f, -6.043312477e-04f, -6.031655516e-04f, -6.019988835e-04f, -6.008312454e-04f,
+-5.996626394e-04f, -5.984930676e-04f, -5.973225321e-04f, -5.961510349e-04f, -5.949785782e-04f, -5.938051640e-04f, -5.926307944e-04f, -5.914554715e-04f, -5.902791974e-04f, -5.891019741e-04f,
+-5.879238039e-04f, -5.867446887e-04f, -5.855646306e-04f, -5.843836319e-04f, -5.832016944e-04f, -5.820188205e-04f, -5.808350120e-04f, -5.796502713e-04f, -5.784646003e-04f, -5.772780012e-04f,
+-5.760904760e-04f, -5.749020270e-04f, -5.737126561e-04f, -5.725223656e-04f, -5.713311575e-04f, -5.701390339e-04f, -5.689459969e-04f, -5.677520488e-04f, -5.665571915e-04f, -5.653614272e-04f,
+-5.641647581e-04f, -5.629671862e-04f, -5.617687137e-04f, -5.605693428e-04f, -5.593690754e-04f, -5.581679138e-04f, -5.569658601e-04f, -5.557629165e-04f, -5.545590850e-04f, -5.533543678e-04f,
+-5.521487670e-04f, -5.509422848e-04f, -5.497349233e-04f, -5.485266847e-04f, -5.473175710e-04f, -5.461075845e-04f, -5.448967272e-04f, -5.436850014e-04f, -5.424724092e-04f, -5.412589527e-04f,
+-5.400446340e-04f, -5.388294554e-04f, -5.376134189e-04f, -5.363965268e-04f, -5.351787811e-04f, -5.339601841e-04f, -5.327407379e-04f, -5.315204447e-04f, -5.302993066e-04f, -5.290773257e-04f,
+-5.278545043e-04f, -5.266308445e-04f, -5.254063485e-04f, -5.241810184e-04f, -5.229548565e-04f, -5.217278648e-04f, -5.205000456e-04f, -5.192714010e-04f, -5.180419332e-04f, -5.168116444e-04f,
+-5.155805367e-04f, -5.143486124e-04f, -5.131158735e-04f, -5.118823224e-04f, -5.106479611e-04f, -5.094127919e-04f, -5.081768169e-04f, -5.069400384e-04f, -5.057024584e-04f, -5.044640793e-04f,
+-5.032249031e-04f, -5.019849321e-04f, -5.007441685e-04f, -4.995026145e-04f, -4.982602722e-04f, -4.970171438e-04f, -4.957732317e-04f, -4.945285378e-04f, -4.932830645e-04f, -4.920368140e-04f,
+-4.907897883e-04f, -4.895419899e-04f, -4.882934208e-04f, -4.870440832e-04f, -4.857939795e-04f, -4.845431117e-04f, -4.832914820e-04f, -4.820390928e-04f, -4.807859462e-04f, -4.795320443e-04f,
+-4.782773896e-04f, -4.770219840e-04f, -4.757658299e-04f, -4.745089295e-04f, -4.732512850e-04f, -4.719928986e-04f, -4.707337725e-04f, -4.694739090e-04f, -4.682133102e-04f, -4.669519785e-04f,
+-4.656899160e-04f, -4.644271249e-04f, -4.631636075e-04f, -4.618993660e-04f, -4.606344027e-04f, -4.593687197e-04f, -4.581023193e-04f, -4.568352038e-04f, -4.555673753e-04f, -4.542988361e-04f,
+-4.530295884e-04f, -4.517596345e-04f, -4.504889767e-04f, -4.492176170e-04f, -4.479455579e-04f, -4.466728015e-04f, -4.453993501e-04f, -4.441252059e-04f, -4.428503711e-04f, -4.415748481e-04f,
+-4.402986390e-04f, -4.390217461e-04f, -4.377441717e-04f, -4.364659180e-04f, -4.351869872e-04f, -4.339073816e-04f, -4.326271035e-04f, -4.313461551e-04f, -4.300645387e-04f, -4.287822565e-04f,
+-4.274993107e-04f, -4.262157037e-04f, -4.249314377e-04f, -4.236465150e-04f, -4.223609378e-04f, -4.210747083e-04f, -4.197878289e-04f, -4.185003018e-04f, -4.172121293e-04f, -4.159233136e-04f,
+-4.146338570e-04f, -4.133437618e-04f, -4.120530302e-04f, -4.107616645e-04f, -4.094696670e-04f, -4.081770400e-04f, -4.068837857e-04f, -4.055899064e-04f, -4.042954044e-04f, -4.030002819e-04f,
+-4.017045413e-04f, -4.004081847e-04f, -3.991112145e-04f, -3.978136330e-04f, -3.965154425e-04f, -3.952166451e-04f, -3.939172433e-04f, -3.926172393e-04f, -3.913166353e-04f, -3.900154337e-04f,
+-3.887136367e-04f, -3.874112467e-04f, -3.861082658e-04f, -3.848046965e-04f, -3.835005410e-04f, -3.821958015e-04f, -3.808904805e-04f, -3.795845801e-04f, -3.782781026e-04f, -3.769710504e-04f,
+-3.756634258e-04f, -3.743552310e-04f, -3.730464683e-04f, -3.717371401e-04f, -3.704272486e-04f, -3.691167961e-04f, -3.678057850e-04f, -3.664942175e-04f, -3.651820959e-04f, -3.638694225e-04f,
+-3.625561997e-04f, -3.612424298e-04f, -3.599281150e-04f, -3.586132576e-04f, -3.572978600e-04f, -3.559819244e-04f, -3.546654532e-04f, -3.533484487e-04f, -3.520309132e-04f, -3.507128490e-04f,
+-3.493942584e-04f, -3.480751437e-04f, -3.467555072e-04f, -3.454353513e-04f, -3.441146782e-04f, -3.427934904e-04f, -3.414717900e-04f, -3.401495794e-04f, -3.388268609e-04f, -3.375036368e-04f,
+-3.361799096e-04f, -3.348556813e-04f, -3.335309545e-04f, -3.322057314e-04f, -3.308800143e-04f, -3.295538056e-04f, -3.282271076e-04f, -3.268999226e-04f, -3.255722529e-04f, -3.242441008e-04f,
+-3.229154687e-04f, -3.215863590e-04f, -3.202567738e-04f, -3.189267156e-04f, -3.175961867e-04f, -3.162651894e-04f, -3.149337261e-04f, -3.136017990e-04f, -3.122694105e-04f, -3.109365630e-04f,
+-3.096032587e-04f, -3.082695000e-04f, -3.069352893e-04f, -3.056006288e-04f, -3.042655209e-04f, -3.029299679e-04f, -3.015939723e-04f, -3.002575362e-04f, -2.989206621e-04f, -2.975833522e-04f,
+-2.962456090e-04f, -2.949074348e-04f, -2.935688318e-04f, -2.922298025e-04f, -2.908903491e-04f, -2.895504741e-04f, -2.882101797e-04f, -2.868694684e-04f, -2.855283424e-04f, -2.841868041e-04f,
+-2.828448558e-04f, -2.815024999e-04f, -2.801597387e-04f, -2.788165746e-04f, -2.774730099e-04f, -2.761290470e-04f, -2.747846882e-04f, -2.734399358e-04f, -2.720947923e-04f, -2.707492599e-04f,
+-2.694033410e-04f, -2.680570380e-04f, -2.667103532e-04f, -2.653632890e-04f, -2.640158477e-04f, -2.626680316e-04f, -2.613198431e-04f, -2.599712847e-04f, -2.586223585e-04f, -2.572730670e-04f,
+-2.559234126e-04f, -2.545733975e-04f, -2.532230242e-04f, -2.518722950e-04f, -2.505212122e-04f, -2.491697783e-04f, -2.478179955e-04f, -2.464658662e-04f, -2.451133929e-04f, -2.437605778e-04f,
+-2.424074232e-04f, -2.410539317e-04f, -2.397001055e-04f, -2.383459470e-04f, -2.369914585e-04f, -2.356366424e-04f, -2.342815011e-04f, -2.329260369e-04f, -2.315702523e-04f, -2.302141494e-04f,
+-2.288577308e-04f, -2.275009988e-04f, -2.261439558e-04f, -2.247866041e-04f, -2.234289460e-04f, -2.220709840e-04f, -2.207127204e-04f, -2.193541576e-04f, -2.179952979e-04f, -2.166361438e-04f,
+-2.152766975e-04f, -2.139169615e-04f, -2.125569381e-04f, -2.111966297e-04f, -2.098360386e-04f, -2.084751673e-04f, -2.071140180e-04f, -2.057525932e-04f, -2.043908953e-04f, -2.030289265e-04f,
+-2.016666894e-04f, -2.003041861e-04f, -1.989414192e-04f, -1.975783910e-04f, -1.962151039e-04f, -1.948515601e-04f, -1.934877622e-04f, -1.921237125e-04f, -1.907594133e-04f, -1.893948671e-04f,
+-1.880300761e-04f, -1.866650428e-04f, -1.852997696e-04f, -1.839342588e-04f, -1.825685128e-04f, -1.812025340e-04f, -1.798363247e-04f, -1.784698874e-04f, -1.771032243e-04f, -1.757363380e-04f,
+-1.743692306e-04f, -1.730019048e-04f, -1.716343627e-04f, -1.702666068e-04f, -1.688986395e-04f, -1.675304631e-04f, -1.661620800e-04f, -1.647934927e-04f, -1.634247034e-04f, -1.620557146e-04f,
+-1.606865286e-04f, -1.593171478e-04f, -1.579475746e-04f, -1.565778113e-04f, -1.552078605e-04f, -1.538377243e-04f, -1.524674053e-04f, -1.510969057e-04f, -1.497262281e-04f, -1.483553746e-04f,
+-1.469843478e-04f, -1.456131500e-04f, -1.442417836e-04f, -1.428702510e-04f, -1.414985546e-04f, -1.401266966e-04f, -1.387546796e-04f, -1.373825059e-04f, -1.360101779e-04f, -1.346376979e-04f,
+-1.332650684e-04f, -1.318922916e-04f, -1.305193701e-04f, -1.291463062e-04f, -1.277731023e-04f, -1.263997607e-04f, -1.250262839e-04f, -1.236526742e-04f, -1.222789339e-04f, -1.209050656e-04f,
+-1.195310715e-04f, -1.181569541e-04f, -1.167827157e-04f, -1.154083588e-04f, -1.140338856e-04f, -1.126592986e-04f, -1.112846002e-04f, -1.099097927e-04f, -1.085348786e-04f, -1.071598602e-04f,
+-1.057847399e-04f, -1.044095200e-04f, -1.030342031e-04f, -1.016587913e-04f, -1.002832873e-04f, -9.890769318e-05f, -9.753201152e-05f, -9.615624464e-05f, -9.478039492e-05f, -9.340446476e-05f,
+-9.202845653e-05f, -9.065237263e-05f, -8.927621542e-05f, -8.789998730e-05f, -8.652369064e-05f, -8.514732784e-05f, -8.377090128e-05f, -8.239441333e-05f, -8.101786639e-05f, -7.964126283e-05f,
+-7.826460504e-05f, -7.688789541e-05f, -7.551113630e-05f, -7.413433012e-05f, -7.275747924e-05f, -7.138058604e-05f, -7.000365291e-05f, -6.862668223e-05f, -6.724967638e-05f, -6.587263775e-05f,
+-6.449556871e-05f, -6.311847166e-05f, -6.174134897e-05f, -6.036420302e-05f, -5.898703620e-05f, -5.760985089e-05f, -5.623264947e-05f, -5.485543432e-05f, -5.347820783e-05f, -5.210097237e-05f,
+-5.072373033e-05f, -4.934648409e-05f, -4.796923604e-05f, -4.659198854e-05f, -4.521474398e-05f, -4.383750475e-05f, -4.246027322e-05f, -4.108305177e-05f, -3.970584279e-05f, -3.832864865e-05f,
+-3.695147174e-05f, -3.557431443e-05f, -3.419717910e-05f, -3.282006814e-05f, -3.144298392e-05f, -3.006592882e-05f, -2.868890522e-05f, -2.731191550e-05f, -2.593496203e-05f, -2.455804720e-05f,
+-2.318117339e-05f, -2.180434296e-05f, -2.042755830e-05f, -1.905082179e-05f, -1.767413581e-05f, -1.629750272e-05f, -1.492092491e-05f, -1.354440475e-05f, -1.216794462e-05f, -1.079154690e-05f,
+-9.415213955e-06f, -8.038948169e-06f, -6.662751914e-06f, -5.286627565e-06f, -3.910577498e-06f, -2.534604085e-06f, -1.158709702e-06f, 2.171032776e-07f, 1.592832481e-06f, 2.968475534e-06f,
+4.344030065e-06f, 5.719493700e-06f, 7.094864067e-06f, 8.470138794e-06f, 9.845315510e-06f, 1.122039184e-05f, 1.259536542e-05f, 1.397023388e-05f, 1.534499483e-05f, 1.671964593e-05f,
+1.809418479e-05f, 1.946860904e-05f, 2.084291632e-05f, 2.221710426e-05f, 2.359117048e-05f, 2.496511263e-05f, 2.633892833e-05f, 2.771261522e-05f, 2.908617093e-05f, 3.045959309e-05f,
+3.183287933e-05f, 3.320602730e-05f, 3.457903462e-05f, 3.595189893e-05f, 3.732461787e-05f, 3.869718906e-05f, 4.006961016e-05f, 4.144187879e-05f, 4.281399258e-05f, 4.418594919e-05f,
+4.555774624e-05f, 4.692938138e-05f, 4.830085223e-05f, 4.967215645e-05f, 5.104329167e-05f, 5.241425554e-05f, 5.378504568e-05f, 5.515565974e-05f, 5.652609537e-05f, 5.789635020e-05f,
+5.926642188e-05f, 6.063630804e-05f, 6.200600635e-05f, 6.337551442e-05f, 6.474482992e-05f, 6.611395048e-05f, 6.748287375e-05f, 6.885159737e-05f, 7.022011900e-05f, 7.158843627e-05f,
+7.295654684e-05f, 7.432444834e-05f, 7.569213844e-05f, 7.705961477e-05f, 7.842687500e-05f, 7.979391675e-05f, 8.116073770e-05f, 8.252733548e-05f, 8.389370774e-05f, 8.525985215e-05f,
+8.662576635e-05f, 8.799144799e-05f, 8.935689473e-05f, 9.072210422e-05f, 9.208707411e-05f, 9.345180206e-05f, 9.481628573e-05f, 9.618052277e-05f, 9.754451084e-05f, 9.890824759e-05f,
+1.002717307e-04f, 1.016349578e-04f, 1.029979265e-04f, 1.043606346e-04f, 1.057230797e-04f, 1.070852594e-04f, 1.084471713e-04f, 1.098088133e-04f, 1.111701829e-04f, 1.125312777e-04f,
+1.138920956e-04f, 1.152526340e-04f, 1.166128907e-04f, 1.179728634e-04f, 1.193325497e-04f, 1.206919472e-04f, 1.220510537e-04f, 1.234098668e-04f, 1.247683842e-04f, 1.261266036e-04f,
+1.274845226e-04f, 1.288421388e-04f, 1.301994501e-04f, 1.315564539e-04f, 1.329131481e-04f, 1.342695303e-04f, 1.356255981e-04f, 1.369813492e-04f, 1.383367814e-04f, 1.396918923e-04f,
+1.410466795e-04f, 1.424011407e-04f, 1.437552737e-04f, 1.451090760e-04f, 1.464625454e-04f, 1.478156796e-04f, 1.491684762e-04f, 1.505209330e-04f, 1.518730475e-04f, 1.532248175e-04f,
+1.545762407e-04f, 1.559273148e-04f, 1.572780374e-04f, 1.586284062e-04f, 1.599784189e-04f, 1.613280732e-04f, 1.626773668e-04f, 1.640262974e-04f, 1.653748626e-04f, 1.667230602e-04f,
+1.680708879e-04f, 1.694183433e-04f, 1.707654241e-04f, 1.721121280e-04f, 1.734584528e-04f, 1.748043961e-04f, 1.761499556e-04f, 1.774951291e-04f, 1.788399141e-04f, 1.801843085e-04f,
+1.815283098e-04f, 1.828719159e-04f, 1.842151244e-04f, 1.855579329e-04f, 1.869003393e-04f, 1.882423413e-04f, 1.895839364e-04f, 1.909251225e-04f, 1.922658972e-04f, 1.936062582e-04f,
+1.949462033e-04f, 1.962857302e-04f, 1.976248365e-04f, 1.989635200e-04f, 2.003017784e-04f, 2.016396094e-04f, 2.029770108e-04f, 2.043139801e-04f, 2.056505152e-04f, 2.069866137e-04f,
+2.083222735e-04f, 2.096574921e-04f, 2.109922673e-04f, 2.123265969e-04f, 2.136604785e-04f, 2.149939099e-04f, 2.163268888e-04f, 2.176594129e-04f, 2.189914800e-04f, 2.203230877e-04f,
+2.216542338e-04f, 2.229849160e-04f, 2.243151321e-04f, 2.256448798e-04f, 2.269741568e-04f, 2.283029608e-04f, 2.296312895e-04f, 2.309591408e-04f, 2.322865123e-04f, 2.336134018e-04f,
+2.349398070e-04f, 2.362657256e-04f, 2.375911554e-04f, 2.389160941e-04f, 2.402405395e-04f, 2.415644893e-04f, 2.428879412e-04f, 2.442108930e-04f, 2.455333424e-04f, 2.468552872e-04f,
+2.481767251e-04f, 2.494976538e-04f, 2.508180712e-04f, 2.521379749e-04f, 2.534573627e-04f, 2.547762324e-04f, 2.560945816e-04f, 2.574124083e-04f, 2.587297100e-04f, 2.600464846e-04f,
+2.613627298e-04f, 2.626784434e-04f, 2.639936232e-04f, 2.653082668e-04f, 2.666223721e-04f, 2.679359368e-04f, 2.692489587e-04f, 2.705614355e-04f, 2.718733651e-04f, 2.731847451e-04f,
+2.744955733e-04f, 2.758058476e-04f, 2.771155656e-04f, 2.784247251e-04f, 2.797333240e-04f, 2.810413599e-04f, 2.823488308e-04f, 2.836557342e-04f, 2.849620680e-04f, 2.862678301e-04f,
+2.875730180e-04f, 2.888776298e-04f, 2.901816630e-04f, 2.914851155e-04f, 2.927879852e-04f, 2.940902696e-04f, 2.953919668e-04f, 2.966930743e-04f, 2.979935901e-04f, 2.992935119e-04f,
+3.005928375e-04f, 3.018915647e-04f, 3.031896912e-04f, 3.044872149e-04f, 3.057841336e-04f, 3.070804450e-04f, 3.083761470e-04f, 3.096712374e-04f, 3.109657138e-04f, 3.122595743e-04f,
+3.135528165e-04f, 3.148454382e-04f, 3.161374373e-04f, 3.174288115e-04f, 3.187195587e-04f, 3.200096767e-04f, 3.212991632e-04f, 3.225880162e-04f, 3.238762333e-04f, 3.251638124e-04f,
+3.264507514e-04f, 3.277370480e-04f, 3.290227000e-04f, 3.303077054e-04f, 3.315920618e-04f, 3.328757671e-04f, 3.341588191e-04f, 3.354412157e-04f, 3.367229546e-04f, 3.380040337e-04f,
+3.392844509e-04f, 3.405642039e-04f, 3.418432905e-04f, 3.431217087e-04f, 3.443994562e-04f, 3.456765309e-04f, 3.469529305e-04f, 3.482286530e-04f, 3.495036962e-04f, 3.507780578e-04f,
+3.520517358e-04f, 3.533247280e-04f, 3.545970322e-04f, 3.558686463e-04f, 3.571395681e-04f, 3.584097954e-04f, 3.596793262e-04f, 3.609481582e-04f, 3.622162892e-04f, 3.634837173e-04f,
+3.647504401e-04f, 3.660164556e-04f, 3.672817615e-04f, 3.685463559e-04f, 3.698102364e-04f, 3.710734011e-04f, 3.723358477e-04f, 3.735975740e-04f, 3.748585780e-04f, 3.761188576e-04f,
+3.773784105e-04f, 3.786372347e-04f, 3.798953281e-04f, 3.811526884e-04f, 3.824093135e-04f, 3.836652015e-04f, 3.849203500e-04f, 3.861747570e-04f, 3.874284203e-04f, 3.886813380e-04f,
+3.899335077e-04f, 3.911849274e-04f, 3.924355950e-04f, 3.936855084e-04f, 3.949346654e-04f, 3.961830639e-04f, 3.974307019e-04f, 3.986775772e-04f, 3.999236877e-04f, 4.011690313e-04f,
+4.024136059e-04f, 4.036574093e-04f, 4.049004396e-04f, 4.061426945e-04f, 4.073841720e-04f, 4.086248700e-04f, 4.098647864e-04f, 4.111039190e-04f, 4.123422659e-04f, 4.135798248e-04f,
+4.148165937e-04f, 4.160525706e-04f, 4.172877533e-04f, 4.185221397e-04f, 4.197557278e-04f, 4.209885155e-04f, 4.222205006e-04f, 4.234516812e-04f, 4.246820551e-04f, 4.259116202e-04f,
+4.271403745e-04f, 4.283683159e-04f, 4.295954424e-04f, 4.308217518e-04f, 4.320472420e-04f, 4.332719111e-04f, 4.344957569e-04f, 4.357187775e-04f, 4.369409706e-04f, 4.381623343e-04f,
+4.393828664e-04f, 4.406025650e-04f, 4.418214280e-04f, 4.430394533e-04f, 4.442566389e-04f, 4.454729827e-04f, 4.466884826e-04f, 4.479031366e-04f, 4.491169427e-04f, 4.503298989e-04f,
+4.515420030e-04f, 4.527532530e-04f, 4.539636469e-04f, 4.551731826e-04f, 4.563818581e-04f, 4.575896714e-04f, 4.587966205e-04f, 4.600027032e-04f, 4.612079176e-04f, 4.624122616e-04f,
+4.636157333e-04f, 4.648183305e-04f, 4.660200512e-04f, 4.672208935e-04f, 4.684208553e-04f, 4.696199346e-04f, 4.708181293e-04f, 4.720154375e-04f, 4.732118571e-04f, 4.744073862e-04f,
+4.756020226e-04f, 4.767957644e-04f, 4.779886096e-04f, 4.791805562e-04f, 4.803716021e-04f, 4.815617454e-04f, 4.827509841e-04f, 4.839393161e-04f, 4.851267395e-04f, 4.863132523e-04f,
+4.874988524e-04f, 4.886835379e-04f, 4.898673068e-04f, 4.910501570e-04f, 4.922320867e-04f, 4.934130938e-04f, 4.945931763e-04f, 4.957723322e-04f, 4.969505597e-04f, 4.981278566e-04f,
+4.993042210e-04f, 5.004796509e-04f, 5.016541443e-04f, 5.028276994e-04f, 5.040003141e-04f, 5.051719863e-04f, 5.063427143e-04f, 5.075124960e-04f, 5.086813293e-04f, 5.098492125e-04f,
+5.110161435e-04f, 5.121821203e-04f, 5.133471410e-04f, 5.145112037e-04f, 5.156743063e-04f, 5.168364470e-04f, 5.179976238e-04f, 5.191578346e-04f, 5.203170777e-04f, 5.214753510e-04f,
+5.226326526e-04f, 5.237889806e-04f, 5.249443329e-04f, 5.260987078e-04f, 5.272521032e-04f, 5.284045172e-04f, 5.295559478e-04f, 5.307063932e-04f, 5.318558514e-04f, 5.330043205e-04f,
+5.341517986e-04f, 5.352982837e-04f, 5.364437739e-04f, 5.375882673e-04f, 5.387317620e-04f, 5.398742561e-04f, 5.410157476e-04f, 5.421562346e-04f, 5.432957153e-04f, 5.444341876e-04f,
+5.455716498e-04f, 5.467080999e-04f, 5.478435360e-04f, 5.489779561e-04f, 5.501113585e-04f, 5.512437412e-04f, 5.523751023e-04f, 5.535054399e-04f, 5.546347521e-04f, 5.557630370e-04f,
+5.568902928e-04f, 5.580165175e-04f, 5.591417094e-04f, 5.602658664e-04f, 5.613889867e-04f, 5.625110684e-04f, 5.636321097e-04f, 5.647521087e-04f, 5.658710635e-04f, 5.669889722e-04f,
+5.681058329e-04f, 5.692216439e-04f, 5.703364032e-04f, 5.714501090e-04f, 5.725627594e-04f, 5.736743525e-04f, 5.747848865e-04f, 5.758943596e-04f, 5.770027698e-04f, 5.781101154e-04f,
+5.792163945e-04f, 5.803216052e-04f, 5.814257456e-04f, 5.825288140e-04f, 5.836308086e-04f, 5.847317273e-04f, 5.858315686e-04f, 5.869303304e-04f, 5.880280109e-04f, 5.891246084e-04f,
+5.902201209e-04f, 5.913145468e-04f, 5.924078840e-04f, 5.935001309e-04f, 5.945912856e-04f, 5.956813462e-04f, 5.967703110e-04f, 5.978581782e-04f, 5.989449459e-04f, 6.000306122e-04f,
+6.011151755e-04f, 6.021986339e-04f, 6.032809856e-04f, 6.043622287e-04f, 6.054423615e-04f, 6.065213823e-04f, 6.075992891e-04f, 6.086760801e-04f, 6.097517537e-04f, 6.108263080e-04f,
+6.118997412e-04f, 6.129720516e-04f, 6.140432372e-04f, 6.151132965e-04f, 6.161822275e-04f, 6.172500285e-04f, 6.183166977e-04f, 6.193822334e-04f, 6.204466337e-04f, 6.215098970e-04f,
+6.225720214e-04f, 6.236330051e-04f, 6.246928464e-04f, 6.257515436e-04f, 6.268090949e-04f, 6.278654984e-04f, 6.289207526e-04f, 6.299748555e-04f, 6.310278055e-04f, 6.320796008e-04f,
+6.331302396e-04f, 6.341797203e-04f, 6.352280410e-04f, 6.362752001e-04f, 6.373211957e-04f, 6.383660262e-04f, 6.394096898e-04f, 6.404521848e-04f, 6.414935094e-04f, 6.425336619e-04f,
+6.435726406e-04f, 6.446104438e-04f, 6.456470698e-04f, 6.466825167e-04f, 6.477167830e-04f, 6.487498668e-04f, 6.497817665e-04f, 6.508124804e-04f, 6.518420068e-04f, 6.528703438e-04f,
+6.538974900e-04f, 6.549234434e-04f, 6.559482025e-04f, 6.569717655e-04f, 6.579941308e-04f, 6.590152966e-04f, 6.600352613e-04f, 6.610540231e-04f, 6.620715804e-04f, 6.630879315e-04f,
+6.641030746e-04f, 6.651170082e-04f, 6.661297306e-04f, 6.671412400e-04f, 6.681515348e-04f, 6.691606133e-04f, 6.701684739e-04f, 6.711751149e-04f, 6.721805345e-04f, 6.731847312e-04f,
+6.741877033e-04f, 6.751894492e-04f, 6.761899671e-04f, 6.771892554e-04f, 6.781873124e-04f, 6.791841366e-04f, 6.801797263e-04f, 6.811740797e-04f, 6.821671954e-04f, 6.831590716e-04f,
+6.841497066e-04f, 6.851390990e-04f, 6.861272469e-04f, 6.871141488e-04f, 6.880998031e-04f, 6.890842081e-04f, 6.900673623e-04f, 6.910492639e-04f, 6.920299113e-04f, 6.930093030e-04f,
+6.939874374e-04f, 6.949643127e-04f, 6.959399274e-04f, 6.969142799e-04f, 6.978873686e-04f, 6.988591919e-04f, 6.998297481e-04f, 7.007990357e-04f, 7.017670531e-04f, 7.027337987e-04f,
+7.036992708e-04f, 7.046634679e-04f, 7.056263884e-04f, 7.065880308e-04f, 7.075483933e-04f, 7.085074745e-04f, 7.094652728e-04f, 7.104217866e-04f, 7.113770142e-04f, 7.123309542e-04f,
+7.132836050e-04f, 7.142349650e-04f, 7.151850326e-04f, 7.161338063e-04f, 7.170812844e-04f, 7.180274656e-04f, 7.189723481e-04f, 7.199159304e-04f, 7.208582111e-04f, 7.217991885e-04f,
+7.227388610e-04f, 7.236772272e-04f, 7.246142855e-04f, 7.255500344e-04f, 7.264844723e-04f, 7.274175976e-04f, 7.283494090e-04f, 7.292799047e-04f, 7.302090833e-04f, 7.311369433e-04f,
+7.320634832e-04f, 7.329887013e-04f, 7.339125963e-04f, 7.348351666e-04f, 7.357564106e-04f, 7.366763268e-04f, 7.375949139e-04f, 7.385121701e-04f, 7.394280941e-04f, 7.403426844e-04f,
+7.412559393e-04f, 7.421678575e-04f, 7.430784375e-04f, 7.439876777e-04f, 7.448955766e-04f, 7.458021329e-04f, 7.467073449e-04f, 7.476112112e-04f, 7.485137303e-04f, 7.494149008e-04f,
+7.503147211e-04f, 7.512131898e-04f, 7.521103055e-04f, 7.530060666e-04f, 7.539004717e-04f, 7.547935193e-04f, 7.556852080e-04f, 7.565755363e-04f, 7.574645027e-04f, 7.583521058e-04f,
+7.592383442e-04f, 7.601232163e-04f, 7.610067208e-04f, 7.618888562e-04f, 7.627696211e-04f, 7.636490139e-04f, 7.645270334e-04f, 7.654036780e-04f, 7.662789463e-04f, 7.671528370e-04f,
+7.680253484e-04f, 7.688964793e-04f, 7.697662283e-04f, 7.706345938e-04f, 7.715015745e-04f, 7.723671689e-04f, 7.732313757e-04f, 7.740941935e-04f, 7.749556208e-04f, 7.758156562e-04f,
+7.766742983e-04f, 7.775315458e-04f, 7.783873972e-04f, 7.792418511e-04f, 7.800949062e-04f, 7.809465610e-04f, 7.817968142e-04f, 7.826456643e-04f, 7.834931101e-04f, 7.843391501e-04f,
+7.851837830e-04f, 7.860270073e-04f, 7.868688217e-04f, 7.877092248e-04f, 7.885482153e-04f, 7.893857918e-04f, 7.902219529e-04f, 7.910566973e-04f, 7.918900236e-04f, 7.927219304e-04f,
+7.935524165e-04f, 7.943814804e-04f, 7.952091209e-04f, 7.960353365e-04f, 7.968601260e-04f, 7.976834879e-04f, 7.985054210e-04f, 7.993259239e-04f, 8.001449953e-04f, 8.009626339e-04f,
+8.017788383e-04f, 8.025936072e-04f, 8.034069393e-04f, 8.042188332e-04f, 8.050292877e-04f, 8.058383015e-04f, 8.066458731e-04f, 8.074520014e-04f, 8.082566850e-04f, 8.090599226e-04f,
+8.098617130e-04f, 8.106620547e-04f, 8.114609466e-04f, 8.122583872e-04f, 8.130543755e-04f, 8.138489099e-04f, 8.146419893e-04f, 8.154336124e-04f, 8.162237779e-04f, 8.170124845e-04f,
+8.177997310e-04f, 8.185855160e-04f, 8.193698383e-04f, 8.201526967e-04f, 8.209340898e-04f, 8.217140165e-04f, 8.224924754e-04f, 8.232694653e-04f, 8.240449849e-04f, 8.248190330e-04f,
+8.255916084e-04f, 8.263627098e-04f, 8.271323359e-04f, 8.279004855e-04f, 8.286671574e-04f, 8.294323504e-04f, 8.301960631e-04f, 8.309582944e-04f, 8.317190431e-04f, 8.324783079e-04f,
+8.332360876e-04f, 8.339923809e-04f, 8.347471868e-04f, 8.355005038e-04f, 8.362523310e-04f, 8.370026669e-04f, 8.377515105e-04f, 8.384988604e-04f, 8.392447156e-04f, 8.399890748e-04f,
+8.407319369e-04f, 8.414733005e-04f, 8.422131646e-04f, 8.429515280e-04f, 8.436883894e-04f, 8.444237477e-04f, 8.451576017e-04f, 8.458899503e-04f, 8.466207921e-04f, 8.473501262e-04f,
+8.480779513e-04f, 8.488042662e-04f, 8.495290698e-04f, 8.502523609e-04f, 8.509741384e-04f, 8.516944010e-04f, 8.524131478e-04f, 8.531303774e-04f, 8.538460888e-04f, 8.545602808e-04f,
+8.552729523e-04f, 8.559841021e-04f, 8.566937290e-04f, 8.574018321e-04f, 8.581084100e-04f, 8.588134618e-04f, 8.595169862e-04f, 8.602189822e-04f, 8.609194486e-04f, 8.616183843e-04f,
+8.623157882e-04f, 8.630116592e-04f, 8.637059962e-04f, 8.643987980e-04f, 8.650900636e-04f, 8.657797918e-04f, 8.664679816e-04f, 8.671546319e-04f, 8.678397416e-04f, 8.685233095e-04f,
+8.692053346e-04f, 8.698858158e-04f, 8.705647520e-04f, 8.712421422e-04f, 8.719179853e-04f, 8.725922801e-04f, 8.732650257e-04f, 8.739362209e-04f, 8.746058647e-04f, 8.752739560e-04f,
+8.759404938e-04f, 8.766054770e-04f, 8.772689045e-04f, 8.779307754e-04f, 8.785910885e-04f, 8.792498428e-04f, 8.799070372e-04f, 8.805626708e-04f, 8.812167424e-04f, 8.818692511e-04f,
+8.825201958e-04f, 8.831695755e-04f, 8.838173891e-04f, 8.844636357e-04f, 8.851083141e-04f, 8.857514235e-04f, 8.863929627e-04f, 8.870329308e-04f, 8.876713267e-04f, 8.883081495e-04f,
+8.889433980e-04f, 8.895770715e-04f, 8.902091687e-04f, 8.908396888e-04f, 8.914686307e-04f, 8.920959935e-04f, 8.927217761e-04f, 8.933459777e-04f, 8.939685971e-04f, 8.945896334e-04f,
+8.952090856e-04f, 8.958269528e-04f, 8.964432340e-04f, 8.970579282e-04f, 8.976710345e-04f, 8.982825519e-04f, 8.988924793e-04f, 8.995008160e-04f, 9.001075609e-04f, 9.007127130e-04f,
+9.013162715e-04f, 9.019182353e-04f, 9.025186036e-04f, 9.031173753e-04f, 9.037145496e-04f, 9.043101255e-04f, 9.049041020e-04f, 9.054964784e-04f, 9.060872535e-04f, 9.066764266e-04f,
+9.072639966e-04f, 9.078499627e-04f, 9.084343239e-04f, 9.090170794e-04f, 9.095982281e-04f, 9.101777693e-04f, 9.107557021e-04f, 9.113320254e-04f, 9.119067384e-04f, 9.124798403e-04f,
+9.130513300e-04f, 9.136212069e-04f, 9.141894698e-04f, 9.147561180e-04f, 9.153211506e-04f, 9.158845667e-04f, 9.164463655e-04f, 9.170065459e-04f, 9.175651073e-04f, 9.181220487e-04f,
+9.186773692e-04f, 9.192310681e-04f, 9.197831443e-04f, 9.203335972e-04f, 9.208824258e-04f, 9.214296292e-04f, 9.219752067e-04f, 9.225191573e-04f, 9.230614803e-04f, 9.236021748e-04f,
+9.241412400e-04f, 9.246786750e-04f, 9.252144790e-04f, 9.257486512e-04f, 9.262811908e-04f, 9.268120969e-04f, 9.273413687e-04f, 9.278690054e-04f, 9.283950061e-04f, 9.289193702e-04f,
+9.294420967e-04f, 9.299631849e-04f, 9.304826340e-04f, 9.310004431e-04f, 9.315166115e-04f, 9.320311384e-04f, 9.325440230e-04f, 9.330552645e-04f, 9.335648621e-04f, 9.340728150e-04f,
+9.345791225e-04f, 9.350837838e-04f, 9.355867981e-04f, 9.360881646e-04f, 9.365878826e-04f, 9.370859513e-04f, 9.375823700e-04f, 9.380771379e-04f, 9.385702542e-04f, 9.390617182e-04f,
+9.395515292e-04f, 9.400396863e-04f, 9.405261889e-04f, 9.410110362e-04f, 9.414942275e-04f, 9.419757620e-04f, 9.424556390e-04f, 9.429338578e-04f, 9.434104177e-04f, 9.438853179e-04f,
+9.443585576e-04f, 9.448301363e-04f, 9.453000532e-04f, 9.457683075e-04f, 9.462348986e-04f, 9.466998257e-04f, 9.471630882e-04f, 9.476246854e-04f, 9.480846165e-04f, 9.485428808e-04f,
+9.489994778e-04f, 9.494544066e-04f, 9.499076666e-04f, 9.503592571e-04f, 9.508091775e-04f, 9.512574270e-04f, 9.517040050e-04f, 9.521489108e-04f, 9.525921438e-04f, 9.530337033e-04f,
+9.534735886e-04f, 9.539117990e-04f, 9.543483340e-04f, 9.547831928e-04f, 9.552163748e-04f, 9.556478794e-04f, 9.560777059e-04f, 9.565058537e-04f, 9.569323221e-04f, 9.573571106e-04f,
+9.577802184e-04f, 9.582016449e-04f, 9.586213896e-04f, 9.590394517e-04f, 9.594558307e-04f, 9.598705260e-04f, 9.602835369e-04f, 9.606948629e-04f, 9.611045032e-04f, 9.615124574e-04f,
+9.619187248e-04f, 9.623233048e-04f, 9.627261968e-04f, 9.631274003e-04f, 9.635269146e-04f, 9.639247391e-04f, 9.643208733e-04f, 9.647153165e-04f, 9.651080683e-04f, 9.654991280e-04f,
+9.658884950e-04f, 9.662761688e-04f, 9.666621488e-04f, 9.670464345e-04f, 9.674290253e-04f, 9.678099206e-04f, 9.681891198e-04f, 9.685666225e-04f, 9.689424281e-04f, 9.693165360e-04f,
+9.696889456e-04f, 9.700596565e-04f, 9.704286682e-04f, 9.707959799e-04f, 9.711615914e-04f, 9.715255019e-04f, 9.718877110e-04f, 9.722482182e-04f, 9.726070229e-04f, 9.729641247e-04f,
+9.733195229e-04f, 9.736732172e-04f, 9.740252070e-04f, 9.743754917e-04f, 9.747240710e-04f, 9.750709442e-04f, 9.754161109e-04f, 9.757595706e-04f, 9.761013229e-04f, 9.764413671e-04f,
+9.767797029e-04f, 9.771163298e-04f, 9.774512472e-04f, 9.777844548e-04f, 9.781159520e-04f, 9.784457383e-04f, 9.787738133e-04f, 9.791001766e-04f, 9.794248277e-04f, 9.797477661e-04f,
+9.800689913e-04f, 9.803885030e-04f, 9.807063006e-04f, 9.810223838e-04f, 9.813367520e-04f, 9.816494049e-04f, 9.819603420e-04f, 9.822695628e-04f, 9.825770670e-04f, 9.828828541e-04f,
+9.831869237e-04f, 9.834892754e-04f, 9.837899087e-04f, 9.840888233e-04f, 9.843860187e-04f, 9.846814945e-04f, 9.849752503e-04f, 9.852672857e-04f, 9.855576004e-04f, 9.858461938e-04f,
+9.861330657e-04f, 9.864182155e-04f, 9.867016431e-04f, 9.869833478e-04f, 9.872633295e-04f, 9.875415876e-04f, 9.878181218e-04f, 9.880929318e-04f, 9.883660172e-04f, 9.886373775e-04f,
+9.889070125e-04f, 9.891749218e-04f, 9.894411050e-04f, 9.897055618e-04f, 9.899682918e-04f, 9.902292946e-04f, 9.904885700e-04f, 9.907461175e-04f, 9.910019369e-04f, 9.912560278e-04f,
+9.915083899e-04f, 9.917590227e-04f, 9.920079261e-04f, 9.922550997e-04f, 9.925005431e-04f, 9.927442561e-04f, 9.929862383e-04f, 9.932264894e-04f, 9.934650091e-04f, 9.937017971e-04f,
+9.939368531e-04f, 9.941701768e-04f, 9.944017679e-04f, 9.946316261e-04f, 9.948597510e-04f, 9.950861426e-04f, 9.953108003e-04f, 9.955337240e-04f, 9.957549133e-04f, 9.959743681e-04f,
+9.961920879e-04f, 9.964080727e-04f, 9.966223220e-04f, 9.968348356e-04f, 9.970456132e-04f, 9.972546547e-04f, 9.974619597e-04f, 9.976675280e-04f, 9.978713593e-04f, 9.980734534e-04f,
+9.982738101e-04f, 9.984724291e-04f, 9.986693101e-04f, 9.988644530e-04f, 9.990578575e-04f, 9.992495234e-04f, 9.994394504e-04f, 9.996276383e-04f, 9.998140870e-04f, 9.999987961e-04f,
+1.000181766e-03f, 1.000362995e-03f, 1.000542484e-03f, 1.000720233e-03f, 1.000896242e-03f, 1.001070510e-03f, 1.001243036e-03f, 1.001413822e-03f, 1.001582866e-03f, 1.001750169e-03f,
+1.001915730e-03f, 1.002079550e-03f, 1.002241627e-03f, 1.002401962e-03f, 1.002560555e-03f, 1.002717405e-03f, 1.002872512e-03f, 1.003025876e-03f, 1.003177498e-03f, 1.003327376e-03f,
+1.003475511e-03f, 1.003621902e-03f, 1.003766550e-03f, 1.003909454e-03f, 1.004050614e-03f, 1.004190030e-03f, 1.004327701e-03f, 1.004463629e-03f, 1.004597812e-03f, 1.004730250e-03f,
+1.004860944e-03f, 1.004989892e-03f, 1.005117096e-03f, 1.005242555e-03f, 1.005366269e-03f, 1.005488237e-03f, 1.005608460e-03f, 1.005726937e-03f, 1.005843669e-03f, 1.005958655e-03f,
+1.006071895e-03f, 1.006183390e-03f, 1.006293139e-03f, 1.006401141e-03f, 1.006507397e-03f, 1.006611908e-03f, 1.006714672e-03f, 1.006815689e-03f, 1.006914960e-03f, 1.007012485e-03f,
+1.007108263e-03f, 1.007202295e-03f, 1.007294580e-03f, 1.007385118e-03f, 1.007473910e-03f, 1.007560954e-03f, 1.007646252e-03f, 1.007729803e-03f, 1.007811607e-03f, 1.007891665e-03f,
+1.007969975e-03f, 1.008046538e-03f, 1.008121354e-03f, 1.008194423e-03f, 1.008265745e-03f, 1.008335320e-03f, 1.008403147e-03f, 1.008469228e-03f, 1.008533561e-03f, 1.008596148e-03f,
+1.008656987e-03f, 1.008716079e-03f, 1.008773424e-03f, 1.008829022e-03f, 1.008882872e-03f, 1.008934976e-03f, 1.008985332e-03f, 1.009033942e-03f, 1.009080804e-03f, 1.009125919e-03f,
+1.009169288e-03f, 1.009210909e-03f, 1.009250783e-03f, 1.009288911e-03f, 1.009325292e-03f, 1.009359926e-03f, 1.009392813e-03f, 1.009423953e-03f, 1.009453347e-03f, 1.009480994e-03f,
+1.009506895e-03f, 1.009531049e-03f, 1.009553457e-03f, 1.009574118e-03f, 1.009593034e-03f, 1.009610202e-03f, 1.009625625e-03f, 1.009639302e-03f, 1.009651233e-03f, 1.009661418e-03f,
+1.009669857e-03f, 1.009676550e-03f, 1.009681498e-03f, 1.009684701e-03f, 1.009686158e-03f, 1.009685869e-03f, 1.009683836e-03f, 1.009680057e-03f, 1.009674534e-03f, 1.009667265e-03f,
+1.009658252e-03f, 1.009647494e-03f, 1.009634992e-03f, 1.009620745e-03f, 1.009604755e-03f, 1.009587020e-03f, 1.009567541e-03f, 1.009546318e-03f, 1.009523352e-03f, 1.009498642e-03f,
+1.009472188e-03f, 1.009443992e-03f, 1.009414052e-03f, 1.009382370e-03f, 1.009348945e-03f, 1.009313777e-03f, 1.009276866e-03f, 1.009238214e-03f, 1.009197819e-03f, 1.009155683e-03f,
+1.009111805e-03f, 1.009066185e-03f, 1.009018824e-03f, 1.008969722e-03f, 1.008918878e-03f, 1.008866294e-03f, 1.008811970e-03f, 1.008755905e-03f, 1.008698100e-03f, 1.008638554e-03f,
+1.008577269e-03f, 1.008514245e-03f, 1.008449481e-03f, 1.008382978e-03f, 1.008314736e-03f, 1.008244756e-03f, 1.008173037e-03f, 1.008099580e-03f, 1.008024385e-03f, 1.007947452e-03f,
+1.007868781e-03f, 1.007788373e-03f, 1.007706229e-03f, 1.007622347e-03f, 1.007536729e-03f, 1.007449375e-03f, 1.007360285e-03f, 1.007269459e-03f, 1.007176897e-03f, 1.007082600e-03f,
+1.006986568e-03f, 1.006888802e-03f, 1.006789301e-03f, 1.006688066e-03f, 1.006585097e-03f, 1.006480395e-03f, 1.006373959e-03f, 1.006265791e-03f, 1.006155889e-03f, 1.006044255e-03f,
+1.005930890e-03f, 1.005815792e-03f, 1.005698963e-03f, 1.005580402e-03f, 1.005460111e-03f, 1.005338089e-03f, 1.005214337e-03f, 1.005088855e-03f, 1.004961644e-03f, 1.004832703e-03f,
+1.004702033e-03f, 1.004569634e-03f, 1.004435508e-03f, 1.004299653e-03f, 1.004162071e-03f, 1.004022761e-03f, 1.003881725e-03f, 1.003738961e-03f, 1.003594472e-03f, 1.003448257e-03f,
+1.003300316e-03f, 1.003150650e-03f, 1.002999260e-03f, 1.002846145e-03f, 1.002691306e-03f, 1.002534743e-03f, 1.002376457e-03f, 1.002216448e-03f, 1.002054717e-03f, 1.001891263e-03f,
+1.001726088e-03f, 1.001559191e-03f, 1.001390573e-03f, 1.001220235e-03f, 1.001048176e-03f, 1.000874398e-03f, 1.000698900e-03f, 1.000521683e-03f, 1.000342748e-03f, 1.000162095e-03f,
+9.999797237e-04f, 9.997956354e-04f, 9.996098301e-04f, 9.994223084e-04f, 9.992330706e-04f, 9.990421172e-04f, 9.988494487e-04f, 9.986550655e-04f, 9.984589680e-04f, 9.982611566e-04f,
+9.980616318e-04f, 9.978603941e-04f, 9.976574440e-04f, 9.974527817e-04f, 9.972464079e-04f, 9.970383230e-04f, 9.968285274e-04f, 9.966170217e-04f, 9.964038062e-04f, 9.961888815e-04f,
+9.959722480e-04f, 9.957539063e-04f, 9.955338567e-04f, 9.953120998e-04f, 9.950886361e-04f, 9.948634660e-04f, 9.946365901e-04f, 9.944080088e-04f, 9.941777227e-04f, 9.939457322e-04f,
+9.937120379e-04f, 9.934766402e-04f, 9.932395397e-04f, 9.930007369e-04f, 9.927602323e-04f, 9.925180265e-04f, 9.922741198e-04f, 9.920285130e-04f, 9.917812064e-04f, 9.915322006e-04f,
+9.912814963e-04f, 9.910290938e-04f, 9.907749938e-04f, 9.905191967e-04f, 9.902617032e-04f, 9.900025137e-04f, 9.897416289e-04f, 9.894790493e-04f, 9.892147754e-04f, 9.889488078e-04f,
+9.886811471e-04f, 9.884117938e-04f, 9.881407485e-04f, 9.878680118e-04f, 9.875935842e-04f, 9.873174664e-04f, 9.870396588e-04f, 9.867601622e-04f, 9.864789770e-04f, 9.861961039e-04f,
+9.859115434e-04f, 9.856252962e-04f, 9.853373628e-04f, 9.850477439e-04f, 9.847564400e-04f, 9.844634518e-04f, 9.841687799e-04f, 9.838724248e-04f, 9.835743873e-04f, 9.832746678e-04f,
+9.829732671e-04f, 9.826701857e-04f, 9.823654244e-04f, 9.820589836e-04f, 9.817508641e-04f, 9.814410664e-04f, 9.811295913e-04f, 9.808164394e-04f, 9.805016112e-04f, 9.801851075e-04f,
+9.798669289e-04f, 9.795470760e-04f, 9.792255496e-04f, 9.789023502e-04f, 9.785774785e-04f, 9.782509353e-04f, 9.779227211e-04f, 9.775928366e-04f, 9.772612825e-04f, 9.769280595e-04f,
+9.765931682e-04f, 9.762566094e-04f, 9.759183836e-04f, 9.755784917e-04f, 9.752369343e-04f, 9.748937120e-04f, 9.745488257e-04f, 9.742022759e-04f, 9.738540633e-04f, 9.735041888e-04f,
+9.731526530e-04f, 9.727994565e-04f, 9.724446001e-04f, 9.720880846e-04f, 9.717299106e-04f, 9.713700789e-04f, 9.710085901e-04f, 9.706454451e-04f, 9.702806445e-04f, 9.699141891e-04f,
+9.695460795e-04f, 9.691763167e-04f, 9.688049012e-04f, 9.684318338e-04f, 9.680571153e-04f, 9.676807464e-04f, 9.673027279e-04f, 9.669230605e-04f, 9.665417449e-04f, 9.661587821e-04f,
+9.657741726e-04f, 9.653879173e-04f, 9.650000169e-04f, 9.646104723e-04f, 9.642192841e-04f, 9.638264532e-04f, 9.634319803e-04f, 9.630358663e-04f, 9.626381118e-04f, 9.622387178e-04f,
+9.618376849e-04f, 9.614350140e-04f, 9.610307059e-04f, 9.606247614e-04f, 9.602171812e-04f, 9.598079662e-04f, 9.593971172e-04f, 9.589846350e-04f, 9.585705204e-04f, 9.581547742e-04f,
+9.577373973e-04f, 9.573183904e-04f, 9.568977544e-04f, 9.564754902e-04f, 9.560515984e-04f, 9.556260801e-04f, 9.551989359e-04f, 9.547701668e-04f, 9.543397736e-04f, 9.539077572e-04f,
+9.534741183e-04f, 9.530388578e-04f, 9.526019766e-04f, 9.521634756e-04f, 9.517233555e-04f, 9.512816173e-04f, 9.508382618e-04f, 9.503932898e-04f, 9.499467024e-04f, 9.494985002e-04f,
+9.490486842e-04f, 9.485972553e-04f, 9.481442143e-04f, 9.476895622e-04f, 9.472332997e-04f, 9.467754279e-04f, 9.463159475e-04f, 9.458548596e-04f, 9.453921649e-04f, 9.449278644e-04f,
+9.444619589e-04f, 9.439944494e-04f, 9.435253368e-04f, 9.430546220e-04f, 9.425823059e-04f, 9.421083894e-04f, 9.416328735e-04f, 9.411557590e-04f, 9.406770469e-04f, 9.401967381e-04f,
+9.397148335e-04f, 9.392313341e-04f, 9.387462407e-04f, 9.382595544e-04f, 9.377712761e-04f, 9.372814067e-04f, 9.367899471e-04f, 9.362968984e-04f, 9.358022613e-04f, 9.353060370e-04f,
+9.348082264e-04f, 9.343088303e-04f, 9.338078498e-04f, 9.333052859e-04f, 9.328011395e-04f, 9.322954115e-04f, 9.317881030e-04f, 9.312792149e-04f, 9.307687482e-04f, 9.302567038e-04f,
+9.297430829e-04f, 9.292278862e-04f, 9.287111149e-04f, 9.281927698e-04f, 9.276728521e-04f, 9.271513627e-04f, 9.266283026e-04f, 9.261036728e-04f, 9.255774743e-04f, 9.250497080e-04f,
+9.245203751e-04f, 9.239894766e-04f, 9.234570133e-04f, 9.229229864e-04f, 9.223873969e-04f, 9.218502458e-04f, 9.213115341e-04f, 9.207712629e-04f, 9.202294331e-04f, 9.196860458e-04f,
+9.191411021e-04f, 9.185946029e-04f, 9.180465494e-04f, 9.174969425e-04f, 9.169457833e-04f, 9.163930729e-04f, 9.158388123e-04f, 9.152830025e-04f, 9.147256446e-04f, 9.141667398e-04f,
+9.136062889e-04f, 9.130442931e-04f, 9.124807535e-04f, 9.119156711e-04f, 9.113490471e-04f, 9.107808824e-04f, 9.102111781e-04f, 9.096399354e-04f, 9.090671553e-04f, 9.084928388e-04f,
+9.079169872e-04f, 9.073396014e-04f, 9.067606826e-04f, 9.061802318e-04f, 9.055982502e-04f, 9.050147388e-04f, 9.044296988e-04f, 9.038431313e-04f, 9.032550373e-04f, 9.026654180e-04f,
+9.020742745e-04f, 9.014816079e-04f, 9.008874193e-04f, 9.002917099e-04f, 8.996944807e-04f, 8.990957329e-04f, 8.984954676e-04f, 8.978936860e-04f, 8.972903892e-04f, 8.966855782e-04f,
+8.960792544e-04f, 8.954714187e-04f, 8.948620724e-04f, 8.942512165e-04f, 8.936388523e-04f, 8.930249808e-04f, 8.924096033e-04f, 8.917927209e-04f, 8.911743348e-04f, 8.905544460e-04f,
+8.899330559e-04f, 8.893101654e-04f, 8.886857759e-04f, 8.880598885e-04f, 8.874325043e-04f, 8.868036245e-04f, 8.861732504e-04f, 8.855413830e-04f, 8.849080236e-04f, 8.842731734e-04f,
+8.836368335e-04f, 8.829990052e-04f, 8.823596896e-04f, 8.817188879e-04f, 8.810766014e-04f, 8.804328312e-04f, 8.797875785e-04f, 8.791408445e-04f, 8.784926305e-04f, 8.778429377e-04f,
+8.771917672e-04f, 8.765391203e-04f, 8.758849983e-04f, 8.752294022e-04f, 8.745723334e-04f, 8.739137931e-04f, 8.732537825e-04f, 8.725923028e-04f, 8.719293553e-04f, 8.712649411e-04f,
+8.705990617e-04f, 8.699317181e-04f, 8.692629116e-04f, 8.685926435e-04f, 8.679209151e-04f, 8.672477275e-04f, 8.665730820e-04f, 8.658969799e-04f, 8.652194225e-04f, 8.645404109e-04f,
+8.638599465e-04f, 8.631780305e-04f, 8.624946642e-04f, 8.618098489e-04f, 8.611235858e-04f, 8.604358763e-04f, 8.597467215e-04f, 8.590561228e-04f, 8.583640814e-04f, 8.576705986e-04f,
+8.569756758e-04f, 8.562793142e-04f, 8.555815151e-04f, 8.548822798e-04f, 8.541816096e-04f, 8.534795058e-04f, 8.527759696e-04f, 8.520710025e-04f, 8.513646057e-04f, 8.506567804e-04f,
+8.499475281e-04f, 8.492368501e-04f, 8.485247475e-04f, 8.478112219e-04f, 8.470962744e-04f, 8.463799065e-04f, 8.456621194e-04f, 8.449429145e-04f, 8.442222930e-04f, 8.435002564e-04f,
+8.427768060e-04f, 8.420519430e-04f, 8.413256689e-04f, 8.405979850e-04f, 8.398688925e-04f, 8.391383930e-04f, 8.384064877e-04f, 8.376731780e-04f, 8.369384651e-04f, 8.362023506e-04f,
+8.354648357e-04f, 8.347259218e-04f, 8.339856103e-04f, 8.332439025e-04f, 8.325007998e-04f, 8.317563035e-04f, 8.310104151e-04f, 8.302631359e-04f, 8.295144673e-04f, 8.287644107e-04f,
+8.280129674e-04f, 8.272601388e-04f, 8.265059264e-04f, 8.257503315e-04f, 8.249933555e-04f, 8.242349997e-04f, 8.234752657e-04f, 8.227141547e-04f, 8.219516683e-04f, 8.211878077e-04f,
+8.204225744e-04f, 8.196559698e-04f, 8.188879953e-04f, 8.181186523e-04f, 8.173479423e-04f, 8.165758666e-04f, 8.158024267e-04f, 8.150276240e-04f, 8.142514599e-04f, 8.134739358e-04f,
+8.126950532e-04f, 8.119148134e-04f, 8.111332180e-04f, 8.103502684e-04f, 8.095659659e-04f, 8.087803121e-04f, 8.079933084e-04f, 8.072049562e-04f, 8.064152569e-04f, 8.056242120e-04f,
+8.048318230e-04f, 8.040380914e-04f, 8.032430184e-04f, 8.024466058e-04f, 8.016488547e-04f, 8.008497669e-04f, 8.000493436e-04f, 7.992475864e-04f, 7.984444968e-04f, 7.976400761e-04f,
+7.968343259e-04f, 7.960272477e-04f, 7.952188430e-04f, 7.944091131e-04f, 7.935980596e-04f, 7.927856840e-04f, 7.919719877e-04f, 7.911569723e-04f, 7.903406393e-04f, 7.895229900e-04f,
+7.887040261e-04f, 7.878837490e-04f, 7.870621602e-04f, 7.862392613e-04f, 7.854150536e-04f, 7.845895388e-04f, 7.837627183e-04f, 7.829345936e-04f, 7.821051663e-04f, 7.812744379e-04f,
+7.804424099e-04f, 7.796090837e-04f, 7.787744610e-04f, 7.779385432e-04f, 7.771013318e-04f, 7.762628285e-04f, 7.754230347e-04f, 7.745819519e-04f, 7.737395817e-04f, 7.728959257e-04f,
+7.720509853e-04f, 7.712047620e-04f, 7.703572576e-04f, 7.695084734e-04f, 7.686584110e-04f, 7.678070720e-04f, 7.669544579e-04f, 7.661005703e-04f, 7.652454108e-04f, 7.643889808e-04f,
+7.635312819e-04f, 7.626723158e-04f, 7.618120839e-04f, 7.609505879e-04f, 7.600878293e-04f, 7.592238096e-04f, 7.583585304e-04f, 7.574919934e-04f, 7.566242001e-04f, 7.557551520e-04f,
+7.548848508e-04f, 7.540132979e-04f, 7.531404951e-04f, 7.522664439e-04f, 7.513911459e-04f, 7.505146026e-04f, 7.496368157e-04f, 7.487577867e-04f, 7.478775173e-04f, 7.469960090e-04f,
+7.461132635e-04f, 7.452292824e-04f, 7.443440671e-04f, 7.434576195e-04f, 7.425699410e-04f, 7.416810332e-04f, 7.407908979e-04f, 7.398995366e-04f, 7.390069508e-04f, 7.381131424e-04f,
+7.372181127e-04f, 7.363218636e-04f, 7.354243965e-04f, 7.345257132e-04f, 7.336258152e-04f, 7.327247042e-04f, 7.318223818e-04f, 7.309188497e-04f, 7.300141095e-04f, 7.291081628e-04f,
+7.282010112e-04f, 7.272926565e-04f, 7.263831002e-04f, 7.254723440e-04f, 7.245603895e-04f, 7.236472385e-04f, 7.227328925e-04f, 7.218173531e-04f, 7.209006222e-04f, 7.199827012e-04f,
+7.190635920e-04f, 7.181432960e-04f, 7.172218151e-04f, 7.162991508e-04f, 7.153753049e-04f, 7.144502789e-04f, 7.135240747e-04f, 7.125966937e-04f, 7.116681378e-04f, 7.107384086e-04f,
+7.098075078e-04f, 7.088754370e-04f, 7.079421979e-04f, 7.070077923e-04f, 7.060722218e-04f, 7.051354881e-04f, 7.041975929e-04f, 7.032585379e-04f, 7.023183247e-04f, 7.013769552e-04f,
+7.004344308e-04f, 6.994907535e-04f, 6.985459249e-04f, 6.975999466e-04f, 6.966528204e-04f, 6.957045480e-04f, 6.947551311e-04f, 6.938045714e-04f, 6.928528706e-04f, 6.919000305e-04f,
+6.909460527e-04f, 6.899909390e-04f, 6.890346911e-04f, 6.880773107e-04f, 6.871187996e-04f, 6.861591594e-04f, 6.851983919e-04f, 6.842364989e-04f, 6.832734820e-04f, 6.823093430e-04f,
+6.813440837e-04f, 6.803777057e-04f, 6.794102108e-04f, 6.784416007e-04f, 6.774718773e-04f, 6.765010422e-04f, 6.755290971e-04f, 6.745560439e-04f, 6.735818843e-04f, 6.726066200e-04f,
+6.716302527e-04f, 6.706527843e-04f, 6.696742165e-04f, 6.686945511e-04f, 6.677137898e-04f, 6.667319343e-04f, 6.657489865e-04f, 6.647649481e-04f, 6.637798209e-04f, 6.627936067e-04f,
+6.618063071e-04f, 6.608179240e-04f, 6.598284592e-04f, 6.588379145e-04f, 6.578462915e-04f, 6.568535922e-04f, 6.558598183e-04f, 6.548649715e-04f, 6.538690536e-04f, 6.528720666e-04f,
+6.518740120e-04f, 6.508748917e-04f, 6.498747076e-04f, 6.488734614e-04f, 6.478711549e-04f, 6.468677898e-04f, 6.458633681e-04f, 6.448578915e-04f, 6.438513618e-04f, 6.428437807e-04f,
+6.418351502e-04f, 6.408254721e-04f, 6.398147480e-04f, 6.388029799e-04f, 6.377901695e-04f, 6.367763188e-04f, 6.357614294e-04f, 6.347455032e-04f, 6.337285420e-04f, 6.327105477e-04f,
+6.316915220e-04f, 6.306714669e-04f, 6.296503840e-04f, 6.286282753e-04f, 6.276051426e-04f, 6.265809877e-04f, 6.255558125e-04f, 6.245296187e-04f, 6.235024082e-04f, 6.224741829e-04f,
+6.214449446e-04f, 6.204146951e-04f, 6.193834362e-04f, 6.183511699e-04f, 6.173178980e-04f, 6.162836223e-04f, 6.152483446e-04f, 6.142120669e-04f, 6.131747909e-04f, 6.121365186e-04f,
+6.110972517e-04f, 6.100569921e-04f, 6.090157418e-04f, 6.079735025e-04f, 6.069302761e-04f, 6.058860645e-04f, 6.048408696e-04f, 6.037946932e-04f, 6.027475371e-04f, 6.016994033e-04f,
+6.006502936e-04f, 5.996002100e-04f, 5.985491542e-04f, 5.974971281e-04f, 5.964441337e-04f, 5.953901728e-04f, 5.943352472e-04f, 5.932793590e-04f, 5.922225099e-04f, 5.911647018e-04f,
+5.901059367e-04f, 5.890462164e-04f, 5.879855428e-04f, 5.869239178e-04f, 5.858613432e-04f, 5.847978211e-04f, 5.837333533e-04f, 5.826679416e-04f, 5.816015881e-04f, 5.805342945e-04f,
+5.794660628e-04f, 5.783968949e-04f, 5.773267927e-04f, 5.762557580e-04f, 5.751837930e-04f, 5.741108993e-04f, 5.730370789e-04f, 5.719623339e-04f, 5.708866659e-04f, 5.698100771e-04f,
+5.687325692e-04f, 5.676541443e-04f, 5.665748042e-04f, 5.654945508e-04f, 5.644133862e-04f, 5.633313121e-04f, 5.622483306e-04f, 5.611644435e-04f, 5.600796528e-04f, 5.589939605e-04f,
+5.579073683e-04f, 5.568198784e-04f, 5.557314926e-04f, 5.546422129e-04f, 5.535520411e-04f, 5.524609793e-04f, 5.513690294e-04f, 5.502761932e-04f, 5.491824729e-04f, 5.480878702e-04f,
+5.469923872e-04f, 5.458960258e-04f, 5.447987879e-04f, 5.437006755e-04f, 5.426016906e-04f, 5.415018351e-04f, 5.404011110e-04f, 5.392995201e-04f, 5.381970645e-04f, 5.370937462e-04f,
+5.359895671e-04f, 5.348845291e-04f, 5.337786342e-04f, 5.326718844e-04f, 5.315642817e-04f, 5.304558279e-04f, 5.293465252e-04f, 5.282363754e-04f, 5.271253805e-04f, 5.260135425e-04f,
+5.249008634e-04f, 5.237873451e-04f, 5.226729896e-04f, 5.215577990e-04f, 5.204417751e-04f, 5.193249200e-04f, 5.182072356e-04f, 5.170887239e-04f, 5.159693870e-04f, 5.148492267e-04f,
+5.137282451e-04f, 5.126064442e-04f, 5.114838259e-04f, 5.103603923e-04f, 5.092361453e-04f, 5.081110869e-04f, 5.069852192e-04f, 5.058585441e-04f, 5.047310636e-04f, 5.036027798e-04f,
+5.024736945e-04f, 5.013438099e-04f, 5.002131279e-04f, 4.990816505e-04f, 4.979493798e-04f, 4.968163177e-04f, 4.956824662e-04f, 4.945478274e-04f, 4.934124032e-04f, 4.922761957e-04f,
+4.911392069e-04f, 4.900014388e-04f, 4.888628934e-04f, 4.877235728e-04f, 4.865834789e-04f, 4.854426137e-04f, 4.843009794e-04f, 4.831585778e-04f, 4.820154111e-04f, 4.808714812e-04f,
+4.797267902e-04f, 4.785813400e-04f, 4.774351329e-04f, 4.762881706e-04f, 4.751404554e-04f, 4.739919891e-04f, 4.728427739e-04f, 4.716928118e-04f, 4.705421048e-04f, 4.693906550e-04f,
+4.682384643e-04f, 4.670855348e-04f, 4.659318686e-04f, 4.647774677e-04f, 4.636223342e-04f, 4.624664700e-04f, 4.613098772e-04f, 4.601525579e-04f, 4.589945142e-04f, 4.578357479e-04f,
+4.566762613e-04f, 4.555160563e-04f, 4.543551351e-04f, 4.531934996e-04f, 4.520311519e-04f, 4.508680941e-04f, 4.497043281e-04f, 4.485398562e-04f, 4.473746803e-04f, 4.462088024e-04f,
+4.450422247e-04f, 4.438749492e-04f, 4.427069780e-04f, 4.415383131e-04f, 4.403689566e-04f, 4.391989105e-04f, 4.380281769e-04f, 4.368567579e-04f, 4.356846556e-04f, 4.345118720e-04f,
+4.333384092e-04f, 4.321642692e-04f, 4.309894542e-04f, 4.298139661e-04f, 4.286378072e-04f, 4.274609794e-04f, 4.262834848e-04f, 4.251053255e-04f, 4.239265036e-04f, 4.227470211e-04f,
+4.215668802e-04f, 4.203860829e-04f, 4.192046313e-04f, 4.180225274e-04f, 4.168397735e-04f, 4.156563715e-04f, 4.144723235e-04f, 4.132876316e-04f, 4.121022980e-04f, 4.109163246e-04f,
+4.097297136e-04f, 4.085424671e-04f, 4.073545872e-04f, 4.061660759e-04f, 4.049769354e-04f, 4.037871678e-04f, 4.025967750e-04f, 4.014057593e-04f, 4.002141228e-04f, 3.990218675e-04f,
+3.978289955e-04f, 3.966355090e-04f, 3.954414100e-04f, 3.942467006e-04f, 3.930513829e-04f, 3.918554591e-04f, 3.906589313e-04f, 3.894618015e-04f, 3.882640719e-04f, 3.870657445e-04f,
+3.858668215e-04f, 3.846673050e-04f, 3.834671971e-04f, 3.822664999e-04f, 3.810652155e-04f, 3.798633460e-04f, 3.786608936e-04f, 3.774578604e-04f, 3.762542484e-04f, 3.750500598e-04f,
+3.738452967e-04f, 3.726399612e-04f, 3.714340555e-04f, 3.702275817e-04f, 3.690205418e-04f, 3.678129380e-04f, 3.666047725e-04f, 3.653960473e-04f, 3.641867646e-04f, 3.629769265e-04f,
+3.617665351e-04f, 3.605555925e-04f, 3.593441010e-04f, 3.581320625e-04f, 3.569194793e-04f, 3.557063534e-04f, 3.544926871e-04f, 3.532784823e-04f, 3.520637414e-04f, 3.508484663e-04f,
+3.496326592e-04f, 3.484163223e-04f, 3.471994577e-04f, 3.459820675e-04f, 3.447641539e-04f, 3.435457190e-04f, 3.423267650e-04f, 3.411072939e-04f, 3.398873080e-04f, 3.386668093e-04f,
+3.374458000e-04f, 3.362242823e-04f, 3.350022582e-04f, 3.337797300e-04f, 3.325566998e-04f, 3.313331697e-04f, 3.301091418e-04f, 3.288846184e-04f, 3.276596015e-04f, 3.264340934e-04f,
+3.252080961e-04f, 3.239816118e-04f, 3.227546427e-04f, 3.215271908e-04f, 3.202992585e-04f, 3.190708478e-04f, 3.178419608e-04f, 3.166125997e-04f, 3.153827667e-04f, 3.141524640e-04f,
+3.129216936e-04f, 3.116904578e-04f, 3.104587587e-04f, 3.092265984e-04f, 3.079939792e-04f, 3.067609031e-04f, 3.055273724e-04f, 3.042933891e-04f, 3.030589555e-04f, 3.018240737e-04f,
+3.005887459e-04f, 2.993529743e-04f, 2.981167609e-04f, 2.968801081e-04f, 2.956430178e-04f, 2.944054924e-04f, 2.931675339e-04f, 2.919291446e-04f, 2.906903265e-04f, 2.894510819e-04f,
+2.882114130e-04f, 2.869713219e-04f, 2.857308107e-04f, 2.844898817e-04f, 2.832485370e-04f, 2.820067788e-04f, 2.807646093e-04f, 2.795220306e-04f, 2.782790449e-04f, 2.770356543e-04f,
+2.757918612e-04f, 2.745476675e-04f, 2.733030756e-04f, 2.720580875e-04f, 2.708127056e-04f, 2.695669318e-04f, 2.683207684e-04f, 2.670742177e-04f, 2.658272817e-04f, 2.645799627e-04f,
+2.633322628e-04f, 2.620841841e-04f, 2.608357290e-04f, 2.595868996e-04f, 2.583376980e-04f, 2.570881265e-04f, 2.558381871e-04f, 2.545878822e-04f, 2.533372139e-04f, 2.520861843e-04f,
+2.508347957e-04f, 2.495830502e-04f, 2.483309500e-04f, 2.470784974e-04f, 2.458256944e-04f, 2.445725434e-04f, 2.433190464e-04f, 2.420652057e-04f, 2.408110234e-04f, 2.395565018e-04f,
+2.383016430e-04f, 2.370464492e-04f, 2.357909227e-04f, 2.345350655e-04f, 2.332788800e-04f, 2.320223682e-04f, 2.307655324e-04f, 2.295083747e-04f, 2.282508975e-04f, 2.269931027e-04f,
+2.257349928e-04f, 2.244765698e-04f, 2.232178359e-04f, 2.219587933e-04f, 2.206994443e-04f, 2.194397910e-04f, 2.181798357e-04f, 2.169195804e-04f, 2.156590275e-04f, 2.143981791e-04f,
+2.131370373e-04f, 2.118756045e-04f, 2.106138829e-04f, 2.093518745e-04f, 2.080895816e-04f, 2.068270064e-04f, 2.055641512e-04f, 2.043010180e-04f, 2.030376092e-04f, 2.017739268e-04f,
+2.005099732e-04f, 1.992457505e-04f, 1.979812609e-04f, 1.967165066e-04f, 1.954514898e-04f, 1.941862128e-04f, 1.929206776e-04f, 1.916548867e-04f, 1.903888420e-04f, 1.891225459e-04f,
+1.878560005e-04f, 1.865892080e-04f, 1.853221708e-04f, 1.840548908e-04f, 1.827873705e-04f, 1.815196119e-04f, 1.802516173e-04f, 1.789833888e-04f, 1.777149288e-04f, 1.764462393e-04f,
+1.751773227e-04f, 1.739081810e-04f, 1.726388166e-04f, 1.713692316e-04f, 1.700994283e-04f, 1.688294087e-04f, 1.675591753e-04f, 1.662887301e-04f, 1.650180754e-04f, 1.637472133e-04f,
+1.624761461e-04f, 1.612048761e-04f, 1.599334053e-04f, 1.586617361e-04f, 1.573898706e-04f, 1.561178111e-04f, 1.548455597e-04f, 1.535731186e-04f, 1.523004902e-04f, 1.510276765e-04f,
+1.497546798e-04f, 1.484815023e-04f, 1.472081463e-04f, 1.459346139e-04f, 1.446609073e-04f, 1.433870289e-04f, 1.421129806e-04f, 1.408387649e-04f, 1.395643839e-04f, 1.382898397e-04f,
+1.370151347e-04f, 1.357402711e-04f, 1.344652510e-04f, 1.331900767e-04f, 1.319147503e-04f, 1.306392742e-04f, 1.293636504e-04f, 1.280878813e-04f, 1.268119690e-04f, 1.255359158e-04f,
+1.242597238e-04f, 1.229833953e-04f, 1.217069325e-04f, 1.204303377e-04f, 1.191536129e-04f, 1.178767605e-04f, 1.165997827e-04f, 1.153226816e-04f, 1.140454595e-04f, 1.127681187e-04f,
+1.114906612e-04f, 1.102130894e-04f, 1.089354054e-04f, 1.076576115e-04f, 1.063797099e-04f, 1.051017028e-04f, 1.038235923e-04f, 1.025453809e-04f, 1.012670705e-04f, 9.998866356e-05f,
+9.871016216e-05f, 9.743156856e-05f, 9.615288497e-05f, 9.487411361e-05f, 9.359525669e-05f, 9.231631643e-05f, 9.103729504e-05f, 8.975819474e-05f, 8.847901775e-05f, 8.719976628e-05f,
+8.592044255e-05f, 8.464104878e-05f, 8.336158718e-05f, 8.208205996e-05f, 8.080246935e-05f, 7.952281756e-05f, 7.824310680e-05f, 7.696333930e-05f, 7.568351726e-05f, 7.440364291e-05f,
+7.312371845e-05f, 7.184374611e-05f, 7.056372810e-05f, 6.928366664e-05f, 6.800356394e-05f, 6.672342221e-05f, 6.544324368e-05f, 6.416303056e-05f, 6.288278506e-05f, 6.160250940e-05f,
+6.032220580e-05f, 5.904187646e-05f, 5.776152361e-05f, 5.648114946e-05f, 5.520075622e-05f, 5.392034611e-05f, 5.263992134e-05f, 5.135948413e-05f, 5.007903669e-05f, 4.879858124e-05f,
+4.751811999e-05f, 4.623765516e-05f, 4.495718895e-05f, 4.367672359e-05f, 4.239626128e-05f, 4.111580424e-05f, 3.983535468e-05f, 3.855491482e-05f, 3.727448687e-05f, 3.599407304e-05f,
+3.471367554e-05f, 3.343329659e-05f, 3.215293840e-05f, 3.087260318e-05f, 2.959229314e-05f, 2.831201050e-05f, 2.703175747e-05f, 2.575153625e-05f, 2.447134907e-05f, 2.319119812e-05f,
+2.191108563e-05f, 2.063101380e-05f, 1.935098484e-05f, 1.807100096e-05f, 1.679106438e-05f, 1.551117730e-05f, 1.423134194e-05f, 1.295156049e-05f, 1.167183518e-05f, 1.039216821e-05f,
+9.112561781e-06f, 7.833018115e-06f, 6.553539413e-06f, 5.274127885e-06f, 3.994785738e-06f, 2.715515180e-06f, 1.436318418e-06f, 1.571976585e-07f, -1.121844892e-06f, -2.400807026e-06f,
+-3.679686538e-06f, -4.958481223e-06f, -6.237188874e-06f, -7.515807286e-06f, -8.794334255e-06f, -1.007276758e-05f, -1.135110504e-05f, -1.262934445e-05f, -1.390748360e-05f, -1.518552029e-05f,
+-1.646345231e-05f, -1.774127746e-05f, -1.901899353e-05f, -2.029659834e-05f, -2.157408966e-05f, -2.285146531e-05f, -2.412872307e-05f, -2.540586076e-05f, -2.668287616e-05f, -2.795976709e-05f,
+-2.923653133e-05f, -3.051316669e-05f, -3.178967098e-05f, -3.306604198e-05f, -3.434227751e-05f, -3.561837536e-05f, -3.689433334e-05f, -3.817014925e-05f, -3.944582090e-05f, -4.072134608e-05f,
+-4.199672260e-05f, -4.327194827e-05f, -4.454702088e-05f, -4.582193825e-05f, -4.709669819e-05f, -4.837129848e-05f, -4.964573695e-05f, -5.092001140e-05f, -5.219411963e-05f, -5.346805946e-05f,
+-5.474182869e-05f, -5.601542513e-05f, -5.728884659e-05f, -5.856209088e-05f, -5.983515580e-05f, -6.110803917e-05f, -6.238073880e-05f, -6.365325250e-05f, -6.492557808e-05f, -6.619771336e-05f,
+-6.746965613e-05f, -6.874140423e-05f, -7.001295546e-05f, -7.128430764e-05f, -7.255545857e-05f, -7.382640608e-05f, -7.509714798e-05f, -7.636768208e-05f, -7.763800621e-05f, -7.890811817e-05f,
+-8.017801579e-05f, -8.144769689e-05f, -8.271715927e-05f, -8.398640077e-05f, -8.525541920e-05f, -8.652421237e-05f, -8.779277812e-05f, -8.906111426e-05f, -9.032921861e-05f, -9.159708899e-05f,
+-9.286472324e-05f, -9.413211916e-05f, -9.539927458e-05f, -9.666618733e-05f, -9.793285524e-05f, -9.919927612e-05f, -1.004654478e-04f, -1.017313681e-04f, -1.029970349e-04f, -1.042624459e-04f,
+-1.055275991e-04f, -1.067924922e-04f, -1.080571231e-04f, -1.093214896e-04f, -1.105855895e-04f, -1.118494207e-04f, -1.131129809e-04f, -1.143762681e-04f, -1.156392801e-04f, -1.169020146e-04f,
+-1.181644695e-04f, -1.194266428e-04f, -1.206885321e-04f, -1.219501353e-04f, -1.232114503e-04f, -1.244724750e-04f, -1.257332070e-04f, -1.269936444e-04f, -1.282537848e-04f, -1.295136262e-04f,
+-1.307731665e-04f, -1.320324033e-04f, -1.332913347e-04f, -1.345499583e-04f, -1.358082722e-04f, -1.370662740e-04f, -1.383239617e-04f, -1.395813331e-04f, -1.408383861e-04f, -1.420951184e-04f,
+-1.433515280e-04f, -1.446076127e-04f, -1.458633703e-04f, -1.471187987e-04f, -1.483738957e-04f, -1.496286592e-04f, -1.508830871e-04f, -1.521371771e-04f, -1.533909272e-04f, -1.546443352e-04f,
+-1.558973989e-04f, -1.571501162e-04f, -1.584024850e-04f, -1.596545031e-04f, -1.609061684e-04f, -1.621574787e-04f, -1.634084319e-04f, -1.646590258e-04f, -1.659092584e-04f, -1.671591274e-04f,
+-1.684086307e-04f, -1.696577663e-04f, -1.709065319e-04f, -1.721549254e-04f, -1.734029447e-04f, -1.746505877e-04f, -1.758978521e-04f, -1.771447360e-04f, -1.783912371e-04f, -1.796373533e-04f,
+-1.808830825e-04f, -1.821284226e-04f, -1.833733714e-04f, -1.846179268e-04f, -1.858620867e-04f, -1.871058489e-04f, -1.883492114e-04f, -1.895921719e-04f, -1.908347284e-04f, -1.920768788e-04f,
+-1.933186209e-04f, -1.945599526e-04f, -1.958008718e-04f, -1.970413763e-04f, -1.982814641e-04f, -1.995211330e-04f, -2.007603810e-04f, -2.019992058e-04f, -2.032376054e-04f, -2.044755777e-04f,
+-2.057131205e-04f, -2.069502317e-04f, -2.081869093e-04f, -2.094231511e-04f, -2.106589550e-04f, -2.118943189e-04f, -2.131292406e-04f, -2.143637181e-04f, -2.155977494e-04f, -2.168313321e-04f,
+-2.180644643e-04f, -2.192971439e-04f, -2.205293688e-04f, -2.217611367e-04f, -2.229924458e-04f, -2.242232937e-04f, -2.254536785e-04f, -2.266835981e-04f, -2.279130503e-04f, -2.291420331e-04f,
+-2.303705443e-04f, -2.315985819e-04f, -2.328261438e-04f, -2.340532278e-04f, -2.352798319e-04f, -2.365059540e-04f, -2.377315920e-04f, -2.389567439e-04f, -2.401814074e-04f, -2.414055806e-04f,
+-2.426292613e-04f, -2.438524475e-04f, -2.450751371e-04f, -2.462973280e-04f, -2.475190181e-04f, -2.487402053e-04f, -2.499608876e-04f, -2.511810629e-04f, -2.524007291e-04f, -2.536198841e-04f,
+-2.548385258e-04f, -2.560566522e-04f, -2.572742612e-04f, -2.584913507e-04f, -2.597079187e-04f, -2.609239630e-04f, -2.621394816e-04f, -2.633544725e-04f, -2.645689336e-04f, -2.657828628e-04f,
+-2.669962580e-04f, -2.682091171e-04f, -2.694214382e-04f, -2.706332191e-04f, -2.718444578e-04f, -2.730551523e-04f, -2.742653004e-04f, -2.754749001e-04f, -2.766839493e-04f, -2.778924461e-04f,
+-2.791003882e-04f, -2.803077738e-04f, -2.815146007e-04f, -2.827208668e-04f, -2.839265702e-04f, -2.851317088e-04f, -2.863362805e-04f, -2.875402833e-04f, -2.887437151e-04f, -2.899465739e-04f,
+-2.911488576e-04f, -2.923505642e-04f, -2.935516917e-04f, -2.947522381e-04f, -2.959522011e-04f, -2.971515790e-04f, -2.983503695e-04f, -2.995485707e-04f, -3.007461805e-04f, -3.019431969e-04f,
+-3.031396179e-04f, -3.043354414e-04f, -3.055306654e-04f, -3.067252879e-04f, -3.079193069e-04f, -3.091127202e-04f, -3.103055259e-04f, -3.114977220e-04f, -3.126893065e-04f, -3.138802772e-04f,
+-3.150706323e-04f, -3.162603696e-04f, -3.174494872e-04f, -3.186379830e-04f, -3.198258550e-04f, -3.210131013e-04f, -3.221997198e-04f, -3.233857084e-04f, -3.245710652e-04f, -3.257557882e-04f,
+-3.269398753e-04f, -3.281233245e-04f, -3.293061339e-04f, -3.304883015e-04f, -3.316698251e-04f, -3.328507029e-04f, -3.340309328e-04f, -3.352105128e-04f, -3.363894409e-04f, -3.375677152e-04f,
+-3.387453336e-04f, -3.399222941e-04f, -3.410985947e-04f, -3.422742335e-04f, -3.434492085e-04f, -3.446235176e-04f, -3.457971589e-04f, -3.469701303e-04f, -3.481424300e-04f, -3.493140559e-04f,
+-3.504850060e-04f, -3.516552783e-04f, -3.528248709e-04f, -3.539937818e-04f, -3.551620090e-04f, -3.563295505e-04f, -3.574964044e-04f, -3.586625687e-04f, -3.598280413e-04f, -3.609928204e-04f,
+-3.621569039e-04f, -3.633202900e-04f, -3.644829765e-04f, -3.656449616e-04f, -3.668062433e-04f, -3.679668196e-04f, -3.691266886e-04f, -3.702858482e-04f, -3.714442966e-04f, -3.726020318e-04f,
+-3.737590518e-04f, -3.749153547e-04f, -3.760709385e-04f, -3.772258012e-04f, -3.783799410e-04f, -3.795333558e-04f, -3.806860437e-04f, -3.818380027e-04f, -3.829892310e-04f, -3.841397265e-04f,
+-3.852894873e-04f, -3.864385116e-04f, -3.875867972e-04f, -3.887343424e-04f, -3.898811451e-04f, -3.910272034e-04f, -3.921725154e-04f, -3.933170792e-04f, -3.944608928e-04f, -3.956039543e-04f,
+-3.967462617e-04f, -3.978878131e-04f, -3.990286067e-04f, -4.001686404e-04f, -4.013079124e-04f, -4.024464207e-04f, -4.035841635e-04f, -4.047211387e-04f, -4.058573445e-04f, -4.069927789e-04f,
+-4.081274401e-04f, -4.092613261e-04f, -4.103944350e-04f, -4.115267649e-04f, -4.126583139e-04f, -4.137890800e-04f, -4.149190615e-04f, -4.160482563e-04f, -4.171766626e-04f, -4.183042784e-04f,
+-4.194311019e-04f, -4.205571312e-04f, -4.216823643e-04f, -4.228067994e-04f, -4.239304346e-04f, -4.250532680e-04f, -4.261752976e-04f, -4.272965217e-04f, -4.284169382e-04f, -4.295365454e-04f,
+-4.306553413e-04f, -4.317733240e-04f, -4.328904918e-04f, -4.340068426e-04f, -4.351223746e-04f, -4.362370860e-04f, -4.373509748e-04f, -4.384640392e-04f, -4.395762773e-04f, -4.406876872e-04f,
+-4.417982671e-04f, -4.429080150e-04f, -4.440169292e-04f, -4.451250078e-04f, -4.462322489e-04f, -4.473386505e-04f, -4.484442110e-04f, -4.495489284e-04f, -4.506528008e-04f, -4.517558264e-04f,
+-4.528580034e-04f, -4.539593298e-04f, -4.550598039e-04f, -4.561594238e-04f, -4.572581876e-04f, -4.583560935e-04f, -4.594531397e-04f, -4.605493243e-04f, -4.616446454e-04f, -4.627391012e-04f,
+-4.638326899e-04f, -4.649254097e-04f, -4.660172587e-04f, -4.671082350e-04f, -4.681983369e-04f, -4.692875625e-04f, -4.703759100e-04f, -4.714633775e-04f, -4.725499633e-04f, -4.736356655e-04f,
+-4.747204822e-04f, -4.758044117e-04f, -4.768874522e-04f, -4.779696018e-04f, -4.790508586e-04f, -4.801312210e-04f, -4.812106871e-04f, -4.822892550e-04f, -4.833669230e-04f, -4.844436892e-04f,
+-4.855195519e-04f, -4.865945092e-04f, -4.876685594e-04f, -4.887417006e-04f, -4.898139310e-04f, -4.908852489e-04f, -4.919556524e-04f, -4.930251398e-04f, -4.940937093e-04f, -4.951613590e-04f,
+-4.962280871e-04f, -4.972938920e-04f, -4.983587718e-04f, -4.994227247e-04f, -5.004857489e-04f, -5.015478427e-04f, -5.026090043e-04f, -5.036692318e-04f, -5.047285236e-04f, -5.057868779e-04f,
+-5.068442928e-04f, -5.079007666e-04f, -5.089562976e-04f, -5.100108840e-04f, -5.110645239e-04f, -5.121172157e-04f, -5.131689576e-04f, -5.142197478e-04f, -5.152695846e-04f, -5.163184662e-04f,
+-5.173663908e-04f, -5.184133568e-04f, -5.194593623e-04f, -5.205044056e-04f, -5.215484849e-04f, -5.225915986e-04f, -5.236337448e-04f, -5.246749219e-04f, -5.257151280e-04f, -5.267543615e-04f,
+-5.277926206e-04f, -5.288299035e-04f, -5.298662086e-04f, -5.309015341e-04f, -5.319358783e-04f, -5.329692394e-04f, -5.340016158e-04f, -5.350330056e-04f, -5.360634073e-04f, -5.370928190e-04f,
+-5.381212390e-04f, -5.391486656e-04f, -5.401750972e-04f, -5.412005319e-04f, -5.422249681e-04f, -5.432484041e-04f, -5.442708382e-04f, -5.452922686e-04f, -5.463126937e-04f, -5.473321117e-04f,
+-5.483505210e-04f, -5.493679198e-04f, -5.503843065e-04f, -5.513996793e-04f, -5.524140366e-04f, -5.534273767e-04f, -5.544396979e-04f, -5.554509984e-04f, -5.564612767e-04f, -5.574705310e-04f,
+-5.584787597e-04f, -5.594859610e-04f, -5.604921333e-04f, -5.614972750e-04f, -5.625013842e-04f, -5.635044595e-04f, -5.645064990e-04f, -5.655075012e-04f, -5.665074643e-04f, -5.675063867e-04f,
+-5.685042668e-04f, -5.695011028e-04f, -5.704968932e-04f, -5.714916362e-04f, -5.724853302e-04f, -5.734779735e-04f, -5.744695646e-04f, -5.754601017e-04f, -5.764495832e-04f, -5.774380074e-04f,
+-5.784253728e-04f, -5.794116776e-04f, -5.803969202e-04f, -5.813810991e-04f, -5.823642125e-04f, -5.833462588e-04f, -5.843272364e-04f, -5.853071436e-04f, -5.862859789e-04f, -5.872637406e-04f,
+-5.882404271e-04f, -5.892160367e-04f, -5.901905679e-04f, -5.911640190e-04f, -5.921363883e-04f, -5.931076744e-04f, -5.940778755e-04f, -5.950469902e-04f, -5.960150166e-04f, -5.969819533e-04f,
+-5.979477987e-04f, -5.989125511e-04f, -5.998762089e-04f, -6.008387706e-04f, -6.018002345e-04f, -6.027605991e-04f, -6.037198627e-04f, -6.046780238e-04f, -6.056350808e-04f, -6.065910320e-04f,
+-6.075458760e-04f, -6.084996111e-04f, -6.094522358e-04f, -6.104037484e-04f, -6.113541474e-04f, -6.123034312e-04f, -6.132515982e-04f, -6.141986470e-04f, -6.151445758e-04f, -6.160893832e-04f,
+-6.170330675e-04f, -6.179756272e-04f, -6.189170608e-04f, -6.198573667e-04f, -6.207965433e-04f, -6.217345891e-04f, -6.226715026e-04f, -6.236072821e-04f, -6.245419261e-04f, -6.254754331e-04f,
+-6.264078016e-04f, -6.273390300e-04f, -6.282691167e-04f, -6.291980602e-04f, -6.301258591e-04f, -6.310525117e-04f, -6.319780165e-04f, -6.329023719e-04f, -6.338255766e-04f, -6.347476289e-04f,
+-6.356685273e-04f, -6.365882703e-04f, -6.375068564e-04f, -6.384242840e-04f, -6.393405517e-04f, -6.402556579e-04f, -6.411696012e-04f, -6.420823799e-04f, -6.429939927e-04f, -6.439044379e-04f,
+-6.448137142e-04f, -6.457218199e-04f, -6.466287537e-04f, -6.475345140e-04f, -6.484390992e-04f, -6.493425080e-04f, -6.502447389e-04f, -6.511457902e-04f, -6.520456607e-04f, -6.529443487e-04f,
+-6.538418528e-04f, -6.547381715e-04f, -6.556333033e-04f, -6.565272468e-04f, -6.574200005e-04f, -6.583115630e-04f, -6.592019327e-04f, -6.600911081e-04f, -6.609790879e-04f, -6.618658706e-04f,
+-6.627514547e-04f, -6.636358387e-04f, -6.645190212e-04f, -6.654010007e-04f, -6.662817758e-04f, -6.671613451e-04f, -6.680397071e-04f, -6.689168603e-04f, -6.697928033e-04f, -6.706675347e-04f,
+-6.715410530e-04f, -6.724133568e-04f, -6.732844446e-04f, -6.741543151e-04f, -6.750229668e-04f, -6.758903983e-04f, -6.767566081e-04f, -6.776215949e-04f, -6.784853571e-04f, -6.793478934e-04f,
+-6.802092024e-04f, -6.810692827e-04f, -6.819281328e-04f, -6.827857514e-04f, -6.836421370e-04f, -6.844972882e-04f, -6.853512036e-04f, -6.862038819e-04f, -6.870553216e-04f, -6.879055213e-04f,
+-6.887544796e-04f, -6.896021952e-04f, -6.904486667e-04f, -6.912938926e-04f, -6.921378716e-04f, -6.929806024e-04f, -6.938220834e-04f, -6.946623134e-04f, -6.955012910e-04f, -6.963390147e-04f,
+-6.971754833e-04f, -6.980106953e-04f, -6.988446495e-04f, -6.996773443e-04f, -7.005087785e-04f, -7.013389507e-04f, -7.021678596e-04f, -7.029955038e-04f, -7.038218819e-04f, -7.046469925e-04f,
+-7.054708345e-04f, -7.062934063e-04f, -7.071147066e-04f, -7.079347342e-04f, -7.087534876e-04f, -7.095709656e-04f, -7.103871668e-04f, -7.112020898e-04f, -7.120157334e-04f, -7.128280961e-04f,
+-7.136391768e-04f, -7.144489740e-04f, -7.152574864e-04f, -7.160647128e-04f, -7.168706517e-04f, -7.176753020e-04f, -7.184786622e-04f, -7.192807311e-04f, -7.200815073e-04f, -7.208809896e-04f,
+-7.216791766e-04f, -7.224760671e-04f, -7.232716598e-04f, -7.240659533e-04f, -7.248589464e-04f, -7.256506377e-04f, -7.264410260e-04f, -7.272301101e-04f, -7.280178885e-04f, -7.288043601e-04f,
+-7.295895235e-04f, -7.303733775e-04f, -7.311559208e-04f, -7.319371521e-04f, -7.327170702e-04f, -7.334956738e-04f, -7.342729616e-04f, -7.350489324e-04f, -7.358235849e-04f, -7.365969179e-04f,
+-7.373689300e-04f, -7.381396200e-04f, -7.389089868e-04f, -7.396770290e-04f, -7.404437454e-04f, -7.412091347e-04f, -7.419731957e-04f, -7.427359272e-04f, -7.434973279e-04f, -7.442573967e-04f,
+-7.450161322e-04f, -7.457735332e-04f, -7.465295985e-04f, -7.472843269e-04f, -7.480377172e-04f, -7.487897681e-04f, -7.495404785e-04f, -7.502898470e-04f, -7.510378725e-04f, -7.517845539e-04f,
+-7.525298897e-04f, -7.532738790e-04f, -7.540165204e-04f, -7.547578128e-04f, -7.554977550e-04f, -7.562363457e-04f, -7.569735838e-04f, -7.577094681e-04f, -7.584439974e-04f, -7.591771705e-04f,
+-7.599089863e-04f, -7.606394434e-04f, -7.613685409e-04f, -7.620962774e-04f, -7.628226518e-04f, -7.635476630e-04f, -7.642713098e-04f, -7.649935910e-04f, -7.657145054e-04f, -7.664340519e-04f,
+-7.671522293e-04f, -7.678690364e-04f, -7.685844722e-04f, -7.692985354e-04f, -7.700112250e-04f, -7.707225397e-04f, -7.714324784e-04f, -7.721410400e-04f, -7.728482233e-04f, -7.735540272e-04f,
+-7.742584505e-04f, -7.749614922e-04f, -7.756631511e-04f, -7.763634260e-04f, -7.770623159e-04f, -7.777598196e-04f, -7.784559360e-04f, -7.791506640e-04f, -7.798440024e-04f, -7.805359502e-04f,
+-7.812265062e-04f, -7.819156694e-04f, -7.826034386e-04f, -7.832898127e-04f, -7.839747906e-04f, -7.846583713e-04f, -7.853405535e-04f, -7.860213364e-04f, -7.867007186e-04f, -7.873786992e-04f,
+-7.880552771e-04f, -7.887304512e-04f, -7.894042204e-04f, -7.900765836e-04f, -7.907475397e-04f, -7.914170878e-04f, -7.920852266e-04f, -7.927519552e-04f, -7.934172725e-04f, -7.940811773e-04f,
+-7.947436688e-04f, -7.954047457e-04f, -7.960644070e-04f, -7.967226518e-04f, -7.973794788e-04f, -7.980348872e-04f, -7.986888757e-04f, -7.993414435e-04f, -7.999925894e-04f, -8.006423125e-04f,
+-8.012906116e-04f, -8.019374858e-04f, -8.025829340e-04f, -8.032269552e-04f, -8.038695483e-04f, -8.045107124e-04f, -8.051504464e-04f, -8.057887493e-04f, -8.064256201e-04f, -8.070610577e-04f,
+-8.076950613e-04f, -8.083276297e-04f, -8.089587619e-04f, -8.095884570e-04f, -8.102167139e-04f, -8.108435317e-04f, -8.114689093e-04f, -8.120928458e-04f, -8.127153402e-04f, -8.133363914e-04f,
+-8.139559986e-04f, -8.145741606e-04f, -8.151908767e-04f, -8.158061456e-04f, -8.164199666e-04f, -8.170323386e-04f, -8.176432606e-04f, -8.182527317e-04f, -8.188607509e-04f, -8.194673173e-04f,
+-8.200724298e-04f, -8.206760876e-04f, -8.212782897e-04f, -8.218790351e-04f, -8.224783229e-04f, -8.230761521e-04f, -8.236725218e-04f, -8.242674311e-04f, -8.248608790e-04f, -8.254528646e-04f,
+-8.260433869e-04f, -8.266324450e-04f, -8.272200380e-04f, -8.278061650e-04f, -8.283908250e-04f, -8.289740171e-04f, -8.295557404e-04f, -8.301359940e-04f, -8.307147770e-04f, -8.312920884e-04f,
+-8.318679274e-04f, -8.324422930e-04f, -8.330151844e-04f, -8.335866006e-04f, -8.341565408e-04f, -8.347250040e-04f, -8.352919894e-04f, -8.358574961e-04f, -8.364215231e-04f, -8.369840697e-04f,
+-8.375451349e-04f, -8.381047178e-04f, -8.386628176e-04f, -8.392194334e-04f, -8.397745643e-04f, -8.403282094e-04f, -8.408803680e-04f, -8.414310391e-04f, -8.419802218e-04f, -8.425279154e-04f,
+-8.430741189e-04f, -8.436188315e-04f, -8.441620523e-04f, -8.447037806e-04f, -8.452440154e-04f, -8.457827560e-04f, -8.463200014e-04f, -8.468557508e-04f, -8.473900035e-04f, -8.479227585e-04f,
+-8.484540151e-04f, -8.489837724e-04f, -8.495120296e-04f, -8.500387859e-04f, -8.505640404e-04f, -8.510877924e-04f, -8.516100410e-04f, -8.521307855e-04f, -8.526500249e-04f, -8.531677585e-04f,
+-8.536839856e-04f, -8.541987053e-04f, -8.547119167e-04f, -8.552236192e-04f, -8.557338119e-04f, -8.562424940e-04f, -8.567496648e-04f, -8.572553235e-04f, -8.577594692e-04f, -8.582621012e-04f,
+-8.587632188e-04f, -8.592628211e-04f, -8.597609074e-04f, -8.602574769e-04f, -8.607525289e-04f, -8.612460626e-04f, -8.617380772e-04f, -8.622285719e-04f, -8.627175461e-04f, -8.632049990e-04f,
+-8.636909297e-04f, -8.641753377e-04f, -8.646582220e-04f, -8.651395821e-04f, -8.656194171e-04f, -8.660977263e-04f, -8.665745090e-04f, -8.670497645e-04f, -8.675234919e-04f, -8.679956907e-04f,
+-8.684663601e-04f, -8.689354993e-04f, -8.694031076e-04f, -8.698691844e-04f, -8.703337289e-04f, -8.707967404e-04f, -8.712582181e-04f, -8.717181615e-04f, -8.721765698e-04f, -8.726334423e-04f,
+-8.730887783e-04f, -8.735425771e-04f, -8.739948380e-04f, -8.744455603e-04f, -8.748947434e-04f, -8.753423866e-04f, -8.757884892e-04f, -8.762330504e-04f, -8.766760697e-04f, -8.771175464e-04f,
+-8.775574798e-04f, -8.779958692e-04f, -8.784327140e-04f, -8.788680134e-04f, -8.793017670e-04f, -8.797339739e-04f, -8.801646336e-04f, -8.805937454e-04f, -8.810213086e-04f, -8.814473227e-04f,
+-8.818717869e-04f, -8.822947007e-04f, -8.827160633e-04f, -8.831358742e-04f, -8.835541327e-04f, -8.839708382e-04f, -8.843859902e-04f, -8.847995878e-04f, -8.852116306e-04f, -8.856221180e-04f,
+-8.860310492e-04f, -8.864384237e-04f, -8.868442409e-04f, -8.872485002e-04f, -8.876512010e-04f, -8.880523427e-04f, -8.884519246e-04f, -8.888499462e-04f, -8.892464069e-04f, -8.896413062e-04f,
+-8.900346433e-04f, -8.904264178e-04f, -8.908166290e-04f, -8.912052764e-04f, -8.915923594e-04f, -8.919778775e-04f, -8.923618300e-04f, -8.927442164e-04f, -8.931250361e-04f, -8.935042886e-04f,
+-8.938819732e-04f, -8.942580896e-04f, -8.946326370e-04f, -8.950056150e-04f, -8.953770229e-04f, -8.957468604e-04f, -8.961151267e-04f, -8.964818214e-04f, -8.968469439e-04f, -8.972104938e-04f,
+-8.975724704e-04f, -8.979328732e-04f, -8.982917017e-04f, -8.986489555e-04f, -8.990046339e-04f, -8.993587364e-04f, -8.997112626e-04f, -9.000622119e-04f, -9.004115838e-04f, -9.007593779e-04f,
+-9.011055935e-04f, -9.014502302e-04f, -9.017932875e-04f, -9.021347650e-04f, -9.024746620e-04f, -9.028129782e-04f, -9.031497130e-04f, -9.034848660e-04f, -9.038184366e-04f, -9.041504244e-04f,
+-9.044808290e-04f, -9.048096498e-04f, -9.051368863e-04f, -9.054625382e-04f, -9.057866048e-04f, -9.061090859e-04f, -9.064299809e-04f, -9.067492893e-04f, -9.070670108e-04f, -9.073831447e-04f,
+-9.076976908e-04f, -9.080106486e-04f, -9.083220175e-04f, -9.086317973e-04f, -9.089399873e-04f, -9.092465873e-04f, -9.095515968e-04f, -9.098550152e-04f, -9.101568423e-04f, -9.104570776e-04f,
+-9.107557207e-04f, -9.110527711e-04f, -9.113482284e-04f, -9.116420923e-04f, -9.119343623e-04f, -9.122250379e-04f, -9.125141189e-04f, -9.128016048e-04f, -9.130874952e-04f, -9.133717897e-04f,
+-9.136544879e-04f, -9.139355894e-04f, -9.142150939e-04f, -9.144930009e-04f, -9.147693101e-04f, -9.150440210e-04f, -9.153171334e-04f, -9.155886469e-04f, -9.158585609e-04f, -9.161268753e-04f,
+-9.163935897e-04f, -9.166587036e-04f, -9.169222167e-04f, -9.171841287e-04f, -9.174444391e-04f, -9.177031478e-04f, -9.179602542e-04f, -9.182157581e-04f, -9.184696591e-04f, -9.187219568e-04f,
+-9.189726510e-04f, -9.192217414e-04f, -9.194692274e-04f, -9.197151090e-04f, -9.199593856e-04f, -9.202020570e-04f, -9.204431229e-04f, -9.206825830e-04f, -9.209204369e-04f, -9.211566843e-04f,
+-9.213913249e-04f, -9.216243585e-04f, -9.218557847e-04f, -9.220856031e-04f, -9.223138136e-04f, -9.225404158e-04f, -9.227654094e-04f, -9.229887941e-04f, -9.232105697e-04f, -9.234307358e-04f,
+-9.236492922e-04f, -9.238662386e-04f, -9.240815748e-04f, -9.242953004e-04f, -9.245074151e-04f, -9.247179188e-04f, -9.249268111e-04f, -9.251340919e-04f, -9.253397607e-04f, -9.255438174e-04f,
+-9.257462617e-04f, -9.259470934e-04f, -9.261463123e-04f, -9.263439180e-04f, -9.265399103e-04f, -9.267342890e-04f, -9.269270539e-04f, -9.271182047e-04f, -9.273077412e-04f, -9.274956631e-04f,
+-9.276819703e-04f, -9.278666626e-04f, -9.280497396e-04f, -9.282312012e-04f, -9.284110471e-04f, -9.285892772e-04f, -9.287658913e-04f, -9.289408891e-04f, -9.291142704e-04f, -9.292860351e-04f,
+-9.294561829e-04f, -9.296247137e-04f, -9.297916272e-04f, -9.299569233e-04f, -9.301206017e-04f, -9.302826624e-04f, -9.304431051e-04f, -9.306019296e-04f, -9.307591358e-04f, -9.309147234e-04f,
+-9.310686924e-04f, -9.312210426e-04f, -9.313717737e-04f, -9.315208857e-04f, -9.316683783e-04f, -9.318142515e-04f, -9.319585050e-04f, -9.321011388e-04f, -9.322421526e-04f, -9.323815463e-04f,
+-9.325193199e-04f, -9.326554730e-04f, -9.327900057e-04f, -9.329229178e-04f, -9.330542091e-04f, -9.331838796e-04f, -9.333119290e-04f, -9.334383573e-04f, -9.335631644e-04f, -9.336863501e-04f,
+-9.338079144e-04f, -9.339278571e-04f, -9.340461780e-04f, -9.341628772e-04f, -9.342779545e-04f, -9.343914098e-04f, -9.345032431e-04f, -9.346134541e-04f, -9.347220429e-04f, -9.348290093e-04f,
+-9.349343532e-04f, -9.350380747e-04f, -9.351401735e-04f, -9.352406496e-04f, -9.353395030e-04f, -9.354367336e-04f, -9.355323413e-04f, -9.356263260e-04f, -9.357186876e-04f, -9.358094263e-04f,
+-9.358985417e-04f, -9.359860340e-04f, -9.360719030e-04f, -9.361561488e-04f, -9.362387712e-04f, -9.363197702e-04f, -9.363991458e-04f, -9.364768979e-04f, -9.365530266e-04f, -9.366275317e-04f,
+-9.367004133e-04f, -9.367716713e-04f, -9.368413057e-04f, -9.369093165e-04f, -9.369757036e-04f, -9.370404671e-04f, -9.371036069e-04f, -9.371651231e-04f, -9.372250156e-04f, -9.372832844e-04f,
+-9.373399295e-04f, -9.373949509e-04f, -9.374483487e-04f, -9.375001227e-04f, -9.375502732e-04f, -9.375988000e-04f, -9.376457031e-04f, -9.376909827e-04f, -9.377346386e-04f, -9.377766710e-04f,
+-9.378170799e-04f, -9.378558653e-04f, -9.378930272e-04f, -9.379285656e-04f, -9.379624807e-04f, -9.379947724e-04f, -9.380254408e-04f, -9.380544859e-04f, -9.380819079e-04f, -9.381077066e-04f,
+-9.381318823e-04f, -9.381544349e-04f, -9.381753645e-04f, -9.381946712e-04f, -9.382123551e-04f, -9.382284162e-04f, -9.382428545e-04f, -9.382556702e-04f, -9.382668634e-04f, -9.382764341e-04f,
+-9.382843824e-04f, -9.382907083e-04f, -9.382954121e-04f, -9.382984937e-04f, -9.382999533e-04f, -9.382997910e-04f, -9.382980068e-04f, -9.382946009e-04f, -9.382895734e-04f, -9.382829244e-04f,
+-9.382746539e-04f, -9.382647622e-04f, -9.382532493e-04f, -9.382401153e-04f, -9.382253604e-04f, -9.382089847e-04f, -9.381909884e-04f, -9.381713714e-04f, -9.381501341e-04f, -9.381272765e-04f,
+-9.381027988e-04f, -9.380767010e-04f, -9.380489834e-04f, -9.380196462e-04f, -9.379886893e-04f, -9.379561131e-04f, -9.379219176e-04f, -9.378861031e-04f, -9.378486696e-04f, -9.378096174e-04f,
+-9.377689466e-04f, -9.377266574e-04f, -9.376827499e-04f, -9.376372244e-04f, -9.375900810e-04f, -9.375413198e-04f, -9.374909412e-04f, -9.374389452e-04f, -9.373853320e-04f, -9.373301020e-04f,
+-9.372732551e-04f, -9.372147917e-04f, -9.371547119e-04f, -9.370930160e-04f, -9.370297041e-04f, -9.369647765e-04f, -9.368982333e-04f, -9.368300749e-04f, -9.367603013e-04f, -9.366889129e-04f,
+-9.366159098e-04f, -9.365412923e-04f, -9.364650606e-04f, -9.363872149e-04f, -9.363077555e-04f, -9.362266826e-04f, -9.361439964e-04f, -9.360596973e-04f, -9.359737853e-04f, -9.358862608e-04f,
+-9.357971241e-04f, -9.357063754e-04f, -9.356140148e-04f, -9.355200428e-04f, -9.354244596e-04f, -9.353272654e-04f, -9.352284604e-04f, -9.351280451e-04f, -9.350260196e-04f, -9.349223842e-04f,
+-9.348171391e-04f, -9.347102848e-04f, -9.346018214e-04f, -9.344917493e-04f, -9.343800686e-04f, -9.342667799e-04f, -9.341518832e-04f, -9.340353790e-04f, -9.339172674e-04f, -9.337975489e-04f,
+-9.336762238e-04f, -9.335532922e-04f, -9.334287546e-04f, -9.333026113e-04f, -9.331748626e-04f, -9.330455087e-04f, -9.329145501e-04f, -9.327819871e-04f, -9.326478199e-04f, -9.325120489e-04f,
+-9.323746745e-04f, -9.322356969e-04f, -9.320951166e-04f, -9.319529338e-04f, -9.318091490e-04f, -9.316637624e-04f, -9.315167743e-04f, -9.313681853e-04f, -9.312179955e-04f, -9.310662055e-04f,
+-9.309128154e-04f, -9.307578258e-04f, -9.306012369e-04f, -9.304430492e-04f, -9.302832629e-04f, -9.301218785e-04f, -9.299588964e-04f, -9.297943170e-04f, -9.296281405e-04f, -9.294603675e-04f,
+-9.292909982e-04f, -9.291200331e-04f, -9.289474727e-04f, -9.287733171e-04f, -9.285975670e-04f, -9.284202227e-04f, -9.282412845e-04f, -9.280607529e-04f, -9.278786283e-04f, -9.276949112e-04f,
+-9.275096018e-04f, -9.273227008e-04f, -9.271342084e-04f, -9.269441251e-04f, -9.267524513e-04f, -9.265591874e-04f, -9.263643340e-04f, -9.261678913e-04f, -9.259698600e-04f, -9.257702403e-04f,
+-9.255690328e-04f, -9.253662378e-04f, -9.251618559e-04f, -9.249558875e-04f, -9.247483330e-04f, -9.245391929e-04f, -9.243284677e-04f, -9.241161578e-04f, -9.239022636e-04f, -9.236867858e-04f,
+-9.234697246e-04f, -9.232510807e-04f, -9.230308544e-04f, -9.228090462e-04f, -9.225856567e-04f, -9.223606863e-04f, -9.221341355e-04f, -9.219060048e-04f, -9.216762947e-04f, -9.214450057e-04f,
+-9.212121382e-04f, -9.209776928e-04f, -9.207416700e-04f, -9.205040703e-04f, -9.202648941e-04f, -9.200241421e-04f, -9.197818147e-04f, -9.195379124e-04f, -9.192924357e-04f, -9.190453853e-04f,
+-9.187967615e-04f, -9.185465650e-04f, -9.182947962e-04f, -9.180414556e-04f, -9.177865440e-04f, -9.175300616e-04f, -9.172720092e-04f, -9.170123872e-04f, -9.167511962e-04f, -9.164884367e-04f,
+-9.162241093e-04f, -9.159582146e-04f, -9.156907531e-04f, -9.154217253e-04f, -9.151511318e-04f, -9.148789732e-04f, -9.146052501e-04f, -9.143299630e-04f, -9.140531125e-04f, -9.137746991e-04f,
+-9.134947235e-04f, -9.132131862e-04f, -9.129300879e-04f, -9.126454290e-04f, -9.123592102e-04f, -9.120714321e-04f, -9.117820952e-04f, -9.114912002e-04f, -9.111987477e-04f, -9.109047383e-04f,
+-9.106091725e-04f, -9.103120510e-04f, -9.100133744e-04f, -9.097131433e-04f, -9.094113583e-04f, -9.091080200e-04f, -9.088031291e-04f, -9.084966861e-04f, -9.081886918e-04f, -9.078791467e-04f,
+-9.075680515e-04f, -9.072554067e-04f, -9.069412131e-04f, -9.066254712e-04f, -9.063081818e-04f, -9.059893454e-04f, -9.056689627e-04f, -9.053470344e-04f, -9.050235611e-04f, -9.046985434e-04f,
+-9.043719821e-04f, -9.040438777e-04f, -9.037142310e-04f, -9.033830425e-04f, -9.030503131e-04f, -9.027160433e-04f, -9.023802338e-04f, -9.020428853e-04f, -9.017039984e-04f, -9.013635739e-04f,
+-9.010216125e-04f, -9.006781147e-04f, -9.003330814e-04f, -8.999865131e-04f, -8.996384107e-04f, -8.992887748e-04f, -8.989376060e-04f, -8.985849051e-04f, -8.982306729e-04f, -8.978749099e-04f,
+-8.975176169e-04f, -8.971587947e-04f, -8.967984439e-04f, -8.964365653e-04f, -8.960731595e-04f, -8.957082273e-04f, -8.953417695e-04f, -8.949737867e-04f, -8.946042797e-04f, -8.942332492e-04f,
+-8.938606960e-04f, -8.934866207e-04f, -8.931110242e-04f, -8.927339072e-04f, -8.923552704e-04f, -8.919751145e-04f, -8.915934404e-04f, -8.912102487e-04f, -8.908255403e-04f, -8.904393158e-04f,
+-8.900515761e-04f, -8.896623220e-04f, -8.892715540e-04f, -8.888792732e-04f, -8.884854802e-04f, -8.880901757e-04f, -8.876933607e-04f, -8.872950357e-04f, -8.868952018e-04f, -8.864938595e-04f,
+-8.860910097e-04f, -8.856866533e-04f, -8.852807909e-04f, -8.848734234e-04f, -8.844645516e-04f, -8.840541762e-04f, -8.836422982e-04f, -8.832289182e-04f, -8.828140371e-04f, -8.823976557e-04f,
+-8.819797748e-04f, -8.815603953e-04f, -8.811395179e-04f, -8.807171435e-04f, -8.802932729e-04f, -8.798679069e-04f, -8.794410463e-04f, -8.790126920e-04f, -8.785828448e-04f, -8.781515056e-04f,
+-8.777186751e-04f, -8.772843543e-04f, -8.768485439e-04f, -8.764112448e-04f, -8.759724579e-04f, -8.755321840e-04f, -8.750904240e-04f, -8.746471786e-04f, -8.742024489e-04f, -8.737562356e-04f,
+-8.733085396e-04f, -8.728593617e-04f, -8.724087029e-04f, -8.719565640e-04f, -8.715029458e-04f, -8.710478494e-04f, -8.705912754e-04f, -8.701332249e-04f, -8.696736986e-04f, -8.692126975e-04f,
+-8.687502225e-04f, -8.682862745e-04f, -8.678208543e-04f, -8.673539628e-04f, -8.668856010e-04f, -8.664157698e-04f, -8.659444700e-04f, -8.654717025e-04f, -8.649974683e-04f, -8.645217683e-04f,
+-8.640446034e-04f, -8.635659744e-04f, -8.630858824e-04f, -8.626043282e-04f, -8.621213128e-04f, -8.616368371e-04f, -8.611509020e-04f, -8.606635084e-04f, -8.601746574e-04f, -8.596843497e-04f,
+-8.591925864e-04f, -8.586993683e-04f, -8.582046966e-04f, -8.577085720e-04f, -8.572109955e-04f, -8.567119681e-04f, -8.562114907e-04f, -8.557095643e-04f, -8.552061898e-04f, -8.547013683e-04f,
+-8.541951006e-04f, -8.536873878e-04f, -8.531782307e-04f, -8.526676304e-04f, -8.521555878e-04f, -8.516421040e-04f, -8.511271798e-04f, -8.506108163e-04f, -8.500930145e-04f, -8.495737753e-04f,
+-8.490530997e-04f, -8.485309887e-04f, -8.480074433e-04f, -8.474824646e-04f, -8.469560534e-04f, -8.464282108e-04f, -8.458989377e-04f, -8.453682353e-04f, -8.448361045e-04f, -8.443025463e-04f,
+-8.437675617e-04f, -8.432311517e-04f, -8.426933174e-04f, -8.421540597e-04f, -8.416133797e-04f, -8.410712785e-04f, -8.405277569e-04f, -8.399828162e-04f, -8.394364572e-04f, -8.388886810e-04f,
+-8.383394887e-04f, -8.377888813e-04f, -8.372368598e-04f, -8.366834253e-04f, -8.361285788e-04f, -8.355723214e-04f, -8.350146541e-04f, -8.344555780e-04f, -8.338950941e-04f, -8.333332034e-04f,
+-8.327699071e-04f, -8.322052062e-04f, -8.316391017e-04f, -8.310715948e-04f, -8.305026864e-04f, -8.299323778e-04f, -8.293606698e-04f, -8.287875637e-04f, -8.282130604e-04f, -8.276371611e-04f,
+-8.270598669e-04f, -8.264811788e-04f, -8.259010979e-04f, -8.253196253e-04f, -8.247367621e-04f, -8.241525094e-04f, -8.235668683e-04f, -8.229798399e-04f, -8.223914252e-04f, -8.218016255e-04f,
+-8.212104418e-04f, -8.206178751e-04f, -8.200239267e-04f, -8.194285976e-04f, -8.188318889e-04f, -8.182338018e-04f, -8.176343374e-04f, -8.170334967e-04f, -8.164312810e-04f, -8.158276914e-04f,
+-8.152227289e-04f, -8.146163947e-04f, -8.140086899e-04f, -8.133996158e-04f, -8.127891733e-04f, -8.121773637e-04f, -8.115641881e-04f, -8.109496476e-04f, -8.103337435e-04f, -8.097164767e-04f,
+-8.090978486e-04f, -8.084778601e-04f, -8.078565126e-04f, -8.072338072e-04f, -8.066097449e-04f, -8.059843270e-04f, -8.053575547e-04f, -8.047294291e-04f, -8.040999514e-04f, -8.034691227e-04f,
+-8.028369442e-04f, -8.022034172e-04f, -8.015685427e-04f, -8.009323220e-04f, -8.002947562e-04f, -7.996558466e-04f, -7.990155943e-04f, -7.983740005e-04f, -7.977310664e-04f, -7.970867931e-04f,
+-7.964411820e-04f, -7.957942342e-04f, -7.951459509e-04f, -7.944963332e-04f, -7.938453825e-04f, -7.931930998e-04f, -7.925394865e-04f, -7.918845437e-04f, -7.912282727e-04f, -7.905706746e-04f,
+-7.899117507e-04f, -7.892515023e-04f, -7.885899304e-04f, -7.879270364e-04f, -7.872628214e-04f, -7.865972868e-04f, -7.859304337e-04f, -7.852622634e-04f, -7.845927771e-04f, -7.839219761e-04f,
+-7.832498615e-04f, -7.825764347e-04f, -7.819016969e-04f, -7.812256493e-04f, -7.805482931e-04f, -7.798696297e-04f, -7.791896603e-04f, -7.785083862e-04f, -7.778258085e-04f, -7.771419286e-04f,
+-7.764567477e-04f, -7.757702671e-04f, -7.750824880e-04f, -7.743934118e-04f, -7.737030397e-04f, -7.730113729e-04f, -7.723184128e-04f, -7.716241606e-04f, -7.709286176e-04f, -7.702317851e-04f,
+-7.695336644e-04f, -7.688342567e-04f, -7.681335634e-04f, -7.674315857e-04f, -7.667283249e-04f, -7.660237824e-04f, -7.653179594e-04f, -7.646108572e-04f, -7.639024771e-04f, -7.631928205e-04f,
+-7.624818886e-04f, -7.617696827e-04f, -7.610562042e-04f, -7.603414543e-04f, -7.596254345e-04f, -7.589081459e-04f, -7.581895899e-04f, -7.574697679e-04f, -7.567486811e-04f, -7.560263309e-04f,
+-7.553027186e-04f, -7.545778455e-04f, -7.538517131e-04f, -7.531243225e-04f, -7.523956751e-04f, -7.516657723e-04f, -7.509346155e-04f, -7.502022059e-04f, -7.494685449e-04f, -7.487336338e-04f,
+-7.479974740e-04f, -7.472600669e-04f, -7.465214138e-04f, -7.457815160e-04f, -7.450403749e-04f, -7.442979919e-04f, -7.435543683e-04f, -7.428095055e-04f, -7.420634048e-04f, -7.413160677e-04f,
+-7.405674955e-04f, -7.398176895e-04f, -7.390666511e-04f, -7.383143817e-04f, -7.375608827e-04f, -7.368061555e-04f, -7.360502014e-04f, -7.352930218e-04f, -7.345346182e-04f, -7.337749918e-04f,
+-7.330141441e-04f, -7.322520765e-04f, -7.314887904e-04f, -7.307242871e-04f, -7.299585681e-04f, -7.291916347e-04f, -7.284234884e-04f, -7.276541306e-04f, -7.268835626e-04f, -7.261117859e-04f,
+-7.253388018e-04f, -7.245646119e-04f, -7.237892175e-04f, -7.230126200e-04f, -7.222348208e-04f, -7.214558214e-04f, -7.206756232e-04f, -7.198942276e-04f, -7.191116360e-04f, -7.183278499e-04f,
+-7.175428706e-04f, -7.167566997e-04f, -7.159693385e-04f, -7.151807885e-04f, -7.143910511e-04f, -7.136001277e-04f, -7.128080199e-04f, -7.120147290e-04f, -7.112202565e-04f, -7.104246038e-04f,
+-7.096277724e-04f, -7.088297637e-04f, -7.080305793e-04f, -7.072302204e-04f, -7.064286887e-04f, -7.056259855e-04f, -7.048221123e-04f, -7.040170706e-04f, -7.032108618e-04f, -7.024034874e-04f,
+-7.015949489e-04f, -7.007852478e-04f, -6.999743855e-04f, -6.991623634e-04f, -6.983491831e-04f, -6.975348461e-04f, -6.967193538e-04f, -6.959027077e-04f, -6.950849092e-04f, -6.942659600e-04f,
+-6.934458614e-04f, -6.926246149e-04f, -6.918022221e-04f, -6.909786844e-04f, -6.901540034e-04f, -6.893281804e-04f, -6.885012171e-04f, -6.876731149e-04f, -6.868438753e-04f, -6.860134999e-04f,
+-6.851819901e-04f, -6.843493474e-04f, -6.835155734e-04f, -6.826806695e-04f, -6.818446373e-04f, -6.810074783e-04f, -6.801691940e-04f, -6.793297859e-04f, -6.784892556e-04f, -6.776476046e-04f,
+-6.768048343e-04f, -6.759609463e-04f, -6.751159423e-04f, -6.742698235e-04f, -6.734225917e-04f, -6.725742484e-04f, -6.717247950e-04f, -6.708742331e-04f, -6.700225643e-04f, -6.691697901e-04f,
+-6.683159120e-04f, -6.674609316e-04f, -6.666048504e-04f, -6.657476701e-04f, -6.648893920e-04f, -6.640300178e-04f, -6.631695491e-04f, -6.623079873e-04f, -6.614453341e-04f, -6.605815910e-04f,
+-6.597167595e-04f, -6.588508413e-04f, -6.579838379e-04f, -6.571157508e-04f, -6.562465817e-04f, -6.553763320e-04f, -6.545050034e-04f, -6.536325975e-04f, -6.527591158e-04f, -6.518845598e-04f,
+-6.510089313e-04f, -6.501322316e-04f, -6.492544626e-04f, -6.483756256e-04f, -6.474957223e-04f, -6.466147543e-04f, -6.457327232e-04f, -6.448496306e-04f, -6.439654780e-04f, -6.430802671e-04f,
+-6.421939995e-04f, -6.413066766e-04f, -6.404183003e-04f, -6.395288720e-04f, -6.386383933e-04f, -6.377468659e-04f, -6.368542913e-04f, -6.359606712e-04f, -6.350660072e-04f, -6.341703009e-04f,
+-6.332735539e-04f, -6.323757678e-04f, -6.314769443e-04f, -6.305770849e-04f, -6.296761913e-04f, -6.287742651e-04f, -6.278713078e-04f, -6.269673213e-04f, -6.260623070e-04f, -6.251562666e-04f,
+-6.242492017e-04f, -6.233411140e-04f, -6.224320051e-04f, -6.215218766e-04f, -6.206107302e-04f, -6.196985674e-04f, -6.187853900e-04f, -6.178711997e-04f, -6.169559979e-04f, -6.160397864e-04f,
+-6.151225668e-04f, -6.142043408e-04f, -6.132851100e-04f, -6.123648761e-04f, -6.114436406e-04f, -6.105214054e-04f, -6.095981720e-04f, -6.086739421e-04f, -6.077487173e-04f, -6.068224994e-04f,
+-6.058952899e-04f, -6.049670905e-04f, -6.040379030e-04f, -6.031077289e-04f, -6.021765700e-04f, -6.012444279e-04f, -6.003113043e-04f, -5.993772008e-04f, -5.984421191e-04f, -5.975060610e-04f,
+-5.965690281e-04f, -5.956310220e-04f, -5.946920445e-04f, -5.937520972e-04f, -5.928111818e-04f, -5.918693000e-04f, -5.909264536e-04f, -5.899826441e-04f, -5.890378733e-04f, -5.880921428e-04f,
+-5.871454544e-04f, -5.861978098e-04f, -5.852492107e-04f, -5.842996586e-04f, -5.833491555e-04f, -5.823977029e-04f, -5.814453026e-04f, -5.804919562e-04f, -5.795376655e-04f, -5.785824322e-04f,
+-5.776262580e-04f, -5.766691446e-04f, -5.757110937e-04f, -5.747521070e-04f, -5.737921863e-04f, -5.728313332e-04f, -5.718695496e-04f, -5.709068370e-04f, -5.699431973e-04f, -5.689786321e-04f,
+-5.680131431e-04f, -5.670467322e-04f, -5.660794010e-04f, -5.651111513e-04f, -5.641419847e-04f, -5.631719031e-04f, -5.622009081e-04f, -5.612290015e-04f, -5.602561851e-04f, -5.592824605e-04f,
+-5.583078295e-04f, -5.573322938e-04f, -5.563558552e-04f, -5.553785155e-04f, -5.544002764e-04f, -5.534211395e-04f, -5.524411068e-04f, -5.514601798e-04f, -5.504783605e-04f, -5.494956504e-04f,
+-5.485120515e-04f, -5.475275653e-04f, -5.465421938e-04f, -5.455559386e-04f, -5.445688015e-04f, -5.435807843e-04f, -5.425918888e-04f, -5.416021166e-04f, -5.406114696e-04f, -5.396199495e-04f,
+-5.386275582e-04f, -5.376342973e-04f, -5.366401686e-04f, -5.356451739e-04f, -5.346493151e-04f, -5.336525938e-04f, -5.326550118e-04f, -5.316565709e-04f, -5.306572730e-04f, -5.296571197e-04f,
+-5.286561129e-04f, -5.276542543e-04f, -5.266515457e-04f, -5.256479890e-04f, -5.246435858e-04f, -5.236383381e-04f, -5.226322475e-04f, -5.216253159e-04f, -5.206175450e-04f, -5.196089367e-04f,
+-5.185994928e-04f, -5.175892150e-04f, -5.165781052e-04f, -5.155661651e-04f, -5.145533965e-04f, -5.135398013e-04f, -5.125253813e-04f, -5.115101382e-04f, -5.104940739e-04f, -5.094771902e-04f,
+-5.084594888e-04f, -5.074409716e-04f, -5.064216405e-04f, -5.054014971e-04f, -5.043805434e-04f, -5.033587811e-04f, -5.023362121e-04f, -5.013128382e-04f, -5.002886612e-04f, -4.992636829e-04f,
+-4.982379051e-04f, -4.972113297e-04f, -4.961839584e-04f, -4.951557932e-04f, -4.941268359e-04f, -4.930970882e-04f, -4.920665520e-04f, -4.910352291e-04f, -4.900031214e-04f, -4.889702306e-04f,
+-4.879365587e-04f, -4.869021075e-04f, -4.858668788e-04f, -4.848308743e-04f, -4.837940961e-04f, -4.827565459e-04f, -4.817182256e-04f, -4.806791369e-04f, -4.796392818e-04f, -4.785986621e-04f,
+-4.775572796e-04f, -4.765151362e-04f, -4.754722337e-04f, -4.744285740e-04f, -4.733841590e-04f, -4.723389904e-04f, -4.712930702e-04f, -4.702464001e-04f, -4.691989822e-04f, -4.681508181e-04f,
+-4.671019098e-04f, -4.660522591e-04f, -4.650018679e-04f, -4.639507380e-04f, -4.628988714e-04f, -4.618462698e-04f, -4.607929352e-04f, -4.597388694e-04f, -4.586840742e-04f, -4.576285516e-04f,
+-4.565723035e-04f, -4.555153316e-04f, -4.544576378e-04f, -4.533992241e-04f, -4.523400923e-04f, -4.512802442e-04f, -4.502196819e-04f, -4.491584070e-04f, -4.480964216e-04f, -4.470337274e-04f,
+-4.459703265e-04f, -4.449062206e-04f, -4.438414116e-04f, -4.427759015e-04f, -4.417096920e-04f, -4.406427852e-04f, -4.395751828e-04f, -4.385068868e-04f, -4.374378991e-04f, -4.363682216e-04f,
+-4.352978560e-04f, -4.342268045e-04f, -4.331550687e-04f, -4.320826507e-04f, -4.310095523e-04f, -4.299357754e-04f, -4.288613220e-04f, -4.277861938e-04f, -4.267103929e-04f, -4.256339211e-04f,
+-4.245567803e-04f, -4.234789725e-04f, -4.224004995e-04f, -4.213213632e-04f, -4.202415656e-04f, -4.191611085e-04f, -4.180799939e-04f, -4.169982237e-04f, -4.159157997e-04f, -4.148327240e-04f,
+-4.137489983e-04f, -4.126646247e-04f, -4.115796050e-04f, -4.104939411e-04f, -4.094076351e-04f, -4.083206887e-04f, -4.072331039e-04f, -4.061448826e-04f, -4.050560268e-04f, -4.039665384e-04f,
+-4.028764192e-04f, -4.017856713e-04f, -4.006942965e-04f, -3.996022967e-04f, -3.985096740e-04f, -3.974164301e-04f, -3.963225672e-04f, -3.952280870e-04f, -3.941329915e-04f, -3.930372826e-04f,
+-3.919409623e-04f, -3.908440325e-04f, -3.897464952e-04f, -3.886483522e-04f, -3.875496055e-04f, -3.864502571e-04f, -3.853503089e-04f, -3.842497628e-04f, -3.831486207e-04f, -3.820468847e-04f,
+-3.809445566e-04f, -3.798416383e-04f, -3.787381320e-04f, -3.776340394e-04f, -3.765293625e-04f, -3.754241032e-04f, -3.743182636e-04f, -3.732118456e-04f, -3.721048510e-04f, -3.709972820e-04f,
+-3.698891403e-04f, -3.687804280e-04f, -3.676711470e-04f, -3.665612992e-04f, -3.654508867e-04f, -3.643399114e-04f, -3.632283752e-04f, -3.621162800e-04f, -3.610036280e-04f, -3.598904209e-04f,
+-3.587766608e-04f, -3.576623496e-04f, -3.565474892e-04f, -3.554320818e-04f, -3.543161291e-04f, -3.531996332e-04f, -3.520825960e-04f, -3.509650195e-04f, -3.498469057e-04f, -3.487282566e-04f,
+-3.476090740e-04f, -3.464893599e-04f, -3.453691164e-04f, -3.442483454e-04f, -3.431270489e-04f, -3.420052289e-04f, -3.408828872e-04f, -3.397600259e-04f, -3.386366470e-04f, -3.375127524e-04f,
+-3.363883442e-04f, -3.352634242e-04f, -3.341379944e-04f, -3.330120570e-04f, -3.318856137e-04f, -3.307586666e-04f, -3.296312178e-04f, -3.285032690e-04f, -3.273748224e-04f, -3.262458799e-04f,
+-3.251164436e-04f, -3.239865153e-04f, -3.228560971e-04f, -3.217251909e-04f, -3.205937988e-04f, -3.194619227e-04f, -3.183295646e-04f, -3.171967265e-04f, -3.160634104e-04f, -3.149296182e-04f,
+-3.137953521e-04f, -3.126606139e-04f, -3.115254056e-04f, -3.103897293e-04f, -3.092535869e-04f, -3.081169805e-04f, -3.069799119e-04f, -3.058423833e-04f, -3.047043966e-04f, -3.035659538e-04f,
+-3.024270568e-04f, -3.012877078e-04f, -3.001479087e-04f, -2.990076615e-04f, -2.978669681e-04f, -2.967258307e-04f, -2.955842511e-04f, -2.944422315e-04f, -2.932997737e-04f, -2.921568798e-04f,
+-2.910135519e-04f, -2.898697918e-04f, -2.887256017e-04f, -2.875809834e-04f, -2.864359391e-04f, -2.852904707e-04f, -2.841445803e-04f, -2.829982697e-04f, -2.818515412e-04f, -2.807043965e-04f,
+-2.795568379e-04f, -2.784088672e-04f, -2.772604865e-04f, -2.761116978e-04f, -2.749625031e-04f, -2.738129044e-04f, -2.726629037e-04f, -2.715125031e-04f, -2.703617046e-04f, -2.692105101e-04f,
+-2.680589217e-04f, -2.669069414e-04f, -2.657545712e-04f, -2.646018132e-04f, -2.634486693e-04f, -2.622951415e-04f, -2.611412320e-04f, -2.599869427e-04f, -2.588322755e-04f, -2.576772327e-04f,
+-2.565218161e-04f, -2.553660277e-04f, -2.542098697e-04f, -2.530533440e-04f, -2.518964527e-04f, -2.507391977e-04f, -2.495815812e-04f, -2.484236050e-04f, -2.472652713e-04f, -2.461065820e-04f,
+-2.449475393e-04f, -2.437881451e-04f, -2.426284014e-04f, -2.414683103e-04f, -2.403078738e-04f, -2.391470939e-04f, -2.379859726e-04f, -2.368245121e-04f, -2.356627143e-04f, -2.345005812e-04f,
+-2.333381148e-04f, -2.321753173e-04f, -2.310121906e-04f, -2.298487368e-04f, -2.286849579e-04f, -2.275208559e-04f, -2.263564328e-04f, -2.251916908e-04f, -2.240266318e-04f, -2.228612578e-04f,
+-2.216955710e-04f, -2.205295732e-04f, -2.193632667e-04f, -2.181966533e-04f, -2.170297352e-04f, -2.158625143e-04f, -2.146949927e-04f, -2.135271725e-04f, -2.123590557e-04f, -2.111906443e-04f,
+-2.100219404e-04f, -2.088529460e-04f, -2.076836631e-04f, -2.065140937e-04f, -2.053442400e-04f, -2.041741040e-04f, -2.030036876e-04f, -2.018329930e-04f, -2.006620222e-04f, -1.994907772e-04f,
+-1.983192600e-04f, -1.971474728e-04f, -1.959754175e-04f, -1.948030962e-04f, -1.936305109e-04f, -1.924576637e-04f, -1.912845566e-04f, -1.901111917e-04f, -1.889375710e-04f, -1.877636965e-04f,
+-1.865895704e-04f, -1.854151946e-04f, -1.842405712e-04f, -1.830657022e-04f, -1.818905897e-04f, -1.807152358e-04f, -1.795396424e-04f, -1.783638116e-04f, -1.771877456e-04f, -1.760114462e-04f,
+-1.748349156e-04f, -1.736581558e-04f, -1.724811689e-04f, -1.713039569e-04f, -1.701265219e-04f, -1.689488659e-04f, -1.677709909e-04f, -1.665928990e-04f, -1.654145924e-04f, -1.642360729e-04f,
+-1.630573427e-04f, -1.618784038e-04f, -1.606992582e-04f, -1.595199081e-04f, -1.583403555e-04f, -1.571606024e-04f, -1.559806508e-04f, -1.548005029e-04f, -1.536201606e-04f, -1.524396261e-04f,
+-1.512589014e-04f, -1.500779885e-04f, -1.488968894e-04f, -1.477156064e-04f, -1.465341413e-04f, -1.453524963e-04f, -1.441706733e-04f, -1.429886746e-04f, -1.418065020e-04f, -1.406241577e-04f,
+-1.394416438e-04f, -1.382589622e-04f, -1.370761150e-04f, -1.358931044e-04f, -1.347099322e-04f, -1.335266007e-04f, -1.323431118e-04f, -1.311594676e-04f, -1.299756702e-04f, -1.287917217e-04f,
+-1.276076240e-04f, -1.264233792e-04f, -1.252389894e-04f, -1.240544567e-04f, -1.228697830e-04f, -1.216849706e-04f, -1.205000213e-04f, -1.193149373e-04f, -1.181297207e-04f, -1.169443734e-04f,
+-1.157588976e-04f, -1.145732953e-04f, -1.133875686e-04f, -1.122017194e-04f, -1.110157500e-04f, -1.098296623e-04f, -1.086434584e-04f, -1.074571403e-04f, -1.062707101e-04f, -1.050841699e-04f,
+-1.038975217e-04f, -1.027107676e-04f, -1.015239097e-04f, -1.003369499e-04f, -9.914989045e-05f, -9.796273327e-05f, -9.677548046e-05f, -9.558813409e-05f, -9.440069621e-05f, -9.321316888e-05f,
+-9.202555416e-05f, -9.083785411e-05f, -8.965007078e-05f, -8.846220624e-05f, -8.727426253e-05f, -8.608624174e-05f, -8.489814590e-05f, -8.370997708e-05f, -8.252173734e-05f, -8.133342873e-05f,
+-8.014505332e-05f, -7.895661317e-05f, -7.776811032e-05f, -7.657954685e-05f, -7.539092481e-05f, -7.420224625e-05f, -7.301351324e-05f, -7.182472784e-05f, -7.063589210e-05f, -6.944700808e-05f,
+-6.825807784e-05f, -6.706910344e-05f, -6.588008694e-05f, -6.469103040e-05f, -6.350193586e-05f, -6.231280540e-05f, -6.112364107e-05f, -5.993444492e-05f, -5.874521902e-05f, -5.755596543e-05f,
+-5.636668619e-05f, -5.517738337e-05f, -5.398805903e-05f, -5.279871522e-05f, -5.160935401e-05f, -5.041997744e-05f, -4.923058758e-05f, -4.804118647e-05f, -4.685177619e-05f, -4.566235879e-05f,
+-4.447293631e-05f, -4.328351083e-05f, -4.209408440e-05f, -4.090465906e-05f, -3.971523689e-05f, -3.852581993e-05f, -3.733641024e-05f, -3.614700987e-05f, -3.495762089e-05f, -3.376824535e-05f,
+-3.257888530e-05f, -3.138954280e-05f, -3.020021990e-05f, -2.901091866e-05f, -2.782164113e-05f, -2.663238937e-05f, -2.544316544e-05f, -2.425397138e-05f, -2.306480925e-05f, -2.187568110e-05f,
+-2.068658900e-05f, -1.949753498e-05f, -1.830852111e-05f, -1.711954944e-05f, -1.593062201e-05f, -1.474174090e-05f, -1.355290813e-05f, -1.236412578e-05f, -1.117539589e-05f, -9.986720503e-06f,
+-8.798101686e-06f, -7.609541483e-06f, -6.421041947e-06f, -5.232605128e-06f, -4.044233078e-06f, -2.855927846e-06f, -1.667691482e-06f, -4.795260375e-07f, 7.085664387e-07f, 1.896583897e-06f,
+3.084524288e-06f, 4.272385563e-06f, 5.460165673e-06f, 6.647862570e-06f, 7.835474206e-06f, 9.022998532e-06f, 1.021043350e-05f, 1.139777707e-05f, 1.258502718e-05f, 1.377218180e-05f,
+1.495923887e-05f, 1.614619635e-05f, 1.733305220e-05f, 1.851980436e-05f, 1.970645079e-05f, 2.089298946e-05f, 2.207941830e-05f, 2.326573529e-05f, 2.445193837e-05f, 2.563802550e-05f,
+2.682399464e-05f, 2.800984375e-05f, 2.919557077e-05f, 3.038117368e-05f, 3.156665042e-05f, 3.275199897e-05f, 3.393721726e-05f, 3.512230327e-05f, 3.630725495e-05f, 3.749207027e-05f,
+3.867674718e-05f, 3.986128365e-05f, 4.104567762e-05f, 4.222992708e-05f, 4.341402997e-05f, 4.459798426e-05f, 4.578178791e-05f, 4.696543889e-05f, 4.814893516e-05f, 4.933227468e-05f,
+5.051545541e-05f, 5.169847532e-05f, 5.288133238e-05f, 5.406402454e-05f, 5.524654979e-05f, 5.642890607e-05f, 5.761109136e-05f, 5.879310362e-05f, 5.997494083e-05f, 6.115660095e-05f,
+6.233808194e-05f, 6.351938178e-05f, 6.470049843e-05f, 6.588142987e-05f, 6.706217407e-05f, 6.824272898e-05f, 6.942309260e-05f, 7.060326288e-05f, 7.178323779e-05f, 7.296301532e-05f,
+7.414259344e-05f, 7.532197010e-05f, 7.650114330e-05f, 7.768011100e-05f, 7.885887118e-05f, 8.003742182e-05f, 8.121576088e-05f, 8.239388635e-05f, 8.357179620e-05f, 8.474948841e-05f,
+8.592696095e-05f, 8.710421181e-05f, 8.828123896e-05f, 8.945804038e-05f, 9.063461405e-05f, 9.181095795e-05f, 9.298707007e-05f, 9.416294838e-05f, 9.533859086e-05f, 9.651399550e-05f,
+9.768916028e-05f, 9.886408318e-05f, 1.000387622e-04f, 1.012131953e-04f, 1.023873805e-04f, 1.035613157e-04f, 1.047349990e-04f, 1.059084283e-04f, 1.070816016e-04f, 1.082545170e-04f,
+1.094271723e-04f, 1.105995656e-04f, 1.117716949e-04f, 1.129435582e-04f, 1.141151534e-04f, 1.152864786e-04f, 1.164575317e-04f, 1.176283107e-04f, 1.187988137e-04f, 1.199690386e-04f,
+1.211389834e-04f, 1.223086461e-04f, 1.234780247e-04f, 1.246471171e-04f, 1.258159215e-04f, 1.269844358e-04f, 1.281526580e-04f, 1.293205860e-04f, 1.304882180e-04f, 1.316555518e-04f,
+1.328225855e-04f, 1.339893171e-04f, 1.351557446e-04f, 1.363218660e-04f, 1.374876793e-04f, 1.386531825e-04f, 1.398183736e-04f, 1.409832506e-04f, 1.421478115e-04f, 1.433120543e-04f,
+1.444759771e-04f, 1.456395777e-04f, 1.468028544e-04f, 1.479658050e-04f, 1.491284275e-04f, 1.502907200e-04f, 1.514526805e-04f, 1.526143070e-04f, 1.537755975e-04f, 1.549365500e-04f,
+1.560971626e-04f, 1.572574332e-04f, 1.584173599e-04f, 1.595769406e-04f, 1.607361735e-04f, 1.618950565e-04f, 1.630535876e-04f, 1.642117648e-04f, 1.653695862e-04f, 1.665270499e-04f,
+1.676841537e-04f, 1.688408958e-04f, 1.699972741e-04f, 1.711532867e-04f, 1.723089316e-04f, 1.734642069e-04f, 1.746191105e-04f, 1.757736404e-04f, 1.769277948e-04f, 1.780815717e-04f,
+1.792349690e-04f, 1.803879848e-04f, 1.815406171e-04f, 1.826928640e-04f, 1.838447234e-04f, 1.849961935e-04f, 1.861472723e-04f, 1.872979577e-04f, 1.884482479e-04f, 1.895981408e-04f,
+1.907476345e-04f, 1.918967271e-04f, 1.930454165e-04f, 1.941937009e-04f, 1.953415782e-04f, 1.964890465e-04f, 1.976361038e-04f, 1.987827482e-04f, 1.999289777e-04f, 2.010747904e-04f,
+2.022201843e-04f, 2.033651575e-04f, 2.045097080e-04f, 2.056538338e-04f, 2.067975330e-04f, 2.079408037e-04f, 2.090836438e-04f, 2.102260516e-04f, 2.113680249e-04f, 2.125095618e-04f,
+2.136506605e-04f, 2.147913190e-04f, 2.159315352e-04f, 2.170713073e-04f, 2.182106334e-04f, 2.193495115e-04f, 2.204879396e-04f, 2.216259158e-04f, 2.227634381e-04f, 2.239005047e-04f,
+2.250371136e-04f, 2.261732629e-04f, 2.273089506e-04f, 2.284441747e-04f, 2.295789334e-04f, 2.307132248e-04f, 2.318470468e-04f, 2.329803976e-04f, 2.341132752e-04f, 2.352456777e-04f,
+2.363776031e-04f, 2.375090496e-04f, 2.386400153e-04f, 2.397704981e-04f, 2.409004961e-04f, 2.420300076e-04f, 2.431590304e-04f, 2.442875627e-04f, 2.454156027e-04f, 2.465431482e-04f,
+2.476701975e-04f, 2.487967487e-04f, 2.499227997e-04f, 2.510483487e-04f, 2.521733938e-04f, 2.532979331e-04f, 2.544219646e-04f, 2.555454865e-04f, 2.566684967e-04f, 2.577909935e-04f,
+2.589129749e-04f, 2.600344390e-04f, 2.611553839e-04f, 2.622758077e-04f, 2.633957085e-04f, 2.645150843e-04f, 2.656339333e-04f, 2.667522536e-04f, 2.678700433e-04f, 2.689873004e-04f,
+2.701040232e-04f, 2.712202096e-04f, 2.723358577e-04f, 2.734509658e-04f, 2.745655319e-04f, 2.756795540e-04f, 2.767930304e-04f, 2.779059591e-04f, 2.790183382e-04f, 2.801301659e-04f,
+2.812414402e-04f, 2.823521592e-04f, 2.834623212e-04f, 2.845719241e-04f, 2.856809662e-04f, 2.867894455e-04f, 2.878973601e-04f, 2.890047082e-04f, 2.901114879e-04f, 2.912176972e-04f,
+2.923233345e-04f, 2.934283976e-04f, 2.945328849e-04f, 2.956367943e-04f, 2.967401241e-04f, 2.978428724e-04f, 2.989450372e-04f, 3.000466168e-04f, 3.011476092e-04f, 3.022480126e-04f,
+3.033478252e-04f, 3.044470450e-04f, 3.055456702e-04f, 3.066436989e-04f, 3.077411293e-04f, 3.088379595e-04f, 3.099341876e-04f, 3.110298119e-04f, 3.121248304e-04f, 3.132192413e-04f,
+3.143130427e-04f, 3.154062327e-04f, 3.164988096e-04f, 3.175907715e-04f, 3.186821165e-04f, 3.197728428e-04f, 3.208629485e-04f, 3.219524317e-04f, 3.230412907e-04f, 3.241295237e-04f,
+3.252171286e-04f, 3.263041038e-04f, 3.273904473e-04f, 3.284761574e-04f, 3.295612321e-04f, 3.306456697e-04f, 3.317294684e-04f, 3.328126262e-04f, 3.338951414e-04f, 3.349770121e-04f,
+3.360582365e-04f, 3.371388127e-04f, 3.382187390e-04f, 3.392980135e-04f, 3.403766344e-04f, 3.414545998e-04f, 3.425319080e-04f, 3.436085571e-04f, 3.446845453e-04f, 3.457598707e-04f,
+3.468345317e-04f, 3.479085262e-04f, 3.489818526e-04f, 3.500545090e-04f, 3.511264936e-04f, 3.521978046e-04f, 3.532684402e-04f, 3.543383985e-04f, 3.554076778e-04f, 3.564762762e-04f,
+3.575441920e-04f, 3.586114234e-04f, 3.596779685e-04f, 3.607438255e-04f, 3.618089927e-04f, 3.628734682e-04f, 3.639372503e-04f, 3.650003371e-04f, 3.660627268e-04f, 3.671244178e-04f,
+3.681854081e-04f, 3.692456959e-04f, 3.703052796e-04f, 3.713641573e-04f, 3.724223272e-04f, 3.734797875e-04f, 3.745365365e-04f, 3.755925723e-04f, 3.766478932e-04f, 3.777024974e-04f,
+3.787563831e-04f, 3.798095486e-04f, 3.808619921e-04f, 3.819137117e-04f, 3.829647058e-04f, 3.840149725e-04f, 3.850645101e-04f, 3.861133168e-04f, 3.871613909e-04f, 3.882087305e-04f,
+3.892553340e-04f, 3.903011994e-04f, 3.913463252e-04f, 3.923907095e-04f, 3.934343506e-04f, 3.944772467e-04f, 3.955193960e-04f, 3.965607968e-04f, 3.976014474e-04f, 3.986413460e-04f,
+3.996804907e-04f, 4.007188800e-04f, 4.017565121e-04f, 4.027933851e-04f, 4.038294973e-04f, 4.048648471e-04f, 4.058994326e-04f, 4.069332522e-04f, 4.079663040e-04f, 4.089985864e-04f,
+4.100300976e-04f, 4.110608359e-04f, 4.120907995e-04f, 4.131199867e-04f, 4.141483957e-04f, 4.151760250e-04f, 4.162028726e-04f, 4.172289369e-04f, 4.182542162e-04f, 4.192787087e-04f,
+4.203024128e-04f, 4.213253266e-04f, 4.223474486e-04f, 4.233687768e-04f, 4.243893098e-04f, 4.254090456e-04f, 4.264279827e-04f, 4.274461193e-04f, 4.284634537e-04f, 4.294799841e-04f,
+4.304957090e-04f, 4.315106265e-04f, 4.325247350e-04f, 4.335380327e-04f, 4.345505180e-04f, 4.355621892e-04f, 4.365730445e-04f, 4.375830823e-04f, 4.385923009e-04f, 4.396006985e-04f,
+4.406082736e-04f, 4.416150243e-04f, 4.426209491e-04f, 4.436260461e-04f, 4.446303138e-04f, 4.456337505e-04f, 4.466363544e-04f, 4.476381239e-04f, 4.486390573e-04f, 4.496391529e-04f,
+4.506384091e-04f, 4.516368241e-04f, 4.526343964e-04f, 4.536311241e-04f, 4.546270058e-04f, 4.556220396e-04f, 4.566162239e-04f, 4.576095571e-04f, 4.586020375e-04f, 4.595936634e-04f,
+4.605844332e-04f, 4.615743452e-04f, 4.625633977e-04f, 4.635515891e-04f, 4.645389178e-04f, 4.655253821e-04f, 4.665109802e-04f, 4.674957107e-04f, 4.684795718e-04f, 4.694625619e-04f,
+4.704446793e-04f, 4.714259224e-04f, 4.724062896e-04f, 4.733857792e-04f, 4.743643896e-04f, 4.753421191e-04f, 4.763189661e-04f, 4.772949290e-04f, 4.782700061e-04f, 4.792441958e-04f,
+4.802174966e-04f, 4.811899066e-04f, 4.821614244e-04f, 4.831320483e-04f, 4.841017767e-04f, 4.850706079e-04f, 4.860385404e-04f, 4.870055725e-04f, 4.879717026e-04f, 4.889369291e-04f,
+4.899012503e-04f, 4.908646648e-04f, 4.918271708e-04f, 4.927887667e-04f, 4.937494510e-04f, 4.947092221e-04f, 4.956680782e-04f, 4.966260180e-04f, 4.975830396e-04f, 4.985391416e-04f,
+4.994943224e-04f, 5.004485803e-04f, 5.014019137e-04f, 5.023543212e-04f, 5.033058010e-04f, 5.042563516e-04f, 5.052059714e-04f, 5.061546589e-04f, 5.071024124e-04f, 5.080492303e-04f,
+5.089951111e-04f, 5.099400533e-04f, 5.108840551e-04f, 5.118271152e-04f, 5.127692318e-04f, 5.137104034e-04f, 5.146506285e-04f, 5.155899054e-04f, 5.165282327e-04f, 5.174656087e-04f,
+5.184020320e-04f, 5.193375008e-04f, 5.202720138e-04f, 5.212055692e-04f, 5.221381656e-04f, 5.230698014e-04f, 5.240004751e-04f, 5.249301851e-04f, 5.258589299e-04f, 5.267867078e-04f,
+5.277135175e-04f, 5.286393573e-04f, 5.295642257e-04f, 5.304881211e-04f, 5.314110421e-04f, 5.323329870e-04f, 5.332539544e-04f, 5.341739427e-04f, 5.350929504e-04f, 5.360109759e-04f,
+5.369280178e-04f, 5.378440745e-04f, 5.387591445e-04f, 5.396732262e-04f, 5.405863182e-04f, 5.414984190e-04f, 5.424095269e-04f, 5.433196406e-04f, 5.442287584e-04f, 5.451368790e-04f,
+5.460440007e-04f, 5.469501220e-04f, 5.478552416e-04f, 5.487593578e-04f, 5.496624691e-04f, 5.505645741e-04f, 5.514656713e-04f, 5.523657592e-04f, 5.532648362e-04f, 5.541629010e-04f,
+5.550599519e-04f, 5.559559875e-04f, 5.568510063e-04f, 5.577450069e-04f, 5.586379878e-04f, 5.595299474e-04f, 5.604208843e-04f, 5.613107971e-04f, 5.621996841e-04f, 5.630875441e-04f,
+5.639743755e-04f, 5.648601767e-04f, 5.657449465e-04f, 5.666286833e-04f, 5.675113856e-04f, 5.683930519e-04f, 5.692736809e-04f, 5.701532711e-04f, 5.710318209e-04f, 5.719093290e-04f,
+5.727857939e-04f, 5.736612141e-04f, 5.745355883e-04f, 5.754089149e-04f, 5.762811925e-04f, 5.771524196e-04f, 5.780225949e-04f, 5.788917168e-04f, 5.797597841e-04f, 5.806267951e-04f,
+5.814927485e-04f, 5.823576428e-04f, 5.832214767e-04f, 5.840842486e-04f, 5.849459572e-04f, 5.858066011e-04f, 5.866661788e-04f, 5.875246889e-04f, 5.883821299e-04f, 5.892385005e-04f,
+5.900937993e-04f, 5.909480248e-04f, 5.918011757e-04f, 5.926532505e-04f, 5.935042478e-04f, 5.943541662e-04f, 5.952030043e-04f, 5.960507607e-04f, 5.968974340e-04f, 5.977430229e-04f,
+5.985875259e-04f, 5.994309416e-04f, 6.002732686e-04f, 6.011145056e-04f, 6.019546512e-04f, 6.027937039e-04f, 6.036316624e-04f, 6.044685254e-04f, 6.053042913e-04f, 6.061389590e-04f,
+6.069725269e-04f, 6.078049938e-04f, 6.086363582e-04f, 6.094666187e-04f, 6.102957741e-04f, 6.111238229e-04f, 6.119507638e-04f, 6.127765954e-04f, 6.136013164e-04f, 6.144249254e-04f,
+6.152474210e-04f, 6.160688019e-04f, 6.168890668e-04f, 6.177082143e-04f, 6.185262430e-04f, 6.193431517e-04f, 6.201589389e-04f, 6.209736033e-04f, 6.217871436e-04f, 6.225995585e-04f,
+6.234108465e-04f, 6.242210065e-04f, 6.250300370e-04f, 6.258379367e-04f, 6.266447044e-04f, 6.274503386e-04f, 6.282548380e-04f, 6.290582014e-04f, 6.298604274e-04f, 6.306615147e-04f,
+6.314614620e-04f, 6.322602679e-04f, 6.330579312e-04f, 6.338544506e-04f, 6.346498247e-04f, 6.354440523e-04f, 6.362371320e-04f, 6.370290625e-04f, 6.378198426e-04f, 6.386094709e-04f,
+6.393979462e-04f, 6.401852671e-04f, 6.409714325e-04f, 6.417564409e-04f, 6.425402911e-04f, 6.433229818e-04f, 6.441045118e-04f, 6.448848798e-04f, 6.456640844e-04f, 6.464421244e-04f,
+6.472189986e-04f, 6.479947056e-04f, 6.487692443e-04f, 6.495426132e-04f, 6.503148113e-04f, 6.510858371e-04f, 6.518556895e-04f, 6.526243671e-04f, 6.533918688e-04f, 6.541581933e-04f,
+6.549233393e-04f, 6.556873056e-04f, 6.564500909e-04f, 6.572116940e-04f, 6.579721137e-04f, 6.587313486e-04f, 6.594893976e-04f, 6.602462594e-04f, 6.610019329e-04f, 6.617564166e-04f,
+6.625097096e-04f, 6.632618104e-04f, 6.640127178e-04f, 6.647624308e-04f, 6.655109479e-04f, 6.662582681e-04f, 6.670043901e-04f, 6.677493126e-04f, 6.684930345e-04f, 6.692355546e-04f,
+6.699768716e-04f, 6.707169843e-04f, 6.714558916e-04f, 6.721935922e-04f, 6.729300849e-04f, 6.736653685e-04f, 6.743994419e-04f, 6.751323039e-04f, 6.758639532e-04f, 6.765943886e-04f,
+6.773236091e-04f, 6.780516133e-04f, 6.787784001e-04f, 6.795039683e-04f, 6.802283168e-04f, 6.809514444e-04f, 6.816733499e-04f, 6.823940321e-04f, 6.831134898e-04f, 6.838317219e-04f,
+6.845487273e-04f, 6.852645047e-04f, 6.859790530e-04f, 6.866923711e-04f, 6.874044577e-04f, 6.881153118e-04f, 6.888249321e-04f, 6.895333176e-04f, 6.902404670e-04f, 6.909463793e-04f,
+6.916510533e-04f, 6.923544878e-04f, 6.930566818e-04f, 6.937576340e-04f, 6.944573433e-04f, 6.951558087e-04f, 6.958530289e-04f, 6.965490029e-04f, 6.972437295e-04f, 6.979372076e-04f,
+6.986294361e-04f, 6.993204138e-04f, 7.000101397e-04f, 7.006986126e-04f, 7.013858315e-04f, 7.020717951e-04f, 7.027565025e-04f, 7.034399524e-04f, 7.041221438e-04f, 7.048030757e-04f,
+7.054827468e-04f, 7.061611561e-04f, 7.068383025e-04f, 7.075141849e-04f, 7.081888022e-04f, 7.088621534e-04f, 7.095342373e-04f, 7.102050529e-04f, 7.108745991e-04f, 7.115428747e-04f,
+7.122098788e-04f, 7.128756103e-04f, 7.135400680e-04f, 7.142032510e-04f, 7.148651580e-04f, 7.155257882e-04f, 7.161851404e-04f, 7.168432136e-04f, 7.175000066e-04f, 7.181555185e-04f,
+7.188097482e-04f, 7.194626946e-04f, 7.201143567e-04f, 7.207647335e-04f, 7.214138239e-04f, 7.220616268e-04f, 7.227081412e-04f, 7.233533662e-04f, 7.239973005e-04f, 7.246399433e-04f,
+7.252812935e-04f, 7.259213500e-04f, 7.265601119e-04f, 7.271975781e-04f, 7.278337475e-04f, 7.284686192e-04f, 7.291021922e-04f, 7.297344654e-04f, 7.303654378e-04f, 7.309951084e-04f,
+7.316234763e-04f, 7.322505403e-04f, 7.328762995e-04f, 7.335007529e-04f, 7.341238996e-04f, 7.347457384e-04f, 7.353662684e-04f, 7.359854887e-04f, 7.366033982e-04f, 7.372199959e-04f,
+7.378352809e-04f, 7.384492522e-04f, 7.390619087e-04f, 7.396732496e-04f, 7.402832738e-04f, 7.408919804e-04f, 7.414993684e-04f, 7.421054369e-04f, 7.427101848e-04f, 7.433136112e-04f,
+7.439157151e-04f, 7.445164957e-04f, 7.451159518e-04f, 7.457140827e-04f, 7.463108873e-04f, 7.469063646e-04f, 7.475005138e-04f, 7.480933338e-04f, 7.486848238e-04f, 7.492749828e-04f,
+7.498638099e-04f, 7.504513041e-04f, 7.510374645e-04f, 7.516222902e-04f, 7.522057802e-04f, 7.527879336e-04f, 7.533687495e-04f, 7.539482270e-04f, 7.545263651e-04f, 7.551031630e-04f,
+7.556786197e-04f, 7.562527343e-04f, 7.568255059e-04f, 7.573969336e-04f, 7.579670165e-04f, 7.585357537e-04f, 7.591031443e-04f, 7.596691874e-04f, 7.602338820e-04f, 7.607972274e-04f,
+7.613592226e-04f, 7.619198667e-04f, 7.624791589e-04f, 7.630370983e-04f, 7.635936839e-04f, 7.641489149e-04f, 7.647027904e-04f, 7.652553097e-04f, 7.658064716e-04f, 7.663562756e-04f,
+7.669047205e-04f, 7.674518057e-04f, 7.679975301e-04f, 7.685418931e-04f, 7.690848936e-04f, 7.696265310e-04f, 7.701668042e-04f, 7.707057124e-04f, 7.712432549e-04f, 7.717794308e-04f,
+7.723142392e-04f, 7.728476792e-04f, 7.733797502e-04f, 7.739104511e-04f, 7.744397812e-04f, 7.749677397e-04f, 7.754943257e-04f, 7.760195384e-04f, 7.765433769e-04f, 7.770658406e-04f,
+7.775869284e-04f, 7.781066397e-04f, 7.786249736e-04f, 7.791419294e-04f, 7.796575061e-04f, 7.801717030e-04f, 7.806845193e-04f, 7.811959541e-04f, 7.817060068e-04f, 7.822146765e-04f,
+7.827219623e-04f, 7.832278636e-04f, 7.837323795e-04f, 7.842355092e-04f, 7.847372520e-04f, 7.852376070e-04f, 7.857365736e-04f, 7.862341508e-04f, 7.867303380e-04f, 7.872251344e-04f,
+7.877185391e-04f, 7.882105516e-04f, 7.887011708e-04f, 7.891903962e-04f, 7.896782270e-04f, 7.901646623e-04f, 7.906497015e-04f, 7.911333438e-04f, 7.916155884e-04f, 7.920964346e-04f,
+7.925758817e-04f, 7.930539289e-04f, 7.935305754e-04f, 7.940058206e-04f, 7.944796637e-04f, 7.949521039e-04f, 7.954231406e-04f, 7.958927730e-04f, 7.963610004e-04f, 7.968278220e-04f,
+7.972932372e-04f, 7.977572453e-04f, 7.982198454e-04f, 7.986810370e-04f, 7.991408192e-04f, 7.995991914e-04f, 8.000561530e-04f, 8.005117030e-04f, 8.009658410e-04f, 8.014185662e-04f,
+8.018698778e-04f, 8.023197753e-04f, 8.027682578e-04f, 8.032153248e-04f, 8.036609755e-04f, 8.041052093e-04f, 8.045480254e-04f, 8.049894232e-04f, 8.054294021e-04f, 8.058679613e-04f,
+8.063051002e-04f, 8.067408181e-04f, 8.071751143e-04f, 8.076079883e-04f, 8.080394392e-04f, 8.084694666e-04f, 8.088980696e-04f, 8.093252477e-04f, 8.097510002e-04f, 8.101753265e-04f,
+8.105982259e-04f, 8.110196978e-04f, 8.114397416e-04f, 8.118583565e-04f, 8.122755420e-04f, 8.126912975e-04f, 8.131056222e-04f, 8.135185156e-04f, 8.139299771e-04f, 8.143400060e-04f,
+8.147486018e-04f, 8.151557637e-04f, 8.155614912e-04f, 8.159657837e-04f, 8.163686405e-04f, 8.167700611e-04f, 8.171700449e-04f, 8.175685912e-04f, 8.179656994e-04f, 8.183613690e-04f,
+8.187555994e-04f, 8.191483899e-04f, 8.195397400e-04f, 8.199296491e-04f, 8.203181166e-04f, 8.207051419e-04f, 8.210907244e-04f, 8.214748637e-04f, 8.218575590e-04f, 8.222388098e-04f,
+8.226186156e-04f, 8.229969758e-04f, 8.233738898e-04f, 8.237493571e-04f, 8.241233771e-04f, 8.244959492e-04f, 8.248670729e-04f, 8.252367477e-04f, 8.256049729e-04f, 8.259717481e-04f,
+8.263370727e-04f, 8.267009462e-04f, 8.270633680e-04f, 8.274243375e-04f, 8.277838544e-04f, 8.281419179e-04f, 8.284985277e-04f, 8.288536831e-04f, 8.292073837e-04f, 8.295596289e-04f,
+8.299104182e-04f, 8.302597510e-04f, 8.306076270e-04f, 8.309540455e-04f, 8.312990061e-04f, 8.316425083e-04f, 8.319845515e-04f, 8.323251352e-04f, 8.326642591e-04f, 8.330019224e-04f,
+8.333381249e-04f, 8.336728659e-04f, 8.340061450e-04f, 8.343379617e-04f, 8.346683155e-04f, 8.349972060e-04f, 8.353246326e-04f, 8.356505949e-04f, 8.359750924e-04f, 8.362981247e-04f,
+8.366196913e-04f, 8.369397917e-04f, 8.372584254e-04f, 8.375755920e-04f, 8.378912911e-04f, 8.382055222e-04f, 8.385182847e-04f, 8.388295784e-04f, 8.391394027e-04f, 8.394477572e-04f,
+8.397546415e-04f, 8.400600550e-04f, 8.403639975e-04f, 8.406664684e-04f, 8.409674672e-04f, 8.412669937e-04f, 8.415650474e-04f, 8.418616277e-04f, 8.421567344e-04f, 8.424503670e-04f,
+8.427425250e-04f, 8.430332082e-04f, 8.433224159e-04f, 8.436101480e-04f, 8.438964038e-04f, 8.441811832e-04f, 8.444644855e-04f, 8.447463105e-04f, 8.450266577e-04f, 8.453055268e-04f,
+8.455829174e-04f, 8.458588290e-04f, 8.461332614e-04f, 8.464062140e-04f, 8.466776866e-04f, 8.469476787e-04f, 8.472161900e-04f, 8.474832201e-04f, 8.477487687e-04f, 8.480128353e-04f,
+8.482754196e-04f, 8.485365213e-04f, 8.487961400e-04f, 8.490542753e-04f, 8.493109269e-04f, 8.495660944e-04f, 8.498197775e-04f, 8.500719758e-04f, 8.503226890e-04f, 8.505719167e-04f,
+8.508196587e-04f, 8.510659146e-04f, 8.513106839e-04f, 8.515539665e-04f, 8.517957620e-04f, 8.520360701e-04f, 8.522748903e-04f, 8.525122225e-04f, 8.527480663e-04f, 8.529824214e-04f,
+8.532152874e-04f, 8.534466641e-04f, 8.536765512e-04f, 8.539049483e-04f, 8.541318552e-04f, 8.543572715e-04f, 8.545811970e-04f, 8.548036313e-04f, 8.550245742e-04f, 8.552440253e-04f,
+8.554619845e-04f, 8.556784514e-04f, 8.558934257e-04f, 8.561069071e-04f, 8.563188954e-04f, 8.565293903e-04f, 8.567383916e-04f, 8.569458989e-04f, 8.571519120e-04f, 8.573564306e-04f,
+8.575594546e-04f, 8.577609835e-04f, 8.579610172e-04f, 8.581595554e-04f, 8.583565978e-04f, 8.585521443e-04f, 8.587461945e-04f, 8.589387482e-04f, 8.591298053e-04f, 8.593193654e-04f,
+8.595074283e-04f, 8.596939937e-04f, 8.598790616e-04f, 8.600626315e-04f, 8.602447034e-04f, 8.604252769e-04f, 8.606043519e-04f, 8.607819281e-04f, 8.609580054e-04f, 8.611325835e-04f,
+8.613056622e-04f, 8.614772414e-04f, 8.616473207e-04f, 8.618159000e-04f, 8.619829792e-04f, 8.621485579e-04f, 8.623126361e-04f, 8.624752135e-04f, 8.626362899e-04f, 8.627958652e-04f,
+8.629539392e-04f, 8.631105117e-04f, 8.632655824e-04f, 8.634191514e-04f, 8.635712183e-04f, 8.637217830e-04f, 8.638708453e-04f, 8.640184051e-04f, 8.641644623e-04f, 8.643090166e-04f,
+8.644520678e-04f, 8.645936160e-04f, 8.647336608e-04f, 8.648722021e-04f, 8.650092399e-04f, 8.651447739e-04f, 8.652788040e-04f, 8.654113301e-04f, 8.655423521e-04f, 8.656718698e-04f,
+8.657998830e-04f, 8.659263917e-04f, 8.660513957e-04f, 8.661748949e-04f, 8.662968893e-04f, 8.664173785e-04f, 8.665363627e-04f, 8.666538416e-04f, 8.667698151e-04f, 8.668842831e-04f,
+8.669972456e-04f, 8.671087024e-04f, 8.672186534e-04f, 8.673270985e-04f, 8.674340377e-04f, 8.675394708e-04f, 8.676433978e-04f, 8.677458186e-04f, 8.678467330e-04f, 8.679461410e-04f,
+8.680440426e-04f, 8.681404376e-04f, 8.682353260e-04f, 8.683287077e-04f, 8.684205827e-04f, 8.685109508e-04f, 8.685998121e-04f, 8.686871664e-04f, 8.687730137e-04f, 8.688573540e-04f,
+8.689401871e-04f, 8.690215131e-04f, 8.691013319e-04f, 8.691796435e-04f, 8.692564477e-04f, 8.693317447e-04f, 8.694055343e-04f, 8.694778165e-04f, 8.695485912e-04f, 8.696178585e-04f,
+8.696856184e-04f, 8.697518707e-04f, 8.698166155e-04f, 8.698798528e-04f, 8.699415825e-04f, 8.700018046e-04f, 8.700605192e-04f, 8.701177262e-04f, 8.701734256e-04f, 8.702276174e-04f,
+8.702803016e-04f, 8.703314782e-04f, 8.703811472e-04f, 8.704293087e-04f, 8.704759626e-04f, 8.705211090e-04f, 8.705647478e-04f, 8.706068791e-04f, 8.706475029e-04f, 8.706866193e-04f,
+8.707242282e-04f, 8.707603296e-04f, 8.707949237e-04f, 8.708280105e-04f, 8.708595900e-04f, 8.708896621e-04f, 8.709182271e-04f, 8.709452848e-04f, 8.709708355e-04f, 8.709948790e-04f,
+8.710174155e-04f, 8.710384450e-04f, 8.710579676e-04f, 8.710759834e-04f, 8.710924923e-04f, 8.711074946e-04f, 8.711209901e-04f, 8.711329791e-04f, 8.711434615e-04f, 8.711524375e-04f,
+8.711599071e-04f, 8.711658705e-04f, 8.711703276e-04f, 8.711732787e-04f, 8.711747237e-04f, 8.711746627e-04f, 8.711730960e-04f, 8.711700235e-04f, 8.711654453e-04f, 8.711593616e-04f,
+8.711517725e-04f, 8.711426781e-04f, 8.711320784e-04f, 8.711199736e-04f, 8.711063638e-04f, 8.710912492e-04f, 8.710746298e-04f, 8.710565058e-04f, 8.710368772e-04f, 8.710157443e-04f,
+8.709931072e-04f, 8.709689659e-04f, 8.709433206e-04f, 8.709161715e-04f, 8.708875187e-04f, 8.708573624e-04f, 8.708257026e-04f, 8.707925396e-04f, 8.707578735e-04f, 8.707217044e-04f,
+8.706840325e-04f, 8.706448580e-04f, 8.706041810e-04f, 8.705620017e-04f, 8.705183202e-04f, 8.704731367e-04f, 8.704264515e-04f, 8.703782646e-04f, 8.703285763e-04f, 8.702773867e-04f,
+8.702246960e-04f, 8.701705043e-04f, 8.701148120e-04f, 8.700576191e-04f, 8.699989259e-04f, 8.699387326e-04f, 8.698770393e-04f, 8.698138463e-04f, 8.697491537e-04f, 8.696829618e-04f,
+8.696152708e-04f, 8.695460808e-04f, 8.694753921e-04f, 8.694032050e-04f, 8.693295196e-04f, 8.692543361e-04f, 8.691776548e-04f, 8.690994760e-04f, 8.690197997e-04f, 8.689386263e-04f,
+8.688559560e-04f, 8.687717891e-04f, 8.686861257e-04f, 8.685989661e-04f, 8.685103106e-04f, 8.684201593e-04f, 8.683285127e-04f, 8.682353708e-04f, 8.681407340e-04f, 8.680446025e-04f,
+8.679469766e-04f, 8.678478566e-04f, 8.677472426e-04f, 8.676451350e-04f, 8.675415340e-04f, 8.674364400e-04f, 8.673298531e-04f, 8.672217738e-04f, 8.671122021e-04f, 8.670011385e-04f,
+8.668885832e-04f, 8.667745365e-04f, 8.666589987e-04f, 8.665419701e-04f, 8.664234509e-04f, 8.663034416e-04f, 8.661819423e-04f, 8.660589534e-04f, 8.659344752e-04f, 8.658085079e-04f,
+8.656810520e-04f, 8.655521077e-04f, 8.654216754e-04f, 8.652897553e-04f, 8.651563478e-04f, 8.650214531e-04f, 8.648850717e-04f, 8.647472039e-04f, 8.646078499e-04f, 8.644670102e-04f,
+8.643246850e-04f, 8.641808747e-04f, 8.640355797e-04f, 8.638888002e-04f, 8.637405367e-04f, 8.635907894e-04f, 8.634395588e-04f, 8.632868451e-04f, 8.631326488e-04f, 8.629769702e-04f,
+8.628198096e-04f, 8.626611675e-04f, 8.625010441e-04f, 8.623394399e-04f, 8.621763553e-04f, 8.620117905e-04f, 8.618457461e-04f, 8.616782223e-04f, 8.615092195e-04f, 8.613387382e-04f,
+8.611667787e-04f, 8.609933414e-04f, 8.608184267e-04f, 8.606420350e-04f, 8.604641667e-04f, 8.602848221e-04f, 8.601040018e-04f, 8.599217061e-04f, 8.597379353e-04f, 8.595526900e-04f,
+8.593659705e-04f, 8.591777773e-04f, 8.589881107e-04f, 8.587969712e-04f, 8.586043592e-04f, 8.584102752e-04f, 8.582147195e-04f, 8.580176925e-04f, 8.578191948e-04f, 8.576192268e-04f,
+8.574177888e-04f, 8.572148814e-04f, 8.570105049e-04f, 8.568046599e-04f, 8.565973467e-04f, 8.563885659e-04f, 8.561783178e-04f, 8.559666030e-04f, 8.557534218e-04f, 8.555387748e-04f,
+8.553226623e-04f, 8.551050850e-04f, 8.548860432e-04f, 8.546655374e-04f, 8.544435681e-04f, 8.542201357e-04f, 8.539952408e-04f, 8.537688838e-04f, 8.535410651e-04f, 8.533117854e-04f,
+8.530810451e-04f, 8.528488446e-04f, 8.526151844e-04f, 8.523800651e-04f, 8.521434872e-04f, 8.519054511e-04f, 8.516659573e-04f, 8.514250064e-04f, 8.511825989e-04f, 8.509387352e-04f,
+8.506934160e-04f, 8.504466416e-04f, 8.501984126e-04f, 8.499487296e-04f, 8.496975931e-04f, 8.494450035e-04f, 8.491909615e-04f, 8.489354674e-04f, 8.486785220e-04f, 8.484201257e-04f,
+8.481602790e-04f, 8.478989825e-04f, 8.476362368e-04f, 8.473720423e-04f, 8.471063997e-04f, 8.468393094e-04f, 8.465707720e-04f, 8.463007881e-04f, 8.460293583e-04f, 8.457564831e-04f,
+8.454821630e-04f, 8.452063986e-04f, 8.449291906e-04f, 8.446505394e-04f, 8.443704456e-04f, 8.440889098e-04f, 8.438059327e-04f, 8.435215147e-04f, 8.432356564e-04f, 8.429483584e-04f,
+8.426596214e-04f, 8.423694459e-04f, 8.420778325e-04f, 8.417847817e-04f, 8.414902943e-04f, 8.411943707e-04f, 8.408970117e-04f, 8.405982177e-04f, 8.402979894e-04f, 8.399963275e-04f,
+8.396932324e-04f, 8.393887049e-04f, 8.390827455e-04f, 8.387753549e-04f, 8.384665337e-04f, 8.381562825e-04f, 8.378446019e-04f, 8.375314926e-04f, 8.372169552e-04f, 8.369009903e-04f,
+8.365835986e-04f, 8.362647807e-04f, 8.359445372e-04f, 8.356228688e-04f, 8.352997762e-04f, 8.349752599e-04f, 8.346493207e-04f, 8.343219591e-04f, 8.339931759e-04f, 8.336629716e-04f,
+8.333313471e-04f, 8.329983028e-04f, 8.326638395e-04f, 8.323279579e-04f, 8.319906585e-04f, 8.316519422e-04f, 8.313118095e-04f, 8.309702612e-04f, 8.306272979e-04f, 8.302829203e-04f,
+8.299371290e-04f, 8.295899249e-04f, 8.292413084e-04f, 8.288912805e-04f, 8.285398417e-04f, 8.281869927e-04f, 8.278327343e-04f, 8.274770671e-04f, 8.271199918e-04f, 8.267615092e-04f,
+8.264016199e-04f, 8.260403247e-04f, 8.256776243e-04f, 8.253135194e-04f, 8.249480107e-04f, 8.245810989e-04f, 8.242127847e-04f, 8.238430690e-04f, 8.234719523e-04f, 8.230994355e-04f,
+8.227255192e-04f, 8.223502042e-04f, 8.219734913e-04f, 8.215953811e-04f, 8.212158745e-04f, 8.208349721e-04f, 8.204526747e-04f, 8.200689830e-04f, 8.196838979e-04f, 8.192974200e-04f,
+8.189095501e-04f, 8.185202890e-04f, 8.181296374e-04f, 8.177375961e-04f, 8.173441659e-04f, 8.169493475e-04f, 8.165531416e-04f, 8.161555492e-04f, 8.157565708e-04f, 8.153562074e-04f,
+8.149544597e-04f, 8.145513284e-04f, 8.141468144e-04f, 8.137409185e-04f, 8.133336414e-04f, 8.129249839e-04f, 8.125149468e-04f, 8.121035309e-04f, 8.116907370e-04f, 8.112765660e-04f,
+8.108610185e-04f, 8.104440955e-04f, 8.100257977e-04f, 8.096061259e-04f, 8.091850809e-04f, 8.087626637e-04f, 8.083388748e-04f, 8.079137153e-04f, 8.074871859e-04f, 8.070592874e-04f,
+8.066300207e-04f, 8.061993865e-04f, 8.057673858e-04f, 8.053340193e-04f, 8.048992879e-04f, 8.044631925e-04f, 8.040257338e-04f, 8.035869127e-04f, 8.031467300e-04f, 8.027051866e-04f,
+8.022622834e-04f, 8.018180212e-04f, 8.013724008e-04f, 8.009254231e-04f, 8.004770890e-04f, 8.000273992e-04f, 7.995763548e-04f, 7.991239565e-04f, 7.986702052e-04f, 7.982151018e-04f,
+7.977586472e-04f, 7.973008422e-04f, 7.968416876e-04f, 7.963811845e-04f, 7.959193336e-04f, 7.954561359e-04f, 7.949915922e-04f, 7.945257034e-04f, 7.940584704e-04f, 7.935898941e-04f,
+7.931199754e-04f, 7.926487152e-04f, 7.921761144e-04f, 7.917021739e-04f, 7.912268945e-04f, 7.907502773e-04f, 7.902723230e-04f, 7.897930327e-04f, 7.893124072e-04f, 7.888304474e-04f,
+7.883471543e-04f, 7.878625288e-04f, 7.873765717e-04f, 7.868892841e-04f, 7.864006669e-04f, 7.859107209e-04f, 7.854194471e-04f, 7.849268465e-04f, 7.844329199e-04f, 7.839376683e-04f,
+7.834410927e-04f, 7.829431940e-04f, 7.824439731e-04f, 7.819434310e-04f, 7.814415686e-04f, 7.809383869e-04f, 7.804338868e-04f, 7.799280693e-04f, 7.794209353e-04f, 7.789124859e-04f,
+7.784027219e-04f, 7.778916443e-04f, 7.773792542e-04f, 7.768655523e-04f, 7.763505399e-04f, 7.758342177e-04f, 7.753165868e-04f, 7.747976481e-04f, 7.742774027e-04f, 7.737558515e-04f,
+7.732329955e-04f, 7.727088357e-04f, 7.721833730e-04f, 7.716566085e-04f, 7.711285432e-04f, 7.705991780e-04f, 7.700685139e-04f, 7.695365520e-04f, 7.690032933e-04f, 7.684687387e-04f,
+7.679328892e-04f, 7.673957459e-04f, 7.668573098e-04f, 7.663175818e-04f, 7.657765631e-04f, 7.652342545e-04f, 7.646906572e-04f, 7.641457721e-04f, 7.635996003e-04f, 7.630521428e-04f,
+7.625034007e-04f, 7.619533748e-04f, 7.614020664e-04f, 7.608494764e-04f, 7.602956058e-04f, 7.597404558e-04f, 7.591840272e-04f, 7.586263213e-04f, 7.580673389e-04f, 7.575070812e-04f,
+7.569455493e-04f, 7.563827440e-04f, 7.558186667e-04f, 7.552533181e-04f, 7.546866995e-04f, 7.541188119e-04f, 7.535496564e-04f, 7.529792339e-04f, 7.524075456e-04f, 7.518345926e-04f,
+7.512603759e-04f, 7.506848966e-04f, 7.501081557e-04f, 7.495301544e-04f, 7.489508936e-04f, 7.483703746e-04f, 7.477885984e-04f, 7.472055660e-04f, 7.466212785e-04f, 7.460357371e-04f,
+7.454489429e-04f, 7.448608968e-04f, 7.442716001e-04f, 7.436810538e-04f, 7.430892589e-04f, 7.424962167e-04f, 7.419019283e-04f, 7.413063946e-04f, 7.407096169e-04f, 7.401115962e-04f,
+7.395123336e-04f, 7.389118304e-04f, 7.383100875e-04f, 7.377071061e-04f, 7.371028873e-04f, 7.364974322e-04f, 7.358907421e-04f, 7.352828179e-04f, 7.346736608e-04f, 7.340632720e-04f,
+7.334516526e-04f, 7.328388037e-04f, 7.322247264e-04f, 7.316094219e-04f, 7.309928914e-04f, 7.303751360e-04f, 7.297561567e-04f, 7.291359548e-04f, 7.285145315e-04f, 7.278918878e-04f,
+7.272680249e-04f, 7.266429440e-04f, 7.260166462e-04f, 7.253891328e-04f, 7.247604047e-04f, 7.241304633e-04f, 7.234993097e-04f, 7.228669450e-04f, 7.222333704e-04f, 7.215985871e-04f,
+7.209625963e-04f, 7.203253991e-04f, 7.196869967e-04f, 7.190473903e-04f, 7.184065811e-04f, 7.177645702e-04f, 7.171213589e-04f, 7.164769483e-04f, 7.158313396e-04f, 7.151845341e-04f,
+7.145365328e-04f, 7.138873370e-04f, 7.132369480e-04f, 7.125853668e-04f, 7.119325947e-04f, 7.112786329e-04f, 7.106234826e-04f, 7.099671450e-04f, 7.093096213e-04f, 7.086509128e-04f,
+7.079910206e-04f, 7.073299460e-04f, 7.066676901e-04f, 7.060042543e-04f, 7.053396396e-04f, 7.046738474e-04f, 7.040068788e-04f, 7.033387352e-04f, 7.026694176e-04f, 7.019989274e-04f,
+7.013272658e-04f, 7.006544340e-04f, 6.999804333e-04f, 6.993052648e-04f, 6.986289299e-04f, 6.979514297e-04f, 6.972727656e-04f, 6.965929387e-04f, 6.959119503e-04f, 6.952298017e-04f,
+6.945464942e-04f, 6.938620288e-04f, 6.931764070e-04f, 6.924896300e-04f, 6.918016991e-04f, 6.911126154e-04f, 6.904223803e-04f, 6.897309950e-04f, 6.890384608e-04f, 6.883447790e-04f,
+6.876499509e-04f, 6.869539776e-04f, 6.862568606e-04f, 6.855586010e-04f, 6.848592001e-04f, 6.841586593e-04f, 6.834569798e-04f, 6.827541628e-04f, 6.820502098e-04f, 6.813451219e-04f,
+6.806389004e-04f, 6.799315467e-04f, 6.792230621e-04f, 6.785134478e-04f, 6.778027051e-04f, 6.770908354e-04f, 6.763778399e-04f, 6.756637199e-04f, 6.749484768e-04f, 6.742321118e-04f,
+6.735146263e-04f, 6.727960215e-04f, 6.720762989e-04f, 6.713554596e-04f, 6.706335051e-04f, 6.699104365e-04f, 6.691862554e-04f, 6.684609629e-04f, 6.677345604e-04f, 6.670070492e-04f,
+6.662784307e-04f, 6.655487061e-04f, 6.648178769e-04f, 6.640859443e-04f, 6.633529096e-04f, 6.626187743e-04f, 6.618835397e-04f, 6.611472070e-04f, 6.604097777e-04f, 6.596712530e-04f,
+6.589316343e-04f, 6.581909231e-04f, 6.574491205e-04f, 6.567062280e-04f, 6.559622470e-04f, 6.552171787e-04f, 6.544710245e-04f, 6.537237858e-04f, 6.529754640e-04f, 6.522260604e-04f,
+6.514755764e-04f, 6.507240133e-04f, 6.499713725e-04f, 6.492176554e-04f, 6.484628633e-04f, 6.477069977e-04f, 6.469500598e-04f, 6.461920511e-04f, 6.454329730e-04f, 6.446728268e-04f,
+6.439116139e-04f, 6.431493356e-04f, 6.423859935e-04f, 6.416215888e-04f, 6.408561230e-04f, 6.400895974e-04f, 6.393220134e-04f, 6.385533724e-04f, 6.377836759e-04f, 6.370129252e-04f,
+6.362411217e-04f, 6.354682668e-04f, 6.346943619e-04f, 6.339194085e-04f, 6.331434079e-04f, 6.323663615e-04f, 6.315882707e-04f, 6.308091370e-04f, 6.300289618e-04f, 6.292477464e-04f,
+6.284654924e-04f, 6.276822010e-04f, 6.268978738e-04f, 6.261125121e-04f, 6.253261174e-04f, 6.245386912e-04f, 6.237502347e-04f, 6.229607495e-04f, 6.221702369e-04f, 6.213786985e-04f,
+6.205861356e-04f, 6.197925497e-04f, 6.189979423e-04f, 6.182023146e-04f, 6.174056683e-04f, 6.166080047e-04f, 6.158093253e-04f, 6.150096315e-04f, 6.142089248e-04f, 6.134072065e-04f,
+6.126044783e-04f, 6.118007415e-04f, 6.109959975e-04f, 6.101902479e-04f, 6.093834940e-04f, 6.085757374e-04f, 6.077669795e-04f, 6.069572217e-04f, 6.061464655e-04f, 6.053347125e-04f,
+6.045219640e-04f, 6.037082215e-04f, 6.028934865e-04f, 6.020777604e-04f, 6.012610448e-04f, 6.004433411e-04f, 5.996246507e-04f, 5.988049753e-04f, 5.979843161e-04f, 5.971626748e-04f,
+5.963400528e-04f, 5.955164515e-04f, 5.946918726e-04f, 5.938663173e-04f, 5.930397873e-04f, 5.922122841e-04f, 5.913838091e-04f, 5.905543638e-04f, 5.897239497e-04f, 5.888925683e-04f,
+5.880602211e-04f, 5.872269096e-04f, 5.863926354e-04f, 5.855573998e-04f, 5.847212045e-04f, 5.838840509e-04f, 5.830459405e-04f, 5.822068748e-04f, 5.813668554e-04f, 5.805258838e-04f,
+5.796839614e-04f, 5.788410898e-04f, 5.779972705e-04f, 5.771525051e-04f, 5.763067950e-04f, 5.754601417e-04f, 5.746125468e-04f, 5.737640119e-04f, 5.729145384e-04f, 5.720641278e-04f,
+5.712127818e-04f, 5.703605017e-04f, 5.695072893e-04f, 5.686531459e-04f, 5.677980731e-04f, 5.669420725e-04f, 5.660851456e-04f, 5.652272939e-04f, 5.643685191e-04f, 5.635088225e-04f,
+5.626482058e-04f, 5.617866705e-04f, 5.609242182e-04f, 5.600608504e-04f, 5.591965686e-04f, 5.583313745e-04f, 5.574652695e-04f, 5.565982553e-04f, 5.557303333e-04f, 5.548615051e-04f,
+5.539917723e-04f, 5.531211365e-04f, 5.522495992e-04f, 5.513771620e-04f, 5.505038264e-04f, 5.496295940e-04f, 5.487544663e-04f, 5.478784451e-04f, 5.470015317e-04f, 5.461237278e-04f,
+5.452450350e-04f, 5.443654548e-04f, 5.434849888e-04f, 5.426036387e-04f, 5.417214058e-04f, 5.408382920e-04f, 5.399542986e-04f, 5.390694274e-04f, 5.381836798e-04f, 5.372970576e-04f,
+5.364095622e-04f, 5.355211953e-04f, 5.346319584e-04f, 5.337418532e-04f, 5.328508812e-04f, 5.319590440e-04f, 5.310663433e-04f, 5.301727806e-04f, 5.292783575e-04f, 5.283830757e-04f,
+5.274869366e-04f, 5.265899420e-04f, 5.256920934e-04f, 5.247933925e-04f, 5.238938408e-04f, 5.229934400e-04f, 5.220921916e-04f, 5.211900973e-04f, 5.202871587e-04f, 5.193833774e-04f,
+5.184787550e-04f, 5.175732932e-04f, 5.166669935e-04f, 5.157598575e-04f, 5.148518870e-04f, 5.139430835e-04f, 5.130334486e-04f, 5.121229840e-04f, 5.112116913e-04f, 5.102995720e-04f,
+5.093866280e-04f, 5.084728607e-04f, 5.075582718e-04f, 5.066428629e-04f, 5.057266358e-04f, 5.048095919e-04f, 5.038917330e-04f, 5.029730606e-04f, 5.020535765e-04f, 5.011332823e-04f,
+5.002121795e-04f, 4.992902699e-04f, 4.983675551e-04f, 4.974440367e-04f, 4.965197165e-04f, 4.955945959e-04f, 4.946686768e-04f, 4.937419606e-04f, 4.928144492e-04f, 4.918861441e-04f,
+4.909570470e-04f, 4.900271595e-04f, 4.890964833e-04f, 4.881650202e-04f, 4.872327716e-04f, 4.862997393e-04f, 4.853659250e-04f, 4.844313303e-04f, 4.834959569e-04f, 4.825598064e-04f,
+4.816228805e-04f, 4.806851809e-04f, 4.797467092e-04f, 4.788074672e-04f, 4.778674564e-04f, 4.769266787e-04f, 4.759851355e-04f, 4.750428287e-04f, 4.740997599e-04f, 4.731559307e-04f,
+4.722113429e-04f, 4.712659981e-04f, 4.703198981e-04f, 4.693730444e-04f, 4.684254388e-04f, 4.674770830e-04f, 4.665279786e-04f, 4.655781274e-04f, 4.646275310e-04f, 4.636761911e-04f,
+4.627241094e-04f, 4.617712876e-04f, 4.608177274e-04f, 4.598634305e-04f, 4.589083986e-04f, 4.579526334e-04f, 4.569961366e-04f, 4.560389099e-04f, 4.550809549e-04f, 4.541222734e-04f,
+4.531628671e-04f, 4.522027377e-04f, 4.512418869e-04f, 4.502803164e-04f, 4.493180279e-04f, 4.483550232e-04f, 4.473913038e-04f, 4.464268716e-04f, 4.454617283e-04f, 4.444958755e-04f,
+4.435293150e-04f, 4.425620485e-04f, 4.415940777e-04f, 4.406254044e-04f, 4.396560302e-04f, 4.386859569e-04f, 4.377151861e-04f, 4.367437197e-04f, 4.357715593e-04f, 4.347987066e-04f,
+4.338251635e-04f, 4.328509315e-04f, 4.318760125e-04f, 4.309004082e-04f, 4.299241203e-04f, 4.289471505e-04f, 4.279695005e-04f, 4.269911721e-04f, 4.260121671e-04f, 4.250324871e-04f,
+4.240521340e-04f, 4.230711093e-04f, 4.220894150e-04f, 4.211070526e-04f, 4.201240240e-04f, 4.191403309e-04f, 4.181559750e-04f, 4.171709581e-04f, 4.161852820e-04f, 4.151989483e-04f,
+4.142119588e-04f, 4.132243153e-04f, 4.122360195e-04f, 4.112470731e-04f, 4.102574780e-04f, 4.092672358e-04f, 4.082763484e-04f, 4.072848174e-04f, 4.062926446e-04f, 4.052998319e-04f,
+4.043063808e-04f, 4.033122933e-04f, 4.023175710e-04f, 4.013222157e-04f, 4.003262292e-04f, 3.993296132e-04f, 3.983323696e-04f, 3.973344999e-04f, 3.963360061e-04f, 3.953368899e-04f,
+3.943371531e-04f, 3.933367974e-04f, 3.923358246e-04f, 3.913342364e-04f, 3.903320347e-04f, 3.893292211e-04f, 3.883257976e-04f, 3.873217658e-04f, 3.863171275e-04f, 3.853118845e-04f,
+3.843060386e-04f, 3.832995915e-04f, 3.822925451e-04f, 3.812849010e-04f, 3.802766612e-04f, 3.792678273e-04f, 3.782584012e-04f, 3.772483846e-04f, 3.762377793e-04f, 3.752265871e-04f,
+3.742148098e-04f, 3.732024492e-04f, 3.721895070e-04f, 3.711759850e-04f, 3.701618851e-04f, 3.691472090e-04f, 3.681319586e-04f, 3.671161355e-04f, 3.660997416e-04f, 3.650827787e-04f,
+3.640652486e-04f, 3.630471531e-04f, 3.620284939e-04f, 3.610092729e-04f, 3.599894919e-04f, 3.589691526e-04f, 3.579482569e-04f, 3.569268066e-04f, 3.559048034e-04f, 3.548822492e-04f,
+3.538591458e-04f, 3.528354949e-04f, 3.518112984e-04f, 3.507865581e-04f, 3.497612758e-04f, 3.487354533e-04f, 3.477090923e-04f, 3.466821948e-04f, 3.456547625e-04f, 3.446267972e-04f,
+3.435983008e-04f, 3.425692750e-04f, 3.415397217e-04f, 3.405096426e-04f, 3.394790397e-04f, 3.384479146e-04f, 3.374162693e-04f, 3.363841054e-04f, 3.353514250e-04f, 3.343182297e-04f,
+3.332845214e-04f, 3.322503019e-04f, 3.312155730e-04f, 3.301803366e-04f, 3.291445945e-04f, 3.281083484e-04f, 3.270716003e-04f, 3.260343519e-04f, 3.249966051e-04f, 3.239583616e-04f,
+3.229196234e-04f, 3.218803922e-04f, 3.208406699e-04f, 3.198004583e-04f, 3.187597592e-04f, 3.177185745e-04f, 3.166769059e-04f, 3.156347554e-04f, 3.145921247e-04f, 3.135490158e-04f,
+3.125054303e-04f, 3.114613702e-04f, 3.104168372e-04f, 3.093718333e-04f, 3.083263603e-04f, 3.072804199e-04f, 3.062340141e-04f, 3.051871447e-04f, 3.041398134e-04f, 3.030920222e-04f,
+3.020437729e-04f, 3.009950674e-04f, 2.999459074e-04f, 2.988962948e-04f, 2.978462315e-04f, 2.967957193e-04f, 2.957447600e-04f, 2.946933555e-04f, 2.936415077e-04f, 2.925892183e-04f,
+2.915364893e-04f, 2.904833224e-04f, 2.894297196e-04f, 2.883756826e-04f, 2.873212134e-04f, 2.862663138e-04f, 2.852109855e-04f, 2.841552306e-04f, 2.830990508e-04f, 2.820424479e-04f,
+2.809854239e-04f, 2.799279806e-04f, 2.788701199e-04f, 2.778118435e-04f, 2.767531534e-04f, 2.756940514e-04f, 2.746345393e-04f, 2.735746191e-04f, 2.725142926e-04f, 2.714535616e-04f,
+2.703924280e-04f, 2.693308937e-04f, 2.682689605e-04f, 2.672066303e-04f, 2.661439049e-04f, 2.650807862e-04f, 2.640172761e-04f, 2.629533765e-04f, 2.618890891e-04f, 2.608244159e-04f,
+2.597593587e-04f, 2.586939194e-04f, 2.576280998e-04f, 2.565619019e-04f, 2.554953275e-04f, 2.544283784e-04f, 2.533610566e-04f, 2.522933638e-04f, 2.512253020e-04f, 2.501568731e-04f,
+2.490880788e-04f, 2.480189212e-04f, 2.469494019e-04f, 2.458795230e-04f, 2.448092863e-04f, 2.437386936e-04f, 2.426677469e-04f, 2.415964480e-04f, 2.405247988e-04f, 2.394528011e-04f,
+2.383804568e-04f, 2.373077679e-04f, 2.362347362e-04f, 2.351613635e-04f, 2.340876517e-04f, 2.330136028e-04f, 2.319392186e-04f, 2.308645009e-04f, 2.297894517e-04f, 2.287140728e-04f,
+2.276383661e-04f, 2.265623336e-04f, 2.254859770e-04f, 2.244092982e-04f, 2.233322992e-04f, 2.222549818e-04f, 2.211773479e-04f, 2.200993994e-04f, 2.190211382e-04f, 2.179425661e-04f,
+2.168636850e-04f, 2.157844969e-04f, 2.147050035e-04f, 2.136252069e-04f, 2.125451088e-04f, 2.114647112e-04f, 2.103840159e-04f, 2.093030249e-04f, 2.082217400e-04f, 2.071401631e-04f,
+2.060582961e-04f, 2.049761409e-04f, 2.038936994e-04f, 2.028109734e-04f, 2.017279649e-04f, 2.006446758e-04f, 1.995611078e-04f, 1.984772631e-04f, 1.973931433e-04f, 1.963087504e-04f,
+1.952240863e-04f, 1.941391530e-04f, 1.930539522e-04f, 1.919684859e-04f, 1.908827559e-04f, 1.897967643e-04f, 1.887105128e-04f, 1.876240033e-04f, 1.865372378e-04f, 1.854502182e-04f,
+1.843629463e-04f, 1.832754240e-04f, 1.821876532e-04f, 1.810996359e-04f, 1.800113739e-04f, 1.789228691e-04f, 1.778341235e-04f, 1.767451388e-04f, 1.756559171e-04f, 1.745664602e-04f,
+1.734767700e-04f, 1.723868484e-04f, 1.712966973e-04f, 1.702063186e-04f, 1.691157142e-04f, 1.680248860e-04f, 1.669338360e-04f, 1.658425659e-04f, 1.647510777e-04f, 1.636593734e-04f,
+1.625674547e-04f, 1.614753237e-04f, 1.603829822e-04f, 1.592904320e-04f, 1.581976752e-04f, 1.571047137e-04f, 1.560115492e-04f, 1.549181837e-04f, 1.538246192e-04f, 1.527308575e-04f,
+1.516369006e-04f, 1.505427502e-04f, 1.494484084e-04f, 1.483538771e-04f, 1.472591581e-04f, 1.461642533e-04f, 1.450691647e-04f, 1.439738942e-04f, 1.428784436e-04f, 1.417828149e-04f,
+1.406870100e-04f, 1.395910307e-04f, 1.384948791e-04f, 1.373985569e-04f, 1.363020661e-04f, 1.352054087e-04f, 1.341085864e-04f, 1.330116013e-04f, 1.319144552e-04f, 1.308171500e-04f,
+1.297196877e-04f, 1.286220701e-04f, 1.275242991e-04f, 1.264263768e-04f, 1.253283049e-04f, 1.242300853e-04f, 1.231317201e-04f, 1.220332110e-04f, 1.209345601e-04f, 1.198357691e-04f,
+1.187368401e-04f, 1.176377749e-04f, 1.165385754e-04f, 1.154392436e-04f, 1.143397813e-04f, 1.132401905e-04f, 1.121404731e-04f, 1.110406309e-04f, 1.099406660e-04f, 1.088405801e-04f,
+1.077403752e-04f, 1.066400533e-04f, 1.055396162e-04f, 1.044390658e-04f, 1.033384041e-04f, 1.022376329e-04f, 1.011367542e-04f, 1.000357698e-04f, 9.893468179e-05f, 9.783349194e-05f,
+9.673220220e-05f, 9.563081447e-05f, 9.452933068e-05f, 9.342775272e-05f, 9.232608251e-05f, 9.122432196e-05f, 9.012247298e-05f, 8.902053748e-05f, 8.791851737e-05f, 8.681641456e-05f,
+8.571423096e-05f, 8.461196848e-05f, 8.350962904e-05f, 8.240721454e-05f, 8.130472689e-05f, 8.020216801e-05f, 7.909953980e-05f, 7.799684418e-05f, 7.689408306e-05f, 7.579125834e-05f,
+7.468837195e-05f, 7.358542578e-05f, 7.248242175e-05f, 7.137936176e-05f, 7.027624774e-05f, 6.917308159e-05f, 6.806986523e-05f, 6.696660055e-05f, 6.586328947e-05f, 6.475993391e-05f,
+6.365653577e-05f, 6.255309697e-05f, 6.144961940e-05f, 6.034610499e-05f, 5.924255565e-05f, 5.813897328e-05f, 5.703535979e-05f, 5.593171709e-05f, 5.482804710e-05f, 5.372435173e-05f,
+5.262063287e-05f, 5.151689245e-05f, 5.041313238e-05f, 4.930935455e-05f, 4.820556088e-05f, 4.710175329e-05f, 4.599793367e-05f, 4.489410395e-05f, 4.379026602e-05f, 4.268642180e-05f,
+4.158257320e-05f, 4.047872211e-05f, 3.937487047e-05f, 3.827102016e-05f, 3.716717310e-05f, 3.606333120e-05f, 3.495949637e-05f, 3.385567051e-05f, 3.275185553e-05f, 3.164805334e-05f,
+3.054426585e-05f, 2.944049496e-05f, 2.833674259e-05f, 2.723301063e-05f, 2.612930099e-05f, 2.502561559e-05f, 2.392195633e-05f, 2.281832512e-05f, 2.171472385e-05f, 2.061115444e-05f,
+1.950761880e-05f, 1.840411882e-05f, 1.730065642e-05f, 1.619723350e-05f, 1.509385197e-05f, 1.399051372e-05f, 1.288722067e-05f, 1.178397472e-05f, 1.068077777e-05f, 9.577631735e-06f,
+8.474538509e-06f, 7.371499999e-06f, 6.268518109e-06f, 5.165594741e-06f, 4.062731800e-06f, 2.959931187e-06f, 1.857194806e-06f, 7.545245588e-07f, -3.480776521e-07f, -1.450609925e-06f,
+-2.553070357e-06f, -3.655457049e-06f, -4.757768097e-06f, -5.860001602e-06f, -6.962155663e-06f, -8.064228379e-06f, -9.166217850e-06f, -1.026812218e-05f, -1.136993946e-05f, -1.247166779e-05f,
+-1.357330529e-05f, -1.467485004e-05f, -1.577630015e-05f, -1.687765372e-05f, -1.797890886e-05f, -1.908006366e-05f, -2.018111622e-05f, -2.128206466e-05f, -2.238290708e-05f, -2.348364157e-05f,
+-2.458426624e-05f, -2.568477919e-05f, -2.678517854e-05f, -2.788546238e-05f, -2.898562882e-05f, -3.008567596e-05f, -3.118560191e-05f, -3.228540479e-05f, -3.338508268e-05f, -3.448463370e-05f,
+-3.558405596e-05f, -3.668334756e-05f, -3.778250661e-05f, -3.888153123e-05f, -3.998041951e-05f, -4.107916956e-05f, -4.217777951e-05f, -4.327624745e-05f, -4.437457149e-05f, -4.547274975e-05f,
+-4.657078033e-05f, -4.766866135e-05f, -4.876639092e-05f, -4.986396715e-05f, -5.096138815e-05f, -5.205865203e-05f, -5.315575691e-05f, -5.425270090e-05f, -5.534948212e-05f, -5.644609867e-05f,
+-5.754254868e-05f, -5.863883025e-05f, -5.973494151e-05f, -6.083088056e-05f, -6.192664553e-05f, -6.302223453e-05f, -6.411764568e-05f, -6.521287709e-05f, -6.630792689e-05f, -6.740279318e-05f,
+-6.849747410e-05f, -6.959196776e-05f, -7.068627227e-05f, -7.178038577e-05f, -7.287430636e-05f, -7.396803217e-05f, -7.506156133e-05f, -7.615489194e-05f, -7.724802215e-05f, -7.834095006e-05f,
+-7.943367380e-05f, -8.052619150e-05f, -8.161850127e-05f, -8.271060125e-05f, -8.380248956e-05f, -8.489416432e-05f, -8.598562367e-05f, -8.707686572e-05f, -8.816788860e-05f, -8.925869045e-05f,
+-9.034926939e-05f, -9.143962354e-05f, -9.252975105e-05f, -9.361965003e-05f, -9.470931861e-05f, -9.579875494e-05f, -9.688795713e-05f, -9.797692332e-05f, -9.906565165e-05f, -1.001541402e-04f,
+-1.012423872e-04f, -1.023303908e-04f, -1.034181489e-04f, -1.045056599e-04f, -1.055929219e-04f, -1.066799329e-04f, -1.077666911e-04f, -1.088531946e-04f, -1.099394417e-04f, -1.110254303e-04f,
+-1.121111588e-04f, -1.131966251e-04f, -1.142818274e-04f, -1.153667640e-04f, -1.164514329e-04f, -1.175358322e-04f, -1.186199601e-04f, -1.197038148e-04f, -1.207873944e-04f, -1.218706970e-04f,
+-1.229537208e-04f, -1.240364639e-04f, -1.251189245e-04f, -1.262011007e-04f, -1.272829906e-04f, -1.283645925e-04f, -1.294459045e-04f, -1.305269246e-04f, -1.316076511e-04f, -1.326880821e-04f,
+-1.337682158e-04f, -1.348480503e-04f, -1.359275837e-04f, -1.370068143e-04f, -1.380857401e-04f, -1.391643593e-04f, -1.402426702e-04f, -1.413206707e-04f, -1.423983592e-04f, -1.434757336e-04f,
+-1.445527923e-04f, -1.456295334e-04f, -1.467059549e-04f, -1.477820552e-04f, -1.488578323e-04f, -1.499332843e-04f, -1.510084095e-04f, -1.520832061e-04f, -1.531576721e-04f, -1.542318058e-04f,
+-1.553056053e-04f, -1.563790687e-04f, -1.574521943e-04f, -1.585249802e-04f, -1.595974246e-04f, -1.606695256e-04f, -1.617412814e-04f, -1.628126902e-04f, -1.638837502e-04f, -1.649544594e-04f,
+-1.660248161e-04f, -1.670948185e-04f, -1.681644648e-04f, -1.692337530e-04f, -1.703026814e-04f, -1.713712482e-04f, -1.724394515e-04f, -1.735072895e-04f, -1.745747603e-04f, -1.756418623e-04f,
+-1.767085934e-04f, -1.777749520e-04f, -1.788409362e-04f, -1.799065441e-04f, -1.809717740e-04f, -1.820366241e-04f, -1.831010925e-04f, -1.841651773e-04f, -1.852288769e-04f, -1.862921893e-04f,
+-1.873551129e-04f, -1.884176456e-04f, -1.894797858e-04f, -1.905415316e-04f, -1.916028812e-04f, -1.926638329e-04f, -1.937243847e-04f, -1.947845349e-04f, -1.958442817e-04f, -1.969036233e-04f,
+-1.979625578e-04f, -1.990210835e-04f, -2.000791985e-04f, -2.011369011e-04f, -2.021941895e-04f, -2.032510618e-04f, -2.043075162e-04f, -2.053635510e-04f, -2.064191644e-04f, -2.074743545e-04f,
+-2.085291195e-04f, -2.095834577e-04f, -2.106373673e-04f, -2.116908464e-04f, -2.127438933e-04f, -2.137965062e-04f, -2.148486832e-04f, -2.159004227e-04f, -2.169517227e-04f, -2.180025816e-04f,
+-2.190529974e-04f, -2.201029686e-04f, -2.211524931e-04f, -2.222015694e-04f, -2.232501954e-04f, -2.242983696e-04f, -2.253460901e-04f, -2.263933552e-04f, -2.274401629e-04f, -2.284865116e-04f,
+-2.295323996e-04f, -2.305778249e-04f, -2.316227858e-04f, -2.326672806e-04f, -2.337113074e-04f, -2.347548646e-04f, -2.357979502e-04f, -2.368405626e-04f, -2.378827000e-04f, -2.389243606e-04f,
+-2.399655426e-04f, -2.410062443e-04f, -2.420464639e-04f, -2.430861996e-04f, -2.441254496e-04f, -2.451642122e-04f, -2.462024857e-04f, -2.472402682e-04f, -2.482775581e-04f, -2.493143534e-04f,
+-2.503506526e-04f, -2.513864537e-04f, -2.524217551e-04f, -2.534565550e-04f, -2.544908516e-04f, -2.555246432e-04f, -2.565579281e-04f, -2.575907044e-04f, -2.586229704e-04f, -2.596547244e-04f,
+-2.606859647e-04f, -2.617166893e-04f, -2.627468967e-04f, -2.637765851e-04f, -2.648057527e-04f, -2.658343977e-04f, -2.668625185e-04f, -2.678901132e-04f, -2.689171802e-04f, -2.699437177e-04f,
+-2.709697240e-04f, -2.719951972e-04f, -2.730201358e-04f, -2.740445378e-04f, -2.750684017e-04f, -2.760917256e-04f, -2.771145079e-04f, -2.781367468e-04f, -2.791584405e-04f, -2.801795873e-04f,
+-2.812001856e-04f, -2.822202335e-04f, -2.832397293e-04f, -2.842586714e-04f, -2.852770579e-04f, -2.862948872e-04f, -2.873121576e-04f, -2.883288672e-04f, -2.893450144e-04f, -2.903605975e-04f,
+-2.913756148e-04f, -2.923900644e-04f, -2.934039448e-04f, -2.944172542e-04f, -2.954299909e-04f, -2.964421531e-04f, -2.974537391e-04f, -2.984647473e-04f, -2.994751759e-04f, -3.004850233e-04f,
+-3.014942876e-04f, -3.025029672e-04f, -3.035110604e-04f, -3.045185655e-04f, -3.055254808e-04f, -3.065318046e-04f, -3.075375351e-04f, -3.085426707e-04f, -3.095472097e-04f, -3.105511503e-04f,
+-3.115544909e-04f, -3.125572298e-04f, -3.135593652e-04f, -3.145608956e-04f, -3.155618191e-04f, -3.165621342e-04f, -3.175618390e-04f, -3.185609320e-04f, -3.195594114e-04f, -3.205572755e-04f,
+-3.215545227e-04f, -3.225511513e-04f, -3.235471595e-04f, -3.245425458e-04f, -3.255373084e-04f, -3.265314456e-04f, -3.275249558e-04f, -3.285178372e-04f, -3.295100883e-04f, -3.305017073e-04f,
+-3.314926926e-04f, -3.324830424e-04f, -3.334727552e-04f, -3.344618292e-04f, -3.354502627e-04f, -3.364380542e-04f, -3.374252019e-04f, -3.384117042e-04f, -3.393975594e-04f, -3.403827658e-04f,
+-3.413673218e-04f, -3.423512257e-04f, -3.433344758e-04f, -3.443170706e-04f, -3.452990083e-04f, -3.462802873e-04f, -3.472609059e-04f, -3.482408625e-04f, -3.492201554e-04f, -3.501987830e-04f,
+-3.511767436e-04f, -3.521540356e-04f, -3.531306573e-04f, -3.541066071e-04f, -3.550818833e-04f, -3.560564843e-04f, -3.570304085e-04f, -3.580036541e-04f, -3.589762197e-04f, -3.599481034e-04f,
+-3.609193038e-04f, -3.618898191e-04f, -3.628596477e-04f, -3.638287880e-04f, -3.647972384e-04f, -3.657649972e-04f, -3.667320627e-04f, -3.676984335e-04f, -3.686641078e-04f, -3.696290840e-04f,
+-3.705933605e-04f, -3.715569356e-04f, -3.725198078e-04f, -3.734819755e-04f, -3.744434369e-04f, -3.754041905e-04f, -3.763642347e-04f, -3.773235678e-04f, -3.782821883e-04f, -3.792400945e-04f,
+-3.801972848e-04f, -3.811537577e-04f, -3.821095114e-04f, -3.830645445e-04f, -3.840188552e-04f, -3.849724420e-04f, -3.859253033e-04f, -3.868774374e-04f, -3.878288429e-04f, -3.887795180e-04f,
+-3.897294612e-04f, -3.906786708e-04f, -3.916271454e-04f, -3.925748833e-04f, -3.935218829e-04f, -3.944681425e-04f, -3.954136608e-04f, -3.963584359e-04f, -3.973024664e-04f, -3.982457507e-04f,
+-3.991882871e-04f, -4.001300742e-04f, -4.010711102e-04f, -4.020113937e-04f, -4.029509231e-04f, -4.038896967e-04f, -4.048277131e-04f, -4.057649705e-04f, -4.067014676e-04f, -4.076372026e-04f,
+-4.085721741e-04f, -4.095063804e-04f, -4.104398200e-04f, -4.113724913e-04f, -4.123043927e-04f, -4.132355228e-04f, -4.141658799e-04f, -4.150954625e-04f, -4.160242689e-04f, -4.169522978e-04f,
+-4.178795474e-04f, -4.188060163e-04f, -4.197317028e-04f, -4.206566056e-04f, -4.215807229e-04f, -4.225040532e-04f, -4.234265951e-04f, -4.243483469e-04f, -4.252693071e-04f, -4.261894742e-04f,
+-4.271088466e-04f, -4.280274228e-04f, -4.289452012e-04f, -4.298621804e-04f, -4.307783588e-04f, -4.316937347e-04f, -4.326083068e-04f, -4.335220735e-04f, -4.344350332e-04f, -4.353471845e-04f,
+-4.362585258e-04f, -4.371690555e-04f, -4.380787722e-04f, -4.389876743e-04f, -4.398957603e-04f, -4.408030287e-04f, -4.417094780e-04f, -4.426151066e-04f, -4.435199131e-04f, -4.444238960e-04f,
+-4.453270536e-04f, -4.462293846e-04f, -4.471308873e-04f, -4.480315604e-04f, -4.489314022e-04f, -4.498304114e-04f, -4.507285863e-04f, -4.516259255e-04f, -4.525224275e-04f, -4.534180908e-04f,
+-4.543129139e-04f, -4.552068953e-04f, -4.561000335e-04f, -4.569923271e-04f, -4.578837744e-04f, -4.587743741e-04f, -4.596641247e-04f, -4.605530246e-04f, -4.614410724e-04f, -4.623282666e-04f,
+-4.632146057e-04f, -4.641000883e-04f, -4.649847129e-04f, -4.658684779e-04f, -4.667513820e-04f, -4.676334236e-04f, -4.685146013e-04f, -4.693949136e-04f, -4.702743591e-04f, -4.711529362e-04f,
+-4.720306435e-04f, -4.729074796e-04f, -4.737834430e-04f, -4.746585322e-04f, -4.755327458e-04f, -4.764060822e-04f, -4.772785402e-04f, -4.781501181e-04f, -4.790208147e-04f, -4.798906283e-04f,
+-4.807595575e-04f, -4.816276010e-04f, -4.824947573e-04f, -4.833610249e-04f, -4.842264023e-04f, -4.850908882e-04f, -4.859544811e-04f, -4.868171796e-04f, -4.876789822e-04f, -4.885398875e-04f,
+-4.893998940e-04f, -4.902590004e-04f, -4.911172052e-04f, -4.919745070e-04f, -4.928309044e-04f, -4.936863958e-04f, -4.945409800e-04f, -4.953946555e-04f, -4.962474208e-04f, -4.970992746e-04f,
+-4.979502155e-04f, -4.988002419e-04f, -4.996493526e-04f, -5.004975461e-04f, -5.013448209e-04f, -5.021911758e-04f, -5.030366092e-04f, -5.038811198e-04f, -5.047247062e-04f, -5.055673670e-04f,
+-5.064091007e-04f, -5.072499061e-04f, -5.080897816e-04f, -5.089287259e-04f, -5.097667376e-04f, -5.106038153e-04f, -5.114399576e-04f, -5.122751632e-04f, -5.131094306e-04f, -5.139427585e-04f,
+-5.147751455e-04f, -5.156065902e-04f, -5.164370912e-04f, -5.172666472e-04f, -5.180952567e-04f, -5.189229185e-04f, -5.197496310e-04f, -5.205753931e-04f, -5.214002032e-04f, -5.222240601e-04f,
+-5.230469623e-04f, -5.238689086e-04f, -5.246898974e-04f, -5.255099276e-04f, -5.263289977e-04f, -5.271471064e-04f, -5.279642522e-04f, -5.287804340e-04f, -5.295956503e-04f, -5.304098997e-04f,
+-5.312231809e-04f, -5.320354927e-04f, -5.328468335e-04f, -5.336572021e-04f, -5.344665972e-04f, -5.352750174e-04f, -5.360824614e-04f, -5.368889278e-04f, -5.376944154e-04f, -5.384989227e-04f,
+-5.393024484e-04f, -5.401049913e-04f, -5.409065500e-04f, -5.417071231e-04f, -5.425067094e-04f, -5.433053076e-04f, -5.441029162e-04f, -5.448995340e-04f, -5.456951598e-04f, -5.464897920e-04f,
+-5.472834296e-04f, -5.480760711e-04f, -5.488677152e-04f, -5.496583607e-04f, -5.504480061e-04f, -5.512366504e-04f, -5.520242920e-04f, -5.528109298e-04f, -5.535965624e-04f, -5.543811885e-04f,
+-5.551648069e-04f, -5.559474163e-04f, -5.567290153e-04f, -5.575096026e-04f, -5.582891771e-04f, -5.590677374e-04f, -5.598452822e-04f, -5.606218102e-04f, -5.613973202e-04f, -5.621718109e-04f,
+-5.629452811e-04f, -5.637177293e-04f, -5.644891544e-04f, -5.652595552e-04f, -5.660289302e-04f, -5.667972784e-04f, -5.675645983e-04f, -5.683308888e-04f, -5.690961485e-04f, -5.698603763e-04f,
+-5.706235709e-04f, -5.713857310e-04f, -5.721468553e-04f, -5.729069426e-04f, -5.736659917e-04f, -5.744240014e-04f, -5.751809703e-04f, -5.759368972e-04f, -5.766917809e-04f, -5.774456202e-04f,
+-5.781984137e-04f, -5.789501604e-04f, -5.797008589e-04f, -5.804505080e-04f, -5.811991064e-04f, -5.819466531e-04f, -5.826931466e-04f, -5.834385859e-04f, -5.841829696e-04f, -5.849262966e-04f,
+-5.856685656e-04f, -5.864097755e-04f, -5.871499250e-04f, -5.878890128e-04f, -5.886270379e-04f, -5.893639989e-04f, -5.900998947e-04f, -5.908347241e-04f, -5.915684858e-04f, -5.923011787e-04f,
+-5.930328015e-04f, -5.937633531e-04f, -5.944928323e-04f, -5.952212378e-04f, -5.959485686e-04f, -5.966748233e-04f, -5.974000008e-04f, -5.981241000e-04f, -5.988471196e-04f, -5.995690584e-04f,
+-6.002899153e-04f, -6.010096891e-04f, -6.017283786e-04f, -6.024459827e-04f, -6.031625002e-04f, -6.038779298e-04f, -6.045922705e-04f, -6.053055211e-04f, -6.060176803e-04f, -6.067287471e-04f,
+-6.074387203e-04f, -6.081475987e-04f, -6.088553812e-04f, -6.095620666e-04f, -6.102676537e-04f, -6.109721415e-04f, -6.116755287e-04f, -6.123778143e-04f, -6.130789970e-04f, -6.137790757e-04f,
+-6.144780493e-04f, -6.151759167e-04f, -6.158726766e-04f, -6.165683281e-04f, -6.172628699e-04f, -6.179563009e-04f, -6.186486199e-04f, -6.193398260e-04f, -6.200299179e-04f, -6.207188944e-04f,
+-6.214067546e-04f, -6.220934972e-04f, -6.227791212e-04f, -6.234636255e-04f, -6.241470088e-04f, -6.248292702e-04f, -6.255104085e-04f, -6.261904225e-04f, -6.268693113e-04f, -6.275470737e-04f,
+-6.282237085e-04f, -6.288992148e-04f, -6.295735913e-04f, -6.302468370e-04f, -6.309189509e-04f, -6.315899318e-04f, -6.322597785e-04f, -6.329284902e-04f, -6.335960656e-04f, -6.342625036e-04f,
+-6.349278033e-04f, -6.355919635e-04f, -6.362549831e-04f, -6.369168611e-04f, -6.375775964e-04f, -6.382371879e-04f, -6.388956345e-04f, -6.395529353e-04f, -6.402090891e-04f, -6.408640948e-04f,
+-6.415179514e-04f, -6.421706579e-04f, -6.428222132e-04f, -6.434726162e-04f, -6.441218659e-04f, -6.447699612e-04f, -6.454169012e-04f, -6.460626846e-04f, -6.467073106e-04f, -6.473507780e-04f,
+-6.479930858e-04f, -6.486342330e-04f, -6.492742186e-04f, -6.499130414e-04f, -6.505507006e-04f, -6.511871950e-04f, -6.518225236e-04f, -6.524566854e-04f, -6.530896794e-04f, -6.537215045e-04f,
+-6.543521598e-04f, -6.549816442e-04f, -6.556099567e-04f, -6.562370964e-04f, -6.568630620e-04f, -6.574878528e-04f, -6.581114676e-04f, -6.587339055e-04f, -6.593551655e-04f, -6.599752465e-04f,
+-6.605941476e-04f, -6.612118678e-04f, -6.618284060e-04f, -6.624437614e-04f, -6.630579328e-04f, -6.636709193e-04f, -6.642827200e-04f, -6.648933338e-04f, -6.655027598e-04f, -6.661109969e-04f,
+-6.667180443e-04f, -6.673239009e-04f, -6.679285657e-04f, -6.685320378e-04f, -6.691343163e-04f, -6.697354001e-04f, -6.703352883e-04f, -6.709339799e-04f, -6.715314740e-04f, -6.721277696e-04f,
+-6.727228658e-04f, -6.733167616e-04f, -6.739094560e-04f, -6.745009481e-04f, -6.750912370e-04f, -6.756803217e-04f, -6.762682013e-04f, -6.768548748e-04f, -6.774403413e-04f, -6.780245999e-04f,
+-6.786076496e-04f, -6.791894894e-04f, -6.797701185e-04f, -6.803495360e-04f, -6.809277409e-04f, -6.815047322e-04f, -6.820805092e-04f, -6.826550707e-04f, -6.832284160e-04f, -6.838005441e-04f,
+-6.843714541e-04f, -6.849411451e-04f, -6.855096162e-04f, -6.860768665e-04f, -6.866428950e-04f, -6.872077009e-04f, -6.877712833e-04f, -6.883336413e-04f, -6.888947739e-04f, -6.894546804e-04f,
+-6.900133597e-04f, -6.905708111e-04f, -6.911270335e-04f, -6.916820262e-04f, -6.922357883e-04f, -6.927883188e-04f, -6.933396170e-04f, -6.938896819e-04f, -6.944385126e-04f, -6.949861083e-04f,
+-6.955324681e-04f, -6.960775912e-04f, -6.966214766e-04f, -6.971641236e-04f, -6.977055312e-04f, -6.982456986e-04f, -6.987846250e-04f, -6.993223094e-04f, -6.998587512e-04f, -7.003939493e-04f,
+-7.009279029e-04f, -7.014606112e-04f, -7.019920734e-04f, -7.025222887e-04f, -7.030512561e-04f, -7.035789748e-04f, -7.041054441e-04f, -7.046306630e-04f, -7.051546308e-04f, -7.056773466e-04f,
+-7.061988096e-04f, -7.067190190e-04f, -7.072379740e-04f, -7.077556736e-04f, -7.082721172e-04f, -7.087873040e-04f, -7.093012330e-04f, -7.098139035e-04f, -7.103253147e-04f, -7.108354657e-04f,
+-7.113443559e-04f, -7.118519843e-04f, -7.123583502e-04f, -7.128634528e-04f, -7.133672912e-04f, -7.138698648e-04f, -7.143711726e-04f, -7.148712140e-04f, -7.153699881e-04f, -7.158674942e-04f,
+-7.163637315e-04f, -7.168586991e-04f, -7.173523964e-04f, -7.178448225e-04f, -7.183359767e-04f, -7.188258582e-04f, -7.193144662e-04f, -7.198018000e-04f, -7.202878589e-04f, -7.207726419e-04f,
+-7.212561485e-04f, -7.217383778e-04f, -7.222193291e-04f, -7.226990017e-04f, -7.231773947e-04f, -7.236545075e-04f, -7.241303393e-04f, -7.246048893e-04f, -7.250781569e-04f, -7.255501412e-04f,
+-7.260208416e-04f, -7.264902573e-04f, -7.269583875e-04f, -7.274252317e-04f, -7.278907889e-04f, -7.283550586e-04f, -7.288180399e-04f, -7.292797322e-04f, -7.297401348e-04f, -7.301992468e-04f,
+-7.306570678e-04f, -7.311135968e-04f, -7.315688332e-04f, -7.320227763e-04f, -7.324754254e-04f, -7.329267798e-04f, -7.333768388e-04f, -7.338256017e-04f, -7.342730678e-04f, -7.347192364e-04f,
+-7.351641069e-04f, -7.356076785e-04f, -7.360499505e-04f, -7.364909223e-04f, -7.369305932e-04f, -7.373689625e-04f, -7.378060295e-04f, -7.382417936e-04f, -7.386762541e-04f, -7.391094103e-04f,
+-7.395412615e-04f, -7.399718072e-04f, -7.404010466e-04f, -7.408289790e-04f, -7.412556039e-04f, -7.416809205e-04f, -7.421049282e-04f, -7.425276264e-04f, -7.429490144e-04f, -7.433690915e-04f,
+-7.437878572e-04f, -7.442053107e-04f, -7.446214515e-04f, -7.450362789e-04f, -7.454497922e-04f, -7.458619909e-04f, -7.462728743e-04f, -7.466824417e-04f, -7.470906927e-04f, -7.474976264e-04f,
+-7.479032423e-04f, -7.483075399e-04f, -7.487105184e-04f, -7.491121773e-04f, -7.495125159e-04f, -7.499115337e-04f, -7.503092300e-04f, -7.507056042e-04f, -7.511006558e-04f, -7.514943841e-04f,
+-7.518867885e-04f, -7.522778685e-04f, -7.526676234e-04f, -7.530560527e-04f, -7.534431558e-04f, -7.538289320e-04f, -7.542133808e-04f, -7.545965017e-04f, -7.549782940e-04f, -7.553587571e-04f,
+-7.557378906e-04f, -7.561156937e-04f, -7.564921660e-04f, -7.568673069e-04f, -7.572411159e-04f, -7.576135922e-04f, -7.579847355e-04f, -7.583545451e-04f, -7.587230205e-04f, -7.590901611e-04f,
+-7.594559664e-04f, -7.598204359e-04f, -7.601835689e-04f, -7.605453650e-04f, -7.609058236e-04f, -7.612649441e-04f, -7.616227261e-04f, -7.619791689e-04f, -7.623342721e-04f, -7.626880352e-04f,
+-7.630404576e-04f, -7.633915387e-04f, -7.637412781e-04f, -7.640896753e-04f, -7.644367296e-04f, -7.647824407e-04f, -7.651268080e-04f, -7.654698309e-04f, -7.658115090e-04f, -7.661518418e-04f,
+-7.664908288e-04f, -7.668284694e-04f, -7.671647632e-04f, -7.674997097e-04f, -7.678333083e-04f, -7.681655586e-04f, -7.684964602e-04f, -7.688260124e-04f, -7.691542148e-04f, -7.694810670e-04f,
+-7.698065685e-04f, -7.701307187e-04f, -7.704535173e-04f, -7.707749637e-04f, -7.710950574e-04f, -7.714137981e-04f, -7.717311852e-04f, -7.720472182e-04f, -7.723618968e-04f, -7.726752204e-04f,
+-7.729871886e-04f, -7.732978010e-04f, -7.736070570e-04f, -7.739149563e-04f, -7.742214984e-04f, -7.745266828e-04f, -7.748305091e-04f, -7.751329769e-04f, -7.754340858e-04f, -7.757338352e-04f,
+-7.760322248e-04f, -7.763292541e-04f, -7.766249228e-04f, -7.769192303e-04f, -7.772121763e-04f, -7.775037603e-04f, -7.777939819e-04f, -7.780828408e-04f, -7.783703364e-04f, -7.786564684e-04f,
+-7.789412364e-04f, -7.792246399e-04f, -7.795066787e-04f, -7.797873521e-04f, -7.800666600e-04f, -7.803446018e-04f, -7.806211772e-04f, -7.808963857e-04f, -7.811702271e-04f, -7.814427008e-04f,
+-7.817138066e-04f, -7.819835440e-04f, -7.822519126e-04f, -7.825189122e-04f, -7.827845422e-04f, -7.830488024e-04f, -7.833116923e-04f, -7.835732117e-04f, -7.838333600e-04f, -7.840921370e-04f,
+-7.843495424e-04f, -7.846055756e-04f, -7.848602365e-04f, -7.851135246e-04f, -7.853654396e-04f, -7.856159811e-04f, -7.858651488e-04f, -7.861129423e-04f, -7.863593614e-04f, -7.866044056e-04f,
+-7.868480746e-04f, -7.870903682e-04f, -7.873312859e-04f, -7.875708274e-04f, -7.878089924e-04f, -7.880457807e-04f, -7.882811917e-04f, -7.885152253e-04f, -7.887478812e-04f, -7.889791589e-04f,
+-7.892090583e-04f, -7.894375789e-04f, -7.896647205e-04f, -7.898904827e-04f, -7.901148653e-04f, -7.903378680e-04f, -7.905594905e-04f, -7.907797324e-04f, -7.909985935e-04f, -7.912160735e-04f,
+-7.914321721e-04f, -7.916468890e-04f, -7.918602239e-04f, -7.920721766e-04f, -7.922827467e-04f, -7.924919341e-04f, -7.926997383e-04f, -7.929061592e-04f, -7.931111964e-04f, -7.933148498e-04f,
+-7.935171190e-04f, -7.937180038e-04f, -7.939175039e-04f, -7.941156191e-04f, -7.943123491e-04f, -7.945076936e-04f, -7.947016525e-04f, -7.948942254e-04f, -7.950854121e-04f, -7.952752124e-04f,
+-7.954636260e-04f, -7.956506527e-04f, -7.958362923e-04f, -7.960205445e-04f, -7.962034091e-04f, -7.963848858e-04f, -7.965649745e-04f, -7.967436749e-04f, -7.969209868e-04f, -7.970969100e-04f,
+-7.972714442e-04f, -7.974445892e-04f, -7.976163449e-04f, -7.977867111e-04f, -7.979556874e-04f, -7.981232737e-04f, -7.982894699e-04f, -7.984542757e-04f, -7.986176908e-04f, -7.987797152e-04f,
+-7.989403487e-04f, -7.990995909e-04f, -7.992574418e-04f, -7.994139012e-04f, -7.995689689e-04f, -7.997226446e-04f, -7.998749283e-04f, -8.000258198e-04f, -8.001753188e-04f, -8.003234252e-04f,
+-8.004701388e-04f, -8.006154596e-04f, -8.007593872e-04f, -8.009019216e-04f, -8.010430626e-04f, -8.011828100e-04f, -8.013211637e-04f, -8.014581235e-04f, -8.015936893e-04f, -8.017278609e-04f,
+-8.018606382e-04f, -8.019920211e-04f, -8.021220094e-04f, -8.022506030e-04f, -8.023778017e-04f, -8.025036054e-04f, -8.026280140e-04f, -8.027510273e-04f, -8.028726453e-04f, -8.029928677e-04f,
+-8.031116946e-04f, -8.032291257e-04f, -8.033451610e-04f, -8.034598003e-04f, -8.035730436e-04f, -8.036848907e-04f, -8.037953415e-04f, -8.039043959e-04f, -8.040120538e-04f, -8.041183151e-04f,
+-8.042231798e-04f, -8.043266477e-04f, -8.044287188e-04f, -8.045293929e-04f, -8.046286699e-04f, -8.047265499e-04f, -8.048230326e-04f, -8.049181181e-04f, -8.050118062e-04f, -8.051040969e-04f,
+-8.051949901e-04f, -8.052844857e-04f, -8.053725837e-04f, -8.054592840e-04f, -8.055445865e-04f, -8.056284912e-04f, -8.057109981e-04f, -8.057921070e-04f, -8.058718179e-04f, -8.059501308e-04f,
+-8.060270456e-04f, -8.061025624e-04f, -8.061766809e-04f, -8.062494012e-04f, -8.063207234e-04f, -8.063906472e-04f, -8.064591727e-04f, -8.065262999e-04f, -8.065920287e-04f, -8.066563591e-04f,
+-8.067192911e-04f, -8.067808247e-04f, -8.068409599e-04f, -8.068996965e-04f, -8.069570347e-04f, -8.070129744e-04f, -8.070675156e-04f, -8.071206583e-04f, -8.071724025e-04f, -8.072227481e-04f,
+-8.072716953e-04f, -8.073192440e-04f, -8.073653941e-04f, -8.074101458e-04f, -8.074534990e-04f, -8.074954537e-04f, -8.075360100e-04f, -8.075751679e-04f, -8.076129273e-04f, -8.076492884e-04f,
+-8.076842511e-04f, -8.077178155e-04f, -8.077499815e-04f, -8.077807493e-04f, -8.078101189e-04f, -8.078380903e-04f, -8.078646635e-04f, -8.078898386e-04f, -8.079136156e-04f, -8.079359946e-04f,
+-8.079569756e-04f, -8.079765587e-04f, -8.079947440e-04f, -8.080115314e-04f, -8.080269211e-04f, -8.080409131e-04f, -8.080535075e-04f, -8.080647044e-04f, -8.080745037e-04f, -8.080829056e-04f,
+-8.080899102e-04f, -8.080955175e-04f, -8.080997277e-04f, -8.081025407e-04f, -8.081039567e-04f, -8.081039758e-04f, -8.081025980e-04f, -8.080998235e-04f, -8.080956523e-04f, -8.080900845e-04f,
+-8.080831203e-04f, -8.080747597e-04f, -8.080650028e-04f, -8.080538498e-04f, -8.080413007e-04f, -8.080273556e-04f, -8.080120148e-04f, -8.079952782e-04f, -8.079771460e-04f, -8.079576184e-04f,
+-8.079366954e-04f, -8.079143771e-04f, -8.078906637e-04f, -8.078655554e-04f, -8.078390522e-04f, -8.078111543e-04f, -8.077818619e-04f, -8.077511750e-04f, -8.077190938e-04f, -8.076856184e-04f,
+-8.076507491e-04f, -8.076144859e-04f, -8.075768290e-04f, -8.075377785e-04f, -8.074973346e-04f, -8.074554975e-04f, -8.074122673e-04f, -8.073676443e-04f, -8.073216284e-04f, -8.072742200e-04f,
+-8.072254191e-04f, -8.071752261e-04f, -8.071236409e-04f, -8.070706639e-04f, -8.070162951e-04f, -8.069605349e-04f, -8.069033833e-04f, -8.068448405e-04f, -8.067849068e-04f, -8.067235823e-04f,
+-8.066608672e-04f, -8.065967617e-04f, -8.065312661e-04f, -8.064643805e-04f, -8.063961051e-04f, -8.063264401e-04f, -8.062553857e-04f, -8.061829422e-04f, -8.061091098e-04f, -8.060338886e-04f,
+-8.059572789e-04f, -8.058792810e-04f, -8.057998949e-04f, -8.057191211e-04f, -8.056369596e-04f, -8.055534107e-04f, -8.054684747e-04f, -8.053821518e-04f, -8.052944422e-04f, -8.052053461e-04f,
+-8.051148639e-04f, -8.050229957e-04f, -8.049297418e-04f, -8.048351024e-04f, -8.047390778e-04f, -8.046416683e-04f, -8.045428741e-04f, -8.044426955e-04f, -8.043411326e-04f, -8.042381859e-04f,
+-8.041338555e-04f, -8.040281417e-04f, -8.039210448e-04f, -8.038125651e-04f, -8.037027028e-04f, -8.035914582e-04f, -8.034788317e-04f, -8.033648234e-04f, -8.032494336e-04f, -8.031326627e-04f,
+-8.030145110e-04f, -8.028949787e-04f, -8.027740661e-04f, -8.026517735e-04f, -8.025281012e-04f, -8.024030496e-04f, -8.022766189e-04f, -8.021488094e-04f, -8.020196214e-04f, -8.018890553e-04f,
+-8.017571114e-04f, -8.016237899e-04f, -8.014890912e-04f, -8.013530157e-04f, -8.012155635e-04f, -8.010767352e-04f, -8.009365309e-04f, -8.007949511e-04f, -8.006519960e-04f, -8.005076659e-04f,
+-8.003619613e-04f, -8.002148825e-04f, -8.000664297e-04f, -7.999166034e-04f, -7.997654039e-04f, -7.996128316e-04f, -7.994588867e-04f, -7.993035697e-04f, -7.991468808e-04f, -7.989888205e-04f,
+-7.988293892e-04f, -7.986685871e-04f, -7.985064146e-04f, -7.983428722e-04f, -7.981779601e-04f, -7.980116788e-04f, -7.978440286e-04f, -7.976750100e-04f, -7.975046232e-04f, -7.973328686e-04f,
+-7.971597467e-04f, -7.969852579e-04f, -7.968094024e-04f, -7.966321808e-04f, -7.964535934e-04f, -7.962736405e-04f, -7.960923227e-04f, -7.959096403e-04f, -7.957255936e-04f, -7.955401832e-04f,
+-7.953534093e-04f, -7.951652725e-04f, -7.949757732e-04f, -7.947849116e-04f, -7.945926883e-04f, -7.943991037e-04f, -7.942041582e-04f, -7.940078523e-04f, -7.938101862e-04f, -7.936111606e-04f,
+-7.934107757e-04f, -7.932090321e-04f, -7.930059302e-04f, -7.928014704e-04f, -7.925956531e-04f, -7.923884788e-04f, -7.921799480e-04f, -7.919700610e-04f, -7.917588184e-04f, -7.915462205e-04f,
+-7.913322679e-04f, -7.911169610e-04f, -7.909003002e-04f, -7.906822860e-04f, -7.904629189e-04f, -7.902421994e-04f, -7.900201278e-04f, -7.897967048e-04f, -7.895719306e-04f, -7.893458059e-04f,
+-7.891183311e-04f, -7.888895067e-04f, -7.886593331e-04f, -7.884278108e-04f, -7.881949404e-04f, -7.879607223e-04f, -7.877251570e-04f, -7.874882450e-04f, -7.872499868e-04f, -7.870103829e-04f,
+-7.867694337e-04f, -7.865271399e-04f, -7.862835018e-04f, -7.860385201e-04f, -7.857921951e-04f, -7.855445275e-04f, -7.852955177e-04f, -7.850451662e-04f, -7.847934737e-04f, -7.845404405e-04f,
+-7.842860672e-04f, -7.840303543e-04f, -7.837733024e-04f, -7.835149120e-04f, -7.832551836e-04f, -7.829941178e-04f, -7.827317150e-04f, -7.824679759e-04f, -7.822029010e-04f, -7.819364908e-04f,
+-7.816687458e-04f, -7.813996666e-04f, -7.811292538e-04f, -7.808575079e-04f, -7.805844294e-04f, -7.803100190e-04f, -7.800342771e-04f, -7.797572044e-04f, -7.794788014e-04f, -7.791990687e-04f,
+-7.789180067e-04f, -7.786356162e-04f, -7.783518977e-04f, -7.780668517e-04f, -7.777804788e-04f, -7.774927797e-04f, -7.772037548e-04f, -7.769134048e-04f, -7.766217303e-04f, -7.763287318e-04f,
+-7.760344099e-04f, -7.757387653e-04f, -7.754417985e-04f, -7.751435101e-04f, -7.748439008e-04f, -7.745429710e-04f, -7.742407215e-04f, -7.739371528e-04f, -7.736322656e-04f, -7.733260604e-04f,
+-7.730185379e-04f, -7.727096986e-04f, -7.723995433e-04f, -7.720880725e-04f, -7.717752868e-04f, -7.714611868e-04f, -7.711457733e-04f, -7.708290468e-04f, -7.705110079e-04f, -7.701916573e-04f,
+-7.698709956e-04f, -7.695490235e-04f, -7.692257415e-04f, -7.689011504e-04f, -7.685752508e-04f, -7.682480433e-04f, -7.679195286e-04f, -7.675897073e-04f, -7.672585801e-04f, -7.669261476e-04f,
+-7.665924105e-04f, -7.662573694e-04f, -7.659210251e-04f, -7.655833781e-04f, -7.652444292e-04f, -7.649041790e-04f, -7.645626282e-04f, -7.642197774e-04f, -7.638756274e-04f, -7.635301787e-04f,
+-7.631834322e-04f, -7.628353884e-04f, -7.624860480e-04f, -7.621354118e-04f, -7.617834805e-04f, -7.614302546e-04f, -7.610757350e-04f, -7.607199222e-04f, -7.603628171e-04f, -7.600044203e-04f,
+-7.596447324e-04f, -7.592837543e-04f, -7.589214866e-04f, -7.585579300e-04f, -7.581930852e-04f, -7.578269530e-04f, -7.574595340e-04f, -7.570908290e-04f, -7.567208387e-04f, -7.563495638e-04f,
+-7.559770050e-04f, -7.556031631e-04f, -7.552280388e-04f, -7.548516328e-04f, -7.544739459e-04f, -7.540949787e-04f, -7.537147321e-04f, -7.533332067e-04f, -7.529504034e-04f, -7.525663228e-04f,
+-7.521809656e-04f, -7.517943327e-04f, -7.514064248e-04f, -7.510172426e-04f, -7.506267869e-04f, -7.502350585e-04f, -7.498420581e-04f, -7.494477864e-04f, -7.490522442e-04f, -7.486554324e-04f,
+-7.482573516e-04f, -7.478580026e-04f, -7.474573862e-04f, -7.470555032e-04f, -7.466523543e-04f, -7.462479404e-04f, -7.458422621e-04f, -7.454353204e-04f, -7.450271159e-04f, -7.446176494e-04f,
+-7.442069218e-04f, -7.437949339e-04f, -7.433816863e-04f, -7.429671800e-04f, -7.425514156e-04f, -7.421343941e-04f, -7.417161162e-04f, -7.412965827e-04f, -7.408757945e-04f, -7.404537522e-04f,
+-7.400304568e-04f, -7.396059090e-04f, -7.391801097e-04f, -7.387530597e-04f, -7.383247598e-04f, -7.378952108e-04f, -7.374644135e-04f, -7.370323687e-04f, -7.365990774e-04f, -7.361645403e-04f,
+-7.357287582e-04f, -7.352917320e-04f, -7.348534625e-04f, -7.344139505e-04f, -7.339731969e-04f, -7.335312026e-04f, -7.330879683e-04f, -7.326434949e-04f, -7.321977833e-04f, -7.317508343e-04f,
+-7.313026488e-04f, -7.308532275e-04f, -7.304025715e-04f, -7.299506815e-04f, -7.294975583e-04f, -7.290432029e-04f, -7.285876161e-04f, -7.281307988e-04f, -7.276727518e-04f, -7.272134761e-04f,
+-7.267529724e-04f, -7.262912417e-04f, -7.258282848e-04f, -7.253641027e-04f, -7.248986961e-04f, -7.244320660e-04f, -7.239642133e-04f, -7.234951388e-04f, -7.230248435e-04f, -7.225533281e-04f,
+-7.220805937e-04f, -7.216066412e-04f, -7.211314713e-04f, -7.206550850e-04f, -7.201774833e-04f, -7.196986669e-04f, -7.192186369e-04f, -7.187373941e-04f, -7.182549394e-04f, -7.177712738e-04f,
+-7.172863981e-04f, -7.168003133e-04f, -7.163130203e-04f, -7.158245199e-04f, -7.153348133e-04f, -7.148439011e-04f, -7.143517845e-04f, -7.138584642e-04f, -7.133639413e-04f, -7.128682167e-04f,
+-7.123712912e-04f, -7.118731659e-04f, -7.113738416e-04f, -7.108733194e-04f, -7.103716001e-04f, -7.098686847e-04f, -7.093645742e-04f, -7.088592694e-04f, -7.083527713e-04f, -7.078450810e-04f,
+-7.073361993e-04f, -7.068261272e-04f, -7.063148656e-04f, -7.058024156e-04f, -7.052887780e-04f, -7.047739538e-04f, -7.042579441e-04f, -7.037407497e-04f, -7.032223717e-04f, -7.027028110e-04f,
+-7.021820686e-04f, -7.016601454e-04f, -7.011370425e-04f, -7.006127607e-04f, -7.000873012e-04f, -6.995606649e-04f, -6.990328527e-04f, -6.985038656e-04f, -6.979737047e-04f, -6.974423710e-04f,
+-6.969098654e-04f, -6.963761888e-04f, -6.958413424e-04f, -6.953053271e-04f, -6.947681440e-04f, -6.942297939e-04f, -6.936902780e-04f, -6.931495972e-04f, -6.926077525e-04f, -6.920647450e-04f,
+-6.915205757e-04f, -6.909752455e-04f, -6.904287555e-04f, -6.898811068e-04f, -6.893323002e-04f, -6.887823369e-04f, -6.882312179e-04f, -6.876789442e-04f, -6.871255169e-04f, -6.865709369e-04f,
+-6.860152052e-04f, -6.854583231e-04f, -6.849002913e-04f, -6.843411111e-04f, -6.837807834e-04f, -6.832193093e-04f, -6.826566899e-04f, -6.820929261e-04f, -6.815280190e-04f, -6.809619697e-04f,
+-6.803947792e-04f, -6.798264485e-04f, -6.792569788e-04f, -6.786863711e-04f, -6.781146264e-04f, -6.775417459e-04f, -6.769677304e-04f, -6.763925813e-04f, -6.758162994e-04f, -6.752388859e-04f,
+-6.746603418e-04f, -6.740806682e-04f, -6.734998662e-04f, -6.729179368e-04f, -6.723348812e-04f, -6.717507004e-04f, -6.711653955e-04f, -6.705789676e-04f, -6.699914177e-04f, -6.694027470e-04f,
+-6.688129565e-04f, -6.682220473e-04f, -6.676300206e-04f, -6.670368773e-04f, -6.664426187e-04f, -6.658472458e-04f, -6.652507597e-04f, -6.646531615e-04f, -6.640544524e-04f, -6.634546333e-04f,
+-6.628537055e-04f, -6.622516700e-04f, -6.616485280e-04f, -6.610442805e-04f, -6.604389287e-04f, -6.598324737e-04f, -6.592249166e-04f, -6.586162586e-04f, -6.580065007e-04f, -6.573956440e-04f,
+-6.567836898e-04f, -6.561706391e-04f, -6.555564931e-04f, -6.549412528e-04f, -6.543249195e-04f, -6.537074942e-04f, -6.530889782e-04f, -6.524693724e-04f, -6.518486782e-04f, -6.512268966e-04f,
+-6.506040287e-04f, -6.499800757e-04f, -6.493550388e-04f, -6.487289191e-04f, -6.481017177e-04f, -6.474734359e-04f, -6.468440747e-04f, -6.462136353e-04f, -6.455821189e-04f, -6.449495267e-04f,
+-6.443158597e-04f, -6.436811193e-04f, -6.430453064e-04f, -6.424084223e-04f, -6.417704682e-04f, -6.411314453e-04f, -6.404913546e-04f, -6.398501975e-04f, -6.392079750e-04f, -6.385646883e-04f,
+-6.379203386e-04f, -6.372749272e-04f, -6.366284551e-04f, -6.359809236e-04f, -6.353323338e-04f, -6.346826870e-04f, -6.340319843e-04f, -6.333802270e-04f, -6.327274162e-04f, -6.320735530e-04f,
+-6.314186388e-04f, -6.307626747e-04f, -6.301056619e-04f, -6.294476016e-04f, -6.287884950e-04f, -6.281283434e-04f, -6.274671479e-04f, -6.268049097e-04f, -6.261416301e-04f, -6.254773102e-04f,
+-6.248119513e-04f, -6.241455546e-04f, -6.234781214e-04f, -6.228096527e-04f, -6.221401499e-04f, -6.214696142e-04f, -6.207980468e-04f, -6.201254489e-04f, -6.194518217e-04f, -6.187771666e-04f,
+-6.181014847e-04f, -6.174247772e-04f, -6.167470454e-04f, -6.160682905e-04f, -6.153885138e-04f, -6.147077165e-04f, -6.140258998e-04f, -6.133430650e-04f, -6.126592134e-04f, -6.119743461e-04f,
+-6.112884644e-04f, -6.106015697e-04f, -6.099136630e-04f, -6.092247458e-04f, -6.085348191e-04f, -6.078438844e-04f, -6.071519428e-04f, -6.064589957e-04f, -6.057650442e-04f, -6.050700896e-04f,
+-6.043741333e-04f, -6.036771764e-04f, -6.029792202e-04f, -6.022802661e-04f, -6.015803152e-04f, -6.008793689e-04f, -6.001774285e-04f, -5.994744951e-04f, -5.987705701e-04f, -5.980656548e-04f,
+-5.973597504e-04f, -5.966528583e-04f, -5.959449796e-04f, -5.952361158e-04f, -5.945262681e-04f, -5.938154377e-04f, -5.931036260e-04f, -5.923908343e-04f, -5.916770638e-04f, -5.909623158e-04f,
+-5.902465918e-04f, -5.895298928e-04f, -5.888122203e-04f, -5.880935756e-04f, -5.873739599e-04f, -5.866533746e-04f, -5.859318210e-04f, -5.852093003e-04f, -5.844858140e-04f, -5.837613632e-04f,
+-5.830359493e-04f, -5.823095737e-04f, -5.815822376e-04f, -5.808539424e-04f, -5.801246894e-04f, -5.793944799e-04f, -5.786633152e-04f, -5.779311966e-04f, -5.771981256e-04f, -5.764641033e-04f,
+-5.757291312e-04f, -5.749932106e-04f, -5.742563428e-04f, -5.735185291e-04f, -5.727797709e-04f, -5.720400694e-04f, -5.712994262e-04f, -5.705578424e-04f, -5.698153194e-04f, -5.690718587e-04f,
+-5.683274614e-04f, -5.675821290e-04f, -5.668358628e-04f, -5.660886642e-04f, -5.653405345e-04f, -5.645914751e-04f, -5.638414873e-04f, -5.630905724e-04f, -5.623387319e-04f, -5.615859671e-04f,
+-5.608322793e-04f, -5.600776699e-04f, -5.593221404e-04f, -5.585656919e-04f, -5.578083260e-04f, -5.570500439e-04f, -5.562908471e-04f, -5.555307369e-04f, -5.547697147e-04f, -5.540077818e-04f,
+-5.532449397e-04f, -5.524811897e-04f, -5.517165331e-04f, -5.509509715e-04f, -5.501845061e-04f, -5.494171383e-04f, -5.486488695e-04f, -5.478797012e-04f, -5.471096346e-04f, -5.463386712e-04f,
+-5.455668124e-04f, -5.447940595e-04f, -5.440204140e-04f, -5.432458772e-04f, -5.424704506e-04f, -5.416941355e-04f, -5.409169334e-04f, -5.401388456e-04f, -5.393598735e-04f, -5.385800185e-04f,
+-5.377992821e-04f, -5.370176657e-04f, -5.362351706e-04f, -5.354517983e-04f, -5.346675502e-04f, -5.338824276e-04f, -5.330964321e-04f, -5.323095649e-04f, -5.315218276e-04f, -5.307332216e-04f,
+-5.299437482e-04f, -5.291534089e-04f, -5.283622051e-04f, -5.275701382e-04f, -5.267772097e-04f, -5.259834210e-04f, -5.251887734e-04f, -5.243932686e-04f, -5.235969077e-04f, -5.227996924e-04f,
+-5.220016240e-04f, -5.212027040e-04f, -5.204029338e-04f, -5.196023148e-04f, -5.188008485e-04f, -5.179985363e-04f, -5.171953796e-04f, -5.163913800e-04f, -5.155865387e-04f, -5.147808574e-04f,
+-5.139743374e-04f, -5.131669802e-04f, -5.123587872e-04f, -5.115497599e-04f, -5.107398997e-04f, -5.099292081e-04f, -5.091176865e-04f, -5.083053364e-04f, -5.074921593e-04f, -5.066781566e-04f,
+-5.058633297e-04f, -5.050476802e-04f, -5.042312095e-04f, -5.034139190e-04f, -5.025958103e-04f, -5.017768847e-04f, -5.009571438e-04f, -5.001365890e-04f, -4.993152218e-04f, -4.984930437e-04f,
+-4.976700561e-04f, -4.968462605e-04f, -4.960216584e-04f, -4.951962513e-04f, -4.943700406e-04f, -4.935430278e-04f, -4.927152145e-04f, -4.918866020e-04f, -4.910571919e-04f, -4.902269856e-04f,
+-4.893959847e-04f, -4.885641906e-04f, -4.877316048e-04f, -4.868982289e-04f, -4.860640642e-04f, -4.852291123e-04f, -4.843933747e-04f, -4.835568529e-04f, -4.827195483e-04f, -4.818814625e-04f,
+-4.810425970e-04f, -4.802029533e-04f, -4.793625328e-04f, -4.785213371e-04f, -4.776793676e-04f, -4.768366260e-04f, -4.759931136e-04f, -4.751488320e-04f, -4.743037827e-04f, -4.734579673e-04f,
+-4.726113871e-04f, -4.717640438e-04f, -4.709159388e-04f, -4.700670737e-04f, -4.692174500e-04f, -4.683670692e-04f, -4.675159328e-04f, -4.666640423e-04f, -4.658113993e-04f, -4.649580052e-04f,
+-4.641038617e-04f, -4.632489701e-04f, -4.623933321e-04f, -4.615369492e-04f, -4.606798229e-04f, -4.598219548e-04f, -4.589633462e-04f, -4.581039989e-04f, -4.572439143e-04f, -4.563830940e-04f,
+-4.555215395e-04f, -4.546592523e-04f, -4.537962340e-04f, -4.529324860e-04f, -4.520680101e-04f, -4.512028076e-04f, -4.503368801e-04f, -4.494702292e-04f, -4.486028565e-04f, -4.477347634e-04f,
+-4.468659515e-04f, -4.459964223e-04f, -4.451261775e-04f, -4.442552185e-04f, -4.433835469e-04f, -4.425111643e-04f, -4.416380722e-04f, -4.407642722e-04f, -4.398897658e-04f, -4.390145546e-04f,
+-4.381386401e-04f, -4.372620239e-04f, -4.363847076e-04f, -4.355066927e-04f, -4.346279807e-04f, -4.337485733e-04f, -4.328684720e-04f, -4.319876784e-04f, -4.311061941e-04f, -4.302240205e-04f,
+-4.293411593e-04f, -4.284576121e-04f, -4.275733804e-04f, -4.266884658e-04f, -4.258028698e-04f, -4.249165941e-04f, -4.240296402e-04f, -4.231420097e-04f, -4.222537042e-04f, -4.213647252e-04f,
+-4.204750743e-04f, -4.195847531e-04f, -4.186937633e-04f, -4.178021063e-04f, -4.169097837e-04f, -4.160167972e-04f, -4.151231484e-04f, -4.142288387e-04f, -4.133338698e-04f, -4.124382434e-04f,
+-4.115419609e-04f, -4.106450240e-04f, -4.097474343e-04f, -4.088491933e-04f, -4.079503027e-04f, -4.070507640e-04f, -4.061505788e-04f, -4.052497489e-04f, -4.043482756e-04f, -4.034461607e-04f,
+-4.025434057e-04f, -4.016400123e-04f, -4.007359820e-04f, -3.998313165e-04f, -3.989260173e-04f, -3.980200861e-04f, -3.971135244e-04f, -3.962063340e-04f, -3.952985162e-04f, -3.943900729e-04f,
+-3.934810056e-04f, -3.925713159e-04f, -3.916610054e-04f, -3.907500758e-04f, -3.898385286e-04f, -3.889263655e-04f, -3.880135880e-04f, -3.871001979e-04f, -3.861861967e-04f, -3.852715860e-04f,
+-3.843563674e-04f, -3.834405427e-04f, -3.825241133e-04f, -3.816070810e-04f, -3.806894473e-04f, -3.797712139e-04f, -3.788523824e-04f, -3.779329544e-04f, -3.770129315e-04f, -3.760923154e-04f,
+-3.751711078e-04f, -3.742493102e-04f, -3.733269242e-04f, -3.724039516e-04f, -3.714803938e-04f, -3.705562527e-04f, -3.696315298e-04f, -3.687062267e-04f, -3.677803450e-04f, -3.668538865e-04f,
+-3.659268527e-04f, -3.649992454e-04f, -3.640710660e-04f, -3.631423164e-04f, -3.622129980e-04f, -3.612831126e-04f, -3.603526618e-04f, -3.594216473e-04f, -3.584900706e-04f, -3.575579335e-04f,
+-3.566252375e-04f, -3.556919844e-04f, -3.547581758e-04f, -3.538238133e-04f, -3.528888986e-04f, -3.519534333e-04f, -3.510174191e-04f, -3.500808577e-04f, -3.491437506e-04f, -3.482060996e-04f,
+-3.472679063e-04f, -3.463291723e-04f, -3.453898994e-04f, -3.444500891e-04f, -3.435097432e-04f, -3.425688633e-04f, -3.416274510e-04f, -3.406855080e-04f, -3.397430360e-04f, -3.388000367e-04f,
+-3.378565117e-04f, -3.369124626e-04f, -3.359678912e-04f, -3.350227990e-04f, -3.340771879e-04f, -3.331310593e-04f, -3.321844151e-04f, -3.312372569e-04f, -3.302895863e-04f, -3.293414050e-04f,
+-3.283927147e-04f, -3.274435170e-04f, -3.264938137e-04f, -3.255436064e-04f, -3.245928968e-04f, -3.236416865e-04f, -3.226899773e-04f, -3.217377708e-04f, -3.207850687e-04f, -3.198318726e-04f,
+-3.188781843e-04f, -3.179240054e-04f, -3.169693376e-04f, -3.160141827e-04f, -3.150585421e-04f, -3.141024178e-04f, -3.131458113e-04f, -3.121887243e-04f, -3.112311585e-04f, -3.102731156e-04f,
+-3.093145973e-04f, -3.083556052e-04f, -3.073961411e-04f, -3.064362067e-04f, -3.054758036e-04f, -3.045149335e-04f, -3.035535981e-04f, -3.025917992e-04f, -3.016295383e-04f, -3.006668173e-04f,
+-2.997036377e-04f, -2.987400013e-04f, -2.977759098e-04f, -2.968113648e-04f, -2.958463681e-04f, -2.948809214e-04f, -2.939150264e-04f, -2.929486847e-04f, -2.919818980e-04f, -2.910146682e-04f,
+-2.900469968e-04f, -2.890788855e-04f, -2.881103361e-04f, -2.871413503e-04f, -2.861719298e-04f, -2.852020762e-04f, -2.842317913e-04f, -2.832610768e-04f, -2.822899344e-04f, -2.813183657e-04f,
+-2.803463726e-04f, -2.793739567e-04f, -2.784011197e-04f, -2.774278633e-04f, -2.764541892e-04f, -2.754800992e-04f, -2.745055950e-04f, -2.735306782e-04f, -2.725553506e-04f, -2.715796139e-04f,
+-2.706034698e-04f, -2.696269200e-04f, -2.686499662e-04f, -2.676726102e-04f, -2.666948536e-04f, -2.657166982e-04f, -2.647381458e-04f, -2.637591979e-04f, -2.627798563e-04f, -2.618001228e-04f,
+-2.608199991e-04f, -2.598394868e-04f, -2.588585878e-04f, -2.578773036e-04f, -2.568956362e-04f, -2.559135871e-04f, -2.549311580e-04f, -2.539483508e-04f, -2.529651671e-04f, -2.519816087e-04f,
+-2.509976773e-04f, -2.500133745e-04f, -2.490287023e-04f, -2.480436621e-04f, -2.470582559e-04f, -2.460724852e-04f, -2.450863519e-04f, -2.440998577e-04f, -2.431130043e-04f, -2.421257934e-04f,
+-2.411382267e-04f, -2.401503060e-04f, -2.391620331e-04f, -2.381734096e-04f, -2.371844373e-04f, -2.361951178e-04f, -2.352054531e-04f, -2.342154447e-04f, -2.332250944e-04f, -2.322344039e-04f,
+-2.312433751e-04f, -2.302520095e-04f, -2.292603090e-04f, -2.282682753e-04f, -2.272759101e-04f, -2.262832151e-04f, -2.252901922e-04f, -2.242968429e-04f, -2.233031692e-04f, -2.223091726e-04f,
+-2.213148551e-04f, -2.203202181e-04f, -2.193252637e-04f, -2.183299933e-04f, -2.173344089e-04f, -2.163385122e-04f, -2.153423048e-04f, -2.143457886e-04f, -2.133489652e-04f, -2.123518365e-04f,
+-2.113544041e-04f, -2.103566698e-04f, -2.093586354e-04f, -2.083603026e-04f, -2.073616731e-04f, -2.063627487e-04f, -2.053635311e-04f, -2.043640221e-04f, -2.033642234e-04f, -2.023641368e-04f,
+-2.013637640e-04f, -2.003631068e-04f, -1.993621669e-04f, -1.983609461e-04f, -1.973594460e-04f, -1.963576686e-04f, -1.953556154e-04f, -1.943532883e-04f, -1.933506890e-04f, -1.923478193e-04f,
+-1.913446809e-04f, -1.903412755e-04f, -1.893376049e-04f, -1.883336710e-04f, -1.873294753e-04f, -1.863250197e-04f, -1.853203060e-04f, -1.843153358e-04f, -1.833101109e-04f, -1.823046332e-04f,
+-1.812989043e-04f, -1.802929259e-04f, -1.792867000e-04f, -1.782802281e-04f, -1.772735121e-04f, -1.762665537e-04f, -1.752593547e-04f, -1.742519168e-04f, -1.732442418e-04f, -1.722363315e-04f,
+-1.712281876e-04f, -1.702198118e-04f, -1.692112059e-04f, -1.682023717e-04f, -1.671933110e-04f, -1.661840254e-04f, -1.651745168e-04f, -1.641647869e-04f, -1.631548375e-04f, -1.621446704e-04f,
+-1.611342872e-04f, -1.601236897e-04f, -1.591128798e-04f, -1.581018592e-04f, -1.570906296e-04f, -1.560791928e-04f, -1.550675506e-04f, -1.540557046e-04f, -1.530436568e-04f, -1.520314088e-04f,
+-1.510189625e-04f, -1.500063195e-04f, -1.489934816e-04f, -1.479804507e-04f, -1.469672284e-04f, -1.459538165e-04f, -1.449402169e-04f, -1.439264311e-04f, -1.429124611e-04f, -1.418983086e-04f,
+-1.408839754e-04f, -1.398694632e-04f, -1.388547737e-04f, -1.378399088e-04f, -1.368248702e-04f, -1.358096597e-04f, -1.347942790e-04f, -1.337787300e-04f, -1.327630143e-04f, -1.317471338e-04f,
+-1.307310901e-04f, -1.297148852e-04f, -1.286985207e-04f, -1.276819984e-04f, -1.266653201e-04f, -1.256484876e-04f, -1.246315025e-04f, -1.236143668e-04f, -1.225970821e-04f, -1.215796502e-04f,
+-1.205620729e-04f, -1.195443520e-04f, -1.185264892e-04f, -1.175084863e-04f, -1.164903450e-04f, -1.154720672e-04f, -1.144536546e-04f, -1.134351089e-04f, -1.124164320e-04f, -1.113976256e-04f,
+-1.103786915e-04f, -1.093596315e-04f, -1.083404472e-04f, -1.073211406e-04f, -1.063017133e-04f, -1.052821671e-04f, -1.042625039e-04f, -1.032427253e-04f, -1.022228331e-04f, -1.012028292e-04f,
+-1.001827152e-04f, -9.916249303e-05f, -9.814216435e-05f, -9.712173096e-05f, -9.610119464e-05f, -9.508055716e-05f, -9.405982028e-05f, -9.303898578e-05f, -9.201805543e-05f, -9.099703100e-05f,
+-8.997591427e-05f, -8.895470699e-05f, -8.793341095e-05f, -8.691202792e-05f, -8.589055966e-05f, -8.486900795e-05f, -8.384737456e-05f, -8.282566127e-05f, -8.180386983e-05f, -8.078200203e-05f,
+-7.976005964e-05f, -7.873804443e-05f, -7.771595816e-05f, -7.669380262e-05f, -7.567157956e-05f, -7.464929077e-05f, -7.362693802e-05f, -7.260452308e-05f, -7.158204771e-05f, -7.055951370e-05f,
+-6.953692280e-05f, -6.851427680e-05f, -6.749157747e-05f, -6.646882657e-05f, -6.544602588e-05f, -6.442317717e-05f, -6.340028222e-05f, -6.237734278e-05f, -6.135436064e-05f, -6.033133756e-05f,
+-5.930827533e-05f, -5.828517569e-05f, -5.726204044e-05f, -5.623887134e-05f, -5.521567016e-05f, -5.419243868e-05f, -5.316917865e-05f, -5.214589186e-05f, -5.112258008e-05f, -5.009924507e-05f,
+-4.907588861e-05f, -4.805251247e-05f, -4.702911842e-05f, -4.600570822e-05f, -4.498228365e-05f, -4.395884648e-05f, -4.293539848e-05f, -4.191194143e-05f, -4.088847708e-05f, -3.986500721e-05f,
+-3.884153359e-05f, -3.781805799e-05f, -3.679458217e-05f, -3.577110792e-05f, -3.474763699e-05f, -3.372417116e-05f, -3.270071220e-05f, -3.167726187e-05f, -3.065382194e-05f, -2.963039419e-05f,
+-2.860698038e-05f, -2.758358228e-05f, -2.656020166e-05f, -2.553684028e-05f, -2.451349992e-05f, -2.349018234e-05f, -2.246688931e-05f, -2.144362260e-05f, -2.042038397e-05f, -1.939717520e-05f,
+-1.837399804e-05f, -1.735085427e-05f, -1.632774566e-05f, -1.530467396e-05f, -1.428164095e-05f, -1.325864840e-05f, -1.223569806e-05f, -1.121279171e-05f, -1.018993110e-05f, -9.167118017e-06f,
+-8.144354211e-06f, -7.121641452e-06f, -6.098981503e-06f, -5.076376130e-06f, -4.053827098e-06f, -3.031336170e-06f, -2.008905111e-06f, -9.865356841e-07f, 3.577034625e-08f, 1.058011217e-06f,
+2.080185165e-06f, 3.102290427e-06f, 4.124325240e-06f, 5.146287843e-06f, 6.168176472e-06f, 7.189989365e-06f, 8.211724762e-06f, 9.233380900e-06f, 1.025495602e-05f, 1.127644835e-05f,
+1.229785615e-05f, 1.331917764e-05f, 1.434041107e-05f, 1.536155468e-05f, 1.638260670e-05f, 1.740356539e-05f, 1.842442897e-05f, 1.944519569e-05f, 2.046586380e-05f, 2.148643152e-05f,
+2.250689712e-05f, 2.352725881e-05f, 2.454751486e-05f, 2.556766350e-05f, 2.658770298e-05f, 2.760763154e-05f, 2.862744742e-05f, 2.964714886e-05f, 3.066673412e-05f, 3.168620143e-05f,
+3.270554905e-05f, 3.372477521e-05f, 3.474387816e-05f, 3.576285615e-05f, 3.678170742e-05f, 3.780043022e-05f, 3.881902280e-05f, 3.983748341e-05f, 4.085581028e-05f, 4.187400168e-05f,
+4.289205585e-05f, 4.390997103e-05f, 4.492774548e-05f, 4.594537744e-05f, 4.696286517e-05f, 4.798020691e-05f, 4.899740092e-05f, 5.001444545e-05f, 5.103133874e-05f, 5.204807905e-05f,
+5.306466463e-05f, 5.408109374e-05f, 5.509736462e-05f, 5.611347553e-05f, 5.712942472e-05f, 5.814521045e-05f, 5.916083097e-05f, 6.017628453e-05f, 6.119156939e-05f, 6.220668381e-05f,
+6.322162604e-05f, 6.423639434e-05f, 6.525098696e-05f, 6.626540216e-05f, 6.727963820e-05f, 6.829369334e-05f, 6.930756583e-05f, 7.032125394e-05f, 7.133475592e-05f, 7.234807003e-05f,
+7.336119453e-05f, 7.437412768e-05f, 7.538686775e-05f, 7.639941300e-05f, 7.741176168e-05f, 7.842391206e-05f, 7.943586241e-05f, 8.044761097e-05f, 8.145915603e-05f, 8.247049584e-05f,
+8.348162867e-05f, 8.449255278e-05f, 8.550326644e-05f, 8.651376791e-05f, 8.752405546e-05f, 8.853412736e-05f, 8.954398188e-05f, 9.055361727e-05f, 9.156303182e-05f, 9.257222379e-05f,
+9.358119145e-05f, 9.458993307e-05f, 9.559844692e-05f, 9.660673126e-05f, 9.761478438e-05f, 9.862260455e-05f, 9.963019003e-05f, 1.006375391e-04f, 1.016446500e-04f, 1.026515211e-04f,
+1.036581506e-04f, 1.046645367e-04f, 1.056706779e-04f, 1.066765722e-04f, 1.076822181e-04f, 1.086876138e-04f, 1.096927575e-04f, 1.106976476e-04f, 1.117022823e-04f, 1.127066600e-04f,
+1.137107788e-04f, 1.147146370e-04f, 1.157182331e-04f, 1.167215651e-04f, 1.177246315e-04f, 1.187274304e-04f, 1.197299603e-04f, 1.207322192e-04f, 1.217342057e-04f, 1.227359179e-04f,
+1.237373540e-04f, 1.247385125e-04f, 1.257393916e-04f, 1.267399896e-04f, 1.277403047e-04f, 1.287403352e-04f, 1.297400795e-04f, 1.307395359e-04f, 1.317387026e-04f, 1.327375778e-04f,
+1.337361600e-04f, 1.347344474e-04f, 1.357324383e-04f, 1.367301309e-04f, 1.377275236e-04f, 1.387246147e-04f, 1.397214025e-04f, 1.407178853e-04f, 1.417140612e-04f, 1.427099288e-04f,
+1.437054862e-04f, 1.447007318e-04f, 1.456956638e-04f, 1.466902805e-04f, 1.476845804e-04f, 1.486785615e-04f, 1.496722224e-04f, 1.506655612e-04f, 1.516585762e-04f, 1.526512658e-04f,
+1.536436283e-04f, 1.546356620e-04f, 1.556273651e-04f, 1.566187360e-04f, 1.576097731e-04f, 1.586004745e-04f, 1.595908386e-04f, 1.605808638e-04f, 1.615705483e-04f, 1.625598904e-04f,
+1.635488885e-04f, 1.645375409e-04f, 1.655258458e-04f, 1.665138016e-04f, 1.675014066e-04f, 1.684886592e-04f, 1.694755575e-04f, 1.704621001e-04f, 1.714482851e-04f, 1.724341109e-04f,
+1.734195757e-04f, 1.744046781e-04f, 1.753894161e-04f, 1.763737882e-04f, 1.773577928e-04f, 1.783414280e-04f, 1.793246922e-04f, 1.803075838e-04f, 1.812901011e-04f, 1.822722424e-04f,
+1.832540060e-04f, 1.842353903e-04f, 1.852163936e-04f, 1.861970141e-04f, 1.871772503e-04f, 1.881571005e-04f, 1.891365630e-04f, 1.901156362e-04f, 1.910943182e-04f, 1.920726076e-04f,
+1.930505027e-04f, 1.940280016e-04f, 1.950051029e-04f, 1.959818049e-04f, 1.969581058e-04f, 1.979340040e-04f, 1.989094978e-04f, 1.998845857e-04f, 2.008592659e-04f, 2.018335368e-04f,
+2.028073966e-04f, 2.037808439e-04f, 2.047538768e-04f, 2.057264937e-04f, 2.066986931e-04f, 2.076704732e-04f, 2.086418324e-04f, 2.096127690e-04f, 2.105832813e-04f, 2.115533678e-04f,
+2.125230268e-04f, 2.134922566e-04f, 2.144610556e-04f, 2.154294221e-04f, 2.163973545e-04f, 2.173648511e-04f, 2.183319103e-04f, 2.192985305e-04f, 2.202647099e-04f, 2.212304471e-04f,
+2.221957402e-04f, 2.231605878e-04f, 2.241249880e-04f, 2.250889394e-04f, 2.260524403e-04f, 2.270154889e-04f, 2.279780838e-04f, 2.289402232e-04f, 2.299019056e-04f, 2.308631292e-04f,
+2.318238925e-04f, 2.327841938e-04f, 2.337440315e-04f, 2.347034039e-04f, 2.356623095e-04f, 2.366207466e-04f, 2.375787136e-04f, 2.385362088e-04f, 2.394932307e-04f, 2.404497776e-04f,
+2.414058478e-04f, 2.423614398e-04f, 2.433165519e-04f, 2.442711826e-04f, 2.452253301e-04f, 2.461789929e-04f, 2.471321694e-04f, 2.480848579e-04f, 2.490370568e-04f, 2.499887646e-04f,
+2.509399795e-04f, 2.518907001e-04f, 2.528409246e-04f, 2.537906514e-04f, 2.547398790e-04f, 2.556886058e-04f, 2.566368300e-04f, 2.575845502e-04f, 2.585317647e-04f, 2.594784720e-04f,
+2.604246703e-04f, 2.613703581e-04f, 2.623155339e-04f, 2.632601959e-04f, 2.642043426e-04f, 2.651479725e-04f, 2.660910838e-04f, 2.670336751e-04f, 2.679757446e-04f, 2.689172909e-04f,
+2.698583123e-04f, 2.707988072e-04f, 2.717387740e-04f, 2.726782112e-04f, 2.736171171e-04f, 2.745554902e-04f, 2.754933289e-04f, 2.764306315e-04f, 2.773673966e-04f, 2.783036224e-04f,
+2.792393075e-04f, 2.801744502e-04f, 2.811090490e-04f, 2.820431023e-04f, 2.829766085e-04f, 2.839095660e-04f, 2.848419733e-04f, 2.857738287e-04f, 2.867051307e-04f, 2.876358777e-04f,
+2.885660682e-04f, 2.894957005e-04f, 2.904247732e-04f, 2.913532845e-04f, 2.922812331e-04f, 2.932086172e-04f, 2.941354353e-04f, 2.950616859e-04f, 2.959873674e-04f, 2.969124783e-04f,
+2.978370169e-04f, 2.987609816e-04f, 2.996843711e-04f, 3.006071836e-04f, 3.015294176e-04f, 3.024510716e-04f, 3.033721440e-04f, 3.042926333e-04f, 3.052125379e-04f, 3.061318562e-04f,
+3.070505867e-04f, 3.079687279e-04f, 3.088862781e-04f, 3.098032359e-04f, 3.107195997e-04f, 3.116353679e-04f, 3.125505391e-04f, 3.134651116e-04f, 3.143790839e-04f, 3.152924545e-04f,
+3.162052219e-04f, 3.171173844e-04f, 3.180289406e-04f, 3.189398889e-04f, 3.198502279e-04f, 3.207599558e-04f, 3.216690713e-04f, 3.225775727e-04f, 3.234854586e-04f, 3.243927275e-04f,
+3.252993777e-04f, 3.262054078e-04f, 3.271108162e-04f, 3.280156014e-04f, 3.289197619e-04f, 3.298232962e-04f, 3.307262028e-04f, 3.316284800e-04f, 3.325301264e-04f, 3.334311406e-04f,
+3.343315209e-04f, 3.352312658e-04f, 3.361303739e-04f, 3.370288436e-04f, 3.379266734e-04f, 3.388238618e-04f, 3.397204072e-04f, 3.406163083e-04f, 3.415115634e-04f, 3.424061711e-04f,
+3.433001298e-04f, 3.441934381e-04f, 3.450860945e-04f, 3.459780974e-04f, 3.468694453e-04f, 3.477601368e-04f, 3.486501703e-04f, 3.495395444e-04f, 3.504282576e-04f, 3.513163083e-04f,
+3.522036950e-04f, 3.530904164e-04f, 3.539764708e-04f, 3.548618569e-04f, 3.557465730e-04f, 3.566306178e-04f, 3.575139897e-04f, 3.583966873e-04f, 3.592787090e-04f, 3.601600534e-04f,
+3.610407191e-04f, 3.619207044e-04f, 3.628000080e-04f, 3.636786284e-04f, 3.645565641e-04f, 3.654338136e-04f, 3.663103754e-04f, 3.671862482e-04f, 3.680614303e-04f, 3.689359204e-04f,
+3.698097169e-04f, 3.706828185e-04f, 3.715552236e-04f, 3.724269308e-04f, 3.732979386e-04f, 3.741682455e-04f, 3.750378501e-04f, 3.759067510e-04f, 3.767749467e-04f, 3.776424356e-04f,
+3.785092165e-04f, 3.793752877e-04f, 3.802406479e-04f, 3.811052956e-04f, 3.819692294e-04f, 3.828324478e-04f, 3.836949494e-04f, 3.845567326e-04f, 3.854177962e-04f, 3.862781386e-04f,
+3.871377583e-04f, 3.879966541e-04f, 3.888548243e-04f, 3.897122676e-04f, 3.905689826e-04f, 3.914249678e-04f, 3.922802217e-04f, 3.931347430e-04f, 3.939885301e-04f, 3.948415818e-04f,
+3.956938965e-04f, 3.965454729e-04f, 3.973963094e-04f, 3.982464047e-04f, 3.990957574e-04f, 3.999443660e-04f, 4.007922291e-04f, 4.016393453e-04f, 4.024857132e-04f, 4.033313313e-04f,
+4.041761983e-04f, 4.050203128e-04f, 4.058636732e-04f, 4.067062783e-04f, 4.075481266e-04f, 4.083892166e-04f, 4.092295471e-04f, 4.100691165e-04f, 4.109079236e-04f, 4.117459668e-04f,
+4.125832448e-04f, 4.134197562e-04f, 4.142554996e-04f, 4.150904735e-04f, 4.159246767e-04f, 4.167581077e-04f, 4.175907651e-04f, 4.184226475e-04f, 4.192537535e-04f, 4.200840818e-04f,
+4.209136309e-04f, 4.217423995e-04f, 4.225703862e-04f, 4.233975897e-04f, 4.242240084e-04f, 4.250496411e-04f, 4.258744864e-04f, 4.266985429e-04f, 4.275218092e-04f, 4.283442839e-04f,
+4.291659657e-04f, 4.299868533e-04f, 4.308069452e-04f, 4.316262400e-04f, 4.324447365e-04f, 4.332624332e-04f, 4.340793288e-04f, 4.348954219e-04f, 4.357107112e-04f, 4.365251953e-04f,
+4.373388728e-04f, 4.381517424e-04f, 4.389638027e-04f, 4.397750525e-04f, 4.405854902e-04f, 4.413951147e-04f, 4.422039245e-04f, 4.430119183e-04f, 4.438190947e-04f, 4.446254524e-04f,
+4.454309901e-04f, 4.462357064e-04f, 4.470396000e-04f, 4.478426695e-04f, 4.486449137e-04f, 4.494463311e-04f, 4.502469204e-04f, 4.510466804e-04f, 4.518456096e-04f, 4.526437068e-04f,
+4.534409706e-04f, 4.542373997e-04f, 4.550329928e-04f, 4.558277486e-04f, 4.566216657e-04f, 4.574147427e-04f, 4.582069785e-04f, 4.589983717e-04f, 4.597889209e-04f, 4.605786249e-04f,
+4.613674823e-04f, 4.621554919e-04f, 4.629426523e-04f, 4.637289622e-04f, 4.645144203e-04f, 4.652990253e-04f, 4.660827759e-04f, 4.668656709e-04f, 4.676477088e-04f, 4.684288885e-04f,
+4.692092085e-04f, 4.699886677e-04f, 4.707672647e-04f, 4.715449983e-04f, 4.723218670e-04f, 4.730978698e-04f, 4.738730052e-04f, 4.746472720e-04f, 4.754206689e-04f, 4.761931946e-04f,
+4.769648479e-04f, 4.777356274e-04f, 4.785055320e-04f, 4.792745602e-04f, 4.800427109e-04f, 4.808099827e-04f, 4.815763744e-04f, 4.823418848e-04f, 4.831065125e-04f, 4.838702563e-04f,
+4.846331150e-04f, 4.853950872e-04f, 4.861561717e-04f, 4.869163673e-04f, 4.876756726e-04f, 4.884340865e-04f, 4.891916077e-04f, 4.899482349e-04f, 4.907039669e-04f, 4.914588024e-04f,
+4.922127401e-04f, 4.929657789e-04f, 4.937179175e-04f, 4.944691547e-04f, 4.952194891e-04f, 4.959689196e-04f, 4.967174450e-04f, 4.974650639e-04f, 4.982117752e-04f, 4.989575776e-04f,
+4.997024699e-04f, 5.004464508e-04f, 5.011895192e-04f, 5.019316738e-04f, 5.026729134e-04f, 5.034132367e-04f, 5.041526426e-04f, 5.048911298e-04f, 5.056286971e-04f, 5.063653433e-04f,
+5.071010671e-04f, 5.078358674e-04f, 5.085697429e-04f, 5.093026925e-04f, 5.100347149e-04f, 5.107658089e-04f, 5.114959734e-04f, 5.122252070e-04f, 5.129535087e-04f, 5.136808771e-04f,
+5.144073112e-04f, 5.151328097e-04f, 5.158573714e-04f, 5.165809952e-04f, 5.173036798e-04f, 5.180254240e-04f, 5.187462267e-04f, 5.194660867e-04f, 5.201850027e-04f, 5.209029737e-04f,
+5.216199984e-04f, 5.223360756e-04f, 5.230512042e-04f, 5.237653830e-04f, 5.244786109e-04f, 5.251908865e-04f, 5.259022089e-04f, 5.266125767e-04f, 5.273219889e-04f, 5.280304443e-04f,
+5.287379417e-04f, 5.294444799e-04f, 5.301500578e-04f, 5.308546743e-04f, 5.315583281e-04f, 5.322610182e-04f, 5.329627433e-04f, 5.336635023e-04f, 5.343632941e-04f, 5.350621175e-04f,
+5.357599714e-04f, 5.364568546e-04f, 5.371527659e-04f, 5.378477044e-04f, 5.385416687e-04f, 5.392346578e-04f, 5.399266705e-04f, 5.406177057e-04f, 5.413077623e-04f, 5.419968391e-04f,
+5.426849350e-04f, 5.433720489e-04f, 5.440581796e-04f, 5.447433261e-04f, 5.454274871e-04f, 5.461106617e-04f, 5.467928486e-04f, 5.474740468e-04f, 5.481542551e-04f, 5.488334724e-04f,
+5.495116976e-04f, 5.501889297e-04f, 5.508651674e-04f, 5.515404098e-04f, 5.522146556e-04f, 5.528879038e-04f, 5.535601533e-04f, 5.542314029e-04f, 5.549016517e-04f, 5.555708984e-04f,
+5.562391421e-04f, 5.569063816e-04f, 5.575726157e-04f, 5.582378436e-04f, 5.589020639e-04f, 5.595652757e-04f, 5.602274780e-04f, 5.608886695e-04f, 5.615488492e-04f, 5.622080161e-04f,
+5.628661690e-04f, 5.635233069e-04f, 5.641794288e-04f, 5.648345335e-04f, 5.654886200e-04f, 5.661416873e-04f, 5.667937342e-04f, 5.674447597e-04f, 5.680947627e-04f, 5.687437422e-04f,
+5.693916971e-04f, 5.700386264e-04f, 5.706845290e-04f, 5.713294039e-04f, 5.719732499e-04f, 5.726160662e-04f, 5.732578516e-04f, 5.738986050e-04f, 5.745383255e-04f, 5.751770119e-04f,
+5.758146634e-04f, 5.764512787e-04f, 5.770868569e-04f, 5.777213970e-04f, 5.783548979e-04f, 5.789873586e-04f, 5.796187781e-04f, 5.802491553e-04f, 5.808784892e-04f, 5.815067788e-04f,
+5.821340231e-04f, 5.827602211e-04f, 5.833853717e-04f, 5.840094739e-04f, 5.846325268e-04f, 5.852545292e-04f, 5.858754803e-04f, 5.864953789e-04f, 5.871142241e-04f, 5.877320150e-04f,
+5.883487504e-04f, 5.889644294e-04f, 5.895790509e-04f, 5.901926141e-04f, 5.908051179e-04f, 5.914165613e-04f, 5.920269433e-04f, 5.926362629e-04f, 5.932445192e-04f, 5.938517111e-04f,
+5.944578378e-04f, 5.950628981e-04f, 5.956668911e-04f, 5.962698159e-04f, 5.968716715e-04f, 5.974724569e-04f, 5.980721711e-04f, 5.986708132e-04f, 5.992683821e-04f, 5.998648770e-04f,
+6.004602969e-04f, 6.010546408e-04f, 6.016479077e-04f, 6.022400967e-04f, 6.028312069e-04f, 6.034212372e-04f, 6.040101868e-04f, 6.045980547e-04f, 6.051848398e-04f, 6.057705414e-04f,
+6.063551585e-04f, 6.069386900e-04f, 6.075211351e-04f, 6.081024929e-04f, 6.086827623e-04f, 6.092619425e-04f, 6.098400325e-04f, 6.104170314e-04f, 6.109929383e-04f, 6.115677523e-04f,
+6.121414723e-04f, 6.127140976e-04f, 6.132856271e-04f, 6.138560600e-04f, 6.144253954e-04f, 6.149936322e-04f, 6.155607697e-04f, 6.161268069e-04f, 6.166917429e-04f, 6.172555768e-04f,
+6.178183077e-04f, 6.183799347e-04f, 6.189404569e-04f, 6.194998733e-04f, 6.200581831e-04f, 6.206153855e-04f, 6.211714794e-04f, 6.217264641e-04f, 6.222803385e-04f, 6.228331020e-04f,
+6.233847534e-04f, 6.239352921e-04f, 6.244847170e-04f, 6.250330274e-04f, 6.255802222e-04f, 6.261263008e-04f, 6.266712621e-04f, 6.272151054e-04f, 6.277578296e-04f, 6.282994341e-04f,
+6.288399179e-04f, 6.293792802e-04f, 6.299175200e-04f, 6.304546366e-04f, 6.309906290e-04f, 6.315254965e-04f, 6.320592381e-04f, 6.325918531e-04f, 6.331233405e-04f, 6.336536996e-04f,
+6.341829294e-04f, 6.347110292e-04f, 6.352379980e-04f, 6.357638351e-04f, 6.362885397e-04f, 6.368121108e-04f, 6.373345477e-04f, 6.378558494e-04f, 6.383760153e-04f, 6.388950445e-04f,
+6.394129361e-04f, 6.399296893e-04f, 6.404453033e-04f, 6.409597773e-04f, 6.414731104e-04f, 6.419853019e-04f, 6.424963509e-04f, 6.430062567e-04f, 6.435150183e-04f, 6.440226351e-04f,
+6.445291062e-04f, 6.450344308e-04f, 6.455386081e-04f, 6.460416373e-04f, 6.465435176e-04f, 6.470442482e-04f, 6.475438283e-04f, 6.480422572e-04f, 6.485395340e-04f, 6.490356579e-04f,
+6.495306283e-04f, 6.500244442e-04f, 6.505171049e-04f, 6.510086097e-04f, 6.514989577e-04f, 6.519881482e-04f, 6.524761805e-04f, 6.529630536e-04f, 6.534487670e-04f, 6.539333197e-04f,
+6.544167111e-04f, 6.548989404e-04f, 6.553800068e-04f, 6.558599096e-04f, 6.563386479e-04f, 6.568162212e-04f, 6.572926285e-04f, 6.577678692e-04f, 6.582419425e-04f, 6.587148477e-04f,
+6.591865840e-04f, 6.596571507e-04f, 6.601265470e-04f, 6.605947722e-04f, 6.610618256e-04f, 6.615277065e-04f, 6.619924140e-04f, 6.624559476e-04f, 6.629183064e-04f, 6.633794897e-04f,
+6.638394968e-04f, 6.642983270e-04f, 6.647559796e-04f, 6.652124538e-04f, 6.656677490e-04f, 6.661218644e-04f, 6.665747993e-04f, 6.670265530e-04f, 6.674771249e-04f, 6.679265141e-04f,
+6.683747200e-04f, 6.688217420e-04f, 6.692675792e-04f, 6.697122311e-04f, 6.701556968e-04f, 6.705979758e-04f, 6.710390674e-04f, 6.714789707e-04f, 6.719176853e-04f, 6.723552103e-04f,
+6.727915451e-04f, 6.732266891e-04f, 6.736606415e-04f, 6.740934017e-04f, 6.745249690e-04f, 6.749553427e-04f, 6.753845221e-04f, 6.758125067e-04f, 6.762392957e-04f, 6.766648885e-04f,
+6.770892844e-04f, 6.775124827e-04f, 6.779344829e-04f, 6.783552842e-04f, 6.787748860e-04f, 6.791932876e-04f, 6.796104885e-04f, 6.800264879e-04f, 6.804412852e-04f, 6.808548798e-04f,
+6.812672711e-04f, 6.816784583e-04f, 6.820884409e-04f, 6.824972183e-04f, 6.829047897e-04f, 6.833111547e-04f, 6.837163124e-04f, 6.841202624e-04f, 6.845230041e-04f, 6.849245367e-04f,
+6.853248597e-04f, 6.857239724e-04f, 6.861218743e-04f, 6.865185647e-04f, 6.869140431e-04f, 6.873083087e-04f, 6.877013611e-04f, 6.880931996e-04f, 6.884838237e-04f, 6.888732326e-04f,
+6.892614258e-04f, 6.896484028e-04f, 6.900341629e-04f, 6.904187056e-04f, 6.908020302e-04f, 6.911841362e-04f, 6.915650230e-04f, 6.919446900e-04f, 6.923231367e-04f, 6.927003624e-04f,
+6.930763666e-04f, 6.934511487e-04f, 6.938247081e-04f, 6.941970443e-04f, 6.945681568e-04f, 6.949380448e-04f, 6.953067080e-04f, 6.956741457e-04f, 6.960403573e-04f, 6.964053424e-04f,
+6.967691003e-04f, 6.971316305e-04f, 6.974929325e-04f, 6.978530058e-04f, 6.982118496e-04f, 6.985694637e-04f, 6.989258473e-04f, 6.992809999e-04f, 6.996349211e-04f, 6.999876103e-04f,
+7.003390669e-04f, 7.006892905e-04f, 7.010382804e-04f, 7.013860362e-04f, 7.017325574e-04f, 7.020778434e-04f, 7.024218937e-04f, 7.027647079e-04f, 7.031062853e-04f, 7.034466254e-04f,
+7.037857279e-04f, 7.041235921e-04f, 7.044602175e-04f, 7.047956037e-04f, 7.051297502e-04f, 7.054626564e-04f, 7.057943219e-04f, 7.061247461e-04f, 7.064539286e-04f, 7.067818688e-04f,
+7.071085664e-04f, 7.074340207e-04f, 7.077582314e-04f, 7.080811980e-04f, 7.084029198e-04f, 7.087233966e-04f, 7.090426278e-04f, 7.093606129e-04f, 7.096773515e-04f, 7.099928431e-04f,
+7.103070873e-04f, 7.106200835e-04f, 7.109318313e-04f, 7.112423303e-04f, 7.115515799e-04f, 7.118595798e-04f, 7.121663295e-04f, 7.124718286e-04f, 7.127760765e-04f, 7.130790729e-04f,
+7.133808172e-04f, 7.136813092e-04f, 7.139805482e-04f, 7.142785339e-04f, 7.145752659e-04f, 7.148707437e-04f, 7.151649669e-04f, 7.154579350e-04f, 7.157496477e-04f, 7.160401044e-04f,
+7.163293049e-04f, 7.166172486e-04f, 7.169039351e-04f, 7.171893641e-04f, 7.174735351e-04f, 7.177564477e-04f, 7.180381015e-04f, 7.183184961e-04f, 7.185976311e-04f, 7.188755061e-04f,
+7.191521207e-04f, 7.194274744e-04f, 7.197015670e-04f, 7.199743979e-04f, 7.202459668e-04f, 7.205162734e-04f, 7.207853172e-04f, 7.210530979e-04f, 7.213196150e-04f, 7.215848682e-04f,
+7.218488571e-04f, 7.221115814e-04f, 7.223730406e-04f, 7.226332344e-04f, 7.228921624e-04f, 7.231498243e-04f, 7.234062197e-04f, 7.236613481e-04f, 7.239152094e-04f, 7.241678031e-04f,
+7.244191288e-04f, 7.246691862e-04f, 7.249179750e-04f, 7.251654948e-04f, 7.254117452e-04f, 7.256567259e-04f, 7.259004367e-04f, 7.261428770e-04f, 7.263840466e-04f, 7.266239452e-04f,
+7.268625724e-04f, 7.270999279e-04f, 7.273360113e-04f, 7.275708224e-04f, 7.278043608e-04f, 7.280366261e-04f, 7.282676182e-04f, 7.284973366e-04f, 7.287257810e-04f, 7.289529511e-04f,
+7.291788467e-04f, 7.294034673e-04f, 7.296268128e-04f, 7.298488827e-04f, 7.300696768e-04f, 7.302891948e-04f, 7.305074364e-04f, 7.307244013e-04f, 7.309400892e-04f, 7.311544997e-04f,
+7.313676327e-04f, 7.315794879e-04f, 7.317900649e-04f, 7.319993634e-04f, 7.322073832e-04f, 7.324141241e-04f, 7.326195857e-04f, 7.328237677e-04f, 7.330266699e-04f, 7.332282920e-04f,
+7.334286338e-04f, 7.336276950e-04f, 7.338254753e-04f, 7.340219745e-04f, 7.342171923e-04f, 7.344111284e-04f, 7.346037826e-04f, 7.347951547e-04f, 7.349852444e-04f, 7.351740514e-04f,
+7.353615755e-04f, 7.355478165e-04f, 7.357327741e-04f, 7.359164482e-04f, 7.360988383e-04f, 7.362799444e-04f, 7.364597662e-04f, 7.366383034e-04f, 7.368155559e-04f, 7.369915234e-04f,
+7.371662056e-04f, 7.373396025e-04f, 7.375117137e-04f, 7.376825390e-04f, 7.378520782e-04f, 7.380203312e-04f, 7.381872977e-04f, 7.383529774e-04f, 7.385173703e-04f, 7.386804760e-04f,
+7.388422944e-04f, 7.390028254e-04f, 7.391620686e-04f, 7.393200239e-04f, 7.394766912e-04f, 7.396320701e-04f, 7.397861606e-04f, 7.399389625e-04f, 7.400904756e-04f, 7.402406996e-04f,
+7.403896345e-04f, 7.405372800e-04f, 7.406836359e-04f, 7.408287022e-04f, 7.409724786e-04f, 7.411149650e-04f, 7.412561612e-04f, 7.413960670e-04f, 7.415346823e-04f, 7.416720069e-04f,
+7.418080407e-04f, 7.419427835e-04f, 7.420762352e-04f, 7.422083956e-04f, 7.423392646e-04f, 7.424688420e-04f, 7.425971277e-04f, 7.427241215e-04f, 7.428498233e-04f, 7.429742331e-04f,
+7.430973505e-04f, 7.432191756e-04f, 7.433397082e-04f, 7.434589482e-04f, 7.435768953e-04f, 7.436935496e-04f, 7.438089109e-04f, 7.439229791e-04f, 7.440357540e-04f, 7.441472356e-04f,
+7.442574238e-04f, 7.443663184e-04f, 7.444739193e-04f, 7.445802264e-04f, 7.446852397e-04f, 7.447889590e-04f, 7.448913842e-04f, 7.449925153e-04f, 7.450923521e-04f, 7.451908946e-04f,
+7.452881426e-04f, 7.453840961e-04f, 7.454787551e-04f, 7.455721193e-04f, 7.456641888e-04f, 7.457549635e-04f, 7.458444432e-04f, 7.459326280e-04f, 7.460195177e-04f, 7.461051123e-04f,
+7.461894117e-04f, 7.462724159e-04f, 7.463541248e-04f, 7.464345383e-04f, 7.465136564e-04f, 7.465914790e-04f, 7.466680061e-04f, 7.467432376e-04f, 7.468171735e-04f, 7.468898137e-04f,
+7.469611583e-04f, 7.470312070e-04f, 7.470999600e-04f, 7.471674172e-04f, 7.472335785e-04f, 7.472984439e-04f, 7.473620134e-04f, 7.474242869e-04f, 7.474852645e-04f, 7.475449461e-04f,
+7.476033317e-04f, 7.476604213e-04f, 7.477162148e-04f, 7.477707122e-04f, 7.478239136e-04f, 7.478758189e-04f, 7.479264281e-04f, 7.479757412e-04f, 7.480237583e-04f, 7.480704792e-04f,
+7.481159041e-04f, 7.481600328e-04f, 7.482028655e-04f, 7.482444021e-04f, 7.482846427e-04f, 7.483235872e-04f, 7.483612357e-04f, 7.483975882e-04f, 7.484326447e-04f, 7.484664052e-04f,
+7.484988697e-04f, 7.485300384e-04f, 7.485599112e-04f, 7.485884881e-04f, 7.486157691e-04f, 7.486417544e-04f, 7.486664440e-04f, 7.486898378e-04f, 7.487119360e-04f, 7.487327385e-04f,
+7.487522455e-04f, 7.487704570e-04f, 7.487873729e-04f, 7.488029935e-04f, 7.488173187e-04f, 7.488303486e-04f, 7.488420832e-04f, 7.488525227e-04f, 7.488616670e-04f, 7.488695163e-04f,
+7.488760706e-04f, 7.488813300e-04f, 7.488852946e-04f, 7.488879644e-04f, 7.488893395e-04f, 7.488894200e-04f, 7.488882060e-04f, 7.488856976e-04f, 7.488818948e-04f, 7.488767978e-04f,
+7.488704066e-04f, 7.488627213e-04f, 7.488537421e-04f, 7.488434690e-04f, 7.488319021e-04f, 7.488190415e-04f, 7.488048874e-04f, 7.487894398e-04f, 7.487726989e-04f, 7.487546647e-04f,
+7.487353374e-04f, 7.487147171e-04f, 7.486928039e-04f, 7.486695979e-04f, 7.486450993e-04f, 7.486193082e-04f, 7.485922246e-04f, 7.485638488e-04f, 7.485341809e-04f, 7.485032210e-04f,
+7.484709692e-04f, 7.484374257e-04f, 7.484025906e-04f, 7.483664641e-04f, 7.483290463e-04f, 7.482903373e-04f, 7.482503373e-04f, 7.482090465e-04f, 7.481664650e-04f, 7.481225930e-04f,
+7.480774306e-04f, 7.480309780e-04f, 7.479832353e-04f, 7.479342027e-04f, 7.478838804e-04f, 7.478322686e-04f, 7.477793674e-04f, 7.477251770e-04f, 7.476696975e-04f, 7.476129292e-04f,
+7.475548723e-04f, 7.474955268e-04f, 7.474348931e-04f, 7.473729712e-04f, 7.473097614e-04f, 7.472452639e-04f, 7.471794789e-04f, 7.471124065e-04f, 7.470440469e-04f, 7.469744005e-04f,
+7.469034672e-04f, 7.468312475e-04f, 7.467577414e-04f, 7.466829492e-04f, 7.466068711e-04f, 7.465295073e-04f, 7.464508581e-04f, 7.463709235e-04f, 7.462897040e-04f, 7.462071996e-04f,
+7.461234106e-04f, 7.460383373e-04f, 7.459519799e-04f, 7.458643385e-04f, 7.457754135e-04f, 7.456852050e-04f, 7.455937134e-04f, 7.455009388e-04f, 7.454068815e-04f, 7.453115417e-04f,
+7.452149197e-04f, 7.451170157e-04f, 7.450178301e-04f, 7.449173629e-04f, 7.448156146e-04f, 7.447125853e-04f, 7.446082753e-04f, 7.445026849e-04f, 7.443958143e-04f, 7.442876639e-04f,
+7.441782338e-04f, 7.440675243e-04f, 7.439555358e-04f, 7.438422685e-04f, 7.437277226e-04f, 7.436118985e-04f, 7.434947964e-04f, 7.433764166e-04f, 7.432567595e-04f, 7.431358252e-04f,
+7.430136141e-04f, 7.428901265e-04f, 7.427653627e-04f, 7.426393230e-04f, 7.425120076e-04f, 7.423834169e-04f, 7.422535511e-04f, 7.421224107e-04f, 7.419899958e-04f, 7.418563068e-04f,
+7.417213441e-04f, 7.415851079e-04f, 7.414475985e-04f, 7.413088163e-04f, 7.411687616e-04f, 7.410274347e-04f, 7.408848359e-04f, 7.407409656e-04f, 7.405958241e-04f, 7.404494117e-04f,
+7.403017288e-04f, 7.401527757e-04f, 7.400025527e-04f, 7.398510602e-04f, 7.396982985e-04f, 7.395442680e-04f, 7.393889690e-04f, 7.392324019e-04f, 7.390745670e-04f, 7.389154646e-04f,
+7.387550952e-04f, 7.385934591e-04f, 7.384305566e-04f, 7.382663881e-04f, 7.381009541e-04f, 7.379342547e-04f, 7.377662905e-04f, 7.375970617e-04f, 7.374265688e-04f, 7.372548121e-04f,
+7.370817921e-04f, 7.369075090e-04f, 7.367319633e-04f, 7.365551554e-04f, 7.363770856e-04f, 7.361977543e-04f, 7.360171620e-04f, 7.358353090e-04f, 7.356521957e-04f, 7.354678225e-04f,
+7.352821898e-04f, 7.350952980e-04f, 7.349071476e-04f, 7.347177388e-04f, 7.345270722e-04f, 7.343351481e-04f, 7.341419670e-04f, 7.339475292e-04f, 7.337518353e-04f, 7.335548855e-04f,
+7.333566803e-04f, 7.331572202e-04f, 7.329565056e-04f, 7.327545369e-04f, 7.325513145e-04f, 7.323468388e-04f, 7.321411104e-04f, 7.319341295e-04f, 7.317258968e-04f, 7.315164125e-04f,
+7.313056772e-04f, 7.310936913e-04f, 7.308804553e-04f, 7.306659695e-04f, 7.304502345e-04f, 7.302332507e-04f, 7.300150185e-04f, 7.297955384e-04f, 7.295748109e-04f, 7.293528364e-04f,
+7.291296154e-04f, 7.289051484e-04f, 7.286794358e-04f, 7.284524781e-04f, 7.282242758e-04f, 7.279948293e-04f, 7.277641391e-04f, 7.275322057e-04f, 7.272990296e-04f, 7.270646113e-04f,
+7.268289512e-04f, 7.265920498e-04f, 7.263539077e-04f, 7.261145253e-04f, 7.258739031e-04f, 7.256320416e-04f, 7.253889413e-04f, 7.251446027e-04f, 7.248990263e-04f, 7.246522126e-04f,
+7.244041621e-04f, 7.241548753e-04f, 7.239043528e-04f, 7.236525950e-04f, 7.233996024e-04f, 7.231453757e-04f, 7.228899152e-04f, 7.226332216e-04f, 7.223752952e-04f, 7.221161368e-04f,
+7.218557467e-04f, 7.215941256e-04f, 7.213312739e-04f, 7.210671921e-04f, 7.208018809e-04f, 7.205353408e-04f, 7.202675723e-04f, 7.199985758e-04f, 7.197283521e-04f, 7.194569016e-04f,
+7.191842249e-04f, 7.189103225e-04f, 7.186351949e-04f, 7.183588428e-04f, 7.180812667e-04f, 7.178024672e-04f, 7.175224447e-04f, 7.172411999e-04f, 7.169587334e-04f, 7.166750456e-04f,
+7.163901372e-04f, 7.161040088e-04f, 7.158166609e-04f, 7.155280940e-04f, 7.152383088e-04f, 7.149473059e-04f, 7.146550858e-04f, 7.143616491e-04f, 7.140669964e-04f, 7.137711283e-04f,
+7.134740453e-04f, 7.131757481e-04f, 7.128762373e-04f, 7.125755134e-04f, 7.122735771e-04f, 7.119704289e-04f, 7.116660695e-04f, 7.113604994e-04f, 7.110537193e-04f, 7.107457297e-04f,
+7.104365314e-04f, 7.101261248e-04f, 7.098145106e-04f, 7.095016895e-04f, 7.091876620e-04f, 7.088724287e-04f, 7.085559904e-04f, 7.082383475e-04f, 7.079195008e-04f, 7.075994508e-04f,
+7.072781983e-04f, 7.069557437e-04f, 7.066320878e-04f, 7.063072313e-04f, 7.059811746e-04f, 7.056539185e-04f, 7.053254637e-04f, 7.049958107e-04f, 7.046649602e-04f, 7.043329129e-04f,
+7.039996694e-04f, 7.036652303e-04f, 7.033295964e-04f, 7.029927682e-04f, 7.026547465e-04f, 7.023155319e-04f, 7.019751250e-04f, 7.016335266e-04f, 7.012907372e-04f, 7.009467576e-04f,
+7.006015885e-04f, 7.002552304e-04f, 6.999076841e-04f, 6.995589503e-04f, 6.992090296e-04f, 6.988579227e-04f, 6.985056303e-04f, 6.981521531e-04f, 6.977974918e-04f, 6.974416470e-04f,
+6.970846195e-04f, 6.967264099e-04f, 6.963670190e-04f, 6.960064474e-04f, 6.956446959e-04f, 6.952817650e-04f, 6.949176557e-04f, 6.945523684e-04f, 6.941859040e-04f, 6.938182632e-04f,
+6.934494467e-04f, 6.930794551e-04f, 6.927082893e-04f, 6.923359498e-04f, 6.919624375e-04f, 6.915877531e-04f, 6.912118972e-04f, 6.908348706e-04f, 6.904566741e-04f, 6.900773083e-04f,
+6.896967741e-04f, 6.893150720e-04f, 6.889322029e-04f, 6.885481675e-04f, 6.881629666e-04f, 6.877766008e-04f, 6.873890710e-04f, 6.870003778e-04f, 6.866105220e-04f, 6.862195044e-04f,
+6.858273257e-04f, 6.854339866e-04f, 6.850394880e-04f, 6.846438306e-04f, 6.842470150e-04f, 6.838490422e-04f, 6.834499128e-04f, 6.830496277e-04f, 6.826481875e-04f, 6.822455931e-04f,
+6.818418452e-04f, 6.814369446e-04f, 6.810308921e-04f, 6.806236884e-04f, 6.802153344e-04f, 6.798058307e-04f, 6.793951783e-04f, 6.789833778e-04f, 6.785704300e-04f, 6.781563358e-04f,
+6.777410960e-04f, 6.773247112e-04f, 6.769071824e-04f, 6.764885103e-04f, 6.760686957e-04f, 6.756477394e-04f, 6.752256422e-04f, 6.748024050e-04f, 6.743780284e-04f, 6.739525134e-04f,
+6.735258607e-04f, 6.730980712e-04f, 6.726691456e-04f, 6.722390847e-04f, 6.718078895e-04f, 6.713755607e-04f, 6.709420991e-04f, 6.705075055e-04f, 6.700717808e-04f, 6.696349259e-04f,
+6.691969414e-04f, 6.687578283e-04f, 6.683175874e-04f, 6.678762195e-04f, 6.674337255e-04f, 6.669901061e-04f, 6.665453623e-04f, 6.660994949e-04f, 6.656525046e-04f, 6.652043925e-04f,
+6.647551592e-04f, 6.643048057e-04f, 6.638533329e-04f, 6.634007414e-04f, 6.629470323e-04f, 6.624922064e-04f, 6.620362645e-04f, 6.615792075e-04f, 6.611210362e-04f, 6.606617515e-04f,
+6.602013543e-04f, 6.597398455e-04f, 6.592772259e-04f, 6.588134964e-04f, 6.583486578e-04f, 6.578827111e-04f, 6.574156571e-04f, 6.569474966e-04f, 6.564782307e-04f, 6.560078601e-04f,
+6.555363857e-04f, 6.550638085e-04f, 6.545901292e-04f, 6.541153489e-04f, 6.536394684e-04f, 6.531624885e-04f, 6.526844102e-04f, 6.522052344e-04f, 6.517249620e-04f, 6.512435939e-04f,
+6.507611309e-04f, 6.502775741e-04f, 6.497929242e-04f, 6.493071822e-04f, 6.488203490e-04f, 6.483324256e-04f, 6.478434128e-04f, 6.473533115e-04f, 6.468621227e-04f, 6.463698473e-04f,
+6.458764862e-04f, 6.453820403e-04f, 6.448865106e-04f, 6.443898980e-04f, 6.438922033e-04f, 6.433934276e-04f, 6.428935718e-04f, 6.423926368e-04f, 6.418906235e-04f, 6.413875329e-04f,
+6.408833659e-04f, 6.403781235e-04f, 6.398718066e-04f, 6.393644161e-04f, 6.388559530e-04f, 6.383464182e-04f, 6.378358128e-04f, 6.373241375e-04f, 6.368113935e-04f, 6.362975816e-04f,
+6.357827028e-04f, 6.352667581e-04f, 6.347497484e-04f, 6.342316747e-04f, 6.337125379e-04f, 6.331923391e-04f, 6.326710791e-04f, 6.321487590e-04f, 6.316253797e-04f, 6.311009422e-04f,
+6.305754475e-04f, 6.300488965e-04f, 6.295212902e-04f, 6.289926297e-04f, 6.284629158e-04f, 6.279321496e-04f, 6.274003321e-04f, 6.268674642e-04f, 6.263335470e-04f, 6.257985813e-04f,
+6.252625683e-04f, 6.247255089e-04f, 6.241874041e-04f, 6.236482549e-04f, 6.231080623e-04f, 6.225668273e-04f, 6.220245509e-04f, 6.214812341e-04f, 6.209368779e-04f, 6.203914834e-04f,
+6.198450515e-04f, 6.192975832e-04f, 6.187490796e-04f, 6.181995417e-04f, 6.176489704e-04f, 6.170973669e-04f, 6.165447320e-04f, 6.159910670e-04f, 6.154363727e-04f, 6.148806502e-04f,
+6.143239005e-04f, 6.137661247e-04f, 6.132073237e-04f, 6.126474987e-04f, 6.120866506e-04f, 6.115247805e-04f, 6.109618894e-04f, 6.103979784e-04f, 6.098330485e-04f, 6.092671007e-04f,
+6.087001361e-04f, 6.081321558e-04f, 6.075631607e-04f, 6.069931520e-04f, 6.064221306e-04f, 6.058500976e-04f, 6.052770542e-04f, 6.047030013e-04f, 6.041279399e-04f, 6.035518713e-04f,
+6.029747963e-04f, 6.023967162e-04f, 6.018176319e-04f, 6.012375444e-04f, 6.006564550e-04f, 6.000743646e-04f, 5.994912744e-04f, 5.989071853e-04f, 5.983220984e-04f, 5.977360150e-04f,
+5.971489359e-04f, 5.965608623e-04f, 5.959717953e-04f, 5.953817360e-04f, 5.947906854e-04f, 5.941986446e-04f, 5.936056148e-04f, 5.930115969e-04f, 5.924165922e-04f, 5.918206016e-04f,
+5.912236263e-04f, 5.906256674e-04f, 5.900267259e-04f, 5.894268031e-04f, 5.888258999e-04f, 5.882240174e-04f, 5.876211569e-04f, 5.870173193e-04f, 5.864125058e-04f, 5.858067175e-04f,
+5.851999555e-04f, 5.845922210e-04f, 5.839835149e-04f, 5.833738385e-04f, 5.827631929e-04f, 5.821515792e-04f, 5.815389984e-04f, 5.809254518e-04f, 5.803109404e-04f, 5.796954654e-04f,
+5.790790279e-04f, 5.784616290e-04f, 5.778432699e-04f, 5.772239516e-04f, 5.766036753e-04f, 5.759824423e-04f, 5.753602534e-04f, 5.747371100e-04f, 5.741130132e-04f, 5.734879641e-04f,
+5.728619638e-04f, 5.722350135e-04f, 5.716071143e-04f, 5.709782674e-04f, 5.703484740e-04f, 5.697177351e-04f, 5.690860519e-04f, 5.684534256e-04f, 5.678198573e-04f, 5.671853483e-04f,
+5.665498995e-04f, 5.659135123e-04f, 5.652761878e-04f, 5.646379271e-04f, 5.639987313e-04f, 5.633586018e-04f, 5.627175395e-04f, 5.620755458e-04f, 5.614326217e-04f, 5.607887684e-04f,
+5.601439871e-04f, 5.594982791e-04f, 5.588516454e-04f, 5.582040872e-04f, 5.575556057e-04f, 5.569062021e-04f, 5.562558776e-04f, 5.556046334e-04f, 5.549524706e-04f, 5.542993904e-04f,
+5.536453941e-04f, 5.529904827e-04f, 5.523346576e-04f, 5.516779198e-04f, 5.510202707e-04f, 5.503617113e-04f, 5.497022429e-04f, 5.490418667e-04f, 5.483805838e-04f, 5.477183956e-04f,
+5.470553031e-04f, 5.463913076e-04f, 5.457264103e-04f, 5.450606124e-04f, 5.443939151e-04f, 5.437263196e-04f, 5.430578272e-04f, 5.423884390e-04f, 5.417181562e-04f, 5.410469802e-04f,
+5.403749120e-04f, 5.397019529e-04f, 5.390281042e-04f, 5.383533670e-04f, 5.376777427e-04f, 5.370012323e-04f, 5.363238371e-04f, 5.356455584e-04f, 5.349663974e-04f, 5.342863554e-04f,
+5.336054334e-04f, 5.329236329e-04f, 5.322409550e-04f, 5.315574009e-04f, 5.308729720e-04f, 5.301876693e-04f, 5.295014943e-04f, 5.288144480e-04f, 5.281265319e-04f, 5.274377470e-04f,
+5.267480947e-04f, 5.260575762e-04f, 5.253661928e-04f, 5.246739456e-04f, 5.239808360e-04f, 5.232868653e-04f, 5.225920345e-04f, 5.218963452e-04f, 5.211997983e-04f, 5.205023954e-04f,
+5.198041375e-04f, 5.191050260e-04f, 5.184050621e-04f, 5.177042471e-04f, 5.170025823e-04f, 5.163000689e-04f, 5.155967081e-04f, 5.148925014e-04f, 5.141874499e-04f, 5.134815549e-04f,
+5.127748176e-04f, 5.120672395e-04f, 5.113588216e-04f, 5.106495654e-04f, 5.099394721e-04f, 5.092285430e-04f, 5.085167793e-04f, 5.078041824e-04f, 5.070907535e-04f, 5.063764939e-04f,
+5.056614049e-04f, 5.049454879e-04f, 5.042287440e-04f, 5.035111745e-04f, 5.027927809e-04f, 5.020735643e-04f, 5.013535261e-04f, 5.006326676e-04f, 4.999109900e-04f, 4.991884947e-04f,
+4.984651829e-04f, 4.977410560e-04f, 4.970161153e-04f, 4.962903620e-04f, 4.955637976e-04f, 4.948364232e-04f, 4.941082402e-04f, 4.933792500e-04f, 4.926494537e-04f, 4.919188528e-04f,
+4.911874486e-04f, 4.904552423e-04f, 4.897222353e-04f, 4.889884289e-04f, 4.882538245e-04f, 4.875184233e-04f, 4.867822266e-04f, 4.860452359e-04f, 4.853074523e-04f, 4.845688773e-04f,
+4.838295122e-04f, 4.830893583e-04f, 4.823484169e-04f, 4.816066894e-04f, 4.808641771e-04f, 4.801208813e-04f, 4.793768034e-04f, 4.786319447e-04f, 4.778863065e-04f, 4.771398902e-04f,
+4.763926971e-04f, 4.756447286e-04f, 4.748959860e-04f, 4.741464707e-04f, 4.733961839e-04f, 4.726451271e-04f, 4.718933016e-04f, 4.711407087e-04f, 4.703873498e-04f, 4.696332263e-04f,
+4.688783394e-04f, 4.681226906e-04f, 4.673662812e-04f, 4.666091126e-04f, 4.658511860e-04f, 4.650925030e-04f, 4.643330648e-04f, 4.635728728e-04f, 4.628119284e-04f, 4.620502329e-04f,
+4.612877876e-04f, 4.605245941e-04f, 4.597606536e-04f, 4.589959674e-04f, 4.582305370e-04f, 4.574643638e-04f, 4.566974491e-04f, 4.559297943e-04f, 4.551614007e-04f, 4.543922697e-04f,
+4.536224028e-04f, 4.528518012e-04f, 4.520804665e-04f, 4.513083998e-04f, 4.505356027e-04f, 4.497620765e-04f, 4.489878227e-04f, 4.482128425e-04f, 4.474371373e-04f, 4.466607087e-04f,
+4.458835578e-04f, 4.451056863e-04f, 4.443270953e-04f, 4.435477864e-04f, 4.427677608e-04f, 4.419870201e-04f, 4.412055656e-04f, 4.404233987e-04f, 4.396405208e-04f, 4.388569333e-04f,
+4.380726376e-04f, 4.372876351e-04f, 4.365019272e-04f, 4.357155153e-04f, 4.349284008e-04f, 4.341405852e-04f, 4.333520698e-04f, 4.325628560e-04f, 4.317729452e-04f, 4.309823389e-04f,
+4.301910385e-04f, 4.293990453e-04f, 4.286063609e-04f, 4.278129865e-04f, 4.270189237e-04f, 4.262241738e-04f, 4.254287383e-04f, 4.246326185e-04f, 4.238358160e-04f, 4.230383320e-04f,
+4.222401681e-04f, 4.214413257e-04f, 4.206418062e-04f, 4.198416110e-04f, 4.190407415e-04f, 4.182391992e-04f, 4.174369855e-04f, 4.166341019e-04f, 4.158305497e-04f, 4.150263304e-04f,
+4.142214454e-04f, 4.134158962e-04f, 4.126096842e-04f, 4.118028108e-04f, 4.109952775e-04f, 4.101870857e-04f, 4.093782368e-04f, 4.085687324e-04f, 4.077585738e-04f, 4.069477624e-04f,
+4.061362998e-04f, 4.053241873e-04f, 4.045114265e-04f, 4.036980187e-04f, 4.028839654e-04f, 4.020692681e-04f, 4.012539282e-04f, 4.004379471e-04f, 3.996213263e-04f, 3.988040673e-04f,
+3.979861715e-04f, 3.971676404e-04f, 3.963484754e-04f, 3.955286780e-04f, 3.947082496e-04f, 3.938871918e-04f, 3.930655059e-04f, 3.922431934e-04f, 3.914202558e-04f, 3.905966945e-04f,
+3.897725110e-04f, 3.889477069e-04f, 3.881222834e-04f, 3.872962422e-04f, 3.864695846e-04f, 3.856423122e-04f, 3.848144264e-04f, 3.839859287e-04f, 3.831568206e-04f, 3.823271035e-04f,
+3.814967788e-04f, 3.806658482e-04f, 3.798343130e-04f, 3.790021748e-04f, 3.781694349e-04f, 3.773360950e-04f, 3.765021564e-04f, 3.756676206e-04f, 3.748324892e-04f, 3.739967636e-04f,
+3.731604452e-04f, 3.723235357e-04f, 3.714860364e-04f, 3.706479489e-04f, 3.698092746e-04f, 3.689700150e-04f, 3.681301716e-04f, 3.672897460e-04f, 3.664487395e-04f, 3.656071537e-04f,
+3.647649901e-04f, 3.639222501e-04f, 3.630789353e-04f, 3.622350472e-04f, 3.613905872e-04f, 3.605455569e-04f, 3.596999577e-04f, 3.588537912e-04f, 3.580070588e-04f, 3.571597621e-04f,
+3.563119025e-04f, 3.554634815e-04f, 3.546145007e-04f, 3.537649616e-04f, 3.529148656e-04f, 3.520642143e-04f, 3.512130091e-04f, 3.503612517e-04f, 3.495089434e-04f, 3.486560858e-04f,
+3.478026805e-04f, 3.469487288e-04f, 3.460942324e-04f, 3.452391927e-04f, 3.443836113e-04f, 3.435274897e-04f, 3.426708293e-04f, 3.418136317e-04f, 3.409558985e-04f, 3.400976311e-04f,
+3.392388310e-04f, 3.383794998e-04f, 3.375196390e-04f, 3.366592501e-04f, 3.357983347e-04f, 3.349368942e-04f, 3.340749301e-04f, 3.332124441e-04f, 3.323494376e-04f, 3.314859122e-04f,
+3.306218693e-04f, 3.297573106e-04f, 3.288922375e-04f, 3.280266515e-04f, 3.271605543e-04f, 3.262939472e-04f, 3.254268319e-04f, 3.245592099e-04f, 3.236910828e-04f, 3.228224519e-04f,
+3.219533190e-04f, 3.210836855e-04f, 3.202135529e-04f, 3.193429229e-04f, 3.184717969e-04f, 3.176001764e-04f, 3.167280630e-04f, 3.158554583e-04f, 3.149823638e-04f, 3.141087810e-04f,
+3.132347115e-04f, 3.123601568e-04f, 3.114851185e-04f, 3.106095980e-04f, 3.097335970e-04f, 3.088571170e-04f, 3.079801595e-04f, 3.071027262e-04f, 3.062248184e-04f, 3.053464378e-04f,
+3.044675860e-04f, 3.035882644e-04f, 3.027084747e-04f, 3.018282183e-04f, 3.009474969e-04f, 3.000663120e-04f, 2.991846651e-04f, 2.983025577e-04f, 2.974199916e-04f, 2.965369681e-04f,
+2.956534889e-04f, 2.947695556e-04f, 2.938851695e-04f, 2.930003325e-04f, 2.921150459e-04f, 2.912293113e-04f, 2.903431304e-04f, 2.894565047e-04f, 2.885694356e-04f, 2.876819249e-04f,
+2.867939740e-04f, 2.859055846e-04f, 2.850167581e-04f, 2.841274962e-04f, 2.832378004e-04f, 2.823476723e-04f, 2.814571134e-04f, 2.805661254e-04f, 2.796747097e-04f, 2.787828680e-04f,
+2.778906018e-04f, 2.769979127e-04f, 2.761048023e-04f, 2.752112721e-04f, 2.743173237e-04f, 2.734229587e-04f, 2.725281786e-04f, 2.716329851e-04f, 2.707373796e-04f, 2.698413639e-04f,
+2.689449393e-04f, 2.680481077e-04f, 2.671508704e-04f, 2.662532291e-04f, 2.653551853e-04f, 2.644567407e-04f, 2.635578968e-04f, 2.626586552e-04f, 2.617590175e-04f, 2.608589852e-04f,
+2.599585600e-04f, 2.590577434e-04f, 2.581565370e-04f, 2.572549424e-04f, 2.563529612e-04f, 2.554505949e-04f, 2.545478451e-04f, 2.536447135e-04f, 2.527412016e-04f, 2.518373110e-04f,
+2.509330432e-04f, 2.500284000e-04f, 2.491233828e-04f, 2.482179933e-04f, 2.473122330e-04f, 2.464061035e-04f, 2.454996064e-04f, 2.445927434e-04f, 2.436855159e-04f, 2.427779257e-04f,
+2.418699742e-04f, 2.409616631e-04f, 2.400529940e-04f, 2.391439685e-04f, 2.382345881e-04f, 2.373248545e-04f, 2.364147692e-04f, 2.355043339e-04f, 2.345935501e-04f, 2.336824195e-04f,
+2.327709436e-04f, 2.318591240e-04f, 2.309469624e-04f, 2.300344603e-04f, 2.291216193e-04f, 2.282084411e-04f, 2.272949272e-04f, 2.263810793e-04f, 2.254668989e-04f, 2.245523876e-04f,
+2.236375471e-04f, 2.227223789e-04f, 2.218068847e-04f, 2.208910660e-04f, 2.199749245e-04f, 2.190584618e-04f, 2.181416794e-04f, 2.172245790e-04f, 2.163071621e-04f, 2.153894305e-04f,
+2.144713856e-04f, 2.135530291e-04f, 2.126343627e-04f, 2.117153879e-04f, 2.107961062e-04f, 2.098765195e-04f, 2.089566291e-04f, 2.080364369e-04f, 2.071159442e-04f, 2.061951529e-04f,
+2.052740644e-04f, 2.043526805e-04f, 2.034310026e-04f, 2.025090325e-04f, 2.015867717e-04f, 2.006642219e-04f, 1.997413846e-04f, 1.988182615e-04f, 1.978948541e-04f, 1.969711642e-04f,
+1.960471933e-04f, 1.951229431e-04f, 1.941984151e-04f, 1.932736109e-04f, 1.923485323e-04f, 1.914231807e-04f, 1.904975579e-04f, 1.895716654e-04f, 1.886455048e-04f, 1.877190779e-04f,
+1.867923861e-04f, 1.858654311e-04f, 1.849382146e-04f, 1.840107381e-04f, 1.830830033e-04f, 1.821550118e-04f, 1.812267652e-04f, 1.802982651e-04f, 1.793695132e-04f, 1.784405111e-04f,
+1.775112603e-04f, 1.765817626e-04f, 1.756520195e-04f, 1.747220327e-04f, 1.737918038e-04f, 1.728613344e-04f, 1.719306262e-04f, 1.709996807e-04f, 1.700684996e-04f, 1.691370845e-04f,
+1.682054371e-04f, 1.672735589e-04f, 1.663414517e-04f, 1.654091169e-04f, 1.644765563e-04f, 1.635437715e-04f, 1.626107640e-04f, 1.616775356e-04f, 1.607440878e-04f, 1.598104224e-04f,
+1.588765408e-04f, 1.579424448e-04f, 1.570081359e-04f, 1.560736159e-04f, 1.551388862e-04f, 1.542039487e-04f, 1.532688048e-04f, 1.523334562e-04f, 1.513979046e-04f, 1.504621515e-04f,
+1.495261987e-04f, 1.485900477e-04f, 1.476537001e-04f, 1.467171577e-04f, 1.457804220e-04f, 1.448434947e-04f, 1.439063773e-04f, 1.429690716e-04f, 1.420315792e-04f, 1.410939017e-04f,
+1.401560406e-04f, 1.392179978e-04f, 1.382797747e-04f, 1.373413731e-04f, 1.364027945e-04f, 1.354640407e-04f, 1.345251131e-04f, 1.335860136e-04f, 1.326467436e-04f, 1.317073049e-04f,
+1.307676990e-04f, 1.298279277e-04f, 1.288879925e-04f, 1.279478950e-04f, 1.270076370e-04f, 1.260672200e-04f, 1.251266458e-04f, 1.241859158e-04f, 1.232450318e-04f, 1.223039954e-04f,
+1.213628082e-04f, 1.204214719e-04f, 1.194799881e-04f, 1.185383585e-04f, 1.175965846e-04f, 1.166546681e-04f, 1.157126107e-04f, 1.147704140e-04f, 1.138280796e-04f, 1.128856092e-04f,
+1.119430044e-04f, 1.110002669e-04f, 1.100573982e-04f, 1.091144001e-04f, 1.081712741e-04f, 1.072280219e-04f, 1.062846452e-04f, 1.053411455e-04f, 1.043975246e-04f, 1.034537840e-04f,
+1.025099254e-04f, 1.015659505e-04f, 1.006218608e-04f, 9.967765802e-05f, 9.873334382e-05f, 9.778891981e-05f, 9.684438764e-05f, 9.589974894e-05f, 9.495500536e-05f, 9.401015853e-05f,
+9.306521010e-05f, 9.212016171e-05f, 9.117501499e-05f, 9.022977159e-05f, 8.928443314e-05f, 8.833900130e-05f, 8.739347769e-05f, 8.644786396e-05f, 8.550216175e-05f, 8.455637270e-05f,
+8.361049846e-05f, 8.266454065e-05f, 8.171850093e-05f, 8.077238093e-05f, 7.982618230e-05f, 7.887990667e-05f, 7.793355569e-05f, 7.698713100e-05f, 7.604063424e-05f, 7.509406705e-05f,
+7.414743107e-05f, 7.320072794e-05f, 7.225395930e-05f, 7.130712680e-05f, 7.036023208e-05f, 6.941327677e-05f, 6.846626252e-05f, 6.751919097e-05f, 6.657206375e-05f, 6.562488253e-05f,
+6.467764892e-05f, 6.373036457e-05f, 6.278303114e-05f, 6.183565024e-05f, 6.088822354e-05f, 5.994075266e-05f, 5.899323925e-05f, 5.804568494e-05f, 5.709809139e-05f, 5.615046023e-05f,
+5.520279311e-05f, 5.425509165e-05f, 5.330735751e-05f, 5.235959232e-05f, 5.141179773e-05f, 5.046397538e-05f, 4.951612690e-05f, 4.856825393e-05f, 4.762035813e-05f, 4.667244111e-05f,
+4.572450454e-05f, 4.477655005e-05f, 4.382857927e-05f, 4.288059385e-05f, 4.193259543e-05f, 4.098458564e-05f, 4.003656614e-05f, 3.908853855e-05f, 3.814050451e-05f, 3.719246567e-05f,
+3.624442367e-05f, 3.529638014e-05f, 3.434833673e-05f, 3.340029507e-05f, 3.245225680e-05f, 3.150422357e-05f, 3.055619700e-05f, 2.960817874e-05f, 2.866017043e-05f, 2.771217370e-05f,
+2.676419020e-05f, 2.581622155e-05f, 2.486826941e-05f, 2.392033541e-05f, 2.297242118e-05f, 2.202452836e-05f, 2.107665860e-05f, 2.012881352e-05f, 1.918099477e-05f, 1.823320398e-05f,
+1.728544278e-05f, 1.633771283e-05f, 1.539001574e-05f, 1.444235317e-05f, 1.349472674e-05f, 1.254713809e-05f, 1.159958885e-05f, 1.065208067e-05f, 9.704615177e-06f, 8.757194007e-06f,
+7.809818795e-06f, 6.862491176e-06f, 5.915212786e-06f, 4.967985258e-06f, 4.020810228e-06f, 3.073689328e-06f, 2.126624195e-06f, 1.179616460e-06f, 2.326677590e-07f, -7.142202763e-07f,
+-1.661046012e-06f, -2.607807815e-06f, -3.554504053e-06f, -4.501133094e-06f, -5.447693304e-06f, -6.394183052e-06f, -7.340600706e-06f, -8.286944634e-06f, -9.233213205e-06f, -1.017940479e-05f,
+-1.112551775e-05f, -1.207155046e-05f, -1.301750130e-05f, -1.396336862e-05f, -1.490915080e-05f, -1.585484621e-05f, -1.680045323e-05f, -1.774597021e-05f, -1.869139553e-05f, -1.963672757e-05f,
+-2.058196470e-05f, -2.152710528e-05f, -2.247214769e-05f, -2.341709030e-05f, -2.436193148e-05f, -2.530666961e-05f, -2.625130307e-05f, -2.719583021e-05f, -2.814024943e-05f, -2.908455909e-05f,
+-3.002875756e-05f, -3.097284322e-05f, -3.191681445e-05f, -3.286066962e-05f, -3.380440711e-05f, -3.474802529e-05f, -3.569152254e-05f, -3.663489724e-05f, -3.757814776e-05f, -3.852127248e-05f,
+-3.946426977e-05f, -4.040713802e-05f, -4.134987561e-05f, -4.229248090e-05f, -4.323495229e-05f, -4.417728814e-05f, -4.511948685e-05f, -4.606154678e-05f, -4.700346633e-05f, -4.794524386e-05f,
+-4.888687777e-05f, -4.982836642e-05f, -5.076970821e-05f, -5.171090152e-05f, -5.265194472e-05f, -5.359283620e-05f, -5.453357435e-05f, -5.547415754e-05f, -5.641458417e-05f, -5.735485261e-05f,
+-5.829496125e-05f, -5.923490847e-05f, -6.017469266e-05f, -6.111431221e-05f, -6.205376550e-05f, -6.299305092e-05f, -6.393216685e-05f, -6.487111169e-05f, -6.580988381e-05f, -6.674848161e-05f,
+-6.768690348e-05f, -6.862514781e-05f, -6.956321297e-05f, -7.050109738e-05f, -7.143879940e-05f, -7.237631744e-05f, -7.331364989e-05f, -7.425079513e-05f, -7.518775157e-05f, -7.612451758e-05f,
+-7.706109157e-05f, -7.799747192e-05f, -7.893365704e-05f, -7.986964531e-05f, -8.080543512e-05f, -8.174102489e-05f, -8.267641299e-05f, -8.361159782e-05f, -8.454657779e-05f, -8.548135129e-05f,
+-8.641591671e-05f, -8.735027245e-05f, -8.828441691e-05f, -8.921834849e-05f, -9.015206559e-05f, -9.108556661e-05f, -9.201884995e-05f, -9.295191400e-05f, -9.388475718e-05f, -9.481737787e-05f,
+-9.574977449e-05f, -9.668194543e-05f, -9.761388910e-05f, -9.854560390e-05f, -9.947708824e-05f, -1.004083405e-04f, -1.013393591e-04f, -1.022701425e-04f, -1.032006890e-04f, -1.041309971e-04f,
+-1.050610652e-04f, -1.059908916e-04f, -1.069204748e-04f, -1.078498132e-04f, -1.087789052e-04f, -1.097077493e-04f, -1.106363437e-04f, -1.115646870e-04f, -1.124927775e-04f, -1.134206137e-04f,
+-1.143481939e-04f, -1.152755166e-04f, -1.162025803e-04f, -1.171293832e-04f, -1.180559238e-04f, -1.189822006e-04f, -1.199082120e-04f, -1.208339563e-04f, -1.217594319e-04f, -1.226846374e-04f,
+-1.236095711e-04f, -1.245342315e-04f, -1.254586169e-04f, -1.263827258e-04f, -1.273065566e-04f, -1.282301077e-04f, -1.291533775e-04f, -1.300763645e-04f, -1.309990671e-04f, -1.319214837e-04f,
+-1.328436127e-04f, -1.337654526e-04f, -1.346870017e-04f, -1.356082586e-04f, -1.365292216e-04f, -1.374498891e-04f, -1.383702597e-04f, -1.392903316e-04f, -1.402101034e-04f, -1.411295734e-04f,
+-1.420487402e-04f, -1.429676021e-04f, -1.438861575e-04f, -1.448044050e-04f, -1.457223428e-04f, -1.466399696e-04f, -1.475572836e-04f, -1.484742833e-04f, -1.493909672e-04f, -1.503073337e-04f,
+-1.512233813e-04f, -1.521391083e-04f, -1.530545132e-04f, -1.539695944e-04f, -1.548843505e-04f, -1.557987797e-04f, -1.567128807e-04f, -1.576266517e-04f, -1.585400913e-04f, -1.594531978e-04f,
+-1.603659698e-04f, -1.612784057e-04f, -1.621905039e-04f, -1.631022628e-04f, -1.640136810e-04f, -1.649247568e-04f, -1.658354887e-04f, -1.667458752e-04f, -1.676559146e-04f, -1.685656055e-04f,
+-1.694749463e-04f, -1.703839355e-04f, -1.712925714e-04f, -1.722008526e-04f, -1.731087775e-04f, -1.740163446e-04f, -1.749235522e-04f, -1.758303990e-04f, -1.767368832e-04f, -1.776430034e-04f,
+-1.785487581e-04f, -1.794541456e-04f, -1.803591645e-04f, -1.812638132e-04f, -1.821680902e-04f, -1.830719939e-04f, -1.839755228e-04f, -1.848786753e-04f, -1.857814499e-04f, -1.866838452e-04f,
+-1.875858594e-04f, -1.884874912e-04f, -1.893887390e-04f, -1.902896011e-04f, -1.911900762e-04f, -1.920901627e-04f, -1.929898590e-04f, -1.938891636e-04f, -1.947880750e-04f, -1.956865917e-04f,
+-1.965847121e-04f, -1.974824347e-04f, -1.983797579e-04f, -1.992766804e-04f, -2.001732004e-04f, -2.010693165e-04f, -2.019650272e-04f, -2.028603310e-04f, -2.037552263e-04f, -2.046497116e-04f,
+-2.055437854e-04f, -2.064374461e-04f, -2.073306923e-04f, -2.082235225e-04f, -2.091159351e-04f, -2.100079285e-04f, -2.108995014e-04f, -2.117906521e-04f, -2.126813792e-04f, -2.135716812e-04f,
+-2.144615564e-04f, -2.153510035e-04f, -2.162400209e-04f, -2.171286072e-04f, -2.180167607e-04f, -2.189044800e-04f, -2.197917635e-04f, -2.206786099e-04f, -2.215650175e-04f, -2.224509849e-04f,
+-2.233365106e-04f, -2.242215930e-04f, -2.251062307e-04f, -2.259904221e-04f, -2.268741658e-04f, -2.277574603e-04f, -2.286403040e-04f, -2.295226955e-04f, -2.304046332e-04f, -2.312861157e-04f,
+-2.321671415e-04f, -2.330477091e-04f, -2.339278170e-04f, -2.348074636e-04f, -2.356866476e-04f, -2.365653674e-04f, -2.374436215e-04f, -2.383214085e-04f, -2.391987268e-04f, -2.400755750e-04f,
+-2.409519515e-04f, -2.418278550e-04f, -2.427032838e-04f, -2.435782366e-04f, -2.444527119e-04f, -2.453267081e-04f, -2.462002238e-04f, -2.470732575e-04f, -2.479458077e-04f, -2.488178730e-04f,
+-2.496894518e-04f, -2.505605428e-04f, -2.514311443e-04f, -2.523012551e-04f, -2.531708735e-04f, -2.540399981e-04f, -2.549086274e-04f, -2.557767600e-04f, -2.566443944e-04f, -2.575115291e-04f,
+-2.583781627e-04f, -2.592442937e-04f, -2.601099206e-04f, -2.609750420e-04f, -2.618396564e-04f, -2.627037623e-04f, -2.635673584e-04f, -2.644304430e-04f, -2.652930148e-04f, -2.661550723e-04f,
+-2.670166140e-04f, -2.678776385e-04f, -2.687381444e-04f, -2.695981301e-04f, -2.704575943e-04f, -2.713165355e-04f, -2.721749521e-04f, -2.730328429e-04f, -2.738902062e-04f, -2.747470407e-04f,
+-2.756033450e-04f, -2.764591176e-04f, -2.773143569e-04f, -2.781690617e-04f, -2.790232304e-04f, -2.798768617e-04f, -2.807299539e-04f, -2.815825059e-04f, -2.824345160e-04f, -2.832859828e-04f,
+-2.841369050e-04f, -2.849872810e-04f, -2.858371095e-04f, -2.866863890e-04f, -2.875351180e-04f, -2.883832952e-04f, -2.892309192e-04f, -2.900779883e-04f, -2.909245014e-04f, -2.917704569e-04f,
+-2.926158533e-04f, -2.934606894e-04f, -2.943049635e-04f, -2.951486744e-04f, -2.959918207e-04f, -2.968344008e-04f, -2.976764133e-04f, -2.985178569e-04f, -2.993587301e-04f, -3.001990315e-04f,
+-3.010387598e-04f, -3.018779133e-04f, -3.027164909e-04f, -3.035544910e-04f, -3.043919122e-04f, -3.052287532e-04f, -3.060650125e-04f, -3.069006887e-04f, -3.077357804e-04f, -3.085702862e-04f,
+-3.094042047e-04f, -3.102375344e-04f, -3.110702741e-04f, -3.119024222e-04f, -3.127339775e-04f, -3.135649384e-04f, -3.143953036e-04f, -3.152250716e-04f, -3.160542412e-04f, -3.168828109e-04f,
+-3.177107793e-04f, -3.185381449e-04f, -3.193649065e-04f, -3.201910627e-04f, -3.210166119e-04f, -3.218415530e-04f, -3.226658844e-04f, -3.234896047e-04f, -3.243127127e-04f, -3.251352068e-04f,
+-3.259570858e-04f, -3.267783483e-04f, -3.275989928e-04f, -3.284190180e-04f, -3.292384225e-04f, -3.300572049e-04f, -3.308753639e-04f, -3.316928981e-04f, -3.325098061e-04f, -3.333260865e-04f,
+-3.341417380e-04f, -3.349567592e-04f, -3.357711487e-04f, -3.365849052e-04f, -3.373980273e-04f, -3.382105136e-04f, -3.390223628e-04f, -3.398335735e-04f, -3.406441443e-04f, -3.414540740e-04f,
+-3.422633610e-04f, -3.430720041e-04f, -3.438800019e-04f, -3.446873531e-04f, -3.454940563e-04f, -3.463001101e-04f, -3.471055132e-04f, -3.479102643e-04f, -3.487143620e-04f, -3.495178049e-04f,
+-3.503205917e-04f, -3.511227211e-04f, -3.519241917e-04f, -3.527250021e-04f, -3.535251511e-04f, -3.543246373e-04f, -3.551234593e-04f, -3.559216159e-04f, -3.567191056e-04f, -3.575159271e-04f,
+-3.583120791e-04f, -3.591075604e-04f, -3.599023694e-04f, -3.606965050e-04f, -3.614899657e-04f, -3.622827503e-04f, -3.630748574e-04f, -3.638662857e-04f, -3.646570338e-04f, -3.654471006e-04f,
+-3.662364845e-04f, -3.670251844e-04f, -3.678131988e-04f, -3.686005265e-04f, -3.693871662e-04f, -3.701731164e-04f, -3.709583761e-04f, -3.717429437e-04f, -3.725268180e-04f, -3.733099977e-04f,
+-3.740924815e-04f, -3.748742680e-04f, -3.756553560e-04f, -3.764357442e-04f, -3.772154312e-04f, -3.779944158e-04f, -3.787726966e-04f, -3.795502724e-04f, -3.803271418e-04f, -3.811033036e-04f,
+-3.818787564e-04f, -3.826534990e-04f, -3.834275300e-04f, -3.842008483e-04f, -3.849734524e-04f, -3.857453411e-04f, -3.865165131e-04f, -3.872869671e-04f, -3.880567019e-04f, -3.888257161e-04f,
+-3.895940085e-04f, -3.903615778e-04f, -3.911284226e-04f, -3.918945418e-04f, -3.926599341e-04f, -3.934245981e-04f, -3.941885326e-04f, -3.949517364e-04f, -3.957142081e-04f, -3.964759464e-04f,
+-3.972369502e-04f, -3.979972181e-04f, -3.987567489e-04f, -3.995155413e-04f, -4.002735941e-04f, -4.010309059e-04f, -4.017874756e-04f, -4.025433018e-04f, -4.032983833e-04f, -4.040527189e-04f,
+-4.048063072e-04f, -4.055591471e-04f, -4.063112373e-04f, -4.070625765e-04f, -4.078131634e-04f, -4.085629969e-04f, -4.093120757e-04f, -4.100603985e-04f, -4.108079641e-04f, -4.115547713e-04f,
+-4.123008188e-04f, -4.130461053e-04f, -4.137906296e-04f, -4.145343906e-04f, -4.152773869e-04f, -4.160196173e-04f, -4.167610805e-04f, -4.175017755e-04f, -4.182417008e-04f, -4.189808554e-04f,
+-4.197192379e-04f, -4.204568471e-04f, -4.211936818e-04f, -4.219297408e-04f, -4.226650229e-04f, -4.233995269e-04f, -4.241332514e-04f, -4.248661954e-04f, -4.255983575e-04f, -4.263297366e-04f,
+-4.270603315e-04f, -4.277901409e-04f, -4.285191636e-04f, -4.292473985e-04f, -4.299748443e-04f, -4.307014998e-04f, -4.314273638e-04f, -4.321524351e-04f, -4.328767125e-04f, -4.336001947e-04f,
+-4.343228807e-04f, -4.350447692e-04f, -4.357658590e-04f, -4.364861489e-04f, -4.372056377e-04f, -4.379243243e-04f, -4.386422073e-04f, -4.393592857e-04f, -4.400755583e-04f, -4.407910238e-04f,
+-4.415056811e-04f, -4.422195291e-04f, -4.429325664e-04f, -4.436447920e-04f, -4.443562046e-04f, -4.450668031e-04f, -4.457765863e-04f, -4.464855531e-04f, -4.471937022e-04f, -4.479010325e-04f,
+-4.486075428e-04f, -4.493132319e-04f, -4.500180988e-04f, -4.507221421e-04f, -4.514253608e-04f, -4.521277537e-04f, -4.528293196e-04f, -4.535300574e-04f, -4.542299659e-04f, -4.549290440e-04f,
+-4.556272904e-04f, -4.563247041e-04f, -4.570212839e-04f, -4.577170286e-04f, -4.584119372e-04f, -4.591060083e-04f, -4.597992410e-04f, -4.604916340e-04f, -4.611831863e-04f, -4.618738966e-04f,
+-4.625637639e-04f, -4.632527869e-04f, -4.639409646e-04f, -4.646282958e-04f, -4.653147795e-04f, -4.660004143e-04f, -4.666851993e-04f, -4.673691333e-04f, -4.680522152e-04f, -4.687344438e-04f,
+-4.694158180e-04f, -4.700963368e-04f, -4.707759989e-04f, -4.714548032e-04f, -4.721327487e-04f, -4.728098343e-04f, -4.734860587e-04f, -4.741614209e-04f, -4.748359198e-04f, -4.755095543e-04f,
+-4.761823232e-04f, -4.768542255e-04f, -4.775252601e-04f, -4.781954257e-04f, -4.788647215e-04f, -4.795331461e-04f, -4.802006986e-04f, -4.808673779e-04f, -4.815331828e-04f, -4.821981123e-04f,
+-4.828621652e-04f, -4.835253405e-04f, -4.841876370e-04f, -4.848490538e-04f, -4.855095897e-04f, -4.861692435e-04f, -4.868280144e-04f, -4.874859010e-04f, -4.881429025e-04f, -4.887990176e-04f,
+-4.894542454e-04f, -4.901085847e-04f, -4.907620345e-04f, -4.914145936e-04f, -4.920662611e-04f, -4.927170359e-04f, -4.933669168e-04f, -4.940159029e-04f, -4.946639930e-04f, -4.953111861e-04f,
+-4.959574812e-04f, -4.966028771e-04f, -4.972473729e-04f, -4.978909674e-04f, -4.985336596e-04f, -4.991754485e-04f, -4.998163330e-04f, -5.004563121e-04f, -5.010953846e-04f, -5.017335496e-04f,
+-5.023708060e-04f, -5.030071528e-04f, -5.036425890e-04f, -5.042771134e-04f, -5.049107251e-04f, -5.055434230e-04f, -5.061752061e-04f, -5.068060733e-04f, -5.074360236e-04f, -5.080650561e-04f,
+-5.086931696e-04f, -5.093203631e-04f, -5.099466357e-04f, -5.105719862e-04f, -5.111964137e-04f, -5.118199171e-04f, -5.124424955e-04f, -5.130641477e-04f, -5.136848729e-04f, -5.143046700e-04f,
+-5.149235379e-04f, -5.155414757e-04f, -5.161584823e-04f, -5.167745568e-04f, -5.173896981e-04f, -5.180039052e-04f, -5.186171772e-04f, -5.192295130e-04f, -5.198409117e-04f, -5.204513722e-04f,
+-5.210608936e-04f, -5.216694748e-04f, -5.222771148e-04f, -5.228838128e-04f, -5.234895676e-04f, -5.240943783e-04f, -5.246982439e-04f, -5.253011635e-04f, -5.259031360e-04f, -5.265041605e-04f,
+-5.271042360e-04f, -5.277033615e-04f, -5.283015360e-04f, -5.288987586e-04f, -5.294950283e-04f, -5.300903441e-04f, -5.306847051e-04f, -5.312781103e-04f, -5.318705587e-04f, -5.324620494e-04f,
+-5.330525814e-04f, -5.336421538e-04f, -5.342307655e-04f, -5.348184157e-04f, -5.354051033e-04f, -5.359908275e-04f, -5.365755873e-04f, -5.371593817e-04f, -5.377422098e-04f, -5.383240706e-04f,
+-5.389049632e-04f, -5.394848867e-04f, -5.400638401e-04f, -5.406418224e-04f, -5.412188328e-04f, -5.417948704e-04f, -5.423699340e-04f, -5.429440230e-04f, -5.435171362e-04f, -5.440892728e-04f,
+-5.446604319e-04f, -5.452306125e-04f, -5.457998137e-04f, -5.463680346e-04f, -5.469352743e-04f, -5.475015319e-04f, -5.480668063e-04f, -5.486310968e-04f, -5.491944024e-04f, -5.497567223e-04f,
+-5.503180554e-04f, -5.508784009e-04f, -5.514377579e-04f, -5.519961254e-04f, -5.525535027e-04f, -5.531098887e-04f, -5.536652826e-04f, -5.542196835e-04f, -5.547730904e-04f, -5.553255026e-04f,
+-5.558769191e-04f, -5.564273390e-04f, -5.569767614e-04f, -5.575251855e-04f, -5.580726103e-04f, -5.586190351e-04f, -5.591644588e-04f, -5.597088806e-04f, -5.602522997e-04f, -5.607947152e-04f,
+-5.613361261e-04f, -5.618765317e-04f, -5.624159311e-04f, -5.629543233e-04f, -5.634917076e-04f, -5.640280830e-04f, -5.645634487e-04f, -5.650978039e-04f, -5.656311476e-04f, -5.661634791e-04f,
+-5.666947974e-04f, -5.672251017e-04f, -5.677543913e-04f, -5.682826651e-04f, -5.688099224e-04f, -5.693361623e-04f, -5.698613840e-04f, -5.703855866e-04f, -5.709087694e-04f, -5.714309313e-04f,
+-5.719520717e-04f, -5.724721897e-04f, -5.729912845e-04f, -5.735093551e-04f, -5.740264009e-04f, -5.745424209e-04f, -5.750574144e-04f, -5.755713804e-04f, -5.760843183e-04f, -5.765962271e-04f,
+-5.771071061e-04f, -5.776169544e-04f, -5.781257713e-04f, -5.786335558e-04f, -5.791403073e-04f, -5.796460248e-04f, -5.801507076e-04f, -5.806543549e-04f, -5.811569659e-04f, -5.816585397e-04f,
+-5.821590756e-04f, -5.826585728e-04f, -5.831570305e-04f, -5.836544478e-04f, -5.841508240e-04f, -5.846461584e-04f, -5.851404500e-04f, -5.856336981e-04f, -5.861259020e-04f, -5.866170609e-04f,
+-5.871071739e-04f, -5.875962403e-04f, -5.880842593e-04f, -5.885712301e-04f, -5.890571521e-04f, -5.895420243e-04f, -5.900258460e-04f, -5.905086165e-04f, -5.909903349e-04f, -5.914710006e-04f,
+-5.919506128e-04f, -5.924291706e-04f, -5.929066734e-04f, -5.933831204e-04f, -5.938585107e-04f, -5.943328438e-04f, -5.948061188e-04f, -5.952783349e-04f, -5.957494915e-04f, -5.962195878e-04f,
+-5.966886229e-04f, -5.971565963e-04f, -5.976235071e-04f, -5.980893547e-04f, -5.985541382e-04f, -5.990178569e-04f, -5.994805102e-04f, -5.999420972e-04f, -6.004026173e-04f, -6.008620697e-04f,
+-6.013204537e-04f, -6.017777685e-04f, -6.022340136e-04f, -6.026891880e-04f, -6.031432912e-04f, -6.035963223e-04f, -6.040482808e-04f, -6.044991658e-04f, -6.049489767e-04f, -6.053977127e-04f,
+-6.058453732e-04f, -6.062919574e-04f, -6.067374646e-04f, -6.071818942e-04f, -6.076252455e-04f, -6.080675177e-04f, -6.085087101e-04f, -6.089488221e-04f, -6.093878529e-04f, -6.098258020e-04f,
+-6.102626685e-04f, -6.106984518e-04f, -6.111331513e-04f, -6.115667661e-04f, -6.119992958e-04f, -6.124307395e-04f, -6.128610967e-04f, -6.132903665e-04f, -6.137185485e-04f, -6.141456418e-04f,
+-6.145716458e-04f, -6.149965600e-04f, -6.154203835e-04f, -6.158431157e-04f, -6.162647560e-04f, -6.166853037e-04f, -6.171047582e-04f, -6.175231188e-04f, -6.179403848e-04f, -6.183565556e-04f,
+-6.187716306e-04f, -6.191856091e-04f, -6.195984904e-04f, -6.200102740e-04f, -6.204209591e-04f, -6.208305452e-04f, -6.212390315e-04f, -6.216464176e-04f, -6.220527026e-04f, -6.224578861e-04f,
+-6.228619674e-04f, -6.232649457e-04f, -6.236668206e-04f, -6.240675914e-04f, -6.244672575e-04f, -6.248658182e-04f, -6.252632730e-04f, -6.256596212e-04f, -6.260548622e-04f, -6.264489954e-04f,
+-6.268420202e-04f, -6.272339359e-04f, -6.276247420e-04f, -6.280144379e-04f, -6.284030230e-04f, -6.287904966e-04f, -6.291768583e-04f, -6.295621072e-04f, -6.299462430e-04f, -6.303292649e-04f,
+-6.307111725e-04f, -6.310919650e-04f, -6.314716420e-04f, -6.318502028e-04f, -6.322276469e-04f, -6.326039737e-04f, -6.329791825e-04f, -6.333532729e-04f, -6.337262442e-04f, -6.340980959e-04f,
+-6.344688274e-04f, -6.348384381e-04f, -6.352069275e-04f, -6.355742951e-04f, -6.359405401e-04f, -6.363056622e-04f, -6.366696606e-04f, -6.370325350e-04f, -6.373942846e-04f, -6.377549090e-04f,
+-6.381144076e-04f, -6.384727799e-04f, -6.388300253e-04f, -6.391861433e-04f, -6.395411333e-04f, -6.398949947e-04f, -6.402477272e-04f, -6.405993300e-04f, -6.409498027e-04f, -6.412991448e-04f,
+-6.416473556e-04f, -6.419944348e-04f, -6.423403817e-04f, -6.426851959e-04f, -6.430288767e-04f, -6.433714238e-04f, -6.437128365e-04f, -6.440531143e-04f, -6.443922569e-04f, -6.447302635e-04f,
+-6.450671337e-04f, -6.454028671e-04f, -6.457374631e-04f, -6.460709211e-04f, -6.464032408e-04f, -6.467344215e-04f, -6.470644628e-04f, -6.473933642e-04f, -6.477211253e-04f, -6.480477454e-04f,
+-6.483732242e-04f, -6.486975610e-04f, -6.490207556e-04f, -6.493428072e-04f, -6.496637156e-04f, -6.499834801e-04f, -6.503021004e-04f, -6.506195759e-04f, -6.509359062e-04f, -6.512510907e-04f,
+-6.515651291e-04f, -6.518780208e-04f, -6.521897654e-04f, -6.525003624e-04f, -6.528098114e-04f, -6.531181119e-04f, -6.534252634e-04f, -6.537312655e-04f, -6.540361178e-04f, -6.543398197e-04f,
+-6.546423708e-04f, -6.549437707e-04f, -6.552440189e-04f, -6.555431150e-04f, -6.558410586e-04f, -6.561378492e-04f, -6.564334863e-04f, -6.567279695e-04f, -6.570212985e-04f, -6.573134727e-04f,
+-6.576044917e-04f, -6.578943551e-04f, -6.581830625e-04f, -6.584706135e-04f, -6.587570076e-04f, -6.590422444e-04f, -6.593263235e-04f, -6.596092444e-04f, -6.598910068e-04f, -6.601716103e-04f,
+-6.604510544e-04f, -6.607293387e-04f, -6.610064629e-04f, -6.612824265e-04f, -6.615572291e-04f, -6.618308703e-04f, -6.621033497e-04f, -6.623746670e-04f, -6.626448216e-04f, -6.629138134e-04f,
+-6.631816417e-04f, -6.634483064e-04f, -6.637138069e-04f, -6.639781429e-04f, -6.642413140e-04f, -6.645033199e-04f, -6.647641601e-04f, -6.650238342e-04f, -6.652823420e-04f, -6.655396830e-04f,
+-6.657958569e-04f, -6.660508633e-04f, -6.663047018e-04f, -6.665573721e-04f, -6.668088738e-04f, -6.670592065e-04f, -6.673083699e-04f, -6.675563637e-04f, -6.678031874e-04f, -6.680488408e-04f,
+-6.682933235e-04f, -6.685366351e-04f, -6.687787753e-04f, -6.690197437e-04f, -6.692595401e-04f, -6.694981640e-04f, -6.697356151e-04f, -6.699718932e-04f, -6.702069978e-04f, -6.704409287e-04f,
+-6.706736854e-04f, -6.709052678e-04f, -6.711356754e-04f, -6.713649079e-04f, -6.715929650e-04f, -6.718198465e-04f, -6.720455519e-04f, -6.722700810e-04f, -6.724934335e-04f, -6.727156090e-04f,
+-6.729366072e-04f, -6.731564278e-04f, -6.733750706e-04f, -6.735925352e-04f, -6.738088214e-04f, -6.740239288e-04f, -6.742378571e-04f, -6.744506060e-04f, -6.746621753e-04f, -6.748725646e-04f,
+-6.750817737e-04f, -6.752898024e-04f, -6.754966502e-04f, -6.757023169e-04f, -6.759068023e-04f, -6.761101060e-04f, -6.763122278e-04f, -6.765131675e-04f, -6.767129247e-04f, -6.769114992e-04f,
+-6.771088907e-04f, -6.773050989e-04f, -6.775001236e-04f, -6.776939646e-04f, -6.778866215e-04f, -6.780780941e-04f, -6.782683822e-04f, -6.784574855e-04f, -6.786454037e-04f, -6.788321367e-04f,
+-6.790176841e-04f, -6.792020457e-04f, -6.793852213e-04f, -6.795672106e-04f, -6.797480134e-04f, -6.799276295e-04f, -6.801060586e-04f, -6.802833005e-04f, -6.804593550e-04f, -6.806342218e-04f,
+-6.808079007e-04f, -6.809803915e-04f, -6.811516940e-04f, -6.813218079e-04f, -6.814907331e-04f, -6.816584693e-04f, -6.818250162e-04f, -6.819903738e-04f, -6.821545418e-04f, -6.823175199e-04f,
+-6.824793080e-04f, -6.826399059e-04f, -6.827993134e-04f, -6.829575302e-04f, -6.831145562e-04f, -6.832703912e-04f, -6.834250350e-04f, -6.835784873e-04f, -6.837307481e-04f, -6.838818171e-04f,
+-6.840316942e-04f, -6.841803791e-04f, -6.843278717e-04f, -6.844741718e-04f, -6.846192792e-04f, -6.847631938e-04f, -6.849059153e-04f, -6.850474437e-04f, -6.851877787e-04f, -6.853269202e-04f,
+-6.854648680e-04f, -6.856016219e-04f, -6.857371819e-04f, -6.858715477e-04f, -6.860047192e-04f, -6.861366962e-04f, -6.862674786e-04f, -6.863970662e-04f, -6.865254589e-04f, -6.866526566e-04f,
+-6.867786590e-04f, -6.869034661e-04f, -6.870270777e-04f, -6.871494938e-04f, -6.872707140e-04f, -6.873907384e-04f, -6.875095668e-04f, -6.876271990e-04f, -6.877436349e-04f, -6.878588745e-04f,
+-6.879729176e-04f, -6.880857640e-04f, -6.881974137e-04f, -6.883078665e-04f, -6.884171223e-04f, -6.885251811e-04f, -6.886320426e-04f, -6.887377069e-04f, -6.888421737e-04f, -6.889454430e-04f,
+-6.890475148e-04f, -6.891483888e-04f, -6.892480649e-04f, -6.893465432e-04f, -6.894438235e-04f, -6.895399057e-04f, -6.896347898e-04f, -6.897284755e-04f, -6.898209629e-04f, -6.899122519e-04f,
+-6.900023424e-04f, -6.900912343e-04f, -6.901789276e-04f, -6.902654221e-04f, -6.903507177e-04f, -6.904348146e-04f, -6.905177124e-04f, -6.905994113e-04f, -6.906799111e-04f, -6.907592117e-04f,
+-6.908373132e-04f, -6.909142154e-04f, -6.909899183e-04f, -6.910644218e-04f, -6.911377259e-04f, -6.912098306e-04f, -6.912807358e-04f, -6.913504414e-04f, -6.914189474e-04f, -6.914862538e-04f,
+-6.915523605e-04f, -6.916172674e-04f, -6.916809747e-04f, -6.917434822e-04f, -6.918047898e-04f, -6.918648976e-04f, -6.919238056e-04f, -6.919815137e-04f, -6.920380219e-04f, -6.920933301e-04f,
+-6.921474384e-04f, -6.922003467e-04f, -6.922520551e-04f, -6.923025635e-04f, -6.923518719e-04f, -6.923999802e-04f, -6.924468886e-04f, -6.924925970e-04f, -6.925371053e-04f, -6.925804137e-04f,
+-6.926225220e-04f, -6.926634303e-04f, -6.927031386e-04f, -6.927416470e-04f, -6.927789553e-04f, -6.928150637e-04f, -6.928499722e-04f, -6.928836807e-04f, -6.929161893e-04f, -6.929474981e-04f,
+-6.929776069e-04f, -6.930065159e-04f, -6.930342252e-04f, -6.930607346e-04f, -6.930860443e-04f, -6.931101542e-04f, -6.931330645e-04f, -6.931547752e-04f, -6.931752862e-04f, -6.931945977e-04f,
+-6.932127097e-04f, -6.932296222e-04f, -6.932453352e-04f, -6.932598490e-04f, -6.932731634e-04f, -6.932852785e-04f, -6.932961944e-04f, -6.933059112e-04f, -6.933144290e-04f, -6.933217476e-04f,
+-6.933278674e-04f, -6.933327882e-04f, -6.933365103e-04f, -6.933390335e-04f, -6.933403581e-04f, -6.933404841e-04f, -6.933394116e-04f, -6.933371407e-04f, -6.933336714e-04f, -6.933290038e-04f,
+-6.933231380e-04f, -6.933160741e-04f, -6.933078122e-04f, -6.932983524e-04f, -6.932876948e-04f, -6.932758394e-04f, -6.932627864e-04f, -6.932485358e-04f, -6.932330879e-04f, -6.932164426e-04f,
+-6.931986001e-04f, -6.931795605e-04f, -6.931593239e-04f, -6.931378904e-04f, -6.931152601e-04f, -6.930914331e-04f, -6.930664097e-04f, -6.930401898e-04f, -6.930127736e-04f, -6.929841613e-04f,
+-6.929543529e-04f, -6.929233486e-04f, -6.928911485e-04f, -6.928577528e-04f, -6.928231616e-04f, -6.927873750e-04f, -6.927503932e-04f, -6.927122162e-04f, -6.926728444e-04f, -6.926322777e-04f,
+-6.925905163e-04f, -6.925475605e-04f, -6.925034103e-04f, -6.924580659e-04f, -6.924115275e-04f, -6.923637951e-04f, -6.923148691e-04f, -6.922647495e-04f, -6.922134364e-04f, -6.921609302e-04f,
+-6.921072309e-04f, -6.920523386e-04f, -6.919962537e-04f, -6.919389762e-04f, -6.918805064e-04f, -6.918208443e-04f, -6.917599902e-04f, -6.916979443e-04f, -6.916347068e-04f, -6.915702778e-04f,
+-6.915046575e-04f, -6.914378461e-04f, -6.913698439e-04f, -6.913006510e-04f, -6.912302675e-04f, -6.911586938e-04f, -6.910859300e-04f, -6.910119763e-04f, -6.909368329e-04f, -6.908605000e-04f,
+-6.907829778e-04f, -6.907042666e-04f, -6.906243665e-04f, -6.905432779e-04f, -6.904610008e-04f, -6.903775354e-04f, -6.902928822e-04f, -6.902070412e-04f, -6.901200126e-04f, -6.900317968e-04f,
+-6.899423938e-04f, -6.898518041e-04f, -6.897600278e-04f, -6.896670650e-04f, -6.895729162e-04f, -6.894775815e-04f, -6.893810611e-04f, -6.892833553e-04f, -6.891844644e-04f, -6.890843885e-04f,
+-6.889831280e-04f, -6.888806831e-04f, -6.887770541e-04f, -6.886722411e-04f, -6.885662445e-04f, -6.884590645e-04f, -6.883507014e-04f, -6.882411555e-04f, -6.881304269e-04f, -6.880185161e-04f,
+-6.879054232e-04f, -6.877911485e-04f, -6.876756923e-04f, -6.875590549e-04f, -6.874412366e-04f, -6.873222376e-04f, -6.872020582e-04f, -6.870806987e-04f, -6.869581594e-04f, -6.868344405e-04f,
+-6.867095425e-04f, -6.865834655e-04f, -6.864562098e-04f, -6.863277758e-04f, -6.861981637e-04f, -6.860673739e-04f, -6.859354067e-04f, -6.858022623e-04f, -6.856679410e-04f, -6.855324433e-04f,
+-6.853957693e-04f, -6.852579194e-04f, -6.851188939e-04f, -6.849786931e-04f, -6.848373174e-04f, -6.846947671e-04f, -6.845510424e-04f, -6.844061438e-04f, -6.842600715e-04f, -6.841128258e-04f,
+-6.839644072e-04f, -6.838148159e-04f, -6.836640522e-04f, -6.835121166e-04f, -6.833590093e-04f, -6.832047307e-04f, -6.830492811e-04f, -6.828926609e-04f, -6.827348704e-04f, -6.825759100e-04f,
+-6.824157800e-04f, -6.822544807e-04f, -6.820920126e-04f, -6.819283760e-04f, -6.817635712e-04f, -6.815975986e-04f, -6.814304585e-04f, -6.812621514e-04f, -6.810926776e-04f, -6.809220375e-04f,
+-6.807502314e-04f, -6.805772597e-04f, -6.804031228e-04f, -6.802278210e-04f, -6.800513548e-04f, -6.798737245e-04f, -6.796949305e-04f, -6.795149732e-04f, -6.793338529e-04f, -6.791515702e-04f,
+-6.789681252e-04f, -6.787835185e-04f, -6.785977505e-04f, -6.784108215e-04f, -6.782227319e-04f, -6.780334822e-04f, -6.778430727e-04f, -6.776515038e-04f, -6.774587760e-04f, -6.772648897e-04f,
+-6.770698452e-04f, -6.768736430e-04f, -6.766762835e-04f, -6.764777671e-04f, -6.762780942e-04f, -6.760772653e-04f, -6.758752808e-04f, -6.756721410e-04f, -6.754678465e-04f, -6.752623976e-04f,
+-6.750557948e-04f, -6.748480385e-04f, -6.746391292e-04f, -6.744290672e-04f, -6.742178531e-04f, -6.740054873e-04f, -6.737919701e-04f, -6.735773021e-04f, -6.733614836e-04f, -6.731445153e-04f,
+-6.729263974e-04f, -6.727071304e-04f, -6.724867149e-04f, -6.722651512e-04f, -6.720424398e-04f, -6.718185812e-04f, -6.715935758e-04f, -6.713674241e-04f, -6.711401265e-04f, -6.709116836e-04f,
+-6.706820958e-04f, -6.704513636e-04f, -6.702194874e-04f, -6.699864677e-04f, -6.697523050e-04f, -6.695169998e-04f, -6.692805525e-04f, -6.690429637e-04f, -6.688042338e-04f, -6.685643633e-04f,
+-6.683233527e-04f, -6.680812025e-04f, -6.678379131e-04f, -6.675934852e-04f, -6.673479191e-04f, -6.671012154e-04f, -6.668533745e-04f, -6.666043971e-04f, -6.663542835e-04f, -6.661030343e-04f,
+-6.658506499e-04f, -6.655971310e-04f, -6.653424780e-04f, -6.650866915e-04f, -6.648297718e-04f, -6.645717197e-04f, -6.643125355e-04f, -6.640522198e-04f, -6.637907732e-04f, -6.635281961e-04f,
+-6.632644890e-04f, -6.629996526e-04f, -6.627336874e-04f, -6.624665938e-04f, -6.621983724e-04f, -6.619290237e-04f, -6.616585484e-04f, -6.613869468e-04f, -6.611142197e-04f, -6.608403674e-04f,
+-6.605653906e-04f, -6.602892898e-04f, -6.600120656e-04f, -6.597337185e-04f, -6.594542491e-04f, -6.591736578e-04f, -6.588919454e-04f, -6.586091123e-04f, -6.583251591e-04f, -6.580400863e-04f,
+-6.577538946e-04f, -6.574665845e-04f, -6.571781565e-04f, -6.568886113e-04f, -6.565979494e-04f, -6.563061714e-04f, -6.560132779e-04f, -6.557192694e-04f, -6.554241465e-04f, -6.551279098e-04f,
+-6.548305599e-04f, -6.545320974e-04f, -6.542325229e-04f, -6.539318369e-04f, -6.536300400e-04f, -6.533271329e-04f, -6.530231162e-04f, -6.527179904e-04f, -6.524117561e-04f, -6.521044139e-04f,
+-6.517959645e-04f, -6.514864084e-04f, -6.511757463e-04f, -6.508639788e-04f, -6.505511064e-04f, -6.502371298e-04f, -6.499220496e-04f, -6.496058664e-04f, -6.492885808e-04f, -6.489701935e-04f,
+-6.486507051e-04f, -6.483301162e-04f, -6.480084274e-04f, -6.476856394e-04f, -6.473617527e-04f, -6.470367681e-04f, -6.467106861e-04f, -6.463835073e-04f, -6.460552326e-04f, -6.457258623e-04f,
+-6.453953973e-04f, -6.450638381e-04f, -6.447311854e-04f, -6.443974398e-04f, -6.440626020e-04f, -6.437266727e-04f, -6.433896524e-04f, -6.430515418e-04f, -6.427123417e-04f, -6.423720526e-04f,
+-6.420306752e-04f, -6.416882102e-04f, -6.413446582e-04f, -6.410000199e-04f, -6.406542959e-04f, -6.403074870e-04f, -6.399595938e-04f, -6.396106170e-04f, -6.392605572e-04f, -6.389094151e-04f,
+-6.385571915e-04f, -6.382038869e-04f, -6.378495021e-04f, -6.374940377e-04f, -6.371374944e-04f, -6.367798730e-04f, -6.364211741e-04f, -6.360613983e-04f, -6.357005465e-04f, -6.353386192e-04f,
+-6.349756172e-04f, -6.346115411e-04f, -6.342463918e-04f, -6.338801698e-04f, -6.335128759e-04f, -6.331445108e-04f, -6.327750751e-04f, -6.324045697e-04f, -6.320329951e-04f, -6.316603522e-04f,
+-6.312866416e-04f, -6.309118640e-04f, -6.305360202e-04f, -6.301591109e-04f, -6.297811368e-04f, -6.294020986e-04f, -6.290219971e-04f, -6.286408330e-04f, -6.282586069e-04f, -6.278753197e-04f,
+-6.274909721e-04f, -6.271055647e-04f, -6.267190984e-04f, -6.263315739e-04f, -6.259429919e-04f, -6.255533531e-04f, -6.251626583e-04f, -6.247709083e-04f, -6.243781037e-04f, -6.239842454e-04f,
+-6.235893341e-04f, -6.231933705e-04f, -6.227963553e-04f, -6.223982895e-04f, -6.219991736e-04f, -6.215990084e-04f, -6.211977948e-04f, -6.207955335e-04f, -6.203922252e-04f, -6.199878707e-04f,
+-6.195824708e-04f, -6.191760262e-04f, -6.187685378e-04f, -6.183600062e-04f, -6.179504323e-04f, -6.175398168e-04f, -6.171281605e-04f, -6.167154642e-04f, -6.163017287e-04f, -6.158869548e-04f,
+-6.154711432e-04f, -6.150542947e-04f, -6.146364102e-04f, -6.142174903e-04f, -6.137975359e-04f, -6.133765479e-04f, -6.129545269e-04f, -6.125314738e-04f, -6.121073894e-04f, -6.116822744e-04f,
+-6.112561298e-04f, -6.108289562e-04f, -6.104007545e-04f, -6.099715256e-04f, -6.095412701e-04f, -6.091099890e-04f, -6.086776829e-04f, -6.082443529e-04f, -6.078099996e-04f, -6.073746238e-04f,
+-6.069382265e-04f, -6.065008084e-04f, -6.060623703e-04f, -6.056229131e-04f, -6.051824376e-04f, -6.047409446e-04f, -6.042984350e-04f, -6.038549095e-04f, -6.034103690e-04f, -6.029648144e-04f,
+-6.025182465e-04f, -6.020706661e-04f, -6.016220741e-04f, -6.011724713e-04f, -6.007218585e-04f, -6.002702366e-04f, -5.998176064e-04f, -5.993639689e-04f, -5.989093247e-04f, -5.984536749e-04f,
+-5.979970202e-04f, -5.975393615e-04f, -5.970806996e-04f, -5.966210355e-04f, -5.961603699e-04f, -5.956987038e-04f, -5.952360379e-04f, -5.947723732e-04f, -5.943077106e-04f, -5.938420508e-04f,
+-5.933753948e-04f, -5.929077434e-04f, -5.924390976e-04f, -5.919694581e-04f, -5.914988259e-04f, -5.910272018e-04f, -5.905545868e-04f, -5.900809816e-04f, -5.896063872e-04f, -5.891308045e-04f,
+-5.886542344e-04f, -5.881766777e-04f, -5.876981353e-04f, -5.872186082e-04f, -5.867380972e-04f, -5.862566032e-04f, -5.857741271e-04f, -5.852906698e-04f, -5.848062322e-04f, -5.843208152e-04f,
+-5.838344197e-04f, -5.833470467e-04f, -5.828586970e-04f, -5.823693715e-04f, -5.818790711e-04f, -5.813877968e-04f, -5.808955495e-04f, -5.804023300e-04f, -5.799081393e-04f, -5.794129784e-04f,
+-5.789168480e-04f, -5.784197493e-04f, -5.779216830e-04f, -5.774226501e-04f, -5.769226515e-04f, -5.764216882e-04f, -5.759197610e-04f, -5.754168710e-04f, -5.749130190e-04f, -5.744082059e-04f,
+-5.739024328e-04f, -5.733957006e-04f, -5.728880101e-04f, -5.723793624e-04f, -5.718697583e-04f, -5.713591988e-04f, -5.708476849e-04f, -5.703352175e-04f, -5.698217976e-04f, -5.693074260e-04f,
+-5.687921038e-04f, -5.682758319e-04f, -5.677586113e-04f, -5.672404429e-04f, -5.667213276e-04f, -5.662012665e-04f, -5.656802605e-04f, -5.651583105e-04f, -5.646354176e-04f, -5.641115826e-04f,
+-5.635868066e-04f, -5.630610905e-04f, -5.625344353e-04f, -5.620068420e-04f, -5.614783115e-04f, -5.609488448e-04f, -5.604184429e-04f, -5.598871068e-04f, -5.593548374e-04f, -5.588216357e-04f,
+-5.582875027e-04f, -5.577524395e-04f, -5.572164469e-04f, -5.566795259e-04f, -5.561416776e-04f, -5.556029030e-04f, -5.550632030e-04f, -5.545225786e-04f, -5.539810309e-04f, -5.534385607e-04f,
+-5.528951692e-04f, -5.523508573e-04f, -5.518056260e-04f, -5.512594764e-04f, -5.507124093e-04f, -5.501644259e-04f, -5.496155272e-04f, -5.490657140e-04f, -5.485149876e-04f, -5.479633487e-04f,
+-5.474107986e-04f, -5.468573382e-04f, -5.463029685e-04f, -5.457476905e-04f, -5.451915052e-04f, -5.446344138e-04f, -5.440764171e-04f, -5.435175162e-04f, -5.429577122e-04f, -5.423970060e-04f,
+-5.418353988e-04f, -5.412728914e-04f, -5.407094850e-04f, -5.401451806e-04f, -5.395799792e-04f, -5.390138819e-04f, -5.384468897e-04f, -5.378790036e-04f, -5.373102246e-04f, -5.367405539e-04f,
+-5.361699925e-04f, -5.355985413e-04f, -5.350262015e-04f, -5.344529741e-04f, -5.338788601e-04f, -5.333038607e-04f, -5.327279767e-04f, -5.321512094e-04f, -5.315735597e-04f, -5.309950288e-04f,
+-5.304156176e-04f, -5.298353272e-04f, -5.292541587e-04f, -5.286721132e-04f, -5.280891917e-04f, -5.275053952e-04f, -5.269207249e-04f, -5.263351819e-04f, -5.257487670e-04f, -5.251614816e-04f,
+-5.245733266e-04f, -5.239843030e-04f, -5.233944121e-04f, -5.228036547e-04f, -5.222120322e-04f, -5.216195454e-04f, -5.210261955e-04f, -5.204319835e-04f, -5.198369107e-04f, -5.192409779e-04f,
+-5.186441864e-04f, -5.180465372e-04f, -5.174480314e-04f, -5.168486700e-04f, -5.162484543e-04f, -5.156473852e-04f, -5.150454639e-04f, -5.144426915e-04f, -5.138390690e-04f, -5.132345976e-04f,
+-5.126292784e-04f, -5.120231124e-04f, -5.114161008e-04f, -5.108082447e-04f, -5.101995451e-04f, -5.095900033e-04f, -5.089796202e-04f, -5.083683970e-04f, -5.077563348e-04f, -5.071434348e-04f,
+-5.065296980e-04f, -5.059151256e-04f, -5.052997187e-04f, -5.046834783e-04f, -5.040664057e-04f, -5.034485018e-04f, -5.028297680e-04f, -5.022102052e-04f, -5.015898147e-04f, -5.009685974e-04f,
+-5.003465546e-04f, -4.997236875e-04f, -4.990999970e-04f, -4.984754844e-04f, -4.978501508e-04f, -4.972239973e-04f, -4.965970250e-04f, -4.959692352e-04f, -4.953406288e-04f, -4.947112072e-04f,
+-4.940809713e-04f, -4.934499225e-04f, -4.928180617e-04f, -4.921853901e-04f, -4.915519090e-04f, -4.909176194e-04f, -4.902825225e-04f, -4.896466194e-04f, -4.890099113e-04f, -4.883723994e-04f,
+-4.877340847e-04f, -4.870949685e-04f, -4.864550520e-04f, -4.858143362e-04f, -4.851728223e-04f, -4.845305115e-04f, -4.838874050e-04f, -4.832435039e-04f, -4.825988094e-04f, -4.819533226e-04f,
+-4.813070447e-04f, -4.806599769e-04f, -4.800121204e-04f, -4.793634763e-04f, -4.787140459e-04f, -4.780638301e-04f, -4.774128304e-04f, -4.767610477e-04f, -4.761084834e-04f, -4.754551386e-04f,
+-4.748010144e-04f, -4.741461120e-04f, -4.734904327e-04f, -4.728339776e-04f, -4.721767479e-04f, -4.715187448e-04f, -4.708599695e-04f, -4.702004231e-04f, -4.695401069e-04f, -4.688790220e-04f,
+-4.682171696e-04f, -4.675545510e-04f, -4.668911673e-04f, -4.662270198e-04f, -4.655621095e-04f, -4.648964378e-04f, -4.642300058e-04f, -4.635628147e-04f, -4.628948658e-04f, -4.622261602e-04f,
+-4.615566991e-04f, -4.608864837e-04f, -4.602155154e-04f, -4.595437951e-04f, -4.588713243e-04f, -4.581981040e-04f, -4.575241355e-04f, -4.568494201e-04f, -4.561739588e-04f, -4.554977530e-04f,
+-4.548208039e-04f, -4.541431126e-04f, -4.534646804e-04f, -4.527855086e-04f, -4.521055982e-04f, -4.514249507e-04f, -4.507435671e-04f, -4.500614488e-04f, -4.493785969e-04f, -4.486950126e-04f,
+-4.480106973e-04f, -4.473256521e-04f, -4.466398782e-04f, -4.459533770e-04f, -4.452661496e-04f, -4.445781972e-04f, -4.438895212e-04f, -4.432001227e-04f, -4.425100029e-04f, -4.418191632e-04f,
+-4.411276048e-04f, -4.404353288e-04f, -4.397423366e-04f, -4.390486294e-04f, -4.383542085e-04f, -4.376590750e-04f, -4.369632302e-04f, -4.362666755e-04f, -4.355694119e-04f, -4.348714409e-04f,
+-4.341727636e-04f, -4.334733812e-04f, -4.327732952e-04f, -4.320725066e-04f, -4.313710168e-04f, -4.306688270e-04f, -4.299659385e-04f, -4.292623525e-04f, -4.285580703e-04f, -4.278530932e-04f,
+-4.271474224e-04f, -4.264410592e-04f, -4.257340049e-04f, -4.250262607e-04f, -4.243178279e-04f, -4.236087077e-04f, -4.228989015e-04f, -4.221884105e-04f, -4.214772360e-04f, -4.207653793e-04f,
+-4.200528415e-04f, -4.193396241e-04f, -4.186257283e-04f, -4.179111553e-04f, -4.171959065e-04f, -4.164799831e-04f, -4.157633864e-04f, -4.150461176e-04f, -4.143281782e-04f, -4.136095693e-04f,
+-4.128902923e-04f, -4.121703483e-04f, -4.114497389e-04f, -4.107284651e-04f, -4.100065283e-04f, -4.092839298e-04f, -4.085606708e-04f, -4.078367528e-04f, -4.071121769e-04f, -4.063869445e-04f,
+-4.056610569e-04f, -4.049345153e-04f, -4.042073210e-04f, -4.034794755e-04f, -4.027509798e-04f, -4.020218355e-04f, -4.012920437e-04f, -4.005616058e-04f, -3.998305230e-04f, -3.990987968e-04f,
+-3.983664283e-04f, -3.976334189e-04f, -3.968997699e-04f, -3.961654826e-04f, -3.954305584e-04f, -3.946949985e-04f, -3.939588042e-04f, -3.932219769e-04f, -3.924845179e-04f, -3.917464284e-04f,
+-3.910077099e-04f, -3.902683637e-04f, -3.895283909e-04f, -3.887877931e-04f, -3.880465714e-04f, -3.873047272e-04f, -3.865622619e-04f, -3.858191767e-04f, -3.850754731e-04f, -3.843311522e-04f,
+-3.835862155e-04f, -3.828406642e-04f, -3.820944998e-04f, -3.813477234e-04f, -3.806003365e-04f, -3.798523405e-04f, -3.791037365e-04f, -3.783545260e-04f, -3.776047103e-04f, -3.768542907e-04f,
+-3.761032685e-04f, -3.753516452e-04f, -3.745994220e-04f, -3.738466003e-04f, -3.730931814e-04f, -3.723391667e-04f, -3.715845575e-04f, -3.708293551e-04f, -3.700735609e-04f, -3.693171763e-04f,
+-3.685602025e-04f, -3.678026410e-04f, -3.670444931e-04f, -3.662857600e-04f, -3.655264433e-04f, -3.647665442e-04f, -3.640060641e-04f, -3.632450043e-04f, -3.624833661e-04f, -3.617211511e-04f,
+-3.609583604e-04f, -3.601949955e-04f, -3.594310577e-04f, -3.586665483e-04f, -3.579014688e-04f, -3.571358205e-04f, -3.563696047e-04f, -3.556028229e-04f, -3.548354763e-04f, -3.540675663e-04f,
+-3.532990944e-04f, -3.525300618e-04f, -3.517604699e-04f, -3.509903201e-04f, -3.502196139e-04f, -3.494483524e-04f, -3.486765372e-04f, -3.479041695e-04f, -3.471312508e-04f, -3.463577824e-04f,
+-3.455837656e-04f, -3.448092020e-04f, -3.440340928e-04f, -3.432584394e-04f, -3.424822432e-04f, -3.417055056e-04f, -3.409282279e-04f, -3.401504116e-04f, -3.393720580e-04f, -3.385931684e-04f,
+-3.378137444e-04f, -3.370337871e-04f, -3.362532982e-04f, -3.354722788e-04f, -3.346907304e-04f, -3.339086545e-04f, -3.331260523e-04f, -3.323429253e-04f, -3.315592748e-04f, -3.307751023e-04f,
+-3.299904091e-04f, -3.292051966e-04f, -3.284194663e-04f, -3.276332195e-04f, -3.268464575e-04f, -3.260591819e-04f, -3.252713939e-04f, -3.244830950e-04f, -3.236942866e-04f, -3.229049701e-04f,
+-3.221151469e-04f, -3.213248183e-04f, -3.205339858e-04f, -3.197426508e-04f, -3.189508146e-04f, -3.181584788e-04f, -3.173656446e-04f, -3.165723135e-04f, -3.157784868e-04f, -3.149841661e-04f,
+-3.141893526e-04f, -3.133940479e-04f, -3.125982533e-04f, -3.118019702e-04f, -3.110052000e-04f, -3.102079441e-04f, -3.094102040e-04f, -3.086119811e-04f, -3.078132767e-04f, -3.070140923e-04f,
+-3.062144293e-04f, -3.054142891e-04f, -3.046136731e-04f, -3.038125828e-04f, -3.030110195e-04f, -3.022089847e-04f, -3.014064797e-04f, -3.006035061e-04f, -2.998000652e-04f, -2.989961585e-04f,
+-2.981917873e-04f, -2.973869530e-04f, -2.965816572e-04f, -2.957759013e-04f, -2.949696865e-04f, -2.941630145e-04f, -2.933558866e-04f, -2.925483041e-04f, -2.917402687e-04f, -2.909317816e-04f,
+-2.901228443e-04f, -2.893134582e-04f, -2.885036248e-04f, -2.876933455e-04f, -2.868826218e-04f, -2.860714549e-04f, -2.852598465e-04f, -2.844477979e-04f, -2.836353105e-04f, -2.828223858e-04f,
+-2.820090252e-04f, -2.811952302e-04f, -2.803810021e-04f, -2.795663425e-04f, -2.787512528e-04f, -2.779357343e-04f, -2.771197885e-04f, -2.763034170e-04f, -2.754866210e-04f, -2.746694021e-04f,
+-2.738517617e-04f, -2.730337013e-04f, -2.722152222e-04f, -2.713963259e-04f, -2.705770138e-04f, -2.697572875e-04f, -2.689371484e-04f, -2.681165978e-04f, -2.672956372e-04f, -2.664742682e-04f,
+-2.656524921e-04f, -2.648303103e-04f, -2.640077244e-04f, -2.631847358e-04f, -2.623613458e-04f, -2.615375561e-04f, -2.607133680e-04f, -2.598887829e-04f, -2.590638024e-04f, -2.582384279e-04f,
+-2.574126608e-04f, -2.565865026e-04f, -2.557599547e-04f, -2.549330186e-04f, -2.541056958e-04f, -2.532779877e-04f, -2.524498957e-04f, -2.516214214e-04f, -2.507925661e-04f, -2.499633313e-04f,
+-2.491337186e-04f, -2.483037293e-04f, -2.474733649e-04f, -2.466426269e-04f, -2.458115167e-04f, -2.449800358e-04f, -2.441481857e-04f, -2.433159677e-04f, -2.424833835e-04f, -2.416504344e-04f,
+-2.408171219e-04f, -2.399834474e-04f, -2.391494126e-04f, -2.383150187e-04f, -2.374802672e-04f, -2.366451598e-04f, -2.358096977e-04f, -2.349738825e-04f, -2.341377156e-04f, -2.333011985e-04f,
+-2.324643327e-04f, -2.316271196e-04f, -2.307895608e-04f, -2.299516576e-04f, -2.291134116e-04f, -2.282748243e-04f, -2.274358970e-04f, -2.265966313e-04f, -2.257570286e-04f, -2.249170905e-04f,
+-2.240768184e-04f, -2.232362137e-04f, -2.223952780e-04f, -2.215540126e-04f, -2.207124192e-04f, -2.198704992e-04f, -2.190282540e-04f, -2.181856851e-04f, -2.173427941e-04f, -2.164995823e-04f,
+-2.156560512e-04f, -2.148122025e-04f, -2.139680374e-04f, -2.131235575e-04f, -2.122787644e-04f, -2.114336593e-04f, -2.105882440e-04f, -2.097425197e-04f, -2.088964881e-04f, -2.080501505e-04f,
+-2.072035085e-04f, -2.063565636e-04f, -2.055093172e-04f, -2.046617708e-04f, -2.038139260e-04f, -2.029657841e-04f, -2.021173468e-04f, -2.012686154e-04f, -2.004195914e-04f, -1.995702764e-04f,
+-1.987206719e-04f, -1.978707792e-04f, -1.970205999e-04f, -1.961701356e-04f, -1.953193876e-04f, -1.944683575e-04f, -1.936170468e-04f, -1.927654569e-04f, -1.919135893e-04f, -1.910614456e-04f,
+-1.902090272e-04f, -1.893563357e-04f, -1.885033724e-04f, -1.876501389e-04f, -1.867966368e-04f, -1.859428674e-04f, -1.850888323e-04f, -1.842345330e-04f, -1.833799709e-04f, -1.825251476e-04f,
+-1.816700646e-04f, -1.808147233e-04f, -1.799591253e-04f, -1.791032720e-04f, -1.782471650e-04f, -1.773908057e-04f, -1.765341956e-04f, -1.756773363e-04f, -1.748202292e-04f, -1.739628758e-04f,
+-1.731052777e-04f, -1.722474363e-04f, -1.713893531e-04f, -1.705310296e-04f, -1.696724674e-04f, -1.688136679e-04f, -1.679546326e-04f, -1.670953631e-04f, -1.662358607e-04f, -1.653761271e-04f,
+-1.645161637e-04f, -1.636559721e-04f, -1.627955537e-04f, -1.619349100e-04f, -1.610740426e-04f, -1.602129529e-04f, -1.593516424e-04f, -1.584901127e-04f, -1.576283653e-04f, -1.567664016e-04f,
+-1.559042232e-04f, -1.550418315e-04f, -1.541792281e-04f, -1.533164145e-04f, -1.524533922e-04f, -1.515901626e-04f, -1.507267274e-04f, -1.498630879e-04f, -1.489992458e-04f, -1.481352024e-04f,
+-1.472709594e-04f, -1.464065182e-04f, -1.455418804e-04f, -1.446770473e-04f, -1.438120207e-04f, -1.429468019e-04f, -1.420813924e-04f, -1.412157939e-04f, -1.403500077e-04f, -1.394840354e-04f,
+-1.386178785e-04f, -1.377515386e-04f, -1.368850170e-04f, -1.360183154e-04f, -1.351514353e-04f, -1.342843780e-04f, -1.334171453e-04f, -1.325497385e-04f, -1.316821592e-04f, -1.308144089e-04f,
+-1.299464892e-04f, -1.290784014e-04f, -1.282101472e-04f, -1.273417280e-04f, -1.264731454e-04f, -1.256044008e-04f, -1.247354958e-04f, -1.238664319e-04f, -1.229972107e-04f, -1.221278335e-04f,
+-1.212583020e-04f, -1.203886176e-04f, -1.195187819e-04f, -1.186487964e-04f, -1.177786625e-04f, -1.169083819e-04f, -1.160379559e-04f, -1.151673862e-04f, -1.142966743e-04f, -1.134258216e-04f,
+-1.125548297e-04f, -1.116837001e-04f, -1.108124342e-04f, -1.099410337e-04f, -1.090695001e-04f, -1.081978348e-04f, -1.073260393e-04f, -1.064541153e-04f, -1.055820641e-04f, -1.047098874e-04f,
+-1.038375866e-04f, -1.029651632e-04f, -1.020926188e-04f, -1.012199549e-04f, -1.003471730e-04f, -9.947427458e-05f, -9.860126121e-05f, -9.772813438e-05f, -9.685489562e-05f, -9.598154644e-05f,
+-9.510808837e-05f, -9.423452290e-05f, -9.336085158e-05f, -9.248707590e-05f, -9.161319739e-05f, -9.073921757e-05f, -8.986513796e-05f, -8.899096006e-05f, -8.811668541e-05f, -8.724231551e-05f,
+-8.636785189e-05f, -8.549329606e-05f, -8.461864955e-05f, -8.374391386e-05f, -8.286909053e-05f, -8.199418106e-05f, -8.111918697e-05f, -8.024410979e-05f, -7.936895103e-05f, -7.849371222e-05f,
+-7.761839485e-05f, -7.674300047e-05f, -7.586753058e-05f, -7.499198671e-05f, -7.411637037e-05f, -7.324068308e-05f, -7.236492636e-05f, -7.148910173e-05f, -7.061321071e-05f, -6.973725482e-05f,
+-6.886123557e-05f, -6.798515448e-05f, -6.710901308e-05f, -6.623281288e-05f, -6.535655540e-05f, -6.448024215e-05f, -6.360387467e-05f, -6.272745446e-05f, -6.185098305e-05f, -6.097446195e-05f,
+-6.009789268e-05f, -5.922127676e-05f, -5.834461572e-05f, -5.746791106e-05f, -5.659116431e-05f, -5.571437699e-05f, -5.483755061e-05f, -5.396068670e-05f, -5.308378676e-05f, -5.220685233e-05f,
+-5.132988492e-05f, -5.045288604e-05f, -4.957585722e-05f, -4.869879997e-05f, -4.782171581e-05f, -4.694460627e-05f, -4.606747285e-05f, -4.519031708e-05f, -4.431314047e-05f, -4.343594455e-05f,
+-4.255873082e-05f, -4.168150082e-05f, -4.080425605e-05f, -3.992699803e-05f, -3.904972829e-05f, -3.817244833e-05f, -3.729515968e-05f, -3.641786385e-05f, -3.554056237e-05f, -3.466325674e-05f,
+-3.378594849e-05f, -3.290863913e-05f, -3.203133018e-05f, -3.115402316e-05f, -3.027671958e-05f, -2.939942095e-05f, -2.852212881e-05f, -2.764484465e-05f, -2.676757001e-05f, -2.589030639e-05f,
+-2.501305531e-05f, -2.413581828e-05f, -2.325859683e-05f, -2.238139247e-05f, -2.150420671e-05f, -2.062704107e-05f, -1.974989707e-05f, -1.887277621e-05f, -1.799568002e-05f, -1.711861001e-05f,
+-1.624156769e-05f, -1.536455458e-05f, -1.448757219e-05f, -1.361062205e-05f, -1.273370565e-05f, -1.185682452e-05f, -1.097998016e-05f, -1.010317410e-05f, -9.226407851e-06f, -8.349682918e-06f,
+-7.473000817e-06f, -6.596363062e-06f, -5.719771166e-06f, -4.843226641e-06f, -3.966730999e-06f, -3.090285753e-06f, -2.213892416e-06f, -1.337552498e-06f, -4.612675114e-07f, 4.149610321e-07f,
+1.291131621e-06f, 2.167242745e-06f, 3.043292893e-06f, 3.919280554e-06f, 4.795204217e-06f, 5.671062373e-06f, 6.546853511e-06f, 7.422576122e-06f, 8.298228695e-06f, 9.173809722e-06f,
+1.004931769e-05f, 1.092475110e-05f, 1.180010843e-05f, 1.267538818e-05f, 1.355058884e-05f, 1.442570891e-05f, 1.530074686e-05f, 1.617570120e-05f, 1.705057043e-05f, 1.792535302e-05f,
+1.880004748e-05f, 1.967465230e-05f, 2.054916597e-05f, 2.142358698e-05f, 2.229791384e-05f, 2.317214503e-05f, 2.404627905e-05f, 2.492031440e-05f, 2.579424956e-05f, 2.666808304e-05f,
+2.754181334e-05f, 2.841543894e-05f, 2.928895834e-05f, 3.016237004e-05f, 3.103567254e-05f, 3.190886434e-05f, 3.278194393e-05f, 3.365490980e-05f, 3.452776047e-05f, 3.540049442e-05f,
+3.627311016e-05f, 3.714560618e-05f, 3.801798098e-05f, 3.889023307e-05f, 3.976236093e-05f, 4.063436309e-05f, 4.150623802e-05f, 4.237798424e-05f, 4.324960025e-05f, 4.412108454e-05f,
+4.499243562e-05f, 4.586365199e-05f, 4.673473216e-05f, 4.760567462e-05f, 4.847647789e-05f, 4.934714045e-05f, 5.021766082e-05f, 5.108803751e-05f, 5.195826900e-05f, 5.282835382e-05f,
+5.369829047e-05f, 5.456807744e-05f, 5.543771326e-05f, 5.630719641e-05f, 5.717652542e-05f, 5.804569879e-05f, 5.891471501e-05f, 5.978357262e-05f, 6.065227010e-05f, 6.152080597e-05f,
+6.238917874e-05f, 6.325738691e-05f, 6.412542900e-05f, 6.499330352e-05f, 6.586100898e-05f, 6.672854388e-05f, 6.759590675e-05f, 6.846309608e-05f, 6.933011040e-05f, 7.019694821e-05f,
+7.106360803e-05f, 7.193008837e-05f, 7.279638775e-05f, 7.366250468e-05f, 7.452843766e-05f, 7.539418523e-05f, 7.625974589e-05f, 7.712511816e-05f, 7.799030055e-05f, 7.885529159e-05f,
+7.972008978e-05f, 8.058469365e-05f, 8.144910172e-05f, 8.231331249e-05f, 8.317732450e-05f, 8.404113626e-05f, 8.490474628e-05f, 8.576815310e-05f, 8.663135523e-05f, 8.749435118e-05f,
+8.835713949e-05f, 8.921971867e-05f, 9.008208725e-05f, 9.094424375e-05f, 9.180618669e-05f, 9.266791460e-05f, 9.352942600e-05f, 9.439071941e-05f, 9.525179336e-05f, 9.611264638e-05f,
+9.697327699e-05f, 9.783368371e-05f, 9.869386508e-05f, 9.955381963e-05f, 1.004135459e-04f, 1.012730423e-04f, 1.021323076e-04f, 1.029913401e-04f, 1.038501384e-04f, 1.047087011e-04f,
+1.055670267e-04f, 1.064251137e-04f, 1.072829606e-04f, 1.081405660e-04f, 1.089979284e-04f, 1.098550463e-04f, 1.107119183e-04f, 1.115685429e-04f, 1.124249187e-04f, 1.132810442e-04f,
+1.141369178e-04f, 1.149925382e-04f, 1.158479040e-04f, 1.167030135e-04f, 1.175578654e-04f, 1.184124582e-04f, 1.192667905e-04f, 1.201208607e-04f, 1.209746675e-04f, 1.218282093e-04f,
+1.226814847e-04f, 1.235344923e-04f, 1.243872306e-04f, 1.252396981e-04f, 1.260918934e-04f, 1.269438150e-04f, 1.277954615e-04f, 1.286468314e-04f, 1.294979233e-04f, 1.303487357e-04f,
+1.311992671e-04f, 1.320495161e-04f, 1.328994813e-04f, 1.337491612e-04f, 1.345985543e-04f, 1.354476593e-04f, 1.362964745e-04f, 1.371449987e-04f, 1.379932303e-04f, 1.388411680e-04f,
+1.396888102e-04f, 1.405361555e-04f, 1.413832025e-04f, 1.422299497e-04f, 1.430763956e-04f, 1.439225390e-04f, 1.447683782e-04f, 1.456139118e-04f, 1.464591385e-04f, 1.473040567e-04f,
+1.481486650e-04f, 1.489929621e-04f, 1.498369463e-04f, 1.506806164e-04f, 1.515239709e-04f, 1.523670082e-04f, 1.532097271e-04f, 1.540521260e-04f, 1.548942036e-04f, 1.557359583e-04f,
+1.565773888e-04f, 1.574184936e-04f, 1.582592713e-04f, 1.590997205e-04f, 1.599398397e-04f, 1.607796274e-04f, 1.616190823e-04f, 1.624582030e-04f, 1.632969880e-04f, 1.641354358e-04f,
+1.649735451e-04f, 1.658113144e-04f, 1.666487423e-04f, 1.674858273e-04f, 1.683225681e-04f, 1.691589632e-04f, 1.699950112e-04f, 1.708307107e-04f, 1.716660603e-04f, 1.725010584e-04f,
+1.733357038e-04f, 1.741699950e-04f, 1.750039305e-04f, 1.758375090e-04f, 1.766707290e-04f, 1.775035891e-04f, 1.783360879e-04f, 1.791682240e-04f, 1.799999960e-04f, 1.808314024e-04f,
+1.816624419e-04f, 1.824931130e-04f, 1.833234143e-04f, 1.841533444e-04f, 1.849829019e-04f, 1.858120854e-04f, 1.866408935e-04f, 1.874693247e-04f, 1.882973777e-04f, 1.891250510e-04f,
+1.899523433e-04f, 1.907792531e-04f, 1.916057791e-04f, 1.924319197e-04f, 1.932576738e-04f, 1.940830397e-04f, 1.949080161e-04f, 1.957326017e-04f, 1.965567950e-04f, 1.973805946e-04f,
+1.982039992e-04f, 1.990270073e-04f, 1.998496175e-04f, 2.006718284e-04f, 2.014936387e-04f, 2.023150469e-04f, 2.031360517e-04f, 2.039566516e-04f, 2.047768453e-04f, 2.055966313e-04f,
+2.064160084e-04f, 2.072349750e-04f, 2.080535298e-04f, 2.088716715e-04f, 2.096893985e-04f, 2.105067096e-04f, 2.113236034e-04f, 2.121400784e-04f, 2.129561333e-04f, 2.137717668e-04f,
+2.145869773e-04f, 2.154017636e-04f, 2.162161242e-04f, 2.170300578e-04f, 2.178435630e-04f, 2.186566384e-04f, 2.194692826e-04f, 2.202814944e-04f, 2.210932722e-04f, 2.219046147e-04f,
+2.227155205e-04f, 2.235259883e-04f, 2.243360168e-04f, 2.251456044e-04f, 2.259547499e-04f, 2.267634518e-04f, 2.275717089e-04f, 2.283795197e-04f, 2.291868828e-04f, 2.299937970e-04f,
+2.308002608e-04f, 2.316062729e-04f, 2.324118320e-04f, 2.332169365e-04f, 2.340215853e-04f, 2.348257768e-04f, 2.356295099e-04f, 2.364327830e-04f, 2.372355949e-04f, 2.380379442e-04f,
+2.388398295e-04f, 2.396412494e-04f, 2.404422027e-04f, 2.412426880e-04f, 2.420427039e-04f, 2.428422490e-04f, 2.436413221e-04f, 2.444399217e-04f, 2.452380465e-04f, 2.460356952e-04f,
+2.468328663e-04f, 2.476295587e-04f, 2.484257709e-04f, 2.492215015e-04f, 2.500167493e-04f, 2.508115128e-04f, 2.516057908e-04f, 2.523995819e-04f, 2.531928847e-04f, 2.539856980e-04f,
+2.547780204e-04f, 2.555698505e-04f, 2.563611870e-04f, 2.571520285e-04f, 2.579423738e-04f, 2.587322216e-04f, 2.595215703e-04f, 2.603104189e-04f, 2.610987658e-04f, 2.618866098e-04f,
+2.626739495e-04f, 2.634607837e-04f, 2.642471110e-04f, 2.650329300e-04f, 2.658182394e-04f, 2.666030380e-04f, 2.673873244e-04f, 2.681710972e-04f, 2.689543552e-04f, 2.697370970e-04f,
+2.705193213e-04f, 2.713010268e-04f, 2.720822122e-04f, 2.728628761e-04f, 2.736430173e-04f, 2.744226344e-04f, 2.752017261e-04f, 2.759802911e-04f, 2.767583281e-04f, 2.775358357e-04f,
+2.783128127e-04f, 2.790892578e-04f, 2.798651696e-04f, 2.806405469e-04f, 2.814153883e-04f, 2.821896926e-04f, 2.829634583e-04f, 2.837366843e-04f, 2.845093692e-04f, 2.852815118e-04f,
+2.860531107e-04f, 2.868241645e-04f, 2.875946722e-04f, 2.883646322e-04f, 2.891340434e-04f, 2.899029044e-04f, 2.906712140e-04f, 2.914389709e-04f, 2.922061737e-04f, 2.929728211e-04f,
+2.937389120e-04f, 2.945044450e-04f, 2.952694187e-04f, 2.960338320e-04f, 2.967976836e-04f, 2.975609721e-04f, 2.983236962e-04f, 2.990858548e-04f, 2.998474465e-04f, 3.006084700e-04f,
+3.013689240e-04f, 3.021288073e-04f, 3.028881187e-04f, 3.036468567e-04f, 3.044050202e-04f, 3.051626079e-04f, 3.059196184e-04f, 3.066760506e-04f, 3.074319032e-04f, 3.081871748e-04f,
+3.089418643e-04f, 3.096959704e-04f, 3.104494917e-04f, 3.112024271e-04f, 3.119547752e-04f, 3.127065348e-04f, 3.134577047e-04f, 3.142082835e-04f, 3.149582701e-04f, 3.157076631e-04f,
+3.164564614e-04f, 3.172046636e-04f, 3.179522685e-04f, 3.186992748e-04f, 3.194456813e-04f, 3.201914868e-04f, 3.209366899e-04f, 3.216812895e-04f, 3.224252843e-04f, 3.231686730e-04f,
+3.239114545e-04f, 3.246536273e-04f, 3.253951904e-04f, 3.261361425e-04f, 3.268764823e-04f, 3.276162086e-04f, 3.283553201e-04f, 3.290938157e-04f, 3.298316940e-04f, 3.305689539e-04f,
+3.313055940e-04f, 3.320416133e-04f, 3.327770104e-04f, 3.335117841e-04f, 3.342459331e-04f, 3.349794564e-04f, 3.357123525e-04f, 3.364446204e-04f, 3.371762587e-04f, 3.379072663e-04f,
+3.386376419e-04f, 3.393673843e-04f, 3.400964923e-04f, 3.408249646e-04f, 3.415528001e-04f, 3.422799976e-04f, 3.430065558e-04f, 3.437324734e-04f, 3.444577494e-04f, 3.451823824e-04f,
+3.459063713e-04f, 3.466297148e-04f, 3.473524118e-04f, 3.480744611e-04f, 3.487958614e-04f, 3.495166115e-04f, 3.502367102e-04f, 3.509561564e-04f, 3.516749488e-04f, 3.523930862e-04f,
+3.531105674e-04f, 3.538273912e-04f, 3.545435565e-04f, 3.552590621e-04f, 3.559739066e-04f, 3.566880890e-04f, 3.574016081e-04f, 3.581144626e-04f, 3.588266515e-04f, 3.595381734e-04f,
+3.602490272e-04f, 3.609592117e-04f, 3.616687258e-04f, 3.623775682e-04f, 3.630857378e-04f, 3.637932333e-04f, 3.645000537e-04f, 3.652061978e-04f, 3.659116642e-04f, 3.666164520e-04f,
+3.673205598e-04f, 3.680239866e-04f, 3.687267312e-04f, 3.694287923e-04f, 3.701301689e-04f, 3.708308597e-04f, 3.715308637e-04f, 3.722301795e-04f, 3.729288061e-04f, 3.736267423e-04f,
+3.743239869e-04f, 3.750205388e-04f, 3.757163968e-04f, 3.764115598e-04f, 3.771060266e-04f, 3.777997960e-04f, 3.784928669e-04f, 3.791852382e-04f, 3.798769086e-04f, 3.805678771e-04f,
+3.812581424e-04f, 3.819477036e-04f, 3.826365593e-04f, 3.833247084e-04f, 3.840121499e-04f, 3.846988825e-04f, 3.853849052e-04f, 3.860702167e-04f, 3.867548160e-04f, 3.874387019e-04f,
+3.881218733e-04f, 3.888043290e-04f, 3.894860679e-04f, 3.901670889e-04f, 3.908473908e-04f, 3.915269726e-04f, 3.922058330e-04f, 3.928839710e-04f, 3.935613854e-04f, 3.942380752e-04f,
+3.949140391e-04f, 3.955892761e-04f, 3.962637851e-04f, 3.969375649e-04f, 3.976106144e-04f, 3.982829324e-04f, 3.989545180e-04f, 3.996253700e-04f, 4.002954872e-04f, 4.009648685e-04f,
+4.016335129e-04f, 4.023014192e-04f, 4.029685863e-04f, 4.036350132e-04f, 4.043006986e-04f, 4.049656416e-04f, 4.056298410e-04f, 4.062932957e-04f, 4.069560046e-04f, 4.076179666e-04f,
+4.082791807e-04f, 4.089396457e-04f, 4.095993605e-04f, 4.102583240e-04f, 4.109165352e-04f, 4.115739930e-04f, 4.122306962e-04f, 4.128866438e-04f, 4.135418348e-04f, 4.141962679e-04f,
+4.148499422e-04f, 4.155028565e-04f, 4.161550099e-04f, 4.168064011e-04f, 4.174570292e-04f, 4.181068930e-04f, 4.187559915e-04f, 4.194043235e-04f, 4.200518882e-04f, 4.206986843e-04f,
+4.213447107e-04f, 4.219899666e-04f, 4.226344506e-04f, 4.232781619e-04f, 4.239210994e-04f, 4.245632619e-04f, 4.252046484e-04f, 4.258452579e-04f, 4.264850892e-04f, 4.271241415e-04f,
+4.277624135e-04f, 4.283999043e-04f, 4.290366127e-04f, 4.296725378e-04f, 4.303076785e-04f, 4.309420338e-04f, 4.315756025e-04f, 4.322083837e-04f, 4.328403763e-04f, 4.334715793e-04f,
+4.341019917e-04f, 4.347316123e-04f, 4.353604402e-04f, 4.359884743e-04f, 4.366157136e-04f, 4.372421570e-04f, 4.378678036e-04f, 4.384926523e-04f, 4.391167020e-04f, 4.397399518e-04f,
+4.403624006e-04f, 4.409840474e-04f, 4.416048912e-04f, 4.422249309e-04f, 4.428441656e-04f, 4.434625942e-04f, 4.440802156e-04f, 4.446970290e-04f, 4.453130332e-04f, 4.459282273e-04f,
+4.465426102e-04f, 4.471561809e-04f, 4.477689385e-04f, 4.483808819e-04f, 4.489920102e-04f, 4.496023222e-04f, 4.502118171e-04f, 4.508204937e-04f, 4.514283512e-04f, 4.520353885e-04f,
+4.526416046e-04f, 4.532469986e-04f, 4.538515693e-04f, 4.544553160e-04f, 4.550582374e-04f, 4.556603328e-04f, 4.562616010e-04f, 4.568620411e-04f, 4.574616521e-04f, 4.580604331e-04f,
+4.586583830e-04f, 4.592555008e-04f, 4.598517856e-04f, 4.604472365e-04f, 4.610418524e-04f, 4.616356323e-04f, 4.622285754e-04f, 4.628206805e-04f, 4.634119469e-04f, 4.640023733e-04f,
+4.645919591e-04f, 4.651807030e-04f, 4.657686043e-04f, 4.663556619e-04f, 4.669418749e-04f, 4.675272422e-04f, 4.681117631e-04f, 4.686954364e-04f, 4.692782613e-04f, 4.698602368e-04f,
+4.704413619e-04f, 4.710216357e-04f, 4.716010573e-04f, 4.721796256e-04f, 4.727573398e-04f, 4.733341990e-04f, 4.739102021e-04f, 4.744853482e-04f, 4.750596365e-04f, 4.756330659e-04f,
+4.762056355e-04f, 4.767773444e-04f, 4.773481917e-04f, 4.779181764e-04f, 4.784872975e-04f, 4.790555543e-04f, 4.796229457e-04f, 4.801894708e-04f, 4.807551288e-04f, 4.813199186e-04f,
+4.818838393e-04f, 4.824468901e-04f, 4.830090701e-04f, 4.835703782e-04f, 4.841308136e-04f, 4.846903754e-04f, 4.852490627e-04f, 4.858068745e-04f, 4.863638100e-04f, 4.869198683e-04f,
+4.874750484e-04f, 4.880293494e-04f, 4.885827705e-04f, 4.891353107e-04f, 4.896869692e-04f, 4.902377450e-04f, 4.907876373e-04f, 4.913366452e-04f, 4.918847677e-04f, 4.924320040e-04f,
+4.929783532e-04f, 4.935238144e-04f, 4.940683867e-04f, 4.946120693e-04f, 4.951548612e-04f, 4.956967616e-04f, 4.962377696e-04f, 4.967778843e-04f, 4.973171049e-04f, 4.978554305e-04f,
+4.983928601e-04f, 4.989293930e-04f, 4.994650282e-04f, 4.999997650e-04f, 5.005336024e-04f, 5.010665395e-04f, 5.015985755e-04f, 5.021297096e-04f, 5.026599409e-04f, 5.031892685e-04f,
+5.037176915e-04f, 5.042452092e-04f, 5.047718206e-04f, 5.052975250e-04f, 5.058223214e-04f, 5.063462090e-04f, 5.068691870e-04f, 5.073912545e-04f, 5.079124107e-04f, 5.084326548e-04f,
+5.089519858e-04f, 5.094704030e-04f, 5.099879055e-04f, 5.105044925e-04f, 5.110201632e-04f, 5.115349167e-04f, 5.120487522e-04f, 5.125616688e-04f, 5.130736658e-04f, 5.135847423e-04f,
+5.140948975e-04f, 5.146041306e-04f, 5.151124407e-04f, 5.156198271e-04f, 5.161262889e-04f, 5.166318252e-04f, 5.171364354e-04f, 5.176401185e-04f, 5.181428738e-04f, 5.186447005e-04f,
+5.191455977e-04f, 5.196455647e-04f, 5.201446006e-04f, 5.206427046e-04f, 5.211398760e-04f, 5.216361139e-04f, 5.221314176e-04f, 5.226257862e-04f, 5.231192189e-04f, 5.236117151e-04f,
+5.241032738e-04f, 5.245938943e-04f, 5.250835757e-04f, 5.255723174e-04f, 5.260601186e-04f, 5.265469784e-04f, 5.270328960e-04f, 5.275178708e-04f, 5.280019018e-04f, 5.284849884e-04f,
+5.289671298e-04f, 5.294483251e-04f, 5.299285737e-04f, 5.304078747e-04f, 5.308862274e-04f, 5.313636311e-04f, 5.318400849e-04f, 5.323155881e-04f, 5.327901399e-04f, 5.332637396e-04f,
+5.337363865e-04f, 5.342080797e-04f, 5.346788185e-04f, 5.351486022e-04f, 5.356174301e-04f, 5.360853012e-04f, 5.365522151e-04f, 5.370181707e-04f, 5.374831676e-04f, 5.379472048e-04f,
+5.384102816e-04f, 5.388723974e-04f, 5.393335514e-04f, 5.397937428e-04f, 5.402529709e-04f, 5.407112350e-04f, 5.411685344e-04f, 5.416248683e-04f, 5.420802360e-04f, 5.425346367e-04f,
+5.429880699e-04f, 5.434405346e-04f, 5.438920303e-04f, 5.443425561e-04f, 5.447921115e-04f, 5.452406956e-04f, 5.456883078e-04f, 5.461349473e-04f, 5.465806135e-04f, 5.470253056e-04f,
+5.474690229e-04f, 5.479117647e-04f, 5.483535304e-04f, 5.487943192e-04f, 5.492341304e-04f, 5.496729634e-04f, 5.501108173e-04f, 5.505476917e-04f, 5.509835856e-04f, 5.514184985e-04f,
+5.518524297e-04f, 5.522853785e-04f, 5.527173442e-04f, 5.531483261e-04f, 5.535783236e-04f, 5.540073359e-04f, 5.544353624e-04f, 5.548624024e-04f, 5.552884552e-04f, 5.557135202e-04f,
+5.561375967e-04f, 5.565606840e-04f, 5.569827815e-04f, 5.574038884e-04f, 5.578240042e-04f, 5.582431282e-04f, 5.586612597e-04f, 5.590783980e-04f, 5.594945425e-04f, 5.599096926e-04f,
+5.603238475e-04f, 5.607370067e-04f, 5.611491694e-04f, 5.615603352e-04f, 5.619705032e-04f, 5.623796728e-04f, 5.627878435e-04f, 5.631950145e-04f, 5.636011853e-04f, 5.640063551e-04f,
+5.644105234e-04f, 5.648136896e-04f, 5.652158529e-04f, 5.656170128e-04f, 5.660171687e-04f, 5.664163198e-04f, 5.668144657e-04f, 5.672116056e-04f, 5.676077389e-04f, 5.680028651e-04f,
+5.683969835e-04f, 5.687900934e-04f, 5.691821944e-04f, 5.695732857e-04f, 5.699633668e-04f, 5.703524370e-04f, 5.707404958e-04f, 5.711275425e-04f, 5.715135765e-04f, 5.718985973e-04f,
+5.722826042e-04f, 5.726655967e-04f, 5.730475741e-04f, 5.734285358e-04f, 5.738084813e-04f, 5.741874100e-04f, 5.745653212e-04f, 5.749422145e-04f, 5.753180891e-04f, 5.756929446e-04f,
+5.760667803e-04f, 5.764395957e-04f, 5.768113901e-04f, 5.771821631e-04f, 5.775519140e-04f, 5.779206422e-04f, 5.782883473e-04f, 5.786550286e-04f, 5.790206855e-04f, 5.793853175e-04f,
+5.797489241e-04f, 5.801115046e-04f, 5.804730585e-04f, 5.808335853e-04f, 5.811930844e-04f, 5.815515552e-04f, 5.819089972e-04f, 5.822654099e-04f, 5.826207926e-04f, 5.829751448e-04f,
+5.833284661e-04f, 5.836807558e-04f, 5.840320135e-04f, 5.843822385e-04f, 5.847314303e-04f, 5.850795884e-04f, 5.854267123e-04f, 5.857728015e-04f, 5.861178553e-04f, 5.864618733e-04f,
+5.868048549e-04f, 5.871467997e-04f, 5.874877071e-04f, 5.878275765e-04f, 5.881664075e-04f, 5.885041996e-04f, 5.888409521e-04f, 5.891766647e-04f, 5.895113368e-04f, 5.898449678e-04f,
+5.901775574e-04f, 5.905091049e-04f, 5.908396099e-04f, 5.911690718e-04f, 5.914974902e-04f, 5.918248646e-04f, 5.921511944e-04f, 5.924764792e-04f, 5.928007185e-04f, 5.931239117e-04f,
+5.934460585e-04f, 5.937671582e-04f, 5.940872105e-04f, 5.944062148e-04f, 5.947241707e-04f, 5.950410776e-04f, 5.953569351e-04f, 5.956717428e-04f, 5.959855001e-04f, 5.962982065e-04f,
+5.966098617e-04f, 5.969204650e-04f, 5.972300161e-04f, 5.975385145e-04f, 5.978459598e-04f, 5.981523514e-04f, 5.984576889e-04f, 5.987619718e-04f, 5.990651997e-04f, 5.993673722e-04f,
+5.996684888e-04f, 5.999685489e-04f, 6.002675523e-04f, 6.005654983e-04f, 6.008623867e-04f, 6.011582169e-04f, 6.014529885e-04f, 6.017467011e-04f, 6.020393541e-04f, 6.023309473e-04f,
+6.026214801e-04f, 6.029109521e-04f, 6.031993630e-04f, 6.034867121e-04f, 6.037729992e-04f, 6.040582238e-04f, 6.043423855e-04f, 6.046254839e-04f, 6.049075184e-04f, 6.051884888e-04f,
+6.054683946e-04f, 6.057472354e-04f, 6.060250108e-04f, 6.063017204e-04f, 6.065773637e-04f, 6.068519403e-04f, 6.071254500e-04f, 6.073978921e-04f, 6.076692664e-04f, 6.079395725e-04f,
+6.082088099e-04f, 6.084769782e-04f, 6.087440771e-04f, 6.090101062e-04f, 6.092750651e-04f, 6.095389533e-04f, 6.098017706e-04f, 6.100635165e-04f, 6.103241906e-04f, 6.105837926e-04f,
+6.108423220e-04f, 6.110997786e-04f, 6.113561619e-04f, 6.116114715e-04f, 6.118657071e-04f, 6.121188684e-04f, 6.123709549e-04f, 6.126219662e-04f, 6.128719021e-04f, 6.131207622e-04f,
+6.133685460e-04f, 6.136152533e-04f, 6.138608837e-04f, 6.141054368e-04f, 6.143489123e-04f, 6.145913098e-04f, 6.148326290e-04f, 6.150728695e-04f, 6.153120311e-04f, 6.155501132e-04f,
+6.157871157e-04f, 6.160230381e-04f, 6.162578802e-04f, 6.164916416e-04f, 6.167243219e-04f, 6.169559208e-04f, 6.171864381e-04f, 6.174158733e-04f, 6.176442262e-04f, 6.178714964e-04f,
+6.180976836e-04f, 6.183227875e-04f, 6.185468078e-04f, 6.187697441e-04f, 6.189915961e-04f, 6.192123635e-04f, 6.194320461e-04f, 6.196506435e-04f, 6.198681553e-04f, 6.200845814e-04f,
+6.202999213e-04f, 6.205141749e-04f, 6.207273417e-04f, 6.209394215e-04f, 6.211504140e-04f, 6.213603189e-04f, 6.215691359e-04f, 6.217768647e-04f, 6.219835051e-04f, 6.221890567e-04f,
+6.223935193e-04f, 6.225968925e-04f, 6.227991762e-04f, 6.230003700e-04f, 6.232004736e-04f, 6.233994868e-04f, 6.235974093e-04f, 6.237942408e-04f, 6.239899811e-04f, 6.241846299e-04f,
+6.243781869e-04f, 6.245706519e-04f, 6.247620246e-04f, 6.249523047e-04f, 6.251414920e-04f, 6.253295863e-04f, 6.255165872e-04f, 6.257024946e-04f, 6.258873081e-04f, 6.260710276e-04f,
+6.262536527e-04f, 6.264351833e-04f, 6.266156191e-04f, 6.267949599e-04f, 6.269732053e-04f, 6.271503553e-04f, 6.273264095e-04f, 6.275013677e-04f, 6.276752297e-04f, 6.278479953e-04f,
+6.280196642e-04f, 6.281902362e-04f, 6.283597111e-04f, 6.285280887e-04f, 6.286953687e-04f, 6.288615509e-04f, 6.290266352e-04f, 6.291906212e-04f, 6.293535088e-04f, 6.295152978e-04f,
+6.296759880e-04f, 6.298355791e-04f, 6.299940710e-04f, 6.301514635e-04f, 6.303077563e-04f, 6.304629493e-04f, 6.306170423e-04f, 6.307700350e-04f, 6.309219273e-04f, 6.310727189e-04f,
+6.312224098e-04f, 6.313709997e-04f, 6.315184884e-04f, 6.316648758e-04f, 6.318101616e-04f, 6.319543458e-04f, 6.320974280e-04f, 6.322394082e-04f, 6.323802861e-04f, 6.325200616e-04f,
+6.326587345e-04f, 6.327963047e-04f, 6.329327720e-04f, 6.330681362e-04f, 6.332023972e-04f, 6.333355547e-04f, 6.334676088e-04f, 6.335985591e-04f, 6.337284055e-04f, 6.338571479e-04f,
+6.339847862e-04f, 6.341113201e-04f, 6.342367496e-04f, 6.343610745e-04f, 6.344842946e-04f, 6.346064099e-04f, 6.347274201e-04f, 6.348473251e-04f, 6.349661249e-04f, 6.350838192e-04f,
+6.352004080e-04f, 6.353158911e-04f, 6.354302683e-04f, 6.355435396e-04f, 6.356557049e-04f, 6.357667639e-04f, 6.358767167e-04f, 6.359855630e-04f, 6.360933028e-04f, 6.361999360e-04f,
+6.363054623e-04f, 6.364098818e-04f, 6.365131944e-04f, 6.366153998e-04f, 6.367164980e-04f, 6.368164890e-04f, 6.369153725e-04f, 6.370131486e-04f, 6.371098171e-04f, 6.372053778e-04f,
+6.372998308e-04f, 6.373931760e-04f, 6.374854132e-04f, 6.375765423e-04f, 6.376665634e-04f, 6.377554762e-04f, 6.378432807e-04f, 6.379299769e-04f, 6.380155646e-04f, 6.381000438e-04f,
+6.381834144e-04f, 6.382656763e-04f, 6.383468295e-04f, 6.384268739e-04f, 6.385058094e-04f, 6.385836360e-04f, 6.386603536e-04f, 6.387359621e-04f, 6.388104616e-04f, 6.388838518e-04f,
+6.389561329e-04f, 6.390273047e-04f, 6.390973671e-04f, 6.391663202e-04f, 6.392341639e-04f, 6.393008981e-04f, 6.393665228e-04f, 6.394310379e-04f, 6.394944435e-04f, 6.395567394e-04f,
+6.396179257e-04f, 6.396780023e-04f, 6.397369692e-04f, 6.397948264e-04f, 6.398515737e-04f, 6.399072113e-04f, 6.399617390e-04f, 6.400151569e-04f, 6.400674649e-04f, 6.401186631e-04f,
+6.401687513e-04f, 6.402177297e-04f, 6.402655981e-04f, 6.403123566e-04f, 6.403580051e-04f, 6.404025437e-04f, 6.404459724e-04f, 6.404882910e-04f, 6.405294998e-04f, 6.405695986e-04f,
+6.406085874e-04f, 6.406464663e-04f, 6.406832353e-04f, 6.407188943e-04f, 6.407534434e-04f, 6.407868827e-04f, 6.408192120e-04f, 6.408504315e-04f, 6.408805411e-04f, 6.409095409e-04f,
+6.409374308e-04f, 6.409642110e-04f, 6.409898815e-04f, 6.410144422e-04f, 6.410378932e-04f, 6.410602346e-04f, 6.410814663e-04f, 6.411015885e-04f, 6.411206011e-04f, 6.411385041e-04f,
+6.411552977e-04f, 6.411709819e-04f, 6.411855567e-04f, 6.411990221e-04f, 6.412113783e-04f, 6.412226252e-04f, 6.412327630e-04f, 6.412417916e-04f, 6.412497111e-04f, 6.412565217e-04f,
+6.412622233e-04f, 6.412668160e-04f, 6.412702999e-04f, 6.412726750e-04f, 6.412739415e-04f, 6.412740994e-04f, 6.412731487e-04f, 6.412710895e-04f, 6.412679219e-04f, 6.412636461e-04f,
+6.412582620e-04f, 6.412517697e-04f, 6.412441694e-04f, 6.412354611e-04f, 6.412256450e-04f, 6.412147210e-04f, 6.412026893e-04f, 6.411895500e-04f, 6.411753032e-04f, 6.411599489e-04f,
+6.411434873e-04f, 6.411259185e-04f, 6.411072426e-04f, 6.410874597e-04f, 6.410665699e-04f, 6.410445732e-04f, 6.410214699e-04f, 6.409972600e-04f, 6.409719437e-04f, 6.409455210e-04f,
+6.409179920e-04f, 6.408893570e-04f, 6.408596160e-04f, 6.408287691e-04f, 6.407968165e-04f, 6.407637583e-04f, 6.407295946e-04f, 6.406943256e-04f, 6.406579513e-04f, 6.406204720e-04f,
+6.405818878e-04f, 6.405421987e-04f, 6.405014050e-04f, 6.404595068e-04f, 6.404165042e-04f, 6.403723974e-04f, 6.403271866e-04f, 6.402808718e-04f, 6.402334532e-04f, 6.401849310e-04f,
+6.401353054e-04f, 6.400845764e-04f, 6.400327444e-04f, 6.399798093e-04f, 6.399257715e-04f, 6.398706309e-04f, 6.398143880e-04f, 6.397570427e-04f, 6.396985952e-04f, 6.396390458e-04f,
+6.395783946e-04f, 6.395166418e-04f, 6.394537876e-04f, 6.393898321e-04f, 6.393247756e-04f, 6.392586181e-04f, 6.391913600e-04f, 6.391230014e-04f, 6.390535424e-04f, 6.389829833e-04f,
+6.389113243e-04f, 6.388385656e-04f, 6.387647073e-04f, 6.386897497e-04f, 6.386136929e-04f, 6.385365373e-04f, 6.384582828e-04f, 6.383789299e-04f, 6.382984787e-04f, 6.382169294e-04f,
+6.381342822e-04f, 6.380505373e-04f, 6.379656949e-04f, 6.378797554e-04f, 6.377927188e-04f, 6.377045855e-04f, 6.376153555e-04f, 6.375250293e-04f, 6.374336069e-04f, 6.373410886e-04f,
+6.372474747e-04f, 6.371527654e-04f, 6.370569609e-04f, 6.369600615e-04f, 6.368620674e-04f, 6.367629788e-04f, 6.366627960e-04f, 6.365615192e-04f, 6.364591487e-04f, 6.363556847e-04f,
+6.362511275e-04f, 6.361454773e-04f, 6.360387344e-04f, 6.359308991e-04f, 6.358219715e-04f, 6.357119520e-04f, 6.356008409e-04f, 6.354886383e-04f, 6.353753445e-04f, 6.352609599e-04f,
+6.351454847e-04f, 6.350289191e-04f, 6.349112634e-04f, 6.347925180e-04f, 6.346726831e-04f, 6.345517589e-04f, 6.344297457e-04f, 6.343066439e-04f, 6.341824537e-04f, 6.340571754e-04f,
+6.339308092e-04f, 6.338033556e-04f, 6.336748147e-04f, 6.335451868e-04f, 6.334144724e-04f, 6.332826715e-04f, 6.331497847e-04f, 6.330158121e-04f, 6.328807540e-04f, 6.327446108e-04f,
+6.326073828e-04f, 6.324690702e-04f, 6.323296735e-04f, 6.321891928e-04f, 6.320476286e-04f, 6.319049811e-04f, 6.317612506e-04f, 6.316164375e-04f, 6.314705421e-04f, 6.313235647e-04f,
+6.311755056e-04f, 6.310263653e-04f, 6.308761439e-04f, 6.307248418e-04f, 6.305724594e-04f, 6.304189969e-04f, 6.302644549e-04f, 6.301088334e-04f, 6.299521330e-04f, 6.297943539e-04f,
+6.296354966e-04f, 6.294755612e-04f, 6.293145483e-04f, 6.291524581e-04f, 6.289892909e-04f, 6.288250473e-04f, 6.286597274e-04f, 6.284933316e-04f, 6.283258604e-04f, 6.281573140e-04f,
+6.279876929e-04f, 6.278169973e-04f, 6.276452278e-04f, 6.274723845e-04f, 6.272984680e-04f, 6.271234785e-04f, 6.269474165e-04f, 6.267702822e-04f, 6.265920762e-04f, 6.264127988e-04f,
+6.262324503e-04f, 6.260510311e-04f, 6.258685417e-04f, 6.256849823e-04f, 6.255003535e-04f, 6.253146556e-04f, 6.251278889e-04f, 6.249400539e-04f, 6.247511509e-04f, 6.245611804e-04f,
+6.243701428e-04f, 6.241780384e-04f, 6.239848677e-04f, 6.237906311e-04f, 6.235953289e-04f, 6.233989616e-04f, 6.232015296e-04f, 6.230030333e-04f, 6.228034731e-04f, 6.226028495e-04f,
+6.224011628e-04f, 6.221984134e-04f, 6.219946019e-04f, 6.217897285e-04f, 6.215837938e-04f, 6.213767981e-04f, 6.211687419e-04f, 6.209596257e-04f, 6.207494498e-04f, 6.205382146e-04f,
+6.203259207e-04f, 6.201125684e-04f, 6.198981582e-04f, 6.196826906e-04f, 6.194661659e-04f, 6.192485846e-04f, 6.190299472e-04f, 6.188102541e-04f, 6.185895057e-04f, 6.183677026e-04f,
+6.181448451e-04f, 6.179209338e-04f, 6.176959690e-04f, 6.174699512e-04f, 6.172428810e-04f, 6.170147587e-04f, 6.167855848e-04f, 6.165553598e-04f, 6.163240841e-04f, 6.160917582e-04f,
+6.158583827e-04f, 6.156239579e-04f, 6.153884844e-04f, 6.151519625e-04f, 6.149143929e-04f, 6.146757759e-04f, 6.144361121e-04f, 6.141954019e-04f, 6.139536458e-04f, 6.137108443e-04f,
+6.134669980e-04f, 6.132221072e-04f, 6.129761725e-04f, 6.127291943e-04f, 6.124811733e-04f, 6.122321098e-04f, 6.119820043e-04f, 6.117308575e-04f, 6.114786696e-04f, 6.112254414e-04f,
+6.109711733e-04f, 6.107158657e-04f, 6.104595192e-04f, 6.102021344e-04f, 6.099437116e-04f, 6.096842515e-04f, 6.094237546e-04f, 6.091622213e-04f, 6.088996522e-04f, 6.086360479e-04f,
+6.083714087e-04f, 6.081057354e-04f, 6.078390283e-04f, 6.075712880e-04f, 6.073025151e-04f, 6.070327101e-04f, 6.067618735e-04f, 6.064900059e-04f, 6.062171077e-04f, 6.059431796e-04f,
+6.056682221e-04f, 6.053922357e-04f, 6.051152209e-04f, 6.048371784e-04f, 6.045581086e-04f, 6.042780121e-04f, 6.039968895e-04f, 6.037147412e-04f, 6.034315680e-04f, 6.031473703e-04f,
+6.028621486e-04f, 6.025759037e-04f, 6.022886359e-04f, 6.020003459e-04f, 6.017110342e-04f, 6.014207014e-04f, 6.011293481e-04f, 6.008369749e-04f, 6.005435822e-04f, 6.002491708e-04f,
+5.999537411e-04f, 5.996572938e-04f, 5.993598294e-04f, 5.990613485e-04f, 5.987618517e-04f, 5.984613395e-04f, 5.981598127e-04f, 5.978572716e-04f, 5.975537170e-04f, 5.972491495e-04f,
+5.969435696e-04f, 5.966369778e-04f, 5.963293749e-04f, 5.960207614e-04f, 5.957111380e-04f, 5.954005051e-04f, 5.950888635e-04f, 5.947762136e-04f, 5.944625563e-04f, 5.941478919e-04f,
+5.938322212e-04f, 5.935155448e-04f, 5.931978632e-04f, 5.928791772e-04f, 5.925594872e-04f, 5.922387940e-04f, 5.919170981e-04f, 5.915944002e-04f, 5.912707008e-04f, 5.909460007e-04f,
+5.906203005e-04f, 5.902936007e-04f, 5.899659020e-04f, 5.896372051e-04f, 5.893075105e-04f, 5.889768190e-04f, 5.886451311e-04f, 5.883124475e-04f, 5.879787688e-04f, 5.876440956e-04f,
+5.873084287e-04f, 5.869717687e-04f, 5.866341161e-04f, 5.862954717e-04f, 5.859558361e-04f, 5.856152100e-04f, 5.852735940e-04f, 5.849309887e-04f, 5.845873949e-04f, 5.842428132e-04f,
+5.838972442e-04f, 5.835506886e-04f, 5.832031471e-04f, 5.828546203e-04f, 5.825051089e-04f, 5.821546136e-04f, 5.818031351e-04f, 5.814506739e-04f, 5.810972309e-04f, 5.807428066e-04f,
+5.803874018e-04f, 5.800310171e-04f, 5.796736532e-04f, 5.793153108e-04f, 5.789559905e-04f, 5.785956932e-04f, 5.782344193e-04f, 5.778721697e-04f, 5.775089450e-04f, 5.771447460e-04f,
+5.767795732e-04f, 5.764134275e-04f, 5.760463094e-04f, 5.756782198e-04f, 5.753091592e-04f, 5.749391285e-04f, 5.745681283e-04f, 5.741961592e-04f, 5.738232221e-04f, 5.734493177e-04f,
+5.730744465e-04f, 5.726986095e-04f, 5.723218071e-04f, 5.719440403e-04f, 5.715653096e-04f, 5.711856159e-04f, 5.708049598e-04f, 5.704233421e-04f, 5.700407634e-04f, 5.696572246e-04f,
+5.692727262e-04f, 5.688872692e-04f, 5.685008541e-04f, 5.681134817e-04f, 5.677251528e-04f, 5.673358681e-04f, 5.669456282e-04f, 5.665544341e-04f, 5.661622863e-04f, 5.657691857e-04f,
+5.653751330e-04f, 5.649801289e-04f, 5.645841742e-04f, 5.641872696e-04f, 5.637894158e-04f, 5.633906137e-04f, 5.629908639e-04f, 5.625901673e-04f, 5.621885245e-04f, 5.617859364e-04f,
+5.613824037e-04f, 5.609779271e-04f, 5.605725074e-04f, 5.601661455e-04f, 5.597588419e-04f, 5.593505976e-04f, 5.589414132e-04f, 5.585312896e-04f, 5.581202275e-04f, 5.577082277e-04f,
+5.572952910e-04f, 5.568814181e-04f, 5.564666098e-04f, 5.560508670e-04f, 5.556341903e-04f, 5.552165805e-04f, 5.547980385e-04f, 5.543785650e-04f, 5.539581609e-04f, 5.535368268e-04f,
+5.531145636e-04f, 5.526913721e-04f, 5.522672531e-04f, 5.518422074e-04f, 5.514162357e-04f, 5.509893389e-04f, 5.505615177e-04f, 5.501327730e-04f, 5.497031056e-04f, 5.492725162e-04f,
+5.488410057e-04f, 5.484085749e-04f, 5.479752246e-04f, 5.475409556e-04f, 5.471057687e-04f, 5.466696647e-04f, 5.462326445e-04f, 5.457947088e-04f, 5.453558585e-04f, 5.449160943e-04f,
+5.444754172e-04f, 5.440338279e-04f, 5.435913273e-04f, 5.431479161e-04f, 5.427035953e-04f, 5.422583656e-04f, 5.418122279e-04f, 5.413651829e-04f, 5.409172316e-04f, 5.404683748e-04f,
+5.400186132e-04f, 5.395679478e-04f, 5.391163794e-04f, 5.386639087e-04f, 5.382105368e-04f, 5.377562643e-04f, 5.373010922e-04f, 5.368450213e-04f, 5.363880524e-04f, 5.359301864e-04f,
+5.354714241e-04f, 5.350117665e-04f, 5.345512143e-04f, 5.340897683e-04f, 5.336274296e-04f, 5.331641988e-04f, 5.327000770e-04f, 5.322350649e-04f, 5.317691633e-04f, 5.313023733e-04f,
+5.308346955e-04f, 5.303661310e-04f, 5.298966805e-04f, 5.294263450e-04f, 5.289551252e-04f, 5.284830222e-04f, 5.280100367e-04f, 5.275361696e-04f, 5.270614219e-04f, 5.265857943e-04f,
+5.261092878e-04f, 5.256319032e-04f, 5.251536415e-04f, 5.246745035e-04f, 5.241944901e-04f, 5.237136022e-04f, 5.232318406e-04f, 5.227492063e-04f, 5.222657002e-04f, 5.217813232e-04f,
+5.212960761e-04f, 5.208099598e-04f, 5.203229753e-04f, 5.198351235e-04f, 5.193464051e-04f, 5.188568213e-04f, 5.183663727e-04f, 5.178750605e-04f, 5.173828853e-04f, 5.168898483e-04f,
+5.163959502e-04f, 5.159011921e-04f, 5.154055747e-04f, 5.149090990e-04f, 5.144117660e-04f, 5.139135765e-04f, 5.134145315e-04f, 5.129146319e-04f, 5.124138785e-04f, 5.119122724e-04f,
+5.114098145e-04f, 5.109065056e-04f, 5.104023467e-04f, 5.098973387e-04f, 5.093914827e-04f, 5.088847793e-04f, 5.083772298e-04f, 5.078688348e-04f, 5.073595955e-04f, 5.068495126e-04f,
+5.063385873e-04f, 5.058268203e-04f, 5.053142127e-04f, 5.048007654e-04f, 5.042864792e-04f, 5.037713553e-04f, 5.032553945e-04f, 5.027385977e-04f, 5.022209660e-04f, 5.017025002e-04f,
+5.011832013e-04f, 5.006630703e-04f, 5.001421081e-04f, 4.996203157e-04f, 4.990976940e-04f, 4.985742440e-04f, 4.980499666e-04f, 4.975248629e-04f, 4.969989338e-04f, 4.964721801e-04f,
+4.959446030e-04f, 4.954162034e-04f, 4.948869822e-04f, 4.943569404e-04f, 4.938260789e-04f, 4.932943989e-04f, 4.927619011e-04f, 4.922285866e-04f, 4.916944564e-04f, 4.911595115e-04f,
+4.906237528e-04f, 4.900871813e-04f, 4.895497980e-04f, 4.890116038e-04f, 4.884725999e-04f, 4.879327870e-04f, 4.873921663e-04f, 4.868507387e-04f, 4.863085052e-04f, 4.857654668e-04f,
+4.852216245e-04f, 4.846769793e-04f, 4.841315321e-04f, 4.835852841e-04f, 4.830382361e-04f, 4.824903891e-04f, 4.819417442e-04f, 4.813923024e-04f, 4.808420647e-04f, 4.802910321e-04f,
+4.797392055e-04f, 4.791865860e-04f, 4.786331746e-04f, 4.780789723e-04f, 4.775239801e-04f, 4.769681991e-04f, 4.764116302e-04f, 4.758542744e-04f, 4.752961328e-04f, 4.747372064e-04f,
+4.741774962e-04f, 4.736170032e-04f, 4.730557285e-04f, 4.724936730e-04f, 4.719308378e-04f, 4.713672240e-04f, 4.708028325e-04f, 4.702376643e-04f, 4.696717205e-04f, 4.691050022e-04f,
+4.685375103e-04f, 4.679692459e-04f, 4.674002100e-04f, 4.668304037e-04f, 4.662598280e-04f, 4.656884839e-04f, 4.651163724e-04f, 4.645434947e-04f, 4.639698517e-04f, 4.633954446e-04f,
+4.628202742e-04f, 4.622443417e-04f, 4.616676482e-04f, 4.610901946e-04f, 4.605119821e-04f, 4.599330116e-04f, 4.593532842e-04f, 4.587728010e-04f, 4.581915631e-04f, 4.576095714e-04f,
+4.570268270e-04f, 4.564433311e-04f, 4.558590846e-04f, 4.552740886e-04f, 4.546883442e-04f, 4.541018525e-04f, 4.535146144e-04f, 4.529266311e-04f, 4.523379036e-04f, 4.517484330e-04f,
+4.511582204e-04f, 4.505672668e-04f, 4.499755734e-04f, 4.493831411e-04f, 4.487899710e-04f, 4.481960643e-04f, 4.476014220e-04f, 4.470060452e-04f, 4.464099349e-04f, 4.458130922e-04f,
+4.452155183e-04f, 4.446172141e-04f, 4.440181809e-04f, 4.434184195e-04f, 4.428179313e-04f, 4.422167172e-04f, 4.416147783e-04f, 4.410121157e-04f, 4.404087305e-04f, 4.398046237e-04f,
+4.391997966e-04f, 4.385942502e-04f, 4.379879855e-04f, 4.373810037e-04f, 4.367733058e-04f, 4.361648930e-04f, 4.355557664e-04f, 4.349459270e-04f, 4.343353759e-04f, 4.337241144e-04f,
+4.331121434e-04f, 4.324994641e-04f, 4.318860775e-04f, 4.312719849e-04f, 4.306571872e-04f, 4.300416856e-04f, 4.294254813e-04f, 4.288085753e-04f, 4.281909687e-04f, 4.275726626e-04f,
+4.269536583e-04f, 4.263339567e-04f, 4.257135590e-04f, 4.250924663e-04f, 4.244706798e-04f, 4.238482005e-04f, 4.232250297e-04f, 4.226011683e-04f, 4.219766175e-04f, 4.213513785e-04f,
+4.207254524e-04f, 4.200988403e-04f, 4.194715433e-04f, 4.188435626e-04f, 4.182148993e-04f, 4.175855546e-04f, 4.169555294e-04f, 4.163248251e-04f, 4.156934428e-04f, 4.150613834e-04f,
+4.144286483e-04f, 4.137952386e-04f, 4.131611553e-04f, 4.125263996e-04f, 4.118909728e-04f, 4.112548758e-04f, 4.106181099e-04f, 4.099806761e-04f, 4.093425758e-04f, 4.087038099e-04f,
+4.080643796e-04f, 4.074242862e-04f, 4.067835307e-04f, 4.061421143e-04f, 4.055000381e-04f, 4.048573033e-04f, 4.042139111e-04f, 4.035698626e-04f, 4.029251589e-04f, 4.022798013e-04f,
+4.016337909e-04f, 4.009871288e-04f, 4.003398162e-04f, 3.996918543e-04f, 3.990432442e-04f, 3.983939871e-04f, 3.977440841e-04f, 3.970935365e-04f, 3.964423454e-04f, 3.957905119e-04f,
+3.951380373e-04f, 3.944849227e-04f, 3.938311692e-04f, 3.931767781e-04f, 3.925217505e-04f, 3.918660876e-04f, 3.912097906e-04f, 3.905528606e-04f, 3.898952988e-04f, 3.892371064e-04f,
+3.885782846e-04f, 3.879188346e-04f, 3.872587575e-04f, 3.865980546e-04f, 3.859367269e-04f, 3.852747758e-04f, 3.846122023e-04f, 3.839490077e-04f, 3.832851932e-04f, 3.826207598e-04f,
+3.819557090e-04f, 3.812900417e-04f, 3.806237593e-04f, 3.799568628e-04f, 3.792893536e-04f, 3.786212328e-04f, 3.779525015e-04f, 3.772831611e-04f, 3.766132126e-04f, 3.759426573e-04f,
+3.752714964e-04f, 3.745997311e-04f, 3.739273625e-04f, 3.732543920e-04f, 3.725808206e-04f, 3.719066496e-04f, 3.712318803e-04f, 3.705565137e-04f, 3.698805511e-04f, 3.692039938e-04f,
+3.685268429e-04f, 3.678490997e-04f, 3.671707652e-04f, 3.664918409e-04f, 3.658123278e-04f, 3.651322272e-04f, 3.644515404e-04f, 3.637702684e-04f, 3.630884126e-04f, 3.624059741e-04f,
+3.617229542e-04f, 3.610393541e-04f, 3.603551750e-04f, 3.596704182e-04f, 3.589850848e-04f, 3.582991760e-04f, 3.576126932e-04f, 3.569256375e-04f, 3.562380101e-04f, 3.555498124e-04f,
+3.548610454e-04f, 3.541717105e-04f, 3.534818088e-04f, 3.527913416e-04f, 3.521003102e-04f, 3.514087157e-04f, 3.507165594e-04f, 3.500238425e-04f, 3.493305663e-04f, 3.486367320e-04f,
+3.479423408e-04f, 3.472473940e-04f, 3.465518928e-04f, 3.458558384e-04f, 3.451592321e-04f, 3.444620752e-04f, 3.437643688e-04f, 3.430661142e-04f, 3.423673127e-04f, 3.416679655e-04f,
+3.409680738e-04f, 3.402676389e-04f, 3.395666621e-04f, 3.388651445e-04f, 3.381630875e-04f, 3.374604922e-04f, 3.367573600e-04f, 3.360536921e-04f, 3.353494897e-04f, 3.346447541e-04f,
+3.339394865e-04f, 3.332336883e-04f, 3.325273606e-04f, 3.318205046e-04f, 3.311131218e-04f, 3.304052133e-04f, 3.296967804e-04f, 3.289878243e-04f, 3.282783463e-04f, 3.275683477e-04f,
+3.268578297e-04f, 3.261467936e-04f, 3.254352406e-04f, 3.247231721e-04f, 3.240105892e-04f, 3.232974933e-04f, 3.225838856e-04f, 3.218697674e-04f, 3.211551399e-04f, 3.204400045e-04f,
+3.197243623e-04f, 3.190082147e-04f, 3.182915630e-04f, 3.175744083e-04f, 3.168567520e-04f, 3.161385954e-04f, 3.154199397e-04f, 3.147007862e-04f, 3.139811362e-04f, 3.132609909e-04f,
+3.125403516e-04f, 3.118192197e-04f, 3.110975964e-04f, 3.103754829e-04f, 3.096528806e-04f, 3.089297907e-04f, 3.082062146e-04f, 3.074821534e-04f, 3.067576085e-04f, 3.060325812e-04f,
+3.053070728e-04f, 3.045810844e-04f, 3.038546176e-04f, 3.031276734e-04f, 3.024002532e-04f, 3.016723583e-04f, 3.009439900e-04f, 3.002151496e-04f, 2.994858383e-04f, 2.987560575e-04f,
+2.980258084e-04f, 2.972950924e-04f, 2.965639107e-04f, 2.958322647e-04f, 2.951001555e-04f, 2.943675846e-04f, 2.936345532e-04f, 2.929010627e-04f, 2.921671142e-04f, 2.914327092e-04f,
+2.906978489e-04f, 2.899625346e-04f, 2.892267676e-04f, 2.884905492e-04f, 2.877538808e-04f, 2.870167635e-04f, 2.862791989e-04f, 2.855411880e-04f, 2.848027323e-04f, 2.840638330e-04f,
+2.833244915e-04f, 2.825847091e-04f, 2.818444870e-04f, 2.811038266e-04f, 2.803627291e-04f, 2.796211960e-04f, 2.788792285e-04f, 2.781368279e-04f, 2.773939956e-04f, 2.766507327e-04f,
+2.759070408e-04f, 2.751629210e-04f, 2.744183747e-04f, 2.736734032e-04f, 2.729280078e-04f, 2.721821899e-04f, 2.714359507e-04f, 2.706892916e-04f, 2.699422139e-04f, 2.691947189e-04f,
+2.684468079e-04f, 2.676984823e-04f, 2.669497433e-04f, 2.662005923e-04f, 2.654510307e-04f, 2.647010597e-04f, 2.639506806e-04f, 2.631998949e-04f, 2.624487037e-04f, 2.616971085e-04f,
+2.609451106e-04f, 2.601927112e-04f, 2.594399118e-04f, 2.586867136e-04f, 2.579331180e-04f, 2.571791263e-04f, 2.564247398e-04f, 2.556699599e-04f, 2.549147878e-04f, 2.541592251e-04f,
+2.534032728e-04f, 2.526469325e-04f, 2.518902054e-04f, 2.511330928e-04f, 2.503755961e-04f, 2.496177167e-04f, 2.488594558e-04f, 2.481008149e-04f, 2.473417951e-04f, 2.465823980e-04f,
+2.458226247e-04f, 2.450624767e-04f, 2.443019553e-04f, 2.435410619e-04f, 2.427797977e-04f, 2.420181641e-04f, 2.412561624e-04f, 2.404937941e-04f, 2.397310604e-04f, 2.389679627e-04f,
+2.382045022e-04f, 2.374406805e-04f, 2.366764988e-04f, 2.359119584e-04f, 2.351470607e-04f, 2.343818071e-04f, 2.336161989e-04f, 2.328502374e-04f, 2.320839240e-04f, 2.313172600e-04f,
+2.305502468e-04f, 2.297828858e-04f, 2.290151783e-04f, 2.282471255e-04f, 2.274787290e-04f, 2.267099900e-04f, 2.259409099e-04f, 2.251714900e-04f, 2.244017318e-04f, 2.236316365e-04f,
+2.228612054e-04f, 2.220904401e-04f, 2.213193417e-04f, 2.205479117e-04f, 2.197761515e-04f, 2.190040623e-04f, 2.182316455e-04f, 2.174589026e-04f, 2.166858348e-04f, 2.159124434e-04f,
+2.151387300e-04f, 2.143646958e-04f, 2.135903422e-04f, 2.128156705e-04f, 2.120406821e-04f, 2.112653784e-04f, 2.104897607e-04f, 2.097138304e-04f, 2.089375888e-04f, 2.081610374e-04f,
+2.073841774e-04f, 2.066070103e-04f, 2.058295374e-04f, 2.050517601e-04f, 2.042736797e-04f, 2.034952976e-04f, 2.027166151e-04f, 2.019376337e-04f, 2.011583547e-04f, 2.003787794e-04f,
+1.995989093e-04f, 1.988187457e-04f, 1.980382899e-04f, 1.972575434e-04f, 1.964765075e-04f, 1.956951836e-04f, 1.949135730e-04f, 1.941316771e-04f, 1.933494973e-04f, 1.925670350e-04f,
+1.917842915e-04f, 1.910012682e-04f, 1.902179665e-04f, 1.894343877e-04f, 1.886505333e-04f, 1.878664045e-04f, 1.870820028e-04f, 1.862973296e-04f, 1.855123861e-04f, 1.847271739e-04f,
+1.839416942e-04f, 1.831559485e-04f, 1.823699381e-04f, 1.815836643e-04f, 1.807971287e-04f, 1.800103325e-04f, 1.792232771e-04f, 1.784359639e-04f, 1.776483943e-04f, 1.768605697e-04f,
+1.760724914e-04f, 1.752841609e-04f, 1.744955794e-04f, 1.737067484e-04f, 1.729176693e-04f, 1.721283434e-04f, 1.713387721e-04f, 1.705489569e-04f, 1.697588990e-04f, 1.689685999e-04f,
+1.681780609e-04f, 1.673872835e-04f, 1.665962690e-04f, 1.658050188e-04f, 1.650135343e-04f, 1.642218168e-04f, 1.634298678e-04f, 1.626376886e-04f, 1.618452807e-04f, 1.610526453e-04f,
+1.602597839e-04f, 1.594666979e-04f, 1.586733887e-04f, 1.578798576e-04f, 1.570861061e-04f, 1.562921355e-04f, 1.554979472e-04f, 1.547035426e-04f, 1.539089231e-04f, 1.531140900e-04f,
+1.523190448e-04f, 1.515237889e-04f, 1.507283236e-04f, 1.499326503e-04f, 1.491367704e-04f, 1.483406854e-04f, 1.475443966e-04f, 1.467479053e-04f, 1.459512130e-04f, 1.451543211e-04f,
+1.443572309e-04f, 1.435599439e-04f, 1.427624615e-04f, 1.419647850e-04f, 1.411669158e-04f, 1.403688553e-04f, 1.395706049e-04f, 1.387721661e-04f, 1.379735401e-04f, 1.371747284e-04f,
+1.363757324e-04f, 1.355765535e-04f, 1.347771931e-04f, 1.339776525e-04f, 1.331779332e-04f, 1.323780366e-04f, 1.315779639e-04f, 1.307777168e-04f, 1.299772965e-04f, 1.291767044e-04f,
+1.283759419e-04f, 1.275750105e-04f, 1.267739115e-04f, 1.259726463e-04f, 1.251712163e-04f, 1.243696229e-04f, 1.235678676e-04f, 1.227659516e-04f, 1.219638764e-04f, 1.211616435e-04f,
+1.203592541e-04f, 1.195567098e-04f, 1.187540118e-04f, 1.179511616e-04f, 1.171481606e-04f, 1.163450102e-04f, 1.155417118e-04f, 1.147382668e-04f, 1.139346765e-04f, 1.131309425e-04f,
+1.123270660e-04f, 1.115230485e-04f, 1.107188914e-04f, 1.099145960e-04f, 1.091101638e-04f, 1.083055963e-04f, 1.075008947e-04f, 1.066960604e-04f, 1.058910950e-04f, 1.050859997e-04f,
+1.042807760e-04f, 1.034754253e-04f, 1.026699490e-04f, 1.018643485e-04f, 1.010586251e-04f, 1.002527804e-04f, 9.944681559e-05f, 9.864073220e-05f, 9.783453160e-05f, 9.702821519e-05f,
+9.622178438e-05f, 9.541524057e-05f, 9.460858515e-05f, 9.380181953e-05f, 9.299494511e-05f, 9.218796330e-05f, 9.138087550e-05f, 9.057368310e-05f, 8.976638752e-05f, 8.895899015e-05f,
+8.815149240e-05f, 8.734389566e-05f, 8.653620135e-05f, 8.572841087e-05f, 8.492052562e-05f, 8.411254699e-05f, 8.330447641e-05f, 8.249631526e-05f, 8.168806495e-05f, 8.087972689e-05f,
+8.007130248e-05f, 7.926279311e-05f, 7.845420021e-05f, 7.764552516e-05f, 7.683676938e-05f, 7.602793426e-05f, 7.521902121e-05f, 7.441003164e-05f, 7.360096695e-05f, 7.279182853e-05f,
+7.198261780e-05f, 7.117333616e-05f, 7.036398502e-05f, 6.955456577e-05f, 6.874507983e-05f, 6.793552858e-05f, 6.712591345e-05f, 6.631623584e-05f, 6.550649713e-05f, 6.469669876e-05f,
+6.388684210e-05f, 6.307692858e-05f, 6.226695959e-05f, 6.145693654e-05f, 6.064686083e-05f, 5.983673387e-05f, 5.902655706e-05f, 5.821633180e-05f, 5.740605950e-05f, 5.659574157e-05f,
+5.578537940e-05f, 5.497497440e-05f, 5.416452797e-05f, 5.335404153e-05f, 5.254351647e-05f, 5.173295419e-05f, 5.092235611e-05f, 5.011172362e-05f, 4.930105813e-05f, 4.849036104e-05f,
+4.767963376e-05f, 4.686887768e-05f, 4.605809423e-05f, 4.524728478e-05f, 4.443645076e-05f, 4.362559357e-05f, 4.281471460e-05f, 4.200381526e-05f, 4.119289696e-05f, 4.038196110e-05f,
+3.957100908e-05f, 3.876004230e-05f, 3.794906217e-05f, 3.713807009e-05f, 3.632706747e-05f, 3.551605570e-05f, 3.470503619e-05f, 3.389401035e-05f, 3.308297956e-05f, 3.227194525e-05f,
+3.146090881e-05f, 3.064987164e-05f, 2.983883515e-05f, 2.902780073e-05f, 2.821676979e-05f, 2.740574374e-05f, 2.659472396e-05f, 2.578371188e-05f, 2.497270888e-05f, 2.416171637e-05f,
+2.335073574e-05f, 2.253976842e-05f, 2.172881578e-05f, 2.091787924e-05f, 2.010696019e-05f, 1.929606004e-05f, 1.848518019e-05f, 1.767432203e-05f, 1.686348697e-05f, 1.605267641e-05f,
+1.524189175e-05f, 1.443113439e-05f, 1.362040573e-05f, 1.280970716e-05f, 1.199904010e-05f, 1.118840593e-05f, 1.037780606e-05f, 9.567241887e-06f, 8.756714810e-06f, 7.946226228e-06f,
+7.135777540e-06f, 6.325370144e-06f, 5.515005439e-06f, 4.704684823e-06f, 3.894409694e-06f, 3.084181451e-06f, 2.274001490e-06f, 1.463871210e-06f, 6.537920085e-07f, -1.562347178e-07f,
+-9.662075718e-07f, -1.776125156e-06f, -2.585986075e-06f, -3.395788931e-06f, -4.205532329e-06f, -5.015214871e-06f, -5.824835162e-06f, -6.634391807e-06f, -7.443883410e-06f, -8.253308575e-06f,
+-9.062665908e-06f, -9.871954013e-06f, -1.068117150e-05f, -1.149031696e-05f, -1.229938902e-05f, -1.310838627e-05f, -1.391730732e-05f, -1.472615078e-05f, -1.553491525e-05f, -1.634359935e-05f,
+-1.715220167e-05f, -1.796072083e-05f, -1.876915543e-05f, -1.957750409e-05f, -2.038576540e-05f, -2.119393798e-05f, -2.200202043e-05f, -2.281001137e-05f, -2.361790941e-05f, -2.442571314e-05f,
+-2.523342119e-05f, -2.604103216e-05f, -2.684854466e-05f, -2.765595731e-05f, -2.846326871e-05f, -2.927047747e-05f, -3.007758221e-05f, -3.088458153e-05f, -3.169147406e-05f, -3.249825839e-05f,
+-3.330493314e-05f, -3.411149693e-05f, -3.491794837e-05f, -3.572428607e-05f, -3.653050864e-05f, -3.733661470e-05f, -3.814260286e-05f, -3.894847174e-05f, -3.975421995e-05f, -4.055984610e-05f,
+-4.136534882e-05f, -4.217072671e-05f, -4.297597839e-05f, -4.378110248e-05f, -4.458609759e-05f, -4.539096234e-05f, -4.619569535e-05f, -4.700029524e-05f, -4.780476062e-05f, -4.860909011e-05f,
+-4.941328233e-05f, -5.021733589e-05f, -5.102124942e-05f, -5.182502154e-05f, -5.262865087e-05f, -5.343213602e-05f, -5.423547561e-05f, -5.503866827e-05f, -5.584171262e-05f, -5.664460728e-05f,
+-5.744735087e-05f, -5.824994201e-05f, -5.905237932e-05f, -5.985466143e-05f, -6.065678697e-05f, -6.145875455e-05f, -6.226056279e-05f, -6.306221033e-05f, -6.386369578e-05f, -6.466501778e-05f,
+-6.546617494e-05f, -6.626716590e-05f, -6.706798928e-05f, -6.786864370e-05f, -6.866912779e-05f, -6.946944018e-05f, -7.026957950e-05f, -7.106954437e-05f, -7.186933343e-05f, -7.266894530e-05f,
+-7.346837861e-05f, -7.426763199e-05f, -7.506670408e-05f, -7.586559349e-05f, -7.666429887e-05f, -7.746281884e-05f, -7.826115203e-05f, -7.905929708e-05f, -7.985725263e-05f, -8.065501729e-05f,
+-8.145258971e-05f, -8.224996852e-05f, -8.304715235e-05f, -8.384413984e-05f, -8.464092962e-05f, -8.543752033e-05f, -8.623391061e-05f, -8.703009909e-05f, -8.782608440e-05f, -8.862186519e-05f,
+-8.941744009e-05f, -9.021280774e-05f, -9.100796678e-05f, -9.180291585e-05f, -9.259765358e-05f, -9.339217862e-05f, -9.418648961e-05f, -9.498058519e-05f, -9.577446400e-05f, -9.656812467e-05f,
+-9.736156587e-05f, -9.815478621e-05f, -9.894778436e-05f, -9.974055895e-05f, -1.005331086e-04f, -1.013254320e-04f, -1.021175278e-04f, -1.029093946e-04f, -1.037010311e-04f, -1.044924359e-04f,
+-1.052836076e-04f, -1.060745450e-04f, -1.068652466e-04f, -1.076557111e-04f, -1.084459372e-04f, -1.092359235e-04f, -1.100256686e-04f, -1.108151712e-04f, -1.116044300e-04f, -1.123934436e-04f,
+-1.131822107e-04f, -1.139707299e-04f, -1.147589998e-04f, -1.155470191e-04f, -1.163347866e-04f, -1.171223007e-04f, -1.179095602e-04f, -1.186965638e-04f, -1.194833101e-04f, -1.202697977e-04f,
+-1.210560253e-04f, -1.218419916e-04f, -1.226276952e-04f, -1.234131348e-04f, -1.241983090e-04f, -1.249832166e-04f, -1.257678561e-04f, -1.265522262e-04f, -1.273363256e-04f, -1.281201530e-04f,
+-1.289037069e-04f, -1.296869862e-04f, -1.304699894e-04f, -1.312527151e-04f, -1.320351622e-04f, -1.328173292e-04f, -1.335992148e-04f, -1.343808176e-04f, -1.351621364e-04f, -1.359431698e-04f,
+-1.367239164e-04f, -1.375043750e-04f, -1.382845442e-04f, -1.390644227e-04f, -1.398440091e-04f, -1.406233021e-04f, -1.414023005e-04f, -1.421810028e-04f, -1.429594077e-04f, -1.437375140e-04f,
+-1.445153202e-04f, -1.452928251e-04f, -1.460700274e-04f, -1.468469256e-04f, -1.476235185e-04f, -1.483998049e-04f, -1.491757832e-04f, -1.499514523e-04f, -1.507268108e-04f, -1.515018574e-04f,
+-1.522765907e-04f, -1.530510095e-04f, -1.538251124e-04f, -1.545988981e-04f, -1.553723653e-04f, -1.561455127e-04f, -1.569183389e-04f, -1.576908427e-04f, -1.584630228e-04f, -1.592348777e-04f,
+-1.600064063e-04f, -1.607776071e-04f, -1.615484790e-04f, -1.623190205e-04f, -1.630892303e-04f, -1.638591072e-04f, -1.646286499e-04f, -1.653978570e-04f, -1.661667272e-04f, -1.669352592e-04f,
+-1.677034517e-04f, -1.684713035e-04f, -1.692388131e-04f, -1.700059794e-04f, -1.707728009e-04f, -1.715392764e-04f, -1.723054046e-04f, -1.730711842e-04f, -1.738366139e-04f, -1.746016924e-04f,
+-1.753664183e-04f, -1.761307905e-04f, -1.768948075e-04f, -1.776584681e-04f, -1.784217710e-04f, -1.791847149e-04f, -1.799472985e-04f, -1.807095205e-04f, -1.814713797e-04f, -1.822328746e-04f,
+-1.829940041e-04f, -1.837547668e-04f, -1.845151615e-04f, -1.852751868e-04f, -1.860348415e-04f, -1.867941242e-04f, -1.875530338e-04f, -1.883115688e-04f, -1.890697281e-04f, -1.898275102e-04f,
+-1.905849141e-04f, -1.913419383e-04f, -1.920985815e-04f, -1.928548426e-04f, -1.936107201e-04f, -1.943662129e-04f, -1.951213197e-04f, -1.958760391e-04f, -1.966303699e-04f, -1.973843108e-04f,
+-1.981378605e-04f, -1.988910178e-04f, -1.996437813e-04f, -2.003961499e-04f, -2.011481222e-04f, -2.018996969e-04f, -2.026508729e-04f, -2.034016487e-04f, -2.041520232e-04f, -2.049019950e-04f,
+-2.056515630e-04f, -2.064007257e-04f, -2.071494820e-04f, -2.078978306e-04f, -2.086457703e-04f, -2.093932997e-04f, -2.101404176e-04f, -2.108871227e-04f, -2.116334137e-04f, -2.123792895e-04f,
+-2.131247487e-04f, -2.138697901e-04f, -2.146144125e-04f, -2.153586144e-04f, -2.161023948e-04f, -2.168457523e-04f, -2.175886857e-04f, -2.183311937e-04f, -2.190732751e-04f, -2.198149286e-04f,
+-2.205561530e-04f, -2.212969470e-04f, -2.220373093e-04f, -2.227772387e-04f, -2.235167340e-04f, -2.242557939e-04f, -2.249944172e-04f, -2.257326026e-04f, -2.264703488e-04f, -2.272076546e-04f,
+-2.279445188e-04f, -2.286809402e-04f, -2.294169174e-04f, -2.301524492e-04f, -2.308875345e-04f, -2.316221719e-04f, -2.323563602e-04f, -2.330900982e-04f, -2.338233846e-04f, -2.345562182e-04f,
+-2.352885978e-04f, -2.360205221e-04f, -2.367519898e-04f, -2.374829999e-04f, -2.382135509e-04f, -2.389436418e-04f, -2.396732712e-04f, -2.404024379e-04f, -2.411311407e-04f, -2.418593784e-04f,
+-2.425871497e-04f, -2.433144534e-04f, -2.440412883e-04f, -2.447676532e-04f, -2.454935468e-04f, -2.462189679e-04f, -2.469439153e-04f, -2.476683877e-04f, -2.483923840e-04f, -2.491159029e-04f,
+-2.498389433e-04f, -2.505615038e-04f, -2.512835832e-04f, -2.520051805e-04f, -2.527262942e-04f, -2.534469233e-04f, -2.541670665e-04f, -2.548867225e-04f, -2.556058903e-04f, -2.563245685e-04f,
+-2.570427560e-04f, -2.577604515e-04f, -2.584776539e-04f, -2.591943619e-04f, -2.599105743e-04f, -2.606262900e-04f, -2.613415076e-04f, -2.620562261e-04f, -2.627704442e-04f, -2.634841608e-04f,
+-2.641973745e-04f, -2.649100842e-04f, -2.656222887e-04f, -2.663339869e-04f, -2.670451775e-04f, -2.677558592e-04f, -2.684660311e-04f, -2.691756917e-04f, -2.698848400e-04f, -2.705934747e-04f,
+-2.713015947e-04f, -2.720091987e-04f, -2.727162857e-04f, -2.734228543e-04f, -2.741289034e-04f, -2.748344318e-04f, -2.755394383e-04f, -2.762439218e-04f, -2.769478810e-04f, -2.776513149e-04f,
+-2.783542221e-04f, -2.790566015e-04f, -2.797584520e-04f, -2.804597723e-04f, -2.811605613e-04f, -2.818608178e-04f, -2.825605407e-04f, -2.832597286e-04f, -2.839583806e-04f, -2.846564954e-04f,
+-2.853540718e-04f, -2.860511087e-04f, -2.867476049e-04f, -2.874435592e-04f, -2.881389704e-04f, -2.888338375e-04f, -2.895281592e-04f, -2.902219343e-04f, -2.909151618e-04f, -2.916078404e-04f,
+-2.922999689e-04f, -2.929915463e-04f, -2.936825714e-04f, -2.943730429e-04f, -2.950629598e-04f, -2.957523209e-04f, -2.964411250e-04f, -2.971293710e-04f, -2.978170577e-04f, -2.985041839e-04f,
+-2.991907486e-04f, -2.998767506e-04f, -3.005621887e-04f, -3.012470618e-04f, -3.019313687e-04f, -3.026151083e-04f, -3.032982794e-04f, -3.039808809e-04f, -3.046629117e-04f, -3.053443706e-04f,
+-3.060252564e-04f, -3.067055681e-04f, -3.073853045e-04f, -3.080644644e-04f, -3.087430467e-04f, -3.094210504e-04f, -3.100984742e-04f, -3.107753170e-04f, -3.114515777e-04f, -3.121272551e-04f,
+-3.128023482e-04f, -3.134768558e-04f, -3.141507767e-04f, -3.148241099e-04f, -3.154968542e-04f, -3.161690085e-04f, -3.168405717e-04f, -3.175115426e-04f, -3.181819202e-04f, -3.188517032e-04f,
+-3.195208907e-04f, -3.201894814e-04f, -3.208574743e-04f, -3.215248682e-04f, -3.221916621e-04f, -3.228578547e-04f, -3.235234451e-04f, -3.241884320e-04f, -3.248528145e-04f, -3.255165913e-04f,
+-3.261797614e-04f, -3.268423236e-04f, -3.275042769e-04f, -3.281656201e-04f, -3.288263522e-04f, -3.294864720e-04f, -3.301459785e-04f, -3.308048705e-04f, -3.314631470e-04f, -3.321208068e-04f,
+-3.327778489e-04f, -3.334342721e-04f, -3.340900754e-04f, -3.347452576e-04f, -3.353998178e-04f, -3.360537547e-04f, -3.367070673e-04f, -3.373597545e-04f, -3.380118153e-04f, -3.386632485e-04f,
+-3.393140530e-04f, -3.399642278e-04f, -3.406137718e-04f, -3.412626839e-04f, -3.419109631e-04f, -3.425586081e-04f, -3.432056181e-04f, -3.438519918e-04f, -3.444977283e-04f, -3.451428264e-04f,
+-3.457872850e-04f, -3.464311032e-04f, -3.470742798e-04f, -3.477168138e-04f, -3.483587040e-04f, -3.489999495e-04f, -3.496405491e-04f, -3.502805018e-04f, -3.509198065e-04f, -3.515584622e-04f,
+-3.521964679e-04f, -3.528338223e-04f, -3.534705245e-04f, -3.541065735e-04f, -3.547419682e-04f, -3.553767074e-04f, -3.560107902e-04f, -3.566442156e-04f, -3.572769823e-04f, -3.579090895e-04f,
+-3.585405361e-04f, -3.591713210e-04f, -3.598014431e-04f, -3.604309014e-04f, -3.610596949e-04f, -3.616878226e-04f, -3.623152833e-04f, -3.629420761e-04f, -3.635681999e-04f, -3.641936537e-04f,
+-3.648184364e-04f, -3.654425470e-04f, -3.660659844e-04f, -3.666887477e-04f, -3.673108358e-04f, -3.679322477e-04f, -3.685529823e-04f, -3.691730386e-04f, -3.697924156e-04f, -3.704111122e-04f,
+-3.710291275e-04f, -3.716464604e-04f, -3.722631099e-04f, -3.728790749e-04f, -3.734943545e-04f, -3.741089476e-04f, -3.747228532e-04f, -3.753360703e-04f, -3.759485979e-04f, -3.765604350e-04f,
+-3.771715805e-04f, -3.777820335e-04f, -3.783917929e-04f, -3.790008577e-04f, -3.796092269e-04f, -3.802168996e-04f, -3.808238746e-04f, -3.814301511e-04f, -3.820357280e-04f, -3.826406042e-04f,
+-3.832447789e-04f, -3.838482510e-04f, -3.844510195e-04f, -3.850530834e-04f, -3.856544417e-04f, -3.862550935e-04f, -3.868550377e-04f, -3.874542733e-04f, -3.880527994e-04f, -3.886506150e-04f,
+-3.892477190e-04f, -3.898441105e-04f, -3.904397886e-04f, -3.910347521e-04f, -3.916290003e-04f, -3.922225319e-04f, -3.928153462e-04f, -3.934074421e-04f, -3.939988186e-04f, -3.945894748e-04f,
+-3.951794097e-04f, -3.957686223e-04f, -3.963571116e-04f, -3.969448767e-04f, -3.975319166e-04f, -3.981182304e-04f, -3.987038170e-04f, -3.992886756e-04f, -3.998728051e-04f, -4.004562045e-04f,
+-4.010388730e-04f, -4.016208096e-04f, -4.022020133e-04f, -4.027824831e-04f, -4.033622181e-04f, -4.039412174e-04f, -4.045194799e-04f, -4.050970048e-04f, -4.056737911e-04f, -4.062498379e-04f,
+-4.068251441e-04f, -4.073997089e-04f, -4.079735313e-04f, -4.085466103e-04f, -4.091189451e-04f, -4.096905346e-04f, -4.102613780e-04f, -4.108314743e-04f, -4.114008226e-04f, -4.119694219e-04f,
+-4.125372713e-04f, -4.131043699e-04f, -4.136707167e-04f, -4.142363109e-04f, -4.148011514e-04f, -4.153652373e-04f, -4.159285678e-04f, -4.164911419e-04f, -4.170529587e-04f, -4.176140172e-04f,
+-4.181743166e-04f, -4.187338559e-04f, -4.192926342e-04f, -4.198506506e-04f, -4.204079042e-04f, -4.209643940e-04f, -4.215201192e-04f, -4.220750789e-04f, -4.226292720e-04f, -4.231826978e-04f,
+-4.237353553e-04f, -4.242872437e-04f, -4.248383619e-04f, -4.253887092e-04f, -4.259382845e-04f, -4.264870871e-04f, -4.270351160e-04f, -4.275823703e-04f, -4.281288492e-04f, -4.286745516e-04f,
+-4.292194768e-04f, -4.297636239e-04f, -4.303069919e-04f, -4.308495799e-04f, -4.313913872e-04f, -4.319324127e-04f, -4.324726557e-04f, -4.330121152e-04f, -4.335507904e-04f, -4.340886803e-04f,
+-4.346257841e-04f, -4.351621009e-04f, -4.356976299e-04f, -4.362323702e-04f, -4.367663208e-04f, -4.372994810e-04f, -4.378318498e-04f, -4.383634265e-04f, -4.388942100e-04f, -4.394241996e-04f,
+-4.399533944e-04f, -4.404817935e-04f, -4.410093961e-04f, -4.415362013e-04f, -4.420622083e-04f, -4.425874162e-04f, -4.431118241e-04f, -4.436354312e-04f, -4.441582366e-04f, -4.446802395e-04f,
+-4.452014391e-04f, -4.457218344e-04f, -4.462414247e-04f, -4.467602091e-04f, -4.472781867e-04f, -4.477953568e-04f, -4.483117184e-04f, -4.488272707e-04f, -4.493420130e-04f, -4.498559443e-04f,
+-4.503690638e-04f, -4.508813707e-04f, -4.513928642e-04f, -4.519035434e-04f, -4.524134075e-04f, -4.529224557e-04f, -4.534306871e-04f, -4.539381009e-04f, -4.544446964e-04f, -4.549504726e-04f,
+-4.554554287e-04f, -4.559595641e-04f, -4.564628777e-04f, -4.569653688e-04f, -4.574670366e-04f, -4.579678803e-04f, -4.584678991e-04f, -4.589670921e-04f, -4.594654586e-04f, -4.599629977e-04f,
+-4.604597087e-04f, -4.609555907e-04f, -4.614506429e-04f, -4.619448645e-04f, -4.624382548e-04f, -4.629308129e-04f, -4.634225381e-04f, -4.639134295e-04f, -4.644034863e-04f, -4.648927078e-04f,
+-4.653810931e-04f, -4.658686416e-04f, -4.663553523e-04f, -4.668412245e-04f, -4.673262575e-04f, -4.678104503e-04f, -4.682938024e-04f, -4.687763128e-04f, -4.692579808e-04f, -4.697388056e-04f,
+-4.702187865e-04f, -4.706979226e-04f, -4.711762132e-04f, -4.716536576e-04f, -4.721302549e-04f, -4.726060044e-04f, -4.730809054e-04f, -4.735549569e-04f, -4.740281584e-04f, -4.745005091e-04f,
+-4.749720080e-04f, -4.754426547e-04f, -4.759124481e-04f, -4.763813877e-04f, -4.768494726e-04f, -4.773167021e-04f, -4.777830755e-04f, -4.782485919e-04f, -4.787132507e-04f, -4.791770511e-04f,
+-4.796399924e-04f, -4.801020738e-04f, -4.805632945e-04f, -4.810236539e-04f, -4.814831511e-04f, -4.819417855e-04f, -4.823995564e-04f, -4.828564629e-04f, -4.833125043e-04f, -4.837676800e-04f,
+-4.842219892e-04f, -4.846754312e-04f, -4.851280051e-04f, -4.855797104e-04f, -4.860305463e-04f, -4.864805121e-04f, -4.869296070e-04f, -4.873778303e-04f, -4.878251813e-04f, -4.882716593e-04f,
+-4.887172636e-04f, -4.891619935e-04f, -4.896058483e-04f, -4.900488272e-04f, -4.904909295e-04f, -4.909321545e-04f, -4.913725016e-04f, -4.918119701e-04f, -4.922505591e-04f, -4.926882681e-04f,
+-4.931250963e-04f, -4.935610430e-04f, -4.939961076e-04f, -4.944302893e-04f, -4.948635874e-04f, -4.952960013e-04f, -4.957275303e-04f, -4.961581737e-04f, -4.965879308e-04f, -4.970168008e-04f,
+-4.974447833e-04f, -4.978718773e-04f, -4.982980823e-04f, -4.987233977e-04f, -4.991478226e-04f, -4.995713565e-04f, -4.999939986e-04f, -5.004157484e-04f, -5.008366051e-04f, -5.012565680e-04f,
+-5.016756365e-04f, -5.020938100e-04f, -5.025110877e-04f, -5.029274690e-04f, -5.033429532e-04f, -5.037575398e-04f, -5.041712279e-04f, -5.045840171e-04f, -5.049959065e-04f, -5.054068956e-04f,
+-5.058169837e-04f, -5.062261702e-04f, -5.066344544e-04f, -5.070418357e-04f, -5.074483133e-04f, -5.078538868e-04f, -5.082585554e-04f, -5.086623185e-04f, -5.090651755e-04f, -5.094671257e-04f,
+-5.098681685e-04f, -5.102683033e-04f, -5.106675293e-04f, -5.110658461e-04f, -5.114632530e-04f, -5.118597493e-04f, -5.122553344e-04f, -5.126500077e-04f, -5.130437685e-04f, -5.134366164e-04f,
+-5.138285505e-04f, -5.142195704e-04f, -5.146096754e-04f, -5.149988649e-04f, -5.153871382e-04f, -5.157744948e-04f, -5.161609341e-04f, -5.165464554e-04f, -5.169310581e-04f, -5.173147417e-04f,
+-5.176975056e-04f, -5.180793490e-04f, -5.184602715e-04f, -5.188402725e-04f, -5.192193513e-04f, -5.195975073e-04f, -5.199747400e-04f, -5.203510488e-04f, -5.207264330e-04f, -5.211008921e-04f,
+-5.214744256e-04f, -5.218470327e-04f, -5.222187130e-04f, -5.225894659e-04f, -5.229592907e-04f, -5.233281869e-04f, -5.236961540e-04f, -5.240631913e-04f, -5.244292982e-04f, -5.247944743e-04f,
+-5.251587189e-04f, -5.255220315e-04f, -5.258844114e-04f, -5.262458583e-04f, -5.266063713e-04f, -5.269659501e-04f, -5.273245941e-04f, -5.276823026e-04f, -5.280390752e-04f, -5.283949113e-04f,
+-5.287498102e-04f, -5.291037716e-04f, -5.294567948e-04f, -5.298088793e-04f, -5.301600245e-04f, -5.305102299e-04f, -5.308594949e-04f, -5.312078191e-04f, -5.315552018e-04f, -5.319016426e-04f,
+-5.322471408e-04f, -5.325916960e-04f, -5.329353076e-04f, -5.332779751e-04f, -5.336196980e-04f, -5.339604757e-04f, -5.343003077e-04f, -5.346391935e-04f, -5.349771326e-04f, -5.353141244e-04f,
+-5.356501684e-04f, -5.359852641e-04f, -5.363194110e-04f, -5.366526086e-04f, -5.369848563e-04f, -5.373161537e-04f, -5.376465002e-04f, -5.379758953e-04f, -5.383043386e-04f, -5.386318294e-04f,
+-5.389583674e-04f, -5.392839520e-04f, -5.396085827e-04f, -5.399322591e-04f, -5.402549805e-04f, -5.405767466e-04f, -5.408975568e-04f, -5.412174106e-04f, -5.415363076e-04f, -5.418542473e-04f,
+-5.421712291e-04f, -5.424872527e-04f, -5.428023174e-04f, -5.431164229e-04f, -5.434295686e-04f, -5.437417541e-04f, -5.440529789e-04f, -5.443632425e-04f, -5.446725445e-04f, -5.449808843e-04f,
+-5.452882615e-04f, -5.455946757e-04f, -5.459001264e-04f, -5.462046131e-04f, -5.465081353e-04f, -5.468106926e-04f, -5.471122846e-04f, -5.474129107e-04f, -5.477125705e-04f, -5.480112636e-04f,
+-5.483089895e-04f, -5.486057478e-04f, -5.489015380e-04f, -5.491963596e-04f, -5.494902123e-04f, -5.497830956e-04f, -5.500750089e-04f, -5.503659520e-04f, -5.506559243e-04f, -5.509449255e-04f,
+-5.512329550e-04f, -5.515200125e-04f, -5.518060975e-04f, -5.520912096e-04f, -5.523753483e-04f, -5.526585133e-04f, -5.529407041e-04f, -5.532219203e-04f, -5.535021614e-04f, -5.537814271e-04f,
+-5.540597169e-04f, -5.543370304e-04f, -5.546133672e-04f, -5.548887269e-04f, -5.551631091e-04f, -5.554365133e-04f, -5.557089392e-04f, -5.559803863e-04f, -5.562508543e-04f, -5.565203427e-04f,
+-5.567888511e-04f, -5.570563792e-04f, -5.573229266e-04f, -5.575884928e-04f, -5.578530774e-04f, -5.581166801e-04f, -5.583793005e-04f, -5.586409381e-04f, -5.589015927e-04f, -5.591612638e-04f,
+-5.594199510e-04f, -5.596776539e-04f, -5.599343722e-04f, -5.601901055e-04f, -5.604448534e-04f, -5.606986155e-04f, -5.609513915e-04f, -5.612031810e-04f, -5.614539836e-04f, -5.617037990e-04f,
+-5.619526267e-04f, -5.622004665e-04f, -5.624473179e-04f, -5.626931807e-04f, -5.629380543e-04f, -5.631819386e-04f, -5.634248330e-04f, -5.636667374e-04f, -5.639076512e-04f, -5.641475743e-04f,
+-5.643865061e-04f, -5.646244464e-04f, -5.648613949e-04f, -5.650973511e-04f, -5.653323148e-04f, -5.655662856e-04f, -5.657992631e-04f, -5.660312470e-04f, -5.662622371e-04f, -5.664922329e-04f,
+-5.667212341e-04f, -5.669492404e-04f, -5.671762515e-04f, -5.674022671e-04f, -5.676272867e-04f, -5.678513102e-04f, -5.680743371e-04f, -5.682963671e-04f, -5.685174001e-04f, -5.687374355e-04f,
+-5.689564731e-04f, -5.691745126e-04f, -5.693915537e-04f, -5.696075961e-04f, -5.698226395e-04f, -5.700366835e-04f, -5.702497278e-04f, -5.704617723e-04f, -5.706728164e-04f, -5.708828601e-04f,
+-5.710919029e-04f, -5.712999445e-04f, -5.715069848e-04f, -5.717130233e-04f, -5.719180598e-04f, -5.721220940e-04f, -5.723251256e-04f, -5.725271544e-04f, -5.727281800e-04f, -5.729282022e-04f,
+-5.731272206e-04f, -5.733252351e-04f, -5.735222454e-04f, -5.737182510e-04f, -5.739132519e-04f, -5.741072477e-04f, -5.743002382e-04f, -5.744922230e-04f, -5.746832020e-04f, -5.748731748e-04f,
+-5.750621412e-04f, -5.752501010e-04f, -5.754370538e-04f, -5.756229995e-04f, -5.758079377e-04f, -5.759918682e-04f, -5.761747909e-04f, -5.763567053e-04f, -5.765376113e-04f, -5.767175086e-04f,
+-5.768963970e-04f, -5.770742762e-04f, -5.772511460e-04f, -5.774270062e-04f, -5.776018565e-04f, -5.777756966e-04f, -5.779485265e-04f, -5.781203457e-04f, -5.782911542e-04f, -5.784609516e-04f,
+-5.786297377e-04f, -5.787975123e-04f, -5.789642753e-04f, -5.791300263e-04f, -5.792947651e-04f, -5.794584916e-04f, -5.796212055e-04f, -5.797829066e-04f, -5.799435947e-04f, -5.801032695e-04f,
+-5.802619310e-04f, -5.804195788e-04f, -5.805762127e-04f, -5.807318326e-04f, -5.808864383e-04f, -5.810400295e-04f, -5.811926060e-04f, -5.813441678e-04f, -5.814947144e-04f, -5.816442459e-04f,
+-5.817927619e-04f, -5.819402624e-04f, -5.820867470e-04f, -5.822322156e-04f, -5.823766681e-04f, -5.825201042e-04f, -5.826625238e-04f, -5.828039267e-04f, -5.829443127e-04f, -5.830836817e-04f,
+-5.832220334e-04f, -5.833593677e-04f, -5.834956845e-04f, -5.836309834e-04f, -5.837652645e-04f, -5.838985276e-04f, -5.840307723e-04f, -5.841619987e-04f, -5.842922065e-04f, -5.844213957e-04f,
+-5.845495659e-04f, -5.846767171e-04f, -5.848028492e-04f, -5.849279619e-04f, -5.850520552e-04f, -5.851751288e-04f, -5.852971827e-04f, -5.854182166e-04f, -5.855382305e-04f, -5.856572242e-04f,
+-5.857751976e-04f, -5.858921506e-04f, -5.860080829e-04f, -5.861229945e-04f, -5.862368853e-04f, -5.863497550e-04f, -5.864616037e-04f, -5.865724310e-04f, -5.866822371e-04f, -5.867910216e-04f,
+-5.868987846e-04f, -5.870055258e-04f, -5.871112451e-04f, -5.872159425e-04f, -5.873196179e-04f, -5.874222710e-04f, -5.875239019e-04f, -5.876245104e-04f, -5.877240963e-04f, -5.878226597e-04f,
+-5.879202003e-04f, -5.880167182e-04f, -5.881122131e-04f, -5.882066850e-04f, -5.883001338e-04f, -5.883925594e-04f, -5.884839618e-04f, -5.885743407e-04f, -5.886636962e-04f, -5.887520281e-04f,
+-5.888393364e-04f, -5.889256210e-04f, -5.890108818e-04f, -5.890951187e-04f, -5.891783316e-04f, -5.892605205e-04f, -5.893416853e-04f, -5.894218259e-04f, -5.895009423e-04f, -5.895790343e-04f,
+-5.896561020e-04f, -5.897321452e-04f, -5.898071639e-04f, -5.898811580e-04f, -5.899541275e-04f, -5.900260723e-04f, -5.900969923e-04f, -5.901668876e-04f, -5.902357580e-04f, -5.903036035e-04f,
+-5.903704240e-04f, -5.904362195e-04f, -5.905009900e-04f, -5.905647353e-04f, -5.906274556e-04f, -5.906891507e-04f, -5.907498205e-04f, -5.908094651e-04f, -5.908680844e-04f, -5.909256784e-04f,
+-5.909822471e-04f, -5.910377904e-04f, -5.910923082e-04f, -5.911458007e-04f, -5.911982676e-04f, -5.912497091e-04f, -5.913001251e-04f, -5.913495156e-04f, -5.913978806e-04f, -5.914452200e-04f,
+-5.914915338e-04f, -5.915368220e-04f, -5.915810847e-04f, -5.916243218e-04f, -5.916665332e-04f, -5.917077191e-04f, -5.917478794e-04f, -5.917870140e-04f, -5.918251230e-04f, -5.918622065e-04f,
+-5.918982643e-04f, -5.919332965e-04f, -5.919673031e-04f, -5.920002842e-04f, -5.920322397e-04f, -5.920631696e-04f, -5.920930740e-04f, -5.921219529e-04f, -5.921498062e-04f, -5.921766341e-04f,
+-5.922024365e-04f, -5.922272135e-04f, -5.922509651e-04f, -5.922736912e-04f, -5.922953920e-04f, -5.923160675e-04f, -5.923357177e-04f, -5.923543426e-04f, -5.923719423e-04f, -5.923885168e-04f,
+-5.924040662e-04f, -5.924185905e-04f, -5.924320897e-04f, -5.924445638e-04f, -5.924560131e-04f, -5.924664373e-04f, -5.924758368e-04f, -5.924842113e-04f, -5.924915612e-04f, -5.924978863e-04f,
+-5.925031867e-04f, -5.925074626e-04f, -5.925107139e-04f, -5.925129408e-04f, -5.925141432e-04f, -5.925143214e-04f, -5.925134752e-04f, -5.925116048e-04f, -5.925087103e-04f, -5.925047918e-04f,
+-5.924998492e-04f, -5.924938828e-04f, -5.924868925e-04f, -5.924788785e-04f, -5.924698408e-04f, -5.924597795e-04f, -5.924486947e-04f, -5.924365866e-04f, -5.924234551e-04f, -5.924093003e-04f,
+-5.923941225e-04f, -5.923779215e-04f, -5.923606977e-04f, -5.923424510e-04f, -5.923231815e-04f, -5.923028894e-04f, -5.922815748e-04f, -5.922592377e-04f, -5.922358783e-04f, -5.922114966e-04f,
+-5.921860929e-04f, -5.921596671e-04f, -5.921322194e-04f, -5.921037500e-04f, -5.920742589e-04f, -5.920437463e-04f, -5.920122123e-04f, -5.919796570e-04f, -5.919460805e-04f, -5.919114830e-04f,
+-5.918758645e-04f, -5.918392253e-04f, -5.918015654e-04f, -5.917628850e-04f, -5.917231842e-04f, -5.916824631e-04f, -5.916407220e-04f, -5.915979609e-04f, -5.915541799e-04f, -5.915093793e-04f,
+-5.914635591e-04f, -5.914167195e-04f, -5.913688607e-04f, -5.913199828e-04f, -5.912700859e-04f, -5.912191703e-04f, -5.911672360e-04f, -5.911142833e-04f, -5.910603122e-04f, -5.910053230e-04f,
+-5.909493158e-04f, -5.908922908e-04f, -5.908342481e-04f, -5.907751879e-04f, -5.907151104e-04f, -5.906540158e-04f, -5.905919042e-04f, -5.905287757e-04f, -5.904646307e-04f, -5.903994692e-04f,
+-5.903332914e-04f, -5.902660976e-04f, -5.901978879e-04f, -5.901286624e-04f, -5.900584215e-04f, -5.899871651e-04f, -5.899148937e-04f, -5.898416073e-04f, -5.897673061e-04f, -5.896919904e-04f,
+-5.896156603e-04f, -5.895383160e-04f, -5.894599578e-04f, -5.893805858e-04f, -5.893002003e-04f, -5.892188014e-04f, -5.891363893e-04f, -5.890529644e-04f, -5.889685267e-04f, -5.888830765e-04f,
+-5.887966140e-04f, -5.887091394e-04f, -5.886206530e-04f, -5.885311550e-04f, -5.884406455e-04f, -5.883491249e-04f, -5.882565932e-04f, -5.881630509e-04f, -5.880684980e-04f, -5.879729349e-04f,
+-5.878763617e-04f, -5.877787787e-04f, -5.876801862e-04f, -5.875805843e-04f, -5.874799733e-04f, -5.873783534e-04f, -5.872757250e-04f, -5.871720881e-04f, -5.870674432e-04f, -5.869617904e-04f,
+-5.868551299e-04f, -5.867474621e-04f, -5.866387872e-04f, -5.865291054e-04f, -5.864184170e-04f, -5.863067222e-04f, -5.861940214e-04f, -5.860803147e-04f, -5.859656025e-04f, -5.858498849e-04f,
+-5.857331624e-04f, -5.856154351e-04f, -5.854967032e-04f, -5.853769672e-04f, -5.852562272e-04f, -5.851344836e-04f, -5.850117366e-04f, -5.848879864e-04f, -5.847632334e-04f, -5.846374779e-04f,
+-5.845107201e-04f, -5.843829604e-04f, -5.842541989e-04f, -5.841244360e-04f, -5.839936721e-04f, -5.838619073e-04f, -5.837291419e-04f, -5.835953764e-04f, -5.834606109e-04f, -5.833248458e-04f,
+-5.831880814e-04f, -5.830503179e-04f, -5.829115558e-04f, -5.827717952e-04f, -5.826310365e-04f, -5.824892800e-04f, -5.823465260e-04f, -5.822027749e-04f, -5.820580269e-04f, -5.819122823e-04f,
+-5.817655416e-04f, -5.816178049e-04f, -5.814690726e-04f, -5.813193452e-04f, -5.811686227e-04f, -5.810169057e-04f, -5.808641944e-04f, -5.807104891e-04f, -5.805557903e-04f, -5.804000981e-04f,
+-5.802434130e-04f, -5.800857354e-04f, -5.799270654e-04f, -5.797674035e-04f, -5.796067500e-04f, -5.794451053e-04f, -5.792824697e-04f, -5.791188436e-04f, -5.789542272e-04f, -5.787886210e-04f,
+-5.786220253e-04f, -5.784544405e-04f, -5.782858669e-04f, -5.781163048e-04f, -5.779457547e-04f, -5.777742168e-04f, -5.776016917e-04f, -5.774281795e-04f, -5.772536807e-04f, -5.770781957e-04f,
+-5.769017248e-04f, -5.767242683e-04f, -5.765458268e-04f, -5.763664005e-04f, -5.761859898e-04f, -5.760045950e-04f, -5.758222167e-04f, -5.756388551e-04f, -5.754545106e-04f, -5.752691837e-04f,
+-5.750828747e-04f, -5.748955839e-04f, -5.747073118e-04f, -5.745180588e-04f, -5.743278253e-04f, -5.741366116e-04f, -5.739444182e-04f, -5.737512454e-04f, -5.735570937e-04f, -5.733619634e-04f,
+-5.731658550e-04f, -5.729687689e-04f, -5.727707054e-04f, -5.725716650e-04f, -5.723716480e-04f, -5.721706550e-04f, -5.719686863e-04f, -5.717657423e-04f, -5.715618234e-04f, -5.713569300e-04f,
+-5.711510627e-04f, -5.709442217e-04f, -5.707364076e-04f, -5.705276207e-04f, -5.703178614e-04f, -5.701071303e-04f, -5.698954277e-04f, -5.696827540e-04f, -5.694691097e-04f, -5.692544952e-04f,
+-5.690389110e-04f, -5.688223575e-04f, -5.686048351e-04f, -5.683863443e-04f, -5.681668855e-04f, -5.679464592e-04f, -5.677250657e-04f, -5.675027057e-04f, -5.672793794e-04f, -5.670550874e-04f,
+-5.668298300e-04f, -5.666036079e-04f, -5.663764213e-04f, -5.661482708e-04f, -5.659191569e-04f, -5.656890799e-04f, -5.654580404e-04f, -5.652260388e-04f, -5.649930756e-04f, -5.647591512e-04f,
+-5.645242661e-04f, -5.642884209e-04f, -5.640516159e-04f, -5.638138516e-04f, -5.635751285e-04f, -5.633354471e-04f, -5.630948079e-04f, -5.628532113e-04f, -5.626106578e-04f, -5.623671479e-04f,
+-5.621226822e-04f, -5.618772610e-04f, -5.616308849e-04f, -5.613835543e-04f, -5.611352697e-04f, -5.608860318e-04f, -5.606358408e-04f, -5.603846974e-04f, -5.601326020e-04f, -5.598795551e-04f,
+-5.596255573e-04f, -5.593706089e-04f, -5.591147107e-04f, -5.588578629e-04f, -5.586000662e-04f, -5.583413211e-04f, -5.580816280e-04f, -5.578209876e-04f, -5.575594002e-04f, -5.572968664e-04f,
+-5.570333867e-04f, -5.567689617e-04f, -5.565035919e-04f, -5.562372777e-04f, -5.559700197e-04f, -5.557018185e-04f, -5.554326746e-04f, -5.551625884e-04f, -5.548915606e-04f, -5.546195916e-04f,
+-5.543466820e-04f, -5.540728323e-04f, -5.537980430e-04f, -5.535223148e-04f, -5.532456481e-04f, -5.529680434e-04f, -5.526895014e-04f, -5.524100226e-04f, -5.521296074e-04f, -5.518482565e-04f,
+-5.515659704e-04f, -5.512827497e-04f, -5.509985948e-04f, -5.507135064e-04f, -5.504274851e-04f, -5.501405313e-04f, -5.498526456e-04f, -5.495638286e-04f, -5.492740809e-04f, -5.489834029e-04f,
+-5.486917954e-04f, -5.483992588e-04f, -5.481057937e-04f, -5.478114007e-04f, -5.475160803e-04f, -5.472198332e-04f, -5.469226599e-04f, -5.466245609e-04f, -5.463255369e-04f, -5.460255884e-04f,
+-5.457247160e-04f, -5.454229203e-04f, -5.451202019e-04f, -5.448165614e-04f, -5.445119993e-04f, -5.442065162e-04f, -5.439001128e-04f, -5.435927896e-04f, -5.432845471e-04f, -5.429753861e-04f,
+-5.426653071e-04f, -5.423543107e-04f, -5.420423975e-04f, -5.417295680e-04f, -5.414158230e-04f, -5.411011630e-04f, -5.407855885e-04f, -5.404691003e-04f, -5.401516989e-04f, -5.398333850e-04f,
+-5.395141590e-04f, -5.391940218e-04f, -5.388729738e-04f, -5.385510157e-04f, -5.382281480e-04f, -5.379043716e-04f, -5.375796868e-04f, -5.372540944e-04f, -5.369275950e-04f, -5.366001892e-04f,
+-5.362718777e-04f, -5.359426610e-04f, -5.356125398e-04f, -5.352815147e-04f, -5.349495864e-04f, -5.346167555e-04f, -5.342830227e-04f, -5.339483885e-04f, -5.336128535e-04f, -5.332764186e-04f,
+-5.329390842e-04f, -5.326008511e-04f, -5.322617198e-04f, -5.319216911e-04f, -5.315807655e-04f, -5.312389437e-04f, -5.308962265e-04f, -5.305526143e-04f, -5.302081079e-04f, -5.298627080e-04f,
+-5.295164151e-04f, -5.291692300e-04f, -5.288211533e-04f, -5.284721856e-04f, -5.281223277e-04f, -5.277715802e-04f, -5.274199437e-04f, -5.270674190e-04f, -5.267140067e-04f, -5.263597074e-04f,
+-5.260045219e-04f, -5.256484508e-04f, -5.252914947e-04f, -5.249336545e-04f, -5.245749307e-04f, -5.242153240e-04f, -5.238548351e-04f, -5.234934646e-04f, -5.231312134e-04f, -5.227680820e-04f,
+-5.224040711e-04f, -5.220391815e-04f, -5.216734138e-04f, -5.213067686e-04f, -5.209392468e-04f, -5.205708490e-04f, -5.202015759e-04f, -5.198314281e-04f, -5.194604065e-04f, -5.190885116e-04f,
+-5.187157442e-04f, -5.183421050e-04f, -5.179675947e-04f, -5.175922140e-04f, -5.172159636e-04f, -5.168388442e-04f, -5.164608565e-04f, -5.160820012e-04f, -5.157022792e-04f, -5.153216909e-04f,
+-5.149402373e-04f, -5.145579189e-04f, -5.141747366e-04f, -5.137906910e-04f, -5.134057828e-04f, -5.130200129e-04f, -5.126333818e-04f, -5.122458904e-04f, -5.118575393e-04f, -5.114683293e-04f,
+-5.110782611e-04f, -5.106873355e-04f, -5.102955532e-04f, -5.099029148e-04f, -5.095094212e-04f, -5.091150732e-04f, -5.087198713e-04f, -5.083238164e-04f, -5.079269092e-04f, -5.075291505e-04f,
+-5.071305410e-04f, -5.067310814e-04f, -5.063307725e-04f, -5.059296150e-04f, -5.055276098e-04f, -5.051247574e-04f, -5.047210588e-04f, -5.043165146e-04f, -5.039111257e-04f, -5.035048926e-04f,
+-5.030978164e-04f, -5.026898976e-04f, -5.022811370e-04f, -5.018715354e-04f, -5.014610936e-04f, -5.010498124e-04f, -5.006376925e-04f, -5.002247346e-04f, -4.998109395e-04f, -4.993963081e-04f,
+-4.989808411e-04f, -4.985645392e-04f, -4.981474033e-04f, -4.977294341e-04f, -4.973106323e-04f, -4.968909989e-04f, -4.964705345e-04f, -4.960492399e-04f, -4.956271159e-04f, -4.952041634e-04f,
+-4.947803830e-04f, -4.943557756e-04f, -4.939303420e-04f, -4.935040829e-04f, -4.930769992e-04f, -4.926490917e-04f, -4.922203610e-04f, -4.917908081e-04f, -4.913604338e-04f, -4.909292387e-04f,
+-4.904972238e-04f, -4.900643899e-04f, -4.896307377e-04f, -4.891962680e-04f, -4.887609816e-04f, -4.883248794e-04f, -4.878879622e-04f, -4.874502308e-04f, -4.870116859e-04f, -4.865723284e-04f,
+-4.861321592e-04f, -4.856911789e-04f, -4.852493885e-04f, -4.848067888e-04f, -4.843633805e-04f, -4.839191646e-04f, -4.834741417e-04f, -4.830283129e-04f, -4.825816787e-04f, -4.821342402e-04f,
+-4.816859981e-04f, -4.812369533e-04f, -4.807871065e-04f, -4.803364586e-04f, -4.798850105e-04f, -4.794327630e-04f, -4.789797169e-04f, -4.785258730e-04f, -4.780712322e-04f, -4.776157954e-04f,
+-4.771595633e-04f, -4.767025369e-04f, -4.762447169e-04f, -4.757861041e-04f, -4.753266996e-04f, -4.748665040e-04f, -4.744055183e-04f, -4.739437432e-04f, -4.734811797e-04f, -4.730178286e-04f,
+-4.725536908e-04f, -4.720887670e-04f, -4.716230583e-04f, -4.711565653e-04f, -4.706892890e-04f, -4.702212302e-04f, -4.697523899e-04f, -4.692827688e-04f, -4.688123678e-04f, -4.683411878e-04f,
+-4.678692297e-04f, -4.673964943e-04f, -4.669229824e-04f, -4.664486951e-04f, -4.659736331e-04f, -4.654977973e-04f, -4.650211886e-04f, -4.645438078e-04f, -4.640656559e-04f, -4.635867337e-04f,
+-4.631070421e-04f, -4.626265820e-04f, -4.621453542e-04f, -4.616633597e-04f, -4.611805992e-04f, -4.606970739e-04f, -4.602127844e-04f, -4.597277316e-04f, -4.592419166e-04f, -4.587553401e-04f,
+-4.582680031e-04f, -4.577799065e-04f, -4.572910511e-04f, -4.568014378e-04f, -4.563110676e-04f, -4.558199413e-04f, -4.553280599e-04f, -4.548354242e-04f, -4.543420351e-04f, -4.538478936e-04f,
+-4.533530005e-04f, -4.528573568e-04f, -4.523609633e-04f, -4.518638211e-04f, -4.513659309e-04f, -4.508672937e-04f, -4.503679104e-04f, -4.498677819e-04f, -4.493669091e-04f, -4.488652930e-04f,
+-4.483629345e-04f, -4.478598344e-04f, -4.473559938e-04f, -4.468514134e-04f, -4.463460944e-04f, -4.458400374e-04f, -4.453332436e-04f, -4.448257138e-04f, -4.443174489e-04f, -4.438084499e-04f,
+-4.432987177e-04f, -4.427882533e-04f, -4.422770575e-04f, -4.417651313e-04f, -4.412524756e-04f, -4.407390914e-04f, -4.402249796e-04f, -4.397101411e-04f, -4.391945769e-04f, -4.386782879e-04f,
+-4.381612751e-04f, -4.376435394e-04f, -4.371250817e-04f, -4.366059030e-04f, -4.360860043e-04f, -4.355653864e-04f, -4.350440504e-04f, -4.345219971e-04f, -4.339992276e-04f, -4.334757427e-04f,
+-4.329515435e-04f, -4.324266309e-04f, -4.319010058e-04f, -4.313746692e-04f, -4.308476221e-04f, -4.303198654e-04f, -4.297914000e-04f, -4.292622270e-04f, -4.287323473e-04f, -4.282017619e-04f,
+-4.276704717e-04f, -4.271384777e-04f, -4.266057808e-04f, -4.260723821e-04f, -4.255382825e-04f, -4.250034829e-04f, -4.244679844e-04f, -4.239317879e-04f, -4.233948944e-04f, -4.228573048e-04f,
+-4.223190202e-04f, -4.217800415e-04f, -4.212403696e-04f, -4.207000057e-04f, -4.201589506e-04f, -4.196172053e-04f, -4.190747709e-04f, -4.185316482e-04f, -4.179878384e-04f, -4.174433423e-04f,
+-4.168981609e-04f, -4.163522953e-04f, -4.158057465e-04f, -4.152585154e-04f, -4.147106030e-04f, -4.141620103e-04f, -4.136127383e-04f, -4.130627880e-04f, -4.125121604e-04f, -4.119608565e-04f,
+-4.114088773e-04f, -4.108562238e-04f, -4.103028970e-04f, -4.097488979e-04f, -4.091942275e-04f, -4.086388867e-04f, -4.080828767e-04f, -4.075261984e-04f, -4.069688528e-04f, -4.064108410e-04f,
+-4.058521639e-04f, -4.052928225e-04f, -4.047328179e-04f, -4.041721511e-04f, -4.036108230e-04f, -4.030488348e-04f, -4.024861873e-04f, -4.019228817e-04f, -4.013589190e-04f, -4.007943001e-04f,
+-4.002290261e-04f, -3.996630980e-04f, -3.990965169e-04f, -3.985292837e-04f, -3.979613995e-04f, -3.973928653e-04f, -3.968236821e-04f, -3.962538510e-04f, -3.956833730e-04f, -3.951122491e-04f,
+-3.945404804e-04f, -3.939680678e-04f, -3.933950125e-04f, -3.928213154e-04f, -3.922469775e-04f, -3.916720000e-04f, -3.910963839e-04f, -3.905201301e-04f, -3.899432398e-04f, -3.893657139e-04f,
+-3.887875536e-04f, -3.882087598e-04f, -3.876293336e-04f, -3.870492761e-04f, -3.864685882e-04f, -3.858872711e-04f, -3.853053258e-04f, -3.847227533e-04f, -3.841395546e-04f, -3.835557309e-04f,
+-3.829712832e-04f, -3.823862125e-04f, -3.818005199e-04f, -3.812142065e-04f, -3.806272732e-04f, -3.800397212e-04f, -3.794515515e-04f, -3.788627651e-04f, -3.782733632e-04f, -3.776833468e-04f,
+-3.770927169e-04f, -3.765014746e-04f, -3.759096210e-04f, -3.753171571e-04f, -3.747240841e-04f, -3.741304029e-04f, -3.735361146e-04f, -3.729412204e-04f, -3.723457212e-04f, -3.717496181e-04f,
+-3.711529123e-04f, -3.705556048e-04f, -3.699576966e-04f, -3.693591889e-04f, -3.687600826e-04f, -3.681603790e-04f, -3.675600790e-04f, -3.669591837e-04f, -3.663576943e-04f, -3.657556117e-04f,
+-3.651529372e-04f, -3.645496717e-04f, -3.639458163e-04f, -3.633413721e-04f, -3.627363403e-04f, -3.621307219e-04f, -3.615245179e-04f, -3.609177295e-04f, -3.603103578e-04f, -3.597024038e-04f,
+-3.590938687e-04f, -3.584847535e-04f, -3.578750593e-04f, -3.572647872e-04f, -3.566539383e-04f, -3.560425137e-04f, -3.554305146e-04f, -3.548179419e-04f, -3.542047968e-04f, -3.535910804e-04f,
+-3.529767937e-04f, -3.523619380e-04f, -3.517465143e-04f, -3.511305236e-04f, -3.505139672e-04f, -3.498968460e-04f, -3.492791612e-04f, -3.486609140e-04f, -3.480421054e-04f, -3.474227365e-04f,
+-3.468028084e-04f, -3.461823222e-04f, -3.455612792e-04f, -3.449396802e-04f, -3.443175266e-04f, -3.436948193e-04f, -3.430715596e-04f, -3.424477484e-04f, -3.418233870e-04f, -3.411984764e-04f,
+-3.405730178e-04f, -3.399470123e-04f, -3.393204610e-04f, -3.386933650e-04f, -3.380657254e-04f, -3.374375434e-04f, -3.368088201e-04f, -3.361795566e-04f, -3.355497541e-04f, -3.349194136e-04f,
+-3.342885362e-04f, -3.336571232e-04f, -3.330251756e-04f, -3.323926946e-04f, -3.317596813e-04f, -3.311261368e-04f, -3.304920623e-04f, -3.298574589e-04f, -3.292223276e-04f, -3.285866698e-04f,
+-3.279504864e-04f, -3.273137786e-04f, -3.266765477e-04f, -3.260387946e-04f, -3.254005205e-04f, -3.247617266e-04f, -3.241224140e-04f, -3.234825839e-04f, -3.228422374e-04f, -3.222013756e-04f,
+-3.215599997e-04f, -3.209181108e-04f, -3.202757100e-04f, -3.196327986e-04f, -3.189893776e-04f, -3.183454483e-04f, -3.177010117e-04f, -3.170560690e-04f, -3.164106213e-04f, -3.157646698e-04f,
+-3.151182157e-04f, -3.144712601e-04f, -3.138238041e-04f, -3.131758489e-04f, -3.125273957e-04f, -3.118784456e-04f, -3.112289998e-04f, -3.105790594e-04f, -3.099286255e-04f, -3.092776994e-04f,
+-3.086262822e-04f, -3.079743751e-04f, -3.073219792e-04f, -3.066690956e-04f, -3.060157256e-04f, -3.053618703e-04f, -3.047075308e-04f, -3.040527084e-04f, -3.033974042e-04f, -3.027416193e-04f,
+-3.020853549e-04f, -3.014286123e-04f, -3.007713925e-04f, -3.001136967e-04f, -2.994555261e-04f, -2.987968819e-04f, -2.981377652e-04f, -2.974781772e-04f, -2.968181191e-04f, -2.961575920e-04f,
+-2.954965972e-04f, -2.948351358e-04f, -2.941732089e-04f, -2.935108178e-04f, -2.928479636e-04f, -2.921846475e-04f, -2.915208707e-04f, -2.908566343e-04f, -2.901919396e-04f, -2.895267877e-04f,
+-2.888611798e-04f, -2.881951171e-04f, -2.875286008e-04f, -2.868616319e-04f, -2.861942119e-04f, -2.855263417e-04f, -2.848580226e-04f, -2.841892558e-04f, -2.835200425e-04f, -2.828503838e-04f,
+-2.821802810e-04f, -2.815097352e-04f, -2.808387476e-04f, -2.801673194e-04f, -2.794954519e-04f, -2.788231461e-04f, -2.781504033e-04f, -2.774772247e-04f, -2.768036115e-04f, -2.761295648e-04f,
+-2.754550859e-04f, -2.747801759e-04f, -2.741048361e-04f, -2.734290676e-04f, -2.727528717e-04f, -2.720762495e-04f, -2.713992022e-04f, -2.707217311e-04f, -2.700438373e-04f, -2.693655221e-04f,
+-2.686867865e-04f, -2.680076320e-04f, -2.673280596e-04f, -2.666480705e-04f, -2.659676659e-04f, -2.652868472e-04f, -2.646056153e-04f, -2.639239717e-04f, -2.632419174e-04f, -2.625594537e-04f,
+-2.618765818e-04f, -2.611933028e-04f, -2.605096181e-04f, -2.598255288e-04f, -2.591410361e-04f, -2.584561412e-04f, -2.577708454e-04f, -2.570851498e-04f, -2.563990557e-04f, -2.557125642e-04f,
+-2.550256767e-04f, -2.543383942e-04f, -2.536507181e-04f, -2.529626495e-04f, -2.522741897e-04f, -2.515853399e-04f, -2.508961012e-04f, -2.502064749e-04f, -2.495164623e-04f, -2.488260645e-04f,
+-2.481352827e-04f, -2.474441182e-04f, -2.467525723e-04f, -2.460606460e-04f, -2.453683407e-04f, -2.446756576e-04f, -2.439825979e-04f, -2.432891627e-04f, -2.425953534e-04f, -2.419011712e-04f,
+-2.412066173e-04f, -2.405116928e-04f, -2.398163992e-04f, -2.391207374e-04f, -2.384247089e-04f, -2.377283148e-04f, -2.370315563e-04f, -2.363344347e-04f, -2.356369513e-04f, -2.349391071e-04f,
+-2.342409036e-04f, -2.335423418e-04f, -2.328434231e-04f, -2.321441486e-04f, -2.314445197e-04f, -2.307445374e-04f, -2.300442032e-04f, -2.293435181e-04f, -2.286424835e-04f, -2.279411005e-04f,
+-2.272393705e-04f, -2.265372946e-04f, -2.258348740e-04f, -2.251321101e-04f, -2.244290041e-04f, -2.237255571e-04f, -2.230217705e-04f, -2.223176454e-04f, -2.216131832e-04f, -2.209083850e-04f,
+-2.202032521e-04f, -2.194977857e-04f, -2.187919872e-04f, -2.180858576e-04f, -2.173793983e-04f, -2.166726105e-04f, -2.159654955e-04f, -2.152580545e-04f, -2.145502887e-04f, -2.138421994e-04f,
+-2.131337878e-04f, -2.124250552e-04f, -2.117160028e-04f, -2.110066320e-04f, -2.102969438e-04f, -2.095869396e-04f, -2.088766206e-04f, -2.081659881e-04f, -2.074550433e-04f, -2.067437875e-04f,
+-2.060322219e-04f, -2.053203477e-04f, -2.046081663e-04f, -2.038956789e-04f, -2.031828866e-04f, -2.024697909e-04f, -2.017563929e-04f, -2.010426939e-04f, -2.003286951e-04f, -1.996143978e-04f,
+-1.988998033e-04f, -1.981849127e-04f, -1.974697275e-04f, -1.967542487e-04f, -1.960384777e-04f, -1.953224158e-04f, -1.946060641e-04f, -1.938894240e-04f, -1.931724967e-04f, -1.924552834e-04f,
+-1.917377855e-04f, -1.910200042e-04f, -1.903019407e-04f, -1.895835963e-04f, -1.888649722e-04f, -1.881460698e-04f, -1.874268903e-04f, -1.867074349e-04f, -1.859877050e-04f, -1.852677017e-04f,
+-1.845474263e-04f, -1.838268802e-04f, -1.831060645e-04f, -1.823849805e-04f, -1.816636296e-04f, -1.809420129e-04f, -1.802201317e-04f, -1.794979873e-04f, -1.787755810e-04f, -1.780529140e-04f,
+-1.773299876e-04f, -1.766068030e-04f, -1.758833616e-04f, -1.751596645e-04f, -1.744357132e-04f, -1.737115087e-04f, -1.729870525e-04f, -1.722623457e-04f, -1.715373897e-04f, -1.708121856e-04f,
+-1.700867349e-04f, -1.693610387e-04f, -1.686350983e-04f, -1.679089150e-04f, -1.671824901e-04f, -1.664558248e-04f, -1.657289205e-04f, -1.650017783e-04f, -1.642743996e-04f, -1.635467856e-04f,
+-1.628189376e-04f, -1.620908568e-04f, -1.613625447e-04f, -1.606340023e-04f, -1.599052311e-04f, -1.591762322e-04f, -1.584470070e-04f, -1.577175568e-04f, -1.569878827e-04f, -1.562579861e-04f,
+-1.555278683e-04f, -1.547975305e-04f, -1.540669740e-04f, -1.533362001e-04f, -1.526052101e-04f, -1.518740052e-04f, -1.511425868e-04f, -1.504109560e-04f, -1.496791143e-04f, -1.489470628e-04f,
+-1.482148028e-04f, -1.474823357e-04f, -1.467496627e-04f, -1.460167851e-04f, -1.452837041e-04f, -1.445504211e-04f, -1.438169373e-04f, -1.430832540e-04f, -1.423493725e-04f, -1.416152941e-04f,
+-1.408810201e-04f, -1.401465517e-04f, -1.394118902e-04f, -1.386770369e-04f, -1.379419931e-04f, -1.372067601e-04f, -1.364713391e-04f, -1.357357315e-04f, -1.349999385e-04f, -1.342639614e-04f,
+-1.335278015e-04f, -1.327914601e-04f, -1.320549384e-04f, -1.313182378e-04f, -1.305813596e-04f, -1.298443049e-04f, -1.291070752e-04f, -1.283696717e-04f, -1.276320956e-04f, -1.268943483e-04f,
+-1.261564311e-04f, -1.254183452e-04f, -1.246800920e-04f, -1.239416726e-04f, -1.232030885e-04f, -1.224643409e-04f, -1.217254310e-04f, -1.209863602e-04f, -1.202471298e-04f, -1.195077410e-04f,
+-1.187681952e-04f, -1.180284936e-04f, -1.172886375e-04f, -1.165486282e-04f, -1.158084670e-04f, -1.150681552e-04f, -1.143276941e-04f, -1.135870849e-04f, -1.128463290e-04f, -1.121054277e-04f,
+-1.113643822e-04f, -1.106231938e-04f, -1.098818638e-04f, -1.091403936e-04f, -1.083987843e-04f, -1.076570373e-04f, -1.069151540e-04f, -1.061731355e-04f, -1.054309831e-04f, -1.046886983e-04f,
+-1.039462822e-04f, -1.032037361e-04f, -1.024610614e-04f, -1.017182593e-04f, -1.009753311e-04f, -1.002322782e-04f, -9.948910175e-05f, -9.874580312e-05f, -9.800238358e-05f, -9.725884444e-05f,
+-9.651518699e-05f, -9.577141251e-05f, -9.502752231e-05f, -9.428351767e-05f, -9.353939990e-05f, -9.279517028e-05f, -9.205083011e-05f, -9.130638068e-05f, -9.056182329e-05f, -8.981715924e-05f,
+-8.907238981e-05f, -8.832751631e-05f, -8.758254002e-05f, -8.683746224e-05f, -8.609228428e-05f, -8.534700741e-05f, -8.460163294e-05f, -8.385616217e-05f, -8.311059638e-05f, -8.236493688e-05f,
+-8.161918496e-05f, -8.087334191e-05f, -8.012740904e-05f, -7.938138763e-05f, -7.863527898e-05f, -7.788908440e-05f, -7.714280516e-05f, -7.639644258e-05f, -7.564999795e-05f, -7.490347255e-05f,
+-7.415686770e-05f, -7.341018468e-05f, -7.266342479e-05f, -7.191658933e-05f, -7.116967960e-05f, -7.042269688e-05f, -6.967564248e-05f, -6.892851770e-05f, -6.818132383e-05f, -6.743406216e-05f,
+-6.668673399e-05f, -6.593934063e-05f, -6.519188336e-05f, -6.444436349e-05f, -6.369678230e-05f, -6.294914111e-05f, -6.220144119e-05f, -6.145368386e-05f, -6.070587040e-05f, -5.995800212e-05f,
+-5.921008030e-05f, -5.846210626e-05f, -5.771408128e-05f, -5.696600665e-05f, -5.621788369e-05f, -5.546971368e-05f, -5.472149792e-05f, -5.397323771e-05f, -5.322493435e-05f, -5.247658912e-05f,
+-5.172820334e-05f, -5.097977829e-05f, -5.023131527e-05f, -4.948281558e-05f, -4.873428051e-05f, -4.798571136e-05f, -4.723710944e-05f, -4.648847603e-05f, -4.573981242e-05f, -4.499111993e-05f,
+-4.424239984e-05f, -4.349365345e-05f, -4.274488206e-05f, -4.199608697e-05f, -4.124726946e-05f, -4.049843084e-05f, -3.974957239e-05f, -3.900069543e-05f, -3.825180125e-05f, -3.750289113e-05f,
+-3.675396638e-05f, -3.600502829e-05f, -3.525607816e-05f, -3.450711728e-05f, -3.375814695e-05f, -3.300916847e-05f, -3.226018313e-05f, -3.151119223e-05f, -3.076219705e-05f, -3.001319891e-05f,
+-2.926419908e-05f, -2.851519888e-05f, -2.776619958e-05f, -2.701720250e-05f, -2.626820891e-05f, -2.551922013e-05f, -2.477023743e-05f, -2.402126212e-05f, -2.327229550e-05f, -2.252333885e-05f,
+-2.177439347e-05f, -2.102546065e-05f, -2.027654169e-05f, -1.952763788e-05f, -1.877875052e-05f, -1.802988090e-05f, -1.728103032e-05f, -1.653220006e-05f, -1.578339142e-05f, -1.503460569e-05f,
+-1.428584417e-05f, -1.353710815e-05f, -1.278839893e-05f, -1.203971779e-05f, -1.129106602e-05f, -1.054244493e-05f, -9.793855802e-06f, -9.045299928e-06f, -8.296778602e-06f, -7.548293115e-06f,
+-6.799844759e-06f, -6.051434825e-06f, -5.303064606e-06f, -4.554735392e-06f, -3.806448474e-06f, -3.058205144e-06f, -2.310006692e-06f, -1.561854410e-06f, -8.137495866e-07f, -6.569351339e-08f,
+6.823125199e-07f, 1.430267223e-06f, 2.178169307e-06f, 2.926017480e-06f, 3.673810456e-06f, 4.421546942e-06f, 5.169225652e-06f, 5.916845295e-06f, 6.664404584e-06f, 7.411902229e-06f,
+8.159336942e-06f, 8.906707436e-06f, 9.654012421e-06f, 1.040125061e-05f, 1.114842072e-05f, 1.189552145e-05f, 1.264255153e-05f, 1.338950967e-05f, 1.413639457e-05f, 1.488320496e-05f,
+1.562993954e-05f, 1.637659703e-05f, 1.712317615e-05f, 1.786967560e-05f, 1.861609411e-05f, 1.936243038e-05f, 2.010868314e-05f, 2.085485110e-05f, 2.160093297e-05f, 2.234692747e-05f,
+2.309283331e-05f, 2.383864922e-05f, 2.458437390e-05f, 2.533000608e-05f, 2.607554448e-05f, 2.682098780e-05f, 2.756633477e-05f, 2.831158410e-05f, 2.905673451e-05f, 2.980178473e-05f,
+3.054673346e-05f, 3.129157943e-05f, 3.203632136e-05f, 3.278095797e-05f, 3.352548797e-05f, 3.426991008e-05f, 3.501422304e-05f, 3.575842554e-05f, 3.650251633e-05f, 3.724649411e-05f,
+3.799035761e-05f, 3.873410555e-05f, 3.947773665e-05f, 4.022124963e-05f, 4.096464322e-05f, 4.170791614e-05f, 4.245106712e-05f, 4.319409486e-05f, 4.393699811e-05f, 4.467977558e-05f,
+4.542242599e-05f, 4.616494808e-05f, 4.690734056e-05f, 4.764960216e-05f, 4.839173161e-05f, 4.913372763e-05f, 4.987558895e-05f, 5.061731429e-05f, 5.135890238e-05f, 5.210035196e-05f,
+5.284166173e-05f, 5.358283044e-05f, 5.432385681e-05f, 5.506473957e-05f, 5.580547744e-05f, 5.654606916e-05f, 5.728651346e-05f, 5.802680906e-05f, 5.876695470e-05f, 5.950694910e-05f,
+6.024679100e-05f, 6.098647913e-05f, 6.172601221e-05f, 6.246538899e-05f, 6.320460818e-05f, 6.394366854e-05f, 6.468256878e-05f, 6.542130764e-05f, 6.615988385e-05f, 6.689829615e-05f,
+6.763654328e-05f, 6.837462396e-05f, 6.911253693e-05f, 6.985028093e-05f, 7.058785469e-05f, 7.132525696e-05f, 7.206248645e-05f, 7.279954192e-05f, 7.353642210e-05f, 7.427312573e-05f,
+7.500965154e-05f, 7.574599828e-05f, 7.648216468e-05f, 7.721814948e-05f, 7.795395142e-05f, 7.868956924e-05f, 7.942500169e-05f, 8.016024750e-05f, 8.089530541e-05f, 8.163017417e-05f,
+8.236485251e-05f, 8.309933919e-05f, 8.383363294e-05f, 8.456773250e-05f, 8.530163662e-05f, 8.603534405e-05f, 8.676885353e-05f, 8.750216380e-05f, 8.823527361e-05f, 8.896818171e-05f,
+8.970088684e-05f, 9.043338774e-05f, 9.116568317e-05f, 9.189777187e-05f, 9.262965260e-05f, 9.336132409e-05f, 9.409278510e-05f, 9.482403438e-05f, 9.555507068e-05f, 9.628589275e-05f,
+9.701649933e-05f, 9.774688918e-05f, 9.847706106e-05f, 9.920701370e-05f, 9.993674588e-05f, 1.006662563e-04f, 1.013955438e-04f, 1.021246071e-04f, 1.028534449e-04f, 1.035820560e-04f,
+1.043104392e-04f, 1.050385931e-04f, 1.057665167e-04f, 1.064942085e-04f, 1.072216675e-04f, 1.079488922e-04f, 1.086758816e-04f, 1.094026343e-04f, 1.101291491e-04f, 1.108554248e-04f,
+1.115814601e-04f, 1.123072539e-04f, 1.130328047e-04f, 1.137581115e-04f, 1.144831730e-04f, 1.152079879e-04f, 1.159325550e-04f, 1.166568731e-04f, 1.173809409e-04f, 1.181047572e-04f,
+1.188283208e-04f, 1.195516304e-04f, 1.202746848e-04f, 1.209974828e-04f, 1.217200230e-04f, 1.224423044e-04f, 1.231643257e-04f, 1.238860856e-04f, 1.246075829e-04f, 1.253288163e-04f,
+1.260497847e-04f, 1.267704869e-04f, 1.274909215e-04f, 1.282110873e-04f, 1.289309832e-04f, 1.296506080e-04f, 1.303699603e-04f, 1.310890389e-04f, 1.318078427e-04f, 1.325263704e-04f,
+1.332446207e-04f, 1.339625926e-04f, 1.346802846e-04f, 1.353976957e-04f, 1.361148245e-04f, 1.368316700e-04f, 1.375482308e-04f, 1.382645057e-04f, 1.389804935e-04f, 1.396961930e-04f,
+1.404116030e-04f, 1.411267223e-04f, 1.418415496e-04f, 1.425560837e-04f, 1.432703234e-04f, 1.439842675e-04f, 1.446979148e-04f, 1.454112641e-04f, 1.461243141e-04f, 1.468370636e-04f,
+1.475495115e-04f, 1.482616565e-04f, 1.489734973e-04f, 1.496850329e-04f, 1.503962620e-04f, 1.511071833e-04f, 1.518177957e-04f, 1.525280980e-04f, 1.532380889e-04f, 1.539477672e-04f,
+1.546571318e-04f, 1.553661814e-04f, 1.560749148e-04f, 1.567833309e-04f, 1.574914284e-04f, 1.581992061e-04f, 1.589066628e-04f, 1.596137973e-04f, 1.603206084e-04f, 1.610270950e-04f,
+1.617332557e-04f, 1.624390895e-04f, 1.631445951e-04f, 1.638497713e-04f, 1.645546169e-04f, 1.652591307e-04f, 1.659633116e-04f, 1.666671582e-04f, 1.673706696e-04f, 1.680738443e-04f,
+1.687766813e-04f, 1.694791794e-04f, 1.701813373e-04f, 1.708831539e-04f, 1.715846280e-04f, 1.722857584e-04f, 1.729865439e-04f, 1.736869833e-04f, 1.743870754e-04f, 1.750868190e-04f,
+1.757862131e-04f, 1.764852562e-04f, 1.771839474e-04f, 1.778822854e-04f, 1.785802689e-04f, 1.792778969e-04f, 1.799751682e-04f, 1.806720815e-04f, 1.813686357e-04f, 1.820648296e-04f,
+1.827606620e-04f, 1.834561318e-04f, 1.841512378e-04f, 1.848459787e-04f, 1.855403535e-04f, 1.862343609e-04f, 1.869279997e-04f, 1.876212689e-04f, 1.883141671e-04f, 1.890066933e-04f,
+1.896988463e-04f, 1.903906249e-04f, 1.910820278e-04f, 1.917730541e-04f, 1.924637024e-04f, 1.931539717e-04f, 1.938438607e-04f, 1.945333683e-04f, 1.952224933e-04f, 1.959112345e-04f,
+1.965995909e-04f, 1.972875611e-04f, 1.979751441e-04f, 1.986623387e-04f, 1.993491438e-04f, 2.000355581e-04f, 2.007215805e-04f, 2.014072099e-04f, 2.020924450e-04f, 2.027772848e-04f,
+2.034617281e-04f, 2.041457737e-04f, 2.048294204e-04f, 2.055126672e-04f, 2.061955128e-04f, 2.068779561e-04f, 2.075599959e-04f, 2.082416312e-04f, 2.089228607e-04f, 2.096036832e-04f,
+2.102840978e-04f, 2.109641031e-04f, 2.116436980e-04f, 2.123228815e-04f, 2.130016523e-04f, 2.136800093e-04f, 2.143579513e-04f, 2.150354773e-04f, 2.157125861e-04f, 2.163892764e-04f,
+2.170655473e-04f, 2.177413975e-04f, 2.184168259e-04f, 2.190918314e-04f, 2.197664128e-04f, 2.204405690e-04f, 2.211142988e-04f, 2.217876012e-04f, 2.224604749e-04f, 2.231329189e-04f,
+2.238049320e-04f, 2.244765131e-04f, 2.251476610e-04f, 2.258183746e-04f, 2.264886528e-04f, 2.271584945e-04f, 2.278278985e-04f, 2.284968637e-04f, 2.291653890e-04f, 2.298334732e-04f,
+2.305011152e-04f, 2.311683139e-04f, 2.318350682e-04f, 2.325013769e-04f, 2.331672390e-04f, 2.338326533e-04f, 2.344976186e-04f, 2.351621339e-04f, 2.358261981e-04f, 2.364898099e-04f,
+2.371529684e-04f, 2.378156724e-04f, 2.384779208e-04f, 2.391397124e-04f, 2.398010462e-04f, 2.404619210e-04f, 2.411223357e-04f, 2.417822893e-04f, 2.424417805e-04f, 2.431008084e-04f,
+2.437593717e-04f, 2.444174694e-04f, 2.450751004e-04f, 2.457322635e-04f, 2.463889578e-04f, 2.470451819e-04f, 2.477009350e-04f, 2.483562157e-04f, 2.490110232e-04f, 2.496653561e-04f,
+2.503192136e-04f, 2.509725944e-04f, 2.516254974e-04f, 2.522779216e-04f, 2.529298659e-04f, 2.535813291e-04f, 2.542323102e-04f, 2.548828081e-04f, 2.555328216e-04f, 2.561823498e-04f,
+2.568313915e-04f, 2.574799455e-04f, 2.581280110e-04f, 2.587755866e-04f, 2.594226714e-04f, 2.600692643e-04f, 2.607153641e-04f, 2.613609699e-04f, 2.620060805e-04f, 2.626506948e-04f,
+2.632948117e-04f, 2.639384302e-04f, 2.645815492e-04f, 2.652241677e-04f, 2.658662844e-04f, 2.665078985e-04f, 2.671490087e-04f, 2.677896140e-04f, 2.684297133e-04f, 2.690693057e-04f,
+2.697083899e-04f, 2.703469649e-04f, 2.709850297e-04f, 2.716225831e-04f, 2.722596242e-04f, 2.728961518e-04f, 2.735321649e-04f, 2.741676624e-04f, 2.748026433e-04f, 2.754371064e-04f,
+2.760710508e-04f, 2.767044753e-04f, 2.773373790e-04f, 2.779697607e-04f, 2.786016193e-04f, 2.792329539e-04f, 2.798637634e-04f, 2.804940467e-04f, 2.811238027e-04f, 2.817530305e-04f,
+2.823817289e-04f, 2.830098969e-04f, 2.836375335e-04f, 2.842646376e-04f, 2.848912081e-04f, 2.855172441e-04f, 2.861427444e-04f, 2.867677080e-04f, 2.873921339e-04f, 2.880160210e-04f,
+2.886393683e-04f, 2.892621748e-04f, 2.898844393e-04f, 2.905061609e-04f, 2.911273386e-04f, 2.917479712e-04f, 2.923680578e-04f, 2.929875973e-04f, 2.936065887e-04f, 2.942250309e-04f,
+2.948429230e-04f, 2.954602638e-04f, 2.960770524e-04f, 2.966932877e-04f, 2.973089687e-04f, 2.979240944e-04f, 2.985386637e-04f, 2.991526756e-04f, 2.997661292e-04f, 3.003790233e-04f,
+3.009913569e-04f, 3.016031291e-04f, 3.022143388e-04f, 3.028249849e-04f, 3.034350666e-04f, 3.040445827e-04f, 3.046535322e-04f, 3.052619142e-04f, 3.058697275e-04f, 3.064769713e-04f,
+3.070836444e-04f, 3.076897459e-04f, 3.082952748e-04f, 3.089002301e-04f, 3.095046106e-04f, 3.101084156e-04f, 3.107116438e-04f, 3.113142944e-04f, 3.119163663e-04f, 3.125178586e-04f,
+3.131187702e-04f, 3.137191001e-04f, 3.143188473e-04f, 3.149180108e-04f, 3.155165897e-04f, 3.161145829e-04f, 3.167119895e-04f, 3.173088084e-04f, 3.179050387e-04f, 3.185006793e-04f,
+3.190957293e-04f, 3.196901877e-04f, 3.202840535e-04f, 3.208773257e-04f, 3.214700033e-04f, 3.220620854e-04f, 3.226535709e-04f, 3.232444589e-04f, 3.238347484e-04f, 3.244244384e-04f,
+3.250135279e-04f, 3.256020160e-04f, 3.261899016e-04f, 3.267771839e-04f, 3.273638618e-04f, 3.279499343e-04f, 3.285354005e-04f, 3.291202594e-04f, 3.297045101e-04f, 3.302881515e-04f,
+3.308711827e-04f, 3.314536028e-04f, 3.320354107e-04f, 3.326166055e-04f, 3.331971863e-04f, 3.337771520e-04f, 3.343565017e-04f, 3.349352345e-04f, 3.355133494e-04f, 3.360908455e-04f,
+3.366677217e-04f, 3.372439771e-04f, 3.378196108e-04f, 3.383946218e-04f, 3.389690092e-04f, 3.395427720e-04f, 3.401159092e-04f, 3.406884200e-04f, 3.412603033e-04f, 3.418315583e-04f,
+3.424021839e-04f, 3.429721793e-04f, 3.435415434e-04f, 3.441102754e-04f, 3.446783742e-04f, 3.452458391e-04f, 3.458126690e-04f, 3.463788629e-04f, 3.469444200e-04f, 3.475093393e-04f,
+3.480736199e-04f, 3.486372609e-04f, 3.492002612e-04f, 3.497626201e-04f, 3.503243365e-04f, 3.508854095e-04f, 3.514458383e-04f, 3.520056218e-04f, 3.525647592e-04f, 3.531232495e-04f,
+3.536810918e-04f, 3.542382852e-04f, 3.547948287e-04f, 3.553507215e-04f, 3.559059626e-04f, 3.564605512e-04f, 3.570144862e-04f, 3.575677669e-04f, 3.581203922e-04f, 3.586723612e-04f,
+3.592236731e-04f, 3.597743270e-04f, 3.603243219e-04f, 3.608736569e-04f, 3.614223311e-04f, 3.619703437e-04f, 3.625176937e-04f, 3.630643801e-04f, 3.636104022e-04f, 3.641557590e-04f,
+3.647004497e-04f, 3.652444732e-04f, 3.657878287e-04f, 3.663305154e-04f, 3.668725323e-04f, 3.674138786e-04f, 3.679545533e-04f, 3.684945556e-04f, 3.690338845e-04f, 3.695725392e-04f,
+3.701105188e-04f, 3.706478225e-04f, 3.711844492e-04f, 3.717203982e-04f, 3.722556686e-04f, 3.727902595e-04f, 3.733241700e-04f, 3.738573992e-04f, 3.743899462e-04f, 3.749218103e-04f,
+3.754529904e-04f, 3.759834858e-04f, 3.765132955e-04f, 3.770424188e-04f, 3.775708546e-04f, 3.780986022e-04f, 3.786256607e-04f, 3.791520292e-04f, 3.796777069e-04f, 3.802026929e-04f,
+3.807269863e-04f, 3.812505863e-04f, 3.817734921e-04f, 3.822957026e-04f, 3.828172172e-04f, 3.833380350e-04f, 3.838581550e-04f, 3.843775765e-04f, 3.848962985e-04f, 3.854143203e-04f,
+3.859316411e-04f, 3.864482598e-04f, 3.869641758e-04f, 3.874793881e-04f, 3.879938959e-04f, 3.885076984e-04f, 3.890207947e-04f, 3.895331840e-04f, 3.900448655e-04f, 3.905558383e-04f,
+3.910661015e-04f, 3.915756544e-04f, 3.920844961e-04f, 3.925926258e-04f, 3.931000427e-04f, 3.936067458e-04f, 3.941127345e-04f, 3.946180078e-04f, 3.951225650e-04f, 3.956264051e-04f,
+3.961295275e-04f, 3.966319312e-04f, 3.971336155e-04f, 3.976345795e-04f, 3.981348224e-04f, 3.986343434e-04f, 3.991331417e-04f, 3.996312165e-04f, 4.001285669e-04f, 4.006251921e-04f,
+4.011210914e-04f, 4.016162639e-04f, 4.021107089e-04f, 4.026044254e-04f, 4.030974127e-04f, 4.035896701e-04f, 4.040811966e-04f, 4.045719916e-04f, 4.050620542e-04f, 4.055513835e-04f,
+4.060399789e-04f, 4.065278394e-04f, 4.070149644e-04f, 4.075013530e-04f, 4.079870045e-04f, 4.084719180e-04f, 4.089560927e-04f, 4.094395279e-04f, 4.099222228e-04f, 4.104041766e-04f,
+4.108853885e-04f, 4.113658577e-04f, 4.118455835e-04f, 4.123245650e-04f, 4.128028015e-04f, 4.132802923e-04f, 4.137570365e-04f, 4.142330333e-04f, 4.147082820e-04f, 4.151827819e-04f,
+4.156565321e-04f, 4.161295319e-04f, 4.166017805e-04f, 4.170732772e-04f, 4.175440211e-04f, 4.180140116e-04f, 4.184832478e-04f, 4.189517290e-04f, 4.194194544e-04f, 4.198864234e-04f,
+4.203526350e-04f, 4.208180887e-04f, 4.212827835e-04f, 4.217467188e-04f, 4.222098938e-04f, 4.226723078e-04f, 4.231339600e-04f, 4.235948496e-04f, 4.240549760e-04f, 4.245143384e-04f,
+4.249729359e-04f, 4.254307680e-04f, 4.258878339e-04f, 4.263441327e-04f, 4.267996638e-04f, 4.272544265e-04f, 4.277084200e-04f, 4.281616435e-04f, 4.286140964e-04f, 4.290657779e-04f,
+4.295166872e-04f, 4.299668238e-04f, 4.304161867e-04f, 4.308647754e-04f, 4.313125890e-04f, 4.317596269e-04f, 4.322058883e-04f, 4.326513725e-04f, 4.330960789e-04f, 4.335400066e-04f,
+4.339831550e-04f, 4.344255233e-04f, 4.348671109e-04f, 4.353079170e-04f, 4.357479409e-04f, 4.361871820e-04f, 4.366256394e-04f, 4.370633126e-04f, 4.375002007e-04f, 4.379363031e-04f,
+4.383716192e-04f, 4.388061481e-04f, 4.392398892e-04f, 4.396728418e-04f, 4.401050052e-04f, 4.405363787e-04f, 4.409669616e-04f, 4.413967533e-04f, 4.418257529e-04f, 4.422539600e-04f,
+4.426813737e-04f, 4.431079933e-04f, 4.435338182e-04f, 4.439588478e-04f, 4.443830813e-04f, 4.448065180e-04f, 4.452291572e-04f, 4.456509984e-04f, 4.460720408e-04f, 4.464922837e-04f,
+4.469117265e-04f, 4.473303685e-04f, 4.477482089e-04f, 4.481652473e-04f, 4.485814828e-04f, 4.489969149e-04f, 4.494115428e-04f, 4.498253659e-04f, 4.502383836e-04f, 4.506505951e-04f,
+4.510619998e-04f, 4.514725971e-04f, 4.518823863e-04f, 4.522913668e-04f, 4.526995378e-04f, 4.531068988e-04f, 4.535134491e-04f, 4.539191880e-04f, 4.543241149e-04f, 4.547282292e-04f,
+4.551315302e-04f, 4.555340173e-04f, 4.559356898e-04f, 4.563365470e-04f, 4.567365885e-04f, 4.571358134e-04f, 4.575342212e-04f, 4.579318112e-04f, 4.583285829e-04f, 4.587245355e-04f,
+4.591196685e-04f, 4.595139812e-04f, 4.599074730e-04f, 4.603001433e-04f, 4.606919914e-04f, 4.610830168e-04f, 4.614732187e-04f, 4.618625967e-04f, 4.622511500e-04f, 4.626388780e-04f,
+4.630257802e-04f, 4.634118559e-04f, 4.637971045e-04f, 4.641815254e-04f, 4.645651180e-04f, 4.649478817e-04f, 4.653298158e-04f, 4.657109199e-04f, 4.660911932e-04f, 4.664706351e-04f,
+4.668492452e-04f, 4.672270227e-04f, 4.676039671e-04f, 4.679800777e-04f, 4.683553540e-04f, 4.687297955e-04f, 4.691034014e-04f, 4.694761712e-04f, 4.698481044e-04f, 4.702192002e-04f,
+4.705894583e-04f, 4.709588779e-04f, 4.713274584e-04f, 4.716951994e-04f, 4.720621002e-04f, 4.724281602e-04f, 4.727933789e-04f, 4.731577557e-04f, 4.735212901e-04f, 4.738839813e-04f,
+4.742458290e-04f, 4.746068324e-04f, 4.749669911e-04f, 4.753263045e-04f, 4.756847719e-04f, 4.760423930e-04f, 4.763991670e-04f, 4.767550934e-04f, 4.771101717e-04f, 4.774644013e-04f,
+4.778177817e-04f, 4.781703123e-04f, 4.785219925e-04f, 4.788728218e-04f, 4.792227997e-04f, 4.795719255e-04f, 4.799201989e-04f, 4.802676191e-04f, 4.806141857e-04f, 4.809598981e-04f,
+4.813047558e-04f, 4.816487583e-04f, 4.819919050e-04f, 4.823341953e-04f, 4.826756288e-04f, 4.830162049e-04f, 4.833559230e-04f, 4.836947827e-04f, 4.840327835e-04f, 4.843699247e-04f,
+4.847062059e-04f, 4.850416265e-04f, 4.853761861e-04f, 4.857098840e-04f, 4.860427198e-04f, 4.863746930e-04f, 4.867058031e-04f, 4.870360494e-04f, 4.873654316e-04f, 4.876939491e-04f,
+4.880216014e-04f, 4.883483880e-04f, 4.886743084e-04f, 4.889993621e-04f, 4.893235485e-04f, 4.896468672e-04f, 4.899693177e-04f, 4.902908995e-04f, 4.906116120e-04f, 4.909314548e-04f,
+4.912504274e-04f, 4.915685293e-04f, 4.918857600e-04f, 4.922021190e-04f, 4.925176058e-04f, 4.928322200e-04f, 4.931459610e-04f, 4.934588283e-04f, 4.937708216e-04f, 4.940819403e-04f,
+4.943921839e-04f, 4.947015519e-04f, 4.950100439e-04f, 4.953176595e-04f, 4.956243980e-04f, 4.959302591e-04f, 4.962352423e-04f, 4.965393471e-04f, 4.968425730e-04f, 4.971449196e-04f,
+4.974463865e-04f, 4.977469731e-04f, 4.980466790e-04f, 4.983455037e-04f, 4.986434469e-04f, 4.989405079e-04f, 4.992366864e-04f, 4.995319820e-04f, 4.998263941e-04f, 5.001199223e-04f,
+5.004125662e-04f, 5.007043253e-04f, 5.009951993e-04f, 5.012851875e-04f, 5.015742896e-04f, 5.018625052e-04f, 5.021498338e-04f, 5.024362750e-04f, 5.027218283e-04f, 5.030064934e-04f,
+5.032902697e-04f, 5.035731568e-04f, 5.038551544e-04f, 5.041362619e-04f, 5.044164791e-04f, 5.046958053e-04f, 5.049742403e-04f, 5.052517836e-04f, 5.055284347e-04f, 5.058041933e-04f,
+5.060790589e-04f, 5.063530312e-04f, 5.066261097e-04f, 5.068982940e-04f, 5.071695836e-04f, 5.074399782e-04f, 5.077094775e-04f, 5.079780808e-04f, 5.082457880e-04f, 5.085125985e-04f,
+5.087785119e-04f, 5.090435279e-04f, 5.093076461e-04f, 5.095708661e-04f, 5.098331874e-04f, 5.100946097e-04f, 5.103551325e-04f, 5.106147556e-04f, 5.108734785e-04f, 5.111313008e-04f,
+5.113882221e-04f, 5.116442421e-04f, 5.118993604e-04f, 5.121535765e-04f, 5.124068902e-04f, 5.126593010e-04f, 5.129108086e-04f, 5.131614125e-04f, 5.134111125e-04f, 5.136599081e-04f,
+5.139077989e-04f, 5.141547847e-04f, 5.144008650e-04f, 5.146460395e-04f, 5.148903078e-04f, 5.151336696e-04f, 5.153761244e-04f, 5.156176720e-04f, 5.158583119e-04f, 5.160980439e-04f,
+5.163368675e-04f, 5.165747825e-04f, 5.168117884e-04f, 5.170478849e-04f, 5.172830717e-04f, 5.175173484e-04f, 5.177507147e-04f, 5.179831703e-04f, 5.182147147e-04f, 5.184453477e-04f,
+5.186750690e-04f, 5.189038781e-04f, 5.191317747e-04f, 5.193587586e-04f, 5.195848294e-04f, 5.198099867e-04f, 5.200342303e-04f, 5.202575597e-04f, 5.204799748e-04f, 5.207014751e-04f,
+5.209220603e-04f, 5.211417302e-04f, 5.213604843e-04f, 5.215783225e-04f, 5.217952443e-04f, 5.220112494e-04f, 5.222263376e-04f, 5.224405086e-04f, 5.226537619e-04f, 5.228660974e-04f,
+5.230775147e-04f, 5.232880134e-04f, 5.234975934e-04f, 5.237062543e-04f, 5.239139958e-04f, 5.241208176e-04f, 5.243267195e-04f, 5.245317010e-04f, 5.247357620e-04f, 5.249389021e-04f,
+5.251411210e-04f, 5.253424186e-04f, 5.255427943e-04f, 5.257422481e-04f, 5.259407796e-04f, 5.261383885e-04f, 5.263350745e-04f, 5.265308375e-04f, 5.267256770e-04f, 5.269195928e-04f,
+5.271125847e-04f, 5.273046523e-04f, 5.274957954e-04f, 5.276860138e-04f, 5.278753072e-04f, 5.280636752e-04f, 5.282511177e-04f, 5.284376343e-04f, 5.286232249e-04f, 5.288078892e-04f,
+5.289916268e-04f, 5.291744376e-04f, 5.293563213e-04f, 5.295372776e-04f, 5.297173063e-04f, 5.298964072e-04f, 5.300745799e-04f, 5.302518243e-04f, 5.304281401e-04f, 5.306035271e-04f,
+5.307779850e-04f, 5.309515136e-04f, 5.311241126e-04f, 5.312957818e-04f, 5.314665210e-04f, 5.316363300e-04f, 5.318052084e-04f, 5.319731562e-04f, 5.321401730e-04f, 5.323062586e-04f,
+5.324714128e-04f, 5.326356355e-04f, 5.327989262e-04f, 5.329612850e-04f, 5.331227114e-04f, 5.332832054e-04f, 5.334427666e-04f, 5.336013949e-04f, 5.337590901e-04f, 5.339158520e-04f,
+5.340716803e-04f, 5.342265749e-04f, 5.343805354e-04f, 5.345335619e-04f, 5.346856539e-04f, 5.348368114e-04f, 5.349870342e-04f, 5.351363219e-04f, 5.352846746e-04f, 5.354320918e-04f,
+5.355785735e-04f, 5.357241195e-04f, 5.358687296e-04f, 5.360124036e-04f, 5.361551413e-04f, 5.362969425e-04f, 5.364378070e-04f, 5.365777347e-04f, 5.367167254e-04f, 5.368547789e-04f,
+5.369918950e-04f, 5.371280736e-04f, 5.372633145e-04f, 5.373976174e-04f, 5.375309824e-04f, 5.376634091e-04f, 5.377948974e-04f, 5.379254471e-04f, 5.380550582e-04f, 5.381837303e-04f,
+5.383114635e-04f, 5.384382574e-04f, 5.385641120e-04f, 5.386890271e-04f, 5.388130025e-04f, 5.389360382e-04f, 5.390581338e-04f, 5.391792894e-04f, 5.392995047e-04f, 5.394187797e-04f,
+5.395371140e-04f, 5.396545077e-04f, 5.397709606e-04f, 5.398864726e-04f, 5.400010434e-04f, 5.401146730e-04f, 5.402273613e-04f, 5.403391081e-04f, 5.404499132e-04f, 5.405597766e-04f,
+5.406686981e-04f, 5.407766777e-04f, 5.408837151e-04f, 5.409898102e-04f, 5.410949630e-04f, 5.411991733e-04f, 5.413024410e-04f, 5.414047660e-04f, 5.415061482e-04f, 5.416065874e-04f,
+5.417060836e-04f, 5.418046366e-04f, 5.419022464e-04f, 5.419989128e-04f, 5.420946357e-04f, 5.421894150e-04f, 5.422832507e-04f, 5.423761426e-04f, 5.424680906e-04f, 5.425590946e-04f,
+5.426491546e-04f, 5.427382705e-04f, 5.428264421e-04f, 5.429136693e-04f, 5.429999522e-04f, 5.430852905e-04f, 5.431696842e-04f, 5.432531333e-04f, 5.433356377e-04f, 5.434171972e-04f,
+5.434978118e-04f, 5.435774814e-04f, 5.436562059e-04f, 5.437339853e-04f, 5.438108196e-04f, 5.438867085e-04f, 5.439616521e-04f, 5.440356504e-04f, 5.441087031e-04f, 5.441808103e-04f,
+5.442519720e-04f, 5.443221879e-04f, 5.443914582e-04f, 5.444597827e-04f, 5.445271614e-04f, 5.445935942e-04f, 5.446590811e-04f, 5.447236221e-04f, 5.447872170e-04f, 5.448498658e-04f,
+5.449115686e-04f, 5.449723252e-04f, 5.450321356e-04f, 5.450909997e-04f, 5.451489176e-04f, 5.452058892e-04f, 5.452619145e-04f, 5.453169933e-04f, 5.453711258e-04f, 5.454243118e-04f,
+5.454765514e-04f, 5.455278445e-04f, 5.455781910e-04f, 5.456275910e-04f, 5.456760445e-04f, 5.457235514e-04f, 5.457701117e-04f, 5.458157253e-04f, 5.458603924e-04f, 5.459041128e-04f,
+5.459468865e-04f, 5.459887136e-04f, 5.460295940e-04f, 5.460695277e-04f, 5.461085147e-04f, 5.461465551e-04f, 5.461836487e-04f, 5.462197957e-04f, 5.462549960e-04f, 5.462892496e-04f,
+5.463225565e-04f, 5.463549167e-04f, 5.463863303e-04f, 5.464167972e-04f, 5.464463174e-04f, 5.464748911e-04f, 5.465025181e-04f, 5.465291984e-04f, 5.465549323e-04f, 5.465797195e-04f,
+5.466035602e-04f, 5.466264544e-04f, 5.466484020e-04f, 5.466694032e-04f, 5.466894580e-04f, 5.467085663e-04f, 5.467267283e-04f, 5.467439439e-04f, 5.467602132e-04f, 5.467755362e-04f,
+5.467899129e-04f, 5.468033435e-04f, 5.468158279e-04f, 5.468273661e-04f, 5.468379583e-04f, 5.468476044e-04f, 5.468563046e-04f, 5.468640588e-04f, 5.468708671e-04f, 5.468767296e-04f,
+5.468816463e-04f, 5.468856173e-04f, 5.468886426e-04f, 5.468907223e-04f, 5.468918564e-04f, 5.468920451e-04f, 5.468912883e-04f, 5.468895862e-04f, 5.468869388e-04f, 5.468833461e-04f,
+5.468788083e-04f, 5.468733254e-04f, 5.468668975e-04f, 5.468595247e-04f, 5.468512070e-04f, 5.468419445e-04f, 5.468317373e-04f, 5.468205855e-04f, 5.468084892e-04f, 5.467954484e-04f,
+5.467814632e-04f, 5.467665338e-04f, 5.467506601e-04f, 5.467338424e-04f, 5.467160807e-04f, 5.466973750e-04f, 5.466777256e-04f, 5.466571324e-04f, 5.466355956e-04f, 5.466131153e-04f,
+5.465896916e-04f, 5.465653245e-04f, 5.465400143e-04f, 5.465137609e-04f, 5.464865646e-04f, 5.464584254e-04f, 5.464293434e-04f, 5.463993188e-04f, 5.463683517e-04f, 5.463364421e-04f,
+5.463035902e-04f, 5.462697962e-04f, 5.462350601e-04f, 5.461993820e-04f, 5.461627622e-04f, 5.461252006e-04f, 5.460866976e-04f, 5.460472530e-04f, 5.460068672e-04f, 5.459655403e-04f,
+5.459232723e-04f, 5.458800634e-04f, 5.458359138e-04f, 5.457908236e-04f, 5.457447929e-04f, 5.456978219e-04f, 5.456499107e-04f, 5.456010595e-04f, 5.455512684e-04f, 5.455005375e-04f,
+5.454488671e-04f, 5.453962573e-04f, 5.453427081e-04f, 5.452882199e-04f, 5.452327926e-04f, 5.451764266e-04f, 5.451191219e-04f, 5.450608788e-04f, 5.450016973e-04f, 5.449415777e-04f,
+5.448805201e-04f, 5.448185247e-04f, 5.447555916e-04f, 5.446917211e-04f, 5.446269133e-04f, 5.445611683e-04f, 5.444944864e-04f, 5.444268677e-04f, 5.443583125e-04f, 5.442888208e-04f,
+5.442183929e-04f, 5.441470290e-04f, 5.440747292e-04f, 5.440014938e-04f, 5.439273229e-04f, 5.438522167e-04f, 5.437761754e-04f, 5.436991992e-04f, 5.436212884e-04f, 5.435424430e-04f,
+5.434626633e-04f, 5.433819495e-04f, 5.433003019e-04f, 5.432177205e-04f, 5.431342057e-04f, 5.430497575e-04f, 5.429643763e-04f, 5.428780623e-04f, 5.427908156e-04f, 5.427026364e-04f,
+5.426135250e-04f, 5.425234817e-04f, 5.424325065e-04f, 5.423405998e-04f, 5.422477618e-04f, 5.421539926e-04f, 5.420592926e-04f, 5.419636618e-04f, 5.418671007e-04f, 5.417696093e-04f,
+5.416711880e-04f, 5.415718369e-04f, 5.414715563e-04f, 5.413703464e-04f, 5.412682075e-04f, 5.411651398e-04f, 5.410611435e-04f, 5.409562189e-04f, 5.408503663e-04f, 5.407435858e-04f,
+5.406358778e-04f, 5.405272424e-04f, 5.404176800e-04f, 5.403071907e-04f, 5.401957749e-04f, 5.400834328e-04f, 5.399701645e-04f, 5.398559705e-04f, 5.397408510e-04f, 5.396248062e-04f,
+5.395078363e-04f, 5.393899417e-04f, 5.392711227e-04f, 5.391513794e-04f, 5.390307121e-04f, 5.389091212e-04f, 5.387866069e-04f, 5.386631694e-04f, 5.385388091e-04f, 5.384135263e-04f,
+5.382873211e-04f, 5.381601939e-04f, 5.380321450e-04f, 5.379031746e-04f, 5.377732830e-04f, 5.376424706e-04f, 5.375107376e-04f, 5.373780843e-04f, 5.372445110e-04f, 5.371100179e-04f,
+5.369746055e-04f, 5.368382739e-04f, 5.367010235e-04f, 5.365628545e-04f, 5.364237673e-04f, 5.362837623e-04f, 5.361428395e-04f, 5.360009995e-04f, 5.358582425e-04f, 5.357145687e-04f,
+5.355699786e-04f, 5.354244724e-04f, 5.352780505e-04f, 5.351307130e-04f, 5.349824605e-04f, 5.348332931e-04f, 5.346832113e-04f, 5.345322153e-04f, 5.343803054e-04f, 5.342274820e-04f,
+5.340737454e-04f, 5.339190959e-04f, 5.337635339e-04f, 5.336070597e-04f, 5.334496736e-04f, 5.332913759e-04f, 5.331321671e-04f, 5.329720473e-04f, 5.328110170e-04f, 5.326490766e-04f,
+5.324862262e-04f, 5.323224664e-04f, 5.321577974e-04f, 5.319922196e-04f, 5.318257333e-04f, 5.316583389e-04f, 5.314900367e-04f, 5.313208271e-04f, 5.311507104e-04f, 5.309796870e-04f,
+5.308077572e-04f, 5.306349215e-04f, 5.304611801e-04f, 5.302865335e-04f, 5.301109819e-04f, 5.299345258e-04f, 5.297571655e-04f, 5.295789014e-04f, 5.293997338e-04f, 5.292196632e-04f,
+5.290386899e-04f, 5.288568142e-04f, 5.286740366e-04f, 5.284903575e-04f, 5.283057771e-04f, 5.281202959e-04f, 5.279339143e-04f, 5.277466326e-04f, 5.275584513e-04f, 5.273693707e-04f,
+5.271793912e-04f, 5.269885132e-04f, 5.267967370e-04f, 5.266040632e-04f, 5.264104920e-04f, 5.262160239e-04f, 5.260206593e-04f, 5.258243985e-04f, 5.256272420e-04f, 5.254291902e-04f,
+5.252302434e-04f, 5.250304021e-04f, 5.248296667e-04f, 5.246280376e-04f, 5.244255151e-04f, 5.242220998e-04f, 5.240177920e-04f, 5.238125921e-04f, 5.236065005e-04f, 5.233995178e-04f,
+5.231916442e-04f, 5.229828802e-04f, 5.227732262e-04f, 5.225626827e-04f, 5.223512500e-04f, 5.221389287e-04f, 5.219257190e-04f, 5.217116215e-04f, 5.214966366e-04f, 5.212807647e-04f,
+5.210640063e-04f, 5.208463617e-04f, 5.206278314e-04f, 5.204084159e-04f, 5.201881156e-04f, 5.199669310e-04f, 5.197448624e-04f, 5.195219103e-04f, 5.192980752e-04f, 5.190733575e-04f,
+5.188477576e-04f, 5.186212761e-04f, 5.183939133e-04f, 5.181656697e-04f, 5.179365458e-04f, 5.177065421e-04f, 5.174756589e-04f, 5.172438967e-04f, 5.170112561e-04f, 5.167777374e-04f,
+5.165433411e-04f, 5.163080677e-04f, 5.160719177e-04f, 5.158348915e-04f, 5.155969896e-04f, 5.153582124e-04f, 5.151185605e-04f, 5.148780343e-04f, 5.146366342e-04f, 5.143943609e-04f,
+5.141512146e-04f, 5.139071960e-04f, 5.136623055e-04f, 5.134165435e-04f, 5.131699107e-04f, 5.129224073e-04f, 5.126740340e-04f, 5.124247912e-04f, 5.121746795e-04f, 5.119236992e-04f,
+5.116718510e-04f, 5.114191352e-04f, 5.111655524e-04f, 5.109111031e-04f, 5.106557878e-04f, 5.103996069e-04f, 5.101425611e-04f, 5.098846507e-04f, 5.096258763e-04f, 5.093662384e-04f,
+5.091057375e-04f, 5.088443742e-04f, 5.085821488e-04f, 5.083190620e-04f, 5.080551143e-04f, 5.077903061e-04f, 5.075246379e-04f, 5.072581104e-04f, 5.069907240e-04f, 5.067224792e-04f,
+5.064533766e-04f, 5.061834166e-04f, 5.059125999e-04f, 5.056409269e-04f, 5.053683981e-04f, 5.050950142e-04f, 5.048207755e-04f, 5.045456827e-04f, 5.042697363e-04f, 5.039929368e-04f,
+5.037152848e-04f, 5.034367807e-04f, 5.031574252e-04f, 5.028772188e-04f, 5.025961620e-04f, 5.023142553e-04f, 5.020314993e-04f, 5.017478946e-04f, 5.014634417e-04f, 5.011781411e-04f,
+5.008919934e-04f, 5.006049992e-04f, 5.003171589e-04f, 5.000284732e-04f, 4.997389427e-04f, 4.994485678e-04f, 4.991573491e-04f, 4.988652872e-04f, 4.985723827e-04f, 4.982786361e-04f,
+4.979840480e-04f, 4.976886189e-04f, 4.973923494e-04f, 4.970952401e-04f, 4.967972916e-04f, 4.964985044e-04f, 4.961988791e-04f, 4.958984163e-04f, 4.955971165e-04f, 4.952949803e-04f,
+4.949920084e-04f, 4.946882012e-04f, 4.943835594e-04f, 4.940780836e-04f, 4.937717743e-04f, 4.934646321e-04f, 4.931566576e-04f, 4.928478514e-04f, 4.925382142e-04f, 4.922277464e-04f,
+4.919164486e-04f, 4.916043216e-04f, 4.912913657e-04f, 4.909775818e-04f, 4.906629703e-04f, 4.903475319e-04f, 4.900312671e-04f, 4.897141766e-04f, 4.893962610e-04f, 4.890775208e-04f,
+4.887579568e-04f, 4.884375694e-04f, 4.881163593e-04f, 4.877943271e-04f, 4.874714734e-04f, 4.871477989e-04f, 4.868233041e-04f, 4.864979897e-04f, 4.861718562e-04f, 4.858449044e-04f,
+4.855171348e-04f, 4.851885480e-04f, 4.848591447e-04f, 4.845289255e-04f, 4.841978911e-04f, 4.838660419e-04f, 4.835333788e-04f, 4.831999022e-04f, 4.828656129e-04f, 4.825305115e-04f,
+4.821945985e-04f, 4.818578748e-04f, 4.815203407e-04f, 4.811819972e-04f, 4.808428446e-04f, 4.805028838e-04f, 4.801621153e-04f, 4.798205398e-04f, 4.794781579e-04f, 4.791349703e-04f,
+4.787909776e-04f, 4.784461805e-04f, 4.781005796e-04f, 4.777541756e-04f, 4.774069691e-04f, 4.770589608e-04f, 4.767101513e-04f, 4.763605414e-04f, 4.760101315e-04f, 4.756589225e-04f,
+4.753069150e-04f, 4.749541097e-04f, 4.746005071e-04f, 4.742461080e-04f, 4.738909130e-04f, 4.735349228e-04f, 4.731781381e-04f, 4.728205596e-04f, 4.724621878e-04f, 4.721030236e-04f,
+4.717430675e-04f, 4.713823202e-04f, 4.710207825e-04f, 4.706584550e-04f, 4.702953383e-04f, 4.699314332e-04f, 4.695667403e-04f, 4.692012604e-04f, 4.688349940e-04f, 4.684679420e-04f,
+4.681001049e-04f, 4.677314835e-04f, 4.673620785e-04f, 4.669918905e-04f, 4.666209203e-04f, 4.662491685e-04f, 4.658766358e-04f, 4.655033230e-04f, 4.651292307e-04f, 4.647543597e-04f,
+4.643787105e-04f, 4.640022840e-04f, 4.636250809e-04f, 4.632471018e-04f, 4.628683474e-04f, 4.624888185e-04f, 4.621085157e-04f, 4.617274398e-04f, 4.613455915e-04f, 4.609629716e-04f,
+4.605795806e-04f, 4.601954193e-04f, 4.598104885e-04f, 4.594247888e-04f, 4.590383211e-04f, 4.586510859e-04f, 4.582630840e-04f, 4.578743162e-04f, 4.574847832e-04f, 4.570944856e-04f,
+4.567034243e-04f, 4.563115999e-04f, 4.559190132e-04f, 4.555256649e-04f, 4.551315557e-04f, 4.547366865e-04f, 4.543410578e-04f, 4.539446704e-04f, 4.535475252e-04f, 4.531496227e-04f,
+4.527509638e-04f, 4.523515492e-04f, 4.519513797e-04f, 4.515504559e-04f, 4.511487786e-04f, 4.507463486e-04f, 4.503431666e-04f, 4.499392334e-04f, 4.495345497e-04f, 4.491291163e-04f,
+4.487229339e-04f, 4.483160033e-04f, 4.479083251e-04f, 4.474999003e-04f, 4.470907295e-04f, 4.466808135e-04f, 4.462701530e-04f, 4.458587489e-04f, 4.454466018e-04f, 4.450337126e-04f,
+4.446200819e-04f, 4.442057107e-04f, 4.437905995e-04f, 4.433747493e-04f, 4.429581607e-04f, 4.425408346e-04f, 4.421227717e-04f, 4.417039728e-04f, 4.412844386e-04f, 4.408641700e-04f,
+4.404431677e-04f, 4.400214325e-04f, 4.395989651e-04f, 4.391757664e-04f, 4.387518371e-04f, 4.383271780e-04f, 4.379017899e-04f, 4.374756736e-04f, 4.370488299e-04f, 4.366212595e-04f,
+4.361929633e-04f, 4.357639419e-04f, 4.353341963e-04f, 4.349037273e-04f, 4.344725355e-04f, 4.340406218e-04f, 4.336079870e-04f, 4.331746320e-04f, 4.327405574e-04f, 4.323057641e-04f,
+4.318702529e-04f, 4.314340246e-04f, 4.309970799e-04f, 4.305594198e-04f, 4.301210450e-04f, 4.296819563e-04f, 4.292421545e-04f, 4.288016405e-04f, 4.283604149e-04f, 4.279184788e-04f,
+4.274758328e-04f, 4.270324777e-04f, 4.265884145e-04f, 4.261436438e-04f, 4.256981666e-04f, 4.252519836e-04f, 4.248050957e-04f, 4.243575037e-04f, 4.239092083e-04f, 4.234602105e-04f,
+4.230105110e-04f, 4.225601107e-04f, 4.221090104e-04f, 4.216572110e-04f, 4.212047131e-04f, 4.207515178e-04f, 4.202976258e-04f, 4.198430379e-04f, 4.193877550e-04f, 4.189317779e-04f,
+4.184751075e-04f, 4.180177445e-04f, 4.175596899e-04f, 4.171009445e-04f, 4.166415090e-04f, 4.161813844e-04f, 4.157205715e-04f, 4.152590711e-04f, 4.147968841e-04f, 4.143340112e-04f,
+4.138704535e-04f, 4.134062117e-04f, 4.129412866e-04f, 4.124756792e-04f, 4.120093902e-04f, 4.115424205e-04f, 4.110747710e-04f, 4.106064426e-04f, 4.101374360e-04f, 4.096677521e-04f,
+4.091973919e-04f, 4.087263561e-04f, 4.082546456e-04f, 4.077822613e-04f, 4.073092040e-04f, 4.068354746e-04f, 4.063610740e-04f, 4.058860030e-04f, 4.054102626e-04f, 4.049338535e-04f,
+4.044567766e-04f, 4.039790328e-04f, 4.035006231e-04f, 4.030215481e-04f, 4.025418089e-04f, 4.020614063e-04f, 4.015803411e-04f, 4.010986144e-04f, 4.006162268e-04f, 4.001331793e-04f,
+3.996494729e-04f, 3.991651082e-04f, 3.986800864e-04f, 3.981944082e-04f, 3.977080745e-04f, 3.972210861e-04f, 3.967334441e-04f, 3.962451493e-04f, 3.957562025e-04f, 3.952666047e-04f,
+3.947763567e-04f, 3.942854595e-04f, 3.937939138e-04f, 3.933017207e-04f, 3.928088811e-04f, 3.923153957e-04f, 3.918212656e-04f, 3.913264915e-04f, 3.908310745e-04f, 3.903350153e-04f,
+3.898383150e-04f, 3.893409744e-04f, 3.888429944e-04f, 3.883443759e-04f, 3.878451199e-04f, 3.873452272e-04f, 3.868446987e-04f, 3.863435353e-04f, 3.858417381e-04f, 3.853393077e-04f,
+3.848362453e-04f, 3.843325517e-04f, 3.838282277e-04f, 3.833232744e-04f, 3.828176926e-04f, 3.823114833e-04f, 3.818046473e-04f, 3.812971856e-04f, 3.807890992e-04f, 3.802803888e-04f,
+3.797710555e-04f, 3.792611002e-04f, 3.787505238e-04f, 3.782393272e-04f, 3.777275113e-04f, 3.772150772e-04f, 3.767020256e-04f, 3.761883575e-04f, 3.756740740e-04f, 3.751591758e-04f,
+3.746436639e-04f, 3.741275393e-04f, 3.736108029e-04f, 3.730934556e-04f, 3.725754984e-04f, 3.720569321e-04f, 3.715377579e-04f, 3.710179764e-04f, 3.704975888e-04f, 3.699765960e-04f,
+3.694549989e-04f, 3.689327984e-04f, 3.684099954e-04f, 3.678865911e-04f, 3.673625861e-04f, 3.668379816e-04f, 3.663127785e-04f, 3.657869777e-04f, 3.652605802e-04f, 3.647335869e-04f,
+3.642059987e-04f, 3.636778167e-04f, 3.631490418e-04f, 3.626196748e-04f, 3.620897169e-04f, 3.615591689e-04f, 3.610280318e-04f, 3.604963066e-04f, 3.599639942e-04f, 3.594310956e-04f,
+3.588976117e-04f, 3.583635435e-04f, 3.578288920e-04f, 3.572936580e-04f, 3.567578427e-04f, 3.562214470e-04f, 3.556844718e-04f, 3.551469180e-04f, 3.546087867e-04f, 3.540700789e-04f,
+3.535307955e-04f, 3.529909374e-04f, 3.524505057e-04f, 3.519095013e-04f, 3.513679252e-04f, 3.508257783e-04f, 3.502830617e-04f, 3.497397763e-04f, 3.491959232e-04f, 3.486515032e-04f,
+3.481065173e-04f, 3.475609666e-04f, 3.470148520e-04f, 3.464681746e-04f, 3.459209352e-04f, 3.453731348e-04f, 3.448247746e-04f, 3.442758553e-04f, 3.437263781e-04f, 3.431763440e-04f,
+3.426257538e-04f, 3.420746086e-04f, 3.415229094e-04f, 3.409706572e-04f, 3.404178529e-04f, 3.398644976e-04f, 3.393105923e-04f, 3.387561379e-04f, 3.382011355e-04f, 3.376455860e-04f,
+3.370894904e-04f, 3.365328498e-04f, 3.359756652e-04f, 3.354179374e-04f, 3.348596676e-04f, 3.343008568e-04f, 3.337415059e-04f, 3.331816159e-04f, 3.326211879e-04f, 3.320602229e-04f,
+3.314987218e-04f, 3.309366857e-04f, 3.303741156e-04f, 3.298110125e-04f, 3.292473774e-04f, 3.286832112e-04f, 3.281185151e-04f, 3.275532901e-04f, 3.269875371e-04f, 3.264212571e-04f,
+3.258544512e-04f, 3.252871205e-04f, 3.247192658e-04f, 3.241508882e-04f, 3.235819888e-04f, 3.230125686e-04f, 3.224426285e-04f, 3.218721697e-04f, 3.213011931e-04f, 3.207296997e-04f,
+3.201576906e-04f, 3.195851668e-04f, 3.190121293e-04f, 3.184385791e-04f, 3.178645173e-04f, 3.172899449e-04f, 3.167148630e-04f, 3.161392725e-04f, 3.155631745e-04f, 3.149865700e-04f,
+3.144094600e-04f, 3.138318457e-04f, 3.132537279e-04f, 3.126751078e-04f, 3.120959864e-04f, 3.115163647e-04f, 3.109362437e-04f, 3.103556245e-04f, 3.097745082e-04f, 3.091928957e-04f,
+3.086107881e-04f, 3.080281865e-04f, 3.074450918e-04f, 3.068615052e-04f, 3.062774277e-04f, 3.056928602e-04f, 3.051078040e-04f, 3.045222599e-04f, 3.039362290e-04f, 3.033497125e-04f,
+3.027627113e-04f, 3.021752265e-04f, 3.015872591e-04f, 3.009988102e-04f, 3.004098809e-04f, 2.998204721e-04f, 2.992305850e-04f, 2.986402205e-04f, 2.980493798e-04f, 2.974580639e-04f,
+2.968662739e-04f, 2.962740108e-04f, 2.956812756e-04f, 2.950880694e-04f, 2.944943934e-04f, 2.939002484e-04f, 2.933056357e-04f, 2.927105562e-04f, 2.921150110e-04f, 2.915190013e-04f,
+2.909225279e-04f, 2.903255921e-04f, 2.897281948e-04f, 2.891303371e-04f, 2.885320202e-04f, 2.879332450e-04f, 2.873340126e-04f, 2.867343241e-04f, 2.861341806e-04f, 2.855335831e-04f,
+2.849325328e-04f, 2.843310305e-04f, 2.837290776e-04f, 2.831266749e-04f, 2.825238236e-04f, 2.819205248e-04f, 2.813167795e-04f, 2.807125888e-04f, 2.801079538e-04f, 2.795028756e-04f,
+2.788973552e-04f, 2.782913937e-04f, 2.776849921e-04f, 2.770781517e-04f, 2.764708734e-04f, 2.758631583e-04f, 2.752550075e-04f, 2.746464221e-04f, 2.740374031e-04f, 2.734279517e-04f,
+2.728180690e-04f, 2.722077559e-04f, 2.715970137e-04f, 2.709858433e-04f, 2.703742459e-04f, 2.697622226e-04f, 2.691497744e-04f, 2.685369025e-04f, 2.679236078e-04f, 2.673098916e-04f,
+2.666957549e-04f, 2.660811987e-04f, 2.654662243e-04f, 2.648508326e-04f, 2.642350248e-04f, 2.636188019e-04f, 2.630021651e-04f, 2.623851154e-04f, 2.617676540e-04f, 2.611497819e-04f,
+2.605315003e-04f, 2.599128102e-04f, 2.592937127e-04f, 2.586742089e-04f, 2.580542999e-04f, 2.574339869e-04f, 2.568132709e-04f, 2.561921530e-04f, 2.555706344e-04f, 2.549487160e-04f,
+2.543263991e-04f, 2.537036848e-04f, 2.530805740e-04f, 2.524570680e-04f, 2.518331679e-04f, 2.512088747e-04f, 2.505841896e-04f, 2.499591136e-04f, 2.493336479e-04f, 2.487077935e-04f,
+2.480815517e-04f, 2.474549234e-04f, 2.468279099e-04f, 2.462005122e-04f, 2.455727314e-04f, 2.449445686e-04f, 2.443160250e-04f, 2.436871017e-04f, 2.430577997e-04f, 2.424281202e-04f,
+2.417980643e-04f, 2.411676332e-04f, 2.405368279e-04f, 2.399056495e-04f, 2.392740992e-04f, 2.386421781e-04f, 2.380098872e-04f, 2.373772278e-04f, 2.367442010e-04f, 2.361108078e-04f,
+2.354770494e-04f, 2.348429269e-04f, 2.342084414e-04f, 2.335735940e-04f, 2.329383859e-04f, 2.323028182e-04f, 2.316668920e-04f, 2.310306085e-04f, 2.303939687e-04f, 2.297569738e-04f,
+2.291196248e-04f, 2.284819231e-04f, 2.278438696e-04f, 2.272054655e-04f, 2.265667119e-04f, 2.259276099e-04f, 2.252881607e-04f, 2.246483655e-04f, 2.240082252e-04f, 2.233677411e-04f,
+2.227269143e-04f, 2.220857460e-04f, 2.214442372e-04f, 2.208023891e-04f, 2.201602028e-04f, 2.195176794e-04f, 2.188748202e-04f, 2.182316262e-04f, 2.175880985e-04f, 2.169442383e-04f,
+2.163000468e-04f, 2.156555250e-04f, 2.150106741e-04f, 2.143654953e-04f, 2.137199897e-04f, 2.130741583e-04f, 2.124280024e-04f, 2.117815231e-04f, 2.111347216e-04f, 2.104875989e-04f,
+2.098401562e-04f, 2.091923947e-04f, 2.085443155e-04f, 2.078959197e-04f, 2.072472086e-04f, 2.065981831e-04f, 2.059488445e-04f, 2.052991939e-04f, 2.046492325e-04f, 2.039989614e-04f,
+2.033483817e-04f, 2.026974946e-04f, 2.020463013e-04f, 2.013948028e-04f, 2.007430004e-04f, 2.000908952e-04f, 1.994384883e-04f, 1.987857808e-04f, 1.981327740e-04f, 1.974794690e-04f,
+1.968258669e-04f, 1.961719689e-04f, 1.955177761e-04f, 1.948632897e-04f, 1.942085108e-04f, 1.935534406e-04f, 1.928980802e-04f, 1.922424309e-04f, 1.915864936e-04f, 1.909302697e-04f,
+1.902737602e-04f, 1.896169663e-04f, 1.889598891e-04f, 1.883025299e-04f, 1.876448898e-04f, 1.869869698e-04f, 1.863287713e-04f, 1.856702953e-04f, 1.850115430e-04f, 1.843525155e-04f,
+1.836932141e-04f, 1.830336398e-04f, 1.823737939e-04f, 1.817136774e-04f, 1.810532916e-04f, 1.803926376e-04f, 1.797317166e-04f, 1.790705297e-04f, 1.784090781e-04f, 1.777473630e-04f,
+1.770853854e-04f, 1.764231467e-04f, 1.757606478e-04f, 1.750978901e-04f, 1.744348747e-04f, 1.737716027e-04f, 1.731080753e-04f, 1.724442936e-04f, 1.717802589e-04f, 1.711159722e-04f,
+1.704514349e-04f, 1.697866479e-04f, 1.691216125e-04f, 1.684563299e-04f, 1.677908012e-04f, 1.671250276e-04f, 1.664590103e-04f, 1.657927503e-04f, 1.651262490e-04f, 1.644595074e-04f,
+1.637925268e-04f, 1.631253083e-04f, 1.624578530e-04f, 1.617901622e-04f, 1.611222370e-04f, 1.604540786e-04f, 1.597856881e-04f, 1.591170668e-04f, 1.584482157e-04f, 1.577791362e-04f,
+1.571098292e-04f, 1.564402961e-04f, 1.557705380e-04f, 1.551005560e-04f, 1.544303514e-04f, 1.537599253e-04f, 1.530892788e-04f, 1.524184132e-04f, 1.517473297e-04f, 1.510760294e-04f,
+1.504045134e-04f, 1.497327830e-04f, 1.490608393e-04f, 1.483886836e-04f, 1.477163169e-04f, 1.470437405e-04f, 1.463709555e-04f, 1.456979632e-04f, 1.450247647e-04f, 1.443513611e-04f,
+1.436777537e-04f, 1.430039436e-04f, 1.423299320e-04f, 1.416557201e-04f, 1.409813091e-04f, 1.403067001e-04f, 1.396318944e-04f, 1.389568931e-04f, 1.382816973e-04f, 1.376063084e-04f,
+1.369307273e-04f, 1.362549555e-04f, 1.355789939e-04f, 1.349028438e-04f, 1.342265064e-04f, 1.335499829e-04f, 1.328732744e-04f, 1.321963821e-04f, 1.315193072e-04f, 1.308420509e-04f,
+1.301646144e-04f, 1.294869989e-04f, 1.288092055e-04f, 1.281312354e-04f, 1.274530898e-04f, 1.267747699e-04f, 1.260962769e-04f, 1.254176120e-04f, 1.247387763e-04f, 1.240597710e-04f,
+1.233805974e-04f, 1.227012566e-04f, 1.220217497e-04f, 1.213420781e-04f, 1.206622428e-04f, 1.199822450e-04f, 1.193020860e-04f, 1.186217669e-04f, 1.179412890e-04f, 1.172606533e-04f,
+1.165798611e-04f, 1.158989136e-04f, 1.152178119e-04f, 1.145365573e-04f, 1.138551509e-04f, 1.131735940e-04f, 1.124918877e-04f, 1.118100332e-04f, 1.111280316e-04f, 1.104458843e-04f,
+1.097635923e-04f, 1.090811569e-04f, 1.083985793e-04f, 1.077158606e-04f, 1.070330020e-04f, 1.063500047e-04f, 1.056668700e-04f, 1.049835989e-04f, 1.043001928e-04f, 1.036166527e-04f,
+1.029329799e-04f, 1.022491756e-04f, 1.015652409e-04f, 1.008811771e-04f, 1.001969853e-04f, 9.951266677e-05f, 9.882822265e-05f, 9.814365414e-05f, 9.745896244e-05f, 9.677414875e-05f,
+9.608921424e-05f, 9.540416012e-05f, 9.471898758e-05f, 9.403369782e-05f, 9.334829201e-05f, 9.266277136e-05f, 9.197713706e-05f, 9.129139031e-05f, 9.060553229e-05f, 8.991956420e-05f,
+8.923348724e-05f, 8.854730259e-05f, 8.786101145e-05f, 8.717461502e-05f, 8.648811449e-05f, 8.580151105e-05f, 8.511480590e-05f, 8.442800023e-05f, 8.374109523e-05f, 8.305409211e-05f,
+8.236699205e-05f, 8.167979625e-05f, 8.099250590e-05f, 8.030512220e-05f, 7.961764635e-05f, 7.893007954e-05f, 7.824242296e-05f, 7.755467781e-05f, 7.686684528e-05f, 7.617892657e-05f,
+7.549092288e-05f, 7.480283540e-05f, 7.411466532e-05f, 7.342641385e-05f, 7.273808217e-05f, 7.204967149e-05f, 7.136118299e-05f, 7.067261788e-05f, 6.998397734e-05f, 6.929526258e-05f,
+6.860647480e-05f, 6.791761518e-05f, 6.722868492e-05f, 6.653968523e-05f, 6.585061728e-05f, 6.516148230e-05f, 6.447228145e-05f, 6.378301596e-05f, 6.309368700e-05f, 6.240429578e-05f,
+6.171484349e-05f, 6.102533133e-05f, 6.033576049e-05f, 5.964613218e-05f, 5.895644758e-05f, 5.826670790e-05f, 5.757691433e-05f, 5.688706806e-05f, 5.619717030e-05f, 5.550722224e-05f,
+5.481722507e-05f, 5.412718000e-05f, 5.343708821e-05f, 5.274695091e-05f, 5.205676929e-05f, 5.136654455e-05f, 5.067627789e-05f, 4.998597049e-05f, 4.929562357e-05f, 4.860523830e-05f,
+4.791481590e-05f, 4.722435755e-05f, 4.653386445e-05f, 4.584333781e-05f, 4.515277880e-05f, 4.446218864e-05f, 4.377156852e-05f, 4.308091963e-05f, 4.239024317e-05f, 4.169954034e-05f,
+4.100881233e-05f, 4.031806033e-05f, 3.962728556e-05f, 3.893648919e-05f, 3.824567242e-05f, 3.755483646e-05f, 3.686398250e-05f, 3.617311173e-05f, 3.548222535e-05f, 3.479132455e-05f,
+3.410041054e-05f, 3.340948450e-05f, 3.271854763e-05f, 3.202760113e-05f, 3.133664619e-05f, 3.064568401e-05f, 2.995471578e-05f, 2.926374270e-05f, 2.857276596e-05f, 2.788178676e-05f,
+2.719080630e-05f, 2.649982576e-05f, 2.580884634e-05f, 2.511786924e-05f, 2.442689566e-05f, 2.373592678e-05f, 2.304496380e-05f, 2.235400792e-05f, 2.166306032e-05f, 2.097212221e-05f,
+2.028119478e-05f, 1.959027922e-05f, 1.889937672e-05f, 1.820848849e-05f, 1.751761570e-05f, 1.682675957e-05f, 1.613592127e-05f, 1.544510201e-05f, 1.475430297e-05f, 1.406352535e-05f,
+1.337277035e-05f, 1.268203914e-05f, 1.199133294e-05f, 1.130065293e-05f, 1.061000030e-05f, 9.919376250e-06f, 9.228781965e-06f, 8.538218639e-06f, 7.847687466e-06f, 7.157189635e-06f,
+6.466726340e-06f, 5.776298772e-06f, 5.085908121e-06f, 4.395555580e-06f, 3.705242340e-06f, 3.014969590e-06f, 2.324738523e-06f, 1.634550329e-06f, 9.444061980e-07f, 2.543073207e-07f,
+-4.357451128e-07f, -1.125749912e-06f, -1.815705888e-06f, -2.505611851e-06f, -3.195466611e-06f, -3.885268978e-06f, -4.575017764e-06f, -5.264711780e-06f, -5.954349837e-06f, -6.643930745e-06f,
+-7.333453317e-06f, -8.022916365e-06f, -8.712318700e-06f, -9.401659134e-06f, -1.009093648e-05f, -1.078014955e-05f, -1.146929716e-05f, -1.215837811e-05f, -1.284739123e-05f, -1.353633533e-05f,
+-1.422520921e-05f, -1.491401170e-05f, -1.560274160e-05f, -1.629139773e-05f, -1.697997891e-05f, -1.766848395e-05f, -1.835691167e-05f, -1.904526087e-05f, -1.973353037e-05f, -2.042171900e-05f,
+-2.110982556e-05f, -2.179784887e-05f, -2.248578775e-05f, -2.317364101e-05f, -2.386140748e-05f, -2.454908595e-05f, -2.523667527e-05f, -2.592417423e-05f, -2.661158166e-05f, -2.729889637e-05f,
+-2.798611719e-05f, -2.867324293e-05f, -2.936027240e-05f, -3.004720444e-05f, -3.073403785e-05f, -3.142077146e-05f, -3.210740409e-05f, -3.279393455e-05f, -3.348036167e-05f, -3.416668426e-05f,
+-3.485290114e-05f, -3.553901114e-05f, -3.622501308e-05f, -3.691090578e-05f, -3.759668806e-05f, -3.828235874e-05f, -3.896791664e-05f, -3.965336059e-05f, -4.033868940e-05f, -4.102390191e-05f,
+-4.170899693e-05f, -4.239397329e-05f, -4.307882981e-05f, -4.376356531e-05f, -4.444817863e-05f, -4.513266858e-05f, -4.581703398e-05f, -4.650127367e-05f, -4.718538647e-05f, -4.786937121e-05f,
+-4.855322671e-05f, -4.923695179e-05f, -4.992054529e-05f, -5.060400603e-05f, -5.128733283e-05f, -5.197052454e-05f, -5.265357996e-05f, -5.333649794e-05f, -5.401927730e-05f, -5.470191687e-05f,
+-5.538441548e-05f, -5.606677195e-05f, -5.674898512e-05f, -5.743105382e-05f, -5.811297688e-05f, -5.879475313e-05f, -5.947638139e-05f, -6.015786051e-05f, -6.083918931e-05f, -6.152036663e-05f,
+-6.220139130e-05f, -6.288226214e-05f, -6.356297800e-05f, -6.424353771e-05f, -6.492394010e-05f, -6.560418400e-05f, -6.628426826e-05f, -6.696419170e-05f, -6.764395316e-05f, -6.832355147e-05f,
+-6.900298548e-05f, -6.968225402e-05f, -7.036135592e-05f, -7.104029002e-05f, -7.171905516e-05f, -7.239765018e-05f, -7.307607392e-05f, -7.375432521e-05f, -7.443240289e-05f, -7.511030580e-05f,
+-7.578803279e-05f, -7.646558269e-05f, -7.714295434e-05f, -7.782014659e-05f, -7.849715827e-05f, -7.917398823e-05f, -7.985063530e-05f, -8.052709834e-05f, -8.120337618e-05f, -8.187946767e-05f,
+-8.255537165e-05f, -8.323108696e-05f, -8.390661245e-05f, -8.458194697e-05f, -8.525708936e-05f, -8.593203846e-05f, -8.660679312e-05f, -8.728135219e-05f, -8.795571451e-05f, -8.862987894e-05f,
+-8.930384432e-05f, -8.997760949e-05f, -9.065117331e-05f, -9.132453463e-05f, -9.199769229e-05f, -9.267064514e-05f, -9.334339204e-05f, -9.401593184e-05f, -9.468826338e-05f, -9.536038552e-05f,
+-9.603229711e-05f, -9.670399701e-05f, -9.737548406e-05f, -9.804675712e-05f, -9.871781505e-05f, -9.938865669e-05f, -1.000592809e-04f, -1.007296865e-04f, -1.013998725e-04f, -1.020698375e-04f,
+-1.027395806e-04f, -1.034091005e-04f, -1.040783961e-04f, -1.047474663e-04f, -1.054163100e-04f, -1.060849259e-04f, -1.067533129e-04f, -1.074214700e-04f, -1.080893959e-04f, -1.087570895e-04f,
+-1.094245498e-04f, -1.100917755e-04f, -1.107587655e-04f, -1.114255186e-04f, -1.120920339e-04f, -1.127583100e-04f, -1.134243458e-04f, -1.140901403e-04f, -1.147556923e-04f, -1.154210007e-04f,
+-1.160860643e-04f, -1.167508820e-04f, -1.174154526e-04f, -1.180797751e-04f, -1.187438483e-04f, -1.194076710e-04f, -1.200712422e-04f, -1.207345607e-04f, -1.213976253e-04f, -1.220604350e-04f,
+-1.227229886e-04f, -1.233852850e-04f, -1.240473231e-04f, -1.247091017e-04f, -1.253706197e-04f, -1.260318760e-04f, -1.266928694e-04f, -1.273535989e-04f, -1.280140633e-04f, -1.286742614e-04f,
+-1.293341922e-04f, -1.299938546e-04f, -1.306532473e-04f, -1.313123694e-04f, -1.319712196e-04f, -1.326297969e-04f, -1.332881001e-04f, -1.339461281e-04f, -1.346038798e-04f, -1.352613541e-04f,
+-1.359185498e-04f, -1.365754659e-04f, -1.372321012e-04f, -1.378884546e-04f, -1.385445250e-04f, -1.392003112e-04f, -1.398558122e-04f, -1.405110269e-04f, -1.411659541e-04f, -1.418205927e-04f,
+-1.424749416e-04f, -1.431289997e-04f, -1.437827658e-04f, -1.444362390e-04f, -1.450894180e-04f, -1.457423018e-04f, -1.463948892e-04f, -1.470471791e-04f, -1.476991705e-04f, -1.483508622e-04f,
+-1.490022531e-04f, -1.496533421e-04f, -1.503041282e-04f, -1.509546101e-04f, -1.516047868e-04f, -1.522546572e-04f, -1.529042202e-04f, -1.535534747e-04f, -1.542024195e-04f, -1.548510537e-04f,
+-1.554993760e-04f, -1.561473854e-04f, -1.567950808e-04f, -1.574424611e-04f, -1.580895251e-04f, -1.587362719e-04f, -1.593827002e-04f, -1.600288091e-04f, -1.606745973e-04f, -1.613200639e-04f,
+-1.619652076e-04f, -1.626100275e-04f, -1.632545224e-04f, -1.638986913e-04f, -1.645425330e-04f, -1.651860464e-04f, -1.658292305e-04f, -1.664720842e-04f, -1.671146063e-04f, -1.677567959e-04f,
+-1.683986517e-04f, -1.690401728e-04f, -1.696813580e-04f, -1.703222062e-04f, -1.709627164e-04f, -1.716028875e-04f, -1.722427184e-04f, -1.728822080e-04f, -1.735213552e-04f, -1.741601590e-04f,
+-1.747986182e-04f, -1.754367318e-04f, -1.760744987e-04f, -1.767119178e-04f, -1.773489881e-04f, -1.779857084e-04f, -1.786220778e-04f, -1.792580950e-04f, -1.798937591e-04f, -1.805290690e-04f,
+-1.811640235e-04f, -1.817986217e-04f, -1.824328624e-04f, -1.830667446e-04f, -1.837002671e-04f, -1.843334290e-04f, -1.849662292e-04f, -1.855986665e-04f, -1.862307400e-04f, -1.868624485e-04f,
+-1.874937910e-04f, -1.881247664e-04f, -1.887553737e-04f, -1.893856117e-04f, -1.900154795e-04f, -1.906449759e-04f, -1.912740999e-04f, -1.919028504e-04f, -1.925312265e-04f, -1.931592269e-04f,
+-1.937868506e-04f, -1.944140967e-04f, -1.950409640e-04f, -1.956674514e-04f, -1.962935580e-04f, -1.969192826e-04f, -1.975446243e-04f, -1.981695819e-04f, -1.987941543e-04f, -1.994183406e-04f,
+-2.000421397e-04f, -2.006655505e-04f, -2.012885720e-04f, -2.019112032e-04f, -2.025334429e-04f, -2.031552901e-04f, -2.037767438e-04f, -2.043978030e-04f, -2.050184665e-04f, -2.056387334e-04f,
+-2.062586026e-04f, -2.068780730e-04f, -2.074971437e-04f, -2.081158135e-04f, -2.087340814e-04f, -2.093519464e-04f, -2.099694074e-04f, -2.105864635e-04f, -2.112031135e-04f, -2.118193564e-04f,
+-2.124351912e-04f, -2.130506168e-04f, -2.136656323e-04f, -2.142802365e-04f, -2.148944285e-04f, -2.155082071e-04f, -2.161215715e-04f, -2.167345205e-04f, -2.173470530e-04f, -2.179591682e-04f,
+-2.185708649e-04f, -2.191821422e-04f, -2.197929989e-04f, -2.204034341e-04f, -2.210134467e-04f, -2.216230357e-04f, -2.222322001e-04f, -2.228409389e-04f, -2.234492510e-04f, -2.240571354e-04f,
+-2.246645911e-04f, -2.252716171e-04f, -2.258782123e-04f, -2.264843757e-04f, -2.270901064e-04f, -2.276954033e-04f, -2.283002653e-04f, -2.289046915e-04f, -2.295086808e-04f, -2.301122323e-04f,
+-2.307153449e-04f, -2.313180176e-04f, -2.319202493e-04f, -2.325220392e-04f, -2.331233861e-04f, -2.337242891e-04f, -2.343247472e-04f, -2.349247592e-04f, -2.355243243e-04f, -2.361234415e-04f,
+-2.367221096e-04f, -2.373203278e-04f, -2.379180950e-04f, -2.385154102e-04f, -2.391122725e-04f, -2.397086807e-04f, -2.403046339e-04f, -2.409001312e-04f, -2.414951714e-04f, -2.420897537e-04f,
+-2.426838770e-04f, -2.432775403e-04f, -2.438707426e-04f, -2.444634830e-04f, -2.450557604e-04f, -2.456475739e-04f, -2.462389223e-04f, -2.468298049e-04f, -2.474202205e-04f, -2.480101682e-04f,
+-2.485996471e-04f, -2.491886560e-04f, -2.497771940e-04f, -2.503652602e-04f, -2.509528535e-04f, -2.515399730e-04f, -2.521266176e-04f, -2.527127865e-04f, -2.532984786e-04f, -2.538836929e-04f,
+-2.544684285e-04f, -2.550526844e-04f, -2.556364596e-04f, -2.562197531e-04f, -2.568025640e-04f, -2.573848912e-04f, -2.579667338e-04f, -2.585480909e-04f, -2.591289614e-04f, -2.597093444e-04f,
+-2.602892390e-04f, -2.608686440e-04f, -2.614475587e-04f, -2.620259820e-04f, -2.626039129e-04f, -2.631813505e-04f, -2.637582938e-04f, -2.643347418e-04f, -2.649106937e-04f, -2.654861483e-04f,
+-2.660611049e-04f, -2.666355623e-04f, -2.672095197e-04f, -2.677829760e-04f, -2.683559304e-04f, -2.689283819e-04f, -2.695003294e-04f, -2.700717722e-04f, -2.706427091e-04f, -2.712131393e-04f,
+-2.717830618e-04f, -2.723524757e-04f, -2.729213799e-04f, -2.734897736e-04f, -2.740576558e-04f, -2.746250256e-04f, -2.751918820e-04f, -2.757582240e-04f, -2.763240508e-04f, -2.768893613e-04f,
+-2.774541547e-04f, -2.780184300e-04f, -2.785821862e-04f, -2.791454225e-04f, -2.797081378e-04f, -2.802703313e-04f, -2.808320019e-04f, -2.813931489e-04f, -2.819537711e-04f, -2.825138678e-04f,
+-2.830734379e-04f, -2.836324806e-04f, -2.841909949e-04f, -2.847489798e-04f, -2.853064345e-04f, -2.858633580e-04f, -2.864197494e-04f, -2.869756078e-04f, -2.875309322e-04f, -2.880857217e-04f,
+-2.886399754e-04f, -2.891936924e-04f, -2.897468718e-04f, -2.902995125e-04f, -2.908516138e-04f, -2.914031747e-04f, -2.919541942e-04f, -2.925046715e-04f, -2.930546057e-04f, -2.936039958e-04f,
+-2.941528409e-04f, -2.947011401e-04f, -2.952488925e-04f, -2.957960972e-04f, -2.963427533e-04f, -2.968888598e-04f, -2.974344160e-04f, -2.979794207e-04f, -2.985238732e-04f, -2.990677726e-04f,
+-2.996111179e-04f, -3.001539083e-04f, -3.006961428e-04f, -3.012378205e-04f, -3.017789406e-04f, -3.023195022e-04f, -3.028595042e-04f, -3.033989460e-04f, -3.039378265e-04f, -3.044761449e-04f,
+-3.050139002e-04f, -3.055510916e-04f, -3.060877183e-04f, -3.066237792e-04f, -3.071592735e-04f, -3.076942004e-04f, -3.082285589e-04f, -3.087623481e-04f, -3.092955673e-04f, -3.098282154e-04f,
+-3.103602916e-04f, -3.108917951e-04f, -3.114227249e-04f, -3.119530801e-04f, -3.124828600e-04f, -3.130120636e-04f, -3.135406900e-04f, -3.140687383e-04f, -3.145962078e-04f, -3.151230974e-04f,
+-3.156494064e-04f, -3.161751339e-04f, -3.167002790e-04f, -3.172248408e-04f, -3.177488185e-04f, -3.182722112e-04f, -3.187950180e-04f, -3.193172381e-04f, -3.198388706e-04f, -3.203599147e-04f,
+-3.208803694e-04f, -3.214002339e-04f, -3.219195075e-04f, -3.224381891e-04f, -3.229562780e-04f, -3.234737733e-04f, -3.239906741e-04f, -3.245069797e-04f, -3.250226890e-04f, -3.255378014e-04f,
+-3.260523159e-04f, -3.265662317e-04f, -3.270795479e-04f, -3.275922637e-04f, -3.281043782e-04f, -3.286158907e-04f, -3.291268002e-04f, -3.296371060e-04f, -3.301468071e-04f, -3.306559027e-04f,
+-3.311643921e-04f, -3.316722743e-04f, -3.321795485e-04f, -3.326862140e-04f, -3.331922697e-04f, -3.336977150e-04f, -3.342025490e-04f, -3.347067708e-04f, -3.352103797e-04f, -3.357133748e-04f,
+-3.362157552e-04f, -3.367175202e-04f, -3.372186688e-04f, -3.377192004e-04f, -3.382191140e-04f, -3.387184089e-04f, -3.392170842e-04f, -3.397151392e-04f, -3.402125729e-04f, -3.407093845e-04f,
+-3.412055733e-04f, -3.417011385e-04f, -3.421960792e-04f, -3.426903945e-04f, -3.431840838e-04f, -3.436771462e-04f, -3.441695808e-04f, -3.446613869e-04f, -3.451525637e-04f, -3.456431103e-04f,
+-3.461330259e-04f, -3.466223099e-04f, -3.471109612e-04f, -3.475989792e-04f, -3.480863630e-04f, -3.485731118e-04f, -3.490592249e-04f, -3.495447015e-04f, -3.500295407e-04f, -3.505137417e-04f,
+-3.509973038e-04f, -3.514802261e-04f, -3.519625080e-04f, -3.524441485e-04f, -3.529251469e-04f, -3.534055024e-04f, -3.538852142e-04f, -3.543642816e-04f, -3.548427037e-04f, -3.553204798e-04f,
+-3.557976090e-04f, -3.562740907e-04f, -3.567499240e-04f, -3.572251081e-04f, -3.576996423e-04f, -3.581735258e-04f, -3.586467578e-04f, -3.591193376e-04f, -3.595912643e-04f, -3.600625372e-04f,
+-3.605331556e-04f, -3.610031186e-04f, -3.614724254e-04f, -3.619410755e-04f, -3.624090678e-04f, -3.628764018e-04f, -3.633430766e-04f, -3.638090915e-04f, -3.642744456e-04f, -3.647391384e-04f,
+-3.652031689e-04f, -3.656665364e-04f, -3.661292402e-04f, -3.665912796e-04f, -3.670526537e-04f, -3.675133618e-04f, -3.679734032e-04f, -3.684327771e-04f, -3.688914828e-04f, -3.693495195e-04f,
+-3.698068864e-04f, -3.702635829e-04f, -3.707196082e-04f, -3.711749615e-04f, -3.716296421e-04f, -3.720836493e-04f, -3.725369822e-04f, -3.729896403e-04f, -3.734416227e-04f, -3.738929287e-04f,
+-3.743435576e-04f, -3.747935086e-04f, -3.752427811e-04f, -3.756913742e-04f, -3.761392873e-04f, -3.765865196e-04f, -3.770330703e-04f, -3.774789389e-04f, -3.779241245e-04f, -3.783686264e-04f,
+-3.788124439e-04f, -3.792555763e-04f, -3.796980229e-04f, -3.801397829e-04f, -3.805808556e-04f, -3.810212403e-04f, -3.814609363e-04f, -3.818999429e-04f, -3.823382594e-04f, -3.827758850e-04f,
+-3.832128191e-04f, -3.836490609e-04f, -3.840846097e-04f, -3.845194649e-04f, -3.849536256e-04f, -3.853870913e-04f, -3.858198613e-04f, -3.862519347e-04f, -3.866833109e-04f, -3.871139893e-04f,
+-3.875439691e-04f, -3.879732496e-04f, -3.884018301e-04f, -3.888297100e-04f, -3.892568885e-04f, -3.896833650e-04f, -3.901091387e-04f, -3.905342090e-04f, -3.909585752e-04f, -3.913822366e-04f,
+-3.918051926e-04f, -3.922274423e-04f, -3.926489852e-04f, -3.930698206e-04f, -3.934899478e-04f, -3.939093660e-04f, -3.943280748e-04f, -3.947460732e-04f, -3.951633608e-04f, -3.955799368e-04f,
+-3.959958005e-04f, -3.964109513e-04f, -3.968253885e-04f, -3.972391115e-04f, -3.976521195e-04f, -3.980644119e-04f, -3.984759880e-04f, -3.988868472e-04f, -3.992969889e-04f, -3.997064123e-04f,
+-4.001151168e-04f, -4.005231017e-04f, -4.009303664e-04f, -4.013369102e-04f, -4.017427325e-04f, -4.021478326e-04f, -4.025522099e-04f, -4.029558637e-04f, -4.033587934e-04f, -4.037609983e-04f,
+-4.041624778e-04f, -4.045632312e-04f, -4.049632579e-04f, -4.053625573e-04f, -4.057611286e-04f, -4.061589713e-04f, -4.065560848e-04f, -4.069524683e-04f, -4.073481213e-04f, -4.077430431e-04f,
+-4.081372331e-04f, -4.085306907e-04f, -4.089234151e-04f, -4.093154059e-04f, -4.097066624e-04f, -4.100971839e-04f, -4.104869698e-04f, -4.108760195e-04f, -4.112643323e-04f, -4.116519078e-04f,
+-4.120387451e-04f, -4.124248438e-04f, -4.128102031e-04f, -4.131948226e-04f, -4.135787015e-04f, -4.139618392e-04f, -4.143442352e-04f, -4.147258888e-04f, -4.151067995e-04f, -4.154869665e-04f,
+-4.158663893e-04f, -4.162450674e-04f, -4.166230000e-04f, -4.170001867e-04f, -4.173766267e-04f, -4.177523195e-04f, -4.181272645e-04f, -4.185014611e-04f, -4.188749087e-04f, -4.192476067e-04f,
+-4.196195545e-04f, -4.199907516e-04f, -4.203611972e-04f, -4.207308909e-04f, -4.210998321e-04f, -4.214680201e-04f, -4.218354544e-04f, -4.222021344e-04f, -4.225680595e-04f, -4.229332291e-04f,
+-4.232976427e-04f, -4.236612997e-04f, -4.240241995e-04f, -4.243863414e-04f, -4.247477251e-04f, -4.251083497e-04f, -4.254682149e-04f, -4.258273201e-04f, -4.261856646e-04f, -4.265432478e-04f,
+-4.269000693e-04f, -4.272561285e-04f, -4.276114248e-04f, -4.279659576e-04f, -4.283197263e-04f, -4.286727305e-04f, -4.290249696e-04f, -4.293764429e-04f, -4.297271500e-04f, -4.300770903e-04f,
+-4.304262632e-04f, -4.307746682e-04f, -4.311223048e-04f, -4.314691723e-04f, -4.318152703e-04f, -4.321605982e-04f, -4.325051554e-04f, -4.328489414e-04f, -4.331919557e-04f, -4.335341977e-04f,
+-4.338756669e-04f, -4.342163627e-04f, -4.345562847e-04f, -4.348954322e-04f, -4.352338048e-04f, -4.355714019e-04f, -4.359082230e-04f, -4.362442675e-04f, -4.365795349e-04f, -4.369140248e-04f,
+-4.372477365e-04f, -4.375806695e-04f, -4.379128234e-04f, -4.382441976e-04f, -4.385747915e-04f, -4.389046047e-04f, -4.392336367e-04f, -4.395618869e-04f, -4.398893548e-04f, -4.402160399e-04f,
+-4.405419418e-04f, -4.408670598e-04f, -4.411913934e-04f, -4.415149423e-04f, -4.418377058e-04f, -4.421596834e-04f, -4.424808747e-04f, -4.428012792e-04f, -4.431208963e-04f, -4.434397256e-04f,
+-4.437577665e-04f, -4.440750186e-04f, -4.443914813e-04f, -4.447071542e-04f, -4.450220368e-04f, -4.453361286e-04f, -4.456494291e-04f, -4.459619378e-04f, -4.462736542e-04f, -4.465845779e-04f,
+-4.468947083e-04f, -4.472040450e-04f, -4.475125874e-04f, -4.478203352e-04f, -4.481272879e-04f, -4.484334449e-04f, -4.487388057e-04f, -4.490433700e-04f, -4.493471372e-04f, -4.496501069e-04f,
+-4.499522786e-04f, -4.502536519e-04f, -4.505542261e-04f, -4.508540010e-04f, -4.511529760e-04f, -4.514511507e-04f, -4.517485246e-04f, -4.520450973e-04f, -4.523408683e-04f, -4.526358370e-04f,
+-4.529300032e-04f, -4.532233663e-04f, -4.535159259e-04f, -4.538076815e-04f, -4.540986327e-04f, -4.543887790e-04f, -4.546781199e-04f, -4.549666552e-04f, -4.552543842e-04f, -4.555413065e-04f,
+-4.558274218e-04f, -4.561127295e-04f, -4.563972293e-04f, -4.566809206e-04f, -4.569638031e-04f, -4.572458764e-04f, -4.575271399e-04f, -4.578075933e-04f, -4.580872361e-04f, -4.583660679e-04f,
+-4.586440883e-04f, -4.589212968e-04f, -4.591976931e-04f, -4.594732766e-04f, -4.597480471e-04f, -4.600220040e-04f, -4.602951470e-04f, -4.605674755e-04f, -4.608389893e-04f, -4.611096879e-04f,
+-4.613795709e-04f, -4.616486379e-04f, -4.619168884e-04f, -4.621843221e-04f, -4.624509385e-04f, -4.627167373e-04f, -4.629817180e-04f, -4.632458803e-04f, -4.635092237e-04f, -4.637717478e-04f,
+-4.640334523e-04f, -4.642943367e-04f, -4.645544007e-04f, -4.648136438e-04f, -4.650720657e-04f, -4.653296659e-04f, -4.655864442e-04f, -4.658424000e-04f, -4.660975331e-04f, -4.663518429e-04f,
+-4.666053293e-04f, -4.668579916e-04f, -4.671098297e-04f, -4.673608430e-04f, -4.676110313e-04f, -4.678603941e-04f, -4.681089311e-04f, -4.683566419e-04f, -4.686035261e-04f, -4.688495834e-04f,
+-4.690948133e-04f, -4.693392156e-04f, -4.695827898e-04f, -4.698255356e-04f, -4.700674526e-04f, -4.703085405e-04f, -4.705487989e-04f, -4.707882274e-04f, -4.710268257e-04f, -4.712645935e-04f,
+-4.715015303e-04f, -4.717376358e-04f, -4.719729097e-04f, -4.722073517e-04f, -4.724409613e-04f, -4.726737382e-04f, -4.729056821e-04f, -4.731367927e-04f, -4.733670695e-04f, -4.735965123e-04f,
+-4.738251207e-04f, -4.740528943e-04f, -4.742798330e-04f, -4.745059362e-04f, -4.747312036e-04f, -4.749556351e-04f, -4.751792301e-04f, -4.754019884e-04f, -4.756239096e-04f, -4.758449934e-04f,
+-4.760652396e-04f, -4.762846477e-04f, -4.765032175e-04f, -4.767209486e-04f, -4.769378407e-04f, -4.771538935e-04f, -4.773691066e-04f, -4.775834798e-04f, -4.777970128e-04f, -4.780097052e-04f,
+-4.782215568e-04f, -4.784325671e-04f, -4.786427360e-04f, -4.788520630e-04f, -4.790605480e-04f, -4.792681905e-04f, -4.794749904e-04f, -4.796809472e-04f, -4.798860607e-04f, -4.800903306e-04f,
+-4.802937567e-04f, -4.804963385e-04f, -4.806980758e-04f, -4.808989684e-04f, -4.810990159e-04f, -4.812982181e-04f, -4.814965746e-04f, -4.816940852e-04f, -4.818907495e-04f, -4.820865674e-04f,
+-4.822815385e-04f, -4.824756626e-04f, -4.826689393e-04f, -4.828613684e-04f, -4.830529497e-04f, -4.832436828e-04f, -4.834335674e-04f, -4.836226034e-04f, -4.838107904e-04f, -4.839981281e-04f,
+-4.841846164e-04f, -4.843702549e-04f, -4.845550434e-04f, -4.847389815e-04f, -4.849220692e-04f, -4.851043060e-04f, -4.852856918e-04f, -4.854662262e-04f, -4.856459091e-04f, -4.858247401e-04f,
+-4.860027191e-04f, -4.861798458e-04f, -4.863561198e-04f, -4.865315411e-04f, -4.867061093e-04f, -4.868798241e-04f, -4.870526855e-04f, -4.872246930e-04f, -4.873958465e-04f, -4.875661457e-04f,
+-4.877355904e-04f, -4.879041804e-04f, -4.880719154e-04f, -4.882387953e-04f, -4.884048196e-04f, -4.885699883e-04f, -4.887343012e-04f, -4.888977579e-04f, -4.890603582e-04f, -4.892221020e-04f,
+-4.893829890e-04f, -4.895430191e-04f, -4.897021919e-04f, -4.898605072e-04f, -4.900179649e-04f, -4.901745647e-04f, -4.903303065e-04f, -4.904851900e-04f, -4.906392149e-04f, -4.907923812e-04f,
+-4.909446885e-04f, -4.910961367e-04f, -4.912467256e-04f, -4.913964550e-04f, -4.915453247e-04f, -4.916933344e-04f, -4.918404840e-04f, -4.919867733e-04f, -4.921322021e-04f, -4.922767702e-04f,
+-4.924204774e-04f, -4.925633235e-04f, -4.927053084e-04f, -4.928464318e-04f, -4.929866935e-04f, -4.931260934e-04f, -4.932646313e-04f, -4.934023071e-04f, -4.935391204e-04f, -4.936750712e-04f,
+-4.938101593e-04f, -4.939443845e-04f, -4.940777466e-04f, -4.942102455e-04f, -4.943418810e-04f, -4.944726529e-04f, -4.946025610e-04f, -4.947316053e-04f, -4.948597854e-04f, -4.949871013e-04f,
+-4.951135528e-04f, -4.952391398e-04f, -4.953638620e-04f, -4.954877194e-04f, -4.956107117e-04f, -4.957328389e-04f, -4.958541007e-04f, -4.959744970e-04f, -4.960940277e-04f, -4.962126926e-04f,
+-4.963304916e-04f, -4.964474245e-04f, -4.965634912e-04f, -4.966786915e-04f, -4.967930253e-04f, -4.969064925e-04f, -4.970190929e-04f, -4.971308265e-04f, -4.972416929e-04f, -4.973516922e-04f,
+-4.974608242e-04f, -4.975690888e-04f, -4.976764858e-04f, -4.977830151e-04f, -4.978886766e-04f, -4.979934701e-04f, -4.980973956e-04f, -4.982004529e-04f, -4.983026419e-04f, -4.984039625e-04f,
+-4.985044146e-04f, -4.986039980e-04f, -4.987027127e-04f, -4.988005584e-04f, -4.988975352e-04f, -4.989936430e-04f, -4.990888815e-04f, -4.991832507e-04f, -4.992767505e-04f, -4.993693808e-04f,
+-4.994611415e-04f, -4.995520325e-04f, -4.996420537e-04f, -4.997312050e-04f, -4.998194862e-04f, -4.999068974e-04f, -4.999934385e-04f, -5.000791092e-04f, -5.001639096e-04f, -5.002478395e-04f,
+-5.003308989e-04f, -5.004130877e-04f, -5.004944058e-04f, -5.005748531e-04f, -5.006544296e-04f, -5.007331351e-04f, -5.008109696e-04f, -5.008879330e-04f, -5.009640252e-04f, -5.010392462e-04f,
+-5.011135960e-04f, -5.011870743e-04f, -5.012596812e-04f, -5.013314165e-04f, -5.014022804e-04f, -5.014722725e-04f, -5.015413930e-04f, -5.016096417e-04f, -5.016770186e-04f, -5.017435236e-04f,
+-5.018091568e-04f, -5.018739179e-04f, -5.019378070e-04f, -5.020008240e-04f, -5.020629688e-04f, -5.021242415e-04f, -5.021846420e-04f, -5.022441701e-04f, -5.023028260e-04f, -5.023606095e-04f,
+-5.024175206e-04f, -5.024735593e-04f, -5.025287255e-04f, -5.025830192e-04f, -5.026364403e-04f, -5.026889889e-04f, -5.027406648e-04f, -5.027914682e-04f, -5.028413988e-04f, -5.028904568e-04f,
+-5.029386420e-04f, -5.029859545e-04f, -5.030323942e-04f, -5.030779612e-04f, -5.031226553e-04f, -5.031664766e-04f, -5.032094251e-04f, -5.032515008e-04f, -5.032927035e-04f, -5.033330334e-04f,
+-5.033724904e-04f, -5.034110745e-04f, -5.034487857e-04f, -5.034856240e-04f, -5.035215894e-04f, -5.035566819e-04f, -5.035909014e-04f, -5.036242481e-04f, -5.036567218e-04f, -5.036883226e-04f,
+-5.037190505e-04f, -5.037489055e-04f, -5.037778876e-04f, -5.038059969e-04f, -5.038332333e-04f, -5.038595968e-04f, -5.038850874e-04f, -5.039097053e-04f, -5.039334503e-04f, -5.039563226e-04f,
+-5.039783220e-04f, -5.039994487e-04f, -5.040197027e-04f, -5.040390840e-04f, -5.040575926e-04f, -5.040752286e-04f, -5.040919920e-04f, -5.041078827e-04f, -5.041229009e-04f, -5.041370466e-04f,
+-5.041503198e-04f, -5.041627206e-04f, -5.041742489e-04f, -5.041849048e-04f, -5.041946885e-04f, -5.042035998e-04f, -5.042116389e-04f, -5.042188058e-04f, -5.042251005e-04f, -5.042305232e-04f,
+-5.042350738e-04f, -5.042387524e-04f, -5.042415590e-04f, -5.042434937e-04f, -5.042445567e-04f, -5.042447478e-04f, -5.042440672e-04f, -5.042425150e-04f, -5.042400911e-04f, -5.042367957e-04f,
+-5.042326289e-04f, -5.042275907e-04f, -5.042216811e-04f, -5.042149002e-04f, -5.042072482e-04f, -5.041987251e-04f, -5.041893309e-04f, -5.041790657e-04f, -5.041679297e-04f, -5.041559228e-04f,
+-5.041430452e-04f, -5.041292970e-04f, -5.041146782e-04f, -5.040991889e-04f, -5.040828292e-04f, -5.040655992e-04f, -5.040474990e-04f, -5.040285286e-04f, -5.040086883e-04f, -5.039879779e-04f,
+-5.039663978e-04f, -5.039439479e-04f, -5.039206283e-04f, -5.038964392e-04f, -5.038713806e-04f, -5.038454527e-04f, -5.038186555e-04f, -5.037909892e-04f, -5.037624539e-04f, -5.037330497e-04f,
+-5.037027766e-04f, -5.036716349e-04f, -5.036396245e-04f, -5.036067457e-04f, -5.035729986e-04f, -5.035383831e-04f, -5.035028996e-04f, -5.034665481e-04f, -5.034293287e-04f, -5.033912416e-04f,
+-5.033522868e-04f, -5.033124645e-04f, -5.032717749e-04f, -5.032302180e-04f, -5.031877940e-04f, -5.031445030e-04f, -5.031003452e-04f, -5.030553207e-04f, -5.030094296e-04f, -5.029626721e-04f,
+-5.029150483e-04f, -5.028665583e-04f, -5.028172023e-04f, -5.027669805e-04f, -5.027158929e-04f, -5.026639398e-04f, -5.026111213e-04f, -5.025574375e-04f, -5.025028885e-04f, -5.024474746e-04f,
+-5.023911959e-04f, -5.023340526e-04f, -5.022760447e-04f, -5.022171726e-04f, -5.021574362e-04f, -5.020968358e-04f, -5.020353716e-04f, -5.019730437e-04f, -5.019098523e-04f, -5.018457975e-04f,
+-5.017808796e-04f, -5.017150986e-04f, -5.016484548e-04f, -5.015809484e-04f, -5.015125795e-04f, -5.014433482e-04f, -5.013732549e-04f, -5.013022996e-04f, -5.012304825e-04f, -5.011578039e-04f,
+-5.010842638e-04f, -5.010098625e-04f, -5.009346002e-04f, -5.008584771e-04f, -5.007814933e-04f, -5.007036491e-04f, -5.006249446e-04f, -5.005453801e-04f, -5.004649557e-04f, -5.003836716e-04f,
+-5.003015280e-04f, -5.002185252e-04f, -5.001346633e-04f, -5.000499426e-04f, -4.999643631e-04f, -4.998779253e-04f, -4.997906292e-04f, -4.997024750e-04f, -4.996134630e-04f, -4.995235935e-04f,
+-4.994328665e-04f, -4.993412823e-04f, -4.992488412e-04f, -4.991555434e-04f, -4.990613890e-04f, -4.989663783e-04f, -4.988705115e-04f, -4.987737889e-04f, -4.986762106e-04f, -4.985777769e-04f,
+-4.984784881e-04f, -4.983783443e-04f, -4.982773458e-04f, -4.981754928e-04f, -4.980727856e-04f, -4.979692244e-04f, -4.978648093e-04f, -4.977595408e-04f, -4.976534190e-04f, -4.975464441e-04f,
+-4.974386164e-04f, -4.973299362e-04f, -4.972204036e-04f, -4.971100189e-04f, -4.969987825e-04f, -4.968866945e-04f, -4.967737551e-04f, -4.966599647e-04f, -4.965453235e-04f, -4.964298317e-04f,
+-4.963134897e-04f, -4.961962976e-04f, -4.960782557e-04f, -4.959593644e-04f, -4.958396237e-04f, -4.957190341e-04f, -4.955975958e-04f, -4.954753090e-04f, -4.953521741e-04f, -4.952281912e-04f,
+-4.951033607e-04f, -4.949776829e-04f, -4.948511579e-04f, -4.947237862e-04f, -4.945955679e-04f, -4.944665034e-04f, -4.943365929e-04f, -4.942058367e-04f, -4.940742351e-04f, -4.939417884e-04f,
+-4.938084969e-04f, -4.936743608e-04f, -4.935393804e-04f, -4.934035561e-04f, -4.932668882e-04f, -4.931293768e-04f, -4.929910224e-04f, -4.928518252e-04f, -4.927117855e-04f, -4.925709036e-04f,
+-4.924291799e-04f, -4.922866145e-04f, -4.921432079e-04f, -4.919989603e-04f, -4.918538721e-04f, -4.917079435e-04f, -4.915611748e-04f, -4.914135664e-04f, -4.912651186e-04f, -4.911158317e-04f,
+-4.909657060e-04f, -4.908147418e-04f, -4.906629394e-04f, -4.905102993e-04f, -4.903568216e-04f, -4.902025067e-04f, -4.900473549e-04f, -4.898913666e-04f, -4.897345421e-04f, -4.895768817e-04f,
+-4.894183857e-04f, -4.892590545e-04f, -4.890988884e-04f, -4.889378878e-04f, -4.887760529e-04f, -4.886133841e-04f, -4.884498818e-04f, -4.882855463e-04f, -4.881203779e-04f, -4.879543770e-04f,
+-4.877875439e-04f, -4.876198790e-04f, -4.874513826e-04f, -4.872820550e-04f, -4.871118966e-04f, -4.869409078e-04f, -4.867690890e-04f, -4.865964403e-04f, -4.864229623e-04f, -4.862486553e-04f,
+-4.860735196e-04f, -4.858975556e-04f, -4.857207637e-04f, -4.855431442e-04f, -4.853646975e-04f, -4.851854239e-04f, -4.850053238e-04f, -4.848243976e-04f, -4.846426457e-04f, -4.844600684e-04f,
+-4.842766661e-04f, -4.840924391e-04f, -4.839073879e-04f, -4.837215128e-04f, -4.835348143e-04f, -4.833472926e-04f, -4.831589481e-04f, -4.829697813e-04f, -4.827797925e-04f, -4.825889821e-04f,
+-4.823973505e-04f, -4.822048981e-04f, -4.820116253e-04f, -4.818175324e-04f, -4.816226199e-04f, -4.814268881e-04f, -4.812303375e-04f, -4.810329684e-04f, -4.808347812e-04f, -4.806357764e-04f,
+-4.804359543e-04f, -4.802353153e-04f, -4.800338599e-04f, -4.798315884e-04f, -4.796285012e-04f, -4.794245988e-04f, -4.792198816e-04f, -4.790143500e-04f, -4.788080043e-04f, -4.786008450e-04f,
+-4.783928725e-04f, -4.781840873e-04f, -4.779744897e-04f, -4.777640801e-04f, -4.775528591e-04f, -4.773408269e-04f, -4.771279841e-04f, -4.769143309e-04f, -4.766998680e-04f, -4.764845957e-04f,
+-4.762685144e-04f, -4.760516245e-04f, -4.758339265e-04f, -4.756154209e-04f, -4.753961080e-04f, -4.751759882e-04f, -4.749550621e-04f, -4.747333301e-04f, -4.745107925e-04f, -4.742874499e-04f,
+-4.740633026e-04f, -4.738383512e-04f, -4.736125960e-04f, -4.733860376e-04f, -4.731586763e-04f, -4.729305125e-04f, -4.727015469e-04f, -4.724717797e-04f, -4.722412116e-04f, -4.720098428e-04f,
+-4.717776738e-04f, -4.715447052e-04f, -4.713109374e-04f, -4.710763708e-04f, -4.708410059e-04f, -4.706048432e-04f, -4.703678831e-04f, -4.701301261e-04f, -4.698915726e-04f, -4.696522231e-04f,
+-4.694120781e-04f, -4.691711381e-04f, -4.689294035e-04f, -4.686868749e-04f, -4.684435525e-04f, -4.681994371e-04f, -4.679545289e-04f, -4.677088286e-04f, -4.674623365e-04f, -4.672150533e-04f,
+-4.669669792e-04f, -4.667181149e-04f, -4.664684608e-04f, -4.662180174e-04f, -4.659667851e-04f, -4.657147646e-04f, -4.654619562e-04f, -4.652083604e-04f, -4.649539779e-04f, -4.646988089e-04f,
+-4.644428541e-04f, -4.641861139e-04f, -4.639285888e-04f, -4.636702794e-04f, -4.634111861e-04f, -4.631513095e-04f, -4.628906499e-04f, -4.626292080e-04f, -4.623669843e-04f, -4.621039792e-04f,
+-4.618401932e-04f, -4.615756269e-04f, -4.613102809e-04f, -4.610441554e-04f, -4.607772512e-04f, -4.605095688e-04f, -4.602411085e-04f, -4.599718710e-04f, -4.597018568e-04f, -4.594310664e-04f,
+-4.591595003e-04f, -4.588871590e-04f, -4.586140431e-04f, -4.583401531e-04f, -4.580654894e-04f, -4.577900528e-04f, -4.575138436e-04f, -4.572368623e-04f, -4.569591097e-04f, -4.566805861e-04f,
+-4.564012920e-04f, -4.561212282e-04f, -4.558403950e-04f, -4.555587930e-04f, -4.552764227e-04f, -4.549932848e-04f, -4.547093797e-04f, -4.544247079e-04f, -4.541392701e-04f, -4.538530667e-04f,
+-4.535660984e-04f, -4.532783656e-04f, -4.529898690e-04f, -4.527006090e-04f, -4.524105862e-04f, -4.521198012e-04f, -4.518282545e-04f, -4.515359467e-04f, -4.512428783e-04f, -4.509490499e-04f,
+-4.506544621e-04f, -4.503591154e-04f, -4.500630104e-04f, -4.497661477e-04f, -4.494685277e-04f, -4.491701512e-04f, -4.488710185e-04f, -4.485711304e-04f, -4.482704874e-04f, -4.479690900e-04f,
+-4.476669389e-04f, -4.473640346e-04f, -4.470603776e-04f, -4.467559686e-04f, -4.464508082e-04f, -4.461448968e-04f, -4.458382352e-04f, -4.455308238e-04f, -4.452226632e-04f, -4.449137542e-04f,
+-4.446040971e-04f, -4.442936927e-04f, -4.439825414e-04f, -4.436706440e-04f, -4.433580009e-04f, -4.430446128e-04f, -4.427304803e-04f, -4.424156039e-04f, -4.420999843e-04f, -4.417836221e-04f,
+-4.414665177e-04f, -4.411486720e-04f, -4.408300854e-04f, -4.405107585e-04f, -4.401906920e-04f, -4.398698865e-04f, -4.395483425e-04f, -4.392260607e-04f, -4.389030417e-04f, -4.385792860e-04f,
+-4.382547944e-04f, -4.379295673e-04f, -4.376036055e-04f, -4.372769096e-04f, -4.369494800e-04f, -4.366213176e-04f, -4.362924228e-04f, -4.359627963e-04f, -4.356324388e-04f, -4.353013508e-04f,
+-4.349695330e-04f, -4.346369859e-04f, -4.343037103e-04f, -4.339697067e-04f, -4.336349758e-04f, -4.332995182e-04f, -4.329633345e-04f, -4.326264254e-04f, -4.322887915e-04f, -4.319504334e-04f,
+-4.316113518e-04f, -4.312715472e-04f, -4.309310204e-04f, -4.305897720e-04f, -4.302478026e-04f, -4.299051128e-04f, -4.295617033e-04f, -4.292175748e-04f, -4.288727278e-04f, -4.285271631e-04f,
+-4.281808812e-04f, -4.278338829e-04f, -4.274861687e-04f, -4.271377394e-04f, -4.267885955e-04f, -4.264387378e-04f, -4.260881668e-04f, -4.257368833e-04f, -4.253848878e-04f, -4.250321811e-04f,
+-4.246787638e-04f, -4.243246366e-04f, -4.239698001e-04f, -4.236142550e-04f, -4.232580020e-04f, -4.229010416e-04f, -4.225433747e-04f, -4.221850018e-04f, -4.218259236e-04f, -4.214661408e-04f,
+-4.211056541e-04f, -4.207444640e-04f, -4.203825714e-04f, -4.200199769e-04f, -4.196566811e-04f, -4.192926848e-04f, -4.189279885e-04f, -4.185625931e-04f, -4.181964991e-04f, -4.178297072e-04f,
+-4.174622182e-04f, -4.170940327e-04f, -4.167251513e-04f, -4.163555749e-04f, -4.159853040e-04f, -4.156143394e-04f, -4.152426817e-04f, -4.148703316e-04f, -4.144972899e-04f, -4.141235572e-04f,
+-4.137491342e-04f, -4.133740216e-04f, -4.129982201e-04f, -4.126217304e-04f, -4.122445532e-04f, -4.118666892e-04f, -4.114881391e-04f, -4.111089036e-04f, -4.107289834e-04f, -4.103483792e-04f,
+-4.099670917e-04f, -4.095851216e-04f, -4.092024696e-04f, -4.088191365e-04f, -4.084351229e-04f, -4.080504296e-04f, -4.076650572e-04f, -4.072790065e-04f, -4.068922782e-04f, -4.065048730e-04f,
+-4.061167916e-04f, -4.057280347e-04f, -4.053386031e-04f, -4.049484975e-04f, -4.045577186e-04f, -4.041662671e-04f, -4.037741438e-04f, -4.033813493e-04f, -4.029878844e-04f, -4.025937498e-04f,
+-4.021989463e-04f, -4.018034745e-04f, -4.014073353e-04f, -4.010105293e-04f, -4.006130572e-04f, -4.002149199e-04f, -3.998161179e-04f, -3.994166522e-04f, -3.990165233e-04f, -3.986157321e-04f,
+-3.982142793e-04f, -3.978121656e-04f, -3.974093918e-04f, -3.970059585e-04f, -3.966018666e-04f, -3.961971168e-04f, -3.957917098e-04f, -3.953856464e-04f, -3.949789274e-04f, -3.945715534e-04f,
+-3.941635252e-04f, -3.937548436e-04f, -3.933455094e-04f, -3.929355232e-04f, -3.925248858e-04f, -3.921135981e-04f, -3.917016606e-04f, -3.912890743e-04f, -3.908758399e-04f, -3.904619580e-04f,
+-3.900474295e-04f, -3.896322552e-04f, -3.892164358e-04f, -3.887999720e-04f, -3.883828647e-04f, -3.879651145e-04f, -3.875467223e-04f, -3.871276889e-04f, -3.867080149e-04f, -3.862877012e-04f,
+-3.858667485e-04f, -3.854451577e-04f, -3.850229294e-04f, -3.846000645e-04f, -3.841765637e-04f, -3.837524278e-04f, -3.833276576e-04f, -3.829022538e-04f, -3.824762173e-04f, -3.820495488e-04f,
+-3.816222492e-04f, -3.811943191e-04f, -3.807657593e-04f, -3.803365707e-04f, -3.799067541e-04f, -3.794763101e-04f, -3.790452397e-04f, -3.786135436e-04f, -3.781812225e-04f, -3.777482774e-04f,
+-3.773147089e-04f, -3.768805178e-04f, -3.764457050e-04f, -3.760102713e-04f, -3.755742174e-04f, -3.751375441e-04f, -3.747002523e-04f, -3.742623427e-04f, -3.738238162e-04f, -3.733846735e-04f,
+-3.729449154e-04f, -3.725045428e-04f, -3.720635564e-04f, -3.716219571e-04f, -3.711797456e-04f, -3.707369228e-04f, -3.702934894e-04f, -3.698494464e-04f, -3.694047944e-04f, -3.689595343e-04f,
+-3.685136669e-04f, -3.680671931e-04f, -3.676201135e-04f, -3.671724292e-04f, -3.667241408e-04f, -3.662752492e-04f, -3.658257551e-04f, -3.653756595e-04f, -3.649249632e-04f, -3.644736669e-04f,
+-3.640217714e-04f, -3.635692777e-04f, -3.631161865e-04f, -3.626624987e-04f, -3.622082150e-04f, -3.617533363e-04f, -3.612978635e-04f, -3.608417973e-04f, -3.603851386e-04f, -3.599278883e-04f,
+-3.594700470e-04f, -3.590116158e-04f, -3.585525954e-04f, -3.580929866e-04f, -3.576327903e-04f, -3.571720073e-04f, -3.567106385e-04f, -3.562486847e-04f, -3.557861467e-04f, -3.553230254e-04f,
+-3.548593215e-04f, -3.543950361e-04f, -3.539301698e-04f, -3.534647236e-04f, -3.529986983e-04f, -3.525320947e-04f, -3.520649137e-04f, -3.515971561e-04f, -3.511288228e-04f, -3.506599146e-04f,
+-3.501904324e-04f, -3.497203770e-04f, -3.492497493e-04f, -3.487785501e-04f, -3.483067803e-04f, -3.478344408e-04f, -3.473615323e-04f, -3.468880558e-04f, -3.464140121e-04f, -3.459394021e-04f,
+-3.454642266e-04f, -3.449884865e-04f, -3.445121826e-04f, -3.440353159e-04f, -3.435578871e-04f, -3.430798971e-04f, -3.426013469e-04f, -3.421222372e-04f, -3.416425690e-04f, -3.411623431e-04f,
+-3.406815603e-04f, -3.402002216e-04f, -3.397183278e-04f, -3.392358798e-04f, -3.387528785e-04f, -3.382693247e-04f, -3.377852192e-04f, -3.373005631e-04f, -3.368153571e-04f, -3.363296022e-04f,
+-3.358432991e-04f, -3.353564489e-04f, -3.348690523e-04f, -3.343811102e-04f, -3.338926236e-04f, -3.334035933e-04f, -3.329140202e-04f, -3.324239052e-04f, -3.319332491e-04f, -3.314420529e-04f,
+-3.309503174e-04f, -3.304580435e-04f, -3.299652322e-04f, -3.294718842e-04f, -3.289780005e-04f, -3.284835821e-04f, -3.279886296e-04f, -3.274931442e-04f, -3.269971266e-04f, -3.265005777e-04f,
+-3.260034985e-04f, -3.255058898e-04f, -3.250077526e-04f, -3.245090877e-04f, -3.240098961e-04f, -3.235101785e-04f, -3.230099360e-04f, -3.225091695e-04f, -3.220078798e-04f, -3.215060678e-04f,
+-3.210037345e-04f, -3.205008807e-04f, -3.199975073e-04f, -3.194936153e-04f, -3.189892056e-04f, -3.184842791e-04f, -3.179788366e-04f, -3.174728792e-04f, -3.169664076e-04f, -3.164594228e-04f,
+-3.159519258e-04f, -3.154439174e-04f, -3.149353986e-04f, -3.144263702e-04f, -3.139168332e-04f, -3.134067885e-04f, -3.128962370e-04f, -3.123851797e-04f, -3.118736174e-04f, -3.113615510e-04f,
+-3.108489816e-04f, -3.103359099e-04f, -3.098223370e-04f, -3.093082637e-04f, -3.087936911e-04f, -3.082786199e-04f, -3.077630511e-04f, -3.072469857e-04f, -3.067304246e-04f, -3.062133686e-04f,
+-3.056958188e-04f, -3.051777761e-04f, -3.046592414e-04f, -3.041402155e-04f, -3.036206996e-04f, -3.031006944e-04f, -3.025802009e-04f, -3.020592201e-04f, -3.015377529e-04f, -3.010158001e-04f,
+-3.004933629e-04f, -2.999704420e-04f, -2.994470385e-04f, -2.989231532e-04f, -2.983987871e-04f, -2.978739412e-04f, -2.973486164e-04f, -2.968228136e-04f, -2.962965338e-04f, -2.957697779e-04f,
+-2.952425468e-04f, -2.947148415e-04f, -2.941866630e-04f, -2.936580122e-04f, -2.931288900e-04f, -2.925992974e-04f, -2.920692353e-04f, -2.915387048e-04f, -2.910077066e-04f, -2.904762418e-04f,
+-2.899443114e-04f, -2.894119163e-04f, -2.888790573e-04f, -2.883457356e-04f, -2.878119520e-04f, -2.872777076e-04f, -2.867430031e-04f, -2.862078397e-04f, -2.856722183e-04f, -2.851361398e-04f,
+-2.845996051e-04f, -2.840626153e-04f, -2.835251713e-04f, -2.829872741e-04f, -2.824489246e-04f, -2.819101238e-04f, -2.813708726e-04f, -2.808311720e-04f, -2.802910231e-04f, -2.797504266e-04f,
+-2.792093837e-04f, -2.786678952e-04f, -2.781259622e-04f, -2.775835856e-04f, -2.770407663e-04f, -2.764975054e-04f, -2.759538038e-04f, -2.754096625e-04f, -2.748650825e-04f, -2.743200647e-04f,
+-2.737746101e-04f, -2.732287196e-04f, -2.726823943e-04f, -2.721356352e-04f, -2.715884431e-04f, -2.710408191e-04f, -2.704927641e-04f, -2.699442792e-04f, -2.693953653e-04f, -2.688460233e-04f,
+-2.682962543e-04f, -2.677460593e-04f, -2.671954392e-04f, -2.666443950e-04f, -2.660929276e-04f, -2.655410382e-04f, -2.649887276e-04f, -2.644359968e-04f, -2.638828468e-04f, -2.633292787e-04f,
+-2.627752933e-04f, -2.622208918e-04f, -2.616660749e-04f, -2.611108439e-04f, -2.605551996e-04f, -2.599991430e-04f, -2.594426751e-04f, -2.588857970e-04f, -2.583285095e-04f, -2.577708138e-04f,
+-2.572127107e-04f, -2.566542013e-04f, -2.560952866e-04f, -2.555359675e-04f, -2.549762451e-04f, -2.544161204e-04f, -2.538555943e-04f, -2.532946679e-04f, -2.527333421e-04f, -2.521716180e-04f,
+-2.516094965e-04f, -2.510469786e-04f, -2.504840654e-04f, -2.499207579e-04f, -2.493570570e-04f, -2.487929637e-04f, -2.482284791e-04f, -2.476636041e-04f, -2.470983398e-04f, -2.465326872e-04f,
+-2.459666472e-04f, -2.454002209e-04f, -2.448334092e-04f, -2.442662133e-04f, -2.436986340e-04f, -2.431306725e-04f, -2.425623296e-04f, -2.419936065e-04f, -2.414245040e-04f, -2.408550234e-04f,
+-2.402851654e-04f, -2.397149312e-04f, -2.391443218e-04f, -2.385733382e-04f, -2.380019814e-04f, -2.374302523e-04f, -2.368581521e-04f, -2.362856817e-04f, -2.357128422e-04f, -2.351396346e-04f,
+-2.345660598e-04f, -2.339921189e-04f, -2.334178130e-04f, -2.328431430e-04f, -2.322681099e-04f, -2.316927148e-04f, -2.311169587e-04f, -2.305408427e-04f, -2.299643676e-04f, -2.293875346e-04f,
+-2.288103447e-04f, -2.282327989e-04f, -2.276548983e-04f, -2.270766437e-04f, -2.264980364e-04f, -2.259190772e-04f, -2.253397673e-04f, -2.247601076e-04f, -2.241800992e-04f, -2.235997431e-04f,
+-2.230190403e-04f, -2.224379919e-04f, -2.218565988e-04f, -2.212748622e-04f, -2.206927830e-04f, -2.201103623e-04f, -2.195276011e-04f, -2.189445005e-04f, -2.183610614e-04f, -2.177772849e-04f,
+-2.171931720e-04f, -2.166087238e-04f, -2.160239413e-04f, -2.154388256e-04f, -2.148533775e-04f, -2.142675983e-04f, -2.136814890e-04f, -2.130950505e-04f, -2.125082839e-04f, -2.119211903e-04f,
+-2.113337707e-04f, -2.107460260e-04f, -2.101579575e-04f, -2.095695660e-04f, -2.089808527e-04f, -2.083918186e-04f, -2.078024647e-04f, -2.072127920e-04f, -2.066228017e-04f, -2.060324947e-04f,
+-2.054418721e-04f, -2.048509349e-04f, -2.042596842e-04f, -2.036681210e-04f, -2.030762464e-04f, -2.024840614e-04f, -2.018915671e-04f, -2.012987644e-04f, -2.007056545e-04f, -2.001122384e-04f,
+-1.995185171e-04f, -1.989244917e-04f, -1.983301633e-04f, -1.977355328e-04f, -1.971406014e-04f, -1.965453700e-04f, -1.959498398e-04f, -1.953540117e-04f, -1.947578869e-04f, -1.941614664e-04f,
+-1.935647512e-04f, -1.929677424e-04f, -1.923704411e-04f, -1.917728482e-04f, -1.911749649e-04f, -1.905767922e-04f, -1.899783311e-04f, -1.893795827e-04f, -1.887805481e-04f, -1.881812284e-04f,
+-1.875816245e-04f, -1.869817375e-04f, -1.863815685e-04f, -1.857811186e-04f, -1.851803888e-04f, -1.845793801e-04f, -1.839780936e-04f, -1.833765305e-04f, -1.827746916e-04f, -1.821725782e-04f,
+-1.815701912e-04f, -1.809675318e-04f, -1.803646009e-04f, -1.797613997e-04f, -1.791579291e-04f, -1.785541903e-04f, -1.779501844e-04f, -1.773459123e-04f, -1.767413752e-04f, -1.761365741e-04f,
+-1.755315101e-04f, -1.749261842e-04f, -1.743205976e-04f, -1.737147512e-04f, -1.731086461e-04f, -1.725022835e-04f, -1.718956643e-04f, -1.712887897e-04f, -1.706816606e-04f, -1.700742783e-04f,
+-1.694666436e-04f, -1.688587578e-04f, -1.682506219e-04f, -1.676422369e-04f, -1.670336039e-04f, -1.664247240e-04f, -1.658155982e-04f, -1.652062277e-04f, -1.645966135e-04f, -1.639867566e-04f,
+-1.633766582e-04f, -1.627663193e-04f, -1.621557409e-04f, -1.615449242e-04f, -1.609338702e-04f, -1.603225801e-04f, -1.597110547e-04f, -1.590992954e-04f, -1.584873030e-04f, -1.578750788e-04f,
+-1.572626237e-04f, -1.566499388e-04f, -1.560370253e-04f, -1.554238842e-04f, -1.548105165e-04f, -1.541969234e-04f, -1.535831058e-04f, -1.529690650e-04f, -1.523548020e-04f, -1.517403178e-04f,
+-1.511256135e-04f, -1.505106903e-04f, -1.498955491e-04f, -1.492801911e-04f, -1.486646174e-04f, -1.480488289e-04f, -1.474328269e-04f, -1.468166123e-04f, -1.462001864e-04f, -1.455835500e-04f,
+-1.449667044e-04f, -1.443496506e-04f, -1.437323896e-04f, -1.431149227e-04f, -1.424972507e-04f, -1.418793749e-04f, -1.412612964e-04f, -1.406430161e-04f, -1.400245352e-04f, -1.394058547e-04f,
+-1.387869759e-04f, -1.381678996e-04f, -1.375486270e-04f, -1.369291593e-04f, -1.363094974e-04f, -1.356896425e-04f, -1.350695957e-04f, -1.344493579e-04f, -1.338289305e-04f, -1.332083143e-04f,
+-1.325875105e-04f, -1.319665202e-04f, -1.313453444e-04f, -1.307239844e-04f, -1.301024410e-04f, -1.294807155e-04f, -1.288588089e-04f, -1.282367223e-04f, -1.276144568e-04f, -1.269920135e-04f,
+-1.263693935e-04f, -1.257465978e-04f, -1.251236275e-04f, -1.245004838e-04f, -1.238771678e-04f, -1.232536804e-04f, -1.226300228e-04f, -1.220061962e-04f, -1.213822015e-04f, -1.207580399e-04f,
+-1.201337125e-04f, -1.195092203e-04f, -1.188845645e-04f, -1.182597461e-04f, -1.176347662e-04f, -1.170096260e-04f, -1.163843265e-04f, -1.157588688e-04f, -1.151332540e-04f, -1.145074832e-04f,
+-1.138815575e-04f, -1.132554779e-04f, -1.126292457e-04f, -1.120028617e-04f, -1.113763273e-04f, -1.107496434e-04f, -1.101228112e-04f, -1.094958316e-04f, -1.088687060e-04f, -1.082414352e-04f,
+-1.076140205e-04f, -1.069864629e-04f, -1.063587635e-04f, -1.057309234e-04f, -1.051029438e-04f, -1.044748256e-04f, -1.038465700e-04f, -1.032181781e-04f, -1.025896510e-04f, -1.019609898e-04f,
+-1.013321955e-04f, -1.007032694e-04f, -1.000742124e-04f, -9.944502567e-05f, -9.881571031e-05f, -9.818626742e-05f, -9.755669808e-05f, -9.692700340e-05f, -9.629718448e-05f, -9.566724241e-05f,
+-9.503717829e-05f, -9.440699322e-05f, -9.377668829e-05f, -9.314626461e-05f, -9.251572327e-05f, -9.188506537e-05f, -9.125429201e-05f, -9.062340429e-05f, -8.999240331e-05f, -8.936129016e-05f,
+-8.873006594e-05f, -8.809873176e-05f, -8.746728871e-05f, -8.683573790e-05f, -8.620408041e-05f, -8.557231736e-05f, -8.494044984e-05f, -8.430847894e-05f, -8.367640578e-05f, -8.304423145e-05f,
+-8.241195705e-05f, -8.177958368e-05f, -8.114711245e-05f, -8.051454444e-05f, -7.988188076e-05f, -7.924912252e-05f, -7.861627081e-05f, -7.798332674e-05f, -7.735029140e-05f, -7.671716589e-05f,
+-7.608395132e-05f, -7.545064879e-05f, -7.481725940e-05f, -7.418378424e-05f, -7.355022443e-05f, -7.291658106e-05f, -7.228285524e-05f, -7.164904805e-05f, -7.101516062e-05f, -7.038119403e-05f,
+-6.974714940e-05f, -6.911302781e-05f, -6.847883038e-05f, -6.784455821e-05f, -6.721021239e-05f, -6.657579403e-05f, -6.594130424e-05f, -6.530674410e-05f, -6.467211473e-05f, -6.403741723e-05f,
+-6.340265270e-05f, -6.276782224e-05f, -6.213292695e-05f, -6.149796794e-05f, -6.086294631e-05f, -6.022786316e-05f, -5.959271960e-05f, -5.895751672e-05f, -5.832225562e-05f, -5.768693742e-05f,
+-5.705156321e-05f, -5.641613410e-05f, -5.578065118e-05f, -5.514511557e-05f, -5.450952836e-05f, -5.387389065e-05f, -5.323820356e-05f, -5.260246817e-05f, -5.196668560e-05f, -5.133085694e-05f,
+-5.069498331e-05f, -5.005906579e-05f, -4.942310550e-05f, -4.878710354e-05f, -4.815106100e-05f, -4.751497900e-05f, -4.687885863e-05f, -4.624270100e-05f, -4.560650720e-05f, -4.497027835e-05f,
+-4.433401555e-05f, -4.369771989e-05f, -4.306139248e-05f, -4.242503442e-05f, -4.178864682e-05f, -4.115223078e-05f, -4.051578739e-05f, -3.987931777e-05f, -3.924282301e-05f, -3.860630422e-05f,
+-3.796976249e-05f, -3.733319894e-05f, -3.669661466e-05f, -3.606001076e-05f, -3.542338833e-05f, -3.478674848e-05f, -3.415009232e-05f, -3.351342094e-05f, -3.287673544e-05f, -3.224003693e-05f,
+-3.160332652e-05f, -3.096660529e-05f, -3.032987435e-05f, -2.969313481e-05f, -2.905638777e-05f, -2.841963432e-05f, -2.778287558e-05f, -2.714611263e-05f, -2.650934659e-05f, -2.587257854e-05f,
+-2.523580961e-05f, -2.459904088e-05f, -2.396227345e-05f, -2.332550843e-05f, -2.268874692e-05f, -2.205199003e-05f, -2.141523884e-05f, -2.077849446e-05f, -2.014175799e-05f, -1.950503053e-05f,
+-1.886831319e-05f, -1.823160705e-05f, -1.759491323e-05f, -1.695823283e-05f, -1.632156693e-05f, -1.568491665e-05f, -1.504828308e-05f, -1.441166732e-05f, -1.377507047e-05f, -1.313849364e-05f,
+-1.250193791e-05f, -1.186540440e-05f, -1.122889419e-05f, -1.059240839e-05f, -9.955948094e-06f, -9.319514405e-06f, -8.683108421e-06f, -8.046731239e-06f, -7.410383958e-06f, -6.774067675e-06f,
+-6.137783491e-06f, -5.501532501e-06f, -4.865315805e-06f, -4.229134499e-06f, -3.592989682e-06f, -2.956882452e-06f, -2.320813904e-06f, -1.684785137e-06f, -1.048797247e-06f, -4.128513325e-07f,
+2.230515113e-07f, 8.589101872e-07f, 1.494723599e-06f, 2.130490650e-06f, 2.766210244e-06f, 3.401881286e-06f, 4.037502680e-06f, 4.673073329e-06f, 5.308592138e-06f, 5.944058012e-06f,
+6.579469857e-06f, 7.214826576e-06f, 7.850127075e-06f, 8.485370260e-06f, 9.120555035e-06f, 9.755680307e-06f, 1.039074498e-05f, 1.102574796e-05f, 1.166068816e-05f, 1.229556448e-05f,
+1.293037583e-05f, 1.356512111e-05f, 1.419979923e-05f, 1.483440910e-05f, 1.546894963e-05f, 1.610341972e-05f, 1.673781828e-05f, 1.737214423e-05f, 1.800639646e-05f, 1.864057388e-05f,
+1.927467541e-05f, 1.990869996e-05f, 2.054264642e-05f, 2.117651372e-05f, 2.181030076e-05f, 2.244400645e-05f, 2.307762969e-05f, 2.371116941e-05f, 2.434462451e-05f, 2.497799390e-05f,
+2.561127650e-05f, 2.624447120e-05f, 2.687757693e-05f, 2.751059260e-05f, 2.814351711e-05f, 2.877634938e-05f, 2.940908832e-05f, 3.004173284e-05f, 3.067428186e-05f, 3.130673429e-05f,
+3.193908904e-05f, 3.257134503e-05f, 3.320350116e-05f, 3.383555636e-05f, 3.446750953e-05f, 3.509935960e-05f, 3.573110547e-05f, 3.636274606e-05f, 3.699428028e-05f, 3.762570705e-05f,
+3.825702529e-05f, 3.888823392e-05f, 3.951933184e-05f, 4.015031797e-05f, 4.078119124e-05f, 4.141195055e-05f, 4.204259483e-05f, 4.267312299e-05f, 4.330353395e-05f, 4.393382662e-05f,
+4.456399994e-05f, 4.519405281e-05f, 4.582398415e-05f, 4.645379289e-05f, 4.708347794e-05f, 4.771303822e-05f, 4.834247265e-05f, 4.897178015e-05f, 4.960095965e-05f, 5.023001006e-05f,
+5.085893031e-05f, 5.148771931e-05f, 5.211637600e-05f, 5.274489928e-05f, 5.337328808e-05f, 5.400154133e-05f, 5.462965795e-05f, 5.525763686e-05f, 5.588547698e-05f, 5.651317725e-05f,
+5.714073658e-05f, 5.776815389e-05f, 5.839542812e-05f, 5.902255819e-05f, 5.964954302e-05f, 6.027638154e-05f, 6.090307267e-05f, 6.152961535e-05f, 6.215600850e-05f, 6.278225104e-05f,
+6.340834191e-05f, 6.403428002e-05f, 6.466006432e-05f, 6.528569373e-05f, 6.591116717e-05f, 6.653648358e-05f, 6.716164189e-05f, 6.778664102e-05f, 6.841147991e-05f, 6.903615748e-05f,
+6.966067268e-05f, 7.028502442e-05f, 7.090921164e-05f, 7.153323327e-05f, 7.215708825e-05f, 7.278077551e-05f, 7.340429398e-05f, 7.402764259e-05f, 7.465082028e-05f, 7.527382599e-05f,
+7.589665864e-05f, 7.651931717e-05f, 7.714180052e-05f, 7.776410762e-05f, 7.838623741e-05f, 7.900818883e-05f, 7.962996081e-05f, 8.025155229e-05f, 8.087296220e-05f, 8.149418949e-05f,
+8.211523310e-05f, 8.273609196e-05f, 8.335676501e-05f, 8.397725119e-05f, 8.459754944e-05f, 8.521765870e-05f, 8.583757792e-05f, 8.645730602e-05f, 8.707684197e-05f, 8.769618469e-05f,
+8.831533313e-05f, 8.893428623e-05f, 8.955304294e-05f, 9.017160219e-05f, 9.078996294e-05f, 9.140812413e-05f, 9.202608470e-05f, 9.264384359e-05f, 9.326139976e-05f, 9.387875215e-05f,
+9.449589971e-05f, 9.511284138e-05f, 9.572957610e-05f, 9.634610284e-05f, 9.696242053e-05f, 9.757852813e-05f, 9.819442458e-05f, 9.881010884e-05f, 9.942557985e-05f, 1.000408366e-04f,
+1.006558779e-04f, 1.012707029e-04f, 1.018853104e-04f, 1.024996995e-04f, 1.031138690e-04f, 1.037278179e-04f, 1.043415452e-04f, 1.049550498e-04f, 1.055683307e-04f, 1.061813869e-04f,
+1.067942172e-04f, 1.074068206e-04f, 1.080191962e-04f, 1.086313428e-04f, 1.092432595e-04f, 1.098549451e-04f, 1.104663986e-04f, 1.110776190e-04f, 1.116886053e-04f, 1.122993564e-04f,
+1.129098713e-04f, 1.135201489e-04f, 1.141301881e-04f, 1.147399881e-04f, 1.153495476e-04f, 1.159588657e-04f, 1.165679414e-04f, 1.171767736e-04f, 1.177853612e-04f, 1.183937033e-04f,
+1.190017987e-04f, 1.196096466e-04f, 1.202172457e-04f, 1.208245952e-04f, 1.214316939e-04f, 1.220385408e-04f, 1.226451349e-04f, 1.232514752e-04f, 1.238575607e-04f, 1.244633902e-04f,
+1.250689628e-04f, 1.256742775e-04f, 1.262793332e-04f, 1.268841289e-04f, 1.274886635e-04f, 1.280929360e-04f, 1.286969455e-04f, 1.293006908e-04f, 1.299041710e-04f, 1.305073851e-04f,
+1.311103319e-04f, 1.317130105e-04f, 1.323154199e-04f, 1.329175590e-04f, 1.335194268e-04f, 1.341210223e-04f, 1.347223445e-04f, 1.353233923e-04f, 1.359241647e-04f, 1.365246608e-04f,
+1.371248794e-04f, 1.377248196e-04f, 1.383244804e-04f, 1.389238606e-04f, 1.395229594e-04f, 1.401217757e-04f, 1.407203085e-04f, 1.413185568e-04f, 1.419165195e-04f, 1.425141956e-04f,
+1.431115841e-04f, 1.437086841e-04f, 1.443054945e-04f, 1.449020142e-04f, 1.454982424e-04f, 1.460941779e-04f, 1.466898197e-04f, 1.472851669e-04f, 1.478802184e-04f, 1.484749733e-04f,
+1.490694305e-04f, 1.496635889e-04f, 1.502574477e-04f, 1.508510058e-04f, 1.514442622e-04f, 1.520372159e-04f, 1.526298658e-04f, 1.532222110e-04f, 1.538142506e-04f, 1.544059833e-04f,
+1.549974084e-04f, 1.555885247e-04f, 1.561793313e-04f, 1.567698272e-04f, 1.573600113e-04f, 1.579498827e-04f, 1.585394403e-04f, 1.591286833e-04f, 1.597176105e-04f, 1.603062210e-04f,
+1.608945138e-04f, 1.614824879e-04f, 1.620701422e-04f, 1.626574759e-04f, 1.632444879e-04f, 1.638311772e-04f, 1.644175428e-04f, 1.650035837e-04f, 1.655892990e-04f, 1.661746876e-04f,
+1.667597486e-04f, 1.673444809e-04f, 1.679288837e-04f, 1.685129558e-04f, 1.690966963e-04f, 1.696801043e-04f, 1.702631787e-04f, 1.708459185e-04f, 1.714283228e-04f, 1.720103906e-04f,
+1.725921209e-04f, 1.731735127e-04f, 1.737545650e-04f, 1.743352769e-04f, 1.749156474e-04f, 1.754956754e-04f, 1.760753600e-04f, 1.766547003e-04f, 1.772336953e-04f, 1.778123439e-04f,
+1.783906452e-04f, 1.789685982e-04f, 1.795462020e-04f, 1.801234556e-04f, 1.807003580e-04f, 1.812769081e-04f, 1.818531052e-04f, 1.824289481e-04f, 1.830044360e-04f, 1.835795677e-04f,
+1.841543425e-04f, 1.847287592e-04f, 1.853028170e-04f, 1.858765149e-04f, 1.864498518e-04f, 1.870228269e-04f, 1.875954391e-04f, 1.881676876e-04f, 1.887395713e-04f, 1.893110892e-04f,
+1.898822405e-04f, 1.904530241e-04f, 1.910234391e-04f, 1.915934845e-04f, 1.921631594e-04f, 1.927324628e-04f, 1.933013937e-04f, 1.938699512e-04f, 1.944381344e-04f, 1.950059422e-04f,
+1.955733737e-04f, 1.961404280e-04f, 1.967071041e-04f, 1.972734011e-04f, 1.978393180e-04f, 1.984048538e-04f, 1.989700076e-04f, 1.995347785e-04f, 2.000991654e-04f, 2.006631675e-04f,
+2.012267838e-04f, 2.017900134e-04f, 2.023528552e-04f, 2.029153084e-04f, 2.034773720e-04f, 2.040390451e-04f, 2.046003267e-04f, 2.051612159e-04f, 2.057217117e-04f, 2.062818133e-04f,
+2.068415195e-04f, 2.074008296e-04f, 2.079597425e-04f, 2.085182574e-04f, 2.090763733e-04f, 2.096340892e-04f, 2.101914043e-04f, 2.107483175e-04f, 2.113048280e-04f, 2.118609348e-04f,
+2.124166370e-04f, 2.129719336e-04f, 2.135268237e-04f, 2.140813064e-04f, 2.146353808e-04f, 2.151890459e-04f, 2.157423008e-04f, 2.162951445e-04f, 2.168475762e-04f, 2.173995949e-04f,
+2.179511997e-04f, 2.185023897e-04f, 2.190531639e-04f, 2.196035214e-04f, 2.201534612e-04f, 2.207029826e-04f, 2.212520845e-04f, 2.218007660e-04f, 2.223490262e-04f, 2.228968642e-04f,
+2.234442791e-04f, 2.239912699e-04f, 2.245378358e-04f, 2.250839758e-04f, 2.256296890e-04f, 2.261749744e-04f, 2.267198313e-04f, 2.272642586e-04f, 2.278082554e-04f, 2.283518209e-04f,
+2.288949542e-04f, 2.294376542e-04f, 2.299799202e-04f, 2.305217512e-04f, 2.310631462e-04f, 2.316041045e-04f, 2.321446250e-04f, 2.326847069e-04f, 2.332243493e-04f, 2.337635513e-04f,
+2.343023120e-04f, 2.348406304e-04f, 2.353785057e-04f, 2.359159370e-04f, 2.364529233e-04f, 2.369894638e-04f, 2.375255576e-04f, 2.380612038e-04f, 2.385964015e-04f, 2.391311497e-04f,
+2.396654477e-04f, 2.401992944e-04f, 2.407326891e-04f, 2.412656308e-04f, 2.417981187e-04f, 2.423301517e-04f, 2.428617292e-04f, 2.433928501e-04f, 2.439235136e-04f, 2.444537187e-04f,
+2.449834647e-04f, 2.455127506e-04f, 2.460415756e-04f, 2.465699387e-04f, 2.470978391e-04f, 2.476252759e-04f, 2.481522482e-04f, 2.486787551e-04f, 2.492047958e-04f, 2.497303694e-04f,
+2.502554750e-04f, 2.507801117e-04f, 2.513042787e-04f, 2.518279750e-04f, 2.523511999e-04f, 2.528739523e-04f, 2.533962316e-04f, 2.539180367e-04f, 2.544393669e-04f, 2.549602212e-04f,
+2.554805988e-04f, 2.560004989e-04f, 2.565199205e-04f, 2.570388627e-04f, 2.575573248e-04f, 2.580753059e-04f, 2.585928051e-04f, 2.591098214e-04f, 2.596263542e-04f, 2.601424025e-04f,
+2.606579655e-04f, 2.611730422e-04f, 2.616876319e-04f, 2.622017337e-04f, 2.627153467e-04f, 2.632284701e-04f, 2.637411030e-04f, 2.642532446e-04f, 2.647648940e-04f, 2.652760504e-04f,
+2.657867128e-04f, 2.662968806e-04f, 2.668065528e-04f, 2.673157285e-04f, 2.678244070e-04f, 2.683325874e-04f, 2.688402688e-04f, 2.693474504e-04f, 2.698541314e-04f, 2.703603108e-04f,
+2.708659880e-04f, 2.713711619e-04f, 2.718758319e-04f, 2.723799970e-04f, 2.728836564e-04f, 2.733868094e-04f, 2.738894549e-04f, 2.743915923e-04f, 2.748932207e-04f, 2.753943392e-04f,
+2.758949470e-04f, 2.763950433e-04f, 2.768946272e-04f, 2.773936980e-04f, 2.778922548e-04f, 2.783902968e-04f, 2.788878231e-04f, 2.793848329e-04f, 2.798813254e-04f, 2.803772998e-04f,
+2.808727553e-04f, 2.813676910e-04f, 2.818621061e-04f, 2.823559998e-04f, 2.828493713e-04f, 2.833422197e-04f, 2.838345443e-04f, 2.843263442e-04f, 2.848176186e-04f, 2.853083667e-04f,
+2.857985877e-04f, 2.862882808e-04f, 2.867774452e-04f, 2.872660800e-04f, 2.877541845e-04f, 2.882417578e-04f, 2.887287991e-04f, 2.892153077e-04f, 2.897012827e-04f, 2.901867233e-04f,
+2.906716287e-04f, 2.911559982e-04f, 2.916398308e-04f, 2.921231259e-04f, 2.926058826e-04f, 2.930881002e-04f, 2.935697777e-04f, 2.940509145e-04f, 2.945315097e-04f, 2.950115626e-04f,
+2.954910723e-04f, 2.959700381e-04f, 2.964484591e-04f, 2.969263346e-04f, 2.974036638e-04f, 2.978804459e-04f, 2.983566802e-04f, 2.988323657e-04f, 2.993075018e-04f, 2.997820876e-04f,
+3.002561225e-04f, 3.007296055e-04f, 3.012025359e-04f, 3.016749130e-04f, 3.021467359e-04f, 3.026180039e-04f, 3.030887162e-04f, 3.035588721e-04f, 3.040284706e-04f, 3.044975112e-04f,
+3.049659930e-04f, 3.054339152e-04f, 3.059012771e-04f, 3.063680778e-04f, 3.068343167e-04f, 3.072999930e-04f, 3.077651058e-04f, 3.082296545e-04f, 3.086936382e-04f, 3.091570563e-04f,
+3.096199078e-04f, 3.100821922e-04f, 3.105439086e-04f, 3.110050562e-04f, 3.114656343e-04f, 3.119256422e-04f, 3.123850790e-04f, 3.128439441e-04f, 3.133022367e-04f, 3.137599559e-04f,
+3.142171012e-04f, 3.146736717e-04f, 3.151296666e-04f, 3.155850853e-04f, 3.160399269e-04f, 3.164941908e-04f, 3.169478761e-04f, 3.174009822e-04f, 3.178535083e-04f, 3.183054537e-04f,
+3.187568175e-04f, 3.192075991e-04f, 3.196577978e-04f, 3.201074127e-04f, 3.205564432e-04f, 3.210048885e-04f, 3.214527480e-04f, 3.219000207e-04f, 3.223467061e-04f, 3.227928033e-04f,
+3.232383118e-04f, 3.236832306e-04f, 3.241275591e-04f, 3.245712966e-04f, 3.250144424e-04f, 3.254569957e-04f, 3.258989557e-04f, 3.263403219e-04f, 3.267810933e-04f, 3.272212695e-04f,
+3.276608495e-04f, 3.280998327e-04f, 3.285382183e-04f, 3.289760058e-04f, 3.294131942e-04f, 3.298497830e-04f, 3.302857714e-04f, 3.307211587e-04f, 3.311559442e-04f, 3.315901271e-04f,
+3.320237069e-04f, 3.324566826e-04f, 3.328890538e-04f, 3.333208195e-04f, 3.337519793e-04f, 3.341825322e-04f, 3.346124777e-04f, 3.350418150e-04f, 3.354705435e-04f, 3.358986624e-04f,
+3.363261710e-04f, 3.367530687e-04f, 3.371793547e-04f, 3.376050283e-04f, 3.380300889e-04f, 3.384545358e-04f, 3.388783682e-04f, 3.393015855e-04f, 3.397241870e-04f, 3.401461720e-04f,
+3.405675398e-04f, 3.409882898e-04f, 3.414084212e-04f, 3.418279333e-04f, 3.422468255e-04f, 3.426650972e-04f, 3.430827475e-04f, 3.434997759e-04f, 3.439161816e-04f, 3.443319640e-04f,
+3.447471224e-04f, 3.451616562e-04f, 3.455755646e-04f, 3.459888470e-04f, 3.464015027e-04f, 3.468135310e-04f, 3.472249313e-04f, 3.476357029e-04f, 3.480458452e-04f, 3.484553574e-04f,
+3.488642390e-04f, 3.492724892e-04f, 3.496801073e-04f, 3.500870928e-04f, 3.504934450e-04f, 3.508991631e-04f, 3.513042466e-04f, 3.517086948e-04f, 3.521125070e-04f, 3.525156826e-04f,
+3.529182209e-04f, 3.533201213e-04f, 3.537213831e-04f, 3.541220057e-04f, 3.545219884e-04f, 3.549213306e-04f, 3.553200316e-04f, 3.557180908e-04f, 3.561155075e-04f, 3.565122812e-04f,
+3.569084111e-04f, 3.573038966e-04f, 3.576987371e-04f, 3.580929319e-04f, 3.584864804e-04f, 3.588793820e-04f, 3.592716361e-04f, 3.596632419e-04f, 3.600541989e-04f, 3.604445064e-04f,
+3.608341638e-04f, 3.612231705e-04f, 3.616115259e-04f, 3.619992292e-04f, 3.623862800e-04f, 3.627726775e-04f, 3.631584212e-04f, 3.635435104e-04f, 3.639279445e-04f, 3.643117229e-04f,
+3.646948450e-04f, 3.650773101e-04f, 3.654591177e-04f, 3.658402671e-04f, 3.662207576e-04f, 3.666005888e-04f, 3.669797600e-04f, 3.673582705e-04f, 3.677361198e-04f, 3.681133073e-04f,
+3.684898323e-04f, 3.688656942e-04f, 3.692408925e-04f, 3.696154265e-04f, 3.699892957e-04f, 3.703624994e-04f, 3.707350370e-04f, 3.711069080e-04f, 3.714781117e-04f, 3.718486476e-04f,
+3.722185150e-04f, 3.725877133e-04f, 3.729562421e-04f, 3.733241006e-04f, 3.736912883e-04f, 3.740578046e-04f, 3.744236488e-04f, 3.747888206e-04f, 3.751533191e-04f, 3.755171439e-04f,
+3.758802944e-04f, 3.762427700e-04f, 3.766045700e-04f, 3.769656941e-04f, 3.773261414e-04f, 3.776859115e-04f, 3.780450039e-04f, 3.784034179e-04f, 3.787611529e-04f, 3.791182084e-04f,
+3.794745838e-04f, 3.798302785e-04f, 3.801852921e-04f, 3.805396238e-04f, 3.808932732e-04f, 3.812462397e-04f, 3.815985226e-04f, 3.819501216e-04f, 3.823010359e-04f, 3.826512650e-04f,
+3.830008085e-04f, 3.833496656e-04f, 3.836978359e-04f, 3.840453188e-04f, 3.843921138e-04f, 3.847382203e-04f, 3.850836377e-04f, 3.854283655e-04f, 3.857724032e-04f, 3.861157502e-04f,
+3.864584059e-04f, 3.868003699e-04f, 3.871416415e-04f, 3.874822203e-04f, 3.878221056e-04f, 3.881612970e-04f, 3.884997939e-04f, 3.888375958e-04f, 3.891747021e-04f, 3.895111124e-04f,
+3.898468259e-04f, 3.901818424e-04f, 3.905161611e-04f, 3.908497816e-04f, 3.911827033e-04f, 3.915149258e-04f, 3.918464485e-04f, 3.921772708e-04f, 3.925073923e-04f, 3.928368124e-04f,
+3.931655306e-04f, 3.934935463e-04f, 3.938208592e-04f, 3.941474686e-04f, 3.944733740e-04f, 3.947985749e-04f, 3.951230708e-04f, 3.954468612e-04f, 3.957699456e-04f, 3.960923235e-04f,
+3.964139943e-04f, 3.967349576e-04f, 3.970552128e-04f, 3.973747594e-04f, 3.976935970e-04f, 3.980117250e-04f, 3.983291430e-04f, 3.986458504e-04f, 3.989618467e-04f, 3.992771315e-04f,
+3.995917042e-04f, 3.999055643e-04f, 4.002187114e-04f, 4.005311450e-04f, 4.008428645e-04f, 4.011538696e-04f, 4.014641596e-04f, 4.017737341e-04f, 4.020825926e-04f, 4.023907347e-04f,
+4.026981598e-04f, 4.030048675e-04f, 4.033108573e-04f, 4.036161287e-04f, 4.039206812e-04f, 4.042245144e-04f, 4.045276277e-04f, 4.048300208e-04f, 4.051316931e-04f, 4.054326441e-04f,
+4.057328735e-04f, 4.060323806e-04f, 4.063311651e-04f, 4.066292265e-04f, 4.069265644e-04f, 4.072231781e-04f, 4.075190674e-04f, 4.078142317e-04f, 4.081086706e-04f, 4.084023835e-04f,
+4.086953702e-04f, 4.089876300e-04f, 4.092791626e-04f, 4.095699674e-04f, 4.098600441e-04f, 4.101493922e-04f, 4.104380113e-04f, 4.107259008e-04f, 4.110130603e-04f, 4.112994894e-04f,
+4.115851877e-04f, 4.118701547e-04f, 4.121543900e-04f, 4.124378931e-04f, 4.127206635e-04f, 4.130027009e-04f, 4.132840048e-04f, 4.135645748e-04f, 4.138444105e-04f, 4.141235113e-04f,
+4.144018769e-04f, 4.146795068e-04f, 4.149564007e-04f, 4.152325580e-04f, 4.155079784e-04f, 4.157826614e-04f, 4.160566067e-04f, 4.163298137e-04f, 4.166022821e-04f, 4.168740114e-04f,
+4.171450013e-04f, 4.174152512e-04f, 4.176847609e-04f, 4.179535298e-04f, 4.182215576e-04f, 4.184888439e-04f, 4.187553882e-04f, 4.190211901e-04f, 4.192862492e-04f, 4.195505652e-04f,
+4.198141376e-04f, 4.200769660e-04f, 4.203390499e-04f, 4.206003891e-04f, 4.208609831e-04f, 4.211208315e-04f, 4.213799339e-04f, 4.216382899e-04f, 4.218958991e-04f, 4.221527611e-04f,
+4.224088756e-04f, 4.226642421e-04f, 4.229188602e-04f, 4.231727296e-04f, 4.234258499e-04f, 4.236782206e-04f, 4.239298415e-04f, 4.241807121e-04f, 4.244308320e-04f, 4.246802008e-04f,
+4.249288182e-04f, 4.251766839e-04f, 4.254237973e-04f, 4.256701582e-04f, 4.259157662e-04f, 4.261606208e-04f, 4.264047218e-04f, 4.266480687e-04f, 4.268906613e-04f, 4.271324990e-04f,
+4.273735816e-04f, 4.276139087e-04f, 4.278534800e-04f, 4.280922950e-04f, 4.283303533e-04f, 4.285676548e-04f, 4.288041989e-04f, 4.290399854e-04f, 4.292750138e-04f, 4.295092839e-04f,
+4.297427952e-04f, 4.299755474e-04f, 4.302075402e-04f, 4.304387733e-04f, 4.306692462e-04f, 4.308989586e-04f, 4.311279102e-04f, 4.313561006e-04f, 4.315835296e-04f, 4.318101967e-04f,
+4.320361016e-04f, 4.322612440e-04f, 4.324856235e-04f, 4.327092398e-04f, 4.329320926e-04f, 4.331541816e-04f, 4.333755064e-04f, 4.335960666e-04f, 4.338158620e-04f, 4.340348922e-04f,
+4.342531569e-04f, 4.344706558e-04f, 4.346873885e-04f, 4.349033548e-04f, 4.351185543e-04f, 4.353329866e-04f, 4.355466515e-04f, 4.357595487e-04f, 4.359716779e-04f, 4.361830386e-04f,
+4.363936307e-04f, 4.366034537e-04f, 4.368125075e-04f, 4.370207916e-04f, 4.372283059e-04f, 4.374350499e-04f, 4.376410233e-04f, 4.378462260e-04f, 4.380506575e-04f, 4.382543175e-04f,
+4.384572058e-04f, 4.386593221e-04f, 4.388606661e-04f, 4.390612374e-04f, 4.392610359e-04f, 4.394600611e-04f, 4.396583128e-04f, 4.398557907e-04f, 4.400524946e-04f, 4.402484241e-04f,
+4.404435789e-04f, 4.406379588e-04f, 4.408315635e-04f, 4.410243927e-04f, 4.412164461e-04f, 4.414077235e-04f, 4.415982245e-04f, 4.417879490e-04f, 4.419768965e-04f, 4.421650669e-04f,
+4.423524599e-04f, 4.425390752e-04f, 4.427249125e-04f, 4.429099716e-04f, 4.430942522e-04f, 4.432777540e-04f, 4.434604768e-04f, 4.436424203e-04f, 4.438235842e-04f, 4.440039684e-04f,
+4.441835725e-04f, 4.443623962e-04f, 4.445404394e-04f, 4.447177018e-04f, 4.448941831e-04f, 4.450698830e-04f, 4.452448013e-04f, 4.454189378e-04f, 4.455922923e-04f, 4.457648644e-04f,
+4.459366539e-04f, 4.461076606e-04f, 4.462778843e-04f, 4.464473247e-04f, 4.466159815e-04f, 4.467838546e-04f, 4.469509437e-04f, 4.471172485e-04f, 4.472827688e-04f, 4.474475045e-04f,
+4.476114552e-04f, 4.477746207e-04f, 4.479370009e-04f, 4.480985954e-04f, 4.482594041e-04f, 4.484194267e-04f, 4.485786630e-04f, 4.487371128e-04f, 4.488947758e-04f, 4.490516520e-04f,
+4.492077409e-04f, 4.493630425e-04f, 4.495175564e-04f, 4.496712826e-04f, 4.498242208e-04f, 4.499763707e-04f, 4.501277321e-04f, 4.502783050e-04f, 4.504280889e-04f, 4.505770838e-04f,
+4.507252895e-04f, 4.508727057e-04f, 4.510193322e-04f, 4.511651689e-04f, 4.513102155e-04f, 4.514544719e-04f, 4.515979378e-04f, 4.517406131e-04f, 4.518824975e-04f, 4.520235909e-04f,
+4.521638931e-04f, 4.523034039e-04f, 4.524421232e-04f, 4.525800506e-04f, 4.527171861e-04f, 4.528535294e-04f, 4.529890805e-04f, 4.531238390e-04f, 4.532578048e-04f, 4.533909778e-04f,
+4.535233578e-04f, 4.536549445e-04f, 4.537857379e-04f, 4.539157378e-04f, 4.540449439e-04f, 4.541733561e-04f, 4.543009743e-04f, 4.544277983e-04f, 4.545538278e-04f, 4.546790629e-04f,
+4.548035032e-04f, 4.549271486e-04f, 4.550499991e-04f, 4.551720543e-04f, 4.552933142e-04f, 4.554137786e-04f, 4.555334474e-04f, 4.556523204e-04f, 4.557703974e-04f, 4.558876783e-04f,
+4.560041630e-04f, 4.561198513e-04f, 4.562347430e-04f, 4.563488381e-04f, 4.564621363e-04f, 4.565746376e-04f, 4.566863417e-04f, 4.567972487e-04f, 4.569073582e-04f, 4.570166702e-04f,
+4.571251846e-04f, 4.572329012e-04f, 4.573398199e-04f, 4.574459406e-04f, 4.575512631e-04f, 4.576557873e-04f, 4.577595131e-04f, 4.578624403e-04f, 4.579645689e-04f, 4.580658986e-04f,
+4.581664295e-04f, 4.582661613e-04f, 4.583650940e-04f, 4.584632275e-04f, 4.585605615e-04f, 4.586570961e-04f, 4.587528311e-04f, 4.588477663e-04f, 4.589419018e-04f, 4.590352373e-04f,
+4.591277728e-04f, 4.592195082e-04f, 4.593104433e-04f, 4.594005780e-04f, 4.594899124e-04f, 4.595784462e-04f, 4.596661793e-04f, 4.597531118e-04f, 4.598392434e-04f, 4.599245740e-04f,
+4.600091037e-04f, 4.600928322e-04f, 4.601757596e-04f, 4.602578857e-04f, 4.603392104e-04f, 4.604197336e-04f, 4.604994553e-04f, 4.605783754e-04f, 4.606564938e-04f, 4.607338104e-04f,
+4.608103252e-04f, 4.608860380e-04f, 4.609609488e-04f, 4.610350576e-04f, 4.611083641e-04f, 4.611808685e-04f, 4.612525705e-04f, 4.613234702e-04f, 4.613935674e-04f, 4.614628621e-04f,
+4.615313543e-04f, 4.615990439e-04f, 4.616659307e-04f, 4.617320148e-04f, 4.617972961e-04f, 4.618617746e-04f, 4.619254501e-04f, 4.619883226e-04f, 4.620503922e-04f, 4.621116586e-04f,
+4.621721219e-04f, 4.622317821e-04f, 4.622906390e-04f, 4.623486926e-04f, 4.624059429e-04f, 4.624623899e-04f, 4.625180334e-04f, 4.625728735e-04f, 4.626269102e-04f, 4.626801433e-04f,
+4.627325728e-04f, 4.627841988e-04f, 4.628350211e-04f, 4.628850398e-04f, 4.629342548e-04f, 4.629826661e-04f, 4.630302736e-04f, 4.630770774e-04f, 4.631230773e-04f, 4.631682735e-04f,
+4.632126658e-04f, 4.632562542e-04f, 4.632990387e-04f, 4.633410194e-04f, 4.633821961e-04f, 4.634225689e-04f, 4.634621378e-04f, 4.635009026e-04f, 4.635388636e-04f, 4.635760205e-04f,
+4.636123734e-04f, 4.636479223e-04f, 4.636826673e-04f, 4.637166082e-04f, 4.637497451e-04f, 4.637820780e-04f, 4.638136069e-04f, 4.638443318e-04f, 4.638742526e-04f, 4.639033695e-04f,
+4.639316823e-04f, 4.639591912e-04f, 4.639858961e-04f, 4.640117970e-04f, 4.640368939e-04f, 4.640611869e-04f, 4.640846759e-04f, 4.641073611e-04f, 4.641292423e-04f, 4.641503196e-04f,
+4.641705930e-04f, 4.641900626e-04f, 4.642087284e-04f, 4.642265904e-04f, 4.642436486e-04f, 4.642599030e-04f, 4.642753537e-04f, 4.642900007e-04f, 4.643038441e-04f, 4.643168838e-04f,
+4.643291199e-04f, 4.643405524e-04f, 4.643511815e-04f, 4.643610070e-04f, 4.643700290e-04f, 4.643782477e-04f, 4.643856630e-04f, 4.643922749e-04f, 4.643980836e-04f, 4.644030890e-04f,
+4.644072912e-04f, 4.644106903e-04f, 4.644132863e-04f, 4.644150792e-04f, 4.644160691e-04f, 4.644162561e-04f, 4.644156403e-04f, 4.644142216e-04f, 4.644120001e-04f, 4.644089759e-04f,
+4.644051491e-04f, 4.644005197e-04f, 4.643950877e-04f, 4.643888533e-04f, 4.643818166e-04f, 4.643739775e-04f, 4.643653361e-04f, 4.643558926e-04f, 4.643456469e-04f, 4.643345992e-04f,
+4.643227496e-04f, 4.643100980e-04f, 4.642966447e-04f, 4.642823896e-04f, 4.642673329e-04f, 4.642514746e-04f, 4.642348148e-04f, 4.642173536e-04f, 4.641990911e-04f, 4.641800274e-04f,
+4.641601625e-04f, 4.641394966e-04f, 4.641180297e-04f, 4.640957619e-04f, 4.640726934e-04f, 4.640488242e-04f, 4.640241545e-04f, 4.639986842e-04f, 4.639724136e-04f, 4.639453426e-04f,
+4.639174715e-04f, 4.638888004e-04f, 4.638593292e-04f, 4.638290582e-04f, 4.637979874e-04f, 4.637661170e-04f, 4.637334471e-04f, 4.636999777e-04f, 4.636657090e-04f, 4.636306411e-04f,
+4.635947741e-04f, 4.635581082e-04f, 4.635206434e-04f, 4.634823799e-04f, 4.634433178e-04f, 4.634034572e-04f, 4.633627983e-04f, 4.633213411e-04f, 4.632790858e-04f, 4.632360326e-04f,
+4.631921815e-04f, 4.631475327e-04f, 4.631020863e-04f, 4.630558425e-04f, 4.630088013e-04f, 4.629609630e-04f, 4.629123276e-04f, 4.628628954e-04f, 4.628126664e-04f, 4.627616407e-04f,
+4.627098186e-04f, 4.626572002e-04f, 4.626037856e-04f, 4.625495749e-04f, 4.624945684e-04f, 4.624387661e-04f, 4.623821683e-04f, 4.623247750e-04f, 4.622665864e-04f, 4.622076028e-04f,
+4.621478241e-04f, 4.620872507e-04f, 4.620258826e-04f, 4.619637200e-04f, 4.619007632e-04f, 4.618370121e-04f, 4.617724671e-04f, 4.617071282e-04f, 4.616409957e-04f, 4.615740697e-04f,
+4.615063504e-04f, 4.614378379e-04f, 4.613685325e-04f, 4.612984342e-04f, 4.612275434e-04f, 4.611558601e-04f, 4.610833846e-04f, 4.610101169e-04f, 4.609360574e-04f, 4.608612061e-04f,
+4.607855633e-04f, 4.607091292e-04f, 4.606319039e-04f, 4.605538876e-04f, 4.604750805e-04f, 4.603954829e-04f, 4.603150948e-04f, 4.602339166e-04f, 4.601519483e-04f, 4.600691902e-04f,
+4.599856425e-04f, 4.599013054e-04f, 4.598161791e-04f, 4.597302638e-04f, 4.596435596e-04f, 4.595560668e-04f, 4.594677857e-04f, 4.593787163e-04f, 4.592888590e-04f, 4.591982138e-04f,
+4.591067812e-04f, 4.590145611e-04f, 4.589215540e-04f, 4.588277599e-04f, 4.587331791e-04f, 4.586378118e-04f, 4.585416582e-04f, 4.584447186e-04f, 4.583469932e-04f, 4.582484822e-04f,
+4.581491858e-04f, 4.580491043e-04f, 4.579482378e-04f, 4.578465866e-04f, 4.577441510e-04f, 4.576409312e-04f, 4.575369273e-04f, 4.574321397e-04f, 4.573265686e-04f, 4.572202141e-04f,
+4.571130766e-04f, 4.570051563e-04f, 4.568964534e-04f, 4.567869682e-04f, 4.566767009e-04f, 4.565656518e-04f, 4.564538210e-04f, 4.563412090e-04f, 4.562278158e-04f, 4.561136417e-04f,
+4.559986871e-04f, 4.558829521e-04f, 4.557664371e-04f, 4.556491422e-04f, 4.555310677e-04f, 4.554122139e-04f, 4.552925810e-04f, 4.551721693e-04f, 4.550509791e-04f, 4.549290107e-04f,
+4.548062642e-04f, 4.546827400e-04f, 4.545584383e-04f, 4.544333594e-04f, 4.543075035e-04f, 4.541808710e-04f, 4.540534621e-04f, 4.539252771e-04f, 4.537963162e-04f, 4.536665798e-04f,
+4.535360681e-04f, 4.534047814e-04f, 4.532727199e-04f, 4.531398840e-04f, 4.530062740e-04f, 4.528718900e-04f, 4.527367325e-04f, 4.526008017e-04f, 4.524640978e-04f, 4.523266213e-04f,
+4.521883723e-04f, 4.520493511e-04f, 4.519095582e-04f, 4.517689936e-04f, 4.516276578e-04f, 4.514855511e-04f, 4.513426737e-04f, 4.511990259e-04f, 4.510546081e-04f, 4.509094205e-04f,
+4.507634635e-04f, 4.506167373e-04f, 4.504692423e-04f, 4.503209788e-04f, 4.501719471e-04f, 4.500221474e-04f, 4.498715802e-04f, 4.497202457e-04f, 4.495681442e-04f, 4.494152761e-04f,
+4.492616416e-04f, 4.491072411e-04f, 4.489520749e-04f, 4.487961434e-04f, 4.486394468e-04f, 4.484819855e-04f, 4.483237598e-04f, 4.481647700e-04f, 4.480050165e-04f, 4.478444995e-04f,
+4.476832195e-04f, 4.475211767e-04f, 4.473583715e-04f, 4.471948042e-04f, 4.470304752e-04f, 4.468653847e-04f, 4.466995332e-04f, 4.465329209e-04f, 4.463655483e-04f, 4.461974156e-04f,
+4.460285232e-04f, 4.458588714e-04f, 4.456884606e-04f, 4.455172911e-04f, 4.453453633e-04f, 4.451726776e-04f, 4.449992342e-04f, 4.448250336e-04f, 4.446500760e-04f, 4.444743619e-04f,
+4.442978916e-04f, 4.441206654e-04f, 4.439426837e-04f, 4.437639470e-04f, 4.435844554e-04f, 4.434042095e-04f, 4.432232095e-04f, 4.430414558e-04f, 4.428589489e-04f, 4.426756890e-04f,
+4.424916765e-04f, 4.423069118e-04f, 4.421213953e-04f, 4.419351274e-04f, 4.417481084e-04f, 4.415603386e-04f, 4.413718186e-04f, 4.411825486e-04f, 4.409925290e-04f, 4.408017602e-04f,
+4.406102427e-04f, 4.404179767e-04f, 4.402249626e-04f, 4.400312009e-04f, 4.398366920e-04f, 4.396414361e-04f, 4.394454338e-04f, 4.392486854e-04f, 4.390511912e-04f, 4.388529518e-04f,
+4.386539674e-04f, 4.384542385e-04f, 4.382537655e-04f, 4.380525487e-04f, 4.378505887e-04f, 4.376478857e-04f, 4.374444401e-04f, 4.372402525e-04f, 4.370353231e-04f, 4.368296524e-04f,
+4.366232408e-04f, 4.364160887e-04f, 4.362081966e-04f, 4.359995647e-04f, 4.357901936e-04f, 4.355800836e-04f, 4.353692352e-04f, 4.351576488e-04f, 4.349453248e-04f, 4.347322636e-04f,
+4.345184656e-04f, 4.343039313e-04f, 4.340886611e-04f, 4.338726553e-04f, 4.336559145e-04f, 4.334384391e-04f, 4.332202294e-04f, 4.330012859e-04f, 4.327816091e-04f, 4.325611993e-04f,
+4.323400570e-04f, 4.321181827e-04f, 4.318955767e-04f, 4.316722395e-04f, 4.314481716e-04f, 4.312233733e-04f, 4.309978452e-04f, 4.307715876e-04f, 4.305446010e-04f, 4.303168859e-04f,
+4.300884426e-04f, 4.298592717e-04f, 4.296293736e-04f, 4.293987486e-04f, 4.291673974e-04f, 4.289353203e-04f, 4.287025177e-04f, 4.284689902e-04f, 4.282347382e-04f, 4.279997621e-04f,
+4.277640625e-04f, 4.275276396e-04f, 4.272904941e-04f, 4.270526264e-04f, 4.268140369e-04f, 4.265747261e-04f, 4.263346945e-04f, 4.260939425e-04f, 4.258524705e-04f, 4.256102792e-04f,
+4.253673689e-04f, 4.251237400e-04f, 4.248793932e-04f, 4.246343288e-04f, 4.243885473e-04f, 4.241420492e-04f, 4.238948349e-04f, 4.236469050e-04f, 4.233982600e-04f, 4.231489002e-04f,
+4.228988262e-04f, 4.226480385e-04f, 4.223965376e-04f, 4.221443238e-04f, 4.218913978e-04f, 4.216377600e-04f, 4.213834109e-04f, 4.211283510e-04f, 4.208725807e-04f, 4.206161006e-04f,
+4.203589112e-04f, 4.201010129e-04f, 4.198424063e-04f, 4.195830918e-04f, 4.193230700e-04f, 4.190623413e-04f, 4.188009062e-04f, 4.185387653e-04f, 4.182759190e-04f, 4.180123678e-04f,
+4.177481124e-04f, 4.174831530e-04f, 4.172174904e-04f, 4.169511249e-04f, 4.166840571e-04f, 4.164162874e-04f, 4.161478165e-04f, 4.158786448e-04f, 4.156087729e-04f, 4.153382011e-04f,
+4.150669302e-04f, 4.147949605e-04f, 4.145222926e-04f, 4.142489271e-04f, 4.139748643e-04f, 4.137001050e-04f, 4.134246495e-04f, 4.131484985e-04f, 4.128716523e-04f, 4.125941117e-04f,
+4.123158770e-04f, 4.120369489e-04f, 4.117573278e-04f, 4.114770142e-04f, 4.111960089e-04f, 4.109143121e-04f, 4.106319245e-04f, 4.103488467e-04f, 4.100650791e-04f, 4.097806223e-04f,
+4.094954769e-04f, 4.092096433e-04f, 4.089231222e-04f, 4.086359140e-04f, 4.083480193e-04f, 4.080594387e-04f, 4.077701726e-04f, 4.074802217e-04f, 4.071895866e-04f, 4.068982676e-04f,
+4.066062655e-04f, 4.063135807e-04f, 4.060202138e-04f, 4.057261654e-04f, 4.054314360e-04f, 4.051360261e-04f, 4.048399364e-04f, 4.045431674e-04f, 4.042457196e-04f, 4.039475936e-04f,
+4.036487900e-04f, 4.033493094e-04f, 4.030491522e-04f, 4.027483191e-04f, 4.024468106e-04f, 4.021446274e-04f, 4.018417699e-04f, 4.015382388e-04f, 4.012340345e-04f, 4.009291578e-04f,
+4.006236091e-04f, 4.003173891e-04f, 4.000104982e-04f, 3.997029372e-04f, 3.993947065e-04f, 3.990858068e-04f, 3.987762386e-04f, 3.984660025e-04f, 3.981550991e-04f, 3.978435290e-04f,
+3.975312927e-04f, 3.972183909e-04f, 3.969048241e-04f, 3.965905929e-04f, 3.962756980e-04f, 3.959601399e-04f, 3.956439191e-04f, 3.953270364e-04f, 3.950094922e-04f, 3.946912872e-04f,
+3.943724219e-04f, 3.940528971e-04f, 3.937327132e-04f, 3.934118709e-04f, 3.930903707e-04f, 3.927682133e-04f, 3.924453993e-04f, 3.921219293e-04f, 3.917978038e-04f, 3.914730236e-04f,
+3.911475891e-04f, 3.908215010e-04f, 3.904947600e-04f, 3.901673666e-04f, 3.898393214e-04f, 3.895106250e-04f, 3.891812781e-04f, 3.888512813e-04f, 3.885206352e-04f, 3.881893403e-04f,
+3.878573974e-04f, 3.875248071e-04f, 3.871915699e-04f, 3.868576865e-04f, 3.865231575e-04f, 3.861879835e-04f, 3.858521652e-04f, 3.855157032e-04f, 3.851785981e-04f, 3.848408505e-04f,
+3.845024611e-04f, 3.841634305e-04f, 3.838237593e-04f, 3.834834481e-04f, 3.831424976e-04f, 3.828009085e-04f, 3.824586813e-04f, 3.821158167e-04f, 3.817723154e-04f, 3.814281779e-04f,
+3.810834049e-04f, 3.807379971e-04f, 3.803919551e-04f, 3.800452795e-04f, 3.796979709e-04f, 3.793500301e-04f, 3.790014577e-04f, 3.786522543e-04f, 3.783024205e-04f, 3.779519570e-04f,
+3.776008645e-04f, 3.772491437e-04f, 3.768967950e-04f, 3.765438193e-04f, 3.761902172e-04f, 3.758359893e-04f, 3.754811362e-04f, 3.751256587e-04f, 3.747695574e-04f, 3.744128330e-04f,
+3.740554860e-04f, 3.736975172e-04f, 3.733389273e-04f, 3.729797169e-04f, 3.726198866e-04f, 3.722594372e-04f, 3.718983693e-04f, 3.715366835e-04f, 3.711743805e-04f, 3.708114611e-04f,
+3.704479258e-04f, 3.700837754e-04f, 3.697190105e-04f, 3.693536318e-04f, 3.689876399e-04f, 3.686210356e-04f, 3.682538195e-04f, 3.678859923e-04f, 3.675175547e-04f, 3.671485073e-04f,
+3.667788508e-04f, 3.664085860e-04f, 3.660377134e-04f, 3.656662339e-04f, 3.652941480e-04f, 3.649214564e-04f, 3.645481599e-04f, 3.641742591e-04f, 3.637997547e-04f, 3.634246474e-04f,
+3.630489379e-04f, 3.626726269e-04f, 3.622957151e-04f, 3.619182031e-04f, 3.615400917e-04f, 3.611613816e-04f, 3.607820734e-04f, 3.604021679e-04f, 3.600216657e-04f, 3.596405676e-04f,
+3.592588742e-04f, 3.588765863e-04f, 3.584937045e-04f, 3.581102296e-04f, 3.577261623e-04f, 3.573415032e-04f, 3.569562531e-04f, 3.565704127e-04f, 3.561839827e-04f, 3.557969637e-04f,
+3.554093566e-04f, 3.550211620e-04f, 3.546323806e-04f, 3.542430132e-04f, 3.538530605e-04f, 3.534625231e-04f, 3.530714018e-04f, 3.526796973e-04f, 3.522874103e-04f, 3.518945416e-04f,
+3.515010918e-04f, 3.511070618e-04f, 3.507124521e-04f, 3.503172636e-04f, 3.499214969e-04f, 3.495251528e-04f, 3.491282320e-04f, 3.487307352e-04f, 3.483326632e-04f, 3.479340166e-04f,
+3.475347963e-04f, 3.471350029e-04f, 3.467346372e-04f, 3.463336999e-04f, 3.459321918e-04f, 3.455301135e-04f, 3.451274658e-04f, 3.447242495e-04f, 3.443204653e-04f, 3.439161139e-04f,
+3.435111960e-04f, 3.431057124e-04f, 3.426996639e-04f, 3.422930512e-04f, 3.418858749e-04f, 3.414781360e-04f, 3.410698350e-04f, 3.406609728e-04f, 3.402515501e-04f, 3.398415677e-04f,
+3.394310262e-04f, 3.390199265e-04f, 3.386082693e-04f, 3.381960553e-04f, 3.377832853e-04f, 3.373699601e-04f, 3.369560804e-04f, 3.365416469e-04f, 3.361266605e-04f, 3.357111218e-04f,
+3.352950316e-04f, 3.348783907e-04f, 3.344611999e-04f, 3.340434598e-04f, 3.336251713e-04f, 3.332063352e-04f, 3.327869521e-04f, 3.323670229e-04f, 3.319465482e-04f, 3.315255290e-04f,
+3.311039659e-04f, 3.306818597e-04f, 3.302592112e-04f, 3.298360211e-04f, 3.294122903e-04f, 3.289880194e-04f, 3.285632093e-04f, 3.281378607e-04f, 3.277119744e-04f, 3.272855512e-04f,
+3.268585918e-04f, 3.264310971e-04f, 3.260030678e-04f, 3.255745046e-04f, 3.251454084e-04f, 3.247157800e-04f, 3.242856200e-04f, 3.238549294e-04f, 3.234237088e-04f, 3.229919591e-04f,
+3.225596811e-04f, 3.221268754e-04f, 3.216935430e-04f, 3.212596846e-04f, 3.208253010e-04f, 3.203903929e-04f, 3.199549612e-04f, 3.195190067e-04f, 3.190825301e-04f, 3.186455322e-04f,
+3.182080139e-04f, 3.177699759e-04f, 3.173314189e-04f, 3.168923439e-04f, 3.164527516e-04f, 3.160126428e-04f, 3.155720183e-04f, 3.151308789e-04f, 3.146892254e-04f, 3.142470585e-04f,
+3.138043792e-04f, 3.133611881e-04f, 3.129174862e-04f, 3.124732741e-04f, 3.120285528e-04f, 3.115833229e-04f, 3.111375854e-04f, 3.106913409e-04f, 3.102445904e-04f, 3.097973346e-04f,
+3.093495744e-04f, 3.089013105e-04f, 3.084525438e-04f, 3.080032750e-04f, 3.075535050e-04f, 3.071032346e-04f, 3.066524646e-04f, 3.062011959e-04f, 3.057494291e-04f, 3.052971653e-04f,
+3.048444050e-04f, 3.043911493e-04f, 3.039373989e-04f, 3.034831546e-04f, 3.030284173e-04f, 3.025731877e-04f, 3.021174667e-04f, 3.016612551e-04f, 3.012045537e-04f, 3.007473634e-04f,
+3.002896850e-04f, 2.998315193e-04f, 2.993728671e-04f, 2.989137292e-04f, 2.984541066e-04f, 2.979939999e-04f, 2.975334102e-04f, 2.970723380e-04f, 2.966107844e-04f, 2.961487501e-04f,
+2.956862360e-04f, 2.952232429e-04f, 2.947597716e-04f, 2.942958230e-04f, 2.938313979e-04f, 2.933664971e-04f, 2.929011215e-04f, 2.924352720e-04f, 2.919689492e-04f, 2.915021542e-04f,
+2.910348877e-04f, 2.905671506e-04f, 2.900989437e-04f, 2.896302679e-04f, 2.891611239e-04f, 2.886915127e-04f, 2.882214351e-04f, 2.877508919e-04f, 2.872798840e-04f, 2.868084123e-04f,
+2.863364775e-04f, 2.858640805e-04f, 2.853912222e-04f, 2.849179035e-04f, 2.844441251e-04f, 2.839698879e-04f, 2.834951928e-04f, 2.830200406e-04f, 2.825444322e-04f, 2.820683685e-04f,
+2.815918502e-04f, 2.811148783e-04f, 2.806374536e-04f, 2.801595769e-04f, 2.796812492e-04f, 2.792024713e-04f, 2.787232439e-04f, 2.782435681e-04f, 2.777634446e-04f, 2.772828744e-04f,
+2.768018582e-04f, 2.763203970e-04f, 2.758384916e-04f, 2.753561428e-04f, 2.748733516e-04f, 2.743901188e-04f, 2.739064452e-04f, 2.734223318e-04f, 2.729377794e-04f, 2.724527888e-04f,
+2.719673610e-04f, 2.714814968e-04f, 2.709951971e-04f, 2.705084627e-04f, 2.700212946e-04f, 2.695336935e-04f, 2.690456604e-04f, 2.685571962e-04f, 2.680683017e-04f, 2.675789777e-04f,
+2.670892253e-04f, 2.665990452e-04f, 2.661084383e-04f, 2.656174055e-04f, 2.651259477e-04f, 2.646340657e-04f, 2.641417605e-04f, 2.636490329e-04f, 2.631558838e-04f, 2.626623141e-04f,
+2.621683246e-04f, 2.616739163e-04f, 2.611790901e-04f, 2.606838467e-04f, 2.601881872e-04f, 2.596921123e-04f, 2.591956230e-04f, 2.586987202e-04f, 2.582014047e-04f, 2.577036775e-04f,
+2.572055394e-04f, 2.567069913e-04f, 2.562080342e-04f, 2.557086688e-04f, 2.552088961e-04f, 2.547087170e-04f, 2.542081324e-04f, 2.537071432e-04f, 2.532057502e-04f, 2.527039544e-04f,
+2.522017566e-04f, 2.516991579e-04f, 2.511961589e-04f, 2.506927607e-04f, 2.501889642e-04f, 2.496847702e-04f, 2.491801796e-04f, 2.486751934e-04f, 2.481698124e-04f, 2.476640376e-04f,
+2.471578698e-04f, 2.466513100e-04f, 2.461443591e-04f, 2.456370179e-04f, 2.451292873e-04f, 2.446211683e-04f, 2.441126618e-04f, 2.436037687e-04f, 2.430944899e-04f, 2.425848263e-04f,
+2.420747787e-04f, 2.415643482e-04f, 2.410535356e-04f, 2.405423419e-04f, 2.400307679e-04f, 2.395188145e-04f, 2.390064827e-04f, 2.384937733e-04f, 2.379806874e-04f, 2.374672258e-04f,
+2.369533894e-04f, 2.364391791e-04f, 2.359245958e-04f, 2.354096405e-04f, 2.348943141e-04f, 2.343786175e-04f, 2.338625516e-04f, 2.333461174e-04f, 2.328293157e-04f, 2.323121474e-04f,
+2.317946136e-04f, 2.312767150e-04f, 2.307584527e-04f, 2.302398276e-04f, 2.297208405e-04f, 2.292014924e-04f, 2.286817842e-04f, 2.281617169e-04f, 2.276412913e-04f, 2.271205084e-04f,
+2.265993692e-04f, 2.260778745e-04f, 2.255560252e-04f, 2.250338224e-04f, 2.245112669e-04f, 2.239883596e-04f, 2.234651015e-04f, 2.229414936e-04f, 2.224175366e-04f, 2.218932317e-04f,
+2.213685796e-04f, 2.208435814e-04f, 2.203182380e-04f, 2.197925502e-04f, 2.192665191e-04f, 2.187401455e-04f, 2.182134304e-04f, 2.176863748e-04f, 2.171589795e-04f, 2.166312456e-04f,
+2.161031738e-04f, 2.155747653e-04f, 2.150460209e-04f, 2.145169415e-04f, 2.139875281e-04f, 2.134577816e-04f, 2.129277030e-04f, 2.123972932e-04f, 2.118665532e-04f, 2.113354838e-04f,
+2.108040861e-04f, 2.102723609e-04f, 2.097403093e-04f, 2.092079321e-04f, 2.086752303e-04f, 2.081422049e-04f, 2.076088567e-04f, 2.070751868e-04f, 2.065411960e-04f, 2.060068854e-04f,
+2.054722558e-04f, 2.049373083e-04f, 2.044020437e-04f, 2.038664630e-04f, 2.033305672e-04f, 2.027943572e-04f, 2.022578340e-04f, 2.017209984e-04f, 2.011838515e-04f, 2.006463943e-04f,
+2.001086275e-04f, 1.995705523e-04f, 1.990321696e-04f, 1.984934802e-04f, 1.979544853e-04f, 1.974151856e-04f, 1.968755822e-04f, 1.963356761e-04f, 1.957954681e-04f, 1.952549592e-04f,
+1.947141505e-04f, 1.941730428e-04f, 1.936316371e-04f, 1.930899344e-04f, 1.925479356e-04f, 1.920056416e-04f, 1.914630535e-04f, 1.909201722e-04f, 1.903769987e-04f, 1.898335338e-04f,
+1.892897787e-04f, 1.887457341e-04f, 1.882014012e-04f, 1.876567808e-04f, 1.871118740e-04f, 1.865666816e-04f, 1.860212046e-04f, 1.854754441e-04f, 1.849294009e-04f, 1.843830761e-04f,
+1.838364705e-04f, 1.832895853e-04f, 1.827424212e-04f, 1.821949794e-04f, 1.816472607e-04f, 1.810992661e-04f, 1.805509966e-04f, 1.800024532e-04f, 1.794536368e-04f, 1.789045484e-04f,
+1.783551889e-04f, 1.778055594e-04f, 1.772556608e-04f, 1.767054941e-04f, 1.761550602e-04f, 1.756043601e-04f, 1.750533948e-04f, 1.745021652e-04f, 1.739506724e-04f, 1.733989173e-04f,
+1.728469008e-04f, 1.722946240e-04f, 1.717420878e-04f, 1.711892932e-04f, 1.706362411e-04f, 1.700829326e-04f, 1.695293686e-04f, 1.689755501e-04f, 1.684214780e-04f, 1.678671534e-04f,
+1.673125772e-04f, 1.667577503e-04f, 1.662026739e-04f, 1.656473488e-04f, 1.650917760e-04f, 1.645359565e-04f, 1.639798913e-04f, 1.634235813e-04f, 1.628670276e-04f, 1.623102311e-04f,
+1.617531928e-04f, 1.611959136e-04f, 1.606383947e-04f, 1.600806368e-04f, 1.595226411e-04f, 1.589644084e-04f, 1.584059399e-04f, 1.578472364e-04f, 1.572882990e-04f, 1.567291285e-04f,
+1.561697261e-04f, 1.556100927e-04f, 1.550502293e-04f, 1.544901368e-04f, 1.539298163e-04f, 1.533692687e-04f, 1.528084950e-04f, 1.522474962e-04f, 1.516862733e-04f, 1.511248273e-04f,
+1.505631591e-04f, 1.500012698e-04f, 1.494391603e-04f, 1.488768317e-04f, 1.483142848e-04f, 1.477515208e-04f, 1.471885405e-04f, 1.466253450e-04f, 1.460619353e-04f, 1.454983123e-04f,
+1.449344770e-04f, 1.443704305e-04f, 1.438061737e-04f, 1.432417077e-04f, 1.426770333e-04f, 1.421121516e-04f, 1.415470636e-04f, 1.409817703e-04f, 1.404162726e-04f, 1.398505716e-04f,
+1.392846682e-04f, 1.387185635e-04f, 1.381522585e-04f, 1.375857540e-04f, 1.370190512e-04f, 1.364521510e-04f, 1.358850544e-04f, 1.353177625e-04f, 1.347502761e-04f, 1.341825963e-04f,
+1.336147241e-04f, 1.330466605e-04f, 1.324784065e-04f, 1.319099630e-04f, 1.313413311e-04f, 1.307725118e-04f, 1.302035061e-04f, 1.296343149e-04f, 1.290649393e-04f, 1.284953802e-04f,
+1.279256387e-04f, 1.273557158e-04f, 1.267856124e-04f, 1.262153295e-04f, 1.256448682e-04f, 1.250742295e-04f, 1.245034143e-04f, 1.239324236e-04f, 1.233612585e-04f, 1.227899199e-04f,
+1.222184089e-04f, 1.216467264e-04f, 1.210748735e-04f, 1.205028511e-04f, 1.199306603e-04f, 1.193583020e-04f, 1.187857772e-04f, 1.182130871e-04f, 1.176402324e-04f, 1.170672143e-04f,
+1.164940338e-04f, 1.159206919e-04f, 1.153471895e-04f, 1.147735276e-04f, 1.141997074e-04f, 1.136257297e-04f, 1.130515956e-04f, 1.124773060e-04f, 1.119028621e-04f, 1.113282647e-04f,
+1.107535150e-04f, 1.101786138e-04f, 1.096035622e-04f, 1.090283612e-04f, 1.084530119e-04f, 1.078775151e-04f, 1.073018720e-04f, 1.067260835e-04f, 1.061501507e-04f, 1.055740744e-04f,
+1.049978559e-04f, 1.044214959e-04f, 1.038449957e-04f, 1.032683561e-04f, 1.026915781e-04f, 1.021146629e-04f, 1.015376113e-04f, 1.009604244e-04f, 1.003831033e-04f, 9.980564878e-05f,
+9.922806203e-05f, 9.865034400e-05f, 9.807249570e-05f, 9.749451814e-05f, 9.691641233e-05f, 9.633817928e-05f, 9.575981999e-05f, 9.518133548e-05f, 9.460272675e-05f, 9.402399481e-05f,
+9.344514068e-05f, 9.286616536e-05f, 9.228706986e-05f, 9.170785518e-05f, 9.112852235e-05f, 9.054907238e-05f, 8.996950626e-05f, 8.938982501e-05f, 8.881002965e-05f, 8.823012117e-05f,
+8.765010060e-05f, 8.706996895e-05f, 8.648972721e-05f, 8.590937642e-05f, 8.532891757e-05f, 8.474835168e-05f, 8.416767975e-05f, 8.358690281e-05f, 8.300602186e-05f, 8.242503792e-05f,
+8.184395199e-05f, 8.126276508e-05f, 8.068147822e-05f, 8.010009241e-05f, 7.951860867e-05f, 7.893702800e-05f, 7.835535142e-05f, 7.777357994e-05f, 7.719171457e-05f, 7.660975633e-05f,
+7.602770623e-05f, 7.544556529e-05f, 7.486333450e-05f, 7.428101490e-05f, 7.369860749e-05f, 7.311611328e-05f, 7.253353329e-05f, 7.195086853e-05f, 7.136812002e-05f, 7.078528877e-05f,
+7.020237578e-05f, 6.961938209e-05f, 6.903630869e-05f, 6.845315660e-05f, 6.786992684e-05f, 6.728662043e-05f, 6.670323837e-05f, 6.611978167e-05f, 6.553625136e-05f, 6.495264845e-05f,
+6.436897395e-05f, 6.378522887e-05f, 6.320141424e-05f, 6.261753105e-05f, 6.203358034e-05f, 6.144956311e-05f, 6.086548038e-05f, 6.028133316e-05f, 5.969712247e-05f, 5.911284932e-05f,
+5.852851472e-05f, 5.794411970e-05f, 5.735966526e-05f, 5.677515242e-05f, 5.619058220e-05f, 5.560595561e-05f, 5.502127366e-05f, 5.443653737e-05f, 5.385174776e-05f, 5.326690584e-05f,
+5.268201262e-05f, 5.209706912e-05f, 5.151207636e-05f, 5.092703534e-05f, 5.034194709e-05f, 4.975681262e-05f, 4.917163294e-05f, 4.858640908e-05f, 4.800114204e-05f, 4.741583283e-05f,
+4.683048249e-05f, 4.624509201e-05f, 4.565966242e-05f, 4.507419472e-05f, 4.448868995e-05f, 4.390314910e-05f, 4.331757319e-05f, 4.273196325e-05f, 4.214632028e-05f, 4.156064531e-05f,
+4.097493933e-05f, 4.038920338e-05f, 3.980343846e-05f, 3.921764559e-05f, 3.863182579e-05f, 3.804598007e-05f, 3.746010944e-05f, 3.687421492e-05f, 3.628829752e-05f, 3.570235826e-05f,
+3.511639816e-05f, 3.453041822e-05f, 3.394441947e-05f, 3.335840291e-05f, 3.277236957e-05f, 3.218632045e-05f, 3.160025658e-05f, 3.101417896e-05f, 3.042808861e-05f, 2.984198654e-05f,
+2.925587377e-05f, 2.866975131e-05f, 2.808362019e-05f, 2.749748140e-05f, 2.691133597e-05f, 2.632518490e-05f, 2.573902922e-05f, 2.515286994e-05f, 2.456670807e-05f, 2.398054462e-05f,
+2.339438061e-05f, 2.280821705e-05f, 2.222205496e-05f, 2.163589535e-05f, 2.104973923e-05f, 2.046358761e-05f, 1.987744151e-05f, 1.929130195e-05f, 1.870516993e-05f, 1.811904647e-05f,
+1.753293258e-05f, 1.694682927e-05f, 1.636073757e-05f, 1.577465847e-05f, 1.518859299e-05f, 1.460254214e-05f, 1.401650695e-05f, 1.343048841e-05f, 1.284448754e-05f, 1.225850536e-05f,
+1.167254287e-05f, 1.108660109e-05f, 1.050068103e-05f, 9.914783696e-06f, 9.328910106e-06f, 8.743061269e-06f, 8.157238198e-06f, 7.571441902e-06f, 6.985673393e-06f, 6.399933683e-06f,
+5.814223781e-06f, 5.228544699e-06f, 4.642897447e-06f, 4.057283035e-06f, 3.471702475e-06f, 2.886156775e-06f, 2.300646947e-06f, 1.715174000e-06f, 1.129738945e-06f, 5.443427897e-07f,
+-4.101345511e-08f, -6.263287802e-07f, -1.211602176e-06f, -1.796832634e-06f, -2.382019146e-06f, -2.967160701e-06f, -3.552256291e-06f, -4.137304909e-06f, -4.722305545e-06f, -5.307257192e-06f,
+-5.892158840e-06f, -6.477009483e-06f, -7.061808113e-06f, -7.646553721e-06f, -8.231245302e-06f, -8.815881846e-06f, -9.400462348e-06f, -9.984985799e-06f, -1.056945119e-05f, -1.115385753e-05f,
+-1.173820379e-05f, -1.232248898e-05f, -1.290671208e-05f, -1.349087210e-05f, -1.407496802e-05f, -1.465899885e-05f, -1.524296357e-05f, -1.582686118e-05f, -1.641069067e-05f, -1.699445105e-05f,
+-1.757814130e-05f, -1.816176043e-05f, -1.874530742e-05f, -1.932878127e-05f, -1.991218099e-05f, -2.049550556e-05f, -2.107875398e-05f, -2.166192526e-05f, -2.224501837e-05f, -2.282803234e-05f,
+-2.341096614e-05f, -2.399381878e-05f, -2.457658926e-05f, -2.515927657e-05f, -2.574187971e-05f, -2.632439769e-05f, -2.690682949e-05f, -2.748917413e-05f, -2.807143059e-05f, -2.865359787e-05f,
+-2.923567499e-05f, -2.981766093e-05f, -3.039955469e-05f, -3.098135529e-05f, -3.156306171e-05f, -3.214467295e-05f, -3.272618803e-05f, -3.330760593e-05f, -3.388892567e-05f, -3.447014624e-05f,
+-3.505126664e-05f, -3.563228588e-05f, -3.621320296e-05f, -3.679401688e-05f, -3.737472665e-05f, -3.795533126e-05f, -3.853582972e-05f, -3.911622104e-05f, -3.969650422e-05f, -4.027667826e-05f,
+-4.085674217e-05f, -4.143669495e-05f, -4.201653560e-05f, -4.259626314e-05f, -4.317587656e-05f, -4.375537488e-05f, -4.433475710e-05f, -4.491402222e-05f, -4.549316925e-05f, -4.607219720e-05f,
+-4.665110508e-05f, -4.722989189e-05f, -4.780855664e-05f, -4.838709834e-05f, -4.896551599e-05f, -4.954380862e-05f, -5.012197521e-05f, -5.070001479e-05f, -5.127792636e-05f, -5.185570893e-05f,
+-5.243336151e-05f, -5.301088311e-05f, -5.358827275e-05f, -5.416552943e-05f, -5.474265217e-05f, -5.531963997e-05f, -5.589649184e-05f, -5.647320681e-05f, -5.704978388e-05f, -5.762622206e-05f,
+-5.820252037e-05f, -5.877867782e-05f, -5.935469343e-05f, -5.993056620e-05f, -6.050629516e-05f, -6.108187931e-05f, -6.165731767e-05f, -6.223260926e-05f, -6.280775309e-05f, -6.338274818e-05f,
+-6.395759354e-05f, -6.453228820e-05f, -6.510683116e-05f, -6.568122144e-05f, -6.625545807e-05f, -6.682954005e-05f, -6.740346641e-05f, -6.797723617e-05f, -6.855084835e-05f, -6.912430196e-05f,
+-6.969759602e-05f, -7.027072955e-05f, -7.084370158e-05f, -7.141651112e-05f, -7.198915719e-05f, -7.256163883e-05f, -7.313395503e-05f, -7.370610484e-05f, -7.427808727e-05f, -7.484990135e-05f,
+-7.542154609e-05f, -7.599302052e-05f, -7.656432366e-05f, -7.713545455e-05f, -7.770641219e-05f, -7.827719563e-05f, -7.884780387e-05f, -7.941823596e-05f, -7.998849091e-05f, -8.055856775e-05f,
+-8.112846550e-05f, -8.169818320e-05f, -8.226771988e-05f, -8.283707455e-05f, -8.340624625e-05f, -8.397523400e-05f, -8.454403684e-05f, -8.511265380e-05f, -8.568108390e-05f, -8.624932617e-05f,
+-8.681737965e-05f, -8.738524336e-05f, -8.795291634e-05f, -8.852039762e-05f, -8.908768623e-05f, -8.965478121e-05f, -9.022168158e-05f, -9.078838638e-05f, -9.135489464e-05f, -9.192120540e-05f,
+-9.248731769e-05f, -9.305323055e-05f, -9.361894301e-05f, -9.418445411e-05f, -9.474976288e-05f, -9.531486837e-05f, -9.587976960e-05f, -9.644446562e-05f, -9.700895546e-05f, -9.757323816e-05f,
+-9.813731276e-05f, -9.870117831e-05f, -9.926483383e-05f, -9.982827837e-05f, -1.003915110e-04f, -1.009545307e-04f, -1.015173365e-04f, -1.020799275e-04f, -1.026423028e-04f, -1.032044613e-04f,
+-1.037664021e-04f, -1.043281243e-04f, -1.048896269e-04f, -1.054509089e-04f, -1.060119694e-04f, -1.065728075e-04f, -1.071334221e-04f, -1.076938123e-04f, -1.082539773e-04f, -1.088139159e-04f,
+-1.093736273e-04f, -1.099331105e-04f, -1.104923646e-04f, -1.110513886e-04f, -1.116101816e-04f, -1.121687425e-04f, -1.127270706e-04f, -1.132851647e-04f, -1.138430240e-04f, -1.144006475e-04f,
+-1.149580343e-04f, -1.155151834e-04f, -1.160720939e-04f, -1.166287648e-04f, -1.171851952e-04f, -1.177413841e-04f, -1.182973306e-04f, -1.188530338e-04f, -1.194084927e-04f, -1.199637063e-04f,
+-1.205186737e-04f, -1.210733940e-04f, -1.216278663e-04f, -1.221820895e-04f, -1.227360628e-04f, -1.232897852e-04f, -1.238432558e-04f, -1.243964736e-04f, -1.249494377e-04f, -1.255021471e-04f,
+-1.260546009e-04f, -1.266067983e-04f, -1.271587381e-04f, -1.277104196e-04f, -1.282618417e-04f, -1.288130036e-04f, -1.293639043e-04f, -1.299145428e-04f, -1.304649183e-04f, -1.310150297e-04f,
+-1.315648763e-04f, -1.321144569e-04f, -1.326637707e-04f, -1.332128169e-04f, -1.337615943e-04f, -1.343101022e-04f, -1.348583395e-04f, -1.354063054e-04f, -1.359539989e-04f, -1.365014191e-04f,
+-1.370485651e-04f, -1.375954359e-04f, -1.381420306e-04f, -1.386883483e-04f, -1.392343880e-04f, -1.397801489e-04f, -1.403256300e-04f, -1.408708304e-04f, -1.414157491e-04f, -1.419603853e-04f,
+-1.425047380e-04f, -1.430488063e-04f, -1.435925893e-04f, -1.441360860e-04f, -1.446792956e-04f, -1.452222171e-04f, -1.457648496e-04f, -1.463071921e-04f, -1.468492439e-04f, -1.473910039e-04f,
+-1.479324712e-04f, -1.484736449e-04f, -1.490145241e-04f, -1.495551079e-04f, -1.500953954e-04f, -1.506353856e-04f, -1.511750777e-04f, -1.517144707e-04f, -1.522535637e-04f, -1.527923558e-04f,
+-1.533308461e-04f, -1.538690337e-04f, -1.544069177e-04f, -1.549444972e-04f, -1.554817712e-04f, -1.560187389e-04f, -1.565553993e-04f, -1.570917515e-04f, -1.576277947e-04f, -1.581635279e-04f,
+-1.586989502e-04f, -1.592340608e-04f, -1.597688587e-04f, -1.603033429e-04f, -1.608375127e-04f, -1.613713671e-04f, -1.619049052e-04f, -1.624381261e-04f, -1.629710290e-04f, -1.635036128e-04f,
+-1.640358767e-04f, -1.645678199e-04f, -1.650994413e-04f, -1.656307402e-04f, -1.661617156e-04f, -1.666923666e-04f, -1.672226923e-04f, -1.677526919e-04f, -1.682823645e-04f, -1.688117090e-04f,
+-1.693407248e-04f, -1.698694108e-04f, -1.703977661e-04f, -1.709257900e-04f, -1.714534814e-04f, -1.719808396e-04f, -1.725078635e-04f, -1.730345524e-04f, -1.735609054e-04f, -1.740869215e-04f,
+-1.746125998e-04f, -1.751379395e-04f, -1.756629398e-04f, -1.761875996e-04f, -1.767119182e-04f, -1.772358946e-04f, -1.777595280e-04f, -1.782828175e-04f, -1.788057621e-04f, -1.793283611e-04f,
+-1.798506136e-04f, -1.803725186e-04f, -1.808940753e-04f, -1.814152828e-04f, -1.819361402e-04f, -1.824566467e-04f, -1.829768013e-04f, -1.834966033e-04f, -1.840160517e-04f, -1.845351456e-04f,
+-1.850538843e-04f, -1.855722667e-04f, -1.860902921e-04f, -1.866079596e-04f, -1.871252682e-04f, -1.876422172e-04f, -1.881588057e-04f, -1.886750327e-04f, -1.891908975e-04f, -1.897063991e-04f,
+-1.902215367e-04f, -1.907363095e-04f, -1.912507165e-04f, -1.917647569e-04f, -1.922784298e-04f, -1.927917345e-04f, -1.933046699e-04f, -1.938172353e-04f, -1.943294298e-04f, -1.948412525e-04f,
+-1.953527025e-04f, -1.958637791e-04f, -1.963744814e-04f, -1.968848084e-04f, -1.973947594e-04f, -1.979043335e-04f, -1.984135298e-04f, -1.989223474e-04f, -1.994307856e-04f, -1.999388435e-04f,
+-2.004465202e-04f, -2.009538149e-04f, -2.014607267e-04f, -2.019672547e-04f, -2.024733982e-04f, -2.029791562e-04f, -2.034845280e-04f, -2.039895126e-04f, -2.044941093e-04f, -2.049983172e-04f,
+-2.055021353e-04f, -2.060055630e-04f, -2.065085994e-04f, -2.070112435e-04f, -2.075134947e-04f, -2.080153519e-04f, -2.085168145e-04f, -2.090178814e-04f, -2.095185520e-04f, -2.100188254e-04f,
+-2.105187007e-04f, -2.110181771e-04f, -2.115172538e-04f, -2.120159298e-04f, -2.125142045e-04f, -2.130120770e-04f, -2.135095463e-04f, -2.140066118e-04f, -2.145032725e-04f, -2.149995277e-04f,
+-2.154953764e-04f, -2.159908179e-04f, -2.164858514e-04f, -2.169804760e-04f, -2.174746909e-04f, -2.179684952e-04f, -2.184618882e-04f, -2.189548690e-04f, -2.194474368e-04f, -2.199395908e-04f,
+-2.204313301e-04f, -2.209226539e-04f, -2.214135614e-04f, -2.219040519e-04f, -2.223941243e-04f, -2.228837781e-04f, -2.233730122e-04f, -2.238618260e-04f, -2.243502186e-04f, -2.248381892e-04f,
+-2.253257369e-04f, -2.258128610e-04f, -2.262995606e-04f, -2.267858350e-04f, -2.272716832e-04f, -2.277571046e-04f, -2.282420983e-04f, -2.287266635e-04f, -2.292107994e-04f, -2.296945051e-04f,
+-2.301777799e-04f, -2.306606230e-04f, -2.311430335e-04f, -2.316250107e-04f, -2.321065537e-04f, -2.325876618e-04f, -2.330683341e-04f, -2.335485699e-04f, -2.340283683e-04f, -2.345077286e-04f,
+-2.349866499e-04f, -2.354651315e-04f, -2.359431726e-04f, -2.364207723e-04f, -2.368979298e-04f, -2.373746445e-04f, -2.378509154e-04f, -2.383267418e-04f, -2.388021229e-04f, -2.392770579e-04f,
+-2.397515460e-04f, -2.402255864e-04f, -2.406991784e-04f, -2.411723211e-04f, -2.416450137e-04f, -2.421172556e-04f, -2.425890458e-04f, -2.430603837e-04f, -2.435312683e-04f, -2.440016991e-04f,
+-2.444716750e-04f, -2.449411955e-04f, -2.454102596e-04f, -2.458788667e-04f, -2.463470159e-04f, -2.468147064e-04f, -2.472819376e-04f, -2.477487085e-04f, -2.482150185e-04f, -2.486808668e-04f,
+-2.491462525e-04f, -2.496111750e-04f, -2.500756333e-04f, -2.505396269e-04f, -2.510031549e-04f, -2.514662165e-04f, -2.519288110e-04f, -2.523909375e-04f, -2.528525954e-04f, -2.533137839e-04f,
+-2.537745022e-04f, -2.542347495e-04f, -2.546945251e-04f, -2.551538282e-04f, -2.556126580e-04f, -2.560710139e-04f, -2.565288950e-04f, -2.569863005e-04f, -2.574432298e-04f, -2.578996820e-04f,
+-2.583556564e-04f, -2.588111523e-04f, -2.592661689e-04f, -2.597207054e-04f, -2.601747611e-04f, -2.606283352e-04f, -2.610814271e-04f, -2.615340358e-04f, -2.619861608e-04f, -2.624378012e-04f,
+-2.628889563e-04f, -2.633396253e-04f, -2.637898075e-04f, -2.642395022e-04f, -2.646887086e-04f, -2.651374260e-04f, -2.655856536e-04f, -2.660333907e-04f, -2.664806366e-04f, -2.669273904e-04f,
+-2.673736515e-04f, -2.678194192e-04f, -2.682646926e-04f, -2.687094712e-04f, -2.691537540e-04f, -2.695975405e-04f, -2.700408298e-04f, -2.704836212e-04f, -2.709259140e-04f, -2.713677075e-04f,
+-2.718090010e-04f, -2.722497936e-04f, -2.726900848e-04f, -2.731298737e-04f, -2.735691596e-04f, -2.740079419e-04f, -2.744462197e-04f, -2.748839924e-04f, -2.753212592e-04f, -2.757580195e-04f,
+-2.761942724e-04f, -2.766300174e-04f, -2.770652536e-04f, -2.774999803e-04f, -2.779341969e-04f, -2.783679026e-04f, -2.788010967e-04f, -2.792337785e-04f, -2.796659473e-04f, -2.800976023e-04f,
+-2.805287429e-04f, -2.809593683e-04f, -2.813894779e-04f, -2.818190709e-04f, -2.822481466e-04f, -2.826767043e-04f, -2.831047433e-04f, -2.835322630e-04f, -2.839592625e-04f, -2.843857413e-04f,
+-2.848116986e-04f, -2.852371336e-04f, -2.856620458e-04f, -2.860864344e-04f, -2.865102986e-04f, -2.869336379e-04f, -2.873564515e-04f, -2.877787387e-04f, -2.882004989e-04f, -2.886217313e-04f,
+-2.890424352e-04f, -2.894626100e-04f, -2.898822549e-04f, -2.903013693e-04f, -2.907199526e-04f, -2.911380039e-04f, -2.915555226e-04f, -2.919725080e-04f, -2.923889595e-04f, -2.928048764e-04f,
+-2.932202580e-04f, -2.936351035e-04f, -2.940494124e-04f, -2.944631839e-04f, -2.948764174e-04f, -2.952891122e-04f, -2.957012675e-04f, -2.961128829e-04f, -2.965239574e-04f, -2.969344906e-04f,
+-2.973444817e-04f, -2.977539300e-04f, -2.981628350e-04f, -2.985711958e-04f, -2.989790119e-04f, -2.993862825e-04f, -2.997930070e-04f, -3.001991848e-04f, -3.006048152e-04f, -3.010098975e-04f,
+-3.014144310e-04f, -3.018184151e-04f, -3.022218492e-04f, -3.026247325e-04f, -3.030270645e-04f, -3.034288444e-04f, -3.038300716e-04f, -3.042307454e-04f, -3.046308653e-04f, -3.050304304e-04f,
+-3.054294403e-04f, -3.058278942e-04f, -3.062257915e-04f, -3.066231315e-04f, -3.070199136e-04f, -3.074161372e-04f, -3.078118015e-04f, -3.082069060e-04f, -3.086014500e-04f, -3.089954329e-04f,
+-3.093888540e-04f, -3.097817127e-04f, -3.101740083e-04f, -3.105657402e-04f, -3.109569078e-04f, -3.113475104e-04f, -3.117375474e-04f, -3.121270181e-04f, -3.125159220e-04f, -3.129042584e-04f,
+-3.132920266e-04f, -3.136792260e-04f, -3.140658561e-04f, -3.144519161e-04f, -3.148374054e-04f, -3.152223235e-04f, -3.156066697e-04f, -3.159904433e-04f, -3.163736437e-04f, -3.167562704e-04f,
+-3.171383227e-04f, -3.175197999e-04f, -3.179007015e-04f, -3.182810269e-04f, -3.186607753e-04f, -3.190399463e-04f, -3.194185392e-04f, -3.197965533e-04f, -3.201739881e-04f, -3.205508430e-04f,
+-3.209271172e-04f, -3.213028104e-04f, -3.216779217e-04f, -3.220524506e-04f, -3.224263966e-04f, -3.227997589e-04f, -3.231725371e-04f, -3.235447304e-04f, -3.239163384e-04f, -3.242873603e-04f,
+-3.246577956e-04f, -3.250276437e-04f, -3.253969039e-04f, -3.257655758e-04f, -3.261336587e-04f, -3.265011519e-04f, -3.268680550e-04f, -3.272343673e-04f, -3.276000882e-04f, -3.279652171e-04f,
+-3.283297535e-04f, -3.286936967e-04f, -3.290570462e-04f, -3.294198013e-04f, -3.297819616e-04f, -3.301435263e-04f, -3.305044950e-04f, -3.308648670e-04f, -3.312246418e-04f, -3.315838187e-04f,
+-3.319423973e-04f, -3.323003768e-04f, -3.326577569e-04f, -3.330145367e-04f, -3.333707159e-04f, -3.337262938e-04f, -3.340812698e-04f, -3.344356435e-04f, -3.347894141e-04f, -3.351425811e-04f,
+-3.354951440e-04f, -3.358471023e-04f, -3.361984552e-04f, -3.365492023e-04f, -3.368993430e-04f, -3.372488768e-04f, -3.375978030e-04f, -3.379461212e-04f, -3.382938307e-04f, -3.386409310e-04f,
+-3.389874216e-04f, -3.393333018e-04f, -3.396785712e-04f, -3.400232291e-04f, -3.403672751e-04f, -3.407107085e-04f, -3.410535289e-04f, -3.413957356e-04f, -3.417373282e-04f, -3.420783060e-04f,
+-3.424186685e-04f, -3.427584152e-04f, -3.430975456e-04f, -3.434360591e-04f, -3.437739551e-04f, -3.441112331e-04f, -3.444478926e-04f, -3.447839330e-04f, -3.451193538e-04f, -3.454541545e-04f,
+-3.457883345e-04f, -3.461218933e-04f, -3.464548303e-04f, -3.467871450e-04f, -3.471188370e-04f, -3.474499056e-04f, -3.477803503e-04f, -3.481101707e-04f, -3.484393661e-04f, -3.487679361e-04f,
+-3.490958801e-04f, -3.494231976e-04f, -3.497498881e-04f, -3.500759510e-04f, -3.504013859e-04f, -3.507261922e-04f, -3.510503695e-04f, -3.513739171e-04f, -3.516968346e-04f, -3.520191214e-04f,
+-3.523407771e-04f, -3.526618011e-04f, -3.529821930e-04f, -3.533019521e-04f, -3.536210781e-04f, -3.539395704e-04f, -3.542574284e-04f, -3.545746518e-04f, -3.548912399e-04f, -3.552071923e-04f,
+-3.555225085e-04f, -3.558371879e-04f, -3.561512302e-04f, -3.564646347e-04f, -3.567774010e-04f, -3.570895285e-04f, -3.574010169e-04f, -3.577118656e-04f, -3.580220741e-04f, -3.583316418e-04f,
+-3.586405684e-04f, -3.589488534e-04f, -3.592564962e-04f, -3.595634963e-04f, -3.598698533e-04f, -3.601755667e-04f, -3.604806360e-04f, -3.607850607e-04f, -3.610888404e-04f, -3.613919745e-04f,
+-3.616944626e-04f, -3.619963042e-04f, -3.622974988e-04f, -3.625980460e-04f, -3.628979453e-04f, -3.631971961e-04f, -3.634957981e-04f, -3.637937508e-04f, -3.640910536e-04f, -3.643877062e-04f,
+-3.646837080e-04f, -3.649790586e-04f, -3.652737575e-04f, -3.655678043e-04f, -3.658611985e-04f, -3.661539396e-04f, -3.664460272e-04f, -3.667374609e-04f, -3.670282400e-04f, -3.673183643e-04f,
+-3.676078332e-04f, -3.678966463e-04f, -3.681848032e-04f, -3.684723033e-04f, -3.687591462e-04f, -3.690453316e-04f, -3.693308589e-04f, -3.696157276e-04f, -3.698999374e-04f, -3.701834878e-04f,
+-3.704663784e-04f, -3.707486086e-04f, -3.710301781e-04f, -3.713110865e-04f, -3.715913332e-04f, -3.718709179e-04f, -3.721498401e-04f, -3.724280994e-04f, -3.727056953e-04f, -3.729826274e-04f,
+-3.732588953e-04f, -3.735344985e-04f, -3.738094366e-04f, -3.740837093e-04f, -3.743573160e-04f, -3.746302563e-04f, -3.749025298e-04f, -3.751741361e-04f, -3.754450748e-04f, -3.757153453e-04f,
+-3.759849475e-04f, -3.762538807e-04f, -3.765221446e-04f, -3.767897387e-04f, -3.770566627e-04f, -3.773229161e-04f, -3.775884986e-04f, -3.778534096e-04f, -3.781176489e-04f, -3.783812159e-04f,
+-3.786441103e-04f, -3.789063317e-04f, -3.791678796e-04f, -3.794287537e-04f, -3.796889535e-04f, -3.799484787e-04f, -3.802073289e-04f, -3.804655036e-04f, -3.807230024e-04f, -3.809798250e-04f,
+-3.812359710e-04f, -3.814914399e-04f, -3.817462313e-04f, -3.820003450e-04f, -3.822537804e-04f, -3.825065372e-04f, -3.827586150e-04f, -3.830100135e-04f, -3.832607321e-04f, -3.835107706e-04f,
+-3.837601286e-04f, -3.840088056e-04f, -3.842568013e-04f, -3.845041153e-04f, -3.847507473e-04f, -3.849966967e-04f, -3.852419634e-04f, -3.854865469e-04f, -3.857304467e-04f, -3.859736627e-04f,
+-3.862161943e-04f, -3.864580412e-04f, -3.866992030e-04f, -3.869396794e-04f, -3.871794700e-04f, -3.874185744e-04f, -3.876569923e-04f, -3.878947233e-04f, -3.881317670e-04f, -3.883681231e-04f,
+-3.886037912e-04f, -3.888387709e-04f, -3.890730620e-04f, -3.893066640e-04f, -3.895395766e-04f, -3.897717994e-04f, -3.900033321e-04f, -3.902341743e-04f, -3.904643257e-04f, -3.906937859e-04f,
+-3.909225546e-04f, -3.911506314e-04f, -3.913780160e-04f, -3.916047081e-04f, -3.918307072e-04f, -3.920560131e-04f, -3.922806254e-04f, -3.925045437e-04f, -3.927277678e-04f, -3.929502974e-04f,
+-3.931721319e-04f, -3.933932712e-04f, -3.936137149e-04f, -3.938334626e-04f, -3.940525141e-04f, -3.942708689e-04f, -3.944885269e-04f, -3.947054876e-04f, -3.949217506e-04f, -3.951373158e-04f,
+-3.953521828e-04f, -3.955663512e-04f, -3.957798207e-04f, -3.959925910e-04f, -3.962046618e-04f, -3.964160328e-04f, -3.966267036e-04f, -3.968366739e-04f, -3.970459435e-04f, -3.972545120e-04f,
+-3.974623791e-04f, -3.976695444e-04f, -3.978760078e-04f, -3.980817688e-04f, -3.982868271e-04f, -3.984911826e-04f, -3.986948347e-04f, -3.988977834e-04f, -3.991000282e-04f, -3.993015688e-04f,
+-3.995024050e-04f, -3.997025364e-04f, -3.999019628e-04f, -4.001006838e-04f, -4.002986992e-04f, -4.004960087e-04f, -4.006926120e-04f, -4.008885087e-04f, -4.010836987e-04f, -4.012781815e-04f,
+-4.014719570e-04f, -4.016650249e-04f, -4.018573848e-04f, -4.020490364e-04f, -4.022399796e-04f, -4.024302139e-04f, -4.026197392e-04f, -4.028085552e-04f, -4.029966615e-04f, -4.031840580e-04f,
+-4.033707442e-04f, -4.035567200e-04f, -4.037419851e-04f, -4.039265393e-04f, -4.041103821e-04f, -4.042935134e-04f, -4.044759330e-04f, -4.046576405e-04f, -4.048386356e-04f, -4.050189182e-04f,
+-4.051984879e-04f, -4.053773445e-04f, -4.055554878e-04f, -4.057329174e-04f, -4.059096332e-04f, -4.060856348e-04f, -4.062609220e-04f, -4.064354946e-04f, -4.066093523e-04f, -4.067824949e-04f,
+-4.069549220e-04f, -4.071266335e-04f, -4.072976291e-04f, -4.074679086e-04f, -4.076374717e-04f, -4.078063182e-04f, -4.079744478e-04f, -4.081418603e-04f, -4.083085555e-04f, -4.084745331e-04f,
+-4.086397928e-04f, -4.088043345e-04f, -4.089681580e-04f, -4.091312629e-04f, -4.092936490e-04f, -4.094553162e-04f, -4.096162642e-04f, -4.097764927e-04f, -4.099360015e-04f, -4.100947905e-04f,
+-4.102528593e-04f, -4.104102078e-04f, -4.105668358e-04f, -4.107227430e-04f, -4.108779291e-04f, -4.110323941e-04f, -4.111861376e-04f, -4.113391595e-04f, -4.114914595e-04f, -4.116430374e-04f,
+-4.117938931e-04f, -4.119440262e-04f, -4.120934367e-04f, -4.122421242e-04f, -4.123900886e-04f, -4.125373297e-04f, -4.126838472e-04f, -4.128296411e-04f, -4.129747109e-04f, -4.131190567e-04f,
+-4.132626781e-04f, -4.134055750e-04f, -4.135477472e-04f, -4.136891944e-04f, -4.138299166e-04f, -4.139699134e-04f, -4.141091847e-04f, -4.142477304e-04f, -4.143855501e-04f, -4.145226439e-04f,
+-4.146590113e-04f, -4.147946523e-04f, -4.149295667e-04f, -4.150637543e-04f, -4.151972149e-04f, -4.153299484e-04f, -4.154619545e-04f, -4.155932331e-04f, -4.157237840e-04f, -4.158536070e-04f,
+-4.159827020e-04f, -4.161110688e-04f, -4.162387072e-04f, -4.163656171e-04f, -4.164917982e-04f, -4.166172504e-04f, -4.167419736e-04f, -4.168659676e-04f, -4.169892321e-04f, -4.171117672e-04f,
+-4.172335725e-04f, -4.173546479e-04f, -4.174749934e-04f, -4.175946086e-04f, -4.177134936e-04f, -4.178316480e-04f, -4.179490718e-04f, -4.180657648e-04f, -4.181817268e-04f, -4.182969578e-04f,
+-4.184114575e-04f, -4.185252258e-04f, -4.186382626e-04f, -4.187505677e-04f, -4.188621410e-04f, -4.189729823e-04f, -4.190830915e-04f, -4.191924685e-04f, -4.193011131e-04f, -4.194090252e-04f,
+-4.195162046e-04f, -4.196226513e-04f, -4.197283650e-04f, -4.198333457e-04f, -4.199375932e-04f, -4.200411074e-04f, -4.201438881e-04f, -4.202459353e-04f, -4.203472488e-04f, -4.204478285e-04f,
+-4.205476743e-04f, -4.206467860e-04f, -4.207451635e-04f, -4.208428067e-04f, -4.209397156e-04f, -4.210358899e-04f, -4.211313295e-04f, -4.212260344e-04f, -4.213200045e-04f, -4.214132395e-04f,
+-4.215057395e-04f, -4.215975043e-04f, -4.216885338e-04f, -4.217788278e-04f, -4.218683864e-04f, -4.219572093e-04f, -4.220452965e-04f, -4.221326479e-04f, -4.222192634e-04f, -4.223051429e-04f,
+-4.223902862e-04f, -4.224746934e-04f, -4.225583642e-04f, -4.226412987e-04f, -4.227234966e-04f, -4.228049580e-04f, -4.228856827e-04f, -4.229656707e-04f, -4.230449218e-04f, -4.231234360e-04f,
+-4.232012132e-04f, -4.232782532e-04f, -4.233545561e-04f, -4.234301218e-04f, -4.235049501e-04f, -4.235790410e-04f, -4.236523944e-04f, -4.237250103e-04f, -4.237968885e-04f, -4.238680290e-04f,
+-4.239384317e-04f, -4.240080966e-04f, -4.240770236e-04f, -4.241452125e-04f, -4.242126634e-04f, -4.242793762e-04f, -4.243453508e-04f, -4.244105872e-04f, -4.244750853e-04f, -4.245388450e-04f,
+-4.246018663e-04f, -4.246641491e-04f, -4.247256933e-04f, -4.247864990e-04f, -4.248465660e-04f, -4.249058943e-04f, -4.249644839e-04f, -4.250223347e-04f, -4.250794467e-04f, -4.251358197e-04f,
+-4.251914538e-04f, -4.252463490e-04f, -4.253005051e-04f, -4.253539221e-04f, -4.254066001e-04f, -4.254585389e-04f, -4.255097385e-04f, -4.255601989e-04f, -4.256099200e-04f, -4.256589019e-04f,
+-4.257071444e-04f, -4.257546476e-04f, -4.258014113e-04f, -4.258474357e-04f, -4.258927207e-04f, -4.259372661e-04f, -4.259810721e-04f, -4.260241386e-04f, -4.260664655e-04f, -4.261080528e-04f,
+-4.261489006e-04f, -4.261890088e-04f, -4.262283774e-04f, -4.262670063e-04f, -4.263048956e-04f, -4.263420452e-04f, -4.263784552e-04f, -4.264141255e-04f, -4.264490560e-04f, -4.264832469e-04f,
+-4.265166981e-04f, -4.265494096e-04f, -4.265813813e-04f, -4.266126133e-04f, -4.266431056e-04f, -4.266728581e-04f, -4.267018710e-04f, -4.267301441e-04f, -4.267576775e-04f, -4.267844712e-04f,
+-4.268105251e-04f, -4.268358394e-04f, -4.268604140e-04f, -4.268842488e-04f, -4.269073441e-04f, -4.269296996e-04f, -4.269513155e-04f, -4.269721918e-04f, -4.269923284e-04f, -4.270117254e-04f,
+-4.270303829e-04f, -4.270483008e-04f, -4.270654791e-04f, -4.270819179e-04f, -4.270976173e-04f, -4.271125771e-04f, -4.271267975e-04f, -4.271402785e-04f, -4.271530201e-04f, -4.271650224e-04f,
+-4.271762853e-04f, -4.271868089e-04f, -4.271965932e-04f, -4.272056383e-04f, -4.272139443e-04f, -4.272215110e-04f, -4.272283387e-04f, -4.272344273e-04f, -4.272397768e-04f, -4.272443874e-04f,
+-4.272482590e-04f, -4.272513917e-04f, -4.272537855e-04f, -4.272554406e-04f, -4.272563569e-04f, -4.272565344e-04f, -4.272559733e-04f, -4.272546737e-04f, -4.272526354e-04f, -4.272498587e-04f,
+-4.272463435e-04f, -4.272420900e-04f, -4.272370981e-04f, -4.272313679e-04f, -4.272248996e-04f, -4.272176931e-04f, -4.272097486e-04f, -4.272010661e-04f, -4.271916456e-04f, -4.271814872e-04f,
+-4.271705911e-04f, -4.271589572e-04f, -4.271465856e-04f, -4.271334765e-04f, -4.271196298e-04f, -4.271050458e-04f, -4.270897243e-04f, -4.270736656e-04f, -4.270568697e-04f, -4.270393366e-04f,
+-4.270210666e-04f, -4.270020595e-04f, -4.269823156e-04f, -4.269618350e-04f, -4.269406176e-04f, -4.269186636e-04f, -4.268959731e-04f, -4.268725462e-04f, -4.268483829e-04f, -4.268234834e-04f,
+-4.267978477e-04f, -4.267714760e-04f, -4.267443683e-04f, -4.267165248e-04f, -4.266879456e-04f, -4.266586306e-04f, -4.266285802e-04f, -4.265977942e-04f, -4.265662730e-04f, -4.265340165e-04f,
+-4.265010248e-04f, -4.264672982e-04f, -4.264328366e-04f, -4.263976402e-04f, -4.263617092e-04f, -4.263250436e-04f, -4.262876435e-04f, -4.262495091e-04f, -4.262106404e-04f, -4.261710377e-04f,
+-4.261307009e-04f, -4.260896303e-04f, -4.260478260e-04f, -4.260052880e-04f, -4.259620165e-04f, -4.259180117e-04f, -4.258732737e-04f, -4.258278025e-04f, -4.257815983e-04f, -4.257346613e-04f,
+-4.256869916e-04f, -4.256385893e-04f, -4.255894546e-04f, -4.255395875e-04f, -4.254889883e-04f, -4.254376570e-04f, -4.253855939e-04f, -4.253327990e-04f, -4.252792725e-04f, -4.252250145e-04f,
+-4.251700252e-04f, -4.251143047e-04f, -4.250578532e-04f, -4.250006709e-04f, -4.249427578e-04f, -4.248841141e-04f, -4.248247400e-04f, -4.247646356e-04f, -4.247038011e-04f, -4.246422367e-04f,
+-4.245799425e-04f, -4.245169186e-04f, -4.244531652e-04f, -4.243886826e-04f, -4.243234707e-04f, -4.242575299e-04f, -4.241908603e-04f, -4.241234620e-04f, -4.240553352e-04f, -4.239864801e-04f,
+-4.239168968e-04f, -4.238465856e-04f, -4.237755465e-04f, -4.237037798e-04f, -4.236312857e-04f, -4.235580642e-04f, -4.234841157e-04f, -4.234094402e-04f, -4.233340380e-04f, -4.232579092e-04f,
+-4.231810541e-04f, -4.231034727e-04f, -4.230251654e-04f, -4.229461322e-04f, -4.228663733e-04f, -4.227858891e-04f, -4.227046795e-04f, -4.226227449e-04f, -4.225400854e-04f, -4.224567013e-04f,
+-4.223725926e-04f, -4.222877597e-04f, -4.222022027e-04f, -4.221159218e-04f, -4.220289171e-04f, -4.219411890e-04f, -4.218527377e-04f, -4.217635632e-04f, -4.216736658e-04f, -4.215830458e-04f,
+-4.214917033e-04f, -4.213996385e-04f, -4.213068517e-04f, -4.212133431e-04f, -4.211191128e-04f, -4.210241611e-04f, -4.209284883e-04f, -4.208320944e-04f, -4.207349798e-04f, -4.206371446e-04f,
+-4.205385891e-04f, -4.204393136e-04f, -4.203393181e-04f, -4.202386030e-04f, -4.201371684e-04f, -4.200350147e-04f, -4.199321419e-04f, -4.198285504e-04f, -4.197242404e-04f, -4.196192121e-04f,
+-4.195134658e-04f, -4.194070016e-04f, -4.192998198e-04f, -4.191919207e-04f, -4.190833044e-04f, -4.189739713e-04f, -4.188639216e-04f, -4.187531554e-04f, -4.186416731e-04f, -4.185294748e-04f,
+-4.184165609e-04f, -4.183029316e-04f, -4.181885871e-04f, -4.180735277e-04f, -4.179577536e-04f, -4.178412650e-04f, -4.177240623e-04f, -4.176061457e-04f, -4.174875154e-04f, -4.173681716e-04f,
+-4.172481148e-04f, -4.171273450e-04f, -4.170058625e-04f, -4.168836677e-04f, -4.167607608e-04f, -4.166371420e-04f, -4.165128116e-04f, -4.163877699e-04f, -4.162620171e-04f, -4.161355535e-04f,
+-4.160083794e-04f, -4.158804951e-04f, -4.157519007e-04f, -4.156225967e-04f, -4.154925832e-04f, -4.153618605e-04f, -4.152304290e-04f, -4.150982888e-04f, -4.149654403e-04f, -4.148318838e-04f,
+-4.146976194e-04f, -4.145626476e-04f, -4.144269686e-04f, -4.142905826e-04f, -4.141534901e-04f, -4.140156911e-04f, -4.138771861e-04f, -4.137379753e-04f, -4.135980591e-04f, -4.134574376e-04f,
+-4.133161112e-04f, -4.131740803e-04f, -4.130313450e-04f, -4.128879057e-04f, -4.127437627e-04f, -4.125989163e-04f, -4.124533667e-04f, -4.123071144e-04f, -4.121601595e-04f, -4.120125024e-04f,
+-4.118641434e-04f, -4.117150828e-04f, -4.115653209e-04f, -4.114148580e-04f, -4.112636945e-04f, -4.111118306e-04f, -4.109592666e-04f, -4.108060029e-04f, -4.106520397e-04f, -4.104973775e-04f,
+-4.103420164e-04f, -4.101859569e-04f, -4.100291992e-04f, -4.098717437e-04f, -4.097135907e-04f, -4.095547405e-04f, -4.093951934e-04f, -4.092349497e-04f, -4.090740099e-04f, -4.089123741e-04f,
+-4.087500428e-04f, -4.085870163e-04f, -4.084232948e-04f, -4.082588788e-04f, -4.080937685e-04f, -4.079279644e-04f, -4.077614667e-04f, -4.075942757e-04f, -4.074263918e-04f, -4.072578154e-04f,
+-4.070885468e-04f, -4.069185863e-04f, -4.067479343e-04f, -4.065765911e-04f, -4.064045570e-04f, -4.062318325e-04f, -4.060584178e-04f, -4.058843133e-04f, -4.057095194e-04f, -4.055340363e-04f,
+-4.053578645e-04f, -4.051810044e-04f, -4.050034561e-04f, -4.048252202e-04f, -4.046462970e-04f, -4.044666868e-04f, -4.042863900e-04f, -4.041054069e-04f, -4.039237379e-04f, -4.037413835e-04f,
+-4.035583438e-04f, -4.033746194e-04f, -4.031902105e-04f, -4.030051175e-04f, -4.028193409e-04f, -4.026328809e-04f, -4.024457380e-04f, -4.022579125e-04f, -4.020694047e-04f, -4.018802152e-04f,
+-4.016903441e-04f, -4.014997920e-04f, -4.013085592e-04f, -4.011166460e-04f, -4.009240529e-04f, -4.007307802e-04f, -4.005368283e-04f, -4.003421976e-04f, -4.001468885e-04f, -3.999509013e-04f,
+-3.997542365e-04f, -3.995568944e-04f, -3.993588755e-04f, -3.991601801e-04f, -3.989608086e-04f, -3.987607614e-04f, -3.985600388e-04f, -3.983586414e-04f, -3.981565695e-04f, -3.979538234e-04f,
+-3.977504036e-04f, -3.975463105e-04f, -3.973415444e-04f, -3.971361059e-04f, -3.969299952e-04f, -3.967232128e-04f, -3.965157591e-04f, -3.963076345e-04f, -3.960988394e-04f, -3.958893742e-04f,
+-3.956792394e-04f, -3.954684352e-04f, -3.952569622e-04f, -3.950448208e-04f, -3.948320113e-04f, -3.946185343e-04f, -3.944043900e-04f, -3.941895789e-04f, -3.939741015e-04f, -3.937579581e-04f,
+-3.935411492e-04f, -3.933236752e-04f, -3.931055366e-04f, -3.928867336e-04f, -3.926672669e-04f, -3.924471367e-04f, -3.922263436e-04f, -3.920048879e-04f, -3.917827701e-04f, -3.915599906e-04f,
+-3.913365499e-04f, -3.911124483e-04f, -3.908876863e-04f, -3.906622644e-04f, -3.904361830e-04f, -3.902094425e-04f, -3.899820433e-04f, -3.897539860e-04f, -3.895252709e-04f, -3.892958984e-04f,
+-3.890658691e-04f, -3.888351834e-04f, -3.886038417e-04f, -3.883718444e-04f, -3.881391920e-04f, -3.879058850e-04f, -3.876719238e-04f, -3.874373089e-04f, -3.872020406e-04f, -3.869661195e-04f,
+-3.867295461e-04f, -3.864923206e-04f, -3.862544438e-04f, -3.860159159e-04f, -3.857767374e-04f, -3.855369088e-04f, -3.852964306e-04f, -3.850553033e-04f, -3.848135272e-04f, -3.845711028e-04f,
+-3.843280307e-04f, -3.840843112e-04f, -3.838399449e-04f, -3.835949322e-04f, -3.833492736e-04f, -3.831029695e-04f, -3.828560205e-04f, -3.826084269e-04f, -3.823601893e-04f, -3.821113082e-04f,
+-3.818617840e-04f, -3.816116172e-04f, -3.813608082e-04f, -3.811093577e-04f, -3.808572659e-04f, -3.806045335e-04f, -3.803511608e-04f, -3.800971485e-04f, -3.798424969e-04f, -3.795872065e-04f,
+-3.793312779e-04f, -3.790747115e-04f, -3.788175078e-04f, -3.785596674e-04f, -3.783011906e-04f, -3.780420780e-04f, -3.777823301e-04f, -3.775219473e-04f, -3.772609302e-04f, -3.769992793e-04f,
+-3.767369950e-04f, -3.764740779e-04f, -3.762105285e-04f, -3.759463472e-04f, -3.756815345e-04f, -3.754160910e-04f, -3.751500172e-04f, -3.748833136e-04f, -3.746159806e-04f, -3.743480188e-04f,
+-3.740794287e-04f, -3.738102108e-04f, -3.735403656e-04f, -3.732698936e-04f, -3.729987953e-04f, -3.727270713e-04f, -3.724547221e-04f, -3.721817481e-04f, -3.719081499e-04f, -3.716339280e-04f,
+-3.713590829e-04f, -3.710836151e-04f, -3.708075253e-04f, -3.705308138e-04f, -3.702534812e-04f, -3.699755280e-04f, -3.696969548e-04f, -3.694177621e-04f, -3.691379503e-04f, -3.688575201e-04f,
+-3.685764720e-04f, -3.682948064e-04f, -3.680125240e-04f, -3.677296252e-04f, -3.674461106e-04f, -3.671619807e-04f, -3.668772361e-04f, -3.665918773e-04f, -3.663059047e-04f, -3.660193191e-04f,
+-3.657321208e-04f, -3.654443105e-04f, -3.651558887e-04f, -3.648668559e-04f, -3.645772126e-04f, -3.642869595e-04f, -3.639960970e-04f, -3.637046258e-04f, -3.634125462e-04f, -3.631198590e-04f,
+-3.628265646e-04f, -3.625326636e-04f, -3.622381566e-04f, -3.619430440e-04f, -3.616473265e-04f, -3.613510046e-04f, -3.610540789e-04f, -3.607565498e-04f, -3.604584181e-04f, -3.601596841e-04f,
+-3.598603486e-04f, -3.595604120e-04f, -3.592598750e-04f, -3.589587379e-04f, -3.586570016e-04f, -3.583546664e-04f, -3.580517330e-04f, -3.577482019e-04f, -3.574440737e-04f, -3.571393490e-04f,
+-3.568340283e-04f, -3.565281123e-04f, -3.562216013e-04f, -3.559144962e-04f, -3.556067973e-04f, -3.552985054e-04f, -3.549896209e-04f, -3.546801445e-04f, -3.543700767e-04f, -3.540594180e-04f,
+-3.537481692e-04f, -3.534363307e-04f, -3.531239032e-04f, -3.528108872e-04f, -3.524972832e-04f, -3.521830920e-04f, -3.518683140e-04f, -3.515529499e-04f, -3.512370002e-04f, -3.509204656e-04f,
+-3.506033466e-04f, -3.502856438e-04f, -3.499673578e-04f, -3.496484892e-04f, -3.493290385e-04f, -3.490090065e-04f, -3.486883936e-04f, -3.483672004e-04f, -3.480454277e-04f, -3.477230759e-04f,
+-3.474001456e-04f, -3.470766375e-04f, -3.467525522e-04f, -3.464278902e-04f, -3.461026522e-04f, -3.457768388e-04f, -3.454504505e-04f, -3.451234880e-04f, -3.447959518e-04f, -3.444678427e-04f,
+-3.441391611e-04f, -3.438099078e-04f, -3.434800832e-04f, -3.431496881e-04f, -3.428187230e-04f, -3.424871886e-04f, -3.421550854e-04f, -3.418224141e-04f, -3.414891752e-04f, -3.411553695e-04f,
+-3.408209975e-04f, -3.404860598e-04f, -3.401505571e-04f, -3.398144900e-04f, -3.394778591e-04f, -3.391406650e-04f, -3.388029083e-04f, -3.384645897e-04f, -3.381257098e-04f, -3.377862692e-04f,
+-3.374462686e-04f, -3.371057085e-04f, -3.367645897e-04f, -3.364229126e-04f, -3.360806781e-04f, -3.357378866e-04f, -3.353945388e-04f, -3.350506354e-04f, -3.347061770e-04f, -3.343611642e-04f,
+-3.340155976e-04f, -3.336694780e-04f, -3.333228059e-04f, -3.329755820e-04f, -3.326278068e-04f, -3.322794812e-04f, -3.319306056e-04f, -3.315811807e-04f, -3.312312073e-04f, -3.308806858e-04f,
+-3.305296170e-04f, -3.301780016e-04f, -3.298258400e-04f, -3.294731331e-04f, -3.291198815e-04f, -3.287660857e-04f, -3.284117466e-04f, -3.280568646e-04f, -3.277014404e-04f, -3.273454748e-04f,
+-3.269889683e-04f, -3.266319217e-04f, -3.262743355e-04f, -3.259162105e-04f, -3.255575472e-04f, -3.251983464e-04f, -3.248386087e-04f, -3.244783348e-04f, -3.241175252e-04f, -3.237561808e-04f,
+-3.233943021e-04f, -3.230318899e-04f, -3.226689447e-04f, -3.223054672e-04f, -3.219414582e-04f, -3.215769182e-04f, -3.212118480e-04f, -3.208462481e-04f, -3.204801194e-04f, -3.201134624e-04f,
+-3.197462778e-04f, -3.193785664e-04f, -3.190103287e-04f, -3.186415654e-04f, -3.182722772e-04f, -3.179024649e-04f, -3.175321290e-04f, -3.171612702e-04f, -3.167898893e-04f, -3.164179869e-04f,
+-3.160455637e-04f, -3.156726203e-04f, -3.152991575e-04f, -3.149251758e-04f, -3.145506762e-04f, -3.141756590e-04f, -3.138001252e-04f, -3.134240754e-04f, -3.130475102e-04f, -3.126704303e-04f,
+-3.122928364e-04f, -3.119147293e-04f, -3.115361096e-04f, -3.111569780e-04f, -3.107773351e-04f, -3.103971818e-04f, -3.100165186e-04f, -3.096353463e-04f, -3.092536656e-04f, -3.088714771e-04f,
+-3.084887815e-04f, -3.081055797e-04f, -3.077218721e-04f, -3.073376597e-04f, -3.069529429e-04f, -3.065677227e-04f, -3.061819996e-04f, -3.057957743e-04f, -3.054090476e-04f, -3.050218202e-04f,
+-3.046340927e-04f, -3.042458659e-04f, -3.038571405e-04f, -3.034679171e-04f, -3.030781966e-04f, -3.026879796e-04f, -3.022972668e-04f, -3.019060589e-04f, -3.015143566e-04f, -3.011221607e-04f,
+-3.007294719e-04f, -3.003362908e-04f, -2.999426183e-04f, -2.995484549e-04f, -2.991538015e-04f, -2.987586587e-04f, -2.983630272e-04f, -2.979669078e-04f, -2.975703013e-04f, -2.971732082e-04f,
+-2.967756294e-04f, -2.963775655e-04f, -2.959790173e-04f, -2.955799855e-04f, -2.951804708e-04f, -2.947804740e-04f, -2.943799958e-04f, -2.939790369e-04f, -2.935775980e-04f, -2.931756798e-04f,
+-2.927732832e-04f, -2.923704088e-04f, -2.919670573e-04f, -2.915632295e-04f, -2.911589261e-04f, -2.907541479e-04f, -2.903488955e-04f, -2.899431697e-04f, -2.895369713e-04f, -2.891303010e-04f,
+-2.887231595e-04f, -2.883155475e-04f, -2.879074659e-04f, -2.874989152e-04f, -2.870898964e-04f, -2.866804100e-04f, -2.862704570e-04f, -2.858600379e-04f, -2.854491535e-04f, -2.850378046e-04f,
+-2.846259920e-04f, -2.842137163e-04f, -2.838009783e-04f, -2.833877788e-04f, -2.829741186e-04f, -2.825599982e-04f, -2.821454186e-04f, -2.817303804e-04f, -2.813148844e-04f, -2.808989314e-04f,
+-2.804825221e-04f, -2.800656573e-04f, -2.796483376e-04f, -2.792305640e-04f, -2.788123370e-04f, -2.783936576e-04f, -2.779745263e-04f, -2.775549441e-04f, -2.771349115e-04f, -2.767144295e-04f,
+-2.762934988e-04f, -2.758721201e-04f, -2.754502941e-04f, -2.750280217e-04f, -2.746053037e-04f, -2.741821406e-04f, -2.737585334e-04f, -2.733344828e-04f, -2.729099896e-04f, -2.724850545e-04f,
+-2.720596783e-04f, -2.716338617e-04f, -2.712076055e-04f, -2.707809106e-04f, -2.703537776e-04f, -2.699262073e-04f, -2.694982006e-04f, -2.690697581e-04f, -2.686408806e-04f, -2.682115690e-04f,
+-2.677818239e-04f, -2.673516462e-04f, -2.669210367e-04f, -2.664899961e-04f, -2.660585251e-04f, -2.656266246e-04f, -2.651942954e-04f, -2.647615382e-04f, -2.643283537e-04f, -2.638947429e-04f,
+-2.634607064e-04f, -2.630262450e-04f, -2.625913596e-04f, -2.621560508e-04f, -2.617203196e-04f, -2.612841666e-04f, -2.608475926e-04f, -2.604105985e-04f, -2.599731850e-04f, -2.595353529e-04f,
+-2.590971030e-04f, -2.586584361e-04f, -2.582193530e-04f, -2.577798544e-04f, -2.573399411e-04f, -2.568996140e-04f, -2.564588739e-04f, -2.560177214e-04f, -2.555761574e-04f, -2.551341828e-04f,
+-2.546917982e-04f, -2.542490045e-04f, -2.538058026e-04f, -2.533621930e-04f, -2.529181768e-04f, -2.524737546e-04f, -2.520289273e-04f, -2.515836957e-04f, -2.511380605e-04f, -2.506920226e-04f,
+-2.502455828e-04f, -2.497987418e-04f, -2.493515005e-04f, -2.489038597e-04f, -2.484558201e-04f, -2.480073826e-04f, -2.475585479e-04f, -2.471093170e-04f, -2.466596905e-04f, -2.462096693e-04f,
+-2.457592542e-04f, -2.453084461e-04f, -2.448572456e-04f, -2.444056536e-04f, -2.439536710e-04f, -2.435012985e-04f, -2.430485369e-04f, -2.425953871e-04f, -2.421418499e-04f, -2.416879260e-04f,
+-2.412336164e-04f, -2.407789217e-04f, -2.403238428e-04f, -2.398683806e-04f, -2.394125358e-04f, -2.389563093e-04f, -2.384997019e-04f, -2.380427143e-04f, -2.375853475e-04f, -2.371276022e-04f,
+-2.366694792e-04f, -2.362109794e-04f, -2.357521036e-04f, -2.352928525e-04f, -2.348332271e-04f, -2.343732282e-04f, -2.339128565e-04f, -2.334521129e-04f, -2.329909982e-04f, -2.325295133e-04f,
+-2.320676589e-04f, -2.316054359e-04f, -2.311428451e-04f, -2.306798873e-04f, -2.302165634e-04f, -2.297528742e-04f, -2.292888205e-04f, -2.288244032e-04f, -2.283596230e-04f, -2.278944808e-04f,
+-2.274289775e-04f, -2.269631138e-04f, -2.264968906e-04f, -2.260303088e-04f, -2.255633691e-04f, -2.250960723e-04f, -2.246284195e-04f, -2.241604112e-04f, -2.236920485e-04f, -2.232233321e-04f,
+-2.227542628e-04f, -2.222848416e-04f, -2.218150692e-04f, -2.213449464e-04f, -2.208744742e-04f, -2.204036533e-04f, -2.199324846e-04f, -2.194609690e-04f, -2.189891071e-04f, -2.185169000e-04f,
+-2.180443485e-04f, -2.175714533e-04f, -2.170982154e-04f, -2.166246355e-04f, -2.161507146e-04f, -2.156764534e-04f, -2.152018528e-04f, -2.147269137e-04f, -2.142516369e-04f, -2.137760232e-04f,
+-2.133000734e-04f, -2.128237886e-04f, -2.123471694e-04f, -2.118702167e-04f, -2.113929314e-04f, -2.109153143e-04f, -2.104373663e-04f, -2.099590882e-04f, -2.094804809e-04f, -2.090015453e-04f,
+-2.085222821e-04f, -2.080426922e-04f, -2.075627765e-04f, -2.070825358e-04f, -2.066019710e-04f, -2.061210830e-04f, -2.056398726e-04f, -2.051583406e-04f, -2.046764879e-04f, -2.041943154e-04f,
+-2.037118239e-04f, -2.032290142e-04f, -2.027458873e-04f, -2.022624440e-04f, -2.017786852e-04f, -2.012946116e-04f, -2.008102242e-04f, -2.003255238e-04f, -1.998405114e-04f, -1.993551876e-04f,
+-1.988695535e-04f, -1.983836098e-04f, -1.978973575e-04f, -1.974107974e-04f, -1.969239303e-04f, -1.964367571e-04f, -1.959492788e-04f, -1.954614961e-04f, -1.949734098e-04f, -1.944850210e-04f,
+-1.939963304e-04f, -1.935073390e-04f, -1.930180475e-04f, -1.925284568e-04f, -1.920385679e-04f, -1.915483816e-04f, -1.910578987e-04f, -1.905671201e-04f, -1.900760467e-04f, -1.895846794e-04f,
+-1.890930190e-04f, -1.886010664e-04f, -1.881088224e-04f, -1.876162880e-04f, -1.871234641e-04f, -1.866303514e-04f, -1.861369509e-04f, -1.856432634e-04f, -1.851492898e-04f, -1.846550310e-04f,
+-1.841604879e-04f, -1.836656613e-04f, -1.831705521e-04f, -1.826751612e-04f, -1.821794894e-04f, -1.816835377e-04f, -1.811873069e-04f, -1.806907979e-04f, -1.801940116e-04f, -1.796969488e-04f,
+-1.791996105e-04f, -1.787019975e-04f, -1.782041106e-04f, -1.777059508e-04f, -1.772075190e-04f, -1.767088160e-04f, -1.762098427e-04f, -1.757106000e-04f, -1.752110888e-04f, -1.747113100e-04f,
+-1.742112644e-04f, -1.737109529e-04f, -1.732103764e-04f, -1.727095358e-04f, -1.722084320e-04f, -1.717070659e-04f, -1.712054383e-04f, -1.707035502e-04f, -1.702014023e-04f, -1.696989957e-04f,
+-1.691963312e-04f, -1.686934096e-04f, -1.681902320e-04f, -1.676867991e-04f, -1.671831118e-04f, -1.666791711e-04f, -1.661749778e-04f, -1.656705328e-04f, -1.651658370e-04f, -1.646608913e-04f,
+-1.641556966e-04f, -1.636502538e-04f, -1.631445638e-04f, -1.626386274e-04f, -1.621324456e-04f, -1.616260192e-04f, -1.611193491e-04f, -1.606124363e-04f, -1.601052816e-04f, -1.595978860e-04f,
+-1.590902502e-04f, -1.585823753e-04f, -1.580742620e-04f, -1.575659114e-04f, -1.570573242e-04f, -1.565485015e-04f, -1.560394440e-04f, -1.555301528e-04f, -1.550206286e-04f, -1.545108724e-04f,
+-1.540008850e-04f, -1.534906675e-04f, -1.529802206e-04f, -1.524695453e-04f, -1.519586425e-04f, -1.514475130e-04f, -1.509361578e-04f, -1.504245778e-04f, -1.499127739e-04f, -1.494007469e-04f,
+-1.488884978e-04f, -1.483760275e-04f, -1.478633368e-04f, -1.473504268e-04f, -1.468372982e-04f, -1.463239520e-04f, -1.458103891e-04f, -1.452966104e-04f, -1.447826168e-04f, -1.442684092e-04f,
+-1.437539885e-04f, -1.432393556e-04f, -1.427245114e-04f, -1.422094568e-04f, -1.416941928e-04f, -1.411787202e-04f, -1.406630399e-04f, -1.401471529e-04f, -1.396310600e-04f, -1.391147622e-04f,
+-1.385982603e-04f, -1.380815553e-04f, -1.375646481e-04f, -1.370475396e-04f, -1.365302306e-04f, -1.360127222e-04f, -1.354950152e-04f, -1.349771105e-04f, -1.344590091e-04f, -1.339407117e-04f,
+-1.334222195e-04f, -1.329035332e-04f, -1.323846537e-04f, -1.318655821e-04f, -1.313463191e-04f, -1.308268658e-04f, -1.303072230e-04f, -1.297873916e-04f, -1.292673725e-04f, -1.287471667e-04f,
+-1.282267751e-04f, -1.277061985e-04f, -1.271854380e-04f, -1.266644943e-04f, -1.261433685e-04f, -1.256220614e-04f, -1.251005740e-04f, -1.245789071e-04f, -1.240570617e-04f, -1.235350387e-04f,
+-1.230128390e-04f, -1.224904635e-04f, -1.219679132e-04f, -1.214451889e-04f, -1.209222916e-04f, -1.203992222e-04f, -1.198759816e-04f, -1.193525707e-04f, -1.188289904e-04f, -1.183052417e-04f,
+-1.177813255e-04f, -1.172572427e-04f, -1.167329942e-04f, -1.162085809e-04f, -1.156840037e-04f, -1.151592637e-04f, -1.146343616e-04f, -1.141092984e-04f, -1.135840750e-04f, -1.130586924e-04f,
+-1.125331514e-04f, -1.120074530e-04f, -1.114815982e-04f, -1.109555877e-04f, -1.104294226e-04f, -1.099031038e-04f, -1.093766321e-04f, -1.088500085e-04f, -1.083232340e-04f, -1.077963094e-04f,
+-1.072692357e-04f, -1.067420138e-04f, -1.062146446e-04f, -1.056871290e-04f, -1.051594680e-04f, -1.046316625e-04f, -1.041037134e-04f, -1.035756216e-04f, -1.030473881e-04f, -1.025190137e-04f,
+-1.019904995e-04f, -1.014618462e-04f, -1.009330550e-04f, -1.004041265e-04f, -9.987506191e-05f, -9.934586201e-05f, -9.881652775e-05f, -9.828706006e-05f, -9.775745987e-05f, -9.722772809e-05f,
+-9.669786566e-05f, -9.616787350e-05f, -9.563775253e-05f, -9.510750369e-05f, -9.457712790e-05f, -9.404662608e-05f, -9.351599915e-05f, -9.298524806e-05f, -9.245437372e-05f, -9.192337706e-05f,
+-9.139225900e-05f, -9.086102048e-05f, -9.032966242e-05f, -8.979818574e-05f, -8.926659139e-05f, -8.873488027e-05f, -8.820305333e-05f, -8.767111148e-05f, -8.713905566e-05f, -8.660688680e-05f,
+-8.607460582e-05f, -8.554221365e-05f, -8.500971122e-05f, -8.447709946e-05f, -8.394437929e-05f, -8.341155165e-05f, -8.287861747e-05f, -8.234557767e-05f, -8.181243318e-05f, -8.127918494e-05f,
+-8.074583386e-05f, -8.021238089e-05f, -7.967882695e-05f, -7.914517297e-05f, -7.861141988e-05f, -7.807756862e-05f, -7.754362010e-05f, -7.700957526e-05f, -7.647543504e-05f, -7.594120036e-05f,
+-7.540687215e-05f, -7.487245134e-05f, -7.433793887e-05f, -7.380333566e-05f, -7.326864264e-05f, -7.273386076e-05f, -7.219899093e-05f, -7.166403408e-05f, -7.112899116e-05f, -7.059386309e-05f,
+-7.005865080e-05f, -6.952335522e-05f, -6.898797729e-05f, -6.845251793e-05f, -6.791697809e-05f, -6.738135868e-05f, -6.684566065e-05f, -6.630988492e-05f, -6.577403242e-05f, -6.523810410e-05f,
+-6.470210087e-05f, -6.416602368e-05f, -6.362987345e-05f, -6.309365112e-05f, -6.255735761e-05f, -6.202099387e-05f, -6.148456082e-05f, -6.094805940e-05f, -6.041149054e-05f, -5.987485517e-05f,
+-5.933815422e-05f, -5.880138863e-05f, -5.826455933e-05f, -5.772766726e-05f, -5.719071333e-05f, -5.665369850e-05f, -5.611662369e-05f, -5.557948983e-05f, -5.504229786e-05f, -5.450504871e-05f,
+-5.396774331e-05f, -5.343038260e-05f, -5.289296751e-05f, -5.235549898e-05f, -5.181797792e-05f, -5.128040529e-05f, -5.074278201e-05f, -5.020510901e-05f, -4.966738724e-05f, -4.912961761e-05f,
+-4.859180108e-05f, -4.805393856e-05f, -4.751603099e-05f, -4.697807931e-05f, -4.644008444e-05f, -4.590204733e-05f, -4.536396891e-05f, -4.482585010e-05f, -4.428769185e-05f, -4.374949508e-05f,
+-4.321126073e-05f, -4.267298973e-05f, -4.213468302e-05f, -4.159634153e-05f, -4.105796619e-05f, -4.051955794e-05f, -3.998111771e-05f, -3.944264643e-05f, -3.890414503e-05f, -3.836561446e-05f,
+-3.782705564e-05f, -3.728846950e-05f, -3.674985698e-05f, -3.621121902e-05f, -3.567255654e-05f, -3.513387048e-05f, -3.459516178e-05f, -3.405643135e-05f, -3.351768015e-05f, -3.297890910e-05f,
+-3.244011913e-05f, -3.190131118e-05f, -3.136248618e-05f, -3.082364507e-05f, -3.028478877e-05f, -2.974591822e-05f, -2.920703435e-05f, -2.866813810e-05f, -2.812923039e-05f, -2.759031217e-05f,
+-2.705138436e-05f, -2.651244789e-05f, -2.597350370e-05f, -2.543455273e-05f, -2.489559589e-05f, -2.435663414e-05f, -2.381766839e-05f, -2.327869958e-05f, -2.273972864e-05f, -2.220075651e-05f,
+-2.166178411e-05f, -2.112281239e-05f, -2.058384226e-05f, -2.004487467e-05f, -1.950591054e-05f, -1.896695080e-05f, -1.842799640e-05f, -1.788904825e-05f, -1.735010730e-05f, -1.681117447e-05f,
+-1.627225069e-05f, -1.573333689e-05f, -1.519443402e-05f, -1.465554299e-05f, -1.411666474e-05f, -1.357780019e-05f, -1.303895029e-05f, -1.250011596e-05f, -1.196129813e-05f, -1.142249773e-05f,
+-1.088371570e-05f, -1.034495296e-05f, -9.806210440e-06f, -9.267489075e-06f, -8.728789794e-06f, -8.190113526e-06f, -7.651461202e-06f, -7.112833751e-06f, -6.574232103e-06f, -6.035657188e-06f,
+-5.497109934e-06f, -4.958591271e-06f, -4.420102129e-06f, -3.881643436e-06f, -3.343216121e-06f, -2.804821114e-06f, -2.266459342e-06f, -1.728131735e-06f, -1.189839222e-06f, -6.515827292e-07f,
+-1.133631863e-07f, 4.248184788e-07f, 9.629613383e-07f, 1.501064464e-06f, 2.039126929e-06f, 2.577147805e-06f, 3.115126165e-06f, 3.653061082e-06f, 4.190951628e-06f, 4.728796876e-06f,
+5.266595900e-06f, 5.804347772e-06f, 6.342051567e-06f, 6.879706358e-06f, 7.417311219e-06f, 7.954865223e-06f, 8.492367444e-06f, 9.029816958e-06f, 9.567212837e-06f, 1.010455416e-05f,
+1.064183999e-05f, 1.117906942e-05f, 1.171624151e-05f, 1.225335534e-05f, 1.279040999e-05f, 1.332740452e-05f, 1.386433803e-05f, 1.440120957e-05f, 1.493801824e-05f, 1.547476310e-05f,
+1.601144323e-05f, 1.654805771e-05f, 1.708460561e-05f, 1.762108602e-05f, 1.815749800e-05f, 1.869384064e-05f, 1.923011301e-05f, 1.976631419e-05f, 2.030244326e-05f, 2.083849930e-05f,
+2.137448138e-05f, 2.191038859e-05f, 2.244621999e-05f, 2.298197468e-05f, 2.351765173e-05f, 2.405325021e-05f, 2.458876922e-05f, 2.512420782e-05f, 2.565956510e-05f, 2.619484013e-05f,
+2.673003201e-05f, 2.726513980e-05f, 2.780016259e-05f, 2.833509946e-05f, 2.886994949e-05f, 2.940471176e-05f, 2.993938536e-05f, 3.047396936e-05f, 3.100846284e-05f, 3.154286490e-05f,
+3.207717461e-05f, 3.261139105e-05f, 3.314551331e-05f, 3.367954047e-05f, 3.421347161e-05f, 3.474730582e-05f, 3.528104217e-05f, 3.581467977e-05f, 3.634821768e-05f, 3.688165499e-05f,
+3.741499079e-05f, 3.794822417e-05f, 3.848135420e-05f, 3.901437998e-05f, 3.954730058e-05f, 4.008011510e-05f, 4.061282262e-05f, 4.114542222e-05f, 4.167791301e-05f, 4.221029405e-05f,
+4.274256444e-05f, 4.327472326e-05f, 4.380676961e-05f, 4.433870257e-05f, 4.487052123e-05f, 4.540222467e-05f, 4.593381199e-05f, 4.646528228e-05f, 4.699663462e-05f, 4.752786811e-05f,
+4.805898183e-05f, 4.858997487e-05f, 4.912084633e-05f, 4.965159529e-05f, 5.018222085e-05f, 5.071272209e-05f, 5.124309811e-05f, 5.177334801e-05f, 5.230347086e-05f, 5.283346577e-05f,
+5.336333183e-05f, 5.389306812e-05f, 5.442267375e-05f, 5.495214781e-05f, 5.548148938e-05f, 5.601069757e-05f, 5.653977147e-05f, 5.706871017e-05f, 5.759751277e-05f, 5.812617836e-05f,
+5.865470604e-05f, 5.918309490e-05f, 5.971134405e-05f, 6.023945257e-05f, 6.076741957e-05f, 6.129524413e-05f, 6.182292537e-05f, 6.235046237e-05f, 6.287785423e-05f, 6.340510006e-05f,
+6.393219894e-05f, 6.445914999e-05f, 6.498595229e-05f, 6.551260495e-05f, 6.603910708e-05f, 6.656545776e-05f, 6.709165609e-05f, 6.761770119e-05f, 6.814359215e-05f, 6.866932807e-05f,
+6.919490806e-05f, 6.972033121e-05f, 7.024559663e-05f, 7.077070343e-05f, 7.129565070e-05f, 7.182043754e-05f, 7.234506307e-05f, 7.286952639e-05f, 7.339382660e-05f, 7.391796280e-05f,
+7.444193411e-05f, 7.496573962e-05f, 7.548937845e-05f, 7.601284969e-05f, 7.653615246e-05f, 7.705928587e-05f, 7.758224901e-05f, 7.810504101e-05f, 7.862766096e-05f, 7.915010797e-05f,
+7.967238116e-05f, 8.019447963e-05f, 8.071640249e-05f, 8.123814885e-05f, 8.175971783e-05f, 8.228110853e-05f, 8.280232006e-05f, 8.332335154e-05f, 8.384420208e-05f, 8.436487078e-05f,
+8.488535677e-05f, 8.540565915e-05f, 8.592577704e-05f, 8.644570956e-05f, 8.696545580e-05f, 8.748501490e-05f, 8.800438596e-05f, 8.852356810e-05f, 8.904256044e-05f, 8.956136209e-05f,
+9.007997217e-05f, 9.059838979e-05f, 9.111661408e-05f, 9.163464414e-05f, 9.215247910e-05f, 9.267011808e-05f, 9.318756019e-05f, 9.370480456e-05f, 9.422185030e-05f, 9.473869653e-05f,
+9.525534237e-05f, 9.577178695e-05f, 9.628802939e-05f, 9.680406880e-05f, 9.731990432e-05f, 9.783553505e-05f, 9.835096013e-05f, 9.886617868e-05f, 9.938118981e-05f, 9.989599267e-05f,
+1.004105864e-04f, 1.009249700e-04f, 1.014391428e-04f, 1.019531037e-04f, 1.024668520e-04f, 1.029803868e-04f, 1.034937072e-04f, 1.040068123e-04f, 1.045197012e-04f, 1.050323732e-04f,
+1.055448272e-04f, 1.060570625e-04f, 1.065690781e-04f, 1.070808733e-04f, 1.075924470e-04f, 1.081037986e-04f, 1.086149270e-04f, 1.091258315e-04f, 1.096365111e-04f, 1.101469649e-04f,
+1.106571923e-04f, 1.111671921e-04f, 1.116769637e-04f, 1.121865061e-04f, 1.126958184e-04f, 1.132048998e-04f, 1.137137495e-04f, 1.142223665e-04f, 1.147307501e-04f, 1.152388993e-04f,
+1.157468132e-04f, 1.162544911e-04f, 1.167619320e-04f, 1.172691352e-04f, 1.177760996e-04f, 1.182828246e-04f, 1.187893092e-04f, 1.192955525e-04f, 1.198015537e-04f, 1.203073120e-04f,
+1.208128264e-04f, 1.213180962e-04f, 1.218231204e-04f, 1.223278983e-04f, 1.228324289e-04f, 1.233367114e-04f, 1.238407450e-04f, 1.243445288e-04f, 1.248480619e-04f, 1.253513435e-04f,
+1.258543728e-04f, 1.263571488e-04f, 1.268596708e-04f, 1.273619378e-04f, 1.278639491e-04f, 1.283657037e-04f, 1.288672009e-04f, 1.293684398e-04f, 1.298694195e-04f, 1.303701392e-04f,
+1.308705981e-04f, 1.313707952e-04f, 1.318707298e-04f, 1.323704010e-04f, 1.328698080e-04f, 1.333689498e-04f, 1.338678257e-04f, 1.343664349e-04f, 1.348647764e-04f, 1.353628495e-04f,
+1.358606532e-04f, 1.363581868e-04f, 1.368554495e-04f, 1.373524402e-04f, 1.378491584e-04f, 1.383456030e-04f, 1.388417732e-04f, 1.393376683e-04f, 1.398332874e-04f, 1.403286296e-04f,
+1.408236941e-04f, 1.413184800e-04f, 1.418129866e-04f, 1.423072130e-04f, 1.428011583e-04f, 1.432948218e-04f, 1.437882025e-04f, 1.442812997e-04f, 1.447741126e-04f, 1.452666402e-04f,
+1.457588818e-04f, 1.462508365e-04f, 1.467425035e-04f, 1.472338820e-04f, 1.477249711e-04f, 1.482157701e-04f, 1.487062780e-04f, 1.491964941e-04f, 1.496864175e-04f, 1.501760474e-04f,
+1.506653830e-04f, 1.511544234e-04f, 1.516431679e-04f, 1.521316156e-04f, 1.526197656e-04f, 1.531076172e-04f, 1.535951696e-04f, 1.540824218e-04f, 1.545693732e-04f, 1.550560228e-04f,
+1.555423698e-04f, 1.560284135e-04f, 1.565141530e-04f, 1.569995875e-04f, 1.574847162e-04f, 1.579695382e-04f, 1.584540528e-04f, 1.589382591e-04f, 1.594221563e-04f, 1.599057436e-04f,
+1.603890202e-04f, 1.608719852e-04f, 1.613546379e-04f, 1.618369774e-04f, 1.623190030e-04f, 1.628007138e-04f, 1.632821090e-04f, 1.637631878e-04f, 1.642439493e-04f, 1.647243929e-04f,
+1.652045176e-04f, 1.656843227e-04f, 1.661638074e-04f, 1.666429708e-04f, 1.671218121e-04f, 1.676003306e-04f, 1.680785254e-04f, 1.685563957e-04f, 1.690339408e-04f, 1.695111598e-04f,
+1.699880519e-04f, 1.704646163e-04f, 1.709408523e-04f, 1.714167589e-04f, 1.718923355e-04f, 1.723675812e-04f, 1.728424952e-04f, 1.733170768e-04f, 1.737913251e-04f, 1.742652393e-04f,
+1.747388186e-04f, 1.752120623e-04f, 1.756849695e-04f, 1.761575395e-04f, 1.766297715e-04f, 1.771016646e-04f, 1.775732180e-04f, 1.780444311e-04f, 1.785153029e-04f, 1.789858328e-04f,
+1.794560198e-04f, 1.799258633e-04f, 1.803953625e-04f, 1.808645164e-04f, 1.813333244e-04f, 1.818017857e-04f, 1.822698995e-04f, 1.827376650e-04f, 1.832050814e-04f, 1.836721480e-04f,
+1.841388639e-04f, 1.846052284e-04f, 1.850712406e-04f, 1.855368999e-04f, 1.860022054e-04f, 1.864671563e-04f, 1.869317519e-04f, 1.873959915e-04f, 1.878598741e-04f, 1.883233990e-04f,
+1.887865656e-04f, 1.892493729e-04f, 1.897118202e-04f, 1.901739067e-04f, 1.906356317e-04f, 1.910969945e-04f, 1.915579941e-04f, 1.920186299e-04f, 1.924789010e-04f, 1.929388068e-04f,
+1.933983463e-04f, 1.938575190e-04f, 1.943163240e-04f, 1.947747605e-04f, 1.952328277e-04f, 1.956905250e-04f, 1.961478515e-04f, 1.966048064e-04f, 1.970613891e-04f, 1.975175987e-04f,
+1.979734345e-04f, 1.984288957e-04f, 1.988839816e-04f, 1.993386913e-04f, 1.997930242e-04f, 2.002469795e-04f, 2.007005564e-04f, 2.011537542e-04f, 2.016065720e-04f, 2.020590093e-04f,
+2.025110651e-04f, 2.029627387e-04f, 2.034140295e-04f, 2.038649366e-04f, 2.043154592e-04f, 2.047655967e-04f, 2.052153483e-04f, 2.056647132e-04f, 2.061136906e-04f, 2.065622799e-04f,
+2.070104803e-04f, 2.074582910e-04f, 2.079057113e-04f, 2.083527404e-04f, 2.087993777e-04f, 2.092456223e-04f, 2.096914735e-04f, 2.101369305e-04f, 2.105819927e-04f, 2.110266592e-04f,
+2.114709294e-04f, 2.119148025e-04f, 2.123582778e-04f, 2.128013544e-04f, 2.132440318e-04f, 2.136863091e-04f, 2.141281856e-04f, 2.145696606e-04f, 2.150107333e-04f, 2.154514030e-04f,
+2.158916690e-04f, 2.163315305e-04f, 2.167709869e-04f, 2.172100373e-04f, 2.176486810e-04f, 2.180869174e-04f, 2.185247456e-04f, 2.189621651e-04f, 2.193991749e-04f, 2.198357744e-04f,
+2.202719630e-04f, 2.207077397e-04f, 2.211431040e-04f, 2.215780551e-04f, 2.220125923e-04f, 2.224467149e-04f, 2.228804221e-04f, 2.233137132e-04f, 2.237465875e-04f, 2.241790443e-04f,
+2.246110828e-04f, 2.250427024e-04f, 2.254739023e-04f, 2.259046818e-04f, 2.263350402e-04f, 2.267649768e-04f, 2.271944909e-04f, 2.276235817e-04f, 2.280522486e-04f, 2.284804908e-04f,
+2.289083076e-04f, 2.293356983e-04f, 2.297626623e-04f, 2.301891987e-04f, 2.306153069e-04f, 2.310409862e-04f, 2.314662359e-04f, 2.318910552e-04f, 2.323154435e-04f, 2.327394001e-04f,
+2.331629242e-04f, 2.335860152e-04f, 2.340086724e-04f, 2.344308950e-04f, 2.348526824e-04f, 2.352740338e-04f, 2.356949486e-04f, 2.361154260e-04f, 2.365354654e-04f, 2.369550661e-04f,
+2.373742274e-04f, 2.377929486e-04f, 2.382112289e-04f, 2.386290678e-04f, 2.390464645e-04f, 2.394634182e-04f, 2.398799285e-04f, 2.402959944e-04f, 2.407116154e-04f, 2.411267908e-04f,
+2.415415199e-04f, 2.419558019e-04f, 2.423696363e-04f, 2.427830223e-04f, 2.431959592e-04f, 2.436084464e-04f, 2.440204831e-04f, 2.444320688e-04f, 2.448432027e-04f, 2.452538841e-04f,
+2.456641124e-04f, 2.460738869e-04f, 2.464832068e-04f, 2.468920716e-04f, 2.473004806e-04f, 2.477084331e-04f, 2.481159283e-04f, 2.485229657e-04f, 2.489295446e-04f, 2.493356642e-04f,
+2.497413240e-04f, 2.501465233e-04f, 2.505512613e-04f, 2.509555375e-04f, 2.513593511e-04f, 2.517627015e-04f, 2.521655880e-04f, 2.525680100e-04f, 2.529699668e-04f, 2.533714578e-04f,
+2.537724822e-04f, 2.541730394e-04f, 2.545731288e-04f, 2.549727497e-04f, 2.553719014e-04f, 2.557705833e-04f, 2.561687947e-04f, 2.565665350e-04f, 2.569638035e-04f, 2.573605996e-04f,
+2.577569226e-04f, 2.581527719e-04f, 2.585481467e-04f, 2.589430466e-04f, 2.593374707e-04f, 2.597314185e-04f, 2.601248893e-04f, 2.605178825e-04f, 2.609103973e-04f, 2.613024333e-04f,
+2.616939897e-04f, 2.620850659e-04f, 2.624756612e-04f, 2.628657751e-04f, 2.632554068e-04f, 2.636445557e-04f, 2.640332213e-04f, 2.644214027e-04f, 2.648090995e-04f, 2.651963110e-04f,
+2.655830365e-04f, 2.659692754e-04f, 2.663550271e-04f, 2.667402909e-04f, 2.671250662e-04f, 2.675093524e-04f, 2.678931489e-04f, 2.682764550e-04f, 2.686592701e-04f, 2.690415935e-04f,
+2.694234247e-04f, 2.698047630e-04f, 2.701856078e-04f, 2.705659584e-04f, 2.709458143e-04f, 2.713251748e-04f, 2.717040393e-04f, 2.720824072e-04f, 2.724602779e-04f, 2.728376506e-04f,
+2.732145250e-04f, 2.735909002e-04f, 2.739667757e-04f, 2.743421509e-04f, 2.747170252e-04f, 2.750913979e-04f, 2.754652685e-04f, 2.758386363e-04f, 2.762115007e-04f, 2.765838611e-04f,
+2.769557169e-04f, 2.773270676e-04f, 2.776979124e-04f, 2.780682508e-04f, 2.784380822e-04f, 2.788074059e-04f, 2.791762214e-04f, 2.795445281e-04f, 2.799123254e-04f, 2.802796127e-04f,
+2.806463893e-04f, 2.810126547e-04f, 2.813784082e-04f, 2.817436494e-04f, 2.821083775e-04f, 2.824725921e-04f, 2.828362924e-04f, 2.831994779e-04f, 2.835621481e-04f, 2.839243022e-04f,
+2.842859398e-04f, 2.846470603e-04f, 2.850076630e-04f, 2.853677474e-04f, 2.857273128e-04f, 2.860863588e-04f, 2.864448847e-04f, 2.868028899e-04f, 2.871603739e-04f, 2.875173360e-04f,
+2.878737757e-04f, 2.882296925e-04f, 2.885850856e-04f, 2.889399546e-04f, 2.892942989e-04f, 2.896481179e-04f, 2.900014111e-04f, 2.903541778e-04f, 2.907064174e-04f, 2.910581295e-04f,
+2.914093134e-04f, 2.917599686e-04f, 2.921100945e-04f, 2.924596905e-04f, 2.928087561e-04f, 2.931572907e-04f, 2.935052937e-04f, 2.938527646e-04f, 2.941997028e-04f, 2.945461077e-04f,
+2.948919788e-04f, 2.952373156e-04f, 2.955821174e-04f, 2.959263837e-04f, 2.962701140e-04f, 2.966133077e-04f, 2.969559642e-04f, 2.972980830e-04f, 2.976396635e-04f, 2.979807052e-04f,
+2.983212075e-04f, 2.986611699e-04f, 2.990005918e-04f, 2.993394727e-04f, 2.996778120e-04f, 3.000156092e-04f, 3.003528638e-04f, 3.006895751e-04f, 3.010257427e-04f, 3.013613660e-04f,
+3.016964445e-04f, 3.020309776e-04f, 3.023649647e-04f, 3.026984055e-04f, 3.030312992e-04f, 3.033636454e-04f, 3.036954435e-04f, 3.040266930e-04f, 3.043573934e-04f, 3.046875441e-04f,
+3.050171447e-04f, 3.053461945e-04f, 3.056746930e-04f, 3.060026398e-04f, 3.063300342e-04f, 3.066568758e-04f, 3.069831640e-04f, 3.073088983e-04f, 3.076340782e-04f, 3.079587032e-04f,
+3.082827727e-04f, 3.086062862e-04f, 3.089292433e-04f, 3.092516432e-04f, 3.095734857e-04f, 3.098947701e-04f, 3.102154959e-04f, 3.105356627e-04f, 3.108552698e-04f, 3.111743168e-04f,
+3.114928032e-04f, 3.118107284e-04f, 3.121280920e-04f, 3.124448935e-04f, 3.127611323e-04f, 3.130768079e-04f, 3.133919198e-04f, 3.137064675e-04f, 3.140204506e-04f, 3.143338685e-04f,
+3.146467207e-04f, 3.149590066e-04f, 3.152707259e-04f, 3.155818780e-04f, 3.158924624e-04f, 3.162024787e-04f, 3.165119262e-04f, 3.168208046e-04f, 3.171291133e-04f, 3.174368518e-04f,
+3.177440197e-04f, 3.180506165e-04f, 3.183566416e-04f, 3.186620946e-04f, 3.189669749e-04f, 3.192712822e-04f, 3.195750159e-04f, 3.198781755e-04f, 3.201807606e-04f, 3.204827707e-04f,
+3.207842052e-04f, 3.210850637e-04f, 3.213853458e-04f, 3.216850509e-04f, 3.219841786e-04f, 3.222827284e-04f, 3.225806997e-04f, 3.228780923e-04f, 3.231749055e-04f, 3.234711389e-04f,
+3.237667920e-04f, 3.240618644e-04f, 3.243563556e-04f, 3.246502651e-04f, 3.249435925e-04f, 3.252363372e-04f, 3.255284989e-04f, 3.258200770e-04f, 3.261110712e-04f, 3.264014808e-04f,
+3.266913056e-04f, 3.269805449e-04f, 3.272691984e-04f, 3.275572657e-04f, 3.278447461e-04f, 3.281316393e-04f, 3.284179449e-04f, 3.287036624e-04f, 3.289887913e-04f, 3.292733311e-04f,
+3.295572815e-04f, 3.298406419e-04f, 3.301234120e-04f, 3.304055913e-04f, 3.306871793e-04f, 3.309681756e-04f, 3.312485797e-04f, 3.315283913e-04f, 3.318076098e-04f, 3.320862348e-04f,
+3.323642659e-04f, 3.326417026e-04f, 3.329185446e-04f, 3.331947913e-04f, 3.334704424e-04f, 3.337454973e-04f, 3.340199558e-04f, 3.342938172e-04f, 3.345670813e-04f, 3.348397475e-04f,
+3.351118155e-04f, 3.353832848e-04f, 3.356541549e-04f, 3.359244256e-04f, 3.361940962e-04f, 3.364631665e-04f, 3.367316360e-04f, 3.369995043e-04f, 3.372667709e-04f, 3.375334354e-04f,
+3.377994974e-04f, 3.380649566e-04f, 3.383298124e-04f, 3.385940645e-04f, 3.388577124e-04f, 3.391207558e-04f, 3.393831942e-04f, 3.396450272e-04f, 3.399062544e-04f, 3.401668754e-04f,
+3.404268897e-04f, 3.406862971e-04f, 3.409450970e-04f, 3.412032892e-04f, 3.414608730e-04f, 3.417178483e-04f, 3.419742145e-04f, 3.422299713e-04f, 3.424851182e-04f, 3.427396549e-04f,
+3.429935810e-04f, 3.432468960e-04f, 3.434995996e-04f, 3.437516915e-04f, 3.440031711e-04f, 3.442540381e-04f, 3.445042921e-04f, 3.447539328e-04f, 3.450029596e-04f, 3.452513724e-04f,
+3.454991706e-04f, 3.457463538e-04f, 3.459929218e-04f, 3.462388741e-04f, 3.464842103e-04f, 3.467289300e-04f, 3.469730329e-04f, 3.472165187e-04f, 3.474593868e-04f, 3.477016369e-04f,
+3.479432688e-04f, 3.481842819e-04f, 3.484246759e-04f, 3.486644505e-04f, 3.489036053e-04f, 3.491421398e-04f, 3.493800538e-04f, 3.496173469e-04f, 3.498540186e-04f, 3.500900687e-04f,
+3.503254968e-04f, 3.505603025e-04f, 3.507944854e-04f, 3.510280452e-04f, 3.512609816e-04f, 3.514932941e-04f, 3.517249824e-04f, 3.519560462e-04f, 3.521864851e-04f, 3.524162987e-04f,
+3.526454868e-04f, 3.528740488e-04f, 3.531019846e-04f, 3.533292937e-04f, 3.535559758e-04f, 3.537820305e-04f, 3.540074576e-04f, 3.542322566e-04f, 3.544564272e-04f, 3.546799690e-04f,
+3.549028818e-04f, 3.551251652e-04f, 3.553468188e-04f, 3.555678424e-04f, 3.557882355e-04f, 3.560079978e-04f, 3.562271290e-04f, 3.564456288e-04f, 3.566634969e-04f, 3.568807328e-04f,
+3.570973363e-04f, 3.573133070e-04f, 3.575286446e-04f, 3.577433489e-04f, 3.579574193e-04f, 3.581708557e-04f, 3.583836577e-04f, 3.585958250e-04f, 3.588073573e-04f, 3.590182542e-04f,
+3.592285154e-04f, 3.594381406e-04f, 3.596471296e-04f, 3.598554818e-04f, 3.600631972e-04f, 3.602702753e-04f, 3.604767158e-04f, 3.606825184e-04f, 3.608876828e-04f, 3.610922087e-04f,
+3.612960959e-04f, 3.614993438e-04f, 3.617019524e-04f, 3.619039213e-04f, 3.621052501e-04f, 3.623059385e-04f, 3.625059864e-04f, 3.627053933e-04f, 3.629041589e-04f, 3.631022830e-04f,
+3.632997653e-04f, 3.634966055e-04f, 3.636928032e-04f, 3.638883583e-04f, 3.640832703e-04f, 3.642775390e-04f, 3.644711641e-04f, 3.646641453e-04f, 3.648564824e-04f, 3.650481750e-04f,
+3.652392229e-04f, 3.654296258e-04f, 3.656193833e-04f, 3.658084953e-04f, 3.659969614e-04f, 3.661847813e-04f, 3.663719548e-04f, 3.665584816e-04f, 3.667443614e-04f, 3.669295939e-04f,
+3.671141790e-04f, 3.672981162e-04f, 3.674814053e-04f, 3.676640461e-04f, 3.678460382e-04f, 3.680273815e-04f, 3.682080756e-04f, 3.683881203e-04f, 3.685675153e-04f, 3.687462604e-04f,
+3.689243552e-04f, 3.691017996e-04f, 3.692785932e-04f, 3.694547358e-04f, 3.696302272e-04f, 3.698050670e-04f, 3.699792551e-04f, 3.701527912e-04f, 3.703256750e-04f, 3.704979063e-04f,
+3.706694847e-04f, 3.708404102e-04f, 3.710106824e-04f, 3.711803010e-04f, 3.713492659e-04f, 3.715175767e-04f, 3.716852333e-04f, 3.718522354e-04f, 3.720185827e-04f, 3.721842750e-04f,
+3.723493121e-04f, 3.725136938e-04f, 3.726774197e-04f, 3.728404897e-04f, 3.730029035e-04f, 3.731646609e-04f, 3.733257616e-04f, 3.734862055e-04f, 3.736459922e-04f, 3.738051216e-04f,
+3.739635935e-04f, 3.741214075e-04f, 3.742785635e-04f, 3.744350613e-04f, 3.745909006e-04f, 3.747460812e-04f, 3.749006029e-04f, 3.750544655e-04f, 3.752076687e-04f, 3.753602124e-04f,
+3.755120962e-04f, 3.756633201e-04f, 3.758138837e-04f, 3.759637869e-04f, 3.761130294e-04f, 3.762616111e-04f, 3.764095318e-04f, 3.765567911e-04f, 3.767033890e-04f, 3.768493252e-04f,
+3.769945995e-04f, 3.771392117e-04f, 3.772831616e-04f, 3.774264490e-04f, 3.775690737e-04f, 3.777110354e-04f, 3.778523341e-04f, 3.779929695e-04f, 3.781329414e-04f, 3.782722496e-04f,
+3.784108939e-04f, 3.785488742e-04f, 3.786861902e-04f, 3.788228417e-04f, 3.789588285e-04f, 3.790941506e-04f, 3.792288076e-04f, 3.793627994e-04f, 3.794961258e-04f, 3.796287867e-04f,
+3.797607818e-04f, 3.798921109e-04f, 3.800227740e-04f, 3.801527707e-04f, 3.802821010e-04f, 3.804107646e-04f, 3.805387614e-04f, 3.806660912e-04f, 3.807927538e-04f, 3.809187491e-04f,
+3.810440769e-04f, 3.811687370e-04f, 3.812927292e-04f, 3.814160535e-04f, 3.815387095e-04f, 3.816606972e-04f, 3.817820164e-04f, 3.819026669e-04f, 3.820226486e-04f, 3.821419613e-04f,
+3.822606048e-04f, 3.823785790e-04f, 3.824958838e-04f, 3.826125189e-04f, 3.827284843e-04f, 3.828437797e-04f, 3.829584051e-04f, 3.830723602e-04f, 3.831856449e-04f, 3.832982591e-04f,
+3.834102027e-04f, 3.835214754e-04f, 3.836320771e-04f, 3.837420078e-04f, 3.838512672e-04f, 3.839598552e-04f, 3.840677716e-04f, 3.841750164e-04f, 3.842815894e-04f, 3.843874904e-04f,
+3.844927194e-04f, 3.845972761e-04f, 3.847011605e-04f, 3.848043724e-04f, 3.849069117e-04f, 3.850087783e-04f, 3.851099720e-04f, 3.852104927e-04f, 3.853103403e-04f, 3.854095146e-04f,
+3.855080155e-04f, 3.856058430e-04f, 3.857029968e-04f, 3.857994770e-04f, 3.858952832e-04f, 3.859904155e-04f, 3.860848737e-04f, 3.861786577e-04f, 3.862717674e-04f, 3.863642027e-04f,
+3.864559634e-04f, 3.865470494e-04f, 3.866374607e-04f, 3.867271972e-04f, 3.868162586e-04f, 3.869046450e-04f, 3.869923562e-04f, 3.870793921e-04f, 3.871657526e-04f, 3.872514376e-04f,
+3.873364470e-04f, 3.874207807e-04f, 3.875044386e-04f, 3.875874206e-04f, 3.876697267e-04f, 3.877513566e-04f, 3.878323104e-04f, 3.879125880e-04f, 3.879921892e-04f, 3.880711139e-04f,
+3.881493621e-04f, 3.882269337e-04f, 3.883038286e-04f, 3.883800467e-04f, 3.884555879e-04f, 3.885304521e-04f, 3.886046394e-04f, 3.886781495e-04f, 3.887509824e-04f, 3.888231380e-04f,
+3.888946163e-04f, 3.889654172e-04f, 3.890355405e-04f, 3.891049863e-04f, 3.891737544e-04f, 3.892418449e-04f, 3.893092575e-04f, 3.893759923e-04f, 3.894420492e-04f, 3.895074280e-04f,
+3.895721289e-04f, 3.896361516e-04f, 3.896994961e-04f, 3.897621624e-04f, 3.898241504e-04f, 3.898854600e-04f, 3.899460913e-04f, 3.900060440e-04f, 3.900653182e-04f, 3.901239139e-04f,
+3.901818309e-04f, 3.902390692e-04f, 3.902956288e-04f, 3.903515096e-04f, 3.904067115e-04f, 3.904612346e-04f, 3.905150788e-04f, 3.905682439e-04f, 3.906207301e-04f, 3.906725372e-04f,
+3.907236652e-04f, 3.907741141e-04f, 3.908238837e-04f, 3.908729742e-04f, 3.909213854e-04f, 3.909691173e-04f, 3.910161699e-04f, 3.910625432e-04f, 3.911082370e-04f, 3.911532515e-04f,
+3.911975864e-04f, 3.912412420e-04f, 3.912842180e-04f, 3.913265144e-04f, 3.913681314e-04f, 3.914090687e-04f, 3.914493264e-04f, 3.914889046e-04f, 3.915278030e-04f, 3.915660219e-04f,
+3.916035610e-04f, 3.916404204e-04f, 3.916766002e-04f, 3.917121002e-04f, 3.917469205e-04f, 3.917810610e-04f, 3.918145218e-04f, 3.918473028e-04f, 3.918794040e-04f, 3.919108254e-04f,
+3.919415671e-04f, 3.919716289e-04f, 3.920010110e-04f, 3.920297132e-04f, 3.920577356e-04f, 3.920850783e-04f, 3.921117411e-04f, 3.921377242e-04f, 3.921630274e-04f, 3.921876509e-04f,
+3.922115945e-04f, 3.922348584e-04f, 3.922574426e-04f, 3.922793469e-04f, 3.923005715e-04f, 3.923211164e-04f, 3.923409815e-04f, 3.923601670e-04f, 3.923786727e-04f, 3.923964988e-04f,
+3.924136452e-04f, 3.924301119e-04f, 3.924458990e-04f, 3.924610066e-04f, 3.924754345e-04f, 3.924891829e-04f, 3.925022517e-04f, 3.925146411e-04f, 3.925263510e-04f, 3.925373814e-04f,
+3.925477324e-04f, 3.925574040e-04f, 3.925663962e-04f, 3.925747091e-04f, 3.925823427e-04f, 3.925892971e-04f, 3.925955723e-04f, 3.926011682e-04f, 3.926060850e-04f, 3.926103227e-04f,
+3.926138814e-04f, 3.926167610e-04f, 3.926189616e-04f, 3.926204833e-04f, 3.926213261e-04f, 3.926214901e-04f, 3.926209753e-04f, 3.926197817e-04f, 3.926179095e-04f, 3.926153586e-04f,
+3.926121291e-04f, 3.926082210e-04f, 3.926036345e-04f, 3.925983696e-04f, 3.925924263e-04f, 3.925858047e-04f, 3.925785048e-04f, 3.925705268e-04f, 3.925618706e-04f, 3.925525363e-04f,
+3.925425241e-04f, 3.925318339e-04f, 3.925204659e-04f, 3.925084201e-04f, 3.924956965e-04f, 3.924822953e-04f, 3.924682165e-04f, 3.924534601e-04f, 3.924380264e-04f, 3.924219152e-04f,
+3.924051268e-04f, 3.923876612e-04f, 3.923695184e-04f, 3.923506986e-04f, 3.923312018e-04f, 3.923110281e-04f, 3.922901776e-04f, 3.922686504e-04f, 3.922464465e-04f, 3.922235661e-04f,
+3.922000092e-04f, 3.921757760e-04f, 3.921508665e-04f, 3.921252807e-04f, 3.920990189e-04f, 3.920720810e-04f, 3.920444673e-04f, 3.920161777e-04f, 3.919872124e-04f, 3.919575715e-04f,
+3.919272550e-04f, 3.918962632e-04f, 3.918645960e-04f, 3.918322536e-04f, 3.917992361e-04f, 3.917655435e-04f, 3.917311761e-04f, 3.916961339e-04f, 3.916604170e-04f, 3.916240255e-04f,
+3.915869595e-04f, 3.915492192e-04f, 3.915108047e-04f, 3.914717160e-04f, 3.914319533e-04f, 3.913915167e-04f, 3.913504064e-04f, 3.913086223e-04f, 3.912661648e-04f, 3.912230338e-04f,
+3.911792296e-04f, 3.911347522e-04f, 3.910896017e-04f, 3.910437783e-04f, 3.909972821e-04f, 3.909501133e-04f, 3.909022719e-04f, 3.908537582e-04f, 3.908045721e-04f, 3.907547139e-04f,
+3.907041838e-04f, 3.906529817e-04f, 3.906011079e-04f, 3.905485626e-04f, 3.904953457e-04f, 3.904414576e-04f, 3.903868983e-04f, 3.903316679e-04f, 3.902757667e-04f, 3.902191947e-04f,
+3.901619521e-04f, 3.901040391e-04f, 3.900454557e-04f, 3.899862022e-04f, 3.899262787e-04f, 3.898656854e-04f, 3.898044223e-04f, 3.897424897e-04f, 3.896798877e-04f, 3.896166165e-04f,
+3.895526762e-04f, 3.894880669e-04f, 3.894227890e-04f, 3.893568424e-04f, 3.892902273e-04f, 3.892229440e-04f, 3.891549926e-04f, 3.890863732e-04f, 3.890170861e-04f, 3.889471313e-04f,
+3.888765091e-04f, 3.888052196e-04f, 3.887332630e-04f, 3.886606395e-04f, 3.885873492e-04f, 3.885133923e-04f, 3.884387690e-04f, 3.883634795e-04f, 3.882875239e-04f, 3.882109025e-04f,
+3.881336153e-04f, 3.880556627e-04f, 3.879770447e-04f, 3.878977615e-04f, 3.878178134e-04f, 3.877372005e-04f, 3.876559230e-04f, 3.875739811e-04f, 3.874913750e-04f, 3.874081049e-04f,
+3.873241709e-04f, 3.872395733e-04f, 3.871543122e-04f, 3.870683879e-04f, 3.869818005e-04f, 3.868945503e-04f, 3.868066373e-04f, 3.867180620e-04f, 3.866288243e-04f, 3.865389246e-04f,
+3.864483631e-04f, 3.863571399e-04f, 3.862652552e-04f, 3.861727093e-04f, 3.860795023e-04f, 3.859856346e-04f, 3.858911062e-04f, 3.857959173e-04f, 3.857000683e-04f, 3.856035593e-04f,
+3.855063906e-04f, 3.854085623e-04f, 3.853100746e-04f, 3.852109278e-04f, 3.851111221e-04f, 3.850106578e-04f, 3.849095349e-04f, 3.848077538e-04f, 3.847053147e-04f, 3.846022178e-04f,
+3.844984634e-04f, 3.843940516e-04f, 3.842889826e-04f, 3.841832568e-04f, 3.840768744e-04f, 3.839698355e-04f, 3.838621404e-04f, 3.837537893e-04f, 3.836447825e-04f, 3.835351202e-04f,
+3.834248027e-04f, 3.833138301e-04f, 3.832022028e-04f, 3.830899209e-04f, 3.829769847e-04f, 3.828633945e-04f, 3.827491504e-04f, 3.826342528e-04f, 3.825187018e-04f, 3.824024978e-04f,
+3.822856409e-04f, 3.821681315e-04f, 3.820499697e-04f, 3.819311558e-04f, 3.818116901e-04f, 3.816915729e-04f, 3.815708043e-04f, 3.814493846e-04f, 3.813273141e-04f, 3.812045931e-04f,
+3.810812218e-04f, 3.809572004e-04f, 3.808325292e-04f, 3.807072086e-04f, 3.805812387e-04f, 3.804546198e-04f, 3.803273522e-04f, 3.801994361e-04f, 3.800708718e-04f, 3.799416597e-04f,
+3.798117998e-04f, 3.796812926e-04f, 3.795501383e-04f, 3.794183372e-04f, 3.792858894e-04f, 3.791527955e-04f, 3.790190554e-04f, 3.788846697e-04f, 3.787496385e-04f, 3.786139622e-04f,
+3.784776409e-04f, 3.783406751e-04f, 3.782030649e-04f, 3.780648106e-04f, 3.779259126e-04f, 3.777863712e-04f, 3.776461865e-04f, 3.775053590e-04f, 3.773638888e-04f, 3.772217763e-04f,
+3.770790218e-04f, 3.769356256e-04f, 3.767915879e-04f, 3.766469091e-04f, 3.765015894e-04f, 3.763556292e-04f, 3.762090287e-04f, 3.760617882e-04f, 3.759139081e-04f, 3.757653887e-04f,
+3.756162302e-04f, 3.754664330e-04f, 3.753159973e-04f, 3.751649234e-04f, 3.750132118e-04f, 3.748608626e-04f, 3.747078762e-04f, 3.745542529e-04f, 3.743999930e-04f, 3.742450969e-04f,
+3.740895647e-04f, 3.739333969e-04f, 3.737765938e-04f, 3.736191556e-04f, 3.734610828e-04f, 3.733023755e-04f, 3.731430342e-04f, 3.729830592e-04f, 3.728224507e-04f, 3.726612091e-04f,
+3.724993348e-04f, 3.723368280e-04f, 3.721736891e-04f, 3.720099183e-04f, 3.718455161e-04f, 3.716804828e-04f, 3.715148187e-04f, 3.713485240e-04f, 3.711815993e-04f, 3.710140447e-04f,
+3.708458606e-04f, 3.706770474e-04f, 3.705076054e-04f, 3.703375350e-04f, 3.701668364e-04f, 3.699955100e-04f, 3.698235561e-04f, 3.696509752e-04f, 3.694777675e-04f, 3.693039334e-04f,
+3.691294732e-04f, 3.689543873e-04f, 3.687786760e-04f, 3.686023396e-04f, 3.684253786e-04f, 3.682477933e-04f, 3.680695840e-04f, 3.678907510e-04f, 3.677112948e-04f, 3.675312157e-04f,
+3.673505140e-04f, 3.671691901e-04f, 3.669872443e-04f, 3.668046771e-04f, 3.666214887e-04f, 3.664376796e-04f, 3.662532501e-04f, 3.660682005e-04f, 3.658825312e-04f, 3.656962427e-04f,
+3.655093352e-04f, 3.653218091e-04f, 3.651336648e-04f, 3.649449026e-04f, 3.647555230e-04f, 3.645655263e-04f, 3.643749129e-04f, 3.641836831e-04f, 3.639918373e-04f, 3.637993760e-04f,
+3.636062994e-04f, 3.634126079e-04f, 3.632183020e-04f, 3.630233820e-04f, 3.628278483e-04f, 3.626317013e-04f, 3.624349413e-04f, 3.622375688e-04f, 3.620395841e-04f, 3.618409876e-04f,
+3.616417797e-04f, 3.614419608e-04f, 3.612415312e-04f, 3.610404915e-04f, 3.608388419e-04f, 3.606365828e-04f, 3.604337147e-04f, 3.602302379e-04f, 3.600261529e-04f, 3.598214600e-04f,
+3.596161596e-04f, 3.594102521e-04f, 3.592037380e-04f, 3.589966175e-04f, 3.587888912e-04f, 3.585805595e-04f, 3.583716227e-04f, 3.581620812e-04f, 3.579519354e-04f, 3.577411858e-04f,
+3.575298327e-04f, 3.573178767e-04f, 3.571053179e-04f, 3.568921570e-04f, 3.566783943e-04f, 3.564640302e-04f, 3.562490651e-04f, 3.560334994e-04f, 3.558173336e-04f, 3.556005680e-04f,
+3.553832032e-04f, 3.551652394e-04f, 3.549466772e-04f, 3.547275169e-04f, 3.545077590e-04f, 3.542874039e-04f, 3.540664519e-04f, 3.538449037e-04f, 3.536227595e-04f, 3.534000197e-04f,
+3.531766849e-04f, 3.529527555e-04f, 3.527282318e-04f, 3.525031143e-04f, 3.522774035e-04f, 3.520510997e-04f, 3.518242035e-04f, 3.515967151e-04f, 3.513686352e-04f, 3.511399641e-04f,
+3.509107022e-04f, 3.506808500e-04f, 3.504504079e-04f, 3.502193764e-04f, 3.499877559e-04f, 3.497555469e-04f, 3.495227498e-04f, 3.492893650e-04f, 3.490553930e-04f, 3.488208342e-04f,
+3.485856891e-04f, 3.483499581e-04f, 3.481136417e-04f, 3.478767403e-04f, 3.476392545e-04f, 3.474011845e-04f, 3.471625309e-04f, 3.469232942e-04f, 3.466834748e-04f, 3.464430731e-04f,
+3.462020896e-04f, 3.459605248e-04f, 3.457183791e-04f, 3.454756530e-04f, 3.452323470e-04f, 3.449884614e-04f, 3.447439969e-04f, 3.444989538e-04f, 3.442533325e-04f, 3.440071337e-04f,
+3.437603576e-04f, 3.435130049e-04f, 3.432650760e-04f, 3.430165713e-04f, 3.427674913e-04f, 3.425178365e-04f, 3.422676073e-04f, 3.420168043e-04f, 3.417654279e-04f, 3.415134785e-04f,
+3.412609568e-04f, 3.410078630e-04f, 3.407541978e-04f, 3.404999615e-04f, 3.402451548e-04f, 3.399897780e-04f, 3.397338316e-04f, 3.394773161e-04f, 3.392202321e-04f, 3.389625799e-04f,
+3.387043601e-04f, 3.384455732e-04f, 3.381862196e-04f, 3.379262999e-04f, 3.376658145e-04f, 3.374047639e-04f, 3.371431486e-04f, 3.368809692e-04f, 3.366182260e-04f, 3.363549196e-04f,
+3.360910506e-04f, 3.358266193e-04f, 3.355616262e-04f, 3.352960720e-04f, 3.350299570e-04f, 3.347632819e-04f, 3.344960470e-04f, 3.342282528e-04f, 3.339599000e-04f, 3.336909890e-04f,
+3.334215202e-04f, 3.331514943e-04f, 3.328809117e-04f, 3.326097729e-04f, 3.323380784e-04f, 3.320658287e-04f, 3.317930244e-04f, 3.315196659e-04f, 3.312457538e-04f, 3.309712886e-04f,
+3.306962708e-04f, 3.304207009e-04f, 3.301445794e-04f, 3.298679069e-04f, 3.295906838e-04f, 3.293129107e-04f, 3.290345881e-04f, 3.287557165e-04f, 3.284762964e-04f, 3.281963285e-04f,
+3.279158131e-04f, 3.276347508e-04f, 3.273531421e-04f, 3.270709877e-04f, 3.267882879e-04f, 3.265050433e-04f, 3.262212544e-04f, 3.259369219e-04f, 3.256520461e-04f, 3.253666277e-04f,
+3.250806671e-04f, 3.247941650e-04f, 3.245071218e-04f, 3.242195380e-04f, 3.239314143e-04f, 3.236427511e-04f, 3.233535490e-04f, 3.230638085e-04f, 3.227735302e-04f, 3.224827145e-04f,
+3.221913621e-04f, 3.218994735e-04f, 3.216070492e-04f, 3.213140898e-04f, 3.210205958e-04f, 3.207265678e-04f, 3.204320063e-04f, 3.201369118e-04f, 3.198412849e-04f, 3.195451262e-04f,
+3.192484362e-04f, 3.189512154e-04f, 3.186534645e-04f, 3.183551839e-04f, 3.180563742e-04f, 3.177570359e-04f, 3.174571697e-04f, 3.171567761e-04f, 3.168558556e-04f, 3.165544088e-04f,
+3.162524363e-04f, 3.159499385e-04f, 3.156469162e-04f, 3.153433698e-04f, 3.150392998e-04f, 3.147347070e-04f, 3.144295917e-04f, 3.141239546e-04f, 3.138177963e-04f, 3.135111173e-04f,
+3.132039182e-04f, 3.128961996e-04f, 3.125879620e-04f, 3.122792060e-04f, 3.119699321e-04f, 3.116601410e-04f, 3.113498332e-04f, 3.110390093e-04f, 3.107276698e-04f, 3.104158154e-04f,
+3.101034466e-04f, 3.097905639e-04f, 3.094771681e-04f, 3.091632595e-04f, 3.088488389e-04f, 3.085339068e-04f, 3.082184638e-04f, 3.079025105e-04f, 3.075860474e-04f, 3.072690751e-04f,
+3.069515943e-04f, 3.066336054e-04f, 3.063151092e-04f, 3.059961061e-04f, 3.056765968e-04f, 3.053565818e-04f, 3.050360618e-04f, 3.047150373e-04f, 3.043935089e-04f, 3.040714773e-04f,
+3.037489429e-04f, 3.034259065e-04f, 3.031023685e-04f, 3.027783297e-04f, 3.024537905e-04f, 3.021287516e-04f, 3.018032136e-04f, 3.014771771e-04f, 3.011506427e-04f, 3.008236109e-04f,
+3.004960825e-04f, 3.001680579e-04f, 2.998395378e-04f, 2.995105227e-04f, 2.991810134e-04f, 2.988510104e-04f, 2.985205143e-04f, 2.981895257e-04f, 2.978580452e-04f, 2.975260734e-04f,
+2.971936110e-04f, 2.968606585e-04f, 2.965272166e-04f, 2.961932858e-04f, 2.958588669e-04f, 2.955239603e-04f, 2.951885667e-04f, 2.948526868e-04f, 2.945163211e-04f, 2.941794702e-04f,
+2.938421349e-04f, 2.935043156e-04f, 2.931660130e-04f, 2.928272278e-04f, 2.924879605e-04f, 2.921482117e-04f, 2.918079822e-04f, 2.914672725e-04f, 2.911260832e-04f, 2.907844150e-04f,
+2.904422685e-04f, 2.900996442e-04f, 2.897565430e-04f, 2.894129652e-04f, 2.890689117e-04f, 2.887243830e-04f, 2.883793798e-04f, 2.880339027e-04f, 2.876879522e-04f, 2.873415291e-04f,
+2.869946340e-04f, 2.866472675e-04f, 2.862994303e-04f, 2.859511229e-04f, 2.856023461e-04f, 2.852531004e-04f, 2.849033865e-04f, 2.845532051e-04f, 2.842025567e-04f, 2.838514420e-04f,
+2.834998617e-04f, 2.831478164e-04f, 2.827953067e-04f, 2.824423332e-04f, 2.820888967e-04f, 2.817349978e-04f, 2.813806371e-04f, 2.810258152e-04f, 2.806705329e-04f, 2.803147907e-04f,
+2.799585892e-04f, 2.796019293e-04f, 2.792448114e-04f, 2.788872363e-04f, 2.785292045e-04f, 2.781707169e-04f, 2.778117739e-04f, 2.774523763e-04f, 2.770925247e-04f, 2.767322197e-04f,
+2.763714621e-04f, 2.760102524e-04f, 2.756485914e-04f, 2.752864797e-04f, 2.749239179e-04f, 2.745609067e-04f, 2.741974468e-04f, 2.738335388e-04f, 2.734691834e-04f, 2.731043813e-04f,
+2.727391331e-04f, 2.723734394e-04f, 2.720073010e-04f, 2.716407185e-04f, 2.712736926e-04f, 2.709062239e-04f, 2.705383131e-04f, 2.701699609e-04f, 2.698011679e-04f, 2.694319349e-04f,
+2.690622624e-04f, 2.686921512e-04f, 2.683216019e-04f, 2.679506152e-04f, 2.675791917e-04f, 2.672073322e-04f, 2.668350373e-04f, 2.664623078e-04f, 2.660891441e-04f, 2.657155472e-04f,
+2.653415175e-04f, 2.649670558e-04f, 2.645921629e-04f, 2.642168392e-04f, 2.638410856e-04f, 2.634649027e-04f, 2.630882913e-04f, 2.627112519e-04f, 2.623337852e-04f, 2.619558920e-04f,
+2.615775729e-04f, 2.611988287e-04f, 2.608196599e-04f, 2.604400673e-04f, 2.600600516e-04f, 2.596796135e-04f, 2.592987536e-04f, 2.589174726e-04f, 2.585357713e-04f, 2.581536503e-04f,
+2.577711102e-04f, 2.573881519e-04f, 2.570047760e-04f, 2.566209831e-04f, 2.562367741e-04f, 2.558521495e-04f, 2.554671100e-04f, 2.550816564e-04f, 2.546957894e-04f, 2.543095096e-04f,
+2.539228178e-04f, 2.535357146e-04f, 2.531482008e-04f, 2.527602770e-04f, 2.523719440e-04f, 2.519832024e-04f, 2.515940530e-04f, 2.512044964e-04f, 2.508145334e-04f, 2.504241646e-04f,
+2.500333908e-04f, 2.496422126e-04f, 2.492506308e-04f, 2.488586462e-04f, 2.484662592e-04f, 2.480734708e-04f, 2.476802816e-04f, 2.472866923e-04f, 2.468927036e-04f, 2.464983162e-04f,
+2.461035309e-04f, 2.457083483e-04f, 2.453127692e-04f, 2.449167942e-04f, 2.445204242e-04f, 2.441236597e-04f, 2.437265016e-04f, 2.433289504e-04f, 2.429310071e-04f, 2.425326721e-04f,
+2.421339464e-04f, 2.417348306e-04f, 2.413353253e-04f, 2.409354314e-04f, 2.405351496e-04f, 2.401344805e-04f, 2.397334249e-04f, 2.393319836e-04f, 2.389301571e-04f, 2.385279463e-04f,
+2.381253519e-04f, 2.377223746e-04f, 2.373190152e-04f, 2.369152742e-04f, 2.365111526e-04f, 2.361066510e-04f, 2.357017701e-04f, 2.352965106e-04f, 2.348908734e-04f, 2.344848590e-04f,
+2.340784683e-04f, 2.336717020e-04f, 2.332645608e-04f, 2.328570454e-04f, 2.324491565e-04f, 2.320408950e-04f, 2.316322615e-04f, 2.312232568e-04f, 2.308138815e-04f, 2.304041365e-04f,
+2.299940225e-04f, 2.295835402e-04f, 2.291726903e-04f, 2.287614735e-04f, 2.283498907e-04f, 2.279379426e-04f, 2.275256298e-04f, 2.271129531e-04f, 2.266999134e-04f, 2.262865112e-04f,
+2.258727474e-04f, 2.254586227e-04f, 2.250441378e-04f, 2.246292934e-04f, 2.242140904e-04f, 2.237985295e-04f, 2.233826114e-04f, 2.229663368e-04f, 2.225497065e-04f, 2.221327212e-04f,
+2.217153818e-04f, 2.212976888e-04f, 2.208796432e-04f, 2.204612456e-04f, 2.200424968e-04f, 2.196233975e-04f, 2.192039484e-04f, 2.187841504e-04f, 2.183640042e-04f, 2.179435105e-04f,
+2.175226701e-04f, 2.171014838e-04f, 2.166799522e-04f, 2.162580762e-04f, 2.158358564e-04f, 2.154132937e-04f, 2.149903888e-04f, 2.145671425e-04f, 2.141435555e-04f, 2.137196286e-04f,
+2.132953625e-04f, 2.128707580e-04f, 2.124458159e-04f, 2.120205368e-04f, 2.115949217e-04f, 2.111689711e-04f, 2.107426860e-04f, 2.103160669e-04f, 2.098891148e-04f, 2.094618304e-04f,
+2.090342144e-04f, 2.086062676e-04f, 2.081779908e-04f, 2.077493847e-04f, 2.073204501e-04f, 2.068911878e-04f, 2.064615984e-04f, 2.060316829e-04f, 2.056014419e-04f, 2.051708763e-04f,
+2.047399867e-04f, 2.043087740e-04f, 2.038772389e-04f, 2.034453822e-04f, 2.030132047e-04f, 2.025807071e-04f, 2.021478903e-04f, 2.017147549e-04f, 2.012813018e-04f, 2.008475316e-04f,
+2.004134453e-04f, 1.999790436e-04f, 1.995443272e-04f, 1.991092969e-04f, 1.986739535e-04f, 1.982382978e-04f, 1.978023305e-04f, 1.973660524e-04f, 1.969294643e-04f, 1.964925671e-04f,
+1.960553613e-04f, 1.956178479e-04f, 1.951800276e-04f, 1.947419012e-04f, 1.943034694e-04f, 1.938647331e-04f, 1.934256930e-04f, 1.929863500e-04f, 1.925467047e-04f, 1.921067580e-04f,
+1.916665106e-04f, 1.912259634e-04f, 1.907851171e-04f, 1.903439725e-04f, 1.899025304e-04f, 1.894607915e-04f, 1.890187568e-04f, 1.885764268e-04f, 1.881338025e-04f, 1.876908846e-04f,
+1.872476739e-04f, 1.868041712e-04f, 1.863603773e-04f, 1.859162929e-04f, 1.854719189e-04f, 1.850272561e-04f, 1.845823051e-04f, 1.841370669e-04f, 1.836915422e-04f, 1.832457319e-04f,
+1.827996366e-04f, 1.823532572e-04f, 1.819065944e-04f, 1.814596492e-04f, 1.810124222e-04f, 1.805649143e-04f, 1.801171262e-04f, 1.796690588e-04f, 1.792207128e-04f, 1.787720891e-04f,
+1.783231884e-04f, 1.778740115e-04f, 1.774245592e-04f, 1.769748324e-04f, 1.765248318e-04f, 1.760745582e-04f, 1.756240124e-04f, 1.751731953e-04f, 1.747221075e-04f, 1.742707500e-04f,
+1.738191235e-04f, 1.733672288e-04f, 1.729150667e-04f, 1.724626380e-04f, 1.720099435e-04f, 1.715569841e-04f, 1.711037605e-04f, 1.706502735e-04f, 1.701965239e-04f, 1.697425126e-04f,
+1.692882403e-04f, 1.688337078e-04f, 1.683789160e-04f, 1.679238656e-04f, 1.674685575e-04f, 1.670129924e-04f, 1.665571712e-04f, 1.661010947e-04f, 1.656447636e-04f, 1.651881788e-04f,
+1.647313412e-04f, 1.642742514e-04f, 1.638169103e-04f, 1.633593188e-04f, 1.629014776e-04f, 1.624433875e-04f, 1.619850494e-04f, 1.615264640e-04f, 1.610676322e-04f, 1.606085548e-04f,
+1.601492325e-04f, 1.596896663e-04f, 1.592298569e-04f, 1.587698051e-04f, 1.583095118e-04f, 1.578489777e-04f, 1.573882037e-04f, 1.569271905e-04f, 1.564659391e-04f, 1.560044501e-04f,
+1.555427245e-04f, 1.550807631e-04f, 1.546185666e-04f, 1.541561358e-04f, 1.536934717e-04f, 1.532305749e-04f, 1.527674464e-04f, 1.523040869e-04f, 1.518404973e-04f, 1.513766784e-04f,
+1.509126309e-04f, 1.504483558e-04f, 1.499838538e-04f, 1.495191258e-04f, 1.490541725e-04f, 1.485889948e-04f, 1.481235935e-04f, 1.476579695e-04f, 1.471921235e-04f, 1.467260564e-04f,
+1.462597690e-04f, 1.457932621e-04f, 1.453265366e-04f, 1.448595932e-04f, 1.443924328e-04f, 1.439250562e-04f, 1.434574643e-04f, 1.429896578e-04f, 1.425216376e-04f, 1.420534045e-04f,
+1.415849594e-04f, 1.411163030e-04f, 1.406474362e-04f, 1.401783598e-04f, 1.397090746e-04f, 1.392395815e-04f, 1.387698813e-04f, 1.382999748e-04f, 1.378298629e-04f, 1.373595463e-04f,
+1.368890259e-04f, 1.364183026e-04f, 1.359473771e-04f, 1.354762503e-04f, 1.350049230e-04f, 1.345333960e-04f, 1.340616702e-04f, 1.335897465e-04f, 1.331176255e-04f, 1.326453082e-04f,
+1.321727955e-04f, 1.317000880e-04f, 1.312271867e-04f, 1.307540924e-04f, 1.302808059e-04f, 1.298073281e-04f, 1.293336598e-04f, 1.288598017e-04f, 1.283857548e-04f, 1.279115200e-04f,
+1.274370979e-04f, 1.269624895e-04f, 1.264876955e-04f, 1.260127169e-04f, 1.255375545e-04f, 1.250622090e-04f, 1.245866814e-04f, 1.241109724e-04f, 1.236350829e-04f, 1.231590137e-04f,
+1.226827658e-04f, 1.222063398e-04f, 1.217297366e-04f, 1.212529572e-04f, 1.207760022e-04f, 1.202988726e-04f, 1.198215692e-04f, 1.193440929e-04f, 1.188664444e-04f, 1.183886246e-04f,
+1.179106343e-04f, 1.174324744e-04f, 1.169541458e-04f, 1.164756492e-04f, 1.159969855e-04f, 1.155181555e-04f, 1.150391601e-04f, 1.145600002e-04f, 1.140806765e-04f, 1.136011899e-04f,
+1.131215412e-04f, 1.126417313e-04f, 1.121617611e-04f, 1.116816313e-04f, 1.112013428e-04f, 1.107208965e-04f, 1.102402931e-04f, 1.097595336e-04f, 1.092786188e-04f, 1.087975494e-04f,
+1.083163265e-04f, 1.078349507e-04f, 1.073534230e-04f, 1.068717442e-04f, 1.063899151e-04f, 1.059079366e-04f, 1.054258096e-04f, 1.049435348e-04f, 1.044611131e-04f, 1.039785453e-04f,
+1.034958324e-04f, 1.030129751e-04f, 1.025299743e-04f, 1.020468308e-04f, 1.015635456e-04f, 1.010801193e-04f, 1.005965529e-04f, 1.001128473e-04f, 9.962900322e-05f, 9.914502155e-05f,
+9.866090315e-05f, 9.817664885e-05f, 9.769225951e-05f, 9.720773598e-05f, 9.672307909e-05f, 9.623828970e-05f, 9.575336866e-05f, 9.526831681e-05f, 9.478313501e-05f, 9.429782410e-05f,
+9.381238492e-05f, 9.332681833e-05f, 9.284112518e-05f, 9.235530632e-05f, 9.186936258e-05f, 9.138329484e-05f, 9.089710392e-05f, 9.041079069e-05f, 8.992435599e-05f, 8.943780068e-05f,
+8.895112559e-05f, 8.846433159e-05f, 8.797741952e-05f, 8.749039024e-05f, 8.700324459e-05f, 8.651598342e-05f, 8.602860759e-05f, 8.554111795e-05f, 8.505351535e-05f, 8.456580063e-05f,
+8.407797465e-05f, 8.359003827e-05f, 8.310199233e-05f, 8.261383769e-05f, 8.212557519e-05f, 8.163720569e-05f, 8.114873005e-05f, 8.066014911e-05f, 8.017146372e-05f, 7.968267475e-05f,
+7.919378304e-05f, 7.870478944e-05f, 7.821569481e-05f, 7.772650000e-05f, 7.723720586e-05f, 7.674781325e-05f, 7.625832302e-05f, 7.576873602e-05f, 7.527905312e-05f, 7.478927515e-05f,
+7.429940297e-05f, 7.380943745e-05f, 7.331937943e-05f, 7.282922976e-05f, 7.233898931e-05f, 7.184865892e-05f, 7.135823945e-05f, 7.086773175e-05f, 7.037713669e-05f, 6.988645510e-05f,
+6.939568786e-05f, 6.890483580e-05f, 6.841389979e-05f, 6.792288069e-05f, 6.743177934e-05f, 6.694059661e-05f, 6.644933334e-05f, 6.595799040e-05f, 6.546656864e-05f, 6.497506891e-05f,
+6.448349207e-05f, 6.399183897e-05f, 6.350011048e-05f, 6.300830744e-05f, 6.251643071e-05f, 6.202448115e-05f, 6.153245962e-05f, 6.104036697e-05f, 6.054820405e-05f, 6.005597173e-05f,
+5.956367085e-05f, 5.907130228e-05f, 5.857886687e-05f, 5.808636548e-05f, 5.759379896e-05f, 5.710116817e-05f, 5.660847397e-05f, 5.611571721e-05f, 5.562289875e-05f, 5.513001945e-05f,
+5.463708016e-05f, 5.414408174e-05f, 5.365102505e-05f, 5.315791094e-05f, 5.266474027e-05f, 5.217151390e-05f, 5.167823268e-05f, 5.118489748e-05f, 5.069150914e-05f, 5.019806853e-05f,
+4.970457650e-05f, 4.921103391e-05f, 4.871744161e-05f, 4.822380047e-05f, 4.773011134e-05f, 4.723637508e-05f, 4.674259254e-05f, 4.624876458e-05f, 4.575489207e-05f, 4.526097585e-05f,
+4.476701678e-05f, 4.427301573e-05f, 4.377897354e-05f, 4.328489108e-05f, 4.279076920e-05f, 4.229660876e-05f, 4.180241062e-05f, 4.130817564e-05f, 4.081390467e-05f, 4.031959856e-05f,
+3.982525819e-05f, 3.933088439e-05f, 3.883647804e-05f, 3.834203999e-05f, 3.784757109e-05f, 3.735307221e-05f, 3.685854420e-05f, 3.636398792e-05f, 3.586940422e-05f, 3.537479396e-05f,
+3.488015800e-05f, 3.438549720e-05f, 3.389081241e-05f, 3.339610450e-05f, 3.290137431e-05f, 3.240662271e-05f, 3.191185055e-05f, 3.141705869e-05f, 3.092224799e-05f, 3.042741930e-05f,
+2.993257348e-05f, 2.943771139e-05f, 2.894283388e-05f, 2.844794181e-05f, 2.795303605e-05f, 2.745811743e-05f, 2.696318683e-05f, 2.646824510e-05f, 2.597329310e-05f, 2.547833167e-05f,
+2.498336168e-05f, 2.448838399e-05f, 2.399339945e-05f, 2.349840892e-05f, 2.300341325e-05f, 2.250841331e-05f, 2.201340994e-05f, 2.151840400e-05f, 2.102339635e-05f, 2.052838785e-05f,
+2.003337935e-05f, 1.953837171e-05f, 1.904336578e-05f, 1.854836242e-05f, 1.805336249e-05f, 1.755836684e-05f, 1.706337632e-05f, 1.656839180e-05f, 1.607341412e-05f, 1.557844415e-05f,
+1.508348274e-05f, 1.458853074e-05f, 1.409358901e-05f, 1.359865840e-05f, 1.310373978e-05f, 1.260883399e-05f, 1.211394189e-05f, 1.161906433e-05f, 1.112420217e-05f, 1.062935626e-05f,
+1.013452747e-05f, 9.639716633e-06f, 9.144924616e-06f, 8.650152270e-06f, 8.155400450e-06f, 7.660670009e-06f, 7.165961802e-06f, 6.671276683e-06f, 6.176615505e-06f, 5.681979122e-06f,
+5.187368387e-06f, 4.692784154e-06f, 4.198227277e-06f, 3.703698609e-06f, 3.209199003e-06f, 2.714729311e-06f, 2.220290387e-06f, 1.725883084e-06f, 1.231508254e-06f, 7.371667506e-07f,
+2.428594252e-07f, -2.514128695e-07f, -7.456492812e-07f, -1.239848958e-06f, -1.734011047e-06f, -2.228134698e-06f, -2.722219058e-06f, -3.216263276e-06f, -3.710266500e-06f, -4.204227879e-06f,
+-4.698146562e-06f, -5.192021698e-06f, -5.685852436e-06f, -6.179637924e-06f, -6.673377313e-06f, -7.167069752e-06f, -7.660714390e-06f, -8.154310378e-06f, -8.647856865e-06f, -9.141353001e-06f,
+-9.634797937e-06f, -1.012819082e-05f, -1.062153081e-05f, -1.111481704e-05f, -1.160804868e-05f, -1.210122488e-05f, -1.259434477e-05f, -1.308740752e-05f, -1.358041228e-05f, -1.407335820e-05f,
+-1.456624442e-05f, -1.505907011e-05f, -1.555183441e-05f, -1.604453648e-05f, -1.653717547e-05f, -1.702975053e-05f, -1.752226081e-05f, -1.801470547e-05f, -1.850708366e-05f, -1.899939454e-05f,
+-1.949163725e-05f, -1.998381095e-05f, -2.047591480e-05f, -2.096794795e-05f, -2.145990955e-05f, -2.195179876e-05f, -2.244361472e-05f, -2.293535661e-05f, -2.342702357e-05f, -2.391861475e-05f,
+-2.441012932e-05f, -2.490156642e-05f, -2.539292522e-05f, -2.588420486e-05f, -2.637540451e-05f, -2.686652333e-05f, -2.735756046e-05f, -2.784851506e-05f, -2.833938630e-05f, -2.883017333e-05f,
+-2.932087530e-05f, -2.981149138e-05f, -3.030202072e-05f, -3.079246248e-05f, -3.128281581e-05f, -3.177307989e-05f, -3.226325385e-05f, -3.275333687e-05f, -3.324332811e-05f, -3.373322671e-05f,
+-3.422303185e-05f, -3.471274267e-05f, -3.520235835e-05f, -3.569187804e-05f, -3.618130090e-05f, -3.667062609e-05f, -3.715985278e-05f, -3.764898012e-05f, -3.813800727e-05f, -3.862693341e-05f,
+-3.911575767e-05f, -3.960447924e-05f, -4.009309728e-05f, -4.058161094e-05f, -4.107001938e-05f, -4.155832178e-05f, -4.204651729e-05f, -4.253460508e-05f, -4.302258431e-05f, -4.351045414e-05f,
+-4.399821374e-05f, -4.448586228e-05f, -4.497339892e-05f, -4.546082282e-05f, -4.594813314e-05f, -4.643532906e-05f, -4.692240975e-05f, -4.740937435e-05f, -4.789622205e-05f, -4.838295201e-05f,
+-4.886956339e-05f, -4.935605536e-05f, -4.984242710e-05f, -5.032867776e-05f, -5.081480651e-05f, -5.130081253e-05f, -5.178669498e-05f, -5.227245303e-05f, -5.275808585e-05f, -5.324359261e-05f,
+-5.372897247e-05f, -5.421422461e-05f, -5.469934820e-05f, -5.518434241e-05f, -5.566920640e-05f, -5.615393935e-05f, -5.663854044e-05f, -5.712300882e-05f, -5.760734368e-05f, -5.809154418e-05f,
+-5.857560950e-05f, -5.905953882e-05f, -5.954333129e-05f, -6.002698610e-05f, -6.051050242e-05f, -6.099387943e-05f, -6.147711629e-05f, -6.196021219e-05f, -6.244316629e-05f, -6.292597777e-05f,
+-6.340864582e-05f, -6.389116959e-05f, -6.437354827e-05f, -6.485578104e-05f, -6.533786707e-05f, -6.581980554e-05f, -6.630159563e-05f, -6.678323650e-05f, -6.726472735e-05f, -6.774606735e-05f,
+-6.822725567e-05f, -6.870829151e-05f, -6.918917402e-05f, -6.966990241e-05f, -7.015047583e-05f, -7.063089348e-05f, -7.111115454e-05f, -7.159125818e-05f, -7.207120359e-05f, -7.255098995e-05f,
+-7.303061644e-05f, -7.351008224e-05f, -7.398938653e-05f, -7.446852850e-05f, -7.494750733e-05f, -7.542632221e-05f, -7.590497231e-05f, -7.638345683e-05f, -7.686177494e-05f, -7.733992583e-05f,
+-7.781790869e-05f, -7.829572270e-05f, -7.877336704e-05f, -7.925084091e-05f, -7.972814349e-05f, -8.020527397e-05f, -8.068223153e-05f, -8.115901536e-05f, -8.163562466e-05f, -8.211205860e-05f,
+-8.258831638e-05f, -8.306439718e-05f, -8.354030020e-05f, -8.401602462e-05f, -8.449156964e-05f, -8.496693445e-05f, -8.544211823e-05f, -8.591712018e-05f, -8.639193949e-05f, -8.686657535e-05f,
+-8.734102696e-05f, -8.781529350e-05f, -8.828937417e-05f, -8.876326817e-05f, -8.923697468e-05f, -8.971049291e-05f, -9.018382204e-05f, -9.065696127e-05f, -9.112990980e-05f, -9.160266682e-05f,
+-9.207523153e-05f, -9.254760313e-05f, -9.301978080e-05f, -9.349176376e-05f, -9.396355120e-05f, -9.443514231e-05f, -9.490653630e-05f, -9.537773236e-05f, -9.584872969e-05f, -9.631952749e-05f,
+-9.679012497e-05f, -9.726052132e-05f, -9.773071575e-05f, -9.820070745e-05f, -9.867049563e-05f, -9.914007948e-05f, -9.960945822e-05f, -1.000786311e-04f, -1.005475972e-04f, -1.010163558e-04f,
+-1.014849061e-04f, -1.019532473e-04f, -1.024213786e-04f, -1.028892992e-04f, -1.033570084e-04f, -1.038245052e-04f, -1.042917890e-04f, -1.047588590e-04f, -1.052257143e-04f, -1.056923541e-04f,
+-1.061587777e-04f, -1.066249843e-04f, -1.070909730e-04f, -1.075567432e-04f, -1.080222939e-04f, -1.084876245e-04f, -1.089527341e-04f, -1.094176219e-04f, -1.098822871e-04f, -1.103467291e-04f,
+-1.108109469e-04f, -1.112749397e-04f, -1.117387069e-04f, -1.122022476e-04f, -1.126655610e-04f, -1.131286464e-04f, -1.135915029e-04f, -1.140541298e-04f, -1.145165263e-04f, -1.149786916e-04f,
+-1.154406249e-04f, -1.159023255e-04f, -1.163637925e-04f, -1.168250252e-04f, -1.172860228e-04f, -1.177467846e-04f, -1.182073096e-04f, -1.186675972e-04f, -1.191276467e-04f, -1.195874571e-04f,
+-1.200470277e-04f, -1.205063578e-04f, -1.209654465e-04f, -1.214242932e-04f, -1.218828969e-04f, -1.223412571e-04f, -1.227993727e-04f, -1.232572432e-04f, -1.237148677e-04f, -1.241722454e-04f,
+-1.246293756e-04f, -1.250862575e-04f, -1.255428903e-04f, -1.259992733e-04f, -1.264554056e-04f, -1.269112866e-04f, -1.273669154e-04f, -1.278222913e-04f, -1.282774135e-04f, -1.287322812e-04f,
+-1.291868937e-04f, -1.296412502e-04f, -1.300953499e-04f, -1.305491921e-04f, -1.310027760e-04f, -1.314561008e-04f, -1.319091658e-04f, -1.323619701e-04f, -1.328145132e-04f, -1.332667940e-04f,
+-1.337188120e-04f, -1.341705664e-04f, -1.346220563e-04f, -1.350732811e-04f, -1.355242399e-04f, -1.359749320e-04f, -1.364253567e-04f, -1.368755131e-04f, -1.373254006e-04f, -1.377750183e-04f,
+-1.382243655e-04f, -1.386734415e-04f, -1.391222455e-04f, -1.395707767e-04f, -1.400190343e-04f, -1.404670177e-04f, -1.409147261e-04f, -1.413621587e-04f, -1.418093147e-04f, -1.422561935e-04f,
+-1.427027942e-04f, -1.431491161e-04f, -1.435951584e-04f, -1.440409205e-04f, -1.444864015e-04f, -1.449316007e-04f, -1.453765173e-04f, -1.458211506e-04f, -1.462654999e-04f, -1.467095644e-04f,
+-1.471533434e-04f, -1.475968360e-04f, -1.480400416e-04f, -1.484829594e-04f, -1.489255887e-04f, -1.493679287e-04f, -1.498099787e-04f, -1.502517380e-04f, -1.506932057e-04f, -1.511343812e-04f,
+-1.515752637e-04f, -1.520158524e-04f, -1.524561467e-04f, -1.528961458e-04f, -1.533358489e-04f, -1.537752553e-04f, -1.542143643e-04f, -1.546531751e-04f, -1.550916871e-04f, -1.555298994e-04f,
+-1.559678113e-04f, -1.564054220e-04f, -1.568427310e-04f, -1.572797373e-04f, -1.577164404e-04f, -1.581528394e-04f, -1.585889336e-04f, -1.590247222e-04f, -1.594602047e-04f, -1.598953801e-04f,
+-1.603302479e-04f, -1.607648072e-04f, -1.611990573e-04f, -1.616329976e-04f, -1.620666272e-04f, -1.624999455e-04f, -1.629329516e-04f, -1.633656450e-04f, -1.637980249e-04f, -1.642300905e-04f,
+-1.646618411e-04f, -1.650932760e-04f, -1.655243944e-04f, -1.659551957e-04f, -1.663856792e-04f, -1.668158440e-04f, -1.672456896e-04f, -1.676752151e-04f, -1.681044198e-04f, -1.685333030e-04f,
+-1.689618641e-04f, -1.693901023e-04f, -1.698180168e-04f, -1.702456070e-04f, -1.706728721e-04f, -1.710998114e-04f, -1.715264242e-04f, -1.719527099e-04f, -1.723786676e-04f, -1.728042966e-04f,
+-1.732295964e-04f, -1.736545660e-04f, -1.740792049e-04f, -1.745035124e-04f, -1.749274876e-04f, -1.753511299e-04f, -1.757744386e-04f, -1.761974130e-04f, -1.766200524e-04f, -1.770423561e-04f,
+-1.774643233e-04f, -1.778859533e-04f, -1.783072456e-04f, -1.787281992e-04f, -1.791488137e-04f, -1.795690881e-04f, -1.799890219e-04f, -1.804086144e-04f, -1.808278647e-04f, -1.812467723e-04f,
+-1.816653365e-04f, -1.820835565e-04f, -1.825014316e-04f, -1.829189612e-04f, -1.833361445e-04f, -1.837529808e-04f, -1.841694695e-04f, -1.845856099e-04f, -1.850014012e-04f, -1.854168428e-04f,
+-1.858319340e-04f, -1.862466740e-04f, -1.866610623e-04f, -1.870750980e-04f, -1.874887806e-04f, -1.879021092e-04f, -1.883150833e-04f, -1.887277021e-04f, -1.891399650e-04f, -1.895518713e-04f,
+-1.899634202e-04f, -1.903746111e-04f, -1.907854434e-04f, -1.911959162e-04f, -1.916060290e-04f, -1.920157810e-04f, -1.924251716e-04f, -1.928342001e-04f, -1.932428659e-04f, -1.936511681e-04f,
+-1.940591062e-04f, -1.944666794e-04f, -1.948738872e-04f, -1.952807288e-04f, -1.956872034e-04f, -1.960933106e-04f, -1.964990495e-04f, -1.969044196e-04f, -1.973094201e-04f, -1.977140503e-04f,
+-1.981183096e-04f, -1.985221974e-04f, -1.989257128e-04f, -1.993288554e-04f, -1.997316243e-04f, -2.001340190e-04f, -2.005360388e-04f, -2.009376829e-04f, -2.013389508e-04f, -2.017398417e-04f,
+-2.021403550e-04f, -2.025404901e-04f, -2.029402462e-04f, -2.033396227e-04f, -2.037386189e-04f, -2.041372342e-04f, -2.045354680e-04f, -2.049333194e-04f, -2.053307880e-04f, -2.057278730e-04f,
+-2.061245738e-04f, -2.065208896e-04f, -2.069168200e-04f, -2.073123641e-04f, -2.077075214e-04f, -2.081022911e-04f, -2.084966727e-04f, -2.088906655e-04f, -2.092842688e-04f, -2.096774819e-04f,
+-2.100703043e-04f, -2.104627353e-04f, -2.108547741e-04f, -2.112464202e-04f, -2.116376730e-04f, -2.120285317e-04f, -2.124189958e-04f, -2.128090645e-04f, -2.131987372e-04f, -2.135880133e-04f,
+-2.139768922e-04f, -2.143653732e-04f, -2.147534556e-04f, -2.151411388e-04f, -2.155284222e-04f, -2.159153051e-04f, -2.163017869e-04f, -2.166878670e-04f, -2.170735447e-04f, -2.174588193e-04f,
+-2.178436903e-04f, -2.182281569e-04f, -2.186122187e-04f, -2.189958748e-04f, -2.193791248e-04f, -2.197619679e-04f, -2.201444035e-04f, -2.205264310e-04f, -2.209080498e-04f, -2.212892592e-04f,
+-2.216700586e-04f, -2.220504474e-04f, -2.224304250e-04f, -2.228099906e-04f, -2.231891438e-04f, -2.235678838e-04f, -2.239462100e-04f, -2.243241219e-04f, -2.247016187e-04f, -2.250787000e-04f,
+-2.254553649e-04f, -2.258316130e-04f, -2.262074436e-04f, -2.265828561e-04f, -2.269578498e-04f, -2.273324242e-04f, -2.277065786e-04f, -2.280803125e-04f, -2.284536251e-04f, -2.288265159e-04f,
+-2.291989843e-04f, -2.295710296e-04f, -2.299426512e-04f, -2.303138486e-04f, -2.306846211e-04f, -2.310549681e-04f, -2.314248890e-04f, -2.317943832e-04f, -2.321634501e-04f, -2.325320890e-04f,
+-2.329002994e-04f, -2.332680807e-04f, -2.336354322e-04f, -2.340023534e-04f, -2.343688436e-04f, -2.347349022e-04f, -2.351005287e-04f, -2.354657225e-04f, -2.358304828e-04f, -2.361948092e-04f,
+-2.365587011e-04f, -2.369221578e-04f, -2.372851787e-04f, -2.376477633e-04f, -2.380099109e-04f, -2.383716210e-04f, -2.387328929e-04f, -2.390937262e-04f, -2.394541201e-04f, -2.398140741e-04f,
+-2.401735875e-04f, -2.405326599e-04f, -2.408912906e-04f, -2.412494791e-04f, -2.416072247e-04f, -2.419645268e-04f, -2.423213849e-04f, -2.426777984e-04f, -2.430337666e-04f, -2.433892891e-04f,
+-2.437443653e-04f, -2.440989944e-04f, -2.444531761e-04f, -2.448069096e-04f, -2.451601945e-04f, -2.455130300e-04f, -2.458654158e-04f, -2.462173511e-04f, -2.465688354e-04f, -2.469198681e-04f,
+-2.472704487e-04f, -2.476205765e-04f, -2.479702511e-04f, -2.483194717e-04f, -2.486682380e-04f, -2.490165492e-04f, -2.493644049e-04f, -2.497118044e-04f, -2.500587472e-04f, -2.504052327e-04f,
+-2.507512603e-04f, -2.510968295e-04f, -2.514419398e-04f, -2.517865905e-04f, -2.521307811e-04f, -2.524745110e-04f, -2.528177798e-04f, -2.531605867e-04f, -2.535029312e-04f, -2.538448129e-04f,
+-2.541862311e-04f, -2.545271852e-04f, -2.548676748e-04f, -2.552076992e-04f, -2.555472580e-04f, -2.558863505e-04f, -2.562249762e-04f, -2.565631346e-04f, -2.569008250e-04f, -2.572380470e-04f,
+-2.575748001e-04f, -2.579110835e-04f, -2.582468969e-04f, -2.585822396e-04f, -2.589171111e-04f, -2.592515109e-04f, -2.595854385e-04f, -2.599188932e-04f, -2.602518745e-04f, -2.605843819e-04f,
+-2.609164149e-04f, -2.612479729e-04f, -2.615790554e-04f, -2.619096618e-04f, -2.622397916e-04f, -2.625694442e-04f, -2.628986192e-04f, -2.632273160e-04f, -2.635555340e-04f, -2.638832728e-04f,
+-2.642105317e-04f, -2.645373103e-04f, -2.648636080e-04f, -2.651894244e-04f, -2.655147588e-04f, -2.658396107e-04f, -2.661639797e-04f, -2.664878651e-04f, -2.668112665e-04f, -2.671341834e-04f,
+-2.674566152e-04f, -2.677785613e-04f, -2.681000214e-04f, -2.684209947e-04f, -2.687414810e-04f, -2.690614795e-04f, -2.693809898e-04f, -2.697000114e-04f, -2.700185438e-04f, -2.703365864e-04f,
+-2.706541387e-04f, -2.709712002e-04f, -2.712877705e-04f, -2.716038489e-04f, -2.719194350e-04f, -2.722345283e-04f, -2.725491283e-04f, -2.728632343e-04f, -2.731768461e-04f, -2.734899630e-04f,
+-2.738025845e-04f, -2.741147101e-04f, -2.744263393e-04f, -2.747374717e-04f, -2.750481067e-04f, -2.753582438e-04f, -2.756678825e-04f, -2.759770223e-04f, -2.762856628e-04f, -2.765938033e-04f,
+-2.769014435e-04f, -2.772085828e-04f, -2.775152208e-04f, -2.778213568e-04f, -2.781269905e-04f, -2.784321214e-04f, -2.787367489e-04f, -2.790408726e-04f, -2.793444920e-04f, -2.796476066e-04f,
+-2.799502158e-04f, -2.802523193e-04f, -2.805539165e-04f, -2.808550070e-04f, -2.811555902e-04f, -2.814556657e-04f, -2.817552329e-04f, -2.820542915e-04f, -2.823528410e-04f, -2.826508807e-04f,
+-2.829484104e-04f, -2.832454294e-04f, -2.835419374e-04f, -2.838379338e-04f, -2.841334182e-04f, -2.844283901e-04f, -2.847228490e-04f, -2.850167944e-04f, -2.853102259e-04f, -2.856031430e-04f,
+-2.858955453e-04f, -2.861874322e-04f, -2.864788034e-04f, -2.867696582e-04f, -2.870599964e-04f, -2.873498173e-04f, -2.876391206e-04f, -2.879279057e-04f, -2.882161723e-04f, -2.885039198e-04f,
+-2.887911478e-04f, -2.890778559e-04f, -2.893640435e-04f, -2.896497102e-04f, -2.899348557e-04f, -2.902194793e-04f, -2.905035806e-04f, -2.907871593e-04f, -2.910702148e-04f, -2.913527467e-04f,
+-2.916347545e-04f, -2.919162378e-04f, -2.921971962e-04f, -2.924776292e-04f, -2.927575363e-04f, -2.930369171e-04f, -2.933157712e-04f, -2.935940981e-04f, -2.938718973e-04f, -2.941491685e-04f,
+-2.944259112e-04f, -2.947021249e-04f, -2.949778092e-04f, -2.952529637e-04f, -2.955275879e-04f, -2.958016814e-04f, -2.960752438e-04f, -2.963482745e-04f, -2.966207733e-04f, -2.968927396e-04f,
+-2.971641731e-04f, -2.974350732e-04f, -2.977054396e-04f, -2.979752718e-04f, -2.982445695e-04f, -2.985133321e-04f, -2.987815592e-04f, -2.990492505e-04f, -2.993164055e-04f, -2.995830238e-04f,
+-2.998491049e-04f, -3.001146485e-04f, -3.003796540e-04f, -3.006441212e-04f, -3.009080495e-04f, -3.011714386e-04f, -3.014342881e-04f, -3.016965974e-04f, -3.019583663e-04f, -3.022195943e-04f,
+-3.024802809e-04f, -3.027404259e-04f, -3.030000286e-04f, -3.032590889e-04f, -3.035176062e-04f, -3.037755801e-04f, -3.040330102e-04f, -3.042898962e-04f, -3.045462376e-04f, -3.048020340e-04f,
+-3.050572850e-04f, -3.053119902e-04f, -3.055661492e-04f, -3.058197616e-04f, -3.060728271e-04f, -3.063253451e-04f, -3.065773154e-04f, -3.068287374e-04f, -3.070796109e-04f, -3.073299354e-04f,
+-3.075797106e-04f, -3.078289360e-04f, -3.080776112e-04f, -3.083257359e-04f, -3.085733096e-04f, -3.088203321e-04f, -3.090668028e-04f, -3.093127214e-04f, -3.095580876e-04f, -3.098029009e-04f,
+-3.100471609e-04f, -3.102908674e-04f, -3.105340198e-04f, -3.107766178e-04f, -3.110186610e-04f, -3.112601491e-04f, -3.115010817e-04f, -3.117414583e-04f, -3.119812787e-04f, -3.122205424e-04f,
+-3.124592491e-04f, -3.126973984e-04f, -3.129349899e-04f, -3.131720233e-04f, -3.134084982e-04f, -3.136444142e-04f, -3.138797709e-04f, -3.141145680e-04f, -3.143488051e-04f, -3.145824819e-04f,
+-3.148155980e-04f, -3.150481530e-04f, -3.152801466e-04f, -3.155115783e-04f, -3.157424480e-04f, -3.159727551e-04f, -3.162024993e-04f, -3.164316803e-04f, -3.166602977e-04f, -3.168883512e-04f,
+-3.171158404e-04f, -3.173427649e-04f, -3.175691244e-04f, -3.177949186e-04f, -3.180201471e-04f, -3.182448096e-04f, -3.184689056e-04f, -3.186924349e-04f, -3.189153972e-04f, -3.191377920e-04f,
+-3.193596190e-04f, -3.195808779e-04f, -3.198015683e-04f, -3.200216900e-04f, -3.202412425e-04f, -3.204602255e-04f, -3.206786387e-04f, -3.208964817e-04f, -3.211137543e-04f, -3.213304560e-04f,
+-3.215465866e-04f, -3.217621457e-04f, -3.219771330e-04f, -3.221915481e-04f, -3.224053908e-04f, -3.226186606e-04f, -3.228313573e-04f, -3.230434805e-04f, -3.232550300e-04f, -3.234660053e-04f,
+-3.236764062e-04f, -3.238862323e-04f, -3.240954833e-04f, -3.243041590e-04f, -3.245122589e-04f, -3.247197828e-04f, -3.249267303e-04f, -3.251331012e-04f, -3.253388951e-04f, -3.255441116e-04f,
+-3.257487506e-04f, -3.259528116e-04f, -3.261562944e-04f, -3.263591986e-04f, -3.265615240e-04f, -3.267632702e-04f, -3.269644369e-04f, -3.271650239e-04f, -3.273650307e-04f, -3.275644572e-04f,
+-3.277633030e-04f, -3.279615678e-04f, -3.281592513e-04f, -3.283563531e-04f, -3.285528732e-04f, -3.287488110e-04f, -3.289441663e-04f, -3.291389388e-04f, -3.293331283e-04f, -3.295267344e-04f,
+-3.297197568e-04f, -3.299121952e-04f, -3.301040494e-04f, -3.302953191e-04f, -3.304860039e-04f, -3.306761037e-04f, -3.308656180e-04f, -3.310545466e-04f, -3.312428893e-04f, -3.314306457e-04f,
+-3.316178156e-04f, -3.318043986e-04f, -3.319903946e-04f, -3.321758032e-04f, -3.323606241e-04f, -3.325448571e-04f, -3.327285019e-04f, -3.329115582e-04f, -3.330940257e-04f, -3.332759042e-04f,
+-3.334571934e-04f, -3.336378930e-04f, -3.338180028e-04f, -3.339975224e-04f, -3.341764517e-04f, -3.343547903e-04f, -3.345325381e-04f, -3.347096946e-04f, -3.348862597e-04f, -3.350622331e-04f,
+-3.352376145e-04f, -3.354124037e-04f, -3.355866004e-04f, -3.357602043e-04f, -3.359332152e-04f, -3.361056329e-04f, -3.362774571e-04f, -3.364486875e-04f, -3.366193239e-04f, -3.367893660e-04f,
+-3.369588135e-04f, -3.371276663e-04f, -3.372959241e-04f, -3.374635866e-04f, -3.376306535e-04f, -3.377971247e-04f, -3.379629999e-04f, -3.381282789e-04f, -3.382929613e-04f, -3.384570470e-04f,
+-3.386205357e-04f, -3.387834272e-04f, -3.389457212e-04f, -3.391074175e-04f, -3.392685159e-04f, -3.394290161e-04f, -3.395889180e-04f, -3.397482211e-04f, -3.399069255e-04f, -3.400650307e-04f,
+-3.402225365e-04f, -3.403794429e-04f, -3.405357494e-04f, -3.406914559e-04f, -3.408465622e-04f, -3.410010680e-04f, -3.411549731e-04f, -3.413082773e-04f, -3.414609804e-04f, -3.416130821e-04f,
+-3.417645822e-04f, -3.419154805e-04f, -3.420657769e-04f, -3.422154710e-04f, -3.423645626e-04f, -3.425130516e-04f, -3.426609377e-04f, -3.428082208e-04f, -3.429549005e-04f, -3.431009768e-04f,
+-3.432464493e-04f, -3.433913179e-04f, -3.435355824e-04f, -3.436792425e-04f, -3.438222981e-04f, -3.439647489e-04f, -3.441065949e-04f, -3.442478356e-04f, -3.443884710e-04f, -3.445285009e-04f,
+-3.446679250e-04f, -3.448067432e-04f, -3.449449552e-04f, -3.450825609e-04f, -3.452195600e-04f, -3.453559525e-04f, -3.454917380e-04f, -3.456269164e-04f, -3.457614875e-04f, -3.458954512e-04f,
+-3.460288071e-04f, -3.461615552e-04f, -3.462936953e-04f, -3.464252271e-04f, -3.465561505e-04f, -3.466864653e-04f, -3.468161714e-04f, -3.469452684e-04f, -3.470737564e-04f, -3.472016350e-04f,
+-3.473289041e-04f, -3.474555636e-04f, -3.475816132e-04f, -3.477070528e-04f, -3.478318822e-04f, -3.479561012e-04f, -3.480797097e-04f, -3.482027075e-04f, -3.483250945e-04f, -3.484468703e-04f,
+-3.485680350e-04f, -3.486885883e-04f, -3.488085301e-04f, -3.489278602e-04f, -3.490465784e-04f, -3.491646846e-04f, -3.492821786e-04f, -3.493990602e-04f, -3.495153294e-04f, -3.496309859e-04f,
+-3.497460296e-04f, -3.498604603e-04f, -3.499742779e-04f, -3.500874822e-04f, -3.502000731e-04f, -3.503120504e-04f, -3.504234140e-04f, -3.505341638e-04f, -3.506442995e-04f, -3.507538210e-04f,
+-3.508627282e-04f, -3.509710210e-04f, -3.510786992e-04f, -3.511857626e-04f, -3.512922111e-04f, -3.513980446e-04f, -3.515032630e-04f, -3.516078661e-04f, -3.517118537e-04f, -3.518152258e-04f,
+-3.519179821e-04f, -3.520201226e-04f, -3.521216472e-04f, -3.522225556e-04f, -3.523228478e-04f, -3.524225237e-04f, -3.525215830e-04f, -3.526200258e-04f, -3.527178518e-04f, -3.528150609e-04f,
+-3.529116531e-04f, -3.530076281e-04f, -3.531029860e-04f, -3.531977264e-04f, -3.532918494e-04f, -3.533853548e-04f, -3.534782425e-04f, -3.535705123e-04f, -3.536621643e-04f, -3.537531981e-04f,
+-3.538436138e-04f, -3.539334113e-04f, -3.540225903e-04f, -3.541111508e-04f, -3.541990928e-04f, -3.542864160e-04f, -3.543731204e-04f, -3.544592059e-04f, -3.545446723e-04f, -3.546295196e-04f,
+-3.547137477e-04f, -3.547973565e-04f, -3.548803458e-04f, -3.549627155e-04f, -3.550444657e-04f, -3.551255961e-04f, -3.552061067e-04f, -3.552859973e-04f, -3.553652680e-04f, -3.554439185e-04f,
+-3.555219489e-04f, -3.555993589e-04f, -3.556761486e-04f, -3.557523179e-04f, -3.558278665e-04f, -3.559027946e-04f, -3.559771019e-04f, -3.560507884e-04f, -3.561238540e-04f, -3.561962987e-04f,
+-3.562681223e-04f, -3.563393248e-04f, -3.564099060e-04f, -3.564798660e-04f, -3.565492047e-04f, -3.566179219e-04f, -3.566860175e-04f, -3.567534916e-04f, -3.568203441e-04f, -3.568865748e-04f,
+-3.569521837e-04f, -3.570171708e-04f, -3.570815359e-04f, -3.571452790e-04f, -3.572084001e-04f, -3.572708990e-04f, -3.573327758e-04f, -3.573940303e-04f, -3.574546625e-04f, -3.575146723e-04f,
+-3.575740597e-04f, -3.576328246e-04f, -3.576909669e-04f, -3.577484866e-04f, -3.578053837e-04f, -3.578616581e-04f, -3.579173097e-04f, -3.579723385e-04f, -3.580267444e-04f, -3.580805275e-04f,
+-3.581336875e-04f, -3.581862246e-04f, -3.582381386e-04f, -3.582894294e-04f, -3.583400972e-04f, -3.583901418e-04f, -3.584395631e-04f, -3.584883612e-04f, -3.585365359e-04f, -3.585840874e-04f,
+-3.586310154e-04f, -3.586773200e-04f, -3.587230012e-04f, -3.587680589e-04f, -3.588124930e-04f, -3.588563036e-04f, -3.588994906e-04f, -3.589420540e-04f, -3.589839938e-04f, -3.590253099e-04f,
+-3.590660023e-04f, -3.591060710e-04f, -3.591455159e-04f, -3.591843371e-04f, -3.592225345e-04f, -3.592601080e-04f, -3.592970578e-04f, -3.593333836e-04f, -3.593690857e-04f, -3.594041638e-04f,
+-3.594386180e-04f, -3.594724483e-04f, -3.595056547e-04f, -3.595382372e-04f, -3.595701956e-04f, -3.596015302e-04f, -3.596322407e-04f, -3.596623273e-04f, -3.596917899e-04f, -3.597206285e-04f,
+-3.597488431e-04f, -3.597764337e-04f, -3.598034003e-04f, -3.598297429e-04f, -3.598554615e-04f, -3.598805560e-04f, -3.599050266e-04f, -3.599288732e-04f, -3.599520958e-04f, -3.599746944e-04f,
+-3.599966690e-04f, -3.600180196e-04f, -3.600387462e-04f, -3.600588489e-04f, -3.600783276e-04f, -3.600971824e-04f, -3.601154133e-04f, -3.601330202e-04f, -3.601500033e-04f, -3.601663625e-04f,
+-3.601820978e-04f, -3.601972092e-04f, -3.602116968e-04f, -3.602255606e-04f, -3.602388007e-04f, -3.602514169e-04f, -3.602634094e-04f, -3.602747782e-04f, -3.602855233e-04f, -3.602956447e-04f,
+-3.603051425e-04f, -3.603140167e-04f, -3.603222672e-04f, -3.603298943e-04f, -3.603368978e-04f, -3.603432778e-04f, -3.603490344e-04f, -3.603541676e-04f, -3.603586773e-04f, -3.603625638e-04f,
+-3.603658269e-04f, -3.603684667e-04f, -3.603704834e-04f, -3.603718768e-04f, -3.603726471e-04f, -3.603727943e-04f, -3.603723185e-04f, -3.603712196e-04f, -3.603694978e-04f, -3.603671531e-04f,
+-3.603641855e-04f, -3.603605951e-04f, -3.603563819e-04f, -3.603515460e-04f, -3.603460875e-04f, -3.603400063e-04f, -3.603333026e-04f, -3.603259764e-04f, -3.603180278e-04f, -3.603094568e-04f,
+-3.603002635e-04f, -3.602904479e-04f, -3.602800102e-04f, -3.602689503e-04f, -3.602572684e-04f, -3.602449644e-04f, -3.602320385e-04f, -3.602184908e-04f, -3.602043212e-04f, -3.601895299e-04f,
+-3.601741170e-04f, -3.601580825e-04f, -3.601414264e-04f, -3.601241490e-04f, -3.601062501e-04f, -3.600877300e-04f, -3.600685886e-04f, -3.600488261e-04f, -3.600284426e-04f, -3.600074381e-04f,
+-3.599858127e-04f, -3.599635664e-04f, -3.599406995e-04f, -3.599172119e-04f, -3.598931037e-04f, -3.598683751e-04f, -3.598430261e-04f, -3.598170568e-04f, -3.597904672e-04f, -3.597632576e-04f,
+-3.597354279e-04f, -3.597069783e-04f, -3.596779089e-04f, -3.596482197e-04f, -3.596179109e-04f, -3.595869825e-04f, -3.595554347e-04f, -3.595232675e-04f, -3.594904811e-04f, -3.594570755e-04f,
+-3.594230509e-04f, -3.593884073e-04f, -3.593531449e-04f, -3.593172638e-04f, -3.592807640e-04f, -3.592436457e-04f, -3.592059090e-04f, -3.591675540e-04f, -3.591285808e-04f, -3.590889896e-04f,
+-3.590487803e-04f, -3.590079532e-04f, -3.589665084e-04f, -3.589244460e-04f, -3.588817660e-04f, -3.588384687e-04f, -3.587945541e-04f, -3.587500224e-04f, -3.587048737e-04f, -3.586591080e-04f,
+-3.586127256e-04f, -3.585657265e-04f, -3.585181109e-04f, -3.584698789e-04f, -3.584210307e-04f, -3.583715662e-04f, -3.583214858e-04f, -3.582707895e-04f, -3.582194775e-04f, -3.581675498e-04f,
+-3.581150067e-04f, -3.580618482e-04f, -3.580080745e-04f, -3.579536857e-04f, -3.578986820e-04f, -3.578430636e-04f, -3.577868304e-04f, -3.577299828e-04f, -3.576725207e-04f, -3.576144445e-04f,
+-3.575557542e-04f, -3.574964499e-04f, -3.574365319e-04f, -3.573760002e-04f, -3.573148550e-04f, -3.572530965e-04f, -3.571907248e-04f, -3.571277401e-04f, -3.570641425e-04f, -3.569999321e-04f,
+-3.569351092e-04f, -3.568696738e-04f, -3.568036263e-04f, -3.567369666e-04f, -3.566696949e-04f, -3.566018115e-04f, -3.565333164e-04f, -3.564642099e-04f, -3.563944921e-04f, -3.563241632e-04f,
+-3.562532233e-04f, -3.561816727e-04f, -3.561095113e-04f, -3.560367396e-04f, -3.559633575e-04f, -3.558893653e-04f, -3.558147632e-04f, -3.557395513e-04f, -3.556637298e-04f, -3.555872989e-04f,
+-3.555102587e-04f, -3.554326095e-04f, -3.553543514e-04f, -3.552754845e-04f, -3.551960091e-04f, -3.551159254e-04f, -3.550352335e-04f, -3.549539336e-04f, -3.548720260e-04f, -3.547895107e-04f,
+-3.547063879e-04f, -3.546226580e-04f, -3.545383209e-04f, -3.544533771e-04f, -3.543678265e-04f, -3.542816695e-04f, -3.541949062e-04f, -3.541075367e-04f, -3.540195614e-04f, -3.539309804e-04f,
+-3.538417939e-04f, -3.537520021e-04f, -3.536616051e-04f, -3.535706033e-04f, -3.534789967e-04f, -3.533867857e-04f, -3.532939703e-04f, -3.532005508e-04f, -3.531065275e-04f, -3.530119004e-04f,
+-3.529166699e-04f, -3.528208361e-04f, -3.527243993e-04f, -3.526273596e-04f, -3.525297172e-04f, -3.524314725e-04f, -3.523326255e-04f, -3.522331765e-04f, -3.521331257e-04f, -3.520324734e-04f,
+-3.519312197e-04f, -3.518293649e-04f, -3.517269091e-04f, -3.516238527e-04f, -3.515201958e-04f, -3.514159387e-04f, -3.513110815e-04f, -3.512056245e-04f, -3.510995680e-04f, -3.509929121e-04f,
+-3.508856571e-04f, -3.507778032e-04f, -3.506693507e-04f, -3.505602997e-04f, -3.504506505e-04f, -3.503404034e-04f, -3.502295585e-04f, -3.501181161e-04f, -3.500060765e-04f, -3.498934398e-04f,
+-3.497802064e-04f, -3.496663764e-04f, -3.495519501e-04f, -3.494369278e-04f, -3.493213096e-04f, -3.492050958e-04f, -3.490882867e-04f, -3.489708825e-04f, -3.488528835e-04f, -3.487342899e-04f,
+-3.486151019e-04f, -3.484953198e-04f, -3.483749439e-04f, -3.482539744e-04f, -3.481324115e-04f, -3.480102555e-04f, -3.478875067e-04f, -3.477641653e-04f, -3.476402316e-04f, -3.475157058e-04f,
+-3.473905881e-04f, -3.472648790e-04f, -3.471385785e-04f, -3.470116870e-04f, -3.468842047e-04f, -3.467561320e-04f, -3.466274689e-04f, -3.464982159e-04f, -3.463683732e-04f, -3.462379411e-04f,
+-3.461069197e-04f, -3.459753095e-04f, -3.458431106e-04f, -3.457103233e-04f, -3.455769480e-04f, -3.454429848e-04f, -3.453084341e-04f, -3.451732961e-04f, -3.450375711e-04f, -3.449012594e-04f,
+-3.447643613e-04f, -3.446268770e-04f, -3.444888068e-04f, -3.443501510e-04f, -3.442109099e-04f, -3.440710838e-04f, -3.439306729e-04f, -3.437896775e-04f, -3.436480980e-04f, -3.435059346e-04f,
+-3.433631875e-04f, -3.432198572e-04f, -3.430759438e-04f, -3.429314477e-04f, -3.427863691e-04f, -3.426407084e-04f, -3.424944659e-04f, -3.423476417e-04f, -3.422002364e-04f, -3.420522500e-04f,
+-3.419036830e-04f, -3.417545356e-04f, -3.416048081e-04f, -3.414545009e-04f, -3.413036142e-04f, -3.411521483e-04f, -3.410001036e-04f, -3.408474803e-04f, -3.406942788e-04f, -3.405404993e-04f,
+-3.403861421e-04f, -3.402312077e-04f, -3.400756962e-04f, -3.399196081e-04f, -3.397629435e-04f, -3.396057028e-04f, -3.394478864e-04f, -3.392894945e-04f, -3.391305275e-04f, -3.389709856e-04f,
+-3.388108693e-04f, -3.386501788e-04f, -3.384889144e-04f, -3.383270764e-04f, -3.381646652e-04f, -3.380016811e-04f, -3.378381245e-04f, -3.376739955e-04f, -3.375092947e-04f, -3.373440222e-04f,
+-3.371781785e-04f, -3.370117638e-04f, -3.368447785e-04f, -3.366772229e-04f, -3.365090973e-04f, -3.363404021e-04f, -3.361711377e-04f, -3.360013042e-04f, -3.358309021e-04f, -3.356599318e-04f,
+-3.354883935e-04f, -3.353162875e-04f, -3.351436143e-04f, -3.349703742e-04f, -3.347965674e-04f, -3.346221944e-04f, -3.344472555e-04f, -3.342717510e-04f, -3.340956813e-04f, -3.339190467e-04f,
+-3.337418476e-04f, -3.335640843e-04f, -3.333857572e-04f, -3.332068665e-04f, -3.330274128e-04f, -3.328473962e-04f, -3.326668172e-04f, -3.324856761e-04f, -3.323039733e-04f, -3.321217091e-04f,
+-3.319388839e-04f, -3.317554981e-04f, -3.315715519e-04f, -3.313870458e-04f, -3.312019801e-04f, -3.310163552e-04f, -3.308301714e-04f, -3.306434291e-04f, -3.304561287e-04f, -3.302682705e-04f,
+-3.300798548e-04f, -3.298908822e-04f, -3.297013529e-04f, -3.295112672e-04f, -3.293206257e-04f, -3.291294285e-04f, -3.289376762e-04f, -3.287453690e-04f, -3.285525074e-04f, -3.283590917e-04f,
+-3.281651223e-04f, -3.279705996e-04f, -3.277755239e-04f, -3.275798956e-04f, -3.273837152e-04f, -3.271869829e-04f, -3.269896992e-04f, -3.267918644e-04f, -3.265934789e-04f, -3.263945432e-04f,
+-3.261950576e-04f, -3.259950224e-04f, -3.257944381e-04f, -3.255933050e-04f, -3.253916236e-04f, -3.251893942e-04f, -3.249866172e-04f, -3.247832930e-04f, -3.245794220e-04f, -3.243750046e-04f,
+-3.241700412e-04f, -3.239645322e-04f, -3.237584779e-04f, -3.235518788e-04f, -3.233447352e-04f, -3.231370476e-04f, -3.229288164e-04f, -3.227200419e-04f, -3.225107246e-04f, -3.223008649e-04f,
+-3.220904631e-04f, -3.218795196e-04f, -3.216680350e-04f, -3.214560095e-04f, -3.212434436e-04f, -3.210303376e-04f, -3.208166921e-04f, -3.206025074e-04f, -3.203877838e-04f, -3.201725219e-04f,
+-3.199567221e-04f, -3.197403846e-04f, -3.195235101e-04f, -3.193060988e-04f, -3.190881512e-04f, -3.188696677e-04f, -3.186506487e-04f, -3.184310946e-04f, -3.182110059e-04f, -3.179903830e-04f,
+-3.177692263e-04f, -3.175475362e-04f, -3.173253131e-04f, -3.171025575e-04f, -3.168792697e-04f, -3.166554503e-04f, -3.164310996e-04f, -3.162062181e-04f, -3.159808061e-04f, -3.157548642e-04f,
+-3.155283927e-04f, -3.153013921e-04f, -3.150738628e-04f, -3.148458052e-04f, -3.146172199e-04f, -3.143881071e-04f, -3.141584673e-04f, -3.139283010e-04f, -3.136976086e-04f, -3.134663906e-04f,
+-3.132346474e-04f, -3.130023793e-04f, -3.127695870e-04f, -3.125362707e-04f, -3.123024310e-04f, -3.120680683e-04f, -3.118331830e-04f, -3.115977756e-04f, -3.113618465e-04f, -3.111253961e-04f,
+-3.108884250e-04f, -3.106509335e-04f, -3.104129222e-04f, -3.101743914e-04f, -3.099353416e-04f, -3.096957732e-04f, -3.094556868e-04f, -3.092150827e-04f, -3.089739615e-04f, -3.087323235e-04f,
+-3.084901692e-04f, -3.082474991e-04f, -3.080043137e-04f, -3.077606133e-04f, -3.075163985e-04f, -3.072716697e-04f, -3.070264274e-04f, -3.067806721e-04f, -3.065344041e-04f, -3.062876240e-04f,
+-3.060403322e-04f, -3.057925292e-04f, -3.055442154e-04f, -3.052953914e-04f, -3.050460576e-04f, -3.047962144e-04f, -3.045458623e-04f, -3.042950019e-04f, -3.040436335e-04f, -3.037917576e-04f,
+-3.035393748e-04f, -3.032864854e-04f, -3.030330900e-04f, -3.027791890e-04f, -3.025247830e-04f, -3.022698723e-04f, -3.020144575e-04f, -3.017585390e-04f, -3.015021173e-04f, -3.012451929e-04f,
+-3.009877663e-04f, -3.007298380e-04f, -3.004714084e-04f, -3.002124781e-04f, -2.999530474e-04f, -2.996931169e-04f, -2.994326872e-04f, -2.991717585e-04f, -2.989103316e-04f, -2.986484068e-04f,
+-2.983859846e-04f, -2.981230655e-04f, -2.978596501e-04f, -2.975957387e-04f, -2.973313320e-04f, -2.970664303e-04f, -2.968010342e-04f, -2.965351442e-04f, -2.962687608e-04f, -2.960018844e-04f,
+-2.957345156e-04f, -2.954666549e-04f, -2.951983027e-04f, -2.949294596e-04f, -2.946601261e-04f, -2.943903026e-04f, -2.941199897e-04f, -2.938491879e-04f, -2.935778976e-04f, -2.933061194e-04f,
+-2.930338538e-04f, -2.927611013e-04f, -2.924878624e-04f, -2.922141375e-04f, -2.919399273e-04f, -2.916652322e-04f, -2.913900528e-04f, -2.911143895e-04f, -2.908382428e-04f, -2.905616133e-04f,
+-2.902845015e-04f, -2.900069079e-04f, -2.897288330e-04f, -2.894502773e-04f, -2.891712414e-04f, -2.888917257e-04f, -2.886117308e-04f, -2.883312572e-04f, -2.880503054e-04f, -2.877688760e-04f,
+-2.874869694e-04f, -2.872045862e-04f, -2.869217269e-04f, -2.866383920e-04f, -2.863545820e-04f, -2.860702976e-04f, -2.857855391e-04f, -2.855003072e-04f, -2.852146023e-04f, -2.849284250e-04f,
+-2.846417758e-04f, -2.843546553e-04f, -2.840670639e-04f, -2.837790023e-04f, -2.834904709e-04f, -2.832014702e-04f, -2.829120009e-04f, -2.826220634e-04f, -2.823316582e-04f, -2.820407860e-04f,
+-2.817494472e-04f, -2.814576424e-04f, -2.811653722e-04f, -2.808726370e-04f, -2.805794374e-04f, -2.802857739e-04f, -2.799916471e-04f, -2.796970576e-04f, -2.794020058e-04f, -2.791064923e-04f,
+-2.788105177e-04f, -2.785140825e-04f, -2.782171872e-04f, -2.779198325e-04f, -2.776220187e-04f, -2.773237466e-04f, -2.770250166e-04f, -2.767258293e-04f, -2.764261853e-04f, -2.761260850e-04f,
+-2.758255291e-04f, -2.755245180e-04f, -2.752230524e-04f, -2.749211329e-04f, -2.746187599e-04f, -2.743159339e-04f, -2.740126557e-04f, -2.737089257e-04f, -2.734047445e-04f, -2.731001126e-04f,
+-2.727950307e-04f, -2.724894991e-04f, -2.721835187e-04f, -2.718770898e-04f, -2.715702130e-04f, -2.712628890e-04f, -2.709551183e-04f, -2.706469013e-04f, -2.703382388e-04f, -2.700291313e-04f,
+-2.697195793e-04f, -2.694095834e-04f, -2.690991442e-04f, -2.687882623e-04f, -2.684769381e-04f, -2.681651723e-04f, -2.678529655e-04f, -2.675403182e-04f, -2.672272311e-04f, -2.669137045e-04f,
+-2.665997393e-04f, -2.662853358e-04f, -2.659704948e-04f, -2.656552167e-04f, -2.653395022e-04f, -2.650233518e-04f, -2.647067661e-04f, -2.643897457e-04f, -2.640722912e-04f, -2.637544031e-04f,
+-2.634360820e-04f, -2.631173285e-04f, -2.627981433e-04f, -2.624785268e-04f, -2.621584796e-04f, -2.618380025e-04f, -2.615170958e-04f, -2.611957602e-04f, -2.608739964e-04f, -2.605518048e-04f,
+-2.602291861e-04f, -2.599061409e-04f, -2.595826697e-04f, -2.592587732e-04f, -2.589344519e-04f, -2.586097065e-04f, -2.582845374e-04f, -2.579589454e-04f, -2.576329310e-04f, -2.573064948e-04f,
+-2.569796374e-04f, -2.566523593e-04f, -2.563246613e-04f, -2.559965438e-04f, -2.556680076e-04f, -2.553390531e-04f, -2.550096810e-04f, -2.546798918e-04f, -2.543496863e-04f, -2.540190649e-04f,
+-2.536880283e-04f, -2.533565772e-04f, -2.530247119e-04f, -2.526924333e-04f, -2.523597419e-04f, -2.520266383e-04f, -2.516931231e-04f, -2.513591969e-04f, -2.510248604e-04f, -2.506901141e-04f,
+-2.503549586e-04f, -2.500193945e-04f, -2.496834225e-04f, -2.493470432e-04f, -2.490102572e-04f, -2.486730651e-04f, -2.483354674e-04f, -2.479974649e-04f, -2.476590582e-04f, -2.473202477e-04f,
+-2.469810343e-04f, -2.466414184e-04f, -2.463014007e-04f, -2.459609818e-04f, -2.456201623e-04f, -2.452789429e-04f, -2.449373242e-04f, -2.445953067e-04f, -2.442528912e-04f, -2.439100781e-04f,
+-2.435668683e-04f, -2.432232622e-04f, -2.428792605e-04f, -2.425348638e-04f, -2.421900727e-04f, -2.418448879e-04f, -2.414993100e-04f, -2.411533397e-04f, -2.408069775e-04f, -2.404602240e-04f,
+-2.401130800e-04f, -2.397655459e-04f, -2.394176226e-04f, -2.390693105e-04f, -2.387206103e-04f, -2.383715227e-04f, -2.380220483e-04f, -2.376721877e-04f, -2.373219416e-04f, -2.369713105e-04f,
+-2.366202951e-04f, -2.362688961e-04f, -2.359171141e-04f, -2.355649497e-04f, -2.352124035e-04f, -2.348594763e-04f, -2.345061685e-04f, -2.341524810e-04f, -2.337984143e-04f, -2.334439690e-04f,
+-2.330891458e-04f, -2.327339453e-04f, -2.323783682e-04f, -2.320224152e-04f, -2.316660867e-04f, -2.313093836e-04f, -2.309523065e-04f, -2.305948559e-04f, -2.302370326e-04f, -2.298788371e-04f,
+-2.295202702e-04f, -2.291613324e-04f, -2.288020245e-04f, -2.284423471e-04f, -2.280823007e-04f, -2.277218862e-04f, -2.273611040e-04f, -2.269999549e-04f, -2.266384396e-04f, -2.262765586e-04f,
+-2.259143127e-04f, -2.255517024e-04f, -2.251887284e-04f, -2.248253915e-04f, -2.244616921e-04f, -2.240976311e-04f, -2.237332090e-04f, -2.233684266e-04f, -2.230032844e-04f, -2.226377831e-04f,
+-2.222719234e-04f, -2.219057059e-04f, -2.215391314e-04f, -2.211722004e-04f, -2.208049136e-04f, -2.204372717e-04f, -2.200692753e-04f, -2.197009252e-04f, -2.193322219e-04f, -2.189631661e-04f,
+-2.185937585e-04f, -2.182239998e-04f, -2.178538906e-04f, -2.174834316e-04f, -2.171126234e-04f, -2.167414668e-04f, -2.163699623e-04f, -2.159981107e-04f, -2.156259127e-04f, -2.152533688e-04f,
+-2.148804798e-04f, -2.145072463e-04f, -2.141336690e-04f, -2.137597486e-04f, -2.133854857e-04f, -2.130108810e-04f, -2.126359353e-04f, -2.122606490e-04f, -2.118850231e-04f, -2.115090580e-04f,
+-2.111327545e-04f, -2.107561133e-04f, -2.103791350e-04f, -2.100018203e-04f, -2.096241699e-04f, -2.092461845e-04f, -2.088678647e-04f, -2.084892113e-04f, -2.081102248e-04f, -2.077309060e-04f,
+-2.073512556e-04f, -2.069712743e-04f, -2.065909626e-04f, -2.062103214e-04f, -2.058293512e-04f, -2.054480528e-04f, -2.050664269e-04f, -2.046844741e-04f, -2.043021951e-04f, -2.039195906e-04f,
+-2.035366613e-04f, -2.031534079e-04f, -2.027698310e-04f, -2.023859314e-04f, -2.020017098e-04f, -2.016171667e-04f, -2.012323030e-04f, -2.008471193e-04f, -2.004616162e-04f, -2.000757946e-04f,
+-1.996896550e-04f, -1.993031981e-04f, -1.989164248e-04f, -1.985293355e-04f, -1.981419311e-04f, -1.977542123e-04f, -1.973661796e-04f, -1.969778339e-04f, -1.965891758e-04f, -1.962002060e-04f,
+-1.958109251e-04f, -1.954213340e-04f, -1.950314333e-04f, -1.946412237e-04f, -1.942507058e-04f, -1.938598805e-04f, -1.934687483e-04f, -1.930773100e-04f, -1.926855663e-04f, -1.922935178e-04f,
+-1.919011654e-04f, -1.915085096e-04f, -1.911155512e-04f, -1.907222909e-04f, -1.903287294e-04f, -1.899348673e-04f, -1.895407055e-04f, -1.891462445e-04f, -1.887514852e-04f, -1.883564281e-04f,
+-1.879610740e-04f, -1.875654237e-04f, -1.871694778e-04f, -1.867732370e-04f, -1.863767020e-04f, -1.859798736e-04f, -1.855827524e-04f, -1.851853392e-04f, -1.847876346e-04f, -1.843896394e-04f,
+-1.839913543e-04f, -1.835927799e-04f, -1.831939171e-04f, -1.827947665e-04f, -1.823953288e-04f, -1.819956047e-04f, -1.815955950e-04f, -1.811953003e-04f, -1.807947214e-04f, -1.803938590e-04f,
+-1.799927138e-04f, -1.795912865e-04f, -1.791895778e-04f, -1.787875885e-04f, -1.783853192e-04f, -1.779827707e-04f, -1.775799437e-04f, -1.771768389e-04f, -1.767734570e-04f, -1.763697988e-04f,
+-1.759658649e-04f, -1.755616561e-04f, -1.751571731e-04f, -1.747524166e-04f, -1.743473873e-04f, -1.739420860e-04f, -1.735365134e-04f, -1.731306701e-04f, -1.727245570e-04f, -1.723181748e-04f,
+-1.719115241e-04f, -1.715046056e-04f, -1.710974202e-04f, -1.706899686e-04f, -1.702822513e-04f, -1.698742693e-04f, -1.694660232e-04f, -1.690575137e-04f, -1.686487415e-04f, -1.682397074e-04f,
+-1.678304122e-04f, -1.674208565e-04f, -1.670110410e-04f, -1.666009665e-04f, -1.661906338e-04f, -1.657800435e-04f, -1.653691964e-04f, -1.649580931e-04f, -1.645467345e-04f, -1.641351213e-04f,
+-1.637232542e-04f, -1.633111339e-04f, -1.628987611e-04f, -1.624861367e-04f, -1.620732612e-04f, -1.616601355e-04f, -1.612467603e-04f, -1.608331363e-04f, -1.604192643e-04f, -1.600051449e-04f,
+-1.595907790e-04f, -1.591761672e-04f, -1.587613103e-04f, -1.583462090e-04f, -1.579308641e-04f, -1.575152762e-04f, -1.570994462e-04f, -1.566833748e-04f, -1.562670627e-04f, -1.558505106e-04f,
+-1.554337193e-04f, -1.550166895e-04f, -1.545994220e-04f, -1.541819174e-04f, -1.537641766e-04f, -1.533462003e-04f, -1.529279892e-04f, -1.525095440e-04f, -1.520908655e-04f, -1.516719545e-04f,
+-1.512528116e-04f, -1.508334377e-04f, -1.504138334e-04f, -1.499939995e-04f, -1.495739368e-04f, -1.491536459e-04f, -1.487331277e-04f, -1.483123829e-04f, -1.478914121e-04f, -1.474702163e-04f,
+-1.470487960e-04f, -1.466271521e-04f, -1.462052853e-04f, -1.457831964e-04f, -1.453608860e-04f, -1.449383550e-04f, -1.445156040e-04f, -1.440926339e-04f, -1.436694454e-04f, -1.432460392e-04f,
+-1.428224160e-04f, -1.423985767e-04f, -1.419745220e-04f, -1.415502526e-04f, -1.411257692e-04f, -1.407010727e-04f, -1.402761637e-04f, -1.398510431e-04f, -1.394257115e-04f, -1.390001697e-04f,
+-1.385744185e-04f, -1.381484587e-04f, -1.377222909e-04f, -1.372959159e-04f, -1.368693345e-04f, -1.364425474e-04f, -1.360155555e-04f, -1.355883593e-04f, -1.351609598e-04f, -1.347333576e-04f,
+-1.343055535e-04f, -1.338775483e-04f, -1.334493426e-04f, -1.330209374e-04f, -1.325923332e-04f, -1.321635309e-04f, -1.317345313e-04f, -1.313053350e-04f, -1.308759429e-04f, -1.304463557e-04f,
+-1.300165741e-04f, -1.295865990e-04f, -1.291564310e-04f, -1.287260709e-04f, -1.282955196e-04f, -1.278647777e-04f, -1.274338460e-04f, -1.270027252e-04f, -1.265714162e-04f, -1.261399197e-04f,
+-1.257082364e-04f, -1.252763671e-04f, -1.248443126e-04f, -1.244120736e-04f, -1.239796508e-04f, -1.235470452e-04f, -1.231142573e-04f, -1.226812880e-04f, -1.222481380e-04f, -1.218148082e-04f,
+-1.213812992e-04f, -1.209476118e-04f, -1.205137467e-04f, -1.200797049e-04f, -1.196454869e-04f, -1.192110936e-04f, -1.187765258e-04f, -1.183417841e-04f, -1.179068694e-04f, -1.174717824e-04f,
+-1.170365240e-04f, -1.166010947e-04f, -1.161654956e-04f, -1.157297272e-04f, -1.152937903e-04f, -1.148576858e-04f, -1.144214144e-04f, -1.139849768e-04f, -1.135483738e-04f, -1.131116062e-04f,
+-1.126746748e-04f, -1.122375803e-04f, -1.118003235e-04f, -1.113629052e-04f, -1.109253261e-04f, -1.104875869e-04f, -1.100496886e-04f, -1.096116318e-04f, -1.091734172e-04f, -1.087350458e-04f,
+-1.082965182e-04f, -1.078578352e-04f, -1.074189976e-04f, -1.069800061e-04f, -1.065408615e-04f, -1.061015647e-04f, -1.056621163e-04f, -1.052225171e-04f, -1.047827680e-04f, -1.043428696e-04f,
+-1.039028228e-04f, -1.034626282e-04f, -1.030222868e-04f, -1.025817992e-04f, -1.021411663e-04f, -1.017003888e-04f, -1.012594675e-04f, -1.008184031e-04f, -1.003771964e-04f, -9.993584825e-05f,
+-9.949435936e-05f, -9.905273052e-05f, -9.861096250e-05f, -9.816905607e-05f, -9.772701202e-05f, -9.728483111e-05f, -9.684251411e-05f, -9.640006182e-05f, -9.595747498e-05f, -9.551475439e-05f,
+-9.507190082e-05f, -9.462891505e-05f, -9.418579784e-05f, -9.374254998e-05f, -9.329917224e-05f, -9.285566540e-05f, -9.241203023e-05f, -9.196826752e-05f, -9.152437803e-05f, -9.108036254e-05f,
+-9.063622184e-05f, -9.019195669e-05f, -8.974756788e-05f, -8.930305619e-05f, -8.885842238e-05f, -8.841366724e-05f, -8.796879155e-05f, -8.752379608e-05f, -8.707868162e-05f, -8.663344894e-05f,
+-8.618809881e-05f, -8.574263203e-05f, -8.529704936e-05f, -8.485135159e-05f, -8.440553949e-05f, -8.395961385e-05f, -8.351357544e-05f, -8.306742504e-05f, -8.262116344e-05f, -8.217479141e-05f,
+-8.172830974e-05f, -8.128171920e-05f, -8.083502057e-05f, -8.038821463e-05f, -7.994130217e-05f, -7.949428396e-05f, -7.904716079e-05f, -7.859993343e-05f, -7.815260267e-05f, -7.770516929e-05f,
+-7.725763407e-05f, -7.680999779e-05f, -7.636226123e-05f, -7.591442518e-05f, -7.546649041e-05f, -7.501845770e-05f, -7.457032785e-05f, -7.412210163e-05f, -7.367377982e-05f, -7.322536321e-05f,
+-7.277685257e-05f, -7.232824870e-05f, -7.187955237e-05f, -7.143076436e-05f, -7.098188546e-05f, -7.053291645e-05f, -7.008385812e-05f, -6.963471124e-05f, -6.918547661e-05f, -6.873615500e-05f,
+-6.828674719e-05f, -6.783725398e-05f, -6.738767614e-05f, -6.693801445e-05f, -6.648826971e-05f, -6.603844269e-05f, -6.558853419e-05f, -6.513854497e-05f, -6.468847583e-05f, -6.423832755e-05f,
+-6.378810092e-05f, -6.333779672e-05f, -6.288741573e-05f, -6.243695874e-05f, -6.198642653e-05f, -6.153581989e-05f, -6.108513960e-05f, -6.063438645e-05f, -6.018356122e-05f, -5.973266469e-05f,
+-5.928169766e-05f, -5.883066091e-05f, -5.837955521e-05f, -5.792838136e-05f, -5.747714014e-05f, -5.702583234e-05f, -5.657445875e-05f, -5.612302014e-05f, -5.567151730e-05f, -5.521995102e-05f,
+-5.476832208e-05f, -5.431663128e-05f, -5.386487939e-05f, -5.341306720e-05f, -5.296119549e-05f, -5.250926506e-05f, -5.205727669e-05f, -5.160523116e-05f, -5.115312926e-05f, -5.070097178e-05f,
+-5.024875949e-05f, -4.979649320e-05f, -4.934417368e-05f, -4.889180172e-05f, -4.843937810e-05f, -4.798690362e-05f, -4.753437905e-05f, -4.708180519e-05f, -4.662918282e-05f, -4.617651273e-05f,
+-4.572379570e-05f, -4.527103252e-05f, -4.481822398e-05f, -4.436537085e-05f, -4.391247394e-05f, -4.345953402e-05f, -4.300655188e-05f, -4.255352832e-05f, -4.210046410e-05f, -4.164736002e-05f,
+-4.119421688e-05f, -4.074103544e-05f, -4.028781651e-05f, -3.983456086e-05f, -3.938126929e-05f, -3.892794257e-05f, -3.847458150e-05f, -3.802118687e-05f, -3.756775945e-05f, -3.711430004e-05f,
+-3.666080942e-05f, -3.620728838e-05f, -3.575373770e-05f, -3.530015818e-05f, -3.484655059e-05f, -3.439291573e-05f, -3.393925438e-05f, -3.348556732e-05f, -3.303185535e-05f, -3.257811925e-05f,
+-3.212435981e-05f, -3.167057781e-05f, -3.121677404e-05f, -3.076294929e-05f, -3.030910434e-05f, -2.985523997e-05f, -2.940135698e-05f, -2.894745616e-05f, -2.849353828e-05f, -2.803960413e-05f,
+-2.758565450e-05f, -2.713169018e-05f, -2.667771195e-05f, -2.622372060e-05f, -2.576971691e-05f, -2.531570168e-05f, -2.486167568e-05f, -2.440763970e-05f, -2.395359453e-05f, -2.349954095e-05f,
+-2.304547975e-05f, -2.259141172e-05f, -2.213733764e-05f, -2.168325830e-05f, -2.122917448e-05f, -2.077508696e-05f, -2.032099654e-05f, -1.986690400e-05f, -1.941281012e-05f, -1.895871570e-05f,
+-1.850462151e-05f, -1.805052834e-05f, -1.759643697e-05f, -1.714234820e-05f, -1.668826280e-05f, -1.623418156e-05f, -1.578010527e-05f, -1.532603471e-05f, -1.487197066e-05f, -1.441791392e-05f,
+-1.396386526e-05f, -1.350982547e-05f, -1.305579533e-05f, -1.260177563e-05f, -1.214776716e-05f, -1.169377069e-05f, -1.123978701e-05f, -1.078581691e-05f, -1.033186117e-05f, -9.877920576e-06f,
+-9.423995907e-06f, -8.970087949e-06f, -8.516197487e-06f, -8.062325304e-06f, -7.608472183e-06f, -7.154638908e-06f, -6.700826262e-06f, -6.247035029e-06f, -5.793265992e-06f, -5.339519933e-06f,
+-4.885797637e-06f, -4.432099885e-06f, -3.978427461e-06f, -3.524781148e-06f, -3.071161727e-06f, -2.617569982e-06f, -2.164006694e-06f, -1.710472647e-06f, -1.256968622e-06f, -8.034954017e-07f,
+-3.500537676e-07f, 1.033554983e-07f, 5.567316142e-07f, 1.010073799e-06f, 1.463381270e-06f, 1.916653247e-06f, 2.369888948e-06f, 2.823087592e-06f, 3.276248398e-06f, 3.729370585e-06f,
+4.182453373e-06f, 4.635495980e-06f, 5.088497626e-06f, 5.541457531e-06f, 5.994374915e-06f, 6.447248997e-06f, 6.900078997e-06f, 7.352864136e-06f, 7.805603633e-06f, 8.258296709e-06f,
+8.710942585e-06f, 9.163540480e-06f, 9.616089617e-06f, 1.006858922e-05f, 1.052103850e-05f, 1.097343668e-05f, 1.142578300e-05f, 1.187807665e-05f, 1.233031688e-05f, 1.278250290e-05f,
+1.323463393e-05f, 1.368670920e-05f, 1.413872792e-05f, 1.459068932e-05f, 1.504259262e-05f, 1.549443705e-05f, 1.594622183e-05f, 1.639794618e-05f, 1.684960932e-05f, 1.730121047e-05f,
+1.775274887e-05f, 1.820422373e-05f, 1.865563429e-05f, 1.910697975e-05f, 1.955825935e-05f, 2.000947231e-05f, 2.046061786e-05f, 2.091169521e-05f, 2.136270361e-05f, 2.181364226e-05f,
+2.226451040e-05f, 2.271530724e-05f, 2.316603203e-05f, 2.361668398e-05f, 2.406726231e-05f, 2.451776626e-05f, 2.496819505e-05f, 2.541854791e-05f, 2.586882406e-05f, 2.631902274e-05f,
+2.676914316e-05f, 2.721918455e-05f, 2.766914615e-05f, 2.811902718e-05f, 2.856882687e-05f, 2.901854444e-05f, 2.946817913e-05f, 2.991773016e-05f, 3.036719677e-05f, 3.081657817e-05f,
+3.126587360e-05f, 3.171508230e-05f, 3.216420348e-05f, 3.261323638e-05f, 3.306218022e-05f, 3.351103425e-05f, 3.395979768e-05f, 3.440846976e-05f, 3.485704970e-05f, 3.530553674e-05f,
+3.575393012e-05f, 3.620222905e-05f, 3.665043279e-05f, 3.709854055e-05f, 3.754655157e-05f, 3.799446507e-05f, 3.844228031e-05f, 3.888999650e-05f, 3.933761287e-05f, 3.978512868e-05f,
+4.023254313e-05f, 4.067985548e-05f, 4.112706495e-05f, 4.157417077e-05f, 4.202117219e-05f, 4.246806844e-05f, 4.291485874e-05f, 4.336154234e-05f, 4.380811848e-05f, 4.425458638e-05f,
+4.470094528e-05f, 4.514719442e-05f, 4.559333304e-05f, 4.603936037e-05f, 4.648527565e-05f, 4.693107811e-05f, 4.737676700e-05f, 4.782234154e-05f, 4.826780099e-05f, 4.871314457e-05f,
+4.915837152e-05f, 4.960348109e-05f, 5.004847251e-05f, 5.049334502e-05f, 5.093809786e-05f, 5.138273027e-05f, 5.182724148e-05f, 5.227163075e-05f, 5.271589731e-05f, 5.316004040e-05f,
+5.360405926e-05f, 5.404795313e-05f, 5.449172126e-05f, 5.493536288e-05f, 5.537887724e-05f, 5.582226358e-05f, 5.626552115e-05f, 5.670864918e-05f, 5.715164691e-05f, 5.759451360e-05f,
+5.803724849e-05f, 5.847985082e-05f, 5.892231982e-05f, 5.936465476e-05f, 5.980685487e-05f, 6.024891940e-05f, 6.069084759e-05f, 6.113263870e-05f, 6.157429195e-05f, 6.201580661e-05f,
+6.245718192e-05f, 6.289841712e-05f, 6.333951147e-05f, 6.378046420e-05f, 6.422127457e-05f, 6.466194183e-05f, 6.510246522e-05f, 6.554284400e-05f, 6.598307740e-05f, 6.642316469e-05f,
+6.686310510e-05f, 6.730289790e-05f, 6.774254232e-05f, 6.818203763e-05f, 6.862138307e-05f, 6.906057789e-05f, 6.949962135e-05f, 6.993851269e-05f, 7.037725117e-05f, 7.081583604e-05f,
+7.125426655e-05f, 7.169254196e-05f, 7.213066152e-05f, 7.256862449e-05f, 7.300643011e-05f, 7.344407764e-05f, 7.388156634e-05f, 7.431889546e-05f, 7.475606425e-05f, 7.519307198e-05f,
+7.562991790e-05f, 7.606660126e-05f, 7.650312132e-05f, 7.693947735e-05f, 7.737566858e-05f, 7.781169429e-05f, 7.824755373e-05f, 7.868324617e-05f, 7.911877085e-05f, 7.955412703e-05f,
+7.998931399e-05f, 8.042433097e-05f, 8.085917723e-05f, 8.129385205e-05f, 8.172835467e-05f, 8.216268436e-05f, 8.259684038e-05f, 8.303082199e-05f, 8.346462846e-05f, 8.389825905e-05f,
+8.433171301e-05f, 8.476498962e-05f, 8.519808813e-05f, 8.563100782e-05f, 8.606374794e-05f, 8.649630776e-05f, 8.692868655e-05f, 8.736088356e-05f, 8.779289808e-05f, 8.822472935e-05f,
+8.865637665e-05f, 8.908783925e-05f, 8.951911642e-05f, 8.995020741e-05f, 9.038111150e-05f, 9.081182797e-05f, 9.124235606e-05f, 9.167269506e-05f, 9.210284424e-05f, 9.253280286e-05f,
+9.296257020e-05f, 9.339214552e-05f, 9.382152810e-05f, 9.425071721e-05f, 9.467971212e-05f, 9.510851210e-05f, 9.553711643e-05f, 9.596552437e-05f, 9.639373521e-05f, 9.682174821e-05f,
+9.724956266e-05f, 9.767717781e-05f, 9.810459296e-05f, 9.853180737e-05f, 9.895882032e-05f, 9.938563109e-05f, 9.981223895e-05f, 1.002386432e-04f, 1.006648431e-04f, 1.010908379e-04f,
+1.015166269e-04f, 1.019422094e-04f, 1.023675846e-04f, 1.027927519e-04f, 1.032177106e-04f, 1.036424598e-04f, 1.040669989e-04f, 1.044913271e-04f, 1.049154438e-04f, 1.053393483e-04f,
+1.057630397e-04f, 1.061865175e-04f, 1.066097808e-04f, 1.070328290e-04f, 1.074556613e-04f, 1.078782770e-04f, 1.083006755e-04f, 1.087228559e-04f, 1.091448177e-04f, 1.095665600e-04f,
+1.099880821e-04f, 1.104093834e-04f, 1.108304632e-04f, 1.112513206e-04f, 1.116719551e-04f, 1.120923658e-04f, 1.125125522e-04f, 1.129325134e-04f, 1.133522488e-04f, 1.137717576e-04f,
+1.141910392e-04f, 1.146100928e-04f, 1.150289178e-04f, 1.154475134e-04f, 1.158658789e-04f, 1.162840136e-04f, 1.167019168e-04f, 1.171195878e-04f, 1.175370259e-04f, 1.179542303e-04f,
+1.183712005e-04f, 1.187879356e-04f, 1.192044351e-04f, 1.196206980e-04f, 1.200367239e-04f, 1.204525119e-04f, 1.208680614e-04f, 1.212833716e-04f, 1.216984419e-04f, 1.221132716e-04f,
+1.225278599e-04f, 1.229422062e-04f, 1.233563098e-04f, 1.237701699e-04f, 1.241837859e-04f, 1.245971571e-04f, 1.250102827e-04f, 1.254231621e-04f, 1.258357946e-04f, 1.262481795e-04f,
+1.266603161e-04f, 1.270722036e-04f, 1.274838415e-04f, 1.278952289e-04f, 1.283063653e-04f, 1.287172499e-04f, 1.291278821e-04f, 1.295382610e-04f, 1.299483862e-04f, 1.303582567e-04f,
+1.307678721e-04f, 1.311772315e-04f, 1.315863343e-04f, 1.319951798e-04f, 1.324037673e-04f, 1.328120961e-04f, 1.332201656e-04f, 1.336279750e-04f, 1.340355236e-04f, 1.344428109e-04f,
+1.348498360e-04f, 1.352565984e-04f, 1.356630972e-04f, 1.360693319e-04f, 1.364753018e-04f, 1.368810061e-04f, 1.372864442e-04f, 1.376916154e-04f, 1.380965190e-04f, 1.385011544e-04f,
+1.389055209e-04f, 1.393096177e-04f, 1.397134443e-04f, 1.401169998e-04f, 1.405202837e-04f, 1.409232953e-04f, 1.413260339e-04f, 1.417284988e-04f, 1.421306894e-04f, 1.425326049e-04f,
+1.429342447e-04f, 1.433356081e-04f, 1.437366944e-04f, 1.441375031e-04f, 1.445380333e-04f, 1.449382844e-04f, 1.453382558e-04f, 1.457379468e-04f, 1.461373567e-04f, 1.465364848e-04f,
+1.469353305e-04f, 1.473338931e-04f, 1.477321720e-04f, 1.481301664e-04f, 1.485278757e-04f, 1.489252992e-04f, 1.493224363e-04f, 1.497192862e-04f, 1.501158485e-04f, 1.505121222e-04f,
+1.509081069e-04f, 1.513038019e-04f, 1.516992064e-04f, 1.520943198e-04f, 1.524891414e-04f, 1.528836707e-04f, 1.532779069e-04f, 1.536718493e-04f, 1.540654974e-04f, 1.544588504e-04f,
+1.548519077e-04f, 1.552446686e-04f, 1.556371325e-04f, 1.560292987e-04f, 1.564211666e-04f, 1.568127355e-04f, 1.572040048e-04f, 1.575949737e-04f, 1.579856417e-04f, 1.583760080e-04f,
+1.587660721e-04f, 1.591558333e-04f, 1.595452909e-04f, 1.599344443e-04f, 1.603232928e-04f, 1.607118358e-04f, 1.611000726e-04f, 1.614880026e-04f, 1.618756251e-04f, 1.622629395e-04f,
+1.626499452e-04f, 1.630366414e-04f, 1.634230276e-04f, 1.638091030e-04f, 1.641948671e-04f, 1.645803193e-04f, 1.649654587e-04f, 1.653502850e-04f, 1.657347972e-04f, 1.661189949e-04f,
+1.665028775e-04f, 1.668864441e-04f, 1.672696943e-04f, 1.676526273e-04f, 1.680352426e-04f, 1.684175395e-04f, 1.687995173e-04f, 1.691811755e-04f, 1.695625133e-04f, 1.699435302e-04f,
+1.703242255e-04f, 1.707045985e-04f, 1.710846487e-04f, 1.714643754e-04f, 1.718437780e-04f, 1.722228559e-04f, 1.726016083e-04f, 1.729800347e-04f, 1.733581345e-04f, 1.737359070e-04f,
+1.741133516e-04f, 1.744904676e-04f, 1.748672545e-04f, 1.752437116e-04f, 1.756198382e-04f, 1.759956338e-04f, 1.763710977e-04f, 1.767462294e-04f, 1.771210281e-04f, 1.774954932e-04f,
+1.778696242e-04f, 1.782434204e-04f, 1.786168812e-04f, 1.789900059e-04f, 1.793627940e-04f, 1.797352448e-04f, 1.801073577e-04f, 1.804791321e-04f, 1.808505674e-04f, 1.812216629e-04f,
+1.815924180e-04f, 1.819628321e-04f, 1.823329047e-04f, 1.827026350e-04f, 1.830720225e-04f, 1.834410666e-04f, 1.838097666e-04f, 1.841781219e-04f, 1.845461319e-04f, 1.849137961e-04f,
+1.852811137e-04f, 1.856480842e-04f, 1.860147070e-04f, 1.863809815e-04f, 1.867469070e-04f, 1.871124830e-04f, 1.874777088e-04f, 1.878425839e-04f, 1.882071076e-04f, 1.885712793e-04f,
+1.889350985e-04f, 1.892985645e-04f, 1.896616767e-04f, 1.900244345e-04f, 1.903868373e-04f, 1.907488846e-04f, 1.911105756e-04f, 1.914719099e-04f, 1.918328868e-04f, 1.921935057e-04f,
+1.925537660e-04f, 1.929136672e-04f, 1.932732085e-04f, 1.936323895e-04f, 1.939912096e-04f, 1.943496681e-04f, 1.947077644e-04f, 1.950654980e-04f, 1.954228683e-04f, 1.957798746e-04f,
+1.961365164e-04f, 1.964927931e-04f, 1.968487041e-04f, 1.972042488e-04f, 1.975594266e-04f, 1.979142370e-04f, 1.982686794e-04f, 1.986227530e-04f, 1.989764575e-04f, 1.993297922e-04f,
+1.996827565e-04f, 2.000353498e-04f, 2.003875715e-04f, 2.007394211e-04f, 2.010908980e-04f, 2.014420016e-04f, 2.017927313e-04f, 2.021430865e-04f, 2.024930668e-04f, 2.028426714e-04f,
+2.031918998e-04f, 2.035407514e-04f, 2.038892257e-04f, 2.042373220e-04f, 2.045850399e-04f, 2.049323787e-04f, 2.052793379e-04f, 2.056259168e-04f, 2.059721150e-04f, 2.063179318e-04f,
+2.066633667e-04f, 2.070084191e-04f, 2.073530884e-04f, 2.076973741e-04f, 2.080412756e-04f, 2.083847923e-04f, 2.087279237e-04f, 2.090706692e-04f, 2.094130282e-04f, 2.097550002e-04f,
+2.100965846e-04f, 2.104377809e-04f, 2.107785884e-04f, 2.111190067e-04f, 2.114590351e-04f, 2.117986731e-04f, 2.121379202e-04f, 2.124767758e-04f, 2.128152393e-04f, 2.131533102e-04f,
+2.134909878e-04f, 2.138282718e-04f, 2.141651615e-04f, 2.145016563e-04f, 2.148377557e-04f, 2.151734591e-04f, 2.155087661e-04f, 2.158436760e-04f, 2.161781883e-04f, 2.165123025e-04f,
+2.168460179e-04f, 2.171793341e-04f, 2.175122505e-04f, 2.178447666e-04f, 2.181768817e-04f, 2.185085954e-04f, 2.188399072e-04f, 2.191708164e-04f, 2.195013226e-04f, 2.198314251e-04f,
+2.201611235e-04f, 2.204904172e-04f, 2.208193057e-04f, 2.211477884e-04f, 2.214758648e-04f, 2.218035344e-04f, 2.221307965e-04f, 2.224576508e-04f, 2.227840966e-04f, 2.231101334e-04f,
+2.234357607e-04f, 2.237609779e-04f, 2.240857845e-04f, 2.244101800e-04f, 2.247341639e-04f, 2.250577356e-04f, 2.253808945e-04f, 2.257036403e-04f, 2.260259722e-04f, 2.263478899e-04f,
+2.266693927e-04f, 2.269904802e-04f, 2.273111519e-04f, 2.276314071e-04f, 2.279512454e-04f, 2.282706663e-04f, 2.285896692e-04f, 2.289082536e-04f, 2.292264190e-04f, 2.295441648e-04f,
+2.298614907e-04f, 2.301783959e-04f, 2.304948801e-04f, 2.308109427e-04f, 2.311265832e-04f, 2.314418010e-04f, 2.317565958e-04f, 2.320709668e-04f, 2.323849137e-04f, 2.326984359e-04f,
+2.330115329e-04f, 2.333242042e-04f, 2.336364493e-04f, 2.339482677e-04f, 2.342596588e-04f, 2.345706222e-04f, 2.348811574e-04f, 2.351912638e-04f, 2.355009410e-04f, 2.358101884e-04f,
+2.361190055e-04f, 2.364273919e-04f, 2.367353470e-04f, 2.370428703e-04f, 2.373499614e-04f, 2.376566197e-04f, 2.379628448e-04f, 2.382686361e-04f, 2.385739931e-04f, 2.388789153e-04f,
+2.391834024e-04f, 2.394874536e-04f, 2.397910686e-04f, 2.400942469e-04f, 2.403969880e-04f, 2.406992913e-04f, 2.410011565e-04f, 2.413025829e-04f, 2.416035701e-04f, 2.419041177e-04f,
+2.422042251e-04f, 2.425038919e-04f, 2.428031175e-04f, 2.431019015e-04f, 2.434002433e-04f, 2.436981426e-04f, 2.439955988e-04f, 2.442926115e-04f, 2.445891801e-04f, 2.448853042e-04f,
+2.451809833e-04f, 2.454762170e-04f, 2.457710046e-04f, 2.460653459e-04f, 2.463592402e-04f, 2.466526871e-04f, 2.469456862e-04f, 2.472382370e-04f, 2.475303389e-04f, 2.478219916e-04f,
+2.481131945e-04f, 2.484039472e-04f, 2.486942492e-04f, 2.489841001e-04f, 2.492734993e-04f, 2.495624464e-04f, 2.498509410e-04f, 2.501389825e-04f, 2.504265706e-04f, 2.507137047e-04f,
+2.510003843e-04f, 2.512866091e-04f, 2.515723785e-04f, 2.518576922e-04f, 2.521425495e-04f, 2.524269502e-04f, 2.527108936e-04f, 2.529943794e-04f, 2.532774071e-04f, 2.535599763e-04f,
+2.538420864e-04f, 2.541237371e-04f, 2.544049279e-04f, 2.546856583e-04f, 2.549659278e-04f, 2.552457361e-04f, 2.555250827e-04f, 2.558039671e-04f, 2.560823889e-04f, 2.563603476e-04f,
+2.566378428e-04f, 2.569148740e-04f, 2.571914408e-04f, 2.574675428e-04f, 2.577431795e-04f, 2.580183504e-04f, 2.582930551e-04f, 2.585672933e-04f, 2.588410644e-04f, 2.591143679e-04f,
+2.593872036e-04f, 2.596595708e-04f, 2.599314692e-04f, 2.602028984e-04f, 2.604738579e-04f, 2.607443473e-04f, 2.610143662e-04f, 2.612839140e-04f, 2.615529904e-04f, 2.618215950e-04f,
+2.620897273e-04f, 2.623573869e-04f, 2.626245734e-04f, 2.628912863e-04f, 2.631575252e-04f, 2.634232897e-04f, 2.636885794e-04f, 2.639533937e-04f, 2.642177324e-04f, 2.644815950e-04f,
+2.647449811e-04f, 2.650078902e-04f, 2.652703219e-04f, 2.655322759e-04f, 2.657937516e-04f, 2.660547487e-04f, 2.663152668e-04f, 2.665753054e-04f, 2.668348641e-04f, 2.670939425e-04f,
+2.673525403e-04f, 2.676106569e-04f, 2.678682920e-04f, 2.681254452e-04f, 2.683821160e-04f, 2.686383041e-04f, 2.688940090e-04f, 2.691492304e-04f, 2.694039677e-04f, 2.696582207e-04f,
+2.699119890e-04f, 2.701652720e-04f, 2.704180694e-04f, 2.706703809e-04f, 2.709222059e-04f, 2.711735442e-04f, 2.714243953e-04f, 2.716747588e-04f, 2.719246343e-04f, 2.721740214e-04f,
+2.724229198e-04f, 2.726713289e-04f, 2.729192485e-04f, 2.731666782e-04f, 2.734136175e-04f, 2.736600660e-04f, 2.739060234e-04f, 2.741514893e-04f, 2.743964633e-04f, 2.746409450e-04f,
+2.748849340e-04f, 2.751284299e-04f, 2.753714324e-04f, 2.756139410e-04f, 2.758559554e-04f, 2.760974752e-04f, 2.763385000e-04f, 2.765790295e-04f, 2.768190632e-04f, 2.770586007e-04f,
+2.772976418e-04f, 2.775361859e-04f, 2.777742329e-04f, 2.780117821e-04f, 2.782488334e-04f, 2.784853863e-04f, 2.787214404e-04f, 2.789569954e-04f, 2.791920509e-04f, 2.794266066e-04f,
+2.796606620e-04f, 2.798942168e-04f, 2.801272706e-04f, 2.803598231e-04f, 2.805918739e-04f, 2.808234226e-04f, 2.810544689e-04f, 2.812850123e-04f, 2.815150527e-04f, 2.817445895e-04f,
+2.819736224e-04f, 2.822021511e-04f, 2.824301752e-04f, 2.826576943e-04f, 2.828847081e-04f, 2.831112163e-04f, 2.833372184e-04f, 2.835627142e-04f, 2.837877032e-04f, 2.840121852e-04f,
+2.842361597e-04f, 2.844596264e-04f, 2.846825850e-04f, 2.849050351e-04f, 2.851269764e-04f, 2.853484086e-04f, 2.855693312e-04f, 2.857897439e-04f, 2.860096465e-04f, 2.862290384e-04f,
+2.864479195e-04f, 2.866662894e-04f, 2.868841477e-04f, 2.871014940e-04f, 2.873183281e-04f, 2.875346497e-04f, 2.877504583e-04f, 2.879657536e-04f, 2.881805353e-04f, 2.883948031e-04f,
+2.886085567e-04f, 2.888217956e-04f, 2.890345196e-04f, 2.892467284e-04f, 2.894584215e-04f, 2.896695988e-04f, 2.898802598e-04f, 2.900904042e-04f, 2.903000318e-04f, 2.905091421e-04f,
+2.907177349e-04f, 2.909258098e-04f, 2.911333665e-04f, 2.913404047e-04f, 2.915469241e-04f, 2.917529244e-04f, 2.919584051e-04f, 2.921633661e-04f, 2.923678070e-04f, 2.925717274e-04f,
+2.927751272e-04f, 2.929780058e-04f, 2.931803632e-04f, 2.933821988e-04f, 2.935835125e-04f, 2.937843039e-04f, 2.939845726e-04f, 2.941843185e-04f, 2.943835412e-04f, 2.945822403e-04f,
+2.947804156e-04f, 2.949780668e-04f, 2.951751935e-04f, 2.953717955e-04f, 2.955678725e-04f, 2.957634241e-04f, 2.959584501e-04f, 2.961529501e-04f, 2.963469239e-04f, 2.965403712e-04f,
+2.967332916e-04f, 2.969256849e-04f, 2.971175508e-04f, 2.973088890e-04f, 2.974996992e-04f, 2.976899811e-04f, 2.978797344e-04f, 2.980689588e-04f, 2.982576540e-04f, 2.984458198e-04f,
+2.986334559e-04f, 2.988205619e-04f, 2.990071377e-04f, 2.991931828e-04f, 2.993786970e-04f, 2.995636801e-04f, 2.997481318e-04f, 2.999320517e-04f, 3.001154397e-04f, 3.002982953e-04f,
+3.004806184e-04f, 3.006624087e-04f, 3.008436658e-04f, 3.010243896e-04f, 3.012045798e-04f, 3.013842360e-04f, 3.015633580e-04f, 3.017419455e-04f, 3.019199983e-04f, 3.020975161e-04f,
+3.022744986e-04f, 3.024509455e-04f, 3.026268567e-04f, 3.028022318e-04f, 3.029770705e-04f, 3.031513727e-04f, 3.033251379e-04f, 3.034983661e-04f, 3.036710568e-04f, 3.038432100e-04f,
+3.040148252e-04f, 3.041859022e-04f, 3.043564409e-04f, 3.045264408e-04f, 3.046959019e-04f, 3.048648237e-04f, 3.050332062e-04f, 3.052010489e-04f, 3.053683517e-04f, 3.055351143e-04f,
+3.057013365e-04f, 3.058670180e-04f, 3.060321585e-04f, 3.061967579e-04f, 3.063608159e-04f, 3.065243322e-04f, 3.066873066e-04f, 3.068497388e-04f, 3.070116287e-04f, 3.071729759e-04f,
+3.073337803e-04f, 3.074940415e-04f, 3.076537594e-04f, 3.078129337e-04f, 3.079715642e-04f, 3.081296506e-04f, 3.082871927e-04f, 3.084441904e-04f, 3.086006432e-04f, 3.087565511e-04f,
+3.089119138e-04f, 3.090667310e-04f, 3.092210026e-04f, 3.093747282e-04f, 3.095279078e-04f, 3.096805410e-04f, 3.098326276e-04f, 3.099841674e-04f, 3.101351602e-04f, 3.102856058e-04f,
+3.104355039e-04f, 3.105848544e-04f, 3.107336569e-04f, 3.108819113e-04f, 3.110296175e-04f, 3.111767750e-04f, 3.113233838e-04f, 3.114694436e-04f, 3.116149543e-04f, 3.117599155e-04f,
+3.119043272e-04f, 3.120481890e-04f, 3.121915008e-04f, 3.123342623e-04f, 3.124764735e-04f, 3.126181340e-04f, 3.127592436e-04f, 3.128998022e-04f, 3.130398095e-04f, 3.131792654e-04f,
+3.133181696e-04f, 3.134565219e-04f, 3.135943222e-04f, 3.137315702e-04f, 3.138682658e-04f, 3.140044088e-04f, 3.141399988e-04f, 3.142750359e-04f, 3.144095197e-04f, 3.145434501e-04f,
+3.146768269e-04f, 3.148096499e-04f, 3.149419189e-04f, 3.150736337e-04f, 3.152047941e-04f, 3.153354000e-04f, 3.154654511e-04f, 3.155949474e-04f, 3.157238885e-04f, 3.158522743e-04f,
+3.159801046e-04f, 3.161073793e-04f, 3.162340982e-04f, 3.163602610e-04f, 3.164858677e-04f, 3.166109180e-04f, 3.167354118e-04f, 3.168593488e-04f, 3.169827290e-04f, 3.171055521e-04f,
+3.172278179e-04f, 3.173495264e-04f, 3.174706773e-04f, 3.175912704e-04f, 3.177113056e-04f, 3.178307828e-04f, 3.179497017e-04f, 3.180680622e-04f, 3.181858642e-04f, 3.183031074e-04f,
+3.184197917e-04f, 3.185359169e-04f, 3.186514830e-04f, 3.187664896e-04f, 3.188809367e-04f, 3.189948242e-04f, 3.191081518e-04f, 3.192209194e-04f, 3.193331268e-04f, 3.194447739e-04f,
+3.195558606e-04f, 3.196663866e-04f, 3.197763519e-04f, 3.198857563e-04f, 3.199945996e-04f, 3.201028817e-04f, 3.202106025e-04f, 3.203177617e-04f, 3.204243594e-04f, 3.205303952e-04f,
+3.206358691e-04f, 3.207407809e-04f, 3.208451306e-04f, 3.209489178e-04f, 3.210521426e-04f, 3.211548048e-04f, 3.212569042e-04f, 3.213584407e-04f, 3.214594142e-04f, 3.215598245e-04f,
+3.216596715e-04f, 3.217589551e-04f, 3.218576751e-04f, 3.219558315e-04f, 3.220534240e-04f, 3.221504526e-04f, 3.222469171e-04f, 3.223428174e-04f, 3.224381534e-04f, 3.225329249e-04f,
+3.226271319e-04f, 3.227207742e-04f, 3.228138517e-04f, 3.229063642e-04f, 3.229983117e-04f, 3.230896941e-04f, 3.231805111e-04f, 3.232707628e-04f, 3.233604489e-04f, 3.234495695e-04f,
+3.235381242e-04f, 3.236261132e-04f, 3.237135361e-04f, 3.238003930e-04f, 3.238866838e-04f, 3.239724082e-04f, 3.240575662e-04f, 3.241421578e-04f, 3.242261827e-04f, 3.243096409e-04f,
+3.243925323e-04f, 3.244748568e-04f, 3.245566143e-04f, 3.246378046e-04f, 3.247184278e-04f, 3.247984836e-04f, 3.248779721e-04f, 3.249568930e-04f, 3.250352463e-04f, 3.251130319e-04f,
+3.251902498e-04f, 3.252668997e-04f, 3.253429817e-04f, 3.254184957e-04f, 3.254934415e-04f, 3.255678190e-04f, 3.256416282e-04f, 3.257148690e-04f, 3.257875414e-04f, 3.258596451e-04f,
+3.259311802e-04f, 3.260021465e-04f, 3.260725440e-04f, 3.261423726e-04f, 3.262116323e-04f, 3.262803228e-04f, 3.263484442e-04f, 3.264159964e-04f, 3.264829793e-04f, 3.265493929e-04f,
+3.266152370e-04f, 3.266805116e-04f, 3.267452166e-04f, 3.268093520e-04f, 3.268729176e-04f, 3.269359134e-04f, 3.269983394e-04f, 3.270601955e-04f, 3.271214816e-04f, 3.271821976e-04f,
+3.272423435e-04f, 3.273019192e-04f, 3.273609247e-04f, 3.274193599e-04f, 3.274772248e-04f, 3.275345192e-04f, 3.275912431e-04f, 3.276473965e-04f, 3.277029793e-04f, 3.277579915e-04f,
+3.278124330e-04f, 3.278663037e-04f, 3.279196037e-04f, 3.279723328e-04f, 3.280244910e-04f, 3.280760782e-04f, 3.281270945e-04f, 3.281775397e-04f, 3.282274138e-04f, 3.282767168e-04f,
+3.283254486e-04f, 3.283736092e-04f, 3.284211986e-04f, 3.284682166e-04f, 3.285146633e-04f, 3.285605386e-04f, 3.286058426e-04f, 3.286505750e-04f, 3.286947360e-04f, 3.287383255e-04f,
+3.287813434e-04f, 3.288237897e-04f, 3.288656644e-04f, 3.289069674e-04f, 3.289476988e-04f, 3.289878585e-04f, 3.290274464e-04f, 3.290664626e-04f, 3.291049070e-04f, 3.291427795e-04f,
+3.291800803e-04f, 3.292168092e-04f, 3.292529662e-04f, 3.292885513e-04f, 3.293235644e-04f, 3.293580057e-04f, 3.293918750e-04f, 3.294251723e-04f, 3.294578976e-04f, 3.294900509e-04f,
+3.295216322e-04f, 3.295526415e-04f, 3.295830787e-04f, 3.296129439e-04f, 3.296422370e-04f, 3.296709581e-04f, 3.296991070e-04f, 3.297266839e-04f, 3.297536887e-04f, 3.297801214e-04f,
+3.298059820e-04f, 3.298312705e-04f, 3.298559868e-04f, 3.298801311e-04f, 3.299037033e-04f, 3.299267034e-04f, 3.299491313e-04f, 3.299709872e-04f, 3.299922709e-04f, 3.300129826e-04f,
+3.300331222e-04f, 3.300526897e-04f, 3.300716852e-04f, 3.300901086e-04f, 3.301079599e-04f, 3.301252392e-04f, 3.301419465e-04f, 3.301580817e-04f, 3.301736450e-04f, 3.301886363e-04f,
+3.302030556e-04f, 3.302169029e-04f, 3.302301783e-04f, 3.302428818e-04f, 3.302550134e-04f, 3.302665732e-04f, 3.302775610e-04f, 3.302879771e-04f, 3.302978213e-04f, 3.303070938e-04f,
+3.303157945e-04f, 3.303239235e-04f, 3.303314807e-04f, 3.303384664e-04f, 3.303448803e-04f, 3.303507227e-04f, 3.303559934e-04f, 3.303606926e-04f, 3.303648204e-04f, 3.303683766e-04f,
+3.303713614e-04f, 3.303737747e-04f, 3.303756168e-04f, 3.303768874e-04f, 3.303775868e-04f, 3.303777150e-04f, 3.303772719e-04f, 3.303762577e-04f, 3.303746723e-04f, 3.303725159e-04f,
+3.303697884e-04f, 3.303664900e-04f, 3.303626206e-04f, 3.303581803e-04f, 3.303531692e-04f, 3.303475873e-04f, 3.303414346e-04f, 3.303347113e-04f, 3.303274173e-04f, 3.303195528e-04f,
+3.303111177e-04f, 3.303021122e-04f, 3.302925362e-04f, 3.302823900e-04f, 3.302716734e-04f, 3.302603866e-04f, 3.302485296e-04f, 3.302361025e-04f, 3.302231054e-04f, 3.302095382e-04f,
+3.301954012e-04f, 3.301806943e-04f, 3.301654177e-04f, 3.301495713e-04f, 3.301331553e-04f, 3.301161697e-04f, 3.300986146e-04f, 3.300804901e-04f, 3.300617962e-04f, 3.300425330e-04f,
+3.300227007e-04f, 3.300022992e-04f, 3.299813286e-04f, 3.299597891e-04f, 3.299376806e-04f, 3.299150034e-04f, 3.298917574e-04f, 3.298679427e-04f, 3.298435595e-04f, 3.298186078e-04f,
+3.297930876e-04f, 3.297669992e-04f, 3.297403425e-04f, 3.297131177e-04f, 3.296853248e-04f, 3.296569640e-04f, 3.296280353e-04f, 3.295985388e-04f, 3.295684746e-04f, 3.295378428e-04f,
+3.295066435e-04f, 3.294748768e-04f, 3.294425428e-04f, 3.294096415e-04f, 3.293761732e-04f, 3.293421378e-04f, 3.293075356e-04f, 3.292723665e-04f, 3.292366307e-04f, 3.292003282e-04f,
+3.291634593e-04f, 3.291260240e-04f, 3.290880224e-04f, 3.290494546e-04f, 3.290103207e-04f, 3.289706209e-04f, 3.289303552e-04f, 3.288895237e-04f, 3.288481266e-04f, 3.288061640e-04f,
+3.287636360e-04f, 3.287205427e-04f, 3.286768842e-04f, 3.286326607e-04f, 3.285878722e-04f, 3.285425189e-04f, 3.284966009e-04f, 3.284501183e-04f, 3.284030712e-04f, 3.283554598e-04f,
+3.283072842e-04f, 3.282585445e-04f, 3.282092408e-04f, 3.281593733e-04f, 3.281089421e-04f, 3.280579473e-04f, 3.280063890e-04f, 3.279542674e-04f, 3.279015827e-04f, 3.278483348e-04f,
+3.277945241e-04f, 3.277401505e-04f, 3.276852143e-04f, 3.276297156e-04f, 3.275736545e-04f, 3.275170311e-04f, 3.274598457e-04f, 3.274020983e-04f, 3.273437890e-04f, 3.272849181e-04f,
+3.272254856e-04f, 3.271654918e-04f, 3.271049367e-04f, 3.270438205e-04f, 3.269821433e-04f, 3.269199053e-04f, 3.268571067e-04f, 3.267937475e-04f, 3.267298280e-04f, 3.266653483e-04f,
+3.266003085e-04f, 3.265347088e-04f, 3.264685494e-04f, 3.264018303e-04f, 3.263345519e-04f, 3.262667141e-04f, 3.261983173e-04f, 3.261293614e-04f, 3.260598468e-04f, 3.259897735e-04f,
+3.259191418e-04f, 3.258479517e-04f, 3.257762035e-04f, 3.257038973e-04f, 3.256310333e-04f, 3.255576116e-04f, 3.254836324e-04f, 3.254090959e-04f, 3.253340023e-04f, 3.252583517e-04f,
+3.251821443e-04f, 3.251053802e-04f, 3.250280597e-04f, 3.249501829e-04f, 3.248717500e-04f, 3.247927612e-04f, 3.247132166e-04f, 3.246331165e-04f, 3.245524609e-04f, 3.244712501e-04f,
+3.243894843e-04f, 3.243071636e-04f, 3.242242883e-04f, 3.241408584e-04f, 3.240568743e-04f, 3.239723361e-04f, 3.238872439e-04f, 3.238015980e-04f, 3.237153985e-04f, 3.236286456e-04f,
+3.235413396e-04f, 3.234534806e-04f, 3.233650688e-04f, 3.232761045e-04f, 3.231865877e-04f, 3.230965187e-04f, 3.230058977e-04f, 3.229147249e-04f, 3.228230005e-04f, 3.227307246e-04f,
+3.226378976e-04f, 3.225445195e-04f, 3.224505906e-04f, 3.223561111e-04f, 3.222610812e-04f, 3.221655011e-04f, 3.220693710e-04f, 3.219726911e-04f, 3.218754616e-04f, 3.217776828e-04f,
+3.216793547e-04f, 3.215804778e-04f, 3.214810521e-04f, 3.213810778e-04f, 3.212805553e-04f, 3.211794846e-04f, 3.210778660e-04f, 3.209756998e-04f, 3.208729861e-04f, 3.207697252e-04f,
+3.206659173e-04f, 3.205615625e-04f, 3.204566612e-04f, 3.203512136e-04f, 3.202452197e-04f, 3.201386800e-04f, 3.200315946e-04f, 3.199239637e-04f, 3.198157876e-04f, 3.197070665e-04f,
+3.195978006e-04f, 3.194879901e-04f, 3.193776354e-04f, 3.192667365e-04f, 3.191552937e-04f, 3.190433074e-04f, 3.189307776e-04f, 3.188177047e-04f, 3.187040889e-04f, 3.185899304e-04f,
+3.184752294e-04f, 3.183599862e-04f, 3.182442010e-04f, 3.181278741e-04f, 3.180110057e-04f, 3.178935961e-04f, 3.177756454e-04f, 3.176571540e-04f, 3.175381221e-04f, 3.174185498e-04f,
+3.172984376e-04f, 3.171777856e-04f, 3.170565940e-04f, 3.169348632e-04f, 3.168125933e-04f, 3.166897846e-04f, 3.165664374e-04f, 3.164425520e-04f, 3.163181285e-04f, 3.161931672e-04f,
+3.160676684e-04f, 3.159416324e-04f, 3.158150593e-04f, 3.156879496e-04f, 3.155603033e-04f, 3.154321208e-04f, 3.153034024e-04f, 3.151741482e-04f, 3.150443586e-04f, 3.149140339e-04f,
+3.147831742e-04f, 3.146517799e-04f, 3.145198512e-04f, 3.143873884e-04f, 3.142543917e-04f, 3.141208615e-04f, 3.139867980e-04f, 3.138522014e-04f, 3.137170721e-04f, 3.135814103e-04f,
+3.134452163e-04f, 3.133084904e-04f, 3.131712328e-04f, 3.130334438e-04f, 3.128951236e-04f, 3.127562727e-04f, 3.126168912e-04f, 3.124769794e-04f, 3.123365377e-04f, 3.121955662e-04f,
+3.120540653e-04f, 3.119120353e-04f, 3.117694764e-04f, 3.116263889e-04f, 3.114827731e-04f, 3.113386293e-04f, 3.111939579e-04f, 3.110487590e-04f, 3.109030329e-04f, 3.107567800e-04f,
+3.106100006e-04f, 3.104626949e-04f, 3.103148633e-04f, 3.101665059e-04f, 3.100176232e-04f, 3.098682154e-04f, 3.097182829e-04f, 3.095678258e-04f, 3.094168445e-04f, 3.092653394e-04f,
+3.091133107e-04f, 3.089607587e-04f, 3.088076837e-04f, 3.086540860e-04f, 3.084999659e-04f, 3.083453238e-04f, 3.081901599e-04f, 3.080344746e-04f, 3.078782681e-04f, 3.077215407e-04f,
+3.075642928e-04f, 3.074065247e-04f, 3.072482367e-04f, 3.070894291e-04f, 3.069301022e-04f, 3.067702563e-04f, 3.066098917e-04f, 3.064490088e-04f, 3.062876079e-04f, 3.061256892e-04f,
+3.059632532e-04f, 3.058003001e-04f, 3.056368302e-04f, 3.054728439e-04f, 3.053083415e-04f, 3.051433233e-04f, 3.049777896e-04f, 3.048117408e-04f, 3.046451771e-04f, 3.044780990e-04f,
+3.043105067e-04f, 3.041424006e-04f, 3.039737809e-04f, 3.038046481e-04f, 3.036350024e-04f, 3.034648442e-04f, 3.032941738e-04f, 3.031229915e-04f, 3.029512978e-04f, 3.027790928e-04f,
+3.026063770e-04f, 3.024331507e-04f, 3.022594141e-04f, 3.020851678e-04f, 3.019104119e-04f, 3.017351469e-04f, 3.015593731e-04f, 3.013830908e-04f, 3.012063003e-04f, 3.010290020e-04f,
+3.008511963e-04f, 3.006728835e-04f, 3.004940639e-04f, 3.003147379e-04f, 3.001349058e-04f, 2.999545681e-04f, 2.997737249e-04f, 2.995923767e-04f, 2.994105239e-04f, 2.992281667e-04f,
+2.990453055e-04f, 2.988619408e-04f, 2.986780728e-04f, 2.984937019e-04f, 2.983088284e-04f, 2.981234527e-04f, 2.979375752e-04f, 2.977511963e-04f, 2.975643162e-04f, 2.973769353e-04f,
+2.971890541e-04f, 2.970006728e-04f, 2.968117918e-04f, 2.966224116e-04f, 2.964325324e-04f, 2.962421546e-04f, 2.960512786e-04f, 2.958599047e-04f, 2.956680334e-04f, 2.954756649e-04f,
+2.952827997e-04f, 2.950894381e-04f, 2.948955806e-04f, 2.947012274e-04f, 2.945063789e-04f, 2.943110356e-04f, 2.941151977e-04f, 2.939188657e-04f, 2.937220400e-04f, 2.935247208e-04f,
+2.933269087e-04f, 2.931286039e-04f, 2.929298069e-04f, 2.927305180e-04f, 2.925307376e-04f, 2.923304661e-04f, 2.921297039e-04f, 2.919284514e-04f, 2.917267089e-04f, 2.915244768e-04f,
+2.913217555e-04f, 2.911185455e-04f, 2.909148470e-04f, 2.907106605e-04f, 2.905059863e-04f, 2.903008249e-04f, 2.900951767e-04f, 2.898890420e-04f, 2.896824212e-04f, 2.894753148e-04f,
+2.892677230e-04f, 2.890596464e-04f, 2.888510852e-04f, 2.886420400e-04f, 2.884325111e-04f, 2.882224988e-04f, 2.880120037e-04f, 2.878010261e-04f, 2.875895663e-04f, 2.873776248e-04f,
+2.871652021e-04f, 2.869522984e-04f, 2.867389143e-04f, 2.865250500e-04f, 2.863107061e-04f, 2.860958828e-04f, 2.858805807e-04f, 2.856648002e-04f, 2.854485416e-04f, 2.852318053e-04f,
+2.850145918e-04f, 2.847969014e-04f, 2.845787347e-04f, 2.843600919e-04f, 2.841409735e-04f, 2.839213800e-04f, 2.837013117e-04f, 2.834807691e-04f, 2.832597525e-04f, 2.830382624e-04f,
+2.828162992e-04f, 2.825938633e-04f, 2.823709552e-04f, 2.821475752e-04f, 2.819237238e-04f, 2.816994014e-04f, 2.814746084e-04f, 2.812493453e-04f, 2.810236124e-04f, 2.807974103e-04f,
+2.805707393e-04f, 2.803435998e-04f, 2.801159923e-04f, 2.798879172e-04f, 2.796593749e-04f, 2.794303659e-04f, 2.792008906e-04f, 2.789709494e-04f, 2.787405428e-04f, 2.785096712e-04f,
+2.782783350e-04f, 2.780465346e-04f, 2.778142705e-04f, 2.775815432e-04f, 2.773483530e-04f, 2.771147004e-04f, 2.768805859e-04f, 2.766460098e-04f, 2.764109727e-04f, 2.761754749e-04f,
+2.759395169e-04f, 2.757030992e-04f, 2.754662221e-04f, 2.752288862e-04f, 2.749910918e-04f, 2.747528394e-04f, 2.745141296e-04f, 2.742749626e-04f, 2.740353389e-04f, 2.737952591e-04f,
+2.735547235e-04f, 2.733137327e-04f, 2.730722869e-04f, 2.728303868e-04f, 2.725880327e-04f, 2.723452252e-04f, 2.721019645e-04f, 2.718582514e-04f, 2.716140860e-04f, 2.713694690e-04f,
+2.711244008e-04f, 2.708788818e-04f, 2.706329125e-04f, 2.703864934e-04f, 2.701396248e-04f, 2.698923074e-04f, 2.696445414e-04f, 2.693963275e-04f, 2.691476660e-04f, 2.688985575e-04f,
+2.686490023e-04f, 2.683990009e-04f, 2.681485539e-04f, 2.678976617e-04f, 2.676463247e-04f, 2.673945434e-04f, 2.671423183e-04f, 2.668896498e-04f, 2.666365384e-04f, 2.663829847e-04f,
+2.661289890e-04f, 2.658745518e-04f, 2.656196736e-04f, 2.653643549e-04f, 2.651085962e-04f, 2.648523979e-04f, 2.645957605e-04f, 2.643386844e-04f, 2.640811702e-04f, 2.638232184e-04f,
+2.635648293e-04f, 2.633060035e-04f, 2.630467416e-04f, 2.627870438e-04f, 2.625269108e-04f, 2.622663430e-04f, 2.620053408e-04f, 2.617439049e-04f, 2.614820356e-04f, 2.612197335e-04f,
+2.609569990e-04f, 2.606938326e-04f, 2.604302348e-04f, 2.601662061e-04f, 2.599017470e-04f, 2.596368579e-04f, 2.593715394e-04f, 2.591057920e-04f, 2.588396160e-04f, 2.585730122e-04f,
+2.583059808e-04f, 2.580385225e-04f, 2.577706376e-04f, 2.575023268e-04f, 2.572335905e-04f, 2.569644292e-04f, 2.566948433e-04f, 2.564248335e-04f, 2.561544001e-04f, 2.558835437e-04f,
+2.556122649e-04f, 2.553405640e-04f, 2.550684415e-04f, 2.547958981e-04f, 2.545229342e-04f, 2.542495503e-04f, 2.539757468e-04f, 2.537015244e-04f, 2.534268834e-04f, 2.531518245e-04f,
+2.528763481e-04f, 2.526004548e-04f, 2.523241449e-04f, 2.520474191e-04f, 2.517702779e-04f, 2.514927217e-04f, 2.512147511e-04f, 2.509363666e-04f, 2.506575686e-04f, 2.503783578e-04f,
+2.500987346e-04f, 2.498186995e-04f, 2.495382531e-04f, 2.492573958e-04f, 2.489761282e-04f, 2.486944509e-04f, 2.484123642e-04f, 2.481298688e-04f, 2.478469651e-04f, 2.475636536e-04f,
+2.472799350e-04f, 2.469958097e-04f, 2.467112782e-04f, 2.464263411e-04f, 2.461409988e-04f, 2.458552519e-04f, 2.455691010e-04f, 2.452825465e-04f, 2.449955890e-04f, 2.447082290e-04f,
+2.444204670e-04f, 2.441323035e-04f, 2.438437392e-04f, 2.435547744e-04f, 2.432654098e-04f, 2.429756458e-04f, 2.426854831e-04f, 2.423949220e-04f, 2.421039633e-04f, 2.418126073e-04f,
+2.415208546e-04f, 2.412287059e-04f, 2.409361615e-04f, 2.406432220e-04f, 2.403498880e-04f, 2.400561600e-04f, 2.397620385e-04f, 2.394675241e-04f, 2.391726174e-04f, 2.388773187e-04f,
+2.385816288e-04f, 2.382855481e-04f, 2.379890772e-04f, 2.376922165e-04f, 2.373949668e-04f, 2.370973284e-04f, 2.367993020e-04f, 2.365008881e-04f, 2.362020872e-04f, 2.359028998e-04f,
+2.356033266e-04f, 2.353033681e-04f, 2.350030248e-04f, 2.347022972e-04f, 2.344011860e-04f, 2.340996916e-04f, 2.337978146e-04f, 2.334955555e-04f, 2.331929150e-04f, 2.328898936e-04f,
+2.325864917e-04f, 2.322827101e-04f, 2.319785491e-04f, 2.316740094e-04f, 2.313690916e-04f, 2.310637961e-04f, 2.307581236e-04f, 2.304520745e-04f, 2.301456495e-04f, 2.298388492e-04f,
+2.295316739e-04f, 2.292241245e-04f, 2.289162013e-04f, 2.286079049e-04f, 2.282992360e-04f, 2.279901950e-04f, 2.276807825e-04f, 2.273709992e-04f, 2.270608455e-04f, 2.267503220e-04f,
+2.264394293e-04f, 2.261281679e-04f, 2.258165385e-04f, 2.255045415e-04f, 2.251921776e-04f, 2.248794473e-04f, 2.245663511e-04f, 2.242528897e-04f, 2.239390637e-04f, 2.236248735e-04f,
+2.233103198e-04f, 2.229954031e-04f, 2.226801240e-04f, 2.223644830e-04f, 2.220484808e-04f, 2.217321180e-04f, 2.214153950e-04f, 2.210983125e-04f, 2.207808710e-04f, 2.204630711e-04f,
+2.201449135e-04f, 2.198263986e-04f, 2.195075270e-04f, 2.191882993e-04f, 2.188687162e-04f, 2.185487781e-04f, 2.182284857e-04f, 2.179078396e-04f, 2.175868402e-04f, 2.172654882e-04f,
+2.169437843e-04f, 2.166217289e-04f, 2.162993226e-04f, 2.159765661e-04f, 2.156534598e-04f, 2.153300045e-04f, 2.150062007e-04f, 2.146820489e-04f, 2.143575498e-04f, 2.140327039e-04f,
+2.137075118e-04f, 2.133819742e-04f, 2.130560915e-04f, 2.127298645e-04f, 2.124032936e-04f, 2.120763796e-04f, 2.117491228e-04f, 2.114215241e-04f, 2.110935838e-04f, 2.107653028e-04f,
+2.104366814e-04f, 2.101077204e-04f, 2.097784203e-04f, 2.094487817e-04f, 2.091188052e-04f, 2.087884914e-04f, 2.084578409e-04f, 2.081268543e-04f, 2.077955322e-04f, 2.074638752e-04f,
+2.071318839e-04f, 2.067995588e-04f, 2.064669007e-04f, 2.061339100e-04f, 2.058005875e-04f, 2.054669336e-04f, 2.051329490e-04f, 2.047986343e-04f, 2.044639901e-04f, 2.041290169e-04f,
+2.037937155e-04f, 2.034580864e-04f, 2.031221302e-04f, 2.027858475e-04f, 2.024492389e-04f, 2.021123051e-04f, 2.017750466e-04f, 2.014374640e-04f, 2.010995579e-04f, 2.007613291e-04f,
+2.004227779e-04f, 2.000839052e-04f, 1.997447114e-04f, 1.994051972e-04f, 1.990653633e-04f, 1.987252101e-04f, 1.983847384e-04f, 1.980439487e-04f, 1.977028417e-04f, 1.973614179e-04f,
+1.970196780e-04f, 1.966776226e-04f, 1.963352523e-04f, 1.959925677e-04f, 1.956495694e-04f, 1.953062581e-04f, 1.949626344e-04f, 1.946186989e-04f, 1.942744521e-04f, 1.939298948e-04f,
+1.935850276e-04f, 1.932398510e-04f, 1.928943657e-04f, 1.925485722e-04f, 1.922024713e-04f, 1.918560636e-04f, 1.915093496e-04f, 1.911623300e-04f, 1.908150054e-04f, 1.904673764e-04f,
+1.901194437e-04f, 1.897712079e-04f, 1.894226696e-04f, 1.890738294e-04f, 1.887246879e-04f, 1.883752459e-04f, 1.880255038e-04f, 1.876754624e-04f, 1.873251223e-04f, 1.869744840e-04f,
+1.866235482e-04f, 1.862723156e-04f, 1.859207868e-04f, 1.855689624e-04f, 1.852168430e-04f, 1.848644293e-04f, 1.845117219e-04f, 1.841587214e-04f, 1.838054284e-04f, 1.834518437e-04f,
+1.830979678e-04f, 1.827438013e-04f, 1.823893450e-04f, 1.820345994e-04f, 1.816795651e-04f, 1.813242428e-04f, 1.809686332e-04f, 1.806127368e-04f, 1.802565544e-04f, 1.799000864e-04f,
+1.795433337e-04f, 1.791862968e-04f, 1.788289763e-04f, 1.784713730e-04f, 1.781134873e-04f, 1.777553201e-04f, 1.773968718e-04f, 1.770381432e-04f, 1.766791349e-04f, 1.763198476e-04f,
+1.759602818e-04f, 1.756004383e-04f, 1.752403176e-04f, 1.748799204e-04f, 1.745192474e-04f, 1.741582991e-04f, 1.737970763e-04f, 1.734355796e-04f, 1.730738097e-04f, 1.727117671e-04f,
+1.723494525e-04f, 1.719868666e-04f, 1.716240100e-04f, 1.712608833e-04f, 1.708974873e-04f, 1.705338225e-04f, 1.701698897e-04f, 1.698056894e-04f, 1.694412223e-04f, 1.690764890e-04f,
+1.687114903e-04f, 1.683462267e-04f, 1.679806990e-04f, 1.676149077e-04f, 1.672488535e-04f, 1.668825370e-04f, 1.665159590e-04f, 1.661491201e-04f, 1.657820209e-04f, 1.654146620e-04f,
+1.650470442e-04f, 1.646791681e-04f, 1.643110343e-04f, 1.639426435e-04f, 1.635739964e-04f, 1.632050936e-04f, 1.628359357e-04f, 1.624665235e-04f, 1.620968576e-04f, 1.617269386e-04f,
+1.613567671e-04f, 1.609863440e-04f, 1.606156698e-04f, 1.602447451e-04f, 1.598735707e-04f, 1.595021472e-04f, 1.591304752e-04f, 1.587585554e-04f, 1.583863885e-04f, 1.580139752e-04f,
+1.576413161e-04f, 1.572684118e-04f, 1.568952631e-04f, 1.565218705e-04f, 1.561482348e-04f, 1.557743566e-04f, 1.554002367e-04f, 1.550258755e-04f, 1.546512739e-04f, 1.542764324e-04f,
+1.539013518e-04f, 1.535260327e-04f, 1.531504758e-04f, 1.527746817e-04f, 1.523986512e-04f, 1.520223848e-04f, 1.516458833e-04f, 1.512691472e-04f, 1.508921774e-04f, 1.505149744e-04f,
+1.501375390e-04f, 1.497598717e-04f, 1.493819733e-04f, 1.490038445e-04f, 1.486254858e-04f, 1.482468980e-04f, 1.478680818e-04f, 1.474890378e-04f, 1.471097666e-04f, 1.467302691e-04f,
+1.463505458e-04f, 1.459705973e-04f, 1.455904245e-04f, 1.452100279e-04f, 1.448294083e-04f, 1.444485663e-04f, 1.440675025e-04f, 1.436862178e-04f, 1.433047126e-04f, 1.429229877e-04f,
+1.425410439e-04f, 1.421588817e-04f, 1.417765018e-04f, 1.413939050e-04f, 1.410110918e-04f, 1.406280631e-04f, 1.402448193e-04f, 1.398613613e-04f, 1.394776898e-04f, 1.390938053e-04f,
+1.387097085e-04f, 1.383254002e-04f, 1.379408811e-04f, 1.375561517e-04f, 1.371712128e-04f, 1.367860651e-04f, 1.364007093e-04f, 1.360151460e-04f, 1.356293759e-04f, 1.352433997e-04f,
+1.348572180e-04f, 1.344708317e-04f, 1.340842413e-04f, 1.336974475e-04f, 1.333104510e-04f, 1.329232525e-04f, 1.325358527e-04f, 1.321482523e-04f, 1.317604519e-04f, 1.313724523e-04f,
+1.309842541e-04f, 1.305958579e-04f, 1.302072646e-04f, 1.298184748e-04f, 1.294294891e-04f, 1.290403083e-04f, 1.286509330e-04f, 1.282613640e-04f, 1.278716019e-04f, 1.274816474e-04f,
+1.270915011e-04f, 1.267011639e-04f, 1.263106363e-04f, 1.259199191e-04f, 1.255290130e-04f, 1.251379186e-04f, 1.247466366e-04f, 1.243551678e-04f, 1.239635127e-04f, 1.235716722e-04f,
+1.231796468e-04f, 1.227874374e-04f, 1.223950445e-04f, 1.220024689e-04f, 1.216097113e-04f, 1.212167723e-04f, 1.208236527e-04f, 1.204303531e-04f, 1.200368742e-04f, 1.196432168e-04f,
+1.192493815e-04f, 1.188553690e-04f, 1.184611800e-04f, 1.180668153e-04f, 1.176722754e-04f, 1.172775611e-04f, 1.168826732e-04f, 1.164876122e-04f, 1.160923789e-04f, 1.156969739e-04f,
+1.153013981e-04f, 1.149056520e-04f, 1.145097364e-04f, 1.141136520e-04f, 1.137173994e-04f, 1.133209794e-04f, 1.129243926e-04f, 1.125276398e-04f, 1.121307217e-04f, 1.117336389e-04f,
+1.113363922e-04f, 1.109389822e-04f, 1.105414097e-04f, 1.101436753e-04f, 1.097457798e-04f, 1.093477238e-04f, 1.089495081e-04f, 1.085511333e-04f, 1.081526002e-04f, 1.077539094e-04f,
+1.073550617e-04f, 1.069560578e-04f, 1.065568983e-04f, 1.061575840e-04f, 1.057581155e-04f, 1.053584936e-04f, 1.049587189e-04f, 1.045587923e-04f, 1.041587143e-04f, 1.037584856e-04f,
+1.033581071e-04f, 1.029575793e-04f, 1.025569030e-04f, 1.021560789e-04f, 1.017551077e-04f, 1.013539901e-04f, 1.009527268e-04f, 1.005513185e-04f, 1.001497659e-04f, 9.974806976e-05f,
+9.934623071e-05f, 9.894424948e-05f, 9.854212679e-05f, 9.813986334e-05f, 9.773745982e-05f, 9.733491696e-05f, 9.693223546e-05f, 9.652941602e-05f, 9.612645935e-05f, 9.572336615e-05f,
+9.532013714e-05f, 9.491677303e-05f, 9.451327451e-05f, 9.410964229e-05f, 9.370587710e-05f, 9.330197962e-05f, 9.289795058e-05f, 9.249379067e-05f, 9.208950061e-05f, 9.168508111e-05f,
+9.128053288e-05f, 9.087585662e-05f, 9.047105304e-05f, 9.006612286e-05f, 8.966106678e-05f, 8.925588551e-05f, 8.885057976e-05f, 8.844515025e-05f, 8.803959768e-05f, 8.763392276e-05f,
+8.722812621e-05f, 8.682220874e-05f, 8.641617104e-05f, 8.601001385e-05f, 8.560373786e-05f, 8.519734379e-05f, 8.479083236e-05f, 8.438420426e-05f, 8.397746022e-05f, 8.357060094e-05f,
+8.316362715e-05f, 8.275653954e-05f, 8.234933884e-05f, 8.194202575e-05f, 8.153460099e-05f, 8.112706527e-05f, 8.071941930e-05f, 8.031166381e-05f, 7.990379949e-05f, 7.949582706e-05f,
+7.908774724e-05f, 7.867956075e-05f, 7.827126828e-05f, 7.786287057e-05f, 7.745436832e-05f, 7.704576224e-05f, 7.663705306e-05f, 7.622824148e-05f, 7.581932822e-05f, 7.541031399e-05f,
+7.500119951e-05f, 7.459198550e-05f, 7.418267267e-05f, 7.377326173e-05f, 7.336375339e-05f, 7.295414839e-05f, 7.254444742e-05f, 7.213465121e-05f, 7.172476048e-05f, 7.131477593e-05f,
+7.090469828e-05f, 7.049452825e-05f, 7.008426656e-05f, 6.967391392e-05f, 6.926347104e-05f, 6.885293866e-05f, 6.844231747e-05f, 6.803160820e-05f, 6.762081157e-05f, 6.720992828e-05f,
+6.679895907e-05f, 6.638790464e-05f, 6.597676571e-05f, 6.556554300e-05f, 6.515423723e-05f, 6.474284912e-05f, 6.433137937e-05f, 6.391982872e-05f, 6.350819787e-05f, 6.309648755e-05f,
+6.268469847e-05f, 6.227283135e-05f, 6.186088692e-05f, 6.144886587e-05f, 6.103676895e-05f, 6.062459685e-05f, 6.021235031e-05f, 5.980003004e-05f, 5.938763676e-05f, 5.897517118e-05f,
+5.856263403e-05f, 5.815002603e-05f, 5.773734789e-05f, 5.732460033e-05f, 5.691178407e-05f, 5.649889983e-05f, 5.608594833e-05f, 5.567293029e-05f, 5.525984643e-05f, 5.484669746e-05f,
+5.443348411e-05f, 5.402020710e-05f, 5.360686714e-05f, 5.319346495e-05f, 5.278000126e-05f, 5.236647678e-05f, 5.195289223e-05f, 5.153924834e-05f, 5.112554581e-05f, 5.071178538e-05f,
+5.029796777e-05f, 4.988409368e-05f, 4.947016384e-05f, 4.905617898e-05f, 4.864213981e-05f, 4.822804705e-05f, 4.781390142e-05f, 4.739970364e-05f, 4.698545444e-05f, 4.657115452e-05f,
+4.615680462e-05f, 4.574240545e-05f, 4.532795774e-05f, 4.491346220e-05f, 4.449891955e-05f, 4.408433051e-05f, 4.366969581e-05f, 4.325501617e-05f, 4.284029229e-05f, 4.242552492e-05f,
+4.201071476e-05f, 4.159586254e-05f, 4.118096897e-05f, 4.076603478e-05f, 4.035106069e-05f, 3.993604742e-05f, 3.952099569e-05f, 3.910590622e-05f, 3.869077973e-05f, 3.827561694e-05f,
+3.786041857e-05f, 3.744518535e-05f, 3.702991798e-05f, 3.661461721e-05f, 3.619928373e-05f, 3.578391829e-05f, 3.536852159e-05f, 3.495309435e-05f, 3.453763730e-05f, 3.412215116e-05f,
+3.370663665e-05f, 3.329109449e-05f, 3.287552540e-05f, 3.245993010e-05f, 3.204430931e-05f, 3.162866375e-05f, 3.121299415e-05f, 3.079730122e-05f, 3.038158568e-05f, 2.996584826e-05f,
+2.955008967e-05f, 2.913431064e-05f, 2.871851188e-05f, 2.830269412e-05f, 2.788685808e-05f, 2.747100448e-05f, 2.705513403e-05f, 2.663924746e-05f, 2.622334549e-05f, 2.580742884e-05f,
+2.539149824e-05f, 2.497555439e-05f, 2.455959802e-05f, 2.414362985e-05f, 2.372765060e-05f, 2.331166099e-05f, 2.289566175e-05f, 2.247965359e-05f, 2.206363722e-05f, 2.164761338e-05f,
+2.123158278e-05f, 2.081554615e-05f, 2.039950419e-05f, 1.998345764e-05f, 1.956740720e-05f, 1.915135361e-05f, 1.873529758e-05f, 1.831923983e-05f, 1.790318108e-05f, 1.748712204e-05f,
+1.707106345e-05f, 1.665500602e-05f, 1.623895046e-05f, 1.582289750e-05f, 1.540684786e-05f, 1.499080226e-05f, 1.457476141e-05f, 1.415872603e-05f, 1.374269685e-05f, 1.332667458e-05f,
+1.291065995e-05f, 1.249465366e-05f, 1.207865644e-05f, 1.166266901e-05f, 1.124669209e-05f, 1.083072639e-05f, 1.041477263e-05f, 9.998831541e-06f, 9.582903830e-06f, 9.166990217e-06f,
+8.751091422e-06f, 8.335208161e-06f, 7.919341155e-06f, 7.503491119e-06f, 7.087658773e-06f, 6.671844834e-06f, 6.256050020e-06f, 5.840275049e-06f, 5.424520637e-06f, 5.008787503e-06f,
+4.593076365e-06f, 4.177387938e-06f, 3.761722941e-06f, 3.346082090e-06f, 2.930466104e-06f, 2.514875697e-06f, 2.099311588e-06f, 1.683774494e-06f, 1.268265129e-06f, 8.527842127e-07f,
+4.373324595e-07f, 2.191058641e-08f, -3.934806905e-07f, -8.088406550e-07f, -1.224168591e-06f, -1.639463783e-06f, -2.054725515e-06f, -2.469953071e-06f, -2.885145736e-06f, -3.300302794e-06f,
+-3.715423530e-06f, -4.130507229e-06f, -4.545553175e-06f, -4.960560654e-06f, -5.375528951e-06f, -5.790457350e-06f, -6.205345138e-06f, -6.620191600e-06f, -7.034996021e-06f, -7.449757688e-06f,
+-7.864475886e-06f, -8.279149900e-06f, -8.693779018e-06f, -9.108362526e-06f, -9.522899709e-06f, -9.937389854e-06f, -1.035183225e-05f, -1.076622618e-05f, -1.118057093e-05f, -1.159486580e-05f,
+-1.200911006e-05f, -1.242330300e-05f, -1.283744392e-05f, -1.325153209e-05f, -1.366556682e-05f, -1.407954737e-05f, -1.449347306e-05f, -1.490734315e-05f, -1.532115694e-05f, -1.573491372e-05f,
+-1.614861278e-05f, -1.656225341e-05f, -1.697583488e-05f, -1.738935651e-05f, -1.780281756e-05f, -1.821621734e-05f, -1.862955513e-05f, -1.904283022e-05f, -1.945604191e-05f, -1.986918948e-05f,
+-2.028227221e-05f, -2.069528942e-05f, -2.110824037e-05f, -2.152112437e-05f, -2.193394070e-05f, -2.234668866e-05f, -2.275936754e-05f, -2.317197662e-05f, -2.358451521e-05f, -2.399698258e-05f,
+-2.440937804e-05f, -2.482170088e-05f, -2.523395038e-05f, -2.564612585e-05f, -2.605822657e-05f, -2.647025183e-05f, -2.688220094e-05f, -2.729407317e-05f, -2.770586784e-05f, -2.811758422e-05f,
+-2.852922161e-05f, -2.894077931e-05f, -2.935225662e-05f, -2.976365282e-05f, -3.017496720e-05f, -3.058619908e-05f, -3.099734773e-05f, -3.140841246e-05f, -3.181939256e-05f, -3.223028732e-05f,
+-3.264109604e-05f, -3.305181803e-05f, -3.346245256e-05f, -3.387299895e-05f, -3.428345648e-05f, -3.469382445e-05f, -3.510410217e-05f, -3.551428892e-05f, -3.592438400e-05f, -3.633438672e-05f,
+-3.674429636e-05f, -3.715411224e-05f, -3.756383364e-05f, -3.797345986e-05f, -3.838299021e-05f, -3.879242397e-05f, -3.920176046e-05f, -3.961099897e-05f, -4.002013880e-05f, -4.042917924e-05f,
+-4.083811961e-05f, -4.124695919e-05f, -4.165569730e-05f, -4.206433322e-05f, -4.247286627e-05f, -4.288129574e-05f, -4.328962093e-05f, -4.369784115e-05f, -4.410595569e-05f, -4.451396386e-05f,
+-4.492186497e-05f, -4.532965830e-05f, -4.573734318e-05f, -4.614491889e-05f, -4.655238474e-05f, -4.695974004e-05f, -4.736698409e-05f, -4.777411620e-05f, -4.818113566e-05f, -4.858804178e-05f,
+-4.899483387e-05f, -4.940151123e-05f, -4.980807317e-05f, -5.021451899e-05f, -5.062084800e-05f, -5.102705951e-05f, -5.143315281e-05f, -5.183912722e-05f, -5.224498204e-05f, -5.265071658e-05f,
+-5.305633015e-05f, -5.346182206e-05f, -5.386719160e-05f, -5.427243810e-05f, -5.467756085e-05f, -5.508255918e-05f, -5.548743238e-05f, -5.589217976e-05f, -5.629680064e-05f, -5.670129432e-05f,
+-5.710566012e-05f, -5.750989734e-05f, -5.791400529e-05f, -5.831798329e-05f, -5.872183065e-05f, -5.912554667e-05f, -5.952913067e-05f, -5.993258196e-05f, -6.033589986e-05f, -6.073908367e-05f,
+-6.114213270e-05f, -6.154504628e-05f, -6.194782371e-05f, -6.235046431e-05f, -6.275296739e-05f, -6.315533227e-05f, -6.355755825e-05f, -6.395964466e-05f, -6.436159080e-05f, -6.476339601e-05f,
+-6.516505958e-05f, -6.556658083e-05f, -6.596795909e-05f, -6.636919367e-05f, -6.677028388e-05f, -6.717122904e-05f, -6.757202847e-05f, -6.797268149e-05f, -6.837318742e-05f, -6.877354556e-05f,
+-6.917375525e-05f, -6.957381580e-05f, -6.997372653e-05f, -7.037348675e-05f, -7.077309580e-05f, -7.117255298e-05f, -7.157185763e-05f, -7.197100905e-05f, -7.237000657e-05f, -7.276884952e-05f,
+-7.316753721e-05f, -7.356606896e-05f, -7.396444411e-05f, -7.436266196e-05f, -7.476072185e-05f, -7.515862310e-05f, -7.555636502e-05f, -7.595394695e-05f, -7.635136821e-05f, -7.674862812e-05f,
+-7.714572602e-05f, -7.754266121e-05f, -7.793943303e-05f, -7.833604081e-05f, -7.873248387e-05f, -7.912876153e-05f, -7.952487314e-05f, -7.992081800e-05f, -8.031659545e-05f, -8.071220482e-05f,
+-8.110764543e-05f, -8.150291662e-05f, -8.189801771e-05f, -8.229294804e-05f, -8.268770692e-05f, -8.308229370e-05f, -8.347670770e-05f, -8.387094825e-05f, -8.426501469e-05f, -8.465890634e-05f,
+-8.505262253e-05f, -8.544616261e-05f, -8.583952590e-05f, -8.623271173e-05f, -8.662571944e-05f, -8.701854836e-05f, -8.741119783e-05f, -8.780366717e-05f, -8.819595573e-05f, -8.858806283e-05f,
+-8.897998782e-05f, -8.937173003e-05f, -8.976328879e-05f, -9.015466345e-05f, -9.054585333e-05f, -9.093685778e-05f, -9.132767613e-05f, -9.171830773e-05f, -9.210875190e-05f, -9.249900799e-05f,
+-9.288907533e-05f, -9.327895328e-05f, -9.366864116e-05f, -9.405813831e-05f, -9.444744408e-05f, -9.483655781e-05f, -9.522547884e-05f, -9.561420650e-05f, -9.600274015e-05f, -9.639107912e-05f,
+-9.677922276e-05f, -9.716717042e-05f, -9.755492142e-05f, -9.794247513e-05f, -9.832983087e-05f, -9.871698800e-05f, -9.910394587e-05f, -9.949070381e-05f, -9.987726118e-05f, -1.002636173e-04f,
+-1.006497716e-04f, -1.010357233e-04f, -1.014214718e-04f, -1.018070165e-04f, -1.021923567e-04f, -1.025774917e-04f, -1.029624210e-04f, -1.033471438e-04f, -1.037316595e-04f, -1.041159675e-04f,
+-1.045000671e-04f, -1.048839576e-04f, -1.052676385e-04f, -1.056511090e-04f, -1.060343685e-04f, -1.064174163e-04f, -1.068002519e-04f, -1.071828746e-04f, -1.075652837e-04f, -1.079474786e-04f,
+-1.083294586e-04f, -1.087112231e-04f, -1.090927715e-04f, -1.094741030e-04f, -1.098552171e-04f, -1.102361132e-04f, -1.106167905e-04f, -1.109972484e-04f, -1.113774863e-04f, -1.117575036e-04f,
+-1.121372996e-04f, -1.125168736e-04f, -1.128962251e-04f, -1.132753533e-04f, -1.136542578e-04f, -1.140329377e-04f, -1.144113925e-04f, -1.147896215e-04f, -1.151676241e-04f, -1.155453997e-04f,
+-1.159229476e-04f, -1.163002672e-04f, -1.166773578e-04f, -1.170542188e-04f, -1.174308497e-04f, -1.178072497e-04f, -1.181834181e-04f, -1.185593545e-04f, -1.189350581e-04f, -1.193105284e-04f,
+-1.196857646e-04f, -1.200607661e-04f, -1.204355324e-04f, -1.208100628e-04f, -1.211843566e-04f, -1.215584132e-04f, -1.219322321e-04f, -1.223058125e-04f, -1.226791538e-04f, -1.230522555e-04f,
+-1.234251169e-04f, -1.237977373e-04f, -1.241701161e-04f, -1.245422528e-04f, -1.249141466e-04f, -1.252857970e-04f, -1.256572033e-04f, -1.260283649e-04f, -1.263992812e-04f, -1.267699516e-04f,
+-1.271403754e-04f, -1.275105520e-04f, -1.278804808e-04f, -1.282501611e-04f, -1.286195924e-04f, -1.289887741e-04f, -1.293577054e-04f, -1.297263859e-04f, -1.300948148e-04f, -1.304629916e-04f,
+-1.308309156e-04f, -1.311985862e-04f, -1.315660028e-04f, -1.319331648e-04f, -1.323000715e-04f, -1.326667224e-04f, -1.330331169e-04f, -1.333992542e-04f, -1.337651339e-04f, -1.341307552e-04f,
+-1.344961177e-04f, -1.348612206e-04f, -1.352260633e-04f, -1.355906453e-04f, -1.359549660e-04f, -1.363190246e-04f, -1.366828207e-04f, -1.370463535e-04f, -1.374096226e-04f, -1.377726272e-04f,
+-1.381353668e-04f, -1.384978408e-04f, -1.388600485e-04f, -1.392219894e-04f, -1.395836628e-04f, -1.399450682e-04f, -1.403062049e-04f, -1.406670723e-04f, -1.410276699e-04f, -1.413879970e-04f,
+-1.417480530e-04f, -1.421078373e-04f, -1.424673493e-04f, -1.428265885e-04f, -1.431855541e-04f, -1.435442457e-04f, -1.439026626e-04f, -1.442608042e-04f, -1.446186699e-04f, -1.449762591e-04f,
+-1.453335712e-04f, -1.456906057e-04f, -1.460473618e-04f, -1.464038391e-04f, -1.467600370e-04f, -1.471159547e-04f, -1.474715918e-04f, -1.478269477e-04f, -1.481820217e-04f, -1.485368132e-04f,
+-1.488913218e-04f, -1.492455467e-04f, -1.495994873e-04f, -1.499531432e-04f, -1.503065137e-04f, -1.506595981e-04f, -1.510123960e-04f, -1.513649068e-04f, -1.517171297e-04f, -1.520690644e-04f,
+-1.524207101e-04f, -1.527720662e-04f, -1.531231323e-04f, -1.534739077e-04f, -1.538243918e-04f, -1.541745840e-04f, -1.545244838e-04f, -1.548740906e-04f, -1.552234037e-04f, -1.555724227e-04f,
+-1.559211469e-04f, -1.562695757e-04f, -1.566177086e-04f, -1.569655450e-04f, -1.573130843e-04f, -1.576603259e-04f, -1.580072692e-04f, -1.583539137e-04f, -1.587002588e-04f, -1.590463040e-04f,
+-1.593920485e-04f, -1.597374919e-04f, -1.600826336e-04f, -1.604274730e-04f, -1.607720096e-04f, -1.611162427e-04f, -1.614601718e-04f, -1.618037963e-04f, -1.621471157e-04f, -1.624901293e-04f,
+-1.628328367e-04f, -1.631752372e-04f, -1.635173302e-04f, -1.638591153e-04f, -1.642005917e-04f, -1.645417591e-04f, -1.648826167e-04f, -1.652231641e-04f, -1.655634006e-04f, -1.659033257e-04f,
+-1.662429388e-04f, -1.665822394e-04f, -1.669212270e-04f, -1.672599008e-04f, -1.675982604e-04f, -1.679363053e-04f, -1.682740348e-04f, -1.686114484e-04f, -1.689485455e-04f, -1.692853256e-04f,
+-1.696217881e-04f, -1.699579324e-04f, -1.702937581e-04f, -1.706292645e-04f, -1.709644511e-04f, -1.712993173e-04f, -1.716338626e-04f, -1.719680864e-04f, -1.723019882e-04f, -1.726355674e-04f,
+-1.729688234e-04f, -1.733017557e-04f, -1.736343638e-04f, -1.739666471e-04f, -1.742986051e-04f, -1.746302371e-04f, -1.749615427e-04f, -1.752925213e-04f, -1.756231724e-04f, -1.759534953e-04f,
+-1.762834897e-04f, -1.766131548e-04f, -1.769424902e-04f, -1.772714953e-04f, -1.776001696e-04f, -1.779285126e-04f, -1.782565236e-04f, -1.785842022e-04f, -1.789115477e-04f, -1.792385598e-04f,
+-1.795652378e-04f, -1.798915811e-04f, -1.802175893e-04f, -1.805432618e-04f, -1.808685981e-04f, -1.811935976e-04f, -1.815182597e-04f, -1.818425841e-04f, -1.821665700e-04f, -1.824902171e-04f,
+-1.828135247e-04f, -1.831364923e-04f, -1.834591194e-04f, -1.837814054e-04f, -1.841033498e-04f, -1.844249522e-04f, -1.847462119e-04f, -1.850671284e-04f, -1.853877012e-04f, -1.857079298e-04f,
+-1.860278136e-04f, -1.863473521e-04f, -1.866665448e-04f, -1.869853911e-04f, -1.873038906e-04f, -1.876220427e-04f, -1.879398469e-04f, -1.882573026e-04f, -1.885744094e-04f, -1.888911666e-04f,
+-1.892075739e-04f, -1.895236306e-04f, -1.898393363e-04f, -1.901546904e-04f, -1.904696924e-04f, -1.907843418e-04f, -1.910986380e-04f, -1.914125807e-04f, -1.917261691e-04f, -1.920394029e-04f,
+-1.923522815e-04f, -1.926648043e-04f, -1.929769710e-04f, -1.932887809e-04f, -1.936002335e-04f, -1.939113284e-04f, -1.942220650e-04f, -1.945324429e-04f, -1.948424614e-04f, -1.951521201e-04f,
+-1.954614185e-04f, -1.957703561e-04f, -1.960789324e-04f, -1.963871468e-04f, -1.966949989e-04f, -1.970024881e-04f, -1.973096140e-04f, -1.976163760e-04f, -1.979227737e-04f, -1.982288065e-04f,
+-1.985344739e-04f, -1.988397755e-04f, -1.991447107e-04f, -1.994492790e-04f, -1.997534799e-04f, -2.000573130e-04f, -2.003607777e-04f, -2.006638736e-04f, -2.009666001e-04f, -2.012689567e-04f,
+-2.015709430e-04f, -2.018725584e-04f, -2.021738025e-04f, -2.024746748e-04f, -2.027751747e-04f, -2.030753018e-04f, -2.033750556e-04f, -2.036744356e-04f, -2.039734413e-04f, -2.042720722e-04f,
+-2.045703279e-04f, -2.048682078e-04f, -2.051657114e-04f, -2.054628383e-04f, -2.057595880e-04f, -2.060559600e-04f, -2.063519538e-04f, -2.066475689e-04f, -2.069428049e-04f, -2.072376613e-04f,
+-2.075321375e-04f, -2.078262331e-04f, -2.081199476e-04f, -2.084132806e-04f, -2.087062315e-04f, -2.089987999e-04f, -2.092909853e-04f, -2.095827873e-04f, -2.098742053e-04f, -2.101652389e-04f,
+-2.104558875e-04f, -2.107461508e-04f, -2.110360283e-04f, -2.113255194e-04f, -2.116146237e-04f, -2.119033408e-04f, -2.121916701e-04f, -2.124796112e-04f, -2.127671637e-04f, -2.130543270e-04f,
+-2.133411007e-04f, -2.136274843e-04f, -2.139134774e-04f, -2.141990795e-04f, -2.144842901e-04f, -2.147691087e-04f, -2.150535350e-04f, -2.153375684e-04f, -2.156212084e-04f, -2.159044547e-04f,
+-2.161873067e-04f, -2.164697641e-04f, -2.167518262e-04f, -2.170334927e-04f, -2.173147632e-04f, -2.175956371e-04f, -2.178761140e-04f, -2.181561934e-04f, -2.184358749e-04f, -2.187151581e-04f,
+-2.189940424e-04f, -2.192725275e-04f, -2.195506129e-04f, -2.198282981e-04f, -2.201055826e-04f, -2.203824661e-04f, -2.206589481e-04f, -2.209350281e-04f, -2.212107056e-04f, -2.214859804e-04f,
+-2.217608517e-04f, -2.220353194e-04f, -2.223093828e-04f, -2.225830416e-04f, -2.228562953e-04f, -2.231291435e-04f, -2.234015857e-04f, -2.236736214e-04f, -2.239452504e-04f, -2.242164720e-04f,
+-2.244872859e-04f, -2.247576916e-04f, -2.250276887e-04f, -2.252972768e-04f, -2.255664554e-04f, -2.258352240e-04f, -2.261035823e-04f, -2.263715298e-04f, -2.266390662e-04f, -2.269061908e-04f,
+-2.271729034e-04f, -2.274392034e-04f, -2.277050905e-04f, -2.279705643e-04f, -2.282356242e-04f, -2.285002699e-04f, -2.287645010e-04f, -2.290283170e-04f, -2.292917174e-04f, -2.295547019e-04f,
+-2.298172701e-04f, -2.300794215e-04f, -2.303411557e-04f, -2.306024723e-04f, -2.308633708e-04f, -2.311238508e-04f, -2.313839120e-04f, -2.316435539e-04f, -2.319027760e-04f, -2.321615780e-04f,
+-2.324199595e-04f, -2.326779200e-04f, -2.329354591e-04f, -2.331925763e-04f, -2.334492714e-04f, -2.337055439e-04f, -2.339613933e-04f, -2.342168193e-04f, -2.344718214e-04f, -2.347263992e-04f,
+-2.349805524e-04f, -2.352342804e-04f, -2.354875830e-04f, -2.357404597e-04f, -2.359929100e-04f, -2.362449337e-04f, -2.364965302e-04f, -2.367476993e-04f, -2.369984404e-04f, -2.372487531e-04f,
+-2.374986372e-04f, -2.377480921e-04f, -2.379971175e-04f, -2.382457130e-04f, -2.384938782e-04f, -2.387416126e-04f, -2.389889159e-04f, -2.392357877e-04f, -2.394822276e-04f, -2.397282352e-04f,
+-2.399738102e-04f, -2.402189520e-04f, -2.404636603e-04f, -2.407079348e-04f, -2.409517750e-04f, -2.411951806e-04f, -2.414381511e-04f, -2.416806862e-04f, -2.419227855e-04f, -2.421644486e-04f,
+-2.424056751e-04f, -2.426464646e-04f, -2.428868168e-04f, -2.431267312e-04f, -2.433662075e-04f, -2.436052453e-04f, -2.438438443e-04f, -2.440820039e-04f, -2.443197239e-04f, -2.445570040e-04f,
+-2.447938436e-04f, -2.450302424e-04f, -2.452662001e-04f, -2.455017162e-04f, -2.457367905e-04f, -2.459714224e-04f, -2.462056117e-04f, -2.464393580e-04f, -2.466726610e-04f, -2.469055201e-04f,
+-2.471379351e-04f, -2.473699056e-04f, -2.476014313e-04f, -2.478325117e-04f, -2.480631465e-04f, -2.482933353e-04f, -2.485230778e-04f, -2.487523736e-04f, -2.489812223e-04f, -2.492096236e-04f,
+-2.494375771e-04f, -2.496650825e-04f, -2.498921393e-04f, -2.501187473e-04f, -2.503449061e-04f, -2.505706152e-04f, -2.507958745e-04f, -2.510206834e-04f, -2.512450417e-04f, -2.514689490e-04f,
+-2.516924049e-04f, -2.519154091e-04f, -2.521379612e-04f, -2.523600609e-04f, -2.525817078e-04f, -2.528029016e-04f, -2.530236420e-04f, -2.532439285e-04f, -2.534637609e-04f, -2.536831388e-04f,
+-2.539020618e-04f, -2.541205296e-04f, -2.543385418e-04f, -2.545560982e-04f, -2.547731983e-04f, -2.549898419e-04f, -2.552060285e-04f, -2.554217579e-04f, -2.556370297e-04f, -2.558518436e-04f,
+-2.560661992e-04f, -2.562800962e-04f, -2.564935343e-04f, -2.567065131e-04f, -2.569190322e-04f, -2.571310915e-04f, -2.573426904e-04f, -2.575538288e-04f, -2.577645062e-04f, -2.579747223e-04f,
+-2.581844768e-04f, -2.583937694e-04f, -2.586025998e-04f, -2.588109675e-04f, -2.590188724e-04f, -2.592263140e-04f, -2.594332921e-04f, -2.596398063e-04f, -2.598458562e-04f, -2.600514417e-04f,
+-2.602565623e-04f, -2.604612177e-04f, -2.606654077e-04f, -2.608691318e-04f, -2.610723898e-04f, -2.612751814e-04f, -2.614775062e-04f, -2.616793640e-04f, -2.618807543e-04f, -2.620816770e-04f,
+-2.622821316e-04f, -2.624821179e-04f, -2.626816356e-04f, -2.628806844e-04f, -2.630792638e-04f, -2.632773737e-04f, -2.634750138e-04f, -2.636721836e-04f, -2.638688830e-04f, -2.640651116e-04f,
+-2.642608691e-04f, -2.644561552e-04f, -2.646509695e-04f, -2.648453119e-04f, -2.650391820e-04f, -2.652325794e-04f, -2.654255040e-04f, -2.656179554e-04f, -2.658099332e-04f, -2.660014373e-04f,
+-2.661924672e-04f, -2.663830228e-04f, -2.665731037e-04f, -2.667627096e-04f, -2.669518402e-04f, -2.671404953e-04f, -2.673286745e-04f, -2.675163776e-04f, -2.677036042e-04f, -2.678903542e-04f,
+-2.680766271e-04f, -2.682624227e-04f, -2.684477407e-04f, -2.686325809e-04f, -2.688169429e-04f, -2.690008265e-04f, -2.691842313e-04f, -2.693671572e-04f, -2.695496038e-04f, -2.697315708e-04f,
+-2.699130580e-04f, -2.700940651e-04f, -2.702745917e-04f, -2.704546377e-04f, -2.706342028e-04f, -2.708132866e-04f, -2.709918890e-04f, -2.711700095e-04f, -2.713476480e-04f, -2.715248042e-04f,
+-2.717014779e-04f, -2.718776686e-04f, -2.720533763e-04f, -2.722286006e-04f, -2.724033412e-04f, -2.725775978e-04f, -2.727513703e-04f, -2.729246583e-04f, -2.730974617e-04f, -2.732697800e-04f,
+-2.734416131e-04f, -2.736129607e-04f, -2.737838225e-04f, -2.739541983e-04f, -2.741240878e-04f, -2.742934908e-04f, -2.744624069e-04f, -2.746308361e-04f, -2.747987779e-04f, -2.749662321e-04f,
+-2.751331985e-04f, -2.752996769e-04f, -2.754656669e-04f, -2.756311684e-04f, -2.757961811e-04f, -2.759607046e-04f, -2.761247389e-04f, -2.762882836e-04f, -2.764513385e-04f, -2.766139033e-04f,
+-2.767759778e-04f, -2.769375618e-04f, -2.770986549e-04f, -2.772592571e-04f, -2.774193679e-04f, -2.775789873e-04f, -2.777381149e-04f, -2.778967505e-04f, -2.780548939e-04f, -2.782125448e-04f,
+-2.783697030e-04f, -2.785263682e-04f, -2.786825403e-04f, -2.788382190e-04f, -2.789934040e-04f, -2.791480952e-04f, -2.793022923e-04f, -2.794559950e-04f, -2.796092032e-04f, -2.797619165e-04f,
+-2.799141349e-04f, -2.800658580e-04f, -2.802170856e-04f, -2.803678176e-04f, -2.805180536e-04f, -2.806677935e-04f, -2.808170370e-04f, -2.809657840e-04f, -2.811140341e-04f, -2.812617872e-04f,
+-2.814090431e-04f, -2.815558015e-04f, -2.817020622e-04f, -2.818478250e-04f, -2.819930897e-04f, -2.821378561e-04f, -2.822821240e-04f, -2.824258931e-04f, -2.825691632e-04f, -2.827119342e-04f,
+-2.828542058e-04f, -2.829959778e-04f, -2.831372500e-04f, -2.832780222e-04f, -2.834182941e-04f, -2.835580657e-04f, -2.836973366e-04f, -2.838361067e-04f, -2.839743758e-04f, -2.841121436e-04f,
+-2.842494101e-04f, -2.843861748e-04f, -2.845224378e-04f, -2.846581987e-04f, -2.847934574e-04f, -2.849282136e-04f, -2.850624672e-04f, -2.851962181e-04f, -2.853294659e-04f, -2.854622105e-04f,
+-2.855944517e-04f, -2.857261893e-04f, -2.858574231e-04f, -2.859881530e-04f, -2.861183787e-04f, -2.862481001e-04f, -2.863773169e-04f, -2.865060291e-04f, -2.866342363e-04f, -2.867619384e-04f,
+-2.868891353e-04f, -2.870158267e-04f, -2.871420125e-04f, -2.872676924e-04f, -2.873928664e-04f, -2.875175342e-04f, -2.876416957e-04f, -2.877653506e-04f, -2.878884988e-04f, -2.880111401e-04f,
+-2.881332744e-04f, -2.882549014e-04f, -2.883760211e-04f, -2.884966332e-04f, -2.886167375e-04f, -2.887363339e-04f, -2.888554222e-04f, -2.889740023e-04f, -2.890920740e-04f, -2.892096370e-04f,
+-2.893266914e-04f, -2.894432368e-04f, -2.895592731e-04f, -2.896748002e-04f, -2.897898179e-04f, -2.899043260e-04f, -2.900183244e-04f, -2.901318129e-04f, -2.902447913e-04f, -2.903572596e-04f,
+-2.904692175e-04f, -2.905806649e-04f, -2.906916016e-04f, -2.908020275e-04f, -2.909119424e-04f, -2.910213462e-04f, -2.911302387e-04f, -2.912386198e-04f, -2.913464893e-04f, -2.914538471e-04f,
+-2.915606930e-04f, -2.916670268e-04f, -2.917728485e-04f, -2.918781579e-04f, -2.919829549e-04f, -2.920872392e-04f, -2.921910108e-04f, -2.922942695e-04f, -2.923970152e-04f, -2.924992477e-04f,
+-2.926009669e-04f, -2.927021727e-04f, -2.928028649e-04f, -2.929030434e-04f, -2.930027080e-04f, -2.931018587e-04f, -2.932004952e-04f, -2.932986175e-04f, -2.933962254e-04f, -2.934933188e-04f,
+-2.935898975e-04f, -2.936859615e-04f, -2.937815106e-04f, -2.938765446e-04f, -2.939710635e-04f, -2.940650671e-04f, -2.941585554e-04f, -2.942515281e-04f, -2.943439851e-04f, -2.944359264e-04f,
+-2.945273518e-04f, -2.946182612e-04f, -2.947086544e-04f, -2.947985314e-04f, -2.948878921e-04f, -2.949767362e-04f, -2.950650638e-04f, -2.951528747e-04f, -2.952401687e-04f, -2.953269458e-04f,
+-2.954132059e-04f, -2.954989488e-04f, -2.955841744e-04f, -2.956688826e-04f, -2.957530734e-04f, -2.958367466e-04f, -2.959199020e-04f, -2.960025397e-04f, -2.960846595e-04f, -2.961662612e-04f,
+-2.962473448e-04f, -2.963279103e-04f, -2.964079574e-04f, -2.964874860e-04f, -2.965664962e-04f, -2.966449878e-04f, -2.967229606e-04f, -2.968004146e-04f, -2.968773497e-04f, -2.969537659e-04f,
+-2.970296629e-04f, -2.971050407e-04f, -2.971798993e-04f, -2.972542385e-04f, -2.973280583e-04f, -2.974013585e-04f, -2.974741390e-04f, -2.975463999e-04f, -2.976181409e-04f, -2.976893620e-04f,
+-2.977600632e-04f, -2.978302443e-04f, -2.978999052e-04f, -2.979690459e-04f, -2.980376663e-04f, -2.981057664e-04f, -2.981733459e-04f, -2.982404049e-04f, -2.983069433e-04f, -2.983729610e-04f,
+-2.984384579e-04f, -2.985034340e-04f, -2.985678891e-04f, -2.986318232e-04f, -2.986952363e-04f, -2.987581283e-04f, -2.988204990e-04f, -2.988823484e-04f, -2.989436765e-04f, -2.990044832e-04f,
+-2.990647684e-04f, -2.991245321e-04f, -2.991837741e-04f, -2.992424945e-04f, -2.993006931e-04f, -2.993583699e-04f, -2.994155249e-04f, -2.994721580e-04f, -2.995282690e-04f, -2.995838581e-04f,
+-2.996389250e-04f, -2.996934698e-04f, -2.997474923e-04f, -2.998009927e-04f, -2.998539707e-04f, -2.999064263e-04f, -2.999583595e-04f, -3.000097702e-04f, -3.000606584e-04f, -3.001110241e-04f,
+-3.001608671e-04f, -3.002101875e-04f, -3.002589851e-04f, -3.003072600e-04f, -3.003550121e-04f, -3.004022413e-04f, -3.004489476e-04f, -3.004951310e-04f, -3.005407915e-04f, -3.005859289e-04f,
+-3.006305432e-04f, -3.006746345e-04f, -3.007182027e-04f, -3.007612476e-04f, -3.008037694e-04f, -3.008457679e-04f, -3.008872432e-04f, -3.009281952e-04f, -3.009686238e-04f, -3.010085291e-04f,
+-3.010479110e-04f, -3.010867694e-04f, -3.011251044e-04f, -3.011629159e-04f, -3.012002039e-04f, -3.012369684e-04f, -3.012732093e-04f, -3.013089266e-04f, -3.013441204e-04f, -3.013787905e-04f,
+-3.014129369e-04f, -3.014465597e-04f, -3.014796588e-04f, -3.015122342e-04f, -3.015442859e-04f, -3.015758138e-04f, -3.016068180e-04f, -3.016372984e-04f, -3.016672550e-04f, -3.016966878e-04f,
+-3.017255969e-04f, -3.017539821e-04f, -3.017818434e-04f, -3.018091810e-04f, -3.018359946e-04f, -3.018622845e-04f, -3.018880504e-04f, -3.019132925e-04f, -3.019380107e-04f, -3.019622051e-04f,
+-3.019858756e-04f, -3.020090221e-04f, -3.020316449e-04f, -3.020537437e-04f, -3.020753186e-04f, -3.020963697e-04f, -3.021168969e-04f, -3.021369002e-04f, -3.021563796e-04f, -3.021753352e-04f,
+-3.021937669e-04f, -3.022116748e-04f, -3.022290588e-04f, -3.022459190e-04f, -3.022622553e-04f, -3.022780679e-04f, -3.022933566e-04f, -3.023081215e-04f, -3.023223627e-04f, -3.023360801e-04f,
+-3.023492738e-04f, -3.023619437e-04f, -3.023740899e-04f, -3.023857124e-04f, -3.023968113e-04f, -3.024073865e-04f, -3.024174380e-04f, -3.024269659e-04f, -3.024359703e-04f, -3.024444510e-04f,
+-3.024524082e-04f, -3.024598419e-04f, -3.024667521e-04f, -3.024731389e-04f, -3.024790021e-04f, -3.024843420e-04f, -3.024891585e-04f, -3.024934517e-04f, -3.024972215e-04f, -3.025004680e-04f,
+-3.025031913e-04f, -3.025053913e-04f, -3.025070682e-04f, -3.025082219e-04f, -3.025088525e-04f, -3.025089601e-04f, -3.025085446e-04f, -3.025076061e-04f, -3.025061446e-04f, -3.025041602e-04f,
+-3.025016530e-04f, -3.024986229e-04f, -3.024950700e-04f, -3.024909944e-04f, -3.024863961e-04f, -3.024812752e-04f, -3.024756316e-04f, -3.024694655e-04f, -3.024627769e-04f, -3.024555659e-04f,
+-3.024478324e-04f, -3.024395766e-04f, -3.024307985e-04f, -3.024214982e-04f, -3.024116757e-04f, -3.024013310e-04f, -3.023904643e-04f, -3.023790755e-04f, -3.023671648e-04f, -3.023547322e-04f,
+-3.023417778e-04f, -3.023283015e-04f, -3.023143036e-04f, -3.022997840e-04f, -3.022847428e-04f, -3.022691801e-04f, -3.022530960e-04f, -3.022364904e-04f, -3.022193635e-04f, -3.022017154e-04f,
+-3.021835461e-04f, -3.021648556e-04f, -3.021456441e-04f, -3.021259117e-04f, -3.021056583e-04f, -3.020848841e-04f, -3.020635892e-04f, -3.020417736e-04f, -3.020194374e-04f, -3.019965806e-04f,
+-3.019732034e-04f, -3.019493059e-04f, -3.019248880e-04f, -3.018999500e-04f, -3.018744918e-04f, -3.018485136e-04f, -3.018220155e-04f, -3.017949974e-04f, -3.017674596e-04f, -3.017394021e-04f,
+-3.017108249e-04f, -3.016817282e-04f, -3.016521121e-04f, -3.016219767e-04f, -3.015913220e-04f, -3.015601481e-04f, -3.015284551e-04f, -3.014962432e-04f, -3.014635124e-04f, -3.014302628e-04f,
+-3.013964945e-04f, -3.013622076e-04f, -3.013274022e-04f, -3.012920784e-04f, -3.012562363e-04f, -3.012198760e-04f, -3.011829976e-04f, -3.011456012e-04f, -3.011076869e-04f, -3.010692549e-04f,
+-3.010303051e-04f, -3.009908377e-04f, -3.009508529e-04f, -3.009103508e-04f, -3.008693313e-04f, -3.008277947e-04f, -3.007857411e-04f, -3.007431706e-04f, -3.007000832e-04f, -3.006564792e-04f,
+-3.006123585e-04f, -3.005677214e-04f, -3.005225679e-04f, -3.004768982e-04f, -3.004307124e-04f, -3.003840105e-04f, -3.003367928e-04f, -3.002890593e-04f, -3.002408102e-04f, -3.001920455e-04f,
+-3.001427654e-04f, -3.000929701e-04f, -3.000426596e-04f, -2.999918341e-04f, -2.999404937e-04f, -2.998886385e-04f, -2.998362687e-04f, -2.997833843e-04f, -2.997299856e-04f, -2.996760726e-04f,
+-2.996216454e-04f, -2.995667043e-04f, -2.995112493e-04f, -2.994552806e-04f, -2.993987983e-04f, -2.993418026e-04f, -2.992842935e-04f, -2.992262713e-04f, -2.991677360e-04f, -2.991086878e-04f,
+-2.990491268e-04f, -2.989890533e-04f, -2.989284672e-04f, -2.988673688e-04f, -2.988057582e-04f, -2.987436356e-04f, -2.986810010e-04f, -2.986178547e-04f, -2.985541968e-04f, -2.984900275e-04f,
+-2.984253468e-04f, -2.983601549e-04f, -2.982944521e-04f, -2.982282384e-04f, -2.981615139e-04f, -2.980942790e-04f, -2.980265336e-04f, -2.979582780e-04f, -2.978895123e-04f, -2.978202366e-04f,
+-2.977504512e-04f, -2.976801562e-04f, -2.976093517e-04f, -2.975380379e-04f, -2.974662150e-04f, -2.973938831e-04f, -2.973210424e-04f, -2.972476930e-04f, -2.971738352e-04f, -2.970994690e-04f,
+-2.970245947e-04f, -2.969492124e-04f, -2.968733223e-04f, -2.967969246e-04f, -2.967200194e-04f, -2.966426069e-04f, -2.965646872e-04f, -2.964862606e-04f, -2.964073272e-04f, -2.963278872e-04f,
+-2.962479407e-04f, -2.961674880e-04f, -2.960865292e-04f, -2.960050645e-04f, -2.959230940e-04f, -2.958406180e-04f, -2.957576366e-04f, -2.956741501e-04f, -2.955901585e-04f, -2.955056621e-04f,
+-2.954206611e-04f, -2.953351556e-04f, -2.952491459e-04f, -2.951626320e-04f, -2.950756143e-04f, -2.949880929e-04f, -2.949000679e-04f, -2.948115396e-04f, -2.947225082e-04f, -2.946329738e-04f,
+-2.945429366e-04f, -2.944523969e-04f, -2.943613548e-04f, -2.942698106e-04f, -2.941777644e-04f, -2.940852163e-04f, -2.939921667e-04f, -2.938986157e-04f, -2.938045636e-04f, -2.937100104e-04f,
+-2.936149564e-04f, -2.935194019e-04f, -2.934233470e-04f, -2.933267919e-04f, -2.932297368e-04f, -2.931321819e-04f, -2.930341275e-04f, -2.929355737e-04f, -2.928365208e-04f, -2.927369689e-04f,
+-2.926369183e-04f, -2.925363692e-04f, -2.924353217e-04f, -2.923337762e-04f, -2.922317328e-04f, -2.921291917e-04f, -2.920261531e-04f, -2.919226173e-04f, -2.918185844e-04f, -2.917140548e-04f,
+-2.916090285e-04f, -2.915035059e-04f, -2.913974871e-04f, -2.912909724e-04f, -2.911839620e-04f, -2.910764561e-04f, -2.909684549e-04f, -2.908599586e-04f, -2.907509676e-04f, -2.906414819e-04f,
+-2.905315019e-04f, -2.904210277e-04f, -2.903100596e-04f, -2.901985978e-04f, -2.900866426e-04f, -2.899741941e-04f, -2.898612526e-04f, -2.897478184e-04f, -2.896338916e-04f, -2.895194726e-04f,
+-2.894045614e-04f, -2.892891585e-04f, -2.891732639e-04f, -2.890568780e-04f, -2.889400010e-04f, -2.888226331e-04f, -2.887047746e-04f, -2.885864256e-04f, -2.884675865e-04f, -2.883482575e-04f,
+-2.882284388e-04f, -2.881081307e-04f, -2.879873334e-04f, -2.878660472e-04f, -2.877442722e-04f, -2.876220088e-04f, -2.874992572e-04f, -2.873760177e-04f, -2.872522905e-04f, -2.871280758e-04f,
+-2.870033739e-04f, -2.868781851e-04f, -2.867525095e-04f, -2.866263476e-04f, -2.864996994e-04f, -2.863725653e-04f, -2.862449455e-04f, -2.861168403e-04f, -2.859882500e-04f, -2.858591747e-04f,
+-2.857296148e-04f, -2.855995705e-04f, -2.854690421e-04f, -2.853380299e-04f, -2.852065340e-04f, -2.850745548e-04f, -2.849420925e-04f, -2.848091474e-04f, -2.846757198e-04f, -2.845418099e-04f,
+-2.844074180e-04f, -2.842725444e-04f, -2.841371893e-04f, -2.840013530e-04f, -2.838650357e-04f, -2.837282378e-04f, -2.835909595e-04f, -2.834532012e-04f, -2.833149629e-04f, -2.831762451e-04f,
+-2.830370481e-04f, -2.828973720e-04f, -2.827572171e-04f, -2.826165839e-04f, -2.824754724e-04f, -2.823338830e-04f, -2.821918161e-04f, -2.820492718e-04f, -2.819062504e-04f, -2.817627523e-04f,
+-2.816187777e-04f, -2.814743268e-04f, -2.813294001e-04f, -2.811839977e-04f, -2.810381200e-04f, -2.808917672e-04f, -2.807449397e-04f, -2.805976377e-04f, -2.804498615e-04f, -2.803016113e-04f,
+-2.801528876e-04f, -2.800036906e-04f, -2.798540205e-04f, -2.797038778e-04f, -2.795532625e-04f, -2.794021752e-04f, -2.792506160e-04f, -2.790985853e-04f, -2.789460833e-04f, -2.787931104e-04f,
+-2.786396668e-04f, -2.784857529e-04f, -2.783313689e-04f, -2.781765152e-04f, -2.780211920e-04f, -2.778653998e-04f, -2.777091386e-04f, -2.775524090e-04f, -2.773952111e-04f, -2.772375453e-04f,
+-2.770794119e-04f, -2.769208113e-04f, -2.767617436e-04f, -2.766022092e-04f, -2.764422085e-04f, -2.762817417e-04f, -2.761208092e-04f, -2.759594112e-04f, -2.757975481e-04f, -2.756352202e-04f,
+-2.754724278e-04f, -2.753091712e-04f, -2.751454508e-04f, -2.749812669e-04f, -2.748166197e-04f, -2.746515096e-04f, -2.744859370e-04f, -2.743199020e-04f, -2.741534052e-04f, -2.739864467e-04f,
+-2.738190269e-04f, -2.736511462e-04f, -2.734828048e-04f, -2.733140031e-04f, -2.731447414e-04f, -2.729750200e-04f, -2.728048393e-04f, -2.726341996e-04f, -2.724631012e-04f, -2.722915445e-04f,
+-2.721195297e-04f, -2.719470572e-04f, -2.717741274e-04f, -2.716007406e-04f, -2.714268970e-04f, -2.712525972e-04f, -2.710778412e-04f, -2.709026297e-04f, -2.707269627e-04f, -2.705508408e-04f,
+-2.703742642e-04f, -2.701972332e-04f, -2.700197483e-04f, -2.698418097e-04f, -2.696634178e-04f, -2.694845729e-04f, -2.693052754e-04f, -2.691255257e-04f, -2.689453239e-04f, -2.687646707e-04f,
+-2.685835661e-04f, -2.684020107e-04f, -2.682200047e-04f, -2.680375485e-04f, -2.678546424e-04f, -2.676712869e-04f, -2.674874822e-04f, -2.673032287e-04f, -2.671185267e-04f, -2.669333767e-04f,
+-2.667477789e-04f, -2.665617337e-04f, -2.663752415e-04f, -2.661883026e-04f, -2.660009174e-04f, -2.658130862e-04f, -2.656248095e-04f, -2.654360874e-04f, -2.652469205e-04f, -2.650573091e-04f,
+-2.648672535e-04f, -2.646767540e-04f, -2.644858112e-04f, -2.642944253e-04f, -2.641025966e-04f, -2.639103256e-04f, -2.637176126e-04f, -2.635244580e-04f, -2.633308622e-04f, -2.631368254e-04f,
+-2.629423482e-04f, -2.627474308e-04f, -2.625520736e-04f, -2.623562770e-04f, -2.621600414e-04f, -2.619633671e-04f, -2.617662545e-04f, -2.615687040e-04f, -2.613707160e-04f, -2.611722908e-04f,
+-2.609734288e-04f, -2.607741304e-04f, -2.605743960e-04f, -2.603742258e-04f, -2.601736205e-04f, -2.599725802e-04f, -2.597711054e-04f, -2.595691964e-04f, -2.593668537e-04f, -2.591640776e-04f,
+-2.589608685e-04f, -2.587572268e-04f, -2.585531529e-04f, -2.583486471e-04f, -2.581437099e-04f, -2.579383416e-04f, -2.577325426e-04f, -2.575263134e-04f, -2.573196542e-04f, -2.571125655e-04f,
+-2.569050477e-04f, -2.566971011e-04f, -2.564887263e-04f, -2.562799234e-04f, -2.560706930e-04f, -2.558610354e-04f, -2.556509511e-04f, -2.554404404e-04f, -2.552295037e-04f, -2.550181414e-04f,
+-2.548063540e-04f, -2.545941417e-04f, -2.543815051e-04f, -2.541684444e-04f, -2.539549602e-04f, -2.537410528e-04f, -2.535267226e-04f, -2.533119700e-04f, -2.530967955e-04f, -2.528811993e-04f,
+-2.526651820e-04f, -2.524487439e-04f, -2.522318855e-04f, -2.520146071e-04f, -2.517969091e-04f, -2.515787920e-04f, -2.513602562e-04f, -2.511413020e-04f, -2.509219299e-04f, -2.507021403e-04f,
+-2.504819336e-04f, -2.502613103e-04f, -2.500402706e-04f, -2.498188151e-04f, -2.495969442e-04f, -2.493746583e-04f, -2.491519577e-04f, -2.489288429e-04f, -2.487053144e-04f, -2.484813725e-04f,
+-2.482570176e-04f, -2.480322502e-04f, -2.478070707e-04f, -2.475814795e-04f, -2.473554771e-04f, -2.471290638e-04f, -2.469022401e-04f, -2.466750064e-04f, -2.464473631e-04f, -2.462193107e-04f,
+-2.459908495e-04f, -2.457619801e-04f, -2.455327027e-04f, -2.453030180e-04f, -2.450729262e-04f, -2.448424278e-04f, -2.446115232e-04f, -2.443802129e-04f, -2.441484973e-04f, -2.439163768e-04f,
+-2.436838519e-04f, -2.434509230e-04f, -2.432175905e-04f, -2.429838549e-04f, -2.427497166e-04f, -2.425151759e-04f, -2.422802335e-04f, -2.420448896e-04f, -2.418091448e-04f, -2.415729995e-04f,
+-2.413364540e-04f, -2.410995090e-04f, -2.408621647e-04f, -2.406244216e-04f, -2.403862802e-04f, -2.401477409e-04f, -2.399088042e-04f, -2.396694705e-04f, -2.394297402e-04f, -2.391896138e-04f,
+-2.389490917e-04f, -2.387081744e-04f, -2.384668623e-04f, -2.382251559e-04f, -2.379830556e-04f, -2.377405619e-04f, -2.374976752e-04f, -2.372543959e-04f, -2.370107246e-04f, -2.367666616e-04f,
+-2.365222075e-04f, -2.362773626e-04f, -2.360321274e-04f, -2.357865024e-04f, -2.355404880e-04f, -2.352940847e-04f, -2.350472929e-04f, -2.348001131e-04f, -2.345525458e-04f, -2.343045913e-04f,
+-2.340562502e-04f, -2.338075230e-04f, -2.335584100e-04f, -2.333089118e-04f, -2.330590287e-04f, -2.328087613e-04f, -2.325581101e-04f, -2.323070754e-04f, -2.320556578e-04f, -2.318038576e-04f,
+-2.315516755e-04f, -2.312991118e-04f, -2.310461669e-04f, -2.307928415e-04f, -2.305391359e-04f, -2.302850506e-04f, -2.300305860e-04f, -2.297757427e-04f, -2.295205211e-04f, -2.292649217e-04f,
+-2.290089449e-04f, -2.287525912e-04f, -2.284958612e-04f, -2.282387552e-04f, -2.279812737e-04f, -2.277234172e-04f, -2.274651862e-04f, -2.272065812e-04f, -2.269476026e-04f, -2.266882509e-04f,
+-2.264285265e-04f, -2.261684301e-04f, -2.259079620e-04f, -2.256471226e-04f, -2.253859126e-04f, -2.251243324e-04f, -2.248623824e-04f, -2.246000631e-04f, -2.243373751e-04f, -2.240743187e-04f,
+-2.238108945e-04f, -2.235471030e-04f, -2.232829447e-04f, -2.230184199e-04f, -2.227535293e-04f, -2.224882733e-04f, -2.222226523e-04f, -2.219566670e-04f, -2.216903176e-04f, -2.214236049e-04f,
+-2.211565292e-04f, -2.208890910e-04f, -2.206212908e-04f, -2.203531291e-04f, -2.200846064e-04f, -2.198157232e-04f, -2.195464799e-04f, -2.192768772e-04f, -2.190069154e-04f, -2.187365950e-04f,
+-2.184659166e-04f, -2.181948807e-04f, -2.179234877e-04f, -2.176517381e-04f, -2.173796325e-04f, -2.171071713e-04f, -2.168343550e-04f, -2.165611841e-04f, -2.162876592e-04f, -2.160137807e-04f,
+-2.157395491e-04f, -2.154649650e-04f, -2.151900287e-04f, -2.149147409e-04f, -2.146391021e-04f, -2.143631126e-04f, -2.140867731e-04f, -2.138100841e-04f, -2.135330460e-04f, -2.132556593e-04f,
+-2.129779246e-04f, -2.126998424e-04f, -2.124214131e-04f, -2.121426373e-04f, -2.118635155e-04f, -2.115840481e-04f, -2.113042358e-04f, -2.110240790e-04f, -2.107435782e-04f, -2.104627340e-04f,
+-2.101815467e-04f, -2.099000171e-04f, -2.096181455e-04f, -2.093359325e-04f, -2.090533786e-04f, -2.087704843e-04f, -2.084872501e-04f, -2.082036765e-04f, -2.079197642e-04f, -2.076355134e-04f,
+-2.073509249e-04f, -2.070659991e-04f, -2.067807365e-04f, -2.064951376e-04f, -2.062092030e-04f, -2.059229332e-04f, -2.056363286e-04f, -2.053493899e-04f, -2.050621176e-04f, -2.047745121e-04f,
+-2.044865739e-04f, -2.041983037e-04f, -2.039097019e-04f, -2.036207691e-04f, -2.033315058e-04f, -2.030419124e-04f, -2.027519896e-04f, -2.024617378e-04f, -2.021711577e-04f, -2.018802496e-04f,
+-2.015890142e-04f, -2.012974519e-04f, -2.010055633e-04f, -2.007133490e-04f, -2.004208094e-04f, -2.001279450e-04f, -1.998347565e-04f, -1.995412444e-04f, -1.992474091e-04f, -1.989532512e-04f,
+-1.986587713e-04f, -1.983639698e-04f, -1.980688473e-04f, -1.977734044e-04f, -1.974776416e-04f, -1.971815593e-04f, -1.968851583e-04f, -1.965884389e-04f, -1.962914017e-04f, -1.959940473e-04f,
+-1.956963762e-04f, -1.953983889e-04f, -1.951000860e-04f, -1.948014680e-04f, -1.945025354e-04f, -1.942032889e-04f, -1.939037288e-04f, -1.936038559e-04f, -1.933036706e-04f, -1.930031734e-04f,
+-1.927023650e-04f, -1.924012457e-04f, -1.920998163e-04f, -1.917980772e-04f, -1.914960290e-04f, -1.911936722e-04f, -1.908910074e-04f, -1.905880351e-04f, -1.902847559e-04f, -1.899811703e-04f,
+-1.896772788e-04f, -1.893730821e-04f, -1.890685806e-04f, -1.887637749e-04f, -1.884586656e-04f, -1.881532532e-04f, -1.878475382e-04f, -1.875415212e-04f, -1.872352028e-04f, -1.869285836e-04f,
+-1.866216639e-04f, -1.863144445e-04f, -1.860069259e-04f, -1.856991086e-04f, -1.853909932e-04f, -1.850825802e-04f, -1.847738702e-04f, -1.844648637e-04f, -1.841555614e-04f, -1.838459637e-04f,
+-1.835360712e-04f, -1.832258846e-04f, -1.829154042e-04f, -1.826046307e-04f, -1.822935647e-04f, -1.819822067e-04f, -1.816705573e-04f, -1.813586170e-04f, -1.810463864e-04f, -1.807338661e-04f,
+-1.804210566e-04f, -1.801079584e-04f, -1.797945722e-04f, -1.794808985e-04f, -1.791669379e-04f, -1.788526909e-04f, -1.785381582e-04f, -1.782233401e-04f, -1.779082375e-04f, -1.775928507e-04f,
+-1.772771803e-04f, -1.769612271e-04f, -1.766449914e-04f, -1.763284738e-04f, -1.760116750e-04f, -1.756945956e-04f, -1.753772359e-04f, -1.750595968e-04f, -1.747416786e-04f, -1.744234820e-04f,
+-1.741050076e-04f, -1.737862559e-04f, -1.734672275e-04f, -1.731479230e-04f, -1.728283429e-04f, -1.725084879e-04f, -1.721883584e-04f, -1.718679551e-04f, -1.715472785e-04f, -1.712263293e-04f,
+-1.709051079e-04f, -1.705836150e-04f, -1.702618511e-04f, -1.699398169e-04f, -1.696175128e-04f, -1.692949396e-04f, -1.689720976e-04f, -1.686489877e-04f, -1.683256102e-04f, -1.680019658e-04f,
+-1.676780550e-04f, -1.673538785e-04f, -1.670294369e-04f, -1.667047306e-04f, -1.663797604e-04f, -1.660545267e-04f, -1.657290302e-04f, -1.654032713e-04f, -1.650772509e-04f, -1.647509693e-04f,
+-1.644244272e-04f, -1.640976252e-04f, -1.637705638e-04f, -1.634432437e-04f, -1.631156654e-04f, -1.627878295e-04f, -1.624597366e-04f, -1.621313872e-04f, -1.618027821e-04f, -1.614739217e-04f,
+-1.611448067e-04f, -1.608154375e-04f, -1.604858150e-04f, -1.601559395e-04f, -1.598258117e-04f, -1.594954322e-04f, -1.591648016e-04f, -1.588339205e-04f, -1.585027894e-04f, -1.581714090e-04f,
+-1.578397798e-04f, -1.575079025e-04f, -1.571757776e-04f, -1.568434057e-04f, -1.565107874e-04f, -1.561779233e-04f, -1.558448141e-04f, -1.555114602e-04f, -1.551778623e-04f, -1.548440211e-04f,
+-1.545099370e-04f, -1.541756106e-04f, -1.538410427e-04f, -1.535062337e-04f, -1.531711843e-04f, -1.528358951e-04f, -1.525003666e-04f, -1.521645995e-04f, -1.518285943e-04f, -1.514923517e-04f,
+-1.511558723e-04f, -1.508191566e-04f, -1.504822053e-04f, -1.501450189e-04f, -1.498075981e-04f, -1.494699435e-04f, -1.491320556e-04f, -1.487939351e-04f, -1.484555825e-04f, -1.481169985e-04f,
+-1.477781837e-04f, -1.474391387e-04f, -1.470998640e-04f, -1.467603603e-04f, -1.464206282e-04f, -1.460806683e-04f, -1.457404812e-04f, -1.454000675e-04f, -1.450594278e-04f, -1.447185627e-04f,
+-1.443774728e-04f, -1.440361588e-04f, -1.436946211e-04f, -1.433528606e-04f, -1.430108776e-04f, -1.426686729e-04f, -1.423262471e-04f, -1.419836008e-04f, -1.416407345e-04f, -1.412976489e-04f,
+-1.409543447e-04f, -1.406108223e-04f, -1.402670824e-04f, -1.399231257e-04f, -1.395789528e-04f, -1.392345641e-04f, -1.388899605e-04f, -1.385451424e-04f, -1.382001105e-04f, -1.378548654e-04f,
+-1.375094078e-04f, -1.371637381e-04f, -1.368178571e-04f, -1.364717654e-04f, -1.361254635e-04f, -1.357789521e-04f, -1.354322318e-04f, -1.350853032e-04f, -1.347381670e-04f, -1.343908237e-04f,
+-1.340432740e-04f, -1.336955184e-04f, -1.333475576e-04f, -1.329993923e-04f, -1.326510230e-04f, -1.323024503e-04f, -1.319536749e-04f, -1.316046974e-04f, -1.312555184e-04f, -1.309061385e-04f,
+-1.305565583e-04f, -1.302067785e-04f, -1.298567997e-04f, -1.295066225e-04f, -1.291562475e-04f, -1.288056753e-04f, -1.284549066e-04f, -1.281039420e-04f, -1.277527821e-04f, -1.274014276e-04f,
+-1.270498789e-04f, -1.266981369e-04f, -1.263462020e-04f, -1.259940750e-04f, -1.256417564e-04f, -1.252892468e-04f, -1.249365470e-04f, -1.245836575e-04f, -1.242305789e-04f, -1.238773118e-04f,
+-1.235238570e-04f, -1.231702149e-04f, -1.228163863e-04f, -1.224623718e-04f, -1.221081720e-04f, -1.217537874e-04f, -1.213992188e-04f, -1.210444668e-04f, -1.206895320e-04f, -1.203344150e-04f,
+-1.199791165e-04f, -1.196236370e-04f, -1.192679772e-04f, -1.189121378e-04f, -1.185561194e-04f, -1.181999225e-04f, -1.178435479e-04f, -1.174869961e-04f, -1.171302678e-04f, -1.167733636e-04f,
+-1.164162842e-04f, -1.160590301e-04f, -1.157016021e-04f, -1.153440006e-04f, -1.149862265e-04f, -1.146282802e-04f, -1.142701625e-04f, -1.139118739e-04f, -1.135534152e-04f, -1.131947868e-04f,
+-1.128359896e-04f, -1.124770240e-04f, -1.121178907e-04f, -1.117585904e-04f, -1.113991238e-04f, -1.110394913e-04f, -1.106796937e-04f, -1.103197316e-04f, -1.099596056e-04f, -1.095993164e-04f,
+-1.092388646e-04f, -1.088782509e-04f, -1.085174758e-04f, -1.081565400e-04f, -1.077954442e-04f, -1.074341890e-04f, -1.070727749e-04f, -1.067112028e-04f, -1.063494731e-04f, -1.059875866e-04f,
+-1.056255438e-04f, -1.052633454e-04f, -1.049009921e-04f, -1.045384845e-04f, -1.041758232e-04f, -1.038130088e-04f, -1.034500421e-04f, -1.030869236e-04f, -1.027236539e-04f, -1.023602338e-04f,
+-1.019966639e-04f, -1.016329447e-04f, -1.012690770e-04f, -1.009050613e-04f, -1.005408984e-04f, -1.001765888e-04f, -9.981213323e-05f, -9.944753230e-05f, -9.908278665e-05f, -9.871789692e-05f,
+-9.835286376e-05f, -9.798768781e-05f, -9.762236970e-05f, -9.725691009e-05f, -9.689130962e-05f, -9.652556892e-05f, -9.615968864e-05f, -9.579366943e-05f, -9.542751192e-05f, -9.506121677e-05f,
+-9.469478461e-05f, -9.432821609e-05f, -9.396151185e-05f, -9.359467254e-05f, -9.322769880e-05f, -9.286059127e-05f, -9.249335061e-05f, -9.212597745e-05f, -9.175847245e-05f, -9.139083624e-05f,
+-9.102306947e-05f, -9.065517280e-05f, -9.028714685e-05f, -8.991899229e-05f, -8.955070975e-05f, -8.918229989e-05f, -8.881376335e-05f, -8.844510077e-05f, -8.807631281e-05f, -8.770740010e-05f,
+-8.733836331e-05f, -8.696920307e-05f, -8.659992003e-05f, -8.623051485e-05f, -8.586098816e-05f, -8.549134062e-05f, -8.512157288e-05f, -8.475168558e-05f, -8.438167937e-05f, -8.401155491e-05f,
+-8.364131283e-05f, -8.327095380e-05f, -8.290047845e-05f, -8.252988744e-05f, -8.215918142e-05f, -8.178836103e-05f, -8.141742693e-05f, -8.104637977e-05f, -8.067522020e-05f, -8.030394886e-05f,
+-7.993256641e-05f, -7.956107350e-05f, -7.918947078e-05f, -7.881775890e-05f, -7.844593851e-05f, -7.807401026e-05f, -7.770197481e-05f, -7.732983280e-05f, -7.695758489e-05f, -7.658523173e-05f,
+-7.621277396e-05f, -7.584021225e-05f, -7.546754724e-05f, -7.509477959e-05f, -7.472190994e-05f, -7.434893896e-05f, -7.397586729e-05f, -7.360269559e-05f, -7.322942451e-05f, -7.285605469e-05f,
+-7.248258681e-05f, -7.210902150e-05f, -7.173535942e-05f, -7.136160123e-05f, -7.098774758e-05f, -7.061379912e-05f, -7.023975651e-05f, -6.986562040e-05f, -6.949139144e-05f, -6.911707029e-05f,
+-6.874265760e-05f, -6.836815403e-05f, -6.799356023e-05f, -6.761887686e-05f, -6.724410456e-05f, -6.686924401e-05f, -6.649429584e-05f, -6.611926072e-05f, -6.574413930e-05f, -6.536893223e-05f,
+-6.499364018e-05f, -6.461826379e-05f, -6.424280373e-05f, -6.386726064e-05f, -6.349163518e-05f, -6.311592801e-05f, -6.274013979e-05f, -6.236427117e-05f, -6.198832281e-05f, -6.161229535e-05f,
+-6.123618947e-05f, -6.086000581e-05f, -6.048374504e-05f, -6.010740780e-05f, -5.973099476e-05f, -5.935450657e-05f, -5.897794388e-05f, -5.860130737e-05f, -5.822459767e-05f, -5.784781545e-05f,
+-5.747096137e-05f, -5.709403608e-05f, -5.671704025e-05f, -5.633997451e-05f, -5.596283955e-05f, -5.558563600e-05f, -5.520836454e-05f, -5.483102581e-05f, -5.445362048e-05f, -5.407614920e-05f,
+-5.369861263e-05f, -5.332101143e-05f, -5.294334625e-05f, -5.256561776e-05f, -5.218782661e-05f, -5.180997346e-05f, -5.143205897e-05f, -5.105408379e-05f, -5.067604859e-05f, -5.029795402e-05f,
+-4.991980074e-05f, -4.954158941e-05f, -4.916332069e-05f, -4.878499523e-05f, -4.840661370e-05f, -4.802817675e-05f, -4.764968505e-05f, -4.727113924e-05f, -4.689254000e-05f, -4.651388797e-05f,
+-4.613518382e-05f, -4.575642820e-05f, -4.537762178e-05f, -4.499876521e-05f, -4.461985916e-05f, -4.424090427e-05f, -4.386190122e-05f, -4.348285065e-05f, -4.310375324e-05f, -4.272460963e-05f,
+-4.234542049e-05f, -4.196618647e-05f, -4.158690824e-05f, -4.120758646e-05f, -4.082822178e-05f, -4.044881486e-05f, -4.006936636e-05f, -3.968987695e-05f, -3.931034727e-05f, -3.893077800e-05f,
+-3.855116979e-05f, -3.817152329e-05f, -3.779183918e-05f, -3.741211810e-05f, -3.703236072e-05f, -3.665256770e-05f, -3.627273969e-05f, -3.589287736e-05f, -3.551298137e-05f, -3.513305237e-05f,
+-3.475309103e-05f, -3.437309800e-05f, -3.399307394e-05f, -3.361301952e-05f, -3.323293538e-05f, -3.285282221e-05f, -3.247268064e-05f, -3.209251134e-05f, -3.171231498e-05f, -3.133209221e-05f,
+-3.095184368e-05f, -3.057157007e-05f, -3.019127202e-05f, -2.981095021e-05f, -2.943060528e-05f, -2.905023790e-05f, -2.866984873e-05f, -2.828943842e-05f, -2.790900764e-05f, -2.752855705e-05f,
+-2.714808730e-05f, -2.676759905e-05f, -2.638709297e-05f, -2.600656971e-05f, -2.562602994e-05f, -2.524547430e-05f, -2.486490347e-05f, -2.448431810e-05f, -2.410371885e-05f, -2.372310638e-05f,
+-2.334248134e-05f, -2.296184441e-05f, -2.258119623e-05f, -2.220053747e-05f, -2.181986878e-05f, -2.143919082e-05f, -2.105850426e-05f, -2.067780975e-05f, -2.029710796e-05f, -1.991639953e-05f,
+-1.953568513e-05f, -1.915496542e-05f, -1.877424106e-05f, -1.839351270e-05f, -1.801278100e-05f, -1.763204663e-05f, -1.725131024e-05f, -1.687057250e-05f, -1.648983404e-05f, -1.610909555e-05f,
+-1.572835767e-05f, -1.534762107e-05f, -1.496688640e-05f, -1.458615432e-05f, -1.420542549e-05f, -1.382470057e-05f, -1.344398021e-05f, -1.306326508e-05f, -1.268255582e-05f, -1.230185311e-05f,
+-1.192115759e-05f, -1.154046993e-05f, -1.115979079e-05f, -1.077912081e-05f, -1.039846066e-05f, -1.001781100e-05f, -9.637172483e-06f, -9.256545765e-06f, -8.875931507e-06f, -8.495330363e-06f,
+-8.114742993e-06f, -7.734170054e-06f, -7.353612201e-06f, -6.973070093e-06f, -6.592544385e-06f, -6.212035736e-06f, -5.831544802e-06f, -5.451072240e-06f, -5.070618705e-06f, -4.690184856e-06f,
+-4.309771348e-06f, -3.929378837e-06f, -3.549007980e-06f, -3.168659433e-06f, -2.788333853e-06f, -2.408031895e-06f, -2.027754215e-06f, -1.647501469e-06f, -1.267274312e-06f, -8.870734017e-07f,
+-5.068993921e-07f, -1.267529389e-07f, 2.533653023e-07f, 6.334546764e-07f, 1.013514528e-06f, 1.393544202e-06f, 1.773543044e-06f, 2.153510399e-06f, 2.533445611e-06f, 2.913348027e-06f,
+3.293216992e-06f, 3.673051851e-06f, 4.052851949e-06f, 4.432616634e-06f, 4.812345249e-06f, 5.192037143e-06f, 5.571691660e-06f, 5.951308146e-06f, 6.330885949e-06f, 6.710424415e-06f,
+7.089922889e-06f, 7.469380720e-06f, 7.848797253e-06f, 8.228171835e-06f, 8.607503814e-06f, 8.986792537e-06f, 9.366037351e-06f, 9.745237603e-06f, 1.012439264e-05f, 1.050350181e-05f,
+1.088256447e-05f, 1.126157995e-05f, 1.164054761e-05f, 1.201946679e-05f, 1.239833685e-05f, 1.277715713e-05f, 1.315592698e-05f, 1.353464576e-05f, 1.391331280e-05f, 1.429192745e-05f,
+1.467048908e-05f, 1.504899702e-05f, 1.542745062e-05f, 1.580584924e-05f, 1.618419222e-05f, 1.656247892e-05f, 1.694070868e-05f, 1.731888086e-05f, 1.769699480e-05f, 1.807504986e-05f,
+1.845304538e-05f, 1.883098072e-05f, 1.920885523e-05f, 1.958666825e-05f, 1.996441915e-05f, 2.034210726e-05f, 2.071973195e-05f, 2.109729256e-05f, 2.147478845e-05f, 2.185221896e-05f,
+2.222958346e-05f, 2.260688129e-05f, 2.298411180e-05f, 2.336127435e-05f, 2.373836829e-05f, 2.411539297e-05f, 2.449234775e-05f, 2.486923198e-05f, 2.524604501e-05f, 2.562278620e-05f,
+2.599945490e-05f, 2.637605047e-05f, 2.675257225e-05f, 2.712901961e-05f, 2.750539190e-05f, 2.788168846e-05f, 2.825790867e-05f, 2.863405186e-05f, 2.901011741e-05f, 2.938610466e-05f,
+2.976201296e-05f, 3.013784168e-05f, 3.051359017e-05f, 3.088925779e-05f, 3.126484389e-05f, 3.164034783e-05f, 3.201576897e-05f, 3.239110666e-05f, 3.276636026e-05f, 3.314152913e-05f,
+3.351661262e-05f, 3.389161009e-05f, 3.426652091e-05f, 3.464134442e-05f, 3.501608000e-05f, 3.539072698e-05f, 3.576528475e-05f, 3.613975264e-05f, 3.651413003e-05f, 3.688841627e-05f,
+3.726261072e-05f, 3.763671274e-05f, 3.801072169e-05f, 3.838463694e-05f, 3.875845783e-05f, 3.913218374e-05f, 3.950581401e-05f, 3.987934803e-05f, 4.025278513e-05f, 4.062612470e-05f,
+4.099936608e-05f, 4.137250864e-05f, 4.174555174e-05f, 4.211849475e-05f, 4.249133702e-05f, 4.286407793e-05f, 4.323671682e-05f, 4.360925307e-05f, 4.398168604e-05f, 4.435401509e-05f,
+4.472623959e-05f, 4.509835890e-05f, 4.547037238e-05f, 4.584227940e-05f, 4.621407933e-05f, 4.658577153e-05f, 4.695735536e-05f, 4.732883019e-05f, 4.770019538e-05f, 4.807145031e-05f,
+4.844259433e-05f, 4.881362682e-05f, 4.918454714e-05f, 4.955535466e-05f, 4.992604874e-05f, 5.029662875e-05f, 5.066709406e-05f, 5.103744405e-05f, 5.140767806e-05f, 5.177779548e-05f,
+5.214779568e-05f, 5.251767801e-05f, 5.288744186e-05f, 5.325708659e-05f, 5.362661157e-05f, 5.399601616e-05f, 5.436529975e-05f, 5.473446170e-05f, 5.510350138e-05f, 5.547241816e-05f,
+5.584121141e-05f, 5.620988051e-05f, 5.657842482e-05f, 5.694684372e-05f, 5.731513659e-05f, 5.768330278e-05f, 5.805134168e-05f, 5.841925266e-05f, 5.878703510e-05f, 5.915468835e-05f,
+5.952221181e-05f, 5.988960484e-05f, 6.025686682e-05f, 6.062399712e-05f, 6.099099512e-05f, 6.135786019e-05f, 6.172459171e-05f, 6.209118906e-05f, 6.245765160e-05f, 6.282397872e-05f,
+6.319016979e-05f, 6.355622419e-05f, 6.392214130e-05f, 6.428792050e-05f, 6.465356115e-05f, 6.501906265e-05f, 6.538442437e-05f, 6.574964568e-05f, 6.611472596e-05f, 6.647966461e-05f,
+6.684446098e-05f, 6.720911448e-05f, 6.757362446e-05f, 6.793799032e-05f, 6.830221144e-05f, 6.866628719e-05f, 6.903021696e-05f, 6.939400013e-05f, 6.975763608e-05f, 7.012112419e-05f,
+7.048446385e-05f, 7.084765443e-05f, 7.121069533e-05f, 7.157358592e-05f, 7.193632559e-05f, 7.229891373e-05f, 7.266134971e-05f, 7.302363292e-05f, 7.338576274e-05f, 7.374773857e-05f,
+7.410955978e-05f, 7.447122577e-05f, 7.483273591e-05f, 7.519408960e-05f, 7.555528623e-05f, 7.591632517e-05f, 7.627720581e-05f, 7.663792755e-05f, 7.699848978e-05f, 7.735889187e-05f,
+7.771913323e-05f, 7.807921323e-05f, 7.843913127e-05f, 7.879888673e-05f, 7.915847902e-05f, 7.951790751e-05f, 7.987717160e-05f, 8.023627067e-05f, 8.059520413e-05f, 8.095397136e-05f,
+8.131257176e-05f, 8.167100471e-05f, 8.202926961e-05f, 8.238736586e-05f, 8.274529283e-05f, 8.310304994e-05f, 8.346063657e-05f, 8.381805212e-05f, 8.417529598e-05f, 8.453236755e-05f,
+8.488926622e-05f, 8.524599139e-05f, 8.560254245e-05f, 8.595891880e-05f, 8.631511984e-05f, 8.667114497e-05f, 8.702699358e-05f, 8.738266506e-05f, 8.773815883e-05f, 8.809347427e-05f,
+8.844861079e-05f, 8.880356778e-05f, 8.915834464e-05f, 8.951294078e-05f, 8.986735559e-05f, 9.022158848e-05f, 9.057563885e-05f, 9.092950609e-05f, 9.128318961e-05f, 9.163668881e-05f,
+9.199000310e-05f, 9.234313187e-05f, 9.269607453e-05f, 9.304883048e-05f, 9.340139913e-05f, 9.375377989e-05f, 9.410597214e-05f, 9.445797531e-05f, 9.480978880e-05f, 9.516141201e-05f,
+9.551284434e-05f, 9.586408521e-05f, 9.621513402e-05f, 9.656599019e-05f, 9.691665310e-05f, 9.726712219e-05f, 9.761739684e-05f, 9.796747648e-05f, 9.831736051e-05f, 9.866704833e-05f,
+9.901653937e-05f, 9.936583303e-05f, 9.971492872e-05f, 1.000638259e-04f, 1.004125238e-04f, 1.007610221e-04f, 1.011093200e-04f, 1.014574171e-04f, 1.018053126e-04f, 1.021530060e-04f,
+1.025004968e-04f, 1.028477843e-04f, 1.031948680e-04f, 1.035417472e-04f, 1.038884215e-04f, 1.042348901e-04f, 1.045811526e-04f, 1.049272083e-04f, 1.052730567e-04f, 1.056186971e-04f,
+1.059641291e-04f, 1.063093519e-04f, 1.066543651e-04f, 1.069991680e-04f, 1.073437601e-04f, 1.076881407e-04f, 1.080323094e-04f, 1.083762655e-04f, 1.087200085e-04f, 1.090635377e-04f,
+1.094068526e-04f, 1.097499526e-04f, 1.100928372e-04f, 1.104355057e-04f, 1.107779576e-04f, 1.111201923e-04f, 1.114622093e-04f, 1.118040079e-04f, 1.121455876e-04f, 1.124869477e-04f,
+1.128280879e-04f, 1.131690074e-04f, 1.135097056e-04f, 1.138501821e-04f, 1.141904362e-04f, 1.145304674e-04f, 1.148702751e-04f, 1.152098588e-04f, 1.155492177e-04f, 1.158883515e-04f,
+1.162272595e-04f, 1.165659411e-04f, 1.169043958e-04f, 1.172426231e-04f, 1.175806222e-04f, 1.179183928e-04f, 1.182559341e-04f, 1.185932457e-04f, 1.189303270e-04f, 1.192671774e-04f,
+1.196037963e-04f, 1.199401832e-04f, 1.202763376e-04f, 1.206122587e-04f, 1.209479462e-04f, 1.212833994e-04f, 1.216186178e-04f, 1.219536007e-04f, 1.222883477e-04f, 1.226228582e-04f,
+1.229571316e-04f, 1.232911673e-04f, 1.236249649e-04f, 1.239585237e-04f, 1.242918431e-04f, 1.246249227e-04f, 1.249577619e-04f, 1.252903600e-04f, 1.256227166e-04f, 1.259548311e-04f,
+1.262867029e-04f, 1.266183315e-04f, 1.269497163e-04f, 1.272808568e-04f, 1.276117524e-04f, 1.279424026e-04f, 1.282728068e-04f, 1.286029644e-04f, 1.289328749e-04f, 1.292625378e-04f,
+1.295919525e-04f, 1.299211184e-04f, 1.302500350e-04f, 1.305787018e-04f, 1.309071181e-04f, 1.312352835e-04f, 1.315631974e-04f, 1.318908593e-04f, 1.322182685e-04f, 1.325454246e-04f,
+1.328723271e-04f, 1.331989752e-04f, 1.335253686e-04f, 1.338515067e-04f, 1.341773889e-04f, 1.345030146e-04f, 1.348283835e-04f, 1.351534948e-04f, 1.354783480e-04f, 1.358029427e-04f,
+1.361272782e-04f, 1.364513540e-04f, 1.367751697e-04f, 1.370987246e-04f, 1.374220181e-04f, 1.377450499e-04f, 1.380678192e-04f, 1.383903257e-04f, 1.387125687e-04f, 1.390345477e-04f,
+1.393562622e-04f, 1.396777116e-04f, 1.399988954e-04f, 1.403198131e-04f, 1.406404641e-04f, 1.409608480e-04f, 1.412809640e-04f, 1.416008118e-04f, 1.419203908e-04f, 1.422397005e-04f,
+1.425587403e-04f, 1.428775097e-04f, 1.431960081e-04f, 1.435142351e-04f, 1.438321901e-04f, 1.441498726e-04f, 1.444672820e-04f, 1.447844179e-04f, 1.451012796e-04f, 1.454178667e-04f,
+1.457341787e-04f, 1.460502149e-04f, 1.463659750e-04f, 1.466814583e-04f, 1.469966643e-04f, 1.473115925e-04f, 1.476262425e-04f, 1.479406136e-04f, 1.482547053e-04f, 1.485685172e-04f,
+1.488820486e-04f, 1.491952991e-04f, 1.495082682e-04f, 1.498209553e-04f, 1.501333600e-04f, 1.504454816e-04f, 1.507573197e-04f, 1.510688738e-04f, 1.513801433e-04f, 1.516911277e-04f,
+1.520018266e-04f, 1.523122393e-04f, 1.526223654e-04f, 1.529322044e-04f, 1.532417557e-04f, 1.535510189e-04f, 1.538599934e-04f, 1.541686786e-04f, 1.544770742e-04f, 1.547851796e-04f,
+1.550929942e-04f, 1.554005176e-04f, 1.557077493e-04f, 1.560146887e-04f, 1.563213353e-04f, 1.566276887e-04f, 1.569337483e-04f, 1.572395136e-04f, 1.575449841e-04f, 1.578501593e-04f,
+1.581550387e-04f, 1.584596217e-04f, 1.587639080e-04f, 1.590678969e-04f, 1.593715880e-04f, 1.596749808e-04f, 1.599780748e-04f, 1.602808694e-04f, 1.605833642e-04f, 1.608855586e-04f,
+1.611874523e-04f, 1.614890445e-04f, 1.617903350e-04f, 1.620913231e-04f, 1.623920084e-04f, 1.626923904e-04f, 1.629924685e-04f, 1.632922424e-04f, 1.635917114e-04f, 1.638908751e-04f,
+1.641897330e-04f, 1.644882846e-04f, 1.647865294e-04f, 1.650844669e-04f, 1.653820967e-04f, 1.656794182e-04f, 1.659764309e-04f, 1.662731344e-04f, 1.665695281e-04f, 1.668656116e-04f,
+1.671613844e-04f, 1.674568460e-04f, 1.677519959e-04f, 1.680468336e-04f, 1.683413587e-04f, 1.686355706e-04f, 1.689294688e-04f, 1.692230529e-04f, 1.695163225e-04f, 1.698092769e-04f,
+1.701019158e-04f, 1.703942386e-04f, 1.706862448e-04f, 1.709779341e-04f, 1.712693058e-04f, 1.715603596e-04f, 1.718510949e-04f, 1.721415113e-04f, 1.724316082e-04f, 1.727213853e-04f,
+1.730108419e-04f, 1.732999778e-04f, 1.735887923e-04f, 1.738772850e-04f, 1.741654554e-04f, 1.744533031e-04f, 1.747408276e-04f, 1.750280284e-04f, 1.753149050e-04f, 1.756014569e-04f,
+1.758876838e-04f, 1.761735851e-04f, 1.764591603e-04f, 1.767444090e-04f, 1.770293307e-04f, 1.773139249e-04f, 1.775981913e-04f, 1.778821292e-04f, 1.781657383e-04f, 1.784490180e-04f,
+1.787319680e-04f, 1.790145877e-04f, 1.792968767e-04f, 1.795788345e-04f, 1.798604606e-04f, 1.801417547e-04f, 1.804227161e-04f, 1.807033446e-04f, 1.809836396e-04f, 1.812636006e-04f,
+1.815432272e-04f, 1.818225189e-04f, 1.821014753e-04f, 1.823800959e-04f, 1.826583803e-04f, 1.829363280e-04f, 1.832139386e-04f, 1.834912115e-04f, 1.837681464e-04f, 1.840447428e-04f,
+1.843210002e-04f, 1.845969181e-04f, 1.848724962e-04f, 1.851477340e-04f, 1.854226310e-04f, 1.856971868e-04f, 1.859714010e-04f, 1.862452730e-04f, 1.865188024e-04f, 1.867919888e-04f,
+1.870648318e-04f, 1.873373308e-04f, 1.876094855e-04f, 1.878812954e-04f, 1.881527601e-04f, 1.884238791e-04f, 1.886946519e-04f, 1.889650782e-04f, 1.892351574e-04f, 1.895048892e-04f,
+1.897742732e-04f, 1.900433087e-04f, 1.903119955e-04f, 1.905803331e-04f, 1.908483211e-04f, 1.911159589e-04f, 1.913832463e-04f, 1.916501826e-04f, 1.919167676e-04f, 1.921830008e-04f,
+1.924488816e-04f, 1.927144098e-04f, 1.929795849e-04f, 1.932444064e-04f, 1.935088739e-04f, 1.937729870e-04f, 1.940367452e-04f, 1.943001481e-04f, 1.945631954e-04f, 1.948258865e-04f,
+1.950882210e-04f, 1.953501985e-04f, 1.956118186e-04f, 1.958730809e-04f, 1.961339848e-04f, 1.963945301e-04f, 1.966547163e-04f, 1.969145429e-04f, 1.971740096e-04f, 1.974331158e-04f,
+1.976918613e-04f, 1.979502455e-04f, 1.982082681e-04f, 1.984659286e-04f, 1.987232267e-04f, 1.989801618e-04f, 1.992367336e-04f, 1.994929417e-04f, 1.997487856e-04f, 2.000042649e-04f,
+2.002593793e-04f, 2.005141283e-04f, 2.007685114e-04f, 2.010225284e-04f, 2.012761786e-04f, 2.015294619e-04f, 2.017823777e-04f, 2.020349256e-04f, 2.022871053e-04f, 2.025389163e-04f,
+2.027903581e-04f, 2.030414305e-04f, 2.032921330e-04f, 2.035424652e-04f, 2.037924266e-04f, 2.040420170e-04f, 2.042912358e-04f, 2.045400827e-04f, 2.047885572e-04f, 2.050366590e-04f,
+2.052843877e-04f, 2.055317429e-04f, 2.057787241e-04f, 2.060253310e-04f, 2.062715631e-04f, 2.065174202e-04f, 2.067629017e-04f, 2.070080073e-04f, 2.072527365e-04f, 2.074970891e-04f,
+2.077410645e-04f, 2.079846625e-04f, 2.082278825e-04f, 2.084707243e-04f, 2.087131874e-04f, 2.089552714e-04f, 2.091969760e-04f, 2.094383007e-04f, 2.096792452e-04f, 2.099198091e-04f,
+2.101599919e-04f, 2.103997934e-04f, 2.106392130e-04f, 2.108782505e-04f, 2.111169055e-04f, 2.113551775e-04f, 2.115930662e-04f, 2.118305711e-04f, 2.120676920e-04f, 2.123044284e-04f,
+2.125407800e-04f, 2.127767464e-04f, 2.130123271e-04f, 2.132475218e-04f, 2.134823302e-04f, 2.137167519e-04f, 2.139507864e-04f, 2.141844334e-04f, 2.144176926e-04f, 2.146505635e-04f,
+2.148830458e-04f, 2.151151391e-04f, 2.153468431e-04f, 2.155781573e-04f, 2.158090814e-04f, 2.160396151e-04f, 2.162697579e-04f, 2.164995095e-04f, 2.167288695e-04f, 2.169578376e-04f,
+2.171864133e-04f, 2.174145964e-04f, 2.176423864e-04f, 2.178697830e-04f, 2.180967859e-04f, 2.183233946e-04f, 2.185496088e-04f, 2.187754282e-04f, 2.190008523e-04f, 2.192258809e-04f,
+2.194505135e-04f, 2.196747498e-04f, 2.198985894e-04f, 2.201220321e-04f, 2.203450774e-04f, 2.205677249e-04f, 2.207899744e-04f, 2.210118254e-04f, 2.212332776e-04f, 2.214543307e-04f,
+2.216749843e-04f, 2.218952381e-04f, 2.221150916e-04f, 2.223345446e-04f, 2.225535967e-04f, 2.227722476e-04f, 2.229904969e-04f, 2.232083442e-04f, 2.234257892e-04f, 2.236428316e-04f,
+2.238594711e-04f, 2.240757072e-04f, 2.242915396e-04f, 2.245069680e-04f, 2.247219921e-04f, 2.249366115e-04f, 2.251508258e-04f, 2.253646348e-04f, 2.255780380e-04f, 2.257910352e-04f,
+2.260036260e-04f, 2.262158101e-04f, 2.264275871e-04f, 2.266389567e-04f, 2.268499186e-04f, 2.270604724e-04f, 2.272706178e-04f, 2.274803545e-04f, 2.276896821e-04f, 2.278986003e-04f,
+2.281071088e-04f, 2.283152072e-04f, 2.285228952e-04f, 2.287301726e-04f, 2.289370388e-04f, 2.291434937e-04f, 2.293495369e-04f, 2.295551681e-04f, 2.297603869e-04f, 2.299651931e-04f,
+2.301695863e-04f, 2.303735661e-04f, 2.305771323e-04f, 2.307802846e-04f, 2.309830225e-04f, 2.311853459e-04f, 2.313872543e-04f, 2.315887476e-04f, 2.317898252e-04f, 2.319904870e-04f,
+2.321907326e-04f, 2.323905617e-04f, 2.325899740e-04f, 2.327889692e-04f, 2.329875469e-04f, 2.331857068e-04f, 2.333834487e-04f, 2.335807723e-04f, 2.337776771e-04f, 2.339741629e-04f,
+2.341702295e-04f, 2.343658764e-04f, 2.345611034e-04f, 2.347559102e-04f, 2.349502965e-04f, 2.351442619e-04f, 2.353378062e-04f, 2.355309290e-04f, 2.357236301e-04f, 2.359159092e-04f,
+2.361077659e-04f, 2.362992000e-04f, 2.364902111e-04f, 2.366807990e-04f, 2.368709633e-04f, 2.370607038e-04f, 2.372500202e-04f, 2.374389121e-04f, 2.376273793e-04f, 2.378154215e-04f,
+2.380030384e-04f, 2.381902297e-04f, 2.383769951e-04f, 2.385633343e-04f, 2.387492470e-04f, 2.389347330e-04f, 2.391197918e-04f, 2.393044234e-04f, 2.394886273e-04f, 2.396724033e-04f,
+2.398557511e-04f, 2.400386704e-04f, 2.402211610e-04f, 2.404032225e-04f, 2.405848546e-04f, 2.407660571e-04f, 2.409468297e-04f, 2.411271722e-04f, 2.413070842e-04f, 2.414865654e-04f,
+2.416656156e-04f, 2.418442346e-04f, 2.420224219e-04f, 2.422001774e-04f, 2.423775008e-04f, 2.425543918e-04f, 2.427308501e-04f, 2.429068755e-04f, 2.430824677e-04f, 2.432576263e-04f,
+2.434323513e-04f, 2.436066422e-04f, 2.437804988e-04f, 2.439539208e-04f, 2.441269080e-04f, 2.442994601e-04f, 2.444715769e-04f, 2.446432580e-04f, 2.448145032e-04f, 2.449853123e-04f,
+2.451556850e-04f, 2.453256209e-04f, 2.454951200e-04f, 2.456641818e-04f, 2.458328062e-04f, 2.460009929e-04f, 2.461687415e-04f, 2.463360520e-04f, 2.465029239e-04f, 2.466693572e-04f,
+2.468353514e-04f, 2.470009063e-04f, 2.471660218e-04f, 2.473306975e-04f, 2.474949331e-04f, 2.476587286e-04f, 2.478220834e-04f, 2.479849976e-04f, 2.481474707e-04f, 2.483095026e-04f,
+2.484710929e-04f, 2.486322415e-04f, 2.487929481e-04f, 2.489532125e-04f, 2.491130344e-04f, 2.492724135e-04f, 2.494313497e-04f, 2.495898426e-04f, 2.497478921e-04f, 2.499054979e-04f,
+2.500626598e-04f, 2.502193775e-04f, 2.503756508e-04f, 2.505314794e-04f, 2.506868632e-04f, 2.508418018e-04f, 2.509962951e-04f, 2.511503428e-04f, 2.513039447e-04f, 2.514571005e-04f,
+2.516098101e-04f, 2.517620731e-04f, 2.519138894e-04f, 2.520652587e-04f, 2.522161808e-04f, 2.523666555e-04f, 2.525166825e-04f, 2.526662617e-04f, 2.528153927e-04f, 2.529640754e-04f,
+2.531123096e-04f, 2.532600950e-04f, 2.534074314e-04f, 2.535543185e-04f, 2.537007563e-04f, 2.538467443e-04f, 2.539922825e-04f, 2.541373706e-04f, 2.542820084e-04f, 2.544261957e-04f,
+2.545699322e-04f, 2.547132177e-04f, 2.548560521e-04f, 2.549984351e-04f, 2.551403665e-04f, 2.552818461e-04f, 2.554228736e-04f, 2.555634490e-04f, 2.557035719e-04f, 2.558432421e-04f,
+2.559824595e-04f, 2.561212238e-04f, 2.562595349e-04f, 2.563973925e-04f, 2.565347964e-04f, 2.566717464e-04f, 2.568082424e-04f, 2.569442840e-04f, 2.570798712e-04f, 2.572150037e-04f,
+2.573496813e-04f, 2.574839038e-04f, 2.576176710e-04f, 2.577509828e-04f, 2.578838389e-04f, 2.580162391e-04f, 2.581481832e-04f, 2.582796711e-04f, 2.584107025e-04f, 2.585412773e-04f,
+2.586713952e-04f, 2.588010561e-04f, 2.589302598e-04f, 2.590590061e-04f, 2.591872948e-04f, 2.593151257e-04f, 2.594424986e-04f, 2.595694134e-04f, 2.596958698e-04f, 2.598218677e-04f,
+2.599474069e-04f, 2.600724873e-04f, 2.601971085e-04f, 2.603212705e-04f, 2.604449730e-04f, 2.605682160e-04f, 2.606909991e-04f, 2.608133223e-04f, 2.609351853e-04f, 2.610565880e-04f,
+2.611775303e-04f, 2.612980118e-04f, 2.614180325e-04f, 2.615375921e-04f, 2.616566906e-04f, 2.617753277e-04f, 2.618935033e-04f, 2.620112172e-04f, 2.621284692e-04f, 2.622452592e-04f,
+2.623615869e-04f, 2.624774523e-04f, 2.625928552e-04f, 2.627077953e-04f, 2.628222726e-04f, 2.629362868e-04f, 2.630498379e-04f, 2.631629256e-04f, 2.632755498e-04f, 2.633877103e-04f,
+2.634994069e-04f, 2.636106396e-04f, 2.637214081e-04f, 2.638317124e-04f, 2.639415521e-04f, 2.640509272e-04f, 2.641598376e-04f, 2.642682830e-04f, 2.643762634e-04f, 2.644837785e-04f,
+2.645908283e-04f, 2.646974125e-04f, 2.648035310e-04f, 2.649091837e-04f, 2.650143705e-04f, 2.651190911e-04f, 2.652233454e-04f, 2.653271333e-04f, 2.654304547e-04f, 2.655333094e-04f,
+2.656356972e-04f, 2.657376180e-04f, 2.658390717e-04f, 2.659400581e-04f, 2.660405771e-04f, 2.661406286e-04f, 2.662402124e-04f, 2.663393284e-04f, 2.664379764e-04f, 2.665361563e-04f,
+2.666338680e-04f, 2.667311113e-04f, 2.668278861e-04f, 2.669241923e-04f, 2.670200297e-04f, 2.671153983e-04f, 2.672102978e-04f, 2.673047282e-04f, 2.673986893e-04f, 2.674921810e-04f,
+2.675852032e-04f, 2.676777557e-04f, 2.677698385e-04f, 2.678614513e-04f, 2.679525941e-04f, 2.680432668e-04f, 2.681334691e-04f, 2.682232011e-04f, 2.683124626e-04f, 2.684012535e-04f,
+2.684895736e-04f, 2.685774228e-04f, 2.686648011e-04f, 2.687517083e-04f, 2.688381442e-04f, 2.689241089e-04f, 2.690096020e-04f, 2.690946237e-04f, 2.691791736e-04f, 2.692632518e-04f,
+2.693468582e-04f, 2.694299925e-04f, 2.695126547e-04f, 2.695948447e-04f, 2.696765624e-04f, 2.697578077e-04f, 2.698385804e-04f, 2.699188805e-04f, 2.699987079e-04f, 2.700780624e-04f,
+2.701569440e-04f, 2.702353526e-04f, 2.703132880e-04f, 2.703907502e-04f, 2.704677391e-04f, 2.705442545e-04f, 2.706202964e-04f, 2.706958646e-04f, 2.707709592e-04f, 2.708455799e-04f,
+2.709197267e-04f, 2.709933995e-04f, 2.710665982e-04f, 2.711393228e-04f, 2.712115730e-04f, 2.712833489e-04f, 2.713546504e-04f, 2.714254773e-04f, 2.714958295e-04f, 2.715657071e-04f,
+2.716351099e-04f, 2.717040377e-04f, 2.717724907e-04f, 2.718404685e-04f, 2.719079713e-04f, 2.719749988e-04f, 2.720415510e-04f, 2.721076279e-04f, 2.721732293e-04f, 2.722383552e-04f,
+2.723030055e-04f, 2.723671801e-04f, 2.724308789e-04f, 2.724941019e-04f, 2.725568491e-04f, 2.726191202e-04f, 2.726809153e-04f, 2.727422343e-04f, 2.728030770e-04f, 2.728634436e-04f,
+2.729233338e-04f, 2.729827476e-04f, 2.730416849e-04f, 2.731001457e-04f, 2.731581300e-04f, 2.732156375e-04f, 2.732726684e-04f, 2.733292224e-04f, 2.733852997e-04f, 2.734409000e-04f,
+2.734960233e-04f, 2.735506696e-04f, 2.736048389e-04f, 2.736585310e-04f, 2.737117458e-04f, 2.737644835e-04f, 2.738167438e-04f, 2.738685268e-04f, 2.739198323e-04f, 2.739706604e-04f,
+2.740210109e-04f, 2.740708839e-04f, 2.741202792e-04f, 2.741691969e-04f, 2.742176368e-04f, 2.742655990e-04f, 2.743130834e-04f, 2.743600899e-04f, 2.744066184e-04f, 2.744526691e-04f,
+2.744982417e-04f, 2.745433363e-04f, 2.745879528e-04f, 2.746320912e-04f, 2.746757514e-04f, 2.747189334e-04f, 2.747616372e-04f, 2.748038627e-04f, 2.748456098e-04f, 2.748868787e-04f,
+2.749276691e-04f, 2.749679811e-04f, 2.750078146e-04f, 2.750471697e-04f, 2.750860462e-04f, 2.751244442e-04f, 2.751623636e-04f, 2.751998044e-04f, 2.752367665e-04f, 2.752732500e-04f,
+2.753092548e-04f, 2.753447809e-04f, 2.753798282e-04f, 2.754143967e-04f, 2.754484864e-04f, 2.754820973e-04f, 2.755152294e-04f, 2.755478826e-04f, 2.755800569e-04f, 2.756117524e-04f,
+2.756429689e-04f, 2.756737064e-04f, 2.757039650e-04f, 2.757337447e-04f, 2.757630453e-04f, 2.757918669e-04f, 2.758202096e-04f, 2.758480732e-04f, 2.758754577e-04f, 2.759023632e-04f,
+2.759287896e-04f, 2.759547370e-04f, 2.759802053e-04f, 2.760051944e-04f, 2.760297045e-04f, 2.760537355e-04f, 2.760772874e-04f, 2.761003601e-04f, 2.761229538e-04f, 2.761450683e-04f,
+2.761667037e-04f, 2.761878600e-04f, 2.762085371e-04f, 2.762287351e-04f, 2.762484540e-04f, 2.762676938e-04f, 2.762864545e-04f, 2.763047360e-04f, 2.763225384e-04f, 2.763398618e-04f,
+2.763567060e-04f, 2.763730711e-04f, 2.763889572e-04f, 2.764043641e-04f, 2.764192920e-04f, 2.764337409e-04f, 2.764477107e-04f, 2.764612015e-04f, 2.764742132e-04f, 2.764867460e-04f,
+2.764987997e-04f, 2.765103745e-04f, 2.765214703e-04f, 2.765320872e-04f, 2.765422251e-04f, 2.765518841e-04f, 2.765610643e-04f, 2.765697655e-04f, 2.765779880e-04f, 2.765857316e-04f,
+2.765929964e-04f, 2.765997824e-04f, 2.766060896e-04f, 2.766119182e-04f, 2.766172680e-04f, 2.766221391e-04f, 2.766265316e-04f, 2.766304455e-04f, 2.766338808e-04f, 2.766368375e-04f,
+2.766393157e-04f, 2.766413154e-04f, 2.766428366e-04f, 2.766438794e-04f, 2.766444438e-04f, 2.766445298e-04f, 2.766441375e-04f, 2.766432669e-04f, 2.766419181e-04f, 2.766400910e-04f,
+2.766377858e-04f, 2.766350024e-04f, 2.766317409e-04f, 2.766280014e-04f, 2.766237839e-04f, 2.766190884e-04f, 2.766139149e-04f, 2.766082636e-04f, 2.766021345e-04f, 2.765955276e-04f,
+2.765884429e-04f, 2.765808805e-04f, 2.765728405e-04f, 2.765643229e-04f, 2.765553278e-04f, 2.765458552e-04f, 2.765359051e-04f, 2.765254776e-04f, 2.765145728e-04f, 2.765031908e-04f,
+2.764913315e-04f, 2.764789951e-04f, 2.764661815e-04f, 2.764528909e-04f, 2.764391233e-04f, 2.764248788e-04f, 2.764101574e-04f, 2.763949592e-04f, 2.763792843e-04f, 2.763631327e-04f,
+2.763465044e-04f, 2.763293996e-04f, 2.763118183e-04f, 2.762937606e-04f, 2.762752266e-04f, 2.762562162e-04f, 2.762367296e-04f, 2.762167669e-04f, 2.761963281e-04f, 2.761754133e-04f,
+2.761540226e-04f, 2.761321560e-04f, 2.761098136e-04f, 2.760869955e-04f, 2.760637017e-04f, 2.760399324e-04f, 2.760156876e-04f, 2.759909674e-04f, 2.759657719e-04f, 2.759401011e-04f,
+2.759139551e-04f, 2.758873341e-04f, 2.758602380e-04f, 2.758326671e-04f, 2.758046212e-04f, 2.757761007e-04f, 2.757471054e-04f, 2.757176356e-04f, 2.756876913e-04f, 2.756572725e-04f,
+2.756263794e-04f, 2.755950121e-04f, 2.755631707e-04f, 2.755308552e-04f, 2.754980657e-04f, 2.754648024e-04f, 2.754310653e-04f, 2.753968545e-04f, 2.753621701e-04f, 2.753270123e-04f,
+2.752913810e-04f, 2.752552764e-04f, 2.752186987e-04f, 2.751816478e-04f, 2.751441239e-04f, 2.751061272e-04f, 2.750676576e-04f, 2.750287153e-04f, 2.749893005e-04f, 2.749494131e-04f,
+2.749090534e-04f, 2.748682214e-04f, 2.748269172e-04f, 2.747851410e-04f, 2.747428927e-04f, 2.747001727e-04f, 2.746569809e-04f, 2.746133174e-04f, 2.745691825e-04f, 2.745245761e-04f,
+2.744794984e-04f, 2.744339496e-04f, 2.743879297e-04f, 2.743414388e-04f, 2.742944771e-04f, 2.742470447e-04f, 2.741991417e-04f, 2.741507681e-04f, 2.741019243e-04f, 2.740526101e-04f,
+2.740028259e-04f, 2.739525717e-04f, 2.739018475e-04f, 2.738506536e-04f, 2.737989901e-04f, 2.737468571e-04f, 2.736942547e-04f, 2.736411830e-04f, 2.735876422e-04f, 2.735336324e-04f,
+2.734791537e-04f, 2.734242063e-04f, 2.733687903e-04f, 2.733129057e-04f, 2.732565529e-04f, 2.731997318e-04f, 2.731424426e-04f, 2.730846855e-04f, 2.730264606e-04f, 2.729677680e-04f,
+2.729086078e-04f, 2.728489802e-04f, 2.727888854e-04f, 2.727283235e-04f, 2.726672945e-04f, 2.726057988e-04f, 2.725438363e-04f, 2.724814072e-04f, 2.724185117e-04f, 2.723551500e-04f,
+2.722913221e-04f, 2.722270283e-04f, 2.721622686e-04f, 2.720970432e-04f, 2.720313522e-04f, 2.719651959e-04f, 2.718985743e-04f, 2.718314877e-04f, 2.717639361e-04f, 2.716959197e-04f,
+2.716274386e-04f, 2.715584931e-04f, 2.714890832e-04f, 2.714192092e-04f, 2.713488711e-04f, 2.712780692e-04f, 2.712068036e-04f, 2.711350744e-04f, 2.710628818e-04f, 2.709902260e-04f,
+2.709171071e-04f, 2.708435254e-04f, 2.707694808e-04f, 2.706949737e-04f, 2.706200042e-04f, 2.705445724e-04f, 2.704686786e-04f, 2.703923228e-04f, 2.703155052e-04f, 2.702382261e-04f,
+2.701604855e-04f, 2.700822837e-04f, 2.700036208e-04f, 2.699244970e-04f, 2.698449125e-04f, 2.697648674e-04f, 2.696843619e-04f, 2.696033961e-04f, 2.695219704e-04f, 2.694400847e-04f,
+2.693577394e-04f, 2.692749346e-04f, 2.691916704e-04f, 2.691079471e-04f, 2.690237647e-04f, 2.689391236e-04f, 2.688540239e-04f, 2.687684657e-04f, 2.686824493e-04f, 2.685959748e-04f,
+2.685090424e-04f, 2.684216523e-04f, 2.683338047e-04f, 2.682454998e-04f, 2.681567377e-04f, 2.680675187e-04f, 2.679778429e-04f, 2.678877105e-04f, 2.677971217e-04f, 2.677060768e-04f,
+2.676145758e-04f, 2.675226190e-04f, 2.674302066e-04f, 2.673373388e-04f, 2.672440158e-04f, 2.671502377e-04f, 2.670560048e-04f, 2.669613173e-04f, 2.668661753e-04f, 2.667705790e-04f,
+2.666745288e-04f, 2.665780247e-04f, 2.664810669e-04f, 2.663836557e-04f, 2.662857913e-04f, 2.661874738e-04f, 2.660887035e-04f, 2.659894806e-04f, 2.658898053e-04f, 2.657896777e-04f,
+2.656890982e-04f, 2.655880668e-04f, 2.654865839e-04f, 2.653846496e-04f, 2.652822641e-04f, 2.651794277e-04f, 2.650761405e-04f, 2.649724028e-04f, 2.648682147e-04f, 2.647635766e-04f,
+2.646584886e-04f, 2.645529509e-04f, 2.644469637e-04f, 2.643405273e-04f, 2.642336419e-04f, 2.641263077e-04f, 2.640185249e-04f, 2.639102937e-04f, 2.638016144e-04f, 2.636924871e-04f,
+2.635829122e-04f, 2.634728898e-04f, 2.633624201e-04f, 2.632515035e-04f, 2.631401400e-04f, 2.630283299e-04f, 2.629160735e-04f, 2.628033710e-04f, 2.626902225e-04f, 2.625766284e-04f,
+2.624625889e-04f, 2.623481042e-04f, 2.622331745e-04f, 2.621178001e-04f, 2.620019812e-04f, 2.618857180e-04f, 2.617690107e-04f, 2.616518597e-04f, 2.615342651e-04f, 2.614162272e-04f,
+2.612977462e-04f, 2.611788223e-04f, 2.610594558e-04f, 2.609396470e-04f, 2.608193960e-04f, 2.606987031e-04f, 2.605775686e-04f, 2.604559926e-04f, 2.603339755e-04f, 2.602115175e-04f,
+2.600886188e-04f, 2.599652797e-04f, 2.598415004e-04f, 2.597172812e-04f, 2.595926223e-04f, 2.594675239e-04f, 2.593419864e-04f, 2.592160099e-04f, 2.590895948e-04f, 2.589627412e-04f,
+2.588354494e-04f, 2.587077197e-04f, 2.585795523e-04f, 2.584509475e-04f, 2.583219055e-04f, 2.581924267e-04f, 2.580625111e-04f, 2.579321592e-04f, 2.578013712e-04f, 2.576701472e-04f,
+2.575384877e-04f, 2.574063928e-04f, 2.572738628e-04f, 2.571408980e-04f, 2.570074986e-04f, 2.568736648e-04f, 2.567393971e-04f, 2.566046956e-04f, 2.564695605e-04f, 2.563339922e-04f,
+2.561979910e-04f, 2.560615570e-04f, 2.559246906e-04f, 2.557873920e-04f, 2.556496615e-04f, 2.555114994e-04f, 2.553729059e-04f, 2.552338813e-04f, 2.550944259e-04f, 2.549545400e-04f,
+2.548142238e-04f, 2.546734776e-04f, 2.545323017e-04f, 2.543906964e-04f, 2.542486619e-04f, 2.541061985e-04f, 2.539633065e-04f, 2.538199862e-04f, 2.536762378e-04f, 2.535320617e-04f,
+2.533874581e-04f, 2.532424273e-04f, 2.530969696e-04f, 2.529510852e-04f, 2.528047745e-04f, 2.526580377e-04f, 2.525108752e-04f, 2.523632871e-04f, 2.522152739e-04f, 2.520668357e-04f,
+2.519179729e-04f, 2.517686858e-04f, 2.516189746e-04f, 2.514688397e-04f, 2.513182813e-04f, 2.511672997e-04f, 2.510158952e-04f, 2.508640682e-04f, 2.507118189e-04f, 2.505591476e-04f,
+2.504060545e-04f, 2.502525401e-04f, 2.500986046e-04f, 2.499442482e-04f, 2.497894714e-04f, 2.496342743e-04f, 2.494786573e-04f, 2.493226207e-04f, 2.491661648e-04f, 2.490092899e-04f,
+2.488519963e-04f, 2.486942843e-04f, 2.485361542e-04f, 2.483776063e-04f, 2.482186410e-04f, 2.480592584e-04f, 2.478994590e-04f, 2.477392430e-04f, 2.475786108e-04f, 2.474175626e-04f,
+2.472560988e-04f, 2.470942196e-04f, 2.469319255e-04f, 2.467692166e-04f, 2.466060934e-04f, 2.464425561e-04f, 2.462786050e-04f, 2.461142405e-04f, 2.459494628e-04f, 2.457842723e-04f,
+2.456186694e-04f, 2.454526542e-04f, 2.452862272e-04f, 2.451193886e-04f, 2.449521389e-04f, 2.447844782e-04f, 2.446164069e-04f, 2.444479254e-04f, 2.442790339e-04f, 2.441097329e-04f,
+2.439400225e-04f, 2.437699031e-04f, 2.435993752e-04f, 2.434284389e-04f, 2.432570946e-04f, 2.430853426e-04f, 2.429131834e-04f, 2.427406171e-04f, 2.425676441e-04f, 2.423942648e-04f,
+2.422204794e-04f, 2.420462884e-04f, 2.418716921e-04f, 2.416966907e-04f, 2.415212846e-04f, 2.413454742e-04f, 2.411692597e-04f, 2.409926416e-04f, 2.408156201e-04f, 2.406381956e-04f,
+2.404603684e-04f, 2.402821389e-04f, 2.401035074e-04f, 2.399244742e-04f, 2.397450397e-04f, 2.395652043e-04f, 2.393849682e-04f, 2.392043318e-04f, 2.390232954e-04f, 2.388418595e-04f,
+2.386600243e-04f, 2.384777901e-04f, 2.382951574e-04f, 2.381121265e-04f, 2.379286976e-04f, 2.377448713e-04f, 2.375606477e-04f, 2.373760273e-04f, 2.371910105e-04f, 2.370055974e-04f,
+2.368197886e-04f, 2.366335844e-04f, 2.364469851e-04f, 2.362599910e-04f, 2.360726025e-04f, 2.358848201e-04f, 2.356966439e-04f, 2.355080745e-04f, 2.353191121e-04f, 2.351297570e-04f,
+2.349400098e-04f, 2.347498706e-04f, 2.345593399e-04f, 2.343684180e-04f, 2.341771054e-04f, 2.339854022e-04f, 2.337933090e-04f, 2.336008261e-04f, 2.334079538e-04f, 2.332146924e-04f,
+2.330210425e-04f, 2.328270042e-04f, 2.326325781e-04f, 2.324377644e-04f, 2.322425635e-04f, 2.320469759e-04f, 2.318510017e-04f, 2.316546415e-04f, 2.314578956e-04f, 2.312607644e-04f,
+2.310632481e-04f, 2.308653473e-04f, 2.306670623e-04f, 2.304683934e-04f, 2.302693410e-04f, 2.300699055e-04f, 2.298700873e-04f, 2.296698867e-04f, 2.294693041e-04f, 2.292683399e-04f,
+2.290669945e-04f, 2.288652682e-04f, 2.286631615e-04f, 2.284606746e-04f, 2.282578080e-04f, 2.280545621e-04f, 2.278509372e-04f, 2.276469338e-04f, 2.274425521e-04f, 2.272377926e-04f,
+2.270326557e-04f, 2.268271417e-04f, 2.266212511e-04f, 2.264149842e-04f, 2.262083414e-04f, 2.260013230e-04f, 2.257939296e-04f, 2.255861614e-04f, 2.253780188e-04f, 2.251695023e-04f,
+2.249606123e-04f, 2.247513490e-04f, 2.245417129e-04f, 2.243317044e-04f, 2.241213240e-04f, 2.239105719e-04f, 2.236994485e-04f, 2.234879544e-04f, 2.232760898e-04f, 2.230638551e-04f,
+2.228512508e-04f, 2.226382772e-04f, 2.224249348e-04f, 2.222112239e-04f, 2.219971450e-04f, 2.217826983e-04f, 2.215678845e-04f, 2.213527037e-04f, 2.211371565e-04f, 2.209212432e-04f,
+2.207049642e-04f, 2.204883200e-04f, 2.202713109e-04f, 2.200539373e-04f, 2.198361997e-04f, 2.196180984e-04f, 2.193996339e-04f, 2.191808065e-04f, 2.189616167e-04f, 2.187420649e-04f,
+2.185221514e-04f, 2.183018767e-04f, 2.180812412e-04f, 2.178602453e-04f, 2.176388895e-04f, 2.174171740e-04f, 2.171950994e-04f, 2.169726660e-04f, 2.167498742e-04f, 2.165267246e-04f,
+2.163032174e-04f, 2.160793531e-04f, 2.158551321e-04f, 2.156305548e-04f, 2.154056216e-04f, 2.151803330e-04f, 2.149546894e-04f, 2.147286912e-04f, 2.145023387e-04f, 2.142756325e-04f,
+2.140485730e-04f, 2.138211604e-04f, 2.135933954e-04f, 2.133652783e-04f, 2.131368095e-04f, 2.129079894e-04f, 2.126788185e-04f, 2.124492972e-04f, 2.122194259e-04f, 2.119892050e-04f,
+2.117586350e-04f, 2.115277163e-04f, 2.112964492e-04f, 2.110648344e-04f, 2.108328720e-04f, 2.106005627e-04f, 2.103679068e-04f, 2.101349048e-04f, 2.099015570e-04f, 2.096678639e-04f,
+2.094338260e-04f, 2.091994436e-04f, 2.089647172e-04f, 2.087296473e-04f, 2.084942342e-04f, 2.082584784e-04f, 2.080223804e-04f, 2.077859405e-04f, 2.075491592e-04f, 2.073120369e-04f,
+2.070745742e-04f, 2.068367713e-04f, 2.065986288e-04f, 2.063601470e-04f, 2.061213265e-04f, 2.058821676e-04f, 2.056426708e-04f, 2.054028366e-04f, 2.051626653e-04f, 2.049221575e-04f,
+2.046813135e-04f, 2.044401338e-04f, 2.041986189e-04f, 2.039567691e-04f, 2.037145850e-04f, 2.034720669e-04f, 2.032292154e-04f, 2.029860308e-04f, 2.027425137e-04f, 2.024986644e-04f,
+2.022544834e-04f, 2.020099711e-04f, 2.017651281e-04f, 2.015199547e-04f, 2.012744514e-04f, 2.010286186e-04f, 2.007824568e-04f, 2.005359665e-04f, 2.002891481e-04f, 2.000420020e-04f,
+1.997945287e-04f, 1.995467287e-04f, 1.992986024e-04f, 1.990501502e-04f, 1.988013727e-04f, 1.985522702e-04f, 1.983028433e-04f, 1.980530923e-04f, 1.978030178e-04f, 1.975526202e-04f,
+1.973018999e-04f, 1.970508574e-04f, 1.967994932e-04f, 1.965478078e-04f, 1.962958015e-04f, 1.960434748e-04f, 1.957908283e-04f, 1.955378623e-04f, 1.952845774e-04f, 1.950309740e-04f,
+1.947770525e-04f, 1.945228134e-04f, 1.942682573e-04f, 1.940133844e-04f, 1.937581954e-04f, 1.935026906e-04f, 1.932468706e-04f, 1.929907358e-04f, 1.927342867e-04f, 1.924775237e-04f,
+1.922204474e-04f, 1.919630581e-04f, 1.917053563e-04f, 1.914473426e-04f, 1.911890174e-04f, 1.909303811e-04f, 1.906714342e-04f, 1.904121773e-04f, 1.901526107e-04f, 1.898927349e-04f,
+1.896325505e-04f, 1.893720579e-04f, 1.891112575e-04f, 1.888501499e-04f, 1.885887354e-04f, 1.883270147e-04f, 1.880649881e-04f, 1.878026562e-04f, 1.875400193e-04f, 1.872770781e-04f,
+1.870138330e-04f, 1.867502844e-04f, 1.864864328e-04f, 1.862222787e-04f, 1.859578226e-04f, 1.856930650e-04f, 1.854280063e-04f, 1.851626471e-04f, 1.848969878e-04f, 1.846310288e-04f,
+1.843647708e-04f, 1.840982141e-04f, 1.838313592e-04f, 1.835642067e-04f, 1.832967570e-04f, 1.830290105e-04f, 1.827609679e-04f, 1.824926295e-04f, 1.822239959e-04f, 1.819550675e-04f,
+1.816858449e-04f, 1.814163284e-04f, 1.811465187e-04f, 1.808764161e-04f, 1.806060213e-04f, 1.803353346e-04f, 1.800643566e-04f, 1.797930877e-04f, 1.795215285e-04f, 1.792496794e-04f,
+1.789775409e-04f, 1.787051136e-04f, 1.784323979e-04f, 1.781593942e-04f, 1.778861032e-04f, 1.776125253e-04f, 1.773386609e-04f, 1.770645107e-04f, 1.767900750e-04f, 1.765153544e-04f,
+1.762403494e-04f, 1.759650605e-04f, 1.756894881e-04f, 1.754136328e-04f, 1.751374950e-04f, 1.748610753e-04f, 1.745843742e-04f, 1.743073922e-04f, 1.740301297e-04f, 1.737525872e-04f,
+1.734747654e-04f, 1.731966646e-04f, 1.729182853e-04f, 1.726396282e-04f, 1.723606936e-04f, 1.720814821e-04f, 1.718019942e-04f, 1.715222303e-04f, 1.712421911e-04f, 1.709618769e-04f,
+1.706812884e-04f, 1.704004259e-04f, 1.701192901e-04f, 1.698378814e-04f, 1.695562003e-04f, 1.692742474e-04f, 1.689920231e-04f, 1.687095279e-04f, 1.684267625e-04f, 1.681437271e-04f,
+1.678604225e-04f, 1.675768491e-04f, 1.672930073e-04f, 1.670088978e-04f, 1.667245210e-04f, 1.664398774e-04f, 1.661549676e-04f, 1.658697921e-04f, 1.655843513e-04f, 1.652986458e-04f,
+1.650126761e-04f, 1.647264428e-04f, 1.644399462e-04f, 1.641531870e-04f, 1.638661657e-04f, 1.635788828e-04f, 1.632913387e-04f, 1.630035341e-04f, 1.627154694e-04f, 1.624271452e-04f,
+1.621385619e-04f, 1.618497201e-04f, 1.615606203e-04f, 1.612712630e-04f, 1.609816488e-04f, 1.606917782e-04f, 1.604016516e-04f, 1.601112696e-04f, 1.598206328e-04f, 1.595297416e-04f,
+1.592385966e-04f, 1.589471983e-04f, 1.586555472e-04f, 1.583636439e-04f, 1.580714888e-04f, 1.577790825e-04f, 1.574864255e-04f, 1.571935184e-04f, 1.569003616e-04f, 1.566069557e-04f,
+1.563133013e-04f, 1.560193987e-04f, 1.557252487e-04f, 1.554308516e-04f, 1.551362081e-04f, 1.548413187e-04f, 1.545461838e-04f, 1.542508040e-04f, 1.539551799e-04f, 1.536593119e-04f,
+1.533632007e-04f, 1.530668466e-04f, 1.527702504e-04f, 1.524734124e-04f, 1.521763333e-04f, 1.518790135e-04f, 1.515814536e-04f, 1.512836542e-04f, 1.509856157e-04f, 1.506873387e-04f,
+1.503888237e-04f, 1.500900712e-04f, 1.497910819e-04f, 1.494918562e-04f, 1.491923946e-04f, 1.488926978e-04f, 1.485927662e-04f, 1.482926003e-04f, 1.479922008e-04f, 1.476915681e-04f,
+1.473907028e-04f, 1.470896054e-04f, 1.467882765e-04f, 1.464867166e-04f, 1.461849262e-04f, 1.458829059e-04f, 1.455806562e-04f, 1.452781777e-04f, 1.449754708e-04f, 1.446725362e-04f,
+1.443693744e-04f, 1.440659859e-04f, 1.437623713e-04f, 1.434585310e-04f, 1.431544658e-04f, 1.428501760e-04f, 1.425456622e-04f, 1.422409250e-04f, 1.419359650e-04f, 1.416307826e-04f,
+1.413253784e-04f, 1.410197529e-04f, 1.407139068e-04f, 1.404078405e-04f, 1.401015546e-04f, 1.397950497e-04f, 1.394883262e-04f, 1.391813847e-04f, 1.388742259e-04f, 1.385668501e-04f,
+1.382592581e-04f, 1.379514502e-04f, 1.376434272e-04f, 1.373351894e-04f, 1.370267376e-04f, 1.367180721e-04f, 1.364091936e-04f, 1.361001026e-04f, 1.357907997e-04f, 1.354812855e-04f,
+1.351715604e-04f, 1.348616250e-04f, 1.345514799e-04f, 1.342411256e-04f, 1.339305627e-04f, 1.336197918e-04f, 1.333088133e-04f, 1.329976279e-04f, 1.326862361e-04f, 1.323746384e-04f,
+1.320628354e-04f, 1.317508277e-04f, 1.314386158e-04f, 1.311262002e-04f, 1.308135816e-04f, 1.305007605e-04f, 1.301877374e-04f, 1.298745129e-04f, 1.295610875e-04f, 1.292474619e-04f,
+1.289336365e-04f, 1.286196120e-04f, 1.283053888e-04f, 1.279909675e-04f, 1.276763488e-04f, 1.273615331e-04f, 1.270465211e-04f, 1.267313132e-04f, 1.264159100e-04f, 1.261003122e-04f,
+1.257845202e-04f, 1.254685346e-04f, 1.251523560e-04f, 1.248359850e-04f, 1.245194220e-04f, 1.242026677e-04f, 1.238857227e-04f, 1.235685874e-04f, 1.232512625e-04f, 1.229337485e-04f,
+1.226160460e-04f, 1.222981555e-04f, 1.219800776e-04f, 1.216618129e-04f, 1.213433620e-04f, 1.210247253e-04f, 1.207059035e-04f, 1.203868971e-04f, 1.200677068e-04f, 1.197483329e-04f,
+1.194287763e-04f, 1.191090373e-04f, 1.187891166e-04f, 1.184690147e-04f, 1.181487322e-04f, 1.178282696e-04f, 1.175076276e-04f, 1.171868067e-04f, 1.168658075e-04f, 1.165446305e-04f,
+1.162232763e-04f, 1.159017455e-04f, 1.155800387e-04f, 1.152581563e-04f, 1.149360990e-04f, 1.146138674e-04f, 1.142914620e-04f, 1.139688834e-04f, 1.136461322e-04f, 1.133232089e-04f,
+1.130001142e-04f, 1.126768485e-04f, 1.123534124e-04f, 1.120298066e-04f, 1.117060316e-04f, 1.113820880e-04f, 1.110579762e-04f, 1.107336971e-04f, 1.104092510e-04f, 1.100846385e-04f,
+1.097598604e-04f, 1.094349170e-04f, 1.091098090e-04f, 1.087845370e-04f, 1.084591015e-04f, 1.081335031e-04f, 1.078077424e-04f, 1.074818200e-04f, 1.071557364e-04f, 1.068294922e-04f,
+1.065030880e-04f, 1.061765244e-04f, 1.058498020e-04f, 1.055229212e-04f, 1.051958828e-04f, 1.048686872e-04f, 1.045413351e-04f, 1.042138270e-04f, 1.038861636e-04f, 1.035583453e-04f,
+1.032303728e-04f, 1.029022466e-04f, 1.025739674e-04f, 1.022455357e-04f, 1.019169520e-04f, 1.015882170e-04f, 1.012593313e-04f, 1.009302954e-04f, 1.006011099e-04f, 1.002717754e-04f,
+9.994229245e-05f, 9.961266165e-05f, 9.928288358e-05f, 9.895295883e-05f, 9.862288796e-05f, 9.829267157e-05f, 9.796231024e-05f, 9.763180455e-05f, 9.730115508e-05f, 9.697036241e-05f,
+9.663942714e-05f, 9.630834983e-05f, 9.597713107e-05f, 9.564577146e-05f, 9.531427156e-05f, 9.498263197e-05f, 9.465085328e-05f, 9.431893605e-05f, 9.398688088e-05f, 9.365468836e-05f,
+9.332235906e-05f, 9.298989358e-05f, 9.265729249e-05f, 9.232455639e-05f, 9.199168586e-05f, 9.165868148e-05f, 9.132554385e-05f, 9.099227354e-05f, 9.065887115e-05f, 9.032533725e-05f,
+8.999167245e-05f, 8.965787732e-05f, 8.932395245e-05f, 8.898989843e-05f, 8.865571585e-05f, 8.832140529e-05f, 8.798696735e-05f, 8.765240260e-05f, 8.731771164e-05f, 8.698289506e-05f,
+8.664795345e-05f, 8.631288739e-05f, 8.597769747e-05f, 8.564238428e-05f, 8.530694842e-05f, 8.497139046e-05f, 8.463571101e-05f, 8.429991065e-05f, 8.396398997e-05f, 8.362794955e-05f,
+8.329179000e-05f, 8.295551190e-05f, 8.261911584e-05f, 8.228260241e-05f, 8.194597221e-05f, 8.160922582e-05f, 8.127236383e-05f, 8.093538684e-05f, 8.059829544e-05f, 8.026109022e-05f,
+7.992377177e-05f, 7.958634069e-05f, 7.924879756e-05f, 7.891114298e-05f, 7.857337754e-05f, 7.823550183e-05f, 7.789751644e-05f, 7.755942198e-05f, 7.722121903e-05f, 7.688290818e-05f,
+7.654449003e-05f, 7.620596517e-05f, 7.586733419e-05f, 7.552859770e-05f, 7.518975627e-05f, 7.485081052e-05f, 7.451176102e-05f, 7.417260838e-05f, 7.383335318e-05f, 7.349399603e-05f,
+7.315453752e-05f, 7.281497824e-05f, 7.247531879e-05f, 7.213555977e-05f, 7.179570176e-05f, 7.145574536e-05f, 7.111569117e-05f, 7.077553979e-05f, 7.043529180e-05f, 7.009494782e-05f,
+6.975450842e-05f, 6.941397421e-05f, 6.907334579e-05f, 6.873262374e-05f, 6.839180867e-05f, 6.805090118e-05f, 6.770990185e-05f, 6.736881129e-05f, 6.702763009e-05f, 6.668635885e-05f,
+6.634499817e-05f, 6.600354864e-05f, 6.566201087e-05f, 6.532038544e-05f, 6.497867296e-05f, 6.463687402e-05f, 6.429498923e-05f, 6.395301917e-05f, 6.361096445e-05f, 6.326882567e-05f,
+6.292660342e-05f, 6.258429830e-05f, 6.224191091e-05f, 6.189944184e-05f, 6.155689171e-05f, 6.121426110e-05f, 6.087155061e-05f, 6.052876085e-05f, 6.018589241e-05f, 5.984294588e-05f,
+5.949992188e-05f, 5.915682100e-05f, 5.881364383e-05f, 5.847039098e-05f, 5.812706305e-05f, 5.778366063e-05f, 5.744018433e-05f, 5.709663474e-05f, 5.675301247e-05f, 5.640931812e-05f,
+5.606555227e-05f, 5.572171554e-05f, 5.537780853e-05f, 5.503383183e-05f, 5.468978605e-05f, 5.434567178e-05f, 5.400148962e-05f, 5.365724019e-05f, 5.331292406e-05f, 5.296854186e-05f,
+5.262409417e-05f, 5.227958160e-05f, 5.193500475e-05f, 5.159036422e-05f, 5.124566061e-05f, 5.090089452e-05f, 5.055606655e-05f, 5.021117731e-05f, 4.986622739e-05f, 4.952121740e-05f,
+4.917614793e-05f, 4.883101959e-05f, 4.848583298e-05f, 4.814058871e-05f, 4.779528736e-05f, 4.744992955e-05f, 4.710451588e-05f, 4.675904694e-05f, 4.641352334e-05f, 4.606794568e-05f,
+4.572231457e-05f, 4.537663060e-05f, 4.503089437e-05f, 4.468510650e-05f, 4.433926757e-05f, 4.399337820e-05f, 4.364743898e-05f, 4.330145051e-05f, 4.295541340e-05f, 4.260932826e-05f,
+4.226319567e-05f, 4.191701626e-05f, 4.157079060e-05f, 4.122451932e-05f, 4.087820301e-05f, 4.053184227e-05f, 4.018543771e-05f, 3.983898993e-05f, 3.949249953e-05f, 3.914596712e-05f,
+3.879939329e-05f, 3.845277865e-05f, 3.810612380e-05f, 3.775942934e-05f, 3.741269588e-05f, 3.706592402e-05f, 3.671911436e-05f, 3.637226751e-05f, 3.602538406e-05f, 3.567846463e-05f,
+3.533150980e-05f, 3.498452019e-05f, 3.463749640e-05f, 3.429043903e-05f, 3.394334869e-05f, 3.359622597e-05f, 3.324907148e-05f, 3.290188582e-05f, 3.255466960e-05f, 3.220742341e-05f,
+3.186014786e-05f, 3.151284356e-05f, 3.116551111e-05f, 3.081815110e-05f, 3.047076415e-05f, 3.012335085e-05f, 2.977591180e-05f, 2.942844762e-05f, 2.908095890e-05f, 2.873344625e-05f,
+2.838591026e-05f, 2.803835155e-05f, 2.769077071e-05f, 2.734316835e-05f, 2.699554507e-05f, 2.664790148e-05f, 2.630023817e-05f, 2.595255574e-05f, 2.560485481e-05f, 2.525713597e-05f,
+2.490939983e-05f, 2.456164699e-05f, 2.421387805e-05f, 2.386609362e-05f, 2.351829429e-05f, 2.317048068e-05f, 2.282265337e-05f, 2.247481298e-05f, 2.212696011e-05f, 2.177909537e-05f,
+2.143121934e-05f, 2.108333264e-05f, 2.073543586e-05f, 2.038752962e-05f, 2.003961451e-05f, 1.969169114e-05f, 1.934376010e-05f, 1.899582200e-05f, 1.864787745e-05f, 1.829992704e-05f,
+1.795197138e-05f, 1.760401106e-05f, 1.725604670e-05f, 1.690807889e-05f, 1.656010824e-05f, 1.621213534e-05f, 1.586416080e-05f, 1.551618522e-05f, 1.516820921e-05f, 1.482023336e-05f,
+1.447225828e-05f, 1.412428456e-05f, 1.377631282e-05f, 1.342834365e-05f, 1.308037765e-05f, 1.273241543e-05f, 1.238445758e-05f, 1.203650471e-05f, 1.168855742e-05f, 1.134061632e-05f,
+1.099268199e-05f, 1.064475505e-05f, 1.029683609e-05f, 9.948925716e-06f, 9.601024530e-06f, 9.253133132e-06f, 8.905252122e-06f, 8.557382102e-06f, 8.209523672e-06f, 7.861677433e-06f,
+7.513843985e-06f, 7.166023930e-06f, 6.818217868e-06f, 6.470426399e-06f, 6.122650123e-06f, 5.774889642e-06f, 5.427145555e-06f, 5.079418462e-06f, 4.731708964e-06f, 4.384017660e-06f,
+4.036345151e-06f, 3.688692036e-06f, 3.341058915e-06f, 2.993446388e-06f, 2.645855055e-06f, 2.298285515e-06f, 1.950738367e-06f, 1.603214211e-06f, 1.255713646e-06f, 9.082372719e-07f,
+5.607856870e-07f, 2.133594907e-07f, -1.340407181e-07f, -4.814143406e-07f, -8.287607780e-07f, -1.176079432e-06f, -1.523369703e-06f, -1.870630993e-06f, -2.217862705e-06f, -2.565064238e-06f,
+-2.912234996e-06f, -3.259374380e-06f, -3.606481793e-06f, -3.953556636e-06f, -4.300598311e-06f, -4.647606221e-06f, -4.994579768e-06f, -5.341518356e-06f, -5.688421385e-06f, -6.035288260e-06f,
+-6.382118383e-06f, -6.728911156e-06f, -7.075665984e-06f, -7.422382268e-06f, -7.769059414e-06f, -8.115696823e-06f, -8.462293899e-06f, -8.808850046e-06f, -9.155364668e-06f, -9.501837169e-06f,
+-9.848266952e-06f, -1.019465342e-05f, -1.054099598e-05f, -1.088729404e-05f, -1.123354699e-05f, -1.157975425e-05f, -1.192591522e-05f, -1.227202930e-05f, -1.261809590e-05f, -1.296411443e-05f,
+-1.331008428e-05f, -1.365600487e-05f, -1.400187560e-05f, -1.434769587e-05f, -1.469346510e-05f, -1.503918268e-05f, -1.538484802e-05f, -1.573046054e-05f, -1.607601962e-05f, -1.642152470e-05f,
+-1.676697515e-05f, -1.711237041e-05f, -1.745770987e-05f, -1.780299293e-05f, -1.814821901e-05f, -1.849338752e-05f, -1.883849785e-05f, -1.918354943e-05f, -1.952854164e-05f, -1.987347392e-05f,
+-2.021834565e-05f, -2.056315626e-05f, -2.090790514e-05f, -2.125259171e-05f, -2.159721537e-05f, -2.194177554e-05f, -2.228627162e-05f, -2.263070303e-05f, -2.297506916e-05f, -2.331936944e-05f,
+-2.366360326e-05f, -2.400777005e-05f, -2.435186920e-05f, -2.469590014e-05f, -2.503986226e-05f, -2.538375498e-05f, -2.572757772e-05f, -2.607132988e-05f, -2.641501086e-05f, -2.675862010e-05f,
+-2.710215698e-05f, -2.744562093e-05f, -2.778901136e-05f, -2.813232768e-05f, -2.847556930e-05f, -2.881873563e-05f, -2.916182609e-05f, -2.950484008e-05f, -2.984777702e-05f, -3.019063633e-05f,
+-3.053341741e-05f, -3.087611968e-05f, -3.121874255e-05f, -3.156128544e-05f, -3.190374776e-05f, -3.224612892e-05f, -3.258842834e-05f, -3.293064542e-05f, -3.327277960e-05f, -3.361483027e-05f,
+-3.395679686e-05f, -3.429867878e-05f, -3.464047544e-05f, -3.498218627e-05f, -3.532381067e-05f, -3.566534806e-05f, -3.600679786e-05f, -3.634815948e-05f, -3.668943234e-05f, -3.703061586e-05f,
+-3.737170945e-05f, -3.771271253e-05f, -3.805362452e-05f, -3.839444483e-05f, -3.873517289e-05f, -3.907580811e-05f, -3.941634990e-05f, -3.975679769e-05f, -4.009715089e-05f, -4.043740892e-05f,
+-4.077757121e-05f, -4.111763717e-05f, -4.145760621e-05f, -4.179747777e-05f, -4.213725125e-05f, -4.247692608e-05f, -4.281650168e-05f, -4.315597747e-05f, -4.349535287e-05f, -4.383462729e-05f,
+-4.417380017e-05f, -4.451287092e-05f, -4.485183896e-05f, -4.519070372e-05f, -4.552946461e-05f, -4.586812107e-05f, -4.620667250e-05f, -4.654511833e-05f, -4.688345799e-05f, -4.722169090e-05f,
+-4.755981648e-05f, -4.789783416e-05f, -4.823574335e-05f, -4.857354349e-05f, -4.891123399e-05f, -4.924881429e-05f, -4.958628380e-05f, -4.992364195e-05f, -5.026088816e-05f, -5.059802187e-05f,
+-5.093504249e-05f, -5.127194945e-05f, -5.160874218e-05f, -5.194542011e-05f, -5.228198265e-05f, -5.261842924e-05f, -5.295475931e-05f, -5.329097227e-05f, -5.362706757e-05f, -5.396304462e-05f,
+-5.429890285e-05f, -5.463464170e-05f, -5.497026058e-05f, -5.530575894e-05f, -5.564113619e-05f, -5.597639177e-05f, -5.631152511e-05f, -5.664653563e-05f, -5.698142277e-05f, -5.731618595e-05f,
+-5.765082462e-05f, -5.798533819e-05f, -5.831972609e-05f, -5.865398777e-05f, -5.898812265e-05f, -5.932213016e-05f, -5.965600974e-05f, -5.998976081e-05f, -6.032338282e-05f, -6.065687518e-05f,
+-6.099023734e-05f, -6.132346873e-05f, -6.165656879e-05f, -6.198953694e-05f, -6.232237262e-05f, -6.265507526e-05f, -6.298764431e-05f, -6.332007919e-05f, -6.365237933e-05f, -6.398454419e-05f,
+-6.431657318e-05f, -6.464846576e-05f, -6.498022134e-05f, -6.531183938e-05f, -6.564331931e-05f, -6.597466055e-05f, -6.630586256e-05f, -6.663692477e-05f, -6.696784662e-05f, -6.729862754e-05f,
+-6.762926698e-05f, -6.795976437e-05f, -6.829011916e-05f, -6.862033078e-05f, -6.895039866e-05f, -6.928032226e-05f, -6.961010102e-05f, -6.993973436e-05f, -7.026922174e-05f, -7.059856260e-05f,
+-7.092775637e-05f, -7.125680250e-05f, -7.158570043e-05f, -7.191444961e-05f, -7.224304947e-05f, -7.257149945e-05f, -7.289979902e-05f, -7.322794759e-05f, -7.355594463e-05f, -7.388378957e-05f,
+-7.421148186e-05f, -7.453902094e-05f, -7.486640626e-05f, -7.519363727e-05f, -7.552071341e-05f, -7.584763412e-05f, -7.617439885e-05f, -7.650100705e-05f, -7.682745817e-05f, -7.715375165e-05f,
+-7.747988695e-05f, -7.780586350e-05f, -7.813168076e-05f, -7.845733817e-05f, -7.878283519e-05f, -7.910817127e-05f, -7.943334585e-05f, -7.975835838e-05f, -8.008320831e-05f, -8.040789510e-05f,
+-8.073241820e-05f, -8.105677705e-05f, -8.138097110e-05f, -8.170499982e-05f, -8.202886265e-05f, -8.235255905e-05f, -8.267608846e-05f, -8.299945034e-05f, -8.332264414e-05f, -8.364566932e-05f,
+-8.396852534e-05f, -8.429121164e-05f, -8.461372768e-05f, -8.493607291e-05f, -8.525824680e-05f, -8.558024879e-05f, -8.590207835e-05f, -8.622373493e-05f, -8.654521799e-05f, -8.686652697e-05f,
+-8.718766136e-05f, -8.750862058e-05f, -8.782940412e-05f, -8.815001143e-05f, -8.847044195e-05f, -8.879069517e-05f, -8.911077052e-05f, -8.943066748e-05f, -8.975038551e-05f, -9.006992406e-05f,
+-9.038928259e-05f, -9.070846057e-05f, -9.102745746e-05f, -9.134627273e-05f, -9.166490582e-05f, -9.198335621e-05f, -9.230162336e-05f, -9.261970673e-05f, -9.293760579e-05f, -9.325532000e-05f,
+-9.357284883e-05f, -9.389019173e-05f, -9.420734818e-05f, -9.452431764e-05f, -9.484109958e-05f, -9.515769346e-05f, -9.547409875e-05f, -9.579031492e-05f, -9.610634144e-05f, -9.642217776e-05f,
+-9.673782337e-05f, -9.705327773e-05f, -9.736854030e-05f, -9.768361056e-05f, -9.799848798e-05f, -9.831317203e-05f, -9.862766218e-05f, -9.894195789e-05f, -9.925605864e-05f, -9.956996391e-05f,
+-9.988367316e-05f, -1.001971859e-04f, -1.005105015e-04f, -1.008236195e-04f, -1.011365394e-04f, -1.014492607e-04f, -1.017617828e-04f, -1.020741052e-04f, -1.023862273e-04f, -1.026981487e-04f,
+-1.030098688e-04f, -1.033213872e-04f, -1.036327032e-04f, -1.039438163e-04f, -1.042547261e-04f, -1.045654320e-04f, -1.048759335e-04f, -1.051862300e-04f, -1.054963211e-04f, -1.058062062e-04f,
+-1.061158849e-04f, -1.064253565e-04f, -1.067346205e-04f, -1.070436765e-04f, -1.073525240e-04f, -1.076611623e-04f, -1.079695911e-04f, -1.082778097e-04f, -1.085858176e-04f, -1.088936144e-04f,
+-1.092011996e-04f, -1.095085725e-04f, -1.098157327e-04f, -1.101226797e-04f, -1.104294130e-04f, -1.107359320e-04f, -1.110422362e-04f, -1.113483252e-04f, -1.116541983e-04f, -1.119598552e-04f,
+-1.122652952e-04f, -1.125705180e-04f, -1.128755228e-04f, -1.131803094e-04f, -1.134848770e-04f, -1.137892253e-04f, -1.140933537e-04f, -1.143972617e-04f, -1.147009488e-04f, -1.150044145e-04f,
+-1.153076583e-04f, -1.156106797e-04f, -1.159134781e-04f, -1.162160531e-04f, -1.165184041e-04f, -1.168205307e-04f, -1.171224324e-04f, -1.174241085e-04f, -1.177255587e-04f, -1.180267825e-04f,
+-1.183277792e-04f, -1.186285485e-04f, -1.189290898e-04f, -1.192294027e-04f, -1.195294865e-04f, -1.198293409e-04f, -1.201289652e-04f, -1.204283591e-04f, -1.207275220e-04f, -1.210264534e-04f,
+-1.213251528e-04f, -1.216236198e-04f, -1.219218537e-04f, -1.222198542e-04f, -1.225176207e-04f, -1.228151527e-04f, -1.231124497e-04f, -1.234095113e-04f, -1.237063369e-04f, -1.240029260e-04f,
+-1.242992782e-04f, -1.245953929e-04f, -1.248912697e-04f, -1.251869080e-04f, -1.254823074e-04f, -1.257774674e-04f, -1.260723874e-04f, -1.263670671e-04f, -1.266615058e-04f, -1.269557032e-04f,
+-1.272496587e-04f, -1.275433718e-04f, -1.278368420e-04f, -1.281300689e-04f, -1.284230520e-04f, -1.287157907e-04f, -1.290082846e-04f, -1.293005332e-04f, -1.295925360e-04f, -1.298842926e-04f,
+-1.301758024e-04f, -1.304670649e-04f, -1.307580797e-04f, -1.310488463e-04f, -1.313393642e-04f, -1.316296329e-04f, -1.319196519e-04f, -1.322094208e-04f, -1.324989390e-04f, -1.327882062e-04f,
+-1.330772217e-04f, -1.333659852e-04f, -1.336544961e-04f, -1.339427540e-04f, -1.342307583e-04f, -1.345185087e-04f, -1.348060046e-04f, -1.350932456e-04f, -1.353802311e-04f, -1.356669607e-04f,
+-1.359534339e-04f, -1.362396503e-04f, -1.365256094e-04f, -1.368113106e-04f, -1.370967536e-04f, -1.373819378e-04f, -1.376668627e-04f, -1.379515280e-04f, -1.382359331e-04f, -1.385200776e-04f,
+-1.388039609e-04f, -1.390875827e-04f, -1.393709423e-04f, -1.396540395e-04f, -1.399368736e-04f, -1.402194443e-04f, -1.405017511e-04f, -1.407837934e-04f, -1.410655709e-04f, -1.413470830e-04f,
+-1.416283293e-04f, -1.419093094e-04f, -1.421900227e-04f, -1.424704688e-04f, -1.427506472e-04f, -1.430305575e-04f, -1.433101992e-04f, -1.435895719e-04f, -1.438686750e-04f, -1.441475081e-04f,
+-1.444260708e-04f, -1.447043626e-04f, -1.449823830e-04f, -1.452601316e-04f, -1.455376079e-04f, -1.458148114e-04f, -1.460917417e-04f, -1.463683984e-04f, -1.466447810e-04f, -1.469208889e-04f,
+-1.471967219e-04f, -1.474722793e-04f, -1.477475608e-04f, -1.480225659e-04f, -1.482972941e-04f, -1.485717450e-04f, -1.488459182e-04f, -1.491198131e-04f, -1.493934294e-04f, -1.496667665e-04f,
+-1.499398241e-04f, -1.502126016e-04f, -1.504850987e-04f, -1.507573149e-04f, -1.510292496e-04f, -1.513009026e-04f, -1.515722732e-04f, -1.518433612e-04f, -1.521141659e-04f, -1.523846871e-04f,
+-1.526549242e-04f, -1.529248768e-04f, -1.531945445e-04f, -1.534639267e-04f, -1.537330231e-04f, -1.540018332e-04f, -1.542703566e-04f, -1.545385928e-04f, -1.548065415e-04f, -1.550742020e-04f,
+-1.553415741e-04f, -1.556086572e-04f, -1.558754510e-04f, -1.561419549e-04f, -1.564081686e-04f, -1.566740916e-04f, -1.569397234e-04f, -1.572050637e-04f, -1.574701120e-04f, -1.577348679e-04f,
+-1.579993308e-04f, -1.582635005e-04f, -1.585273764e-04f, -1.587909582e-04f, -1.590542453e-04f, -1.593172374e-04f, -1.595799340e-04f, -1.598423347e-04f, -1.601044390e-04f, -1.603662466e-04f,
+-1.606277570e-04f, -1.608889697e-04f, -1.611498844e-04f, -1.614105006e-04f, -1.616708179e-04f, -1.619308358e-04f, -1.621905540e-04f, -1.624499719e-04f, -1.627090893e-04f, -1.629679055e-04f,
+-1.632264204e-04f, -1.634846333e-04f, -1.637425439e-04f, -1.640001517e-04f, -1.642574564e-04f, -1.645144575e-04f, -1.647711546e-04f, -1.650275472e-04f, -1.652836350e-04f, -1.655394175e-04f,
+-1.657948944e-04f, -1.660500651e-04f, -1.663049293e-04f, -1.665594865e-04f, -1.668137364e-04f, -1.670676785e-04f, -1.673213125e-04f, -1.675746378e-04f, -1.678276541e-04f, -1.680803609e-04f,
+-1.683327579e-04f, -1.685848446e-04f, -1.688366207e-04f, -1.690880856e-04f, -1.693392391e-04f, -1.695900807e-04f, -1.698406099e-04f, -1.700908264e-04f, -1.703407298e-04f, -1.705903196e-04f,
+-1.708395955e-04f, -1.710885570e-04f, -1.713372037e-04f, -1.715855353e-04f, -1.718335512e-04f, -1.720812512e-04f, -1.723286348e-04f, -1.725757016e-04f, -1.728224512e-04f, -1.730688833e-04f,
+-1.733149973e-04f, -1.735607929e-04f, -1.738062697e-04f, -1.740514273e-04f, -1.742962653e-04f, -1.745407833e-04f, -1.747849809e-04f, -1.750288576e-04f, -1.752724132e-04f, -1.755156472e-04f,
+-1.757585593e-04f, -1.760011489e-04f, -1.762434157e-04f, -1.764853594e-04f, -1.767269795e-04f, -1.769682756e-04f, -1.772092474e-04f, -1.774498945e-04f, -1.776902164e-04f, -1.779302127e-04f,
+-1.781698832e-04f, -1.784092273e-04f, -1.786482448e-04f, -1.788869351e-04f, -1.791252980e-04f, -1.793633330e-04f, -1.796010398e-04f, -1.798384179e-04f, -1.800754671e-04f, -1.803121868e-04f,
+-1.805485767e-04f, -1.807846364e-04f, -1.810203656e-04f, -1.812557639e-04f, -1.814908308e-04f, -1.817255661e-04f, -1.819599692e-04f, -1.821940399e-04f, -1.824277777e-04f, -1.826611823e-04f,
+-1.828942534e-04f, -1.831269904e-04f, -1.833593931e-04f, -1.835914611e-04f, -1.838231939e-04f, -1.840545913e-04f, -1.842856528e-04f, -1.845163781e-04f, -1.847467667e-04f, -1.849768184e-04f,
+-1.852065328e-04f, -1.854359094e-04f, -1.856649479e-04f, -1.858936480e-04f, -1.861220093e-04f, -1.863500313e-04f, -1.865777138e-04f, -1.868050563e-04f, -1.870320585e-04f, -1.872587201e-04f,
+-1.874850406e-04f, -1.877110197e-04f, -1.879366570e-04f, -1.881619523e-04f, -1.883869050e-04f, -1.886115148e-04f, -1.888357815e-04f, -1.890597045e-04f, -1.892832836e-04f, -1.895065184e-04f,
+-1.897294086e-04f, -1.899519537e-04f, -1.901741534e-04f, -1.903960074e-04f, -1.906175153e-04f, -1.908386767e-04f, -1.910594914e-04f, -1.912799588e-04f, -1.915000788e-04f, -1.917198508e-04f,
+-1.919392747e-04f, -1.921583499e-04f, -1.923770762e-04f, -1.925954533e-04f, -1.928134807e-04f, -1.930311581e-04f, -1.932484851e-04f, -1.934654615e-04f, -1.936820869e-04f, -1.938983609e-04f,
+-1.941142831e-04f, -1.943298532e-04f, -1.945450710e-04f, -1.947599360e-04f, -1.949744478e-04f, -1.951886062e-04f, -1.954024108e-04f, -1.956158613e-04f, -1.958289572e-04f, -1.960416984e-04f,
+-1.962540843e-04f, -1.964661148e-04f, -1.966777894e-04f, -1.968891078e-04f, -1.971000697e-04f, -1.973106748e-04f, -1.975209226e-04f, -1.977308129e-04f, -1.979403454e-04f, -1.981495196e-04f,
+-1.983583353e-04f, -1.985667921e-04f, -1.987748897e-04f, -1.989826277e-04f, -1.991900059e-04f, -1.993970239e-04f, -1.996036813e-04f, -1.998099779e-04f, -2.000159133e-04f, -2.002214871e-04f,
+-2.004266991e-04f, -2.006315489e-04f, -2.008360363e-04f, -2.010401607e-04f, -2.012439221e-04f, -2.014473199e-04f, -2.016503540e-04f, -2.018530239e-04f, -2.020553293e-04f, -2.022572700e-04f,
+-2.024588456e-04f, -2.026600558e-04f, -2.028609002e-04f, -2.030613786e-04f, -2.032614906e-04f, -2.034612360e-04f, -2.036606143e-04f, -2.038596252e-04f, -2.040582686e-04f, -2.042565439e-04f,
+-2.044544510e-04f, -2.046519896e-04f, -2.048491592e-04f, -2.050459596e-04f, -2.052423904e-04f, -2.054384515e-04f, -2.056341423e-04f, -2.058294628e-04f, -2.060244124e-04f, -2.062189910e-04f,
+-2.064131982e-04f, -2.066070337e-04f, -2.068004972e-04f, -2.069935883e-04f, -2.071863069e-04f, -2.073786526e-04f, -2.075706250e-04f, -2.077622239e-04f, -2.079534490e-04f, -2.081442999e-04f,
+-2.083347764e-04f, -2.085248782e-04f, -2.087146049e-04f, -2.089039564e-04f, -2.090929321e-04f, -2.092815320e-04f, -2.094697556e-04f, -2.096576027e-04f, -2.098450730e-04f, -2.100321661e-04f,
+-2.102188819e-04f, -2.104052199e-04f, -2.105911800e-04f, -2.107767617e-04f, -2.109619649e-04f, -2.111467892e-04f, -2.113312343e-04f, -2.115153000e-04f, -2.116989859e-04f, -2.118822918e-04f,
+-2.120652173e-04f, -2.122477623e-04f, -2.124299264e-04f, -2.126117092e-04f, -2.127931106e-04f, -2.129741303e-04f, -2.131547679e-04f, -2.133350232e-04f, -2.135148959e-04f, -2.136943857e-04f,
+-2.138734924e-04f, -2.140522156e-04f, -2.142305550e-04f, -2.144085105e-04f, -2.145860817e-04f, -2.147632683e-04f, -2.149400701e-04f, -2.151164868e-04f, -2.152925180e-04f, -2.154681636e-04f,
+-2.156434233e-04f, -2.158182968e-04f, -2.159927837e-04f, -2.161668839e-04f, -2.163405971e-04f, -2.165139230e-04f, -2.166868613e-04f, -2.168594117e-04f, -2.170315741e-04f, -2.172033481e-04f,
+-2.173747334e-04f, -2.175457298e-04f, -2.177163370e-04f, -2.178865548e-04f, -2.180563829e-04f, -2.182258210e-04f, -2.183948688e-04f, -2.185635262e-04f, -2.187317928e-04f, -2.188996684e-04f,
+-2.190671527e-04f, -2.192342454e-04f, -2.194009464e-04f, -2.195672553e-04f, -2.197331718e-04f, -2.198986958e-04f, -2.200638270e-04f, -2.202285650e-04f, -2.203929098e-04f, -2.205568609e-04f,
+-2.207204182e-04f, -2.208835814e-04f, -2.210463502e-04f, -2.212087244e-04f, -2.213707038e-04f, -2.215322880e-04f, -2.216934769e-04f, -2.218542702e-04f, -2.220146676e-04f, -2.221746690e-04f,
+-2.223342740e-04f, -2.224934824e-04f, -2.226522939e-04f, -2.228107084e-04f, -2.229687255e-04f, -2.231263451e-04f, -2.232835669e-04f, -2.234403906e-04f, -2.235968160e-04f, -2.237528429e-04f,
+-2.239084710e-04f, -2.240637001e-04f, -2.242185299e-04f, -2.243729603e-04f, -2.245269909e-04f, -2.246806216e-04f, -2.248338520e-04f, -2.249866821e-04f, -2.251391114e-04f, -2.252911399e-04f,
+-2.254427673e-04f, -2.255939933e-04f, -2.257448177e-04f, -2.258952402e-04f, -2.260452608e-04f, -2.261948790e-04f, -2.263440947e-04f, -2.264929077e-04f, -2.266413178e-04f, -2.267893246e-04f,
+-2.269369280e-04f, -2.270841278e-04f, -2.272309237e-04f, -2.273773156e-04f, -2.275233031e-04f, -2.276688861e-04f, -2.278140644e-04f, -2.279588376e-04f, -2.281032057e-04f, -2.282471684e-04f,
+-2.283907255e-04f, -2.285338767e-04f, -2.286766218e-04f, -2.288189607e-04f, -2.289608931e-04f, -2.291024187e-04f, -2.292435375e-04f, -2.293842491e-04f, -2.295245534e-04f, -2.296644501e-04f,
+-2.298039390e-04f, -2.299430200e-04f, -2.300816928e-04f, -2.302199571e-04f, -2.303578129e-04f, -2.304952599e-04f, -2.306322978e-04f, -2.307689265e-04f, -2.309051458e-04f, -2.310409555e-04f,
+-2.311763553e-04f, -2.313113451e-04f, -2.314459246e-04f, -2.315800937e-04f, -2.317138521e-04f, -2.318471997e-04f, -2.319801363e-04f, -2.321126616e-04f, -2.322447755e-04f, -2.323764777e-04f,
+-2.325077681e-04f, -2.326386465e-04f, -2.327691126e-04f, -2.328991663e-04f, -2.330288074e-04f, -2.331580357e-04f, -2.332868511e-04f, -2.334152532e-04f, -2.335432419e-04f, -2.336708171e-04f,
+-2.337979785e-04f, -2.339247260e-04f, -2.340510593e-04f, -2.341769783e-04f, -2.343024828e-04f, -2.344275726e-04f, -2.345522475e-04f, -2.346765074e-04f, -2.348003520e-04f, -2.349237812e-04f,
+-2.350467948e-04f, -2.351693926e-04f, -2.352915744e-04f, -2.354133401e-04f, -2.355346895e-04f, -2.356556223e-04f, -2.357761385e-04f, -2.358962378e-04f, -2.360159200e-04f, -2.361351851e-04f,
+-2.362540327e-04f, -2.363724628e-04f, -2.364904752e-04f, -2.366080697e-04f, -2.367252460e-04f, -2.368420042e-04f, -2.369583439e-04f, -2.370742650e-04f, -2.371897674e-04f, -2.373048508e-04f,
+-2.374195152e-04f, -2.375337603e-04f, -2.376475860e-04f, -2.377609921e-04f, -2.378739784e-04f, -2.379865448e-04f, -2.380986912e-04f, -2.382104173e-04f, -2.383217230e-04f, -2.384326081e-04f,
+-2.385430726e-04f, -2.386531161e-04f, -2.387627386e-04f, -2.388719399e-04f, -2.389807199e-04f, -2.390890783e-04f, -2.391970151e-04f, -2.393045301e-04f, -2.394116231e-04f, -2.395182939e-04f,
+-2.396245425e-04f, -2.397303687e-04f, -2.398357723e-04f, -2.399407531e-04f, -2.400453111e-04f, -2.401494461e-04f, -2.402531578e-04f, -2.403564463e-04f, -2.404593113e-04f, -2.405617526e-04f,
+-2.406637702e-04f, -2.407653639e-04f, -2.408665336e-04f, -2.409672790e-04f, -2.410676002e-04f, -2.411674968e-04f, -2.412669689e-04f, -2.413660162e-04f, -2.414646386e-04f, -2.415628360e-04f,
+-2.416606082e-04f, -2.417579551e-04f, -2.418548765e-04f, -2.419513724e-04f, -2.420474426e-04f, -2.421430869e-04f, -2.422383053e-04f, -2.423330976e-04f, -2.424274636e-04f, -2.425214032e-04f,
+-2.426149164e-04f, -2.427080029e-04f, -2.428006626e-04f, -2.428928955e-04f, -2.429847014e-04f, -2.430760801e-04f, -2.431670315e-04f, -2.432575556e-04f, -2.433476522e-04f, -2.434373211e-04f,
+-2.435265622e-04f, -2.436153755e-04f, -2.437037608e-04f, -2.437917180e-04f, -2.438792469e-04f, -2.439663474e-04f, -2.440530195e-04f, -2.441392630e-04f, -2.442250778e-04f, -2.443104637e-04f,
+-2.443954207e-04f, -2.444799487e-04f, -2.445640475e-04f, -2.446477170e-04f, -2.447309571e-04f, -2.448137677e-04f, -2.448961486e-04f, -2.449780999e-04f, -2.450596213e-04f, -2.451407128e-04f,
+-2.452213742e-04f, -2.453016055e-04f, -2.453814065e-04f, -2.454607772e-04f, -2.455397173e-04f, -2.456182269e-04f, -2.456963059e-04f, -2.457739540e-04f, -2.458511712e-04f, -2.459279575e-04f,
+-2.460043127e-04f, -2.460802367e-04f, -2.461557294e-04f, -2.462307908e-04f, -2.463054206e-04f, -2.463796189e-04f, -2.464533856e-04f, -2.465267204e-04f, -2.465996235e-04f, -2.466720945e-04f,
+-2.467441336e-04f, -2.468157405e-04f, -2.468869151e-04f, -2.469576575e-04f, -2.470279674e-04f, -2.470978449e-04f, -2.471672898e-04f, -2.472363020e-04f, -2.473048815e-04f, -2.473730281e-04f,
+-2.474407418e-04f, -2.475080225e-04f, -2.475748701e-04f, -2.476412845e-04f, -2.477072657e-04f, -2.477728136e-04f, -2.478379280e-04f, -2.479026089e-04f, -2.479668563e-04f, -2.480306700e-04f,
+-2.480940500e-04f, -2.481569961e-04f, -2.482195084e-04f, -2.482815867e-04f, -2.483432310e-04f, -2.484044412e-04f, -2.484652172e-04f, -2.485255590e-04f, -2.485854665e-04f, -2.486449395e-04f,
+-2.487039781e-04f, -2.487625822e-04f, -2.488207516e-04f, -2.488784864e-04f, -2.489357865e-04f, -2.489926518e-04f, -2.490490822e-04f, -2.491050777e-04f, -2.491606381e-04f, -2.492157636e-04f,
+-2.492704539e-04f, -2.493247090e-04f, -2.493785289e-04f, -2.494319135e-04f, -2.494848628e-04f, -2.495373766e-04f, -2.495894550e-04f, -2.496410978e-04f, -2.496923051e-04f, -2.497430767e-04f,
+-2.497934126e-04f, -2.498433127e-04f, -2.498927771e-04f, -2.499418056e-04f, -2.499903981e-04f, -2.500385548e-04f, -2.500862754e-04f, -2.501335600e-04f, -2.501804084e-04f, -2.502268208e-04f,
+-2.502727969e-04f, -2.503183367e-04f, -2.503634403e-04f, -2.504081075e-04f, -2.504523384e-04f, -2.504961328e-04f, -2.505394908e-04f, -2.505824123e-04f, -2.506248972e-04f, -2.506669455e-04f,
+-2.507085572e-04f, -2.507497322e-04f, -2.507904705e-04f, -2.508307721e-04f, -2.508706369e-04f, -2.509100649e-04f, -2.509490561e-04f, -2.509876103e-04f, -2.510257277e-04f, -2.510634081e-04f,
+-2.511006515e-04f, -2.511374579e-04f, -2.511738273e-04f, -2.512097596e-04f, -2.512452548e-04f, -2.512803128e-04f, -2.513149337e-04f, -2.513491175e-04f, -2.513828640e-04f, -2.514161733e-04f,
+-2.514490453e-04f, -2.514814801e-04f, -2.515134775e-04f, -2.515450376e-04f, -2.515761604e-04f, -2.516068458e-04f, -2.516370939e-04f, -2.516669045e-04f, -2.516962777e-04f, -2.517252135e-04f,
+-2.517537118e-04f, -2.517817726e-04f, -2.518093959e-04f, -2.518365818e-04f, -2.518633301e-04f, -2.518896409e-04f, -2.519155142e-04f, -2.519409499e-04f, -2.519659480e-04f, -2.519905086e-04f,
+-2.520146315e-04f, -2.520383169e-04f, -2.520615647e-04f, -2.520843749e-04f, -2.521067475e-04f, -2.521286825e-04f, -2.521501798e-04f, -2.521712396e-04f, -2.521918616e-04f, -2.522120461e-04f,
+-2.522317929e-04f, -2.522511022e-04f, -2.522699737e-04f, -2.522884077e-04f, -2.523064040e-04f, -2.523239627e-04f, -2.523410837e-04f, -2.523577672e-04f, -2.523740130e-04f, -2.523898212e-04f,
+-2.524051918e-04f, -2.524201248e-04f, -2.524346203e-04f, -2.524486781e-04f, -2.524622984e-04f, -2.524754811e-04f, -2.524882263e-04f, -2.525005339e-04f, -2.525124040e-04f, -2.525238365e-04f,
+-2.525348316e-04f, -2.525453892e-04f, -2.525555093e-04f, -2.525651920e-04f, -2.525744372e-04f, -2.525832450e-04f, -2.525916154e-04f, -2.525995484e-04f, -2.526070440e-04f, -2.526141023e-04f,
+-2.526207233e-04f, -2.526269070e-04f, -2.526326534e-04f, -2.526379625e-04f, -2.526428344e-04f, -2.526472691e-04f, -2.526512666e-04f, -2.526548270e-04f, -2.526579502e-04f, -2.526606364e-04f,
+-2.526628854e-04f, -2.526646975e-04f, -2.526660725e-04f, -2.526670105e-04f, -2.526675116e-04f, -2.526675758e-04f, -2.526672031e-04f, -2.526663935e-04f, -2.526651472e-04f, -2.526634640e-04f,
+-2.526613441e-04f, -2.526587875e-04f, -2.526557943e-04f, -2.526523644e-04f, -2.526484979e-04f, -2.526441949e-04f, -2.526394554e-04f, -2.526342794e-04f, -2.526286669e-04f, -2.526226181e-04f,
+-2.526161330e-04f, -2.526092116e-04f, -2.526018539e-04f, -2.525940600e-04f, -2.525858300e-04f, -2.525771638e-04f, -2.525680616e-04f, -2.525585234e-04f, -2.525485493e-04f, -2.525381392e-04f,
+-2.525272933e-04f, -2.525160115e-04f, -2.525042940e-04f, -2.524921408e-04f, -2.524795520e-04f, -2.524665275e-04f, -2.524530676e-04f, -2.524391721e-04f, -2.524248413e-04f, -2.524100751e-04f,
+-2.523948735e-04f, -2.523792368e-04f, -2.523631648e-04f, -2.523466577e-04f, -2.523297156e-04f, -2.523123384e-04f, -2.522945264e-04f, -2.522762794e-04f, -2.522575977e-04f, -2.522384812e-04f,
+-2.522189300e-04f, -2.521989442e-04f, -2.521785239e-04f, -2.521576691e-04f, -2.521363800e-04f, -2.521146564e-04f, -2.520924987e-04f, -2.520699067e-04f, -2.520468806e-04f, -2.520234205e-04f,
+-2.519995264e-04f, -2.519751984e-04f, -2.519504366e-04f, -2.519252410e-04f, -2.518996118e-04f, -2.518735490e-04f, -2.518470526e-04f, -2.518201229e-04f, -2.517927597e-04f, -2.517649633e-04f,
+-2.517367338e-04f, -2.517080711e-04f, -2.516789753e-04f, -2.516494467e-04f, -2.516194851e-04f, -2.515890908e-04f, -2.515582638e-04f, -2.515270042e-04f, -2.514953121e-04f, -2.514631876e-04f,
+-2.514306307e-04f, -2.513976416e-04f, -2.513642203e-04f, -2.513303669e-04f, -2.512960816e-04f, -2.512613644e-04f, -2.512262153e-04f, -2.511906346e-04f, -2.511546223e-04f, -2.511181785e-04f,
+-2.510813032e-04f, -2.510439967e-04f, -2.510062589e-04f, -2.509680900e-04f, -2.509294901e-04f, -2.508904593e-04f, -2.508509976e-04f, -2.508111052e-04f, -2.507707822e-04f, -2.507300287e-04f,
+-2.506888448e-04f, -2.506472306e-04f, -2.506051861e-04f, -2.505627116e-04f, -2.505198071e-04f, -2.504764727e-04f, -2.504327085e-04f, -2.503885146e-04f, -2.503438912e-04f, -2.502988384e-04f,
+-2.502533562e-04f, -2.502074447e-04f, -2.501611042e-04f, -2.501143347e-04f, -2.500671362e-04f, -2.500195090e-04f, -2.499714532e-04f, -2.499229688e-04f, -2.498740559e-04f, -2.498247148e-04f,
+-2.497749455e-04f, -2.497247481e-04f, -2.496741228e-04f, -2.496230696e-04f, -2.495715887e-04f, -2.495196802e-04f, -2.494673443e-04f, -2.494145810e-04f, -2.493613905e-04f, -2.493077729e-04f,
+-2.492537283e-04f, -2.491992569e-04f, -2.491443588e-04f, -2.490890341e-04f, -2.490332829e-04f, -2.489771054e-04f, -2.489205017e-04f, -2.488634719e-04f, -2.488060162e-04f, -2.487481347e-04f,
+-2.486898275e-04f, -2.486310947e-04f, -2.485719366e-04f, -2.485123532e-04f, -2.484523446e-04f, -2.483919110e-04f, -2.483310526e-04f, -2.482697695e-04f, -2.482080617e-04f, -2.481459295e-04f,
+-2.480833730e-04f, -2.480203924e-04f, -2.479569877e-04f, -2.478931591e-04f, -2.478289068e-04f, -2.477642309e-04f, -2.476991315e-04f, -2.476336088e-04f, -2.475676630e-04f, -2.475012941e-04f,
+-2.474345024e-04f, -2.473672880e-04f, -2.472996509e-04f, -2.472315915e-04f, -2.471631098e-04f, -2.470942059e-04f, -2.470248801e-04f, -2.469551325e-04f, -2.468849632e-04f, -2.468143723e-04f,
+-2.467433602e-04f, -2.466719268e-04f, -2.466000724e-04f, -2.465277970e-04f, -2.464551010e-04f, -2.463819844e-04f, -2.463084473e-04f, -2.462344900e-04f, -2.461601126e-04f, -2.460853153e-04f,
+-2.460100981e-04f, -2.459344614e-04f, -2.458584052e-04f, -2.457819297e-04f, -2.457050351e-04f, -2.456277216e-04f, -2.455499892e-04f, -2.454718383e-04f, -2.453932688e-04f, -2.453142811e-04f,
+-2.452348753e-04f, -2.451550515e-04f, -2.450748099e-04f, -2.449941507e-04f, -2.449130741e-04f, -2.448315802e-04f, -2.447496692e-04f, -2.446673412e-04f, -2.445845966e-04f, -2.445014353e-04f,
+-2.444178577e-04f, -2.443338638e-04f, -2.442494539e-04f, -2.441646281e-04f, -2.440793867e-04f, -2.439937297e-04f, -2.439076574e-04f, -2.438211700e-04f, -2.437342676e-04f, -2.436469504e-04f,
+-2.435592186e-04f, -2.434710723e-04f, -2.433825119e-04f, -2.432935374e-04f, -2.432041490e-04f, -2.431143470e-04f, -2.430241315e-04f, -2.429335026e-04f, -2.428424607e-04f, -2.427510058e-04f,
+-2.426591382e-04f, -2.425668580e-04f, -2.424741655e-04f, -2.423810609e-04f, -2.422875442e-04f, -2.421936158e-04f, -2.420992758e-04f, -2.420045244e-04f, -2.419093618e-04f, -2.418137883e-04f,
+-2.417178039e-04f, -2.416214089e-04f, -2.415246035e-04f, -2.414273879e-04f, -2.413297623e-04f, -2.412317269e-04f, -2.411332819e-04f, -2.410344275e-04f, -2.409351639e-04f, -2.408354913e-04f,
+-2.407354099e-04f, -2.406349199e-04f, -2.405340215e-04f, -2.404327150e-04f, -2.403310004e-04f, -2.402288782e-04f, -2.401263483e-04f, -2.400234111e-04f, -2.399200668e-04f, -2.398163155e-04f,
+-2.397121575e-04f, -2.396075930e-04f, -2.395026222e-04f, -2.393972453e-04f, -2.392914626e-04f, -2.391852742e-04f, -2.390786803e-04f, -2.389716813e-04f, -2.388642772e-04f, -2.387564683e-04f,
+-2.386482548e-04f, -2.385396370e-04f, -2.384306151e-04f, -2.383211892e-04f, -2.382113596e-04f, -2.381011266e-04f, -2.379904903e-04f, -2.378794509e-04f, -2.377680088e-04f, -2.376561641e-04f,
+-2.375439169e-04f, -2.374312677e-04f, -2.373182165e-04f, -2.372047637e-04f, -2.370909094e-04f, -2.369766539e-04f, -2.368619973e-04f, -2.367469400e-04f, -2.366314821e-04f, -2.365156239e-04f,
+-2.363993657e-04f, -2.362827076e-04f, -2.361656498e-04f, -2.360481927e-04f, -2.359303364e-04f, -2.358120812e-04f, -2.356934273e-04f, -2.355743750e-04f, -2.354549244e-04f, -2.353350759e-04f,
+-2.352148296e-04f, -2.350941859e-04f, -2.349731449e-04f, -2.348517068e-04f, -2.347298720e-04f, -2.346076406e-04f, -2.344850130e-04f, -2.343619893e-04f, -2.342385698e-04f, -2.341147547e-04f,
+-2.339905443e-04f, -2.338659388e-04f, -2.337409384e-04f, -2.336155435e-04f, -2.334897543e-04f, -2.333635709e-04f, -2.332369938e-04f, -2.331100230e-04f, -2.329826588e-04f, -2.328549016e-04f,
+-2.327267516e-04f, -2.325982089e-04f, -2.324692739e-04f, -2.323399469e-04f, -2.322102279e-04f, -2.320801175e-04f, -2.319496157e-04f, -2.318187228e-04f, -2.316874391e-04f, -2.315557649e-04f,
+-2.314237003e-04f, -2.312912457e-04f, -2.311584014e-04f, -2.310251675e-04f, -2.308915444e-04f, -2.307575323e-04f, -2.306231314e-04f, -2.304883420e-04f, -2.303531645e-04f, -2.302175990e-04f,
+-2.300816458e-04f, -2.299453052e-04f, -2.298085774e-04f, -2.296714628e-04f, -2.295339615e-04f, -2.293960739e-04f, -2.292578002e-04f, -2.291191407e-04f, -2.289800956e-04f, -2.288406653e-04f,
+-2.287008499e-04f, -2.285606498e-04f, -2.284200653e-04f, -2.282790965e-04f, -2.281377439e-04f, -2.279960075e-04f, -2.278538879e-04f, -2.277113851e-04f, -2.275684995e-04f, -2.274252314e-04f,
+-2.272815810e-04f, -2.271375486e-04f, -2.269931345e-04f, -2.268483390e-04f, -2.267031623e-04f, -2.265576048e-04f, -2.264116666e-04f, -2.262653482e-04f, -2.261186497e-04f, -2.259715715e-04f,
+-2.258241139e-04f, -2.256762770e-04f, -2.255280613e-04f, -2.253794670e-04f, -2.252304943e-04f, -2.250811436e-04f, -2.249314152e-04f, -2.247813093e-04f, -2.246308262e-04f, -2.244799663e-04f,
+-2.243287298e-04f, -2.241771169e-04f, -2.240251281e-04f, -2.238727635e-04f, -2.237200236e-04f, -2.235669085e-04f, -2.234134185e-04f, -2.232595540e-04f, -2.231053153e-04f, -2.229507026e-04f,
+-2.227957162e-04f, -2.226403565e-04f, -2.224846237e-04f, -2.223285182e-04f, -2.221720402e-04f, -2.220151900e-04f, -2.218579679e-04f, -2.217003743e-04f, -2.215424094e-04f, -2.213840736e-04f,
+-2.212253671e-04f, -2.210662902e-04f, -2.209068433e-04f, -2.207470266e-04f, -2.205868405e-04f, -2.204262852e-04f, -2.202653611e-04f, -2.201040684e-04f, -2.199424076e-04f, -2.197803788e-04f,
+-2.196179824e-04f, -2.194552187e-04f, -2.192920881e-04f, -2.191285907e-04f, -2.189647270e-04f, -2.188004972e-04f, -2.186359017e-04f, -2.184709408e-04f, -2.183056147e-04f, -2.181399238e-04f,
+-2.179738685e-04f, -2.178074489e-04f, -2.176406656e-04f, -2.174735186e-04f, -2.173060085e-04f, -2.171381354e-04f, -2.169698998e-04f, -2.168013018e-04f, -2.166323420e-04f, -2.164630204e-04f,
+-2.162933376e-04f, -2.161232938e-04f, -2.159528894e-04f, -2.157821245e-04f, -2.156109997e-04f, -2.154395151e-04f, -2.152676712e-04f, -2.150954683e-04f, -2.149229066e-04f, -2.147499865e-04f,
+-2.145767083e-04f, -2.144030724e-04f, -2.142290791e-04f, -2.140547286e-04f, -2.138800215e-04f, -2.137049579e-04f, -2.135295381e-04f, -2.133537627e-04f, -2.131776317e-04f, -2.130011457e-04f,
+-2.128243049e-04f, -2.126471097e-04f, -2.124695603e-04f, -2.122916572e-04f, -2.121134006e-04f, -2.119347910e-04f, -2.117558285e-04f, -2.115765137e-04f, -2.113968467e-04f, -2.112168280e-04f,
+-2.110364578e-04f, -2.108557366e-04f, -2.106746647e-04f, -2.104932423e-04f, -2.103114699e-04f, -2.101293477e-04f, -2.099468762e-04f, -2.097640557e-04f, -2.095808865e-04f, -2.093973689e-04f,
+-2.092135033e-04f, -2.090292900e-04f, -2.088447295e-04f, -2.086598220e-04f, -2.084745678e-04f, -2.082889674e-04f, -2.081030210e-04f, -2.079167291e-04f, -2.077300919e-04f, -2.075431099e-04f,
+-2.073557833e-04f, -2.071681126e-04f, -2.069800980e-04f, -2.067917399e-04f, -2.066030388e-04f, -2.064139948e-04f, -2.062246084e-04f, -2.060348800e-04f, -2.058448098e-04f, -2.056543983e-04f,
+-2.054636458e-04f, -2.052725526e-04f, -2.050811192e-04f, -2.048893458e-04f, -2.046972328e-04f, -2.045047806e-04f, -2.043119896e-04f, -2.041188601e-04f, -2.039253924e-04f, -2.037315870e-04f,
+-2.035374441e-04f, -2.033429642e-04f, -2.031481476e-04f, -2.029529946e-04f, -2.027575057e-04f, -2.025616812e-04f, -2.023655215e-04f, -2.021690269e-04f, -2.019721977e-04f, -2.017750345e-04f,
+-2.015775374e-04f, -2.013797070e-04f, -2.011815435e-04f, -2.009830473e-04f, -2.007842189e-04f, -2.005850585e-04f, -2.003855665e-04f, -2.001857433e-04f, -1.999855894e-04f, -1.997851049e-04f,
+-1.995842904e-04f, -1.993831462e-04f, -1.991816726e-04f, -1.989798701e-04f, -1.987777390e-04f, -1.985752797e-04f, -1.983724926e-04f, -1.981693780e-04f, -1.979659363e-04f, -1.977621679e-04f,
+-1.975580732e-04f, -1.973536525e-04f, -1.971489063e-04f, -1.969438349e-04f, -1.967384386e-04f, -1.965327179e-04f, -1.963266732e-04f, -1.961203048e-04f, -1.959136131e-04f, -1.957065985e-04f,
+-1.954992614e-04f, -1.952916021e-04f, -1.950836211e-04f, -1.948753187e-04f, -1.946666953e-04f, -1.944577513e-04f, -1.942484871e-04f, -1.940389030e-04f, -1.938289995e-04f, -1.936187770e-04f,
+-1.934082358e-04f, -1.931973763e-04f, -1.929861989e-04f, -1.927747041e-04f, -1.925628921e-04f, -1.923507634e-04f, -1.921383183e-04f, -1.919255574e-04f, -1.917124808e-04f, -1.914990892e-04f,
+-1.912853827e-04f, -1.910713619e-04f, -1.908570272e-04f, -1.906423788e-04f, -1.904274173e-04f, -1.902121430e-04f, -1.899965563e-04f, -1.897806576e-04f, -1.895644473e-04f, -1.893479258e-04f,
+-1.891310936e-04f, -1.889139509e-04f, -1.886964982e-04f, -1.884787359e-04f, -1.882606644e-04f, -1.880422842e-04f, -1.878235955e-04f, -1.876045988e-04f, -1.873852945e-04f, -1.871656831e-04f,
+-1.869457648e-04f, -1.867255402e-04f, -1.865050096e-04f, -1.862841734e-04f, -1.860630320e-04f, -1.858415859e-04f, -1.856198354e-04f, -1.853977810e-04f, -1.851754231e-04f, -1.849527619e-04f,
+-1.847297981e-04f, -1.845065320e-04f, -1.842829639e-04f, -1.840590944e-04f, -1.838349237e-04f, -1.836104524e-04f, -1.833856808e-04f, -1.831606094e-04f, -1.829352385e-04f, -1.827095686e-04f,
+-1.824836000e-04f, -1.822573333e-04f, -1.820307688e-04f, -1.818039069e-04f, -1.815767480e-04f, -1.813492927e-04f, -1.811215411e-04f, -1.808934939e-04f, -1.806651514e-04f, -1.804365140e-04f,
+-1.802075821e-04f, -1.799783562e-04f, -1.797488367e-04f, -1.795190240e-04f, -1.792889185e-04f, -1.790585206e-04f, -1.788278308e-04f, -1.785968495e-04f, -1.783655771e-04f, -1.781340140e-04f,
+-1.779021607e-04f, -1.776700175e-04f, -1.774375850e-04f, -1.772048634e-04f, -1.769718533e-04f, -1.767385551e-04f, -1.765049691e-04f, -1.762710959e-04f, -1.760369359e-04f, -1.758024894e-04f,
+-1.755677569e-04f, -1.753327388e-04f, -1.750974356e-04f, -1.748618477e-04f, -1.746259755e-04f, -1.743898195e-04f, -1.741533800e-04f, -1.739166575e-04f, -1.736796525e-04f, -1.734423654e-04f,
+-1.732047965e-04f, -1.729669464e-04f, -1.727288154e-04f, -1.724904041e-04f, -1.722517128e-04f, -1.720127419e-04f, -1.717734920e-04f, -1.715339634e-04f, -1.712941566e-04f, -1.710540720e-04f,
+-1.708137100e-04f, -1.705730711e-04f, -1.703321557e-04f, -1.700909643e-04f, -1.698494973e-04f, -1.696077552e-04f, -1.693657383e-04f, -1.691234471e-04f, -1.688808821e-04f, -1.686380437e-04f,
+-1.683949323e-04f, -1.681515484e-04f, -1.679078924e-04f, -1.676639648e-04f, -1.674197659e-04f, -1.671752964e-04f, -1.669305565e-04f, -1.666855467e-04f, -1.664402676e-04f, -1.661947194e-04f,
+-1.659489028e-04f, -1.657028180e-04f, -1.654564656e-04f, -1.652098461e-04f, -1.649629597e-04f, -1.647158071e-04f, -1.644683887e-04f, -1.642207048e-04f, -1.639727560e-04f, -1.637245427e-04f,
+-1.634760653e-04f, -1.632273243e-04f, -1.629783202e-04f, -1.627290534e-04f, -1.624795243e-04f, -1.622297334e-04f, -1.619796812e-04f, -1.617293681e-04f, -1.614787945e-04f, -1.612279610e-04f,
+-1.609768679e-04f, -1.607255157e-04f, -1.604739049e-04f, -1.602220360e-04f, -1.599699093e-04f, -1.597175254e-04f, -1.594648847e-04f, -1.592119876e-04f, -1.589588346e-04f, -1.587054262e-04f,
+-1.584517629e-04f, -1.581978450e-04f, -1.579436731e-04f, -1.576892475e-04f, -1.574345688e-04f, -1.571796375e-04f, -1.569244539e-04f, -1.566690186e-04f, -1.564133320e-04f, -1.561573945e-04f,
+-1.559012067e-04f, -1.556447689e-04f, -1.553880818e-04f, -1.551311456e-04f, -1.548739609e-04f, -1.546165281e-04f, -1.543588478e-04f, -1.541009203e-04f, -1.538427462e-04f, -1.535843259e-04f,
+-1.533256598e-04f, -1.530667485e-04f, -1.528075923e-04f, -1.525481919e-04f, -1.522885476e-04f, -1.520286598e-04f, -1.517685292e-04f, -1.515081561e-04f, -1.512475410e-04f, -1.509866844e-04f,
+-1.507255867e-04f, -1.504642484e-04f, -1.502026701e-04f, -1.499408520e-04f, -1.496787949e-04f, -1.494164990e-04f, -1.491539649e-04f, -1.488911930e-04f, -1.486281839e-04f, -1.483649379e-04f,
+-1.481014557e-04f, -1.478377375e-04f, -1.475737840e-04f, -1.473095955e-04f, -1.470451727e-04f, -1.467805158e-04f, -1.465156255e-04f, -1.462505022e-04f, -1.459851463e-04f, -1.457195584e-04f,
+-1.454537389e-04f, -1.451876883e-04f, -1.449214070e-04f, -1.446548957e-04f, -1.443881546e-04f, -1.441211844e-04f, -1.438539854e-04f, -1.435865583e-04f, -1.433189033e-04f, -1.430510211e-04f,
+-1.427829122e-04f, -1.425145769e-04f, -1.422460158e-04f, -1.419772293e-04f, -1.417082180e-04f, -1.414389823e-04f, -1.411695227e-04f, -1.408998397e-04f, -1.406299338e-04f, -1.403598054e-04f,
+-1.400894551e-04f, -1.398188832e-04f, -1.395480904e-04f, -1.392770771e-04f, -1.390058438e-04f, -1.387343909e-04f, -1.384627190e-04f, -1.381908285e-04f, -1.379187199e-04f, -1.376463938e-04f,
+-1.373738506e-04f, -1.371010907e-04f, -1.368281147e-04f, -1.365549231e-04f, -1.362815163e-04f, -1.360078949e-04f, -1.357340593e-04f, -1.354600101e-04f, -1.351857476e-04f, -1.349112725e-04f,
+-1.346365852e-04f, -1.343616861e-04f, -1.340865758e-04f, -1.338112548e-04f, -1.335357236e-04f, -1.332599826e-04f, -1.329840323e-04f, -1.327078733e-04f, -1.324315061e-04f, -1.321549310e-04f,
+-1.318781487e-04f, -1.316011596e-04f, -1.313239643e-04f, -1.310465631e-04f, -1.307689566e-04f, -1.304911454e-04f, -1.302131298e-04f, -1.299349104e-04f, -1.296564878e-04f, -1.293778623e-04f,
+-1.290990344e-04f, -1.288200048e-04f, -1.285407739e-04f, -1.282613421e-04f, -1.279817100e-04f, -1.277018781e-04f, -1.274218468e-04f, -1.271416168e-04f, -1.268611884e-04f, -1.265805622e-04f,
+-1.262997386e-04f, -1.260187183e-04f, -1.257375016e-04f, -1.254560891e-04f, -1.251744813e-04f, -1.248926786e-04f, -1.246106817e-04f, -1.243284909e-04f, -1.240461068e-04f, -1.237635299e-04f,
+-1.234807608e-04f, -1.231977998e-04f, -1.229146475e-04f, -1.226313044e-04f, -1.223477711e-04f, -1.220640480e-04f, -1.217801355e-04f, -1.214960344e-04f, -1.212117449e-04f, -1.209272677e-04f,
+-1.206426033e-04f, -1.203577521e-04f, -1.200727147e-04f, -1.197874915e-04f, -1.195020831e-04f, -1.192164900e-04f, -1.189307127e-04f, -1.186447517e-04f, -1.183586076e-04f, -1.180722807e-04f,
+-1.177857717e-04f, -1.174990810e-04f, -1.172122091e-04f, -1.169251566e-04f, -1.166379240e-04f, -1.163505117e-04f, -1.160629204e-04f, -1.157751504e-04f, -1.154872024e-04f, -1.151990768e-04f,
+-1.149107741e-04f, -1.146222949e-04f, -1.143336396e-04f, -1.140448088e-04f, -1.137558030e-04f, -1.134666227e-04f, -1.131772684e-04f, -1.128877406e-04f, -1.125980399e-04f, -1.123081667e-04f,
+-1.120181216e-04f, -1.117279051e-04f, -1.114375177e-04f, -1.111469599e-04f, -1.108562322e-04f, -1.105653352e-04f, -1.102742694e-04f, -1.099830352e-04f, -1.096916332e-04f, -1.094000639e-04f,
+-1.091083279e-04f, -1.088164256e-04f, -1.085243576e-04f, -1.082321243e-04f, -1.079397264e-04f, -1.076471643e-04f, -1.073544385e-04f, -1.070615496e-04f, -1.067684980e-04f, -1.064752844e-04f,
+-1.061819092e-04f, -1.058883729e-04f, -1.055946760e-04f, -1.053008191e-04f, -1.050068028e-04f, -1.047126274e-04f, -1.044182936e-04f, -1.041238018e-04f, -1.038291527e-04f, -1.035343466e-04f,
+-1.032393841e-04f, -1.029442658e-04f, -1.026489922e-04f, -1.023535637e-04f, -1.020579810e-04f, -1.017622445e-04f, -1.014663548e-04f, -1.011703123e-04f, -1.008741177e-04f, -1.005777713e-04f,
+-1.002812739e-04f, -9.998462580e-05f, -9.968782762e-05f, -9.939087988e-05f, -9.909378309e-05f, -9.879653778e-05f, -9.849914448e-05f, -9.820160371e-05f, -9.790391599e-05f, -9.760608186e-05f,
+-9.730810184e-05f, -9.700997645e-05f, -9.671170623e-05f, -9.641329169e-05f, -9.611473338e-05f, -9.581603180e-05f, -9.551718751e-05f, -9.521820101e-05f, -9.491907284e-05f, -9.461980352e-05f,
+-9.432039359e-05f, -9.402084357e-05f, -9.372115400e-05f, -9.342132540e-05f, -9.312135830e-05f, -9.282125322e-05f, -9.252101071e-05f, -9.222063129e-05f, -9.192011548e-05f, -9.161946383e-05f,
+-9.131867686e-05f, -9.101775509e-05f, -9.071669907e-05f, -9.041550932e-05f, -9.011418638e-05f, -8.981273077e-05f, -8.951114302e-05f, -8.920942368e-05f, -8.890757327e-05f, -8.860559231e-05f,
+-8.830348136e-05f, -8.800124093e-05f, -8.769887156e-05f, -8.739637378e-05f, -8.709374813e-05f, -8.679099514e-05f, -8.648811534e-05f, -8.618510927e-05f, -8.588197746e-05f, -8.557872044e-05f,
+-8.527533875e-05f, -8.497183292e-05f, -8.466820349e-05f, -8.436445099e-05f, -8.406057595e-05f, -8.375657892e-05f, -8.345246042e-05f, -8.314822100e-05f, -8.284386118e-05f, -8.253938151e-05f,
+-8.223478251e-05f, -8.193006473e-05f, -8.162522870e-05f, -8.132027495e-05f, -8.101520403e-05f, -8.071001647e-05f, -8.040471281e-05f, -8.009929358e-05f, -7.979375932e-05f, -7.948811057e-05f,
+-7.918234786e-05f, -7.887647174e-05f, -7.857048274e-05f, -7.826438140e-05f, -7.795816826e-05f, -7.765184385e-05f, -7.734540871e-05f, -7.703886339e-05f, -7.673220841e-05f, -7.642544433e-05f,
+-7.611857168e-05f, -7.581159099e-05f, -7.550450281e-05f, -7.519730767e-05f, -7.489000612e-05f, -7.458259870e-05f, -7.427508594e-05f, -7.396746839e-05f, -7.365974658e-05f, -7.335192105e-05f,
+-7.304399236e-05f, -7.273596102e-05f, -7.242782760e-05f, -7.211959262e-05f, -7.181125663e-05f, -7.150282018e-05f, -7.119428379e-05f, -7.088564801e-05f, -7.057691339e-05f, -7.026808046e-05f,
+-6.995914977e-05f, -6.965012186e-05f, -6.934099727e-05f, -6.903177654e-05f, -6.872246021e-05f, -6.841304884e-05f, -6.810354295e-05f, -6.779394310e-05f, -6.748424982e-05f, -6.717446365e-05f,
+-6.686458515e-05f, -6.655461485e-05f, -6.624455330e-05f, -6.593440104e-05f, -6.562415861e-05f, -6.531382656e-05f, -6.500340543e-05f, -6.469289576e-05f, -6.438229810e-05f, -6.407161300e-05f,
+-6.376084099e-05f, -6.344998262e-05f, -6.313903843e-05f, -6.282800898e-05f, -6.251689479e-05f, -6.220569643e-05f, -6.189441443e-05f, -6.158304933e-05f, -6.127160169e-05f, -6.096007205e-05f,
+-6.064846095e-05f, -6.033676893e-05f, -6.002499655e-05f, -5.971314435e-05f, -5.940121287e-05f, -5.908920266e-05f, -5.877711427e-05f, -5.846494824e-05f, -5.815270511e-05f, -5.784038544e-05f,
+-5.752798977e-05f, -5.721551864e-05f, -5.690297260e-05f, -5.659035220e-05f, -5.627765799e-05f, -5.596489050e-05f, -5.565205029e-05f, -5.533913791e-05f, -5.502615390e-05f, -5.471309880e-05f,
+-5.439997317e-05f, -5.408677755e-05f, -5.377351249e-05f, -5.346017853e-05f, -5.314677623e-05f, -5.283330612e-05f, -5.251976876e-05f, -5.220616470e-05f, -5.189249448e-05f, -5.157875865e-05f,
+-5.126495776e-05f, -5.095109235e-05f, -5.063716298e-05f, -5.032317019e-05f, -5.000911452e-05f, -4.969499654e-05f, -4.938081677e-05f, -4.906657579e-05f, -4.875227412e-05f, -4.843791232e-05f,
+-4.812349094e-05f, -4.780901053e-05f, -4.749447163e-05f, -4.717987479e-05f, -4.686522057e-05f, -4.655050950e-05f, -4.623574215e-05f, -4.592091905e-05f, -4.560604076e-05f, -4.529110783e-05f,
+-4.497612080e-05f, -4.466108022e-05f, -4.434598664e-05f, -4.403084062e-05f, -4.371564270e-05f, -4.340039342e-05f, -4.308509335e-05f, -4.276974302e-05f, -4.245434299e-05f, -4.213889381e-05f,
+-4.182339602e-05f, -4.150785018e-05f, -4.119225683e-05f, -4.087661653e-05f, -4.056092982e-05f, -4.024519726e-05f, -3.992941938e-05f, -3.961359675e-05f, -3.929772991e-05f, -3.898181942e-05f,
+-3.866586581e-05f, -3.834986965e-05f, -3.803383148e-05f, -3.771775185e-05f, -3.740163131e-05f, -3.708547041e-05f, -3.676926970e-05f, -3.645302974e-05f, -3.613675106e-05f, -3.582043422e-05f,
+-3.550407978e-05f, -3.518768827e-05f, -3.487126026e-05f, -3.455479629e-05f, -3.423829691e-05f, -3.392176266e-05f, -3.360519412e-05f, -3.328859181e-05f, -3.297195629e-05f, -3.265528812e-05f,
+-3.233858783e-05f, -3.202185599e-05f, -3.170509314e-05f, -3.138829984e-05f, -3.107147663e-05f, -3.075462406e-05f, -3.043774268e-05f, -3.012083305e-05f, -2.980389571e-05f, -2.948693121e-05f,
+-2.916994011e-05f, -2.885292296e-05f, -2.853588030e-05f, -2.821881269e-05f, -2.790172067e-05f, -2.758460480e-05f, -2.726746562e-05f, -2.695030369e-05f, -2.663311956e-05f, -2.631591377e-05f,
+-2.599868688e-05f, -2.568143944e-05f, -2.536417200e-05f, -2.504688511e-05f, -2.472957931e-05f, -2.441225517e-05f, -2.409491322e-05f, -2.377755402e-05f, -2.346017813e-05f, -2.314278608e-05f,
+-2.282537843e-05f, -2.250795573e-05f, -2.219051853e-05f, -2.187306739e-05f, -2.155560284e-05f, -2.123812544e-05f, -2.092063575e-05f, -2.060313430e-05f, -2.028562166e-05f, -1.996809836e-05f,
+-1.965056497e-05f, -1.933302203e-05f, -1.901547009e-05f, -1.869790970e-05f, -1.838034141e-05f, -1.806276577e-05f, -1.774518333e-05f, -1.742759464e-05f, -1.711000025e-05f, -1.679240070e-05f,
+-1.647479656e-05f, -1.615718837e-05f, -1.583957668e-05f, -1.552196203e-05f, -1.520434498e-05f, -1.488672608e-05f, -1.456910587e-05f, -1.425148492e-05f, -1.393386375e-05f, -1.361624293e-05f,
+-1.329862301e-05f, -1.298100453e-05f, -1.266338804e-05f, -1.234577409e-05f, -1.202816324e-05f, -1.171055602e-05f, -1.139295299e-05f, -1.107535470e-05f, -1.075776170e-05f, -1.044017454e-05f,
+-1.012259375e-05f, -9.805019906e-06f, -9.487453540e-06f, -9.169895205e-06f, -8.852345449e-06f, -8.534804822e-06f, -8.217273870e-06f, -7.899753144e-06f, -7.582243191e-06f, -7.264744560e-06f,
+-6.947257799e-06f, -6.629783455e-06f, -6.312322078e-06f, -5.994874216e-06f, -5.677440415e-06f, -5.360021225e-06f, -5.042617193e-06f, -4.725228866e-06f, -4.407856794e-06f, -4.090501522e-06f,
+-3.773163600e-06f, -3.455843574e-06f, -3.138541991e-06f, -2.821259400e-06f, -2.503996348e-06f, -2.186753381e-06f, -1.869531047e-06f, -1.552329893e-06f, -1.235150465e-06f, -9.179933119e-07f,
+-6.008589791e-07f, -2.837480136e-07f, 3.333903788e-08f, 3.504016287e-07f, 6.674392125e-07f, 9.844512428e-07f, 1.301437173e-06f, 1.618396458e-06f, 1.935328550e-06f, 2.252232904e-06f,
+2.569108974e-06f, 2.885956213e-06f, 3.202774077e-06f, 3.519562019e-06f, 3.836319494e-06f, 4.153045956e-06f, 4.469740861e-06f, 4.786403662e-06f, 5.103033814e-06f, 5.419630772e-06f,
+5.736193992e-06f, 6.052722929e-06f, 6.369217036e-06f, 6.685675771e-06f, 7.002098588e-06f, 7.318484942e-06f, 7.634834290e-06f, 7.951146087e-06f, 8.267419789e-06f, 8.583654851e-06f,
+8.899850731e-06f, 9.216006883e-06f, 9.532122764e-06f, 9.848197831e-06f, 1.016423154e-05f, 1.048022335e-05f, 1.079617271e-05f, 1.111207909e-05f, 1.142794193e-05f, 1.174376070e-05f,
+1.205953485e-05f, 1.237526385e-05f, 1.269094714e-05f, 1.300658419e-05f, 1.332217445e-05f, 1.363771738e-05f, 1.395321244e-05f, 1.426865909e-05f, 1.458405678e-05f, 1.489940498e-05f,
+1.521470313e-05f, 1.552995071e-05f, 1.584514717e-05f, 1.616029196e-05f, 1.647538455e-05f, 1.679042440e-05f, 1.710541096e-05f, 1.742034369e-05f, 1.773522206e-05f, 1.805004553e-05f,
+1.836481354e-05f, 1.867952557e-05f, 1.899418107e-05f, 1.930877950e-05f, 1.962332033e-05f, 1.993780301e-05f, 2.025222700e-05f, 2.056659177e-05f, 2.088089677e-05f, 2.119514148e-05f,
+2.150932533e-05f, 2.182344781e-05f, 2.213750837e-05f, 2.245150647e-05f, 2.276544158e-05f, 2.307931315e-05f, 2.339312065e-05f, 2.370686353e-05f, 2.402054127e-05f, 2.433415333e-05f,
+2.464769916e-05f, 2.496117824e-05f, 2.527459001e-05f, 2.558793396e-05f, 2.590120953e-05f, 2.621441619e-05f, 2.652755342e-05f, 2.684062066e-05f, 2.715361739e-05f, 2.746654306e-05f,
+2.777939715e-05f, 2.809217911e-05f, 2.840488842e-05f, 2.871752453e-05f, 2.903008692e-05f, 2.934257504e-05f, 2.965498836e-05f, 2.996732635e-05f, 3.027958848e-05f, 3.059177420e-05f,
+3.090388298e-05f, 3.121591430e-05f, 3.152786761e-05f, 3.183974239e-05f, 3.215153809e-05f, 3.246325420e-05f, 3.277489016e-05f, 3.308644546e-05f, 3.339791956e-05f, 3.370931192e-05f,
+3.402062201e-05f, 3.433184931e-05f, 3.464299328e-05f, 3.495405338e-05f, 3.526502909e-05f, 3.557591988e-05f, 3.588672521e-05f, 3.619744455e-05f, 3.650807737e-05f, 3.681862315e-05f,
+3.712908135e-05f, 3.743945143e-05f, 3.774973288e-05f, 3.805992516e-05f, 3.837002774e-05f, 3.868004010e-05f, 3.898996169e-05f, 3.929979200e-05f, 3.960953049e-05f, 3.991917664e-05f,
+4.022872992e-05f, 4.053818980e-05f, 4.084755575e-05f, 4.115682724e-05f, 4.146600375e-05f, 4.177508475e-05f, 4.208406971e-05f, 4.239295810e-05f, 4.270174940e-05f, 4.301044308e-05f,
+4.331903862e-05f, 4.362753549e-05f, 4.393593315e-05f, 4.424423110e-05f, 4.455242879e-05f, 4.486052571e-05f, 4.516852134e-05f, 4.547641513e-05f, 4.578420658e-05f, 4.609189516e-05f,
+4.639948034e-05f, 4.670696159e-05f, 4.701433841e-05f, 4.732161025e-05f, 4.762877660e-05f, 4.793583693e-05f, 4.824279073e-05f, 4.854963747e-05f, 4.885637662e-05f, 4.916300767e-05f,
+4.946953008e-05f, 4.977594335e-05f, 5.008224695e-05f, 5.038844036e-05f, 5.069452305e-05f, 5.100049451e-05f, 5.130635421e-05f, 5.161210164e-05f, 5.191773628e-05f, 5.222325759e-05f,
+5.252866508e-05f, 5.283395820e-05f, 5.313913646e-05f, 5.344419932e-05f, 5.374914627e-05f, 5.405397679e-05f, 5.435869036e-05f, 5.466328647e-05f, 5.496776459e-05f, 5.527212421e-05f,
+5.557636481e-05f, 5.588048588e-05f, 5.618448689e-05f, 5.648836733e-05f, 5.679212669e-05f, 5.709576445e-05f, 5.739928009e-05f, 5.770267310e-05f, 5.800594296e-05f, 5.830908915e-05f,
+5.861211117e-05f, 5.891500850e-05f, 5.921778062e-05f, 5.952042702e-05f, 5.982294718e-05f, 6.012534060e-05f, 6.042760675e-05f, 6.072974513e-05f, 6.103175523e-05f, 6.133363652e-05f,
+6.163538851e-05f, 6.193701067e-05f, 6.223850249e-05f, 6.253986347e-05f, 6.284109309e-05f, 6.314219084e-05f, 6.344315621e-05f, 6.374398870e-05f, 6.404468778e-05f, 6.434525296e-05f,
+6.464568371e-05f, 6.494597954e-05f, 6.524613993e-05f, 6.554616438e-05f, 6.584605237e-05f, 6.614580339e-05f, 6.644541695e-05f, 6.674489253e-05f, 6.704422963e-05f, 6.734342773e-05f,
+6.764248633e-05f, 6.794140493e-05f, 6.824018302e-05f, 6.853882008e-05f, 6.883731563e-05f, 6.913566915e-05f, 6.943388013e-05f, 6.973194807e-05f, 7.002987247e-05f, 7.032765283e-05f,
+7.062528863e-05f, 7.092277938e-05f, 7.122012457e-05f, 7.151732370e-05f, 7.181437626e-05f, 7.211128176e-05f, 7.240803969e-05f, 7.270464955e-05f, 7.300111084e-05f, 7.329742305e-05f,
+7.359358569e-05f, 7.388959825e-05f, 7.418546024e-05f, 7.448117115e-05f, 7.477673049e-05f, 7.507213775e-05f, 7.536739244e-05f, 7.566249406e-05f, 7.595744210e-05f, 7.625223607e-05f,
+7.654687548e-05f, 7.684135982e-05f, 7.713568860e-05f, 7.742986131e-05f, 7.772387748e-05f, 7.801773658e-05f, 7.831143814e-05f, 7.860498165e-05f, 7.889836662e-05f, 7.919159256e-05f,
+7.948465897e-05f, 7.977756535e-05f, 8.007031121e-05f, 8.036289605e-05f, 8.065531939e-05f, 8.094758073e-05f, 8.123967957e-05f, 8.153161543e-05f, 8.182338781e-05f, 8.211499622e-05f,
+8.240644017e-05f, 8.269771916e-05f, 8.298883271e-05f, 8.327978032e-05f, 8.357056151e-05f, 8.386117578e-05f, 8.415162265e-05f, 8.444190162e-05f, 8.473201220e-05f, 8.502195391e-05f,
+8.531172626e-05f, 8.560132876e-05f, 8.589076093e-05f, 8.618002227e-05f, 8.646911229e-05f, 8.675803052e-05f, 8.704677646e-05f, 8.733534963e-05f, 8.762374954e-05f, 8.791197571e-05f,
+8.820002766e-05f, 8.848790489e-05f, 8.877560692e-05f, 8.906313327e-05f, 8.935048346e-05f, 8.963765699e-05f, 8.992465340e-05f, 9.021147219e-05f, 9.049811289e-05f, 9.078457501e-05f,
+9.107085807e-05f, 9.135696158e-05f, 9.164288508e-05f, 9.192862807e-05f, 9.221419007e-05f, 9.249957062e-05f, 9.278476922e-05f, 9.306978540e-05f, 9.335461867e-05f, 9.363926857e-05f,
+9.392373461e-05f, 9.420801632e-05f, 9.449211321e-05f, 9.477602481e-05f, 9.505975064e-05f, 9.534329023e-05f, 9.562664310e-05f, 9.590980878e-05f, 9.619278678e-05f, 9.647557665e-05f,
+9.675817789e-05f, 9.704059003e-05f, 9.732281261e-05f, 9.760484515e-05f, 9.788668717e-05f, 9.816833820e-05f, 9.844979778e-05f, 9.873106542e-05f, 9.901214066e-05f, 9.929302302e-05f,
+9.957371204e-05f, 9.985420724e-05f, 1.001345082e-04f, 1.004146143e-04f, 1.006945252e-04f, 1.009742405e-04f, 1.012537596e-04f, 1.015330820e-04f, 1.018122073e-04f, 1.020911351e-04f,
+1.023698649e-04f, 1.026483961e-04f, 1.029267284e-04f, 1.032048612e-04f, 1.034827941e-04f, 1.037605267e-04f, 1.040380585e-04f, 1.043153889e-04f, 1.045925176e-04f, 1.048694441e-04f,
+1.051461678e-04f, 1.054226885e-04f, 1.056990055e-04f, 1.059751185e-04f, 1.062510269e-04f, 1.065267303e-04f, 1.068022282e-04f, 1.070775203e-04f, 1.073526060e-04f, 1.076274848e-04f,
+1.079021563e-04f, 1.081766201e-04f, 1.084508756e-04f, 1.087249225e-04f, 1.089987603e-04f, 1.092723884e-04f, 1.095458065e-04f, 1.098190141e-04f, 1.100920108e-04f, 1.103647960e-04f,
+1.106373694e-04f, 1.109097304e-04f, 1.111818787e-04f, 1.114538137e-04f, 1.117255351e-04f, 1.119970423e-04f, 1.122683349e-04f, 1.125394124e-04f, 1.128102745e-04f, 1.130809205e-04f,
+1.133513502e-04f, 1.136215631e-04f, 1.138915586e-04f, 1.141613364e-04f, 1.144308960e-04f, 1.147002369e-04f, 1.149693587e-04f, 1.152382610e-04f, 1.155069432e-04f, 1.157754051e-04f,
+1.160436460e-04f, 1.163116656e-04f, 1.165794634e-04f, 1.168470389e-04f, 1.171143918e-04f, 1.173815215e-04f, 1.176484277e-04f, 1.179151099e-04f, 1.181815676e-04f, 1.184478004e-04f,
+1.187138079e-04f, 1.189795895e-04f, 1.192451450e-04f, 1.195104737e-04f, 1.197755754e-04f, 1.200404495e-04f, 1.203050956e-04f, 1.205695133e-04f, 1.208337021e-04f, 1.210976615e-04f,
+1.213613913e-04f, 1.216248908e-04f, 1.218881597e-04f, 1.221511976e-04f, 1.224140039e-04f, 1.226765783e-04f, 1.229389203e-04f, 1.232010295e-04f, 1.234629055e-04f, 1.237245477e-04f,
+1.239859559e-04f, 1.242471295e-04f, 1.245080681e-04f, 1.247687713e-04f, 1.250292387e-04f, 1.252894697e-04f, 1.255494641e-04f, 1.258092213e-04f, 1.260687409e-04f, 1.263280225e-04f,
+1.265870657e-04f, 1.268458700e-04f, 1.271044350e-04f, 1.273627603e-04f, 1.276208455e-04f, 1.278786900e-04f, 1.281362936e-04f, 1.283936557e-04f, 1.286507759e-04f, 1.289076539e-04f,
+1.291642891e-04f, 1.294206812e-04f, 1.296768297e-04f, 1.299327343e-04f, 1.301883944e-04f, 1.304438097e-04f, 1.306989797e-04f, 1.309539041e-04f, 1.312085824e-04f, 1.314630141e-04f,
+1.317171989e-04f, 1.319711363e-04f, 1.322248259e-04f, 1.324782674e-04f, 1.327314602e-04f, 1.329844039e-04f, 1.332370982e-04f, 1.334895426e-04f, 1.337417367e-04f, 1.339936802e-04f,
+1.342453724e-04f, 1.344968132e-04f, 1.347480019e-04f, 1.349989383e-04f, 1.352496219e-04f, 1.355000523e-04f, 1.357502291e-04f, 1.360001518e-04f, 1.362498201e-04f, 1.364992336e-04f,
+1.367483917e-04f, 1.369972942e-04f, 1.372459406e-04f, 1.374943305e-04f, 1.377424635e-04f, 1.379903392e-04f, 1.382379571e-04f, 1.384853169e-04f, 1.387324182e-04f, 1.389792605e-04f,
+1.392258434e-04f, 1.394721666e-04f, 1.397182296e-04f, 1.399640320e-04f, 1.402095735e-04f, 1.404548535e-04f, 1.406998718e-04f, 1.409446279e-04f, 1.411891214e-04f, 1.414333518e-04f,
+1.416773189e-04f, 1.419210222e-04f, 1.421644612e-04f, 1.424076357e-04f, 1.426505451e-04f, 1.428931892e-04f, 1.431355674e-04f, 1.433776795e-04f, 1.436195249e-04f, 1.438611033e-04f,
+1.441024144e-04f, 1.443434576e-04f, 1.445842327e-04f, 1.448247391e-04f, 1.450649766e-04f, 1.453049447e-04f, 1.455446431e-04f, 1.457840713e-04f, 1.460232289e-04f, 1.462621156e-04f,
+1.465007309e-04f, 1.467390745e-04f, 1.469771460e-04f, 1.472149449e-04f, 1.474524710e-04f, 1.476897237e-04f, 1.479267028e-04f, 1.481634078e-04f, 1.483998383e-04f, 1.486359940e-04f,
+1.488718745e-04f, 1.491074793e-04f, 1.493428081e-04f, 1.495778605e-04f, 1.498126362e-04f, 1.500471346e-04f, 1.502813556e-04f, 1.505152986e-04f, 1.507489632e-04f, 1.509823492e-04f,
+1.512154561e-04f, 1.514482835e-04f, 1.516808311e-04f, 1.519130985e-04f, 1.521450853e-04f, 1.523767910e-04f, 1.526082154e-04f, 1.528393581e-04f, 1.530702187e-04f, 1.533007967e-04f,
+1.535310919e-04f, 1.537611038e-04f, 1.539908321e-04f, 1.542202764e-04f, 1.544494364e-04f, 1.546783115e-04f, 1.549069016e-04f, 1.551352061e-04f, 1.553632248e-04f, 1.555909572e-04f,
+1.558184030e-04f, 1.560455619e-04f, 1.562724334e-04f, 1.564990171e-04f, 1.567253127e-04f, 1.569513199e-04f, 1.571770383e-04f, 1.574024674e-04f, 1.576276070e-04f, 1.578524566e-04f,
+1.580770160e-04f, 1.583012846e-04f, 1.585252622e-04f, 1.587489485e-04f, 1.589723429e-04f, 1.591954453e-04f, 1.594182551e-04f, 1.596407721e-04f, 1.598629958e-04f, 1.600849260e-04f,
+1.603065623e-04f, 1.605279042e-04f, 1.607489515e-04f, 1.609697038e-04f, 1.611901606e-04f, 1.614103218e-04f, 1.616301868e-04f, 1.618497554e-04f, 1.620690272e-04f, 1.622880018e-04f,
+1.625066789e-04f, 1.627250582e-04f, 1.629431392e-04f, 1.631609216e-04f, 1.633784050e-04f, 1.635955892e-04f, 1.638124737e-04f, 1.640290582e-04f, 1.642453424e-04f, 1.644613259e-04f,
+1.646770083e-04f, 1.648923893e-04f, 1.651074686e-04f, 1.653222458e-04f, 1.655367205e-04f, 1.657508925e-04f, 1.659647613e-04f, 1.661783266e-04f, 1.663915881e-04f, 1.666045454e-04f,
+1.668171981e-04f, 1.670295461e-04f, 1.672415888e-04f, 1.674533259e-04f, 1.676647571e-04f, 1.678758822e-04f, 1.680867006e-04f, 1.682972121e-04f, 1.685074163e-04f, 1.687173130e-04f,
+1.689269017e-04f, 1.691361821e-04f, 1.693451539e-04f, 1.695538167e-04f, 1.697621703e-04f, 1.699702142e-04f, 1.701779482e-04f, 1.703853718e-04f, 1.705924849e-04f, 1.707992869e-04f,
+1.710057777e-04f, 1.712119568e-04f, 1.714178239e-04f, 1.716233788e-04f, 1.718286210e-04f, 1.720335503e-04f, 1.722381662e-04f, 1.724424686e-04f, 1.726464569e-04f, 1.728501310e-04f,
+1.730534905e-04f, 1.732565351e-04f, 1.734592644e-04f, 1.736616781e-04f, 1.738637759e-04f, 1.740655574e-04f, 1.742670224e-04f, 1.744681705e-04f, 1.746690014e-04f, 1.748695148e-04f,
+1.750697103e-04f, 1.752695876e-04f, 1.754691464e-04f, 1.756683864e-04f, 1.758673073e-04f, 1.760659087e-04f, 1.762641903e-04f, 1.764621518e-04f, 1.766597929e-04f, 1.768571133e-04f,
+1.770541126e-04f, 1.772507906e-04f, 1.774471469e-04f, 1.776431812e-04f, 1.778388931e-04f, 1.780342825e-04f, 1.782293489e-04f, 1.784240921e-04f, 1.786185117e-04f, 1.788126075e-04f,
+1.790063791e-04f, 1.791998261e-04f, 1.793929484e-04f, 1.795857456e-04f, 1.797782173e-04f, 1.799703634e-04f, 1.801621833e-04f, 1.803536770e-04f, 1.805448440e-04f, 1.807356841e-04f,
+1.809261969e-04f, 1.811163821e-04f, 1.813062395e-04f, 1.814957687e-04f, 1.816849694e-04f, 1.818738414e-04f, 1.820623843e-04f, 1.822505978e-04f, 1.824384817e-04f, 1.826260356e-04f,
+1.828132592e-04f, 1.830001522e-04f, 1.831867144e-04f, 1.833729454e-04f, 1.835588449e-04f, 1.837444127e-04f, 1.839296485e-04f, 1.841145519e-04f, 1.842991226e-04f, 1.844833604e-04f,
+1.846672650e-04f, 1.848508361e-04f, 1.850340733e-04f, 1.852169765e-04f, 1.853995453e-04f, 1.855817793e-04f, 1.857636784e-04f, 1.859452423e-04f, 1.861264706e-04f, 1.863073631e-04f,
+1.864879194e-04f, 1.866681393e-04f, 1.868480225e-04f, 1.870275688e-04f, 1.872067778e-04f, 1.873856492e-04f, 1.875641828e-04f, 1.877423783e-04f, 1.879202354e-04f, 1.880977538e-04f,
+1.882749333e-04f, 1.884517735e-04f, 1.886282742e-04f, 1.888044351e-04f, 1.889802559e-04f, 1.891557364e-04f, 1.893308762e-04f, 1.895056751e-04f, 1.896801329e-04f, 1.898542492e-04f,
+1.900280237e-04f, 1.902014562e-04f, 1.903745465e-04f, 1.905472942e-04f, 1.907196991e-04f, 1.908917608e-04f, 1.910634792e-04f, 1.912348540e-04f, 1.914058849e-04f, 1.915765715e-04f,
+1.917469138e-04f, 1.919169113e-04f, 1.920865638e-04f, 1.922558711e-04f, 1.924248328e-04f, 1.925934488e-04f, 1.927617187e-04f, 1.929296424e-04f, 1.930972194e-04f, 1.932644496e-04f,
+1.934313327e-04f, 1.935978685e-04f, 1.937640566e-04f, 1.939298968e-04f, 1.940953889e-04f, 1.942605326e-04f, 1.944253276e-04f, 1.945897737e-04f, 1.947538707e-04f, 1.949176181e-04f,
+1.950810159e-04f, 1.952440638e-04f, 1.954067615e-04f, 1.955691087e-04f, 1.957311052e-04f, 1.958927507e-04f, 1.960540450e-04f, 1.962149879e-04f, 1.963755790e-04f, 1.965358181e-04f,
+1.966957051e-04f, 1.968552396e-04f, 1.970144213e-04f, 1.971732501e-04f, 1.973317257e-04f, 1.974898478e-04f, 1.976476163e-04f, 1.978050307e-04f, 1.979620910e-04f, 1.981187969e-04f,
+1.982751480e-04f, 1.984311442e-04f, 1.985867853e-04f, 1.987420710e-04f, 1.988970010e-04f, 1.990515751e-04f, 1.992057931e-04f, 1.993596547e-04f, 1.995131597e-04f, 1.996663078e-04f,
+1.998190989e-04f, 1.999715326e-04f, 2.001236088e-04f, 2.002753272e-04f, 2.004266876e-04f, 2.005776897e-04f, 2.007283333e-04f, 2.008786182e-04f, 2.010285441e-04f, 2.011781109e-04f,
+2.013273182e-04f, 2.014761658e-04f, 2.016246536e-04f, 2.017727813e-04f, 2.019205486e-04f, 2.020679554e-04f, 2.022150013e-04f, 2.023616863e-04f, 2.025080100e-04f, 2.026539722e-04f,
+2.027995727e-04f, 2.029448114e-04f, 2.030896878e-04f, 2.032342019e-04f, 2.033783535e-04f, 2.035221422e-04f, 2.036655678e-04f, 2.038086303e-04f, 2.039513292e-04f, 2.040936645e-04f,
+2.042356359e-04f, 2.043772431e-04f, 2.045184860e-04f, 2.046593644e-04f, 2.047998779e-04f, 2.049400265e-04f, 2.050798099e-04f, 2.052192279e-04f, 2.053582802e-04f, 2.054969667e-04f,
+2.056352872e-04f, 2.057732414e-04f, 2.059108291e-04f, 2.060480502e-04f, 2.061849043e-04f, 2.063213914e-04f, 2.064575111e-04f, 2.065932634e-04f, 2.067286479e-04f, 2.068636645e-04f,
+2.069983129e-04f, 2.071325930e-04f, 2.072665046e-04f, 2.074000475e-04f, 2.075332214e-04f, 2.076660261e-04f, 2.077984615e-04f, 2.079305274e-04f, 2.080622235e-04f, 2.081935497e-04f,
+2.083245057e-04f, 2.084550913e-04f, 2.085853065e-04f, 2.087151509e-04f, 2.088446243e-04f, 2.089737267e-04f, 2.091024577e-04f, 2.092308172e-04f, 2.093588050e-04f, 2.094864209e-04f,
+2.096136646e-04f, 2.097405361e-04f, 2.098670352e-04f, 2.099931615e-04f, 2.101189150e-04f, 2.102442955e-04f, 2.103693027e-04f, 2.104939365e-04f, 2.106181967e-04f, 2.107420831e-04f,
+2.108655956e-04f, 2.109887338e-04f, 2.111114978e-04f, 2.112338872e-04f, 2.113559018e-04f, 2.114775416e-04f, 2.115988063e-04f, 2.117196958e-04f, 2.118402098e-04f, 2.119603482e-04f,
+2.120801108e-04f, 2.121994974e-04f, 2.123185079e-04f, 2.124371421e-04f, 2.125553997e-04f, 2.126732807e-04f, 2.127907848e-04f, 2.129079119e-04f, 2.130246618e-04f, 2.131410343e-04f,
+2.132570293e-04f, 2.133726465e-04f, 2.134878859e-04f, 2.136027472e-04f, 2.137172303e-04f, 2.138313350e-04f, 2.139450611e-04f, 2.140584085e-04f, 2.141713770e-04f, 2.142839664e-04f,
+2.143961766e-04f, 2.145080074e-04f, 2.146194586e-04f, 2.147305302e-04f, 2.148412218e-04f, 2.149515334e-04f, 2.150614648e-04f, 2.151710158e-04f, 2.152801863e-04f, 2.153889761e-04f,
+2.154973850e-04f, 2.156054129e-04f, 2.157130597e-04f, 2.158203252e-04f, 2.159272092e-04f, 2.160337115e-04f, 2.161398321e-04f, 2.162455707e-04f, 2.163509273e-04f, 2.164559016e-04f,
+2.165604935e-04f, 2.166647028e-04f, 2.167685294e-04f, 2.168719732e-04f, 2.169750340e-04f, 2.170777117e-04f, 2.171800061e-04f, 2.172819170e-04f, 2.173834443e-04f, 2.174845879e-04f,
+2.175853476e-04f, 2.176857233e-04f, 2.177857148e-04f, 2.178853220e-04f, 2.179845448e-04f, 2.180833829e-04f, 2.181818364e-04f, 2.182799049e-04f, 2.183775884e-04f, 2.184748868e-04f,
+2.185717999e-04f, 2.186683275e-04f, 2.187644696e-04f, 2.188602259e-04f, 2.189555965e-04f, 2.190505810e-04f, 2.191451794e-04f, 2.192393916e-04f, 2.193332174e-04f, 2.194266567e-04f,
+2.195197094e-04f, 2.196123752e-04f, 2.197046542e-04f, 2.197965462e-04f, 2.198880509e-04f, 2.199791684e-04f, 2.200698985e-04f, 2.201602410e-04f, 2.202501959e-04f, 2.203397629e-04f,
+2.204289421e-04f, 2.205177331e-04f, 2.206061361e-04f, 2.206941507e-04f, 2.207817769e-04f, 2.208690146e-04f, 2.209558636e-04f, 2.210423238e-04f, 2.211283951e-04f, 2.212140775e-04f,
+2.212993707e-04f, 2.213842746e-04f, 2.214687892e-04f, 2.215529142e-04f, 2.216366497e-04f, 2.217199955e-04f, 2.218029514e-04f, 2.218855174e-04f, 2.219676934e-04f, 2.220494792e-04f,
+2.221308747e-04f, 2.222118798e-04f, 2.222924944e-04f, 2.223727184e-04f, 2.224525517e-04f, 2.225319942e-04f, 2.226110457e-04f, 2.226897062e-04f, 2.227679756e-04f, 2.228458537e-04f,
+2.229233405e-04f, 2.230004358e-04f, 2.230771395e-04f, 2.231534516e-04f, 2.232293720e-04f, 2.233049004e-04f, 2.233800369e-04f, 2.234547813e-04f, 2.235291336e-04f, 2.236030936e-04f,
+2.236766613e-04f, 2.237498365e-04f, 2.238226191e-04f, 2.238950091e-04f, 2.239670064e-04f, 2.240386108e-04f, 2.241098223e-04f, 2.241806407e-04f, 2.242510661e-04f, 2.243210982e-04f,
+2.243907371e-04f, 2.244599826e-04f, 2.245288345e-04f, 2.245972930e-04f, 2.246653577e-04f, 2.247330288e-04f, 2.248003060e-04f, 2.248671893e-04f, 2.249336786e-04f, 2.249997738e-04f,
+2.250654748e-04f, 2.251307816e-04f, 2.251956941e-04f, 2.252602122e-04f, 2.253243357e-04f, 2.253880647e-04f, 2.254513991e-04f, 2.255143387e-04f, 2.255768835e-04f, 2.256390334e-04f,
+2.257007883e-04f, 2.257621482e-04f, 2.258231130e-04f, 2.258836826e-04f, 2.259438569e-04f, 2.260036359e-04f, 2.260630194e-04f, 2.261220075e-04f, 2.261806000e-04f, 2.262387969e-04f,
+2.262965981e-04f, 2.263540036e-04f, 2.264110132e-04f, 2.264676269e-04f, 2.265238446e-04f, 2.265796663e-04f, 2.266350919e-04f, 2.266901213e-04f, 2.267447545e-04f, 2.267989914e-04f,
+2.268528319e-04f, 2.269062761e-04f, 2.269593237e-04f, 2.270119748e-04f, 2.270642293e-04f, 2.271160871e-04f, 2.271675482e-04f, 2.272186125e-04f, 2.272692800e-04f, 2.273195505e-04f,
+2.273694242e-04f, 2.274189008e-04f, 2.274679803e-04f, 2.275166628e-04f, 2.275649480e-04f, 2.276128361e-04f, 2.276603269e-04f, 2.277074203e-04f, 2.277541164e-04f, 2.278004150e-04f,
+2.278463162e-04f, 2.278918198e-04f, 2.279369259e-04f, 2.279816343e-04f, 2.280259451e-04f, 2.280698582e-04f, 2.281133735e-04f, 2.281564910e-04f, 2.281992106e-04f, 2.282415324e-04f,
+2.282834562e-04f, 2.283249821e-04f, 2.283661100e-04f, 2.284068397e-04f, 2.284471715e-04f, 2.284871050e-04f, 2.285266404e-04f, 2.285657776e-04f, 2.286045166e-04f, 2.286428572e-04f,
+2.286807996e-04f, 2.287183436e-04f, 2.287554892e-04f, 2.287922364e-04f, 2.288285851e-04f, 2.288645353e-04f, 2.289000871e-04f, 2.289352403e-04f, 2.289699949e-04f, 2.290043509e-04f,
+2.290383083e-04f, 2.290718670e-04f, 2.291050270e-04f, 2.291377883e-04f, 2.291701509e-04f, 2.292021147e-04f, 2.292336797e-04f, 2.292648459e-04f, 2.292956133e-04f, 2.293259818e-04f,
+2.293559514e-04f, 2.293855221e-04f, 2.294146939e-04f, 2.294434667e-04f, 2.294718406e-04f, 2.294998155e-04f, 2.295273915e-04f, 2.295545684e-04f, 2.295813462e-04f, 2.296077251e-04f,
+2.296337048e-04f, 2.296592855e-04f, 2.296844671e-04f, 2.297092497e-04f, 2.297336331e-04f, 2.297576173e-04f, 2.297812025e-04f, 2.298043885e-04f, 2.298271753e-04f, 2.298495630e-04f,
+2.298715515e-04f, 2.298931409e-04f, 2.299143310e-04f, 2.299351220e-04f, 2.299555138e-04f, 2.299755064e-04f, 2.299950998e-04f, 2.300142939e-04f, 2.300330889e-04f, 2.300514847e-04f,
+2.300694812e-04f, 2.300870786e-04f, 2.301042767e-04f, 2.301210756e-04f, 2.301374754e-04f, 2.301534759e-04f, 2.301690772e-04f, 2.301842793e-04f, 2.301990823e-04f, 2.302134860e-04f,
+2.302274906e-04f, 2.302410960e-04f, 2.302543022e-04f, 2.302671093e-04f, 2.302795173e-04f, 2.302915260e-04f, 2.303031357e-04f, 2.303143463e-04f, 2.303251577e-04f, 2.303355700e-04f,
+2.303455833e-04f, 2.303551975e-04f, 2.303644126e-04f, 2.303732287e-04f, 2.303816458e-04f, 2.303896639e-04f, 2.303972830e-04f, 2.304045031e-04f, 2.304113242e-04f, 2.304177465e-04f,
+2.304237698e-04f, 2.304293942e-04f, 2.304346197e-04f, 2.304394464e-04f, 2.304438743e-04f, 2.304479034e-04f, 2.304515336e-04f, 2.304547652e-04f, 2.304575980e-04f, 2.304600320e-04f,
+2.304620675e-04f, 2.304637042e-04f, 2.304649423e-04f, 2.304657819e-04f, 2.304662229e-04f, 2.304662653e-04f, 2.304659092e-04f, 2.304651547e-04f, 2.304640017e-04f, 2.304624504e-04f,
+2.304605006e-04f, 2.304581525e-04f, 2.304554061e-04f, 2.304522614e-04f, 2.304487185e-04f, 2.304447774e-04f, 2.304404382e-04f, 2.304357008e-04f, 2.304305654e-04f, 2.304250319e-04f,
+2.304191004e-04f, 2.304127709e-04f, 2.304060435e-04f, 2.303989183e-04f, 2.303913952e-04f, 2.303834743e-04f, 2.303751557e-04f, 2.303664394e-04f, 2.303573255e-04f, 2.303478139e-04f,
+2.303379048e-04f, 2.303275981e-04f, 2.303168940e-04f, 2.303057925e-04f, 2.302942936e-04f, 2.302823975e-04f, 2.302701040e-04f, 2.302574134e-04f, 2.302443256e-04f, 2.302308406e-04f,
+2.302169587e-04f, 2.302026797e-04f, 2.301880038e-04f, 2.301729311e-04f, 2.301574615e-04f, 2.301415951e-04f, 2.301253320e-04f, 2.301086723e-04f, 2.300916160e-04f, 2.300741631e-04f,
+2.300563138e-04f, 2.300380681e-04f, 2.300194260e-04f, 2.300003877e-04f, 2.299809531e-04f, 2.299611224e-04f, 2.299408956e-04f, 2.299202727e-04f, 2.298992539e-04f, 2.298778392e-04f,
+2.298560287e-04f, 2.298338224e-04f, 2.298112205e-04f, 2.297882229e-04f, 2.297648298e-04f, 2.297410412e-04f, 2.297168572e-04f, 2.296922779e-04f, 2.296673033e-04f, 2.296419336e-04f,
+2.296161687e-04f, 2.295900088e-04f, 2.295634539e-04f, 2.295365042e-04f, 2.295091597e-04f, 2.294814204e-04f, 2.294532865e-04f, 2.294247580e-04f, 2.293958350e-04f, 2.293665177e-04f,
+2.293368060e-04f, 2.293067000e-04f, 2.292761999e-04f, 2.292453057e-04f, 2.292140175e-04f, 2.291823354e-04f, 2.291502595e-04f, 2.291177899e-04f, 2.290849266e-04f, 2.290516697e-04f,
+2.290180194e-04f, 2.289839756e-04f, 2.289495386e-04f, 2.289147084e-04f, 2.288794850e-04f, 2.288438686e-04f, 2.288078593e-04f, 2.287714572e-04f, 2.287346623e-04f, 2.286974747e-04f,
+2.286598946e-04f, 2.286219220e-04f, 2.285835571e-04f, 2.285447999e-04f, 2.285056505e-04f, 2.284661090e-04f, 2.284261756e-04f, 2.283858503e-04f, 2.283451332e-04f, 2.283040244e-04f,
+2.282625241e-04f, 2.282206323e-04f, 2.281783491e-04f, 2.281356746e-04f, 2.280926090e-04f, 2.280491524e-04f, 2.280053048e-04f, 2.279610663e-04f, 2.279164371e-04f, 2.278714173e-04f,
+2.278260069e-04f, 2.277802062e-04f, 2.277340151e-04f, 2.276874338e-04f, 2.276404625e-04f, 2.275931012e-04f, 2.275453500e-04f, 2.274972091e-04f, 2.274486785e-04f, 2.273997584e-04f,
+2.273504490e-04f, 2.273007502e-04f, 2.272506622e-04f, 2.272001853e-04f, 2.271493193e-04f, 2.270980646e-04f, 2.270464211e-04f, 2.269943891e-04f, 2.269419686e-04f, 2.268891597e-04f,
+2.268359627e-04f, 2.267823775e-04f, 2.267284044e-04f, 2.266740434e-04f, 2.266192947e-04f, 2.265641584e-04f, 2.265086346e-04f, 2.264527234e-04f, 2.263964251e-04f, 2.263397396e-04f,
+2.262826672e-04f, 2.262252079e-04f, 2.261673619e-04f, 2.261091294e-04f, 2.260505104e-04f, 2.259915050e-04f, 2.259321135e-04f, 2.258723360e-04f, 2.258121725e-04f, 2.257516232e-04f,
+2.256906883e-04f, 2.256293678e-04f, 2.255676620e-04f, 2.255055709e-04f, 2.254430948e-04f, 2.253802336e-04f, 2.253169876e-04f, 2.252533570e-04f, 2.251893418e-04f, 2.251249421e-04f,
+2.250601582e-04f, 2.249949902e-04f, 2.249294382e-04f, 2.248635024e-04f, 2.247971828e-04f, 2.247304797e-04f, 2.246633932e-04f, 2.245959235e-04f, 2.245280706e-04f, 2.244598347e-04f,
+2.243912160e-04f, 2.243222147e-04f, 2.242528308e-04f, 2.241830646e-04f, 2.241129161e-04f, 2.240423856e-04f, 2.239714731e-04f, 2.239001789e-04f, 2.238285030e-04f, 2.237564457e-04f,
+2.236840071e-04f, 2.236111873e-04f, 2.235379866e-04f, 2.234644049e-04f, 2.233904427e-04f, 2.233160998e-04f, 2.232413766e-04f, 2.231662732e-04f, 2.230907898e-04f, 2.230149264e-04f,
+2.229386834e-04f, 2.228620607e-04f, 2.227850587e-04f, 2.227076774e-04f, 2.226299170e-04f, 2.225517777e-04f, 2.224732597e-04f, 2.223943630e-04f, 2.223150880e-04f, 2.222354347e-04f,
+2.221554033e-04f, 2.220749939e-04f, 2.219942069e-04f, 2.219130422e-04f, 2.218315002e-04f, 2.217495809e-04f, 2.216672845e-04f, 2.215846112e-04f, 2.215015612e-04f, 2.214181346e-04f,
+2.213343317e-04f, 2.212501525e-04f, 2.211655973e-04f, 2.210806663e-04f, 2.209953596e-04f, 2.209096773e-04f, 2.208236198e-04f, 2.207371871e-04f, 2.206503794e-04f, 2.205631969e-04f,
+2.204756398e-04f, 2.203877083e-04f, 2.202994026e-04f, 2.202107227e-04f, 2.201216690e-04f, 2.200322416e-04f, 2.199424407e-04f, 2.198522664e-04f, 2.197617190e-04f, 2.196707986e-04f,
+2.195795054e-04f, 2.194878397e-04f, 2.193958015e-04f, 2.193033912e-04f, 2.192106088e-04f, 2.191174545e-04f, 2.190239286e-04f, 2.189300313e-04f, 2.188357627e-04f, 2.187411230e-04f,
+2.186461124e-04f, 2.185507312e-04f, 2.184549794e-04f, 2.183588574e-04f, 2.182623652e-04f, 2.181655032e-04f, 2.180682714e-04f, 2.179706701e-04f, 2.178726995e-04f, 2.177743598e-04f,
+2.176756511e-04f, 2.175765738e-04f, 2.174771279e-04f, 2.173773136e-04f, 2.172771313e-04f, 2.171765810e-04f, 2.170756631e-04f, 2.169743776e-04f, 2.168727248e-04f, 2.167707049e-04f,
+2.166683181e-04f, 2.165655646e-04f, 2.164624446e-04f, 2.163589583e-04f, 2.162551059e-04f, 2.161508877e-04f, 2.160463039e-04f, 2.159413545e-04f, 2.158360400e-04f, 2.157303604e-04f,
+2.156243160e-04f, 2.155179070e-04f, 2.154111336e-04f, 2.153039960e-04f, 2.151964944e-04f, 2.150886291e-04f, 2.149804003e-04f, 2.148718081e-04f, 2.147628529e-04f, 2.146535347e-04f,
+2.145438539e-04f, 2.144338106e-04f, 2.143234051e-04f, 2.142126375e-04f, 2.141015082e-04f, 2.139900173e-04f, 2.138781650e-04f, 2.137659516e-04f, 2.136533773e-04f, 2.135404423e-04f,
+2.134271469e-04f, 2.133134911e-04f, 2.131994754e-04f, 2.130850999e-04f, 2.129703648e-04f, 2.128552704e-04f, 2.127398168e-04f, 2.126240044e-04f, 2.125078333e-04f, 2.123913038e-04f,
+2.122744161e-04f, 2.121571704e-04f, 2.120395670e-04f, 2.119216061e-04f, 2.118032878e-04f, 2.116846126e-04f, 2.115655805e-04f, 2.114461919e-04f, 2.113264469e-04f, 2.112063458e-04f,
+2.110858889e-04f, 2.109650763e-04f, 2.108439083e-04f, 2.107223851e-04f, 2.106005070e-04f, 2.104782742e-04f, 2.103556870e-04f, 2.102327456e-04f, 2.101094502e-04f, 2.099858010e-04f,
+2.098617984e-04f, 2.097374426e-04f, 2.096127337e-04f, 2.094876721e-04f, 2.093622579e-04f, 2.092364915e-04f, 2.091103731e-04f, 2.089839029e-04f, 2.088570811e-04f, 2.087299081e-04f,
+2.086023840e-04f, 2.084745092e-04f, 2.083462837e-04f, 2.082177080e-04f, 2.080887823e-04f, 2.079595067e-04f, 2.078298816e-04f, 2.076999073e-04f, 2.075695838e-04f, 2.074389116e-04f,
+2.073078908e-04f, 2.071765218e-04f, 2.070448047e-04f, 2.069127399e-04f, 2.067803276e-04f, 2.066475679e-04f, 2.065144613e-04f, 2.063810079e-04f, 2.062472081e-04f, 2.061130620e-04f,
+2.059785699e-04f, 2.058437321e-04f, 2.057085489e-04f, 2.055730205e-04f, 2.054371471e-04f, 2.053009291e-04f, 2.051643667e-04f, 2.050274601e-04f, 2.048902096e-04f, 2.047526156e-04f,
+2.046146781e-04f, 2.044763976e-04f, 2.043377743e-04f, 2.041988084e-04f, 2.040595002e-04f, 2.039198500e-04f, 2.037798581e-04f, 2.036395246e-04f, 2.034988500e-04f, 2.033578344e-04f,
+2.032164781e-04f, 2.030747814e-04f, 2.029327446e-04f, 2.027903680e-04f, 2.026476517e-04f, 2.025045962e-04f, 2.023612016e-04f, 2.022174682e-04f, 2.020733963e-04f, 2.019289863e-04f,
+2.017842383e-04f, 2.016391526e-04f, 2.014937295e-04f, 2.013479694e-04f, 2.012018724e-04f, 2.010554388e-04f, 2.009086690e-04f, 2.007615632e-04f, 2.006141217e-04f, 2.004663447e-04f,
+2.003182326e-04f, 2.001697857e-04f, 2.000210041e-04f, 1.998718883e-04f, 1.997224384e-04f, 1.995726548e-04f, 1.994225378e-04f, 1.992720876e-04f, 1.991213045e-04f, 1.989701888e-04f,
+1.988187409e-04f, 1.986669609e-04f, 1.985148492e-04f, 1.983624061e-04f, 1.982096318e-04f, 1.980565267e-04f, 1.979030910e-04f, 1.977493250e-04f, 1.975952290e-04f, 1.974408034e-04f,
+1.972860483e-04f, 1.971309642e-04f, 1.969755512e-04f, 1.968198097e-04f, 1.966637400e-04f, 1.965073424e-04f, 1.963506171e-04f, 1.961935645e-04f, 1.960361849e-04f, 1.958784785e-04f,
+1.957204457e-04f, 1.955620867e-04f, 1.954034019e-04f, 1.952443916e-04f, 1.950850560e-04f, 1.949253955e-04f, 1.947654103e-04f, 1.946051008e-04f, 1.944444672e-04f, 1.942835099e-04f,
+1.941222292e-04f, 1.939606254e-04f, 1.937986987e-04f, 1.936364496e-04f, 1.934738782e-04f, 1.933109849e-04f, 1.931477700e-04f, 1.929842338e-04f, 1.928203767e-04f, 1.926561988e-04f,
+1.924917006e-04f, 1.923268824e-04f, 1.921617444e-04f, 1.919962870e-04f, 1.918305104e-04f, 1.916644150e-04f, 1.914980011e-04f, 1.913312691e-04f, 1.911642191e-04f, 1.909968516e-04f,
+1.908291669e-04f, 1.906611652e-04f, 1.904928469e-04f, 1.903242123e-04f, 1.901552617e-04f, 1.899859955e-04f, 1.898164139e-04f, 1.896465173e-04f, 1.894763059e-04f, 1.893057801e-04f,
+1.891349403e-04f, 1.889637867e-04f, 1.887923197e-04f, 1.886205396e-04f, 1.884484467e-04f, 1.882760413e-04f, 1.881033237e-04f, 1.879302943e-04f, 1.877569534e-04f, 1.875833014e-04f,
+1.874093385e-04f, 1.872350650e-04f, 1.870604814e-04f, 1.868855878e-04f, 1.867103847e-04f, 1.865348724e-04f, 1.863590512e-04f, 1.861829215e-04f, 1.860064834e-04f, 1.858297375e-04f,
+1.856526840e-04f, 1.854753233e-04f, 1.852976556e-04f, 1.851196813e-04f, 1.849414008e-04f, 1.847628143e-04f, 1.845839223e-04f, 1.844047250e-04f, 1.842252228e-04f, 1.840454159e-04f,
+1.838653049e-04f, 1.836848899e-04f, 1.835041713e-04f, 1.833231494e-04f, 1.831418247e-04f, 1.829601973e-04f, 1.827782678e-04f, 1.825960363e-04f, 1.824135033e-04f, 1.822306690e-04f,
+1.820475339e-04f, 1.818640982e-04f, 1.816803623e-04f, 1.814963266e-04f, 1.813119913e-04f, 1.811273569e-04f, 1.809424236e-04f, 1.807571918e-04f, 1.805716619e-04f, 1.803858342e-04f,
+1.801997090e-04f, 1.800132867e-04f, 1.798265676e-04f, 1.796395521e-04f, 1.794522405e-04f, 1.792646332e-04f, 1.790767306e-04f, 1.788885329e-04f, 1.787000405e-04f, 1.785112537e-04f,
+1.783221730e-04f, 1.781327986e-04f, 1.779431310e-04f, 1.777531704e-04f, 1.775629172e-04f, 1.773723718e-04f, 1.771815345e-04f, 1.769904057e-04f, 1.767989857e-04f, 1.766072749e-04f,
+1.764152736e-04f, 1.762229822e-04f, 1.760304011e-04f, 1.758375305e-04f, 1.756443709e-04f, 1.754509227e-04f, 1.752571860e-04f, 1.750631615e-04f, 1.748688492e-04f, 1.746742498e-04f,
+1.744793634e-04f, 1.742841905e-04f, 1.740887314e-04f, 1.738929865e-04f, 1.736969561e-04f, 1.735006407e-04f, 1.733040405e-04f, 1.731071559e-04f, 1.729099873e-04f, 1.727125351e-04f,
+1.725147996e-04f, 1.723167812e-04f, 1.721184802e-04f, 1.719198970e-04f, 1.717210320e-04f, 1.715218855e-04f, 1.713224579e-04f, 1.711227497e-04f, 1.709227610e-04f, 1.707224924e-04f,
+1.705219441e-04f, 1.703211166e-04f, 1.701200102e-04f, 1.699186253e-04f, 1.697169622e-04f, 1.695150214e-04f, 1.693128031e-04f, 1.691103078e-04f, 1.689075359e-04f, 1.687044877e-04f,
+1.685011635e-04f, 1.682975638e-04f, 1.680936889e-04f, 1.678895393e-04f, 1.676851152e-04f, 1.674804171e-04f, 1.672754453e-04f, 1.670702002e-04f, 1.668646822e-04f, 1.666588916e-04f,
+1.664528289e-04f, 1.662464944e-04f, 1.660398884e-04f, 1.658330115e-04f, 1.656258639e-04f, 1.654184460e-04f, 1.652107582e-04f, 1.650028009e-04f, 1.647945745e-04f, 1.645860793e-04f,
+1.643773158e-04f, 1.641682843e-04f, 1.639589851e-04f, 1.637494188e-04f, 1.635395856e-04f, 1.633294859e-04f, 1.631191202e-04f, 1.629084888e-04f, 1.626975921e-04f, 1.624864304e-04f,
+1.622750042e-04f, 1.620633139e-04f, 1.618513599e-04f, 1.616391424e-04f, 1.614266620e-04f, 1.612139190e-04f, 1.610009137e-04f, 1.607876467e-04f, 1.605741182e-04f, 1.603603287e-04f,
+1.601462785e-04f, 1.599319681e-04f, 1.597173978e-04f, 1.595025680e-04f, 1.592874792e-04f, 1.590721316e-04f, 1.588565258e-04f, 1.586406620e-04f, 1.584245408e-04f, 1.582081624e-04f,
+1.579915273e-04f, 1.577746358e-04f, 1.575574884e-04f, 1.573400855e-04f, 1.571224274e-04f, 1.569045146e-04f, 1.566863474e-04f, 1.564679263e-04f, 1.562492516e-04f, 1.560303238e-04f,
+1.558111432e-04f, 1.555917102e-04f, 1.553720253e-04f, 1.551520888e-04f, 1.549319012e-04f, 1.547114627e-04f, 1.544907740e-04f, 1.542698352e-04f, 1.540486469e-04f, 1.538272095e-04f,
+1.536055233e-04f, 1.533835887e-04f, 1.531614062e-04f, 1.529389761e-04f, 1.527162989e-04f, 1.524933750e-04f, 1.522702047e-04f, 1.520467885e-04f, 1.518231268e-04f, 1.515992200e-04f,
+1.513750684e-04f, 1.511506726e-04f, 1.509260328e-04f, 1.507011496e-04f, 1.504760233e-04f, 1.502506543e-04f, 1.500250431e-04f, 1.497991900e-04f, 1.495730954e-04f, 1.493467598e-04f,
+1.491201836e-04f, 1.488933672e-04f, 1.486663110e-04f, 1.484390154e-04f, 1.482114808e-04f, 1.479837076e-04f, 1.477556963e-04f, 1.475274472e-04f, 1.472989609e-04f, 1.470702376e-04f,
+1.468412777e-04f, 1.466120819e-04f, 1.463826503e-04f, 1.461529835e-04f, 1.459230818e-04f, 1.456929457e-04f, 1.454625756e-04f, 1.452319719e-04f, 1.450011351e-04f, 1.447700654e-04f,
+1.445387635e-04f, 1.443072296e-04f, 1.440754642e-04f, 1.438434677e-04f, 1.436112406e-04f, 1.433787832e-04f, 1.431460960e-04f, 1.429131794e-04f, 1.426800338e-04f, 1.424466596e-04f,
+1.422130573e-04f, 1.419792273e-04f, 1.417451699e-04f, 1.415108857e-04f, 1.412763751e-04f, 1.410416384e-04f, 1.408066761e-04f, 1.405714886e-04f, 1.403360764e-04f, 1.401004398e-04f,
+1.398645793e-04f, 1.396284953e-04f, 1.393921883e-04f, 1.391556587e-04f, 1.389189068e-04f, 1.386819332e-04f, 1.384447382e-04f, 1.382073223e-04f, 1.379696859e-04f, 1.377318294e-04f,
+1.374937533e-04f, 1.372554580e-04f, 1.370169439e-04f, 1.367782114e-04f, 1.365392611e-04f, 1.363000932e-04f, 1.360607083e-04f, 1.358211067e-04f, 1.355812890e-04f, 1.353412554e-04f,
+1.351010066e-04f, 1.348605428e-04f, 1.346198646e-04f, 1.343789723e-04f, 1.341378665e-04f, 1.338965474e-04f, 1.336550157e-04f, 1.334132716e-04f, 1.331713156e-04f, 1.329291483e-04f,
+1.326867699e-04f, 1.324441810e-04f, 1.322013819e-04f, 1.319583731e-04f, 1.317151551e-04f, 1.314717283e-04f, 1.312280931e-04f, 1.309842500e-04f, 1.307401994e-04f, 1.304959417e-04f,
+1.302514773e-04f, 1.300068068e-04f, 1.297619306e-04f, 1.295168490e-04f, 1.292715626e-04f, 1.290260717e-04f, 1.287803769e-04f, 1.285344785e-04f, 1.282883770e-04f, 1.280420728e-04f,
+1.277955664e-04f, 1.275488582e-04f, 1.273019487e-04f, 1.270548383e-04f, 1.268075275e-04f, 1.265600166e-04f, 1.263123062e-04f, 1.260643966e-04f, 1.258162884e-04f, 1.255679820e-04f,
+1.253194777e-04f, 1.250707761e-04f, 1.248218777e-04f, 1.245727827e-04f, 1.243234918e-04f, 1.240740053e-04f, 1.238243237e-04f, 1.235744474e-04f, 1.233243770e-04f, 1.230741127e-04f,
+1.228236551e-04f, 1.225730047e-04f, 1.223221618e-04f, 1.220711270e-04f, 1.218199006e-04f, 1.215684831e-04f, 1.213168750e-04f, 1.210650768e-04f, 1.208130888e-04f, 1.205609116e-04f,
+1.203085455e-04f, 1.200559910e-04f, 1.198032486e-04f, 1.195503188e-04f, 1.192972019e-04f, 1.190438985e-04f, 1.187904089e-04f, 1.185367337e-04f, 1.182828733e-04f, 1.180288281e-04f,
+1.177745986e-04f, 1.175201853e-04f, 1.172655886e-04f, 1.170108089e-04f, 1.167558468e-04f, 1.165007026e-04f, 1.162453769e-04f, 1.159898701e-04f, 1.157341826e-04f, 1.154783148e-04f,
+1.152222674e-04f, 1.149660406e-04f, 1.147096350e-04f, 1.144530511e-04f, 1.141962892e-04f, 1.139393499e-04f, 1.136822335e-04f, 1.134249406e-04f, 1.131674717e-04f, 1.129098271e-04f,
+1.126520073e-04f, 1.123940128e-04f, 1.121358441e-04f, 1.118775016e-04f, 1.116189858e-04f, 1.113602971e-04f, 1.111014360e-04f, 1.108424030e-04f, 1.105831984e-04f, 1.103238229e-04f,
+1.100642768e-04f, 1.098045606e-04f, 1.095446748e-04f, 1.092846197e-04f, 1.090243960e-04f, 1.087640041e-04f, 1.085034443e-04f, 1.082427173e-04f, 1.079818234e-04f, 1.077207630e-04f,
+1.074595368e-04f, 1.071981451e-04f, 1.069365884e-04f, 1.066748672e-04f, 1.064129819e-04f, 1.061509331e-04f, 1.058887210e-04f, 1.056263464e-04f, 1.053638095e-04f, 1.051011109e-04f,
+1.048382510e-04f, 1.045752303e-04f, 1.043120493e-04f, 1.040487084e-04f, 1.037852081e-04f, 1.035215489e-04f, 1.032577313e-04f, 1.029937556e-04f, 1.027296224e-04f, 1.024653322e-04f,
+1.022008854e-04f, 1.019362825e-04f, 1.016715239e-04f, 1.014066101e-04f, 1.011415417e-04f, 1.008763190e-04f, 1.006109425e-04f, 1.003454128e-04f, 1.000797302e-04f, 9.981389532e-05f,
+9.954790853e-05f, 9.928177034e-05f, 9.901548121e-05f, 9.874904162e-05f, 9.848245204e-05f, 9.821571294e-05f, 9.794882480e-05f, 9.768178809e-05f, 9.741460328e-05f, 9.714727086e-05f,
+9.687979128e-05f, 9.661216503e-05f, 9.634439257e-05f, 9.607647439e-05f, 9.580841096e-05f, 9.554020276e-05f, 9.527185025e-05f, 9.500335392e-05f, 9.473471423e-05f, 9.446593168e-05f,
+9.419700672e-05f, 9.392793984e-05f, 9.365873152e-05f, 9.338938223e-05f, 9.311989244e-05f, 9.285026264e-05f, 9.258049330e-05f, 9.231058491e-05f, 9.204053793e-05f, 9.177035284e-05f,
+9.150003013e-05f, 9.122957027e-05f, 9.095897374e-05f, 9.068824101e-05f, 9.041737258e-05f, 9.014636891e-05f, 8.987523049e-05f, 8.960395779e-05f, 8.933255130e-05f, 8.906101149e-05f,
+8.878933885e-05f, 8.851753385e-05f, 8.824559698e-05f, 8.797352871e-05f, 8.770132954e-05f, 8.742899993e-05f, 8.715654036e-05f, 8.688395133e-05f, 8.661123331e-05f, 8.633838679e-05f,
+8.606541224e-05f, 8.579231015e-05f, 8.551908100e-05f, 8.524572527e-05f, 8.497224344e-05f, 8.469863601e-05f, 8.442490344e-05f, 8.415104623e-05f, 8.387706486e-05f, 8.360295981e-05f,
+8.332873157e-05f, 8.305438061e-05f, 8.277990742e-05f, 8.250531250e-05f, 8.223059631e-05f, 8.195575935e-05f, 8.168080211e-05f, 8.140572505e-05f, 8.113052868e-05f, 8.085521348e-05f,
+8.057977993e-05f, 8.030422851e-05f, 8.002855972e-05f, 7.975277404e-05f, 7.947687195e-05f, 7.920085394e-05f, 7.892472050e-05f, 7.864847212e-05f, 7.837210928e-05f, 7.809563246e-05f,
+7.781904217e-05f, 7.754233887e-05f, 7.726552306e-05f, 7.698859523e-05f, 7.671155587e-05f, 7.643440546e-05f, 7.615714449e-05f, 7.587977345e-05f, 7.560229283e-05f, 7.532470311e-05f,
+7.504700479e-05f, 7.476919835e-05f, 7.449128428e-05f, 7.421326308e-05f, 7.393513523e-05f, 7.365690121e-05f, 7.337856153e-05f, 7.310011666e-05f, 7.282156710e-05f, 7.254291335e-05f,
+7.226415588e-05f, 7.198529519e-05f, 7.170633177e-05f, 7.142726611e-05f, 7.114809870e-05f, 7.086883003e-05f, 7.058946060e-05f, 7.030999089e-05f, 7.003042139e-05f, 6.975075260e-05f,
+6.947098500e-05f, 6.919111910e-05f, 6.891115537e-05f, 6.863109432e-05f, 6.835093644e-05f, 6.807068220e-05f, 6.779033212e-05f, 6.750988668e-05f, 6.722934638e-05f, 6.694871170e-05f,
+6.666798314e-05f, 6.638716119e-05f, 6.610624634e-05f, 6.582523910e-05f, 6.554413994e-05f, 6.526294937e-05f, 6.498166788e-05f, 6.470029596e-05f, 6.441883411e-05f, 6.413728281e-05f,
+6.385564257e-05f, 6.357391388e-05f, 6.329209722e-05f, 6.301019310e-05f, 6.272820202e-05f, 6.244612445e-05f, 6.216396091e-05f, 6.188171188e-05f, 6.159937786e-05f, 6.131695934e-05f,
+6.103445683e-05f, 6.075187080e-05f, 6.046920177e-05f, 6.018645022e-05f, 5.990361665e-05f, 5.962070156e-05f, 5.933770543e-05f, 5.905462878e-05f, 5.877147209e-05f, 5.848823585e-05f,
+5.820492058e-05f, 5.792152675e-05f, 5.763805487e-05f, 5.735450544e-05f, 5.707087894e-05f, 5.678717588e-05f, 5.650339676e-05f, 5.621954207e-05f, 5.593561230e-05f, 5.565160796e-05f,
+5.536752954e-05f, 5.508337754e-05f, 5.479915246e-05f, 5.451485478e-05f, 5.423048502e-05f, 5.394604367e-05f, 5.366153122e-05f, 5.337694817e-05f, 5.309229502e-05f, 5.280757228e-05f,
+5.252278043e-05f, 5.223791997e-05f, 5.195299141e-05f, 5.166799523e-05f, 5.138293195e-05f, 5.109780205e-05f, 5.081260604e-05f, 5.052734441e-05f, 5.024201766e-05f, 4.995662630e-05f,
+4.967117081e-05f, 4.938565170e-05f, 4.910006947e-05f, 4.881442462e-05f, 4.852871764e-05f, 4.824294903e-05f, 4.795711930e-05f, 4.767122894e-05f, 4.738527845e-05f, 4.709926833e-05f,
+4.681319908e-05f, 4.652707120e-05f, 4.624088519e-05f, 4.595464155e-05f, 4.566834077e-05f, 4.538198336e-05f, 4.509556982e-05f, 4.480910065e-05f, 4.452257634e-05f, 4.423599740e-05f,
+4.394936433e-05f, 4.366267762e-05f, 4.337593778e-05f, 4.308914531e-05f, 4.280230070e-05f, 4.251540446e-05f, 4.222845709e-05f, 4.194145908e-05f, 4.165441095e-05f, 4.136731318e-05f,
+4.108016628e-05f, 4.079297075e-05f, 4.050572708e-05f, 4.021843579e-05f, 3.993109737e-05f, 3.964371232e-05f, 3.935628115e-05f, 3.906880434e-05f, 3.878128242e-05f, 3.849371586e-05f,
+3.820610518e-05f, 3.791845088e-05f, 3.763075345e-05f, 3.734301340e-05f, 3.705523124e-05f, 3.676740745e-05f, 3.647954254e-05f, 3.619163702e-05f, 3.590369138e-05f, 3.561570612e-05f,
+3.532768175e-05f, 3.503961877e-05f, 3.475151767e-05f, 3.446337897e-05f, 3.417520315e-05f, 3.388699073e-05f, 3.359874220e-05f, 3.331045807e-05f, 3.302213884e-05f, 3.273378500e-05f,
+3.244539706e-05f, 3.215697552e-05f, 3.186852088e-05f, 3.158003365e-05f, 3.129151432e-05f, 3.100296340e-05f, 3.071438139e-05f, 3.042576879e-05f, 3.013712609e-05f, 2.984845382e-05f,
+2.955975245e-05f, 2.927102250e-05f, 2.898226447e-05f, 2.869347886e-05f, 2.840466617e-05f, 2.811582691e-05f, 2.782696157e-05f, 2.753807065e-05f, 2.724915466e-05f, 2.696021410e-05f,
+2.667124947e-05f, 2.638226128e-05f, 2.609325002e-05f, 2.580421619e-05f, 2.551516031e-05f, 2.522608286e-05f, 2.493698435e-05f, 2.464786529e-05f, 2.435872617e-05f, 2.406956749e-05f,
+2.378038977e-05f, 2.349119349e-05f, 2.320197917e-05f, 2.291274729e-05f, 2.262349837e-05f, 2.233423291e-05f, 2.204495141e-05f, 2.175565436e-05f, 2.146634228e-05f, 2.117701565e-05f,
+2.088767499e-05f, 2.059832080e-05f, 2.030895357e-05f, 2.001957381e-05f, 1.973018202e-05f, 1.944077871e-05f, 1.915136436e-05f, 1.886193949e-05f, 1.857250459e-05f, 1.828306018e-05f,
+1.799360674e-05f, 1.770414478e-05f, 1.741467480e-05f, 1.712519730e-05f, 1.683571279e-05f, 1.654622176e-05f, 1.625672472e-05f, 1.596722216e-05f, 1.567771460e-05f, 1.538820252e-05f,
+1.509868643e-05f, 1.480916684e-05f, 1.451964424e-05f, 1.423011913e-05f, 1.394059201e-05f, 1.365106340e-05f, 1.336153377e-05f, 1.307200365e-05f, 1.278247352e-05f, 1.249294390e-05f,
+1.220341527e-05f, 1.191388814e-05f, 1.162436301e-05f, 1.133484039e-05f, 1.104532077e-05f, 1.075580465e-05f, 1.046629253e-05f, 1.017678492e-05f, 9.887282308e-06f, 9.597785203e-06f,
+9.308294103e-06f, 9.018809507e-06f, 8.729331916e-06f, 8.439861831e-06f, 8.150399751e-06f, 7.860946176e-06f, 7.571501606e-06f, 7.282066541e-06f, 6.992641482e-06f, 6.703226927e-06f,
+6.413823376e-06f, 6.124431330e-06f, 5.835051288e-06f, 5.545683750e-06f, 5.256329214e-06f, 4.966988181e-06f, 4.677661150e-06f, 4.388348619e-06f, 4.099051090e-06f, 3.809769059e-06f,
+3.520503028e-06f, 3.231253495e-06f, 2.942020958e-06f, 2.652805917e-06f, 2.363608871e-06f, 2.074430318e-06f, 1.785270757e-06f, 1.496130687e-06f, 1.207010606e-06f, 9.179110137e-07f,
+6.288324073e-07f, 3.397752855e-07f, 5.074014661e-08f, -2.382725111e-07f, -5.272621896e-07f, -8.162283908e-07f, -1.105170617e-06f, -1.394088370e-06f, -1.682981151e-06f, -1.971848465e-06f,
+-2.260689812e-06f, -2.549504695e-06f, -2.838292616e-06f, -3.127053079e-06f, -3.415785586e-06f, -3.704489640e-06f, -3.993164744e-06f, -4.281810400e-06f, -4.570426111e-06f, -4.859011382e-06f,
+-5.147565715e-06f, -5.436088613e-06f, -5.724579579e-06f, -6.013038119e-06f, -6.301463734e-06f, -6.589855929e-06f, -6.878214207e-06f, -7.166538072e-06f, -7.454827029e-06f, -7.743080582e-06f,
+-8.031298234e-06f, -8.319479490e-06f, -8.607623855e-06f, -8.895730832e-06f, -9.183799927e-06f, -9.471830644e-06f, -9.759822488e-06f, -1.004777496e-05f, -1.033568758e-05f, -1.062355983e-05f,
+-1.091139123e-05f, -1.119918129e-05f, -1.148692950e-05f, -1.177463538e-05f, -1.206229843e-05f, -1.234991815e-05f, -1.263749405e-05f, -1.292502564e-05f, -1.321251242e-05f, -1.349995391e-05f,
+-1.378734959e-05f, -1.407469900e-05f, -1.436200162e-05f, -1.464925696e-05f, -1.493646454e-05f, -1.522362386e-05f, -1.551073442e-05f, -1.579779574e-05f, -1.608480732e-05f, -1.637176867e-05f,
+-1.665867930e-05f, -1.694553871e-05f, -1.723234641e-05f, -1.751910191e-05f, -1.780580472e-05f, -1.809245434e-05f, -1.837905029e-05f, -1.866559208e-05f, -1.895207920e-05f, -1.923851118e-05f,
+-1.952488751e-05f, -1.981120771e-05f, -2.009747130e-05f, -2.038367776e-05f, -2.066982663e-05f, -2.095591740e-05f, -2.124194958e-05f, -2.152792269e-05f, -2.181383624e-05f, -2.209968973e-05f,
+-2.238548268e-05f, -2.267121459e-05f, -2.295688498e-05f, -2.324249336e-05f, -2.352803923e-05f, -2.381352212e-05f, -2.409894152e-05f, -2.438429696e-05f, -2.466958794e-05f, -2.495481398e-05f,
+-2.523997458e-05f, -2.552506926e-05f, -2.581009753e-05f, -2.609505891e-05f, -2.637995290e-05f, -2.666477901e-05f, -2.694953677e-05f, -2.723422568e-05f, -2.751884526e-05f, -2.780339501e-05f,
+-2.808787446e-05f, -2.837228311e-05f, -2.865662049e-05f, -2.894088609e-05f, -2.922507945e-05f, -2.950920006e-05f, -2.979324745e-05f, -3.007722114e-05f, -3.036112062e-05f, -3.064494543e-05f,
+-3.092869507e-05f, -3.121236906e-05f, -3.149596691e-05f, -3.177948814e-05f, -3.206293227e-05f, -3.234629881e-05f, -3.262958728e-05f, -3.291279719e-05f, -3.319592807e-05f, -3.347897941e-05f,
+-3.376195076e-05f, -3.404484161e-05f, -3.432765149e-05f, -3.461037991e-05f, -3.489302639e-05f, -3.517559045e-05f, -3.545807161e-05f, -3.574046939e-05f, -3.602278329e-05f, -3.630501285e-05f,
+-3.658715757e-05f, -3.686921699e-05f, -3.715119061e-05f, -3.743307796e-05f, -3.771487855e-05f, -3.799659190e-05f, -3.827821754e-05f, -3.855975499e-05f, -3.884120375e-05f, -3.912256336e-05f,
+-3.940383334e-05f, -3.968501320e-05f, -3.996610246e-05f, -4.024710065e-05f, -4.052800729e-05f, -4.080882189e-05f, -4.108954399e-05f, -4.137017310e-05f, -4.165070874e-05f, -4.193115044e-05f,
+-4.221149771e-05f, -4.249175009e-05f, -4.277190708e-05f, -4.305196823e-05f, -4.333193304e-05f, -4.361180105e-05f, -4.389157177e-05f, -4.417124473e-05f, -4.445081946e-05f, -4.473029547e-05f,
+-4.500967229e-05f, -4.528894946e-05f, -4.556812648e-05f, -4.584720289e-05f, -4.612617821e-05f, -4.640505197e-05f, -4.668382368e-05f, -4.696249289e-05f, -4.724105911e-05f, -4.751952188e-05f,
+-4.779788071e-05f, -4.807613513e-05f, -4.835428467e-05f, -4.863232886e-05f, -4.891026723e-05f, -4.918809930e-05f, -4.946582460e-05f, -4.974344265e-05f, -5.002095300e-05f, -5.029835515e-05f,
+-5.057564866e-05f, -5.085283303e-05f, -5.112990780e-05f, -5.140687251e-05f, -5.168372668e-05f, -5.196046983e-05f, -5.223710151e-05f, -5.251362124e-05f, -5.279002855e-05f, -5.306632297e-05f,
+-5.334250403e-05f, -5.361857127e-05f, -5.389452421e-05f, -5.417036239e-05f, -5.444608533e-05f, -5.472169258e-05f, -5.499718366e-05f, -5.527255811e-05f, -5.554781545e-05f, -5.582295523e-05f,
+-5.609797697e-05f, -5.637288021e-05f, -5.664766448e-05f, -5.692232932e-05f, -5.719687426e-05f, -5.747129884e-05f, -5.774560258e-05f, -5.801978503e-05f, -5.829384572e-05f, -5.856778418e-05f,
+-5.884159996e-05f, -5.911529258e-05f, -5.938886159e-05f, -5.966230652e-05f, -5.993562690e-05f, -6.020882228e-05f, -6.048189219e-05f, -6.075483617e-05f, -6.102765375e-05f, -6.130034448e-05f,
+-6.157290789e-05f, -6.184534352e-05f, -6.211765091e-05f, -6.238982960e-05f, -6.266187913e-05f, -6.293379904e-05f, -6.320558887e-05f, -6.347724815e-05f, -6.374877643e-05f, -6.402017325e-05f,
+-6.429143815e-05f, -6.456257066e-05f, -6.483357035e-05f, -6.510443673e-05f, -6.537516936e-05f, -6.564576778e-05f, -6.591623153e-05f, -6.618656015e-05f, -6.645675319e-05f, -6.672681019e-05f,
+-6.699673069e-05f, -6.726651423e-05f, -6.753616037e-05f, -6.780566864e-05f, -6.807503860e-05f, -6.834426977e-05f, -6.861336172e-05f, -6.888231398e-05f, -6.915112610e-05f, -6.941979763e-05f,
+-6.968832812e-05f, -6.995671710e-05f, -7.022496413e-05f, -7.049306876e-05f, -7.076103052e-05f, -7.102884898e-05f, -7.129652367e-05f, -7.156405415e-05f, -7.183143996e-05f, -7.209868065e-05f,
+-7.236577578e-05f, -7.263272488e-05f, -7.289952752e-05f, -7.316618324e-05f, -7.343269159e-05f, -7.369905212e-05f, -7.396526438e-05f, -7.423132793e-05f, -7.449724231e-05f, -7.476300708e-05f,
+-7.502862179e-05f, -7.529408599e-05f, -7.555939924e-05f, -7.582456108e-05f, -7.608957107e-05f, -7.635442876e-05f, -7.661913371e-05f, -7.688368548e-05f, -7.714808361e-05f, -7.741232765e-05f,
+-7.767641718e-05f, -7.794035174e-05f, -7.820413088e-05f, -7.846775416e-05f, -7.873122115e-05f, -7.899453139e-05f, -7.925768444e-05f, -7.952067986e-05f, -7.978351720e-05f, -8.004619604e-05f,
+-8.030871591e-05f, -8.057107638e-05f, -8.083327702e-05f, -8.109531737e-05f, -8.135719700e-05f, -8.161891547e-05f, -8.188047233e-05f, -8.214186715e-05f, -8.240309950e-05f, -8.266416891e-05f,
+-8.292507497e-05f, -8.318581724e-05f, -8.344639526e-05f, -8.370680861e-05f, -8.396705685e-05f, -8.422713954e-05f, -8.448705625e-05f, -8.474680653e-05f, -8.500638995e-05f, -8.526580608e-05f,
+-8.552505448e-05f, -8.578413471e-05f, -8.604304634e-05f, -8.630178894e-05f, -8.656036206e-05f, -8.681876529e-05f, -8.707699817e-05f, -8.733506029e-05f, -8.759295120e-05f, -8.785067048e-05f,
+-8.810821769e-05f, -8.836559240e-05f, -8.862279417e-05f, -8.887982259e-05f, -8.913667720e-05f, -8.939335760e-05f, -8.964986333e-05f, -8.990619399e-05f, -9.016234912e-05f, -9.041832832e-05f,
+-9.067413114e-05f, -9.092975716e-05f, -9.118520594e-05f, -9.144047707e-05f, -9.169557012e-05f, -9.195048465e-05f, -9.220522024e-05f, -9.245977646e-05f, -9.271415289e-05f, -9.296834910e-05f,
+-9.322236467e-05f, -9.347619917e-05f, -9.372985217e-05f, -9.398332326e-05f, -9.423661200e-05f, -9.448971797e-05f, -9.474264076e-05f, -9.499537993e-05f, -9.524793506e-05f, -9.550030574e-05f,
+-9.575249153e-05f, -9.600449202e-05f, -9.625630679e-05f, -9.650793541e-05f, -9.675937747e-05f, -9.701063254e-05f, -9.726170021e-05f, -9.751258005e-05f, -9.776327164e-05f, -9.801377457e-05f,
+-9.826408842e-05f, -9.851421277e-05f, -9.876414720e-05f, -9.901389130e-05f, -9.926344464e-05f, -9.951280682e-05f, -9.976197741e-05f, -1.000109560e-04f, -1.002597422e-04f, -1.005083355e-04f,
+-1.007567356e-04f, -1.010049420e-04f, -1.012529544e-04f, -1.015007722e-04f, -1.017483952e-04f, -1.019958228e-04f, -1.022430548e-04f, -1.024900905e-04f, -1.027369297e-04f, -1.029835720e-04f,
+-1.032300169e-04f, -1.034762640e-04f, -1.037223129e-04f, -1.039681632e-04f, -1.042138144e-04f, -1.044592663e-04f, -1.047045183e-04f, -1.049495701e-04f, -1.051944212e-04f, -1.054390712e-04f,
+-1.056835198e-04f, -1.059277665e-04f, -1.061718110e-04f, -1.064156527e-04f, -1.066592914e-04f, -1.069027265e-04f, -1.071459578e-04f, -1.073889847e-04f, -1.076318070e-04f, -1.078744241e-04f,
+-1.081168357e-04f, -1.083590413e-04f, -1.086010407e-04f, -1.088428333e-04f, -1.090844188e-04f, -1.093257967e-04f, -1.095669668e-04f, -1.098079285e-04f, -1.100486814e-04f, -1.102892252e-04f,
+-1.105295595e-04f, -1.107696839e-04f, -1.110095979e-04f, -1.112493012e-04f, -1.114887933e-04f, -1.117280739e-04f, -1.119671426e-04f, -1.122059990e-04f, -1.124446427e-04f, -1.126830732e-04f,
+-1.129212903e-04f, -1.131592934e-04f, -1.133970823e-04f, -1.136346564e-04f, -1.138720155e-04f, -1.141091590e-04f, -1.143460867e-04f, -1.145827981e-04f, -1.148192929e-04f, -1.150555706e-04f,
+-1.152916309e-04f, -1.155274733e-04f, -1.157630975e-04f, -1.159985031e-04f, -1.162336897e-04f, -1.164686569e-04f, -1.167034043e-04f, -1.169379315e-04f, -1.171722382e-04f, -1.174063239e-04f,
+-1.176401883e-04f, -1.178738309e-04f, -1.181072515e-04f, -1.183404495e-04f, -1.185734246e-04f, -1.188061765e-04f, -1.190387047e-04f, -1.192710089e-04f, -1.195030887e-04f, -1.197349436e-04f,
+-1.199665734e-04f, -1.201979776e-04f, -1.204291558e-04f, -1.206601077e-04f, -1.208908328e-04f, -1.211213309e-04f, -1.213516015e-04f, -1.215816442e-04f, -1.218114587e-04f, -1.220410445e-04f,
+-1.222704013e-04f, -1.224995288e-04f, -1.227284265e-04f, -1.229570941e-04f, -1.231855311e-04f, -1.234137373e-04f, -1.236417122e-04f, -1.238694554e-04f, -1.240969666e-04f, -1.243242454e-04f,
+-1.245512915e-04f, -1.247781044e-04f, -1.250046838e-04f, -1.252310293e-04f, -1.254571405e-04f, -1.256830171e-04f, -1.259086587e-04f, -1.261340649e-04f, -1.263592353e-04f, -1.265841696e-04f,
+-1.268088674e-04f, -1.270333284e-04f, -1.272575521e-04f, -1.274815382e-04f, -1.277052863e-04f, -1.279287961e-04f, -1.281520672e-04f, -1.283750992e-04f, -1.285978917e-04f, -1.288204445e-04f,
+-1.290427570e-04f, -1.292648291e-04f, -1.294866602e-04f, -1.297082500e-04f, -1.299295982e-04f, -1.301507044e-04f, -1.303715682e-04f, -1.305921893e-04f, -1.308125673e-04f, -1.310327019e-04f,
+-1.312525926e-04f, -1.314722392e-04f, -1.316916412e-04f, -1.319107984e-04f, -1.321297103e-04f, -1.323483765e-04f, -1.325667968e-04f, -1.327849707e-04f, -1.330028980e-04f, -1.332205782e-04f,
+-1.334380110e-04f, -1.336551960e-04f, -1.338721330e-04f, -1.340888214e-04f, -1.343052610e-04f, -1.345214514e-04f, -1.347373923e-04f, -1.349530833e-04f, -1.351685240e-04f, -1.353837142e-04f,
+-1.355986534e-04f, -1.358133412e-04f, -1.360277775e-04f, -1.362419617e-04f, -1.364558935e-04f, -1.366695727e-04f, -1.368829988e-04f, -1.370961715e-04f, -1.373090904e-04f, -1.375217552e-04f,
+-1.377341656e-04f, -1.379463211e-04f, -1.381582215e-04f, -1.383698665e-04f, -1.385812555e-04f, -1.387923884e-04f, -1.390032648e-04f, -1.392138843e-04f, -1.394242465e-04f, -1.396343512e-04f,
+-1.398441980e-04f, -1.400537866e-04f, -1.402631165e-04f, -1.404721875e-04f, -1.406809993e-04f, -1.408895514e-04f, -1.410978436e-04f, -1.413058755e-04f, -1.415136467e-04f, -1.417211570e-04f,
+-1.419284059e-04f, -1.421353932e-04f, -1.423421185e-04f, -1.425485815e-04f, -1.427547818e-04f, -1.429607192e-04f, -1.431663931e-04f, -1.433718035e-04f, -1.435769498e-04f, -1.437818318e-04f,
+-1.439864491e-04f, -1.441908014e-04f, -1.443948883e-04f, -1.445987096e-04f, -1.448022649e-04f, -1.450055539e-04f, -1.452085762e-04f, -1.454113315e-04f, -1.456138195e-04f, -1.458160398e-04f,
+-1.460179922e-04f, -1.462196762e-04f, -1.464210916e-04f, -1.466222380e-04f, -1.468231152e-04f, -1.470237227e-04f, -1.472240603e-04f, -1.474241276e-04f, -1.476239243e-04f, -1.478234501e-04f,
+-1.480227047e-04f, -1.482216877e-04f, -1.484203988e-04f, -1.486188377e-04f, -1.488170040e-04f, -1.490148975e-04f, -1.492125179e-04f, -1.494098647e-04f, -1.496069377e-04f, -1.498037366e-04f,
+-1.500002610e-04f, -1.501965107e-04f, -1.503924853e-04f, -1.505881844e-04f, -1.507836079e-04f, -1.509787552e-04f, -1.511736263e-04f, -1.513682207e-04f, -1.515625380e-04f, -1.517565781e-04f,
+-1.519503406e-04f, -1.521438251e-04f, -1.523370314e-04f, -1.525299591e-04f, -1.527226080e-04f, -1.529149777e-04f, -1.531070679e-04f, -1.532988783e-04f, -1.534904086e-04f, -1.536816585e-04f,
+-1.538726276e-04f, -1.540633158e-04f, -1.542537225e-04f, -1.544438477e-04f, -1.546336908e-04f, -1.548232518e-04f, -1.550125301e-04f, -1.552015256e-04f, -1.553902379e-04f, -1.555786667e-04f,
+-1.557668117e-04f, -1.559546726e-04f, -1.561422491e-04f, -1.563295410e-04f, -1.565165478e-04f, -1.567032694e-04f, -1.568897053e-04f, -1.570758554e-04f, -1.572617192e-04f, -1.574472966e-04f,
+-1.576325872e-04f, -1.578175906e-04f, -1.580023067e-04f, -1.581867351e-04f, -1.583708755e-04f, -1.585547277e-04f, -1.587382912e-04f, -1.589215659e-04f, -1.591045514e-04f, -1.592872475e-04f,
+-1.594696538e-04f, -1.596517701e-04f, -1.598335960e-04f, -1.600151313e-04f, -1.601963757e-04f, -1.603773288e-04f, -1.605579905e-04f, -1.607383604e-04f, -1.609184382e-04f, -1.610982236e-04f,
+-1.612777164e-04f, -1.614569163e-04f, -1.616358229e-04f, -1.618144359e-04f, -1.619927552e-04f, -1.621707804e-04f, -1.623485113e-04f, -1.625259474e-04f, -1.627030886e-04f, -1.628799346e-04f,
+-1.630564851e-04f, -1.632327398e-04f, -1.634086985e-04f, -1.635843608e-04f, -1.637597264e-04f, -1.639347952e-04f, -1.641095667e-04f, -1.642840408e-04f, -1.644582171e-04f, -1.646320954e-04f,
+-1.648056754e-04f, -1.649789568e-04f, -1.651519393e-04f, -1.653246228e-04f, -1.654970068e-04f, -1.656690911e-04f, -1.658408755e-04f, -1.660123596e-04f, -1.661835432e-04f, -1.663544261e-04f,
+-1.665250079e-04f, -1.666952884e-04f, -1.668652673e-04f, -1.670349443e-04f, -1.672043192e-04f, -1.673733917e-04f, -1.675421615e-04f, -1.677106284e-04f, -1.678787921e-04f, -1.680466523e-04f,
+-1.682142088e-04f, -1.683814612e-04f, -1.685484094e-04f, -1.687150531e-04f, -1.688813920e-04f, -1.690474258e-04f, -1.692131542e-04f, -1.693785771e-04f, -1.695436941e-04f, -1.697085051e-04f,
+-1.698730096e-04f, -1.700372075e-04f, -1.702010985e-04f, -1.703646824e-04f, -1.705279588e-04f, -1.706909276e-04f, -1.708535884e-04f, -1.710159411e-04f, -1.711779853e-04f, -1.713397208e-04f,
+-1.715011474e-04f, -1.716622647e-04f, -1.718230726e-04f, -1.719835708e-04f, -1.721437590e-04f, -1.723036370e-04f, -1.724632045e-04f, -1.726224612e-04f, -1.727814070e-04f, -1.729400416e-04f,
+-1.730983647e-04f, -1.732563760e-04f, -1.734140754e-04f, -1.735714625e-04f, -1.737285372e-04f, -1.738852992e-04f, -1.740417482e-04f, -1.741978839e-04f, -1.743537063e-04f, -1.745092149e-04f,
+-1.746644095e-04f, -1.748192900e-04f, -1.749738560e-04f, -1.751281074e-04f, -1.752820438e-04f, -1.754356651e-04f, -1.755889710e-04f, -1.757419612e-04f, -1.758946355e-04f, -1.760469938e-04f,
+-1.761990356e-04f, -1.763507609e-04f, -1.765021693e-04f, -1.766532607e-04f, -1.768040347e-04f, -1.769544912e-04f, -1.771046299e-04f, -1.772544506e-04f, -1.774039530e-04f, -1.775531370e-04f,
+-1.777020022e-04f, -1.778505485e-04f, -1.779987757e-04f, -1.781466834e-04f, -1.782942714e-04f, -1.784415396e-04f, -1.785884877e-04f, -1.787351154e-04f, -1.788814226e-04f, -1.790274090e-04f,
+-1.791730744e-04f, -1.793184185e-04f, -1.794634412e-04f, -1.796081421e-04f, -1.797525212e-04f, -1.798965781e-04f, -1.800403126e-04f, -1.801837246e-04f, -1.803268137e-04f, -1.804695798e-04f,
+-1.806120226e-04f, -1.807541420e-04f, -1.808959377e-04f, -1.810374094e-04f, -1.811785570e-04f, -1.813193802e-04f, -1.814598789e-04f, -1.816000528e-04f, -1.817399016e-04f, -1.818794253e-04f,
+-1.820186235e-04f, -1.821574960e-04f, -1.822960427e-04f, -1.824342632e-04f, -1.825721575e-04f, -1.827097253e-04f, -1.828469663e-04f, -1.829838804e-04f, -1.831204674e-04f, -1.832567270e-04f,
+-1.833926590e-04f, -1.835282633e-04f, -1.836635395e-04f, -1.837984876e-04f, -1.839331072e-04f, -1.840673983e-04f, -1.842013605e-04f, -1.843349938e-04f, -1.844682977e-04f, -1.846012723e-04f,
+-1.847339172e-04f, -1.848662323e-04f, -1.849982173e-04f, -1.851298721e-04f, -1.852611965e-04f, -1.853921902e-04f, -1.855228530e-04f, -1.856531848e-04f, -1.857831854e-04f, -1.859128545e-04f,
+-1.860421919e-04f, -1.861711975e-04f, -1.862998711e-04f, -1.864282124e-04f, -1.865562214e-04f, -1.866838976e-04f, -1.868112411e-04f, -1.869382515e-04f, -1.870649287e-04f, -1.871912726e-04f,
+-1.873172828e-04f, -1.874429592e-04f, -1.875683017e-04f, -1.876933100e-04f, -1.878179839e-04f, -1.879423233e-04f, -1.880663279e-04f, -1.881899976e-04f, -1.883133322e-04f, -1.884363315e-04f,
+-1.885589954e-04f, -1.886813235e-04f, -1.888033158e-04f, -1.889249720e-04f, -1.890462920e-04f, -1.891672756e-04f, -1.892879226e-04f, -1.894082329e-04f, -1.895282062e-04f, -1.896478423e-04f,
+-1.897671411e-04f, -1.898861025e-04f, -1.900047261e-04f, -1.901230119e-04f, -1.902409596e-04f, -1.903585692e-04f, -1.904758403e-04f, -1.905927729e-04f, -1.907093668e-04f, -1.908256217e-04f,
+-1.909415376e-04f, -1.910571141e-04f, -1.911723513e-04f, -1.912872488e-04f, -1.914018066e-04f, -1.915160243e-04f, -1.916299020e-04f, -1.917434394e-04f, -1.918566363e-04f, -1.919694926e-04f,
+-1.920820081e-04f, -1.921941826e-04f, -1.923060159e-04f, -1.924175080e-04f, -1.925286586e-04f, -1.926394675e-04f, -1.927499347e-04f, -1.928600599e-04f, -1.929698430e-04f, -1.930792837e-04f,
+-1.931883821e-04f, -1.932971378e-04f, -1.934055507e-04f, -1.935136207e-04f, -1.936213476e-04f, -1.937287312e-04f, -1.938357714e-04f, -1.939424681e-04f, -1.940488210e-04f, -1.941548300e-04f,
+-1.942604950e-04f, -1.943658158e-04f, -1.944707922e-04f, -1.945754241e-04f, -1.946797114e-04f, -1.947836538e-04f, -1.948872513e-04f, -1.949905037e-04f, -1.950934107e-04f, -1.951959724e-04f,
+-1.952981884e-04f, -1.954000588e-04f, -1.955015833e-04f, -1.956027617e-04f, -1.957035940e-04f, -1.958040800e-04f, -1.959042195e-04f, -1.960040124e-04f, -1.961034585e-04f, -1.962025578e-04f,
+-1.963013099e-04f, -1.963997150e-04f, -1.964977726e-04f, -1.965954828e-04f, -1.966928454e-04f, -1.967898603e-04f, -1.968865272e-04f, -1.969828461e-04f, -1.970788168e-04f, -1.971744392e-04f,
+-1.972697132e-04f, -1.973646386e-04f, -1.974592152e-04f, -1.975534430e-04f, -1.976473218e-04f, -1.977408514e-04f, -1.978340318e-04f, -1.979268628e-04f, -1.980193443e-04f, -1.981114760e-04f,
+-1.982032580e-04f, -1.982946901e-04f, -1.983857721e-04f, -1.984765039e-04f, -1.985668854e-04f, -1.986569164e-04f, -1.987465968e-04f, -1.988359266e-04f, -1.989249055e-04f, -1.990135335e-04f,
+-1.991018104e-04f, -1.991897360e-04f, -1.992773104e-04f, -1.993645332e-04f, -1.994514045e-04f, -1.995379241e-04f, -1.996240919e-04f, -1.997099077e-04f, -1.997953715e-04f, -1.998804830e-04f,
+-1.999652423e-04f, -2.000496491e-04f, -2.001337034e-04f, -2.002174051e-04f, -2.003007539e-04f, -2.003837499e-04f, -2.004663928e-04f, -2.005486826e-04f, -2.006306192e-04f, -2.007122024e-04f,
+-2.007934321e-04f, -2.008743083e-04f, -2.009548308e-04f, -2.010349995e-04f, -2.011148142e-04f, -2.011942749e-04f, -2.012733815e-04f, -2.013521339e-04f, -2.014305319e-04f, -2.015085754e-04f,
+-2.015862644e-04f, -2.016635986e-04f, -2.017405782e-04f, -2.018172028e-04f, -2.018934724e-04f, -2.019693869e-04f, -2.020449463e-04f, -2.021201503e-04f, -2.021949990e-04f, -2.022694921e-04f,
+-2.023436296e-04f, -2.024174114e-04f, -2.024908374e-04f, -2.025639075e-04f, -2.026366217e-04f, -2.027089797e-04f, -2.027809815e-04f, -2.028526270e-04f, -2.029239161e-04f, -2.029948487e-04f,
+-2.030654248e-04f, -2.031356442e-04f, -2.032055068e-04f, -2.032750125e-04f, -2.033441613e-04f, -2.034129531e-04f, -2.034813877e-04f, -2.035494651e-04f, -2.036171852e-04f, -2.036845479e-04f,
+-2.037515530e-04f, -2.038182006e-04f, -2.038844906e-04f, -2.039504227e-04f, -2.040159971e-04f, -2.040812135e-04f, -2.041460719e-04f, -2.042105722e-04f, -2.042747143e-04f, -2.043384982e-04f,
+-2.044019237e-04f, -2.044649908e-04f, -2.045276994e-04f, -2.045900494e-04f, -2.046520408e-04f, -2.047136734e-04f, -2.047749471e-04f, -2.048358620e-04f, -2.048964179e-04f, -2.049566148e-04f,
+-2.050164525e-04f, -2.050759310e-04f, -2.051350502e-04f, -2.051938101e-04f, -2.052522105e-04f, -2.053102515e-04f, -2.053679328e-04f, -2.054252546e-04f, -2.054822166e-04f, -2.055388188e-04f,
+-2.055950612e-04f, -2.056509436e-04f, -2.057064661e-04f, -2.057616285e-04f, -2.058164307e-04f, -2.058708728e-04f, -2.059249546e-04f, -2.059786761e-04f, -2.060320372e-04f, -2.060850379e-04f,
+-2.061376780e-04f, -2.061899575e-04f, -2.062418764e-04f, -2.062934346e-04f, -2.063446321e-04f, -2.063954687e-04f, -2.064459444e-04f, -2.064960592e-04f, -2.065458130e-04f, -2.065952058e-04f,
+-2.066442374e-04f, -2.066929078e-04f, -2.067412170e-04f, -2.067891650e-04f, -2.068367516e-04f, -2.068839768e-04f, -2.069308405e-04f, -2.069773428e-04f, -2.070234835e-04f, -2.070692626e-04f,
+-2.071146801e-04f, -2.071597358e-04f, -2.072044298e-04f, -2.072487620e-04f, -2.072927324e-04f, -2.073363408e-04f, -2.073795874e-04f, -2.074224719e-04f, -2.074649944e-04f, -2.075071548e-04f,
+-2.075489531e-04f, -2.075903892e-04f, -2.076314631e-04f, -2.076721748e-04f, -2.077125241e-04f, -2.077525111e-04f, -2.077921358e-04f, -2.078313980e-04f, -2.078702978e-04f, -2.079088350e-04f,
+-2.079470098e-04f, -2.079848219e-04f, -2.080222715e-04f, -2.080593584e-04f, -2.080960826e-04f, -2.081324441e-04f, -2.081684429e-04f, -2.082040788e-04f, -2.082393520e-04f, -2.082742623e-04f,
+-2.083088097e-04f, -2.083429942e-04f, -2.083768158e-04f, -2.084102744e-04f, -2.084433700e-04f, -2.084761025e-04f, -2.085084720e-04f, -2.085404784e-04f, -2.085721217e-04f, -2.086034019e-04f,
+-2.086343189e-04f, -2.086648727e-04f, -2.086950633e-04f, -2.087248906e-04f, -2.087543547e-04f, -2.087834555e-04f, -2.088121930e-04f, -2.088405671e-04f, -2.088685780e-04f, -2.088962254e-04f,
+-2.089235095e-04f, -2.089504301e-04f, -2.089769874e-04f, -2.090031812e-04f, -2.090290115e-04f, -2.090544783e-04f, -2.090795817e-04f, -2.091043216e-04f, -2.091286979e-04f, -2.091527108e-04f,
+-2.091763600e-04f, -2.091996458e-04f, -2.092225679e-04f, -2.092451265e-04f, -2.092673214e-04f, -2.092891528e-04f, -2.093106206e-04f, -2.093317247e-04f, -2.093524653e-04f, -2.093728422e-04f,
+-2.093928554e-04f, -2.094125050e-04f, -2.094317910e-04f, -2.094507133e-04f, -2.094692719e-04f, -2.094874669e-04f, -2.095052982e-04f, -2.095227658e-04f, -2.095398698e-04f, -2.095566101e-04f,
+-2.095729867e-04f, -2.095889997e-04f, -2.096046490e-04f, -2.096199346e-04f, -2.096348565e-04f, -2.096494148e-04f, -2.096636094e-04f, -2.096774404e-04f, -2.096909077e-04f, -2.097040114e-04f,
+-2.097167514e-04f, -2.097291278e-04f, -2.097411406e-04f, -2.097527897e-04f, -2.097640752e-04f, -2.097749972e-04f, -2.097855555e-04f, -2.097957503e-04f, -2.098055815e-04f, -2.098150491e-04f,
+-2.098241532e-04f, -2.098328937e-04f, -2.098412707e-04f, -2.098492843e-04f, -2.098569343e-04f, -2.098642208e-04f, -2.098711439e-04f, -2.098777036e-04f, -2.098838998e-04f, -2.098897326e-04f,
+-2.098952020e-04f, -2.099003081e-04f, -2.099050508e-04f, -2.099094302e-04f, -2.099134462e-04f, -2.099170990e-04f, -2.099203885e-04f, -2.099233147e-04f, -2.099258778e-04f, -2.099280776e-04f,
+-2.099299143e-04f, -2.099313878e-04f, -2.099324982e-04f, -2.099332455e-04f, -2.099336298e-04f, -2.099336510e-04f, -2.099333092e-04f, -2.099326044e-04f, -2.099315367e-04f, -2.099301060e-04f,
+-2.099283125e-04f, -2.099261561e-04f, -2.099236369e-04f, -2.099207549e-04f, -2.099175101e-04f, -2.099139026e-04f, -2.099099324e-04f, -2.099055996e-04f, -2.099009041e-04f, -2.098958460e-04f,
+-2.098904255e-04f, -2.098846424e-04f, -2.098784968e-04f, -2.098719888e-04f, -2.098651184e-04f, -2.098578857e-04f, -2.098502907e-04f, -2.098423334e-04f, -2.098340138e-04f, -2.098253321e-04f,
+-2.098162883e-04f, -2.098068823e-04f, -2.097971143e-04f, -2.097869843e-04f, -2.097764924e-04f, -2.097656385e-04f, -2.097544228e-04f, -2.097428453e-04f, -2.097309060e-04f, -2.097186049e-04f,
+-2.097059422e-04f, -2.096929179e-04f, -2.096795320e-04f, -2.096657846e-04f, -2.096516758e-04f, -2.096372055e-04f, -2.096223739e-04f, -2.096071810e-04f, -2.095916268e-04f, -2.095757114e-04f,
+-2.095594349e-04f, -2.095427973e-04f, -2.095257987e-04f, -2.095084391e-04f, -2.094907186e-04f, -2.094726373e-04f, -2.094541952e-04f, -2.094353923e-04f, -2.094162288e-04f, -2.093967047e-04f,
+-2.093768200e-04f, -2.093565749e-04f, -2.093359693e-04f, -2.093150034e-04f, -2.092936772e-04f, -2.092719908e-04f, -2.092499442e-04f, -2.092275375e-04f, -2.092047708e-04f, -2.091816442e-04f,
+-2.091581576e-04f, -2.091343112e-04f, -2.091101051e-04f, -2.090855393e-04f, -2.090606139e-04f, -2.090353290e-04f, -2.090096846e-04f, -2.089836808e-04f, -2.089573177e-04f, -2.089305953e-04f,
+-2.089035138e-04f, -2.088760731e-04f, -2.088482735e-04f, -2.088201149e-04f, -2.087915974e-04f, -2.087627212e-04f, -2.087334862e-04f, -2.087038926e-04f, -2.086739404e-04f, -2.086436298e-04f,
+-2.086129608e-04f, -2.085819335e-04f, -2.085505479e-04f, -2.085188042e-04f, -2.084867025e-04f, -2.084542427e-04f, -2.084214251e-04f, -2.083882496e-04f, -2.083547164e-04f, -2.083208256e-04f,
+-2.082865772e-04f, -2.082519714e-04f, -2.082170082e-04f, -2.081816877e-04f, -2.081460100e-04f, -2.081099752e-04f, -2.080735834e-04f, -2.080368346e-04f, -2.079997290e-04f, -2.079622667e-04f,
+-2.079244477e-04f, -2.078862721e-04f, -2.078477401e-04f, -2.078088517e-04f, -2.077696071e-04f, -2.077300063e-04f, -2.076900493e-04f, -2.076497364e-04f, -2.076090677e-04f, -2.075680431e-04f,
+-2.075266628e-04f, -2.074849270e-04f, -2.074428356e-04f, -2.074003889e-04f, -2.073575869e-04f, -2.073144297e-04f, -2.072709174e-04f, -2.072270501e-04f, -2.071828280e-04f, -2.071382511e-04f,
+-2.070933195e-04f, -2.070480334e-04f, -2.070023928e-04f, -2.069563979e-04f, -2.069100487e-04f, -2.068633454e-04f, -2.068162880e-04f, -2.067688768e-04f, -2.067211117e-04f, -2.066729930e-04f,
+-2.066245207e-04f, -2.065756949e-04f, -2.065265157e-04f, -2.064769833e-04f, -2.064270978e-04f, -2.063768592e-04f, -2.063262677e-04f, -2.062753235e-04f, -2.062240266e-04f, -2.061723771e-04f,
+-2.061203752e-04f, -2.060680209e-04f, -2.060153145e-04f, -2.059622560e-04f, -2.059088455e-04f, -2.058550832e-04f, -2.058009691e-04f, -2.057465034e-04f, -2.056916863e-04f, -2.056365178e-04f,
+-2.055809981e-04f, -2.055251272e-04f, -2.054689054e-04f, -2.054123327e-04f, -2.053554093e-04f, -2.052981352e-04f, -2.052405107e-04f, -2.051825358e-04f, -2.051242107e-04f, -2.050655355e-04f,
+-2.050065103e-04f, -2.049471353e-04f, -2.048874105e-04f, -2.048273362e-04f, -2.047669124e-04f, -2.047061394e-04f, -2.046450171e-04f, -2.045835458e-04f, -2.045217255e-04f, -2.044595565e-04f,
+-2.043970388e-04f, -2.043341726e-04f, -2.042709581e-04f, -2.042073953e-04f, -2.041434844e-04f, -2.040792255e-04f, -2.040146188e-04f, -2.039496644e-04f, -2.038843625e-04f, -2.038187131e-04f,
+-2.037527165e-04f, -2.036863728e-04f, -2.036196821e-04f, -2.035526446e-04f, -2.034852603e-04f, -2.034175295e-04f, -2.033494523e-04f, -2.032810288e-04f, -2.032122592e-04f, -2.031431437e-04f,
+-2.030736823e-04f, -2.030038752e-04f, -2.029337226e-04f, -2.028632247e-04f, -2.027923815e-04f, -2.027211932e-04f, -2.026496600e-04f, -2.025777820e-04f, -2.025055593e-04f, -2.024329922e-04f,
+-2.023600808e-04f, -2.022868252e-04f, -2.022132256e-04f, -2.021392821e-04f, -2.020649949e-04f, -2.019903642e-04f, -2.019153900e-04f, -2.018400726e-04f, -2.017644122e-04f, -2.016884088e-04f,
+-2.016120626e-04f, -2.015353739e-04f, -2.014583427e-04f, -2.013809692e-04f, -2.013032535e-04f, -2.012251959e-04f, -2.011467966e-04f, -2.010680555e-04f, -2.009889730e-04f, -2.009095492e-04f,
+-2.008297842e-04f, -2.007496783e-04f, -2.006692315e-04f, -2.005884440e-04f, -2.005073161e-04f, -2.004258479e-04f, -2.003440395e-04f, -2.002618911e-04f, -2.001794029e-04f, -2.000965751e-04f,
+-2.000134078e-04f, -1.999299012e-04f, -1.998460554e-04f, -1.997618707e-04f, -1.996773472e-04f, -1.995924851e-04f, -1.995072845e-04f, -1.994217457e-04f, -1.993358688e-04f, -1.992496539e-04f,
+-1.991631013e-04f, -1.990762112e-04f, -1.989889836e-04f, -1.989014189e-04f, -1.988135171e-04f, -1.987252784e-04f, -1.986367031e-04f, -1.985477913e-04f, -1.984585431e-04f, -1.983689588e-04f,
+-1.982790386e-04f, -1.981887826e-04f, -1.980981910e-04f, -1.980072639e-04f, -1.979160017e-04f, -1.978244044e-04f, -1.977324723e-04f, -1.976402055e-04f, -1.975476042e-04f, -1.974546686e-04f,
+-1.973613990e-04f, -1.972677953e-04f, -1.971738580e-04f, -1.970795871e-04f, -1.969849828e-04f, -1.968900454e-04f, -1.967947750e-04f, -1.966991719e-04f, -1.966032361e-04f, -1.965069679e-04f,
+-1.964103675e-04f, -1.963134352e-04f, -1.962161709e-04f, -1.961185751e-04f, -1.960206478e-04f, -1.959223893e-04f, -1.958237998e-04f, -1.957248794e-04f, -1.956256283e-04f, -1.955260468e-04f,
+-1.954261351e-04f, -1.953258933e-04f, -1.952253217e-04f, -1.951244204e-04f, -1.950231896e-04f, -1.949216296e-04f, -1.948197406e-04f, -1.947175227e-04f, -1.946149761e-04f, -1.945121011e-04f,
+-1.944088979e-04f, -1.943053667e-04f, -1.942015076e-04f, -1.940973209e-04f, -1.939928067e-04f, -1.938879654e-04f, -1.937827971e-04f, -1.936773019e-04f, -1.935714802e-04f, -1.934653321e-04f,
+-1.933588579e-04f, -1.932520576e-04f, -1.931449317e-04f, -1.930374801e-04f, -1.929297033e-04f, -1.928216014e-04f, -1.927131745e-04f, -1.926044230e-04f, -1.924953469e-04f, -1.923859467e-04f,
+-1.922762223e-04f, -1.921661742e-04f, -1.920558024e-04f, -1.919451072e-04f, -1.918340889e-04f, -1.917227476e-04f, -1.916110835e-04f, -1.914990969e-04f, -1.913867880e-04f, -1.912741570e-04f,
+-1.911612042e-04f, -1.910479297e-04f, -1.909343337e-04f, -1.908204166e-04f, -1.907061785e-04f, -1.905916196e-04f, -1.904767402e-04f, -1.903615405e-04f, -1.902460207e-04f, -1.901301810e-04f,
+-1.900140217e-04f, -1.898975430e-04f, -1.897807451e-04f, -1.896636282e-04f, -1.895461926e-04f, -1.894284385e-04f, -1.893103662e-04f, -1.891919757e-04f, -1.890732675e-04f, -1.889542417e-04f,
+-1.888348986e-04f, -1.887152383e-04f, -1.885952611e-04f, -1.884749673e-04f, -1.883543571e-04f, -1.882334306e-04f, -1.881121882e-04f, -1.879906301e-04f, -1.878687565e-04f, -1.877465677e-04f,
+-1.876240638e-04f, -1.875012452e-04f, -1.873781120e-04f, -1.872546645e-04f, -1.871309030e-04f, -1.870068276e-04f, -1.868824387e-04f, -1.867577364e-04f, -1.866327210e-04f, -1.865073927e-04f,
+-1.863817518e-04f, -1.862557985e-04f, -1.861295331e-04f, -1.860029558e-04f, -1.858760668e-04f, -1.857488665e-04f, -1.856213549e-04f, -1.854935325e-04f, -1.853653994e-04f, -1.852369558e-04f,
+-1.851082021e-04f, -1.849791384e-04f, -1.848497651e-04f, -1.847200823e-04f, -1.845900903e-04f, -1.844597894e-04f, -1.843291798e-04f, -1.841982617e-04f, -1.840670355e-04f, -1.839355013e-04f,
+-1.838036595e-04f, -1.836715102e-04f, -1.835390537e-04f, -1.834062903e-04f, -1.832732202e-04f, -1.831398438e-04f, -1.830061611e-04f, -1.828721725e-04f, -1.827378783e-04f, -1.826032787e-04f,
+-1.824683740e-04f, -1.823331643e-04f, -1.821976501e-04f, -1.820618314e-04f, -1.819257087e-04f, -1.817892821e-04f, -1.816525520e-04f, -1.815155185e-04f, -1.813781819e-04f, -1.812405426e-04f,
+-1.811026006e-04f, -1.809643565e-04f, -1.808258103e-04f, -1.806869623e-04f, -1.805478128e-04f, -1.804083622e-04f, -1.802686105e-04f, -1.801285582e-04f, -1.799882054e-04f, -1.798475525e-04f,
+-1.797065997e-04f, -1.795653472e-04f, -1.794237954e-04f, -1.792819445e-04f, -1.791397948e-04f, -1.789973465e-04f, -1.788545999e-04f, -1.787115554e-04f, -1.785682130e-04f, -1.784245733e-04f,
+-1.782806363e-04f, -1.781364023e-04f, -1.779918718e-04f, -1.778470448e-04f, -1.777019218e-04f, -1.775565029e-04f, -1.774107884e-04f, -1.772647787e-04f, -1.771184739e-04f, -1.769718745e-04f,
+-1.768249806e-04f, -1.766777925e-04f, -1.765303105e-04f, -1.763825348e-04f, -1.762344659e-04f, -1.760861039e-04f, -1.759374491e-04f, -1.757885018e-04f, -1.756392622e-04f, -1.754897308e-04f,
+-1.753399076e-04f, -1.751897931e-04f, -1.750393875e-04f, -1.748886911e-04f, -1.747377042e-04f, -1.745864270e-04f, -1.744348599e-04f, -1.742830031e-04f, -1.741308569e-04f, -1.739784216e-04f,
+-1.738256975e-04f, -1.736726848e-04f, -1.735193839e-04f, -1.733657951e-04f, -1.732119186e-04f, -1.730577547e-04f, -1.729033037e-04f, -1.727485660e-04f, -1.725935417e-04f, -1.724382312e-04f,
+-1.722826348e-04f, -1.721267528e-04f, -1.719705854e-04f, -1.718141329e-04f, -1.716573958e-04f, -1.715003741e-04f, -1.713430683e-04f, -1.711854786e-04f, -1.710276053e-04f, -1.708694488e-04f,
+-1.707110092e-04f, -1.705522870e-04f, -1.703932824e-04f, -1.702339956e-04f, -1.700744271e-04f, -1.699145771e-04f, -1.697544459e-04f, -1.695940338e-04f, -1.694333410e-04f, -1.692723680e-04f,
+-1.691111150e-04f, -1.689495822e-04f, -1.687877701e-04f, -1.686256789e-04f, -1.684633088e-04f, -1.683006603e-04f, -1.681377336e-04f, -1.679745290e-04f, -1.678110468e-04f, -1.676472873e-04f,
+-1.674832509e-04f, -1.673189378e-04f, -1.671543484e-04f, -1.669894828e-04f, -1.668243416e-04f, -1.666589249e-04f, -1.664932331e-04f, -1.663272664e-04f, -1.661610252e-04f, -1.659945099e-04f,
+-1.658277206e-04f, -1.656606577e-04f, -1.654933216e-04f, -1.653257125e-04f, -1.651578308e-04f, -1.649896767e-04f, -1.648212506e-04f, -1.646525527e-04f, -1.644835835e-04f, -1.643143432e-04f,
+-1.641448321e-04f, -1.639750505e-04f, -1.638049988e-04f, -1.636346773e-04f, -1.634640862e-04f, -1.632932260e-04f, -1.631220969e-04f, -1.629506992e-04f, -1.627790332e-04f, -1.626070994e-04f,
+-1.624348979e-04f, -1.622624291e-04f, -1.620896934e-04f, -1.619166910e-04f, -1.617434223e-04f, -1.615698876e-04f, -1.613960872e-04f, -1.612220214e-04f, -1.610476905e-04f, -1.608730950e-04f,
+-1.606982350e-04f, -1.605231110e-04f, -1.603477232e-04f, -1.601720720e-04f, -1.599961577e-04f, -1.598199806e-04f, -1.596435410e-04f, -1.594668394e-04f, -1.592898759e-04f, -1.591126509e-04f,
+-1.589351648e-04f, -1.587574179e-04f, -1.585794105e-04f, -1.584011429e-04f, -1.582226155e-04f, -1.580438286e-04f, -1.578647825e-04f, -1.576854775e-04f, -1.575059141e-04f, -1.573260924e-04f,
+-1.571460129e-04f, -1.569656759e-04f, -1.567850817e-04f, -1.566042307e-04f, -1.564231231e-04f, -1.562417593e-04f, -1.560601397e-04f, -1.558782645e-04f, -1.556961342e-04f, -1.555137490e-04f,
+-1.553311093e-04f, -1.551482154e-04f, -1.549650677e-04f, -1.547816665e-04f, -1.545980121e-04f, -1.544141048e-04f, -1.542299451e-04f, -1.540455332e-04f, -1.538608695e-04f, -1.536759543e-04f,
+-1.534907880e-04f, -1.533053709e-04f, -1.531197033e-04f, -1.529337856e-04f, -1.527476182e-04f, -1.525612013e-04f, -1.523745353e-04f, -1.521876206e-04f, -1.520004574e-04f, -1.518130462e-04f,
+-1.516253873e-04f, -1.514374810e-04f, -1.512493277e-04f, -1.510609277e-04f, -1.508722813e-04f, -1.506833890e-04f, -1.504942510e-04f, -1.503048677e-04f, -1.501152395e-04f, -1.499253666e-04f,
+-1.497352495e-04f, -1.495448885e-04f, -1.493542839e-04f, -1.491634361e-04f, -1.489723455e-04f, -1.487810123e-04f, -1.485894370e-04f, -1.483976198e-04f, -1.482055612e-04f, -1.480132615e-04f,
+-1.478207210e-04f, -1.476279401e-04f, -1.474349191e-04f, -1.472416585e-04f, -1.470481585e-04f, -1.468544195e-04f, -1.466604418e-04f, -1.464662259e-04f, -1.462717720e-04f, -1.460770806e-04f,
+-1.458821519e-04f, -1.456869864e-04f, -1.454915843e-04f, -1.452959461e-04f, -1.451000721e-04f, -1.449039627e-04f, -1.447076182e-04f, -1.445110390e-04f, -1.443142254e-04f, -1.441171778e-04f,
+-1.439198965e-04f, -1.437223820e-04f, -1.435246345e-04f, -1.433266545e-04f, -1.431284422e-04f, -1.429299981e-04f, -1.427313226e-04f, -1.425324159e-04f, -1.423332784e-04f, -1.421339106e-04f,
+-1.419343127e-04f, -1.417344851e-04f, -1.415344283e-04f, -1.413341425e-04f, -1.411336281e-04f, -1.409328855e-04f, -1.407319151e-04f, -1.405307172e-04f, -1.403292922e-04f, -1.401276404e-04f,
+-1.399257622e-04f, -1.397236580e-04f, -1.395213282e-04f, -1.393187731e-04f, -1.391159931e-04f, -1.389129885e-04f, -1.387097598e-04f, -1.385063073e-04f, -1.383026313e-04f, -1.380987322e-04f,
+-1.378946105e-04f, -1.376902664e-04f, -1.374857004e-04f, -1.372809128e-04f, -1.370759040e-04f, -1.368706743e-04f, -1.366652242e-04f, -1.364595540e-04f, -1.362536641e-04f, -1.360475548e-04f,
+-1.358412265e-04f, -1.356346797e-04f, -1.354279146e-04f, -1.352209316e-04f, -1.350137312e-04f, -1.348063137e-04f, -1.345986795e-04f, -1.343908289e-04f, -1.341827624e-04f, -1.339744802e-04f,
+-1.337659829e-04f, -1.335572707e-04f, -1.333483440e-04f, -1.331392033e-04f, -1.329298488e-04f, -1.327202811e-04f, -1.325105004e-04f, -1.323005071e-04f, -1.320903016e-04f, -1.318798843e-04f,
+-1.316692556e-04f, -1.314584159e-04f, -1.312473655e-04f, -1.310361048e-04f, -1.308246342e-04f, -1.306129541e-04f, -1.304010649e-04f, -1.301889669e-04f, -1.299766606e-04f, -1.297641462e-04f,
+-1.295514243e-04f, -1.293384951e-04f, -1.291253592e-04f, -1.289120167e-04f, -1.286984682e-04f, -1.284847141e-04f, -1.282707546e-04f, -1.280565903e-04f, -1.278422214e-04f, -1.276276484e-04f,
+-1.274128717e-04f, -1.271978916e-04f, -1.269827085e-04f, -1.267673229e-04f, -1.265517350e-04f, -1.263359454e-04f, -1.261199544e-04f, -1.259037623e-04f, -1.256873696e-04f, -1.254707767e-04f,
+-1.252539839e-04f, -1.250369916e-04f, -1.248198003e-04f, -1.246024103e-04f, -1.243848220e-04f, -1.241670359e-04f, -1.239490522e-04f, -1.237308714e-04f, -1.235124939e-04f, -1.232939200e-04f,
+-1.230751503e-04f, -1.228561850e-04f, -1.226370245e-04f, -1.224176694e-04f, -1.221981198e-04f, -1.219783763e-04f, -1.217584393e-04f, -1.215383090e-04f, -1.213179860e-04f, -1.210974707e-04f,
+-1.208767633e-04f, -1.206558644e-04f, -1.204347743e-04f, -1.202134934e-04f, -1.199920221e-04f, -1.197703608e-04f, -1.195485099e-04f, -1.193264699e-04f, -1.191042410e-04f, -1.188818238e-04f,
+-1.186592185e-04f, -1.184364257e-04f, -1.182134456e-04f, -1.179902788e-04f, -1.177669256e-04f, -1.175433864e-04f, -1.173196616e-04f, -1.170957516e-04f, -1.168716568e-04f, -1.166473776e-04f,
+-1.164229145e-04f, -1.161982677e-04f, -1.159734378e-04f, -1.157484251e-04f, -1.155232301e-04f, -1.152978531e-04f, -1.150722945e-04f, -1.148465547e-04f, -1.146206342e-04f, -1.143945334e-04f,
+-1.141682526e-04f, -1.139417923e-04f, -1.137151528e-04f, -1.134883347e-04f, -1.132613382e-04f, -1.130341637e-04f, -1.128068118e-04f, -1.125792828e-04f, -1.123515771e-04f, -1.121236951e-04f,
+-1.118956373e-04f, -1.116674040e-04f, -1.114389956e-04f, -1.112104125e-04f, -1.109816553e-04f, -1.107527242e-04f, -1.105236197e-04f, -1.102943421e-04f, -1.100648920e-04f, -1.098352697e-04f,
+-1.096054756e-04f, -1.093755101e-04f, -1.091453737e-04f, -1.089150668e-04f, -1.086845897e-04f, -1.084539429e-04f, -1.082231267e-04f, -1.079921417e-04f, -1.077609882e-04f, -1.075296666e-04f,
+-1.072981774e-04f, -1.070665209e-04f, -1.068346976e-04f, -1.066027079e-04f, -1.063705522e-04f, -1.061382309e-04f, -1.059057445e-04f, -1.056730932e-04f, -1.054402777e-04f, -1.052072982e-04f,
+-1.049741552e-04f, -1.047408491e-04f, -1.045073803e-04f, -1.042737493e-04f, -1.040399564e-04f, -1.038060021e-04f, -1.035718868e-04f, -1.033376110e-04f, -1.031031749e-04f, -1.028685791e-04f,
+-1.026338239e-04f, -1.023989099e-04f, -1.021638373e-04f, -1.019286067e-04f, -1.016932184e-04f, -1.014576728e-04f, -1.012219705e-04f, -1.009861117e-04f, -1.007500969e-04f, -1.005139266e-04f,
+-1.002776012e-04f, -1.000411211e-04f, -9.980448660e-05f, -9.956769827e-05f, -9.933075649e-05f, -9.909366168e-05f, -9.885641426e-05f, -9.861901466e-05f, -9.838146329e-05f, -9.814376058e-05f,
+-9.790590695e-05f, -9.766790283e-05f, -9.742974864e-05f, -9.719144480e-05f, -9.695299174e-05f, -9.671438988e-05f, -9.647563964e-05f, -9.623674146e-05f, -9.599769575e-05f, -9.575850294e-05f,
+-9.551916346e-05f, -9.527967773e-05f, -9.504004618e-05f, -9.480026923e-05f, -9.456034731e-05f, -9.432028084e-05f, -9.408007026e-05f, -9.383971599e-05f, -9.359921845e-05f, -9.335857808e-05f,
+-9.311779530e-05f, -9.287687053e-05f, -9.263580422e-05f, -9.239459678e-05f, -9.215324864e-05f, -9.191176024e-05f, -9.167013200e-05f, -9.142836434e-05f, -9.118645771e-05f, -9.094441252e-05f,
+-9.070222921e-05f, -9.045990821e-05f, -9.021744995e-05f, -8.997485486e-05f, -8.973212336e-05f, -8.948925590e-05f, -8.924625289e-05f, -8.900311478e-05f, -8.875984198e-05f, -8.851643494e-05f,
+-8.827289409e-05f, -8.802921985e-05f, -8.778541266e-05f, -8.754147296e-05f, -8.729740117e-05f, -8.705319772e-05f, -8.680886305e-05f, -8.656439760e-05f, -8.631980179e-05f, -8.607507606e-05f,
+-8.583022084e-05f, -8.558523657e-05f, -8.534012367e-05f, -8.509488260e-05f, -8.484951377e-05f, -8.460401762e-05f, -8.435839459e-05f, -8.411264511e-05f, -8.386676962e-05f, -8.362076856e-05f,
+-8.337464235e-05f, -8.312839143e-05f, -8.288201625e-05f, -8.263551723e-05f, -8.238889481e-05f, -8.214214943e-05f, -8.189528153e-05f, -8.164829153e-05f, -8.140117989e-05f, -8.115394703e-05f,
+-8.090659339e-05f, -8.065911941e-05f, -8.041152553e-05f, -8.016381218e-05f, -7.991597981e-05f, -7.966802885e-05f, -7.941995973e-05f, -7.917177291e-05f, -7.892346881e-05f, -7.867504788e-05f,
+-7.842651055e-05f, -7.817785726e-05f, -7.792908845e-05f, -7.768020457e-05f, -7.743120605e-05f, -7.718209333e-05f, -7.693286685e-05f, -7.668352705e-05f, -7.643407438e-05f, -7.618450926e-05f,
+-7.593483215e-05f, -7.568504348e-05f, -7.543514369e-05f, -7.518513323e-05f, -7.493501253e-05f, -7.468478204e-05f, -7.443444221e-05f, -7.418399346e-05f, -7.393343624e-05f, -7.368277100e-05f,
+-7.343199817e-05f, -7.318111820e-05f, -7.293013154e-05f, -7.267903861e-05f, -7.242783988e-05f, -7.217653577e-05f, -7.192512674e-05f, -7.167361322e-05f, -7.142199566e-05f, -7.117027450e-05f,
+-7.091845018e-05f, -7.066652316e-05f, -7.041449387e-05f, -7.016236275e-05f, -6.991013026e-05f, -6.965779684e-05f, -6.940536292e-05f, -6.915282896e-05f, -6.890019540e-05f, -6.864746268e-05f,
+-6.839463125e-05f, -6.814170156e-05f, -6.788867404e-05f, -6.763554915e-05f, -6.738232733e-05f, -6.712900903e-05f, -6.687559469e-05f, -6.662208476e-05f, -6.636847968e-05f, -6.611477990e-05f,
+-6.586098587e-05f, -6.560709803e-05f, -6.535311683e-05f, -6.509904271e-05f, -6.484487613e-05f, -6.459061753e-05f, -6.433626736e-05f, -6.408182606e-05f, -6.382729408e-05f, -6.357267187e-05f,
+-6.331795987e-05f, -6.306315854e-05f, -6.280826833e-05f, -6.255328967e-05f, -6.229822302e-05f, -6.204306882e-05f, -6.178782753e-05f, -6.153249960e-05f, -6.127708546e-05f, -6.102158557e-05f,
+-6.076600038e-05f, -6.051033034e-05f, -6.025457590e-05f, -5.999873750e-05f, -5.974281559e-05f, -5.948681063e-05f, -5.923072306e-05f, -5.897455333e-05f, -5.871830189e-05f, -5.846196920e-05f,
+-5.820555570e-05f, -5.794906184e-05f, -5.769248807e-05f, -5.743583484e-05f, -5.717910260e-05f, -5.692229181e-05f, -5.666540291e-05f, -5.640843635e-05f, -5.615139258e-05f, -5.589427206e-05f,
+-5.563707524e-05f, -5.537980256e-05f, -5.512245447e-05f, -5.486503144e-05f, -5.460753390e-05f, -5.434996232e-05f, -5.409231713e-05f, -5.383459880e-05f, -5.357680778e-05f, -5.331894451e-05f,
+-5.306100945e-05f, -5.280300305e-05f, -5.254492576e-05f, -5.228677804e-05f, -5.202856033e-05f, -5.177027309e-05f, -5.151191677e-05f, -5.125349182e-05f, -5.099499870e-05f, -5.073643785e-05f,
+-5.047780974e-05f, -5.021911481e-05f, -4.996035352e-05f, -4.970152631e-05f, -4.944263364e-05f, -4.918367597e-05f, -4.892465375e-05f, -4.866556743e-05f, -4.840641746e-05f, -4.814720430e-05f,
+-4.788792840e-05f, -4.762859021e-05f, -4.736919019e-05f, -4.710972879e-05f, -4.685020647e-05f, -4.659062367e-05f, -4.633098085e-05f, -4.607127848e-05f, -4.581151699e-05f, -4.555169684e-05f,
+-4.529181850e-05f, -4.503188240e-05f, -4.477188901e-05f, -4.451183878e-05f, -4.425173217e-05f, -4.399156963e-05f, -4.373135160e-05f, -4.347107856e-05f, -4.321075095e-05f, -4.295036922e-05f,
+-4.268993384e-05f, -4.242944526e-05f, -4.216890392e-05f, -4.190831029e-05f, -4.164766482e-05f, -4.138696797e-05f, -4.112622019e-05f, -4.086542193e-05f, -4.060457366e-05f, -4.034367582e-05f,
+-4.008272887e-05f, -3.982173327e-05f, -3.956068947e-05f, -3.929959793e-05f, -3.903845910e-05f, -3.877727344e-05f, -3.851604140e-05f, -3.825476344e-05f, -3.799344001e-05f, -3.773207158e-05f,
+-3.747065859e-05f, -3.720920150e-05f, -3.694770077e-05f, -3.668615685e-05f, -3.642457020e-05f, -3.616294128e-05f, -3.590127053e-05f, -3.563955842e-05f, -3.537780541e-05f, -3.511601194e-05f,
+-3.485417847e-05f, -3.459230547e-05f, -3.433039338e-05f, -3.406844267e-05f, -3.380645378e-05f, -3.354442718e-05f, -3.328236332e-05f, -3.302026265e-05f, -3.275812564e-05f, -3.249595274e-05f,
+-3.223374441e-05f, -3.197150110e-05f, -3.170922327e-05f, -3.144691137e-05f, -3.118456586e-05f, -3.092218720e-05f, -3.065977585e-05f, -3.039733226e-05f, -3.013485688e-05f, -2.987235018e-05f,
+-2.960981261e-05f, -2.934724462e-05f, -2.908464668e-05f, -2.882201924e-05f, -2.855936276e-05f, -2.829667769e-05f, -2.803396449e-05f, -2.777122361e-05f, -2.750845552e-05f, -2.724566067e-05f,
+-2.698283952e-05f, -2.671999252e-05f, -2.645712013e-05f, -2.619422280e-05f, -2.593130100e-05f, -2.566835518e-05f, -2.540538579e-05f, -2.514239330e-05f, -2.487937816e-05f, -2.461634083e-05f,
+-2.435328176e-05f, -2.409020141e-05f, -2.382710023e-05f, -2.356397869e-05f, -2.330083725e-05f, -2.303767634e-05f, -2.277449645e-05f, -2.251129801e-05f, -2.224808149e-05f, -2.198484734e-05f,
+-2.172159603e-05f, -2.145832800e-05f, -2.119504372e-05f, -2.093174363e-05f, -2.066842821e-05f, -2.040509790e-05f, -2.014175316e-05f, -1.987839445e-05f, -1.961502222e-05f, -1.935163693e-05f,
+-1.908823904e-05f, -1.882482900e-05f, -1.856140728e-05f, -1.829797432e-05f, -1.803453058e-05f, -1.777107653e-05f, -1.750761261e-05f, -1.724413928e-05f, -1.698065701e-05f, -1.671716623e-05f,
+-1.645366743e-05f, -1.619016104e-05f, -1.592664752e-05f, -1.566312734e-05f, -1.539960095e-05f, -1.513606880e-05f, -1.487253135e-05f, -1.460898905e-05f, -1.434544237e-05f, -1.408189176e-05f,
+-1.381833768e-05f, -1.355478057e-05f, -1.329122091e-05f, -1.302765913e-05f, -1.276409571e-05f, -1.250053109e-05f, -1.223696574e-05f, -1.197340010e-05f, -1.170983463e-05f, -1.144626980e-05f,
+-1.118270604e-05f, -1.091914383e-05f, -1.065558362e-05f, -1.039202586e-05f, -1.012847101e-05f, -9.864919520e-06f, -9.601371850e-06f, -9.337828455e-06f, -9.074289791e-06f, -8.810756313e-06f,
+-8.547228475e-06f, -8.283706735e-06f, -8.020191546e-06f, -7.756683365e-06f, -7.493182645e-06f, -7.229689844e-06f, -6.966205415e-06f, -6.702729814e-06f, -6.439263496e-06f, -6.175806916e-06f,
+-5.912360528e-06f, -5.648924788e-06f, -5.385500151e-06f, -5.122087070e-06f, -4.858686002e-06f, -4.595297400e-06f, -4.331921719e-06f, -4.068559413e-06f, -3.805210938e-06f, -3.541876747e-06f,
+-3.278557296e-06f, -3.015253037e-06f, -2.751964426e-06f, -2.488691916e-06f, -2.225435961e-06f, -1.962197017e-06f, -1.698975536e-06f, -1.435771973e-06f, -1.172586781e-06f, -9.094204137e-07f,
+-6.462733257e-07f, -3.831459700e-07f, -1.200388005e-07f, 1.430477296e-07f, 4.061131668e-07f, 6.691570577e-07f, 9.321789490e-07f, 1.195178388e-06f, 1.458154920e-06f, 1.721108094e-06f,
+1.984037456e-06f, 2.246942553e-06f, 2.509822933e-06f, 2.772678142e-06f, 3.035507729e-06f, 3.298311239e-06f, 3.561088222e-06f, 3.823838224e-06f, 4.086560794e-06f, 4.349255478e-06f,
+4.611921825e-06f, 4.874559383e-06f, 5.137167700e-06f, 5.399746323e-06f, 5.662294801e-06f, 5.924812683e-06f, 6.187299516e-06f, 6.449754849e-06f, 6.712178231e-06f, 6.974569210e-06f,
+7.236927335e-06f, 7.499252155e-06f, 7.761543218e-06f, 8.023800074e-06f, 8.286022271e-06f, 8.548209360e-06f, 8.810360889e-06f, 9.072476407e-06f, 9.334555465e-06f, 9.596597611e-06f,
+9.858602395e-06f, 1.012056937e-05f, 1.038249808e-05f, 1.064438808e-05f, 1.090623891e-05f, 1.116805014e-05f, 1.142982130e-05f, 1.169155195e-05f, 1.195324165e-05f, 1.221488993e-05f,
+1.247649635e-05f, 1.273806046e-05f, 1.299958182e-05f, 1.326105997e-05f, 1.352249447e-05f, 1.378388486e-05f, 1.404523070e-05f, 1.430653153e-05f, 1.456778692e-05f, 1.482899641e-05f,
+1.509015955e-05f, 1.535127590e-05f, 1.561234501e-05f, 1.587336643e-05f, 1.613433971e-05f, 1.639526440e-05f, 1.665614007e-05f, 1.691696625e-05f, 1.717774251e-05f, 1.743846839e-05f,
+1.769914345e-05f, 1.795976724e-05f, 1.822033932e-05f, 1.848085923e-05f, 1.874132654e-05f, 1.900174080e-05f, 1.926210155e-05f, 1.952240836e-05f, 1.978266077e-05f, 2.004285835e-05f,
+2.030300064e-05f, 2.056308720e-05f, 2.082311759e-05f, 2.108309136e-05f, 2.134300806e-05f, 2.160286725e-05f, 2.186266848e-05f, 2.212241132e-05f, 2.238209531e-05f, 2.264172001e-05f,
+2.290128498e-05f, 2.316078977e-05f, 2.342023393e-05f, 2.367961703e-05f, 2.393893862e-05f, 2.419819826e-05f, 2.445739550e-05f, 2.471652990e-05f, 2.497560102e-05f, 2.523460841e-05f,
+2.549355162e-05f, 2.575243023e-05f, 2.601124378e-05f, 2.626999184e-05f, 2.652867395e-05f, 2.678728968e-05f, 2.704583859e-05f, 2.730432023e-05f, 2.756273416e-05f, 2.782107995e-05f,
+2.807935714e-05f, 2.833756530e-05f, 2.859570399e-05f, 2.885377276e-05f, 2.911177118e-05f, 2.936969880e-05f, 2.962755518e-05f, 2.988533989e-05f, 3.014305248e-05f, 3.040069252e-05f,
+3.065825955e-05f, 3.091575315e-05f, 3.117317288e-05f, 3.143051829e-05f, 3.168778894e-05f, 3.194498440e-05f, 3.220210423e-05f, 3.245914798e-05f, 3.271611523e-05f, 3.297300552e-05f,
+3.322981843e-05f, 3.348655352e-05f, 3.374321034e-05f, 3.399978846e-05f, 3.425628745e-05f, 3.451270686e-05f, 3.476904625e-05f, 3.502530520e-05f, 3.528148326e-05f, 3.553757999e-05f,
+3.579359497e-05f, 3.604952775e-05f, 3.630537790e-05f, 3.656114498e-05f, 3.681682856e-05f, 3.707242819e-05f, 3.732794346e-05f, 3.758337391e-05f, 3.783871911e-05f, 3.809397864e-05f,
+3.834915205e-05f, 3.860423891e-05f, 3.885923879e-05f, 3.911415125e-05f, 3.936897585e-05f, 3.962371217e-05f, 3.987835978e-05f, 4.013291822e-05f, 4.038738709e-05f, 4.064176593e-05f,
+4.089605432e-05f, 4.115025183e-05f, 4.140435802e-05f, 4.165837246e-05f, 4.191229471e-05f, 4.216612436e-05f, 4.241986096e-05f, 4.267350408e-05f, 4.292705330e-05f, 4.318050817e-05f,
+4.343386828e-05f, 4.368713318e-05f, 4.394030246e-05f, 4.419337567e-05f, 4.444635239e-05f, 4.469923219e-05f, 4.495201464e-05f, 4.520469931e-05f, 4.545728576e-05f, 4.570977358e-05f,
+4.596216233e-05f, 4.621445159e-05f, 4.646664091e-05f, 4.671872989e-05f, 4.697071808e-05f, 4.722260506e-05f, 4.747439041e-05f, 4.772607369e-05f, 4.797765448e-05f, 4.822913235e-05f,
+4.848050688e-05f, 4.873177763e-05f, 4.898294419e-05f, 4.923400612e-05f, 4.948496300e-05f, 4.973581440e-05f, 4.998655990e-05f, 5.023719907e-05f, 5.048773149e-05f, 5.073815674e-05f,
+5.098847438e-05f, 5.123868399e-05f, 5.148878516e-05f, 5.173877745e-05f, 5.198866044e-05f, 5.223843371e-05f, 5.248809684e-05f, 5.273764939e-05f, 5.298709096e-05f, 5.323642111e-05f,
+5.348563942e-05f, 5.373474548e-05f, 5.398373886e-05f, 5.423261913e-05f, 5.448138588e-05f, 5.473003869e-05f, 5.497857713e-05f, 5.522700078e-05f, 5.547530922e-05f, 5.572350204e-05f,
+5.597157881e-05f, 5.621953911e-05f, 5.646738253e-05f, 5.671510864e-05f, 5.696271702e-05f, 5.721020725e-05f, 5.745757893e-05f, 5.770483162e-05f, 5.795196491e-05f, 5.819897838e-05f,
+5.844587162e-05f, 5.869264420e-05f, 5.893929571e-05f, 5.918582574e-05f, 5.943223386e-05f, 5.967851965e-05f, 5.992468272e-05f, 6.017072262e-05f, 6.041663896e-05f, 6.066243131e-05f,
+6.090809927e-05f, 6.115364240e-05f, 6.139906031e-05f, 6.164435257e-05f, 6.188951878e-05f, 6.213455851e-05f, 6.237947135e-05f, 6.262425690e-05f, 6.286891473e-05f, 6.311344443e-05f,
+6.335784560e-05f, 6.360211781e-05f, 6.384626066e-05f, 6.409027373e-05f, 6.433415661e-05f, 6.457790890e-05f, 6.482153017e-05f, 6.506502002e-05f, 6.530837804e-05f, 6.555160382e-05f,
+6.579469694e-05f, 6.603765700e-05f, 6.628048359e-05f, 6.652317630e-05f, 6.676573471e-05f, 6.700815842e-05f, 6.725044703e-05f, 6.749260011e-05f, 6.773461728e-05f, 6.797649810e-05f,
+6.821824219e-05f, 6.845984913e-05f, 6.870131852e-05f, 6.894264994e-05f, 6.918384299e-05f, 6.942489727e-05f, 6.966581237e-05f, 6.990658789e-05f, 7.014722341e-05f, 7.038771853e-05f,
+7.062807286e-05f, 7.086828598e-05f, 7.110835748e-05f, 7.134828698e-05f, 7.158807405e-05f, 7.182771831e-05f, 7.206721934e-05f, 7.230657674e-05f, 7.254579011e-05f, 7.278485905e-05f,
+7.302378315e-05f, 7.326256202e-05f, 7.350119525e-05f, 7.373968245e-05f, 7.397802320e-05f, 7.421621711e-05f, 7.445426378e-05f, 7.469216281e-05f, 7.492991380e-05f, 7.516751635e-05f,
+7.540497006e-05f, 7.564227453e-05f, 7.587942936e-05f, 7.611643416e-05f, 7.635328853e-05f, 7.658999206e-05f, 7.682654437e-05f, 7.706294505e-05f, 7.729919371e-05f, 7.753528995e-05f,
+7.777123337e-05f, 7.800702359e-05f, 7.824266019e-05f, 7.847814280e-05f, 7.871347100e-05f, 7.894864442e-05f, 7.918366265e-05f, 7.941852529e-05f, 7.965323197e-05f, 7.988778227e-05f,
+8.012217581e-05f, 8.035641220e-05f, 8.059049104e-05f, 8.082441194e-05f, 8.105817451e-05f, 8.129177835e-05f, 8.152522309e-05f, 8.175850831e-05f, 8.199163364e-05f, 8.222459868e-05f,
+8.245740304e-05f, 8.269004633e-05f, 8.292252817e-05f, 8.315484816e-05f, 8.338700592e-05f, 8.361900105e-05f, 8.385083317e-05f, 8.408250189e-05f, 8.431400681e-05f, 8.454534757e-05f,
+8.477652376e-05f, 8.500753500e-05f, 8.523838091e-05f, 8.546906109e-05f, 8.569957516e-05f, 8.592992274e-05f, 8.616010344e-05f, 8.639011688e-05f, 8.661996267e-05f, 8.684964043e-05f,
+8.707914977e-05f, 8.730849031e-05f, 8.753766167e-05f, 8.776666346e-05f, 8.799549530e-05f, 8.822415681e-05f, 8.845264760e-05f, 8.868096731e-05f, 8.890911553e-05f, 8.913709190e-05f,
+8.936489603e-05f, 8.959252754e-05f, 8.981998605e-05f, 9.004727119e-05f, 9.027438256e-05f, 9.050131981e-05f, 9.072808253e-05f, 9.095467036e-05f, 9.118108292e-05f, 9.140731984e-05f,
+9.163338072e-05f, 9.185926520e-05f, 9.208497290e-05f, 9.231050344e-05f, 9.253585645e-05f, 9.276103156e-05f, 9.298602838e-05f, 9.321084654e-05f, 9.343548566e-05f, 9.365994538e-05f,
+9.388422532e-05f, 9.410832510e-05f, 9.433224435e-05f, 9.455598270e-05f, 9.477953977e-05f, 9.500291520e-05f, 9.522610861e-05f, 9.544911963e-05f, 9.567194789e-05f, 9.589459302e-05f,
+9.611705464e-05f, 9.633933239e-05f, 9.656142589e-05f, 9.678333479e-05f, 9.700505870e-05f, 9.722659726e-05f, 9.744795010e-05f, 9.766911686e-05f, 9.789009716e-05f, 9.811089064e-05f,
+9.833149693e-05f, 9.855191566e-05f, 9.877214647e-05f, 9.899218899e-05f, 9.921204286e-05f, 9.943170770e-05f, 9.965118317e-05f, 9.987046888e-05f, 1.000895645e-04f, 1.003084696e-04f,
+1.005271839e-04f, 1.007457070e-04f, 1.009640385e-04f, 1.011821781e-04f, 1.014001254e-04f, 1.016178800e-04f, 1.018354416e-04f, 1.020528099e-04f, 1.022699844e-04f, 1.024869648e-04f,
+1.027037508e-04f, 1.029203419e-04f, 1.031367379e-04f, 1.033529383e-04f, 1.035689429e-04f, 1.037847512e-04f, 1.040003629e-04f, 1.042157776e-04f, 1.044309950e-04f, 1.046460147e-04f,
+1.048608364e-04f, 1.050754597e-04f, 1.052898843e-04f, 1.055041097e-04f, 1.057181357e-04f, 1.059319619e-04f, 1.061455880e-04f, 1.063590135e-04f, 1.065722381e-04f, 1.067852615e-04f,
+1.069980834e-04f, 1.072107033e-04f, 1.074231209e-04f, 1.076353359e-04f, 1.078473479e-04f, 1.080591566e-04f, 1.082707616e-04f, 1.084821626e-04f, 1.086933591e-04f, 1.089043510e-04f,
+1.091151378e-04f, 1.093257191e-04f, 1.095360947e-04f, 1.097462641e-04f, 1.099562271e-04f, 1.101659832e-04f, 1.103755322e-04f, 1.105848737e-04f, 1.107940073e-04f, 1.110029328e-04f,
+1.112116496e-04f, 1.114201576e-04f, 1.116284564e-04f, 1.118365456e-04f, 1.120444248e-04f, 1.122520938e-04f, 1.124595522e-04f, 1.126667996e-04f, 1.128738358e-04f, 1.130806603e-04f,
+1.132872728e-04f, 1.134936730e-04f, 1.136998606e-04f, 1.139058352e-04f, 1.141115964e-04f, 1.143171440e-04f, 1.145224776e-04f, 1.147275968e-04f, 1.149325013e-04f, 1.151371908e-04f,
+1.153416650e-04f, 1.155459234e-04f, 1.157499659e-04f, 1.159537919e-04f, 1.161574013e-04f, 1.163607936e-04f, 1.165639685e-04f, 1.167669257e-04f, 1.169696649e-04f, 1.171721857e-04f,
+1.173744878e-04f, 1.175765709e-04f, 1.177784346e-04f, 1.179800785e-04f, 1.181815025e-04f, 1.183827061e-04f, 1.185836890e-04f, 1.187844508e-04f, 1.189849913e-04f, 1.191853101e-04f,
+1.193854069e-04f, 1.195852814e-04f, 1.197849332e-04f, 1.199843620e-04f, 1.201835674e-04f, 1.203825492e-04f, 1.205813071e-04f, 1.207798406e-04f, 1.209781495e-04f, 1.211762334e-04f,
+1.213740921e-04f, 1.215717251e-04f, 1.217691322e-04f, 1.219663131e-04f, 1.221632674e-04f, 1.223599948e-04f, 1.225564949e-04f, 1.227527676e-04f, 1.229488123e-04f, 1.231446289e-04f,
+1.233402170e-04f, 1.235355762e-04f, 1.237307063e-04f, 1.239256070e-04f, 1.241202778e-04f, 1.243147186e-04f, 1.245089289e-04f, 1.247029085e-04f, 1.248966571e-04f, 1.250901742e-04f,
+1.252834597e-04f, 1.254765132e-04f, 1.256693344e-04f, 1.258619229e-04f, 1.260542785e-04f, 1.262464008e-04f, 1.264382895e-04f, 1.266299444e-04f, 1.268213650e-04f, 1.270125511e-04f,
+1.272035024e-04f, 1.273942186e-04f, 1.275846993e-04f, 1.277749442e-04f, 1.279649531e-04f, 1.281547256e-04f, 1.283442614e-04f, 1.285335602e-04f, 1.287226217e-04f, 1.289114456e-04f,
+1.291000315e-04f, 1.292883793e-04f, 1.294764884e-04f, 1.296643588e-04f, 1.298519900e-04f, 1.300393817e-04f, 1.302265337e-04f, 1.304134456e-04f, 1.306001171e-04f, 1.307865480e-04f,
+1.309727379e-04f, 1.311586865e-04f, 1.313443935e-04f, 1.315298586e-04f, 1.317150816e-04f, 1.319000620e-04f, 1.320847997e-04f, 1.322692943e-04f, 1.324535455e-04f, 1.326375530e-04f,
+1.328213165e-04f, 1.330048357e-04f, 1.331881104e-04f, 1.333711401e-04f, 1.335539247e-04f, 1.337364639e-04f, 1.339187572e-04f, 1.341008045e-04f, 1.342826054e-04f, 1.344641597e-04f,
+1.346454670e-04f, 1.348265271e-04f, 1.350073396e-04f, 1.351879043e-04f, 1.353682209e-04f, 1.355482890e-04f, 1.357281085e-04f, 1.359076789e-04f, 1.360870001e-04f, 1.362660717e-04f,
+1.364448934e-04f, 1.366234649e-04f, 1.368017860e-04f, 1.369798564e-04f, 1.371576757e-04f, 1.373352438e-04f, 1.375125602e-04f, 1.376896247e-04f, 1.378664371e-04f, 1.380429970e-04f,
+1.382193042e-04f, 1.383953583e-04f, 1.385711591e-04f, 1.387467063e-04f, 1.389219997e-04f, 1.390970389e-04f, 1.392718236e-04f, 1.394463536e-04f, 1.396206286e-04f, 1.397946483e-04f,
+1.399684124e-04f, 1.401419207e-04f, 1.403151729e-04f, 1.404881686e-04f, 1.406609076e-04f, 1.408333897e-04f, 1.410056145e-04f, 1.411775819e-04f, 1.413492914e-04f, 1.415207428e-04f,
+1.416919359e-04f, 1.418628703e-04f, 1.420335459e-04f, 1.422039622e-04f, 1.423741191e-04f, 1.425440163e-04f, 1.427136535e-04f, 1.428830304e-04f, 1.430521468e-04f, 1.432210023e-04f,
+1.433895968e-04f, 1.435579299e-04f, 1.437260014e-04f, 1.438938110e-04f, 1.440613584e-04f, 1.442286434e-04f, 1.443956656e-04f, 1.445624249e-04f, 1.447289210e-04f, 1.448951535e-04f,
+1.450611223e-04f, 1.452268270e-04f, 1.453922674e-04f, 1.455574433e-04f, 1.457223543e-04f, 1.458870002e-04f, 1.460513808e-04f, 1.462154957e-04f, 1.463793447e-04f, 1.465429276e-04f,
+1.467062440e-04f, 1.468692938e-04f, 1.470320767e-04f, 1.471945923e-04f, 1.473568405e-04f, 1.475188210e-04f, 1.476805335e-04f, 1.478419778e-04f, 1.480031536e-04f, 1.481640606e-04f,
+1.483246987e-04f, 1.484850674e-04f, 1.486451667e-04f, 1.488049961e-04f, 1.489645556e-04f, 1.491238448e-04f, 1.492828634e-04f, 1.494416112e-04f, 1.496000880e-04f, 1.497582935e-04f,
+1.499162275e-04f, 1.500738896e-04f, 1.502312797e-04f, 1.503883975e-04f, 1.505452428e-04f, 1.507018152e-04f, 1.508581146e-04f, 1.510141407e-04f, 1.511698932e-04f, 1.513253720e-04f,
+1.514805767e-04f, 1.516355071e-04f, 1.517901630e-04f, 1.519445441e-04f, 1.520986502e-04f, 1.522524810e-04f, 1.524060363e-04f, 1.525593159e-04f, 1.527123194e-04f, 1.528650467e-04f,
+1.530174975e-04f, 1.531696716e-04f, 1.533215687e-04f, 1.534731886e-04f, 1.536245311e-04f, 1.537755959e-04f, 1.539263827e-04f, 1.540768914e-04f, 1.542271216e-04f, 1.543770732e-04f,
+1.545267460e-04f, 1.546761396e-04f, 1.548252539e-04f, 1.549740886e-04f, 1.551226434e-04f, 1.552709182e-04f, 1.554189127e-04f, 1.555666267e-04f, 1.557140599e-04f, 1.558612121e-04f,
+1.560080831e-04f, 1.561546727e-04f, 1.563009805e-04f, 1.564470065e-04f, 1.565927503e-04f, 1.567382117e-04f, 1.568833905e-04f, 1.570282864e-04f, 1.571728993e-04f, 1.573172290e-04f,
+1.574612750e-04f, 1.576050374e-04f, 1.577485158e-04f, 1.578917099e-04f, 1.580346197e-04f, 1.581772448e-04f, 1.583195851e-04f, 1.584616402e-04f, 1.586034100e-04f, 1.587448943e-04f,
+1.588860928e-04f, 1.590270054e-04f, 1.591676317e-04f, 1.593079716e-04f, 1.594480249e-04f, 1.595877913e-04f, 1.597272706e-04f, 1.598664627e-04f, 1.600053672e-04f, 1.601439839e-04f,
+1.602823127e-04f, 1.604203534e-04f, 1.605581056e-04f, 1.606955693e-04f, 1.608327441e-04f, 1.609696299e-04f, 1.611062265e-04f, 1.612425336e-04f, 1.613785511e-04f, 1.615142786e-04f,
+1.616497161e-04f, 1.617848632e-04f, 1.619197199e-04f, 1.620542858e-04f, 1.621885608e-04f, 1.623225446e-04f, 1.624562371e-04f, 1.625896380e-04f, 1.627227472e-04f, 1.628555644e-04f,
+1.629880894e-04f, 1.631203220e-04f, 1.632522620e-04f, 1.633839092e-04f, 1.635152634e-04f, 1.636463244e-04f, 1.637770920e-04f, 1.639075660e-04f, 1.640377462e-04f, 1.641676323e-04f,
+1.642972242e-04f, 1.644265218e-04f, 1.645555247e-04f, 1.646842327e-04f, 1.648126458e-04f, 1.649407636e-04f, 1.650685861e-04f, 1.651961129e-04f, 1.653233439e-04f, 1.654502789e-04f,
+1.655769177e-04f, 1.657032601e-04f, 1.658293059e-04f, 1.659550549e-04f, 1.660805069e-04f, 1.662056618e-04f, 1.663305193e-04f, 1.664550792e-04f, 1.665793414e-04f, 1.667033057e-04f,
+1.668269718e-04f, 1.669503396e-04f, 1.670734088e-04f, 1.671961794e-04f, 1.673186511e-04f, 1.674408237e-04f, 1.675626971e-04f, 1.676842709e-04f, 1.678055452e-04f, 1.679265196e-04f,
+1.680471940e-04f, 1.681675682e-04f, 1.682876421e-04f, 1.684074154e-04f, 1.685268879e-04f, 1.686460595e-04f, 1.687649300e-04f, 1.688834992e-04f, 1.690017669e-04f, 1.691197329e-04f,
+1.692373972e-04f, 1.693547594e-04f, 1.694718194e-04f, 1.695885771e-04f, 1.697050322e-04f, 1.698211845e-04f, 1.699370340e-04f, 1.700525804e-04f, 1.701678235e-04f, 1.702827632e-04f,
+1.703973993e-04f, 1.705117316e-04f, 1.706257600e-04f, 1.707394842e-04f, 1.708529042e-04f, 1.709660196e-04f, 1.710788305e-04f, 1.711913365e-04f, 1.713035375e-04f, 1.714154334e-04f,
+1.715270239e-04f, 1.716383090e-04f, 1.717492884e-04f, 1.718599620e-04f, 1.719703295e-04f, 1.720803910e-04f, 1.721901461e-04f, 1.722995947e-04f, 1.724087366e-04f, 1.725175717e-04f,
+1.726260999e-04f, 1.727343209e-04f, 1.728422345e-04f, 1.729498407e-04f, 1.730571393e-04f, 1.731641301e-04f, 1.732708129e-04f, 1.733771876e-04f, 1.734832540e-04f, 1.735890120e-04f,
+1.736944614e-04f, 1.737996021e-04f, 1.739044338e-04f, 1.740089565e-04f, 1.741131699e-04f, 1.742170740e-04f, 1.743206685e-04f, 1.744239534e-04f, 1.745269284e-04f, 1.746295934e-04f,
+1.747319483e-04f, 1.748339929e-04f, 1.749357270e-04f, 1.750371505e-04f, 1.751382633e-04f, 1.752390651e-04f, 1.753395559e-04f, 1.754397356e-04f, 1.755396038e-04f, 1.756391606e-04f,
+1.757384057e-04f, 1.758373390e-04f, 1.759359604e-04f, 1.760342697e-04f, 1.761322668e-04f, 1.762299515e-04f, 1.763273236e-04f, 1.764243832e-04f, 1.765211299e-04f, 1.766175636e-04f,
+1.767136843e-04f, 1.768094917e-04f, 1.769049858e-04f, 1.770001664e-04f, 1.770950333e-04f, 1.771895864e-04f, 1.772838256e-04f, 1.773777507e-04f, 1.774713616e-04f, 1.775646582e-04f,
+1.776576403e-04f, 1.777503078e-04f, 1.778426605e-04f, 1.779346984e-04f, 1.780264212e-04f, 1.781178289e-04f, 1.782089213e-04f, 1.782996983e-04f, 1.783901598e-04f, 1.784803055e-04f,
+1.785701355e-04f, 1.786596495e-04f, 1.787488474e-04f, 1.788377292e-04f, 1.789262946e-04f, 1.790145435e-04f, 1.791024759e-04f, 1.791900916e-04f, 1.792773904e-04f, 1.793643722e-04f,
+1.794510370e-04f, 1.795373846e-04f, 1.796234148e-04f, 1.797091276e-04f, 1.797945228e-04f, 1.798796003e-04f, 1.799643599e-04f, 1.800488016e-04f, 1.801329252e-04f, 1.802167307e-04f,
+1.803002178e-04f, 1.803833865e-04f, 1.804662367e-04f, 1.805487682e-04f, 1.806309809e-04f, 1.807128748e-04f, 1.807944496e-04f, 1.808757052e-04f, 1.809566417e-04f, 1.810372587e-04f,
+1.811175563e-04f, 1.811975343e-04f, 1.812771927e-04f, 1.813565312e-04f, 1.814355497e-04f, 1.815142483e-04f, 1.815926267e-04f, 1.816706848e-04f, 1.817484226e-04f, 1.818258399e-04f,
+1.819029366e-04f, 1.819797126e-04f, 1.820561678e-04f, 1.821323021e-04f, 1.822081154e-04f, 1.822836076e-04f, 1.823587786e-04f, 1.824336283e-04f, 1.825081565e-04f, 1.825823632e-04f,
+1.826562482e-04f, 1.827298115e-04f, 1.828030530e-04f, 1.828759725e-04f, 1.829485700e-04f, 1.830208453e-04f, 1.830927984e-04f, 1.831644292e-04f, 1.832357375e-04f, 1.833067233e-04f,
+1.833773865e-04f, 1.834477269e-04f, 1.835177445e-04f, 1.835874392e-04f, 1.836568109e-04f, 1.837258595e-04f, 1.837945849e-04f, 1.838629869e-04f, 1.839310656e-04f, 1.839988208e-04f,
+1.840662524e-04f, 1.841333604e-04f, 1.842001446e-04f, 1.842666050e-04f, 1.843327414e-04f, 1.843985538e-04f, 1.844640422e-04f, 1.845292063e-04f, 1.845940461e-04f, 1.846585616e-04f,
+1.847227526e-04f, 1.847866191e-04f, 1.848501609e-04f, 1.849133780e-04f, 1.849762704e-04f, 1.850388379e-04f, 1.851010804e-04f, 1.851629979e-04f, 1.852245902e-04f, 1.852858574e-04f,
+1.853467992e-04f, 1.854074158e-04f, 1.854677068e-04f, 1.855276724e-04f, 1.855873123e-04f, 1.856466266e-04f, 1.857056152e-04f, 1.857642779e-04f, 1.858226147e-04f, 1.858806256e-04f,
+1.859383103e-04f, 1.859956690e-04f, 1.860527015e-04f, 1.861094077e-04f, 1.861657875e-04f, 1.862218410e-04f, 1.862775679e-04f, 1.863329684e-04f, 1.863880421e-04f, 1.864427892e-04f,
+1.864972095e-04f, 1.865513030e-04f, 1.866050696e-04f, 1.866585093e-04f, 1.867116219e-04f, 1.867644074e-04f, 1.868168657e-04f, 1.868689969e-04f, 1.869208007e-04f, 1.869722772e-04f,
+1.870234262e-04f, 1.870742478e-04f, 1.871247418e-04f, 1.871749083e-04f, 1.872247470e-04f, 1.872742581e-04f, 1.873234413e-04f, 1.873722968e-04f, 1.874208243e-04f, 1.874690238e-04f,
+1.875168954e-04f, 1.875644389e-04f, 1.876116542e-04f, 1.876585414e-04f, 1.877051003e-04f, 1.877513309e-04f, 1.877972332e-04f, 1.878428071e-04f, 1.878880525e-04f, 1.879329695e-04f,
+1.879775578e-04f, 1.880218176e-04f, 1.880657487e-04f, 1.881093511e-04f, 1.881526248e-04f, 1.881955696e-04f, 1.882381856e-04f, 1.882804727e-04f, 1.883224308e-04f, 1.883640600e-04f,
+1.884053601e-04f, 1.884463311e-04f, 1.884869730e-04f, 1.885272857e-04f, 1.885672692e-04f, 1.886069235e-04f, 1.886462484e-04f, 1.886852440e-04f, 1.887239102e-04f, 1.887622470e-04f,
+1.888002543e-04f, 1.888379322e-04f, 1.888752804e-04f, 1.889122991e-04f, 1.889489882e-04f, 1.889853476e-04f, 1.890213773e-04f, 1.890570773e-04f, 1.890924475e-04f, 1.891274880e-04f,
+1.891621985e-04f, 1.891965793e-04f, 1.892306301e-04f, 1.892643510e-04f, 1.892977419e-04f, 1.893308028e-04f, 1.893635337e-04f, 1.893959345e-04f, 1.894280053e-04f, 1.894597459e-04f,
+1.894911564e-04f, 1.895222367e-04f, 1.895529868e-04f, 1.895834067e-04f, 1.896134963e-04f, 1.896432556e-04f, 1.896726847e-04f, 1.897017834e-04f, 1.897305517e-04f, 1.897589897e-04f,
+1.897870973e-04f, 1.898148744e-04f, 1.898423211e-04f, 1.898694374e-04f, 1.898962231e-04f, 1.899226784e-04f, 1.899488031e-04f, 1.899745973e-04f, 1.900000609e-04f, 1.900251939e-04f,
+1.900499964e-04f, 1.900744682e-04f, 1.900986094e-04f, 1.901224200e-04f, 1.901458999e-04f, 1.901690491e-04f, 1.901918676e-04f, 1.902143554e-04f, 1.902365126e-04f, 1.902583389e-04f,
+1.902798346e-04f, 1.903009995e-04f, 1.903218336e-04f, 1.903423370e-04f, 1.903625096e-04f, 1.903823515e-04f, 1.904018625e-04f, 1.904210427e-04f, 1.904398921e-04f, 1.904584107e-04f,
+1.904765985e-04f, 1.904944555e-04f, 1.905119816e-04f, 1.905291769e-04f, 1.905460414e-04f, 1.905625750e-04f, 1.905787778e-04f, 1.905946497e-04f, 1.906101908e-04f, 1.906254011e-04f,
+1.906402805e-04f, 1.906548291e-04f, 1.906690468e-04f, 1.906829337e-04f, 1.906964897e-04f, 1.907097150e-04f, 1.907226093e-04f, 1.907351729e-04f, 1.907474056e-04f, 1.907593075e-04f,
+1.907708786e-04f, 1.907821189e-04f, 1.907930284e-04f, 1.908036072e-04f, 1.908138551e-04f, 1.908237722e-04f, 1.908333586e-04f, 1.908426143e-04f, 1.908515391e-04f, 1.908601333e-04f,
+1.908683967e-04f, 1.908763295e-04f, 1.908839315e-04f, 1.908912028e-04f, 1.908981435e-04f, 1.909047535e-04f, 1.909110329e-04f, 1.909169816e-04f, 1.909225998e-04f, 1.909278873e-04f,
+1.909328443e-04f, 1.909374707e-04f, 1.909417666e-04f, 1.909457319e-04f, 1.909493668e-04f, 1.909526712e-04f, 1.909556451e-04f, 1.909582885e-04f, 1.909606016e-04f, 1.909625843e-04f,
+1.909642366e-04f, 1.909655585e-04f, 1.909665501e-04f, 1.909672114e-04f, 1.909675425e-04f, 1.909675433e-04f, 1.909672138e-04f, 1.909665542e-04f, 1.909655644e-04f, 1.909642445e-04f,
+1.909625945e-04f, 1.909606143e-04f, 1.909583042e-04f, 1.909556640e-04f, 1.909526938e-04f, 1.909493936e-04f, 1.909457635e-04f, 1.909418036e-04f, 1.909375137e-04f, 1.909328941e-04f,
+1.909279446e-04f, 1.909226654e-04f, 1.909170565e-04f, 1.909111179e-04f, 1.909048496e-04f, 1.908982517e-04f, 1.908913242e-04f, 1.908840672e-04f, 1.908764807e-04f, 1.908685648e-04f,
+1.908603194e-04f, 1.908517447e-04f, 1.908428406e-04f, 1.908336072e-04f, 1.908240445e-04f, 1.908141527e-04f, 1.908039317e-04f, 1.907933815e-04f, 1.907825023e-04f, 1.907712940e-04f,
+1.907597568e-04f, 1.907478906e-04f, 1.907356955e-04f, 1.907231716e-04f, 1.907103189e-04f, 1.906971374e-04f, 1.906836272e-04f, 1.906697884e-04f, 1.906556209e-04f, 1.906411249e-04f,
+1.906263004e-04f, 1.906111475e-04f, 1.905956662e-04f, 1.905798565e-04f, 1.905637185e-04f, 1.905472523e-04f, 1.905304579e-04f, 1.905133354e-04f, 1.904958848e-04f, 1.904781062e-04f,
+1.904599997e-04f, 1.904415652e-04f, 1.904228029e-04f, 1.904037128e-04f, 1.903842950e-04f, 1.903645496e-04f, 1.903444765e-04f, 1.903240759e-04f, 1.903033478e-04f, 1.902822923e-04f,
+1.902609094e-04f, 1.902391993e-04f, 1.902171619e-04f, 1.901947973e-04f, 1.901721057e-04f, 1.901490870e-04f, 1.901257413e-04f, 1.901020688e-04f, 1.900780694e-04f, 1.900537432e-04f,
+1.900290903e-04f, 1.900041108e-04f, 1.899788048e-04f, 1.899531722e-04f, 1.899272133e-04f, 1.899009279e-04f, 1.898743163e-04f, 1.898473785e-04f, 1.898201146e-04f, 1.897925246e-04f,
+1.897646086e-04f, 1.897363667e-04f, 1.897077989e-04f, 1.896789054e-04f, 1.896496862e-04f, 1.896201414e-04f, 1.895902711e-04f, 1.895600753e-04f, 1.895295541e-04f, 1.894987077e-04f,
+1.894675360e-04f, 1.894360391e-04f, 1.894042172e-04f, 1.893720704e-04f, 1.893395986e-04f, 1.893068020e-04f, 1.892736807e-04f, 1.892402348e-04f, 1.892064642e-04f, 1.891723692e-04f,
+1.891379498e-04f, 1.891032061e-04f, 1.890681382e-04f, 1.890327461e-04f, 1.889970300e-04f, 1.889609899e-04f, 1.889246260e-04f, 1.888879382e-04f, 1.888509268e-04f, 1.888135917e-04f,
+1.887759332e-04f, 1.887379512e-04f, 1.886996459e-04f, 1.886610173e-04f, 1.886220656e-04f, 1.885827908e-04f, 1.885431931e-04f, 1.885032725e-04f, 1.884630291e-04f, 1.884224631e-04f,
+1.883815745e-04f, 1.883403633e-04f, 1.882988298e-04f, 1.882569740e-04f, 1.882147961e-04f, 1.881722960e-04f, 1.881294739e-04f, 1.880863299e-04f, 1.880428642e-04f, 1.879990767e-04f,
+1.879549677e-04f, 1.879105371e-04f, 1.878657852e-04f, 1.878207120e-04f, 1.877753176e-04f, 1.877296021e-04f, 1.876835657e-04f, 1.876372084e-04f, 1.875905303e-04f, 1.875435316e-04f,
+1.874962123e-04f, 1.874485726e-04f, 1.874006125e-04f, 1.873523323e-04f, 1.873037319e-04f, 1.872548115e-04f, 1.872055712e-04f, 1.871560112e-04f, 1.871061314e-04f, 1.870559321e-04f,
+1.870054134e-04f, 1.869545753e-04f, 1.869034180e-04f, 1.868519416e-04f, 1.868001462e-04f, 1.867480319e-04f, 1.866955988e-04f, 1.866428471e-04f, 1.865897769e-04f, 1.865363883e-04f,
+1.864826813e-04f, 1.864286562e-04f, 1.863743130e-04f, 1.863196519e-04f, 1.862646730e-04f, 1.862093764e-04f, 1.861537622e-04f, 1.860978305e-04f, 1.860415815e-04f, 1.859850153e-04f,
+1.859281320e-04f, 1.858709318e-04f, 1.858134147e-04f, 1.857555809e-04f, 1.856974305e-04f, 1.856389636e-04f, 1.855801804e-04f, 1.855210810e-04f, 1.854616655e-04f, 1.854019341e-04f,
+1.853418868e-04f, 1.852815238e-04f, 1.852208453e-04f, 1.851598513e-04f, 1.850985420e-04f, 1.850369176e-04f, 1.849749780e-04f, 1.849127236e-04f, 1.848501544e-04f, 1.847872706e-04f,
+1.847240723e-04f, 1.846605595e-04f, 1.845967326e-04f, 1.845325915e-04f, 1.844681364e-04f, 1.844033676e-04f, 1.843382850e-04f, 1.842728889e-04f, 1.842071793e-04f, 1.841411565e-04f,
+1.840748205e-04f, 1.840081715e-04f, 1.839412097e-04f, 1.838739351e-04f, 1.838063479e-04f, 1.837384484e-04f, 1.836702365e-04f, 1.836017124e-04f, 1.835328764e-04f, 1.834637285e-04f,
+1.833942688e-04f, 1.833244976e-04f, 1.832544150e-04f, 1.831840211e-04f, 1.831133160e-04f, 1.830423000e-04f, 1.829709731e-04f, 1.828993355e-04f, 1.828273873e-04f, 1.827551288e-04f,
+1.826825600e-04f, 1.826096811e-04f, 1.825364923e-04f, 1.824629937e-04f, 1.823891854e-04f, 1.823150677e-04f, 1.822406406e-04f, 1.821659043e-04f, 1.820908590e-04f, 1.820155048e-04f,
+1.819398419e-04f, 1.818638704e-04f, 1.817875906e-04f, 1.817110024e-04f, 1.816341062e-04f, 1.815569021e-04f, 1.814793901e-04f, 1.814015706e-04f, 1.813234435e-04f, 1.812450092e-04f,
+1.811662677e-04f, 1.810872193e-04f, 1.810078640e-04f, 1.809282021e-04f, 1.808482337e-04f, 1.807679589e-04f, 1.806873780e-04f, 1.806064911e-04f, 1.805252983e-04f, 1.804437999e-04f,
+1.803619959e-04f, 1.802798866e-04f, 1.801974721e-04f, 1.801147526e-04f, 1.800317283e-04f, 1.799483993e-04f, 1.798647658e-04f, 1.797808279e-04f, 1.796965859e-04f, 1.796120399e-04f,
+1.795271900e-04f, 1.794420365e-04f, 1.793565795e-04f, 1.792708192e-04f, 1.791847557e-04f, 1.790983893e-04f, 1.790117201e-04f, 1.789247483e-04f, 1.788374740e-04f, 1.787498974e-04f,
+1.786620188e-04f, 1.785738382e-04f, 1.784853559e-04f, 1.783965720e-04f, 1.783074867e-04f, 1.782181003e-04f, 1.781284128e-04f, 1.780384244e-04f, 1.779481354e-04f, 1.778575459e-04f,
+1.777666560e-04f, 1.776754661e-04f, 1.775839762e-04f, 1.774921865e-04f, 1.774000973e-04f, 1.773077086e-04f, 1.772150207e-04f, 1.771220338e-04f, 1.770287481e-04f, 1.769351637e-04f,
+1.768412808e-04f, 1.767470996e-04f, 1.766526203e-04f, 1.765578431e-04f, 1.764627682e-04f, 1.763673957e-04f, 1.762717259e-04f, 1.761757590e-04f, 1.760794950e-04f, 1.759829343e-04f,
+1.758860770e-04f, 1.757889232e-04f, 1.756914733e-04f, 1.755937274e-04f, 1.754956856e-04f, 1.753973482e-04f, 1.752987154e-04f, 1.751997873e-04f, 1.751005642e-04f, 1.750010462e-04f,
+1.749012336e-04f, 1.748011265e-04f, 1.747007251e-04f, 1.746000297e-04f, 1.744990404e-04f, 1.743977575e-04f, 1.742961811e-04f, 1.741943114e-04f, 1.740921486e-04f, 1.739896929e-04f,
+1.738869446e-04f, 1.737839038e-04f, 1.736805708e-04f, 1.735769457e-04f, 1.734730287e-04f, 1.733688200e-04f, 1.732643199e-04f, 1.731595286e-04f, 1.730544461e-04f, 1.729490729e-04f,
+1.728434090e-04f, 1.727374547e-04f, 1.726312101e-04f, 1.725246755e-04f, 1.724178512e-04f, 1.723107372e-04f, 1.722033338e-04f, 1.720956412e-04f, 1.719876597e-04f, 1.718793894e-04f,
+1.717708305e-04f, 1.716619833e-04f, 1.715528479e-04f, 1.714434247e-04f, 1.713337137e-04f, 1.712237152e-04f, 1.711134294e-04f, 1.710028566e-04f, 1.708919969e-04f, 1.707808506e-04f,
+1.706694178e-04f, 1.705576988e-04f, 1.704456939e-04f, 1.703334031e-04f, 1.702208268e-04f, 1.701079652e-04f, 1.699948184e-04f, 1.698813867e-04f, 1.697676703e-04f, 1.696536695e-04f,
+1.695393844e-04f, 1.694248153e-04f, 1.693099624e-04f, 1.691948259e-04f, 1.690794060e-04f, 1.689637030e-04f, 1.688477170e-04f, 1.687314484e-04f, 1.686148973e-04f, 1.684980640e-04f,
+1.683809486e-04f, 1.682635514e-04f, 1.681458727e-04f, 1.680279126e-04f, 1.679096714e-04f, 1.677911493e-04f, 1.676723465e-04f, 1.675532633e-04f, 1.674338999e-04f, 1.673142565e-04f,
+1.671943333e-04f, 1.670741307e-04f, 1.669536487e-04f, 1.668328877e-04f, 1.667118479e-04f, 1.665905294e-04f, 1.664689326e-04f, 1.663470577e-04f, 1.662249048e-04f, 1.661024743e-04f,
+1.659797664e-04f, 1.658567812e-04f, 1.657335191e-04f, 1.656099803e-04f, 1.654861650e-04f, 1.653620734e-04f, 1.652377058e-04f, 1.651130625e-04f, 1.649881436e-04f, 1.648629493e-04f,
+1.647374801e-04f, 1.646117359e-04f, 1.644857172e-04f, 1.643594242e-04f, 1.642328570e-04f, 1.641060160e-04f, 1.639789014e-04f, 1.638515133e-04f, 1.637238521e-04f, 1.635959181e-04f,
+1.634677113e-04f, 1.633392322e-04f, 1.632104809e-04f, 1.630814576e-04f, 1.629521627e-04f, 1.628225964e-04f, 1.626927588e-04f, 1.625626504e-04f, 1.624322712e-04f, 1.623016216e-04f,
+1.621707017e-04f, 1.620395120e-04f, 1.619080525e-04f, 1.617763236e-04f, 1.616443254e-04f, 1.615120583e-04f, 1.613795225e-04f, 1.612467183e-04f, 1.611136458e-04f, 1.609803054e-04f,
+1.608466973e-04f, 1.607128218e-04f, 1.605786790e-04f, 1.604442693e-04f, 1.603095930e-04f, 1.601746502e-04f, 1.600394412e-04f, 1.599039663e-04f, 1.597682257e-04f, 1.596322197e-04f,
+1.594959486e-04f, 1.593594126e-04f, 1.592226119e-04f, 1.590855468e-04f, 1.589482177e-04f, 1.588106246e-04f, 1.586727680e-04f, 1.585346480e-04f, 1.583962649e-04f, 1.582576190e-04f,
+1.581187105e-04f, 1.579795398e-04f, 1.578401069e-04f, 1.577004123e-04f, 1.575604562e-04f, 1.574202388e-04f, 1.572797605e-04f, 1.571390214e-04f, 1.569980218e-04f, 1.568567621e-04f,
+1.567152424e-04f, 1.565734631e-04f, 1.564314243e-04f, 1.562891264e-04f, 1.561465697e-04f, 1.560037543e-04f, 1.558606806e-04f, 1.557173489e-04f, 1.555737593e-04f, 1.554299122e-04f,
+1.552858079e-04f, 1.551414466e-04f, 1.549968285e-04f, 1.548519541e-04f, 1.547068234e-04f, 1.545614368e-04f, 1.544157946e-04f, 1.542698971e-04f, 1.541237444e-04f, 1.539773370e-04f,
+1.538306750e-04f, 1.536837587e-04f, 1.535365884e-04f, 1.533891644e-04f, 1.532414870e-04f, 1.530935564e-04f, 1.529453730e-04f, 1.527969369e-04f, 1.526482485e-04f, 1.524993080e-04f,
+1.523501157e-04f, 1.522006719e-04f, 1.520509769e-04f, 1.519010310e-04f, 1.517508344e-04f, 1.516003874e-04f, 1.514496903e-04f, 1.512987434e-04f, 1.511475469e-04f, 1.509961012e-04f,
+1.508444065e-04f, 1.506924631e-04f, 1.505402713e-04f, 1.503878313e-04f, 1.502351435e-04f, 1.500822082e-04f, 1.499290255e-04f, 1.497755959e-04f, 1.496219195e-04f, 1.494679967e-04f,
+1.493138278e-04f, 1.491594130e-04f, 1.490047527e-04f, 1.488498471e-04f, 1.486946965e-04f, 1.485393012e-04f, 1.483836615e-04f, 1.482277776e-04f, 1.480716499e-04f, 1.479152787e-04f,
+1.477586642e-04f, 1.476018067e-04f, 1.474447066e-04f, 1.472873641e-04f, 1.471297795e-04f, 1.469719531e-04f, 1.468138851e-04f, 1.466555760e-04f, 1.464970259e-04f, 1.463382352e-04f,
+1.461792042e-04f, 1.460199332e-04f, 1.458604223e-04f, 1.457006721e-04f, 1.455406826e-04f, 1.453804544e-04f, 1.452199875e-04f, 1.450592824e-04f, 1.448983393e-04f, 1.447371586e-04f,
+1.445757404e-04f, 1.444140852e-04f, 1.442521932e-04f, 1.440900648e-04f, 1.439277001e-04f, 1.437650996e-04f, 1.436022635e-04f, 1.434391921e-04f, 1.432758857e-04f, 1.431123447e-04f,
+1.429485693e-04f, 1.427845598e-04f, 1.426203165e-04f, 1.424558398e-04f, 1.422911299e-04f, 1.421261871e-04f, 1.419610118e-04f, 1.417956042e-04f, 1.416299647e-04f, 1.414640936e-04f,
+1.412979911e-04f, 1.411316575e-04f, 1.409650933e-04f, 1.407982986e-04f, 1.406312738e-04f, 1.404640192e-04f, 1.402965351e-04f, 1.401288219e-04f, 1.399608797e-04f, 1.397927090e-04f,
+1.396243100e-04f, 1.394556830e-04f, 1.392868284e-04f, 1.391177465e-04f, 1.389484376e-04f, 1.387789019e-04f, 1.386091398e-04f, 1.384391517e-04f, 1.382689378e-04f, 1.380984984e-04f,
+1.379278338e-04f, 1.377569445e-04f, 1.375858306e-04f, 1.374144925e-04f, 1.372429305e-04f, 1.370711449e-04f, 1.368991360e-04f, 1.367269042e-04f, 1.365544498e-04f, 1.363817730e-04f,
+1.362088743e-04f, 1.360357538e-04f, 1.358624120e-04f, 1.356888492e-04f, 1.355150656e-04f, 1.353410616e-04f, 1.351668375e-04f, 1.349923936e-04f, 1.348177303e-04f, 1.346428478e-04f,
+1.344677465e-04f, 1.342924267e-04f, 1.341168888e-04f, 1.339411329e-04f, 1.337651596e-04f, 1.335889690e-04f, 1.334125616e-04f, 1.332359376e-04f, 1.330590973e-04f, 1.328820411e-04f,
+1.327047693e-04f, 1.325272823e-04f, 1.323495802e-04f, 1.321716636e-04f, 1.319935327e-04f, 1.318151878e-04f, 1.316366292e-04f, 1.314578573e-04f, 1.312788725e-04f, 1.310996749e-04f,
+1.309202650e-04f, 1.307406431e-04f, 1.305608095e-04f, 1.303807646e-04f, 1.302005086e-04f, 1.300200419e-04f, 1.298393648e-04f, 1.296584777e-04f, 1.294773809e-04f, 1.292960747e-04f,
+1.291145594e-04f, 1.289328354e-04f, 1.287509031e-04f, 1.285687626e-04f, 1.283864145e-04f, 1.282038589e-04f, 1.280210963e-04f, 1.278381269e-04f, 1.276549511e-04f, 1.274715693e-04f,
+1.272879817e-04f, 1.271041888e-04f, 1.269201907e-04f, 1.267359880e-04f, 1.265515808e-04f, 1.263669696e-04f, 1.261821547e-04f, 1.259971364e-04f, 1.258119150e-04f, 1.256264909e-04f,
+1.254408645e-04f, 1.252550360e-04f, 1.250690058e-04f, 1.248827742e-04f, 1.246963416e-04f, 1.245097083e-04f, 1.243228747e-04f, 1.241358410e-04f, 1.239486077e-04f, 1.237611751e-04f,
+1.235735435e-04f, 1.233857132e-04f, 1.231976846e-04f, 1.230094580e-04f, 1.228210338e-04f, 1.226324124e-04f, 1.224435940e-04f, 1.222545790e-04f, 1.220653677e-04f, 1.218759605e-04f,
+1.216863578e-04f, 1.214965598e-04f, 1.213065669e-04f, 1.211163795e-04f, 1.209259979e-04f, 1.207354225e-04f, 1.205446535e-04f, 1.203536914e-04f, 1.201625365e-04f, 1.199711891e-04f,
+1.197796496e-04f, 1.195879183e-04f, 1.193959956e-04f, 1.192038818e-04f, 1.190115773e-04f, 1.188190824e-04f, 1.186263975e-04f, 1.184335228e-04f, 1.182404589e-04f, 1.180472059e-04f,
+1.178537643e-04f, 1.176601344e-04f, 1.174663166e-04f, 1.172723112e-04f, 1.170781185e-04f, 1.168837390e-04f, 1.166891729e-04f, 1.164944207e-04f, 1.162994826e-04f, 1.161043590e-04f,
+1.159090503e-04f, 1.157135568e-04f, 1.155178789e-04f, 1.153220169e-04f, 1.151259712e-04f, 1.149297421e-04f, 1.147333300e-04f, 1.145367353e-04f, 1.143399583e-04f, 1.141429993e-04f,
+1.139458587e-04f, 1.137485369e-04f, 1.135510343e-04f, 1.133533511e-04f, 1.131554877e-04f, 1.129574445e-04f, 1.127592219e-04f, 1.125608202e-04f, 1.123622397e-04f, 1.121634809e-04f,
+1.119645440e-04f, 1.117654295e-04f, 1.115661377e-04f, 1.113666689e-04f, 1.111670236e-04f, 1.109672020e-04f, 1.107672045e-04f, 1.105670316e-04f, 1.103666835e-04f, 1.101661606e-04f,
+1.099654633e-04f, 1.097645919e-04f, 1.095635468e-04f, 1.093623284e-04f, 1.091609370e-04f, 1.089593729e-04f, 1.087576367e-04f, 1.085557285e-04f, 1.083536488e-04f, 1.081513979e-04f,
+1.079489763e-04f, 1.077463842e-04f, 1.075436220e-04f, 1.073406901e-04f, 1.071375889e-04f, 1.069343187e-04f, 1.067308798e-04f, 1.065272728e-04f, 1.063234978e-04f, 1.061195553e-04f,
+1.059154457e-04f, 1.057111693e-04f, 1.055067265e-04f, 1.053021176e-04f, 1.050973430e-04f, 1.048924031e-04f, 1.046872983e-04f, 1.044820289e-04f, 1.042765952e-04f, 1.040709978e-04f,
+1.038652368e-04f, 1.036593128e-04f, 1.034532260e-04f, 1.032469768e-04f, 1.030405657e-04f, 1.028339929e-04f, 1.026272588e-04f, 1.024203639e-04f, 1.022133085e-04f, 1.020060929e-04f,
+1.017987175e-04f, 1.015911827e-04f, 1.013834889e-04f, 1.011756365e-04f, 1.009676257e-04f, 1.007594571e-04f, 1.005511309e-04f, 1.003426475e-04f, 1.001340073e-04f, 9.992521074e-05f,
+9.971625811e-05f, 9.950714980e-05f, 9.929788619e-05f, 9.908846766e-05f, 9.887889457e-05f, 9.866916731e-05f, 9.845928625e-05f, 9.824925176e-05f, 9.803906423e-05f, 9.782872401e-05f,
+9.761823151e-05f, 9.740758707e-05f, 9.719679110e-05f, 9.698584395e-05f, 9.677474602e-05f, 9.656349767e-05f, 9.635209928e-05f, 9.614055124e-05f, 9.592885391e-05f, 9.571700768e-05f,
+9.550501293e-05f, 9.529287003e-05f, 9.508057936e-05f, 9.486814131e-05f, 9.465555625e-05f, 9.444282455e-05f, 9.422994661e-05f, 9.401692280e-05f, 9.380375350e-05f, 9.359043909e-05f,
+9.337697995e-05f, 9.316337647e-05f, 9.294962901e-05f, 9.273573798e-05f, 9.252170373e-05f, 9.230752667e-05f, 9.209320717e-05f, 9.187874561e-05f, 9.166414237e-05f, 9.144939784e-05f,
+9.123451240e-05f, 9.101948643e-05f, 9.080432032e-05f, 9.058901445e-05f, 9.037356920e-05f, 9.015798495e-05f, 8.994226210e-05f, 8.972640103e-05f, 8.951040211e-05f, 8.929426573e-05f,
+8.907799229e-05f, 8.886158216e-05f, 8.864503573e-05f, 8.842835339e-05f, 8.821153551e-05f, 8.799458249e-05f, 8.777749472e-05f, 8.756027257e-05f, 8.734291644e-05f, 8.712542671e-05f,
+8.690780377e-05f, 8.669004801e-05f, 8.647215981e-05f, 8.625413956e-05f, 8.603598765e-05f, 8.581770447e-05f, 8.559929040e-05f, 8.538074584e-05f, 8.516207117e-05f, 8.494326677e-05f,
+8.472433305e-05f, 8.450527038e-05f, 8.428607917e-05f, 8.406675978e-05f, 8.384731263e-05f, 8.362773809e-05f, 8.340803656e-05f, 8.318820842e-05f, 8.296825408e-05f, 8.274817391e-05f,
+8.252796830e-05f, 8.230763766e-05f, 8.208718237e-05f, 8.186660282e-05f, 8.164589940e-05f, 8.142507251e-05f, 8.120412253e-05f, 8.098304987e-05f, 8.076185490e-05f, 8.054053803e-05f,
+8.031909965e-05f, 8.009754014e-05f, 7.987585991e-05f, 7.965405934e-05f, 7.943213882e-05f, 7.921009877e-05f, 7.898793955e-05f, 7.876566158e-05f, 7.854326524e-05f, 7.832075092e-05f,
+7.809811903e-05f, 7.787536996e-05f, 7.765250409e-05f, 7.742952184e-05f, 7.720642358e-05f, 7.698320972e-05f, 7.675988065e-05f, 7.653643677e-05f, 7.631287847e-05f, 7.608920615e-05f,
+7.586542020e-05f, 7.564152103e-05f, 7.541750902e-05f, 7.519338457e-05f, 7.496914809e-05f, 7.474479997e-05f, 7.452034059e-05f, 7.429577038e-05f, 7.407108970e-05f, 7.384629898e-05f,
+7.362139860e-05f, 7.339638896e-05f, 7.317127046e-05f, 7.294604350e-05f, 7.272070848e-05f, 7.249526579e-05f, 7.226971583e-05f, 7.204405901e-05f, 7.181829572e-05f, 7.159242635e-05f,
+7.136645132e-05f, 7.114037102e-05f, 7.091418584e-05f, 7.068789619e-05f, 7.046150247e-05f, 7.023500507e-05f, 7.000840441e-05f, 6.978170087e-05f, 6.955489486e-05f, 6.932798678e-05f,
+6.910097702e-05f, 6.887386600e-05f, 6.864665411e-05f, 6.841934175e-05f, 6.819192933e-05f, 6.796441724e-05f, 6.773680588e-05f, 6.750909567e-05f, 6.728128699e-05f, 6.705338026e-05f,
+6.682537587e-05f, 6.659727423e-05f, 6.636907573e-05f, 6.614078079e-05f, 6.591238980e-05f, 6.568390317e-05f, 6.545532129e-05f, 6.522664458e-05f, 6.499787344e-05f, 6.476900826e-05f,
+6.454004946e-05f, 6.431099743e-05f, 6.408185258e-05f, 6.385261531e-05f, 6.362328603e-05f, 6.339386515e-05f, 6.316435305e-05f, 6.293475016e-05f, 6.270505687e-05f, 6.247527359e-05f,
+6.224540073e-05f, 6.201543868e-05f, 6.178538786e-05f, 6.155524866e-05f, 6.132502150e-05f, 6.109470678e-05f, 6.086430490e-05f, 6.063381627e-05f, 6.040324129e-05f, 6.017258038e-05f,
+5.994183393e-05f, 5.971100236e-05f, 5.948008607e-05f, 5.924908546e-05f, 5.901800094e-05f, 5.878683292e-05f, 5.855558181e-05f, 5.832424800e-05f, 5.809283192e-05f, 5.786133396e-05f,
+5.762975453e-05f, 5.739809404e-05f, 5.716635290e-05f, 5.693453151e-05f, 5.670263028e-05f, 5.647064962e-05f, 5.623858994e-05f, 5.600645164e-05f, 5.577423513e-05f, 5.554194083e-05f,
+5.530956913e-05f, 5.507712044e-05f, 5.484459518e-05f, 5.461199376e-05f, 5.437931657e-05f, 5.414656403e-05f, 5.391373656e-05f, 5.368083454e-05f, 5.344785841e-05f, 5.321480856e-05f,
+5.298168540e-05f, 5.274848935e-05f, 5.251522081e-05f, 5.228188019e-05f, 5.204846790e-05f, 5.181498435e-05f, 5.158142995e-05f, 5.134780511e-05f, 5.111411024e-05f, 5.088034575e-05f,
+5.064651205e-05f, 5.041260954e-05f, 5.017863865e-05f, 4.994459978e-05f, 4.971049333e-05f, 4.947631973e-05f, 4.924207937e-05f, 4.900777268e-05f, 4.877340006e-05f, 4.853896192e-05f,
+4.830445868e-05f, 4.806989074e-05f, 4.783525851e-05f, 4.760056241e-05f, 4.736580285e-05f, 4.713098023e-05f, 4.689609498e-05f, 4.666114749e-05f, 4.642613819e-05f, 4.619106748e-05f,
+4.595593578e-05f, 4.572074349e-05f, 4.548549103e-05f, 4.525017881e-05f, 4.501480725e-05f, 4.477937675e-05f, 4.454388772e-05f, 4.430834058e-05f, 4.407273574e-05f, 4.383707362e-05f,
+4.360135462e-05f, 4.336557915e-05f, 4.312974764e-05f, 4.289386048e-05f, 4.265791810e-05f, 4.242192091e-05f, 4.218586932e-05f, 4.194976373e-05f, 4.171360458e-05f, 4.147739226e-05f,
+4.124112719e-05f, 4.100480978e-05f, 4.076844045e-05f, 4.053201961e-05f, 4.029554767e-05f, 4.005902504e-05f, 3.982245215e-05f, 3.958582939e-05f, 3.934915719e-05f, 3.911243596e-05f,
+3.887566612e-05f, 3.863884806e-05f, 3.840198222e-05f, 3.816506900e-05f, 3.792810881e-05f, 3.769110207e-05f, 3.745404920e-05f, 3.721695060e-05f, 3.697980670e-05f, 3.674261790e-05f,
+3.650538462e-05f, 3.626810727e-05f, 3.603078626e-05f, 3.579342202e-05f, 3.555601495e-05f, 3.531856547e-05f, 3.508107399e-05f, 3.484354093e-05f, 3.460596670e-05f, 3.436835172e-05f,
+3.413069640e-05f, 3.389300115e-05f, 3.365526638e-05f, 3.341749252e-05f, 3.317967998e-05f, 3.294182917e-05f, 3.270394051e-05f, 3.246601440e-05f, 3.222805127e-05f, 3.199005153e-05f,
+3.175201560e-05f, 3.151394388e-05f, 3.127583680e-05f, 3.103769476e-05f, 3.079951819e-05f, 3.056130750e-05f, 3.032306310e-05f, 3.008478541e-05f, 2.984647483e-05f, 2.960813180e-05f,
+2.936975672e-05f, 2.913135000e-05f, 2.889291207e-05f, 2.865444333e-05f, 2.841594421e-05f, 2.817741511e-05f, 2.793885645e-05f, 2.770026865e-05f, 2.746165212e-05f, 2.722300728e-05f,
+2.698433454e-05f, 2.674563432e-05f, 2.650690703e-05f, 2.626815309e-05f, 2.602937290e-05f, 2.579056690e-05f, 2.555173549e-05f, 2.531287908e-05f, 2.507399810e-05f, 2.483509296e-05f,
+2.459616407e-05f, 2.435721185e-05f, 2.411823671e-05f, 2.387923907e-05f, 2.364021935e-05f, 2.340117795e-05f, 2.316211530e-05f, 2.292303181e-05f, 2.268392789e-05f, 2.244480396e-05f,
+2.220566044e-05f, 2.196649774e-05f, 2.172731627e-05f, 2.148811646e-05f, 2.124889871e-05f, 2.100966344e-05f, 2.077041107e-05f, 2.053114201e-05f, 2.029185668e-05f, 2.005255549e-05f,
+1.981323886e-05f, 1.957390720e-05f, 1.933456093e-05f, 1.909520046e-05f, 1.885582621e-05f, 1.861643860e-05f, 1.837703803e-05f, 1.813762493e-05f, 1.789819970e-05f, 1.765876277e-05f,
+1.741931455e-05f, 1.717985545e-05f, 1.694038589e-05f, 1.670090629e-05f, 1.646141705e-05f, 1.622191860e-05f, 1.598241135e-05f, 1.574289571e-05f, 1.550337210e-05f, 1.526384094e-05f,
+1.502430263e-05f, 1.478475760e-05f, 1.454520626e-05f, 1.430564902e-05f, 1.406608630e-05f, 1.382651851e-05f, 1.358694608e-05f, 1.334736940e-05f, 1.310778890e-05f, 1.286820500e-05f,
+1.262861810e-05f, 1.238902863e-05f, 1.214943699e-05f, 1.190984360e-05f, 1.167024888e-05f, 1.143065324e-05f, 1.119105709e-05f, 1.095146085e-05f, 1.071186494e-05f, 1.047226976e-05f,
+1.023267573e-05f, 9.993083277e-06f, 9.753492801e-06f, 9.513904720e-06f, 9.274319449e-06f, 9.034737401e-06f, 8.795158991e-06f, 8.555584634e-06f, 8.316014742e-06f, 8.076449731e-06f,
+7.836890013e-06f, 7.597336004e-06f, 7.357788116e-06f, 7.118246765e-06f, 6.878712363e-06f, 6.639185324e-06f, 6.399666063e-06f, 6.160154992e-06f, 5.920652526e-06f, 5.681159078e-06f,
+5.441675062e-06f, 5.202200890e-06f, 4.962736977e-06f, 4.723283736e-06f, 4.483841580e-06f, 4.244410923e-06f, 4.004992177e-06f, 3.765585756e-06f, 3.526192073e-06f, 3.286811541e-06f,
+3.047444574e-06f, 2.808091583e-06f, 2.568752982e-06f, 2.329429184e-06f, 2.090120601e-06f, 1.850827647e-06f, 1.611550733e-06f, 1.372290273e-06f, 1.133046679e-06f, 8.938203639e-07f,
+6.546117393e-07f, 4.154212179e-07f, 1.762492121e-07f, -6.290386609e-08f, -3.020376044e-07f, -5.411515907e-07f, -7.802454130e-07f, -1.019318659e-06f, -1.258370918e-06f, -1.497401777e-06f,
+-1.736410825e-06f, -1.975397649e-06f, -2.214361839e-06f, -2.453302983e-06f, -2.692220669e-06f, -2.931114487e-06f, -3.169984024e-06f, -3.408828869e-06f, -3.647648612e-06f, -3.886442842e-06f,
+-4.125211146e-06f, -4.363953115e-06f, -4.602668337e-06f, -4.841356402e-06f, -5.080016900e-06f, -5.318649418e-06f, -5.557253548e-06f, -5.795828878e-06f, -6.034374998e-06f, -6.272891499e-06f,
+-6.511377969e-06f, -6.749833998e-06f, -6.988259177e-06f, -7.226653096e-06f, -7.465015344e-06f, -7.703345513e-06f, -7.941643192e-06f, -8.179907972e-06f, -8.418139443e-06f, -8.656337196e-06f,
+-8.894500821e-06f, -9.132629910e-06f, -9.370724054e-06f, -9.608782842e-06f, -9.846805867e-06f, -1.008479272e-05f, -1.032274299e-05f, -1.056065627e-05f, -1.079853215e-05f, -1.103637023e-05f,
+-1.127417009e-05f, -1.151193133e-05f, -1.174965353e-05f, -1.198733630e-05f, -1.222497922e-05f, -1.246258188e-05f, -1.270014388e-05f, -1.293766480e-05f, -1.317514425e-05f, -1.341258182e-05f,
+-1.364997709e-05f, -1.388732966e-05f, -1.412463912e-05f, -1.436190507e-05f, -1.459912709e-05f, -1.483630479e-05f, -1.507343775e-05f, -1.531052557e-05f, -1.554756785e-05f, -1.578456416e-05f,
+-1.602151412e-05f, -1.625841731e-05f, -1.649527333e-05f, -1.673208177e-05f, -1.696884222e-05f, -1.720555429e-05f, -1.744221756e-05f, -1.767883162e-05f, -1.791539609e-05f, -1.815191053e-05f,
+-1.838837457e-05f, -1.862478778e-05f, -1.886114976e-05f, -1.909746012e-05f, -1.933371843e-05f, -1.956992431e-05f, -1.980607734e-05f, -2.004217712e-05f, -2.027822325e-05f, -2.051421533e-05f,
+-2.075015294e-05f, -2.098603568e-05f, -2.122186316e-05f, -2.145763497e-05f, -2.169335070e-05f, -2.192900995e-05f, -2.216461233e-05f, -2.240015741e-05f, -2.263564482e-05f, -2.287107413e-05f,
+-2.310644494e-05f, -2.334175687e-05f, -2.357700949e-05f, -2.381220242e-05f, -2.404733525e-05f, -2.428240757e-05f, -2.451741899e-05f, -2.475236910e-05f, -2.498725750e-05f, -2.522208380e-05f,
+-2.545684758e-05f, -2.569154845e-05f, -2.592618601e-05f, -2.616075986e-05f, -2.639526959e-05f, -2.662971481e-05f, -2.686409511e-05f, -2.709841010e-05f, -2.733265937e-05f, -2.756684253e-05f,
+-2.780095918e-05f, -2.803500891e-05f, -2.826899132e-05f, -2.850290603e-05f, -2.873675262e-05f, -2.897053070e-05f, -2.920423987e-05f, -2.943787973e-05f, -2.967144988e-05f, -2.990494993e-05f,
+-3.013837948e-05f, -3.037173812e-05f, -3.060502546e-05f, -3.083824111e-05f, -3.107138466e-05f, -3.130445571e-05f, -3.153745388e-05f, -3.177037876e-05f, -3.200322996e-05f, -3.223600707e-05f,
+-3.246870970e-05f, -3.270133747e-05f, -3.293388996e-05f, -3.316636678e-05f, -3.339876754e-05f, -3.363109184e-05f, -3.386333929e-05f, -3.409550949e-05f, -3.432760204e-05f, -3.455961655e-05f,
+-3.479155263e-05f, -3.502340987e-05f, -3.525518789e-05f, -3.548688629e-05f, -3.571850468e-05f, -3.595004266e-05f, -3.618149983e-05f, -3.641287581e-05f, -3.664417020e-05f, -3.687538260e-05f,
+-3.710651263e-05f, -3.733755989e-05f, -3.756852399e-05f, -3.779940453e-05f, -3.803020112e-05f, -3.826091337e-05f, -3.849154088e-05f, -3.872208328e-05f, -3.895254015e-05f, -3.918291112e-05f,
+-3.941319578e-05f, -3.964339375e-05f, -3.987350464e-05f, -4.010352806e-05f, -4.033346361e-05f, -4.056331091e-05f, -4.079306956e-05f, -4.102273917e-05f, -4.125231936e-05f, -4.148180973e-05f,
+-4.171120989e-05f, -4.194051946e-05f, -4.216973804e-05f, -4.239886525e-05f, -4.262790070e-05f, -4.285684399e-05f, -4.308569474e-05f, -4.331445257e-05f, -4.354311708e-05f, -4.377168788e-05f,
+-4.400016459e-05f, -4.422854682e-05f, -4.445683418e-05f, -4.468502628e-05f, -4.491312274e-05f, -4.514112318e-05f, -4.536902720e-05f, -4.559683441e-05f, -4.582454444e-05f, -4.605215689e-05f,
+-4.627967138e-05f, -4.650708753e-05f, -4.673440494e-05f, -4.696162324e-05f, -4.718874204e-05f, -4.741576095e-05f, -4.764267958e-05f, -4.786949757e-05f, -4.809621451e-05f, -4.832283002e-05f,
+-4.854934373e-05f, -4.877575525e-05f, -4.900206420e-05f, -4.922827018e-05f, -4.945437283e-05f, -4.968037175e-05f, -4.990626656e-05f, -5.013205689e-05f, -5.035774234e-05f, -5.058332254e-05f,
+-5.080879711e-05f, -5.103416566e-05f, -5.125942781e-05f, -5.148458319e-05f, -5.170963140e-05f, -5.193457208e-05f, -5.215940483e-05f, -5.238412929e-05f, -5.260874506e-05f, -5.283325178e-05f,
+-5.305764905e-05f, -5.328193651e-05f, -5.350611376e-05f, -5.373018044e-05f, -5.395413616e-05f, -5.417798055e-05f, -5.440171323e-05f, -5.462533381e-05f, -5.484884193e-05f, -5.507223720e-05f,
+-5.529551925e-05f, -5.551868770e-05f, -5.574174217e-05f, -5.596468228e-05f, -5.618750767e-05f, -5.641021795e-05f, -5.663281274e-05f, -5.685529168e-05f, -5.707765439e-05f, -5.729990048e-05f,
+-5.752202959e-05f, -5.774404134e-05f, -5.796593536e-05f, -5.818771128e-05f, -5.840936871e-05f, -5.863090728e-05f, -5.885232662e-05f, -5.907362637e-05f, -5.929480613e-05f, -5.951586555e-05f,
+-5.973680424e-05f, -5.995762185e-05f, -6.017831798e-05f, -6.039889228e-05f, -6.061934437e-05f, -6.083967387e-05f, -6.105988043e-05f, -6.127996366e-05f, -6.149992319e-05f, -6.171975866e-05f,
+-6.193946970e-05f, -6.215905593e-05f, -6.237851698e-05f, -6.259785249e-05f, -6.281706209e-05f, -6.303614541e-05f, -6.325510207e-05f, -6.347393171e-05f, -6.369263397e-05f, -6.391120847e-05f,
+-6.412965484e-05f, -6.434797272e-05f, -6.456616175e-05f, -6.478422154e-05f, -6.500215175e-05f, -6.521995199e-05f, -6.543762191e-05f, -6.565516114e-05f, -6.587256931e-05f, -6.608984606e-05f,
+-6.630699102e-05f, -6.652400382e-05f, -6.674088411e-05f, -6.695763152e-05f, -6.717424568e-05f, -6.739072623e-05f, -6.760707280e-05f, -6.782328504e-05f, -6.803936258e-05f, -6.825530505e-05f,
+-6.847111210e-05f, -6.868678335e-05f, -6.890231846e-05f, -6.911771705e-05f, -6.933297877e-05f, -6.954810326e-05f, -6.976309015e-05f, -6.997793908e-05f, -7.019264969e-05f, -7.040722162e-05f,
+-7.062165452e-05f, -7.083594801e-05f, -7.105010176e-05f, -7.126411538e-05f, -7.147798853e-05f, -7.169172084e-05f, -7.190531196e-05f, -7.211876154e-05f, -7.233206920e-05f, -7.254523460e-05f,
+-7.275825737e-05f, -7.297113716e-05f, -7.318387362e-05f, -7.339646639e-05f, -7.360891510e-05f, -7.382121941e-05f, -7.403337896e-05f, -7.424539339e-05f, -7.445726235e-05f, -7.466898549e-05f,
+-7.488056244e-05f, -7.509199286e-05f, -7.530327639e-05f, -7.551441268e-05f, -7.572540138e-05f, -7.593624212e-05f, -7.614693457e-05f, -7.635747836e-05f, -7.656787314e-05f, -7.677811857e-05f,
+-7.698821428e-05f, -7.719815994e-05f, -7.740795518e-05f, -7.761759966e-05f, -7.782709303e-05f, -7.803643493e-05f, -7.824562502e-05f, -7.845466295e-05f, -7.866354836e-05f, -7.887228092e-05f,
+-7.908086026e-05f, -7.928928604e-05f, -7.949755792e-05f, -7.970567554e-05f, -7.991363857e-05f, -8.012144664e-05f, -8.032909941e-05f, -8.053659655e-05f, -8.074393769e-05f, -8.095112250e-05f,
+-8.115815062e-05f, -8.136502172e-05f, -8.157173545e-05f, -8.177829146e-05f, -8.198468941e-05f, -8.219092895e-05f, -8.239700975e-05f, -8.260293145e-05f, -8.280869371e-05f, -8.301429620e-05f,
+-8.321973856e-05f, -8.342502046e-05f, -8.363014155e-05f, -8.383510149e-05f, -8.403989994e-05f, -8.424453656e-05f, -8.444901100e-05f, -8.465332293e-05f, -8.485747201e-05f, -8.506145790e-05f,
+-8.526528025e-05f, -8.546893873e-05f, -8.567243300e-05f, -8.587576272e-05f, -8.607892754e-05f, -8.628192715e-05f, -8.648476118e-05f, -8.668742932e-05f, -8.688993121e-05f, -8.709226653e-05f,
+-8.729443493e-05f, -8.749643609e-05f, -8.769826966e-05f, -8.789993531e-05f, -8.810143270e-05f, -8.830276150e-05f, -8.850392138e-05f, -8.870491200e-05f, -8.890573302e-05f, -8.910638411e-05f,
+-8.930686495e-05f, -8.950717519e-05f, -8.970731450e-05f, -8.990728255e-05f, -9.010707901e-05f, -9.030670355e-05f, -9.050615583e-05f, -9.070543553e-05f, -9.090454231e-05f, -9.110347584e-05f,
+-9.130223580e-05f, -9.150082185e-05f, -9.169923366e-05f, -9.189747091e-05f, -9.209553326e-05f, -9.229342039e-05f, -9.249113197e-05f, -9.268866767e-05f, -9.288602716e-05f, -9.308321012e-05f,
+-9.328021622e-05f, -9.347704513e-05f, -9.367369653e-05f, -9.387017009e-05f, -9.406646548e-05f, -9.426258239e-05f, -9.445852048e-05f, -9.465427943e-05f, -9.484985892e-05f, -9.504525862e-05f,
+-9.524047821e-05f, -9.543551736e-05f, -9.563037576e-05f, -9.582505308e-05f, -9.601954900e-05f, -9.621386320e-05f, -9.640799535e-05f, -9.660194514e-05f, -9.679571224e-05f, -9.698929633e-05f,
+-9.718269709e-05f, -9.737591421e-05f, -9.756894737e-05f, -9.776179623e-05f, -9.795446050e-05f, -9.814693984e-05f, -9.833923394e-05f, -9.853134248e-05f, -9.872326515e-05f, -9.891500163e-05f,
+-9.910655159e-05f, -9.929791474e-05f, -9.948909074e-05f, -9.968007928e-05f, -9.987088005e-05f, -1.000614927e-04f, -1.002519170e-04f, -1.004421526e-04f, -1.006321991e-04f, -1.008220563e-04f,
+-1.010117239e-04f, -1.012012014e-04f, -1.013904887e-04f, -1.015795854e-04f, -1.017684912e-04f, -1.019572058e-04f, -1.021457288e-04f, -1.023340600e-04f, -1.025221991e-04f, -1.027101457e-04f,
+-1.028978995e-04f, -1.030854603e-04f, -1.032728276e-04f, -1.034600013e-04f, -1.036469810e-04f, -1.038337663e-04f, -1.040203571e-04f, -1.042067529e-04f, -1.043929535e-04f, -1.045789585e-04f,
+-1.047647677e-04f, -1.049503808e-04f, -1.051357974e-04f, -1.053210172e-04f, -1.055060400e-04f, -1.056908654e-04f, -1.058754932e-04f, -1.060599229e-04f, -1.062441544e-04f, -1.064281873e-04f,
+-1.066120213e-04f, -1.067956561e-04f, -1.069790915e-04f, -1.071623270e-04f, -1.073453625e-04f, -1.075281976e-04f, -1.077108320e-04f, -1.078932654e-04f, -1.080754975e-04f, -1.082575280e-04f,
+-1.084393566e-04f, -1.086209831e-04f, -1.088024070e-04f, -1.089836282e-04f, -1.091646463e-04f, -1.093454611e-04f, -1.095260721e-04f, -1.097064792e-04f, -1.098866821e-04f, -1.100666803e-04f,
+-1.102464738e-04f, -1.104260621e-04f, -1.106054449e-04f, -1.107846220e-04f, -1.109635931e-04f, -1.111423578e-04f, -1.113209160e-04f, -1.114992672e-04f, -1.116774113e-04f, -1.118553478e-04f,
+-1.120330766e-04f, -1.122105973e-04f, -1.123879096e-04f, -1.125650133e-04f, -1.127419081e-04f, -1.129185936e-04f, -1.130950696e-04f, -1.132713358e-04f, -1.134473919e-04f, -1.136232376e-04f,
+-1.137988727e-04f, -1.139742968e-04f, -1.141495096e-04f, -1.143245110e-04f, -1.144993005e-04f, -1.146738779e-04f, -1.148482429e-04f, -1.150223953e-04f, -1.151963347e-04f, -1.153700609e-04f,
+-1.155435735e-04f, -1.157168724e-04f, -1.158899572e-04f, -1.160628276e-04f, -1.162354833e-04f, -1.164079241e-04f, -1.165801497e-04f, -1.167521599e-04f, -1.169239542e-04f, -1.170955325e-04f,
+-1.172668945e-04f, -1.174380398e-04f, -1.176089683e-04f, -1.177796796e-04f, -1.179501734e-04f, -1.181204496e-04f, -1.182905077e-04f, -1.184603476e-04f, -1.186299689e-04f, -1.187993713e-04f,
+-1.189685547e-04f, -1.191375187e-04f, -1.193062631e-04f, -1.194747875e-04f, -1.196430917e-04f, -1.198111755e-04f, -1.199790385e-04f, -1.201466805e-04f, -1.203141011e-04f, -1.204813003e-04f,
+-1.206482776e-04f, -1.208150328e-04f, -1.209815656e-04f, -1.211478757e-04f, -1.213139630e-04f, -1.214798271e-04f, -1.216454677e-04f, -1.218108846e-04f, -1.219760775e-04f, -1.221410461e-04f,
+-1.223057902e-04f, -1.224703096e-04f, -1.226346038e-04f, -1.227986728e-04f, -1.229625161e-04f, -1.231261336e-04f, -1.232895250e-04f, -1.234526900e-04f, -1.236156284e-04f, -1.237783398e-04f,
+-1.239408241e-04f, -1.241030809e-04f, -1.242651100e-04f, -1.244269112e-04f, -1.245884841e-04f, -1.247498286e-04f, -1.249109443e-04f, -1.250718310e-04f, -1.252324884e-04f, -1.253929163e-04f,
+-1.255531145e-04f, -1.257130825e-04f, -1.258728203e-04f, -1.260323276e-04f, -1.261916040e-04f, -1.263506493e-04f, -1.265094633e-04f, -1.266680457e-04f, -1.268263963e-04f, -1.269845148e-04f,
+-1.271424010e-04f, -1.273000545e-04f, -1.274574752e-04f, -1.276146628e-04f, -1.277716170e-04f, -1.279283375e-04f, -1.280848243e-04f, -1.282410768e-04f, -1.283970951e-04f, -1.285528787e-04f,
+-1.287084274e-04f, -1.288637410e-04f, -1.290188192e-04f, -1.291736618e-04f, -1.293282685e-04f, -1.294826391e-04f, -1.296367733e-04f, -1.297906710e-04f, -1.299443317e-04f, -1.300977554e-04f,
+-1.302509417e-04f, -1.304038903e-04f, -1.305566012e-04f, -1.307090739e-04f, -1.308613083e-04f, -1.310133042e-04f, -1.311650612e-04f, -1.313165791e-04f, -1.314678577e-04f, -1.316188968e-04f,
+-1.317696961e-04f, -1.319202553e-04f, -1.320705743e-04f, -1.322206527e-04f, -1.323704904e-04f, -1.325200871e-04f, -1.326694425e-04f, -1.328185565e-04f, -1.329674287e-04f, -1.331160590e-04f,
+-1.332644471e-04f, -1.334125928e-04f, -1.335604959e-04f, -1.337081560e-04f, -1.338555730e-04f, -1.340027466e-04f, -1.341496766e-04f, -1.342963627e-04f, -1.344428048e-04f, -1.345890026e-04f,
+-1.347349558e-04f, -1.348806643e-04f, -1.350261278e-04f, -1.351713460e-04f, -1.353163187e-04f, -1.354610458e-04f, -1.356055269e-04f, -1.357497618e-04f, -1.358937504e-04f, -1.360374923e-04f,
+-1.361809874e-04f, -1.363242355e-04f, -1.364672362e-04f, -1.366099893e-04f, -1.367524948e-04f, -1.368947522e-04f, -1.370367614e-04f, -1.371785222e-04f, -1.373200343e-04f, -1.374612975e-04f,
+-1.376023117e-04f, -1.377430764e-04f, -1.378835917e-04f, -1.380238571e-04f, -1.381638725e-04f, -1.383036377e-04f, -1.384431525e-04f, -1.385824166e-04f, -1.387214298e-04f, -1.388601919e-04f,
+-1.389987027e-04f, -1.391369619e-04f, -1.392749693e-04f, -1.394127248e-04f, -1.395502281e-04f, -1.396874789e-04f, -1.398244771e-04f, -1.399612224e-04f, -1.400977147e-04f, -1.402339537e-04f,
+-1.403699392e-04f, -1.405056709e-04f, -1.406411488e-04f, -1.407763724e-04f, -1.409113418e-04f, -1.410460565e-04f, -1.411805165e-04f, -1.413147215e-04f, -1.414486713e-04f, -1.415823656e-04f,
+-1.417158043e-04f, -1.418489872e-04f, -1.419819141e-04f, -1.421145846e-04f, -1.422469987e-04f, -1.423791562e-04f, -1.425110567e-04f, -1.426427002e-04f, -1.427740864e-04f, -1.429052150e-04f,
+-1.430360860e-04f, -1.431666990e-04f, -1.432970539e-04f, -1.434271505e-04f, -1.435569885e-04f, -1.436865679e-04f, -1.438158883e-04f, -1.439449495e-04f, -1.440737514e-04f, -1.442022938e-04f,
+-1.443305764e-04f, -1.444585991e-04f, -1.445863616e-04f, -1.447138638e-04f, -1.448411054e-04f, -1.449680863e-04f, -1.450948062e-04f, -1.452212650e-04f, -1.453474625e-04f, -1.454733984e-04f,
+-1.455990726e-04f, -1.457244849e-04f, -1.458496350e-04f, -1.459745229e-04f, -1.460991482e-04f, -1.462235108e-04f, -1.463476104e-04f, -1.464714470e-04f, -1.465950203e-04f, -1.467183302e-04f,
+-1.468413763e-04f, -1.469641586e-04f, -1.470866768e-04f, -1.472089308e-04f, -1.473309203e-04f, -1.474526453e-04f, -1.475741054e-04f, -1.476953004e-04f, -1.478162303e-04f, -1.479368949e-04f,
+-1.480572938e-04f, -1.481774270e-04f, -1.482972942e-04f, -1.484168954e-04f, -1.485362302e-04f, -1.486552985e-04f, -1.487741001e-04f, -1.488926349e-04f, -1.490109026e-04f, -1.491289031e-04f,
+-1.492466361e-04f, -1.493641016e-04f, -1.494812993e-04f, -1.495982290e-04f, -1.497148906e-04f, -1.498312839e-04f, -1.499474087e-04f, -1.500632648e-04f, -1.501788520e-04f, -1.502941702e-04f,
+-1.504092192e-04f, -1.505239988e-04f, -1.506385088e-04f, -1.507527491e-04f, -1.508667194e-04f, -1.509804197e-04f, -1.510938497e-04f, -1.512070092e-04f, -1.513198981e-04f, -1.514325163e-04f,
+-1.515448634e-04f, -1.516569395e-04f, -1.517687442e-04f, -1.518802774e-04f, -1.519915390e-04f, -1.521025288e-04f, -1.522132466e-04f, -1.523236922e-04f, -1.524338655e-04f, -1.525437662e-04f,
+-1.526533944e-04f, -1.527627496e-04f, -1.528718319e-04f, -1.529806410e-04f, -1.530891768e-04f, -1.531974391e-04f, -1.533054277e-04f, -1.534131425e-04f, -1.535205832e-04f, -1.536277499e-04f,
+-1.537346422e-04f, -1.538412600e-04f, -1.539476031e-04f, -1.540536715e-04f, -1.541594649e-04f, -1.542649832e-04f, -1.543702261e-04f, -1.544751936e-04f, -1.545798856e-04f, -1.546843017e-04f,
+-1.547884419e-04f, -1.548923060e-04f, -1.549958939e-04f, -1.550992054e-04f, -1.552022403e-04f, -1.553049986e-04f, -1.554074799e-04f, -1.555096842e-04f, -1.556116114e-04f, -1.557132612e-04f,
+-1.558146336e-04f, -1.559157283e-04f, -1.560165452e-04f, -1.561170842e-04f, -1.562173451e-04f, -1.563173277e-04f, -1.564170319e-04f, -1.565164576e-04f, -1.566156047e-04f, -1.567144728e-04f,
+-1.568130620e-04f, -1.569113720e-04f, -1.570094028e-04f, -1.571071541e-04f, -1.572046259e-04f, -1.573018179e-04f, -1.573987300e-04f, -1.574953622e-04f, -1.575917141e-04f, -1.576877858e-04f,
+-1.577835770e-04f, -1.578790876e-04f, -1.579743175e-04f, -1.580692665e-04f, -1.581639345e-04f, -1.582583214e-04f, -1.583524269e-04f, -1.584462510e-04f, -1.585397936e-04f, -1.586330544e-04f,
+-1.587260333e-04f, -1.588187303e-04f, -1.589111451e-04f, -1.590032777e-04f, -1.590951278e-04f, -1.591866954e-04f, -1.592779804e-04f, -1.593689825e-04f, -1.594597017e-04f, -1.595501378e-04f,
+-1.596402907e-04f, -1.597301602e-04f, -1.598197462e-04f, -1.599090487e-04f, -1.599980674e-04f, -1.600868022e-04f, -1.601752530e-04f, -1.602634197e-04f, -1.603513022e-04f, -1.604389002e-04f,
+-1.605262137e-04f, -1.606132426e-04f, -1.606999866e-04f, -1.607864458e-04f, -1.608726200e-04f, -1.609585090e-04f, -1.610441127e-04f, -1.611294310e-04f, -1.612144637e-04f, -1.612992108e-04f,
+-1.613836722e-04f, -1.614678476e-04f, -1.615517370e-04f, -1.616353403e-04f, -1.617186573e-04f, -1.618016879e-04f, -1.618844320e-04f, -1.619668894e-04f, -1.620490601e-04f, -1.621309440e-04f,
+-1.622125408e-04f, -1.622938506e-04f, -1.623748731e-04f, -1.624556083e-04f, -1.625360560e-04f, -1.626162162e-04f, -1.626960887e-04f, -1.627756734e-04f, -1.628549701e-04f, -1.629339788e-04f,
+-1.630126994e-04f, -1.630911318e-04f, -1.631692757e-04f, -1.632471312e-04f, -1.633246981e-04f, -1.634019763e-04f, -1.634789657e-04f, -1.635556661e-04f, -1.636320775e-04f, -1.637081998e-04f,
+-1.637840328e-04f, -1.638595765e-04f, -1.639348307e-04f, -1.640097954e-04f, -1.640844703e-04f, -1.641588555e-04f, -1.642329508e-04f, -1.643067561e-04f, -1.643802713e-04f, -1.644534963e-04f,
+-1.645264310e-04f, -1.645990753e-04f, -1.646714290e-04f, -1.647434922e-04f, -1.648152647e-04f, -1.648867463e-04f, -1.649579371e-04f, -1.650288368e-04f, -1.650994454e-04f, -1.651697628e-04f,
+-1.652397889e-04f, -1.653095236e-04f, -1.653789667e-04f, -1.654481183e-04f, -1.655169782e-04f, -1.655855463e-04f, -1.656538225e-04f, -1.657218068e-04f, -1.657894989e-04f, -1.658568989e-04f,
+-1.659240067e-04f, -1.659908220e-04f, -1.660573450e-04f, -1.661235754e-04f, -1.661895131e-04f, -1.662551582e-04f, -1.663205104e-04f, -1.663855698e-04f, -1.664503361e-04f, -1.665148094e-04f,
+-1.665789896e-04f, -1.666428764e-04f, -1.667064700e-04f, -1.667697701e-04f, -1.668327767e-04f, -1.668954897e-04f, -1.669579091e-04f, -1.670200347e-04f, -1.670818664e-04f, -1.671434042e-04f,
+-1.672046480e-04f, -1.672655977e-04f, -1.673262532e-04f, -1.673866145e-04f, -1.674466814e-04f, -1.675064539e-04f, -1.675659319e-04f, -1.676251154e-04f, -1.676840042e-04f, -1.677425982e-04f,
+-1.678008974e-04f, -1.678589018e-04f, -1.679166112e-04f, -1.679740255e-04f, -1.680311448e-04f, -1.680879688e-04f, -1.681444976e-04f, -1.682007311e-04f, -1.682566691e-04f, -1.683123116e-04f,
+-1.683676586e-04f, -1.684227100e-04f, -1.684774657e-04f, -1.685319256e-04f, -1.685860896e-04f, -1.686399578e-04f, -1.686935299e-04f, -1.687468060e-04f, -1.687997860e-04f, -1.688524698e-04f,
+-1.689048574e-04f, -1.689569486e-04f, -1.690087435e-04f, -1.690602419e-04f, -1.691114438e-04f, -1.691623491e-04f, -1.692129578e-04f, -1.692632697e-04f, -1.693132849e-04f, -1.693630033e-04f,
+-1.694124247e-04f, -1.694615492e-04f, -1.695103767e-04f, -1.695589071e-04f, -1.696071404e-04f, -1.696550765e-04f, -1.697027153e-04f, -1.697500568e-04f, -1.697971010e-04f, -1.698438477e-04f,
+-1.698902969e-04f, -1.699364486e-04f, -1.699823026e-04f, -1.700278591e-04f, -1.700731178e-04f, -1.701180787e-04f, -1.701627419e-04f, -1.702071071e-04f, -1.702511745e-04f, -1.702949438e-04f,
+-1.703384152e-04f, -1.703815885e-04f, -1.704244636e-04f, -1.704670406e-04f, -1.705093193e-04f, -1.705512998e-04f, -1.705929819e-04f, -1.706343657e-04f, -1.706754510e-04f, -1.707162379e-04f,
+-1.707567263e-04f, -1.707969161e-04f, -1.708368073e-04f, -1.708763998e-04f, -1.709156937e-04f, -1.709546888e-04f, -1.709933851e-04f, -1.710317827e-04f, -1.710698813e-04f, -1.711076811e-04f,
+-1.711451819e-04f, -1.711823837e-04f, -1.712192865e-04f, -1.712558902e-04f, -1.712921948e-04f, -1.713282002e-04f, -1.713639065e-04f, -1.713993136e-04f, -1.714344213e-04f, -1.714692298e-04f,
+-1.715037390e-04f, -1.715379488e-04f, -1.715718592e-04f, -1.716054701e-04f, -1.716387816e-04f, -1.716717936e-04f, -1.717045061e-04f, -1.717369189e-04f, -1.717690322e-04f, -1.718008459e-04f,
+-1.718323598e-04f, -1.718635741e-04f, -1.718944887e-04f, -1.719251035e-04f, -1.719554185e-04f, -1.719854338e-04f, -1.720151492e-04f, -1.720445647e-04f, -1.720736803e-04f, -1.721024960e-04f,
+-1.721310118e-04f, -1.721592276e-04f, -1.721871434e-04f, -1.722147592e-04f, -1.722420750e-04f, -1.722690907e-04f, -1.722958063e-04f, -1.723222218e-04f, -1.723483372e-04f, -1.723741524e-04f,
+-1.723996675e-04f, -1.724248823e-04f, -1.724497970e-04f, -1.724744114e-04f, -1.724987256e-04f, -1.725227396e-04f, -1.725464532e-04f, -1.725698666e-04f, -1.725929796e-04f, -1.726157923e-04f,
+-1.726383047e-04f, -1.726605167e-04f, -1.726824283e-04f, -1.727040396e-04f, -1.727253504e-04f, -1.727463608e-04f, -1.727670708e-04f, -1.727874804e-04f, -1.728075896e-04f, -1.728273982e-04f,
+-1.728469064e-04f, -1.728661142e-04f, -1.728850214e-04f, -1.729036282e-04f, -1.729219344e-04f, -1.729399401e-04f, -1.729576454e-04f, -1.729750501e-04f, -1.729921542e-04f, -1.730089579e-04f,
+-1.730254610e-04f, -1.730416636e-04f, -1.730575656e-04f, -1.730731670e-04f, -1.730884680e-04f, -1.731034683e-04f, -1.731181681e-04f, -1.731325674e-04f, -1.731466661e-04f, -1.731604642e-04f,
+-1.731739618e-04f, -1.731871588e-04f, -1.732000553e-04f, -1.732126512e-04f, -1.732249466e-04f, -1.732369414e-04f, -1.732486357e-04f, -1.732600294e-04f, -1.732711226e-04f, -1.732819153e-04f,
+-1.732924075e-04f, -1.733025991e-04f, -1.733124903e-04f, -1.733220809e-04f, -1.733313710e-04f, -1.733403607e-04f, -1.733490498e-04f, -1.733574385e-04f, -1.733655268e-04f, -1.733733146e-04f,
+-1.733808019e-04f, -1.733879888e-04f, -1.733948753e-04f, -1.734014614e-04f, -1.734077472e-04f, -1.734137325e-04f, -1.734194175e-04f, -1.734248021e-04f, -1.734298864e-04f, -1.734346704e-04f,
+-1.734391541e-04f, -1.734433375e-04f, -1.734472206e-04f, -1.734508035e-04f, -1.734540862e-04f, -1.734570686e-04f, -1.734597509e-04f, -1.734621329e-04f, -1.734642148e-04f, -1.734659966e-04f,
+-1.734674783e-04f, -1.734686599e-04f, -1.734695414e-04f, -1.734701229e-04f, -1.734704043e-04f, -1.734703858e-04f, -1.734700672e-04f, -1.734694488e-04f, -1.734685304e-04f, -1.734673121e-04f,
+-1.734657939e-04f, -1.734639759e-04f, -1.734618581e-04f, -1.734594405e-04f, -1.734567231e-04f, -1.734537060e-04f, -1.734503892e-04f, -1.734467727e-04f, -1.734428566e-04f, -1.734386408e-04f,
+-1.734341255e-04f, -1.734293107e-04f, -1.734241963e-04f, -1.734187824e-04f, -1.734130691e-04f, -1.734070564e-04f, -1.734007443e-04f, -1.733941329e-04f, -1.733872221e-04f, -1.733800121e-04f,
+-1.733725029e-04f, -1.733646944e-04f, -1.733565868e-04f, -1.733481801e-04f, -1.733394743e-04f, -1.733304694e-04f, -1.733211656e-04f, -1.733115627e-04f, -1.733016610e-04f, -1.732914604e-04f,
+-1.732809609e-04f, -1.732701626e-04f, -1.732590656e-04f, -1.732476699e-04f, -1.732359755e-04f, -1.732239825e-04f, -1.732116909e-04f, -1.731991008e-04f, -1.731862121e-04f, -1.731730251e-04f,
+-1.731595396e-04f, -1.731457558e-04f, -1.731316738e-04f, -1.731172934e-04f, -1.731026149e-04f, -1.730876382e-04f, -1.730723634e-04f, -1.730567906e-04f, -1.730409197e-04f, -1.730247510e-04f,
+-1.730082843e-04f, -1.729915198e-04f, -1.729744575e-04f, -1.729570974e-04f, -1.729394397e-04f, -1.729214843e-04f, -1.729032314e-04f, -1.728846810e-04f, -1.728658331e-04f, -1.728466878e-04f,
+-1.728272451e-04f, -1.728075052e-04f, -1.727874681e-04f, -1.727671337e-04f, -1.727465023e-04f, -1.727255738e-04f, -1.727043483e-04f, -1.726828259e-04f, -1.726610066e-04f, -1.726388905e-04f,
+-1.726164777e-04f, -1.725937681e-04f, -1.725707620e-04f, -1.725474593e-04f, -1.725238601e-04f, -1.724999645e-04f, -1.724757725e-04f, -1.724512843e-04f, -1.724264998e-04f, -1.724014191e-04f,
+-1.723760423e-04f, -1.723503696e-04f, -1.723244008e-04f, -1.722981362e-04f, -1.722715758e-04f, -1.722447196e-04f, -1.722175677e-04f, -1.721901202e-04f, -1.721623772e-04f, -1.721343387e-04f,
+-1.721060048e-04f, -1.720773756e-04f, -1.720484512e-04f, -1.720192315e-04f, -1.719897168e-04f, -1.719599071e-04f, -1.719298024e-04f, -1.718994028e-04f, -1.718687085e-04f, -1.718377194e-04f,
+-1.718064357e-04f, -1.717748574e-04f, -1.717429847e-04f, -1.717108175e-04f, -1.716783560e-04f, -1.716456003e-04f, -1.716125504e-04f, -1.715792064e-04f, -1.715455684e-04f, -1.715116365e-04f,
+-1.714774108e-04f, -1.714428913e-04f, -1.714080781e-04f, -1.713729714e-04f, -1.713375711e-04f, -1.713018774e-04f, -1.712658904e-04f, -1.712296102e-04f, -1.711930367e-04f, -1.711561702e-04f,
+-1.711190108e-04f, -1.710815584e-04f, -1.710438132e-04f, -1.710057753e-04f, -1.709674448e-04f, -1.709288217e-04f, -1.708899062e-04f, -1.708506983e-04f, -1.708111982e-04f, -1.707714059e-04f,
+-1.707313215e-04f, -1.706909451e-04f, -1.706502768e-04f, -1.706093167e-04f, -1.705680649e-04f, -1.705265215e-04f, -1.704846866e-04f, -1.704425602e-04f, -1.704001425e-04f, -1.703574336e-04f,
+-1.703144336e-04f, -1.702711426e-04f, -1.702275606e-04f, -1.701836877e-04f, -1.701395242e-04f, -1.700950700e-04f, -1.700503252e-04f, -1.700052901e-04f, -1.699599646e-04f, -1.699143488e-04f,
+-1.698684430e-04f, -1.698222471e-04f, -1.697757613e-04f, -1.697289857e-04f, -1.696819203e-04f, -1.696345654e-04f, -1.695869209e-04f, -1.695389871e-04f, -1.694907639e-04f, -1.694422516e-04f,
+-1.693934502e-04f, -1.693443599e-04f, -1.692949806e-04f, -1.692453127e-04f, -1.691953560e-04f, -1.691451109e-04f, -1.690945773e-04f, -1.690437554e-04f, -1.689926454e-04f, -1.689412472e-04f,
+-1.688895610e-04f, -1.688375870e-04f, -1.687853253e-04f, -1.687327759e-04f, -1.686799389e-04f, -1.686268146e-04f, -1.685734030e-04f, -1.685197042e-04f, -1.684657183e-04f, -1.684114455e-04f,
+-1.683568859e-04f, -1.683020396e-04f, -1.682469067e-04f, -1.681914873e-04f, -1.681357815e-04f, -1.680797895e-04f, -1.680235114e-04f, -1.679669473e-04f, -1.679100974e-04f, -1.678529617e-04f,
+-1.677955403e-04f, -1.677378335e-04f, -1.676798413e-04f, -1.676215638e-04f, -1.675630012e-04f, -1.675041535e-04f, -1.674450210e-04f, -1.673856037e-04f, -1.673259018e-04f, -1.672659154e-04f,
+-1.672056446e-04f, -1.671450895e-04f, -1.670842503e-04f, -1.670231272e-04f, -1.669617201e-04f, -1.669000293e-04f, -1.668380549e-04f, -1.667757970e-04f, -1.667132558e-04f, -1.666504313e-04f,
+-1.665873238e-04f, -1.665239333e-04f, -1.664602600e-04f, -1.663963040e-04f, -1.663320654e-04f, -1.662675444e-04f, -1.662027412e-04f, -1.661376557e-04f, -1.660722883e-04f, -1.660066390e-04f,
+-1.659407079e-04f, -1.658744953e-04f, -1.658080011e-04f, -1.657412256e-04f, -1.656741690e-04f, -1.656068313e-04f, -1.655392126e-04f, -1.654713132e-04f, -1.654031332e-04f, -1.653346726e-04f,
+-1.652659317e-04f, -1.651969106e-04f, -1.651276094e-04f, -1.650580283e-04f, -1.649881675e-04f, -1.649180269e-04f, -1.648476069e-04f, -1.647769075e-04f, -1.647059289e-04f, -1.646346713e-04f,
+-1.645631347e-04f, -1.644913194e-04f, -1.644192254e-04f, -1.643468530e-04f, -1.642742022e-04f, -1.642012733e-04f, -1.641280663e-04f, -1.640545815e-04f, -1.639808189e-04f, -1.639067787e-04f,
+-1.638324611e-04f, -1.637578663e-04f, -1.636829942e-04f, -1.636078453e-04f, -1.635324195e-04f, -1.634567170e-04f, -1.633807380e-04f, -1.633044826e-04f, -1.632279511e-04f, -1.631511434e-04f,
+-1.630740599e-04f, -1.629967006e-04f, -1.629190658e-04f, -1.628411555e-04f, -1.627629699e-04f, -1.626845093e-04f, -1.626057736e-04f, -1.625267632e-04f, -1.624474781e-04f, -1.623679185e-04f,
+-1.622880847e-04f, -1.622079766e-04f, -1.621275946e-04f, -1.620469387e-04f, -1.619660091e-04f, -1.618848061e-04f, -1.618033296e-04f, -1.617215800e-04f, -1.616395574e-04f, -1.615572619e-04f,
+-1.614746937e-04f, -1.613918529e-04f, -1.613087398e-04f, -1.612253545e-04f, -1.611416972e-04f, -1.610577680e-04f, -1.609735671e-04f, -1.608890947e-04f, -1.608043509e-04f, -1.607193359e-04f,
+-1.606340498e-04f, -1.605484929e-04f, -1.604626654e-04f, -1.603765673e-04f, -1.602901988e-04f, -1.602035602e-04f, -1.601166516e-04f, -1.600294732e-04f, -1.599420251e-04f, -1.598543075e-04f,
+-1.597663206e-04f, -1.596780645e-04f, -1.595895395e-04f, -1.595007457e-04f, -1.594116833e-04f, -1.593223525e-04f, -1.592327534e-04f, -1.591428862e-04f, -1.590527511e-04f, -1.589623483e-04f,
+-1.588716779e-04f, -1.587807402e-04f, -1.586895352e-04f, -1.585980633e-04f, -1.585063245e-04f, -1.584143190e-04f, -1.583220471e-04f, -1.582295089e-04f, -1.581367046e-04f, -1.580436344e-04f,
+-1.579502984e-04f, -1.578566968e-04f, -1.577628299e-04f, -1.576686978e-04f, -1.575743006e-04f, -1.574796387e-04f, -1.573847121e-04f, -1.572895210e-04f, -1.571940657e-04f, -1.570983463e-04f,
+-1.570023630e-04f, -1.569061160e-04f, -1.568096054e-04f, -1.567128316e-04f, -1.566157946e-04f, -1.565184946e-04f, -1.564209319e-04f, -1.563231066e-04f, -1.562250189e-04f, -1.561266690e-04f,
+-1.560280571e-04f, -1.559291835e-04f, -1.558300482e-04f, -1.557306514e-04f, -1.556309935e-04f, -1.555310745e-04f, -1.554308947e-04f, -1.553304542e-04f, -1.552297532e-04f, -1.551287920e-04f,
+-1.550275708e-04f, -1.549260896e-04f, -1.548243489e-04f, -1.547223486e-04f, -1.546200890e-04f, -1.545175704e-04f, -1.544147929e-04f, -1.543117567e-04f, -1.542084621e-04f, -1.541049091e-04f,
+-1.540010981e-04f, -1.538970292e-04f, -1.537927026e-04f, -1.536881185e-04f, -1.535832772e-04f, -1.534781788e-04f, -1.533728235e-04f, -1.532672115e-04f, -1.531613431e-04f, -1.530552184e-04f,
+-1.529488377e-04f, -1.528422011e-04f, -1.527353088e-04f, -1.526281612e-04f, -1.525207582e-04f, -1.524131003e-04f, -1.523051875e-04f, -1.521970201e-04f, -1.520885984e-04f, -1.519799224e-04f,
+-1.518709924e-04f, -1.517618086e-04f, -1.516523713e-04f, -1.515426806e-04f, -1.514327368e-04f, -1.513225400e-04f, -1.512120905e-04f, -1.511013884e-04f, -1.509904341e-04f, -1.508792277e-04f,
+-1.507677694e-04f, -1.506560594e-04f, -1.505440980e-04f, -1.504318853e-04f, -1.503194216e-04f, -1.502067071e-04f, -1.500937420e-04f, -1.499805265e-04f, -1.498670609e-04f, -1.497533453e-04f,
+-1.496393800e-04f, -1.495251651e-04f, -1.494107010e-04f, -1.492959878e-04f, -1.491810258e-04f, -1.490658151e-04f, -1.489503560e-04f, -1.488346487e-04f, -1.487186934e-04f, -1.486024903e-04f,
+-1.484860397e-04f, -1.483693418e-04f, -1.482523969e-04f, -1.481352050e-04f, -1.480177665e-04f, -1.479000816e-04f, -1.477821504e-04f, -1.476639733e-04f, -1.475455504e-04f, -1.474268821e-04f,
+-1.473079684e-04f, -1.471888096e-04f, -1.470694060e-04f, -1.469497577e-04f, -1.468298651e-04f, -1.467097282e-04f, -1.465893475e-04f, -1.464687230e-04f, -1.463478551e-04f, -1.462267438e-04f,
+-1.461053896e-04f, -1.459837925e-04f, -1.458619529e-04f, -1.457398710e-04f, -1.456175469e-04f, -1.454949810e-04f, -1.453721734e-04f, -1.452491244e-04f, -1.451258342e-04f, -1.450023031e-04f,
+-1.448785313e-04f, -1.447545189e-04f, -1.446302664e-04f, -1.445057738e-04f, -1.443810415e-04f, -1.442560696e-04f, -1.441308584e-04f, -1.440054081e-04f, -1.438797190e-04f, -1.437537913e-04f,
+-1.436276252e-04f, -1.435012211e-04f, -1.433745790e-04f, -1.432476993e-04f, -1.431205822e-04f, -1.429932279e-04f, -1.428656367e-04f, -1.427378088e-04f, -1.426097444e-04f, -1.424814439e-04f,
+-1.423529073e-04f, -1.422241351e-04f, -1.420951274e-04f, -1.419658844e-04f, -1.418364064e-04f, -1.417066937e-04f, -1.415767465e-04f, -1.414465650e-04f, -1.413161494e-04f, -1.411855001e-04f,
+-1.410546173e-04f, -1.409235012e-04f, -1.407921520e-04f, -1.406605701e-04f, -1.405287555e-04f, -1.403967087e-04f, -1.402644299e-04f, -1.401319192e-04f, -1.399991769e-04f, -1.398662034e-04f,
+-1.397329988e-04f, -1.395995633e-04f, -1.394658974e-04f, -1.393320010e-04f, -1.391978747e-04f, -1.390635185e-04f, -1.389289328e-04f, -1.387941177e-04f, -1.386590736e-04f, -1.385238007e-04f,
+-1.383882992e-04f, -1.382525694e-04f, -1.381166116e-04f, -1.379804260e-04f, -1.378440128e-04f, -1.377073724e-04f, -1.375705049e-04f, -1.374334107e-04f, -1.372960899e-04f, -1.371585429e-04f,
+-1.370207698e-04f, -1.368827711e-04f, -1.367445468e-04f, -1.366060973e-04f, -1.364674228e-04f, -1.363285235e-04f, -1.361893999e-04f, -1.360500520e-04f, -1.359104802e-04f, -1.357706847e-04f,
+-1.356306657e-04f, -1.354904236e-04f, -1.353499586e-04f, -1.352092710e-04f, -1.350683610e-04f, -1.349272288e-04f, -1.347858748e-04f, -1.346442992e-04f, -1.345025023e-04f, -1.343604843e-04f,
+-1.342182455e-04f, -1.340757862e-04f, -1.339331066e-04f, -1.337902069e-04f, -1.336470876e-04f, -1.335037487e-04f, -1.333601907e-04f, -1.332164137e-04f, -1.330724180e-04f, -1.329282038e-04f,
+-1.327837716e-04f, -1.326391215e-04f, -1.324942537e-04f, -1.323491686e-04f, -1.322038664e-04f, -1.320583475e-04f, -1.319126119e-04f, -1.317666601e-04f, -1.316204924e-04f, -1.314741089e-04f,
+-1.313275099e-04f, -1.311806957e-04f, -1.310336667e-04f, -1.308864230e-04f, -1.307389649e-04f, -1.305912927e-04f, -1.304434067e-04f, -1.302953072e-04f, -1.301469943e-04f, -1.299984685e-04f,
+-1.298497299e-04f, -1.297007789e-04f, -1.295516157e-04f, -1.294022406e-04f, -1.292526539e-04f, -1.291028558e-04f, -1.289528466e-04f, -1.288026266e-04f, -1.286521961e-04f, -1.285015554e-04f,
+-1.283507047e-04f, -1.281996443e-04f, -1.280483745e-04f, -1.278968955e-04f, -1.277452077e-04f, -1.275933114e-04f, -1.274412067e-04f, -1.272888940e-04f, -1.271363736e-04f, -1.269836457e-04f,
+-1.268307107e-04f, -1.266775687e-04f, -1.265242202e-04f, -1.263706653e-04f, -1.262169043e-04f, -1.260629377e-04f, -1.259087655e-04f, -1.257543881e-04f, -1.255998058e-04f, -1.254450189e-04f,
+-1.252900277e-04f, -1.251348324e-04f, -1.249794333e-04f, -1.248238307e-04f, -1.246680249e-04f, -1.245120162e-04f, -1.243558049e-04f, -1.241993912e-04f, -1.240427755e-04f, -1.238859580e-04f,
+-1.237289390e-04f, -1.235717188e-04f, -1.234142977e-04f, -1.232566760e-04f, -1.230988540e-04f, -1.229408319e-04f, -1.227826101e-04f, -1.226241888e-04f, -1.224655683e-04f, -1.223067490e-04f,
+-1.221477311e-04f, -1.219885148e-04f, -1.218291006e-04f, -1.216694887e-04f, -1.215096793e-04f, -1.213496728e-04f, -1.211894695e-04f, -1.210290696e-04f, -1.208684735e-04f, -1.207076814e-04f,
+-1.205466937e-04f, -1.203855106e-04f, -1.202241324e-04f, -1.200625594e-04f, -1.199007920e-04f, -1.197388304e-04f, -1.195766748e-04f, -1.194143257e-04f, -1.192517833e-04f, -1.190890479e-04f,
+-1.189261198e-04f, -1.187629993e-04f, -1.185996866e-04f, -1.184361822e-04f, -1.182724862e-04f, -1.181085991e-04f, -1.179445210e-04f, -1.177802523e-04f, -1.176157933e-04f, -1.174511443e-04f,
+-1.172863055e-04f, -1.171212774e-04f, -1.169560601e-04f, -1.167906540e-04f, -1.166250594e-04f, -1.164592766e-04f, -1.162933059e-04f, -1.161271476e-04f, -1.159608019e-04f, -1.157942693e-04f,
+-1.156275500e-04f, -1.154606443e-04f, -1.152935525e-04f, -1.151262749e-04f, -1.149588119e-04f, -1.147911636e-04f, -1.146233305e-04f, -1.144553128e-04f, -1.142871109e-04f, -1.141187250e-04f,
+-1.139501555e-04f, -1.137814026e-04f, -1.136124667e-04f, -1.134433481e-04f, -1.132740470e-04f, -1.131045639e-04f, -1.129348989e-04f, -1.127650524e-04f, -1.125950248e-04f, -1.124248163e-04f,
+-1.122544272e-04f, -1.120838578e-04f, -1.119131085e-04f, -1.117421795e-04f, -1.115710713e-04f, -1.113997840e-04f, -1.112283180e-04f, -1.110566736e-04f, -1.108848511e-04f, -1.107128508e-04f,
+-1.105406731e-04f, -1.103683183e-04f, -1.101957865e-04f, -1.100230783e-04f, -1.098501939e-04f, -1.096771335e-04f, -1.095038976e-04f, -1.093304864e-04f, -1.091569003e-04f, -1.089831395e-04f,
+-1.088092044e-04f, -1.086350952e-04f, -1.084608124e-04f, -1.082863562e-04f, -1.081117270e-04f, -1.079369249e-04f, -1.077619505e-04f, -1.075868039e-04f, -1.074114856e-04f, -1.072359957e-04f,
+-1.070603347e-04f, -1.068845029e-04f, -1.067085005e-04f, -1.065323279e-04f, -1.063559854e-04f, -1.061794733e-04f, -1.060027920e-04f, -1.058259418e-04f, -1.056489229e-04f, -1.054717358e-04f,
+-1.052943807e-04f, -1.051168579e-04f, -1.049391678e-04f, -1.047613107e-04f, -1.045832869e-04f, -1.044050967e-04f, -1.042267404e-04f, -1.040482185e-04f, -1.038695311e-04f, -1.036906787e-04f,
+-1.035116615e-04f, -1.033324799e-04f, -1.031531341e-04f, -1.029736246e-04f, -1.027939516e-04f, -1.026141155e-04f, -1.024341165e-04f, -1.022539551e-04f, -1.020736315e-04f, -1.018931461e-04f,
+-1.017124991e-04f, -1.015316910e-04f, -1.013507220e-04f, -1.011695924e-04f, -1.009883026e-04f, -1.008068530e-04f, -1.006252438e-04f, -1.004434754e-04f, -1.002615480e-04f, -1.000794621e-04f,
+-9.989721795e-05f, -9.971481587e-05f, -9.953225620e-05f, -9.934953926e-05f, -9.916666539e-05f, -9.898363492e-05f, -9.880044817e-05f, -9.861710548e-05f, -9.843360716e-05f, -9.824995357e-05f,
+-9.806614501e-05f, -9.788218184e-05f, -9.769806437e-05f, -9.751379293e-05f, -9.732936786e-05f, -9.714478949e-05f, -9.696005816e-05f, -9.677517419e-05f, -9.659013791e-05f, -9.640494966e-05f,
+-9.621960977e-05f, -9.603411857e-05f, -9.584847640e-05f, -9.566268360e-05f, -9.547674048e-05f, -9.529064739e-05f, -9.510440467e-05f, -9.491801264e-05f, -9.473147164e-05f, -9.454478201e-05f,
+-9.435794408e-05f, -9.417095818e-05f, -9.398382466e-05f, -9.379654384e-05f, -9.360911606e-05f, -9.342154167e-05f, -9.323382099e-05f, -9.304595436e-05f, -9.285794212e-05f, -9.266978460e-05f,
+-9.248148215e-05f, -9.229303510e-05f, -9.210444379e-05f, -9.191570856e-05f, -9.172682974e-05f, -9.153780767e-05f, -9.134864270e-05f, -9.115933515e-05f, -9.096988538e-05f, -9.078029371e-05f,
+-9.059056050e-05f, -9.040068607e-05f, -9.021067077e-05f, -9.002051493e-05f, -8.983021891e-05f, -8.963978304e-05f, -8.944920765e-05f, -8.925849310e-05f, -8.906763972e-05f, -8.887664785e-05f,
+-8.868551784e-05f, -8.849425002e-05f, -8.830284475e-05f, -8.811130235e-05f, -8.791962318e-05f, -8.772780758e-05f, -8.753585588e-05f, -8.734376844e-05f, -8.715154560e-05f, -8.695918769e-05f,
+-8.676669507e-05f, -8.657406807e-05f, -8.638130705e-05f, -8.618841234e-05f, -8.599538429e-05f, -8.580222325e-05f, -8.560892955e-05f, -8.541550356e-05f, -8.522194560e-05f, -8.502825603e-05f,
+-8.483443519e-05f, -8.464048343e-05f, -8.444640109e-05f, -8.425218852e-05f, -8.405784607e-05f, -8.386337408e-05f, -8.366877290e-05f, -8.347404289e-05f, -8.327918437e-05f, -8.308419771e-05f,
+-8.288908325e-05f, -8.269384133e-05f, -8.249847232e-05f, -8.230297654e-05f, -8.210735436e-05f, -8.191160612e-05f, -8.171573218e-05f, -8.151973287e-05f, -8.132360855e-05f, -8.112735957e-05f,
+-8.093098627e-05f, -8.073448902e-05f, -8.053786815e-05f, -8.034112402e-05f, -8.014425698e-05f, -7.994726737e-05f, -7.975015556e-05f, -7.955292189e-05f, -7.935556670e-05f, -7.915809036e-05f,
+-7.896049322e-05f, -7.876277562e-05f, -7.856493792e-05f, -7.836698047e-05f, -7.816890362e-05f, -7.797070772e-05f, -7.777239313e-05f, -7.757396020e-05f, -7.737540928e-05f, -7.717674073e-05f,
+-7.697795490e-05f, -7.677905213e-05f, -7.658003280e-05f, -7.638089724e-05f, -7.618164582e-05f, -7.598227888e-05f, -7.578279679e-05f, -7.558319989e-05f, -7.538348854e-05f, -7.518366310e-05f,
+-7.498372391e-05f, -7.478367135e-05f, -7.458350575e-05f, -7.438322748e-05f, -7.418283689e-05f, -7.398233434e-05f, -7.378172019e-05f, -7.358099478e-05f, -7.338015848e-05f, -7.317921164e-05f,
+-7.297815462e-05f, -7.277698777e-05f, -7.257571146e-05f, -7.237432604e-05f, -7.217283187e-05f, -7.197122929e-05f, -7.176951869e-05f, -7.156770040e-05f, -7.136577479e-05f, -7.116374221e-05f,
+-7.096160303e-05f, -7.075935760e-05f, -7.055700628e-05f, -7.035454943e-05f, -7.015198740e-05f, -6.994932057e-05f, -6.974654928e-05f, -6.954367389e-05f, -6.934069477e-05f, -6.913761228e-05f,
+-6.893442677e-05f, -6.873113860e-05f, -6.852774814e-05f, -6.832425574e-05f, -6.812066176e-05f, -6.791696657e-05f, -6.771317053e-05f, -6.750927399e-05f, -6.730527732e-05f, -6.710118087e-05f,
+-6.689698502e-05f, -6.669269011e-05f, -6.648829652e-05f, -6.628380460e-05f, -6.607921472e-05f, -6.587452723e-05f, -6.566974250e-05f, -6.546486090e-05f, -6.525988277e-05f, -6.505480850e-05f,
+-6.484963843e-05f, -6.464437293e-05f, -6.443901237e-05f, -6.423355710e-05f, -6.402800750e-05f, -6.382236392e-05f, -6.361662672e-05f, -6.341079628e-05f, -6.320487295e-05f, -6.299885710e-05f,
+-6.279274908e-05f, -6.258654928e-05f, -6.238025804e-05f, -6.217387574e-05f, -6.196740274e-05f, -6.176083940e-05f, -6.155418609e-05f, -6.134744317e-05f, -6.114061101e-05f, -6.093368997e-05f,
+-6.072668042e-05f, -6.051958272e-05f, -6.031239724e-05f, -6.010512434e-05f, -5.989776439e-05f, -5.969031776e-05f, -5.948278481e-05f, -5.927516591e-05f, -5.906746142e-05f, -5.885967171e-05f,
+-5.865179715e-05f, -5.844383809e-05f, -5.823579492e-05f, -5.802766800e-05f, -5.781945768e-05f, -5.761116435e-05f, -5.740278836e-05f, -5.719433009e-05f, -5.698578990e-05f, -5.677716816e-05f,
+-5.656846523e-05f, -5.635968149e-05f, -5.615081729e-05f, -5.594187302e-05f, -5.573284904e-05f, -5.552374571e-05f, -5.531456340e-05f, -5.510530249e-05f, -5.489596333e-05f, -5.468654631e-05f,
+-5.447705178e-05f, -5.426748012e-05f, -5.405783169e-05f, -5.384810687e-05f, -5.363830602e-05f, -5.342842951e-05f, -5.321847771e-05f, -5.300845099e-05f, -5.279834973e-05f, -5.258817428e-05f,
+-5.237792502e-05f, -5.216760232e-05f, -5.195720654e-05f, -5.174673807e-05f, -5.153619726e-05f, -5.132558449e-05f, -5.111490013e-05f, -5.090414455e-05f, -5.069331812e-05f, -5.048242121e-05f,
+-5.027145419e-05f, -5.006041742e-05f, -4.984931129e-05f, -4.963813617e-05f, -4.942689241e-05f, -4.921558040e-05f, -4.900420051e-05f, -4.879275310e-05f, -4.858123855e-05f, -4.836965723e-05f,
+-4.815800950e-05f, -4.794629576e-05f, -4.773451635e-05f, -4.752267166e-05f, -4.731076206e-05f, -4.709878791e-05f, -4.688674960e-05f, -4.667464749e-05f, -4.646248196e-05f, -4.625025337e-05f,
+-4.603796210e-05f, -4.582560852e-05f, -4.561319301e-05f, -4.540071593e-05f, -4.518817767e-05f, -4.497557858e-05f, -4.476291905e-05f, -4.455019945e-05f, -4.433742015e-05f, -4.412458152e-05f,
+-4.391168393e-05f, -4.369872777e-05f, -4.348571339e-05f, -4.327264119e-05f, -4.305951152e-05f, -4.284632476e-05f, -4.263308129e-05f, -4.241978148e-05f, -4.220642570e-05f, -4.199301433e-05f,
+-4.177954774e-05f, -4.156602630e-05f, -4.135245039e-05f, -4.113882038e-05f, -4.092513665e-05f, -4.071139956e-05f, -4.049760950e-05f, -4.028376684e-05f, -4.006987194e-05f, -3.985592520e-05f,
+-3.964192697e-05f, -3.942787764e-05f, -3.921377758e-05f, -3.899962716e-05f, -3.878542676e-05f, -3.857117675e-05f, -3.835687751e-05f, -3.814252941e-05f, -3.792813283e-05f, -3.771368814e-05f,
+-3.749919572e-05f, -3.728465594e-05f, -3.707006917e-05f, -3.685543580e-05f, -3.664075619e-05f, -3.642603072e-05f, -3.621125977e-05f, -3.599644372e-05f, -3.578158293e-05f, -3.556667778e-05f,
+-3.535172865e-05f, -3.513673591e-05f, -3.492169995e-05f, -3.470662112e-05f, -3.449149982e-05f, -3.427633641e-05f, -3.406113128e-05f, -3.384588479e-05f, -3.363059732e-05f, -3.341526925e-05f,
+-3.319990095e-05f, -3.298449281e-05f, -3.276904519e-05f, -3.255355847e-05f, -3.233803303e-05f, -3.212246924e-05f, -3.190686748e-05f, -3.169122813e-05f, -3.147555156e-05f, -3.125983814e-05f,
+-3.104408826e-05f, -3.082830229e-05f, -3.061248061e-05f, -3.039662359e-05f, -3.018073160e-05f, -2.996480503e-05f, -2.974884426e-05f, -2.953284965e-05f, -2.931682158e-05f, -2.910076044e-05f,
+-2.888466659e-05f, -2.866854042e-05f, -2.845238229e-05f, -2.823619259e-05f, -2.801997170e-05f, -2.780371998e-05f, -2.758743782e-05f, -2.737112559e-05f, -2.715478368e-05f, -2.693841244e-05f,
+-2.672201228e-05f, -2.650558355e-05f, -2.628912663e-05f, -2.607264191e-05f, -2.585612976e-05f, -2.563959055e-05f, -2.542302467e-05f, -2.520643249e-05f, -2.498981438e-05f, -2.477317073e-05f,
+-2.455650190e-05f, -2.433980829e-05f, -2.412309026e-05f, -2.390634818e-05f, -2.368958245e-05f, -2.347279343e-05f, -2.325598150e-05f, -2.303914705e-05f, -2.282229043e-05f, -2.260541204e-05f,
+-2.238851225e-05f, -2.217159143e-05f, -2.195464997e-05f, -2.173768823e-05f, -2.152070661e-05f, -2.130370546e-05f, -2.108668518e-05f, -2.086964614e-05f, -2.065258871e-05f, -2.043551327e-05f,
+-2.021842020e-05f, -2.000130988e-05f, -1.978418268e-05f, -1.956703898e-05f, -1.934987915e-05f, -1.913270358e-05f, -1.891551264e-05f, -1.869830671e-05f, -1.848108616e-05f, -1.826385137e-05f,
+-1.804660272e-05f, -1.782934059e-05f, -1.761206535e-05f, -1.739477738e-05f, -1.717747705e-05f, -1.696016474e-05f, -1.674284084e-05f, -1.652550571e-05f, -1.630815974e-05f, -1.609080329e-05f,
+-1.587343675e-05f, -1.565606050e-05f, -1.543867491e-05f, -1.522128035e-05f, -1.500387721e-05f, -1.478646586e-05f, -1.456904668e-05f, -1.435162004e-05f, -1.413418632e-05f, -1.391674590e-05f,
+-1.369929916e-05f, -1.348184647e-05f, -1.326438820e-05f, -1.304692474e-05f, -1.282945646e-05f, -1.261198374e-05f, -1.239450695e-05f, -1.217702647e-05f, -1.195954269e-05f, -1.174205596e-05f,
+-1.152456667e-05f, -1.130707520e-05f, -1.108958193e-05f, -1.087208722e-05f, -1.065459146e-05f, -1.043709502e-05f, -1.021959828e-05f, -1.000210161e-05f, -9.784605395e-06f, -9.567110006e-06f,
+-9.349615820e-06f, -9.132123213e-06f, -8.914632561e-06f, -8.697144241e-06f, -8.479658628e-06f, -8.262176098e-06f, -8.044697028e-06f, -7.827221792e-06f, -7.609750768e-06f, -7.392284331e-06f,
+-7.174822856e-06f, -6.957366720e-06f, -6.739916298e-06f, -6.522471966e-06f, -6.305034099e-06f, -6.087603074e-06f, -5.870179265e-06f, -5.652763048e-06f, -5.435354799e-06f, -5.217954893e-06f,
+-5.000563705e-06f, -4.783181611e-06f, -4.565808986e-06f, -4.348446206e-06f, -4.131093644e-06f, -3.913751678e-06f, -3.696420681e-06f, -3.479101029e-06f, -3.261793096e-06f, -3.044497258e-06f,
+-2.827213890e-06f, -2.609943366e-06f, -2.392686062e-06f, -2.175442351e-06f, -1.958212609e-06f, -1.740997210e-06f, -1.523796529e-06f, -1.306610940e-06f, -1.089440818e-06f, -8.722865370e-07f,
+-6.551484716e-07f, -4.380269959e-07f, -2.209224843e-07f, -3.835310753e-09f, 2.132341505e-07f, 4.302855254e-07f, 6.473184401e-07f, 8.643325206e-07f, 1.081327393e-06f, 1.298302684e-06f,
+1.515258019e-06f, 1.732193024e-06f, 1.949107327e-06f, 2.166000554e-06f, 2.382872331e-06f, 2.599722285e-06f, 2.816550042e-06f, 3.033355229e-06f, 3.250137473e-06f, 3.466896402e-06f,
+3.683631641e-06f, 3.900342818e-06f, 4.117029560e-06f, 4.333691494e-06f, 4.550328248e-06f, 4.766939448e-06f, 4.983524722e-06f, 5.200083698e-06f, 5.416616003e-06f, 5.633121265e-06f,
+5.849599112e-06f, 6.066049170e-06f, 6.282471069e-06f, 6.498864435e-06f, 6.715228898e-06f, 6.931564085e-06f, 7.147869624e-06f, 7.364145143e-06f, 7.580390271e-06f, 7.796604637e-06f,
+8.012787869e-06f, 8.228939595e-06f, 8.445059443e-06f, 8.661147044e-06f, 8.877202026e-06f, 9.093224017e-06f, 9.309212646e-06f, 9.525167544e-06f, 9.741088338e-06f, 9.956974658e-06f,
+1.017282613e-05f, 1.038864240e-05f, 1.060442307e-05f, 1.082016779e-05f, 1.103587618e-05f, 1.125154788e-05f, 1.146718251e-05f, 1.168277971e-05f, 1.189833910e-05f, 1.211386031e-05f,
+1.232934298e-05f, 1.254478673e-05f, 1.276019120e-05f, 1.297555601e-05f, 1.319088080e-05f, 1.340616520e-05f, 1.362140884e-05f, 1.383661134e-05f, 1.405177235e-05f, 1.426689148e-05f,
+1.448196838e-05f, 1.469700268e-05f, 1.491199400e-05f, 1.512694198e-05f, 1.534184624e-05f, 1.555670643e-05f, 1.577152217e-05f, 1.598629310e-05f, 1.620101884e-05f, 1.641569903e-05f,
+1.663033331e-05f, 1.684492129e-05f, 1.705946263e-05f, 1.727395694e-05f, 1.748840387e-05f, 1.770280304e-05f, 1.791715409e-05f, 1.813145665e-05f, 1.834571036e-05f, 1.855991485e-05f,
+1.877406974e-05f, 1.898817468e-05f, 1.920222930e-05f, 1.941623323e-05f, 1.963018611e-05f, 1.984408757e-05f, 2.005793725e-05f, 2.027173477e-05f, 2.048547978e-05f, 2.069917191e-05f,
+2.091281079e-05f, 2.112639605e-05f, 2.133992734e-05f, 2.155340429e-05f, 2.176682653e-05f, 2.198019369e-05f, 2.219350543e-05f, 2.240676136e-05f, 2.261996112e-05f, 2.283310436e-05f,
+2.304619070e-05f, 2.325921978e-05f, 2.347219124e-05f, 2.368510472e-05f, 2.389795985e-05f, 2.411075627e-05f, 2.432349361e-05f, 2.453617151e-05f, 2.474878961e-05f, 2.496134755e-05f,
+2.517384496e-05f, 2.538628148e-05f, 2.559865675e-05f, 2.581097040e-05f, 2.602322208e-05f, 2.623541142e-05f, 2.644753805e-05f, 2.665960163e-05f, 2.687160177e-05f, 2.708353814e-05f,
+2.729541035e-05f, 2.750721806e-05f, 2.771896090e-05f, 2.793063850e-05f, 2.814225052e-05f, 2.835379658e-05f, 2.856527633e-05f, 2.877668941e-05f, 2.898803545e-05f, 2.919931410e-05f,
+2.941052499e-05f, 2.962166777e-05f, 2.983274208e-05f, 3.004374756e-05f, 3.025468384e-05f, 3.046555058e-05f, 3.067634740e-05f, 3.088707396e-05f, 3.109772988e-05f, 3.130831482e-05f,
+3.151882841e-05f, 3.172927031e-05f, 3.193964013e-05f, 3.214993754e-05f, 3.236016218e-05f, 3.257031367e-05f, 3.278039168e-05f, 3.299039583e-05f, 3.320032578e-05f, 3.341018116e-05f,
+3.361996162e-05f, 3.382966681e-05f, 3.403929636e-05f, 3.424884991e-05f, 3.445832713e-05f, 3.466772763e-05f, 3.487705108e-05f, 3.508629711e-05f, 3.529546537e-05f, 3.550455551e-05f,
+3.571356716e-05f, 3.592249998e-05f, 3.613135360e-05f, 3.634012768e-05f, 3.654882186e-05f, 3.675743578e-05f, 3.696596909e-05f, 3.717442144e-05f, 3.738279247e-05f, 3.759108183e-05f,
+3.779928916e-05f, 3.800741411e-05f, 3.821545634e-05f, 3.842341547e-05f, 3.863129117e-05f, 3.883908308e-05f, 3.904679084e-05f, 3.925441411e-05f, 3.946195252e-05f, 3.966940574e-05f,
+3.987677341e-05f, 4.008405517e-05f, 4.029125068e-05f, 4.049835958e-05f, 4.070538152e-05f, 4.091231615e-05f, 4.111916312e-05f, 4.132592208e-05f, 4.153259269e-05f, 4.173917458e-05f,
+4.194566740e-05f, 4.215207082e-05f, 4.235838448e-05f, 4.256460802e-05f, 4.277074111e-05f, 4.297678339e-05f, 4.318273450e-05f, 4.338859412e-05f, 4.359436187e-05f, 4.380003743e-05f,
+4.400562043e-05f, 4.421111053e-05f, 4.441650738e-05f, 4.462181063e-05f, 4.482701995e-05f, 4.503213497e-05f, 4.523715535e-05f, 4.544208075e-05f, 4.564691082e-05f, 4.585164521e-05f,
+4.605628358e-05f, 4.626082558e-05f, 4.646527086e-05f, 4.666961907e-05f, 4.687386988e-05f, 4.707802294e-05f, 4.728207790e-05f, 4.748603442e-05f, 4.768989215e-05f, 4.789365074e-05f,
+4.809730986e-05f, 4.830086916e-05f, 4.850432830e-05f, 4.870768692e-05f, 4.891094470e-05f, 4.911410128e-05f, 4.931715632e-05f, 4.952010947e-05f, 4.972296041e-05f, 4.992570877e-05f,
+5.012835423e-05f, 5.033089644e-05f, 5.053333505e-05f, 5.073566973e-05f, 5.093790013e-05f, 5.114002592e-05f, 5.134204674e-05f, 5.154396227e-05f, 5.174577215e-05f, 5.194747606e-05f,
+5.214907364e-05f, 5.235056456e-05f, 5.255194848e-05f, 5.275322506e-05f, 5.295439397e-05f, 5.315545485e-05f, 5.335640737e-05f, 5.355725120e-05f, 5.375798599e-05f, 5.395861141e-05f,
+5.415912711e-05f, 5.435953277e-05f, 5.455982804e-05f, 5.476001258e-05f, 5.496008606e-05f, 5.516004815e-05f, 5.535989850e-05f, 5.555963677e-05f, 5.575926264e-05f, 5.595877576e-05f,
+5.615817580e-05f, 5.635746242e-05f, 5.655663529e-05f, 5.675569408e-05f, 5.695463844e-05f, 5.715346805e-05f, 5.735218256e-05f, 5.755078165e-05f, 5.774926498e-05f, 5.794763222e-05f,
+5.814588302e-05f, 5.834401707e-05f, 5.854203402e-05f, 5.873993355e-05f, 5.893771532e-05f, 5.913537899e-05f, 5.933292424e-05f, 5.953035073e-05f, 5.972765814e-05f, 5.992484612e-05f,
+6.012191435e-05f, 6.031886251e-05f, 6.051569024e-05f, 6.071239724e-05f, 6.090898316e-05f, 6.110544767e-05f, 6.130179046e-05f, 6.149801117e-05f, 6.169410950e-05f, 6.189008510e-05f,
+6.208593765e-05f, 6.228166682e-05f, 6.247727228e-05f, 6.267275370e-05f, 6.286811076e-05f, 6.306334313e-05f, 6.325845047e-05f, 6.345343247e-05f, 6.364828879e-05f, 6.384301912e-05f,
+6.403762311e-05f, 6.423210045e-05f, 6.442645081e-05f, 6.462067386e-05f, 6.481476928e-05f, 6.500873675e-05f, 6.520257593e-05f, 6.539628651e-05f, 6.558986815e-05f, 6.578332054e-05f,
+6.597664335e-05f, 6.616983626e-05f, 6.636289893e-05f, 6.655583106e-05f, 6.674863231e-05f, 6.694130237e-05f, 6.713384091e-05f, 6.732624761e-05f, 6.751852214e-05f, 6.771066419e-05f,
+6.790267343e-05f, 6.809454955e-05f, 6.828629222e-05f, 6.847790111e-05f, 6.866937592e-05f, 6.886071631e-05f, 6.905192198e-05f, 6.924299259e-05f, 6.943392784e-05f, 6.962472740e-05f,
+6.981539095e-05f, 7.000591817e-05f, 7.019630875e-05f, 7.038656236e-05f, 7.057667869e-05f, 7.076665743e-05f, 7.095649825e-05f, 7.114620083e-05f, 7.133576487e-05f, 7.152519004e-05f,
+7.171447603e-05f, 7.190362251e-05f, 7.209262919e-05f, 7.228149573e-05f, 7.247022183e-05f, 7.265880717e-05f, 7.284725143e-05f, 7.303555430e-05f, 7.322371547e-05f, 7.341173462e-05f,
+7.359961144e-05f, 7.378734562e-05f, 7.397493684e-05f, 7.416238479e-05f, 7.434968915e-05f, 7.453684962e-05f, 7.472386589e-05f, 7.491073763e-05f, 7.509746454e-05f, 7.528404632e-05f,
+7.547048264e-05f, 7.565677319e-05f, 7.584291768e-05f, 7.602891578e-05f, 7.621476719e-05f, 7.640047159e-05f, 7.658602868e-05f, 7.677143816e-05f, 7.695669970e-05f, 7.714181301e-05f,
+7.732677777e-05f, 7.751159367e-05f, 7.769626042e-05f, 7.788077769e-05f, 7.806514520e-05f, 7.824936261e-05f, 7.843342965e-05f, 7.861734598e-05f, 7.880111132e-05f, 7.898472535e-05f,
+7.916818777e-05f, 7.935149827e-05f, 7.953465656e-05f, 7.971766231e-05f, 7.990051524e-05f, 8.008321504e-05f, 8.026576140e-05f, 8.044815402e-05f, 8.063039259e-05f, 8.081247683e-05f,
+8.099440641e-05f, 8.117618105e-05f, 8.135780043e-05f, 8.153926426e-05f, 8.172057224e-05f, 8.190172406e-05f, 8.208271943e-05f, 8.226355804e-05f, 8.244423959e-05f, 8.262476379e-05f,
+8.280513034e-05f, 8.298533893e-05f, 8.316538926e-05f, 8.334528105e-05f, 8.352501399e-05f, 8.370458778e-05f, 8.388400212e-05f, 8.406325673e-05f, 8.424235129e-05f, 8.442128552e-05f,
+8.460005911e-05f, 8.477867178e-05f, 8.495712322e-05f, 8.513541315e-05f, 8.531354125e-05f, 8.549150725e-05f, 8.566931085e-05f, 8.584695174e-05f, 8.602442964e-05f, 8.620174426e-05f,
+8.637889530e-05f, 8.655588246e-05f, 8.673270546e-05f, 8.690936400e-05f, 8.708585779e-05f, 8.726218654e-05f, 8.743834995e-05f, 8.761434774e-05f, 8.779017962e-05f, 8.796584528e-05f,
+8.814134446e-05f, 8.831667684e-05f, 8.849184215e-05f, 8.866684010e-05f, 8.884167039e-05f, 8.901633274e-05f, 8.919082685e-05f, 8.936515245e-05f, 8.953930924e-05f, 8.971329693e-05f,
+8.988711525e-05f, 9.006076389e-05f, 9.023424258e-05f, 9.040755103e-05f, 9.058068895e-05f, 9.075365606e-05f, 9.092645207e-05f, 9.109907670e-05f, 9.127152966e-05f, 9.144381067e-05f,
+9.161591944e-05f, 9.178785569e-05f, 9.195961915e-05f, 9.213120951e-05f, 9.230262651e-05f, 9.247386986e-05f, 9.264493927e-05f, 9.281583447e-05f, 9.298655518e-05f, 9.315710111e-05f,
+9.332747198e-05f, 9.349766752e-05f, 9.366768743e-05f, 9.383753145e-05f, 9.400719929e-05f, 9.417669068e-05f, 9.434600533e-05f, 9.451514297e-05f, 9.468410332e-05f, 9.485288610e-05f,
+9.502149103e-05f, 9.518991784e-05f, 9.535816625e-05f, 9.552623598e-05f, 9.569412676e-05f, 9.586183831e-05f, 9.602937036e-05f, 9.619672263e-05f, 9.636389485e-05f, 9.653088673e-05f,
+9.669769802e-05f, 9.686432842e-05f, 9.703077768e-05f, 9.719704552e-05f, 9.736313166e-05f, 9.752903583e-05f, 9.769475777e-05f, 9.786029719e-05f, 9.802565382e-05f, 9.819082741e-05f,
+9.835581767e-05f, 9.852062433e-05f, 9.868524713e-05f, 9.884968579e-05f, 9.901394005e-05f, 9.917800964e-05f, 9.934189428e-05f, 9.950559372e-05f, 9.966910767e-05f, 9.983243588e-05f,
+9.999557808e-05f, 1.001585340e-04f, 1.003213034e-04f, 1.004838859e-04f, 1.006462814e-04f, 1.008084895e-04f, 1.009705100e-04f, 1.011323427e-04f, 1.012939872e-04f, 1.014554433e-04f,
+1.016167107e-04f, 1.017777892e-04f, 1.019386785e-04f, 1.020993784e-04f, 1.022598885e-04f, 1.024202087e-04f, 1.025803386e-04f, 1.027402780e-04f, 1.029000266e-04f, 1.030595842e-04f,
+1.032189505e-04f, 1.033781253e-04f, 1.035371083e-04f, 1.036958992e-04f, 1.038544978e-04f, 1.040129037e-04f, 1.041711169e-04f, 1.043291369e-04f, 1.044869636e-04f, 1.046445967e-04f,
+1.048020359e-04f, 1.049592810e-04f, 1.051163317e-04f, 1.052731878e-04f, 1.054298489e-04f, 1.055863149e-04f, 1.057425855e-04f, 1.058986605e-04f, 1.060545395e-04f, 1.062102224e-04f,
+1.063657088e-04f, 1.065209986e-04f, 1.066760915e-04f, 1.068309871e-04f, 1.069856854e-04f, 1.071401859e-04f, 1.072944886e-04f, 1.074485930e-04f, 1.076024990e-04f, 1.077562064e-04f,
+1.079097148e-04f, 1.080630240e-04f, 1.082161338e-04f, 1.083690439e-04f, 1.085217541e-04f, 1.086742641e-04f, 1.088265737e-04f, 1.089786826e-04f, 1.091305906e-04f, 1.092822974e-04f,
+1.094338028e-04f, 1.095851066e-04f, 1.097362085e-04f, 1.098871082e-04f, 1.100378056e-04f, 1.101883003e-04f, 1.103385921e-04f, 1.104886808e-04f, 1.106385662e-04f, 1.107882479e-04f,
+1.109377258e-04f, 1.110869996e-04f, 1.112360691e-04f, 1.113849340e-04f, 1.115335941e-04f, 1.116820492e-04f, 1.118302989e-04f, 1.119783431e-04f, 1.121261816e-04f, 1.122738140e-04f,
+1.124212402e-04f, 1.125684599e-04f, 1.127154728e-04f, 1.128622789e-04f, 1.130088777e-04f, 1.131552690e-04f, 1.133014527e-04f, 1.134474285e-04f, 1.135931962e-04f, 1.137387554e-04f,
+1.138841061e-04f, 1.140292479e-04f, 1.141741806e-04f, 1.143189040e-04f, 1.144634179e-04f, 1.146077220e-04f, 1.147518160e-04f, 1.148956998e-04f, 1.150393732e-04f, 1.151828358e-04f,
+1.153260875e-04f, 1.154691280e-04f, 1.156119571e-04f, 1.157545746e-04f, 1.158969803e-04f, 1.160391738e-04f, 1.161811550e-04f, 1.163229237e-04f, 1.164644796e-04f, 1.166058225e-04f,
+1.167469522e-04f, 1.168878684e-04f, 1.170285710e-04f, 1.171690596e-04f, 1.173093341e-04f, 1.174493943e-04f, 1.175892398e-04f, 1.177288706e-04f, 1.178682863e-04f, 1.180074868e-04f,
+1.181464718e-04f, 1.182852411e-04f, 1.184237944e-04f, 1.185621317e-04f, 1.187002525e-04f, 1.188381568e-04f, 1.189758443e-04f, 1.191133147e-04f, 1.192505679e-04f, 1.193876037e-04f,
+1.195244217e-04f, 1.196610218e-04f, 1.197974038e-04f, 1.199335675e-04f, 1.200695126e-04f, 1.202052390e-04f, 1.203407463e-04f, 1.204760344e-04f, 1.206111031e-04f, 1.207459522e-04f,
+1.208805814e-04f, 1.210149905e-04f, 1.211491794e-04f, 1.212831477e-04f, 1.214168953e-04f, 1.215504220e-04f, 1.216837276e-04f, 1.218168118e-04f, 1.219496744e-04f, 1.220823153e-04f,
+1.222147342e-04f, 1.223469308e-04f, 1.224789051e-04f, 1.226106568e-04f, 1.227421856e-04f, 1.228734914e-04f, 1.230045739e-04f, 1.231354330e-04f, 1.232660684e-04f, 1.233964799e-04f,
+1.235266674e-04f, 1.236566306e-04f, 1.237863693e-04f, 1.239158832e-04f, 1.240451723e-04f, 1.241742363e-04f, 1.243030750e-04f, 1.244316881e-04f, 1.245600755e-04f, 1.246882370e-04f,
+1.248161724e-04f, 1.249438814e-04f, 1.250713639e-04f, 1.251986197e-04f, 1.253256485e-04f, 1.254524502e-04f, 1.255790246e-04f, 1.257053714e-04f, 1.258314904e-04f, 1.259573816e-04f,
+1.260830446e-04f, 1.262084792e-04f, 1.263336854e-04f, 1.264586627e-04f, 1.265834112e-04f, 1.267079305e-04f, 1.268322205e-04f, 1.269562810e-04f, 1.270801118e-04f, 1.272037127e-04f,
+1.273270834e-04f, 1.274502239e-04f, 1.275731338e-04f, 1.276958131e-04f, 1.278182615e-04f, 1.279404788e-04f, 1.280624648e-04f, 1.281842194e-04f, 1.283057424e-04f, 1.284270335e-04f,
+1.285480925e-04f, 1.286689194e-04f, 1.287895138e-04f, 1.289098756e-04f, 1.290300046e-04f, 1.291499007e-04f, 1.292695635e-04f, 1.293889931e-04f, 1.295081890e-04f, 1.296271513e-04f,
+1.297458796e-04f, 1.298643738e-04f, 1.299826338e-04f, 1.301006592e-04f, 1.302184500e-04f, 1.303360060e-04f, 1.304533269e-04f, 1.305704126e-04f, 1.306872629e-04f, 1.308038776e-04f,
+1.309202566e-04f, 1.310363996e-04f, 1.311523065e-04f, 1.312679771e-04f, 1.313834112e-04f, 1.314986087e-04f, 1.316135693e-04f, 1.317282929e-04f, 1.318427792e-04f, 1.319570282e-04f,
+1.320710396e-04f, 1.321848133e-04f, 1.322983491e-04f, 1.324116467e-04f, 1.325247061e-04f, 1.326375271e-04f, 1.327501094e-04f, 1.328624530e-04f, 1.329745575e-04f, 1.330864229e-04f,
+1.331980490e-04f, 1.333094356e-04f, 1.334205826e-04f, 1.335314897e-04f, 1.336421567e-04f, 1.337525836e-04f, 1.338627702e-04f, 1.339727162e-04f, 1.340824215e-04f, 1.341918860e-04f,
+1.343011094e-04f, 1.344100916e-04f, 1.345188325e-04f, 1.346273318e-04f, 1.347355893e-04f, 1.348436051e-04f, 1.349513787e-04f, 1.350589102e-04f, 1.351661993e-04f, 1.352732458e-04f,
+1.353800496e-04f, 1.354866106e-04f, 1.355929285e-04f, 1.356990032e-04f, 1.358048346e-04f, 1.359104224e-04f, 1.360157666e-04f, 1.361208668e-04f, 1.362257231e-04f, 1.363303352e-04f,
+1.364347030e-04f, 1.365388262e-04f, 1.366427048e-04f, 1.367463386e-04f, 1.368497274e-04f, 1.369528711e-04f, 1.370557695e-04f, 1.371584224e-04f, 1.372608297e-04f, 1.373629913e-04f,
+1.374649069e-04f, 1.375665764e-04f, 1.376679998e-04f, 1.377691767e-04f, 1.378701071e-04f, 1.379707908e-04f, 1.380712276e-04f, 1.381714174e-04f, 1.382713601e-04f, 1.383710555e-04f,
+1.384705034e-04f, 1.385697036e-04f, 1.386686561e-04f, 1.387673607e-04f, 1.388658173e-04f, 1.389640256e-04f, 1.390619855e-04f, 1.391596969e-04f, 1.392571597e-04f, 1.393543737e-04f,
+1.394513386e-04f, 1.395480545e-04f, 1.396445211e-04f, 1.397407384e-04f, 1.398367060e-04f, 1.399324240e-04f, 1.400278921e-04f, 1.401231103e-04f, 1.402180783e-04f, 1.403127961e-04f,
+1.404072634e-04f, 1.405014802e-04f, 1.405954463e-04f, 1.406891615e-04f, 1.407826258e-04f, 1.408758389e-04f, 1.409688008e-04f, 1.410615113e-04f, 1.411539702e-04f, 1.412461774e-04f,
+1.413381329e-04f, 1.414298363e-04f, 1.415212877e-04f, 1.416124868e-04f, 1.417034335e-04f, 1.417941278e-04f, 1.418845694e-04f, 1.419747582e-04f, 1.420646940e-04f, 1.421543769e-04f,
+1.422438065e-04f, 1.423329829e-04f, 1.424219057e-04f, 1.425105750e-04f, 1.425989906e-04f, 1.426871523e-04f, 1.427750600e-04f, 1.428627136e-04f, 1.429501130e-04f, 1.430372580e-04f,
+1.431241485e-04f, 1.432107843e-04f, 1.432971654e-04f, 1.433832916e-04f, 1.434691628e-04f, 1.435547788e-04f, 1.436401396e-04f, 1.437252449e-04f, 1.438100947e-04f, 1.438946889e-04f,
+1.439790273e-04f, 1.440631097e-04f, 1.441469362e-04f, 1.442305065e-04f, 1.443138205e-04f, 1.443968781e-04f, 1.444796792e-04f, 1.445622237e-04f, 1.446445114e-04f, 1.447265422e-04f,
+1.448083159e-04f, 1.448898326e-04f, 1.449710920e-04f, 1.450520941e-04f, 1.451328386e-04f, 1.452133256e-04f, 1.452935548e-04f, 1.453735262e-04f, 1.454532396e-04f, 1.455326949e-04f,
+1.456118921e-04f, 1.456908310e-04f, 1.457695114e-04f, 1.458479333e-04f, 1.459260965e-04f, 1.460040010e-04f, 1.460816466e-04f, 1.461590332e-04f, 1.462361607e-04f, 1.463130290e-04f,
+1.463896379e-04f, 1.464659874e-04f, 1.465420774e-04f, 1.466179077e-04f, 1.466934782e-04f, 1.467687888e-04f, 1.468438395e-04f, 1.469186300e-04f, 1.469931604e-04f, 1.470674304e-04f,
+1.471414400e-04f, 1.472151891e-04f, 1.472886776e-04f, 1.473619053e-04f, 1.474348721e-04f, 1.475075781e-04f, 1.475800229e-04f, 1.476522066e-04f, 1.477241291e-04f, 1.477957902e-04f,
+1.478671898e-04f, 1.479383278e-04f, 1.480092042e-04f, 1.480798188e-04f, 1.481501715e-04f, 1.482202623e-04f, 1.482900910e-04f, 1.483596575e-04f, 1.484289617e-04f, 1.484980036e-04f,
+1.485667830e-04f, 1.486352999e-04f, 1.487035540e-04f, 1.487715455e-04f, 1.488392740e-04f, 1.489067397e-04f, 1.489739422e-04f, 1.490408817e-04f, 1.491075579e-04f, 1.491739708e-04f,
+1.492401202e-04f, 1.493060062e-04f, 1.493716285e-04f, 1.494369872e-04f, 1.495020820e-04f, 1.495669130e-04f, 1.496314800e-04f, 1.496957830e-04f, 1.497598218e-04f, 1.498235963e-04f,
+1.498871065e-04f, 1.499503524e-04f, 1.500133337e-04f, 1.500760504e-04f, 1.501385025e-04f, 1.502006897e-04f, 1.502626122e-04f, 1.503242697e-04f, 1.503856622e-04f, 1.504467895e-04f,
+1.505076517e-04f, 1.505682486e-04f, 1.506285802e-04f, 1.506886463e-04f, 1.507484469e-04f, 1.508079819e-04f, 1.508672513e-04f, 1.509262548e-04f, 1.509849925e-04f, 1.510434643e-04f,
+1.511016701e-04f, 1.511596098e-04f, 1.512172834e-04f, 1.512746907e-04f, 1.513318317e-04f, 1.513887063e-04f, 1.514453145e-04f, 1.515016561e-04f, 1.515577310e-04f, 1.516135393e-04f,
+1.516690808e-04f, 1.517243555e-04f, 1.517793632e-04f, 1.518341040e-04f, 1.518885777e-04f, 1.519427843e-04f, 1.519967236e-04f, 1.520503957e-04f, 1.521038004e-04f, 1.521569377e-04f,
+1.522098075e-04f, 1.522624098e-04f, 1.523147444e-04f, 1.523668114e-04f, 1.524186105e-04f, 1.524701419e-04f, 1.525214053e-04f, 1.525724008e-04f, 1.526231282e-04f, 1.526735875e-04f,
+1.527237787e-04f, 1.527737016e-04f, 1.528233563e-04f, 1.528727426e-04f, 1.529218604e-04f, 1.529707098e-04f, 1.530192907e-04f, 1.530676029e-04f, 1.531156465e-04f, 1.531634213e-04f,
+1.532109273e-04f, 1.532581645e-04f, 1.533051328e-04f, 1.533518321e-04f, 1.533982624e-04f, 1.534444236e-04f, 1.534903157e-04f, 1.535359385e-04f, 1.535812921e-04f, 1.536263764e-04f,
+1.536711913e-04f, 1.537157368e-04f, 1.537600128e-04f, 1.538040192e-04f, 1.538477561e-04f, 1.538912233e-04f, 1.539344209e-04f, 1.539773486e-04f, 1.540200066e-04f, 1.540623948e-04f,
+1.541045130e-04f, 1.541463613e-04f, 1.541879395e-04f, 1.542292477e-04f, 1.542702859e-04f, 1.543110538e-04f, 1.543515516e-04f, 1.543917791e-04f, 1.544317363e-04f, 1.544714232e-04f,
+1.545108397e-04f, 1.545499857e-04f, 1.545888613e-04f, 1.546274663e-04f, 1.546658008e-04f, 1.547038646e-04f, 1.547416578e-04f, 1.547791803e-04f, 1.548164321e-04f, 1.548534131e-04f,
+1.548901232e-04f, 1.549265625e-04f, 1.549627308e-04f, 1.549986282e-04f, 1.550342547e-04f, 1.550696101e-04f, 1.551046944e-04f, 1.551395076e-04f, 1.551740497e-04f, 1.552083206e-04f,
+1.552423202e-04f, 1.552760486e-04f, 1.553095058e-04f, 1.553426916e-04f, 1.553756060e-04f, 1.554082490e-04f, 1.554406206e-04f, 1.554727208e-04f, 1.555045494e-04f, 1.555361065e-04f,
+1.555673921e-04f, 1.555984060e-04f, 1.556291484e-04f, 1.556596190e-04f, 1.556898180e-04f, 1.557197453e-04f, 1.557494008e-04f, 1.557787845e-04f, 1.558078965e-04f, 1.558367366e-04f,
+1.558653048e-04f, 1.558936012e-04f, 1.559216256e-04f, 1.559493781e-04f, 1.559768587e-04f, 1.560040672e-04f, 1.560310037e-04f, 1.560576682e-04f, 1.560840607e-04f, 1.561101810e-04f,
+1.561360292e-04f, 1.561616054e-04f, 1.561869093e-04f, 1.562119411e-04f, 1.562367006e-04f, 1.562611880e-04f, 1.562854031e-04f, 1.563093460e-04f, 1.563330166e-04f, 1.563564149e-04f,
+1.563795409e-04f, 1.564023945e-04f, 1.564249758e-04f, 1.564472848e-04f, 1.564693214e-04f, 1.564910855e-04f, 1.565125773e-04f, 1.565337966e-04f, 1.565547435e-04f, 1.565754180e-04f,
+1.565958199e-04f, 1.566159494e-04f, 1.566358064e-04f, 1.566553909e-04f, 1.566747029e-04f, 1.566937424e-04f, 1.567125093e-04f, 1.567310037e-04f, 1.567492255e-04f, 1.567671747e-04f,
+1.567848514e-04f, 1.568022555e-04f, 1.568193870e-04f, 1.568362459e-04f, 1.568528322e-04f, 1.568691459e-04f, 1.568851870e-04f, 1.569009554e-04f, 1.569164513e-04f, 1.569316744e-04f,
+1.569466250e-04f, 1.569613029e-04f, 1.569757082e-04f, 1.569898408e-04f, 1.570037008e-04f, 1.570172882e-04f, 1.570306028e-04f, 1.570436449e-04f, 1.570564143e-04f, 1.570689110e-04f,
+1.570811351e-04f, 1.570930866e-04f, 1.571047654e-04f, 1.571161715e-04f, 1.571273050e-04f, 1.571381659e-04f, 1.571487542e-04f, 1.571590698e-04f, 1.571691128e-04f, 1.571788831e-04f,
+1.571883809e-04f, 1.571976060e-04f, 1.572065586e-04f, 1.572152385e-04f, 1.572236459e-04f, 1.572317807e-04f, 1.572396429e-04f, 1.572472325e-04f, 1.572545496e-04f, 1.572615942e-04f,
+1.572683662e-04f, 1.572748657e-04f, 1.572810927e-04f, 1.572870471e-04f, 1.572927291e-04f, 1.572981386e-04f, 1.573032757e-04f, 1.573081403e-04f, 1.573127325e-04f, 1.573170522e-04f,
+1.573210996e-04f, 1.573248745e-04f, 1.573283771e-04f, 1.573316073e-04f, 1.573345652e-04f, 1.573372508e-04f, 1.573396640e-04f, 1.573418050e-04f, 1.573436737e-04f, 1.573452701e-04f,
+1.573465943e-04f, 1.573476463e-04f, 1.573484261e-04f, 1.573489338e-04f, 1.573491693e-04f, 1.573491326e-04f, 1.573488239e-04f, 1.573482431e-04f, 1.573473902e-04f, 1.573462653e-04f,
+1.573448684e-04f, 1.573431995e-04f, 1.573412587e-04f, 1.573390459e-04f, 1.573365612e-04f, 1.573338046e-04f, 1.573307762e-04f, 1.573274759e-04f, 1.573239039e-04f, 1.573200601e-04f,
+1.573159445e-04f, 1.573115572e-04f, 1.573068983e-04f, 1.573019677e-04f, 1.572967655e-04f, 1.572912917e-04f, 1.572855463e-04f, 1.572795294e-04f, 1.572732410e-04f, 1.572666812e-04f,
+1.572598500e-04f, 1.572527473e-04f, 1.572453733e-04f, 1.572377280e-04f, 1.572298114e-04f, 1.572216235e-04f, 1.572131644e-04f, 1.572044342e-04f, 1.571954328e-04f, 1.571861603e-04f,
+1.571766168e-04f, 1.571668022e-04f, 1.571567167e-04f, 1.571463602e-04f, 1.571357328e-04f, 1.571248345e-04f, 1.571136654e-04f, 1.571022256e-04f, 1.570905150e-04f, 1.570785337e-04f,
+1.570662817e-04f, 1.570537592e-04f, 1.570409660e-04f, 1.570279024e-04f, 1.570145683e-04f, 1.570009637e-04f, 1.569870888e-04f, 1.569729435e-04f, 1.569585279e-04f, 1.569438421e-04f,
+1.569288861e-04f, 1.569136600e-04f, 1.568981637e-04f, 1.568823974e-04f, 1.568663611e-04f, 1.568500548e-04f, 1.568334786e-04f, 1.568166326e-04f, 1.567995168e-04f, 1.567821312e-04f,
+1.567644759e-04f, 1.567465510e-04f, 1.567283565e-04f, 1.567098925e-04f, 1.566911590e-04f, 1.566721561e-04f, 1.566528837e-04f, 1.566333421e-04f, 1.566135312e-04f, 1.565934511e-04f,
+1.565731019e-04f, 1.565524835e-04f, 1.565315962e-04f, 1.565104398e-04f, 1.564890146e-04f, 1.564673205e-04f, 1.564453575e-04f, 1.564231259e-04f, 1.564006256e-04f, 1.563778566e-04f,
+1.563548191e-04f, 1.563315132e-04f, 1.563079387e-04f, 1.562840960e-04f, 1.562599849e-04f, 1.562356056e-04f, 1.562109581e-04f, 1.561860425e-04f, 1.561608588e-04f, 1.561354072e-04f,
+1.561096876e-04f, 1.560837002e-04f, 1.560574451e-04f, 1.560309222e-04f, 1.560041317e-04f, 1.559770736e-04f, 1.559497479e-04f, 1.559221549e-04f, 1.558942945e-04f, 1.558661668e-04f,
+1.558377718e-04f, 1.558091097e-04f, 1.557801805e-04f, 1.557509843e-04f, 1.557215212e-04f, 1.556917912e-04f, 1.556617944e-04f, 1.556315309e-04f, 1.556010007e-04f, 1.555702039e-04f,
+1.555391407e-04f, 1.555078111e-04f, 1.554762151e-04f, 1.554443528e-04f, 1.554122243e-04f, 1.553798298e-04f, 1.553471692e-04f, 1.553142426e-04f, 1.552810501e-04f, 1.552475919e-04f,
+1.552138679e-04f, 1.551798783e-04f, 1.551456232e-04f, 1.551111026e-04f, 1.550763165e-04f, 1.550412652e-04f, 1.550059486e-04f, 1.549703669e-04f, 1.549345201e-04f, 1.548984083e-04f,
+1.548620317e-04f, 1.548253902e-04f, 1.547884840e-04f, 1.547513132e-04f, 1.547138778e-04f, 1.546761779e-04f, 1.546382136e-04f, 1.545999851e-04f, 1.545614923e-04f, 1.545227355e-04f,
+1.544837146e-04f, 1.544444297e-04f, 1.544048811e-04f, 1.543650686e-04f, 1.543249925e-04f, 1.542846528e-04f, 1.542440496e-04f, 1.542031830e-04f, 1.541620532e-04f, 1.541206601e-04f,
+1.540790039e-04f, 1.540370846e-04f, 1.539949025e-04f, 1.539524575e-04f, 1.539097497e-04f, 1.538667794e-04f, 1.538235464e-04f, 1.537800511e-04f, 1.537362933e-04f, 1.536922734e-04f,
+1.536479912e-04f, 1.536034470e-04f, 1.535586408e-04f, 1.535135728e-04f, 1.534682430e-04f, 1.534226515e-04f, 1.533767985e-04f, 1.533306840e-04f, 1.532843082e-04f, 1.532376711e-04f,
+1.531907728e-04f, 1.531436135e-04f, 1.530961932e-04f, 1.530485121e-04f, 1.530005702e-04f, 1.529523677e-04f, 1.529039047e-04f, 1.528551812e-04f, 1.528061974e-04f, 1.527569534e-04f,
+1.527074492e-04f, 1.526576851e-04f, 1.526076611e-04f, 1.525573773e-04f, 1.525068337e-04f, 1.524560307e-04f, 1.524049681e-04f, 1.523536463e-04f, 1.523020651e-04f, 1.522502249e-04f,
+1.521981256e-04f, 1.521457674e-04f, 1.520931504e-04f, 1.520402747e-04f, 1.519871405e-04f, 1.519337477e-04f, 1.518800967e-04f, 1.518261874e-04f, 1.517720200e-04f, 1.517175946e-04f,
+1.516629113e-04f, 1.516079702e-04f, 1.515527715e-04f, 1.514973152e-04f, 1.514416016e-04f, 1.513856306e-04f, 1.513294024e-04f, 1.512729172e-04f, 1.512161750e-04f, 1.511591760e-04f,
+1.511019202e-04f, 1.510444079e-04f, 1.509866391e-04f, 1.509286140e-04f, 1.508703326e-04f, 1.508117952e-04f, 1.507530017e-04f, 1.506939524e-04f, 1.506346474e-04f, 1.505750867e-04f,
+1.505152706e-04f, 1.504551991e-04f, 1.503948724e-04f, 1.503342905e-04f, 1.502734537e-04f, 1.502123620e-04f, 1.501510155e-04f, 1.500894145e-04f, 1.500275589e-04f, 1.499654491e-04f,
+1.499030850e-04f, 1.498404668e-04f, 1.497775946e-04f, 1.497144686e-04f, 1.496510889e-04f, 1.495874556e-04f, 1.495235689e-04f, 1.494594289e-04f, 1.493950356e-04f, 1.493303894e-04f,
+1.492654902e-04f, 1.492003382e-04f, 1.491349336e-04f, 1.490692765e-04f, 1.490033670e-04f, 1.489372052e-04f, 1.488707913e-04f, 1.488041255e-04f, 1.487372078e-04f, 1.486700384e-04f,
+1.486026175e-04f, 1.485349451e-04f, 1.484670214e-04f, 1.483988466e-04f, 1.483304207e-04f, 1.482617440e-04f, 1.481928166e-04f, 1.481236385e-04f, 1.480542100e-04f, 1.479845312e-04f,
+1.479146022e-04f, 1.478444232e-04f, 1.477739942e-04f, 1.477033156e-04f, 1.476323873e-04f, 1.475612096e-04f, 1.474897825e-04f, 1.474181063e-04f, 1.473461811e-04f, 1.472740069e-04f,
+1.472015840e-04f, 1.471289126e-04f, 1.470559927e-04f, 1.469828244e-04f, 1.469094081e-04f, 1.468357437e-04f, 1.467618314e-04f, 1.466876715e-04f, 1.466132640e-04f, 1.465386091e-04f,
+1.464637069e-04f, 1.463885576e-04f, 1.463131613e-04f, 1.462375183e-04f, 1.461616285e-04f, 1.460854923e-04f, 1.460091097e-04f, 1.459324809e-04f, 1.458556060e-04f, 1.457784853e-04f,
+1.457011188e-04f, 1.456235067e-04f, 1.455456492e-04f, 1.454675464e-04f, 1.453891985e-04f, 1.453106056e-04f, 1.452317678e-04f, 1.451526855e-04f, 1.450733586e-04f, 1.449937874e-04f,
+1.449139720e-04f, 1.448339126e-04f, 1.447536093e-04f, 1.446730622e-04f, 1.445922717e-04f, 1.445112377e-04f, 1.444299606e-04f, 1.443484403e-04f, 1.442666772e-04f, 1.441846712e-04f,
+1.441024228e-04f, 1.440199318e-04f, 1.439371987e-04f, 1.438542234e-04f, 1.437710062e-04f, 1.436875472e-04f, 1.436038466e-04f, 1.435199046e-04f, 1.434357213e-04f, 1.433512969e-04f,
+1.432666316e-04f, 1.431817254e-04f, 1.430965787e-04f, 1.430111915e-04f, 1.429255640e-04f, 1.428396965e-04f, 1.427535889e-04f, 1.426672417e-04f, 1.425806548e-04f, 1.424938285e-04f,
+1.424067629e-04f, 1.423194582e-04f, 1.422319146e-04f, 1.421441322e-04f, 1.420561113e-04f, 1.419678520e-04f, 1.418793544e-04f, 1.417906188e-04f, 1.417016452e-04f, 1.416124340e-04f,
+1.415229852e-04f, 1.414332990e-04f, 1.413433757e-04f, 1.412532153e-04f, 1.411628181e-04f, 1.410721843e-04f, 1.409813139e-04f, 1.408902072e-04f, 1.407988644e-04f, 1.407072856e-04f,
+1.406154711e-04f, 1.405234209e-04f, 1.404311353e-04f, 1.403386145e-04f, 1.402458586e-04f, 1.401528678e-04f, 1.400596423e-04f, 1.399661823e-04f, 1.398724880e-04f, 1.397785594e-04f,
+1.396843969e-04f, 1.395900006e-04f, 1.394953707e-04f, 1.394005074e-04f, 1.393054108e-04f, 1.392100811e-04f, 1.391145186e-04f, 1.390187233e-04f, 1.389226955e-04f, 1.388264355e-04f,
+1.387299432e-04f, 1.386332190e-04f, 1.385362631e-04f, 1.384390755e-04f, 1.383416566e-04f, 1.382440065e-04f, 1.381461253e-04f, 1.380480133e-04f, 1.379496707e-04f, 1.378510976e-04f,
+1.377522942e-04f, 1.376532608e-04f, 1.375539975e-04f, 1.374545045e-04f, 1.373547820e-04f, 1.372548301e-04f, 1.371546492e-04f, 1.370542393e-04f, 1.369536007e-04f, 1.368527336e-04f,
+1.367516381e-04f, 1.366503144e-04f, 1.365487628e-04f, 1.364469835e-04f, 1.363449765e-04f, 1.362427422e-04f, 1.361402807e-04f, 1.360375922e-04f, 1.359346769e-04f, 1.358315351e-04f,
+1.357281668e-04f, 1.356245724e-04f, 1.355207519e-04f, 1.354167057e-04f, 1.353124338e-04f, 1.352079365e-04f, 1.351032141e-04f, 1.349982666e-04f, 1.348930943e-04f, 1.347876975e-04f,
+1.346820762e-04f, 1.345762307e-04f, 1.344701612e-04f, 1.343638679e-04f, 1.342573511e-04f, 1.341506108e-04f, 1.340436474e-04f, 1.339364609e-04f, 1.338290517e-04f, 1.337214199e-04f,
+1.336135657e-04f, 1.335054894e-04f, 1.333971910e-04f, 1.332886710e-04f, 1.331799294e-04f, 1.330709664e-04f, 1.329617823e-04f, 1.328523772e-04f, 1.327427515e-04f, 1.326329052e-04f,
+1.325228386e-04f, 1.324125519e-04f, 1.323020453e-04f, 1.321913191e-04f, 1.320803734e-04f, 1.319692084e-04f, 1.318578243e-04f, 1.317462214e-04f, 1.316343999e-04f, 1.315223600e-04f,
+1.314101018e-04f, 1.312976257e-04f, 1.311849318e-04f, 1.310720203e-04f, 1.309588914e-04f, 1.308455455e-04f, 1.307319825e-04f, 1.306182029e-04f, 1.305042068e-04f, 1.303899944e-04f,
+1.302755659e-04f, 1.301609216e-04f, 1.300460616e-04f, 1.299309862e-04f, 1.298156956e-04f, 1.297001900e-04f, 1.295844697e-04f, 1.294685348e-04f, 1.293523856e-04f, 1.292360222e-04f,
+1.291194450e-04f, 1.290026541e-04f, 1.288856497e-04f, 1.287684321e-04f, 1.286510014e-04f, 1.285333580e-04f, 1.284155020e-04f, 1.282974337e-04f, 1.281791532e-04f, 1.280606608e-04f,
+1.279419567e-04f, 1.278230412e-04f, 1.277039144e-04f, 1.275845766e-04f, 1.274650281e-04f, 1.273452689e-04f, 1.272252994e-04f, 1.271051198e-04f, 1.269847303e-04f, 1.268641311e-04f,
+1.267433225e-04f, 1.266223046e-04f, 1.265010778e-04f, 1.263796422e-04f, 1.262579980e-04f, 1.261361456e-04f, 1.260140851e-04f, 1.258918167e-04f, 1.257693407e-04f, 1.256466573e-04f,
+1.255237668e-04f, 1.254006693e-04f, 1.252773651e-04f, 1.251538544e-04f, 1.250301375e-04f, 1.249062146e-04f, 1.247820859e-04f, 1.246577516e-04f, 1.245332120e-04f, 1.244084674e-04f,
+1.242835179e-04f, 1.241583637e-04f, 1.240330052e-04f, 1.239074425e-04f, 1.237816759e-04f, 1.236557056e-04f, 1.235295319e-04f, 1.234031550e-04f, 1.232765750e-04f, 1.231497924e-04f,
+1.230228072e-04f, 1.228956198e-04f, 1.227682303e-04f, 1.226406390e-04f, 1.225128462e-04f, 1.223848520e-04f, 1.222566568e-04f, 1.221282607e-04f, 1.219996640e-04f, 1.218708669e-04f,
+1.217418697e-04f, 1.216126726e-04f, 1.214832759e-04f, 1.213536797e-04f, 1.212238844e-04f, 1.210938902e-04f, 1.209636972e-04f, 1.208333059e-04f, 1.207027163e-04f, 1.205719288e-04f,
+1.204409435e-04f, 1.203097608e-04f, 1.201783808e-04f, 1.200468039e-04f, 1.199150302e-04f, 1.197830600e-04f, 1.196508935e-04f, 1.195185311e-04f, 1.193859728e-04f, 1.192532191e-04f,
+1.191202701e-04f, 1.189871260e-04f, 1.188537872e-04f, 1.187202538e-04f, 1.185865261e-04f, 1.184526044e-04f, 1.183184890e-04f, 1.181841799e-04f, 1.180496776e-04f, 1.179149822e-04f,
+1.177800940e-04f, 1.176450133e-04f, 1.175097402e-04f, 1.173742752e-04f, 1.172386183e-04f, 1.171027698e-04f, 1.169667301e-04f, 1.168304993e-04f, 1.166940777e-04f, 1.165574656e-04f,
+1.164206632e-04f, 1.162836707e-04f, 1.161464885e-04f, 1.160091167e-04f, 1.158715556e-04f, 1.157338055e-04f, 1.155958667e-04f, 1.154577393e-04f, 1.153194236e-04f, 1.151809200e-04f,
+1.150422286e-04f, 1.149033496e-04f, 1.147642835e-04f, 1.146250303e-04f, 1.144855904e-04f, 1.143459641e-04f, 1.142061515e-04f, 1.140661529e-04f, 1.139259687e-04f, 1.137855990e-04f,
+1.136450441e-04f, 1.135043043e-04f, 1.133633798e-04f, 1.132222709e-04f, 1.130809779e-04f, 1.129395009e-04f, 1.127978404e-04f, 1.126559964e-04f, 1.125139694e-04f, 1.123717594e-04f,
+1.122293669e-04f, 1.120867921e-04f, 1.119440352e-04f, 1.118010965e-04f, 1.116579763e-04f, 1.115146747e-04f, 1.113711922e-04f, 1.112275289e-04f, 1.110836851e-04f, 1.109396611e-04f,
+1.107954571e-04f, 1.106510734e-04f, 1.105065103e-04f, 1.103617680e-04f, 1.102168468e-04f, 1.100717470e-04f, 1.099264688e-04f, 1.097810125e-04f, 1.096353783e-04f, 1.094895666e-04f,
+1.093435775e-04f, 1.091974115e-04f, 1.090510686e-04f, 1.089045493e-04f, 1.087578537e-04f, 1.086109821e-04f, 1.084639348e-04f, 1.083167122e-04f, 1.081693143e-04f, 1.080217416e-04f,
+1.078739942e-04f, 1.077260725e-04f, 1.075779767e-04f, 1.074297070e-04f, 1.072812639e-04f, 1.071326474e-04f, 1.069838580e-04f, 1.068348959e-04f, 1.066857612e-04f, 1.065364544e-04f,
+1.063869757e-04f, 1.062373254e-04f, 1.060875037e-04f, 1.059375109e-04f, 1.057873473e-04f, 1.056370131e-04f, 1.054865087e-04f, 1.053358342e-04f, 1.051849901e-04f, 1.050339765e-04f,
+1.048827937e-04f, 1.047314421e-04f, 1.045799218e-04f, 1.044282331e-04f, 1.042763765e-04f, 1.041243520e-04f, 1.039721600e-04f, 1.038198007e-04f, 1.036672745e-04f, 1.035145817e-04f,
+1.033617224e-04f, 1.032086970e-04f, 1.030555057e-04f, 1.029021489e-04f, 1.027486268e-04f, 1.025949397e-04f, 1.024410878e-04f, 1.022870715e-04f, 1.021328910e-04f, 1.019785467e-04f,
+1.018240387e-04f, 1.016693674e-04f, 1.015145330e-04f, 1.013595359e-04f, 1.012043763e-04f, 1.010490545e-04f, 1.008935708e-04f, 1.007379254e-04f, 1.005821187e-04f, 1.004261509e-04f,
+1.002700223e-04f, 1.001137332e-04f, 9.995728385e-05f, 9.980067459e-05f, 9.964390567e-05f, 9.948697737e-05f, 9.932988999e-05f, 9.917264381e-05f, 9.901523911e-05f, 9.885767618e-05f,
+9.869995530e-05f, 9.854207676e-05f, 9.838404085e-05f, 9.822584785e-05f, 9.806749805e-05f, 9.790899174e-05f, 9.775032920e-05f, 9.759151071e-05f, 9.743253658e-05f, 9.727340708e-05f,
+9.711412251e-05f, 9.695468315e-05f, 9.679508929e-05f, 9.663534122e-05f, 9.647543922e-05f, 9.631538360e-05f, 9.615517463e-05f, 9.599481261e-05f, 9.583429783e-05f, 9.567363058e-05f,
+9.551281114e-05f, 9.535183981e-05f, 9.519071689e-05f, 9.502944265e-05f, 9.486801740e-05f, 9.470644142e-05f, 9.454471500e-05f, 9.438283845e-05f, 9.422081205e-05f, 9.405863609e-05f,
+9.389631086e-05f, 9.373383667e-05f, 9.357121380e-05f, 9.340844255e-05f, 9.324552320e-05f, 9.308245606e-05f, 9.291924142e-05f, 9.275587958e-05f, 9.259237082e-05f, 9.242871544e-05f,
+9.226491374e-05f, 9.210096602e-05f, 9.193687256e-05f, 9.177263367e-05f, 9.160824964e-05f, 9.144372077e-05f, 9.127904736e-05f, 9.111422969e-05f, 9.094926807e-05f, 9.078416280e-05f,
+9.061891417e-05f, 9.045352248e-05f, 9.028798803e-05f, 9.012231112e-05f, 8.995649204e-05f, 8.979053109e-05f, 8.962442858e-05f, 8.945818480e-05f, 8.929180004e-05f, 8.912527462e-05f,
+8.895860883e-05f, 8.879180297e-05f, 8.862485733e-05f, 8.845777223e-05f, 8.829054796e-05f, 8.812318482e-05f, 8.795568311e-05f, 8.778804314e-05f, 8.762026520e-05f, 8.745234959e-05f,
+8.728429663e-05f, 8.711610660e-05f, 8.694777982e-05f, 8.677931658e-05f, 8.661071720e-05f, 8.644198196e-05f, 8.627311118e-05f, 8.610410515e-05f, 8.593496418e-05f, 8.576568858e-05f,
+8.559627865e-05f, 8.542673469e-05f, 8.525705701e-05f, 8.508724590e-05f, 8.491730169e-05f, 8.474722466e-05f, 8.457701514e-05f, 8.440667341e-05f, 8.423619979e-05f, 8.406559459e-05f,
+8.389485810e-05f, 8.372399064e-05f, 8.355299251e-05f, 8.338186402e-05f, 8.321060548e-05f, 8.303921718e-05f, 8.286769945e-05f, 8.269605258e-05f, 8.252427689e-05f, 8.235237268e-05f,
+8.218034026e-05f, 8.200817994e-05f, 8.183589202e-05f, 8.166347682e-05f, 8.149093465e-05f, 8.131826580e-05f, 8.114547060e-05f, 8.097254935e-05f, 8.079950237e-05f, 8.062632995e-05f,
+8.045303241e-05f, 8.027961007e-05f, 8.010606322e-05f, 7.993239219e-05f, 7.975859728e-05f, 7.958467880e-05f, 7.941063707e-05f, 7.923647239e-05f, 7.906218508e-05f, 7.888777545e-05f,
+7.871324381e-05f, 7.853859047e-05f, 7.836381574e-05f, 7.818891994e-05f, 7.801390338e-05f, 7.783876638e-05f, 7.766350924e-05f, 7.748813228e-05f, 7.731263580e-05f, 7.713702014e-05f,
+7.696128559e-05f, 7.678543247e-05f, 7.660946111e-05f, 7.643337180e-05f, 7.625716486e-05f, 7.608084062e-05f, 7.590439938e-05f, 7.572784146e-05f, 7.555116717e-05f, 7.537437684e-05f,
+7.519747076e-05f, 7.502044927e-05f, 7.484331268e-05f, 7.466606129e-05f, 7.448869544e-05f, 7.431121543e-05f, 7.413362158e-05f, 7.395591420e-05f, 7.377809362e-05f, 7.360016016e-05f,
+7.342211412e-05f, 7.324395583e-05f, 7.306568560e-05f, 7.288730375e-05f, 7.270881060e-05f, 7.253020646e-05f, 7.235149166e-05f, 7.217266652e-05f, 7.199373134e-05f, 7.181468646e-05f,
+7.163553218e-05f, 7.145626883e-05f, 7.127689673e-05f, 7.109741620e-05f, 7.091782755e-05f, 7.073813110e-05f, 7.055832718e-05f, 7.037841611e-05f, 7.019839820e-05f, 7.001827378e-05f,
+6.983804316e-05f, 6.965770667e-05f, 6.947726462e-05f, 6.929671734e-05f, 6.911606515e-05f, 6.893530838e-05f, 6.875444733e-05f, 6.857348233e-05f, 6.839241371e-05f, 6.821124179e-05f,
+6.802996688e-05f, 6.784858932e-05f, 6.766710941e-05f, 6.748552749e-05f, 6.730384388e-05f, 6.712205890e-05f, 6.694017287e-05f, 6.675818612e-05f, 6.657609897e-05f, 6.639391174e-05f,
+6.621162475e-05f, 6.602923833e-05f, 6.584675281e-05f, 6.566416850e-05f, 6.548148574e-05f, 6.529870484e-05f, 6.511582613e-05f, 6.493284993e-05f, 6.474977657e-05f, 6.456660638e-05f,
+6.438333967e-05f, 6.419997678e-05f, 6.401651802e-05f, 6.383296373e-05f, 6.364931422e-05f, 6.346556983e-05f, 6.328173088e-05f, 6.309779770e-05f, 6.291377061e-05f, 6.272964993e-05f,
+6.254543600e-05f, 6.236112914e-05f, 6.217672968e-05f, 6.199223795e-05f, 6.180765426e-05f, 6.162297895e-05f, 6.143821234e-05f, 6.125335477e-05f, 6.106840655e-05f, 6.088336802e-05f,
+6.069823951e-05f, 6.051302134e-05f, 6.032771383e-05f, 6.014231733e-05f, 5.995683214e-05f, 5.977125862e-05f, 5.958559707e-05f, 5.939984784e-05f, 5.921401124e-05f, 5.902808761e-05f,
+5.884207728e-05f, 5.865598057e-05f, 5.846979782e-05f, 5.828352935e-05f, 5.809717550e-05f, 5.791073659e-05f, 5.772421294e-05f, 5.753760491e-05f, 5.735091280e-05f, 5.716413695e-05f,
+5.697727770e-05f, 5.679033536e-05f, 5.660331028e-05f, 5.641620278e-05f, 5.622901319e-05f, 5.604174185e-05f, 5.585438908e-05f, 5.566695521e-05f, 5.547944058e-05f, 5.529184552e-05f,
+5.510417035e-05f, 5.491641541e-05f, 5.472858104e-05f, 5.454066755e-05f, 5.435267529e-05f, 5.416460459e-05f, 5.397645577e-05f, 5.378822917e-05f, 5.359992512e-05f, 5.341154396e-05f,
+5.322308601e-05f, 5.303455161e-05f, 5.284594109e-05f, 5.265725478e-05f, 5.246849302e-05f, 5.227965613e-05f, 5.209074446e-05f, 5.190175833e-05f, 5.171269808e-05f, 5.152356404e-05f,
+5.133435654e-05f, 5.114507592e-05f, 5.095572251e-05f, 5.076629665e-05f, 5.057679866e-05f, 5.038722889e-05f, 5.019758766e-05f, 5.000787530e-05f, 4.981809217e-05f, 4.962823858e-05f,
+4.943831487e-05f, 4.924832138e-05f, 4.905825844e-05f, 4.886812638e-05f, 4.867792554e-05f, 4.848765626e-05f, 4.829731887e-05f, 4.810691370e-05f, 4.791644109e-05f, 4.772590138e-05f,
+4.753529489e-05f, 4.734462197e-05f, 4.715388295e-05f, 4.696307817e-05f, 4.677220795e-05f, 4.658127264e-05f, 4.639027258e-05f, 4.619920809e-05f, 4.600807952e-05f, 4.581688719e-05f,
+4.562563145e-05f, 4.543431264e-05f, 4.524293108e-05f, 4.505148711e-05f, 4.485998108e-05f, 4.466841331e-05f, 4.447678415e-05f, 4.428509392e-05f, 4.409334298e-05f, 4.390153164e-05f,
+4.370966026e-05f, 4.351772916e-05f, 4.332573869e-05f, 4.313368918e-05f, 4.294158097e-05f, 4.274941439e-05f, 4.255718979e-05f, 4.236490749e-05f, 4.217256784e-05f, 4.198017118e-05f,
+4.178771784e-05f, 4.159520816e-05f, 4.140264248e-05f, 4.121002113e-05f, 4.101734446e-05f, 4.082461279e-05f, 4.063182648e-05f, 4.043898585e-05f, 4.024609125e-05f, 4.005314301e-05f,
+3.986014147e-05f, 3.966708697e-05f, 3.947397985e-05f, 3.928082045e-05f, 3.908760910e-05f, 3.889434615e-05f, 3.870103192e-05f, 3.850766677e-05f, 3.831425103e-05f, 3.812078504e-05f,
+3.792726913e-05f, 3.773370365e-05f, 3.754008893e-05f, 3.734642532e-05f, 3.715271315e-05f, 3.695895276e-05f, 3.676514449e-05f, 3.657128868e-05f, 3.637738568e-05f, 3.618343581e-05f,
+3.598943942e-05f, 3.579539685e-05f, 3.560130843e-05f, 3.540717452e-05f, 3.521299543e-05f, 3.501877153e-05f, 3.482450314e-05f, 3.463019061e-05f, 3.443583427e-05f, 3.424143446e-05f,
+3.404699154e-05f, 3.385250582e-05f, 3.365797766e-05f, 3.346340740e-05f, 3.326879537e-05f, 3.307414192e-05f, 3.287944738e-05f, 3.268471210e-05f, 3.248993641e-05f, 3.229512066e-05f,
+3.210026518e-05f, 3.190537032e-05f, 3.171043642e-05f, 3.151546382e-05f, 3.132045285e-05f, 3.112540387e-05f, 3.093031720e-05f, 3.073519319e-05f, 3.054003218e-05f, 3.034483451e-05f,
+3.014960053e-05f, 2.995433056e-05f, 2.975902496e-05f, 2.956368407e-05f, 2.936830821e-05f, 2.917289775e-05f, 2.897745301e-05f, 2.878197433e-05f, 2.858646207e-05f, 2.839091656e-05f,
+2.819533813e-05f, 2.799972714e-05f, 2.780408392e-05f, 2.760840881e-05f, 2.741270216e-05f, 2.721696431e-05f, 2.702119559e-05f, 2.682539635e-05f, 2.662956693e-05f, 2.643370767e-05f,
+2.623781891e-05f, 2.604190099e-05f, 2.584595426e-05f, 2.564997906e-05f, 2.545397572e-05f, 2.525794460e-05f, 2.506188602e-05f, 2.486580033e-05f, 2.466968788e-05f, 2.447354900e-05f,
+2.427738404e-05f, 2.408119333e-05f, 2.388497723e-05f, 2.368873606e-05f, 2.349247018e-05f, 2.329617992e-05f, 2.309986563e-05f, 2.290352764e-05f, 2.270716630e-05f, 2.251078195e-05f,
+2.231437494e-05f, 2.211794559e-05f, 2.192149427e-05f, 2.172502129e-05f, 2.152852702e-05f, 2.133201179e-05f, 2.113547593e-05f, 2.093891980e-05f, 2.074234374e-05f, 2.054574808e-05f,
+2.034913317e-05f, 2.015249936e-05f, 1.995584697e-05f, 1.975917635e-05f, 1.956248786e-05f, 1.936578182e-05f, 1.916905857e-05f, 1.897231847e-05f, 1.877556185e-05f, 1.857878906e-05f,
+1.838200043e-05f, 1.818519630e-05f, 1.798837703e-05f, 1.779154295e-05f, 1.759469439e-05f, 1.739783172e-05f, 1.720095526e-05f, 1.700406536e-05f, 1.680716235e-05f, 1.661024659e-05f,
+1.641331841e-05f, 1.621637816e-05f, 1.601942617e-05f, 1.582246279e-05f, 1.562548836e-05f, 1.542850322e-05f, 1.523150771e-05f, 1.503450218e-05f, 1.483748696e-05f, 1.464046240e-05f,
+1.444342884e-05f, 1.424638662e-05f, 1.404933608e-05f, 1.385227757e-05f, 1.365521142e-05f, 1.345813798e-05f, 1.326105759e-05f, 1.306397059e-05f, 1.286687732e-05f, 1.266977812e-05f,
+1.247267334e-05f, 1.227556331e-05f, 1.207844838e-05f, 1.188132889e-05f, 1.168420518e-05f, 1.148707759e-05f, 1.128994646e-05f, 1.109281214e-05f, 1.089567496e-05f, 1.069853527e-05f,
+1.050139341e-05f, 1.030424972e-05f, 1.010710453e-05f, 9.909958199e-06f, 9.712811059e-06f, 9.515663452e-06f, 9.318515720e-06f, 9.121368204e-06f, 8.924221244e-06f, 8.727075182e-06f,
+8.529930359e-06f, 8.332787116e-06f, 8.135645792e-06f, 7.938506731e-06f, 7.741370271e-06f, 7.544236755e-06f, 7.347106522e-06f, 7.149979914e-06f, 6.952857271e-06f, 6.755738934e-06f,
+6.558625243e-06f, 6.361516540e-06f, 6.164413164e-06f, 5.967315456e-06f, 5.770223757e-06f, 5.573138407e-06f, 5.376059747e-06f, 5.178988117e-06f, 4.981923856e-06f, 4.784867307e-06f,
+4.587818808e-06f, 4.390778700e-06f, 4.193747323e-06f, 3.996725017e-06f, 3.799712123e-06f, 3.602708979e-06f, 3.405715928e-06f, 3.208733307e-06f, 3.011761458e-06f, 2.814800719e-06f,
+2.617851431e-06f, 2.420913934e-06f, 2.223988567e-06f, 2.027075670e-06f, 1.830175582e-06f, 1.633288643e-06f, 1.436415193e-06f, 1.239555571e-06f, 1.042710116e-06f, 8.458791673e-07f,
+6.490630650e-07f, 4.522621478e-07f, 2.554767551e-07f, 5.870722590e-08f, -1.380461007e-07f, -3.347828858e-07f, -5.315027902e-07f, -7.282054752e-07f, -9.248906019e-07f, -1.121557832e-06f,
+-1.318206825e-06f, -1.514837245e-06f, -1.711448751e-06f, -1.908041006e-06f, -2.104613670e-06f, -2.301166406e-06f, -2.497698875e-06f, -2.694210739e-06f, -2.890701660e-06f, -3.087171298e-06f,
+-3.283619318e-06f, -3.480045379e-06f, -3.676449145e-06f, -3.872830277e-06f, -4.069188438e-06f, -4.265523289e-06f, -4.461834494e-06f, -4.658121714e-06f, -4.854384612e-06f, -5.050622850e-06f,
+-5.246836092e-06f, -5.443023999e-06f, -5.639186234e-06f, -5.835322460e-06f, -6.031432341e-06f, -6.227515538e-06f, -6.423571715e-06f, -6.619600536e-06f, -6.815601662e-06f, -7.011574758e-06f,
+-7.207519487e-06f, -7.403435512e-06f, -7.599322497e-06f, -7.795180104e-06f, -7.991007999e-06f, -8.186805844e-06f, -8.382573303e-06f, -8.578310041e-06f, -8.774015720e-06f, -8.969690006e-06f,
+-9.165332562e-06f, -9.360943052e-06f, -9.556521141e-06f, -9.752066493e-06f, -9.947578773e-06f, -1.014305764e-05f, -1.033850277e-05f, -1.053391382e-05f, -1.072929046e-05f, -1.092463235e-05f,
+-1.111993915e-05f, -1.131521053e-05f, -1.151044616e-05f, -1.170564570e-05f, -1.190080882e-05f, -1.209593518e-05f, -1.229102445e-05f, -1.248607629e-05f, -1.268109037e-05f, -1.287606636e-05f,
+-1.307100391e-05f, -1.326590271e-05f, -1.346076240e-05f, -1.365558266e-05f, -1.385036316e-05f, -1.404510356e-05f, -1.423980353e-05f, -1.443446273e-05f, -1.462908084e-05f, -1.482365751e-05f,
+-1.501819241e-05f, -1.521268522e-05f, -1.540713560e-05f, -1.560154321e-05f, -1.579590772e-05f, -1.599022881e-05f, -1.618450613e-05f, -1.637873936e-05f, -1.657292816e-05f, -1.676707220e-05f,
+-1.696117115e-05f, -1.715522468e-05f, -1.734923245e-05f, -1.754319414e-05f, -1.773710940e-05f, -1.793097792e-05f, -1.812479935e-05f, -1.831857337e-05f, -1.851229965e-05f, -1.870597784e-05f,
+-1.889960764e-05f, -1.909318869e-05f, -1.928672068e-05f, -1.948020327e-05f, -1.967363612e-05f, -1.986701892e-05f, -2.006035133e-05f, -2.025363301e-05f, -2.044686365e-05f, -2.064004290e-05f,
+-2.083317044e-05f, -2.102624594e-05f, -2.121926907e-05f, -2.141223950e-05f, -2.160515690e-05f, -2.179802094e-05f, -2.199083130e-05f, -2.218358763e-05f, -2.237628962e-05f, -2.256893694e-05f,
+-2.276152925e-05f, -2.295406623e-05f, -2.314654754e-05f, -2.333897287e-05f, -2.353134188e-05f, -2.372365425e-05f, -2.391590964e-05f, -2.410810773e-05f, -2.430024819e-05f, -2.449233070e-05f,
+-2.468435492e-05f, -2.487632053e-05f, -2.506822720e-05f, -2.526007460e-05f, -2.545186242e-05f, -2.564359031e-05f, -2.583525795e-05f, -2.602686503e-05f, -2.621841120e-05f, -2.640989615e-05f,
+-2.660131955e-05f, -2.679268107e-05f, -2.698398038e-05f, -2.717521717e-05f, -2.736639110e-05f, -2.755750185e-05f, -2.774854909e-05f, -2.793953251e-05f, -2.813045176e-05f, -2.832130654e-05f,
+-2.851209651e-05f, -2.870282135e-05f, -2.889348073e-05f, -2.908407433e-05f, -2.927460183e-05f, -2.946506291e-05f, -2.965545723e-05f, -2.984578447e-05f, -3.003604432e-05f, -3.022623644e-05f,
+-3.041636052e-05f, -3.060641622e-05f, -3.079640324e-05f, -3.098632124e-05f, -3.117616990e-05f, -3.136594889e-05f, -3.155565791e-05f, -3.174529662e-05f, -3.193486470e-05f, -3.212436183e-05f,
+-3.231378769e-05f, -3.250314195e-05f, -3.269242430e-05f, -3.288163441e-05f, -3.307077197e-05f, -3.325983664e-05f, -3.344882812e-05f, -3.363774607e-05f, -3.382659018e-05f, -3.401536013e-05f,
+-3.420405559e-05f, -3.439267625e-05f, -3.458122179e-05f, -3.476969188e-05f, -3.495808621e-05f, -3.514640446e-05f, -3.533464631e-05f, -3.552281143e-05f, -3.571089952e-05f, -3.589891024e-05f,
+-3.608684329e-05f, -3.627469834e-05f, -3.646247507e-05f, -3.665017317e-05f, -3.683779232e-05f, -3.702533219e-05f, -3.721279248e-05f, -3.740017287e-05f, -3.758747303e-05f, -3.777469265e-05f,
+-3.796183141e-05f, -3.814888900e-05f, -3.833586510e-05f, -3.852275938e-05f, -3.870957155e-05f, -3.889630127e-05f, -3.908294824e-05f, -3.926951213e-05f, -3.945599263e-05f, -3.964238943e-05f,
+-3.982870221e-05f, -4.001493065e-05f, -4.020107444e-05f, -4.038713327e-05f, -4.057310681e-05f, -4.075899476e-05f, -4.094479680e-05f, -4.113051262e-05f, -4.131614190e-05f, -4.150168432e-05f,
+-4.168713958e-05f, -4.187250737e-05f, -4.205778735e-05f, -4.224297924e-05f, -4.242808270e-05f, -4.261309743e-05f, -4.279802312e-05f, -4.298285945e-05f, -4.316760611e-05f, -4.335226279e-05f,
+-4.353682918e-05f, -4.372130496e-05f, -4.390568982e-05f, -4.408998346e-05f, -4.427418555e-05f, -4.445829580e-05f, -4.464231388e-05f, -4.482623949e-05f, -4.501007232e-05f, -4.519381206e-05f,
+-4.537745839e-05f, -4.556101101e-05f, -4.574446961e-05f, -4.592783387e-05f, -4.611110349e-05f, -4.629427816e-05f, -4.647735758e-05f, -4.666034142e-05f, -4.684322939e-05f, -4.702602117e-05f,
+-4.720871645e-05f, -4.739131494e-05f, -4.757381631e-05f, -4.775622027e-05f, -4.793852650e-05f, -4.812073470e-05f, -4.830284456e-05f, -4.848485578e-05f, -4.866676804e-05f, -4.884858104e-05f,
+-4.903029448e-05f, -4.921190805e-05f, -4.939342144e-05f, -4.957483434e-05f, -4.975614646e-05f, -4.993735748e-05f, -5.011846710e-05f, -5.029947502e-05f, -5.048038094e-05f, -5.066118453e-05f,
+-5.084188551e-05f, -5.102248357e-05f, -5.120297841e-05f, -5.138336971e-05f, -5.156365719e-05f, -5.174384052e-05f, -5.192391942e-05f, -5.210389358e-05f, -5.228376269e-05f, -5.246352646e-05f,
+-5.264318458e-05f, -5.282273674e-05f, -5.300218266e-05f, -5.318152202e-05f, -5.336075452e-05f, -5.353987987e-05f, -5.371889776e-05f, -5.389780789e-05f, -5.407660996e-05f, -5.425530367e-05f,
+-5.443388872e-05f, -5.461236481e-05f, -5.479073165e-05f, -5.496898892e-05f, -5.514713634e-05f, -5.532517360e-05f, -5.550310040e-05f, -5.568091645e-05f, -5.585862145e-05f, -5.603621510e-05f,
+-5.621369709e-05f, -5.639106714e-05f, -5.656832495e-05f, -5.674547021e-05f, -5.692250264e-05f, -5.709942193e-05f, -5.727622778e-05f, -5.745291991e-05f, -5.762949802e-05f, -5.780596180e-05f,
+-5.798231096e-05f, -5.815854522e-05f, -5.833466426e-05f, -5.851066781e-05f, -5.868655555e-05f, -5.886232721e-05f, -5.903798247e-05f, -5.921352106e-05f, -5.938894267e-05f, -5.956424701e-05f,
+-5.973943379e-05f, -5.991450272e-05f, -6.008945350e-05f, -6.026428583e-05f, -6.043899943e-05f, -6.061359401e-05f, -6.078806927e-05f, -6.096242491e-05f, -6.113666066e-05f, -6.131077621e-05f,
+-6.148477128e-05f, -6.165864557e-05f, -6.183239879e-05f, -6.200603066e-05f, -6.217954088e-05f, -6.235292916e-05f, -6.252619522e-05f, -6.269933876e-05f, -6.287235949e-05f, -6.304525713e-05f,
+-6.321803138e-05f, -6.339068197e-05f, -6.356320859e-05f, -6.373561096e-05f, -6.390788879e-05f, -6.408004180e-05f, -6.425206970e-05f, -6.442397220e-05f, -6.459574901e-05f, -6.476739985e-05f,
+-6.493892443e-05f, -6.511032246e-05f, -6.528159366e-05f, -6.545273774e-05f, -6.562375442e-05f, -6.579464342e-05f, -6.596540444e-05f, -6.613603720e-05f, -6.630654142e-05f, -6.647691681e-05f,
+-6.664716309e-05f, -6.681727997e-05f, -6.698726718e-05f, -6.715712443e-05f, -6.732685143e-05f, -6.749644790e-05f, -6.766591357e-05f, -6.783524814e-05f, -6.800445134e-05f, -6.817352288e-05f,
+-6.834246248e-05f, -6.851126987e-05f, -6.867994475e-05f, -6.884848686e-05f, -6.901689590e-05f, -6.918517160e-05f, -6.935331368e-05f, -6.952132186e-05f, -6.968919586e-05f, -6.985693540e-05f,
+-7.002454020e-05f, -7.019200998e-05f, -7.035934446e-05f, -7.052654337e-05f, -7.069360643e-05f, -7.086053336e-05f, -7.102732388e-05f, -7.119397771e-05f, -7.136049459e-05f, -7.152687422e-05f,
+-7.169311634e-05f, -7.185922067e-05f, -7.202518693e-05f, -7.219101485e-05f, -7.235670415e-05f, -7.252225456e-05f, -7.268766580e-05f, -7.285293760e-05f, -7.301806968e-05f, -7.318306177e-05f,
+-7.334791359e-05f, -7.351262488e-05f, -7.367719535e-05f, -7.384162475e-05f, -7.400591278e-05f, -7.417005918e-05f, -7.433406369e-05f, -7.449792601e-05f, -7.466164590e-05f, -7.482522306e-05f,
+-7.498865724e-05f, -7.515194816e-05f, -7.531509555e-05f, -7.547809914e-05f, -7.564095866e-05f, -7.580367384e-05f, -7.596624442e-05f, -7.612867011e-05f, -7.629095066e-05f, -7.645308579e-05f,
+-7.661507524e-05f, -7.677691873e-05f, -7.693861601e-05f, -7.710016680e-05f, -7.726157083e-05f, -7.742282784e-05f, -7.758393756e-05f, -7.774489973e-05f, -7.790571407e-05f, -7.806638033e-05f,
+-7.822689823e-05f, -7.838726752e-05f, -7.854748792e-05f, -7.870755918e-05f, -7.886748102e-05f, -7.902725319e-05f, -7.918687541e-05f, -7.934634743e-05f, -7.950566899e-05f, -7.966483981e-05f,
+-7.982385963e-05f, -7.998272820e-05f, -8.014144526e-05f, -8.030001053e-05f, -8.045842376e-05f, -8.061668468e-05f, -8.077479304e-05f, -8.093274858e-05f, -8.109055103e-05f, -8.124820013e-05f,
+-8.140569563e-05f, -8.156303726e-05f, -8.172022476e-05f, -8.187725788e-05f, -8.203413636e-05f, -8.219085993e-05f, -8.234742835e-05f, -8.250384134e-05f, -8.266009866e-05f, -8.281620005e-05f,
+-8.297214525e-05f, -8.312793399e-05f, -8.328356604e-05f, -8.343904113e-05f, -8.359435900e-05f, -8.374951940e-05f, -8.390452207e-05f, -8.405936676e-05f, -8.421405321e-05f, -8.436858118e-05f,
+-8.452295039e-05f, -8.467716061e-05f, -8.483121158e-05f, -8.498510304e-05f, -8.513883474e-05f, -8.529240644e-05f, -8.544581786e-05f, -8.559906878e-05f, -8.575215892e-05f, -8.590508805e-05f,
+-8.605785590e-05f, -8.621046223e-05f, -8.636290680e-05f, -8.651518934e-05f, -8.666730961e-05f, -8.681926736e-05f, -8.697106233e-05f, -8.712269429e-05f, -8.727416298e-05f, -8.742546815e-05f,
+-8.757660955e-05f, -8.772758695e-05f, -8.787840008e-05f, -8.802904870e-05f, -8.817953257e-05f, -8.832985144e-05f, -8.848000506e-05f, -8.862999319e-05f, -8.877981557e-05f, -8.892947198e-05f,
+-8.907896215e-05f, -8.922828585e-05f, -8.937744282e-05f, -8.952643284e-05f, -8.967525565e-05f, -8.982391100e-05f, -8.997239866e-05f, -9.012071839e-05f, -9.026886994e-05f, -9.041685306e-05f,
+-9.056466752e-05f, -9.071231307e-05f, -9.085978948e-05f, -9.100709650e-05f, -9.115423389e-05f, -9.130120141e-05f, -9.144799882e-05f, -9.159462589e-05f, -9.174108236e-05f, -9.188736801e-05f,
+-9.203348259e-05f, -9.217942586e-05f, -9.232519759e-05f, -9.247079754e-05f, -9.261622547e-05f, -9.276148115e-05f, -9.290656433e-05f, -9.305147478e-05f, -9.319621227e-05f, -9.334077655e-05f,
+-9.348516740e-05f, -9.362938457e-05f, -9.377342783e-05f, -9.391729695e-05f, -9.406099170e-05f, -9.420451183e-05f, -9.434785712e-05f, -9.449102733e-05f, -9.463402222e-05f, -9.477684158e-05f,
+-9.491948515e-05f, -9.506195272e-05f, -9.520424404e-05f, -9.534635890e-05f, -9.548829705e-05f, -9.563005826e-05f, -9.577164231e-05f, -9.591304897e-05f, -9.605427800e-05f, -9.619532917e-05f,
+-9.633620226e-05f, -9.647689704e-05f, -9.661741328e-05f, -9.675775075e-05f, -9.689790922e-05f, -9.703788846e-05f, -9.717768826e-05f, -9.731730837e-05f, -9.745674858e-05f, -9.759600866e-05f,
+-9.773508837e-05f, -9.787398751e-05f, -9.801270584e-05f, -9.815124313e-05f, -9.828959916e-05f, -9.842777371e-05f, -9.856576656e-05f, -9.870357747e-05f, -9.884120624e-05f, -9.897865262e-05f,
+-9.911591641e-05f, -9.925299737e-05f, -9.938989530e-05f, -9.952660995e-05f, -9.966314112e-05f, -9.979948859e-05f, -9.993565212e-05f, -1.000716315e-04f, -1.002074265e-04f, -1.003430370e-04f,
+-1.004784626e-04f, -1.006137032e-04f, -1.007487586e-04f, -1.008836285e-04f, -1.010183127e-04f, -1.011528110e-04f, -1.012871232e-04f, -1.014212491e-04f, -1.015551884e-04f, -1.016889409e-04f,
+-1.018225065e-04f, -1.019558849e-04f, -1.020890759e-04f, -1.022220792e-04f, -1.023548947e-04f, -1.024875222e-04f, -1.026199614e-04f, -1.027522121e-04f, -1.028842741e-04f, -1.030161472e-04f,
+-1.031478312e-04f, -1.032793258e-04f, -1.034106309e-04f, -1.035417463e-04f, -1.036726716e-04f, -1.038034068e-04f, -1.039339517e-04f, -1.040643059e-04f, -1.041944693e-04f, -1.043244417e-04f,
+-1.044542229e-04f, -1.045838126e-04f, -1.047132107e-04f, -1.048424170e-04f, -1.049714311e-04f, -1.051002531e-04f, -1.052288825e-04f, -1.053573193e-04f, -1.054855632e-04f, -1.056136140e-04f,
+-1.057414715e-04f, -1.058691355e-04f, -1.059966058e-04f, -1.061238822e-04f, -1.062509645e-04f, -1.063778524e-04f, -1.065045459e-04f, -1.066310446e-04f, -1.067573484e-04f, -1.068834571e-04f,
+-1.070093704e-04f, -1.071350882e-04f, -1.072606103e-04f, -1.073859364e-04f, -1.075110664e-04f, -1.076360000e-04f, -1.077607372e-04f, -1.078852776e-04f, -1.080096210e-04f, -1.081337674e-04f,
+-1.082577164e-04f, -1.083814678e-04f, -1.085050216e-04f, -1.086283774e-04f, -1.087515351e-04f, -1.088744945e-04f, -1.089972554e-04f, -1.091198175e-04f, -1.092421808e-04f, -1.093643449e-04f,
+-1.094863098e-04f, -1.096080752e-04f, -1.097296409e-04f, -1.098510067e-04f, -1.099721724e-04f, -1.100931379e-04f, -1.102139030e-04f, -1.103344673e-04f, -1.104548309e-04f, -1.105749934e-04f,
+-1.106949547e-04f, -1.108147146e-04f, -1.109342729e-04f, -1.110536293e-04f, -1.111727838e-04f, -1.112917362e-04f, -1.114104861e-04f, -1.115290336e-04f, -1.116473782e-04f, -1.117655200e-04f,
+-1.118834586e-04f, -1.120011940e-04f, -1.121187258e-04f, -1.122360540e-04f, -1.123531783e-04f, -1.124700986e-04f, -1.125868147e-04f, -1.127033263e-04f, -1.128196333e-04f, -1.129357356e-04f,
+-1.130516328e-04f, -1.131673250e-04f, -1.132828118e-04f, -1.133980930e-04f, -1.135131686e-04f, -1.136280383e-04f, -1.137427019e-04f, -1.138571593e-04f, -1.139714103e-04f, -1.140854547e-04f,
+-1.141992922e-04f, -1.143129228e-04f, -1.144263463e-04f, -1.145395624e-04f, -1.146525711e-04f, -1.147653720e-04f, -1.148779651e-04f, -1.149903502e-04f, -1.151025270e-04f, -1.152144955e-04f,
+-1.153262554e-04f, -1.154378066e-04f, -1.155491488e-04f, -1.156602819e-04f, -1.157712058e-04f, -1.158819202e-04f, -1.159924251e-04f, -1.161027201e-04f, -1.162128052e-04f, -1.163226801e-04f,
+-1.164323447e-04f, -1.165417988e-04f, -1.166510423e-04f, -1.167600750e-04f, -1.168688967e-04f, -1.169775072e-04f, -1.170859063e-04f, -1.171940940e-04f, -1.173020700e-04f, -1.174098341e-04f,
+-1.175173862e-04f, -1.176247262e-04f, -1.177318537e-04f, -1.178387688e-04f, -1.179454712e-04f, -1.180519607e-04f, -1.181582373e-04f, -1.182643006e-04f, -1.183701506e-04f, -1.184757870e-04f,
+-1.185812098e-04f, -1.186864188e-04f, -1.187914137e-04f, -1.188961945e-04f, -1.190007609e-04f, -1.191051128e-04f, -1.192092501e-04f, -1.193131725e-04f, -1.194168800e-04f, -1.195203723e-04f,
+-1.196236493e-04f, -1.197267108e-04f, -1.198295567e-04f, -1.199321868e-04f, -1.200346009e-04f, -1.201367990e-04f, -1.202387807e-04f, -1.203405461e-04f, -1.204420949e-04f, -1.205434269e-04f,
+-1.206445420e-04f, -1.207454401e-04f, -1.208461209e-04f, -1.209465844e-04f, -1.210468304e-04f, -1.211468587e-04f, -1.212466691e-04f, -1.213462616e-04f, -1.214456359e-04f, -1.215447919e-04f,
+-1.216437295e-04f, -1.217424484e-04f, -1.218409486e-04f, -1.219392299e-04f, -1.220372922e-04f, -1.221351352e-04f, -1.222327589e-04f, -1.223301630e-04f, -1.224273475e-04f, -1.225243122e-04f,
+-1.226210569e-04f, -1.227175815e-04f, -1.228138859e-04f, -1.229099698e-04f, -1.230058332e-04f, -1.231014759e-04f, -1.231968977e-04f, -1.232920985e-04f, -1.233870782e-04f, -1.234818366e-04f,
+-1.235763736e-04f, -1.236706890e-04f, -1.237647826e-04f, -1.238586544e-04f, -1.239523042e-04f, -1.240457318e-04f, -1.241389371e-04f, -1.242319200e-04f, -1.243246803e-04f, -1.244172179e-04f,
+-1.245095326e-04f, -1.246016242e-04f, -1.246934928e-04f, -1.247851380e-04f, -1.248765598e-04f, -1.249677581e-04f, -1.250587326e-04f, -1.251494833e-04f, -1.252400100e-04f, -1.253303126e-04f,
+-1.254203909e-04f, -1.255102448e-04f, -1.255998742e-04f, -1.256892789e-04f, -1.257784588e-04f, -1.258674138e-04f, -1.259561437e-04f, -1.260446483e-04f, -1.261329277e-04f, -1.262209815e-04f,
+-1.263088097e-04f, -1.263964122e-04f, -1.264837888e-04f, -1.265709394e-04f, -1.266578638e-04f, -1.267445620e-04f, -1.268310337e-04f, -1.269172789e-04f, -1.270032975e-04f, -1.270890892e-04f,
+-1.271746540e-04f, -1.272599918e-04f, -1.273451024e-04f, -1.274299856e-04f, -1.275146414e-04f, -1.275990697e-04f, -1.276832702e-04f, -1.277672429e-04f, -1.278509877e-04f, -1.279345044e-04f,
+-1.280177929e-04f, -1.281008531e-04f, -1.281836848e-04f, -1.282662879e-04f, -1.283486624e-04f, -1.284308080e-04f, -1.285127246e-04f, -1.285944122e-04f, -1.286758707e-04f, -1.287570998e-04f,
+-1.288380994e-04f, -1.289188695e-04f, -1.289994100e-04f, -1.290797206e-04f, -1.291598013e-04f, -1.292396520e-04f, -1.293192725e-04f, -1.293986628e-04f, -1.294778227e-04f, -1.295567520e-04f,
+-1.296354508e-04f, -1.297139188e-04f, -1.297921559e-04f, -1.298701621e-04f, -1.299479371e-04f, -1.300254810e-04f, -1.301027935e-04f, -1.301798746e-04f, -1.302567242e-04f, -1.303333421e-04f,
+-1.304097282e-04f, -1.304858824e-04f, -1.305618046e-04f, -1.306374948e-04f, -1.307129526e-04f, -1.307881782e-04f, -1.308631713e-04f, -1.309379318e-04f, -1.310124597e-04f, -1.310867548e-04f,
+-1.311608170e-04f, -1.312346462e-04f, -1.313082423e-04f, -1.313816052e-04f, -1.314547348e-04f, -1.315276309e-04f, -1.316002936e-04f, -1.316727226e-04f, -1.317449178e-04f, -1.318168792e-04f,
+-1.318886066e-04f, -1.319601000e-04f, -1.320313592e-04f, -1.321023841e-04f, -1.321731747e-04f, -1.322437308e-04f, -1.323140523e-04f, -1.323841391e-04f, -1.324539912e-04f, -1.325236084e-04f,
+-1.325929906e-04f, -1.326621377e-04f, -1.327310496e-04f, -1.327997263e-04f, -1.328681675e-04f, -1.329363733e-04f, -1.330043435e-04f, -1.330720780e-04f, -1.331395768e-04f, -1.332068397e-04f,
+-1.332738666e-04f, -1.333406574e-04f, -1.334072121e-04f, -1.334735306e-04f, -1.335396127e-04f, -1.336054583e-04f, -1.336710674e-04f, -1.337364399e-04f, -1.338015756e-04f, -1.338664745e-04f,
+-1.339311365e-04f, -1.339955615e-04f, -1.340597494e-04f, -1.341237001e-04f, -1.341874136e-04f, -1.342508896e-04f, -1.343141282e-04f, -1.343771293e-04f, -1.344398927e-04f, -1.345024184e-04f,
+-1.345647063e-04f, -1.346267563e-04f, -1.346885683e-04f, -1.347501422e-04f, -1.348114779e-04f, -1.348725754e-04f, -1.349334346e-04f, -1.349940554e-04f, -1.350544376e-04f, -1.351145812e-04f,
+-1.351744862e-04f, -1.352341524e-04f, -1.352935798e-04f, -1.353527682e-04f, -1.354117177e-04f, -1.354704280e-04f, -1.355288992e-04f, -1.355871311e-04f, -1.356451237e-04f, -1.357028769e-04f,
+-1.357603905e-04f, -1.358176646e-04f, -1.358746991e-04f, -1.359314938e-04f, -1.359880487e-04f, -1.360443638e-04f, -1.361004388e-04f, -1.361562738e-04f, -1.362118687e-04f, -1.362672235e-04f,
+-1.363223379e-04f, -1.363772120e-04f, -1.364318457e-04f, -1.364862388e-04f, -1.365403914e-04f, -1.365943034e-04f, -1.366479747e-04f, -1.367014051e-04f, -1.367545947e-04f, -1.368075434e-04f,
+-1.368602511e-04f, -1.369127176e-04f, -1.369649431e-04f, -1.370169273e-04f, -1.370686703e-04f, -1.371201718e-04f, -1.371714320e-04f, -1.372224507e-04f, -1.372732278e-04f, -1.373237633e-04f,
+-1.373740570e-04f, -1.374241091e-04f, -1.374739192e-04f, -1.375234875e-04f, -1.375728139e-04f, -1.376218982e-04f, -1.376707404e-04f, -1.377193405e-04f, -1.377676983e-04f, -1.378158139e-04f,
+-1.378636871e-04f, -1.379113179e-04f, -1.379587062e-04f, -1.380058520e-04f, -1.380527552e-04f, -1.380994158e-04f, -1.381458336e-04f, -1.381920087e-04f, -1.382379409e-04f, -1.382836302e-04f,
+-1.383290766e-04f, -1.383742800e-04f, -1.384192403e-04f, -1.384639575e-04f, -1.385084315e-04f, -1.385526622e-04f, -1.385966497e-04f, -1.386403938e-04f, -1.386838945e-04f, -1.387271517e-04f,
+-1.387701654e-04f, -1.388129356e-04f, -1.388554621e-04f, -1.388977450e-04f, -1.389397841e-04f, -1.389815794e-04f, -1.390231309e-04f, -1.390644385e-04f, -1.391055022e-04f, -1.391463219e-04f,
+-1.391868975e-04f, -1.392272291e-04f, -1.392673165e-04f, -1.393071597e-04f, -1.393467587e-04f, -1.393861134e-04f, -1.394252238e-04f, -1.394640898e-04f, -1.395027113e-04f, -1.395410884e-04f,
+-1.395792210e-04f, -1.396171090e-04f, -1.396547524e-04f, -1.396921512e-04f, -1.397293052e-04f, -1.397662146e-04f, -1.398028791e-04f, -1.398392988e-04f, -1.398754736e-04f, -1.399114035e-04f,
+-1.399470885e-04f, -1.399825285e-04f, -1.400177234e-04f, -1.400526732e-04f, -1.400873780e-04f, -1.401218376e-04f, -1.401560519e-04f, -1.401900211e-04f, -1.402237450e-04f, -1.402572235e-04f,
+-1.402904567e-04f, -1.403234446e-04f, -1.403561870e-04f, -1.403886839e-04f, -1.404209354e-04f, -1.404529413e-04f, -1.404847016e-04f, -1.405162164e-04f, -1.405474855e-04f, -1.405785090e-04f,
+-1.406092868e-04f, -1.406398188e-04f, -1.406701050e-04f, -1.407001455e-04f, -1.407299401e-04f, -1.407594889e-04f, -1.407887918e-04f, -1.408178488e-04f, -1.408466598e-04f, -1.408752248e-04f,
+-1.409035439e-04f, -1.409316169e-04f, -1.409594438e-04f, -1.409870247e-04f, -1.410143594e-04f, -1.410414479e-04f, -1.410682903e-04f, -1.410948866e-04f, -1.411212365e-04f, -1.411473403e-04f,
+-1.411731977e-04f, -1.411988089e-04f, -1.412241737e-04f, -1.412492922e-04f, -1.412741643e-04f, -1.412987901e-04f, -1.413231694e-04f, -1.413473023e-04f, -1.413711887e-04f, -1.413948287e-04f,
+-1.414182222e-04f, -1.414413691e-04f, -1.414642695e-04f, -1.414869234e-04f, -1.415093307e-04f, -1.415314914e-04f, -1.415534055e-04f, -1.415750729e-04f, -1.415964937e-04f, -1.416176679e-04f,
+-1.416385954e-04f, -1.416592762e-04f, -1.416797102e-04f, -1.416998976e-04f, -1.417198382e-04f, -1.417395321e-04f, -1.417589792e-04f, -1.417781796e-04f, -1.417971331e-04f, -1.418158398e-04f,
+-1.418342998e-04f, -1.418525129e-04f, -1.418704792e-04f, -1.418881986e-04f, -1.419056712e-04f, -1.419228969e-04f, -1.419398757e-04f, -1.419566077e-04f, -1.419730927e-04f, -1.419893309e-04f,
+-1.420053221e-04f, -1.420210665e-04f, -1.420365639e-04f, -1.420518144e-04f, -1.420668179e-04f, -1.420815746e-04f, -1.420960842e-04f, -1.421103470e-04f, -1.421243627e-04f, -1.421381316e-04f,
+-1.421516534e-04f, -1.421649283e-04f, -1.421779563e-04f, -1.421907373e-04f, -1.422032713e-04f, -1.422155583e-04f, -1.422275984e-04f, -1.422393915e-04f, -1.422509376e-04f, -1.422622368e-04f,
+-1.422732890e-04f, -1.422840942e-04f, -1.422946525e-04f, -1.423049638e-04f, -1.423150281e-04f, -1.423248455e-04f, -1.423344160e-04f, -1.423437395e-04f, -1.423528160e-04f, -1.423616456e-04f,
+-1.423702283e-04f, -1.423785641e-04f, -1.423866529e-04f, -1.423944948e-04f, -1.424020898e-04f, -1.424094379e-04f, -1.424165392e-04f, -1.424233935e-04f, -1.424300010e-04f, -1.424363616e-04f,
+-1.424424753e-04f, -1.424483422e-04f, -1.424539622e-04f, -1.424593355e-04f, -1.424644619e-04f, -1.424693415e-04f, -1.424739743e-04f, -1.424783604e-04f, -1.424824997e-04f, -1.424863922e-04f,
+-1.424900380e-04f, -1.424934371e-04f, -1.424965895e-04f, -1.424994951e-04f, -1.425021541e-04f, -1.425045665e-04f, -1.425067322e-04f, -1.425086512e-04f, -1.425103237e-04f, -1.425117496e-04f,
+-1.425129288e-04f, -1.425138616e-04f, -1.425145478e-04f, -1.425149875e-04f, -1.425151806e-04f, -1.425151273e-04f, -1.425148276e-04f, -1.425142814e-04f, -1.425134888e-04f, -1.425124498e-04f,
+-1.425111644e-04f, -1.425096327e-04f, -1.425078547e-04f, -1.425058303e-04f, -1.425035597e-04f, -1.425010428e-04f, -1.424982797e-04f, -1.424952704e-04f, -1.424920150e-04f, -1.424885133e-04f,
+-1.424847656e-04f, -1.424807717e-04f, -1.424765318e-04f, -1.424720459e-04f, -1.424673139e-04f, -1.424623360e-04f, -1.424571121e-04f, -1.424516422e-04f, -1.424459265e-04f, -1.424399649e-04f,
+-1.424337575e-04f, -1.424273043e-04f, -1.424206053e-04f, -1.424136605e-04f, -1.424064701e-04f, -1.423990340e-04f, -1.423913522e-04f, -1.423834249e-04f, -1.423752519e-04f, -1.423668334e-04f,
+-1.423581695e-04f, -1.423492600e-04f, -1.423401052e-04f, -1.423307049e-04f, -1.423210593e-04f, -1.423111683e-04f, -1.423010321e-04f, -1.422906506e-04f, -1.422800239e-04f, -1.422691521e-04f,
+-1.422580351e-04f, -1.422466731e-04f, -1.422350659e-04f, -1.422232138e-04f, -1.422111167e-04f, -1.421987747e-04f, -1.421861878e-04f, -1.421733561e-04f, -1.421602795e-04f, -1.421469582e-04f,
+-1.421333922e-04f, -1.421195816e-04f, -1.421055263e-04f, -1.420912264e-04f, -1.420766820e-04f, -1.420618931e-04f, -1.420468597e-04f, -1.420315820e-04f, -1.420160599e-04f, -1.420002935e-04f,
+-1.419842828e-04f, -1.419680280e-04f, -1.419515289e-04f, -1.419347858e-04f, -1.419177986e-04f, -1.419005674e-04f, -1.418830923e-04f, -1.418653732e-04f, -1.418474103e-04f, -1.418292036e-04f,
+-1.418107531e-04f, -1.417920589e-04f, -1.417731211e-04f, -1.417539396e-04f, -1.417345147e-04f, -1.417148462e-04f, -1.416949343e-04f, -1.416747790e-04f, -1.416543804e-04f, -1.416337385e-04f,
+-1.416128534e-04f, -1.415917252e-04f, -1.415703538e-04f, -1.415487394e-04f, -1.415268821e-04f, -1.415047818e-04f, -1.414824386e-04f, -1.414598526e-04f, -1.414370239e-04f, -1.414139524e-04f,
+-1.413906384e-04f, -1.413670818e-04f, -1.413432826e-04f, -1.413192411e-04f, -1.412949571e-04f, -1.412704308e-04f, -1.412456623e-04f, -1.412206515e-04f, -1.411953986e-04f, -1.411699037e-04f,
+-1.411441667e-04f, -1.411181878e-04f, -1.410919670e-04f, -1.410655045e-04f, -1.410388001e-04f, -1.410118541e-04f, -1.409846665e-04f, -1.409572373e-04f, -1.409295667e-04f, -1.409016547e-04f,
+-1.408735013e-04f, -1.408451066e-04f, -1.408164708e-04f, -1.407875938e-04f, -1.407584757e-04f, -1.407291167e-04f, -1.406995167e-04f, -1.406696759e-04f, -1.406395943e-04f, -1.406092720e-04f,
+-1.405787091e-04f, -1.405479056e-04f, -1.405168616e-04f, -1.404855772e-04f, -1.404540525e-04f, -1.404222875e-04f, -1.403902823e-04f, -1.403580370e-04f, -1.403255517e-04f, -1.402928264e-04f,
+-1.402598612e-04f, -1.402266562e-04f, -1.401932115e-04f, -1.401595271e-04f, -1.401256032e-04f, -1.400914397e-04f, -1.400570369e-04f, -1.400223947e-04f, -1.399875132e-04f, -1.399523926e-04f,
+-1.399170329e-04f, -1.398814342e-04f, -1.398455965e-04f, -1.398095200e-04f, -1.397732047e-04f, -1.397366507e-04f, -1.396998582e-04f, -1.396628271e-04f, -1.396255575e-04f, -1.395880496e-04f,
+-1.395503035e-04f, -1.395123192e-04f, -1.394740968e-04f, -1.394356363e-04f, -1.393969380e-04f, -1.393580018e-04f, -1.393188278e-04f, -1.392794162e-04f, -1.392397671e-04f, -1.391998804e-04f,
+-1.391597564e-04f, -1.391193950e-04f, -1.390787964e-04f, -1.390379607e-04f, -1.389968880e-04f, -1.389555783e-04f, -1.389140318e-04f, -1.388722485e-04f, -1.388302285e-04f, -1.387879719e-04f,
+-1.387454789e-04f, -1.387027495e-04f, -1.386597837e-04f, -1.386165818e-04f, -1.385731438e-04f, -1.385294697e-04f, -1.384855598e-04f, -1.384414140e-04f, -1.383970324e-04f, -1.383524153e-04f,
+-1.383075626e-04f, -1.382624745e-04f, -1.382171510e-04f, -1.381715923e-04f, -1.381257984e-04f, -1.380797695e-04f, -1.380335057e-04f, -1.379870070e-04f, -1.379402736e-04f, -1.378933055e-04f,
+-1.378461029e-04f, -1.377986658e-04f, -1.377509944e-04f, -1.377030888e-04f, -1.376549490e-04f, -1.376065752e-04f, -1.375579675e-04f, -1.375091259e-04f, -1.374600506e-04f, -1.374107417e-04f,
+-1.373611993e-04f, -1.373114234e-04f, -1.372614143e-04f, -1.372111720e-04f, -1.371606966e-04f, -1.371099882e-04f, -1.370590469e-04f, -1.370078728e-04f, -1.369564661e-04f, -1.369048269e-04f,
+-1.368529552e-04f, -1.368008511e-04f, -1.367485149e-04f, -1.366959465e-04f, -1.366431461e-04f, -1.365901138e-04f, -1.365368498e-04f, -1.364833540e-04f, -1.364296268e-04f, -1.363756680e-04f,
+-1.363214780e-04f, -1.362670567e-04f, -1.362124043e-04f, -1.361575209e-04f, -1.361024066e-04f, -1.360470616e-04f, -1.359914859e-04f, -1.359356797e-04f, -1.358796430e-04f, -1.358233761e-04f,
+-1.357668790e-04f, -1.357101518e-04f, -1.356531946e-04f, -1.355960076e-04f, -1.355385909e-04f, -1.354809447e-04f, -1.354230689e-04f, -1.353649638e-04f, -1.353066294e-04f, -1.352480659e-04f,
+-1.351892734e-04f, -1.351302520e-04f, -1.350710019e-04f, -1.350115232e-04f, -1.349518159e-04f, -1.348918802e-04f, -1.348317163e-04f, -1.347713242e-04f, -1.347107042e-04f, -1.346498562e-04f,
+-1.345887804e-04f, -1.345274770e-04f, -1.344659461e-04f, -1.344041877e-04f, -1.343422021e-04f, -1.342799894e-04f, -1.342175496e-04f, -1.341548830e-04f, -1.340919895e-04f, -1.340288695e-04f,
+-1.339655229e-04f, -1.339019500e-04f, -1.338381508e-04f, -1.337741254e-04f, -1.337098741e-04f, -1.336453969e-04f, -1.335806940e-04f, -1.335157655e-04f, -1.334506115e-04f, -1.333852322e-04f,
+-1.333196277e-04f, -1.332537981e-04f, -1.331877436e-04f, -1.331214642e-04f, -1.330549602e-04f, -1.329882316e-04f, -1.329212787e-04f, -1.328541014e-04f, -1.327867001e-04f, -1.327190747e-04f,
+-1.326512254e-04f, -1.325831525e-04f, -1.325148559e-04f, -1.324463359e-04f, -1.323775925e-04f, -1.323086260e-04f, -1.322394364e-04f, -1.321700239e-04f, -1.321003887e-04f, -1.320305308e-04f,
+-1.319604505e-04f, -1.318901478e-04f, -1.318196229e-04f, -1.317488759e-04f, -1.316779070e-04f, -1.316067163e-04f, -1.315353039e-04f, -1.314636701e-04f, -1.313918149e-04f, -1.313197385e-04f,
+-1.312474410e-04f, -1.311749226e-04f, -1.311021834e-04f, -1.310292235e-04f, -1.309560432e-04f, -1.308826425e-04f, -1.308090216e-04f, -1.307351806e-04f, -1.306611197e-04f, -1.305868391e-04f,
+-1.305123388e-04f, -1.304376191e-04f, -1.303626800e-04f, -1.302875218e-04f, -1.302121445e-04f, -1.301365484e-04f, -1.300607335e-04f, -1.299847000e-04f, -1.299084481e-04f, -1.298319779e-04f,
+-1.297552896e-04f, -1.296783833e-04f, -1.296012592e-04f, -1.295239174e-04f, -1.294463580e-04f, -1.293685813e-04f, -1.292905874e-04f, -1.292123764e-04f, -1.291339485e-04f, -1.290553038e-04f,
+-1.289764426e-04f, -1.288973648e-04f, -1.288180708e-04f, -1.287385607e-04f, -1.286588345e-04f, -1.285788925e-04f, -1.284987349e-04f, -1.284183617e-04f, -1.283377732e-04f, -1.282569694e-04f,
+-1.281759506e-04f, -1.280947170e-04f, -1.280132686e-04f, -1.279316056e-04f, -1.278497282e-04f, -1.277676366e-04f, -1.276853309e-04f, -1.276028112e-04f, -1.275200778e-04f, -1.274371308e-04f,
+-1.273539703e-04f, -1.272705966e-04f, -1.271870097e-04f, -1.271032098e-04f, -1.270191972e-04f, -1.269349719e-04f, -1.268505342e-04f, -1.267658841e-04f, -1.266810219e-04f, -1.265959477e-04f,
+-1.265106617e-04f, -1.264251641e-04f, -1.263394550e-04f, -1.262535345e-04f, -1.261674029e-04f, -1.260810603e-04f, -1.259945069e-04f, -1.259077429e-04f, -1.258207684e-04f, -1.257335835e-04f,
+-1.256461885e-04f, -1.255585836e-04f, -1.254707688e-04f, -1.253827444e-04f, -1.252945105e-04f, -1.252060673e-04f, -1.251174150e-04f, -1.250285537e-04f, -1.249394837e-04f, -1.248502050e-04f,
+-1.247607179e-04f, -1.246710225e-04f, -1.245811190e-04f, -1.244910076e-04f, -1.244006885e-04f, -1.243101617e-04f, -1.242194276e-04f, -1.241284862e-04f, -1.240373378e-04f, -1.239459825e-04f,
+-1.238544205e-04f, -1.237626520e-04f, -1.236706771e-04f, -1.235784960e-04f, -1.234861090e-04f, -1.233935161e-04f, -1.233007176e-04f, -1.232077136e-04f, -1.231145043e-04f, -1.230210899e-04f,
+-1.229274705e-04f, -1.228336465e-04f, -1.227396178e-04f, -1.226453847e-04f, -1.225509475e-04f, -1.224563062e-04f, -1.223614610e-04f, -1.222664122e-04f, -1.221711599e-04f, -1.220757043e-04f,
+-1.219800455e-04f, -1.218841838e-04f, -1.217881194e-04f, -1.216918523e-04f, -1.215953829e-04f, -1.214987113e-04f, -1.214018376e-04f, -1.213047621e-04f, -1.212074850e-04f, -1.211100063e-04f,
+-1.210123264e-04f, -1.209144454e-04f, -1.208163635e-04f, -1.207180808e-04f, -1.206195976e-04f, -1.205209141e-04f, -1.204220303e-04f, -1.203229466e-04f, -1.202236632e-04f, -1.201241801e-04f,
+-1.200244976e-04f, -1.199246158e-04f, -1.198245351e-04f, -1.197242555e-04f, -1.196237772e-04f, -1.195231005e-04f, -1.194222255e-04f, -1.193211524e-04f, -1.192198814e-04f, -1.191184128e-04f,
+-1.190167466e-04f, -1.189148831e-04f, -1.188128225e-04f, -1.187105649e-04f, -1.186081107e-04f, -1.185054598e-04f, -1.184026127e-04f, -1.182995694e-04f, -1.181963301e-04f, -1.180928950e-04f,
+-1.179892644e-04f, -1.178854384e-04f, -1.177814173e-04f, -1.176772011e-04f, -1.175727902e-04f, -1.174681847e-04f, -1.173633848e-04f, -1.172583907e-04f, -1.171532026e-04f, -1.170478208e-04f,
+-1.169422453e-04f, -1.168364764e-04f, -1.167305143e-04f, -1.166243592e-04f, -1.165180114e-04f, -1.164114709e-04f, -1.163047380e-04f, -1.161978129e-04f, -1.160906959e-04f, -1.159833870e-04f,
+-1.158758865e-04f, -1.157681947e-04f, -1.156603116e-04f, -1.155522376e-04f, -1.154439727e-04f, -1.153355173e-04f, -1.152268716e-04f, -1.151180356e-04f, -1.150090097e-04f, -1.148997940e-04f,
+-1.147903887e-04f, -1.146807941e-04f, -1.145710104e-04f, -1.144610377e-04f, -1.143508762e-04f, -1.142405263e-04f, -1.141299880e-04f, -1.140192616e-04f, -1.139083472e-04f, -1.137972452e-04f,
+-1.136859557e-04f, -1.135744789e-04f, -1.134628150e-04f, -1.133509642e-04f, -1.132389268e-04f, -1.131267029e-04f, -1.130142928e-04f, -1.129016967e-04f, -1.127889147e-04f, -1.126759471e-04f,
+-1.125627942e-04f, -1.124494560e-04f, -1.123359328e-04f, -1.122222249e-04f, -1.121083325e-04f, -1.119942557e-04f, -1.118799948e-04f, -1.117655499e-04f, -1.116509214e-04f, -1.115361094e-04f,
+-1.114211141e-04f, -1.113059357e-04f, -1.111905745e-04f, -1.110750307e-04f, -1.109593044e-04f, -1.108433960e-04f, -1.107273056e-04f, -1.106110334e-04f, -1.104945796e-04f, -1.103779445e-04f,
+-1.102611283e-04f, -1.101441312e-04f, -1.100269535e-04f, -1.099095952e-04f, -1.097920567e-04f, -1.096743382e-04f, -1.095564399e-04f, -1.094383620e-04f, -1.093201047e-04f, -1.092016683e-04f,
+-1.090830529e-04f, -1.089642588e-04f, -1.088452862e-04f, -1.087261354e-04f, -1.086068065e-04f, -1.084872998e-04f, -1.083676155e-04f, -1.082477538e-04f, -1.081277149e-04f, -1.080074991e-04f,
+-1.078871066e-04f, -1.077665376e-04f, -1.076457923e-04f, -1.075248709e-04f, -1.074037738e-04f, -1.072825010e-04f, -1.071610529e-04f, -1.070394296e-04f, -1.069176314e-04f, -1.067956585e-04f,
+-1.066735112e-04f, -1.065511895e-04f, -1.064286939e-04f, -1.063060245e-04f, -1.061831815e-04f, -1.060601651e-04f, -1.059369757e-04f, -1.058136133e-04f, -1.056900783e-04f, -1.055663709e-04f,
+-1.054424913e-04f, -1.053184397e-04f, -1.051942163e-04f, -1.050698215e-04f, -1.049452553e-04f, -1.048205181e-04f, -1.046956101e-04f, -1.045705315e-04f, -1.044452825e-04f, -1.043198634e-04f,
+-1.041942744e-04f, -1.040685157e-04f, -1.039425876e-04f, -1.038164903e-04f, -1.036902240e-04f, -1.035637890e-04f, -1.034371854e-04f, -1.033104136e-04f, -1.031834737e-04f, -1.030563660e-04f,
+-1.029290908e-04f, -1.028016482e-04f, -1.026740385e-04f, -1.025462620e-04f, -1.024183188e-04f, -1.022902092e-04f, -1.021619334e-04f, -1.020334917e-04f, -1.019048843e-04f, -1.017761115e-04f,
+-1.016471734e-04f, -1.015180704e-04f, -1.013888026e-04f, -1.012593703e-04f, -1.011297737e-04f, -1.010000131e-04f, -1.008700887e-04f, -1.007400008e-04f, -1.006097495e-04f, -1.004793351e-04f,
+-1.003487580e-04f, -1.002180182e-04f, -1.000871160e-04f, -9.995605176e-05f, -9.982482562e-05f, -9.969343784e-05f, -9.956188866e-05f, -9.943017832e-05f, -9.929830706e-05f, -9.916627514e-05f,
+-9.903408278e-05f, -9.890173023e-05f, -9.876921773e-05f, -9.863654553e-05f, -9.850371387e-05f, -9.837072299e-05f, -9.823757313e-05f, -9.810426454e-05f, -9.797079746e-05f, -9.783717214e-05f,
+-9.770338882e-05f, -9.756944775e-05f, -9.743534917e-05f, -9.730109332e-05f, -9.716668045e-05f, -9.703211081e-05f, -9.689738464e-05f, -9.676250219e-05f, -9.662746371e-05f, -9.649226944e-05f,
+-9.635691963e-05f, -9.622141452e-05f, -9.608575437e-05f, -9.594993941e-05f, -9.581396991e-05f, -9.567784610e-05f, -9.554156824e-05f, -9.540513658e-05f, -9.526855136e-05f, -9.513181283e-05f,
+-9.499492124e-05f, -9.485787684e-05f, -9.472067988e-05f, -9.458333062e-05f, -9.444582930e-05f, -9.430817616e-05f, -9.417037148e-05f, -9.403241548e-05f, -9.389430844e-05f, -9.375605059e-05f,
+-9.361764219e-05f, -9.347908349e-05f, -9.334037474e-05f, -9.320151620e-05f, -9.306250812e-05f, -9.292335075e-05f, -9.278404434e-05f, -9.264458915e-05f, -9.250498544e-05f, -9.236523345e-05f,
+-9.222533344e-05f, -9.208528567e-05f, -9.194509038e-05f, -9.180474784e-05f, -9.166425830e-05f, -9.152362201e-05f, -9.138283924e-05f, -9.124191023e-05f, -9.110083524e-05f, -9.095961453e-05f,
+-9.081824836e-05f, -9.067673698e-05f, -9.053508064e-05f, -9.039327961e-05f, -9.025133415e-05f, -9.010924451e-05f, -8.996701094e-05f, -8.982463371e-05f, -8.968211308e-05f, -8.953944930e-05f,
+-8.939664264e-05f, -8.925369335e-05f, -8.911060168e-05f, -8.896736791e-05f, -8.882399229e-05f, -8.868047508e-05f, -8.853681653e-05f, -8.839301692e-05f, -8.824907650e-05f, -8.810499553e-05f,
+-8.796077428e-05f, -8.781641300e-05f, -8.767191195e-05f, -8.752727141e-05f, -8.738249162e-05f, -8.723757285e-05f, -8.709251537e-05f, -8.694731943e-05f, -8.680198530e-05f, -8.665651325e-05f,
+-8.651090353e-05f, -8.636515641e-05f, -8.621927215e-05f, -8.607325102e-05f, -8.592709328e-05f, -8.578079919e-05f, -8.563436902e-05f, -8.548780304e-05f, -8.534110150e-05f, -8.519426468e-05f,
+-8.504729284e-05f, -8.490018625e-05f, -8.475294516e-05f, -8.460556985e-05f, -8.445806058e-05f, -8.431041763e-05f, -8.416264125e-05f, -8.401473171e-05f, -8.386668928e-05f, -8.371851423e-05f,
+-8.357020682e-05f, -8.342176733e-05f, -8.327319602e-05f, -8.312449315e-05f, -8.297565900e-05f, -8.282669384e-05f, -8.267759793e-05f, -8.252837154e-05f, -8.237901494e-05f, -8.222952840e-05f,
+-8.207991220e-05f, -8.193016659e-05f, -8.178029186e-05f, -8.163028826e-05f, -8.148015607e-05f, -8.132989557e-05f, -8.117950702e-05f, -8.102899069e-05f, -8.087834685e-05f, -8.072757578e-05f,
+-8.057667774e-05f, -8.042565301e-05f, -8.027450186e-05f, -8.012322457e-05f, -7.997182140e-05f, -7.982029262e-05f, -7.966863852e-05f, -7.951685935e-05f, -7.936495540e-05f, -7.921292694e-05f,
+-7.906077425e-05f, -7.890849758e-05f, -7.875609723e-05f, -7.860357346e-05f, -7.845092655e-05f, -7.829815677e-05f, -7.814526440e-05f, -7.799224971e-05f, -7.783911297e-05f, -7.768585447e-05f,
+-7.753247447e-05f, -7.737897326e-05f, -7.722535110e-05f, -7.707160828e-05f, -7.691774507e-05f, -7.676376174e-05f, -7.660965858e-05f, -7.645543586e-05f, -7.630109385e-05f, -7.614663284e-05f,
+-7.599205309e-05f, -7.583735490e-05f, -7.568253853e-05f, -7.552760426e-05f, -7.537255238e-05f, -7.521738315e-05f, -7.506209686e-05f, -7.490669379e-05f, -7.475117421e-05f, -7.459553840e-05f,
+-7.443978665e-05f, -7.428391923e-05f, -7.412793642e-05f, -7.397183849e-05f, -7.381562574e-05f, -7.365929844e-05f, -7.350285687e-05f, -7.334630131e-05f, -7.318963204e-05f, -7.303284934e-05f,
+-7.287595349e-05f, -7.271894478e-05f, -7.256182348e-05f, -7.240458987e-05f, -7.224724424e-05f, -7.208978687e-05f, -7.193221804e-05f, -7.177453803e-05f, -7.161674712e-05f, -7.145884560e-05f,
+-7.130083375e-05f, -7.114271185e-05f, -7.098448019e-05f, -7.082613904e-05f, -7.066768869e-05f, -7.050912942e-05f, -7.035046152e-05f, -7.019168528e-05f, -7.003280096e-05f, -6.987380886e-05f,
+-6.971470927e-05f, -6.955550246e-05f, -6.939618872e-05f, -6.923676834e-05f, -6.907724160e-05f, -6.891760878e-05f, -6.875787017e-05f, -6.859802606e-05f, -6.843807673e-05f, -6.827802247e-05f,
+-6.811786355e-05f, -6.795760028e-05f, -6.779723292e-05f, -6.763676178e-05f, -6.747618713e-05f, -6.731550927e-05f, -6.715472848e-05f, -6.699384504e-05f, -6.683285924e-05f, -6.667177137e-05f,
+-6.651058173e-05f, -6.634929058e-05f, -6.618789823e-05f, -6.602640496e-05f, -6.586481105e-05f, -6.570311680e-05f, -6.554132250e-05f, -6.537942843e-05f, -6.521743487e-05f, -6.505534213e-05f,
+-6.489315048e-05f, -6.473086022e-05f, -6.456847164e-05f, -6.440598502e-05f, -6.424340066e-05f, -6.408071884e-05f, -6.391793985e-05f, -6.375506399e-05f, -6.359209154e-05f, -6.342902279e-05f,
+-6.326585803e-05f, -6.310259756e-05f, -6.293924166e-05f, -6.277579063e-05f, -6.261224475e-05f, -6.244860432e-05f, -6.228486963e-05f, -6.212104096e-05f, -6.195711861e-05f, -6.179310288e-05f,
+-6.162899404e-05f, -6.146479241e-05f, -6.130049825e-05f, -6.113611188e-05f, -6.097163357e-05f, -6.080706363e-05f, -6.064240235e-05f, -6.047765001e-05f, -6.031280691e-05f, -6.014787334e-05f,
+-5.998284960e-05f, -5.981773598e-05f, -5.965253277e-05f, -5.948724027e-05f, -5.932185876e-05f, -5.915638855e-05f, -5.899082992e-05f, -5.882518317e-05f, -5.865944860e-05f, -5.849362650e-05f,
+-5.832771715e-05f, -5.816172086e-05f, -5.799563793e-05f, -5.782946864e-05f, -5.766321329e-05f, -5.749687217e-05f, -5.733044559e-05f, -5.716393383e-05f, -5.699733719e-05f, -5.683065596e-05f,
+-5.666389045e-05f, -5.649704094e-05f, -5.633010774e-05f, -5.616309113e-05f, -5.599599142e-05f, -5.582880889e-05f, -5.566154386e-05f, -5.549419660e-05f, -5.532676743e-05f, -5.515925663e-05f,
+-5.499166450e-05f, -5.482399134e-05f, -5.465623745e-05f, -5.448840312e-05f, -5.432048865e-05f, -5.415249434e-05f, -5.398442048e-05f, -5.381626737e-05f, -5.364803531e-05f, -5.347972460e-05f,
+-5.331133553e-05f, -5.314286841e-05f, -5.297432353e-05f, -5.280570118e-05f, -5.263700167e-05f, -5.246822530e-05f, -5.229937236e-05f, -5.213044315e-05f, -5.196143798e-05f, -5.179235713e-05f,
+-5.162320091e-05f, -5.145396962e-05f, -5.128466355e-05f, -5.111528302e-05f, -5.094582830e-05f, -5.077629971e-05f, -5.060669754e-05f, -5.043702210e-05f, -5.026727368e-05f, -5.009745258e-05f,
+-4.992755911e-05f, -4.975759355e-05f, -4.958755622e-05f, -4.941744742e-05f, -4.924726743e-05f, -4.907701657e-05f, -4.890669513e-05f, -4.873630342e-05f, -4.856584174e-05f, -4.839531037e-05f,
+-4.822470964e-05f, -4.805403983e-05f, -4.788330126e-05f, -4.771249421e-05f, -4.754161899e-05f, -4.737067591e-05f, -4.719966526e-05f, -4.702858734e-05f, -4.685744246e-05f, -4.668623093e-05f,
+-4.651495303e-05f, -4.634360907e-05f, -4.617219936e-05f, -4.600072419e-05f, -4.582918388e-05f, -4.565757871e-05f, -4.548590900e-05f, -4.531417504e-05f, -4.514237714e-05f, -4.497051560e-05f,
+-4.479859072e-05f, -4.462660281e-05f, -4.445455217e-05f, -4.428243910e-05f, -4.411026391e-05f, -4.393802689e-05f, -4.376572835e-05f, -4.359336860e-05f, -4.342094793e-05f, -4.324846666e-05f,
+-4.307592508e-05f, -4.290332350e-05f, -4.273066221e-05f, -4.255794154e-05f, -4.238516177e-05f, -4.221232322e-05f, -4.203942618e-05f, -4.186647096e-05f, -4.169345787e-05f, -4.152038720e-05f,
+-4.134725927e-05f, -4.117407438e-05f, -4.100083283e-05f, -4.082753493e-05f, -4.065418097e-05f, -4.048077127e-05f, -4.030730613e-05f, -4.013378586e-05f, -3.996021076e-05f, -3.978658113e-05f,
+-3.961289728e-05f, -3.943915951e-05f, -3.926536814e-05f, -3.909152346e-05f, -3.891762578e-05f, -3.874367540e-05f, -3.856967264e-05f, -3.839561779e-05f, -3.822151116e-05f, -3.804735306e-05f,
+-3.787314379e-05f, -3.769888366e-05f, -3.752457297e-05f, -3.735021204e-05f, -3.717580116e-05f, -3.700134064e-05f, -3.682683079e-05f, -3.665227191e-05f, -3.647766431e-05f, -3.630300830e-05f,
+-3.612830418e-05f, -3.595355226e-05f, -3.577875284e-05f, -3.560390624e-05f, -3.542901275e-05f, -3.525407268e-05f, -3.507908635e-05f, -3.490405405e-05f, -3.472897610e-05f, -3.455385280e-05f,
+-3.437868445e-05f, -3.420347137e-05f, -3.402821386e-05f, -3.385291223e-05f, -3.367756678e-05f, -3.350217782e-05f, -3.332674566e-05f, -3.315127061e-05f, -3.297575297e-05f, -3.280019306e-05f,
+-3.262459117e-05f, -3.244894761e-05f, -3.227326270e-05f, -3.209753673e-05f, -3.192177003e-05f, -3.174596289e-05f, -3.157011562e-05f, -3.139422853e-05f, -3.121830192e-05f, -3.104233612e-05f,
+-3.086633141e-05f, -3.069028812e-05f, -3.051420654e-05f, -3.033808699e-05f, -3.016192978e-05f, -2.998573520e-05f, -2.980950358e-05f, -2.963323521e-05f, -2.945693041e-05f, -2.928058948e-05f,
+-2.910421274e-05f, -2.892780048e-05f, -2.875135302e-05f, -2.857487067e-05f, -2.839835374e-05f, -2.822180252e-05f, -2.804521734e-05f, -2.786859850e-05f, -2.769194630e-05f, -2.751526106e-05f,
+-2.733854309e-05f, -2.716179269e-05f, -2.698501017e-05f, -2.680819584e-05f, -2.663135001e-05f, -2.645447299e-05f, -2.627756509e-05f, -2.610062660e-05f, -2.592365785e-05f, -2.574665915e-05f,
+-2.556963079e-05f, -2.539257310e-05f, -2.521548637e-05f, -2.503837092e-05f, -2.486122705e-05f, -2.468405508e-05f, -2.450685531e-05f, -2.432962806e-05f, -2.415237362e-05f, -2.397509232e-05f,
+-2.379778445e-05f, -2.362045034e-05f, -2.344309028e-05f, -2.326570458e-05f, -2.308829356e-05f, -2.291085753e-05f, -2.273339679e-05f, -2.255591165e-05f, -2.237840242e-05f, -2.220086941e-05f,
+-2.202331293e-05f, -2.184573329e-05f, -2.166813080e-05f, -2.149050577e-05f, -2.131285850e-05f, -2.113518931e-05f, -2.095749850e-05f, -2.077978638e-05f, -2.060205327e-05f, -2.042429947e-05f,
+-2.024652529e-05f, -2.006873105e-05f, -1.989091704e-05f, -1.971308358e-05f, -1.953523098e-05f, -1.935735955e-05f, -1.917946959e-05f, -1.900156142e-05f, -1.882363535e-05f, -1.864569168e-05f,
+-1.846773073e-05f, -1.828975280e-05f, -1.811175820e-05f, -1.793374725e-05f, -1.775572024e-05f, -1.757767750e-05f, -1.739961933e-05f, -1.722154603e-05f, -1.704345793e-05f, -1.686535532e-05f,
+-1.668723852e-05f, -1.650910784e-05f, -1.633096359e-05f, -1.615280607e-05f, -1.597463559e-05f, -1.579645247e-05f, -1.561825701e-05f, -1.544004953e-05f, -1.526183032e-05f, -1.508359971e-05f,
+-1.490535800e-05f, -1.472710550e-05f, -1.454884252e-05f, -1.437056936e-05f, -1.419228635e-05f, -1.401399378e-05f, -1.383569197e-05f, -1.365738122e-05f, -1.347906184e-05f, -1.330073415e-05f,
+-1.312239846e-05f, -1.294405506e-05f, -1.276570428e-05f, -1.258734642e-05f, -1.240898179e-05f, -1.223061069e-05f, -1.205223345e-05f, -1.187385036e-05f, -1.169546173e-05f, -1.151706789e-05f,
+-1.133866912e-05f, -1.116026575e-05f, -1.098185808e-05f, -1.080344643e-05f, -1.062503109e-05f, -1.044661238e-05f, -1.026819061e-05f, -1.008976609e-05f, -9.911339121e-06f, -9.732910019e-06f,
+-9.554479090e-06f, -9.376046644e-06f, -9.197612989e-06f, -9.019178434e-06f, -8.840743288e-06f, -8.662307860e-06f, -8.483872458e-06f, -8.305437390e-06f, -8.127002966e-06f, -7.948569495e-06f,
+-7.770137284e-06f, -7.591706642e-06f, -7.413277879e-06f, -7.234851302e-06f, -7.056427219e-06f, -6.878005940e-06f, -6.699587773e-06f, -6.521173026e-06f, -6.342762007e-06f, -6.164355026e-06f,
+-5.985952389e-06f, -5.807554406e-06f, -5.629161384e-06f, -5.450773633e-06f, -5.272391459e-06f, -5.094015171e-06f, -4.915645078e-06f, -4.737281486e-06f, -4.558924705e-06f, -4.380575042e-06f,
+-4.202232805e-06f, -4.023898303e-06f, -3.845571842e-06f, -3.667253731e-06f, -3.488944277e-06f, -3.310643789e-06f, -3.132352573e-06f, -2.954070938e-06f, -2.775799191e-06f, -2.597537640e-06f,
+-2.419286592e-06f, -2.241046355e-06f, -2.062817237e-06f, -1.884599543e-06f, -1.706393583e-06f, -1.528199663e-06f, -1.350018090e-06f, -1.171849172e-06f, -9.936932161e-07f, -8.155505289e-07f,
+-6.374214177e-07f, -4.593061895e-07f, -2.812051512e-07f, -1.031186099e-07f, 7.495312775e-08f, 2.530097548e-07f, 4.310509646e-07f, 6.090764504e-07f, 7.870859055e-07f, 9.650790234e-07f,
+1.143055497e-06f, 1.321015021e-06f, 1.498957288e-06f, 1.676881992e-06f, 1.854788827e-06f, 2.032677486e-06f, 2.210547663e-06f, 2.388399052e-06f, 2.566231346e-06f, 2.744044241e-06f,
+2.921837430e-06f, 3.099610606e-06f, 3.277363465e-06f, 3.455095700e-06f, 3.632807005e-06f, 3.810497075e-06f, 3.988165605e-06f, 4.165812288e-06f, 4.343436820e-06f, 4.521038895e-06f,
+4.698618207e-06f, 4.876174451e-06f, 5.053707322e-06f, 5.231216516e-06f, 5.408701725e-06f, 5.586162647e-06f, 5.763598975e-06f, 5.941010406e-06f, 6.118396633e-06f, 6.295757353e-06f,
+6.473092260e-06f, 6.650401051e-06f, 6.827683420e-06f, 7.004939063e-06f, 7.182167675e-06f, 7.359368953e-06f, 7.536542593e-06f, 7.713688289e-06f, 7.890805737e-06f, 8.067894635e-06f,
+8.244954678e-06f, 8.421985561e-06f, 8.598986982e-06f, 8.775958636e-06f, 8.952900220e-06f, 9.129811430e-06f, 9.306691962e-06f, 9.483541515e-06f, 9.660359783e-06f, 9.837146464e-06f,
+1.001390125e-05f, 1.019062385e-05f, 1.036731395e-05f, 1.054397125e-05f, 1.072059545e-05f, 1.089718624e-05f, 1.107374333e-05f, 1.125026641e-05f, 1.142675517e-05f, 1.160320932e-05f,
+1.177962855e-05f, 1.195601256e-05f, 1.213236104e-05f, 1.230867371e-05f, 1.248495024e-05f, 1.266119035e-05f, 1.283739373e-05f, 1.301356008e-05f, 1.318968910e-05f, 1.336578048e-05f,
+1.354183392e-05f, 1.371784913e-05f, 1.389382579e-05f, 1.406976362e-05f, 1.424566231e-05f, 1.442152155e-05f, 1.459734105e-05f, 1.477312051e-05f, 1.494885962e-05f, 1.512455809e-05f,
+1.530021561e-05f, 1.547583188e-05f, 1.565140661e-05f, 1.582693949e-05f, 1.600243023e-05f, 1.617787852e-05f, 1.635328406e-05f, 1.652864655e-05f, 1.670396570e-05f, 1.687924120e-05f,
+1.705447276e-05f, 1.722966007e-05f, 1.740480283e-05f, 1.757990076e-05f, 1.775495354e-05f, 1.792996087e-05f, 1.810492247e-05f, 1.827983803e-05f, 1.845470725e-05f, 1.862952983e-05f,
+1.880430548e-05f, 1.897903389e-05f, 1.915371477e-05f, 1.932834782e-05f, 1.950293275e-05f, 1.967746924e-05f, 1.985195701e-05f, 2.002639576e-05f, 2.020078519e-05f, 2.037512501e-05f,
+2.054941491e-05f, 2.072365459e-05f, 2.089784377e-05f, 2.107198214e-05f, 2.124606941e-05f, 2.142010528e-05f, 2.159408945e-05f, 2.176802163e-05f, 2.194190152e-05f, 2.211572882e-05f,
+2.228950324e-05f, 2.246322448e-05f, 2.263689224e-05f, 2.281050624e-05f, 2.298406617e-05f, 2.315757173e-05f, 2.333102264e-05f, 2.350441860e-05f, 2.367775930e-05f, 2.385104447e-05f,
+2.402427379e-05f, 2.419744698e-05f, 2.437056374e-05f, 2.454362378e-05f, 2.471662680e-05f, 2.488957251e-05f, 2.506246061e-05f, 2.523529080e-05f, 2.540806281e-05f, 2.558077632e-05f,
+2.575343105e-05f, 2.592602671e-05f, 2.609856299e-05f, 2.627103961e-05f, 2.644345627e-05f, 2.661581269e-05f, 2.678810855e-05f, 2.696034359e-05f, 2.713251749e-05f, 2.730462997e-05f,
+2.747668073e-05f, 2.764866949e-05f, 2.782059595e-05f, 2.799245982e-05f, 2.816426080e-05f, 2.833599861e-05f, 2.850767295e-05f, 2.867928353e-05f, 2.885083006e-05f, 2.902231225e-05f,
+2.919372981e-05f, 2.936508244e-05f, 2.953636986e-05f, 2.970759177e-05f, 2.987874788e-05f, 3.004983791e-05f, 3.022086156e-05f, 3.039181854e-05f, 3.056270856e-05f, 3.073353134e-05f,
+3.090428657e-05f, 3.107497398e-05f, 3.124559328e-05f, 3.141614416e-05f, 3.158662635e-05f, 3.175703956e-05f, 3.192738349e-05f, 3.209765785e-05f, 3.226786237e-05f, 3.243799675e-05f,
+3.260806069e-05f, 3.277805392e-05f, 3.294797615e-05f, 3.311782708e-05f, 3.328760643e-05f, 3.345731392e-05f, 3.362694925e-05f, 3.379651213e-05f, 3.396600228e-05f, 3.413541942e-05f,
+3.430476325e-05f, 3.447403349e-05f, 3.464322985e-05f, 3.481235205e-05f, 3.498139980e-05f, 3.515037281e-05f, 3.531927079e-05f, 3.548809347e-05f, 3.565684055e-05f, 3.582551176e-05f,
+3.599410679e-05f, 3.616262538e-05f, 3.633106723e-05f, 3.649943206e-05f, 3.666771958e-05f, 3.683592952e-05f, 3.700406158e-05f, 3.717211548e-05f, 3.734009094e-05f, 3.750798767e-05f,
+3.767580539e-05f, 3.784354381e-05f, 3.801120266e-05f, 3.817878164e-05f, 3.834628048e-05f, 3.851369890e-05f, 3.868103660e-05f, 3.884829331e-05f, 3.901546874e-05f, 3.918256262e-05f,
+3.934957465e-05f, 3.951650457e-05f, 3.968335208e-05f, 3.985011690e-05f, 4.001679875e-05f, 4.018339736e-05f, 4.034991244e-05f, 4.051634371e-05f, 4.068269088e-05f, 4.084895368e-05f,
+4.101513183e-05f, 4.118122505e-05f, 4.134723305e-05f, 4.151315556e-05f, 4.167899230e-05f, 4.184474298e-05f, 4.201040733e-05f, 4.217598507e-05f, 4.234147592e-05f, 4.250687959e-05f,
+4.267219582e-05f, 4.283742433e-05f, 4.300256482e-05f, 4.316761703e-05f, 4.333258068e-05f, 4.349745549e-05f, 4.366224118e-05f, 4.382693748e-05f, 4.399154411e-05f, 4.415606078e-05f,
+4.432048723e-05f, 4.448482317e-05f, 4.464906833e-05f, 4.481322244e-05f, 4.497728521e-05f, 4.514125637e-05f, 4.530513565e-05f, 4.546892277e-05f, 4.563261745e-05f, 4.579621941e-05f,
+4.595972839e-05f, 4.612314411e-05f, 4.628646629e-05f, 4.644969466e-05f, 4.661282894e-05f, 4.677586887e-05f, 4.693881415e-05f, 4.710166453e-05f, 4.726441973e-05f, 4.742707947e-05f,
+4.758964348e-05f, 4.775211149e-05f, 4.791448323e-05f, 4.807675841e-05f, 4.823893678e-05f, 4.840101805e-05f, 4.856300195e-05f, 4.872488822e-05f, 4.888667658e-05f, 4.904836676e-05f,
+4.920995849e-05f, 4.937145149e-05f, 4.953284550e-05f, 4.969414025e-05f, 4.985533545e-05f, 5.001643086e-05f, 5.017742618e-05f, 5.033832116e-05f, 5.049911552e-05f, 5.065980899e-05f,
+5.082040131e-05f, 5.098089220e-05f, 5.114128140e-05f, 5.130156864e-05f, 5.146175364e-05f, 5.162183614e-05f, 5.178181588e-05f, 5.194169257e-05f, 5.210146597e-05f, 5.226113579e-05f,
+5.242070177e-05f, 5.258016364e-05f, 5.273952114e-05f, 5.289877400e-05f, 5.305792195e-05f, 5.321696472e-05f, 5.337590206e-05f, 5.353473368e-05f, 5.369345934e-05f, 5.385207876e-05f,
+5.401059167e-05f, 5.416899782e-05f, 5.432729693e-05f, 5.448548874e-05f, 5.464357299e-05f, 5.480154941e-05f, 5.495941774e-05f, 5.511717771e-05f, 5.527482907e-05f, 5.543237154e-05f,
+5.558980486e-05f, 5.574712878e-05f, 5.590434302e-05f, 5.606144732e-05f, 5.621844143e-05f, 5.637532508e-05f, 5.653209800e-05f, 5.668875994e-05f, 5.684531064e-05f, 5.700174983e-05f,
+5.715807724e-05f, 5.731429263e-05f, 5.747039573e-05f, 5.762638628e-05f, 5.778226402e-05f, 5.793802868e-05f, 5.809368001e-05f, 5.824921776e-05f, 5.840464165e-05f, 5.855995143e-05f,
+5.871514684e-05f, 5.887022763e-05f, 5.902519352e-05f, 5.918004428e-05f, 5.933477963e-05f, 5.948939932e-05f, 5.964390309e-05f, 5.979829068e-05f, 5.995256184e-05f, 6.010671631e-05f,
+6.026075383e-05f, 6.041467415e-05f, 6.056847701e-05f, 6.072216215e-05f, 6.087572932e-05f, 6.102917826e-05f, 6.118250872e-05f, 6.133572044e-05f, 6.148881316e-05f, 6.164178663e-05f,
+6.179464060e-05f, 6.194737482e-05f, 6.209998902e-05f, 6.225248296e-05f, 6.240485637e-05f, 6.255710901e-05f, 6.270924063e-05f, 6.286125097e-05f, 6.301313978e-05f, 6.316490680e-05f,
+6.331655178e-05f, 6.346807448e-05f, 6.361947463e-05f, 6.377075200e-05f, 6.392190632e-05f, 6.407293734e-05f, 6.422384482e-05f, 6.437462851e-05f, 6.452528814e-05f, 6.467582348e-05f,
+6.482623428e-05f, 6.497652028e-05f, 6.512668123e-05f, 6.527671688e-05f, 6.542662700e-05f, 6.557641132e-05f, 6.572606960e-05f, 6.587560159e-05f, 6.602500704e-05f, 6.617428570e-05f,
+6.632343734e-05f, 6.647246169e-05f, 6.662135852e-05f, 6.677012757e-05f, 6.691876860e-05f, 6.706728136e-05f, 6.721566561e-05f, 6.736392110e-05f, 6.751204759e-05f, 6.766004483e-05f,
+6.780791257e-05f, 6.795565057e-05f, 6.810325859e-05f, 6.825073638e-05f, 6.839808369e-05f, 6.854530029e-05f, 6.869238593e-05f, 6.883934036e-05f, 6.898616334e-05f, 6.913285464e-05f,
+6.927941400e-05f, 6.942584119e-05f, 6.957213596e-05f, 6.971829807e-05f, 6.986432728e-05f, 7.001022334e-05f, 7.015598603e-05f, 7.030161509e-05f, 7.044711028e-05f, 7.059247137e-05f,
+7.073769811e-05f, 7.088279026e-05f, 7.102774759e-05f, 7.117256986e-05f, 7.131725682e-05f, 7.146180824e-05f, 7.160622388e-05f, 7.175050350e-05f, 7.189464686e-05f, 7.203865372e-05f,
+7.218252385e-05f, 7.232625701e-05f, 7.246985297e-05f, 7.261331147e-05f, 7.275663230e-05f, 7.289981521e-05f, 7.304285996e-05f, 7.318576633e-05f, 7.332853407e-05f, 7.347116295e-05f,
+7.361365274e-05f, 7.375600319e-05f, 7.389821408e-05f, 7.404028517e-05f, 7.418221623e-05f, 7.432400703e-05f, 7.446565732e-05f, 7.460716688e-05f, 7.474853547e-05f, 7.488976286e-05f,
+7.503084883e-05f, 7.517179313e-05f, 7.531259553e-05f, 7.545325581e-05f, 7.559377373e-05f, 7.573414906e-05f, 7.587438157e-05f, 7.601447103e-05f, 7.615441721e-05f, 7.629421987e-05f,
+7.643387880e-05f, 7.657339376e-05f, 7.671276451e-05f, 7.685199084e-05f, 7.699107252e-05f, 7.713000930e-05f, 7.726880098e-05f, 7.740744731e-05f, 7.754594807e-05f, 7.768430304e-05f,
+7.782251198e-05f, 7.796057468e-05f, 7.809849089e-05f, 7.823626041e-05f, 7.837388299e-05f, 7.851135842e-05f, 7.864868647e-05f, 7.878586692e-05f, 7.892289954e-05f, 7.905978410e-05f,
+7.919652038e-05f, 7.933310816e-05f, 7.946954721e-05f, 7.960583732e-05f, 7.974197825e-05f, 7.987796978e-05f, 8.001381170e-05f, 8.014950377e-05f, 8.028504578e-05f, 8.042043751e-05f,
+8.055567873e-05f, 8.069076922e-05f, 8.082570876e-05f, 8.096049713e-05f, 8.109513412e-05f, 8.122961949e-05f, 8.136395303e-05f, 8.149813453e-05f, 8.163216375e-05f, 8.176604049e-05f,
+8.189976451e-05f, 8.203333562e-05f, 8.216675358e-05f, 8.230001818e-05f, 8.243312920e-05f, 8.256608643e-05f, 8.269888964e-05f, 8.283153862e-05f, 8.296403316e-05f, 8.309637303e-05f,
+8.322855802e-05f, 8.336058793e-05f, 8.349246252e-05f, 8.362418159e-05f, 8.375574491e-05f, 8.388715229e-05f, 8.401840350e-05f, 8.414949832e-05f, 8.428043655e-05f, 8.441121797e-05f,
+8.454184237e-05f, 8.467230954e-05f, 8.480261926e-05f, 8.493277132e-05f, 8.506276551e-05f, 8.519260162e-05f, 8.532227944e-05f, 8.545179875e-05f, 8.558115934e-05f, 8.571036101e-05f,
+8.583940354e-05f, 8.596828673e-05f, 8.609701037e-05f, 8.622557424e-05f, 8.635397813e-05f, 8.648222185e-05f, 8.661030517e-05f, 8.673822790e-05f, 8.686598982e-05f, 8.699359073e-05f,
+8.712103042e-05f, 8.724830868e-05f, 8.737542530e-05f, 8.750238009e-05f, 8.762917283e-05f, 8.775580332e-05f, 8.788227135e-05f, 8.800857672e-05f, 8.813471922e-05f, 8.826069865e-05f,
+8.838651481e-05f, 8.851216748e-05f, 8.863765648e-05f, 8.876298158e-05f, 8.888814260e-05f, 8.901313933e-05f, 8.913797156e-05f, 8.926263909e-05f, 8.938714173e-05f, 8.951147927e-05f,
+8.963565150e-05f, 8.975965824e-05f, 8.988349927e-05f, 9.000717440e-05f, 9.013068343e-05f, 9.025402615e-05f, 9.037720238e-05f, 9.050021190e-05f, 9.062305452e-05f, 9.074573005e-05f,
+9.086823828e-05f, 9.099057902e-05f, 9.111275207e-05f, 9.123475723e-05f, 9.135659430e-05f, 9.147826309e-05f, 9.159976341e-05f, 9.172109505e-05f, 9.184225782e-05f, 9.196325152e-05f,
+9.208407597e-05f, 9.220473096e-05f, 9.232521630e-05f, 9.244553180e-05f, 9.256567726e-05f, 9.268565250e-05f, 9.280545730e-05f, 9.292509149e-05f, 9.304455488e-05f, 9.316384726e-05f,
+9.328296845e-05f, 9.340191825e-05f, 9.352069648e-05f, 9.363930293e-05f, 9.375773744e-05f, 9.387599979e-05f, 9.399408980e-05f, 9.411200729e-05f, 9.422975206e-05f, 9.434732392e-05f,
+9.446472269e-05f, 9.458194818e-05f, 9.469900019e-05f, 9.481587854e-05f, 9.493258304e-05f, 9.504911351e-05f, 9.516546976e-05f, 9.528165160e-05f, 9.539765885e-05f, 9.551349132e-05f,
+9.562914882e-05f, 9.574463117e-05f, 9.585993818e-05f, 9.597506967e-05f, 9.609002546e-05f, 9.620480535e-05f, 9.631940918e-05f, 9.643383675e-05f, 9.654808788e-05f, 9.666216238e-05f,
+9.677606008e-05f, 9.688978080e-05f, 9.700332435e-05f, 9.711669054e-05f, 9.722987921e-05f, 9.734289016e-05f, 9.745572322e-05f, 9.756837821e-05f, 9.768085495e-05f, 9.779315326e-05f,
+9.790527295e-05f, 9.801721385e-05f, 9.812897579e-05f, 9.824055858e-05f, 9.835196204e-05f, 9.846318600e-05f, 9.857423028e-05f, 9.868509471e-05f, 9.879577910e-05f, 9.890628328e-05f,
+9.901660708e-05f, 9.912675032e-05f, 9.923671282e-05f, 9.934649440e-05f, 9.945609491e-05f, 9.956551415e-05f, 9.967475196e-05f, 9.978380816e-05f, 9.989268258e-05f, 1.000013750e-04f,
+1.001098854e-04f, 1.002182134e-04f, 1.003263590e-04f, 1.004343219e-04f, 1.005421020e-04f, 1.006496992e-04f, 1.007571131e-04f, 1.008643438e-04f, 1.009713909e-04f, 1.010782544e-04f,
+1.011849341e-04f, 1.012914297e-04f, 1.013977412e-04f, 1.015038683e-04f, 1.016098109e-04f, 1.017155689e-04f, 1.018211420e-04f, 1.019265301e-04f, 1.020317330e-04f, 1.021367505e-04f,
+1.022415826e-04f, 1.023462290e-04f, 1.024506895e-04f, 1.025549640e-04f, 1.026590524e-04f, 1.027629544e-04f, 1.028666700e-04f, 1.029701988e-04f, 1.030735409e-04f, 1.031766959e-04f,
+1.032796638e-04f, 1.033824444e-04f, 1.034850375e-04f, 1.035874429e-04f, 1.036896606e-04f, 1.037916903e-04f, 1.038935319e-04f, 1.039951852e-04f, 1.040966501e-04f, 1.041979263e-04f,
+1.042990138e-04f, 1.043999124e-04f, 1.045006219e-04f, 1.046011422e-04f, 1.047014731e-04f, 1.048016144e-04f, 1.049015660e-04f, 1.050013278e-04f, 1.051008995e-04f, 1.052002810e-04f,
+1.052994723e-04f, 1.053984730e-04f, 1.054972831e-04f, 1.055959023e-04f, 1.056943307e-04f, 1.057925679e-04f, 1.058906138e-04f, 1.059884684e-04f, 1.060861314e-04f, 1.061836026e-04f,
+1.062808820e-04f, 1.063779694e-04f, 1.064748645e-04f, 1.065715674e-04f, 1.066680777e-04f, 1.067643955e-04f, 1.068605204e-04f, 1.069564525e-04f, 1.070521914e-04f, 1.071477371e-04f,
+1.072430895e-04f, 1.073382483e-04f, 1.074332134e-04f, 1.075279847e-04f, 1.076225620e-04f, 1.077169453e-04f, 1.078111342e-04f, 1.079051287e-04f, 1.079989287e-04f, 1.080925340e-04f,
+1.081859444e-04f, 1.082791599e-04f, 1.083721802e-04f, 1.084650052e-04f, 1.085576348e-04f, 1.086500688e-04f, 1.087423071e-04f, 1.088343495e-04f, 1.089261960e-04f, 1.090178462e-04f,
+1.091093003e-04f, 1.092005578e-04f, 1.092916189e-04f, 1.093824832e-04f, 1.094731506e-04f, 1.095636211e-04f, 1.096538944e-04f, 1.097439705e-04f, 1.098338492e-04f, 1.099235303e-04f,
+1.100130137e-04f, 1.101022993e-04f, 1.101913870e-04f, 1.102802765e-04f, 1.103689678e-04f, 1.104574608e-04f, 1.105457552e-04f, 1.106338510e-04f, 1.107217480e-04f, 1.108094461e-04f,
+1.108969451e-04f, 1.109842450e-04f, 1.110713455e-04f, 1.111582466e-04f, 1.112449481e-04f, 1.113314499e-04f, 1.114177518e-04f, 1.115038538e-04f, 1.115897556e-04f, 1.116754572e-04f,
+1.117609584e-04f, 1.118462590e-04f, 1.119313591e-04f, 1.120162584e-04f, 1.121009567e-04f, 1.121854541e-04f, 1.122697503e-04f, 1.123538452e-04f, 1.124377386e-04f, 1.125214306e-04f,
+1.126049208e-04f, 1.126882093e-04f, 1.127712958e-04f, 1.128541803e-04f, 1.129368626e-04f, 1.130193425e-04f, 1.131016201e-04f, 1.131836951e-04f, 1.132655674e-04f, 1.133472369e-04f,
+1.134287035e-04f, 1.135099670e-04f, 1.135910274e-04f, 1.136718844e-04f, 1.137525380e-04f, 1.138329881e-04f, 1.139132345e-04f, 1.139932771e-04f, 1.140731158e-04f, 1.141527505e-04f,
+1.142321810e-04f, 1.143114073e-04f, 1.143904291e-04f, 1.144692465e-04f, 1.145478592e-04f, 1.146262671e-04f, 1.147044702e-04f, 1.147824683e-04f, 1.148602613e-04f, 1.149378491e-04f,
+1.150152316e-04f, 1.150924086e-04f, 1.151693800e-04f, 1.152461457e-04f, 1.153227057e-04f, 1.153990597e-04f, 1.154752077e-04f, 1.155511495e-04f, 1.156268851e-04f, 1.157024143e-04f,
+1.157777370e-04f, 1.158528531e-04f, 1.159277626e-04f, 1.160024652e-04f, 1.160769608e-04f, 1.161512494e-04f, 1.162253309e-04f, 1.162992050e-04f, 1.163728718e-04f, 1.164463312e-04f,
+1.165195829e-04f, 1.165926269e-04f, 1.166654631e-04f, 1.167380914e-04f, 1.168105116e-04f, 1.168827237e-04f, 1.169547275e-04f, 1.170265230e-04f, 1.170981101e-04f, 1.171694885e-04f,
+1.172406583e-04f, 1.173116193e-04f, 1.173823715e-04f, 1.174529146e-04f, 1.175232487e-04f, 1.175933735e-04f, 1.176632891e-04f, 1.177329952e-04f, 1.178024919e-04f, 1.178717789e-04f,
+1.179408562e-04f, 1.180097237e-04f, 1.180783813e-04f, 1.181468289e-04f, 1.182150664e-04f, 1.182830936e-04f, 1.183509105e-04f, 1.184185171e-04f, 1.184859131e-04f, 1.185530984e-04f,
+1.186200731e-04f, 1.186868370e-04f, 1.187533899e-04f, 1.188197319e-04f, 1.188858627e-04f, 1.189517824e-04f, 1.190174907e-04f, 1.190829877e-04f, 1.191482732e-04f, 1.192133471e-04f,
+1.192782093e-04f, 1.193428598e-04f, 1.194072984e-04f, 1.194715250e-04f, 1.195355396e-04f, 1.195993420e-04f, 1.196629322e-04f, 1.197263101e-04f, 1.197894755e-04f, 1.198524285e-04f,
+1.199151688e-04f, 1.199776965e-04f, 1.200400113e-04f, 1.201021133e-04f, 1.201640024e-04f, 1.202256784e-04f, 1.202871412e-04f, 1.203483908e-04f, 1.204094271e-04f, 1.204702500e-04f,
+1.205308594e-04f, 1.205912552e-04f, 1.206514374e-04f, 1.207114058e-04f, 1.207711604e-04f, 1.208307010e-04f, 1.208900277e-04f, 1.209491403e-04f, 1.210080386e-04f, 1.210667228e-04f,
+1.211251926e-04f, 1.211834479e-04f, 1.212414888e-04f, 1.212993151e-04f, 1.213569267e-04f, 1.214143235e-04f, 1.214715055e-04f, 1.215284726e-04f, 1.215852247e-04f, 1.216417617e-04f,
+1.216980836e-04f, 1.217541902e-04f, 1.218100816e-04f, 1.218657575e-04f, 1.219212180e-04f, 1.219764629e-04f, 1.220314922e-04f, 1.220863058e-04f, 1.221409036e-04f, 1.221952855e-04f,
+1.222494516e-04f, 1.223034016e-04f, 1.223571355e-04f, 1.224106533e-04f, 1.224639549e-04f, 1.225170401e-04f, 1.225699090e-04f, 1.226225614e-04f, 1.226749974e-04f, 1.227272167e-04f,
+1.227792193e-04f, 1.228310052e-04f, 1.228825743e-04f, 1.229339265e-04f, 1.229850618e-04f, 1.230359800e-04f, 1.230866812e-04f, 1.231371652e-04f, 1.231874320e-04f, 1.232374814e-04f,
+1.232873135e-04f, 1.233369282e-04f, 1.233863253e-04f, 1.234355049e-04f, 1.234844669e-04f, 1.235332112e-04f, 1.235817377e-04f, 1.236300463e-04f, 1.236781371e-04f, 1.237260099e-04f,
+1.237736646e-04f, 1.238211013e-04f, 1.238683198e-04f, 1.239153202e-04f, 1.239621022e-04f, 1.240086659e-04f, 1.240550111e-04f, 1.241011380e-04f, 1.241470462e-04f, 1.241927359e-04f,
+1.242382070e-04f, 1.242834593e-04f, 1.243284929e-04f, 1.243733076e-04f, 1.244179035e-04f, 1.244622804e-04f, 1.245064382e-04f, 1.245503771e-04f, 1.245940968e-04f, 1.246375973e-04f,
+1.246808786e-04f, 1.247239406e-04f, 1.247667833e-04f, 1.248094066e-04f, 1.248518104e-04f, 1.248939947e-04f, 1.249359594e-04f, 1.249777045e-04f, 1.250192299e-04f, 1.250605356e-04f,
+1.251016216e-04f, 1.251424877e-04f, 1.251831339e-04f, 1.252235601e-04f, 1.252637664e-04f, 1.253037527e-04f, 1.253435188e-04f, 1.253830649e-04f, 1.254223907e-04f, 1.254614963e-04f,
+1.255003816e-04f, 1.255390465e-04f, 1.255774911e-04f, 1.256157153e-04f, 1.256537190e-04f, 1.256915021e-04f, 1.257290647e-04f, 1.257664066e-04f, 1.258035279e-04f, 1.258404285e-04f,
+1.258771083e-04f, 1.259135673e-04f, 1.259498055e-04f, 1.259858228e-04f, 1.260216191e-04f, 1.260571945e-04f, 1.260925489e-04f, 1.261276822e-04f, 1.261625944e-04f, 1.261972854e-04f,
+1.262317553e-04f, 1.262660039e-04f, 1.263000313e-04f, 1.263338373e-04f, 1.263674220e-04f, 1.264007853e-04f, 1.264339272e-04f, 1.264668477e-04f, 1.264995466e-04f, 1.265320240e-04f,
+1.265642798e-04f, 1.265963140e-04f, 1.266281265e-04f, 1.266597174e-04f, 1.266910865e-04f, 1.267222339e-04f, 1.267531594e-04f, 1.267838632e-04f, 1.268143451e-04f, 1.268446051e-04f,
+1.268746431e-04f, 1.269044592e-04f, 1.269340533e-04f, 1.269634254e-04f, 1.269925754e-04f, 1.270215033e-04f, 1.270502090e-04f, 1.270786927e-04f, 1.271069541e-04f, 1.271349933e-04f,
+1.271628103e-04f, 1.271904050e-04f, 1.272177774e-04f, 1.272449275e-04f, 1.272718552e-04f, 1.272985605e-04f, 1.273250434e-04f, 1.273513039e-04f, 1.273773419e-04f, 1.274031574e-04f,
+1.274287504e-04f, 1.274541208e-04f, 1.274792686e-04f, 1.275041939e-04f, 1.275288965e-04f, 1.275533765e-04f, 1.275776339e-04f, 1.276016685e-04f, 1.276254804e-04f, 1.276490696e-04f,
+1.276724361e-04f, 1.276955797e-04f, 1.277185006e-04f, 1.277411986e-04f, 1.277636738e-04f, 1.277859261e-04f, 1.278079555e-04f, 1.278297621e-04f, 1.278513457e-04f, 1.278727064e-04f,
+1.278938441e-04f, 1.279147589e-04f, 1.279354506e-04f, 1.279559194e-04f, 1.279761651e-04f, 1.279961878e-04f, 1.280159875e-04f, 1.280355640e-04f, 1.280549175e-04f, 1.280740479e-04f,
+1.280929551e-04f, 1.281116393e-04f, 1.281301002e-04f, 1.281483381e-04f, 1.281663527e-04f, 1.281841442e-04f, 1.282017125e-04f, 1.282190576e-04f, 1.282361795e-04f, 1.282530781e-04f,
+1.282697535e-04f, 1.282862057e-04f, 1.283024346e-04f, 1.283184402e-04f, 1.283342226e-04f, 1.283497817e-04f, 1.283651175e-04f, 1.283802300e-04f, 1.283951191e-04f, 1.284097850e-04f,
+1.284242276e-04f, 1.284384468e-04f, 1.284524427e-04f, 1.284662153e-04f, 1.284797645e-04f, 1.284930904e-04f, 1.285061930e-04f, 1.285190722e-04f, 1.285317280e-04f, 1.285441605e-04f,
+1.285563696e-04f, 1.285683553e-04f, 1.285801177e-04f, 1.285916567e-04f, 1.286029723e-04f, 1.286140646e-04f, 1.286249335e-04f, 1.286355791e-04f, 1.286460012e-04f, 1.286562001e-04f,
+1.286661755e-04f, 1.286759276e-04f, 1.286854563e-04f, 1.286947616e-04f, 1.287038436e-04f, 1.287127023e-04f, 1.287213375e-04f, 1.287297495e-04f, 1.287379381e-04f, 1.287459034e-04f,
+1.287536453e-04f, 1.287611639e-04f, 1.287684592e-04f, 1.287755312e-04f, 1.287823798e-04f, 1.287890052e-04f, 1.287954072e-04f, 1.288015860e-04f, 1.288075415e-04f, 1.288132738e-04f,
+1.288187828e-04f, 1.288240685e-04f, 1.288291310e-04f, 1.288339702e-04f, 1.288385863e-04f, 1.288429791e-04f, 1.288471487e-04f, 1.288510952e-04f, 1.288548185e-04f, 1.288583186e-04f,
+1.288615956e-04f, 1.288646494e-04f, 1.288674801e-04f, 1.288700877e-04f, 1.288724722e-04f, 1.288746336e-04f, 1.288765720e-04f, 1.288782873e-04f, 1.288797796e-04f, 1.288810489e-04f,
+1.288820952e-04f, 1.288829185e-04f, 1.288835188e-04f, 1.288838962e-04f, 1.288840506e-04f, 1.288839822e-04f, 1.288836908e-04f, 1.288831766e-04f, 1.288824396e-04f, 1.288814797e-04f,
+1.288802970e-04f, 1.288788915e-04f, 1.288772632e-04f, 1.288754122e-04f, 1.288733385e-04f, 1.288710420e-04f, 1.288685229e-04f, 1.288657812e-04f, 1.288628168e-04f, 1.288596298e-04f,
+1.288562202e-04f, 1.288525880e-04f, 1.288487333e-04f, 1.288446561e-04f, 1.288403565e-04f, 1.288358343e-04f, 1.288310898e-04f, 1.288261228e-04f, 1.288209335e-04f, 1.288155218e-04f,
+1.288098878e-04f, 1.288040315e-04f, 1.287979529e-04f, 1.287916521e-04f, 1.287851291e-04f, 1.287783840e-04f, 1.287714167e-04f, 1.287642273e-04f, 1.287568158e-04f, 1.287491822e-04f,
+1.287413267e-04f, 1.287332491e-04f, 1.287249496e-04f, 1.287164282e-04f, 1.287076849e-04f, 1.286987198e-04f, 1.286895328e-04f, 1.286801241e-04f, 1.286704936e-04f, 1.286606414e-04f,
+1.286505675e-04f, 1.286402720e-04f, 1.286297549e-04f, 1.286190162e-04f, 1.286080560e-04f, 1.285968744e-04f, 1.285854712e-04f, 1.285738467e-04f, 1.285620007e-04f, 1.285499335e-04f,
+1.285376449e-04f, 1.285251351e-04f, 1.285124041e-04f, 1.284994519e-04f, 1.284862785e-04f, 1.284728841e-04f, 1.284592686e-04f, 1.284454321e-04f, 1.284313747e-04f, 1.284170963e-04f,
+1.284025971e-04f, 1.283878770e-04f, 1.283729361e-04f, 1.283577745e-04f, 1.283423922e-04f, 1.283267892e-04f, 1.283109656e-04f, 1.282949215e-04f, 1.282786568e-04f, 1.282621717e-04f,
+1.282454661e-04f, 1.282285402e-04f, 1.282113939e-04f, 1.281940274e-04f, 1.281764406e-04f, 1.281586337e-04f, 1.281406066e-04f, 1.281223594e-04f, 1.281038922e-04f, 1.280852051e-04f,
+1.280662980e-04f, 1.280471710e-04f, 1.280278242e-04f, 1.280082576e-04f, 1.279884713e-04f, 1.279684653e-04f, 1.279482397e-04f, 1.279277945e-04f, 1.279071299e-04f, 1.278862458e-04f,
+1.278651423e-04f, 1.278438194e-04f, 1.278222772e-04f, 1.278005159e-04f, 1.277785353e-04f, 1.277563356e-04f, 1.277339169e-04f, 1.277112791e-04f, 1.276884224e-04f, 1.276653468e-04f,
+1.276420524e-04f, 1.276185392e-04f, 1.275948073e-04f, 1.275708568e-04f, 1.275466876e-04f, 1.275222999e-04f, 1.274976938e-04f, 1.274728692e-04f, 1.274478263e-04f, 1.274225651e-04f,
+1.273970856e-04f, 1.273713880e-04f, 1.273454723e-04f, 1.273193386e-04f, 1.272929869e-04f, 1.272664173e-04f, 1.272396298e-04f, 1.272126246e-04f, 1.271854016e-04f, 1.271579610e-04f,
+1.271303028e-04f, 1.271024271e-04f, 1.270743339e-04f, 1.270460234e-04f, 1.270174955e-04f, 1.269887504e-04f, 1.269597881e-04f, 1.269306087e-04f, 1.269012123e-04f, 1.268715989e-04f,
+1.268417685e-04f, 1.268117214e-04f, 1.267814575e-04f, 1.267509769e-04f, 1.267202796e-04f, 1.266893658e-04f, 1.266582356e-04f, 1.266268889e-04f, 1.265953259e-04f, 1.265635467e-04f,
+1.265315512e-04f, 1.264993397e-04f, 1.264669120e-04f, 1.264342685e-04f, 1.264014090e-04f, 1.263683338e-04f, 1.263350427e-04f, 1.263015361e-04f, 1.262678138e-04f, 1.262338760e-04f,
+1.261997228e-04f, 1.261653543e-04f, 1.261307704e-04f, 1.260959714e-04f, 1.260609572e-04f, 1.260257280e-04f, 1.259902838e-04f, 1.259546248e-04f, 1.259187509e-04f, 1.258826623e-04f,
+1.258463591e-04f, 1.258098413e-04f, 1.257731091e-04f, 1.257361624e-04f, 1.256990014e-04f, 1.256616262e-04f, 1.256240368e-04f, 1.255862333e-04f, 1.255482159e-04f, 1.255099846e-04f,
+1.254715394e-04f, 1.254328805e-04f, 1.253940080e-04f, 1.253549219e-04f, 1.253156224e-04f, 1.252761094e-04f, 1.252363831e-04f, 1.251964437e-04f, 1.251562910e-04f, 1.251159254e-04f,
+1.250753468e-04f, 1.250345553e-04f, 1.249935511e-04f, 1.249523341e-04f, 1.249109046e-04f, 1.248692625e-04f, 1.248274081e-04f, 1.247853413e-04f, 1.247430622e-04f, 1.247005711e-04f,
+1.246578678e-04f, 1.246149526e-04f, 1.245718256e-04f, 1.245284867e-04f, 1.244849362e-04f, 1.244411740e-04f, 1.243972004e-04f, 1.243530154e-04f, 1.243086190e-04f, 1.242640115e-04f,
+1.242191928e-04f, 1.241741631e-04f, 1.241289225e-04f, 1.240834710e-04f, 1.240378088e-04f, 1.239919359e-04f, 1.239458526e-04f, 1.238995587e-04f, 1.238530545e-04f, 1.238063401e-04f,
+1.237594155e-04f, 1.237122809e-04f, 1.236649363e-04f, 1.236173819e-04f, 1.235696177e-04f, 1.235216439e-04f, 1.234734605e-04f, 1.234250677e-04f, 1.233764655e-04f, 1.233276540e-04f,
+1.232786335e-04f, 1.232294039e-04f, 1.231799653e-04f, 1.231303179e-04f, 1.230804618e-04f, 1.230303970e-04f, 1.229801238e-04f, 1.229296421e-04f, 1.228789521e-04f, 1.228280539e-04f,
+1.227769475e-04f, 1.227256332e-04f, 1.226741110e-04f, 1.226223810e-04f, 1.225704434e-04f, 1.225182981e-04f, 1.224659455e-04f, 1.224133854e-04f, 1.223606181e-04f, 1.223076437e-04f,
+1.222544622e-04f, 1.222010739e-04f, 1.221474787e-04f, 1.220936768e-04f, 1.220396684e-04f, 1.219854535e-04f, 1.219310322e-04f, 1.218764046e-04f, 1.218215709e-04f, 1.217665312e-04f,
+1.217112856e-04f, 1.216558342e-04f, 1.216001770e-04f, 1.215443143e-04f, 1.214882462e-04f, 1.214319727e-04f, 1.213754940e-04f, 1.213188101e-04f, 1.212619213e-04f, 1.212048275e-04f,
+1.211475290e-04f, 1.210900259e-04f, 1.210323182e-04f, 1.209744061e-04f, 1.209162897e-04f, 1.208579691e-04f, 1.207994445e-04f, 1.207407159e-04f, 1.206817834e-04f, 1.206226473e-04f,
+1.205633076e-04f, 1.205037644e-04f, 1.204440179e-04f, 1.203840681e-04f, 1.203239152e-04f, 1.202635594e-04f, 1.202030007e-04f, 1.201422392e-04f, 1.200812751e-04f, 1.200201085e-04f,
+1.199587396e-04f, 1.198971684e-04f, 1.198353951e-04f, 1.197734198e-04f, 1.197112425e-04f, 1.196488636e-04f, 1.195862830e-04f, 1.195235009e-04f, 1.194605175e-04f, 1.193973327e-04f,
+1.193339469e-04f, 1.192703601e-04f, 1.192065724e-04f, 1.191425839e-04f, 1.190783948e-04f, 1.190140053e-04f, 1.189494154e-04f, 1.188846252e-04f, 1.188196350e-04f, 1.187544448e-04f,
+1.186890547e-04f, 1.186234649e-04f, 1.185576756e-04f, 1.184916868e-04f, 1.184254986e-04f, 1.183591113e-04f, 1.182925250e-04f, 1.182257397e-04f, 1.181587556e-04f, 1.180915728e-04f,
+1.180241916e-04f, 1.179566119e-04f, 1.178888340e-04f, 1.178208579e-04f, 1.177526839e-04f, 1.176843120e-04f, 1.176157424e-04f, 1.175469752e-04f, 1.174780106e-04f, 1.174088486e-04f,
+1.173394895e-04f, 1.172699333e-04f, 1.172001802e-04f, 1.171302304e-04f, 1.170600839e-04f, 1.169897409e-04f, 1.169192016e-04f, 1.168484661e-04f, 1.167775345e-04f, 1.167064069e-04f,
+1.166350836e-04f, 1.165635646e-04f, 1.164918501e-04f, 1.164199402e-04f, 1.163478351e-04f, 1.162755349e-04f, 1.162030398e-04f, 1.161303498e-04f, 1.160574652e-04f, 1.159843861e-04f,
+1.159111125e-04f, 1.158376448e-04f, 1.157639829e-04f, 1.156901271e-04f, 1.156160775e-04f, 1.155418342e-04f, 1.154673974e-04f, 1.153927673e-04f, 1.153179439e-04f, 1.152429275e-04f,
+1.151677181e-04f, 1.150923159e-04f, 1.150167211e-04f, 1.149409338e-04f, 1.148649541e-04f, 1.147887823e-04f, 1.147124184e-04f, 1.146358626e-04f, 1.145591150e-04f, 1.144821758e-04f,
+1.144050452e-04f, 1.143277233e-04f, 1.142502103e-04f, 1.141725062e-04f, 1.140946113e-04f, 1.140165257e-04f, 1.139382495e-04f, 1.138597829e-04f, 1.137811261e-04f, 1.137022792e-04f,
+1.136232423e-04f, 1.135440157e-04f, 1.134645994e-04f, 1.133849936e-04f, 1.133051986e-04f, 1.132252143e-04f, 1.131450410e-04f, 1.130646788e-04f, 1.129841280e-04f, 1.129033886e-04f,
+1.128224608e-04f, 1.127413447e-04f, 1.126600406e-04f, 1.125785485e-04f, 1.124968686e-04f, 1.124150012e-04f, 1.123329462e-04f, 1.122507040e-04f, 1.121682747e-04f, 1.120856583e-04f,
+1.120028551e-04f, 1.119198653e-04f, 1.118366889e-04f, 1.117533263e-04f, 1.116697774e-04f, 1.115860425e-04f, 1.115021217e-04f, 1.114180152e-04f, 1.113337232e-04f, 1.112492458e-04f,
+1.111645832e-04f, 1.110797355e-04f, 1.109947029e-04f, 1.109094856e-04f, 1.108240837e-04f, 1.107384975e-04f, 1.106527269e-04f, 1.105667723e-04f, 1.104806338e-04f, 1.103943115e-04f,
+1.103078057e-04f, 1.102211164e-04f, 1.101342439e-04f, 1.100471883e-04f, 1.099599498e-04f, 1.098725285e-04f, 1.097849246e-04f, 1.096971383e-04f, 1.096091698e-04f, 1.095210191e-04f,
+1.094326866e-04f, 1.093441723e-04f, 1.092554764e-04f, 1.091665991e-04f, 1.090775406e-04f, 1.089883009e-04f, 1.088988804e-04f, 1.088092792e-04f, 1.087194974e-04f, 1.086295352e-04f,
+1.085393927e-04f, 1.084490703e-04f, 1.083585679e-04f, 1.082678858e-04f, 1.081770242e-04f, 1.080859833e-04f, 1.079947631e-04f, 1.079033640e-04f, 1.078117859e-04f, 1.077200293e-04f,
+1.076280941e-04f, 1.075359806e-04f, 1.074436889e-04f, 1.073512193e-04f, 1.072585719e-04f, 1.071657469e-04f, 1.070727444e-04f, 1.069795646e-04f, 1.068862078e-04f, 1.067926740e-04f,
+1.066989635e-04f, 1.066050765e-04f, 1.065110130e-04f, 1.064167733e-04f, 1.063223576e-04f, 1.062277661e-04f, 1.061329989e-04f, 1.060380562e-04f, 1.059429381e-04f, 1.058476450e-04f,
+1.057521769e-04f, 1.056565340e-04f, 1.055607165e-04f, 1.054647246e-04f, 1.053685584e-04f, 1.052722182e-04f, 1.051757042e-04f, 1.050790164e-04f, 1.049821552e-04f, 1.048851206e-04f,
+1.047879128e-04f, 1.046905321e-04f, 1.045929787e-04f, 1.044952526e-04f, 1.043973541e-04f, 1.042992834e-04f, 1.042010407e-04f, 1.041026261e-04f, 1.040040398e-04f, 1.039052821e-04f,
+1.038063530e-04f, 1.037072529e-04f, 1.036079818e-04f, 1.035085399e-04f, 1.034089275e-04f, 1.033091448e-04f, 1.032091918e-04f, 1.031090689e-04f, 1.030087761e-04f, 1.029083137e-04f,
+1.028076819e-04f, 1.027068809e-04f, 1.026059108e-04f, 1.025047718e-04f, 1.024034642e-04f, 1.023019880e-04f, 1.022003436e-04f, 1.020985311e-04f, 1.019965506e-04f, 1.018944024e-04f,
+1.017920867e-04f, 1.016896037e-04f, 1.015869535e-04f, 1.014841363e-04f, 1.013811524e-04f, 1.012780019e-04f, 1.011746850e-04f, 1.010712019e-04f, 1.009675528e-04f, 1.008637379e-04f,
+1.007597575e-04f, 1.006556115e-04f, 1.005513004e-04f, 1.004468243e-04f, 1.003421833e-04f, 1.002373777e-04f, 1.001324076e-04f, 1.000272733e-04f, 9.992197493e-05f, 9.981651272e-05f,
+9.971088685e-05f, 9.960509752e-05f, 9.949914492e-05f, 9.939302926e-05f, 9.928675072e-05f, 9.918030952e-05f, 9.907370584e-05f, 9.896693989e-05f, 9.886001186e-05f, 9.875292195e-05f,
+9.864567036e-05f, 9.853825729e-05f, 9.843068294e-05f, 9.832294751e-05f, 9.821505120e-05f, 9.810699421e-05f, 9.799877674e-05f, 9.789039899e-05f, 9.778186116e-05f, 9.767316346e-05f,
+9.756430608e-05f, 9.745528923e-05f, 9.734611311e-05f, 9.723677792e-05f, 9.712728387e-05f, 9.701763115e-05f, 9.690781998e-05f, 9.679785054e-05f, 9.668772306e-05f, 9.657743773e-05f,
+9.646699475e-05f, 9.635639434e-05f, 9.624563669e-05f, 9.613472201e-05f, 9.602365050e-05f, 9.591242238e-05f, 9.580103784e-05f, 9.568949709e-05f, 9.557780035e-05f, 9.546594781e-05f,
+9.535393968e-05f, 9.524177617e-05f, 9.512945749e-05f, 9.501698384e-05f, 9.490435543e-05f, 9.479157248e-05f, 9.467863518e-05f, 9.456554374e-05f, 9.445229839e-05f, 9.433889931e-05f,
+9.422534673e-05f, 9.411164086e-05f, 9.399778189e-05f, 9.388377005e-05f, 9.376960554e-05f, 9.365528858e-05f, 9.354081937e-05f, 9.342619812e-05f, 9.331142505e-05f, 9.319650037e-05f,
+9.308142429e-05f, 9.296619702e-05f, 9.285081878e-05f, 9.273528977e-05f, 9.261961021e-05f, 9.250378031e-05f, 9.238780028e-05f, 9.227167035e-05f, 9.215539072e-05f, 9.203896160e-05f,
+9.192238321e-05f, 9.180565577e-05f, 9.168877948e-05f, 9.157175458e-05f, 9.145458126e-05f, 9.133725974e-05f, 9.121979024e-05f, 9.110217298e-05f, 9.098440817e-05f, 9.086649603e-05f,
+9.074843678e-05f, 9.063023062e-05f, 9.051187779e-05f, 9.039337849e-05f, 9.027473294e-05f, 9.015594137e-05f, 9.003700398e-05f, 8.991792100e-05f, 8.979869264e-05f, 8.967931913e-05f,
+8.955980068e-05f, 8.944013752e-05f, 8.932032985e-05f, 8.920037791e-05f, 8.908028190e-05f, 8.896004206e-05f, 8.883965860e-05f, 8.871913174e-05f, 8.859846170e-05f, 8.847764870e-05f,
+8.835669297e-05f, 8.823559472e-05f, 8.811435418e-05f, 8.799297157e-05f, 8.787144711e-05f, 8.774978103e-05f, 8.762797354e-05f, 8.750602487e-05f, 8.738393524e-05f, 8.726170487e-05f,
+8.713933400e-05f, 8.701682283e-05f, 8.689417161e-05f, 8.677138054e-05f, 8.664844985e-05f, 8.652537978e-05f, 8.640217054e-05f, 8.627882235e-05f, 8.615533546e-05f, 8.603171007e-05f,
+8.590794641e-05f, 8.578404472e-05f, 8.566000521e-05f, 8.553582812e-05f, 8.541151366e-05f, 8.528706208e-05f, 8.516247358e-05f, 8.503774841e-05f, 8.491288678e-05f, 8.478788893e-05f,
+8.466275509e-05f, 8.453748547e-05f, 8.441208032e-05f, 8.428653985e-05f, 8.416086430e-05f, 8.403505390e-05f, 8.390910887e-05f, 8.378302945e-05f, 8.365681586e-05f, 8.353046833e-05f,
+8.340398710e-05f, 8.327737239e-05f, 8.315062444e-05f, 8.302374347e-05f, 8.289672972e-05f, 8.276958341e-05f, 8.264230478e-05f, 8.251489407e-05f, 8.238735149e-05f, 8.225967728e-05f,
+8.213187168e-05f, 8.200393492e-05f, 8.187586723e-05f, 8.174766884e-05f, 8.161933999e-05f, 8.149088090e-05f, 8.136229182e-05f, 8.123357297e-05f, 8.110472459e-05f, 8.097574691e-05f,
+8.084664018e-05f, 8.071740461e-05f, 8.058804045e-05f, 8.045854793e-05f, 8.032892729e-05f, 8.019917875e-05f, 8.006930257e-05f, 7.993929896e-05f, 7.980916817e-05f, 7.967891044e-05f,
+7.954852600e-05f, 7.941801508e-05f, 7.928737792e-05f, 7.915661477e-05f, 7.902572585e-05f, 7.889471140e-05f, 7.876357167e-05f, 7.863230688e-05f, 7.850091728e-05f, 7.836940311e-05f,
+7.823776459e-05f, 7.810600198e-05f, 7.797411550e-05f, 7.784210541e-05f, 7.770997193e-05f, 7.757771530e-05f, 7.744533577e-05f, 7.731283357e-05f, 7.718020895e-05f, 7.704746215e-05f,
+7.691459339e-05f, 7.678160293e-05f, 7.664849101e-05f, 7.651525786e-05f, 7.638190373e-05f, 7.624842885e-05f, 7.611483347e-05f, 7.598111784e-05f, 7.584728218e-05f, 7.571332675e-05f,
+7.557925178e-05f, 7.544505752e-05f, 7.531074421e-05f, 7.517631209e-05f, 7.504176140e-05f, 7.490709239e-05f, 7.477230531e-05f, 7.463740038e-05f, 7.450237787e-05f, 7.436723800e-05f,
+7.423198103e-05f, 7.409660720e-05f, 7.396111675e-05f, 7.382550993e-05f, 7.368978698e-05f, 7.355394814e-05f, 7.341799367e-05f, 7.328192380e-05f, 7.314573878e-05f, 7.300943886e-05f,
+7.287302429e-05f, 7.273649530e-05f, 7.259985214e-05f, 7.246309507e-05f, 7.232622432e-05f, 7.218924014e-05f, 7.205214279e-05f, 7.191493250e-05f, 7.177760952e-05f, 7.164017411e-05f,
+7.150262650e-05f, 7.136496695e-05f, 7.122719570e-05f, 7.108931300e-05f, 7.095131910e-05f, 7.081321425e-05f, 7.067499869e-05f, 7.053667268e-05f, 7.039823646e-05f, 7.025969028e-05f,
+7.012103439e-05f, 6.998226904e-05f, 6.984339448e-05f, 6.970441096e-05f, 6.956531873e-05f, 6.942611804e-05f, 6.928680914e-05f, 6.914739227e-05f, 6.900786769e-05f, 6.886823566e-05f,
+6.872849641e-05f, 6.858865021e-05f, 6.844869729e-05f, 6.830863792e-05f, 6.816847235e-05f, 6.802820082e-05f, 6.788782359e-05f, 6.774734091e-05f, 6.760675303e-05f, 6.746606021e-05f,
+6.732526269e-05f, 6.718436073e-05f, 6.704335459e-05f, 6.690224451e-05f, 6.676103074e-05f, 6.661971355e-05f, 6.647829318e-05f, 6.633676988e-05f, 6.619514392e-05f, 6.605341554e-05f,
+6.591158501e-05f, 6.576965256e-05f, 6.562761846e-05f, 6.548548296e-05f, 6.534324632e-05f, 6.520090879e-05f, 6.505847062e-05f, 6.491593208e-05f, 6.477329340e-05f, 6.463055486e-05f,
+6.448771671e-05f, 6.434477920e-05f, 6.420174258e-05f, 6.405860712e-05f, 6.391537307e-05f, 6.377204068e-05f, 6.362861022e-05f, 6.348508193e-05f, 6.334145608e-05f, 6.319773293e-05f,
+6.305391272e-05f, 6.290999571e-05f, 6.276598217e-05f, 6.262187235e-05f, 6.247766651e-05f, 6.233336490e-05f, 6.218896779e-05f, 6.204447543e-05f, 6.189988808e-05f, 6.175520599e-05f,
+6.161042943e-05f, 6.146555866e-05f, 6.132059393e-05f, 6.117553550e-05f, 6.103038363e-05f, 6.088513859e-05f, 6.073980062e-05f, 6.059436999e-05f, 6.044884696e-05f, 6.030323178e-05f,
+6.015752473e-05f, 6.001172605e-05f, 5.986583601e-05f, 5.971985486e-05f, 5.957378288e-05f, 5.942762031e-05f, 5.928136742e-05f, 5.913502447e-05f, 5.898859173e-05f, 5.884206944e-05f,
+5.869545788e-05f, 5.854875730e-05f, 5.840196796e-05f, 5.825509013e-05f, 5.810812407e-05f, 5.796107004e-05f, 5.781392831e-05f, 5.766669912e-05f, 5.751938276e-05f, 5.737197947e-05f,
+5.722448952e-05f, 5.707691317e-05f, 5.692925070e-05f, 5.678150235e-05f, 5.663366839e-05f, 5.648574909e-05f, 5.633774470e-05f, 5.618965550e-05f, 5.604148174e-05f, 5.589322369e-05f,
+5.574488162e-05f, 5.559645577e-05f, 5.544794643e-05f, 5.529935385e-05f, 5.515067830e-05f, 5.500192005e-05f, 5.485307935e-05f, 5.470415646e-05f, 5.455515167e-05f, 5.440606523e-05f,
+5.425689740e-05f, 5.410764845e-05f, 5.395831865e-05f, 5.380890826e-05f, 5.365941754e-05f, 5.350984677e-05f, 5.336019620e-05f, 5.321046610e-05f, 5.306065675e-05f, 5.291076840e-05f,
+5.276080132e-05f, 5.261075577e-05f, 5.246063203e-05f, 5.231043036e-05f, 5.216015103e-05f, 5.200979430e-05f, 5.185936043e-05f, 5.170884971e-05f, 5.155826238e-05f, 5.140759873e-05f,
+5.125685901e-05f, 5.110604350e-05f, 5.095515246e-05f, 5.080418616e-05f, 5.065314486e-05f, 5.050202884e-05f, 5.035083836e-05f, 5.019957370e-05f, 5.004823511e-05f, 4.989682287e-05f,
+4.974533724e-05f, 4.959377849e-05f, 4.944214690e-05f, 4.929044273e-05f, 4.913866624e-05f, 4.898681771e-05f, 4.883489741e-05f, 4.868290561e-05f, 4.853084256e-05f, 4.837870856e-05f,
+4.822650385e-05f, 4.807422872e-05f, 4.792188342e-05f, 4.776946824e-05f, 4.761698344e-05f, 4.746442929e-05f, 4.731180606e-05f, 4.715911401e-05f, 4.700635343e-05f, 4.685352458e-05f,
+4.670062773e-05f, 4.654766315e-05f, 4.639463111e-05f, 4.624153188e-05f, 4.608836574e-05f, 4.593513294e-05f, 4.578183377e-05f, 4.562846850e-05f, 4.547503739e-05f, 4.532154072e-05f,
+4.516797875e-05f, 4.501435176e-05f, 4.486066003e-05f, 4.470690381e-05f, 4.455308339e-05f, 4.439919903e-05f, 4.424525101e-05f, 4.409123960e-05f, 4.393716507e-05f, 4.378302769e-05f,
+4.362882773e-05f, 4.347456547e-05f, 4.332024117e-05f, 4.316585512e-05f, 4.301140758e-05f, 4.285689883e-05f, 4.270232913e-05f, 4.254769876e-05f, 4.239300800e-05f, 4.223825711e-05f,
+4.208344637e-05f, 4.192857606e-05f, 4.177364643e-05f, 4.161865778e-05f, 4.146361036e-05f, 4.130850446e-05f, 4.115334035e-05f, 4.099811830e-05f, 4.084283858e-05f, 4.068750147e-05f,
+4.053210724e-05f, 4.037665617e-05f, 4.022114852e-05f, 4.006558458e-05f, 3.990996461e-05f, 3.975428890e-05f, 3.959855771e-05f, 3.944277132e-05f, 3.928693000e-05f, 3.913103403e-05f,
+3.897508368e-05f, 3.881907923e-05f, 3.866302095e-05f, 3.850690911e-05f, 3.835074400e-05f, 3.819452588e-05f, 3.803825502e-05f, 3.788193172e-05f, 3.772555623e-05f, 3.756912883e-05f,
+3.741264981e-05f, 3.725611943e-05f, 3.709953796e-05f, 3.694290570e-05f, 3.678622290e-05f, 3.662948985e-05f, 3.647270682e-05f, 3.631587408e-05f, 3.615899192e-05f, 3.600206061e-05f,
+3.584508042e-05f, 3.568805162e-05f, 3.553097451e-05f, 3.537384934e-05f, 3.521667640e-05f, 3.505945596e-05f, 3.490218830e-05f, 3.474487370e-05f, 3.458751242e-05f, 3.443010476e-05f,
+3.427265097e-05f, 3.411515135e-05f, 3.395760616e-05f, 3.380001569e-05f, 3.364238020e-05f, 3.348469998e-05f, 3.332697530e-05f, 3.316920644e-05f, 3.301139368e-05f, 3.285353729e-05f,
+3.269563755e-05f, 3.253769473e-05f, 3.237970912e-05f, 3.222168098e-05f, 3.206361061e-05f, 3.190549826e-05f, 3.174734423e-05f, 3.158914879e-05f, 3.143091221e-05f, 3.127263477e-05f,
+3.111431676e-05f, 3.095595844e-05f, 3.079756010e-05f, 3.063912200e-05f, 3.048064444e-05f, 3.032212769e-05f, 3.016357202e-05f, 3.000497771e-05f, 2.984634504e-05f, 2.968767429e-05f,
+2.952896574e-05f, 2.937021966e-05f, 2.921143633e-05f, 2.905261603e-05f, 2.889375904e-05f, 2.873486563e-05f, 2.857593608e-05f, 2.841697068e-05f, 2.825796969e-05f, 2.809893340e-05f,
+2.793986209e-05f, 2.778075603e-05f, 2.762161550e-05f, 2.746244078e-05f, 2.730323215e-05f, 2.714398989e-05f, 2.698471427e-05f, 2.682540558e-05f, 2.666606408e-05f, 2.650669007e-05f,
+2.634728381e-05f, 2.618784560e-05f, 2.602837569e-05f, 2.586887439e-05f, 2.570934195e-05f, 2.554977867e-05f, 2.539018482e-05f, 2.523056067e-05f, 2.507090652e-05f, 2.491122263e-05f,
+2.475150928e-05f, 2.459176676e-05f, 2.443199534e-05f, 2.427219531e-05f, 2.411236693e-05f, 2.395251050e-05f, 2.379262628e-05f, 2.363271456e-05f, 2.347277562e-05f, 2.331280973e-05f,
+2.315281718e-05f, 2.299279824e-05f, 2.283275320e-05f, 2.267268232e-05f, 2.251258590e-05f, 2.235246421e-05f, 2.219231752e-05f, 2.203214613e-05f, 2.187195030e-05f, 2.171173032e-05f,
+2.155148647e-05f, 2.139121902e-05f, 2.123092825e-05f, 2.107061445e-05f, 2.091027789e-05f, 2.074991886e-05f, 2.058953763e-05f, 2.042913448e-05f, 2.026870969e-05f, 2.010826354e-05f,
+1.994779631e-05f, 1.978730827e-05f, 1.962679972e-05f, 1.946627093e-05f, 1.930572217e-05f, 1.914515372e-05f, 1.898456588e-05f, 1.882395891e-05f, 1.866333309e-05f, 1.850268871e-05f,
+1.834202605e-05f, 1.818134537e-05f, 1.802064697e-05f, 1.785993113e-05f, 1.769919811e-05f, 1.753844821e-05f, 1.737768170e-05f, 1.721689885e-05f, 1.705609996e-05f, 1.689528530e-05f,
+1.673445515e-05f, 1.657360979e-05f, 1.641274949e-05f, 1.625187455e-05f, 1.609098523e-05f, 1.593008182e-05f, 1.576916459e-05f, 1.560823383e-05f, 1.544728982e-05f, 1.528633283e-05f,
+1.512536315e-05f, 1.496438105e-05f, 1.480338682e-05f, 1.464238073e-05f, 1.448136307e-05f, 1.432033410e-05f, 1.415929412e-05f, 1.399824340e-05f, 1.383718223e-05f, 1.367611087e-05f,
+1.351502961e-05f, 1.335393874e-05f, 1.319283852e-05f, 1.303172925e-05f, 1.287061119e-05f, 1.270948463e-05f, 1.254834984e-05f, 1.238720712e-05f, 1.222605673e-05f, 1.206489896e-05f,
+1.190373408e-05f, 1.174256237e-05f, 1.158138412e-05f, 1.142019961e-05f, 1.125900911e-05f, 1.109781289e-05f, 1.093661126e-05f, 1.077540447e-05f, 1.061419281e-05f, 1.045297656e-05f,
+1.029175600e-05f, 1.013053141e-05f, 9.969303070e-06f, 9.808071254e-06f, 9.646836243e-06f, 9.485598318e-06f, 9.324357757e-06f, 9.163114840e-06f, 9.001869845e-06f, 8.840623052e-06f,
+8.679374740e-06f, 8.518125189e-06f, 8.356874676e-06f, 8.195623481e-06f, 8.034371884e-06f, 7.873120163e-06f, 7.711868597e-06f, 7.550617465e-06f, 7.389367046e-06f, 7.228117619e-06f,
+7.066869463e-06f, 6.905622857e-06f, 6.744378079e-06f, 6.583135409e-06f, 6.421895124e-06f, 6.260657505e-06f, 6.099422828e-06f, 5.938191375e-06f, 5.776963422e-06f, 5.615739248e-06f,
+5.454519133e-06f, 5.293303354e-06f, 5.132092191e-06f, 4.970885921e-06f, 4.809684823e-06f, 4.648489176e-06f, 4.487299258e-06f, 4.326115348e-06f, 4.164937723e-06f, 4.003766662e-06f,
+3.842602443e-06f, 3.681445346e-06f, 3.520295646e-06f, 3.359153624e-06f, 3.198019557e-06f, 3.036893722e-06f, 2.875776399e-06f, 2.714667865e-06f, 2.553568398e-06f, 2.392478277e-06f,
+2.231397778e-06f, 2.070327180e-06f, 1.909266760e-06f, 1.748216797e-06f, 1.587177568e-06f, 1.426149351e-06f, 1.265132423e-06f, 1.104127062e-06f, 9.431335460e-07f, 7.821521519e-07f,
+6.211831572e-07f, 4.602268395e-07f, 2.992834761e-07f, 1.383533444e-07f, -2.256327837e-08f, -1.834661150e-07f, -3.443548882e-07f, -5.052293210e-07f, -6.660891362e-07f, -8.269340567e-07f,
+-9.877638056e-07f, -1.148578106e-06f, -1.309376681e-06f, -1.470159254e-06f, -1.630925547e-06f, -1.791675285e-06f, -1.952408190e-06f, -2.113123986e-06f, -2.273822396e-06f, -2.434503145e-06f,
+-2.595165954e-06f, -2.755810548e-06f, -2.916436651e-06f, -3.077043986e-06f, -3.237632277e-06f, -3.398201248e-06f, -3.558750622e-06f, -3.719280124e-06f, -3.879789478e-06f, -4.040278407e-06f,
+-4.200746635e-06f, -4.361193888e-06f, -4.521619888e-06f, -4.682024361e-06f, -4.842407031e-06f, -5.002767621e-06f, -5.163105857e-06f, -5.323421463e-06f, -5.483714164e-06f, -5.643983684e-06f,
+-5.804229748e-06f, -5.964452081e-06f, -6.124650407e-06f, -6.284824452e-06f, -6.444973940e-06f, -6.605098597e-06f, -6.765198147e-06f, -6.925272316e-06f, -7.085320830e-06f, -7.245343412e-06f,
+-7.405339789e-06f, -7.565309687e-06f, -7.725252830e-06f, -7.885168944e-06f, -8.045057755e-06f, -8.204918989e-06f, -8.364752371e-06f, -8.524557627e-06f, -8.684334484e-06f, -8.844082667e-06f,
+-9.003801902e-06f, -9.163491915e-06f, -9.323152434e-06f, -9.482783183e-06f, -9.642383890e-06f, -9.801954280e-06f, -9.961494081e-06f, -1.012100302e-05f, -1.028048082e-05f, -1.043992721e-05f,
+-1.059934192e-05f, -1.075872467e-05f, -1.091807520e-05f, -1.107739322e-05f, -1.123667847e-05f, -1.139593067e-05f, -1.155514955e-05f, -1.171433484e-05f, -1.187348626e-05f, -1.203260355e-05f,
+-1.219168642e-05f, -1.235073462e-05f, -1.250974786e-05f, -1.266872587e-05f, -1.282766838e-05f, -1.298657512e-05f, -1.314544582e-05f, -1.330428021e-05f, -1.346307801e-05f, -1.362183895e-05f,
+-1.378056277e-05f, -1.393924918e-05f, -1.409789793e-05f, -1.425650872e-05f, -1.441508131e-05f, -1.457361541e-05f, -1.473211075e-05f, -1.489056707e-05f, -1.504898409e-05f, -1.520736154e-05f,
+-1.536569915e-05f, -1.552399665e-05f, -1.568225378e-05f, -1.584047025e-05f, -1.599864580e-05f, -1.615678016e-05f, -1.631487306e-05f, -1.647292423e-05f, -1.663093339e-05f, -1.678890029e-05f,
+-1.694682465e-05f, -1.710470619e-05f, -1.726254466e-05f, -1.742033978e-05f, -1.757809128e-05f, -1.773579890e-05f, -1.789346236e-05f, -1.805108139e-05f, -1.820865573e-05f, -1.836618511e-05f,
+-1.852366925e-05f, -1.868110790e-05f, -1.883850077e-05f, -1.899584761e-05f, -1.915314815e-05f, -1.931040211e-05f, -1.946760923e-05f, -1.962476924e-05f, -1.978188187e-05f, -1.993894686e-05f,
+-2.009596394e-05f, -2.025293283e-05f, -2.040985328e-05f, -2.056672501e-05f, -2.072354776e-05f, -2.088032127e-05f, -2.103704525e-05f, -2.119371945e-05f, -2.135034360e-05f, -2.150691744e-05f,
+-2.166344069e-05f, -2.181991309e-05f, -2.197633438e-05f, -2.213270428e-05f, -2.228902254e-05f, -2.244528888e-05f, -2.260150304e-05f, -2.275766475e-05f, -2.291377375e-05f, -2.306982978e-05f,
+-2.322583256e-05f, -2.338178183e-05f, -2.353767733e-05f, -2.369351879e-05f, -2.384930595e-05f, -2.400503854e-05f, -2.416071630e-05f, -2.431633896e-05f, -2.447190625e-05f, -2.462741792e-05f,
+-2.478287370e-05f, -2.493827332e-05f, -2.509361653e-05f, -2.524890305e-05f, -2.540413262e-05f, -2.555930498e-05f, -2.571441987e-05f, -2.586947703e-05f, -2.602447618e-05f, -2.617941706e-05f,
+-2.633429942e-05f, -2.648912299e-05f, -2.664388751e-05f, -2.679859271e-05f, -2.695323833e-05f, -2.710782411e-05f, -2.726234979e-05f, -2.741681511e-05f, -2.757121979e-05f, -2.772556359e-05f,
+-2.787984624e-05f, -2.803406747e-05f, -2.818822703e-05f, -2.834232465e-05f, -2.849636008e-05f, -2.865033305e-05f, -2.880424330e-05f, -2.895809057e-05f, -2.911187460e-05f, -2.926559512e-05f,
+-2.941925189e-05f, -2.957284463e-05f, -2.972637309e-05f, -2.987983701e-05f, -3.003323612e-05f, -3.018657018e-05f, -3.033983891e-05f, -3.049304205e-05f, -3.064617936e-05f, -3.079925057e-05f,
+-3.095225541e-05f, -3.110519364e-05f, -3.125806499e-05f, -3.141086921e-05f, -3.156360603e-05f, -3.171627519e-05f, -3.186887645e-05f, -3.202140953e-05f, -3.217387419e-05f, -3.232627016e-05f,
+-3.247859718e-05f, -3.263085501e-05f, -3.278304337e-05f, -3.293516202e-05f, -3.308721070e-05f, -3.323918915e-05f, -3.339109710e-05f, -3.354293432e-05f, -3.369470053e-05f, -3.384639549e-05f,
+-3.399801893e-05f, -3.414957061e-05f, -3.430105025e-05f, -3.445245762e-05f, -3.460379245e-05f, -3.475505448e-05f, -3.490624347e-05f, -3.505735915e-05f, -3.520840127e-05f, -3.535936958e-05f,
+-3.551026382e-05f, -3.566108374e-05f, -3.581182908e-05f, -3.596249958e-05f, -3.611309500e-05f, -3.626361508e-05f, -3.641405956e-05f, -3.656442820e-05f, -3.671472073e-05f, -3.686493691e-05f,
+-3.701507647e-05f, -3.716513918e-05f, -3.731512477e-05f, -3.746503299e-05f, -3.761486359e-05f, -3.776461631e-05f, -3.791429091e-05f, -3.806388713e-05f, -3.821340472e-05f, -3.836284343e-05f,
+-3.851220301e-05f, -3.866148320e-05f, -3.881068375e-05f, -3.895980441e-05f, -3.910884493e-05f, -3.925780507e-05f, -3.940668456e-05f, -3.955548316e-05f, -3.970420061e-05f, -3.985283667e-05f,
+-4.000139109e-05f, -4.014986362e-05f, -4.029825400e-05f, -4.044656200e-05f, -4.059478734e-05f, -4.074292980e-05f, -4.089098912e-05f, -4.103896504e-05f, -4.118685733e-05f, -4.133466573e-05f,
+-4.148238999e-05f, -4.163002987e-05f, -4.177758512e-05f, -4.192505549e-05f, -4.207244073e-05f, -4.221974059e-05f, -4.236695483e-05f, -4.251408319e-05f, -4.266112544e-05f, -4.280808133e-05f,
+-4.295495060e-05f, -4.310173301e-05f, -4.324842832e-05f, -4.339503628e-05f, -4.354155663e-05f, -4.368798915e-05f, -4.383433357e-05f, -4.398058966e-05f, -4.412675717e-05f, -4.427283586e-05f,
+-4.441882547e-05f, -4.456472576e-05f, -4.471053650e-05f, -4.485625743e-05f, -4.500188831e-05f, -4.514742890e-05f, -4.529287894e-05f, -4.543823821e-05f, -4.558350645e-05f, -4.572868342e-05f,
+-4.587376888e-05f, -4.601876258e-05f, -4.616366429e-05f, -4.630847375e-05f, -4.645319073e-05f, -4.659781498e-05f, -4.674234627e-05f, -4.688678434e-05f, -4.703112896e-05f, -4.717537988e-05f,
+-4.731953687e-05f, -4.746359968e-05f, -4.760756807e-05f, -4.775144181e-05f, -4.789522064e-05f, -4.803890433e-05f, -4.818249264e-05f, -4.832598533e-05f, -4.846938216e-05f, -4.861268288e-05f,
+-4.875588726e-05f, -4.889899507e-05f, -4.904200605e-05f, -4.918491997e-05f, -4.932773660e-05f, -4.947045568e-05f, -4.961307700e-05f, -4.975560029e-05f, -4.989802534e-05f, -5.004035190e-05f,
+-5.018257972e-05f, -5.032470859e-05f, -5.046673825e-05f, -5.060866847e-05f, -5.075049901e-05f, -5.089222964e-05f, -5.103386012e-05f, -5.117539021e-05f, -5.131681967e-05f, -5.145814828e-05f,
+-5.159937579e-05f, -5.174050198e-05f, -5.188152659e-05f, -5.202244940e-05f, -5.216327018e-05f, -5.230398869e-05f, -5.244460469e-05f, -5.258511794e-05f, -5.272552823e-05f, -5.286583530e-05f,
+-5.300603893e-05f, -5.314613888e-05f, -5.328613493e-05f, -5.342602683e-05f, -5.356581435e-05f, -5.370549726e-05f, -5.384507533e-05f, -5.398454833e-05f, -5.412391602e-05f, -5.426317816e-05f,
+-5.440233454e-05f, -5.454138492e-05f, -5.468032906e-05f, -5.481916673e-05f, -5.495789771e-05f, -5.509652176e-05f, -5.523503866e-05f, -5.537344816e-05f, -5.551175005e-05f, -5.564994408e-05f,
+-5.578803004e-05f, -5.592600769e-05f, -5.606387680e-05f, -5.620163714e-05f, -5.633928849e-05f, -5.647683061e-05f, -5.661426328e-05f, -5.675158627e-05f, -5.688879935e-05f, -5.702590229e-05f,
+-5.716289486e-05f, -5.729977684e-05f, -5.743654800e-05f, -5.757320811e-05f, -5.770975695e-05f, -5.784619428e-05f, -5.798251989e-05f, -5.811873354e-05f, -5.825483501e-05f, -5.839082408e-05f,
+-5.852670051e-05f, -5.866246409e-05f, -5.879811458e-05f, -5.893365177e-05f, -5.906907542e-05f, -5.920438532e-05f, -5.933958124e-05f, -5.947466295e-05f, -5.960963023e-05f, -5.974448286e-05f,
+-5.987922061e-05f, -6.001384327e-05f, -6.014835060e-05f, -6.028274238e-05f, -6.041701840e-05f, -6.055117843e-05f, -6.068522224e-05f, -6.081914962e-05f, -6.095296034e-05f, -6.108665418e-05f,
+-6.122023093e-05f, -6.135369036e-05f, -6.148703224e-05f, -6.162025636e-05f, -6.175336250e-05f, -6.188635044e-05f, -6.201921996e-05f, -6.215197083e-05f, -6.228460285e-05f, -6.241711578e-05f,
+-6.254950941e-05f, -6.268178352e-05f, -6.281393790e-05f, -6.294597232e-05f, -6.307788657e-05f, -6.320968042e-05f, -6.334135367e-05f, -6.347290609e-05f, -6.360433747e-05f, -6.373564758e-05f,
+-6.386683622e-05f, -6.399790316e-05f, -6.412884819e-05f, -6.425967110e-05f, -6.439037166e-05f, -6.452094966e-05f, -6.465140489e-05f, -6.478173713e-05f, -6.491194617e-05f, -6.504203179e-05f,
+-6.517199378e-05f, -6.530183192e-05f, -6.543154599e-05f, -6.556113580e-05f, -6.569060111e-05f, -6.581994172e-05f, -6.594915742e-05f, -6.607824799e-05f, -6.620721322e-05f, -6.633605289e-05f,
+-6.646476680e-05f, -6.659335474e-05f, -6.672181648e-05f, -6.685015183e-05f, -6.697836056e-05f, -6.710644247e-05f, -6.723439735e-05f, -6.736222499e-05f, -6.748992517e-05f, -6.761749769e-05f,
+-6.774494233e-05f, -6.787225889e-05f, -6.799944716e-05f, -6.812650693e-05f, -6.825343799e-05f, -6.838024013e-05f, -6.850691314e-05f, -6.863345682e-05f, -6.875987096e-05f, -6.888615534e-05f,
+-6.901230977e-05f, -6.913833403e-05f, -6.926422792e-05f, -6.938999123e-05f, -6.951562376e-05f, -6.964112530e-05f, -6.976649564e-05f, -6.989173457e-05f, -7.001684190e-05f, -7.014181742e-05f,
+-7.026666091e-05f, -7.039137219e-05f, -7.051595104e-05f, -7.064039725e-05f, -7.076471063e-05f, -7.088889098e-05f, -7.101293808e-05f, -7.113685173e-05f, -7.126063174e-05f, -7.138427789e-05f,
+-7.150778999e-05f, -7.163116784e-05f, -7.175441122e-05f, -7.187751995e-05f, -7.200049382e-05f, -7.212333262e-05f, -7.224603617e-05f, -7.236860424e-05f, -7.249103666e-05f, -7.261333321e-05f,
+-7.273549369e-05f, -7.285751792e-05f, -7.297940567e-05f, -7.310115677e-05f, -7.322277100e-05f, -7.334424818e-05f, -7.346558809e-05f, -7.358679055e-05f, -7.370785536e-05f, -7.382878231e-05f,
+-7.394957121e-05f, -7.407022187e-05f, -7.419073408e-05f, -7.431110765e-05f, -7.443134238e-05f, -7.455143808e-05f, -7.467139456e-05f, -7.479121161e-05f, -7.491088904e-05f, -7.503042665e-05f,
+-7.514982426e-05f, -7.526908166e-05f, -7.538819866e-05f, -7.550717507e-05f, -7.562601069e-05f, -7.574470534e-05f, -7.586325881e-05f, -7.598167092e-05f, -7.609994146e-05f, -7.621807026e-05f,
+-7.633605711e-05f, -7.645390183e-05f, -7.657160422e-05f, -7.668916409e-05f, -7.680658125e-05f, -7.692385551e-05f, -7.704098668e-05f, -7.715797457e-05f, -7.727481899e-05f, -7.739151974e-05f,
+-7.750807665e-05f, -7.762448951e-05f, -7.774075814e-05f, -7.785688236e-05f, -7.797286197e-05f, -7.808869678e-05f, -7.820438661e-05f, -7.831993127e-05f, -7.843533057e-05f, -7.855058433e-05f,
+-7.866569236e-05f, -7.878065446e-05f, -7.889547046e-05f, -7.901014017e-05f, -7.912466340e-05f, -7.923903997e-05f, -7.935326969e-05f, -7.946735238e-05f, -7.958128784e-05f, -7.969507591e-05f,
+-7.980871639e-05f, -7.992220910e-05f, -8.003555386e-05f, -8.014875047e-05f, -8.026179877e-05f, -8.037469856e-05f, -8.048744967e-05f, -8.060005191e-05f, -8.071250509e-05f, -8.082480905e-05f,
+-8.093696359e-05f, -8.104896853e-05f, -8.116082370e-05f, -8.127252892e-05f, -8.138408399e-05f, -8.149548875e-05f, -8.160674301e-05f, -8.171784660e-05f, -8.182879933e-05f, -8.193960102e-05f,
+-8.205025150e-05f, -8.216075059e-05f, -8.227109810e-05f, -8.238129387e-05f, -8.249133771e-05f, -8.260122945e-05f, -8.271096891e-05f, -8.282055592e-05f, -8.292999028e-05f, -8.303927184e-05f,
+-8.314840041e-05f, -8.325737583e-05f, -8.336619790e-05f, -8.347486646e-05f, -8.358338134e-05f, -8.369174235e-05f, -8.379994933e-05f, -8.390800210e-05f, -8.401590048e-05f, -8.412364431e-05f,
+-8.423123340e-05f, -8.433866760e-05f, -8.444594672e-05f, -8.455307059e-05f, -8.466003904e-05f, -8.476685190e-05f, -8.487350900e-05f, -8.498001016e-05f, -8.508635522e-05f, -8.519254400e-05f,
+-8.529857634e-05f, -8.540445206e-05f, -8.551017099e-05f, -8.561573297e-05f, -8.572113783e-05f, -8.582638539e-05f, -8.593147549e-05f, -8.603640796e-05f, -8.614118263e-05f, -8.624579934e-05f,
+-8.635025791e-05f, -8.645455818e-05f, -8.655869999e-05f, -8.666268316e-05f, -8.676650753e-05f, -8.687017293e-05f, -8.697367921e-05f, -8.707702618e-05f, -8.718021369e-05f, -8.728324158e-05f,
+-8.738610967e-05f, -8.748881781e-05f, -8.759136583e-05f, -8.769375356e-05f, -8.779598085e-05f, -8.789804753e-05f, -8.799995343e-05f, -8.810169840e-05f, -8.820328227e-05f, -8.830470488e-05f,
+-8.840596607e-05f, -8.850706568e-05f, -8.860800354e-05f, -8.870877950e-05f, -8.880939339e-05f, -8.890984506e-05f, -8.901013434e-05f, -8.911026108e-05f, -8.921022511e-05f, -8.931002629e-05f,
+-8.940966444e-05f, -8.950913941e-05f, -8.960845104e-05f, -8.970759918e-05f, -8.980658366e-05f, -8.990540433e-05f, -9.000406104e-05f, -9.010255362e-05f, -9.020088192e-05f, -9.029904579e-05f,
+-9.039704506e-05f, -9.049487958e-05f, -9.059254921e-05f, -9.069005377e-05f, -9.078739313e-05f, -9.088456711e-05f, -9.098157558e-05f, -9.107841837e-05f, -9.117509534e-05f, -9.127160632e-05f,
+-9.136795118e-05f, -9.146412974e-05f, -9.156014187e-05f, -9.165598741e-05f, -9.175166621e-05f, -9.184717812e-05f, -9.194252299e-05f, -9.203770066e-05f, -9.213271098e-05f, -9.222755382e-05f,
+-9.232222901e-05f, -9.241673641e-05f, -9.251107586e-05f, -9.260524722e-05f, -9.269925035e-05f, -9.279308509e-05f, -9.288675129e-05f, -9.298024880e-05f, -9.307357749e-05f, -9.316673720e-05f,
+-9.325972779e-05f, -9.335254911e-05f, -9.344520101e-05f, -9.353768334e-05f, -9.362999597e-05f, -9.372213875e-05f, -9.381411153e-05f, -9.390591417e-05f, -9.399754652e-05f, -9.408900844e-05f,
+-9.418029978e-05f, -9.427142041e-05f, -9.436237018e-05f, -9.445314895e-05f, -9.454375657e-05f, -9.463419290e-05f, -9.472445781e-05f, -9.481455114e-05f, -9.490447276e-05f, -9.499422253e-05f,
+-9.508380031e-05f, -9.517320595e-05f, -9.526243932e-05f, -9.535150028e-05f, -9.544038869e-05f, -9.552910440e-05f, -9.561764729e-05f, -9.570601720e-05f, -9.579421401e-05f, -9.588223758e-05f,
+-9.597008776e-05f, -9.605776443e-05f, -9.614526744e-05f, -9.623259666e-05f, -9.631975196e-05f, -9.640673318e-05f, -9.649354021e-05f, -9.658017291e-05f, -9.666663113e-05f, -9.675291476e-05f,
+-9.683902364e-05f, -9.692495765e-05f, -9.701071666e-05f, -9.709630052e-05f, -9.718170912e-05f, -9.726694231e-05f, -9.735199996e-05f, -9.743688194e-05f, -9.752158812e-05f, -9.760611837e-05f,
+-9.769047255e-05f, -9.777465054e-05f, -9.785865221e-05f, -9.794247742e-05f, -9.802612604e-05f, -9.810959795e-05f, -9.819289302e-05f, -9.827601111e-05f, -9.835895210e-05f, -9.844171586e-05f,
+-9.852430226e-05f, -9.860671118e-05f, -9.868894248e-05f, -9.877099605e-05f, -9.885287175e-05f, -9.893456945e-05f, -9.901608904e-05f, -9.909743038e-05f, -9.917859335e-05f, -9.925957783e-05f,
+-9.934038368e-05f, -9.942101080e-05f, -9.950145904e-05f, -9.958172829e-05f, -9.966181842e-05f, -9.974172932e-05f, -9.982146085e-05f, -9.990101290e-05f, -9.998038534e-05f, -1.000595781e-04f,
+-1.001385909e-04f, -1.002174238e-04f, -1.002960766e-04f, -1.003745492e-04f, -1.004528414e-04f, -1.005309532e-04f, -1.006088845e-04f, -1.006866350e-04f, -1.007642047e-04f, -1.008415935e-04f,
+-1.009188013e-04f, -1.009958278e-04f, -1.010726731e-04f, -1.011493370e-04f, -1.012258194e-04f, -1.013021201e-04f, -1.013782391e-04f, -1.014541762e-04f, -1.015299314e-04f, -1.016055044e-04f,
+-1.016808952e-04f, -1.017561037e-04f, -1.018311298e-04f, -1.019059733e-04f, -1.019806341e-04f, -1.020551121e-04f, -1.021294073e-04f, -1.022035194e-04f, -1.022774484e-04f, -1.023511942e-04f,
+-1.024247566e-04f, -1.024981356e-04f, -1.025713309e-04f, -1.026443427e-04f, -1.027171706e-04f, -1.027898146e-04f, -1.028622746e-04f, -1.029345505e-04f, -1.030066421e-04f, -1.030785495e-04f,
+-1.031502723e-04f, -1.032218106e-04f, -1.032931643e-04f, -1.033643332e-04f, -1.034353172e-04f, -1.035061162e-04f, -1.035767301e-04f, -1.036471588e-04f, -1.037174022e-04f, -1.037874603e-04f,
+-1.038573327e-04f, -1.039270196e-04f, -1.039965208e-04f, -1.040658361e-04f, -1.041349655e-04f, -1.042039088e-04f, -1.042726660e-04f, -1.043412370e-04f, -1.044096216e-04f, -1.044778198e-04f,
+-1.045458314e-04f, -1.046136564e-04f, -1.046812946e-04f, -1.047487459e-04f, -1.048160104e-04f, -1.048830877e-04f, -1.049499779e-04f, -1.050166808e-04f, -1.050831964e-04f, -1.051495246e-04f,
+-1.052156651e-04f, -1.052816181e-04f, -1.053473833e-04f, -1.054129606e-04f, -1.054783500e-04f, -1.055435514e-04f, -1.056085646e-04f, -1.056733896e-04f, -1.057380262e-04f, -1.058024745e-04f,
+-1.058667342e-04f, -1.059308053e-04f, -1.059946877e-04f, -1.060583813e-04f, -1.061218860e-04f, -1.061852017e-04f, -1.062483283e-04f, -1.063112657e-04f, -1.063740139e-04f, -1.064365727e-04f,
+-1.064989420e-04f, -1.065611218e-04f, -1.066231120e-04f, -1.066849124e-04f, -1.067465231e-04f, -1.068079438e-04f, -1.068691745e-04f, -1.069302151e-04f, -1.069910655e-04f, -1.070517257e-04f,
+-1.071121955e-04f, -1.071724749e-04f, -1.072325638e-04f, -1.072924620e-04f, -1.073521695e-04f, -1.074116862e-04f, -1.074710121e-04f, -1.075301469e-04f, -1.075890908e-04f, -1.076478435e-04f,
+-1.077064049e-04f, -1.077647751e-04f, -1.078229538e-04f, -1.078809411e-04f, -1.079387369e-04f, -1.079963409e-04f, -1.080537533e-04f, -1.081109738e-04f, -1.081680025e-04f, -1.082248392e-04f,
+-1.082814838e-04f, -1.083379363e-04f, -1.083941965e-04f, -1.084502645e-04f, -1.085061401e-04f, -1.085618232e-04f, -1.086173138e-04f, -1.086726117e-04f, -1.087277170e-04f, -1.087826295e-04f,
+-1.088373491e-04f, -1.088918758e-04f, -1.089462095e-04f, -1.090003501e-04f, -1.090542975e-04f, -1.091080517e-04f, -1.091616125e-04f, -1.092149800e-04f, -1.092681540e-04f, -1.093211344e-04f,
+-1.093739213e-04f, -1.094265144e-04f, -1.094789138e-04f, -1.095311193e-04f, -1.095831309e-04f, -1.096349485e-04f, -1.096865720e-04f, -1.097380014e-04f, -1.097892366e-04f, -1.098402775e-04f,
+-1.098911240e-04f, -1.099417762e-04f, -1.099922338e-04f, -1.100424968e-04f, -1.100925653e-04f, -1.101424390e-04f, -1.101921179e-04f, -1.102416020e-04f, -1.102908912e-04f, -1.103399854e-04f,
+-1.103888846e-04f, -1.104375886e-04f, -1.104860975e-04f, -1.105344111e-04f, -1.105825293e-04f, -1.106304522e-04f, -1.106781797e-04f, -1.107257116e-04f, -1.107730479e-04f, -1.108201886e-04f,
+-1.108671336e-04f, -1.109138827e-04f, -1.109604361e-04f, -1.110067935e-04f, -1.110529550e-04f, -1.110989205e-04f, -1.111446898e-04f, -1.111902630e-04f, -1.112356400e-04f, -1.112808206e-04f,
+-1.113258050e-04f, -1.113705929e-04f, -1.114151844e-04f, -1.114595794e-04f, -1.115037777e-04f, -1.115477795e-04f, -1.115915845e-04f, -1.116351928e-04f, -1.116786042e-04f, -1.117218188e-04f,
+-1.117648364e-04f, -1.118076570e-04f, -1.118502806e-04f, -1.118927071e-04f, -1.119349364e-04f, -1.119769685e-04f, -1.120188033e-04f, -1.120604408e-04f, -1.121018809e-04f, -1.121431236e-04f,
+-1.121841687e-04f, -1.122250163e-04f, -1.122656663e-04f, -1.123061187e-04f, -1.123463733e-04f, -1.123864302e-04f, -1.124262893e-04f, -1.124659505e-04f, -1.125054138e-04f, -1.125446791e-04f,
+-1.125837464e-04f, -1.126226156e-04f, -1.126612867e-04f, -1.126997596e-04f, -1.127380343e-04f, -1.127761108e-04f, -1.128139889e-04f, -1.128516686e-04f, -1.128891500e-04f, -1.129264328e-04f,
+-1.129635172e-04f, -1.130004030e-04f, -1.130370902e-04f, -1.130735788e-04f, -1.131098686e-04f, -1.131459597e-04f, -1.131818521e-04f, -1.132175456e-04f, -1.132530402e-04f, -1.132883359e-04f,
+-1.133234326e-04f, -1.133583303e-04f, -1.133930290e-04f, -1.134275285e-04f, -1.134618290e-04f, -1.134959302e-04f, -1.135298323e-04f, -1.135635350e-04f, -1.135970385e-04f, -1.136303426e-04f,
+-1.136634473e-04f, -1.136963526e-04f, -1.137290585e-04f, -1.137615648e-04f, -1.137938716e-04f, -1.138259788e-04f, -1.138578864e-04f, -1.138895943e-04f, -1.139211025e-04f, -1.139524110e-04f,
+-1.139835197e-04f, -1.140144286e-04f, -1.140451377e-04f, -1.140756469e-04f, -1.141059562e-04f, -1.141360655e-04f, -1.141659748e-04f, -1.141956841e-04f, -1.142251934e-04f, -1.142545025e-04f,
+-1.142836116e-04f, -1.143125205e-04f, -1.143412292e-04f, -1.143697376e-04f, -1.143980459e-04f, -1.144261538e-04f, -1.144540614e-04f, -1.144817687e-04f, -1.145092756e-04f, -1.145365821e-04f,
+-1.145636882e-04f, -1.145905937e-04f, -1.146172988e-04f, -1.146438034e-04f, -1.146701074e-04f, -1.146962108e-04f, -1.147221136e-04f, -1.147478158e-04f, -1.147733173e-04f, -1.147986181e-04f,
+-1.148237182e-04f, -1.148486176e-04f, -1.148733161e-04f, -1.148978139e-04f, -1.149221109e-04f, -1.149462070e-04f, -1.149701022e-04f, -1.149937966e-04f, -1.150172900e-04f, -1.150405825e-04f,
+-1.150636740e-04f, -1.150865646e-04f, -1.151092541e-04f, -1.151317426e-04f, -1.151540300e-04f, -1.151761164e-04f, -1.151980017e-04f, -1.152196858e-04f, -1.152411688e-04f, -1.152624507e-04f,
+-1.152835314e-04f, -1.153044109e-04f, -1.153250891e-04f, -1.153455662e-04f, -1.153658420e-04f, -1.153859165e-04f, -1.154057897e-04f, -1.154254617e-04f, -1.154449323e-04f, -1.154642016e-04f,
+-1.154832695e-04f, -1.155021360e-04f, -1.155208012e-04f, -1.155392650e-04f, -1.155575274e-04f, -1.155755883e-04f, -1.155934478e-04f, -1.156111058e-04f, -1.156285624e-04f, -1.156458175e-04f,
+-1.156628711e-04f, -1.156797232e-04f, -1.156963738e-04f, -1.157128229e-04f, -1.157290704e-04f, -1.157451163e-04f, -1.157609607e-04f, -1.157766036e-04f, -1.157920448e-04f, -1.158072845e-04f,
+-1.158223225e-04f, -1.158371590e-04f, -1.158517938e-04f, -1.158662271e-04f, -1.158804586e-04f, -1.158944886e-04f, -1.159083169e-04f, -1.159219435e-04f, -1.159353685e-04f, -1.159485918e-04f,
+-1.159616135e-04f, -1.159744335e-04f, -1.159870518e-04f, -1.159994684e-04f, -1.160116833e-04f, -1.160236966e-04f, -1.160355081e-04f, -1.160471179e-04f, -1.160585261e-04f, -1.160697325e-04f,
+-1.160807372e-04f, -1.160915403e-04f, -1.161021416e-04f, -1.161125412e-04f, -1.161227391e-04f, -1.161327353e-04f, -1.161425297e-04f, -1.161521225e-04f, -1.161615135e-04f, -1.161707029e-04f,
+-1.161796905e-04f, -1.161884764e-04f, -1.161970607e-04f, -1.162054432e-04f, -1.162136240e-04f, -1.162216032e-04f, -1.162293806e-04f, -1.162369563e-04f, -1.162443304e-04f, -1.162515028e-04f,
+-1.162584735e-04f, -1.162652426e-04f, -1.162718100e-04f, -1.162781757e-04f, -1.162843398e-04f, -1.162903022e-04f, -1.162960630e-04f, -1.163016222e-04f, -1.163069798e-04f, -1.163121357e-04f,
+-1.163170900e-04f, -1.163218428e-04f, -1.163263939e-04f, -1.163307435e-04f, -1.163348915e-04f, -1.163388380e-04f, -1.163425829e-04f, -1.163461262e-04f, -1.163494681e-04f, -1.163526084e-04f,
+-1.163555473e-04f, -1.163582846e-04f, -1.163608205e-04f, -1.163631549e-04f, -1.163652878e-04f, -1.163672193e-04f, -1.163689494e-04f, -1.163704781e-04f, -1.163718054e-04f, -1.163729313e-04f,
+-1.163738558e-04f, -1.163745790e-04f, -1.163751009e-04f, -1.163754215e-04f, -1.163755407e-04f, -1.163754587e-04f, -1.163751754e-04f, -1.163746909e-04f, -1.163740051e-04f, -1.163731181e-04f,
+-1.163720300e-04f, -1.163707407e-04f, -1.163692502e-04f, -1.163675586e-04f, -1.163656658e-04f, -1.163635720e-04f, -1.163612771e-04f, -1.163587812e-04f, -1.163560842e-04f, -1.163531863e-04f,
+-1.163500873e-04f, -1.163467874e-04f, -1.163432866e-04f, -1.163395848e-04f, -1.163356821e-04f, -1.163315786e-04f, -1.163272743e-04f, -1.163227691e-04f, -1.163180631e-04f, -1.163131564e-04f,
+-1.163080489e-04f, -1.163027407e-04f, -1.162972319e-04f, -1.162915223e-04f, -1.162856122e-04f, -1.162795014e-04f, -1.162731900e-04f, -1.162666781e-04f, -1.162599657e-04f, -1.162530528e-04f,
+-1.162459394e-04f, -1.162386256e-04f, -1.162311114e-04f, -1.162233968e-04f, -1.162154818e-04f, -1.162073666e-04f, -1.161990510e-04f, -1.161905353e-04f, -1.161818193e-04f, -1.161729031e-04f,
+-1.161637867e-04f, -1.161544703e-04f, -1.161449537e-04f, -1.161352371e-04f, -1.161253205e-04f, -1.161152039e-04f, -1.161048874e-04f, -1.160943709e-04f, -1.160836546e-04f, -1.160727384e-04f,
+-1.160616224e-04f, -1.160503066e-04f, -1.160387911e-04f, -1.160270759e-04f, -1.160151611e-04f, -1.160030466e-04f, -1.159907326e-04f, -1.159782189e-04f, -1.159655058e-04f, -1.159525933e-04f,
+-1.159394813e-04f, -1.159261699e-04f, -1.159126591e-04f, -1.158989491e-04f, -1.158850398e-04f, -1.158709312e-04f, -1.158566235e-04f, -1.158421167e-04f, -1.158274107e-04f, -1.158125057e-04f,
+-1.157974016e-04f, -1.157820986e-04f, -1.157665967e-04f, -1.157508959e-04f, -1.157349963e-04f, -1.157188978e-04f, -1.157026006e-04f, -1.156861047e-04f, -1.156694102e-04f, -1.156525170e-04f,
+-1.156354253e-04f, -1.156181350e-04f, -1.156006463e-04f, -1.155829592e-04f, -1.155650737e-04f, -1.155469898e-04f, -1.155287077e-04f, -1.155102273e-04f, -1.154915488e-04f, -1.154726721e-04f,
+-1.154535973e-04f, -1.154343245e-04f, -1.154148538e-04f, -1.153951850e-04f, -1.153753184e-04f, -1.153552540e-04f, -1.153349918e-04f, -1.153145319e-04f, -1.152938743e-04f, -1.152730191e-04f,
+-1.152519663e-04f, -1.152307160e-04f, -1.152092682e-04f, -1.151876231e-04f, -1.151657805e-04f, -1.151437407e-04f, -1.151215036e-04f, -1.150990694e-04f, -1.150764380e-04f, -1.150536096e-04f,
+-1.150305841e-04f, -1.150073617e-04f, -1.149839423e-04f, -1.149603261e-04f, -1.149365132e-04f, -1.149125035e-04f, -1.148882971e-04f, -1.148638941e-04f, -1.148392946e-04f, -1.148144985e-04f,
+-1.147895060e-04f, -1.147643172e-04f, -1.147389320e-04f, -1.147133506e-04f, -1.146875730e-04f, -1.146615993e-04f, -1.146354294e-04f, -1.146090636e-04f, -1.145825019e-04f, -1.145557442e-04f,
+-1.145287908e-04f, -1.145016415e-04f, -1.144742966e-04f, -1.144467561e-04f, -1.144190200e-04f, -1.143910884e-04f, -1.143629614e-04f, -1.143346390e-04f, -1.143061213e-04f, -1.142774084e-04f,
+-1.142485003e-04f, -1.142193971e-04f, -1.141900988e-04f, -1.141606056e-04f, -1.141309175e-04f, -1.141010346e-04f, -1.140709569e-04f, -1.140406845e-04f, -1.140102175e-04f, -1.139795559e-04f,
+-1.139486999e-04f, -1.139176494e-04f, -1.138864046e-04f, -1.138549655e-04f, -1.138233322e-04f, -1.137915048e-04f, -1.137594833e-04f, -1.137272678e-04f, -1.136948585e-04f, -1.136622552e-04f,
+-1.136294582e-04f, -1.135964675e-04f, -1.135632832e-04f, -1.135299054e-04f, -1.134963340e-04f, -1.134625693e-04f, -1.134286112e-04f, -1.133944599e-04f, -1.133601155e-04f, -1.133255779e-04f,
+-1.132908473e-04f, -1.132559238e-04f, -1.132208074e-04f, -1.131854982e-04f, -1.131499963e-04f, -1.131143017e-04f, -1.130784146e-04f, -1.130423351e-04f, -1.130060631e-04f, -1.129695988e-04f,
+-1.129329423e-04f, -1.128960936e-04f, -1.128590529e-04f, -1.128218201e-04f, -1.127843955e-04f, -1.127467789e-04f, -1.127089707e-04f, -1.126709708e-04f, -1.126327792e-04f, -1.125943962e-04f,
+-1.125558218e-04f, -1.125170560e-04f, -1.124780989e-04f, -1.124389507e-04f, -1.123996114e-04f, -1.123600811e-04f, -1.123203599e-04f, -1.122804478e-04f, -1.122403450e-04f, -1.122000515e-04f,
+-1.121595675e-04f, -1.121188929e-04f, -1.120780280e-04f, -1.120369727e-04f, -1.119957272e-04f, -1.119542916e-04f, -1.119126659e-04f, -1.118708503e-04f, -1.118288447e-04f, -1.117866494e-04f,
+-1.117442644e-04f, -1.117016898e-04f, -1.116589256e-04f, -1.116159721e-04f, -1.115728292e-04f, -1.115294970e-04f, -1.114859757e-04f, -1.114422654e-04f, -1.113983660e-04f, -1.113542778e-04f,
+-1.113100008e-04f, -1.112655351e-04f, -1.112208808e-04f, -1.111760380e-04f, -1.111310068e-04f, -1.110857872e-04f, -1.110403795e-04f, -1.109947836e-04f, -1.109489997e-04f, -1.109030278e-04f,
+-1.108568681e-04f, -1.108105206e-04f, -1.107639855e-04f, -1.107172629e-04f, -1.106703528e-04f, -1.106232553e-04f, -1.105759705e-04f, -1.105284986e-04f, -1.104808397e-04f, -1.104329937e-04f,
+-1.103849609e-04f, -1.103367413e-04f, -1.102883351e-04f, -1.102397423e-04f, -1.101909630e-04f, -1.101419973e-04f, -1.100928454e-04f, -1.100435073e-04f, -1.099939832e-04f, -1.099442730e-04f,
+-1.098943771e-04f, -1.098442953e-04f, -1.097940279e-04f, -1.097435750e-04f, -1.096929365e-04f, -1.096421128e-04f, -1.095911038e-04f, -1.095399096e-04f, -1.094885305e-04f, -1.094369664e-04f,
+-1.093852174e-04f, -1.093332838e-04f, -1.092811655e-04f, -1.092288628e-04f, -1.091763756e-04f, -1.091237041e-04f, -1.090708485e-04f, -1.090178087e-04f, -1.089645850e-04f, -1.089111774e-04f,
+-1.088575861e-04f, -1.088038111e-04f, -1.087498526e-04f, -1.086957107e-04f, -1.086413854e-04f, -1.085868769e-04f, -1.085321854e-04f, -1.084773108e-04f, -1.084222534e-04f, -1.083670131e-04f,
+-1.083115903e-04f, -1.082559849e-04f, -1.082001970e-04f, -1.081442268e-04f, -1.080880745e-04f, -1.080317400e-04f, -1.079752235e-04f, -1.079185252e-04f, -1.078616451e-04f, -1.078045834e-04f,
+-1.077473401e-04f, -1.076899155e-04f, -1.076323095e-04f, -1.075745224e-04f, -1.075165542e-04f, -1.074584050e-04f, -1.074000750e-04f, -1.073415643e-04f, -1.072828730e-04f, -1.072240012e-04f,
+-1.071649491e-04f, -1.071057166e-04f, -1.070463041e-04f, -1.069867116e-04f, -1.069269391e-04f, -1.068669869e-04f, -1.068068550e-04f, -1.067465436e-04f, -1.066860528e-04f, -1.066253827e-04f,
+-1.065645334e-04f, -1.065035050e-04f, -1.064422977e-04f, -1.063809116e-04f, -1.063193468e-04f, -1.062576035e-04f, -1.061956816e-04f, -1.061335815e-04f, -1.060713032e-04f, -1.060088468e-04f,
+-1.059462124e-04f, -1.058834002e-04f, -1.058204103e-04f, -1.057572428e-04f, -1.056938979e-04f, -1.056303756e-04f, -1.055666761e-04f, -1.055027995e-04f, -1.054387460e-04f, -1.053745157e-04f,
+-1.053101086e-04f, -1.052455249e-04f, -1.051807649e-04f, -1.051158284e-04f, -1.050507158e-04f, -1.049854272e-04f, -1.049199625e-04f, -1.048543221e-04f, -1.047885060e-04f, -1.047225143e-04f,
+-1.046563472e-04f, -1.045900048e-04f, -1.045234873e-04f, -1.044567947e-04f, -1.043899272e-04f, -1.043228850e-04f, -1.042556680e-04f, -1.041882766e-04f, -1.041207108e-04f, -1.040529708e-04f,
+-1.039850566e-04f, -1.039169685e-04f, -1.038487065e-04f, -1.037802708e-04f, -1.037116615e-04f, -1.036428787e-04f, -1.035739227e-04f, -1.035047934e-04f, -1.034354912e-04f, -1.033660160e-04f,
+-1.032963680e-04f, -1.032265474e-04f, -1.031565542e-04f, -1.030863887e-04f, -1.030160510e-04f, -1.029455412e-04f, -1.028748594e-04f, -1.028040058e-04f, -1.027329805e-04f, -1.026617836e-04f,
+-1.025904154e-04f, -1.025188758e-04f, -1.024471652e-04f, -1.023752835e-04f, -1.023032310e-04f, -1.022310078e-04f, -1.021586140e-04f, -1.020860497e-04f, -1.020133152e-04f, -1.019404105e-04f,
+-1.018673358e-04f, -1.017940912e-04f, -1.017206769e-04f, -1.016470930e-04f, -1.015733396e-04f, -1.014994170e-04f, -1.014253252e-04f, -1.013510643e-04f, -1.012766346e-04f, -1.012020361e-04f,
+-1.011272691e-04f, -1.010523336e-04f, -1.009772298e-04f, -1.009019578e-04f, -1.008265178e-04f, -1.007509100e-04f, -1.006751344e-04f, -1.005991913e-04f, -1.005230807e-04f, -1.004468028e-04f,
+-1.003703578e-04f, -1.002937458e-04f, -1.002169670e-04f, -1.001400215e-04f, -1.000629094e-04f, -9.998563086e-05f, -9.990818611e-05f, -9.983057525e-05f, -9.975279843e-05f, -9.967485580e-05f,
+-9.959674751e-05f, -9.951847370e-05f, -9.944003454e-05f, -9.936143017e-05f, -9.928266073e-05f, -9.920372638e-05f, -9.912462728e-05f, -9.904536356e-05f, -9.896593539e-05f, -9.888634291e-05f,
+-9.880658627e-05f, -9.872666564e-05f, -9.864658115e-05f, -9.856633297e-05f, -9.848592124e-05f, -9.840534613e-05f, -9.832460777e-05f, -9.824370634e-05f, -9.816264197e-05f, -9.808141483e-05f,
+-9.800002507e-05f, -9.791847284e-05f, -9.783675830e-05f, -9.775488161e-05f, -9.767284291e-05f, -9.759064238e-05f, -9.750828015e-05f, -9.742575640e-05f, -9.734307127e-05f, -9.726022492e-05f,
+-9.717721752e-05f, -9.709404921e-05f, -9.701072015e-05f, -9.692723051e-05f, -9.684358045e-05f, -9.675977011e-05f, -9.667579966e-05f, -9.659166926e-05f, -9.650737906e-05f, -9.642292924e-05f,
+-9.633831994e-05f, -9.625355132e-05f, -9.616862356e-05f, -9.608353680e-05f, -9.599829121e-05f, -9.591288696e-05f, -9.582732419e-05f, -9.574160308e-05f, -9.565572378e-05f, -9.556968646e-05f,
+-9.548349128e-05f, -9.539713841e-05f, -9.531062800e-05f, -9.522396022e-05f, -9.513713523e-05f, -9.505015320e-05f, -9.496301429e-05f, -9.487571866e-05f, -9.478826648e-05f, -9.470065792e-05f,
+-9.461289314e-05f, -9.452497230e-05f, -9.443689557e-05f, -9.434866312e-05f, -9.426027511e-05f, -9.417173171e-05f, -9.408303308e-05f, -9.399417940e-05f, -9.390517082e-05f, -9.381600752e-05f,
+-9.372668967e-05f, -9.363721742e-05f, -9.354759096e-05f, -9.345781044e-05f, -9.336787605e-05f, -9.327778793e-05f, -9.318754628e-05f, -9.309715124e-05f, -9.300660301e-05f, -9.291590173e-05f,
+-9.282504759e-05f, -9.273404075e-05f, -9.264288139e-05f, -9.255156968e-05f, -9.246010578e-05f, -9.236848987e-05f, -9.227672212e-05f, -9.218480270e-05f, -9.209273179e-05f, -9.200050955e-05f,
+-9.190813616e-05f, -9.181561180e-05f, -9.172293663e-05f, -9.163011082e-05f, -9.153713456e-05f, -9.144400802e-05f, -9.135073136e-05f, -9.125730477e-05f, -9.116372842e-05f, -9.107000248e-05f,
+-9.097612713e-05f, -9.088210255e-05f, -9.078792890e-05f, -9.069360637e-05f, -9.059913513e-05f, -9.050451536e-05f, -9.040974724e-05f, -9.031483093e-05f, -9.021976662e-05f, -9.012455449e-05f,
+-9.002919471e-05f, -8.993368746e-05f, -8.983803292e-05f, -8.974223127e-05f, -8.964628268e-05f, -8.955018733e-05f, -8.945394541e-05f, -8.935755709e-05f, -8.926102255e-05f, -8.916434197e-05f,
+-8.906751554e-05f, -8.897054342e-05f, -8.887342581e-05f, -8.877616287e-05f, -8.867875480e-05f, -8.858120178e-05f, -8.848350397e-05f, -8.838566158e-05f, -8.828767477e-05f, -8.818954374e-05f,
+-8.809126865e-05f, -8.799284970e-05f, -8.789428707e-05f, -8.779558094e-05f, -8.769673150e-05f, -8.759773892e-05f, -8.749860339e-05f, -8.739932510e-05f, -8.729990422e-05f, -8.720034095e-05f,
+-8.710063546e-05f, -8.700078795e-05f, -8.690079860e-05f, -8.680066759e-05f, -8.670039510e-05f, -8.659998133e-05f, -8.649942646e-05f, -8.639873068e-05f, -8.629789417e-05f, -8.619691712e-05f,
+-8.609579971e-05f, -8.599454214e-05f, -8.589314458e-05f, -8.579160724e-05f, -8.568993028e-05f, -8.558811392e-05f, -8.548615832e-05f, -8.538406369e-05f, -8.528183020e-05f, -8.517945805e-05f,
+-8.507694743e-05f, -8.497429852e-05f, -8.487151152e-05f, -8.476858661e-05f, -8.466552399e-05f, -8.456232384e-05f, -8.445898636e-05f, -8.435551174e-05f, -8.425190016e-05f, -8.414815182e-05f,
+-8.404426691e-05f, -8.394024562e-05f, -8.383608815e-05f, -8.373179468e-05f, -8.362736541e-05f, -8.352280052e-05f, -8.341810022e-05f, -8.331326470e-05f, -8.320829414e-05f, -8.310318874e-05f,
+-8.299794870e-05f, -8.289257421e-05f, -8.278706546e-05f, -8.268142264e-05f, -8.257564596e-05f, -8.246973560e-05f, -8.236369176e-05f, -8.225751464e-05f, -8.215120443e-05f, -8.204476132e-05f,
+-8.193818552e-05f, -8.183147721e-05f, -8.172463659e-05f, -8.161766387e-05f, -8.151055923e-05f, -8.140332288e-05f, -8.129595500e-05f, -8.118845580e-05f, -8.108082548e-05f, -8.097306423e-05f,
+-8.086517224e-05f, -8.075714973e-05f, -8.064899688e-05f, -8.054071389e-05f, -8.043230097e-05f, -8.032375831e-05f, -8.021508611e-05f, -8.010628456e-05f, -7.999735388e-05f, -7.988829426e-05f,
+-7.977910589e-05f, -7.966978898e-05f, -7.956034373e-05f, -7.945077035e-05f, -7.934106902e-05f, -7.923123995e-05f, -7.912128334e-05f, -7.901119939e-05f, -7.890098831e-05f, -7.879065030e-05f,
+-7.868018555e-05f, -7.856959428e-05f, -7.845887667e-05f, -7.834803295e-05f, -7.823706329e-05f, -7.812596792e-05f, -7.801474703e-05f, -7.790340083e-05f, -7.779192952e-05f, -7.768033330e-05f,
+-7.756861238e-05f, -7.745676696e-05f, -7.734479725e-05f, -7.723270345e-05f, -7.712048576e-05f, -7.700814439e-05f, -7.689567955e-05f, -7.678309144e-05f, -7.667038026e-05f, -7.655754623e-05f,
+-7.644458954e-05f, -7.633151040e-05f, -7.621830903e-05f, -7.610498562e-05f, -7.599154038e-05f, -7.587797352e-05f, -7.576428525e-05f, -7.565047577e-05f, -7.553654529e-05f, -7.542249402e-05f,
+-7.530832217e-05f, -7.519402993e-05f, -7.507961754e-05f, -7.496508518e-05f, -7.485043307e-05f, -7.473566142e-05f, -7.462077043e-05f, -7.450576032e-05f, -7.439063130e-05f, -7.427538357e-05f,
+-7.416001734e-05f, -7.404453283e-05f, -7.392893024e-05f, -7.381320979e-05f, -7.369737168e-05f, -7.358141612e-05f, -7.346534334e-05f, -7.334915352e-05f, -7.323284690e-05f, -7.311642367e-05f,
+-7.299988406e-05f, -7.288322827e-05f, -7.276645651e-05f, -7.264956900e-05f, -7.253256595e-05f, -7.241544756e-05f, -7.229821407e-05f, -7.218086566e-05f, -7.206340257e-05f, -7.194582500e-05f,
+-7.182813317e-05f, -7.171032728e-05f, -7.159240756e-05f, -7.147437421e-05f, -7.135622746e-05f, -7.123796751e-05f, -7.111959458e-05f, -7.100110888e-05f, -7.088251063e-05f, -7.076380005e-05f,
+-7.064497734e-05f, -7.052604273e-05f, -7.040699643e-05f, -7.028783865e-05f, -7.016856961e-05f, -7.004918953e-05f, -6.992969863e-05f, -6.981009711e-05f, -6.969038520e-05f, -6.957056311e-05f,
+-6.945063106e-05f, -6.933058926e-05f, -6.921043794e-05f, -6.909017731e-05f, -6.896980759e-05f, -6.884932899e-05f, -6.872874174e-05f, -6.860804605e-05f, -6.848724214e-05f, -6.836633022e-05f,
+-6.824531053e-05f, -6.812418327e-05f, -6.800294866e-05f, -6.788160693e-05f, -6.776015829e-05f, -6.763860296e-05f, -6.751694116e-05f, -6.739517312e-05f, -6.727329904e-05f, -6.715131916e-05f,
+-6.702923369e-05f, -6.690704285e-05f, -6.678474686e-05f, -6.666234594e-05f, -6.653984032e-05f, -6.641723021e-05f, -6.629451584e-05f, -6.617169743e-05f, -6.604877519e-05f, -6.592574935e-05f,
+-6.580262014e-05f, -6.567938777e-05f, -6.555605247e-05f, -6.543261445e-05f, -6.530907395e-05f, -6.518543117e-05f, -6.506168636e-05f, -6.493783972e-05f, -6.481389149e-05f, -6.468984188e-05f,
+-6.456569112e-05f, -6.444143943e-05f, -6.431708704e-05f, -6.419263417e-05f, -6.406808104e-05f, -6.394342788e-05f, -6.381867491e-05f, -6.369382236e-05f, -6.356887045e-05f, -6.344381941e-05f,
+-6.331866946e-05f, -6.319342082e-05f, -6.306807372e-05f, -6.294262840e-05f, -6.281708506e-05f, -6.269144394e-05f, -6.256570527e-05f, -6.243986926e-05f, -6.231393616e-05f, -6.218790617e-05f,
+-6.206177953e-05f, -6.193555647e-05f, -6.180923721e-05f, -6.168282198e-05f, -6.155631100e-05f, -6.142970451e-05f, -6.130300272e-05f, -6.117620588e-05f, -6.104931420e-05f, -6.092232791e-05f,
+-6.079524724e-05f, -6.066807243e-05f, -6.054080369e-05f, -6.041344125e-05f, -6.028598535e-05f, -6.015843621e-05f, -6.003079406e-05f, -5.990305914e-05f, -5.977523166e-05f, -5.964731186e-05f,
+-5.951929996e-05f, -5.939119621e-05f, -5.926300082e-05f, -5.913471402e-05f, -5.900633606e-05f, -5.887786714e-05f, -5.874930752e-05f, -5.862065741e-05f, -5.849191705e-05f, -5.836308666e-05f,
+-5.823416649e-05f, -5.810515675e-05f, -5.797605768e-05f, -5.784686952e-05f, -5.771759248e-05f, -5.758822681e-05f, -5.745877273e-05f, -5.732923048e-05f, -5.719960029e-05f, -5.706988239e-05f,
+-5.694007701e-05f, -5.681018439e-05f, -5.668020475e-05f, -5.655013833e-05f, -5.641998536e-05f, -5.628974608e-05f, -5.615942071e-05f, -5.602900949e-05f, -5.589851266e-05f, -5.576793044e-05f,
+-5.563726308e-05f, -5.550651079e-05f, -5.537567382e-05f, -5.524475240e-05f, -5.511374677e-05f, -5.498265715e-05f, -5.485148379e-05f, -5.472022691e-05f, -5.458888675e-05f, -5.445746355e-05f,
+-5.432595753e-05f, -5.419436894e-05f, -5.406269801e-05f, -5.393094498e-05f, -5.379911007e-05f, -5.366719352e-05f, -5.353519558e-05f, -5.340311647e-05f, -5.327095643e-05f, -5.313871570e-05f,
+-5.300639451e-05f, -5.287399309e-05f, -5.274151169e-05f, -5.260895054e-05f, -5.247630987e-05f, -5.234358993e-05f, -5.221079095e-05f, -5.207791316e-05f, -5.194495680e-05f, -5.181192212e-05f,
+-5.167880933e-05f, -5.154561870e-05f, -5.141235044e-05f, -5.127900480e-05f, -5.114558201e-05f, -5.101208232e-05f, -5.087850595e-05f, -5.074485316e-05f, -5.061112417e-05f, -5.047731922e-05f,
+-5.034343855e-05f, -5.020948241e-05f, -5.007545102e-05f, -4.994134463e-05f, -4.980716347e-05f, -4.967290779e-05f, -4.953857781e-05f, -4.940417379e-05f, -4.926969596e-05f, -4.913514456e-05f,
+-4.900051983e-05f, -4.886582200e-05f, -4.873105133e-05f, -4.859620803e-05f, -4.846129237e-05f, -4.832630457e-05f, -4.819124487e-05f, -4.805611352e-05f, -4.792091075e-05f, -4.778563681e-05f,
+-4.765029194e-05f, -4.751487637e-05f, -4.737939035e-05f, -4.724383411e-05f, -4.710820790e-05f, -4.697251196e-05f, -4.683674653e-05f, -4.670091185e-05f, -4.656500816e-05f, -4.642903570e-05f,
+-4.629299471e-05f, -4.615688544e-05f, -4.602070812e-05f, -4.588446300e-05f, -4.574815032e-05f, -4.561177032e-05f, -4.547532324e-05f, -4.533880933e-05f, -4.520222882e-05f, -4.506558196e-05f,
+-4.492886899e-05f, -4.479209015e-05f, -4.465524569e-05f, -4.451833585e-05f, -4.438136086e-05f, -4.424432098e-05f, -4.410721644e-05f, -4.397004749e-05f, -4.383281437e-05f, -4.369551732e-05f,
+-4.355815660e-05f, -4.342073243e-05f, -4.328324506e-05f, -4.314569474e-05f, -4.300808171e-05f, -4.287040622e-05f, -4.273266850e-05f, -4.259486880e-05f, -4.245700737e-05f, -4.231908445e-05f,
+-4.218110028e-05f, -4.204305510e-05f, -4.190494917e-05f, -4.176678272e-05f, -4.162855600e-05f, -4.149026925e-05f, -4.135192272e-05f, -4.121351665e-05f, -4.107505129e-05f, -4.093652688e-05f,
+-4.079794367e-05f, -4.065930190e-05f, -4.052060181e-05f, -4.038184366e-05f, -4.024302768e-05f, -4.010415412e-05f, -3.996522324e-05f, -3.982623526e-05f, -3.968719044e-05f, -3.954808902e-05f,
+-3.940893125e-05f, -3.926971738e-05f, -3.913044764e-05f, -3.899112229e-05f, -3.885174158e-05f, -3.871230574e-05f, -3.857281502e-05f, -3.843326967e-05f, -3.829366994e-05f, -3.815401607e-05f,
+-3.801430831e-05f, -3.787454690e-05f, -3.773473210e-05f, -3.759486414e-05f, -3.745494327e-05f, -3.731496975e-05f, -3.717494381e-05f, -3.703486571e-05f, -3.689473569e-05f, -3.675455400e-05f,
+-3.661432088e-05f, -3.647403659e-05f, -3.633370136e-05f, -3.619331545e-05f, -3.605287910e-05f, -3.591239257e-05f, -3.577185609e-05f, -3.563126992e-05f, -3.549063431e-05f, -3.534994949e-05f,
+-3.520921572e-05f, -3.506843325e-05f, -3.492760233e-05f, -3.478672319e-05f, -3.464579610e-05f, -3.450482129e-05f, -3.436379902e-05f, -3.422272954e-05f, -3.408161308e-05f, -3.394044991e-05f,
+-3.379924026e-05f, -3.365798439e-05f, -3.351668255e-05f, -3.337533498e-05f, -3.323394194e-05f, -3.309250366e-05f, -3.295102041e-05f, -3.280949242e-05f, -3.266791995e-05f, -3.252630324e-05f,
+-3.238464255e-05f, -3.224293813e-05f, -3.210119021e-05f, -3.195939906e-05f, -3.181756492e-05f, -3.167568804e-05f, -3.153376866e-05f, -3.139180705e-05f, -3.124980344e-05f, -3.110775809e-05f,
+-3.096567124e-05f, -3.082354315e-05f, -3.068137406e-05f, -3.053916423e-05f, -3.039691390e-05f, -3.025462333e-05f, -3.011229276e-05f, -2.996992244e-05f, -2.982751262e-05f, -2.968506356e-05f,
+-2.954257550e-05f, -2.940004869e-05f, -2.925748338e-05f, -2.911487983e-05f, -2.897223828e-05f, -2.882955898e-05f, -2.868684218e-05f, -2.854408813e-05f, -2.840129709e-05f, -2.825846930e-05f,
+-2.811560501e-05f, -2.797270448e-05f, -2.782976795e-05f, -2.768679568e-05f, -2.754378791e-05f, -2.740074489e-05f, -2.725766688e-05f, -2.711455413e-05f, -2.697140689e-05f, -2.682822540e-05f,
+-2.668500992e-05f, -2.654176070e-05f, -2.639847799e-05f, -2.625516204e-05f, -2.611181310e-05f, -2.596843142e-05f, -2.582501726e-05f, -2.568157086e-05f, -2.553809247e-05f, -2.539458236e-05f,
+-2.525104075e-05f, -2.510746792e-05f, -2.496386411e-05f, -2.482022957e-05f, -2.467656454e-05f, -2.453286929e-05f, -2.438914407e-05f, -2.424538912e-05f, -2.410160470e-05f, -2.395779105e-05f,
+-2.381394844e-05f, -2.367007710e-05f, -2.352617730e-05f, -2.338224928e-05f, -2.323829329e-05f, -2.309430959e-05f, -2.295029843e-05f, -2.280626006e-05f, -2.266219473e-05f, -2.251810269e-05f,
+-2.237398419e-05f, -2.222983949e-05f, -2.208566884e-05f, -2.194147249e-05f, -2.179725069e-05f, -2.165300369e-05f, -2.150873175e-05f, -2.136443511e-05f, -2.122011403e-05f, -2.107576875e-05f,
+-2.093139954e-05f, -2.078700665e-05f, -2.064259031e-05f, -2.049815080e-05f, -2.035368835e-05f, -2.020920323e-05f, -2.006469568e-05f, -1.992016595e-05f, -1.977561430e-05f, -1.963104097e-05f,
+-1.948644623e-05f, -1.934183032e-05f, -1.919719350e-05f, -1.905253601e-05f, -1.890785811e-05f, -1.876316006e-05f, -1.861844209e-05f, -1.847370447e-05f, -1.832894745e-05f, -1.818417127e-05f,
+-1.803937620e-05f, -1.789456248e-05f, -1.774973037e-05f, -1.760488012e-05f, -1.746001197e-05f, -1.731512619e-05f, -1.717022302e-05f, -1.702530272e-05f, -1.688036554e-05f, -1.673541173e-05f,
+-1.659044154e-05f, -1.644545523e-05f, -1.630045305e-05f, -1.615543524e-05f, -1.601040207e-05f, -1.586535378e-05f, -1.572029063e-05f, -1.557521287e-05f, -1.543012075e-05f, -1.528501452e-05f,
+-1.513989444e-05f, -1.499476076e-05f, -1.484961373e-05f, -1.470445360e-05f, -1.455928062e-05f, -1.441409506e-05f, -1.426889715e-05f, -1.412368715e-05f, -1.397846532e-05f, -1.383323190e-05f,
+-1.368798716e-05f, -1.354273133e-05f, -1.339746468e-05f, -1.325218745e-05f, -1.310689990e-05f, -1.296160228e-05f, -1.281629484e-05f, -1.267097784e-05f, -1.252565152e-05f, -1.238031614e-05f,
+-1.223497196e-05f, -1.208961921e-05f, -1.194425816e-05f, -1.179888906e-05f, -1.165351216e-05f, -1.150812772e-05f, -1.136273597e-05f, -1.121733718e-05f, -1.107193160e-05f, -1.092651949e-05f,
+-1.078110108e-05f, -1.063567664e-05f, -1.049024642e-05f, -1.034481067e-05f, -1.019936963e-05f, -1.005392358e-05f, -9.908472743e-06f, -9.763017387e-06f, -9.617557762e-06f, -9.472094118e-06f,
+-9.326626708e-06f, -9.181155783e-06f, -9.035681597e-06f, -8.890204399e-06f, -8.744724444e-06f, -8.599241982e-06f, -8.453757265e-06f, -8.308270546e-06f, -8.162782076e-06f, -8.017292107e-06f,
+-7.871800891e-06f, -7.726308680e-06f, -7.580815726e-06f, -7.435322279e-06f, -7.289828593e-06f, -7.144334919e-06f, -6.998841508e-06f, -6.853348612e-06f, -6.707856484e-06f, -6.562365373e-06f,
+-6.416875534e-06f, -6.271387215e-06f, -6.125900671e-06f, -5.980416151e-06f, -5.834933907e-06f, -5.689454192e-06f, -5.543977256e-06f, -5.398503350e-06f, -5.253032727e-06f, -5.107565638e-06f,
+-4.962102334e-06f, -4.816643066e-06f, -4.671188085e-06f, -4.525737644e-06f, -4.380291993e-06f, -4.234851383e-06f, -4.089416066e-06f, -3.943986293e-06f, -3.798562315e-06f, -3.653144382e-06f,
+-3.507732747e-06f, -3.362327659e-06f, -3.216929371e-06f, -3.071538133e-06f, -2.926154196e-06f, -2.780777810e-06f, -2.635409228e-06f, -2.490048699e-06f, -2.344696474e-06f, -2.199352804e-06f,
+-2.054017940e-06f, -1.908692133e-06f, -1.763375632e-06f, -1.618068690e-06f, -1.472771556e-06f, -1.327484480e-06f, -1.182207714e-06f, -1.036941507e-06f, -8.916861111e-07f, -7.464417753e-07f,
+-6.012087503e-07f, -4.559872865e-07f, -3.107776341e-07f, -1.655800432e-07f, -2.039476411e-08f, 1.247779532e-07f, 2.699378585e-07f, 4.150847019e-07f, 5.602182334e-07f, 7.053382030e-07f,
+8.504443608e-07f, 9.955364570e-07f, 1.140614242e-06f, 1.285677465e-06f, 1.430725878e-06f, 1.575759230e-06f, 1.720777272e-06f, 1.865779755e-06f, 2.010766428e-06f, 2.155737042e-06f,
+2.300691348e-06f, 2.445629097e-06f, 2.590550039e-06f, 2.735453924e-06f, 2.880340505e-06f, 3.025209531e-06f, 3.170060753e-06f, 3.314893923e-06f, 3.459708791e-06f, 3.604505109e-06f,
+3.749282627e-06f, 3.894041096e-06f, 4.038780269e-06f, 4.183499895e-06f, 4.328199727e-06f, 4.472879516e-06f, 4.617539013e-06f, 4.762177970e-06f, 4.906796138e-06f, 5.051393269e-06f,
+5.195969114e-06f, 5.340523426e-06f, 5.485055955e-06f, 5.629566455e-06f, 5.774054676e-06f, 5.918520371e-06f, 6.062963292e-06f, 6.207383190e-06f, 6.351779818e-06f, 6.496152929e-06f,
+6.640502274e-06f, 6.784827605e-06f, 6.929128676e-06f, 7.073405238e-06f, 7.217657045e-06f, 7.361883848e-06f, 7.506085400e-06f, 7.650261454e-06f, 7.794411763e-06f, 7.938536080e-06f,
+8.082634157e-06f, 8.226705748e-06f, 8.370750605e-06f, 8.514768482e-06f, 8.658759132e-06f, 8.802722308e-06f, 8.946657763e-06f, 9.090565251e-06f, 9.234444525e-06f, 9.378295339e-06f,
+9.522117447e-06f, 9.665910601e-06f, 9.809674556e-06f, 9.953409065e-06f, 1.009711388e-05f, 1.024078876e-05f, 1.038443346e-05f, 1.052804773e-05f, 1.067163132e-05f, 1.081518399e-05f,
+1.095870550e-05f, 1.110219559e-05f, 1.124565402e-05f, 1.138908055e-05f, 1.153247493e-05f, 1.167583692e-05f, 1.181916627e-05f, 1.196246274e-05f, 1.210572607e-05f, 1.224895603e-05f,
+1.239215237e-05f, 1.253531485e-05f, 1.267844322e-05f, 1.282153724e-05f, 1.296459665e-05f, 1.310762123e-05f, 1.325061071e-05f, 1.339356487e-05f, 1.353648345e-05f, 1.367936621e-05f,
+1.382221291e-05f, 1.396502330e-05f, 1.410779713e-05f, 1.425053418e-05f, 1.439323418e-05f, 1.453589690e-05f, 1.467852209e-05f, 1.482110951e-05f, 1.496365892e-05f, 1.510617007e-05f,
+1.524864272e-05f, 1.539107663e-05f, 1.553347155e-05f, 1.567582724e-05f, 1.581814346e-05f, 1.596041997e-05f, 1.610265652e-05f, 1.624485286e-05f, 1.638700877e-05f, 1.652912399e-05f,
+1.667119828e-05f, 1.681323140e-05f, 1.695522311e-05f, 1.709717317e-05f, 1.723908133e-05f, 1.738094735e-05f, 1.752277099e-05f, 1.766455201e-05f, 1.780629017e-05f, 1.794798522e-05f,
+1.808963693e-05f, 1.823124505e-05f, 1.837280934e-05f, 1.851432956e-05f, 1.865580547e-05f, 1.879723683e-05f, 1.893862340e-05f, 1.907996494e-05f, 1.922126120e-05f, 1.936251195e-05f,
+1.950371694e-05f, 1.964487594e-05f, 1.978598870e-05f, 1.992705498e-05f, 2.006807456e-05f, 2.020904717e-05f, 2.034997259e-05f, 2.049085058e-05f, 2.063168089e-05f, 2.077246329e-05f,
+2.091319754e-05f, 2.105388339e-05f, 2.119452061e-05f, 2.133510896e-05f, 2.147564820e-05f, 2.161613809e-05f, 2.175657840e-05f, 2.189696888e-05f, 2.203730929e-05f, 2.217759940e-05f,
+2.231783897e-05f, 2.245802776e-05f, 2.259816553e-05f, 2.273825204e-05f, 2.287828706e-05f, 2.301827035e-05f, 2.315820167e-05f, 2.329808079e-05f, 2.343790746e-05f, 2.357768144e-05f,
+2.371740251e-05f, 2.385707042e-05f, 2.399668494e-05f, 2.413624583e-05f, 2.427575285e-05f, 2.441520577e-05f, 2.455460435e-05f, 2.469394835e-05f, 2.483323754e-05f, 2.497247168e-05f,
+2.511165053e-05f, 2.525077387e-05f, 2.538984144e-05f, 2.552885302e-05f, 2.566780838e-05f, 2.580670727e-05f, 2.594554946e-05f, 2.608433472e-05f, 2.622306280e-05f, 2.636173349e-05f,
+2.650034653e-05f, 2.663890170e-05f, 2.677739875e-05f, 2.691583747e-05f, 2.705421760e-05f, 2.719253893e-05f, 2.733080120e-05f, 2.746900420e-05f, 2.760714768e-05f, 2.774523141e-05f,
+2.788325516e-05f, 2.802121869e-05f, 2.815912177e-05f, 2.829696417e-05f, 2.843474566e-05f, 2.857246599e-05f, 2.871012495e-05f, 2.884772229e-05f, 2.898525778e-05f, 2.912273119e-05f,
+2.926014229e-05f, 2.939749084e-05f, 2.953477661e-05f, 2.967199938e-05f, 2.980915891e-05f, 2.994625496e-05f, 3.008328731e-05f, 3.022025572e-05f, 3.035715996e-05f, 3.049399981e-05f,
+3.063077502e-05f, 3.076748538e-05f, 3.090413064e-05f, 3.104071058e-05f, 3.117722496e-05f, 3.131367357e-05f, 3.145005615e-05f, 3.158637250e-05f, 3.172262237e-05f, 3.185880553e-05f,
+3.199492176e-05f, 3.213097083e-05f, 3.226695250e-05f, 3.240286655e-05f, 3.253871275e-05f, 3.267449087e-05f, 3.281020067e-05f, 3.294584194e-05f, 3.308141444e-05f, 3.321691794e-05f,
+3.335235222e-05f, 3.348771705e-05f, 3.362301219e-05f, 3.375823743e-05f, 3.389339252e-05f, 3.402847725e-05f, 3.416349139e-05f, 3.429843471e-05f, 3.443330699e-05f, 3.456810798e-05f,
+3.470283748e-05f, 3.483749525e-05f, 3.497208106e-05f, 3.510659469e-05f, 3.524103592e-05f, 3.537540450e-05f, 3.550970023e-05f, 3.564392287e-05f, 3.577807220e-05f, 3.591214799e-05f,
+3.604615002e-05f, 3.618007806e-05f, 3.631393188e-05f, 3.644771126e-05f, 3.658141598e-05f, 3.671504581e-05f, 3.684860053e-05f, 3.698207990e-05f, 3.711548371e-05f, 3.724881174e-05f,
+3.738206375e-05f, 3.751523953e-05f, 3.764833885e-05f, 3.778136149e-05f, 3.791430722e-05f, 3.804717582e-05f, 3.817996707e-05f, 3.831268074e-05f, 3.844531662e-05f, 3.857787447e-05f,
+3.871035408e-05f, 3.884275522e-05f, 3.897507768e-05f, 3.910732122e-05f, 3.923948563e-05f, 3.937157069e-05f, 3.950357617e-05f, 3.963550185e-05f, 3.976734752e-05f, 3.989911294e-05f,
+4.003079791e-05f, 4.016240219e-05f, 4.029392557e-05f, 4.042536782e-05f, 4.055672874e-05f, 4.068800809e-05f, 4.081920565e-05f, 4.095032122e-05f, 4.108135456e-05f, 4.121230545e-05f,
+4.134317369e-05f, 4.147395904e-05f, 4.160466130e-05f, 4.173528023e-05f, 4.186581563e-05f, 4.199626727e-05f, 4.212663493e-05f, 4.225691840e-05f, 4.238711746e-05f, 4.251723190e-05f,
+4.264726148e-05f, 4.277720600e-05f, 4.290706524e-05f, 4.303683897e-05f, 4.316652700e-05f, 4.329612908e-05f, 4.342564502e-05f, 4.355507460e-05f, 4.368441758e-05f, 4.381367377e-05f,
+4.394284295e-05f, 4.407192489e-05f, 4.420091939e-05f, 4.432982622e-05f, 4.445864517e-05f, 4.458737604e-05f, 4.471601859e-05f, 4.484457262e-05f, 4.497303791e-05f, 4.510141425e-05f,
+4.522970143e-05f, 4.535789922e-05f, 4.548600742e-05f, 4.561402580e-05f, 4.574195417e-05f, 4.586979230e-05f, 4.599753998e-05f, 4.612519700e-05f, 4.625276314e-05f, 4.638023819e-05f,
+4.650762195e-05f, 4.663491419e-05f, 4.676211470e-05f, 4.688922328e-05f, 4.701623970e-05f, 4.714316377e-05f, 4.726999526e-05f, 4.739673397e-05f, 4.752337968e-05f, 4.764993219e-05f,
+4.777639128e-05f, 4.790275674e-05f, 4.802902836e-05f, 4.815520593e-05f, 4.828128924e-05f, 4.840727809e-05f, 4.853317225e-05f, 4.865897153e-05f, 4.878467571e-05f, 4.891028458e-05f,
+4.903579794e-05f, 4.916121557e-05f, 4.928653727e-05f, 4.941176283e-05f, 4.953689204e-05f, 4.966192468e-05f, 4.978686057e-05f, 4.991169947e-05f, 5.003644120e-05f, 5.016108554e-05f,
+5.028563228e-05f, 5.041008122e-05f, 5.053443215e-05f, 5.065868486e-05f, 5.078283915e-05f, 5.090689481e-05f, 5.103085164e-05f, 5.115470942e-05f, 5.127846796e-05f, 5.140212704e-05f,
+5.152568647e-05f, 5.164914603e-05f, 5.177250553e-05f, 5.189576476e-05f, 5.201892350e-05f, 5.214198157e-05f, 5.226493875e-05f, 5.238779484e-05f, 5.251054964e-05f, 5.263320295e-05f,
+5.275575455e-05f, 5.287820425e-05f, 5.300055184e-05f, 5.312279713e-05f, 5.324493990e-05f, 5.336697996e-05f, 5.348891710e-05f, 5.361075113e-05f, 5.373248183e-05f, 5.385410902e-05f,
+5.397563248e-05f, 5.409705201e-05f, 5.421836743e-05f, 5.433957851e-05f, 5.446068507e-05f, 5.458168690e-05f, 5.470258380e-05f, 5.482337558e-05f, 5.494406203e-05f, 5.506464295e-05f,
+5.518511815e-05f, 5.530548742e-05f, 5.542575056e-05f, 5.554590738e-05f, 5.566595768e-05f, 5.578590126e-05f, 5.590573792e-05f, 5.602546747e-05f, 5.614508970e-05f, 5.626460442e-05f,
+5.638401142e-05f, 5.650331052e-05f, 5.662250152e-05f, 5.674158422e-05f, 5.686055841e-05f, 5.697942392e-05f, 5.709818053e-05f, 5.721682806e-05f, 5.733536631e-05f, 5.745379508e-05f,
+5.757211418e-05f, 5.769032341e-05f, 5.780842257e-05f, 5.792641148e-05f, 5.804428994e-05f, 5.816205775e-05f, 5.827971472e-05f, 5.839726066e-05f, 5.851469537e-05f, 5.863201865e-05f,
+5.874923032e-05f, 5.886633019e-05f, 5.898331805e-05f, 5.910019372e-05f, 5.921695700e-05f, 5.933360771e-05f, 5.945014564e-05f, 5.956657062e-05f, 5.968288243e-05f, 5.979908091e-05f,
+5.991516585e-05f, 6.003113706e-05f, 6.014699435e-05f, 6.026273753e-05f, 6.037836642e-05f, 6.049388082e-05f, 6.060928053e-05f, 6.072456538e-05f, 6.083973518e-05f, 6.095478972e-05f,
+6.106972883e-05f, 6.118455231e-05f, 6.129925998e-05f, 6.141385165e-05f, 6.152832713e-05f, 6.164268623e-05f, 6.175692876e-05f, 6.187105454e-05f, 6.198506338e-05f, 6.209895510e-05f,
+6.221272949e-05f, 6.232638639e-05f, 6.243992560e-05f, 6.255334693e-05f, 6.266665021e-05f, 6.277983524e-05f, 6.289290184e-05f, 6.300584982e-05f, 6.311867900e-05f, 6.323138920e-05f,
+6.334398022e-05f, 6.345645189e-05f, 6.356880402e-05f, 6.368103643e-05f, 6.379314893e-05f, 6.390514133e-05f, 6.401701347e-05f, 6.412876514e-05f, 6.424039618e-05f, 6.435190639e-05f,
+6.446329560e-05f, 6.457456362e-05f, 6.468571028e-05f, 6.479673538e-05f, 6.490763875e-05f, 6.501842020e-05f, 6.512907956e-05f, 6.523961664e-05f, 6.535003127e-05f, 6.546032326e-05f,
+6.557049244e-05f, 6.568053862e-05f, 6.579046162e-05f, 6.590026126e-05f, 6.600993737e-05f, 6.611948977e-05f, 6.622891827e-05f, 6.633822271e-05f, 6.644740289e-05f, 6.655645864e-05f,
+6.666538979e-05f, 6.677419616e-05f, 6.688287756e-05f, 6.699143383e-05f, 6.709986478e-05f, 6.720817025e-05f, 6.731635004e-05f, 6.742440399e-05f, 6.753233192e-05f, 6.764013365e-05f,
+6.774780901e-05f, 6.785535783e-05f, 6.796277992e-05f, 6.807007512e-05f, 6.817724325e-05f, 6.828428413e-05f, 6.839119759e-05f, 6.849798346e-05f, 6.860464156e-05f, 6.871117172e-05f,
+6.881757377e-05f, 6.892384753e-05f, 6.902999283e-05f, 6.913600950e-05f, 6.924189736e-05f, 6.934765625e-05f, 6.945328599e-05f, 6.955878641e-05f, 6.966415734e-05f, 6.976939861e-05f,
+6.987451005e-05f, 6.997949149e-05f, 7.008434275e-05f, 7.018906367e-05f, 7.029365407e-05f, 7.039811380e-05f, 7.050244267e-05f, 7.060664052e-05f, 7.071070717e-05f, 7.081464248e-05f,
+7.091844625e-05f, 7.102211833e-05f, 7.112565854e-05f, 7.122906673e-05f, 7.133234272e-05f, 7.143548634e-05f, 7.153849743e-05f, 7.164137582e-05f, 7.174412134e-05f, 7.184673384e-05f,
+7.194921313e-05f, 7.205155906e-05f, 7.215377147e-05f, 7.225585018e-05f, 7.235779503e-05f, 7.245960586e-05f, 7.256128250e-05f, 7.266282479e-05f, 7.276423256e-05f, 7.286550565e-05f,
+7.296664390e-05f, 7.306764714e-05f, 7.316851521e-05f, 7.326924795e-05f, 7.336984520e-05f, 7.347030678e-05f, 7.357063255e-05f, 7.367082234e-05f, 7.377087598e-05f, 7.387079332e-05f,
+7.397057420e-05f, 7.407021845e-05f, 7.416972592e-05f, 7.426909644e-05f, 7.436832985e-05f, 7.446742600e-05f, 7.456638472e-05f, 7.466520586e-05f, 7.476388925e-05f, 7.486243474e-05f,
+7.496084217e-05f, 7.505911138e-05f, 7.515724222e-05f, 7.525523452e-05f, 7.535308812e-05f, 7.545080288e-05f, 7.554837863e-05f, 7.564581522e-05f, 7.574311249e-05f, 7.584027028e-05f,
+7.593728844e-05f, 7.603416681e-05f, 7.613090525e-05f, 7.622750358e-05f, 7.632396166e-05f, 7.642027933e-05f, 7.651645644e-05f, 7.661249283e-05f, 7.670838836e-05f, 7.680414286e-05f,
+7.689975618e-05f, 7.699522817e-05f, 7.709055868e-05f, 7.718574755e-05f, 7.728079464e-05f, 7.737569978e-05f, 7.747046284e-05f, 7.756508364e-05f, 7.765956206e-05f, 7.775389793e-05f,
+7.784809110e-05f, 7.794214142e-05f, 7.803604875e-05f, 7.812981293e-05f, 7.822343381e-05f, 7.831691125e-05f, 7.841024509e-05f, 7.850343518e-05f, 7.859648138e-05f, 7.868938354e-05f,
+7.878214150e-05f, 7.887475513e-05f, 7.896722428e-05f, 7.905954879e-05f, 7.915172852e-05f, 7.924376332e-05f, 7.933565305e-05f, 7.942739755e-05f, 7.951899669e-05f, 7.961045032e-05f,
+7.970175830e-05f, 7.979292046e-05f, 7.988393668e-05f, 7.997480681e-05f, 8.006553070e-05f, 8.015610821e-05f, 8.024653919e-05f, 8.033682351e-05f, 8.042696101e-05f, 8.051695155e-05f,
+8.060679500e-05f, 8.069649121e-05f, 8.078604003e-05f, 8.087544132e-05f, 8.096469495e-05f, 8.105380077e-05f, 8.114275864e-05f, 8.123156842e-05f, 8.132022996e-05f, 8.140874314e-05f,
+8.149710780e-05f, 8.158532380e-05f, 8.167339102e-05f, 8.176130930e-05f, 8.184907851e-05f, 8.193669852e-05f, 8.202416917e-05f, 8.211149034e-05f, 8.219866188e-05f, 8.228568366e-05f,
+8.237255554e-05f, 8.245927738e-05f, 8.254584905e-05f, 8.263227040e-05f, 8.271854131e-05f, 8.280466164e-05f, 8.289063124e-05f, 8.297645000e-05f, 8.306211776e-05f, 8.314763439e-05f,
+8.323299977e-05f, 8.331821375e-05f, 8.340327620e-05f, 8.348818699e-05f, 8.357294598e-05f, 8.365755304e-05f, 8.374200804e-05f, 8.382631084e-05f, 8.391046131e-05f, 8.399445933e-05f,
+8.407830475e-05f, 8.416199744e-05f, 8.424553728e-05f, 8.432892413e-05f, 8.441215786e-05f, 8.449523835e-05f, 8.457816545e-05f, 8.466093904e-05f, 8.474355900e-05f, 8.482602519e-05f,
+8.490833747e-05f, 8.499049573e-05f, 8.507249984e-05f, 8.515434966e-05f, 8.523604507e-05f, 8.531758593e-05f, 8.539897213e-05f, 8.548020354e-05f, 8.556128002e-05f, 8.564220145e-05f,
+8.572296771e-05f, 8.580357866e-05f, 8.588403419e-05f, 8.596433416e-05f, 8.604447846e-05f, 8.612446695e-05f, 8.620429951e-05f, 8.628397602e-05f, 8.636349635e-05f, 8.644286038e-05f,
+8.652206798e-05f, 8.660111904e-05f, 8.668001342e-05f, 8.675875101e-05f, 8.683733168e-05f, 8.691575531e-05f, 8.699402179e-05f, 8.707213097e-05f, 8.715008276e-05f, 8.722787701e-05f,
+8.730551363e-05f, 8.738299247e-05f, 8.746031343e-05f, 8.753747638e-05f, 8.761448120e-05f, 8.769132777e-05f, 8.776801598e-05f, 8.784454571e-05f, 8.792091683e-05f, 8.799712923e-05f,
+8.807318279e-05f, 8.814907740e-05f, 8.822481293e-05f, 8.830038926e-05f, 8.837580629e-05f, 8.845106389e-05f, 8.852616196e-05f, 8.860110036e-05f, 8.867587899e-05f, 8.875049773e-05f,
+8.882495647e-05f, 8.889925509e-05f, 8.897339347e-05f, 8.904737151e-05f, 8.912118908e-05f, 8.919484608e-05f, 8.926834239e-05f, 8.934167790e-05f, 8.941485249e-05f, 8.948786606e-05f,
+8.956071848e-05f, 8.963340966e-05f, 8.970593947e-05f, 8.977830780e-05f, 8.985051455e-05f, 8.992255961e-05f, 8.999444285e-05f, 9.006616418e-05f, 9.013772348e-05f, 9.020912064e-05f,
+9.028035556e-05f, 9.035142812e-05f, 9.042233821e-05f, 9.049308573e-05f, 9.056367057e-05f, 9.063409262e-05f, 9.070435178e-05f, 9.077444793e-05f, 9.084438096e-05f, 9.091415078e-05f,
+9.098375728e-05f, 9.105320034e-05f, 9.112247987e-05f, 9.119159575e-05f, 9.126054789e-05f, 9.132933618e-05f, 9.139796050e-05f, 9.146642077e-05f, 9.153471687e-05f, 9.160284870e-05f,
+9.167081615e-05f, 9.173861913e-05f, 9.180625753e-05f, 9.187373125e-05f, 9.194104018e-05f, 9.200818423e-05f, 9.207516329e-05f, 9.214197725e-05f, 9.220862603e-05f, 9.227510952e-05f,
+9.234142761e-05f, 9.240758020e-05f, 9.247356721e-05f, 9.253938852e-05f, 9.260504404e-05f, 9.267053367e-05f, 9.273585731e-05f, 9.280101486e-05f, 9.286600622e-05f, 9.293083130e-05f,
+9.299549000e-05f, 9.305998221e-05f, 9.312430785e-05f, 9.318846681e-05f, 9.325245901e-05f, 9.331628434e-05f, 9.337994270e-05f, 9.344343401e-05f, 9.350675817e-05f, 9.356991507e-05f,
+9.363290464e-05f, 9.369572676e-05f, 9.375838136e-05f, 9.382086833e-05f, 9.388318758e-05f, 9.394533902e-05f, 9.400732255e-05f, 9.406913809e-05f, 9.413078554e-05f, 9.419226481e-05f,
+9.425357580e-05f, 9.431471843e-05f, 9.437569260e-05f, 9.443649823e-05f, 9.449713522e-05f, 9.455760348e-05f, 9.461790293e-05f, 9.467803346e-05f, 9.473799501e-05f, 9.479778746e-05f,
+9.485741075e-05f, 9.491686477e-05f, 9.497614944e-05f, 9.503526467e-05f, 9.509421038e-05f, 9.515298648e-05f, 9.521159287e-05f, 9.527002948e-05f, 9.532829622e-05f, 9.538639300e-05f,
+9.544431973e-05f, 9.550207634e-05f, 9.555966273e-05f, 9.561707882e-05f, 9.567432452e-05f, 9.573139976e-05f, 9.578830445e-05f, 9.584503850e-05f, 9.590160183e-05f, 9.595799436e-05f,
+9.601421601e-05f, 9.607026668e-05f, 9.612614632e-05f, 9.618185481e-05f, 9.623739210e-05f, 9.629275810e-05f, 9.634795272e-05f, 9.640297588e-05f, 9.645782751e-05f, 9.651250753e-05f,
+9.656701585e-05f, 9.662135240e-05f, 9.667551709e-05f, 9.672950986e-05f, 9.678333061e-05f, 9.683697927e-05f, 9.689045577e-05f, 9.694376003e-05f, 9.699689197e-05f, 9.704985150e-05f,
+9.710263857e-05f, 9.715525308e-05f, 9.720769497e-05f, 9.725996416e-05f, 9.731206056e-05f, 9.736398412e-05f, 9.741573475e-05f, 9.746731238e-05f, 9.751871693e-05f, 9.756994833e-05f,
+9.762100651e-05f, 9.767189139e-05f, 9.772260291e-05f, 9.777314098e-05f, 9.782350554e-05f, 9.787369651e-05f, 9.792371382e-05f, 9.797355741e-05f, 9.802322719e-05f, 9.807272311e-05f,
+9.812204508e-05f, 9.817119304e-05f, 9.822016692e-05f, 9.826896665e-05f, 9.831759215e-05f, 9.836604337e-05f, 9.841432023e-05f, 9.846242267e-05f, 9.851035061e-05f, 9.855810399e-05f,
+9.860568274e-05f, 9.865308679e-05f, 9.870031608e-05f, 9.874737054e-05f, 9.879425011e-05f, 9.884095471e-05f, 9.888748429e-05f, 9.893383877e-05f, 9.898001810e-05f, 9.902602221e-05f,
+9.907185102e-05f, 9.911750449e-05f, 9.916298255e-05f, 9.920828513e-05f, 9.925341217e-05f, 9.929836360e-05f, 9.934313937e-05f, 9.938773941e-05f, 9.943216367e-05f, 9.947641207e-05f,
+9.952048456e-05f, 9.956438107e-05f, 9.960810156e-05f, 9.965164595e-05f, 9.969501418e-05f, 9.973820621e-05f, 9.978122195e-05f, 9.982406137e-05f, 9.986672440e-05f, 9.990921098e-05f,
+9.995152105e-05f, 9.999365455e-05f, 1.000356114e-04f, 1.000773916e-04f, 1.001189951e-04f, 1.001604218e-04f, 1.002016716e-04f, 1.002427445e-04f, 1.002836405e-04f, 1.003243594e-04f,
+1.003649013e-04f, 1.004052660e-04f, 1.004454536e-04f, 1.004854639e-04f, 1.005252970e-04f, 1.005649527e-04f, 1.006044310e-04f, 1.006437319e-04f, 1.006828552e-04f, 1.007218010e-04f,
+1.007605692e-04f, 1.007991598e-04f, 1.008375726e-04f, 1.008758077e-04f, 1.009138650e-04f, 1.009517444e-04f, 1.009894459e-04f, 1.010269695e-04f, 1.010643150e-04f, 1.011014825e-04f,
+1.011384719e-04f, 1.011752831e-04f, 1.012119161e-04f, 1.012483709e-04f, 1.012846474e-04f, 1.013207455e-04f, 1.013566653e-04f, 1.013924066e-04f, 1.014279694e-04f, 1.014633537e-04f,
+1.014985594e-04f, 1.015335865e-04f, 1.015684349e-04f, 1.016031046e-04f, 1.016375956e-04f, 1.016719077e-04f, 1.017060410e-04f, 1.017399955e-04f, 1.017737710e-04f, 1.018073675e-04f,
+1.018407850e-04f, 1.018740234e-04f, 1.019070828e-04f, 1.019399630e-04f, 1.019726640e-04f, 1.020051859e-04f, 1.020375284e-04f, 1.020696916e-04f, 1.021016755e-04f, 1.021334801e-04f,
+1.021651051e-04f, 1.021965508e-04f, 1.022278169e-04f, 1.022589035e-04f, 1.022898105e-04f, 1.023205379e-04f, 1.023510857e-04f, 1.023814537e-04f, 1.024116420e-04f, 1.024416506e-04f,
+1.024714794e-04f, 1.025011283e-04f, 1.025305974e-04f, 1.025598865e-04f, 1.025889957e-04f, 1.026179250e-04f, 1.026466742e-04f, 1.026752434e-04f, 1.027036325e-04f, 1.027318415e-04f,
+1.027598703e-04f, 1.027877190e-04f, 1.028153875e-04f, 1.028428757e-04f, 1.028701837e-04f, 1.028973113e-04f, 1.029242586e-04f, 1.029510256e-04f, 1.029776121e-04f, 1.030040182e-04f,
+1.030302439e-04f, 1.030562891e-04f, 1.030821537e-04f, 1.031078378e-04f, 1.031333414e-04f, 1.031586643e-04f, 1.031838066e-04f, 1.032087683e-04f, 1.032335492e-04f, 1.032581495e-04f,
+1.032825690e-04f, 1.033068077e-04f, 1.033308657e-04f, 1.033547428e-04f, 1.033784391e-04f, 1.034019545e-04f, 1.034252890e-04f, 1.034484426e-04f, 1.034714153e-04f, 1.034942070e-04f,
+1.035168177e-04f, 1.035392474e-04f, 1.035614961e-04f, 1.035835637e-04f, 1.036054502e-04f, 1.036271556e-04f, 1.036486799e-04f, 1.036700230e-04f, 1.036911850e-04f, 1.037121658e-04f,
+1.037329654e-04f, 1.037535837e-04f, 1.037740208e-04f, 1.037942767e-04f, 1.038143512e-04f, 1.038342445e-04f, 1.038539564e-04f, 1.038734869e-04f, 1.038928362e-04f, 1.039120040e-04f,
+1.039309904e-04f, 1.039497954e-04f, 1.039684190e-04f, 1.039868612e-04f, 1.040051219e-04f, 1.040232011e-04f, 1.040410988e-04f, 1.040588150e-04f, 1.040763497e-04f, 1.040937028e-04f,
+1.041108744e-04f, 1.041278644e-04f, 1.041446728e-04f, 1.041612997e-04f, 1.041777449e-04f, 1.041940086e-04f, 1.042100906e-04f, 1.042259909e-04f, 1.042417096e-04f, 1.042572467e-04f,
+1.042726020e-04f, 1.042877757e-04f, 1.043027677e-04f, 1.043175779e-04f, 1.043322065e-04f, 1.043466533e-04f, 1.043609184e-04f, 1.043750017e-04f, 1.043889033e-04f, 1.044026231e-04f,
+1.044161612e-04f, 1.044295175e-04f, 1.044426920e-04f, 1.044556847e-04f, 1.044684956e-04f, 1.044811247e-04f, 1.044935720e-04f, 1.045058375e-04f, 1.045179211e-04f, 1.045298230e-04f,
+1.045415430e-04f, 1.045530811e-04f, 1.045644375e-04f, 1.045756119e-04f, 1.045866046e-04f, 1.045974154e-04f, 1.046080443e-04f, 1.046184914e-04f, 1.046287566e-04f, 1.046388400e-04f,
+1.046487415e-04f, 1.046584612e-04f, 1.046679989e-04f, 1.046773549e-04f, 1.046865289e-04f, 1.046955211e-04f, 1.047043315e-04f, 1.047129599e-04f, 1.047214065e-04f, 1.047296713e-04f,
+1.047377542e-04f, 1.047456552e-04f, 1.047533744e-04f, 1.047609117e-04f, 1.047682672e-04f, 1.047754409e-04f, 1.047824327e-04f, 1.047892426e-04f, 1.047958707e-04f, 1.048023170e-04f,
+1.048085815e-04f, 1.048146641e-04f, 1.048205650e-04f, 1.048262840e-04f, 1.048318212e-04f, 1.048371766e-04f, 1.048423503e-04f, 1.048473421e-04f, 1.048521522e-04f, 1.048567805e-04f,
+1.048612271e-04f, 1.048654918e-04f, 1.048695749e-04f, 1.048734762e-04f, 1.048771958e-04f, 1.048807337e-04f, 1.048840898e-04f, 1.048872643e-04f, 1.048902571e-04f, 1.048930682e-04f,
+1.048956976e-04f, 1.048981454e-04f, 1.049004116e-04f, 1.049024961e-04f, 1.049043990e-04f, 1.049061203e-04f, 1.049076600e-04f, 1.049090181e-04f, 1.049101947e-04f, 1.049111897e-04f,
+1.049120032e-04f, 1.049126351e-04f, 1.049130856e-04f, 1.049133545e-04f, 1.049134420e-04f, 1.049133480e-04f, 1.049130726e-04f, 1.049126157e-04f, 1.049119775e-04f, 1.049111578e-04f,
+1.049101568e-04f, 1.049089743e-04f, 1.049076106e-04f, 1.049060655e-04f, 1.049043391e-04f, 1.049024315e-04f, 1.049003425e-04f, 1.048980723e-04f, 1.048956209e-04f, 1.048929883e-04f,
+1.048901745e-04f, 1.048871795e-04f, 1.048840034e-04f, 1.048806461e-04f, 1.048771078e-04f, 1.048733884e-04f, 1.048694879e-04f, 1.048654063e-04f, 1.048611438e-04f, 1.048567002e-04f,
+1.048520757e-04f, 1.048472703e-04f, 1.048422839e-04f, 1.048371167e-04f, 1.048317685e-04f, 1.048262395e-04f, 1.048205298e-04f, 1.048146392e-04f, 1.048085678e-04f, 1.048023157e-04f,
+1.047958829e-04f, 1.047892694e-04f, 1.047824752e-04f, 1.047755004e-04f, 1.047683450e-04f, 1.047610090e-04f, 1.047534925e-04f, 1.047457955e-04f, 1.047379179e-04f, 1.047298599e-04f,
+1.047216215e-04f, 1.047132027e-04f, 1.047046034e-04f, 1.046958239e-04f, 1.046868640e-04f, 1.046777239e-04f, 1.046684035e-04f, 1.046589029e-04f, 1.046492221e-04f, 1.046393612e-04f,
+1.046293202e-04f, 1.046190990e-04f, 1.046086979e-04f, 1.045981166e-04f, 1.045873555e-04f, 1.045764143e-04f, 1.045652933e-04f, 1.045539924e-04f, 1.045425116e-04f, 1.045308510e-04f,
+1.045190107e-04f, 1.045069906e-04f, 1.044947908e-04f, 1.044824113e-04f, 1.044698523e-04f, 1.044571136e-04f, 1.044441954e-04f, 1.044310977e-04f, 1.044178205e-04f, 1.044043638e-04f,
+1.043907278e-04f, 1.043769124e-04f, 1.043629177e-04f, 1.043487437e-04f, 1.043343905e-04f, 1.043198581e-04f, 1.043051465e-04f, 1.042902558e-04f, 1.042751860e-04f, 1.042599372e-04f,
+1.042445094e-04f, 1.042289027e-04f, 1.042131171e-04f, 1.041971526e-04f, 1.041810093e-04f, 1.041646872e-04f, 1.041481863e-04f, 1.041315068e-04f, 1.041146487e-04f, 1.040976119e-04f,
+1.040803966e-04f, 1.040630028e-04f, 1.040454305e-04f, 1.040276798e-04f, 1.040097508e-04f, 1.039916434e-04f, 1.039733577e-04f, 1.039548938e-04f, 1.039362518e-04f, 1.039174316e-04f,
+1.038984333e-04f, 1.038792570e-04f, 1.038599027e-04f, 1.038403704e-04f, 1.038206603e-04f, 1.038007723e-04f, 1.037807065e-04f, 1.037604630e-04f, 1.037400418e-04f, 1.037194430e-04f,
+1.036986666e-04f, 1.036777126e-04f, 1.036565812e-04f, 1.036352723e-04f, 1.036137861e-04f, 1.035921225e-04f, 1.035702817e-04f, 1.035482636e-04f, 1.035260684e-04f, 1.035036960e-04f,
+1.034811466e-04f, 1.034584202e-04f, 1.034355168e-04f, 1.034124366e-04f, 1.033891795e-04f, 1.033657456e-04f, 1.033421350e-04f, 1.033183478e-04f, 1.032943839e-04f, 1.032702434e-04f,
+1.032459265e-04f, 1.032214331e-04f, 1.031967633e-04f, 1.031719172e-04f, 1.031468949e-04f, 1.031216963e-04f, 1.030963216e-04f, 1.030707708e-04f, 1.030450439e-04f, 1.030191411e-04f,
+1.029930624e-04f, 1.029668078e-04f, 1.029403774e-04f, 1.029137714e-04f, 1.028869896e-04f, 1.028600322e-04f, 1.028328993e-04f, 1.028055909e-04f, 1.027781071e-04f, 1.027504479e-04f,
+1.027226135e-04f, 1.026946038e-04f, 1.026664189e-04f, 1.026380590e-04f, 1.026095240e-04f, 1.025808140e-04f, 1.025519292e-04f, 1.025228695e-04f, 1.024936350e-04f, 1.024642258e-04f,
+1.024346419e-04f, 1.024048835e-04f, 1.023749506e-04f, 1.023448432e-04f, 1.023145614e-04f, 1.022841054e-04f, 1.022534751e-04f, 1.022226706e-04f, 1.021916920e-04f, 1.021605394e-04f,
+1.021292128e-04f, 1.020977124e-04f, 1.020660380e-04f, 1.020341900e-04f, 1.020021682e-04f, 1.019699729e-04f, 1.019376040e-04f, 1.019050616e-04f, 1.018723458e-04f, 1.018394567e-04f,
+1.018063943e-04f, 1.017731587e-04f, 1.017397501e-04f, 1.017061683e-04f, 1.016724137e-04f, 1.016384861e-04f, 1.016043857e-04f, 1.015701125e-04f, 1.015356667e-04f, 1.015010483e-04f,
+1.014662574e-04f, 1.014312940e-04f, 1.013961583e-04f, 1.013608502e-04f, 1.013253699e-04f, 1.012897175e-04f, 1.012538931e-04f, 1.012178966e-04f, 1.011817282e-04f, 1.011453880e-04f,
+1.011088761e-04f, 1.010721924e-04f, 1.010353372e-04f, 1.009983104e-04f, 1.009611122e-04f, 1.009237426e-04f, 1.008862018e-04f, 1.008484898e-04f, 1.008106066e-04f, 1.007725524e-04f,
+1.007343272e-04f, 1.006959311e-04f, 1.006573643e-04f, 1.006186267e-04f, 1.005797185e-04f, 1.005406398e-04f, 1.005013906e-04f, 1.004619709e-04f, 1.004223810e-04f, 1.003826209e-04f,
+1.003426906e-04f, 1.003025903e-04f, 1.002623200e-04f, 1.002218798e-04f, 1.001812699e-04f, 1.001404902e-04f, 1.000995408e-04f, 1.000584220e-04f, 1.000171337e-04f, 9.997567598e-05f,
+9.993404901e-05f, 9.989225284e-05f, 9.985028756e-05f, 9.980815326e-05f, 9.976585002e-05f, 9.972337794e-05f, 9.968073709e-05f, 9.963792758e-05f, 9.959494949e-05f, 9.955180290e-05f,
+9.950848791e-05f, 9.946500461e-05f, 9.942135308e-05f, 9.937753342e-05f, 9.933354572e-05f, 9.928939007e-05f, 9.924506656e-05f, 9.920057527e-05f, 9.915591631e-05f, 9.911108977e-05f,
+9.906609573e-05f, 9.902093429e-05f, 9.897560554e-05f, 9.893010958e-05f, 9.888444650e-05f, 9.883861639e-05f, 9.879261934e-05f, 9.874645546e-05f, 9.870012483e-05f, 9.865362755e-05f,
+9.860696371e-05f, 9.856013342e-05f, 9.851313676e-05f, 9.846597383e-05f, 9.841864473e-05f, 9.837114955e-05f, 9.832348839e-05f, 9.827566135e-05f, 9.822766853e-05f, 9.817951002e-05f,
+9.813118591e-05f, 9.808269632e-05f, 9.803404133e-05f, 9.798522105e-05f, 9.793623558e-05f, 9.788708500e-05f, 9.783776943e-05f, 9.778828897e-05f, 9.773864370e-05f, 9.768883374e-05f,
+9.763885919e-05f, 9.758872013e-05f, 9.753841669e-05f, 9.748794895e-05f, 9.743731702e-05f, 9.738652100e-05f, 9.733556099e-05f, 9.728443710e-05f, 9.723314943e-05f, 9.718169808e-05f,
+9.713008316e-05f, 9.707830476e-05f, 9.702636300e-05f, 9.697425798e-05f, 9.692198979e-05f, 9.686955855e-05f, 9.681696436e-05f, 9.676420733e-05f, 9.671128756e-05f, 9.665820516e-05f,
+9.660496023e-05f, 9.655155288e-05f, 9.649798322e-05f, 9.644425135e-05f, 9.639035738e-05f, 9.633630142e-05f, 9.628208358e-05f, 9.622770396e-05f, 9.617316267e-05f, 9.611845982e-05f,
+9.606359552e-05f, 9.600856988e-05f, 9.595338301e-05f, 9.589803501e-05f, 9.584252601e-05f, 9.578685610e-05f, 9.573102540e-05f, 9.567503401e-05f, 9.561888206e-05f, 9.556256964e-05f,
+9.550609688e-05f, 9.544946389e-05f, 9.539267076e-05f, 9.533571763e-05f, 9.527860460e-05f, 9.522133178e-05f, 9.516389929e-05f, 9.510630724e-05f, 9.504855574e-05f, 9.499064491e-05f,
+9.493257486e-05f, 9.487434571e-05f, 9.481595756e-05f, 9.475741055e-05f, 9.469870477e-05f, 9.463984035e-05f, 9.458081741e-05f, 9.452163605e-05f, 9.446229639e-05f, 9.440279856e-05f,
+9.434314267e-05f, 9.428332883e-05f, 9.422335716e-05f, 9.416322778e-05f, 9.410294081e-05f, 9.404249636e-05f, 9.398189456e-05f, 9.392113552e-05f, 9.386021937e-05f, 9.379914621e-05f,
+9.373791618e-05f, 9.367652938e-05f, 9.361498595e-05f, 9.355328599e-05f, 9.349142964e-05f, 9.342941700e-05f, 9.336724821e-05f, 9.330492338e-05f, 9.324244264e-05f, 9.317980610e-05f,
+9.311701390e-05f, 9.305406614e-05f, 9.299096296e-05f, 9.292770447e-05f, 9.286429080e-05f, 9.280072208e-05f, 9.273699842e-05f, 9.267311996e-05f, 9.260908680e-05f, 9.254489909e-05f,
+9.248055694e-05f, 9.241606047e-05f, 9.235140982e-05f, 9.228660511e-05f, 9.222164646e-05f, 9.215653400e-05f, 9.209126786e-05f, 9.202584816e-05f, 9.196027503e-05f, 9.189454860e-05f,
+9.182866899e-05f, 9.176263633e-05f, 9.169645075e-05f, 9.163011237e-05f, 9.156362133e-05f, 9.149697775e-05f, 9.143018177e-05f, 9.136323350e-05f, 9.129613308e-05f, 9.122888064e-05f,
+9.116147631e-05f, 9.109392022e-05f, 9.102621250e-05f, 9.095835328e-05f, 9.089034269e-05f, 9.082218085e-05f, 9.075386791e-05f, 9.068540400e-05f, 9.061678924e-05f, 9.054802376e-05f,
+9.047910771e-05f, 9.041004120e-05f, 9.034082439e-05f, 9.027145738e-05f, 9.020194033e-05f, 9.013227337e-05f, 9.006245662e-05f, 8.999249022e-05f, 8.992237431e-05f, 8.985210901e-05f,
+8.978169448e-05f, 8.971113083e-05f, 8.964041820e-05f, 8.956955674e-05f, 8.949854657e-05f, 8.942738784e-05f, 8.935608067e-05f, 8.928462521e-05f, 8.921302159e-05f, 8.914126994e-05f,
+8.906937041e-05f, 8.899732313e-05f, 8.892512825e-05f, 8.885278589e-05f, 8.878029619e-05f, 8.870765930e-05f, 8.863487536e-05f, 8.856194449e-05f, 8.848886685e-05f, 8.841564256e-05f,
+8.834227178e-05f, 8.826875463e-05f, 8.819509126e-05f, 8.812128181e-05f, 8.804732643e-05f, 8.797322524e-05f, 8.789897840e-05f, 8.782458603e-05f, 8.775004830e-05f, 8.767536532e-05f,
+8.760053726e-05f, 8.752556425e-05f, 8.745044643e-05f, 8.737518394e-05f, 8.729977694e-05f, 8.722422555e-05f, 8.714852993e-05f, 8.707269022e-05f, 8.699670656e-05f, 8.692057909e-05f,
+8.684430797e-05f, 8.676789333e-05f, 8.669133533e-05f, 8.661463409e-05f, 8.653778978e-05f, 8.646080253e-05f, 8.638367250e-05f, 8.630639982e-05f, 8.622898465e-05f, 8.615142712e-05f,
+8.607372739e-05f, 8.599588561e-05f, 8.591790192e-05f, 8.583977646e-05f, 8.576150940e-05f, 8.568310086e-05f, 8.560455101e-05f, 8.552585998e-05f, 8.544702794e-05f, 8.536805502e-05f,
+8.528894138e-05f, 8.520968716e-05f, 8.513029252e-05f, 8.505075760e-05f, 8.497108256e-05f, 8.489126754e-05f, 8.481131270e-05f, 8.473121818e-05f, 8.465098414e-05f, 8.457061073e-05f,
+8.449009810e-05f, 8.440944639e-05f, 8.432865577e-05f, 8.424772638e-05f, 8.416665838e-05f, 8.408545192e-05f, 8.400410714e-05f, 8.392262422e-05f, 8.384100328e-05f, 8.375924450e-05f,
+8.367734803e-05f, 8.359531401e-05f, 8.351314260e-05f, 8.343083396e-05f, 8.334838824e-05f, 8.326580559e-05f, 8.318308618e-05f, 8.310023015e-05f, 8.301723766e-05f, 8.293410886e-05f,
+8.285084392e-05f, 8.276744299e-05f, 8.268390622e-05f, 8.260023377e-05f, 8.251642579e-05f, 8.243248245e-05f, 8.234840391e-05f, 8.226419031e-05f, 8.217984181e-05f, 8.209535858e-05f,
+8.201074078e-05f, 8.192598855e-05f, 8.184110206e-05f, 8.175608147e-05f, 8.167092693e-05f, 8.158563861e-05f, 8.150021666e-05f, 8.141466125e-05f, 8.132897253e-05f, 8.124315066e-05f,
+8.115719581e-05f, 8.107110813e-05f, 8.098488778e-05f, 8.089853493e-05f, 8.081204974e-05f, 8.072543236e-05f, 8.063868297e-05f, 8.055180171e-05f, 8.046478876e-05f, 8.037764427e-05f,
+8.029036841e-05f, 8.020296134e-05f, 8.011542322e-05f, 8.002775422e-05f, 7.993995449e-05f, 7.985202421e-05f, 7.976396353e-05f, 7.967577262e-05f, 7.958745165e-05f, 7.949900077e-05f,
+7.941042015e-05f, 7.932170996e-05f, 7.923287036e-05f, 7.914390152e-05f, 7.905480360e-05f, 7.896557677e-05f, 7.887622119e-05f, 7.878673703e-05f, 7.869712445e-05f, 7.860738362e-05f,
+7.851751471e-05f, 7.842751789e-05f, 7.833739332e-05f, 7.824714117e-05f, 7.815676160e-05f, 7.806625478e-05f, 7.797562089e-05f, 7.788486008e-05f, 7.779397254e-05f, 7.770295842e-05f,
+7.761181789e-05f, 7.752055112e-05f, 7.742915829e-05f, 7.733763956e-05f, 7.724599510e-05f, 7.715422508e-05f, 7.706232967e-05f, 7.697030904e-05f, 7.687816335e-05f, 7.678589279e-05f,
+7.669349752e-05f, 7.660097772e-05f, 7.650833354e-05f, 7.641556517e-05f, 7.632267278e-05f, 7.622965653e-05f, 7.613651660e-05f, 7.604325316e-05f, 7.594986639e-05f, 7.585635645e-05f,
+7.576272351e-05f, 7.566896776e-05f, 7.557508937e-05f, 7.548108850e-05f, 7.538696533e-05f, 7.529272003e-05f, 7.519835278e-05f, 7.510386376e-05f, 7.500925313e-05f, 7.491452107e-05f,
+7.481966775e-05f, 7.472469336e-05f, 7.462959806e-05f, 7.453438202e-05f, 7.443904544e-05f, 7.434358847e-05f, 7.424801130e-05f, 7.415231411e-05f, 7.405649706e-05f, 7.396056033e-05f,
+7.386450411e-05f, 7.376832856e-05f, 7.367203387e-05f, 7.357562021e-05f, 7.347908776e-05f, 7.338243670e-05f, 7.328566720e-05f, 7.318877944e-05f, 7.309177360e-05f, 7.299464986e-05f,
+7.289740840e-05f, 7.280004939e-05f, 7.270257301e-05f, 7.260497945e-05f, 7.250726888e-05f, 7.240944148e-05f, 7.231149743e-05f, 7.221343691e-05f, 7.211526010e-05f, 7.201696718e-05f,
+7.191855834e-05f, 7.182003374e-05f, 7.172139358e-05f, 7.162263802e-05f, 7.152376726e-05f, 7.142478148e-05f, 7.132568085e-05f, 7.122646556e-05f, 7.112713579e-05f, 7.102769172e-05f,
+7.092813353e-05f, 7.082846141e-05f, 7.072867553e-05f, 7.062877609e-05f, 7.052876326e-05f, 7.042863723e-05f, 7.032839817e-05f, 7.022804628e-05f, 7.012758174e-05f, 7.002700472e-05f,
+6.992631542e-05f, 6.982551402e-05f, 6.972460070e-05f, 6.962357564e-05f, 6.952243904e-05f, 6.942119107e-05f, 6.931983193e-05f, 6.921836179e-05f, 6.911678084e-05f, 6.901508927e-05f,
+6.891328726e-05f, 6.881137500e-05f, 6.870935268e-05f, 6.860722047e-05f, 6.850497858e-05f, 6.840262717e-05f, 6.830016645e-05f, 6.819759659e-05f, 6.809491779e-05f, 6.799213023e-05f,
+6.788923409e-05f, 6.778622958e-05f, 6.768311687e-05f, 6.757989615e-05f, 6.747656761e-05f, 6.737313143e-05f, 6.726958782e-05f, 6.716593695e-05f, 6.706217901e-05f, 6.695831420e-05f,
+6.685434270e-05f, 6.675026470e-05f, 6.664608039e-05f, 6.654178996e-05f, 6.643739360e-05f, 6.633289150e-05f, 6.622828385e-05f, 6.612357084e-05f, 6.601875266e-05f, 6.591382950e-05f,
+6.580880156e-05f, 6.570366901e-05f, 6.559843206e-05f, 6.549309090e-05f, 6.538764571e-05f, 6.528209670e-05f, 6.517644404e-05f, 6.507068793e-05f, 6.496482857e-05f, 6.485886614e-05f,
+6.475280084e-05f, 6.464663287e-05f, 6.454036240e-05f, 6.443398965e-05f, 6.432751479e-05f, 6.422093803e-05f, 6.411425955e-05f, 6.400747955e-05f, 6.390059823e-05f, 6.379361577e-05f,
+6.368653237e-05f, 6.357934823e-05f, 6.347206354e-05f, 6.336467849e-05f, 6.325719328e-05f, 6.314960811e-05f, 6.304192316e-05f, 6.293413864e-05f, 6.282625473e-05f, 6.271827164e-05f,
+6.261018956e-05f, 6.250200868e-05f, 6.239372920e-05f, 6.228535133e-05f, 6.217687524e-05f, 6.206830115e-05f, 6.195962924e-05f, 6.185085971e-05f, 6.174199276e-05f, 6.163302859e-05f,
+6.152396739e-05f, 6.141480936e-05f, 6.130555470e-05f, 6.119620361e-05f, 6.108675628e-05f, 6.097721291e-05f, 6.086757370e-05f, 6.075783884e-05f, 6.064800855e-05f, 6.053808300e-05f,
+6.042806241e-05f, 6.031794696e-05f, 6.020773687e-05f, 6.009743233e-05f, 5.998703353e-05f, 5.987654068e-05f, 5.976595398e-05f, 5.965527363e-05f, 5.954449982e-05f, 5.943363275e-05f,
+5.932267263e-05f, 5.921161966e-05f, 5.910047404e-05f, 5.898923596e-05f, 5.887790562e-05f, 5.876648324e-05f, 5.865496900e-05f, 5.854336312e-05f, 5.843166578e-05f, 5.831987720e-05f,
+5.820799757e-05f, 5.809602710e-05f, 5.798396598e-05f, 5.787181443e-05f, 5.775957263e-05f, 5.764724080e-05f, 5.753481913e-05f, 5.742230783e-05f, 5.730970710e-05f, 5.719701714e-05f,
+5.708423816e-05f, 5.697137035e-05f, 5.685841393e-05f, 5.674536909e-05f, 5.663223604e-05f, 5.651901499e-05f, 5.640570613e-05f, 5.629230966e-05f, 5.617882580e-05f, 5.606525475e-05f,
+5.595159671e-05f, 5.583785188e-05f, 5.572402048e-05f, 5.561010269e-05f, 5.549609874e-05f, 5.538200882e-05f, 5.526783314e-05f, 5.515357191e-05f, 5.503922532e-05f, 5.492479359e-05f,
+5.481027691e-05f, 5.469567551e-05f, 5.458098957e-05f, 5.446621931e-05f, 5.435136494e-05f, 5.423642665e-05f, 5.412140466e-05f, 5.400629917e-05f, 5.389111039e-05f, 5.377583853e-05f,
+5.366048378e-05f, 5.354504637e-05f, 5.342952649e-05f, 5.331392435e-05f, 5.319824016e-05f, 5.308247413e-05f, 5.296662647e-05f, 5.285069737e-05f, 5.273468706e-05f, 5.261859574e-05f,
+5.250242361e-05f, 5.238617088e-05f, 5.226983777e-05f, 5.215342448e-05f, 5.203693121e-05f, 5.192035819e-05f, 5.180370561e-05f, 5.168697368e-05f, 5.157016262e-05f, 5.145327263e-05f,
+5.133630393e-05f, 5.121925672e-05f, 5.110213120e-05f, 5.098492760e-05f, 5.086764612e-05f, 5.075028697e-05f, 5.063285035e-05f, 5.051533649e-05f, 5.039774559e-05f, 5.028007786e-05f,
+5.016233350e-05f, 5.004451274e-05f, 4.992661578e-05f, 4.980864283e-05f, 4.969059411e-05f, 4.957246982e-05f, 4.945427017e-05f, 4.933599538e-05f, 4.921764566e-05f, 4.909922121e-05f,
+4.898072226e-05f, 4.886214901e-05f, 4.874350167e-05f, 4.862478045e-05f, 4.850598558e-05f, 4.838711725e-05f, 4.826817568e-05f, 4.814916108e-05f, 4.803007368e-05f, 4.791091367e-05f,
+4.779168127e-05f, 4.767237669e-05f, 4.755300015e-05f, 4.743355186e-05f, 4.731403203e-05f, 4.719444087e-05f, 4.707477861e-05f, 4.695504544e-05f, 4.683524159e-05f, 4.671536727e-05f,
+4.659542269e-05f, 4.647540806e-05f, 4.635532361e-05f, 4.623516954e-05f, 4.611494606e-05f, 4.599465340e-05f, 4.587429176e-05f, 4.575386136e-05f, 4.563336242e-05f, 4.551279514e-05f,
+4.539215975e-05f, 4.527145646e-05f, 4.515068548e-05f, 4.502984703e-05f, 4.490894132e-05f, 4.478796857e-05f, 4.466692899e-05f, 4.454582280e-05f, 4.442465022e-05f, 4.430341145e-05f,
+4.418210672e-05f, 4.406073624e-05f, 4.393930022e-05f, 4.381779889e-05f, 4.369623246e-05f, 4.357460114e-05f, 4.345290515e-05f, 4.333114471e-05f, 4.320932003e-05f, 4.308743133e-05f,
+4.296547882e-05f, 4.284346273e-05f, 4.272138327e-05f, 4.259924065e-05f, 4.247703510e-05f, 4.235476683e-05f, 4.223243605e-05f, 4.211004299e-05f, 4.198758785e-05f, 4.186507087e-05f,
+4.174249226e-05f, 4.161985222e-05f, 4.149715099e-05f, 4.137438878e-05f, 4.125156580e-05f, 4.112868228e-05f, 4.100573843e-05f, 4.088273447e-05f, 4.075967062e-05f, 4.063654709e-05f,
+4.051336411e-05f, 4.039012190e-05f, 4.026682066e-05f, 4.014346063e-05f, 4.002004201e-05f, 3.989656503e-05f, 3.977302991e-05f, 3.964943686e-05f, 3.952578611e-05f, 3.940207787e-05f,
+3.927831237e-05f, 3.915448981e-05f, 3.903061042e-05f, 3.890667443e-05f, 3.878268204e-05f, 3.865863349e-05f, 3.853452898e-05f, 3.841036874e-05f, 3.828615298e-05f, 3.816188194e-05f,
+3.803755582e-05f, 3.791317485e-05f, 3.778873924e-05f, 3.766424923e-05f, 3.753970502e-05f, 3.741510684e-05f, 3.729045491e-05f, 3.716574944e-05f, 3.704099067e-05f, 3.691617880e-05f,
+3.679131407e-05f, 3.666639668e-05f, 3.654142687e-05f, 3.641640485e-05f, 3.629133085e-05f, 3.616620507e-05f, 3.604102776e-05f, 3.591579912e-05f, 3.579051938e-05f, 3.566518875e-05f,
+3.553980747e-05f, 3.541437575e-05f, 3.528889381e-05f, 3.516336188e-05f, 3.503778017e-05f, 3.491214891e-05f, 3.478646832e-05f, 3.466073862e-05f, 3.453496004e-05f, 3.440913279e-05f,
+3.428325710e-05f, 3.415733318e-05f, 3.403136127e-05f, 3.390534158e-05f, 3.377927434e-05f, 3.365315976e-05f, 3.352699808e-05f, 3.340078951e-05f, 3.327453427e-05f, 3.314823259e-05f,
+3.302188469e-05f, 3.289549080e-05f, 3.276905113e-05f, 3.264256591e-05f, 3.251603536e-05f, 3.238945970e-05f, 3.226283917e-05f, 3.213617397e-05f, 3.200946434e-05f, 3.188271049e-05f,
+3.175591265e-05f, 3.162907105e-05f, 3.150218590e-05f, 3.137525743e-05f, 3.124828587e-05f, 3.112127143e-05f, 3.099421434e-05f, 3.086711482e-05f, 3.073997311e-05f, 3.061278941e-05f,
+3.048556396e-05f, 3.035829698e-05f, 3.023098869e-05f, 3.010363931e-05f, 2.997624908e-05f, 2.984881821e-05f, 2.972134693e-05f, 2.959383546e-05f, 2.946628403e-05f, 2.933869286e-05f,
+2.921106217e-05f, 2.908339219e-05f, 2.895568315e-05f, 2.882793526e-05f, 2.870014876e-05f, 2.857232386e-05f, 2.844446080e-05f, 2.831655979e-05f, 2.818862106e-05f, 2.806064484e-05f,
+2.793263135e-05f, 2.780458081e-05f, 2.767649346e-05f, 2.754836950e-05f, 2.742020918e-05f, 2.729201271e-05f, 2.716378032e-05f, 2.703551224e-05f, 2.690720868e-05f, 2.677886988e-05f,
+2.665049606e-05f, 2.652208744e-05f, 2.639364426e-05f, 2.626516672e-05f, 2.613665507e-05f, 2.600810953e-05f, 2.587953032e-05f, 2.575091766e-05f, 2.562227179e-05f, 2.549359292e-05f,
+2.536488129e-05f, 2.523613712e-05f, 2.510736063e-05f, 2.497855205e-05f, 2.484971161e-05f, 2.472083953e-05f, 2.459193604e-05f, 2.446300136e-05f, 2.433403571e-05f, 2.420503934e-05f,
+2.407601245e-05f, 2.394695528e-05f, 2.381786806e-05f, 2.368875100e-05f, 2.355960434e-05f, 2.343042830e-05f, 2.330122310e-05f, 2.317198898e-05f, 2.304272615e-05f, 2.291343486e-05f,
+2.278411531e-05f, 2.265476774e-05f, 2.252539237e-05f, 2.239598944e-05f, 2.226655916e-05f, 2.213710176e-05f, 2.200761748e-05f, 2.187810653e-05f, 2.174856914e-05f, 2.161900554e-05f,
+2.148941595e-05f, 2.135980061e-05f, 2.123015973e-05f, 2.110049355e-05f, 2.097080229e-05f, 2.084108617e-05f, 2.071134544e-05f, 2.058158030e-05f, 2.045179099e-05f, 2.032197773e-05f,
+2.019214076e-05f, 2.006228029e-05f, 1.993239656e-05f, 1.980248979e-05f, 1.967256020e-05f, 1.954260803e-05f, 1.941263351e-05f, 1.928263685e-05f, 1.915261829e-05f, 1.902257804e-05f,
+1.889251635e-05f, 1.876243344e-05f, 1.863232953e-05f, 1.850220484e-05f, 1.837205962e-05f, 1.824189408e-05f, 1.811170844e-05f, 1.798150295e-05f, 1.785127782e-05f, 1.772103329e-05f,
+1.759076957e-05f, 1.746048690e-05f, 1.733018550e-05f, 1.719986560e-05f, 1.706952743e-05f, 1.693917122e-05f, 1.680879719e-05f, 1.667840556e-05f, 1.654799657e-05f, 1.641757044e-05f,
+1.628712741e-05f, 1.615666769e-05f, 1.602619152e-05f, 1.589569911e-05f, 1.576519071e-05f, 1.563466653e-05f, 1.550412681e-05f, 1.537357177e-05f, 1.524300163e-05f, 1.511241663e-05f,
+1.498181700e-05f, 1.485120295e-05f, 1.472057472e-05f, 1.458993253e-05f, 1.445927661e-05f, 1.432860720e-05f, 1.419792451e-05f, 1.406722877e-05f, 1.393652021e-05f, 1.380579906e-05f,
+1.367506555e-05f, 1.354431989e-05f, 1.341356233e-05f, 1.328279308e-05f, 1.315201238e-05f, 1.302122045e-05f, 1.289041752e-05f, 1.275960381e-05f, 1.262877956e-05f, 1.249794499e-05f,
+1.236710033e-05f, 1.223624580e-05f, 1.210538163e-05f, 1.197450805e-05f, 1.184362529e-05f, 1.171273358e-05f, 1.158183313e-05f, 1.145092419e-05f, 1.132000697e-05f, 1.118908170e-05f,
+1.105814861e-05f, 1.092720793e-05f, 1.079625989e-05f, 1.066530471e-05f, 1.053434261e-05f, 1.040337384e-05f, 1.027239860e-05f, 1.014141714e-05f, 1.001042968e-05f, 9.879436437e-06f,
+9.748437650e-06f, 9.617433542e-06f, 9.486424341e-06f, 9.355410273e-06f, 9.224391567e-06f, 9.093368447e-06f, 8.962341143e-06f, 8.831309881e-06f, 8.700274888e-06f, 8.569236391e-06f,
+8.438194617e-06f, 8.307149793e-06f, 8.176102147e-06f, 8.045051904e-06f, 7.913999292e-06f, 7.782944539e-06f, 7.651887870e-06f, 7.520829513e-06f, 7.389769695e-06f, 7.258708643e-06f,
+7.127646583e-06f, 6.996583743e-06f, 6.865520349e-06f, 6.734456627e-06f, 6.603392806e-06f, 6.472329111e-06f, 6.341265770e-06f, 6.210203008e-06f, 6.079141054e-06f, 5.948080132e-06f,
+5.817020471e-06f, 5.685962297e-06f, 5.554905836e-06f, 5.423851315e-06f, 5.292798960e-06f, 5.161748999e-06f, 5.030701657e-06f, 4.899657162e-06f, 4.768615739e-06f, 4.637577615e-06f,
+4.506543017e-06f, 4.375512170e-06f, 4.244485302e-06f, 4.113462639e-06f, 3.982444406e-06f, 3.851430831e-06f, 3.720422139e-06f, 3.589418557e-06f, 3.458420311e-06f, 3.327427627e-06f,
+3.196440731e-06f, 3.065459850e-06f, 2.934485209e-06f, 2.803517035e-06f, 2.672555554e-06f, 2.541600990e-06f, 2.410653572e-06f, 2.279713524e-06f, 2.148781072e-06f, 2.017856443e-06f,
+1.886939861e-06f, 1.756031554e-06f, 1.625131746e-06f, 1.494240664e-06f, 1.363358532e-06f, 1.232485577e-06f, 1.101622025e-06f, 9.707681006e-07f, 8.399240296e-07f, 7.090900377e-07f,
+5.782663502e-07f, 4.474531926e-07f, 3.166507904e-07f, 1.858593688e-07f, 5.507915326e-08f, -7.568963102e-08f, -2.064467588e-07f, -3.371920048e-07f, -4.679251439e-07f, -5.986459509e-07f,
+-7.293542009e-07f, -8.600496687e-07f, -9.907321294e-07f, -1.121401358e-06f, -1.252057129e-06f, -1.382699219e-06f, -1.513327402e-06f, -1.643941453e-06f, -1.774541149e-06f, -1.905126263e-06f,
+-2.035696572e-06f, -2.166251850e-06f, -2.296791874e-06f, -2.427316418e-06f, -2.557825259e-06f, -2.688318171e-06f, -2.818794931e-06f, -2.949255315e-06f, -3.079699097e-06f, -3.210126053e-06f,
+-3.340535961e-06f, -3.470928594e-06f, -3.601303730e-06f, -3.731661144e-06f, -3.862000612e-06f, -3.992321911e-06f, -4.122624816e-06f, -4.252909104e-06f, -4.383174551e-06f, -4.513420932e-06f,
+-4.643648025e-06f, -4.773855607e-06f, -4.904043452e-06f, -5.034211338e-06f, -5.164359041e-06f, -5.294486339e-06f, -5.424593007e-06f, -5.554678822e-06f, -5.684743561e-06f, -5.814787001e-06f,
+-5.944808919e-06f, -6.074809092e-06f, -6.204787296e-06f, -6.334743309e-06f, -6.464676908e-06f, -6.594587870e-06f, -6.724475973e-06f, -6.854340992e-06f, -6.984182707e-06f, -7.114000894e-06f,
+-7.243795331e-06f, -7.373565795e-06f, -7.503312063e-06f, -7.633033915e-06f, -7.762731126e-06f, -7.892403476e-06f, -8.022050741e-06f, -8.151672701e-06f, -8.281269131e-06f, -8.410839812e-06f,
+-8.540384520e-06f, -8.669903035e-06f, -8.799395133e-06f, -8.928860594e-06f, -9.058299196e-06f, -9.187710717e-06f, -9.317094936e-06f, -9.446451631e-06f, -9.575780581e-06f, -9.705081565e-06f,
+-9.834354361e-06f, -9.963598748e-06f, -1.009281450e-05f, -1.022200141e-05f, -1.035115925e-05f, -1.048028779e-05f, -1.060938681e-05f, -1.073845611e-05f, -1.086749544e-05f, -1.099650461e-05f,
+-1.112548337e-05f, -1.125443152e-05f, -1.138334883e-05f, -1.151223509e-05f, -1.164109006e-05f, -1.176991354e-05f, -1.189870530e-05f, -1.202746513e-05f, -1.215619279e-05f, -1.228488808e-05f,
+-1.241355076e-05f, -1.254218063e-05f, -1.267077747e-05f, -1.279934105e-05f, -1.292787115e-05f, -1.305636755e-05f, -1.318483004e-05f, -1.331325840e-05f, -1.344165240e-05f, -1.357001183e-05f,
+-1.369833647e-05f, -1.382662609e-05f, -1.395488049e-05f, -1.408309944e-05f, -1.421128272e-05f, -1.433943012e-05f, -1.446754141e-05f, -1.459561638e-05f, -1.472365481e-05f, -1.485165648e-05f,
+-1.497962117e-05f, -1.510754867e-05f, -1.523543875e-05f, -1.536329120e-05f, -1.549110580e-05f, -1.561888234e-05f, -1.574662059e-05f, -1.587432033e-05f, -1.600198136e-05f, -1.612960344e-05f,
+-1.625718638e-05f, -1.638472994e-05f, -1.651223391e-05f, -1.663969807e-05f, -1.676712221e-05f, -1.689450611e-05f, -1.702184955e-05f, -1.714915232e-05f, -1.727641419e-05f, -1.740363496e-05f,
+-1.753081441e-05f, -1.765795231e-05f, -1.778504846e-05f, -1.791210263e-05f, -1.803911461e-05f, -1.816608419e-05f, -1.829301115e-05f, -1.841989527e-05f, -1.854673634e-05f, -1.867353414e-05f,
+-1.880028846e-05f, -1.892699908e-05f, -1.905366578e-05f, -1.918028835e-05f, -1.930686658e-05f, -1.943340025e-05f, -1.955988914e-05f, -1.968633304e-05f, -1.981273174e-05f, -1.993908501e-05f,
+-2.006539266e-05f, -2.019165445e-05f, -2.031787018e-05f, -2.044403963e-05f, -2.057016259e-05f, -2.069623885e-05f, -2.082226818e-05f, -2.094825038e-05f, -2.107418524e-05f, -2.120007253e-05f,
+-2.132591204e-05f, -2.145170357e-05f, -2.157744690e-05f, -2.170314181e-05f, -2.182878809e-05f, -2.195438554e-05f, -2.207993392e-05f, -2.220543304e-05f, -2.233088268e-05f, -2.245628263e-05f,
+-2.258163267e-05f, -2.270693259e-05f, -2.283218219e-05f, -2.295738124e-05f, -2.308252953e-05f, -2.320762686e-05f, -2.333267301e-05f, -2.345766777e-05f, -2.358261093e-05f, -2.370750227e-05f,
+-2.383234159e-05f, -2.395712867e-05f, -2.408186331e-05f, -2.420654528e-05f, -2.433117438e-05f, -2.445575041e-05f, -2.458027314e-05f, -2.470474236e-05f, -2.482915788e-05f, -2.495351947e-05f,
+-2.507782692e-05f, -2.520208003e-05f, -2.532627859e-05f, -2.545042238e-05f, -2.557451119e-05f, -2.569854482e-05f, -2.582252306e-05f, -2.594644569e-05f, -2.607031251e-05f, -2.619412330e-05f,
+-2.631787786e-05f, -2.644157599e-05f, -2.656521746e-05f, -2.668880207e-05f, -2.681232961e-05f, -2.693579987e-05f, -2.705921265e-05f, -2.718256774e-05f, -2.730586492e-05f, -2.742910400e-05f,
+-2.755228475e-05f, -2.767540698e-05f, -2.779847047e-05f, -2.792147502e-05f, -2.804442042e-05f, -2.816730647e-05f, -2.829013295e-05f, -2.841289965e-05f, -2.853560638e-05f, -2.865825292e-05f,
+-2.878083907e-05f, -2.890336462e-05f, -2.902582937e-05f, -2.914823310e-05f, -2.927057561e-05f, -2.939285669e-05f, -2.951507614e-05f, -2.963723376e-05f, -2.975932933e-05f, -2.988136265e-05f,
+-3.000333352e-05f, -3.012524173e-05f, -3.024708707e-05f, -3.036886934e-05f, -3.049058833e-05f, -3.061224384e-05f, -3.073383567e-05f, -3.085536360e-05f, -3.097682744e-05f, -3.109822698e-05f,
+-3.121956201e-05f, -3.134083233e-05f, -3.146203775e-05f, -3.158317804e-05f, -3.170425302e-05f, -3.182526247e-05f, -3.194620619e-05f, -3.206708398e-05f, -3.218789563e-05f, -3.230864095e-05f,
+-3.242931973e-05f, -3.254993176e-05f, -3.267047685e-05f, -3.279095478e-05f, -3.291136537e-05f, -3.303170840e-05f, -3.315198367e-05f, -3.327219099e-05f, -3.339233014e-05f, -3.351240093e-05f,
+-3.363240316e-05f, -3.375233662e-05f, -3.387220112e-05f, -3.399199644e-05f, -3.411172240e-05f, -3.423137878e-05f, -3.435096540e-05f, -3.447048204e-05f, -3.458992851e-05f, -3.470930460e-05f,
+-3.482861012e-05f, -3.494784487e-05f, -3.506700865e-05f, -3.518610125e-05f, -3.530512247e-05f, -3.542407212e-05f, -3.554295000e-05f, -3.566175591e-05f, -3.578048965e-05f, -3.589915101e-05f,
+-3.601773981e-05f, -3.613625584e-05f, -3.625469890e-05f, -3.637306880e-05f, -3.649136533e-05f, -3.660958830e-05f, -3.672773751e-05f, -3.684581277e-05f, -3.696381387e-05f, -3.708174061e-05f,
+-3.719959281e-05f, -3.731737025e-05f, -3.743507276e-05f, -3.755270012e-05f, -3.767025214e-05f, -3.778772862e-05f, -3.790512938e-05f, -3.802245420e-05f, -3.813970290e-05f, -3.825687528e-05f,
+-3.837397114e-05f, -3.849099029e-05f, -3.860793253e-05f, -3.872479766e-05f, -3.884158550e-05f, -3.895829584e-05f, -3.907492849e-05f, -3.919148325e-05f, -3.930795994e-05f, -3.942435835e-05f,
+-3.954067830e-05f, -3.965691958e-05f, -3.977308200e-05f, -3.988916537e-05f, -4.000516950e-05f, -4.012109419e-05f, -4.023693924e-05f, -4.035270447e-05f, -4.046838968e-05f, -4.058399468e-05f,
+-4.069951927e-05f, -4.081496327e-05f, -4.093032647e-05f, -4.104560869e-05f, -4.116080974e-05f, -4.127592942e-05f, -4.139096754e-05f, -4.150592391e-05f, -4.162079833e-05f, -4.173559063e-05f,
+-4.185030059e-05f, -4.196492804e-05f, -4.207947278e-05f, -4.219393462e-05f, -4.230831338e-05f, -4.242260885e-05f, -4.253682085e-05f, -4.265094919e-05f, -4.276499368e-05f, -4.287895413e-05f,
+-4.299283035e-05f, -4.310662214e-05f, -4.322032933e-05f, -4.333395172e-05f, -4.344748913e-05f, -4.356094135e-05f, -4.367430821e-05f, -4.378758952e-05f, -4.390078508e-05f, -4.401389471e-05f,
+-4.412691822e-05f, -4.423985543e-05f, -4.435270614e-05f, -4.446547017e-05f, -4.457814733e-05f, -4.469073743e-05f, -4.480324029e-05f, -4.491565571e-05f, -4.502798352e-05f, -4.514022352e-05f,
+-4.525237554e-05f, -4.536443937e-05f, -4.547641485e-05f, -4.558830177e-05f, -4.570009996e-05f, -4.581180922e-05f, -4.592342938e-05f, -4.603496025e-05f, -4.614640165e-05f, -4.625775338e-05f,
+-4.636901527e-05f, -4.648018712e-05f, -4.659126876e-05f, -4.670226000e-05f, -4.681316066e-05f, -4.692397055e-05f, -4.703468949e-05f, -4.714531730e-05f, -4.725585378e-05f, -4.736629877e-05f,
+-4.747665207e-05f, -4.758691351e-05f, -4.769708290e-05f, -4.780716005e-05f, -4.791714479e-05f, -4.802703694e-05f, -4.813683630e-05f, -4.824654271e-05f, -4.835615597e-05f, -4.846567591e-05f,
+-4.857510235e-05f, -4.868443510e-05f, -4.879367399e-05f, -4.890281882e-05f, -4.901186943e-05f, -4.912082564e-05f, -4.922968725e-05f, -4.933845410e-05f, -4.944712600e-05f, -4.955570277e-05f,
+-4.966418423e-05f, -4.977257021e-05f, -4.988086052e-05f, -4.998905499e-05f, -5.009715343e-05f, -5.020515568e-05f, -5.031306154e-05f, -5.042087085e-05f, -5.052858342e-05f, -5.063619907e-05f,
+-5.074371764e-05f, -5.085113893e-05f, -5.095846278e-05f, -5.106568901e-05f, -5.117281744e-05f, -5.127984788e-05f, -5.138678018e-05f, -5.149361415e-05f, -5.160034961e-05f, -5.170698638e-05f,
+-5.181352430e-05f, -5.191996319e-05f, -5.202630287e-05f, -5.213254316e-05f, -5.223868390e-05f, -5.234472490e-05f, -5.245066600e-05f, -5.255650701e-05f, -5.266224776e-05f, -5.276788808e-05f,
+-5.287342780e-05f, -5.297886674e-05f, -5.308420472e-05f, -5.318944158e-05f, -5.329457714e-05f, -5.339961123e-05f, -5.350454368e-05f, -5.360937430e-05f, -5.371410294e-05f, -5.381872942e-05f,
+-5.392325356e-05f, -5.402767520e-05f, -5.413199416e-05f, -5.423621027e-05f, -5.434032336e-05f, -5.444433326e-05f, -5.454823980e-05f, -5.465204281e-05f, -5.475574211e-05f, -5.485933754e-05f,
+-5.496282893e-05f, -5.506621611e-05f, -5.516949890e-05f, -5.527267714e-05f, -5.537575066e-05f, -5.547871929e-05f, -5.558158286e-05f, -5.568434120e-05f, -5.578699415e-05f, -5.588954153e-05f,
+-5.599198317e-05f, -5.609431892e-05f, -5.619654860e-05f, -5.629867204e-05f, -5.640068908e-05f, -5.650259955e-05f, -5.660440328e-05f, -5.670610011e-05f, -5.680768987e-05f, -5.690917239e-05f,
+-5.701054751e-05f, -5.711181505e-05f, -5.721297487e-05f, -5.731402678e-05f, -5.741497063e-05f, -5.751580625e-05f, -5.761653347e-05f, -5.771715214e-05f, -5.781766208e-05f, -5.791806313e-05f,
+-5.801835512e-05f, -5.811853791e-05f, -5.821861131e-05f, -5.831857516e-05f, -5.841842931e-05f, -5.851817359e-05f, -5.861780784e-05f, -5.871733189e-05f, -5.881674558e-05f, -5.891604875e-05f,
+-5.901524124e-05f, -5.911432288e-05f, -5.921329352e-05f, -5.931215299e-05f, -5.941090114e-05f, -5.950953779e-05f, -5.960806279e-05f, -5.970647598e-05f, -5.980477721e-05f, -5.990296629e-05f,
+-6.000104309e-05f, -6.009900744e-05f, -6.019685917e-05f, -6.029459814e-05f, -6.039222417e-05f, -6.048973712e-05f, -6.058713682e-05f, -6.068442312e-05f, -6.078159585e-05f, -6.087865486e-05f,
+-6.097559999e-05f, -6.107243108e-05f, -6.116914797e-05f, -6.126575052e-05f, -6.136223856e-05f, -6.145861192e-05f, -6.155487047e-05f, -6.165101404e-05f, -6.174704247e-05f, -6.184295562e-05f,
+-6.193875331e-05f, -6.203443540e-05f, -6.213000174e-05f, -6.222545216e-05f, -6.232078652e-05f, -6.241600465e-05f, -6.251110640e-05f, -6.260609163e-05f, -6.270096017e-05f, -6.279571187e-05f,
+-6.289034657e-05f, -6.298486414e-05f, -6.307926440e-05f, -6.317354721e-05f, -6.326771241e-05f, -6.336175986e-05f, -6.345568940e-05f, -6.354950088e-05f, -6.364319414e-05f, -6.373676904e-05f,
+-6.383022542e-05f, -6.392356313e-05f, -6.401678202e-05f, -6.410988195e-05f, -6.420286275e-05f, -6.429572429e-05f, -6.438846640e-05f, -6.448108894e-05f, -6.457359176e-05f, -6.466597471e-05f,
+-6.475823765e-05f, -6.485038041e-05f, -6.494240286e-05f, -6.503430484e-05f, -6.512608621e-05f, -6.521774682e-05f, -6.530928651e-05f, -6.540070515e-05f, -6.549200259e-05f, -6.558317867e-05f,
+-6.567423325e-05f, -6.576516619e-05f, -6.585597733e-05f, -6.594666654e-05f, -6.603723366e-05f, -6.612767855e-05f, -6.621800106e-05f, -6.630820105e-05f, -6.639827838e-05f, -6.648823289e-05f,
+-6.657806444e-05f, -6.666777289e-05f, -6.675735810e-05f, -6.684681992e-05f, -6.693615820e-05f, -6.702537280e-05f, -6.711446359e-05f, -6.720343041e-05f, -6.729227312e-05f, -6.738099158e-05f,
+-6.746958565e-05f, -6.755805519e-05f, -6.764640005e-05f, -6.773462009e-05f, -6.782271517e-05f, -6.791068515e-05f, -6.799852988e-05f, -6.808624923e-05f, -6.817384306e-05f, -6.826131123e-05f,
+-6.834865359e-05f, -6.843587000e-05f, -6.852296033e-05f, -6.860992443e-05f, -6.869676217e-05f, -6.878347341e-05f, -6.887005801e-05f, -6.895651583e-05f, -6.904284673e-05f, -6.912905057e-05f,
+-6.921512722e-05f, -6.930107653e-05f, -6.938689838e-05f, -6.947259262e-05f, -6.955815912e-05f, -6.964359773e-05f, -6.972890833e-05f, -6.981409078e-05f, -6.989914493e-05f, -6.998407066e-05f,
+-7.006886783e-05f, -7.015353631e-05f, -7.023807595e-05f, -7.032248663e-05f, -7.040676821e-05f, -7.049092055e-05f, -7.057494352e-05f, -7.065883699e-05f, -7.074260082e-05f, -7.082623488e-05f,
+-7.090973904e-05f, -7.099311316e-05f, -7.107635712e-05f, -7.115947077e-05f, -7.124245399e-05f, -7.132530664e-05f, -7.140802859e-05f, -7.149061971e-05f, -7.157307988e-05f, -7.165540895e-05f,
+-7.173760680e-05f, -7.181967329e-05f, -7.190160830e-05f, -7.198341170e-05f, -7.206508336e-05f, -7.214662314e-05f, -7.222803092e-05f, -7.230930656e-05f, -7.239044995e-05f, -7.247146094e-05f,
+-7.255233942e-05f, -7.263308525e-05f, -7.271369831e-05f, -7.279417847e-05f, -7.287452560e-05f, -7.295473957e-05f, -7.303482025e-05f, -7.311476753e-05f, -7.319458127e-05f, -7.327426135e-05f,
+-7.335380763e-05f, -7.343322000e-05f, -7.351249834e-05f, -7.359164250e-05f, -7.367065238e-05f, -7.374952784e-05f, -7.382826876e-05f, -7.390687501e-05f, -7.398534648e-05f, -7.406368303e-05f,
+-7.414188455e-05f, -7.421995091e-05f, -7.429788198e-05f, -7.437567765e-05f, -7.445333779e-05f, -7.453086228e-05f, -7.460825100e-05f, -7.468550383e-05f, -7.476262064e-05f, -7.483960131e-05f,
+-7.491644572e-05f, -7.499315375e-05f, -7.506972529e-05f, -7.514616020e-05f, -7.522245837e-05f, -7.529861968e-05f, -7.537464401e-05f, -7.545053124e-05f, -7.552628125e-05f, -7.560189393e-05f,
+-7.567736915e-05f, -7.575270679e-05f, -7.582790674e-05f, -7.590296888e-05f, -7.597789309e-05f, -7.605267926e-05f, -7.612732726e-05f, -7.620183698e-05f, -7.627620830e-05f, -7.635044112e-05f,
+-7.642453530e-05f, -7.649849073e-05f, -7.657230731e-05f, -7.664598491e-05f, -7.671952342e-05f, -7.679292272e-05f, -7.686618270e-05f, -7.693930324e-05f, -7.701228424e-05f, -7.708512557e-05f,
+-7.715782712e-05f, -7.723038878e-05f, -7.730281044e-05f, -7.737509199e-05f, -7.744723330e-05f, -7.751923427e-05f, -7.759109479e-05f, -7.766281474e-05f, -7.773439401e-05f, -7.780583249e-05f,
+-7.787713008e-05f, -7.794828665e-05f, -7.801930210e-05f, -7.809017632e-05f, -7.816090920e-05f, -7.823150062e-05f, -7.830195049e-05f, -7.837225868e-05f, -7.844242509e-05f, -7.851244962e-05f,
+-7.858233214e-05f, -7.865207256e-05f, -7.872167077e-05f, -7.879112665e-05f, -7.886044011e-05f, -7.892961103e-05f, -7.899863930e-05f, -7.906752483e-05f, -7.913626749e-05f, -7.920486720e-05f,
+-7.927332383e-05f, -7.934163729e-05f, -7.940980747e-05f, -7.947783426e-05f, -7.954571757e-05f, -7.961345727e-05f, -7.968105328e-05f, -7.974850548e-05f, -7.981581377e-05f, -7.988297806e-05f,
+-7.994999822e-05f, -8.001687417e-05f, -8.008360579e-05f, -8.015019299e-05f, -8.021663567e-05f, -8.028293371e-05f, -8.034908703e-05f, -8.041509551e-05f, -8.048095906e-05f, -8.054667757e-05f,
+-8.061225095e-05f, -8.067767909e-05f, -8.074296190e-05f, -8.080809926e-05f, -8.087309109e-05f, -8.093793729e-05f, -8.100263775e-05f, -8.106719237e-05f, -8.113160106e-05f, -8.119586372e-05f,
+-8.125998025e-05f, -8.132395055e-05f, -8.138777453e-05f, -8.145145208e-05f, -8.151498311e-05f, -8.157836752e-05f, -8.164160522e-05f, -8.170469611e-05f, -8.176764010e-05f, -8.183043708e-05f,
+-8.189308696e-05f, -8.195558965e-05f, -8.201794504e-05f, -8.208015306e-05f, -8.214221360e-05f, -8.220412656e-05f, -8.226589186e-05f, -8.232750940e-05f, -8.238897908e-05f, -8.245030082e-05f,
+-8.251147452e-05f, -8.257250008e-05f, -8.263337742e-05f, -8.269410645e-05f, -8.275468706e-05f, -8.281511917e-05f, -8.287540269e-05f, -8.293553753e-05f, -8.299552359e-05f, -8.305536078e-05f,
+-8.311504902e-05f, -8.317458822e-05f, -8.323397828e-05f, -8.329321911e-05f, -8.335231063e-05f, -8.341125275e-05f, -8.347004538e-05f, -8.352868842e-05f, -8.358718180e-05f, -8.364552542e-05f,
+-8.370371919e-05f, -8.376176304e-05f, -8.381965686e-05f, -8.387740058e-05f, -8.393499411e-05f, -8.399243736e-05f, -8.404973025e-05f, -8.410687268e-05f, -8.416386458e-05f, -8.422070585e-05f,
+-8.427739642e-05f, -8.433393620e-05f, -8.439032511e-05f, -8.444656305e-05f, -8.450264995e-05f, -8.455858572e-05f, -8.461437029e-05f, -8.467000356e-05f, -8.472548545e-05f, -8.478081588e-05f,
+-8.483599477e-05f, -8.489102204e-05f, -8.494589760e-05f, -8.500062138e-05f, -8.505519328e-05f, -8.510961324e-05f, -8.516388117e-05f, -8.521799699e-05f, -8.527196062e-05f, -8.532577197e-05f,
+-8.537943098e-05f, -8.543293756e-05f, -8.548629163e-05f, -8.553949312e-05f, -8.559254193e-05f, -8.564543801e-05f, -8.569818126e-05f, -8.575077161e-05f, -8.580320899e-05f, -8.585549331e-05f,
+-8.590762450e-05f, -8.595960248e-05f, -8.601142718e-05f, -8.606309852e-05f, -8.611461642e-05f, -8.616598082e-05f, -8.621719162e-05f, -8.626824876e-05f, -8.631915217e-05f, -8.636990177e-05f,
+-8.642049748e-05f, -8.647093923e-05f, -8.652122695e-05f, -8.657136056e-05f, -8.662133999e-05f, -8.667116518e-05f, -8.672083603e-05f, -8.677035249e-05f, -8.681971449e-05f, -8.686892194e-05f,
+-8.691797478e-05f, -8.696687294e-05f, -8.701561634e-05f, -8.706420492e-05f, -8.711263860e-05f, -8.716091732e-05f, -8.720904101e-05f, -8.725700959e-05f, -8.730482299e-05f, -8.735248116e-05f,
+-8.739998401e-05f, -8.744733148e-05f, -8.749452351e-05f, -8.754156002e-05f, -8.758844095e-05f, -8.763516622e-05f, -8.768173578e-05f, -8.772814956e-05f, -8.777440748e-05f, -8.782050949e-05f,
+-8.786645551e-05f, -8.791224549e-05f, -8.795787935e-05f, -8.800335703e-05f, -8.804867847e-05f, -8.809384359e-05f, -8.813885235e-05f, -8.818370467e-05f, -8.822840049e-05f, -8.827293974e-05f,
+-8.831732237e-05f, -8.836154831e-05f, -8.840561749e-05f, -8.844952986e-05f, -8.849328535e-05f, -8.853688390e-05f, -8.858032546e-05f, -8.862360995e-05f, -8.866673731e-05f, -8.870970750e-05f,
+-8.875252044e-05f, -8.879517608e-05f, -8.883767435e-05f, -8.888001520e-05f, -8.892219856e-05f, -8.896422439e-05f, -8.900609261e-05f, -8.904780318e-05f, -8.908935602e-05f, -8.913075109e-05f,
+-8.917198833e-05f, -8.921306768e-05f, -8.925398909e-05f, -8.929475248e-05f, -8.933535782e-05f, -8.937580504e-05f, -8.941609409e-05f, -8.945622491e-05f, -8.949619745e-05f, -8.953601165e-05f,
+-8.957566745e-05f, -8.961516480e-05f, -8.965450366e-05f, -8.969368395e-05f, -8.973270564e-05f, -8.977156866e-05f, -8.981027297e-05f, -8.984881850e-05f, -8.988720521e-05f, -8.992543305e-05f,
+-8.996350196e-05f, -9.000141189e-05f, -9.003916279e-05f, -9.007675461e-05f, -9.011418730e-05f, -9.015146081e-05f, -9.018857508e-05f, -9.022553007e-05f, -9.026232572e-05f, -9.029896199e-05f,
+-9.033543884e-05f, -9.037175619e-05f, -9.040791402e-05f, -9.044391227e-05f, -9.047975090e-05f, -9.051542985e-05f, -9.055094908e-05f, -9.058630854e-05f, -9.062150818e-05f, -9.065654797e-05f,
+-9.069142784e-05f, -9.072614775e-05f, -9.076070767e-05f, -9.079510754e-05f, -9.082934732e-05f, -9.086342695e-05f, -9.089734641e-05f, -9.093110564e-05f, -9.096470460e-05f, -9.099814325e-05f,
+-9.103142154e-05f, -9.106453942e-05f, -9.109749686e-05f, -9.113029382e-05f, -9.116293024e-05f, -9.119540609e-05f, -9.122772133e-05f, -9.125987591e-05f, -9.129186980e-05f, -9.132370294e-05f,
+-9.135537531e-05f, -9.138688686e-05f, -9.141823754e-05f, -9.144942733e-05f, -9.148045618e-05f, -9.151132405e-05f, -9.154203090e-05f, -9.157257669e-05f, -9.160296139e-05f, -9.163318495e-05f,
+-9.166324735e-05f, -9.169314853e-05f, -9.172288847e-05f, -9.175246712e-05f, -9.178188445e-05f, -9.181114042e-05f, -9.184023500e-05f, -9.186916815e-05f, -9.189793983e-05f, -9.192655002e-05f,
+-9.195499866e-05f, -9.198328574e-05f, -9.201141121e-05f, -9.203937504e-05f, -9.206717719e-05f, -9.209481764e-05f, -9.212229634e-05f, -9.214961327e-05f, -9.217676840e-05f, -9.220376168e-05f,
+-9.223059309e-05f, -9.225726260e-05f, -9.228377017e-05f, -9.231011577e-05f, -9.233629937e-05f, -9.236232094e-05f, -9.238818046e-05f, -9.241387788e-05f, -9.243941318e-05f, -9.246478633e-05f,
+-9.248999729e-05f, -9.251504605e-05f, -9.253993257e-05f, -9.256465683e-05f, -9.258921878e-05f, -9.261361842e-05f, -9.263785570e-05f, -9.266193060e-05f, -9.268584310e-05f, -9.270959316e-05f,
+-9.273318077e-05f, -9.275660588e-05f, -9.277986849e-05f, -9.280296855e-05f, -9.282590605e-05f, -9.284868097e-05f, -9.287129327e-05f, -9.289374293e-05f, -9.291602992e-05f, -9.293815423e-05f,
+-9.296011583e-05f, -9.298191469e-05f, -9.300355080e-05f, -9.302502412e-05f, -9.304633464e-05f, -9.306748234e-05f, -9.308846718e-05f, -9.310928916e-05f, -9.312994824e-05f, -9.315044442e-05f,
+-9.317077765e-05f, -9.319094794e-05f, -9.321095524e-05f, -9.323079955e-05f, -9.325048085e-05f, -9.326999911e-05f, -9.328935432e-05f, -9.330854645e-05f, -9.332757550e-05f, -9.334644143e-05f,
+-9.336514423e-05f, -9.338368389e-05f, -9.340206038e-05f, -9.342027369e-05f, -9.343832381e-05f, -9.345621070e-05f, -9.347393437e-05f, -9.349149479e-05f, -9.350889194e-05f, -9.352612582e-05f,
+-9.354319640e-05f, -9.356010367e-05f, -9.357684762e-05f, -9.359342823e-05f, -9.360984549e-05f, -9.362609937e-05f, -9.364218988e-05f, -9.365811700e-05f, -9.367388070e-05f, -9.368948099e-05f,
+-9.370491784e-05f, -9.372019126e-05f, -9.373530121e-05f, -9.375024770e-05f, -9.376503070e-05f, -9.377965022e-05f, -9.379410623e-05f, -9.380839874e-05f, -9.382252772e-05f, -9.383649317e-05f,
+-9.385029508e-05f, -9.386393343e-05f, -9.387740823e-05f, -9.389071946e-05f, -9.390386711e-05f, -9.391685118e-05f, -9.392967165e-05f, -9.394232852e-05f, -9.395482178e-05f, -9.396715143e-05f,
+-9.397931745e-05f, -9.399131985e-05f, -9.400315861e-05f, -9.401483373e-05f, -9.402634520e-05f, -9.403769302e-05f, -9.404887719e-05f, -9.405989769e-05f, -9.407075452e-05f, -9.408144769e-05f,
+-9.409197717e-05f, -9.410234298e-05f, -9.411254511e-05f, -9.412258356e-05f, -9.413245831e-05f, -9.414216938e-05f, -9.415171675e-05f, -9.416110042e-05f, -9.417032040e-05f, -9.417937669e-05f,
+-9.418826927e-05f, -9.419699815e-05f, -9.420556334e-05f, -9.421396482e-05f, -9.422220260e-05f, -9.423027668e-05f, -9.423818707e-05f, -9.424593375e-05f, -9.425351673e-05f, -9.426093602e-05f,
+-9.426819161e-05f, -9.427528351e-05f, -9.428221172e-05f, -9.428897624e-05f, -9.429557708e-05f, -9.430201424e-05f, -9.430828771e-05f, -9.431439751e-05f, -9.432034364e-05f, -9.432612610e-05f,
+-9.433174490e-05f, -9.433720005e-05f, -9.434249154e-05f, -9.434761938e-05f, -9.435258358e-05f, -9.435738415e-05f, -9.436202109e-05f, -9.436649440e-05f, -9.437080410e-05f, -9.437495019e-05f,
+-9.437893268e-05f, -9.438275158e-05f, -9.438640689e-05f, -9.438989862e-05f, -9.439322678e-05f, -9.439639138e-05f, -9.439939243e-05f, -9.440222994e-05f, -9.440490391e-05f, -9.440741437e-05f,
+-9.440976131e-05f, -9.441194475e-05f, -9.441396469e-05f, -9.441582116e-05f, -9.441751416e-05f, -9.441904370e-05f, -9.442040980e-05f, -9.442161246e-05f, -9.442265170e-05f, -9.442352753e-05f,
+-9.442423997e-05f, -9.442478903e-05f, -9.442517472e-05f, -9.442539705e-05f, -9.442545604e-05f, -9.442535171e-05f, -9.442508407e-05f, -9.442465313e-05f, -9.442405890e-05f, -9.442330142e-05f,
+-9.442238068e-05f, -9.442129671e-05f, -9.442004952e-05f, -9.441863913e-05f, -9.441706556e-05f, -9.441532883e-05f, -9.441342894e-05f, -9.441136592e-05f, -9.440913979e-05f, -9.440675056e-05f,
+-9.440419826e-05f, -9.440148290e-05f, -9.439860450e-05f, -9.439556309e-05f, -9.439235867e-05f, -9.438899128e-05f, -9.438546093e-05f, -9.438176763e-05f, -9.437791143e-05f, -9.437389232e-05f,
+-9.436971035e-05f, -9.436536551e-05f, -9.436085785e-05f, -9.435618738e-05f, -9.435135413e-05f, -9.434635811e-05f, -9.434119935e-05f, -9.433587787e-05f, -9.433039370e-05f, -9.432474686e-05f,
+-9.431893738e-05f, -9.431296527e-05f, -9.430683057e-05f, -9.430053330e-05f, -9.429407349e-05f, -9.428745115e-05f, -9.428066632e-05f, -9.427371903e-05f, -9.426660929e-05f, -9.425933714e-05f,
+-9.425190260e-05f, -9.424430570e-05f, -9.423654647e-05f, -9.422862493e-05f, -9.422054112e-05f, -9.421229505e-05f, -9.420388677e-05f, -9.419531630e-05f, -9.418658367e-05f, -9.417768890e-05f,
+-9.416863204e-05f, -9.415941310e-05f, -9.415003212e-05f, -9.414048913e-05f, -9.413078416e-05f, -9.412091724e-05f, -9.411088840e-05f, -9.410069768e-05f, -9.409034510e-05f, -9.407983070e-05f,
+-9.406915452e-05f, -9.405831657e-05f, -9.404731691e-05f, -9.403615555e-05f, -9.402483254e-05f, -9.401334791e-05f, -9.400170169e-05f, -9.398989392e-05f, -9.397792463e-05f, -9.396579385e-05f,
+-9.395350163e-05f, -9.394104800e-05f, -9.392843299e-05f, -9.391565663e-05f, -9.390271898e-05f, -9.388962006e-05f, -9.387635991e-05f, -9.386293856e-05f, -9.384935606e-05f, -9.383561244e-05f,
+-9.382170775e-05f, -9.380764201e-05f, -9.379341527e-05f, -9.377902757e-05f, -9.376447894e-05f, -9.374976943e-05f, -9.373489907e-05f, -9.371986791e-05f, -9.370467598e-05f, -9.368932333e-05f,
+-9.367381000e-05f, -9.365813602e-05f, -9.364230145e-05f, -9.362630631e-05f, -9.361015066e-05f, -9.359383453e-05f, -9.357735797e-05f, -9.356072102e-05f, -9.354392373e-05f, -9.352696613e-05f,
+-9.350984827e-05f, -9.349257019e-05f, -9.347513195e-05f, -9.345753357e-05f, -9.343977512e-05f, -9.342185662e-05f, -9.340377813e-05f, -9.338553970e-05f, -9.336714137e-05f, -9.334858318e-05f,
+-9.332986518e-05f, -9.331098742e-05f, -9.329194994e-05f, -9.327275280e-05f, -9.325339603e-05f, -9.323387969e-05f, -9.321420383e-05f, -9.319436849e-05f, -9.317437372e-05f, -9.315421957e-05f,
+-9.313390609e-05f, -9.311343333e-05f, -9.309280134e-05f, -9.307201016e-05f, -9.305105986e-05f, -9.302995047e-05f, -9.300868205e-05f, -9.298725465e-05f, -9.296566833e-05f, -9.294392312e-05f,
+-9.292201909e-05f, -9.289995629e-05f, -9.287773477e-05f, -9.285535457e-05f, -9.283281576e-05f, -9.281011839e-05f, -9.278726251e-05f, -9.276424818e-05f, -9.274107544e-05f, -9.271774436e-05f,
+-9.269425498e-05f, -9.267060736e-05f, -9.264680156e-05f, -9.262283763e-05f, -9.259871563e-05f, -9.257443561e-05f, -9.254999764e-05f, -9.252540175e-05f, -9.250064802e-05f, -9.247573650e-05f,
+-9.245066725e-05f, -9.242544031e-05f, -9.240005576e-05f, -9.237451365e-05f, -9.234881404e-05f, -9.232295698e-05f, -9.229694253e-05f, -9.227077076e-05f, -9.224444173e-05f, -9.221795548e-05f,
+-9.219131209e-05f, -9.216451161e-05f, -9.213755410e-05f, -9.211043962e-05f, -9.208316824e-05f, -9.205574001e-05f, -9.202815500e-05f, -9.200041327e-05f, -9.197251488e-05f, -9.194445989e-05f,
+-9.191624837e-05f, -9.188788037e-05f, -9.185935597e-05f, -9.183067521e-05f, -9.180183818e-05f, -9.177284492e-05f, -9.174369551e-05f, -9.171439002e-05f, -9.168492849e-05f, -9.165531100e-05f,
+-9.162553762e-05f, -9.159560841e-05f, -9.156552343e-05f, -9.153528275e-05f, -9.150488644e-05f, -9.147433457e-05f, -9.144362719e-05f, -9.141276438e-05f, -9.138174621e-05f, -9.135057273e-05f,
+-9.131924403e-05f, -9.128776017e-05f, -9.125612121e-05f, -9.122432722e-05f, -9.119237828e-05f, -9.116027445e-05f, -9.112801580e-05f, -9.109560240e-05f, -9.106303433e-05f, -9.103031164e-05f,
+-9.099743442e-05f, -9.096440273e-05f, -9.093121664e-05f, -9.089787623e-05f, -9.086438156e-05f, -9.083073271e-05f, -9.079692975e-05f, -9.076297275e-05f, -9.072886178e-05f, -9.069459692e-05f,
+-9.066017824e-05f, -9.062560581e-05f, -9.059087971e-05f, -9.055600001e-05f, -9.052096678e-05f, -9.048578010e-05f, -9.045044005e-05f, -9.041494669e-05f, -9.037930010e-05f, -9.034350036e-05f,
+-9.030754755e-05f, -9.027144173e-05f, -9.023518299e-05f, -9.019877141e-05f, -9.016220705e-05f, -9.012548999e-05f, -9.008862032e-05f, -9.005159811e-05f, -9.001442343e-05f, -8.997709637e-05f,
+-8.993961700e-05f, -8.990198541e-05f, -8.986420166e-05f, -8.982626585e-05f, -8.978817804e-05f, -8.974993832e-05f, -8.971154677e-05f, -8.967300346e-05f, -8.963430849e-05f, -8.959546192e-05f,
+-8.955646384e-05f, -8.951731433e-05f, -8.947801347e-05f, -8.943856134e-05f, -8.939895803e-05f, -8.935920361e-05f, -8.931929817e-05f, -8.927924179e-05f, -8.923903456e-05f, -8.919867655e-05f,
+-8.915816785e-05f, -8.911750855e-05f, -8.907669872e-05f, -8.903573845e-05f, -8.899462783e-05f, -8.895336694e-05f, -8.891195586e-05f, -8.887039468e-05f, -8.882868349e-05f, -8.878682237e-05f,
+-8.874481140e-05f, -8.870265067e-05f, -8.866034028e-05f, -8.861788030e-05f, -8.857527082e-05f, -8.853251192e-05f, -8.848960371e-05f, -8.844654626e-05f, -8.840333966e-05f, -8.835998399e-05f,
+-8.831647936e-05f, -8.827282584e-05f, -8.822902353e-05f, -8.818507251e-05f, -8.814097287e-05f, -8.809672471e-05f, -8.805232811e-05f, -8.800778316e-05f, -8.796308995e-05f, -8.791824858e-05f,
+-8.787325913e-05f, -8.782812170e-05f, -8.778283637e-05f, -8.773740324e-05f, -8.769182240e-05f, -8.764609394e-05f, -8.760021796e-05f, -8.755419454e-05f, -8.750802378e-05f, -8.746170577e-05f,
+-8.741524061e-05f, -8.736862839e-05f, -8.732186920e-05f, -8.727496314e-05f, -8.722791029e-05f, -8.718071076e-05f, -8.713336465e-05f, -8.708587203e-05f, -8.703823302e-05f, -8.699044770e-05f,
+-8.694251618e-05f, -8.689443854e-05f, -8.684621488e-05f, -8.679784531e-05f, -8.674932991e-05f, -8.670066878e-05f, -8.665186203e-05f, -8.660290974e-05f, -8.655381202e-05f, -8.650456896e-05f,
+-8.645518066e-05f, -8.640564723e-05f, -8.635596875e-05f, -8.630614533e-05f, -8.625617707e-05f, -8.620606406e-05f, -8.615580641e-05f, -8.610540421e-05f, -8.605485757e-05f, -8.600416658e-05f,
+-8.595333135e-05f, -8.590235198e-05f, -8.585122857e-05f, -8.579996121e-05f, -8.574855002e-05f, -8.569699509e-05f, -8.564529652e-05f, -8.559345442e-05f, -8.554146889e-05f, -8.548934004e-05f,
+-8.543706795e-05f, -8.538465275e-05f, -8.533209453e-05f, -8.527939339e-05f, -8.522654944e-05f, -8.517356279e-05f, -8.512043353e-05f, -8.506716178e-05f, -8.501374763e-05f, -8.496019119e-05f,
+-8.490649258e-05f, -8.485265188e-05f, -8.479866922e-05f, -8.474454469e-05f, -8.469027840e-05f, -8.463587046e-05f, -8.458132097e-05f, -8.452663005e-05f, -8.447179779e-05f, -8.441682431e-05f,
+-8.436170972e-05f, -8.430645412e-05f, -8.425105761e-05f, -8.419552032e-05f, -8.413984234e-05f, -8.408402379e-05f, -8.402806477e-05f, -8.397196540e-05f, -8.391572578e-05f, -8.385934602e-05f,
+-8.380282624e-05f, -8.374616654e-05f, -8.368936704e-05f, -8.363242784e-05f, -8.357534906e-05f, -8.351813081e-05f, -8.346077319e-05f, -8.340327632e-05f, -8.334564032e-05f, -8.328786529e-05f,
+-8.322995135e-05f, -8.317189861e-05f, -8.311370718e-05f, -8.305537717e-05f, -8.299690870e-05f, -8.293830189e-05f, -8.287955684e-05f, -8.282067367e-05f, -8.276165249e-05f, -8.270249342e-05f,
+-8.264319658e-05f, -8.258376207e-05f, -8.252419001e-05f, -8.246448052e-05f, -8.240463372e-05f, -8.234464971e-05f, -8.228452863e-05f, -8.222427057e-05f, -8.216387566e-05f, -8.210334401e-05f,
+-8.204267575e-05f, -8.198187098e-05f, -8.192092984e-05f, -8.185985242e-05f, -8.179863886e-05f, -8.173728926e-05f, -8.167580376e-05f, -8.161418246e-05f, -8.155242548e-05f, -8.149053295e-05f,
+-8.142850498e-05f, -8.136634170e-05f, -8.130404322e-05f, -8.124160965e-05f, -8.117904114e-05f, -8.111633778e-05f, -8.105349970e-05f, -8.099052703e-05f, -8.092741989e-05f, -8.086417839e-05f,
+-8.080080265e-05f, -8.073729281e-05f, -8.067364897e-05f, -8.060987127e-05f, -8.054595982e-05f, -8.048191475e-05f, -8.041773618e-05f, -8.035342423e-05f, -8.028897903e-05f, -8.022440070e-05f,
+-8.015968936e-05f, -8.009484513e-05f, -8.002986815e-05f, -7.996475853e-05f, -7.989951641e-05f, -7.983414189e-05f, -7.976863512e-05f, -7.970299621e-05f, -7.963722529e-05f, -7.957132248e-05f,
+-7.950528792e-05f, -7.943912172e-05f, -7.937282401e-05f, -7.930639493e-05f, -7.923983459e-05f, -7.917314312e-05f, -7.910632066e-05f, -7.903936732e-05f, -7.897228324e-05f, -7.890506854e-05f,
+-7.883772334e-05f, -7.877024779e-05f, -7.870264201e-05f, -7.863490612e-05f, -7.856704025e-05f, -7.849904454e-05f, -7.843091911e-05f, -7.836266409e-05f, -7.829427962e-05f, -7.822576582e-05f,
+-7.815712281e-05f, -7.808835074e-05f, -7.801944973e-05f, -7.795041992e-05f, -7.788126143e-05f, -7.781197439e-05f, -7.774255894e-05f, -7.767301521e-05f, -7.760334333e-05f, -7.753354343e-05f,
+-7.746361564e-05f, -7.739356010e-05f, -7.732337694e-05f, -7.725306629e-05f, -7.718262828e-05f, -7.711206305e-05f, -7.704137074e-05f, -7.697055147e-05f, -7.689960537e-05f, -7.682853259e-05f,
+-7.675733326e-05f, -7.668600751e-05f, -7.661455547e-05f, -7.654297729e-05f, -7.647127309e-05f, -7.639944301e-05f, -7.632748719e-05f, -7.625540577e-05f, -7.618319887e-05f, -7.611086663e-05f,
+-7.603840920e-05f, -7.596582671e-05f, -7.589311928e-05f, -7.582028707e-05f, -7.574733021e-05f, -7.567424884e-05f, -7.560104308e-05f, -7.552771309e-05f, -7.545425900e-05f, -7.538068094e-05f,
+-7.530697906e-05f, -7.523315349e-05f, -7.515920438e-05f, -7.508513186e-05f, -7.501093606e-05f, -7.493661714e-05f, -7.486217523e-05f, -7.478761047e-05f, -7.471292299e-05f, -7.463811295e-05f,
+-7.456318048e-05f, -7.448812571e-05f, -7.441294880e-05f, -7.433764988e-05f, -7.426222910e-05f, -7.418668658e-05f, -7.411102249e-05f, -7.403523695e-05f, -7.395933011e-05f, -7.388330212e-05f,
+-7.380715311e-05f, -7.373088322e-05f, -7.365449261e-05f, -7.357798141e-05f, -7.350134976e-05f, -7.342459782e-05f, -7.334772571e-05f, -7.327073360e-05f, -7.319362161e-05f, -7.311638990e-05f,
+-7.303903860e-05f, -7.296156787e-05f, -7.288397785e-05f, -7.280626868e-05f, -7.272844050e-05f, -7.265049347e-05f, -7.257242773e-05f, -7.249424343e-05f, -7.241594070e-05f, -7.233751970e-05f,
+-7.225898057e-05f, -7.218032346e-05f, -7.210154852e-05f, -7.202265588e-05f, -7.194364571e-05f, -7.186451814e-05f, -7.178527333e-05f, -7.170591142e-05f, -7.162643255e-05f, -7.154683689e-05f,
+-7.146712457e-05f, -7.138729574e-05f, -7.130735055e-05f, -7.122728916e-05f, -7.114711170e-05f, -7.106681833e-05f, -7.098640920e-05f, -7.090588446e-05f, -7.082524425e-05f, -7.074448874e-05f,
+-7.066361805e-05f, -7.058263236e-05f, -7.050153180e-05f, -7.042031653e-05f, -7.033898670e-05f, -7.025754245e-05f, -7.017598395e-05f, -7.009431134e-05f, -7.001252477e-05f, -6.993062440e-05f,
+-6.984861038e-05f, -6.976648285e-05f, -6.968424198e-05f, -6.960188790e-05f, -6.951942079e-05f, -6.943684078e-05f, -6.935414804e-05f, -6.927134271e-05f, -6.918842495e-05f, -6.910539491e-05f,
+-6.902225274e-05f, -6.893899861e-05f, -6.885563266e-05f, -6.877215504e-05f, -6.868856592e-05f, -6.860486544e-05f, -6.852105377e-05f, -6.843713105e-05f, -6.835309744e-05f, -6.826895310e-05f,
+-6.818469819e-05f, -6.810033284e-05f, -6.801585724e-05f, -6.793127152e-05f, -6.784657585e-05f, -6.776177038e-05f, -6.767685526e-05f, -6.759183067e-05f, -6.750669674e-05f, -6.742145365e-05f,
+-6.733610154e-05f, -6.725064057e-05f, -6.716507091e-05f, -6.707939270e-05f, -6.699360611e-05f, -6.690771130e-05f, -6.682170842e-05f, -6.673559763e-05f, -6.664937909e-05f, -6.656305296e-05f,
+-6.647661940e-05f, -6.639007857e-05f, -6.630343062e-05f, -6.621667572e-05f, -6.612981403e-05f, -6.604284570e-05f, -6.595577089e-05f, -6.586858978e-05f, -6.578130250e-05f, -6.569390924e-05f,
+-6.560641014e-05f, -6.551880537e-05f, -6.543109508e-05f, -6.534327945e-05f, -6.525535863e-05f, -6.516733278e-05f, -6.507920207e-05f, -6.499096665e-05f, -6.490262670e-05f, -6.481418236e-05f,
+-6.472563380e-05f, -6.463698119e-05f, -6.454822469e-05f, -6.445936446e-05f, -6.437040067e-05f, -6.428133347e-05f, -6.419216303e-05f, -6.410288951e-05f, -6.401351309e-05f, -6.392403391e-05f,
+-6.383445215e-05f, -6.374476797e-05f, -6.365498153e-05f, -6.356509300e-05f, -6.347510255e-05f, -6.338501033e-05f, -6.329481652e-05f, -6.320452127e-05f, -6.311412475e-05f, -6.302362714e-05f,
+-6.293302859e-05f, -6.284232927e-05f, -6.275152934e-05f, -6.266062898e-05f, -6.256962834e-05f, -6.247852760e-05f, -6.238732692e-05f, -6.229602647e-05f, -6.220462641e-05f, -6.211312691e-05f,
+-6.202152815e-05f, -6.192983028e-05f, -6.183803347e-05f, -6.174613789e-05f, -6.165414372e-05f, -6.156205111e-05f, -6.146986023e-05f, -6.137757126e-05f, -6.128518436e-05f, -6.119269971e-05f,
+-6.110011746e-05f, -6.100743779e-05f, -6.091466086e-05f, -6.082178686e-05f, -6.072881594e-05f, -6.063574827e-05f, -6.054258403e-05f, -6.044932338e-05f, -6.035596650e-05f, -6.026251356e-05f,
+-6.016896471e-05f, -6.007532015e-05f, -5.998158003e-05f, -5.988774453e-05f, -5.979381381e-05f, -5.969978806e-05f, -5.960566743e-05f, -5.951145210e-05f, -5.941714225e-05f, -5.932273804e-05f,
+-5.922823965e-05f, -5.913364725e-05f, -5.903896100e-05f, -5.894418109e-05f, -5.884930768e-05f, -5.875434095e-05f, -5.865928107e-05f, -5.856412821e-05f, -5.846888255e-05f, -5.837354425e-05f,
+-5.827811350e-05f, -5.818259046e-05f, -5.808697531e-05f, -5.799126822e-05f, -5.789546937e-05f, -5.779957893e-05f, -5.770359707e-05f, -5.760752398e-05f, -5.751135981e-05f, -5.741510475e-05f,
+-5.731875897e-05f, -5.722232265e-05f, -5.712579596e-05f, -5.702917908e-05f, -5.693247218e-05f, -5.683567544e-05f, -5.673878902e-05f, -5.664181312e-05f, -5.654474790e-05f, -5.644759354e-05f,
+-5.635035022e-05f, -5.625301811e-05f, -5.615559739e-05f, -5.605808823e-05f, -5.596049082e-05f, -5.586280532e-05f, -5.576503192e-05f, -5.566717079e-05f, -5.556922211e-05f, -5.547118606e-05f,
+-5.537306281e-05f, -5.527485254e-05f, -5.517655544e-05f, -5.507817167e-05f, -5.497970141e-05f, -5.488114485e-05f, -5.478250216e-05f, -5.468377352e-05f, -5.458495911e-05f, -5.448605910e-05f,
+-5.438707368e-05f, -5.428800303e-05f, -5.418884732e-05f, -5.408960673e-05f, -5.399028144e-05f, -5.389087164e-05f, -5.379137749e-05f, -5.369179919e-05f, -5.359213691e-05f, -5.349239083e-05f,
+-5.339256113e-05f, -5.329264799e-05f, -5.319265159e-05f, -5.309257211e-05f, -5.299240973e-05f, -5.289216464e-05f, -5.279183701e-05f, -5.269142703e-05f, -5.259093487e-05f, -5.249036072e-05f,
+-5.238970475e-05f, -5.228896716e-05f, -5.218814811e-05f, -5.208724780e-05f, -5.198626641e-05f, -5.188520411e-05f, -5.178406109e-05f, -5.168283753e-05f, -5.158153362e-05f, -5.148014953e-05f,
+-5.137868545e-05f, -5.127714156e-05f, -5.117551804e-05f, -5.107381508e-05f, -5.097203286e-05f, -5.087017156e-05f, -5.076823138e-05f, -5.066621248e-05f, -5.056411505e-05f, -5.046193928e-05f,
+-5.035968535e-05f, -5.025735345e-05f, -5.015494375e-05f, -5.005245645e-05f, -4.994989172e-05f, -4.984724976e-05f, -4.974453074e-05f, -4.964173485e-05f, -4.953886228e-05f, -4.943591321e-05f,
+-4.933288782e-05f, -4.922978631e-05f, -4.912660885e-05f, -4.902335563e-05f, -4.892002683e-05f, -4.881662265e-05f, -4.871314326e-05f, -4.860958886e-05f, -4.850595963e-05f, -4.840225575e-05f,
+-4.829847741e-05f, -4.819462480e-05f, -4.809069810e-05f, -4.798669751e-05f, -4.788262320e-05f, -4.777847536e-05f, -4.767425418e-05f, -4.756995985e-05f, -4.746559255e-05f, -4.736115248e-05f,
+-4.725663981e-05f, -4.715205474e-05f, -4.704739745e-05f, -4.694266813e-05f, -4.683786697e-05f, -4.673299415e-05f, -4.662804987e-05f, -4.652303431e-05f, -4.641794766e-05f, -4.631279010e-05f,
+-4.620756183e-05f, -4.610226304e-05f, -4.599689391e-05f, -4.589145463e-05f, -4.578594539e-05f, -4.568036639e-05f, -4.557471779e-05f, -4.546899981e-05f, -4.536321262e-05f, -4.525735642e-05f,
+-4.515143139e-05f, -4.504543772e-05f, -4.493937561e-05f, -4.483324525e-05f, -4.472704681e-05f, -4.462078050e-05f, -4.451444650e-05f, -4.440804500e-05f, -4.430157620e-05f, -4.419504028e-05f,
+-4.408843743e-05f, -4.398176784e-05f, -4.387503171e-05f, -4.376822923e-05f, -4.366136058e-05f, -4.355442596e-05f, -4.344742555e-05f, -4.334035955e-05f, -4.323322816e-05f, -4.312603155e-05f,
+-4.301876992e-05f, -4.291144347e-05f, -4.280405239e-05f, -4.269659686e-05f, -4.258907707e-05f, -4.248149323e-05f, -4.237384552e-05f, -4.226613413e-05f, -4.215835926e-05f, -4.205052110e-05f,
+-4.194261984e-05f, -4.183465567e-05f, -4.172662878e-05f, -4.161853937e-05f, -4.151038764e-05f, -4.140217376e-05f, -4.129389794e-05f, -4.118556037e-05f, -4.107716124e-05f, -4.096870075e-05f,
+-4.086017908e-05f, -4.075159643e-05f, -4.064295300e-05f, -4.053424897e-05f, -4.042548455e-05f, -4.031665992e-05f, -4.020777528e-05f, -4.009883082e-05f, -3.998982673e-05f, -3.988076322e-05f,
+-3.977164047e-05f, -3.966245868e-05f, -3.955321804e-05f, -3.944391874e-05f, -3.933456099e-05f, -3.922514497e-05f, -3.911567089e-05f, -3.900613892e-05f, -3.889654928e-05f, -3.878690215e-05f,
+-3.867719773e-05f, -3.856743621e-05f, -3.845761779e-05f, -3.834774266e-05f, -3.823781102e-05f, -3.812782307e-05f, -3.801777900e-05f, -3.790767900e-05f, -3.779752327e-05f, -3.768731200e-05f,
+-3.757704540e-05f, -3.746672366e-05f, -3.735634697e-05f, -3.724591553e-05f, -3.713542953e-05f, -3.702488917e-05f, -3.691429465e-05f, -3.680364617e-05f, -3.669294391e-05f, -3.658218808e-05f,
+-3.647137887e-05f, -3.636051648e-05f, -3.624960111e-05f, -3.613863295e-05f, -3.602761220e-05f, -3.591653905e-05f, -3.580541370e-05f, -3.569423636e-05f, -3.558300721e-05f, -3.547172645e-05f,
+-3.536039429e-05f, -3.524901091e-05f, -3.513757652e-05f, -3.502609131e-05f, -3.491455548e-05f, -3.480296923e-05f, -3.469133275e-05f, -3.457964625e-05f, -3.446790991e-05f, -3.435612395e-05f,
+-3.424428855e-05f, -3.413240391e-05f, -3.402047024e-05f, -3.390848773e-05f, -3.379645657e-05f, -3.368437697e-05f, -3.357224913e-05f, -3.346007323e-05f, -3.334784949e-05f, -3.323557810e-05f,
+-3.312325926e-05f, -3.301089316e-05f, -3.289848001e-05f, -3.278602001e-05f, -3.267351334e-05f, -3.256096022e-05f, -3.244836084e-05f, -3.233571540e-05f, -3.222302410e-05f, -3.211028713e-05f,
+-3.199750470e-05f, -3.188467701e-05f, -3.177180425e-05f, -3.165888663e-05f, -3.154592434e-05f, -3.143291759e-05f, -3.131986657e-05f, -3.120677148e-05f, -3.109363252e-05f, -3.098044989e-05f,
+-3.086722380e-05f, -3.075395444e-05f, -3.064064201e-05f, -3.052728671e-05f, -3.041388874e-05f, -3.030044830e-05f, -3.018696559e-05f, -3.007344082e-05f, -2.995987418e-05f, -2.984626586e-05f,
+-2.973261608e-05f, -2.961892504e-05f, -2.950519292e-05f, -2.939141994e-05f, -2.927760629e-05f, -2.916375218e-05f, -2.904985780e-05f, -2.893592336e-05f, -2.882194905e-05f, -2.870793508e-05f,
+-2.859388165e-05f, -2.847978896e-05f, -2.836565720e-05f, -2.825148659e-05f, -2.813727732e-05f, -2.802302959e-05f, -2.790874361e-05f, -2.779441957e-05f, -2.768005768e-05f, -2.756565813e-05f,
+-2.745122113e-05f, -2.733674689e-05f, -2.722223559e-05f, -2.710768745e-05f, -2.699310266e-05f, -2.687848143e-05f, -2.676382396e-05f, -2.664913044e-05f, -2.653440109e-05f, -2.641963610e-05f,
+-2.630483567e-05f, -2.619000001e-05f, -2.607512932e-05f, -2.596022379e-05f, -2.584528364e-05f, -2.573030907e-05f, -2.561530026e-05f, -2.550025744e-05f, -2.538518080e-05f, -2.527007053e-05f,
+-2.515492686e-05f, -2.503974997e-05f, -2.492454006e-05f, -2.480929735e-05f, -2.469402203e-05f, -2.457871431e-05f, -2.446337439e-05f, -2.434800247e-05f, -2.423259874e-05f, -2.411716343e-05f,
+-2.400169672e-05f, -2.388619883e-05f, -2.377066994e-05f, -2.365511028e-05f, -2.353952003e-05f, -2.342389940e-05f, -2.330824860e-05f, -2.319256783e-05f, -2.307685728e-05f, -2.296111717e-05f,
+-2.284534769e-05f, -2.272954905e-05f, -2.261372146e-05f, -2.249786510e-05f, -2.238198020e-05f, -2.226606695e-05f, -2.215012554e-05f, -2.203415620e-05f, -2.191815912e-05f, -2.180213450e-05f,
+-2.168608254e-05f, -2.157000346e-05f, -2.145389745e-05f, -2.133776471e-05f, -2.122160546e-05f, -2.110541988e-05f, -2.098920820e-05f, -2.087297060e-05f, -2.075670730e-05f, -2.064041849e-05f,
+-2.052410438e-05f, -2.040776518e-05f, -2.029140108e-05f, -2.017501230e-05f, -2.005859903e-05f, -1.994216147e-05f, -1.982569984e-05f, -1.970921434e-05f, -1.959270516e-05f, -1.947617251e-05f,
+-1.935961660e-05f, -1.924303764e-05f, -1.912643581e-05f, -1.900981133e-05f, -1.889316441e-05f, -1.877649524e-05f, -1.865980403e-05f, -1.854309098e-05f, -1.842635630e-05f, -1.830960019e-05f,
+-1.819282285e-05f, -1.807602449e-05f, -1.795920532e-05f, -1.784236553e-05f, -1.772550533e-05f, -1.760862493e-05f, -1.749172453e-05f, -1.737480433e-05f, -1.725786453e-05f, -1.714090535e-05f,
+-1.702392698e-05f, -1.690692964e-05f, -1.678991351e-05f, -1.667287881e-05f, -1.655582575e-05f, -1.643875452e-05f, -1.632166533e-05f, -1.620455838e-05f, -1.608743388e-05f, -1.597029204e-05f,
+-1.585313305e-05f, -1.573595712e-05f, -1.561876446e-05f, -1.550155527e-05f, -1.538432975e-05f, -1.526708811e-05f, -1.514983055e-05f, -1.503255728e-05f, -1.491526850e-05f, -1.479796442e-05f,
+-1.468064523e-05f, -1.456331115e-05f, -1.444596238e-05f, -1.432859912e-05f, -1.421122158e-05f, -1.409382996e-05f, -1.397642447e-05f, -1.385900531e-05f, -1.374157268e-05f, -1.362412679e-05f,
+-1.350666784e-05f, -1.338919604e-05f, -1.327171160e-05f, -1.315421471e-05f, -1.303670558e-05f, -1.291918442e-05f, -1.280165142e-05f, -1.268410681e-05f, -1.256655077e-05f, -1.244898351e-05f,
+-1.233140524e-05f, -1.221381617e-05f, -1.209621649e-05f, -1.197860641e-05f, -1.186098614e-05f, -1.174335587e-05f, -1.162571582e-05f, -1.150806619e-05f, -1.139040718e-05f, -1.127273900e-05f,
+-1.115506186e-05f, -1.103737594e-05f, -1.091968147e-05f, -1.080197865e-05f, -1.068426767e-05f, -1.056654875e-05f, -1.044882208e-05f, -1.033108788e-05f, -1.021334635e-05f, -1.009559768e-05f,
+-9.977842098e-06f, -9.860079791e-06f, -9.742310969e-06f, -9.624535836e-06f, -9.506754596e-06f, -9.388967453e-06f, -9.271174613e-06f, -9.153376279e-06f, -9.035572655e-06f, -8.917763947e-06f,
+-8.799950357e-06f, -8.682132091e-06f, -8.564309353e-06f, -8.446482347e-06f, -8.328651277e-06f, -8.210816347e-06f, -8.092977762e-06f, -7.975135727e-06f, -7.857290444e-06f, -7.739442119e-06f,
+-7.621590955e-06f, -7.503737157e-06f, -7.385880929e-06f, -7.268022474e-06f, -7.150161998e-06f, -7.032299704e-06f, -6.914435797e-06f, -6.796570479e-06f, -6.678703957e-06f, -6.560836432e-06f,
+-6.442968111e-06f, -6.325099196e-06f, -6.207229891e-06f, -6.089360401e-06f, -5.971490929e-06f, -5.853621680e-06f, -5.735752857e-06f, -5.617884665e-06f, -5.500017306e-06f, -5.382150986e-06f,
+-5.264285907e-06f, -5.146422274e-06f, -5.028560291e-06f, -4.910700160e-06f, -4.792842087e-06f, -4.674986275e-06f, -4.557132927e-06f, -4.439282247e-06f, -4.321434439e-06f, -4.203589707e-06f,
+-4.085748254e-06f, -3.967910283e-06f, -3.850075999e-06f, -3.732245605e-06f, -3.614419304e-06f, -3.496597300e-06f, -3.378779796e-06f, -3.260966997e-06f, -3.143159104e-06f, -3.025356322e-06f,
+-2.907558854e-06f, -2.789766904e-06f, -2.671980674e-06f, -2.554200368e-06f, -2.436426189e-06f, -2.318658341e-06f, -2.200897027e-06f, -2.083142449e-06f, -1.965394811e-06f, -1.847654317e-06f,
+-1.729921168e-06f, -1.612195569e-06f, -1.494477722e-06f, -1.376767831e-06f, -1.259066097e-06f, -1.141372725e-06f, -1.023687916e-06f, -9.060118746e-07f, -7.883448027e-07f, -6.706869033e-07f,
+-5.530383792e-07f, -4.353994329e-07f, -3.177702674e-07f, -2.001510851e-07f, -8.254208878e-08f, 3.505651907e-08f, 1.526445359e-07f, 2.702217591e-07f, 3.877879863e-07f, 5.053430151e-07f,
+6.228866430e-07f, 7.404186677e-07f, 8.579388868e-07f, 9.754470982e-07f, 1.092943099e-06f, 1.210426688e-06f, 1.327897663e-06f, 1.445355821e-06f, 1.562800960e-06f, 1.680232879e-06f,
+1.797651375e-06f, 1.915056246e-06f, 2.032447291e-06f, 2.149824307e-06f, 2.267187093e-06f, 2.384535447e-06f, 2.501869167e-06f, 2.619188051e-06f, 2.736491898e-06f, 2.853780507e-06f,
+2.971053675e-06f, 3.088311201e-06f, 3.205552884e-06f, 3.322778521e-06f, 3.439987913e-06f, 3.557180857e-06f, 3.674357152e-06f, 3.791516597e-06f, 3.908658990e-06f, 4.025784131e-06f,
+4.142891819e-06f, 4.259981851e-06f, 4.377054028e-06f, 4.494108148e-06f, 4.611144011e-06f, 4.728161415e-06f, 4.845160160e-06f, 4.962140045e-06f, 5.079100869e-06f, 5.196042432e-06f,
+5.312964532e-06f, 5.429866970e-06f, 5.546749545e-06f, 5.663612056e-06f, 5.780454304e-06f, 5.897276087e-06f, 6.014077205e-06f, 6.130857458e-06f, 6.247616647e-06f, 6.364354570e-06f,
+6.481071028e-06f, 6.597765820e-06f, 6.714438748e-06f, 6.831089610e-06f, 6.947718207e-06f, 7.064324339e-06f, 7.180907806e-06f, 7.297468409e-06f, 7.414005949e-06f, 7.530520224e-06f,
+7.647011037e-06f, 7.763478187e-06f, 7.879921476e-06f, 7.996340703e-06f, 8.112735669e-06f, 8.229106176e-06f, 8.345452024e-06f, 8.461773014e-06f, 8.578068947e-06f, 8.694339624e-06f,
+8.810584846e-06f, 8.926804414e-06f, 9.042998130e-06f, 9.159165795e-06f, 9.275307209e-06f, 9.391422175e-06f, 9.507510494e-06f, 9.623571967e-06f, 9.739606396e-06f, 9.855613583e-06f,
+9.971593329e-06f, 1.008754544e-05f, 1.020346971e-05f, 1.031936594e-05f, 1.043523394e-05f, 1.055107352e-05f, 1.066688446e-05f, 1.078266657e-05f, 1.089841966e-05f, 1.101414353e-05f,
+1.112983798e-05f, 1.124550281e-05f, 1.136113783e-05f, 1.147674283e-05f, 1.159231763e-05f, 1.170786202e-05f, 1.182337580e-05f, 1.193885879e-05f, 1.205431077e-05f, 1.216973156e-05f,
+1.228512096e-05f, 1.240047877e-05f, 1.251580479e-05f, 1.263109883e-05f, 1.274636069e-05f, 1.286159017e-05f, 1.297678709e-05f, 1.309195123e-05f, 1.320708241e-05f, 1.332218043e-05f,
+1.343724510e-05f, 1.355227620e-05f, 1.366727356e-05f, 1.378223698e-05f, 1.389716625e-05f, 1.401206119e-05f, 1.412692159e-05f, 1.424174726e-05f, 1.435653801e-05f, 1.447129365e-05f,
+1.458601396e-05f, 1.470069877e-05f, 1.481534787e-05f, 1.492996107e-05f, 1.504453817e-05f, 1.515907899e-05f, 1.527358332e-05f, 1.538805096e-05f, 1.550248174e-05f, 1.561687544e-05f,
+1.573123188e-05f, 1.584555086e-05f, 1.595983218e-05f, 1.607407566e-05f, 1.618828110e-05f, 1.630244829e-05f, 1.641657706e-05f, 1.653066721e-05f, 1.664471853e-05f, 1.675873085e-05f,
+1.687270395e-05f, 1.698663766e-05f, 1.710053177e-05f, 1.721438610e-05f, 1.732820045e-05f, 1.744197462e-05f, 1.755570843e-05f, 1.766940167e-05f, 1.778305417e-05f, 1.789666571e-05f,
+1.801023612e-05f, 1.812376520e-05f, 1.823725275e-05f, 1.835069858e-05f, 1.846410251e-05f, 1.857746433e-05f, 1.869078385e-05f, 1.880406090e-05f, 1.891729526e-05f, 1.903048675e-05f,
+1.914363517e-05f, 1.925674034e-05f, 1.936980207e-05f, 1.948282015e-05f, 1.959579441e-05f, 1.970872464e-05f, 1.982161066e-05f, 1.993445228e-05f, 2.004724930e-05f, 2.016000153e-05f,
+2.027270878e-05f, 2.038537087e-05f, 2.049798759e-05f, 2.061055876e-05f, 2.072308419e-05f, 2.083556369e-05f, 2.094799707e-05f, 2.106038414e-05f, 2.117272470e-05f, 2.128501856e-05f,
+2.139726555e-05f, 2.150946545e-05f, 2.162161810e-05f, 2.173372329e-05f, 2.184578084e-05f, 2.195779056e-05f, 2.206975225e-05f, 2.218166573e-05f, 2.229353081e-05f, 2.240534731e-05f,
+2.251711502e-05f, 2.262883376e-05f, 2.274050334e-05f, 2.285212358e-05f, 2.296369429e-05f, 2.307521527e-05f, 2.318668634e-05f, 2.329810731e-05f, 2.340947799e-05f, 2.352079819e-05f,
+2.363206773e-05f, 2.374328641e-05f, 2.385445406e-05f, 2.396557047e-05f, 2.407663547e-05f, 2.418764887e-05f, 2.429861047e-05f, 2.440952010e-05f, 2.452037756e-05f, 2.463118267e-05f,
+2.474193524e-05f, 2.485263508e-05f, 2.496328200e-05f, 2.507387583e-05f, 2.518441637e-05f, 2.529490343e-05f, 2.540533684e-05f, 2.551571640e-05f, 2.562604192e-05f, 2.573631323e-05f,
+2.584653014e-05f, 2.595669245e-05f, 2.606679999e-05f, 2.617685257e-05f, 2.628685000e-05f, 2.639679209e-05f, 2.650667867e-05f, 2.661650955e-05f, 2.672628454e-05f, 2.683600346e-05f,
+2.694566611e-05f, 2.705527233e-05f, 2.716482192e-05f, 2.727431470e-05f, 2.738375048e-05f, 2.749312908e-05f, 2.760245032e-05f, 2.771171401e-05f, 2.782091997e-05f, 2.793006802e-05f,
+2.803915796e-05f, 2.814818962e-05f, 2.825716282e-05f, 2.836607736e-05f, 2.847493307e-05f, 2.858372977e-05f, 2.869246726e-05f, 2.880114538e-05f, 2.890976393e-05f, 2.901832273e-05f,
+2.912682161e-05f, 2.923526037e-05f, 2.934363884e-05f, 2.945195683e-05f, 2.956021417e-05f, 2.966841066e-05f, 2.977654613e-05f, 2.988462040e-05f, 2.999263328e-05f, 3.010058460e-05f,
+3.020847417e-05f, 3.031630181e-05f, 3.042406734e-05f, 3.053177058e-05f, 3.063941135e-05f, 3.074698947e-05f, 3.085450475e-05f, 3.096195702e-05f, 3.106934610e-05f, 3.117667180e-05f,
+3.128393396e-05f, 3.139113237e-05f, 3.149826688e-05f, 3.160533729e-05f, 3.171234343e-05f, 3.181928512e-05f, 3.192616217e-05f, 3.203297442e-05f, 3.213972168e-05f, 3.224640377e-05f,
+3.235302051e-05f, 3.245957173e-05f, 3.256605724e-05f, 3.267247688e-05f, 3.277883045e-05f, 3.288511778e-05f, 3.299133870e-05f, 3.309749302e-05f, 3.320358057e-05f, 3.330960117e-05f,
+3.341555465e-05f, 3.352144082e-05f, 3.362725951e-05f, 3.373301054e-05f, 3.383869373e-05f, 3.394430892e-05f, 3.404985591e-05f, 3.415533454e-05f, 3.426074463e-05f, 3.436608600e-05f,
+3.447135847e-05f, 3.457656188e-05f, 3.468169604e-05f, 3.478676078e-05f, 3.489175592e-05f, 3.499668129e-05f, 3.510153671e-05f, 3.520632201e-05f, 3.531103701e-05f, 3.541568153e-05f,
+3.552025541e-05f, 3.562475847e-05f, 3.572919053e-05f, 3.583355142e-05f, 3.593784097e-05f, 3.604205899e-05f, 3.614620533e-05f, 3.625027979e-05f, 3.635428222e-05f, 3.645821243e-05f,
+3.656207025e-05f, 3.666585552e-05f, 3.676956805e-05f, 3.687320767e-05f, 3.697677421e-05f, 3.708026750e-05f, 3.718368737e-05f, 3.728703364e-05f, 3.739030614e-05f, 3.749350471e-05f,
+3.759662915e-05f, 3.769967932e-05f, 3.780265502e-05f, 3.790555610e-05f, 3.800838238e-05f, 3.811113369e-05f, 3.821380986e-05f, 3.831641071e-05f, 3.841893608e-05f, 3.852138580e-05f,
+3.862375969e-05f, 3.872605759e-05f, 3.882827933e-05f, 3.893042473e-05f, 3.903249362e-05f, 3.913448584e-05f, 3.923640121e-05f, 3.933823958e-05f, 3.944000076e-05f, 3.954168458e-05f,
+3.964329089e-05f, 3.974481951e-05f, 3.984627026e-05f, 3.994764299e-05f, 4.004893753e-05f, 4.015015370e-05f, 4.025129134e-05f, 4.035235028e-05f, 4.045333035e-05f, 4.055423139e-05f,
+4.065505322e-05f, 4.075579569e-05f, 4.085645862e-05f, 4.095704184e-05f, 4.105754519e-05f, 4.115796850e-05f, 4.125831161e-05f, 4.135857435e-05f, 4.145875655e-05f, 4.155885805e-05f,
+4.165887868e-05f, 4.175881827e-05f, 4.185867666e-05f, 4.195845369e-05f, 4.205814919e-05f, 4.215776298e-05f, 4.225729492e-05f, 4.235674483e-05f, 4.245611255e-05f, 4.255539791e-05f,
+4.265460076e-05f, 4.275372091e-05f, 4.285275822e-05f, 4.295171252e-05f, 4.305058364e-05f, 4.314937142e-05f, 4.324807570e-05f, 4.334669631e-05f, 4.344523309e-05f, 4.354368588e-05f,
+4.364205451e-05f, 4.374033883e-05f, 4.383853866e-05f, 4.393665385e-05f, 4.403468424e-05f, 4.413262965e-05f, 4.423048994e-05f, 4.432826494e-05f, 4.442595449e-05f, 4.452355842e-05f,
+4.462107658e-05f, 4.471850880e-05f, 4.481585493e-05f, 4.491311480e-05f, 4.501028825e-05f, 4.510737512e-05f, 4.520437525e-05f, 4.530128849e-05f, 4.539811466e-05f, 4.549485362e-05f,
+4.559150520e-05f, 4.568806924e-05f, 4.578454559e-05f, 4.588093408e-05f, 4.597723456e-05f, 4.607344686e-05f, 4.616957084e-05f, 4.626560632e-05f, 4.636155315e-05f, 4.645741118e-05f,
+4.655318024e-05f, 4.664886019e-05f, 4.674445085e-05f, 4.683995207e-05f, 4.693536371e-05f, 4.703068559e-05f, 4.712591756e-05f, 4.722105947e-05f, 4.731611115e-05f, 4.741107246e-05f,
+4.750594324e-05f, 4.760072333e-05f, 4.769541257e-05f, 4.779001080e-05f, 4.788451789e-05f, 4.797893366e-05f, 4.807325796e-05f, 4.816749064e-05f, 4.826163154e-05f, 4.835568052e-05f,
+4.844963740e-05f, 4.854350205e-05f, 4.863727430e-05f, 4.873095400e-05f, 4.882454100e-05f, 4.891803514e-05f, 4.901143627e-05f, 4.910474424e-05f, 4.919795890e-05f, 4.929108009e-05f,
+4.938410765e-05f, 4.947704144e-05f, 4.956988131e-05f, 4.966262709e-05f, 4.975527865e-05f, 4.984783582e-05f, 4.994029846e-05f, 5.003266641e-05f, 5.012493953e-05f, 5.021711766e-05f,
+5.030920065e-05f, 5.040118835e-05f, 5.049308061e-05f, 5.058487728e-05f, 5.067657820e-05f, 5.076818324e-05f, 5.085969223e-05f, 5.095110504e-05f, 5.104242150e-05f, 5.113364148e-05f,
+5.122476481e-05f, 5.131579136e-05f, 5.140672097e-05f, 5.149755350e-05f, 5.158828879e-05f, 5.167892670e-05f, 5.176946708e-05f, 5.185990978e-05f, 5.195025466e-05f, 5.204050156e-05f,
+5.213065034e-05f, 5.222070086e-05f, 5.231065296e-05f, 5.240050650e-05f, 5.249026133e-05f, 5.257991730e-05f, 5.266947428e-05f, 5.275893211e-05f, 5.284829064e-05f, 5.293754974e-05f,
+5.302670925e-05f, 5.311576904e-05f, 5.320472895e-05f, 5.329358884e-05f, 5.338234856e-05f, 5.347100798e-05f, 5.355956695e-05f, 5.364802531e-05f, 5.373638294e-05f, 5.382463968e-05f,
+5.391279539e-05f, 5.400084993e-05f, 5.408880315e-05f, 5.417665492e-05f, 5.426440508e-05f, 5.435205350e-05f, 5.443960003e-05f, 5.452704454e-05f, 5.461438687e-05f, 5.470162689e-05f,
+5.478876445e-05f, 5.487579942e-05f, 5.496273165e-05f, 5.504956100e-05f, 5.513628733e-05f, 5.522291050e-05f, 5.530943037e-05f, 5.539584680e-05f, 5.548215964e-05f, 5.556836876e-05f,
+5.565447402e-05f, 5.574047528e-05f, 5.582637240e-05f, 5.591216524e-05f, 5.599785365e-05f, 5.608343751e-05f, 5.616891667e-05f, 5.625429100e-05f, 5.633956035e-05f, 5.642472459e-05f,
+5.650978358e-05f, 5.659473719e-05f, 5.667958527e-05f, 5.676432768e-05f, 5.684896430e-05f, 5.693349498e-05f, 5.701791958e-05f, 5.710223798e-05f, 5.718645003e-05f, 5.727055560e-05f,
+5.735455455e-05f, 5.743844675e-05f, 5.752223205e-05f, 5.760591033e-05f, 5.768948145e-05f, 5.777294528e-05f, 5.785630168e-05f, 5.793955051e-05f, 5.802269164e-05f, 5.810572494e-05f,
+5.818865027e-05f, 5.827146751e-05f, 5.835417650e-05f, 5.843677713e-05f, 5.851926926e-05f, 5.860165276e-05f, 5.868392749e-05f, 5.876609332e-05f, 5.884815011e-05f, 5.893009775e-05f,
+5.901193608e-05f, 5.909366500e-05f, 5.917528435e-05f, 5.925679401e-05f, 5.933819385e-05f, 5.941948373e-05f, 5.950066353e-05f, 5.958173312e-05f, 5.966269237e-05f, 5.974354114e-05f,
+5.982427930e-05f, 5.990490673e-05f, 5.998542330e-05f, 6.006582887e-05f, 6.014612332e-05f, 6.022630652e-05f, 6.030637834e-05f, 6.038633865e-05f, 6.046618733e-05f, 6.054592424e-05f,
+6.062554925e-05f, 6.070506225e-05f, 6.078446310e-05f, 6.086375167e-05f, 6.094292784e-05f, 6.102199148e-05f, 6.110094246e-05f, 6.117978066e-05f, 6.125850596e-05f, 6.133711821e-05f,
+6.141561731e-05f, 6.149400312e-05f, 6.157227552e-05f, 6.165043438e-05f, 6.172847957e-05f, 6.180641099e-05f, 6.188422848e-05f, 6.196193195e-05f, 6.203952125e-05f, 6.211699627e-05f,
+6.219435688e-05f, 6.227160296e-05f, 6.234873438e-05f, 6.242575103e-05f, 6.250265277e-05f, 6.257943950e-05f, 6.265611107e-05f, 6.273266738e-05f, 6.280910829e-05f, 6.288543369e-05f,
+6.296164346e-05f, 6.303773748e-05f, 6.311371561e-05f, 6.318957775e-05f, 6.326532377e-05f, 6.334095355e-05f, 6.341646696e-05f, 6.349186390e-05f, 6.356714424e-05f, 6.364230786e-05f,
+6.371735464e-05f, 6.379228446e-05f, 6.386709720e-05f, 6.394179275e-05f, 6.401637098e-05f, 6.409083177e-05f, 6.416517502e-05f, 6.423940059e-05f, 6.431350837e-05f, 6.438749825e-05f,
+6.446137011e-05f, 6.453512382e-05f, 6.460875928e-05f, 6.468227636e-05f, 6.475567496e-05f, 6.482895494e-05f, 6.490211620e-05f, 6.497515862e-05f, 6.504808209e-05f, 6.512088649e-05f,
+6.519357170e-05f, 6.526613761e-05f, 6.533858410e-05f, 6.541091107e-05f, 6.548311839e-05f, 6.555520595e-05f, 6.562717364e-05f, 6.569902134e-05f, 6.577074894e-05f, 6.584235633e-05f,
+6.591384339e-05f, 6.598521001e-05f, 6.605645608e-05f, 6.612758149e-05f, 6.619858612e-05f, 6.626946986e-05f, 6.634023260e-05f, 6.641087423e-05f, 6.648139464e-05f, 6.655179371e-05f,
+6.662207133e-05f, 6.669222740e-05f, 6.676226180e-05f, 6.683217443e-05f, 6.690196517e-05f, 6.697163391e-05f, 6.704118055e-05f, 6.711060497e-05f, 6.717990707e-05f, 6.724908673e-05f,
+6.731814385e-05f, 6.738707832e-05f, 6.745589004e-05f, 6.752457888e-05f, 6.759314475e-05f, 6.766158754e-05f, 6.772990714e-05f, 6.779810344e-05f, 6.786617634e-05f, 6.793412573e-05f,
+6.800195150e-05f, 6.806965354e-05f, 6.813723176e-05f, 6.820468605e-05f, 6.827201629e-05f, 6.833922239e-05f, 6.840630423e-05f, 6.847326172e-05f, 6.854009475e-05f, 6.860680322e-05f,
+6.867338701e-05f, 6.873984604e-05f, 6.880618018e-05f, 6.887238935e-05f, 6.893847343e-05f, 6.900443233e-05f, 6.907026593e-05f, 6.913597414e-05f, 6.920155686e-05f, 6.926701398e-05f,
+6.933234541e-05f, 6.939755103e-05f, 6.946263075e-05f, 6.952758446e-05f, 6.959241207e-05f, 6.965711348e-05f, 6.972168858e-05f, 6.978613727e-05f, 6.985045946e-05f, 6.991465504e-05f,
+6.997872391e-05f, 7.004266598e-05f, 7.010648115e-05f, 7.017016931e-05f, 7.023373037e-05f, 7.029716422e-05f, 7.036047078e-05f, 7.042364994e-05f, 7.048670161e-05f, 7.054962568e-05f,
+7.061242206e-05f, 7.067509065e-05f, 7.073763136e-05f, 7.080004409e-05f, 7.086232874e-05f, 7.092448522e-05f, 7.098651343e-05f, 7.104841327e-05f, 7.111018465e-05f, 7.117182747e-05f,
+7.123334164e-05f, 7.129472707e-05f, 7.135598365e-05f, 7.141711130e-05f, 7.147810992e-05f, 7.153897941e-05f, 7.159971969e-05f, 7.166033066e-05f, 7.172081222e-05f, 7.178116428e-05f,
+7.184138676e-05f, 7.190147955e-05f, 7.196144257e-05f, 7.202127572e-05f, 7.208097892e-05f, 7.214055206e-05f, 7.219999506e-05f, 7.225930783e-05f, 7.231849027e-05f, 7.237754230e-05f,
+7.243646383e-05f, 7.249525476e-05f, 7.255391500e-05f, 7.261244447e-05f, 7.267084308e-05f, 7.272911073e-05f, 7.278724734e-05f, 7.284525282e-05f, 7.290312708e-05f, 7.296087003e-05f,
+7.301848159e-05f, 7.307596166e-05f, 7.313331016e-05f, 7.319052700e-05f, 7.324761209e-05f, 7.330456535e-05f, 7.336138669e-05f, 7.341807602e-05f, 7.347463326e-05f, 7.353105832e-05f,
+7.358735112e-05f, 7.364351157e-05f, 7.369953958e-05f, 7.375543507e-05f, 7.381119796e-05f, 7.386682816e-05f, 7.392232559e-05f, 7.397769015e-05f, 7.403292178e-05f, 7.408802038e-05f,
+7.414298587e-05f, 7.419781817e-05f, 7.425251719e-05f, 7.430708286e-05f, 7.436151509e-05f, 7.441581379e-05f, 7.446997889e-05f, 7.452401031e-05f, 7.457790796e-05f, 7.463167176e-05f,
+7.468530163e-05f, 7.473879749e-05f, 7.479215927e-05f, 7.484538687e-05f, 7.489848022e-05f, 7.495143924e-05f, 7.500426384e-05f, 7.505695397e-05f, 7.510950952e-05f, 7.516193042e-05f,
+7.521421660e-05f, 7.526636797e-05f, 7.531838447e-05f, 7.537026600e-05f, 7.542201249e-05f, 7.547362387e-05f, 7.552510006e-05f, 7.557644098e-05f, 7.562764655e-05f, 7.567871670e-05f,
+7.572965135e-05f, 7.578045043e-05f, 7.583111385e-05f, 7.588164155e-05f, 7.593203345e-05f, 7.598228948e-05f, 7.603240955e-05f, 7.608239360e-05f, 7.613224155e-05f, 7.618195333e-05f,
+7.623152886e-05f, 7.628096807e-05f, 7.633027089e-05f, 7.637943724e-05f, 7.642846705e-05f, 7.647736024e-05f, 7.652611676e-05f, 7.657473652e-05f, 7.662321944e-05f, 7.667156547e-05f,
+7.671977453e-05f, 7.676784655e-05f, 7.681578145e-05f, 7.686357917e-05f, 7.691123964e-05f, 7.695876278e-05f, 7.700614852e-05f, 7.705339681e-05f, 7.710050756e-05f, 7.714748071e-05f,
+7.719431618e-05f, 7.724101392e-05f, 7.728757385e-05f, 7.733399591e-05f, 7.738028002e-05f, 7.742642611e-05f, 7.747243413e-05f, 7.751830400e-05f, 7.756403566e-05f, 7.760962904e-05f,
+7.765508408e-05f, 7.770040070e-05f, 7.774557884e-05f, 7.779061843e-05f, 7.783551942e-05f, 7.788028174e-05f, 7.792490531e-05f, 7.796939008e-05f, 7.801373598e-05f, 7.805794294e-05f,
+7.810201091e-05f, 7.814593982e-05f, 7.818972960e-05f, 7.823338020e-05f, 7.827689154e-05f, 7.832026357e-05f, 7.836349623e-05f, 7.840658944e-05f, 7.844954316e-05f, 7.849235732e-05f,
+7.853503185e-05f, 7.857756669e-05f, 7.861996179e-05f, 7.866221709e-05f, 7.870433252e-05f, 7.874630801e-05f, 7.878814353e-05f, 7.882983899e-05f, 7.887139435e-05f, 7.891280954e-05f,
+7.895408451e-05f, 7.899521919e-05f, 7.903621353e-05f, 7.907706747e-05f, 7.911778096e-05f, 7.915835392e-05f, 7.919878631e-05f, 7.923907807e-05f, 7.927922914e-05f, 7.931923947e-05f,
+7.935910899e-05f, 7.939883766e-05f, 7.943842541e-05f, 7.947787220e-05f, 7.951717795e-05f, 7.955634263e-05f, 7.959536617e-05f, 7.963424852e-05f, 7.967298962e-05f, 7.971158943e-05f,
+7.975004788e-05f, 7.978836492e-05f, 7.982654050e-05f, 7.986457457e-05f, 7.990246707e-05f, 7.994021796e-05f, 7.997782716e-05f, 8.001529465e-05f, 8.005262035e-05f, 8.008980423e-05f,
+8.012684623e-05f, 8.016374629e-05f, 8.020050437e-05f, 8.023712042e-05f, 8.027359439e-05f, 8.030992622e-05f, 8.034611586e-05f, 8.038216327e-05f, 8.041806840e-05f, 8.045383119e-05f,
+8.048945160e-05f, 8.052492958e-05f, 8.056026508e-05f, 8.059545806e-05f, 8.063050845e-05f, 8.066541623e-05f, 8.070018133e-05f, 8.073480371e-05f, 8.076928332e-05f, 8.080362013e-05f,
+8.083781407e-05f, 8.087186511e-05f, 8.090577320e-05f, 8.093953829e-05f, 8.097316034e-05f, 8.100663930e-05f, 8.103997513e-05f, 8.107316777e-05f, 8.110621720e-05f, 8.113912336e-05f,
+8.117188621e-05f, 8.120450570e-05f, 8.123698180e-05f, 8.126931445e-05f, 8.130150362e-05f, 8.133354927e-05f, 8.136545134e-05f, 8.139720980e-05f, 8.142882461e-05f, 8.146029572e-05f,
+8.149162310e-05f, 8.152280670e-05f, 8.155384647e-05f, 8.158474239e-05f, 8.161549441e-05f, 8.164610248e-05f, 8.167656658e-05f, 8.170688665e-05f, 8.173706267e-05f, 8.176709458e-05f,
+8.179698236e-05f, 8.182672596e-05f, 8.185632534e-05f, 8.188578047e-05f, 8.191509131e-05f, 8.194425782e-05f, 8.197327996e-05f, 8.200215769e-05f, 8.203089099e-05f, 8.205947981e-05f,
+8.208792411e-05f, 8.211622387e-05f, 8.214437904e-05f, 8.217238958e-05f, 8.220025547e-05f, 8.222797666e-05f, 8.225555313e-05f, 8.228298484e-05f, 8.231027175e-05f, 8.233741383e-05f,
+8.236441104e-05f, 8.239126335e-05f, 8.241797074e-05f, 8.244453316e-05f, 8.247095058e-05f, 8.249722297e-05f, 8.252335029e-05f, 8.254933252e-05f, 8.257516963e-05f, 8.260086158e-05f,
+8.262640833e-05f, 8.265180987e-05f, 8.267706615e-05f, 8.270217715e-05f, 8.272714284e-05f, 8.275196319e-05f, 8.277663816e-05f, 8.280116773e-05f, 8.282555187e-05f, 8.284979054e-05f,
+8.287388373e-05f, 8.289783140e-05f, 8.292163352e-05f, 8.294529007e-05f, 8.296880102e-05f, 8.299216633e-05f, 8.301538599e-05f, 8.303845997e-05f, 8.306138823e-05f, 8.308417076e-05f,
+8.310680752e-05f, 8.312929849e-05f, 8.315164365e-05f, 8.317384296e-05f, 8.319589641e-05f, 8.321780397e-05f, 8.323956561e-05f, 8.326118130e-05f, 8.328265104e-05f, 8.330397478e-05f,
+8.332515252e-05f, 8.334618421e-05f, 8.336706985e-05f, 8.338780940e-05f, 8.340840285e-05f, 8.342885017e-05f, 8.344915135e-05f, 8.346930635e-05f, 8.348931515e-05f, 8.350917774e-05f,
+8.352889410e-05f, 8.354846420e-05f, 8.356788802e-05f, 8.358716554e-05f, 8.360629674e-05f, 8.362528161e-05f, 8.364412012e-05f, 8.366281225e-05f, 8.368135798e-05f, 8.369975730e-05f,
+8.371801019e-05f, 8.373611662e-05f, 8.375407658e-05f, 8.377189005e-05f, 8.378955702e-05f, 8.380707747e-05f, 8.382445137e-05f, 8.384167872e-05f, 8.385875949e-05f, 8.387569367e-05f,
+8.389248125e-05f, 8.390912220e-05f, 8.392561652e-05f, 8.394196418e-05f, 8.395816518e-05f, 8.397421949e-05f, 8.399012711e-05f, 8.400588801e-05f, 8.402150219e-05f, 8.403696962e-05f,
+8.405229031e-05f, 8.406746423e-05f, 8.408249137e-05f, 8.409737171e-05f, 8.411210526e-05f, 8.412669198e-05f, 8.414113188e-05f, 8.415542493e-05f, 8.416957114e-05f, 8.418357048e-05f,
+8.419742294e-05f, 8.421112852e-05f, 8.422468721e-05f, 8.423809899e-05f, 8.425136385e-05f, 8.426448179e-05f, 8.427745279e-05f, 8.429027685e-05f, 8.430295395e-05f, 8.431548410e-05f,
+8.432786727e-05f, 8.434010347e-05f, 8.435219268e-05f, 8.436413489e-05f, 8.437593011e-05f, 8.438757831e-05f, 8.439907950e-05f, 8.441043367e-05f, 8.442164081e-05f, 8.443270092e-05f,
+8.444361398e-05f, 8.445438000e-05f, 8.446499897e-05f, 8.447547088e-05f, 8.448579573e-05f, 8.449597351e-05f, 8.450600423e-05f, 8.451588786e-05f, 8.452562442e-05f, 8.453521390e-05f,
+8.454465630e-05f, 8.455395160e-05f, 8.456309982e-05f, 8.457210094e-05f, 8.458095496e-05f, 8.458966189e-05f, 8.459822172e-05f, 8.460663444e-05f, 8.461490007e-05f, 8.462301859e-05f,
+8.463099000e-05f, 8.463881431e-05f, 8.464649152e-05f, 8.465402162e-05f, 8.466140461e-05f, 8.466864050e-05f, 8.467572929e-05f, 8.468267097e-05f, 8.468946556e-05f, 8.469611304e-05f,
+8.470261342e-05f, 8.470896671e-05f, 8.471517291e-05f, 8.472123201e-05f, 8.472714402e-05f, 8.473290895e-05f, 8.473852680e-05f, 8.474399757e-05f, 8.474932126e-05f, 8.475449788e-05f,
+8.475952744e-05f, 8.476440993e-05f, 8.476914537e-05f, 8.477373375e-05f, 8.477817509e-05f, 8.478246939e-05f, 8.478661665e-05f, 8.479061688e-05f, 8.479447009e-05f, 8.479817628e-05f,
+8.480173546e-05f, 8.480514764e-05f, 8.480841283e-05f, 8.481153103e-05f, 8.481450225e-05f, 8.481732649e-05f, 8.482000378e-05f, 8.482253411e-05f, 8.482491749e-05f, 8.482715394e-05f,
+8.482924346e-05f, 8.483118607e-05f, 8.483298176e-05f, 8.483463056e-05f, 8.483613247e-05f, 8.483748751e-05f, 8.483869568e-05f, 8.483975700e-05f, 8.484067147e-05f, 8.484143911e-05f,
+8.484205994e-05f, 8.484253395e-05f, 8.484286117e-05f, 8.484304161e-05f, 8.484307528e-05f, 8.484296220e-05f, 8.484270237e-05f, 8.484229581e-05f, 8.484174254e-05f, 8.484104257e-05f,
+8.484019591e-05f, 8.483920258e-05f, 8.483806260e-05f, 8.483677597e-05f, 8.483534272e-05f, 8.483376286e-05f, 8.483203640e-05f, 8.483016337e-05f, 8.482814377e-05f, 8.482597763e-05f,
+8.482366496e-05f, 8.482120578e-05f, 8.481860011e-05f, 8.481584796e-05f, 8.481294936e-05f, 8.480990431e-05f, 8.480671285e-05f, 8.480337498e-05f, 8.479989074e-05f, 8.479626012e-05f,
+8.479248317e-05f, 8.478855988e-05f, 8.478449030e-05f, 8.478027443e-05f, 8.477591230e-05f, 8.477140392e-05f, 8.476674932e-05f, 8.476194852e-05f, 8.475700154e-05f, 8.475190841e-05f,
+8.474666914e-05f, 8.474128375e-05f, 8.473575228e-05f, 8.473007474e-05f, 8.472425115e-05f, 8.471828154e-05f, 8.471216593e-05f, 8.470590435e-05f, 8.469949682e-05f, 8.469294336e-05f,
+8.468624400e-05f, 8.467939876e-05f, 8.467240768e-05f, 8.466527076e-05f, 8.465798805e-05f, 8.465055955e-05f, 8.464298531e-05f, 8.463526535e-05f, 8.462739969e-05f, 8.461938836e-05f,
+8.461123139e-05f, 8.460292880e-05f, 8.459448062e-05f, 8.458588689e-05f, 8.457714762e-05f, 8.456826285e-05f, 8.455923260e-05f, 8.455005691e-05f, 8.454073579e-05f, 8.453126929e-05f,
+8.452165743e-05f, 8.451190025e-05f, 8.450199776e-05f, 8.449195000e-05f, 8.448175701e-05f, 8.447141880e-05f, 8.446093543e-05f, 8.445030690e-05f, 8.443953326e-05f, 8.442861454e-05f,
+8.441755077e-05f, 8.440634198e-05f, 8.439498821e-05f, 8.438348948e-05f, 8.437184583e-05f, 8.436005730e-05f, 8.434812392e-05f, 8.433604571e-05f, 8.432382272e-05f, 8.431145498e-05f,
+8.429894252e-05f, 8.428628538e-05f, 8.427348359e-05f, 8.426053719e-05f, 8.424744622e-05f, 8.423421070e-05f, 8.422083068e-05f, 8.420730619e-05f, 8.419363727e-05f, 8.417982395e-05f,
+8.416586628e-05f, 8.415176428e-05f, 8.413751800e-05f, 8.412312748e-05f, 8.410859274e-05f, 8.409391384e-05f, 8.407909080e-05f, 8.406412367e-05f, 8.404901249e-05f, 8.403375729e-05f,
+8.401835812e-05f, 8.400281501e-05f, 8.398712801e-05f, 8.397129715e-05f, 8.395532247e-05f, 8.393920402e-05f, 8.392294184e-05f, 8.390653596e-05f, 8.388998643e-05f, 8.387329329e-05f,
+8.385645659e-05f, 8.383947635e-05f, 8.382235264e-05f, 8.380508548e-05f, 8.378767493e-05f, 8.377012102e-05f, 8.375242380e-05f, 8.373458331e-05f, 8.371659959e-05f, 8.369847270e-05f,
+8.368020267e-05f, 8.366178955e-05f, 8.364323338e-05f, 8.362453421e-05f, 8.360569208e-05f, 8.358670705e-05f, 8.356757914e-05f, 8.354830842e-05f, 8.352889493e-05f, 8.350933871e-05f,
+8.348963981e-05f, 8.346979828e-05f, 8.344981416e-05f, 8.342968750e-05f, 8.340941835e-05f, 8.338900677e-05f, 8.336845278e-05f, 8.334775645e-05f, 8.332691783e-05f, 8.330593695e-05f,
+8.328481388e-05f, 8.326354866e-05f, 8.324214134e-05f, 8.322059196e-05f, 8.319890059e-05f, 8.317706727e-05f, 8.315509205e-05f, 8.313297498e-05f, 8.311071611e-05f, 8.308831550e-05f,
+8.306577319e-05f, 8.304308924e-05f, 8.302026370e-05f, 8.299729662e-05f, 8.297418806e-05f, 8.295093806e-05f, 8.292754669e-05f, 8.290401398e-05f, 8.288034001e-05f, 8.285652481e-05f,
+8.283256845e-05f, 8.280847098e-05f, 8.278423245e-05f, 8.275985292e-05f, 8.273533244e-05f, 8.271067107e-05f, 8.268586887e-05f, 8.266092588e-05f, 8.263584217e-05f, 8.261061779e-05f,
+8.258525279e-05f, 8.255974724e-05f, 8.253410119e-05f, 8.250831470e-05f, 8.248238782e-05f, 8.245632062e-05f, 8.243011315e-05f, 8.240376546e-05f, 8.237727763e-05f, 8.235064969e-05f,
+8.232388173e-05f, 8.229697378e-05f, 8.226992592e-05f, 8.224273820e-05f, 8.221541068e-05f, 8.218794342e-05f, 8.216033648e-05f, 8.213258992e-05f, 8.210470381e-05f, 8.207667820e-05f,
+8.204851315e-05f, 8.202020873e-05f, 8.199176500e-05f, 8.196318202e-05f, 8.193445984e-05f, 8.190559854e-05f, 8.187659818e-05f, 8.184745882e-05f, 8.181818051e-05f, 8.178876333e-05f,
+8.175920734e-05f, 8.172951260e-05f, 8.169967918e-05f, 8.166970714e-05f, 8.163959654e-05f, 8.160934745e-05f, 8.157895994e-05f, 8.154843406e-05f, 8.151776989e-05f, 8.148696749e-05f,
+8.145602692e-05f, 8.142494825e-05f, 8.139373156e-05f, 8.136237689e-05f, 8.133088433e-05f, 8.129925394e-05f, 8.126748578e-05f, 8.123557993e-05f, 8.120353644e-05f, 8.117135539e-05f,
+8.113903685e-05f, 8.110658089e-05f, 8.107398756e-05f, 8.104125695e-05f, 8.100838912e-05f, 8.097538414e-05f, 8.094224208e-05f, 8.090896301e-05f, 8.087554700e-05f, 8.084199412e-05f,
+8.080830444e-05f, 8.077447803e-05f, 8.074051496e-05f, 8.070641531e-05f, 8.067217913e-05f, 8.063780652e-05f, 8.060329753e-05f, 8.056865224e-05f, 8.053387073e-05f, 8.049895305e-05f,
+8.046389930e-05f, 8.042870953e-05f, 8.039338383e-05f, 8.035792227e-05f, 8.032232491e-05f, 8.028659184e-05f, 8.025072313e-05f, 8.021471885e-05f, 8.017857908e-05f, 8.014230388e-05f,
+8.010589335e-05f, 8.006934755e-05f, 8.003266655e-05f, 7.999585044e-05f, 7.995889929e-05f, 7.992181317e-05f, 7.988459217e-05f, 7.984723635e-05f, 7.980974580e-05f, 7.977212059e-05f,
+7.973436080e-05f, 7.969646651e-05f, 7.965843779e-05f, 7.962027473e-05f, 7.958197739e-05f, 7.954354587e-05f, 7.950498023e-05f, 7.946628056e-05f, 7.942744693e-05f, 7.938847943e-05f,
+7.934937813e-05f, 7.931014312e-05f, 7.927077448e-05f, 7.923127227e-05f, 7.919163660e-05f, 7.915186752e-05f, 7.911196514e-05f, 7.907192952e-05f, 7.903176075e-05f, 7.899145891e-05f,
+7.895102409e-05f, 7.891045635e-05f, 7.886975580e-05f, 7.882892250e-05f, 7.878795655e-05f, 7.874685801e-05f, 7.870562699e-05f, 7.866426356e-05f, 7.862276780e-05f, 7.858113980e-05f,
+7.853937964e-05f, 7.849748741e-05f, 7.845546319e-05f, 7.841330706e-05f, 7.837101911e-05f, 7.832859943e-05f, 7.828604810e-05f, 7.824336521e-05f, 7.820055084e-05f, 7.815760507e-05f,
+7.811452800e-05f, 7.807131971e-05f, 7.802798029e-05f, 7.798450982e-05f, 7.794090839e-05f, 7.789717609e-05f, 7.785331301e-05f, 7.780931923e-05f, 7.776519484e-05f, 7.772093993e-05f,
+7.767655459e-05f, 7.763203891e-05f, 7.758739297e-05f, 7.754261686e-05f, 7.749771068e-05f, 7.745267451e-05f, 7.740750845e-05f, 7.736221258e-05f, 7.731678699e-05f, 7.727123177e-05f,
+7.722554702e-05f, 7.717973282e-05f, 7.713378927e-05f, 7.708771645e-05f, 7.704151446e-05f, 7.699518340e-05f, 7.694872334e-05f, 7.690213438e-05f, 7.685541663e-05f, 7.680857016e-05f,
+7.676159507e-05f, 7.671449146e-05f, 7.666725941e-05f, 7.661989902e-05f, 7.657241039e-05f, 7.652479360e-05f, 7.647704876e-05f, 7.642917595e-05f, 7.638117528e-05f, 7.633304682e-05f,
+7.628479069e-05f, 7.623640697e-05f, 7.618789577e-05f, 7.613925716e-05f, 7.609049126e-05f, 7.604159816e-05f, 7.599257795e-05f, 7.594343073e-05f, 7.589415659e-05f, 7.584475564e-05f,
+7.579522797e-05f, 7.574557367e-05f, 7.569579285e-05f, 7.564588560e-05f, 7.559585202e-05f, 7.554569221e-05f, 7.549540626e-05f, 7.544499428e-05f, 7.539445636e-05f, 7.534379260e-05f,
+7.529300311e-05f, 7.524208797e-05f, 7.519104729e-05f, 7.513988118e-05f, 7.508858972e-05f, 7.503717302e-05f, 7.498563118e-05f, 7.493396430e-05f, 7.488217248e-05f, 7.483025582e-05f,
+7.477821442e-05f, 7.472604839e-05f, 7.467375783e-05f, 7.462134283e-05f, 7.456880350e-05f, 7.451613994e-05f, 7.446335226e-05f, 7.441044055e-05f, 7.435740492e-05f, 7.430424548e-05f,
+7.425096231e-05f, 7.419755554e-05f, 7.414402526e-05f, 7.409037158e-05f, 7.403659459e-05f, 7.398269441e-05f, 7.392867114e-05f, 7.387452489e-05f, 7.382025575e-05f, 7.376586383e-05f,
+7.371134924e-05f, 7.365671209e-05f, 7.360195247e-05f, 7.354707050e-05f, 7.349206628e-05f, 7.343693992e-05f, 7.338169152e-05f, 7.332632120e-05f, 7.327082905e-05f, 7.321521518e-05f,
+7.315947971e-05f, 7.310362274e-05f, 7.304764437e-05f, 7.299154472e-05f, 7.293532389e-05f, 7.287898199e-05f, 7.282251913e-05f, 7.276593542e-05f, 7.270923096e-05f, 7.265240587e-05f,
+7.259546026e-05f, 7.253839423e-05f, 7.248120790e-05f, 7.242390137e-05f, 7.236647475e-05f, 7.230892816e-05f, 7.225126170e-05f, 7.219347549e-05f, 7.213556963e-05f, 7.207754424e-05f,
+7.201939943e-05f, 7.196113531e-05f, 7.190275199e-05f, 7.184424958e-05f, 7.178562820e-05f, 7.172688796e-05f, 7.166802897e-05f, 7.160905134e-05f, 7.154995518e-05f, 7.149074061e-05f,
+7.143140775e-05f, 7.137195670e-05f, 7.131238757e-05f, 7.125270049e-05f, 7.119289557e-05f, 7.113297291e-05f, 7.107293264e-05f, 7.101277487e-05f, 7.095249971e-05f, 7.089210728e-05f,
+7.083159770e-05f, 7.077097107e-05f, 7.071022752e-05f, 7.064936716e-05f, 7.058839011e-05f, 7.052729648e-05f, 7.046608638e-05f, 7.040475994e-05f, 7.034331727e-05f, 7.028175850e-05f,
+7.022008372e-05f, 7.015829307e-05f, 7.009638666e-05f, 7.003436461e-05f, 6.997222703e-05f, 6.990997405e-05f, 6.984760577e-05f, 6.978512233e-05f, 6.972252384e-05f, 6.965981041e-05f,
+6.959698217e-05f, 6.953403923e-05f, 6.947098172e-05f, 6.940780976e-05f, 6.934452345e-05f, 6.928112293e-05f, 6.921760832e-05f, 6.915397973e-05f, 6.909023728e-05f, 6.902638109e-05f,
+6.896241130e-05f, 6.889832801e-05f, 6.883413134e-05f, 6.876982143e-05f, 6.870539838e-05f, 6.864086233e-05f, 6.857621340e-05f, 6.851145169e-05f, 6.844657735e-05f, 6.838159049e-05f,
+6.831649123e-05f, 6.825127970e-05f, 6.818595602e-05f, 6.812052031e-05f, 6.805497270e-05f, 6.798931331e-05f, 6.792354226e-05f, 6.785765967e-05f, 6.779166568e-05f, 6.772556041e-05f,
+6.765934397e-05f, 6.759301650e-05f, 6.752657812e-05f, 6.746002895e-05f, 6.739336912e-05f, 6.732659876e-05f, 6.725971799e-05f, 6.719272693e-05f, 6.712562572e-05f, 6.705841447e-05f,
+6.699109332e-05f, 6.692366239e-05f, 6.685612181e-05f, 6.678847170e-05f, 6.672071220e-05f, 6.665284342e-05f, 6.658486550e-05f, 6.651677856e-05f, 6.644858273e-05f, 6.638027814e-05f,
+6.631186492e-05f, 6.624334319e-05f, 6.617471309e-05f, 6.610597474e-05f, 6.603712827e-05f, 6.596817381e-05f, 6.589911149e-05f, 6.582994143e-05f, 6.576066378e-05f, 6.569127865e-05f,
+6.562178618e-05f, 6.555218649e-05f, 6.548247972e-05f, 6.541266600e-05f, 6.534274546e-05f, 6.527271823e-05f, 6.520258443e-05f, 6.513234421e-05f, 6.506199769e-05f, 6.499154500e-05f,
+6.492098627e-05f, 6.485032164e-05f, 6.477955124e-05f, 6.470867520e-05f, 6.463769365e-05f, 6.456660672e-05f, 6.449541455e-05f, 6.442411728e-05f, 6.435271502e-05f, 6.428120792e-05f,
+6.420959611e-05f, 6.413787972e-05f, 6.406605889e-05f, 6.399413375e-05f, 6.392210443e-05f, 6.384997107e-05f, 6.377773380e-05f, 6.370539275e-05f, 6.363294807e-05f, 6.356039988e-05f,
+6.348774833e-05f, 6.341499354e-05f, 6.334213565e-05f, 6.326917479e-05f, 6.319611111e-05f, 6.312294474e-05f, 6.304967581e-05f, 6.297630446e-05f, 6.290283082e-05f, 6.282925504e-05f,
+6.275557724e-05f, 6.268179757e-05f, 6.260791616e-05f, 6.253393316e-05f, 6.245984868e-05f, 6.238566289e-05f, 6.231137590e-05f, 6.223698786e-05f, 6.216249891e-05f, 6.208790919e-05f,
+6.201321883e-05f, 6.193842797e-05f, 6.186353675e-05f, 6.178854531e-05f, 6.171345378e-05f, 6.163826232e-05f, 6.156297105e-05f, 6.148758011e-05f, 6.141208965e-05f, 6.133649980e-05f,
+6.126081071e-05f, 6.118502251e-05f, 6.110913535e-05f, 6.103314936e-05f, 6.095706468e-05f, 6.088088146e-05f, 6.080459984e-05f, 6.072821995e-05f, 6.065174195e-05f, 6.057516596e-05f,
+6.049849213e-05f, 6.042172060e-05f, 6.034485152e-05f, 6.026788503e-05f, 6.019082126e-05f, 6.011366036e-05f, 6.003640247e-05f, 5.995904774e-05f, 5.988159631e-05f, 5.980404831e-05f,
+5.972640390e-05f, 5.964866322e-05f, 5.957082640e-05f, 5.949289360e-05f, 5.941486495e-05f, 5.933674061e-05f, 5.925852071e-05f, 5.918020539e-05f, 5.910179481e-05f, 5.902328910e-05f,
+5.894468842e-05f, 5.886599290e-05f, 5.878720269e-05f, 5.870831794e-05f, 5.862933878e-05f, 5.855026537e-05f, 5.847109786e-05f, 5.839183637e-05f, 5.831248107e-05f, 5.823303210e-05f,
+5.815348960e-05f, 5.807385373e-05f, 5.799412461e-05f, 5.791430241e-05f, 5.783438727e-05f, 5.775437934e-05f, 5.767427875e-05f, 5.759408567e-05f, 5.751380023e-05f, 5.743342259e-05f,
+5.735295289e-05f, 5.727239128e-05f, 5.719173790e-05f, 5.711099291e-05f, 5.703015645e-05f, 5.694922868e-05f, 5.686820973e-05f, 5.678709976e-05f, 5.670589891e-05f, 5.662460734e-05f,
+5.654322520e-05f, 5.646175262e-05f, 5.638018977e-05f, 5.629853679e-05f, 5.621679383e-05f, 5.613496104e-05f, 5.605303857e-05f, 5.597102657e-05f, 5.588892519e-05f, 5.580673459e-05f,
+5.572445490e-05f, 5.564208628e-05f, 5.555962888e-05f, 5.547708286e-05f, 5.539444836e-05f, 5.531172553e-05f, 5.522891453e-05f, 5.514601550e-05f, 5.506302860e-05f, 5.497995399e-05f,
+5.489679180e-05f, 5.481354219e-05f, 5.473020532e-05f, 5.464678134e-05f, 5.456327040e-05f, 5.447967265e-05f, 5.439598824e-05f, 5.431221733e-05f, 5.422836007e-05f, 5.414441661e-05f,
+5.406038711e-05f, 5.397627172e-05f, 5.389207058e-05f, 5.380778387e-05f, 5.372341172e-05f, 5.363895430e-05f, 5.355441175e-05f, 5.346978423e-05f, 5.338507190e-05f, 5.330027491e-05f,
+5.321539341e-05f, 5.313042756e-05f, 5.304537752e-05f, 5.296024343e-05f, 5.287502545e-05f, 5.278972374e-05f, 5.270433845e-05f, 5.261886974e-05f, 5.253331777e-05f, 5.244768268e-05f,
+5.236196464e-05f, 5.227616380e-05f, 5.219028032e-05f, 5.210431435e-05f, 5.201826605e-05f, 5.193213557e-05f, 5.184592308e-05f, 5.175962872e-05f, 5.167325266e-05f, 5.158679505e-05f,
+5.150025605e-05f, 5.141363582e-05f, 5.132693451e-05f, 5.124015228e-05f, 5.115328928e-05f, 5.106634569e-05f, 5.097932165e-05f, 5.089221732e-05f, 5.080503286e-05f, 5.071776842e-05f,
+5.063042418e-05f, 5.054300027e-05f, 5.045549687e-05f, 5.036791414e-05f, 5.028025222e-05f, 5.019251128e-05f, 5.010469148e-05f, 5.001679297e-05f, 4.992881592e-05f, 4.984076049e-05f,
+4.975262683e-05f, 4.966441511e-05f, 4.957612548e-05f, 4.948775811e-05f, 4.939931315e-05f, 4.931079076e-05f, 4.922219111e-05f, 4.913351436e-05f, 4.904476065e-05f, 4.895593017e-05f,
+4.886702306e-05f, 4.877803949e-05f, 4.868897962e-05f, 4.859984360e-05f, 4.851063161e-05f, 4.842134379e-05f, 4.833198033e-05f, 4.824254136e-05f, 4.815302706e-05f, 4.806343759e-05f,
+4.797377311e-05f, 4.788403378e-05f, 4.779421976e-05f, 4.770433122e-05f, 4.761436832e-05f, 4.752433122e-05f, 4.743422008e-05f, 4.734403506e-05f, 4.725377634e-05f, 4.716344406e-05f,
+4.707303840e-05f, 4.698255952e-05f, 4.689200758e-05f, 4.680138274e-05f, 4.671068517e-05f, 4.661991503e-05f, 4.652907248e-05f, 4.643815770e-05f, 4.634717083e-05f, 4.625611205e-05f,
+4.616498152e-05f, 4.607377941e-05f, 4.598250587e-05f, 4.589116108e-05f, 4.579974519e-05f, 4.570825838e-05f, 4.561670080e-05f, 4.552507262e-05f, 4.543337402e-05f, 4.534160514e-05f,
+4.524976616e-05f, 4.515785724e-05f, 4.506587855e-05f, 4.497383025e-05f, 4.488171251e-05f, 4.478952550e-05f, 4.469726938e-05f, 4.460494431e-05f, 4.451255046e-05f, 4.442008800e-05f,
+4.432755710e-05f, 4.423495792e-05f, 4.414229062e-05f, 4.404955538e-05f, 4.395675235e-05f, 4.386388172e-05f, 4.377094364e-05f, 4.367793828e-05f, 4.358486580e-05f, 4.349172639e-05f,
+4.339852019e-05f, 4.330524738e-05f, 4.321190813e-05f, 4.311850261e-05f, 4.302503097e-05f, 4.293149340e-05f, 4.283789005e-05f, 4.274422110e-05f, 4.265048672e-05f, 4.255668706e-05f,
+4.246282231e-05f, 4.236889262e-05f, 4.227489817e-05f, 4.218083913e-05f, 4.208671565e-05f, 4.199252793e-05f, 4.189827611e-05f, 4.180396037e-05f, 4.170958088e-05f, 4.161513781e-05f,
+4.152063133e-05f, 4.142606161e-05f, 4.133142881e-05f, 4.123673310e-05f, 4.114197466e-05f, 4.104715366e-05f, 4.095227026e-05f, 4.085732464e-05f, 4.076231696e-05f, 4.066724739e-05f,
+4.057211611e-05f, 4.047692328e-05f, 4.038166908e-05f, 4.028635367e-05f, 4.019097723e-05f, 4.009553993e-05f, 4.000004193e-05f, 3.990448341e-05f, 3.980886454e-05f, 3.971318549e-05f,
+3.961744643e-05f, 3.952164754e-05f, 3.942578897e-05f, 3.932987091e-05f, 3.923389352e-05f, 3.913785699e-05f, 3.904176147e-05f, 3.894560714e-05f, 3.884939417e-05f, 3.875312273e-05f,
+3.865679301e-05f, 3.856040515e-05f, 3.846395935e-05f, 3.836745577e-05f, 3.827089459e-05f, 3.817427597e-05f, 3.807760009e-05f, 3.798086712e-05f, 3.788407724e-05f, 3.778723061e-05f,
+3.769032741e-05f, 3.759336781e-05f, 3.749635199e-05f, 3.739928011e-05f, 3.730215236e-05f, 3.720496890e-05f, 3.710772990e-05f, 3.701043555e-05f, 3.691308601e-05f, 3.681568146e-05f,
+3.671822207e-05f, 3.662070801e-05f, 3.652313947e-05f, 3.642551660e-05f, 3.632783959e-05f, 3.623010861e-05f, 3.613232383e-05f, 3.603448544e-05f, 3.593659359e-05f, 3.583864847e-05f,
+3.574065025e-05f, 3.564259910e-05f, 3.554449521e-05f, 3.544633873e-05f, 3.534812986e-05f, 3.524986876e-05f, 3.515155561e-05f, 3.505319058e-05f, 3.495477385e-05f, 3.485630559e-05f,
+3.475778598e-05f, 3.465921519e-05f, 3.456059340e-05f, 3.446192078e-05f, 3.436319752e-05f, 3.426442377e-05f, 3.416559973e-05f, 3.406672556e-05f, 3.396780144e-05f, 3.386882755e-05f,
+3.376980406e-05f, 3.367073115e-05f, 3.357160899e-05f, 3.347243777e-05f, 3.337321765e-05f, 3.327394881e-05f, 3.317463143e-05f, 3.307526568e-05f, 3.297585175e-05f, 3.287638980e-05f,
+3.277688002e-05f, 3.267732258e-05f, 3.257771765e-05f, 3.247806542e-05f, 3.237836606e-05f, 3.227861975e-05f, 3.217882666e-05f, 3.207898697e-05f, 3.197910086e-05f, 3.187916850e-05f,
+3.177919008e-05f, 3.167916576e-05f, 3.157909574e-05f, 3.147898017e-05f, 3.137881925e-05f, 3.127861315e-05f, 3.117836204e-05f, 3.107806610e-05f, 3.097772552e-05f, 3.087734047e-05f,
+3.077691112e-05f, 3.067643766e-05f, 3.057592026e-05f, 3.047535910e-05f, 3.037475435e-05f, 3.027410621e-05f, 3.017341484e-05f, 3.007268042e-05f, 2.997190313e-05f, 2.987108315e-05f,
+2.977022066e-05f, 2.966931584e-05f, 2.956836886e-05f, 2.946737990e-05f, 2.936634914e-05f, 2.926527676e-05f, 2.916416294e-05f, 2.906300786e-05f, 2.896181170e-05f, 2.886057463e-05f,
+2.875929683e-05f, 2.865797849e-05f, 2.855661977e-05f, 2.845522087e-05f, 2.835378196e-05f, 2.825230322e-05f, 2.815078482e-05f, 2.804922696e-05f, 2.794762980e-05f, 2.784599352e-05f,
+2.774431831e-05f, 2.764260435e-05f, 2.754085181e-05f, 2.743906088e-05f, 2.733723173e-05f, 2.723536454e-05f, 2.713345949e-05f, 2.703151677e-05f, 2.692953655e-05f, 2.682751902e-05f,
+2.672546435e-05f, 2.662337271e-05f, 2.652124431e-05f, 2.641907930e-05f, 2.631687788e-05f, 2.621464022e-05f, 2.611236650e-05f, 2.601005690e-05f, 2.590771161e-05f, 2.580533081e-05f,
+2.570291466e-05f, 2.560046337e-05f, 2.549797709e-05f, 2.539545603e-05f, 2.529290034e-05f, 2.519031023e-05f, 2.508768586e-05f, 2.498502743e-05f, 2.488233510e-05f, 2.477960906e-05f,
+2.467684949e-05f, 2.457405657e-05f, 2.447123048e-05f, 2.436837141e-05f, 2.426547953e-05f, 2.416255502e-05f, 2.405959808e-05f, 2.395660887e-05f, 2.385358757e-05f, 2.375053438e-05f,
+2.364744947e-05f, 2.354433302e-05f, 2.344118521e-05f, 2.333800623e-05f, 2.323479626e-05f, 2.313155547e-05f, 2.302828405e-05f, 2.292498218e-05f, 2.282165004e-05f, 2.271828782e-05f,
+2.261489569e-05f, 2.251147384e-05f, 2.240802245e-05f, 2.230454169e-05f, 2.220103176e-05f, 2.209749283e-05f, 2.199392509e-05f, 2.189032871e-05f, 2.178670389e-05f, 2.168305079e-05f,
+2.157936961e-05f, 2.147566052e-05f, 2.137192370e-05f, 2.126815935e-05f, 2.116436764e-05f, 2.106054875e-05f, 2.095670286e-05f, 2.085283016e-05f, 2.074893084e-05f, 2.064500506e-05f,
+2.054105301e-05f, 2.043707489e-05f, 2.033307086e-05f, 2.022904111e-05f, 2.012498582e-05f, 2.002090518e-05f, 1.991679937e-05f, 1.981266857e-05f, 1.970851296e-05f, 1.960433272e-05f,
+1.950012804e-05f, 1.939589910e-05f, 1.929164609e-05f, 1.918736918e-05f, 1.908306856e-05f, 1.897874440e-05f, 1.887439691e-05f, 1.877002624e-05f, 1.866563260e-05f, 1.856121615e-05f,
+1.845677710e-05f, 1.835231560e-05f, 1.824783186e-05f, 1.814332605e-05f, 1.803879835e-05f, 1.793424895e-05f, 1.782967804e-05f, 1.772508578e-05f, 1.762047238e-05f, 1.751583800e-05f,
+1.741118284e-05f, 1.730650707e-05f, 1.720181088e-05f, 1.709709445e-05f, 1.699235796e-05f, 1.688760161e-05f, 1.678282556e-05f, 1.667803001e-05f, 1.657321514e-05f, 1.646838112e-05f,
+1.636352815e-05f, 1.625865640e-05f, 1.615376607e-05f, 1.604885733e-05f, 1.594393036e-05f, 1.583898535e-05f, 1.573402249e-05f, 1.562904195e-05f, 1.552404391e-05f, 1.541902858e-05f,
+1.531399611e-05f, 1.520894671e-05f, 1.510388054e-05f, 1.499879781e-05f, 1.489369868e-05f, 1.478858334e-05f, 1.468345198e-05f, 1.457830478e-05f, 1.447314191e-05f, 1.436796358e-05f,
+1.426276995e-05f, 1.415756122e-05f, 1.405233756e-05f, 1.394709916e-05f, 1.384184621e-05f, 1.373657888e-05f, 1.363129735e-05f, 1.352600183e-05f, 1.342069248e-05f, 1.331536948e-05f,
+1.321003304e-05f, 1.310468331e-05f, 1.299932050e-05f, 1.289394479e-05f, 1.278855635e-05f, 1.268315537e-05f, 1.257774204e-05f, 1.247231653e-05f, 1.236687903e-05f, 1.226142974e-05f,
+1.215596881e-05f, 1.205049646e-05f, 1.194501284e-05f, 1.183951816e-05f, 1.173401259e-05f, 1.162849631e-05f, 1.152296952e-05f, 1.141743239e-05f, 1.131188510e-05f, 1.120632785e-05f,
+1.110076081e-05f, 1.099518416e-05f, 1.088959810e-05f, 1.078400281e-05f, 1.067839846e-05f, 1.057278524e-05f, 1.046716334e-05f, 1.036153294e-05f, 1.025589422e-05f, 1.015024736e-05f,
+1.004459256e-05f, 9.938929990e-06f, 9.833259836e-06f, 9.727582282e-06f, 9.621897512e-06f, 9.516205709e-06f, 9.410507057e-06f, 9.304801739e-06f, 9.199089939e-06f, 9.093371840e-06f,
+8.987647626e-06f, 8.881917481e-06f, 8.776181587e-06f, 8.670440129e-06f, 8.564693289e-06f, 8.458941252e-06f, 8.353184200e-06f, 8.247422318e-06f, 8.141655788e-06f, 8.035884794e-06f,
+7.930109519e-06f, 7.824330148e-06f, 7.718546863e-06f, 7.612759847e-06f, 7.506969284e-06f, 7.401175358e-06f, 7.295378252e-06f, 7.189578149e-06f, 7.083775232e-06f, 6.977969685e-06f,
+6.872161692e-06f, 6.766351435e-06f, 6.660539097e-06f, 6.554724863e-06f, 6.448908915e-06f, 6.343091436e-06f, 6.237272610e-06f, 6.131452621e-06f, 6.025631650e-06f, 5.919809882e-06f,
+5.813987500e-06f, 5.708164686e-06f, 5.602341624e-06f, 5.496518497e-06f, 5.390695489e-06f, 5.284872782e-06f, 5.179050559e-06f, 5.073229003e-06f, 4.967408298e-06f, 4.861588627e-06f,
+4.755770172e-06f, 4.649953116e-06f, 4.544137643e-06f, 4.438323935e-06f, 4.332512176e-06f, 4.226702548e-06f, 4.120895234e-06f, 4.015090417e-06f, 3.909288280e-06f, 3.803489006e-06f,
+3.697692777e-06f, 3.591899777e-06f, 3.486110188e-06f, 3.380324192e-06f, 3.274541973e-06f, 3.168763714e-06f, 3.062989596e-06f, 2.957219803e-06f, 2.851454517e-06f, 2.745693920e-06f,
+2.639938196e-06f, 2.534187527e-06f, 2.428442096e-06f, 2.322702084e-06f, 2.216967675e-06f, 2.111239050e-06f, 2.005516393e-06f, 1.899799886e-06f, 1.794089711e-06f, 1.688386050e-06f,
+1.582689085e-06f, 1.476999000e-06f, 1.371315976e-06f, 1.265640195e-06f, 1.159971840e-06f, 1.054311093e-06f, 9.486581354e-07f, 8.430131501e-07f, 7.373763191e-07f, 6.317478241e-07f,
+5.261278474e-07f, 4.205165709e-07f, 3.149141765e-07f, 2.093208462e-07f, 1.037367618e-07f, -1.837894817e-09f, -1.074029418e-07f, -2.129581973e-07f, -3.185034797e-07f, -4.240386072e-07f,
+-5.295633982e-07f, -6.350776708e-07f, -7.405812437e-07f, -8.460739351e-07f, -9.515555635e-07f, -1.057025947e-06f, -1.162484905e-06f, -1.267932256e-06f, -1.373367818e-06f, -1.478791409e-06f,
+-1.584202849e-06f, -1.689601956e-06f, -1.794988549e-06f, -1.900362447e-06f, -2.005723468e-06f, -2.111071432e-06f, -2.216406157e-06f, -2.321727463e-06f, -2.427035167e-06f, -2.532329090e-06f,
+-2.637609050e-06f, -2.742874866e-06f, -2.848126358e-06f, -2.953363345e-06f, -3.058585646e-06f, -3.163793079e-06f, -3.268985466e-06f, -3.374162624e-06f, -3.479324373e-06f, -3.584470534e-06f,
+-3.689600924e-06f, -3.794715364e-06f, -3.899813673e-06f, -4.004895671e-06f, -4.109961178e-06f, -4.215010013e-06f, -4.320041996e-06f, -4.425056946e-06f, -4.530054684e-06f, -4.635035030e-06f,
+-4.739997803e-06f, -4.844942824e-06f, -4.949869912e-06f, -5.054778887e-06f, -5.159669570e-06f, -5.264541781e-06f, -5.369395340e-06f, -5.474230067e-06f, -5.579045782e-06f, -5.683842307e-06f,
+-5.788619461e-06f, -5.893377064e-06f, -5.998114938e-06f, -6.102832903e-06f, -6.207530780e-06f, -6.312208388e-06f, -6.416865550e-06f, -6.521502085e-06f, -6.626117814e-06f, -6.730712559e-06f,
+-6.835286140e-06f, -6.939838378e-06f, -7.044369095e-06f, -7.148878111e-06f, -7.253365247e-06f, -7.357830326e-06f, -7.462273167e-06f, -7.566693592e-06f, -7.671091423e-06f, -7.775466481e-06f,
+-7.879818587e-06f, -7.984147563e-06f, -8.088453231e-06f, -8.192735412e-06f, -8.296993928e-06f, -8.401228601e-06f, -8.505439252e-06f, -8.609625703e-06f, -8.713787777e-06f, -8.817925295e-06f,
+-8.922038079e-06f, -9.026125951e-06f, -9.130188734e-06f, -9.234226250e-06f, -9.338238321e-06f, -9.442224769e-06f, -9.546185417e-06f, -9.650120087e-06f, -9.754028602e-06f, -9.857910784e-06f,
+-9.961766456e-06f, -1.006559544e-05f, -1.016939756e-05f, -1.027317264e-05f, -1.037692050e-05f, -1.048064096e-05f, -1.058433385e-05f, -1.068799900e-05f, -1.079163621e-05f, -1.089524532e-05f,
+-1.099882615e-05f, -1.110237853e-05f, -1.120590227e-05f, -1.130939720e-05f, -1.141286314e-05f, -1.151629993e-05f, -1.161970737e-05f, -1.172308530e-05f, -1.182643353e-05f, -1.192975190e-05f,
+-1.203304023e-05f, -1.213629833e-05f, -1.223952604e-05f, -1.234272318e-05f, -1.244588957e-05f, -1.254902504e-05f, -1.265212941e-05f, -1.275520250e-05f, -1.285824415e-05f, -1.296125417e-05f,
+-1.306423239e-05f, -1.316717863e-05f, -1.327009272e-05f, -1.337297449e-05f, -1.347582376e-05f, -1.357864034e-05f, -1.368142408e-05f, -1.378417479e-05f, -1.388689231e-05f, -1.398957644e-05f,
+-1.409222703e-05f, -1.419484389e-05f, -1.429742685e-05f, -1.439997574e-05f, -1.450249038e-05f, -1.460497059e-05f, -1.470741621e-05f, -1.480982706e-05f, -1.491220297e-05f, -1.501454376e-05f,
+-1.511684925e-05f, -1.521911928e-05f, -1.532135367e-05f, -1.542355224e-05f, -1.552571483e-05f, -1.562784126e-05f, -1.572993135e-05f, -1.583198494e-05f, -1.593400184e-05f, -1.603598189e-05f,
+-1.613792491e-05f, -1.623983074e-05f, -1.634169919e-05f, -1.644353009e-05f, -1.654532328e-05f, -1.664707857e-05f, -1.674879580e-05f, -1.685047480e-05f, -1.695211538e-05f, -1.705371738e-05f,
+-1.715528063e-05f, -1.725680496e-05f, -1.735829018e-05f, -1.745973614e-05f, -1.756114265e-05f, -1.766250955e-05f, -1.776383667e-05f, -1.786512382e-05f, -1.796637085e-05f, -1.806757758e-05f,
+-1.816874383e-05f, -1.826986944e-05f, -1.837095424e-05f, -1.847199805e-05f, -1.857300071e-05f, -1.867396203e-05f, -1.877488186e-05f, -1.887576002e-05f, -1.897659633e-05f, -1.907739064e-05f,
+-1.917814276e-05f, -1.927885254e-05f, -1.937951979e-05f, -1.948014434e-05f, -1.958072603e-05f, -1.968126469e-05f, -1.978176015e-05f, -1.988221223e-05f, -1.998262077e-05f, -2.008298560e-05f,
+-2.018330654e-05f, -2.028358343e-05f, -2.038381610e-05f, -2.048400438e-05f, -2.058414810e-05f, -2.068424709e-05f, -2.078430118e-05f, -2.088431020e-05f, -2.098427398e-05f, -2.108419236e-05f,
+-2.118406517e-05f, -2.128389223e-05f, -2.138367338e-05f, -2.148340845e-05f, -2.158309727e-05f, -2.168273967e-05f, -2.178233549e-05f, -2.188188456e-05f, -2.198138670e-05f, -2.208084176e-05f,
+-2.218024956e-05f, -2.227960993e-05f, -2.237892271e-05f, -2.247818774e-05f, -2.257740483e-05f, -2.267657383e-05f, -2.277569457e-05f, -2.287476689e-05f, -2.297379060e-05f, -2.307276555e-05f,
+-2.317169158e-05f, -2.327056850e-05f, -2.336939617e-05f, -2.346817440e-05f, -2.356690304e-05f, -2.366558192e-05f, -2.376421087e-05f, -2.386278972e-05f, -2.396131832e-05f, -2.405979649e-05f,
+-2.415822406e-05f, -2.425660088e-05f, -2.435492677e-05f, -2.445320158e-05f, -2.455142513e-05f, -2.464959726e-05f, -2.474771781e-05f, -2.484578661e-05f, -2.494380349e-05f, -2.504176829e-05f,
+-2.513968085e-05f, -2.523754100e-05f, -2.533534858e-05f, -2.543310341e-05f, -2.553080535e-05f, -2.562845422e-05f, -2.572604985e-05f, -2.582359210e-05f, -2.592108078e-05f, -2.601851574e-05f,
+-2.611589681e-05f, -2.621322384e-05f, -2.631049665e-05f, -2.640771508e-05f, -2.650487898e-05f, -2.660198817e-05f, -2.669904250e-05f, -2.679604179e-05f, -2.689298589e-05f, -2.698987464e-05f,
+-2.708670788e-05f, -2.718348543e-05f, -2.728020714e-05f, -2.737687284e-05f, -2.747348238e-05f, -2.757003559e-05f, -2.766653231e-05f, -2.776297238e-05f, -2.785935563e-05f, -2.795568191e-05f,
+-2.805195105e-05f, -2.814816289e-05f, -2.824431727e-05f, -2.834041403e-05f, -2.843645300e-05f, -2.853243404e-05f, -2.862835697e-05f, -2.872422164e-05f, -2.882002788e-05f, -2.891577554e-05f,
+-2.901146445e-05f, -2.910709445e-05f, -2.920266539e-05f, -2.929817710e-05f, -2.939362943e-05f, -2.948902221e-05f, -2.958435528e-05f, -2.967962849e-05f, -2.977484168e-05f, -2.986999468e-05f,
+-2.996508734e-05f, -3.006011949e-05f, -3.015509099e-05f, -3.025000167e-05f, -3.034485137e-05f, -3.043963993e-05f, -3.053436720e-05f, -3.062903301e-05f, -3.072363721e-05f, -3.081817964e-05f,
+-3.091266015e-05f, -3.100707856e-05f, -3.110143474e-05f, -3.119572851e-05f, -3.128995973e-05f, -3.138412823e-05f, -3.147823385e-05f, -3.157227645e-05f, -3.166625586e-05f, -3.176017193e-05f,
+-3.185402449e-05f, -3.194781340e-05f, -3.204153849e-05f, -3.213519962e-05f, -3.222879661e-05f, -3.232232933e-05f, -3.241579760e-05f, -3.250920129e-05f, -3.260254022e-05f, -3.269581424e-05f,
+-3.278902321e-05f, -3.288216696e-05f, -3.297524533e-05f, -3.306825818e-05f, -3.316120535e-05f, -3.325408668e-05f, -3.334690202e-05f, -3.343965122e-05f, -3.353233411e-05f, -3.362495055e-05f,
+-3.371750038e-05f, -3.380998345e-05f, -3.390239960e-05f, -3.399474868e-05f, -3.408703053e-05f, -3.417924501e-05f, -3.427139196e-05f, -3.436347122e-05f, -3.445548264e-05f, -3.454742607e-05f,
+-3.463930136e-05f, -3.473110835e-05f, -3.482284690e-05f, -3.491451684e-05f, -3.500611802e-05f, -3.509765030e-05f, -3.518911353e-05f, -3.528050754e-05f, -3.537183219e-05f, -3.546308732e-05f,
+-3.555427280e-05f, -3.564538845e-05f, -3.573643413e-05f, -3.582740970e-05f, -3.591831500e-05f, -3.600914987e-05f, -3.609991417e-05f, -3.619060775e-05f, -3.628123046e-05f, -3.637178214e-05f,
+-3.646226265e-05f, -3.655267184e-05f, -3.664300955e-05f, -3.673327564e-05f, -3.682346996e-05f, -3.691359235e-05f, -3.700364267e-05f, -3.709362077e-05f, -3.718352650e-05f, -3.727335971e-05f,
+-3.736312025e-05f, -3.745280798e-05f, -3.754242274e-05f, -3.763196438e-05f, -3.772143277e-05f, -3.781082774e-05f, -3.790014916e-05f, -3.798939687e-05f, -3.807857072e-05f, -3.816767057e-05f,
+-3.825669628e-05f, -3.834564769e-05f, -3.843452466e-05f, -3.852332703e-05f, -3.861205467e-05f, -3.870070742e-05f, -3.878928515e-05f, -3.887778770e-05f, -3.896621492e-05f, -3.905456668e-05f,
+-3.914284282e-05f, -3.923104320e-05f, -3.931916767e-05f, -3.940721609e-05f, -3.949518831e-05f, -3.958308419e-05f, -3.967090358e-05f, -3.975864634e-05f, -3.984631232e-05f, -3.993390138e-05f,
+-4.002141337e-05f, -4.010884815e-05f, -4.019620557e-05f, -4.028348550e-05f, -4.037068778e-05f, -4.045781227e-05f, -4.054485883e-05f, -4.063182731e-05f, -4.071871758e-05f, -4.080552949e-05f,
+-4.089226289e-05f, -4.097891764e-05f, -4.106549360e-05f, -4.115199064e-05f, -4.123840859e-05f, -4.132474733e-05f, -4.141100671e-05f, -4.149718658e-05f, -4.158328682e-05f, -4.166930726e-05f,
+-4.175524778e-05f, -4.184110823e-05f, -4.192688848e-05f, -4.201258837e-05f, -4.209820777e-05f, -4.218374654e-05f, -4.226920453e-05f, -4.235458161e-05f, -4.243987764e-05f, -4.252509247e-05f,
+-4.261022597e-05f, -4.269527799e-05f, -4.278024840e-05f, -4.286513706e-05f, -4.294994382e-05f, -4.303466855e-05f, -4.311931111e-05f, -4.320387136e-05f, -4.328834916e-05f, -4.337274437e-05f,
+-4.345705686e-05f, -4.354128648e-05f, -4.362543310e-05f, -4.370949658e-05f, -4.379347678e-05f, -4.387737356e-05f, -4.396118679e-05f, -4.404491633e-05f, -4.412856204e-05f, -4.421212378e-05f,
+-4.429560142e-05f, -4.437899482e-05f, -4.446230385e-05f, -4.454552836e-05f, -4.462866823e-05f, -4.471172331e-05f, -4.479469346e-05f, -4.487757857e-05f, -4.496037848e-05f, -4.504309306e-05f,
+-4.512572218e-05f, -4.520826570e-05f, -4.529072348e-05f, -4.537309540e-05f, -4.545538132e-05f, -4.553758110e-05f, -4.561969460e-05f, -4.570172170e-05f, -4.578366226e-05f, -4.586551615e-05f,
+-4.594728323e-05f, -4.602896336e-05f, -4.611055643e-05f, -4.619206228e-05f, -4.627348080e-05f, -4.635481184e-05f, -4.643605527e-05f, -4.651721096e-05f, -4.659827878e-05f, -4.667925860e-05f,
+-4.676015028e-05f, -4.684095370e-05f, -4.692166871e-05f, -4.700229520e-05f, -4.708283302e-05f, -4.716328204e-05f, -4.724364214e-05f, -4.732391319e-05f, -4.740409505e-05f, -4.748418759e-05f,
+-4.756419068e-05f, -4.764410420e-05f, -4.772392800e-05f, -4.780366197e-05f, -4.788330597e-05f, -4.796285988e-05f, -4.804232355e-05f, -4.812169687e-05f, -4.820097971e-05f, -4.828017193e-05f,
+-4.835927340e-05f, -4.843828401e-05f, -4.851720361e-05f, -4.859603209e-05f, -4.867476931e-05f, -4.875341515e-05f, -4.883196947e-05f, -4.891043216e-05f, -4.898880308e-05f, -4.906708210e-05f,
+-4.914526910e-05f, -4.922336396e-05f, -4.930136654e-05f, -4.937927672e-05f, -4.945709437e-05f, -4.953481936e-05f, -4.961245158e-05f, -4.968999089e-05f, -4.976743717e-05f, -4.984479029e-05f,
+-4.992205013e-05f, -4.999921656e-05f, -5.007628946e-05f, -5.015326870e-05f, -5.023015416e-05f, -5.030694571e-05f, -5.038364323e-05f, -5.046024660e-05f, -5.053675568e-05f, -5.061317037e-05f,
+-5.068949053e-05f, -5.076571603e-05f, -5.084184677e-05f, -5.091788261e-05f, -5.099382343e-05f, -5.106966911e-05f, -5.114541952e-05f, -5.122107455e-05f, -5.129663407e-05f, -5.137209795e-05f,
+-5.144746609e-05f, -5.152273835e-05f, -5.159791461e-05f, -5.167299476e-05f, -5.174797867e-05f, -5.182286621e-05f, -5.189765728e-05f, -5.197235175e-05f, -5.204694950e-05f, -5.212145040e-05f,
+-5.219585435e-05f, -5.227016121e-05f, -5.234437087e-05f, -5.241848321e-05f, -5.249249811e-05f, -5.256641545e-05f, -5.264023512e-05f, -5.271395698e-05f, -5.278758093e-05f, -5.286110685e-05f,
+-5.293453461e-05f, -5.300786411e-05f, -5.308109521e-05f, -5.315422781e-05f, -5.322726179e-05f, -5.330019702e-05f, -5.337303340e-05f, -5.344577080e-05f, -5.351840911e-05f, -5.359094821e-05f,
+-5.366338798e-05f, -5.373572832e-05f, -5.380796909e-05f, -5.388011020e-05f, -5.395215151e-05f, -5.402409292e-05f, -5.409593431e-05f, -5.416767556e-05f, -5.423931657e-05f, -5.431085720e-05f,
+-5.438229736e-05f, -5.445363693e-05f, -5.452487578e-05f, -5.459601382e-05f, -5.466705092e-05f, -5.473798696e-05f, -5.480882185e-05f, -5.487955545e-05f, -5.495018767e-05f, -5.502071839e-05f,
+-5.509114748e-05f, -5.516147485e-05f, -5.523170038e-05f, -5.530182396e-05f, -5.537184547e-05f, -5.544176481e-05f, -5.551158185e-05f, -5.558129650e-05f, -5.565090863e-05f, -5.572041815e-05f,
+-5.578982493e-05f, -5.585912886e-05f, -5.592832984e-05f, -5.599742776e-05f, -5.606642250e-05f, -5.613531396e-05f, -5.620410202e-05f, -5.627278658e-05f, -5.634136752e-05f, -5.640984474e-05f,
+-5.647821813e-05f, -5.654648758e-05f, -5.661465298e-05f, -5.668271422e-05f, -5.675067120e-05f, -5.681852380e-05f, -5.688627192e-05f, -5.695391545e-05f, -5.702145428e-05f, -5.708888831e-05f,
+-5.715621743e-05f, -5.722344153e-05f, -5.729056050e-05f, -5.735757424e-05f, -5.742448264e-05f, -5.749128560e-05f, -5.755798301e-05f, -5.762457476e-05f, -5.769106076e-05f, -5.775744088e-05f,
+-5.782371503e-05f, -5.788988311e-05f, -5.795594500e-05f, -5.802190061e-05f, -5.808774982e-05f, -5.815349254e-05f, -5.821912867e-05f, -5.828465808e-05f, -5.835008070e-05f, -5.841539640e-05f,
+-5.848060509e-05f, -5.854570666e-05f, -5.861070101e-05f, -5.867558804e-05f, -5.874036765e-05f, -5.880503973e-05f, -5.886960418e-05f, -5.893406090e-05f, -5.899840978e-05f, -5.906265074e-05f,
+-5.912678366e-05f, -5.919080844e-05f, -5.925472498e-05f, -5.931853319e-05f, -5.938223296e-05f, -5.944582419e-05f, -5.950930678e-05f, -5.957268064e-05f, -5.963594565e-05f, -5.969910173e-05f,
+-5.976214877e-05f, -5.982508667e-05f, -5.988791533e-05f, -5.995063467e-05f, -6.001324457e-05f, -6.007574494e-05f, -6.013813568e-05f, -6.020041669e-05f, -6.026258788e-05f, -6.032464915e-05f,
+-6.038660039e-05f, -6.044844152e-05f, -6.051017244e-05f, -6.057179304e-05f, -6.063330324e-05f, -6.069470294e-05f, -6.075599203e-05f, -6.081717043e-05f, -6.087823804e-05f, -6.093919476e-05f,
+-6.100004050e-05f, -6.106077516e-05f, -6.112139865e-05f, -6.118191087e-05f, -6.124231174e-05f, -6.130260114e-05f, -6.136277900e-05f, -6.142284521e-05f, -6.148279968e-05f, -6.154264233e-05f,
+-6.160237304e-05f, -6.166199174e-05f, -6.172149834e-05f, -6.178089272e-05f, -6.184017481e-05f, -6.189934452e-05f, -6.195840174e-05f, -6.201734639e-05f, -6.207617838e-05f, -6.213489761e-05f,
+-6.219350399e-05f, -6.225199744e-05f, -6.231037786e-05f, -6.236864516e-05f, -6.242679925e-05f, -6.248484004e-05f, -6.254276744e-05f, -6.260058135e-05f, -6.265828170e-05f, -6.271586839e-05f,
+-6.277334134e-05f, -6.283070044e-05f, -6.288794562e-05f, -6.294507678e-05f, -6.300209384e-05f, -6.305899671e-05f, -6.311578530e-05f, -6.317245952e-05f, -6.322901928e-05f, -6.328546451e-05f,
+-6.334179510e-05f, -6.339801098e-05f, -6.345411205e-05f, -6.351009824e-05f, -6.356596944e-05f, -6.362172559e-05f, -6.367736658e-05f, -6.373289235e-05f, -6.378830279e-05f, -6.384359782e-05f,
+-6.389877737e-05f, -6.395384134e-05f, -6.400878965e-05f, -6.406362222e-05f, -6.411833896e-05f, -6.417293978e-05f, -6.422742461e-05f, -6.428179336e-05f, -6.433604594e-05f, -6.439018228e-05f,
+-6.444420229e-05f, -6.449810588e-05f, -6.455189298e-05f, -6.460556350e-05f, -6.465911736e-05f, -6.471255448e-05f, -6.476587477e-05f, -6.481907816e-05f, -6.487216456e-05f, -6.492513390e-05f,
+-6.497798608e-05f, -6.503072103e-05f, -6.508333868e-05f, -6.513583893e-05f, -6.518822171e-05f, -6.524048694e-05f, -6.529263454e-05f, -6.534466444e-05f, -6.539657654e-05f, -6.544837077e-05f,
+-6.550004706e-05f, -6.555160532e-05f, -6.560304547e-05f, -6.565436745e-05f, -6.570557116e-05f, -6.575665654e-05f, -6.580762350e-05f, -6.585847197e-05f, -6.590920186e-05f, -6.595981311e-05f,
+-6.601030564e-05f, -6.606067937e-05f, -6.611093421e-05f, -6.616107011e-05f, -6.621108698e-05f, -6.626098474e-05f, -6.631076332e-05f, -6.636042265e-05f, -6.640996265e-05f, -6.645938324e-05f,
+-6.650868436e-05f, -6.655786592e-05f, -6.660692785e-05f, -6.665587008e-05f, -6.670469254e-05f, -6.675339514e-05f, -6.680197783e-05f, -6.685044051e-05f, -6.689878313e-05f, -6.694700561e-05f,
+-6.699510787e-05f, -6.704308985e-05f, -6.709095147e-05f, -6.713869266e-05f, -6.718631335e-05f, -6.723381347e-05f, -6.728119294e-05f, -6.732845170e-05f, -6.737558967e-05f, -6.742260679e-05f,
+-6.746950298e-05f, -6.751627817e-05f, -6.756293230e-05f, -6.760946529e-05f, -6.765587708e-05f, -6.770216759e-05f, -6.774833676e-05f, -6.779438451e-05f, -6.784031079e-05f, -6.788611551e-05f,
+-6.793179862e-05f, -6.797736004e-05f, -6.802279971e-05f, -6.806811756e-05f, -6.811331352e-05f, -6.815838753e-05f, -6.820333951e-05f, -6.824816941e-05f, -6.829287715e-05f, -6.833746267e-05f,
+-6.838192590e-05f, -6.842626678e-05f, -6.847048524e-05f, -6.851458122e-05f, -6.855855465e-05f, -6.860240547e-05f, -6.864613361e-05f, -6.868973900e-05f, -6.873322159e-05f, -6.877658131e-05f,
+-6.881981809e-05f, -6.886293188e-05f, -6.890592260e-05f, -6.894879020e-05f, -6.899153461e-05f, -6.903415577e-05f, -6.907665362e-05f, -6.911902809e-05f, -6.916127913e-05f, -6.920340666e-05f,
+-6.924541064e-05f, -6.928729100e-05f, -6.932904767e-05f, -6.937068059e-05f, -6.941218972e-05f, -6.945357498e-05f, -6.949483631e-05f, -6.953597365e-05f, -6.957698696e-05f, -6.961787615e-05f,
+-6.965864118e-05f, -6.969928199e-05f, -6.973979852e-05f, -6.978019070e-05f, -6.982045849e-05f, -6.986060182e-05f, -6.990062063e-05f, -6.994051486e-05f, -6.998028447e-05f, -7.001992938e-05f,
+-7.005944955e-05f, -7.009884492e-05f, -7.013811543e-05f, -7.017726102e-05f, -7.021628164e-05f, -7.025517723e-05f, -7.029394773e-05f, -7.033259309e-05f, -7.037111326e-05f, -7.040950818e-05f,
+-7.044777779e-05f, -7.048592204e-05f, -7.052394087e-05f, -7.056183424e-05f, -7.059960208e-05f, -7.063724435e-05f, -7.067476098e-05f, -7.071215193e-05f, -7.074941714e-05f, -7.078655656e-05f,
+-7.082357014e-05f, -7.086045782e-05f, -7.089721955e-05f, -7.093385528e-05f, -7.097036496e-05f, -7.100674854e-05f, -7.104300596e-05f, -7.107913717e-05f, -7.111514213e-05f, -7.115102078e-05f,
+-7.118677306e-05f, -7.122239894e-05f, -7.125789837e-05f, -7.129327128e-05f, -7.132851763e-05f, -7.136363738e-05f, -7.139863047e-05f, -7.143349685e-05f, -7.146823648e-05f, -7.150284930e-05f,
+-7.153733527e-05f, -7.157169434e-05f, -7.160592647e-05f, -7.164003160e-05f, -7.167400968e-05f, -7.170786068e-05f, -7.174158454e-05f, -7.177518122e-05f, -7.180865067e-05f, -7.184199284e-05f,
+-7.187520769e-05f, -7.190829517e-05f, -7.194125523e-05f, -7.197408784e-05f, -7.200679295e-05f, -7.203937050e-05f, -7.207182046e-05f, -7.210414278e-05f, -7.213633742e-05f, -7.216840434e-05f,
+-7.220034348e-05f, -7.223215481e-05f, -7.226383828e-05f, -7.229539385e-05f, -7.232682148e-05f, -7.235812112e-05f, -7.238929274e-05f, -7.242033628e-05f, -7.245125171e-05f, -7.248203899e-05f,
+-7.251269807e-05f, -7.254322891e-05f, -7.257363148e-05f, -7.260390573e-05f, -7.263405161e-05f, -7.266406910e-05f, -7.269395814e-05f, -7.272371871e-05f, -7.275335076e-05f, -7.278285424e-05f,
+-7.281222913e-05f, -7.284147538e-05f, -7.287059295e-05f, -7.289958181e-05f, -7.292844191e-05f, -7.295717322e-05f, -7.298577570e-05f, -7.301424932e-05f, -7.304259403e-05f, -7.307080979e-05f,
+-7.309889658e-05f, -7.312685435e-05f, -7.315468307e-05f, -7.318238270e-05f, -7.320995320e-05f, -7.323739455e-05f, -7.326470670e-05f, -7.329188961e-05f, -7.331894326e-05f, -7.334586761e-05f,
+-7.337266261e-05f, -7.339932825e-05f, -7.342586448e-05f, -7.345227128e-05f, -7.347854859e-05f, -7.350469640e-05f, -7.353071467e-05f, -7.355660337e-05f, -7.358236246e-05f, -7.360799191e-05f,
+-7.363349169e-05f, -7.365886176e-05f, -7.368410210e-05f, -7.370921267e-05f, -7.373419344e-05f, -7.375904438e-05f, -7.378376546e-05f, -7.380835664e-05f, -7.383281790e-05f, -7.385714921e-05f,
+-7.388135053e-05f, -7.390542184e-05f, -7.392936310e-05f, -7.395317430e-05f, -7.397685538e-05f, -7.400040634e-05f, -7.402382714e-05f, -7.404711774e-05f, -7.407027813e-05f, -7.409330828e-05f,
+-7.411620814e-05f, -7.413897771e-05f, -7.416161695e-05f, -7.418412584e-05f, -7.420650434e-05f, -7.422875243e-05f, -7.425087008e-05f, -7.427285727e-05f, -7.429471397e-05f, -7.431644016e-05f,
+-7.433803581e-05f, -7.435950089e-05f, -7.438083538e-05f, -7.440203925e-05f, -7.442311249e-05f, -7.444405506e-05f, -7.446486694e-05f, -7.448554810e-05f, -7.450609853e-05f, -7.452651820e-05f,
+-7.454680708e-05f, -7.456696516e-05f, -7.458699240e-05f, -7.460688880e-05f, -7.462665431e-05f, -7.464628893e-05f, -7.466579264e-05f, -7.468516539e-05f, -7.470440719e-05f, -7.472351800e-05f,
+-7.474249781e-05f, -7.476134659e-05f, -7.478006433e-05f, -7.479865099e-05f, -7.481710657e-05f, -7.483543105e-05f, -7.485362439e-05f, -7.487168659e-05f, -7.488961763e-05f, -7.490741748e-05f,
+-7.492508612e-05f, -7.494262355e-05f, -7.496002973e-05f, -7.497730466e-05f, -7.499444831e-05f, -7.501146067e-05f, -7.502834171e-05f, -7.504509143e-05f, -7.506170980e-05f, -7.507819681e-05f,
+-7.509455244e-05f, -7.511077668e-05f, -7.512686950e-05f, -7.514283090e-05f, -7.515866086e-05f, -7.517435935e-05f, -7.518992638e-05f, -7.520536192e-05f, -7.522066596e-05f, -7.523583847e-05f,
+-7.525087946e-05f, -7.526578891e-05f, -7.528056679e-05f, -7.529521310e-05f, -7.530972783e-05f, -7.532411096e-05f, -7.533836248e-05f, -7.535248237e-05f, -7.536647063e-05f, -7.538032724e-05f,
+-7.539405219e-05f, -7.540764546e-05f, -7.542110706e-05f, -7.543443695e-05f, -7.544763515e-05f, -7.546070162e-05f, -7.547363637e-05f, -7.548643938e-05f, -7.549911065e-05f, -7.551165016e-05f,
+-7.552405790e-05f, -7.553633386e-05f, -7.554847804e-05f, -7.556049042e-05f, -7.557237100e-05f, -7.558411977e-05f, -7.559573672e-05f, -7.560722184e-05f, -7.561857513e-05f, -7.562979657e-05f,
+-7.564088616e-05f, -7.565184390e-05f, -7.566266977e-05f, -7.567336377e-05f, -7.568392589e-05f, -7.569435613e-05f, -7.570465447e-05f, -7.571482093e-05f, -7.572485548e-05f, -7.573475812e-05f,
+-7.574452886e-05f, -7.575416767e-05f, -7.576367457e-05f, -7.577304954e-05f, -7.578229258e-05f, -7.579140369e-05f, -7.580038287e-05f, -7.580923010e-05f, -7.581794539e-05f, -7.582652873e-05f,
+-7.583498012e-05f, -7.584329956e-05f, -7.585148705e-05f, -7.585954258e-05f, -7.586746616e-05f, -7.587525777e-05f, -7.588291742e-05f, -7.589044511e-05f, -7.589784084e-05f, -7.590510461e-05f,
+-7.591223641e-05f, -7.591923624e-05f, -7.592610411e-05f, -7.593284002e-05f, -7.593944396e-05f, -7.594591594e-05f, -7.595225596e-05f, -7.595846402e-05f, -7.596454011e-05f, -7.597048425e-05f,
+-7.597629643e-05f, -7.598197666e-05f, -7.598752494e-05f, -7.599294126e-05f, -7.599822564e-05f, -7.600337808e-05f, -7.600839857e-05f, -7.601328713e-05f, -7.601804375e-05f, -7.602266845e-05f,
+-7.602716121e-05f, -7.603152206e-05f, -7.603575099e-05f, -7.603984801e-05f, -7.604381312e-05f, -7.604764633e-05f, -7.605134764e-05f, -7.605491706e-05f, -7.605835460e-05f, -7.606166026e-05f,
+-7.606483404e-05f, -7.606787596e-05f, -7.607078602e-05f, -7.607356423e-05f, -7.607621060e-05f, -7.607872513e-05f, -7.608110782e-05f, -7.608335870e-05f, -7.608547777e-05f, -7.608746503e-05f,
+-7.608932049e-05f, -7.609104417e-05f, -7.609263606e-05f, -7.609409619e-05f, -7.609542456e-05f, -7.609662119e-05f, -7.609768607e-05f, -7.609861922e-05f, -7.609942065e-05f, -7.610009038e-05f,
+-7.610062841e-05f, -7.610103475e-05f, -7.610130942e-05f, -7.610145242e-05f, -7.610146378e-05f, -7.610134349e-05f, -7.610109158e-05f, -7.610070805e-05f, -7.610019293e-05f, -7.609954621e-05f,
+-7.609876792e-05f, -7.609785806e-05f, -7.609681666e-05f, -7.609564373e-05f, -7.609433927e-05f, -7.609290330e-05f, -7.609133585e-05f, -7.608963692e-05f, -7.608780652e-05f, -7.608584468e-05f,
+-7.608375141e-05f, -7.608152673e-05f, -7.607917064e-05f, -7.607668317e-05f, -7.607406433e-05f, -7.607131415e-05f, -7.606843263e-05f, -7.606541979e-05f, -7.606227565e-05f, -7.605900023e-05f,
+-7.605559355e-05f, -7.605205562e-05f, -7.604838646e-05f, -7.604458610e-05f, -7.604065454e-05f, -7.603659181e-05f, -7.603239792e-05f, -7.602807290e-05f, -7.602361677e-05f, -7.601902955e-05f,
+-7.601431124e-05f, -7.600946189e-05f, -7.600448150e-05f, -7.599937009e-05f, -7.599412770e-05f, -7.598875433e-05f, -7.598325001e-05f, -7.597761476e-05f, -7.597184861e-05f, -7.596595157e-05f,
+-7.595992367e-05f, -7.595376493e-05f, -7.594747537e-05f, -7.594105501e-05f, -7.593450389e-05f, -7.592782201e-05f, -7.592100941e-05f, -7.591406611e-05f, -7.590699213e-05f, -7.589978750e-05f,
+-7.589245225e-05f, -7.588498638e-05f, -7.587738994e-05f, -7.586966295e-05f, -7.586180543e-05f, -7.585381740e-05f, -7.584569890e-05f, -7.583744995e-05f, -7.582907057e-05f, -7.582056079e-05f,
+-7.581192064e-05f, -7.580315015e-05f, -7.579424934e-05f, -7.578521824e-05f, -7.577605688e-05f, -7.576676528e-05f, -7.575734348e-05f, -7.574779150e-05f, -7.573810936e-05f, -7.572829711e-05f,
+-7.571835477e-05f, -7.570828236e-05f, -7.569807991e-05f, -7.568774747e-05f, -7.567728505e-05f, -7.566669268e-05f, -7.565597040e-05f, -7.564511824e-05f, -7.563413622e-05f, -7.562302438e-05f,
+-7.561178275e-05f, -7.560041136e-05f, -7.558891024e-05f, -7.557727943e-05f, -7.556551895e-05f, -7.555362884e-05f, -7.554160913e-05f, -7.552945985e-05f, -7.551718104e-05f, -7.550477273e-05f,
+-7.549223495e-05f, -7.547956774e-05f, -7.546677113e-05f, -7.545384515e-05f, -7.544078984e-05f, -7.542760523e-05f, -7.541429136e-05f, -7.540084827e-05f, -7.538727598e-05f, -7.537357453e-05f,
+-7.535974396e-05f, -7.534578430e-05f, -7.533169560e-05f, -7.531747788e-05f, -7.530313118e-05f, -7.528865555e-05f, -7.527405101e-05f, -7.525931760e-05f, -7.524445536e-05f, -7.522946434e-05f,
+-7.521434455e-05f, -7.519909605e-05f, -7.518371888e-05f, -7.516821306e-05f, -7.515257865e-05f, -7.513681567e-05f, -7.512092417e-05f, -7.510490418e-05f, -7.508875575e-05f, -7.507247892e-05f,
+-7.505607372e-05f, -7.503954020e-05f, -7.502287840e-05f, -7.500608835e-05f, -7.498917010e-05f, -7.497212369e-05f, -7.495494915e-05f, -7.493764654e-05f, -7.492021589e-05f, -7.490265725e-05f,
+-7.488497066e-05f, -7.486715615e-05f, -7.484921377e-05f, -7.483114358e-05f, -7.481294559e-05f, -7.479461987e-05f, -7.477616646e-05f, -7.475758539e-05f, -7.473887671e-05f, -7.472004047e-05f,
+-7.470107671e-05f, -7.468198548e-05f, -7.466276682e-05f, -7.464342077e-05f, -7.462394737e-05f, -7.460434669e-05f, -7.458461875e-05f, -7.456476362e-05f, -7.454478132e-05f, -7.452467191e-05f,
+-7.450443544e-05f, -7.448407195e-05f, -7.446358149e-05f, -7.444296411e-05f, -7.442221985e-05f, -7.440134876e-05f, -7.438035089e-05f, -7.435922628e-05f, -7.433797499e-05f, -7.431659707e-05f,
+-7.429509255e-05f, -7.427346150e-05f, -7.425170395e-05f, -7.422981997e-05f, -7.420780959e-05f, -7.418567287e-05f, -7.416340986e-05f, -7.414102061e-05f, -7.411850516e-05f, -7.409586358e-05f,
+-7.407309590e-05f, -7.405020218e-05f, -7.402718248e-05f, -7.400403684e-05f, -7.398076532e-05f, -7.395736796e-05f, -7.393384482e-05f, -7.391019595e-05f, -7.388642141e-05f, -7.386252124e-05f,
+-7.383849550e-05f, -7.381434424e-05f, -7.379006752e-05f, -7.376566539e-05f, -7.374113790e-05f, -7.371648511e-05f, -7.369170706e-05f, -7.366680383e-05f, -7.364177545e-05f, -7.361662199e-05f,
+-7.359134350e-05f, -7.356594003e-05f, -7.354041164e-05f, -7.351475839e-05f, -7.348898033e-05f, -7.346307752e-05f, -7.343705001e-05f, -7.341089786e-05f, -7.338462114e-05f, -7.335821988e-05f,
+-7.333169416e-05f, -7.330504402e-05f, -7.327826953e-05f, -7.325137075e-05f, -7.322434773e-05f, -7.319720052e-05f, -7.316992920e-05f, -7.314253381e-05f, -7.311501442e-05f, -7.308737108e-05f,
+-7.305960386e-05f, -7.303171281e-05f, -7.300369800e-05f, -7.297555947e-05f, -7.294729731e-05f, -7.291891155e-05f, -7.289040227e-05f, -7.286176952e-05f, -7.283301337e-05f, -7.280413387e-05f,
+-7.277513109e-05f, -7.274600509e-05f, -7.271675594e-05f, -7.268738368e-05f, -7.265788839e-05f, -7.262827013e-05f, -7.259852896e-05f, -7.256866494e-05f, -7.253867813e-05f, -7.250856861e-05f,
+-7.247833642e-05f, -7.244798164e-05f, -7.241750434e-05f, -7.238690456e-05f, -7.235618238e-05f, -7.232533787e-05f, -7.229437108e-05f, -7.226328208e-05f, -7.223207094e-05f, -7.220073773e-05f,
+-7.216928250e-05f, -7.213770532e-05f, -7.210600626e-05f, -7.207418538e-05f, -7.204224276e-05f, -7.201017845e-05f, -7.197799253e-05f, -7.194568506e-05f, -7.191325611e-05f, -7.188070574e-05f,
+-7.184803402e-05f, -7.181524103e-05f, -7.178232682e-05f, -7.174929147e-05f, -7.171613505e-05f, -7.168285762e-05f, -7.164945925e-05f, -7.161594001e-05f, -7.158229997e-05f, -7.154853920e-05f,
+-7.151465777e-05f, -7.148065575e-05f, -7.144653320e-05f, -7.141229021e-05f, -7.137792683e-05f, -7.134344314e-05f, -7.130883921e-05f, -7.127411512e-05f, -7.123927092e-05f, -7.120430670e-05f,
+-7.116922253e-05f, -7.113401847e-05f, -7.109869460e-05f, -7.106325099e-05f, -7.102768771e-05f, -7.099200484e-05f, -7.095620245e-05f, -7.092028061e-05f, -7.088423939e-05f, -7.084807887e-05f,
+-7.081179912e-05f, -7.077540022e-05f, -7.073888224e-05f, -7.070224525e-05f, -7.066548932e-05f, -7.062861454e-05f, -7.059162098e-05f, -7.055450871e-05f, -7.051727780e-05f, -7.047992834e-05f,
+-7.044246039e-05f, -7.040487404e-05f, -7.036716935e-05f, -7.032934641e-05f, -7.029140530e-05f, -7.025334608e-05f, -7.021516883e-05f, -7.017687364e-05f, -7.013846058e-05f, -7.009992972e-05f,
+-7.006128115e-05f, -7.002251494e-05f, -6.998363116e-05f, -6.994462991e-05f, -6.990551125e-05f, -6.986627526e-05f, -6.982692203e-05f, -6.978745163e-05f, -6.974786414e-05f, -6.970815964e-05f,
+-6.966833821e-05f, -6.962839993e-05f, -6.958834487e-05f, -6.954817313e-05f, -6.950788477e-05f, -6.946747989e-05f, -6.942695855e-05f, -6.938632085e-05f, -6.934556686e-05f, -6.930469666e-05f,
+-6.926371034e-05f, -6.922260797e-05f, -6.918138964e-05f, -6.914005543e-05f, -6.909860543e-05f, -6.905703970e-05f, -6.901535835e-05f, -6.897356144e-05f, -6.893164907e-05f, -6.888962132e-05f,
+-6.884747826e-05f, -6.880521999e-05f, -6.876284658e-05f, -6.872035812e-05f, -6.867775470e-05f, -6.863503640e-05f, -6.859220330e-05f, -6.854925548e-05f, -6.850619305e-05f, -6.846301606e-05f,
+-6.841972463e-05f, -6.837631882e-05f, -6.833279872e-05f, -6.828916443e-05f, -6.824541602e-05f, -6.820155358e-05f, -6.815757720e-05f, -6.811348697e-05f, -6.806928297e-05f, -6.802496529e-05f,
+-6.798053401e-05f, -6.793598923e-05f, -6.789133103e-05f, -6.784655949e-05f, -6.780167472e-05f, -6.775667678e-05f, -6.771156579e-05f, -6.766634181e-05f, -6.762100494e-05f, -6.757555527e-05f,
+-6.752999289e-05f, -6.748431788e-05f, -6.743853034e-05f, -6.739263036e-05f, -6.734661802e-05f, -6.730049342e-05f, -6.725425665e-05f, -6.720790779e-05f, -6.716144694e-05f, -6.711487418e-05f,
+-6.706818961e-05f, -6.702139332e-05f, -6.697448541e-05f, -6.692746595e-05f, -6.688033505e-05f, -6.683309279e-05f, -6.678573927e-05f, -6.673827458e-05f, -6.669069881e-05f, -6.664301206e-05f,
+-6.659521441e-05f, -6.654730596e-05f, -6.649928681e-05f, -6.645115704e-05f, -6.640291675e-05f, -6.635456604e-05f, -6.630610499e-05f, -6.625753370e-05f, -6.620885227e-05f, -6.616006079e-05f,
+-6.611115936e-05f, -6.606214806e-05f, -6.601302700e-05f, -6.596379626e-05f, -6.591445595e-05f, -6.586500616e-05f, -6.581544699e-05f, -6.576577852e-05f, -6.571600087e-05f, -6.566611411e-05f,
+-6.561611836e-05f, -6.556601370e-05f, -6.551580024e-05f, -6.546547807e-05f, -6.541504728e-05f, -6.536450798e-05f, -6.531386025e-05f, -6.526310421e-05f, -6.521223995e-05f, -6.516126756e-05f,
+-6.511018714e-05f, -6.505899880e-05f, -6.500770262e-05f, -6.495629872e-05f, -6.490478718e-05f, -6.485316811e-05f, -6.480144160e-05f, -6.474960776e-05f, -6.469766668e-05f, -6.464561847e-05f,
+-6.459346322e-05f, -6.454120104e-05f, -6.448883202e-05f, -6.443635627e-05f, -6.438377388e-05f, -6.433108496e-05f, -6.427828961e-05f, -6.422538792e-05f, -6.417238001e-05f, -6.411926597e-05f,
+-6.406604590e-05f, -6.401271990e-05f, -6.395928809e-05f, -6.390575055e-05f, -6.385210739e-05f, -6.379835872e-05f, -6.374450463e-05f, -6.369054524e-05f, -6.363648064e-05f, -6.358231093e-05f,
+-6.352803622e-05f, -6.347365662e-05f, -6.341917222e-05f, -6.336458313e-05f, -6.330988946e-05f, -6.325509131e-05f, -6.320018878e-05f, -6.314518198e-05f, -6.309007101e-05f, -6.303485598e-05f,
+-6.297953699e-05f, -6.292411415e-05f, -6.286858757e-05f, -6.281295734e-05f, -6.275722358e-05f, -6.270138639e-05f, -6.264544588e-05f, -6.258940215e-05f, -6.253325531e-05f, -6.247700547e-05f,
+-6.242065273e-05f, -6.236419720e-05f, -6.230763899e-05f, -6.225097820e-05f, -6.219421494e-05f, -6.213734933e-05f, -6.208038146e-05f, -6.202331145e-05f, -6.196613941e-05f, -6.190886543e-05f,
+-6.185148964e-05f, -6.179401213e-05f, -6.173643303e-05f, -6.167875243e-05f, -6.162097045e-05f, -6.156308719e-05f, -6.150510277e-05f, -6.144701729e-05f, -6.138883087e-05f, -6.133054361e-05f,
+-6.127215563e-05f, -6.121366703e-05f, -6.115507792e-05f, -6.109638843e-05f, -6.103759865e-05f, -6.097870870e-05f, -6.091971868e-05f, -6.086062872e-05f, -6.080143892e-05f, -6.074214939e-05f,
+-6.068276025e-05f, -6.062327160e-05f, -6.056368357e-05f, -6.050399625e-05f, -6.044420977e-05f, -6.038432423e-05f, -6.032433976e-05f, -6.026425645e-05f, -6.020407444e-05f, -6.014379381e-05f,
+-6.008341471e-05f, -6.002293722e-05f, -5.996236148e-05f, -5.990168758e-05f, -5.984091566e-05f, -5.978004581e-05f, -5.971907817e-05f, -5.965801283e-05f, -5.959684991e-05f, -5.953558954e-05f,
+-5.947423181e-05f, -5.941277686e-05f, -5.935122479e-05f, -5.928957573e-05f, -5.922782978e-05f, -5.916598706e-05f, -5.910404768e-05f, -5.904201177e-05f, -5.897987944e-05f, -5.891765081e-05f,
+-5.885532599e-05f, -5.879290510e-05f, -5.873038825e-05f, -5.866777557e-05f, -5.860506717e-05f, -5.854226317e-05f, -5.847936368e-05f, -5.841636882e-05f, -5.835327872e-05f, -5.829009348e-05f,
+-5.822681323e-05f, -5.816343808e-05f, -5.809996816e-05f, -5.803640358e-05f, -5.797274446e-05f, -5.790899092e-05f, -5.784514308e-05f, -5.778120106e-05f, -5.771716497e-05f, -5.765303494e-05f,
+-5.758881108e-05f, -5.752449352e-05f, -5.746008238e-05f, -5.739557777e-05f, -5.733097982e-05f, -5.726628864e-05f, -5.720150436e-05f, -5.713662710e-05f, -5.707165697e-05f, -5.700659411e-05f,
+-5.694143863e-05f, -5.687619064e-05f, -5.681085028e-05f, -5.674541767e-05f, -5.667989292e-05f, -5.661427616e-05f, -5.654856751e-05f, -5.648276709e-05f, -5.641687503e-05f, -5.635089145e-05f,
+-5.628481646e-05f, -5.621865020e-05f, -5.615239278e-05f, -5.608604433e-05f, -5.601960497e-05f, -5.595307483e-05f, -5.588645402e-05f, -5.581974268e-05f, -5.575294093e-05f, -5.568604888e-05f,
+-5.561906667e-05f, -5.555199441e-05f, -5.548483224e-05f, -5.541758028e-05f, -5.535023864e-05f, -5.528280746e-05f, -5.521528687e-05f, -5.514767698e-05f, -5.507997792e-05f, -5.501218982e-05f,
+-5.494431280e-05f, -5.487634699e-05f, -5.480829251e-05f, -5.474014950e-05f, -5.467191806e-05f, -5.460359834e-05f, -5.453519046e-05f, -5.446669455e-05f, -5.439811072e-05f, -5.432943912e-05f,
+-5.426067985e-05f, -5.419183307e-05f, -5.412289888e-05f, -5.405387741e-05f, -5.398476880e-05f, -5.391557318e-05f, -5.384629066e-05f, -5.377692138e-05f, -5.370746547e-05f, -5.363792305e-05f,
+-5.356829425e-05f, -5.349857920e-05f, -5.342877803e-05f, -5.335889087e-05f, -5.328891784e-05f, -5.321885908e-05f, -5.314871472e-05f, -5.307848488e-05f, -5.300816969e-05f, -5.293776929e-05f,
+-5.286728379e-05f, -5.279671334e-05f, -5.272605807e-05f, -5.265531809e-05f, -5.258449355e-05f, -5.251358457e-05f, -5.244259128e-05f, -5.237151382e-05f, -5.230035231e-05f, -5.222910689e-05f,
+-5.215777768e-05f, -5.208636483e-05f, -5.201486845e-05f, -5.194328868e-05f, -5.187162565e-05f, -5.179987950e-05f, -5.172805035e-05f, -5.165613834e-05f, -5.158414360e-05f, -5.151206626e-05f,
+-5.143990646e-05f, -5.136766432e-05f, -5.129533998e-05f, -5.122293357e-05f, -5.115044523e-05f, -5.107787509e-05f, -5.100522327e-05f, -5.093248992e-05f, -5.085967517e-05f, -5.078677914e-05f,
+-5.071380199e-05f, -5.064074383e-05f, -5.056760480e-05f, -5.049438504e-05f, -5.042108468e-05f, -5.034770385e-05f, -5.027424269e-05f, -5.020070134e-05f, -5.012707992e-05f, -5.005337858e-05f,
+-4.997959744e-05f, -4.990573665e-05f, -4.983179633e-05f, -4.975777663e-05f, -4.968367768e-05f, -4.960949961e-05f, -4.953524256e-05f, -4.946090666e-05f, -4.938649206e-05f, -4.931199888e-05f,
+-4.923742727e-05f, -4.916277736e-05f, -4.908804928e-05f, -4.901324318e-05f, -4.893835918e-05f, -4.886339743e-05f, -4.878835807e-05f, -4.871324122e-05f, -4.863804704e-05f, -4.856277564e-05f,
+-4.848742718e-05f, -4.841200179e-05f, -4.833649960e-05f, -4.826092076e-05f, -4.818526540e-05f, -4.810953366e-05f, -4.803372568e-05f, -4.795784159e-05f, -4.788188155e-05f, -4.780584567e-05f,
+-4.772973411e-05f, -4.765354699e-05f, -4.757728447e-05f, -4.750094667e-05f, -4.742453374e-05f, -4.734804582e-05f, -4.727148305e-05f, -4.719484556e-05f, -4.711813349e-05f, -4.704134699e-05f,
+-4.696448619e-05f, -4.688755123e-05f, -4.681054226e-05f, -4.673345942e-05f, -4.665630283e-05f, -4.657907266e-05f, -4.650176902e-05f, -4.642439207e-05f, -4.634694195e-05f, -4.626941880e-05f,
+-4.619182275e-05f, -4.611415395e-05f, -4.603641254e-05f, -4.595859866e-05f, -4.588071245e-05f, -4.580275406e-05f, -4.572472362e-05f, -4.564662128e-05f, -4.556844718e-05f, -4.549020146e-05f,
+-4.541188426e-05f, -4.533349572e-05f, -4.525503600e-05f, -4.517650522e-05f, -4.509790353e-05f, -4.501923108e-05f, -4.494048800e-05f, -4.486167445e-05f, -4.478279055e-05f, -4.470383647e-05f,
+-4.462481233e-05f, -4.454571828e-05f, -4.446655447e-05f, -4.438732103e-05f, -4.430801812e-05f, -4.422864587e-05f, -4.414920443e-05f, -4.406969395e-05f, -4.399011456e-05f, -4.391046642e-05f,
+-4.383074966e-05f, -4.375096443e-05f, -4.367111087e-05f, -4.359118913e-05f, -4.351119936e-05f, -4.343114169e-05f, -4.335101627e-05f, -4.327082326e-05f, -4.319056278e-05f, -4.311023500e-05f,
+-4.302984004e-05f, -4.294937806e-05f, -4.286884921e-05f, -4.278825363e-05f, -4.270759146e-05f, -4.262686285e-05f, -4.254606795e-05f, -4.246520689e-05f, -4.238427984e-05f, -4.230328693e-05f,
+-4.222222831e-05f, -4.214110413e-05f, -4.205991453e-05f, -4.197865967e-05f, -4.189733967e-05f, -4.181595470e-05f, -4.173450490e-05f, -4.165299042e-05f, -4.157141140e-05f, -4.148976799e-05f,
+-4.140806034e-05f, -4.132628860e-05f, -4.124445291e-05f, -4.116255341e-05f, -4.108059027e-05f, -4.099856362e-05f, -4.091647362e-05f, -4.083432040e-05f, -4.075210413e-05f, -4.066982494e-05f,
+-4.058748299e-05f, -4.050507842e-05f, -4.042261139e-05f, -4.034008203e-05f, -4.025749051e-05f, -4.017483696e-05f, -4.009212154e-05f, -4.000934440e-05f, -3.992650567e-05f, -3.984360553e-05f,
+-3.976064410e-05f, -3.967762155e-05f, -3.959453802e-05f, -3.951139365e-05f, -3.942818861e-05f, -3.934492304e-05f, -3.926159708e-05f, -3.917821090e-05f, -3.909476463e-05f, -3.901125844e-05f,
+-3.892769246e-05f, -3.884406685e-05f, -3.876038176e-05f, -3.867663733e-05f, -3.859283373e-05f, -3.850897110e-05f, -3.842504959e-05f, -3.834106935e-05f, -3.825703053e-05f, -3.817293329e-05f,
+-3.808877776e-05f, -3.800456412e-05f, -3.792029250e-05f, -3.783596306e-05f, -3.775157594e-05f, -3.766713130e-05f, -3.758262930e-05f, -3.749807008e-05f, -3.741345379e-05f, -3.732878059e-05f,
+-3.724405063e-05f, -3.715926405e-05f, -3.707442102e-05f, -3.698952168e-05f, -3.690456619e-05f, -3.681955469e-05f, -3.673448734e-05f, -3.664936430e-05f, -3.656418571e-05f, -3.647895173e-05f,
+-3.639366251e-05f, -3.630831820e-05f, -3.622291896e-05f, -3.613746493e-05f, -3.605195628e-05f, -3.596639315e-05f, -3.588077570e-05f, -3.579510407e-05f, -3.570937844e-05f, -3.562359893e-05f,
+-3.553776572e-05f, -3.545187896e-05f, -3.536593879e-05f, -3.527994537e-05f, -3.519389885e-05f, -3.510779940e-05f, -3.502164715e-05f, -3.493544228e-05f, -3.484918492e-05f, -3.476287524e-05f,
+-3.467651338e-05f, -3.459009951e-05f, -3.450363378e-05f, -3.441711634e-05f, -3.433054734e-05f, -3.424392695e-05f, -3.415725531e-05f, -3.407053258e-05f, -3.398375892e-05f, -3.389693447e-05f,
+-3.381005940e-05f, -3.372313386e-05f, -3.363615801e-05f, -3.354913199e-05f, -3.346205597e-05f, -3.337493010e-05f, -3.328775453e-05f, -3.320052943e-05f, -3.311325494e-05f, -3.302593123e-05f,
+-3.293855844e-05f, -3.285113674e-05f, -3.276366627e-05f, -3.267614720e-05f, -3.258857969e-05f, -3.250096387e-05f, -3.241329993e-05f, -3.232558800e-05f, -3.223782825e-05f, -3.215002083e-05f,
+-3.206216589e-05f, -3.197426360e-05f, -3.188631412e-05f, -3.179831759e-05f, -3.171027417e-05f, -3.162218403e-05f, -3.153404731e-05f, -3.144586418e-05f, -3.135763479e-05f, -3.126935930e-05f,
+-3.118103786e-05f, -3.109267063e-05f, -3.100425778e-05f, -3.091579945e-05f, -3.082729580e-05f, -3.073874700e-05f, -3.065015319e-05f, -3.056151455e-05f, -3.047283121e-05f, -3.038410335e-05f,
+-3.029533111e-05f, -3.020651466e-05f, -3.011765416e-05f, -3.002874976e-05f, -2.993980161e-05f, -2.985080989e-05f, -2.976177474e-05f, -2.967269633e-05f, -2.958357481e-05f, -2.949441033e-05f,
+-2.940520307e-05f, -2.931595318e-05f, -2.922666081e-05f, -2.913732612e-05f, -2.904794927e-05f, -2.895853043e-05f, -2.886906975e-05f, -2.877956738e-05f, -2.869002349e-05f, -2.860043824e-05f,
+-2.851081178e-05f, -2.842114428e-05f, -2.833143588e-05f, -2.824168676e-05f, -2.815189707e-05f, -2.806206697e-05f, -2.797219661e-05f, -2.788228617e-05f, -2.779233579e-05f, -2.770234564e-05f,
+-2.761231587e-05f, -2.752224665e-05f, -2.743213814e-05f, -2.734199049e-05f, -2.725180386e-05f, -2.716157842e-05f, -2.707131432e-05f, -2.698101172e-05f, -2.689067079e-05f, -2.680029167e-05f,
+-2.670987455e-05f, -2.661941956e-05f, -2.652892688e-05f, -2.643839666e-05f, -2.634782906e-05f, -2.625722425e-05f, -2.616658238e-05f, -2.607590361e-05f, -2.598518810e-05f, -2.589443603e-05f,
+-2.580364753e-05f, -2.571282278e-05f, -2.562196194e-05f, -2.553106516e-05f, -2.544013261e-05f, -2.534916445e-05f, -2.525816083e-05f, -2.516712193e-05f, -2.507604789e-05f, -2.498493888e-05f,
+-2.489379507e-05f, -2.480261661e-05f, -2.471140366e-05f, -2.462015639e-05f, -2.452887495e-05f, -2.443755950e-05f, -2.434621022e-05f, -2.425482725e-05f, -2.416341077e-05f, -2.407196092e-05f,
+-2.398047788e-05f, -2.388896181e-05f, -2.379741285e-05f, -2.370583119e-05f, -2.361421697e-05f, -2.352257037e-05f, -2.343089153e-05f, -2.333918063e-05f, -2.324743782e-05f, -2.315566327e-05f,
+-2.306385714e-05f, -2.297201959e-05f, -2.288015078e-05f, -2.278825087e-05f, -2.269632003e-05f, -2.260435842e-05f, -2.251236620e-05f, -2.242034353e-05f, -2.232829057e-05f, -2.223620749e-05f,
+-2.214409444e-05f, -2.205195160e-05f, -2.195977911e-05f, -2.186757716e-05f, -2.177534588e-05f, -2.168308546e-05f, -2.159079605e-05f, -2.149847781e-05f, -2.140613091e-05f, -2.131375551e-05f,
+-2.122135177e-05f, -2.112891985e-05f, -2.103645992e-05f, -2.094397214e-05f, -2.085145666e-05f, -2.075891367e-05f, -2.066634330e-05f, -2.057374574e-05f, -2.048112114e-05f, -2.038846967e-05f,
+-2.029579148e-05f, -2.020308674e-05f, -2.011035562e-05f, -2.001759827e-05f, -1.992481487e-05f, -1.983200556e-05f, -1.973917052e-05f, -1.964630991e-05f, -1.955342389e-05f, -1.946051262e-05f,
+-1.936757627e-05f, -1.927461500e-05f, -1.918162898e-05f, -1.908861836e-05f, -1.899558331e-05f, -1.890252400e-05f, -1.880944058e-05f, -1.871633322e-05f, -1.862320209e-05f, -1.853004734e-05f,
+-1.843686914e-05f, -1.834366766e-05f, -1.825044305e-05f, -1.815719548e-05f, -1.806392512e-05f, -1.797063212e-05f, -1.787731666e-05f, -1.778397889e-05f, -1.769061897e-05f, -1.759723708e-05f,
+-1.750383338e-05f, -1.741040802e-05f, -1.731696117e-05f, -1.722349300e-05f, -1.713000368e-05f, -1.703649335e-05f, -1.694296219e-05f, -1.684941036e-05f, -1.675583803e-05f, -1.666224536e-05f,
+-1.656863251e-05f, -1.647499964e-05f, -1.638134693e-05f, -1.628767453e-05f, -1.619398261e-05f, -1.610027133e-05f, -1.600654085e-05f, -1.591279135e-05f, -1.581902298e-05f, -1.572523591e-05f,
+-1.563143030e-05f, -1.553760631e-05f, -1.544376412e-05f, -1.534990388e-05f, -1.525602576e-05f, -1.516212992e-05f, -1.506821653e-05f, -1.497428574e-05f, -1.488033774e-05f, -1.478637267e-05f,
+-1.469239070e-05f, -1.459839200e-05f, -1.450437674e-05f, -1.441034506e-05f, -1.431629715e-05f, -1.422223316e-05f, -1.412815326e-05f, -1.403405762e-05f, -1.393994639e-05f, -1.384581974e-05f,
+-1.375167784e-05f, -1.365752084e-05f, -1.356334892e-05f, -1.346916224e-05f, -1.337496097e-05f, -1.328074526e-05f, -1.318651528e-05f, -1.309227119e-05f, -1.299801317e-05f, -1.290374137e-05f,
+-1.280945596e-05f, -1.271515711e-05f, -1.262084497e-05f, -1.252651972e-05f, -1.243218151e-05f, -1.233783051e-05f, -1.224346689e-05f, -1.214909081e-05f, -1.205470243e-05f, -1.196030193e-05f,
+-1.186588945e-05f, -1.177146518e-05f, -1.167702926e-05f, -1.158258188e-05f, -1.148812318e-05f, -1.139365334e-05f, -1.129917253e-05f, -1.120468089e-05f, -1.111017861e-05f, -1.101566584e-05f,
+-1.092114275e-05f, -1.082660950e-05f, -1.073206626e-05f, -1.063751319e-05f, -1.054295046e-05f, -1.044837823e-05f, -1.035379667e-05f, -1.025920593e-05f, -1.016460620e-05f, -1.006999762e-05f,
+-9.975380359e-06f, -9.880754591e-06f, -9.786120476e-06f, -9.691478179e-06f, -9.596827863e-06f, -9.502169694e-06f, -9.407503836e-06f, -9.312830454e-06f, -9.218149712e-06f, -9.123461774e-06f,
+-9.028766805e-06f, -8.934064970e-06f, -8.839356433e-06f, -8.744641359e-06f, -8.649919911e-06f, -8.555192256e-06f, -8.460458556e-06f, -8.365718977e-06f, -8.270973684e-06f, -8.176222840e-06f,
+-8.081466609e-06f, -7.986705158e-06f, -7.891938649e-06f, -7.797167248e-06f, -7.702391118e-06f, -7.607610425e-06f, -7.512825333e-06f, -7.418036006e-06f, -7.323242608e-06f, -7.228445305e-06f,
+-7.133644260e-06f, -7.038839637e-06f, -6.944031602e-06f, -6.849220318e-06f, -6.754405951e-06f, -6.659588663e-06f, -6.564768621e-06f, -6.469945987e-06f, -6.375120926e-06f, -6.280293603e-06f,
+-6.185464182e-06f, -6.090632827e-06f, -5.995799703e-06f, -5.900964973e-06f, -5.806128802e-06f, -5.711291355e-06f, -5.616452795e-06f, -5.521613287e-06f, -5.426772994e-06f, -5.331932082e-06f,
+-5.237090713e-06f, -5.142249054e-06f, -5.047407266e-06f, -4.952565516e-06f, -4.857723966e-06f, -4.762882781e-06f, -4.668042125e-06f, -4.573202162e-06f, -4.478363056e-06f, -4.383524971e-06f,
+-4.288688071e-06f, -4.193852521e-06f, -4.099018483e-06f, -4.004186123e-06f, -3.909355604e-06f, -3.814527089e-06f, -3.719700744e-06f, -3.624876731e-06f, -3.530055215e-06f, -3.435236359e-06f,
+-3.340420328e-06f, -3.245607284e-06f, -3.150797393e-06f, -3.055990817e-06f, -2.961187721e-06f, -2.866388268e-06f, -2.771592622e-06f, -2.676800946e-06f, -2.582013404e-06f, -2.487230161e-06f,
+-2.392451379e-06f, -2.297677221e-06f, -2.202907853e-06f, -2.108143437e-06f, -2.013384136e-06f, -1.918630115e-06f, -1.823881536e-06f, -1.729138564e-06f, -1.634401361e-06f, -1.539670091e-06f,
+-1.444944918e-06f, -1.350226004e-06f, -1.255513513e-06f, -1.160807609e-06f, -1.066108454e-06f, -9.714162120e-07f, -8.767310461e-07f, -7.820531196e-07f, -6.873825955e-07f, -5.927196369e-07f,
+-4.980644071e-07f, -4.034170690e-07f, -3.087777858e-07f, -2.141467204e-07f, -1.195240358e-07f, -2.490989501e-08f, 6.969553902e-08f, 1.642921034e-07f, 2.588796353e-07f, 3.534579718e-07f,
+4.480269502e-07f, 5.425864076e-07f, 6.371361813e-07f, 7.316761086e-07f, 8.262060268e-07f, 9.207257733e-07f, 1.015235185e-06f, 1.109734100e-06f, 1.204222356e-06f, 1.298699790e-06f,
+1.393166239e-06f, 1.487621541e-06f, 1.582065534e-06f, 1.676498054e-06f, 1.770918941e-06f, 1.865328032e-06f, 1.959725163e-06f, 2.054110174e-06f, 2.148482901e-06f, 2.242843184e-06f,
+2.337190858e-06f, 2.431525763e-06f, 2.525847737e-06f, 2.620156617e-06f, 2.714452241e-06f, 2.808734448e-06f, 2.903003075e-06f, 2.997257961e-06f, 3.091498943e-06f, 3.185725861e-06f,
+3.279938552e-06f, 3.374136854e-06f, 3.468320606e-06f, 3.562489647e-06f, 3.656643814e-06f, 3.750782946e-06f, 3.844906882e-06f, 3.939015460e-06f, 4.033108519e-06f, 4.127185897e-06f,
+4.221247433e-06f, 4.315292965e-06f, 4.409322333e-06f, 4.503335375e-06f, 4.597331931e-06f, 4.691311838e-06f, 4.785274935e-06f, 4.879221063e-06f, 4.973150059e-06f, 5.067061763e-06f,
+5.160956014e-06f, 5.254832651e-06f, 5.348691513e-06f, 5.442532439e-06f, 5.536355270e-06f, 5.630159843e-06f, 5.723945998e-06f, 5.817713576e-06f, 5.911462414e-06f, 6.005192354e-06f,
+6.098903234e-06f, 6.192594893e-06f, 6.286267172e-06f, 6.379919911e-06f, 6.473552948e-06f, 6.567166124e-06f, 6.660759279e-06f, 6.754332253e-06f, 6.847884885e-06f, 6.941417015e-06f,
+7.034928484e-06f, 7.128419132e-06f, 7.221888798e-06f, 7.315337323e-06f, 7.408764548e-06f, 7.502170312e-06f, 7.595554455e-06f, 7.688916819e-06f, 7.782257244e-06f, 7.875575570e-06f,
+7.968871638e-06f, 8.062145289e-06f, 8.155396362e-06f, 8.248624699e-06f, 8.341830141e-06f, 8.435012528e-06f, 8.528171701e-06f, 8.621307502e-06f, 8.714419771e-06f, 8.807508349e-06f,
+8.900573078e-06f, 8.993613798e-06f, 9.086630351e-06f, 9.179622578e-06f, 9.272590321e-06f, 9.365533420e-06f, 9.458451717e-06f, 9.551345054e-06f, 9.644213273e-06f, 9.737056214e-06f,
+9.829873720e-06f, 9.922665632e-06f, 1.001543179e-05f, 1.010817204e-05f, 1.020088623e-05f, 1.029357418e-05f, 1.038623575e-05f, 1.047887078e-05f, 1.057147911e-05f, 1.066406059e-05f,
+1.075661504e-05f, 1.084914233e-05f, 1.094164228e-05f, 1.103411475e-05f, 1.112655957e-05f, 1.121897658e-05f, 1.131136564e-05f, 1.140372658e-05f, 1.149605924e-05f, 1.158836348e-05f,
+1.168063912e-05f, 1.177288602e-05f, 1.186510401e-05f, 1.195729294e-05f, 1.204945266e-05f, 1.214158300e-05f, 1.223368381e-05f, 1.232575494e-05f, 1.241779622e-05f, 1.250980750e-05f,
+1.260178863e-05f, 1.269373944e-05f, 1.278565978e-05f, 1.287754950e-05f, 1.296940844e-05f, 1.306123644e-05f, 1.315303334e-05f, 1.324479900e-05f, 1.333653324e-05f, 1.342823593e-05f,
+1.351990690e-05f, 1.361154600e-05f, 1.370315307e-05f, 1.379472795e-05f, 1.388627050e-05f, 1.397778055e-05f, 1.406925795e-05f, 1.416070254e-05f, 1.425211418e-05f, 1.434349269e-05f,
+1.443483794e-05f, 1.452614976e-05f, 1.461742800e-05f, 1.470867250e-05f, 1.479988311e-05f, 1.489105968e-05f, 1.498220205e-05f, 1.507331006e-05f, 1.516438356e-05f, 1.525542240e-05f,
+1.534642643e-05f, 1.543739548e-05f, 1.552832940e-05f, 1.561922805e-05f, 1.571009126e-05f, 1.580091888e-05f, 1.589171076e-05f, 1.598246675e-05f, 1.607318668e-05f, 1.616387041e-05f,
+1.625451779e-05f, 1.634512865e-05f, 1.643570285e-05f, 1.652624023e-05f, 1.661674065e-05f, 1.670720394e-05f, 1.679762995e-05f, 1.688801853e-05f, 1.697836954e-05f, 1.706868280e-05f,
+1.715895818e-05f, 1.724919551e-05f, 1.733939466e-05f, 1.742955545e-05f, 1.751967775e-05f, 1.760976140e-05f, 1.769980624e-05f, 1.778981213e-05f, 1.787977891e-05f, 1.796970643e-05f,
+1.805959454e-05f, 1.814944308e-05f, 1.823925191e-05f, 1.832902088e-05f, 1.841874982e-05f, 1.850843859e-05f, 1.859808705e-05f, 1.868769503e-05f, 1.877726238e-05f, 1.886678896e-05f,
+1.895627461e-05f, 1.904571918e-05f, 1.913512253e-05f, 1.922448449e-05f, 1.931380492e-05f, 1.940308368e-05f, 1.949232060e-05f, 1.958151553e-05f, 1.967066834e-05f, 1.975977886e-05f,
+1.984884695e-05f, 1.993787245e-05f, 2.002685522e-05f, 2.011579511e-05f, 2.020469196e-05f, 2.029354563e-05f, 2.038235596e-05f, 2.047112281e-05f, 2.055984603e-05f, 2.064852546e-05f,
+2.073716097e-05f, 2.082575239e-05f, 2.091429959e-05f, 2.100280240e-05f, 2.109126068e-05f, 2.117967429e-05f, 2.126804307e-05f, 2.135636688e-05f, 2.144464556e-05f, 2.153287897e-05f,
+2.162106696e-05f, 2.170920938e-05f, 2.179730609e-05f, 2.188535693e-05f, 2.197336175e-05f, 2.206132041e-05f, 2.214923277e-05f, 2.223709866e-05f, 2.232491795e-05f, 2.241269049e-05f,
+2.250041612e-05f, 2.258809471e-05f, 2.267572610e-05f, 2.276331015e-05f, 2.285084671e-05f, 2.293833564e-05f, 2.302577678e-05f, 2.311316999e-05f, 2.320051512e-05f, 2.328781203e-05f,
+2.337506056e-05f, 2.346226058e-05f, 2.354941194e-05f, 2.363651448e-05f, 2.372356807e-05f, 2.381057256e-05f, 2.389752780e-05f, 2.398443364e-05f, 2.407128995e-05f, 2.415809656e-05f,
+2.424485335e-05f, 2.433156016e-05f, 2.441821685e-05f, 2.450482327e-05f, 2.459137928e-05f, 2.467788473e-05f, 2.476433947e-05f, 2.485074337e-05f, 2.493709628e-05f, 2.502339805e-05f,
+2.510964853e-05f, 2.519584759e-05f, 2.528199508e-05f, 2.536809086e-05f, 2.545413477e-05f, 2.554012668e-05f, 2.562606645e-05f, 2.571195392e-05f, 2.579778896e-05f, 2.588357142e-05f,
+2.596930115e-05f, 2.605497802e-05f, 2.614060188e-05f, 2.622617259e-05f, 2.631169001e-05f, 2.639715398e-05f, 2.648256437e-05f, 2.656792104e-05f, 2.665322384e-05f, 2.673847263e-05f,
+2.682366727e-05f, 2.690880762e-05f, 2.699389353e-05f, 2.707892485e-05f, 2.716390146e-05f, 2.724882321e-05f, 2.733368994e-05f, 2.741850154e-05f, 2.750325784e-05f, 2.758795871e-05f,
+2.767260401e-05f, 2.775719360e-05f, 2.784172734e-05f, 2.792620508e-05f, 2.801062668e-05f, 2.809499201e-05f, 2.817930092e-05f, 2.826355327e-05f, 2.834774892e-05f, 2.843188773e-05f,
+2.851596956e-05f, 2.859999427e-05f, 2.868396173e-05f, 2.876787178e-05f, 2.885172429e-05f, 2.893551912e-05f, 2.901925613e-05f, 2.910293519e-05f, 2.918655614e-05f, 2.927011886e-05f,
+2.935362320e-05f, 2.943706902e-05f, 2.952045619e-05f, 2.960378457e-05f, 2.968705401e-05f, 2.977026438e-05f, 2.985341554e-05f, 2.993650736e-05f, 3.001953968e-05f, 3.010251239e-05f,
+3.018542533e-05f, 3.026827836e-05f, 3.035107136e-05f, 3.043380419e-05f, 3.051647670e-05f, 3.059908876e-05f, 3.068164023e-05f, 3.076413098e-05f, 3.084656086e-05f, 3.092892974e-05f,
+3.101123748e-05f, 3.109348396e-05f, 3.117566902e-05f, 3.125779253e-05f, 3.133985436e-05f, 3.142185438e-05f, 3.150379243e-05f, 3.158566840e-05f, 3.166748214e-05f, 3.174923351e-05f,
+3.183092238e-05f, 3.191254863e-05f, 3.199411210e-05f, 3.207561266e-05f, 3.215705018e-05f, 3.223842453e-05f, 3.231973557e-05f, 3.240098316e-05f, 3.248216718e-05f, 3.256328747e-05f,
+3.264434392e-05f, 3.272533639e-05f, 3.280626473e-05f, 3.288712883e-05f, 3.296792854e-05f, 3.304866372e-05f, 3.312933426e-05f, 3.320994001e-05f, 3.329048084e-05f, 3.337095661e-05f,
+3.345136720e-05f, 3.353171246e-05f, 3.361199228e-05f, 3.369220650e-05f, 3.377235501e-05f, 3.385243767e-05f, 3.393245434e-05f, 3.401240490e-05f, 3.409228921e-05f, 3.417210714e-05f,
+3.425185855e-05f, 3.433154332e-05f, 3.441116132e-05f, 3.449071240e-05f, 3.457019645e-05f, 3.464961333e-05f, 3.472896291e-05f, 3.480824505e-05f, 3.488745963e-05f, 3.496660651e-05f,
+3.504568557e-05f, 3.512469668e-05f, 3.520363970e-05f, 3.528251450e-05f, 3.536132095e-05f, 3.544005893e-05f, 3.551872830e-05f, 3.559732894e-05f, 3.567586071e-05f, 3.575432348e-05f,
+3.583271713e-05f, 3.591104153e-05f, 3.598929654e-05f, 3.606748204e-05f, 3.614559790e-05f, 3.622364399e-05f, 3.630162018e-05f, 3.637952634e-05f, 3.645736235e-05f, 3.653512808e-05f,
+3.661282339e-05f, 3.669044816e-05f, 3.676800227e-05f, 3.684548559e-05f, 3.692289798e-05f, 3.700023932e-05f, 3.707750948e-05f, 3.715470834e-05f, 3.723183577e-05f, 3.730889164e-05f,
+3.738587583e-05f, 3.746278821e-05f, 3.753962864e-05f, 3.761639702e-05f, 3.769309320e-05f, 3.776971707e-05f, 3.784626850e-05f, 3.792274736e-05f, 3.799915352e-05f, 3.807548687e-05f,
+3.815174727e-05f, 3.822793461e-05f, 3.830404875e-05f, 3.838008957e-05f, 3.845605694e-05f, 3.853195075e-05f, 3.860777087e-05f, 3.868351716e-05f, 3.875918952e-05f, 3.883478781e-05f,
+3.891031191e-05f, 3.898576169e-05f, 3.906113704e-05f, 3.913643783e-05f, 3.921166393e-05f, 3.928681523e-05f, 3.936189159e-05f, 3.943689290e-05f, 3.951181904e-05f, 3.958666987e-05f,
+3.966144529e-05f, 3.973614516e-05f, 3.981076936e-05f, 3.988531778e-05f, 3.995979029e-05f, 4.003418676e-05f, 4.010850708e-05f, 4.018275112e-05f, 4.025691877e-05f, 4.033100990e-05f,
+4.040502439e-05f, 4.047896212e-05f, 4.055282297e-05f, 4.062660681e-05f, 4.070031354e-05f, 4.077394302e-05f, 4.084749514e-05f, 4.092096978e-05f, 4.099436681e-05f, 4.106768612e-05f,
+4.114092759e-05f, 4.121409110e-05f, 4.128717652e-05f, 4.136018375e-05f, 4.143311265e-05f, 4.150596312e-05f, 4.157873503e-05f, 4.165142826e-05f, 4.172404270e-05f, 4.179657823e-05f,
+4.186903472e-05f, 4.194141207e-05f, 4.201371015e-05f, 4.208592884e-05f, 4.215806803e-05f, 4.223012760e-05f, 4.230210744e-05f, 4.237400742e-05f, 4.244582743e-05f, 4.251756735e-05f,
+4.258922707e-05f, 4.266080646e-05f, 4.273230542e-05f, 4.280372382e-05f, 4.287506156e-05f, 4.294631850e-05f, 4.301749455e-05f, 4.308858958e-05f, 4.315960347e-05f, 4.323053612e-05f,
+4.330138740e-05f, 4.337215720e-05f, 4.344284541e-05f, 4.351345191e-05f, 4.358397659e-05f, 4.365441933e-05f, 4.372478002e-05f, 4.379505855e-05f, 4.386525479e-05f, 4.393536864e-05f,
+4.400539998e-05f, 4.407534870e-05f, 4.414521469e-05f, 4.421499783e-05f, 4.428469801e-05f, 4.435431511e-05f, 4.442384903e-05f, 4.449329965e-05f, 4.456266686e-05f, 4.463195054e-05f,
+4.470115059e-05f, 4.477026689e-05f, 4.483929933e-05f, 4.490824781e-05f, 4.497711219e-05f, 4.504589239e-05f, 4.511458827e-05f, 4.518319975e-05f, 4.525172669e-05f, 4.532016900e-05f,
+4.538852655e-05f, 4.545679925e-05f, 4.552498698e-05f, 4.559308963e-05f, 4.566110709e-05f, 4.572903925e-05f, 4.579688600e-05f, 4.586464724e-05f, 4.593232284e-05f, 4.599991271e-05f,
+4.606741674e-05f, 4.613483481e-05f, 4.620216681e-05f, 4.626941265e-05f, 4.633657220e-05f, 4.640364536e-05f, 4.647063203e-05f, 4.653753210e-05f, 4.660434545e-05f, 4.667107198e-05f,
+4.673771159e-05f, 4.680426416e-05f, 4.687072959e-05f, 4.693710777e-05f, 4.700339859e-05f, 4.706960196e-05f, 4.713571775e-05f, 4.720174587e-05f, 4.726768621e-05f, 4.733353867e-05f,
+4.739930313e-05f, 4.746497950e-05f, 4.753056766e-05f, 4.759606751e-05f, 4.766147894e-05f, 4.772680186e-05f, 4.779203616e-05f, 4.785718173e-05f, 4.792223846e-05f, 4.798720626e-05f,
+4.805208501e-05f, 4.811687462e-05f, 4.818157498e-05f, 4.824618599e-05f, 4.831070754e-05f, 4.837513953e-05f, 4.843948186e-05f, 4.850373442e-05f, 4.856789712e-05f, 4.863196984e-05f,
+4.869595249e-05f, 4.875984496e-05f, 4.882364715e-05f, 4.888735897e-05f, 4.895098030e-05f, 4.901451104e-05f, 4.907795110e-05f, 4.914130038e-05f, 4.920455876e-05f, 4.926772616e-05f,
+4.933080246e-05f, 4.939378758e-05f, 4.945668140e-05f, 4.951948383e-05f, 4.958219477e-05f, 4.964481412e-05f, 4.970734177e-05f, 4.976977764e-05f, 4.983212161e-05f, 4.989437359e-05f,
+4.995653349e-05f, 5.001860119e-05f, 5.008057661e-05f, 5.014245964e-05f, 5.020425019e-05f, 5.026594815e-05f, 5.032755344e-05f, 5.038906594e-05f, 5.045048557e-05f, 5.051181222e-05f,
+5.057304580e-05f, 5.063418621e-05f, 5.069523335e-05f, 5.075618713e-05f, 5.081704745e-05f, 5.087781422e-05f, 5.093848733e-05f, 5.099906669e-05f, 5.105955220e-05f, 5.111994377e-05f,
+5.118024131e-05f, 5.124044471e-05f, 5.130055388e-05f, 5.136056873e-05f, 5.142048916e-05f, 5.148031508e-05f, 5.154004638e-05f, 5.159968299e-05f, 5.165922479e-05f, 5.171867171e-05f,
+5.177802363e-05f, 5.183728048e-05f, 5.189644216e-05f, 5.195550857e-05f, 5.201447961e-05f, 5.207335521e-05f, 5.213213525e-05f, 5.219081966e-05f, 5.224940834e-05f, 5.230790119e-05f,
+5.236629812e-05f, 5.242459904e-05f, 5.248280387e-05f, 5.254091250e-05f, 5.259892484e-05f, 5.265684081e-05f, 5.271466031e-05f, 5.277238326e-05f, 5.283000955e-05f, 5.288753911e-05f,
+5.294497183e-05f, 5.300230764e-05f, 5.305954643e-05f, 5.311668812e-05f, 5.317373262e-05f, 5.323067984e-05f, 5.328752968e-05f, 5.334428207e-05f, 5.340093691e-05f, 5.345749412e-05f,
+5.351395359e-05f, 5.357031525e-05f, 5.362657901e-05f, 5.368274477e-05f, 5.373881246e-05f, 5.379478197e-05f, 5.385065324e-05f, 5.390642615e-05f, 5.396210064e-05f, 5.401767661e-05f,
+5.407315398e-05f, 5.412853265e-05f, 5.418381254e-05f, 5.423899357e-05f, 5.429407565e-05f, 5.434905869e-05f, 5.440394261e-05f, 5.445872732e-05f, 5.451341274e-05f, 5.456799877e-05f,
+5.462248534e-05f, 5.467687236e-05f, 5.473115975e-05f, 5.478534741e-05f, 5.483943527e-05f, 5.489342324e-05f, 5.494731124e-05f, 5.500109919e-05f, 5.505478699e-05f, 5.510837457e-05f,
+5.516186184e-05f, 5.521524872e-05f, 5.526853512e-05f, 5.532172097e-05f, 5.537480618e-05f, 5.542779067e-05f, 5.548067435e-05f, 5.553345715e-05f, 5.558613898e-05f, 5.563871976e-05f,
+5.569119940e-05f, 5.574357784e-05f, 5.579585498e-05f, 5.584803074e-05f, 5.590010505e-05f, 5.595207782e-05f, 5.600394897e-05f, 5.605571843e-05f, 5.610738611e-05f, 5.615895193e-05f,
+5.621041581e-05f, 5.626177767e-05f, 5.631303744e-05f, 5.636419503e-05f, 5.641525037e-05f, 5.646620337e-05f, 5.651705396e-05f, 5.656780206e-05f, 5.661844760e-05f, 5.666899048e-05f,
+5.671943064e-05f, 5.676976799e-05f, 5.682000247e-05f, 5.687013398e-05f, 5.692016247e-05f, 5.697008784e-05f, 5.701991002e-05f, 5.706962893e-05f, 5.711924451e-05f, 5.716875666e-05f,
+5.721816532e-05f, 5.726747041e-05f, 5.731667186e-05f, 5.736576958e-05f, 5.741476351e-05f, 5.746365356e-05f, 5.751243967e-05f, 5.756112176e-05f, 5.760969975e-05f, 5.765817357e-05f,
+5.770654314e-05f, 5.775480840e-05f, 5.780296926e-05f, 5.785102566e-05f, 5.789897752e-05f, 5.794682476e-05f, 5.799456732e-05f, 5.804220512e-05f, 5.808973809e-05f, 5.813716616e-05f,
+5.818448925e-05f, 5.823170729e-05f, 5.827882020e-05f, 5.832582793e-05f, 5.837273039e-05f, 5.841952752e-05f, 5.846621924e-05f, 5.851280549e-05f, 5.855928618e-05f, 5.860566126e-05f,
+5.865193065e-05f, 5.869809428e-05f, 5.874415208e-05f, 5.879010398e-05f, 5.883594991e-05f, 5.888168980e-05f, 5.892732358e-05f, 5.897285119e-05f, 5.901827255e-05f, 5.906358760e-05f,
+5.910879626e-05f, 5.915389847e-05f, 5.919889416e-05f, 5.924378327e-05f, 5.928856571e-05f, 5.933324144e-05f, 5.937781038e-05f, 5.942227245e-05f, 5.946662761e-05f, 5.951087577e-05f,
+5.955501687e-05f, 5.959905085e-05f, 5.964297764e-05f, 5.968679717e-05f, 5.973050938e-05f, 5.977411421e-05f, 5.981761157e-05f, 5.986100142e-05f, 5.990428369e-05f, 5.994745830e-05f,
+5.999052520e-05f, 6.003348433e-05f, 6.007633561e-05f, 6.011907898e-05f, 6.016171439e-05f, 6.020424175e-05f, 6.024666103e-05f, 6.028897214e-05f, 6.033117502e-05f, 6.037326962e-05f,
+6.041525587e-05f, 6.045713370e-05f, 6.049890306e-05f, 6.054056389e-05f, 6.058211611e-05f, 6.062355967e-05f, 6.066489451e-05f, 6.070612057e-05f, 6.074723778e-05f, 6.078824608e-05f,
+6.082914542e-05f, 6.086993573e-05f, 6.091061695e-05f, 6.095118902e-05f, 6.099165188e-05f, 6.103200548e-05f, 6.107224975e-05f, 6.111238462e-05f, 6.115241006e-05f, 6.119232598e-05f,
+6.123213234e-05f, 6.127182908e-05f, 6.131141613e-05f, 6.135089345e-05f, 6.139026096e-05f, 6.142951862e-05f, 6.146866637e-05f, 6.150770414e-05f, 6.154663189e-05f, 6.158544954e-05f,
+6.162415706e-05f, 6.166275437e-05f, 6.170124143e-05f, 6.173961818e-05f, 6.177788456e-05f, 6.181604051e-05f, 6.185408598e-05f, 6.189202092e-05f, 6.192984526e-05f, 6.196755896e-05f,
+6.200516195e-05f, 6.204265419e-05f, 6.208003562e-05f, 6.211730618e-05f, 6.215446583e-05f, 6.219151450e-05f, 6.222845214e-05f, 6.226527870e-05f, 6.230199413e-05f, 6.233859837e-05f,
+6.237509136e-05f, 6.241147307e-05f, 6.244774343e-05f, 6.248390239e-05f, 6.251994990e-05f, 6.255588591e-05f, 6.259171036e-05f, 6.262742321e-05f, 6.266302440e-05f, 6.269851388e-05f,
+6.273389160e-05f, 6.276915751e-05f, 6.280431156e-05f, 6.283935370e-05f, 6.287428387e-05f, 6.290910204e-05f, 6.294380814e-05f, 6.297840213e-05f, 6.301288396e-05f, 6.304725358e-05f,
+6.308151094e-05f, 6.311565600e-05f, 6.314968869e-05f, 6.318360898e-05f, 6.321741682e-05f, 6.325111216e-05f, 6.328469495e-05f, 6.331816514e-05f, 6.335152269e-05f, 6.338476754e-05f,
+6.341789966e-05f, 6.345091899e-05f, 6.348382549e-05f, 6.351661911e-05f, 6.354929981e-05f, 6.358186754e-05f, 6.361432225e-05f, 6.364666390e-05f, 6.367889243e-05f, 6.371100782e-05f,
+6.374301001e-05f, 6.377489896e-05f, 6.380667462e-05f, 6.383833694e-05f, 6.386988589e-05f, 6.390132142e-05f, 6.393264349e-05f, 6.396385205e-05f, 6.399494705e-05f, 6.402592847e-05f,
+6.405679624e-05f, 6.408755034e-05f, 6.411819071e-05f, 6.414871732e-05f, 6.417913012e-05f, 6.420942907e-05f, 6.423961413e-05f, 6.426968525e-05f, 6.429964240e-05f, 6.432948554e-05f,
+6.435921461e-05f, 6.438882959e-05f, 6.441833044e-05f, 6.444771710e-05f, 6.447698954e-05f, 6.450614773e-05f, 6.453519161e-05f, 6.456412116e-05f, 6.459293633e-05f, 6.462163709e-05f,
+6.465022338e-05f, 6.467869518e-05f, 6.470705245e-05f, 6.473529515e-05f, 6.476342324e-05f, 6.479143667e-05f, 6.481933543e-05f, 6.484711945e-05f, 6.487478872e-05f, 6.490234319e-05f,
+6.492978282e-05f, 6.495710759e-05f, 6.498431744e-05f, 6.501141235e-05f, 6.503839228e-05f, 6.506525719e-05f, 6.509200704e-05f, 6.511864181e-05f, 6.514516146e-05f, 6.517156594e-05f,
+6.519785523e-05f, 6.522402930e-05f, 6.525008810e-05f, 6.527603160e-05f, 6.530185977e-05f, 6.532757257e-05f, 6.535316998e-05f, 6.537865195e-05f, 6.540401845e-05f, 6.542926945e-05f,
+6.545440493e-05f, 6.547942483e-05f, 6.550432914e-05f, 6.552911782e-05f, 6.555379083e-05f, 6.557834816e-05f, 6.560278975e-05f, 6.562711559e-05f, 6.565132564e-05f, 6.567541987e-05f,
+6.569939824e-05f, 6.572326074e-05f, 6.574700732e-05f, 6.577063796e-05f, 6.579415263e-05f, 6.581755130e-05f, 6.584083393e-05f, 6.586400051e-05f, 6.588705099e-05f, 6.590998535e-05f,
+6.593280356e-05f, 6.595550559e-05f, 6.597809142e-05f, 6.600056102e-05f, 6.602291435e-05f, 6.604515139e-05f, 6.606727211e-05f, 6.608927649e-05f, 6.611116450e-05f, 6.613293610e-05f,
+6.615459128e-05f, 6.617613001e-05f, 6.619755226e-05f, 6.621885800e-05f, 6.624004721e-05f, 6.626111986e-05f, 6.628207593e-05f, 6.630291539e-05f, 6.632363821e-05f, 6.634424438e-05f,
+6.636473386e-05f, 6.638510664e-05f, 6.640536268e-05f, 6.642550196e-05f, 6.644552447e-05f, 6.646543017e-05f, 6.648521904e-05f, 6.650489106e-05f, 6.652444620e-05f, 6.654388445e-05f,
+6.656320578e-05f, 6.658241016e-05f, 6.660149758e-05f, 6.662046801e-05f, 6.663932143e-05f, 6.665805782e-05f, 6.667667716e-05f, 6.669517943e-05f, 6.671356459e-05f, 6.673183265e-05f,
+6.674998356e-05f, 6.676801732e-05f, 6.678593390e-05f, 6.680373329e-05f, 6.682141545e-05f, 6.683898038e-05f, 6.685642806e-05f, 6.687375845e-05f, 6.689097155e-05f, 6.690806734e-05f,
+6.692504580e-05f, 6.694190690e-05f, 6.695865063e-05f, 6.697527698e-05f, 6.699178592e-05f, 6.700817744e-05f, 6.702445152e-05f, 6.704060814e-05f, 6.705664729e-05f, 6.707256895e-05f,
+6.708837309e-05f, 6.710405972e-05f, 6.711962880e-05f, 6.713508033e-05f, 6.715041428e-05f, 6.716563065e-05f, 6.718072941e-05f, 6.719571056e-05f, 6.721057407e-05f, 6.722531993e-05f,
+6.723994813e-05f, 6.725445866e-05f, 6.726885149e-05f, 6.728312662e-05f, 6.729728402e-05f, 6.731132370e-05f, 6.732524563e-05f, 6.733904980e-05f, 6.735273620e-05f, 6.736630481e-05f,
+6.737975563e-05f, 6.739308864e-05f, 6.740630382e-05f, 6.741940118e-05f, 6.743238069e-05f, 6.744524234e-05f, 6.745798612e-05f, 6.747061203e-05f, 6.748312004e-05f, 6.749551015e-05f,
+6.750778236e-05f, 6.751993664e-05f, 6.753197299e-05f, 6.754389140e-05f, 6.755569186e-05f, 6.756737436e-05f, 6.757893889e-05f, 6.759038544e-05f, 6.760171401e-05f, 6.761292457e-05f,
+6.762401714e-05f, 6.763499169e-05f, 6.764584822e-05f, 6.765658672e-05f, 6.766720719e-05f, 6.767770962e-05f, 6.768809399e-05f, 6.769836031e-05f, 6.770850856e-05f, 6.771853874e-05f,
+6.772845084e-05f, 6.773824486e-05f, 6.774792080e-05f, 6.775747863e-05f, 6.776691837e-05f, 6.777624000e-05f, 6.778544352e-05f, 6.779452893e-05f, 6.780349621e-05f, 6.781234537e-05f,
+6.782107640e-05f, 6.782968929e-05f, 6.783818405e-05f, 6.784656067e-05f, 6.785481914e-05f, 6.786295947e-05f, 6.787098164e-05f, 6.787888566e-05f, 6.788667152e-05f, 6.789433923e-05f,
+6.790188877e-05f, 6.790932015e-05f, 6.791663337e-05f, 6.792382842e-05f, 6.793090530e-05f, 6.793786401e-05f, 6.794470455e-05f, 6.795142692e-05f, 6.795803111e-05f, 6.796451714e-05f,
+6.797088499e-05f, 6.797713467e-05f, 6.798326618e-05f, 6.798927951e-05f, 6.799517468e-05f, 6.800095167e-05f, 6.800661050e-05f, 6.801215115e-05f, 6.801757364e-05f, 6.802287796e-05f,
+6.802806412e-05f, 6.803313212e-05f, 6.803808196e-05f, 6.804291364e-05f, 6.804762717e-05f, 6.805222255e-05f, 6.805669978e-05f, 6.806105886e-05f, 6.806529981e-05f, 6.806942261e-05f,
+6.807342728e-05f, 6.807731382e-05f, 6.808108224e-05f, 6.808473254e-05f, 6.808826471e-05f, 6.809167878e-05f, 6.809497474e-05f, 6.809815260e-05f, 6.810121237e-05f, 6.810415404e-05f,
+6.810697763e-05f, 6.810968314e-05f, 6.811227058e-05f, 6.811473996e-05f, 6.811709128e-05f, 6.811932454e-05f, 6.812143977e-05f, 6.812343695e-05f, 6.812531611e-05f, 6.812707724e-05f,
+6.812872036e-05f, 6.813024548e-05f, 6.813165260e-05f, 6.813294173e-05f, 6.813411288e-05f, 6.813516606e-05f, 6.813610127e-05f, 6.813691854e-05f, 6.813761786e-05f, 6.813819925e-05f,
+6.813866272e-05f, 6.813900827e-05f, 6.813923593e-05f, 6.813934569e-05f, 6.813933757e-05f, 6.813921158e-05f, 6.813896773e-05f, 6.813860603e-05f, 6.813812650e-05f, 6.813752914e-05f,
+6.813681397e-05f, 6.813598101e-05f, 6.813503025e-05f, 6.813396172e-05f, 6.813277543e-05f, 6.813147139e-05f, 6.813004962e-05f, 6.812851012e-05f, 6.812685291e-05f, 6.812507801e-05f,
+6.812318543e-05f, 6.812117518e-05f, 6.811904728e-05f, 6.811680175e-05f, 6.811443859e-05f, 6.811195782e-05f, 6.810935946e-05f, 6.810664353e-05f, 6.810381003e-05f, 6.810085899e-05f,
+6.809779042e-05f, 6.809460434e-05f, 6.809130076e-05f, 6.808787970e-05f, 6.808434118e-05f, 6.808068521e-05f, 6.807691182e-05f, 6.807302101e-05f, 6.806901281e-05f, 6.806488724e-05f,
+6.806064430e-05f, 6.805628403e-05f, 6.805180644e-05f, 6.804721155e-05f, 6.804249937e-05f, 6.803766993e-05f, 6.803272325e-05f, 6.802765934e-05f, 6.802247822e-05f, 6.801717992e-05f,
+6.801176445e-05f, 6.800623184e-05f, 6.800058211e-05f, 6.799481527e-05f, 6.798893134e-05f, 6.798293036e-05f, 6.797681233e-05f, 6.797057729e-05f, 6.796422525e-05f, 6.795775623e-05f,
+6.795117026e-05f, 6.794446736e-05f, 6.793764755e-05f, 6.793071085e-05f, 6.792365729e-05f, 6.791648689e-05f, 6.790919968e-05f, 6.790179567e-05f, 6.789427489e-05f, 6.788663736e-05f,
+6.787888312e-05f, 6.787101218e-05f, 6.786302456e-05f, 6.785492030e-05f, 6.784669941e-05f, 6.783836193e-05f, 6.782990787e-05f, 6.782133727e-05f, 6.781265015e-05f, 6.780384652e-05f,
+6.779492644e-05f, 6.778588990e-05f, 6.777673695e-05f, 6.776746761e-05f, 6.775808191e-05f, 6.774857987e-05f, 6.773896153e-05f, 6.772922690e-05f, 6.771937602e-05f, 6.770940891e-05f,
+6.769932561e-05f, 6.768912613e-05f, 6.767881052e-05f, 6.766837879e-05f, 6.765783098e-05f, 6.764716712e-05f, 6.763638723e-05f, 6.762549135e-05f, 6.761447950e-05f, 6.760335172e-05f,
+6.759210803e-05f, 6.758074846e-05f, 6.756927305e-05f, 6.755768182e-05f, 6.754597481e-05f, 6.753415205e-05f, 6.752221357e-05f, 6.751015940e-05f, 6.749798957e-05f, 6.748570411e-05f,
+6.747330306e-05f, 6.746078645e-05f, 6.744815431e-05f, 6.743540667e-05f, 6.742254357e-05f, 6.740956504e-05f, 6.739647111e-05f, 6.738326181e-05f, 6.736993719e-05f, 6.735649726e-05f,
+6.734294208e-05f, 6.732927166e-05f, 6.731548606e-05f, 6.730158529e-05f, 6.728756939e-05f, 6.727343841e-05f, 6.725919237e-05f, 6.724483132e-05f, 6.723035528e-05f, 6.721576429e-05f,
+6.720105839e-05f, 6.718623761e-05f, 6.717130200e-05f, 6.715625158e-05f, 6.714108640e-05f, 6.712580648e-05f, 6.711041188e-05f, 6.709490262e-05f, 6.707927874e-05f, 6.706354028e-05f,
+6.704768728e-05f, 6.703171978e-05f, 6.701563782e-05f, 6.699944142e-05f, 6.698313064e-05f, 6.696670551e-05f, 6.695016607e-05f, 6.693351236e-05f, 6.691674442e-05f, 6.689986229e-05f,
+6.688286600e-05f, 6.686575561e-05f, 6.684853114e-05f, 6.683119264e-05f, 6.681374015e-05f, 6.679617372e-05f, 6.677849337e-05f, 6.676069916e-05f, 6.674279112e-05f, 6.672476930e-05f,
+6.670663373e-05f, 6.668838447e-05f, 6.667002155e-05f, 6.665154501e-05f, 6.663295490e-05f, 6.661425125e-05f, 6.659543412e-05f, 6.657650355e-05f, 6.655745958e-05f, 6.653830225e-05f,
+6.651903160e-05f, 6.649964769e-05f, 6.648015055e-05f, 6.646054022e-05f, 6.644081677e-05f, 6.642098022e-05f, 6.640103062e-05f, 6.638096802e-05f, 6.636079246e-05f, 6.634050399e-05f,
+6.632010266e-05f, 6.629958851e-05f, 6.627896158e-05f, 6.625822192e-05f, 6.623736959e-05f, 6.621640462e-05f, 6.619532706e-05f, 6.617413696e-05f, 6.615283436e-05f, 6.613141932e-05f,
+6.610989189e-05f, 6.608825210e-05f, 6.606650000e-05f, 6.604463566e-05f, 6.602265910e-05f, 6.600057039e-05f, 6.597836957e-05f, 6.595605668e-05f, 6.593363179e-05f, 6.591109493e-05f,
+6.588844616e-05f, 6.586568553e-05f, 6.584281308e-05f, 6.581982887e-05f, 6.579673295e-05f, 6.577352537e-05f, 6.575020617e-05f, 6.572677541e-05f, 6.570323314e-05f, 6.567957941e-05f,
+6.565581427e-05f, 6.563193778e-05f, 6.560794998e-05f, 6.558385093e-05f, 6.555964068e-05f, 6.553531928e-05f, 6.551088679e-05f, 6.548634325e-05f, 6.546168872e-05f, 6.543692325e-05f,
+6.541204690e-05f, 6.538705971e-05f, 6.536196176e-05f, 6.533675307e-05f, 6.531143372e-05f, 6.528600375e-05f, 6.526046322e-05f, 6.523481219e-05f, 6.520905070e-05f, 6.518317881e-05f,
+6.515719659e-05f, 6.513110407e-05f, 6.510490133e-05f, 6.507858841e-05f, 6.505216537e-05f, 6.502563226e-05f, 6.499898915e-05f, 6.497223609e-05f, 6.494537313e-05f, 6.491840034e-05f,
+6.489131776e-05f, 6.486412546e-05f, 6.483682350e-05f, 6.480941192e-05f, 6.478189080e-05f, 6.475426018e-05f, 6.472652012e-05f, 6.469867069e-05f, 6.467071194e-05f, 6.464264392e-05f,
+6.461446671e-05f, 6.458618036e-05f, 6.455778492e-05f, 6.452928045e-05f, 6.450066702e-05f, 6.447194469e-05f, 6.444311351e-05f, 6.441417355e-05f, 6.438512486e-05f, 6.435596751e-05f,
+6.432670156e-05f, 6.429732706e-05f, 6.426784408e-05f, 6.423825268e-05f, 6.420855291e-05f, 6.417874486e-05f, 6.414882856e-05f, 6.411880409e-05f, 6.408867151e-05f, 6.405843088e-05f,
+6.402808226e-05f, 6.399762571e-05f, 6.396706131e-05f, 6.393638910e-05f, 6.390560916e-05f, 6.387472154e-05f, 6.384372632e-05f, 6.381262355e-05f, 6.378141330e-05f, 6.375009563e-05f,
+6.371867060e-05f, 6.368713829e-05f, 6.365549876e-05f, 6.362375206e-05f, 6.359189827e-05f, 6.355993745e-05f, 6.352786966e-05f, 6.349569498e-05f, 6.346341346e-05f, 6.343102517e-05f,
+6.339853019e-05f, 6.336592856e-05f, 6.333322037e-05f, 6.330040568e-05f, 6.326748455e-05f, 6.323445706e-05f, 6.320132326e-05f, 6.316808322e-05f, 6.313473702e-05f, 6.310128472e-05f,
+6.306772639e-05f, 6.303406210e-05f, 6.300029191e-05f, 6.296641590e-05f, 6.293243412e-05f, 6.289834666e-05f, 6.286415357e-05f, 6.282985493e-05f, 6.279545081e-05f, 6.276094128e-05f,
+6.272632640e-05f, 6.269160625e-05f, 6.265678090e-05f, 6.262185041e-05f, 6.258681486e-05f, 6.255167431e-05f, 6.251642884e-05f, 6.248107852e-05f, 6.244562342e-05f, 6.241006361e-05f,
+6.237439916e-05f, 6.233863014e-05f, 6.230275663e-05f, 6.226677870e-05f, 6.223069641e-05f, 6.219450985e-05f, 6.215821907e-05f, 6.212182417e-05f, 6.208532520e-05f, 6.204872224e-05f,
+6.201201537e-05f, 6.197520465e-05f, 6.193829017e-05f, 6.190127199e-05f, 6.186415019e-05f, 6.182692484e-05f, 6.178959601e-05f, 6.175216379e-05f, 6.171462824e-05f, 6.167698944e-05f,
+6.163924747e-05f, 6.160140240e-05f, 6.156345430e-05f, 6.152540325e-05f, 6.148724932e-05f, 6.144899260e-05f, 6.141063315e-05f, 6.137217105e-05f, 6.133360639e-05f, 6.129493923e-05f,
+6.125616965e-05f, 6.121729772e-05f, 6.117832354e-05f, 6.113924716e-05f, 6.110006868e-05f, 6.106078816e-05f, 6.102140569e-05f, 6.098192133e-05f, 6.094233518e-05f, 6.090264730e-05f,
+6.086285778e-05f, 6.082296670e-05f, 6.078297413e-05f, 6.074288014e-05f, 6.070268483e-05f, 6.066238827e-05f, 6.062199054e-05f, 6.058149171e-05f, 6.054089187e-05f, 6.050019110e-05f,
+6.045938947e-05f, 6.041848708e-05f, 6.037748399e-05f, 6.033638028e-05f, 6.029517605e-05f, 6.025387136e-05f, 6.021246630e-05f, 6.017096096e-05f, 6.012935540e-05f, 6.008764972e-05f,
+6.004584399e-05f, 6.000393830e-05f, 5.996193273e-05f, 5.991982736e-05f, 5.987762227e-05f, 5.983531754e-05f, 5.979291327e-05f, 5.975040952e-05f, 5.970780638e-05f, 5.966510394e-05f,
+5.962230229e-05f, 5.957940149e-05f, 5.953640164e-05f, 5.949330281e-05f, 5.945010511e-05f, 5.940680859e-05f, 5.936341336e-05f, 5.931991950e-05f, 5.927632709e-05f, 5.923263621e-05f,
+5.918884695e-05f, 5.914495940e-05f, 5.910097363e-05f, 5.905688974e-05f, 5.901270781e-05f, 5.896842793e-05f, 5.892405018e-05f, 5.887957465e-05f, 5.883500142e-05f, 5.879033059e-05f,
+5.874556222e-05f, 5.870069643e-05f, 5.865573328e-05f, 5.861067287e-05f, 5.856551528e-05f, 5.852026061e-05f, 5.847490893e-05f, 5.842946034e-05f, 5.838391493e-05f, 5.833827277e-05f,
+5.829253397e-05f, 5.824669860e-05f, 5.820076676e-05f, 5.815473854e-05f, 5.810861402e-05f, 5.806239329e-05f, 5.801607644e-05f, 5.796966356e-05f, 5.792315475e-05f, 5.787655008e-05f,
+5.782984965e-05f, 5.778305355e-05f, 5.773616187e-05f, 5.768917469e-05f, 5.764209212e-05f, 5.759491423e-05f, 5.754764113e-05f, 5.750027289e-05f, 5.745280962e-05f, 5.740525140e-05f,
+5.735759832e-05f, 5.730985048e-05f, 5.726200796e-05f, 5.721407086e-05f, 5.716603927e-05f, 5.711791329e-05f, 5.706969299e-05f, 5.702137849e-05f, 5.697296986e-05f, 5.692446720e-05f,
+5.687587061e-05f, 5.682718017e-05f, 5.677839599e-05f, 5.672951814e-05f, 5.668054673e-05f, 5.663148186e-05f, 5.658232360e-05f, 5.653307206e-05f, 5.648372734e-05f, 5.643428952e-05f,
+5.638475870e-05f, 5.633513497e-05f, 5.628541843e-05f, 5.623560918e-05f, 5.618570730e-05f, 5.613571289e-05f, 5.608562606e-05f, 5.603544688e-05f, 5.598517547e-05f, 5.593481191e-05f,
+5.588435630e-05f, 5.583380874e-05f, 5.578316932e-05f, 5.573243814e-05f, 5.568161530e-05f, 5.563070088e-05f, 5.557969499e-05f, 5.552859773e-05f, 5.547740919e-05f, 5.542612947e-05f,
+5.537475867e-05f, 5.532329688e-05f, 5.527174420e-05f, 5.522010073e-05f, 5.516836657e-05f, 5.511654181e-05f, 5.506462656e-05f, 5.501262090e-05f, 5.496052495e-05f, 5.490833880e-05f,
+5.485606254e-05f, 5.480369628e-05f, 5.475124011e-05f, 5.469869414e-05f, 5.464605846e-05f, 5.459333317e-05f, 5.454051838e-05f, 5.448761418e-05f, 5.443462067e-05f, 5.438153796e-05f,
+5.432836613e-05f, 5.427510530e-05f, 5.422175557e-05f, 5.416831703e-05f, 5.411478978e-05f, 5.406117393e-05f, 5.400746957e-05f, 5.395367682e-05f, 5.389979576e-05f, 5.384582650e-05f,
+5.379176915e-05f, 5.373762380e-05f, 5.368339056e-05f, 5.362906952e-05f, 5.357466080e-05f, 5.352016449e-05f, 5.346558069e-05f, 5.341090952e-05f, 5.335615106e-05f, 5.330130543e-05f,
+5.324637272e-05f, 5.319135305e-05f, 5.313624650e-05f, 5.308105320e-05f, 5.302577323e-05f, 5.297040671e-05f, 5.291495374e-05f, 5.285941442e-05f, 5.280378886e-05f, 5.274807716e-05f,
+5.269227942e-05f, 5.263639575e-05f, 5.258042626e-05f, 5.252437105e-05f, 5.246823022e-05f, 5.241200388e-05f, 5.235569213e-05f, 5.229929509e-05f, 5.224281285e-05f, 5.218624553e-05f,
+5.212959322e-05f, 5.207285603e-05f, 5.201603408e-05f, 5.195912746e-05f, 5.190213628e-05f, 5.184506065e-05f, 5.178790068e-05f, 5.173065647e-05f, 5.167332813e-05f, 5.161591576e-05f,
+5.155841948e-05f, 5.150083939e-05f, 5.144317560e-05f, 5.138542821e-05f, 5.132759734e-05f, 5.126968309e-05f, 5.121168557e-05f, 5.115360489e-05f, 5.109544115e-05f, 5.103719447e-05f,
+5.097886495e-05f, 5.092045270e-05f, 5.086195783e-05f, 5.080338046e-05f, 5.074472068e-05f, 5.068597861e-05f, 5.062715435e-05f, 5.056824803e-05f, 5.050925974e-05f, 5.045018959e-05f,
+5.039103770e-05f, 5.033180418e-05f, 5.027248913e-05f, 5.021309267e-05f, 5.015361491e-05f, 5.009405595e-05f, 5.003441592e-05f, 4.997469491e-05f, 4.991489304e-05f, 4.985501042e-05f,
+4.979504716e-05f, 4.973500338e-05f, 4.967487918e-05f, 4.961467468e-05f, 4.955438998e-05f, 4.949402521e-05f, 4.943358046e-05f, 4.937305586e-05f, 4.931245152e-05f, 4.925176755e-05f,
+4.919100405e-05f, 4.913016115e-05f, 4.906923896e-05f, 4.900823758e-05f, 4.894715714e-05f, 4.888599774e-05f, 4.882475950e-05f, 4.876344253e-05f, 4.870204695e-05f, 4.864057286e-05f,
+4.857902039e-05f, 4.851738965e-05f, 4.845568074e-05f, 4.839389379e-05f, 4.833202891e-05f, 4.827008621e-05f, 4.820806580e-05f, 4.814596781e-05f, 4.808379235e-05f, 4.802153953e-05f,
+4.795920946e-05f, 4.789680227e-05f, 4.783431806e-05f, 4.777175696e-05f, 4.770911907e-05f, 4.764640452e-05f, 4.758361342e-05f, 4.752074588e-05f, 4.745780202e-05f, 4.739478196e-05f,
+4.733168581e-05f, 4.726851369e-05f, 4.720526571e-05f, 4.714194200e-05f, 4.707854267e-05f, 4.701506783e-05f, 4.695151761e-05f, 4.688789211e-05f, 4.682419147e-05f, 4.676041578e-05f,
+4.669656518e-05f, 4.663263978e-05f, 4.656863969e-05f, 4.650456504e-05f, 4.644041594e-05f, 4.637619251e-05f, 4.631189487e-05f, 4.624752313e-05f, 4.618307742e-05f, 4.611855786e-05f,
+4.605396455e-05f, 4.598929763e-05f, 4.592455720e-05f, 4.585974340e-05f, 4.579485633e-05f, 4.572989611e-05f, 4.566486288e-05f, 4.559975674e-05f, 4.553457781e-05f, 4.546932622e-05f,
+4.540400208e-05f, 4.533860551e-05f, 4.527313664e-05f, 4.520759558e-05f, 4.514198246e-05f, 4.507629739e-05f, 4.501054049e-05f, 4.494471189e-05f, 4.487881171e-05f, 4.481284006e-05f,
+4.474679707e-05f, 4.468068286e-05f, 4.461449754e-05f, 4.454824125e-05f, 4.448191410e-05f, 4.441551622e-05f, 4.434904771e-05f, 4.428250872e-05f, 4.421589935e-05f, 4.414921973e-05f,
+4.408246999e-05f, 4.401565024e-05f, 4.394876060e-05f, 4.388180121e-05f, 4.381477217e-05f, 4.374767362e-05f, 4.368050568e-05f, 4.361326846e-05f, 4.354596210e-05f, 4.347858671e-05f,
+4.341114242e-05f, 4.334362934e-05f, 4.327604762e-05f, 4.320839736e-05f, 4.314067869e-05f, 4.307289174e-05f, 4.300503662e-05f, 4.293711347e-05f, 4.286912240e-05f, 4.280106354e-05f,
+4.273293702e-05f, 4.266474296e-05f, 4.259648148e-05f, 4.252815270e-05f, 4.245975676e-05f, 4.239129377e-05f, 4.232276387e-05f, 4.225416717e-05f, 4.218550380e-05f, 4.211677389e-05f,
+4.204797756e-05f, 4.197911494e-05f, 4.191018614e-05f, 4.184119131e-05f, 4.177213056e-05f, 4.170300401e-05f, 4.163381180e-05f, 4.156455406e-05f, 4.149523089e-05f, 4.142584244e-05f,
+4.135638883e-05f, 4.128687019e-05f, 4.121728663e-05f, 4.114763829e-05f, 4.107792530e-05f, 4.100814778e-05f, 4.093830585e-05f, 4.086839966e-05f, 4.079842931e-05f, 4.072839494e-05f,
+4.065829668e-05f, 4.058813465e-05f, 4.051790898e-05f, 4.044761980e-05f, 4.037726723e-05f, 4.030685141e-05f, 4.023637246e-05f, 4.016583051e-05f, 4.009522568e-05f, 4.002455812e-05f,
+3.995382793e-05f, 3.988303526e-05f, 3.981218022e-05f, 3.974126296e-05f, 3.967028359e-05f, 3.959924224e-05f, 3.952813905e-05f, 3.945697415e-05f, 3.938574766e-05f, 3.931445970e-05f,
+3.924311042e-05f, 3.917169994e-05f, 3.910022838e-05f, 3.902869589e-05f, 3.895710258e-05f, 3.888544859e-05f, 3.881373405e-05f, 3.874195908e-05f, 3.867012382e-05f, 3.859822840e-05f,
+3.852627294e-05f, 3.845425758e-05f, 3.838218244e-05f, 3.831004767e-05f, 3.823785338e-05f, 3.816559971e-05f, 3.809328679e-05f, 3.802091475e-05f, 3.794848372e-05f, 3.787599383e-05f,
+3.780344521e-05f, 3.773083799e-05f, 3.765817231e-05f, 3.758544830e-05f, 3.751266608e-05f, 3.743982579e-05f, 3.736692756e-05f, 3.729397152e-05f, 3.722095780e-05f, 3.714788654e-05f,
+3.707475787e-05f, 3.700157191e-05f, 3.692832881e-05f, 3.685502869e-05f, 3.678167168e-05f, 3.670825792e-05f, 3.663478754e-05f, 3.656126067e-05f, 3.648767744e-05f, 3.641403800e-05f,
+3.634034246e-05f, 3.626659096e-05f, 3.619278365e-05f, 3.611892063e-05f, 3.604500206e-05f, 3.597102807e-05f, 3.589699878e-05f, 3.582291434e-05f, 3.574877486e-05f, 3.567458050e-05f,
+3.560033138e-05f, 3.552602763e-05f, 3.545166939e-05f, 3.537725680e-05f, 3.530278998e-05f, 3.522826907e-05f, 3.515369420e-05f, 3.507906552e-05f, 3.500438314e-05f, 3.492964722e-05f,
+3.485485787e-05f, 3.478001524e-05f, 3.470511946e-05f, 3.463017067e-05f, 3.455516899e-05f, 3.448011457e-05f, 3.440500754e-05f, 3.432984803e-05f, 3.425463618e-05f, 3.417937213e-05f,
+3.410405600e-05f, 3.402868794e-05f, 3.395326808e-05f, 3.387779655e-05f, 3.380227350e-05f, 3.372669905e-05f, 3.365107334e-05f, 3.357539651e-05f, 3.349966869e-05f, 3.342389002e-05f,
+3.334806064e-05f, 3.327218067e-05f, 3.319625026e-05f, 3.312026955e-05f, 3.304423867e-05f, 3.296815775e-05f, 3.289202693e-05f, 3.281584635e-05f, 3.273961615e-05f, 3.266333645e-05f,
+3.258700741e-05f, 3.251062915e-05f, 3.243420181e-05f, 3.235772552e-05f, 3.228120044e-05f, 3.220462668e-05f, 3.212800440e-05f, 3.205133372e-05f, 3.197461479e-05f, 3.189784773e-05f,
+3.182103270e-05f, 3.174416982e-05f, 3.166725923e-05f, 3.159030107e-05f, 3.151329549e-05f, 3.143624261e-05f, 3.135914257e-05f, 3.128199551e-05f, 3.120480158e-05f, 3.112756090e-05f,
+3.105027362e-05f, 3.097293987e-05f, 3.089555979e-05f, 3.081813352e-05f, 3.074066120e-05f, 3.066314297e-05f, 3.058557897e-05f, 3.050796932e-05f, 3.043031418e-05f, 3.035261369e-05f,
+3.027486797e-05f, 3.019707717e-05f, 3.011924142e-05f, 3.004136088e-05f, 2.996343567e-05f, 2.988546593e-05f, 2.980745181e-05f, 2.972939344e-05f, 2.965129096e-05f, 2.957314451e-05f,
+2.949495423e-05f, 2.941672027e-05f, 2.933844275e-05f, 2.926012182e-05f, 2.918175762e-05f, 2.910335029e-05f, 2.902489996e-05f, 2.894640679e-05f, 2.886787090e-05f, 2.878929244e-05f,
+2.871067155e-05f, 2.863200836e-05f, 2.855330302e-05f, 2.847455567e-05f, 2.839576645e-05f, 2.831693550e-05f, 2.823806295e-05f, 2.815914895e-05f, 2.808019365e-05f, 2.800119717e-05f,
+2.792215966e-05f, 2.784308127e-05f, 2.776396212e-05f, 2.768480237e-05f, 2.760560215e-05f, 2.752636161e-05f, 2.744708088e-05f, 2.736776011e-05f, 2.728839944e-05f, 2.720899900e-05f,
+2.712955894e-05f, 2.705007940e-05f, 2.697056053e-05f, 2.689100246e-05f, 2.681140533e-05f, 2.673176929e-05f, 2.665209447e-05f, 2.657238102e-05f, 2.649262909e-05f, 2.641283881e-05f,
+2.633301032e-05f, 2.625314376e-05f, 2.617323928e-05f, 2.609329702e-05f, 2.601331713e-05f, 2.593329973e-05f, 2.585324498e-05f, 2.577315302e-05f, 2.569302398e-05f, 2.561285802e-05f,
+2.553265527e-05f, 2.545241588e-05f, 2.537213998e-05f, 2.529182772e-05f, 2.521147925e-05f, 2.513109470e-05f, 2.505067422e-05f, 2.497021795e-05f, 2.488972603e-05f, 2.480919860e-05f,
+2.472863582e-05f, 2.464803781e-05f, 2.456740473e-05f, 2.448673672e-05f, 2.440603391e-05f, 2.432529646e-05f, 2.424452450e-05f, 2.416371818e-05f, 2.408287764e-05f, 2.400200302e-05f,
+2.392109447e-05f, 2.384015213e-05f, 2.375917615e-05f, 2.367816666e-05f, 2.359712382e-05f, 2.351604775e-05f, 2.343493862e-05f, 2.335379655e-05f, 2.327262170e-05f, 2.319141421e-05f,
+2.311017422e-05f, 2.302890187e-05f, 2.294759731e-05f, 2.286626069e-05f, 2.278489214e-05f, 2.270349181e-05f, 2.262205984e-05f, 2.254059638e-05f, 2.245910158e-05f, 2.237757557e-05f,
+2.229601850e-05f, 2.221443051e-05f, 2.213281175e-05f, 2.205116236e-05f, 2.196948249e-05f, 2.188777228e-05f, 2.180603187e-05f, 2.172426141e-05f, 2.164246104e-05f, 2.156063092e-05f,
+2.147877117e-05f, 2.139688195e-05f, 2.131496340e-05f, 2.123301567e-05f, 2.115103889e-05f, 2.106903322e-05f, 2.098699880e-05f, 2.090493578e-05f, 2.082284429e-05f, 2.074072448e-05f,
+2.065857650e-05f, 2.057640050e-05f, 2.049419661e-05f, 2.041196499e-05f, 2.032970577e-05f, 2.024741911e-05f, 2.016510514e-05f, 2.008276401e-05f, 2.000039587e-05f, 1.991800087e-05f,
+1.983557914e-05f, 1.975313083e-05f, 1.967065609e-05f, 1.958815507e-05f, 1.950562790e-05f, 1.942307474e-05f, 1.934049572e-05f, 1.925789100e-05f, 1.917526072e-05f, 1.909260503e-05f,
+1.900992406e-05f, 1.892721797e-05f, 1.884448690e-05f, 1.876173100e-05f, 1.867895041e-05f, 1.859614528e-05f, 1.851331575e-05f, 1.843046197e-05f, 1.834758409e-05f, 1.826468224e-05f,
+1.818175658e-05f, 1.809880726e-05f, 1.801583441e-05f, 1.793283818e-05f, 1.784981873e-05f, 1.776677619e-05f, 1.768371071e-05f, 1.760062243e-05f, 1.751751151e-05f, 1.743437809e-05f,
+1.735122232e-05f, 1.726804433e-05f, 1.718484428e-05f, 1.710162232e-05f, 1.701837858e-05f, 1.693511322e-05f, 1.685182637e-05f, 1.676851820e-05f, 1.668518884e-05f, 1.660183844e-05f,
+1.651846714e-05f, 1.643507510e-05f, 1.635166246e-05f, 1.626822936e-05f, 1.618477595e-05f, 1.610130238e-05f, 1.601780879e-05f, 1.593429533e-05f, 1.585076215e-05f, 1.576720939e-05f,
+1.568363720e-05f, 1.560004572e-05f, 1.551643511e-05f, 1.543280551e-05f, 1.534915706e-05f, 1.526548991e-05f, 1.518180421e-05f, 1.509810011e-05f, 1.501437775e-05f, 1.493063727e-05f,
+1.484687883e-05f, 1.476310257e-05f, 1.467930864e-05f, 1.459549719e-05f, 1.451166835e-05f, 1.442782228e-05f, 1.434395913e-05f, 1.426007904e-05f, 1.417618215e-05f, 1.409226862e-05f,
+1.400833860e-05f, 1.392439222e-05f, 1.384042963e-05f, 1.375645099e-05f, 1.367245644e-05f, 1.358844612e-05f, 1.350442018e-05f, 1.342037878e-05f, 1.333632205e-05f, 1.325225014e-05f,
+1.316816321e-05f, 1.308406139e-05f, 1.299994483e-05f, 1.291581369e-05f, 1.283166810e-05f, 1.274750822e-05f, 1.266333419e-05f, 1.257914616e-05f, 1.249494428e-05f, 1.241072869e-05f,
+1.232649954e-05f, 1.224225697e-05f, 1.215800114e-05f, 1.207373219e-05f, 1.198945027e-05f, 1.190515552e-05f, 1.182084810e-05f, 1.173652814e-05f, 1.165219580e-05f, 1.156785123e-05f,
+1.148349457e-05f, 1.139912596e-05f, 1.131474556e-05f, 1.123035351e-05f, 1.114594996e-05f, 1.106153505e-05f, 1.097710894e-05f, 1.089267177e-05f, 1.080822369e-05f, 1.072376484e-05f,
+1.063929538e-05f, 1.055481544e-05f, 1.047032518e-05f, 1.038582474e-05f, 1.030131428e-05f, 1.021679393e-05f, 1.013226385e-05f, 1.004772418e-05f, 9.963175068e-06f, 9.878616664e-06f,
+9.794049115e-06f, 9.709472566e-06f, 9.624887167e-06f, 9.540293062e-06f, 9.455690401e-06f, 9.371079329e-06f, 9.286459995e-06f, 9.201832545e-06f, 9.117197127e-06f, 9.032553888e-06f,
+8.947902975e-06f, 8.863244535e-06f, 8.778578716e-06f, 8.693905664e-06f, 8.609225527e-06f, 8.524538453e-06f, 8.439844588e-06f, 8.355144079e-06f, 8.270437074e-06f, 8.185723720e-06f,
+8.101004165e-06f, 8.016278554e-06f, 7.931547036e-06f, 7.846809758e-06f, 7.762066867e-06f, 7.677318509e-06f, 7.592564833e-06f, 7.507805986e-06f, 7.423042114e-06f, 7.338273365e-06f,
+7.253499885e-06f, 7.168721823e-06f, 7.083939325e-06f, 6.999152538e-06f, 6.914361609e-06f, 6.829566686e-06f, 6.744767916e-06f, 6.659965446e-06f, 6.575159422e-06f, 6.490349993e-06f,
+6.405537304e-06f, 6.320721504e-06f, 6.235902739e-06f, 6.151081156e-06f, 6.066256903e-06f, 5.981430126e-06f, 5.896600972e-06f, 5.811769589e-06f, 5.726936123e-06f, 5.642100721e-06f,
+5.557263531e-06f, 5.472424700e-06f, 5.387584374e-06f, 5.302742700e-06f, 5.217899825e-06f, 5.133055897e-06f, 5.048211062e-06f, 4.963365466e-06f, 4.878519258e-06f, 4.793672584e-06f,
+4.708825590e-06f, 4.623978424e-06f, 4.539131233e-06f, 4.454284162e-06f, 4.369437360e-06f, 4.284590973e-06f, 4.199745147e-06f, 4.114900030e-06f, 4.030055768e-06f, 3.945212508e-06f,
+3.860370397e-06f, 3.775529581e-06f, 3.690690207e-06f, 3.605852422e-06f, 3.521016372e-06f, 3.436182205e-06f, 3.351350066e-06f, 3.266520103e-06f, 3.181692461e-06f, 3.096867288e-06f,
+3.012044730e-06f, 2.927224934e-06f, 2.842408046e-06f, 2.757594212e-06f, 2.672783580e-06f, 2.587976295e-06f, 2.503172505e-06f, 2.418372355e-06f, 2.333575991e-06f, 2.248783561e-06f,
+2.163995211e-06f, 2.079211087e-06f, 1.994431335e-06f, 1.909656101e-06f, 1.824885533e-06f, 1.740119775e-06f, 1.655358975e-06f, 1.570603279e-06f, 1.485852832e-06f, 1.401107782e-06f,
+1.316368273e-06f, 1.231634453e-06f, 1.146906467e-06f, 1.062184462e-06f, 9.774685829e-07f, 8.927589764e-07f, 8.080557885e-07f, 7.233591650e-07f, 6.386692520e-07f, 5.539861953e-07f,
+4.693101410e-07f, 3.846412347e-07f, 2.999796225e-07f, 2.153254501e-07f, 1.306788633e-07f, 4.604000789e-08f, -3.859097038e-08f, -1.232139258e-07f, -2.078287127e-07f, -2.924351853e-07f,
+-3.770331982e-07f, -4.616226056e-07f, -5.462032619e-07f, -6.307750217e-07f, -7.153377395e-07f, -7.998912696e-07f, -8.844354668e-07f, -9.689701854e-07f, -1.053495280e-06f, -1.138010606e-06f,
+-1.222516017e-06f, -1.307011368e-06f, -1.391496514e-06f, -1.475971310e-06f, -1.560435610e-06f, -1.644889269e-06f, -1.729332142e-06f, -1.813764084e-06f, -1.898184950e-06f, -1.982594595e-06f,
+-2.066992874e-06f, -2.151379641e-06f, -2.235754752e-06f, -2.320118062e-06f, -2.404469427e-06f, -2.488808700e-06f, -2.573135738e-06f, -2.657450395e-06f, -2.741752528e-06f, -2.826041990e-06f,
+-2.910318638e-06f, -2.994582327e-06f, -3.078832911e-06f, -3.163070248e-06f, -3.247294192e-06f, -3.331504598e-06f, -3.415701322e-06f, -3.499884221e-06f, -3.584053148e-06f, -3.668207961e-06f,
+-3.752348514e-06f, -3.836474664e-06f, -3.920586266e-06f, -4.004683176e-06f, -4.088765250e-06f, -4.172832344e-06f, -4.256884313e-06f, -4.340921015e-06f, -4.424942303e-06f, -4.508948036e-06f,
+-4.592938068e-06f, -4.676912256e-06f, -4.760870457e-06f, -4.844812525e-06f, -4.928738319e-06f, -5.012647693e-06f, -5.096540504e-06f, -5.180416609e-06f, -5.264275864e-06f, -5.348118125e-06f,
+-5.431943249e-06f, -5.515751093e-06f, -5.599541513e-06f, -5.683314366e-06f, -5.767069508e-06f, -5.850806796e-06f, -5.934526087e-06f, -6.018227238e-06f, -6.101910105e-06f, -6.185574546e-06f,
+-6.269220417e-06f, -6.352847576e-06f, -6.436455879e-06f, -6.520045184e-06f, -6.603615348e-06f, -6.687166227e-06f, -6.770697679e-06f, -6.854209562e-06f, -6.937701733e-06f, -7.021174048e-06f,
+-7.104626366e-06f, -7.188058544e-06f, -7.271470439e-06f, -7.354861909e-06f, -7.438232812e-06f, -7.521583006e-06f, -7.604912347e-06f, -7.688220694e-06f, -7.771507904e-06f, -7.854773836e-06f,
+-7.938018347e-06f, -8.021241295e-06f, -8.104442539e-06f, -8.187621936e-06f, -8.270779344e-06f, -8.353914622e-06f, -8.437027628e-06f, -8.520118220e-06f, -8.603186256e-06f, -8.686231595e-06f,
+-8.769254095e-06f, -8.852253615e-06f, -8.935230012e-06f, -9.018183147e-06f, -9.101112877e-06f, -9.184019061e-06f, -9.266901558e-06f, -9.349760227e-06f, -9.432594926e-06f, -9.515405514e-06f,
+-9.598191851e-06f, -9.680953795e-06f, -9.763691206e-06f, -9.846403942e-06f, -9.929091862e-06f, -1.001175483e-05f, -1.009439270e-05f, -1.017700533e-05f, -1.025959258e-05f, -1.034215431e-05f,
+-1.042469039e-05f, -1.050720066e-05f, -1.058968500e-05f, -1.067214326e-05f, -1.075457529e-05f, -1.083698097e-05f, -1.091936014e-05f, -1.100171267e-05f, -1.108403843e-05f, -1.116633726e-05f,
+-1.124860903e-05f, -1.133085360e-05f, -1.141307084e-05f, -1.149526059e-05f, -1.157742272e-05f, -1.165955709e-05f, -1.174166357e-05f, -1.182374200e-05f, -1.190579226e-05f, -1.198781420e-05f,
+-1.206980769e-05f, -1.215177258e-05f, -1.223370874e-05f, -1.231561602e-05f, -1.239749429e-05f, -1.247934341e-05f, -1.256116324e-05f, -1.264295364e-05f, -1.272471447e-05f, -1.280644559e-05f,
+-1.288814687e-05f, -1.296981817e-05f, -1.305145934e-05f, -1.313307025e-05f, -1.321465076e-05f, -1.329620074e-05f, -1.337772003e-05f, -1.345920852e-05f, -1.354066605e-05f, -1.362209249e-05f,
+-1.370348771e-05f, -1.378485155e-05f, -1.386618390e-05f, -1.394748460e-05f, -1.402875352e-05f, -1.410999053e-05f, -1.419119548e-05f, -1.427236824e-05f, -1.435350866e-05f, -1.443461663e-05f,
+-1.451569198e-05f, -1.459673460e-05f, -1.467774433e-05f, -1.475872106e-05f, -1.483966462e-05f, -1.492057490e-05f, -1.500145175e-05f, -1.508229504e-05f, -1.516310463e-05f, -1.524388038e-05f,
+-1.532462215e-05f, -1.540532982e-05f, -1.548600324e-05f, -1.556664228e-05f, -1.564724680e-05f, -1.572781666e-05f, -1.580835173e-05f, -1.588885187e-05f, -1.596931695e-05f, -1.604974683e-05f,
+-1.613014137e-05f, -1.621050045e-05f, -1.629082391e-05f, -1.637111163e-05f, -1.645136348e-05f, -1.653157931e-05f, -1.661175899e-05f, -1.669190238e-05f, -1.677200936e-05f, -1.685207978e-05f,
+-1.693211351e-05f, -1.701211042e-05f, -1.709207036e-05f, -1.717199321e-05f, -1.725187883e-05f, -1.733172709e-05f, -1.741153784e-05f, -1.749131097e-05f, -1.757104632e-05f, -1.765074377e-05f,
+-1.773040318e-05f, -1.781002443e-05f, -1.788960736e-05f, -1.796915186e-05f, -1.804865778e-05f, -1.812812499e-05f, -1.820755337e-05f, -1.828694276e-05f, -1.836629305e-05f, -1.844560410e-05f,
+-1.852487576e-05f, -1.860410792e-05f, -1.868330044e-05f, -1.876245318e-05f, -1.884156600e-05f, -1.892063879e-05f, -1.899967140e-05f, -1.907866370e-05f, -1.915761556e-05f, -1.923652684e-05f,
+-1.931539742e-05f, -1.939422715e-05f, -1.947301592e-05f, -1.955176358e-05f, -1.963047000e-05f, -1.970913505e-05f, -1.978775859e-05f, -1.986634051e-05f, -1.994488066e-05f, -2.002337890e-05f,
+-2.010183512e-05f, -2.018024918e-05f, -2.025862094e-05f, -2.033695028e-05f, -2.041523706e-05f, -2.049348115e-05f, -2.057168242e-05f, -2.064984074e-05f, -2.072795598e-05f, -2.080602800e-05f,
+-2.088405668e-05f, -2.096204188e-05f, -2.103998348e-05f, -2.111788134e-05f, -2.119573533e-05f, -2.127354533e-05f, -2.135131119e-05f, -2.142903280e-05f, -2.150671001e-05f, -2.158434271e-05f,
+-2.166193075e-05f, -2.173947402e-05f, -2.181697237e-05f, -2.189442569e-05f, -2.197183383e-05f, -2.204919668e-05f, -2.212651410e-05f, -2.220378595e-05f, -2.228101212e-05f, -2.235819247e-05f,
+-2.243532688e-05f, -2.251241521e-05f, -2.258945733e-05f, -2.266645312e-05f, -2.274340245e-05f, -2.282030518e-05f, -2.289716120e-05f, -2.297397037e-05f, -2.305073256e-05f, -2.312744764e-05f,
+-2.320411549e-05f, -2.328073597e-05f, -2.335730897e-05f, -2.343383435e-05f, -2.351031198e-05f, -2.358674173e-05f, -2.366312349e-05f, -2.373945711e-05f, -2.381574248e-05f, -2.389197946e-05f,
+-2.396816793e-05f, -2.404430776e-05f, -2.412039883e-05f, -2.419644100e-05f, -2.427243415e-05f, -2.434837815e-05f, -2.442427288e-05f, -2.450011820e-05f, -2.457591400e-05f, -2.465166015e-05f,
+-2.472735651e-05f, -2.480300297e-05f, -2.487859939e-05f, -2.495414565e-05f, -2.502964163e-05f, -2.510508720e-05f, -2.518048223e-05f, -2.525582660e-05f, -2.533112018e-05f, -2.540636285e-05f,
+-2.548155447e-05f, -2.555669493e-05f, -2.563178411e-05f, -2.570682186e-05f, -2.578180808e-05f, -2.585674263e-05f, -2.593162540e-05f, -2.600645625e-05f, -2.608123506e-05f, -2.615596170e-05f,
+-2.623063606e-05f, -2.630525801e-05f, -2.637982742e-05f, -2.645434416e-05f, -2.652880813e-05f, -2.660321919e-05f, -2.667757721e-05f, -2.675188208e-05f, -2.682613367e-05f, -2.690033185e-05f,
+-2.697447651e-05f, -2.704856752e-05f, -2.712260476e-05f, -2.719658810e-05f, -2.727051743e-05f, -2.734439261e-05f, -2.741821352e-05f, -2.749198005e-05f, -2.756569208e-05f, -2.763934946e-05f,
+-2.771295210e-05f, -2.778649986e-05f, -2.785999262e-05f, -2.793343026e-05f, -2.800681265e-05f, -2.808013968e-05f, -2.815341123e-05f, -2.822662717e-05f, -2.829978738e-05f, -2.837289174e-05f,
+-2.844594013e-05f, -2.851893242e-05f, -2.859186851e-05f, -2.866474825e-05f, -2.873757154e-05f, -2.881033826e-05f, -2.888304828e-05f, -2.895570148e-05f, -2.902829774e-05f, -2.910083695e-05f,
+-2.917331898e-05f, -2.924574371e-05f, -2.931811102e-05f, -2.939042079e-05f, -2.946267291e-05f, -2.953486725e-05f, -2.960700369e-05f, -2.967908212e-05f, -2.975110241e-05f, -2.982306445e-05f,
+-2.989496811e-05f, -2.996681328e-05f, -3.003859984e-05f, -3.011032767e-05f, -3.018199665e-05f, -3.025360666e-05f, -3.032515759e-05f, -3.039664932e-05f, -3.046808172e-05f, -3.053945468e-05f,
+-3.061076809e-05f, -3.068202182e-05f, -3.075321575e-05f, -3.082434978e-05f, -3.089542378e-05f, -3.096643763e-05f, -3.103739122e-05f, -3.110828443e-05f, -3.117911714e-05f, -3.124988924e-05f,
+-3.132060061e-05f, -3.139125113e-05f, -3.146184068e-05f, -3.153236916e-05f, -3.160283644e-05f, -3.167324241e-05f, -3.174358695e-05f, -3.181386994e-05f, -3.188409127e-05f, -3.195425083e-05f,
+-3.202434850e-05f, -3.209438416e-05f, -3.216435769e-05f, -3.223426899e-05f, -3.230411793e-05f, -3.237390441e-05f, -3.244362831e-05f, -3.251328950e-05f, -3.258288789e-05f, -3.265242334e-05f,
+-3.272189576e-05f, -3.279130502e-05f, -3.286065101e-05f, -3.292993362e-05f, -3.299915273e-05f, -3.306830823e-05f, -3.313740000e-05f, -3.320642794e-05f, -3.327539192e-05f, -3.334429184e-05f,
+-3.341312758e-05f, -3.348189903e-05f, -3.355060607e-05f, -3.361924859e-05f, -3.368782649e-05f, -3.375633964e-05f, -3.382478794e-05f, -3.389317127e-05f, -3.396148952e-05f, -3.402974258e-05f,
+-3.409793033e-05f, -3.416605267e-05f, -3.423410948e-05f, -3.430210065e-05f, -3.437002607e-05f, -3.443788563e-05f, -3.450567922e-05f, -3.457340672e-05f, -3.464106803e-05f, -3.470866303e-05f,
+-3.477619162e-05f, -3.484365368e-05f, -3.491104910e-05f, -3.497837777e-05f, -3.504563958e-05f, -3.511283443e-05f, -3.517996219e-05f, -3.524702277e-05f, -3.531401605e-05f, -3.538094192e-05f,
+-3.544780028e-05f, -3.551459101e-05f, -3.558131400e-05f, -3.564796915e-05f, -3.571455635e-05f, -3.578107548e-05f, -3.584752644e-05f, -3.591390913e-05f, -3.598022342e-05f, -3.604646922e-05f,
+-3.611264641e-05f, -3.617875489e-05f, -3.624479455e-05f, -3.631076528e-05f, -3.637666698e-05f, -3.644249953e-05f, -3.650826283e-05f, -3.657395678e-05f, -3.663958125e-05f, -3.670513616e-05f,
+-3.677062138e-05f, -3.683603682e-05f, -3.690138237e-05f, -3.696665792e-05f, -3.703186336e-05f, -3.709699859e-05f, -3.716206350e-05f, -3.722705799e-05f, -3.729198195e-05f, -3.735683527e-05f,
+-3.742161785e-05f, -3.748632959e-05f, -3.755097037e-05f, -3.761554010e-05f, -3.768003866e-05f, -3.774446596e-05f, -3.780882189e-05f, -3.787310634e-05f, -3.793731921e-05f, -3.800146039e-05f,
+-3.806552979e-05f, -3.812952729e-05f, -3.819345279e-05f, -3.825730620e-05f, -3.832108739e-05f, -3.838479628e-05f, -3.844843276e-05f, -3.851199672e-05f, -3.857548807e-05f, -3.863890669e-05f,
+-3.870225249e-05f, -3.876552536e-05f, -3.882872520e-05f, -3.889185191e-05f, -3.895490538e-05f, -3.901788552e-05f, -3.908079222e-05f, -3.914362537e-05f, -3.920638489e-05f, -3.926907066e-05f,
+-3.933168258e-05f, -3.939422056e-05f, -3.945668449e-05f, -3.951907427e-05f, -3.958138980e-05f, -3.964363098e-05f, -3.970579770e-05f, -3.976788988e-05f, -3.982990740e-05f, -3.989185017e-05f,
+-3.995371808e-05f, -4.001551104e-05f, -4.007722895e-05f, -4.013887170e-05f, -4.020043920e-05f, -4.026193135e-05f, -4.032334805e-05f, -4.038468919e-05f, -4.044595469e-05f, -4.050714444e-05f,
+-4.056825834e-05f, -4.062929630e-05f, -4.069025821e-05f, -4.075114398e-05f, -4.081195351e-05f, -4.087268670e-05f, -4.093334345e-05f, -4.099392367e-05f, -4.105442725e-05f, -4.111485411e-05f,
+-4.117520414e-05f, -4.123547724e-05f, -4.129567333e-05f, -4.135579229e-05f, -4.141583404e-05f, -4.147579848e-05f, -4.153568552e-05f, -4.159549504e-05f, -4.165522697e-05f, -4.171488120e-05f,
+-4.177445764e-05f, -4.183395619e-05f, -4.189337676e-05f, -4.195271924e-05f, -4.201198355e-05f, -4.207116960e-05f, -4.213027728e-05f, -4.218930649e-05f, -4.224825716e-05f, -4.230712917e-05f,
+-4.236592244e-05f, -4.242463688e-05f, -4.248327238e-05f, -4.254182885e-05f, -4.260030621e-05f, -4.265870435e-05f, -4.271702318e-05f, -4.277526262e-05f, -4.283342255e-05f, -4.289150291e-05f,
+-4.294950358e-05f, -4.300742448e-05f, -4.306526551e-05f, -4.312302659e-05f, -4.318070761e-05f, -4.323830849e-05f, -4.329582914e-05f, -4.335326946e-05f, -4.341062936e-05f, -4.346790875e-05f,
+-4.352510754e-05f, -4.358222564e-05f, -4.363926295e-05f, -4.369621938e-05f, -4.375309485e-05f, -4.380988926e-05f, -4.386660252e-05f, -4.392323454e-05f, -4.397978524e-05f, -4.403625451e-05f,
+-4.409264228e-05f, -4.414894845e-05f, -4.420517293e-05f, -4.426131563e-05f, -4.431737646e-05f, -4.437335533e-05f, -4.442925216e-05f, -4.448506686e-05f, -4.454079933e-05f, -4.459644948e-05f,
+-4.465201724e-05f, -4.470750251e-05f, -4.476290519e-05f, -4.481822522e-05f, -4.487346248e-05f, -4.492861691e-05f, -4.498368841e-05f, -4.503867689e-05f, -4.509358226e-05f, -4.514840445e-05f,
+-4.520314336e-05f, -4.525779890e-05f, -4.531237099e-05f, -4.536685954e-05f, -4.542126446e-05f, -4.547558568e-05f, -4.552982310e-05f, -4.558397663e-05f, -4.563804620e-05f, -4.569203171e-05f,
+-4.574593308e-05f, -4.579975022e-05f, -4.585348306e-05f, -4.590713150e-05f, -4.596069545e-05f, -4.601417485e-05f, -4.606756959e-05f, -4.612087960e-05f, -4.617410479e-05f, -4.622724508e-05f,
+-4.628030038e-05f, -4.633327061e-05f, -4.638615568e-05f, -4.643895552e-05f, -4.649167004e-05f, -4.654429916e-05f, -4.659684278e-05f, -4.664930084e-05f, -4.670167325e-05f, -4.675395992e-05f,
+-4.680616077e-05f, -4.685827572e-05f, -4.691030469e-05f, -4.696224760e-05f, -4.701410436e-05f, -4.706587489e-05f, -4.711755912e-05f, -4.716915696e-05f, -4.722066832e-05f, -4.727209313e-05f,
+-4.732343131e-05f, -4.737468278e-05f, -4.742584745e-05f, -4.747692525e-05f, -4.752791610e-05f, -4.757881990e-05f, -4.762963660e-05f, -4.768036610e-05f, -4.773100833e-05f, -4.778156320e-05f,
+-4.783203064e-05f, -4.788241057e-05f, -4.793270291e-05f, -4.798290758e-05f, -4.803302451e-05f, -4.808305360e-05f, -4.813299480e-05f, -4.818284801e-05f, -4.823261316e-05f, -4.828229017e-05f,
+-4.833187896e-05f, -4.838137946e-05f, -4.843079160e-05f, -4.848011528e-05f, -4.852935044e-05f, -4.857849699e-05f, -4.862755487e-05f, -4.867652399e-05f, -4.872540428e-05f, -4.877419567e-05f,
+-4.882289807e-05f, -4.887151141e-05f, -4.892003561e-05f, -4.896847061e-05f, -4.901681632e-05f, -4.906507266e-05f, -4.911323957e-05f, -4.916131697e-05f, -4.920930479e-05f, -4.925720294e-05f,
+-4.930501136e-05f, -4.935272996e-05f, -4.940035869e-05f, -4.944789745e-05f, -4.949534619e-05f, -4.954270482e-05f, -4.958997327e-05f, -4.963715147e-05f, -4.968423935e-05f, -4.973123683e-05f,
+-4.977814384e-05f, -4.982496030e-05f, -4.987168615e-05f, -4.991832131e-05f, -4.996486572e-05f, -5.001131929e-05f, -5.005768195e-05f, -5.010395364e-05f, -5.015013429e-05f, -5.019622381e-05f,
+-5.024222215e-05f, -5.028812922e-05f, -5.033394497e-05f, -5.037966931e-05f, -5.042530218e-05f, -5.047084351e-05f, -5.051629323e-05f, -5.056165126e-05f, -5.060691754e-05f, -5.065209199e-05f,
+-5.069717456e-05f, -5.074216516e-05f, -5.078706374e-05f, -5.083187021e-05f, -5.087658452e-05f, -5.092120659e-05f, -5.096573635e-05f, -5.101017374e-05f, -5.105451869e-05f, -5.109877113e-05f,
+-5.114293099e-05f, -5.118699821e-05f, -5.123097271e-05f, -5.127485443e-05f, -5.131864331e-05f, -5.136233927e-05f, -5.140594225e-05f, -5.144945218e-05f, -5.149286899e-05f, -5.153619263e-05f,
+-5.157942302e-05f, -5.162256009e-05f, -5.166560379e-05f, -5.170855404e-05f, -5.175141079e-05f, -5.179417395e-05f, -5.183684348e-05f, -5.187941930e-05f, -5.192190135e-05f, -5.196428957e-05f,
+-5.200658388e-05f, -5.204878424e-05f, -5.209089056e-05f, -5.213290279e-05f, -5.217482087e-05f, -5.221664473e-05f, -5.225837430e-05f, -5.230000953e-05f, -5.234155035e-05f, -5.238299670e-05f,
+-5.242434851e-05f, -5.246560573e-05f, -5.250676828e-05f, -5.254783611e-05f, -5.258880916e-05f, -5.262968736e-05f, -5.267047065e-05f, -5.271115897e-05f, -5.275175226e-05f, -5.279225046e-05f,
+-5.283265351e-05f, -5.287296134e-05f, -5.291317389e-05f, -5.295329111e-05f, -5.299331293e-05f, -5.303323930e-05f, -5.307307015e-05f, -5.311280542e-05f, -5.315244505e-05f, -5.319198899e-05f,
+-5.323143718e-05f, -5.327078955e-05f, -5.331004605e-05f, -5.334920661e-05f, -5.338827118e-05f, -5.342723970e-05f, -5.346611212e-05f, -5.350488837e-05f, -5.354356839e-05f, -5.358215214e-05f,
+-5.362063954e-05f, -5.365903054e-05f, -5.369732509e-05f, -5.373552313e-05f, -5.377362460e-05f, -5.381162945e-05f, -5.384953761e-05f, -5.388734903e-05f, -5.392506366e-05f, -5.396268144e-05f,
+-5.400020231e-05f, -5.403762622e-05f, -5.407495311e-05f, -5.411218292e-05f, -5.414931561e-05f, -5.418635111e-05f, -5.422328937e-05f, -5.426013034e-05f, -5.429687396e-05f, -5.433352018e-05f,
+-5.437006894e-05f, -5.440652019e-05f, -5.444287388e-05f, -5.447912995e-05f, -5.451528834e-05f, -5.455134901e-05f, -5.458731190e-05f, -5.462317696e-05f, -5.465894414e-05f, -5.469461337e-05f,
+-5.473018462e-05f, -5.476565783e-05f, -5.480103294e-05f, -5.483630991e-05f, -5.487148868e-05f, -5.490656920e-05f, -5.494155142e-05f, -5.497643528e-05f, -5.501122075e-05f, -5.504590776e-05f,
+-5.508049626e-05f, -5.511498621e-05f, -5.514937756e-05f, -5.518367025e-05f, -5.521786423e-05f, -5.525195946e-05f, -5.528595588e-05f, -5.531985345e-05f, -5.535365212e-05f, -5.538735183e-05f,
+-5.542095254e-05f, -5.545445419e-05f, -5.548785675e-05f, -5.552116016e-05f, -5.555436438e-05f, -5.558746934e-05f, -5.562047502e-05f, -5.565338136e-05f, -5.568618831e-05f, -5.571889582e-05f,
+-5.575150386e-05f, -5.578401236e-05f, -5.581642129e-05f, -5.584873059e-05f, -5.588094023e-05f, -5.591305015e-05f, -5.594506031e-05f, -5.597697066e-05f, -5.600878116e-05f, -5.604049176e-05f,
+-5.607210241e-05f, -5.610361307e-05f, -5.613502370e-05f, -5.616633426e-05f, -5.619754468e-05f, -5.622865494e-05f, -5.625966498e-05f, -5.629057477e-05f, -5.632138425e-05f, -5.635209339e-05f,
+-5.638270214e-05f, -5.641321046e-05f, -5.644361830e-05f, -5.647392563e-05f, -5.650413239e-05f, -5.653423855e-05f, -5.656424406e-05f, -5.659414888e-05f, -5.662395297e-05f, -5.665365628e-05f,
+-5.668325878e-05f, -5.671276042e-05f, -5.674216116e-05f, -5.677146097e-05f, -5.680065979e-05f, -5.682975759e-05f, -5.685875432e-05f, -5.688764995e-05f, -5.691644444e-05f, -5.694513774e-05f,
+-5.697372982e-05f, -5.700222064e-05f, -5.703061015e-05f, -5.705889831e-05f, -5.708708509e-05f, -5.711517045e-05f, -5.714315435e-05f, -5.717103675e-05f, -5.719881761e-05f, -5.722649689e-05f,
+-5.725407456e-05f, -5.728155057e-05f, -5.730892489e-05f, -5.733619748e-05f, -5.736336831e-05f, -5.739043733e-05f, -5.741740451e-05f, -5.744426980e-05f, -5.747103319e-05f, -5.749769462e-05f,
+-5.752425406e-05f, -5.755071148e-05f, -5.757706684e-05f, -5.760332010e-05f, -5.762947123e-05f, -5.765552018e-05f, -5.768146694e-05f, -5.770731146e-05f, -5.773305370e-05f, -5.775869363e-05f,
+-5.778423122e-05f, -5.780966643e-05f, -5.783499922e-05f, -5.786022958e-05f, -5.788535745e-05f, -5.791038280e-05f, -5.793530561e-05f, -5.796012583e-05f, -5.798484345e-05f, -5.800945841e-05f,
+-5.803397069e-05f, -5.805838026e-05f, -5.808268708e-05f, -5.810689113e-05f, -5.813099236e-05f, -5.815499075e-05f, -5.817888627e-05f, -5.820267888e-05f, -5.822636856e-05f, -5.824995526e-05f,
+-5.827343897e-05f, -5.829681964e-05f, -5.832009725e-05f, -5.834327178e-05f, -5.836634318e-05f, -5.838931142e-05f, -5.841217649e-05f, -5.843493834e-05f, -5.845759695e-05f, -5.848015229e-05f,
+-5.850260433e-05f, -5.852495304e-05f, -5.854719839e-05f, -5.856934036e-05f, -5.859137890e-05f, -5.861331401e-05f, -5.863514564e-05f, -5.865687377e-05f, -5.867849838e-05f, -5.870001942e-05f,
+-5.872143689e-05f, -5.874275074e-05f, -5.876396096e-05f, -5.878506751e-05f, -5.880607037e-05f, -5.882696952e-05f, -5.884776492e-05f, -5.886845655e-05f, -5.888904438e-05f, -5.890952839e-05f,
+-5.892990856e-05f, -5.895018485e-05f, -5.897035724e-05f, -5.899042571e-05f, -5.901039023e-05f, -5.903025078e-05f, -5.905000733e-05f, -5.906965986e-05f, -5.908920834e-05f, -5.910865275e-05f,
+-5.912799307e-05f, -5.914722927e-05f, -5.916636133e-05f, -5.918538923e-05f, -5.920431294e-05f, -5.922313244e-05f, -5.924184771e-05f, -5.926045872e-05f, -5.927896545e-05f, -5.929736788e-05f,
+-5.931566600e-05f, -5.933385976e-05f, -5.935194917e-05f, -5.936993418e-05f, -5.938781479e-05f, -5.940559097e-05f, -5.942326270e-05f, -5.944082996e-05f, -5.945829273e-05f, -5.947565099e-05f,
+-5.949290471e-05f, -5.951005389e-05f, -5.952709849e-05f, -5.954403850e-05f, -5.956087390e-05f, -5.957760468e-05f, -5.959423080e-05f, -5.961075226e-05f, -5.962716903e-05f, -5.964348109e-05f,
+-5.965968843e-05f, -5.967579104e-05f, -5.969178888e-05f, -5.970768194e-05f, -5.972347022e-05f, -5.973915368e-05f, -5.975473231e-05f, -5.977020609e-05f, -5.978557501e-05f, -5.980083906e-05f,
+-5.981599820e-05f, -5.983105244e-05f, -5.984600174e-05f, -5.986084610e-05f, -5.987558550e-05f, -5.989021993e-05f, -5.990474936e-05f, -5.991917379e-05f, -5.993349320e-05f, -5.994770757e-05f,
+-5.996181689e-05f, -5.997582114e-05f, -5.998972031e-05f, -6.000351439e-05f, -6.001720337e-05f, -6.003078722e-05f, -6.004426594e-05f, -6.005763950e-05f, -6.007090791e-05f, -6.008407114e-05f,
+-6.009712919e-05f, -6.011008203e-05f, -6.012292967e-05f, -6.013567207e-05f, -6.014830925e-05f, -6.016084117e-05f, -6.017326783e-05f, -6.018558922e-05f, -6.019780533e-05f, -6.020991614e-05f,
+-6.022192165e-05f, -6.023382184e-05f, -6.024561670e-05f, -6.025730623e-05f, -6.026889041e-05f, -6.028036923e-05f, -6.029174268e-05f, -6.030301076e-05f, -6.031417345e-05f, -6.032523074e-05f,
+-6.033618263e-05f, -6.034702910e-05f, -6.035777015e-05f, -6.036840577e-05f, -6.037893595e-05f, -6.038936068e-05f, -6.039967996e-05f, -6.040989377e-05f, -6.042000210e-05f, -6.043000496e-05f,
+-6.043990233e-05f, -6.044969421e-05f, -6.045938059e-05f, -6.046896146e-05f, -6.047843681e-05f, -6.048780665e-05f, -6.049707096e-05f, -6.050622973e-05f, -6.051528297e-05f, -6.052423066e-05f,
+-6.053307280e-05f, -6.054180939e-05f, -6.055044041e-05f, -6.055896587e-05f, -6.056738577e-05f, -6.057570008e-05f, -6.058390882e-05f, -6.059201197e-05f, -6.060000954e-05f, -6.060790152e-05f,
+-6.061568790e-05f, -6.062336868e-05f, -6.063094386e-05f, -6.063841344e-05f, -6.064577741e-05f, -6.065303577e-05f, -6.066018851e-05f, -6.066723564e-05f, -6.067417716e-05f, -6.068101305e-05f,
+-6.068774332e-05f, -6.069436797e-05f, -6.070088700e-05f, -6.070730040e-05f, -6.071360817e-05f, -6.071981032e-05f, -6.072590683e-05f, -6.073189772e-05f, -6.073778298e-05f, -6.074356261e-05f,
+-6.074923661e-05f, -6.075480498e-05f, -6.076026772e-05f, -6.076562484e-05f, -6.077087632e-05f, -6.077602218e-05f, -6.078106241e-05f, -6.078599702e-05f, -6.079082601e-05f, -6.079554938e-05f,
+-6.080016712e-05f, -6.080467925e-05f, -6.080908576e-05f, -6.081338666e-05f, -6.081758195e-05f, -6.082167164e-05f, -6.082565572e-05f, -6.082953419e-05f, -6.083330707e-05f, -6.083697436e-05f,
+-6.084053605e-05f, -6.084399215e-05f, -6.084734268e-05f, -6.085058762e-05f, -6.085372699e-05f, -6.085676079e-05f, -6.085968902e-05f, -6.086251170e-05f, -6.086522882e-05f, -6.086784038e-05f,
+-6.087034641e-05f, -6.087274689e-05f, -6.087504185e-05f, -6.087723127e-05f, -6.087931518e-05f, -6.088129357e-05f, -6.088316645e-05f, -6.088493383e-05f, -6.088659572e-05f, -6.088815212e-05f,
+-6.088960304e-05f, -6.089094849e-05f, -6.089218848e-05f, -6.089332300e-05f, -6.089435208e-05f, -6.089527572e-05f, -6.089609393e-05f, -6.089680671e-05f, -6.089741408e-05f, -6.089791605e-05f,
+-6.089831261e-05f, -6.089860379e-05f, -6.089878959e-05f, -6.089887003e-05f, -6.089884510e-05f, -6.089871483e-05f, -6.089847922e-05f, -6.089813828e-05f, -6.089769202e-05f, -6.089714046e-05f,
+-6.089648360e-05f, -6.089572146e-05f, -6.089485404e-05f, -6.089388137e-05f, -6.089280344e-05f, -6.089162028e-05f, -6.089033189e-05f, -6.088893828e-05f, -6.088743948e-05f, -6.088583548e-05f,
+-6.088412631e-05f, -6.088231197e-05f, -6.088039249e-05f, -6.087836787e-05f, -6.087623812e-05f, -6.087400327e-05f, -6.087166332e-05f, -6.086921829e-05f, -6.086666819e-05f, -6.086401304e-05f,
+-6.086125284e-05f, -6.085838763e-05f, -6.085541740e-05f, -6.085234218e-05f, -6.084916199e-05f, -6.084587682e-05f, -6.084248672e-05f, -6.083899167e-05f, -6.083539172e-05f, -6.083168686e-05f,
+-6.082787712e-05f, -6.082396252e-05f, -6.081994306e-05f, -6.081581877e-05f, -6.081158966e-05f, -6.080725576e-05f, -6.080281707e-05f, -6.079827362e-05f, -6.079362543e-05f, -6.078887250e-05f,
+-6.078401487e-05f, -6.077905254e-05f, -6.077398555e-05f, -6.076881389e-05f, -6.076353760e-05f, -6.075815670e-05f, -6.075267120e-05f, -6.074708112e-05f, -6.074138648e-05f, -6.073558730e-05f,
+-6.072968361e-05f, -6.072367541e-05f, -6.071756274e-05f, -6.071134561e-05f, -6.070502405e-05f, -6.069859806e-05f, -6.069206769e-05f, -6.068543293e-05f, -6.067869383e-05f, -6.067185039e-05f,
+-6.066490265e-05f, -6.065785062e-05f, -6.065069432e-05f, -6.064343378e-05f, -6.063606902e-05f, -6.062860006e-05f, -6.062102693e-05f, -6.061334965e-05f, -6.060556823e-05f, -6.059768271e-05f,
+-6.058969311e-05f, -6.058159945e-05f, -6.057340175e-05f, -6.056510005e-05f, -6.055669436e-05f, -6.054818470e-05f, -6.053957111e-05f, -6.053085361e-05f, -6.052203222e-05f, -6.051310697e-05f,
+-6.050407787e-05f, -6.049494497e-05f, -6.048570828e-05f, -6.047636784e-05f, -6.046692365e-05f, -6.045737576e-05f, -6.044772419e-05f, -6.043796896e-05f, -6.042811011e-05f, -6.041814765e-05f,
+-6.040808162e-05f, -6.039791204e-05f, -6.038763894e-05f, -6.037726235e-05f, -6.036678229e-05f, -6.035619880e-05f, -6.034551190e-05f, -6.033472162e-05f, -6.032382799e-05f, -6.031283103e-05f,
+-6.030173078e-05f, -6.029052727e-05f, -6.027922052e-05f, -6.026781056e-05f, -6.025629743e-05f, -6.024468114e-05f, -6.023296174e-05f, -6.022113926e-05f, -6.020921371e-05f, -6.019718514e-05f,
+-6.018505358e-05f, -6.017281905e-05f, -6.016048158e-05f, -6.014804121e-05f, -6.013549797e-05f, -6.012285189e-05f, -6.011010299e-05f, -6.009725133e-05f, -6.008429691e-05f, -6.007123978e-05f,
+-6.005807998e-05f, -6.004481752e-05f, -6.003145245e-05f, -6.001798480e-05f, -6.000441459e-05f, -5.999074187e-05f, -5.997696667e-05f, -5.996308902e-05f, -5.994910895e-05f, -5.993502650e-05f,
+-5.992084170e-05f, -5.990655459e-05f, -5.989216520e-05f, -5.987767357e-05f, -5.986307973e-05f, -5.984838371e-05f, -5.983358555e-05f, -5.981868529e-05f, -5.980368296e-05f, -5.978857859e-05f,
+-5.977337223e-05f, -5.975806391e-05f, -5.974265366e-05f, -5.972714152e-05f, -5.971152753e-05f, -5.969581173e-05f, -5.967999414e-05f, -5.966407482e-05f, -5.964805379e-05f, -5.963193109e-05f,
+-5.961570676e-05f, -5.959938084e-05f, -5.958295337e-05f, -5.956642438e-05f, -5.954979391e-05f, -5.953306201e-05f, -5.951622870e-05f, -5.949929403e-05f, -5.948225804e-05f, -5.946512076e-05f,
+-5.944788224e-05f, -5.943054252e-05f, -5.941310162e-05f, -5.939555961e-05f, -5.937791650e-05f, -5.936017235e-05f, -5.934232720e-05f, -5.932438108e-05f, -5.930633403e-05f, -5.928818610e-05f,
+-5.926993733e-05f, -5.925158776e-05f, -5.923313743e-05f, -5.921458638e-05f, -5.919593465e-05f, -5.917718229e-05f, -5.915832933e-05f, -5.913937582e-05f, -5.912032180e-05f, -5.910116732e-05f,
+-5.908191241e-05f, -5.906255713e-05f, -5.904310150e-05f, -5.902354558e-05f, -5.900388941e-05f, -5.898413304e-05f, -5.896427649e-05f, -5.894431983e-05f, -5.892426310e-05f, -5.890410633e-05f,
+-5.888384957e-05f, -5.886349287e-05f, -5.884303627e-05f, -5.882247982e-05f, -5.880182356e-05f, -5.878106754e-05f, -5.876021180e-05f, -5.873925639e-05f, -5.871820135e-05f, -5.869704673e-05f,
+-5.867579258e-05f, -5.865443894e-05f, -5.863298585e-05f, -5.861143338e-05f, -5.858978155e-05f, -5.856803042e-05f, -5.854618004e-05f, -5.852423045e-05f, -5.850218170e-05f, -5.848003384e-05f,
+-5.845778691e-05f, -5.843544097e-05f, -5.841299606e-05f, -5.839045222e-05f, -5.836780952e-05f, -5.834506799e-05f, -5.832222769e-05f, -5.829928866e-05f, -5.827625096e-05f, -5.825311463e-05f,
+-5.822987972e-05f, -5.820654628e-05f, -5.818311436e-05f, -5.815958401e-05f, -5.813595529e-05f, -5.811222823e-05f, -5.808840290e-05f, -5.806447934e-05f, -5.804045761e-05f, -5.801633775e-05f,
+-5.799211981e-05f, -5.796780385e-05f, -5.794338991e-05f, -5.791887806e-05f, -5.789426834e-05f, -5.786956080e-05f, -5.784475549e-05f, -5.781985247e-05f, -5.779485179e-05f, -5.776975351e-05f,
+-5.774455766e-05f, -5.771926432e-05f, -5.769387352e-05f, -5.766838533e-05f, -5.764279980e-05f, -5.761711698e-05f, -5.759133692e-05f, -5.756545968e-05f, -5.753948531e-05f, -5.751341387e-05f,
+-5.748724541e-05f, -5.746097998e-05f, -5.743461764e-05f, -5.740815845e-05f, -5.738160246e-05f, -5.735494972e-05f, -5.732820029e-05f, -5.730135423e-05f, -5.727441159e-05f, -5.724737243e-05f,
+-5.722023680e-05f, -5.719300475e-05f, -5.716567636e-05f, -5.713825166e-05f, -5.711073073e-05f, -5.708311361e-05f, -5.705540036e-05f, -5.702759104e-05f, -5.699968570e-05f, -5.697168441e-05f,
+-5.694358722e-05f, -5.691539419e-05f, -5.688710538e-05f, -5.685872084e-05f, -5.683024064e-05f, -5.680166483e-05f, -5.677299346e-05f, -5.674422661e-05f, -5.671536432e-05f, -5.668640666e-05f,
+-5.665735369e-05f, -5.662820546e-05f, -5.659896204e-05f, -5.656962348e-05f, -5.654018984e-05f, -5.651066119e-05f, -5.648103759e-05f, -5.645131908e-05f, -5.642150574e-05f, -5.639159763e-05f,
+-5.636159481e-05f, -5.633149733e-05f, -5.630130526e-05f, -5.627101866e-05f, -5.624063759e-05f, -5.621016211e-05f, -5.617959229e-05f, -5.614892818e-05f, -5.611816985e-05f, -5.608731736e-05f,
+-5.605637077e-05f, -5.602533015e-05f, -5.599419556e-05f, -5.596296705e-05f, -5.593164470e-05f, -5.590022857e-05f, -5.586871872e-05f, -5.583711521e-05f, -5.580541810e-05f, -5.577362747e-05f,
+-5.574174337e-05f, -5.570976587e-05f, -5.567769504e-05f, -5.564553093e-05f, -5.561327361e-05f, -5.558092315e-05f, -5.554847960e-05f, -5.551594305e-05f, -5.548331355e-05f, -5.545059116e-05f,
+-5.541777595e-05f, -5.538486800e-05f, -5.535186735e-05f, -5.531877409e-05f, -5.528558827e-05f, -5.525230996e-05f, -5.521893923e-05f, -5.518547615e-05f, -5.515192077e-05f, -5.511827318e-05f,
+-5.508453343e-05f, -5.505070159e-05f, -5.501677773e-05f, -5.498276192e-05f, -5.494865422e-05f, -5.491445470e-05f, -5.488016344e-05f, -5.484578049e-05f, -5.481130593e-05f, -5.477673982e-05f,
+-5.474208224e-05f, -5.470733325e-05f, -5.467249292e-05f, -5.463756132e-05f, -5.460253852e-05f, -5.456742458e-05f, -5.453221959e-05f, -5.449692360e-05f, -5.446153669e-05f, -5.442605892e-05f,
+-5.439049037e-05f, -5.435483111e-05f, -5.431908121e-05f, -5.428324073e-05f, -5.424730975e-05f, -5.421128834e-05f, -5.417517658e-05f, -5.413897452e-05f, -5.410268224e-05f, -5.406629982e-05f,
+-5.402982733e-05f, -5.399326483e-05f, -5.395661240e-05f, -5.391987011e-05f, -5.388303803e-05f, -5.384611624e-05f, -5.380910480e-05f, -5.377200380e-05f, -5.373481330e-05f, -5.369753338e-05f,
+-5.366016410e-05f, -5.362270554e-05f, -5.358515779e-05f, -5.354752089e-05f, -5.350979495e-05f, -5.347198001e-05f, -5.343407617e-05f, -5.339608349e-05f, -5.335800205e-05f, -5.331983193e-05f,
+-5.328157319e-05f, -5.324322591e-05f, -5.320479016e-05f, -5.316626603e-05f, -5.312765359e-05f, -5.308895290e-05f, -5.305016406e-05f, -5.301128712e-05f, -5.297232218e-05f, -5.293326930e-05f,
+-5.289412855e-05f, -5.285490003e-05f, -5.281558379e-05f, -5.277617993e-05f, -5.273668851e-05f, -5.269710961e-05f, -5.265744331e-05f, -5.261768968e-05f, -5.257784881e-05f, -5.253792077e-05f,
+-5.249790563e-05f, -5.245780348e-05f, -5.241761439e-05f, -5.237733845e-05f, -5.233697572e-05f, -5.229652628e-05f, -5.225599022e-05f, -5.221536762e-05f, -5.217465854e-05f, -5.213386308e-05f,
+-5.209298130e-05f, -5.205201329e-05f, -5.201095913e-05f, -5.196981890e-05f, -5.192859267e-05f, -5.188728052e-05f, -5.184588254e-05f, -5.180439881e-05f, -5.176282940e-05f, -5.172117439e-05f,
+-5.167943387e-05f, -5.163760791e-05f, -5.159569660e-05f, -5.155370002e-05f, -5.151161824e-05f, -5.146945135e-05f, -5.142719943e-05f, -5.138486256e-05f, -5.134244082e-05f, -5.129993429e-05f,
+-5.125734306e-05f, -5.121466721e-05f, -5.117190681e-05f, -5.112906195e-05f, -5.108613272e-05f, -5.104311919e-05f, -5.100002145e-05f, -5.095683958e-05f, -5.091357366e-05f, -5.087022378e-05f,
+-5.082679001e-05f, -5.078327245e-05f, -5.073967117e-05f, -5.069598626e-05f, -5.065221780e-05f, -5.060836588e-05f, -5.056443058e-05f, -5.052041198e-05f, -5.047631016e-05f, -5.043212522e-05f,
+-5.038785724e-05f, -5.034350629e-05f, -5.029907248e-05f, -5.025455587e-05f, -5.020995655e-05f, -5.016527462e-05f, -5.012051015e-05f, -5.007566323e-05f, -5.003073395e-05f, -4.998572239e-05f,
+-4.994062863e-05f, -4.989545277e-05f, -4.985019489e-05f, -4.980485507e-05f, -4.975943340e-05f, -4.971392998e-05f, -4.966834487e-05f, -4.962267818e-05f, -4.957692998e-05f, -4.953110037e-05f,
+-4.948518943e-05f, -4.943919725e-05f, -4.939312392e-05f, -4.934696952e-05f, -4.930073414e-05f, -4.925441787e-05f, -4.920802080e-05f, -4.916154301e-05f, -4.911498460e-05f, -4.906834564e-05f,
+-4.902162624e-05f, -4.897482647e-05f, -4.892794643e-05f, -4.888098620e-05f, -4.883394588e-05f, -4.878682556e-05f, -4.873962531e-05f, -4.869234524e-05f, -4.864498543e-05f, -4.859754596e-05f,
+-4.855002694e-05f, -4.850242845e-05f, -4.845475058e-05f, -4.840699342e-05f, -4.835915706e-05f, -4.831124159e-05f, -4.826324710e-05f, -4.821517369e-05f, -4.816702143e-05f, -4.811879043e-05f,
+-4.807048077e-05f, -4.802209255e-05f, -4.797362586e-05f, -4.792508078e-05f, -4.787645741e-05f, -4.782775584e-05f, -4.777897617e-05f, -4.773011848e-05f, -4.768118286e-05f, -4.763216942e-05f,
+-4.758307823e-05f, -4.753390940e-05f, -4.748466301e-05f, -4.743533917e-05f, -4.738593795e-05f, -4.733645945e-05f, -4.728690378e-05f, -4.723727101e-05f, -4.718756125e-05f, -4.713777458e-05f,
+-4.708791110e-05f, -4.703797091e-05f, -4.698795409e-05f, -4.693786074e-05f, -4.688769096e-05f, -4.683744484e-05f, -4.678712247e-05f, -4.673672395e-05f, -4.668624937e-05f, -4.663569883e-05f,
+-4.658507242e-05f, -4.653437023e-05f, -4.648359237e-05f, -4.643273892e-05f, -4.638180998e-05f, -4.633080565e-05f, -4.627972603e-05f, -4.622857120e-05f, -4.617734126e-05f, -4.612603631e-05f,
+-4.607465645e-05f, -4.602320177e-05f, -4.597167237e-05f, -4.592006834e-05f, -4.586838978e-05f, -4.581663679e-05f, -4.576480946e-05f, -4.571290789e-05f, -4.566093218e-05f, -4.560888242e-05f,
+-4.555675871e-05f, -4.550456115e-05f, -4.545228984e-05f, -4.539994487e-05f, -4.534752634e-05f, -4.529503435e-05f, -4.524246899e-05f, -4.518983037e-05f, -4.513711858e-05f, -4.508433372e-05f,
+-4.503147589e-05f, -4.497854519e-05f, -4.492554171e-05f, -4.487246556e-05f, -4.481931683e-05f, -4.476609562e-05f, -4.471280203e-05f, -4.465943617e-05f, -4.460599812e-05f, -4.455248799e-05f,
+-4.449890588e-05f, -4.444525189e-05f, -4.439152611e-05f, -4.433772865e-05f, -4.428385961e-05f, -4.422991909e-05f, -4.417590718e-05f, -4.412182399e-05f, -4.406766962e-05f, -4.401344417e-05f,
+-4.395914773e-05f, -4.390478042e-05f, -4.385034233e-05f, -4.379583355e-05f, -4.374125420e-05f, -4.368660438e-05f, -4.363188418e-05f, -4.357709370e-05f, -4.352223306e-05f, -4.346730234e-05f,
+-4.341230166e-05f, -4.335723110e-05f, -4.330209079e-05f, -4.324688081e-05f, -4.319160127e-05f, -4.313625227e-05f, -4.308083391e-05f, -4.302534631e-05f, -4.296978955e-05f, -4.291416374e-05f,
+-4.285846899e-05f, -4.280270539e-05f, -4.274687306e-05f, -4.269097209e-05f, -4.263500258e-05f, -4.257896465e-05f, -4.252285839e-05f, -4.246668391e-05f, -4.241044131e-05f, -4.235413070e-05f,
+-4.229775217e-05f, -4.224130584e-05f, -4.218479181e-05f, -4.212821017e-05f, -4.207156105e-05f, -4.201484453e-05f, -4.195806073e-05f, -4.190120974e-05f, -4.184429168e-05f, -4.178730665e-05f,
+-4.173025476e-05f, -4.167313610e-05f, -4.161595079e-05f, -4.155869893e-05f, -4.150138062e-05f, -4.144399598e-05f, -4.138654510e-05f, -4.132902809e-05f, -4.127144506e-05f, -4.121379612e-05f,
+-4.115608136e-05f, -4.109830090e-05f, -4.104045485e-05f, -4.098254330e-05f, -4.092456637e-05f, -4.086652415e-05f, -4.080841677e-05f, -4.075024432e-05f, -4.069200692e-05f, -4.063370466e-05f,
+-4.057533766e-05f, -4.051690602e-05f, -4.045840985e-05f, -4.039984926e-05f, -4.034122436e-05f, -4.028253525e-05f, -4.022378204e-05f, -4.016496483e-05f, -4.010608375e-05f, -4.004713889e-05f,
+-3.998813036e-05f, -3.992905827e-05f, -3.986992273e-05f, -3.981072384e-05f, -3.975146172e-05f, -3.969213648e-05f, -3.963274822e-05f, -3.957329705e-05f, -3.951378308e-05f, -3.945420642e-05f,
+-3.939456718e-05f, -3.933486547e-05f, -3.927510139e-05f, -3.921527506e-05f, -3.915538659e-05f, -3.909543608e-05f, -3.903542365e-05f, -3.897534940e-05f, -3.891521345e-05f, -3.885501590e-05f,
+-3.879475686e-05f, -3.873443645e-05f, -3.867405478e-05f, -3.861361195e-05f, -3.855310808e-05f, -3.849254327e-05f, -3.843191764e-05f, -3.837123130e-05f, -3.831048435e-05f, -3.824967692e-05f,
+-3.818880910e-05f, -3.812788102e-05f, -3.806689278e-05f, -3.800584449e-05f, -3.794473627e-05f, -3.788356822e-05f, -3.782234047e-05f, -3.776105311e-05f, -3.769970626e-05f, -3.763830004e-05f,
+-3.757683456e-05f, -3.751530992e-05f, -3.745372624e-05f, -3.739208363e-05f, -3.733038221e-05f, -3.726862208e-05f, -3.720680336e-05f, -3.714492616e-05f, -3.708299060e-05f, -3.702099678e-05f,
+-3.695894483e-05f, -3.689683484e-05f, -3.683466694e-05f, -3.677244124e-05f, -3.671015785e-05f, -3.664781689e-05f, -3.658541847e-05f, -3.652296270e-05f, -3.646044969e-05f, -3.639787956e-05f,
+-3.633525243e-05f, -3.627256840e-05f, -3.620982759e-05f, -3.614703012e-05f, -3.608417609e-05f, -3.602126563e-05f, -3.595829885e-05f, -3.589527585e-05f, -3.583219677e-05f, -3.576906170e-05f,
+-3.570587077e-05f, -3.564262409e-05f, -3.557932177e-05f, -3.551596393e-05f, -3.545255069e-05f, -3.538908215e-05f, -3.532555844e-05f, -3.526197967e-05f, -3.519834595e-05f, -3.513465740e-05f,
+-3.507091414e-05f, -3.500711628e-05f, -3.494326394e-05f, -3.487935723e-05f, -3.481539627e-05f, -3.475138117e-05f, -3.468731205e-05f, -3.462318903e-05f, -3.455901222e-05f, -3.449478173e-05f,
+-3.443049770e-05f, -3.436616022e-05f, -3.430176942e-05f, -3.423732541e-05f, -3.417282832e-05f, -3.410827825e-05f, -3.404367533e-05f, -3.397901966e-05f, -3.391431138e-05f, -3.384955059e-05f,
+-3.378473741e-05f, -3.371987195e-05f, -3.365495435e-05f, -3.358998471e-05f, -3.352496315e-05f, -3.345988979e-05f, -3.339476474e-05f, -3.332958813e-05f, -3.326436007e-05f, -3.319908067e-05f,
+-3.313375007e-05f, -3.306836837e-05f, -3.300293569e-05f, -3.293745215e-05f, -3.287191787e-05f, -3.280633297e-05f, -3.274069757e-05f, -3.267501177e-05f, -3.260927571e-05f, -3.254348951e-05f,
+-3.247765327e-05f, -3.241176712e-05f, -3.234583118e-05f, -3.227984556e-05f, -3.221381039e-05f, -3.214772578e-05f, -3.208159186e-05f, -3.201540873e-05f, -3.194917653e-05f, -3.188289537e-05f,
+-3.181656537e-05f, -3.175018665e-05f, -3.168375933e-05f, -3.161728352e-05f, -3.155075936e-05f, -3.148418695e-05f, -3.141756642e-05f, -3.135089789e-05f, -3.128418148e-05f, -3.121741730e-05f,
+-3.115060548e-05f, -3.108374614e-05f, -3.101683940e-05f, -3.094988538e-05f, -3.088288419e-05f, -3.081583597e-05f, -3.074874082e-05f, -3.068159888e-05f, -3.061441025e-05f, -3.054717507e-05f,
+-3.047989345e-05f, -3.041256551e-05f, -3.034519138e-05f, -3.027777118e-05f, -3.021030502e-05f, -3.014279302e-05f, -3.007523532e-05f, -3.000763203e-05f, -2.993998326e-05f, -2.987228915e-05f,
+-2.980454982e-05f, -2.973676538e-05f, -2.966893596e-05f, -2.960106168e-05f, -2.953314265e-05f, -2.946517901e-05f, -2.939717088e-05f, -2.932911837e-05f, -2.926102161e-05f, -2.919288072e-05f,
+-2.912469583e-05f, -2.905646704e-05f, -2.898819450e-05f, -2.891987831e-05f, -2.885151861e-05f, -2.878311551e-05f, -2.871466914e-05f, -2.864617962e-05f, -2.857764707e-05f, -2.850907161e-05f,
+-2.844045337e-05f, -2.837179247e-05f, -2.830308904e-05f, -2.823434319e-05f, -2.816555505e-05f, -2.809672474e-05f, -2.802785239e-05f, -2.795893812e-05f, -2.788998205e-05f, -2.782098430e-05f,
+-2.775194500e-05f, -2.768286428e-05f, -2.761374225e-05f, -2.754457903e-05f, -2.747537477e-05f, -2.740612956e-05f, -2.733684355e-05f, -2.726751685e-05f, -2.719814959e-05f, -2.712874189e-05f,
+-2.705929388e-05f, -2.698980568e-05f, -2.692027741e-05f, -2.685070920e-05f, -2.678110117e-05f, -2.671145344e-05f, -2.664176615e-05f, -2.657203941e-05f, -2.650227336e-05f, -2.643246810e-05f,
+-2.636262378e-05f, -2.629274050e-05f, -2.622281841e-05f, -2.615285762e-05f, -2.608285825e-05f, -2.601282044e-05f, -2.594274430e-05f, -2.587262997e-05f, -2.580247756e-05f, -2.573228721e-05f,
+-2.566205903e-05f, -2.559179315e-05f, -2.552148970e-05f, -2.545114881e-05f, -2.538077059e-05f, -2.531035517e-05f, -2.523990269e-05f, -2.516941326e-05f, -2.509888700e-05f, -2.502832406e-05f,
+-2.495772454e-05f, -2.488708858e-05f, -2.481641630e-05f, -2.474570783e-05f, -2.467496329e-05f, -2.460418282e-05f, -2.453336653e-05f, -2.446251455e-05f, -2.439162701e-05f, -2.432070403e-05f,
+-2.424974574e-05f, -2.417875227e-05f, -2.410772374e-05f, -2.403666027e-05f, -2.396556201e-05f, -2.389442906e-05f, -2.382326156e-05f, -2.375205964e-05f, -2.368082341e-05f, -2.360955301e-05f,
+-2.353824857e-05f, -2.346691021e-05f, -2.339553805e-05f, -2.332413223e-05f, -2.325269287e-05f, -2.318122009e-05f, -2.310971403e-05f, -2.303817481e-05f, -2.296660256e-05f, -2.289499740e-05f,
+-2.282335947e-05f, -2.275168888e-05f, -2.267998577e-05f, -2.260825027e-05f, -2.253648249e-05f, -2.246468258e-05f, -2.239285065e-05f, -2.232098683e-05f, -2.224909125e-05f, -2.217716404e-05f,
+-2.210520533e-05f, -2.203321524e-05f, -2.196119389e-05f, -2.188914143e-05f, -2.181705797e-05f, -2.174494365e-05f, -2.167279858e-05f, -2.160062291e-05f, -2.152841675e-05f, -2.145618023e-05f,
+-2.138391349e-05f, -2.131161665e-05f, -2.123928984e-05f, -2.116693318e-05f, -2.109454681e-05f, -2.102213085e-05f, -2.094968543e-05f, -2.087721068e-05f, -2.080470673e-05f, -2.073217370e-05f,
+-2.065961173e-05f, -2.058702094e-05f, -2.051440146e-05f, -2.044175341e-05f, -2.036907694e-05f, -2.029637216e-05f, -2.022363920e-05f, -2.015087820e-05f, -2.007808928e-05f, -2.000527257e-05f,
+-1.993242820e-05f, -1.985955629e-05f, -1.978665698e-05f, -1.971373040e-05f, -1.964077667e-05f, -1.956779592e-05f, -1.949478829e-05f, -1.942175389e-05f, -1.934869287e-05f, -1.927560534e-05f,
+-1.920249144e-05f, -1.912935130e-05f, -1.905618504e-05f, -1.898299279e-05f, -1.890977470e-05f, -1.883653087e-05f, -1.876326144e-05f, -1.868996655e-05f, -1.861664632e-05f, -1.854330087e-05f,
+-1.846993035e-05f, -1.839653488e-05f, -1.832311458e-05f, -1.824966959e-05f, -1.817620004e-05f, -1.810270605e-05f, -1.802918776e-05f, -1.795564530e-05f, -1.788207879e-05f, -1.780848836e-05f,
+-1.773487415e-05f, -1.766123629e-05f, -1.758757490e-05f, -1.751389011e-05f, -1.744018205e-05f, -1.736645086e-05f, -1.729269666e-05f, -1.721891958e-05f, -1.714511976e-05f, -1.707129731e-05f,
+-1.699745238e-05f, -1.692358510e-05f, -1.684969558e-05f, -1.677578397e-05f, -1.670185038e-05f, -1.662789497e-05f, -1.655391784e-05f, -1.647991913e-05f, -1.640589898e-05f, -1.633185751e-05f,
+-1.625779486e-05f, -1.618371115e-05f, -1.610960651e-05f, -1.603548107e-05f, -1.596133497e-05f, -1.588716833e-05f, -1.581298129e-05f, -1.573877397e-05f, -1.566454650e-05f, -1.559029902e-05f,
+-1.551603166e-05f, -1.544174455e-05f, -1.536743781e-05f, -1.529311158e-05f, -1.521876598e-05f, -1.514440116e-05f, -1.507001723e-05f, -1.499561433e-05f, -1.492119259e-05f, -1.484675215e-05f,
+-1.477229312e-05f, -1.469781564e-05f, -1.462331985e-05f, -1.454880587e-05f, -1.447427384e-05f, -1.439972388e-05f, -1.432515612e-05f, -1.425057070e-05f, -1.417596775e-05f, -1.410134739e-05f,
+-1.402670977e-05f, -1.395205500e-05f, -1.387738322e-05f, -1.380269457e-05f, -1.372798916e-05f, -1.365326714e-05f, -1.357852863e-05f, -1.350377376e-05f, -1.342900267e-05f, -1.335421549e-05f,
+-1.327941234e-05f, -1.320459337e-05f, -1.312975869e-05f, -1.305490844e-05f, -1.298004275e-05f, -1.290516176e-05f, -1.283026559e-05f, -1.275535437e-05f, -1.268042824e-05f, -1.260548732e-05f,
+-1.253053176e-05f, -1.245556167e-05f, -1.238057719e-05f, -1.230557845e-05f, -1.223056559e-05f, -1.215553873e-05f, -1.208049800e-05f, -1.200544354e-05f, -1.193037547e-05f, -1.185529394e-05f,
+-1.178019906e-05f, -1.170509098e-05f, -1.162996981e-05f, -1.155483570e-05f, -1.147968877e-05f, -1.140452916e-05f, -1.132935700e-05f, -1.125417241e-05f, -1.117897554e-05f, -1.110376650e-05f,
+-1.102854544e-05f, -1.095331248e-05f, -1.087806776e-05f, -1.080281140e-05f, -1.072754354e-05f, -1.065226431e-05f, -1.057697383e-05f, -1.050167226e-05f, -1.042635970e-05f, -1.035103630e-05f,
+-1.027570218e-05f, -1.020035748e-05f, -1.012500233e-05f, -1.004963686e-05f, -9.974261201e-06f, -9.898875485e-06f, -9.823479843e-06f, -9.748074407e-06f, -9.672659308e-06f, -9.597234678e-06f,
+-9.521800648e-06f, -9.446357349e-06f, -9.370904914e-06f, -9.295443472e-06f, -9.219973157e-06f, -9.144494098e-06f, -9.069006429e-06f, -8.993510280e-06f, -8.918005782e-06f, -8.842493068e-06f,
+-8.766972268e-06f, -8.691443515e-06f, -8.615906939e-06f, -8.540362672e-06f, -8.464810845e-06f, -8.389251591e-06f, -8.313685040e-06f, -8.238111324e-06f, -8.162530575e-06f, -8.086942923e-06f,
+-8.011348501e-06f, -7.935747439e-06f, -7.860139870e-06f, -7.784525925e-06f, -7.708905735e-06f, -7.633279432e-06f, -7.557647147e-06f, -7.482009011e-06f, -7.406365157e-06f, -7.330715715e-06f,
+-7.255060817e-06f, -7.179400595e-06f, -7.103735180e-06f, -7.028064703e-06f, -6.952389296e-06f, -6.876709090e-06f, -6.801024217e-06f, -6.725334808e-06f, -6.649640994e-06f, -6.573942907e-06f,
+-6.498240679e-06f, -6.422534441e-06f, -6.346824323e-06f, -6.271110459e-06f, -6.195392978e-06f, -6.119672013e-06f, -6.043947694e-06f, -5.968220154e-06f, -5.892489523e-06f, -5.816755932e-06f,
+-5.741019514e-06f, -5.665280400e-06f, -5.589538720e-06f, -5.513794607e-06f, -5.438048191e-06f, -5.362299603e-06f, -5.286548976e-06f, -5.210796441e-06f, -5.135042128e-06f, -5.059286169e-06f,
+-4.983528695e-06f, -4.907769837e-06f, -4.832009728e-06f, -4.756248497e-06f, -4.680486276e-06f, -4.604723197e-06f, -4.528959391e-06f, -4.453194988e-06f, -4.377430120e-06f, -4.301664918e-06f,
+-4.225899514e-06f, -4.150134037e-06f, -4.074368621e-06f, -3.998603395e-06f, -3.922838491e-06f, -3.847074039e-06f, -3.771310172e-06f, -3.695547020e-06f, -3.619784713e-06f, -3.544023384e-06f,
+-3.468263163e-06f, -3.392504181e-06f, -3.316746569e-06f, -3.240990458e-06f, -3.165235979e-06f, -3.089483263e-06f, -3.013732441e-06f, -2.937983644e-06f, -2.862237002e-06f, -2.786492648e-06f,
+-2.710750710e-06f, -2.635011321e-06f, -2.559274611e-06f, -2.483540712e-06f, -2.407809753e-06f, -2.332081865e-06f, -2.256357180e-06f, -2.180635828e-06f, -2.104917940e-06f, -2.029203646e-06f,
+-1.953493077e-06f, -1.877786365e-06f, -1.802083638e-06f, -1.726385029e-06f, -1.650690668e-06f, -1.575000685e-06f, -1.499315211e-06f, -1.423634377e-06f, -1.347958313e-06f, -1.272287149e-06f,
+-1.196621016e-06f, -1.120960045e-06f, -1.045304365e-06f, -9.696541082e-07f, -8.940094040e-07f, -8.183703829e-07f, -7.427371754e-07f, -6.671099117e-07f, -5.914887222e-07f, -5.158737372e-07f,
+-4.402650869e-07f, -3.646629016e-07f, -2.890673115e-07f, -2.134784469e-07f, -1.378964377e-07f, -6.232141437e-08f, 1.324649315e-08f, 8.880715472e-08f, 1.643604403e-07f, 2.399062197e-07f,
+3.154443630e-07f, 3.909747403e-07f, 4.664972214e-07f, 5.420116766e-07f, 6.175179758e-07f, 6.930159891e-07f, 7.685055867e-07f, 8.439866388e-07f, 9.194590155e-07f, 9.949225871e-07f,
+1.070377224e-06f, 1.145822796e-06f, 1.221259173e-06f, 1.296686227e-06f, 1.372103827e-06f, 1.447511844e-06f, 1.522910148e-06f, 1.598298609e-06f, 1.673677098e-06f, 1.749045486e-06f,
+1.824403643e-06f, 1.899751440e-06f, 1.975088747e-06f, 2.050415435e-06f, 2.125731374e-06f, 2.201036435e-06f, 2.276330490e-06f, 2.351613408e-06f, 2.426885060e-06f, 2.502145318e-06f,
+2.577394051e-06f, 2.652631132e-06f, 2.727856430e-06f, 2.803069818e-06f, 2.878271165e-06f, 2.953460342e-06f, 3.028637222e-06f, 3.103801674e-06f, 3.178953571e-06f, 3.254092782e-06f,
+3.329219180e-06f, 3.404332635e-06f, 3.479433019e-06f, 3.554520203e-06f, 3.629594058e-06f, 3.704654456e-06f, 3.779701268e-06f, 3.854734366e-06f, 3.929753620e-06f, 4.004758903e-06f,
+4.079750086e-06f, 4.154727040e-06f, 4.229689638e-06f, 4.304637750e-06f, 4.379571249e-06f, 4.454490006e-06f, 4.529393892e-06f, 4.604282781e-06f, 4.679156543e-06f, 4.754015050e-06f,
+4.828858175e-06f, 4.903685789e-06f, 4.978497764e-06f, 5.053293972e-06f, 5.128074286e-06f, 5.202838577e-06f, 5.277586717e-06f, 5.352318580e-06f, 5.427034036e-06f, 5.501732958e-06f,
+5.576415219e-06f, 5.651080691e-06f, 5.725729246e-06f, 5.800360757e-06f, 5.874975096e-06f, 5.949572136e-06f, 6.024151749e-06f, 6.098713807e-06f, 6.173258184e-06f, 6.247784753e-06f,
+6.322293385e-06f, 6.396783953e-06f, 6.471256331e-06f, 6.545710392e-06f, 6.620146007e-06f, 6.694563051e-06f, 6.768961396e-06f, 6.843340915e-06f, 6.917701481e-06f, 6.992042968e-06f,
+7.066365248e-06f, 7.140668194e-06f, 7.214951681e-06f, 7.289215581e-06f, 7.363459768e-06f, 7.437684114e-06f, 7.511888494e-06f, 7.586072781e-06f, 7.660236849e-06f, 7.734380571e-06f,
+7.808503820e-06f, 7.882606471e-06f, 7.956688396e-06f, 8.030749471e-06f, 8.104789568e-06f, 8.178808562e-06f, 8.252806327e-06f, 8.326782735e-06f, 8.400737663e-06f, 8.474670982e-06f,
+8.548582569e-06f, 8.622472296e-06f, 8.696340038e-06f, 8.770185670e-06f, 8.844009065e-06f, 8.917810098e-06f, 8.991588644e-06f, 9.065344576e-06f, 9.139077770e-06f, 9.212788099e-06f,
+9.286475439e-06f, 9.360139665e-06f, 9.433780650e-06f, 9.507398270e-06f, 9.580992400e-06f, 9.654562914e-06f, 9.728109687e-06f, 9.801632595e-06f, 9.875131512e-06f, 9.948606314e-06f,
+1.002205688e-05f, 1.009548307e-05f, 1.016888478e-05f, 1.024226187e-05f, 1.031561422e-05f, 1.038894171e-05f, 1.046224421e-05f, 1.053552160e-05f, 1.060877375e-05f, 1.068200054e-05f,
+1.075520184e-05f, 1.082837753e-05f, 1.090152749e-05f, 1.097465159e-05f, 1.104774971e-05f, 1.112082172e-05f, 1.119386750e-05f, 1.126688692e-05f, 1.133987987e-05f, 1.141284622e-05f,
+1.148578584e-05f, 1.155869861e-05f, 1.163158440e-05f, 1.170444311e-05f, 1.177727459e-05f, 1.185007872e-05f, 1.192285539e-05f, 1.199560447e-05f, 1.206832584e-05f, 1.214101937e-05f,
+1.221368494e-05f, 1.228632242e-05f, 1.235893170e-05f, 1.243151265e-05f, 1.250406515e-05f, 1.257658908e-05f, 1.264908430e-05f, 1.272155071e-05f, 1.279398818e-05f, 1.286639657e-05f,
+1.293877578e-05f, 1.301112568e-05f, 1.308344615e-05f, 1.315573706e-05f, 1.322799830e-05f, 1.330022973e-05f, 1.337243125e-05f, 1.344460272e-05f, 1.351674402e-05f, 1.358885503e-05f,
+1.366093564e-05f, 1.373298571e-05f, 1.380500513e-05f, 1.387699378e-05f, 1.394895152e-05f, 1.402087825e-05f, 1.409277384e-05f, 1.416463817e-05f, 1.423647112e-05f, 1.430827256e-05f,
+1.438004237e-05f, 1.445178044e-05f, 1.452348665e-05f, 1.459516086e-05f, 1.466680296e-05f, 1.473841284e-05f, 1.480999036e-05f, 1.488153541e-05f, 1.495304786e-05f, 1.502452761e-05f,
+1.509597452e-05f, 1.516738847e-05f, 1.523876935e-05f, 1.531011704e-05f, 1.538143140e-05f, 1.545271234e-05f, 1.552395971e-05f, 1.559517341e-05f, 1.566635332e-05f, 1.573749930e-05f,
+1.580861126e-05f, 1.587968905e-05f, 1.595073257e-05f, 1.602174170e-05f, 1.609271631e-05f, 1.616365628e-05f, 1.623456150e-05f, 1.630543185e-05f, 1.637626721e-05f, 1.644706745e-05f,
+1.651783247e-05f, 1.658856213e-05f, 1.665925632e-05f, 1.672991493e-05f, 1.680053783e-05f, 1.687112490e-05f, 1.694167603e-05f, 1.701219110e-05f, 1.708266998e-05f, 1.715311256e-05f,
+1.722351873e-05f, 1.729388836e-05f, 1.736422133e-05f, 1.743451753e-05f, 1.750477683e-05f, 1.757499913e-05f, 1.764518430e-05f, 1.771533223e-05f, 1.778544279e-05f, 1.785551587e-05f,
+1.792555135e-05f, 1.799554911e-05f, 1.806550904e-05f, 1.813543102e-05f, 1.820531493e-05f, 1.827516065e-05f, 1.834496807e-05f, 1.841473707e-05f, 1.848446754e-05f, 1.855415934e-05f,
+1.862381238e-05f, 1.869342653e-05f, 1.876300167e-05f, 1.883253769e-05f, 1.890203447e-05f, 1.897149190e-05f, 1.904090986e-05f, 1.911028823e-05f, 1.917962689e-05f, 1.924892573e-05f,
+1.931818464e-05f, 1.938740350e-05f, 1.945658219e-05f, 1.952572059e-05f, 1.959481859e-05f, 1.966387608e-05f, 1.973289294e-05f, 1.980186904e-05f, 1.987080429e-05f, 1.993969856e-05f,
+2.000855174e-05f, 2.007736371e-05f, 2.014613435e-05f, 2.021486356e-05f, 2.028355121e-05f, 2.035219719e-05f, 2.042080139e-05f, 2.048936370e-05f, 2.055788399e-05f, 2.062636215e-05f,
+2.069479807e-05f, 2.076319164e-05f, 2.083154274e-05f, 2.089985125e-05f, 2.096811706e-05f, 2.103634006e-05f, 2.110452013e-05f, 2.117265717e-05f, 2.124075104e-05f, 2.130880165e-05f,
+2.137680888e-05f, 2.144477262e-05f, 2.151269274e-05f, 2.158056914e-05f, 2.164840171e-05f, 2.171619033e-05f, 2.178393489e-05f, 2.185163527e-05f, 2.191929136e-05f, 2.198690306e-05f,
+2.205447024e-05f, 2.212199279e-05f, 2.218947061e-05f, 2.225690358e-05f, 2.232429158e-05f, 2.239163450e-05f, 2.245893224e-05f, 2.252618468e-05f, 2.259339171e-05f, 2.266055321e-05f,
+2.272766908e-05f, 2.279473920e-05f, 2.286176345e-05f, 2.292874174e-05f, 2.299567395e-05f, 2.306255996e-05f, 2.312939967e-05f, 2.319619296e-05f, 2.326293972e-05f, 2.332963984e-05f,
+2.339629322e-05f, 2.346289973e-05f, 2.352945927e-05f, 2.359597173e-05f, 2.366243700e-05f, 2.372885496e-05f, 2.379522551e-05f, 2.386154854e-05f, 2.392782393e-05f, 2.399405158e-05f,
+2.406023137e-05f, 2.412636320e-05f, 2.419244695e-05f, 2.425848252e-05f, 2.432446980e-05f, 2.439040867e-05f, 2.445629904e-05f, 2.452214078e-05f, 2.458793378e-05f, 2.465367795e-05f,
+2.471937317e-05f, 2.478501933e-05f, 2.485061632e-05f, 2.491616404e-05f, 2.498166237e-05f, 2.504711120e-05f, 2.511251044e-05f, 2.517785996e-05f, 2.524315967e-05f, 2.530840944e-05f,
+2.537360919e-05f, 2.543875879e-05f, 2.550385813e-05f, 2.556890712e-05f, 2.563390564e-05f, 2.569885359e-05f, 2.576375086e-05f, 2.582859733e-05f, 2.589339291e-05f, 2.595813748e-05f,
+2.602283094e-05f, 2.608747319e-05f, 2.615206411e-05f, 2.621660359e-05f, 2.628109154e-05f, 2.634552784e-05f, 2.640991239e-05f, 2.647424508e-05f, 2.653852580e-05f, 2.660275446e-05f,
+2.666693093e-05f, 2.673105513e-05f, 2.679512693e-05f, 2.685914624e-05f, 2.692311294e-05f, 2.698702694e-05f, 2.705088813e-05f, 2.711469640e-05f, 2.717845164e-05f, 2.724215376e-05f,
+2.730580264e-05f, 2.736939818e-05f, 2.743294028e-05f, 2.749642884e-05f, 2.755986373e-05f, 2.762324487e-05f, 2.768657215e-05f, 2.774984546e-05f, 2.781306470e-05f, 2.787622977e-05f,
+2.793934055e-05f, 2.800239695e-05f, 2.806539887e-05f, 2.812834619e-05f, 2.819123882e-05f, 2.825407664e-05f, 2.831685957e-05f, 2.837958749e-05f, 2.844226030e-05f, 2.850487790e-05f,
+2.856744019e-05f, 2.862994705e-05f, 2.869239840e-05f, 2.875479412e-05f, 2.881713411e-05f, 2.887941828e-05f, 2.894164651e-05f, 2.900381871e-05f, 2.906593478e-05f, 2.912799461e-05f,
+2.918999809e-05f, 2.925194514e-05f, 2.931383564e-05f, 2.937566950e-05f, 2.943744660e-05f, 2.949916686e-05f, 2.956083017e-05f, 2.962243643e-05f, 2.968398554e-05f, 2.974547739e-05f,
+2.980691189e-05f, 2.986828893e-05f, 2.992960842e-05f, 2.999087025e-05f, 3.005207433e-05f, 3.011322055e-05f, 3.017430881e-05f, 3.023533901e-05f, 3.029631105e-05f, 3.035722484e-05f,
+3.041808027e-05f, 3.047887724e-05f, 3.053961565e-05f, 3.060029541e-05f, 3.066091641e-05f, 3.072147856e-05f, 3.078198175e-05f, 3.084242589e-05f, 3.090281088e-05f, 3.096313661e-05f,
+3.102340300e-05f, 3.108360993e-05f, 3.114375732e-05f, 3.120384507e-05f, 3.126387307e-05f, 3.132384123e-05f, 3.138374945e-05f, 3.144359763e-05f, 3.150338568e-05f, 3.156311349e-05f,
+3.162278097e-05f, 3.168238803e-05f, 3.174193455e-05f, 3.180142046e-05f, 3.186084564e-05f, 3.192021001e-05f, 3.197951346e-05f, 3.203875591e-05f, 3.209793724e-05f, 3.215705737e-05f,
+3.221611620e-05f, 3.227511363e-05f, 3.233404957e-05f, 3.239292393e-05f, 3.245173659e-05f, 3.251048748e-05f, 3.256917648e-05f, 3.262780352e-05f, 3.268636849e-05f, 3.274487129e-05f,
+3.280331184e-05f, 3.286169003e-05f, 3.292000577e-05f, 3.297825897e-05f, 3.303644953e-05f, 3.309457735e-05f, 3.315264235e-05f, 3.321064443e-05f, 3.326858349e-05f, 3.332645944e-05f,
+3.338427218e-05f, 3.344202162e-05f, 3.349970768e-05f, 3.355733024e-05f, 3.361488922e-05f, 3.367238454e-05f, 3.372981608e-05f, 3.378718376e-05f, 3.384448749e-05f, 3.390172717e-05f,
+3.395890271e-05f, 3.401601402e-05f, 3.407306101e-05f, 3.413004357e-05f, 3.418696163e-05f, 3.424381508e-05f, 3.430060384e-05f, 3.435732782e-05f, 3.441398691e-05f, 3.447058103e-05f,
+3.452711009e-05f, 3.458357400e-05f, 3.463997266e-05f, 3.469630599e-05f, 3.475257389e-05f, 3.480877626e-05f, 3.486491303e-05f, 3.492098410e-05f, 3.497698937e-05f, 3.503292877e-05f,
+3.508880219e-05f, 3.514460955e-05f, 3.520035075e-05f, 3.525602571e-05f, 3.531163434e-05f, 3.536717654e-05f, 3.542265223e-05f, 3.547806132e-05f, 3.553340372e-05f, 3.558867933e-05f,
+3.564388808e-05f, 3.569902986e-05f, 3.575410459e-05f, 3.580911219e-05f, 3.586405256e-05f, 3.591892561e-05f, 3.597373127e-05f, 3.602846942e-05f, 3.608314000e-05f, 3.613774291e-05f,
+3.619227806e-05f, 3.624674537e-05f, 3.630114475e-05f, 3.635547610e-05f, 3.640973935e-05f, 3.646393441e-05f, 3.651806118e-05f, 3.657211958e-05f, 3.662610953e-05f, 3.668003093e-05f,
+3.673388371e-05f, 3.678766777e-05f, 3.684138302e-05f, 3.689502939e-05f, 3.694860678e-05f, 3.700211511e-05f, 3.705555429e-05f, 3.710892424e-05f, 3.716222486e-05f, 3.721545609e-05f,
+3.726861782e-05f, 3.732170998e-05f, 3.737473248e-05f, 3.742768523e-05f, 3.748056815e-05f, 3.753338116e-05f, 3.758612416e-05f, 3.763879708e-05f, 3.769139983e-05f, 3.774393233e-05f,
+3.779639449e-05f, 3.784878623e-05f, 3.790110746e-05f, 3.795335810e-05f, 3.800553807e-05f, 3.805764729e-05f, 3.810968566e-05f, 3.816165311e-05f, 3.821354955e-05f, 3.826537491e-05f,
+3.831712909e-05f, 3.836881201e-05f, 3.842042360e-05f, 3.847196377e-05f, 3.852343244e-05f, 3.857482952e-05f, 3.862615493e-05f, 3.867740860e-05f, 3.872859043e-05f, 3.877970035e-05f,
+3.883073828e-05f, 3.888170414e-05f, 3.893259783e-05f, 3.898341929e-05f, 3.903416843e-05f, 3.908484517e-05f, 3.913544944e-05f, 3.918598113e-05f, 3.923644019e-05f, 3.928682653e-05f,
+3.933714006e-05f, 3.938738072e-05f, 3.943754841e-05f, 3.948764305e-05f, 3.953766458e-05f, 3.958761291e-05f, 3.963748795e-05f, 3.968728964e-05f, 3.973701788e-05f, 3.978667261e-05f,
+3.983625374e-05f, 3.988576120e-05f, 3.993519490e-05f, 3.998455476e-05f, 4.003384072e-05f, 4.008305269e-05f, 4.013219059e-05f, 4.018125435e-05f, 4.023024388e-05f, 4.027915911e-05f,
+4.032799996e-05f, 4.037676636e-05f, 4.042545822e-05f, 4.047407548e-05f, 4.052261805e-05f, 4.057108585e-05f, 4.061947881e-05f, 4.066779686e-05f, 4.071603991e-05f, 4.076420789e-05f,
+4.081230073e-05f, 4.086031834e-05f, 4.090826066e-05f, 4.095612760e-05f, 4.100391910e-05f, 4.105163507e-05f, 4.109927543e-05f, 4.114684013e-05f, 4.119432907e-05f, 4.124174219e-05f,
+4.128907941e-05f, 4.133634065e-05f, 4.138352585e-05f, 4.143063492e-05f, 4.147766779e-05f, 4.152462439e-05f, 4.157150465e-05f, 4.161830848e-05f, 4.166503582e-05f, 4.171168660e-05f,
+4.175826074e-05f, 4.180475816e-05f, 4.185117879e-05f, 4.189752257e-05f, 4.194378941e-05f, 4.198997925e-05f, 4.203609201e-05f, 4.208212763e-05f, 4.212808601e-05f, 4.217396711e-05f,
+4.221977084e-05f, 4.226549713e-05f, 4.231114591e-05f, 4.235671711e-05f, 4.240221066e-05f, 4.244762648e-05f, 4.249296450e-05f, 4.253822467e-05f, 4.258340689e-05f, 4.262851110e-05f,
+4.267353724e-05f, 4.271848523e-05f, 4.276335500e-05f, 4.280814648e-05f, 4.285285960e-05f, 4.289749429e-05f, 4.294205049e-05f, 4.298652811e-05f, 4.303092710e-05f, 4.307524738e-05f,
+4.311948888e-05f, 4.316365154e-05f, 4.320773528e-05f, 4.325174004e-05f, 4.329566575e-05f, 4.333951234e-05f, 4.338327974e-05f, 4.342696789e-05f, 4.347057671e-05f, 4.351410614e-05f,
+4.355755611e-05f, 4.360092655e-05f, 4.364421740e-05f, 4.368742858e-05f, 4.373056004e-05f, 4.377361170e-05f, 4.381658349e-05f, 4.385947536e-05f, 4.390228723e-05f, 4.394501903e-05f,
+4.398767071e-05f, 4.403024219e-05f, 4.407273342e-05f, 4.411514431e-05f, 4.415747481e-05f, 4.419972486e-05f, 4.424189438e-05f, 4.428398331e-05f, 4.432599159e-05f, 4.436791914e-05f,
+4.440976592e-05f, 4.445153185e-05f, 4.449321686e-05f, 4.453482089e-05f, 4.457634389e-05f, 4.461778578e-05f, 4.465914650e-05f, 4.470042599e-05f, 4.474162417e-05f, 4.478274100e-05f,
+4.482377641e-05f, 4.486473033e-05f, 4.490560270e-05f, 4.494639345e-05f, 4.498710253e-05f, 4.502772987e-05f, 4.506827541e-05f, 4.510873909e-05f, 4.514912084e-05f, 4.518942061e-05f,
+4.522963832e-05f, 4.526977393e-05f, 4.530982736e-05f, 4.534979856e-05f, 4.538968746e-05f, 4.542949401e-05f, 4.546921814e-05f, 4.550885979e-05f, 4.554841891e-05f, 4.558789542e-05f,
+4.562728928e-05f, 4.566660041e-05f, 4.570582877e-05f, 4.574497428e-05f, 4.578403690e-05f, 4.582301655e-05f, 4.586191319e-05f, 4.590072675e-05f, 4.593945717e-05f, 4.597810439e-05f,
+4.601666836e-05f, 4.605514902e-05f, 4.609354630e-05f, 4.613186015e-05f, 4.617009051e-05f, 4.620823733e-05f, 4.624630054e-05f, 4.628428008e-05f, 4.632217591e-05f, 4.635998795e-05f,
+4.639771616e-05f, 4.643536048e-05f, 4.647292084e-05f, 4.651039720e-05f, 4.654778950e-05f, 4.658509767e-05f, 4.662232167e-05f, 4.665946143e-05f, 4.669651691e-05f, 4.673348803e-05f,
+4.677037476e-05f, 4.680717703e-05f, 4.684389478e-05f, 4.688052797e-05f, 4.691707654e-05f, 4.695354042e-05f, 4.698991957e-05f, 4.702621393e-05f, 4.706242345e-05f, 4.709854808e-05f,
+4.713458775e-05f, 4.717054241e-05f, 4.720641201e-05f, 4.724219650e-05f, 4.727789582e-05f, 4.731350992e-05f, 4.734903874e-05f, 4.738448224e-05f, 4.741984035e-05f, 4.745511303e-05f,
+4.749030023e-05f, 4.752540188e-05f, 4.756041794e-05f, 4.759534835e-05f, 4.763019307e-05f, 4.766495204e-05f, 4.769962520e-05f, 4.773421252e-05f, 4.776871393e-05f, 4.780312938e-05f,
+4.783745883e-05f, 4.787170222e-05f, 4.790585950e-05f, 4.793993061e-05f, 4.797391552e-05f, 4.800781417e-05f, 4.804162650e-05f, 4.807535247e-05f, 4.810899203e-05f, 4.814254513e-05f,
+4.817601172e-05f, 4.820939174e-05f, 4.824268515e-05f, 4.827589191e-05f, 4.830901195e-05f, 4.834204524e-05f, 4.837499172e-05f, 4.840785134e-05f, 4.844062406e-05f, 4.847330982e-05f,
+4.850590859e-05f, 4.853842030e-05f, 4.857084492e-05f, 4.860318240e-05f, 4.863543268e-05f, 4.866759572e-05f, 4.869967148e-05f, 4.873165990e-05f, 4.876356094e-05f, 4.879537455e-05f,
+4.882710069e-05f, 4.885873931e-05f, 4.889029036e-05f, 4.892175380e-05f, 4.895312957e-05f, 4.898441764e-05f, 4.901561796e-05f, 4.904673049e-05f, 4.907775517e-05f, 4.910869196e-05f,
+4.913954083e-05f, 4.917030171e-05f, 4.920097457e-05f, 4.923155937e-05f, 4.926205605e-05f, 4.929246458e-05f, 4.932278491e-05f, 4.935301700e-05f, 4.938316079e-05f, 4.941321626e-05f,
+4.944318335e-05f, 4.947306202e-05f, 4.950285224e-05f, 4.953255394e-05f, 4.956216710e-05f, 4.959169168e-05f, 4.962112761e-05f, 4.965047488e-05f, 4.967973342e-05f, 4.970890321e-05f,
+4.973798419e-05f, 4.976697633e-05f, 4.979587959e-05f, 4.982469392e-05f, 4.985341928e-05f, 4.988205564e-05f, 4.991060294e-05f, 4.993906116e-05f, 4.996743024e-05f, 4.999571015e-05f,
+5.002390085e-05f, 5.005200229e-05f, 5.008001445e-05f, 5.010793727e-05f, 5.013577072e-05f, 5.016351476e-05f, 5.019116934e-05f, 5.021873444e-05f, 5.024621001e-05f, 5.027359600e-05f,
+5.030089240e-05f, 5.032809914e-05f, 5.035521620e-05f, 5.038224354e-05f, 5.040918112e-05f, 5.043602890e-05f, 5.046278684e-05f, 5.048945491e-05f, 5.051603307e-05f, 5.054252127e-05f,
+5.056891949e-05f, 5.059522769e-05f, 5.062144583e-05f, 5.064757387e-05f, 5.067361178e-05f, 5.069955952e-05f, 5.072541705e-05f, 5.075118434e-05f, 5.077686135e-05f, 5.080244805e-05f,
+5.082794440e-05f, 5.085335036e-05f, 5.087866590e-05f, 5.090389099e-05f, 5.092902559e-05f, 5.095406966e-05f, 5.097902317e-05f, 5.100388609e-05f, 5.102865838e-05f, 5.105334001e-05f,
+5.107793094e-05f, 5.110243114e-05f, 5.112684058e-05f, 5.115115922e-05f, 5.117538703e-05f, 5.119952397e-05f, 5.122357002e-05f, 5.124752514e-05f, 5.127138929e-05f, 5.129516245e-05f,
+5.131884458e-05f, 5.134243565e-05f, 5.136593563e-05f, 5.138934448e-05f, 5.141266218e-05f, 5.143588869e-05f, 5.145902399e-05f, 5.148206803e-05f, 5.150502079e-05f, 5.152788224e-05f,
+5.155065235e-05f, 5.157333108e-05f, 5.159591841e-05f, 5.161841431e-05f, 5.164081874e-05f, 5.166313168e-05f, 5.168535309e-05f, 5.170748295e-05f, 5.172952122e-05f, 5.175146789e-05f,
+5.177332291e-05f, 5.179508626e-05f, 5.181675791e-05f, 5.183833783e-05f, 5.185982600e-05f, 5.188122238e-05f, 5.190252694e-05f, 5.192373967e-05f, 5.194486053e-05f, 5.196588949e-05f,
+5.198682652e-05f, 5.200767160e-05f, 5.202842471e-05f, 5.204908580e-05f, 5.206965487e-05f, 5.209013187e-05f, 5.211051679e-05f, 5.213080959e-05f, 5.215101026e-05f, 5.217111876e-05f,
+5.219113507e-05f, 5.221105916e-05f, 5.223089101e-05f, 5.225063059e-05f, 5.227027787e-05f, 5.228983284e-05f, 5.230929547e-05f, 5.232866573e-05f, 5.234794359e-05f, 5.236712904e-05f,
+5.238622204e-05f, 5.240522258e-05f, 5.242413063e-05f, 5.244294617e-05f, 5.246166917e-05f, 5.248029961e-05f, 5.249883746e-05f, 5.251728271e-05f, 5.253563532e-05f, 5.255389529e-05f,
+5.257206257e-05f, 5.259013716e-05f, 5.260811903e-05f, 5.262600816e-05f, 5.264380452e-05f, 5.266150809e-05f, 5.267911885e-05f, 5.269663679e-05f, 5.271406187e-05f, 5.273139408e-05f,
+5.274863340e-05f, 5.276577980e-05f, 5.278283327e-05f, 5.279979378e-05f, 5.281666131e-05f, 5.283343585e-05f, 5.285011737e-05f, 5.286670585e-05f, 5.288320128e-05f, 5.289960363e-05f,
+5.291591289e-05f, 5.293212903e-05f, 5.294825204e-05f, 5.296428189e-05f, 5.298021858e-05f, 5.299606207e-05f, 5.301181236e-05f, 5.302746941e-05f, 5.304303323e-05f, 5.305850378e-05f,
+5.307388105e-05f, 5.308916502e-05f, 5.310435567e-05f, 5.311945299e-05f, 5.313445696e-05f, 5.314936757e-05f, 5.316418479e-05f, 5.317890861e-05f, 5.319353901e-05f, 5.320807598e-05f,
+5.322251950e-05f, 5.323686955e-05f, 5.325112612e-05f, 5.326528919e-05f, 5.327935876e-05f, 5.329333479e-05f, 5.330721728e-05f, 5.332100621e-05f, 5.333470157e-05f, 5.334830334e-05f,
+5.336181150e-05f, 5.337522605e-05f, 5.338854697e-05f, 5.340177425e-05f, 5.341490786e-05f, 5.342794781e-05f, 5.344089406e-05f, 5.345374662e-05f, 5.346650547e-05f, 5.347917058e-05f,
+5.349174196e-05f, 5.350421959e-05f, 5.351660346e-05f, 5.352889354e-05f, 5.354108984e-05f, 5.355319234e-05f, 5.356520103e-05f, 5.357711589e-05f, 5.358893691e-05f, 5.360066409e-05f,
+5.361229741e-05f, 5.362383686e-05f, 5.363528242e-05f, 5.364663410e-05f, 5.365789187e-05f, 5.366905573e-05f, 5.368012567e-05f, 5.369110168e-05f, 5.370198374e-05f, 5.371277185e-05f,
+5.372346600e-05f, 5.373406617e-05f, 5.374457237e-05f, 5.375498457e-05f, 5.376530278e-05f, 5.377552697e-05f, 5.378565715e-05f, 5.379569331e-05f, 5.380563543e-05f, 5.381548351e-05f,
+5.382523754e-05f, 5.383489751e-05f, 5.384446342e-05f, 5.385393525e-05f, 5.386331301e-05f, 5.387259667e-05f, 5.388178625e-05f, 5.389088172e-05f, 5.389988309e-05f, 5.390879034e-05f,
+5.391760347e-05f, 5.392632247e-05f, 5.393494734e-05f, 5.394347807e-05f, 5.395191466e-05f, 5.396025710e-05f, 5.396850538e-05f, 5.397665950e-05f, 5.398471946e-05f, 5.399268524e-05f,
+5.400055685e-05f, 5.400833428e-05f, 5.401601753e-05f, 5.402360659e-05f, 5.403110146e-05f, 5.403850213e-05f, 5.404580860e-05f, 5.405302087e-05f, 5.406013892e-05f, 5.406716277e-05f,
+5.407409241e-05f, 5.408092783e-05f, 5.408766903e-05f, 5.409431601e-05f, 5.410086877e-05f, 5.410732730e-05f, 5.411369160e-05f, 5.411996167e-05f, 5.412613751e-05f, 5.413221911e-05f,
+5.413820648e-05f, 5.414409962e-05f, 5.414989851e-05f, 5.415560317e-05f, 5.416121359e-05f, 5.416672976e-05f, 5.417215170e-05f, 5.417747940e-05f, 5.418271285e-05f, 5.418785207e-05f,
+5.419289704e-05f, 5.419784778e-05f, 5.420270427e-05f, 5.420746653e-05f, 5.421213454e-05f, 5.421670832e-05f, 5.422118787e-05f, 5.422557318e-05f, 5.422986425e-05f, 5.423406110e-05f,
+5.423816371e-05f, 5.424217209e-05f, 5.424608625e-05f, 5.424990619e-05f, 5.425363191e-05f, 5.425726340e-05f, 5.426080069e-05f, 5.426424375e-05f, 5.426759261e-05f, 5.427084727e-05f,
+5.427400772e-05f, 5.427707397e-05f, 5.428004602e-05f, 5.428292389e-05f, 5.428570757e-05f, 5.428839706e-05f, 5.429099237e-05f, 5.429349352e-05f, 5.429590049e-05f, 5.429821329e-05f,
+5.430043194e-05f, 5.430255644e-05f, 5.430458678e-05f, 5.430652298e-05f, 5.430836505e-05f, 5.431011298e-05f, 5.431176678e-05f, 5.431332647e-05f, 5.431479205e-05f, 5.431616351e-05f,
+5.431744088e-05f, 5.431862416e-05f, 5.431971334e-05f, 5.432070845e-05f, 5.432160949e-05f, 5.432241647e-05f, 5.432312939e-05f, 5.432374826e-05f, 5.432427309e-05f, 5.432470388e-05f,
+5.432504066e-05f, 5.432528342e-05f, 5.432543217e-05f, 5.432548692e-05f, 5.432544768e-05f, 5.432531447e-05f, 5.432508728e-05f, 5.432476613e-05f, 5.432435103e-05f, 5.432384199e-05f,
+5.432323902e-05f, 5.432254212e-05f, 5.432175132e-05f, 5.432086661e-05f, 5.431988801e-05f, 5.431881553e-05f, 5.431764919e-05f, 5.431638898e-05f, 5.431503493e-05f, 5.431358704e-05f,
+5.431204533e-05f, 5.431040981e-05f, 5.430868049e-05f, 5.430685738e-05f, 5.430494049e-05f, 5.430292984e-05f, 5.430082544e-05f, 5.429862730e-05f, 5.429633543e-05f, 5.429394985e-05f,
+5.429147058e-05f, 5.428889761e-05f, 5.428623098e-05f, 5.428347068e-05f, 5.428061674e-05f, 5.427766917e-05f, 5.427462798e-05f, 5.427149319e-05f, 5.426826481e-05f, 5.426494286e-05f,
+5.426152735e-05f, 5.425801829e-05f, 5.425441571e-05f, 5.425071961e-05f, 5.424693002e-05f, 5.424304694e-05f, 5.423907039e-05f, 5.423500039e-05f, 5.423083696e-05f, 5.422658011e-05f,
+5.422222986e-05f, 5.421778622e-05f, 5.421324921e-05f, 5.420861885e-05f, 5.420389515e-05f, 5.419907814e-05f, 5.419416782e-05f, 5.418916422e-05f, 5.418406736e-05f, 5.417887725e-05f,
+5.417359390e-05f, 5.416821735e-05f, 5.416274760e-05f, 5.415718468e-05f, 5.415152860e-05f, 5.414577938e-05f, 5.413993705e-05f, 5.413400161e-05f, 5.412797310e-05f, 5.412185152e-05f,
+5.411563690e-05f, 5.410932926e-05f, 5.410292862e-05f, 5.409643500e-05f, 5.408984841e-05f, 5.408316889e-05f, 5.407639644e-05f, 5.406953110e-05f, 5.406257287e-05f, 5.405552178e-05f,
+5.404837786e-05f, 5.404114113e-05f, 5.403381159e-05f, 5.402638929e-05f, 5.401887424e-05f, 5.401126645e-05f, 5.400356596e-05f, 5.399577279e-05f, 5.398788695e-05f, 5.397990847e-05f,
+5.397183738e-05f, 5.396367369e-05f, 5.395541743e-05f, 5.394706863e-05f, 5.393862730e-05f, 5.393009347e-05f, 5.392146716e-05f, 5.391274840e-05f, 5.390393721e-05f, 5.389503361e-05f,
+5.388603764e-05f, 5.387694931e-05f, 5.386776864e-05f, 5.385849567e-05f, 5.384913042e-05f, 5.383967291e-05f, 5.383012317e-05f, 5.382048122e-05f, 5.381074710e-05f, 5.380092081e-05f,
+5.379100240e-05f, 5.378099189e-05f, 5.377088930e-05f, 5.376069466e-05f, 5.375040800e-05f, 5.374002933e-05f, 5.372955870e-05f, 5.371899613e-05f, 5.370834164e-05f, 5.369759526e-05f,
+5.368675702e-05f, 5.367582694e-05f, 5.366480506e-05f, 5.365369141e-05f, 5.364248600e-05f, 5.363118887e-05f, 5.361980004e-05f, 5.360831956e-05f, 5.359674743e-05f, 5.358508370e-05f,
+5.357332839e-05f, 5.356148153e-05f, 5.354954316e-05f, 5.353751329e-05f, 5.352539196e-05f, 5.351317920e-05f, 5.350087504e-05f, 5.348847951e-05f, 5.347599264e-05f, 5.346341446e-05f,
+5.345074500e-05f, 5.343798429e-05f, 5.342513236e-05f, 5.341218925e-05f, 5.339915498e-05f, 5.338602959e-05f, 5.337281310e-05f, 5.335950555e-05f, 5.334610698e-05f, 5.333261741e-05f,
+5.331903687e-05f, 5.330536540e-05f, 5.329160302e-05f, 5.327774979e-05f, 5.326380571e-05f, 5.324977083e-05f, 5.323564519e-05f, 5.322142881e-05f, 5.320712172e-05f, 5.319272397e-05f,
+5.317823558e-05f, 5.316365659e-05f, 5.314898703e-05f, 5.313422694e-05f, 5.311937635e-05f, 5.310443530e-05f, 5.308940381e-05f, 5.307428193e-05f, 5.305906969e-05f, 5.304376712e-05f,
+5.302837426e-05f, 5.301289115e-05f, 5.299731782e-05f, 5.298165430e-05f, 5.296590064e-05f, 5.295005687e-05f, 5.293412301e-05f, 5.291809912e-05f, 5.290198523e-05f, 5.288578137e-05f,
+5.286948758e-05f, 5.285310389e-05f, 5.283663035e-05f, 5.282006699e-05f, 5.280341385e-05f, 5.278667097e-05f, 5.276983838e-05f, 5.275291612e-05f, 5.273590423e-05f, 5.271880274e-05f,
+5.270161170e-05f, 5.268433115e-05f, 5.266696112e-05f, 5.264950165e-05f, 5.263195278e-05f, 5.261431455e-05f, 5.259658700e-05f, 5.257877016e-05f, 5.256086409e-05f, 5.254286880e-05f,
+5.252478436e-05f, 5.250661079e-05f, 5.248834814e-05f, 5.246999644e-05f, 5.245155574e-05f, 5.243302608e-05f, 5.241440750e-05f, 5.239570004e-05f, 5.237690373e-05f, 5.235801863e-05f,
+5.233904476e-05f, 5.231998219e-05f, 5.230083093e-05f, 5.228159105e-05f, 5.226226257e-05f, 5.224284554e-05f, 5.222334001e-05f, 5.220374601e-05f, 5.218406359e-05f, 5.216429278e-05f,
+5.214443364e-05f, 5.212448621e-05f, 5.210445053e-05f, 5.208432663e-05f, 5.206411458e-05f, 5.204381440e-05f, 5.202342614e-05f, 5.200294985e-05f, 5.198238557e-05f, 5.196173335e-05f,
+5.194099322e-05f, 5.192016524e-05f, 5.189924944e-05f, 5.187824588e-05f, 5.185715459e-05f, 5.183597563e-05f, 5.181470903e-05f, 5.179335484e-05f, 5.177191311e-05f, 5.175038389e-05f,
+5.172876721e-05f, 5.170706313e-05f, 5.168527169e-05f, 5.166339293e-05f, 5.164142691e-05f, 5.161937367e-05f, 5.159723326e-05f, 5.157500571e-05f, 5.155269109e-05f, 5.153028944e-05f,
+5.150780079e-05f, 5.148522521e-05f, 5.146256274e-05f, 5.143981343e-05f, 5.141697732e-05f, 5.139405446e-05f, 5.137104490e-05f, 5.134794869e-05f, 5.132476588e-05f, 5.130149651e-05f,
+5.127814063e-05f, 5.125469830e-05f, 5.123116956e-05f, 5.120755446e-05f, 5.118385305e-05f, 5.116006538e-05f, 5.113619149e-05f, 5.111223145e-05f, 5.108818529e-05f, 5.106405307e-05f,
+5.103983484e-05f, 5.101553065e-05f, 5.099114054e-05f, 5.096666458e-05f, 5.094210280e-05f, 5.091745527e-05f, 5.089272202e-05f, 5.086790312e-05f, 5.084299862e-05f, 5.081800855e-05f,
+5.079293299e-05f, 5.076777197e-05f, 5.074252555e-05f, 5.071719379e-05f, 5.069177673e-05f, 5.066627442e-05f, 5.064068693e-05f, 5.061501429e-05f, 5.058925657e-05f, 5.056341381e-05f,
+5.053748608e-05f, 5.051147342e-05f, 5.048537588e-05f, 5.045919352e-05f, 5.043292640e-05f, 5.040657456e-05f, 5.038013806e-05f, 5.035361696e-05f, 5.032701130e-05f, 5.030032115e-05f,
+5.027354655e-05f, 5.024668757e-05f, 5.021974425e-05f, 5.019271665e-05f, 5.016560482e-05f, 5.013840883e-05f, 5.011112872e-05f, 5.008376456e-05f, 5.005631639e-05f, 5.002878427e-05f,
+5.000116826e-05f, 4.997346841e-05f, 4.994568479e-05f, 4.991781744e-05f, 4.988986642e-05f, 4.986183179e-05f, 4.983371361e-05f, 4.980551193e-05f, 4.977722680e-05f, 4.974885830e-05f,
+4.972040647e-05f, 4.969187136e-05f, 4.966325305e-05f, 4.963455158e-05f, 4.960576701e-05f, 4.957689941e-05f, 4.954794882e-05f, 4.951891531e-05f, 4.948979894e-05f, 4.946059976e-05f,
+4.943131783e-05f, 4.940195322e-05f, 4.937250597e-05f, 4.934297615e-05f, 4.931336382e-05f, 4.928366904e-05f, 4.925389186e-05f, 4.922403235e-05f, 4.919409057e-05f, 4.916406657e-05f,
+4.913396041e-05f, 4.910377216e-05f, 4.907350188e-05f, 4.904314962e-05f, 4.901271544e-05f, 4.898219942e-05f, 4.895160160e-05f, 4.892092205e-05f, 4.889016083e-05f, 4.885931800e-05f,
+4.882839362e-05f, 4.879738775e-05f, 4.876630046e-05f, 4.873513181e-05f, 4.870388185e-05f, 4.867255065e-05f, 4.864113828e-05f, 4.860964479e-05f, 4.857807024e-05f, 4.854641471e-05f,
+4.851467824e-05f, 4.848286091e-05f, 4.845096278e-05f, 4.841898391e-05f, 4.838692436e-05f, 4.835478420e-05f, 4.832256349e-05f, 4.829026229e-05f, 4.825788067e-05f, 4.822541870e-05f,
+4.819287642e-05f, 4.816025392e-05f, 4.812755125e-05f, 4.809476847e-05f, 4.806190566e-05f, 4.802896288e-05f, 4.799594019e-05f, 4.796283765e-05f, 4.792965534e-05f, 4.789639331e-05f,
+4.786305163e-05f, 4.782963037e-05f, 4.779612960e-05f, 4.776254937e-05f, 4.772888976e-05f, 4.769515083e-05f, 4.766133264e-05f, 4.762743526e-05f, 4.759345877e-05f, 4.755940322e-05f,
+4.752526868e-05f, 4.749105522e-05f, 4.745676291e-05f, 4.742239180e-05f, 4.738794198e-05f, 4.735341350e-05f, 4.731880644e-05f, 4.728412086e-05f, 4.724935683e-05f, 4.721451441e-05f,
+4.717959368e-05f, 4.714459470e-05f, 4.710951755e-05f, 4.707436228e-05f, 4.703912897e-05f, 4.700381768e-05f, 4.696842849e-05f, 4.693296147e-05f, 4.689741667e-05f, 4.686179418e-05f,
+4.682609406e-05f, 4.679031638e-05f, 4.675446120e-05f, 4.671852861e-05f, 4.668251866e-05f, 4.664643144e-05f, 4.661026700e-05f, 4.657402541e-05f, 4.653770676e-05f, 4.650131111e-05f,
+4.646483852e-05f, 4.642828908e-05f, 4.639166284e-05f, 4.635495989e-05f, 4.631818029e-05f, 4.628132411e-05f, 4.624439142e-05f, 4.620738230e-05f, 4.617029682e-05f, 4.613313505e-05f,
+4.609589706e-05f, 4.605858292e-05f, 4.602119270e-05f, 4.598372648e-05f, 4.594618433e-05f, 4.590856632e-05f, 4.587087252e-05f, 4.583310301e-05f, 4.579525785e-05f, 4.575733713e-05f,
+4.571934091e-05f, 4.568126927e-05f, 4.564312228e-05f, 4.560490001e-05f, 4.556660254e-05f, 4.552822994e-05f, 4.548978228e-05f, 4.545125965e-05f, 4.541266210e-05f, 4.537398972e-05f,
+4.533524258e-05f, 4.529642076e-05f, 4.525752432e-05f, 4.521855335e-05f, 4.517950791e-05f, 4.514038809e-05f, 4.510119396e-05f, 4.506192559e-05f, 4.502258305e-05f, 4.498316643e-05f,
+4.494367580e-05f, 4.490411123e-05f, 4.486447281e-05f, 4.482476059e-05f, 4.478497467e-05f, 4.474511512e-05f, 4.470518201e-05f, 4.466517542e-05f, 4.462509542e-05f, 4.458494210e-05f,
+4.454471552e-05f, 4.450441578e-05f, 4.446404293e-05f, 4.442359706e-05f, 4.438307825e-05f, 4.434248658e-05f, 4.430182211e-05f, 4.426108494e-05f, 4.422027513e-05f, 4.417939276e-05f,
+4.413843791e-05f, 4.409741067e-05f, 4.405631110e-05f, 4.401513928e-05f, 4.397389530e-05f, 4.393257923e-05f, 4.389119115e-05f, 4.384973115e-05f, 4.380819928e-05f, 4.376659565e-05f,
+4.372492032e-05f, 4.368317337e-05f, 4.364135489e-05f, 4.359946495e-05f, 4.355750364e-05f, 4.351547103e-05f, 4.347336719e-05f, 4.343119222e-05f, 4.338894619e-05f, 4.334662918e-05f,
+4.330424128e-05f, 4.326178255e-05f, 4.321925309e-05f, 4.317665296e-05f, 4.313398227e-05f, 4.309124107e-05f, 4.304842946e-05f, 4.300554751e-05f, 4.296259531e-05f, 4.291957294e-05f,
+4.287648048e-05f, 4.283331800e-05f, 4.279008560e-05f, 4.274678335e-05f, 4.270341134e-05f, 4.265996964e-05f, 4.261645834e-05f, 4.257287752e-05f, 4.252922727e-05f, 4.248550766e-05f,
+4.244171877e-05f, 4.239786070e-05f, 4.235393351e-05f, 4.230993731e-05f, 4.226587216e-05f, 4.222173815e-05f, 4.217753537e-05f, 4.213326389e-05f, 4.208892380e-05f, 4.204451519e-05f,
+4.200003813e-05f, 4.195549271e-05f, 4.191087902e-05f, 4.186619714e-05f, 4.182144715e-05f, 4.177662913e-05f, 4.173174318e-05f, 4.168678937e-05f, 4.164176779e-05f, 4.159667852e-05f,
+4.155152165e-05f, 4.150629727e-05f, 4.146100545e-05f, 4.141564628e-05f, 4.137021985e-05f, 4.132472625e-05f, 4.127916555e-05f, 4.123353784e-05f, 4.118784321e-05f, 4.114208175e-05f,
+4.109625354e-05f, 4.105035866e-05f, 4.100439720e-05f, 4.095836926e-05f, 4.091227490e-05f, 4.086611423e-05f, 4.081988732e-05f, 4.077359426e-05f, 4.072723514e-05f, 4.068081005e-05f,
+4.063431907e-05f, 4.058776229e-05f, 4.054113979e-05f, 4.049445167e-05f, 4.044769801e-05f, 4.040087890e-05f, 4.035399442e-05f, 4.030704466e-05f, 4.026002972e-05f, 4.021294967e-05f,
+4.016580461e-05f, 4.011859462e-05f, 4.007131979e-05f, 4.002398021e-05f, 3.997657597e-05f, 3.992910715e-05f, 3.988157385e-05f, 3.983397615e-05f, 3.978631414e-05f, 3.973858792e-05f,
+3.969079756e-05f, 3.964294316e-05f, 3.959502480e-05f, 3.954704259e-05f, 3.949899659e-05f, 3.945088692e-05f, 3.940271364e-05f, 3.935447686e-05f, 3.930617666e-05f, 3.925781314e-05f,
+3.920938638e-05f, 3.916089647e-05f, 3.911234350e-05f, 3.906372757e-05f, 3.901504876e-05f, 3.896630716e-05f, 3.891750286e-05f, 3.886863596e-05f, 3.881970655e-05f, 3.877071471e-05f,
+3.872166054e-05f, 3.867254412e-05f, 3.862336556e-05f, 3.857412493e-05f, 3.852482233e-05f, 3.847545786e-05f, 3.842603160e-05f, 3.837654364e-05f, 3.832699408e-05f, 3.827738301e-05f,
+3.822771052e-05f, 3.817797670e-05f, 3.812818165e-05f, 3.807832545e-05f, 3.802840820e-05f, 3.797842999e-05f, 3.792839091e-05f, 3.787829106e-05f, 3.782813053e-05f, 3.777790941e-05f,
+3.772762779e-05f, 3.767728577e-05f, 3.762688344e-05f, 3.757642089e-05f, 3.752589822e-05f, 3.747531552e-05f, 3.742467287e-05f, 3.737397039e-05f, 3.732320815e-05f, 3.727238626e-05f,
+3.722150480e-05f, 3.717056388e-05f, 3.711956357e-05f, 3.706850399e-05f, 3.701738522e-05f, 3.696620736e-05f, 3.691497049e-05f, 3.686367473e-05f, 3.681232015e-05f, 3.676090686e-05f,
+3.670943494e-05f, 3.665790450e-05f, 3.660631563e-05f, 3.655466843e-05f, 3.650296298e-05f, 3.645119938e-05f, 3.639937774e-05f, 3.634749814e-05f, 3.629556068e-05f, 3.624356545e-05f,
+3.619151256e-05f, 3.613940209e-05f, 3.608723414e-05f, 3.603500881e-05f, 3.598272620e-05f, 3.593038640e-05f, 3.587798950e-05f, 3.582553561e-05f, 3.577302481e-05f, 3.572045721e-05f,
+3.566783290e-05f, 3.561515198e-05f, 3.556241454e-05f, 3.550962069e-05f, 3.545677051e-05f, 3.540386411e-05f, 3.535090158e-05f, 3.529788302e-05f, 3.524480853e-05f, 3.519167820e-05f,
+3.513849214e-05f, 3.508525043e-05f, 3.503195318e-05f, 3.497860048e-05f, 3.492519243e-05f, 3.487172913e-05f, 3.481821068e-05f, 3.476463718e-05f, 3.471100872e-05f, 3.465732540e-05f,
+3.460358732e-05f, 3.454979458e-05f, 3.449594727e-05f, 3.444204550e-05f, 3.438808936e-05f, 3.433407895e-05f, 3.428001438e-05f, 3.422589573e-05f, 3.417172312e-05f, 3.411749663e-05f,
+3.406321636e-05f, 3.400888243e-05f, 3.395449491e-05f, 3.390005392e-05f, 3.384555956e-05f, 3.379101192e-05f, 3.373641110e-05f, 3.368175720e-05f, 3.362705033e-05f, 3.357229057e-05f,
+3.351747804e-05f, 3.346261283e-05f, 3.340769505e-05f, 3.335272478e-05f, 3.329770214e-05f, 3.324262721e-05f, 3.318750012e-05f, 3.313232094e-05f, 3.307708979e-05f, 3.302180676e-05f,
+3.296647196e-05f, 3.291108548e-05f, 3.285564743e-05f, 3.280015791e-05f, 3.274461702e-05f, 3.268902486e-05f, 3.263338153e-05f, 3.257768713e-05f, 3.252194176e-05f, 3.246614553e-05f,
+3.241029853e-05f, 3.235440088e-05f, 3.229845266e-05f, 3.224245399e-05f, 3.218640495e-05f, 3.213030567e-05f, 3.207415623e-05f, 3.201795674e-05f, 3.196170730e-05f, 3.190540801e-05f,
+3.184905898e-05f, 3.179266031e-05f, 3.173621210e-05f, 3.167971445e-05f, 3.162316747e-05f, 3.156657125e-05f, 3.150992591e-05f, 3.145323154e-05f, 3.139648824e-05f, 3.133969613e-05f,
+3.128285530e-05f, 3.122596585e-05f, 3.116902790e-05f, 3.111204153e-05f, 3.105500686e-05f, 3.099792399e-05f, 3.094079302e-05f, 3.088361406e-05f, 3.082638720e-05f, 3.076911256e-05f,
+3.071179024e-05f, 3.065442034e-05f, 3.059700296e-05f, 3.053953821e-05f, 3.048202619e-05f, 3.042446701e-05f, 3.036686077e-05f, 3.030920757e-05f, 3.025150753e-05f, 3.019376073e-05f,
+3.013596730e-05f, 3.007812733e-05f, 3.002024093e-05f, 2.996230820e-05f, 2.990432924e-05f, 2.984630417e-05f, 2.978823308e-05f, 2.973011609e-05f, 2.967195329e-05f, 2.961374479e-05f,
+2.955549071e-05f, 2.949719113e-05f, 2.943884617e-05f, 2.938045593e-05f, 2.932202052e-05f, 2.926354005e-05f, 2.920501461e-05f, 2.914644432e-05f, 2.908782928e-05f, 2.902916960e-05f,
+2.897046538e-05f, 2.891171672e-05f, 2.885292374e-05f, 2.879408655e-05f, 2.873520523e-05f, 2.867627991e-05f, 2.861731069e-05f, 2.855829768e-05f, 2.849924097e-05f, 2.844014069e-05f,
+2.838099693e-05f, 2.832180980e-05f, 2.826257940e-05f, 2.820330585e-05f, 2.814398926e-05f, 2.808462972e-05f, 2.802522734e-05f, 2.796578224e-05f, 2.790629451e-05f, 2.784676428e-05f,
+2.778719163e-05f, 2.772757669e-05f, 2.766791955e-05f, 2.760822033e-05f, 2.754847913e-05f, 2.748869606e-05f, 2.742887122e-05f, 2.736900473e-05f, 2.730909670e-05f, 2.724914722e-05f,
+2.718915642e-05f, 2.712912438e-05f, 2.706905124e-05f, 2.700893708e-05f, 2.694878202e-05f, 2.688858617e-05f, 2.682834964e-05f, 2.676807253e-05f, 2.670775496e-05f, 2.664739702e-05f,
+2.658699883e-05f, 2.652656051e-05f, 2.646608214e-05f, 2.640556385e-05f, 2.634500575e-05f, 2.628440793e-05f, 2.622377052e-05f, 2.616309362e-05f, 2.610237733e-05f, 2.604162177e-05f,
+2.598082705e-05f, 2.591999327e-05f, 2.585912055e-05f, 2.579820899e-05f, 2.573725870e-05f, 2.567626980e-05f, 2.561524238e-05f, 2.555417657e-05f, 2.549307246e-05f, 2.543193017e-05f,
+2.537074982e-05f, 2.530953150e-05f, 2.524827533e-05f, 2.518698141e-05f, 2.512564987e-05f, 2.506428080e-05f, 2.500287432e-05f, 2.494143053e-05f, 2.487994955e-05f, 2.481843149e-05f,
+2.475687646e-05f, 2.469528456e-05f, 2.463365591e-05f, 2.457199062e-05f, 2.451028879e-05f, 2.444855054e-05f, 2.438677598e-05f, 2.432496523e-05f, 2.426311837e-05f, 2.420123554e-05f,
+2.413931684e-05f, 2.407736238e-05f, 2.401537228e-05f, 2.395334663e-05f, 2.389128556e-05f, 2.382918917e-05f, 2.376705758e-05f, 2.370489090e-05f, 2.364268923e-05f, 2.358045269e-05f,
+2.351818139e-05f, 2.345587543e-05f, 2.339353494e-05f, 2.333116003e-05f, 2.326875079e-05f, 2.320630736e-05f, 2.314382982e-05f, 2.308131831e-05f, 2.301877293e-05f, 2.295619379e-05f,
+2.289358100e-05f, 2.283093467e-05f, 2.276825493e-05f, 2.270554186e-05f, 2.264279560e-05f, 2.258001625e-05f, 2.251720393e-05f, 2.245435874e-05f, 2.239148079e-05f, 2.232857021e-05f,
+2.226562709e-05f, 2.220265156e-05f, 2.213964373e-05f, 2.207660370e-05f, 2.201353159e-05f, 2.195042752e-05f, 2.188729159e-05f, 2.182412391e-05f, 2.176092461e-05f, 2.169769378e-05f,
+2.163443155e-05f, 2.157113803e-05f, 2.150781333e-05f, 2.144445755e-05f, 2.138107083e-05f, 2.131765326e-05f, 2.125420496e-05f, 2.119072604e-05f, 2.112721662e-05f, 2.106367680e-05f,
+2.100010671e-05f, 2.093650646e-05f, 2.087287615e-05f, 2.080921590e-05f, 2.074552582e-05f, 2.068180603e-05f, 2.061805664e-05f, 2.055427776e-05f, 2.049046951e-05f, 2.042663200e-05f,
+2.036276534e-05f, 2.029886965e-05f, 2.023494504e-05f, 2.017099162e-05f, 2.010700950e-05f, 2.004299881e-05f, 1.997895965e-05f, 1.991489214e-05f, 1.985079638e-05f, 1.978667251e-05f,
+1.972252062e-05f, 1.965834083e-05f, 1.959413326e-05f, 1.952989802e-05f, 1.946563522e-05f, 1.940134498e-05f, 1.933702740e-05f, 1.927268262e-05f, 1.920831073e-05f, 1.914391186e-05f,
+1.907948612e-05f, 1.901503361e-05f, 1.895055446e-05f, 1.888604878e-05f, 1.882151669e-05f, 1.875695829e-05f, 1.869237371e-05f, 1.862776305e-05f, 1.856312643e-05f, 1.849846397e-05f,
+1.843377578e-05f, 1.836906198e-05f, 1.830432267e-05f, 1.823955797e-05f, 1.817476801e-05f, 1.810995288e-05f, 1.804511272e-05f, 1.798024762e-05f, 1.791535771e-05f, 1.785044311e-05f,
+1.778550392e-05f, 1.772054026e-05f, 1.765555224e-05f, 1.759053999e-05f, 1.752550361e-05f, 1.746044322e-05f, 1.739535893e-05f, 1.733025087e-05f, 1.726511914e-05f, 1.719996386e-05f,
+1.713478515e-05f, 1.706958312e-05f, 1.700435788e-05f, 1.693910955e-05f, 1.687383825e-05f, 1.680854409e-05f, 1.674322718e-05f, 1.667788765e-05f, 1.661252560e-05f, 1.654714115e-05f,
+1.648173442e-05f, 1.641630553e-05f, 1.635085458e-05f, 1.628538170e-05f, 1.621988699e-05f, 1.615437058e-05f, 1.608883258e-05f, 1.602327310e-05f, 1.595769227e-05f, 1.589209019e-05f,
+1.582646698e-05f, 1.576082276e-05f, 1.569515764e-05f, 1.562947175e-05f, 1.556376518e-05f, 1.549803807e-05f, 1.543229053e-05f, 1.536652266e-05f, 1.530073460e-05f, 1.523492644e-05f,
+1.516909832e-05f, 1.510325034e-05f, 1.503738262e-05f, 1.497149529e-05f, 1.490558844e-05f, 1.483966220e-05f, 1.477371669e-05f, 1.470775202e-05f, 1.464176830e-05f, 1.457576566e-05f,
+1.450974421e-05f, 1.444370406e-05f, 1.437764533e-05f, 1.431156814e-05f, 1.424547261e-05f, 1.417935884e-05f, 1.411322696e-05f, 1.404707709e-05f, 1.398090933e-05f, 1.391472380e-05f,
+1.384852063e-05f, 1.378229992e-05f, 1.371606180e-05f, 1.364980638e-05f, 1.358353377e-05f, 1.351724410e-05f, 1.345093747e-05f, 1.338461401e-05f, 1.331827384e-05f, 1.325191706e-05f,
+1.318554379e-05f, 1.311915416e-05f, 1.305274827e-05f, 1.298632625e-05f, 1.291988821e-05f, 1.285343427e-05f, 1.278696454e-05f, 1.272047914e-05f, 1.265397818e-05f, 1.258746179e-05f,
+1.252093009e-05f, 1.245438317e-05f, 1.238782118e-05f, 1.232124421e-05f, 1.225465239e-05f, 1.218804583e-05f, 1.212142465e-05f, 1.205478897e-05f, 1.198813890e-05f, 1.192147456e-05f,
+1.185479607e-05f, 1.178810355e-05f, 1.172139710e-05f, 1.165467686e-05f, 1.158794292e-05f, 1.152119542e-05f, 1.145443447e-05f, 1.138766018e-05f, 1.132087267e-05f, 1.125407206e-05f,
+1.118725847e-05f, 1.112043201e-05f, 1.105359280e-05f, 1.098674095e-05f, 1.091987659e-05f, 1.085299983e-05f, 1.078611079e-05f, 1.071920958e-05f, 1.065229632e-05f, 1.058537112e-05f,
+1.051843412e-05f, 1.045148541e-05f, 1.038452513e-05f, 1.031755338e-05f, 1.025057028e-05f, 1.018357595e-05f, 1.011657051e-05f, 1.004955408e-05f, 9.982526765e-06f, 9.915488689e-06f,
+9.848439968e-06f, 9.781380720e-06f, 9.714311061e-06f, 9.647231109e-06f, 9.580140980e-06f, 9.513040792e-06f, 9.445930662e-06f, 9.378810707e-06f, 9.311681044e-06f, 9.244541790e-06f,
+9.177393063e-06f, 9.110234979e-06f, 9.043067656e-06f, 8.975891210e-06f, 8.908705760e-06f, 8.841511421e-06f, 8.774308312e-06f, 8.707096549e-06f, 8.639876250e-06f, 8.572647532e-06f,
+8.505410511e-06f, 8.438165306e-06f, 8.370912033e-06f, 8.303650809e-06f, 8.236381752e-06f, 8.169104979e-06f, 8.101820607e-06f, 8.034528753e-06f, 7.967229534e-06f, 7.899923068e-06f,
+7.832609472e-06f, 7.765288863e-06f, 7.697961358e-06f, 7.630627074e-06f, 7.563286129e-06f, 7.495938640e-06f, 7.428584724e-06f, 7.361224497e-06f, 7.293858078e-06f, 7.226485584e-06f,
+7.159107132e-06f, 7.091722838e-06f, 7.024332820e-06f, 6.956937196e-06f, 6.889536083e-06f, 6.822129597e-06f, 6.754717855e-06f, 6.687300976e-06f, 6.619879077e-06f, 6.552452273e-06f,
+6.485020683e-06f, 6.417584424e-06f, 6.350143613e-06f, 6.282698367e-06f, 6.215248803e-06f, 6.147795039e-06f, 6.080337191e-06f, 6.012875377e-06f, 5.945409714e-06f, 5.877940319e-06f,
+5.810467309e-06f, 5.742990801e-06f, 5.675510912e-06f, 5.608027760e-06f, 5.540541462e-06f, 5.473052134e-06f, 5.405559895e-06f, 5.338064860e-06f, 5.270567147e-06f, 5.203066873e-06f,
+5.135564156e-06f, 5.068059111e-06f, 5.000551857e-06f, 4.933042510e-06f, 4.865531188e-06f, 4.798018007e-06f, 4.730503085e-06f, 4.662986538e-06f, 4.595468483e-06f, 4.527949038e-06f,
+4.460428320e-06f, 4.392906444e-06f, 4.325383530e-06f, 4.257859693e-06f, 4.190335050e-06f, 4.122809718e-06f, 4.055283815e-06f, 3.987757457e-06f, 3.920230761e-06f, 3.852703843e-06f,
+3.785176822e-06f, 3.717649814e-06f, 3.650122935e-06f, 3.582596303e-06f, 3.515070034e-06f, 3.447544245e-06f, 3.380019053e-06f, 3.312494575e-06f, 3.244970928e-06f, 3.177448227e-06f,
+3.109926592e-06f, 3.042406137e-06f, 2.974886979e-06f, 2.907369237e-06f, 2.839853025e-06f, 2.772338461e-06f, 2.704825662e-06f, 2.637314743e-06f, 2.569805823e-06f, 2.502299017e-06f,
+2.434794442e-06f, 2.367292215e-06f, 2.299792453e-06f, 2.232295271e-06f, 2.164800787e-06f, 2.097309117e-06f, 2.029820377e-06f, 1.962334685e-06f, 1.894852156e-06f, 1.827372907e-06f,
+1.759897055e-06f, 1.692424716e-06f, 1.624956006e-06f, 1.557491042e-06f, 1.490029941e-06f, 1.422572818e-06f, 1.355119790e-06f, 1.287670974e-06f, 1.220226485e-06f, 1.152786440e-06f,
+1.085350956e-06f, 1.017920148e-06f, 9.504941331e-07f, 8.830730272e-07f, 8.156569465e-07f, 7.482460072e-07f, 6.808403256e-07f, 6.134400178e-07f, 5.460451999e-07f, 4.786559880e-07f,
+4.112724983e-07f, 3.438948467e-07f, 2.765231493e-07f, 2.091575222e-07f, 1.417980813e-07f, 7.444494264e-08f, 7.098222190e-09f, -6.024196414e-08f, -1.275755004e-07f, -1.949022708e-07f,
+-2.622221593e-07f, -3.295350502e-07f, -3.968408277e-07f, -4.641393759e-07f, -5.314305790e-07f, -5.987143214e-07f, -6.659904872e-07f, -7.332589609e-07f, -8.005196266e-07f, -8.677723688e-07f,
+-9.350170719e-07f, -1.002253620e-06f, -1.069481898e-06f, -1.136701790e-06f, -1.203913181e-06f, -1.271115954e-06f, -1.338309996e-06f, -1.405495189e-06f, -1.472671419e-06f, -1.539838571e-06f,
+-1.606996528e-06f, -1.674145176e-06f, -1.741284400e-06f, -1.808414083e-06f, -1.875534111e-06f, -1.942644369e-06f, -2.009744741e-06f, -2.076835112e-06f, -2.143915368e-06f, -2.210985392e-06f,
+-2.278045070e-06f, -2.345094287e-06f, -2.412132927e-06f, -2.479160877e-06f, -2.546178020e-06f, -2.613184242e-06f, -2.680179428e-06f, -2.747163463e-06f, -2.814136232e-06f, -2.881097620e-06f,
+-2.948047513e-06f, -3.014985796e-06f, -3.081912354e-06f, -3.148827073e-06f, -3.215729837e-06f, -3.282620532e-06f, -3.349499044e-06f, -3.416365258e-06f, -3.483219060e-06f, -3.550060334e-06f,
+-3.616888966e-06f, -3.683704843e-06f, -3.750507850e-06f, -3.817297871e-06f, -3.884074794e-06f, -3.950838503e-06f, -4.017588885e-06f, -4.084325824e-06f, -4.151049208e-06f, -4.217758921e-06f,
+-4.284454850e-06f, -4.351136881e-06f, -4.417804899e-06f, -4.484458790e-06f, -4.551098441e-06f, -4.617723738e-06f, -4.684334566e-06f, -4.750930812e-06f, -4.817512362e-06f, -4.884079102e-06f,
+-4.950630918e-06f, -5.017167696e-06f, -5.083689324e-06f, -5.150195687e-06f, -5.216686671e-06f, -5.283162164e-06f, -5.349622051e-06f, -5.416066218e-06f, -5.482494554e-06f, -5.548906943e-06f,
+-5.615303273e-06f, -5.681683431e-06f, -5.748047302e-06f, -5.814394774e-06f, -5.880725734e-06f, -5.947040068e-06f, -6.013337663e-06f, -6.079618406e-06f, -6.145882184e-06f, -6.212128884e-06f,
+-6.278358393e-06f, -6.344570597e-06f, -6.410765385e-06f, -6.476942643e-06f, -6.543102259e-06f, -6.609244118e-06f, -6.675368110e-06f, -6.741474121e-06f, -6.807562038e-06f, -6.873631749e-06f,
+-6.939683141e-06f, -7.005716102e-06f, -7.071730519e-06f, -7.137726280e-06f, -7.203703272e-06f, -7.269661384e-06f, -7.335600501e-06f, -7.401520514e-06f, -7.467421308e-06f, -7.533302772e-06f,
+-7.599164794e-06f, -7.665007262e-06f, -7.730830064e-06f, -7.796633087e-06f, -7.862416220e-06f, -7.928179350e-06f, -7.993922367e-06f, -8.059645157e-06f, -8.125347610e-06f, -8.191029613e-06f,
+-8.256691055e-06f, -8.322331825e-06f, -8.387951810e-06f, -8.453550899e-06f, -8.519128980e-06f, -8.584685943e-06f, -8.650221676e-06f, -8.715736066e-06f, -8.781229004e-06f, -8.846700377e-06f,
+-8.912150075e-06f, -8.977577987e-06f, -9.042984001e-06f, -9.108368005e-06f, -9.173729890e-06f, -9.239069544e-06f, -9.304386857e-06f, -9.369681717e-06f, -9.434954013e-06f, -9.500203635e-06f,
+-9.565430472e-06f, -9.630634414e-06f, -9.695815349e-06f, -9.760973168e-06f, -9.826107759e-06f, -9.891219012e-06f, -9.956306817e-06f, -1.002137106e-05f, -1.008641164e-05f, -1.015142844e-05f,
+-1.021642135e-05f, -1.028139026e-05f, -1.034633506e-05f, -1.041125564e-05f, -1.047615189e-05f, -1.054102370e-05f, -1.060587096e-05f, -1.067069356e-05f, -1.073549139e-05f, -1.080026435e-05f,
+-1.086501231e-05f, -1.092973518e-05f, -1.099443284e-05f, -1.105910518e-05f, -1.112375209e-05f, -1.118837347e-05f, -1.125296920e-05f, -1.131753918e-05f, -1.138208329e-05f, -1.144660143e-05f,
+-1.151109349e-05f, -1.157555936e-05f, -1.163999892e-05f, -1.170441208e-05f, -1.176879872e-05f, -1.183315872e-05f, -1.189749200e-05f, -1.196179843e-05f, -1.202607790e-05f, -1.209033032e-05f,
+-1.215455556e-05f, -1.221875352e-05f, -1.228292410e-05f, -1.234706717e-05f, -1.241118265e-05f, -1.247527041e-05f, -1.253933035e-05f, -1.260336236e-05f, -1.266736634e-05f, -1.273134217e-05f,
+-1.279528974e-05f, -1.285920896e-05f, -1.292309970e-05f, -1.298696187e-05f, -1.305079535e-05f, -1.311460004e-05f, -1.317837584e-05f, -1.324212262e-05f, -1.330584029e-05f, -1.336952873e-05f,
+-1.343318785e-05f, -1.349681753e-05f, -1.356041767e-05f, -1.362398815e-05f, -1.368752887e-05f, -1.375103973e-05f, -1.381452062e-05f, -1.387797142e-05f, -1.394139204e-05f, -1.400478237e-05f,
+-1.406814229e-05f, -1.413147171e-05f, -1.419477051e-05f, -1.425803860e-05f, -1.432127585e-05f, -1.438448218e-05f, -1.444765746e-05f, -1.451080160e-05f, -1.457391449e-05f, -1.463699602e-05f,
+-1.470004608e-05f, -1.476306457e-05f, -1.482605139e-05f, -1.488900642e-05f, -1.495192957e-05f, -1.501482072e-05f, -1.507767977e-05f, -1.514050662e-05f, -1.520330115e-05f, -1.526606327e-05f,
+-1.532879287e-05f, -1.539148983e-05f, -1.545415407e-05f, -1.551678547e-05f, -1.557938392e-05f, -1.564194933e-05f, -1.570448158e-05f, -1.576698057e-05f, -1.582944620e-05f, -1.589187836e-05f,
+-1.595427695e-05f, -1.601664186e-05f, -1.607897299e-05f, -1.614127023e-05f, -1.620353348e-05f, -1.626576263e-05f, -1.632795759e-05f, -1.639011823e-05f, -1.645224447e-05f, -1.651433620e-05f,
+-1.657639331e-05f, -1.663841569e-05f, -1.670040325e-05f, -1.676235589e-05f, -1.682427348e-05f, -1.688615595e-05f, -1.694800317e-05f, -1.700981505e-05f, -1.707159148e-05f, -1.713333235e-05f,
+-1.719503758e-05f, -1.725670705e-05f, -1.731834065e-05f, -1.737993829e-05f, -1.744149986e-05f, -1.750302527e-05f, -1.756451440e-05f, -1.762596715e-05f, -1.768738343e-05f, -1.774876312e-05f,
+-1.781010613e-05f, -1.787141235e-05f, -1.793268168e-05f, -1.799391402e-05f, -1.805510926e-05f, -1.811626731e-05f, -1.817738806e-05f, -1.823847141e-05f, -1.829951725e-05f, -1.836052549e-05f,
+-1.842149602e-05f, -1.848242875e-05f, -1.854332356e-05f, -1.860418036e-05f, -1.866499904e-05f, -1.872577951e-05f, -1.878652167e-05f, -1.884722540e-05f, -1.890789062e-05f, -1.896851721e-05f,
+-1.902910508e-05f, -1.908965413e-05f, -1.915016425e-05f, -1.921063535e-05f, -1.927106732e-05f, -1.933146007e-05f, -1.939181349e-05f, -1.945212747e-05f, -1.951240193e-05f, -1.957263677e-05f,
+-1.963283187e-05f, -1.969298714e-05f, -1.975310248e-05f, -1.981317779e-05f, -1.987321297e-05f, -1.993320792e-05f, -1.999316254e-05f, -2.005307673e-05f, -2.011295039e-05f, -2.017278341e-05f,
+-2.023257571e-05f, -2.029232719e-05f, -2.035203773e-05f, -2.041170724e-05f, -2.047133563e-05f, -2.053092279e-05f, -2.059046863e-05f, -2.064997304e-05f, -2.070943593e-05f, -2.076885720e-05f,
+-2.082823675e-05f, -2.088757447e-05f, -2.094687028e-05f, -2.100612408e-05f, -2.106533575e-05f, -2.112450522e-05f, -2.118363237e-05f, -2.124271711e-05f, -2.130175934e-05f, -2.136075897e-05f,
+-2.141971589e-05f, -2.147863001e-05f, -2.153750124e-05f, -2.159632946e-05f, -2.165511459e-05f, -2.171385652e-05f, -2.177255517e-05f, -2.183121043e-05f, -2.188982220e-05f, -2.194839039e-05f,
+-2.200691490e-05f, -2.206539564e-05f, -2.212383250e-05f, -2.218222539e-05f, -2.224057421e-05f, -2.229887888e-05f, -2.235713928e-05f, -2.241535532e-05f, -2.247352691e-05f, -2.253165395e-05f,
+-2.258973635e-05f, -2.264777401e-05f, -2.270576682e-05f, -2.276371470e-05f, -2.282161756e-05f, -2.287947528e-05f, -2.293728779e-05f, -2.299505498e-05f, -2.305277675e-05f, -2.311045302e-05f,
+-2.316808368e-05f, -2.322566865e-05f, -2.328320782e-05f, -2.334070110e-05f, -2.339814839e-05f, -2.345554961e-05f, -2.351290466e-05f, -2.357021343e-05f, -2.362747584e-05f, -2.368469180e-05f,
+-2.374186120e-05f, -2.379898395e-05f, -2.385605996e-05f, -2.391308914e-05f, -2.397007139e-05f, -2.402700661e-05f, -2.408389472e-05f, -2.414073561e-05f, -2.419752920e-05f, -2.425427539e-05f,
+-2.431097408e-05f, -2.436762520e-05f, -2.442422863e-05f, -2.448078428e-05f, -2.453729208e-05f, -2.459375191e-05f, -2.465016369e-05f, -2.470652733e-05f, -2.476284272e-05f, -2.481910979e-05f,
+-2.487532843e-05f, -2.493149856e-05f, -2.498762008e-05f, -2.504369290e-05f, -2.509971692e-05f, -2.515569206e-05f, -2.521161822e-05f, -2.526749531e-05f, -2.532332324e-05f, -2.537910192e-05f,
+-2.543483125e-05f, -2.549051114e-05f, -2.554614151e-05f, -2.560172225e-05f, -2.565725329e-05f, -2.571273452e-05f, -2.576816586e-05f, -2.582354721e-05f, -2.587887849e-05f, -2.593415960e-05f,
+-2.598939046e-05f, -2.604457096e-05f, -2.609970103e-05f, -2.615478057e-05f, -2.620980949e-05f, -2.626478770e-05f, -2.631971511e-05f, -2.637459163e-05f, -2.642941717e-05f, -2.648419163e-05f,
+-2.653891494e-05f, -2.659358700e-05f, -2.664820772e-05f, -2.670277701e-05f, -2.675729479e-05f, -2.681176095e-05f, -2.686617542e-05f, -2.692053810e-05f, -2.697484891e-05f, -2.702910775e-05f,
+-2.708331454e-05f, -2.713746919e-05f, -2.719157161e-05f, -2.724562171e-05f, -2.729961941e-05f, -2.735356460e-05f, -2.740745722e-05f, -2.746129716e-05f, -2.751508434e-05f, -2.756881868e-05f,
+-2.762250007e-05f, -2.767612845e-05f, -2.772970371e-05f, -2.778322578e-05f, -2.783669456e-05f, -2.789010996e-05f, -2.794347191e-05f, -2.799678030e-05f, -2.805003506e-05f, -2.810323610e-05f,
+-2.815638333e-05f, -2.820947667e-05f, -2.826251602e-05f, -2.831550131e-05f, -2.836843244e-05f, -2.842130932e-05f, -2.847413189e-05f, -2.852690003e-05f, -2.857961368e-05f, -2.863227274e-05f,
+-2.868487713e-05f, -2.873742676e-05f, -2.878992155e-05f, -2.884236141e-05f, -2.889474626e-05f, -2.894707601e-05f, -2.899935057e-05f, -2.905156987e-05f, -2.910373381e-05f, -2.915584231e-05f,
+-2.920789529e-05f, -2.925989266e-05f, -2.931183433e-05f, -2.936372023e-05f, -2.941555026e-05f, -2.946732435e-05f, -2.951904241e-05f, -2.957070436e-05f, -2.962231010e-05f, -2.967385956e-05f,
+-2.972535266e-05f, -2.977678931e-05f, -2.982816942e-05f, -2.987949292e-05f, -2.993075972e-05f, -2.998196973e-05f, -3.003312288e-05f, -3.008421908e-05f, -3.013525825e-05f, -3.018624030e-05f,
+-3.023716515e-05f, -3.028803273e-05f, -3.033884294e-05f, -3.038959571e-05f, -3.044029095e-05f, -3.049092858e-05f, -3.054150852e-05f, -3.059203068e-05f, -3.064249499e-05f, -3.069290137e-05f,
+-3.074324972e-05f, -3.079353998e-05f, -3.084377205e-05f, -3.089394586e-05f, -3.094406133e-05f, -3.099411838e-05f, -3.104411692e-05f, -3.109405687e-05f, -3.114393815e-05f, -3.119376069e-05f,
+-3.124352440e-05f, -3.129322920e-05f, -3.134287501e-05f, -3.139246175e-05f, -3.144198935e-05f, -3.149145771e-05f, -3.154086677e-05f, -3.159021643e-05f, -3.163950663e-05f, -3.168873728e-05f,
+-3.173790830e-05f, -3.178701962e-05f, -3.183607115e-05f, -3.188506282e-05f, -3.193399454e-05f, -3.198286624e-05f, -3.203167784e-05f, -3.208042926e-05f, -3.212912042e-05f, -3.217775124e-05f,
+-3.222632165e-05f, -3.227483156e-05f, -3.232328091e-05f, -3.237166960e-05f, -3.241999757e-05f, -3.246826473e-05f, -3.251647101e-05f, -3.256461634e-05f, -3.261270062e-05f, -3.266072379e-05f,
+-3.270868576e-05f, -3.275658647e-05f, -3.280442584e-05f, -3.285220378e-05f, -3.289992022e-05f, -3.294757508e-05f, -3.299516830e-05f, -3.304269978e-05f, -3.309016946e-05f, -3.313757726e-05f,
+-3.318492310e-05f, -3.323220691e-05f, -3.327942861e-05f, -3.332658812e-05f, -3.337368538e-05f, -3.342072030e-05f, -3.346769281e-05f, -3.351460283e-05f, -3.356145030e-05f, -3.360823512e-05f,
+-3.365495724e-05f, -3.370161657e-05f, -3.374821304e-05f, -3.379474658e-05f, -3.384121710e-05f, -3.388762455e-05f, -3.393396883e-05f, -3.398024989e-05f, -3.402646764e-05f, -3.407262201e-05f,
+-3.411871292e-05f, -3.416474031e-05f, -3.421070410e-05f, -3.425660422e-05f, -3.430244059e-05f, -3.434821314e-05f, -3.439392179e-05f, -3.443956649e-05f, -3.448514714e-05f, -3.453066368e-05f,
+-3.457611604e-05f, -3.462150414e-05f, -3.466682792e-05f, -3.471208729e-05f, -3.475728219e-05f, -3.480241255e-05f, -3.484747829e-05f, -3.489247934e-05f, -3.493741563e-05f, -3.498228710e-05f,
+-3.502709366e-05f, -3.507183524e-05f, -3.511651179e-05f, -3.516112321e-05f, -3.520566945e-05f, -3.525015043e-05f, -3.529456609e-05f, -3.533891635e-05f, -3.538320113e-05f, -3.542742038e-05f,
+-3.547157402e-05f, -3.551566199e-05f, -3.555968420e-05f, -3.560364059e-05f, -3.564753110e-05f, -3.569135564e-05f, -3.573511416e-05f, -3.577880659e-05f, -3.582243284e-05f, -3.586599287e-05f,
+-3.590948659e-05f, -3.595291393e-05f, -3.599627484e-05f, -3.603956923e-05f, -3.608279705e-05f, -3.612595822e-05f, -3.616905268e-05f, -3.621208035e-05f, -3.625504117e-05f, -3.629793507e-05f,
+-3.634076199e-05f, -3.638352185e-05f, -3.642621460e-05f, -3.646884015e-05f, -3.651139845e-05f, -3.655388942e-05f, -3.659631300e-05f, -3.663866913e-05f, -3.668095774e-05f, -3.672317875e-05f,
+-3.676533211e-05f, -3.680741774e-05f, -3.684943558e-05f, -3.689138557e-05f, -3.693326764e-05f, -3.697508172e-05f, -3.701682775e-05f, -3.705850566e-05f, -3.710011538e-05f, -3.714165686e-05f,
+-3.718313002e-05f, -3.722453480e-05f, -3.726587114e-05f, -3.730713897e-05f, -3.734833822e-05f, -3.738946883e-05f, -3.743053075e-05f, -3.747152389e-05f, -3.751244820e-05f, -3.755330361e-05f,
+-3.759409007e-05f, -3.763480750e-05f, -3.767545584e-05f, -3.771603503e-05f, -3.775654501e-05f, -3.779698571e-05f, -3.783735707e-05f, -3.787765902e-05f, -3.791789151e-05f, -3.795805446e-05f,
+-3.799814782e-05f, -3.803817153e-05f, -3.807812552e-05f, -3.811800973e-05f, -3.815782409e-05f, -3.819756855e-05f, -3.823724305e-05f, -3.827684751e-05f, -3.831638189e-05f, -3.835584611e-05f,
+-3.839524012e-05f, -3.843456386e-05f, -3.847381726e-05f, -3.851300026e-05f, -3.855211281e-05f, -3.859115483e-05f, -3.863012628e-05f, -3.866902709e-05f, -3.870785719e-05f, -3.874661654e-05f,
+-3.878530507e-05f, -3.882392271e-05f, -3.886246941e-05f, -3.890094512e-05f, -3.893934976e-05f, -3.897768329e-05f, -3.901594563e-05f, -3.905413674e-05f, -3.909225654e-05f, -3.913030500e-05f,
+-3.916828203e-05f, -3.920618760e-05f, -3.924402163e-05f, -3.928178406e-05f, -3.931947485e-05f, -3.935709393e-05f, -3.939464125e-05f, -3.943211674e-05f, -3.946952035e-05f, -3.950685202e-05f,
+-3.954411169e-05f, -3.958129931e-05f, -3.961841481e-05f, -3.965545815e-05f, -3.969242926e-05f, -3.972932808e-05f, -3.976615457e-05f, -3.980290866e-05f, -3.983959030e-05f, -3.987619943e-05f,
+-3.991273599e-05f, -3.994919993e-05f, -3.998559119e-05f, -4.002190972e-05f, -4.005815546e-05f, -4.009432835e-05f, -4.013042834e-05f, -4.016645538e-05f, -4.020240941e-05f, -4.023829036e-05f,
+-4.027409820e-05f, -4.030983286e-05f, -4.034549429e-05f, -4.038108244e-05f, -4.041659724e-05f, -4.045203865e-05f, -4.048740661e-05f, -4.052270107e-05f, -4.055792198e-05f, -4.059306927e-05f,
+-4.062814290e-05f, -4.066314281e-05f, -4.069806895e-05f, -4.073292127e-05f, -4.076769971e-05f, -4.080240422e-05f, -4.083703475e-05f, -4.087159124e-05f, -4.090607364e-05f, -4.094048191e-05f,
+-4.097481598e-05f, -4.100907580e-05f, -4.104326133e-05f, -4.107737251e-05f, -4.111140929e-05f, -4.114537161e-05f, -4.117925943e-05f, -4.121307270e-05f, -4.124681136e-05f, -4.128047536e-05f,
+-4.131406466e-05f, -4.134757919e-05f, -4.138101892e-05f, -4.141438378e-05f, -4.144767373e-05f, -4.148088872e-05f, -4.151402870e-05f, -4.154709362e-05f, -4.158008343e-05f, -4.161299807e-05f,
+-4.164583751e-05f, -4.167860168e-05f, -4.171129054e-05f, -4.174390405e-05f, -4.177644214e-05f, -4.180890478e-05f, -4.184129192e-05f, -4.187360350e-05f, -4.190583947e-05f, -4.193799980e-05f,
+-4.197008442e-05f, -4.200209330e-05f, -4.203402638e-05f, -4.206588362e-05f, -4.209766497e-05f, -4.212937037e-05f, -4.216099979e-05f, -4.219255318e-05f, -4.222403049e-05f, -4.225543166e-05f,
+-4.228675667e-05f, -4.231800545e-05f, -4.234917796e-05f, -4.238027416e-05f, -4.241129400e-05f, -4.244223743e-05f, -4.247310440e-05f, -4.250389488e-05f, -4.253460881e-05f, -4.256524615e-05f,
+-4.259580685e-05f, -4.262629087e-05f, -4.265669817e-05f, -4.268702869e-05f, -4.271728240e-05f, -4.274745924e-05f, -4.277755917e-05f, -4.280758216e-05f, -4.283752815e-05f, -4.286739710e-05f,
+-4.289718896e-05f, -4.292690369e-05f, -4.295654126e-05f, -4.298610160e-05f, -4.301558469e-05f, -4.304499048e-05f, -4.307431891e-05f, -4.310356996e-05f, -4.313274358e-05f, -4.316183972e-05f,
+-4.319085834e-05f, -4.321979940e-05f, -4.324866285e-05f, -4.327744867e-05f, -4.330615679e-05f, -4.333478718e-05f, -4.336333980e-05f, -4.339181461e-05f, -4.342021156e-05f, -4.344853061e-05f,
+-4.347677172e-05f, -4.350493486e-05f, -4.353301997e-05f, -4.356102702e-05f, -4.358895597e-05f, -4.361680677e-05f, -4.364457939e-05f, -4.367227379e-05f, -4.369988992e-05f, -4.372742774e-05f,
+-4.375488722e-05f, -4.378226832e-05f, -4.380957099e-05f, -4.383679520e-05f, -4.386394090e-05f, -4.389100806e-05f, -4.391799664e-05f, -4.394490660e-05f, -4.397173789e-05f, -4.399849049e-05f,
+-4.402516435e-05f, -4.405175944e-05f, -4.407827571e-05f, -4.410471312e-05f, -4.413107165e-05f, -4.415735125e-05f, -4.418355188e-05f, -4.420967351e-05f, -4.423571610e-05f, -4.426167961e-05f,
+-4.428756400e-05f, -4.431336924e-05f, -4.433909530e-05f, -4.436474212e-05f, -4.439030968e-05f, -4.441579794e-05f, -4.444120687e-05f, -4.446653642e-05f, -4.449178657e-05f, -4.451695727e-05f,
+-4.454204849e-05f, -4.456706019e-05f, -4.459199234e-05f, -4.461684491e-05f, -4.464161786e-05f, -4.466631114e-05f, -4.469092474e-05f, -4.471545861e-05f, -4.473991272e-05f, -4.476428703e-05f,
+-4.478858151e-05f, -4.481279613e-05f, -4.483693084e-05f, -4.486098563e-05f, -4.488496045e-05f, -4.490885527e-05f, -4.493267005e-05f, -4.495640477e-05f, -4.498005939e-05f, -4.500363388e-05f,
+-4.502712819e-05f, -4.505054231e-05f, -4.507387620e-05f, -4.509712982e-05f, -4.512030315e-05f, -4.514339615e-05f, -4.516640878e-05f, -4.518934103e-05f, -4.521219284e-05f, -4.523496420e-05f,
+-4.525765508e-05f, -4.528026543e-05f, -4.530279523e-05f, -4.532524445e-05f, -4.534761306e-05f, -4.536990103e-05f, -4.539210831e-05f, -4.541423490e-05f, -4.543628075e-05f, -4.545824583e-05f,
+-4.548013012e-05f, -4.550193358e-05f, -4.552365619e-05f, -4.554529791e-05f, -4.556685871e-05f, -4.558833858e-05f, -4.560973746e-05f, -4.563105535e-05f, -4.565229220e-05f, -4.567344800e-05f,
+-4.569452270e-05f, -4.571551629e-05f, -4.573642873e-05f, -4.575726000e-05f, -4.577801006e-05f, -4.579867889e-05f, -4.581926647e-05f, -4.583977276e-05f, -4.586019774e-05f, -4.588054137e-05f,
+-4.590080364e-05f, -4.592098451e-05f, -4.594108396e-05f, -4.596110196e-05f, -4.598103849e-05f, -4.600089351e-05f, -4.602066700e-05f, -4.604035894e-05f, -4.605996930e-05f, -4.607949805e-05f,
+-4.609894517e-05f, -4.611831063e-05f, -4.613759441e-05f, -4.615679648e-05f, -4.617591681e-05f, -4.619495538e-05f, -4.621391217e-05f, -4.623278715e-05f, -4.625158030e-05f, -4.627029158e-05f,
+-4.628892099e-05f, -4.630746848e-05f, -4.632593405e-05f, -4.634431766e-05f, -4.636261929e-05f, -4.638083892e-05f, -4.639897652e-05f, -4.641703207e-05f, -4.643500555e-05f, -4.645289693e-05f,
+-4.647070620e-05f, -4.648843332e-05f, -4.650607828e-05f, -4.652364105e-05f, -4.654112161e-05f, -4.655851995e-05f, -4.657583602e-05f, -4.659306983e-05f, -4.661022133e-05f, -4.662729052e-05f,
+-4.664427737e-05f, -4.666118185e-05f, -4.667800396e-05f, -4.669474365e-05f, -4.671140093e-05f, -4.672797576e-05f, -4.674446812e-05f, -4.676087800e-05f, -4.677720537e-05f, -4.679345021e-05f,
+-4.680961250e-05f, -4.682569223e-05f, -4.684168937e-05f, -4.685760391e-05f, -4.687343582e-05f, -4.688918508e-05f, -4.690485168e-05f, -4.692043560e-05f, -4.693593681e-05f, -4.695135530e-05f,
+-4.696669106e-05f, -4.698194405e-05f, -4.699711427e-05f, -4.701220170e-05f, -4.702720631e-05f, -4.704212809e-05f, -4.705696702e-05f, -4.707172309e-05f, -4.708639628e-05f, -4.710098656e-05f,
+-4.711549393e-05f, -4.712991836e-05f, -4.714425984e-05f, -4.715851836e-05f, -4.717269388e-05f, -4.718678641e-05f, -4.720079592e-05f, -4.721472240e-05f, -4.722856583e-05f, -4.724232619e-05f,
+-4.725600347e-05f, -4.726959766e-05f, -4.728310873e-05f, -4.729653668e-05f, -4.730988148e-05f, -4.732314313e-05f, -4.733632160e-05f, -4.734941689e-05f, -4.736242898e-05f, -4.737535785e-05f,
+-4.738820349e-05f, -4.740096589e-05f, -4.741364503e-05f, -4.742624090e-05f, -4.743875349e-05f, -4.745118277e-05f, -4.746352874e-05f, -4.747579139e-05f, -4.748797070e-05f, -4.750006666e-05f,
+-4.751207925e-05f, -4.752400847e-05f, -4.753585430e-05f, -4.754761672e-05f, -4.755929574e-05f, -4.757089132e-05f, -4.758240347e-05f, -4.759383217e-05f, -4.760517741e-05f, -4.761643918e-05f,
+-4.762761746e-05f, -4.763871225e-05f, -4.764972353e-05f, -4.766065130e-05f, -4.767149553e-05f, -4.768225623e-05f, -4.769293338e-05f, -4.770352697e-05f, -4.771403699e-05f, -4.772446344e-05f,
+-4.773480629e-05f, -4.774506555e-05f, -4.775524119e-05f, -4.776533322e-05f, -4.777534163e-05f, -4.778526639e-05f, -4.779510751e-05f, -4.780486498e-05f, -4.781453878e-05f, -4.782412892e-05f,
+-4.783363537e-05f, -4.784305814e-05f, -4.785239721e-05f, -4.786165257e-05f, -4.787082422e-05f, -4.787991216e-05f, -4.788891637e-05f, -4.789783684e-05f, -4.790667357e-05f, -4.791542655e-05f,
+-4.792409578e-05f, -4.793268124e-05f, -4.794118294e-05f, -4.794960086e-05f, -4.795793500e-05f, -4.796618535e-05f, -4.797435190e-05f, -4.798243466e-05f, -4.799043361e-05f, -4.799834874e-05f,
+-4.800618006e-05f, -4.801392756e-05f, -4.802159123e-05f, -4.802917107e-05f, -4.803666707e-05f, -4.804407922e-05f, -4.805140753e-05f, -4.805865199e-05f, -4.806581260e-05f, -4.807288934e-05f,
+-4.807988222e-05f, -4.808679123e-05f, -4.809361637e-05f, -4.810035763e-05f, -4.810701502e-05f, -4.811358852e-05f, -4.812007814e-05f, -4.812648387e-05f, -4.813280570e-05f, -4.813904365e-05f,
+-4.814519770e-05f, -4.815126785e-05f, -4.815725409e-05f, -4.816315644e-05f, -4.816897488e-05f, -4.817470941e-05f, -4.818036003e-05f, -4.818592675e-05f, -4.819140955e-05f, -4.819680844e-05f,
+-4.820212341e-05f, -4.820735447e-05f, -4.821250161e-05f, -4.821756484e-05f, -4.822254415e-05f, -4.822743954e-05f, -4.823225101e-05f, -4.823697857e-05f, -4.824162221e-05f, -4.824618193e-05f,
+-4.825065773e-05f, -4.825504961e-05f, -4.825935758e-05f, -4.826358163e-05f, -4.826772177e-05f, -4.827177800e-05f, -4.827575031e-05f, -4.827963871e-05f, -4.828344320e-05f, -4.828716379e-05f,
+-4.829080046e-05f, -4.829435324e-05f, -4.829782211e-05f, -4.830120708e-05f, -4.830450815e-05f, -4.830772533e-05f, -4.831085862e-05f, -4.831390801e-05f, -4.831687352e-05f, -4.831975515e-05f,
+-4.832255289e-05f, -4.832526676e-05f, -4.832789676e-05f, -4.833044288e-05f, -4.833290514e-05f, -4.833528354e-05f, -4.833757808e-05f, -4.833978876e-05f, -4.834191560e-05f, -4.834395859e-05f,
+-4.834591774e-05f, -4.834779305e-05f, -4.834958454e-05f, -4.835129220e-05f, -4.835291604e-05f, -4.835445606e-05f, -4.835591228e-05f, -4.835728469e-05f, -4.835857331e-05f, -4.835977813e-05f,
+-4.836089917e-05f, -4.836193643e-05f, -4.836288991e-05f, -4.836375963e-05f, -4.836454560e-05f, -4.836524780e-05f, -4.836586627e-05f, -4.836640099e-05f, -4.836685198e-05f, -4.836721925e-05f,
+-4.836750280e-05f, -4.836770265e-05f, -4.836781879e-05f, -4.836785124e-05f, -4.836780001e-05f, -4.836766510e-05f, -4.836744652e-05f, -4.836714429e-05f, -4.836675840e-05f, -4.836628887e-05f,
+-4.836573571e-05f, -4.836509893e-05f, -4.836437853e-05f, -4.836357452e-05f, -4.836268692e-05f, -4.836171574e-05f, -4.836066098e-05f, -4.835952265e-05f, -4.835830077e-05f, -4.835699535e-05f,
+-4.835560639e-05f, -4.835413390e-05f, -4.835257791e-05f, -4.835093841e-05f, -4.834921542e-05f, -4.834740894e-05f, -4.834551900e-05f, -4.834354561e-05f, -4.834148876e-05f, -4.833934848e-05f,
+-4.833712478e-05f, -4.833481767e-05f, -4.833242716e-05f, -4.832995327e-05f, -4.832739600e-05f, -4.832475537e-05f, -4.832203140e-05f, -4.831922409e-05f, -4.831633345e-05f, -4.831335951e-05f,
+-4.831030228e-05f, -4.830716176e-05f, -4.830393797e-05f, -4.830063092e-05f, -4.829724064e-05f, -4.829376713e-05f, -4.829021041e-05f, -4.828657049e-05f, -4.828284738e-05f, -4.827904110e-05f,
+-4.827515168e-05f, -4.827117911e-05f, -4.826712341e-05f, -4.826298461e-05f, -4.825876271e-05f, -4.825445774e-05f, -4.825006970e-05f, -4.824559861e-05f, -4.824104449e-05f, -4.823640736e-05f,
+-4.823168723e-05f, -4.822688411e-05f, -4.822199803e-05f, -4.821702899e-05f, -4.821197703e-05f, -4.820684215e-05f, -4.820162436e-05f, -4.819632370e-05f, -4.819094017e-05f, -4.818547380e-05f,
+-4.817992459e-05f, -4.817429257e-05f, -4.816857776e-05f, -4.816278017e-05f, -4.815689982e-05f, -4.815093674e-05f, -4.814489093e-05f, -4.813876242e-05f, -4.813255122e-05f, -4.812625736e-05f,
+-4.811988086e-05f, -4.811342172e-05f, -4.810687998e-05f, -4.810025565e-05f, -4.809354875e-05f, -4.808675930e-05f, -4.807988733e-05f, -4.807293284e-05f, -4.806589586e-05f, -4.805877642e-05f,
+-4.805157453e-05f, -4.804429021e-05f, -4.803692348e-05f, -4.802947436e-05f, -4.802194288e-05f, -4.801432906e-05f, -4.800663291e-05f, -4.799885446e-05f, -4.799099373e-05f, -4.798305074e-05f,
+-4.797502552e-05f, -4.796691808e-05f, -4.795872844e-05f, -4.795045664e-05f, -4.794210269e-05f, -4.793366661e-05f, -4.792514844e-05f, -4.791654818e-05f, -4.790786586e-05f, -4.789910151e-05f,
+-4.789025515e-05f, -4.788132680e-05f, -4.787231649e-05f, -4.786322423e-05f, -4.785405006e-05f, -4.784479400e-05f, -4.783545607e-05f, -4.782603629e-05f, -4.781653470e-05f, -4.780695131e-05f,
+-4.779728614e-05f, -4.778753924e-05f, -4.777771061e-05f, -4.776780028e-05f, -4.775780828e-05f, -4.774773464e-05f, -4.773757937e-05f, -4.772734252e-05f, -4.771702409e-05f, -4.770662412e-05f,
+-4.769614263e-05f, -4.768557965e-05f, -4.767493520e-05f, -4.766420932e-05f, -4.765340202e-05f, -4.764251334e-05f, -4.763154331e-05f, -4.762049194e-05f, -4.760935926e-05f, -4.759814531e-05f,
+-4.758685011e-05f, -4.757547368e-05f, -4.756401607e-05f, -4.755247728e-05f, -4.754085736e-05f, -4.752915632e-05f, -4.751737421e-05f, -4.750551104e-05f, -4.749356684e-05f, -4.748154165e-05f,
+-4.746943548e-05f, -4.745724838e-05f, -4.744498037e-05f, -4.743263148e-05f, -4.742020173e-05f, -4.740769116e-05f, -4.739509980e-05f, -4.738242768e-05f, -4.736967482e-05f, -4.735684126e-05f,
+-4.734392703e-05f, -4.733093215e-05f, -4.731785666e-05f, -4.730470059e-05f, -4.729146397e-05f, -4.727814683e-05f, -4.726474920e-05f, -4.725127111e-05f, -4.723771259e-05f, -4.722407367e-05f,
+-4.721035440e-05f, -4.719655479e-05f, -4.718267487e-05f, -4.716871469e-05f, -4.715467428e-05f, -4.714055365e-05f, -4.712635286e-05f, -4.711207192e-05f, -4.709771088e-05f, -4.708326976e-05f,
+-4.706874860e-05f, -4.705414743e-05f, -4.703946629e-05f, -4.702470520e-05f, -4.700986420e-05f, -4.699494333e-05f, -4.697994262e-05f, -4.696486209e-05f, -4.694970180e-05f, -4.693446176e-05f,
+-4.691914202e-05f, -4.690374260e-05f, -4.688826355e-05f, -4.687270490e-05f, -4.685706667e-05f, -4.684134892e-05f, -4.682555167e-05f, -4.680967495e-05f, -4.679371881e-05f, -4.677768327e-05f,
+-4.676156838e-05f, -4.674537416e-05f, -4.672910066e-05f, -4.671274792e-05f, -4.669631596e-05f, -4.667980482e-05f, -4.666321454e-05f, -4.664654516e-05f, -4.662979671e-05f, -4.661296923e-05f,
+-4.659606275e-05f, -4.657907732e-05f, -4.656201297e-05f, -4.654486974e-05f, -4.652764766e-05f, -4.651034677e-05f, -4.649296712e-05f, -4.647550873e-05f, -4.645797165e-05f, -4.644035591e-05f,
+-4.642266156e-05f, -4.640488863e-05f, -4.638703715e-05f, -4.636910717e-05f, -4.635109873e-05f, -4.633301187e-05f, -4.631484662e-05f, -4.629660302e-05f, -4.627828111e-05f, -4.625988094e-05f,
+-4.624140254e-05f, -4.622284595e-05f, -4.620421121e-05f, -4.618549836e-05f, -4.616670745e-05f, -4.614783850e-05f, -4.612889157e-05f, -4.610986669e-05f, -4.609076390e-05f, -4.607158324e-05f,
+-4.605232476e-05f, -4.603298849e-05f, -4.601357448e-05f, -4.599408277e-05f, -4.597451340e-05f, -4.595486640e-05f, -4.593514183e-05f, -4.591533973e-05f, -4.589546012e-05f, -4.587550307e-05f,
+-4.585546860e-05f, -4.583535677e-05f, -4.581516761e-05f, -4.579490117e-05f, -4.577455749e-05f, -4.575413661e-05f, -4.573363858e-05f, -4.571306343e-05f, -4.569241122e-05f, -4.567168198e-05f,
+-4.565087576e-05f, -4.562999260e-05f, -4.560903255e-05f, -4.558799565e-05f, -4.556688194e-05f, -4.554569146e-05f, -4.552442427e-05f, -4.550308041e-05f, -4.548165991e-05f, -4.546016283e-05f,
+-4.543858921e-05f, -4.541693910e-05f, -4.539521253e-05f, -4.537340956e-05f, -4.535153023e-05f, -4.532957459e-05f, -4.530754267e-05f, -4.528543454e-05f, -4.526325022e-05f, -4.524098977e-05f,
+-4.521865324e-05f, -4.519624067e-05f, -4.517375210e-05f, -4.515118759e-05f, -4.512854717e-05f, -4.510583091e-05f, -4.508303883e-05f, -4.506017100e-05f, -4.503722745e-05f, -4.501420823e-05f,
+-4.499111340e-05f, -4.496794299e-05f, -4.494469706e-05f, -4.492137566e-05f, -4.489797883e-05f, -4.487450661e-05f, -4.485095906e-05f, -4.482733623e-05f, -4.480363816e-05f, -4.477986491e-05f,
+-4.475601651e-05f, -4.473209303e-05f, -4.470809450e-05f, -4.468402098e-05f, -4.465987252e-05f, -4.463564916e-05f, -4.461135096e-05f, -4.458697796e-05f, -4.456253021e-05f, -4.453800777e-05f,
+-4.451341068e-05f, -4.448873899e-05f, -4.446399276e-05f, -4.443917203e-05f, -4.441427685e-05f, -4.438930727e-05f, -4.436426335e-05f, -4.433914514e-05f, -4.431395268e-05f, -4.428868603e-05f,
+-4.426334523e-05f, -4.423793035e-05f, -4.421244142e-05f, -4.418687850e-05f, -4.416124165e-05f, -4.413553092e-05f, -4.410974634e-05f, -4.408388799e-05f, -4.405795591e-05f, -4.403195015e-05f,
+-4.400587076e-05f, -4.397971780e-05f, -4.395349132e-05f, -4.392719137e-05f, -4.390081801e-05f, -4.387437129e-05f, -4.384785125e-05f, -4.382125796e-05f, -4.379459147e-05f, -4.376785182e-05f,
+-4.374103908e-05f, -4.371415330e-05f, -4.368719453e-05f, -4.366016282e-05f, -4.363305823e-05f, -4.360588082e-05f, -4.357863063e-05f, -4.355130772e-05f, -4.352391215e-05f, -4.349644397e-05f,
+-4.346890323e-05f, -4.344129000e-05f, -4.341360432e-05f, -4.338584625e-05f, -4.335801584e-05f, -4.333011315e-05f, -4.330213824e-05f, -4.327409117e-05f, -4.324597197e-05f, -4.321778072e-05f,
+-4.318951747e-05f, -4.316118227e-05f, -4.313277519e-05f, -4.310429627e-05f, -4.307574557e-05f, -4.304712315e-05f, -4.301842907e-05f, -4.298966338e-05f, -4.296082615e-05f, -4.293191741e-05f,
+-4.290293725e-05f, -4.287388570e-05f, -4.284476283e-05f, -4.281556869e-05f, -4.278630335e-05f, -4.275696686e-05f, -4.272755928e-05f, -4.269808067e-05f, -4.266853108e-05f, -4.263891057e-05f,
+-4.260921920e-05f, -4.257945703e-05f, -4.254962412e-05f, -4.251972053e-05f, -4.248974631e-05f, -4.245970152e-05f, -4.242958623e-05f, -4.239940049e-05f, -4.236914435e-05f, -4.233881789e-05f,
+-4.230842116e-05f, -4.227795422e-05f, -4.224741713e-05f, -4.221680994e-05f, -4.218613272e-05f, -4.215538553e-05f, -4.212456843e-05f, -4.209368148e-05f, -4.206272474e-05f, -4.203169827e-05f,
+-4.200060212e-05f, -4.196943637e-05f, -4.193820107e-05f, -4.190689628e-05f, -4.187552206e-05f, -4.184407848e-05f, -4.181256559e-05f, -4.178098346e-05f, -4.174933215e-05f, -4.171761172e-05f,
+-4.168582223e-05f, -4.165396374e-05f, -4.162203632e-05f, -4.159004003e-05f, -4.155797493e-05f, -4.152584107e-05f, -4.149363854e-05f, -4.146136738e-05f, -4.142902765e-05f, -4.139661943e-05f,
+-4.136414278e-05f, -4.133159775e-05f, -4.129898442e-05f, -4.126630283e-05f, -4.123355307e-05f, -4.120073519e-05f, -4.116784925e-05f, -4.113489531e-05f, -4.110187345e-05f, -4.106878373e-05f,
+-4.103562620e-05f, -4.100240094e-05f, -4.096910800e-05f, -4.093574746e-05f, -4.090231937e-05f, -4.086882381e-05f, -4.083526083e-05f, -4.080163049e-05f, -4.076793288e-05f, -4.073416804e-05f,
+-4.070033605e-05f, -4.066643697e-05f, -4.063247086e-05f, -4.059843779e-05f, -4.056433783e-05f, -4.053017105e-05f, -4.049593749e-05f, -4.046163725e-05f, -4.042727037e-05f, -4.039283692e-05f,
+-4.035833698e-05f, -4.032377061e-05f, -4.028913787e-05f, -4.025443883e-05f, -4.021967355e-05f, -4.018484211e-05f, -4.014994457e-05f, -4.011498100e-05f, -4.007995146e-05f, -4.004485603e-05f,
+-4.000969476e-05f, -3.997446773e-05f, -3.993917500e-05f, -3.990381664e-05f, -3.986839272e-05f, -3.983290331e-05f, -3.979734847e-05f, -3.976172827e-05f, -3.972604279e-05f, -3.969029208e-05f,
+-3.965447622e-05f, -3.961859528e-05f, -3.958264931e-05f, -3.954663841e-05f, -3.951056262e-05f, -3.947442202e-05f, -3.943821668e-05f, -3.940194667e-05f, -3.936561205e-05f, -3.932921290e-05f,
+-3.929274929e-05f, -3.925622128e-05f, -3.921962895e-05f, -3.918297236e-05f, -3.914625158e-05f, -3.910946669e-05f, -3.907261775e-05f, -3.903570484e-05f, -3.899872802e-05f, -3.896168736e-05f,
+-3.892458294e-05f, -3.888741482e-05f, -3.885018308e-05f, -3.881288779e-05f, -3.877552901e-05f, -3.873810682e-05f, -3.870062129e-05f, -3.866307249e-05f, -3.862546050e-05f, -3.858778537e-05f,
+-3.855004719e-05f, -3.851224603e-05f, -3.847438195e-05f, -3.843645503e-05f, -3.839846534e-05f, -3.836041296e-05f, -3.832229795e-05f, -3.828412039e-05f, -3.824588034e-05f, -3.820757789e-05f,
+-3.816921311e-05f, -3.813078605e-05f, -3.809229681e-05f, -3.805374545e-05f, -3.801513205e-05f, -3.797645667e-05f, -3.793771939e-05f, -3.789892029e-05f, -3.786005943e-05f, -3.782113690e-05f,
+-3.778215276e-05f, -3.774310708e-05f, -3.770399995e-05f, -3.766483143e-05f, -3.762560160e-05f, -3.758631053e-05f, -3.754695830e-05f, -3.750754498e-05f, -3.746807064e-05f, -3.742853537e-05f,
+-3.738893923e-05f, -3.734928229e-05f, -3.730956464e-05f, -3.726978635e-05f, -3.722994748e-05f, -3.719004813e-05f, -3.715008836e-05f, -3.711006824e-05f, -3.706998786e-05f, -3.702984728e-05f,
+-3.698964659e-05f, -3.694938586e-05f, -3.690906516e-05f, -3.686868457e-05f, -3.682824417e-05f, -3.678774403e-05f, -3.674718423e-05f, -3.670656484e-05f, -3.666588594e-05f, -3.662514760e-05f,
+-3.658434991e-05f, -3.654349294e-05f, -3.650257677e-05f, -3.646160146e-05f, -3.642056711e-05f, -3.637947378e-05f, -3.633832155e-05f, -3.629711050e-05f, -3.625584071e-05f, -3.621451225e-05f,
+-3.617312521e-05f, -3.613167965e-05f, -3.609017566e-05f, -3.604861332e-05f, -3.600699269e-05f, -3.596531386e-05f, -3.592357692e-05f, -3.588178192e-05f, -3.583992896e-05f, -3.579801811e-05f,
+-3.575604945e-05f, -3.571402306e-05f, -3.567193901e-05f, -3.562979739e-05f, -3.558759827e-05f, -3.554534174e-05f, -3.550302786e-05f, -3.546065673e-05f, -3.541822841e-05f, -3.537574299e-05f,
+-3.533320055e-05f, -3.529060116e-05f, -3.524794491e-05f, -3.520523188e-05f, -3.516246214e-05f, -3.511963577e-05f, -3.507675286e-05f, -3.503381348e-05f, -3.499081771e-05f, -3.494776564e-05f,
+-3.490465734e-05f, -3.486149289e-05f, -3.481827238e-05f, -3.477499588e-05f, -3.473166348e-05f, -3.468827525e-05f, -3.464483127e-05f, -3.460133164e-05f, -3.455777642e-05f, -3.451416570e-05f,
+-3.447049955e-05f, -3.442677807e-05f, -3.438300133e-05f, -3.433916941e-05f, -3.429528239e-05f, -3.425134036e-05f, -3.420734340e-05f, -3.416329158e-05f, -3.411918499e-05f, -3.407502371e-05f,
+-3.403080783e-05f, -3.398653742e-05f, -3.394221257e-05f, -3.389783336e-05f, -3.385339987e-05f, -3.380891218e-05f, -3.376437038e-05f, -3.371977455e-05f, -3.367512477e-05f, -3.363042112e-05f,
+-3.358566368e-05f, -3.354085255e-05f, -3.349598780e-05f, -3.345106951e-05f, -3.340609777e-05f, -3.336107266e-05f, -3.331599426e-05f, -3.327086267e-05f, -3.322567795e-05f, -3.318044019e-05f,
+-3.313514949e-05f, -3.308980591e-05f, -3.304440955e-05f, -3.299896049e-05f, -3.295345881e-05f, -3.290790459e-05f, -3.286229793e-05f, -3.281663890e-05f, -3.277092759e-05f, -3.272516408e-05f,
+-3.267934846e-05f, -3.263348082e-05f, -3.258756122e-05f, -3.254158977e-05f, -3.249556654e-05f, -3.244949163e-05f, -3.240336511e-05f, -3.235718707e-05f, -3.231095759e-05f, -3.226467676e-05f,
+-3.221834467e-05f, -3.217196140e-05f, -3.212552703e-05f, -3.207904166e-05f, -3.203250536e-05f, -3.198591823e-05f, -3.193928034e-05f, -3.189259179e-05f, -3.184585265e-05f, -3.179906302e-05f,
+-3.175222298e-05f, -3.170533262e-05f, -3.165839202e-05f, -3.161140128e-05f, -3.156436046e-05f, -3.151726967e-05f, -3.147012899e-05f, -3.142293850e-05f, -3.137569830e-05f, -3.132840846e-05f,
+-3.128106908e-05f, -3.123368024e-05f, -3.118624203e-05f, -3.113875453e-05f, -3.109121784e-05f, -3.104363204e-05f, -3.099599721e-05f, -3.094831345e-05f, -3.090058084e-05f, -3.085279947e-05f,
+-3.080496942e-05f, -3.075709079e-05f, -3.070916366e-05f, -3.066118812e-05f, -3.061316426e-05f, -3.056509217e-05f, -3.051697192e-05f, -3.046880362e-05f, -3.042058735e-05f, -3.037232319e-05f,
+-3.032401124e-05f, -3.027565159e-05f, -3.022724432e-05f, -3.017878951e-05f, -3.013028727e-05f, -3.008173768e-05f, -3.003314082e-05f, -2.998449679e-05f, -2.993580567e-05f, -2.988706756e-05f,
+-2.983828254e-05f, -2.978945070e-05f, -2.974057213e-05f, -2.969164692e-05f, -2.964267516e-05f, -2.959365694e-05f, -2.954459234e-05f, -2.949548146e-05f, -2.944632439e-05f, -2.939712122e-05f,
+-2.934787203e-05f, -2.929857692e-05f, -2.924923597e-05f, -2.919984928e-05f, -2.915041694e-05f, -2.910093903e-05f, -2.905141565e-05f, -2.900184688e-05f, -2.895223282e-05f, -2.890257355e-05f,
+-2.885286918e-05f, -2.880311978e-05f, -2.875332544e-05f, -2.870348627e-05f, -2.865360235e-05f, -2.860367376e-05f, -2.855370061e-05f, -2.850368298e-05f, -2.845362096e-05f, -2.840351465e-05f,
+-2.835336413e-05f, -2.830316950e-05f, -2.825293084e-05f, -2.820264825e-05f, -2.815232183e-05f, -2.810195165e-05f, -2.805153782e-05f, -2.800108042e-05f, -2.795057954e-05f, -2.790003529e-05f,
+-2.784944774e-05f, -2.779881700e-05f, -2.774814315e-05f, -2.769742628e-05f, -2.764666649e-05f, -2.759586387e-05f, -2.754501851e-05f, -2.749413051e-05f, -2.744319995e-05f, -2.739222693e-05f,
+-2.734121154e-05f, -2.729015387e-05f, -2.723905402e-05f, -2.718791208e-05f, -2.713672814e-05f, -2.708550229e-05f, -2.703423462e-05f, -2.698292524e-05f, -2.693157423e-05f, -2.688018168e-05f,
+-2.682874770e-05f, -2.677727236e-05f, -2.672575577e-05f, -2.667419802e-05f, -2.662259919e-05f, -2.657095939e-05f, -2.651927871e-05f, -2.646755724e-05f, -2.641579508e-05f, -2.636399231e-05f,
+-2.631214904e-05f, -2.626026535e-05f, -2.620834134e-05f, -2.615637711e-05f, -2.610437274e-05f, -2.605232833e-05f, -2.600024398e-05f, -2.594811978e-05f, -2.589595582e-05f, -2.584375220e-05f,
+-2.579150901e-05f, -2.573922635e-05f, -2.568690431e-05f, -2.563454298e-05f, -2.558214247e-05f, -2.552970285e-05f, -2.547722424e-05f, -2.542470672e-05f, -2.537215039e-05f, -2.531955534e-05f,
+-2.526692167e-05f, -2.521424947e-05f, -2.516153884e-05f, -2.510878987e-05f, -2.505600266e-05f, -2.500317731e-05f, -2.495031390e-05f, -2.489741253e-05f, -2.484447331e-05f, -2.479149631e-05f,
+-2.473848165e-05f, -2.468542941e-05f, -2.463233970e-05f, -2.457921260e-05f, -2.452604821e-05f, -2.447284662e-05f, -2.441960795e-05f, -2.436633227e-05f, -2.431301968e-05f, -2.425967029e-05f,
+-2.420628418e-05f, -2.415286145e-05f, -2.409940221e-05f, -2.404590654e-05f, -2.399237454e-05f, -2.393880631e-05f, -2.388520194e-05f, -2.383156153e-05f, -2.377788518e-05f, -2.372417298e-05f,
+-2.367042503e-05f, -2.361664142e-05f, -2.356282226e-05f, -2.350896764e-05f, -2.345507765e-05f, -2.340115240e-05f, -2.334719197e-05f, -2.329319647e-05f, -2.323916600e-05f, -2.318510064e-05f,
+-2.313100050e-05f, -2.307686568e-05f, -2.302269627e-05f, -2.296849236e-05f, -2.291425407e-05f, -2.285998147e-05f, -2.280567468e-05f, -2.275133378e-05f, -2.269695888e-05f, -2.264255007e-05f,
+-2.258810745e-05f, -2.253363112e-05f, -2.247912117e-05f, -2.242457771e-05f, -2.237000083e-05f, -2.231539062e-05f, -2.226074720e-05f, -2.220607064e-05f, -2.215136106e-05f, -2.209661855e-05f,
+-2.204184321e-05f, -2.198703513e-05f, -2.193219441e-05f, -2.187732116e-05f, -2.182241547e-05f, -2.176747744e-05f, -2.171250716e-05f, -2.165750474e-05f, -2.160247028e-05f, -2.154740386e-05f,
+-2.149230560e-05f, -2.143717558e-05f, -2.138201391e-05f, -2.132682069e-05f, -2.127159602e-05f, -2.121633998e-05f, -2.116105269e-05f, -2.110573424e-05f, -2.105038473e-05f, -2.099500426e-05f,
+-2.093959292e-05f, -2.088415083e-05f, -2.082867806e-05f, -2.077317474e-05f, -2.071764094e-05f, -2.066207678e-05f, -2.060648235e-05f, -2.055085775e-05f, -2.049520309e-05f, -2.043951845e-05f,
+-2.038380394e-05f, -2.032805966e-05f, -2.027228570e-05f, -2.021648218e-05f, -2.016064918e-05f, -2.010478681e-05f, -2.004889516e-05f, -1.999297434e-05f, -1.993702444e-05f, -1.988104557e-05f,
+-1.982503782e-05f, -1.976900130e-05f, -1.971293610e-05f, -1.965684233e-05f, -1.960072008e-05f, -1.954456945e-05f, -1.948839055e-05f, -1.943218347e-05f, -1.937594832e-05f, -1.931968519e-05f,
+-1.926339418e-05f, -1.920707540e-05f, -1.915072895e-05f, -1.909435491e-05f, -1.903795341e-05f, -1.898152453e-05f, -1.892506837e-05f, -1.886858504e-05f, -1.881207464e-05f, -1.875553727e-05f,
+-1.869897302e-05f, -1.864238200e-05f, -1.858576432e-05f, -1.852912006e-05f, -1.847244933e-05f, -1.841575223e-05f, -1.835902886e-05f, -1.830227933e-05f, -1.824550373e-05f, -1.818870216e-05f,
+-1.813187473e-05f, -1.807502153e-05f, -1.801814267e-05f, -1.796123825e-05f, -1.790430837e-05f, -1.784735312e-05f, -1.779037262e-05f, -1.773336696e-05f, -1.767633625e-05f, -1.761928057e-05f,
+-1.756220005e-05f, -1.750509477e-05f, -1.744796484e-05f, -1.739081035e-05f, -1.733363142e-05f, -1.727642814e-05f, -1.721920062e-05f, -1.716194895e-05f, -1.710467323e-05f, -1.704737358e-05f,
+-1.699005008e-05f, -1.693270284e-05f, -1.687533197e-05f, -1.681793756e-05f, -1.676051972e-05f, -1.670307855e-05f, -1.664561414e-05f, -1.658812661e-05f, -1.653061605e-05f, -1.647308256e-05f,
+-1.641552625e-05f, -1.635794722e-05f, -1.630034557e-05f, -1.624272140e-05f, -1.618507481e-05f, -1.612740592e-05f, -1.606971481e-05f, -1.601200159e-05f, -1.595426636e-05f, -1.589650923e-05f,
+-1.583873029e-05f, -1.578092966e-05f, -1.572310742e-05f, -1.566526369e-05f, -1.560739856e-05f, -1.554951214e-05f, -1.549160453e-05f, -1.543367583e-05f, -1.537572615e-05f, -1.531775558e-05f,
+-1.525976424e-05f, -1.520175221e-05f, -1.514371961e-05f, -1.508566654e-05f, -1.502759310e-05f, -1.496949938e-05f, -1.491138551e-05f, -1.485325157e-05f, -1.479509767e-05f, -1.473692391e-05f,
+-1.467873039e-05f, -1.462051723e-05f, -1.456228451e-05f, -1.450403235e-05f, -1.444576084e-05f, -1.438747009e-05f, -1.432916020e-05f, -1.427083127e-05f, -1.421248342e-05f, -1.415411673e-05f,
+-1.409573131e-05f, -1.403732727e-05f, -1.397890471e-05f, -1.392046373e-05f, -1.386200444e-05f, -1.380352693e-05f, -1.374503131e-05f, -1.368651769e-05f, -1.362798616e-05f, -1.356943683e-05f,
+-1.351086981e-05f, -1.345228519e-05f, -1.339368307e-05f, -1.333506358e-05f, -1.327642679e-05f, -1.321777283e-05f, -1.315910178e-05f, -1.310041376e-05f, -1.304170887e-05f, -1.298298721e-05f,
+-1.292424889e-05f, -1.286549400e-05f, -1.280672266e-05f, -1.274793495e-05f, -1.268913100e-05f, -1.263031090e-05f, -1.257147475e-05f, -1.251262267e-05f, -1.245375474e-05f, -1.239487108e-05f,
+-1.233597178e-05f, -1.227705696e-05f, -1.221812672e-05f, -1.215918115e-05f, -1.210022037e-05f, -1.204124447e-05f, -1.198225356e-05f, -1.192324775e-05f, -1.186422713e-05f, -1.180519182e-05f,
+-1.174614190e-05f, -1.168707750e-05f, -1.162799871e-05f, -1.156890563e-05f, -1.150979837e-05f, -1.145067703e-05f, -1.139154172e-05f, -1.133239254e-05f, -1.127322960e-05f, -1.121405299e-05f,
+-1.115486282e-05f, -1.109565920e-05f, -1.103644223e-05f, -1.097721201e-05f, -1.091796864e-05f, -1.085871224e-05f, -1.079944290e-05f, -1.074016073e-05f, -1.068086583e-05f, -1.062155831e-05f,
+-1.056223827e-05f, -1.050290581e-05f, -1.044356104e-05f, -1.038420406e-05f, -1.032483497e-05f, -1.026545389e-05f, -1.020606090e-05f, -1.014665613e-05f, -1.008723967e-05f, -1.002781162e-05f,
+-9.968372089e-06f, -9.908921184e-06f, -9.849459006e-06f, -9.789985660e-06f, -9.730501249e-06f, -9.671005878e-06f, -9.611499651e-06f, -9.551982671e-06f, -9.492455043e-06f, -9.432916870e-06f,
+-9.373368258e-06f, -9.313809309e-06f, -9.254240129e-06f, -9.194660821e-06f, -9.135071489e-06f, -9.075472238e-06f, -9.015863171e-06f, -8.956244394e-06f, -8.896616009e-06f, -8.836978121e-06f,
+-8.777330834e-06f, -8.717674253e-06f, -8.658008482e-06f, -8.598333624e-06f, -8.538649784e-06f, -8.478957066e-06f, -8.419255575e-06f, -8.359545414e-06f, -8.299826688e-06f, -8.240099501e-06f,
+-8.180363957e-06f, -8.120620160e-06f, -8.060868215e-06f, -8.001108226e-06f, -7.941340297e-06f, -7.881564533e-06f, -7.821781036e-06f, -7.761989913e-06f, -7.702191267e-06f, -7.642385201e-06f,
+-7.582571822e-06f, -7.522751232e-06f, -7.462923536e-06f, -7.403088839e-06f, -7.343247243e-06f, -7.283398855e-06f, -7.223543778e-06f, -7.163682116e-06f, -7.103813974e-06f, -7.043939455e-06f,
+-6.984058665e-06f, -6.924171707e-06f, -6.864278685e-06f, -6.804379705e-06f, -6.744474869e-06f, -6.684564283e-06f, -6.624648051e-06f, -6.564726277e-06f, -6.504799065e-06f, -6.444866519e-06f,
+-6.384928744e-06f, -6.324985844e-06f, -6.265037923e-06f, -6.205085086e-06f, -6.145127437e-06f, -6.085165079e-06f, -6.025198118e-06f, -5.965226658e-06f, -5.905250802e-06f, -5.845270655e-06f,
+-5.785286321e-06f, -5.725297905e-06f, -5.665305511e-06f, -5.605309242e-06f, -5.545309204e-06f, -5.485305500e-06f, -5.425298235e-06f, -5.365287512e-06f, -5.305273437e-06f, -5.245256113e-06f,
+-5.185235644e-06f, -5.125212135e-06f, -5.065185690e-06f, -5.005156413e-06f, -4.945124408e-06f, -4.885089779e-06f, -4.825052631e-06f, -4.765013068e-06f, -4.704971194e-06f, -4.644927113e-06f,
+-4.584880928e-06f, -4.524832746e-06f, -4.464782668e-06f, -4.404730800e-06f, -4.344677246e-06f, -4.284622110e-06f, -4.224565495e-06f, -4.164507507e-06f, -4.104448249e-06f, -4.044387825e-06f,
+-3.984326339e-06f, -3.924263895e-06f, -3.864200598e-06f, -3.804136551e-06f, -3.744071859e-06f, -3.684006625e-06f, -3.623940953e-06f, -3.563874948e-06f, -3.503808714e-06f, -3.443742354e-06f,
+-3.383675972e-06f, -3.323609673e-06f, -3.263543560e-06f, -3.203477738e-06f, -3.143412310e-06f, -3.083347380e-06f, -3.023283052e-06f, -2.963219430e-06f, -2.903156618e-06f, -2.843094720e-06f,
+-2.783033839e-06f, -2.722974080e-06f, -2.662915547e-06f, -2.602858342e-06f, -2.542802571e-06f, -2.482748336e-06f, -2.422695742e-06f, -2.362644892e-06f, -2.302595891e-06f, -2.242548841e-06f,
+-2.182503847e-06f, -2.122461013e-06f, -2.062420441e-06f, -2.002382236e-06f, -1.942346502e-06f, -1.882313342e-06f, -1.822282859e-06f, -1.762255158e-06f, -1.702230342e-06f, -1.642208515e-06f,
+-1.582189780e-06f, -1.522174241e-06f, -1.462162001e-06f, -1.402153164e-06f, -1.342147833e-06f, -1.282146113e-06f, -1.222148106e-06f, -1.162153916e-06f, -1.102163646e-06f, -1.042177401e-06f,
+-9.821952821e-07f, -9.222173944e-07f, -8.622438408e-07f, -8.022747246e-07f, -7.423101493e-07f, -6.823502182e-07f, -6.223950346e-07f, -5.624447018e-07f, -5.024993231e-07f, -4.425590018e-07f,
+-3.826238410e-07f, -3.226939442e-07f, -2.627694143e-07f, -2.028503547e-07f, -1.429368686e-07f, -8.302905895e-08f, -2.312702903e-08f, 3.676911809e-08f, 9.665927930e-08f, 1.565433516e-07f,
+2.164212318e-07f, 2.762928170e-07f, 3.361580042e-07f, 3.960166903e-07f, 4.558687724e-07f, 5.157141476e-07f, 5.755527129e-07f, 6.353843655e-07f, 6.952090024e-07f, 7.550265209e-07f,
+8.148368180e-07f, 8.746397910e-07f, 9.344353370e-07f, 9.942233534e-07f, 1.054003737e-06f, 1.113776386e-06f, 1.173541197e-06f, 1.233298068e-06f, 1.293046895e-06f, 1.352787577e-06f,
+1.412520010e-06f, 1.472244092e-06f, 1.531959721e-06f, 1.591666794e-06f, 1.651365208e-06f, 1.711054861e-06f, 1.770735651e-06f, 1.830407475e-06f, 1.890070231e-06f, 1.949723816e-06f,
+2.009368128e-06f, 2.069003065e-06f, 2.128628525e-06f, 2.188244404e-06f, 2.247850601e-06f, 2.307447014e-06f, 2.367033541e-06f, 2.426610079e-06f, 2.486176526e-06f, 2.545732781e-06f,
+2.605278740e-06f, 2.664814302e-06f, 2.724339366e-06f, 2.783853828e-06f, 2.843357588e-06f, 2.902850542e-06f, 2.962332590e-06f, 3.021803629e-06f, 3.081263557e-06f, 3.140712273e-06f,
+3.200149675e-06f, 3.259575661e-06f, 3.318990130e-06f, 3.378392979e-06f, 3.437784107e-06f, 3.497163412e-06f, 3.556530794e-06f, 3.615886149e-06f, 3.675229377e-06f, 3.734560376e-06f,
+3.793879045e-06f, 3.853185282e-06f, 3.912478986e-06f, 3.971760055e-06f, 4.031028388e-06f, 4.090283884e-06f, 4.149526441e-06f, 4.208755959e-06f, 4.267972335e-06f, 4.327175469e-06f,
+4.386365259e-06f, 4.445541605e-06f, 4.504704405e-06f, 4.563853559e-06f, 4.622988965e-06f, 4.682110522e-06f, 4.741218129e-06f, 4.800311685e-06f, 4.859391090e-06f, 4.918456243e-06f,
+4.977507042e-06f, 5.036543388e-06f, 5.095565178e-06f, 5.154572313e-06f, 5.213564692e-06f, 5.272542214e-06f, 5.331504779e-06f, 5.390452286e-06f, 5.449384634e-06f, 5.508301723e-06f,
+5.567203452e-06f, 5.626089722e-06f, 5.684960431e-06f, 5.743815479e-06f, 5.802654767e-06f, 5.861478193e-06f, 5.920285658e-06f, 5.979077060e-06f, 6.037852301e-06f, 6.096611280e-06f,
+6.155353897e-06f, 6.214080051e-06f, 6.272789643e-06f, 6.331482573e-06f, 6.390158741e-06f, 6.448818047e-06f, 6.507460390e-06f, 6.566085672e-06f, 6.624693793e-06f, 6.683284652e-06f,
+6.741858150e-06f, 6.800414188e-06f, 6.858952665e-06f, 6.917473483e-06f, 6.975976541e-06f, 7.034461740e-06f, 7.092928980e-06f, 7.151378163e-06f, 7.209809189e-06f, 7.268221958e-06f,
+7.326616372e-06f, 7.384992330e-06f, 7.443349734e-06f, 7.501688485e-06f, 7.560008483e-06f, 7.618309629e-06f, 7.676591825e-06f, 7.734854971e-06f, 7.793098968e-06f, 7.851323718e-06f,
+7.909529121e-06f, 7.967715079e-06f, 8.025881492e-06f, 8.084028263e-06f, 8.142155293e-06f, 8.200262482e-06f, 8.258349732e-06f, 8.316416945e-06f, 8.374464022e-06f, 8.432490865e-06f,
+8.490497375e-06f, 8.548483453e-06f, 8.606449002e-06f, 8.664393924e-06f, 8.722318119e-06f, 8.780221490e-06f, 8.838103938e-06f, 8.895965366e-06f, 8.953805675e-06f, 9.011624767e-06f,
+9.069422545e-06f, 9.127198910e-06f, 9.184953765e-06f, 9.242687011e-06f, 9.300398551e-06f, 9.358088288e-06f, 9.415756123e-06f, 9.473401958e-06f, 9.531025697e-06f, 9.588627242e-06f,
+9.646206495e-06f, 9.703763358e-06f, 9.761297735e-06f, 9.818809527e-06f, 9.876298639e-06f, 9.933764971e-06f, 9.991208428e-06f, 1.004862891e-05f, 1.010602633e-05f, 1.016340057e-05f,
+1.022075155e-05f, 1.027807918e-05f, 1.033538334e-05f, 1.039266395e-05f, 1.044992090e-05f, 1.050715411e-05f, 1.056436347e-05f, 1.062154889e-05f, 1.067871028e-05f, 1.073584752e-05f,
+1.079296054e-05f, 1.085004923e-05f, 1.090711349e-05f, 1.096415323e-05f, 1.102116836e-05f, 1.107815877e-05f, 1.113512437e-05f, 1.119206507e-05f, 1.124898076e-05f, 1.130587136e-05f,
+1.136273676e-05f, 1.141957688e-05f, 1.147639160e-05f, 1.153318085e-05f, 1.158994452e-05f, 1.164668252e-05f, 1.170339474e-05f, 1.176008111e-05f, 1.181674151e-05f, 1.187337586e-05f,
+1.192998406e-05f, 1.198656601e-05f, 1.204312162e-05f, 1.209965079e-05f, 1.215615343e-05f, 1.221262945e-05f, 1.226907874e-05f, 1.232550122e-05f, 1.238189678e-05f, 1.243826533e-05f,
+1.249460679e-05f, 1.255092104e-05f, 1.260720801e-05f, 1.266346759e-05f, 1.271969968e-05f, 1.277590421e-05f, 1.283208106e-05f, 1.288823014e-05f, 1.294435137e-05f, 1.300044464e-05f,
+1.305650987e-05f, 1.311254695e-05f, 1.316855580e-05f, 1.322453631e-05f, 1.328048841e-05f, 1.333641198e-05f, 1.339230694e-05f, 1.344817319e-05f, 1.350401065e-05f, 1.355981921e-05f,
+1.361559878e-05f, 1.367134927e-05f, 1.372707058e-05f, 1.378276263e-05f, 1.383842531e-05f, 1.389405854e-05f, 1.394966221e-05f, 1.400523625e-05f, 1.406078055e-05f, 1.411629502e-05f,
+1.417177957e-05f, 1.422723410e-05f, 1.428265853e-05f, 1.433805276e-05f, 1.439341669e-05f, 1.444875023e-05f, 1.450405330e-05f, 1.455932579e-05f, 1.461456762e-05f, 1.466977869e-05f,
+1.472495891e-05f, 1.478010818e-05f, 1.483522643e-05f, 1.489031354e-05f, 1.494536944e-05f, 1.500039402e-05f, 1.505538720e-05f, 1.511034889e-05f, 1.516527899e-05f, 1.522017740e-05f,
+1.527504405e-05f, 1.532987883e-05f, 1.538468166e-05f, 1.543945244e-05f, 1.549419108e-05f, 1.554889749e-05f, 1.560357158e-05f, 1.565821326e-05f, 1.571282243e-05f, 1.576739901e-05f,
+1.582194290e-05f, 1.587645401e-05f, 1.593093225e-05f, 1.598537753e-05f, 1.603978976e-05f, 1.609416885e-05f, 1.614851471e-05f, 1.620282724e-05f, 1.625710635e-05f, 1.631135197e-05f,
+1.636556398e-05f, 1.641974231e-05f, 1.647388686e-05f, 1.652799755e-05f, 1.658207428e-05f, 1.663611696e-05f, 1.669012551e-05f, 1.674409982e-05f, 1.679803982e-05f, 1.685194541e-05f,
+1.690581650e-05f, 1.695965301e-05f, 1.701345483e-05f, 1.706722189e-05f, 1.712095410e-05f, 1.717465136e-05f, 1.722831358e-05f, 1.728194068e-05f, 1.733553256e-05f, 1.738908914e-05f,
+1.744261032e-05f, 1.749609603e-05f, 1.754954616e-05f, 1.760296063e-05f, 1.765633936e-05f, 1.770968224e-05f, 1.776298920e-05f, 1.781626015e-05f, 1.786949499e-05f, 1.792269364e-05f,
+1.797585600e-05f, 1.802898200e-05f, 1.808207154e-05f, 1.813512453e-05f, 1.818814089e-05f, 1.824112053e-05f, 1.829406335e-05f, 1.834696928e-05f, 1.839983822e-05f, 1.845267009e-05f,
+1.850546480e-05f, 1.855822225e-05f, 1.861094237e-05f, 1.866362506e-05f, 1.871627024e-05f, 1.876887783e-05f, 1.882144772e-05f, 1.887397984e-05f, 1.892647410e-05f, 1.897893041e-05f,
+1.903134868e-05f, 1.908372883e-05f, 1.913607077e-05f, 1.918837442e-05f, 1.924063968e-05f, 1.929286647e-05f, 1.934505471e-05f, 1.939720430e-05f, 1.944931517e-05f, 1.950138722e-05f,
+1.955342036e-05f, 1.960541452e-05f, 1.965736961e-05f, 1.970928553e-05f, 1.976116221e-05f, 1.981299955e-05f, 1.986479748e-05f, 1.991655591e-05f, 1.996827474e-05f, 2.001995390e-05f,
+2.007159330e-05f, 2.012319285e-05f, 2.017475247e-05f, 2.022627208e-05f, 2.027775158e-05f, 2.032919090e-05f, 2.038058994e-05f, 2.043194863e-05f, 2.048326687e-05f, 2.053454459e-05f,
+2.058578170e-05f, 2.063697811e-05f, 2.068813374e-05f, 2.073924851e-05f, 2.079032232e-05f, 2.084135510e-05f, 2.089234677e-05f, 2.094329723e-05f, 2.099420640e-05f, 2.104507420e-05f,
+2.109590055e-05f, 2.114668536e-05f, 2.119742855e-05f, 2.124813004e-05f, 2.129878973e-05f, 2.134940755e-05f, 2.139998341e-05f, 2.145051724e-05f, 2.150100894e-05f, 2.155145843e-05f,
+2.160186564e-05f, 2.165223047e-05f, 2.170255285e-05f, 2.175283269e-05f, 2.180306991e-05f, 2.185326442e-05f, 2.190341615e-05f, 2.195352500e-05f, 2.200359091e-05f, 2.205361378e-05f,
+2.210359354e-05f, 2.215353009e-05f, 2.220342337e-05f, 2.225327328e-05f, 2.230307975e-05f, 2.235284269e-05f, 2.240256203e-05f, 2.245223767e-05f, 2.250186954e-05f, 2.255145756e-05f,
+2.260100164e-05f, 2.265050171e-05f, 2.269995767e-05f, 2.274936946e-05f, 2.279873699e-05f, 2.284806018e-05f, 2.289733895e-05f, 2.294657321e-05f, 2.299576289e-05f, 2.304490790e-05f,
+2.309400817e-05f, 2.314306362e-05f, 2.319207416e-05f, 2.324103971e-05f, 2.328996019e-05f, 2.333883553e-05f, 2.338766564e-05f, 2.343645044e-05f, 2.348518986e-05f, 2.353388381e-05f,
+2.358253221e-05f, 2.363113498e-05f, 2.367969205e-05f, 2.372820334e-05f, 2.377666876e-05f, 2.382508823e-05f, 2.387346168e-05f, 2.392178903e-05f, 2.397007019e-05f, 2.401830510e-05f,
+2.406649367e-05f, 2.411463581e-05f, 2.416273146e-05f, 2.421078054e-05f, 2.425878296e-05f, 2.430673864e-05f, 2.435464752e-05f, 2.440250950e-05f, 2.445032452e-05f, 2.449809249e-05f,
+2.454581334e-05f, 2.459348698e-05f, 2.464111335e-05f, 2.468869236e-05f, 2.473622393e-05f, 2.478370800e-05f, 2.483114447e-05f, 2.487853327e-05f, 2.492587433e-05f, 2.497316757e-05f,
+2.502041290e-05f, 2.506761026e-05f, 2.511475957e-05f, 2.516186075e-05f, 2.520891372e-05f, 2.525591841e-05f, 2.530287474e-05f, 2.534978263e-05f, 2.539664201e-05f, 2.544345280e-05f,
+2.549021493e-05f, 2.553692831e-05f, 2.558359288e-05f, 2.563020855e-05f, 2.567677525e-05f, 2.572329291e-05f, 2.576976145e-05f, 2.581618079e-05f, 2.586255086e-05f, 2.590887159e-05f,
+2.595514289e-05f, 2.600136469e-05f, 2.604753692e-05f, 2.609365951e-05f, 2.613973237e-05f, 2.618575543e-05f, 2.623172862e-05f, 2.627765187e-05f, 2.632352509e-05f, 2.636934822e-05f,
+2.641512118e-05f, 2.646084390e-05f, 2.650651629e-05f, 2.655213830e-05f, 2.659770983e-05f, 2.664323083e-05f, 2.668870121e-05f, 2.673412091e-05f, 2.677948984e-05f, 2.682480794e-05f,
+2.687007513e-05f, 2.691529134e-05f, 2.696045650e-05f, 2.700557053e-05f, 2.705063335e-05f, 2.709564490e-05f, 2.714060511e-05f, 2.718551390e-05f, 2.723037119e-05f, 2.727517692e-05f,
+2.731993102e-05f, 2.736463340e-05f, 2.740928400e-05f, 2.745388275e-05f, 2.749842958e-05f, 2.754292440e-05f, 2.758736716e-05f, 2.763175778e-05f, 2.767609618e-05f, 2.772038230e-05f,
+2.776461606e-05f, 2.780879739e-05f, 2.785292623e-05f, 2.789700250e-05f, 2.794102612e-05f, 2.798499704e-05f, 2.802891517e-05f, 2.807278044e-05f, 2.811659280e-05f, 2.816035216e-05f,
+2.820405845e-05f, 2.824771161e-05f, 2.829131156e-05f, 2.833485824e-05f, 2.837835157e-05f, 2.842179148e-05f, 2.846517791e-05f, 2.850851078e-05f, 2.855179003e-05f, 2.859501558e-05f,
+2.863818737e-05f, 2.868130532e-05f, 2.872436937e-05f, 2.876737945e-05f, 2.881033548e-05f, 2.885323741e-05f, 2.889608515e-05f, 2.893887865e-05f, 2.898161783e-05f, 2.902430263e-05f,
+2.906693297e-05f, 2.910950879e-05f, 2.915203002e-05f, 2.919449658e-05f, 2.923690843e-05f, 2.927926548e-05f, 2.932156766e-05f, 2.936381491e-05f, 2.940600717e-05f, 2.944814436e-05f,
+2.949022642e-05f, 2.953225327e-05f, 2.957422486e-05f, 2.961614112e-05f, 2.965800197e-05f, 2.969980735e-05f, 2.974155720e-05f, 2.978325144e-05f, 2.982489002e-05f, 2.986647286e-05f,
+2.990799989e-05f, 2.994947106e-05f, 2.999088629e-05f, 3.003224553e-05f, 3.007354869e-05f, 3.011479572e-05f, 3.015598656e-05f, 3.019712112e-05f, 3.023819936e-05f, 3.027922121e-05f,
+3.032018659e-05f, 3.036109544e-05f, 3.040194771e-05f, 3.044274332e-05f, 3.048348220e-05f, 3.052416430e-05f, 3.056478955e-05f, 3.060535788e-05f, 3.064586923e-05f, 3.068632354e-05f,
+3.072672074e-05f, 3.076706076e-05f, 3.080734355e-05f, 3.084756903e-05f, 3.088773715e-05f, 3.092784784e-05f, 3.096790103e-05f, 3.100789667e-05f, 3.104783469e-05f, 3.108771502e-05f,
+3.112753761e-05f, 3.116730239e-05f, 3.120700929e-05f, 3.124665826e-05f, 3.128624923e-05f, 3.132578213e-05f, 3.136525691e-05f, 3.140467351e-05f, 3.144403185e-05f, 3.148333188e-05f,
+3.152257354e-05f, 3.156175676e-05f, 3.160088149e-05f, 3.163994765e-05f, 3.167895519e-05f, 3.171790405e-05f, 3.175679416e-05f, 3.179562546e-05f, 3.183439790e-05f, 3.187311140e-05f,
+3.191176592e-05f, 3.195036138e-05f, 3.198889773e-05f, 3.202737491e-05f, 3.206579285e-05f, 3.210415150e-05f, 3.214245080e-05f, 3.218069067e-05f, 3.221887108e-05f, 3.225699194e-05f,
+3.229505321e-05f, 3.233305482e-05f, 3.237099672e-05f, 3.240887884e-05f, 3.244670112e-05f, 3.248446351e-05f, 3.252216595e-05f, 3.255980837e-05f, 3.259739072e-05f, 3.263491293e-05f,
+3.267237496e-05f, 3.270977674e-05f, 3.274711820e-05f, 3.278439930e-05f, 3.282161998e-05f, 3.285878017e-05f, 3.289587981e-05f, 3.293291886e-05f, 3.296989725e-05f, 3.300681492e-05f,
+3.304367181e-05f, 3.308046788e-05f, 3.311720305e-05f, 3.315387728e-05f, 3.319049050e-05f, 3.322704266e-05f, 3.326353369e-05f, 3.329996356e-05f, 3.333633218e-05f, 3.337263952e-05f,
+3.340888551e-05f, 3.344507010e-05f, 3.348119323e-05f, 3.351725484e-05f, 3.355325487e-05f, 3.358919328e-05f, 3.362507000e-05f, 3.366088498e-05f, 3.369663816e-05f, 3.373232949e-05f,
+3.376795891e-05f, 3.380352637e-05f, 3.383903180e-05f, 3.387447517e-05f, 3.390985640e-05f, 3.394517544e-05f, 3.398043225e-05f, 3.401562676e-05f, 3.405075892e-05f, 3.408582868e-05f,
+3.412083598e-05f, 3.415578077e-05f, 3.419066298e-05f, 3.422548258e-05f, 3.426023950e-05f, 3.429493369e-05f, 3.432956510e-05f, 3.436413367e-05f, 3.439863935e-05f, 3.443308209e-05f,
+3.446746182e-05f, 3.450177851e-05f, 3.453603209e-05f, 3.457022252e-05f, 3.460434974e-05f, 3.463841369e-05f, 3.467241433e-05f, 3.470635160e-05f, 3.474022545e-05f, 3.477403582e-05f,
+3.480778268e-05f, 3.484146595e-05f, 3.487508560e-05f, 3.490864156e-05f, 3.494213379e-05f, 3.497556224e-05f, 3.500892686e-05f, 3.504222758e-05f, 3.507546437e-05f, 3.510863716e-05f,
+3.514174592e-05f, 3.517479059e-05f, 3.520777111e-05f, 3.524068744e-05f, 3.527353952e-05f, 3.530632731e-05f, 3.533905076e-05f, 3.537170981e-05f, 3.540430442e-05f, 3.543683453e-05f,
+3.546930009e-05f, 3.550170106e-05f, 3.553403739e-05f, 3.556630902e-05f, 3.559851591e-05f, 3.563065801e-05f, 3.566273527e-05f, 3.569474763e-05f, 3.572669505e-05f, 3.575857749e-05f,
+3.579039489e-05f, 3.582214720e-05f, 3.585383438e-05f, 3.588545637e-05f, 3.591701313e-05f, 3.594850462e-05f, 3.597993077e-05f, 3.601129155e-05f, 3.604258691e-05f, 3.607381680e-05f,
+3.610498117e-05f, 3.613607997e-05f, 3.616711316e-05f, 3.619808069e-05f, 3.622898251e-05f, 3.625981858e-05f, 3.629058885e-05f, 3.632129326e-05f, 3.635193179e-05f, 3.638250437e-05f,
+3.641301097e-05f, 3.644345153e-05f, 3.647382602e-05f, 3.650413437e-05f, 3.653437656e-05f, 3.656455253e-05f, 3.659466223e-05f, 3.662470563e-05f, 3.665468267e-05f, 3.668459332e-05f,
+3.671443752e-05f, 3.674421523e-05f, 3.677392640e-05f, 3.680357100e-05f, 3.683314897e-05f, 3.686266028e-05f, 3.689210487e-05f, 3.692148270e-05f, 3.695079373e-05f, 3.698003792e-05f,
+3.700921522e-05f, 3.703832558e-05f, 3.706736897e-05f, 3.709634534e-05f, 3.712525464e-05f, 3.715409683e-05f, 3.718287188e-05f, 3.721157973e-05f, 3.724022034e-05f, 3.726879367e-05f,
+3.729729968e-05f, 3.732573833e-05f, 3.735410956e-05f, 3.738241335e-05f, 3.741064964e-05f, 3.743881840e-05f, 3.746691959e-05f, 3.749495315e-05f, 3.752291906e-05f, 3.755081726e-05f,
+3.757864771e-05f, 3.760641039e-05f, 3.763410523e-05f, 3.766173221e-05f, 3.768929128e-05f, 3.771678240e-05f, 3.774420553e-05f, 3.777156063e-05f, 3.779884766e-05f, 3.782606657e-05f,
+3.785321733e-05f, 3.788029990e-05f, 3.790731424e-05f, 3.793426030e-05f, 3.796113805e-05f, 3.798794745e-05f, 3.801468846e-05f, 3.804136103e-05f, 3.806796514e-05f, 3.809450073e-05f,
+3.812096777e-05f, 3.814736623e-05f, 3.817369606e-05f, 3.819995722e-05f, 3.822614968e-05f, 3.825227339e-05f, 3.827832833e-05f, 3.830431444e-05f, 3.833023170e-05f, 3.835608006e-05f,
+3.838185949e-05f, 3.840756994e-05f, 3.843321139e-05f, 3.845878379e-05f, 3.848428710e-05f, 3.850972130e-05f, 3.853508633e-05f, 3.856038217e-05f, 3.858560878e-05f, 3.861076612e-05f,
+3.863585415e-05f, 3.866087284e-05f, 3.868582215e-05f, 3.871070205e-05f, 3.873551249e-05f, 3.876025345e-05f, 3.878492489e-05f, 3.880952676e-05f, 3.883405904e-05f, 3.885852169e-05f,
+3.888291468e-05f, 3.890723796e-05f, 3.893149151e-05f, 3.895567529e-05f, 3.897978926e-05f, 3.900383339e-05f, 3.902780765e-05f, 3.905171199e-05f, 3.907554639e-05f, 3.909931081e-05f,
+3.912300522e-05f, 3.914662958e-05f, 3.917018386e-05f, 3.919366803e-05f, 3.921708205e-05f, 3.924042588e-05f, 3.926369950e-05f, 3.928690288e-05f, 3.931003597e-05f, 3.933309874e-05f,
+3.935609117e-05f, 3.937901321e-05f, 3.940186485e-05f, 3.942464603e-05f, 3.944735674e-05f, 3.946999694e-05f, 3.949256660e-05f, 3.951506568e-05f, 3.953749415e-05f, 3.955985199e-05f,
+3.958213915e-05f, 3.960435562e-05f, 3.962650135e-05f, 3.964857631e-05f, 3.967058048e-05f, 3.969251383e-05f, 3.971437631e-05f, 3.973616791e-05f, 3.975788859e-05f, 3.977953832e-05f,
+3.980111707e-05f, 3.982262481e-05f, 3.984406151e-05f, 3.986542713e-05f, 3.988672166e-05f, 3.990794506e-05f, 3.992909730e-05f, 3.995017834e-05f, 3.997118817e-05f, 3.999212675e-05f,
+4.001299406e-05f, 4.003379006e-05f, 4.005451472e-05f, 4.007516802e-05f, 4.009574992e-05f, 4.011626041e-05f, 4.013669944e-05f, 4.015706700e-05f, 4.017736305e-05f, 4.019758757e-05f,
+4.021774052e-05f, 4.023782189e-05f, 4.025783164e-05f, 4.027776974e-05f, 4.029763617e-05f, 4.031743091e-05f, 4.033715391e-05f, 4.035680517e-05f, 4.037638464e-05f, 4.039589230e-05f,
+4.041532813e-05f, 4.043469211e-05f, 4.045398419e-05f, 4.047320436e-05f, 4.049235259e-05f, 4.051142886e-05f, 4.053043314e-05f, 4.054936540e-05f, 4.056822562e-05f, 4.058701377e-05f,
+4.060572983e-05f, 4.062437377e-05f, 4.064294556e-05f, 4.066144519e-05f, 4.067987262e-05f, 4.069822784e-05f, 4.071651082e-05f, 4.073472152e-05f, 4.075285994e-05f, 4.077092604e-05f,
+4.078891980e-05f, 4.080684120e-05f, 4.082469021e-05f, 4.084246681e-05f, 4.086017098e-05f, 4.087780268e-05f, 4.089536191e-05f, 4.091284863e-05f, 4.093026283e-05f, 4.094760447e-05f,
+4.096487354e-05f, 4.098207002e-05f, 4.099919387e-05f, 4.101624509e-05f, 4.103322364e-05f, 4.105012951e-05f, 4.106696267e-05f, 4.108372310e-05f, 4.110041078e-05f, 4.111702569e-05f,
+4.113356780e-05f, 4.115003710e-05f, 4.116643356e-05f, 4.118275717e-05f, 4.119900789e-05f, 4.121518571e-05f, 4.123129062e-05f, 4.124732258e-05f, 4.126328158e-05f, 4.127916760e-05f,
+4.129498062e-05f, 4.131072062e-05f, 4.132638757e-05f, 4.134198146e-05f, 4.135750227e-05f, 4.137294997e-05f, 4.138832456e-05f, 4.140362601e-05f, 4.141885429e-05f, 4.143400940e-05f,
+4.144909131e-05f, 4.146410001e-05f, 4.147903546e-05f, 4.149389767e-05f, 4.150868660e-05f, 4.152340225e-05f, 4.153804458e-05f, 4.155261359e-05f, 4.156710926e-05f, 4.158153156e-05f,
+4.159588048e-05f, 4.161015600e-05f, 4.162435811e-05f, 4.163848679e-05f, 4.165254202e-05f, 4.166652378e-05f, 4.168043206e-05f, 4.169426684e-05f, 4.170802810e-05f, 4.172171583e-05f,
+4.173533001e-05f, 4.174887063e-05f, 4.176233766e-05f, 4.177573109e-05f, 4.178905092e-05f, 4.180229711e-05f, 4.181546965e-05f, 4.182856854e-05f, 4.184159375e-05f, 4.185454527e-05f,
+4.186742309e-05f, 4.188022718e-05f, 4.189295754e-05f, 4.190561414e-05f, 4.191819699e-05f, 4.193070605e-05f, 4.194314132e-05f, 4.195550278e-05f, 4.196779042e-05f, 4.198000422e-05f,
+4.199214417e-05f, 4.200421026e-05f, 4.201620247e-05f, 4.202812080e-05f, 4.203996521e-05f, 4.205173572e-05f, 4.206343229e-05f, 4.207505492e-05f, 4.208660359e-05f, 4.209807830e-05f,
+4.210947902e-05f, 4.212080576e-05f, 4.213205848e-05f, 4.214323719e-05f, 4.215434188e-05f, 4.216537252e-05f, 4.217632910e-05f, 4.218721163e-05f, 4.219802007e-05f, 4.220875443e-05f,
+4.221941470e-05f, 4.223000085e-05f, 4.224051288e-05f, 4.225095078e-05f, 4.226131454e-05f, 4.227160415e-05f, 4.228181959e-05f, 4.229196086e-05f, 4.230202795e-05f, 4.231202084e-05f,
+4.232193953e-05f, 4.233178401e-05f, 4.234155426e-05f, 4.235125029e-05f, 4.236087207e-05f, 4.237041960e-05f, 4.237989287e-05f, 4.238929187e-05f, 4.239861659e-05f, 4.240786703e-05f,
+4.241704317e-05f, 4.242614501e-05f, 4.243517253e-05f, 4.244412574e-05f, 4.245300462e-05f, 4.246180916e-05f, 4.247053935e-05f, 4.247919520e-05f, 4.248777668e-05f, 4.249628380e-05f,
+4.250471655e-05f, 4.251307491e-05f, 4.252135888e-05f, 4.252956846e-05f, 4.253770364e-05f, 4.254576441e-05f, 4.255375076e-05f, 4.256166269e-05f, 4.256950019e-05f, 4.257726326e-05f,
+4.258495189e-05f, 4.259256607e-05f, 4.260010580e-05f, 4.260757107e-05f, 4.261496188e-05f, 4.262227822e-05f, 4.262952009e-05f, 4.263668748e-05f, 4.264378038e-05f, 4.265079880e-05f,
+4.265774272e-05f, 4.266461214e-05f, 4.267140707e-05f, 4.267812748e-05f, 4.268477339e-05f, 4.269134477e-05f, 4.269784164e-05f, 4.270426399e-05f, 4.271061181e-05f, 4.271688510e-05f,
+4.272308386e-05f, 4.272920808e-05f, 4.273525776e-05f, 4.274123290e-05f, 4.274713349e-05f, 4.275295953e-05f, 4.275871102e-05f, 4.276438796e-05f, 4.276999034e-05f, 4.277551816e-05f,
+4.278097142e-05f, 4.278635012e-05f, 4.279165425e-05f, 4.279688382e-05f, 4.280203882e-05f, 4.280711925e-05f, 4.281212511e-05f, 4.281705640e-05f, 4.282191311e-05f, 4.282669525e-05f,
+4.283140281e-05f, 4.283603580e-05f, 4.284059422e-05f, 4.284507805e-05f, 4.284948731e-05f, 4.285382199e-05f, 4.285808209e-05f, 4.286226762e-05f, 4.286637857e-05f, 4.287041494e-05f,
+4.287437674e-05f, 4.287826396e-05f, 4.288207660e-05f, 4.288581467e-05f, 4.288947817e-05f, 4.289306709e-05f, 4.289658145e-05f, 4.290002123e-05f, 4.290338645e-05f, 4.290667710e-05f,
+4.290989318e-05f, 4.291303470e-05f, 4.291610166e-05f, 4.291909407e-05f, 4.292201191e-05f, 4.292485520e-05f, 4.292762394e-05f, 4.293031813e-05f, 4.293293777e-05f, 4.293548287e-05f,
+4.293795343e-05f, 4.294034946e-05f, 4.294267094e-05f, 4.294491790e-05f, 4.294709033e-05f, 4.294918824e-05f, 4.295121163e-05f, 4.295316050e-05f, 4.295503486e-05f, 4.295683471e-05f,
+4.295856006e-05f, 4.296021092e-05f, 4.296178727e-05f, 4.296328914e-05f, 4.296471652e-05f, 4.296606943e-05f, 4.296734786e-05f, 4.296855182e-05f, 4.296968131e-05f, 4.297073635e-05f,
+4.297171693e-05f, 4.297262307e-05f, 4.297345477e-05f, 4.297421203e-05f, 4.297489486e-05f, 4.297550327e-05f, 4.297603726e-05f, 4.297649684e-05f, 4.297688202e-05f, 4.297719280e-05f,
+4.297742919e-05f, 4.297759120e-05f, 4.297767883e-05f, 4.297769209e-05f, 4.297763100e-05f, 4.297749555e-05f, 4.297728575e-05f, 4.297700161e-05f, 4.297664315e-05f, 4.297621036e-05f,
+4.297570326e-05f, 4.297512185e-05f, 4.297446615e-05f, 4.297373615e-05f, 4.297293188e-05f, 4.297205333e-05f, 4.297110053e-05f, 4.297007346e-05f, 4.296897216e-05f, 4.296779662e-05f,
+4.296654685e-05f, 4.296522287e-05f, 4.296382468e-05f, 4.296235230e-05f, 4.296080573e-05f, 4.295918498e-05f, 4.295749007e-05f, 4.295572100e-05f, 4.295387778e-05f, 4.295196043e-05f,
+4.294996896e-05f, 4.294790337e-05f, 4.294576368e-05f, 4.294354990e-05f, 4.294126204e-05f, 4.293890011e-05f, 4.293646413e-05f, 4.293395410e-05f, 4.293137003e-05f, 4.292871194e-05f,
+4.292597984e-05f, 4.292317375e-05f, 4.292029367e-05f, 4.291733961e-05f, 4.291431160e-05f, 4.291120963e-05f, 4.290803373e-05f, 4.290478391e-05f, 4.290146018e-05f, 4.289806255e-05f,
+4.289459104e-05f, 4.289104566e-05f, 4.288742642e-05f, 4.288373334e-05f, 4.287996644e-05f, 4.287612571e-05f, 4.287221119e-05f, 4.286822287e-05f, 4.286416079e-05f, 4.286002495e-05f,
+4.285581536e-05f, 4.285153205e-05f, 4.284717502e-05f, 4.284274429e-05f, 4.283823987e-05f, 4.283366179e-05f, 4.282901005e-05f, 4.282428468e-05f, 4.281948568e-05f, 4.281461307e-05f,
+4.280966687e-05f, 4.280464710e-05f, 4.279955376e-05f, 4.279438689e-05f, 4.278914648e-05f, 4.278383257e-05f, 4.277844516e-05f, 4.277298427e-05f, 4.276744992e-05f, 4.276184213e-05f,
+4.275616091e-05f, 4.275040628e-05f, 4.274457826e-05f, 4.273867686e-05f, 4.273270210e-05f, 4.272665401e-05f, 4.272053259e-05f, 4.271433787e-05f, 4.270806986e-05f, 4.270172859e-05f,
+4.269531406e-05f, 4.268882630e-05f, 4.268226533e-05f, 4.267563117e-05f, 4.266892383e-05f, 4.266214334e-05f, 4.265528970e-05f, 4.264836295e-05f, 4.264136310e-05f, 4.263429017e-05f,
+4.262714418e-05f, 4.261992515e-05f, 4.261263310e-05f, 4.260526804e-05f, 4.259783001e-05f, 4.259031902e-05f, 4.258273508e-05f, 4.257507823e-05f, 4.256734848e-05f, 4.255954585e-05f,
+4.255167036e-05f, 4.254372203e-05f, 4.253570089e-05f, 4.252760695e-05f, 4.251944024e-05f, 4.251120078e-05f, 4.250288858e-05f, 4.249450368e-05f, 4.248604609e-05f, 4.247751583e-05f,
+4.246891293e-05f, 4.246023741e-05f, 4.245148930e-05f, 4.244266860e-05f, 4.243377535e-05f, 4.242480957e-05f, 4.241577128e-05f, 4.240666051e-05f, 4.239747727e-05f, 4.238822159e-05f,
+4.237889350e-05f, 4.236949301e-05f, 4.236002015e-05f, 4.235047495e-05f, 4.234085742e-05f, 4.233116760e-05f, 4.232140550e-05f, 4.231157116e-05f, 4.230166458e-05f, 4.229168581e-05f,
+4.228163485e-05f, 4.227151175e-05f, 4.226131652e-05f, 4.225104918e-05f, 4.224070977e-05f, 4.223029830e-05f, 4.221981481e-05f, 4.220925931e-05f, 4.219863183e-05f, 4.218793241e-05f,
+4.217716106e-05f, 4.216631781e-05f, 4.215540268e-05f, 4.214441571e-05f, 4.213335692e-05f, 4.212222633e-05f, 4.211102397e-05f, 4.209974987e-05f, 4.208840405e-05f, 4.207698655e-05f,
+4.206549738e-05f, 4.205393658e-05f, 4.204230417e-05f, 4.203060018e-05f, 4.201882464e-05f, 4.200697757e-05f, 4.199505900e-05f, 4.198306896e-05f, 4.197100749e-05f, 4.195887459e-05f,
+4.194667031e-05f, 4.193439468e-05f, 4.192204771e-05f, 4.190962944e-05f, 4.189713990e-05f, 4.188457912e-05f, 4.187194712e-05f, 4.185924393e-05f, 4.184646959e-05f, 4.183362412e-05f,
+4.182070756e-05f, 4.180771992e-05f, 4.179466125e-05f, 4.178153156e-05f, 4.176833090e-05f, 4.175505929e-05f, 4.174171675e-05f, 4.172830333e-05f, 4.171481905e-05f, 4.170126394e-05f,
+4.168763803e-05f, 4.167394135e-05f, 4.166017394e-05f, 4.164633582e-05f, 4.163242702e-05f, 4.161844759e-05f, 4.160439753e-05f, 4.159027690e-05f, 4.157608572e-05f, 4.156182402e-05f,
+4.154749184e-05f, 4.153308920e-05f, 4.151861613e-05f, 4.150407268e-05f, 4.148945887e-05f, 4.147477473e-05f, 4.146002030e-05f, 4.144519561e-05f, 4.143030069e-05f, 4.141533557e-05f,
+4.140030029e-05f, 4.138519488e-05f, 4.137001938e-05f, 4.135477381e-05f, 4.133945821e-05f, 4.132407262e-05f, 4.130861706e-05f, 4.129309158e-05f, 4.127749620e-05f, 4.126183096e-05f,
+4.124609589e-05f, 4.123029103e-05f, 4.121441641e-05f, 4.119847207e-05f, 4.118245803e-05f, 4.116637435e-05f, 4.115022104e-05f, 4.113399815e-05f, 4.111770570e-05f, 4.110134375e-05f,
+4.108491231e-05f, 4.106841143e-05f, 4.105184114e-05f, 4.103520147e-05f, 4.101849247e-05f, 4.100171417e-05f, 4.098486660e-05f, 4.096794981e-05f, 4.095096382e-05f, 4.093390867e-05f,
+4.091678440e-05f, 4.089959105e-05f, 4.088232865e-05f, 4.086499724e-05f, 4.084759685e-05f, 4.083012753e-05f, 4.081258931e-05f, 4.079498223e-05f, 4.077730632e-05f, 4.075956163e-05f,
+4.074174818e-05f, 4.072386603e-05f, 4.070591519e-05f, 4.068789573e-05f, 4.066980766e-05f, 4.065165103e-05f, 4.063342588e-05f, 4.061513225e-05f, 4.059677017e-05f, 4.057833969e-05f,
+4.055984084e-05f, 4.054127366e-05f, 4.052263818e-05f, 4.050393446e-05f, 4.048516253e-05f, 4.046632242e-05f, 4.044741418e-05f, 4.042843785e-05f, 4.040939347e-05f, 4.039028107e-05f,
+4.037110069e-05f, 4.035185238e-05f, 4.033253618e-05f, 4.031315213e-05f, 4.029370026e-05f, 4.027418061e-05f, 4.025459324e-05f, 4.023493817e-05f, 4.021521545e-05f, 4.019542512e-05f,
+4.017556723e-05f, 4.015564180e-05f, 4.013564889e-05f, 4.011558853e-05f, 4.009546077e-05f, 4.007526564e-05f, 4.005500320e-05f, 4.003467347e-05f, 4.001427651e-05f, 3.999381236e-05f,
+3.997328105e-05f, 3.995268263e-05f, 3.993201714e-05f, 3.991128463e-05f, 3.989048513e-05f, 3.986961869e-05f, 3.984868536e-05f, 3.982768517e-05f, 3.980661817e-05f, 3.978548440e-05f,
+3.976428390e-05f, 3.974301672e-05f, 3.972168291e-05f, 3.970028250e-05f, 3.967881553e-05f, 3.965728206e-05f, 3.963568213e-05f, 3.961401578e-05f, 3.959228305e-05f, 3.957048399e-05f,
+3.954861864e-05f, 3.952668706e-05f, 3.950468927e-05f, 3.948262533e-05f, 3.946049528e-05f, 3.943829917e-05f, 3.941603704e-05f, 3.939370894e-05f, 3.937131491e-05f, 3.934885500e-05f,
+3.932632925e-05f, 3.930373771e-05f, 3.928108042e-05f, 3.925835743e-05f, 3.923556879e-05f, 3.921271454e-05f, 3.918979473e-05f, 3.916680940e-05f, 3.914375861e-05f, 3.912064239e-05f,
+3.909746079e-05f, 3.907421386e-05f, 3.905090165e-05f, 3.902752421e-05f, 3.900408157e-05f, 3.898057379e-05f, 3.895700092e-05f, 3.893336300e-05f, 3.890966008e-05f, 3.888589221e-05f,
+3.886205943e-05f, 3.883816180e-05f, 3.881419935e-05f, 3.879017215e-05f, 3.876608023e-05f, 3.874192364e-05f, 3.871770244e-05f, 3.869341667e-05f, 3.866906638e-05f, 3.864465162e-05f,
+3.862017243e-05f, 3.859562887e-05f, 3.857102099e-05f, 3.854634883e-05f, 3.852161244e-05f, 3.849681188e-05f, 3.847194718e-05f, 3.844701841e-05f, 3.842202561e-05f, 3.839696883e-05f,
+3.837184812e-05f, 3.834666352e-05f, 3.832141510e-05f, 3.829610290e-05f, 3.827072697e-05f, 3.824528736e-05f, 3.821978412e-05f, 3.819421730e-05f, 3.816858695e-05f, 3.814289313e-05f,
+3.811713588e-05f, 3.809131525e-05f, 3.806543130e-05f, 3.803948408e-05f, 3.801347363e-05f, 3.798740001e-05f, 3.796126327e-05f, 3.793506347e-05f, 3.790880065e-05f, 3.788247486e-05f,
+3.785608617e-05f, 3.782963461e-05f, 3.780312024e-05f, 3.777654312e-05f, 3.774990329e-05f, 3.772320081e-05f, 3.769643573e-05f, 3.766960811e-05f, 3.764271799e-05f, 3.761576543e-05f,
+3.758875048e-05f, 3.756167320e-05f, 3.753453363e-05f, 3.750733184e-05f, 3.748006787e-05f, 3.745274177e-05f, 3.742535361e-05f, 3.739790344e-05f, 3.737039130e-05f, 3.734281725e-05f,
+3.731518135e-05f, 3.728748365e-05f, 3.725972421e-05f, 3.723190307e-05f, 3.720402030e-05f, 3.717607595e-05f, 3.714807006e-05f, 3.712000271e-05f, 3.709187393e-05f, 3.706368379e-05f,
+3.703543234e-05f, 3.700711964e-05f, 3.697874574e-05f, 3.695031069e-05f, 3.692181456e-05f, 3.689325740e-05f, 3.686463925e-05f, 3.683596019e-05f, 3.680722026e-05f, 3.677841952e-05f,
+3.674955803e-05f, 3.672063583e-05f, 3.669165300e-05f, 3.666260958e-05f, 3.663350563e-05f, 3.660434121e-05f, 3.657511637e-05f, 3.654583117e-05f, 3.651648567e-05f, 3.648707992e-05f,
+3.645761398e-05f, 3.642808791e-05f, 3.639850177e-05f, 3.636885561e-05f, 3.633914948e-05f, 3.630938346e-05f, 3.627955759e-05f, 3.624967193e-05f, 3.621972654e-05f, 3.618972147e-05f,
+3.615965679e-05f, 3.612953256e-05f, 3.609934883e-05f, 3.606910565e-05f, 3.603880310e-05f, 3.600844122e-05f, 3.597802007e-05f, 3.594753972e-05f, 3.591700022e-05f, 3.588640164e-05f,
+3.585574402e-05f, 3.582502743e-05f, 3.579425192e-05f, 3.576341757e-05f, 3.573252442e-05f, 3.570157254e-05f, 3.567056198e-05f, 3.563949280e-05f, 3.560836507e-05f, 3.557717885e-05f,
+3.554593419e-05f, 3.551463115e-05f, 3.548326979e-05f, 3.545185018e-05f, 3.542037237e-05f, 3.538883643e-05f, 3.535724241e-05f, 3.532559038e-05f, 3.529388039e-05f, 3.526211251e-05f,
+3.523028680e-05f, 3.519840331e-05f, 3.516646212e-05f, 3.513446327e-05f, 3.510240684e-05f, 3.507029287e-05f, 3.503812144e-05f, 3.500589261e-05f, 3.497360644e-05f, 3.494126298e-05f,
+3.490886230e-05f, 3.487640446e-05f, 3.484388953e-05f, 3.481131757e-05f, 3.477868863e-05f, 3.474600278e-05f, 3.471326009e-05f, 3.468046061e-05f, 3.464760440e-05f, 3.461469154e-05f,
+3.458172208e-05f, 3.454869608e-05f, 3.451561362e-05f, 3.448247474e-05f, 3.444927952e-05f, 3.441602801e-05f, 3.438272029e-05f, 3.434935640e-05f, 3.431593643e-05f, 3.428246042e-05f,
+3.424892845e-05f, 3.421534058e-05f, 3.418169686e-05f, 3.414799738e-05f, 3.411424218e-05f, 3.408043133e-05f, 3.404656490e-05f, 3.401264296e-05f, 3.397866555e-05f, 3.394463276e-05f,
+3.391054465e-05f, 3.387640127e-05f, 3.384220269e-05f, 3.380794898e-05f, 3.377364021e-05f, 3.373927643e-05f, 3.370485772e-05f, 3.367038413e-05f, 3.363585574e-05f, 3.360127261e-05f,
+3.356663480e-05f, 3.353194238e-05f, 3.349719541e-05f, 3.346239396e-05f, 3.342753810e-05f, 3.339262789e-05f, 3.335766340e-05f, 3.332264470e-05f, 3.328757184e-05f, 3.325244490e-05f,
+3.321726393e-05f, 3.318202902e-05f, 3.314674023e-05f, 3.311139761e-05f, 3.307600124e-05f, 3.304055119e-05f, 3.300504751e-05f, 3.296949029e-05f, 3.293387958e-05f, 3.289821545e-05f,
+3.286249797e-05f, 3.282672720e-05f, 3.279090322e-05f, 3.275502609e-05f, 3.271909588e-05f, 3.268311265e-05f, 3.264707648e-05f, 3.261098742e-05f, 3.257484556e-05f, 3.253865095e-05f,
+3.250240367e-05f, 3.246610378e-05f, 3.242975134e-05f, 3.239334644e-05f, 3.235688914e-05f, 3.232037950e-05f, 3.228381759e-05f, 3.224720348e-05f, 3.221053725e-05f, 3.217381896e-05f,
+3.213704867e-05f, 3.210022646e-05f, 3.206335240e-05f, 3.202642655e-05f, 3.198944898e-05f, 3.195241977e-05f, 3.191533898e-05f, 3.187820669e-05f, 3.184102295e-05f, 3.180378785e-05f,
+3.176650145e-05f, 3.172916381e-05f, 3.169177502e-05f, 3.165433513e-05f, 3.161684423e-05f, 3.157930238e-05f, 3.154170964e-05f, 3.150406610e-05f, 3.146637181e-05f, 3.142862686e-05f,
+3.139083130e-05f, 3.135298522e-05f, 3.131508868e-05f, 3.127714175e-05f, 3.123914451e-05f, 3.120109702e-05f, 3.116299935e-05f, 3.112485158e-05f, 3.108665378e-05f, 3.104840601e-05f,
+3.101010836e-05f, 3.097176088e-05f, 3.093336366e-05f, 3.089491676e-05f, 3.085642026e-05f, 3.081787422e-05f, 3.077927872e-05f, 3.074063383e-05f, 3.070193963e-05f, 3.066319617e-05f,
+3.062440354e-05f, 3.058556181e-05f, 3.054667105e-05f, 3.050773134e-05f, 3.046874273e-05f, 3.042970532e-05f, 3.039061916e-05f, 3.035148433e-05f, 3.031230091e-05f, 3.027306897e-05f,
+3.023378857e-05f, 3.019445980e-05f, 3.015508273e-05f, 3.011565742e-05f, 3.007618396e-05f, 3.003666241e-05f, 2.999709284e-05f, 2.995747534e-05f, 2.991780998e-05f, 2.987809682e-05f,
+2.983833594e-05f, 2.979852742e-05f, 2.975867133e-05f, 2.971876774e-05f, 2.967881673e-05f, 2.963881837e-05f, 2.959877274e-05f, 2.955867990e-05f, 2.951853993e-05f, 2.947835291e-05f,
+2.943811892e-05f, 2.939783801e-05f, 2.935751028e-05f, 2.931713580e-05f, 2.927671463e-05f, 2.923624685e-05f, 2.919573255e-05f, 2.915517178e-05f, 2.911456464e-05f, 2.907391119e-05f,
+2.903321150e-05f, 2.899246566e-05f, 2.895167374e-05f, 2.891083581e-05f, 2.886995195e-05f, 2.882902223e-05f, 2.878804673e-05f, 2.874702553e-05f, 2.870595870e-05f, 2.866484631e-05f,
+2.862368845e-05f, 2.858248518e-05f, 2.854123659e-05f, 2.849994275e-05f, 2.845860373e-05f, 2.841721962e-05f, 2.837579048e-05f, 2.833431640e-05f, 2.829279744e-05f, 2.825123370e-05f,
+2.820962523e-05f, 2.816797213e-05f, 2.812627446e-05f, 2.808453231e-05f, 2.804274574e-05f, 2.800091484e-05f, 2.795903969e-05f, 2.791712035e-05f, 2.787515691e-05f, 2.783314945e-05f,
+2.779109804e-05f, 2.774900275e-05f, 2.770686367e-05f, 2.766468088e-05f, 2.762245444e-05f, 2.758018445e-05f, 2.753787096e-05f, 2.749551408e-05f, 2.745311386e-05f, 2.741067039e-05f,
+2.736818374e-05f, 2.732565400e-05f, 2.728308125e-05f, 2.724046555e-05f, 2.719780699e-05f, 2.715510565e-05f, 2.711236160e-05f, 2.706957492e-05f, 2.702674570e-05f, 2.698387400e-05f,
+2.694095991e-05f, 2.689800351e-05f, 2.685500488e-05f, 2.681196408e-05f, 2.676888121e-05f, 2.672575634e-05f, 2.668258955e-05f, 2.663938092e-05f, 2.659613053e-05f, 2.655283846e-05f,
+2.650950478e-05f, 2.646612957e-05f, 2.642271292e-05f, 2.637925491e-05f, 2.633575561e-05f, 2.629221510e-05f, 2.624863346e-05f, 2.620501077e-05f, 2.616134712e-05f, 2.611764258e-05f,
+2.607389722e-05f, 2.603011114e-05f, 2.598628441e-05f, 2.594241711e-05f, 2.589850932e-05f, 2.585456111e-05f, 2.581057258e-05f, 2.576654380e-05f, 2.572247486e-05f, 2.567836582e-05f,
+2.563421677e-05f, 2.559002780e-05f, 2.554579898e-05f, 2.550153039e-05f, 2.545722212e-05f, 2.541287424e-05f, 2.536848683e-05f, 2.532405998e-05f, 2.527959377e-05f, 2.523508827e-05f,
+2.519054358e-05f, 2.514595976e-05f, 2.510133691e-05f, 2.505667509e-05f, 2.501197440e-05f, 2.496723492e-05f, 2.492245672e-05f, 2.487763988e-05f, 2.483278450e-05f, 2.478789064e-05f,
+2.474295840e-05f, 2.469798785e-05f, 2.465297908e-05f, 2.460793216e-05f, 2.456284718e-05f, 2.451772422e-05f, 2.447256336e-05f, 2.442736469e-05f, 2.438212828e-05f, 2.433685422e-05f,
+2.429154260e-05f, 2.424619348e-05f, 2.420080696e-05f, 2.415538312e-05f, 2.410992203e-05f, 2.406442379e-05f, 2.401888848e-05f, 2.397331617e-05f, 2.392770695e-05f, 2.388206090e-05f,
+2.383637810e-05f, 2.379065865e-05f, 2.374490261e-05f, 2.369911008e-05f, 2.365328114e-05f, 2.360741586e-05f, 2.356151434e-05f, 2.351557665e-05f, 2.346960288e-05f, 2.342359311e-05f,
+2.337754743e-05f, 2.333146592e-05f, 2.328534866e-05f, 2.323919573e-05f, 2.319300722e-05f, 2.314678321e-05f, 2.310052379e-05f, 2.305422904e-05f, 2.300789904e-05f, 2.296153388e-05f,
+2.291513364e-05f, 2.286869840e-05f, 2.282222825e-05f, 2.277572327e-05f, 2.272918355e-05f, 2.268260917e-05f, 2.263600021e-05f, 2.258935676e-05f, 2.254267891e-05f, 2.249596673e-05f,
+2.244922031e-05f, 2.240243974e-05f, 2.235562509e-05f, 2.230877647e-05f, 2.226189394e-05f, 2.221497759e-05f, 2.216802751e-05f, 2.212104379e-05f, 2.207402650e-05f, 2.202697573e-05f,
+2.197989157e-05f, 2.193277410e-05f, 2.188562341e-05f, 2.183843958e-05f, 2.179122270e-05f, 2.174397285e-05f, 2.169669011e-05f, 2.164937458e-05f, 2.160202633e-05f, 2.155464546e-05f,
+2.150723204e-05f, 2.145978617e-05f, 2.141230793e-05f, 2.136479739e-05f, 2.131725466e-05f, 2.126967981e-05f, 2.122207294e-05f, 2.117443412e-05f, 2.112676344e-05f, 2.107906098e-05f,
+2.103132684e-05f, 2.098356110e-05f, 2.093576385e-05f, 2.088793516e-05f, 2.084007513e-05f, 2.079218384e-05f, 2.074426139e-05f, 2.069630784e-05f, 2.064832330e-05f, 2.060030784e-05f,
+2.055226156e-05f, 2.050418454e-05f, 2.045607686e-05f, 2.040793861e-05f, 2.035976988e-05f, 2.031157076e-05f, 2.026334133e-05f, 2.021508168e-05f, 2.016679189e-05f, 2.011847205e-05f,
+2.007012225e-05f, 2.002174257e-05f, 1.997333311e-05f, 1.992489394e-05f, 1.987642516e-05f, 1.982792684e-05f, 1.977939909e-05f, 1.973084198e-05f, 1.968225561e-05f, 1.963364005e-05f,
+1.958499541e-05f, 1.953632175e-05f, 1.948761918e-05f, 1.943888777e-05f, 1.939012762e-05f, 1.934133881e-05f, 1.929252143e-05f, 1.924367557e-05f, 1.919480131e-05f, 1.914589875e-05f,
+1.909696796e-05f, 1.904800904e-05f, 1.899902208e-05f, 1.895000716e-05f, 1.890096437e-05f, 1.885189379e-05f, 1.880279553e-05f, 1.875366965e-05f, 1.870451626e-05f, 1.865533543e-05f,
+1.860612726e-05f, 1.855689184e-05f, 1.850762925e-05f, 1.845833957e-05f, 1.840902291e-05f, 1.835967934e-05f, 1.831030896e-05f, 1.826091185e-05f, 1.821148811e-05f, 1.816203781e-05f,
+1.811256105e-05f, 1.806305791e-05f, 1.801352849e-05f, 1.796397287e-05f, 1.791439115e-05f, 1.786478340e-05f, 1.781514972e-05f, 1.776549020e-05f, 1.771580492e-05f, 1.766609397e-05f,
+1.761635745e-05f, 1.756659544e-05f, 1.751680802e-05f, 1.746699530e-05f, 1.741715735e-05f, 1.736729427e-05f, 1.731740614e-05f, 1.726749306e-05f, 1.721755511e-05f, 1.716759238e-05f,
+1.711760496e-05f, 1.706759294e-05f, 1.701755641e-05f, 1.696749545e-05f, 1.691741016e-05f, 1.686730063e-05f, 1.681716694e-05f, 1.676700919e-05f, 1.671682746e-05f, 1.666662184e-05f,
+1.661639242e-05f, 1.656613930e-05f, 1.651586256e-05f, 1.646556228e-05f, 1.641523857e-05f, 1.636489150e-05f, 1.631452117e-05f, 1.626412767e-05f, 1.621371109e-05f, 1.616327151e-05f,
+1.611280903e-05f, 1.606232374e-05f, 1.601181572e-05f, 1.596128507e-05f, 1.591073188e-05f, 1.586015623e-05f, 1.580955821e-05f, 1.575893792e-05f, 1.570829544e-05f, 1.565763087e-05f,
+1.560694429e-05f, 1.555623580e-05f, 1.550550548e-05f, 1.545475342e-05f, 1.540397972e-05f, 1.535318447e-05f, 1.530236775e-05f, 1.525152965e-05f, 1.520067027e-05f, 1.514978969e-05f,
+1.509888801e-05f, 1.504796531e-05f, 1.499702169e-05f, 1.494605723e-05f, 1.489507203e-05f, 1.484406618e-05f, 1.479303977e-05f, 1.474199288e-05f, 1.469092561e-05f, 1.463983804e-05f,
+1.458873028e-05f, 1.453760241e-05f, 1.448645451e-05f, 1.443528669e-05f, 1.438409902e-05f, 1.433289161e-05f, 1.428166454e-05f, 1.423041790e-05f, 1.417915178e-05f, 1.412786628e-05f,
+1.407656149e-05f, 1.402523748e-05f, 1.397389437e-05f, 1.392253223e-05f, 1.387115116e-05f, 1.381975125e-05f, 1.376833259e-05f, 1.371689527e-05f, 1.366543938e-05f, 1.361396501e-05f,
+1.356247225e-05f, 1.351096120e-05f, 1.345943195e-05f, 1.340788458e-05f, 1.335631919e-05f, 1.330473586e-05f, 1.325313470e-05f, 1.320151578e-05f, 1.314987921e-05f, 1.309822507e-05f,
+1.304655346e-05f, 1.299486446e-05f, 1.294315816e-05f, 1.289143467e-05f, 1.283969406e-05f, 1.278793643e-05f, 1.273616188e-05f, 1.268437048e-05f, 1.263256234e-05f, 1.258073755e-05f,
+1.252889619e-05f, 1.247703837e-05f, 1.242516416e-05f, 1.237327366e-05f, 1.232136696e-05f, 1.226944416e-05f, 1.221750535e-05f, 1.216555061e-05f, 1.211358004e-05f, 1.206159373e-05f,
+1.200959177e-05f, 1.195757426e-05f, 1.190554128e-05f, 1.185349292e-05f, 1.180142929e-05f, 1.174935046e-05f, 1.169725654e-05f, 1.164514761e-05f, 1.159302376e-05f, 1.154088509e-05f,
+1.148873169e-05f, 1.143656365e-05f, 1.138438106e-05f, 1.133218401e-05f, 1.127997260e-05f, 1.122774692e-05f, 1.117550705e-05f, 1.112325310e-05f, 1.107098515e-05f, 1.101870329e-05f,
+1.096640763e-05f, 1.091409823e-05f, 1.086177521e-05f, 1.080943866e-05f, 1.075708865e-05f, 1.070472530e-05f, 1.065234868e-05f, 1.059995889e-05f, 1.054755602e-05f, 1.049514017e-05f,
+1.044271142e-05f, 1.039026987e-05f, 1.033781562e-05f, 1.028534874e-05f, 1.023286934e-05f, 1.018037751e-05f, 1.012787333e-05f, 1.007535691e-05f, 1.002282833e-05f, 9.970287681e-06f,
+9.917735062e-06f, 9.865170563e-06f, 9.812594275e-06f, 9.760006292e-06f, 9.707406704e-06f, 9.654795605e-06f, 9.602173086e-06f, 9.549539240e-06f, 9.496894159e-06f, 9.444237935e-06f,
+9.391570661e-06f, 9.338892428e-06f, 9.286203330e-06f, 9.233503458e-06f, 9.180792905e-06f, 9.128071762e-06f, 9.075340123e-06f, 9.022598079e-06f, 8.969845724e-06f, 8.917083149e-06f,
+8.864310446e-06f, 8.811527709e-06f, 8.758735029e-06f, 8.705932498e-06f, 8.653120210e-06f, 8.600298257e-06f, 8.547466730e-06f, 8.494625723e-06f, 8.441775328e-06f, 8.388915637e-06f,
+8.336046742e-06f, 8.283168737e-06f, 8.230281713e-06f, 8.177385763e-06f, 8.124480980e-06f, 8.071567456e-06f, 8.018645283e-06f, 7.965714554e-06f, 7.912775361e-06f, 7.859827797e-06f,
+7.806871955e-06f, 7.753907926e-06f, 7.700935803e-06f, 7.647955680e-06f, 7.594967648e-06f, 7.541971799e-06f, 7.488968227e-06f, 7.435957024e-06f, 7.382938283e-06f, 7.329912095e-06f,
+7.276878554e-06f, 7.223837752e-06f, 7.170789781e-06f, 7.117734735e-06f, 7.064672705e-06f, 7.011603785e-06f, 6.958528066e-06f, 6.905445642e-06f, 6.852356604e-06f, 6.799261046e-06f,
+6.746159060e-06f, 6.693050738e-06f, 6.639936174e-06f, 6.586815459e-06f, 6.533688687e-06f, 6.480555949e-06f, 6.427417339e-06f, 6.374272949e-06f, 6.321122872e-06f, 6.267967199e-06f,
+6.214806024e-06f, 6.161639440e-06f, 6.108467538e-06f, 6.055290412e-06f, 6.002108154e-06f, 5.948920856e-06f, 5.895728612e-06f, 5.842531513e-06f, 5.789329653e-06f, 5.736123123e-06f,
+5.682912017e-06f, 5.629696426e-06f, 5.576476445e-06f, 5.523252164e-06f, 5.470023677e-06f, 5.416791077e-06f, 5.363554455e-06f, 5.310313904e-06f, 5.257069518e-06f, 5.203821387e-06f,
+5.150569606e-06f, 5.097314267e-06f, 5.044055461e-06f, 4.990793282e-06f, 4.937527822e-06f, 4.884259174e-06f, 4.830987430e-06f, 4.777712683e-06f, 4.724435025e-06f, 4.671154549e-06f,
+4.617871347e-06f, 4.564585512e-06f, 4.511297137e-06f, 4.458006313e-06f, 4.404713133e-06f, 4.351417690e-06f, 4.298120076e-06f, 4.244820384e-06f, 4.191518707e-06f, 4.138215135e-06f,
+4.084909763e-06f, 4.031602683e-06f, 3.978293986e-06f, 3.924983766e-06f, 3.871672115e-06f, 3.818359125e-06f, 3.765044889e-06f, 3.711729499e-06f, 3.658413047e-06f, 3.605095627e-06f,
+3.551777329e-06f, 3.498458248e-06f, 3.445138474e-06f, 3.391818101e-06f, 3.338497221e-06f, 3.285175925e-06f, 3.231854308e-06f, 3.178532460e-06f, 3.125210474e-06f, 3.071888442e-06f,
+3.018566458e-06f, 2.965244612e-06f, 2.911922998e-06f, 2.858601707e-06f, 2.805280832e-06f, 2.751960466e-06f, 2.698640699e-06f, 2.645321625e-06f, 2.592003337e-06f, 2.538685925e-06f,
+2.485369482e-06f, 2.432054101e-06f, 2.378739873e-06f, 2.325426891e-06f, 2.272115247e-06f, 2.218805033e-06f, 2.165496342e-06f, 2.112189264e-06f, 2.058883893e-06f, 2.005580321e-06f,
+1.952278639e-06f, 1.898978940e-06f, 1.845681316e-06f, 1.792385859e-06f, 1.739092660e-06f, 1.685801813e-06f, 1.632513408e-06f, 1.579227538e-06f, 1.525944295e-06f, 1.472663771e-06f,
+1.419386057e-06f, 1.366111246e-06f, 1.312839430e-06f, 1.259570701e-06f, 1.206305150e-06f, 1.153042869e-06f, 1.099783950e-06f, 1.046528486e-06f, 9.932765673e-07f, 9.400282864e-07f,
+8.867837351e-07f, 8.335430050e-07f, 7.803061880e-07f, 7.270733759e-07f, 6.738446603e-07f, 6.206201330e-07f, 5.673998858e-07f, 5.141840102e-07f, 4.609725981e-07f, 4.077657409e-07f,
+3.545635305e-07f, 3.013660584e-07f, 2.481734162e-07f, 1.949856955e-07f, 1.418029878e-07f, 8.862538481e-08f, 3.545297796e-08f, -1.771414120e-08f, -7.087588118e-08f, -1.240321505e-07f,
+-1.771828577e-07f, -2.303279113e-07f, -2.834672200e-07f, -3.366006922e-07f, -3.897282367e-07f, -4.428497620e-07f, -4.959651768e-07f, -5.490743898e-07f, -6.021773097e-07f, -6.552738451e-07f,
+-7.083639049e-07f, -7.614473977e-07f, -8.145242324e-07f, -8.675943178e-07f, -9.206575626e-07f, -9.737138756e-07f, -1.026763166e-06f, -1.079805342e-06f, -1.132840313e-06f, -1.185867988e-06f,
+-1.238888276e-06f, -1.291901086e-06f, -1.344906326e-06f, -1.397903906e-06f, -1.450893735e-06f, -1.503875722e-06f, -1.556849776e-06f, -1.609815806e-06f, -1.662773720e-06f, -1.715723430e-06f,
+-1.768664842e-06f, -1.821597868e-06f, -1.874522415e-06f, -1.927438393e-06f, -1.980345712e-06f, -2.033244281e-06f, -2.086134008e-06f, -2.139014804e-06f, -2.191886577e-06f, -2.244749238e-06f,
+-2.297602695e-06f, -2.350446858e-06f, -2.403281636e-06f, -2.456106940e-06f, -2.508922677e-06f, -2.561728759e-06f, -2.614525094e-06f, -2.667311593e-06f, -2.720088164e-06f, -2.772854717e-06f,
+-2.825611162e-06f, -2.878357409e-06f, -2.931093368e-06f, -2.983818948e-06f, -3.036534058e-06f, -3.089238610e-06f, -3.141932512e-06f, -3.194615675e-06f, -3.247288008e-06f, -3.299949421e-06f,
+-3.352599824e-06f, -3.405239128e-06f, -3.457867242e-06f, -3.510484076e-06f, -3.563089540e-06f, -3.615683545e-06f, -3.668266000e-06f, -3.720836816e-06f, -3.773395903e-06f, -3.825943170e-06f,
+-3.878478529e-06f, -3.931001890e-06f, -3.983513162e-06f, -4.036012256e-06f, -4.088499082e-06f, -4.140973552e-06f, -4.193435575e-06f, -4.245885061e-06f, -4.298321921e-06f, -4.350746067e-06f,
+-4.403157407e-06f, -4.455555853e-06f, -4.507941316e-06f, -4.560313705e-06f, -4.612672932e-06f, -4.665018908e-06f, -4.717351542e-06f, -4.769670746e-06f, -4.821976431e-06f, -4.874268508e-06f,
+-4.926546886e-06f, -4.978811478e-06f, -5.031062194e-06f, -5.083298945e-06f, -5.135521642e-06f, -5.187730196e-06f, -5.239924518e-06f, -5.292104519e-06f, -5.344270110e-06f, -5.396421203e-06f,
+-5.448557709e-06f, -5.500679538e-06f, -5.552786603e-06f, -5.604878814e-06f, -5.656956082e-06f, -5.709018320e-06f, -5.761065438e-06f, -5.813097348e-06f, -5.865113962e-06f, -5.917115190e-06f,
+-5.969100945e-06f, -6.021071138e-06f, -6.073025680e-06f, -6.124964483e-06f, -6.176887460e-06f, -6.228794521e-06f, -6.280685578e-06f, -6.332560544e-06f, -6.384419329e-06f, -6.436261847e-06f,
+-6.488088008e-06f, -6.539897725e-06f, -6.591690909e-06f, -6.643467473e-06f, -6.695227329e-06f, -6.746970389e-06f, -6.798696564e-06f, -6.850405768e-06f, -6.902097912e-06f, -6.953772908e-06f,
+-7.005430670e-06f, -7.057071108e-06f, -7.108694136e-06f, -7.160299666e-06f, -7.211887610e-06f, -7.263457881e-06f, -7.315010391e-06f, -7.366545053e-06f, -7.418061779e-06f, -7.469560483e-06f,
+-7.521041076e-06f, -7.572503472e-06f, -7.623947583e-06f, -7.675373321e-06f, -7.726780601e-06f, -7.778169334e-06f, -7.829539434e-06f, -7.880890814e-06f, -7.932223386e-06f, -7.983537064e-06f,
+-8.034831760e-06f, -8.086107389e-06f, -8.137363862e-06f, -8.188601093e-06f, -8.239818996e-06f, -8.291017483e-06f, -8.342196469e-06f, -8.393355866e-06f, -8.444495588e-06f, -8.495615548e-06f,
+-8.546715660e-06f, -8.597795837e-06f, -8.648855993e-06f, -8.699896041e-06f, -8.750915896e-06f, -8.801915471e-06f, -8.852894680e-06f, -8.903853436e-06f, -8.954791653e-06f, -9.005709246e-06f,
+-9.056606128e-06f, -9.107482213e-06f, -9.158337415e-06f, -9.209171649e-06f, -9.259984828e-06f, -9.310776866e-06f, -9.361547678e-06f, -9.412297179e-06f, -9.463025282e-06f, -9.513731901e-06f,
+-9.564416951e-06f, -9.615080347e-06f, -9.665722003e-06f, -9.716341834e-06f, -9.766939753e-06f, -9.817515676e-06f, -9.868069518e-06f, -9.918601193e-06f, -9.969110616e-06f, -1.001959770e-05f,
+-1.007006236e-05f, -1.012050452e-05f, -1.017092408e-05f, -1.022132097e-05f, -1.027169509e-05f, -1.032204636e-05f, -1.037237471e-05f, -1.042268003e-05f, -1.047296226e-05f, -1.052322129e-05f,
+-1.057345706e-05f, -1.062366947e-05f, -1.067385844e-05f, -1.072402388e-05f, -1.077416572e-05f, -1.082428386e-05f, -1.087437822e-05f, -1.092444872e-05f, -1.097449528e-05f, -1.102451780e-05f,
+-1.107451621e-05f, -1.112449042e-05f, -1.117444034e-05f, -1.122436590e-05f, -1.127426700e-05f, -1.132414357e-05f, -1.137399553e-05f, -1.142382278e-05f, -1.147362524e-05f, -1.152340283e-05f,
+-1.157315547e-05f, -1.162288307e-05f, -1.167258555e-05f, -1.172226282e-05f, -1.177191481e-05f, -1.182154142e-05f, -1.187114258e-05f, -1.192071820e-05f, -1.197026820e-05f, -1.201979250e-05f,
+-1.206929100e-05f, -1.211876364e-05f, -1.216821032e-05f, -1.221763097e-05f, -1.226702549e-05f, -1.231639382e-05f, -1.236573585e-05f, -1.241505152e-05f, -1.246434074e-05f, -1.251360343e-05f,
+-1.256283949e-05f, -1.261204886e-05f, -1.266123145e-05f, -1.271038718e-05f, -1.275951596e-05f, -1.280861771e-05f, -1.285769235e-05f, -1.290673979e-05f, -1.295575997e-05f, -1.300475278e-05f,
+-1.305371816e-05f, -1.310265601e-05f, -1.315156626e-05f, -1.320044883e-05f, -1.324930363e-05f, -1.329813058e-05f, -1.334692960e-05f, -1.339570061e-05f, -1.344444352e-05f, -1.349315826e-05f,
+-1.354184474e-05f, -1.359050289e-05f, -1.363913261e-05f, -1.368773384e-05f, -1.373630648e-05f, -1.378485046e-05f, -1.383336570e-05f, -1.388185211e-05f, -1.393030961e-05f, -1.397873813e-05f,
+-1.402713757e-05f, -1.407550787e-05f, -1.412384894e-05f, -1.417216070e-05f, -1.422044307e-05f, -1.426869596e-05f, -1.431691930e-05f, -1.436511301e-05f, -1.441327701e-05f, -1.446141121e-05f,
+-1.450951554e-05f, -1.455758991e-05f, -1.460563425e-05f, -1.465364848e-05f, -1.470163251e-05f, -1.474958626e-05f, -1.479750966e-05f, -1.484540263e-05f, -1.489326508e-05f, -1.494109693e-05f,
+-1.498889812e-05f, -1.503666854e-05f, -1.508440814e-05f, -1.513211682e-05f, -1.517979451e-05f, -1.522744113e-05f, -1.527505660e-05f, -1.532264084e-05f, -1.537019377e-05f, -1.541771531e-05f,
+-1.546520538e-05f, -1.551266390e-05f, -1.556009080e-05f, -1.560748600e-05f, -1.565484941e-05f, -1.570218096e-05f, -1.574948056e-05f, -1.579674815e-05f, -1.584398364e-05f, -1.589118696e-05f,
+-1.593835801e-05f, -1.598549674e-05f, -1.603260305e-05f, -1.607967687e-05f, -1.612671813e-05f, -1.617372673e-05f, -1.622070262e-05f, -1.626764570e-05f, -1.631455589e-05f, -1.636143314e-05f,
+-1.640827734e-05f, -1.645508843e-05f, -1.650186633e-05f, -1.654861096e-05f, -1.659532224e-05f, -1.664200010e-05f, -1.668864445e-05f, -1.673525523e-05f, -1.678183235e-05f, -1.682837573e-05f,
+-1.687488531e-05f, -1.692136099e-05f, -1.696780272e-05f, -1.701421040e-05f, -1.706058396e-05f, -1.710692332e-05f, -1.715322841e-05f, -1.719949916e-05f, -1.724573547e-05f, -1.729193729e-05f,
+-1.733810452e-05f, -1.738423710e-05f, -1.743033495e-05f, -1.747639799e-05f, -1.752242615e-05f, -1.756841934e-05f, -1.761437750e-05f, -1.766030055e-05f, -1.770618841e-05f, -1.775204100e-05f,
+-1.779785826e-05f, -1.784364009e-05f, -1.788938644e-05f, -1.793509722e-05f, -1.798077235e-05f, -1.802641177e-05f, -1.807201540e-05f, -1.811758315e-05f, -1.816311496e-05f, -1.820861076e-05f,
+-1.825407045e-05f, -1.829949398e-05f, -1.834488126e-05f, -1.839023223e-05f, -1.843554680e-05f, -1.848082490e-05f, -1.852606645e-05f, -1.857127139e-05f, -1.861643964e-05f, -1.866157111e-05f,
+-1.870666575e-05f, -1.875172347e-05f, -1.879674420e-05f, -1.884172786e-05f, -1.888667439e-05f, -1.893158370e-05f, -1.897645573e-05f, -1.902129039e-05f, -1.906608762e-05f, -1.911084735e-05f,
+-1.915556949e-05f, -1.920025397e-05f, -1.924490073e-05f, -1.928950968e-05f, -1.933408076e-05f, -1.937861388e-05f, -1.942310899e-05f, -1.946756600e-05f, -1.951198484e-05f, -1.955636543e-05f,
+-1.960070772e-05f, -1.964501161e-05f, -1.968927704e-05f, -1.973350394e-05f, -1.977769224e-05f, -1.982184185e-05f, -1.986595272e-05f, -1.991002476e-05f, -1.995405790e-05f, -1.999805208e-05f,
+-2.004200722e-05f, -2.008592324e-05f, -2.012980008e-05f, -2.017363766e-05f, -2.021743591e-05f, -2.026119476e-05f, -2.030491414e-05f, -2.034859398e-05f, -2.039223420e-05f, -2.043583473e-05f,
+-2.047939550e-05f, -2.052291645e-05f, -2.056639749e-05f, -2.060983856e-05f, -2.065323959e-05f, -2.069660050e-05f, -2.073992122e-05f, -2.078320169e-05f, -2.082644183e-05f, -2.086964157e-05f,
+-2.091280085e-05f, -2.095591958e-05f, -2.099899770e-05f, -2.104203514e-05f, -2.108503184e-05f, -2.112798771e-05f, -2.117090268e-05f, -2.121377670e-05f, -2.125660968e-05f, -2.129940156e-05f,
+-2.134215227e-05f, -2.138486174e-05f, -2.142752990e-05f, -2.147015667e-05f, -2.151274200e-05f, -2.155528580e-05f, -2.159778802e-05f, -2.164024857e-05f, -2.168266740e-05f, -2.172504443e-05f,
+-2.176737959e-05f, -2.180967281e-05f, -2.185192404e-05f, -2.189413318e-05f, -2.193630019e-05f, -2.197842498e-05f, -2.202050749e-05f, -2.206254766e-05f, -2.210454541e-05f, -2.214650067e-05f,
+-2.218841338e-05f, -2.223028346e-05f, -2.227211086e-05f, -2.231389550e-05f, -2.235563731e-05f, -2.239733622e-05f, -2.243899218e-05f, -2.248060510e-05f, -2.252217493e-05f, -2.256370159e-05f,
+-2.260518502e-05f, -2.264662515e-05f, -2.268802191e-05f, -2.272937524e-05f, -2.277068506e-05f, -2.281195132e-05f, -2.285317394e-05f, -2.289435285e-05f, -2.293548800e-05f, -2.297657931e-05f,
+-2.301762671e-05f, -2.305863015e-05f, -2.309958955e-05f, -2.314050484e-05f, -2.318137597e-05f, -2.322220286e-05f, -2.326298545e-05f, -2.330372367e-05f, -2.334441745e-05f, -2.338506674e-05f,
+-2.342567146e-05f, -2.346623155e-05f, -2.350674694e-05f, -2.354721756e-05f, -2.358764336e-05f, -2.362802427e-05f, -2.366836021e-05f, -2.370865113e-05f, -2.374889696e-05f, -2.378909764e-05f,
+-2.382925309e-05f, -2.386936326e-05f, -2.390942808e-05f, -2.394944749e-05f, -2.398942141e-05f, -2.402934980e-05f, -2.406923257e-05f, -2.410906967e-05f, -2.414886103e-05f, -2.418860660e-05f,
+-2.422830629e-05f, -2.426796006e-05f, -2.430756783e-05f, -2.434712955e-05f, -2.438664514e-05f, -2.442611455e-05f, -2.446553771e-05f, -2.450491455e-05f, -2.454424502e-05f, -2.458352905e-05f,
+-2.462276658e-05f, -2.466195755e-05f, -2.470110188e-05f, -2.474019952e-05f, -2.477925041e-05f, -2.481825447e-05f, -2.485721166e-05f, -2.489612190e-05f, -2.493498514e-05f, -2.497380131e-05f,
+-2.501257035e-05f, -2.505129219e-05f, -2.508996678e-05f, -2.512859405e-05f, -2.516717395e-05f, -2.520570639e-05f, -2.524419134e-05f, -2.528262872e-05f, -2.532101847e-05f, -2.535936053e-05f,
+-2.539765485e-05f, -2.543590135e-05f, -2.547409997e-05f, -2.551225067e-05f, -2.555035336e-05f, -2.558840800e-05f, -2.562641452e-05f, -2.566437287e-05f, -2.570228297e-05f, -2.574014477e-05f,
+-2.577795821e-05f, -2.581572323e-05f, -2.585343977e-05f, -2.589110776e-05f, -2.592872715e-05f, -2.596629788e-05f, -2.600381988e-05f, -2.604129310e-05f, -2.607871748e-05f, -2.611609296e-05f,
+-2.615341947e-05f, -2.619069696e-05f, -2.622792536e-05f, -2.626510463e-05f, -2.630223469e-05f, -2.633931550e-05f, -2.637634698e-05f, -2.641332909e-05f, -2.645026175e-05f, -2.648714493e-05f,
+-2.652397854e-05f, -2.656076254e-05f, -2.659749687e-05f, -2.663418147e-05f, -2.667081628e-05f, -2.670740124e-05f, -2.674393629e-05f, -2.678042137e-05f, -2.681685644e-05f, -2.685324142e-05f,
+-2.688957627e-05f, -2.692586092e-05f, -2.696209531e-05f, -2.699827939e-05f, -2.703441310e-05f, -2.707049639e-05f, -2.710652919e-05f, -2.714251144e-05f, -2.717844310e-05f, -2.721432411e-05f,
+-2.725015440e-05f, -2.728593392e-05f, -2.732166261e-05f, -2.735734042e-05f, -2.739296729e-05f, -2.742854317e-05f, -2.746406799e-05f, -2.749954170e-05f, -2.753496424e-05f, -2.757033557e-05f,
+-2.760565561e-05f, -2.764092433e-05f, -2.767614165e-05f, -2.771130752e-05f, -2.774642190e-05f, -2.778148472e-05f, -2.781649593e-05f, -2.785145547e-05f, -2.788636329e-05f, -2.792121932e-05f,
+-2.795602353e-05f, -2.799077585e-05f, -2.802547622e-05f, -2.806012460e-05f, -2.809472092e-05f, -2.812926514e-05f, -2.816375720e-05f, -2.819819704e-05f, -2.823258460e-05f, -2.826691985e-05f,
+-2.830120271e-05f, -2.833543314e-05f, -2.836961109e-05f, -2.840373649e-05f, -2.843780930e-05f, -2.847182946e-05f, -2.850579692e-05f, -2.853971163e-05f, -2.857357352e-05f, -2.860738256e-05f,
+-2.864113868e-05f, -2.867484183e-05f, -2.870849196e-05f, -2.874208901e-05f, -2.877563294e-05f, -2.880912369e-05f, -2.884256120e-05f, -2.887594544e-05f, -2.890927633e-05f, -2.894255384e-05f,
+-2.897577790e-05f, -2.900894847e-05f, -2.904206549e-05f, -2.907512892e-05f, -2.910813870e-05f, -2.914109477e-05f, -2.917399710e-05f, -2.920684562e-05f, -2.923964028e-05f, -2.927238104e-05f,
+-2.930506783e-05f, -2.933770062e-05f, -2.937027935e-05f, -2.940280397e-05f, -2.943527442e-05f, -2.946769066e-05f, -2.950005264e-05f, -2.953236031e-05f, -2.956461360e-05f, -2.959681249e-05f,
+-2.962895691e-05f, -2.966104681e-05f, -2.969308215e-05f, -2.972506287e-05f, -2.975698893e-05f, -2.978886028e-05f, -2.982067686e-05f, -2.985243862e-05f, -2.988414552e-05f, -2.991579751e-05f,
+-2.994739454e-05f, -2.997893655e-05f, -3.001042351e-05f, -3.004185536e-05f, -3.007323204e-05f, -3.010455353e-05f, -3.013581975e-05f, -3.016703067e-05f, -3.019818624e-05f, -3.022928641e-05f,
+-3.026033113e-05f, -3.029132036e-05f, -3.032225404e-05f, -3.035313212e-05f, -3.038395456e-05f, -3.041472132e-05f, -3.044543234e-05f, -3.047608758e-05f, -3.050668698e-05f, -3.053723051e-05f,
+-3.056771811e-05f, -3.059814974e-05f, -3.062852534e-05f, -3.065884489e-05f, -3.068910831e-05f, -3.071931558e-05f, -3.074946664e-05f, -3.077956145e-05f, -3.080959996e-05f, -3.083958212e-05f,
+-3.086950788e-05f, -3.089937722e-05f, -3.092919006e-05f, -3.095894638e-05f, -3.098864612e-05f, -3.101828923e-05f, -3.104787568e-05f, -3.107740542e-05f, -3.110687840e-05f, -3.113629458e-05f,
+-3.116565390e-05f, -3.119495634e-05f, -3.122420183e-05f, -3.125339034e-05f, -3.128252182e-05f, -3.131159623e-05f, -3.134061352e-05f, -3.136957365e-05f, -3.139847658e-05f, -3.142732225e-05f,
+-3.145611062e-05f, -3.148484166e-05f, -3.151351532e-05f, -3.154213155e-05f, -3.157069031e-05f, -3.159919155e-05f, -3.162763524e-05f, -3.165602133e-05f, -3.168434977e-05f, -3.171262052e-05f,
+-3.174083355e-05f, -3.176898880e-05f, -3.179708623e-05f, -3.182512581e-05f, -3.185310748e-05f, -3.188103121e-05f, -3.190889695e-05f, -3.193670466e-05f, -3.196445430e-05f, -3.199214583e-05f,
+-3.201977920e-05f, -3.204735437e-05f, -3.207487130e-05f, -3.210232996e-05f, -3.212973028e-05f, -3.215707225e-05f, -3.218435581e-05f, -3.221158092e-05f, -3.223874754e-05f, -3.226585563e-05f,
+-3.229290515e-05f, -3.231989607e-05f, -3.234682832e-05f, -3.237370189e-05f, -3.240051672e-05f, -3.242727278e-05f, -3.245397002e-05f, -3.248060841e-05f, -3.250718790e-05f, -3.253370846e-05f,
+-3.256017004e-05f, -3.258657261e-05f, -3.261291613e-05f, -3.263920055e-05f, -3.266542583e-05f, -3.269159195e-05f, -3.271769885e-05f, -3.274374650e-05f, -3.276973486e-05f, -3.279566389e-05f,
+-3.282153355e-05f, -3.284734380e-05f, -3.287309461e-05f, -3.289878593e-05f, -3.292441773e-05f, -3.294998997e-05f, -3.297550261e-05f, -3.300095561e-05f, -3.302634893e-05f, -3.305168255e-05f,
+-3.307695641e-05f, -3.310217048e-05f, -3.312732472e-05f, -3.315241910e-05f, -3.317745358e-05f, -3.320242812e-05f, -3.322734268e-05f, -3.325219724e-05f, -3.327699174e-05f, -3.330172615e-05f,
+-3.332640044e-05f, -3.335101457e-05f, -3.337556850e-05f, -3.340006220e-05f, -3.342449563e-05f, -3.344886875e-05f, -3.347318153e-05f, -3.349743394e-05f, -3.352162593e-05f, -3.354575747e-05f,
+-3.356982853e-05f, -3.359383906e-05f, -3.361778904e-05f, -3.364167843e-05f, -3.366550719e-05f, -3.368927529e-05f, -3.371298269e-05f, -3.373662936e-05f, -3.376021526e-05f, -3.378374037e-05f,
+-3.380720463e-05f, -3.383060803e-05f, -3.385395052e-05f, -3.387723208e-05f, -3.390045266e-05f, -3.392361223e-05f, -3.394671076e-05f, -3.396974822e-05f, -3.399272457e-05f, -3.401563978e-05f,
+-3.403849381e-05f, -3.406128663e-05f, -3.408401822e-05f, -3.410668852e-05f, -3.412929752e-05f, -3.415184518e-05f, -3.417433146e-05f, -3.419675633e-05f, -3.421911977e-05f, -3.424142174e-05f,
+-3.426366220e-05f, -3.428584112e-05f, -3.430795847e-05f, -3.433001423e-05f, -3.435200835e-05f, -3.437394081e-05f, -3.439581157e-05f, -3.441762060e-05f, -3.443936787e-05f, -3.446105336e-05f,
+-3.448267702e-05f, -3.450423883e-05f, -3.452573875e-05f, -3.454717676e-05f, -3.456855282e-05f, -3.458986690e-05f, -3.461111898e-05f, -3.463230902e-05f, -3.465343699e-05f, -3.467450286e-05f,
+-3.469550661e-05f, -3.471644819e-05f, -3.473732759e-05f, -3.475814477e-05f, -3.477889969e-05f, -3.479959235e-05f, -3.482022269e-05f, -3.484079069e-05f, -3.486129633e-05f, -3.488173958e-05f,
+-3.490212040e-05f, -3.492243876e-05f, -3.494269465e-05f, -3.496288802e-05f, -3.498301885e-05f, -3.500308712e-05f, -3.502309279e-05f, -3.504303583e-05f, -3.506291622e-05f, -3.508273393e-05f,
+-3.510248893e-05f, -3.512218119e-05f, -3.514181069e-05f, -3.516137739e-05f, -3.518088128e-05f, -3.520032232e-05f, -3.521970048e-05f, -3.523901574e-05f, -3.525826807e-05f, -3.527745745e-05f,
+-3.529658384e-05f, -3.531564723e-05f, -3.533464758e-05f, -3.535358486e-05f, -3.537245906e-05f, -3.539127014e-05f, -3.541001808e-05f, -3.542870286e-05f, -3.544732444e-05f, -3.546588280e-05f,
+-3.548437791e-05f, -3.550280976e-05f, -3.552117831e-05f, -3.553948354e-05f, -3.555772542e-05f, -3.557590393e-05f, -3.559401904e-05f, -3.561207073e-05f, -3.563005897e-05f, -3.564798374e-05f,
+-3.566584502e-05f, -3.568364278e-05f, -3.570137699e-05f, -3.571904763e-05f, -3.573665468e-05f, -3.575419811e-05f, -3.577167790e-05f, -3.578909402e-05f, -3.580644646e-05f, -3.582373518e-05f,
+-3.584096017e-05f, -3.585812139e-05f, -3.587521884e-05f, -3.589225248e-05f, -3.590922229e-05f, -3.592612825e-05f, -3.594297033e-05f, -3.595974852e-05f, -3.597646279e-05f, -3.599311312e-05f,
+-3.600969948e-05f, -3.602622186e-05f, -3.604268022e-05f, -3.605907456e-05f, -3.607540484e-05f, -3.609167105e-05f, -3.610787316e-05f, -3.612401116e-05f, -3.614008501e-05f, -3.615609471e-05f,
+-3.617204022e-05f, -3.618792153e-05f, -3.620373862e-05f, -3.621949146e-05f, -3.623518004e-05f, -3.625080433e-05f, -3.626636431e-05f, -3.628185997e-05f, -3.629729128e-05f, -3.631265822e-05f,
+-3.632796077e-05f, -3.634319892e-05f, -3.635837264e-05f, -3.637348191e-05f, -3.638852672e-05f, -3.640350703e-05f, -3.641842285e-05f, -3.643327414e-05f, -3.644806088e-05f, -3.646278306e-05f,
+-3.647744066e-05f, -3.649203366e-05f, -3.650656203e-05f, -3.652102577e-05f, -3.653542485e-05f, -3.654975926e-05f, -3.656402897e-05f, -3.657823398e-05f, -3.659237425e-05f, -3.660644977e-05f,
+-3.662046053e-05f, -3.663440651e-05f, -3.664828768e-05f, -3.666210404e-05f, -3.667585556e-05f, -3.668954223e-05f, -3.670316403e-05f, -3.671672094e-05f, -3.673021295e-05f, -3.674364004e-05f,
+-3.675700219e-05f, -3.677029939e-05f, -3.678353161e-05f, -3.679669885e-05f, -3.680980109e-05f, -3.682283831e-05f, -3.683581049e-05f, -3.684871763e-05f, -3.686155969e-05f, -3.687433668e-05f,
+-3.688704856e-05f, -3.689969534e-05f, -3.691227698e-05f, -3.692479349e-05f, -3.693724483e-05f, -3.694963100e-05f, -3.696195198e-05f, -3.697420776e-05f, -3.698639832e-05f, -3.699852365e-05f,
+-3.701058373e-05f, -3.702257855e-05f, -3.703450810e-05f, -3.704637235e-05f, -3.705817131e-05f, -3.706990495e-05f, -3.708157325e-05f, -3.709317622e-05f, -3.710471382e-05f, -3.711618606e-05f,
+-3.712759291e-05f, -3.713893436e-05f, -3.715021040e-05f, -3.716142102e-05f, -3.717256621e-05f, -3.718364594e-05f, -3.719466022e-05f, -3.720560902e-05f, -3.721649233e-05f, -3.722731015e-05f,
+-3.723806245e-05f, -3.724874924e-05f, -3.725937049e-05f, -3.726992619e-05f, -3.728041634e-05f, -3.729084092e-05f, -3.730119992e-05f, -3.731149333e-05f, -3.732172113e-05f, -3.733188332e-05f,
+-3.734197989e-05f, -3.735201081e-05f, -3.736197610e-05f, -3.737187573e-05f, -3.738170968e-05f, -3.739147797e-05f, -3.740118056e-05f, -3.741081745e-05f, -3.742038864e-05f, -3.742989411e-05f,
+-3.743933385e-05f, -3.744870786e-05f, -3.745801611e-05f, -3.746725861e-05f, -3.747643535e-05f, -3.748554631e-05f, -3.749459148e-05f, -3.750357086e-05f, -3.751248444e-05f, -3.752133221e-05f,
+-3.753011416e-05f, -3.753883028e-05f, -3.754748056e-05f, -3.755606500e-05f, -3.756458359e-05f, -3.757303632e-05f, -3.758142317e-05f, -3.758974415e-05f, -3.759799925e-05f, -3.760618845e-05f,
+-3.761431176e-05f, -3.762236915e-05f, -3.763036064e-05f, -3.763828620e-05f, -3.764614583e-05f, -3.765393953e-05f, -3.766166728e-05f, -3.766932909e-05f, -3.767692494e-05f, -3.768445483e-05f,
+-3.769191875e-05f, -3.769931669e-05f, -3.770664866e-05f, -3.771391464e-05f, -3.772111462e-05f, -3.772824861e-05f, -3.773531659e-05f, -3.774231857e-05f, -3.774925452e-05f, -3.775612446e-05f,
+-3.776292838e-05f, -3.776966626e-05f, -3.777633811e-05f, -3.778294391e-05f, -3.778948367e-05f, -3.779595738e-05f, -3.780236504e-05f, -3.780870664e-05f, -3.781498218e-05f, -3.782119164e-05f,
+-3.782733504e-05f, -3.783341236e-05f, -3.783942361e-05f, -3.784536877e-05f, -3.785124784e-05f, -3.785706083e-05f, -3.786280772e-05f, -3.786848851e-05f, -3.787410321e-05f, -3.787965180e-05f,
+-3.788513429e-05f, -3.789055067e-05f, -3.789590094e-05f, -3.790118510e-05f, -3.790640313e-05f, -3.791155506e-05f, -3.791664086e-05f, -3.792166054e-05f, -3.792661409e-05f, -3.793150152e-05f,
+-3.793632282e-05f, -3.794107799e-05f, -3.794576703e-05f, -3.795038993e-05f, -3.795494670e-05f, -3.795943734e-05f, -3.796386184e-05f, -3.796822020e-05f, -3.797251243e-05f, -3.797673852e-05f,
+-3.798089846e-05f, -3.798499227e-05f, -3.798901994e-05f, -3.799298146e-05f, -3.799687685e-05f, -3.800070610e-05f, -3.800446920e-05f, -3.800816616e-05f, -3.801179699e-05f, -3.801536167e-05f,
+-3.801886022e-05f, -3.802229262e-05f, -3.802565889e-05f, -3.802895903e-05f, -3.803219302e-05f, -3.803536088e-05f, -3.803846261e-05f, -3.804149821e-05f, -3.804446767e-05f, -3.804737101e-05f,
+-3.805020821e-05f, -3.805297930e-05f, -3.805568426e-05f, -3.805832309e-05f, -3.806089581e-05f, -3.806340241e-05f, -3.806584289e-05f, -3.806821727e-05f, -3.807052553e-05f, -3.807276768e-05f,
+-3.807494373e-05f, -3.807705368e-05f, -3.807909753e-05f, -3.808107529e-05f, -3.808298695e-05f, -3.808483253e-05f, -3.808661202e-05f, -3.808832542e-05f, -3.808997275e-05f, -3.809155401e-05f,
+-3.809306920e-05f, -3.809451832e-05f, -3.809590138e-05f, -3.809721838e-05f, -3.809846933e-05f, -3.809965423e-05f, -3.810077308e-05f, -3.810182590e-05f, -3.810281269e-05f, -3.810373344e-05f,
+-3.810458817e-05f, -3.810537688e-05f, -3.810609958e-05f, -3.810675627e-05f, -3.810734696e-05f, -3.810787165e-05f, -3.810833035e-05f, -3.810872306e-05f, -3.810904980e-05f, -3.810931056e-05f,
+-3.810950536e-05f, -3.810963419e-05f, -3.810969707e-05f, -3.810969401e-05f, -3.810962500e-05f, -3.810949006e-05f, -3.810928919e-05f, -3.810902241e-05f, -3.810868971e-05f, -3.810829110e-05f,
+-3.810782660e-05f, -3.810729620e-05f, -3.810669993e-05f, -3.810603777e-05f, -3.810530975e-05f, -3.810451587e-05f, -3.810365614e-05f, -3.810273057e-05f, -3.810173916e-05f, -3.810068192e-05f,
+-3.809955887e-05f, -3.809837001e-05f, -3.809711534e-05f, -3.809579489e-05f, -3.809440865e-05f, -3.809295664e-05f, -3.809143886e-05f, -3.808985533e-05f, -3.808820605e-05f, -3.808649103e-05f,
+-3.808471029e-05f, -3.808286383e-05f, -3.808095167e-05f, -3.807897380e-05f, -3.807693025e-05f, -3.807482102e-05f, -3.807264613e-05f, -3.807040558e-05f, -3.806809938e-05f, -3.806572755e-05f,
+-3.806329010e-05f, -3.806078703e-05f, -3.805821836e-05f, -3.805558410e-05f, -3.805288425e-05f, -3.805011884e-05f, -3.804728788e-05f, -3.804439136e-05f, -3.804142931e-05f, -3.803840174e-05f,
+-3.803530866e-05f, -3.803215008e-05f, -3.802892602e-05f, -3.802563648e-05f, -3.802228148e-05f, -3.801886103e-05f, -3.801537514e-05f, -3.801182383e-05f, -3.800820711e-05f, -3.800452499e-05f,
+-3.800077748e-05f, -3.799696460e-05f, -3.799308637e-05f, -3.798914278e-05f, -3.798513387e-05f, -3.798105964e-05f, -3.797692010e-05f, -3.797271527e-05f, -3.796844516e-05f, -3.796410979e-05f,
+-3.795970917e-05f, -3.795524332e-05f, -3.795071224e-05f, -3.794611596e-05f, -3.794145449e-05f, -3.793672784e-05f, -3.793193603e-05f, -3.792707907e-05f, -3.792215698e-05f, -3.791716978e-05f,
+-3.791211747e-05f, -3.790700008e-05f, -3.790181761e-05f, -3.789657009e-05f, -3.789125753e-05f, -3.788587994e-05f, -3.788043735e-05f, -3.787492977e-05f, -3.786935721e-05f, -3.786371969e-05f,
+-3.785801723e-05f, -3.785224984e-05f, -3.784641754e-05f, -3.784052035e-05f, -3.783455828e-05f, -3.782853135e-05f, -3.782243958e-05f, -3.781628298e-05f, -3.781006158e-05f, -3.780377538e-05f,
+-3.779742441e-05f, -3.779100868e-05f, -3.778452822e-05f, -3.777798303e-05f, -3.777137315e-05f, -3.776469858e-05f, -3.775795934e-05f, -3.775115545e-05f, -3.774428693e-05f, -3.773735381e-05f,
+-3.773035608e-05f, -3.772329379e-05f, -3.771616694e-05f, -3.770897555e-05f, -3.770171965e-05f, -3.769439924e-05f, -3.768701436e-05f, -3.767956502e-05f, -3.767205124e-05f, -3.766447303e-05f,
+-3.765683043e-05f, -3.764912344e-05f, -3.764135210e-05f, -3.763351641e-05f, -3.762561640e-05f, -3.761765208e-05f, -3.760962349e-05f, -3.760153064e-05f, -3.759337354e-05f, -3.758515223e-05f,
+-3.757686672e-05f, -3.756851703e-05f, -3.756010318e-05f, -3.755162520e-05f, -3.754308310e-05f, -3.753447691e-05f, -3.752580665e-05f, -3.751707234e-05f, -3.750827400e-05f, -3.749941165e-05f,
+-3.749048532e-05f, -3.748149502e-05f, -3.747244078e-05f, -3.746332263e-05f, -3.745414057e-05f, -3.744489465e-05f, -3.743558487e-05f, -3.742621126e-05f, -3.741677384e-05f, -3.740727265e-05f,
+-3.739770769e-05f, -3.738807899e-05f, -3.737838658e-05f, -3.736863047e-05f, -3.735881070e-05f, -3.734892729e-05f, -3.733898025e-05f, -3.732896962e-05f, -3.731889541e-05f, -3.730875765e-05f,
+-3.729855637e-05f, -3.728829159e-05f, -3.727796333e-05f, -3.726757161e-05f, -3.725711647e-05f, -3.724659792e-05f, -3.723601600e-05f, -3.722537071e-05f, -3.721466210e-05f, -3.720389019e-05f,
+-3.719305499e-05f, -3.718215655e-05f, -3.717119487e-05f, -3.716016998e-05f, -3.714908192e-05f, -3.713793071e-05f, -3.712671637e-05f, -3.711543893e-05f, -3.710409841e-05f, -3.709269485e-05f,
+-3.708122826e-05f, -3.706969867e-05f, -3.705810612e-05f, -3.704645062e-05f, -3.703473220e-05f, -3.702295089e-05f, -3.701110672e-05f, -3.699919971e-05f, -3.698722989e-05f, -3.697519729e-05f,
+-3.696310193e-05f, -3.695094385e-05f, -3.693872306e-05f, -3.692643960e-05f, -3.691409349e-05f, -3.690168477e-05f, -3.688921345e-05f, -3.687667957e-05f, -3.686408316e-05f, -3.685142425e-05f,
+-3.683870285e-05f, -3.682591900e-05f, -3.681307274e-05f, -3.680016408e-05f, -3.678719306e-05f, -3.677415970e-05f, -3.676106404e-05f, -3.674790610e-05f, -3.673468591e-05f, -3.672140350e-05f,
+-3.670805890e-05f, -3.669465215e-05f, -3.668118326e-05f, -3.666765227e-05f, -3.665405921e-05f, -3.664040411e-05f, -3.662668700e-05f, -3.661290790e-05f, -3.659906686e-05f, -3.658516389e-05f,
+-3.657119904e-05f, -3.655717232e-05f, -3.654308378e-05f, -3.652893343e-05f, -3.651472132e-05f, -3.650044747e-05f, -3.648611191e-05f, -3.647171468e-05f, -3.645725580e-05f, -3.644273532e-05f,
+-3.642815325e-05f, -3.641350963e-05f, -3.639880449e-05f, -3.638403786e-05f, -3.636920979e-05f, -3.635432028e-05f, -3.633936939e-05f, -3.632435714e-05f, -3.630928356e-05f, -3.629414869e-05f,
+-3.627895256e-05f, -3.626369520e-05f, -3.624837664e-05f, -3.623299692e-05f, -3.621755606e-05f, -3.620205411e-05f, -3.618649110e-05f, -3.617086705e-05f, -3.615518200e-05f, -3.613943599e-05f,
+-3.612362905e-05f, -3.610776120e-05f, -3.609183250e-05f, -3.607584296e-05f, -3.605979263e-05f, -3.604368153e-05f, -3.602750970e-05f, -3.601127718e-05f, -3.599498400e-05f, -3.597863019e-05f,
+-3.596221580e-05f, -3.594574084e-05f, -3.592920536e-05f, -3.591260940e-05f, -3.589595298e-05f, -3.587923614e-05f, -3.586245892e-05f, -3.584562136e-05f, -3.582872348e-05f, -3.581176532e-05f,
+-3.579474693e-05f, -3.577766832e-05f, -3.576052955e-05f, -3.574333064e-05f, -3.572607164e-05f, -3.570875257e-05f, -3.569137348e-05f, -3.567393439e-05f, -3.565643535e-05f, -3.563887640e-05f,
+-3.562125756e-05f, -3.560357888e-05f, -3.558584039e-05f, -3.556804213e-05f, -3.555018414e-05f, -3.553226645e-05f, -3.551428910e-05f, -3.549625212e-05f, -3.547815556e-05f, -3.545999946e-05f,
+-3.544178384e-05f, -3.542350875e-05f, -3.540517422e-05f, -3.538678030e-05f, -3.536832701e-05f, -3.534981441e-05f, -3.533124252e-05f, -3.531261138e-05f, -3.529392104e-05f, -3.527517153e-05f,
+-3.525636289e-05f, -3.523749515e-05f, -3.521856837e-05f, -3.519958257e-05f, -3.518053779e-05f, -3.516143408e-05f, -3.514227147e-05f, -3.512305000e-05f, -3.510376971e-05f, -3.508443064e-05f,
+-3.506503283e-05f, -3.504557633e-05f, -3.502606116e-05f, -3.500648737e-05f, -3.498685499e-05f, -3.496716408e-05f, -3.494741466e-05f, -3.492760679e-05f, -3.490774049e-05f, -3.488781581e-05f,
+-3.486783279e-05f, -3.484779147e-05f, -3.482769189e-05f, -3.480753409e-05f, -3.478731812e-05f, -3.476704401e-05f, -3.474671180e-05f, -3.472632154e-05f, -3.470587326e-05f, -3.468536702e-05f,
+-3.466480284e-05f, -3.464418077e-05f, -3.462350085e-05f, -3.460276313e-05f, -3.458196765e-05f, -3.456111444e-05f, -3.454020355e-05f, -3.451923502e-05f, -3.449820890e-05f, -3.447712522e-05f,
+-3.445598403e-05f, -3.443478537e-05f, -3.441352929e-05f, -3.439221582e-05f, -3.437084501e-05f, -3.434941690e-05f, -3.432793154e-05f, -3.430638896e-05f, -3.428478921e-05f, -3.426313234e-05f,
+-3.424141838e-05f, -3.421964739e-05f, -3.419781940e-05f, -3.417593446e-05f, -3.415399260e-05f, -3.413199389e-05f, -3.410993835e-05f, -3.408782603e-05f, -3.406565698e-05f, -3.404343125e-05f,
+-3.402114886e-05f, -3.399880988e-05f, -3.397641434e-05f, -3.395396229e-05f, -3.393145378e-05f, -3.390888884e-05f, -3.388626752e-05f, -3.386358987e-05f, -3.384085594e-05f, -3.381806576e-05f,
+-3.379521938e-05f, -3.377231685e-05f, -3.374935822e-05f, -3.372634352e-05f, -3.370327281e-05f, -3.368014613e-05f, -3.365696353e-05f, -3.363372504e-05f, -3.361043072e-05f, -3.358708062e-05f,
+-3.356367478e-05f, -3.354021324e-05f, -3.351669606e-05f, -3.349312327e-05f, -3.346949493e-05f, -3.344581108e-05f, -3.342207176e-05f, -3.339827703e-05f, -3.337442694e-05f, -3.335052152e-05f,
+-3.332656083e-05f, -3.330254491e-05f, -3.327847381e-05f, -3.325434758e-05f, -3.323016626e-05f, -3.320592990e-05f, -3.318163856e-05f, -3.315729227e-05f, -3.313289108e-05f, -3.310843505e-05f,
+-3.308392422e-05f, -3.305935864e-05f, -3.303473835e-05f, -3.301006341e-05f, -3.298533386e-05f, -3.296054976e-05f, -3.293571114e-05f, -3.291081806e-05f, -3.288587057e-05f, -3.286086872e-05f,
+-3.283581255e-05f, -3.281070211e-05f, -3.278553746e-05f, -3.276031864e-05f, -3.273504570e-05f, -3.270971869e-05f, -3.268433765e-05f, -3.265890265e-05f, -3.263341373e-05f, -3.260787093e-05f,
+-3.258227431e-05f, -3.255662392e-05f, -3.253091981e-05f, -3.250516202e-05f, -3.247935061e-05f, -3.245348563e-05f, -3.242756713e-05f, -3.240159515e-05f, -3.237556976e-05f, -3.234949099e-05f,
+-3.232335890e-05f, -3.229717354e-05f, -3.227093496e-05f, -3.224464322e-05f, -3.221829836e-05f, -3.219190043e-05f, -3.216544948e-05f, -3.213894557e-05f, -3.211238875e-05f, -3.208577907e-05f,
+-3.205911658e-05f, -3.203240132e-05f, -3.200563337e-05f, -3.197881275e-05f, -3.195193954e-05f, -3.192501377e-05f, -3.189803550e-05f, -3.187100479e-05f, -3.184392168e-05f, -3.181678622e-05f,
+-3.178959848e-05f, -3.176235850e-05f, -3.173506633e-05f, -3.170772203e-05f, -3.168032564e-05f, -3.165287723e-05f, -3.162537685e-05f, -3.159782454e-05f, -3.157022036e-05f, -3.154256437e-05f,
+-3.151485661e-05f, -3.148709714e-05f, -3.145928602e-05f, -3.143142329e-05f, -3.140350901e-05f, -3.137554324e-05f, -3.134752603e-05f, -3.131945742e-05f, -3.129133748e-05f, -3.126316626e-05f,
+-3.123494382e-05f, -3.120667020e-05f, -3.117834546e-05f, -3.114996965e-05f, -3.112154284e-05f, -3.109306507e-05f, -3.106453640e-05f, -3.103595688e-05f, -3.100732657e-05f, -3.097864552e-05f,
+-3.094991379e-05f, -3.092113143e-05f, -3.089229850e-05f, -3.086341506e-05f, -3.083448114e-05f, -3.080549683e-05f, -3.077646216e-05f, -3.074737719e-05f, -3.071824198e-05f, -3.068905659e-05f,
+-3.065982106e-05f, -3.063053546e-05f, -3.060119985e-05f, -3.057181427e-05f, -3.054237878e-05f, -3.051289345e-05f, -3.048335831e-05f, -3.045377345e-05f, -3.042413889e-05f, -3.039445472e-05f,
+-3.036472097e-05f, -3.033493771e-05f, -3.030510500e-05f, -3.027522288e-05f, -3.024529142e-05f, -3.021531068e-05f, -3.018528071e-05f, -3.015520156e-05f, -3.012507330e-05f, -3.009489599e-05f,
+-3.006466967e-05f, -3.003439441e-05f, -3.000407026e-05f, -2.997369729e-05f, -2.994327554e-05f, -2.991280508e-05f, -2.988228597e-05f, -2.985171826e-05f, -2.982110201e-05f, -2.979043727e-05f,
+-2.975972411e-05f, -2.972896259e-05f, -2.969815276e-05f, -2.966729468e-05f, -2.963638841e-05f, -2.960543401e-05f, -2.957443153e-05f, -2.954338104e-05f, -2.951228259e-05f, -2.948113624e-05f,
+-2.944994205e-05f, -2.941870008e-05f, -2.938741039e-05f, -2.935607304e-05f, -2.932468809e-05f, -2.929325559e-05f, -2.926177560e-05f, -2.923024819e-05f, -2.919867341e-05f, -2.916705133e-05f,
+-2.913538200e-05f, -2.910366548e-05f, -2.907190183e-05f, -2.904009112e-05f, -2.900823340e-05f, -2.897632873e-05f, -2.894437717e-05f, -2.891237878e-05f, -2.888033362e-05f, -2.884824176e-05f,
+-2.881610325e-05f, -2.878391815e-05f, -2.875168653e-05f, -2.871940844e-05f, -2.868708394e-05f, -2.865471310e-05f, -2.862229597e-05f, -2.858983263e-05f, -2.855732312e-05f, -2.852476750e-05f,
+-2.849216585e-05f, -2.845951822e-05f, -2.842682467e-05f, -2.839408526e-05f, -2.836130006e-05f, -2.832846912e-05f, -2.829559252e-05f, -2.826267030e-05f, -2.822970253e-05f, -2.819668927e-05f,
+-2.816363059e-05f, -2.813052654e-05f, -2.809737720e-05f, -2.806418261e-05f, -2.803094284e-05f, -2.799765796e-05f, -2.796432803e-05f, -2.793095310e-05f, -2.789753324e-05f, -2.786406852e-05f,
+-2.783055900e-05f, -2.779700473e-05f, -2.776340578e-05f, -2.772976222e-05f, -2.769607410e-05f, -2.766234150e-05f, -2.762856447e-05f, -2.759474307e-05f, -2.756087737e-05f, -2.752696743e-05f,
+-2.749301332e-05f, -2.745901509e-05f, -2.742497282e-05f, -2.739088656e-05f, -2.735675638e-05f, -2.732258234e-05f, -2.728836451e-05f, -2.725410295e-05f, -2.721979772e-05f, -2.718544888e-05f,
+-2.715105651e-05f, -2.711662066e-05f, -2.708214140e-05f, -2.704761880e-05f, -2.701305291e-05f, -2.697844380e-05f, -2.694379154e-05f, -2.690909619e-05f, -2.687435781e-05f, -2.683957647e-05f,
+-2.680475224e-05f, -2.676988517e-05f, -2.673497534e-05f, -2.670002280e-05f, -2.666502763e-05f, -2.662998988e-05f, -2.659490963e-05f, -2.655978693e-05f, -2.652462186e-05f, -2.648941447e-05f,
+-2.645416484e-05f, -2.641887303e-05f, -2.638353910e-05f, -2.634816312e-05f, -2.631274515e-05f, -2.627728527e-05f, -2.624178353e-05f, -2.620624000e-05f, -2.617065475e-05f, -2.613502784e-05f,
+-2.609935935e-05f, -2.606364932e-05f, -2.602789784e-05f, -2.599210497e-05f, -2.595627077e-05f, -2.592039531e-05f, -2.588447866e-05f, -2.584852088e-05f, -2.581252204e-05f, -2.577648220e-05f,
+-2.574040144e-05f, -2.570427981e-05f, -2.566811740e-05f, -2.563191425e-05f, -2.559567044e-05f, -2.555938604e-05f, -2.552306111e-05f, -2.548669572e-05f, -2.545028993e-05f, -2.541384383e-05f,
+-2.537735746e-05f, -2.534083090e-05f, -2.530426422e-05f, -2.526765748e-05f, -2.523101075e-05f, -2.519432410e-05f, -2.515759759e-05f, -2.512083130e-05f, -2.508402529e-05f, -2.504717963e-05f,
+-2.501029438e-05f, -2.497336962e-05f, -2.493640541e-05f, -2.489940183e-05f, -2.486235893e-05f, -2.482527678e-05f, -2.478815547e-05f, -2.475099504e-05f, -2.471379558e-05f, -2.467655715e-05f,
+-2.463927981e-05f, -2.460196365e-05f, -2.456460871e-05f, -2.452721509e-05f, -2.448978283e-05f, -2.445231202e-05f, -2.441480271e-05f, -2.437725499e-05f, -2.433966891e-05f, -2.430204455e-05f,
+-2.426438198e-05f, -2.422668126e-05f, -2.418894246e-05f, -2.415116566e-05f, -2.411335092e-05f, -2.407549831e-05f, -2.403760791e-05f, -2.399967977e-05f, -2.396171398e-05f, -2.392371060e-05f,
+-2.388566969e-05f, -2.384759133e-05f, -2.380947560e-05f, -2.377132255e-05f, -2.373313226e-05f, -2.369490480e-05f, -2.365664024e-05f, -2.361833864e-05f, -2.358000009e-05f, -2.354162464e-05f,
+-2.350321237e-05f, -2.346476335e-05f, -2.342627765e-05f, -2.338775534e-05f, -2.334919649e-05f, -2.331060118e-05f, -2.327196946e-05f, -2.323330141e-05f, -2.319459711e-05f, -2.315585662e-05f,
+-2.311708001e-05f, -2.307826736e-05f, -2.303941873e-05f, -2.300053420e-05f, -2.296161384e-05f, -2.292265772e-05f, -2.288366590e-05f, -2.284463847e-05f, -2.280557549e-05f, -2.276647703e-05f,
+-2.272734317e-05f, -2.268817397e-05f, -2.264896951e-05f, -2.260972985e-05f, -2.257045508e-05f, -2.253114526e-05f, -2.249180046e-05f, -2.245242076e-05f, -2.241300623e-05f, -2.237355693e-05f,
+-2.233407294e-05f, -2.229455434e-05f, -2.225500119e-05f, -2.221541356e-05f, -2.217579154e-05f, -2.213613518e-05f, -2.209644457e-05f, -2.205671977e-05f, -2.201696086e-05f, -2.197716791e-05f,
+-2.193734099e-05f, -2.189748017e-05f, -2.185758553e-05f, -2.181765714e-05f, -2.177769507e-05f, -2.173769939e-05f, -2.169767018e-05f, -2.165760752e-05f, -2.161751146e-05f, -2.157738209e-05f,
+-2.153721947e-05f, -2.149702369e-05f, -2.145679481e-05f, -2.141653291e-05f, -2.137623806e-05f, -2.133591033e-05f, -2.129554979e-05f, -2.125515653e-05f, -2.121473061e-05f, -2.117427210e-05f,
+-2.113378109e-05f, -2.109325764e-05f, -2.105270182e-05f, -2.101211371e-05f, -2.097149339e-05f, -2.093084092e-05f, -2.089015639e-05f, -2.084943985e-05f, -2.080869140e-05f, -2.076791110e-05f,
+-2.072709902e-05f, -2.068625524e-05f, -2.064537984e-05f, -2.060447288e-05f, -2.056353445e-05f, -2.052256461e-05f, -2.048156344e-05f, -2.044053101e-05f, -2.039946740e-05f, -2.035837269e-05f,
+-2.031724694e-05f, -2.027609023e-05f, -2.023490264e-05f, -2.019368424e-05f, -2.015243510e-05f, -2.011115530e-05f, -2.006984491e-05f, -2.002850402e-05f, -1.998713268e-05f, -1.994573098e-05f,
+-1.990429900e-05f, -1.986283680e-05f, -1.982134446e-05f, -1.977982206e-05f, -1.973826967e-05f, -1.969668737e-05f, -1.965507523e-05f, -1.961343333e-05f, -1.957176174e-05f, -1.953006054e-05f,
+-1.948832980e-05f, -1.944656959e-05f, -1.940478000e-05f, -1.936296110e-05f, -1.932111296e-05f, -1.927923566e-05f, -1.923732928e-05f, -1.919539388e-05f, -1.915342955e-05f, -1.911143637e-05f,
+-1.906941439e-05f, -1.902736372e-05f, -1.898528441e-05f, -1.894317654e-05f, -1.890104019e-05f, -1.885887544e-05f, -1.881668236e-05f, -1.877446103e-05f, -1.873221152e-05f, -1.868993391e-05f,
+-1.864762828e-05f, -1.860529470e-05f, -1.856293324e-05f, -1.852054399e-05f, -1.847812702e-05f, -1.843568241e-05f, -1.839321023e-05f, -1.835071055e-05f, -1.830818347e-05f, -1.826562904e-05f,
+-1.822304736e-05f, -1.818043848e-05f, -1.813780250e-05f, -1.809513949e-05f, -1.805244952e-05f, -1.800973268e-05f, -1.796698903e-05f, -1.792421865e-05f, -1.788142163e-05f, -1.783859803e-05f,
+-1.779574794e-05f, -1.775287143e-05f, -1.770996858e-05f, -1.766703947e-05f, -1.762408417e-05f, -1.758110276e-05f, -1.753809531e-05f, -1.749506191e-05f, -1.745200263e-05f, -1.740891755e-05f,
+-1.736580674e-05f, -1.732267029e-05f, -1.727950826e-05f, -1.723632075e-05f, -1.719310782e-05f, -1.714986955e-05f, -1.710660602e-05f, -1.706331730e-05f, -1.702000349e-05f, -1.697666464e-05f,
+-1.693330084e-05f, -1.688991217e-05f, -1.684649871e-05f, -1.680306053e-05f, -1.675959770e-05f, -1.671611032e-05f, -1.667259845e-05f, -1.662906218e-05f, -1.658550158e-05f, -1.654191672e-05f,
+-1.649830770e-05f, -1.645467458e-05f, -1.641101744e-05f, -1.636733636e-05f, -1.632363142e-05f, -1.627990271e-05f, -1.623615028e-05f, -1.619237423e-05f, -1.614857463e-05f, -1.610475156e-05f,
+-1.606090510e-05f, -1.601703533e-05f, -1.597314232e-05f, -1.592922616e-05f, -1.588528692e-05f, -1.584132467e-05f, -1.579733951e-05f, -1.575333150e-05f, -1.570930073e-05f, -1.566524727e-05f,
+-1.562117121e-05f, -1.557707262e-05f, -1.553295157e-05f, -1.548880816e-05f, -1.544464245e-05f, -1.540045453e-05f, -1.535624447e-05f, -1.531201236e-05f, -1.526775827e-05f, -1.522348228e-05f,
+-1.517918447e-05f, -1.513486492e-05f, -1.509052371e-05f, -1.504616092e-05f, -1.500177662e-05f, -1.495737090e-05f, -1.491294383e-05f, -1.486849549e-05f, -1.482402597e-05f, -1.477953533e-05f,
+-1.473502367e-05f, -1.469049106e-05f, -1.464593758e-05f, -1.460136330e-05f, -1.455676831e-05f, -1.451215269e-05f, -1.446751652e-05f, -1.442285987e-05f, -1.437818283e-05f, -1.433348547e-05f,
+-1.428876787e-05f, -1.424403012e-05f, -1.419927229e-05f, -1.415449447e-05f, -1.410969672e-05f, -1.406487914e-05f, -1.402004180e-05f, -1.397518478e-05f, -1.393030816e-05f, -1.388541202e-05f,
+-1.384049644e-05f, -1.379556149e-05f, -1.375060727e-05f, -1.370563385e-05f, -1.366064131e-05f, -1.361562972e-05f, -1.357059917e-05f, -1.352554975e-05f, -1.348048152e-05f, -1.343539457e-05f,
+-1.339028897e-05f, -1.334516482e-05f, -1.330002218e-05f, -1.325486114e-05f, -1.320968179e-05f, -1.316448418e-05f, -1.311926842e-05f, -1.307403458e-05f, -1.302878273e-05f, -1.298351297e-05f,
+-1.293822536e-05f, -1.289292000e-05f, -1.284759695e-05f, -1.280225630e-05f, -1.275689813e-05f, -1.271152253e-05f, -1.266612956e-05f, -1.262071932e-05f, -1.257529188e-05f, -1.252984731e-05f,
+-1.248438572e-05f, -1.243890716e-05f, -1.239341173e-05f, -1.234789950e-05f, -1.230237056e-05f, -1.225682498e-05f, -1.221126285e-05f, -1.216568424e-05f, -1.212008924e-05f, -1.207447792e-05f,
+-1.202885038e-05f, -1.198320668e-05f, -1.193754691e-05f, -1.189187115e-05f, -1.184617948e-05f, -1.180047198e-05f, -1.175474874e-05f, -1.170900983e-05f, -1.166325533e-05f, -1.161748532e-05f,
+-1.157169989e-05f, -1.152589912e-05f, -1.148008308e-05f, -1.143425186e-05f, -1.138840554e-05f, -1.134254420e-05f, -1.129666792e-05f, -1.125077677e-05f, -1.120487086e-05f, -1.115895024e-05f,
+-1.111301501e-05f, -1.106706525e-05f, -1.102110103e-05f, -1.097512243e-05f, -1.092912955e-05f, -1.088312246e-05f, -1.083710123e-05f, -1.079106596e-05f, -1.074501672e-05f, -1.069895360e-05f,
+-1.065287667e-05f, -1.060678601e-05f, -1.056068172e-05f, -1.051456386e-05f, -1.046843252e-05f, -1.042228778e-05f, -1.037612973e-05f, -1.032995844e-05f, -1.028377399e-05f, -1.023757647e-05f,
+-1.019136596e-05f, -1.014514254e-05f, -1.009890628e-05f, -1.005265728e-05f, -1.000639561e-05f, -9.960121356e-06f, -9.913834597e-06f, -9.867535414e-06f, -9.821223890e-06f, -9.774900106e-06f,
+-9.728564144e-06f, -9.682216084e-06f, -9.635856008e-06f, -9.589483998e-06f, -9.543100135e-06f, -9.496704501e-06f, -9.450297178e-06f, -9.403878246e-06f, -9.357447787e-06f, -9.311005883e-06f,
+-9.264552616e-06f, -9.218088066e-06f, -9.171612317e-06f, -9.125125448e-06f, -9.078627542e-06f, -9.032118681e-06f, -8.985598945e-06f, -8.939068418e-06f, -8.892527180e-06f, -8.845975312e-06f,
+-8.799412898e-06f, -8.752840017e-06f, -8.706256753e-06f, -8.659663187e-06f, -8.613059400e-06f, -8.566445474e-06f, -8.519821491e-06f, -8.473187533e-06f, -8.426543681e-06f, -8.379890017e-06f,
+-8.333226624e-06f, -8.286553582e-06f, -8.239870973e-06f, -8.193178880e-06f, -8.146477383e-06f, -8.099766566e-06f, -8.053046509e-06f, -8.006317295e-06f, -7.959579005e-06f, -7.912831722e-06f,
+-7.866075526e-06f, -7.819310500e-06f, -7.772536726e-06f, -7.725754285e-06f, -7.678963260e-06f, -7.632163732e-06f, -7.585355784e-06f, -7.538539496e-06f, -7.491714952e-06f, -7.444882232e-06f,
+-7.398041419e-06f, -7.351192595e-06f, -7.304335842e-06f, -7.257471241e-06f, -7.210598875e-06f, -7.163718825e-06f, -7.116831173e-06f, -7.069936002e-06f, -7.023033393e-06f, -6.976123428e-06f,
+-6.929206189e-06f, -6.882281759e-06f, -6.835350219e-06f, -6.788411650e-06f, -6.741466136e-06f, -6.694513758e-06f, -6.647554597e-06f, -6.600588737e-06f, -6.553616258e-06f, -6.506637244e-06f,
+-6.459651776e-06f, -6.412659935e-06f, -6.365661805e-06f, -6.318657466e-06f, -6.271647001e-06f, -6.224630492e-06f, -6.177608022e-06f, -6.130579671e-06f, -6.083545522e-06f, -6.036505657e-06f,
+-5.989460158e-06f, -5.942409108e-06f, -5.895352587e-06f, -5.848290678e-06f, -5.801223464e-06f, -5.754151025e-06f, -5.707073445e-06f, -5.659990805e-06f, -5.612903187e-06f, -5.565810673e-06f,
+-5.518713345e-06f, -5.471611286e-06f, -5.424504577e-06f, -5.377393300e-06f, -5.330277537e-06f, -5.283157371e-06f, -5.236032883e-06f, -5.188904156e-06f, -5.141771270e-06f, -5.094634310e-06f,
+-5.047493355e-06f, -5.000348489e-06f, -4.953199794e-06f, -4.906047351e-06f, -4.858891242e-06f, -4.811731550e-06f, -4.764568356e-06f, -4.717401743e-06f, -4.670231792e-06f, -4.623058586e-06f,
+-4.575882206e-06f, -4.528702735e-06f, -4.481520254e-06f, -4.434334845e-06f, -4.387146591e-06f, -4.339955573e-06f, -4.292761874e-06f, -4.245565575e-06f, -4.198366758e-06f, -4.151165505e-06f,
+-4.103961899e-06f, -4.056756021e-06f, -4.009547953e-06f, -3.962337777e-06f, -3.915125575e-06f, -3.867911429e-06f, -3.820695421e-06f, -3.773477633e-06f, -3.726258146e-06f, -3.679037043e-06f,
+-3.631814406e-06f, -3.584590316e-06f, -3.537364855e-06f, -3.490138106e-06f, -3.442910149e-06f, -3.395681068e-06f, -3.348450944e-06f, -3.301219858e-06f, -3.253987893e-06f, -3.206755131e-06f,
+-3.159521652e-06f, -3.112287540e-06f, -3.065052876e-06f, -3.017817742e-06f, -2.970582219e-06f, -2.923346390e-06f, -2.876110335e-06f, -2.828874138e-06f, -2.781637880e-06f, -2.734401642e-06f,
+-2.687165507e-06f, -2.639929556e-06f, -2.592693870e-06f, -2.545458533e-06f, -2.498223624e-06f, -2.450989227e-06f, -2.403755422e-06f, -2.356522292e-06f, -2.309289918e-06f, -2.262058382e-06f,
+-2.214827765e-06f, -2.167598150e-06f, -2.120369618e-06f, -2.073142250e-06f, -2.025916128e-06f, -1.978691334e-06f, -1.931467949e-06f, -1.884246055e-06f, -1.837025734e-06f, -1.789807067e-06f,
+-1.742590136e-06f, -1.695375022e-06f, -1.648161807e-06f, -1.600950572e-06f, -1.553741399e-06f, -1.506534370e-06f, -1.459329565e-06f, -1.412127067e-06f, -1.364926957e-06f, -1.317729316e-06f,
+-1.270534226e-06f, -1.223341768e-06f, -1.176152024e-06f, -1.128965075e-06f, -1.081781002e-06f, -1.034599888e-06f, -9.874218121e-07f, -9.402468572e-07f, -8.930751041e-07f, -8.459066344e-07f,
+-7.987415292e-07f, -7.515798699e-07f, -7.044217377e-07f, -6.572672141e-07f, -6.101163801e-07f, -5.629693171e-07f, -5.158261062e-07f, -4.686868288e-07f, -4.215515659e-07f, -3.744203988e-07f,
+-3.272934087e-07f, -2.801706767e-07f, -2.330522840e-07f, -1.859383116e-07f, -1.388288406e-07f, -9.172395226e-08f, -4.462372754e-08f, 2.471752495e-09f, 4.956240679e-08f, 9.664815432e-08f,
+1.437289141e-07f, 1.908046051e-07f, 2.378751464e-07f, 2.849404569e-07f, 3.320004559e-07f, 3.790550623e-07f, 4.261041952e-07f, 4.731477738e-07f, 5.201857172e-07f, 5.672179445e-07f,
+6.142443750e-07f, 6.612649277e-07f, 7.082795219e-07f, 7.552880768e-07f, 8.022905117e-07f, 8.492867458e-07f, 8.962766985e-07f, 9.432602889e-07f, 9.902374364e-07f, 1.037208060e-06f,
+1.084172080e-06f, 1.131129415e-06f, 1.178079985e-06f, 1.225023708e-06f, 1.271960505e-06f, 1.318890295e-06f, 1.365812998e-06f, 1.412728532e-06f, 1.459636817e-06f, 1.506537774e-06f,
+1.553431321e-06f, 1.600317378e-06f, 1.647195864e-06f, 1.694066700e-06f, 1.740929805e-06f, 1.787785099e-06f, 1.834632501e-06f, 1.881471931e-06f, 1.928303308e-06f, 1.975126553e-06f,
+2.021941586e-06f, 2.068748325e-06f, 2.115546691e-06f, 2.162336604e-06f, 2.209117984e-06f, 2.255890750e-06f, 2.302654823e-06f, 2.349410121e-06f, 2.396156567e-06f, 2.442894078e-06f,
+2.489622576e-06f, 2.536341980e-06f, 2.583052210e-06f, 2.629753187e-06f, 2.676444831e-06f, 2.723127061e-06f, 2.769799798e-06f, 2.816462962e-06f, 2.863116473e-06f, 2.909760252e-06f,
+2.956394218e-06f, 3.003018293e-06f, 3.049632395e-06f, 3.096236447e-06f, 3.142830367e-06f, 3.189414076e-06f, 3.235987496e-06f, 3.282550545e-06f, 3.329103145e-06f, 3.375645217e-06f,
+3.422176679e-06f, 3.468697454e-06f, 3.515207462e-06f, 3.561706623e-06f, 3.608194858e-06f, 3.654672087e-06f, 3.701138232e-06f, 3.747593213e-06f, 3.794036950e-06f, 3.840469365e-06f,
+3.886890378e-06f, 3.933299910e-06f, 3.979697881e-06f, 4.026084214e-06f, 4.072458828e-06f, 4.118821644e-06f, 4.165172584e-06f, 4.211511569e-06f, 4.257838519e-06f, 4.304153355e-06f,
+4.350455999e-06f, 4.396746372e-06f, 4.443024394e-06f, 4.489289987e-06f, 4.535543073e-06f, 4.581783571e-06f, 4.628011405e-06f, 4.674226494e-06f, 4.720428760e-06f, 4.766618124e-06f,
+4.812794509e-06f, 4.858957835e-06f, 4.905108023e-06f, 4.951244995e-06f, 4.997368673e-06f, 5.043478978e-06f, 5.089575832e-06f, 5.135659156e-06f, 5.181728872e-06f, 5.227784901e-06f,
+5.273827166e-06f, 5.319855587e-06f, 5.365870087e-06f, 5.411870587e-06f, 5.457857010e-06f, 5.503829276e-06f, 5.549787308e-06f, 5.595731029e-06f, 5.641660358e-06f, 5.687575220e-06f,
+5.733475535e-06f, 5.779361226e-06f, 5.825232214e-06f, 5.871088423e-06f, 5.916929773e-06f, 5.962756188e-06f, 6.008567589e-06f, 6.054363899e-06f, 6.100145039e-06f, 6.145910933e-06f,
+6.191661502e-06f, 6.237396669e-06f, 6.283116356e-06f, 6.328820486e-06f, 6.374508982e-06f, 6.420181764e-06f, 6.465838758e-06f, 6.511479884e-06f, 6.557105065e-06f, 6.602714225e-06f,
+6.648307285e-06f, 6.693884169e-06f, 6.739444799e-06f, 6.784989098e-06f, 6.830516989e-06f, 6.876028395e-06f, 6.921523239e-06f, 6.967001443e-06f, 7.012462930e-06f, 7.057907625e-06f,
+7.103335449e-06f, 7.148746325e-06f, 7.194140178e-06f, 7.239516930e-06f, 7.284876503e-06f, 7.330218823e-06f, 7.375543811e-06f, 7.420851391e-06f, 7.466141486e-06f, 7.511414020e-06f,
+7.556668917e-06f, 7.601906099e-06f, 7.647125491e-06f, 7.692327015e-06f, 7.737510595e-06f, 7.782676155e-06f, 7.827823619e-06f, 7.872952911e-06f, 7.918063953e-06f, 7.963156670e-06f,
+8.008230986e-06f, 8.053286824e-06f, 8.098324109e-06f, 8.143342764e-06f, 8.188342713e-06f, 8.233323881e-06f, 8.278286191e-06f, 8.323229567e-06f, 8.368153934e-06f, 8.413059216e-06f,
+8.457945337e-06f, 8.502812221e-06f, 8.547659793e-06f, 8.592487977e-06f, 8.637296697e-06f, 8.682085877e-06f, 8.726855443e-06f, 8.771605319e-06f, 8.816335429e-06f, 8.861045697e-06f,
+8.905736050e-06f, 8.950406410e-06f, 8.995056703e-06f, 9.039686854e-06f, 9.084296788e-06f, 9.128886428e-06f, 9.173455701e-06f, 9.218004531e-06f, 9.262532843e-06f, 9.307040562e-06f,
+9.351527614e-06f, 9.395993923e-06f, 9.440439414e-06f, 9.484864012e-06f, 9.529267644e-06f, 9.573650234e-06f, 9.618011707e-06f, 9.662351989e-06f, 9.706671006e-06f, 9.750968682e-06f,
+9.795244943e-06f, 9.839499715e-06f, 9.883732924e-06f, 9.927944494e-06f, 9.972134352e-06f, 1.001630242e-05f, 1.006044863e-05f, 1.010457291e-05f, 1.014867518e-05f, 1.019275536e-05f,
+1.023681339e-05f, 1.028084918e-05f, 1.032486267e-05f, 1.036885378e-05f, 1.041282244e-05f, 1.045676857e-05f, 1.050069210e-05f, 1.054459296e-05f, 1.058847106e-05f, 1.063232635e-05f,
+1.067615874e-05f, 1.071996817e-05f, 1.076375455e-05f, 1.080751781e-05f, 1.085125789e-05f, 1.089497470e-05f, 1.093866818e-05f, 1.098233825e-05f, 1.102598483e-05f, 1.106960787e-05f,
+1.111320727e-05f, 1.115678297e-05f, 1.120033490e-05f, 1.124386298e-05f, 1.128736714e-05f, 1.133084731e-05f, 1.137430341e-05f, 1.141773537e-05f, 1.146114312e-05f, 1.150452659e-05f,
+1.154788570e-05f, 1.159122038e-05f, 1.163453056e-05f, 1.167781617e-05f, 1.172107713e-05f, 1.176431337e-05f, 1.180752481e-05f, 1.185071140e-05f, 1.189387305e-05f, 1.193700969e-05f,
+1.198012125e-05f, 1.202320766e-05f, 1.206626885e-05f, 1.210930473e-05f, 1.215231526e-05f, 1.219530034e-05f, 1.223825991e-05f, 1.228119389e-05f, 1.232410223e-05f, 1.236698483e-05f,
+1.240984164e-05f, 1.245267257e-05f, 1.249547757e-05f, 1.253825655e-05f, 1.258100945e-05f, 1.262373619e-05f, 1.266643671e-05f, 1.270911093e-05f, 1.275175878e-05f, 1.279438018e-05f,
+1.283697508e-05f, 1.287954340e-05f, 1.292208506e-05f, 1.296459999e-05f, 1.300708814e-05f, 1.304954941e-05f, 1.309198375e-05f, 1.313439108e-05f, 1.317677134e-05f, 1.321912444e-05f,
+1.326145033e-05f, 1.330374893e-05f, 1.334602016e-05f, 1.338826397e-05f, 1.343048028e-05f, 1.347266901e-05f, 1.351483010e-05f, 1.355696349e-05f, 1.359906909e-05f, 1.364114683e-05f,
+1.368319666e-05f, 1.372521850e-05f, 1.376721227e-05f, 1.380917792e-05f, 1.385111536e-05f, 1.389302453e-05f, 1.393490537e-05f, 1.397675779e-05f, 1.401858173e-05f, 1.406037713e-05f,
+1.410214390e-05f, 1.414388199e-05f, 1.418559132e-05f, 1.422727183e-05f, 1.426892344e-05f, 1.431054608e-05f, 1.435213969e-05f, 1.439370420e-05f, 1.443523954e-05f, 1.447674564e-05f,
+1.451822243e-05f, 1.455966984e-05f, 1.460108780e-05f, 1.464247625e-05f, 1.468383511e-05f, 1.472516432e-05f, 1.476646381e-05f, 1.480773351e-05f, 1.484897335e-05f, 1.489018327e-05f,
+1.493136319e-05f, 1.497251305e-05f, 1.501363277e-05f, 1.505472230e-05f, 1.509578156e-05f, 1.513681049e-05f, 1.517780901e-05f, 1.521877706e-05f, 1.525971457e-05f, 1.530062148e-05f,
+1.534149771e-05f, 1.538234320e-05f, 1.542315788e-05f, 1.546394169e-05f, 1.550469455e-05f, 1.554541640e-05f, 1.558610717e-05f, 1.562676679e-05f, 1.566739520e-05f, 1.570799233e-05f,
+1.574855811e-05f, 1.578909248e-05f, 1.582959537e-05f, 1.587006671e-05f, 1.591050643e-05f, 1.595091447e-05f, 1.599129076e-05f, 1.603163524e-05f, 1.607194784e-05f, 1.611222848e-05f,
+1.615247712e-05f, 1.619269367e-05f, 1.623287807e-05f, 1.627303026e-05f, 1.631315017e-05f, 1.635323773e-05f, 1.639329289e-05f, 1.643331556e-05f, 1.647330569e-05f, 1.651326321e-05f,
+1.655318805e-05f, 1.659308015e-05f, 1.663293945e-05f, 1.667276587e-05f, 1.671255935e-05f, 1.675231983e-05f, 1.679204724e-05f, 1.683174151e-05f, 1.687140259e-05f, 1.691103039e-05f,
+1.695062487e-05f, 1.699018595e-05f, 1.702971358e-05f, 1.706920767e-05f, 1.710866818e-05f, 1.714809503e-05f, 1.718748815e-05f, 1.722684750e-05f, 1.726617299e-05f, 1.730546457e-05f,
+1.734472217e-05f, 1.738394573e-05f, 1.742313518e-05f, 1.746229046e-05f, 1.750141150e-05f, 1.754049824e-05f, 1.757955061e-05f, 1.761856856e-05f, 1.765755202e-05f, 1.769650091e-05f,
+1.773541519e-05f, 1.777429478e-05f, 1.781313962e-05f, 1.785194966e-05f, 1.789072481e-05f, 1.792946503e-05f, 1.796817024e-05f, 1.800684039e-05f, 1.804547541e-05f, 1.808407524e-05f,
+1.812263981e-05f, 1.816116906e-05f, 1.819966293e-05f, 1.823812136e-05f, 1.827654428e-05f, 1.831493162e-05f, 1.835328333e-05f, 1.839159935e-05f, 1.842987961e-05f, 1.846812404e-05f,
+1.850633260e-05f, 1.854450520e-05f, 1.858264180e-05f, 1.862074232e-05f, 1.865880671e-05f, 1.869683491e-05f, 1.873482685e-05f, 1.877278246e-05f, 1.881070170e-05f, 1.884858449e-05f,
+1.888643078e-05f, 1.892424050e-05f, 1.896201359e-05f, 1.899974999e-05f, 1.903744963e-05f, 1.907511247e-05f, 1.911273843e-05f, 1.915032745e-05f, 1.918787947e-05f, 1.922539444e-05f,
+1.926287228e-05f, 1.930031294e-05f, 1.933771637e-05f, 1.937508248e-05f, 1.941241124e-05f, 1.944970257e-05f, 1.948695641e-05f, 1.952417271e-05f, 1.956135140e-05f, 1.959849242e-05f,
+1.963559572e-05f, 1.967266123e-05f, 1.970968889e-05f, 1.974667864e-05f, 1.978363042e-05f, 1.982054417e-05f, 1.985741984e-05f, 1.989425736e-05f, 1.993105666e-05f, 1.996781770e-05f,
+2.000454042e-05f, 2.004122474e-05f, 2.007787062e-05f, 2.011447799e-05f, 2.015104679e-05f, 2.018757697e-05f, 2.022406847e-05f, 2.026052122e-05f, 2.029693517e-05f, 2.033331025e-05f,
+2.036964642e-05f, 2.040594360e-05f, 2.044220175e-05f, 2.047842079e-05f, 2.051460069e-05f, 2.055074136e-05f, 2.058684277e-05f, 2.062290484e-05f, 2.065892752e-05f, 2.069491075e-05f,
+2.073085448e-05f, 2.076675864e-05f, 2.080262318e-05f, 2.083844804e-05f, 2.087423316e-05f, 2.090997848e-05f, 2.094568395e-05f, 2.098134950e-05f, 2.101697509e-05f, 2.105256064e-05f,
+2.108810612e-05f, 2.112361145e-05f, 2.115907658e-05f, 2.119450145e-05f, 2.122988601e-05f, 2.126523019e-05f, 2.130053395e-05f, 2.133579723e-05f, 2.137101996e-05f, 2.140620209e-05f,
+2.144134357e-05f, 2.147644433e-05f, 2.151150433e-05f, 2.154652349e-05f, 2.158150178e-05f, 2.161643913e-05f, 2.165133549e-05f, 2.168619079e-05f, 2.172100499e-05f, 2.175577802e-05f,
+2.179050983e-05f, 2.182520037e-05f, 2.185984958e-05f, 2.189445741e-05f, 2.192902379e-05f, 2.196354867e-05f, 2.199803200e-05f, 2.203247372e-05f, 2.206687378e-05f, 2.210123212e-05f,
+2.213554868e-05f, 2.216982342e-05f, 2.220405627e-05f, 2.223824718e-05f, 2.227239610e-05f, 2.230650296e-05f, 2.234056773e-05f, 2.237459033e-05f, 2.240857072e-05f, 2.244250885e-05f,
+2.247640465e-05f, 2.251025808e-05f, 2.254406907e-05f, 2.257783758e-05f, 2.261156356e-05f, 2.264524693e-05f, 2.267888767e-05f, 2.271248570e-05f, 2.274604098e-05f, 2.277955345e-05f,
+2.281302305e-05f, 2.284644975e-05f, 2.287983347e-05f, 2.291317417e-05f, 2.294647180e-05f, 2.297972630e-05f, 2.301293761e-05f, 2.304610569e-05f, 2.307923049e-05f, 2.311231194e-05f,
+2.314535000e-05f, 2.317834461e-05f, 2.321129573e-05f, 2.324420329e-05f, 2.327706725e-05f, 2.330988755e-05f, 2.334266415e-05f, 2.337539698e-05f, 2.340808600e-05f, 2.344073116e-05f,
+2.347333239e-05f, 2.350588966e-05f, 2.353840291e-05f, 2.357087209e-05f, 2.360329714e-05f, 2.363567801e-05f, 2.366801466e-05f, 2.370030703e-05f, 2.373255507e-05f, 2.376475872e-05f,
+2.379691795e-05f, 2.382903269e-05f, 2.386110289e-05f, 2.389312851e-05f, 2.392510950e-05f, 2.395704579e-05f, 2.398893735e-05f, 2.402078412e-05f, 2.405258605e-05f, 2.408434309e-05f,
+2.411605519e-05f, 2.414772230e-05f, 2.417934437e-05f, 2.421092135e-05f, 2.424245319e-05f, 2.427393983e-05f, 2.430538124e-05f, 2.433677736e-05f, 2.436812813e-05f, 2.439943352e-05f,
+2.443069347e-05f, 2.446190793e-05f, 2.449307685e-05f, 2.452420019e-05f, 2.455527788e-05f, 2.458630990e-05f, 2.461729618e-05f, 2.464823667e-05f, 2.467913133e-05f, 2.470998012e-05f,
+2.474078297e-05f, 2.477153984e-05f, 2.480225069e-05f, 2.483291546e-05f, 2.486353411e-05f, 2.489410658e-05f, 2.492463284e-05f, 2.495511283e-05f, 2.498554650e-05f, 2.501593381e-05f,
+2.504627470e-05f, 2.507656914e-05f, 2.510681707e-05f, 2.513701844e-05f, 2.516717321e-05f, 2.519728133e-05f, 2.522734276e-05f, 2.525735744e-05f, 2.528732533e-05f, 2.531724637e-05f,
+2.534712054e-05f, 2.537694777e-05f, 2.540672802e-05f, 2.543646125e-05f, 2.546614740e-05f, 2.549578644e-05f, 2.552537831e-05f, 2.555492296e-05f, 2.558442036e-05f, 2.561387045e-05f,
+2.564327320e-05f, 2.567262854e-05f, 2.570193645e-05f, 2.573119686e-05f, 2.576040974e-05f, 2.578957504e-05f, 2.581869272e-05f, 2.584776272e-05f, 2.587678501e-05f, 2.590575954e-05f,
+2.593468626e-05f, 2.596356512e-05f, 2.599239609e-05f, 2.602117912e-05f, 2.604991416e-05f, 2.607860117e-05f, 2.610724010e-05f, 2.613583091e-05f, 2.616437356e-05f, 2.619286799e-05f,
+2.622131417e-05f, 2.624971205e-05f, 2.627806159e-05f, 2.630636274e-05f, 2.633461545e-05f, 2.636281970e-05f, 2.639097542e-05f, 2.641908258e-05f, 2.644714114e-05f, 2.647515104e-05f,
+2.650311225e-05f, 2.653102473e-05f, 2.655888842e-05f, 2.658670329e-05f, 2.661446930e-05f, 2.664218639e-05f, 2.666985453e-05f, 2.669747368e-05f, 2.672504379e-05f, 2.675256481e-05f,
+2.678003672e-05f, 2.680745945e-05f, 2.683483298e-05f, 2.686215726e-05f, 2.688943225e-05f, 2.691665790e-05f, 2.694383417e-05f, 2.697096102e-05f, 2.699803842e-05f, 2.702506631e-05f,
+2.705204465e-05f, 2.707897341e-05f, 2.710585254e-05f, 2.713268201e-05f, 2.715946176e-05f, 2.718619176e-05f, 2.721287197e-05f, 2.723950234e-05f, 2.726608284e-05f, 2.729261342e-05f,
+2.731909405e-05f, 2.734552468e-05f, 2.737190527e-05f, 2.739823579e-05f, 2.742451618e-05f, 2.745074642e-05f, 2.747692645e-05f, 2.750305625e-05f, 2.752913577e-05f, 2.755516496e-05f,
+2.758114380e-05f, 2.760707224e-05f, 2.763295024e-05f, 2.765877776e-05f, 2.768455477e-05f, 2.771028121e-05f, 2.773595706e-05f, 2.776158227e-05f, 2.778715681e-05f, 2.781268064e-05f,
+2.783815371e-05f, 2.786357598e-05f, 2.788894743e-05f, 2.791426801e-05f, 2.793953768e-05f, 2.796475640e-05f, 2.798992414e-05f, 2.801504085e-05f, 2.804010651e-05f, 2.806512106e-05f,
+2.809008447e-05f, 2.811499671e-05f, 2.813985774e-05f, 2.816466751e-05f, 2.818942600e-05f, 2.821413316e-05f, 2.823878895e-05f, 2.826339334e-05f, 2.828794630e-05f, 2.831244777e-05f,
+2.833689774e-05f, 2.836129615e-05f, 2.838564298e-05f, 2.840993818e-05f, 2.843418172e-05f, 2.845837357e-05f, 2.848251368e-05f, 2.850660202e-05f, 2.853063855e-05f, 2.855462324e-05f,
+2.857855605e-05f, 2.860243695e-05f, 2.862626589e-05f, 2.865004285e-05f, 2.867376779e-05f, 2.869744066e-05f, 2.872106144e-05f, 2.874463009e-05f, 2.876814658e-05f, 2.879161086e-05f,
+2.881502291e-05f, 2.883838269e-05f, 2.886169016e-05f, 2.888494529e-05f, 2.890814805e-05f, 2.893129839e-05f, 2.895439629e-05f, 2.897744171e-05f, 2.900043461e-05f, 2.902337497e-05f,
+2.904626274e-05f, 2.906909789e-05f, 2.909188039e-05f, 2.911461021e-05f, 2.913728731e-05f, 2.915991165e-05f, 2.918248321e-05f, 2.920500194e-05f, 2.922746783e-05f, 2.924988082e-05f,
+2.927224089e-05f, 2.929454801e-05f, 2.931680214e-05f, 2.933900325e-05f, 2.936115131e-05f, 2.938324628e-05f, 2.940528813e-05f, 2.942727683e-05f, 2.944921235e-05f, 2.947109464e-05f,
+2.949292369e-05f, 2.951469946e-05f, 2.953642191e-05f, 2.955809102e-05f, 2.957970675e-05f, 2.960126907e-05f, 2.962277794e-05f, 2.964423335e-05f, 2.966563524e-05f, 2.968698360e-05f,
+2.970827840e-05f, 2.972951959e-05f, 2.975070715e-05f, 2.977184106e-05f, 2.979292126e-05f, 2.981394775e-05f, 2.983492048e-05f, 2.985583942e-05f, 2.987670455e-05f, 2.989751583e-05f,
+2.991827323e-05f, 2.993897673e-05f, 2.995962628e-05f, 2.998022187e-05f, 3.000076346e-05f, 3.002125103e-05f, 3.004168453e-05f, 3.006206395e-05f, 3.008238925e-05f, 3.010266040e-05f,
+3.012287737e-05f, 3.014304014e-05f, 3.016314867e-05f, 3.018320294e-05f, 3.020320291e-05f, 3.022314856e-05f, 3.024303986e-05f, 3.026287678e-05f, 3.028265929e-05f, 3.030238736e-05f,
+3.032206096e-05f, 3.034168007e-05f, 3.036124466e-05f, 3.038075469e-05f, 3.040021014e-05f, 3.041961099e-05f, 3.043895720e-05f, 3.045824874e-05f, 3.047748560e-05f, 3.049666773e-05f,
+3.051579512e-05f, 3.053486774e-05f, 3.055388555e-05f, 3.057284853e-05f, 3.059175666e-05f, 3.061060990e-05f, 3.062940824e-05f, 3.064815163e-05f, 3.066684007e-05f, 3.068547351e-05f,
+3.070405193e-05f, 3.072257531e-05f, 3.074104363e-05f, 3.075945684e-05f, 3.077781493e-05f, 3.079611788e-05f, 3.081436565e-05f, 3.083255822e-05f, 3.085069556e-05f, 3.086877765e-05f,
+3.088680446e-05f, 3.090477597e-05f, 3.092269215e-05f, 3.094055298e-05f, 3.095835843e-05f, 3.097610847e-05f, 3.099380308e-05f, 3.101144224e-05f, 3.102902592e-05f, 3.104655410e-05f,
+3.106402675e-05f, 3.108144385e-05f, 3.109880537e-05f, 3.111611128e-05f, 3.113336157e-05f, 3.115055621e-05f, 3.116769518e-05f, 3.118477845e-05f, 3.120180600e-05f, 3.121877780e-05f,
+3.123569383e-05f, 3.125255407e-05f, 3.126935849e-05f, 3.128610708e-05f, 3.130279980e-05f, 3.131943663e-05f, 3.133601756e-05f, 3.135254255e-05f, 3.136901159e-05f, 3.138542465e-05f,
+3.140178172e-05f, 3.141808275e-05f, 3.143432775e-05f, 3.145051668e-05f, 3.146664951e-05f, 3.148272624e-05f, 3.149874683e-05f, 3.151471126e-05f, 3.153061952e-05f, 3.154647158e-05f,
+3.156226741e-05f, 3.157800701e-05f, 3.159369034e-05f, 3.160931738e-05f, 3.162488812e-05f, 3.164040253e-05f, 3.165586059e-05f, 3.167126228e-05f, 3.168660758e-05f, 3.170189647e-05f,
+3.171712892e-05f, 3.173230493e-05f, 3.174742446e-05f, 3.176248749e-05f, 3.177749402e-05f, 3.179244401e-05f, 3.180733744e-05f, 3.182217430e-05f, 3.183695457e-05f, 3.185167822e-05f,
+3.186634524e-05f, 3.188095561e-05f, 3.189550931e-05f, 3.191000631e-05f, 3.192444660e-05f, 3.193883016e-05f, 3.195315698e-05f, 3.196742702e-05f, 3.198164028e-05f, 3.199579674e-05f,
+3.200989636e-05f, 3.202393915e-05f, 3.203792507e-05f, 3.205185412e-05f, 3.206572627e-05f, 3.207954150e-05f, 3.209329980e-05f, 3.210700114e-05f, 3.212064552e-05f, 3.213423290e-05f,
+3.214776329e-05f, 3.216123665e-05f, 3.217465296e-05f, 3.218801223e-05f, 3.220131441e-05f, 3.221455951e-05f, 3.222774749e-05f, 3.224087835e-05f, 3.225395207e-05f, 3.226696863e-05f,
+3.227992801e-05f, 3.229283019e-05f, 3.230567517e-05f, 3.231846293e-05f, 3.233119344e-05f, 3.234386669e-05f, 3.235648267e-05f, 3.236904136e-05f, 3.238154274e-05f, 3.239398681e-05f,
+3.240637353e-05f, 3.241870290e-05f, 3.243097491e-05f, 3.244318953e-05f, 3.245534675e-05f, 3.246744656e-05f, 3.247948894e-05f, 3.249147388e-05f, 3.250340135e-05f, 3.251527136e-05f,
+3.252708388e-05f, 3.253883889e-05f, 3.255053639e-05f, 3.256217635e-05f, 3.257375877e-05f, 3.258528363e-05f, 3.259675092e-05f, 3.260816062e-05f, 3.261951272e-05f, 3.263080720e-05f,
+3.264204406e-05f, 3.265322327e-05f, 3.266434483e-05f, 3.267540872e-05f, 3.268641492e-05f, 3.269736344e-05f, 3.270825424e-05f, 3.271908732e-05f, 3.272986267e-05f, 3.274058027e-05f,
+3.275124012e-05f, 3.276184219e-05f, 3.277238647e-05f, 3.278287296e-05f, 3.279330165e-05f, 3.280367251e-05f, 3.281398554e-05f, 3.282424072e-05f, 3.283443805e-05f, 3.284457751e-05f,
+3.285465909e-05f, 3.286468278e-05f, 3.287464857e-05f, 3.288455644e-05f, 3.289440639e-05f, 3.290419840e-05f, 3.291393247e-05f, 3.292360857e-05f, 3.293322671e-05f, 3.294278687e-05f,
+3.295228904e-05f, 3.296173321e-05f, 3.297111937e-05f, 3.298044751e-05f, 3.298971762e-05f, 3.299892968e-05f, 3.300808369e-05f, 3.301717965e-05f, 3.302621753e-05f, 3.303519733e-05f,
+3.304411904e-05f, 3.305298266e-05f, 3.306178816e-05f, 3.307053555e-05f, 3.307922481e-05f, 3.308785593e-05f, 3.309642890e-05f, 3.310494373e-05f, 3.311340039e-05f, 3.312179888e-05f,
+3.313013919e-05f, 3.313842131e-05f, 3.314664523e-05f, 3.315481095e-05f, 3.316291845e-05f, 3.317096774e-05f, 3.317895879e-05f, 3.318689161e-05f, 3.319476619e-05f, 3.320258251e-05f,
+3.321034057e-05f, 3.321804036e-05f, 3.322568188e-05f, 3.323326512e-05f, 3.324079007e-05f, 3.324825673e-05f, 3.325566508e-05f, 3.326301512e-05f, 3.327030684e-05f, 3.327754024e-05f,
+3.328471532e-05f, 3.329183205e-05f, 3.329889045e-05f, 3.330589050e-05f, 3.331283219e-05f, 3.331971552e-05f, 3.332654048e-05f, 3.333330708e-05f, 3.334001529e-05f, 3.334666512e-05f,
+3.335325657e-05f, 3.335978962e-05f, 3.336626426e-05f, 3.337268051e-05f, 3.337903834e-05f, 3.338533776e-05f, 3.339157876e-05f, 3.339776134e-05f, 3.340388548e-05f, 3.340995120e-05f,
+3.341595847e-05f, 3.342190730e-05f, 3.342779769e-05f, 3.343362962e-05f, 3.343940310e-05f, 3.344511812e-05f, 3.345077468e-05f, 3.345637277e-05f, 3.346191239e-05f, 3.346739354e-05f,
+3.347281620e-05f, 3.347818039e-05f, 3.348348610e-05f, 3.348873331e-05f, 3.349392204e-05f, 3.349905227e-05f, 3.350412401e-05f, 3.350913725e-05f, 3.351409199e-05f, 3.351898822e-05f,
+3.352382595e-05f, 3.352860517e-05f, 3.353332588e-05f, 3.353798807e-05f, 3.354259175e-05f, 3.354713692e-05f, 3.355162356e-05f, 3.355605169e-05f, 3.356042129e-05f, 3.356473237e-05f,
+3.356898492e-05f, 3.357317895e-05f, 3.357731444e-05f, 3.358139141e-05f, 3.358540985e-05f, 3.358936976e-05f, 3.359327114e-05f, 3.359711399e-05f, 3.360089830e-05f, 3.360462408e-05f,
+3.360829133e-05f, 3.361190004e-05f, 3.361545021e-05f, 3.361894186e-05f, 3.362237497e-05f, 3.362574954e-05f, 3.362906558e-05f, 3.363232309e-05f, 3.363552206e-05f, 3.363866250e-05f,
+3.364174441e-05f, 3.364476778e-05f, 3.364773263e-05f, 3.365063894e-05f, 3.365348673e-05f, 3.365627599e-05f, 3.365900672e-05f, 3.366167893e-05f, 3.366429261e-05f, 3.366684777e-05f,
+3.366934441e-05f, 3.367178253e-05f, 3.367416214e-05f, 3.367648322e-05f, 3.367874580e-05f, 3.368094986e-05f, 3.368309542e-05f, 3.368518247e-05f, 3.368721101e-05f, 3.368918106e-05f,
+3.369109260e-05f, 3.369294565e-05f, 3.369474020e-05f, 3.369647627e-05f, 3.369815384e-05f, 3.369977294e-05f, 3.370133355e-05f, 3.370283568e-05f, 3.370427934e-05f, 3.370566453e-05f,
+3.370699125e-05f, 3.370825951e-05f, 3.370946930e-05f, 3.371062065e-05f, 3.371171354e-05f, 3.371274798e-05f, 3.371372398e-05f, 3.371464154e-05f, 3.371550067e-05f, 3.371630137e-05f,
+3.371704364e-05f, 3.371772749e-05f, 3.371835293e-05f, 3.371891995e-05f, 3.371942857e-05f, 3.371987879e-05f, 3.372027062e-05f, 3.372060405e-05f, 3.372087910e-05f, 3.372109577e-05f,
+3.372125407e-05f, 3.372135400e-05f, 3.372139557e-05f, 3.372137878e-05f, 3.372130364e-05f, 3.372117016e-05f, 3.372097834e-05f, 3.372072820e-05f, 3.372041972e-05f, 3.372005293e-05f,
+3.371962783e-05f, 3.371914442e-05f, 3.371860272e-05f, 3.371800272e-05f, 3.371734445e-05f, 3.371662789e-05f, 3.371585307e-05f, 3.371501998e-05f, 3.371412864e-05f, 3.371317906e-05f,
+3.371217123e-05f, 3.371110517e-05f, 3.370998089e-05f, 3.370879840e-05f, 3.370755769e-05f, 3.370625879e-05f, 3.370490170e-05f, 3.370348642e-05f, 3.370201297e-05f, 3.370048135e-05f,
+3.369889158e-05f, 3.369724366e-05f, 3.369553760e-05f, 3.369377340e-05f, 3.369195109e-05f, 3.369007067e-05f, 3.368813214e-05f, 3.368613551e-05f, 3.368408081e-05f, 3.368196803e-05f,
+3.367979718e-05f, 3.367756828e-05f, 3.367528133e-05f, 3.367293635e-05f, 3.367053334e-05f, 3.366807232e-05f, 3.366555329e-05f, 3.366297627e-05f, 3.366034127e-05f, 3.365764829e-05f,
+3.365489734e-05f, 3.365208845e-05f, 3.364922161e-05f, 3.364629685e-05f, 3.364331416e-05f, 3.364027356e-05f, 3.363717507e-05f, 3.363401870e-05f, 3.363080445e-05f, 3.362753233e-05f,
+3.362420237e-05f, 3.362081456e-05f, 3.361736893e-05f, 3.361386548e-05f, 3.361030423e-05f, 3.360668519e-05f, 3.360300837e-05f, 3.359927378e-05f, 3.359548144e-05f, 3.359163136e-05f,
+3.358772354e-05f, 3.358375801e-05f, 3.357973478e-05f, 3.357565386e-05f, 3.357151526e-05f, 3.356731899e-05f, 3.356306507e-05f, 3.355875352e-05f, 3.355438434e-05f, 3.354995755e-05f,
+3.354547316e-05f, 3.354093119e-05f, 3.353633165e-05f, 3.353167455e-05f, 3.352695991e-05f, 3.352218774e-05f, 3.351735806e-05f, 3.351247088e-05f, 3.350752621e-05f, 3.350252407e-05f,
+3.349746448e-05f, 3.349234745e-05f, 3.348717299e-05f, 3.348194112e-05f, 3.347665185e-05f, 3.347130520e-05f, 3.346590118e-05f, 3.346043982e-05f, 3.345492111e-05f, 3.344934509e-05f,
+3.344371177e-05f, 3.343802115e-05f, 3.343227326e-05f, 3.342646811e-05f, 3.342060573e-05f, 3.341468611e-05f, 3.340870929e-05f, 3.340267528e-05f, 3.339658409e-05f, 3.339043574e-05f,
+3.338423024e-05f, 3.337796762e-05f, 3.337164789e-05f, 3.336527106e-05f, 3.335883716e-05f, 3.335234620e-05f, 3.334579820e-05f, 3.333919317e-05f, 3.333253114e-05f, 3.332581211e-05f,
+3.331903612e-05f, 3.331220316e-05f, 3.330531327e-05f, 3.329836647e-05f, 3.329136276e-05f, 3.328430216e-05f, 3.327718470e-05f, 3.327001039e-05f, 3.326277926e-05f, 3.325549131e-05f,
+3.324814657e-05f, 3.324074506e-05f, 3.323328680e-05f, 3.322577179e-05f, 3.321820007e-05f, 3.321057166e-05f, 3.320288656e-05f, 3.319514480e-05f, 3.318734640e-05f, 3.317949138e-05f,
+3.317157976e-05f, 3.316361156e-05f, 3.315558679e-05f, 3.314750548e-05f, 3.313936765e-05f, 3.313117332e-05f, 3.312292250e-05f, 3.311461521e-05f, 3.310625149e-05f, 3.309783134e-05f,
+3.308935479e-05f, 3.308082186e-05f, 3.307223257e-05f, 3.306358694e-05f, 3.305488499e-05f, 3.304612674e-05f, 3.303731221e-05f, 3.302844142e-05f, 3.301951440e-05f, 3.301053117e-05f,
+3.300149174e-05f, 3.299239614e-05f, 3.298324439e-05f, 3.297403652e-05f, 3.296477253e-05f, 3.295545247e-05f, 3.294607634e-05f, 3.293664417e-05f, 3.292715598e-05f, 3.291761179e-05f,
+3.290801163e-05f, 3.289835552e-05f, 3.288864348e-05f, 3.287887553e-05f, 3.286905170e-05f, 3.285917201e-05f, 3.284923648e-05f, 3.283924514e-05f, 3.282919800e-05f, 3.281909509e-05f,
+3.280893644e-05f, 3.279872207e-05f, 3.278845200e-05f, 3.277812625e-05f, 3.276774485e-05f, 3.275730782e-05f, 3.274681519e-05f, 3.273626698e-05f, 3.272566321e-05f, 3.271500391e-05f,
+3.270428910e-05f, 3.269351881e-05f, 3.268269306e-05f, 3.267181187e-05f, 3.266087528e-05f, 3.264988329e-05f, 3.263883595e-05f, 3.262773327e-05f, 3.261657528e-05f, 3.260536201e-05f,
+3.259409347e-05f, 3.258276970e-05f, 3.257139072e-05f, 3.255995655e-05f, 3.254846722e-05f, 3.253692276e-05f, 3.252532319e-05f, 3.251366854e-05f, 3.250195884e-05f, 3.249019410e-05f,
+3.247837435e-05f, 3.246649963e-05f, 3.245456996e-05f, 3.244258536e-05f, 3.243054586e-05f, 3.241845149e-05f, 3.240630228e-05f, 3.239409824e-05f, 3.238183941e-05f, 3.236952582e-05f,
+3.235715748e-05f, 3.234473444e-05f, 3.233225671e-05f, 3.231972432e-05f, 3.230713730e-05f, 3.229449568e-05f, 3.228179949e-05f, 3.226904874e-05f, 3.225624348e-05f, 3.224338373e-05f,
+3.223046951e-05f, 3.221750086e-05f, 3.220447780e-05f, 3.219140035e-05f, 3.217826856e-05f, 3.216508244e-05f, 3.215184203e-05f, 3.213854736e-05f, 3.212519844e-05f, 3.211179532e-05f,
+3.209833802e-05f, 3.208482656e-05f, 3.207126099e-05f, 3.205764132e-05f, 3.204396758e-05f, 3.203023982e-05f, 3.201645804e-05f, 3.200262230e-05f, 3.198873260e-05f, 3.197478899e-05f,
+3.196079149e-05f, 3.194674014e-05f, 3.193263495e-05f, 3.191847597e-05f, 3.190426323e-05f, 3.188999674e-05f, 3.187567655e-05f, 3.186130268e-05f, 3.184687517e-05f, 3.183239404e-05f,
+3.181785933e-05f, 3.180327106e-05f, 3.178862927e-05f, 3.177393399e-05f, 3.175918525e-05f, 3.174438307e-05f, 3.172952750e-05f, 3.171461856e-05f, 3.169965628e-05f, 3.168464069e-05f,
+3.166957184e-05f, 3.165444974e-05f, 3.163927443e-05f, 3.162404594e-05f, 3.160876430e-05f, 3.159342955e-05f, 3.157804172e-05f, 3.156260084e-05f, 3.154710693e-05f, 3.153156005e-05f,
+3.151596020e-05f, 3.150030744e-05f, 3.148460179e-05f, 3.146884328e-05f, 3.145303195e-05f, 3.143716783e-05f, 3.142125095e-05f, 3.140528135e-05f, 3.138925905e-05f, 3.137318410e-05f,
+3.135705652e-05f, 3.134087635e-05f, 3.132464362e-05f, 3.130835837e-05f, 3.129202063e-05f, 3.127563043e-05f, 3.125918780e-05f, 3.124269279e-05f, 3.122614542e-05f, 3.120954573e-05f,
+3.119289375e-05f, 3.117618952e-05f, 3.115943307e-05f, 3.114262443e-05f, 3.112576365e-05f, 3.110885075e-05f, 3.109188577e-05f, 3.107486875e-05f, 3.105779971e-05f, 3.104067869e-05f,
+3.102350574e-05f, 3.100628088e-05f, 3.098900415e-05f, 3.097167558e-05f, 3.095429522e-05f, 3.093686309e-05f, 3.091937922e-05f, 3.090184367e-05f, 3.088425646e-05f, 3.086661763e-05f,
+3.084892720e-05f, 3.083118523e-05f, 3.081339175e-05f, 3.079554679e-05f, 3.077765038e-05f, 3.075970257e-05f, 3.074170340e-05f, 3.072365288e-05f, 3.070555108e-05f, 3.068739801e-05f,
+3.066919372e-05f, 3.065093824e-05f, 3.063263162e-05f, 3.061427388e-05f, 3.059586507e-05f, 3.057740522e-05f, 3.055889437e-05f, 3.054033256e-05f, 3.052171982e-05f, 3.050305620e-05f,
+3.048434172e-05f, 3.046557643e-05f, 3.044676036e-05f, 3.042789356e-05f, 3.040897606e-05f, 3.039000789e-05f, 3.037098910e-05f, 3.035191973e-05f, 3.033279981e-05f, 3.031362938e-05f,
+3.029440848e-05f, 3.027513715e-05f, 3.025581542e-05f, 3.023644335e-05f, 3.021702095e-05f, 3.019754828e-05f, 3.017802537e-05f, 3.015845226e-05f, 3.013882899e-05f, 3.011915560e-05f,
+3.009943213e-05f, 3.007965861e-05f, 3.005983510e-05f, 3.003996162e-05f, 3.002003821e-05f, 3.000006492e-05f, 2.998004179e-05f, 2.995996886e-05f, 2.993984615e-05f, 2.991967373e-05f,
+2.989945162e-05f, 2.987917986e-05f, 2.985885850e-05f, 2.983848758e-05f, 2.981806713e-05f, 2.979759720e-05f, 2.977707783e-05f, 2.975650905e-05f, 2.973589092e-05f, 2.971522346e-05f,
+2.969450673e-05f, 2.967374075e-05f, 2.965292558e-05f, 2.963206126e-05f, 2.961114781e-05f, 2.959018530e-05f, 2.956917375e-05f, 2.954811321e-05f, 2.952700372e-05f, 2.950584532e-05f,
+2.948463806e-05f, 2.946338197e-05f, 2.944207710e-05f, 2.942072349e-05f, 2.939932118e-05f, 2.937787022e-05f, 2.935637064e-05f, 2.933482249e-05f, 2.931322581e-05f, 2.929158064e-05f,
+2.926988703e-05f, 2.924814501e-05f, 2.922635464e-05f, 2.920451594e-05f, 2.918262898e-05f, 2.916069378e-05f, 2.913871040e-05f, 2.911667887e-05f, 2.909459923e-05f, 2.907247154e-05f,
+2.905029584e-05f, 2.902807216e-05f, 2.900580055e-05f, 2.898348106e-05f, 2.896111372e-05f, 2.893869859e-05f, 2.891623570e-05f, 2.889372511e-05f, 2.887116684e-05f, 2.884856096e-05f,
+2.882590750e-05f, 2.880320650e-05f, 2.878045801e-05f, 2.875766208e-05f, 2.873481874e-05f, 2.871192805e-05f, 2.868899005e-05f, 2.866600477e-05f, 2.864297228e-05f, 2.861989261e-05f,
+2.859676580e-05f, 2.857359190e-05f, 2.855037097e-05f, 2.852710303e-05f, 2.850378814e-05f, 2.848042634e-05f, 2.845701768e-05f, 2.843356220e-05f, 2.841005995e-05f, 2.838651097e-05f,
+2.836291532e-05f, 2.833927302e-05f, 2.831558414e-05f, 2.829184872e-05f, 2.826806679e-05f, 2.824423842e-05f, 2.822036364e-05f, 2.819644250e-05f, 2.817247505e-05f, 2.814846133e-05f,
+2.812440139e-05f, 2.810029527e-05f, 2.807614303e-05f, 2.805194471e-05f, 2.802770035e-05f, 2.800341001e-05f, 2.797907372e-05f, 2.795469154e-05f, 2.793026351e-05f, 2.790578969e-05f,
+2.788127011e-05f, 2.785670482e-05f, 2.783209388e-05f, 2.780743733e-05f, 2.778273521e-05f, 2.775798758e-05f, 2.773319447e-05f, 2.770835595e-05f, 2.768347205e-05f, 2.765854283e-05f,
+2.763356833e-05f, 2.760854861e-05f, 2.758348369e-05f, 2.755837365e-05f, 2.753321852e-05f, 2.750801835e-05f, 2.748277320e-05f, 2.745748310e-05f, 2.743214811e-05f, 2.740676828e-05f,
+2.738134366e-05f, 2.735587428e-05f, 2.733036021e-05f, 2.730480149e-05f, 2.727919817e-05f, 2.725355030e-05f, 2.722785793e-05f, 2.720212110e-05f, 2.717633988e-05f, 2.715051429e-05f,
+2.712464440e-05f, 2.709873026e-05f, 2.707277191e-05f, 2.704676940e-05f, 2.702072278e-05f, 2.699463211e-05f, 2.696849743e-05f, 2.694231879e-05f, 2.691609624e-05f, 2.688982984e-05f,
+2.686351963e-05f, 2.683716565e-05f, 2.681076797e-05f, 2.678432664e-05f, 2.675784169e-05f, 2.673131319e-05f, 2.670474118e-05f, 2.667812572e-05f, 2.665146685e-05f, 2.662476462e-05f,
+2.659801909e-05f, 2.657123031e-05f, 2.654439832e-05f, 2.651752319e-05f, 2.649060495e-05f, 2.646364366e-05f, 2.643663938e-05f, 2.640959214e-05f, 2.638250202e-05f, 2.635536904e-05f,
+2.632819328e-05f, 2.630097477e-05f, 2.627371357e-05f, 2.624640973e-05f, 2.621906331e-05f, 2.619167435e-05f, 2.616424291e-05f, 2.613676903e-05f, 2.610925278e-05f, 2.608169420e-05f,
+2.605409335e-05f, 2.602645027e-05f, 2.599876502e-05f, 2.597103765e-05f, 2.594326822e-05f, 2.591545677e-05f, 2.588760336e-05f, 2.585970804e-05f, 2.583177087e-05f, 2.580379189e-05f,
+2.577577116e-05f, 2.574770874e-05f, 2.571960466e-05f, 2.569145900e-05f, 2.566327180e-05f, 2.563504311e-05f, 2.560677299e-05f, 2.557846149e-05f, 2.555010867e-05f, 2.552171457e-05f,
+2.549327925e-05f, 2.546480277e-05f, 2.543628518e-05f, 2.540772652e-05f, 2.537912686e-05f, 2.535048625e-05f, 2.532180475e-05f, 2.529308240e-05f, 2.526431926e-05f, 2.523551538e-05f,
+2.520667083e-05f, 2.517778564e-05f, 2.514885988e-05f, 2.511989361e-05f, 2.509088687e-05f, 2.506183972e-05f, 2.503275222e-05f, 2.500362441e-05f, 2.497445636e-05f, 2.494524812e-05f,
+2.491599973e-05f, 2.488671127e-05f, 2.485738278e-05f, 2.482801432e-05f, 2.479860594e-05f, 2.476915770e-05f, 2.473966965e-05f, 2.471014185e-05f, 2.468057435e-05f, 2.465096721e-05f,
+2.462132049e-05f, 2.459163423e-05f, 2.456190850e-05f, 2.453214335e-05f, 2.450233884e-05f, 2.447249502e-05f, 2.444261194e-05f, 2.441268967e-05f, 2.438272826e-05f, 2.435272776e-05f,
+2.432268823e-05f, 2.429260973e-05f, 2.426249232e-05f, 2.423233604e-05f, 2.420214096e-05f, 2.417190713e-05f, 2.414163461e-05f, 2.411132345e-05f, 2.408097371e-05f, 2.405058546e-05f,
+2.402015873e-05f, 2.398969360e-05f, 2.395919012e-05f, 2.392864834e-05f, 2.389806832e-05f, 2.386745012e-05f, 2.383679379e-05f, 2.380609940e-05f, 2.377536699e-05f, 2.374459664e-05f,
+2.371378838e-05f, 2.368294229e-05f, 2.365205841e-05f, 2.362113682e-05f, 2.359017755e-05f, 2.355918067e-05f, 2.352814625e-05f, 2.349707433e-05f, 2.346596497e-05f, 2.343481823e-05f,
+2.340363417e-05f, 2.337241285e-05f, 2.334115433e-05f, 2.330985865e-05f, 2.327852589e-05f, 2.324715610e-05f, 2.321574933e-05f, 2.318430565e-05f, 2.315282511e-05f, 2.312130777e-05f,
+2.308975370e-05f, 2.305816294e-05f, 2.302653556e-05f, 2.299487161e-05f, 2.296317116e-05f, 2.293143426e-05f, 2.289966098e-05f, 2.286785136e-05f, 2.283600548e-05f, 2.280412338e-05f,
+2.277220513e-05f, 2.274025078e-05f, 2.270826040e-05f, 2.267623405e-05f, 2.264417177e-05f, 2.261207364e-05f, 2.257993972e-05f, 2.254777005e-05f, 2.251556471e-05f, 2.248332374e-05f,
+2.245104722e-05f, 2.241873519e-05f, 2.238638772e-05f, 2.235400487e-05f, 2.232158670e-05f, 2.228913327e-05f, 2.225664464e-05f, 2.222412086e-05f, 2.219156200e-05f, 2.215896812e-05f,
+2.212633928e-05f, 2.209367553e-05f, 2.206097694e-05f, 2.202824358e-05f, 2.199547549e-05f, 2.196267273e-05f, 2.192983538e-05f, 2.189696349e-05f, 2.186405712e-05f, 2.183111633e-05f,
+2.179814118e-05f, 2.176513173e-05f, 2.173208805e-05f, 2.169901018e-05f, 2.166589821e-05f, 2.163275218e-05f, 2.159957215e-05f, 2.156635819e-05f, 2.153311036e-05f, 2.149982872e-05f,
+2.146651333e-05f, 2.143316425e-05f, 2.139978154e-05f, 2.136636527e-05f, 2.133291549e-05f, 2.129943227e-05f, 2.126591567e-05f, 2.123236574e-05f, 2.119878256e-05f, 2.116516618e-05f,
+2.113151667e-05f, 2.109783408e-05f, 2.106411848e-05f, 2.103036993e-05f, 2.099658849e-05f, 2.096277422e-05f, 2.092892719e-05f, 2.089504746e-05f, 2.086113508e-05f, 2.082719013e-05f,
+2.079321266e-05f, 2.075920274e-05f, 2.072516042e-05f, 2.069108578e-05f, 2.065697886e-05f, 2.062283975e-05f, 2.058866849e-05f, 2.055446515e-05f, 2.052022979e-05f, 2.048596248e-05f,
+2.045166327e-05f, 2.041733224e-05f, 2.038296944e-05f, 2.034857493e-05f, 2.031414879e-05f, 2.027969106e-05f, 2.024520182e-05f, 2.021068113e-05f, 2.017612905e-05f, 2.014154564e-05f,
+2.010693097e-05f, 2.007228510e-05f, 2.003760810e-05f, 2.000290001e-05f, 1.996816092e-05f, 1.993339089e-05f, 1.989858996e-05f, 1.986375822e-05f, 1.982889572e-05f, 1.979400253e-05f,
+1.975907871e-05f, 1.972412433e-05f, 1.968913944e-05f, 1.965412411e-05f, 1.961907841e-05f, 1.958400240e-05f, 1.954889614e-05f, 1.951375970e-05f, 1.947859314e-05f, 1.944339653e-05f,
+1.940816992e-05f, 1.937291339e-05f, 1.933762700e-05f, 1.930231080e-05f, 1.926696487e-05f, 1.923158928e-05f, 1.919618407e-05f, 1.916074933e-05f, 1.912528511e-05f, 1.908979147e-05f,
+1.905426849e-05f, 1.901871623e-05f, 1.898313474e-05f, 1.894752411e-05f, 1.891188438e-05f, 1.887621563e-05f, 1.884051792e-05f, 1.880479131e-05f, 1.876903587e-05f, 1.873325167e-05f,
+1.869743877e-05f, 1.866159723e-05f, 1.862572712e-05f, 1.858982850e-05f, 1.855390145e-05f, 1.851794602e-05f, 1.848196228e-05f, 1.844595030e-05f, 1.840991013e-05f, 1.837384185e-05f,
+1.833774553e-05f, 1.830162122e-05f, 1.826546899e-05f, 1.822928891e-05f, 1.819308104e-05f, 1.815684545e-05f, 1.812058221e-05f, 1.808429137e-05f, 1.804797301e-05f, 1.801162720e-05f,
+1.797525399e-05f, 1.793885345e-05f, 1.790242565e-05f, 1.786597066e-05f, 1.782948853e-05f, 1.779297935e-05f, 1.775644316e-05f, 1.771988005e-05f, 1.768329007e-05f, 1.764667329e-05f,
+1.761002977e-05f, 1.757335959e-05f, 1.753666281e-05f, 1.749993950e-05f, 1.746318972e-05f, 1.742641354e-05f, 1.738961102e-05f, 1.735278223e-05f, 1.731592724e-05f, 1.727904612e-05f,
+1.724213892e-05f, 1.720520573e-05f, 1.716824659e-05f, 1.713126159e-05f, 1.709425079e-05f, 1.705721425e-05f, 1.702015204e-05f, 1.698306423e-05f, 1.694595089e-05f, 1.690881207e-05f,
+1.687164786e-05f, 1.683445831e-05f, 1.679724349e-05f, 1.676000348e-05f, 1.672273833e-05f, 1.668544811e-05f, 1.664813290e-05f, 1.661079275e-05f, 1.657342774e-05f, 1.653603793e-05f,
+1.649862339e-05f, 1.646118419e-05f, 1.642372040e-05f, 1.638623207e-05f, 1.634871929e-05f, 1.631118211e-05f, 1.627362061e-05f, 1.623603485e-05f, 1.619842490e-05f, 1.616079083e-05f,
+1.612313270e-05f, 1.608545058e-05f, 1.604774455e-05f, 1.601001466e-05f, 1.597226099e-05f, 1.593448361e-05f, 1.589668257e-05f, 1.585885796e-05f, 1.582100983e-05f, 1.578313826e-05f,
+1.574524331e-05f, 1.570732506e-05f, 1.566938356e-05f, 1.563141889e-05f, 1.559343112e-05f, 1.555542031e-05f, 1.551738653e-05f, 1.547932986e-05f, 1.544125035e-05f, 1.540314808e-05f,
+1.536502311e-05f, 1.532687552e-05f, 1.528870537e-05f, 1.525051274e-05f, 1.521229768e-05f, 1.517406026e-05f, 1.513580057e-05f, 1.509751866e-05f, 1.505921460e-05f, 1.502088846e-05f,
+1.498254032e-05f, 1.494417023e-05f, 1.490577827e-05f, 1.486736451e-05f, 1.482892901e-05f, 1.479047185e-05f, 1.475199309e-05f, 1.471349280e-05f, 1.467497105e-05f, 1.463642791e-05f,
+1.459786345e-05f, 1.455927774e-05f, 1.452067084e-05f, 1.448204283e-05f, 1.444339378e-05f, 1.440472375e-05f, 1.436603281e-05f, 1.432732103e-05f, 1.428858848e-05f, 1.424983524e-05f,
+1.421106136e-05f, 1.417226693e-05f, 1.413345200e-05f, 1.409461665e-05f, 1.405576094e-05f, 1.401688495e-05f, 1.397798875e-05f, 1.393907241e-05f, 1.390013598e-05f, 1.386117955e-05f,
+1.382220319e-05f, 1.378320696e-05f, 1.374419093e-05f, 1.370515517e-05f, 1.366609976e-05f, 1.362702475e-05f, 1.358793023e-05f, 1.354881626e-05f, 1.350968291e-05f, 1.347053025e-05f,
+1.343135835e-05f, 1.339216728e-05f, 1.335295711e-05f, 1.331372791e-05f, 1.327447975e-05f, 1.323521270e-05f, 1.319592683e-05f, 1.315662221e-05f, 1.311729891e-05f, 1.307795700e-05f,
+1.303859655e-05f, 1.299921762e-05f, 1.295982030e-05f, 1.292040465e-05f, 1.288097073e-05f, 1.284151863e-05f, 1.280204841e-05f, 1.276256014e-05f, 1.272305389e-05f, 1.268352973e-05f,
+1.264398773e-05f, 1.260442796e-05f, 1.256485050e-05f, 1.252525540e-05f, 1.248564275e-05f, 1.244601262e-05f, 1.240636506e-05f, 1.236670016e-05f, 1.232701799e-05f, 1.228731861e-05f,
+1.224760209e-05f, 1.220786852e-05f, 1.216811795e-05f, 1.212835045e-05f, 1.208856610e-05f, 1.204876498e-05f, 1.200894714e-05f, 1.196911266e-05f, 1.192926161e-05f, 1.188939406e-05f,
+1.184951009e-05f, 1.180960975e-05f, 1.176969313e-05f, 1.172976030e-05f, 1.168981132e-05f, 1.164984626e-05f, 1.160986520e-05f, 1.156986821e-05f, 1.152985536e-05f, 1.148982672e-05f,
+1.144978236e-05f, 1.140972235e-05f, 1.136964676e-05f, 1.132955566e-05f, 1.128944913e-05f, 1.124932724e-05f, 1.120919005e-05f, 1.116903764e-05f, 1.112887007e-05f, 1.108868743e-05f,
+1.104848978e-05f, 1.100827719e-05f, 1.096804973e-05f, 1.092780748e-05f, 1.088755050e-05f, 1.084727887e-05f, 1.080699266e-05f, 1.076669193e-05f, 1.072637677e-05f, 1.068604724e-05f,
+1.064570341e-05f, 1.060534536e-05f, 1.056497315e-05f, 1.052458686e-05f, 1.048418656e-05f, 1.044377232e-05f, 1.040334421e-05f, 1.036290230e-05f, 1.032244667e-05f, 1.028197738e-05f,
+1.024149451e-05f, 1.020099813e-05f, 1.016048831e-05f, 1.011996512e-05f, 1.007942863e-05f, 1.003887892e-05f, 9.998316056e-06f, 9.957740110e-06f, 9.917151153e-06f, 9.876549257e-06f,
+9.835934494e-06f, 9.795306936e-06f, 9.754666654e-06f, 9.714013720e-06f, 9.673348205e-06f, 9.632670182e-06f, 9.591979722e-06f, 9.551276896e-06f, 9.510561777e-06f, 9.469834437e-06f,
+9.429094946e-06f, 9.388343377e-06f, 9.347579802e-06f, 9.306804293e-06f, 9.266016920e-06f, 9.225217757e-06f, 9.184406875e-06f, 9.143584346e-06f, 9.102750242e-06f, 9.061904634e-06f,
+9.021047595e-06f, 8.980179196e-06f, 8.939299510e-06f, 8.898408608e-06f, 8.857506562e-06f, 8.816593445e-06f, 8.775669328e-06f, 8.734734284e-06f, 8.693788383e-06f, 8.652831699e-06f,
+8.611864304e-06f, 8.570886268e-06f, 8.529897665e-06f, 8.488898567e-06f, 8.447889045e-06f, 8.406869172e-06f, 8.365839019e-06f, 8.324798659e-06f, 8.283748165e-06f, 8.242687607e-06f,
+8.201617058e-06f, 8.160536591e-06f, 8.119446277e-06f, 8.078346189e-06f, 8.037236399e-06f, 7.996116978e-06f, 7.954988000e-06f, 7.913849536e-06f, 7.872701659e-06f, 7.831544441e-06f,
+7.790377953e-06f, 7.749202269e-06f, 7.708017460e-06f, 7.666823599e-06f, 7.625620758e-06f, 7.584409010e-06f, 7.543188426e-06f, 7.501959078e-06f, 7.460721040e-06f, 7.419474383e-06f,
+7.378219180e-06f, 7.336955503e-06f, 7.295683424e-06f, 7.254403016e-06f, 7.213114351e-06f, 7.171817501e-06f, 7.130512539e-06f, 7.089199537e-06f, 7.047878567e-06f, 7.006549703e-06f,
+6.965213015e-06f, 6.923868576e-06f, 6.882516460e-06f, 6.841156738e-06f, 6.799789482e-06f, 6.758414766e-06f, 6.717032661e-06f, 6.675643240e-06f, 6.634246575e-06f, 6.592842739e-06f,
+6.551431804e-06f, 6.510013843e-06f, 6.468588928e-06f, 6.427157131e-06f, 6.385718525e-06f, 6.344273182e-06f, 6.302821175e-06f, 6.261362577e-06f, 6.219897459e-06f, 6.178425894e-06f,
+6.136947955e-06f, 6.095463714e-06f, 6.053973244e-06f, 6.012476616e-06f, 5.970973905e-06f, 5.929465181e-06f, 5.887950518e-06f, 5.846429987e-06f, 5.804903663e-06f, 5.763371616e-06f,
+5.721833920e-06f, 5.680290646e-06f, 5.638741868e-06f, 5.597187659e-06f, 5.555628089e-06f, 5.514063233e-06f, 5.472493162e-06f, 5.430917949e-06f, 5.389337667e-06f, 5.347752388e-06f,
+5.306162184e-06f, 5.264567129e-06f, 5.222967294e-06f, 5.181362752e-06f, 5.139753575e-06f, 5.098139837e-06f, 5.056521610e-06f, 5.014898965e-06f, 4.973271977e-06f, 4.931640716e-06f,
+4.890005256e-06f, 4.848365670e-06f, 4.806722029e-06f, 4.765074407e-06f, 4.723422875e-06f, 4.681767506e-06f, 4.640108374e-06f, 4.598445550e-06f, 4.556779106e-06f, 4.515109116e-06f,
+4.473435652e-06f, 4.431758786e-06f, 4.390078591e-06f, 4.348395140e-06f, 4.306708504e-06f, 4.265018757e-06f, 4.223325970e-06f, 4.181630217e-06f, 4.139931570e-06f, 4.098230101e-06f,
+4.056525883e-06f, 4.014818989e-06f, 3.973109490e-06f, 3.931397460e-06f, 3.889682970e-06f, 3.847966093e-06f, 3.806246903e-06f, 3.764525470e-06f, 3.722801868e-06f, 3.681076169e-06f,
+3.639348446e-06f, 3.597618771e-06f, 3.555887216e-06f, 3.514153854e-06f, 3.472418758e-06f, 3.430681999e-06f, 3.388943650e-06f, 3.347203784e-06f, 3.305462473e-06f, 3.263719790e-06f,
+3.221975806e-06f, 3.180230595e-06f, 3.138484228e-06f, 3.096736779e-06f, 3.054988319e-06f, 3.013238920e-06f, 2.971488656e-06f, 2.929737599e-06f, 2.887985820e-06f, 2.846233393e-06f,
+2.804480389e-06f, 2.762726882e-06f, 2.720972942e-06f, 2.679218644e-06f, 2.637464058e-06f, 2.595709258e-06f, 2.553954315e-06f, 2.512199302e-06f, 2.470444291e-06f, 2.428689355e-06f,
+2.386934566e-06f, 2.345179995e-06f, 2.303425716e-06f, 2.261671801e-06f, 2.219918321e-06f, 2.178165349e-06f, 2.136412958e-06f, 2.094661219e-06f, 2.052910205e-06f, 2.011159987e-06f,
+1.969410639e-06f, 1.927662232e-06f, 1.885914839e-06f, 1.844168531e-06f, 1.802423382e-06f, 1.760679462e-06f, 1.718936844e-06f, 1.677195600e-06f, 1.635455803e-06f, 1.593717524e-06f,
+1.551980836e-06f, 1.510245810e-06f, 1.468512519e-06f, 1.426781035e-06f, 1.385051430e-06f, 1.343323776e-06f, 1.301598144e-06f, 1.259874608e-06f, 1.218153238e-06f, 1.176434108e-06f,
+1.134717289e-06f, 1.093002852e-06f, 1.051290870e-06f, 1.009581416e-06f, 9.678745599e-07f, 9.261703748e-07f, 8.844689324e-07f, 8.427703046e-07f, 8.010745632e-07f, 7.593817803e-07f,
+7.176920276e-07f, 6.760053770e-07f, 6.343219003e-07f, 5.926416694e-07f, 5.509647562e-07f, 5.092912323e-07f, 4.676211696e-07f, 4.259546400e-07f, 3.842917150e-07f, 3.426324666e-07f,
+3.009769664e-07f, 2.593252862e-07f, 2.176774977e-07f, 1.760336725e-07f, 1.343938824e-07f, 9.275819901e-08f, 5.112669399e-08f, 9.499438985e-09f, -3.212349438e-08f, -7.374203450e-08f,
+-1.153561098e-07f, -1.569656487e-07f, -1.985705795e-07f, -2.401708309e-07f, -2.817663312e-07f, -3.233570089e-07f, -3.649427925e-07f, -4.065236106e-07f, -4.480993917e-07f, -4.896700642e-07f,
+-5.312355569e-07f, -5.727957982e-07f, -6.143507168e-07f, -6.559002412e-07f, -6.974443001e-07f, -7.389828222e-07f, -7.805157361e-07f, -8.220429705e-07f, -8.635644541e-07f, -9.050801156e-07f,
+-9.465898838e-07f, -9.880936873e-07f, -1.029591455e-06f, -1.071083116e-06f, -1.112568598e-06f, -1.154047831e-06f, -1.195520743e-06f, -1.236987264e-06f, -1.278447322e-06f, -1.319900846e-06f,
+-1.361347765e-06f, -1.402788007e-06f, -1.444221503e-06f, -1.485648180e-06f, -1.527067969e-06f, -1.568480797e-06f, -1.609886594e-06f, -1.651285289e-06f, -1.692676810e-06f, -1.734061088e-06f,
+-1.775438051e-06f, -1.816807629e-06f, -1.858169750e-06f, -1.899524343e-06f, -1.940871338e-06f, -1.982210665e-06f, -2.023542251e-06f, -2.064866027e-06f, -2.106181922e-06f, -2.147489865e-06f,
+-2.188789785e-06f, -2.230081612e-06f, -2.271365276e-06f, -2.312640704e-06f, -2.353907828e-06f, -2.395166575e-06f, -2.436416877e-06f, -2.477658661e-06f, -2.518891859e-06f, -2.560116398e-06f,
+-2.601332210e-06f, -2.642539222e-06f, -2.683737366e-06f, -2.724926570e-06f, -2.766106764e-06f, -2.807277877e-06f, -2.848439841e-06f, -2.889592583e-06f, -2.930736034e-06f, -2.971870123e-06f,
+-3.012994781e-06f, -3.054109937e-06f, -3.095215521e-06f, -3.136311463e-06f, -3.177397692e-06f, -3.218474139e-06f, -3.259540733e-06f, -3.300597405e-06f, -3.341644084e-06f, -3.382680700e-06f,
+-3.423707183e-06f, -3.464723464e-06f, -3.505729472e-06f, -3.546725137e-06f, -3.587710390e-06f, -3.628685161e-06f, -3.669649379e-06f, -3.710602976e-06f, -3.751545881e-06f, -3.792478024e-06f,
+-3.833399336e-06f, -3.874309746e-06f, -3.915209187e-06f, -3.956097586e-06f, -3.996974876e-06f, -4.037840986e-06f, -4.078695847e-06f, -4.119539390e-06f, -4.160371544e-06f, -4.201192240e-06f,
+-4.242001409e-06f, -4.282798981e-06f, -4.323584887e-06f, -4.364359058e-06f, -4.405121424e-06f, -4.445871915e-06f, -4.486610463e-06f, -4.527336998e-06f, -4.568051451e-06f, -4.608753753e-06f,
+-4.649443834e-06f, -4.690121626e-06f, -4.730787059e-06f, -4.771440064e-06f, -4.812080572e-06f, -4.852708513e-06f, -4.893323820e-06f, -4.933926423e-06f, -4.974516253e-06f, -5.015093240e-06f,
+-5.055657317e-06f, -5.096208414e-06f, -5.136746462e-06f, -5.177271393e-06f, -5.217783138e-06f, -5.258281628e-06f, -5.298766794e-06f, -5.339238567e-06f, -5.379696879e-06f, -5.420141662e-06f,
+-5.460572847e-06f, -5.500990364e-06f, -5.541394146e-06f, -5.581784124e-06f, -5.622160229e-06f, -5.662522394e-06f, -5.702870549e-06f, -5.743204627e-06f, -5.783524558e-06f, -5.823830275e-06f,
+-5.864121709e-06f, -5.904398793e-06f, -5.944661457e-06f, -5.984909633e-06f, -6.025143254e-06f, -6.065362252e-06f, -6.105566557e-06f, -6.145756103e-06f, -6.185930820e-06f, -6.226090642e-06f,
+-6.266235500e-06f, -6.306365326e-06f, -6.346480052e-06f, -6.386579611e-06f, -6.426663934e-06f, -6.466732954e-06f, -6.506786602e-06f, -6.546824812e-06f, -6.586847516e-06f, -6.626854645e-06f,
+-6.666846133e-06f, -6.706821911e-06f, -6.746781912e-06f, -6.786726069e-06f, -6.826654313e-06f, -6.866566578e-06f, -6.906462797e-06f, -6.946342901e-06f, -6.986206823e-06f, -7.026054496e-06f,
+-7.065885853e-06f, -7.105700827e-06f, -7.145499349e-06f, -7.185281354e-06f, -7.225046774e-06f, -7.264795541e-06f, -7.304527590e-06f, -7.344242851e-06f, -7.383941260e-06f, -7.423622748e-06f,
+-7.463287249e-06f, -7.502934696e-06f, -7.542565022e-06f, -7.582178160e-06f, -7.621774044e-06f, -7.661352606e-06f, -7.700913780e-06f, -7.740457499e-06f, -7.779983697e-06f, -7.819492308e-06f,
+-7.858983263e-06f, -7.898456497e-06f, -7.937911944e-06f, -7.977349537e-06f, -8.016769210e-06f, -8.056170895e-06f, -8.095554528e-06f, -8.134920041e-06f, -8.174267369e-06f, -8.213596444e-06f,
+-8.252907201e-06f, -8.292199575e-06f, -8.331473498e-06f, -8.370728904e-06f, -8.409965728e-06f, -8.449183904e-06f, -8.488383365e-06f, -8.527564046e-06f, -8.566725880e-06f, -8.605868803e-06f,
+-8.644992748e-06f, -8.684097649e-06f, -8.723183442e-06f, -8.762250059e-06f, -8.801297436e-06f, -8.840325506e-06f, -8.879334205e-06f, -8.918323466e-06f, -8.957293225e-06f, -8.996243416e-06f,
+-9.035173974e-06f, -9.074084832e-06f, -9.112975926e-06f, -9.151847191e-06f, -9.190698561e-06f, -9.229529972e-06f, -9.268341357e-06f, -9.307132652e-06f, -9.345903792e-06f, -9.384654712e-06f,
+-9.423385347e-06f, -9.462095632e-06f, -9.500785502e-06f, -9.539454892e-06f, -9.578103737e-06f, -9.616731973e-06f, -9.655339535e-06f, -9.693926357e-06f, -9.732492377e-06f, -9.771037529e-06f,
+-9.809561747e-06f, -9.848064969e-06f, -9.886547129e-06f, -9.925008164e-06f, -9.963448008e-06f, -1.000186660e-05f, -1.004026387e-05f, -1.007863975e-05f, -1.011699419e-05f, -1.015532712e-05f,
+-1.019363847e-05f, -1.023192819e-05f, -1.027019619e-05f, -1.030844243e-05f, -1.034666684e-05f, -1.038486936e-05f, -1.042304991e-05f, -1.046120844e-05f, -1.049934488e-05f, -1.053745918e-05f,
+-1.057555125e-05f, -1.061362105e-05f, -1.065166851e-05f, -1.068969357e-05f, -1.072769615e-05f, -1.076567620e-05f, -1.080363366e-05f, -1.084156846e-05f, -1.087948053e-05f, -1.091736982e-05f,
+-1.095523626e-05f, -1.099307979e-05f, -1.103090035e-05f, -1.106869786e-05f, -1.110647228e-05f, -1.114422353e-05f, -1.118195155e-05f, -1.121965629e-05f, -1.125733767e-05f, -1.129499563e-05f,
+-1.133263012e-05f, -1.137024107e-05f, -1.140782841e-05f, -1.144539208e-05f, -1.148293203e-05f, -1.152044819e-05f, -1.155794049e-05f, -1.159540888e-05f, -1.163285328e-05f, -1.167027365e-05f,
+-1.170766991e-05f, -1.174504201e-05f, -1.178238988e-05f, -1.181971346e-05f, -1.185701269e-05f, -1.189428751e-05f, -1.193153785e-05f, -1.196876365e-05f, -1.200596485e-05f, -1.204314139e-05f,
+-1.208029321e-05f, -1.211742024e-05f, -1.215452242e-05f, -1.219159970e-05f, -1.222865201e-05f, -1.226567928e-05f, -1.230268146e-05f, -1.233965849e-05f, -1.237661030e-05f, -1.241353684e-05f,
+-1.245043804e-05f, -1.248731383e-05f, -1.252416417e-05f, -1.256098898e-05f, -1.259778821e-05f, -1.263456180e-05f, -1.267130968e-05f, -1.270803180e-05f, -1.274472809e-05f, -1.278139849e-05f,
+-1.281804294e-05f, -1.285466138e-05f, -1.289125376e-05f, -1.292782000e-05f, -1.296436005e-05f, -1.300087385e-05f, -1.303736134e-05f, -1.307382246e-05f, -1.311025714e-05f, -1.314666533e-05f,
+-1.318304696e-05f, -1.321940199e-05f, -1.325573033e-05f, -1.329203195e-05f, -1.332830677e-05f, -1.336455473e-05f, -1.340077579e-05f, -1.343696986e-05f, -1.347313691e-05f, -1.350927686e-05f,
+-1.354538966e-05f, -1.358147524e-05f, -1.361753355e-05f, -1.365356453e-05f, -1.368956812e-05f, -1.372554426e-05f, -1.376149289e-05f, -1.379741394e-05f, -1.383330737e-05f, -1.386917311e-05f,
+-1.390501110e-05f, -1.394082129e-05f, -1.397660360e-05f, -1.401235800e-05f, -1.404808441e-05f, -1.408378277e-05f, -1.411945304e-05f, -1.415509514e-05f, -1.419070903e-05f, -1.422629464e-05f,
+-1.426185191e-05f, -1.429738078e-05f, -1.433288120e-05f, -1.436835311e-05f, -1.440379645e-05f, -1.443921116e-05f, -1.447459718e-05f, -1.450995446e-05f, -1.454528293e-05f, -1.458058254e-05f,
+-1.461585323e-05f, -1.465109494e-05f, -1.468630761e-05f, -1.472149120e-05f, -1.475664562e-05f, -1.479177084e-05f, -1.482686680e-05f, -1.486193342e-05f, -1.489697067e-05f, -1.493197847e-05f,
+-1.496695677e-05f, -1.500190552e-05f, -1.503682466e-05f, -1.507171413e-05f, -1.510657387e-05f, -1.514140382e-05f, -1.517620393e-05f, -1.521097414e-05f, -1.524571440e-05f, -1.528042464e-05f,
+-1.531510482e-05f, -1.534975486e-05f, -1.538437472e-05f, -1.541896435e-05f, -1.545352367e-05f, -1.548805264e-05f, -1.552255120e-05f, -1.555701929e-05f, -1.559145686e-05f, -1.562586385e-05f,
+-1.566024020e-05f, -1.569458586e-05f, -1.572890077e-05f, -1.576318487e-05f, -1.579743811e-05f, -1.583166044e-05f, -1.586585179e-05f, -1.590001211e-05f, -1.593414135e-05f, -1.596823944e-05f,
+-1.600230634e-05f, -1.603634199e-05f, -1.607034632e-05f, -1.610431930e-05f, -1.613826085e-05f, -1.617217093e-05f, -1.620604948e-05f, -1.623989644e-05f, -1.627371176e-05f, -1.630749539e-05f,
+-1.634124726e-05f, -1.637496733e-05f, -1.640865553e-05f, -1.644231182e-05f, -1.647593614e-05f, -1.650952843e-05f, -1.654308864e-05f, -1.657661672e-05f, -1.661011260e-05f, -1.664357624e-05f,
+-1.667700757e-05f, -1.671040656e-05f, -1.674377313e-05f, -1.677710724e-05f, -1.681040884e-05f, -1.684367786e-05f, -1.687691425e-05f, -1.691011797e-05f, -1.694328895e-05f, -1.697642715e-05f,
+-1.700953250e-05f, -1.704260495e-05f, -1.707564446e-05f, -1.710865096e-05f, -1.714162441e-05f, -1.717456474e-05f, -1.720747191e-05f, -1.724034586e-05f, -1.727318654e-05f, -1.730599390e-05f,
+-1.733876788e-05f, -1.737150842e-05f, -1.740421548e-05f, -1.743688901e-05f, -1.746952894e-05f, -1.750213523e-05f, -1.753470782e-05f, -1.756724667e-05f, -1.759975171e-05f, -1.763222289e-05f,
+-1.766466017e-05f, -1.769706349e-05f, -1.772943280e-05f, -1.776176804e-05f, -1.779406916e-05f, -1.782633611e-05f, -1.785856884e-05f, -1.789076729e-05f, -1.792293142e-05f, -1.795506117e-05f,
+-1.798715649e-05f, -1.801921732e-05f, -1.805124362e-05f, -1.808323534e-05f, -1.811519241e-05f, -1.814711480e-05f, -1.817900244e-05f, -1.821085529e-05f, -1.824267330e-05f, -1.827445640e-05f,
+-1.830620457e-05f, -1.833791773e-05f, -1.836959584e-05f, -1.840123885e-05f, -1.843284671e-05f, -1.846441936e-05f, -1.849595676e-05f, -1.852745886e-05f, -1.855892560e-05f, -1.859035693e-05f,
+-1.862175280e-05f, -1.865311317e-05f, -1.868443797e-05f, -1.871572717e-05f, -1.874698071e-05f, -1.877819853e-05f, -1.880938060e-05f, -1.884052685e-05f, -1.887163725e-05f, -1.890271173e-05f,
+-1.893375025e-05f, -1.896475276e-05f, -1.899571921e-05f, -1.902664955e-05f, -1.905754373e-05f, -1.908840169e-05f, -1.911922340e-05f, -1.915000880e-05f, -1.918075783e-05f, -1.921147046e-05f,
+-1.924214664e-05f, -1.927278630e-05f, -1.930338941e-05f, -1.933395591e-05f, -1.936448576e-05f, -1.939497890e-05f, -1.942543529e-05f, -1.945585488e-05f, -1.948623762e-05f, -1.951658346e-05f,
+-1.954689235e-05f, -1.957716425e-05f, -1.960739910e-05f, -1.963759686e-05f, -1.966775748e-05f, -1.969788090e-05f, -1.972796709e-05f, -1.975801599e-05f, -1.978802756e-05f, -1.981800174e-05f,
+-1.984793849e-05f, -1.987783777e-05f, -1.990769951e-05f, -1.993752369e-05f, -1.996731024e-05f, -1.999705912e-05f, -2.002677028e-05f, -2.005644368e-05f, -2.008607927e-05f, -2.011567700e-05f,
+-2.014523682e-05f, -2.017475869e-05f, -2.020424255e-05f, -2.023368837e-05f, -2.026309609e-05f, -2.029246568e-05f, -2.032179707e-05f, -2.035109022e-05f, -2.038034510e-05f, -2.040956164e-05f,
+-2.043873981e-05f, -2.046787956e-05f, -2.049698084e-05f, -2.052604360e-05f, -2.055506780e-05f, -2.058405340e-05f, -2.061300034e-05f, -2.064190858e-05f, -2.067077808e-05f, -2.069960878e-05f,
+-2.072840065e-05f, -2.075715363e-05f, -2.078586769e-05f, -2.081454277e-05f, -2.084317883e-05f, -2.087177583e-05f, -2.090033371e-05f, -2.092885244e-05f, -2.095733196e-05f, -2.098577224e-05f,
+-2.101417323e-05f, -2.104253488e-05f, -2.107085715e-05f, -2.109913999e-05f, -2.112738336e-05f, -2.115558721e-05f, -2.118375150e-05f, -2.121187619e-05f, -2.123996122e-05f, -2.126800656e-05f,
+-2.129601216e-05f, -2.132397798e-05f, -2.135190397e-05f, -2.137979009e-05f, -2.140763629e-05f, -2.143544253e-05f, -2.146320877e-05f, -2.149093495e-05f, -2.151862105e-05f, -2.154626701e-05f,
+-2.157387280e-05f, -2.160143835e-05f, -2.162896365e-05f, -2.165644863e-05f, -2.168389326e-05f, -2.171129749e-05f, -2.173866129e-05f, -2.176598460e-05f, -2.179326739e-05f, -2.182050960e-05f,
+-2.184771121e-05f, -2.187487216e-05f, -2.190199241e-05f, -2.192907192e-05f, -2.195611065e-05f, -2.198310856e-05f, -2.201006560e-05f, -2.203698172e-05f, -2.206385690e-05f, -2.209069108e-05f,
+-2.211748422e-05f, -2.214423628e-05f, -2.217094723e-05f, -2.219761701e-05f, -2.222424558e-05f, -2.225083291e-05f, -2.227737895e-05f, -2.230388367e-05f, -2.233034701e-05f, -2.235676893e-05f,
+-2.238314940e-05f, -2.240948838e-05f, -2.243578582e-05f, -2.246204168e-05f, -2.248825593e-05f, -2.251442851e-05f, -2.254055939e-05f, -2.256664853e-05f, -2.259269589e-05f, -2.261870142e-05f,
+-2.264466509e-05f, -2.267058685e-05f, -2.269646667e-05f, -2.272230450e-05f, -2.274810031e-05f, -2.277385405e-05f, -2.279956568e-05f, -2.282523517e-05f, -2.285086247e-05f, -2.287644755e-05f,
+-2.290199036e-05f, -2.292749086e-05f, -2.295294901e-05f, -2.297836478e-05f, -2.300373813e-05f, -2.302906901e-05f, -2.305435739e-05f, -2.307960322e-05f, -2.310480647e-05f, -2.312996710e-05f,
+-2.315508507e-05f, -2.318016033e-05f, -2.320519286e-05f, -2.323018261e-05f, -2.325512955e-05f, -2.328003363e-05f, -2.330489482e-05f, -2.332971307e-05f, -2.335448835e-05f, -2.337922062e-05f,
+-2.340390985e-05f, -2.342855599e-05f, -2.345315901e-05f, -2.347771886e-05f, -2.350223551e-05f, -2.352670893e-05f, -2.355113907e-05f, -2.357552590e-05f, -2.359986937e-05f, -2.362416946e-05f,
+-2.364842612e-05f, -2.367263932e-05f, -2.369680901e-05f, -2.372093517e-05f, -2.374501775e-05f, -2.376905672e-05f, -2.379305204e-05f, -2.381700367e-05f, -2.384091157e-05f, -2.386477572e-05f,
+-2.388859607e-05f, -2.391237259e-05f, -2.393610523e-05f, -2.395979397e-05f, -2.398343877e-05f, -2.400703958e-05f, -2.403059638e-05f, -2.405410913e-05f, -2.407757779e-05f, -2.410100232e-05f,
+-2.412438270e-05f, -2.414771887e-05f, -2.417101082e-05f, -2.419425850e-05f, -2.421746187e-05f, -2.424062091e-05f, -2.426373557e-05f, -2.428680583e-05f, -2.430983164e-05f, -2.433281296e-05f,
+-2.435574978e-05f, -2.437864204e-05f, -2.440148972e-05f, -2.442429278e-05f, -2.444705118e-05f, -2.446976489e-05f, -2.449243388e-05f, -2.451505811e-05f, -2.453763755e-05f, -2.456017216e-05f,
+-2.458266191e-05f, -2.460510676e-05f, -2.462750668e-05f, -2.464986164e-05f, -2.467217160e-05f, -2.469443652e-05f, -2.471665638e-05f, -2.473883114e-05f, -2.476096077e-05f, -2.478304523e-05f,
+-2.480508449e-05f, -2.482707851e-05f, -2.484902727e-05f, -2.487093073e-05f, -2.489278885e-05f, -2.491460160e-05f, -2.493636896e-05f, -2.495809088e-05f, -2.497976734e-05f, -2.500139830e-05f,
+-2.502298373e-05f, -2.504452359e-05f, -2.506601786e-05f, -2.508746650e-05f, -2.510886947e-05f, -2.513022676e-05f, -2.515153832e-05f, -2.517280412e-05f, -2.519402413e-05f, -2.521519832e-05f,
+-2.523632665e-05f, -2.525740911e-05f, -2.527844564e-05f, -2.529943623e-05f, -2.532038083e-05f, -2.534127942e-05f, -2.536213198e-05f, -2.538293845e-05f, -2.540369882e-05f, -2.542441306e-05f,
+-2.544508113e-05f, -2.546570300e-05f, -2.548627864e-05f, -2.550680801e-05f, -2.552729110e-05f, -2.554772787e-05f, -2.556811829e-05f, -2.558846232e-05f, -2.560875994e-05f, -2.562901112e-05f,
+-2.564921582e-05f, -2.566937402e-05f, -2.568948569e-05f, -2.570955080e-05f, -2.572956931e-05f, -2.574954120e-05f, -2.576946643e-05f, -2.578934499e-05f, -2.580917683e-05f, -2.582896193e-05f,
+-2.584870026e-05f, -2.586839179e-05f, -2.588803649e-05f, -2.590763433e-05f, -2.592718529e-05f, -2.594668933e-05f, -2.596614643e-05f, -2.598555655e-05f, -2.600491967e-05f, -2.602423576e-05f,
+-2.604350478e-05f, -2.606272673e-05f, -2.608190155e-05f, -2.610102923e-05f, -2.612010974e-05f, -2.613914305e-05f, -2.615812912e-05f, -2.617706795e-05f, -2.619595948e-05f, -2.621480371e-05f,
+-2.623360059e-05f, -2.625235011e-05f, -2.627105223e-05f, -2.628970693e-05f, -2.630831418e-05f, -2.632687396e-05f, -2.634538623e-05f, -2.636385096e-05f, -2.638226814e-05f, -2.640063774e-05f,
+-2.641895972e-05f, -2.643723407e-05f, -2.645546075e-05f, -2.647363973e-05f, -2.649177100e-05f, -2.650985453e-05f, -2.652789028e-05f, -2.654587824e-05f, -2.656381837e-05f, -2.658171065e-05f,
+-2.659955506e-05f, -2.661735157e-05f, -2.663510015e-05f, -2.665280077e-05f, -2.667045342e-05f, -2.668805807e-05f, -2.670561468e-05f, -2.672312324e-05f, -2.674058372e-05f, -2.675799610e-05f,
+-2.677536035e-05f, -2.679267644e-05f, -2.680994435e-05f, -2.682716405e-05f, -2.684433553e-05f, -2.686145875e-05f, -2.687853369e-05f, -2.689556033e-05f, -2.691253864e-05f, -2.692946859e-05f,
+-2.694635018e-05f, -2.696318336e-05f, -2.697996811e-05f, -2.699670442e-05f, -2.701339225e-05f, -2.703003159e-05f, -2.704662241e-05f, -2.706316468e-05f, -2.707965839e-05f, -2.709610351e-05f,
+-2.711250001e-05f, -2.712884787e-05f, -2.714514708e-05f, -2.716139760e-05f, -2.717759941e-05f, -2.719375249e-05f, -2.720985682e-05f, -2.722591238e-05f, -2.724191913e-05f, -2.725787707e-05f,
+-2.727378616e-05f, -2.728964639e-05f, -2.730545773e-05f, -2.732122016e-05f, -2.733693366e-05f, -2.735259820e-05f, -2.736821377e-05f, -2.738378033e-05f, -2.739929788e-05f, -2.741476639e-05f,
+-2.743018583e-05f, -2.744555619e-05f, -2.746087744e-05f, -2.747614956e-05f, -2.749137253e-05f, -2.750654634e-05f, -2.752167095e-05f, -2.753674635e-05f, -2.755177252e-05f, -2.756674943e-05f,
+-2.758167706e-05f, -2.759655540e-05f, -2.761138443e-05f, -2.762616412e-05f, -2.764089445e-05f, -2.765557540e-05f, -2.767020696e-05f, -2.768478909e-05f, -2.769932179e-05f, -2.771380503e-05f,
+-2.772823880e-05f, -2.774262306e-05f, -2.775695781e-05f, -2.777124302e-05f, -2.778547868e-05f, -2.779966476e-05f, -2.781380124e-05f, -2.782788811e-05f, -2.784192534e-05f, -2.785591292e-05f,
+-2.786985083e-05f, -2.788373905e-05f, -2.789757756e-05f, -2.791136634e-05f, -2.792510538e-05f, -2.793879465e-05f, -2.795243413e-05f, -2.796602381e-05f, -2.797956367e-05f, -2.799305369e-05f,
+-2.800649386e-05f, -2.801988415e-05f, -2.803322455e-05f, -2.804651503e-05f, -2.805975559e-05f, -2.807294620e-05f, -2.808608684e-05f, -2.809917751e-05f, -2.811221817e-05f, -2.812520882e-05f,
+-2.813814944e-05f, -2.815104000e-05f, -2.816388050e-05f, -2.817667091e-05f, -2.818941122e-05f, -2.820210141e-05f, -2.821474147e-05f, -2.822733138e-05f, -2.823987111e-05f, -2.825236066e-05f,
+-2.826480002e-05f, -2.827718915e-05f, -2.828952805e-05f, -2.830181670e-05f, -2.831405508e-05f, -2.832624319e-05f, -2.833838099e-05f, -2.835046848e-05f, -2.836250565e-05f, -2.837449247e-05f,
+-2.838642892e-05f, -2.839831501e-05f, -2.841015070e-05f, -2.842193599e-05f, -2.843367086e-05f, -2.844535529e-05f, -2.845698927e-05f, -2.846857278e-05f, -2.848010582e-05f, -2.849158836e-05f,
+-2.850302038e-05f, -2.851440189e-05f, -2.852573286e-05f, -2.853701327e-05f, -2.854824312e-05f, -2.855942238e-05f, -2.857055105e-05f, -2.858162911e-05f, -2.859265655e-05f, -2.860363335e-05f,
+-2.861455950e-05f, -2.862543499e-05f, -2.863625980e-05f, -2.864703391e-05f, -2.865775733e-05f, -2.866843002e-05f, -2.867905199e-05f, -2.868962321e-05f, -2.870014367e-05f, -2.871061336e-05f,
+-2.872103228e-05f, -2.873140039e-05f, -2.874171770e-05f, -2.875198419e-05f, -2.876219984e-05f, -2.877236465e-05f, -2.878247860e-05f, -2.879254169e-05f, -2.880255389e-05f, -2.881251519e-05f,
+-2.882242559e-05f, -2.883228508e-05f, -2.884209363e-05f, -2.885185125e-05f, -2.886155791e-05f, -2.887121361e-05f, -2.888081833e-05f, -2.889037206e-05f, -2.889987480e-05f, -2.890932653e-05f,
+-2.891872724e-05f, -2.892807692e-05f, -2.893737556e-05f, -2.894662314e-05f, -2.895581967e-05f, -2.896496511e-05f, -2.897405948e-05f, -2.898310275e-05f, -2.899209492e-05f, -2.900103597e-05f,
+-2.900992589e-05f, -2.901876468e-05f, -2.902755233e-05f, -2.903628882e-05f, -2.904497415e-05f, -2.905360830e-05f, -2.906219127e-05f, -2.907072305e-05f, -2.907920362e-05f, -2.908763298e-05f,
+-2.909601112e-05f, -2.910433803e-05f, -2.911261370e-05f, -2.912083812e-05f, -2.912901129e-05f, -2.913713319e-05f, -2.914520381e-05f, -2.915322315e-05f, -2.916119120e-05f, -2.916910795e-05f,
+-2.917697340e-05f, -2.918478752e-05f, -2.919255032e-05f, -2.920026179e-05f, -2.920792191e-05f, -2.921553069e-05f, -2.922308811e-05f, -2.923059417e-05f, -2.923804885e-05f, -2.924545216e-05f,
+-2.925280408e-05f, -2.926010461e-05f, -2.926735373e-05f, -2.927455145e-05f, -2.928169775e-05f, -2.928879262e-05f, -2.929583607e-05f, -2.930282808e-05f, -2.930976865e-05f, -2.931665777e-05f,
+-2.932349544e-05f, -2.933028164e-05f, -2.933701637e-05f, -2.934369963e-05f, -2.935033141e-05f, -2.935691170e-05f, -2.936344049e-05f, -2.936991779e-05f, -2.937634358e-05f, -2.938271787e-05f,
+-2.938904063e-05f, -2.939531188e-05f, -2.940153159e-05f, -2.940769978e-05f, -2.941381642e-05f, -2.941988152e-05f, -2.942589508e-05f, -2.943185708e-05f, -2.943776752e-05f, -2.944362640e-05f,
+-2.944943372e-05f, -2.945518946e-05f, -2.946089362e-05f, -2.946654620e-05f, -2.947214720e-05f, -2.947769661e-05f, -2.948319442e-05f, -2.948864064e-05f, -2.949403525e-05f, -2.949937826e-05f,
+-2.950466965e-05f, -2.950990944e-05f, -2.951509760e-05f, -2.952023415e-05f, -2.952531907e-05f, -2.953035236e-05f, -2.953533402e-05f, -2.954026405e-05f, -2.954514244e-05f, -2.954996919e-05f,
+-2.955474429e-05f, -2.955946775e-05f, -2.956413957e-05f, -2.956875973e-05f, -2.957332823e-05f, -2.957784508e-05f, -2.958231027e-05f, -2.958672380e-05f, -2.959108566e-05f, -2.959539586e-05f,
+-2.959965439e-05f, -2.960386126e-05f, -2.960801645e-05f, -2.961211996e-05f, -2.961617181e-05f, -2.962017197e-05f, -2.962412046e-05f, -2.962801727e-05f, -2.963186239e-05f, -2.963565584e-05f,
+-2.963939760e-05f, -2.964308768e-05f, -2.964672607e-05f, -2.965031278e-05f, -2.965384780e-05f, -2.965733113e-05f, -2.966076278e-05f, -2.966414273e-05f, -2.966747100e-05f, -2.967074758e-05f,
+-2.967397247e-05f, -2.967714566e-05f, -2.968026717e-05f, -2.968333699e-05f, -2.968635512e-05f, -2.968932156e-05f, -2.969223631e-05f, -2.969509937e-05f, -2.969791075e-05f, -2.970067043e-05f,
+-2.970337843e-05f, -2.970603474e-05f, -2.970863937e-05f, -2.971119231e-05f, -2.971369357e-05f, -2.971614314e-05f, -2.971854104e-05f, -2.972088725e-05f, -2.972318179e-05f, -2.972542465e-05f,
+-2.972761583e-05f, -2.972975534e-05f, -2.973184318e-05f, -2.973387934e-05f, -2.973586384e-05f, -2.973779667e-05f, -2.973967784e-05f, -2.974150734e-05f, -2.974328519e-05f, -2.974501138e-05f,
+-2.974668591e-05f, -2.974830879e-05f, -2.974988001e-05f, -2.975139960e-05f, -2.975286753e-05f, -2.975428383e-05f, -2.975564848e-05f, -2.975696150e-05f, -2.975822289e-05f, -2.975943265e-05f,
+-2.976059078e-05f, -2.976169729e-05f, -2.976275218e-05f, -2.976375546e-05f, -2.976470712e-05f, -2.976560718e-05f, -2.976645563e-05f, -2.976725248e-05f, -2.976799774e-05f, -2.976869140e-05f,
+-2.976933347e-05f, -2.976992397e-05f, -2.977046288e-05f, -2.977095022e-05f, -2.977138599e-05f, -2.977177019e-05f, -2.977210283e-05f, -2.977238392e-05f, -2.977261346e-05f, -2.977279145e-05f,
+-2.977291789e-05f, -2.977299281e-05f, -2.977301619e-05f, -2.977298805e-05f, -2.977290839e-05f, -2.977277722e-05f, -2.977259454e-05f, -2.977236035e-05f, -2.977207467e-05f, -2.977173750e-05f,
+-2.977134884e-05f, -2.977090871e-05f, -2.977041710e-05f, -2.976987403e-05f, -2.976927949e-05f, -2.976863350e-05f, -2.976793607e-05f, -2.976718720e-05f, -2.976638689e-05f, -2.976553515e-05f,
+-2.976463200e-05f, -2.976367743e-05f, -2.976267146e-05f, -2.976161409e-05f, -2.976050532e-05f, -2.975934518e-05f, -2.975813365e-05f, -2.975687076e-05f, -2.975555650e-05f, -2.975419090e-05f,
+-2.975277394e-05f, -2.975130565e-05f, -2.974978602e-05f, -2.974821508e-05f, -2.974659282e-05f, -2.974491925e-05f, -2.974319438e-05f, -2.974141823e-05f, -2.973959080e-05f, -2.973771209e-05f,
+-2.973578212e-05f, -2.973380089e-05f, -2.973176842e-05f, -2.972968471e-05f, -2.972754977e-05f, -2.972536361e-05f, -2.972312625e-05f, -2.972083768e-05f, -2.971849792e-05f, -2.971610698e-05f,
+-2.971366487e-05f, -2.971117159e-05f, -2.970862716e-05f, -2.970603159e-05f, -2.970338488e-05f, -2.970068705e-05f, -2.969793810e-05f, -2.969513806e-05f, -2.969228692e-05f, -2.968938469e-05f,
+-2.968643140e-05f, -2.968342704e-05f, -2.968037163e-05f, -2.967726518e-05f, -2.967410770e-05f, -2.967089920e-05f, -2.966763969e-05f, -2.966432919e-05f, -2.966096770e-05f, -2.965755523e-05f,
+-2.965409180e-05f, -2.965057742e-05f, -2.964701210e-05f, -2.964339585e-05f, -2.963972868e-05f, -2.963601060e-05f, -2.963224163e-05f, -2.962842178e-05f, -2.962455106e-05f, -2.962062948e-05f,
+-2.961665705e-05f, -2.961263379e-05f, -2.960855970e-05f, -2.960443481e-05f, -2.960025912e-05f, -2.959603265e-05f, -2.959175540e-05f, -2.958742740e-05f, -2.958304865e-05f, -2.957861916e-05f,
+-2.957413896e-05f, -2.956960805e-05f, -2.956502645e-05f, -2.956039416e-05f, -2.955571121e-05f, -2.955097760e-05f, -2.954619336e-05f, -2.954135849e-05f, -2.953647300e-05f, -2.953153692e-05f,
+-2.952655025e-05f, -2.952151301e-05f, -2.951642521e-05f, -2.951128687e-05f, -2.950609799e-05f, -2.950085861e-05f, -2.949556872e-05f, -2.949022835e-05f, -2.948483751e-05f, -2.947939621e-05f,
+-2.947390447e-05f, -2.946836230e-05f, -2.946276972e-05f, -2.945712674e-05f, -2.945143338e-05f, -2.944568966e-05f, -2.943989558e-05f, -2.943405116e-05f, -2.942815643e-05f, -2.942221139e-05f,
+-2.941621605e-05f, -2.941017045e-05f, -2.940407459e-05f, -2.939792848e-05f, -2.939173215e-05f, -2.938548560e-05f, -2.937918886e-05f, -2.937284195e-05f, -2.936644487e-05f, -2.935999764e-05f,
+-2.935350029e-05f, -2.934695282e-05f, -2.934035526e-05f, -2.933370762e-05f, -2.932700991e-05f, -2.932026216e-05f, -2.931346438e-05f, -2.930661659e-05f, -2.929971880e-05f, -2.929277104e-05f,
+-2.928577331e-05f, -2.927872564e-05f, -2.927162805e-05f, -2.926448055e-05f, -2.925728316e-05f, -2.925003589e-05f, -2.924273878e-05f, -2.923539182e-05f, -2.922799504e-05f, -2.922054847e-05f,
+-2.921305211e-05f, -2.920550599e-05f, -2.919791012e-05f, -2.919026452e-05f, -2.918256921e-05f, -2.917482422e-05f, -2.916702955e-05f, -2.915918522e-05f, -2.915129127e-05f, -2.914334769e-05f,
+-2.913535452e-05f, -2.912731178e-05f, -2.911921947e-05f, -2.911107762e-05f, -2.910288626e-05f, -2.909464539e-05f, -2.908635504e-05f, -2.907801523e-05f, -2.906962598e-05f, -2.906118731e-05f,
+-2.905269923e-05f, -2.904416177e-05f, -2.903557495e-05f, -2.902693878e-05f, -2.901825330e-05f, -2.900951851e-05f, -2.900073444e-05f, -2.899190110e-05f, -2.898301853e-05f, -2.897408674e-05f,
+-2.896510574e-05f, -2.895607557e-05f, -2.894699624e-05f, -2.893786777e-05f, -2.892869019e-05f, -2.891946351e-05f, -2.891018775e-05f, -2.890086295e-05f, -2.889148911e-05f, -2.888206626e-05f,
+-2.887259442e-05f, -2.886307362e-05f, -2.885350387e-05f, -2.884388519e-05f, -2.883421762e-05f, -2.882450116e-05f, -2.881473584e-05f, -2.880492169e-05f, -2.879505873e-05f, -2.878514697e-05f,
+-2.877518644e-05f, -2.876517717e-05f, -2.875511917e-05f, -2.874501247e-05f, -2.873485709e-05f, -2.872465306e-05f, -2.871440038e-05f, -2.870409910e-05f, -2.869374923e-05f, -2.868335080e-05f,
+-2.867290382e-05f, -2.866240832e-05f, -2.865186433e-05f, -2.864127187e-05f, -2.863063095e-05f, -2.861994162e-05f, -2.860920388e-05f, -2.859841776e-05f, -2.858758329e-05f, -2.857670048e-05f,
+-2.856576938e-05f, -2.855478998e-05f, -2.854376233e-05f, -2.853268645e-05f, -2.852156236e-05f, -2.851039008e-05f, -2.849916964e-05f, -2.848790106e-05f, -2.847658437e-05f, -2.846521960e-05f,
+-2.845380676e-05f, -2.844234588e-05f, -2.843083699e-05f, -2.841928011e-05f, -2.840767527e-05f, -2.839602249e-05f, -2.838432180e-05f, -2.837257322e-05f, -2.836077678e-05f, -2.834893251e-05f,
+-2.833704042e-05f, -2.832510054e-05f, -2.831311291e-05f, -2.830107755e-05f, -2.828899447e-05f, -2.827686372e-05f, -2.826468530e-05f, -2.825245926e-05f, -2.824018562e-05f, -2.822786439e-05f,
+-2.821549562e-05f, -2.820307932e-05f, -2.819061553e-05f, -2.817810426e-05f, -2.816554554e-05f, -2.815293941e-05f, -2.814028589e-05f, -2.812758500e-05f, -2.811483678e-05f, -2.810204125e-05f,
+-2.808919843e-05f, -2.807630835e-05f, -2.806337105e-05f, -2.805038655e-05f, -2.803735487e-05f, -2.802427604e-05f, -2.801115010e-05f, -2.799797707e-05f, -2.798475697e-05f, -2.797148984e-05f,
+-2.795817570e-05f, -2.794481458e-05f, -2.793140650e-05f, -2.791795151e-05f, -2.790444962e-05f, -2.789090086e-05f, -2.787730527e-05f, -2.786366286e-05f, -2.784997368e-05f, -2.783623774e-05f,
+-2.782245507e-05f, -2.780862571e-05f, -2.779474969e-05f, -2.778082703e-05f, -2.776685776e-05f, -2.775284191e-05f, -2.773877951e-05f, -2.772467058e-05f, -2.771051517e-05f, -2.769631330e-05f,
+-2.768206499e-05f, -2.766777028e-05f, -2.765342919e-05f, -2.763904177e-05f, -2.762460802e-05f, -2.761012800e-05f, -2.759560172e-05f, -2.758102921e-05f, -2.756641051e-05f, -2.755174565e-05f,
+-2.753703466e-05f, -2.752227756e-05f, -2.750747438e-05f, -2.749262517e-05f, -2.747772994e-05f, -2.746278873e-05f, -2.744780158e-05f, -2.743276850e-05f, -2.741768953e-05f, -2.740256471e-05f,
+-2.738739405e-05f, -2.737217761e-05f, -2.735691539e-05f, -2.734160745e-05f, -2.732625380e-05f, -2.731085448e-05f, -2.729540953e-05f, -2.727991896e-05f, -2.726438282e-05f, -2.724880113e-05f,
+-2.723317393e-05f, -2.721750126e-05f, -2.720178313e-05f, -2.718601958e-05f, -2.717021065e-05f, -2.715435637e-05f, -2.713845677e-05f, -2.712251188e-05f, -2.710652173e-05f, -2.709048637e-05f,
+-2.707440581e-05f, -2.705828009e-05f, -2.704210924e-05f, -2.702589331e-05f, -2.700963231e-05f, -2.699332629e-05f, -2.697697527e-05f, -2.696057930e-05f, -2.694413839e-05f, -2.692765259e-05f,
+-2.691112193e-05f, -2.689454644e-05f, -2.687792616e-05f, -2.686126111e-05f, -2.684455134e-05f, -2.682779688e-05f, -2.681099775e-05f, -2.679415400e-05f, -2.677726565e-05f, -2.676033275e-05f,
+-2.674335532e-05f, -2.672633341e-05f, -2.670926703e-05f, -2.669215624e-05f, -2.667500105e-05f, -2.665780151e-05f, -2.664055766e-05f, -2.662326952e-05f, -2.660593713e-05f, -2.658856052e-05f,
+-2.657113974e-05f, -2.655367480e-05f, -2.653616576e-05f, -2.651861264e-05f, -2.650101549e-05f, -2.648337432e-05f, -2.646568919e-05f, -2.644796012e-05f, -2.643018715e-05f, -2.641237032e-05f,
+-2.639450965e-05f, -2.637660520e-05f, -2.635865698e-05f, -2.634066505e-05f, -2.632262943e-05f, -2.630455016e-05f, -2.628642727e-05f, -2.626826080e-05f, -2.625005079e-05f, -2.623179728e-05f,
+-2.621350030e-05f, -2.619515988e-05f, -2.617677606e-05f, -2.615834888e-05f, -2.613987838e-05f, -2.612136459e-05f, -2.610280755e-05f, -2.608420729e-05f, -2.606556385e-05f, -2.604687728e-05f,
+-2.602814760e-05f, -2.600937485e-05f, -2.599055907e-05f, -2.597170030e-05f, -2.595279857e-05f, -2.593385392e-05f, -2.591486639e-05f, -2.589583602e-05f, -2.587676284e-05f, -2.585764689e-05f,
+-2.583848821e-05f, -2.581928683e-05f, -2.580004280e-05f, -2.578075615e-05f, -2.576142692e-05f, -2.574205515e-05f, -2.572264087e-05f, -2.570318413e-05f, -2.568368496e-05f, -2.566414340e-05f,
+-2.564455949e-05f, -2.562493326e-05f, -2.560526476e-05f, -2.558555402e-05f, -2.556580108e-05f, -2.554600599e-05f, -2.552616878e-05f, -2.550628948e-05f, -2.548636814e-05f, -2.546640480e-05f,
+-2.544639949e-05f, -2.542635226e-05f, -2.540626313e-05f, -2.538613217e-05f, -2.536595939e-05f, -2.534574485e-05f, -2.532548857e-05f, -2.530519061e-05f, -2.528485099e-05f, -2.526446977e-05f,
+-2.524404697e-05f, -2.522358264e-05f, -2.520307682e-05f, -2.518252955e-05f, -2.516194086e-05f, -2.514131081e-05f, -2.512063942e-05f, -2.509992674e-05f, -2.507917281e-05f, -2.505837767e-05f,
+-2.503754136e-05f, -2.501666392e-05f, -2.499574538e-05f, -2.497478580e-05f, -2.495378521e-05f, -2.493274365e-05f, -2.491166117e-05f, -2.489053780e-05f, -2.486937358e-05f, -2.484816856e-05f,
+-2.482692277e-05f, -2.480563626e-05f, -2.478430907e-05f, -2.476294124e-05f, -2.474153282e-05f, -2.472008383e-05f, -2.469859433e-05f, -2.467706435e-05f, -2.465549394e-05f, -2.463388314e-05f,
+-2.461223199e-05f, -2.459054053e-05f, -2.456880880e-05f, -2.454703686e-05f, -2.452522472e-05f, -2.450337245e-05f, -2.448148008e-05f, -2.445954765e-05f, -2.443757521e-05f, -2.441556280e-05f,
+-2.439351046e-05f, -2.437141823e-05f, -2.434928615e-05f, -2.432711428e-05f, -2.430490264e-05f, -2.428265129e-05f, -2.426036026e-05f, -2.423802960e-05f, -2.421565936e-05f, -2.419324957e-05f,
+-2.417080027e-05f, -2.414831152e-05f, -2.412578335e-05f, -2.410321580e-05f, -2.408060893e-05f, -2.405796277e-05f, -2.403527736e-05f, -2.401255276e-05f, -2.398978900e-05f, -2.396698612e-05f,
+-2.394414418e-05f, -2.392126321e-05f, -2.389834326e-05f, -2.387538437e-05f, -2.385238659e-05f, -2.382934995e-05f, -2.380627451e-05f, -2.378316031e-05f, -2.376000739e-05f, -2.373681579e-05f,
+-2.371358556e-05f, -2.369031675e-05f, -2.366700940e-05f, -2.364366355e-05f, -2.362027925e-05f, -2.359685654e-05f, -2.357339547e-05f, -2.354989607e-05f, -2.352635841e-05f, -2.350278251e-05f,
+-2.347916844e-05f, -2.345551622e-05f, -2.343182591e-05f, -2.340809754e-05f, -2.338433118e-05f, -2.336052685e-05f, -2.333668462e-05f, -2.331280451e-05f, -2.328888658e-05f, -2.326493087e-05f,
+-2.324093743e-05f, -2.321690630e-05f, -2.319283754e-05f, -2.316873117e-05f, -2.314458726e-05f, -2.312040584e-05f, -2.309618696e-05f, -2.307193068e-05f, -2.304763702e-05f, -2.302330604e-05f,
+-2.299893780e-05f, -2.297453232e-05f, -2.295008966e-05f, -2.292560986e-05f, -2.290109298e-05f, -2.287653905e-05f, -2.285194812e-05f, -2.282732025e-05f, -2.280265547e-05f, -2.277795383e-05f,
+-2.275321538e-05f, -2.272844017e-05f, -2.270362824e-05f, -2.267877964e-05f, -2.265389442e-05f, -2.262897263e-05f, -2.260401430e-05f, -2.257901949e-05f, -2.255398824e-05f, -2.252892061e-05f,
+-2.250381664e-05f, -2.247867637e-05f, -2.245349986e-05f, -2.242828715e-05f, -2.240303829e-05f, -2.237775332e-05f, -2.235243230e-05f, -2.232707527e-05f, -2.230168228e-05f, -2.227625337e-05f,
+-2.225078860e-05f, -2.222528802e-05f, -2.219975166e-05f, -2.217417958e-05f, -2.214857183e-05f, -2.212292846e-05f, -2.209724950e-05f, -2.207153502e-05f, -2.204578506e-05f, -2.201999967e-05f,
+-2.199417889e-05f, -2.196832277e-05f, -2.194243137e-05f, -2.191650473e-05f, -2.189054291e-05f, -2.186454594e-05f, -2.183851387e-05f, -2.181244677e-05f, -2.178634467e-05f, -2.176020762e-05f,
+-2.173403568e-05f, -2.170782889e-05f, -2.168158730e-05f, -2.165531096e-05f, -2.162899992e-05f, -2.160265422e-05f, -2.157627393e-05f, -2.154985908e-05f, -2.152340973e-05f, -2.149692593e-05f,
+-2.147040772e-05f, -2.144385516e-05f, -2.141726829e-05f, -2.139064716e-05f, -2.136399183e-05f, -2.133730234e-05f, -2.131057875e-05f, -2.128382110e-05f, -2.125702944e-05f, -2.123020383e-05f,
+-2.120334431e-05f, -2.117645093e-05f, -2.114952375e-05f, -2.112256281e-05f, -2.109556817e-05f, -2.106853986e-05f, -2.104147796e-05f, -2.101438250e-05f, -2.098725353e-05f, -2.096009111e-05f,
+-2.093289529e-05f, -2.090566611e-05f, -2.087840363e-05f, -2.085110791e-05f, -2.082377898e-05f, -2.079641690e-05f, -2.076902172e-05f, -2.074159349e-05f, -2.071413227e-05f, -2.068663809e-05f,
+-2.065911103e-05f, -2.063155112e-05f, -2.060395842e-05f, -2.057633298e-05f, -2.054867484e-05f, -2.052098407e-05f, -2.049326071e-05f, -2.046550482e-05f, -2.043771644e-05f, -2.040989563e-05f,
+-2.038204243e-05f, -2.035415691e-05f, -2.032623911e-05f, -2.029828908e-05f, -2.027030688e-05f, -2.024229255e-05f, -2.021424616e-05f, -2.018616774e-05f, -2.015805736e-05f, -2.012991506e-05f,
+-2.010174091e-05f, -2.007353494e-05f, -2.004529721e-05f, -2.001702778e-05f, -1.998872669e-05f, -1.996039400e-05f, -1.993202976e-05f, -1.990363403e-05f, -1.987520685e-05f, -1.984674828e-05f,
+-1.981825837e-05f, -1.978973718e-05f, -1.976118475e-05f, -1.973260114e-05f, -1.970398640e-05f, -1.967534059e-05f, -1.964666375e-05f, -1.961795595e-05f, -1.958921722e-05f, -1.956044764e-05f,
+-1.953164724e-05f, -1.950281609e-05f, -1.947395423e-05f, -1.944506173e-05f, -1.941613862e-05f, -1.938718497e-05f, -1.935820083e-05f, -1.932918625e-05f, -1.930014129e-05f, -1.927106599e-05f,
+-1.924196042e-05f, -1.921282463e-05f, -1.918365866e-05f, -1.915446258e-05f, -1.912523644e-05f, -1.909598029e-05f, -1.906669418e-05f, -1.903737817e-05f, -1.900803232e-05f, -1.897865667e-05f,
+-1.894925128e-05f, -1.891981621e-05f, -1.889035151e-05f, -1.886085723e-05f, -1.883133342e-05f, -1.880178015e-05f, -1.877219747e-05f, -1.874258542e-05f, -1.871294407e-05f, -1.868327347e-05f,
+-1.865357367e-05f, -1.862384473e-05f, -1.859408670e-05f, -1.856429964e-05f, -1.853448360e-05f, -1.850463864e-05f, -1.847476481e-05f, -1.844486216e-05f, -1.841493076e-05f, -1.838497065e-05f,
+-1.835498189e-05f, -1.832496454e-05f, -1.829491864e-05f, -1.826484427e-05f, -1.823474146e-05f, -1.820461028e-05f, -1.817445078e-05f, -1.814426301e-05f, -1.811404704e-05f, -1.808380291e-05f,
+-1.805353069e-05f, -1.802323042e-05f, -1.799290216e-05f, -1.796254598e-05f, -1.793216191e-05f, -1.790175003e-05f, -1.787131038e-05f, -1.784084302e-05f, -1.781034801e-05f, -1.777982540e-05f,
+-1.774927524e-05f, -1.771869760e-05f, -1.768809253e-05f, -1.765746009e-05f, -1.762680032e-05f, -1.759611330e-05f, -1.756539906e-05f, -1.753465768e-05f, -1.750388920e-05f, -1.747309368e-05f,
+-1.744227118e-05f, -1.741142175e-05f, -1.738054545e-05f, -1.734964234e-05f, -1.731871248e-05f, -1.728775591e-05f, -1.725677269e-05f, -1.722576289e-05f, -1.719472656e-05f, -1.716366375e-05f,
+-1.713257452e-05f, -1.710145893e-05f, -1.707031704e-05f, -1.703914889e-05f, -1.700795456e-05f, -1.697673409e-05f, -1.694548754e-05f, -1.691421497e-05f, -1.688291644e-05f, -1.685159200e-05f,
+-1.682024170e-05f, -1.678886562e-05f, -1.675746380e-05f, -1.672603630e-05f, -1.669458317e-05f, -1.666310448e-05f, -1.663160029e-05f, -1.660007064e-05f, -1.656851560e-05f, -1.653693522e-05f,
+-1.650532957e-05f, -1.647369869e-05f, -1.644204265e-05f, -1.641036150e-05f, -1.637865530e-05f, -1.634692412e-05f, -1.631516799e-05f, -1.628338700e-05f, -1.625158118e-05f, -1.621975060e-05f,
+-1.618789532e-05f, -1.615601540e-05f, -1.612411088e-05f, -1.609218184e-05f, -1.606022833e-05f, -1.602825040e-05f, -1.599624811e-05f, -1.596422153e-05f, -1.593217071e-05f, -1.590009570e-05f,
+-1.586799658e-05f, -1.583587338e-05f, -1.580372618e-05f, -1.577155503e-05f, -1.573935999e-05f, -1.570714111e-05f, -1.567489846e-05f, -1.564263210e-05f, -1.561034207e-05f, -1.557802845e-05f,
+-1.554569129e-05f, -1.551333064e-05f, -1.548094657e-05f, -1.544853913e-05f, -1.541610839e-05f, -1.538365440e-05f, -1.535117722e-05f, -1.531867690e-05f, -1.528615352e-05f, -1.525360712e-05f,
+-1.522103777e-05f, -1.518844552e-05f, -1.515583043e-05f, -1.512319257e-05f, -1.509053199e-05f, -1.505784874e-05f, -1.502514290e-05f, -1.499241451e-05f, -1.495966364e-05f, -1.492689035e-05f,
+-1.489409469e-05f, -1.486127672e-05f, -1.482843651e-05f, -1.479557411e-05f, -1.476268958e-05f, -1.472978299e-05f, -1.469685438e-05f, -1.466390382e-05f, -1.463093138e-05f, -1.459793710e-05f,
+-1.456492104e-05f, -1.453188328e-05f, -1.449882386e-05f, -1.446574285e-05f, -1.443264030e-05f, -1.439951628e-05f, -1.436637085e-05f, -1.433320406e-05f, -1.430001597e-05f, -1.426680665e-05f,
+-1.423357615e-05f, -1.420032454e-05f, -1.416705187e-05f, -1.413375820e-05f, -1.410044360e-05f, -1.406710812e-05f, -1.403375182e-05f, -1.400037476e-05f, -1.396697701e-05f, -1.393355862e-05f,
+-1.390011965e-05f, -1.386666017e-05f, -1.383318023e-05f, -1.379967989e-05f, -1.376615922e-05f, -1.373261827e-05f, -1.369905710e-05f, -1.366547578e-05f, -1.363187436e-05f, -1.359825291e-05f,
+-1.356461148e-05f, -1.353095014e-05f, -1.349726894e-05f, -1.346356795e-05f, -1.342984722e-05f, -1.339610683e-05f, -1.336234682e-05f, -1.332856725e-05f, -1.329476820e-05f, -1.326094972e-05f,
+-1.322711186e-05f, -1.319325470e-05f, -1.315937828e-05f, -1.312548268e-05f, -1.309156795e-05f, -1.305763416e-05f, -1.302368136e-05f, -1.298970961e-05f, -1.295571898e-05f, -1.292170953e-05f,
+-1.288768131e-05f, -1.285363439e-05f, -1.281956883e-05f, -1.278548469e-05f, -1.275138203e-05f, -1.271726091e-05f, -1.268312140e-05f, -1.264896355e-05f, -1.261478743e-05f, -1.258059309e-05f,
+-1.254638060e-05f, -1.251215002e-05f, -1.247790141e-05f, -1.244363483e-05f, -1.240935034e-05f, -1.237504800e-05f, -1.234072788e-05f, -1.230639004e-05f, -1.227203453e-05f, -1.223766142e-05f,
+-1.220327078e-05f, -1.216886265e-05f, -1.213443711e-05f, -1.209999421e-05f, -1.206553401e-05f, -1.203105659e-05f, -1.199656199e-05f, -1.196205029e-05f, -1.192752153e-05f, -1.189297579e-05f,
+-1.185841313e-05f, -1.182383360e-05f, -1.178923727e-05f, -1.175462420e-05f, -1.171999445e-05f, -1.168534808e-05f, -1.165068516e-05f, -1.161600575e-05f, -1.158130991e-05f, -1.154659769e-05f,
+-1.151186917e-05f, -1.147712441e-05f, -1.144236346e-05f, -1.140758639e-05f, -1.137279325e-05f, -1.133798412e-05f, -1.130315906e-05f, -1.126831812e-05f, -1.123346137e-05f, -1.119858886e-05f,
+-1.116370067e-05f, -1.112879686e-05f, -1.109387748e-05f, -1.105894260e-05f, -1.102399228e-05f, -1.098902658e-05f, -1.095404556e-05f, -1.091904930e-05f, -1.088403784e-05f, -1.084901125e-05f,
+-1.081396960e-05f, -1.077891294e-05f, -1.074384134e-05f, -1.070875486e-05f, -1.067365356e-05f, -1.063853751e-05f, -1.060340677e-05f, -1.056826139e-05f, -1.053310145e-05f, -1.049792701e-05f,
+-1.046273812e-05f, -1.042753484e-05f, -1.039231726e-05f, -1.035708541e-05f, -1.032183937e-05f, -1.028657921e-05f, -1.025130497e-05f, -1.021601673e-05f, -1.018071454e-05f, -1.014539848e-05f,
+-1.011006860e-05f, -1.007472496e-05f, -1.003936763e-05f, -1.000399667e-05f, -9.968612144e-06f, -9.933214114e-06f, -9.897802641e-06f, -9.862377790e-06f, -9.826939623e-06f, -9.791488203e-06f,
+-9.756023592e-06f, -9.720545853e-06f, -9.685055049e-06f, -9.649551244e-06f, -9.614034499e-06f, -9.578504877e-06f, -9.542962442e-06f, -9.507407257e-06f, -9.471839383e-06f, -9.436258885e-06f,
+-9.400665825e-06f, -9.365060266e-06f, -9.329442271e-06f, -9.293811903e-06f, -9.258169225e-06f, -9.222514301e-06f, -9.186847192e-06f, -9.151167963e-06f, -9.115476675e-06f, -9.079773393e-06f,
+-9.044058179e-06f, -9.008331097e-06f, -8.972592209e-06f, -8.936841579e-06f, -8.901079270e-06f, -8.865305345e-06f, -8.829519866e-06f, -8.793722898e-06f, -8.757914504e-06f, -8.722094747e-06f,
+-8.686263689e-06f, -8.650421394e-06f, -8.614567926e-06f, -8.578703348e-06f, -8.542827722e-06f, -8.506941113e-06f, -8.471043583e-06f, -8.435135196e-06f, -8.399216016e-06f, -8.363286104e-06f,
+-8.327345526e-06f, -8.291394344e-06f, -8.255432621e-06f, -8.219460421e-06f, -8.183477808e-06f, -8.147484844e-06f, -8.111481594e-06f, -8.075468120e-06f, -8.039444486e-06f, -8.003410755e-06f,
+-7.967366991e-06f, -7.931313258e-06f, -7.895249618e-06f, -7.859176136e-06f, -7.823092875e-06f, -7.786999898e-06f, -7.750897269e-06f, -7.714785051e-06f, -7.678663308e-06f, -7.642532104e-06f,
+-7.606391501e-06f, -7.570241565e-06f, -7.534082357e-06f, -7.497913942e-06f, -7.461736384e-06f, -7.425549745e-06f, -7.389354090e-06f, -7.353149483e-06f, -7.316935986e-06f, -7.280713663e-06f,
+-7.244482579e-06f, -7.208242796e-06f, -7.171994379e-06f, -7.135737391e-06f, -7.099471896e-06f, -7.063197957e-06f, -7.026915639e-06f, -6.990625004e-06f, -6.954326117e-06f, -6.918019041e-06f,
+-6.881703840e-06f, -6.845380578e-06f, -6.809049319e-06f, -6.772710126e-06f, -6.736363063e-06f, -6.700008193e-06f, -6.663645582e-06f, -6.627275291e-06f, -6.590897386e-06f, -6.554511930e-06f,
+-6.518118986e-06f, -6.481718619e-06f, -6.445310892e-06f, -6.408895869e-06f, -6.372473614e-06f, -6.336044192e-06f, -6.299607664e-06f, -6.263164096e-06f, -6.226713552e-06f, -6.190256094e-06f,
+-6.153791788e-06f, -6.117320696e-06f, -6.080842883e-06f, -6.044358413e-06f, -6.007867349e-06f, -5.971369755e-06f, -5.934865696e-06f, -5.898355235e-06f, -5.861838436e-06f, -5.825315362e-06f,
+-5.788786079e-06f, -5.752250649e-06f, -5.715709137e-06f, -5.679161606e-06f, -5.642608121e-06f, -5.606048745e-06f, -5.569483542e-06f, -5.532912577e-06f, -5.496335912e-06f, -5.459753613e-06f,
+-5.423165743e-06f, -5.386572365e-06f, -5.349973545e-06f, -5.313369345e-06f, -5.276759830e-06f, -5.240145063e-06f, -5.203525110e-06f, -5.166900033e-06f, -5.130269896e-06f, -5.093634764e-06f,
+-5.056994701e-06f, -5.020349769e-06f, -4.983700035e-06f, -4.947045560e-06f, -4.910386410e-06f, -4.873722648e-06f, -4.837054339e-06f, -4.800381545e-06f, -4.763704332e-06f, -4.727022763e-06f,
+-4.690336902e-06f, -4.653646814e-06f, -4.616952561e-06f, -4.580254208e-06f, -4.543551819e-06f, -4.506845459e-06f, -4.470135190e-06f, -4.433421077e-06f, -4.396703184e-06f, -4.359981575e-06f,
+-4.323256314e-06f, -4.286527465e-06f, -4.249795091e-06f, -4.213059257e-06f, -4.176320027e-06f, -4.139577465e-06f, -4.102831634e-06f, -4.066082599e-06f, -4.029330424e-06f, -3.992575172e-06f,
+-3.955816907e-06f, -3.919055694e-06f, -3.882291597e-06f, -3.845524679e-06f, -3.808755004e-06f, -3.771982637e-06f, -3.735207641e-06f, -3.698430080e-06f, -3.661650018e-06f, -3.624867520e-06f,
+-3.588082648e-06f, -3.551295467e-06f, -3.514506042e-06f, -3.477714435e-06f, -3.440920711e-06f, -3.404124934e-06f, -3.367327167e-06f, -3.330527475e-06f, -3.293725921e-06f, -3.256922570e-06f,
+-3.220117485e-06f, -3.183310730e-06f, -3.146502370e-06f, -3.109692467e-06f, -3.072881087e-06f, -3.036068292e-06f, -2.999254147e-06f, -2.962438715e-06f, -2.925622061e-06f, -2.888804248e-06f,
+-2.851985340e-06f, -2.815165402e-06f, -2.778344496e-06f, -2.741522687e-06f, -2.704700039e-06f, -2.667876615e-06f, -2.631052479e-06f, -2.594227696e-06f, -2.557402328e-06f, -2.520576441e-06f,
+-2.483750096e-06f, -2.446923360e-06f, -2.410096294e-06f, -2.373268963e-06f, -2.336441431e-06f, -2.299613762e-06f, -2.262786019e-06f, -2.225958266e-06f, -2.189130567e-06f, -2.152302986e-06f,
+-2.115475586e-06f, -2.078648431e-06f, -2.041821585e-06f, -2.004995111e-06f, -1.968169074e-06f, -1.931343537e-06f, -1.894518564e-06f, -1.857694218e-06f, -1.820870563e-06f, -1.784047662e-06f,
+-1.747225581e-06f, -1.710404381e-06f, -1.673584127e-06f, -1.636764883e-06f, -1.599946712e-06f, -1.563129677e-06f, -1.526313843e-06f, -1.489499273e-06f, -1.452686030e-06f, -1.415874178e-06f,
+-1.379063782e-06f, -1.342254903e-06f, -1.305447606e-06f, -1.268641955e-06f, -1.231838013e-06f, -1.195035843e-06f, -1.158235509e-06f, -1.121437075e-06f, -1.084640604e-06f, -1.047846160e-06f,
+-1.011053805e-06f, -9.742636046e-07f, -9.374756208e-07f, -9.006899175e-07f, -8.639065581e-07f, -8.271256061e-07f, -7.903471249e-07f, -7.535711779e-07f, -7.167978285e-07f, -6.800271401e-07f,
+-6.432591761e-07f, -6.064939999e-07f, -5.697316748e-07f, -5.329722641e-07f, -4.962158312e-07f, -4.594624394e-07f, -4.227121521e-07f, -3.859650325e-07f, -3.492211439e-07f, -3.124805496e-07f,
+-2.757433129e-07f, -2.390094969e-07f, -2.022791650e-07f, -1.655523804e-07f, -1.288292062e-07f, -9.210970568e-08f, -5.539394203e-08f, -1.868197841e-08f, 1.802612202e-08f, 5.473029612e-08f,
+9.143048075e-08f, 1.281266128e-07f, 1.648186292e-07f, 2.015064668e-07f, 2.381900625e-07f, 2.748693533e-07f, 3.115442761e-07f, 3.482147680e-07f, 3.848807658e-07f, 4.215422066e-07f,
+4.581990274e-07f, 4.948511652e-07f, 5.314985570e-07f, 5.681411400e-07f, 6.047788511e-07f, 6.414116274e-07f, 6.780394061e-07f, 7.146621243e-07f, 7.512797190e-07f, 7.878921275e-07f,
+8.244992869e-07f, 8.611011343e-07f, 8.976976071e-07f, 9.342886423e-07f, 9.708741772e-07f, 1.007454149e-06f, 1.044028495e-06f, 1.080597153e-06f, 1.117160059e-06f, 1.153717151e-06f,
+1.190268367e-06f, 1.226813643e-06f, 1.263352918e-06f, 1.299886128e-06f, 1.336413211e-06f, 1.372934104e-06f, 1.409448745e-06f, 1.445957071e-06f, 1.482459019e-06f, 1.518954528e-06f,
+1.555443534e-06f, 1.591925975e-06f, 1.628401789e-06f, 1.664870913e-06f, 1.701333285e-06f, 1.737788842e-06f, 1.774237522e-06f, 1.810679262e-06f, 1.847114001e-06f, 1.883541675e-06f,
+1.919962223e-06f, 1.956375583e-06f, 1.992781691e-06f, 2.029180486e-06f, 2.065571905e-06f, 2.101955887e-06f, 2.138332368e-06f, 2.174701287e-06f, 2.211062582e-06f, 2.247416191e-06f,
+2.283762051e-06f, 2.320100100e-06f, 2.356430277e-06f, 2.392752518e-06f, 2.429066763e-06f, 2.465372948e-06f, 2.501671013e-06f, 2.537960895e-06f, 2.574242532e-06f, 2.610515862e-06f,
+2.646780823e-06f, 2.683037354e-06f, 2.719285392e-06f, 2.755524876e-06f, 2.791755743e-06f, 2.827977933e-06f, 2.864191382e-06f, 2.900396030e-06f, 2.936591815e-06f, 2.972778675e-06f,
+3.008956547e-06f, 3.045125372e-06f, 3.081285086e-06f, 3.117435628e-06f, 3.153576937e-06f, 3.189708951e-06f, 3.225831609e-06f, 3.261944848e-06f, 3.298048608e-06f, 3.334142827e-06f,
+3.370227443e-06f, 3.406302395e-06f, 3.442367621e-06f, 3.478423061e-06f, 3.514468652e-06f, 3.550504334e-06f, 3.586530044e-06f, 3.622545723e-06f, 3.658551307e-06f, 3.694546737e-06f,
+3.730531951e-06f, 3.766506887e-06f, 3.802471485e-06f, 3.838425683e-06f, 3.874369420e-06f, 3.910302636e-06f, 3.946225268e-06f, 3.982137256e-06f, 4.018038539e-06f, 4.053929056e-06f,
+4.089808745e-06f, 4.125677546e-06f, 4.161535399e-06f, 4.197382241e-06f, 4.233218012e-06f, 4.269042652e-06f, 4.304856098e-06f, 4.340658292e-06f, 4.376449171e-06f, 4.412228675e-06f,
+4.447996743e-06f, 4.483753315e-06f, 4.519498329e-06f, 4.555231726e-06f, 4.590953445e-06f, 4.626663424e-06f, 4.662361603e-06f, 4.698047923e-06f, 4.733722321e-06f, 4.769384739e-06f,
+4.805035115e-06f, 4.840673388e-06f, 4.876299499e-06f, 4.911913387e-06f, 4.947514992e-06f, 4.983104253e-06f, 5.018681110e-06f, 5.054245503e-06f, 5.089797371e-06f, 5.125336655e-06f,
+5.160863294e-06f, 5.196377227e-06f, 5.231878396e-06f, 5.267366739e-06f, 5.302842197e-06f, 5.338304709e-06f, 5.373754215e-06f, 5.409190657e-06f, 5.444613973e-06f, 5.480024103e-06f,
+5.515420988e-06f, 5.550804568e-06f, 5.586174783e-06f, 5.621531573e-06f, 5.656874878e-06f, 5.692204639e-06f, 5.727520796e-06f, 5.762823289e-06f, 5.798112059e-06f, 5.833387045e-06f,
+5.868648189e-06f, 5.903895430e-06f, 5.939128710e-06f, 5.974347968e-06f, 6.009553145e-06f, 6.044744182e-06f, 6.079921019e-06f, 6.115083597e-06f, 6.150231856e-06f, 6.185365738e-06f,
+6.220485182e-06f, 6.255590130e-06f, 6.290680523e-06f, 6.325756300e-06f, 6.360817403e-06f, 6.395863773e-06f, 6.430895351e-06f, 6.465912077e-06f, 6.500913893e-06f, 6.535900740e-06f,
+6.570872558e-06f, 6.605829288e-06f, 6.640770873e-06f, 6.675697252e-06f, 6.710608366e-06f, 6.745504159e-06f, 6.780384569e-06f, 6.815249539e-06f, 6.850099010e-06f, 6.884932922e-06f,
+6.919751219e-06f, 6.954553840e-06f, 6.989340727e-06f, 7.024111823e-06f, 7.058867067e-06f, 7.093606402e-06f, 7.128329769e-06f, 7.163037111e-06f, 7.197728367e-06f, 7.232403481e-06f,
+7.267062393e-06f, 7.301705046e-06f, 7.336331381e-06f, 7.370941340e-06f, 7.405534865e-06f, 7.440111897e-06f, 7.474672379e-06f, 7.509216253e-06f, 7.543743460e-06f, 7.578253942e-06f,
+7.612747642e-06f, 7.647224501e-06f, 7.681684462e-06f, 7.716127467e-06f, 7.750553458e-06f, 7.784962376e-06f, 7.819354165e-06f, 7.853728767e-06f, 7.888086124e-06f, 7.922426177e-06f,
+7.956748871e-06f, 7.991054146e-06f, 8.025341947e-06f, 8.059612214e-06f, 8.093864890e-06f, 8.128099919e-06f, 8.162317243e-06f, 8.196516804e-06f, 8.230698545e-06f, 8.264862408e-06f,
+8.299008337e-06f, 8.333136275e-06f, 8.367246163e-06f, 8.401337946e-06f, 8.435411565e-06f, 8.469466965e-06f, 8.503504087e-06f, 8.537522874e-06f, 8.571523271e-06f, 8.605505219e-06f,
+8.639468663e-06f, 8.673413545e-06f, 8.707339808e-06f, 8.741247396e-06f, 8.775136251e-06f, 8.809006318e-06f, 8.842857540e-06f, 8.876689860e-06f, 8.910503221e-06f, 8.944297566e-06f,
+8.978072841e-06f, 9.011828987e-06f, 9.045565949e-06f, 9.079283670e-06f, 9.112982094e-06f, 9.146661164e-06f, 9.180320825e-06f, 9.213961019e-06f, 9.247581692e-06f, 9.281182786e-06f,
+9.314764246e-06f, 9.348326016e-06f, 9.381868039e-06f, 9.415390260e-06f, 9.448892623e-06f, 9.482375071e-06f, 9.515837549e-06f, 9.549280002e-06f, 9.582702373e-06f, 9.616104606e-06f,
+9.649486646e-06f, 9.682848438e-06f, 9.716189925e-06f, 9.749511053e-06f, 9.782811765e-06f, 9.816092006e-06f, 9.849351720e-06f, 9.882590853e-06f, 9.915809349e-06f, 9.949007152e-06f,
+9.982184208e-06f, 1.001534046e-05f, 1.004847586e-05f, 1.008159034e-05f, 1.011468385e-05f, 1.014775634e-05f, 1.018080775e-05f, 1.021383803e-05f, 1.024684712e-05f, 1.027983496e-05f,
+1.031280151e-05f, 1.034574670e-05f, 1.037867049e-05f, 1.041157281e-05f, 1.044445362e-05f, 1.047731286e-05f, 1.051015046e-05f, 1.054296639e-05f, 1.057576058e-05f, 1.060853299e-05f,
+1.064128354e-05f, 1.067401220e-05f, 1.070671891e-05f, 1.073940361e-05f, 1.077206624e-05f, 1.080470677e-05f, 1.083732512e-05f, 1.086992124e-05f, 1.090249509e-05f, 1.093504661e-05f,
+1.096757574e-05f, 1.100008243e-05f, 1.103256663e-05f, 1.106502827e-05f, 1.109746732e-05f, 1.112988371e-05f, 1.116227739e-05f, 1.119464831e-05f, 1.122699641e-05f, 1.125932165e-05f,
+1.129162395e-05f, 1.132390329e-05f, 1.135615959e-05f, 1.138839280e-05f, 1.142060288e-05f, 1.145278977e-05f, 1.148495342e-05f, 1.151709377e-05f, 1.154921077e-05f, 1.158130436e-05f,
+1.161337450e-05f, 1.164542113e-05f, 1.167744419e-05f, 1.170944364e-05f, 1.174141943e-05f, 1.177337149e-05f, 1.180529978e-05f, 1.183720424e-05f, 1.186908482e-05f, 1.190094147e-05f,
+1.193277413e-05f, 1.196458276e-05f, 1.199636730e-05f, 1.202812769e-05f, 1.205986390e-05f, 1.209157585e-05f, 1.212326350e-05f, 1.215492681e-05f, 1.218656571e-05f, 1.221818015e-05f,
+1.224977008e-05f, 1.228133546e-05f, 1.231287622e-05f, 1.234439232e-05f, 1.237588370e-05f, 1.240735032e-05f, 1.243879211e-05f, 1.247020903e-05f, 1.250160103e-05f, 1.253296805e-05f,
+1.256431005e-05f, 1.259562697e-05f, 1.262691876e-05f, 1.265818536e-05f, 1.268942674e-05f, 1.272064283e-05f, 1.275183358e-05f, 1.278299895e-05f, 1.281413887e-05f, 1.284525331e-05f,
+1.287634221e-05f, 1.290740552e-05f, 1.293844318e-05f, 1.296945515e-05f, 1.300044137e-05f, 1.303140180e-05f, 1.306233638e-05f, 1.309324507e-05f, 1.312412781e-05f, 1.315498454e-05f,
+1.318581523e-05f, 1.321661982e-05f, 1.324739826e-05f, 1.327815049e-05f, 1.330887648e-05f, 1.333957616e-05f, 1.337024949e-05f, 1.340089642e-05f, 1.343151689e-05f, 1.346211086e-05f,
+1.349267828e-05f, 1.352321910e-05f, 1.355373326e-05f, 1.358422071e-05f, 1.361468142e-05f, 1.364511532e-05f, 1.367552237e-05f, 1.370590251e-05f, 1.373625570e-05f, 1.376658189e-05f,
+1.379688103e-05f, 1.382715307e-05f, 1.385739795e-05f, 1.388761563e-05f, 1.391780607e-05f, 1.394796920e-05f, 1.397810499e-05f, 1.400821338e-05f, 1.403829432e-05f, 1.406834776e-05f,
+1.409837366e-05f, 1.412837197e-05f, 1.415834263e-05f, 1.418828560e-05f, 1.421820083e-05f, 1.424808826e-05f, 1.427794786e-05f, 1.430777957e-05f, 1.433758335e-05f, 1.436735914e-05f,
+1.439710689e-05f, 1.442682657e-05f, 1.445651811e-05f, 1.448618147e-05f, 1.451581661e-05f, 1.454542347e-05f, 1.457500201e-05f, 1.460455217e-05f, 1.463407392e-05f, 1.466356719e-05f,
+1.469303195e-05f, 1.472246815e-05f, 1.475187573e-05f, 1.478125465e-05f, 1.481060487e-05f, 1.483992633e-05f, 1.486921898e-05f, 1.489848279e-05f, 1.492771769e-05f, 1.495692365e-05f,
+1.498610062e-05f, 1.501524854e-05f, 1.504436738e-05f, 1.507345708e-05f, 1.510251760e-05f, 1.513154889e-05f, 1.516055089e-05f, 1.518952358e-05f, 1.521846689e-05f, 1.524738079e-05f,
+1.527626522e-05f, 1.530512013e-05f, 1.533394549e-05f, 1.536274124e-05f, 1.539150734e-05f, 1.542024374e-05f, 1.544895040e-05f, 1.547762726e-05f, 1.550627428e-05f, 1.553489142e-05f,
+1.556347862e-05f, 1.559203585e-05f, 1.562056305e-05f, 1.564906018e-05f, 1.567752720e-05f, 1.570596405e-05f, 1.573437070e-05f, 1.576274709e-05f, 1.579109317e-05f, 1.581940892e-05f,
+1.584769427e-05f, 1.587594918e-05f, 1.590417361e-05f, 1.593236751e-05f, 1.596053083e-05f, 1.598866353e-05f, 1.601676557e-05f, 1.604483690e-05f, 1.607287747e-05f, 1.610088724e-05f,
+1.612886616e-05f, 1.615681419e-05f, 1.618473128e-05f, 1.621261739e-05f, 1.624047247e-05f, 1.626829648e-05f, 1.629608938e-05f, 1.632385111e-05f, 1.635158163e-05f, 1.637928091e-05f,
+1.640694888e-05f, 1.643458552e-05f, 1.646219077e-05f, 1.648976459e-05f, 1.651730694e-05f, 1.654481777e-05f, 1.657229704e-05f, 1.659974470e-05f, 1.662716071e-05f, 1.665454502e-05f,
+1.668189760e-05f, 1.670921839e-05f, 1.673650736e-05f, 1.676376445e-05f, 1.679098963e-05f, 1.681818285e-05f, 1.684534407e-05f, 1.687247325e-05f, 1.689957033e-05f, 1.692663529e-05f,
+1.695366806e-05f, 1.698066862e-05f, 1.700763691e-05f, 1.703457290e-05f, 1.706147654e-05f, 1.708834778e-05f, 1.711518660e-05f, 1.714199293e-05f, 1.716876674e-05f, 1.719550798e-05f,
+1.722221662e-05f, 1.724889261e-05f, 1.727553591e-05f, 1.730214647e-05f, 1.732872425e-05f, 1.735526922e-05f, 1.738178132e-05f, 1.740826051e-05f, 1.743470676e-05f, 1.746112002e-05f,
+1.748750024e-05f, 1.751384739e-05f, 1.754016143e-05f, 1.756644230e-05f, 1.759268998e-05f, 1.761890441e-05f, 1.764508556e-05f, 1.767123339e-05f, 1.769734784e-05f, 1.772342889e-05f,
+1.774947648e-05f, 1.777549059e-05f, 1.780147116e-05f, 1.782741815e-05f, 1.785333153e-05f, 1.787921125e-05f, 1.790505727e-05f, 1.793086955e-05f, 1.795664805e-05f, 1.798239272e-05f,
+1.800810354e-05f, 1.803378044e-05f, 1.805942341e-05f, 1.808503238e-05f, 1.811060733e-05f, 1.813614822e-05f, 1.816165499e-05f, 1.818712762e-05f, 1.821256606e-05f, 1.823797026e-05f,
+1.826334020e-05f, 1.828867583e-05f, 1.831397711e-05f, 1.833924400e-05f, 1.836447646e-05f, 1.838967444e-05f, 1.841483792e-05f, 1.843996685e-05f, 1.846506118e-05f, 1.849012089e-05f,
+1.851514593e-05f, 1.854013626e-05f, 1.856509184e-05f, 1.859001263e-05f, 1.861489859e-05f, 1.863974969e-05f, 1.866456588e-05f, 1.868934712e-05f, 1.871409338e-05f, 1.873880462e-05f,
+1.876348079e-05f, 1.878812186e-05f, 1.881272779e-05f, 1.883729854e-05f, 1.886183407e-05f, 1.888633435e-05f, 1.891079933e-05f, 1.893522897e-05f, 1.895962324e-05f, 1.898398210e-05f,
+1.900830551e-05f, 1.903259343e-05f, 1.905684582e-05f, 1.908106265e-05f, 1.910524388e-05f, 1.912938947e-05f, 1.915349937e-05f, 1.917757356e-05f, 1.920161200e-05f, 1.922561464e-05f,
+1.924958145e-05f, 1.927351240e-05f, 1.929740744e-05f, 1.932126653e-05f, 1.934508965e-05f, 1.936887674e-05f, 1.939262778e-05f, 1.941634273e-05f, 1.944002155e-05f, 1.946366420e-05f,
+1.948727065e-05f, 1.951084086e-05f, 1.953437479e-05f, 1.955787240e-05f, 1.958133366e-05f, 1.960475853e-05f, 1.962814698e-05f, 1.965149897e-05f, 1.967481446e-05f, 1.969809341e-05f,
+1.972133579e-05f, 1.974454156e-05f, 1.976771069e-05f, 1.979084314e-05f, 1.981393888e-05f, 1.983699786e-05f, 1.986002005e-05f, 1.988300542e-05f, 1.990595393e-05f, 1.992886554e-05f,
+1.995174022e-05f, 1.997457794e-05f, 1.999737865e-05f, 2.002014232e-05f, 2.004286892e-05f, 2.006555841e-05f, 2.008821075e-05f, 2.011082592e-05f, 2.013340387e-05f, 2.015594457e-05f,
+2.017844798e-05f, 2.020091407e-05f, 2.022334281e-05f, 2.024573416e-05f, 2.026808808e-05f, 2.029040455e-05f, 2.031268352e-05f, 2.033492496e-05f, 2.035712884e-05f, 2.037929512e-05f,
+2.040142376e-05f, 2.042351475e-05f, 2.044556803e-05f, 2.046758357e-05f, 2.048956135e-05f, 2.051150132e-05f, 2.053340346e-05f, 2.055526773e-05f, 2.057709409e-05f, 2.059888251e-05f,
+2.062063297e-05f, 2.064234541e-05f, 2.066401982e-05f, 2.068565615e-05f, 2.070725438e-05f, 2.072881447e-05f, 2.075033639e-05f, 2.077182010e-05f, 2.079326557e-05f, 2.081467277e-05f,
+2.083604167e-05f, 2.085737222e-05f, 2.087866441e-05f, 2.089991819e-05f, 2.092113354e-05f, 2.094231042e-05f, 2.096344879e-05f, 2.098454863e-05f, 2.100560991e-05f, 2.102663259e-05f,
+2.104761663e-05f, 2.106856202e-05f, 2.108946871e-05f, 2.111033667e-05f, 2.113116587e-05f, 2.115195628e-05f, 2.117270786e-05f, 2.119342059e-05f, 2.121409444e-05f, 2.123472937e-05f,
+2.125532534e-05f, 2.127588234e-05f, 2.129640032e-05f, 2.131687926e-05f, 2.133731912e-05f, 2.135771988e-05f, 2.137808150e-05f, 2.139840395e-05f, 2.141868719e-05f, 2.143893121e-05f,
+2.145913597e-05f, 2.147930143e-05f, 2.149942757e-05f, 2.151951436e-05f, 2.153956176e-05f, 2.155956975e-05f, 2.157953829e-05f, 2.159946736e-05f, 2.161935692e-05f, 2.163920694e-05f,
+2.165901740e-05f, 2.167878826e-05f, 2.169851949e-05f, 2.171821107e-05f, 2.173786296e-05f, 2.175747513e-05f, 2.177704756e-05f, 2.179658022e-05f, 2.181607306e-05f, 2.183552608e-05f,
+2.185493923e-05f, 2.187431248e-05f, 2.189364581e-05f, 2.191293920e-05f, 2.193219260e-05f, 2.195140599e-05f, 2.197057934e-05f, 2.198971262e-05f, 2.200880580e-05f, 2.202785886e-05f,
+2.204687177e-05f, 2.206584449e-05f, 2.208477700e-05f, 2.210366927e-05f, 2.212252128e-05f, 2.214133298e-05f, 2.216010436e-05f, 2.217883539e-05f, 2.219752603e-05f, 2.221617627e-05f,
+2.223478607e-05f, 2.225335540e-05f, 2.227188424e-05f, 2.229037256e-05f, 2.230882033e-05f, 2.232722752e-05f, 2.234559411e-05f, 2.236392007e-05f, 2.238220537e-05f, 2.240044999e-05f,
+2.241865389e-05f, 2.243681705e-05f, 2.245493944e-05f, 2.247302104e-05f, 2.249106181e-05f, 2.250906174e-05f, 2.252702079e-05f, 2.254493895e-05f, 2.256281617e-05f, 2.258065243e-05f,
+2.259844772e-05f, 2.261620200e-05f, 2.263391524e-05f, 2.265158742e-05f, 2.266921852e-05f, 2.268680850e-05f, 2.270435734e-05f, 2.272186502e-05f, 2.273933150e-05f, 2.275675677e-05f,
+2.277414080e-05f, 2.279148356e-05f, 2.280878502e-05f, 2.282604516e-05f, 2.284326396e-05f, 2.286044139e-05f, 2.287757742e-05f, 2.289467204e-05f, 2.291172520e-05f, 2.292873689e-05f,
+2.294570709e-05f, 2.296263577e-05f, 2.297952290e-05f, 2.299636846e-05f, 2.301317242e-05f, 2.302993476e-05f, 2.304665546e-05f, 2.306333449e-05f, 2.307997182e-05f, 2.309656744e-05f,
+2.311312131e-05f, 2.312963342e-05f, 2.314610373e-05f, 2.316253223e-05f, 2.317891890e-05f, 2.319526369e-05f, 2.321156661e-05f, 2.322782761e-05f, 2.324404668e-05f, 2.326022378e-05f,
+2.327635891e-05f, 2.329245204e-05f, 2.330850313e-05f, 2.332451218e-05f, 2.334047915e-05f, 2.335640402e-05f, 2.337228677e-05f, 2.338812738e-05f, 2.340392582e-05f, 2.341968207e-05f,
+2.343539610e-05f, 2.345106791e-05f, 2.346669745e-05f, 2.348228472e-05f, 2.349782968e-05f, 2.351333232e-05f, 2.352879260e-05f, 2.354421052e-05f, 2.355958605e-05f, 2.357491917e-05f,
+2.359020984e-05f, 2.360545806e-05f, 2.362066380e-05f, 2.363582704e-05f, 2.365094775e-05f, 2.366602592e-05f, 2.368106153e-05f, 2.369605454e-05f, 2.371100495e-05f, 2.372591272e-05f,
+2.374077784e-05f, 2.375560029e-05f, 2.377038005e-05f, 2.378511709e-05f, 2.379981139e-05f, 2.381446294e-05f, 2.382907171e-05f, 2.384363767e-05f, 2.385816082e-05f, 2.387264113e-05f,
+2.388707858e-05f, 2.390147315e-05f, 2.391582482e-05f, 2.393013356e-05f, 2.394439937e-05f, 2.395862221e-05f, 2.397280207e-05f, 2.398693893e-05f, 2.400103276e-05f, 2.401508356e-05f,
+2.402909129e-05f, 2.404305595e-05f, 2.405697750e-05f, 2.407085593e-05f, 2.408469122e-05f, 2.409848336e-05f, 2.411223231e-05f, 2.412593807e-05f, 2.413960061e-05f, 2.415321992e-05f,
+2.416679597e-05f, 2.418032875e-05f, 2.419381824e-05f, 2.420726442e-05f, 2.422066726e-05f, 2.423402676e-05f, 2.424734290e-05f, 2.426061564e-05f, 2.427384499e-05f, 2.428703091e-05f,
+2.430017339e-05f, 2.431327242e-05f, 2.432632797e-05f, 2.433934002e-05f, 2.435230857e-05f, 2.436523358e-05f, 2.437811505e-05f, 2.439095295e-05f, 2.440374727e-05f, 2.441649799e-05f,
+2.442920509e-05f, 2.444186856e-05f, 2.445448837e-05f, 2.446706452e-05f, 2.447959698e-05f, 2.449208573e-05f, 2.450453077e-05f, 2.451693207e-05f, 2.452928961e-05f, 2.454160339e-05f,
+2.455387337e-05f, 2.456609956e-05f, 2.457828192e-05f, 2.459042044e-05f, 2.460251511e-05f, 2.461456592e-05f, 2.462657283e-05f, 2.463853585e-05f, 2.465045495e-05f, 2.466233011e-05f,
+2.467416132e-05f, 2.468594857e-05f, 2.469769184e-05f, 2.470939111e-05f, 2.472104637e-05f, 2.473265760e-05f, 2.474422479e-05f, 2.475574792e-05f, 2.476722697e-05f, 2.477866194e-05f,
+2.479005280e-05f, 2.480139954e-05f, 2.481270215e-05f, 2.482396062e-05f, 2.483517491e-05f, 2.484634503e-05f, 2.485747096e-05f, 2.486855268e-05f, 2.487959017e-05f, 2.489058344e-05f,
+2.490153245e-05f, 2.491243719e-05f, 2.492329766e-05f, 2.493411383e-05f, 2.494488570e-05f, 2.495561324e-05f, 2.496629645e-05f, 2.497693532e-05f, 2.498752982e-05f, 2.499807994e-05f,
+2.500858567e-05f, 2.501904701e-05f, 2.502946392e-05f, 2.503983641e-05f, 2.505016445e-05f, 2.506044804e-05f, 2.507068716e-05f, 2.508088180e-05f, 2.509103194e-05f, 2.510113757e-05f,
+2.511119869e-05f, 2.512121527e-05f, 2.513118731e-05f, 2.514111479e-05f, 2.515099769e-05f, 2.516083602e-05f, 2.517062975e-05f, 2.518037887e-05f, 2.519008337e-05f, 2.519974325e-05f,
+2.520935847e-05f, 2.521892905e-05f, 2.522845495e-05f, 2.523793618e-05f, 2.524737272e-05f, 2.525676455e-05f, 2.526611167e-05f, 2.527541407e-05f, 2.528467173e-05f, 2.529388464e-05f,
+2.530305280e-05f, 2.531217618e-05f, 2.532125478e-05f, 2.533028860e-05f, 2.533927761e-05f, 2.534822180e-05f, 2.535712117e-05f, 2.536597571e-05f, 2.537478540e-05f, 2.538355024e-05f,
+2.539227021e-05f, 2.540094531e-05f, 2.540957552e-05f, 2.541816083e-05f, 2.542670123e-05f, 2.543519672e-05f, 2.544364728e-05f, 2.545205291e-05f, 2.546041358e-05f, 2.546872931e-05f,
+2.547700006e-05f, 2.548522585e-05f, 2.549340664e-05f, 2.550154245e-05f, 2.550963325e-05f, 2.551767904e-05f, 2.552567981e-05f, 2.553363554e-05f, 2.554154624e-05f, 2.554941189e-05f,
+2.555723248e-05f, 2.556500801e-05f, 2.557273846e-05f, 2.558042383e-05f, 2.558806411e-05f, 2.559565929e-05f, 2.560320936e-05f, 2.561071431e-05f, 2.561817414e-05f, 2.562558883e-05f,
+2.563295839e-05f, 2.564028279e-05f, 2.564756204e-05f, 2.565479613e-05f, 2.566198504e-05f, 2.566912878e-05f, 2.567622732e-05f, 2.568328067e-05f, 2.569028882e-05f, 2.569725177e-05f,
+2.570416949e-05f, 2.571104199e-05f, 2.571786926e-05f, 2.572465129e-05f, 2.573138808e-05f, 2.573807961e-05f, 2.574472589e-05f, 2.575132690e-05f, 2.575788265e-05f, 2.576439311e-05f,
+2.577085829e-05f, 2.577727818e-05f, 2.578365277e-05f, 2.578998205e-05f, 2.579626603e-05f, 2.580250470e-05f, 2.580869804e-05f, 2.581484605e-05f, 2.582094873e-05f, 2.582700608e-05f,
+2.583301807e-05f, 2.583898472e-05f, 2.584490602e-05f, 2.585078195e-05f, 2.585661251e-05f, 2.586239771e-05f, 2.586813753e-05f, 2.587383196e-05f, 2.587948101e-05f, 2.588508467e-05f,
+2.589064293e-05f, 2.589615579e-05f, 2.590162325e-05f, 2.590704529e-05f, 2.591242192e-05f, 2.591775313e-05f, 2.592303892e-05f, 2.592827927e-05f, 2.593347420e-05f, 2.593862369e-05f,
+2.594372774e-05f, 2.594878634e-05f, 2.595379950e-05f, 2.595876720e-05f, 2.596368945e-05f, 2.596856623e-05f, 2.597339756e-05f, 2.597818341e-05f, 2.598292380e-05f, 2.598761872e-05f,
+2.599226815e-05f, 2.599687211e-05f, 2.600143058e-05f, 2.600594357e-05f, 2.601041107e-05f, 2.601483308e-05f, 2.601920959e-05f, 2.602354060e-05f, 2.602782612e-05f, 2.603206613e-05f,
+2.603626064e-05f, 2.604040964e-05f, 2.604451313e-05f, 2.604857110e-05f, 2.605258357e-05f, 2.605655051e-05f, 2.606047194e-05f, 2.606434785e-05f, 2.606817824e-05f, 2.607196310e-05f,
+2.607570244e-05f, 2.607939625e-05f, 2.608304453e-05f, 2.608664728e-05f, 2.609020450e-05f, 2.609371619e-05f, 2.609718234e-05f, 2.610060296e-05f, 2.610397804e-05f, 2.610730759e-05f,
+2.611059160e-05f, 2.611383006e-05f, 2.611702299e-05f, 2.612017038e-05f, 2.612327223e-05f, 2.612632854e-05f, 2.612933930e-05f, 2.613230452e-05f, 2.613522421e-05f, 2.613809834e-05f,
+2.614092694e-05f, 2.614370999e-05f, 2.614644750e-05f, 2.614913947e-05f, 2.615178590e-05f, 2.615438678e-05f, 2.615694212e-05f, 2.615945193e-05f, 2.616191619e-05f, 2.616433491e-05f,
+2.616670809e-05f, 2.616903573e-05f, 2.617131784e-05f, 2.617355441e-05f, 2.617574544e-05f, 2.617789094e-05f, 2.617999090e-05f, 2.618204533e-05f, 2.618405424e-05f, 2.618601761e-05f,
+2.618793545e-05f, 2.618980777e-05f, 2.619163456e-05f, 2.619341583e-05f, 2.619515158e-05f, 2.619684181e-05f, 2.619848652e-05f, 2.620008571e-05f, 2.620163939e-05f, 2.620314756e-05f,
+2.620461023e-05f, 2.620602738e-05f, 2.620739903e-05f, 2.620872518e-05f, 2.621000583e-05f, 2.621124098e-05f, 2.621243064e-05f, 2.621357481e-05f, 2.621467349e-05f, 2.621572668e-05f,
+2.621673439e-05f, 2.621769662e-05f, 2.621861338e-05f, 2.621948467e-05f, 2.622031048e-05f, 2.622109083e-05f, 2.622182572e-05f, 2.622251515e-05f, 2.622315912e-05f, 2.622375764e-05f,
+2.622431072e-05f, 2.622481835e-05f, 2.622528054e-05f, 2.622569730e-05f, 2.622606863e-05f, 2.622639453e-05f, 2.622667500e-05f, 2.622691006e-05f, 2.622709970e-05f, 2.622724394e-05f,
+2.622734276e-05f, 2.622739619e-05f, 2.622740423e-05f, 2.622736687e-05f, 2.622728413e-05f, 2.622715600e-05f, 2.622698251e-05f, 2.622676364e-05f, 2.622649940e-05f, 2.622618981e-05f,
+2.622583486e-05f, 2.622543456e-05f, 2.622498892e-05f, 2.622449794e-05f, 2.622396163e-05f, 2.622338000e-05f, 2.622275304e-05f, 2.622208077e-05f, 2.622136319e-05f, 2.622060031e-05f,
+2.621979213e-05f, 2.621893866e-05f, 2.621803991e-05f, 2.621709588e-05f, 2.621610658e-05f, 2.621507201e-05f, 2.621399219e-05f, 2.621286712e-05f, 2.621169680e-05f, 2.621048125e-05f,
+2.620922046e-05f, 2.620791445e-05f, 2.620656323e-05f, 2.620516680e-05f, 2.620372516e-05f, 2.620223833e-05f, 2.620070632e-05f, 2.619912912e-05f, 2.619750676e-05f, 2.619583923e-05f,
+2.619412654e-05f, 2.619236870e-05f, 2.619056572e-05f, 2.618871761e-05f, 2.618682438e-05f, 2.618488603e-05f, 2.618290257e-05f, 2.618087401e-05f, 2.617880036e-05f, 2.617668162e-05f,
+2.617451781e-05f, 2.617230893e-05f, 2.617005500e-05f, 2.616775601e-05f, 2.616541199e-05f, 2.616302293e-05f, 2.616058885e-05f, 2.615810976e-05f, 2.615558567e-05f, 2.615301657e-05f,
+2.615040250e-05f, 2.614774344e-05f, 2.614503942e-05f, 2.614229045e-05f, 2.613949652e-05f, 2.613665766e-05f, 2.613377386e-05f, 2.613084515e-05f, 2.612787153e-05f, 2.612485301e-05f,
+2.612178960e-05f, 2.611868132e-05f, 2.611552816e-05f, 2.611233015e-05f, 2.610908728e-05f, 2.610579958e-05f, 2.610246706e-05f, 2.609908971e-05f, 2.609566756e-05f, 2.609220062e-05f,
+2.608868889e-05f, 2.608513239e-05f, 2.608153112e-05f, 2.607788510e-05f, 2.607419435e-05f, 2.607045886e-05f, 2.606667866e-05f, 2.606285375e-05f, 2.605898414e-05f, 2.605506985e-05f,
+2.605111089e-05f, 2.604710726e-05f, 2.604305899e-05f, 2.603896608e-05f, 2.603482855e-05f, 2.603064640e-05f, 2.602641966e-05f, 2.602214832e-05f, 2.601783240e-05f, 2.601347193e-05f,
+2.600906689e-05f, 2.600461732e-05f, 2.600012323e-05f, 2.599558461e-05f, 2.599100150e-05f, 2.598637389e-05f, 2.598170181e-05f, 2.597698526e-05f, 2.597222426e-05f, 2.596741883e-05f,
+2.596256897e-05f, 2.595767470e-05f, 2.595273603e-05f, 2.594775297e-05f, 2.594272554e-05f, 2.593765376e-05f, 2.593253762e-05f, 2.592737716e-05f, 2.592217238e-05f, 2.591692330e-05f,
+2.591162992e-05f, 2.590629227e-05f, 2.590091036e-05f, 2.589548420e-05f, 2.589001381e-05f, 2.588449919e-05f, 2.587894037e-05f, 2.587333736e-05f, 2.586769018e-05f, 2.586199883e-05f,
+2.585626333e-05f, 2.585048370e-05f, 2.584465995e-05f, 2.583879210e-05f, 2.583288016e-05f, 2.582692415e-05f, 2.582092408e-05f, 2.581487996e-05f, 2.580879182e-05f, 2.580265966e-05f,
+2.579648351e-05f, 2.579026338e-05f, 2.578399927e-05f, 2.577769122e-05f, 2.577133923e-05f, 2.576494332e-05f, 2.575850351e-05f, 2.575201981e-05f, 2.574549224e-05f, 2.573892081e-05f,
+2.573230554e-05f, 2.572564645e-05f, 2.571894354e-05f, 2.571219685e-05f, 2.570540638e-05f, 2.569857216e-05f, 2.569169419e-05f, 2.568477250e-05f, 2.567780709e-05f, 2.567079800e-05f,
+2.566374523e-05f, 2.565664880e-05f, 2.564950873e-05f, 2.564232504e-05f, 2.563509773e-05f, 2.562782684e-05f, 2.562051238e-05f, 2.561315436e-05f, 2.560575280e-05f, 2.559830772e-05f,
+2.559081914e-05f, 2.558328707e-05f, 2.557571154e-05f, 2.556809255e-05f, 2.556043014e-05f, 2.555272431e-05f, 2.554497508e-05f, 2.553718247e-05f, 2.552934651e-05f, 2.552146720e-05f,
+2.551354457e-05f, 2.550557863e-05f, 2.549756941e-05f, 2.548951692e-05f, 2.548142118e-05f, 2.547328221e-05f, 2.546510003e-05f, 2.545687465e-05f, 2.544860610e-05f, 2.544029439e-05f,
+2.543193955e-05f, 2.542354159e-05f, 2.541510053e-05f, 2.540661639e-05f, 2.539808919e-05f, 2.538951896e-05f, 2.538090570e-05f, 2.537224944e-05f, 2.536355019e-05f, 2.535480799e-05f,
+2.534602284e-05f, 2.533719477e-05f, 2.532832380e-05f, 2.531940994e-05f, 2.531045322e-05f, 2.530145366e-05f, 2.529241128e-05f, 2.528332610e-05f, 2.527419813e-05f, 2.526502740e-05f,
+2.525581393e-05f, 2.524655774e-05f, 2.523725885e-05f, 2.522791728e-05f, 2.521853305e-05f, 2.520910619e-05f, 2.519963670e-05f, 2.519012463e-05f, 2.518056997e-05f, 2.517097277e-05f,
+2.516133303e-05f, 2.515165078e-05f, 2.514192604e-05f, 2.513215883e-05f, 2.512234918e-05f, 2.511249709e-05f, 2.510260261e-05f, 2.509266574e-05f, 2.508268652e-05f, 2.507266495e-05f,
+2.506260107e-05f, 2.505249489e-05f, 2.504234644e-05f, 2.503215574e-05f, 2.502192281e-05f, 2.501164767e-05f, 2.500133035e-05f, 2.499097087e-05f, 2.498056925e-05f, 2.497012551e-05f,
+2.495963968e-05f, 2.494911178e-05f, 2.493854183e-05f, 2.492792985e-05f, 2.491727587e-05f, 2.490657992e-05f, 2.489584200e-05f, 2.488506215e-05f, 2.487424039e-05f, 2.486337674e-05f,
+2.485247123e-05f, 2.484152388e-05f, 2.483053471e-05f, 2.481950374e-05f, 2.480843101e-05f, 2.479731653e-05f, 2.478616033e-05f, 2.477496243e-05f, 2.476372285e-05f, 2.475244162e-05f,
+2.474111876e-05f, 2.472975431e-05f, 2.471834827e-05f, 2.470690068e-05f, 2.469541155e-05f, 2.468388092e-05f, 2.467230881e-05f, 2.466069524e-05f, 2.464904024e-05f, 2.463734383e-05f,
+2.462560604e-05f, 2.461382689e-05f, 2.460200640e-05f, 2.459014461e-05f, 2.457824153e-05f, 2.456629720e-05f, 2.455431162e-05f, 2.454228485e-05f, 2.453021688e-05f, 2.451810776e-05f,
+2.450595751e-05f, 2.449376615e-05f, 2.448153371e-05f, 2.446926021e-05f, 2.445694568e-05f, 2.444459014e-05f, 2.443219363e-05f, 2.441975616e-05f, 2.440727777e-05f, 2.439475848e-05f,
+2.438219831e-05f, 2.436959729e-05f, 2.435695545e-05f, 2.434427281e-05f, 2.433154940e-05f, 2.431878525e-05f, 2.430598038e-05f, 2.429313482e-05f, 2.428024860e-05f, 2.426732174e-05f,
+2.425435426e-05f, 2.424134621e-05f, 2.422829759e-05f, 2.421520845e-05f, 2.420207881e-05f, 2.418890868e-05f, 2.417569811e-05f, 2.416244712e-05f, 2.414915573e-05f, 2.413582398e-05f,
+2.412245188e-05f, 2.410903948e-05f, 2.409558678e-05f, 2.408209384e-05f, 2.406856066e-05f, 2.405498728e-05f, 2.404137373e-05f, 2.402772003e-05f, 2.401402621e-05f, 2.400029231e-05f,
+2.398651834e-05f, 2.397270434e-05f, 2.395885033e-05f, 2.394495635e-05f, 2.393102241e-05f, 2.391704856e-05f, 2.390303481e-05f, 2.388898120e-05f, 2.387488776e-05f, 2.386075451e-05f,
+2.384658148e-05f, 2.383236871e-05f, 2.381811621e-05f, 2.380382403e-05f, 2.378949218e-05f, 2.377512070e-05f, 2.376070961e-05f, 2.374625895e-05f, 2.373176875e-05f, 2.371723903e-05f,
+2.370266982e-05f, 2.368806116e-05f, 2.367341307e-05f, 2.365872558e-05f, 2.364399873e-05f, 2.362923253e-05f, 2.361442703e-05f, 2.359958225e-05f, 2.358469822e-05f, 2.356977497e-05f,
+2.355481253e-05f, 2.353981094e-05f, 2.352477021e-05f, 2.350969039e-05f, 2.349457150e-05f, 2.347941357e-05f, 2.346421663e-05f, 2.344898072e-05f, 2.343370586e-05f, 2.341839209e-05f,
+2.340303943e-05f, 2.338764791e-05f, 2.337221758e-05f, 2.335674845e-05f, 2.334124056e-05f, 2.332569394e-05f, 2.331010862e-05f, 2.329448463e-05f, 2.327882201e-05f, 2.326312078e-05f,
+2.324738098e-05f, 2.323160263e-05f, 2.321578577e-05f, 2.319993043e-05f, 2.318403664e-05f, 2.316810444e-05f, 2.315213385e-05f, 2.313612491e-05f, 2.312007765e-05f, 2.310399209e-05f,
+2.308786828e-05f, 2.307170625e-05f, 2.305550602e-05f, 2.303926763e-05f, 2.302299111e-05f, 2.300667649e-05f, 2.299032381e-05f, 2.297393309e-05f, 2.295750438e-05f, 2.294103770e-05f,
+2.292453309e-05f, 2.290799057e-05f, 2.289141019e-05f, 2.287479196e-05f, 2.285813594e-05f, 2.284144214e-05f, 2.282471061e-05f, 2.280794137e-05f, 2.279113446e-05f, 2.277428991e-05f,
+2.275740776e-05f, 2.274048804e-05f, 2.272353077e-05f, 2.270653600e-05f, 2.268950376e-05f, 2.267243408e-05f, 2.265532700e-05f, 2.263818254e-05f, 2.262100075e-05f, 2.260378166e-05f,
+2.258652529e-05f, 2.256923169e-05f, 2.255190089e-05f, 2.253453292e-05f, 2.251712781e-05f, 2.249968561e-05f, 2.248220633e-05f, 2.246469003e-05f, 2.244713673e-05f, 2.242954647e-05f,
+2.241191928e-05f, 2.239425520e-05f, 2.237655426e-05f, 2.235881649e-05f, 2.234104193e-05f, 2.232323062e-05f, 2.230538259e-05f, 2.228749787e-05f, 2.226957650e-05f, 2.225161852e-05f,
+2.223362395e-05f, 2.221559284e-05f, 2.219752522e-05f, 2.217942112e-05f, 2.216128058e-05f, 2.214310364e-05f, 2.212489033e-05f, 2.210664069e-05f, 2.208835475e-05f, 2.207003254e-05f,
+2.205167411e-05f, 2.203327948e-05f, 2.201484870e-05f, 2.199638180e-05f, 2.197787882e-05f, 2.195933979e-05f, 2.194076474e-05f, 2.192215372e-05f, 2.190350676e-05f, 2.188482390e-05f,
+2.186610517e-05f, 2.184735060e-05f, 2.182856024e-05f, 2.180973413e-05f, 2.179087229e-05f, 2.177197476e-05f, 2.175304159e-05f, 2.173407280e-05f, 2.171506844e-05f, 2.169602853e-05f,
+2.167695313e-05f, 2.165784226e-05f, 2.163869596e-05f, 2.161951426e-05f, 2.160029722e-05f, 2.158104485e-05f, 2.156175721e-05f, 2.154243432e-05f, 2.152307623e-05f, 2.150368296e-05f,
+2.148425457e-05f, 2.146479108e-05f, 2.144529254e-05f, 2.142575897e-05f, 2.140619043e-05f, 2.138658694e-05f, 2.136694854e-05f, 2.134727528e-05f, 2.132756718e-05f, 2.130782429e-05f,
+2.128804665e-05f, 2.126823429e-05f, 2.124838725e-05f, 2.122850557e-05f, 2.120858929e-05f, 2.118863845e-05f, 2.116865307e-05f, 2.114863321e-05f, 2.112857891e-05f, 2.110849019e-05f,
+2.108836709e-05f, 2.106820967e-05f, 2.104801794e-05f, 2.102779196e-05f, 2.100753177e-05f, 2.098723739e-05f, 2.096690887e-05f, 2.094654626e-05f, 2.092614958e-05f, 2.090571887e-05f,
+2.088525418e-05f, 2.086475555e-05f, 2.084422300e-05f, 2.082365660e-05f, 2.080305636e-05f, 2.078242233e-05f, 2.076175456e-05f, 2.074105307e-05f, 2.072031792e-05f, 2.069954913e-05f,
+2.067874675e-05f, 2.065791082e-05f, 2.063704138e-05f, 2.061613847e-05f, 2.059520212e-05f, 2.057423238e-05f, 2.055322929e-05f, 2.053219289e-05f, 2.051112321e-05f, 2.049002030e-05f,
+2.046888419e-05f, 2.044771494e-05f, 2.042651257e-05f, 2.040527713e-05f, 2.038400866e-05f, 2.036270719e-05f, 2.034137278e-05f, 2.032000546e-05f, 2.029860526e-05f, 2.027717224e-05f,
+2.025570642e-05f, 2.023420786e-05f, 2.021267660e-05f, 2.019111266e-05f, 2.016951610e-05f, 2.014788696e-05f, 2.012622527e-05f, 2.010453108e-05f, 2.008280442e-05f, 2.006104535e-05f,
+2.003925390e-05f, 2.001743011e-05f, 1.999557402e-05f, 1.997368568e-05f, 1.995176512e-05f, 1.992981239e-05f, 1.990782752e-05f, 1.988581057e-05f, 1.986376157e-05f, 1.984168057e-05f,
+1.981956759e-05f, 1.979742270e-05f, 1.977524592e-05f, 1.975303730e-05f, 1.973079689e-05f, 1.970852472e-05f, 1.968622084e-05f, 1.966388528e-05f, 1.964151809e-05f, 1.961911932e-05f,
+1.959668900e-05f, 1.957422718e-05f, 1.955173390e-05f, 1.952920919e-05f, 1.950665312e-05f, 1.948406570e-05f, 1.946144700e-05f, 1.943879705e-05f, 1.941611589e-05f, 1.939340357e-05f,
+1.937066013e-05f, 1.934788560e-05f, 1.932508005e-05f, 1.930224350e-05f, 1.927937600e-05f, 1.925647759e-05f, 1.923354832e-05f, 1.921058823e-05f, 1.918759736e-05f, 1.916457576e-05f,
+1.914152347e-05f, 1.911844052e-05f, 1.909532697e-05f, 1.907218286e-05f, 1.904900824e-05f, 1.902580313e-05f, 1.900256760e-05f, 1.897930168e-05f, 1.895600541e-05f, 1.893267884e-05f,
+1.890932202e-05f, 1.888593498e-05f, 1.886251777e-05f, 1.883907043e-05f, 1.881559302e-05f, 1.879208556e-05f, 1.876854811e-05f, 1.874498071e-05f, 1.872138341e-05f, 1.869775624e-05f,
+1.867409926e-05f, 1.865041250e-05f, 1.862669601e-05f, 1.860294983e-05f, 1.857917401e-05f, 1.855536860e-05f, 1.853153364e-05f, 1.850766916e-05f, 1.848377522e-05f, 1.845985187e-05f,
+1.843589914e-05f, 1.841191708e-05f, 1.838790573e-05f, 1.836386515e-05f, 1.833979537e-05f, 1.831569644e-05f, 1.829156840e-05f, 1.826741130e-05f, 1.824322519e-05f, 1.821901010e-05f,
+1.819476609e-05f, 1.817049320e-05f, 1.814619147e-05f, 1.812186095e-05f, 1.809750169e-05f, 1.807311372e-05f, 1.804869710e-05f, 1.802425187e-05f, 1.799977808e-05f, 1.797527577e-05f,
+1.795074499e-05f, 1.792618578e-05f, 1.790159818e-05f, 1.787698225e-05f, 1.785233803e-05f, 1.782766557e-05f, 1.780296490e-05f, 1.777823609e-05f, 1.775347916e-05f, 1.772869418e-05f,
+1.770388117e-05f, 1.767904020e-05f, 1.765417130e-05f, 1.762927453e-05f, 1.760434993e-05f, 1.757939754e-05f, 1.755441741e-05f, 1.752940958e-05f, 1.750437411e-05f, 1.747931104e-05f,
+1.745422042e-05f, 1.742910229e-05f, 1.740395670e-05f, 1.737878369e-05f, 1.735358332e-05f, 1.732835562e-05f, 1.730310065e-05f, 1.727781845e-05f, 1.725250907e-05f, 1.722717255e-05f,
+1.720180895e-05f, 1.717641830e-05f, 1.715100066e-05f, 1.712555608e-05f, 1.710008459e-05f, 1.707458625e-05f, 1.704906110e-05f, 1.702350919e-05f, 1.699793057e-05f, 1.697232529e-05f,
+1.694669339e-05f, 1.692103492e-05f, 1.689534992e-05f, 1.686963845e-05f, 1.684390055e-05f, 1.681813627e-05f, 1.679234565e-05f, 1.676652875e-05f, 1.674068561e-05f, 1.671481628e-05f,
+1.668892081e-05f, 1.666299924e-05f, 1.663705162e-05f, 1.661107800e-05f, 1.658507843e-05f, 1.655905295e-05f, 1.653300162e-05f, 1.650692447e-05f, 1.648082157e-05f, 1.645469295e-05f,
+1.642853867e-05f, 1.640235877e-05f, 1.637615330e-05f, 1.634992231e-05f, 1.632366585e-05f, 1.629738396e-05f, 1.627107670e-05f, 1.624474410e-05f, 1.621838623e-05f, 1.619200313e-05f,
+1.616559484e-05f, 1.613916142e-05f, 1.611270291e-05f, 1.608621937e-05f, 1.605971084e-05f, 1.603317736e-05f, 1.600661900e-05f, 1.598003579e-05f, 1.595342778e-05f, 1.592679503e-05f,
+1.590013759e-05f, 1.587345549e-05f, 1.584674880e-05f, 1.582001756e-05f, 1.579326181e-05f, 1.576648161e-05f, 1.573967701e-05f, 1.571284805e-05f, 1.568599479e-05f, 1.565911728e-05f,
+1.563221555e-05f, 1.560528967e-05f, 1.557833968e-05f, 1.555136562e-05f, 1.552436756e-05f, 1.549734554e-05f, 1.547029961e-05f, 1.544322981e-05f, 1.541613620e-05f, 1.538901883e-05f,
+1.536187775e-05f, 1.533471300e-05f, 1.530752463e-05f, 1.528031271e-05f, 1.525307726e-05f, 1.522581835e-05f, 1.519853603e-05f, 1.517123033e-05f, 1.514390133e-05f, 1.511654905e-05f,
+1.508917356e-05f, 1.506177490e-05f, 1.503435313e-05f, 1.500690829e-05f, 1.497944043e-05f, 1.495194961e-05f, 1.492443587e-05f, 1.489689926e-05f, 1.486933983e-05f, 1.484175764e-05f,
+1.481415274e-05f, 1.478652516e-05f, 1.475887498e-05f, 1.473120222e-05f, 1.470350695e-05f, 1.467578922e-05f, 1.464804908e-05f, 1.462028657e-05f, 1.459250174e-05f, 1.456469466e-05f,
+1.453686536e-05f, 1.450901390e-05f, 1.448114033e-05f, 1.445324470e-05f, 1.442532706e-05f, 1.439738746e-05f, 1.436942595e-05f, 1.434144258e-05f, 1.431343741e-05f, 1.428541048e-05f,
+1.425736185e-05f, 1.422929157e-05f, 1.420119968e-05f, 1.417308624e-05f, 1.414495129e-05f, 1.411679490e-05f, 1.408861711e-05f, 1.406041797e-05f, 1.403219754e-05f, 1.400395585e-05f,
+1.397569298e-05f, 1.394740896e-05f, 1.391910385e-05f, 1.389077770e-05f, 1.386243055e-05f, 1.383406248e-05f, 1.380567351e-05f, 1.377726371e-05f, 1.374883312e-05f, 1.372038181e-05f,
+1.369190981e-05f, 1.366341718e-05f, 1.363490398e-05f, 1.360637025e-05f, 1.357781604e-05f, 1.354924141e-05f, 1.352064641e-05f, 1.349203109e-05f, 1.346339551e-05f, 1.343473970e-05f,
+1.340606374e-05f, 1.337736766e-05f, 1.334865152e-05f, 1.331991537e-05f, 1.329115926e-05f, 1.326238325e-05f, 1.323358739e-05f, 1.320477172e-05f, 1.317593631e-05f, 1.314708120e-05f,
+1.311820645e-05f, 1.308931210e-05f, 1.306039821e-05f, 1.303146483e-05f, 1.300251202e-05f, 1.297353983e-05f, 1.294454830e-05f, 1.291553749e-05f, 1.288650746e-05f, 1.285745825e-05f,
+1.282838992e-05f, 1.279930252e-05f, 1.277019610e-05f, 1.274107072e-05f, 1.271192642e-05f, 1.268276327e-05f, 1.265358130e-05f, 1.262438059e-05f, 1.259516117e-05f, 1.256592310e-05f,
+1.253666643e-05f, 1.250739122e-05f, 1.247809751e-05f, 1.244878537e-05f, 1.241945484e-05f, 1.239010598e-05f, 1.236073883e-05f, 1.233135346e-05f, 1.230194991e-05f, 1.227252824e-05f,
+1.224308851e-05f, 1.221363075e-05f, 1.218415503e-05f, 1.215466140e-05f, 1.212514992e-05f, 1.209562062e-05f, 1.206607358e-05f, 1.203650884e-05f, 1.200692645e-05f, 1.197732648e-05f,
+1.194770896e-05f, 1.191807395e-05f, 1.188842152e-05f, 1.185875170e-05f, 1.182906456e-05f, 1.179936015e-05f, 1.176963851e-05f, 1.173989971e-05f, 1.171014380e-05f, 1.168037082e-05f,
+1.165058084e-05f, 1.162077391e-05f, 1.159095008e-05f, 1.156110940e-05f, 1.153125193e-05f, 1.150137772e-05f, 1.147148683e-05f, 1.144157930e-05f, 1.141165520e-05f, 1.138171457e-05f,
+1.135175747e-05f, 1.132178395e-05f, 1.129179407e-05f, 1.126178788e-05f, 1.123176543e-05f, 1.120172678e-05f, 1.117167198e-05f, 1.114160109e-05f, 1.111151415e-05f, 1.108141123e-05f,
+1.105129237e-05f, 1.102115763e-05f, 1.099100707e-05f, 1.096084074e-05f, 1.093065869e-05f, 1.090046097e-05f, 1.087024764e-05f, 1.084001876e-05f, 1.080977438e-05f, 1.077951455e-05f,
+1.074923932e-05f, 1.071894875e-05f, 1.068864290e-05f, 1.065832182e-05f, 1.062798556e-05f, 1.059763417e-05f, 1.056726772e-05f, 1.053688625e-05f, 1.050648982e-05f, 1.047607849e-05f,
+1.044565230e-05f, 1.041521131e-05f, 1.038475559e-05f, 1.035428517e-05f, 1.032380011e-05f, 1.029330048e-05f, 1.026278632e-05f, 1.023225769e-05f, 1.020171464e-05f, 1.017115722e-05f,
+1.014058550e-05f, 1.010999953e-05f, 1.007939935e-05f, 1.004878503e-05f, 1.001815662e-05f, 9.987514178e-06f, 9.956857751e-06f, 9.926187397e-06f, 9.895503170e-06f, 9.864805126e-06f,
+9.834093320e-06f, 9.803367805e-06f, 9.772628636e-06f, 9.741875869e-06f, 9.711109557e-06f, 9.680329756e-06f, 9.649536520e-06f, 9.618729905e-06f, 9.587909964e-06f, 9.557076753e-06f,
+9.526230326e-06f, 9.495370739e-06f, 9.464498046e-06f, 9.433612302e-06f, 9.402713562e-06f, 9.371801881e-06f, 9.340877314e-06f, 9.309939915e-06f, 9.278989740e-06f, 9.248026843e-06f,
+9.217051280e-06f, 9.186063106e-06f, 9.155062376e-06f, 9.124049144e-06f, 9.093023465e-06f, 9.061985396e-06f, 9.030934990e-06f, 8.999872303e-06f, 8.968797390e-06f, 8.937710307e-06f,
+8.906611107e-06f, 8.875499847e-06f, 8.844376582e-06f, 8.813241367e-06f, 8.782094256e-06f, 8.750935306e-06f, 8.719764571e-06f, 8.688582107e-06f, 8.657387969e-06f, 8.626182212e-06f,
+8.594964892e-06f, 8.563736063e-06f, 8.532495782e-06f, 8.501244103e-06f, 8.469981081e-06f, 8.438706773e-06f, 8.407421233e-06f, 8.376124518e-06f, 8.344816681e-06f, 8.313497779e-06f,
+8.282167868e-06f, 8.250827002e-06f, 8.219475237e-06f, 8.188112628e-06f, 8.156739231e-06f, 8.125355102e-06f, 8.093960296e-06f, 8.062554868e-06f, 8.031138874e-06f, 7.999712369e-06f,
+7.968275410e-06f, 7.936828051e-06f, 7.905370348e-06f, 7.873902357e-06f, 7.842424133e-06f, 7.810935733e-06f, 7.779437211e-06f, 7.747928623e-06f, 7.716410025e-06f, 7.684881472e-06f,
+7.653343021e-06f, 7.621794726e-06f, 7.590236644e-06f, 7.558668830e-06f, 7.527091341e-06f, 7.495504231e-06f, 7.463907556e-06f, 7.432301372e-06f, 7.400685735e-06f, 7.369060701e-06f,
+7.337426326e-06f, 7.305782664e-06f, 7.274129773e-06f, 7.242467707e-06f, 7.210796523e-06f, 7.179116276e-06f, 7.147427023e-06f, 7.115728819e-06f, 7.084021719e-06f, 7.052305781e-06f,
+7.020581059e-06f, 6.988847610e-06f, 6.957105489e-06f, 6.925354752e-06f, 6.893595456e-06f, 6.861827656e-06f, 6.830051408e-06f, 6.798266768e-06f, 6.766473792e-06f, 6.734672536e-06f,
+6.702863056e-06f, 6.671045408e-06f, 6.639219647e-06f, 6.607385831e-06f, 6.575544014e-06f, 6.543694252e-06f, 6.511836603e-06f, 6.479971121e-06f, 6.448097864e-06f, 6.416216886e-06f,
+6.384328243e-06f, 6.352431993e-06f, 6.320528191e-06f, 6.288616893e-06f, 6.256698155e-06f, 6.224772033e-06f, 6.192838583e-06f, 6.160897862e-06f, 6.128949925e-06f, 6.096994828e-06f,
+6.065032628e-06f, 6.033063381e-06f, 6.001087143e-06f, 5.969103969e-06f, 5.937113917e-06f, 5.905117042e-06f, 5.873113400e-06f, 5.841103048e-06f, 5.809086041e-06f, 5.777062436e-06f,
+5.745032290e-06f, 5.712995657e-06f, 5.680952594e-06f, 5.648903158e-06f, 5.616847405e-06f, 5.584785391e-06f, 5.552717171e-06f, 5.520642803e-06f, 5.488562342e-06f, 5.456475845e-06f,
+5.424383368e-06f, 5.392284966e-06f, 5.360180698e-06f, 5.328070617e-06f, 5.295954781e-06f, 5.263833246e-06f, 5.231706069e-06f, 5.199573305e-06f, 5.167435010e-06f, 5.135291241e-06f,
+5.103142055e-06f, 5.070987507e-06f, 5.038827653e-06f, 5.006662551e-06f, 4.974492256e-06f, 4.942316824e-06f, 4.910136311e-06f, 4.877950775e-06f, 4.845760271e-06f, 4.813564856e-06f,
+4.781364585e-06f, 4.749159516e-06f, 4.716949703e-06f, 4.684735205e-06f, 4.652516076e-06f, 4.620292374e-06f, 4.588064154e-06f, 4.555831473e-06f, 4.523594387e-06f, 4.491352952e-06f,
+4.459107225e-06f, 4.426857262e-06f, 4.394603119e-06f, 4.362344853e-06f, 4.330082520e-06f, 4.297816176e-06f, 4.265545877e-06f, 4.233271680e-06f, 4.200993641e-06f, 4.168711817e-06f,
+4.136426263e-06f, 4.104137037e-06f, 4.071844193e-06f, 4.039547789e-06f, 4.007247881e-06f, 3.974944526e-06f, 3.942637779e-06f, 3.910327696e-06f, 3.878014335e-06f, 3.845697751e-06f,
+3.813378001e-06f, 3.781055141e-06f, 3.748729228e-06f, 3.716400317e-06f, 3.684068465e-06f, 3.651733728e-06f, 3.619396163e-06f, 3.587055825e-06f, 3.554712772e-06f, 3.522367059e-06f,
+3.490018743e-06f, 3.457667880e-06f, 3.425314527e-06f, 3.392958739e-06f, 3.360600572e-06f, 3.328240084e-06f, 3.295877331e-06f, 3.263512368e-06f, 3.231145252e-06f, 3.198776040e-06f,
+3.166404787e-06f, 3.134031550e-06f, 3.101656385e-06f, 3.069279348e-06f, 3.036900496e-06f, 3.004519885e-06f, 2.972137571e-06f, 2.939753611e-06f, 2.907368060e-06f, 2.874980975e-06f,
+2.842592413e-06f, 2.810202428e-06f, 2.777811079e-06f, 2.745418420e-06f, 2.713024508e-06f, 2.680629400e-06f, 2.648233151e-06f, 2.615835818e-06f, 2.583437457e-06f, 2.551038124e-06f,
+2.518637875e-06f, 2.486236767e-06f, 2.453834856e-06f, 2.421432198e-06f, 2.389028849e-06f, 2.356624865e-06f, 2.324220303e-06f, 2.291815218e-06f, 2.259409668e-06f, 2.227003707e-06f,
+2.194597393e-06f, 2.162190781e-06f, 2.129783927e-06f, 2.097376888e-06f, 2.064969720e-06f, 2.032562478e-06f, 2.000155220e-06f, 1.967748000e-06f, 1.935340876e-06f, 1.902933903e-06f,
+1.870527138e-06f, 1.838120636e-06f, 1.805714454e-06f, 1.773308647e-06f, 1.740903272e-06f, 1.708498385e-06f, 1.676094042e-06f, 1.643690298e-06f, 1.611287211e-06f, 1.578884835e-06f,
+1.546483228e-06f, 1.514082445e-06f, 1.481682541e-06f, 1.449283574e-06f, 1.416885599e-06f, 1.384488671e-06f, 1.352092848e-06f, 1.319698185e-06f, 1.287304738e-06f, 1.254912562e-06f,
+1.222521715e-06f, 1.190132251e-06f, 1.157744227e-06f, 1.125357699e-06f, 1.092972722e-06f, 1.060589353e-06f, 1.028207647e-06f, 9.958276609e-07f, 9.634494495e-07f, 9.310730692e-07f,
+8.986985758e-07f, 8.663260251e-07f, 8.339554730e-07f, 8.015869754e-07f, 7.692205880e-07f, 7.368563666e-07f, 7.044943672e-07f, 6.721346454e-07f, 6.397772570e-07f, 6.074222579e-07f,
+5.750697037e-07f, 5.427196503e-07f, 5.103721534e-07f, 4.780272688e-07f, 4.456850520e-07f, 4.133455589e-07f, 3.810088452e-07f, 3.486749665e-07f, 3.163439786e-07f, 2.840159371e-07f,
+2.516908976e-07f, 2.193689158e-07f, 1.870500474e-07f, 1.547343480e-07f, 1.224218731e-07f, 9.011267838e-08f, 5.780681945e-08f, 2.550435187e-08f, -6.794668805e-09f, -3.909018701e-08f,
+-7.138214721e-08f, -1.036704939e-07f, -1.359551715e-07f, -1.682361245e-07f, -2.005132975e-07f, -2.327866350e-07f, -2.650560814e-07f, -2.973215814e-07f, -3.295830795e-07f, -3.618405203e-07f,
+-3.940938484e-07f, -4.263430083e-07f, -4.585879446e-07f, -4.908286021e-07f, -5.230649253e-07f, -5.552968589e-07f, -5.875243475e-07f, -6.197473358e-07f, -6.519657685e-07f, -6.841795904e-07f,
+-7.163887461e-07f, -7.485931804e-07f, -7.807928380e-07f, -8.129876637e-07f, -8.451776022e-07f, -8.773625984e-07f, -9.095425970e-07f, -9.417175429e-07f, -9.738873809e-07f, -1.006052056e-06f,
+-1.038211513e-06f, -1.070365696e-06f, -1.102514551e-06f, -1.134658023e-06f, -1.166796056e-06f, -1.198928595e-06f, -1.231055586e-06f, -1.263176973e-06f, -1.295292701e-06f, -1.327402716e-06f,
+-1.359506962e-06f, -1.391605384e-06f, -1.423697928e-06f, -1.455784538e-06f, -1.487865160e-06f, -1.519939738e-06f, -1.552008218e-06f, -1.584070545e-06f, -1.616126664e-06f, -1.648176520e-06f,
+-1.680220059e-06f, -1.712257225e-06f, -1.744287964e-06f, -1.776312221e-06f, -1.808329941e-06f, -1.840341070e-06f, -1.872345552e-06f, -1.904343334e-06f, -1.936334360e-06f, -1.968318576e-06f,
+-2.000295927e-06f, -2.032266359e-06f, -2.064229817e-06f, -2.096186245e-06f, -2.128135591e-06f, -2.160077799e-06f, -2.192012814e-06f, -2.223940583e-06f, -2.255861050e-06f, -2.287774162e-06f,
+-2.319679863e-06f, -2.351578099e-06f, -2.383468816e-06f, -2.415351960e-06f, -2.447227476e-06f, -2.479095309e-06f, -2.510955405e-06f, -2.542807711e-06f, -2.574652171e-06f, -2.606488732e-06f,
+-2.638317339e-06f, -2.670137937e-06f, -2.701950473e-06f, -2.733754893e-06f, -2.765551142e-06f, -2.797339166e-06f, -2.829118910e-06f, -2.860890322e-06f, -2.892653346e-06f, -2.924407929e-06f,
+-2.956154016e-06f, -2.987891554e-06f, -3.019620488e-06f, -3.051340764e-06f, -3.083052329e-06f, -3.114755128e-06f, -3.146449108e-06f, -3.178134215e-06f, -3.209810394e-06f, -3.241477591e-06f,
+-3.273135754e-06f, -3.304784828e-06f, -3.336424759e-06f, -3.368055494e-06f, -3.399676978e-06f, -3.431289158e-06f, -3.462891981e-06f, -3.494485391e-06f, -3.526069337e-06f, -3.557643764e-06f,
+-3.589208618e-06f, -3.620763847e-06f, -3.652309395e-06f, -3.683845211e-06f, -3.715371239e-06f, -3.746887427e-06f, -3.778393721e-06f, -3.809890068e-06f, -3.841376414e-06f, -3.872852706e-06f,
+-3.904318890e-06f, -3.935774913e-06f, -3.967220722e-06f, -3.998656262e-06f, -4.030081482e-06f, -4.061496327e-06f, -4.092900745e-06f, -4.124294682e-06f, -4.155678084e-06f, -4.187050900e-06f,
+-4.218413074e-06f, -4.249764556e-06f, -4.281105290e-06f, -4.312435224e-06f, -4.343754306e-06f, -4.375062481e-06f, -4.406359697e-06f, -4.437645901e-06f, -4.468921040e-06f, -4.500185061e-06f,
+-4.531437912e-06f, -4.562679538e-06f, -4.593909887e-06f, -4.625128907e-06f, -4.656336545e-06f, -4.687532747e-06f, -4.718717461e-06f, -4.749890635e-06f, -4.781052215e-06f, -4.812202149e-06f,
+-4.843340383e-06f, -4.874466867e-06f, -4.905581546e-06f, -4.936684369e-06f, -4.967775282e-06f, -4.998854233e-06f, -5.029921170e-06f, -5.060976040e-06f, -5.092018791e-06f, -5.123049369e-06f,
+-5.154067724e-06f, -5.185073802e-06f, -5.216067551e-06f, -5.247048919e-06f, -5.278017853e-06f, -5.308974302e-06f, -5.339918212e-06f, -5.370849532e-06f, -5.401768209e-06f, -5.432674192e-06f,
+-5.463567428e-06f, -5.494447865e-06f, -5.525315450e-06f, -5.556170133e-06f, -5.587011861e-06f, -5.617840581e-06f, -5.648656243e-06f, -5.679458793e-06f, -5.710248180e-06f, -5.741024353e-06f,
+-5.771787258e-06f, -5.802536845e-06f, -5.833273062e-06f, -5.863995857e-06f, -5.894705178e-06f, -5.925400973e-06f, -5.956083191e-06f, -5.986751780e-06f, -6.017406689e-06f, -6.048047865e-06f,
+-6.078675257e-06f, -6.109288815e-06f, -6.139888485e-06f, -6.170474217e-06f, -6.201045960e-06f, -6.231603661e-06f, -6.262147270e-06f, -6.292676735e-06f, -6.323192005e-06f, -6.353693028e-06f,
+-6.384179754e-06f, -6.414652130e-06f, -6.445110106e-06f, -6.475553631e-06f, -6.505982653e-06f, -6.536397121e-06f, -6.566796985e-06f, -6.597182193e-06f, -6.627552694e-06f, -6.657908437e-06f,
+-6.688249371e-06f, -6.718575446e-06f, -6.748886609e-06f, -6.779182812e-06f, -6.809464001e-06f, -6.839730128e-06f, -6.869981141e-06f, -6.900216989e-06f, -6.930437621e-06f, -6.960642988e-06f,
+-6.990833038e-06f, -7.021007720e-06f, -7.051166984e-06f, -7.081310780e-06f, -7.111439057e-06f, -7.141551765e-06f, -7.171648852e-06f, -7.201730269e-06f, -7.231795965e-06f, -7.261845890e-06f,
+-7.291879994e-06f, -7.321898226e-06f, -7.351900535e-06f, -7.381886873e-06f, -7.411857188e-06f, -7.441811431e-06f, -7.471749550e-06f, -7.501671497e-06f, -7.531577221e-06f, -7.561466673e-06f,
+-7.591339801e-06f, -7.621196556e-06f, -7.651036889e-06f, -7.680860749e-06f, -7.710668086e-06f, -7.740458852e-06f, -7.770232994e-06f, -7.799990465e-06f, -7.829731215e-06f, -7.859455193e-06f,
+-7.889162350e-06f, -7.918852637e-06f, -7.948526003e-06f, -7.978182400e-06f, -8.007821777e-06f, -8.037444086e-06f, -8.067049276e-06f, -8.096637300e-06f, -8.126208106e-06f, -8.155761645e-06f,
+-8.185297870e-06f, -8.214816729e-06f, -8.244318174e-06f, -8.273802156e-06f, -8.303268626e-06f, -8.332717534e-06f, -8.362148832e-06f, -8.391562469e-06f, -8.420958398e-06f, -8.450336570e-06f,
+-8.479696934e-06f, -8.509039443e-06f, -8.538364048e-06f, -8.567670699e-06f, -8.596959348e-06f, -8.626229947e-06f, -8.655482446e-06f, -8.684716796e-06f, -8.713932950e-06f, -8.743130858e-06f,
+-8.772310472e-06f, -8.801471743e-06f, -8.830614624e-06f, -8.859739064e-06f, -8.888845017e-06f, -8.917932433e-06f, -8.947001264e-06f, -8.976051462e-06f, -9.005082978e-06f, -9.034095765e-06f,
+-9.063089774e-06f, -9.092064957e-06f, -9.121021266e-06f, -9.149958653e-06f, -9.178877069e-06f, -9.207776467e-06f, -9.236656798e-06f, -9.265518015e-06f, -9.294360070e-06f, -9.323182915e-06f,
+-9.351986502e-06f, -9.380770784e-06f, -9.409535711e-06f, -9.438281238e-06f, -9.467007316e-06f, -9.495713898e-06f, -9.524400935e-06f, -9.553068381e-06f, -9.581716188e-06f, -9.610344309e-06f,
+-9.638952695e-06f, -9.667541300e-06f, -9.696110076e-06f, -9.724658976e-06f, -9.753187952e-06f, -9.781696958e-06f, -9.810185946e-06f, -9.838654869e-06f, -9.867103680e-06f, -9.895532332e-06f,
+-9.923940778e-06f, -9.952328970e-06f, -9.980696863e-06f, -1.000904441e-05f, -1.003737156e-05f, -1.006567827e-05f, -1.009396449e-05f, -1.012223018e-05f, -1.015047529e-05f, -1.017869977e-05f,
+-1.020690357e-05f, -1.023508666e-05f, -1.026324897e-05f, -1.029139047e-05f, -1.031951112e-05f, -1.034761085e-05f, -1.037568963e-05f, -1.040374741e-05f, -1.043178415e-05f, -1.045979979e-05f,
+-1.048779430e-05f, -1.051576762e-05f, -1.054371970e-05f, -1.057165052e-05f, -1.059956001e-05f, -1.062744813e-05f, -1.065531483e-05f, -1.068316007e-05f, -1.071098381e-05f, -1.073878600e-05f,
+-1.076656658e-05f, -1.079432552e-05f, -1.082206278e-05f, -1.084977829e-05f, -1.087747203e-05f, -1.090514393e-05f, -1.093279397e-05f, -1.096042209e-05f, -1.098802824e-05f, -1.101561239e-05f,
+-1.104317448e-05f, -1.107071447e-05f, -1.109823232e-05f, -1.112572797e-05f, -1.115320140e-05f, -1.118065254e-05f, -1.120808135e-05f, -1.123548780e-05f, -1.126287183e-05f, -1.129023339e-05f,
+-1.131757246e-05f, -1.134488897e-05f, -1.137218289e-05f, -1.139945416e-05f, -1.142670276e-05f, -1.145392862e-05f, -1.148113171e-05f, -1.150831197e-05f, -1.153546938e-05f, -1.156260388e-05f,
+-1.158971542e-05f, -1.161680397e-05f, -1.164386948e-05f, -1.167091190e-05f, -1.169793119e-05f, -1.172492730e-05f, -1.175190020e-05f, -1.177884983e-05f, -1.180577616e-05f, -1.183267914e-05f,
+-1.185955872e-05f, -1.188641486e-05f, -1.191324752e-05f, -1.194005665e-05f, -1.196684221e-05f, -1.199360415e-05f, -1.202034244e-05f, -1.204705703e-05f, -1.207374786e-05f, -1.210041491e-05f,
+-1.212705813e-05f, -1.215367747e-05f, -1.218027289e-05f, -1.220684434e-05f, -1.223339179e-05f, -1.225991519e-05f, -1.228641449e-05f, -1.231288966e-05f, -1.233934065e-05f, -1.236576741e-05f,
+-1.239216991e-05f, -1.241854809e-05f, -1.244490193e-05f, -1.247123137e-05f, -1.249753637e-05f, -1.252381688e-05f, -1.255007288e-05f, -1.257630430e-05f, -1.260251112e-05f, -1.262869328e-05f,
+-1.265485075e-05f, -1.268098348e-05f, -1.270709143e-05f, -1.273317456e-05f, -1.275923282e-05f, -1.278526617e-05f, -1.281127458e-05f, -1.283725799e-05f, -1.286321636e-05f, -1.288914966e-05f,
+-1.291505784e-05f, -1.294094085e-05f, -1.296679867e-05f, -1.299263124e-05f, -1.301843852e-05f, -1.304422047e-05f, -1.306997705e-05f, -1.309570821e-05f, -1.312141392e-05f, -1.314709414e-05f,
+-1.317274881e-05f, -1.319837791e-05f, -1.322398138e-05f, -1.324955919e-05f, -1.327511129e-05f, -1.330063765e-05f, -1.332613822e-05f, -1.335161296e-05f, -1.337706183e-05f, -1.340248479e-05f,
+-1.342788180e-05f, -1.345325281e-05f, -1.347859779e-05f, -1.350391669e-05f, -1.352920947e-05f, -1.355447610e-05f, -1.357971652e-05f, -1.360493071e-05f, -1.363011861e-05f, -1.365528020e-05f,
+-1.368041542e-05f, -1.370552424e-05f, -1.373060661e-05f, -1.375566250e-05f, -1.378069187e-05f, -1.380569467e-05f, -1.383067087e-05f, -1.385562041e-05f, -1.388054328e-05f, -1.390543941e-05f,
+-1.393030878e-05f, -1.395515135e-05f, -1.397996706e-05f, -1.400475589e-05f, -1.402951780e-05f, -1.405425273e-05f, -1.407896066e-05f, -1.410364154e-05f, -1.412829534e-05f, -1.415292200e-05f,
+-1.417752151e-05f, -1.420209380e-05f, -1.422663886e-05f, -1.425115662e-05f, -1.427564707e-05f, -1.430011015e-05f, -1.432454582e-05f, -1.434895406e-05f, -1.437333481e-05f, -1.439768804e-05f,
+-1.442201371e-05f, -1.444631178e-05f, -1.447058221e-05f, -1.449482497e-05f, -1.451904001e-05f, -1.454322729e-05f, -1.456738678e-05f, -1.459151844e-05f, -1.461562223e-05f, -1.463969810e-05f,
+-1.466374603e-05f, -1.468776596e-05f, -1.471175787e-05f, -1.473572172e-05f, -1.475965746e-05f, -1.478356507e-05f, -1.480744449e-05f, -1.483129569e-05f, -1.485511864e-05f, -1.487891329e-05f,
+-1.490267961e-05f, -1.492641756e-05f, -1.495012710e-05f, -1.497380819e-05f, -1.499746080e-05f, -1.502108489e-05f, -1.504468041e-05f, -1.506824734e-05f, -1.509178563e-05f, -1.511529524e-05f,
+-1.513877615e-05f, -1.516222831e-05f, -1.518565168e-05f, -1.520904622e-05f, -1.523241191e-05f, -1.525574870e-05f, -1.527905655e-05f, -1.530233543e-05f, -1.532558530e-05f, -1.534880612e-05f,
+-1.537199786e-05f, -1.539516047e-05f, -1.541829393e-05f, -1.544139819e-05f, -1.546447323e-05f, -1.548751899e-05f, -1.551053545e-05f, -1.553352256e-05f, -1.555648030e-05f, -1.557940862e-05f,
+-1.560230749e-05f, -1.562517687e-05f, -1.564801672e-05f, -1.567082702e-05f, -1.569360772e-05f, -1.571635878e-05f, -1.573908018e-05f, -1.576177187e-05f, -1.578443381e-05f, -1.580706598e-05f,
+-1.582966834e-05f, -1.585224084e-05f, -1.587478346e-05f, -1.589729616e-05f, -1.591977890e-05f, -1.594223165e-05f, -1.596465437e-05f, -1.598704703e-05f, -1.600940958e-05f, -1.603174201e-05f,
+-1.605404426e-05f, -1.607631630e-05f, -1.609855811e-05f, -1.612076964e-05f, -1.614295085e-05f, -1.616510172e-05f, -1.618722221e-05f, -1.620931229e-05f, -1.623137191e-05f, -1.625340104e-05f,
+-1.627539965e-05f, -1.629736771e-05f, -1.631930518e-05f, -1.634121202e-05f, -1.636308820e-05f, -1.638493369e-05f, -1.640674844e-05f, -1.642853244e-05f, -1.645028563e-05f, -1.647200800e-05f,
+-1.649369949e-05f, -1.651536009e-05f, -1.653698975e-05f, -1.655858844e-05f, -1.658015613e-05f, -1.660169278e-05f, -1.662319837e-05f, -1.664467284e-05f, -1.666611618e-05f, -1.668752835e-05f,
+-1.670890931e-05f, -1.673025903e-05f, -1.675157747e-05f, -1.677286461e-05f, -1.679412041e-05f, -1.681534484e-05f, -1.683653786e-05f, -1.685769944e-05f, -1.687882955e-05f, -1.689992814e-05f,
+-1.692099520e-05f, -1.694203069e-05f, -1.696303457e-05f, -1.698400681e-05f, -1.700494738e-05f, -1.702585625e-05f, -1.704673338e-05f, -1.706757874e-05f, -1.708839229e-05f, -1.710917401e-05f,
+-1.712992387e-05f, -1.715064182e-05f, -1.717132784e-05f, -1.719198190e-05f, -1.721260395e-05f, -1.723319398e-05f, -1.725375195e-05f, -1.727427782e-05f, -1.729477157e-05f, -1.731523316e-05f,
+-1.733566256e-05f, -1.735605974e-05f, -1.737642467e-05f, -1.739675731e-05f, -1.741705763e-05f, -1.743732560e-05f, -1.745756120e-05f, -1.747776438e-05f, -1.749793512e-05f, -1.751807339e-05f,
+-1.753817915e-05f, -1.755825237e-05f, -1.757829302e-05f, -1.759830108e-05f, -1.761827650e-05f, -1.763821926e-05f, -1.765812933e-05f, -1.767800668e-05f, -1.769785127e-05f, -1.771766308e-05f,
+-1.773744207e-05f, -1.775718821e-05f, -1.777690147e-05f, -1.779658183e-05f, -1.781622925e-05f, -1.783584370e-05f, -1.785542516e-05f, -1.787497358e-05f, -1.789448894e-05f, -1.791397121e-05f,
+-1.793342036e-05f, -1.795283637e-05f, -1.797221919e-05f, -1.799156880e-05f, -1.801088517e-05f, -1.803016827e-05f, -1.804941807e-05f, -1.806863455e-05f, -1.808781766e-05f, -1.810696738e-05f,
+-1.812608369e-05f, -1.814516655e-05f, -1.816421593e-05f, -1.818323181e-05f, -1.820221415e-05f, -1.822116292e-05f, -1.824007810e-05f, -1.825895966e-05f, -1.827780756e-05f, -1.829662178e-05f,
+-1.831540230e-05f, -1.833414907e-05f, -1.835286208e-05f, -1.837154129e-05f, -1.839018667e-05f, -1.840879820e-05f, -1.842737585e-05f, -1.844591959e-05f, -1.846442939e-05f, -1.848290522e-05f,
+-1.850134705e-05f, -1.851975486e-05f, -1.853812862e-05f, -1.855646830e-05f, -1.857477387e-05f, -1.859304530e-05f, -1.861128257e-05f, -1.862948564e-05f, -1.864765450e-05f, -1.866578911e-05f,
+-1.868388944e-05f, -1.870195547e-05f, -1.871998716e-05f, -1.873798450e-05f, -1.875594746e-05f, -1.877387600e-05f, -1.879177010e-05f, -1.880962973e-05f, -1.882745487e-05f, -1.884524548e-05f,
+-1.886300155e-05f, -1.888072304e-05f, -1.889840993e-05f, -1.891606219e-05f, -1.893367979e-05f, -1.895126271e-05f, -1.896881092e-05f, -1.898632439e-05f, -1.900380310e-05f, -1.902124702e-05f,
+-1.903865612e-05f, -1.905603038e-05f, -1.907336977e-05f, -1.909067427e-05f, -1.910794385e-05f, -1.912517848e-05f, -1.914237813e-05f, -1.915954279e-05f, -1.917667242e-05f, -1.919376700e-05f,
+-1.921082650e-05f, -1.922785090e-05f, -1.924484017e-05f, -1.926179429e-05f, -1.927871323e-05f, -1.929559697e-05f, -1.931244547e-05f, -1.932925872e-05f, -1.934603669e-05f, -1.936277935e-05f,
+-1.937948668e-05f, -1.939615865e-05f, -1.941279524e-05f, -1.942939643e-05f, -1.944596219e-05f, -1.946249249e-05f, -1.947898730e-05f, -1.949544662e-05f, -1.951187040e-05f, -1.952825863e-05f,
+-1.954461127e-05f, -1.956092832e-05f, -1.957720974e-05f, -1.959345550e-05f, -1.960966559e-05f, -1.962583997e-05f, -1.964197863e-05f, -1.965808155e-05f, -1.967414869e-05f, -1.969018003e-05f,
+-1.970617555e-05f, -1.972213523e-05f, -1.973805904e-05f, -1.975394695e-05f, -1.976979895e-05f, -1.978561501e-05f, -1.980139511e-05f, -1.981713923e-05f, -1.983284733e-05f, -1.984851940e-05f,
+-1.986415541e-05f, -1.987975535e-05f, -1.989531918e-05f, -1.991084689e-05f, -1.992633845e-05f, -1.994179384e-05f, -1.995721303e-05f, -1.997259601e-05f, -1.998794275e-05f, -2.000325322e-05f,
+-2.001852742e-05f, -2.003376530e-05f, -2.004896685e-05f, -2.006413206e-05f, -2.007926089e-05f, -2.009435332e-05f, -2.010940933e-05f, -2.012442890e-05f, -2.013941201e-05f, -2.015435864e-05f,
+-2.016926876e-05f, -2.018414235e-05f, -2.019897939e-05f, -2.021377985e-05f, -2.022854373e-05f, -2.024327099e-05f, -2.025796161e-05f, -2.027261557e-05f, -2.028723286e-05f, -2.030181344e-05f,
+-2.031635730e-05f, -2.033086441e-05f, -2.034533477e-05f, -2.035976833e-05f, -2.037416509e-05f, -2.038852503e-05f, -2.040284811e-05f, -2.041713432e-05f, -2.043138365e-05f, -2.044559606e-05f,
+-2.045977155e-05f, -2.047391008e-05f, -2.048801164e-05f, -2.050207620e-05f, -2.051610376e-05f, -2.053009428e-05f, -2.054404774e-05f, -2.055796414e-05f, -2.057184344e-05f, -2.058568562e-05f,
+-2.059949068e-05f, -2.061325858e-05f, -2.062698930e-05f, -2.064068284e-05f, -2.065433916e-05f, -2.066795825e-05f, -2.068154008e-05f, -2.069508465e-05f, -2.070859192e-05f, -2.072206189e-05f,
+-2.073549452e-05f, -2.074888981e-05f, -2.076224773e-05f, -2.077556826e-05f, -2.078885139e-05f, -2.080209709e-05f, -2.081530535e-05f, -2.082847615e-05f, -2.084160947e-05f, -2.085470529e-05f,
+-2.086776358e-05f, -2.088078435e-05f, -2.089376755e-05f, -2.090671319e-05f, -2.091962123e-05f, -2.093249166e-05f, -2.094532446e-05f, -2.095811962e-05f, -2.097087711e-05f, -2.098359692e-05f,
+-2.099627903e-05f, -2.100892342e-05f, -2.102153007e-05f, -2.103409897e-05f, -2.104663010e-05f, -2.105912344e-05f, -2.107157897e-05f, -2.108399668e-05f, -2.109637655e-05f, -2.110871856e-05f,
+-2.112102269e-05f, -2.113328893e-05f, -2.114551726e-05f, -2.115770766e-05f, -2.116986012e-05f, -2.118197462e-05f, -2.119405113e-05f, -2.120608966e-05f, -2.121809017e-05f, -2.123005265e-05f,
+-2.124197709e-05f, -2.125386347e-05f, -2.126571176e-05f, -2.127752197e-05f, -2.128929406e-05f, -2.130102803e-05f, -2.131272385e-05f, -2.132438152e-05f, -2.133600101e-05f, -2.134758231e-05f,
+-2.135912540e-05f, -2.137063027e-05f, -2.138209690e-05f, -2.139352528e-05f, -2.140491539e-05f, -2.141626721e-05f, -2.142758073e-05f, -2.143885593e-05f, -2.145009281e-05f, -2.146129133e-05f,
+-2.147245150e-05f, -2.148357328e-05f, -2.149465668e-05f, -2.150570166e-05f, -2.151670823e-05f, -2.152767635e-05f, -2.153860603e-05f, -2.154949724e-05f, -2.156034996e-05f, -2.157116419e-05f,
+-2.158193991e-05f, -2.159267711e-05f, -2.160337576e-05f, -2.161403586e-05f, -2.162465740e-05f, -2.163524035e-05f, -2.164578470e-05f, -2.165629045e-05f, -2.166675757e-05f, -2.167718605e-05f,
+-2.168757588e-05f, -2.169792704e-05f, -2.170823952e-05f, -2.171851331e-05f, -2.172874840e-05f, -2.173894476e-05f, -2.174910239e-05f, -2.175922127e-05f, -2.176930139e-05f, -2.177934273e-05f,
+-2.178934529e-05f, -2.179930905e-05f, -2.180923400e-05f, -2.181912012e-05f, -2.182896740e-05f, -2.183877583e-05f, -2.184854540e-05f, -2.185827608e-05f, -2.186796788e-05f, -2.187762078e-05f,
+-2.188723476e-05f, -2.189680981e-05f, -2.190634592e-05f, -2.191584309e-05f, -2.192530128e-05f, -2.193472050e-05f, -2.194410074e-05f, -2.195344197e-05f, -2.196274419e-05f, -2.197200738e-05f,
+-2.198123154e-05f, -2.199041666e-05f, -2.199956271e-05f, -2.200866969e-05f, -2.201773759e-05f, -2.202676640e-05f, -2.203575610e-05f, -2.204470668e-05f, -2.205361814e-05f, -2.206249046e-05f,
+-2.207132362e-05f, -2.208011763e-05f, -2.208887246e-05f, -2.209758811e-05f, -2.210626457e-05f, -2.211490182e-05f, -2.212349986e-05f, -2.213205867e-05f, -2.214057825e-05f, -2.214905857e-05f,
+-2.215749964e-05f, -2.216590145e-05f, -2.217426397e-05f, -2.218258721e-05f, -2.219087115e-05f, -2.219911578e-05f, -2.220732109e-05f, -2.221548708e-05f, -2.222361372e-05f, -2.223170102e-05f,
+-2.223974896e-05f, -2.224775753e-05f, -2.225572673e-05f, -2.226365654e-05f, -2.227154695e-05f, -2.227939796e-05f, -2.228720955e-05f, -2.229498172e-05f, -2.230271446e-05f, -2.231040776e-05f,
+-2.231806160e-05f, -2.232567599e-05f, -2.233325090e-05f, -2.234078634e-05f, -2.234828229e-05f, -2.235573875e-05f, -2.236315570e-05f, -2.237053314e-05f, -2.237787106e-05f, -2.238516945e-05f,
+-2.239242830e-05f, -2.239964761e-05f, -2.240682736e-05f, -2.241396755e-05f, -2.242106817e-05f, -2.242812922e-05f, -2.243515067e-05f, -2.244213253e-05f, -2.244907480e-05f, -2.245597745e-05f,
+-2.246284048e-05f, -2.246966389e-05f, -2.247644767e-05f, -2.248319181e-05f, -2.248989630e-05f, -2.249656114e-05f, -2.250318631e-05f, -2.250977182e-05f, -2.251631765e-05f, -2.252282380e-05f,
+-2.252929026e-05f, -2.253571702e-05f, -2.254210408e-05f, -2.254845143e-05f, -2.255475907e-05f, -2.256102698e-05f, -2.256725516e-05f, -2.257344360e-05f, -2.257959230e-05f, -2.258570125e-05f,
+-2.259177045e-05f, -2.259779989e-05f, -2.260378955e-05f, -2.260973945e-05f, -2.261564956e-05f, -2.262151989e-05f, -2.262735043e-05f, -2.263314117e-05f, -2.263889211e-05f, -2.264460324e-05f,
+-2.265027456e-05f, -2.265590605e-05f, -2.266149773e-05f, -2.266704957e-05f, -2.267256157e-05f, -2.267803374e-05f, -2.268346606e-05f, -2.268885853e-05f, -2.269421114e-05f, -2.269952390e-05f,
+-2.270479678e-05f, -2.271002980e-05f, -2.271522294e-05f, -2.272037620e-05f, -2.272548958e-05f, -2.273056307e-05f, -2.273559666e-05f, -2.274059036e-05f, -2.274554416e-05f, -2.275045805e-05f,
+-2.275533203e-05f, -2.276016609e-05f, -2.276496024e-05f, -2.276971446e-05f, -2.277442876e-05f, -2.277910313e-05f, -2.278373756e-05f, -2.278833206e-05f, -2.279288661e-05f, -2.279740122e-05f,
+-2.280187588e-05f, -2.280631059e-05f, -2.281070535e-05f, -2.281506015e-05f, -2.281937498e-05f, -2.282364985e-05f, -2.282788476e-05f, -2.283207969e-05f, -2.283623465e-05f, -2.284034964e-05f,
+-2.284442464e-05f, -2.284845966e-05f, -2.285245470e-05f, -2.285640976e-05f, -2.286032482e-05f, -2.286419989e-05f, -2.286803497e-05f, -2.287183005e-05f, -2.287558513e-05f, -2.287930021e-05f,
+-2.288297529e-05f, -2.288661036e-05f, -2.289020543e-05f, -2.289376048e-05f, -2.289727553e-05f, -2.290075057e-05f, -2.290418559e-05f, -2.290758059e-05f, -2.291093558e-05f, -2.291425055e-05f,
+-2.291752550e-05f, -2.292076043e-05f, -2.292395534e-05f, -2.292711022e-05f, -2.293022508e-05f, -2.293329992e-05f, -2.293633472e-05f, -2.293932950e-05f, -2.294228425e-05f, -2.294519897e-05f,
+-2.294807367e-05f, -2.295090833e-05f, -2.295370296e-05f, -2.295645756e-05f, -2.295917212e-05f, -2.296184666e-05f, -2.296448116e-05f, -2.296707563e-05f, -2.296963007e-05f, -2.297214447e-05f,
+-2.297461885e-05f, -2.297705319e-05f, -2.297944749e-05f, -2.298180177e-05f, -2.298411601e-05f, -2.298639022e-05f, -2.298862440e-05f, -2.299081855e-05f, -2.299297266e-05f, -2.299508675e-05f,
+-2.299716081e-05f, -2.299919484e-05f, -2.300118885e-05f, -2.300314282e-05f, -2.300505678e-05f, -2.300693070e-05f, -2.300876461e-05f, -2.301055849e-05f, -2.301231235e-05f, -2.301402619e-05f,
+-2.301570002e-05f, -2.301733383e-05f, -2.301892762e-05f, -2.302048140e-05f, -2.302199516e-05f, -2.302346892e-05f, -2.302490267e-05f, -2.302629641e-05f, -2.302765015e-05f, -2.302896389e-05f,
+-2.303023762e-05f, -2.303147136e-05f, -2.303266510e-05f, -2.303381885e-05f, -2.303493260e-05f, -2.303600637e-05f, -2.303704015e-05f, -2.303803395e-05f, -2.303898776e-05f, -2.303990160e-05f,
+-2.304077546e-05f, -2.304160935e-05f, -2.304240327e-05f, -2.304315722e-05f, -2.304387121e-05f, -2.304454523e-05f, -2.304517930e-05f, -2.304577342e-05f, -2.304632758e-05f, -2.304684180e-05f,
+-2.304731607e-05f, -2.304775040e-05f, -2.304814480e-05f, -2.304849926e-05f, -2.304881379e-05f, -2.304908840e-05f, -2.304932308e-05f, -2.304951785e-05f, -2.304967270e-05f, -2.304978764e-05f,
+-2.304986268e-05f, -2.304989781e-05f, -2.304989305e-05f, -2.304984840e-05f, -2.304976385e-05f, -2.304963943e-05f, -2.304947512e-05f, -2.304927094e-05f, -2.304902689e-05f, -2.304874297e-05f,
+-2.304841919e-05f, -2.304805556e-05f, -2.304765208e-05f, -2.304720875e-05f, -2.304672558e-05f, -2.304620257e-05f, -2.304563974e-05f, -2.304503708e-05f, -2.304439460e-05f, -2.304371231e-05f,
+-2.304299021e-05f, -2.304222831e-05f, -2.304142661e-05f, -2.304058512e-05f, -2.303970384e-05f, -2.303878278e-05f, -2.303782195e-05f, -2.303682135e-05f, -2.303578099e-05f, -2.303470088e-05f,
+-2.303358101e-05f, -2.303242141e-05f, -2.303122206e-05f, -2.302998299e-05f, -2.302870419e-05f, -2.302738568e-05f, -2.302602745e-05f, -2.302462952e-05f, -2.302319189e-05f, -2.302171458e-05f,
+-2.302019757e-05f, -2.301864090e-05f, -2.301704455e-05f, -2.301540854e-05f, -2.301373288e-05f, -2.301201756e-05f, -2.301026261e-05f, -2.300846802e-05f, -2.300663381e-05f, -2.300475998e-05f,
+-2.300284654e-05f, -2.300089349e-05f, -2.299890085e-05f, -2.299686862e-05f, -2.299479681e-05f, -2.299268543e-05f, -2.299053449e-05f, -2.298834399e-05f, -2.298611394e-05f, -2.298384435e-05f,
+-2.298153523e-05f, -2.297918658e-05f, -2.297679843e-05f, -2.297437076e-05f, -2.297190360e-05f, -2.296939695e-05f, -2.296685082e-05f, -2.296426521e-05f, -2.296164014e-05f, -2.295897562e-05f,
+-2.295627166e-05f, -2.295352825e-05f, -2.295074542e-05f, -2.294792317e-05f, -2.294506152e-05f, -2.294216046e-05f, -2.293922001e-05f, -2.293624018e-05f, -2.293322098e-05f, -2.293016242e-05f,
+-2.292706450e-05f, -2.292392724e-05f, -2.292075065e-05f, -2.291753474e-05f, -2.291427951e-05f, -2.291098498e-05f, -2.290765115e-05f, -2.290427805e-05f, -2.290086566e-05f, -2.289741402e-05f,
+-2.289392312e-05f, -2.289039298e-05f, -2.288682361e-05f, -2.288321501e-05f, -2.287956721e-05f, -2.287588020e-05f, -2.287215400e-05f, -2.286838863e-05f, -2.286458409e-05f, -2.286074038e-05f,
+-2.285685754e-05f, -2.285293555e-05f, -2.284897444e-05f, -2.284497422e-05f, -2.284093490e-05f, -2.283685648e-05f, -2.283273899e-05f, -2.282858243e-05f, -2.282438681e-05f, -2.282015214e-05f,
+-2.281587845e-05f, -2.281156572e-05f, -2.280721399e-05f, -2.280282326e-05f, -2.279839355e-05f, -2.279392486e-05f, -2.278941721e-05f, -2.278487060e-05f, -2.278028506e-05f, -2.277566059e-05f,
+-2.277099721e-05f, -2.276629492e-05f, -2.276155375e-05f, -2.275677370e-05f, -2.275195478e-05f, -2.274709701e-05f, -2.274220041e-05f, -2.273726497e-05f, -2.273229073e-05f, -2.272727768e-05f,
+-2.272222585e-05f, -2.271713523e-05f, -2.271200586e-05f, -2.270683774e-05f, -2.270163088e-05f, -2.269638531e-05f, -2.269110102e-05f, -2.268577803e-05f, -2.268041637e-05f, -2.267501603e-05f,
+-2.266957704e-05f, -2.266409941e-05f, -2.265858315e-05f, -2.265302828e-05f, -2.264743481e-05f, -2.264180275e-05f, -2.263613212e-05f, -2.263042293e-05f, -2.262467519e-05f, -2.261888893e-05f,
+-2.261306415e-05f, -2.260720086e-05f, -2.260129909e-05f, -2.259535885e-05f, -2.258938015e-05f, -2.258336301e-05f, -2.257730744e-05f, -2.257121345e-05f, -2.256508106e-05f, -2.255891029e-05f,
+-2.255270115e-05f, -2.254645365e-05f, -2.254016781e-05f, -2.253384365e-05f, -2.252748118e-05f, -2.252108041e-05f, -2.251464136e-05f, -2.250816405e-05f, -2.250164849e-05f, -2.249509470e-05f,
+-2.248850269e-05f, -2.248187248e-05f, -2.247520408e-05f, -2.246849751e-05f, -2.246175279e-05f, -2.245496993e-05f, -2.244814894e-05f, -2.244128985e-05f, -2.243439266e-05f, -2.242745740e-05f,
+-2.242048408e-05f, -2.241347272e-05f, -2.240642333e-05f, -2.239933593e-05f, -2.239221054e-05f, -2.238504717e-05f, -2.237784584e-05f, -2.237060657e-05f, -2.236332937e-05f, -2.235601426e-05f,
+-2.234866125e-05f, -2.234127037e-05f, -2.233384163e-05f, -2.232637505e-05f, -2.231887064e-05f, -2.231132842e-05f, -2.230374840e-05f, -2.229613062e-05f, -2.228847508e-05f, -2.228078180e-05f,
+-2.227305079e-05f, -2.226528208e-05f, -2.225747569e-05f, -2.224963162e-05f, -2.224174990e-05f, -2.223383055e-05f, -2.222587359e-05f, -2.221787902e-05f, -2.220984687e-05f, -2.220177717e-05f,
+-2.219366991e-05f, -2.218552513e-05f, -2.217734285e-05f, -2.216912307e-05f, -2.216086582e-05f, -2.215257112e-05f, -2.214423899e-05f, -2.213586944e-05f, -2.212746249e-05f, -2.211901816e-05f,
+-2.211053647e-05f, -2.210201745e-05f, -2.209346109e-05f, -2.208486744e-05f, -2.207623650e-05f, -2.206756830e-05f, -2.205886284e-05f, -2.205012017e-05f, -2.204134028e-05f, -2.203252320e-05f,
+-2.202366896e-05f, -2.201477756e-05f, -2.200584904e-05f, -2.199688340e-05f, -2.198788067e-05f, -2.197884087e-05f, -2.196976401e-05f, -2.196065013e-05f, -2.195149923e-05f, -2.194231134e-05f,
+-2.193308647e-05f, -2.192382466e-05f, -2.191452591e-05f, -2.190519024e-05f, -2.189581769e-05f, -2.188640826e-05f, -2.187696198e-05f, -2.186747887e-05f, -2.185795895e-05f, -2.184840224e-05f,
+-2.183880876e-05f, -2.182917853e-05f, -2.181951157e-05f, -2.180980790e-05f, -2.180006754e-05f, -2.179029052e-05f, -2.178047686e-05f, -2.177062657e-05f, -2.176073967e-05f, -2.175081620e-05f,
+-2.174085616e-05f, -2.173085958e-05f, -2.172082649e-05f, -2.171075690e-05f, -2.170065083e-05f, -2.169050831e-05f, -2.168032935e-05f, -2.167011399e-05f, -2.165986223e-05f, -2.164957411e-05f,
+-2.163924964e-05f, -2.162888885e-05f, -2.161849176e-05f, -2.160805838e-05f, -2.159758875e-05f, -2.158708288e-05f, -2.157654080e-05f, -2.156596253e-05f, -2.155534809e-05f, -2.154469750e-05f,
+-2.153401079e-05f, -2.152328797e-05f, -2.151252907e-05f, -2.150173412e-05f, -2.149090313e-05f, -2.148003614e-05f, -2.146913315e-05f, -2.145819420e-05f, -2.144721930e-05f, -2.143620848e-05f,
+-2.142516177e-05f, -2.141407918e-05f, -2.140296074e-05f, -2.139180647e-05f, -2.138061640e-05f, -2.136939054e-05f, -2.135812893e-05f, -2.134683158e-05f, -2.133549852e-05f, -2.132412978e-05f,
+-2.131272537e-05f, -2.130128532e-05f, -2.128980965e-05f, -2.127829839e-05f, -2.126675156e-05f, -2.125516918e-05f, -2.124355129e-05f, -2.123189789e-05f, -2.122020903e-05f, -2.120848471e-05f,
+-2.119672497e-05f, -2.118492983e-05f, -2.117309931e-05f, -2.116123344e-05f, -2.114933224e-05f, -2.113739574e-05f, -2.112542396e-05f, -2.111341692e-05f, -2.110137466e-05f, -2.108929719e-05f,
+-2.107718454e-05f, -2.106503673e-05f, -2.105285380e-05f, -2.104063576e-05f, -2.102838264e-05f, -2.101609446e-05f, -2.100377125e-05f, -2.099141304e-05f, -2.097901985e-05f, -2.096659171e-05f,
+-2.095412863e-05f, -2.094163065e-05f, -2.092909779e-05f, -2.091653008e-05f, -2.090392755e-05f, -2.089129021e-05f, -2.087861809e-05f, -2.086591123e-05f, -2.085316964e-05f, -2.084039335e-05f,
+-2.082758239e-05f, -2.081473678e-05f, -2.080185655e-05f, -2.078894173e-05f, -2.077599233e-05f, -2.076300840e-05f, -2.074998995e-05f, -2.073693701e-05f, -2.072384961e-05f, -2.071072777e-05f,
+-2.069757152e-05f, -2.068438089e-05f, -2.067115589e-05f, -2.065789657e-05f, -2.064460295e-05f, -2.063127504e-05f, -2.061791289e-05f, -2.060451652e-05f, -2.059108594e-05f, -2.057762120e-05f,
+-2.056412232e-05f, -2.055058932e-05f, -2.053702223e-05f, -2.052342108e-05f, -2.050978590e-05f, -2.049611671e-05f, -2.048241354e-05f, -2.046867642e-05f, -2.045490538e-05f, -2.044110044e-05f,
+-2.042726163e-05f, -2.041338898e-05f, -2.039948252e-05f, -2.038554227e-05f, -2.037156827e-05f, -2.035756053e-05f, -2.034351909e-05f, -2.032944398e-05f, -2.031533522e-05f, -2.030119285e-05f,
+-2.028701688e-05f, -2.027280736e-05f, -2.025856430e-05f, -2.024428773e-05f, -2.022997769e-05f, -2.021563420e-05f, -2.020125729e-05f, -2.018684699e-05f, -2.017240333e-05f, -2.015792634e-05f,
+-2.014341604e-05f, -2.012887246e-05f, -2.011429564e-05f, -2.009968559e-05f, -2.008504236e-05f, -2.007036597e-05f, -2.005565645e-05f, -2.004091382e-05f, -2.002613812e-05f, -2.001132938e-05f,
+-1.999648762e-05f, -1.998161287e-05f, -1.996670517e-05f, -1.995176455e-05f, -1.993679102e-05f, -1.992178463e-05f, -1.990674540e-05f, -1.989167336e-05f, -1.987656854e-05f, -1.986143098e-05f,
+-1.984626069e-05f, -1.983105771e-05f, -1.981582208e-05f, -1.980055381e-05f, -1.978525295e-05f, -1.976991952e-05f, -1.975455354e-05f, -1.973915506e-05f, -1.972372410e-05f, -1.970826069e-05f,
+-1.969276486e-05f, -1.967723665e-05f, -1.966167607e-05f, -1.964608317e-05f, -1.963045797e-05f, -1.961480051e-05f, -1.959911081e-05f, -1.958338890e-05f, -1.956763483e-05f, -1.955184861e-05f,
+-1.953603027e-05f, -1.952017986e-05f, -1.950429739e-05f, -1.948838291e-05f, -1.947243644e-05f, -1.945645801e-05f, -1.944044765e-05f, -1.942440540e-05f, -1.940833128e-05f, -1.939222534e-05f,
+-1.937608759e-05f, -1.935991807e-05f, -1.934371682e-05f, -1.932748386e-05f, -1.931121922e-05f, -1.929492294e-05f, -1.927859505e-05f, -1.926223558e-05f, -1.924584456e-05f, -1.922942202e-05f,
+-1.921296800e-05f, -1.919648253e-05f, -1.917996564e-05f, -1.916341736e-05f, -1.914683772e-05f, -1.913022676e-05f, -1.911358450e-05f, -1.909691099e-05f, -1.908020625e-05f, -1.906347032e-05f,
+-1.904670322e-05f, -1.902990499e-05f, -1.901307566e-05f, -1.899621527e-05f, -1.897932385e-05f, -1.896240142e-05f, -1.894544803e-05f, -1.892846371e-05f, -1.891144848e-05f, -1.889440238e-05f,
+-1.887732545e-05f, -1.886021771e-05f, -1.884307921e-05f, -1.882590997e-05f, -1.880871002e-05f, -1.879147940e-05f, -1.877421815e-05f, -1.875692629e-05f, -1.873960386e-05f, -1.872225089e-05f,
+-1.870486742e-05f, -1.868745347e-05f, -1.867000909e-05f, -1.865253431e-05f, -1.863502916e-05f, -1.861749366e-05f, -1.859992787e-05f, -1.858233181e-05f, -1.856470551e-05f, -1.854704901e-05f,
+-1.852936234e-05f, -1.851164554e-05f, -1.849389864e-05f, -1.847612167e-05f, -1.845831467e-05f, -1.844047767e-05f, -1.842261071e-05f, -1.840471382e-05f, -1.838678704e-05f, -1.836883040e-05f,
+-1.835084392e-05f, -1.833282766e-05f, -1.831478164e-05f, -1.829670590e-05f, -1.827860047e-05f, -1.826046538e-05f, -1.824230068e-05f, -1.822410639e-05f, -1.820588255e-05f, -1.818762920e-05f,
+-1.816934636e-05f, -1.815103409e-05f, -1.813269240e-05f, -1.811432133e-05f, -1.809592093e-05f, -1.807749122e-05f, -1.805903224e-05f, -1.804054403e-05f, -1.802202662e-05f, -1.800348004e-05f,
+-1.798490433e-05f, -1.796629953e-05f, -1.794766567e-05f, -1.792900279e-05f, -1.791031092e-05f, -1.789159010e-05f, -1.787284037e-05f, -1.785406175e-05f, -1.783525429e-05f, -1.781641802e-05f,
+-1.779755297e-05f, -1.777865919e-05f, -1.775973670e-05f, -1.774078555e-05f, -1.772180577e-05f, -1.770279740e-05f, -1.768376047e-05f, -1.766469502e-05f, -1.764560108e-05f, -1.762647869e-05f,
+-1.760732789e-05f, -1.758814871e-05f, -1.756894119e-05f, -1.754970537e-05f, -1.753044128e-05f, -1.751114896e-05f, -1.749182844e-05f, -1.747247976e-05f, -1.745310297e-05f, -1.743369808e-05f,
+-1.741426515e-05f, -1.739480421e-05f, -1.737531529e-05f, -1.735579844e-05f, -1.733625368e-05f, -1.731668106e-05f, -1.729708061e-05f, -1.727745238e-05f, -1.725779638e-05f, -1.723811267e-05f,
+-1.721840129e-05f, -1.719866226e-05f, -1.717889562e-05f, -1.715910142e-05f, -1.713927969e-05f, -1.711943046e-05f, -1.709955378e-05f, -1.707964968e-05f, -1.705971820e-05f, -1.703975938e-05f,
+-1.701977325e-05f, -1.699975986e-05f, -1.697971923e-05f, -1.695965141e-05f, -1.693955643e-05f, -1.691943434e-05f, -1.689928517e-05f, -1.687910896e-05f, -1.685890574e-05f, -1.683867556e-05f,
+-1.681841845e-05f, -1.679813445e-05f, -1.677782360e-05f, -1.675748594e-05f, -1.673712150e-05f, -1.671673032e-05f, -1.669631245e-05f, -1.667586791e-05f, -1.665539675e-05f, -1.663489901e-05f,
+-1.661437472e-05f, -1.659382393e-05f, -1.657324666e-05f, -1.655264297e-05f, -1.653201288e-05f, -1.651135645e-05f, -1.649067369e-05f, -1.646996467e-05f, -1.644922940e-05f, -1.642846794e-05f,
+-1.640768032e-05f, -1.638686657e-05f, -1.636602675e-05f, -1.634516089e-05f, -1.632426902e-05f, -1.630335118e-05f, -1.628240742e-05f, -1.626143778e-05f, -1.624044229e-05f, -1.621942098e-05f,
+-1.619837392e-05f, -1.617730112e-05f, -1.615620263e-05f, -1.613507849e-05f, -1.611392874e-05f, -1.609275341e-05f, -1.607155256e-05f, -1.605032621e-05f, -1.602907441e-05f, -1.600779719e-05f,
+-1.598649460e-05f, -1.596516668e-05f, -1.594381346e-05f, -1.592243498e-05f, -1.590103129e-05f, -1.587960243e-05f, -1.585814843e-05f, -1.583666933e-05f, -1.581516518e-05f, -1.579363601e-05f,
+-1.577208187e-05f, -1.575050279e-05f, -1.572889881e-05f, -1.570726998e-05f, -1.568561633e-05f, -1.566393791e-05f, -1.564223476e-05f, -1.562050691e-05f, -1.559875440e-05f, -1.557697728e-05f,
+-1.555517559e-05f, -1.553334937e-05f, -1.551149865e-05f, -1.548962348e-05f, -1.546772390e-05f, -1.544579994e-05f, -1.542385166e-05f, -1.540187909e-05f, -1.537988227e-05f, -1.535786124e-05f,
+-1.533581605e-05f, -1.531374672e-05f, -1.529165332e-05f, -1.526953586e-05f, -1.524739441e-05f, -1.522522899e-05f, -1.520303965e-05f, -1.518082642e-05f, -1.515858936e-05f, -1.513632850e-05f,
+-1.511404389e-05f, -1.509173555e-05f, -1.506940354e-05f, -1.504704790e-05f, -1.502466867e-05f, -1.500226588e-05f, -1.497983959e-05f, -1.495738982e-05f, -1.493491663e-05f, -1.491242006e-05f,
+-1.488990014e-05f, -1.486735691e-05f, -1.484479043e-05f, -1.482220073e-05f, -1.479958785e-05f, -1.477695184e-05f, -1.475429273e-05f, -1.473161057e-05f, -1.470890539e-05f, -1.468617725e-05f,
+-1.466342619e-05f, -1.464065224e-05f, -1.461785544e-05f, -1.459503585e-05f, -1.457219349e-05f, -1.454932842e-05f, -1.452644068e-05f, -1.450353030e-05f, -1.448059733e-05f, -1.445764181e-05f,
+-1.443466379e-05f, -1.441166331e-05f, -1.438864040e-05f, -1.436559511e-05f, -1.434252749e-05f, -1.431943757e-05f, -1.429632540e-05f, -1.427319102e-05f, -1.425003447e-05f, -1.422685580e-05f,
+-1.420365505e-05f, -1.418043225e-05f, -1.415718746e-05f, -1.413392072e-05f, -1.411063207e-05f, -1.408732154e-05f, -1.406398919e-05f, -1.404063506e-05f, -1.401725919e-05f, -1.399386162e-05f,
+-1.397044240e-05f, -1.394700156e-05f, -1.392353916e-05f, -1.390005523e-05f, -1.387654981e-05f, -1.385302296e-05f, -1.382947471e-05f, -1.380590511e-05f, -1.378231420e-05f, -1.375870202e-05f,
+-1.373506862e-05f, -1.371141404e-05f, -1.368773832e-05f, -1.366404150e-05f, -1.364032364e-05f, -1.361658476e-05f, -1.359282493e-05f, -1.356904417e-05f, -1.354524254e-05f, -1.352142007e-05f,
+-1.349757682e-05f, -1.347371282e-05f, -1.344982811e-05f, -1.342592275e-05f, -1.340199677e-05f, -1.337805022e-05f, -1.335408314e-05f, -1.333009558e-05f, -1.330608758e-05f, -1.328205918e-05f,
+-1.325801042e-05f, -1.323394136e-05f, -1.320985204e-05f, -1.318574249e-05f, -1.316161277e-05f, -1.313746291e-05f, -1.311329296e-05f, -1.308910297e-05f, -1.306489298e-05f, -1.304066303e-05f,
+-1.301641317e-05f, -1.299214344e-05f, -1.296785388e-05f, -1.294354455e-05f, -1.291921548e-05f, -1.289486672e-05f, -1.287049831e-05f, -1.284611030e-05f, -1.282170273e-05f, -1.279727565e-05f,
+-1.277282909e-05f, -1.274836312e-05f, -1.272387776e-05f, -1.269937306e-05f, -1.267484908e-05f, -1.265030584e-05f, -1.262574341e-05f, -1.260116182e-05f, -1.257656111e-05f, -1.255194134e-05f,
+-1.252730254e-05f, -1.250264476e-05f, -1.247796805e-05f, -1.245327245e-05f, -1.242855801e-05f, -1.240382476e-05f, -1.237907276e-05f, -1.235430206e-05f, -1.232951268e-05f, -1.230470469e-05f,
+-1.227987812e-05f, -1.225503303e-05f, -1.223016944e-05f, -1.220528742e-05f, -1.218038701e-05f, -1.215546824e-05f, -1.213053117e-05f, -1.210557584e-05f, -1.208060230e-05f, -1.205561059e-05f,
+-1.203060075e-05f, -1.200557284e-05f, -1.198052689e-05f, -1.195546296e-05f, -1.193038109e-05f, -1.190528132e-05f, -1.188016369e-05f, -1.185502827e-05f, -1.182987508e-05f, -1.180470418e-05f,
+-1.177951560e-05f, -1.175430941e-05f, -1.172908563e-05f, -1.170384433e-05f, -1.167858554e-05f, -1.165330930e-05f, -1.162801567e-05f, -1.160270469e-05f, -1.157737641e-05f, -1.155203087e-05f,
+-1.152666811e-05f, -1.150128819e-05f, -1.147589115e-05f, -1.145047704e-05f, -1.142504589e-05f, -1.139959776e-05f, -1.137413270e-05f, -1.134865074e-05f, -1.132315194e-05f, -1.129763633e-05f,
+-1.127210398e-05f, -1.124655492e-05f, -1.122098919e-05f, -1.119540685e-05f, -1.116980795e-05f, -1.114419252e-05f, -1.111856061e-05f, -1.109291227e-05f, -1.106724755e-05f, -1.104156649e-05f,
+-1.101586914e-05f, -1.099015554e-05f, -1.096442575e-05f, -1.093867980e-05f, -1.091291774e-05f, -1.088713963e-05f, -1.086134550e-05f, -1.083553540e-05f, -1.080970939e-05f, -1.078386749e-05f,
+-1.075800978e-05f, -1.073213628e-05f, -1.070624704e-05f, -1.068034212e-05f, -1.065442155e-05f, -1.062848539e-05f, -1.060253368e-05f, -1.057656647e-05f, -1.055058381e-05f, -1.052458573e-05f,
+-1.049857230e-05f, -1.047254355e-05f, -1.044649953e-05f, -1.042044029e-05f, -1.039436588e-05f, -1.036827633e-05f, -1.034217171e-05f, -1.031605205e-05f, -1.028991741e-05f, -1.026376782e-05f,
+-1.023760334e-05f, -1.021142402e-05f, -1.018522989e-05f, -1.015902102e-05f, -1.013279743e-05f, -1.010655919e-05f, -1.008030634e-05f, -1.005403892e-05f, -1.002775699e-05f, -1.000146058e-05f,
+-9.975149757e-06f, -9.948824554e-06f, -9.922485021e-06f, -9.896131207e-06f, -9.869763159e-06f, -9.843380923e-06f, -9.816984548e-06f, -9.790574080e-06f, -9.764149566e-06f, -9.737711055e-06f,
+-9.711258592e-06f, -9.684792226e-06f, -9.658312004e-06f, -9.631817974e-06f, -9.605310182e-06f, -9.578788676e-06f, -9.552253504e-06f, -9.525704713e-06f, -9.499142350e-06f, -9.472566463e-06f,
+-9.445977099e-06f, -9.419374307e-06f, -9.392758133e-06f, -9.366128625e-06f, -9.339485831e-06f, -9.312829798e-06f, -9.286160574e-06f, -9.259478206e-06f, -9.232782743e-06f, -9.206074231e-06f,
+-9.179352719e-06f, -9.152618254e-06f, -9.125870883e-06f, -9.099110656e-06f, -9.072337619e-06f, -9.045551820e-06f, -9.018753306e-06f, -8.991942127e-06f, -8.965118329e-06f, -8.938281961e-06f,
+-8.911433070e-06f, -8.884571704e-06f, -8.857697911e-06f, -8.830811738e-06f, -8.803913235e-06f, -8.777002448e-06f, -8.750079426e-06f, -8.723144217e-06f, -8.696196868e-06f, -8.669237428e-06f,
+-8.642265945e-06f, -8.615282466e-06f, -8.588287040e-06f, -8.561279715e-06f, -8.534260538e-06f, -8.507229559e-06f, -8.480186824e-06f, -8.453132383e-06f, -8.426066283e-06f, -8.398988573e-06f,
+-8.371899300e-06f, -8.344798512e-06f, -8.317686259e-06f, -8.290562588e-06f, -8.263427548e-06f, -8.236281186e-06f, -8.209123551e-06f, -8.181954691e-06f, -8.154774654e-06f, -8.127583490e-06f,
+-8.100381245e-06f, -8.073167969e-06f, -8.045943709e-06f, -8.018708514e-06f, -7.991462433e-06f, -7.964205514e-06f, -7.936937805e-06f, -7.909659354e-06f, -7.882370211e-06f, -7.855070422e-06f,
+-7.827760038e-06f, -7.800439106e-06f, -7.773107675e-06f, -7.745765793e-06f, -7.718413509e-06f, -7.691050871e-06f, -7.663677928e-06f, -7.636294728e-06f, -7.608901320e-06f, -7.581497753e-06f,
+-7.554084074e-06f, -7.526660334e-06f, -7.499226579e-06f, -7.471782859e-06f, -7.444329223e-06f, -7.416865718e-06f, -7.389392394e-06f, -7.361909300e-06f, -7.334416483e-06f, -7.306913994e-06f,
+-7.279401879e-06f, -7.251880189e-06f, -7.224348971e-06f, -7.196808275e-06f, -7.169258149e-06f, -7.141698642e-06f, -7.114129803e-06f, -7.086551680e-06f, -7.058964322e-06f, -7.031367779e-06f,
+-7.003762098e-06f, -6.976147329e-06f, -6.948523520e-06f, -6.920890721e-06f, -6.893248980e-06f, -6.865598345e-06f, -6.837938867e-06f, -6.810270593e-06f, -6.782593573e-06f, -6.754907856e-06f,
+-6.727213489e-06f, -6.699510523e-06f, -6.671799006e-06f, -6.644078988e-06f, -6.616350516e-06f, -6.588613640e-06f, -6.560868410e-06f, -6.533114873e-06f, -6.505353079e-06f, -6.477583077e-06f,
+-6.449804915e-06f, -6.422018644e-06f, -6.394224312e-06f, -6.366421967e-06f, -6.338611659e-06f, -6.310793437e-06f, -6.282967351e-06f, -6.255133448e-06f, -6.227291778e-06f, -6.199442390e-06f,
+-6.171585334e-06f, -6.143720658e-06f, -6.115848411e-06f, -6.087968643e-06f, -6.060081402e-06f, -6.032186738e-06f, -6.004284700e-06f, -5.976375337e-06f, -5.948458698e-06f, -5.920534832e-06f,
+-5.892603789e-06f, -5.864665617e-06f, -5.836720366e-06f, -5.808768084e-06f, -5.780808822e-06f, -5.752842628e-06f, -5.724869551e-06f, -5.696889641e-06f, -5.668902947e-06f, -5.640909518e-06f,
+-5.612909403e-06f, -5.584902651e-06f, -5.556889312e-06f, -5.528869435e-06f, -5.500843069e-06f, -5.472810264e-06f, -5.444771068e-06f, -5.416725531e-06f, -5.388673703e-06f, -5.360615632e-06f,
+-5.332551367e-06f, -5.304480958e-06f, -5.276404455e-06f, -5.248321906e-06f, -5.220233362e-06f, -5.192138870e-06f, -5.164038481e-06f, -5.135932243e-06f, -5.107820207e-06f, -5.079702421e-06f,
+-5.051578935e-06f, -5.023449797e-06f, -4.995315058e-06f, -4.967174767e-06f, -4.939028973e-06f, -4.910877726e-06f, -4.882721074e-06f, -4.854559067e-06f, -4.826391754e-06f, -4.798219186e-06f,
+-4.770041410e-06f, -4.741858477e-06f, -4.713670436e-06f, -4.685477337e-06f, -4.657279228e-06f, -4.629076159e-06f, -4.600868179e-06f, -4.572655338e-06f, -4.544437686e-06f, -4.516215271e-06f,
+-4.487988143e-06f, -4.459756351e-06f, -4.431519946e-06f, -4.403278975e-06f, -4.375033489e-06f, -4.346783537e-06f, -4.318529168e-06f, -4.290270433e-06f, -4.262007379e-06f, -4.233740057e-06f,
+-4.205468516e-06f, -4.177192806e-06f, -4.148912976e-06f, -4.120629075e-06f, -4.092341152e-06f, -4.064049258e-06f, -4.035753442e-06f, -4.007453752e-06f, -3.979150239e-06f, -3.950842952e-06f,
+-3.922531941e-06f, -3.894217254e-06f, -3.865898941e-06f, -3.837577052e-06f, -3.809251636e-06f, -3.780922743e-06f, -3.752590422e-06f, -3.724254722e-06f, -3.695915692e-06f, -3.667573384e-06f,
+-3.639227844e-06f, -3.610879124e-06f, -3.582527273e-06f, -3.554172340e-06f, -3.525814374e-06f, -3.497453425e-06f, -3.469089542e-06f, -3.440722776e-06f, -3.412353174e-06f, -3.383980787e-06f,
+-3.355605665e-06f, -3.327227856e-06f, -3.298847410e-06f, -3.270464376e-06f, -3.242078804e-06f, -3.213690743e-06f, -3.185300244e-06f, -3.156907354e-06f, -3.128512124e-06f, -3.100114603e-06f,
+-3.071714840e-06f, -3.043312886e-06f, -3.014908788e-06f, -2.986502597e-06f, -2.958094363e-06f, -2.929684134e-06f, -2.901271960e-06f, -2.872857890e-06f, -2.844441974e-06f, -2.816024262e-06f,
+-2.787604801e-06f, -2.759183643e-06f, -2.730760837e-06f, -2.702336431e-06f, -2.673910475e-06f, -2.645483019e-06f, -2.617054112e-06f, -2.588623804e-06f, -2.560192143e-06f, -2.531759179e-06f,
+-2.503324962e-06f, -2.474889541e-06f, -2.446452965e-06f, -2.418015284e-06f, -2.389576547e-06f, -2.361136803e-06f, -2.332696102e-06f, -2.304254493e-06f, -2.275812026e-06f, -2.247368749e-06f,
+-2.218924712e-06f, -2.190479965e-06f, -2.162034557e-06f, -2.133588537e-06f, -2.105141954e-06f, -2.076694858e-06f, -2.048247299e-06f, -2.019799324e-06f, -1.991350985e-06f, -1.962902329e-06f,
+-1.934453407e-06f, -1.906004268e-06f, -1.877554960e-06f, -1.849105533e-06f, -1.820656038e-06f, -1.792206521e-06f, -1.763757034e-06f, -1.735307625e-06f, -1.706858344e-06f, -1.678409239e-06f,
+-1.649960361e-06f, -1.621511757e-06f, -1.593063479e-06f, -1.564615574e-06f, -1.536168091e-06f, -1.507721081e-06f, -1.479274593e-06f, -1.450828675e-06f, -1.422383377e-06f, -1.393938747e-06f,
+-1.365494836e-06f, -1.337051693e-06f, -1.308609365e-06f, -1.280167904e-06f, -1.251727357e-06f, -1.223287774e-06f, -1.194849204e-06f, -1.166411697e-06f, -1.137975300e-06f, -1.109540065e-06f,
+-1.081106039e-06f, -1.052673271e-06f, -1.024241812e-06f, -9.958117090e-07f, -9.673830123e-07f, -9.389557706e-07f, -9.105300330e-07f, -8.821058486e-07f, -8.536832664e-07f, -8.252623355e-07f,
+-7.968431049e-07f, -7.684256236e-07f, -7.400099406e-07f, -7.115961050e-07f, -6.831841657e-07f, -6.547741717e-07f, -6.263661721e-07f, -5.979602158e-07f, -5.695563517e-07f, -5.411546289e-07f,
+-5.127550962e-07f, -4.843578026e-07f, -4.559627970e-07f, -4.275701284e-07f, -3.991798456e-07f, -3.707919976e-07f, -3.424066332e-07f, -3.140238013e-07f, -2.856435509e-07f, -2.572659307e-07f,
+-2.288909896e-07f, -2.005187765e-07f, -1.721493401e-07f, -1.437827294e-07f, -1.154189930e-07f, -8.705817988e-08f, -5.870033875e-08f, -3.034551840e-08f, -1.993767599e-09f, 2.635486489e-08f,
+5.470033033e-08f, 8.304257998e-08f, 1.113815651e-07f, 1.397172370e-07f, 1.680495470e-07f, 1.963784463e-07f, 2.247038864e-07f, 2.530258184e-07f, 2.813441938e-07f, 3.096589640e-07f,
+3.379700802e-07f, 3.662774939e-07f, 3.945811565e-07f, 4.228810192e-07f, 4.511770337e-07f, 4.794691512e-07f, 5.077573233e-07f, 5.360415013e-07f, 5.643216368e-07f, 5.925976812e-07f,
+6.208695860e-07f, 6.491373026e-07f, 6.774007827e-07f, 7.056599777e-07f, 7.339148391e-07f, 7.621653186e-07f, 7.904113676e-07f, 8.186529378e-07f, 8.468899807e-07f, 8.751224479e-07f,
+9.033502911e-07f, 9.315734619e-07f, 9.597919119e-07f, 9.880055927e-07f, 1.016214456e-06f, 1.044418454e-06f, 1.072617537e-06f, 1.100811659e-06f, 1.129000769e-06f, 1.157184821e-06f,
+1.185363765e-06f, 1.213537554e-06f, 1.241706140e-06f, 1.269869473e-06f, 1.298027507e-06f, 1.326180192e-06f, 1.354327482e-06f, 1.382469326e-06f, 1.410605678e-06f, 1.438736489e-06f,
+1.466861712e-06f, 1.494981297e-06f, 1.523095198e-06f, 1.551203365e-06f, 1.579305751e-06f, 1.607402308e-06f, 1.635492988e-06f, 1.663577743e-06f, 1.691656525e-06f, 1.719729285e-06f,
+1.747795977e-06f, 1.775856552e-06f, 1.803910961e-06f, 1.831959158e-06f, 1.860001094e-06f, 1.888036722e-06f, 1.916065993e-06f, 1.944088860e-06f, 1.972105275e-06f, 2.000115190e-06f,
+2.028118558e-06f, 2.056115330e-06f, 2.084105458e-06f, 2.112088896e-06f, 2.140065595e-06f, 2.168035508e-06f, 2.195998587e-06f, 2.223954784e-06f, 2.251904052e-06f, 2.279846343e-06f,
+2.307781609e-06f, 2.335709803e-06f, 2.363630877e-06f, 2.391544784e-06f, 2.419451476e-06f, 2.447350905e-06f, 2.475243025e-06f, 2.503127787e-06f, 2.531005144e-06f, 2.558875048e-06f,
+2.586737453e-06f, 2.614592311e-06f, 2.642439574e-06f, 2.670279195e-06f, 2.698111126e-06f, 2.725935321e-06f, 2.753751732e-06f, 2.781560311e-06f, 2.809361012e-06f, 2.837153786e-06f,
+2.864938588e-06f, 2.892715369e-06f, 2.920484082e-06f, 2.948244681e-06f, 2.975997117e-06f, 3.003741344e-06f, 3.031477315e-06f, 3.059204982e-06f, 3.086924299e-06f, 3.114635218e-06f,
+3.142337693e-06f, 3.170031676e-06f, 3.197717120e-06f, 3.225393978e-06f, 3.253062203e-06f, 3.280721749e-06f, 3.308372568e-06f, 3.336014613e-06f, 3.363647838e-06f, 3.391272196e-06f,
+3.418887639e-06f, 3.446494122e-06f, 3.474091596e-06f, 3.501680016e-06f, 3.529259335e-06f, 3.556829505e-06f, 3.584390480e-06f, 3.611942214e-06f, 3.639484659e-06f, 3.667017769e-06f,
+3.694541498e-06f, 3.722055798e-06f, 3.749560623e-06f, 3.777055927e-06f, 3.804541663e-06f, 3.832017784e-06f, 3.859484245e-06f, 3.886940997e-06f, 3.914387996e-06f, 3.941825194e-06f,
+3.969252544e-06f, 3.996670002e-06f, 4.024077520e-06f, 4.051475052e-06f, 4.078862551e-06f, 4.106239971e-06f, 4.133607266e-06f, 4.160964390e-06f, 4.188311297e-06f, 4.215647939e-06f,
+4.242974271e-06f, 4.270290248e-06f, 4.297595821e-06f, 4.324890946e-06f, 4.352175577e-06f, 4.379449667e-06f, 4.406713170e-06f, 4.433966040e-06f, 4.461208231e-06f, 4.488439697e-06f,
+4.515660393e-06f, 4.542870271e-06f, 4.570069287e-06f, 4.597257395e-06f, 4.624434547e-06f, 4.651600700e-06f, 4.678755806e-06f, 4.705899820e-06f, 4.733032696e-06f, 4.760154389e-06f,
+4.787264853e-06f, 4.814364041e-06f, 4.841451909e-06f, 4.868528411e-06f, 4.895593500e-06f, 4.922647132e-06f, 4.949689261e-06f, 4.976719841e-06f, 5.003738827e-06f, 5.030746173e-06f,
+5.057741834e-06f, 5.084725764e-06f, 5.111697918e-06f, 5.138658251e-06f, 5.165606716e-06f, 5.192543269e-06f, 5.219467865e-06f, 5.246380457e-06f, 5.273281002e-06f, 5.300169453e-06f,
+5.327045765e-06f, 5.353909893e-06f, 5.380761792e-06f, 5.407601417e-06f, 5.434428723e-06f, 5.461243664e-06f, 5.488046196e-06f, 5.514836273e-06f, 5.541613850e-06f, 5.568378883e-06f,
+5.595131326e-06f, 5.621871135e-06f, 5.648598265e-06f, 5.675312670e-06f, 5.702014306e-06f, 5.728703128e-06f, 5.755379091e-06f, 5.782042151e-06f, 5.808692262e-06f, 5.835329381e-06f,
+5.861953461e-06f, 5.888564460e-06f, 5.915162331e-06f, 5.941747030e-06f, 5.968318514e-06f, 5.994876736e-06f, 6.021421654e-06f, 6.047953221e-06f, 6.074471395e-06f, 6.100976129e-06f,
+6.127467380e-06f, 6.153945104e-06f, 6.180409256e-06f, 6.206859792e-06f, 6.233296667e-06f, 6.259719838e-06f, 6.286129259e-06f, 6.312524887e-06f, 6.338906678e-06f, 6.365274587e-06f,
+6.391628570e-06f, 6.417968584e-06f, 6.444294583e-06f, 6.470606525e-06f, 6.496904365e-06f, 6.523188058e-06f, 6.549457562e-06f, 6.575712832e-06f, 6.601953825e-06f, 6.628180495e-06f,
+6.654392801e-06f, 6.680590697e-06f, 6.706774140e-06f, 6.732943086e-06f, 6.759097492e-06f, 6.785237314e-06f, 6.811362508e-06f, 6.837473030e-06f, 6.863568837e-06f, 6.889649886e-06f,
+6.915716133e-06f, 6.941767534e-06f, 6.967804045e-06f, 6.993825625e-06f, 7.019832228e-06f, 7.045823812e-06f, 7.071800333e-06f, 7.097761748e-06f, 7.123708014e-06f, 7.149639087e-06f,
+7.175554925e-06f, 7.201455483e-06f, 7.227340719e-06f, 7.253210590e-06f, 7.279065052e-06f, 7.304904063e-06f, 7.330727580e-06f, 7.356535559e-06f, 7.382327957e-06f, 7.408104732e-06f,
+7.433865840e-06f, 7.459611239e-06f, 7.485340886e-06f, 7.511054739e-06f, 7.536752753e-06f, 7.562434887e-06f, 7.588101098e-06f, 7.613751343e-06f, 7.639385579e-06f, 7.665003764e-06f,
+7.690605855e-06f, 7.716191811e-06f, 7.741761587e-06f, 7.767315142e-06f, 7.792852433e-06f, 7.818373418e-06f, 7.843878054e-06f, 7.869366299e-06f, 7.894838111e-06f, 7.920293447e-06f,
+7.945732266e-06f, 7.971154524e-06f, 7.996560180e-06f, 8.021949192e-06f, 8.047321517e-06f, 8.072677113e-06f, 8.098015939e-06f, 8.123337952e-06f, 8.148643110e-06f, 8.173931371e-06f,
+8.199202694e-06f, 8.224457036e-06f, 8.249694355e-06f, 8.274914611e-06f, 8.300117760e-06f, 8.325303762e-06f, 8.350472574e-06f, 8.375624155e-06f, 8.400758463e-06f, 8.425875457e-06f,
+8.450975094e-06f, 8.476057334e-06f, 8.501122135e-06f, 8.526169455e-06f, 8.551199253e-06f, 8.576211488e-06f, 8.601206118e-06f, 8.626183102e-06f, 8.651142398e-06f, 8.676083966e-06f,
+8.701007763e-06f, 8.725913750e-06f, 8.750801884e-06f, 8.775672124e-06f, 8.800524430e-06f, 8.825358761e-06f, 8.850175074e-06f, 8.874973331e-06f, 8.899753488e-06f, 8.924515506e-06f,
+8.949259344e-06f, 8.973984960e-06f, 8.998692315e-06f, 9.023381367e-06f, 9.048052075e-06f, 9.072704399e-06f, 9.097338298e-06f, 9.121953731e-06f, 9.146550659e-06f, 9.171129040e-06f,
+9.195688834e-06f, 9.220230000e-06f, 9.244752498e-06f, 9.269256287e-06f, 9.293741328e-06f, 9.318207579e-06f, 9.342655001e-06f, 9.367083553e-06f, 9.391493196e-06f, 9.415883888e-06f,
+9.440255590e-06f, 9.464608261e-06f, 9.488941862e-06f, 9.513256353e-06f, 9.537551693e-06f, 9.561827843e-06f, 9.586084762e-06f, 9.610322411e-06f, 9.634540750e-06f, 9.658739739e-06f,
+9.682919338e-06f, 9.707079508e-06f, 9.731220209e-06f, 9.755341401e-06f, 9.779443045e-06f, 9.803525101e-06f, 9.827587529e-06f, 9.851630290e-06f, 9.875653345e-06f, 9.899656654e-06f,
+9.923640178e-06f, 9.947603877e-06f, 9.971547712e-06f, 9.995471644e-06f, 1.001937563e-05f, 1.004325964e-05f, 1.006712363e-05f, 1.009096756e-05f, 1.011479138e-05f, 1.013859507e-05f,
+1.016237859e-05f, 1.018614189e-05f, 1.020988493e-05f, 1.023360768e-05f, 1.025731009e-05f, 1.028099214e-05f, 1.030465377e-05f, 1.032829496e-05f, 1.035191566e-05f, 1.037551583e-05f,
+1.039909544e-05f, 1.042265444e-05f, 1.044619280e-05f, 1.046971048e-05f, 1.049320745e-05f, 1.051668365e-05f, 1.054013906e-05f, 1.056357364e-05f, 1.058698734e-05f, 1.061038014e-05f,
+1.063375198e-05f, 1.065710284e-05f, 1.068043267e-05f, 1.070374144e-05f, 1.072702911e-05f, 1.075029564e-05f, 1.077354100e-05f, 1.079676514e-05f, 1.081996802e-05f, 1.084314962e-05f,
+1.086630988e-05f, 1.088944878e-05f, 1.091256628e-05f, 1.093566234e-05f, 1.095873691e-05f, 1.098178997e-05f, 1.100482148e-05f, 1.102783139e-05f, 1.105081968e-05f, 1.107378629e-05f,
+1.109673121e-05f, 1.111965438e-05f, 1.114255577e-05f, 1.116543535e-05f, 1.118829307e-05f, 1.121112891e-05f, 1.123394282e-05f, 1.125673476e-05f, 1.127950470e-05f, 1.130225260e-05f,
+1.132497843e-05f, 1.134768214e-05f, 1.137036371e-05f, 1.139302309e-05f, 1.141566024e-05f, 1.143827514e-05f, 1.146086774e-05f, 1.148343801e-05f, 1.150598590e-05f, 1.152851140e-05f,
+1.155101444e-05f, 1.157349501e-05f, 1.159595307e-05f, 1.161838857e-05f, 1.164080148e-05f, 1.166319177e-05f, 1.168555940e-05f, 1.170790433e-05f, 1.173022652e-05f, 1.175252595e-05f,
+1.177480257e-05f, 1.179705635e-05f, 1.181928725e-05f, 1.184149524e-05f, 1.186368028e-05f, 1.188584233e-05f, 1.190798136e-05f, 1.193009734e-05f, 1.195219022e-05f, 1.197425997e-05f,
+1.199630656e-05f, 1.201832995e-05f, 1.204033010e-05f, 1.206230698e-05f, 1.208426056e-05f, 1.210619079e-05f, 1.212809765e-05f, 1.214998109e-05f, 1.217184108e-05f, 1.219367760e-05f,
+1.221549059e-05f, 1.223728003e-05f, 1.225904588e-05f, 1.228078811e-05f, 1.230250668e-05f, 1.232420155e-05f, 1.234587270e-05f, 1.236752008e-05f, 1.238914366e-05f, 1.241074341e-05f,
+1.243231929e-05f, 1.245387127e-05f, 1.247539931e-05f, 1.249690338e-05f, 1.251838344e-05f, 1.253983946e-05f, 1.256127140e-05f, 1.258267924e-05f, 1.260406293e-05f, 1.262542244e-05f,
+1.264675773e-05f, 1.266806878e-05f, 1.268935555e-05f, 1.271061800e-05f, 1.273185610e-05f, 1.275306982e-05f, 1.277425911e-05f, 1.279542396e-05f, 1.281656432e-05f, 1.283768016e-05f,
+1.285877144e-05f, 1.287983814e-05f, 1.290088021e-05f, 1.292189763e-05f, 1.294289037e-05f, 1.296385837e-05f, 1.298480163e-05f, 1.300572009e-05f, 1.302661373e-05f, 1.304748251e-05f,
+1.306832640e-05f, 1.308914537e-05f, 1.310993938e-05f, 1.313070840e-05f, 1.315145240e-05f, 1.317217134e-05f, 1.319286520e-05f, 1.321353393e-05f, 1.323417750e-05f, 1.325479589e-05f,
+1.327538905e-05f, 1.329595696e-05f, 1.331649959e-05f, 1.333701689e-05f, 1.335750884e-05f, 1.337797541e-05f, 1.339841655e-05f, 1.341883225e-05f, 1.343922247e-05f, 1.345958716e-05f,
+1.347992631e-05f, 1.350023988e-05f, 1.352052784e-05f, 1.354079015e-05f, 1.356102679e-05f, 1.358123771e-05f, 1.360142290e-05f, 1.362158231e-05f, 1.364171591e-05f, 1.366182368e-05f,
+1.368190557e-05f, 1.370196157e-05f, 1.372199163e-05f, 1.374199572e-05f, 1.376197382e-05f, 1.378192589e-05f, 1.380185190e-05f, 1.382175182e-05f, 1.384162561e-05f, 1.386147325e-05f,
+1.388129470e-05f, 1.390108993e-05f, 1.392085891e-05f, 1.394060161e-05f, 1.396031800e-05f, 1.398000805e-05f, 1.399967172e-05f, 1.401930899e-05f, 1.403891981e-05f, 1.405850418e-05f,
+1.407806204e-05f, 1.409759337e-05f, 1.411709814e-05f, 1.413657632e-05f, 1.415602788e-05f, 1.417545278e-05f, 1.419485100e-05f, 1.421422251e-05f, 1.423356727e-05f, 1.425288525e-05f,
+1.427217643e-05f, 1.429144078e-05f, 1.431067825e-05f, 1.432988883e-05f, 1.434907248e-05f, 1.436822918e-05f, 1.438735888e-05f, 1.440646157e-05f, 1.442553721e-05f, 1.444458577e-05f,
+1.446360722e-05f, 1.448260154e-05f, 1.450156868e-05f, 1.452050863e-05f, 1.453942135e-05f, 1.455830682e-05f, 1.457716499e-05f, 1.459599585e-05f, 1.461479936e-05f, 1.463357550e-05f,
+1.465232423e-05f, 1.467104553e-05f, 1.468973936e-05f, 1.470840570e-05f, 1.472704452e-05f, 1.474565578e-05f, 1.476423947e-05f, 1.478279554e-05f, 1.480132397e-05f, 1.481982474e-05f,
+1.483829781e-05f, 1.485674315e-05f, 1.487516073e-05f, 1.489355053e-05f, 1.491191252e-05f, 1.493024667e-05f, 1.494855295e-05f, 1.496683132e-05f, 1.498508178e-05f, 1.500330427e-05f,
+1.502149878e-05f, 1.503966528e-05f, 1.505780373e-05f, 1.507591412e-05f, 1.509399641e-05f, 1.511205057e-05f, 1.513007658e-05f, 1.514807441e-05f, 1.516604403e-05f, 1.518398540e-05f,
+1.520189852e-05f, 1.521978333e-05f, 1.523763983e-05f, 1.525546798e-05f, 1.527326774e-05f, 1.529103911e-05f, 1.530878204e-05f, 1.532649651e-05f, 1.534418249e-05f, 1.536183996e-05f,
+1.537946888e-05f, 1.539706924e-05f, 1.541464099e-05f, 1.543218413e-05f, 1.544969861e-05f, 1.546718441e-05f, 1.548464150e-05f, 1.550206986e-05f, 1.551946946e-05f, 1.553684028e-05f,
+1.555418228e-05f, 1.557149544e-05f, 1.558877973e-05f, 1.560603512e-05f, 1.562326160e-05f, 1.564045913e-05f, 1.565762768e-05f, 1.567476723e-05f, 1.569187776e-05f, 1.570895923e-05f,
+1.572601162e-05f, 1.574303490e-05f, 1.576002906e-05f, 1.577699405e-05f, 1.579392986e-05f, 1.581083645e-05f, 1.582771381e-05f, 1.584456191e-05f, 1.586138071e-05f, 1.587817021e-05f,
+1.589493036e-05f, 1.591166114e-05f, 1.592836253e-05f, 1.594503451e-05f, 1.596167704e-05f, 1.597829010e-05f, 1.599487366e-05f, 1.601142771e-05f, 1.602795221e-05f, 1.604444714e-05f,
+1.606091247e-05f, 1.607734818e-05f, 1.609375425e-05f, 1.611013064e-05f, 1.612647734e-05f, 1.614279431e-05f, 1.615908154e-05f, 1.617533899e-05f, 1.619156665e-05f, 1.620776449e-05f,
+1.622393248e-05f, 1.624007060e-05f, 1.625617883e-05f, 1.627225713e-05f, 1.628830549e-05f, 1.630432388e-05f, 1.632031228e-05f, 1.633627066e-05f, 1.635219900e-05f, 1.636809727e-05f,
+1.638396545e-05f, 1.639980351e-05f, 1.641561144e-05f, 1.643138920e-05f, 1.644713678e-05f, 1.646285414e-05f, 1.647854128e-05f, 1.649419815e-05f, 1.650982474e-05f, 1.652542102e-05f,
+1.654098698e-05f, 1.655652258e-05f, 1.657202780e-05f, 1.658750262e-05f, 1.660294703e-05f, 1.661836098e-05f, 1.663374446e-05f, 1.664909745e-05f, 1.666441992e-05f, 1.667971185e-05f,
+1.669497322e-05f, 1.671020400e-05f, 1.672540418e-05f, 1.674057372e-05f, 1.675571260e-05f, 1.677082081e-05f, 1.678589832e-05f, 1.680094510e-05f, 1.681596114e-05f, 1.683094641e-05f,
+1.684590089e-05f, 1.686082455e-05f, 1.687571738e-05f, 1.689057935e-05f, 1.690541044e-05f, 1.692021063e-05f, 1.693497989e-05f, 1.694971820e-05f, 1.696442555e-05f, 1.697910190e-05f,
+1.699374724e-05f, 1.700836154e-05f, 1.702294479e-05f, 1.703749696e-05f, 1.705201802e-05f, 1.706650797e-05f, 1.708096677e-05f, 1.709539440e-05f, 1.710979085e-05f, 1.712415608e-05f,
+1.713849009e-05f, 1.715279285e-05f, 1.716706433e-05f, 1.718130452e-05f, 1.719551339e-05f, 1.720969093e-05f, 1.722383711e-05f, 1.723795191e-05f, 1.725203531e-05f, 1.726608729e-05f,
+1.728010783e-05f, 1.729409691e-05f, 1.730805450e-05f, 1.732198059e-05f, 1.733587516e-05f, 1.734973818e-05f, 1.736356963e-05f, 1.737736950e-05f, 1.739113777e-05f, 1.740487441e-05f,
+1.741857940e-05f, 1.743225272e-05f, 1.744589436e-05f, 1.745950429e-05f, 1.747308249e-05f, 1.748662895e-05f, 1.750014363e-05f, 1.751362653e-05f, 1.752707763e-05f, 1.754049689e-05f,
+1.755388431e-05f, 1.756723987e-05f, 1.758056354e-05f, 1.759385530e-05f, 1.760711514e-05f, 1.762034303e-05f, 1.763353896e-05f, 1.764670291e-05f, 1.765983486e-05f, 1.767293478e-05f,
+1.768600266e-05f, 1.769903849e-05f, 1.771204223e-05f, 1.772501388e-05f, 1.773795341e-05f, 1.775086081e-05f, 1.776373605e-05f, 1.777657912e-05f, 1.778939000e-05f, 1.780216867e-05f,
+1.781491511e-05f, 1.782762930e-05f, 1.784031123e-05f, 1.785296087e-05f, 1.786557821e-05f, 1.787816323e-05f, 1.789071591e-05f, 1.790323623e-05f, 1.791572418e-05f, 1.792817973e-05f,
+1.794060288e-05f, 1.795299359e-05f, 1.796535186e-05f, 1.797767767e-05f, 1.798997099e-05f, 1.800223181e-05f, 1.801446011e-05f, 1.802665588e-05f, 1.803881910e-05f, 1.805094974e-05f,
+1.806304780e-05f, 1.807511325e-05f, 1.808714608e-05f, 1.809914627e-05f, 1.811111380e-05f, 1.812304866e-05f, 1.813495083e-05f, 1.814682029e-05f, 1.815865703e-05f, 1.817046102e-05f,
+1.818223226e-05f, 1.819397072e-05f, 1.820567639e-05f, 1.821734925e-05f, 1.822898928e-05f, 1.824059648e-05f, 1.825217081e-05f, 1.826371227e-05f, 1.827522084e-05f, 1.828669650e-05f,
+1.829813924e-05f, 1.830954904e-05f, 1.832092589e-05f, 1.833226976e-05f, 1.834358064e-05f, 1.835485852e-05f, 1.836610338e-05f, 1.837731521e-05f, 1.838849399e-05f, 1.839963969e-05f,
+1.841075232e-05f, 1.842183185e-05f, 1.843287826e-05f, 1.844389155e-05f, 1.845487169e-05f, 1.846581867e-05f, 1.847673247e-05f, 1.848761309e-05f, 1.849846050e-05f, 1.850927469e-05f,
+1.852005565e-05f, 1.853080335e-05f, 1.854151779e-05f, 1.855219895e-05f, 1.856284681e-05f, 1.857346136e-05f, 1.858404259e-05f, 1.859459048e-05f, 1.860510502e-05f, 1.861558618e-05f,
+1.862603397e-05f, 1.863644836e-05f, 1.864682933e-05f, 1.865717688e-05f, 1.866749099e-05f, 1.867777165e-05f, 1.868801884e-05f, 1.869823254e-05f, 1.870841275e-05f, 1.871855945e-05f,
+1.872867263e-05f, 1.873875226e-05f, 1.874879835e-05f, 1.875881087e-05f, 1.876878981e-05f, 1.877873516e-05f, 1.878864691e-05f, 1.879852503e-05f, 1.880836952e-05f, 1.881818037e-05f,
+1.882795755e-05f, 1.883770107e-05f, 1.884741090e-05f, 1.885708703e-05f, 1.886672945e-05f, 1.887633814e-05f, 1.888591309e-05f, 1.889545430e-05f, 1.890496174e-05f, 1.891443541e-05f,
+1.892387529e-05f, 1.893328136e-05f, 1.894265362e-05f, 1.895199206e-05f, 1.896129666e-05f, 1.897056741e-05f, 1.897980429e-05f, 1.898900730e-05f, 1.899817642e-05f, 1.900731164e-05f,
+1.901641295e-05f, 1.902548033e-05f, 1.903451378e-05f, 1.904351328e-05f, 1.905247882e-05f, 1.906141039e-05f, 1.907030798e-05f, 1.907917157e-05f, 1.908800116e-05f, 1.909679673e-05f,
+1.910555826e-05f, 1.911428576e-05f, 1.912297921e-05f, 1.913163859e-05f, 1.914026390e-05f, 1.914885513e-05f, 1.915741225e-05f, 1.916593527e-05f, 1.917442417e-05f, 1.918287894e-05f,
+1.919129957e-05f, 1.919968605e-05f, 1.920803837e-05f, 1.921635651e-05f, 1.922464047e-05f, 1.923289024e-05f, 1.924110580e-05f, 1.924928715e-05f, 1.925743427e-05f, 1.926554716e-05f,
+1.927362580e-05f, 1.928167018e-05f, 1.928968030e-05f, 1.929765615e-05f, 1.930559770e-05f, 1.931350496e-05f, 1.932137792e-05f, 1.932921656e-05f, 1.933702087e-05f, 1.934479085e-05f,
+1.935252648e-05f, 1.936022776e-05f, 1.936789467e-05f, 1.937552722e-05f, 1.938312537e-05f, 1.939068914e-05f, 1.939821850e-05f, 1.940571346e-05f, 1.941317399e-05f, 1.942060009e-05f,
+1.942799176e-05f, 1.943534898e-05f, 1.944267174e-05f, 1.944996004e-05f, 1.945721387e-05f, 1.946443321e-05f, 1.947161806e-05f, 1.947876841e-05f, 1.948588425e-05f, 1.949296558e-05f,
+1.950001238e-05f, 1.950702465e-05f, 1.951400237e-05f, 1.952094555e-05f, 1.952785417e-05f, 1.953472822e-05f, 1.954156770e-05f, 1.954837259e-05f, 1.955514289e-05f, 1.956187860e-05f,
+1.956857970e-05f, 1.957524618e-05f, 1.958187805e-05f, 1.958847528e-05f, 1.959503788e-05f, 1.960156583e-05f, 1.960805913e-05f, 1.961451777e-05f, 1.962094175e-05f, 1.962733105e-05f,
+1.963368567e-05f, 1.964000560e-05f, 1.964629084e-05f, 1.965254137e-05f, 1.965875720e-05f, 1.966493830e-05f, 1.967108469e-05f, 1.967719635e-05f, 1.968327326e-05f, 1.968931544e-05f,
+1.969532286e-05f, 1.970129553e-05f, 1.970723344e-05f, 1.971313658e-05f, 1.971900494e-05f, 1.972483852e-05f, 1.973063731e-05f, 1.973640130e-05f, 1.974213050e-05f, 1.974782489e-05f,
+1.975348446e-05f, 1.975910922e-05f, 1.976469915e-05f, 1.977025426e-05f, 1.977577452e-05f, 1.978125995e-05f, 1.978671053e-05f, 1.979212625e-05f, 1.979750712e-05f, 1.980285312e-05f,
+1.980816425e-05f, 1.981344051e-05f, 1.981868189e-05f, 1.982388838e-05f, 1.982905998e-05f, 1.983419669e-05f, 1.983929850e-05f, 1.984436540e-05f, 1.984939739e-05f, 1.985439447e-05f,
+1.985935663e-05f, 1.986428386e-05f, 1.986917616e-05f, 1.987403353e-05f, 1.987885596e-05f, 1.988364345e-05f, 1.988839599e-05f, 1.989311358e-05f, 1.989779621e-05f, 1.990244388e-05f,
+1.990705659e-05f, 1.991163433e-05f, 1.991617710e-05f, 1.992068489e-05f, 1.992515771e-05f, 1.992959553e-05f, 1.993399837e-05f, 1.993836622e-05f, 1.994269907e-05f, 1.994699692e-05f,
+1.995125977e-05f, 1.995548762e-05f, 1.995968045e-05f, 1.996383827e-05f, 1.996796108e-05f, 1.997204886e-05f, 1.997610163e-05f, 1.998011937e-05f, 1.998410207e-05f, 1.998804975e-05f,
+1.999196239e-05f, 1.999584000e-05f, 1.999968256e-05f, 2.000349008e-05f, 2.000726255e-05f, 2.001099998e-05f, 2.001470235e-05f, 2.001836967e-05f, 2.002200194e-05f, 2.002559914e-05f,
+2.002916129e-05f, 2.003268837e-05f, 2.003618039e-05f, 2.003963733e-05f, 2.004305921e-05f, 2.004644602e-05f, 2.004979775e-05f, 2.005311441e-05f, 2.005639599e-05f, 2.005964249e-05f,
+2.006285391e-05f, 2.006603025e-05f, 2.006917150e-05f, 2.007227767e-05f, 2.007534875e-05f, 2.007838474e-05f, 2.008138564e-05f, 2.008435145e-05f, 2.008728217e-05f, 2.009017779e-05f,
+2.009303832e-05f, 2.009586375e-05f, 2.009865409e-05f, 2.010140933e-05f, 2.010412946e-05f, 2.010681450e-05f, 2.010946444e-05f, 2.011207928e-05f, 2.011465902e-05f, 2.011720365e-05f,
+2.011971318e-05f, 2.012218761e-05f, 2.012462693e-05f, 2.012703115e-05f, 2.012940027e-05f, 2.013173428e-05f, 2.013403319e-05f, 2.013629699e-05f, 2.013852569e-05f, 2.014071928e-05f,
+2.014287777e-05f, 2.014500116e-05f, 2.014708944e-05f, 2.014914261e-05f, 2.015116069e-05f, 2.015314366e-05f, 2.015509152e-05f, 2.015700429e-05f, 2.015888195e-05f, 2.016072452e-05f,
+2.016253198e-05f, 2.016430434e-05f, 2.016604161e-05f, 2.016774378e-05f, 2.016941085e-05f, 2.017104282e-05f, 2.017263970e-05f, 2.017420149e-05f, 2.017572818e-05f, 2.017721979e-05f,
+2.017867630e-05f, 2.018009772e-05f, 2.018148406e-05f, 2.018283532e-05f, 2.018415148e-05f, 2.018543257e-05f, 2.018667858e-05f, 2.018788950e-05f, 2.018906535e-05f, 2.019020613e-05f,
+2.019131183e-05f, 2.019238246e-05f, 2.019341802e-05f, 2.019441852e-05f, 2.019538395e-05f, 2.019631431e-05f, 2.019720962e-05f, 2.019806987e-05f, 2.019889506e-05f, 2.019968520e-05f,
+2.020044028e-05f, 2.020116032e-05f, 2.020184532e-05f, 2.020249527e-05f, 2.020311018e-05f, 2.020369005e-05f, 2.020423489e-05f, 2.020474470e-05f, 2.020521948e-05f, 2.020565924e-05f,
+2.020606397e-05f, 2.020643368e-05f, 2.020676838e-05f, 2.020706807e-05f, 2.020733274e-05f, 2.020756241e-05f, 2.020775708e-05f, 2.020791675e-05f, 2.020804143e-05f, 2.020813111e-05f,
+2.020818581e-05f, 2.020820552e-05f, 2.020819025e-05f, 2.020814001e-05f, 2.020805479e-05f, 2.020793461e-05f, 2.020777946e-05f, 2.020758935e-05f, 2.020736429e-05f, 2.020710428e-05f,
+2.020680932e-05f, 2.020647941e-05f, 2.020611457e-05f, 2.020571480e-05f, 2.020528009e-05f, 2.020481046e-05f, 2.020430592e-05f, 2.020376645e-05f, 2.020319208e-05f, 2.020258280e-05f,
+2.020193862e-05f, 2.020125955e-05f, 2.020054558e-05f, 2.019979673e-05f, 2.019901300e-05f, 2.019819440e-05f, 2.019734093e-05f, 2.019645259e-05f, 2.019552939e-05f, 2.019457134e-05f,
+2.019357845e-05f, 2.019255071e-05f, 2.019148813e-05f, 2.019039072e-05f, 2.018925849e-05f, 2.018809144e-05f, 2.018688958e-05f, 2.018565291e-05f, 2.018438143e-05f, 2.018307517e-05f,
+2.018173411e-05f, 2.018035827e-05f, 2.017894765e-05f, 2.017750227e-05f, 2.017602212e-05f, 2.017450721e-05f, 2.017295755e-05f, 2.017137315e-05f, 2.016975400e-05f, 2.016810013e-05f,
+2.016641153e-05f, 2.016468822e-05f, 2.016293019e-05f, 2.016113746e-05f, 2.015931004e-05f, 2.015744792e-05f, 2.015555112e-05f, 2.015361965e-05f, 2.015165350e-05f, 2.014965270e-05f,
+2.014761724e-05f, 2.014554713e-05f, 2.014344238e-05f, 2.014130301e-05f, 2.013912901e-05f, 2.013692039e-05f, 2.013467716e-05f, 2.013239933e-05f, 2.013008691e-05f, 2.012773991e-05f,
+2.012535832e-05f, 2.012294217e-05f, 2.012049145e-05f, 2.011800619e-05f, 2.011548637e-05f, 2.011293202e-05f, 2.011034314e-05f, 2.010771974e-05f, 2.010506183e-05f, 2.010236941e-05f,
+2.009964250e-05f, 2.009688110e-05f, 2.009408522e-05f, 2.009125488e-05f, 2.008839007e-05f, 2.008549081e-05f, 2.008255711e-05f, 2.007958897e-05f, 2.007658641e-05f, 2.007354944e-05f,
+2.007047805e-05f, 2.006737227e-05f, 2.006423210e-05f, 2.006105755e-05f, 2.005784863e-05f, 2.005460535e-05f, 2.005132772e-05f, 2.004801574e-05f, 2.004466943e-05f, 2.004128881e-05f,
+2.003787386e-05f, 2.003442462e-05f, 2.003094108e-05f, 2.002742326e-05f, 2.002387116e-05f, 2.002028480e-05f, 2.001666419e-05f, 2.001300933e-05f, 2.000932024e-05f, 2.000559693e-05f,
+2.000183940e-05f, 1.999804767e-05f, 1.999422175e-05f, 1.999036165e-05f, 1.998646737e-05f, 1.998253893e-05f, 1.997857635e-05f, 1.997457962e-05f, 1.997054877e-05f, 1.996648379e-05f,
+1.996238471e-05f, 1.995825153e-05f, 1.995408427e-05f, 1.994988293e-05f, 1.994564753e-05f, 1.994137808e-05f, 1.993707459e-05f, 1.993273706e-05f, 1.992836552e-05f, 1.992395997e-05f,
+1.991952043e-05f, 1.991504690e-05f, 1.991053939e-05f, 1.990599793e-05f, 1.990142252e-05f, 1.989681316e-05f, 1.989216989e-05f, 1.988749270e-05f, 1.988278160e-05f, 1.987803662e-05f,
+1.987325775e-05f, 1.986844502e-05f, 1.986359844e-05f, 1.985871801e-05f, 1.985380376e-05f, 1.984885568e-05f, 1.984387380e-05f, 1.983885813e-05f, 1.983380868e-05f, 1.982872545e-05f,
+1.982360848e-05f, 1.981845776e-05f, 1.981327331e-05f, 1.980805514e-05f, 1.980280327e-05f, 1.979751770e-05f, 1.979219846e-05f, 1.978684555e-05f, 1.978145899e-05f, 1.977603879e-05f,
+1.977058496e-05f, 1.976509751e-05f, 1.975957647e-05f, 1.975402184e-05f, 1.974843364e-05f, 1.974281187e-05f, 1.973715656e-05f, 1.973146772e-05f, 1.972574535e-05f, 1.971998948e-05f,
+1.971420012e-05f, 1.970837728e-05f, 1.970252097e-05f, 1.969663122e-05f, 1.969070802e-05f, 1.968475141e-05f, 1.967876138e-05f, 1.967273796e-05f, 1.966668116e-05f, 1.966059099e-05f,
+1.965446747e-05f, 1.964831061e-05f, 1.964212043e-05f, 1.963589693e-05f, 1.962964015e-05f, 1.962335008e-05f, 1.961702675e-05f, 1.961067016e-05f, 1.960428035e-05f, 1.959785730e-05f,
+1.959140106e-05f, 1.958491162e-05f, 1.957838900e-05f, 1.957183322e-05f, 1.956524430e-05f, 1.955862224e-05f, 1.955196707e-05f, 1.954527879e-05f, 1.953855743e-05f, 1.953180300e-05f,
+1.952501551e-05f, 1.951819498e-05f, 1.951134143e-05f, 1.950445487e-05f, 1.949753532e-05f, 1.949058278e-05f, 1.948359729e-05f, 1.947657885e-05f, 1.946952748e-05f, 1.946244320e-05f,
+1.945532601e-05f, 1.944817595e-05f, 1.944099301e-05f, 1.943377723e-05f, 1.942652861e-05f, 1.941924718e-05f, 1.941193294e-05f, 1.940458592e-05f, 1.939720612e-05f, 1.938979358e-05f,
+1.938234830e-05f, 1.937487030e-05f, 1.936735959e-05f, 1.935981620e-05f, 1.935224014e-05f, 1.934463143e-05f, 1.933699008e-05f, 1.932931611e-05f, 1.932160954e-05f, 1.931387038e-05f,
+1.930609866e-05f, 1.929829438e-05f, 1.929045757e-05f, 1.928258824e-05f, 1.927468641e-05f, 1.926675210e-05f, 1.925878533e-05f, 1.925078610e-05f, 1.924275445e-05f, 1.923469038e-05f,
+1.922659392e-05f, 1.921846509e-05f, 1.921030389e-05f, 1.920211035e-05f, 1.919388448e-05f, 1.918562631e-05f, 1.917733585e-05f, 1.916901312e-05f, 1.916065814e-05f, 1.915227092e-05f,
+1.914385148e-05f, 1.913539985e-05f, 1.912691604e-05f, 1.911840007e-05f, 1.910985195e-05f, 1.910127171e-05f, 1.909265936e-05f, 1.908401492e-05f, 1.907533841e-05f, 1.906662985e-05f,
+1.905788926e-05f, 1.904911666e-05f, 1.904031206e-05f, 1.903147548e-05f, 1.902260695e-05f, 1.901370648e-05f, 1.900477409e-05f, 1.899580980e-05f, 1.898681363e-05f, 1.897778559e-05f,
+1.896872572e-05f, 1.895963402e-05f, 1.895051051e-05f, 1.894135522e-05f, 1.893216816e-05f, 1.892294936e-05f, 1.891369883e-05f, 1.890441660e-05f, 1.889510267e-05f, 1.888575708e-05f,
+1.887637984e-05f, 1.886697098e-05f, 1.885753050e-05f, 1.884805843e-05f, 1.883855480e-05f, 1.882901962e-05f, 1.881945290e-05f, 1.880985468e-05f, 1.880022497e-05f, 1.879056379e-05f,
+1.878087117e-05f, 1.877114711e-05f, 1.876139165e-05f, 1.875160480e-05f, 1.874178659e-05f, 1.873193703e-05f, 1.872205614e-05f, 1.871214394e-05f, 1.870220047e-05f, 1.869222573e-05f,
+1.868221974e-05f, 1.867218254e-05f, 1.866211413e-05f, 1.865201454e-05f, 1.864188379e-05f, 1.863172191e-05f, 1.862152890e-05f, 1.861130480e-05f, 1.860104963e-05f, 1.859076340e-05f,
+1.858044614e-05f, 1.857009786e-05f, 1.855971860e-05f, 1.854930837e-05f, 1.853886719e-05f, 1.852839509e-05f, 1.851789208e-05f, 1.850735819e-05f, 1.849679344e-05f, 1.848619785e-05f,
+1.847557145e-05f, 1.846491424e-05f, 1.845422627e-05f, 1.844350754e-05f, 1.843275809e-05f, 1.842197792e-05f, 1.841116707e-05f, 1.840032556e-05f, 1.838945341e-05f, 1.837855064e-05f,
+1.836761727e-05f, 1.835665333e-05f, 1.834565884e-05f, 1.833463381e-05f, 1.832357828e-05f, 1.831249227e-05f, 1.830137579e-05f, 1.829022888e-05f, 1.827905155e-05f, 1.826784382e-05f,
+1.825660573e-05f, 1.824533728e-05f, 1.823403852e-05f, 1.822270945e-05f, 1.821135010e-05f, 1.819996049e-05f, 1.818854065e-05f, 1.817709060e-05f, 1.816561037e-05f, 1.815409997e-05f,
+1.814255943e-05f, 1.813098878e-05f, 1.811938803e-05f, 1.810775721e-05f, 1.809609635e-05f, 1.808440546e-05f, 1.807268457e-05f, 1.806093371e-05f, 1.804915290e-05f, 1.803734215e-05f,
+1.802550151e-05f, 1.801363098e-05f, 1.800173059e-05f, 1.798980038e-05f, 1.797784035e-05f, 1.796585054e-05f, 1.795383097e-05f, 1.794178166e-05f, 1.792970264e-05f, 1.791759394e-05f,
+1.790545556e-05f, 1.789328755e-05f, 1.788108993e-05f, 1.786886271e-05f, 1.785660592e-05f, 1.784431960e-05f, 1.783200376e-05f, 1.781965842e-05f, 1.780728362e-05f, 1.779487937e-05f,
+1.778244571e-05f, 1.776998265e-05f, 1.775749022e-05f, 1.774496845e-05f, 1.773241736e-05f, 1.771983698e-05f, 1.770722733e-05f, 1.769458843e-05f, 1.768192032e-05f, 1.766922301e-05f,
+1.765649654e-05f, 1.764374092e-05f, 1.763095618e-05f, 1.761814235e-05f, 1.760529946e-05f, 1.759242752e-05f, 1.757952657e-05f, 1.756659663e-05f, 1.755363772e-05f, 1.754064988e-05f,
+1.752763312e-05f, 1.751458747e-05f, 1.750151296e-05f, 1.748840962e-05f, 1.747527747e-05f, 1.746211653e-05f, 1.744892684e-05f, 1.743570841e-05f, 1.742246128e-05f, 1.740918547e-05f,
+1.739588101e-05f, 1.738254791e-05f, 1.736918622e-05f, 1.735579595e-05f, 1.734237714e-05f, 1.732892980e-05f, 1.731545397e-05f, 1.730194967e-05f, 1.728841693e-05f, 1.727485577e-05f,
+1.726126622e-05f, 1.724764831e-05f, 1.723400207e-05f, 1.722032751e-05f, 1.720662468e-05f, 1.719289359e-05f, 1.717913427e-05f, 1.716534675e-05f, 1.715153106e-05f, 1.713768722e-05f,
+1.712381525e-05f, 1.710991520e-05f, 1.709598708e-05f, 1.708203093e-05f, 1.706804676e-05f, 1.705403461e-05f, 1.703999450e-05f, 1.702592646e-05f, 1.701183053e-05f, 1.699770671e-05f,
+1.698355506e-05f, 1.696937558e-05f, 1.695516831e-05f, 1.694093328e-05f, 1.692667052e-05f, 1.691238004e-05f, 1.689806189e-05f, 1.688371608e-05f, 1.686934265e-05f, 1.685494163e-05f,
+1.684051304e-05f, 1.682605690e-05f, 1.681157326e-05f, 1.679706213e-05f, 1.678252354e-05f, 1.676795753e-05f, 1.675336412e-05f, 1.673874334e-05f, 1.672409521e-05f, 1.670941977e-05f,
+1.669471705e-05f, 1.667998707e-05f, 1.666522986e-05f, 1.665044545e-05f, 1.663563387e-05f, 1.662079515e-05f, 1.660592931e-05f, 1.659103639e-05f, 1.657611641e-05f, 1.656116940e-05f,
+1.654619540e-05f, 1.653119443e-05f, 1.651616651e-05f, 1.650111169e-05f, 1.648602998e-05f, 1.647092142e-05f, 1.645578603e-05f, 1.644062385e-05f, 1.642543491e-05f, 1.641021923e-05f,
+1.639497684e-05f, 1.637970777e-05f, 1.636441205e-05f, 1.634908972e-05f, 1.633374080e-05f, 1.631836531e-05f, 1.630296330e-05f, 1.628753479e-05f, 1.627207980e-05f, 1.625659837e-05f,
+1.624109054e-05f, 1.622555632e-05f, 1.620999575e-05f, 1.619440885e-05f, 1.617879567e-05f, 1.616315622e-05f, 1.614749054e-05f, 1.613179866e-05f, 1.611608061e-05f, 1.610033642e-05f,
+1.608456611e-05f, 1.606876972e-05f, 1.605294729e-05f, 1.603709883e-05f, 1.602122438e-05f, 1.600532397e-05f, 1.598939763e-05f, 1.597344539e-05f, 1.595746729e-05f, 1.594146334e-05f,
+1.592543359e-05f, 1.590937806e-05f, 1.589329679e-05f, 1.587718980e-05f, 1.586105713e-05f, 1.584489880e-05f, 1.582871485e-05f, 1.581250530e-05f, 1.579627020e-05f, 1.578000957e-05f,
+1.576372343e-05f, 1.574741183e-05f, 1.573107479e-05f, 1.571471235e-05f, 1.569832453e-05f, 1.568191137e-05f, 1.566547289e-05f, 1.564900914e-05f, 1.563252013e-05f, 1.561600591e-05f,
+1.559946650e-05f, 1.558290193e-05f, 1.556631224e-05f, 1.554969746e-05f, 1.553305761e-05f, 1.551639274e-05f, 1.549970287e-05f, 1.548298804e-05f, 1.546624827e-05f, 1.544948359e-05f,
+1.543269405e-05f, 1.541587967e-05f, 1.539904048e-05f, 1.538217652e-05f, 1.536528781e-05f, 1.534837440e-05f, 1.533143630e-05f, 1.531447356e-05f, 1.529748620e-05f, 1.528047426e-05f,
+1.526343777e-05f, 1.524637676e-05f, 1.522929127e-05f, 1.521218132e-05f, 1.519504696e-05f, 1.517788820e-05f, 1.516070509e-05f, 1.514349765e-05f, 1.512626592e-05f, 1.510900994e-05f,
+1.509172972e-05f, 1.507442532e-05f, 1.505709675e-05f, 1.503974406e-05f, 1.502236727e-05f, 1.500496641e-05f, 1.498754153e-05f, 1.497009265e-05f, 1.495261981e-05f, 1.493512304e-05f,
+1.491760236e-05f, 1.490005783e-05f, 1.488248946e-05f, 1.486489729e-05f, 1.484728135e-05f, 1.482964169e-05f, 1.481197832e-05f, 1.479429129e-05f, 1.477658062e-05f, 1.475884636e-05f,
+1.474108853e-05f, 1.472330716e-05f, 1.470550230e-05f, 1.468767397e-05f, 1.466982221e-05f, 1.465194704e-05f, 1.463404852e-05f, 1.461612666e-05f, 1.459818150e-05f, 1.458021308e-05f,
+1.456222143e-05f, 1.454420658e-05f, 1.452616857e-05f, 1.450810742e-05f, 1.449002319e-05f, 1.447191589e-05f, 1.445378556e-05f, 1.443563224e-05f, 1.441745596e-05f, 1.439925675e-05f,
+1.438103465e-05f, 1.436278970e-05f, 1.434452192e-05f, 1.432623135e-05f, 1.430791803e-05f, 1.428958198e-05f, 1.427122325e-05f, 1.425284187e-05f, 1.423443787e-05f, 1.421601128e-05f,
+1.419756215e-05f, 1.417909050e-05f, 1.416059638e-05f, 1.414207980e-05f, 1.412354082e-05f, 1.410497946e-05f, 1.408639576e-05f, 1.406778975e-05f, 1.404916147e-05f, 1.403051095e-05f,
+1.401183823e-05f, 1.399314334e-05f, 1.397442632e-05f, 1.395568720e-05f, 1.393692602e-05f, 1.391814280e-05f, 1.389933760e-05f, 1.388051044e-05f, 1.386166135e-05f, 1.384279038e-05f,
+1.382389755e-05f, 1.380498290e-05f, 1.378604647e-05f, 1.376708830e-05f, 1.374810841e-05f, 1.372910685e-05f, 1.371008364e-05f, 1.369103883e-05f, 1.367197245e-05f, 1.365288453e-05f,
+1.363377511e-05f, 1.361464423e-05f, 1.359549192e-05f, 1.357631821e-05f, 1.355712315e-05f, 1.353790676e-05f, 1.351866909e-05f, 1.349941017e-05f, 1.348013003e-05f, 1.346082872e-05f,
+1.344150626e-05f, 1.342216269e-05f, 1.340279805e-05f, 1.338341238e-05f, 1.336400570e-05f, 1.334457806e-05f, 1.332512950e-05f, 1.330566004e-05f, 1.328616972e-05f, 1.326665859e-05f,
+1.324712667e-05f, 1.322757400e-05f, 1.320800063e-05f, 1.318840657e-05f, 1.316879188e-05f, 1.314915659e-05f, 1.312950072e-05f, 1.310982433e-05f, 1.309012745e-05f, 1.307041011e-05f,
+1.305067234e-05f, 1.303091419e-05f, 1.301113570e-05f, 1.299133689e-05f, 1.297151781e-05f, 1.295167849e-05f, 1.293181897e-05f, 1.291193928e-05f, 1.289203947e-05f, 1.287211956e-05f,
+1.285217960e-05f, 1.283221962e-05f, 1.281223966e-05f, 1.279223975e-05f, 1.277221994e-05f, 1.275218026e-05f, 1.273212074e-05f, 1.271204142e-05f, 1.269194235e-05f, 1.267182355e-05f,
+1.265168507e-05f, 1.263152694e-05f, 1.261134920e-05f, 1.259115188e-05f, 1.257093502e-05f, 1.255069867e-05f, 1.253044285e-05f, 1.251016761e-05f, 1.248987298e-05f, 1.246955899e-05f,
+1.244922570e-05f, 1.242887312e-05f, 1.240850131e-05f, 1.238811030e-05f, 1.236770012e-05f, 1.234727082e-05f, 1.232682242e-05f, 1.230635498e-05f, 1.228586852e-05f, 1.226536309e-05f,
+1.224483871e-05f, 1.222429544e-05f, 1.220373330e-05f, 1.218315234e-05f, 1.216255259e-05f, 1.214193408e-05f, 1.212129687e-05f, 1.210064098e-05f, 1.207996646e-05f, 1.205927334e-05f,
+1.203856165e-05f, 1.201783144e-05f, 1.199708275e-05f, 1.197631561e-05f, 1.195553007e-05f, 1.193472615e-05f, 1.191390390e-05f, 1.189306335e-05f, 1.187220455e-05f, 1.185132753e-05f,
+1.183043232e-05f, 1.180951898e-05f, 1.178858754e-05f, 1.176763802e-05f, 1.174667048e-05f, 1.172568496e-05f, 1.170468148e-05f, 1.168366009e-05f, 1.166262082e-05f, 1.164156372e-05f,
+1.162048883e-05f, 1.159939617e-05f, 1.157828580e-05f, 1.155715775e-05f, 1.153601205e-05f, 1.151484875e-05f, 1.149366788e-05f, 1.147246948e-05f, 1.145125360e-05f, 1.143002027e-05f,
+1.140876953e-05f, 1.138750141e-05f, 1.136621597e-05f, 1.134491322e-05f, 1.132359323e-05f, 1.130225601e-05f, 1.128090162e-05f, 1.125953009e-05f, 1.123814146e-05f, 1.121673577e-05f,
+1.119531305e-05f, 1.117387335e-05f, 1.115241671e-05f, 1.113094317e-05f, 1.110945275e-05f, 1.108794552e-05f, 1.106642149e-05f, 1.104488071e-05f, 1.102332323e-05f, 1.100174907e-05f,
+1.098015829e-05f, 1.095855091e-05f, 1.093692698e-05f, 1.091528654e-05f, 1.089362962e-05f, 1.087195627e-05f, 1.085026652e-05f, 1.082856042e-05f, 1.080683800e-05f, 1.078509931e-05f,
+1.076334438e-05f, 1.074157325e-05f, 1.071978596e-05f, 1.069798255e-05f, 1.067616306e-05f, 1.065432754e-05f, 1.063247601e-05f, 1.061060852e-05f, 1.058872512e-05f, 1.056682583e-05f,
+1.054491070e-05f, 1.052297977e-05f, 1.050103307e-05f, 1.047907066e-05f, 1.045709256e-05f, 1.043509882e-05f, 1.041308947e-05f, 1.039106457e-05f, 1.036902414e-05f, 1.034696823e-05f,
+1.032489687e-05f, 1.030281011e-05f, 1.028070799e-05f, 1.025859054e-05f, 1.023645782e-05f, 1.021430984e-05f, 1.019214667e-05f, 1.016996833e-05f, 1.014777487e-05f, 1.012556633e-05f,
+1.010334274e-05f, 1.008110415e-05f, 1.005885060e-05f, 1.003658213e-05f, 1.001429878e-05f, 9.992000580e-06f, 9.969687582e-06f, 9.947359824e-06f, 9.925017344e-06f, 9.902660185e-06f,
+9.880288385e-06f, 9.857901986e-06f, 9.835501027e-06f, 9.813085550e-06f, 9.790655594e-06f, 9.768211201e-06f, 9.745752410e-06f, 9.723279262e-06f, 9.700791798e-06f, 9.678290058e-06f,
+9.655774083e-06f, 9.633243913e-06f, 9.610699588e-06f, 9.588141151e-06f, 9.565568641e-06f, 9.542982098e-06f, 9.520381564e-06f, 9.497767079e-06f, 9.475138685e-06f, 9.452496421e-06f,
+9.429840328e-06f, 9.407170448e-06f, 9.384486821e-06f, 9.361789487e-06f, 9.339078489e-06f, 9.316353866e-06f, 9.293615659e-06f, 9.270863910e-06f, 9.248098659e-06f, 9.225319947e-06f,
+9.202527816e-06f, 9.179722305e-06f, 9.156903457e-06f, 9.134071312e-06f, 9.111225911e-06f, 9.088367295e-06f, 9.065495505e-06f, 9.042610583e-06f, 9.019712569e-06f, 8.996801505e-06f,
+8.973877432e-06f, 8.950940390e-06f, 8.927990422e-06f, 8.905027567e-06f, 8.882051869e-06f, 8.859063366e-06f, 8.836062102e-06f, 8.813048117e-06f, 8.790021452e-06f, 8.766982149e-06f,
+8.743930250e-06f, 8.720865794e-06f, 8.697788824e-06f, 8.674699382e-06f, 8.651597508e-06f, 8.628483243e-06f, 8.605356631e-06f, 8.582217710e-06f, 8.559066524e-06f, 8.535903114e-06f,
+8.512727521e-06f, 8.489539786e-06f, 8.466339951e-06f, 8.443128059e-06f, 8.419904149e-06f, 8.396668264e-06f, 8.373420446e-06f, 8.350160735e-06f, 8.326889174e-06f, 8.303605805e-06f,
+8.280310668e-06f, 8.257003805e-06f, 8.233685259e-06f, 8.210355071e-06f, 8.187013282e-06f, 8.163659935e-06f, 8.140295070e-06f, 8.116918731e-06f, 8.093530958e-06f, 8.070131793e-06f,
+8.046721278e-06f, 8.023299455e-06f, 7.999866366e-06f, 7.976422053e-06f, 7.952966557e-06f, 7.929499921e-06f, 7.906022186e-06f, 7.882533393e-06f, 7.859033586e-06f, 7.835522806e-06f,
+7.812001095e-06f, 7.788468495e-06f, 7.764925047e-06f, 7.741370794e-06f, 7.717805779e-06f, 7.694230042e-06f, 7.670643626e-06f, 7.647046572e-06f, 7.623438924e-06f, 7.599820723e-06f,
+7.576192011e-06f, 7.552552830e-06f, 7.528903223e-06f, 7.505243231e-06f, 7.481572896e-06f, 7.457892262e-06f, 7.434201369e-06f, 7.410500260e-06f, 7.386788978e-06f, 7.363067564e-06f,
+7.339336061e-06f, 7.315594510e-06f, 7.291842955e-06f, 7.268081437e-06f, 7.244309999e-06f, 7.220528683e-06f, 7.196737531e-06f, 7.172936586e-06f, 7.149125889e-06f, 7.125305484e-06f,
+7.101475412e-06f, 7.077635716e-06f, 7.053786439e-06f, 7.029927622e-06f, 7.006059308e-06f, 6.982181539e-06f, 6.958294358e-06f, 6.934397808e-06f, 6.910491930e-06f, 6.886576767e-06f,
+6.862652362e-06f, 6.838718757e-06f, 6.814775994e-06f, 6.790824116e-06f, 6.766863166e-06f, 6.742893186e-06f, 6.718914218e-06f, 6.694926306e-06f, 6.670929491e-06f, 6.646923816e-06f,
+6.622909324e-06f, 6.598886057e-06f, 6.574854059e-06f, 6.550813370e-06f, 6.526764035e-06f, 6.502706095e-06f, 6.478639594e-06f, 6.454564574e-06f, 6.430481077e-06f, 6.406389147e-06f,
+6.382288826e-06f, 6.358180156e-06f, 6.334063181e-06f, 6.309937942e-06f, 6.285804483e-06f, 6.261662847e-06f, 6.237513076e-06f, 6.213355213e-06f, 6.189189300e-06f, 6.165015381e-06f,
+6.140833498e-06f, 6.116643694e-06f, 6.092446011e-06f, 6.068240493e-06f, 6.044027183e-06f, 6.019806122e-06f, 5.995577354e-06f, 5.971340922e-06f, 5.947096869e-06f, 5.922845237e-06f,
+5.898586069e-06f, 5.874319408e-06f, 5.850045297e-06f, 5.825763779e-06f, 5.801474897e-06f, 5.777178693e-06f, 5.752875211e-06f, 5.728564493e-06f, 5.704246583e-06f, 5.679921523e-06f,
+5.655589356e-06f, 5.631250125e-06f, 5.606903873e-06f, 5.582550643e-06f, 5.558190478e-06f, 5.533823421e-06f, 5.509449514e-06f, 5.485068802e-06f, 5.460681327e-06f, 5.436287131e-06f,
+5.411886258e-06f, 5.387478751e-06f, 5.363064653e-06f, 5.338644006e-06f, 5.314216855e-06f, 5.289783241e-06f, 5.265343209e-06f, 5.240896800e-06f, 5.216444059e-06f, 5.191985027e-06f,
+5.167519749e-06f, 5.143048267e-06f, 5.118570625e-06f, 5.094086864e-06f, 5.069597030e-06f, 5.045101164e-06f, 5.020599309e-06f, 4.996091509e-06f, 4.971577808e-06f, 4.947058247e-06f,
+4.922532870e-06f, 4.898001721e-06f, 4.873464842e-06f, 4.848922276e-06f, 4.824374067e-06f, 4.799820258e-06f, 4.775260892e-06f, 4.750696012e-06f, 4.726125661e-06f, 4.701549883e-06f,
+4.676968720e-06f, 4.652382216e-06f, 4.627790414e-06f, 4.603193357e-06f, 4.578591088e-06f, 4.553983651e-06f, 4.529371089e-06f, 4.504753445e-06f, 4.480130761e-06f, 4.455503082e-06f,
+4.430870451e-06f, 4.406232910e-06f, 4.381590503e-06f, 4.356943273e-06f, 4.332291264e-06f, 4.307634518e-06f, 4.282973079e-06f, 4.258306991e-06f, 4.233636295e-06f, 4.208961036e-06f,
+4.184281257e-06f, 4.159597001e-06f, 4.134908312e-06f, 4.110215232e-06f, 4.085517804e-06f, 4.060816073e-06f, 4.036110081e-06f, 4.011399872e-06f, 3.986685489e-06f, 3.961966975e-06f,
+3.937244373e-06f, 3.912517727e-06f, 3.887787080e-06f, 3.863052475e-06f, 3.838313955e-06f, 3.813571565e-06f, 3.788825346e-06f, 3.764075343e-06f, 3.739321598e-06f, 3.714564156e-06f,
+3.689803058e-06f, 3.665038350e-06f, 3.640270073e-06f, 3.615498271e-06f, 3.590722987e-06f, 3.565944265e-06f, 3.541162149e-06f, 3.516376680e-06f, 3.491587903e-06f, 3.466795861e-06f,
+3.442000597e-06f, 3.417202155e-06f, 3.392400577e-06f, 3.367595908e-06f, 3.342788190e-06f, 3.317977467e-06f, 3.293163781e-06f, 3.268347177e-06f, 3.243527698e-06f, 3.218705387e-06f,
+3.193880286e-06f, 3.169052441e-06f, 3.144221893e-06f, 3.119388686e-06f, 3.094552864e-06f, 3.069714470e-06f, 3.044873546e-06f, 3.020030137e-06f, 2.995184286e-06f, 2.970336036e-06f,
+2.945485430e-06f, 2.920632511e-06f, 2.895777323e-06f, 2.870919910e-06f, 2.846060314e-06f, 2.821198579e-06f, 2.796334748e-06f, 2.771468864e-06f, 2.746600971e-06f, 2.721731112e-06f,
+2.696859330e-06f, 2.671985668e-06f, 2.647110171e-06f, 2.622232880e-06f, 2.597353840e-06f, 2.572473094e-06f, 2.547590684e-06f, 2.522706655e-06f, 2.497821049e-06f, 2.472933910e-06f,
+2.448045281e-06f, 2.423155205e-06f, 2.398263726e-06f, 2.373370887e-06f, 2.348476731e-06f, 2.323581301e-06f, 2.298684641e-06f, 2.273786794e-06f, 2.248887803e-06f, 2.223987711e-06f,
+2.199086562e-06f, 2.174184399e-06f, 2.149281265e-06f, 2.124377203e-06f, 2.099472257e-06f, 2.074566470e-06f, 2.049659884e-06f, 2.024752544e-06f, 1.999844493e-06f, 1.974935773e-06f,
+1.950026428e-06f, 1.925116501e-06f, 1.900206036e-06f, 1.875295075e-06f, 1.850383661e-06f, 1.825471839e-06f, 1.800559651e-06f, 1.775647140e-06f, 1.750734349e-06f, 1.725821323e-06f,
+1.700908102e-06f, 1.675994732e-06f, 1.651081256e-06f, 1.626167715e-06f, 1.601254154e-06f, 1.576340615e-06f, 1.551427143e-06f, 1.526513779e-06f, 1.501600567e-06f, 1.476687550e-06f,
+1.451774772e-06f, 1.426862275e-06f, 1.401950102e-06f, 1.377038297e-06f, 1.352126903e-06f, 1.327215962e-06f, 1.302305519e-06f, 1.277395615e-06f, 1.252486295e-06f, 1.227577600e-06f,
+1.202669575e-06f, 1.177762262e-06f, 1.152855705e-06f, 1.127949946e-06f, 1.103045028e-06f, 1.078140995e-06f, 1.053237889e-06f, 1.028335753e-06f, 1.003434632e-06f, 9.785345662e-07f,
+9.536356005e-07f, 9.287377772e-07f, 9.038411395e-07f, 8.789457303e-07f, 8.540515926e-07f, 8.291587693e-07f, 8.042673034e-07f, 7.793772379e-07f, 7.544886158e-07f, 7.296014799e-07f,
+7.047158731e-07f, 6.798318385e-07f, 6.549494190e-07f, 6.300686574e-07f, 6.051895966e-07f, 5.803122796e-07f, 5.554367492e-07f, 5.305630484e-07f, 5.056912199e-07f, 4.808213067e-07f,
+4.559533516e-07f, 4.310873974e-07f, 4.062234870e-07f, 3.813616633e-07f, 3.565019690e-07f, 3.316444470e-07f, 3.067891400e-07f, 2.819360909e-07f, 2.570853424e-07f, 2.322369374e-07f,
+2.073909186e-07f, 1.825473287e-07f, 1.577062106e-07f, 1.328676069e-07f, 1.080315604e-07f, 8.319811377e-08f, 5.836730982e-08f, 3.353919120e-08f, 8.713800614e-09f, -1.610881925e-08f,
+-4.092862571e-08f, -6.574557610e-08f, -9.055962777e-08f, -1.153707381e-07f, -1.401788643e-07f, -1.649839640e-07f, -1.897859943e-07f, -2.145849129e-07f, -2.393806769e-07f, -2.641732439e-07f,
+-2.889625712e-07f, -3.137486164e-07f, -3.385313367e-07f, -3.633106898e-07f, -3.880866331e-07f, -4.128591239e-07f, -4.376281199e-07f, -4.623935785e-07f, -4.871554573e-07f, -5.119137137e-07f,
+-5.366683052e-07f, -5.614191895e-07f, -5.861663240e-07f, -6.109096663e-07f, -6.356491741e-07f, -6.603848048e-07f, -6.851165161e-07f, -7.098442656e-07f, -7.345680109e-07f, -7.592877097e-07f,
+-7.840033195e-07f, -8.087147981e-07f, -8.334221031e-07f, -8.581251922e-07f, -8.828240230e-07f, -9.075185534e-07f, -9.322087409e-07f, -9.568945434e-07f, -9.815759185e-07f, -1.006252824e-06f,
+-1.030925218e-06f, -1.055593058e-06f, -1.080256301e-06f, -1.104914906e-06f, -1.129568830e-06f, -1.154218032e-06f, -1.178862469e-06f, -1.203502098e-06f, -1.228136879e-06f, -1.252766768e-06f,
+-1.277391723e-06f, -1.302011703e-06f, -1.326626665e-06f, -1.351236568e-06f, -1.375841369e-06f, -1.400441026e-06f, -1.425035497e-06f, -1.449624741e-06f, -1.474208714e-06f, -1.498787376e-06f,
+-1.523360684e-06f, -1.547928596e-06f, -1.572491071e-06f, -1.597048066e-06f, -1.621599540e-06f, -1.646145450e-06f, -1.670685755e-06f, -1.695220412e-06f, -1.719749381e-06f, -1.744272619e-06f,
+-1.768790084e-06f, -1.793301734e-06f, -1.817807528e-06f, -1.842307425e-06f, -1.866801381e-06f, -1.891289356e-06f, -1.915771307e-06f, -1.940247193e-06f, -1.964716973e-06f, -1.989180604e-06f,
+-2.013638045e-06f, -2.038089254e-06f, -2.062534189e-06f, -2.086972810e-06f, -2.111405074e-06f, -2.135830939e-06f, -2.160250365e-06f, -2.184663309e-06f, -2.209069730e-06f, -2.233469587e-06f,
+-2.257862838e-06f, -2.282249441e-06f, -2.306629355e-06f, -2.331002538e-06f, -2.355368950e-06f, -2.379728548e-06f, -2.404081291e-06f, -2.428427138e-06f, -2.452766048e-06f, -2.477097978e-06f,
+-2.501422888e-06f, -2.525740737e-06f, -2.550051482e-06f, -2.574355083e-06f, -2.598651499e-06f, -2.622940687e-06f, -2.647222608e-06f, -2.671497219e-06f, -2.695764479e-06f, -2.720024348e-06f,
+-2.744276784e-06f, -2.768521745e-06f, -2.792759192e-06f, -2.816989082e-06f, -2.841211374e-06f, -2.865426028e-06f, -2.889633002e-06f, -2.913832255e-06f, -2.938023746e-06f, -2.962207435e-06f,
+-2.986383280e-06f, -3.010551240e-06f, -3.034711274e-06f, -3.058863341e-06f, -3.083007401e-06f, -3.107143412e-06f, -3.131271334e-06f, -3.155391125e-06f, -3.179502745e-06f, -3.203606153e-06f,
+-3.227701308e-06f, -3.251788170e-06f, -3.275866697e-06f, -3.299936849e-06f, -3.323998584e-06f, -3.348051863e-06f, -3.372096645e-06f, -3.396132888e-06f, -3.420160553e-06f, -3.444179598e-06f,
+-3.468189984e-06f, -3.492191668e-06f, -3.516184612e-06f, -3.540168773e-06f, -3.564144112e-06f, -3.588110589e-06f, -3.612068161e-06f, -3.636016790e-06f, -3.659956435e-06f, -3.683887055e-06f,
+-3.707808609e-06f, -3.731721058e-06f, -3.755624361e-06f, -3.779518477e-06f, -3.803403367e-06f, -3.827278989e-06f, -3.851145305e-06f, -3.875002272e-06f, -3.898849851e-06f, -3.922688003e-06f,
+-3.946516685e-06f, -3.970335860e-06f, -3.994145485e-06f, -4.017945521e-06f, -4.041735929e-06f, -4.065516667e-06f, -4.089287695e-06f, -4.113048975e-06f, -4.136800464e-06f, -4.160542125e-06f,
+-4.184273916e-06f, -4.207995797e-06f, -4.231707729e-06f, -4.255409671e-06f, -4.279101584e-06f, -4.302783428e-06f, -4.326455162e-06f, -4.350116748e-06f, -4.373768145e-06f, -4.397409313e-06f,
+-4.421040213e-06f, -4.444660804e-06f, -4.468271048e-06f, -4.491870903e-06f, -4.515460332e-06f, -4.539039293e-06f, -4.562607748e-06f, -4.586165656e-06f, -4.609712978e-06f, -4.633249675e-06f,
+-4.656775706e-06f, -4.680291033e-06f, -4.703795616e-06f, -4.727289415e-06f, -4.750772390e-06f, -4.774244503e-06f, -4.797705714e-06f, -4.821155984e-06f, -4.844595273e-06f, -4.868023541e-06f,
+-4.891440750e-06f, -4.914846860e-06f, -4.938241832e-06f, -4.961625626e-06f, -4.984998204e-06f, -5.008359526e-06f, -5.031709553e-06f, -5.055048245e-06f, -5.078375564e-06f, -5.101691471e-06f,
+-5.124995926e-06f, -5.148288891e-06f, -5.171570325e-06f, -5.194840191e-06f, -5.218098449e-06f, -5.241345061e-06f, -5.264579987e-06f, -5.287803188e-06f, -5.311014625e-06f, -5.334214261e-06f,
+-5.357402055e-06f, -5.380577969e-06f, -5.403741964e-06f, -5.426894001e-06f, -5.450034042e-06f, -5.473162048e-06f, -5.496277980e-06f, -5.519381800e-06f, -5.542473469e-06f, -5.565552947e-06f,
+-5.588620198e-06f, -5.611675181e-06f, -5.634717859e-06f, -5.657748193e-06f, -5.680766144e-06f, -5.703771675e-06f, -5.726764746e-06f, -5.749745319e-06f, -5.772713356e-06f, -5.795668818e-06f,
+-5.818611667e-06f, -5.841541865e-06f, -5.864459373e-06f, -5.887364154e-06f, -5.910256169e-06f, -5.933135379e-06f, -5.956001747e-06f, -5.978855234e-06f, -6.001695802e-06f, -6.024523414e-06f,
+-6.047338031e-06f, -6.070139614e-06f, -6.092928127e-06f, -6.115703531e-06f, -6.138465787e-06f, -6.161214859e-06f, -6.183950708e-06f, -6.206673296e-06f, -6.229382586e-06f, -6.252078539e-06f,
+-6.274761118e-06f, -6.297430285e-06f, -6.320086002e-06f, -6.342728232e-06f, -6.365356937e-06f, -6.387972078e-06f, -6.410573620e-06f, -6.433161523e-06f, -6.455735750e-06f, -6.478296265e-06f,
+-6.500843028e-06f, -6.523376003e-06f, -6.545895153e-06f, -6.568400439e-06f, -6.590891825e-06f, -6.613369273e-06f, -6.635832745e-06f, -6.658282205e-06f, -6.680717614e-06f, -6.703138937e-06f,
+-6.725546135e-06f, -6.747939171e-06f, -6.770318008e-06f, -6.792682609e-06f, -6.815032937e-06f, -6.837368955e-06f, -6.859690625e-06f, -6.881997911e-06f, -6.904290775e-06f, -6.926569181e-06f,
+-6.948833091e-06f, -6.971082469e-06f, -6.993317278e-06f, -7.015537481e-06f, -7.037743041e-06f, -7.059933921e-06f, -7.082110085e-06f, -7.104271496e-06f, -7.126418116e-06f, -7.148549910e-06f,
+-7.170666840e-06f, -7.192768871e-06f, -7.214855965e-06f, -7.236928085e-06f, -7.258985196e-06f, -7.281027261e-06f, -7.303054243e-06f, -7.325066106e-06f, -7.347062814e-06f, -7.369044329e-06f,
+-7.391010616e-06f, -7.412961639e-06f, -7.434897360e-06f, -7.456817745e-06f, -7.478722756e-06f, -7.500612357e-06f, -7.522486513e-06f, -7.544345186e-06f, -7.566188342e-06f, -7.588015943e-06f,
+-7.609827954e-06f, -7.631624339e-06f, -7.653405061e-06f, -7.675170086e-06f, -7.696919376e-06f, -7.718652896e-06f, -7.740370610e-06f, -7.762072483e-06f, -7.783758478e-06f, -7.805428560e-06f,
+-7.827082693e-06f, -7.848720841e-06f, -7.870342968e-06f, -7.891949040e-06f, -7.913539020e-06f, -7.935112872e-06f, -7.956670562e-06f, -7.978212054e-06f, -7.999737311e-06f, -8.021246300e-06f,
+-8.042738983e-06f, -8.064215327e-06f, -8.085675295e-06f, -8.107118853e-06f, -8.128545964e-06f, -8.149956595e-06f, -8.171350708e-06f, -8.192728270e-06f, -8.214089245e-06f, -8.235433598e-06f,
+-8.256761294e-06f, -8.278072298e-06f, -8.299366575e-06f, -8.320644089e-06f, -8.341904806e-06f, -8.363148692e-06f, -8.384375710e-06f, -8.405585826e-06f, -8.426779006e-06f, -8.447955214e-06f,
+-8.469114416e-06f, -8.490256577e-06f, -8.511381662e-06f, -8.532489638e-06f, -8.553580468e-06f, -8.574654118e-06f, -8.595710554e-06f, -8.616749742e-06f, -8.637771647e-06f, -8.658776234e-06f,
+-8.679763469e-06f, -8.700733317e-06f, -8.721685745e-06f, -8.742620717e-06f, -8.763538200e-06f, -8.784438160e-06f, -8.805320561e-06f, -8.826185371e-06f, -8.847032554e-06f, -8.867862077e-06f,
+-8.888673906e-06f, -8.909468005e-06f, -8.930244343e-06f, -8.951002884e-06f, -8.971743594e-06f, -8.992466440e-06f, -9.013171388e-06f, -9.033858404e-06f, -9.054527454e-06f, -9.075178504e-06f,
+-9.095811521e-06f, -9.116426471e-06f, -9.137023320e-06f, -9.157602034e-06f, -9.178162580e-06f, -9.198704925e-06f, -9.219229035e-06f, -9.239734876e-06f, -9.260222416e-06f, -9.280691619e-06f,
+-9.301142454e-06f, -9.321574887e-06f, -9.341988884e-06f, -9.362384412e-06f, -9.382761438e-06f, -9.403119929e-06f, -9.423459852e-06f, -9.443781173e-06f, -9.464083859e-06f, -9.484367877e-06f,
+-9.504633195e-06f, -9.524879779e-06f, -9.545107597e-06f, -9.565316614e-06f, -9.585506799e-06f, -9.605678119e-06f, -9.625830541e-06f, -9.645964032e-06f, -9.666078559e-06f, -9.686174089e-06f,
+-9.706250591e-06f, -9.726308031e-06f, -9.746346377e-06f, -9.766365596e-06f, -9.786365655e-06f, -9.806346523e-06f, -9.826308166e-06f, -9.846250553e-06f, -9.866173651e-06f, -9.886077427e-06f,
+-9.905961850e-06f, -9.925826887e-06f, -9.945672506e-06f, -9.965498674e-06f, -9.985305360e-06f, -1.000509253e-05f, -1.002486016e-05f, -1.004460820e-05f, -1.006433664e-05f, -1.008404543e-05f,
+-1.010373455e-05f, -1.012340396e-05f, -1.014305363e-05f, -1.016268354e-05f, -1.018229364e-05f, -1.020188390e-05f, -1.022145431e-05f, -1.024100481e-05f, -1.026053539e-05f, -1.028004601e-05f,
+-1.029953663e-05f, -1.031900723e-05f, -1.033845778e-05f, -1.035788824e-05f, -1.037729858e-05f, -1.039668878e-05f, -1.041605879e-05f, -1.043540860e-05f, -1.045473816e-05f, -1.047404744e-05f,
+-1.049333643e-05f, -1.051260507e-05f, -1.053185335e-05f, -1.055108123e-05f, -1.057028868e-05f, -1.058947567e-05f, -1.060864217e-05f, -1.062778815e-05f, -1.064691357e-05f, -1.066601841e-05f,
+-1.068510264e-05f, -1.070416622e-05f, -1.072320913e-05f, -1.074223132e-05f, -1.076123279e-05f, -1.078021348e-05f, -1.079917337e-05f, -1.081811244e-05f, -1.083703065e-05f, -1.085592797e-05f,
+-1.087480437e-05f, -1.089365981e-05f, -1.091249428e-05f, -1.093130774e-05f, -1.095010015e-05f, -1.096887150e-05f, -1.098762174e-05f, -1.100635085e-05f, -1.102505880e-05f, -1.104374556e-05f,
+-1.106241109e-05f, -1.108105538e-05f, -1.109967838e-05f, -1.111828007e-05f, -1.113686042e-05f, -1.115541940e-05f, -1.117395698e-05f, -1.119247313e-05f, -1.121096782e-05f, -1.122944102e-05f,
+-1.124789270e-05f, -1.126632283e-05f, -1.128473139e-05f, -1.130311834e-05f, -1.132148364e-05f, -1.133982729e-05f, -1.135814924e-05f, -1.137644946e-05f, -1.139472793e-05f, -1.141298461e-05f,
+-1.143121948e-05f, -1.144943251e-05f, -1.146762367e-05f, -1.148579293e-05f, -1.150394027e-05f, -1.152206564e-05f, -1.154016903e-05f, -1.155825040e-05f, -1.157630972e-05f, -1.159434698e-05f,
+-1.161236213e-05f, -1.163035515e-05f, -1.164832601e-05f, -1.166627468e-05f, -1.168420114e-05f, -1.170210535e-05f, -1.171998729e-05f, -1.173784693e-05f, -1.175568423e-05f, -1.177349918e-05f,
+-1.179129174e-05f, -1.180906188e-05f, -1.182680958e-05f, -1.184453481e-05f, -1.186223754e-05f, -1.187991774e-05f, -1.189757539e-05f, -1.191521045e-05f, -1.193282289e-05f, -1.195041270e-05f,
+-1.196797984e-05f, -1.198552428e-05f, -1.200304600e-05f, -1.202054497e-05f, -1.203802115e-05f, -1.205547454e-05f, -1.207290508e-05f, -1.209031276e-05f, -1.210769756e-05f, -1.212505943e-05f,
+-1.214239836e-05f, -1.215971432e-05f, -1.217700728e-05f, -1.219427721e-05f, -1.221152409e-05f, -1.222874788e-05f, -1.224594857e-05f, -1.226312612e-05f, -1.228028051e-05f, -1.229741170e-05f,
+-1.231451968e-05f, -1.233160442e-05f, -1.234866588e-05f, -1.236570404e-05f, -1.238271888e-05f, -1.239971037e-05f, -1.241667848e-05f, -1.243362318e-05f, -1.245054445e-05f, -1.246744226e-05f,
+-1.248431659e-05f, -1.250116740e-05f, -1.251799467e-05f, -1.253479838e-05f, -1.255157850e-05f, -1.256833500e-05f, -1.258506785e-05f, -1.260177704e-05f, -1.261846252e-05f, -1.263512429e-05f,
+-1.265176230e-05f, -1.266837654e-05f, -1.268496698e-05f, -1.270153358e-05f, -1.271807634e-05f, -1.273459522e-05f, -1.275109019e-05f, -1.276756122e-05f, -1.278400831e-05f, -1.280043140e-05f,
+-1.281683049e-05f, -1.283320555e-05f, -1.284955654e-05f, -1.286588345e-05f, -1.288218625e-05f, -1.289846491e-05f, -1.291471941e-05f, -1.293094972e-05f, -1.294715581e-05f, -1.296333767e-05f,
+-1.297949527e-05f, -1.299562857e-05f, -1.301173756e-05f, -1.302782222e-05f, -1.304388250e-05f, -1.305991840e-05f, -1.307592988e-05f, -1.309191693e-05f, -1.310787951e-05f, -1.312381760e-05f,
+-1.313973117e-05f, -1.315562021e-05f, -1.317148468e-05f, -1.318732457e-05f, -1.320313984e-05f, -1.321893047e-05f, -1.323469644e-05f, -1.325043773e-05f, -1.326615430e-05f, -1.328184614e-05f,
+-1.329751321e-05f, -1.331315551e-05f, -1.332877299e-05f, -1.334436564e-05f, -1.335993343e-05f, -1.337547634e-05f, -1.339099435e-05f, -1.340648743e-05f, -1.342195555e-05f, -1.343739870e-05f,
+-1.345281684e-05f, -1.346820996e-05f, -1.348357803e-05f, -1.349892102e-05f, -1.351423892e-05f, -1.352953170e-05f, -1.354479934e-05f, -1.356004180e-05f, -1.357525908e-05f, -1.359045114e-05f,
+-1.360561796e-05f, -1.362075953e-05f, -1.363587580e-05f, -1.365096677e-05f, -1.366603240e-05f, -1.368107269e-05f, -1.369608759e-05f, -1.371107709e-05f, -1.372604117e-05f, -1.374097980e-05f,
+-1.375589296e-05f, -1.377078062e-05f, -1.378564277e-05f, -1.380047938e-05f, -1.381529043e-05f, -1.383007590e-05f, -1.384483575e-05f, -1.385956998e-05f, -1.387427855e-05f, -1.388896145e-05f,
+-1.390361865e-05f, -1.391825013e-05f, -1.393285587e-05f, -1.394743584e-05f, -1.396199003e-05f, -1.397651840e-05f, -1.399102094e-05f, -1.400549763e-05f, -1.401994845e-05f, -1.403437336e-05f,
+-1.404877235e-05f, -1.406314540e-05f, -1.407749249e-05f, -1.409181359e-05f, -1.410610868e-05f, -1.412037774e-05f, -1.413462075e-05f, -1.414883768e-05f, -1.416302852e-05f, -1.417719325e-05f,
+-1.419133183e-05f, -1.420544426e-05f, -1.421953050e-05f, -1.423359054e-05f, -1.424762435e-05f, -1.426163192e-05f, -1.427561323e-05f, -1.428956824e-05f, -1.430349694e-05f, -1.431739932e-05f,
+-1.433127534e-05f, -1.434512499e-05f, -1.435894824e-05f, -1.437274508e-05f, -1.438651549e-05f, -1.440025944e-05f, -1.441397691e-05f, -1.442766788e-05f, -1.444133233e-05f, -1.445497025e-05f,
+-1.446858160e-05f, -1.448216637e-05f, -1.449572454e-05f, -1.450925609e-05f, -1.452276100e-05f, -1.453623924e-05f, -1.454969081e-05f, -1.456311566e-05f, -1.457651380e-05f, -1.458988519e-05f,
+-1.460322982e-05f, -1.461654766e-05f, -1.462983870e-05f, -1.464310292e-05f, -1.465634029e-05f, -1.466955080e-05f, -1.468273442e-05f, -1.469589114e-05f, -1.470902094e-05f, -1.472212379e-05f,
+-1.473519968e-05f, -1.474824859e-05f, -1.476127050e-05f, -1.477426539e-05f, -1.478723324e-05f, -1.480017402e-05f, -1.481308773e-05f, -1.482597434e-05f, -1.483883383e-05f, -1.485166618e-05f,
+-1.486447138e-05f, -1.487724940e-05f, -1.489000023e-05f, -1.490272384e-05f, -1.491542022e-05f, -1.492808935e-05f, -1.494073121e-05f, -1.495334578e-05f, -1.496593304e-05f, -1.497849297e-05f,
+-1.499102556e-05f, -1.500353079e-05f, -1.501600863e-05f, -1.502845907e-05f, -1.504088210e-05f, -1.505327768e-05f, -1.506564581e-05f, -1.507798647e-05f, -1.509029963e-05f, -1.510258528e-05f,
+-1.511484340e-05f, -1.512707397e-05f, -1.513927698e-05f, -1.515145241e-05f, -1.516360023e-05f, -1.517572043e-05f, -1.518781300e-05f, -1.519987791e-05f, -1.521191515e-05f, -1.522392470e-05f,
+-1.523590654e-05f, -1.524786065e-05f, -1.525978702e-05f, -1.527168563e-05f, -1.528355647e-05f, -1.529539950e-05f, -1.530721472e-05f, -1.531900212e-05f, -1.533076166e-05f, -1.534249334e-05f,
+-1.535419714e-05f, -1.536587303e-05f, -1.537752102e-05f, -1.538914106e-05f, -1.540073316e-05f, -1.541229729e-05f, -1.542383344e-05f, -1.543534158e-05f, -1.544682171e-05f, -1.545827380e-05f,
+-1.546969784e-05f, -1.548109382e-05f, -1.549246171e-05f, -1.550380149e-05f, -1.551511317e-05f, -1.552639670e-05f, -1.553765209e-05f, -1.554887931e-05f, -1.556007835e-05f, -1.557124919e-05f,
+-1.558239181e-05f, -1.559350620e-05f, -1.560459235e-05f, -1.561565023e-05f, -1.562667984e-05f, -1.563768114e-05f, -1.564865414e-05f, -1.565959881e-05f, -1.567051514e-05f, -1.568140311e-05f,
+-1.569226270e-05f, -1.570309391e-05f, -1.571389671e-05f, -1.572467109e-05f, -1.573541704e-05f, -1.574613453e-05f, -1.575682356e-05f, -1.576748410e-05f, -1.577811615e-05f, -1.578871968e-05f,
+-1.579929469e-05f, -1.580984115e-05f, -1.582035906e-05f, -1.583084839e-05f, -1.584130914e-05f, -1.585174128e-05f, -1.586214481e-05f, -1.587251970e-05f, -1.588286595e-05f, -1.589318353e-05f,
+-1.590347244e-05f, -1.591373266e-05f, -1.592396417e-05f, -1.593416696e-05f, -1.594434102e-05f, -1.595448633e-05f, -1.596460287e-05f, -1.597469064e-05f, -1.598474962e-05f, -1.599477979e-05f,
+-1.600478114e-05f, -1.601475366e-05f, -1.602469733e-05f, -1.603461214e-05f, -1.604449807e-05f, -1.605435512e-05f, -1.606418326e-05f, -1.607398248e-05f, -1.608375277e-05f, -1.609349412e-05f,
+-1.610320651e-05f, -1.611288993e-05f, -1.612254436e-05f, -1.613216979e-05f, -1.614176621e-05f, -1.615133361e-05f, -1.616087197e-05f, -1.617038127e-05f, -1.617986151e-05f, -1.618931268e-05f,
+-1.619873475e-05f, -1.620812771e-05f, -1.621749156e-05f, -1.622682628e-05f, -1.623613186e-05f, -1.624540828e-05f, -1.625465553e-05f, -1.626387360e-05f, -1.627306248e-05f, -1.628222215e-05f,
+-1.629135260e-05f, -1.630045381e-05f, -1.630952579e-05f, -1.631856851e-05f, -1.632758195e-05f, -1.633656612e-05f, -1.634552099e-05f, -1.635444656e-05f, -1.636334281e-05f, -1.637220973e-05f,
+-1.638104731e-05f, -1.638985553e-05f, -1.639863439e-05f, -1.640738387e-05f, -1.641610396e-05f, -1.642479465e-05f, -1.643345592e-05f, -1.644208777e-05f, -1.645069019e-05f, -1.645926315e-05f,
+-1.646780666e-05f, -1.647632069e-05f, -1.648480525e-05f, -1.649326031e-05f, -1.650168586e-05f, -1.651008190e-05f, -1.651844841e-05f, -1.652678538e-05f, -1.653509280e-05f, -1.654337066e-05f,
+-1.655161894e-05f, -1.655983765e-05f, -1.656802676e-05f, -1.657618627e-05f, -1.658431616e-05f, -1.659241642e-05f, -1.660048705e-05f, -1.660852803e-05f, -1.661653936e-05f, -1.662452101e-05f,
+-1.663247299e-05f, -1.664039527e-05f, -1.664828786e-05f, -1.665615073e-05f, -1.666398389e-05f, -1.667178731e-05f, -1.667956100e-05f, -1.668730493e-05f, -1.669501910e-05f, -1.670270351e-05f,
+-1.671035813e-05f, -1.671798296e-05f, -1.672557799e-05f, -1.673314320e-05f, -1.674067860e-05f, -1.674818417e-05f, -1.675565990e-05f, -1.676310578e-05f, -1.677052181e-05f, -1.677790796e-05f,
+-1.678526424e-05f, -1.679259063e-05f, -1.679988712e-05f, -1.680715371e-05f, -1.681439039e-05f, -1.682159714e-05f, -1.682877396e-05f, -1.683592083e-05f, -1.684303776e-05f, -1.685012472e-05f,
+-1.685718172e-05f, -1.686420874e-05f, -1.687120577e-05f, -1.687817281e-05f, -1.688510985e-05f, -1.689201687e-05f, -1.689889387e-05f, -1.690574084e-05f, -1.691255778e-05f, -1.691934467e-05f,
+-1.692610150e-05f, -1.693282827e-05f, -1.693952497e-05f, -1.694619159e-05f, -1.695282812e-05f, -1.695943456e-05f, -1.696601089e-05f, -1.697255712e-05f, -1.697907322e-05f, -1.698555919e-05f,
+-1.699201503e-05f, -1.699844073e-05f, -1.700483628e-05f, -1.701120166e-05f, -1.701753689e-05f, -1.702384193e-05f, -1.703011680e-05f, -1.703636148e-05f, -1.704257596e-05f, -1.704876024e-05f,
+-1.705491431e-05f, -1.706103816e-05f, -1.706713179e-05f, -1.707319518e-05f, -1.707922833e-05f, -1.708523124e-05f, -1.709120390e-05f, -1.709714629e-05f, -1.710305842e-05f, -1.710894027e-05f,
+-1.711479184e-05f, -1.712061313e-05f, -1.712640412e-05f, -1.713216481e-05f, -1.713789519e-05f, -1.714359526e-05f, -1.714926501e-05f, -1.715490444e-05f, -1.716051353e-05f, -1.716609228e-05f,
+-1.717164069e-05f, -1.717715874e-05f, -1.718264644e-05f, -1.718810377e-05f, -1.719353073e-05f, -1.719892732e-05f, -1.720429353e-05f, -1.720962935e-05f, -1.721493477e-05f, -1.722020980e-05f,
+-1.722545442e-05f, -1.723066863e-05f, -1.723585243e-05f, -1.724100580e-05f, -1.724612875e-05f, -1.725122126e-05f, -1.725628334e-05f, -1.726131497e-05f, -1.726631616e-05f, -1.727128689e-05f,
+-1.727622716e-05f, -1.728113697e-05f, -1.728601631e-05f, -1.729086517e-05f, -1.729568356e-05f, -1.730047146e-05f, -1.730522888e-05f, -1.730995580e-05f, -1.731465222e-05f, -1.731931814e-05f,
+-1.732395355e-05f, -1.732855845e-05f, -1.733313284e-05f, -1.733767670e-05f, -1.734219004e-05f, -1.734667285e-05f, -1.735112512e-05f, -1.735554685e-05f, -1.735993805e-05f, -1.736429869e-05f,
+-1.736862879e-05f, -1.737292832e-05f, -1.737719731e-05f, -1.738143572e-05f, -1.738564357e-05f, -1.738982085e-05f, -1.739396756e-05f, -1.739808369e-05f, -1.740216924e-05f, -1.740622420e-05f,
+-1.741024857e-05f, -1.741424235e-05f, -1.741820553e-05f, -1.742213812e-05f, -1.742604010e-05f, -1.742991147e-05f, -1.743375224e-05f, -1.743756240e-05f, -1.744134194e-05f, -1.744509086e-05f,
+-1.744880915e-05f, -1.745249683e-05f, -1.745615388e-05f, -1.745978029e-05f, -1.746337608e-05f, -1.746694122e-05f, -1.747047573e-05f, -1.747397960e-05f, -1.747745282e-05f, -1.748089540e-05f,
+-1.748430733e-05f, -1.748768860e-05f, -1.749103923e-05f, -1.749435919e-05f, -1.749764850e-05f, -1.750090715e-05f, -1.750413513e-05f, -1.750733245e-05f, -1.751049911e-05f, -1.751363509e-05f,
+-1.751674040e-05f, -1.751981504e-05f, -1.752285901e-05f, -1.752587230e-05f, -1.752885491e-05f, -1.753180684e-05f, -1.753472809e-05f, -1.753761865e-05f, -1.754047853e-05f, -1.754330773e-05f,
+-1.754610624e-05f, -1.754887405e-05f, -1.755161118e-05f, -1.755431762e-05f, -1.755699336e-05f, -1.755963841e-05f, -1.756225277e-05f, -1.756483642e-05f, -1.756738938e-05f, -1.756991165e-05f,
+-1.757240321e-05f, -1.757486408e-05f, -1.757729424e-05f, -1.757969370e-05f, -1.758206246e-05f, -1.758440052e-05f, -1.758670787e-05f, -1.758898452e-05f, -1.759123047e-05f, -1.759344571e-05f,
+-1.759563025e-05f, -1.759778408e-05f, -1.759990720e-05f, -1.760199962e-05f, -1.760406134e-05f, -1.760609235e-05f, -1.760809265e-05f, -1.761006224e-05f, -1.761200113e-05f, -1.761390932e-05f,
+-1.761578679e-05f, -1.761763357e-05f, -1.761944964e-05f, -1.762123500e-05f, -1.762298966e-05f, -1.762471361e-05f, -1.762640686e-05f, -1.762806941e-05f, -1.762970125e-05f, -1.763130240e-05f,
+-1.763287284e-05f, -1.763441258e-05f, -1.763592162e-05f, -1.763739997e-05f, -1.763884761e-05f, -1.764026456e-05f, -1.764165082e-05f, -1.764300638e-05f, -1.764433124e-05f, -1.764562541e-05f,
+-1.764688890e-05f, -1.764812169e-05f, -1.764932379e-05f, -1.765049521e-05f, -1.765163594e-05f, -1.765274599e-05f, -1.765382535e-05f, -1.765487403e-05f, -1.765589204e-05f, -1.765687936e-05f,
+-1.765783601e-05f, -1.765876199e-05f, -1.765965729e-05f, -1.766052193e-05f, -1.766135589e-05f, -1.766215919e-05f, -1.766293183e-05f, -1.766367380e-05f, -1.766438511e-05f, -1.766506577e-05f,
+-1.766571577e-05f, -1.766633512e-05f, -1.766692381e-05f, -1.766748186e-05f, -1.766800926e-05f, -1.766850602e-05f, -1.766897214e-05f, -1.766940762e-05f, -1.766981247e-05f, -1.767018668e-05f,
+-1.767053027e-05f, -1.767084322e-05f, -1.767112556e-05f, -1.767137727e-05f, -1.767159837e-05f, -1.767178885e-05f, -1.767194872e-05f, -1.767207798e-05f, -1.767217663e-05f, -1.767224469e-05f,
+-1.767228214e-05f, -1.767228901e-05f, -1.767226527e-05f, -1.767221096e-05f, -1.767212605e-05f, -1.767201057e-05f, -1.767186451e-05f, -1.767168787e-05f, -1.767148067e-05f, -1.767124290e-05f,
+-1.767097456e-05f, -1.767067567e-05f, -1.767034623e-05f, -1.766998623e-05f, -1.766959569e-05f, -1.766917461e-05f, -1.766872299e-05f, -1.766824084e-05f, -1.766772815e-05f, -1.766718494e-05f,
+-1.766661122e-05f, -1.766600697e-05f, -1.766537221e-05f, -1.766470695e-05f, -1.766401119e-05f, -1.766328492e-05f, -1.766252817e-05f, -1.766174092e-05f, -1.766092320e-05f, -1.766007499e-05f,
+-1.765919631e-05f, -1.765828716e-05f, -1.765734755e-05f, -1.765637748e-05f, -1.765537696e-05f, -1.765434599e-05f, -1.765328457e-05f, -1.765219272e-05f, -1.765107044e-05f, -1.764991772e-05f,
+-1.764873459e-05f, -1.764752104e-05f, -1.764627708e-05f, -1.764500272e-05f, -1.764369796e-05f, -1.764236280e-05f, -1.764099725e-05f, -1.763960133e-05f, -1.763817503e-05f, -1.763671835e-05f,
+-1.763523132e-05f, -1.763371392e-05f, -1.763216617e-05f, -1.763058808e-05f, -1.762897965e-05f, -1.762734088e-05f, -1.762567179e-05f, -1.762397237e-05f, -1.762224264e-05f, -1.762048260e-05f,
+-1.761869226e-05f, -1.761687163e-05f, -1.761502071e-05f, -1.761313950e-05f, -1.761122802e-05f, -1.760928627e-05f, -1.760731426e-05f, -1.760531199e-05f, -1.760327948e-05f, -1.760121673e-05f,
+-1.759912374e-05f, -1.759700052e-05f, -1.759484709e-05f, -1.759266344e-05f, -1.759044958e-05f, -1.758820553e-05f, -1.758593129e-05f, -1.758362686e-05f, -1.758129226e-05f, -1.757892749e-05f,
+-1.757653255e-05f, -1.757410747e-05f, -1.757165223e-05f, -1.756916686e-05f, -1.756665136e-05f, -1.756410574e-05f, -1.756153000e-05f, -1.755892415e-05f, -1.755628820e-05f, -1.755362216e-05f,
+-1.755092604e-05f, -1.754819985e-05f, -1.754544359e-05f, -1.754265726e-05f, -1.753984089e-05f, -1.753699448e-05f, -1.753411803e-05f, -1.753121155e-05f, -1.752827506e-05f, -1.752530856e-05f,
+-1.752231206e-05f, -1.751928557e-05f, -1.751622909e-05f, -1.751314264e-05f, -1.751002623e-05f, -1.750687986e-05f, -1.750370354e-05f, -1.750049728e-05f, -1.749726109e-05f, -1.749399498e-05f,
+-1.749069896e-05f, -1.748737303e-05f, -1.748401722e-05f, -1.748063151e-05f, -1.747721594e-05f, -1.747377049e-05f, -1.747029519e-05f, -1.746679004e-05f, -1.746325506e-05f, -1.745969024e-05f,
+-1.745609561e-05f, -1.745247117e-05f, -1.744881693e-05f, -1.744513290e-05f, -1.744141909e-05f, -1.743767550e-05f, -1.743390216e-05f, -1.743009907e-05f, -1.742626624e-05f, -1.742240368e-05f,
+-1.741851139e-05f, -1.741458940e-05f, -1.741063771e-05f, -1.740665632e-05f, -1.740264526e-05f, -1.739860453e-05f, -1.739453413e-05f, -1.739043409e-05f, -1.738630442e-05f, -1.738214511e-05f,
+-1.737795619e-05f, -1.737373766e-05f, -1.736948953e-05f, -1.736521182e-05f, -1.736090454e-05f, -1.735656769e-05f, -1.735220129e-05f, -1.734780535e-05f, -1.734337988e-05f, -1.733892488e-05f,
+-1.733444038e-05f, -1.732992638e-05f, -1.732538290e-05f, -1.732080994e-05f, -1.731620751e-05f, -1.731157564e-05f, -1.730691432e-05f, -1.730222357e-05f, -1.729750340e-05f, -1.729275383e-05f,
+-1.728797486e-05f, -1.728316651e-05f, -1.727832879e-05f, -1.727346170e-05f, -1.726856527e-05f, -1.726363950e-05f, -1.725868440e-05f, -1.725370000e-05f, -1.724868629e-05f, -1.724364329e-05f,
+-1.723857102e-05f, -1.723346948e-05f, -1.722833868e-05f, -1.722317865e-05f, -1.721798939e-05f, -1.721277091e-05f, -1.720752323e-05f, -1.720224636e-05f, -1.719694031e-05f, -1.719160509e-05f,
+-1.718624072e-05f, -1.718084721e-05f, -1.717542457e-05f, -1.716997282e-05f, -1.716449196e-05f, -1.715898201e-05f, -1.715344298e-05f, -1.714787489e-05f, -1.714227775e-05f, -1.713665157e-05f,
+-1.713099636e-05f, -1.712531214e-05f, -1.711959892e-05f, -1.711385672e-05f, -1.710808554e-05f, -1.710228541e-05f, -1.709645632e-05f, -1.709059831e-05f, -1.708471137e-05f, -1.707879553e-05f,
+-1.707285079e-05f, -1.706687718e-05f, -1.706087470e-05f, -1.705484337e-05f, -1.704878321e-05f, -1.704269421e-05f, -1.703657641e-05f, -1.703042981e-05f, -1.702425443e-05f, -1.701805028e-05f,
+-1.701181738e-05f, -1.700555573e-05f, -1.699926536e-05f, -1.699294628e-05f, -1.698659850e-05f, -1.698022203e-05f, -1.697381689e-05f, -1.696738310e-05f, -1.696092067e-05f, -1.695442962e-05f,
+-1.694790995e-05f, -1.694136168e-05f, -1.693478483e-05f, -1.692817941e-05f, -1.692154544e-05f, -1.691488293e-05f, -1.690819190e-05f, -1.690147236e-05f, -1.689472432e-05f, -1.688794781e-05f,
+-1.688114283e-05f, -1.687430940e-05f, -1.686744753e-05f, -1.686055725e-05f, -1.685363856e-05f, -1.684669149e-05f, -1.683971604e-05f, -1.683271223e-05f, -1.682568008e-05f, -1.681861960e-05f,
+-1.681153081e-05f, -1.680441373e-05f, -1.679726836e-05f, -1.679009473e-05f, -1.678289285e-05f, -1.677566273e-05f, -1.676840440e-05f, -1.676111786e-05f, -1.675380313e-05f, -1.674646024e-05f,
+-1.673908919e-05f, -1.673169000e-05f, -1.672426269e-05f, -1.671680727e-05f, -1.670932376e-05f, -1.670181217e-05f, -1.669427253e-05f, -1.668670484e-05f, -1.667910913e-05f, -1.667148541e-05f,
+-1.666383369e-05f, -1.665615400e-05f, -1.664844635e-05f, -1.664071076e-05f, -1.663294723e-05f, -1.662515580e-05f, -1.661733647e-05f, -1.660948926e-05f, -1.660161420e-05f, -1.659371129e-05f,
+-1.658578055e-05f, -1.657782201e-05f, -1.656983567e-05f, -1.656182155e-05f, -1.655377968e-05f, -1.654571006e-05f, -1.653761272e-05f, -1.652948767e-05f, -1.652133493e-05f, -1.651315452e-05f,
+-1.650494645e-05f, -1.649671074e-05f, -1.648844741e-05f, -1.648015648e-05f, -1.647183796e-05f, -1.646349187e-05f, -1.645511823e-05f, -1.644671706e-05f, -1.643828838e-05f, -1.642983219e-05f,
+-1.642134852e-05f, -1.641283740e-05f, -1.640429882e-05f, -1.639573282e-05f, -1.638713941e-05f, -1.637851861e-05f, -1.636987044e-05f, -1.636119492e-05f, -1.635249205e-05f, -1.634376187e-05f,
+-1.633500439e-05f, -1.632621963e-05f, -1.631740760e-05f, -1.630856833e-05f, -1.629970183e-05f, -1.629080812e-05f, -1.628188722e-05f, -1.627293915e-05f, -1.626396393e-05f, -1.625496158e-05f,
+-1.624593211e-05f, -1.623687554e-05f, -1.622779189e-05f, -1.621868119e-05f, -1.620954344e-05f, -1.620037868e-05f, -1.619118691e-05f, -1.618196816e-05f, -1.617272244e-05f, -1.616344978e-05f,
+-1.615415019e-05f, -1.614482369e-05f, -1.613547031e-05f, -1.612609006e-05f, -1.611668296e-05f, -1.610724902e-05f, -1.609778828e-05f, -1.608830075e-05f, -1.607878644e-05f, -1.606924539e-05f,
+-1.605967760e-05f, -1.605008309e-05f, -1.604046190e-05f, -1.603081403e-05f, -1.602113950e-05f, -1.601143835e-05f, -1.600171057e-05f, -1.599195621e-05f, -1.598217527e-05f, -1.597236777e-05f,
+-1.596253374e-05f, -1.595267320e-05f, -1.594278616e-05f, -1.593287264e-05f, -1.592293267e-05f, -1.591296627e-05f, -1.590297346e-05f, -1.589295425e-05f, -1.588290867e-05f, -1.587283673e-05f,
+-1.586273846e-05f, -1.585261389e-05f, -1.584246302e-05f, -1.583228588e-05f, -1.582208249e-05f, -1.581185287e-05f, -1.580159704e-05f, -1.579131502e-05f, -1.578100684e-05f, -1.577067251e-05f,
+-1.576031205e-05f, -1.574992549e-05f, -1.573951285e-05f, -1.572907414e-05f, -1.571860940e-05f, -1.570811863e-05f, -1.569760186e-05f, -1.568705912e-05f, -1.567649041e-05f, -1.566589578e-05f,
+-1.565527522e-05f, -1.564462878e-05f, -1.563395646e-05f, -1.562325829e-05f, -1.561253430e-05f, -1.560178449e-05f, -1.559100890e-05f, -1.558020755e-05f, -1.556938046e-05f, -1.555852764e-05f,
+-1.554764912e-05f, -1.553674493e-05f, -1.552581508e-05f, -1.551485960e-05f, -1.550387850e-05f, -1.549287182e-05f, -1.548183957e-05f, -1.547078177e-05f, -1.545969845e-05f, -1.544858962e-05f,
+-1.543745532e-05f, -1.542629556e-05f, -1.541511036e-05f, -1.540389975e-05f, -1.539266375e-05f, -1.538140238e-05f, -1.537011567e-05f, -1.535880363e-05f, -1.534746629e-05f, -1.533610367e-05f,
+-1.532471580e-05f, -1.531330269e-05f, -1.530186438e-05f, -1.529040087e-05f, -1.527891220e-05f, -1.526739838e-05f, -1.525585945e-05f, -1.524429542e-05f, -1.523270632e-05f, -1.522109216e-05f,
+-1.520945297e-05f, -1.519778879e-05f, -1.518609961e-05f, -1.517438548e-05f, -1.516264642e-05f, -1.515088244e-05f, -1.513909357e-05f, -1.512727983e-05f, -1.511544125e-05f, -1.510357786e-05f,
+-1.509168966e-05f, -1.507977669e-05f, -1.506783898e-05f, -1.505587653e-05f, -1.504388939e-05f, -1.503187756e-05f, -1.501984108e-05f, -1.500777997e-05f, -1.499569425e-05f, -1.498358395e-05f,
+-1.497144908e-05f, -1.495928968e-05f, -1.494710577e-05f, -1.493489736e-05f, -1.492266449e-05f, -1.491040719e-05f, -1.489812546e-05f, -1.488581934e-05f, -1.487348885e-05f, -1.486113402e-05f,
+-1.484875487e-05f, -1.483635142e-05f, -1.482392369e-05f, -1.481147172e-05f, -1.479899553e-05f, -1.478649514e-05f, -1.477397057e-05f, -1.476142185e-05f, -1.474884901e-05f, -1.473625206e-05f,
+-1.472363104e-05f, -1.471098596e-05f, -1.469831686e-05f, -1.468562375e-05f, -1.467290667e-05f, -1.466016563e-05f, -1.464740067e-05f, -1.463461180e-05f, -1.462179905e-05f, -1.460896245e-05f,
+-1.459610202e-05f, -1.458321778e-05f, -1.457030977e-05f, -1.455737800e-05f, -1.454442250e-05f, -1.453144330e-05f, -1.451844042e-05f, -1.450541388e-05f, -1.449236372e-05f, -1.447928995e-05f,
+-1.446619261e-05f, -1.445307172e-05f, -1.443992729e-05f, -1.442675937e-05f, -1.441356797e-05f, -1.440035312e-05f, -1.438711485e-05f, -1.437385317e-05f, -1.436056812e-05f, -1.434725973e-05f,
+-1.433392801e-05f, -1.432057300e-05f, -1.430719471e-05f, -1.429379318e-05f, -1.428036843e-05f, -1.426692049e-05f, -1.425344938e-05f, -1.423995513e-05f, -1.422643777e-05f, -1.421289731e-05f,
+-1.419933379e-05f, -1.418574724e-05f, -1.417213767e-05f, -1.415850512e-05f, -1.414484961e-05f, -1.413117117e-05f, -1.411746982e-05f, -1.410374559e-05f, -1.408999851e-05f, -1.407622860e-05f,
+-1.406243590e-05f, -1.404862041e-05f, -1.403478218e-05f, -1.402092123e-05f, -1.400703759e-05f, -1.399313128e-05f, -1.397920233e-05f, -1.396525076e-05f, -1.395127660e-05f, -1.393727989e-05f,
+-1.392326064e-05f, -1.390921888e-05f, -1.389515465e-05f, -1.388106796e-05f, -1.386695884e-05f, -1.385282732e-05f, -1.383867344e-05f, -1.382449720e-05f, -1.381029865e-05f, -1.379607781e-05f,
+-1.378183470e-05f, -1.376756936e-05f, -1.375328181e-05f, -1.373897207e-05f, -1.372464018e-05f, -1.371028616e-05f, -1.369591005e-05f, -1.368151186e-05f, -1.366709162e-05f, -1.365264937e-05f,
+-1.363818512e-05f, -1.362369892e-05f, -1.360919077e-05f, -1.359466073e-05f, -1.358010880e-05f, -1.356553501e-05f, -1.355093941e-05f, -1.353632201e-05f, -1.352168283e-05f, -1.350702192e-05f,
+-1.349233930e-05f, -1.347763498e-05f, -1.346290902e-05f, -1.344816142e-05f, -1.343339222e-05f, -1.341860145e-05f, -1.340378913e-05f, -1.338895529e-05f, -1.337409997e-05f, -1.335922318e-05f,
+-1.334432496e-05f, -1.332940534e-05f, -1.331446434e-05f, -1.329950200e-05f, -1.328451833e-05f, -1.326951337e-05f, -1.325448715e-05f, -1.323943970e-05f, -1.322437104e-05f, -1.320928120e-05f,
+-1.319417022e-05f, -1.317903811e-05f, -1.316388491e-05f, -1.314871065e-05f, -1.313351535e-05f, -1.311829905e-05f, -1.310306178e-05f, -1.308780355e-05f, -1.307252441e-05f, -1.305722437e-05f,
+-1.304190347e-05f, -1.302656174e-05f, -1.301119921e-05f, -1.299581590e-05f, -1.298041185e-05f, -1.296498708e-05f, -1.294954162e-05f, -1.293407551e-05f, -1.291858876e-05f, -1.290308142e-05f,
+-1.288755350e-05f, -1.287200504e-05f, -1.285643607e-05f, -1.284084662e-05f, -1.282523671e-05f, -1.280960638e-05f, -1.279395565e-05f, -1.277828456e-05f, -1.276259313e-05f, -1.274688139e-05f,
+-1.273114938e-05f, -1.271539712e-05f, -1.269962464e-05f, -1.268383197e-05f, -1.266801915e-05f, -1.265218619e-05f, -1.263633314e-05f, -1.262046002e-05f, -1.260456685e-05f, -1.258865368e-05f,
+-1.257272053e-05f, -1.255676742e-05f, -1.254079440e-05f, -1.252480148e-05f, -1.250878871e-05f, -1.249275610e-05f, -1.247670369e-05f, -1.246063152e-05f, -1.244453960e-05f, -1.242842797e-05f,
+-1.241229666e-05f, -1.239614571e-05f, -1.237997513e-05f, -1.236378496e-05f, -1.234757523e-05f, -1.233134598e-05f, -1.231509723e-05f, -1.229882900e-05f, -1.228254134e-05f, -1.226623428e-05f,
+-1.224990783e-05f, -1.223356204e-05f, -1.221719693e-05f, -1.220081254e-05f, -1.218440890e-05f, -1.216798602e-05f, -1.215154396e-05f, -1.213508273e-05f, -1.211860237e-05f, -1.210210291e-05f,
+-1.208558438e-05f, -1.206904680e-05f, -1.205249022e-05f, -1.203591466e-05f, -1.201932015e-05f, -1.200270673e-05f, -1.198607442e-05f, -1.196942326e-05f, -1.195275327e-05f, -1.193606449e-05f,
+-1.191935694e-05f, -1.190263067e-05f, -1.188588570e-05f, -1.186912206e-05f, -1.185233978e-05f, -1.183553889e-05f, -1.181871943e-05f, -1.180188143e-05f, -1.178502492e-05f, -1.176814992e-05f,
+-1.175125647e-05f, -1.173434461e-05f, -1.171741436e-05f, -1.170046575e-05f, -1.168349882e-05f, -1.166651360e-05f, -1.164951011e-05f, -1.163248840e-05f, -1.161544849e-05f, -1.159839041e-05f,
+-1.158131420e-05f, -1.156421988e-05f, -1.154710749e-05f, -1.152997707e-05f, -1.151282863e-05f, -1.149566222e-05f, -1.147847786e-05f, -1.146127559e-05f, -1.144405544e-05f, -1.142681744e-05f,
+-1.140956163e-05f, -1.139228803e-05f, -1.137499667e-05f, -1.135768759e-05f, -1.134036083e-05f, -1.132301641e-05f, -1.130565436e-05f, -1.128827472e-05f, -1.127087751e-05f, -1.125346278e-05f,
+-1.123603055e-05f, -1.121858086e-05f, -1.120111374e-05f, -1.118362921e-05f, -1.116612732e-05f, -1.114860809e-05f, -1.113107156e-05f, -1.111351775e-05f, -1.109594671e-05f, -1.107835846e-05f,
+-1.106075304e-05f, -1.104313048e-05f, -1.102549081e-05f, -1.100783406e-05f, -1.099016027e-05f, -1.097246946e-05f, -1.095476168e-05f, -1.093703695e-05f, -1.091929531e-05f, -1.090153679e-05f,
+-1.088376142e-05f, -1.086596923e-05f, -1.084816026e-05f, -1.083033455e-05f, -1.081249211e-05f, -1.079463299e-05f, -1.077675722e-05f, -1.075886483e-05f, -1.074095585e-05f, -1.072303032e-05f,
+-1.070508828e-05f, -1.068712974e-05f, -1.066915475e-05f, -1.065116334e-05f, -1.063315554e-05f, -1.061513139e-05f, -1.059709091e-05f, -1.057903415e-05f, -1.056096113e-05f, -1.054287188e-05f,
+-1.052476645e-05f, -1.050664487e-05f, -1.048850715e-05f, -1.047035335e-05f, -1.045218350e-05f, -1.043399762e-05f, -1.041579575e-05f, -1.039757792e-05f, -1.037934418e-05f, -1.036109454e-05f,
+-1.034282904e-05f, -1.032454773e-05f, -1.030625062e-05f, -1.028793776e-05f, -1.026960917e-05f, -1.025126490e-05f, -1.023290497e-05f, -1.021452942e-05f, -1.019613829e-05f, -1.017773159e-05f,
+-1.015930938e-05f, -1.014087168e-05f, -1.012241853e-05f, -1.010394996e-05f, -1.008546600e-05f, -1.006696669e-05f, -1.004845206e-05f, -1.002992214e-05f, -1.001137698e-05f, -9.992816600e-06f,
+-9.974241036e-06f, -9.955650323e-06f, -9.937044495e-06f, -9.918423586e-06f, -9.899787630e-06f, -9.881136660e-06f, -9.862470712e-06f, -9.843789818e-06f, -9.825094013e-06f, -9.806383331e-06f,
+-9.787657807e-06f, -9.768917473e-06f, -9.750162365e-06f, -9.731392516e-06f, -9.712607961e-06f, -9.693808734e-06f, -9.674994869e-06f, -9.656166401e-06f, -9.637323363e-06f, -9.618465791e-06f,
+-9.599593717e-06f, -9.580707177e-06f, -9.561806205e-06f, -9.542890836e-06f, -9.523961103e-06f, -9.505017042e-06f, -9.486058686e-06f, -9.467086070e-06f, -9.448099229e-06f, -9.429098197e-06f,
+-9.410083009e-06f, -9.391053699e-06f, -9.372010301e-06f, -9.352952851e-06f, -9.333881383e-06f, -9.314795931e-06f, -9.295696531e-06f, -9.276583216e-06f, -9.257456022e-06f, -9.238314984e-06f,
+-9.219160135e-06f, -9.199991511e-06f, -9.180809147e-06f, -9.161613077e-06f, -9.142403336e-06f, -9.123179959e-06f, -9.103942981e-06f, -9.084692436e-06f, -9.065428360e-06f, -9.046150788e-06f,
+-9.026859754e-06f, -9.007555293e-06f, -8.988237441e-06f, -8.968906231e-06f, -8.949561701e-06f, -8.930203883e-06f, -8.910832814e-06f, -8.891448528e-06f, -8.872051061e-06f, -8.852640447e-06f,
+-8.833216722e-06f, -8.813779921e-06f, -8.794330079e-06f, -8.774867231e-06f, -8.755391413e-06f, -8.735902659e-06f, -8.716401004e-06f, -8.696886485e-06f, -8.677359137e-06f, -8.657818993e-06f,
+-8.638266091e-06f, -8.618700465e-06f, -8.599122151e-06f, -8.579531183e-06f, -8.559927598e-06f, -8.540311430e-06f, -8.520682715e-06f, -8.501041489e-06f, -8.481387787e-06f, -8.461721645e-06f,
+-8.442043097e-06f, -8.422352180e-06f, -8.402648928e-06f, -8.382933378e-06f, -8.363205565e-06f, -8.343465525e-06f, -8.323713292e-06f, -8.303948904e-06f, -8.284172395e-06f, -8.264383800e-06f,
+-8.244583157e-06f, -8.224770500e-06f, -8.204945864e-06f, -8.185109287e-06f, -8.165260803e-06f, -8.145400448e-06f, -8.125528258e-06f, -8.105644268e-06f, -8.085748515e-06f, -8.065841035e-06f,
+-8.045921862e-06f, -8.025991033e-06f, -8.006048584e-06f, -7.986094551e-06f, -7.966128969e-06f, -7.946151874e-06f, -7.926163303e-06f, -7.906163291e-06f, -7.886151875e-06f, -7.866129089e-06f,
+-7.846094970e-06f, -7.826049555e-06f, -7.805992879e-06f, -7.785924978e-06f, -7.765845888e-06f, -7.745755645e-06f, -7.725654285e-06f, -7.705541845e-06f, -7.685418361e-06f, -7.665283868e-06f,
+-7.645138402e-06f, -7.624982001e-06f, -7.604814699e-06f, -7.584636534e-06f, -7.564447541e-06f, -7.544247757e-06f, -7.524037217e-06f, -7.503815959e-06f, -7.483584017e-06f, -7.463341430e-06f,
+-7.443088232e-06f, -7.422824460e-06f, -7.402550150e-06f, -7.382265340e-06f, -7.361970064e-06f, -7.341664360e-06f, -7.321348263e-06f, -7.301021810e-06f, -7.280685038e-06f, -7.260337983e-06f,
+-7.239980682e-06f, -7.219613169e-06f, -7.199235484e-06f, -7.178847660e-06f, -7.158449736e-06f, -7.138041748e-06f, -7.117623731e-06f, -7.097195723e-06f, -7.076757760e-06f, -7.056309879e-06f,
+-7.035852116e-06f, -7.015384508e-06f, -6.994907091e-06f, -6.974419902e-06f, -6.953922977e-06f, -6.933416354e-06f, -6.912900068e-06f, -6.892374157e-06f, -6.871838657e-06f, -6.851293604e-06f,
+-6.830739036e-06f, -6.810174988e-06f, -6.789601499e-06f, -6.769018604e-06f, -6.748426340e-06f, -6.727824744e-06f, -6.707213852e-06f, -6.686593702e-06f, -6.665964331e-06f, -6.645325774e-06f,
+-6.624678069e-06f, -6.604021252e-06f, -6.583355361e-06f, -6.562680432e-06f, -6.541996502e-06f, -6.521303608e-06f, -6.500601787e-06f, -6.479891075e-06f, -6.459171510e-06f, -6.438443128e-06f,
+-6.417705967e-06f, -6.396960063e-06f, -6.376205453e-06f, -6.355442174e-06f, -6.334670263e-06f, -6.313889757e-06f, -6.293100693e-06f, -6.272303108e-06f, -6.251497039e-06f, -6.230682523e-06f,
+-6.209859597e-06f, -6.189028298e-06f, -6.168188663e-06f, -6.147340729e-06f, -6.126484534e-06f, -6.105620113e-06f, -6.084747505e-06f, -6.063866746e-06f, -6.042977874e-06f, -6.022080925e-06f,
+-6.001175936e-06f, -5.980262946e-06f, -5.959341991e-06f, -5.938413107e-06f, -5.917476333e-06f, -5.896531705e-06f, -5.875579261e-06f, -5.854619038e-06f, -5.833651072e-06f, -5.812675402e-06f,
+-5.791692064e-06f, -5.770701096e-06f, -5.749702534e-06f, -5.728696416e-06f, -5.707682780e-06f, -5.686661662e-06f, -5.665633100e-06f, -5.644597131e-06f, -5.623553793e-06f, -5.602503122e-06f,
+-5.581445156e-06f, -5.560379932e-06f, -5.539307488e-06f, -5.518227860e-06f, -5.497141087e-06f, -5.476047205e-06f, -5.454946252e-06f, -5.433838266e-06f, -5.412723283e-06f, -5.391601341e-06f,
+-5.370472477e-06f, -5.349336729e-06f, -5.328194134e-06f, -5.307044730e-06f, -5.285888553e-06f, -5.264725642e-06f, -5.243556034e-06f, -5.222379766e-06f, -5.201196875e-06f, -5.180007400e-06f,
+-5.158811377e-06f, -5.137608844e-06f, -5.116399838e-06f, -5.095184398e-06f, -5.073962560e-06f, -5.052734361e-06f, -5.031499840e-06f, -5.010259034e-06f, -4.989011981e-06f, -4.967758717e-06f,
+-4.946499281e-06f, -4.925233709e-06f, -4.903962040e-06f, -4.882684311e-06f, -4.861400560e-06f, -4.840110824e-06f, -4.818815140e-06f, -4.797513547e-06f, -4.776206081e-06f, -4.754892781e-06f,
+-4.733573684e-06f, -4.712248827e-06f, -4.690918249e-06f, -4.669581986e-06f, -4.648240076e-06f, -4.626892558e-06f, -4.605539468e-06f, -4.584180844e-06f, -4.562816724e-06f, -4.541447145e-06f,
+-4.520072146e-06f, -4.498691763e-06f, -4.477306034e-06f, -4.455914998e-06f, -4.434518691e-06f, -4.413117151e-06f, -4.391710417e-06f, -4.370298525e-06f, -4.348881513e-06f, -4.327459419e-06f,
+-4.306032282e-06f, -4.284600137e-06f, -4.263163023e-06f, -4.241720979e-06f, -4.220274040e-06f, -4.198822246e-06f, -4.177365634e-06f, -4.155904241e-06f, -4.134438106e-06f, -4.112967266e-06f,
+-4.091491758e-06f, -4.070011621e-06f, -4.048526892e-06f, -4.027037609e-06f, -4.005543810e-06f, -3.984045532e-06f, -3.962542813e-06f, -3.941035691e-06f, -3.919524204e-06f, -3.898008390e-06f,
+-3.876488285e-06f, -3.854963929e-06f, -3.833435358e-06f, -3.811902611e-06f, -3.790365724e-06f, -3.768824737e-06f, -3.747279687e-06f, -3.725730612e-06f, -3.704177548e-06f, -3.682620535e-06f,
+-3.661059610e-06f, -3.639494811e-06f, -3.617926175e-06f, -3.596353740e-06f, -3.574777545e-06f, -3.553197626e-06f, -3.531614022e-06f, -3.510026771e-06f, -3.488435910e-06f, -3.466841477e-06f,
+-3.445243510e-06f, -3.423642047e-06f, -3.402037126e-06f, -3.380428783e-06f, -3.358817058e-06f, -3.337201988e-06f, -3.315583611e-06f, -3.293961965e-06f, -3.272337087e-06f, -3.250709015e-06f,
+-3.229077788e-06f, -3.207443442e-06f, -3.185806016e-06f, -3.164165548e-06f, -3.142522075e-06f, -3.120875636e-06f, -3.099226267e-06f, -3.077574008e-06f, -3.055918895e-06f, -3.034260967e-06f,
+-3.012600261e-06f, -2.990936816e-06f, -2.969270668e-06f, -2.947601857e-06f, -2.925930419e-06f, -2.904256393e-06f, -2.882579816e-06f, -2.860900727e-06f, -2.839219163e-06f, -2.817535161e-06f,
+-2.795848761e-06f, -2.774159999e-06f, -2.752468913e-06f, -2.730775542e-06f, -2.709079923e-06f, -2.687382094e-06f, -2.665682092e-06f, -2.643979956e-06f, -2.622275724e-06f, -2.600569433e-06f,
+-2.578861121e-06f, -2.557150826e-06f, -2.535438586e-06f, -2.513724438e-06f, -2.492008420e-06f, -2.470290571e-06f, -2.448570928e-06f, -2.426849529e-06f, -2.405126412e-06f, -2.383401614e-06f,
+-2.361675173e-06f, -2.339947128e-06f, -2.318217516e-06f, -2.296486374e-06f, -2.274753741e-06f, -2.253019655e-06f, -2.231284152e-06f, -2.209547272e-06f, -2.187809052e-06f, -2.166069529e-06f,
+-2.144328741e-06f, -2.122586727e-06f, -2.100843524e-06f, -2.079099170e-06f, -2.057353703e-06f, -2.035607160e-06f, -2.013859579e-06f, -1.992110998e-06f, -1.970361455e-06f, -1.948610987e-06f,
+-1.926859633e-06f, -1.905107430e-06f, -1.883354415e-06f, -1.861600628e-06f, -1.839846105e-06f, -1.818090884e-06f, -1.796335003e-06f, -1.774578499e-06f, -1.752821411e-06f, -1.731063777e-06f,
+-1.709305633e-06f, -1.687547018e-06f, -1.665787969e-06f, -1.644028525e-06f, -1.622268722e-06f, -1.600508600e-06f, -1.578748194e-06f, -1.556987543e-06f, -1.535226686e-06f, -1.513465659e-06f,
+-1.491704500e-06f, -1.469943247e-06f, -1.448181937e-06f, -1.426420609e-06f, -1.404659300e-06f, -1.382898048e-06f, -1.361136890e-06f, -1.339375864e-06f, -1.317615008e-06f, -1.295854359e-06f,
+-1.274093955e-06f, -1.252333834e-06f, -1.230574034e-06f, -1.208814591e-06f, -1.187055544e-06f, -1.165296931e-06f, -1.143538788e-06f, -1.121781154e-06f, -1.100024067e-06f, -1.078267563e-06f,
+-1.056511680e-06f, -1.034756457e-06f, -1.013001930e-06f, -9.912481381e-07f, -9.694951176e-07f, -9.477429066e-07f, -9.259915426e-07f, -9.042410632e-07f, -8.824915061e-07f, -8.607429086e-07f,
+-8.389953085e-07f, -8.172487432e-07f, -7.955032504e-07f, -7.737588675e-07f, -7.520156321e-07f, -7.302735817e-07f, -7.085327538e-07f, -6.867931860e-07f, -6.650549158e-07f, -6.433179806e-07f,
+-6.215824180e-07f, -5.998482654e-07f, -5.781155604e-07f, -5.563843403e-07f, -5.346546428e-07f, -5.129265051e-07f, -4.911999649e-07f, -4.694750595e-07f, -4.477518264e-07f, -4.260303029e-07f,
+-4.043105267e-07f, -3.825925350e-07f, -3.608763652e-07f, -3.391620549e-07f, -3.174496413e-07f, -2.957391618e-07f, -2.740306539e-07f, -2.523241549e-07f, -2.306197022e-07f, -2.089173332e-07f,
+-1.872170851e-07f, -1.655189953e-07f, -1.438231013e-07f, -1.221294402e-07f, -1.004380494e-07f, -7.874896624e-08f, -5.706222800e-08f, -3.537787198e-08f, -1.369593546e-08f, 7.983544288e-09f,
+2.966052999e-08f, 5.133498439e-08f, 7.300687023e-08f, 9.467615028e-08f, 1.163427873e-07f, 1.380067441e-07f, 1.596679833e-07f, 1.813264680e-07f, 2.029821607e-07f, 2.246350244e-07f,
+2.462850218e-07f, 2.679321159e-07f, 2.895762693e-07f, 3.112174450e-07f, 3.328556059e-07f, 3.544907148e-07f, 3.761227345e-07f, 3.977516280e-07f, 4.193773582e-07f, 4.409998880e-07f,
+4.626191802e-07f, 4.842351978e-07f, 5.058479038e-07f, 5.274572611e-07f, 5.490632326e-07f, 5.706657813e-07f, 5.922648702e-07f, 6.138604623e-07f, 6.354525205e-07f, 6.570410080e-07f,
+6.786258876e-07f, 7.002071224e-07f, 7.217846755e-07f, 7.433585099e-07f, 7.649285887e-07f, 7.864948749e-07f, 8.080573317e-07f, 8.296159220e-07f, 8.511706090e-07f, 8.727213559e-07f,
+8.942681257e-07f, 9.158108817e-07f, 9.373495868e-07f, 9.588842043e-07f, 9.804146974e-07f, 1.001941029e-06f, 1.023463163e-06f, 1.044981062e-06f, 1.066494689e-06f, 1.088004008e-06f,
+1.109508982e-06f, 1.131009573e-06f, 1.152505747e-06f, 1.173997464e-06f, 1.195484690e-06f, 1.216967387e-06f, 1.238445518e-06f, 1.259919047e-06f, 1.281387937e-06f, 1.302852152e-06f,
+1.324311654e-06f, 1.345766408e-06f, 1.367216377e-06f, 1.388661523e-06f, 1.410101811e-06f, 1.431537204e-06f, 1.452967665e-06f, 1.474393158e-06f, 1.495813645e-06f, 1.517229092e-06f,
+1.538639461e-06f, 1.560044715e-06f, 1.581444819e-06f, 1.602839735e-06f, 1.624229427e-06f, 1.645613859e-06f, 1.666992995e-06f, 1.688366797e-06f, 1.709735230e-06f, 1.731098257e-06f,
+1.752455841e-06f, 1.773807947e-06f, 1.795154538e-06f, 1.816495578e-06f, 1.837831030e-06f, 1.859160858e-06f, 1.880485026e-06f, 1.901803497e-06f, 1.923116235e-06f, 1.944423204e-06f,
+1.965724368e-06f, 1.987019690e-06f, 2.008309135e-06f, 2.029592665e-06f, 2.050870245e-06f, 2.072141839e-06f, 2.093407411e-06f, 2.114666923e-06f, 2.135920341e-06f, 2.157167628e-06f,
+2.178408748e-06f, 2.199643665e-06f, 2.220872343e-06f, 2.242094746e-06f, 2.263310837e-06f, 2.284520581e-06f, 2.305723942e-06f, 2.326920884e-06f, 2.348111370e-06f, 2.369295365e-06f,
+2.390472833e-06f, 2.411643738e-06f, 2.432808044e-06f, 2.453965715e-06f, 2.475116715e-06f, 2.496261008e-06f, 2.517398559e-06f, 2.538529332e-06f, 2.559653290e-06f, 2.580770399e-06f,
+2.601880621e-06f, 2.622983922e-06f, 2.644080266e-06f, 2.665169617e-06f, 2.686251939e-06f, 2.707327196e-06f, 2.728395354e-06f, 2.749456375e-06f, 2.770510225e-06f, 2.791556868e-06f,
+2.812596268e-06f, 2.833628389e-06f, 2.854653197e-06f, 2.875670655e-06f, 2.896680727e-06f, 2.917683379e-06f, 2.938678575e-06f, 2.959666280e-06f, 2.980646456e-06f, 3.001619071e-06f,
+3.022584087e-06f, 3.043541469e-06f, 3.064491183e-06f, 3.085433192e-06f, 3.106367461e-06f, 3.127293955e-06f, 3.148212639e-06f, 3.169123476e-06f, 3.190026433e-06f, 3.210921473e-06f,
+3.231808561e-06f, 3.252687662e-06f, 3.273558741e-06f, 3.294421762e-06f, 3.315276691e-06f, 3.336123491e-06f, 3.356962129e-06f, 3.377792568e-06f, 3.398614774e-06f, 3.419428711e-06f,
+3.440234345e-06f, 3.461031640e-06f, 3.481820561e-06f, 3.502601073e-06f, 3.523373142e-06f, 3.544136732e-06f, 3.564891807e-06f, 3.585638334e-06f, 3.606376277e-06f, 3.627105602e-06f,
+3.647826272e-06f, 3.668538255e-06f, 3.689241513e-06f, 3.709936014e-06f, 3.730621721e-06f, 3.751298601e-06f, 3.771966617e-06f, 3.792625736e-06f, 3.813275923e-06f, 3.833917143e-06f,
+3.854549361e-06f, 3.875172543e-06f, 3.895786653e-06f, 3.916391658e-06f, 3.936987522e-06f, 3.957574212e-06f, 3.978151691e-06f, 3.998719926e-06f, 4.019278883e-06f, 4.039828526e-06f,
+4.060368821e-06f, 4.080899733e-06f, 4.101421229e-06f, 4.121933273e-06f, 4.142435832e-06f, 4.162928870e-06f, 4.183412354e-06f, 4.203886249e-06f, 4.224350520e-06f, 4.244805134e-06f,
+4.265250055e-06f, 4.285685251e-06f, 4.306110685e-06f, 4.326526325e-06f, 4.346932136e-06f, 4.367328083e-06f, 4.387714132e-06f, 4.408090250e-06f, 4.428456403e-06f, 4.448812555e-06f,
+4.469158673e-06f, 4.489494723e-06f, 4.509820670e-06f, 4.530136481e-06f, 4.550442122e-06f, 4.570737559e-06f, 4.591022757e-06f, 4.611297683e-06f, 4.631562303e-06f, 4.651816582e-06f,
+4.672060488e-06f, 4.692293985e-06f, 4.712517041e-06f, 4.732729621e-06f, 4.752931692e-06f, 4.773123220e-06f, 4.793304171e-06f, 4.813474510e-06f, 4.833634206e-06f, 4.853783223e-06f,
+4.873921529e-06f, 4.894049089e-06f, 4.914165870e-06f, 4.934271839e-06f, 4.954366961e-06f, 4.974451203e-06f, 4.994524532e-06f, 5.014586914e-06f, 5.034638316e-06f, 5.054678704e-06f,
+5.074708044e-06f, 5.094726304e-06f, 5.114733449e-06f, 5.134729448e-06f, 5.154714265e-06f, 5.174687868e-06f, 5.194650223e-06f, 5.214601298e-06f, 5.234541059e-06f, 5.254469472e-06f,
+5.274386505e-06f, 5.294292125e-06f, 5.314186297e-06f, 5.334068989e-06f, 5.353940168e-06f, 5.373799801e-06f, 5.393647855e-06f, 5.413484296e-06f, 5.433309092e-06f, 5.453122209e-06f,
+5.472923616e-06f, 5.492713277e-06f, 5.512491162e-06f, 5.532257236e-06f, 5.552011468e-06f, 5.571753823e-06f, 5.591484270e-06f, 5.611202775e-06f, 5.630909306e-06f, 5.650603829e-06f,
+5.670286313e-06f, 5.689956725e-06f, 5.709615031e-06f, 5.729261199e-06f, 5.748895197e-06f, 5.768516992e-06f, 5.788126551e-06f, 5.807723841e-06f, 5.827308831e-06f, 5.846881488e-06f,
+5.866441778e-06f, 5.885989671e-06f, 5.905525133e-06f, 5.925048131e-06f, 5.944558634e-06f, 5.964056610e-06f, 5.983542025e-06f, 6.003014847e-06f, 6.022475045e-06f, 6.041922586e-06f,
+6.061357437e-06f, 6.080779567e-06f, 6.100188944e-06f, 6.119585534e-06f, 6.138969307e-06f, 6.158340229e-06f, 6.177698269e-06f, 6.197043395e-06f, 6.216375575e-06f, 6.235694777e-06f,
+6.255000969e-06f, 6.274294118e-06f, 6.293574193e-06f, 6.312841163e-06f, 6.332094994e-06f, 6.351335656e-06f, 6.370563116e-06f, 6.389777344e-06f, 6.408978306e-06f, 6.428165971e-06f,
+6.447340308e-06f, 6.466501285e-06f, 6.485648870e-06f, 6.504783031e-06f, 6.523903738e-06f, 6.543010957e-06f, 6.562104659e-06f, 6.581184811e-06f, 6.600251382e-06f, 6.619304340e-06f,
+6.638343654e-06f, 6.657369293e-06f, 6.676381225e-06f, 6.695379418e-06f, 6.714363842e-06f, 6.733334465e-06f, 6.752291256e-06f, 6.771234183e-06f, 6.790163216e-06f, 6.809078324e-06f,
+6.827979474e-06f, 6.846866636e-06f, 6.865739778e-06f, 6.884598871e-06f, 6.903443882e-06f, 6.922274781e-06f, 6.941091536e-06f, 6.959894117e-06f, 6.978682493e-06f, 6.997456633e-06f,
+7.016216505e-06f, 7.034962080e-06f, 7.053693326e-06f, 7.072410212e-06f, 7.091112708e-06f, 7.109800783e-06f, 7.128474406e-06f, 7.147133547e-06f, 7.165778174e-06f, 7.184408258e-06f,
+7.203023767e-06f, 7.221624672e-06f, 7.240210940e-06f, 7.258782543e-06f, 7.277339450e-06f, 7.295881629e-06f, 7.314409052e-06f, 7.332921686e-06f, 7.351419502e-06f, 7.369902470e-06f,
+7.388370559e-06f, 7.406823739e-06f, 7.425261980e-06f, 7.443685251e-06f, 7.462093523e-06f, 7.480486764e-06f, 7.498864946e-06f, 7.517228037e-06f, 7.535576009e-06f, 7.553908830e-06f,
+7.572226470e-06f, 7.590528901e-06f, 7.608816091e-06f, 7.627088012e-06f, 7.645344632e-06f, 7.663585922e-06f, 7.681811853e-06f, 7.700022394e-06f, 7.718217516e-06f, 7.736397189e-06f,
+7.754561383e-06f, 7.772710068e-06f, 7.790843216e-06f, 7.808960795e-06f, 7.827062778e-06f, 7.845149134e-06f, 7.863219833e-06f, 7.881274846e-06f, 7.899314144e-06f, 7.917337697e-06f,
+7.935345476e-06f, 7.953337451e-06f, 7.971313593e-06f, 7.989273873e-06f, 8.007218261e-06f, 8.025146729e-06f, 8.043059246e-06f, 8.060955784e-06f, 8.078836314e-06f, 8.096700806e-06f,
+8.114549232e-06f, 8.132381561e-06f, 8.150197766e-06f, 8.167997818e-06f, 8.185781686e-06f, 8.203549343e-06f, 8.221300759e-06f, 8.239035906e-06f, 8.256754755e-06f, 8.274457276e-06f,
+8.292143441e-06f, 8.309813222e-06f, 8.327466589e-06f, 8.345103514e-06f, 8.362723968e-06f, 8.380327923e-06f, 8.397915350e-06f, 8.415486220e-06f, 8.433040505e-06f, 8.450578177e-06f,
+8.468099206e-06f, 8.485603565e-06f, 8.503091225e-06f, 8.520562158e-06f, 8.538016335e-06f, 8.555453728e-06f, 8.572874309e-06f, 8.590278050e-06f, 8.607664921e-06f, 8.625034896e-06f,
+8.642387946e-06f, 8.659724043e-06f, 8.677043159e-06f, 8.694345265e-06f, 8.711630334e-06f, 8.728898338e-06f, 8.746149249e-06f, 8.763383039e-06f, 8.780599679e-06f, 8.797799143e-06f,
+8.814981402e-06f, 8.832146429e-06f, 8.849294195e-06f, 8.866424674e-06f, 8.883537837e-06f, 8.900633656e-06f, 8.917712105e-06f, 8.934773156e-06f, 8.951816780e-06f, 8.968842951e-06f,
+8.985851641e-06f, 9.002842822e-06f, 9.019816467e-06f, 9.036772549e-06f, 9.053711041e-06f, 9.070631914e-06f, 9.087535143e-06f, 9.104420698e-06f, 9.121288555e-06f, 9.138138684e-06f,
+9.154971059e-06f, 9.171785653e-06f, 9.188582439e-06f, 9.205361389e-06f, 9.222122477e-06f, 9.238865676e-06f, 9.255590959e-06f, 9.272298298e-06f, 9.288987668e-06f, 9.305659041e-06f,
+9.322312389e-06f, 9.338947688e-06f, 9.355564909e-06f, 9.372164027e-06f, 9.388745014e-06f, 9.405307843e-06f, 9.421852489e-06f, 9.438378925e-06f, 9.454887123e-06f, 9.471377058e-06f,
+9.487848704e-06f, 9.504302033e-06f, 9.520737019e-06f, 9.537153636e-06f, 9.553551858e-06f, 9.569931658e-06f, 9.586293011e-06f, 9.602635889e-06f, 9.618960267e-06f, 9.635266118e-06f,
+9.651553417e-06f, 9.667822137e-06f, 9.684072252e-06f, 9.700303737e-06f, 9.716516564e-06f, 9.732710710e-06f, 9.748886146e-06f, 9.765042849e-06f, 9.781180791e-06f, 9.797299947e-06f,
+9.813400291e-06f, 9.829481798e-06f, 9.845544441e-06f, 9.861588196e-06f, 9.877613036e-06f, 9.893618936e-06f, 9.909605870e-06f, 9.925573813e-06f, 9.941522740e-06f, 9.957452624e-06f,
+9.973363441e-06f, 9.989255165e-06f, 1.000512777e-05f, 1.002098123e-05f, 1.003681553e-05f, 1.005263063e-05f, 1.006842651e-05f, 1.008420315e-05f, 1.009996051e-05f, 1.011569859e-05f,
+1.013141734e-05f, 1.014711675e-05f, 1.016279679e-05f, 1.017845743e-05f, 1.019409866e-05f, 1.020972044e-05f, 1.022532275e-05f, 1.024090557e-05f, 1.025646887e-05f, 1.027201262e-05f,
+1.028753681e-05f, 1.030304141e-05f, 1.031852639e-05f, 1.033399172e-05f, 1.034943740e-05f, 1.036486338e-05f, 1.038026964e-05f, 1.039565617e-05f, 1.041102293e-05f, 1.042636990e-05f,
+1.044169706e-05f, 1.045700438e-05f, 1.047229184e-05f, 1.048755942e-05f, 1.050280709e-05f, 1.051803482e-05f, 1.053324260e-05f, 1.054843039e-05f, 1.056359818e-05f, 1.057874594e-05f,
+1.059387364e-05f, 1.060898127e-05f, 1.062406879e-05f, 1.063913619e-05f, 1.065418344e-05f, 1.066921052e-05f, 1.068421740e-05f, 1.069920406e-05f, 1.071417048e-05f, 1.072911663e-05f,
+1.074404249e-05f, 1.075894803e-05f, 1.077383324e-05f, 1.078869808e-05f, 1.080354254e-05f, 1.081836659e-05f, 1.083317021e-05f, 1.084795338e-05f, 1.086271607e-05f, 1.087745825e-05f,
+1.089217991e-05f, 1.090688103e-05f, 1.092156157e-05f, 1.093622152e-05f, 1.095086085e-05f, 1.096547954e-05f, 1.098007757e-05f, 1.099465492e-05f, 1.100921155e-05f, 1.102374746e-05f,
+1.103826261e-05f, 1.105275698e-05f, 1.106723055e-05f, 1.108168330e-05f, 1.109611521e-05f, 1.111052625e-05f, 1.112491639e-05f, 1.113928563e-05f, 1.115363393e-05f, 1.116796127e-05f,
+1.118226764e-05f, 1.119655300e-05f, 1.121081733e-05f, 1.122506062e-05f, 1.123928284e-05f, 1.125348397e-05f, 1.126766398e-05f, 1.128182286e-05f, 1.129596058e-05f, 1.131007712e-05f,
+1.132417246e-05f, 1.133824657e-05f, 1.135229944e-05f, 1.136633104e-05f, 1.138034135e-05f, 1.139433035e-05f, 1.140829802e-05f, 1.142224433e-05f, 1.143616927e-05f, 1.145007281e-05f,
+1.146395492e-05f, 1.147781560e-05f, 1.149165481e-05f, 1.150547254e-05f, 1.151926876e-05f, 1.153304346e-05f, 1.154679660e-05f, 1.156052818e-05f, 1.157423816e-05f, 1.158792653e-05f,
+1.160159327e-05f, 1.161523835e-05f, 1.162886176e-05f, 1.164246346e-05f, 1.165604345e-05f, 1.166960171e-05f, 1.168313820e-05f, 1.169665290e-05f, 1.171014581e-05f, 1.172361689e-05f,
+1.173706613e-05f, 1.175049351e-05f, 1.176389899e-05f, 1.177728258e-05f, 1.179064423e-05f, 1.180398394e-05f, 1.181730168e-05f, 1.183059743e-05f, 1.184387117e-05f, 1.185712289e-05f,
+1.187035255e-05f, 1.188356014e-05f, 1.189674564e-05f, 1.190990903e-05f, 1.192305029e-05f, 1.193616940e-05f, 1.194926633e-05f, 1.196234108e-05f, 1.197539361e-05f, 1.198842391e-05f,
+1.200143196e-05f, 1.201441773e-05f, 1.202738122e-05f, 1.204032239e-05f, 1.205324123e-05f, 1.206613772e-05f, 1.207901184e-05f, 1.209186356e-05f, 1.210469288e-05f, 1.211749977e-05f,
+1.213028420e-05f, 1.214304617e-05f, 1.215578565e-05f, 1.216850262e-05f, 1.218119706e-05f, 1.219386895e-05f, 1.220651828e-05f, 1.221914502e-05f, 1.223174916e-05f, 1.224433067e-05f,
+1.225688954e-05f, 1.226942574e-05f, 1.228193927e-05f, 1.229443009e-05f, 1.230689819e-05f, 1.231934356e-05f, 1.233176616e-05f, 1.234416599e-05f, 1.235654302e-05f, 1.236889724e-05f,
+1.238122863e-05f, 1.239353716e-05f, 1.240582282e-05f, 1.241808560e-05f, 1.243032546e-05f, 1.244254240e-05f, 1.245473640e-05f, 1.246690743e-05f, 1.247905548e-05f, 1.249118053e-05f,
+1.250328256e-05f, 1.251536155e-05f, 1.252741749e-05f, 1.253945035e-05f, 1.255146012e-05f, 1.256344678e-05f, 1.257541032e-05f, 1.258735071e-05f, 1.259926793e-05f, 1.261116197e-05f,
+1.262303282e-05f, 1.263488044e-05f, 1.264670483e-05f, 1.265850596e-05f, 1.267028383e-05f, 1.268203840e-05f, 1.269376967e-05f, 1.270547762e-05f, 1.271716222e-05f, 1.272882346e-05f,
+1.274046133e-05f, 1.275207580e-05f, 1.276366686e-05f, 1.277523449e-05f, 1.278677867e-05f, 1.279829939e-05f, 1.280979663e-05f, 1.282127037e-05f, 1.283272060e-05f, 1.284414729e-05f,
+1.285555043e-05f, 1.286693001e-05f, 1.287828600e-05f, 1.288961839e-05f, 1.290092716e-05f, 1.291221230e-05f, 1.292347379e-05f, 1.293471161e-05f, 1.294592574e-05f, 1.295711618e-05f,
+1.296828289e-05f, 1.297942587e-05f, 1.299054510e-05f, 1.300164056e-05f, 1.301271224e-05f, 1.302376011e-05f, 1.303478417e-05f, 1.304578440e-05f, 1.305676077e-05f, 1.306771328e-05f,
+1.307864191e-05f, 1.308954663e-05f, 1.310042745e-05f, 1.311128433e-05f, 1.312211726e-05f, 1.313292624e-05f, 1.314371123e-05f, 1.315447223e-05f, 1.316520922e-05f, 1.317592218e-05f,
+1.318661110e-05f, 1.319727596e-05f, 1.320791675e-05f, 1.321853345e-05f, 1.322912604e-05f, 1.323969451e-05f, 1.325023885e-05f, 1.326075904e-05f, 1.327125505e-05f, 1.328172689e-05f,
+1.329217453e-05f, 1.330259795e-05f, 1.331299715e-05f, 1.332337210e-05f, 1.333372280e-05f, 1.334404922e-05f, 1.335435135e-05f, 1.336462917e-05f, 1.337488268e-05f, 1.338511186e-05f,
+1.339531668e-05f, 1.340549714e-05f, 1.341565323e-05f, 1.342578492e-05f, 1.343589220e-05f, 1.344597506e-05f, 1.345603348e-05f, 1.346606745e-05f, 1.347607695e-05f, 1.348606197e-05f,
+1.349602250e-05f, 1.350595851e-05f, 1.351587000e-05f, 1.352575695e-05f, 1.353561935e-05f, 1.354545718e-05f, 1.355527043e-05f, 1.356505909e-05f, 1.357482313e-05f, 1.358456255e-05f,
+1.359427734e-05f, 1.360396747e-05f, 1.361363293e-05f, 1.362327371e-05f, 1.363288981e-05f, 1.364248119e-05f, 1.365204785e-05f, 1.366158978e-05f, 1.367110696e-05f, 1.368059937e-05f,
+1.369006701e-05f, 1.369950986e-05f, 1.370892791e-05f, 1.371832114e-05f, 1.372768954e-05f, 1.373703310e-05f, 1.374635180e-05f, 1.375564563e-05f, 1.376491458e-05f, 1.377415864e-05f,
+1.378337778e-05f, 1.379257200e-05f, 1.380174129e-05f, 1.381088562e-05f, 1.382000500e-05f, 1.382909940e-05f, 1.383816881e-05f, 1.384721323e-05f, 1.385623263e-05f, 1.386522700e-05f,
+1.387419634e-05f, 1.388314062e-05f, 1.389205984e-05f, 1.390095399e-05f, 1.390982305e-05f, 1.391866700e-05f, 1.392748584e-05f, 1.393627956e-05f, 1.394504814e-05f, 1.395379157e-05f,
+1.396250983e-05f, 1.397120292e-05f, 1.397987082e-05f, 1.398851352e-05f, 1.399713102e-05f, 1.400572328e-05f, 1.401429032e-05f, 1.402283210e-05f, 1.403134863e-05f, 1.403983988e-05f,
+1.404830585e-05f, 1.405674653e-05f, 1.406516190e-05f, 1.407355196e-05f, 1.408191668e-05f, 1.409025606e-05f, 1.409857009e-05f, 1.410685876e-05f, 1.411512205e-05f, 1.412335995e-05f,
+1.413157245e-05f, 1.413975955e-05f, 1.414792122e-05f, 1.415605746e-05f, 1.416416826e-05f, 1.417225360e-05f, 1.418031348e-05f, 1.418834789e-05f, 1.419635680e-05f, 1.420434022e-05f,
+1.421229812e-05f, 1.422023051e-05f, 1.422813737e-05f, 1.423601868e-05f, 1.424387444e-05f, 1.425170464e-05f, 1.425950926e-05f, 1.426728830e-05f, 1.427504175e-05f, 1.428276959e-05f,
+1.429047182e-05f, 1.429814841e-05f, 1.430579938e-05f, 1.431342469e-05f, 1.432102435e-05f, 1.432859834e-05f, 1.433614666e-05f, 1.434366928e-05f, 1.435116621e-05f, 1.435863743e-05f,
+1.436608294e-05f, 1.437350271e-05f, 1.438089675e-05f, 1.438826504e-05f, 1.439560758e-05f, 1.440292434e-05f, 1.441021534e-05f, 1.441748054e-05f, 1.442471995e-05f, 1.443193355e-05f,
+1.443912134e-05f, 1.444628331e-05f, 1.445341944e-05f, 1.446052973e-05f, 1.446761416e-05f, 1.447467274e-05f, 1.448170544e-05f, 1.448871226e-05f, 1.449569319e-05f, 1.450264823e-05f,
+1.450957736e-05f, 1.451648057e-05f, 1.452335785e-05f, 1.453020920e-05f, 1.453703461e-05f, 1.454383407e-05f, 1.455060756e-05f, 1.455735508e-05f, 1.456407663e-05f, 1.457077219e-05f,
+1.457744175e-05f, 1.458408531e-05f, 1.459070286e-05f, 1.459729438e-05f, 1.460385988e-05f, 1.461039934e-05f, 1.461691275e-05f, 1.462340011e-05f, 1.462986140e-05f, 1.463629662e-05f,
+1.464270577e-05f, 1.464908883e-05f, 1.465544579e-05f, 1.466177665e-05f, 1.466808139e-05f, 1.467436002e-05f, 1.468061252e-05f, 1.468683889e-05f, 1.469303911e-05f, 1.469921318e-05f,
+1.470536110e-05f, 1.471148285e-05f, 1.471757843e-05f, 1.472364782e-05f, 1.472969103e-05f, 1.473570804e-05f, 1.474169885e-05f, 1.474766345e-05f, 1.475360183e-05f, 1.475951398e-05f,
+1.476539990e-05f, 1.477125959e-05f, 1.477709302e-05f, 1.478290021e-05f, 1.478868113e-05f, 1.479443578e-05f, 1.480016416e-05f, 1.480586626e-05f, 1.481154207e-05f, 1.481719159e-05f,
+1.482281480e-05f, 1.482841171e-05f, 1.483398230e-05f, 1.483952656e-05f, 1.484504450e-05f, 1.485053611e-05f, 1.485600137e-05f, 1.486144028e-05f, 1.486685284e-05f, 1.487223904e-05f,
+1.487759888e-05f, 1.488293234e-05f, 1.488823942e-05f, 1.489352011e-05f, 1.489877442e-05f, 1.490400232e-05f, 1.490920382e-05f, 1.491437892e-05f, 1.491952759e-05f, 1.492464985e-05f,
+1.492974568e-05f, 1.493481507e-05f, 1.493985803e-05f, 1.494487454e-05f, 1.494986460e-05f, 1.495482821e-05f, 1.495976535e-05f, 1.496467603e-05f, 1.496956024e-05f, 1.497441797e-05f,
+1.497924921e-05f, 1.498405397e-05f, 1.498883223e-05f, 1.499358400e-05f, 1.499830926e-05f, 1.500300801e-05f, 1.500768025e-05f, 1.501232597e-05f, 1.501694516e-05f, 1.502153783e-05f,
+1.502610396e-05f, 1.503064355e-05f, 1.503515660e-05f, 1.503964310e-05f, 1.504410305e-05f, 1.504853644e-05f, 1.505294326e-05f, 1.505732352e-05f, 1.506167721e-05f, 1.506600433e-05f,
+1.507030486e-05f, 1.507457880e-05f, 1.507882616e-05f, 1.508304693e-05f, 1.508724109e-05f, 1.509140866e-05f, 1.509554962e-05f, 1.509966397e-05f, 1.510375170e-05f, 1.510781282e-05f,
+1.511184731e-05f, 1.511585518e-05f, 1.511983642e-05f, 1.512379103e-05f, 1.512771899e-05f, 1.513162032e-05f, 1.513549500e-05f, 1.513934303e-05f, 1.514316441e-05f, 1.514695914e-05f,
+1.515072720e-05f, 1.515446861e-05f, 1.515818334e-05f, 1.516187141e-05f, 1.516553280e-05f, 1.516916752e-05f, 1.517277556e-05f, 1.517635692e-05f, 1.517991159e-05f, 1.518343957e-05f,
+1.518694086e-05f, 1.519041546e-05f, 1.519386335e-05f, 1.519728455e-05f, 1.520067905e-05f, 1.520404684e-05f, 1.520738792e-05f, 1.521070228e-05f, 1.521398994e-05f, 1.521725087e-05f,
+1.522048509e-05f, 1.522369259e-05f, 1.522687336e-05f, 1.523002740e-05f, 1.523315472e-05f, 1.523625530e-05f, 1.523932915e-05f, 1.524237626e-05f, 1.524539664e-05f, 1.524839027e-05f,
+1.525135717e-05f, 1.525429731e-05f, 1.525721072e-05f, 1.526009737e-05f, 1.526295727e-05f, 1.526579042e-05f, 1.526859682e-05f, 1.527137646e-05f, 1.527412934e-05f, 1.527685546e-05f,
+1.527955482e-05f, 1.528222742e-05f, 1.528487326e-05f, 1.528749233e-05f, 1.529008463e-05f, 1.529265016e-05f, 1.529518893e-05f, 1.529770092e-05f, 1.530018614e-05f, 1.530264459e-05f,
+1.530507626e-05f, 1.530748116e-05f, 1.530985928e-05f, 1.531221062e-05f, 1.531453518e-05f, 1.531683296e-05f, 1.531910397e-05f, 1.532134819e-05f, 1.532356562e-05f, 1.532575628e-05f,
+1.532792015e-05f, 1.533005723e-05f, 1.533216754e-05f, 1.533425105e-05f, 1.533630778e-05f, 1.533833772e-05f, 1.534034088e-05f, 1.534231725e-05f, 1.534426683e-05f, 1.534618962e-05f,
+1.534808562e-05f, 1.534995484e-05f, 1.535179726e-05f, 1.535361290e-05f, 1.535540175e-05f, 1.535716381e-05f, 1.535889908e-05f, 1.536060756e-05f, 1.536228925e-05f, 1.536394416e-05f,
+1.536557227e-05f, 1.536717360e-05f, 1.536874814e-05f, 1.537029590e-05f, 1.537181686e-05f, 1.537331104e-05f, 1.537477844e-05f, 1.537621905e-05f, 1.537763287e-05f, 1.537901991e-05f,
+1.538038017e-05f, 1.538171365e-05f, 1.538302034e-05f, 1.538430025e-05f, 1.538555338e-05f, 1.538677973e-05f, 1.538797931e-05f, 1.538915210e-05f, 1.539029812e-05f, 1.539141737e-05f,
+1.539250984e-05f, 1.539357554e-05f, 1.539461446e-05f, 1.539562662e-05f, 1.539661201e-05f, 1.539757063e-05f, 1.539850248e-05f, 1.539940757e-05f, 1.540028590e-05f, 1.540113746e-05f,
+1.540196227e-05f, 1.540276031e-05f, 1.540353160e-05f, 1.540427614e-05f, 1.540499392e-05f, 1.540568495e-05f, 1.540634923e-05f, 1.540698677e-05f, 1.540759756e-05f, 1.540818160e-05f,
+1.540873891e-05f, 1.540926947e-05f, 1.540977330e-05f, 1.541025039e-05f, 1.541070075e-05f, 1.541112439e-05f, 1.541152129e-05f, 1.541189147e-05f, 1.541223492e-05f, 1.541255166e-05f,
+1.541284167e-05f, 1.541310497e-05f, 1.541334156e-05f, 1.541355144e-05f, 1.541373461e-05f, 1.541389108e-05f, 1.541402084e-05f, 1.541412391e-05f, 1.541420028e-05f, 1.541424995e-05f,
+1.541427294e-05f, 1.541426924e-05f, 1.541423886e-05f, 1.541418179e-05f, 1.541409805e-05f, 1.541398763e-05f, 1.541385054e-05f, 1.541368679e-05f, 1.541349637e-05f, 1.541327928e-05f,
+1.541303555e-05f, 1.541276515e-05f, 1.541246811e-05f, 1.541214442e-05f, 1.541179408e-05f, 1.541141711e-05f, 1.541101350e-05f, 1.541058326e-05f, 1.541012639e-05f, 1.540964290e-05f,
+1.540913278e-05f, 1.540859605e-05f, 1.540803271e-05f, 1.540744275e-05f, 1.540682620e-05f, 1.540618304e-05f, 1.540551329e-05f, 1.540481694e-05f, 1.540409401e-05f, 1.540334449e-05f,
+1.540256840e-05f, 1.540176573e-05f, 1.540093649e-05f, 1.540008069e-05f, 1.539919832e-05f, 1.539828940e-05f, 1.539735392e-05f, 1.539639190e-05f, 1.539540334e-05f, 1.539438824e-05f,
+1.539334661e-05f, 1.539227845e-05f, 1.539118376e-05f, 1.539006256e-05f, 1.538891485e-05f, 1.538774062e-05f, 1.538653990e-05f, 1.538531267e-05f, 1.538405896e-05f, 1.538277876e-05f,
+1.538147207e-05f, 1.538013891e-05f, 1.537877928e-05f, 1.537739318e-05f, 1.537598062e-05f, 1.537454161e-05f, 1.537307614e-05f, 1.537158423e-05f, 1.537006589e-05f, 1.536852111e-05f,
+1.536694991e-05f, 1.536535228e-05f, 1.536372824e-05f, 1.536207779e-05f, 1.536040094e-05f, 1.535869769e-05f, 1.535696805e-05f, 1.535521202e-05f, 1.535342961e-05f, 1.535162084e-05f,
+1.534978569e-05f, 1.534792418e-05f, 1.534603632e-05f, 1.534412211e-05f, 1.534218156e-05f, 1.534021467e-05f, 1.533822146e-05f, 1.533620192e-05f, 1.533415606e-05f, 1.533208390e-05f,
+1.532998544e-05f, 1.532786067e-05f, 1.532570962e-05f, 1.532353229e-05f, 1.532132868e-05f, 1.531909880e-05f, 1.531684266e-05f, 1.531456027e-05f, 1.531225162e-05f, 1.530991674e-05f,
+1.530755562e-05f, 1.530516828e-05f, 1.530275471e-05f, 1.530031493e-05f, 1.529784895e-05f, 1.529535677e-05f, 1.529283840e-05f, 1.529029385e-05f, 1.528772312e-05f, 1.528512622e-05f,
+1.528250316e-05f, 1.527985395e-05f, 1.527717859e-05f, 1.527447710e-05f, 1.527174947e-05f, 1.526899573e-05f, 1.526621586e-05f, 1.526340990e-05f, 1.526057783e-05f, 1.525771967e-05f,
+1.525483543e-05f, 1.525192511e-05f, 1.524898873e-05f, 1.524602628e-05f, 1.524303779e-05f, 1.524002325e-05f, 1.523698268e-05f, 1.523391609e-05f, 1.523082347e-05f, 1.522770485e-05f,
+1.522456023e-05f, 1.522138961e-05f, 1.521819301e-05f, 1.521497043e-05f, 1.521172189e-05f, 1.520844739e-05f, 1.520514694e-05f, 1.520182054e-05f, 1.519846822e-05f, 1.519508997e-05f,
+1.519168581e-05f, 1.518825574e-05f, 1.518479978e-05f, 1.518131793e-05f, 1.517781020e-05f, 1.517427660e-05f, 1.517071714e-05f, 1.516713183e-05f, 1.516352067e-05f, 1.515988369e-05f,
+1.515622088e-05f, 1.515253225e-05f, 1.514881782e-05f, 1.514507760e-05f, 1.514131159e-05f, 1.513751980e-05f, 1.513370225e-05f, 1.512985894e-05f, 1.512598988e-05f, 1.512209508e-05f,
+1.511817456e-05f, 1.511422831e-05f, 1.511025636e-05f, 1.510625871e-05f, 1.510223537e-05f, 1.509818635e-05f, 1.509411166e-05f, 1.509001131e-05f, 1.508588532e-05f, 1.508173368e-05f,
+1.507755642e-05f, 1.507335353e-05f, 1.506912504e-05f, 1.506487095e-05f, 1.506059128e-05f, 1.505628602e-05f, 1.505195520e-05f, 1.504759883e-05f, 1.504321690e-05f, 1.503880944e-05f,
+1.503437646e-05f, 1.502991796e-05f, 1.502543396e-05f, 1.502092447e-05f, 1.501638950e-05f, 1.501182905e-05f, 1.500724314e-05f, 1.500263178e-05f, 1.499799499e-05f, 1.499333277e-05f,
+1.498864513e-05f, 1.498393208e-05f, 1.497919364e-05f, 1.497442982e-05f, 1.496964063e-05f, 1.496482607e-05f, 1.495998617e-05f, 1.495512093e-05f, 1.495023036e-05f, 1.494531447e-05f,
+1.494037328e-05f, 1.493540680e-05f, 1.493041504e-05f, 1.492539800e-05f, 1.492035571e-05f, 1.491528818e-05f, 1.491019541e-05f, 1.490507741e-05f, 1.489993421e-05f, 1.489476580e-05f,
+1.488957221e-05f, 1.488435345e-05f, 1.487910952e-05f, 1.487384044e-05f, 1.486854622e-05f, 1.486322687e-05f, 1.485788240e-05f, 1.485251284e-05f, 1.484711818e-05f, 1.484169845e-05f,
+1.483625364e-05f, 1.483078379e-05f, 1.482528889e-05f, 1.481976896e-05f, 1.481422402e-05f, 1.480865407e-05f, 1.480305913e-05f, 1.479743921e-05f, 1.479179433e-05f, 1.478612449e-05f,
+1.478042971e-05f, 1.477471000e-05f, 1.476896538e-05f, 1.476319585e-05f, 1.475740144e-05f, 1.475158214e-05f, 1.474573799e-05f, 1.473986898e-05f, 1.473397513e-05f, 1.472805646e-05f,
+1.472211298e-05f, 1.471614469e-05f, 1.471015163e-05f, 1.470413379e-05f, 1.469809119e-05f, 1.469202385e-05f, 1.468593177e-05f, 1.467981498e-05f, 1.467367348e-05f, 1.466750729e-05f,
+1.466131642e-05f, 1.465510088e-05f, 1.464886070e-05f, 1.464259588e-05f, 1.463630643e-05f, 1.462999237e-05f, 1.462365372e-05f, 1.461729049e-05f, 1.461090268e-05f, 1.460449033e-05f,
+1.459805343e-05f, 1.459159200e-05f, 1.458510607e-05f, 1.457859563e-05f, 1.457206071e-05f, 1.456550132e-05f, 1.455891747e-05f, 1.455230918e-05f, 1.454567647e-05f, 1.453901934e-05f,
+1.453233781e-05f, 1.452563190e-05f, 1.451890162e-05f, 1.451214698e-05f, 1.450536800e-05f, 1.449856469e-05f, 1.449173708e-05f, 1.448488516e-05f, 1.447800896e-05f, 1.447110850e-05f,
+1.446418378e-05f, 1.445723482e-05f, 1.445026164e-05f, 1.444326425e-05f, 1.443624267e-05f, 1.442919691e-05f, 1.442212699e-05f, 1.441503291e-05f, 1.440791471e-05f, 1.440077238e-05f,
+1.439360595e-05f, 1.438641543e-05f, 1.437920084e-05f, 1.437196220e-05f, 1.436469951e-05f, 1.435741279e-05f, 1.435010206e-05f, 1.434276734e-05f, 1.433540864e-05f, 1.432802597e-05f,
+1.432061935e-05f, 1.431318880e-05f, 1.430573433e-05f, 1.429825595e-05f, 1.429075369e-05f, 1.428322756e-05f, 1.427567757e-05f, 1.426810375e-05f, 1.426050610e-05f, 1.425288464e-05f,
+1.424523939e-05f, 1.423757037e-05f, 1.422987759e-05f, 1.422216106e-05f, 1.421442080e-05f, 1.420665684e-05f, 1.419886918e-05f, 1.419105784e-05f, 1.418322283e-05f, 1.417536418e-05f,
+1.416748191e-05f, 1.415957601e-05f, 1.415164652e-05f, 1.414369345e-05f, 1.413571682e-05f, 1.412771664e-05f, 1.411969292e-05f, 1.411164570e-05f, 1.410357497e-05f, 1.409548076e-05f,
+1.408736309e-05f, 1.407922198e-05f, 1.407105743e-05f, 1.406286947e-05f, 1.405465811e-05f, 1.404642337e-05f, 1.403816526e-05f, 1.402988381e-05f, 1.402157904e-05f, 1.401325095e-05f,
+1.400489956e-05f, 1.399652490e-05f, 1.398812698e-05f, 1.397970581e-05f, 1.397126142e-05f, 1.396279382e-05f, 1.395430303e-05f, 1.394578907e-05f, 1.393725194e-05f, 1.392869168e-05f,
+1.392010830e-05f, 1.391150181e-05f, 1.390287224e-05f, 1.389421960e-05f, 1.388554391e-05f, 1.387684518e-05f, 1.386812344e-05f, 1.385937871e-05f, 1.385061099e-05f, 1.384182031e-05f,
+1.383300668e-05f, 1.382417013e-05f, 1.381531067e-05f, 1.380642832e-05f, 1.379752310e-05f, 1.378859502e-05f, 1.377964411e-05f, 1.377067037e-05f, 1.376167384e-05f, 1.375265453e-05f,
+1.374361245e-05f, 1.373454763e-05f, 1.372546008e-05f, 1.371634983e-05f, 1.370721688e-05f, 1.369806126e-05f, 1.368888299e-05f, 1.367968209e-05f, 1.367045857e-05f, 1.366121245e-05f,
+1.365194375e-05f, 1.364265249e-05f, 1.363333869e-05f, 1.362400237e-05f, 1.361464355e-05f, 1.360526224e-05f, 1.359585846e-05f, 1.358643224e-05f, 1.357698359e-05f, 1.356751253e-05f,
+1.355801907e-05f, 1.354850325e-05f, 1.353896508e-05f, 1.352940457e-05f, 1.351982175e-05f, 1.351021663e-05f, 1.350058924e-05f, 1.349093959e-05f, 1.348126770e-05f, 1.347157360e-05f,
+1.346185729e-05f, 1.345211881e-05f, 1.344235817e-05f, 1.343257539e-05f, 1.342277049e-05f, 1.341294349e-05f, 1.340309441e-05f, 1.339322326e-05f, 1.338333007e-05f, 1.337341486e-05f,
+1.336347765e-05f, 1.335351845e-05f, 1.334353730e-05f, 1.333353419e-05f, 1.332350917e-05f, 1.331346224e-05f, 1.330339343e-05f, 1.329330275e-05f, 1.328319023e-05f, 1.327305589e-05f,
+1.326289974e-05f, 1.325272181e-05f, 1.324252212e-05f, 1.323230068e-05f, 1.322205752e-05f, 1.321179266e-05f, 1.320150611e-05f, 1.319119791e-05f, 1.318086806e-05f, 1.317051659e-05f,
+1.316014352e-05f, 1.314974887e-05f, 1.313933266e-05f, 1.312889491e-05f, 1.311843564e-05f, 1.310795488e-05f, 1.309745264e-05f, 1.308692894e-05f, 1.307638380e-05f, 1.306581725e-05f,
+1.305522930e-05f, 1.304461999e-05f, 1.303398931e-05f, 1.302333731e-05f, 1.301266400e-05f, 1.300196939e-05f, 1.299125352e-05f, 1.298051639e-05f, 1.296975805e-05f, 1.295897849e-05f,
+1.294817775e-05f, 1.293735585e-05f, 1.292651280e-05f, 1.291564864e-05f, 1.290476337e-05f, 1.289385703e-05f, 1.288292963e-05f, 1.287198119e-05f, 1.286101174e-05f, 1.285002129e-05f,
+1.283900987e-05f, 1.282797751e-05f, 1.281692421e-05f, 1.280585001e-05f, 1.279475492e-05f, 1.278363897e-05f, 1.277250218e-05f, 1.276134456e-05f, 1.275016615e-05f, 1.273896696e-05f,
+1.272774702e-05f, 1.271650634e-05f, 1.270524495e-05f, 1.269396287e-05f, 1.268266013e-05f, 1.267133674e-05f, 1.265999272e-05f, 1.264862811e-05f, 1.263724291e-05f, 1.262583716e-05f,
+1.261441087e-05f, 1.260296407e-05f, 1.259149678e-05f, 1.258000902e-05f, 1.256850082e-05f, 1.255697219e-05f, 1.254542316e-05f, 1.253385375e-05f, 1.252226398e-05f, 1.251065388e-05f,
+1.249902346e-05f, 1.248737276e-05f, 1.247570179e-05f, 1.246401058e-05f, 1.245229914e-05f, 1.244056751e-05f, 1.242881570e-05f, 1.241704373e-05f, 1.240525163e-05f, 1.239343943e-05f,
+1.238160714e-05f, 1.236975479e-05f, 1.235788240e-05f, 1.234598999e-05f, 1.233407758e-05f, 1.232214521e-05f, 1.231019289e-05f, 1.229822064e-05f, 1.228622849e-05f, 1.227421646e-05f,
+1.226218458e-05f, 1.225013286e-05f, 1.223806134e-05f, 1.222597003e-05f, 1.221385895e-05f, 1.220172814e-05f, 1.218957761e-05f, 1.217740738e-05f, 1.216521749e-05f, 1.215300795e-05f,
+1.214077879e-05f, 1.212853002e-05f, 1.211626168e-05f, 1.210397379e-05f, 1.209166637e-05f, 1.207933945e-05f, 1.206699304e-05f, 1.205462718e-05f, 1.204224188e-05f, 1.202983717e-05f,
+1.201741307e-05f, 1.200496961e-05f, 1.199250681e-05f, 1.198002469e-05f, 1.196752329e-05f, 1.195500261e-05f, 1.194246269e-05f, 1.192990356e-05f, 1.191732522e-05f, 1.190472772e-05f,
+1.189211106e-05f, 1.187947528e-05f, 1.186682041e-05f, 1.185414645e-05f, 1.184145345e-05f, 1.182874142e-05f, 1.181601038e-05f, 1.180326037e-05f, 1.179049140e-05f, 1.177770350e-05f,
+1.176489670e-05f, 1.175207101e-05f, 1.173922647e-05f, 1.172636310e-05f, 1.171348091e-05f, 1.170057995e-05f, 1.168766022e-05f, 1.167472176e-05f, 1.166176459e-05f, 1.164878874e-05f,
+1.163579422e-05f, 1.162278107e-05f, 1.160974930e-05f, 1.159669895e-05f, 1.158363004e-05f, 1.157054259e-05f, 1.155743663e-05f, 1.154431218e-05f, 1.153116927e-05f, 1.151800792e-05f,
+1.150482816e-05f, 1.149163002e-05f, 1.147841350e-05f, 1.146517865e-05f, 1.145192549e-05f, 1.143865404e-05f, 1.142536433e-05f, 1.141205638e-05f, 1.139873022e-05f, 1.138538587e-05f,
+1.137202337e-05f, 1.135864272e-05f, 1.134524396e-05f, 1.133182712e-05f, 1.131839222e-05f, 1.130493928e-05f, 1.129146833e-05f, 1.127797940e-05f, 1.126447250e-05f, 1.125094768e-05f,
+1.123740495e-05f, 1.122384433e-05f, 1.121026586e-05f, 1.119666956e-05f, 1.118305545e-05f, 1.116942356e-05f, 1.115577392e-05f, 1.114210655e-05f, 1.112842147e-05f, 1.111471872e-05f,
+1.110099832e-05f, 1.108726029e-05f, 1.107350466e-05f, 1.105973146e-05f, 1.104594071e-05f, 1.103213244e-05f, 1.101830667e-05f, 1.100446343e-05f, 1.099060275e-05f, 1.097672465e-05f,
+1.096282916e-05f, 1.094891631e-05f, 1.093498611e-05f, 1.092103860e-05f, 1.090707380e-05f, 1.089309174e-05f, 1.087909245e-05f, 1.086507595e-05f, 1.085104226e-05f, 1.083699142e-05f,
+1.082292345e-05f, 1.080883838e-05f, 1.079473622e-05f, 1.078061702e-05f, 1.076648080e-05f, 1.075232757e-05f, 1.073815738e-05f, 1.072397024e-05f, 1.070976618e-05f, 1.069554523e-05f,
+1.068130741e-05f, 1.066705276e-05f, 1.065278129e-05f, 1.063849304e-05f, 1.062418803e-05f, 1.060986629e-05f, 1.059552785e-05f, 1.058117272e-05f, 1.056680095e-05f, 1.055241255e-05f,
+1.053800755e-05f, 1.052358598e-05f, 1.050914787e-05f, 1.049469324e-05f, 1.048022212e-05f, 1.046573454e-05f, 1.045123052e-05f, 1.043671009e-05f, 1.042217328e-05f, 1.040762012e-05f,
+1.039305063e-05f, 1.037846483e-05f, 1.036386277e-05f, 1.034924445e-05f, 1.033460992e-05f, 1.031995920e-05f, 1.030529231e-05f, 1.029060928e-05f, 1.027591015e-05f, 1.026119493e-05f,
+1.024646365e-05f, 1.023171635e-05f, 1.021695305e-05f, 1.020217377e-05f, 1.018737855e-05f, 1.017256741e-05f, 1.015774038e-05f, 1.014289749e-05f, 1.012803876e-05f, 1.011316422e-05f,
+1.009827391e-05f, 1.008336784e-05f, 1.006844604e-05f, 1.005350855e-05f, 1.003855539e-05f, 1.002358658e-05f, 1.000860216e-05f, 9.993602155e-06f, 9.978586591e-06f, 9.963555495e-06f,
+9.948508896e-06f, 9.933446822e-06f, 9.918369301e-06f, 9.903276360e-06f, 9.888168028e-06f, 9.873044332e-06f, 9.857905300e-06f, 9.842750961e-06f, 9.827581343e-06f, 9.812396472e-06f,
+9.797196379e-06f, 9.781981090e-06f, 9.766750633e-06f, 9.751505038e-06f, 9.736244332e-06f, 9.720968543e-06f, 9.705677699e-06f, 9.690371830e-06f, 9.675050962e-06f, 9.659715124e-06f,
+9.644364345e-06f, 9.628998653e-06f, 9.613618076e-06f, 9.598222643e-06f, 9.582812381e-06f, 9.567387320e-06f, 9.551947488e-06f, 9.536492913e-06f, 9.521023624e-06f, 9.505539649e-06f,
+9.490041017e-06f, 9.474527757e-06f, 9.458999896e-06f, 9.443457464e-06f, 9.427900489e-06f, 9.412328999e-06f, 9.396743025e-06f, 9.381142593e-06f, 9.365527733e-06f, 9.349898473e-06f,
+9.334254843e-06f, 9.318596871e-06f, 9.302924586e-06f, 9.287238016e-06f, 9.271537191e-06f, 9.255822139e-06f, 9.240092889e-06f, 9.224349471e-06f, 9.208591912e-06f, 9.192820242e-06f,
+9.177034491e-06f, 9.161234686e-06f, 9.145420857e-06f, 9.129593032e-06f, 9.113751242e-06f, 9.097895515e-06f, 9.082025880e-06f, 9.066142366e-06f, 9.050245002e-06f, 9.034333818e-06f,
+9.018408842e-06f, 9.002470105e-06f, 8.986517634e-06f, 8.970551459e-06f, 8.954571610e-06f, 8.938578116e-06f, 8.922571006e-06f, 8.906550309e-06f, 8.890516055e-06f, 8.874468273e-06f,
+8.858406992e-06f, 8.842332242e-06f, 8.826244052e-06f, 8.810142452e-06f, 8.794027471e-06f, 8.777899139e-06f, 8.761757484e-06f, 8.745602537e-06f, 8.729434327e-06f, 8.713252884e-06f,
+8.697058237e-06f, 8.680850415e-06f, 8.664629449e-06f, 8.648395368e-06f, 8.632148202e-06f, 8.615887980e-06f, 8.599614732e-06f, 8.583328487e-06f, 8.567029276e-06f, 8.550717129e-06f,
+8.534392074e-06f, 8.518054141e-06f, 8.501703362e-06f, 8.485339764e-06f, 8.468963379e-06f, 8.452574235e-06f, 8.436172364e-06f, 8.419757794e-06f, 8.403330555e-06f, 8.386890679e-06f,
+8.370438194e-06f, 8.353973130e-06f, 8.337495518e-06f, 8.321005387e-06f, 8.304502768e-06f, 8.287987690e-06f, 8.271460184e-06f, 8.254920279e-06f, 8.238368006e-06f, 8.221803395e-06f,
+8.205226476e-06f, 8.188637279e-06f, 8.172035835e-06f, 8.155422172e-06f, 8.138796323e-06f, 8.122158316e-06f, 8.105508182e-06f, 8.088845952e-06f, 8.072171655e-06f, 8.055485323e-06f,
+8.038786984e-06f, 8.022076670e-06f, 8.005354411e-06f, 7.988620237e-06f, 7.971874178e-06f, 7.955116266e-06f, 7.938346530e-06f, 7.921565000e-06f, 7.904771708e-06f, 7.887966684e-06f,
+7.871149957e-06f, 7.854321560e-06f, 7.837481521e-06f, 7.820629873e-06f, 7.803766644e-06f, 7.786891866e-06f, 7.770005570e-06f, 7.753107785e-06f, 7.736198543e-06f, 7.719277874e-06f,
+7.702345809e-06f, 7.685402379e-06f, 7.668447613e-06f, 7.651481544e-06f, 7.634504200e-06f, 7.617515614e-06f, 7.600515816e-06f, 7.583504837e-06f, 7.566482707e-06f, 7.549449458e-06f,
+7.532405119e-06f, 7.515349723e-06f, 7.498283299e-06f, 7.481205878e-06f, 7.464117492e-06f, 7.447018171e-06f, 7.429907947e-06f, 7.412786849e-06f, 7.395654910e-06f, 7.378512159e-06f,
+7.361358628e-06f, 7.344194348e-06f, 7.327019350e-06f, 7.309833665e-06f, 7.292637323e-06f, 7.275430357e-06f, 7.258212796e-06f, 7.240984672e-06f, 7.223746016e-06f, 7.206496860e-06f,
+7.189237233e-06f, 7.171967168e-06f, 7.154686695e-06f, 7.137395846e-06f, 7.120094652e-06f, 7.102783143e-06f, 7.085461352e-06f, 7.068129308e-06f, 7.050787045e-06f, 7.033434592e-06f,
+7.016071981e-06f, 6.998699243e-06f, 6.981316410e-06f, 6.963923513e-06f, 6.946520582e-06f, 6.929107651e-06f, 6.911684748e-06f, 6.894251907e-06f, 6.876809159e-06f, 6.859356534e-06f,
+6.841894064e-06f, 6.824421781e-06f, 6.806939715e-06f, 6.789447899e-06f, 6.771946364e-06f, 6.754435141e-06f, 6.736914262e-06f, 6.719383758e-06f, 6.701843661e-06f, 6.684294002e-06f,
+6.666734813e-06f, 6.649166124e-06f, 6.631587969e-06f, 6.614000378e-06f, 6.596403382e-06f, 6.578797014e-06f, 6.561181305e-06f, 6.543556287e-06f, 6.525921991e-06f, 6.508278449e-06f,
+6.490625692e-06f, 6.472963752e-06f, 6.455292661e-06f, 6.437612451e-06f, 6.419923153e-06f, 6.402224798e-06f, 6.384517419e-06f, 6.366801048e-06f, 6.349075715e-06f, 6.331341454e-06f,
+6.313598294e-06f, 6.295846269e-06f, 6.278085410e-06f, 6.260315749e-06f, 6.242537318e-06f, 6.224750148e-06f, 6.206954272e-06f, 6.189149720e-06f, 6.171336526e-06f, 6.153514720e-06f,
+6.135684335e-06f, 6.117845403e-06f, 6.099997955e-06f, 6.082142024e-06f, 6.064277641e-06f, 6.046404838e-06f, 6.028523647e-06f, 6.010634101e-06f, 5.992736230e-06f, 5.974830068e-06f,
+5.956915646e-06f, 5.938992995e-06f, 5.921062149e-06f, 5.903123139e-06f, 5.885175997e-06f, 5.867220755e-06f, 5.849257445e-06f, 5.831286100e-06f, 5.813306750e-06f, 5.795319429e-06f,
+5.777324169e-06f, 5.759321001e-06f, 5.741309957e-06f, 5.723291071e-06f, 5.705264373e-06f, 5.687229896e-06f, 5.669187673e-06f, 5.651137734e-06f, 5.633080114e-06f, 5.615014842e-06f,
+5.596941953e-06f, 5.578861478e-06f, 5.560773448e-06f, 5.542677898e-06f, 5.524574857e-06f, 5.506464360e-06f, 5.488346438e-06f, 5.470221123e-06f, 5.452088448e-06f, 5.433948445e-06f,
+5.415801146e-06f, 5.397646583e-06f, 5.379484789e-06f, 5.361315796e-06f, 5.343139636e-06f, 5.324956342e-06f, 5.306765946e-06f, 5.288568481e-06f, 5.270363977e-06f, 5.252152469e-06f,
+5.233933989e-06f, 5.215708568e-06f, 5.197476239e-06f, 5.179237035e-06f, 5.160990987e-06f, 5.142738129e-06f, 5.124478493e-06f, 5.106212111e-06f, 5.087939015e-06f, 5.069659238e-06f,
+5.051372813e-06f, 5.033079771e-06f, 5.014780146e-06f, 4.996473970e-06f, 4.978161275e-06f, 4.959842094e-06f, 4.941516459e-06f, 4.923184402e-06f, 4.904845957e-06f, 4.886501156e-06f,
+4.868150031e-06f, 4.849792614e-06f, 4.831428939e-06f, 4.813059038e-06f, 4.794682943e-06f, 4.776300687e-06f, 4.757912303e-06f, 4.739517823e-06f, 4.721117279e-06f, 4.702710704e-06f,
+4.684298132e-06f, 4.665879593e-06f, 4.647455122e-06f, 4.629024750e-06f, 4.610588511e-06f, 4.592146436e-06f, 4.573698559e-06f, 4.555244912e-06f, 4.536785527e-06f, 4.518320438e-06f,
+4.499849677e-06f, 4.481373277e-06f, 4.462891270e-06f, 4.444403689e-06f, 4.425910566e-06f, 4.407411935e-06f, 4.388907828e-06f, 4.370398278e-06f, 4.351883317e-06f, 4.333362978e-06f,
+4.314837294e-06f, 4.296306297e-06f, 4.277770021e-06f, 4.259228498e-06f, 4.240681760e-06f, 4.222129841e-06f, 4.203572773e-06f, 4.185010589e-06f, 4.166443321e-06f, 4.147871003e-06f,
+4.129293667e-06f, 4.110711346e-06f, 4.092124073e-06f, 4.073531880e-06f, 4.054934801e-06f, 4.036332867e-06f, 4.017726113e-06f, 3.999114570e-06f, 3.980498271e-06f, 3.961877250e-06f,
+3.943251538e-06f, 3.924621170e-06f, 3.905986177e-06f, 3.887346592e-06f, 3.868702449e-06f, 3.850053780e-06f, 3.831400618e-06f, 3.812742995e-06f, 3.794080945e-06f, 3.775414501e-06f,
+3.756743695e-06f, 3.738068560e-06f, 3.719389129e-06f, 3.700705435e-06f, 3.682017510e-06f, 3.663325388e-06f, 3.644629102e-06f, 3.625928684e-06f, 3.607224167e-06f, 3.588515584e-06f,
+3.569802968e-06f, 3.551086352e-06f, 3.532365768e-06f, 3.513641251e-06f, 3.494912831e-06f, 3.476180543e-06f, 3.457444420e-06f, 3.438704493e-06f, 3.419960797e-06f, 3.401213363e-06f,
+3.382462226e-06f, 3.363707417e-06f, 3.344948970e-06f, 3.326186918e-06f, 3.307421293e-06f, 3.288652129e-06f, 3.269879458e-06f, 3.251103313e-06f, 3.232323728e-06f, 3.213540735e-06f,
+3.194754367e-06f, 3.175964657e-06f, 3.157171638e-06f, 3.138375343e-06f, 3.119575805e-06f, 3.100773057e-06f, 3.081967131e-06f, 3.063158061e-06f, 3.044345880e-06f, 3.025530620e-06f,
+3.006712315e-06f, 2.987890998e-06f, 2.969066701e-06f, 2.950239457e-06f, 2.931409300e-06f, 2.912576262e-06f, 2.893740376e-06f, 2.874901675e-06f, 2.856060193e-06f, 2.837215962e-06f,
+2.818369015e-06f, 2.799519385e-06f, 2.780667105e-06f, 2.761812208e-06f, 2.742954727e-06f, 2.724094695e-06f, 2.705232145e-06f, 2.686367110e-06f, 2.667499623e-06f, 2.648629716e-06f,
+2.629757423e-06f, 2.610882777e-06f, 2.592005811e-06f, 2.573126557e-06f, 2.554245049e-06f, 2.535361320e-06f, 2.516475402e-06f, 2.497587329e-06f, 2.478697133e-06f, 2.459804848e-06f,
+2.440910506e-06f, 2.422014141e-06f, 2.403115785e-06f, 2.384215471e-06f, 2.365313233e-06f, 2.346409103e-06f, 2.327503114e-06f, 2.308595300e-06f, 2.289685693e-06f, 2.270774325e-06f,
+2.251861231e-06f, 2.232946443e-06f, 2.214029995e-06f, 2.195111918e-06f, 2.176192246e-06f, 2.157271012e-06f, 2.138348249e-06f, 2.119423989e-06f, 2.100498267e-06f, 2.081571114e-06f,
+2.062642564e-06f, 2.043712649e-06f, 2.024781403e-06f, 2.005848859e-06f, 1.986915049e-06f, 1.967980007e-06f, 1.949043765e-06f, 1.930106356e-06f, 1.911167814e-06f, 1.892228170e-06f,
+1.873287459e-06f, 1.854345713e-06f, 1.835402965e-06f, 1.816459248e-06f, 1.797514594e-06f, 1.778569038e-06f, 1.759622611e-06f, 1.740675346e-06f, 1.721727278e-06f, 1.702778437e-06f,
+1.683828858e-06f, 1.664878574e-06f, 1.645927616e-06f, 1.626976019e-06f, 1.608023814e-06f, 1.589071035e-06f, 1.570117716e-06f, 1.551163887e-06f, 1.532209584e-06f, 1.513254838e-06f,
+1.494299682e-06f, 1.475344149e-06f, 1.456388273e-06f, 1.437432085e-06f, 1.418475619e-06f, 1.399518908e-06f, 1.380561985e-06f, 1.361604882e-06f, 1.342647632e-06f, 1.323690269e-06f,
+1.304732824e-06f, 1.285775331e-06f, 1.266817823e-06f, 1.247860333e-06f, 1.228902893e-06f, 1.209945536e-06f, 1.190988295e-06f, 1.172031203e-06f, 1.153074293e-06f, 1.134117597e-06f,
+1.115161148e-06f, 1.096204980e-06f, 1.077249124e-06f, 1.058293614e-06f, 1.039338483e-06f, 1.020383763e-06f, 1.001429486e-06f, 9.824756873e-07f, 9.635223977e-07f, 9.445696506e-07f,
+9.256174786e-07f, 9.066659145e-07f, 8.877149911e-07f, 8.687647412e-07f, 8.498151974e-07f, 8.308663926e-07f, 8.119183594e-07f, 7.929711307e-07f, 7.740247390e-07f, 7.550792172e-07f,
+7.361345979e-07f, 7.171909139e-07f, 6.982481979e-07f, 6.793064826e-07f, 6.603658006e-07f, 6.414261847e-07f, 6.224876675e-07f, 6.035502817e-07f, 5.846140600e-07f, 5.656790350e-07f,
+5.467452395e-07f, 5.278127060e-07f, 5.088814673e-07f, 4.899515559e-07f, 4.710230044e-07f, 4.520958456e-07f, 4.331701120e-07f, 4.142458363e-07f, 3.953230511e-07f, 3.764017889e-07f,
+3.574820824e-07f, 3.385639641e-07f, 3.196474667e-07f, 3.007326227e-07f, 2.818194647e-07f, 2.629080253e-07f, 2.439983370e-07f, 2.250904323e-07f, 2.061843438e-07f, 1.872801041e-07f,
+1.683777457e-07f, 1.494773011e-07f, 1.305788028e-07f, 1.116822833e-07f, 9.278777511e-08f, 7.389531076e-08f, 5.500492273e-08f, 3.611664347e-08f, 1.723050548e-08f, -1.653458791e-09f,
+-2.053521688e-08f, -3.941473634e-08f, -5.829198474e-08f, -7.716692962e-08f, -9.603953857e-08f, -1.149097792e-07f, -1.337776190e-07f, -1.526430257e-07f, -1.715059668e-07f, -1.903664100e-07f,
+-2.092243229e-07f, -2.280796730e-07f, -2.469324281e-07f, -2.657825558e-07f, -2.846300238e-07f, -3.034747996e-07f, -3.223168510e-07f, -3.411561457e-07f, -3.599926514e-07f, -3.788263357e-07f,
+-3.976571663e-07f, -4.164851110e-07f, -4.353101375e-07f, -4.541322135e-07f, -4.729513067e-07f, -4.917673850e-07f, -5.105804161e-07f, -5.293903676e-07f, -5.481972075e-07f, -5.670009035e-07f,
+-5.858014234e-07f, -6.045987350e-07f, -6.233928061e-07f, -6.421836046e-07f, -6.609710982e-07f, -6.797552548e-07f, -6.985360423e-07f, -7.173134285e-07f, -7.360873813e-07f, -7.548578685e-07f,
+-7.736248582e-07f, -7.923883181e-07f, -8.111482162e-07f, -8.299045203e-07f, -8.486571985e-07f, -8.674062187e-07f, -8.861515488e-07f, -9.048931567e-07f, -9.236310105e-07f, -9.423650781e-07f,
+-9.610953276e-07f, -9.798217268e-07f, -9.985442439e-07f, -1.017262847e-06f, -1.035977504e-06f, -1.054688182e-06f, -1.073394851e-06f, -1.092097478e-06f, -1.110796031e-06f, -1.129490478e-06f,
+-1.148180787e-06f, -1.166866927e-06f, -1.185548865e-06f, -1.204226570e-06f, -1.222900010e-06f, -1.241569153e-06f, -1.260233967e-06f, -1.278894420e-06f, -1.297550481e-06f, -1.316202117e-06f,
+-1.334849297e-06f, -1.353491989e-06f, -1.372130162e-06f, -1.390763783e-06f, -1.409392821e-06f, -1.428017244e-06f, -1.446637021e-06f, -1.465252119e-06f, -1.483862507e-06f, -1.502468153e-06f,
+-1.521069026e-06f, -1.539665094e-06f, -1.558256325e-06f, -1.576842688e-06f, -1.595424151e-06f, -1.614000682e-06f, -1.632572250e-06f, -1.651138823e-06f, -1.669700370e-06f, -1.688256859e-06f,
+-1.706808258e-06f, -1.725354537e-06f, -1.743895662e-06f, -1.762431604e-06f, -1.780962330e-06f, -1.799487810e-06f, -1.818008010e-06f, -1.836522901e-06f, -1.855032450e-06f, -1.873536626e-06f,
+-1.892035398e-06f, -1.910528734e-06f, -1.929016603e-06f, -1.947498974e-06f, -1.965975814e-06f, -1.984447094e-06f, -2.002912780e-06f, -2.021372843e-06f, -2.039827251e-06f, -2.058275972e-06f,
+-2.076718975e-06f, -2.095156229e-06f, -2.113587703e-06f, -2.132013365e-06f, -2.150433184e-06f, -2.168847129e-06f, -2.187255168e-06f, -2.205657271e-06f, -2.224053407e-06f, -2.242443543e-06f,
+-2.260827650e-06f, -2.279205695e-06f, -2.297577648e-06f, -2.315943478e-06f, -2.334303153e-06f, -2.352656643e-06f, -2.371003916e-06f, -2.389344941e-06f, -2.407679687e-06f, -2.426008124e-06f,
+-2.444330220e-06f, -2.462645944e-06f, -2.480955265e-06f, -2.499258153e-06f, -2.517554575e-06f, -2.535844503e-06f, -2.554127903e-06f, -2.572404747e-06f, -2.590675001e-06f, -2.608938637e-06f,
+-2.627195622e-06f, -2.645445927e-06f, -2.663689520e-06f, -2.681926370e-06f, -2.700156447e-06f, -2.718379719e-06f, -2.736596157e-06f, -2.754805729e-06f, -2.773008404e-06f, -2.791204153e-06f,
+-2.809392943e-06f, -2.827574745e-06f, -2.845749527e-06f, -2.863917260e-06f, -2.882077912e-06f, -2.900231453e-06f, -2.918377852e-06f, -2.936517078e-06f, -2.954649102e-06f, -2.972773892e-06f,
+-2.990891418e-06f, -3.009001649e-06f, -3.027104555e-06f, -3.045200105e-06f, -3.063288270e-06f, -3.081369017e-06f, -3.099442318e-06f, -3.117508141e-06f, -3.135566456e-06f, -3.153617232e-06f,
+-3.171660440e-06f, -3.189696049e-06f, -3.207724029e-06f, -3.225744348e-06f, -3.243756978e-06f, -3.261761887e-06f, -3.279759045e-06f, -3.297748423e-06f, -3.315729989e-06f, -3.333703714e-06f,
+-3.351669567e-06f, -3.369627518e-06f, -3.387577537e-06f, -3.405519594e-06f, -3.423453658e-06f, -3.441379700e-06f, -3.459297690e-06f, -3.477207596e-06f, -3.495109390e-06f, -3.513003041e-06f,
+-3.530888519e-06f, -3.548765794e-06f, -3.566634836e-06f, -3.584495616e-06f, -3.602348102e-06f, -3.620192266e-06f, -3.638028076e-06f, -3.655855504e-06f, -3.673674520e-06f, -3.691485092e-06f,
+-3.709287193e-06f, -3.727080791e-06f, -3.744865857e-06f, -3.762642362e-06f, -3.780410274e-06f, -3.798169566e-06f, -3.815920206e-06f, -3.833662165e-06f, -3.851395414e-06f, -3.869119922e-06f,
+-3.886835660e-06f, -3.904542599e-06f, -3.922240708e-06f, -3.939929958e-06f, -3.957610320e-06f, -3.975281764e-06f, -3.992944260e-06f, -4.010597778e-06f, -4.028242290e-06f, -4.045877766e-06f,
+-4.063504175e-06f, -4.081121490e-06f, -4.098729680e-06f, -4.116328715e-06f, -4.133918567e-06f, -4.151499207e-06f, -4.169070603e-06f, -4.186632728e-06f, -4.204185552e-06f, -4.221729046e-06f,
+-4.239263180e-06f, -4.256787925e-06f, -4.274303252e-06f, -4.291809132e-06f, -4.309305534e-06f, -4.326792431e-06f, -4.344269793e-06f, -4.361737591e-06f, -4.379195796e-06f, -4.396644378e-06f,
+-4.414083308e-06f, -4.431512558e-06f, -4.448932098e-06f, -4.466341899e-06f, -4.483741933e-06f, -4.501132170e-06f, -4.518512581e-06f, -4.535883137e-06f, -4.553243810e-06f, -4.570594571e-06f,
+-4.587935390e-06f, -4.605266238e-06f, -4.622587088e-06f, -4.639897909e-06f, -4.657198674e-06f, -4.674489353e-06f, -4.691769917e-06f, -4.709040339e-06f, -4.726300588e-06f, -4.743550637e-06f,
+-4.760790457e-06f, -4.778020019e-06f, -4.795239294e-06f, -4.812448254e-06f, -4.829646871e-06f, -4.846835115e-06f, -4.864012958e-06f, -4.881180371e-06f, -4.898337327e-06f, -4.915483796e-06f,
+-4.932619750e-06f, -4.949745160e-06f, -4.966859999e-06f, -4.983964237e-06f, -5.001057847e-06f, -5.018140800e-06f, -5.035213067e-06f, -5.052274621e-06f, -5.069325433e-06f, -5.086365474e-06f,
+-5.103394717e-06f, -5.120413133e-06f, -5.137420694e-06f, -5.154417372e-06f, -5.171403139e-06f, -5.188377966e-06f, -5.205341825e-06f, -5.222294689e-06f, -5.239236529e-06f, -5.256167317e-06f,
+-5.273087026e-06f, -5.289995626e-06f, -5.306893090e-06f, -5.323779391e-06f, -5.340654500e-06f, -5.357518389e-06f, -5.374371030e-06f, -5.391212396e-06f, -5.408042458e-06f, -5.424861190e-06f,
+-5.441668562e-06f, -5.458464547e-06f, -5.475249118e-06f, -5.492022247e-06f, -5.508783906e-06f, -5.525534066e-06f, -5.542272702e-06f, -5.558999785e-06f, -5.575715286e-06f, -5.592419180e-06f,
+-5.609111438e-06f, -5.625792032e-06f, -5.642460936e-06f, -5.659118121e-06f, -5.675763560e-06f, -5.692397226e-06f, -5.709019091e-06f, -5.725629128e-06f, -5.742227309e-06f, -5.758813608e-06f,
+-5.775387996e-06f, -5.791950446e-06f, -5.808500932e-06f, -5.825039425e-06f, -5.841565899e-06f, -5.858080326e-06f, -5.874582679e-06f, -5.891072932e-06f, -5.907551056e-06f, -5.924017025e-06f,
+-5.940470811e-06f, -5.956912388e-06f, -5.973341729e-06f, -5.989758806e-06f, -6.006163592e-06f, -6.022556061e-06f, -6.038936185e-06f, -6.055303938e-06f, -6.071659293e-06f, -6.088002222e-06f,
+-6.104332699e-06f, -6.120650698e-06f, -6.136956191e-06f, -6.153249151e-06f, -6.169529552e-06f, -6.185797367e-06f, -6.202052569e-06f, -6.218295132e-06f, -6.234525029e-06f, -6.250742234e-06f,
+-6.266946719e-06f, -6.283138458e-06f, -6.299317425e-06f, -6.315483593e-06f, -6.331636935e-06f, -6.347777426e-06f, -6.363905038e-06f, -6.380019745e-06f, -6.396121522e-06f, -6.412210340e-06f,
+-6.428286175e-06f, -6.444348999e-06f, -6.460398787e-06f, -6.476435512e-06f, -6.492459148e-06f, -6.508469669e-06f, -6.524467048e-06f, -6.540451259e-06f, -6.556422277e-06f, -6.572380074e-06f,
+-6.588324626e-06f, -6.604255905e-06f, -6.620173887e-06f, -6.636078544e-06f, -6.651969850e-06f, -6.667847781e-06f, -6.683712310e-06f, -6.699563411e-06f, -6.715401057e-06f, -6.731225224e-06f,
+-6.747035886e-06f, -6.762833016e-06f, -6.778616589e-06f, -6.794386579e-06f, -6.810142960e-06f, -6.825885707e-06f, -6.841614794e-06f, -6.857330196e-06f, -6.873031886e-06f, -6.888719839e-06f,
+-6.904394029e-06f, -6.920054432e-06f, -6.935701021e-06f, -6.951333772e-06f, -6.966952657e-06f, -6.982557653e-06f, -6.998148734e-06f, -7.013725874e-06f, -7.029289048e-06f, -7.044838230e-06f,
+-7.060373396e-06f, -7.075894520e-06f, -7.091401577e-06f, -7.106894541e-06f, -7.122373388e-06f, -7.137838092e-06f, -7.153288629e-06f, -7.168724972e-06f, -7.184147097e-06f, -7.199554980e-06f,
+-7.214948594e-06f, -7.230327915e-06f, -7.245692918e-06f, -7.261043578e-06f, -7.276379870e-06f, -7.291701769e-06f, -7.307009250e-06f, -7.322302289e-06f, -7.337580861e-06f, -7.352844941e-06f,
+-7.368094504e-06f, -7.383329525e-06f, -7.398549980e-06f, -7.413755844e-06f, -7.428947093e-06f, -7.444123702e-06f, -7.459285646e-06f, -7.474432901e-06f, -7.489565442e-06f, -7.504683244e-06f,
+-7.519786284e-06f, -7.534874537e-06f, -7.549947978e-06f, -7.565006584e-06f, -7.580050329e-06f, -7.595079189e-06f, -7.610093141e-06f, -7.625092160e-06f, -7.640076221e-06f, -7.655045300e-06f,
+-7.669999374e-06f, -7.684938418e-06f, -7.699862408e-06f, -7.714771320e-06f, -7.729665129e-06f, -7.744543813e-06f, -7.759407346e-06f, -7.774255705e-06f, -7.789088866e-06f, -7.803906805e-06f,
+-7.818709497e-06f, -7.833496921e-06f, -7.848269050e-06f, -7.863025862e-06f, -7.877767333e-06f, -7.892493439e-06f, -7.907204157e-06f, -7.921899462e-06f, -7.936579331e-06f, -7.951243740e-06f,
+-7.965892667e-06f, -7.980526086e-06f, -7.995143976e-06f, -8.009746311e-06f, -8.024333070e-06f, -8.038904227e-06f, -8.053459761e-06f, -8.067999647e-06f, -8.082523862e-06f, -8.097032384e-06f,
+-8.111525187e-06f, -8.126002250e-06f, -8.140463549e-06f, -8.154909061e-06f, -8.169338762e-06f, -8.183752630e-06f, -8.198150642e-06f, -8.212532774e-06f, -8.226899003e-06f, -8.241249306e-06f,
+-8.255583660e-06f, -8.269902043e-06f, -8.284204431e-06f, -8.298490802e-06f, -8.312761132e-06f, -8.327015399e-06f, -8.341253580e-06f, -8.355475652e-06f, -8.369681593e-06f, -8.383871379e-06f,
+-8.398044988e-06f, -8.412202398e-06f, -8.426343585e-06f, -8.440468527e-06f, -8.454577202e-06f, -8.468669587e-06f, -8.482745659e-06f, -8.496805397e-06f, -8.510848777e-06f, -8.524875777e-06f,
+-8.538886375e-06f, -8.552880549e-06f, -8.566858276e-06f, -8.580819533e-06f, -8.594764299e-06f, -8.608692552e-06f, -8.622604269e-06f, -8.636499427e-06f, -8.650378006e-06f, -8.664239983e-06f,
+-8.678085335e-06f, -8.691914041e-06f, -8.705726078e-06f, -8.719521426e-06f, -8.733300061e-06f, -8.747061962e-06f, -8.760807107e-06f, -8.774535474e-06f, -8.788247041e-06f, -8.801941787e-06f,
+-8.815619690e-06f, -8.829280728e-06f, -8.842924879e-06f, -8.856552122e-06f, -8.870162435e-06f, -8.883755796e-06f, -8.897332185e-06f, -8.910891579e-06f, -8.924433957e-06f, -8.937959297e-06f,
+-8.951467578e-06f, -8.964958779e-06f, -8.978432878e-06f, -8.991889854e-06f, -9.005329686e-06f, -9.018752352e-06f, -9.032157831e-06f, -9.045546102e-06f, -9.058917144e-06f, -9.072270935e-06f,
+-9.085607455e-06f, -9.098926682e-06f, -9.112228596e-06f, -9.125513175e-06f, -9.138780398e-06f, -9.152030245e-06f, -9.165262694e-06f, -9.178477724e-06f, -9.191675316e-06f, -9.204855447e-06f,
+-9.218018098e-06f, -9.231163246e-06f, -9.244290873e-06f, -9.257400956e-06f, -9.270493476e-06f, -9.283568412e-06f, -9.296625743e-06f, -9.309665448e-06f, -9.322687507e-06f, -9.335691900e-06f,
+-9.348678606e-06f, -9.361647605e-06f, -9.374598875e-06f, -9.387532398e-06f, -9.400448153e-06f, -9.413346118e-06f, -9.426226275e-06f, -9.439088603e-06f, -9.451933081e-06f, -9.464759690e-06f,
+-9.477568409e-06f, -9.490359218e-06f, -9.503132098e-06f, -9.515887028e-06f, -9.528623988e-06f, -9.541342958e-06f, -9.554043918e-06f, -9.566726849e-06f, -9.579391731e-06f, -9.592038543e-06f,
+-9.604667266e-06f, -9.617277881e-06f, -9.629870366e-06f, -9.642444704e-06f, -9.655000874e-06f, -9.667538856e-06f, -9.680058631e-06f, -9.692560180e-06f, -9.705043482e-06f, -9.717508519e-06f,
+-9.729955271e-06f, -9.742383718e-06f, -9.754793841e-06f, -9.767185621e-06f, -9.779559039e-06f, -9.791914074e-06f, -9.804250709e-06f, -9.816568923e-06f, -9.828868698e-06f, -9.841150014e-06f,
+-9.853412853e-06f, -9.865657194e-06f, -9.877883020e-06f, -9.890090311e-06f, -9.902279048e-06f, -9.914449213e-06f, -9.926600785e-06f, -9.938733748e-06f, -9.950848080e-06f, -9.962943765e-06f,
+-9.975020783e-06f, -9.987079115e-06f, -9.999118742e-06f, -1.001113965e-05f, -1.002314181e-05f, -1.003512521e-05f, -1.004708984e-05f, -1.005903566e-05f, -1.007096267e-05f, -1.008287085e-05f,
+-1.009476017e-05f, -1.010663063e-05f, -1.011848219e-05f, -1.013031485e-05f, -1.014212857e-05f, -1.015392336e-05f, -1.016569918e-05f, -1.017745602e-05f, -1.018919387e-05f, -1.020091269e-05f,
+-1.021261249e-05f, -1.022429322e-05f, -1.023595489e-05f, -1.024759747e-05f, -1.025922094e-05f, -1.027082529e-05f, -1.028241049e-05f, -1.029397653e-05f, -1.030552340e-05f, -1.031705107e-05f,
+-1.032855952e-05f, -1.034004875e-05f, -1.035151872e-05f, -1.036296943e-05f, -1.037440086e-05f, -1.038581298e-05f, -1.039720578e-05f, -1.040857925e-05f, -1.041993336e-05f, -1.043126810e-05f,
+-1.044258345e-05f, -1.045387940e-05f, -1.046515592e-05f, -1.047641300e-05f, -1.048765062e-05f, -1.049886877e-05f, -1.051006742e-05f, -1.052124657e-05f, -1.053240619e-05f, -1.054354626e-05f,
+-1.055466678e-05f, -1.056576771e-05f, -1.057684906e-05f, -1.058791079e-05f, -1.059895289e-05f, -1.060997535e-05f, -1.062097814e-05f, -1.063196126e-05f, -1.064292468e-05f, -1.065386839e-05f,
+-1.066479237e-05f, -1.067569661e-05f, -1.068658108e-05f, -1.069744578e-05f, -1.070829068e-05f, -1.071911577e-05f, -1.072992103e-05f, -1.074070644e-05f, -1.075147200e-05f, -1.076221768e-05f,
+-1.077294347e-05f, -1.078364934e-05f, -1.079433529e-05f, -1.080500130e-05f, -1.081564736e-05f, -1.082627343e-05f, -1.083687952e-05f, -1.084746560e-05f, -1.085803166e-05f, -1.086857768e-05f,
+-1.087910365e-05f, -1.088960955e-05f, -1.090009536e-05f, -1.091056107e-05f, -1.092100666e-05f, -1.093143212e-05f, -1.094183743e-05f, -1.095222258e-05f, -1.096258754e-05f, -1.097293232e-05f,
+-1.098325688e-05f, -1.099356121e-05f, -1.100384530e-05f, -1.101410913e-05f, -1.102435269e-05f, -1.103457597e-05f, -1.104477893e-05f, -1.105496158e-05f, -1.106512390e-05f, -1.107526587e-05f,
+-1.108538747e-05f, -1.109548869e-05f, -1.110556952e-05f, -1.111562993e-05f, -1.112566992e-05f, -1.113568948e-05f, -1.114568857e-05f, -1.115566720e-05f, -1.116562534e-05f, -1.117556298e-05f,
+-1.118548011e-05f, -1.119537671e-05f, -1.120525277e-05f, -1.121510826e-05f, -1.122494319e-05f, -1.123475752e-05f, -1.124455126e-05f, -1.125432437e-05f, -1.126407686e-05f, -1.127380870e-05f,
+-1.128351988e-05f, -1.129321038e-05f, -1.130288019e-05f, -1.131252930e-05f, -1.132215770e-05f, -1.133176536e-05f, -1.134135227e-05f, -1.135091843e-05f, -1.136046381e-05f, -1.136998840e-05f,
+-1.137949219e-05f, -1.138897516e-05f, -1.139843730e-05f, -1.140787860e-05f, -1.141729903e-05f, -1.142669860e-05f, -1.143607728e-05f, -1.144543506e-05f, -1.145477192e-05f, -1.146408786e-05f,
+-1.147338286e-05f, -1.148265690e-05f, -1.149190997e-05f, -1.150114206e-05f, -1.151035316e-05f, -1.151954325e-05f, -1.152871231e-05f, -1.153786034e-05f, -1.154698732e-05f, -1.155609323e-05f,
+-1.156517807e-05f, -1.157424182e-05f, -1.158328447e-05f, -1.159230601e-05f, -1.160130641e-05f, -1.161028567e-05f, -1.161924378e-05f, -1.162818072e-05f, -1.163709648e-05f, -1.164599104e-05f,
+-1.165486440e-05f, -1.166371654e-05f, -1.167254744e-05f, -1.168135710e-05f, -1.169014551e-05f, -1.169891264e-05f, -1.170765848e-05f, -1.171638304e-05f, -1.172508628e-05f, -1.173376820e-05f,
+-1.174242879e-05f, -1.175106803e-05f, -1.175968591e-05f, -1.176828242e-05f, -1.177685755e-05f, -1.178541128e-05f, -1.179394360e-05f, -1.180245450e-05f, -1.181094397e-05f, -1.181941199e-05f,
+-1.182785856e-05f, -1.183628366e-05f, -1.184468727e-05f, -1.185306939e-05f, -1.186143001e-05f, -1.186976911e-05f, -1.187808668e-05f, -1.188638271e-05f, -1.189465719e-05f, -1.190291010e-05f,
+-1.191114143e-05f, -1.191935118e-05f, -1.192753933e-05f, -1.193570586e-05f, -1.194385077e-05f, -1.195197405e-05f, -1.196007568e-05f, -1.196815565e-05f, -1.197621396e-05f, -1.198425058e-05f,
+-1.199226551e-05f, -1.200025874e-05f, -1.200823025e-05f, -1.201618004e-05f, -1.202410809e-05f, -1.203201439e-05f, -1.203989893e-05f, -1.204776170e-05f, -1.205560269e-05f, -1.206342188e-05f,
+-1.207121928e-05f, -1.207899486e-05f, -1.208674861e-05f, -1.209448052e-05f, -1.210219059e-05f, -1.210987880e-05f, -1.211754515e-05f, -1.212518961e-05f, -1.213281218e-05f, -1.214041285e-05f,
+-1.214799161e-05f, -1.215554845e-05f, -1.216308336e-05f, -1.217059632e-05f, -1.217808733e-05f, -1.218555638e-05f, -1.219300345e-05f, -1.220042854e-05f, -1.220783163e-05f, -1.221521272e-05f,
+-1.222257179e-05f, -1.222990884e-05f, -1.223722385e-05f, -1.224451681e-05f, -1.225178772e-05f, -1.225903657e-05f, -1.226626334e-05f, -1.227346802e-05f, -1.228065061e-05f, -1.228781109e-05f,
+-1.229494946e-05f, -1.230206570e-05f, -1.230915981e-05f, -1.231623178e-05f, -1.232328159e-05f, -1.233030924e-05f, -1.233731471e-05f, -1.234429800e-05f, -1.235125910e-05f, -1.235819800e-05f,
+-1.236511469e-05f, -1.237200916e-05f, -1.237888139e-05f, -1.238573139e-05f, -1.239255914e-05f, -1.239936463e-05f, -1.240614786e-05f, -1.241290881e-05f, -1.241964748e-05f, -1.242636385e-05f,
+-1.243305792e-05f, -1.243972968e-05f, -1.244637911e-05f, -1.245300622e-05f, -1.245961099e-05f, -1.246619341e-05f, -1.247275348e-05f, -1.247929118e-05f, -1.248580650e-05f, -1.249229945e-05f,
+-1.249877000e-05f, -1.250521815e-05f, -1.251164390e-05f, -1.251804723e-05f, -1.252442814e-05f, -1.253078661e-05f, -1.253712264e-05f, -1.254343622e-05f, -1.254972734e-05f, -1.255599599e-05f,
+-1.256224217e-05f, -1.256846587e-05f, -1.257466708e-05f, -1.258084578e-05f, -1.258700198e-05f, -1.259313567e-05f, -1.259924683e-05f, -1.260533546e-05f, -1.261140155e-05f, -1.261744509e-05f,
+-1.262346608e-05f, -1.262946451e-05f, -1.263544036e-05f, -1.264139364e-05f, -1.264732433e-05f, -1.265323243e-05f, -1.265911793e-05f, -1.266498082e-05f, -1.267082110e-05f, -1.267663875e-05f,
+-1.268243377e-05f, -1.268820615e-05f, -1.269395588e-05f, -1.269968297e-05f, -1.270538739e-05f, -1.271106915e-05f, -1.271672823e-05f, -1.272236463e-05f, -1.272797834e-05f, -1.273356935e-05f,
+-1.273913767e-05f, -1.274468327e-05f, -1.275020615e-05f, -1.275570632e-05f, -1.276118375e-05f, -1.276663844e-05f, -1.277207039e-05f, -1.277747959e-05f, -1.278286604e-05f, -1.278822972e-05f,
+-1.279357062e-05f, -1.279888875e-05f, -1.280418410e-05f, -1.280945666e-05f, -1.281470642e-05f, -1.281993337e-05f, -1.282513752e-05f, -1.283031885e-05f, -1.283547736e-05f, -1.284061304e-05f,
+-1.284572588e-05f, -1.285081589e-05f, -1.285588305e-05f, -1.286092735e-05f, -1.286594880e-05f, -1.287094738e-05f, -1.287592309e-05f, -1.288087592e-05f, -1.288580587e-05f, -1.289071293e-05f,
+-1.289559709e-05f, -1.290045836e-05f, -1.290529672e-05f, -1.291011217e-05f, -1.291490470e-05f, -1.291967430e-05f, -1.292442098e-05f, -1.292914473e-05f, -1.293384553e-05f, -1.293852339e-05f,
+-1.294317830e-05f, -1.294781025e-05f, -1.295241925e-05f, -1.295700527e-05f, -1.296156833e-05f, -1.296610840e-05f, -1.297062550e-05f, -1.297511961e-05f, -1.297959072e-05f, -1.298403884e-05f,
+-1.298846396e-05f, -1.299286607e-05f, -1.299724516e-05f, -1.300160124e-05f, -1.300593430e-05f, -1.301024433e-05f, -1.301453133e-05f, -1.301879530e-05f, -1.302303622e-05f, -1.302725410e-05f,
+-1.303144892e-05f, -1.303562070e-05f, -1.303976941e-05f, -1.304389506e-05f, -1.304799764e-05f, -1.305207715e-05f, -1.305613358e-05f, -1.306016694e-05f, -1.306417720e-05f, -1.306816438e-05f,
+-1.307212846e-05f, -1.307606945e-05f, -1.307998733e-05f, -1.308388211e-05f, -1.308775377e-05f, -1.309160232e-05f, -1.309542776e-05f, -1.309923007e-05f, -1.310300926e-05f, -1.310676531e-05f,
+-1.311049824e-05f, -1.311420802e-05f, -1.311789467e-05f, -1.312155817e-05f, -1.312519852e-05f, -1.312881572e-05f, -1.313240976e-05f, -1.313598065e-05f, -1.313952837e-05f, -1.314305293e-05f,
+-1.314655432e-05f, -1.315003253e-05f, -1.315348757e-05f, -1.315691944e-05f, -1.316032812e-05f, -1.316371361e-05f, -1.316707591e-05f, -1.317041503e-05f, -1.317373095e-05f, -1.317702367e-05f,
+-1.318029319e-05f, -1.318353950e-05f, -1.318676262e-05f, -1.318996252e-05f, -1.319313920e-05f, -1.319629268e-05f, -1.319942293e-05f, -1.320252997e-05f, -1.320561378e-05f, -1.320867437e-05f,
+-1.321171173e-05f, -1.321472586e-05f, -1.321771675e-05f, -1.322068441e-05f, -1.322362883e-05f, -1.322655001e-05f, -1.322944795e-05f, -1.323232264e-05f, -1.323517409e-05f, -1.323800228e-05f,
+-1.324080723e-05f, -1.324358892e-05f, -1.324634735e-05f, -1.324908253e-05f, -1.325179444e-05f, -1.325448310e-05f, -1.325714849e-05f, -1.325979061e-05f, -1.326240947e-05f, -1.326500506e-05f,
+-1.326757738e-05f, -1.327012642e-05f, -1.327265219e-05f, -1.327515468e-05f, -1.327763390e-05f, -1.328008984e-05f, -1.328252249e-05f, -1.328493187e-05f, -1.328731796e-05f, -1.328968076e-05f,
+-1.329202028e-05f, -1.329433651e-05f, -1.329662945e-05f, -1.329889910e-05f, -1.330114546e-05f, -1.330336853e-05f, -1.330556830e-05f, -1.330774478e-05f, -1.330989796e-05f, -1.331202785e-05f,
+-1.331413444e-05f, -1.331621773e-05f, -1.331827772e-05f, -1.332031441e-05f, -1.332232780e-05f, -1.332431788e-05f, -1.332628467e-05f, -1.332822815e-05f, -1.333014833e-05f, -1.333204520e-05f,
+-1.333391877e-05f, -1.333576903e-05f, -1.333759599e-05f, -1.333939964e-05f, -1.334117998e-05f, -1.334293702e-05f, -1.334467074e-05f, -1.334638116e-05f, -1.334806828e-05f, -1.334973208e-05f,
+-1.335137258e-05f, -1.335298977e-05f, -1.335458365e-05f, -1.335615422e-05f, -1.335770148e-05f, -1.335922544e-05f, -1.336072608e-05f, -1.336220342e-05f, -1.336365745e-05f, -1.336508818e-05f,
+-1.336649559e-05f, -1.336787970e-05f, -1.336924050e-05f, -1.337057800e-05f, -1.337189219e-05f, -1.337318307e-05f, -1.337445065e-05f, -1.337569493e-05f, -1.337691590e-05f, -1.337811357e-05f,
+-1.337928793e-05f, -1.338043900e-05f, -1.338156676e-05f, -1.338267122e-05f, -1.338375239e-05f, -1.338481025e-05f, -1.338584482e-05f, -1.338685609e-05f, -1.338784406e-05f, -1.338880874e-05f,
+-1.338975013e-05f, -1.339066822e-05f, -1.339156303e-05f, -1.339243454e-05f, -1.339328276e-05f, -1.339410770e-05f, -1.339490935e-05f, -1.339568771e-05f, -1.339644279e-05f, -1.339717459e-05f,
+-1.339788311e-05f, -1.339856835e-05f, -1.339923031e-05f, -1.339986900e-05f, -1.340048441e-05f, -1.340107654e-05f, -1.340164541e-05f, -1.340219101e-05f, -1.340271334e-05f, -1.340321241e-05f,
+-1.340368821e-05f, -1.340414075e-05f, -1.340457003e-05f, -1.340497605e-05f, -1.340535881e-05f, -1.340571833e-05f, -1.340605459e-05f, -1.340636760e-05f, -1.340665736e-05f, -1.340692388e-05f,
+-1.340716716e-05f, -1.340738719e-05f, -1.340758399e-05f, -1.340775755e-05f, -1.340790788e-05f, -1.340803498e-05f, -1.340813885e-05f, -1.340821949e-05f, -1.340827691e-05f, -1.340831111e-05f,
+-1.340832209e-05f, -1.340830986e-05f, -1.340827442e-05f, -1.340821576e-05f, -1.340813390e-05f, -1.340802883e-05f, -1.340790057e-05f, -1.340774910e-05f, -1.340757444e-05f, -1.340737659e-05f,
+-1.340715555e-05f, -1.340691133e-05f, -1.340664392e-05f, -1.340635333e-05f, -1.340603957e-05f, -1.340570263e-05f, -1.340534253e-05f, -1.340495925e-05f, -1.340455282e-05f, -1.340412322e-05f,
+-1.340367047e-05f, -1.340319457e-05f, -1.340269552e-05f, -1.340217332e-05f, -1.340162798e-05f, -1.340105950e-05f, -1.340046789e-05f, -1.339985315e-05f, -1.339921528e-05f, -1.339855429e-05f,
+-1.339787018e-05f, -1.339716296e-05f, -1.339643262e-05f, -1.339567917e-05f, -1.339490263e-05f, -1.339410298e-05f, -1.339328024e-05f, -1.339243441e-05f, -1.339156549e-05f, -1.339067349e-05f,
+-1.338975841e-05f, -1.338882026e-05f, -1.338785903e-05f, -1.338687475e-05f, -1.338586740e-05f, -1.338483699e-05f, -1.338378354e-05f, -1.338270703e-05f, -1.338160749e-05f, -1.338048490e-05f,
+-1.337933929e-05f, -1.337817064e-05f, -1.337697897e-05f, -1.337576428e-05f, -1.337452658e-05f, -1.337326587e-05f, -1.337198215e-05f, -1.337067543e-05f, -1.336934572e-05f, -1.336799302e-05f,
+-1.336661733e-05f, -1.336521867e-05f, -1.336379703e-05f, -1.336235242e-05f, -1.336088484e-05f, -1.335939431e-05f, -1.335788083e-05f, -1.335634439e-05f, -1.335478502e-05f, -1.335320270e-05f,
+-1.335159746e-05f, -1.334996929e-05f, -1.334831819e-05f, -1.334664419e-05f, -1.334494727e-05f, -1.334322745e-05f, -1.334148473e-05f, -1.333971911e-05f, -1.333793061e-05f, -1.333611923e-05f,
+-1.333428498e-05f, -1.333242785e-05f, -1.333054786e-05f, -1.332864501e-05f, -1.332671931e-05f, -1.332477077e-05f, -1.332279939e-05f, -1.332080517e-05f, -1.331878813e-05f, -1.331674826e-05f,
+-1.331468558e-05f, -1.331260009e-05f, -1.331049180e-05f, -1.330836071e-05f, -1.330620684e-05f, -1.330403018e-05f, -1.330183074e-05f, -1.329960853e-05f, -1.329736356e-05f, -1.329509584e-05f,
+-1.329280536e-05f, -1.329049214e-05f, -1.328815618e-05f, -1.328579749e-05f, -1.328341608e-05f, -1.328101195e-05f, -1.327858511e-05f, -1.327613556e-05f, -1.327366332e-05f, -1.327116840e-05f,
+-1.326865079e-05f, -1.326611050e-05f, -1.326354755e-05f, -1.326096193e-05f, -1.325835366e-05f, -1.325572275e-05f, -1.325306919e-05f, -1.325039301e-05f, -1.324769419e-05f, -1.324497276e-05f,
+-1.324222872e-05f, -1.323946208e-05f, -1.323667284e-05f, -1.323386102e-05f, -1.323102661e-05f, -1.322816964e-05f, -1.322529009e-05f, -1.322238799e-05f, -1.321946334e-05f, -1.321651615e-05f,
+-1.321354642e-05f, -1.321055417e-05f, -1.320753940e-05f, -1.320450211e-05f, -1.320144233e-05f, -1.319836005e-05f, -1.319525528e-05f, -1.319212803e-05f, -1.318897832e-05f, -1.318580614e-05f,
+-1.318261150e-05f, -1.317939442e-05f, -1.317615491e-05f, -1.317289296e-05f, -1.316960859e-05f, -1.316630180e-05f, -1.316297262e-05f, -1.315962103e-05f, -1.315624706e-05f, -1.315285071e-05f,
+-1.314943198e-05f, -1.314599090e-05f, -1.314252746e-05f, -1.313904168e-05f, -1.313553355e-05f, -1.313200311e-05f, -1.312845034e-05f, -1.312487526e-05f, -1.312127788e-05f, -1.311765821e-05f,
+-1.311401625e-05f, -1.311035202e-05f, -1.310666552e-05f, -1.310295677e-05f, -1.309922577e-05f, -1.309547253e-05f, -1.309169706e-05f, -1.308789937e-05f, -1.308407947e-05f, -1.308023737e-05f,
+-1.307637307e-05f, -1.307248659e-05f, -1.306857794e-05f, -1.306464713e-05f, -1.306069415e-05f, -1.305671903e-05f, -1.305272178e-05f, -1.304870240e-05f, -1.304466090e-05f, -1.304059730e-05f,
+-1.303651159e-05f, -1.303240380e-05f, -1.302827393e-05f, -1.302412199e-05f, -1.301994800e-05f, -1.301575195e-05f, -1.301153386e-05f, -1.300729375e-05f, -1.300303161e-05f, -1.299874747e-05f,
+-1.299444133e-05f, -1.299011319e-05f, -1.298576308e-05f, -1.298139100e-05f, -1.297699696e-05f, -1.297258097e-05f, -1.296814305e-05f, -1.296368319e-05f, -1.295920142e-05f, -1.295469774e-05f,
+-1.295017216e-05f, -1.294562470e-05f, -1.294105536e-05f, -1.293646415e-05f, -1.293185109e-05f, -1.292721618e-05f, -1.292255944e-05f, -1.291788088e-05f, -1.291318050e-05f, -1.290845833e-05f,
+-1.290371436e-05f, -1.289894861e-05f, -1.289416109e-05f, -1.288935181e-05f, -1.288452078e-05f, -1.287966802e-05f, -1.287479353e-05f, -1.286989733e-05f, -1.286497942e-05f, -1.286003982e-05f,
+-1.285507853e-05f, -1.285009558e-05f, -1.284509097e-05f, -1.284006471e-05f, -1.283501681e-05f, -1.282994729e-05f, -1.282485615e-05f, -1.281974341e-05f, -1.281460908e-05f, -1.280945316e-05f,
+-1.280427568e-05f, -1.279907665e-05f, -1.279385606e-05f, -1.278861395e-05f, -1.278335031e-05f, -1.277806516e-05f, -1.277275851e-05f, -1.276743037e-05f, -1.276208076e-05f, -1.275670968e-05f,
+-1.275131716e-05f, -1.274590319e-05f, -1.274046779e-05f, -1.273501098e-05f, -1.272953277e-05f, -1.272403316e-05f, -1.271851217e-05f, -1.271296982e-05f, -1.270740611e-05f, -1.270182105e-05f,
+-1.269621467e-05f, -1.269058696e-05f, -1.268493795e-05f, -1.267926764e-05f, -1.267357605e-05f, -1.266786319e-05f, -1.266212907e-05f, -1.265637371e-05f, -1.265059712e-05f, -1.264479930e-05f,
+-1.263898028e-05f, -1.263314006e-05f, -1.262727866e-05f, -1.262139609e-05f, -1.261549236e-05f, -1.260956749e-05f, -1.260362149e-05f, -1.259765437e-05f, -1.259166614e-05f, -1.258565682e-05f,
+-1.257962642e-05f, -1.257357495e-05f, -1.256750243e-05f, -1.256140887e-05f, -1.255529428e-05f, -1.254915867e-05f, -1.254300206e-05f, -1.253682446e-05f, -1.253062589e-05f, -1.252440635e-05f,
+-1.251816587e-05f, -1.251190445e-05f, -1.250562210e-05f, -1.249931885e-05f, -1.249299470e-05f, -1.248664967e-05f, -1.248028377e-05f, -1.247389701e-05f, -1.246748941e-05f, -1.246106099e-05f,
+-1.245461175e-05f, -1.244814170e-05f, -1.244165087e-05f, -1.243513927e-05f, -1.242860691e-05f, -1.242205379e-05f, -1.241547995e-05f, -1.240888539e-05f, -1.240227012e-05f, -1.239563417e-05f,
+-1.238897753e-05f, -1.238230023e-05f, -1.237560229e-05f, -1.236888370e-05f, -1.236214450e-05f, -1.235538469e-05f, -1.234860429e-05f, -1.234180331e-05f, -1.233498177e-05f, -1.232813967e-05f,
+-1.232127704e-05f, -1.231439389e-05f, -1.230749023e-05f, -1.230056608e-05f, -1.229362145e-05f, -1.228665635e-05f, -1.227967081e-05f, -1.227266483e-05f, -1.226563843e-05f, -1.225859163e-05f,
+-1.225152443e-05f, -1.224443686e-05f, -1.223732893e-05f, -1.223020065e-05f, -1.222305203e-05f, -1.221588310e-05f, -1.220869387e-05f, -1.220148435e-05f, -1.219425455e-05f, -1.218700450e-05f,
+-1.217973421e-05f, -1.217244368e-05f, -1.216513295e-05f, -1.215780201e-05f, -1.215045090e-05f, -1.214307961e-05f, -1.213568817e-05f, -1.212827660e-05f, -1.212084490e-05f, -1.211339309e-05f,
+-1.210592120e-05f, -1.209842923e-05f, -1.209091719e-05f, -1.208338511e-05f, -1.207583300e-05f, -1.206826088e-05f, -1.206066875e-05f, -1.205305665e-05f, -1.204542457e-05f, -1.203777254e-05f,
+-1.203010057e-05f, -1.202240869e-05f, -1.201469689e-05f, -1.200696521e-05f, -1.199921365e-05f, -1.199144224e-05f, -1.198365098e-05f, -1.197583989e-05f, -1.196800900e-05f, -1.196015830e-05f,
+-1.195228783e-05f, -1.194439760e-05f, -1.193648762e-05f, -1.192855790e-05f, -1.192060848e-05f, -1.191263935e-05f, -1.190465054e-05f, -1.189664206e-05f, -1.188861394e-05f, -1.188056618e-05f,
+-1.187249880e-05f, -1.186441182e-05f, -1.185630525e-05f, -1.184817912e-05f, -1.184003343e-05f, -1.183186820e-05f, -1.182368346e-05f, -1.181547921e-05f, -1.180725548e-05f, -1.179901227e-05f,
+-1.179074962e-05f, -1.178246752e-05f, -1.177416601e-05f, -1.176584509e-05f, -1.175750478e-05f, -1.174914510e-05f, -1.174076607e-05f, -1.173236771e-05f, -1.172395002e-05f, -1.171551303e-05f,
+-1.170705676e-05f, -1.169858121e-05f, -1.169008642e-05f, -1.168157238e-05f, -1.167303913e-05f, -1.166448668e-05f, -1.165591505e-05f, -1.164732424e-05f, -1.163871429e-05f, -1.163008521e-05f,
+-1.162143701e-05f, -1.161276971e-05f, -1.160408333e-05f, -1.159537789e-05f, -1.158665340e-05f, -1.157790988e-05f, -1.156914735e-05f, -1.156036582e-05f, -1.155156532e-05f, -1.154274586e-05f,
+-1.153390746e-05f, -1.152505014e-05f, -1.151617391e-05f, -1.150727879e-05f, -1.149836479e-05f, -1.148943195e-05f, -1.148048027e-05f, -1.147150977e-05f, -1.146252047e-05f, -1.145351238e-05f,
+-1.144448554e-05f, -1.143543994e-05f, -1.142637562e-05f, -1.141729259e-05f, -1.140819086e-05f, -1.139907046e-05f, -1.138993140e-05f, -1.138077370e-05f, -1.137159738e-05f, -1.136240246e-05f,
+-1.135318895e-05f, -1.134395687e-05f, -1.133470625e-05f, -1.132543710e-05f, -1.131614943e-05f, -1.130684327e-05f, -1.129751864e-05f, -1.128817555e-05f, -1.127881402e-05f, -1.126943407e-05f,
+-1.126003572e-05f, -1.125061898e-05f, -1.124118388e-05f, -1.123173043e-05f, -1.122225866e-05f, -1.121276857e-05f, -1.120326020e-05f, -1.119373355e-05f, -1.118418865e-05f, -1.117462551e-05f,
+-1.116504416e-05f, -1.115544461e-05f, -1.114582689e-05f, -1.113619100e-05f, -1.112653697e-05f, -1.111686482e-05f, -1.110717457e-05f, -1.109746623e-05f, -1.108773983e-05f, -1.107799538e-05f,
+-1.106823291e-05f, -1.105845242e-05f, -1.104865395e-05f, -1.103883751e-05f, -1.102900311e-05f, -1.101915079e-05f, -1.100928055e-05f, -1.099939242e-05f, -1.098948641e-05f, -1.097956255e-05f,
+-1.096962086e-05f, -1.095966135e-05f, -1.094968404e-05f, -1.093968895e-05f, -1.092967611e-05f, -1.091964553e-05f, -1.090959723e-05f, -1.089953123e-05f, -1.088944755e-05f, -1.087934620e-05f,
+-1.086922722e-05f, -1.085909062e-05f, -1.084893641e-05f, -1.083876463e-05f, -1.082857528e-05f, -1.081836839e-05f, -1.080814397e-05f, -1.079790206e-05f, -1.078764266e-05f, -1.077736579e-05f,
+-1.076707148e-05f, -1.075675975e-05f, -1.074643062e-05f, -1.073608410e-05f, -1.072572022e-05f, -1.071533899e-05f, -1.070494045e-05f, -1.069452459e-05f, -1.068409146e-05f, -1.067364106e-05f,
+-1.066317341e-05f, -1.065268855e-05f, -1.064218648e-05f, -1.063166723e-05f, -1.062113081e-05f, -1.061057726e-05f, -1.060000658e-05f, -1.058941880e-05f, -1.057881394e-05f, -1.056819202e-05f,
+-1.055755306e-05f, -1.054689708e-05f, -1.053622410e-05f, -1.052553414e-05f, -1.051482722e-05f, -1.050410337e-05f, -1.049336259e-05f, -1.048260493e-05f, -1.047183038e-05f, -1.046103898e-05f,
+-1.045023075e-05f, -1.043940570e-05f, -1.042856385e-05f, -1.041770524e-05f, -1.040682987e-05f, -1.039593778e-05f, -1.038502897e-05f, -1.037410347e-05f, -1.036316131e-05f, -1.035220250e-05f,
+-1.034122706e-05f, -1.033023502e-05f, -1.031922639e-05f, -1.030820120e-05f, -1.029715947e-05f, -1.028610122e-05f, -1.027502646e-05f, -1.026393523e-05f, -1.025282754e-05f, -1.024170341e-05f,
+-1.023056287e-05f, -1.021940594e-05f, -1.020823263e-05f, -1.019704297e-05f, -1.018583698e-05f, -1.017461468e-05f, -1.016337609e-05f, -1.015212124e-05f, -1.014085014e-05f, -1.012956282e-05f,
+-1.011825930e-05f, -1.010693960e-05f, -1.009560374e-05f, -1.008425174e-05f, -1.007288362e-05f, -1.006149942e-05f, -1.005009914e-05f, -1.003868281e-05f, -1.002725045e-05f, -1.001580208e-05f,
+-1.000433773e-05f, -9.992857410e-06f, -9.981361151e-06f, -9.969848972e-06f, -9.958320895e-06f, -9.946776941e-06f, -9.935217132e-06f, -9.923641491e-06f, -9.912050039e-06f, -9.900442797e-06f,
+-9.888819789e-06f, -9.877181036e-06f, -9.865526560e-06f, -9.853856383e-06f, -9.842170528e-06f, -9.830469015e-06f, -9.818751868e-06f, -9.807019109e-06f, -9.795270759e-06f, -9.783506842e-06f,
+-9.771727378e-06f, -9.759932391e-06f, -9.748121903e-06f, -9.736295935e-06f, -9.724454511e-06f, -9.712597652e-06f, -9.700725382e-06f, -9.688837722e-06f, -9.676934694e-06f, -9.665016322e-06f,
+-9.653082628e-06f, -9.641133634e-06f, -9.629169362e-06f, -9.617189836e-06f, -9.605195078e-06f, -9.593185110e-06f, -9.581159955e-06f, -9.569119635e-06f, -9.557064174e-06f, -9.544993594e-06f,
+-9.532907917e-06f, -9.520807167e-06f, -9.508691366e-06f, -9.496560537e-06f, -9.484414702e-06f, -9.472253885e-06f, -9.460078108e-06f, -9.447887395e-06f, -9.435681767e-06f, -9.423461249e-06f,
+-9.411225862e-06f, -9.398975631e-06f, -9.386710577e-06f, -9.374430724e-06f, -9.362136095e-06f, -9.349826713e-06f, -9.337502601e-06f, -9.325163782e-06f, -9.312810279e-06f, -9.300442116e-06f,
+-9.288059315e-06f, -9.275661900e-06f, -9.263249894e-06f, -9.250823320e-06f, -9.238382201e-06f, -9.225926561e-06f, -9.213456423e-06f, -9.200971810e-06f, -9.188472746e-06f, -9.175959253e-06f,
+-9.163431356e-06f, -9.150889078e-06f, -9.138332442e-06f, -9.125761472e-06f, -9.113176191e-06f, -9.100576623e-06f, -9.087962790e-06f, -9.075334718e-06f, -9.062692428e-06f, -9.050035946e-06f,
+-9.037365294e-06f, -9.024680496e-06f, -9.011981575e-06f, -8.999268556e-06f, -8.986541463e-06f, -8.973800318e-06f, -8.961045145e-06f, -8.948275969e-06f, -8.935492813e-06f, -8.922695700e-06f,
+-8.909884656e-06f, -8.897059703e-06f, -8.884220865e-06f, -8.871368167e-06f, -8.858501631e-06f, -8.845621283e-06f, -8.832727146e-06f, -8.819819244e-06f, -8.806897601e-06f, -8.793962241e-06f,
+-8.781013188e-06f, -8.768050467e-06f, -8.755074100e-06f, -8.742084113e-06f, -8.729080529e-06f, -8.716063373e-06f, -8.703032668e-06f, -8.689988439e-06f, -8.676930711e-06f, -8.663859507e-06f,
+-8.650774851e-06f, -8.637676768e-06f, -8.624565282e-06f, -8.611440417e-06f, -8.598302199e-06f, -8.585150650e-06f, -8.571985795e-06f, -8.558807660e-06f, -8.545616268e-06f, -8.532411643e-06f,
+-8.519193810e-06f, -8.505962794e-06f, -8.492718619e-06f, -8.479461309e-06f, -8.466190889e-06f, -8.452907384e-06f, -8.439610818e-06f, -8.426301216e-06f, -8.412978602e-06f, -8.399643001e-06f,
+-8.386294438e-06f, -8.372932936e-06f, -8.359558522e-06f, -8.346171219e-06f, -8.332771053e-06f, -8.319358048e-06f, -8.305932228e-06f, -8.292493619e-06f, -8.279042246e-06f, -8.265578133e-06f,
+-8.252101304e-06f, -8.238611786e-06f, -8.225109602e-06f, -8.211594778e-06f, -8.198067339e-06f, -8.184527309e-06f, -8.170974714e-06f, -8.157409578e-06f, -8.143831926e-06f, -8.130241784e-06f,
+-8.116639176e-06f, -8.103024128e-06f, -8.089396664e-06f, -8.075756810e-06f, -8.062104590e-06f, -8.048440030e-06f, -8.034763155e-06f, -8.021073991e-06f, -8.007372561e-06f, -7.993658892e-06f,
+-7.979933009e-06f, -7.966194937e-06f, -7.952444700e-06f, -7.938682326e-06f, -7.924907837e-06f, -7.911121261e-06f, -7.897322622e-06f, -7.883511946e-06f, -7.869689258e-06f, -7.855854583e-06f,
+-7.842007946e-06f, -7.828149374e-06f, -7.814278892e-06f, -7.800396524e-06f, -7.786502297e-06f, -7.772596236e-06f, -7.758678366e-06f, -7.744748713e-06f, -7.730807302e-06f, -7.716854160e-06f,
+-7.702889311e-06f, -7.688912781e-06f, -7.674924596e-06f, -7.660924782e-06f, -7.646913363e-06f, -7.632890366e-06f, -7.618855816e-06f, -7.604809740e-06f, -7.590752162e-06f, -7.576683108e-06f,
+-7.562602604e-06f, -7.548510677e-06f, -7.534407351e-06f, -7.520292652e-06f, -7.506166607e-06f, -7.492029240e-06f, -7.477880579e-06f, -7.463720648e-06f, -7.449549474e-06f, -7.435367082e-06f,
+-7.421173499e-06f, -7.406968750e-06f, -7.392752861e-06f, -7.378525858e-06f, -7.364287767e-06f, -7.350038615e-06f, -7.335778426e-06f, -7.321507228e-06f, -7.307225046e-06f, -7.292931906e-06f,
+-7.278627834e-06f, -7.264312857e-06f, -7.249987000e-06f, -7.235650289e-06f, -7.221302752e-06f, -7.206944412e-06f, -7.192575298e-06f, -7.178195435e-06f, -7.163804849e-06f, -7.149403567e-06f,
+-7.134991615e-06f, -7.120569018e-06f, -7.106135803e-06f, -7.091691997e-06f, -7.077237626e-06f, -7.062772716e-06f, -7.048297293e-06f, -7.033811383e-06f, -7.019315014e-06f, -7.004808211e-06f,
+-6.990291001e-06f, -6.975763409e-06f, -6.961225464e-06f, -6.946677190e-06f, -6.932118614e-06f, -6.917549763e-06f, -6.902970664e-06f, -6.888381342e-06f, -6.873781824e-06f, -6.859172137e-06f,
+-6.844552307e-06f, -6.829922361e-06f, -6.815282325e-06f, -6.800632226e-06f, -6.785972090e-06f, -6.771301945e-06f, -6.756621815e-06f, -6.741931730e-06f, -6.727231713e-06f, -6.712521794e-06f,
+-6.697801997e-06f, -6.683072351e-06f, -6.668332880e-06f, -6.653583613e-06f, -6.638824576e-06f, -6.624055796e-06f, -6.609277298e-06f, -6.594489111e-06f, -6.579691261e-06f, -6.564883775e-06f,
+-6.550066678e-06f, -6.535240000e-06f, -6.520403765e-06f, -6.505558001e-06f, -6.490702735e-06f, -6.475837994e-06f, -6.460963804e-06f, -6.446080192e-06f, -6.431187186e-06f, -6.416284812e-06f,
+-6.401373097e-06f, -6.386452068e-06f, -6.371521752e-06f, -6.356582177e-06f, -6.341633368e-06f, -6.326675353e-06f, -6.311708159e-06f, -6.296731813e-06f, -6.281746342e-06f, -6.266751773e-06f,
+-6.251748134e-06f, -6.236735450e-06f, -6.221713750e-06f, -6.206683060e-06f, -6.191643407e-06f, -6.176594819e-06f, -6.161537323e-06f, -6.146470946e-06f, -6.131395714e-06f, -6.116311656e-06f,
+-6.101218798e-06f, -6.086117168e-06f, -6.071006792e-06f, -6.055887699e-06f, -6.040759914e-06f, -6.025623466e-06f, -6.010478382e-06f, -5.995324688e-06f, -5.980162413e-06f, -5.964991583e-06f,
+-5.949812226e-06f, -5.934624369e-06f, -5.919428039e-06f, -5.904223265e-06f, -5.889010072e-06f, -5.873788488e-06f, -5.858558542e-06f, -5.843320260e-06f, -5.828073669e-06f, -5.812818797e-06f,
+-5.797555671e-06f, -5.782284320e-06f, -5.767004769e-06f, -5.751717047e-06f, -5.736421182e-06f, -5.721117199e-06f, -5.705805128e-06f, -5.690484996e-06f, -5.675156829e-06f, -5.659820656e-06f,
+-5.644476504e-06f, -5.629124401e-06f, -5.613764373e-06f, -5.598396450e-06f, -5.583020657e-06f, -5.567637024e-06f, -5.552245577e-06f, -5.536846343e-06f, -5.521439352e-06f, -5.506024629e-06f,
+-5.490602204e-06f, -5.475172102e-06f, -5.459734353e-06f, -5.444288984e-06f, -5.428836022e-06f, -5.413375495e-06f, -5.397907431e-06f, -5.382431857e-06f, -5.366948801e-06f, -5.351458291e-06f,
+-5.335960355e-06f, -5.320455020e-06f, -5.304942314e-06f, -5.289422265e-06f, -5.273894900e-06f, -5.258360248e-06f, -5.242818336e-06f, -5.227269192e-06f, -5.211712843e-06f, -5.196149318e-06f,
+-5.180578644e-06f, -5.165000849e-06f, -5.149415961e-06f, -5.133824008e-06f, -5.118225017e-06f, -5.102619017e-06f, -5.087006035e-06f, -5.071386100e-06f, -5.055759238e-06f, -5.040125479e-06f,
+-5.024484849e-06f, -5.008837378e-06f, -4.993183092e-06f, -4.977522019e-06f, -4.961854189e-06f, -4.946179628e-06f, -4.930498364e-06f, -4.914810426e-06f, -4.899115841e-06f, -4.883414637e-06f,
+-4.867706843e-06f, -4.851992487e-06f, -4.836271596e-06f, -4.820544198e-06f, -4.804810321e-06f, -4.789069994e-06f, -4.773323245e-06f, -4.757570101e-06f, -4.741810590e-06f, -4.726044741e-06f,
+-4.710272582e-06f, -4.694494141e-06f, -4.678709445e-06f, -4.662918524e-06f, -4.647121404e-06f, -4.631318114e-06f, -4.615508683e-06f, -4.599693138e-06f, -4.583871508e-06f, -4.568043820e-06f,
+-4.552210102e-06f, -4.536370384e-06f, -4.520524693e-06f, -4.504673057e-06f, -4.488815504e-06f, -4.472952063e-06f, -4.457082762e-06f, -4.441207628e-06f, -4.425326691e-06f, -4.409439978e-06f,
+-4.393547517e-06f, -4.377649337e-06f, -4.361745466e-06f, -4.345835932e-06f, -4.329920764e-06f, -4.313999989e-06f, -4.298073636e-06f, -4.282141733e-06f, -4.266204309e-06f, -4.250261391e-06f,
+-4.234313009e-06f, -4.218359189e-06f, -4.202399961e-06f, -4.186435353e-06f, -4.170465392e-06f, -4.154490109e-06f, -4.138509529e-06f, -4.122523683e-06f, -4.106532598e-06f, -4.090536303e-06f,
+-4.074534826e-06f, -4.058528195e-06f, -4.042516439e-06f, -4.026499586e-06f, -4.010477664e-06f, -3.994450702e-06f, -3.978418727e-06f, -3.962381770e-06f, -3.946339857e-06f, -3.930293017e-06f,
+-3.914241279e-06f, -3.898184671e-06f, -3.882123221e-06f, -3.866056958e-06f, -3.849985910e-06f, -3.833910106e-06f, -3.817829574e-06f, -3.801744342e-06f, -3.785654439e-06f, -3.769559893e-06f,
+-3.753460733e-06f, -3.737356987e-06f, -3.721248683e-06f, -3.705135851e-06f, -3.689018518e-06f, -3.672896713e-06f, -3.656770464e-06f, -3.640639800e-06f, -3.624504750e-06f, -3.608365341e-06f,
+-3.592221602e-06f, -3.576073563e-06f, -3.559921250e-06f, -3.543764693e-06f, -3.527603921e-06f, -3.511438961e-06f, -3.495269842e-06f, -3.479096594e-06f, -3.462919243e-06f, -3.446737819e-06f,
+-3.430552350e-06f, -3.414362865e-06f, -3.398169393e-06f, -3.381971961e-06f, -3.365770599e-06f, -3.349565334e-06f, -3.333356196e-06f, -3.317143213e-06f, -3.300926413e-06f, -3.284705825e-06f,
+-3.268481478e-06f, -3.252253401e-06f, -3.236021621e-06f, -3.219786167e-06f, -3.203547068e-06f, -3.187304352e-06f, -3.171058048e-06f, -3.154808185e-06f, -3.138554791e-06f, -3.122297895e-06f,
+-3.106037525e-06f, -3.089773710e-06f, -3.073506478e-06f, -3.057235858e-06f, -3.040961879e-06f, -3.024684569e-06f, -3.008403957e-06f, -2.992120072e-06f, -2.975832941e-06f, -2.959542594e-06f,
+-2.943249059e-06f, -2.926952365e-06f, -2.910652540e-06f, -2.894349613e-06f, -2.878043613e-06f, -2.861734568e-06f, -2.845422507e-06f, -2.829107459e-06f, -2.812789451e-06f, -2.796468514e-06f,
+-2.780144674e-06f, -2.763817962e-06f, -2.747488405e-06f, -2.731156032e-06f, -2.714820873e-06f, -2.698482954e-06f, -2.682142306e-06f, -2.665798957e-06f, -2.649452935e-06f, -2.633104268e-06f,
+-2.616752987e-06f, -2.600399119e-06f, -2.584042693e-06f, -2.567683737e-06f, -2.551322280e-06f, -2.534958352e-06f, -2.518591979e-06f, -2.502223192e-06f, -2.485852019e-06f, -2.469478488e-06f,
+-2.453102628e-06f, -2.436724468e-06f, -2.420344036e-06f, -2.403961361e-06f, -2.387576472e-06f, -2.371189397e-06f, -2.354800165e-06f, -2.338408805e-06f, -2.322015345e-06f, -2.305619813e-06f,
+-2.289222240e-06f, -2.272822652e-06f, -2.256421079e-06f, -2.240017550e-06f, -2.223612093e-06f, -2.207204737e-06f, -2.190795510e-06f, -2.174384441e-06f, -2.157971559e-06f, -2.141556892e-06f,
+-2.125140470e-06f, -2.108722320e-06f, -2.092302471e-06f, -2.075880952e-06f, -2.059457792e-06f, -2.043033019e-06f, -2.026606662e-06f, -2.010178750e-06f, -1.993749311e-06f, -1.977318373e-06f,
+-1.960885966e-06f, -1.944452119e-06f, -1.928016859e-06f, -1.911580215e-06f, -1.895142216e-06f, -1.878702892e-06f, -1.862262269e-06f, -1.845820377e-06f, -1.829377245e-06f, -1.812932902e-06f,
+-1.796487375e-06f, -1.780040693e-06f, -1.763592886e-06f, -1.747143981e-06f, -1.730694008e-06f, -1.714242995e-06f, -1.697790970e-06f, -1.681337963e-06f, -1.664884001e-06f, -1.648429114e-06f,
+-1.631973330e-06f, -1.615516678e-06f, -1.599059186e-06f, -1.582600883e-06f, -1.566141798e-06f, -1.549681958e-06f, -1.533221394e-06f, -1.516760132e-06f, -1.500298203e-06f, -1.483835634e-06f,
+-1.467372455e-06f, -1.450908693e-06f, -1.434444377e-06f, -1.417979537e-06f, -1.401514199e-06f, -1.385048394e-06f, -1.368582150e-06f, -1.352115495e-06f, -1.335648457e-06f, -1.319181066e-06f,
+-1.302713350e-06f, -1.286245338e-06f, -1.269777058e-06f, -1.253308538e-06f, -1.236839807e-06f, -1.220370894e-06f, -1.203901828e-06f, -1.187432636e-06f, -1.170963348e-06f, -1.154493992e-06f,
+-1.138024596e-06f, -1.121555189e-06f, -1.105085800e-06f, -1.088616457e-06f, -1.072147189e-06f, -1.055678023e-06f, -1.039208990e-06f, -1.022740116e-06f, -1.006271431e-06f, -9.898029639e-07f,
+-9.733347419e-07f, -9.568667942e-07f, -9.403991491e-07f, -9.239318353e-07f, -9.074648811e-07f, -8.909983150e-07f, -8.745321656e-07f, -8.580664613e-07f, -8.416012306e-07f, -8.251365019e-07f,
+-8.086723038e-07f, -7.922086646e-07f, -7.757456128e-07f, -7.592831769e-07f, -7.428213854e-07f, -7.263602666e-07f, -7.098998490e-07f, -6.934401610e-07f, -6.769812311e-07f, -6.605230877e-07f,
+-6.440657592e-07f, -6.276092740e-07f, -6.111536606e-07f, -5.946989472e-07f, -5.782451624e-07f, -5.617923345e-07f, -5.453404920e-07f, -5.288896631e-07f, -5.124398763e-07f, -4.959911599e-07f,
+-4.795435423e-07f, -4.630970519e-07f, -4.466517171e-07f, -4.302075661e-07f, -4.137646274e-07f, -3.973229293e-07f, -3.808825000e-07f, -3.644433680e-07f, -3.480055616e-07f, -3.315691090e-07f,
+-3.151340387e-07f, -2.987003788e-07f, -2.822681577e-07f, -2.658374038e-07f, -2.494081452e-07f, -2.329804104e-07f, -2.165542274e-07f, -2.001296247e-07f, -1.837066305e-07f, -1.672852730e-07f,
+-1.508655806e-07f, -1.344475813e-07f, -1.180313036e-07f, -1.016167756e-07f, -8.520402556e-08f, -6.879308169e-08f, -5.238397220e-08f, -3.597672531e-08f, -1.957136923e-08f, -3.167932140e-09f,
+1.323355776e-08f, 2.963307230e-08f, 4.603058330e-08f, 6.242606259e-08f, 7.881948200e-08f, 9.521081339e-08f, 1.116000286e-07f, 1.279870995e-07f, 1.443719980e-07f, 1.607546958e-07f,
+1.771351650e-07f, 1.935133774e-07f, 2.098893049e-07f, 2.262629193e-07f, 2.426341927e-07f, 2.590030969e-07f, 2.753696038e-07f, 2.917336854e-07f, 3.080953136e-07f, 3.244544604e-07f,
+3.408110977e-07f, 3.571651975e-07f, 3.735167317e-07f, 3.898656724e-07f, 4.062119915e-07f, 4.225556610e-07f, 4.388966529e-07f, 4.552349392e-07f, 4.715704919e-07f, 4.879032832e-07f,
+5.042332849e-07f, 5.205604691e-07f, 5.368848080e-07f, 5.532062735e-07f, 5.695248377e-07f, 5.858404727e-07f, 6.021531506e-07f, 6.184628435e-07f, 6.347695234e-07f, 6.510731625e-07f,
+6.673737329e-07f, 6.836712067e-07f, 6.999655561e-07f, 7.162567532e-07f, 7.325447701e-07f, 7.488295791e-07f, 7.651111522e-07f, 7.813894617e-07f, 7.976644797e-07f, 8.139361785e-07f,
+8.302045303e-07f, 8.464695072e-07f, 8.627310815e-07f, 8.789892255e-07f, 8.952439113e-07f, 9.114951112e-07f, 9.277427976e-07f, 9.439869426e-07f, 9.602275185e-07f, 9.764644977e-07f,
+9.926978523e-07f, 1.008927555e-06f, 1.025153578e-06f, 1.041375893e-06f, 1.057594473e-06f, 1.073809290e-06f, 1.090020316e-06f, 1.106227525e-06f, 1.122430888e-06f, 1.138630377e-06f,
+1.154825966e-06f, 1.171017626e-06f, 1.187205330e-06f, 1.203389050e-06f, 1.219568759e-06f, 1.235744429e-06f, 1.251916033e-06f, 1.268083543e-06f, 1.284246931e-06f, 1.300406171e-06f,
+1.316561234e-06f, 1.332712094e-06f, 1.348858721e-06f, 1.365001091e-06f, 1.381139173e-06f, 1.397272942e-06f, 1.413402370e-06f, 1.429527429e-06f, 1.445648093e-06f, 1.461764332e-06f,
+1.477876121e-06f, 1.493983432e-06f, 1.510086237e-06f, 1.526184509e-06f, 1.542278221e-06f, 1.558367346e-06f, 1.574451855e-06f, 1.590531722e-06f, 1.606606920e-06f, 1.622677420e-06f,
+1.638743197e-06f, 1.654804222e-06f, 1.670860468e-06f, 1.686911909e-06f, 1.702958516e-06f, 1.719000263e-06f, 1.735037123e-06f, 1.751069067e-06f, 1.767096070e-06f, 1.783118103e-06f,
+1.799135141e-06f, 1.815147154e-06f, 1.831154117e-06f, 1.847156003e-06f, 1.863152783e-06f, 1.879144432e-06f, 1.895130921e-06f, 1.911112225e-06f, 1.927088315e-06f, 1.943059165e-06f,
+1.959024747e-06f, 1.974985036e-06f, 1.990940003e-06f, 2.006889621e-06f, 2.022833865e-06f, 2.038772705e-06f, 2.054706117e-06f, 2.070634072e-06f, 2.086556544e-06f, 2.102473507e-06f,
+2.118384931e-06f, 2.134290792e-06f, 2.150191063e-06f, 2.166085715e-06f, 2.181974723e-06f, 2.197858059e-06f, 2.213735697e-06f, 2.229607610e-06f, 2.245473771e-06f, 2.261334154e-06f,
+2.277188731e-06f, 2.293037475e-06f, 2.308880361e-06f, 2.324717360e-06f, 2.340548447e-06f, 2.356373595e-06f, 2.372192777e-06f, 2.388005966e-06f, 2.403813136e-06f, 2.419614260e-06f,
+2.435409312e-06f, 2.451198263e-06f, 2.466981089e-06f, 2.482757763e-06f, 2.498528257e-06f, 2.514292546e-06f, 2.530050602e-06f, 2.545802400e-06f, 2.561547912e-06f, 2.577287112e-06f,
+2.593019974e-06f, 2.608746470e-06f, 2.624466576e-06f, 2.640180263e-06f, 2.655887506e-06f, 2.671588279e-06f, 2.687282554e-06f, 2.702970305e-06f, 2.718651507e-06f, 2.734326132e-06f,
+2.749994154e-06f, 2.765655547e-06f, 2.781310285e-06f, 2.796958340e-06f, 2.812599688e-06f, 2.828234301e-06f, 2.843862154e-06f, 2.859483219e-06f, 2.875097472e-06f, 2.890704884e-06f,
+2.906305431e-06f, 2.921899087e-06f, 2.937485824e-06f, 2.953065617e-06f, 2.968638439e-06f, 2.984204265e-06f, 2.999763068e-06f, 3.015314822e-06f, 3.030859502e-06f, 3.046397080e-06f,
+3.061927531e-06f, 3.077450829e-06f, 3.092966948e-06f, 3.108475862e-06f, 3.123977544e-06f, 3.139471970e-06f, 3.154959112e-06f, 3.170438945e-06f, 3.185911442e-06f, 3.201376579e-06f,
+3.216834329e-06f, 3.232284666e-06f, 3.247727564e-06f, 3.263162998e-06f, 3.278590941e-06f, 3.294011368e-06f, 3.309424253e-06f, 3.324829570e-06f, 3.340227293e-06f, 3.355617397e-06f,
+3.370999856e-06f, 3.386374643e-06f, 3.401741734e-06f, 3.417101103e-06f, 3.432452724e-06f, 3.447796570e-06f, 3.463132618e-06f, 3.478460840e-06f, 3.493781212e-06f, 3.509093708e-06f,
+3.524398302e-06f, 3.539694968e-06f, 3.554983681e-06f, 3.570264416e-06f, 3.585537147e-06f, 3.600801848e-06f, 3.616058495e-06f, 3.631307060e-06f, 3.646547520e-06f, 3.661779849e-06f,
+3.677004020e-06f, 3.692220010e-06f, 3.707427792e-06f, 3.722627341e-06f, 3.737818632e-06f, 3.753001639e-06f, 3.768176337e-06f, 3.783342701e-06f, 3.798500705e-06f, 3.813650325e-06f,
+3.828791534e-06f, 3.843924308e-06f, 3.859048622e-06f, 3.874164450e-06f, 3.889271768e-06f, 3.904370549e-06f, 3.919460769e-06f, 3.934542403e-06f, 3.949615426e-06f, 3.964679812e-06f,
+3.979735537e-06f, 3.994782575e-06f, 4.009820901e-06f, 4.024850491e-06f, 4.039871319e-06f, 4.054883361e-06f, 4.069886591e-06f, 4.084880985e-06f, 4.099866517e-06f, 4.114843163e-06f,
+4.129810898e-06f, 4.144769696e-06f, 4.159719534e-06f, 4.174660386e-06f, 4.189592228e-06f, 4.204515034e-06f, 4.219428780e-06f, 4.234333441e-06f, 4.249228992e-06f, 4.264115410e-06f,
+4.278992668e-06f, 4.293860742e-06f, 4.308719608e-06f, 4.323569242e-06f, 4.338409617e-06f, 4.353240710e-06f, 4.368062497e-06f, 4.382874951e-06f, 4.397678050e-06f, 4.412471769e-06f,
+4.427256083e-06f, 4.442030967e-06f, 4.456796397e-06f, 4.471552348e-06f, 4.486298797e-06f, 4.501035719e-06f, 4.515763089e-06f, 4.530480883e-06f, 4.545189077e-06f, 4.559887645e-06f,
+4.574576565e-06f, 4.589255812e-06f, 4.603925361e-06f, 4.618585188e-06f, 4.633235269e-06f, 4.647875580e-06f, 4.662506096e-06f, 4.677126793e-06f, 4.691737648e-06f, 4.706338636e-06f,
+4.720929733e-06f, 4.735510914e-06f, 4.750082156e-06f, 4.764643435e-06f, 4.779194726e-06f, 4.793736007e-06f, 4.808267251e-06f, 4.822788437e-06f, 4.837299539e-06f, 4.851800533e-06f,
+4.866291397e-06f, 4.880772106e-06f, 4.895242635e-06f, 4.909702962e-06f, 4.924153062e-06f, 4.938592912e-06f, 4.953022488e-06f, 4.967441765e-06f, 4.981850721e-06f, 4.996249332e-06f,
+5.010637573e-06f, 5.025015421e-06f, 5.039382853e-06f, 5.053739844e-06f, 5.068086372e-06f, 5.082422412e-06f, 5.096747941e-06f, 5.111062936e-06f, 5.125367373e-06f, 5.139661228e-06f,
+5.153944477e-06f, 5.168217099e-06f, 5.182479068e-06f, 5.196730361e-06f, 5.210970956e-06f, 5.225200828e-06f, 5.239419955e-06f, 5.253628312e-06f, 5.267825878e-06f, 5.282012627e-06f,
+5.296188538e-06f, 5.310353586e-06f, 5.324507749e-06f, 5.338651003e-06f, 5.352783325e-06f, 5.366904692e-06f, 5.381015081e-06f, 5.395114469e-06f, 5.409202832e-06f, 5.423280148e-06f,
+5.437346392e-06f, 5.451401544e-06f, 5.465445578e-06f, 5.479478473e-06f, 5.493500205e-06f, 5.507510751e-06f, 5.521510089e-06f, 5.535498195e-06f, 5.549475047e-06f, 5.563440622e-06f,
+5.577394896e-06f, 5.591337848e-06f, 5.605269454e-06f, 5.619189691e-06f, 5.633098537e-06f, 5.646995969e-06f, 5.660881964e-06f, 5.674756500e-06f, 5.688619554e-06f, 5.702471102e-06f,
+5.716311124e-06f, 5.730139596e-06f, 5.743956495e-06f, 5.757761799e-06f, 5.771555485e-06f, 5.785337531e-06f, 5.799107915e-06f, 5.812866613e-06f, 5.826613604e-06f, 5.840348865e-06f,
+5.854072373e-06f, 5.867784107e-06f, 5.881484044e-06f, 5.895172162e-06f, 5.908848437e-06f, 5.922512849e-06f, 5.936165375e-06f, 5.949805992e-06f, 5.963434678e-06f, 5.977051412e-06f,
+5.990656170e-06f, 6.004248931e-06f, 6.017829673e-06f, 6.031398374e-06f, 6.044955011e-06f, 6.058499563e-06f, 6.072032007e-06f, 6.085552322e-06f, 6.099060485e-06f, 6.112556475e-06f,
+6.126040270e-06f, 6.139511847e-06f, 6.152971185e-06f, 6.166418262e-06f, 6.179853056e-06f, 6.193275546e-06f, 6.206685709e-06f, 6.220083524e-06f, 6.233468969e-06f, 6.246842023e-06f,
+6.260202663e-06f, 6.273550868e-06f, 6.286886617e-06f, 6.300209887e-06f, 6.313520658e-06f, 6.326818907e-06f, 6.340104613e-06f, 6.353377755e-06f, 6.366638310e-06f, 6.379886259e-06f,
+6.393121578e-06f, 6.406344247e-06f, 6.419554245e-06f, 6.432751549e-06f, 6.445936140e-06f, 6.459107994e-06f, 6.472267091e-06f, 6.485413410e-06f, 6.498546930e-06f, 6.511667628e-06f,
+6.524775485e-06f, 6.537870479e-06f, 6.550952588e-06f, 6.564021792e-06f, 6.577078069e-06f, 6.590121399e-06f, 6.603151760e-06f, 6.616169132e-06f, 6.629173492e-06f, 6.642164822e-06f,
+6.655143098e-06f, 6.668108301e-06f, 6.681060410e-06f, 6.693999403e-06f, 6.706925260e-06f, 6.719837961e-06f, 6.732737483e-06f, 6.745623807e-06f, 6.758496912e-06f, 6.771356776e-06f,
+6.784203380e-06f, 6.797036703e-06f, 6.809856724e-06f, 6.822663421e-06f, 6.835456776e-06f, 6.848236767e-06f, 6.861003373e-06f, 6.873756575e-06f, 6.886496351e-06f, 6.899222682e-06f,
+6.911935546e-06f, 6.924634924e-06f, 6.937320794e-06f, 6.949993137e-06f, 6.962651932e-06f, 6.975297159e-06f, 6.987928798e-06f, 7.000546828e-06f, 7.013151230e-06f, 7.025741982e-06f,
+7.038319065e-06f, 7.050882458e-06f, 7.063432142e-06f, 7.075968096e-06f, 7.088490301e-06f, 7.100998736e-06f, 7.113493381e-06f, 7.125974216e-06f, 7.138441222e-06f, 7.150894377e-06f,
+7.163333663e-06f, 7.175759060e-06f, 7.188170547e-06f, 7.200568105e-06f, 7.212951714e-06f, 7.225321354e-06f, 7.237677006e-06f, 7.250018649e-06f, 7.262346264e-06f, 7.274659831e-06f,
+7.286959331e-06f, 7.299244745e-06f, 7.311516051e-06f, 7.323773231e-06f, 7.336016266e-06f, 7.348245135e-06f, 7.360459820e-06f, 7.372660300e-06f, 7.384846557e-06f, 7.397018571e-06f,
+7.409176322e-06f, 7.421319792e-06f, 7.433448960e-06f, 7.445563808e-06f, 7.457664316e-06f, 7.469750466e-06f, 7.481822237e-06f, 7.493879611e-06f, 7.505922568e-06f, 7.517951089e-06f,
+7.529965156e-06f, 7.541964749e-06f, 7.553949849e-06f, 7.565920437e-06f, 7.577876494e-06f, 7.589818001e-06f, 7.601744939e-06f, 7.613657290e-06f, 7.625555034e-06f, 7.637438152e-06f,
+7.649306625e-06f, 7.661160436e-06f, 7.672999564e-06f, 7.684823992e-06f, 7.696633700e-06f, 7.708428670e-06f, 7.720208884e-06f, 7.731974321e-06f, 7.743724965e-06f, 7.755460796e-06f,
+7.767181795e-06f, 7.778887945e-06f, 7.790579227e-06f, 7.802255621e-06f, 7.813917111e-06f, 7.825563676e-06f, 7.837195300e-06f, 7.848811963e-06f, 7.860413648e-06f, 7.872000336e-06f,
+7.883572008e-06f, 7.895128646e-06f, 7.906670233e-06f, 7.918196750e-06f, 7.929708178e-06f, 7.941204501e-06f, 7.952685698e-06f, 7.964151754e-06f, 7.975602648e-06f, 7.987038365e-06f,
+7.998458884e-06f, 8.009864189e-06f, 8.021254262e-06f, 8.032629084e-06f, 8.043988638e-06f, 8.055332905e-06f, 8.066661869e-06f, 8.077975511e-06f, 8.089273814e-06f, 8.100556759e-06f,
+8.111824329e-06f, 8.123076506e-06f, 8.134313273e-06f, 8.145534613e-06f, 8.156740506e-06f, 8.167930937e-06f, 8.179105887e-06f, 8.190265339e-06f, 8.201409275e-06f, 8.212537678e-06f,
+8.223650531e-06f, 8.234747815e-06f, 8.245829515e-06f, 8.256895612e-06f, 8.267946088e-06f, 8.278980928e-06f, 8.290000114e-06f, 8.301003627e-06f, 8.311991452e-06f, 8.322963571e-06f,
+8.333919967e-06f, 8.344860622e-06f, 8.355785521e-06f, 8.366694644e-06f, 8.377587977e-06f, 8.388465501e-06f, 8.399327200e-06f, 8.410173057e-06f, 8.421003054e-06f, 8.431817176e-06f,
+8.442615405e-06f, 8.453397724e-06f, 8.464164117e-06f, 8.474914567e-06f, 8.485649057e-06f, 8.496367570e-06f, 8.507070090e-06f, 8.517756600e-06f, 8.528427084e-06f, 8.539081525e-06f,
+8.549719906e-06f, 8.560342211e-06f, 8.570948424e-06f, 8.581538528e-06f, 8.592112506e-06f, 8.602670343e-06f, 8.613212021e-06f, 8.623737525e-06f, 8.634246838e-06f, 8.644739945e-06f,
+8.655216827e-06f, 8.665677471e-06f, 8.676121859e-06f, 8.686549974e-06f, 8.696961802e-06f, 8.707357326e-06f, 8.717736530e-06f, 8.728099398e-06f, 8.738445913e-06f, 8.748776061e-06f,
+8.759089824e-06f, 8.769387187e-06f, 8.779668135e-06f, 8.789932651e-06f, 8.800180720e-06f, 8.810412325e-06f, 8.820627451e-06f, 8.830826083e-06f, 8.841008204e-06f, 8.851173799e-06f,
+8.861322852e-06f, 8.871455348e-06f, 8.881571271e-06f, 8.891670605e-06f, 8.901753336e-06f, 8.911819447e-06f, 8.921868923e-06f, 8.931901749e-06f, 8.941917909e-06f, 8.951917388e-06f,
+8.961900171e-06f, 8.971866242e-06f, 8.981815586e-06f, 8.991748188e-06f, 9.001664032e-06f, 9.011563104e-06f, 9.021445388e-06f, 9.031310869e-06f, 9.041159533e-06f, 9.050991363e-06f,
+9.060806346e-06f, 9.070604465e-06f, 9.080385707e-06f, 9.090150056e-06f, 9.099897497e-06f, 9.109628015e-06f, 9.119341596e-06f, 9.129038225e-06f, 9.138717886e-06f, 9.148380566e-06f,
+9.158026250e-06f, 9.167654922e-06f, 9.177266569e-06f, 9.186861175e-06f, 9.196438726e-06f, 9.205999208e-06f, 9.215542606e-06f, 9.225068905e-06f, 9.234578091e-06f, 9.244070150e-06f,
+9.253545066e-06f, 9.263002827e-06f, 9.272443417e-06f, 9.281866823e-06f, 9.291273029e-06f, 9.300662022e-06f, 9.310033788e-06f, 9.319388311e-06f, 9.328725579e-06f, 9.338045577e-06f,
+9.347348291e-06f, 9.356633707e-06f, 9.365901811e-06f, 9.375152589e-06f, 9.384386026e-06f, 9.393602110e-06f, 9.402800826e-06f, 9.411982160e-06f, 9.421146099e-06f, 9.430292628e-06f,
+9.439421735e-06f, 9.448533404e-06f, 9.457627623e-06f, 9.466704378e-06f, 9.475763655e-06f, 9.484805440e-06f, 9.493829721e-06f, 9.502836483e-06f, 9.511825713e-06f, 9.520797398e-06f,
+9.529751524e-06f, 9.538688077e-06f, 9.547607044e-06f, 9.556508413e-06f, 9.565392169e-06f, 9.574258299e-06f, 9.583106791e-06f, 9.591937630e-06f, 9.600750804e-06f, 9.609546300e-06f,
+9.618324104e-06f, 9.627084203e-06f, 9.635826584e-06f, 9.644551235e-06f, 9.653258142e-06f, 9.661947292e-06f, 9.670618673e-06f, 9.679272271e-06f, 9.687908074e-06f, 9.696526068e-06f,
+9.705126241e-06f, 9.713708581e-06f, 9.722273074e-06f, 9.730819708e-06f, 9.739348470e-06f, 9.747859347e-06f, 9.756352327e-06f, 9.764827398e-06f, 9.773284546e-06f, 9.781723759e-06f,
+9.790145025e-06f, 9.798548332e-06f, 9.806933666e-06f, 9.815301016e-06f, 9.823650370e-06f, 9.831981714e-06f, 9.840295036e-06f, 9.848590326e-06f, 9.856867569e-06f, 9.865126754e-06f,
+9.873367869e-06f, 9.881590902e-06f, 9.889795840e-06f, 9.897982672e-06f, 9.906151386e-06f, 9.914301969e-06f, 9.922434410e-06f, 9.930548697e-06f, 9.938644817e-06f, 9.946722759e-06f,
+9.954782512e-06f, 9.962824063e-06f, 9.970847401e-06f, 9.978852513e-06f, 9.986839389e-06f, 9.994808016e-06f, 1.000275838e-05f, 1.001069048e-05f, 1.001860429e-05f, 1.002649981e-05f,
+1.003437702e-05f, 1.004223592e-05f, 1.005007648e-05f, 1.005789870e-05f, 1.006570258e-05f, 1.007348809e-05f, 1.008125522e-05f, 1.008900397e-05f, 1.009673432e-05f, 1.010444627e-05f,
+1.011213979e-05f, 1.011981489e-05f, 1.012747154e-05f, 1.013510974e-05f, 1.014272948e-05f, 1.015033074e-05f, 1.015791352e-05f, 1.016547780e-05f, 1.017302358e-05f, 1.018055083e-05f,
+1.018805956e-05f, 1.019554975e-05f, 1.020302138e-05f, 1.021047446e-05f, 1.021790896e-05f, 1.022532488e-05f, 1.023272221e-05f, 1.024010093e-05f, 1.024746104e-05f, 1.025480253e-05f,
+1.026212538e-05f, 1.026942958e-05f, 1.027671513e-05f, 1.028398201e-05f, 1.029123021e-05f, 1.029845973e-05f, 1.030567055e-05f, 1.031286266e-05f, 1.032003605e-05f, 1.032719072e-05f,
+1.033432664e-05f, 1.034144382e-05f, 1.034854224e-05f, 1.035562189e-05f, 1.036268276e-05f, 1.036972485e-05f, 1.037674813e-05f, 1.038375261e-05f, 1.039073827e-05f, 1.039770510e-05f,
+1.040465309e-05f, 1.041158223e-05f, 1.041849252e-05f, 1.042538394e-05f, 1.043225648e-05f, 1.043911014e-05f, 1.044594490e-05f, 1.045276075e-05f, 1.045955769e-05f, 1.046633570e-05f,
+1.047309478e-05f, 1.047983492e-05f, 1.048655610e-05f, 1.049325832e-05f, 1.049994157e-05f, 1.050660584e-05f, 1.051325111e-05f, 1.051987739e-05f, 1.052648466e-05f, 1.053307291e-05f,
+1.053964213e-05f, 1.054619232e-05f, 1.055272346e-05f, 1.055923554e-05f, 1.056572857e-05f, 1.057220252e-05f, 1.057865739e-05f, 1.058509317e-05f, 1.059150985e-05f, 1.059790742e-05f,
+1.060428588e-05f, 1.061064521e-05f, 1.061698540e-05f, 1.062330646e-05f, 1.062960836e-05f, 1.063589110e-05f, 1.064215468e-05f, 1.064839907e-05f, 1.065462428e-05f, 1.066083030e-05f,
+1.066701711e-05f, 1.067318471e-05f, 1.067933310e-05f, 1.068546225e-05f, 1.069157217e-05f, 1.069766285e-05f, 1.070373427e-05f, 1.070978643e-05f, 1.071581932e-05f, 1.072183294e-05f,
+1.072782726e-05f, 1.073380230e-05f, 1.073975803e-05f, 1.074569446e-05f, 1.075161157e-05f, 1.075750935e-05f, 1.076338780e-05f, 1.076924691e-05f, 1.077508667e-05f, 1.078090707e-05f,
+1.078670811e-05f, 1.079248977e-05f, 1.079825206e-05f, 1.080399495e-05f, 1.080971846e-05f, 1.081542256e-05f, 1.082110725e-05f, 1.082677252e-05f, 1.083241837e-05f, 1.083804478e-05f,
+1.084365175e-05f, 1.084923928e-05f, 1.085480735e-05f, 1.086035596e-05f, 1.086588510e-05f, 1.087139476e-05f, 1.087688494e-05f, 1.088235562e-05f, 1.088780681e-05f, 1.089323850e-05f,
+1.089865067e-05f, 1.090404332e-05f, 1.090941644e-05f, 1.091477003e-05f, 1.092010408e-05f, 1.092541859e-05f, 1.093071354e-05f, 1.093598892e-05f, 1.094124474e-05f, 1.094648099e-05f,
+1.095169765e-05f, 1.095689473e-05f, 1.096207221e-05f, 1.096723009e-05f, 1.097236837e-05f, 1.097748702e-05f, 1.098258606e-05f, 1.098766547e-05f, 1.099272525e-05f, 1.099776538e-05f,
+1.100278587e-05f, 1.100778671e-05f, 1.101276788e-05f, 1.101772939e-05f, 1.102267123e-05f, 1.102759340e-05f, 1.103249587e-05f, 1.103737866e-05f, 1.104224175e-05f, 1.104708514e-05f,
+1.105190882e-05f, 1.105671278e-05f, 1.106149703e-05f, 1.106626155e-05f, 1.107100633e-05f, 1.107573138e-05f, 1.108043668e-05f, 1.108512224e-05f, 1.108978804e-05f, 1.109443407e-05f,
+1.109906035e-05f, 1.110366684e-05f, 1.110825356e-05f, 1.111282050e-05f, 1.111736765e-05f, 1.112189500e-05f, 1.112640255e-05f, 1.113089030e-05f, 1.113535823e-05f, 1.113980635e-05f,
+1.114423465e-05f, 1.114864312e-05f, 1.115303176e-05f, 1.115740056e-05f, 1.116174952e-05f, 1.116607863e-05f, 1.117038789e-05f, 1.117467729e-05f, 1.117894682e-05f, 1.118319649e-05f,
+1.118742629e-05f, 1.119163620e-05f, 1.119582624e-05f, 1.119999638e-05f, 1.120414664e-05f, 1.120827699e-05f, 1.121238745e-05f, 1.121647799e-05f, 1.122054863e-05f, 1.122459935e-05f,
+1.122863015e-05f, 1.123264102e-05f, 1.123663196e-05f, 1.124060297e-05f, 1.124455404e-05f, 1.124848516e-05f, 1.125239634e-05f, 1.125628757e-05f, 1.126015883e-05f, 1.126401014e-05f,
+1.126784148e-05f, 1.127165286e-05f, 1.127544425e-05f, 1.127921568e-05f, 1.128296711e-05f, 1.128669857e-05f, 1.129041003e-05f, 1.129410150e-05f, 1.129777297e-05f, 1.130142443e-05f,
+1.130505589e-05f, 1.130866735e-05f, 1.131225878e-05f, 1.131583020e-05f, 1.131938160e-05f, 1.132291297e-05f, 1.132642432e-05f, 1.132991563e-05f, 1.133338691e-05f, 1.133683814e-05f,
+1.134026933e-05f, 1.134368048e-05f, 1.134707157e-05f, 1.135044261e-05f, 1.135379360e-05f, 1.135712452e-05f, 1.136043538e-05f, 1.136372617e-05f, 1.136699689e-05f, 1.137024753e-05f,
+1.137347810e-05f, 1.137668859e-05f, 1.137987899e-05f, 1.138304931e-05f, 1.138619954e-05f, 1.138932967e-05f, 1.139243971e-05f, 1.139552965e-05f, 1.139859949e-05f, 1.140164922e-05f,
+1.140467885e-05f, 1.140768837e-05f, 1.141067777e-05f, 1.141364706e-05f, 1.141659622e-05f, 1.141952527e-05f, 1.142243419e-05f, 1.142532299e-05f, 1.142819166e-05f, 1.143104019e-05f,
+1.143386859e-05f, 1.143667685e-05f, 1.143946498e-05f, 1.144223296e-05f, 1.144498080e-05f, 1.144770849e-05f, 1.145041604e-05f, 1.145310343e-05f, 1.145577067e-05f, 1.145841775e-05f,
+1.146104468e-05f, 1.146365145e-05f, 1.146623805e-05f, 1.146880449e-05f, 1.147135077e-05f, 1.147387688e-05f, 1.147638281e-05f, 1.147886858e-05f, 1.148133417e-05f, 1.148377959e-05f,
+1.148620483e-05f, 1.148860989e-05f, 1.149099477e-05f, 1.149335946e-05f, 1.149570398e-05f, 1.149802830e-05f, 1.150033244e-05f, 1.150261639e-05f, 1.150488015e-05f, 1.150712372e-05f,
+1.150934710e-05f, 1.151155027e-05f, 1.151373326e-05f, 1.151589604e-05f, 1.151803863e-05f, 1.152016102e-05f, 1.152226320e-05f, 1.152434518e-05f, 1.152640696e-05f, 1.152844853e-05f,
+1.153046990e-05f, 1.153247106e-05f, 1.153445201e-05f, 1.153641275e-05f, 1.153835328e-05f, 1.154027360e-05f, 1.154217371e-05f, 1.154405361e-05f, 1.154591329e-05f, 1.154775275e-05f,
+1.154957200e-05f, 1.155137104e-05f, 1.155314986e-05f, 1.155490846e-05f, 1.155664684e-05f, 1.155836501e-05f, 1.156006295e-05f, 1.156174068e-05f, 1.156339818e-05f, 1.156503547e-05f,
+1.156665253e-05f, 1.156824937e-05f, 1.156982599e-05f, 1.157138239e-05f, 1.157291856e-05f, 1.157443452e-05f, 1.157593025e-05f, 1.157740576e-05f, 1.157886104e-05f, 1.158029610e-05f,
+1.158171094e-05f, 1.158310556e-05f, 1.158447995e-05f, 1.158583412e-05f, 1.158716806e-05f, 1.158848179e-05f, 1.158977529e-05f, 1.159104856e-05f, 1.159230162e-05f, 1.159353445e-05f,
+1.159474706e-05f, 1.159593945e-05f, 1.159711162e-05f, 1.159826357e-05f, 1.159939529e-05f, 1.160050680e-05f, 1.160159809e-05f, 1.160266916e-05f, 1.160372001e-05f, 1.160475064e-05f,
+1.160576106e-05f, 1.160675126e-05f, 1.160772125e-05f, 1.160867102e-05f, 1.160960057e-05f, 1.161050991e-05f, 1.161139904e-05f, 1.161226796e-05f, 1.161311667e-05f, 1.161394517e-05f,
+1.161475346e-05f, 1.161554154e-05f, 1.161630942e-05f, 1.161705709e-05f, 1.161778455e-05f, 1.161849182e-05f, 1.161917888e-05f, 1.161984574e-05f, 1.162049240e-05f, 1.162111886e-05f,
+1.162172513e-05f, 1.162231120e-05f, 1.162287707e-05f, 1.162342276e-05f, 1.162394825e-05f, 1.162445356e-05f, 1.162493867e-05f, 1.162540360e-05f, 1.162584834e-05f, 1.162627291e-05f,
+1.162667728e-05f, 1.162706148e-05f, 1.162742551e-05f, 1.162776935e-05f, 1.162809302e-05f, 1.162839652e-05f, 1.162867985e-05f, 1.162894301e-05f, 1.162918600e-05f, 1.162940883e-05f,
+1.162961150e-05f, 1.162979400e-05f, 1.162995635e-05f, 1.163009854e-05f, 1.163022058e-05f, 1.163032246e-05f, 1.163040420e-05f, 1.163046578e-05f, 1.163050723e-05f, 1.163052853e-05f,
+1.163052969e-05f, 1.163051071e-05f, 1.163047159e-05f, 1.163041235e-05f, 1.163033297e-05f, 1.163023346e-05f, 1.163011383e-05f, 1.162997408e-05f, 1.162981420e-05f, 1.162963421e-05f,
+1.162943411e-05f, 1.162921389e-05f, 1.162897356e-05f, 1.162871313e-05f, 1.162843259e-05f, 1.162813196e-05f, 1.162781122e-05f, 1.162747039e-05f, 1.162710947e-05f, 1.162672847e-05f,
+1.162632737e-05f, 1.162590620e-05f, 1.162546494e-05f, 1.162500361e-05f, 1.162452220e-05f, 1.162402073e-05f, 1.162349919e-05f, 1.162295759e-05f, 1.162239592e-05f, 1.162181421e-05f,
+1.162121243e-05f, 1.162059061e-05f, 1.161994875e-05f, 1.161928684e-05f, 1.161860489e-05f, 1.161790291e-05f, 1.161718089e-05f, 1.161643885e-05f, 1.161567678e-05f, 1.161489470e-05f,
+1.161409259e-05f, 1.161327048e-05f, 1.161242835e-05f, 1.161156622e-05f, 1.161068409e-05f, 1.160978196e-05f, 1.160885983e-05f, 1.160791772e-05f, 1.160695562e-05f, 1.160597354e-05f,
+1.160497149e-05f, 1.160394946e-05f, 1.160290746e-05f, 1.160184550e-05f, 1.160076357e-05f, 1.159966169e-05f, 1.159853986e-05f, 1.159739808e-05f, 1.159623636e-05f, 1.159505470e-05f,
+1.159385311e-05f, 1.159263158e-05f, 1.159139013e-05f, 1.159012876e-05f, 1.158884747e-05f, 1.158754627e-05f, 1.158622517e-05f, 1.158488416e-05f, 1.158352326e-05f, 1.158214246e-05f,
+1.158074177e-05f, 1.157932120e-05f, 1.157788075e-05f, 1.157642043e-05f, 1.157494024e-05f, 1.157344019e-05f, 1.157192028e-05f, 1.157038051e-05f, 1.156882090e-05f, 1.156724144e-05f,
+1.156564215e-05f, 1.156402302e-05f, 1.156238406e-05f, 1.156072529e-05f, 1.155904669e-05f, 1.155734828e-05f, 1.155563007e-05f, 1.155389205e-05f, 1.155213424e-05f, 1.155035663e-05f,
+1.154855924e-05f, 1.154674208e-05f, 1.154490513e-05f, 1.154304842e-05f, 1.154117195e-05f, 1.153927572e-05f, 1.153735973e-05f, 1.153542400e-05f, 1.153346853e-05f, 1.153149333e-05f,
+1.152949840e-05f, 1.152748374e-05f, 1.152544937e-05f, 1.152339529e-05f, 1.152132150e-05f, 1.151922801e-05f, 1.151711483e-05f, 1.151498196e-05f, 1.151282941e-05f, 1.151065718e-05f,
+1.150846529e-05f, 1.150625373e-05f, 1.150402252e-05f, 1.150177166e-05f, 1.149950115e-05f, 1.149721100e-05f, 1.149490122e-05f, 1.149257182e-05f, 1.149022280e-05f, 1.148785417e-05f,
+1.148546593e-05f, 1.148305809e-05f, 1.148063066e-05f, 1.147818364e-05f, 1.147571705e-05f, 1.147323088e-05f, 1.147072514e-05f, 1.146819985e-05f, 1.146565500e-05f, 1.146309060e-05f,
+1.146050667e-05f, 1.145790320e-05f, 1.145528021e-05f, 1.145263770e-05f, 1.144997568e-05f, 1.144729415e-05f, 1.144459312e-05f, 1.144187261e-05f, 1.143913261e-05f, 1.143637313e-05f,
+1.143359418e-05f, 1.143079577e-05f, 1.142797791e-05f, 1.142514060e-05f, 1.142228384e-05f, 1.141940766e-05f, 1.141651204e-05f, 1.141359701e-05f, 1.141066257e-05f, 1.140770872e-05f,
+1.140473548e-05f, 1.140174285e-05f, 1.139873083e-05f, 1.139569945e-05f, 1.139264869e-05f, 1.138957858e-05f, 1.138648911e-05f, 1.138338031e-05f, 1.138025216e-05f, 1.137710469e-05f,
+1.137393790e-05f, 1.137075180e-05f, 1.136754639e-05f, 1.136432168e-05f, 1.136107769e-05f, 1.135781441e-05f, 1.135453187e-05f, 1.135123005e-05f, 1.134790898e-05f, 1.134456867e-05f,
+1.134120911e-05f, 1.133783032e-05f, 1.133443230e-05f, 1.133101507e-05f, 1.132757863e-05f, 1.132412299e-05f, 1.132064816e-05f, 1.131715415e-05f, 1.131364096e-05f, 1.131010860e-05f,
+1.130655709e-05f, 1.130298643e-05f, 1.129939663e-05f, 1.129578769e-05f, 1.129215963e-05f, 1.128851246e-05f, 1.128484618e-05f, 1.128116080e-05f, 1.127745633e-05f, 1.127373278e-05f,
+1.126999016e-05f, 1.126622848e-05f, 1.126244774e-05f, 1.125864796e-05f, 1.125482914e-05f, 1.125099130e-05f, 1.124713443e-05f, 1.124325856e-05f, 1.123936368e-05f, 1.123544981e-05f,
+1.123151696e-05f, 1.122756514e-05f, 1.122359435e-05f, 1.121960461e-05f, 1.121559592e-05f, 1.121156830e-05f, 1.120752174e-05f, 1.120345627e-05f, 1.119937189e-05f, 1.119526861e-05f,
+1.119114645e-05f, 1.118700540e-05f, 1.118284547e-05f, 1.117866669e-05f, 1.117446906e-05f, 1.117025258e-05f, 1.116601727e-05f, 1.116176313e-05f, 1.115749018e-05f, 1.115319843e-05f,
+1.114888788e-05f, 1.114455855e-05f, 1.114021044e-05f, 1.113584357e-05f, 1.113145794e-05f, 1.112705357e-05f, 1.112263046e-05f, 1.111818862e-05f, 1.111372807e-05f, 1.110924881e-05f,
+1.110475086e-05f, 1.110023422e-05f, 1.109569891e-05f, 1.109114493e-05f, 1.108657229e-05f, 1.108198101e-05f, 1.107737110e-05f, 1.107274256e-05f, 1.106809540e-05f, 1.106342964e-05f,
+1.105874529e-05f, 1.105404235e-05f, 1.104932084e-05f, 1.104458077e-05f, 1.103982214e-05f, 1.103504497e-05f, 1.103024927e-05f, 1.102543506e-05f, 1.102060233e-05f, 1.101575110e-05f,
+1.101088138e-05f, 1.100599318e-05f, 1.100108651e-05f, 1.099616139e-05f, 1.099121782e-05f, 1.098625582e-05f, 1.098127539e-05f, 1.097627655e-05f, 1.097125931e-05f, 1.096622367e-05f,
+1.096116965e-05f, 1.095609726e-05f, 1.095100652e-05f, 1.094589742e-05f, 1.094076999e-05f, 1.093562423e-05f, 1.093046016e-05f, 1.092527779e-05f, 1.092007712e-05f, 1.091485817e-05f,
+1.090962095e-05f, 1.090436547e-05f, 1.089909174e-05f, 1.089379978e-05f, 1.088848960e-05f, 1.088316120e-05f, 1.087781459e-05f, 1.087244980e-05f, 1.086706683e-05f, 1.086166569e-05f,
+1.085624640e-05f, 1.085080896e-05f, 1.084535339e-05f, 1.083987970e-05f, 1.083438790e-05f, 1.082887800e-05f, 1.082335001e-05f, 1.081780395e-05f, 1.081223983e-05f, 1.080665766e-05f,
+1.080105745e-05f, 1.079543921e-05f, 1.078980296e-05f, 1.078414870e-05f, 1.077847645e-05f, 1.077278623e-05f, 1.076707803e-05f, 1.076135189e-05f, 1.075560780e-05f, 1.074984577e-05f,
+1.074406583e-05f, 1.073826799e-05f, 1.073245225e-05f, 1.072661862e-05f, 1.072076713e-05f, 1.071489778e-05f, 1.070901058e-05f, 1.070310556e-05f, 1.069718271e-05f, 1.069124205e-05f,
+1.068528360e-05f, 1.067930736e-05f, 1.067331336e-05f, 1.066730159e-05f, 1.066127208e-05f, 1.065522484e-05f, 1.064915988e-05f, 1.064307720e-05f, 1.063697684e-05f, 1.063085879e-05f,
+1.062472307e-05f, 1.061856970e-05f, 1.061239868e-05f, 1.060621003e-05f, 1.060000376e-05f, 1.059377989e-05f, 1.058753842e-05f, 1.058127937e-05f, 1.057500276e-05f, 1.056870860e-05f,
+1.056239689e-05f, 1.055606765e-05f, 1.054972090e-05f, 1.054335665e-05f, 1.053697491e-05f, 1.053057570e-05f, 1.052415902e-05f, 1.051772490e-05f, 1.051127334e-05f, 1.050480435e-05f,
+1.049831796e-05f, 1.049181417e-05f, 1.048529301e-05f, 1.047875447e-05f, 1.047219857e-05f, 1.046562534e-05f, 1.045903477e-05f, 1.045242689e-05f, 1.044580171e-05f, 1.043915924e-05f,
+1.043249950e-05f, 1.042582250e-05f, 1.041912825e-05f, 1.041241676e-05f, 1.040568806e-05f, 1.039894215e-05f, 1.039217905e-05f, 1.038539877e-05f, 1.037860133e-05f, 1.037178673e-05f,
+1.036495500e-05f, 1.035810615e-05f, 1.035124018e-05f, 1.034435712e-05f, 1.033745698e-05f, 1.033053978e-05f, 1.032360552e-05f, 1.031665422e-05f, 1.030968590e-05f, 1.030270056e-05f,
+1.029569823e-05f, 1.028867892e-05f, 1.028164264e-05f, 1.027458940e-05f, 1.026751923e-05f, 1.026043213e-05f, 1.025332812e-05f, 1.024620721e-05f, 1.023906942e-05f, 1.023191477e-05f,
+1.022474325e-05f, 1.021755490e-05f, 1.021034973e-05f, 1.020312774e-05f, 1.019588896e-05f, 1.018863340e-05f, 1.018136108e-05f, 1.017407200e-05f, 1.016676618e-05f, 1.015944364e-05f,
+1.015210440e-05f, 1.014474846e-05f, 1.013737584e-05f, 1.012998656e-05f, 1.012258063e-05f, 1.011515807e-05f, 1.010771889e-05f, 1.010026310e-05f, 1.009279073e-05f, 1.008530178e-05f,
+1.007779627e-05f, 1.007027422e-05f, 1.006273563e-05f, 1.005518054e-05f, 1.004760894e-05f, 1.004002087e-05f, 1.003241632e-05f, 1.002479532e-05f, 1.001715788e-05f, 1.000950402e-05f,
+1.000183375e-05f, 9.994147085e-06f, 9.986444045e-06f, 9.978724642e-06f, 9.970988893e-06f, 9.963236813e-06f, 9.955468417e-06f, 9.947683720e-06f, 9.939882738e-06f, 9.932065487e-06f,
+9.924231982e-06f, 9.916382238e-06f, 9.908516271e-06f, 9.900634096e-06f, 9.892735730e-06f, 9.884821188e-06f, 9.876890485e-06f, 9.868943638e-06f, 9.860980661e-06f, 9.853001571e-06f,
+9.845006384e-06f, 9.836995114e-06f, 9.828967779e-06f, 9.820924394e-06f, 9.812864974e-06f, 9.804789536e-06f, 9.796698096e-06f, 9.788590669e-06f, 9.780467272e-06f, 9.772327920e-06f,
+9.764172630e-06f, 9.756001417e-06f, 9.747814298e-06f, 9.739611289e-06f, 9.731392406e-06f, 9.723157665e-06f, 9.714907081e-06f, 9.706640673e-06f, 9.698358455e-06f, 9.690060444e-06f,
+9.681746656e-06f, 9.673417108e-06f, 9.665071815e-06f, 9.656710795e-06f, 9.648334063e-06f, 9.639941637e-06f, 9.631533532e-06f, 9.623109764e-06f, 9.614670351e-06f, 9.606215309e-06f,
+9.597744655e-06f, 9.589258404e-06f, 9.580756574e-06f, 9.572239181e-06f, 9.563706242e-06f, 9.555157773e-06f, 9.546593791e-06f, 9.538014314e-06f, 9.529419356e-06f, 9.520808937e-06f,
+9.512183071e-06f, 9.503541776e-06f, 9.494885069e-06f, 9.486212967e-06f, 9.477525486e-06f, 9.468822644e-06f, 9.460104457e-06f, 9.451370942e-06f, 9.442622117e-06f, 9.433857998e-06f,
+9.425078602e-06f, 9.416283947e-06f, 9.407474049e-06f, 9.398648925e-06f, 9.389808594e-06f, 9.380953071e-06f, 9.372082374e-06f, 9.363196520e-06f, 9.354295527e-06f, 9.345379412e-06f,
+9.336448191e-06f, 9.327501883e-06f, 9.318540504e-06f, 9.309564072e-06f, 9.300572605e-06f, 9.291566119e-06f, 9.282544632e-06f, 9.273508162e-06f, 9.264456726e-06f, 9.255390341e-06f,
+9.246309026e-06f, 9.237212796e-06f, 9.228101671e-06f, 9.218975668e-06f, 9.209834804e-06f, 9.200679097e-06f, 9.191508564e-06f, 9.182323224e-06f, 9.173123094e-06f, 9.163908191e-06f,
+9.154678534e-06f, 9.145434140e-06f, 9.136175027e-06f, 9.126901212e-06f, 9.117612715e-06f, 9.108309552e-06f, 9.098991741e-06f, 9.089659301e-06f, 9.080312248e-06f, 9.070950603e-06f,
+9.061574381e-06f, 9.052183601e-06f, 9.042778282e-06f, 9.033358441e-06f, 9.023924096e-06f, 9.014475266e-06f, 9.005011968e-06f, 8.995534222e-06f, 8.986042043e-06f, 8.976535452e-06f,
+8.967014467e-06f, 8.957479104e-06f, 8.947929384e-06f, 8.938365323e-06f, 8.928786941e-06f, 8.919194256e-06f, 8.909587285e-06f, 8.899966048e-06f, 8.890330563e-06f, 8.880680848e-06f,
+8.871016921e-06f, 8.861338802e-06f, 8.851646508e-06f, 8.841940058e-06f, 8.832219471e-06f, 8.822484765e-06f, 8.812735958e-06f, 8.802973070e-06f, 8.793196119e-06f, 8.783405124e-06f,
+8.773600102e-06f, 8.763781074e-06f, 8.753948057e-06f, 8.744101070e-06f, 8.734240133e-06f, 8.724365263e-06f, 8.714476480e-06f, 8.704573802e-06f, 8.694657249e-06f, 8.684726839e-06f,
+8.674782590e-06f, 8.664824523e-06f, 8.654852655e-06f, 8.644867007e-06f, 8.634867596e-06f, 8.624854442e-06f, 8.614827563e-06f, 8.604786979e-06f, 8.594732709e-06f, 8.584664772e-06f,
+8.574583187e-06f, 8.564487973e-06f, 8.554379149e-06f, 8.544256735e-06f, 8.534120749e-06f, 8.523971211e-06f, 8.513808140e-06f, 8.503631555e-06f, 8.493441476e-06f, 8.483237922e-06f,
+8.473020911e-06f, 8.462790464e-06f, 8.452546600e-06f, 8.442289338e-06f, 8.432018697e-06f, 8.421734697e-06f, 8.411437358e-06f, 8.401126698e-06f, 8.390802738e-06f, 8.380465497e-06f,
+8.370114993e-06f, 8.359751248e-06f, 8.349374280e-06f, 8.338984109e-06f, 8.328580754e-06f, 8.318164236e-06f, 8.307734573e-06f, 8.297291786e-06f, 8.286835894e-06f, 8.276366917e-06f,
+8.265884875e-06f, 8.255389786e-06f, 8.244881672e-06f, 8.234360552e-06f, 8.223826445e-06f, 8.213279372e-06f, 8.202719352e-06f, 8.192146405e-06f, 8.181560551e-06f, 8.170961810e-06f,
+8.160350202e-06f, 8.149725747e-06f, 8.139088464e-06f, 8.128438375e-06f, 8.117775498e-06f, 8.107099853e-06f, 8.096411462e-06f, 8.085710343e-06f, 8.074996517e-06f, 8.064270005e-06f,
+8.053530825e-06f, 8.042778999e-06f, 8.032014546e-06f, 8.021237487e-06f, 8.010447841e-06f, 7.999645630e-06f, 7.988830872e-06f, 7.978003590e-06f, 7.967163802e-06f, 7.956311529e-06f,
+7.945446791e-06f, 7.934569609e-06f, 7.923680004e-06f, 7.912777994e-06f, 7.901863602e-06f, 7.890936846e-06f, 7.879997749e-06f, 7.869046329e-06f, 7.858082608e-06f, 7.847106606e-06f,
+7.836118343e-06f, 7.825117841e-06f, 7.814105119e-06f, 7.803080198e-06f, 7.792043099e-06f, 7.780993842e-06f, 7.769932449e-06f, 7.758858938e-06f, 7.747773332e-06f, 7.736675651e-06f,
+7.725565915e-06f, 7.714444146e-06f, 7.703310364e-06f, 7.692164589e-06f, 7.681006843e-06f, 7.669837146e-06f, 7.658655519e-06f, 7.647461983e-06f, 7.636256559e-06f, 7.625039267e-06f,
+7.613810129e-06f, 7.602569165e-06f, 7.591316396e-06f, 7.580051844e-06f, 7.568775528e-06f, 7.557487471e-06f, 7.546187692e-06f, 7.534876214e-06f, 7.523553056e-06f, 7.512218241e-06f,
+7.500871788e-06f, 7.489513720e-06f, 7.478144058e-06f, 7.466762821e-06f, 7.455370032e-06f, 7.443965711e-06f, 7.432549881e-06f, 7.421122561e-06f, 7.409683773e-06f, 7.398233539e-06f,
+7.386771879e-06f, 7.375298815e-06f, 7.363814368e-06f, 7.352318559e-06f, 7.340811410e-06f, 7.329292942e-06f, 7.317763176e-06f, 7.306222133e-06f, 7.294669836e-06f, 7.283106305e-06f,
+7.271531561e-06f, 7.259945627e-06f, 7.248348523e-06f, 7.236740271e-06f, 7.225120893e-06f, 7.213490409e-06f, 7.201848842e-06f, 7.190196213e-06f, 7.178532543e-06f, 7.166857854e-06f,
+7.155172168e-06f, 7.143475506e-06f, 7.131767889e-06f, 7.120049340e-06f, 7.108319880e-06f, 7.096579530e-06f, 7.084828313e-06f, 7.073066249e-06f, 7.061293361e-06f, 7.049509671e-06f,
+7.037715199e-06f, 7.025909968e-06f, 7.014094000e-06f, 7.002267316e-06f, 6.990429938e-06f, 6.978581888e-06f, 6.966723188e-06f, 6.954853859e-06f, 6.942973924e-06f, 6.931083404e-06f,
+6.919182321e-06f, 6.907270697e-06f, 6.895348554e-06f, 6.883415913e-06f, 6.871472798e-06f, 6.859519229e-06f, 6.847555230e-06f, 6.835580820e-06f, 6.823596024e-06f, 6.811600862e-06f,
+6.799595357e-06f, 6.787579531e-06f, 6.775553406e-06f, 6.763517004e-06f, 6.751470347e-06f, 6.739413457e-06f, 6.727346357e-06f, 6.715269068e-06f, 6.703181612e-06f, 6.691084013e-06f,
+6.678976291e-06f, 6.666858469e-06f, 6.654730570e-06f, 6.642592616e-06f, 6.630444628e-06f, 6.618286630e-06f, 6.606118643e-06f, 6.593940690e-06f, 6.581752792e-06f, 6.569554973e-06f,
+6.557347255e-06f, 6.545129660e-06f, 6.532902210e-06f, 6.520664927e-06f, 6.508417835e-06f, 6.496160956e-06f, 6.483894311e-06f, 6.471617924e-06f, 6.459331817e-06f, 6.447036012e-06f,
+6.434730531e-06f, 6.422415398e-06f, 6.410090635e-06f, 6.397756264e-06f, 6.385412308e-06f, 6.373058789e-06f, 6.360695731e-06f, 6.348323154e-06f, 6.335941083e-06f, 6.323549540e-06f,
+6.311148547e-06f, 6.298738126e-06f, 6.286318302e-06f, 6.273889095e-06f, 6.261450530e-06f, 6.249002628e-06f, 6.236545412e-06f, 6.224078906e-06f, 6.211603131e-06f, 6.199118110e-06f,
+6.186623867e-06f, 6.174120424e-06f, 6.161607803e-06f, 6.149086028e-06f, 6.136555121e-06f, 6.124015106e-06f, 6.111466004e-06f, 6.098907839e-06f, 6.086340634e-06f, 6.073764412e-06f,
+6.061179195e-06f, 6.048585006e-06f, 6.035981868e-06f, 6.023369805e-06f, 6.010748838e-06f, 5.998118992e-06f, 5.985480289e-06f, 5.972832751e-06f, 5.960176402e-06f, 5.947511266e-06f,
+5.934837364e-06f, 5.922154720e-06f, 5.909463358e-06f, 5.896763299e-06f, 5.884054567e-06f, 5.871337185e-06f, 5.858611177e-06f, 5.845876565e-06f, 5.833133372e-06f, 5.820381622e-06f,
+5.807621338e-06f, 5.794852542e-06f, 5.782075258e-06f, 5.769289510e-06f, 5.756495319e-06f, 5.743692711e-06f, 5.730881707e-06f, 5.718062330e-06f, 5.705234605e-06f, 5.692398554e-06f,
+5.679554201e-06f, 5.666701569e-06f, 5.653840681e-06f, 5.640971560e-06f, 5.628094230e-06f, 5.615208714e-06f, 5.602315035e-06f, 5.589413217e-06f, 5.576503283e-06f, 5.563585256e-06f,
+5.550659160e-06f, 5.537725018e-06f, 5.524782854e-06f, 5.511832690e-06f, 5.498874551e-06f, 5.485908459e-06f, 5.472934438e-06f, 5.459952512e-06f, 5.446962704e-06f, 5.433965037e-06f,
+5.420959535e-06f, 5.407946222e-06f, 5.394925121e-06f, 5.381896254e-06f, 5.368859647e-06f, 5.355815322e-06f, 5.342763304e-06f, 5.329703614e-06f, 5.316636278e-06f, 5.303561318e-06f,
+5.290478759e-06f, 5.277388623e-06f, 5.264290935e-06f, 5.251185718e-06f, 5.238072995e-06f, 5.224952791e-06f, 5.211825128e-06f, 5.198690031e-06f, 5.185547523e-06f, 5.172397628e-06f,
+5.159240370e-06f, 5.146075772e-06f, 5.132903857e-06f, 5.119724650e-06f, 5.106538175e-06f, 5.093344455e-06f, 5.080143513e-06f, 5.066935374e-06f, 5.053720061e-06f, 5.040497599e-06f,
+5.027268010e-06f, 5.014031319e-06f, 5.000787549e-06f, 4.987536724e-06f, 4.974278869e-06f, 4.961014006e-06f, 4.947742160e-06f, 4.934463355e-06f, 4.921177614e-06f, 4.907884961e-06f,
+4.894585420e-06f, 4.881279015e-06f, 4.867965770e-06f, 4.854645709e-06f, 4.841318855e-06f, 4.827985233e-06f, 4.814644867e-06f, 4.801297779e-06f, 4.787943996e-06f, 4.774583539e-06f,
+4.761216434e-06f, 4.747842704e-06f, 4.734462373e-06f, 4.721075466e-06f, 4.707682005e-06f, 4.694282016e-06f, 4.680875522e-06f, 4.667462547e-06f, 4.654043115e-06f, 4.640617251e-06f,
+4.627184978e-06f, 4.613746320e-06f, 4.600301301e-06f, 4.586849946e-06f, 4.573392279e-06f, 4.559928323e-06f, 4.546458103e-06f, 4.532981643e-06f, 4.519498966e-06f, 4.506010098e-06f,
+4.492515061e-06f, 4.479013881e-06f, 4.465506581e-06f, 4.451993186e-06f, 4.438473720e-06f, 4.424948206e-06f, 4.411416670e-06f, 4.397879134e-06f, 4.384335624e-06f, 4.370786164e-06f,
+4.357230777e-06f, 4.343669488e-06f, 4.330102322e-06f, 4.316529302e-06f, 4.302950452e-06f, 4.289365797e-06f, 4.275775362e-06f, 4.262179169e-06f, 4.248577245e-06f, 4.234969612e-06f,
+4.221356295e-06f, 4.207737318e-06f, 4.194112707e-06f, 4.180482484e-06f, 4.166846674e-06f, 4.153205302e-06f, 4.139558392e-06f, 4.125905968e-06f, 4.112248055e-06f, 4.098584676e-06f,
+4.084915857e-06f, 4.071241621e-06f, 4.057561993e-06f, 4.043876997e-06f, 4.030186658e-06f, 4.016490999e-06f, 4.002790046e-06f, 3.989083823e-06f, 3.975372354e-06f, 3.961655663e-06f,
+3.947933775e-06f, 3.934206714e-06f, 3.920474505e-06f, 3.906737172e-06f, 3.892994740e-06f, 3.879247232e-06f, 3.865494674e-06f, 3.851737090e-06f, 3.837974504e-06f, 3.824206940e-06f,
+3.810434424e-06f, 3.796656980e-06f, 3.782874631e-06f, 3.769087403e-06f, 3.755295320e-06f, 3.741498407e-06f, 3.727696688e-06f, 3.713890187e-06f, 3.700078929e-06f, 3.686262939e-06f,
+3.672442241e-06f, 3.658616859e-06f, 3.644786818e-06f, 3.630952143e-06f, 3.617112858e-06f, 3.603268988e-06f, 3.589420557e-06f, 3.575567590e-06f, 3.561710111e-06f, 3.547848145e-06f,
+3.533981716e-06f, 3.520110849e-06f, 3.506235569e-06f, 3.492355900e-06f, 3.478471867e-06f, 3.464583494e-06f, 3.450690806e-06f, 3.436793827e-06f, 3.422892582e-06f, 3.408987096e-06f,
+3.395077394e-06f, 3.381163499e-06f, 3.367245437e-06f, 3.353323231e-06f, 3.339396908e-06f, 3.325466491e-06f, 3.311532005e-06f, 3.297593474e-06f, 3.283650924e-06f, 3.269704379e-06f,
+3.255753863e-06f, 3.241799402e-06f, 3.227841020e-06f, 3.213878741e-06f, 3.199912590e-06f, 3.185942592e-06f, 3.171968771e-06f, 3.157991153e-06f, 3.144009762e-06f, 3.130024622e-06f,
+3.116035759e-06f, 3.102043196e-06f, 3.088046959e-06f, 3.074047073e-06f, 3.060043561e-06f, 3.046036450e-06f, 3.032025762e-06f, 3.018011524e-06f, 3.003993760e-06f, 2.989972494e-06f,
+2.975947751e-06f, 2.961919557e-06f, 2.947887935e-06f, 2.933852911e-06f, 2.919814509e-06f, 2.905772754e-06f, 2.891727670e-06f, 2.877679283e-06f, 2.863627617e-06f, 2.849572697e-06f,
+2.835514547e-06f, 2.821453193e-06f, 2.807388659e-06f, 2.793320970e-06f, 2.779250150e-06f, 2.765176225e-06f, 2.751099219e-06f, 2.737019157e-06f, 2.722936064e-06f, 2.708849964e-06f,
+2.694760882e-06f, 2.680668843e-06f, 2.666573872e-06f, 2.652475994e-06f, 2.638375232e-06f, 2.624271613e-06f, 2.610165161e-06f, 2.596055901e-06f, 2.581943857e-06f, 2.567829054e-06f,
+2.553711517e-06f, 2.539591271e-06f, 2.525468340e-06f, 2.511342750e-06f, 2.497214526e-06f, 2.483083691e-06f, 2.468950271e-06f, 2.454814290e-06f, 2.440675774e-06f, 2.426534748e-06f,
+2.412391235e-06f, 2.398245261e-06f, 2.384096850e-06f, 2.369946028e-06f, 2.355792820e-06f, 2.341637249e-06f, 2.327479341e-06f, 2.313319121e-06f, 2.299156614e-06f, 2.284991843e-06f,
+2.270824835e-06f, 2.256655614e-06f, 2.242484204e-06f, 2.228310631e-06f, 2.214134920e-06f, 2.199957095e-06f, 2.185777180e-06f, 2.171595202e-06f, 2.157411184e-06f, 2.143225152e-06f,
+2.129037130e-06f, 2.114847143e-06f, 2.100655216e-06f, 2.086461374e-06f, 2.072265642e-06f, 2.058068044e-06f, 2.043868605e-06f, 2.029667351e-06f, 2.015464305e-06f, 2.001259493e-06f,
+1.987052940e-06f, 1.972844670e-06f, 1.958634708e-06f, 1.944423079e-06f, 1.930209808e-06f, 1.915994920e-06f, 1.901778440e-06f, 1.887560391e-06f, 1.873340800e-06f, 1.859119691e-06f,
+1.844897089e-06f, 1.830673018e-06f, 1.816447504e-06f, 1.802220571e-06f, 1.787992244e-06f, 1.773762548e-06f, 1.759531508e-06f, 1.745299148e-06f, 1.731065494e-06f, 1.716830570e-06f,
+1.702594401e-06f, 1.688357012e-06f, 1.674118427e-06f, 1.659878672e-06f, 1.645637772e-06f, 1.631395750e-06f, 1.617152632e-06f, 1.602908443e-06f, 1.588663207e-06f, 1.574416950e-06f,
+1.560169696e-06f, 1.545921470e-06f, 1.531672297e-06f, 1.517422201e-06f, 1.503171207e-06f, 1.488919341e-06f, 1.474666626e-06f, 1.460413089e-06f, 1.446158753e-06f, 1.431903643e-06f,
+1.417647784e-06f, 1.403391201e-06f, 1.389133919e-06f, 1.374875963e-06f, 1.360617357e-06f, 1.346358125e-06f, 1.332098294e-06f, 1.317837887e-06f, 1.303576930e-06f, 1.289315447e-06f,
+1.275053463e-06f, 1.260791002e-06f, 1.246528090e-06f, 1.232264751e-06f, 1.218001011e-06f, 1.203736893e-06f, 1.189472422e-06f, 1.175207624e-06f, 1.160942523e-06f, 1.146677144e-06f,
+1.132411511e-06f, 1.118145649e-06f, 1.103879584e-06f, 1.089613339e-06f, 1.075346940e-06f, 1.061080412e-06f, 1.046813778e-06f, 1.032547064e-06f, 1.018280294e-06f, 1.004013494e-06f,
+9.897466870e-07f, 9.754798991e-07f, 9.612131545e-07f, 9.469464779e-07f, 9.326798942e-07f, 9.184134278e-07f, 9.041471037e-07f, 8.898809464e-07f, 8.756149807e-07f, 8.613492313e-07f,
+8.470837228e-07f, 8.328184799e-07f, 8.185535274e-07f, 8.042888899e-07f, 7.900245920e-07f, 7.757606585e-07f, 7.614971141e-07f, 7.472339833e-07f, 7.329712909e-07f, 7.187090615e-07f,
+7.044473197e-07f, 6.901860902e-07f, 6.759253978e-07f, 6.616652669e-07f, 6.474057222e-07f, 6.331467885e-07f, 6.188884902e-07f, 6.046308521e-07f, 5.903738987e-07f, 5.761176547e-07f,
+5.618621447e-07f, 5.476073933e-07f, 5.333534251e-07f, 5.191002647e-07f, 5.048479367e-07f, 4.905964657e-07f, 4.763458762e-07f, 4.620961930e-07f, 4.478474405e-07f, 4.335996433e-07f,
+4.193528260e-07f, 4.051070131e-07f, 3.908622293e-07f, 3.766184990e-07f, 3.623758468e-07f, 3.481342973e-07f, 3.338938750e-07f, 3.196546045e-07f, 3.054165102e-07f, 2.911796167e-07f,
+2.769439486e-07f, 2.627095303e-07f, 2.484763863e-07f, 2.342445412e-07f, 2.200140194e-07f, 2.057848455e-07f, 1.915570439e-07f, 1.773306391e-07f, 1.631056557e-07f, 1.488821180e-07f,
+1.346600505e-07f, 1.204394778e-07f, 1.062204242e-07f, 9.200291421e-08f, 7.778697229e-08f, 6.357262287e-08f, 4.935989038e-08f, 3.514879925e-08f, 2.093937391e-08f, 6.731638761e-09f,
+-7.474381773e-09f, -2.167866329e-08f, -3.588118140e-08f, -5.008191169e-08f, -6.428082979e-08f, -7.847791132e-08f, -9.267313190e-08f, -1.068664672e-07f, -1.210578927e-07f, -1.352473843e-07f,
+-1.494349174e-07f, -1.636204678e-07f, -1.778040112e-07f, -1.919855231e-07f, -2.061649794e-07f, -2.203423556e-07f, -2.345176274e-07f, -2.486907706e-07f, -2.628617608e-07f, -2.770305738e-07f,
+-2.911971853e-07f, -3.053615710e-07f, -3.195237066e-07f, -3.336835678e-07f, -3.478411304e-07f, -3.619963702e-07f, -3.761492630e-07f, -3.902997843e-07f, -4.044479102e-07f, -4.185936162e-07f,
+-4.327368783e-07f, -4.468776721e-07f, -4.610159736e-07f, -4.751517585e-07f, -4.892850025e-07f, -5.034156817e-07f, -5.175437717e-07f, -5.316692484e-07f, -5.457920876e-07f, -5.599122653e-07f,
+-5.740297572e-07f, -5.881445393e-07f, -6.022565873e-07f, -6.163658772e-07f, -6.304723849e-07f, -6.445760863e-07f, -6.586769573e-07f, -6.727749737e-07f, -6.868701115e-07f, -7.009623467e-07f,
+-7.150516552e-07f, -7.291380128e-07f, -7.432213957e-07f, -7.573017797e-07f, -7.713791407e-07f, -7.854534549e-07f, -7.995246981e-07f, -8.135928464e-07f, -8.276578757e-07f, -8.417197621e-07f,
+-8.557784816e-07f, -8.698340101e-07f, -8.838863239e-07f, -8.979353988e-07f, -9.119812110e-07f, -9.260237364e-07f, -9.400629513e-07f, -9.540988316e-07f, -9.681313534e-07f, -9.821604929e-07f,
+-9.961862261e-07f, -1.010208529e-06f, -1.024227378e-06f, -1.038242749e-06f, -1.052254619e-06f, -1.066262962e-06f, -1.080267757e-06f, -1.094268978e-06f, -1.108266602e-06f, -1.122260605e-06f,
+-1.136250963e-06f, -1.150237653e-06f, -1.164220650e-06f, -1.178199931e-06f, -1.192175473e-06f, -1.206147251e-06f, -1.220115241e-06f, -1.234079421e-06f, -1.248039765e-06f, -1.261996251e-06f,
+-1.275948855e-06f, -1.289897552e-06f, -1.303842320e-06f, -1.317783135e-06f, -1.331719973e-06f, -1.345652810e-06f, -1.359581622e-06f, -1.373506387e-06f, -1.387427080e-06f, -1.401343678e-06f,
+-1.415256157e-06f, -1.429164493e-06f, -1.443068663e-06f, -1.456968644e-06f, -1.470864412e-06f, -1.484755942e-06f, -1.498643213e-06f, -1.512526199e-06f, -1.526404878e-06f, -1.540279227e-06f,
+-1.554149220e-06f, -1.568014836e-06f, -1.581876050e-06f, -1.595732840e-06f, -1.609585181e-06f, -1.623433050e-06f, -1.637276424e-06f, -1.651115279e-06f, -1.664949592e-06f, -1.678779339e-06f,
+-1.692604498e-06f, -1.706425044e-06f, -1.720240954e-06f, -1.734052205e-06f, -1.747858774e-06f, -1.761660637e-06f, -1.775457770e-06f, -1.789250151e-06f, -1.803037756e-06f, -1.816820562e-06f,
+-1.830598546e-06f, -1.844371684e-06f, -1.858139953e-06f, -1.871903329e-06f, -1.885661790e-06f, -1.899415313e-06f, -1.913163873e-06f, -1.926907448e-06f, -1.940646015e-06f, -1.954379550e-06f,
+-1.968108030e-06f, -1.981831432e-06f, -1.995549733e-06f, -2.009262910e-06f, -2.022970940e-06f, -2.036673798e-06f, -2.050371464e-06f, -2.064063912e-06f, -2.077751121e-06f, -2.091433067e-06f,
+-2.105109726e-06f, -2.118781077e-06f, -2.132447096e-06f, -2.146107759e-06f, -2.159763045e-06f, -2.173412929e-06f, -2.187057389e-06f, -2.200696403e-06f, -2.214329946e-06f, -2.227957996e-06f,
+-2.241580530e-06f, -2.255197525e-06f, -2.268808958e-06f, -2.282414807e-06f, -2.296015048e-06f, -2.309609658e-06f, -2.323198615e-06f, -2.336781896e-06f, -2.350359478e-06f, -2.363931337e-06f,
+-2.377497453e-06f, -2.391057800e-06f, -2.404612358e-06f, -2.418161102e-06f, -2.431704010e-06f, -2.445241060e-06f, -2.458772228e-06f, -2.472297492e-06f, -2.485816830e-06f, -2.499330217e-06f,
+-2.512837633e-06f, -2.526339054e-06f, -2.539834457e-06f, -2.553323820e-06f, -2.566807120e-06f, -2.580284335e-06f, -2.593755442e-06f, -2.607220418e-06f, -2.620679241e-06f, -2.634131888e-06f,
+-2.647578336e-06f, -2.661018564e-06f, -2.674452548e-06f, -2.687880266e-06f, -2.701301696e-06f, -2.714716815e-06f, -2.728125600e-06f, -2.741528030e-06f, -2.754924081e-06f, -2.768313732e-06f,
+-2.781696959e-06f, -2.795073740e-06f, -2.808444054e-06f, -2.821807877e-06f, -2.835165188e-06f, -2.848515963e-06f, -2.861860181e-06f, -2.875197819e-06f, -2.888528856e-06f, -2.901853267e-06f,
+-2.915171033e-06f, -2.928482129e-06f, -2.941786534e-06f, -2.955084226e-06f, -2.968375182e-06f, -2.981659380e-06f, -2.994936799e-06f, -3.008207415e-06f, -3.021471207e-06f, -3.034728152e-06f,
+-3.047978229e-06f, -3.061221414e-06f, -3.074457687e-06f, -3.087687026e-06f, -3.100909407e-06f, -3.114124808e-06f, -3.127333209e-06f, -3.140534587e-06f, -3.153728919e-06f, -3.166916184e-06f,
+-3.180096360e-06f, -3.193269425e-06f, -3.206435357e-06f, -3.219594134e-06f, -3.232745733e-06f, -3.245890134e-06f, -3.259027314e-06f, -3.272157251e-06f, -3.285279924e-06f, -3.298395310e-06f,
+-3.311503388e-06f, -3.324604136e-06f, -3.337697532e-06f, -3.350783555e-06f, -3.363862182e-06f, -3.376933391e-06f, -3.389997162e-06f, -3.403053472e-06f, -3.416102300e-06f, -3.429143624e-06f,
+-3.442177422e-06f, -3.455203672e-06f, -3.468222353e-06f, -3.481233444e-06f, -3.494236922e-06f, -3.507232767e-06f, -3.520220956e-06f, -3.533201467e-06f, -3.546174281e-06f, -3.559139373e-06f,
+-3.572096725e-06f, -3.585046313e-06f, -3.597988116e-06f, -3.610922113e-06f, -3.623848282e-06f, -3.636766602e-06f, -3.649677052e-06f, -3.662579610e-06f, -3.675474255e-06f, -3.688360964e-06f,
+-3.701239718e-06f, -3.714110494e-06f, -3.726973272e-06f, -3.739828029e-06f, -3.752674745e-06f, -3.765513399e-06f, -3.778343968e-06f, -3.791166433e-06f, -3.803980771e-06f, -3.816786962e-06f,
+-3.829584983e-06f, -3.842374815e-06f, -3.855156436e-06f, -3.867929824e-06f, -3.880694959e-06f, -3.893451819e-06f, -3.906200384e-06f, -3.918940632e-06f, -3.931672543e-06f, -3.944396094e-06f,
+-3.957111266e-06f, -3.969818037e-06f, -3.982516386e-06f, -3.995206293e-06f, -4.007887735e-06f, -4.020560693e-06f, -4.033225146e-06f, -4.045881071e-06f, -4.058528450e-06f, -4.071167260e-06f,
+-4.083797481e-06f, -4.096419092e-06f, -4.109032072e-06f, -4.121636400e-06f, -4.134232056e-06f, -4.146819019e-06f, -4.159397268e-06f, -4.171966783e-06f, -4.184527542e-06f, -4.197079525e-06f,
+-4.209622711e-06f, -4.222157080e-06f, -4.234682611e-06f, -4.247199283e-06f, -4.259707076e-06f, -4.272205969e-06f, -4.284695942e-06f, -4.297176974e-06f, -4.309649044e-06f, -4.322112132e-06f,
+-4.334566217e-06f, -4.347011280e-06f, -4.359447299e-06f, -4.371874254e-06f, -4.384292125e-06f, -4.396700891e-06f, -4.409100532e-06f, -4.421491027e-06f, -4.433872357e-06f, -4.446244500e-06f,
+-4.458607437e-06f, -4.470961147e-06f, -4.483305609e-06f, -4.495640805e-06f, -4.507966713e-06f, -4.520283313e-06f, -4.532590584e-06f, -4.544888508e-06f, -4.557177063e-06f, -4.569456230e-06f,
+-4.581725988e-06f, -4.593986317e-06f, -4.606237198e-06f, -4.618478609e-06f, -4.630710531e-06f, -4.642932944e-06f, -4.655145829e-06f, -4.667349164e-06f, -4.679542930e-06f, -4.691727107e-06f,
+-4.703901675e-06f, -4.716066614e-06f, -4.728221904e-06f, -4.740367526e-06f, -4.752503459e-06f, -4.764629684e-06f, -4.776746180e-06f, -4.788852929e-06f, -4.800949909e-06f, -4.813037103e-06f,
+-4.825114488e-06f, -4.837182047e-06f, -4.849239759e-06f, -4.861287604e-06f, -4.873325564e-06f, -4.885353617e-06f, -4.897371745e-06f, -4.909379928e-06f, -4.921378147e-06f, -4.933366381e-06f,
+-4.945344611e-06f, -4.957312819e-06f, -4.969270983e-06f, -4.981219085e-06f, -4.993157105e-06f, -5.005085024e-06f, -5.017002822e-06f, -5.028910481e-06f, -5.040807979e-06f, -5.052695299e-06f,
+-5.064572421e-06f, -5.076439325e-06f, -5.088295992e-06f, -5.100142403e-06f, -5.111978539e-06f, -5.123804380e-06f, -5.135619907e-06f, -5.147425101e-06f, -5.159219942e-06f, -5.171004412e-06f,
+-5.182778492e-06f, -5.194542161e-06f, -5.206295402e-06f, -5.218038194e-06f, -5.229770520e-06f, -5.241492359e-06f, -5.253203694e-06f, -5.264904504e-06f, -5.276594771e-06f, -5.288274475e-06f,
+-5.299943599e-06f, -5.311602122e-06f, -5.323250027e-06f, -5.334887294e-06f, -5.346513904e-06f, -5.358129839e-06f, -5.369735079e-06f, -5.381329607e-06f, -5.392913402e-06f, -5.404486446e-06f,
+-5.416048721e-06f, -5.427600208e-06f, -5.439140888e-06f, -5.450670743e-06f, -5.462189753e-06f, -5.473697901e-06f, -5.485195167e-06f, -5.496681533e-06f, -5.508156980e-06f, -5.519621491e-06f,
+-5.531075045e-06f, -5.542517626e-06f, -5.553949213e-06f, -5.565369790e-06f, -5.576779337e-06f, -5.588177836e-06f, -5.599565268e-06f, -5.610941616e-06f, -5.622306860e-06f, -5.633660983e-06f,
+-5.645003966e-06f, -5.656335791e-06f, -5.667656440e-06f, -5.678965894e-06f, -5.690264135e-06f, -5.701551145e-06f, -5.712826905e-06f, -5.724091399e-06f, -5.735344606e-06f, -5.746586510e-06f,
+-5.757817092e-06f, -5.769036335e-06f, -5.780244219e-06f, -5.791440727e-06f, -5.802625842e-06f, -5.813799544e-06f, -5.824961817e-06f, -5.836112641e-06f, -5.847252000e-06f, -5.858379875e-06f,
+-5.869496249e-06f, -5.880601103e-06f, -5.891694419e-06f, -5.902776181e-06f, -5.913846369e-06f, -5.924904968e-06f, -5.935951957e-06f, -5.946987321e-06f, -5.958011040e-06f, -5.969023098e-06f,
+-5.980023477e-06f, -5.991012159e-06f, -6.001989127e-06f, -6.012954363e-06f, -6.023907849e-06f, -6.034849568e-06f, -6.045779502e-06f, -6.056697634e-06f, -6.067603947e-06f, -6.078498422e-06f,
+-6.089381043e-06f, -6.100251792e-06f, -6.111110651e-06f, -6.121957604e-06f, -6.132792633e-06f, -6.143615721e-06f, -6.154426850e-06f, -6.165226003e-06f, -6.176013163e-06f, -6.186788312e-06f,
+-6.197551434e-06f, -6.208302511e-06f, -6.219041526e-06f, -6.229768463e-06f, -6.240483302e-06f, -6.251186029e-06f, -6.261876625e-06f, -6.272555074e-06f, -6.283221359e-06f, -6.293875462e-06f,
+-6.304517367e-06f, -6.315147056e-06f, -6.325764513e-06f, -6.336369721e-06f, -6.346962663e-06f, -6.357543322e-06f, -6.368111682e-06f, -6.378667724e-06f, -6.389211434e-06f, -6.399742793e-06f,
+-6.410261786e-06f, -6.420768395e-06f, -6.431262603e-06f, -6.441744395e-06f, -6.452213754e-06f, -6.462670662e-06f, -6.473115103e-06f, -6.483547061e-06f, -6.493966519e-06f, -6.504373461e-06f,
+-6.514767869e-06f, -6.525149728e-06f, -6.535519022e-06f, -6.545875733e-06f, -6.556219845e-06f, -6.566551342e-06f, -6.576870208e-06f, -6.587176426e-06f, -6.597469980e-06f, -6.607750853e-06f,
+-6.618019030e-06f, -6.628274494e-06f, -6.638517229e-06f, -6.648747218e-06f, -6.658964446e-06f, -6.669168896e-06f, -6.679360553e-06f, -6.689539399e-06f, -6.699705420e-06f, -6.709858598e-06f,
+-6.719998919e-06f, -6.730126366e-06f, -6.740240922e-06f, -6.750342573e-06f, -6.760431302e-06f, -6.770507093e-06f, -6.780569930e-06f, -6.790619798e-06f, -6.800656681e-06f, -6.810680562e-06f,
+-6.820691427e-06f, -6.830689259e-06f, -6.840674042e-06f, -6.850645761e-06f, -6.860604401e-06f, -6.870549945e-06f, -6.880482378e-06f, -6.890401684e-06f, -6.900307848e-06f, -6.910200854e-06f,
+-6.920080687e-06f, -6.929947330e-06f, -6.939800770e-06f, -6.949640989e-06f, -6.959467974e-06f, -6.969281707e-06f, -6.979082175e-06f, -6.988869361e-06f, -6.998643250e-06f, -7.008403827e-06f,
+-7.018151077e-06f, -7.027884985e-06f, -7.037605534e-06f, -7.047312710e-06f, -7.057006498e-06f, -7.066686883e-06f, -7.076353849e-06f, -7.086007381e-06f, -7.095647465e-06f, -7.105274084e-06f,
+-7.114887225e-06f, -7.124486872e-06f, -7.134073010e-06f, -7.143645624e-06f, -7.153204700e-06f, -7.162750222e-06f, -7.172282175e-06f, -7.181800545e-06f, -7.191305317e-06f, -7.200796475e-06f,
+-7.210274006e-06f, -7.219737894e-06f, -7.229188125e-06f, -7.238624684e-06f, -7.248047556e-06f, -7.257456727e-06f, -7.266852182e-06f, -7.276233906e-06f, -7.285601885e-06f, -7.294956104e-06f,
+-7.304296549e-06f, -7.313623205e-06f, -7.322936058e-06f, -7.332235093e-06f, -7.341520296e-06f, -7.350791653e-06f, -7.360049149e-06f, -7.369292769e-06f, -7.378522500e-06f, -7.387738327e-06f,
+-7.396940236e-06f, -7.406128212e-06f, -7.415302242e-06f, -7.424462312e-06f, -7.433608406e-06f, -7.442740511e-06f, -7.451858613e-06f, -7.460962698e-06f, -7.470052751e-06f, -7.479128759e-06f,
+-7.488190707e-06f, -7.497238582e-06f, -7.506272370e-06f, -7.515292057e-06f, -7.524297628e-06f, -7.533289070e-06f, -7.542266369e-06f, -7.551229512e-06f, -7.560178484e-06f, -7.569113272e-06f,
+-7.578033861e-06f, -7.586940239e-06f, -7.595832391e-06f, -7.604710305e-06f, -7.613573965e-06f, -7.622423359e-06f, -7.631258473e-06f, -7.640079293e-06f, -7.648885807e-06f, -7.657677999e-06f,
+-7.666455858e-06f, -7.675219369e-06f, -7.683968519e-06f, -7.692703294e-06f, -7.701423682e-06f, -7.710129669e-06f, -7.718821241e-06f, -7.727498385e-06f, -7.736161089e-06f, -7.744809338e-06f,
+-7.753443119e-06f, -7.762062420e-06f, -7.770667227e-06f, -7.779257527e-06f, -7.787833307e-06f, -7.796394554e-06f, -7.804941255e-06f, -7.813473396e-06f, -7.821990965e-06f, -7.830493949e-06f,
+-7.838982334e-06f, -7.847456108e-06f, -7.855915259e-06f, -7.864359772e-06f, -7.872789636e-06f, -7.881204837e-06f, -7.889605363e-06f, -7.897991200e-06f, -7.906362337e-06f, -7.914718760e-06f,
+-7.923060457e-06f, -7.931387415e-06f, -7.939699622e-06f, -7.947997064e-06f, -7.956279730e-06f, -7.964547606e-06f, -7.972800681e-06f, -7.981038941e-06f, -7.989262375e-06f, -7.997470969e-06f,
+-8.005664712e-06f, -8.013843591e-06f, -8.022007594e-06f, -8.030156708e-06f, -8.038290921e-06f, -8.046410221e-06f, -8.054514596e-06f, -8.062604032e-06f, -8.070678519e-06f, -8.078738044e-06f,
+-8.086782595e-06f, -8.094812160e-06f, -8.102826726e-06f, -8.110826281e-06f, -8.118810815e-06f, -8.126780314e-06f, -8.134734766e-06f, -8.142674160e-06f, -8.150598484e-06f, -8.158507726e-06f,
+-8.166401873e-06f, -8.174280915e-06f, -8.182144839e-06f, -8.189993634e-06f, -8.197827288e-06f, -8.205645788e-06f, -8.213449124e-06f, -8.221237284e-06f, -8.229010256e-06f, -8.236768028e-06f,
+-8.244510589e-06f, -8.252237928e-06f, -8.259950032e-06f, -8.267646891e-06f, -8.275328493e-06f, -8.282994826e-06f, -8.290645878e-06f, -8.298281640e-06f, -8.305902099e-06f, -8.313507243e-06f,
+-8.321097062e-06f, -8.328671545e-06f, -8.336230680e-06f, -8.343774455e-06f, -8.351302860e-06f, -8.358815883e-06f, -8.366313514e-06f, -8.373795741e-06f, -8.381262554e-06f, -8.388713940e-06f,
+-8.396149889e-06f, -8.403570391e-06f, -8.410975433e-06f, -8.418365006e-06f, -8.425739098e-06f, -8.433097698e-06f, -8.440440796e-06f, -8.447768381e-06f, -8.455080441e-06f, -8.462376967e-06f,
+-8.469657947e-06f, -8.476923370e-06f, -8.484173227e-06f, -8.491407505e-06f, -8.498626196e-06f, -8.505829287e-06f, -8.513016769e-06f, -8.520188631e-06f, -8.527344863e-06f, -8.534485453e-06f,
+-8.541610392e-06f, -8.548719669e-06f, -8.555813273e-06f, -8.562891195e-06f, -8.569953424e-06f, -8.576999949e-06f, -8.584030761e-06f, -8.591045849e-06f, -8.598045202e-06f, -8.605028812e-06f,
+-8.611996666e-06f, -8.618948756e-06f, -8.625885071e-06f, -8.632805601e-06f, -8.639710337e-06f, -8.646599267e-06f, -8.653472382e-06f, -8.660329673e-06f, -8.667171128e-06f, -8.673996738e-06f,
+-8.680806494e-06f, -8.687600385e-06f, -8.694378402e-06f, -8.701140535e-06f, -8.707886773e-06f, -8.714617108e-06f, -8.721331529e-06f, -8.728030027e-06f, -8.734712593e-06f, -8.741379215e-06f,
+-8.748029886e-06f, -8.754664596e-06f, -8.761283334e-06f, -8.767886091e-06f, -8.774472858e-06f, -8.781043626e-06f, -8.787598384e-06f, -8.794137124e-06f, -8.800659837e-06f, -8.807166512e-06f,
+-8.813657140e-06f, -8.820131713e-06f, -8.826590221e-06f, -8.833032655e-06f, -8.839459005e-06f, -8.845869263e-06f, -8.852263419e-06f, -8.858641464e-06f, -8.865003389e-06f, -8.871349185e-06f,
+-8.877678843e-06f, -8.883992354e-06f, -8.890289709e-06f, -8.896570899e-06f, -8.902835916e-06f, -8.909084749e-06f, -8.915317391e-06f, -8.921533833e-06f, -8.927734066e-06f, -8.933918081e-06f,
+-8.940085869e-06f, -8.946237422e-06f, -8.952372730e-06f, -8.958491787e-06f, -8.964594582e-06f, -8.970681107e-06f, -8.976751353e-06f, -8.982805313e-06f, -8.988842977e-06f, -8.994864338e-06f,
+-9.000869386e-06f, -9.006858113e-06f, -9.012830511e-06f, -9.018786572e-06f, -9.024726287e-06f, -9.030649647e-06f, -9.036556646e-06f, -9.042447274e-06f, -9.048321523e-06f, -9.054179385e-06f,
+-9.060020852e-06f, -9.065845916e-06f, -9.071654568e-06f, -9.077446801e-06f, -9.083222607e-06f, -9.088981977e-06f, -9.094724904e-06f, -9.100451379e-06f, -9.106161396e-06f, -9.111854945e-06f,
+-9.117532020e-06f, -9.123192611e-06f, -9.128836712e-06f, -9.134464315e-06f, -9.140075412e-06f, -9.145669994e-06f, -9.151248056e-06f, -9.156809588e-06f, -9.162354584e-06f, -9.167883035e-06f,
+-9.173394935e-06f, -9.178890275e-06f, -9.184369049e-06f, -9.189831248e-06f, -9.195276865e-06f, -9.200705894e-06f, -9.206118325e-06f, -9.211514153e-06f, -9.216893370e-06f, -9.222255968e-06f,
+-9.227601940e-06f, -9.232931280e-06f, -9.238243979e-06f, -9.243540031e-06f, -9.248819428e-06f, -9.254082164e-06f, -9.259328232e-06f, -9.264557623e-06f, -9.269770332e-06f, -9.274966351e-06f,
+-9.280145673e-06f, -9.285308292e-06f, -9.290454200e-06f, -9.295583391e-06f, -9.300695857e-06f, -9.305791593e-06f, -9.310870591e-06f, -9.315932844e-06f, -9.320978346e-06f, -9.326007090e-06f,
+-9.331019069e-06f, -9.336014277e-06f, -9.340992707e-06f, -9.345954352e-06f, -9.350899207e-06f, -9.355827264e-06f, -9.360738517e-06f, -9.365632959e-06f, -9.370510585e-06f, -9.375371388e-06f,
+-9.380215360e-06f, -9.385042497e-06f, -9.389852792e-06f, -9.394646238e-06f, -9.399422829e-06f, -9.404182559e-06f, -9.408925422e-06f, -9.413651412e-06f, -9.418360522e-06f, -9.423052747e-06f,
+-9.427728080e-06f, -9.432386516e-06f, -9.437028047e-06f, -9.441652670e-06f, -9.446260376e-06f, -9.450851161e-06f, -9.455425019e-06f, -9.459981944e-06f, -9.464521929e-06f, -9.469044970e-06f,
+-9.473551060e-06f, -9.478040194e-06f, -9.482512365e-06f, -9.486967569e-06f, -9.491405800e-06f, -9.495827052e-06f, -9.500231319e-06f, -9.504618596e-06f, -9.508988877e-06f, -9.513342158e-06f,
+-9.517678431e-06f, -9.521997693e-06f, -9.526299938e-06f, -9.530585159e-06f, -9.534853353e-06f, -9.539104513e-06f, -9.543338634e-06f, -9.547555712e-06f, -9.551755740e-06f, -9.555938714e-06f,
+-9.560104628e-06f, -9.564253478e-06f, -9.568385258e-06f, -9.572499963e-06f, -9.576597588e-06f, -9.580678129e-06f, -9.584741579e-06f, -9.588787935e-06f, -9.592817191e-06f, -9.596829343e-06f,
+-9.600824385e-06f, -9.604802312e-06f, -9.608763121e-06f, -9.612706806e-06f, -9.616633362e-06f, -9.620542785e-06f, -9.624435070e-06f, -9.628310212e-06f, -9.632168207e-06f, -9.636009051e-06f,
+-9.639832738e-06f, -9.643639264e-06f, -9.647428624e-06f, -9.651200815e-06f, -9.654955832e-06f, -9.658693670e-06f, -9.662414324e-06f, -9.666117792e-06f, -9.669804067e-06f, -9.673473147e-06f,
+-9.677125027e-06f, -9.680759702e-06f, -9.684377168e-06f, -9.687977421e-06f, -9.691560458e-06f, -9.695126273e-06f, -9.698674864e-06f, -9.702206225e-06f, -9.705720353e-06f, -9.709217244e-06f,
+-9.712696894e-06f, -9.716159299e-06f, -9.719604455e-06f, -9.723032358e-06f, -9.726443004e-06f, -9.729836391e-06f, -9.733212513e-06f, -9.736571367e-06f, -9.739912949e-06f, -9.743237257e-06f,
+-9.746544285e-06f, -9.749834031e-06f, -9.753106491e-06f, -9.756361661e-06f, -9.759599538e-06f, -9.762820119e-06f, -9.766023399e-06f, -9.769209376e-06f, -9.772378046e-06f, -9.775529405e-06f,
+-9.778663451e-06f, -9.781780180e-06f, -9.784879588e-06f, -9.787961673e-06f, -9.791026431e-06f, -9.794073860e-06f, -9.797103955e-06f, -9.800116714e-06f, -9.803112134e-06f, -9.806090212e-06f,
+-9.809050944e-06f, -9.811994328e-06f, -9.814920360e-06f, -9.817829038e-06f, -9.820720359e-06f, -9.823594319e-06f, -9.826450917e-06f, -9.829290149e-06f, -9.832112013e-06f, -9.834916505e-06f,
+-9.837703623e-06f, -9.840473364e-06f, -9.843225725e-06f, -9.845960705e-06f, -9.848678300e-06f, -9.851378508e-06f, -9.854061326e-06f, -9.856726751e-06f, -9.859374782e-06f, -9.862005416e-06f,
+-9.864618649e-06f, -9.867214481e-06f, -9.869792908e-06f, -9.872353929e-06f, -9.874897540e-06f, -9.877423740e-06f, -9.879932526e-06f, -9.882423896e-06f, -9.884897849e-06f, -9.887354381e-06f,
+-9.889793491e-06f, -9.892215177e-06f, -9.894619436e-06f, -9.897006266e-06f, -9.899375667e-06f, -9.901727634e-06f, -9.904062168e-06f, -9.906379265e-06f, -9.908678924e-06f, -9.910961143e-06f,
+-9.913225920e-06f, -9.915473253e-06f, -9.917703141e-06f, -9.919915582e-06f, -9.922110574e-06f, -9.924288116e-06f, -9.926448205e-06f, -9.928590841e-06f, -9.930716022e-06f, -9.932823746e-06f,
+-9.934914011e-06f, -9.936986817e-06f, -9.939042161e-06f, -9.941080043e-06f, -9.943100461e-06f, -9.945103413e-06f, -9.947088898e-06f, -9.949056915e-06f, -9.951007463e-06f, -9.952940541e-06f,
+-9.954856147e-06f, -9.956754279e-06f, -9.958634938e-06f, -9.960498121e-06f, -9.962343828e-06f, -9.964172058e-06f, -9.965982809e-06f, -9.967776081e-06f, -9.969551873e-06f, -9.971310183e-06f,
+-9.973051011e-06f, -9.974774356e-06f, -9.976480218e-06f, -9.978168594e-06f, -9.979839485e-06f, -9.981492890e-06f, -9.983128807e-06f, -9.984747237e-06f, -9.986348179e-06f, -9.987931632e-06f,
+-9.989497595e-06f, -9.991046068e-06f, -9.992577051e-06f, -9.994090542e-06f, -9.995586542e-06f, -9.997065049e-06f, -9.998526064e-06f, -9.999969586e-06f, -1.000139562e-05f, -1.000280415e-05f,
+-1.000419519e-05f, -1.000556874e-05f, -1.000692479e-05f, -1.000826335e-05f, -1.000958441e-05f, -1.001088798e-05f, -1.001217406e-05f, -1.001344264e-05f, -1.001469372e-05f, -1.001592731e-05f,
+-1.001714340e-05f, -1.001834200e-05f, -1.001952310e-05f, -1.002068671e-05f, -1.002183282e-05f, -1.002296144e-05f, -1.002407256e-05f, -1.002516619e-05f, -1.002624233e-05f, -1.002730097e-05f,
+-1.002834212e-05f, -1.002936578e-05f, -1.003037194e-05f, -1.003136061e-05f, -1.003233179e-05f, -1.003328547e-05f, -1.003422167e-05f, -1.003514038e-05f, -1.003604159e-05f, -1.003692532e-05f,
+-1.003779156e-05f, -1.003864031e-05f, -1.003947157e-05f, -1.004028535e-05f, -1.004108164e-05f, -1.004186044e-05f, -1.004262176e-05f, -1.004336560e-05f, -1.004409196e-05f, -1.004480083e-05f,
+-1.004549222e-05f, -1.004616613e-05f, -1.004682257e-05f, -1.004746152e-05f, -1.004808300e-05f, -1.004868700e-05f, -1.004927353e-05f, -1.004984258e-05f, -1.005039417e-05f, -1.005092828e-05f,
+-1.005144492e-05f, -1.005194409e-05f, -1.005242579e-05f, -1.005289003e-05f, -1.005333680e-05f, -1.005376611e-05f, -1.005417796e-05f, -1.005457235e-05f, -1.005494928e-05f, -1.005530875e-05f,
+-1.005565076e-05f, -1.005597532e-05f, -1.005628243e-05f, -1.005657208e-05f, -1.005684429e-05f, -1.005709904e-05f, -1.005733635e-05f, -1.005755622e-05f, -1.005775864e-05f, -1.005794362e-05f,
+-1.005811117e-05f, -1.005826127e-05f, -1.005839394e-05f, -1.005850917e-05f, -1.005860698e-05f, -1.005868735e-05f, -1.005875030e-05f, -1.005879582e-05f, -1.005882391e-05f, -1.005883459e-05f,
+-1.005882784e-05f, -1.005880368e-05f, -1.005876210e-05f, -1.005870311e-05f, -1.005862671e-05f, -1.005853290e-05f, -1.005842169e-05f, -1.005829307e-05f, -1.005814705e-05f, -1.005798363e-05f,
+-1.005780281e-05f, -1.005760460e-05f, -1.005738900e-05f, -1.005715600e-05f, -1.005690563e-05f, -1.005663786e-05f, -1.005635272e-05f, -1.005605020e-05f, -1.005573030e-05f, -1.005539302e-05f,
+-1.005503838e-05f, -1.005466637e-05f, -1.005427699e-05f, -1.005387025e-05f, -1.005344615e-05f, -1.005300469e-05f, -1.005254588e-05f, -1.005206972e-05f, -1.005157621e-05f, -1.005106536e-05f,
+-1.005053716e-05f, -1.004999162e-05f, -1.004942875e-05f, -1.004884855e-05f, -1.004825101e-05f, -1.004763615e-05f, -1.004700397e-05f, -1.004635446e-05f, -1.004568764e-05f, -1.004500351e-05f,
+-1.004430206e-05f, -1.004358331e-05f, -1.004284726e-05f, -1.004209390e-05f, -1.004132325e-05f, -1.004053530e-05f, -1.003973007e-05f, -1.003890755e-05f, -1.003806774e-05f, -1.003721066e-05f,
+-1.003633630e-05f, -1.003544467e-05f, -1.003453577e-05f, -1.003360960e-05f, -1.003266618e-05f, -1.003170550e-05f, -1.003072756e-05f, -1.002973238e-05f, -1.002871995e-05f, -1.002769027e-05f,
+-1.002664336e-05f, -1.002557922e-05f, -1.002449785e-05f, -1.002339925e-05f, -1.002228342e-05f, -1.002115038e-05f, -1.002000013e-05f, -1.001883267e-05f, -1.001764800e-05f, -1.001644613e-05f,
+-1.001522706e-05f, -1.001399080e-05f, -1.001273735e-05f, -1.001146671e-05f, -1.001017890e-05f, -1.000887391e-05f, -1.000755175e-05f, -1.000621242e-05f, -1.000485593e-05f, -1.000348228e-05f,
+-1.000209148e-05f, -1.000068352e-05f, -9.999258427e-06f, -9.997816189e-06f, -9.996356817e-06f, -9.994880313e-06f, -9.993386684e-06f, -9.991875933e-06f, -9.990348065e-06f, -9.988803085e-06f,
+-9.987240998e-06f, -9.985661809e-06f, -9.984065521e-06f, -9.982452142e-06f, -9.980821674e-06f, -9.979174123e-06f, -9.977509495e-06f, -9.975827794e-06f, -9.974129024e-06f, -9.972413192e-06f,
+-9.970680302e-06f, -9.968930359e-06f, -9.967163368e-06f, -9.965379335e-06f, -9.963578265e-06f, -9.961760162e-06f, -9.959925033e-06f, -9.958072882e-06f, -9.956203715e-06f, -9.954317537e-06f,
+-9.952414353e-06f, -9.950494170e-06f, -9.948556991e-06f, -9.946602823e-06f, -9.944631671e-06f, -9.942643541e-06f, -9.940638438e-06f, -9.938616368e-06f, -9.936577336e-06f, -9.934521348e-06f,
+-9.932448410e-06f, -9.930358527e-06f, -9.928251704e-06f, -9.926127949e-06f, -9.923987266e-06f, -9.921829661e-06f, -9.919655140e-06f, -9.917463709e-06f, -9.915255374e-06f, -9.913030141e-06f,
+-9.910788015e-06f, -9.908529002e-06f, -9.906253110e-06f, -9.903960342e-06f, -9.901650707e-06f, -9.899324209e-06f, -9.896980855e-06f, -9.894620651e-06f, -9.892243602e-06f, -9.889849717e-06f,
+-9.887438999e-06f, -9.885011457e-06f, -9.882567095e-06f, -9.880105921e-06f, -9.877627940e-06f, -9.875133159e-06f, -9.872621585e-06f, -9.870093223e-06f, -9.867548081e-06f, -9.864986165e-06f,
+-9.862407480e-06f, -9.859812035e-06f, -9.857199834e-06f, -9.854570886e-06f, -9.851925196e-06f, -9.849262771e-06f, -9.846583618e-06f, -9.843887743e-06f, -9.841175154e-06f, -9.838445857e-06f,
+-9.835699858e-06f, -9.832937165e-06f, -9.830157784e-06f, -9.827361723e-06f, -9.824548988e-06f, -9.821719586e-06f, -9.818873524e-06f, -9.816010809e-06f, -9.813131448e-06f, -9.810235448e-06f,
+-9.807322816e-06f, -9.804393559e-06f, -9.801447685e-06f, -9.798485200e-06f, -9.795506112e-06f, -9.792510427e-06f, -9.789498154e-06f, -9.786469299e-06f, -9.783423870e-06f, -9.780361874e-06f,
+-9.777283318e-06f, -9.774188209e-06f, -9.771076556e-06f, -9.767948365e-06f, -9.764803644e-06f, -9.761642400e-06f, -9.758464642e-06f, -9.755270376e-06f, -9.752059609e-06f, -9.748832351e-06f,
+-9.745588607e-06f, -9.742328387e-06f, -9.739051697e-06f, -9.735758545e-06f, -9.732448939e-06f, -9.729122887e-06f, -9.725780397e-06f, -9.722421476e-06f, -9.719046132e-06f, -9.715654373e-06f,
+-9.712246207e-06f, -9.708821642e-06f, -9.705380685e-06f, -9.701923345e-06f, -9.698449631e-06f, -9.694959549e-06f, -9.691453107e-06f, -9.687930315e-06f, -9.684391180e-06f, -9.680835710e-06f,
+-9.677263914e-06f, -9.673675799e-06f, -9.670071373e-06f, -9.666450646e-06f, -9.662813625e-06f, -9.659160319e-06f, -9.655490736e-06f, -9.651804884e-06f, -9.648102772e-06f, -9.644384408e-06f,
+-9.640649800e-06f, -9.636898958e-06f, -9.633131889e-06f, -9.629348602e-06f, -9.625549106e-06f, -9.621733409e-06f, -9.617901519e-06f, -9.614053446e-06f, -9.610189199e-06f, -9.606308784e-06f,
+-9.602412213e-06f, -9.598499492e-06f, -9.594570632e-06f, -9.590625640e-06f, -9.586664526e-06f, -9.582687298e-06f, -9.578693965e-06f, -9.574684537e-06f, -9.570659022e-06f, -9.566617429e-06f,
+-9.562559767e-06f, -9.558486045e-06f, -9.554396272e-06f, -9.550290457e-06f, -9.546168610e-06f, -9.542030738e-06f, -9.537876853e-06f, -9.533706962e-06f, -9.529521074e-06f, -9.525319200e-06f,
+-9.521101348e-06f, -9.516867528e-06f, -9.512617749e-06f, -9.508352020e-06f, -9.504070350e-06f, -9.499772750e-06f, -9.495459227e-06f, -9.491129793e-06f, -9.486784455e-06f, -9.482423225e-06f,
+-9.478046111e-06f, -9.473653122e-06f, -9.469244269e-06f, -9.464819561e-06f, -9.460379007e-06f, -9.455922617e-06f, -9.451450402e-06f, -9.446962370e-06f, -9.442458531e-06f, -9.437938895e-06f,
+-9.433403472e-06f, -9.428852271e-06f, -9.424285303e-06f, -9.419702578e-06f, -9.415104104e-06f, -9.410489893e-06f, -9.405859953e-06f, -9.401214295e-06f, -9.396552930e-06f, -9.391875866e-06f,
+-9.387183114e-06f, -9.382474685e-06f, -9.377750587e-06f, -9.373010832e-06f, -9.368255429e-06f, -9.363484388e-06f, -9.358697720e-06f, -9.353895436e-06f, -9.349077544e-06f, -9.344244056e-06f,
+-9.339394981e-06f, -9.334530331e-06f, -9.329650115e-06f, -9.324754344e-06f, -9.319843028e-06f, -9.314916177e-06f, -9.309973803e-06f, -9.305015915e-06f, -9.300042524e-06f, -9.295053641e-06f,
+-9.290049276e-06f, -9.285029439e-06f, -9.279994142e-06f, -9.274943395e-06f, -9.269877208e-06f, -9.264795592e-06f, -9.259698559e-06f, -9.254586117e-06f, -9.249458280e-06f, -9.244315056e-06f,
+-9.239156458e-06f, -9.233982495e-06f, -9.228793180e-06f, -9.223588521e-06f, -9.218368531e-06f, -9.213133221e-06f, -9.207882601e-06f, -9.202616682e-06f, -9.197335476e-06f, -9.192038992e-06f,
+-9.186727244e-06f, -9.181400241e-06f, -9.176057994e-06f, -9.170700515e-06f, -9.165327816e-06f, -9.159939906e-06f, -9.154536797e-06f, -9.149118501e-06f, -9.143685029e-06f, -9.138236392e-06f,
+-9.132772602e-06f, -9.127293669e-06f, -9.121799605e-06f, -9.116290421e-06f, -9.110766130e-06f, -9.105226741e-06f, -9.099672268e-06f, -9.094102720e-06f, -9.088518111e-06f, -9.082918450e-06f,
+-9.077303751e-06f, -9.071674023e-06f, -9.066029280e-06f, -9.060369533e-06f, -9.054694792e-06f, -9.049005071e-06f, -9.043300380e-06f, -9.037580732e-06f, -9.031846138e-06f, -9.026096610e-06f,
+-9.020332159e-06f, -9.014552798e-06f, -9.008758539e-06f, -9.002949392e-06f, -8.997125371e-06f, -8.991286487e-06f, -8.985432752e-06f, -8.979564178e-06f, -8.973680777e-06f, -8.967782561e-06f,
+-8.961869542e-06f, -8.955941732e-06f, -8.949999143e-06f, -8.944041788e-06f, -8.938069678e-06f, -8.932082826e-06f, -8.926081243e-06f, -8.920064943e-06f, -8.914033937e-06f, -8.907988237e-06f,
+-8.901927856e-06f, -8.895852807e-06f, -8.889763100e-06f, -8.883658750e-06f, -8.877539768e-06f, -8.871406166e-06f, -8.865257958e-06f, -8.859095154e-06f, -8.852917769e-06f, -8.846725815e-06f,
+-8.840519303e-06f, -8.834298247e-06f, -8.828062658e-06f, -8.821812551e-06f, -8.815547937e-06f, -8.809268829e-06f, -8.802975239e-06f, -8.796667181e-06f, -8.790344666e-06f, -8.784007709e-06f,
+-8.777656320e-06f, -8.771290515e-06f, -8.764910304e-06f, -8.758515701e-06f, -8.752106719e-06f, -8.745683370e-06f, -8.739245669e-06f, -8.732793626e-06f, -8.726327256e-06f, -8.719846571e-06f,
+-8.713351585e-06f, -8.706842310e-06f, -8.700318760e-06f, -8.693780947e-06f, -8.687228884e-06f, -8.680662585e-06f, -8.674082063e-06f, -8.667487331e-06f, -8.660878402e-06f, -8.654255290e-06f,
+-8.647618007e-06f, -8.640966566e-06f, -8.634300982e-06f, -8.627621267e-06f, -8.620927435e-06f, -8.614219499e-06f, -8.607497472e-06f, -8.600761368e-06f, -8.594011200e-06f, -8.587246982e-06f,
+-8.580468727e-06f, -8.573676448e-06f, -8.566870159e-06f, -8.560049874e-06f, -8.553215606e-06f, -8.546367368e-06f, -8.539505175e-06f, -8.532629040e-06f, -8.525738976e-06f, -8.518834997e-06f,
+-8.511917117e-06f, -8.504985349e-06f, -8.498039708e-06f, -8.491080206e-06f, -8.484106858e-06f, -8.477119678e-06f, -8.470118679e-06f, -8.463103876e-06f, -8.456075281e-06f, -8.449032909e-06f,
+-8.441976774e-06f, -8.434906889e-06f, -8.427823270e-06f, -8.420725928e-06f, -8.413614880e-06f, -8.406490138e-06f, -8.399351717e-06f, -8.392199630e-06f, -8.385033892e-06f, -8.377854517e-06f,
+-8.370661519e-06f, -8.363454912e-06f, -8.356234711e-06f, -8.349000929e-06f, -8.341753580e-06f, -8.334492680e-06f, -8.327218242e-06f, -8.319930280e-06f, -8.312628809e-06f, -8.305313843e-06f,
+-8.297985396e-06f, -8.290643483e-06f, -8.283288118e-06f, -8.275919316e-06f, -8.268537090e-06f, -8.261141456e-06f, -8.253732428e-06f, -8.246310021e-06f, -8.238874248e-06f, -8.231425124e-06f,
+-8.223962665e-06f, -8.216486884e-06f, -8.208997796e-06f, -8.201495416e-06f, -8.193979758e-06f, -8.186450837e-06f, -8.178908668e-06f, -8.171353265e-06f, -8.163784644e-06f, -8.156202818e-06f,
+-8.148607803e-06f, -8.140999613e-06f, -8.133378264e-06f, -8.125743769e-06f, -8.118096145e-06f, -8.110435405e-06f, -8.102761565e-06f, -8.095074640e-06f, -8.087374644e-06f, -8.079661592e-06f,
+-8.071935500e-06f, -8.064196383e-06f, -8.056444254e-06f, -8.048679131e-06f, -8.040901026e-06f, -8.033109957e-06f, -8.025305937e-06f, -8.017488982e-06f, -8.009659107e-06f, -8.001816327e-06f,
+-7.993960657e-06f, -7.986092113e-06f, -7.978210709e-06f, -7.970316462e-06f, -7.962409385e-06f, -7.954489496e-06f, -7.946556808e-06f, -7.938611337e-06f, -7.930653098e-06f, -7.922682108e-06f,
+-7.914698381e-06f, -7.906701932e-06f, -7.898692777e-06f, -7.890670932e-06f, -7.882636412e-06f, -7.874589232e-06f, -7.866529408e-06f, -7.858456956e-06f, -7.850371891e-06f, -7.842274228e-06f,
+-7.834163983e-06f, -7.826041172e-06f, -7.817905811e-06f, -7.809757915e-06f, -7.801597499e-06f, -7.793424579e-06f, -7.785239172e-06f, -7.777041293e-06f, -7.768830957e-06f, -7.760608180e-06f,
+-7.752372979e-06f, -7.744125368e-06f, -7.735865364e-06f, -7.727592983e-06f, -7.719308240e-06f, -7.711011151e-06f, -7.702701732e-06f, -7.694380000e-06f, -7.686045970e-06f, -7.677699657e-06f,
+-7.669341079e-06f, -7.660970250e-06f, -7.652587188e-06f, -7.644191907e-06f, -7.635784425e-06f, -7.627364757e-06f, -7.618932919e-06f, -7.610488927e-06f, -7.602032798e-06f, -7.593564547e-06f,
+-7.585084192e-06f, -7.576591747e-06f, -7.568087229e-06f, -7.559570655e-06f, -7.551042041e-06f, -7.542501402e-06f, -7.533948756e-06f, -7.525384118e-06f, -7.516807505e-06f, -7.508218933e-06f,
+-7.499618418e-06f, -7.491005978e-06f, -7.482381627e-06f, -7.473745384e-06f, -7.465097263e-06f, -7.456437282e-06f, -7.447765458e-06f, -7.439081805e-06f, -7.430386342e-06f, -7.421679084e-06f,
+-7.412960049e-06f, -7.404229252e-06f, -7.395486710e-06f, -7.386732440e-06f, -7.377966458e-06f, -7.369188782e-06f, -7.360399427e-06f, -7.351598411e-06f, -7.342785750e-06f, -7.333961460e-06f,
+-7.325125559e-06f, -7.316278064e-06f, -7.307418990e-06f, -7.298548355e-06f, -7.289666176e-06f, -7.280772469e-06f, -7.271867252e-06f, -7.262950540e-06f, -7.254022352e-06f, -7.245082703e-06f,
+-7.236131611e-06f, -7.227169093e-06f, -7.218195166e-06f, -7.209209846e-06f, -7.200213150e-06f, -7.191205096e-06f, -7.182185701e-06f, -7.173154981e-06f, -7.164112954e-06f, -7.155059636e-06f,
+-7.145995045e-06f, -7.136919198e-06f, -7.127832112e-06f, -7.118733804e-06f, -7.109624292e-06f, -7.100503592e-06f, -7.091371721e-06f, -7.082228697e-06f, -7.073074537e-06f, -7.063909259e-06f,
+-7.054732879e-06f, -7.045545415e-06f, -7.036346884e-06f, -7.027137303e-06f, -7.017916690e-06f, -7.008685062e-06f, -6.999442436e-06f, -6.990188830e-06f, -6.980924261e-06f, -6.971648747e-06f,
+-6.962362305e-06f, -6.953064952e-06f, -6.943756706e-06f, -6.934437584e-06f, -6.925107604e-06f, -6.915766784e-06f, -6.906415140e-06f, -6.897052691e-06f, -6.887679454e-06f, -6.878295446e-06f,
+-6.868900685e-06f, -6.859495189e-06f, -6.850078976e-06f, -6.840652062e-06f, -6.831214466e-06f, -6.821766205e-06f, -6.812307298e-06f, -6.802837761e-06f, -6.793357612e-06f, -6.783866870e-06f,
+-6.774365551e-06f, -6.764853675e-06f, -6.755331257e-06f, -6.745798317e-06f, -6.736254872e-06f, -6.726700940e-06f, -6.717136539e-06f, -6.707561686e-06f, -6.697976400e-06f, -6.688380698e-06f,
+-6.678774598e-06f, -6.669158119e-06f, -6.659531278e-06f, -6.649894093e-06f, -6.640246582e-06f, -6.630588763e-06f, -6.620920655e-06f, -6.611242274e-06f, -6.601553640e-06f, -6.591854770e-06f,
+-6.582145682e-06f, -6.572426395e-06f, -6.562696926e-06f, -6.552957294e-06f, -6.543207516e-06f, -6.533447611e-06f, -6.523677598e-06f, -6.513897493e-06f, -6.504107316e-06f, -6.494307085e-06f,
+-6.484496817e-06f, -6.474676532e-06f, -6.464846246e-06f, -6.455005980e-06f, -6.445155750e-06f, -6.435295575e-06f, -6.425425474e-06f, -6.415545465e-06f, -6.405655566e-06f, -6.395755795e-06f,
+-6.385846172e-06f, -6.375926713e-06f, -6.365997438e-06f, -6.356058366e-06f, -6.346109514e-06f, -6.336150900e-06f, -6.326182545e-06f, -6.316204465e-06f, -6.306216679e-06f, -6.296219207e-06f,
+-6.286212066e-06f, -6.276195274e-06f, -6.266168852e-06f, -6.256132816e-06f, -6.246087186e-06f, -6.236031980e-06f, -6.225967217e-06f, -6.215892916e-06f, -6.205809095e-06f, -6.195715772e-06f,
+-6.185612967e-06f, -6.175500697e-06f, -6.165378983e-06f, -6.155247842e-06f, -6.145107293e-06f, -6.134957356e-06f, -6.124798047e-06f, -6.114629388e-06f, -6.104451395e-06f, -6.094264089e-06f,
+-6.084067487e-06f, -6.073861609e-06f, -6.063646473e-06f, -6.053422099e-06f, -6.043188504e-06f, -6.032945709e-06f, -6.022693732e-06f, -6.012432591e-06f, -6.002162306e-06f, -5.991882896e-06f,
+-5.981594379e-06f, -5.971296775e-06f, -5.960990102e-06f, -5.950674380e-06f, -5.940349627e-06f, -5.930015863e-06f, -5.919673106e-06f, -5.909321376e-06f, -5.898960691e-06f, -5.888591071e-06f,
+-5.878212535e-06f, -5.867825101e-06f, -5.857428789e-06f, -5.847023618e-06f, -5.836609608e-06f, -5.826186776e-06f, -5.815755143e-06f, -5.805314728e-06f, -5.794865549e-06f, -5.784407626e-06f,
+-5.773940978e-06f, -5.763465625e-06f, -5.752981585e-06f, -5.742488878e-06f, -5.731987523e-06f, -5.721477539e-06f, -5.710958946e-06f, -5.700431763e-06f, -5.689896008e-06f, -5.679351703e-06f,
+-5.668798865e-06f, -5.658237515e-06f, -5.647667670e-06f, -5.637089352e-06f, -5.626502579e-06f, -5.615907371e-06f, -5.605303747e-06f, -5.594691726e-06f, -5.584071328e-06f, -5.573442572e-06f,
+-5.562805478e-06f, -5.552160066e-06f, -5.541506354e-06f, -5.530844362e-06f, -5.520174110e-06f, -5.509495617e-06f, -5.498808903e-06f, -5.488113987e-06f, -5.477410889e-06f, -5.466699629e-06f,
+-5.455980225e-06f, -5.445252698e-06f, -5.434517066e-06f, -5.423773351e-06f, -5.413021571e-06f, -5.402261745e-06f, -5.391493895e-06f, -5.380718038e-06f, -5.369934196e-06f, -5.359142387e-06f,
+-5.348342631e-06f, -5.337534948e-06f, -5.326719358e-06f, -5.315895880e-06f, -5.305064534e-06f, -5.294225340e-06f, -5.283378318e-06f, -5.272523487e-06f, -5.261660867e-06f, -5.250790478e-06f,
+-5.239912340e-06f, -5.229026472e-06f, -5.218132895e-06f, -5.207231628e-06f, -5.196322690e-06f, -5.185406103e-06f, -5.174481885e-06f, -5.163550057e-06f, -5.152610639e-06f, -5.141663649e-06f,
+-5.130709109e-06f, -5.119747038e-06f, -5.108777456e-06f, -5.097800384e-06f, -5.086815840e-06f, -5.075823845e-06f, -5.064824419e-06f, -5.053817582e-06f, -5.042803354e-06f, -5.031781755e-06f,
+-5.020752804e-06f, -5.009716522e-06f, -4.998672930e-06f, -4.987622046e-06f, -4.976563892e-06f, -4.965498486e-06f, -4.954425849e-06f, -4.943346002e-06f, -4.932258964e-06f, -4.921164756e-06f,
+-4.910063397e-06f, -4.898954908e-06f, -4.887839308e-06f, -4.876716618e-06f, -4.865586859e-06f, -4.854450049e-06f, -4.843306210e-06f, -4.832155362e-06f, -4.820997524e-06f, -4.809832718e-06f,
+-4.798660962e-06f, -4.787482278e-06f, -4.776296686e-06f, -4.765104205e-06f, -4.753904856e-06f, -4.742698660e-06f, -4.731485636e-06f, -4.720265805e-06f, -4.709039188e-06f, -4.697805804e-06f,
+-4.686565673e-06f, -4.675318817e-06f, -4.664065255e-06f, -4.652805008e-06f, -4.641538095e-06f, -4.630264539e-06f, -4.618984358e-06f, -4.607697573e-06f, -4.596404204e-06f, -4.585104273e-06f,
+-4.573797798e-06f, -4.562484802e-06f, -4.551165303e-06f, -4.539839323e-06f, -4.528506882e-06f, -4.517168000e-06f, -4.505822698e-06f, -4.494470997e-06f, -4.483112916e-06f, -4.471748476e-06f,
+-4.460377698e-06f, -4.449000602e-06f, -4.437617208e-06f, -4.426227538e-06f, -4.414831612e-06f, -4.403429449e-06f, -4.392021072e-06f, -4.380606499e-06f, -4.369185752e-06f, -4.357758852e-06f,
+-4.346325819e-06f, -4.334886673e-06f, -4.323441435e-06f, -4.311990126e-06f, -4.300532766e-06f, -4.289069376e-06f, -4.277599976e-06f, -4.266124587e-06f, -4.254643230e-06f, -4.243155926e-06f,
+-4.231662694e-06f, -4.220163556e-06f, -4.208658532e-06f, -4.197147643e-06f, -4.185630910e-06f, -4.174108353e-06f, -4.162579992e-06f, -4.151045850e-06f, -4.139505946e-06f, -4.127960301e-06f,
+-4.116408935e-06f, -4.104851871e-06f, -4.093289127e-06f, -4.081720726e-06f, -4.070146687e-06f, -4.058567031e-06f, -4.046981780e-06f, -4.035390954e-06f, -4.023794574e-06f, -4.012192660e-06f,
+-4.000585233e-06f, -3.988972315e-06f, -3.977353925e-06f, -3.965730086e-06f, -3.954100816e-06f, -3.942466139e-06f, -3.930826073e-06f, -3.919180640e-06f, -3.907529862e-06f, -3.895873758e-06f,
+-3.884212350e-06f, -3.872545658e-06f, -3.860873703e-06f, -3.849196507e-06f, -3.837514090e-06f, -3.825826472e-06f, -3.814133676e-06f, -3.802435721e-06f, -3.790732629e-06f, -3.779024421e-06f,
+-3.767311117e-06f, -3.755592739e-06f, -3.743869307e-06f, -3.732140842e-06f, -3.720407365e-06f, -3.708668898e-06f, -3.696925461e-06f, -3.685177075e-06f, -3.673423761e-06f, -3.661665540e-06f,
+-3.649902433e-06f, -3.638134462e-06f, -3.626361646e-06f, -3.614584007e-06f, -3.602801567e-06f, -3.591014345e-06f, -3.579222364e-06f, -3.567425643e-06f, -3.555624205e-06f, -3.543818070e-06f,
+-3.532007259e-06f, -3.520191793e-06f, -3.508371694e-06f, -3.496546982e-06f, -3.484717678e-06f, -3.472883804e-06f, -3.461045380e-06f, -3.449202428e-06f, -3.437354969e-06f, -3.425503023e-06f,
+-3.413646612e-06f, -3.401785758e-06f, -3.389920480e-06f, -3.378050800e-06f, -3.366176740e-06f, -3.354298320e-06f, -3.342415562e-06f, -3.330528486e-06f, -3.318637115e-06f, -3.306741468e-06f,
+-3.294841567e-06f, -3.282937433e-06f, -3.271029088e-06f, -3.259116552e-06f, -3.247199847e-06f, -3.235278994e-06f, -3.223354013e-06f, -3.211424927e-06f, -3.199491757e-06f, -3.187554523e-06f,
+-3.175613246e-06f, -3.163667949e-06f, -3.151718651e-06f, -3.139765375e-06f, -3.127808142e-06f, -3.115846972e-06f, -3.103881887e-06f, -3.091912909e-06f, -3.079940058e-06f, -3.067963355e-06f,
+-3.055982822e-06f, -3.043998481e-06f, -3.032010351e-06f, -3.020018456e-06f, -3.008022815e-06f, -2.996023450e-06f, -2.984020382e-06f, -2.972013633e-06f, -2.960003224e-06f, -2.947989176e-06f,
+-2.935971510e-06f, -2.923950248e-06f, -2.911925411e-06f, -2.899897020e-06f, -2.887865096e-06f, -2.875829661e-06f, -2.863790737e-06f, -2.851748343e-06f, -2.839702502e-06f, -2.827653236e-06f,
+-2.815600564e-06f, -2.803544509e-06f, -2.791485092e-06f, -2.779422334e-06f, -2.767356256e-06f, -2.755286880e-06f, -2.743214228e-06f, -2.731138320e-06f, -2.719059177e-06f, -2.706976822e-06f,
+-2.694891275e-06f, -2.682802558e-06f, -2.670710692e-06f, -2.658615699e-06f, -2.646517599e-06f, -2.634416414e-06f, -2.622312166e-06f, -2.610204876e-06f, -2.598094565e-06f, -2.585981255e-06f,
+-2.573864966e-06f, -2.561745721e-06f, -2.549623541e-06f, -2.537498446e-06f, -2.525370459e-06f, -2.513239601e-06f, -2.501105893e-06f, -2.488969356e-06f, -2.476830012e-06f, -2.464687883e-06f,
+-2.452542989e-06f, -2.440395353e-06f, -2.428244995e-06f, -2.416091936e-06f, -2.403936199e-06f, -2.391777805e-06f, -2.379616774e-06f, -2.367453129e-06f, -2.355286891e-06f, -2.343118081e-06f,
+-2.330946721e-06f, -2.318772831e-06f, -2.306596435e-06f, -2.294417552e-06f, -2.282236204e-06f, -2.270052413e-06f, -2.257866200e-06f, -2.245677587e-06f, -2.233486594e-06f, -2.221293244e-06f,
+-2.209097558e-06f, -2.196899557e-06f, -2.184699262e-06f, -2.172496696e-06f, -2.160291879e-06f, -2.148084833e-06f, -2.135875579e-06f, -2.123664139e-06f, -2.111450534e-06f, -2.099234786e-06f,
+-2.087016916e-06f, -2.074796945e-06f, -2.062574895e-06f, -2.050350788e-06f, -2.038124644e-06f, -2.025896486e-06f, -2.013666334e-06f, -2.001434211e-06f, -1.989200137e-06f, -1.976964134e-06f,
+-1.964726223e-06f, -1.952486426e-06f, -1.940244765e-06f, -1.928001260e-06f, -1.915755934e-06f, -1.903508807e-06f, -1.891259901e-06f, -1.879009238e-06f, -1.866756839e-06f, -1.854502725e-06f,
+-1.842246918e-06f, -1.829989439e-06f, -1.817730310e-06f, -1.805469553e-06f, -1.793207188e-06f, -1.780943237e-06f, -1.768677722e-06f, -1.756410663e-06f, -1.744142084e-06f, -1.731872004e-06f,
+-1.719600445e-06f, -1.707327429e-06f, -1.695052978e-06f, -1.682777112e-06f, -1.670499853e-06f, -1.658221223e-06f, -1.645941243e-06f, -1.633659934e-06f, -1.621377319e-06f, -1.609093417e-06f,
+-1.596808252e-06f, -1.584521844e-06f, -1.572234214e-06f, -1.559945385e-06f, -1.547655377e-06f, -1.535364212e-06f, -1.523071911e-06f, -1.510778497e-06f, -1.498483990e-06f, -1.486188412e-06f,
+-1.473891784e-06f, -1.461594127e-06f, -1.449295464e-06f, -1.436995815e-06f, -1.424695202e-06f, -1.412393647e-06f, -1.400091170e-06f, -1.387787794e-06f, -1.375483540e-06f, -1.363178428e-06f,
+-1.350872481e-06f, -1.338565720e-06f, -1.326258167e-06f, -1.313949842e-06f, -1.301640768e-06f, -1.289330965e-06f, -1.277020456e-06f, -1.264709261e-06f, -1.252397401e-06f, -1.240084900e-06f,
+-1.227771777e-06f, -1.215458054e-06f, -1.203143753e-06f, -1.190828895e-06f, -1.178513501e-06f, -1.166197593e-06f, -1.153881192e-06f, -1.141564320e-06f, -1.129246998e-06f, -1.116929247e-06f,
+-1.104611090e-06f, -1.092292546e-06f, -1.079973638e-06f, -1.067654387e-06f, -1.055334815e-06f, -1.043014942e-06f, -1.030694790e-06f, -1.018374381e-06f, -1.006053736e-06f, -9.937328766e-07f,
+-9.814118236e-07f, -9.690905986e-07f, -9.567692230e-07f, -9.444477183e-07f, -9.321261057e-07f, -9.198044066e-07f, -9.074826425e-07f, -8.951608346e-07f, -8.828390044e-07f, -8.705171731e-07f,
+-8.581953621e-07f, -8.458735928e-07f, -8.335518865e-07f, -8.212302646e-07f, -8.089087483e-07f, -7.965873591e-07f, -7.842661183e-07f, -7.719450472e-07f, -7.596241671e-07f, -7.473034994e-07f,
+-7.349830654e-07f, -7.226628863e-07f, -7.103429836e-07f, -6.980233785e-07f, -6.857040924e-07f, -6.733851465e-07f, -6.610665622e-07f, -6.487483607e-07f, -6.364305634e-07f, -6.241131916e-07f,
+-6.117962664e-07f, -5.994798093e-07f, -5.871638416e-07f, -5.748483844e-07f, -5.625334590e-07f, -5.502190869e-07f, -5.379052891e-07f, -5.255920870e-07f, -5.132795019e-07f, -5.009675549e-07f,
+-4.886562674e-07f, -4.763456607e-07f, -4.640357558e-07f, -4.517265742e-07f, -4.394181370e-07f, -4.271104655e-07f, -4.148035809e-07f, -4.024975044e-07f, -3.901922573e-07f, -3.778878608e-07f,
+-3.655843360e-07f, -3.532817043e-07f, -3.409799868e-07f, -3.286792047e-07f, -3.163793792e-07f, -3.040805315e-07f, -2.917826828e-07f, -2.794858543e-07f, -2.671900672e-07f, -2.548953426e-07f,
+-2.426017018e-07f, -2.303091658e-07f, -2.180177559e-07f, -2.057274932e-07f, -1.934383988e-07f, -1.811504940e-07f, -1.688637998e-07f, -1.565783374e-07f, -1.442941280e-07f, -1.320111926e-07f,
+-1.197295524e-07f, -1.074492285e-07f, -9.517024211e-08f, -8.289261420e-08f, -7.061636595e-08f, -5.834151844e-08f, -4.606809278e-08f, -3.379611006e-08f, -2.152559135e-08f, -9.256557755e-09f,
+3.010969665e-09f, 1.527696984e-08f, 2.754142169e-08f, 3.980430417e-08f, 5.206559622e-08f, 6.432527679e-08f, 7.658332484e-08f, 8.883971933e-08f, 1.010944392e-07f, 1.133474635e-07f,
+1.255987711e-07f, 1.378483411e-07f, 1.500961524e-07f, 1.623421840e-07f, 1.745864149e-07f, 1.868288242e-07f, 1.990693908e-07f, 2.113080938e-07f, 2.235449122e-07f, 2.357798249e-07f,
+2.480128112e-07f, 2.602438499e-07f, 2.724729201e-07f, 2.847000010e-07f, 2.969250715e-07f, 3.091481107e-07f, 3.213690977e-07f, 3.335880115e-07f, 3.458048314e-07f, 3.580195362e-07f,
+3.702321052e-07f, 3.824425174e-07f, 3.946507520e-07f, 4.068567881e-07f, 4.190606047e-07f, 4.312621811e-07f, 4.434614963e-07f, 4.556585294e-07f, 4.678532598e-07f, 4.800456664e-07f,
+4.922357285e-07f, 5.044234251e-07f, 5.166087356e-07f, 5.287916391e-07f, 5.409721147e-07f, 5.531501417e-07f, 5.653256993e-07f, 5.774987666e-07f, 5.896693229e-07f, 6.018373474e-07f,
+6.140028193e-07f, 6.261657180e-07f, 6.383260225e-07f, 6.504837122e-07f, 6.626387663e-07f, 6.747911641e-07f, 6.869408849e-07f, 6.990879079e-07f, 7.112322124e-07f, 7.233737778e-07f,
+7.355125832e-07f, 7.476486081e-07f, 7.597818317e-07f, 7.719122334e-07f, 7.840397925e-07f, 7.961644883e-07f, 8.082863002e-07f, 8.204052076e-07f, 8.325211897e-07f, 8.446342259e-07f,
+8.567442958e-07f, 8.688513785e-07f, 8.809554535e-07f, 8.930565003e-07f, 9.051544981e-07f, 9.172494265e-07f, 9.293412649e-07f, 9.414299926e-07f, 9.535155892e-07f, 9.655980340e-07f,
+9.776773065e-07f, 9.897533862e-07f, 1.001826253e-06f, 1.013895885e-06f, 1.025962263e-06f, 1.038025367e-06f, 1.050085174e-06f, 1.062141666e-06f, 1.074194822e-06f, 1.086244621e-06f,
+1.098291042e-06f, 1.110334066e-06f, 1.122373672e-06f, 1.134409839e-06f, 1.146442547e-06f, 1.158471775e-06f, 1.170497504e-06f, 1.182519712e-06f, 1.194538380e-06f, 1.206553486e-06f,
+1.218565011e-06f, 1.230572935e-06f, 1.242577236e-06f, 1.254577894e-06f, 1.266574890e-06f, 1.278568202e-06f, 1.290557811e-06f, 1.302543696e-06f, 1.314525837e-06f, 1.326504213e-06f,
+1.338478805e-06f, 1.350449592e-06f, 1.362416553e-06f, 1.374379669e-06f, 1.386338919e-06f, 1.398294283e-06f, 1.410245740e-06f, 1.422193272e-06f, 1.434136856e-06f, 1.446076473e-06f,
+1.458012104e-06f, 1.469943727e-06f, 1.481871322e-06f, 1.493794870e-06f, 1.505714350e-06f, 1.517629742e-06f, 1.529541026e-06f, 1.541448182e-06f, 1.553351189e-06f, 1.565250028e-06f,
+1.577144678e-06f, 1.589035120e-06f, 1.600921332e-06f, 1.612803296e-06f, 1.624680991e-06f, 1.636554398e-06f, 1.648423495e-06f, 1.660288263e-06f, 1.672148682e-06f, 1.684004732e-06f,
+1.695856393e-06f, 1.707703645e-06f, 1.719546468e-06f, 1.731384842e-06f, 1.743218747e-06f, 1.755048164e-06f, 1.766873071e-06f, 1.778693449e-06f, 1.790509279e-06f, 1.802320540e-06f,
+1.814127213e-06f, 1.825929278e-06f, 1.837726714e-06f, 1.849519501e-06f, 1.861307621e-06f, 1.873091053e-06f, 1.884869778e-06f, 1.896643775e-06f, 1.908413024e-06f, 1.920177507e-06f,
+1.931937202e-06f, 1.943692091e-06f, 1.955442153e-06f, 1.967187369e-06f, 1.978927719e-06f, 1.990663184e-06f, 2.002393743e-06f, 2.014119376e-06f, 2.025840065e-06f, 2.037555789e-06f,
+2.049266529e-06f, 2.060972265e-06f, 2.072672978e-06f, 2.084368647e-06f, 2.096059253e-06f, 2.107744777e-06f, 2.119425199e-06f, 2.131100499e-06f, 2.142770657e-06f, 2.154435655e-06f,
+2.166095472e-06f, 2.177750089e-06f, 2.189399487e-06f, 2.201043645e-06f, 2.212682545e-06f, 2.224316166e-06f, 2.235944490e-06f, 2.247567496e-06f, 2.259185166e-06f, 2.270797480e-06f,
+2.282404418e-06f, 2.294005962e-06f, 2.305602090e-06f, 2.317192785e-06f, 2.328778027e-06f, 2.340357795e-06f, 2.351932072e-06f, 2.363500838e-06f, 2.375064072e-06f, 2.386621756e-06f,
+2.398173871e-06f, 2.409720397e-06f, 2.421261315e-06f, 2.432796605e-06f, 2.444326249e-06f, 2.455850227e-06f, 2.467368519e-06f, 2.478881107e-06f, 2.490387971e-06f, 2.501889092e-06f,
+2.513384451e-06f, 2.524874028e-06f, 2.536357805e-06f, 2.547835762e-06f, 2.559307880e-06f, 2.570774140e-06f, 2.582234523e-06f, 2.593689009e-06f, 2.605137580e-06f, 2.616580216e-06f,
+2.628016899e-06f, 2.639447608e-06f, 2.650872326e-06f, 2.662291033e-06f, 2.673703711e-06f, 2.685110339e-06f, 2.696510899e-06f, 2.707905372e-06f, 2.719293739e-06f, 2.730675982e-06f,
+2.742052080e-06f, 2.753422016e-06f, 2.764785770e-06f, 2.776143323e-06f, 2.787494656e-06f, 2.798839751e-06f, 2.810178589e-06f, 2.821511150e-06f, 2.832837416e-06f, 2.844157369e-06f,
+2.855470988e-06f, 2.866778256e-06f, 2.878079153e-06f, 2.889373661e-06f, 2.900661762e-06f, 2.911943435e-06f, 2.923218663e-06f, 2.934487427e-06f, 2.945749707e-06f, 2.957005487e-06f,
+2.968254745e-06f, 2.979497465e-06f, 2.990733627e-06f, 3.001963212e-06f, 3.013186203e-06f, 3.024402580e-06f, 3.035612324e-06f, 3.046815418e-06f, 3.058011842e-06f, 3.069201579e-06f,
+3.080384608e-06f, 3.091560913e-06f, 3.102730474e-06f, 3.113893273e-06f, 3.125049291e-06f, 3.136198510e-06f, 3.147340911e-06f, 3.158476476e-06f, 3.169605187e-06f, 3.180727025e-06f,
+3.191841971e-06f, 3.202950007e-06f, 3.214051116e-06f, 3.225145277e-06f, 3.236232474e-06f, 3.247312688e-06f, 3.258385900e-06f, 3.269452092e-06f, 3.280511245e-06f, 3.291563343e-06f,
+3.302608365e-06f, 3.313646295e-06f, 3.324677113e-06f, 3.335700801e-06f, 3.346717342e-06f, 3.357726717e-06f, 3.368728908e-06f, 3.379723897e-06f, 3.390711665e-06f, 3.401692194e-06f,
+3.412665467e-06f, 3.423631465e-06f, 3.434590170e-06f, 3.445541564e-06f, 3.456485629e-06f, 3.467422347e-06f, 3.478351699e-06f, 3.489273668e-06f, 3.500188237e-06f, 3.511095386e-06f,
+3.521995097e-06f, 3.532887354e-06f, 3.543772138e-06f, 3.554649430e-06f, 3.565519214e-06f, 3.576381471e-06f, 3.587236183e-06f, 3.598083332e-06f, 3.608922901e-06f, 3.619754872e-06f,
+3.630579226e-06f, 3.641395947e-06f, 3.652205016e-06f, 3.663006415e-06f, 3.673800128e-06f, 3.684586135e-06f, 3.695364419e-06f, 3.706134963e-06f, 3.716897749e-06f, 3.727652759e-06f,
+3.738399975e-06f, 3.749139380e-06f, 3.759870957e-06f, 3.770594687e-06f, 3.781310553e-06f, 3.792018537e-06f, 3.802718622e-06f, 3.813410791e-06f, 3.824095025e-06f, 3.834771307e-06f,
+3.845439620e-06f, 3.856099946e-06f, 3.866752268e-06f, 3.877396568e-06f, 3.888032828e-06f, 3.898661032e-06f, 3.909281162e-06f, 3.919893201e-06f, 3.930497130e-06f, 3.941092934e-06f,
+3.951680594e-06f, 3.962260093e-06f, 3.972831413e-06f, 3.983394538e-06f, 3.993949451e-06f, 4.004496133e-06f, 4.015034568e-06f, 4.025564738e-06f, 4.036086627e-06f, 4.046600217e-06f,
+4.057105490e-06f, 4.067602430e-06f, 4.078091020e-06f, 4.088571242e-06f, 4.099043079e-06f, 4.109506514e-06f, 4.119961531e-06f, 4.130408111e-06f, 4.140846238e-06f, 4.151275896e-06f,
+4.161697066e-06f, 4.172109732e-06f, 4.182513876e-06f, 4.192909483e-06f, 4.203296535e-06f, 4.213675015e-06f, 4.224044906e-06f, 4.234406191e-06f, 4.244758853e-06f, 4.255102876e-06f,
+4.265438243e-06f, 4.275764936e-06f, 4.286082940e-06f, 4.296392236e-06f, 4.306692809e-06f, 4.316984641e-06f, 4.327267717e-06f, 4.337542018e-06f, 4.347807529e-06f, 4.358064233e-06f,
+4.368312113e-06f, 4.378551152e-06f, 4.388781334e-06f, 4.399002642e-06f, 4.409215060e-06f, 4.419418570e-06f, 4.429613157e-06f, 4.439798804e-06f, 4.449975494e-06f, 4.460143211e-06f,
+4.470301938e-06f, 4.480451659e-06f, 4.490592357e-06f, 4.500724016e-06f, 4.510846619e-06f, 4.520960150e-06f, 4.531064593e-06f, 4.541159932e-06f, 4.551246149e-06f, 4.561323228e-06f,
+4.571391154e-06f, 4.581449910e-06f, 4.591499479e-06f, 4.601539846e-06f, 4.611570994e-06f, 4.621592906e-06f, 4.631605567e-06f, 4.641608961e-06f, 4.651603071e-06f, 4.661587881e-06f,
+4.671563375e-06f, 4.681529537e-06f, 4.691486350e-06f, 4.701433799e-06f, 4.711371868e-06f, 4.721300540e-06f, 4.731219799e-06f, 4.741129630e-06f, 4.751030017e-06f, 4.760920943e-06f,
+4.770802392e-06f, 4.780674349e-06f, 4.790536798e-06f, 4.800389722e-06f, 4.810233106e-06f, 4.820066935e-06f, 4.829891191e-06f, 4.839705859e-06f, 4.849510924e-06f, 4.859306370e-06f,
+4.869092181e-06f, 4.878868340e-06f, 4.888634833e-06f, 4.898391644e-06f, 4.908138757e-06f, 4.917876156e-06f, 4.927603826e-06f, 4.937321751e-06f, 4.947029915e-06f, 4.956728302e-06f,
+4.966416898e-06f, 4.976095687e-06f, 4.985764653e-06f, 4.995423780e-06f, 5.005073053e-06f, 5.014712456e-06f, 5.024341975e-06f, 5.033961593e-06f, 5.043571296e-06f, 5.053171067e-06f,
+5.062760891e-06f, 5.072340754e-06f, 5.081910638e-06f, 5.091470531e-06f, 5.101020415e-06f, 5.110560275e-06f, 5.120090098e-06f, 5.129609866e-06f, 5.139119565e-06f, 5.148619179e-06f,
+5.158108694e-06f, 5.167588094e-06f, 5.177057364e-06f, 5.186516489e-06f, 5.195965454e-06f, 5.205404244e-06f, 5.214832843e-06f, 5.224251236e-06f, 5.233659409e-06f, 5.243057347e-06f,
+5.252445034e-06f, 5.261822455e-06f, 5.271189596e-06f, 5.280546441e-06f, 5.289892976e-06f, 5.299229185e-06f, 5.308555054e-06f, 5.317870568e-06f, 5.327175713e-06f, 5.336470472e-06f,
+5.345754832e-06f, 5.355028777e-06f, 5.364292293e-06f, 5.373545365e-06f, 5.382787979e-06f, 5.392020119e-06f, 5.401241771e-06f, 5.410452920e-06f, 5.419653552e-06f, 5.428843652e-06f,
+5.438023205e-06f, 5.447192197e-06f, 5.456350613e-06f, 5.465498439e-06f, 5.474635660e-06f, 5.483762261e-06f, 5.492878229e-06f, 5.501983548e-06f, 5.511078205e-06f, 5.520162184e-06f,
+5.529235471e-06f, 5.538298053e-06f, 5.547349914e-06f, 5.556391040e-06f, 5.565421417e-06f, 5.574441030e-06f, 5.583449866e-06f, 5.592447910e-06f, 5.601435148e-06f, 5.610411565e-06f,
+5.619377148e-06f, 5.628331882e-06f, 5.637275753e-06f, 5.646208746e-06f, 5.655130848e-06f, 5.664042045e-06f, 5.672942323e-06f, 5.681831667e-06f, 5.690710063e-06f, 5.699577498e-06f,
+5.708433957e-06f, 5.717279427e-06f, 5.726113893e-06f, 5.734937341e-06f, 5.743749759e-06f, 5.752551130e-06f, 5.761341443e-06f, 5.770120683e-06f, 5.778888836e-06f, 5.787645888e-06f,
+5.796391826e-06f, 5.805126635e-06f, 5.813850303e-06f, 5.822562815e-06f, 5.831264157e-06f, 5.839954317e-06f, 5.848633279e-06f, 5.857301032e-06f, 5.865957560e-06f, 5.874602850e-06f,
+5.883236890e-06f, 5.891859664e-06f, 5.900471161e-06f, 5.909071365e-06f, 5.917660264e-06f, 5.926237845e-06f, 5.934804093e-06f, 5.943358995e-06f, 5.951902538e-06f, 5.960434709e-06f,
+5.968955494e-06f, 5.977464880e-06f, 5.985962853e-06f, 5.994449401e-06f, 6.002924509e-06f, 6.011388165e-06f, 6.019840355e-06f, 6.028281067e-06f, 6.036710286e-06f, 6.045128001e-06f,
+6.053534197e-06f, 6.061928861e-06f, 6.070311981e-06f, 6.078683543e-06f, 6.087043535e-06f, 6.095391943e-06f, 6.103728754e-06f, 6.112053955e-06f, 6.120367533e-06f, 6.128669476e-06f,
+6.136959770e-06f, 6.145238402e-06f, 6.153505360e-06f, 6.161760630e-06f, 6.170004200e-06f, 6.178236058e-06f, 6.186456189e-06f, 6.194664582e-06f, 6.202861223e-06f, 6.211046100e-06f,
+6.219219201e-06f, 6.227380512e-06f, 6.235530020e-06f, 6.243667714e-06f, 6.251793581e-06f, 6.259907607e-06f, 6.268009780e-06f, 6.276100089e-06f, 6.284178519e-06f, 6.292245060e-06f,
+6.300299697e-06f, 6.308342419e-06f, 6.316373214e-06f, 6.324392068e-06f, 6.332398970e-06f, 6.340393907e-06f, 6.348376866e-06f, 6.356347836e-06f, 6.364306804e-06f, 6.372253758e-06f,
+6.380188685e-06f, 6.388111574e-06f, 6.396022411e-06f, 6.403921185e-06f, 6.411807884e-06f, 6.419682495e-06f, 6.427545007e-06f, 6.435395406e-06f, 6.443233682e-06f, 6.451059822e-06f,
+6.458873814e-06f, 6.466675646e-06f, 6.474465305e-06f, 6.482242781e-06f, 6.490008061e-06f, 6.497761133e-06f, 6.505501985e-06f, 6.513230605e-06f, 6.520946981e-06f, 6.528651103e-06f,
+6.536342956e-06f, 6.544022531e-06f, 6.551689815e-06f, 6.559344797e-06f, 6.566987464e-06f, 6.574617805e-06f, 6.582235808e-06f, 6.589841462e-06f, 6.597434755e-06f, 6.605015675e-06f,
+6.612584211e-06f, 6.620140352e-06f, 6.627684085e-06f, 6.635215399e-06f, 6.642734282e-06f, 6.650240724e-06f, 6.657734713e-06f, 6.665216237e-06f, 6.672685284e-06f, 6.680141844e-06f,
+6.687585905e-06f, 6.695017456e-06f, 6.702436486e-06f, 6.709842982e-06f, 6.717236935e-06f, 6.724618332e-06f, 6.731987162e-06f, 6.739343415e-06f, 6.746687078e-06f, 6.754018142e-06f,
+6.761336594e-06f, 6.768642424e-06f, 6.775935620e-06f, 6.783216172e-06f, 6.790484068e-06f, 6.797739298e-06f, 6.804981850e-06f, 6.812211714e-06f, 6.819428878e-06f, 6.826633332e-06f,
+6.833825064e-06f, 6.841004064e-06f, 6.848170321e-06f, 6.855323825e-06f, 6.862464563e-06f, 6.869592527e-06f, 6.876707704e-06f, 6.883810084e-06f, 6.890899656e-06f, 6.897976410e-06f,
+6.905040335e-06f, 6.912091421e-06f, 6.919129656e-06f, 6.926155030e-06f, 6.933167533e-06f, 6.940167154e-06f, 6.947153882e-06f, 6.954127707e-06f, 6.961088619e-06f, 6.968036607e-06f,
+6.974971661e-06f, 6.981893770e-06f, 6.988802924e-06f, 6.995699112e-06f, 7.002582325e-06f, 7.009452551e-06f, 7.016309781e-06f, 7.023154004e-06f, 7.029985211e-06f, 7.036803390e-06f,
+7.043608532e-06f, 7.050400626e-06f, 7.057179663e-06f, 7.063945632e-06f, 7.070698523e-06f, 7.077438327e-06f, 7.084165032e-06f, 7.090878630e-06f, 7.097579109e-06f, 7.104266461e-06f,
+7.110940674e-06f, 7.117601740e-06f, 7.124249648e-06f, 7.130884389e-06f, 7.137505952e-06f, 7.144114327e-06f, 7.150709506e-06f, 7.157291478e-06f, 7.163860233e-06f, 7.170415762e-06f,
+7.176958055e-06f, 7.183487102e-06f, 7.190002893e-06f, 7.196505420e-06f, 7.202994671e-06f, 7.209470639e-06f, 7.215933313e-06f, 7.222382683e-06f, 7.228818741e-06f, 7.235241476e-06f,
+7.241650879e-06f, 7.248046941e-06f, 7.254429653e-06f, 7.260799004e-06f, 7.267154986e-06f, 7.273497589e-06f, 7.279826804e-06f, 7.286142621e-06f, 7.292445032e-06f, 7.298734027e-06f,
+7.305009597e-06f, 7.311271732e-06f, 7.317520424e-06f, 7.323755663e-06f, 7.329977440e-06f, 7.336185747e-06f, 7.342380573e-06f, 7.348561911e-06f, 7.354729750e-06f, 7.360884082e-06f,
+7.367024898e-06f, 7.373152189e-06f, 7.379265947e-06f, 7.385366161e-06f, 7.391452824e-06f, 7.397525926e-06f, 7.403585458e-06f, 7.409631413e-06f, 7.415663780e-06f, 7.421682552e-06f,
+7.427687719e-06f, 7.433679273e-06f, 7.439657206e-06f, 7.445621507e-06f, 7.451572170e-06f, 7.457509184e-06f, 7.463432543e-06f, 7.469342236e-06f, 7.475238256e-06f, 7.481120594e-06f,
+7.486989242e-06f, 7.492844190e-06f, 7.498685432e-06f, 7.504512957e-06f, 7.510326759e-06f, 7.516126827e-06f, 7.521913156e-06f, 7.527685734e-06f, 7.533444556e-06f, 7.539189612e-06f,
+7.544920893e-06f, 7.550638393e-06f, 7.556342103e-06f, 7.562032013e-06f, 7.567708118e-06f, 7.573370407e-06f, 7.579018874e-06f, 7.584653510e-06f, 7.590274306e-06f, 7.595881256e-06f,
+7.601474351e-06f, 7.607053583e-06f, 7.612618945e-06f, 7.618170427e-06f, 7.623708023e-06f, 7.629231724e-06f, 7.634741523e-06f, 7.640237412e-06f, 7.645719383e-06f, 7.651187429e-06f,
+7.656641541e-06f, 7.662081711e-06f, 7.667507933e-06f, 7.672920199e-06f, 7.678318500e-06f, 7.683702830e-06f, 7.689073180e-06f, 7.694429544e-06f, 7.699771913e-06f, 7.705100280e-06f,
+7.710414637e-06f, 7.715714978e-06f, 7.721001295e-06f, 7.726273580e-06f, 7.731531826e-06f, 7.736776025e-06f, 7.742006171e-06f, 7.747222255e-06f, 7.752424271e-06f, 7.757612212e-06f,
+7.762786069e-06f, 7.767945837e-06f, 7.773091507e-06f, 7.778223073e-06f, 7.783340528e-06f, 7.788443863e-06f, 7.793533073e-06f, 7.798608151e-06f, 7.803669088e-06f, 7.808715879e-06f,
+7.813748516e-06f, 7.818766992e-06f, 7.823771301e-06f, 7.828761434e-06f, 7.833737387e-06f, 7.838699151e-06f, 7.843646720e-06f, 7.848580087e-06f, 7.853499246e-06f, 7.858404189e-06f,
+7.863294910e-06f, 7.868171402e-06f, 7.873033658e-06f, 7.877881673e-06f, 7.882715438e-06f, 7.887534948e-06f, 7.892340197e-06f, 7.897131176e-06f, 7.901907881e-06f, 7.906670304e-06f,
+7.911418439e-06f, 7.916152280e-06f, 7.920871819e-06f, 7.925577052e-06f, 7.930267971e-06f, 7.934944570e-06f, 7.939606842e-06f, 7.944254783e-06f, 7.948888384e-06f, 7.953507640e-06f,
+7.958112545e-06f, 7.962703093e-06f, 7.967279276e-06f, 7.971841091e-06f, 7.976388529e-06f, 7.980921585e-06f, 7.985440254e-06f, 7.989944528e-06f, 7.994434402e-06f, 7.998909870e-06f,
+8.003370927e-06f, 8.007817565e-06f, 8.012249779e-06f, 8.016667564e-06f, 8.021070914e-06f, 8.025459822e-06f, 8.029834282e-06f, 8.034194290e-06f, 8.038539839e-06f, 8.042870924e-06f,
+8.047187538e-06f, 8.051489677e-06f, 8.055777335e-06f, 8.060050505e-06f, 8.064309183e-06f, 8.068553362e-06f, 8.072783038e-06f, 8.076998204e-06f, 8.081198856e-06f, 8.085384987e-06f,
+8.089556593e-06f, 8.093713668e-06f, 8.097856206e-06f, 8.101984202e-06f, 8.106097651e-06f, 8.110196548e-06f, 8.114280887e-06f, 8.118350663e-06f, 8.122405871e-06f, 8.126446505e-06f,
+8.130472560e-06f, 8.134484032e-06f, 8.138480915e-06f, 8.142463204e-06f, 8.146430894e-06f, 8.150383979e-06f, 8.154322456e-06f, 8.158246318e-06f, 8.162155561e-06f, 8.166050180e-06f,
+8.169930170e-06f, 8.173795526e-06f, 8.177646243e-06f, 8.181482317e-06f, 8.185303742e-06f, 8.189110514e-06f, 8.192902628e-06f, 8.196680080e-06f, 8.200442864e-06f, 8.204190975e-06f,
+8.207924410e-06f, 8.211643164e-06f, 8.215347231e-06f, 8.219036608e-06f, 8.222711290e-06f, 8.226371272e-06f, 8.230016549e-06f, 8.233647119e-06f, 8.237262975e-06f, 8.240864113e-06f,
+8.244450529e-06f, 8.248022219e-06f, 8.251579179e-06f, 8.255121403e-06f, 8.258648888e-06f, 8.262161630e-06f, 8.265659623e-06f, 8.269142865e-06f, 8.272611350e-06f, 8.276065075e-06f,
+8.279504036e-06f, 8.282928228e-06f, 8.286337647e-06f, 8.289732289e-06f, 8.293112151e-06f, 8.296477227e-06f, 8.299827515e-06f, 8.303163010e-06f, 8.306483709e-06f, 8.309789606e-06f,
+8.313080700e-06f, 8.316356985e-06f, 8.319618457e-06f, 8.322865114e-06f, 8.326096951e-06f, 8.329313965e-06f, 8.332516151e-06f, 8.335703507e-06f, 8.338876028e-06f, 8.342033710e-06f,
+8.345176551e-06f, 8.348304547e-06f, 8.351417693e-06f, 8.354515987e-06f, 8.357599425e-06f, 8.360668003e-06f, 8.363721719e-06f, 8.366760568e-06f, 8.369784547e-06f, 8.372793653e-06f,
+8.375787883e-06f, 8.378767232e-06f, 8.381731699e-06f, 8.384681279e-06f, 8.387615969e-06f, 8.390535766e-06f, 8.393440668e-06f, 8.396330670e-06f, 8.399205769e-06f, 8.402065963e-06f,
+8.404911248e-06f, 8.407741622e-06f, 8.410557081e-06f, 8.413357622e-06f, 8.416143242e-06f, 8.418913939e-06f, 8.421669709e-06f, 8.424410549e-06f, 8.427136457e-06f, 8.429847430e-06f,
+8.432543465e-06f, 8.435224558e-06f, 8.437890708e-06f, 8.440541912e-06f, 8.443178166e-06f, 8.445799469e-06f, 8.448405817e-06f, 8.450997207e-06f, 8.453573638e-06f, 8.456135107e-06f,
+8.458681610e-06f, 8.461213146e-06f, 8.463729713e-06f, 8.466231306e-06f, 8.468717925e-06f, 8.471189566e-06f, 8.473646227e-06f, 8.476087906e-06f, 8.478514601e-06f, 8.480926308e-06f,
+8.483323027e-06f, 8.485704754e-06f, 8.488071487e-06f, 8.490423225e-06f, 8.492759964e-06f, 8.495081703e-06f, 8.497388439e-06f, 8.499680171e-06f, 8.501956896e-06f, 8.504218613e-06f,
+8.506465318e-06f, 8.508697011e-06f, 8.510913689e-06f, 8.513115350e-06f, 8.515301993e-06f, 8.517473615e-06f, 8.519630215e-06f, 8.521771790e-06f, 8.523898339e-06f, 8.526009860e-06f,
+8.528106351e-06f, 8.530187811e-06f, 8.532254237e-06f, 8.534305629e-06f, 8.536341984e-06f, 8.538363301e-06f, 8.540369578e-06f, 8.542360813e-06f, 8.544337006e-06f, 8.546298154e-06f,
+8.548244255e-06f, 8.550175310e-06f, 8.552091315e-06f, 8.553992269e-06f, 8.555878172e-06f, 8.557749022e-06f, 8.559604817e-06f, 8.561445555e-06f, 8.563271237e-06f, 8.565081860e-06f,
+8.566877424e-06f, 8.568657926e-06f, 8.570423366e-06f, 8.572173742e-06f, 8.573909055e-06f, 8.575629301e-06f, 8.577334481e-06f, 8.579024593e-06f, 8.580699636e-06f, 8.582359609e-06f,
+8.584004511e-06f, 8.585634341e-06f, 8.587249099e-06f, 8.588848783e-06f, 8.590433392e-06f, 8.592002926e-06f, 8.593557383e-06f, 8.595096764e-06f, 8.596621067e-06f, 8.598130291e-06f,
+8.599624435e-06f, 8.601103500e-06f, 8.602567484e-06f, 8.604016387e-06f, 8.605450207e-06f, 8.606868945e-06f, 8.608272600e-06f, 8.609661171e-06f, 8.611034658e-06f, 8.612393060e-06f,
+8.613736378e-06f, 8.615064609e-06f, 8.616377754e-06f, 8.617675813e-06f, 8.618958786e-06f, 8.620226671e-06f, 8.621479469e-06f, 8.622717179e-06f, 8.623939801e-06f, 8.625147335e-06f,
+8.626339780e-06f, 8.627517137e-06f, 8.628679406e-06f, 8.629826585e-06f, 8.630958676e-06f, 8.632075677e-06f, 8.633177590e-06f, 8.634264413e-06f, 8.635336147e-06f, 8.636392793e-06f,
+8.637434349e-06f, 8.638460816e-06f, 8.639472195e-06f, 8.640468485e-06f, 8.641449687e-06f, 8.642415800e-06f, 8.643366825e-06f, 8.644302762e-06f, 8.645223612e-06f, 8.646129375e-06f,
+8.647020050e-06f, 8.647895639e-06f, 8.648756142e-06f, 8.649601559e-06f, 8.650431890e-06f, 8.651247137e-06f, 8.652047299e-06f, 8.652832377e-06f, 8.653602371e-06f, 8.654357283e-06f,
+8.655097112e-06f, 8.655821860e-06f, 8.656531527e-06f, 8.657226113e-06f, 8.657905619e-06f, 8.658570047e-06f, 8.659219396e-06f, 8.659853667e-06f, 8.660472862e-06f, 8.661076981e-06f,
+8.661666025e-06f, 8.662239995e-06f, 8.662798891e-06f, 8.663342715e-06f, 8.663871468e-06f, 8.664385150e-06f, 8.664883762e-06f, 8.665367306e-06f, 8.665835783e-06f, 8.666289194e-06f,
+8.666727539e-06f, 8.667150820e-06f, 8.667559038e-06f, 8.667952194e-06f, 8.668330290e-06f, 8.668693327e-06f, 8.669041305e-06f, 8.669374227e-06f, 8.669692093e-06f, 8.669994905e-06f,
+8.670282664e-06f, 8.670555372e-06f, 8.670813030e-06f, 8.671055639e-06f, 8.671283202e-06f, 8.671495718e-06f, 8.671693191e-06f, 8.671875621e-06f, 8.672043010e-06f, 8.672195360e-06f,
+8.672332672e-06f, 8.672454948e-06f, 8.672562189e-06f, 8.672654398e-06f, 8.672731576e-06f, 8.672793724e-06f, 8.672840845e-06f, 8.672872941e-06f, 8.672890012e-06f, 8.672892062e-06f,
+8.672879091e-06f, 8.672851102e-06f, 8.672808097e-06f, 8.672750078e-06f, 8.672677046e-06f, 8.672589004e-06f, 8.672485954e-06f, 8.672367897e-06f, 8.672234836e-06f, 8.672086773e-06f,
+8.671923711e-06f, 8.671745650e-06f, 8.671552594e-06f, 8.671344545e-06f, 8.671121504e-06f, 8.670883475e-06f, 8.670630459e-06f, 8.670362459e-06f, 8.670079477e-06f, 8.669781515e-06f,
+8.669468577e-06f, 8.669140663e-06f, 8.668797778e-06f, 8.668439922e-06f, 8.668067099e-06f, 8.667679312e-06f, 8.667276562e-06f, 8.666858853e-06f, 8.666426186e-06f, 8.665978566e-06f,
+8.665515993e-06f, 8.665038471e-06f, 8.664546003e-06f, 8.664038591e-06f, 8.663516238e-06f, 8.662978948e-06f, 8.662426721e-06f, 8.661859563e-06f, 8.661277474e-06f, 8.660680459e-06f,
+8.660068520e-06f, 8.659441660e-06f, 8.658799882e-06f, 8.658143189e-06f, 8.657471584e-06f, 8.656785070e-06f, 8.656083650e-06f, 8.655367328e-06f, 8.654636105e-06f, 8.653889986e-06f,
+8.653128974e-06f, 8.652353071e-06f, 8.651562282e-06f, 8.650756608e-06f, 8.649936054e-06f, 8.649100623e-06f, 8.648250318e-06f, 8.647385143e-06f, 8.646505100e-06f, 8.645610193e-06f,
+8.644700426e-06f, 8.643775802e-06f, 8.642836325e-06f, 8.641881997e-06f, 8.640912823e-06f, 8.639928806e-06f, 8.638929950e-06f, 8.637916257e-06f, 8.636887733e-06f, 8.635844380e-06f,
+8.634786202e-06f, 8.633713203e-06f, 8.632625387e-06f, 8.631522757e-06f, 8.630405316e-06f, 8.629273070e-06f, 8.628126021e-06f, 8.626964174e-06f, 8.625787533e-06f, 8.624596100e-06f,
+8.623389881e-06f, 8.622168879e-06f, 8.620933097e-06f, 8.619682541e-06f, 8.618417215e-06f, 8.617137121e-06f, 8.615842264e-06f, 8.614532649e-06f, 8.613208280e-06f, 8.611869159e-06f,
+8.610515293e-06f, 8.609146685e-06f, 8.607763338e-06f, 8.606365259e-06f, 8.604952449e-06f, 8.603524915e-06f, 8.602082661e-06f, 8.600625689e-06f, 8.599154006e-06f, 8.597667616e-06f,
+8.596166522e-06f, 8.594650729e-06f, 8.593120242e-06f, 8.591575066e-06f, 8.590015204e-06f, 8.588440661e-06f, 8.586851443e-06f, 8.585247553e-06f, 8.583628996e-06f, 8.581995777e-06f,
+8.580347900e-06f, 8.578685370e-06f, 8.577008192e-06f, 8.575316371e-06f, 8.573609911e-06f, 8.571888817e-06f, 8.570153094e-06f, 8.568402747e-06f, 8.566637780e-06f, 8.564858200e-06f,
+8.563064009e-06f, 8.561255214e-06f, 8.559431820e-06f, 8.557593830e-06f, 8.555741252e-06f, 8.553874088e-06f, 8.551992345e-06f, 8.550096028e-06f, 8.548185141e-06f, 8.546259690e-06f,
+8.544319681e-06f, 8.542365117e-06f, 8.540396005e-06f, 8.538412349e-06f, 8.536414156e-06f, 8.534401429e-06f, 8.532374175e-06f, 8.530332399e-06f, 8.528276106e-06f, 8.526205302e-06f,
+8.524119992e-06f, 8.522020181e-06f, 8.519905875e-06f, 8.517777079e-06f, 8.515633799e-06f, 8.513476041e-06f, 8.511303810e-06f, 8.509117111e-06f, 8.506915950e-06f, 8.504700333e-06f,
+8.502470266e-06f, 8.500225753e-06f, 8.497966802e-06f, 8.495693417e-06f, 8.493405604e-06f, 8.491103369e-06f, 8.488786718e-06f, 8.486455657e-06f, 8.484110191e-06f, 8.481750327e-06f,
+8.479376070e-06f, 8.476987427e-06f, 8.474584402e-06f, 8.472167003e-06f, 8.469735234e-06f, 8.467289103e-06f, 8.464828615e-06f, 8.462353777e-06f, 8.459864593e-06f, 8.457361072e-06f,
+8.454843217e-06f, 8.452311037e-06f, 8.449764536e-06f, 8.447203722e-06f, 8.444628600e-06f, 8.442039176e-06f, 8.439435458e-06f, 8.436817451e-06f, 8.434185161e-06f, 8.431538595e-06f,
+8.428877760e-06f, 8.426202661e-06f, 8.423513305e-06f, 8.420809699e-06f, 8.418091849e-06f, 8.415359762e-06f, 8.412613444e-06f, 8.409852901e-06f, 8.407078140e-06f, 8.404289168e-06f,
+8.401485992e-06f, 8.398668618e-06f, 8.395837052e-06f, 8.392991302e-06f, 8.390131373e-06f, 8.387257274e-06f, 8.384369010e-06f, 8.381466589e-06f, 8.378550017e-06f, 8.375619300e-06f,
+8.372674447e-06f, 8.369715464e-06f, 8.366742357e-06f, 8.363755133e-06f, 8.360753800e-06f, 8.357738365e-06f, 8.354708834e-06f, 8.351665215e-06f, 8.348607514e-06f, 8.345535739e-06f,
+8.342449897e-06f, 8.339349994e-06f, 8.336236038e-06f, 8.333108037e-06f, 8.329965997e-06f, 8.326809925e-06f, 8.323639829e-06f, 8.320455716e-06f, 8.317257593e-06f, 8.314045468e-06f,
+8.310819348e-06f, 8.307579240e-06f, 8.304325152e-06f, 8.301057090e-06f, 8.297775064e-06f, 8.294479079e-06f, 8.291169143e-06f, 8.287845264e-06f, 8.284507450e-06f, 8.281155707e-06f,
+8.277790044e-06f, 8.274410468e-06f, 8.271016986e-06f, 8.267609607e-06f, 8.264188337e-06f, 8.260753185e-06f, 8.257304159e-06f, 8.253841265e-06f, 8.250364512e-06f, 8.246873908e-06f,
+8.243369460e-06f, 8.239851176e-06f, 8.236319064e-06f, 8.232773131e-06f, 8.229213387e-06f, 8.225639837e-06f, 8.222052492e-06f, 8.218451358e-06f, 8.214836443e-06f, 8.211207756e-06f,
+8.207565304e-06f, 8.203909095e-06f, 8.200239138e-06f, 8.196555441e-06f, 8.192858011e-06f, 8.189146858e-06f, 8.185421988e-06f, 8.181683410e-06f, 8.177931133e-06f, 8.174165165e-06f,
+8.170385513e-06f, 8.166592186e-06f, 8.162785193e-06f, 8.158964542e-06f, 8.155130241e-06f, 8.151282298e-06f, 8.147420722e-06f, 8.143545521e-06f, 8.139656704e-06f, 8.135754279e-06f,
+8.131838254e-06f, 8.127908638e-06f, 8.123965441e-06f, 8.120008669e-06f, 8.116038332e-06f, 8.112054438e-06f, 8.108056996e-06f, 8.104046014e-06f, 8.100021502e-06f, 8.095983468e-06f,
+8.091931920e-06f, 8.087866867e-06f, 8.083788318e-06f, 8.079696282e-06f, 8.075590768e-06f, 8.071471783e-06f, 8.067339338e-06f, 8.063193441e-06f, 8.059034101e-06f, 8.054861327e-06f,
+8.050675128e-06f, 8.046475512e-06f, 8.042262488e-06f, 8.038036067e-06f, 8.033796256e-06f, 8.029543064e-06f, 8.025276501e-06f, 8.020996576e-06f, 8.016703298e-06f, 8.012396676e-06f,
+8.008076719e-06f, 8.003743436e-06f, 7.999396837e-06f, 7.995036930e-06f, 7.990663726e-06f, 7.986277232e-06f, 7.981877459e-06f, 7.977464416e-06f, 7.973038111e-06f, 7.968598555e-06f,
+7.964145757e-06f, 7.959679726e-06f, 7.955200471e-06f, 7.950708002e-06f, 7.946202329e-06f, 7.941683460e-06f, 7.937151406e-06f, 7.932606175e-06f, 7.928047778e-06f, 7.923476224e-06f,
+7.918891523e-06f, 7.914293683e-06f, 7.909682715e-06f, 7.905058629e-06f, 7.900421434e-06f, 7.895771139e-06f, 7.891107755e-06f, 7.886431290e-06f, 7.881741756e-06f, 7.877039162e-06f,
+7.872323516e-06f, 7.867594831e-06f, 7.862853114e-06f, 7.858098376e-06f, 7.853330627e-06f, 7.848549877e-06f, 7.843756135e-06f, 7.838949412e-06f, 7.834129717e-06f, 7.829297061e-06f,
+7.824451454e-06f, 7.819592905e-06f, 7.814721425e-06f, 7.809837023e-06f, 7.804939710e-06f, 7.800029496e-06f, 7.795106391e-06f, 7.790170405e-06f, 7.785221548e-06f, 7.780259831e-06f,
+7.775285264e-06f, 7.770297857e-06f, 7.765297620e-06f, 7.760284563e-06f, 7.755258697e-06f, 7.750220032e-06f, 7.745168579e-06f, 7.740104348e-06f, 7.735027349e-06f, 7.729937592e-06f,
+7.724835088e-06f, 7.719719848e-06f, 7.714591882e-06f, 7.709451200e-06f, 7.704297814e-06f, 7.699131732e-06f, 7.693952967e-06f, 7.688761528e-06f, 7.683557427e-06f, 7.678340673e-06f,
+7.673111278e-06f, 7.667869252e-06f, 7.662614605e-06f, 7.657347349e-06f, 7.652067494e-06f, 7.646775051e-06f, 7.641470030e-06f, 7.636152443e-06f, 7.630822301e-06f, 7.625479613e-06f,
+7.620124391e-06f, 7.614756646e-06f, 7.609376388e-06f, 7.603983629e-06f, 7.598578379e-06f, 7.593160650e-06f, 7.587730452e-06f, 7.582287796e-06f, 7.576832693e-06f, 7.571365155e-06f,
+7.565885192e-06f, 7.560392815e-06f, 7.554888036e-06f, 7.549370866e-06f, 7.543841315e-06f, 7.538299395e-06f, 7.532745117e-06f, 7.527178492e-06f, 7.521599532e-06f, 7.516008247e-06f,
+7.510404649e-06f, 7.504788749e-06f, 7.499160558e-06f, 7.493520088e-06f, 7.487867351e-06f, 7.482202356e-06f, 7.476525116e-06f, 7.470835642e-06f, 7.465133946e-06f, 7.459420038e-06f,
+7.453693931e-06f, 7.447955636e-06f, 7.442205163e-06f, 7.436442526e-06f, 7.430667735e-06f, 7.424880801e-06f, 7.419081737e-06f, 7.413270554e-06f, 7.407447264e-06f, 7.401611877e-06f,
+7.395764407e-06f, 7.389904863e-06f, 7.384033259e-06f, 7.378149606e-06f, 7.372253915e-06f, 7.366346198e-06f, 7.360426468e-06f, 7.354494735e-06f, 7.348551012e-06f, 7.342595310e-06f,
+7.336627641e-06f, 7.330648017e-06f, 7.324656450e-06f, 7.318652952e-06f, 7.312637535e-06f, 7.306610210e-06f, 7.300570990e-06f, 7.294519886e-06f, 7.288456911e-06f, 7.282382076e-06f,
+7.276295394e-06f, 7.270196876e-06f, 7.264086535e-06f, 7.257964383e-06f, 7.251830431e-06f, 7.245684693e-06f, 7.239527179e-06f, 7.233357903e-06f, 7.227176876e-06f, 7.220984110e-06f,
+7.214779618e-06f, 7.208563413e-06f, 7.202335505e-06f, 7.196095908e-06f, 7.189844634e-06f, 7.183581694e-06f, 7.177307103e-06f, 7.171020871e-06f, 7.164723011e-06f, 7.158413535e-06f,
+7.152092457e-06f, 7.145759787e-06f, 7.139415540e-06f, 7.133059726e-06f, 7.126692359e-06f, 7.120313452e-06f, 7.113923016e-06f, 7.107521064e-06f, 7.101107609e-06f, 7.094682663e-06f,
+7.088246239e-06f, 7.081798349e-06f, 7.075339006e-06f, 7.068868224e-06f, 7.062386013e-06f, 7.055892388e-06f, 7.049387360e-06f, 7.042870943e-06f, 7.036343148e-06f, 7.029803990e-06f,
+7.023253480e-06f, 7.016691632e-06f, 7.010118458e-06f, 7.003533971e-06f, 6.996938184e-06f, 6.990331110e-06f, 6.983712761e-06f, 6.977083151e-06f, 6.970442292e-06f, 6.963790198e-06f,
+6.957126880e-06f, 6.950452353e-06f, 6.943766630e-06f, 6.937069722e-06f, 6.930361644e-06f, 6.923642408e-06f, 6.916912027e-06f, 6.910170514e-06f, 6.903417883e-06f, 6.896654147e-06f,
+6.889879318e-06f, 6.883093410e-06f, 6.876296436e-06f, 6.869488409e-06f, 6.862669342e-06f, 6.855839249e-06f, 6.848998143e-06f, 6.842146037e-06f, 6.835282943e-06f, 6.828408877e-06f,
+6.821523850e-06f, 6.814627877e-06f, 6.807720969e-06f, 6.800803142e-06f, 6.793874408e-06f, 6.786934780e-06f, 6.779984273e-06f, 6.773022898e-06f, 6.766050671e-06f, 6.759067603e-06f,
+6.752073710e-06f, 6.745069003e-06f, 6.738053498e-06f, 6.731027206e-06f, 6.723990143e-06f, 6.716942320e-06f, 6.709883753e-06f, 6.702814454e-06f, 6.695734436e-06f, 6.688643715e-06f,
+6.681542303e-06f, 6.674430214e-06f, 6.667307461e-06f, 6.660174059e-06f, 6.653030021e-06f, 6.645875361e-06f, 6.638710092e-06f, 6.631534228e-06f, 6.624347783e-06f, 6.617150771e-06f,
+6.609943206e-06f, 6.602725101e-06f, 6.595496470e-06f, 6.588257328e-06f, 6.581007687e-06f, 6.573747562e-06f, 6.566476967e-06f, 6.559195916e-06f, 6.551904422e-06f, 6.544602500e-06f,
+6.537290163e-06f, 6.529967426e-06f, 6.522634302e-06f, 6.515290806e-06f, 6.507936952e-06f, 6.500572753e-06f, 6.493198223e-06f, 6.485813378e-06f, 6.478418230e-06f, 6.471012794e-06f,
+6.463597085e-06f, 6.456171115e-06f, 6.448734900e-06f, 6.441288454e-06f, 6.433831790e-06f, 6.426364923e-06f, 6.418887868e-06f, 6.411400638e-06f, 6.403903247e-06f, 6.396395711e-06f,
+6.388878043e-06f, 6.381350257e-06f, 6.373812368e-06f, 6.366264391e-06f, 6.358706339e-06f, 6.351138227e-06f, 6.343560069e-06f, 6.335971880e-06f, 6.328373674e-06f, 6.320765466e-06f,
+6.313147270e-06f, 6.305519100e-06f, 6.297880971e-06f, 6.290232898e-06f, 6.282574894e-06f, 6.274906975e-06f, 6.267229155e-06f, 6.259541449e-06f, 6.251843870e-06f, 6.244136434e-06f,
+6.236419156e-06f, 6.228692050e-06f, 6.220955130e-06f, 6.213208411e-06f, 6.205451908e-06f, 6.197685636e-06f, 6.189909609e-06f, 6.182123842e-06f, 6.174328349e-06f, 6.166523146e-06f,
+6.158708247e-06f, 6.150883667e-06f, 6.143049420e-06f, 6.135205522e-06f, 6.127351987e-06f, 6.119488830e-06f, 6.111616067e-06f, 6.103733711e-06f, 6.095841777e-06f, 6.087940282e-06f,
+6.080029238e-06f, 6.072108662e-06f, 6.064178569e-06f, 6.056238972e-06f, 6.048289888e-06f, 6.040331331e-06f, 6.032363316e-06f, 6.024385858e-06f, 6.016398972e-06f, 6.008402673e-06f,
+6.000396977e-06f, 5.992381898e-06f, 5.984357451e-06f, 5.976323652e-06f, 5.968280515e-06f, 5.960228056e-06f, 5.952166290e-06f, 5.944095231e-06f, 5.936014896e-06f, 5.927925299e-06f,
+5.919826455e-06f, 5.911718380e-06f, 5.903601089e-06f, 5.895474597e-06f, 5.887338920e-06f, 5.879194072e-06f, 5.871040068e-06f, 5.862876925e-06f, 5.854704658e-06f, 5.846523281e-06f,
+5.838332810e-06f, 5.830133260e-06f, 5.821924648e-06f, 5.813706987e-06f, 5.805480294e-06f, 5.797244584e-06f, 5.788999873e-06f, 5.780746175e-06f, 5.772483506e-06f, 5.764211882e-06f,
+5.755931318e-06f, 5.747641829e-06f, 5.739343432e-06f, 5.731036141e-06f, 5.722719972e-06f, 5.714394941e-06f, 5.706061063e-06f, 5.697718354e-06f, 5.689366829e-06f, 5.681006504e-06f,
+5.672637395e-06f, 5.664259516e-06f, 5.655872884e-06f, 5.647477515e-06f, 5.639073424e-06f, 5.630660626e-06f, 5.622239137e-06f, 5.613808974e-06f, 5.605370151e-06f, 5.596922685e-06f,
+5.588466591e-06f, 5.580001885e-06f, 5.571528583e-06f, 5.563046700e-06f, 5.554556252e-06f, 5.546057255e-06f, 5.537549725e-06f, 5.529033678e-06f, 5.520509129e-06f, 5.511976095e-06f,
+5.503434590e-06f, 5.494884632e-06f, 5.486326236e-06f, 5.477759417e-06f, 5.469184192e-06f, 5.460600577e-06f, 5.452008588e-06f, 5.443408240e-06f, 5.434799549e-06f, 5.426182532e-06f,
+5.417557205e-06f, 5.408923582e-06f, 5.400281682e-06f, 5.391631518e-06f, 5.382973109e-06f, 5.374306469e-06f, 5.365631614e-06f, 5.356948561e-06f, 5.348257326e-06f, 5.339557925e-06f,
+5.330850373e-06f, 5.322134688e-06f, 5.313410885e-06f, 5.304678980e-06f, 5.295938990e-06f, 5.287190931e-06f, 5.278434818e-06f, 5.269670668e-06f, 5.260898498e-06f, 5.252118323e-06f,
+5.243330159e-06f, 5.234534024e-06f, 5.225729933e-06f, 5.216917902e-06f, 5.208097948e-06f, 5.199270087e-06f, 5.190434335e-06f, 5.181590708e-06f, 5.172739224e-06f, 5.163879898e-06f,
+5.155012746e-06f, 5.146137786e-06f, 5.137255032e-06f, 5.128364503e-06f, 5.119466213e-06f, 5.110560180e-06f, 5.101646419e-06f, 5.092724948e-06f, 5.083795783e-06f, 5.074858940e-06f,
+5.065914435e-06f, 5.056962286e-06f, 5.048002508e-06f, 5.039035118e-06f, 5.030060133e-06f, 5.021077569e-06f, 5.012087442e-06f, 5.003089770e-06f, 4.994084568e-06f, 4.985071854e-06f,
+4.976051643e-06f, 4.967023953e-06f, 4.957988799e-06f, 4.948946199e-06f, 4.939896170e-06f, 4.930838727e-06f, 4.921773887e-06f, 4.912701668e-06f, 4.903622085e-06f, 4.894535156e-06f,
+4.885440897e-06f, 4.876339324e-06f, 4.867230455e-06f, 4.858114307e-06f, 4.848990895e-06f, 4.839860236e-06f, 4.830722348e-06f, 4.821577247e-06f, 4.812424950e-06f, 4.803265473e-06f,
+4.794098834e-06f, 4.784925049e-06f, 4.775744135e-06f, 4.766556109e-06f, 4.757360987e-06f, 4.748158787e-06f, 4.738949525e-06f, 4.729733218e-06f, 4.720509883e-06f, 4.711279537e-06f,
+4.702042197e-06f, 4.692797879e-06f, 4.683546601e-06f, 4.674288380e-06f, 4.665023231e-06f, 4.655751173e-06f, 4.646472223e-06f, 4.637186396e-06f, 4.627893711e-06f, 4.618594183e-06f,
+4.609287831e-06f, 4.599974671e-06f, 4.590654720e-06f, 4.581327995e-06f, 4.571994513e-06f, 4.562654291e-06f, 4.553307347e-06f, 4.543953696e-06f, 4.534593357e-06f, 4.525226346e-06f,
+4.515852681e-06f, 4.506472378e-06f, 4.497085455e-06f, 4.487691928e-06f, 4.478291816e-06f, 4.468885134e-06f, 4.459471900e-06f, 4.450052132e-06f, 4.440625845e-06f, 4.431193059e-06f,
+4.421753789e-06f, 4.412308053e-06f, 4.402855868e-06f, 4.393397251e-06f, 4.383932219e-06f, 4.374460790e-06f, 4.364982982e-06f, 4.355498810e-06f, 4.346008292e-06f, 4.336511446e-06f,
+4.327008289e-06f, 4.317498838e-06f, 4.307983111e-06f, 4.298461124e-06f, 4.288932895e-06f, 4.279398442e-06f, 4.269857780e-06f, 4.260310929e-06f, 4.250757905e-06f, 4.241198726e-06f,
+4.231633408e-06f, 4.222061970e-06f, 4.212484429e-06f, 4.202900801e-06f, 4.193311105e-06f, 4.183715357e-06f, 4.174113575e-06f, 4.164505778e-06f, 4.154891981e-06f, 4.145272202e-06f,
+4.135646459e-06f, 4.126014769e-06f, 4.116377151e-06f, 4.106733620e-06f, 4.097084194e-06f, 4.087428892e-06f, 4.077767730e-06f, 4.068100727e-06f, 4.058427898e-06f, 4.048749263e-06f,
+4.039064838e-06f, 4.029374642e-06f, 4.019678690e-06f, 4.009977002e-06f, 4.000269595e-06f, 3.990556485e-06f, 3.980837692e-06f, 3.971113231e-06f, 3.961383122e-06f, 3.951647380e-06f,
+3.941906025e-06f, 3.932159073e-06f, 3.922406543e-06f, 3.912648451e-06f, 3.902884816e-06f, 3.893115654e-06f, 3.883340985e-06f, 3.873560824e-06f, 3.863775191e-06f, 3.853984102e-06f,
+3.844187575e-06f, 3.834385628e-06f, 3.824578279e-06f, 3.814765545e-06f, 3.804947444e-06f, 3.795123993e-06f, 3.785295211e-06f, 3.775461115e-06f, 3.765621722e-06f, 3.755777051e-06f,
+3.745927120e-06f, 3.736071945e-06f, 3.726211545e-06f, 3.716345937e-06f, 3.706475139e-06f, 3.696599170e-06f, 3.686718046e-06f, 3.676831785e-06f, 3.666940406e-06f, 3.657043925e-06f,
+3.647142362e-06f, 3.637235733e-06f, 3.627324057e-06f, 3.617407351e-06f, 3.607485633e-06f, 3.597558921e-06f, 3.587627232e-06f, 3.577690586e-06f, 3.567748998e-06f, 3.557802488e-06f,
+3.547851073e-06f, 3.537894772e-06f, 3.527933601e-06f, 3.517967578e-06f, 3.507996723e-06f, 3.498021052e-06f, 3.488040583e-06f, 3.478055335e-06f, 3.468065324e-06f, 3.458070571e-06f,
+3.448071091e-06f, 3.438066903e-06f, 3.428058025e-06f, 3.418044475e-06f, 3.408026271e-06f, 3.398003430e-06f, 3.387975971e-06f, 3.377943912e-06f, 3.367907271e-06f, 3.357866065e-06f,
+3.347820313e-06f, 3.337770032e-06f, 3.327715241e-06f, 3.317655958e-06f, 3.307592200e-06f, 3.297523985e-06f, 3.287451333e-06f, 3.277374259e-06f, 3.267292784e-06f, 3.257206924e-06f,
+3.247116698e-06f, 3.237022123e-06f, 3.226923219e-06f, 3.216820002e-06f, 3.206712491e-06f, 3.196600704e-06f, 3.186484658e-06f, 3.176364373e-06f, 3.166239866e-06f, 3.156111156e-06f,
+3.145978259e-06f, 3.135841195e-06f, 3.125699982e-06f, 3.115554637e-06f, 3.105405179e-06f, 3.095251625e-06f, 3.085093995e-06f, 3.074932305e-06f, 3.064766575e-06f, 3.054596822e-06f,
+3.044423064e-06f, 3.034245320e-06f, 3.024063608e-06f, 3.013877945e-06f, 3.003688351e-06f, 2.993494842e-06f, 2.983297438e-06f, 2.973096156e-06f, 2.962891015e-06f, 2.952682033e-06f,
+2.942469228e-06f, 2.932252618e-06f, 2.922032221e-06f, 2.911808056e-06f, 2.901580141e-06f, 2.891348493e-06f, 2.881113132e-06f, 2.870874075e-06f, 2.860631341e-06f, 2.850384947e-06f,
+2.840134913e-06f, 2.829881256e-06f, 2.819623994e-06f, 2.809363146e-06f, 2.799098729e-06f, 2.788830763e-06f, 2.778559266e-06f, 2.768284255e-06f, 2.758005749e-06f, 2.747723766e-06f,
+2.737438324e-06f, 2.727149442e-06f, 2.716857138e-06f, 2.706561431e-06f, 2.696262337e-06f, 2.685959877e-06f, 2.675654068e-06f, 2.665344928e-06f, 2.655032475e-06f, 2.644716729e-06f,
+2.634397706e-06f, 2.624075426e-06f, 2.613749907e-06f, 2.603421168e-06f, 2.593089225e-06f, 2.582754098e-06f, 2.572415805e-06f, 2.562074365e-06f, 2.551729795e-06f, 2.541382115e-06f,
+2.531031341e-06f, 2.520677493e-06f, 2.510320590e-06f, 2.499960648e-06f, 2.489597687e-06f, 2.479231726e-06f, 2.468862781e-06f, 2.458490872e-06f, 2.448116018e-06f, 2.437738235e-06f,
+2.427357544e-06f, 2.416973961e-06f, 2.406587506e-06f, 2.396198197e-06f, 2.385806052e-06f, 2.375411089e-06f, 2.365013328e-06f, 2.354612785e-06f, 2.344209481e-06f, 2.333803432e-06f,
+2.323394658e-06f, 2.312983177e-06f, 2.302569007e-06f, 2.292152167e-06f, 2.281732674e-06f, 2.271310548e-06f, 2.260885807e-06f, 2.250458469e-06f, 2.240028552e-06f, 2.229596076e-06f,
+2.219161058e-06f, 2.208723516e-06f, 2.198283470e-06f, 2.187840938e-06f, 2.177395937e-06f, 2.166948487e-06f, 2.156498606e-06f, 2.146046312e-06f, 2.135591623e-06f, 2.125134559e-06f,
+2.114675137e-06f, 2.104213376e-06f, 2.093749295e-06f, 2.083282911e-06f, 2.072814244e-06f, 2.062343311e-06f, 2.051870132e-06f, 2.041394724e-06f, 2.030917105e-06f, 2.020437296e-06f,
+2.009955313e-06f, 1.999471175e-06f, 1.988984901e-06f, 1.978496510e-06f, 1.968006019e-06f, 1.957513447e-06f, 1.947018812e-06f, 1.936522134e-06f, 1.926023430e-06f, 1.915522718e-06f,
+1.905020018e-06f, 1.894515348e-06f, 1.884008726e-06f, 1.873500171e-06f, 1.862989701e-06f, 1.852477334e-06f, 1.841963089e-06f, 1.831446985e-06f, 1.820929040e-06f, 1.810409273e-06f,
+1.799887701e-06f, 1.789364343e-06f, 1.778839219e-06f, 1.768312346e-06f, 1.757783742e-06f, 1.747253427e-06f, 1.736721418e-06f, 1.726187734e-06f, 1.715652394e-06f, 1.705115416e-06f,
+1.694576819e-06f, 1.684036621e-06f, 1.673494840e-06f, 1.662951495e-06f, 1.652406604e-06f, 1.641860187e-06f, 1.631312260e-06f, 1.620762844e-06f, 1.610211956e-06f, 1.599659615e-06f,
+1.589105839e-06f, 1.578550646e-06f, 1.567994056e-06f, 1.557436086e-06f, 1.546876756e-06f, 1.536316083e-06f, 1.525754086e-06f, 1.515190784e-06f, 1.504626195e-06f, 1.494060337e-06f,
+1.483493230e-06f, 1.472924891e-06f, 1.462355338e-06f, 1.451784591e-06f, 1.441212668e-06f, 1.430639587e-06f, 1.420065367e-06f, 1.409490026e-06f, 1.398913583e-06f, 1.388336057e-06f,
+1.377757464e-06f, 1.367177825e-06f, 1.356597158e-06f, 1.346015481e-06f, 1.335432812e-06f, 1.324849170e-06f, 1.314264573e-06f, 1.303679041e-06f, 1.293092591e-06f, 1.282505242e-06f,
+1.271917012e-06f, 1.261327920e-06f, 1.250737984e-06f, 1.240147223e-06f, 1.229555655e-06f, 1.218963298e-06f, 1.208370172e-06f, 1.197776294e-06f, 1.187181683e-06f, 1.176586358e-06f,
+1.165990336e-06f, 1.155393637e-06f, 1.144796279e-06f, 1.134198280e-06f, 1.123599658e-06f, 1.113000433e-06f, 1.102400622e-06f, 1.091800245e-06f, 1.081199318e-06f, 1.070597862e-06f,
+1.059995894e-06f, 1.049393433e-06f, 1.038790497e-06f, 1.028187105e-06f, 1.017583275e-06f, 1.006979025e-06f, 9.963743742e-07f, 9.857693409e-07f, 9.751639433e-07f, 9.645582000e-07f,
+9.539521294e-07f, 9.433457499e-07f, 9.327390799e-07f, 9.221321378e-07f, 9.115249420e-07f, 9.009175110e-07f, 8.903098631e-07f, 8.797020169e-07f, 8.690939906e-07f, 8.584858027e-07f,
+8.478774717e-07f, 8.372690158e-07f, 8.266604535e-07f, 8.160518033e-07f, 8.054430834e-07f, 7.948343123e-07f, 7.842255085e-07f, 7.736166901e-07f, 7.630078758e-07f, 7.523990838e-07f,
+7.417903325e-07f, 7.311816404e-07f, 7.205730257e-07f, 7.099645069e-07f, 6.993561024e-07f, 6.887478304e-07f, 6.781397094e-07f, 6.675317578e-07f, 6.569239939e-07f, 6.463164360e-07f,
+6.357091025e-07f, 6.251020119e-07f, 6.144951823e-07f, 6.038886323e-07f, 5.932823800e-07f, 5.826764439e-07f, 5.720708424e-07f, 5.614655936e-07f, 5.508607161e-07f, 5.402562281e-07f,
+5.296521479e-07f, 5.190484939e-07f, 5.084452843e-07f, 4.978425376e-07f, 4.872402720e-07f, 4.766385058e-07f, 4.660372574e-07f, 4.554365450e-07f, 4.448363870e-07f, 4.342368017e-07f,
+4.236378073e-07f, 4.130394222e-07f, 4.024416646e-07f, 3.918445528e-07f, 3.812481051e-07f, 3.706523399e-07f, 3.600572753e-07f, 3.494629296e-07f, 3.388693212e-07f, 3.282764682e-07f,
+3.176843890e-07f, 3.070931018e-07f, 2.965026248e-07f, 2.859129763e-07f, 2.753241746e-07f, 2.647362378e-07f, 2.541491844e-07f, 2.435630323e-07f, 2.329778000e-07f, 2.223935056e-07f,
+2.118101674e-07f, 2.012278035e-07f, 1.906464323e-07f, 1.800660718e-07f, 1.694867404e-07f, 1.589084561e-07f, 1.483312373e-07f, 1.377551021e-07f, 1.271800687e-07f, 1.166061553e-07f,
+1.060333801e-07f, 9.546176124e-08f, 8.489131690e-08f, 7.432206526e-08f, 6.375402448e-08f, 5.318721274e-08f, 4.262164818e-08f, 3.205734896e-08f, 2.149433322e-08f, 1.093261911e-08f,
+3.722247716e-10f, -1.018683166e-08f, -2.074453207e-08f, -3.130085831e-08f, -4.185579228e-08f, -5.240931585e-08f, -6.296141091e-08f, -7.351205936e-08f, -8.406124310e-08f, -9.460894402e-08f,
+-1.051551440e-07f, -1.156998251e-07f, -1.262429690e-07f, -1.367845579e-07f, -1.473245735e-07f, -1.578629978e-07f, -1.683998127e-07f, -1.789350003e-07f, -1.894685423e-07f, -2.000004209e-07f,
+-2.105306180e-07f, -2.210591154e-07f, -2.315858952e-07f, -2.421109394e-07f, -2.526342300e-07f, -2.631557488e-07f, -2.736754780e-07f, -2.841933995e-07f, -2.947094953e-07f, -3.052237474e-07f,
+-3.157361378e-07f, -3.262466486e-07f, -3.367552617e-07f, -3.472619593e-07f, -3.577667233e-07f, -3.682695357e-07f, -3.787703787e-07f, -3.892692342e-07f, -3.997660844e-07f, -4.102609112e-07f,
+-4.207536968e-07f, -4.312444232e-07f, -4.417330725e-07f, -4.522196269e-07f, -4.627040683e-07f, -4.731863789e-07f, -4.836665407e-07f, -4.941445360e-07f, -5.046203468e-07f, -5.150939552e-07f,
+-5.255653434e-07f, -5.360344935e-07f, -5.465013876e-07f, -5.569660079e-07f, -5.674283365e-07f, -5.778883557e-07f, -5.883460474e-07f, -5.988013940e-07f, -6.092543777e-07f, -6.197049805e-07f,
+-6.301531847e-07f, -6.405989724e-07f, -6.510423260e-07f, -6.614832275e-07f, -6.719216592e-07f, -6.823576034e-07f, -6.927910422e-07f, -7.032219579e-07f, -7.136503328e-07f, -7.240761490e-07f,
+-7.344993889e-07f, -7.449200347e-07f, -7.553380687e-07f, -7.657534731e-07f, -7.761662302e-07f, -7.865763224e-07f, -7.969837318e-07f, -8.073884409e-07f, -8.177904320e-07f, -8.281896872e-07f,
+-8.385861891e-07f, -8.489799199e-07f, -8.593708619e-07f, -8.697589974e-07f, -8.801443090e-07f, -8.905267788e-07f, -9.009063893e-07f, -9.112831228e-07f, -9.216569618e-07f, -9.320278885e-07f,
+-9.423958855e-07f, -9.527609351e-07f, -9.631230197e-07f, -9.734821217e-07f, -9.838382236e-07f, -9.941913078e-07f, -1.004541357e-06f, -1.014888353e-06f, -1.025232279e-06f, -1.035573117e-06f,
+-1.045910849e-06f, -1.056245458e-06f, -1.066576927e-06f, -1.076905238e-06f, -1.087230374e-06f, -1.097552317e-06f, -1.107871049e-06f, -1.118186553e-06f, -1.128498812e-06f, -1.138807808e-06f,
+-1.149113524e-06f, -1.159415942e-06f, -1.169715044e-06f, -1.180010814e-06f, -1.190303235e-06f, -1.200592287e-06f, -1.210877955e-06f, -1.221160221e-06f, -1.231439067e-06f, -1.241714475e-06f,
+-1.251986430e-06f, -1.262254913e-06f, -1.272519906e-06f, -1.282781394e-06f, -1.293039357e-06f, -1.303293779e-06f, -1.313544643e-06f, -1.323791931e-06f, -1.334035626e-06f, -1.344275711e-06f,
+-1.354512168e-06f, -1.364744980e-06f, -1.374974130e-06f, -1.385199600e-06f, -1.395421374e-06f, -1.405639434e-06f, -1.415853762e-06f, -1.426064342e-06f, -1.436271157e-06f, -1.446474188e-06f,
+-1.456673420e-06f, -1.466868834e-06f, -1.477060414e-06f, -1.487248142e-06f, -1.497432001e-06f, -1.507611975e-06f, -1.517788045e-06f, -1.527960195e-06f, -1.538128408e-06f, -1.548292666e-06f,
+-1.558452952e-06f, -1.568609250e-06f, -1.578761542e-06f, -1.588909811e-06f, -1.599054041e-06f, -1.609194213e-06f, -1.619330311e-06f, -1.629462318e-06f, -1.639590216e-06f, -1.649713990e-06f,
+-1.659833621e-06f, -1.669949093e-06f, -1.680060389e-06f, -1.690167491e-06f, -1.700270384e-06f, -1.710369049e-06f, -1.720463469e-06f, -1.730553629e-06f, -1.740639511e-06f, -1.750721097e-06f,
+-1.760798372e-06f, -1.770871318e-06f, -1.780939918e-06f, -1.791004155e-06f, -1.801064013e-06f, -1.811119475e-06f, -1.821170523e-06f, -1.831217141e-06f, -1.841259311e-06f, -1.851297019e-06f,
+-1.861330245e-06f, -1.871358974e-06f, -1.881383188e-06f, -1.891402872e-06f, -1.901418007e-06f, -1.911428578e-06f, -1.921434568e-06f, -1.931435959e-06f, -1.941432735e-06f, -1.951424880e-06f,
+-1.961412376e-06f, -1.971395207e-06f, -1.981373356e-06f, -1.991346807e-06f, -2.001315542e-06f, -2.011279546e-06f, -2.021238800e-06f, -2.031193290e-06f, -2.041142998e-06f, -2.051087907e-06f,
+-2.061028001e-06f, -2.070963263e-06f, -2.080893677e-06f, -2.090819226e-06f, -2.100739893e-06f, -2.110655663e-06f, -2.120566517e-06f, -2.130472440e-06f, -2.140373416e-06f, -2.150269427e-06f,
+-2.160160457e-06f, -2.170046490e-06f, -2.179927510e-06f, -2.189803498e-06f, -2.199674440e-06f, -2.209540319e-06f, -2.219401118e-06f, -2.229256821e-06f, -2.239107411e-06f, -2.248952872e-06f,
+-2.258793188e-06f, -2.268628342e-06f, -2.278458318e-06f, -2.288283099e-06f, -2.298102669e-06f, -2.307917011e-06f, -2.317726110e-06f, -2.327529949e-06f, -2.337328512e-06f, -2.347121782e-06f,
+-2.356909743e-06f, -2.366692379e-06f, -2.376469673e-06f, -2.386241610e-06f, -2.396008172e-06f, -2.405769344e-06f, -2.415525110e-06f, -2.425275453e-06f, -2.435020357e-06f, -2.444759805e-06f,
+-2.454493783e-06f, -2.464222273e-06f, -2.473945259e-06f, -2.483662725e-06f, -2.493374656e-06f, -2.503081034e-06f, -2.512781845e-06f, -2.522477070e-06f, -2.532166696e-06f, -2.541850705e-06f,
+-2.551529081e-06f, -2.561201809e-06f, -2.570868872e-06f, -2.580530254e-06f, -2.590185940e-06f, -2.599835913e-06f, -2.609480157e-06f, -2.619118657e-06f, -2.628751396e-06f, -2.638378358e-06f,
+-2.647999527e-06f, -2.657614888e-06f, -2.667224425e-06f, -2.676828121e-06f, -2.686425961e-06f, -2.696017928e-06f, -2.705604008e-06f, -2.715184183e-06f, -2.724758439e-06f, -2.734326760e-06f,
+-2.743889128e-06f, -2.753445530e-06f, -2.762995948e-06f, -2.772540368e-06f, -2.782078773e-06f, -2.791611148e-06f, -2.801137476e-06f, -2.810657743e-06f, -2.820171932e-06f, -2.829680027e-06f,
+-2.839182014e-06f, -2.848677875e-06f, -2.858167597e-06f, -2.867651162e-06f, -2.877128555e-06f, -2.886599761e-06f, -2.896064765e-06f, -2.905523549e-06f, -2.914976099e-06f, -2.924422400e-06f,
+-2.933862435e-06f, -2.943296189e-06f, -2.952723646e-06f, -2.962144792e-06f, -2.971559609e-06f, -2.980968084e-06f, -2.990370200e-06f, -2.999765943e-06f, -3.009155295e-06f, -3.018538243e-06f,
+-3.027914770e-06f, -3.037284861e-06f, -3.046648501e-06f, -3.056005674e-06f, -3.065356365e-06f, -3.074700559e-06f, -3.084038239e-06f, -3.093369392e-06f, -3.102694000e-06f, -3.112012050e-06f,
+-3.121323526e-06f, -3.130628412e-06f, -3.139926694e-06f, -3.149218355e-06f, -3.158503381e-06f, -3.167781756e-06f, -3.177053466e-06f, -3.186318494e-06f, -3.195576827e-06f, -3.204828447e-06f,
+-3.214073342e-06f, -3.223311494e-06f, -3.232542889e-06f, -3.241767513e-06f, -3.250985349e-06f, -3.260196382e-06f, -3.269400599e-06f, -3.278597983e-06f, -3.287788519e-06f, -3.296972192e-06f,
+-3.306148988e-06f, -3.315318891e-06f, -3.324481887e-06f, -3.333637959e-06f, -3.342787094e-06f, -3.351929277e-06f, -3.361064491e-06f, -3.370192723e-06f, -3.379313957e-06f, -3.388428179e-06f,
+-3.397535374e-06f, -3.406635526e-06f, -3.415728621e-06f, -3.424814645e-06f, -3.433893581e-06f, -3.442965415e-06f, -3.452030134e-06f, -3.461087720e-06f, -3.470138161e-06f, -3.479181441e-06f,
+-3.488217545e-06f, -3.497246459e-06f, -3.506268168e-06f, -3.515282657e-06f, -3.524289911e-06f, -3.533289916e-06f, -3.542282657e-06f, -3.551268120e-06f, -3.560246290e-06f, -3.569217151e-06f,
+-3.578180690e-06f, -3.587136892e-06f, -3.596085743e-06f, -3.605027227e-06f, -3.613961330e-06f, -3.622888038e-06f, -3.631807336e-06f, -3.640719210e-06f, -3.649623645e-06f, -3.658520626e-06f,
+-3.667410140e-06f, -3.676292171e-06f, -3.685166705e-06f, -3.694033729e-06f, -3.702893227e-06f, -3.711745184e-06f, -3.720589588e-06f, -3.729426422e-06f, -3.738255674e-06f, -3.747077328e-06f,
+-3.755891371e-06f, -3.764697787e-06f, -3.773496563e-06f, -3.782287684e-06f, -3.791071137e-06f, -3.799846906e-06f, -3.808614978e-06f, -3.817375338e-06f, -3.826127973e-06f, -3.834872867e-06f,
+-3.843610008e-06f, -3.852339380e-06f, -3.861060970e-06f, -3.869774763e-06f, -3.878480745e-06f, -3.887178903e-06f, -3.895869222e-06f, -3.904551688e-06f, -3.913226286e-06f, -3.921893004e-06f,
+-3.930551827e-06f, -3.939202741e-06f, -3.947845732e-06f, -3.956480786e-06f, -3.965107889e-06f, -3.973727027e-06f, -3.982338186e-06f, -3.990941352e-06f, -3.999536512e-06f, -4.008123652e-06f,
+-4.016702757e-06f, -4.025273814e-06f, -4.033836808e-06f, -4.042391727e-06f, -4.050938557e-06f, -4.059477283e-06f, -4.068007891e-06f, -4.076530369e-06f, -4.085044702e-06f, -4.093550877e-06f,
+-4.102048879e-06f, -4.110538696e-06f, -4.119020314e-06f, -4.127493718e-06f, -4.135958895e-06f, -4.144415832e-06f, -4.152864515e-06f, -4.161304931e-06f, -4.169737065e-06f, -4.178160905e-06f,
+-4.186576436e-06f, -4.194983645e-06f, -4.203382519e-06f, -4.211773045e-06f, -4.220155208e-06f, -4.228528995e-06f, -4.236894393e-06f, -4.245251389e-06f, -4.253599968e-06f, -4.261940118e-06f,
+-4.270271825e-06f, -4.278595076e-06f, -4.286909858e-06f, -4.295216156e-06f, -4.303513959e-06f, -4.311803252e-06f, -4.320084022e-06f, -4.328356256e-06f, -4.336619941e-06f, -4.344875063e-06f,
+-4.353121609e-06f, -4.361359567e-06f, -4.369588922e-06f, -4.377809663e-06f, -4.386021774e-06f, -4.394225244e-06f, -4.402420060e-06f, -4.410606207e-06f, -4.418783674e-06f, -4.426952447e-06f,
+-4.435112513e-06f, -4.443263858e-06f, -4.451406471e-06f, -4.459540338e-06f, -4.467665445e-06f, -4.475781781e-06f, -4.483889331e-06f, -4.491988084e-06f, -4.500078026e-06f, -4.508159144e-06f,
+-4.516231426e-06f, -4.524294858e-06f, -4.532349428e-06f, -4.540395122e-06f, -4.548431929e-06f, -4.556459835e-06f, -4.564478827e-06f, -4.572488894e-06f, -4.580490021e-06f, -4.588482196e-06f,
+-4.596465407e-06f, -4.604439640e-06f, -4.612404884e-06f, -4.620361126e-06f, -4.628308352e-06f, -4.636246550e-06f, -4.644175708e-06f, -4.652095813e-06f, -4.660006852e-06f, -4.667908814e-06f,
+-4.675801684e-06f, -4.683685452e-06f, -4.691560103e-06f, -4.699425627e-06f, -4.707282010e-06f, -4.715129240e-06f, -4.722967304e-06f, -4.730796191e-06f, -4.738615887e-06f, -4.746426380e-06f,
+-4.754227658e-06f, -4.762019709e-06f, -4.769802520e-06f, -4.777576079e-06f, -4.785340373e-06f, -4.793095391e-06f, -4.800841120e-06f, -4.808577548e-06f, -4.816304662e-06f, -4.824022451e-06f,
+-4.831730902e-06f, -4.839430003e-06f, -4.847119742e-06f, -4.854800107e-06f, -4.862471085e-06f, -4.870132665e-06f, -4.877784835e-06f, -4.885427581e-06f, -4.893060893e-06f, -4.900684759e-06f,
+-4.908299166e-06f, -4.915904102e-06f, -4.923499555e-06f, -4.931085514e-06f, -4.938661966e-06f, -4.946228900e-06f, -4.953786304e-06f, -4.961334165e-06f, -4.968872472e-06f, -4.976401213e-06f,
+-4.983920376e-06f, -4.991429950e-06f, -4.998929922e-06f, -5.006420281e-06f, -5.013901015e-06f, -5.021372113e-06f, -5.028833562e-06f, -5.036285351e-06f, -5.043727468e-06f, -5.051159902e-06f,
+-5.058582640e-06f, -5.065995672e-06f, -5.073398986e-06f, -5.080792569e-06f, -5.088176411e-06f, -5.095550500e-06f, -5.102914824e-06f, -5.110269373e-06f, -5.117614133e-06f, -5.124949095e-06f,
+-5.132274246e-06f, -5.139589575e-06f, -5.146895070e-06f, -5.154190721e-06f, -5.161476515e-06f, -5.168752442e-06f, -5.176018489e-06f, -5.183274647e-06f, -5.190520902e-06f, -5.197757245e-06f,
+-5.204983664e-06f, -5.212200147e-06f, -5.219406684e-06f, -5.226603262e-06f, -5.233789871e-06f, -5.240966501e-06f, -5.248133138e-06f, -5.255289773e-06f, -5.262436394e-06f, -5.269572990e-06f,
+-5.276699551e-06f, -5.283816064e-06f, -5.290922519e-06f, -5.298018905e-06f, -5.305105211e-06f, -5.312181426e-06f, -5.319247539e-06f, -5.326303538e-06f, -5.333349414e-06f, -5.340385154e-06f,
+-5.347410749e-06f, -5.354426187e-06f, -5.361431458e-06f, -5.368426549e-06f, -5.375411452e-06f, -5.382386155e-06f, -5.389350647e-06f, -5.396304917e-06f, -5.403248954e-06f, -5.410182749e-06f,
+-5.417106290e-06f, -5.424019566e-06f, -5.430922567e-06f, -5.437815282e-06f, -5.444697701e-06f, -5.451569813e-06f, -5.458431607e-06f, -5.465283072e-06f, -5.472124199e-06f, -5.478954976e-06f,
+-5.485775394e-06f, -5.492585441e-06f, -5.499385107e-06f, -5.506174382e-06f, -5.512953255e-06f, -5.519721716e-06f, -5.526479754e-06f, -5.533227360e-06f, -5.539964522e-06f, -5.546691230e-06f,
+-5.553407474e-06f, -5.560113244e-06f, -5.566808529e-06f, -5.573493319e-06f, -5.580167605e-06f, -5.586831374e-06f, -5.593484619e-06f, -5.600127327e-06f, -5.606759489e-06f, -5.613381096e-06f,
+-5.619992136e-06f, -5.626592600e-06f, -5.633182477e-06f, -5.639761758e-06f, -5.646330432e-06f, -5.652888490e-06f, -5.659435921e-06f, -5.665972716e-06f, -5.672498864e-06f, -5.679014355e-06f,
+-5.685519180e-06f, -5.692013329e-06f, -5.698496792e-06f, -5.704969558e-06f, -5.711431618e-06f, -5.717882962e-06f, -5.724323581e-06f, -5.730753465e-06f, -5.737172603e-06f, -5.743580986e-06f,
+-5.749978604e-06f, -5.756365448e-06f, -5.762741508e-06f, -5.769106774e-06f, -5.775461237e-06f, -5.781804887e-06f, -5.788137714e-06f, -5.794459708e-06f, -5.800770861e-06f, -5.807071162e-06f,
+-5.813360602e-06f, -5.819639172e-06f, -5.825906862e-06f, -5.832163662e-06f, -5.838409564e-06f, -5.844644557e-06f, -5.850868632e-06f, -5.857081780e-06f, -5.863283992e-06f, -5.869475258e-06f,
+-5.875655568e-06f, -5.881824914e-06f, -5.887983287e-06f, -5.894130676e-06f, -5.900267072e-06f, -5.906392467e-06f, -5.912506852e-06f, -5.918610216e-06f, -5.924702551e-06f, -5.930783848e-06f,
+-5.936854097e-06f, -5.942913290e-06f, -5.948961417e-06f, -5.954998469e-06f, -5.961024438e-06f, -5.967039313e-06f, -5.973043087e-06f, -5.979035750e-06f, -5.985017293e-06f, -5.990987708e-06f,
+-5.996946985e-06f, -6.002895115e-06f, -6.008832090e-06f, -6.014757900e-06f, -6.020672538e-06f, -6.026575993e-06f, -6.032468257e-06f, -6.038349322e-06f, -6.044219179e-06f, -6.050077818e-06f,
+-6.055925232e-06f, -6.061761411e-06f, -6.067586346e-06f, -6.073400030e-06f, -6.079202454e-06f, -6.084993608e-06f, -6.090773485e-06f, -6.096542075e-06f, -6.102299370e-06f, -6.108045362e-06f,
+-6.113780042e-06f, -6.119503402e-06f, -6.125215432e-06f, -6.130916126e-06f, -6.136605473e-06f, -6.142283466e-06f, -6.147950097e-06f, -6.153605357e-06f, -6.159249237e-06f, -6.164881730e-06f,
+-6.170502827e-06f, -6.176112519e-06f, -6.181710799e-06f, -6.187297659e-06f, -6.192873089e-06f, -6.198437082e-06f, -6.203989630e-06f, -6.209530724e-06f, -6.215060356e-06f, -6.220578519e-06f,
+-6.226085203e-06f, -6.231580402e-06f, -6.237064107e-06f, -6.242536309e-06f, -6.247997002e-06f, -6.253446176e-06f, -6.258883824e-06f, -6.264309939e-06f, -6.269724511e-06f, -6.275127533e-06f,
+-6.280518998e-06f, -6.285898897e-06f, -6.291267222e-06f, -6.296623967e-06f, -6.301969122e-06f, -6.307302680e-06f, -6.312624633e-06f, -6.317934974e-06f, -6.323233695e-06f, -6.328520788e-06f,
+-6.333796246e-06f, -6.339060060e-06f, -6.344312224e-06f, -6.349552729e-06f, -6.354781568e-06f, -6.359998733e-06f, -6.365204218e-06f, -6.370398013e-06f, -6.375580113e-06f, -6.380750509e-06f,
+-6.385909193e-06f, -6.391056159e-06f, -6.396191399e-06f, -6.401314906e-06f, -6.406426671e-06f, -6.411526689e-06f, -6.416614951e-06f, -6.421691450e-06f, -6.426756179e-06f, -6.431809131e-06f,
+-6.436850298e-06f, -6.441879673e-06f, -6.446897249e-06f, -6.451903019e-06f, -6.456896975e-06f, -6.461879110e-06f, -6.466849418e-06f, -6.471807891e-06f, -6.476754522e-06f, -6.481689304e-06f,
+-6.486612230e-06f, -6.491523293e-06f, -6.496422486e-06f, -6.501309802e-06f, -6.506185234e-06f, -6.511048775e-06f, -6.515900418e-06f, -6.520740157e-06f, -6.525567983e-06f, -6.530383892e-06f,
+-6.535187875e-06f, -6.539979926e-06f, -6.544760038e-06f, -6.549528205e-06f, -6.554284419e-06f, -6.559028674e-06f, -6.563760964e-06f, -6.568481281e-06f, -6.573189618e-06f, -6.577885971e-06f,
+-6.582570330e-06f, -6.587242691e-06f, -6.591903047e-06f, -6.596551390e-06f, -6.601187715e-06f, -6.605812015e-06f, -6.610424283e-06f, -6.615024513e-06f, -6.619612699e-06f, -6.624188834e-06f,
+-6.628752911e-06f, -6.633304925e-06f, -6.637844870e-06f, -6.642372737e-06f, -6.646888523e-06f, -6.651392219e-06f, -6.655883820e-06f, -6.660363320e-06f, -6.664830712e-06f, -6.669285991e-06f,
+-6.673729149e-06f, -6.678160181e-06f, -6.682579081e-06f, -6.686985843e-06f, -6.691380460e-06f, -6.695762927e-06f, -6.700133237e-06f, -6.704491384e-06f, -6.708837363e-06f, -6.713171168e-06f,
+-6.717492791e-06f, -6.721802229e-06f, -6.726099474e-06f, -6.730384520e-06f, -6.734657363e-06f, -6.738917996e-06f, -6.743166412e-06f, -6.747402607e-06f, -6.751626575e-06f, -6.755838310e-06f,
+-6.760037805e-06f, -6.764225056e-06f, -6.768400057e-06f, -6.772562802e-06f, -6.776713285e-06f, -6.780851501e-06f, -6.784977444e-06f, -6.789091109e-06f, -6.793192489e-06f, -6.797281580e-06f,
+-6.801358376e-06f, -6.805422872e-06f, -6.809475061e-06f, -6.813514939e-06f, -6.817542500e-06f, -6.821557738e-06f, -6.825560649e-06f, -6.829551227e-06f, -6.833529467e-06f, -6.837495362e-06f,
+-6.841448909e-06f, -6.845390101e-06f, -6.849318934e-06f, -6.853235402e-06f, -6.857139500e-06f, -6.861031223e-06f, -6.864910565e-06f, -6.868777522e-06f, -6.872632089e-06f, -6.876474259e-06f,
+-6.880304029e-06f, -6.884121393e-06f, -6.887926346e-06f, -6.891718883e-06f, -6.895499000e-06f, -6.899266690e-06f, -6.903021950e-06f, -6.906764774e-06f, -6.910495157e-06f, -6.914213095e-06f,
+-6.917918583e-06f, -6.921611615e-06f, -6.925292188e-06f, -6.928960296e-06f, -6.932615934e-06f, -6.936259098e-06f, -6.939889783e-06f, -6.943507984e-06f, -6.947113697e-06f, -6.950706917e-06f,
+-6.954287639e-06f, -6.957855859e-06f, -6.961411572e-06f, -6.964954773e-06f, -6.968485459e-06f, -6.972003624e-06f, -6.975509264e-06f, -6.979002375e-06f, -6.982482952e-06f, -6.985950991e-06f,
+-6.989406486e-06f, -6.992849435e-06f, -6.996279832e-06f, -6.999697673e-06f, -7.003102955e-06f, -7.006495671e-06f, -7.009875819e-06f, -7.013243394e-06f, -7.016598392e-06f, -7.019940808e-06f,
+-7.023270639e-06f, -7.026587880e-06f, -7.029892527e-06f, -7.033184576e-06f, -7.036464023e-06f, -7.039730863e-06f, -7.042985094e-06f, -7.046226710e-06f, -7.049455707e-06f, -7.052672083e-06f,
+-7.055875832e-06f, -7.059066951e-06f, -7.062245436e-06f, -7.065411283e-06f, -7.068564489e-06f, -7.071705048e-06f, -7.074832958e-06f, -7.077948214e-06f, -7.081050814e-06f, -7.084140752e-06f,
+-7.087218026e-06f, -7.090282632e-06f, -7.093334565e-06f, -7.096373823e-06f, -7.099400402e-06f, -7.102414297e-06f, -7.105415506e-06f, -7.108404025e-06f, -7.111379850e-06f, -7.114342978e-06f,
+-7.117293405e-06f, -7.120231128e-06f, -7.123156143e-06f, -7.126068446e-06f, -7.128968036e-06f, -7.131854907e-06f, -7.134729057e-06f, -7.137590482e-06f, -7.140439179e-06f, -7.143275145e-06f,
+-7.146098376e-06f, -7.148908869e-06f, -7.151706621e-06f, -7.154491629e-06f, -7.157263889e-06f, -7.160023398e-06f, -7.162770153e-06f, -7.165504152e-06f, -7.168225390e-06f, -7.170933864e-06f,
+-7.173629573e-06f, -7.176312512e-06f, -7.178982679e-06f, -7.181640071e-06f, -7.184284684e-06f, -7.186916516e-06f, -7.189535563e-06f, -7.192141824e-06f, -7.194735294e-06f, -7.197315972e-06f,
+-7.199883854e-06f, -7.202438937e-06f, -7.204981219e-06f, -7.207510698e-06f, -7.210027369e-06f, -7.212531231e-06f, -7.215022280e-06f, -7.217500514e-06f, -7.219965931e-06f, -7.222418528e-06f,
+-7.224858302e-06f, -7.227285251e-06f, -7.229699371e-06f, -7.232100661e-06f, -7.234489118e-06f, -7.236864739e-06f, -7.239227522e-06f, -7.241577465e-06f, -7.243914565e-06f, -7.246238820e-06f,
+-7.248550227e-06f, -7.250848783e-06f, -7.253134488e-06f, -7.255407337e-06f, -7.257667330e-06f, -7.259914463e-06f, -7.262148735e-06f, -7.264370143e-06f, -7.266578685e-06f, -7.268774359e-06f,
+-7.270957162e-06f, -7.273127093e-06f, -7.275284150e-06f, -7.277428329e-06f, -7.279559630e-06f, -7.281678050e-06f, -7.283783588e-06f, -7.285876240e-06f, -7.287956006e-06f, -7.290022883e-06f,
+-7.292076869e-06f, -7.294117963e-06f, -7.296146162e-06f, -7.298161465e-06f, -7.300163870e-06f, -7.302153375e-06f, -7.304129977e-06f, -7.306093677e-06f, -7.308044470e-06f, -7.309982357e-06f,
+-7.311907335e-06f, -7.313819403e-06f, -7.315718558e-06f, -7.317604800e-06f, -7.319478126e-06f, -7.321338535e-06f, -7.323186026e-06f, -7.325020596e-06f, -7.326842245e-06f, -7.328650971e-06f,
+-7.330446772e-06f, -7.332229647e-06f, -7.333999594e-06f, -7.335756613e-06f, -7.337500701e-06f, -7.339231857e-06f, -7.340950081e-06f, -7.342655370e-06f, -7.344347723e-06f, -7.346027140e-06f,
+-7.347693618e-06f, -7.349347157e-06f, -7.350987755e-06f, -7.352615411e-06f, -7.354230124e-06f, -7.355831893e-06f, -7.357420717e-06f, -7.358996595e-06f, -7.360559525e-06f, -7.362109506e-06f,
+-7.363646538e-06f, -7.365170620e-06f, -7.366681750e-06f, -7.368179927e-06f, -7.369665151e-06f, -7.371137421e-06f, -7.372596736e-06f, -7.374043094e-06f, -7.375476495e-06f, -7.376896939e-06f,
+-7.378304424e-06f, -7.379698950e-06f, -7.381080515e-06f, -7.382449120e-06f, -7.383804763e-06f, -7.385147444e-06f, -7.386477162e-06f, -7.387793916e-06f, -7.389097706e-06f, -7.390388532e-06f,
+-7.391666391e-06f, -7.392931285e-06f, -7.394183213e-06f, -7.395422173e-06f, -7.396648166e-06f, -7.397861191e-06f, -7.399061248e-06f, -7.400248336e-06f, -7.401422455e-06f, -7.402583604e-06f,
+-7.403731783e-06f, -7.404866992e-06f, -7.405989230e-06f, -7.407098497e-06f, -7.408194794e-06f, -7.409278119e-06f, -7.410348472e-06f, -7.411405854e-06f, -7.412450263e-06f, -7.413481701e-06f,
+-7.414500166e-06f, -7.415505659e-06f, -7.416498180e-06f, -7.417477728e-06f, -7.418444303e-06f, -7.419397906e-06f, -7.420338537e-06f, -7.421266195e-06f, -7.422180881e-06f, -7.423082594e-06f,
+-7.423971335e-06f, -7.424847103e-06f, -7.425709900e-06f, -7.426559725e-06f, -7.427396579e-06f, -7.428220460e-06f, -7.429031371e-06f, -7.429829311e-06f, -7.430614280e-06f, -7.431386278e-06f,
+-7.432145307e-06f, -7.432891366e-06f, -7.433624455e-06f, -7.434344576e-06f, -7.435051728e-06f, -7.435745912e-06f, -7.436427128e-06f, -7.437095377e-06f, -7.437750659e-06f, -7.438392975e-06f,
+-7.439022326e-06f, -7.439638712e-06f, -7.440242133e-06f, -7.440832590e-06f, -7.441410084e-06f, -7.441974616e-06f, -7.442526185e-06f, -7.443064794e-06f, -7.443590442e-06f, -7.444103130e-06f,
+-7.444602860e-06f, -7.445089631e-06f, -7.445563445e-06f, -7.446024303e-06f, -7.446472205e-06f, -7.446907152e-06f, -7.447329146e-06f, -7.447738186e-06f, -7.448134275e-06f, -7.448517412e-06f,
+-7.448887600e-06f, -7.449244839e-06f, -7.449589129e-06f, -7.449920473e-06f, -7.450238871e-06f, -7.450544325e-06f, -7.450836835e-06f, -7.451116402e-06f, -7.451383029e-06f, -7.451636715e-06f,
+-7.451877462e-06f, -7.452105272e-06f, -7.452320146e-06f, -7.452522084e-06f, -7.452711089e-06f, -7.452887161e-06f, -7.453050303e-06f, -7.453200514e-06f, -7.453337798e-06f, -7.453462154e-06f,
+-7.453573585e-06f, -7.453672092e-06f, -7.453757677e-06f, -7.453830341e-06f, -7.453890085e-06f, -7.453936911e-06f, -7.453970821e-06f, -7.453991817e-06f, -7.453999899e-06f, -7.453995070e-06f,
+-7.453977331e-06f, -7.453946684e-06f, -7.453903130e-06f, -7.453846672e-06f, -7.453777311e-06f, -7.453695048e-06f, -7.453599886e-06f, -7.453491827e-06f, -7.453370872e-06f, -7.453237023e-06f,
+-7.453090283e-06f, -7.452930652e-06f, -7.452758133e-06f, -7.452572727e-06f, -7.452374438e-06f, -7.452163266e-06f, -7.451939215e-06f, -7.451702285e-06f, -7.451452478e-06f, -7.451189798e-06f,
+-7.450914246e-06f, -7.450625824e-06f, -7.450324535e-06f, -7.450010380e-06f, -7.449683362e-06f, -7.449343482e-06f, -7.448990744e-06f, -7.448625149e-06f, -7.448246700e-06f, -7.447855399e-06f,
+-7.447451249e-06f, -7.447034251e-06f, -7.446604408e-06f, -7.446161722e-06f, -7.445706196e-06f, -7.445237833e-06f, -7.444756634e-06f, -7.444262603e-06f, -7.443755741e-06f, -7.443236052e-06f,
+-7.442703537e-06f, -7.442158200e-06f, -7.441600042e-06f, -7.441029067e-06f, -7.440445278e-06f, -7.439848676e-06f, -7.439239264e-06f, -7.438617046e-06f, -7.437982024e-06f, -7.437334200e-06f,
+-7.436673578e-06f, -7.436000160e-06f, -7.435313949e-06f, -7.434614948e-06f, -7.433903160e-06f, -7.433178587e-06f, -7.432441232e-06f, -7.431691099e-06f, -7.430928191e-06f, -7.430152509e-06f,
+-7.429364058e-06f, -7.428562840e-06f, -7.427748859e-06f, -7.426922116e-06f, -7.426082616e-06f, -7.425230362e-06f, -7.424365356e-06f, -7.423487602e-06f, -7.422597103e-06f, -7.421693862e-06f,
+-7.420777882e-06f, -7.419849166e-06f, -7.418907718e-06f, -7.417953542e-06f, -7.416986639e-06f, -7.416007014e-06f, -7.415014670e-06f, -7.414009610e-06f, -7.412991838e-06f, -7.411961357e-06f,
+-7.410918170e-06f, -7.409862282e-06f, -7.408793694e-06f, -7.407712411e-06f, -7.406618437e-06f, -7.405511774e-06f, -7.404392427e-06f, -7.403260399e-06f, -7.402115693e-06f, -7.400958313e-06f,
+-7.399788264e-06f, -7.398605547e-06f, -7.397410168e-06f, -7.396202129e-06f, -7.394981435e-06f, -7.393748089e-06f, -7.392502095e-06f, -7.391243457e-06f, -7.389972178e-06f, -7.388688263e-06f,
+-7.387391715e-06f, -7.386082539e-06f, -7.384760737e-06f, -7.383426314e-06f, -7.382079274e-06f, -7.380719621e-06f, -7.379347358e-06f, -7.377962490e-06f, -7.376565021e-06f, -7.375154955e-06f,
+-7.373732296e-06f, -7.372297047e-06f, -7.370849214e-06f, -7.369388800e-06f, -7.367915809e-06f, -7.366430246e-06f, -7.364932114e-06f, -7.363421418e-06f, -7.361898163e-06f, -7.360362351e-06f,
+-7.358813988e-06f, -7.357253079e-06f, -7.355679626e-06f, -7.354093635e-06f, -7.352495110e-06f, -7.350884055e-06f, -7.349260475e-06f, -7.347624374e-06f, -7.345975756e-06f, -7.344314627e-06f,
+-7.342640990e-06f, -7.340954850e-06f, -7.339256212e-06f, -7.337545079e-06f, -7.335821458e-06f, -7.334085351e-06f, -7.332336765e-06f, -7.330575703e-06f, -7.328802170e-06f, -7.327016171e-06f,
+-7.325217710e-06f, -7.323406792e-06f, -7.321583423e-06f, -7.319747606e-06f, -7.317899347e-06f, -7.316038649e-06f, -7.314165519e-06f, -7.312279961e-06f, -7.310381980e-06f, -7.308471581e-06f,
+-7.306548768e-06f, -7.304613546e-06f, -7.302665921e-06f, -7.300705897e-06f, -7.298733480e-06f, -7.296748674e-06f, -7.294751485e-06f, -7.292741917e-06f, -7.290719976e-06f, -7.288685666e-06f,
+-7.286638993e-06f, -7.284579962e-06f, -7.282508578e-06f, -7.280424847e-06f, -7.278328772e-06f, -7.276220361e-06f, -7.274099617e-06f, -7.271966546e-06f, -7.269821154e-06f, -7.267663446e-06f,
+-7.265493426e-06f, -7.263311101e-06f, -7.261116476e-06f, -7.258909555e-06f, -7.256690346e-06f, -7.254458852e-06f, -7.252215079e-06f, -7.249959033e-06f, -7.247690720e-06f, -7.245410145e-06f,
+-7.243117313e-06f, -7.240812229e-06f, -7.238494900e-06f, -7.236165332e-06f, -7.233823529e-06f, -7.231469497e-06f, -7.229103242e-06f, -7.226724770e-06f, -7.224334086e-06f, -7.221931196e-06f,
+-7.219516106e-06f, -7.217088821e-06f, -7.214649348e-06f, -7.212197691e-06f, -7.209733858e-06f, -7.207257853e-06f, -7.204769682e-06f, -7.202269352e-06f, -7.199756869e-06f, -7.197232238e-06f,
+-7.194695464e-06f, -7.192146555e-06f, -7.189585516e-06f, -7.187012353e-06f, -7.184427073e-06f, -7.181829680e-06f, -7.179220181e-06f, -7.176598583e-06f, -7.173964891e-06f, -7.171319112e-06f,
+-7.168661251e-06f, -7.165991315e-06f, -7.163309310e-06f, -7.160615242e-06f, -7.157909118e-06f, -7.155190943e-06f, -7.152460724e-06f, -7.149718467e-06f, -7.146964178e-06f, -7.144197864e-06f,
+-7.141419532e-06f, -7.138629186e-06f, -7.135826835e-06f, -7.133012484e-06f, -7.130186139e-06f, -7.127347808e-06f, -7.124497496e-06f, -7.121635210e-06f, -7.118760956e-06f, -7.115874742e-06f,
+-7.112976573e-06f, -7.110066456e-06f, -7.107144398e-06f, -7.104210405e-06f, -7.101264484e-06f, -7.098306642e-06f, -7.095336885e-06f, -7.092355220e-06f, -7.089361653e-06f, -7.086356192e-06f,
+-7.083338842e-06f, -7.080309612e-06f, -7.077268506e-06f, -7.074215534e-06f, -7.071150700e-06f, -7.068074013e-06f, -7.064985478e-06f, -7.061885103e-06f, -7.058772895e-06f, -7.055648860e-06f,
+-7.052513006e-06f, -7.049365339e-06f, -7.046205866e-06f, -7.043034595e-06f, -7.039851532e-06f, -7.036656685e-06f, -7.033450060e-06f, -7.030231664e-06f, -7.027001506e-06f, -7.023759591e-06f,
+-7.020505927e-06f, -7.017240520e-06f, -7.013963379e-06f, -7.010674511e-06f, -7.007373922e-06f, -7.004061620e-06f, -7.000737611e-06f, -6.997401904e-06f, -6.994054506e-06f, -6.990695424e-06f,
+-6.987324665e-06f, -6.983942236e-06f, -6.980548145e-06f, -6.977142400e-06f, -6.973725007e-06f, -6.970295974e-06f, -6.966855309e-06f, -6.963403019e-06f, -6.959939111e-06f, -6.956463594e-06f,
+-6.952976473e-06f, -6.949477758e-06f, -6.945967456e-06f, -6.942445573e-06f, -6.938912118e-06f, -6.935367099e-06f, -6.931810523e-06f, -6.928242397e-06f, -6.924662729e-06f, -6.921071528e-06f,
+-6.917468800e-06f, -6.913854554e-06f, -6.910228796e-06f, -6.906591536e-06f, -6.902942780e-06f, -6.899282537e-06f, -6.895610814e-06f, -6.891927619e-06f, -6.888232961e-06f, -6.884526846e-06f,
+-6.880809283e-06f, -6.877080279e-06f, -6.873339844e-06f, -6.869587983e-06f, -6.865824707e-06f, -6.862050021e-06f, -6.858263936e-06f, -6.854466458e-06f, -6.850657595e-06f, -6.846837357e-06f,
+-6.843005750e-06f, -6.839162782e-06f, -6.835308463e-06f, -6.831442800e-06f, -6.827565801e-06f, -6.823677475e-06f, -6.819777829e-06f, -6.815866872e-06f, -6.811944612e-06f, -6.808011058e-06f,
+-6.804066217e-06f, -6.800110098e-06f, -6.796142709e-06f, -6.792164059e-06f, -6.788174155e-06f, -6.784173007e-06f, -6.780160623e-06f, -6.776137010e-06f, -6.772102178e-06f, -6.768056134e-06f,
+-6.763998888e-06f, -6.759930448e-06f, -6.755850822e-06f, -6.751760018e-06f, -6.747658046e-06f, -6.743544914e-06f, -6.739420630e-06f, -6.735285204e-06f, -6.731138642e-06f, -6.726980955e-06f,
+-6.722812151e-06f, -6.718632238e-06f, -6.714441226e-06f, -6.710239122e-06f, -6.706025936e-06f, -6.701801676e-06f, -6.697566351e-06f, -6.693319970e-06f, -6.689062541e-06f, -6.684794074e-06f,
+-6.680514577e-06f, -6.676224059e-06f, -6.671922528e-06f, -6.667609995e-06f, -6.663286467e-06f, -6.658951954e-06f, -6.654606464e-06f, -6.650250007e-06f, -6.645882590e-06f, -6.641504225e-06f,
+-6.637114918e-06f, -6.632714680e-06f, -6.628303519e-06f, -6.623881445e-06f, -6.619448466e-06f, -6.615004592e-06f, -6.610549831e-06f, -6.606084193e-06f, -6.601607687e-06f, -6.597120323e-06f,
+-6.592622108e-06f, -6.588113053e-06f, -6.583593166e-06f, -6.579062458e-06f, -6.574520936e-06f, -6.569968611e-06f, -6.565405492e-06f, -6.560831587e-06f, -6.556246907e-06f, -6.551651460e-06f,
+-6.547045257e-06f, -6.542428305e-06f, -6.537800616e-06f, -6.533162197e-06f, -6.528513059e-06f, -6.523853211e-06f, -6.519182662e-06f, -6.514501423e-06f, -6.509809501e-06f, -6.505106908e-06f,
+-6.500393652e-06f, -6.495669742e-06f, -6.490935189e-06f, -6.486190003e-06f, -6.481434192e-06f, -6.476667766e-06f, -6.471890735e-06f, -6.467103109e-06f, -6.462304896e-06f, -6.457496108e-06f,
+-6.452676753e-06f, -6.447846842e-06f, -6.443006383e-06f, -6.438155387e-06f, -6.433293864e-06f, -6.428421823e-06f, -6.423539274e-06f, -6.418646227e-06f, -6.413742692e-06f, -6.408828678e-06f,
+-6.403904196e-06f, -6.398969255e-06f, -6.394023865e-06f, -6.389068036e-06f, -6.384101779e-06f, -6.379125102e-06f, -6.374138017e-06f, -6.369140532e-06f, -6.364132658e-06f, -6.359114405e-06f,
+-6.354085784e-06f, -6.349046803e-06f, -6.343997473e-06f, -6.338937805e-06f, -6.333867808e-06f, -6.328787492e-06f, -6.323696868e-06f, -6.318595945e-06f, -6.313484735e-06f, -6.308363246e-06f,
+-6.303231490e-06f, -6.298089476e-06f, -6.292937214e-06f, -6.287774716e-06f, -6.282601991e-06f, -6.277419049e-06f, -6.272225901e-06f, -6.267022557e-06f, -6.261809028e-06f, -6.256585323e-06f,
+-6.251351454e-06f, -6.246107430e-06f, -6.240853261e-06f, -6.235588959e-06f, -6.230314534e-06f, -6.225029996e-06f, -6.219735356e-06f, -6.214430624e-06f, -6.209115810e-06f, -6.203790925e-06f,
+-6.198455980e-06f, -6.193110986e-06f, -6.187755951e-06f, -6.182390889e-06f, -6.177015808e-06f, -6.171630719e-06f, -6.166235634e-06f, -6.160830563e-06f, -6.155415515e-06f, -6.149990503e-06f,
+-6.144555537e-06f, -6.139110627e-06f, -6.133655784e-06f, -6.128191019e-06f, -6.122716343e-06f, -6.117231767e-06f, -6.111737300e-06f, -6.106232954e-06f, -6.100718741e-06f, -6.095194669e-06f,
+-6.089660752e-06f, -6.084116998e-06f, -6.078563420e-06f, -6.073000028e-06f, -6.067426833e-06f, -6.061843845e-06f, -6.056251077e-06f, -6.050648538e-06f, -6.045036241e-06f, -6.039414195e-06f,
+-6.033782411e-06f, -6.028140902e-06f, -6.022489677e-06f, -6.016828748e-06f, -6.011158126e-06f, -6.005477822e-06f, -5.999787847e-06f, -5.994088212e-06f, -5.988378928e-06f, -5.982660007e-06f,
+-5.976931459e-06f, -5.971193296e-06f, -5.965445529e-06f, -5.959688169e-06f, -5.953921228e-06f, -5.948144716e-06f, -5.942358645e-06f, -5.936563026e-06f, -5.930757870e-06f, -5.924943189e-06f,
+-5.919118993e-06f, -5.913285295e-06f, -5.907442106e-06f, -5.901589436e-06f, -5.895727298e-06f, -5.889855703e-06f, -5.883974661e-06f, -5.878084185e-06f, -5.872184286e-06f, -5.866274975e-06f,
+-5.860356264e-06f, -5.854428165e-06f, -5.848490688e-06f, -5.842543845e-06f, -5.836587648e-06f, -5.830622108e-06f, -5.824647237e-06f, -5.818663046e-06f, -5.812669548e-06f, -5.806666753e-06f,
+-5.800654673e-06f, -5.794633319e-06f, -5.788602705e-06f, -5.782562840e-06f, -5.776513736e-06f, -5.770455407e-06f, -5.764387862e-06f, -5.758311114e-06f, -5.752225174e-06f, -5.746130055e-06f,
+-5.740025767e-06f, -5.733912323e-06f, -5.727789735e-06f, -5.721658014e-06f, -5.715517172e-06f, -5.709367221e-06f, -5.703208172e-06f, -5.697040038e-06f, -5.690862831e-06f, -5.684676561e-06f,
+-5.678481242e-06f, -5.672276885e-06f, -5.666063502e-06f, -5.659841105e-06f, -5.653609706e-06f, -5.647369317e-06f, -5.641119949e-06f, -5.634861615e-06f, -5.628594327e-06f, -5.622318097e-06f,
+-5.616032937e-06f, -5.609738858e-06f, -5.603435873e-06f, -5.597123995e-06f, -5.590803234e-06f, -5.584473604e-06f, -5.578135116e-06f, -5.571787782e-06f, -5.565431615e-06f, -5.559066627e-06f,
+-5.552692830e-06f, -5.546310235e-06f, -5.539918856e-06f, -5.533518704e-06f, -5.527109792e-06f, -5.520692132e-06f, -5.514265737e-06f, -5.507830617e-06f, -5.501386786e-06f, -5.494934257e-06f,
+-5.488473040e-06f, -5.482003150e-06f, -5.475524597e-06f, -5.469037394e-06f, -5.462541554e-06f, -5.456037090e-06f, -5.449524012e-06f, -5.443002335e-06f, -5.436472069e-06f, -5.429933228e-06f,
+-5.423385825e-06f, -5.416829871e-06f, -5.410265378e-06f, -5.403692361e-06f, -5.397110830e-06f, -5.390520799e-06f, -5.383922280e-06f, -5.377315285e-06f, -5.370699827e-06f, -5.364075919e-06f,
+-5.357443573e-06f, -5.350802802e-06f, -5.344153618e-06f, -5.337496034e-06f, -5.330830063e-06f, -5.324155717e-06f, -5.317473009e-06f, -5.310781951e-06f, -5.304082557e-06f, -5.297374838e-06f,
+-5.290658808e-06f, -5.283934480e-06f, -5.277201865e-06f, -5.270460977e-06f, -5.263711828e-06f, -5.256954432e-06f, -5.250188801e-06f, -5.243414948e-06f, -5.236632885e-06f, -5.229842626e-06f,
+-5.223044183e-06f, -5.216237569e-06f, -5.209422797e-06f, -5.202599880e-06f, -5.195768830e-06f, -5.188929661e-06f, -5.182082386e-06f, -5.175227017e-06f, -5.168363567e-06f, -5.161492049e-06f,
+-5.154612477e-06f, -5.147724863e-06f, -5.140829220e-06f, -5.133925561e-06f, -5.127013899e-06f, -5.120094247e-06f, -5.113166618e-06f, -5.106231026e-06f, -5.099287483e-06f, -5.092336002e-06f,
+-5.085376596e-06f, -5.078409279e-06f, -5.071434063e-06f, -5.064450962e-06f, -5.057459989e-06f, -5.050461157e-06f, -5.043454479e-06f, -5.036439967e-06f, -5.029417637e-06f, -5.022387499e-06f,
+-5.015349569e-06f, -5.008303858e-06f, -5.001250381e-06f, -4.994189150e-06f, -4.987120178e-06f, -4.980043479e-06f, -4.972959067e-06f, -4.965866954e-06f, -4.958767153e-06f, -4.951659678e-06f,
+-4.944544543e-06f, -4.937421760e-06f, -4.930291344e-06f, -4.923153306e-06f, -4.916007661e-06f, -4.908854422e-06f, -4.901693603e-06f, -4.894525216e-06f, -4.887349275e-06f, -4.880165794e-06f,
+-4.872974786e-06f, -4.865776264e-06f, -4.858570242e-06f, -4.851356734e-06f, -4.844135752e-06f, -4.836907310e-06f, -4.829671423e-06f, -4.822428102e-06f, -4.815177362e-06f, -4.807919217e-06f,
+-4.800653679e-06f, -4.793380763e-06f, -4.786100482e-06f, -4.778812849e-06f, -4.771517878e-06f, -4.764215583e-06f, -4.756905977e-06f, -4.749589074e-06f, -4.742264887e-06f, -4.734933431e-06f,
+-4.727594718e-06f, -4.720248763e-06f, -4.712895579e-06f, -4.705535179e-06f, -4.698167578e-06f, -4.690792789e-06f, -4.683410826e-06f, -4.676021703e-06f, -4.668625433e-06f, -4.661222030e-06f,
+-4.653811508e-06f, -4.646393880e-06f, -4.638969161e-06f, -4.631537363e-06f, -4.624098502e-06f, -4.616652591e-06f, -4.609199642e-06f, -4.601739672e-06f, -4.594272692e-06f, -4.586798718e-06f,
+-4.579317762e-06f, -4.571829839e-06f, -4.564334963e-06f, -4.556833147e-06f, -4.549324406e-06f, -4.541808753e-06f, -4.534286202e-06f, -4.526756768e-06f, -4.519220463e-06f, -4.511677303e-06f,
+-4.504127300e-06f, -4.496570470e-06f, -4.489006825e-06f, -4.481436381e-06f, -4.473859150e-06f, -4.466275147e-06f, -4.458684387e-06f, -4.451086882e-06f, -4.443482647e-06f, -4.435871697e-06f,
+-4.428254044e-06f, -4.420629704e-06f, -4.412998690e-06f, -4.405361016e-06f, -4.397716697e-06f, -4.390065747e-06f, -4.382408179e-06f, -4.374744008e-06f, -4.367073247e-06f, -4.359395912e-06f,
+-4.351712017e-06f, -4.344021574e-06f, -4.336324599e-06f, -4.328621106e-06f, -4.320911109e-06f, -4.313194622e-06f, -4.305471660e-06f, -4.297742236e-06f, -4.290006365e-06f, -4.282264061e-06f,
+-4.274515338e-06f, -4.266760211e-06f, -4.258998693e-06f, -4.251230800e-06f, -4.243456545e-06f, -4.235675943e-06f, -4.227889008e-06f, -4.220095754e-06f, -4.212296196e-06f, -4.204490347e-06f,
+-4.196678223e-06f, -4.188859838e-06f, -4.181035206e-06f, -4.173204341e-06f, -4.165367258e-06f, -4.157523971e-06f, -4.149674494e-06f, -4.141818843e-06f, -4.133957030e-06f, -4.126089072e-06f,
+-4.118214982e-06f, -4.110334774e-06f, -4.102448464e-06f, -4.094556065e-06f, -4.086657592e-06f, -4.078753059e-06f, -4.070842482e-06f, -4.062925874e-06f, -4.055003250e-06f, -4.047074624e-06f,
+-4.039140012e-06f, -4.031199427e-06f, -4.023252883e-06f, -4.015300397e-06f, -4.007341982e-06f, -3.999377652e-06f, -3.991407422e-06f, -3.983431308e-06f, -3.975449323e-06f, -3.967461481e-06f,
+-3.959467799e-06f, -3.951468289e-06f, -3.943462968e-06f, -3.935451849e-06f, -3.927434947e-06f, -3.919412277e-06f, -3.911383853e-06f, -3.903349690e-06f, -3.895309803e-06f, -3.887264206e-06f,
+-3.879212914e-06f, -3.871155942e-06f, -3.863093305e-06f, -3.855025016e-06f, -3.846951092e-06f, -3.838871546e-06f, -3.830786393e-06f, -3.822695649e-06f, -3.814599327e-06f, -3.806497443e-06f,
+-3.798390011e-06f, -3.790277046e-06f, -3.782158563e-06f, -3.774034577e-06f, -3.765905102e-06f, -3.757770153e-06f, -3.749629746e-06f, -3.741483894e-06f, -3.733332613e-06f, -3.725175917e-06f,
+-3.717013822e-06f, -3.708846342e-06f, -3.700673491e-06f, -3.692495286e-06f, -3.684311741e-06f, -3.676122870e-06f, -3.667928688e-06f, -3.659729212e-06f, -3.651524454e-06f, -3.643314430e-06f,
+-3.635099156e-06f, -3.626878646e-06f, -3.618652914e-06f, -3.610421977e-06f, -3.602185848e-06f, -3.593944543e-06f, -3.585698077e-06f, -3.577446464e-06f, -3.569189720e-06f, -3.560927859e-06f,
+-3.552660898e-06f, -3.544388849e-06f, -3.536111730e-06f, -3.527829554e-06f, -3.519542336e-06f, -3.511250092e-06f, -3.502952837e-06f, -3.494650585e-06f, -3.486343352e-06f, -3.478031153e-06f,
+-3.469714002e-06f, -3.461391915e-06f, -3.453064908e-06f, -3.444732994e-06f, -3.436396189e-06f, -3.428054508e-06f, -3.419707966e-06f, -3.411356579e-06f, -3.403000361e-06f, -3.394639328e-06f,
+-3.386273494e-06f, -3.377902875e-06f, -3.369527486e-06f, -3.361147341e-06f, -3.352762457e-06f, -3.344372848e-06f, -3.335978530e-06f, -3.327579517e-06f, -3.319175825e-06f, -3.310767469e-06f,
+-3.302354463e-06f, -3.293936825e-06f, -3.285514567e-06f, -3.277087706e-06f, -3.268656257e-06f, -3.260220236e-06f, -3.251779656e-06f, -3.243334534e-06f, -3.234884884e-06f, -3.226430723e-06f,
+-3.217972065e-06f, -3.209508925e-06f, -3.201041319e-06f, -3.192569261e-06f, -3.184092768e-06f, -3.175611854e-06f, -3.167126535e-06f, -3.158636826e-06f, -3.150142743e-06f, -3.141644300e-06f,
+-3.133141512e-06f, -3.124634396e-06f, -3.116122966e-06f, -3.107607239e-06f, -3.099087228e-06f, -3.090562949e-06f, -3.082034418e-06f, -3.073501651e-06f, -3.064964662e-06f, -3.056423466e-06f,
+-3.047878079e-06f, -3.039328517e-06f, -3.030774795e-06f, -3.022216928e-06f, -3.013654931e-06f, -3.005088821e-06f, -2.996518611e-06f, -2.987944319e-06f, -2.979365958e-06f, -2.970783545e-06f,
+-2.962197094e-06f, -2.953606622e-06f, -2.945012143e-06f, -2.936413674e-06f, -2.927811229e-06f, -2.919204824e-06f, -2.910594474e-06f, -2.901980195e-06f, -2.893362002e-06f, -2.884739911e-06f,
+-2.876113937e-06f, -2.867484096e-06f, -2.858850402e-06f, -2.850212872e-06f, -2.841571521e-06f, -2.832926365e-06f, -2.824277418e-06f, -2.815624697e-06f, -2.806968216e-06f, -2.798307992e-06f,
+-2.789644040e-06f, -2.780976375e-06f, -2.772305012e-06f, -2.763629969e-06f, -2.754951259e-06f, -2.746268898e-06f, -2.737582902e-06f, -2.728893287e-06f, -2.720200068e-06f, -2.711503260e-06f,
+-2.702802879e-06f, -2.694098941e-06f, -2.685391460e-06f, -2.676680454e-06f, -2.667965936e-06f, -2.659247924e-06f, -2.650526432e-06f, -2.641801475e-06f, -2.633073070e-06f, -2.624341233e-06f,
+-2.615605977e-06f, -2.606867320e-06f, -2.598125277e-06f, -2.589379863e-06f, -2.580631094e-06f, -2.571878986e-06f, -2.563123554e-06f, -2.554364813e-06f, -2.545602780e-06f, -2.536837470e-06f,
+-2.528068899e-06f, -2.519297082e-06f, -2.510522034e-06f, -2.501743772e-06f, -2.492962312e-06f, -2.484177668e-06f, -2.475389856e-06f, -2.466598892e-06f, -2.457804792e-06f, -2.449007572e-06f,
+-2.440207246e-06f, -2.431403831e-06f, -2.422597342e-06f, -2.413787796e-06f, -2.404975206e-06f, -2.396159590e-06f, -2.387340963e-06f, -2.378519341e-06f, -2.369694739e-06f, -2.360867173e-06f,
+-2.352036658e-06f, -2.343203211e-06f, -2.334366847e-06f, -2.325527582e-06f, -2.316685431e-06f, -2.307840410e-06f, -2.298992535e-06f, -2.290141821e-06f, -2.281288285e-06f, -2.272431942e-06f,
+-2.263572807e-06f, -2.254710897e-06f, -2.245846227e-06f, -2.236978812e-06f, -2.228108670e-06f, -2.219235814e-06f, -2.210360261e-06f, -2.201482028e-06f, -2.192601128e-06f, -2.183717579e-06f,
+-2.174831396e-06f, -2.165942594e-06f, -2.157051190e-06f, -2.148157199e-06f, -2.139260637e-06f, -2.130361520e-06f, -2.121459863e-06f, -2.112555683e-06f, -2.103648994e-06f, -2.094739813e-06f,
+-2.085828155e-06f, -2.076914037e-06f, -2.067997474e-06f, -2.059078481e-06f, -2.050157075e-06f, -2.041233272e-06f, -2.032307086e-06f, -2.023378535e-06f, -2.014447633e-06f, -2.005514396e-06f,
+-1.996578841e-06f, -1.987640983e-06f, -1.978700837e-06f, -1.969758421e-06f, -1.960813748e-06f, -1.951866836e-06f, -1.942917700e-06f, -1.933966355e-06f, -1.925012819e-06f, -1.916057105e-06f,
+-1.907099231e-06f, -1.898139212e-06f, -1.889177064e-06f, -1.880212802e-06f, -1.871246442e-06f, -1.862278001e-06f, -1.853307494e-06f, -1.844334937e-06f, -1.835360346e-06f, -1.826383736e-06f,
+-1.817405123e-06f, -1.808424524e-06f, -1.799441953e-06f, -1.790457428e-06f, -1.781470963e-06f, -1.772482574e-06f, -1.763492278e-06f, -1.754500090e-06f, -1.745506025e-06f, -1.736510101e-06f,
+-1.727512332e-06f, -1.718512735e-06f, -1.709511324e-06f, -1.700508117e-06f, -1.691503129e-06f, -1.682496376e-06f, -1.673487873e-06f, -1.664477637e-06f, -1.655465683e-06f, -1.646452028e-06f,
+-1.637436686e-06f, -1.628419674e-06f, -1.619401008e-06f, -1.610380703e-06f, -1.601358776e-06f, -1.592335242e-06f, -1.583310117e-06f, -1.574283416e-06f, -1.565255157e-06f, -1.556225354e-06f,
+-1.547194024e-06f, -1.538161182e-06f, -1.529126845e-06f, -1.520091027e-06f, -1.511053745e-06f, -1.502015015e-06f, -1.492974853e-06f, -1.483933274e-06f, -1.474890294e-06f, -1.465845929e-06f,
+-1.456800196e-06f, -1.447753109e-06f, -1.438704685e-06f, -1.429654940e-06f, -1.420603889e-06f, -1.411551548e-06f, -1.402497933e-06f, -1.393443061e-06f, -1.384386946e-06f, -1.375329605e-06f,
+-1.366271054e-06f, -1.357211308e-06f, -1.348150384e-06f, -1.339088296e-06f, -1.330025062e-06f, -1.320960696e-06f, -1.311895215e-06f, -1.302828635e-06f, -1.293760971e-06f, -1.284692240e-06f,
+-1.275622456e-06f, -1.266551637e-06f, -1.257479797e-06f, -1.248406954e-06f, -1.239333121e-06f, -1.230258317e-06f, -1.221182555e-06f, -1.212105853e-06f, -1.203028226e-06f, -1.193949689e-06f,
+-1.184870259e-06f, -1.175789952e-06f, -1.166708783e-06f, -1.157626769e-06f, -1.148543924e-06f, -1.139460266e-06f, -1.130375809e-06f, -1.121290570e-06f, -1.112204565e-06f, -1.103117809e-06f,
+-1.094030318e-06f, -1.084942108e-06f, -1.075853195e-06f, -1.066763595e-06f, -1.057673324e-06f, -1.048582396e-06f, -1.039490830e-06f, -1.030398639e-06f, -1.021305840e-06f, -1.012212449e-06f,
+-1.003118482e-06f, -9.940239538e-07f, -9.849288813e-07f, -9.758332798e-07f, -9.667371654e-07f, -9.576405537e-07f, -9.485434607e-07f, -9.394459022e-07f, -9.303478939e-07f, -9.212494518e-07f,
+-9.121505917e-07f, -9.030513293e-07f, -8.939516805e-07f, -8.848516612e-07f, -8.757512871e-07f, -8.666505740e-07f, -8.575495379e-07f, -8.484481944e-07f, -8.393465595e-07f, -8.302446489e-07f,
+-8.211424785e-07f, -8.120400640e-07f, -8.029374212e-07f, -7.938345660e-07f, -7.847315142e-07f, -7.756282816e-07f, -7.665248840e-07f, -7.574213371e-07f, -7.483176568e-07f, -7.392138589e-07f,
+-7.301099592e-07f, -7.210059734e-07f, -7.119019174e-07f, -7.027978069e-07f, -6.936936578e-07f, -6.845894857e-07f, -6.754853066e-07f, -6.663811362e-07f, -6.572769902e-07f, -6.481728844e-07f,
+-6.390688347e-07f, -6.299648567e-07f, -6.208609663e-07f, -6.117571793e-07f, -6.026535113e-07f, -5.935499782e-07f, -5.844465957e-07f, -5.753433795e-07f, -5.662403455e-07f, -5.571375094e-07f,
+-5.480348869e-07f, -5.389324938e-07f, -5.298303459e-07f, -5.207284588e-07f, -5.116268484e-07f, -5.025255303e-07f, -4.934245204e-07f, -4.843238342e-07f, -4.752234877e-07f, -4.661234964e-07f,
+-4.570238762e-07f, -4.479246427e-07f, -4.388258117e-07f, -4.297273989e-07f, -4.206294200e-07f, -4.115318907e-07f, -4.024348268e-07f, -3.933382439e-07f, -3.842421577e-07f, -3.751465840e-07f,
+-3.660515384e-07f, -3.569570367e-07f, -3.478630945e-07f, -3.387697276e-07f, -3.296769515e-07f, -3.205847821e-07f, -3.114932349e-07f, -3.024023257e-07f, -2.933120701e-07f, -2.842224838e-07f,
+-2.751335825e-07f, -2.660453818e-07f, -2.569578975e-07f, -2.478711450e-07f, -2.387851402e-07f, -2.296998987e-07f, -2.206154361e-07f, -2.115317680e-07f, -2.024489101e-07f, -1.933668781e-07f,
+-1.842856876e-07f, -1.752053541e-07f, -1.661258934e-07f, -1.570473211e-07f, -1.479696527e-07f, -1.388929039e-07f, -1.298170903e-07f, -1.207422276e-07f, -1.116683313e-07f, -1.025954170e-07f,
+-9.352350033e-08f, -8.445259690e-08f, -7.538272228e-08f, -6.631389207e-08f, -5.724612184e-08f, -4.817942718e-08f, -3.911382367e-08f, -3.004932687e-08f, -2.098595236e-08f, -1.192371569e-08f,
+-2.862632438e-09f, 6.197281852e-09f, 1.525601163e-08f, 2.431354133e-08f, 3.336985543e-08f, 4.242493838e-08f, 5.147877464e-08f, 6.053134868e-08f, 6.958264498e-08f, 7.863264801e-08f,
+8.768134225e-08f, 9.672871219e-08f, 1.057747423e-07f, 1.148194171e-07f, 1.238627211e-07f, 1.329046388e-07f, 1.419451546e-07f, 1.509842532e-07f, 1.600219190e-07f, 1.690581365e-07f,
+1.780928903e-07f, 1.871261648e-07f, 1.961579447e-07f, 2.051882145e-07f, 2.142169587e-07f, 2.232441618e-07f, 2.322698084e-07f, 2.412938831e-07f, 2.503163704e-07f, 2.593372549e-07f,
+2.683565212e-07f, 2.773741538e-07f, 2.863901374e-07f, 2.954044564e-07f, 3.044170956e-07f, 3.134280395e-07f, 3.224372726e-07f, 3.314447797e-07f, 3.404505452e-07f, 3.494545539e-07f,
+3.584567904e-07f, 3.674572392e-07f, 3.764558850e-07f, 3.854527125e-07f, 3.944477063e-07f, 4.034408509e-07f, 4.124321312e-07f, 4.214215317e-07f, 4.304090371e-07f, 4.393946321e-07f,
+4.483783013e-07f, 4.573600294e-07f, 4.663398012e-07f, 4.753176012e-07f, 4.842934142e-07f, 4.932672249e-07f, 5.022390180e-07f, 5.112087782e-07f, 5.201764902e-07f, 5.291421387e-07f,
+5.381057085e-07f, 5.470671843e-07f, 5.560265509e-07f, 5.649837929e-07f, 5.739388951e-07f, 5.828918423e-07f, 5.918426193e-07f, 6.007912108e-07f, 6.097376015e-07f, 6.186817764e-07f,
+6.276237200e-07f, 6.365634173e-07f, 6.455008531e-07f, 6.544360120e-07f, 6.633688790e-07f, 6.722994389e-07f, 6.812276764e-07f, 6.901535765e-07f, 6.990771238e-07f, 7.079983034e-07f,
+7.169170999e-07f, 7.258334983e-07f, 7.347474834e-07f, 7.436590401e-07f, 7.525681533e-07f, 7.614748077e-07f, 7.703789884e-07f, 7.792806801e-07f, 7.881798679e-07f, 7.970765365e-07f,
+8.059706709e-07f, 8.148622560e-07f, 8.237512767e-07f, 8.326377180e-07f, 8.415215647e-07f, 8.504028019e-07f, 8.592814144e-07f, 8.681573872e-07f, 8.770307052e-07f, 8.859013535e-07f,
+8.947693170e-07f, 9.036345807e-07f, 9.124971295e-07f, 9.213569485e-07f, 9.302140226e-07f, 9.390683368e-07f, 9.479198763e-07f, 9.567686258e-07f, 9.656145706e-07f, 9.744576957e-07f,
+9.832979860e-07f, 9.921354266e-07f, 1.000970003e-06f, 1.009801699e-06f, 1.018630501e-06f, 1.027456393e-06f, 1.036279361e-06f, 1.045099390e-06f, 1.053916465e-06f, 1.062730570e-06f,
+1.071541692e-06f, 1.080349814e-06f, 1.089154923e-06f, 1.097957004e-06f, 1.106756041e-06f, 1.115552019e-06f, 1.124344924e-06f, 1.133134742e-06f, 1.141921456e-06f, 1.150705053e-06f,
+1.159485517e-06f, 1.168262834e-06f, 1.177036989e-06f, 1.185807967e-06f, 1.194575753e-06f, 1.203340333e-06f, 1.212101691e-06f, 1.220859813e-06f, 1.229614685e-06f, 1.238366291e-06f,
+1.247114617e-06f, 1.255859647e-06f, 1.264601368e-06f, 1.273339764e-06f, 1.282074822e-06f, 1.290806525e-06f, 1.299534859e-06f, 1.308259811e-06f, 1.316981364e-06f, 1.325699504e-06f,
+1.334414218e-06f, 1.343125489e-06f, 1.351833304e-06f, 1.360537647e-06f, 1.369238504e-06f, 1.377935861e-06f, 1.386629702e-06f, 1.395320014e-06f, 1.404006782e-06f, 1.412689990e-06f,
+1.421369625e-06f, 1.430045671e-06f, 1.438718115e-06f, 1.447386942e-06f, 1.456052136e-06f, 1.464713684e-06f, 1.473371572e-06f, 1.482025783e-06f, 1.490676305e-06f, 1.499323122e-06f,
+1.507966220e-06f, 1.516605585e-06f, 1.525241202e-06f, 1.533873056e-06f, 1.542501133e-06f, 1.551125418e-06f, 1.559745898e-06f, 1.568362558e-06f, 1.576975382e-06f, 1.585584357e-06f,
+1.594189469e-06f, 1.602790703e-06f, 1.611388044e-06f, 1.619981478e-06f, 1.628570991e-06f, 1.637156568e-06f, 1.645738196e-06f, 1.654315859e-06f, 1.662889543e-06f, 1.671459234e-06f,
+1.680024918e-06f, 1.688586580e-06f, 1.697144206e-06f, 1.705697782e-06f, 1.714247293e-06f, 1.722792725e-06f, 1.731334064e-06f, 1.739871295e-06f, 1.748404404e-06f, 1.756933378e-06f,
+1.765458201e-06f, 1.773978860e-06f, 1.782495340e-06f, 1.791007626e-06f, 1.799515706e-06f, 1.808019565e-06f, 1.816519187e-06f, 1.825014561e-06f, 1.833505670e-06f, 1.841992501e-06f,
+1.850475040e-06f, 1.858953272e-06f, 1.867427184e-06f, 1.875896761e-06f, 1.884361990e-06f, 1.892822855e-06f, 1.901279344e-06f, 1.909731441e-06f, 1.918179134e-06f, 1.926622407e-06f,
+1.935061246e-06f, 1.943495639e-06f, 1.951925570e-06f, 1.960351026e-06f, 1.968771992e-06f, 1.977188455e-06f, 1.985600400e-06f, 1.994007814e-06f, 2.002410683e-06f, 2.010808992e-06f,
+2.019202727e-06f, 2.027591876e-06f, 2.035976423e-06f, 2.044356355e-06f, 2.052731657e-06f, 2.061102317e-06f, 2.069468320e-06f, 2.077829651e-06f, 2.086186298e-06f, 2.094538247e-06f,
+2.102885483e-06f, 2.111227993e-06f, 2.119565762e-06f, 2.127898777e-06f, 2.136227025e-06f, 2.144550491e-06f, 2.152869161e-06f, 2.161183022e-06f, 2.169492060e-06f, 2.177796261e-06f,
+2.186095612e-06f, 2.194390098e-06f, 2.202679706e-06f, 2.210964423e-06f, 2.219244233e-06f, 2.227519125e-06f, 2.235789083e-06f, 2.244054095e-06f, 2.252314146e-06f, 2.260569223e-06f,
+2.268819313e-06f, 2.277064401e-06f, 2.285304475e-06f, 2.293539519e-06f, 2.301769522e-06f, 2.309994468e-06f, 2.318214345e-06f, 2.326429139e-06f, 2.334638836e-06f, 2.342843424e-06f,
+2.351042887e-06f, 2.359237213e-06f, 2.367426388e-06f, 2.375610399e-06f, 2.383789232e-06f, 2.391962874e-06f, 2.400131310e-06f, 2.408294529e-06f, 2.416452515e-06f, 2.424605256e-06f,
+2.432752739e-06f, 2.440894949e-06f, 2.449031874e-06f, 2.457163499e-06f, 2.465289813e-06f, 2.473410800e-06f, 2.481526448e-06f, 2.489636743e-06f, 2.497741673e-06f, 2.505841223e-06f,
+2.513935381e-06f, 2.522024132e-06f, 2.530107465e-06f, 2.538185364e-06f, 2.546257818e-06f, 2.554324813e-06f, 2.562386335e-06f, 2.570442371e-06f, 2.578492909e-06f, 2.586537934e-06f,
+2.594577434e-06f, 2.602611395e-06f, 2.610639804e-06f, 2.618662648e-06f, 2.626679914e-06f, 2.634691588e-06f, 2.642697658e-06f, 2.650698110e-06f, 2.658692932e-06f, 2.666682109e-06f,
+2.674665629e-06f, 2.682643479e-06f, 2.690615646e-06f, 2.698582116e-06f, 2.706542877e-06f, 2.714497915e-06f, 2.722447218e-06f, 2.730390772e-06f, 2.738328564e-06f, 2.746260582e-06f,
+2.754186812e-06f, 2.762107242e-06f, 2.770021858e-06f, 2.777930647e-06f, 2.785833597e-06f, 2.793730695e-06f, 2.801621927e-06f, 2.809507281e-06f, 2.817386744e-06f, 2.825260302e-06f,
+2.833127944e-06f, 2.840989656e-06f, 2.848845425e-06f, 2.856695238e-06f, 2.864539083e-06f, 2.872376947e-06f, 2.880208817e-06f, 2.888034681e-06f, 2.895854524e-06f, 2.903668335e-06f,
+2.911476102e-06f, 2.919277810e-06f, 2.927073447e-06f, 2.934863002e-06f, 2.942646460e-06f, 2.950423810e-06f, 2.958195038e-06f, 2.965960132e-06f, 2.973719079e-06f, 2.981471867e-06f,
+2.989218483e-06f, 2.996958914e-06f, 3.004693148e-06f, 3.012421172e-06f, 3.020142974e-06f, 3.027858540e-06f, 3.035567859e-06f, 3.043270918e-06f, 3.050967704e-06f, 3.058658204e-06f,
+3.066342407e-06f, 3.074020300e-06f, 3.081691870e-06f, 3.089357105e-06f, 3.097015992e-06f, 3.104668519e-06f, 3.112314674e-06f, 3.119954443e-06f, 3.127587815e-06f, 3.135214777e-06f,
+3.142835317e-06f, 3.150449423e-06f, 3.158057081e-06f, 3.165658281e-06f, 3.173253008e-06f, 3.180841252e-06f, 3.188423000e-06f, 3.195998239e-06f, 3.203566957e-06f, 3.211129142e-06f,
+3.218684782e-06f, 3.226233864e-06f, 3.233776376e-06f, 3.241312306e-06f, 3.248841642e-06f, 3.256364371e-06f, 3.263880482e-06f, 3.271389962e-06f, 3.278892799e-06f, 3.286388981e-06f,
+3.293878496e-06f, 3.301361331e-06f, 3.308837475e-06f, 3.316306916e-06f, 3.323769640e-06f, 3.331225638e-06f, 3.338674895e-06f, 3.346117401e-06f, 3.353553142e-06f, 3.360982108e-06f,
+3.368404287e-06f, 3.375819665e-06f, 3.383228232e-06f, 3.390629975e-06f, 3.398024882e-06f, 3.405412942e-06f, 3.412794142e-06f, 3.420168471e-06f, 3.427535917e-06f, 3.434896467e-06f,
+3.442250111e-06f, 3.449596835e-06f, 3.456936629e-06f, 3.464269481e-06f, 3.471595378e-06f, 3.478914308e-06f, 3.486226261e-06f, 3.493531225e-06f, 3.500829187e-06f, 3.508120135e-06f,
+3.515404059e-06f, 3.522680946e-06f, 3.529950785e-06f, 3.537213564e-06f, 3.544469272e-06f, 3.551717895e-06f, 3.558959424e-06f, 3.566193847e-06f, 3.573421151e-06f, 3.580641325e-06f,
+3.587854358e-06f, 3.595060238e-06f, 3.602258954e-06f, 3.609450493e-06f, 3.616634845e-06f, 3.623811998e-06f, 3.630981940e-06f, 3.638144660e-06f, 3.645300146e-06f, 3.652448387e-06f,
+3.659589372e-06f, 3.666723089e-06f, 3.673849526e-06f, 3.680968673e-06f, 3.688080517e-06f, 3.695185048e-06f, 3.702282254e-06f, 3.709372124e-06f, 3.716454646e-06f, 3.723529810e-06f,
+3.730597603e-06f, 3.737658014e-06f, 3.744711033e-06f, 3.751756648e-06f, 3.758794847e-06f, 3.765825620e-06f, 3.772848955e-06f, 3.779864841e-06f, 3.786873267e-06f, 3.793874222e-06f,
+3.800867694e-06f, 3.807853672e-06f, 3.814832146e-06f, 3.821803104e-06f, 3.828766535e-06f, 3.835722427e-06f, 3.842670771e-06f, 3.849611554e-06f, 3.856544766e-06f, 3.863470396e-06f,
+3.870388432e-06f, 3.877298864e-06f, 3.884201681e-06f, 3.891096871e-06f, 3.897984424e-06f, 3.904864329e-06f, 3.911736575e-06f, 3.918601151e-06f, 3.925458045e-06f, 3.932307248e-06f,
+3.939148748e-06f, 3.945982535e-06f, 3.952808597e-06f, 3.959626924e-06f, 3.966437505e-06f, 3.973240329e-06f, 3.980035385e-06f, 3.986822663e-06f, 3.993602152e-06f, 4.000373841e-06f,
+4.007137719e-06f, 4.013893776e-06f, 4.020642001e-06f, 4.027382383e-06f, 4.034114912e-06f, 4.040839577e-06f, 4.047556367e-06f, 4.054265272e-06f, 4.060966281e-06f, 4.067659384e-06f,
+4.074344570e-06f, 4.081021828e-06f, 4.087691148e-06f, 4.094352519e-06f, 4.101005931e-06f, 4.107651373e-06f, 4.114288836e-06f, 4.120918307e-06f, 4.127539778e-06f, 4.134153237e-06f,
+4.140758674e-06f, 4.147356079e-06f, 4.153945441e-06f, 4.160526751e-06f, 4.167099996e-06f, 4.173665168e-06f, 4.180222256e-06f, 4.186771249e-06f, 4.193312137e-06f, 4.199844911e-06f,
+4.206369559e-06f, 4.212886072e-06f, 4.219394439e-06f, 4.225894650e-06f, 4.232386694e-06f, 4.238870562e-06f, 4.245346244e-06f, 4.251813729e-06f, 4.258273007e-06f, 4.264724068e-06f,
+4.271166902e-06f, 4.277601499e-06f, 4.284027849e-06f, 4.290445941e-06f, 4.296855765e-06f, 4.303257313e-06f, 4.309650572e-06f, 4.316035535e-06f, 4.322412190e-06f, 4.328780527e-06f,
+4.335140537e-06f, 4.341492210e-06f, 4.347835535e-06f, 4.354170504e-06f, 4.360497105e-06f, 4.366815329e-06f, 4.373125167e-06f, 4.379426608e-06f, 4.385719642e-06f, 4.392004260e-06f,
+4.398280453e-06f, 4.404548209e-06f, 4.410807519e-06f, 4.417058375e-06f, 4.423300765e-06f, 4.429534680e-06f, 4.435760111e-06f, 4.441977047e-06f, 4.448185480e-06f, 4.454385399e-06f,
+4.460576795e-06f, 4.466759658e-06f, 4.472933979e-06f, 4.479099748e-06f, 4.485256955e-06f, 4.491405591e-06f, 4.497545646e-06f, 4.503677111e-06f, 4.509799977e-06f, 4.515914233e-06f,
+4.522019871e-06f, 4.528116880e-06f, 4.534205252e-06f, 4.540284977e-06f, 4.546356045e-06f, 4.552418448e-06f, 4.558472175e-06f, 4.564517218e-06f, 4.570553567e-06f, 4.576581212e-06f,
+4.582600145e-06f, 4.588610356e-06f, 4.594611836e-06f, 4.600604576e-06f, 4.606588566e-06f, 4.612563797e-06f, 4.618530260e-06f, 4.624487946e-06f, 4.630436845e-06f, 4.636376948e-06f,
+4.642308247e-06f, 4.648230732e-06f, 4.654144393e-06f, 4.660049223e-06f, 4.665945211e-06f, 4.671832349e-06f, 4.677710627e-06f, 4.683580037e-06f, 4.689440570e-06f, 4.695292216e-06f,
+4.701134967e-06f, 4.706968814e-06f, 4.712793747e-06f, 4.718609758e-06f, 4.724416837e-06f, 4.730214977e-06f, 4.736004167e-06f, 4.741784400e-06f, 4.747555666e-06f, 4.753317956e-06f,
+4.759071262e-06f, 4.764815575e-06f, 4.770550886e-06f, 4.776277187e-06f, 4.781994467e-06f, 4.787702720e-06f, 4.793401936e-06f, 4.799092106e-06f, 4.804773221e-06f, 4.810445274e-06f,
+4.816108255e-06f, 4.821762156e-06f, 4.827406968e-06f, 4.833042682e-06f, 4.838669291e-06f, 4.844286784e-06f, 4.849895155e-06f, 4.855494394e-06f, 4.861084493e-06f, 4.866665442e-06f,
+4.872237235e-06f, 4.877799862e-06f, 4.883353315e-06f, 4.888897585e-06f, 4.894432664e-06f, 4.899958544e-06f, 4.905475217e-06f, 4.910982673e-06f, 4.916480904e-06f, 4.921969903e-06f,
+4.927449661e-06f, 4.932920169e-06f, 4.938381420e-06f, 4.943833404e-06f, 4.949276115e-06f, 4.954709543e-06f, 4.960133681e-06f, 4.965548519e-06f, 4.970954051e-06f, 4.976350268e-06f,
+4.981737161e-06f, 4.987114723e-06f, 4.992482945e-06f, 4.997841820e-06f, 5.003191339e-06f, 5.008531495e-06f, 5.013862278e-06f, 5.019183682e-06f, 5.024495698e-06f, 5.029798319e-06f,
+5.035091535e-06f, 5.040375340e-06f, 5.045649726e-06f, 5.050914683e-06f, 5.056170206e-06f, 5.061416285e-06f, 5.066652913e-06f, 5.071880082e-06f, 5.077097784e-06f, 5.082306011e-06f,
+5.087504756e-06f, 5.092694011e-06f, 5.097873768e-06f, 5.103044019e-06f, 5.108204757e-06f, 5.113355973e-06f, 5.118497661e-06f, 5.123629812e-06f, 5.128752419e-06f, 5.133865474e-06f,
+5.138968970e-06f, 5.144062898e-06f, 5.149147253e-06f, 5.154222025e-06f, 5.159287207e-06f, 5.164342792e-06f, 5.169388772e-06f, 5.174425140e-06f, 5.179451889e-06f, 5.184469010e-06f,
+5.189476496e-06f, 5.194474341e-06f, 5.199462536e-06f, 5.204441074e-06f, 5.209409948e-06f, 5.214369150e-06f, 5.219318673e-06f, 5.224258511e-06f, 5.229188654e-06f, 5.234109097e-06f,
+5.239019832e-06f, 5.243920852e-06f, 5.248812149e-06f, 5.253693716e-06f, 5.258565546e-06f, 5.263427632e-06f, 5.268279967e-06f, 5.273122543e-06f, 5.277955354e-06f, 5.282778392e-06f,
+5.287591651e-06f, 5.292395123e-06f, 5.297188800e-06f, 5.301972677e-06f, 5.306746746e-06f, 5.311511001e-06f, 5.316265433e-06f, 5.321010036e-06f, 5.325744804e-06f, 5.330469729e-06f,
+5.335184804e-06f, 5.339890023e-06f, 5.344585378e-06f, 5.349270863e-06f, 5.353946472e-06f, 5.358612196e-06f, 5.363268029e-06f, 5.367913966e-06f, 5.372549997e-06f, 5.377176118e-06f,
+5.381792322e-06f, 5.386398600e-06f, 5.390994948e-06f, 5.395581358e-06f, 5.400157824e-06f, 5.404724338e-06f, 5.409280895e-06f, 5.413827488e-06f, 5.418364109e-06f, 5.422890754e-06f,
+5.427407414e-06f, 5.431914084e-06f, 5.436410757e-06f, 5.440897426e-06f, 5.445374085e-06f, 5.449840728e-06f, 5.454297348e-06f, 5.458743939e-06f, 5.463180494e-06f, 5.467607007e-06f,
+5.472023472e-06f, 5.476429882e-06f, 5.480826231e-06f, 5.485212512e-06f, 5.489588720e-06f, 5.493954848e-06f, 5.498310890e-06f, 5.502656839e-06f, 5.506992689e-06f, 5.511318435e-06f,
+5.515634069e-06f, 5.519939587e-06f, 5.524234981e-06f, 5.528520245e-06f, 5.532795374e-06f, 5.537060361e-06f, 5.541315201e-06f, 5.545559887e-06f, 5.549794412e-06f, 5.554018773e-06f,
+5.558232961e-06f, 5.562436971e-06f, 5.566630798e-06f, 5.570814435e-06f, 5.574987876e-06f, 5.579151116e-06f, 5.583304148e-06f, 5.587446967e-06f, 5.591579567e-06f, 5.595701942e-06f,
+5.599814086e-06f, 5.603915993e-06f, 5.608007659e-06f, 5.612089076e-06f, 5.616160239e-06f, 5.620221142e-06f, 5.624271781e-06f, 5.628312148e-06f, 5.632342239e-06f, 5.636362047e-06f,
+5.640371568e-06f, 5.644370795e-06f, 5.648359723e-06f, 5.652338347e-06f, 5.656306660e-06f, 5.660264657e-06f, 5.664212333e-06f, 5.668149683e-06f, 5.672076700e-06f, 5.675993379e-06f,
+5.679899716e-06f, 5.683795703e-06f, 5.687681337e-06f, 5.691556612e-06f, 5.695421522e-06f, 5.699276061e-06f, 5.703120226e-06f, 5.706954009e-06f, 5.710777407e-06f, 5.714590414e-06f,
+5.718393023e-06f, 5.722185232e-06f, 5.725967033e-06f, 5.729738422e-06f, 5.733499394e-06f, 5.737249943e-06f, 5.740990064e-06f, 5.744719753e-06f, 5.748439004e-06f, 5.752147812e-06f,
+5.755846172e-06f, 5.759534079e-06f, 5.763211528e-06f, 5.766878514e-06f, 5.770535031e-06f, 5.774181076e-06f, 5.777816643e-06f, 5.781441726e-06f, 5.785056322e-06f, 5.788660425e-06f,
+5.792254030e-06f, 5.795837133e-06f, 5.799409729e-06f, 5.802971812e-06f, 5.806523378e-06f, 5.810064423e-06f, 5.813594941e-06f, 5.817114928e-06f, 5.820624379e-06f, 5.824123289e-06f,
+5.827611654e-06f, 5.831089469e-06f, 5.834556729e-06f, 5.838013429e-06f, 5.841459566e-06f, 5.844895134e-06f, 5.848320129e-06f, 5.851734547e-06f, 5.855138382e-06f, 5.858531630e-06f,
+5.861914288e-06f, 5.865286349e-06f, 5.868647810e-06f, 5.871998667e-06f, 5.875338915e-06f, 5.878668549e-06f, 5.881987565e-06f, 5.885295959e-06f, 5.888593727e-06f, 5.891880864e-06f,
+5.895157365e-06f, 5.898423227e-06f, 5.901678445e-06f, 5.904923016e-06f, 5.908156934e-06f, 5.911380195e-06f, 5.914592796e-06f, 5.917794732e-06f, 5.920985999e-06f, 5.924166593e-06f,
+5.927336510e-06f, 5.930495745e-06f, 5.933644295e-06f, 5.936782156e-06f, 5.939909322e-06f, 5.943025792e-06f, 5.946131560e-06f, 5.949226622e-06f, 5.952310974e-06f, 5.955384614e-06f,
+5.958447536e-06f, 5.961499736e-06f, 5.964541211e-06f, 5.967571958e-06f, 5.970591971e-06f, 5.973601248e-06f, 5.976599784e-06f, 5.979587575e-06f, 5.982564619e-06f, 5.985530910e-06f,
+5.988486446e-06f, 5.991431223e-06f, 5.994365236e-06f, 5.997288483e-06f, 6.000200960e-06f, 6.003102662e-06f, 6.005993587e-06f, 6.008873730e-06f, 6.011743089e-06f, 6.014601659e-06f,
+6.017449437e-06f, 6.020286420e-06f, 6.023112603e-06f, 6.025927985e-06f, 6.028732560e-06f, 6.031526326e-06f, 6.034309279e-06f, 6.037081416e-06f, 6.039842733e-06f, 6.042593227e-06f,
+6.045332895e-06f, 6.048061733e-06f, 6.050779738e-06f, 6.053486907e-06f, 6.056183236e-06f, 6.058868722e-06f, 6.061543362e-06f, 6.064207153e-06f, 6.066860092e-06f, 6.069502174e-06f,
+6.072133398e-06f, 6.074753760e-06f, 6.077363257e-06f, 6.079961885e-06f, 6.082549642e-06f, 6.085126525e-06f, 6.087692531e-06f, 6.090247656e-06f, 6.092791897e-06f, 6.095325252e-06f,
+6.097847718e-06f, 6.100359291e-06f, 6.102859969e-06f, 6.105349749e-06f, 6.107828628e-06f, 6.110296602e-06f, 6.112753670e-06f, 6.115199828e-06f, 6.117635074e-06f, 6.120059405e-06f,
+6.122472817e-06f, 6.124875309e-06f, 6.127266877e-06f, 6.129647519e-06f, 6.132017232e-06f, 6.134376013e-06f, 6.136723860e-06f, 6.139060770e-06f, 6.141386740e-06f, 6.143701769e-06f,
+6.146005852e-06f, 6.148298988e-06f, 6.150581175e-06f, 6.152852409e-06f, 6.155112688e-06f, 6.157362010e-06f, 6.159600372e-06f, 6.161827771e-06f, 6.164044206e-06f, 6.166249674e-06f,
+6.168444172e-06f, 6.170627698e-06f, 6.172800251e-06f, 6.174961826e-06f, 6.177112423e-06f, 6.179252038e-06f, 6.181380670e-06f, 6.183498317e-06f, 6.185604975e-06f, 6.187700643e-06f,
+6.189785319e-06f, 6.191859001e-06f, 6.193921685e-06f, 6.195973371e-06f, 6.198014056e-06f, 6.200043738e-06f, 6.202062414e-06f, 6.204070084e-06f, 6.206066744e-06f, 6.208052393e-06f,
+6.210027029e-06f, 6.211990650e-06f, 6.213943253e-06f, 6.215884837e-06f, 6.217815400e-06f, 6.219734941e-06f, 6.221643456e-06f, 6.223540945e-06f, 6.225427405e-06f, 6.227302834e-06f,
+6.229167231e-06f, 6.231020595e-06f, 6.232862922e-06f, 6.234694213e-06f, 6.236514463e-06f, 6.238323673e-06f, 6.240121840e-06f, 6.241908963e-06f, 6.243685040e-06f, 6.245450069e-06f,
+6.247204049e-06f, 6.248946978e-06f, 6.250678855e-06f, 6.252399678e-06f, 6.254109445e-06f, 6.255808155e-06f, 6.257495807e-06f, 6.259172398e-06f, 6.260837928e-06f, 6.262492396e-06f,
+6.264135799e-06f, 6.265768136e-06f, 6.267389406e-06f, 6.268999608e-06f, 6.270598739e-06f, 6.272186800e-06f, 6.273763788e-06f, 6.275329703e-06f, 6.276884542e-06f, 6.278428305e-06f,
+6.279960991e-06f, 6.281482598e-06f, 6.282993125e-06f, 6.284492571e-06f, 6.285980935e-06f, 6.287458215e-06f, 6.288924411e-06f, 6.290379522e-06f, 6.291823546e-06f, 6.293256482e-06f,
+6.294678330e-06f, 6.296089087e-06f, 6.297488755e-06f, 6.298877330e-06f, 6.300254813e-06f, 6.301621202e-06f, 6.302976497e-06f, 6.304320696e-06f, 6.305653799e-06f, 6.306975805e-06f,
+6.308286713e-06f, 6.309586522e-06f, 6.310875232e-06f, 6.312152841e-06f, 6.313419349e-06f, 6.314674755e-06f, 6.315919059e-06f, 6.317152259e-06f, 6.318374355e-06f, 6.319585347e-06f,
+6.320785233e-06f, 6.321974014e-06f, 6.323151687e-06f, 6.324318254e-06f, 6.325473713e-06f, 6.326618064e-06f, 6.327751305e-06f, 6.328873438e-06f, 6.329984461e-06f, 6.331084373e-06f,
+6.332173175e-06f, 6.333250866e-06f, 6.334317445e-06f, 6.335372912e-06f, 6.336417267e-06f, 6.337450509e-06f, 6.338472638e-06f, 6.339483653e-06f, 6.340483555e-06f, 6.341472344e-06f,
+6.342450017e-06f, 6.343416577e-06f, 6.344372022e-06f, 6.345316352e-06f, 6.346249567e-06f, 6.347171666e-06f, 6.348082651e-06f, 6.348982520e-06f, 6.349871273e-06f, 6.350748911e-06f,
+6.351615432e-06f, 6.352470839e-06f, 6.353315129e-06f, 6.354148303e-06f, 6.354970362e-06f, 6.355781305e-06f, 6.356581132e-06f, 6.357369844e-06f, 6.358147440e-06f, 6.358913920e-06f,
+6.359669285e-06f, 6.360413535e-06f, 6.361146670e-06f, 6.361868690e-06f, 6.362579595e-06f, 6.363279386e-06f, 6.363968063e-06f, 6.364645626e-06f, 6.365312075e-06f, 6.365967411e-06f,
+6.366611634e-06f, 6.367244744e-06f, 6.367866742e-06f, 6.368477628e-06f, 6.369077402e-06f, 6.369666065e-06f, 6.370243617e-06f, 6.370810059e-06f, 6.371365392e-06f, 6.371909615e-06f,
+6.372442729e-06f, 6.372964735e-06f, 6.373475633e-06f, 6.373975424e-06f, 6.374464109e-06f, 6.374941687e-06f, 6.375408161e-06f, 6.375863529e-06f, 6.376307794e-06f, 6.376740955e-06f,
+6.377163013e-06f, 6.377573970e-06f, 6.377973826e-06f, 6.378362581e-06f, 6.378740236e-06f, 6.379106793e-06f, 6.379462251e-06f, 6.379806613e-06f, 6.380139878e-06f, 6.380462047e-06f,
+6.380773123e-06f, 6.381073104e-06f, 6.381361993e-06f, 6.381639790e-06f, 6.381906496e-06f, 6.382162112e-06f, 6.382406640e-06f, 6.382640079e-06f, 6.382862432e-06f, 6.383073700e-06f,
+6.383273883e-06f, 6.383462982e-06f, 6.383640999e-06f, 6.383807935e-06f, 6.383963790e-06f, 6.384108567e-06f, 6.384242267e-06f, 6.384364889e-06f, 6.384476437e-06f, 6.384576911e-06f,
+6.384666312e-06f, 6.384744641e-06f, 6.384811901e-06f, 6.384868091e-06f, 6.384913215e-06f, 6.384947272e-06f, 6.384970265e-06f, 6.384982194e-06f, 6.384983062e-06f, 6.384972870e-06f,
+6.384951618e-06f, 6.384919309e-06f, 6.384875945e-06f, 6.384821525e-06f, 6.384756053e-06f, 6.384679530e-06f, 6.384591957e-06f, 6.384493336e-06f, 6.384383669e-06f, 6.384262957e-06f,
+6.384131201e-06f, 6.383988404e-06f, 6.383834568e-06f, 6.383669693e-06f, 6.383493781e-06f, 6.383306836e-06f, 6.383108857e-06f, 6.382899847e-06f, 6.382679808e-06f, 6.382448742e-06f,
+6.382206650e-06f, 6.381953534e-06f, 6.381689397e-06f, 6.381414239e-06f, 6.381128064e-06f, 6.380830872e-06f, 6.380522666e-06f, 6.380203448e-06f, 6.379873220e-06f, 6.379531984e-06f,
+6.379179742e-06f, 6.378816496e-06f, 6.378442248e-06f, 6.378056999e-06f, 6.377660753e-06f, 6.377253512e-06f, 6.376835277e-06f, 6.376406050e-06f, 6.375965835e-06f, 6.375514632e-06f,
+6.375052445e-06f, 6.374579275e-06f, 6.374095125e-06f, 6.373599997e-06f, 6.373093894e-06f, 6.372576817e-06f, 6.372048769e-06f, 6.371509752e-06f, 6.370959769e-06f, 6.370398822e-06f,
+6.369826914e-06f, 6.369244046e-06f, 6.368650222e-06f, 6.368045444e-06f, 6.367429714e-06f, 6.366803035e-06f, 6.366165409e-06f, 6.365516839e-06f, 6.364857328e-06f, 6.364186878e-06f,
+6.363505491e-06f, 6.362813170e-06f, 6.362109919e-06f, 6.361395739e-06f, 6.360670633e-06f, 6.359934604e-06f, 6.359187654e-06f, 6.358429787e-06f, 6.357661005e-06f, 6.356881310e-06f,
+6.356090707e-06f, 6.355289196e-06f, 6.354476782e-06f, 6.353653467e-06f, 6.352819254e-06f, 6.351974145e-06f, 6.351118144e-06f, 6.350251254e-06f, 6.349373477e-06f, 6.348484817e-06f,
+6.347585276e-06f, 6.346674858e-06f, 6.345753565e-06f, 6.344821400e-06f, 6.343878367e-06f, 6.342924469e-06f, 6.341959708e-06f, 6.340984087e-06f, 6.339997611e-06f, 6.339000281e-06f,
+6.337992102e-06f, 6.336973076e-06f, 6.335943206e-06f, 6.334902496e-06f, 6.333850949e-06f, 6.332788568e-06f, 6.331715356e-06f, 6.330631317e-06f, 6.329536454e-06f, 6.328430770e-06f,
+6.327314269e-06f, 6.326186954e-06f, 6.325048828e-06f, 6.323899895e-06f, 6.322740158e-06f, 6.321569621e-06f, 6.320388286e-06f, 6.319196158e-06f, 6.317993240e-06f, 6.316779536e-06f,
+6.315555048e-06f, 6.314319781e-06f, 6.313073738e-06f, 6.311816923e-06f, 6.310549339e-06f, 6.309270989e-06f, 6.307981879e-06f, 6.306682010e-06f, 6.305371387e-06f, 6.304050013e-06f,
+6.302717893e-06f, 6.301375030e-06f, 6.300021427e-06f, 6.298657088e-06f, 6.297282018e-06f, 6.295896219e-06f, 6.294499696e-06f, 6.293092453e-06f, 6.291674493e-06f, 6.290245821e-06f,
+6.288806439e-06f, 6.287356353e-06f, 6.285895565e-06f, 6.284424081e-06f, 6.282941903e-06f, 6.281449036e-06f, 6.279945484e-06f, 6.278431250e-06f, 6.276906340e-06f, 6.275370756e-06f,
+6.273824504e-06f, 6.272267586e-06f, 6.270700007e-06f, 6.269121772e-06f, 6.267532884e-06f, 6.265933348e-06f, 6.264323167e-06f, 6.262702346e-06f, 6.261070889e-06f, 6.259428800e-06f,
+6.257776084e-06f, 6.256112745e-06f, 6.254438787e-06f, 6.252754214e-06f, 6.251059031e-06f, 6.249353242e-06f, 6.247636851e-06f, 6.245909863e-06f, 6.244172282e-06f, 6.242424113e-06f,
+6.240665359e-06f, 6.238896026e-06f, 6.237116117e-06f, 6.235325638e-06f, 6.233524593e-06f, 6.231712986e-06f, 6.229890822e-06f, 6.228058105e-06f, 6.226214840e-06f, 6.224361031e-06f,
+6.222496684e-06f, 6.220621802e-06f, 6.218736390e-06f, 6.216840454e-06f, 6.214933997e-06f, 6.213017025e-06f, 6.211089541e-06f, 6.209151551e-06f, 6.207203060e-06f, 6.205244072e-06f,
+6.203274592e-06f, 6.201294625e-06f, 6.199304175e-06f, 6.197303248e-06f, 6.195291848e-06f, 6.193269980e-06f, 6.191237650e-06f, 6.189194861e-06f, 6.187141619e-06f, 6.185077929e-06f,
+6.183003795e-06f, 6.180919223e-06f, 6.178824218e-06f, 6.176718784e-06f, 6.174602927e-06f, 6.172476652e-06f, 6.170339964e-06f, 6.168192867e-06f, 6.166035367e-06f, 6.163867469e-06f,
+6.161689179e-06f, 6.159500500e-06f, 6.157301439e-06f, 6.155092001e-06f, 6.152872190e-06f, 6.150642013e-06f, 6.148401474e-06f, 6.146150578e-06f, 6.143889331e-06f, 6.141617738e-06f,
+6.139335804e-06f, 6.137043535e-06f, 6.134740935e-06f, 6.132428011e-06f, 6.130104768e-06f, 6.127771211e-06f, 6.125427345e-06f, 6.123073176e-06f, 6.120708709e-06f, 6.118333950e-06f,
+6.115948904e-06f, 6.113553577e-06f, 6.111147974e-06f, 6.108732101e-06f, 6.106305963e-06f, 6.103869566e-06f, 6.101422915e-06f, 6.098966016e-06f, 6.096498875e-06f, 6.094021497e-06f,
+6.091533887e-06f, 6.089036053e-06f, 6.086527998e-06f, 6.084009729e-06f, 6.081481251e-06f, 6.078942571e-06f, 6.076393694e-06f, 6.073834625e-06f, 6.071265371e-06f, 6.068685938e-06f,
+6.066096330e-06f, 6.063496555e-06f, 6.060886617e-06f, 6.058266523e-06f, 6.055636278e-06f, 6.052995889e-06f, 6.050345361e-06f, 6.047684700e-06f, 6.045013913e-06f, 6.042333004e-06f,
+6.039641981e-06f, 6.036940849e-06f, 6.034229613e-06f, 6.031508282e-06f, 6.028776859e-06f, 6.026035351e-06f, 6.023283765e-06f, 6.020522106e-06f, 6.017750381e-06f, 6.014968595e-06f,
+6.012176755e-06f, 6.009374867e-06f, 6.006562937e-06f, 6.003740972e-06f, 6.000908977e-06f, 5.998066959e-06f, 5.995214923e-06f, 5.992352877e-06f, 5.989480827e-06f, 5.986598778e-06f,
+5.983706738e-06f, 5.980804711e-06f, 5.977892706e-06f, 5.974970728e-06f, 5.972038783e-06f, 5.969096878e-06f, 5.966145020e-06f, 5.963183214e-06f, 5.960211468e-06f, 5.957229787e-06f,
+5.954238178e-06f, 5.951236648e-06f, 5.948225203e-06f, 5.945203849e-06f, 5.942172594e-06f, 5.939131443e-06f, 5.936080404e-06f, 5.933019482e-06f, 5.929948685e-06f, 5.926868020e-06f,
+5.923777491e-06f, 5.920677108e-06f, 5.917566875e-06f, 5.914446800e-06f, 5.911316889e-06f, 5.908177150e-06f, 5.905027588e-06f, 5.901868212e-06f, 5.898699026e-06f, 5.895520039e-06f,
+5.892331256e-06f, 5.889132686e-06f, 5.885924334e-06f, 5.882706208e-06f, 5.879478314e-06f, 5.876240659e-06f, 5.872993250e-06f, 5.869736094e-06f, 5.866469198e-06f, 5.863192569e-06f,
+5.859906214e-06f, 5.856610140e-06f, 5.853304353e-06f, 5.849988862e-06f, 5.846663672e-06f, 5.843328791e-06f, 5.839984226e-06f, 5.836629984e-06f, 5.833266071e-06f, 5.829892497e-06f,
+5.826509266e-06f, 5.823116387e-06f, 5.819713866e-06f, 5.816301712e-06f, 5.812879930e-06f, 5.809448528e-06f, 5.806007513e-06f, 5.802556893e-06f, 5.799096675e-06f, 5.795626866e-06f,
+5.792147473e-06f, 5.788658504e-06f, 5.785159966e-06f, 5.781651866e-06f, 5.778134212e-06f, 5.774607010e-06f, 5.771070269e-06f, 5.767523996e-06f, 5.763968197e-06f, 5.760402881e-06f,
+5.756828055e-06f, 5.753243727e-06f, 5.749649903e-06f, 5.746046592e-06f, 5.742433800e-06f, 5.738811536e-06f, 5.735179806e-06f, 5.731538619e-06f, 5.727887982e-06f, 5.724227902e-06f,
+5.720558388e-06f, 5.716879446e-06f, 5.713191084e-06f, 5.709493311e-06f, 5.705786133e-06f, 5.702069558e-06f, 5.698343594e-06f, 5.694608248e-06f, 5.690863529e-06f, 5.687109444e-06f,
+5.683346001e-06f, 5.679573208e-06f, 5.675791071e-06f, 5.671999600e-06f, 5.668198802e-06f, 5.664388684e-06f, 5.660569255e-06f, 5.656740522e-06f, 5.652902493e-06f, 5.649055177e-06f,
+5.645198580e-06f, 5.641332712e-06f, 5.637457579e-06f, 5.633573190e-06f, 5.629679552e-06f, 5.625776675e-06f, 5.621864565e-06f, 5.617943230e-06f, 5.614012679e-06f, 5.610072920e-06f,
+5.606123961e-06f, 5.602165809e-06f, 5.598198474e-06f, 5.594221962e-06f, 5.590236282e-06f, 5.586241442e-06f, 5.582237451e-06f, 5.578224316e-06f, 5.574202045e-06f, 5.570170647e-06f,
+5.566130130e-06f, 5.562080503e-06f, 5.558021772e-06f, 5.553953947e-06f, 5.549877036e-06f, 5.545791047e-06f, 5.541695989e-06f, 5.537591869e-06f, 5.533478696e-06f, 5.529356478e-06f,
+5.525225224e-06f, 5.521084942e-06f, 5.516935640e-06f, 5.512777327e-06f, 5.508610011e-06f, 5.504433700e-06f, 5.500248404e-06f, 5.496054129e-06f, 5.491850886e-06f, 5.487638682e-06f,
+5.483417525e-06f, 5.479187425e-06f, 5.474948390e-06f, 5.470700427e-06f, 5.466443547e-06f, 5.462177757e-06f, 5.457903066e-06f, 5.453619482e-06f, 5.449327015e-06f, 5.445025672e-06f,
+5.440715462e-06f, 5.436396395e-06f, 5.432068478e-06f, 5.427731720e-06f, 5.423386131e-06f, 5.419031718e-06f, 5.414668490e-06f, 5.410296457e-06f, 5.405915626e-06f, 5.401526007e-06f,
+5.397127608e-06f, 5.392720438e-06f, 5.388304507e-06f, 5.383879822e-06f, 5.379446392e-06f, 5.375004227e-06f, 5.370553335e-06f, 5.366093725e-06f, 5.361625407e-06f, 5.357148388e-06f,
+5.352662677e-06f, 5.348168285e-06f, 5.343665219e-06f, 5.339153488e-06f, 5.334633103e-06f, 5.330104070e-06f, 5.325566400e-06f, 5.321020102e-06f, 5.316465184e-06f, 5.311901655e-06f,
+5.307329526e-06f, 5.302748803e-06f, 5.298159498e-06f, 5.293561618e-06f, 5.288955173e-06f, 5.284340172e-06f, 5.279716624e-06f, 5.275084539e-06f, 5.270443925e-06f, 5.265794791e-06f,
+5.261137147e-06f, 5.256471002e-06f, 5.251796366e-06f, 5.247113246e-06f, 5.242421653e-06f, 5.237721596e-06f, 5.233013085e-06f, 5.228296127e-06f, 5.223570733e-06f, 5.218836913e-06f,
+5.214094674e-06f, 5.209344027e-06f, 5.204584981e-06f, 5.199817545e-06f, 5.195041729e-06f, 5.190257543e-06f, 5.185464994e-06f, 5.180664093e-06f, 5.175854850e-06f, 5.171037273e-06f,
+5.166211373e-06f, 5.161377158e-06f, 5.156534638e-06f, 5.151683823e-06f, 5.146824722e-06f, 5.141957344e-06f, 5.137081700e-06f, 5.132197798e-06f, 5.127305648e-06f, 5.122405261e-06f,
+5.117496644e-06f, 5.112579809e-06f, 5.107654764e-06f, 5.102721519e-06f, 5.097780084e-06f, 5.092830468e-06f, 5.087872682e-06f, 5.082906734e-06f, 5.077932635e-06f, 5.072950394e-06f,
+5.067960021e-06f, 5.062961525e-06f, 5.057954917e-06f, 5.052940205e-06f, 5.047917401e-06f, 5.042886513e-06f, 5.037847551e-06f, 5.032800526e-06f, 5.027745446e-06f, 5.022682322e-06f,
+5.017611164e-06f, 5.012531982e-06f, 5.007444784e-06f, 5.002349582e-06f, 4.997246385e-06f, 4.992135203e-06f, 4.987016046e-06f, 4.981888924e-06f, 4.976753847e-06f, 4.971610824e-06f,
+4.966459866e-06f, 4.961300982e-06f, 4.956134183e-06f, 4.950959479e-06f, 4.945776880e-06f, 4.940586395e-06f, 4.935388034e-06f, 4.930181809e-06f, 4.924967728e-06f, 4.919745802e-06f,
+4.914516042e-06f, 4.909278456e-06f, 4.904033055e-06f, 4.898779850e-06f, 4.893518850e-06f, 4.888250065e-06f, 4.882973507e-06f, 4.877689184e-06f, 4.872397107e-06f, 4.867097287e-06f,
+4.861789733e-06f, 4.856474456e-06f, 4.851151465e-06f, 4.845820772e-06f, 4.840482386e-06f, 4.835136318e-06f, 4.829782578e-06f, 4.824421176e-06f, 4.819052123e-06f, 4.813675429e-06f,
+4.808291104e-06f, 4.802899158e-06f, 4.797499602e-06f, 4.792092446e-06f, 4.786677701e-06f, 4.781255378e-06f, 4.775825485e-06f, 4.770388034e-06f, 4.764943036e-06f, 4.759490500e-06f,
+4.754030437e-06f, 4.748562858e-06f, 4.743087773e-06f, 4.737605192e-06f, 4.732115127e-06f, 4.726617586e-06f, 4.721112582e-06f, 4.715600125e-06f, 4.710080224e-06f, 4.704552891e-06f,
+4.699018137e-06f, 4.693475971e-06f, 4.687926404e-06f, 4.682369447e-06f, 4.676805111e-06f, 4.671233406e-06f, 4.665654343e-06f, 4.660067932e-06f, 4.654474185e-06f, 4.648873111e-06f,
+4.643264721e-06f, 4.637649027e-06f, 4.632026038e-06f, 4.626395766e-06f, 4.620758221e-06f, 4.615113414e-06f, 4.609461356e-06f, 4.603802057e-06f, 4.598135528e-06f, 4.592461781e-06f,
+4.586780825e-06f, 4.581092672e-06f, 4.575397332e-06f, 4.569694816e-06f, 4.563985135e-06f, 4.558268300e-06f, 4.552544322e-06f, 4.546813212e-06f, 4.541074980e-06f, 4.535329637e-06f,
+4.529577194e-06f, 4.523817663e-06f, 4.518051054e-06f, 4.512277377e-06f, 4.506496645e-06f, 4.500708867e-06f, 4.494914056e-06f, 4.489112221e-06f, 4.483303374e-06f, 4.477487525e-06f,
+4.471664687e-06f, 4.465834869e-06f, 4.459998083e-06f, 4.454154340e-06f, 4.448303651e-06f, 4.442446027e-06f, 4.436581479e-06f, 4.430710018e-06f, 4.424831655e-06f, 4.418946401e-06f,
+4.413054268e-06f, 4.407155266e-06f, 4.401249407e-06f, 4.395336702e-06f, 4.389417162e-06f, 4.383490798e-06f, 4.377557621e-06f, 4.371617643e-06f, 4.365670874e-06f, 4.359717326e-06f,
+4.353757011e-06f, 4.347789938e-06f, 4.341816120e-06f, 4.335835568e-06f, 4.329848293e-06f, 4.323854306e-06f, 4.317853619e-06f, 4.311846243e-06f, 4.305832188e-06f, 4.299811468e-06f,
+4.293784092e-06f, 4.287750072e-06f, 4.281709419e-06f, 4.275662146e-06f, 4.269608262e-06f, 4.263547780e-06f, 4.257480711e-06f, 4.251407066e-06f, 4.245326856e-06f, 4.239240094e-06f,
+4.233146790e-06f, 4.227046957e-06f, 4.220940604e-06f, 4.214827744e-06f, 4.208708389e-06f, 4.202582549e-06f, 4.196450236e-06f, 4.190311462e-06f, 4.184166238e-06f, 4.178014576e-06f,
+4.171856487e-06f, 4.165691982e-06f, 4.159521074e-06f, 4.153343774e-06f, 4.147160092e-06f, 4.140970042e-06f, 4.134773634e-06f, 4.128570880e-06f, 4.122361792e-06f, 4.116146381e-06f,
+4.109924659e-06f, 4.103696637e-06f, 4.097462327e-06f, 4.091221741e-06f, 4.084974890e-06f, 4.078721786e-06f, 4.072462441e-06f, 4.066196866e-06f, 4.059925073e-06f, 4.053647074e-06f,
+4.047362880e-06f, 4.041072503e-06f, 4.034775956e-06f, 4.028473248e-06f, 4.022164393e-06f, 4.015849402e-06f, 4.009528287e-06f, 4.003201059e-06f, 3.996867731e-06f, 3.990528314e-06f,
+3.984182819e-06f, 3.977831260e-06f, 3.971473647e-06f, 3.965109992e-06f, 3.958740307e-06f, 3.952364605e-06f, 3.945982896e-06f, 3.939595193e-06f, 3.933201507e-06f, 3.926801851e-06f,
+3.920396236e-06f, 3.913984675e-06f, 3.907567178e-06f, 3.901143759e-06f, 3.894714428e-06f, 3.888279199e-06f, 3.881838082e-06f, 3.875391089e-06f, 3.868938234e-06f, 3.862479527e-06f,
+3.856014981e-06f, 3.849544607e-06f, 3.843068418e-06f, 3.836586425e-06f, 3.830098641e-06f, 3.823605078e-06f, 3.817105747e-06f, 3.810600660e-06f, 3.804089831e-06f, 3.797573270e-06f,
+3.791050989e-06f, 3.784523002e-06f, 3.777989319e-06f, 3.771449954e-06f, 3.764904917e-06f, 3.758354222e-06f, 3.751797880e-06f, 3.745235903e-06f, 3.738668303e-06f, 3.732095093e-06f,
+3.725516285e-06f, 3.718931891e-06f, 3.712341923e-06f, 3.705746392e-06f, 3.699145313e-06f, 3.692538695e-06f, 3.685926553e-06f, 3.679308897e-06f, 3.672685740e-06f, 3.666057095e-06f,
+3.659422973e-06f, 3.652783387e-06f, 3.646138349e-06f, 3.639487871e-06f, 3.632831965e-06f, 3.626170645e-06f, 3.619503921e-06f, 3.612831806e-06f, 3.606154313e-06f, 3.599471454e-06f,
+3.592783240e-06f, 3.586089685e-06f, 3.579390801e-06f, 3.572686600e-06f, 3.565977094e-06f, 3.559262296e-06f, 3.552542217e-06f, 3.545816872e-06f, 3.539086270e-06f, 3.532350426e-06f,
+3.525609351e-06f, 3.518863058e-06f, 3.512111560e-06f, 3.505354867e-06f, 3.498592994e-06f, 3.491825952e-06f, 3.485053754e-06f, 3.478276412e-06f, 3.471493939e-06f, 3.464706347e-06f,
+3.457913648e-06f, 3.451115855e-06f, 3.444312981e-06f, 3.437505038e-06f, 3.430692037e-06f, 3.423873993e-06f, 3.417050917e-06f, 3.410222822e-06f, 3.403389720e-06f, 3.396551624e-06f,
+3.389708546e-06f, 3.382860499e-06f, 3.376007496e-06f, 3.369149548e-06f, 3.362286669e-06f, 3.355418871e-06f, 3.348546166e-06f, 3.341668567e-06f, 3.334786087e-06f, 3.327898739e-06f,
+3.321006534e-06f, 3.314109485e-06f, 3.307207606e-06f, 3.300300908e-06f, 3.293389404e-06f, 3.286473108e-06f, 3.279552030e-06f, 3.272626185e-06f, 3.265695584e-06f, 3.258760241e-06f,
+3.251820168e-06f, 3.244875377e-06f, 3.237925882e-06f, 3.230971695e-06f, 3.224012828e-06f, 3.217049295e-06f, 3.210081108e-06f, 3.203108280e-06f, 3.196130823e-06f, 3.189148750e-06f,
+3.182162074e-06f, 3.175170807e-06f, 3.168174963e-06f, 3.161174554e-06f, 3.154169593e-06f, 3.147160092e-06f, 3.140146064e-06f, 3.133127522e-06f, 3.126104480e-06f, 3.119076948e-06f,
+3.112044941e-06f, 3.105008471e-06f, 3.097967551e-06f, 3.090922194e-06f, 3.083872412e-06f, 3.076818219e-06f, 3.069759626e-06f, 3.062696648e-06f, 3.055629296e-06f, 3.048557583e-06f,
+3.041481523e-06f, 3.034401129e-06f, 3.027316412e-06f, 3.020227387e-06f, 3.013134065e-06f, 3.006036459e-06f, 2.998934584e-06f, 2.991828450e-06f, 2.984718072e-06f, 2.977603463e-06f,
+2.970484634e-06f, 2.963361599e-06f, 2.956234371e-06f, 2.949102963e-06f, 2.941967387e-06f, 2.934827657e-06f, 2.927683786e-06f, 2.920535786e-06f, 2.913383670e-06f, 2.906227452e-06f,
+2.899067144e-06f, 2.891902759e-06f, 2.884734311e-06f, 2.877561811e-06f, 2.870385274e-06f, 2.863204712e-06f, 2.856020138e-06f, 2.848831564e-06f, 2.841639005e-06f, 2.834442473e-06f,
+2.827241982e-06f, 2.820037543e-06f, 2.812829170e-06f, 2.805616876e-06f, 2.798400674e-06f, 2.791180578e-06f, 2.783956599e-06f, 2.776728752e-06f, 2.769497049e-06f, 2.762261504e-06f,
+2.755022128e-06f, 2.747778936e-06f, 2.740531941e-06f, 2.733281155e-06f, 2.726026591e-06f, 2.718768263e-06f, 2.711506184e-06f, 2.704240367e-06f, 2.696970824e-06f, 2.689697570e-06f,
+2.682420616e-06f, 2.675139977e-06f, 2.667855665e-06f, 2.660567694e-06f, 2.653276076e-06f, 2.645980825e-06f, 2.638681953e-06f, 2.631379475e-06f, 2.624073402e-06f, 2.616763749e-06f,
+2.609450528e-06f, 2.602133752e-06f, 2.594813435e-06f, 2.587489590e-06f, 2.580162230e-06f, 2.572831368e-06f, 2.565497017e-06f, 2.558159191e-06f, 2.550817903e-06f, 2.543473165e-06f,
+2.536124991e-06f, 2.528773394e-06f, 2.521418388e-06f, 2.514059986e-06f, 2.506698200e-06f, 2.499333044e-06f, 2.491964532e-06f, 2.484592675e-06f, 2.477217489e-06f, 2.469838986e-06f,
+2.462457178e-06f, 2.455072080e-06f, 2.447683705e-06f, 2.440292065e-06f, 2.432897175e-06f, 2.425499046e-06f, 2.418097694e-06f, 2.410693130e-06f, 2.403285368e-06f, 2.395874422e-06f,
+2.388460304e-06f, 2.381043028e-06f, 2.373622608e-06f, 2.366199056e-06f, 2.358772385e-06f, 2.351342610e-06f, 2.343909743e-06f, 2.336473797e-06f, 2.329034786e-06f, 2.321592724e-06f,
+2.314147623e-06f, 2.306699497e-06f, 2.299248359e-06f, 2.291794223e-06f, 2.284337101e-06f, 2.276877007e-06f, 2.269413955e-06f, 2.261947957e-06f, 2.254479028e-06f, 2.247007180e-06f,
+2.239532427e-06f, 2.232054781e-06f, 2.224574257e-06f, 2.217090868e-06f, 2.209604628e-06f, 2.202115548e-06f, 2.194623644e-06f, 2.187128927e-06f, 2.179631412e-06f, 2.172131112e-06f,
+2.164628041e-06f, 2.157122211e-06f, 2.149613636e-06f, 2.142102330e-06f, 2.134588305e-06f, 2.127071575e-06f, 2.119552155e-06f, 2.112030056e-06f, 2.104505292e-06f, 2.096977877e-06f,
+2.089447825e-06f, 2.081915148e-06f, 2.074379860e-06f, 2.066841974e-06f, 2.059301504e-06f, 2.051758464e-06f, 2.044212865e-06f, 2.036664723e-06f, 2.029114051e-06f, 2.021560861e-06f,
+2.014005168e-06f, 2.006446984e-06f, 1.998886324e-06f, 1.991323200e-06f, 1.983757626e-06f, 1.976189616e-06f, 1.968619182e-06f, 1.961046339e-06f, 1.953471100e-06f, 1.945893478e-06f,
+1.938313487e-06f, 1.930731140e-06f, 1.923146450e-06f, 1.915559432e-06f, 1.907970098e-06f, 1.900378462e-06f, 1.892784538e-06f, 1.885188338e-06f, 1.877589877e-06f, 1.869989168e-06f,
+1.862386224e-06f, 1.854781059e-06f, 1.847173686e-06f, 1.839564119e-06f, 1.831952372e-06f, 1.824338457e-06f, 1.816722388e-06f, 1.809104179e-06f, 1.801483843e-06f, 1.793861394e-06f,
+1.786236845e-06f, 1.778610210e-06f, 1.770981502e-06f, 1.763350735e-06f, 1.755717922e-06f, 1.748083076e-06f, 1.740446212e-06f, 1.732807342e-06f, 1.725166481e-06f, 1.717523641e-06f,
+1.709878837e-06f, 1.702232081e-06f, 1.694583388e-06f, 1.686932770e-06f, 1.679280242e-06f, 1.671625816e-06f, 1.663969507e-06f, 1.656311327e-06f, 1.648651291e-06f, 1.640989412e-06f,
+1.633325703e-06f, 1.625660178e-06f, 1.617992851e-06f, 1.610323735e-06f, 1.602652843e-06f, 1.594980189e-06f, 1.587305787e-06f, 1.579629650e-06f, 1.571951792e-06f, 1.564272226e-06f,
+1.556590965e-06f, 1.548908024e-06f, 1.541223416e-06f, 1.533537154e-06f, 1.525849252e-06f, 1.518159723e-06f, 1.510468582e-06f, 1.502775841e-06f, 1.495081514e-06f, 1.487385615e-06f,
+1.479688157e-06f, 1.471989154e-06f, 1.464288619e-06f, 1.456586565e-06f, 1.448883008e-06f, 1.441177959e-06f, 1.433471433e-06f, 1.425763443e-06f, 1.418054002e-06f, 1.410343125e-06f,
+1.402630824e-06f, 1.394917114e-06f, 1.387202007e-06f, 1.379485518e-06f, 1.371767660e-06f, 1.364048446e-06f, 1.356327891e-06f, 1.348606007e-06f, 1.340882808e-06f, 1.333158308e-06f,
+1.325432521e-06f, 1.317705459e-06f, 1.309977137e-06f, 1.302247568e-06f, 1.294516766e-06f, 1.286784743e-06f, 1.279051515e-06f, 1.271317093e-06f, 1.263581493e-06f, 1.255844727e-06f,
+1.248106809e-06f, 1.240367752e-06f, 1.232627571e-06f, 1.224886278e-06f, 1.217143888e-06f, 1.209400413e-06f, 1.201655868e-06f, 1.193910266e-06f, 1.186163620e-06f, 1.178415945e-06f,
+1.170667253e-06f, 1.162917558e-06f, 1.155166874e-06f, 1.147415215e-06f, 1.139662593e-06f, 1.131909023e-06f, 1.124154518e-06f, 1.116399091e-06f, 1.108642757e-06f, 1.100885529e-06f,
+1.093127420e-06f, 1.085368443e-06f, 1.077608614e-06f, 1.069847944e-06f, 1.062086448e-06f, 1.054324139e-06f, 1.046561031e-06f, 1.038797137e-06f, 1.031032471e-06f, 1.023267046e-06f,
+1.015500876e-06f, 1.007733975e-06f, 9.999663558e-07f, 9.921980323e-07f, 9.844290181e-07f, 9.766593267e-07f, 9.688889716e-07f, 9.611179663e-07f, 9.533463246e-07f, 9.455740598e-07f,
+9.378011856e-07f, 9.300277156e-07f, 9.222536632e-07f, 9.144790420e-07f, 9.067038656e-07f, 8.989281476e-07f, 8.911519014e-07f, 8.833751407e-07f, 8.755978789e-07f, 8.678201297e-07f,
+8.600419066e-07f, 8.522632231e-07f, 8.444840928e-07f, 8.367045292e-07f, 8.289245459e-07f, 8.211441564e-07f, 8.133633742e-07f, 8.055822129e-07f, 7.978006861e-07f, 7.900188072e-07f,
+7.822365898e-07f, 7.744540474e-07f, 7.666711937e-07f, 7.588880420e-07f, 7.511046060e-07f, 7.433208991e-07f, 7.355369350e-07f, 7.277527271e-07f, 7.199682889e-07f, 7.121836340e-07f,
+7.043987760e-07f, 6.966137282e-07f, 6.888285043e-07f, 6.810431178e-07f, 6.732575821e-07f, 6.654719109e-07f, 6.576861176e-07f, 6.499002157e-07f, 6.421142187e-07f, 6.343281402e-07f,
+6.265419937e-07f, 6.187557926e-07f, 6.109695506e-07f, 6.031832809e-07f, 5.953969973e-07f, 5.876107132e-07f, 5.798244420e-07f, 5.720381973e-07f, 5.642519926e-07f, 5.564658413e-07f,
+5.486797570e-07f, 5.408937531e-07f, 5.331078432e-07f, 5.253220407e-07f, 5.175363590e-07f, 5.097508118e-07f, 5.019654124e-07f, 4.941801743e-07f, 4.863951111e-07f, 4.786102361e-07f,
+4.708255629e-07f, 4.630411049e-07f, 4.552568756e-07f, 4.474728884e-07f, 4.396891569e-07f, 4.319056944e-07f, 4.241225145e-07f, 4.163396306e-07f, 4.085570561e-07f, 4.007748045e-07f,
+3.929928892e-07f, 3.852113237e-07f, 3.774301215e-07f, 3.696492959e-07f, 3.618688604e-07f, 3.540888285e-07f, 3.463092135e-07f, 3.385300290e-07f, 3.307512883e-07f, 3.229730049e-07f,
+3.151951922e-07f, 3.074178636e-07f, 2.996410325e-07f, 2.918647123e-07f, 2.840889165e-07f, 2.763136585e-07f, 2.685389517e-07f, 2.607648095e-07f, 2.529912452e-07f, 2.452182723e-07f,
+2.374459042e-07f, 2.296741543e-07f, 2.219030360e-07f, 2.141325626e-07f, 2.063627475e-07f, 1.985936042e-07f, 1.908251460e-07f, 1.830573862e-07f, 1.752903384e-07f, 1.675240157e-07f,
+1.597584316e-07f, 1.519935995e-07f, 1.442295327e-07f, 1.364662446e-07f, 1.287037485e-07f, 1.209420578e-07f, 1.131811858e-07f, 1.054211459e-07f, 9.766195147e-08f, 8.990361576e-08f,
+8.214615214e-08f, 7.438957396e-08f, 6.663389453e-08f, 5.887912719e-08f, 5.112528526e-08f, 4.337238205e-08f, 3.562043089e-08f, 2.786944508e-08f, 2.011943794e-08f, 1.237042277e-08f,
+4.622412867e-09f, -3.124578460e-09f, -1.087053792e-08f, -1.861545222e-08f, -2.635930807e-08f, -3.410209220e-08f, -4.184379131e-08f, -4.958439213e-08f, -5.732388139e-08f, -6.506224581e-08f,
+-7.279947214e-08f, -8.053554710e-08f, -8.827045745e-08f, -9.600418992e-08f, -1.037367313e-07f, -1.114680682e-07f, -1.191981876e-07f, -1.269270761e-07f, -1.346547205e-07f, -1.423811076e-07f,
+-1.501062241e-07f, -1.578300568e-07f, -1.655525926e-07f, -1.732738181e-07f, -1.809937203e-07f, -1.887122857e-07f, -1.964295014e-07f, -2.041453540e-07f, -2.118598304e-07f, -2.195729174e-07f,
+-2.272846017e-07f, -2.349948703e-07f, -2.427037099e-07f, -2.504111073e-07f, -2.581170494e-07f, -2.658215231e-07f, -2.735245151e-07f, -2.812260123e-07f, -2.889260015e-07f, -2.966244696e-07f,
+-3.043214035e-07f, -3.120167900e-07f, -3.197106160e-07f, -3.274028683e-07f, -3.350935338e-07f, -3.427825995e-07f, -3.504700521e-07f, -3.581558785e-07f, -3.658400658e-07f, -3.735226006e-07f,
+-3.812034701e-07f, -3.888826609e-07f, -3.965601602e-07f, -4.042359547e-07f, -4.119100315e-07f, -4.195823773e-07f, -4.272529792e-07f, -4.349218241e-07f, -4.425888989e-07f, -4.502541906e-07f,
+-4.579176861e-07f, -4.655793724e-07f, -4.732392364e-07f, -4.808972650e-07f, -4.885534454e-07f, -4.962077643e-07f, -5.038602089e-07f, -5.115107660e-07f, -5.191594227e-07f, -5.268061660e-07f,
+-5.344509829e-07f, -5.420938603e-07f, -5.497347853e-07f, -5.573737448e-07f, -5.650107260e-07f, -5.726457158e-07f, -5.802787012e-07f, -5.879096694e-07f, -5.955386072e-07f, -6.031655018e-07f,
+-6.107903403e-07f, -6.184131096e-07f, -6.260337968e-07f, -6.336523891e-07f, -6.412688734e-07f, -6.488832368e-07f, -6.564954664e-07f, -6.641055494e-07f, -6.717134728e-07f, -6.793192236e-07f,
+-6.869227891e-07f, -6.945241563e-07f, -7.021233122e-07f, -7.097202442e-07f, -7.173149391e-07f, -7.249073843e-07f, -7.324975668e-07f, -7.400854738e-07f, -7.476710924e-07f, -7.552544098e-07f,
+-7.628354131e-07f, -7.704140895e-07f, -7.779904262e-07f, -7.855644103e-07f, -7.931360290e-07f, -8.007052695e-07f, -8.082721191e-07f, -8.158365648e-07f, -8.233985940e-07f, -8.309581937e-07f,
+-8.385153513e-07f, -8.460700540e-07f, -8.536222889e-07f, -8.611720434e-07f, -8.687193046e-07f, -8.762640599e-07f, -8.838062963e-07f, -8.913460014e-07f, -8.988831622e-07f, -9.064177660e-07f,
+-9.139498002e-07f, -9.214792520e-07f, -9.290061087e-07f, -9.365303576e-07f, -9.440519860e-07f, -9.515709812e-07f, -9.590873305e-07f, -9.666010213e-07f, -9.741120408e-07f, -9.816203765e-07f,
+-9.891260156e-07f, -9.966289454e-07f, -1.004129153e-06f, -1.011626627e-06f, -1.019121353e-06f, -1.026613320e-06f, -1.034102514e-06f, -1.041588923e-06f, -1.049072535e-06f, -1.056553336e-06f,
+-1.064031315e-06f, -1.071506458e-06f, -1.078978753e-06f, -1.086448188e-06f, -1.093914750e-06f, -1.101378425e-06f, -1.108839203e-06f, -1.116297070e-06f, -1.123752013e-06f, -1.131204021e-06f,
+-1.138653080e-06f, -1.146099178e-06f, -1.153542303e-06f, -1.160982442e-06f, -1.168419582e-06f, -1.175853712e-06f, -1.183284818e-06f, -1.190712888e-06f, -1.198137909e-06f, -1.205559870e-06f,
+-1.212978757e-06f, -1.220394559e-06f, -1.227807263e-06f, -1.235216855e-06f, -1.242623325e-06f, -1.250026659e-06f, -1.257426845e-06f, -1.264823871e-06f, -1.272217724e-06f, -1.279608392e-06f,
+-1.286995863e-06f, -1.294380123e-06f, -1.301761161e-06f, -1.309138965e-06f, -1.316513521e-06f, -1.323884819e-06f, -1.331252844e-06f, -1.338617585e-06f, -1.345979030e-06f, -1.353337166e-06f,
+-1.360691981e-06f, -1.368043463e-06f, -1.375391599e-06f, -1.382736377e-06f, -1.390077785e-06f, -1.397415810e-06f, -1.404750441e-06f, -1.412081664e-06f, -1.419409469e-06f, -1.426733841e-06f,
+-1.434054770e-06f, -1.441372243e-06f, -1.448686247e-06f, -1.455996771e-06f, -1.463303802e-06f, -1.470607329e-06f, -1.477907338e-06f, -1.485203818e-06f, -1.492496757e-06f, -1.499786141e-06f,
+-1.507071960e-06f, -1.514354202e-06f, -1.521632852e-06f, -1.528907901e-06f, -1.536179335e-06f, -1.543447143e-06f, -1.550711312e-06f, -1.557971831e-06f, -1.565228686e-06f, -1.572481867e-06f,
+-1.579731360e-06f, -1.586977155e-06f, -1.594219238e-06f, -1.601457598e-06f, -1.608692223e-06f, -1.615923100e-06f, -1.623150218e-06f, -1.630373565e-06f, -1.637593128e-06f, -1.644808896e-06f,
+-1.652020856e-06f, -1.659228996e-06f, -1.666433306e-06f, -1.673633772e-06f, -1.680830382e-06f, -1.688023125e-06f, -1.695211989e-06f, -1.702396962e-06f, -1.709578031e-06f, -1.716755185e-06f,
+-1.723928412e-06f, -1.731097701e-06f, -1.738263038e-06f, -1.745424412e-06f, -1.752581812e-06f, -1.759735225e-06f, -1.766884640e-06f, -1.774030045e-06f, -1.781171427e-06f, -1.788308776e-06f,
+-1.795442079e-06f, -1.802571324e-06f, -1.809696499e-06f, -1.816817593e-06f, -1.823934594e-06f, -1.831047491e-06f, -1.838156270e-06f, -1.845260921e-06f, -1.852361432e-06f, -1.859457791e-06f,
+-1.866549987e-06f, -1.873638006e-06f, -1.880721839e-06f, -1.887801473e-06f, -1.894876896e-06f, -1.901948096e-06f, -1.909015063e-06f, -1.916077784e-06f, -1.923136247e-06f, -1.930190441e-06f,
+-1.937240355e-06f, -1.944285976e-06f, -1.951327293e-06f, -1.958364295e-06f, -1.965396969e-06f, -1.972425304e-06f, -1.979449289e-06f, -1.986468911e-06f, -1.993484160e-06f, -2.000495024e-06f,
+-2.007501490e-06f, -2.014503548e-06f, -2.021501186e-06f, -2.028494393e-06f, -2.035483157e-06f, -2.042467466e-06f, -2.049447308e-06f, -2.056422674e-06f, -2.063393550e-06f, -2.070359925e-06f,
+-2.077321788e-06f, -2.084279128e-06f, -2.091231933e-06f, -2.098180191e-06f, -2.105123892e-06f, -2.112063023e-06f, -2.118997573e-06f, -2.125927531e-06f, -2.132852886e-06f, -2.139773625e-06f,
+-2.146689738e-06f, -2.153601214e-06f, -2.160508040e-06f, -2.167410206e-06f, -2.174307700e-06f, -2.181200510e-06f, -2.188088627e-06f, -2.194972037e-06f, -2.201850731e-06f, -2.208724696e-06f,
+-2.215593921e-06f, -2.222458396e-06f, -2.229318108e-06f, -2.236173046e-06f, -2.243023200e-06f, -2.249868558e-06f, -2.256709109e-06f, -2.263544841e-06f, -2.270375743e-06f, -2.277201805e-06f,
+-2.284023015e-06f, -2.290839361e-06f, -2.297650833e-06f, -2.304457420e-06f, -2.311259110e-06f, -2.318055891e-06f, -2.324847754e-06f, -2.331634687e-06f, -2.338416679e-06f, -2.345193718e-06f,
+-2.351965794e-06f, -2.358732895e-06f, -2.365495011e-06f, -2.372252131e-06f, -2.379004242e-06f, -2.385751335e-06f, -2.392493398e-06f, -2.399230420e-06f, -2.405962391e-06f, -2.412689299e-06f,
+-2.419411133e-06f, -2.426127882e-06f, -2.432839536e-06f, -2.439546083e-06f, -2.446247512e-06f, -2.452943813e-06f, -2.459634974e-06f, -2.466320985e-06f, -2.473001835e-06f, -2.479677512e-06f,
+-2.486348007e-06f, -2.493013307e-06f, -2.499673402e-06f, -2.506328282e-06f, -2.512977936e-06f, -2.519622352e-06f, -2.526261519e-06f, -2.532895428e-06f, -2.539524067e-06f, -2.546147426e-06f,
+-2.552765493e-06f, -2.559378258e-06f, -2.565985710e-06f, -2.572587838e-06f, -2.579184632e-06f, -2.585776081e-06f, -2.592362174e-06f, -2.598942900e-06f, -2.605518250e-06f, -2.612088211e-06f,
+-2.618652774e-06f, -2.625211927e-06f, -2.631765661e-06f, -2.638313964e-06f, -2.644856826e-06f, -2.651394236e-06f, -2.657926184e-06f, -2.664452659e-06f, -2.670973650e-06f, -2.677489147e-06f,
+-2.683999139e-06f, -2.690503616e-06f, -2.697002567e-06f, -2.703495981e-06f, -2.709983849e-06f, -2.716466160e-06f, -2.722942902e-06f, -2.729414067e-06f, -2.735879642e-06f, -2.742339618e-06f,
+-2.748793984e-06f, -2.755242730e-06f, -2.761685845e-06f, -2.768123320e-06f, -2.774555142e-06f, -2.780981303e-06f, -2.787401792e-06f, -2.793816598e-06f, -2.800225711e-06f, -2.806629120e-06f,
+-2.813026816e-06f, -2.819418788e-06f, -2.825805025e-06f, -2.832185518e-06f, -2.838560256e-06f, -2.844929228e-06f, -2.851292425e-06f, -2.857649836e-06f, -2.864001452e-06f, -2.870347260e-06f,
+-2.876687253e-06f, -2.883021418e-06f, -2.889349747e-06f, -2.895672228e-06f, -2.901988852e-06f, -2.908299609e-06f, -2.914604488e-06f, -2.920903479e-06f, -2.927196573e-06f, -2.933483758e-06f,
+-2.939765025e-06f, -2.946040363e-06f, -2.952309764e-06f, -2.958573216e-06f, -2.964830709e-06f, -2.971082234e-06f, -2.977327780e-06f, -2.983567337e-06f, -2.989800896e-06f, -2.996028446e-06f,
+-3.002249978e-06f, -3.008465480e-06f, -3.014674944e-06f, -3.020878360e-06f, -3.027075717e-06f, -3.033267005e-06f, -3.039452215e-06f, -3.045631337e-06f, -3.051804360e-06f, -3.057971276e-06f,
+-3.064132073e-06f, -3.070286743e-06f, -3.076435274e-06f, -3.082577658e-06f, -3.088713885e-06f, -3.094843945e-06f, -3.100967827e-06f, -3.107085523e-06f, -3.113197022e-06f, -3.119302314e-06f,
+-3.125401391e-06f, -3.131494241e-06f, -3.137580856e-06f, -3.143661226e-06f, -3.149735341e-06f, -3.155803190e-06f, -3.161864766e-06f, -3.167920057e-06f, -3.173969055e-06f, -3.180011749e-06f,
+-3.186048130e-06f, -3.192078188e-06f, -3.198101914e-06f, -3.204119298e-06f, -3.210130331e-06f, -3.216135002e-06f, -3.222133303e-06f, -3.228125224e-06f, -3.234110755e-06f, -3.240089887e-06f,
+-3.246062610e-06f, -3.252028915e-06f, -3.257988792e-06f, -3.263942231e-06f, -3.269889225e-06f, -3.275829761e-06f, -3.281763833e-06f, -3.287691429e-06f, -3.293612541e-06f, -3.299527159e-06f,
+-3.305435274e-06f, -3.311336876e-06f, -3.317231956e-06f, -3.323120505e-06f, -3.329002514e-06f, -3.334877972e-06f, -3.340746871e-06f, -3.346609201e-06f, -3.352464954e-06f, -3.358314119e-06f,
+-3.364156688e-06f, -3.369992651e-06f, -3.375821999e-06f, -3.381644724e-06f, -3.387460814e-06f, -3.393270263e-06f, -3.399073059e-06f, -3.404869195e-06f, -3.410658660e-06f, -3.416441446e-06f,
+-3.422217544e-06f, -3.427986944e-06f, -3.433749638e-06f, -3.439505616e-06f, -3.445254869e-06f, -3.450997389e-06f, -3.456733165e-06f, -3.462462190e-06f, -3.468184453e-06f, -3.473899947e-06f,
+-3.479608661e-06f, -3.485310587e-06f, -3.491005717e-06f, -3.496694040e-06f, -3.502375549e-06f, -3.508050233e-06f, -3.513718085e-06f, -3.519379095e-06f, -3.525033255e-06f, -3.530680555e-06f,
+-3.536320986e-06f, -3.541954540e-06f, -3.547581209e-06f, -3.553200982e-06f, -3.558813851e-06f, -3.564419808e-06f, -3.570018843e-06f, -3.575610949e-06f, -3.581196115e-06f, -3.586774334e-06f,
+-3.592345596e-06f, -3.597909893e-06f, -3.603467216e-06f, -3.609017557e-06f, -3.614560906e-06f, -3.620097255e-06f, -3.625626596e-06f, -3.631148919e-06f, -3.636664216e-06f, -3.642172479e-06f,
+-3.647673699e-06f, -3.653167867e-06f, -3.658654974e-06f, -3.664135013e-06f, -3.669607974e-06f, -3.675073849e-06f, -3.680532629e-06f, -3.685984306e-06f, -3.691428872e-06f, -3.696866318e-06f,
+-3.702296635e-06f, -3.707719815e-06f, -3.713135849e-06f, -3.718544730e-06f, -3.723946448e-06f, -3.729340996e-06f, -3.734728364e-06f, -3.740108545e-06f, -3.745481530e-06f, -3.750847310e-06f,
+-3.756205878e-06f, -3.761557225e-06f, -3.766901343e-06f, -3.772238223e-06f, -3.777567858e-06f, -3.782890238e-06f, -3.788205356e-06f, -3.793513203e-06f, -3.798813771e-06f, -3.804107053e-06f,
+-3.809393038e-06f, -3.814671721e-06f, -3.819943092e-06f, -3.825207143e-06f, -3.830463866e-06f, -3.835713252e-06f, -3.840955295e-06f, -3.846189985e-06f, -3.851417315e-06f, -3.856637276e-06f,
+-3.861849861e-06f, -3.867055061e-06f, -3.872252868e-06f, -3.877443275e-06f, -3.882626273e-06f, -3.887801854e-06f, -3.892970010e-06f, -3.898130734e-06f, -3.903284017e-06f, -3.908429851e-06f,
+-3.913568229e-06f, -3.918699143e-06f, -3.923822584e-06f, -3.928938545e-06f, -3.934047018e-06f, -3.939147994e-06f, -3.944241467e-06f, -3.949327429e-06f, -3.954405871e-06f, -3.959476785e-06f,
+-3.964540165e-06f, -3.969596002e-06f, -3.974644288e-06f, -3.979685016e-06f, -3.984718178e-06f, -3.989743766e-06f, -3.994761773e-06f, -3.999772190e-06f, -4.004775011e-06f, -4.009770227e-06f,
+-4.014757831e-06f, -4.019737815e-06f, -4.024710172e-06f, -4.029674893e-06f, -4.034631973e-06f, -4.039581401e-06f, -4.044523173e-06f, -4.049457279e-06f, -4.054383712e-06f, -4.059302465e-06f,
+-4.064213530e-06f, -4.069116899e-06f, -4.074012566e-06f, -4.078900522e-06f, -4.083780761e-06f, -4.088653275e-06f, -4.093518056e-06f, -4.098375097e-06f, -4.103224391e-06f, -4.108065930e-06f,
+-4.112899707e-06f, -4.117725715e-06f, -4.122543945e-06f, -4.127354392e-06f, -4.132157047e-06f, -4.136951904e-06f, -4.141738955e-06f, -4.146518192e-06f, -4.151289609e-06f, -4.156053198e-06f,
+-4.160808953e-06f, -4.165556865e-06f, -4.170296928e-06f, -4.175029134e-06f, -4.179753477e-06f, -4.184469949e-06f, -4.189178544e-06f, -4.193879253e-06f, -4.198572070e-06f, -4.203256988e-06f,
+-4.207934000e-06f, -4.212603098e-06f, -4.217264276e-06f, -4.221917527e-06f, -4.226562843e-06f, -4.231200218e-06f, -4.235829644e-06f, -4.240451116e-06f, -4.245064625e-06f, -4.249670164e-06f,
+-4.254267728e-06f, -4.258857308e-06f, -4.263438899e-06f, -4.268012493e-06f, -4.272578083e-06f, -4.277135662e-06f, -4.281685224e-06f, -4.286226762e-06f, -4.290760269e-06f, -4.295285738e-06f,
+-4.299803163e-06f, -4.304312536e-06f, -4.308813852e-06f, -4.313307102e-06f, -4.317792281e-06f, -4.322269382e-06f, -4.326738398e-06f, -4.331199322e-06f, -4.335652148e-06f, -4.340096869e-06f,
+-4.344533479e-06f, -4.348961971e-06f, -4.353382338e-06f, -4.357794573e-06f, -4.362198671e-06f, -4.366594625e-06f, -4.370982427e-06f, -4.375362072e-06f, -4.379733554e-06f, -4.384096864e-06f,
+-4.388451998e-06f, -4.392798949e-06f, -4.397137709e-06f, -4.401468274e-06f, -4.405790636e-06f, -4.410104788e-06f, -4.414410725e-06f, -4.418708441e-06f, -4.422997928e-06f, -4.427279181e-06f,
+-4.431552193e-06f, -4.435816957e-06f, -4.440073469e-06f, -4.444321720e-06f, -4.448561706e-06f, -4.452793419e-06f, -4.457016854e-06f, -4.461232005e-06f, -4.465438864e-06f, -4.469637426e-06f,
+-4.473827685e-06f, -4.478009635e-06f, -4.482183269e-06f, -4.486348581e-06f, -4.490505566e-06f, -4.494654217e-06f, -4.498794527e-06f, -4.502926492e-06f, -4.507050105e-06f, -4.511165359e-06f,
+-4.515272250e-06f, -4.519370770e-06f, -4.523460914e-06f, -4.527542676e-06f, -4.531616050e-06f, -4.535681030e-06f, -4.539737610e-06f, -4.543785784e-06f, -4.547825547e-06f, -4.551856891e-06f,
+-4.555879813e-06f, -4.559894305e-06f, -4.563900362e-06f, -4.567897977e-06f, -4.571887146e-06f, -4.575867863e-06f, -4.579840121e-06f, -4.583803915e-06f, -4.587759239e-06f, -4.591706087e-06f,
+-4.595644454e-06f, -4.599574334e-06f, -4.603495722e-06f, -4.607408611e-06f, -4.611312996e-06f, -4.615208871e-06f, -4.619096231e-06f, -4.622975071e-06f, -4.626845383e-06f, -4.630707164e-06f,
+-4.634560408e-06f, -4.638405108e-06f, -4.642241259e-06f, -4.646068856e-06f, -4.649887894e-06f, -4.653698367e-06f, -4.657500269e-06f, -4.661293594e-06f, -4.665078339e-06f, -4.668854496e-06f,
+-4.672622062e-06f, -4.676381029e-06f, -4.680131394e-06f, -4.683873150e-06f, -4.687606292e-06f, -4.691330815e-06f, -4.695046714e-06f, -4.698753983e-06f, -4.702452618e-06f, -4.706142612e-06f,
+-4.709823960e-06f, -4.713496658e-06f, -4.717160700e-06f, -4.720816081e-06f, -4.724462796e-06f, -4.728100839e-06f, -4.731730206e-06f, -4.735350891e-06f, -4.738962889e-06f, -4.742566195e-06f,
+-4.746160805e-06f, -4.749746712e-06f, -4.753323912e-06f, -4.756892399e-06f, -4.760452170e-06f, -4.764003218e-06f, -4.767545539e-06f, -4.771079128e-06f, -4.774603980e-06f, -4.778120089e-06f,
+-4.781627452e-06f, -4.785126062e-06f, -4.788615916e-06f, -4.792097008e-06f, -4.795569334e-06f, -4.799032888e-06f, -4.802487665e-06f, -4.805933662e-06f, -4.809370873e-06f, -4.812799293e-06f,
+-4.816218917e-06f, -4.819629741e-06f, -4.823031761e-06f, -4.826424971e-06f, -4.829809366e-06f, -4.833184942e-06f, -4.836551695e-06f, -4.839909619e-06f, -4.843258710e-06f, -4.846598963e-06f,
+-4.849930374e-06f, -4.853252939e-06f, -4.856566651e-06f, -4.859871508e-06f, -4.863167504e-06f, -4.866454635e-06f, -4.869732897e-06f, -4.873002284e-06f, -4.876262793e-06f, -4.879514418e-06f,
+-4.882757156e-06f, -4.885991003e-06f, -4.889215952e-06f, -4.892432001e-06f, -4.895639145e-06f, -4.898837379e-06f, -4.902026700e-06f, -4.905207102e-06f, -4.908378581e-06f, -4.911541134e-06f,
+-4.914694755e-06f, -4.917839442e-06f, -4.920975188e-06f, -4.924101990e-06f, -4.927219845e-06f, -4.930328746e-06f, -4.933428692e-06f, -4.936519676e-06f, -4.939601696e-06f, -4.942674747e-06f,
+-4.945738824e-06f, -4.948793924e-06f, -4.951840043e-06f, -4.954877176e-06f, -4.957905320e-06f, -4.960924470e-06f, -4.963934622e-06f, -4.966935773e-06f, -4.969927918e-06f, -4.972911053e-06f,
+-4.975885175e-06f, -4.978850280e-06f, -4.981806362e-06f, -4.984753420e-06f, -4.987691448e-06f, -4.990620443e-06f, -4.993540401e-06f, -4.996451317e-06f, -4.999353189e-06f, -5.002246013e-06f,
+-5.005129784e-06f, -5.008004499e-06f, -5.010870154e-06f, -5.013726745e-06f, -5.016574269e-06f, -5.019412721e-06f, -5.022242099e-06f, -5.025062398e-06f, -5.027873614e-06f, -5.030675745e-06f,
+-5.033468786e-06f, -5.036252734e-06f, -5.039027585e-06f, -5.041793336e-06f, -5.044549982e-06f, -5.047297522e-06f, -5.050035950e-06f, -5.052765263e-06f, -5.055485458e-06f, -5.058196532e-06f,
+-5.060898480e-06f, -5.063591300e-06f, -5.066274988e-06f, -5.068949540e-06f, -5.071614953e-06f, -5.074271224e-06f, -5.076918350e-06f, -5.079556326e-06f, -5.082185150e-06f, -5.084804818e-06f,
+-5.087415327e-06f, -5.090016674e-06f, -5.092608855e-06f, -5.095191867e-06f, -5.097765707e-06f, -5.100330371e-06f, -5.102885857e-06f, -5.105432161e-06f, -5.107969280e-06f, -5.110497211e-06f,
+-5.113015951e-06f, -5.115525496e-06f, -5.118025843e-06f, -5.120516990e-06f, -5.122998932e-06f, -5.125471668e-06f, -5.127935194e-06f, -5.130389507e-06f, -5.132834604e-06f, -5.135270482e-06f,
+-5.137697138e-06f, -5.140114569e-06f, -5.142522773e-06f, -5.144921745e-06f, -5.147311483e-06f, -5.149691985e-06f, -5.152063247e-06f, -5.154425266e-06f, -5.156778041e-06f, -5.159121567e-06f,
+-5.161455842e-06f, -5.163780863e-06f, -5.166096627e-06f, -5.168403132e-06f, -5.170700375e-06f, -5.172988353e-06f, -5.175267064e-06f, -5.177536504e-06f, -5.179796671e-06f, -5.182047562e-06f,
+-5.184289175e-06f, -5.186521507e-06f, -5.188744555e-06f, -5.190958317e-06f, -5.193162790e-06f, -5.195357972e-06f, -5.197543859e-06f, -5.199720450e-06f, -5.201887742e-06f, -5.204045732e-06f,
+-5.206194418e-06f, -5.208333798e-06f, -5.210463868e-06f, -5.212584627e-06f, -5.214696072e-06f, -5.216798201e-06f, -5.218891011e-06f, -5.220974499e-06f, -5.223048665e-06f, -5.225113504e-06f,
+-5.227169015e-06f, -5.229215196e-06f, -5.231252044e-06f, -5.233279556e-06f, -5.235297732e-06f, -5.237306567e-06f, -5.239306061e-06f, -5.241296211e-06f, -5.243277015e-06f, -5.245248470e-06f,
+-5.247210574e-06f, -5.249163326e-06f, -5.251106723e-06f, -5.253040763e-06f, -5.254965443e-06f, -5.256880763e-06f, -5.258786719e-06f, -5.260683309e-06f, -5.262570533e-06f, -5.264448387e-06f,
+-5.266316870e-06f, -5.268175979e-06f, -5.270025713e-06f, -5.271866069e-06f, -5.273697046e-06f, -5.275518643e-06f, -5.277330856e-06f, -5.279133684e-06f, -5.280927125e-06f, -5.282711178e-06f,
+-5.284485840e-06f, -5.286251109e-06f, -5.288006985e-06f, -5.289753465e-06f, -5.291490546e-06f, -5.293218229e-06f, -5.294936510e-06f, -5.296645388e-06f, -5.298344862e-06f, -5.300034929e-06f,
+-5.301715589e-06f, -5.303386838e-06f, -5.305048677e-06f, -5.306701102e-06f, -5.308344113e-06f, -5.309977708e-06f, -5.311601885e-06f, -5.313216643e-06f, -5.314821980e-06f, -5.316417895e-06f,
+-5.318004386e-06f, -5.319581452e-06f, -5.321149091e-06f, -5.322707302e-06f, -5.324256083e-06f, -5.325795433e-06f, -5.327325350e-06f, -5.328845834e-06f, -5.330356882e-06f, -5.331858494e-06f,
+-5.333350667e-06f, -5.334833402e-06f, -5.336306695e-06f, -5.337770547e-06f, -5.339224956e-06f, -5.340669920e-06f, -5.342105439e-06f, -5.343531510e-06f, -5.344948134e-06f, -5.346355308e-06f,
+-5.347753032e-06f, -5.349141304e-06f, -5.350520124e-06f, -5.351889489e-06f, -5.353249399e-06f, -5.354599854e-06f, -5.355940851e-06f, -5.357272390e-06f, -5.358594469e-06f, -5.359907089e-06f,
+-5.361210247e-06f, -5.362503942e-06f, -5.363788175e-06f, -5.365062943e-06f, -5.366328246e-06f, -5.367584082e-06f, -5.368830452e-06f, -5.370067354e-06f, -5.371294787e-06f, -5.372512750e-06f,
+-5.373721243e-06f, -5.374920264e-06f, -5.376109813e-06f, -5.377289890e-06f, -5.378460492e-06f, -5.379621620e-06f, -5.380773273e-06f, -5.381915450e-06f, -5.383048150e-06f, -5.384171373e-06f,
+-5.385285117e-06f, -5.386389383e-06f, -5.387484170e-06f, -5.388569476e-06f, -5.389645302e-06f, -5.390711647e-06f, -5.391768510e-06f, -5.392815890e-06f, -5.393853788e-06f, -5.394882202e-06f,
+-5.395901133e-06f, -5.396910578e-06f, -5.397910539e-06f, -5.398901015e-06f, -5.399882004e-06f, -5.400853508e-06f, -5.401815524e-06f, -5.402768054e-06f, -5.403711096e-06f, -5.404644650e-06f,
+-5.405568717e-06f, -5.406483294e-06f, -5.407388383e-06f, -5.408283982e-06f, -5.409170093e-06f, -5.410046713e-06f, -5.410913844e-06f, -5.411771484e-06f, -5.412619634e-06f, -5.413458294e-06f,
+-5.414287462e-06f, -5.415107140e-06f, -5.415917327e-06f, -5.416718022e-06f, -5.417509226e-06f, -5.418290939e-06f, -5.419063160e-06f, -5.419825889e-06f, -5.420579127e-06f, -5.421322873e-06f,
+-5.422057128e-06f, -5.422781890e-06f, -5.423497161e-06f, -5.424202941e-06f, -5.424899229e-06f, -5.425586025e-06f, -5.426263329e-06f, -5.426931143e-06f, -5.427589465e-06f, -5.428238296e-06f,
+-5.428877636e-06f, -5.429507485e-06f, -5.430127843e-06f, -5.430738711e-06f, -5.431340089e-06f, -5.431931977e-06f, -5.432514375e-06f, -5.433087283e-06f, -5.433650702e-06f, -5.434204633e-06f,
+-5.434749074e-06f, -5.435284027e-06f, -5.435809493e-06f, -5.436325470e-06f, -5.436831961e-06f, -5.437328965e-06f, -5.437816482e-06f, -5.438294513e-06f, -5.438763059e-06f, -5.439222119e-06f,
+-5.439671695e-06f, -5.440111787e-06f, -5.440542395e-06f, -5.440963520e-06f, -5.441375162e-06f, -5.441777323e-06f, -5.442170001e-06f, -5.442553199e-06f, -5.442926917e-06f, -5.443291155e-06f,
+-5.443645915e-06f, -5.443991195e-06f, -5.444326998e-06f, -5.444653325e-06f, -5.444970174e-06f, -5.445277549e-06f, -5.445575448e-06f, -5.445863874e-06f, -5.446142826e-06f, -5.446412305e-06f,
+-5.446672313e-06f, -5.446922850e-06f, -5.447163917e-06f, -5.447395514e-06f, -5.447617644e-06f, -5.447830305e-06f, -5.448033500e-06f, -5.448227230e-06f, -5.448411495e-06f, -5.448586296e-06f,
+-5.448751634e-06f, -5.448907510e-06f, -5.449053926e-06f, -5.449190881e-06f, -5.449318378e-06f, -5.449436417e-06f, -5.449545000e-06f, -5.449644127e-06f, -5.449733799e-06f, -5.449814018e-06f,
+-5.449884784e-06f, -5.449946100e-06f, -5.449997965e-06f, -5.450040382e-06f, -5.450073351e-06f, -5.450096874e-06f, -5.450110951e-06f, -5.450115585e-06f, -5.450110776e-06f, -5.450096525e-06f,
+-5.450072834e-06f, -5.450039705e-06f, -5.449997138e-06f, -5.449945135e-06f, -5.449883697e-06f, -5.449812825e-06f, -5.449732522e-06f, -5.449642788e-06f, -5.449543624e-06f, -5.449435033e-06f,
+-5.449317016e-06f, -5.449189573e-06f, -5.449052708e-06f, -5.448906420e-06f, -5.448750712e-06f, -5.448585585e-06f, -5.448411041e-06f, -5.448227081e-06f, -5.448033707e-06f, -5.447830920e-06f,
+-5.447618723e-06f, -5.447397116e-06f, -5.447166101e-06f, -5.446925681e-06f, -5.446675856e-06f, -5.446416629e-06f, -5.446148000e-06f, -5.445869972e-06f, -5.445582547e-06f, -5.445285726e-06f,
+-5.444979512e-06f, -5.444663905e-06f, -5.444338907e-06f, -5.444004522e-06f, -5.443660749e-06f, -5.443307592e-06f, -5.442945052e-06f, -5.442573130e-06f, -5.442191830e-06f, -5.441801152e-06f,
+-5.441401099e-06f, -5.440991673e-06f, -5.440572875e-06f, -5.440144707e-06f, -5.439707173e-06f, -5.439260273e-06f, -5.438804009e-06f, -5.438338384e-06f, -5.437863400e-06f, -5.437379059e-06f,
+-5.436885362e-06f, -5.436382313e-06f, -5.435869913e-06f, -5.435348164e-06f, -5.434817068e-06f, -5.434276628e-06f, -5.433726846e-06f, -5.433167723e-06f, -5.432599263e-06f, -5.432021468e-06f,
+-5.431434339e-06f, -5.430837879e-06f, -5.430232090e-06f, -5.429616975e-06f, -5.428992536e-06f, -5.428358775e-06f, -5.427715695e-06f, -5.427063297e-06f, -5.426401585e-06f, -5.425730560e-06f,
+-5.425050226e-06f, -5.424360584e-06f, -5.423661637e-06f, -5.422953388e-06f, -5.422235838e-06f, -5.421508991e-06f, -5.420772849e-06f, -5.420027414e-06f, -5.419272689e-06f, -5.418508676e-06f,
+-5.417735379e-06f, -5.416952799e-06f, -5.416160940e-06f, -5.415359804e-06f, -5.414549393e-06f, -5.413729710e-06f, -5.412900758e-06f, -5.412062539e-06f, -5.411215057e-06f, -5.410358314e-06f,
+-5.409492312e-06f, -5.408617055e-06f, -5.407732545e-06f, -5.406838784e-06f, -5.405935777e-06f, -5.405023525e-06f, -5.404102031e-06f, -5.403171299e-06f, -5.402231330e-06f, -5.401282129e-06f,
+-5.400323697e-06f, -5.399356038e-06f, -5.398379154e-06f, -5.397393049e-06f, -5.396397725e-06f, -5.395393186e-06f, -5.394379434e-06f, -5.393356473e-06f, -5.392324305e-06f, -5.391282933e-06f,
+-5.390232361e-06f, -5.389172592e-06f, -5.388103628e-06f, -5.387025473e-06f, -5.385938129e-06f, -5.384841600e-06f, -5.383735890e-06f, -5.382621000e-06f, -5.381496935e-06f, -5.380363698e-06f,
+-5.379221291e-06f, -5.378069718e-06f, -5.376908982e-06f, -5.375739087e-06f, -5.374560035e-06f, -5.373371830e-06f, -5.372174475e-06f, -5.370967974e-06f, -5.369752330e-06f, -5.368527546e-06f,
+-5.367293625e-06f, -5.366050571e-06f, -5.364798388e-06f, -5.363537078e-06f, -5.362266645e-06f, -5.360987093e-06f, -5.359698424e-06f, -5.358400643e-06f, -5.357093753e-06f, -5.355777757e-06f,
+-5.354452659e-06f, -5.353118463e-06f, -5.351775171e-06f, -5.350422788e-06f, -5.349061316e-06f, -5.347690761e-06f, -5.346311124e-06f, -5.344922410e-06f, -5.343524623e-06f, -5.342117766e-06f,
+-5.340701842e-06f, -5.339276856e-06f, -5.337842811e-06f, -5.336399710e-06f, -5.334947559e-06f, -5.333486359e-06f, -5.332016115e-06f, -5.330536831e-06f, -5.329048511e-06f, -5.327551158e-06f,
+-5.326044776e-06f, -5.324529368e-06f, -5.323004940e-06f, -5.321471494e-06f, -5.319929035e-06f, -5.318377566e-06f, -5.316817091e-06f, -5.315247615e-06f, -5.313669141e-06f, -5.312081672e-06f,
+-5.310485214e-06f, -5.308879770e-06f, -5.307265343e-06f, -5.305641939e-06f, -5.304009560e-06f, -5.302368212e-06f, -5.300717898e-06f, -5.299058622e-06f, -5.297390388e-06f, -5.295713200e-06f,
+-5.294027063e-06f, -5.292331980e-06f, -5.290627956e-06f, -5.288914995e-06f, -5.287193101e-06f, -5.285462278e-06f, -5.283722531e-06f, -5.281973863e-06f, -5.280216279e-06f, -5.278449783e-06f,
+-5.276674379e-06f, -5.274890072e-06f, -5.273096866e-06f, -5.271294765e-06f, -5.269483773e-06f, -5.267663896e-06f, -5.265835136e-06f, -5.263997500e-06f, -5.262150990e-06f, -5.260295611e-06f,
+-5.258431368e-06f, -5.256558266e-06f, -5.254676307e-06f, -5.252785498e-06f, -5.250885843e-06f, -5.248977345e-06f, -5.247060010e-06f, -5.245133842e-06f, -5.243198846e-06f, -5.241255025e-06f,
+-5.239302385e-06f, -5.237340931e-06f, -5.235370666e-06f, -5.233391595e-06f, -5.231403723e-06f, -5.229407056e-06f, -5.227401596e-06f, -5.225387349e-06f, -5.223364320e-06f, -5.221332513e-06f,
+-5.219291933e-06f, -5.217242584e-06f, -5.215184472e-06f, -5.213117602e-06f, -5.211041977e-06f, -5.208957602e-06f, -5.206864484e-06f, -5.204762625e-06f, -5.202652032e-06f, -5.200532708e-06f,
+-5.198404660e-06f, -5.196267891e-06f, -5.194122406e-06f, -5.191968211e-06f, -5.189805310e-06f, -5.187633709e-06f, -5.185453411e-06f, -5.183264423e-06f, -5.181066748e-06f, -5.178860393e-06f,
+-5.176645362e-06f, -5.174421660e-06f, -5.172189291e-06f, -5.169948262e-06f, -5.167698577e-06f, -5.165440241e-06f, -5.163173260e-06f, -5.160897638e-06f, -5.158613380e-06f, -5.156320492e-06f,
+-5.154018979e-06f, -5.151708845e-06f, -5.149390097e-06f, -5.147062738e-06f, -5.144726775e-06f, -5.142382213e-06f, -5.140029057e-06f, -5.137667311e-06f, -5.135296982e-06f, -5.132918075e-06f,
+-5.130530594e-06f, -5.128134545e-06f, -5.125729934e-06f, -5.123316766e-06f, -5.120895046e-06f, -5.118464779e-06f, -5.116025971e-06f, -5.113578627e-06f, -5.111122753e-06f, -5.108658353e-06f,
+-5.106185434e-06f, -5.103704001e-06f, -5.101214059e-06f, -5.098715614e-06f, -5.096208671e-06f, -5.093693236e-06f, -5.091169314e-06f, -5.088636910e-06f, -5.086096031e-06f, -5.083546681e-06f,
+-5.080988867e-06f, -5.078422594e-06f, -5.075847867e-06f, -5.073264693e-06f, -5.070673076e-06f, -5.068073022e-06f, -5.065464537e-06f, -5.062847627e-06f, -5.060222297e-06f, -5.057588553e-06f,
+-5.054946401e-06f, -5.052295846e-06f, -5.049636895e-06f, -5.046969552e-06f, -5.044293823e-06f, -5.041609716e-06f, -5.038917234e-06f, -5.036216384e-06f, -5.033507172e-06f, -5.030789603e-06f,
+-5.028063684e-06f, -5.025329420e-06f, -5.022586817e-06f, -5.019835881e-06f, -5.017076618e-06f, -5.014309034e-06f, -5.011533134e-06f, -5.008748925e-06f, -5.005956412e-06f, -5.003155602e-06f,
+-5.000346501e-06f, -4.997529114e-06f, -4.994703447e-06f, -4.991869507e-06f, -4.989027299e-06f, -4.986176830e-06f, -4.983318106e-06f, -4.980451132e-06f, -4.977575915e-06f, -4.974692460e-06f,
+-4.971800775e-06f, -4.968900864e-06f, -4.965992735e-06f, -4.963076393e-06f, -4.960151845e-06f, -4.957219096e-06f, -4.954278153e-06f, -4.951329022e-06f, -4.948371710e-06f, -4.945406222e-06f,
+-4.942432564e-06f, -4.939450744e-06f, -4.936460767e-06f, -4.933462639e-06f, -4.930456367e-06f, -4.927441957e-06f, -4.924419416e-06f, -4.921388749e-06f, -4.918349964e-06f, -4.915303066e-06f,
+-4.912248062e-06f, -4.909184958e-06f, -4.906113761e-06f, -4.903034477e-06f, -4.899947112e-06f, -4.896851673e-06f, -4.893748167e-06f, -4.890636599e-06f, -4.887516977e-06f, -4.884389306e-06f,
+-4.881253594e-06f, -4.878109846e-06f, -4.874958070e-06f, -4.871798272e-06f, -4.868630459e-06f, -4.865454636e-06f, -4.862270811e-06f, -4.859078990e-06f, -4.855879180e-06f, -4.852671387e-06f,
+-4.849455618e-06f, -4.846231880e-06f, -4.843000180e-06f, -4.839760523e-06f, -4.836512918e-06f, -4.833257369e-06f, -4.829993885e-06f, -4.826722472e-06f, -4.823443136e-06f, -4.820155884e-06f,
+-4.816860724e-06f, -4.813557662e-06f, -4.810246704e-06f, -4.806927858e-06f, -4.803601130e-06f, -4.800266527e-06f, -4.796924056e-06f, -4.793573724e-06f, -4.790215537e-06f, -4.786849503e-06f,
+-4.783475629e-06f, -4.780093921e-06f, -4.776704386e-06f, -4.773307031e-06f, -4.769901864e-06f, -4.766488890e-06f, -4.763068118e-06f, -4.759639554e-06f, -4.756203205e-06f, -4.752759077e-06f,
+-4.749307179e-06f, -4.745847517e-06f, -4.742380098e-06f, -4.738904929e-06f, -4.735422017e-06f, -4.731931370e-06f, -4.728432994e-06f, -4.724926897e-06f, -4.721413085e-06f, -4.717891566e-06f,
+-4.714362347e-06f, -4.710825435e-06f, -4.707280837e-06f, -4.703728561e-06f, -4.700168613e-06f, -4.696601001e-06f, -4.693025732e-06f, -4.689442814e-06f, -4.685852252e-06f, -4.682254056e-06f,
+-4.678648231e-06f, -4.675034786e-06f, -4.671413727e-06f, -4.667785063e-06f, -4.664148799e-06f, -4.660504944e-06f, -4.656853505e-06f, -4.653194489e-06f, -4.649527903e-06f, -4.645853756e-06f,
+-4.642172053e-06f, -4.638482804e-06f, -4.634786014e-06f, -4.631081693e-06f, -4.627369846e-06f, -4.623650481e-06f, -4.619923607e-06f, -4.616189230e-06f, -4.612447357e-06f, -4.608697997e-06f,
+-4.604941157e-06f, -4.601176845e-06f, -4.597405067e-06f, -4.593625831e-06f, -4.589839146e-06f, -4.586045018e-06f, -4.582243456e-06f, -4.578434466e-06f, -4.574618056e-06f, -4.570794235e-06f,
+-4.566963009e-06f, -4.563124386e-06f, -4.559278374e-06f, -4.555424981e-06f, -4.551564213e-06f, -4.547696080e-06f, -4.543820589e-06f, -4.539937746e-06f, -4.536047561e-06f, -4.532150040e-06f,
+-4.528245192e-06f, -4.524333024e-06f, -4.520413545e-06f, -4.516486761e-06f, -4.512552680e-06f, -4.508611311e-06f, -4.504662661e-06f, -4.500706739e-06f, -4.496743551e-06f, -4.492773105e-06f,
+-4.488795411e-06f, -4.484810475e-06f, -4.480818305e-06f, -4.476818909e-06f, -4.472812296e-06f, -4.468798472e-06f, -4.464777447e-06f, -4.460749227e-06f, -4.456713822e-06f, -4.452671238e-06f,
+-4.448621484e-06f, -4.444564568e-06f, -4.440500497e-06f, -4.436429281e-06f, -4.432350926e-06f, -4.428265441e-06f, -4.424172834e-06f, -4.420073113e-06f, -4.415966286e-06f, -4.411852361e-06f,
+-4.407731346e-06f, -4.403603250e-06f, -4.399468080e-06f, -4.395325844e-06f, -4.391176551e-06f, -4.387020209e-06f, -4.382856826e-06f, -4.378686410e-06f, -4.374508969e-06f, -4.370324511e-06f,
+-4.366133046e-06f, -4.361934580e-06f, -4.357729122e-06f, -4.353516681e-06f, -4.349297264e-06f, -4.345070880e-06f, -4.340837537e-06f, -4.336597244e-06f, -4.332350008e-06f, -4.328095838e-06f,
+-4.323834742e-06f, -4.319566729e-06f, -4.315291807e-06f, -4.311009984e-06f, -4.306721269e-06f, -4.302425670e-06f, -4.298123195e-06f, -4.293813853e-06f, -4.289497652e-06f, -4.285174600e-06f,
+-4.280844707e-06f, -4.276507980e-06f, -4.272164427e-06f, -4.267814058e-06f, -4.263456881e-06f, -4.259092904e-06f, -4.254722135e-06f, -4.250344584e-06f, -4.245960258e-06f, -4.241569167e-06f,
+-4.237171318e-06f, -4.232766720e-06f, -4.228355383e-06f, -4.223937313e-06f, -4.219512521e-06f, -4.215081014e-06f, -4.210642801e-06f, -4.206197891e-06f, -4.201746292e-06f, -4.197288013e-06f,
+-4.192823063e-06f, -4.188351449e-06f, -4.183873182e-06f, -4.179388269e-06f, -4.174896719e-06f, -4.170398541e-06f, -4.165893744e-06f, -4.161382335e-06f, -4.156864325e-06f, -4.152339721e-06f,
+-4.147808533e-06f, -4.143270769e-06f, -4.138726438e-06f, -4.134175548e-06f, -4.129618109e-06f, -4.125054129e-06f, -4.120483617e-06f, -4.115906582e-06f, -4.111323032e-06f, -4.106732977e-06f,
+-4.102136425e-06f, -4.097533385e-06f, -4.092923867e-06f, -4.088307878e-06f, -4.083685428e-06f, -4.079056525e-06f, -4.074421179e-06f, -4.069779398e-06f, -4.065131192e-06f, -4.060476568e-06f,
+-4.055815537e-06f, -4.051148107e-06f, -4.046474288e-06f, -4.041794087e-06f, -4.037107514e-06f, -4.032414578e-06f, -4.027715288e-06f, -4.023009653e-06f, -4.018297683e-06f, -4.013579385e-06f,
+-4.008854769e-06f, -4.004123844e-06f, -3.999386620e-06f, -3.994643104e-06f, -3.989893307e-06f, -3.985137238e-06f, -3.980374904e-06f, -3.975606317e-06f, -3.970831484e-06f, -3.966050414e-06f,
+-3.961263118e-06f, -3.956469604e-06f, -3.951669881e-06f, -3.946863958e-06f, -3.942051845e-06f, -3.937233550e-06f, -3.932409083e-06f, -3.927578454e-06f, -3.922741671e-06f, -3.917898743e-06f,
+-3.913049680e-06f, -3.908194491e-06f, -3.903333185e-06f, -3.898465771e-06f, -3.893592260e-06f, -3.888712659e-06f, -3.883826978e-06f, -3.878935228e-06f, -3.874037416e-06f, -3.869133552e-06f,
+-3.864223645e-06f, -3.859307706e-06f, -3.854385742e-06f, -3.849457764e-06f, -3.844523781e-06f, -3.839583802e-06f, -3.834637837e-06f, -3.829685895e-06f, -3.824727985e-06f, -3.819764117e-06f,
+-3.814794300e-06f, -3.809818543e-06f, -3.804836857e-06f, -3.799849250e-06f, -3.794855731e-06f, -3.789856312e-06f, -3.784851000e-06f, -3.779839805e-06f, -3.774822737e-06f, -3.769799805e-06f,
+-3.764771019e-06f, -3.759736389e-06f, -3.754695923e-06f, -3.749649631e-06f, -3.744597523e-06f, -3.739539609e-06f, -3.734475897e-06f, -3.729406398e-06f, -3.724331122e-06f, -3.719250076e-06f,
+-3.714163272e-06f, -3.709070719e-06f, -3.703972426e-06f, -3.698868403e-06f, -3.693758660e-06f, -3.688643206e-06f, -3.683522051e-06f, -3.678395205e-06f, -3.673262677e-06f, -3.668124477e-06f,
+-3.662980614e-06f, -3.657831098e-06f, -3.652675940e-06f, -3.647515148e-06f, -3.642348733e-06f, -3.637176703e-06f, -3.631999069e-06f, -3.626815841e-06f, -3.621627028e-06f, -3.616432640e-06f,
+-3.611232687e-06f, -3.606027179e-06f, -3.600816124e-06f, -3.595599534e-06f, -3.590377418e-06f, -3.585149785e-06f, -3.579916646e-06f, -3.574678010e-06f, -3.569433887e-06f, -3.564184287e-06f,
+-3.558929220e-06f, -3.553668696e-06f, -3.548402724e-06f, -3.543131314e-06f, -3.537854477e-06f, -3.532572222e-06f, -3.527284559e-06f, -3.521991497e-06f, -3.516693048e-06f, -3.511389220e-06f,
+-3.506080024e-06f, -3.500765469e-06f, -3.495445566e-06f, -3.490120324e-06f, -3.484789754e-06f, -3.479453865e-06f, -3.474112668e-06f, -3.468766171e-06f, -3.463414387e-06f, -3.458057323e-06f,
+-3.452694990e-06f, -3.447327399e-06f, -3.441954559e-06f, -3.436576481e-06f, -3.431193174e-06f, -3.425804648e-06f, -3.420410914e-06f, -3.415011981e-06f, -3.409607860e-06f, -3.404198560e-06f,
+-3.398784092e-06f, -3.393364466e-06f, -3.387939692e-06f, -3.382509780e-06f, -3.377074739e-06f, -3.371634581e-06f, -3.366189316e-06f, -3.360738953e-06f, -3.355283502e-06f, -3.349822974e-06f,
+-3.344357379e-06f, -3.338886727e-06f, -3.333411028e-06f, -3.327930293e-06f, -3.322444531e-06f, -3.316953753e-06f, -3.311457969e-06f, -3.305957189e-06f, -3.300451424e-06f, -3.294940683e-06f,
+-3.289424977e-06f, -3.283904316e-06f, -3.278378710e-06f, -3.272848170e-06f, -3.267312705e-06f, -3.261772327e-06f, -3.256227044e-06f, -3.250676869e-06f, -3.245121810e-06f, -3.239561879e-06f,
+-3.233997085e-06f, -3.228427439e-06f, -3.222852950e-06f, -3.217273631e-06f, -3.211689490e-06f, -3.206100538e-06f, -3.200506785e-06f, -3.194908242e-06f, -3.189304919e-06f, -3.183696827e-06f,
+-3.178083976e-06f, -3.172466375e-06f, -3.166844037e-06f, -3.161216970e-06f, -3.155585185e-06f, -3.149948694e-06f, -3.144307505e-06f, -3.138661630e-06f, -3.133011079e-06f, -3.127355863e-06f,
+-3.121695991e-06f, -3.116031475e-06f, -3.110362324e-06f, -3.104688550e-06f, -3.099010162e-06f, -3.093327172e-06f, -3.087639589e-06f, -3.081947424e-06f, -3.076250687e-06f, -3.070549390e-06f,
+-3.064843543e-06f, -3.059133155e-06f, -3.053418238e-06f, -3.047698802e-06f, -3.041974858e-06f, -3.036246416e-06f, -3.030513486e-06f, -3.024776080e-06f, -3.019034208e-06f, -3.013287880e-06f,
+-3.007537107e-06f, -3.001781899e-06f, -2.996022268e-06f, -2.990258223e-06f, -2.984489775e-06f, -2.978716935e-06f, -2.972939714e-06f, -2.967158122e-06f, -2.961372169e-06f, -2.955581867e-06f,
+-2.949787225e-06f, -2.943988256e-06f, -2.938184968e-06f, -2.932377373e-06f, -2.926565482e-06f, -2.920749304e-06f, -2.914928852e-06f, -2.909104135e-06f, -2.903275164e-06f, -2.897441950e-06f,
+-2.891604503e-06f, -2.885762835e-06f, -2.879916956e-06f, -2.874066876e-06f, -2.868212606e-06f, -2.862354158e-06f, -2.856491541e-06f, -2.850624766e-06f, -2.844753845e-06f, -2.838878788e-06f,
+-2.832999606e-06f, -2.827116309e-06f, -2.821228908e-06f, -2.815337414e-06f, -2.809441838e-06f, -2.803542190e-06f, -2.797638482e-06f, -2.791730723e-06f, -2.785818926e-06f, -2.779903100e-06f,
+-2.773983257e-06f, -2.768059407e-06f, -2.762131561e-06f, -2.756199729e-06f, -2.750263924e-06f, -2.744324155e-06f, -2.738380433e-06f, -2.732432770e-06f, -2.726481176e-06f, -2.720525661e-06f,
+-2.714566237e-06f, -2.708602915e-06f, -2.702635706e-06f, -2.696664619e-06f, -2.690689667e-06f, -2.684710860e-06f, -2.678728210e-06f, -2.672741725e-06f, -2.666751419e-06f, -2.660757302e-06f,
+-2.654759384e-06f, -2.648757676e-06f, -2.642752190e-06f, -2.636742936e-06f, -2.630729926e-06f, -2.624713170e-06f, -2.618692678e-06f, -2.612668463e-06f, -2.606640535e-06f, -2.600608905e-06f,
+-2.594573584e-06f, -2.588534583e-06f, -2.582491913e-06f, -2.576445584e-06f, -2.570395609e-06f, -2.564341997e-06f, -2.558284760e-06f, -2.552223909e-06f, -2.546159454e-06f, -2.540091408e-06f,
+-2.534019780e-06f, -2.527944582e-06f, -2.521865824e-06f, -2.515783519e-06f, -2.509697676e-06f, -2.503608307e-06f, -2.497515424e-06f, -2.491419036e-06f, -2.485319155e-06f, -2.479215792e-06f,
+-2.473108959e-06f, -2.466998665e-06f, -2.460884923e-06f, -2.454767743e-06f, -2.448647136e-06f, -2.442523114e-06f, -2.436395687e-06f, -2.430264867e-06f, -2.424130665e-06f, -2.417993091e-06f,
+-2.411852157e-06f, -2.405707874e-06f, -2.399560254e-06f, -2.393409306e-06f, -2.387255043e-06f, -2.381097475e-06f, -2.374936614e-06f, -2.368772470e-06f, -2.362605055e-06f, -2.356434380e-06f,
+-2.350260457e-06f, -2.344083295e-06f, -2.337902907e-06f, -2.331719303e-06f, -2.325532495e-06f, -2.319342494e-06f, -2.313149311e-06f, -2.306952957e-06f, -2.300753443e-06f, -2.294550781e-06f,
+-2.288344982e-06f, -2.282136056e-06f, -2.275924015e-06f, -2.269708871e-06f, -2.263490634e-06f, -2.257269316e-06f, -2.251044928e-06f, -2.244817481e-06f, -2.238586986e-06f, -2.232353454e-06f,
+-2.226116897e-06f, -2.219877326e-06f, -2.213634753e-06f, -2.207389187e-06f, -2.201140642e-06f, -2.194889127e-06f, -2.188634654e-06f, -2.182377234e-06f, -2.176116880e-06f, -2.169853601e-06f,
+-2.163587409e-06f, -2.157318315e-06f, -2.151046331e-06f, -2.144771468e-06f, -2.138493737e-06f, -2.132213149e-06f, -2.125929716e-06f, -2.119643449e-06f, -2.113354360e-06f, -2.107062458e-06f,
+-2.100767757e-06f, -2.094470267e-06f, -2.088169999e-06f, -2.081866965e-06f, -2.075561176e-06f, -2.069252643e-06f, -2.062941378e-06f, -2.056627392e-06f, -2.050310696e-06f, -2.043991302e-06f,
+-2.037669220e-06f, -2.031344463e-06f, -2.025017041e-06f, -2.018686966e-06f, -2.012354250e-06f, -2.006018903e-06f, -1.999680936e-06f, -1.993340362e-06f, -1.986997192e-06f, -1.980651437e-06f,
+-1.974303107e-06f, -1.967952216e-06f, -1.961598773e-06f, -1.955242791e-06f, -1.948884281e-06f, -1.942523253e-06f, -1.936159720e-06f, -1.929793693e-06f, -1.923425183e-06f, -1.917054202e-06f,
+-1.910680760e-06f, -1.904304870e-06f, -1.897926543e-06f, -1.891545790e-06f, -1.885162622e-06f, -1.878777051e-06f, -1.872389088e-06f, -1.865998746e-06f, -1.859606034e-06f, -1.853210965e-06f,
+-1.846813549e-06f, -1.840413799e-06f, -1.834011726e-06f, -1.827607341e-06f, -1.821200655e-06f, -1.814791680e-06f, -1.808380428e-06f, -1.801966910e-06f, -1.795551137e-06f, -1.789133120e-06f,
+-1.782712872e-06f, -1.776290403e-06f, -1.769865725e-06f, -1.763438849e-06f, -1.757009788e-06f, -1.750578552e-06f, -1.744145152e-06f, -1.737709601e-06f, -1.731271909e-06f, -1.724832088e-06f,
+-1.718390150e-06f, -1.711946106e-06f, -1.705499967e-06f, -1.699051746e-06f, -1.692601452e-06f, -1.686149099e-06f, -1.679694697e-06f, -1.673238257e-06f, -1.666779792e-06f, -1.660319313e-06f,
+-1.653856830e-06f, -1.647392357e-06f, -1.640925903e-06f, -1.634457481e-06f, -1.627987103e-06f, -1.621514779e-06f, -1.615040521e-06f, -1.608564340e-06f, -1.602086249e-06f, -1.595606258e-06f,
+-1.589124379e-06f, -1.582640624e-06f, -1.576155003e-06f, -1.569667530e-06f, -1.563178214e-06f, -1.556687068e-06f, -1.550194102e-06f, -1.543699330e-06f, -1.537202761e-06f, -1.530704408e-06f,
+-1.524204282e-06f, -1.517702394e-06f, -1.511198757e-06f, -1.504693381e-06f, -1.498186278e-06f, -1.491677460e-06f, -1.485166938e-06f, -1.478654724e-06f, -1.472140828e-06f, -1.465625264e-06f,
+-1.459108042e-06f, -1.452589173e-06f, -1.446068670e-06f, -1.439546543e-06f, -1.433022805e-06f, -1.426497467e-06f, -1.419970540e-06f, -1.413442036e-06f, -1.406911966e-06f, -1.400380342e-06f,
+-1.393847176e-06f, -1.387312479e-06f, -1.380776263e-06f, -1.374238538e-06f, -1.367699318e-06f, -1.361158612e-06f, -1.354616433e-06f, -1.348072793e-06f, -1.341527702e-06f, -1.334981173e-06f,
+-1.328433217e-06f, -1.321883845e-06f, -1.315333069e-06f, -1.308780901e-06f, -1.302227351e-06f, -1.295672433e-06f, -1.289116156e-06f, -1.282558534e-06f, -1.275999577e-06f, -1.269439296e-06f,
+-1.262877704e-06f, -1.256314812e-06f, -1.249750632e-06f, -1.243185174e-06f, -1.236618452e-06f, -1.230050475e-06f, -1.223481256e-06f, -1.216910807e-06f, -1.210339138e-06f, -1.203766262e-06f,
+-1.197192190e-06f, -1.190616933e-06f, -1.184040504e-06f, -1.177462913e-06f, -1.170884173e-06f, -1.164304294e-06f, -1.157723288e-06f, -1.151141168e-06f, -1.144557944e-06f, -1.137973628e-06f,
+-1.131388232e-06f, -1.124801767e-06f, -1.118214244e-06f, -1.111625676e-06f, -1.105036074e-06f, -1.098445449e-06f, -1.091853813e-06f, -1.085261178e-06f, -1.078667555e-06f, -1.072072956e-06f,
+-1.065477392e-06f, -1.058880874e-06f, -1.052283416e-06f, -1.045685027e-06f, -1.039085719e-06f, -1.032485505e-06f, -1.025884396e-06f, -1.019282402e-06f, -1.012679537e-06f, -1.006075811e-06f,
+-9.994712354e-07f, -9.928658227e-07f, -9.862595841e-07f, -9.796525311e-07f, -9.730446753e-07f, -9.664360283e-07f, -9.598266016e-07f, -9.532164068e-07f, -9.466054554e-07f, -9.399937591e-07f,
+-9.333813294e-07f, -9.267681779e-07f, -9.201543161e-07f, -9.135397555e-07f, -9.069245078e-07f, -9.003085845e-07f, -8.936919972e-07f, -8.870747575e-07f, -8.804568768e-07f, -8.738383668e-07f,
+-8.672192390e-07f, -8.605995050e-07f, -8.539791763e-07f, -8.473582645e-07f, -8.407367812e-07f, -8.341147379e-07f, -8.274921462e-07f, -8.208690176e-07f, -8.142453637e-07f, -8.076211961e-07f,
+-8.009965262e-07f, -7.943713657e-07f, -7.877457261e-07f, -7.811196190e-07f, -7.744930559e-07f, -7.678660483e-07f, -7.612386078e-07f, -7.546107461e-07f, -7.479824745e-07f, -7.413538047e-07f,
+-7.347247482e-07f, -7.280953165e-07f, -7.214655213e-07f, -7.148353740e-07f, -7.082048861e-07f, -7.015740694e-07f, -6.949429351e-07f, -6.883114950e-07f, -6.816797606e-07f, -6.750477433e-07f,
+-6.684154548e-07f, -6.617829065e-07f, -6.551501100e-07f, -6.485170769e-07f, -6.418838186e-07f, -6.352503467e-07f, -6.286166728e-07f, -6.219828083e-07f, -6.153487648e-07f, -6.087145538e-07f,
+-6.020801868e-07f, -5.954456755e-07f, -5.888110311e-07f, -5.821762654e-07f, -5.755413899e-07f, -5.689064160e-07f, -5.622713552e-07f, -5.556362191e-07f, -5.490010192e-07f, -5.423657670e-07f,
+-5.357304741e-07f, -5.290951519e-07f, -5.224598119e-07f, -5.158244656e-07f, -5.091891246e-07f, -5.025538004e-07f, -4.959185044e-07f, -4.892832482e-07f, -4.826480433e-07f, -4.760129011e-07f,
+-4.693778331e-07f, -4.627428509e-07f, -4.561079660e-07f, -4.494731898e-07f, -4.428385337e-07f, -4.362040095e-07f, -4.295696283e-07f, -4.229354019e-07f, -4.163013417e-07f, -4.096674590e-07f,
+-4.030337655e-07f, -3.964002726e-07f, -3.897669918e-07f, -3.831339345e-07f, -3.765011122e-07f, -3.698685364e-07f, -3.632362185e-07f, -3.566041700e-07f, -3.499724025e-07f, -3.433409272e-07f,
+-3.367097558e-07f, -3.300788996e-07f, -3.234483701e-07f, -3.168181788e-07f, -3.101883370e-07f, -3.035588564e-07f, -2.969297482e-07f, -2.903010240e-07f, -2.836726951e-07f, -2.770447731e-07f,
+-2.704172694e-07f, -2.637901953e-07f, -2.571635624e-07f, -2.505373821e-07f, -2.439116657e-07f, -2.372864247e-07f, -2.306616706e-07f, -2.240374147e-07f, -2.174136685e-07f, -2.107904434e-07f,
+-2.041677509e-07f, -1.975456022e-07f, -1.909240088e-07f, -1.843029822e-07f, -1.776825337e-07f, -1.710626747e-07f, -1.644434167e-07f, -1.578247710e-07f, -1.512067490e-07f, -1.445893621e-07f,
+-1.379726218e-07f, -1.313565393e-07f, -1.247411261e-07f, -1.181263935e-07f, -1.115123529e-07f, -1.048990158e-07f, -9.828639337e-08f, -9.167449712e-08f, -8.506333837e-08f, -7.845292849e-08f,
+-7.184327883e-08f, -6.523440075e-08f, -5.862630562e-08f, -5.201900477e-08f, -4.541250956e-08f, -3.880683134e-08f, -3.220198144e-08f, -2.559797121e-08f, -1.899481199e-08f, -1.239251510e-08f,
+-5.791091877e-09f, 8.094463469e-10f, 7.409088250e-09f, 1.400782251e-08f, 2.060563781e-08f, 2.720252283e-08f, 3.379846627e-08f, 4.039345681e-08f, 4.698748314e-08f, 5.358053397e-08f,
+6.017259799e-08f, 6.676366391e-08f, 7.335372044e-08f, 7.994275628e-08f, 8.653076015e-08f, 9.311772077e-08f, 9.970362685e-08f, 1.062884671e-07f, 1.128722303e-07f, 1.194549052e-07f,
+1.260364804e-07f, 1.326169447e-07f, 1.391962869e-07f, 1.457744957e-07f, 1.523515599e-07f, 1.589274681e-07f, 1.655022093e-07f, 1.720757720e-07f, 1.786481451e-07f, 1.852193174e-07f,
+1.917892775e-07f, 1.983580144e-07f, 2.049255167e-07f, 2.114917733e-07f, 2.180567728e-07f, 2.246205042e-07f, 2.311829562e-07f, 2.377441176e-07f, 2.443039772e-07f, 2.508625238e-07f,
+2.574197462e-07f, 2.639756332e-07f, 2.705301736e-07f, 2.770833563e-07f, 2.836351701e-07f, 2.901856037e-07f, 2.967346461e-07f, 3.032822860e-07f, 3.098285124e-07f, 3.163733139e-07f,
+3.229166796e-07f, 3.294585981e-07f, 3.359990585e-07f, 3.425380495e-07f, 3.490755600e-07f, 3.556115788e-07f, 3.621460949e-07f, 3.686790971e-07f, 3.752105743e-07f, 3.817405154e-07f,
+3.882689092e-07f, 3.947957447e-07f, 4.013210107e-07f, 4.078446961e-07f, 4.143667899e-07f, 4.208872809e-07f, 4.274061581e-07f, 4.339234103e-07f, 4.404390266e-07f, 4.469529958e-07f,
+4.534653068e-07f, 4.599759486e-07f, 4.664849101e-07f, 4.729921803e-07f, 4.794977481e-07f, 4.860016025e-07f, 4.925037324e-07f, 4.990041267e-07f, 5.055027745e-07f, 5.119996647e-07f,
+5.184947863e-07f, 5.249881282e-07f, 5.314796795e-07f, 5.379694291e-07f, 5.444573660e-07f, 5.509434792e-07f, 5.574277578e-07f, 5.639101907e-07f, 5.703907669e-07f, 5.768694754e-07f,
+5.833463054e-07f, 5.898212457e-07f, 5.962942854e-07f, 6.027654136e-07f, 6.092346193e-07f, 6.157018916e-07f, 6.221672194e-07f, 6.286305919e-07f, 6.350919980e-07f, 6.415514270e-07f,
+6.480088677e-07f, 6.544643094e-07f, 6.609177410e-07f, 6.673691518e-07f, 6.738185306e-07f, 6.802658668e-07f, 6.867111492e-07f, 6.931543671e-07f, 6.995955096e-07f, 7.060345657e-07f,
+7.124715247e-07f, 7.189063755e-07f, 7.253391074e-07f, 7.317697094e-07f, 7.381981708e-07f, 7.446244806e-07f, 7.510486280e-07f, 7.574706022e-07f, 7.638903923e-07f, 7.703079875e-07f,
+7.767233770e-07f, 7.831365498e-07f, 7.895474953e-07f, 7.959562026e-07f, 8.023626609e-07f, 8.087668593e-07f, 8.151687872e-07f, 8.215684336e-07f, 8.279657879e-07f, 8.343608392e-07f,
+8.407535767e-07f, 8.471439897e-07f, 8.535320675e-07f, 8.599177992e-07f, 8.663011741e-07f, 8.726821814e-07f, 8.790608105e-07f, 8.854370505e-07f, 8.918108908e-07f, 8.981823206e-07f,
+9.045513292e-07f, 9.109179059e-07f, 9.172820400e-07f, 9.236437207e-07f, 9.300029374e-07f, 9.363596794e-07f, 9.427139360e-07f, 9.490656964e-07f, 9.554149502e-07f, 9.617616865e-07f,
+9.681058947e-07f, 9.744475641e-07f, 9.807866842e-07f, 9.871232442e-07f, 9.934572335e-07f, 9.997886415e-07f, 1.006117458e-06f, 1.012443671e-06f, 1.018767271e-06f, 1.025088248e-06f,
+1.031406590e-06f, 1.037722287e-06f, 1.044035329e-06f, 1.050345704e-06f, 1.056653403e-06f, 1.062958414e-06f, 1.069260727e-06f, 1.075560332e-06f, 1.081857218e-06f, 1.088151374e-06f,
+1.094442791e-06f, 1.100731456e-06f, 1.107017361e-06f, 1.113300493e-06f, 1.119580844e-06f, 1.125858402e-06f, 1.132133156e-06f, 1.138405097e-06f, 1.144674214e-06f, 1.150940496e-06f,
+1.157203932e-06f, 1.163464513e-06f, 1.169722228e-06f, 1.175977066e-06f, 1.182229018e-06f, 1.188478071e-06f, 1.194724217e-06f, 1.200967445e-06f, 1.207207743e-06f, 1.213445103e-06f,
+1.219679513e-06f, 1.225910962e-06f, 1.232139442e-06f, 1.238364940e-06f, 1.244587447e-06f, 1.250806953e-06f, 1.257023446e-06f, 1.263236917e-06f, 1.269447356e-06f, 1.275654751e-06f,
+1.281859093e-06f, 1.288060371e-06f, 1.294258575e-06f, 1.300453695e-06f, 1.306645720e-06f, 1.312834639e-06f, 1.319020444e-06f, 1.325203122e-06f, 1.331382665e-06f, 1.337559061e-06f,
+1.343732301e-06f, 1.349902374e-06f, 1.356069270e-06f, 1.362232978e-06f, 1.368393489e-06f, 1.374550792e-06f, 1.380704877e-06f, 1.386855733e-06f, 1.393003351e-06f, 1.399147720e-06f,
+1.405288830e-06f, 1.411426671e-06f, 1.417561232e-06f, 1.423692504e-06f, 1.429820476e-06f, 1.435945138e-06f, 1.442066480e-06f, 1.448184492e-06f, 1.454299163e-06f, 1.460410484e-06f,
+1.466518444e-06f, 1.472623033e-06f, 1.478724241e-06f, 1.484822058e-06f, 1.490916473e-06f, 1.497007477e-06f, 1.503095060e-06f, 1.509179212e-06f, 1.515259921e-06f, 1.521337179e-06f,
+1.527410975e-06f, 1.533481300e-06f, 1.539548142e-06f, 1.545611493e-06f, 1.551671342e-06f, 1.557727678e-06f, 1.563780493e-06f, 1.569829776e-06f, 1.575875516e-06f, 1.581917705e-06f,
+1.587956331e-06f, 1.593991386e-06f, 1.600022858e-06f, 1.606050739e-06f, 1.612075017e-06f, 1.618095684e-06f, 1.624112729e-06f, 1.630126142e-06f, 1.636135913e-06f, 1.642142033e-06f,
+1.648144491e-06f, 1.654143277e-06f, 1.660138383e-06f, 1.666129797e-06f, 1.672117509e-06f, 1.678101511e-06f, 1.684081792e-06f, 1.690058342e-06f, 1.696031152e-06f, 1.702000211e-06f,
+1.707965509e-06f, 1.713927038e-06f, 1.719884786e-06f, 1.725838745e-06f, 1.731788904e-06f, 1.737735254e-06f, 1.743677785e-06f, 1.749616486e-06f, 1.755551349e-06f, 1.761482364e-06f,
+1.767409520e-06f, 1.773332808e-06f, 1.779252218e-06f, 1.785167741e-06f, 1.791079366e-06f, 1.796987085e-06f, 1.802890886e-06f, 1.808790762e-06f, 1.814686701e-06f, 1.820578695e-06f,
+1.826466733e-06f, 1.832350806e-06f, 1.838230904e-06f, 1.844107018e-06f, 1.849979138e-06f, 1.855847254e-06f, 1.861711356e-06f, 1.867571436e-06f, 1.873427483e-06f, 1.879279488e-06f,
+1.885127441e-06f, 1.890971332e-06f, 1.896811153e-06f, 1.902646893e-06f, 1.908478543e-06f, 1.914306094e-06f, 1.920129535e-06f, 1.925948857e-06f, 1.931764051e-06f, 1.937575108e-06f,
+1.943382017e-06f, 1.949184769e-06f, 1.954983355e-06f, 1.960777765e-06f, 1.966567990e-06f, 1.972354020e-06f, 1.978135846e-06f, 1.983913458e-06f, 1.989686847e-06f, 1.995456003e-06f,
+2.001220918e-06f, 2.006981581e-06f, 2.012737983e-06f, 2.018490115e-06f, 2.024237968e-06f, 2.029981531e-06f, 2.035720797e-06f, 2.041455754e-06f, 2.047186394e-06f, 2.052912708e-06f,
+2.058634686e-06f, 2.064352319e-06f, 2.070065598e-06f, 2.075774513e-06f, 2.081479055e-06f, 2.087179214e-06f, 2.092874982e-06f, 2.098566349e-06f, 2.104253305e-06f, 2.109935842e-06f,
+2.115613951e-06f, 2.121287621e-06f, 2.126956845e-06f, 2.132621612e-06f, 2.138281913e-06f, 2.143937740e-06f, 2.149589082e-06f, 2.155235931e-06f, 2.160878278e-06f, 2.166516114e-06f,
+2.172149428e-06f, 2.177778213e-06f, 2.183402459e-06f, 2.189022156e-06f, 2.194637296e-06f, 2.200247870e-06f, 2.205853868e-06f, 2.211455282e-06f, 2.217052102e-06f, 2.222644319e-06f,
+2.228231925e-06f, 2.233814909e-06f, 2.239393264e-06f, 2.244966979e-06f, 2.250536047e-06f, 2.256100457e-06f, 2.261660201e-06f, 2.267215270e-06f, 2.272765656e-06f, 2.278311348e-06f,
+2.283852338e-06f, 2.289388617e-06f, 2.294920176e-06f, 2.300447006e-06f, 2.305969098e-06f, 2.311486443e-06f, 2.316999033e-06f, 2.322506858e-06f, 2.328009910e-06f, 2.333508179e-06f,
+2.339001657e-06f, 2.344490335e-06f, 2.349974203e-06f, 2.355453254e-06f, 2.360927478e-06f, 2.366396866e-06f, 2.371861410e-06f, 2.377321101e-06f, 2.382775930e-06f, 2.388225888e-06f,
+2.393670966e-06f, 2.399111156e-06f, 2.404546449e-06f, 2.409976836e-06f, 2.415402308e-06f, 2.420822857e-06f, 2.426238474e-06f, 2.431649150e-06f, 2.437054876e-06f, 2.442455644e-06f,
+2.447851445e-06f, 2.453242271e-06f, 2.458628112e-06f, 2.464008960e-06f, 2.469384807e-06f, 2.474755643e-06f, 2.480121460e-06f, 2.485482250e-06f, 2.490838004e-06f, 2.496188713e-06f,
+2.501534369e-06f, 2.506874963e-06f, 2.512210487e-06f, 2.517540931e-06f, 2.522866288e-06f, 2.528186549e-06f, 2.533501705e-06f, 2.538811748e-06f, 2.544116669e-06f, 2.549416460e-06f,
+2.554711113e-06f, 2.560000618e-06f, 2.565284968e-06f, 2.570564153e-06f, 2.575838166e-06f, 2.581106998e-06f, 2.586370641e-06f, 2.591629086e-06f, 2.596882324e-06f, 2.602130348e-06f,
+2.607373149e-06f, 2.612610718e-06f, 2.617843048e-06f, 2.623070130e-06f, 2.628291955e-06f, 2.633508515e-06f, 2.638719802e-06f, 2.643925808e-06f, 2.649126523e-06f, 2.654321941e-06f,
+2.659512052e-06f, 2.664696849e-06f, 2.669876323e-06f, 2.675050466e-06f, 2.680219269e-06f, 2.685382724e-06f, 2.690540824e-06f, 2.695693560e-06f, 2.700840923e-06f, 2.705982906e-06f,
+2.711119500e-06f, 2.716250697e-06f, 2.721376489e-06f, 2.726496869e-06f, 2.731611826e-06f, 2.736721355e-06f, 2.741825446e-06f, 2.746924091e-06f, 2.752017282e-06f, 2.757105012e-06f,
+2.762187271e-06f, 2.767264053e-06f, 2.772335348e-06f, 2.777401150e-06f, 2.782461449e-06f, 2.787516238e-06f, 2.792565509e-06f, 2.797609254e-06f, 2.802647465e-06f, 2.807680133e-06f,
+2.812707251e-06f, 2.817728812e-06f, 2.822744806e-06f, 2.827755226e-06f, 2.832760064e-06f, 2.837759313e-06f, 2.842752964e-06f, 2.847741009e-06f, 2.852723440e-06f, 2.857700250e-06f,
+2.862671431e-06f, 2.867636975e-06f, 2.872596874e-06f, 2.877551120e-06f, 2.882499705e-06f, 2.887442623e-06f, 2.892379863e-06f, 2.897311420e-06f, 2.902237285e-06f, 2.907157451e-06f,
+2.912071909e-06f, 2.916980652e-06f, 2.921883672e-06f, 2.926780962e-06f, 2.931672514e-06f, 2.936558320e-06f, 2.941438372e-06f, 2.946312663e-06f, 2.951181185e-06f, 2.956043930e-06f,
+2.960900891e-06f, 2.965752060e-06f, 2.970597430e-06f, 2.975436992e-06f, 2.980270740e-06f, 2.985098666e-06f, 2.989920761e-06f, 2.994737020e-06f, 2.999547433e-06f, 3.004351993e-06f,
+3.009150694e-06f, 3.013943527e-06f, 3.018730485e-06f, 3.023511560e-06f, 3.028286745e-06f, 3.033056032e-06f, 3.037819415e-06f, 3.042576885e-06f, 3.047328435e-06f, 3.052074057e-06f,
+3.056813745e-06f, 3.061547490e-06f, 3.066275286e-06f, 3.070997125e-06f, 3.075713000e-06f, 3.080422902e-06f, 3.085126826e-06f, 3.089824763e-06f, 3.094516707e-06f, 3.099202649e-06f,
+3.103882583e-06f, 3.108556501e-06f, 3.113224397e-06f, 3.117886262e-06f, 3.122542089e-06f, 3.127191872e-06f, 3.131835603e-06f, 3.136473274e-06f, 3.141104879e-06f, 3.145730411e-06f,
+3.150349861e-06f, 3.154963224e-06f, 3.159570491e-06f, 3.164171656e-06f, 3.168766712e-06f, 3.173355650e-06f, 3.177938466e-06f, 3.182515150e-06f, 3.187085696e-06f, 3.191650097e-06f,
+3.196208346e-06f, 3.200760436e-06f, 3.205306359e-06f, 3.209846110e-06f, 3.214379680e-06f, 3.218907062e-06f, 3.223428250e-06f, 3.227943237e-06f, 3.232452016e-06f, 3.236954579e-06f,
+3.241450920e-06f, 3.245941032e-06f, 3.250424907e-06f, 3.254902540e-06f, 3.259373922e-06f, 3.263839048e-06f, 3.268297909e-06f, 3.272750501e-06f, 3.277196814e-06f, 3.281636843e-06f,
+3.286070581e-06f, 3.290498021e-06f, 3.294919156e-06f, 3.299333980e-06f, 3.303742484e-06f, 3.308144664e-06f, 3.312540512e-06f, 3.316930020e-06f, 3.321313184e-06f, 3.325689995e-06f,
+3.330060447e-06f, 3.334424533e-06f, 3.338782247e-06f, 3.343133582e-06f, 3.347478530e-06f, 3.351817087e-06f, 3.356149245e-06f, 3.360474996e-06f, 3.364794336e-06f, 3.369107256e-06f,
+3.373413751e-06f, 3.377713814e-06f, 3.382007437e-06f, 3.386294616e-06f, 3.390575343e-06f, 3.394849611e-06f, 3.399117414e-06f, 3.403378746e-06f, 3.407633600e-06f, 3.411881970e-06f,
+3.416123848e-06f, 3.420359229e-06f, 3.424588107e-06f, 3.428810474e-06f, 3.433026324e-06f, 3.437235651e-06f, 3.441438448e-06f, 3.445634710e-06f, 3.449824429e-06f, 3.454007599e-06f,
+3.458184214e-06f, 3.462354268e-06f, 3.466517754e-06f, 3.470674666e-06f, 3.474824997e-06f, 3.478968742e-06f, 3.483105894e-06f, 3.487236446e-06f, 3.491360393e-06f, 3.495477728e-06f,
+3.499588445e-06f, 3.503692538e-06f, 3.507790000e-06f, 3.511880826e-06f, 3.515965009e-06f, 3.520042543e-06f, 3.524113421e-06f, 3.528177638e-06f, 3.532235188e-06f, 3.536286064e-06f,
+3.540330260e-06f, 3.544367771e-06f, 3.548398590e-06f, 3.552422710e-06f, 3.556440127e-06f, 3.560450833e-06f, 3.564454823e-06f, 3.568452091e-06f, 3.572442631e-06f, 3.576426437e-06f,
+3.580403502e-06f, 3.584373822e-06f, 3.588337389e-06f, 3.592294198e-06f, 3.596244243e-06f, 3.600187518e-06f, 3.604124018e-06f, 3.608053735e-06f, 3.611976665e-06f, 3.615892801e-06f,
+3.619802138e-06f, 3.623704670e-06f, 3.627600390e-06f, 3.631489294e-06f, 3.635371375e-06f, 3.639246627e-06f, 3.643115046e-06f, 3.646976624e-06f, 3.650831356e-06f, 3.654679236e-06f,
+3.658520260e-06f, 3.662354420e-06f, 3.666181711e-06f, 3.670002128e-06f, 3.673815665e-06f, 3.677622316e-06f, 3.681422075e-06f, 3.685214937e-06f, 3.689000897e-06f, 3.692779948e-06f,
+3.696552085e-06f, 3.700317302e-06f, 3.704075595e-06f, 3.707826956e-06f, 3.711571381e-06f, 3.715308865e-06f, 3.719039400e-06f, 3.722762983e-06f, 3.726479608e-06f, 3.730189268e-06f,
+3.733891960e-06f, 3.737587676e-06f, 3.741276412e-06f, 3.744958162e-06f, 3.748632921e-06f, 3.752300683e-06f, 3.755961443e-06f, 3.759615196e-06f, 3.763261936e-06f, 3.766901658e-06f,
+3.770534356e-06f, 3.774160025e-06f, 3.777778660e-06f, 3.781390256e-06f, 3.784994807e-06f, 3.788592308e-06f, 3.792182753e-06f, 3.795766138e-06f, 3.799342456e-06f, 3.802911704e-06f,
+3.806473875e-06f, 3.810028965e-06f, 3.813576968e-06f, 3.817117879e-06f, 3.820651693e-06f, 3.824178405e-06f, 3.827698009e-06f, 3.831210500e-06f, 3.834715874e-06f, 3.838214125e-06f,
+3.841705249e-06f, 3.845189239e-06f, 3.848666091e-06f, 3.852135800e-06f, 3.855598361e-06f, 3.859053769e-06f, 3.862502019e-06f, 3.865943105e-06f, 3.869377024e-06f, 3.872803769e-06f,
+3.876223336e-06f, 3.879635720e-06f, 3.883040916e-06f, 3.886438919e-06f, 3.889829724e-06f, 3.893213327e-06f, 3.896589722e-06f, 3.899958905e-06f, 3.903320870e-06f, 3.906675613e-06f,
+3.910023129e-06f, 3.913363413e-06f, 3.916696460e-06f, 3.920022266e-06f, 3.923340826e-06f, 3.926652135e-06f, 3.929956188e-06f, 3.933252981e-06f, 3.936542509e-06f, 3.939824766e-06f,
+3.943099749e-06f, 3.946367453e-06f, 3.949627873e-06f, 3.952881004e-06f, 3.956126842e-06f, 3.959365382e-06f, 3.962596620e-06f, 3.965820550e-06f, 3.969037169e-06f, 3.972246471e-06f,
+3.975448453e-06f, 3.978643109e-06f, 3.981830435e-06f, 3.985010427e-06f, 3.988183080e-06f, 3.991348389e-06f, 3.994506350e-06f, 3.997656959e-06f, 4.000800211e-06f, 4.003936102e-06f,
+4.007064626e-06f, 4.010185781e-06f, 4.013299561e-06f, 4.016405962e-06f, 4.019504980e-06f, 4.022596609e-06f, 4.025680847e-06f, 4.028757689e-06f, 4.031827129e-06f, 4.034889165e-06f,
+4.037943791e-06f, 4.040991003e-06f, 4.044030798e-06f, 4.047063170e-06f, 4.050088116e-06f, 4.053105631e-06f, 4.056115712e-06f, 4.059118353e-06f, 4.062113551e-06f, 4.065101302e-06f,
+4.068081601e-06f, 4.071054444e-06f, 4.074019827e-06f, 4.076977746e-06f, 4.079928197e-06f, 4.082871176e-06f, 4.085806679e-06f, 4.088734701e-06f, 4.091655239e-06f, 4.094568288e-06f,
+4.097473845e-06f, 4.100371905e-06f, 4.103262465e-06f, 4.106145520e-06f, 4.109021067e-06f, 4.111889101e-06f, 4.114749619e-06f, 4.117602616e-06f, 4.120448090e-06f, 4.123286035e-06f,
+4.126116448e-06f, 4.128939325e-06f, 4.131754663e-06f, 4.134562456e-06f, 4.137362703e-06f, 4.140155397e-06f, 4.142940537e-06f, 4.145718118e-06f, 4.148488136e-06f, 4.151250588e-06f,
+4.154005470e-06f, 4.156752777e-06f, 4.159492507e-06f, 4.162224655e-06f, 4.164949219e-06f, 4.167666193e-06f, 4.170375575e-06f, 4.173077361e-06f, 4.175771547e-06f, 4.178458130e-06f,
+4.181137106e-06f, 4.183808471e-06f, 4.186472221e-06f, 4.189128354e-06f, 4.191776866e-06f, 4.194417752e-06f, 4.197051011e-06f, 4.199676637e-06f, 4.202294627e-06f, 4.204904979e-06f,
+4.207507688e-06f, 4.210102751e-06f, 4.212690165e-06f, 4.215269926e-06f, 4.217842031e-06f, 4.220406476e-06f, 4.222963258e-06f, 4.225512373e-06f, 4.228053819e-06f, 4.230587591e-06f,
+4.233113687e-06f, 4.235632103e-06f, 4.238142835e-06f, 4.240645882e-06f, 4.243141238e-06f, 4.245628901e-06f, 4.248108868e-06f, 4.250581136e-06f, 4.253045700e-06f, 4.255502559e-06f,
+4.257951708e-06f, 4.260393145e-06f, 4.262826866e-06f, 4.265252869e-06f, 4.267671149e-06f, 4.270081705e-06f, 4.272484532e-06f, 4.274879628e-06f, 4.277266989e-06f, 4.279646613e-06f,
+4.282018497e-06f, 4.284382637e-06f, 4.286739030e-06f, 4.289087673e-06f, 4.291428564e-06f, 4.293761699e-06f, 4.296087076e-06f, 4.298404690e-06f, 4.300714541e-06f, 4.303016623e-06f,
+4.305310935e-06f, 4.307597474e-06f, 4.309876237e-06f, 4.312147220e-06f, 4.314410421e-06f, 4.316665837e-06f, 4.318913466e-06f, 4.321153304e-06f, 4.323385348e-06f, 4.325609596e-06f,
+4.327826046e-06f, 4.330034693e-06f, 4.332235536e-06f, 4.334428571e-06f, 4.336613797e-06f, 4.338791209e-06f, 4.340960807e-06f, 4.343122586e-06f, 4.345276544e-06f, 4.347422679e-06f,
+4.349560987e-06f, 4.351691467e-06f, 4.353814115e-06f, 4.355928930e-06f, 4.358035907e-06f, 4.360135046e-06f, 4.362226342e-06f, 4.364309794e-06f, 4.366385400e-06f, 4.368453156e-06f,
+4.370513060e-06f, 4.372565110e-06f, 4.374609302e-06f, 4.376645636e-06f, 4.378674107e-06f, 4.380694714e-06f, 4.382707455e-06f, 4.384712327e-06f, 4.386709326e-06f, 4.388698453e-06f,
+4.390679702e-06f, 4.392653073e-06f, 4.394618564e-06f, 4.396576170e-06f, 4.398525892e-06f, 4.400467725e-06f, 4.402401668e-06f, 4.404327719e-06f, 4.406245875e-06f, 4.408156133e-06f,
+4.410058493e-06f, 4.411952951e-06f, 4.413839506e-06f, 4.415718154e-06f, 4.417588895e-06f, 4.419451726e-06f, 4.421306644e-06f, 4.423153647e-06f, 4.424992734e-06f, 4.426823903e-06f,
+4.428647150e-06f, 4.430462475e-06f, 4.432269875e-06f, 4.434069348e-06f, 4.435860892e-06f, 4.437644505e-06f, 4.439420184e-06f, 4.441187929e-06f, 4.442947737e-06f, 4.444699606e-06f,
+4.446443533e-06f, 4.448179518e-06f, 4.449907558e-06f, 4.451627652e-06f, 4.453339797e-06f, 4.455043991e-06f, 4.456740233e-06f, 4.458428521e-06f, 4.460108853e-06f, 4.461781226e-06f,
+4.463445641e-06f, 4.465102093e-06f, 4.466750583e-06f, 4.468391107e-06f, 4.470023665e-06f, 4.471648254e-06f, 4.473264873e-06f, 4.474873520e-06f, 4.476474193e-06f, 4.478066891e-06f,
+4.479651612e-06f, 4.481228354e-06f, 4.482797116e-06f, 4.484357895e-06f, 4.485910692e-06f, 4.487455503e-06f, 4.488992327e-06f, 4.490521163e-06f, 4.492042010e-06f, 4.493554865e-06f,
+4.495059726e-06f, 4.496556594e-06f, 4.498045465e-06f, 4.499526339e-06f, 4.500999214e-06f, 4.502464089e-06f, 4.503920961e-06f, 4.505369831e-06f, 4.506810696e-06f, 4.508243554e-06f,
+4.509668406e-06f, 4.511085248e-06f, 4.512494080e-06f, 4.513894901e-06f, 4.515287709e-06f, 4.516672502e-06f, 4.518049280e-06f, 4.519418041e-06f, 4.520778784e-06f, 4.522131508e-06f,
+4.523476211e-06f, 4.524812892e-06f, 4.526141551e-06f, 4.527462185e-06f, 4.528774793e-06f, 4.530079375e-06f, 4.531375929e-06f, 4.532664455e-06f, 4.533944950e-06f, 4.535217414e-06f,
+4.536481845e-06f, 4.537738243e-06f, 4.538986607e-06f, 4.540226935e-06f, 4.541459227e-06f, 4.542683481e-06f, 4.543899696e-06f, 4.545107872e-06f, 4.546308007e-06f, 4.547500100e-06f,
+4.548684151e-06f, 4.549860158e-06f, 4.551028121e-06f, 4.552188038e-06f, 4.553339909e-06f, 4.554483733e-06f, 4.555619509e-06f, 4.556747235e-06f, 4.557866912e-06f, 4.558978538e-06f,
+4.560082113e-06f, 4.561177635e-06f, 4.562265105e-06f, 4.563344520e-06f, 4.564415881e-06f, 4.565479186e-06f, 4.566534435e-06f, 4.567581628e-06f, 4.568620762e-06f, 4.569651839e-06f,
+4.570674856e-06f, 4.571689814e-06f, 4.572696711e-06f, 4.573695548e-06f, 4.574686323e-06f, 4.575669036e-06f, 4.576643686e-06f, 4.577610272e-06f, 4.578568795e-06f, 4.579519253e-06f,
+4.580461646e-06f, 4.581395974e-06f, 4.582322235e-06f, 4.583240430e-06f, 4.584150558e-06f, 4.585052618e-06f, 4.585946610e-06f, 4.586832534e-06f, 4.587710389e-06f, 4.588580175e-06f,
+4.589441890e-06f, 4.590295536e-06f, 4.591141111e-06f, 4.591978616e-06f, 4.592808049e-06f, 4.593629411e-06f, 4.594442701e-06f, 4.595247918e-06f, 4.596045064e-06f, 4.596834136e-06f,
+4.597615136e-06f, 4.598388062e-06f, 4.599152915e-06f, 4.599909694e-06f, 4.600658400e-06f, 4.601399031e-06f, 4.602131588e-06f, 4.602856070e-06f, 4.603572478e-06f, 4.604280812e-06f,
+4.604981070e-06f, 4.605673254e-06f, 4.606357362e-06f, 4.607033396e-06f, 4.607701354e-06f, 4.608361237e-06f, 4.609013045e-06f, 4.609656777e-06f, 4.610292434e-06f, 4.610920016e-06f,
+4.611539522e-06f, 4.612150954e-06f, 4.612754310e-06f, 4.613349591e-06f, 4.613936796e-06f, 4.614515927e-06f, 4.615086983e-06f, 4.615649964e-06f, 4.616204871e-06f, 4.616751703e-06f,
+4.617290461e-06f, 4.617821144e-06f, 4.618343754e-06f, 4.618858290e-06f, 4.619364752e-06f, 4.619863141e-06f, 4.620353457e-06f, 4.620835700e-06f, 4.621309870e-06f, 4.621775968e-06f,
+4.622233994e-06f, 4.622683949e-06f, 4.623125832e-06f, 4.623559644e-06f, 4.623985385e-06f, 4.624403056e-06f, 4.624812658e-06f, 4.625214189e-06f, 4.625607652e-06f, 4.625993046e-06f,
+4.626370372e-06f, 4.626739629e-06f, 4.627100820e-06f, 4.627453944e-06f, 4.627799001e-06f, 4.628135993e-06f, 4.628464919e-06f, 4.628785780e-06f, 4.629098577e-06f, 4.629403311e-06f,
+4.629699981e-06f, 4.629988589e-06f, 4.630269135e-06f, 4.630541619e-06f, 4.630806043e-06f, 4.631062407e-06f, 4.631310712e-06f, 4.631550958e-06f, 4.631783145e-06f, 4.632007276e-06f,
+4.632223350e-06f, 4.632431368e-06f, 4.632631331e-06f, 4.632823240e-06f, 4.633007095e-06f, 4.633182897e-06f, 4.633350648e-06f, 4.633510347e-06f, 4.633661996e-06f, 4.633805595e-06f,
+4.633941146e-06f, 4.634068649e-06f, 4.634188105e-06f, 4.634299514e-06f, 4.634402879e-06f, 4.634498200e-06f, 4.634585477e-06f, 4.634664712e-06f, 4.634735906e-06f, 4.634799059e-06f,
+4.634854174e-06f, 4.634901249e-06f, 4.634940288e-06f, 4.634971290e-06f, 4.634994256e-06f, 4.635009189e-06f, 4.635016089e-06f, 4.635014956e-06f, 4.635005793e-06f, 4.634988599e-06f,
+4.634963378e-06f, 4.634930128e-06f, 4.634888852e-06f, 4.634839551e-06f, 4.634782226e-06f, 4.634716878e-06f, 4.634643509e-06f, 4.634562119e-06f, 4.634472710e-06f, 4.634375283e-06f,
+4.634269840e-06f, 4.634156381e-06f, 4.634034908e-06f, 4.633905423e-06f, 4.633767926e-06f, 4.633622419e-06f, 4.633468903e-06f, 4.633307380e-06f, 4.633137851e-06f, 4.632960317e-06f,
+4.632774780e-06f, 4.632581242e-06f, 4.632379703e-06f, 4.632170165e-06f, 4.631952630e-06f, 4.631727099e-06f, 4.631493573e-06f, 4.631252055e-06f, 4.631002545e-06f, 4.630745045e-06f,
+4.630479557e-06f, 4.630206082e-06f, 4.629924621e-06f, 4.629635177e-06f, 4.629337751e-06f, 4.629032345e-06f, 4.628718959e-06f, 4.628397597e-06f, 4.628068259e-06f, 4.627730947e-06f,
+4.627385662e-06f, 4.627032408e-06f, 4.626671184e-06f, 4.626301994e-06f, 4.625924838e-06f, 4.625539718e-06f, 4.625146637e-06f, 4.624745595e-06f, 4.624336596e-06f, 4.623919639e-06f,
+4.623494729e-06f, 4.623061865e-06f, 4.622621050e-06f, 4.622172286e-06f, 4.621715575e-06f, 4.621250918e-06f, 4.620778318e-06f, 4.620297777e-06f, 4.619809295e-06f, 4.619312876e-06f,
+4.618808522e-06f, 4.618296233e-06f, 4.617776012e-06f, 4.617247862e-06f, 4.616711784e-06f, 4.616167780e-06f, 4.615615852e-06f, 4.615056002e-06f, 4.614488233e-06f, 4.613912546e-06f,
+4.613328944e-06f, 4.612737428e-06f, 4.612138000e-06f, 4.611530664e-06f, 4.610915420e-06f, 4.610292272e-06f, 4.609661221e-06f, 4.609022269e-06f, 4.608375419e-06f, 4.607720672e-06f,
+4.607058032e-06f, 4.606387500e-06f, 4.605709078e-06f, 4.605022769e-06f, 4.604328576e-06f, 4.603626499e-06f, 4.602916542e-06f, 4.602198707e-06f, 4.601472997e-06f, 4.600739413e-06f,
+4.599997958e-06f, 4.599248634e-06f, 4.598491444e-06f, 4.597726390e-06f, 4.596953475e-06f, 4.596172700e-06f, 4.595384069e-06f, 4.594587584e-06f, 4.593783247e-06f, 4.592971060e-06f,
+4.592151027e-06f, 4.591323150e-06f, 4.590487430e-06f, 4.589643872e-06f, 4.588792477e-06f, 4.587933247e-06f, 4.587066186e-06f, 4.586191296e-06f, 4.585308580e-06f, 4.584418040e-06f,
+4.583519678e-06f, 4.582613498e-06f, 4.581699502e-06f, 4.580777693e-06f, 4.579848073e-06f, 4.578910645e-06f, 4.577965412e-06f, 4.577012377e-06f, 4.576051542e-06f, 4.575082909e-06f,
+4.574106483e-06f, 4.573122265e-06f, 4.572130258e-06f, 4.571130465e-06f, 4.570122889e-06f, 4.569107532e-06f, 4.568084398e-06f, 4.567053490e-06f, 4.566014809e-06f, 4.564968360e-06f,
+4.563914144e-06f, 4.562852166e-06f, 4.561782427e-06f, 4.560704930e-06f, 4.559619679e-06f, 4.558526677e-06f, 4.557425926e-06f, 4.556317430e-06f, 4.555201191e-06f, 4.554077213e-06f,
+4.552945498e-06f, 4.551806049e-06f, 4.550658870e-06f, 4.549503964e-06f, 4.548341333e-06f, 4.547170981e-06f, 4.545992910e-06f, 4.544807125e-06f, 4.543613627e-06f, 4.542412421e-06f,
+4.541203509e-06f, 4.539986894e-06f, 4.538762580e-06f, 4.537530570e-06f, 4.536290866e-06f, 4.535043473e-06f, 4.533788393e-06f, 4.532525630e-06f, 4.531255187e-06f, 4.529977067e-06f,
+4.528691273e-06f, 4.527397809e-06f, 4.526096678e-06f, 4.524787883e-06f, 4.523471428e-06f, 4.522147316e-06f, 4.520815550e-06f, 4.519476133e-06f, 4.518129070e-06f, 4.516774363e-06f,
+4.515412016e-06f, 4.514042032e-06f, 4.512664415e-06f, 4.511279168e-06f, 4.509886294e-06f, 4.508485797e-06f, 4.507077681e-06f, 4.505661949e-06f, 4.504238604e-06f, 4.502807650e-06f,
+4.501369091e-06f, 4.499922930e-06f, 4.498469170e-06f, 4.497007816e-06f, 4.495538870e-06f, 4.494062336e-06f, 4.492578219e-06f, 4.491086521e-06f, 4.489587246e-06f, 4.488080398e-06f,
+4.486565980e-06f, 4.485043997e-06f, 4.483514451e-06f, 4.481977347e-06f, 4.480432688e-06f, 4.478880477e-06f, 4.477320720e-06f, 4.475753419e-06f, 4.474178578e-06f, 4.472596201e-06f,
+4.471006291e-06f, 4.469408853e-06f, 4.467803891e-06f, 4.466191407e-06f, 4.464571406e-06f, 4.462943893e-06f, 4.461308869e-06f, 4.459666340e-06f, 4.458016310e-06f, 4.456358782e-06f,
+4.454693760e-06f, 4.453021248e-06f, 4.451341250e-06f, 4.449653770e-06f, 4.447958812e-06f, 4.446256380e-06f, 4.444546477e-06f, 4.442829109e-06f, 4.441104278e-06f, 4.439371989e-06f,
+4.437632246e-06f, 4.435885053e-06f, 4.434130414e-06f, 4.432368333e-06f, 4.430598814e-06f, 4.428821861e-06f, 4.427037479e-06f, 4.425245671e-06f, 4.423446441e-06f, 4.421639794e-06f,
+4.419825735e-06f, 4.418004266e-06f, 4.416175392e-06f, 4.414339118e-06f, 4.412495447e-06f, 4.410644384e-06f, 4.408785933e-06f, 4.406920098e-06f, 4.405046884e-06f, 4.403166295e-06f,
+4.401278334e-06f, 4.399383007e-06f, 4.397480318e-06f, 4.395570270e-06f, 4.393652869e-06f, 4.391728118e-06f, 4.389796023e-06f, 4.387856586e-06f, 4.385909814e-06f, 4.383955709e-06f,
+4.381994277e-06f, 4.380025521e-06f, 4.378049447e-06f, 4.376066059e-06f, 4.374075361e-06f, 4.372077357e-06f, 4.370072053e-06f, 4.368059452e-06f, 4.366039559e-06f, 4.364012379e-06f,
+4.361977916e-06f, 4.359936174e-06f, 4.357887158e-06f, 4.355830874e-06f, 4.353767324e-06f, 4.351696515e-06f, 4.349618449e-06f, 4.347533133e-06f, 4.345440571e-06f, 4.343340766e-06f,
+4.341233725e-06f, 4.339119451e-06f, 4.336997949e-06f, 4.334869225e-06f, 4.332733282e-06f, 4.330590125e-06f, 4.328439759e-06f, 4.326282189e-06f, 4.324117419e-06f, 4.321945454e-06f,
+4.319766300e-06f, 4.317579960e-06f, 4.315386439e-06f, 4.313185743e-06f, 4.310977876e-06f, 4.308762842e-06f, 4.306540648e-06f, 4.304311297e-06f, 4.302074794e-06f, 4.299831145e-06f,
+4.297580353e-06f, 4.295322425e-06f, 4.293057365e-06f, 4.290785177e-06f, 4.288505867e-06f, 4.286219440e-06f, 4.283925901e-06f, 4.281625254e-06f, 4.279317504e-06f, 4.277002657e-06f,
+4.274680718e-06f, 4.272351691e-06f, 4.270015582e-06f, 4.267672395e-06f, 4.265322135e-06f, 4.262964809e-06f, 4.260600420e-06f, 4.258228974e-06f, 4.255850475e-06f, 4.253464930e-06f,
+4.251072342e-06f, 4.248672718e-06f, 4.246266062e-06f, 4.243852380e-06f, 4.241431676e-06f, 4.239003955e-06f, 4.236569224e-06f, 4.234127487e-06f, 4.231678749e-06f, 4.229223016e-06f,
+4.226760292e-06f, 4.224290583e-06f, 4.221813895e-06f, 4.219330232e-06f, 4.216839599e-06f, 4.214342003e-06f, 4.211837448e-06f, 4.209325939e-06f, 4.206807483e-06f, 4.204282084e-06f,
+4.201749747e-06f, 4.199210478e-06f, 4.196664282e-06f, 4.194111165e-06f, 4.191551132e-06f, 4.188984189e-06f, 4.186410340e-06f, 4.183829591e-06f, 4.181241948e-06f, 4.178647417e-06f,
+4.176046001e-06f, 4.173437708e-06f, 4.170822542e-06f, 4.168200509e-06f, 4.165571614e-06f, 4.162935863e-06f, 4.160293262e-06f, 4.157643816e-06f, 4.154987530e-06f, 4.152324410e-06f,
+4.149654462e-06f, 4.146977691e-06f, 4.144294103e-06f, 4.141603703e-06f, 4.138906497e-06f, 4.136202491e-06f, 4.133491689e-06f, 4.130774099e-06f, 4.128049725e-06f, 4.125318573e-06f,
+4.122580649e-06f, 4.119835958e-06f, 4.117084507e-06f, 4.114326300e-06f, 4.111561344e-06f, 4.108789645e-06f, 4.106011207e-06f, 4.103226037e-06f, 4.100434141e-06f, 4.097635524e-06f,
+4.094830191e-06f, 4.092018150e-06f, 4.089199406e-06f, 4.086373964e-06f, 4.083541830e-06f, 4.080703010e-06f, 4.077857511e-06f, 4.075005337e-06f, 4.072146495e-06f, 4.069280990e-06f,
+4.066408829e-06f, 4.063530017e-06f, 4.060644561e-06f, 4.057752465e-06f, 4.054853737e-06f, 4.051948382e-06f, 4.049036405e-06f, 4.046117814e-06f, 4.043192613e-06f, 4.040260810e-06f,
+4.037322409e-06f, 4.034377418e-06f, 4.031425841e-06f, 4.028467685e-06f, 4.025502956e-06f, 4.022531660e-06f, 4.019553803e-06f, 4.016569391e-06f, 4.013578431e-06f, 4.010580928e-06f,
+4.007576888e-06f, 4.004566318e-06f, 4.001549223e-06f, 3.998525610e-06f, 3.995495485e-06f, 3.992458854e-06f, 3.989415723e-06f, 3.986366099e-06f, 3.983309987e-06f, 3.980247394e-06f,
+3.977178326e-06f, 3.974102789e-06f, 3.971020789e-06f, 3.967932333e-06f, 3.964837427e-06f, 3.961736077e-06f, 3.958628290e-06f, 3.955514071e-06f, 3.952393427e-06f, 3.949266365e-06f,
+3.946132889e-06f, 3.942993008e-06f, 3.939846727e-06f, 3.936694053e-06f, 3.933534991e-06f, 3.930369549e-06f, 3.927197732e-06f, 3.924019547e-06f, 3.920835001e-06f, 3.917644099e-06f,
+3.914446849e-06f, 3.911243256e-06f, 3.908033327e-06f, 3.904817069e-06f, 3.901594487e-06f, 3.898365589e-06f, 3.895130381e-06f, 3.891888869e-06f, 3.888641060e-06f, 3.885386960e-06f,
+3.882126577e-06f, 3.878859915e-06f, 3.875586982e-06f, 3.872307785e-06f, 3.869022329e-06f, 3.865730622e-06f, 3.862432671e-06f, 3.859128481e-06f, 3.855818059e-06f, 3.852501412e-06f,
+3.849178546e-06f, 3.845849468e-06f, 3.842514186e-06f, 3.839172704e-06f, 3.835825031e-06f, 3.832471172e-06f, 3.829111134e-06f, 3.825744925e-06f, 3.822372550e-06f, 3.818994016e-06f,
+3.815609331e-06f, 3.812218500e-06f, 3.808821531e-06f, 3.805418431e-06f, 3.802009205e-06f, 3.798593861e-06f, 3.795172405e-06f, 3.791744845e-06f, 3.788311187e-06f, 3.784871438e-06f,
+3.781425604e-06f, 3.777973693e-06f, 3.774515711e-06f, 3.771051666e-06f, 3.767581563e-06f, 3.764105410e-06f, 3.760623214e-06f, 3.757134982e-06f, 3.753640720e-06f, 3.750140435e-06f,
+3.746634135e-06f, 3.743121825e-06f, 3.739603514e-06f, 3.736079208e-06f, 3.732548914e-06f, 3.729012638e-06f, 3.725470389e-06f, 3.721922172e-06f, 3.718367995e-06f, 3.714807865e-06f,
+3.711241789e-06f, 3.707669773e-06f, 3.704091825e-06f, 3.700507952e-06f, 3.696918161e-06f, 3.693322459e-06f, 3.689720852e-06f, 3.686113349e-06f, 3.682499956e-06f, 3.678880679e-06f,
+3.675255527e-06f, 3.671624506e-06f, 3.667987624e-06f, 3.664344887e-06f, 3.660696303e-06f, 3.657041879e-06f, 3.653381621e-06f, 3.649715538e-06f, 3.646043636e-06f, 3.642365922e-06f,
+3.638682404e-06f, 3.634993088e-06f, 3.631297983e-06f, 3.627597095e-06f, 3.623890431e-06f, 3.620177999e-06f, 3.616459805e-06f, 3.612735858e-06f, 3.609006164e-06f, 3.605270730e-06f,
+3.601529565e-06f, 3.597782675e-06f, 3.594030067e-06f, 3.590271748e-06f, 3.586507727e-06f, 3.582738010e-06f, 3.578962605e-06f, 3.575181519e-06f, 3.571394759e-06f, 3.567602332e-06f,
+3.563804247e-06f, 3.560000510e-06f, 3.556191129e-06f, 3.552376112e-06f, 3.548555464e-06f, 3.544729195e-06f, 3.540897311e-06f, 3.537059820e-06f, 3.533216729e-06f, 3.529368045e-06f,
+3.525513777e-06f, 3.521653931e-06f, 3.517788516e-06f, 3.513917537e-06f, 3.510041004e-06f, 3.506158923e-06f, 3.502271302e-06f, 3.498378149e-06f, 3.494479470e-06f, 3.490575274e-06f,
+3.486665568e-06f, 3.482750360e-06f, 3.478829657e-06f, 3.474903466e-06f, 3.470971795e-06f, 3.467034653e-06f, 3.463092045e-06f, 3.459143981e-06f, 3.455190467e-06f, 3.451231512e-06f,
+3.447267122e-06f, 3.443297306e-06f, 3.439322070e-06f, 3.435341423e-06f, 3.431355373e-06f, 3.427363927e-06f, 3.423367092e-06f, 3.419364877e-06f, 3.415357288e-06f, 3.411344335e-06f,
+3.407326023e-06f, 3.403302362e-06f, 3.399273359e-06f, 3.395239021e-06f, 3.391199357e-06f, 3.387154373e-06f, 3.383104078e-06f, 3.379048480e-06f, 3.374987586e-06f, 3.370921404e-06f,
+3.366849942e-06f, 3.362773208e-06f, 3.358691209e-06f, 3.354603953e-06f, 3.350511448e-06f, 3.346413703e-06f, 3.342310723e-06f, 3.338202519e-06f, 3.334089096e-06f, 3.329970464e-06f,
+3.325846630e-06f, 3.321717602e-06f, 3.317583388e-06f, 3.313443996e-06f, 3.309299433e-06f, 3.305149707e-06f, 3.300994827e-06f, 3.296834801e-06f, 3.292669635e-06f, 3.288499339e-06f,
+3.284323920e-06f, 3.280143386e-06f, 3.275957745e-06f, 3.271767005e-06f, 3.267571174e-06f, 3.263370260e-06f, 3.259164270e-06f, 3.254953214e-06f, 3.250737099e-06f, 3.246515932e-06f,
+3.242289723e-06f, 3.238058478e-06f, 3.233822206e-06f, 3.229580916e-06f, 3.225334614e-06f, 3.221083310e-06f, 3.216827011e-06f, 3.212565725e-06f, 3.208299461e-06f, 3.204028226e-06f,
+3.199752028e-06f, 3.195470876e-06f, 3.191184778e-06f, 3.186893742e-06f, 3.182597775e-06f, 3.178296887e-06f, 3.173991085e-06f, 3.169680377e-06f, 3.165364772e-06f, 3.161044278e-06f,
+3.156718902e-06f, 3.152388653e-06f, 3.148053540e-06f, 3.143713570e-06f, 3.139368752e-06f, 3.135019093e-06f, 3.130664603e-06f, 3.126305289e-06f, 3.121941159e-06f, 3.117572222e-06f,
+3.113198485e-06f, 3.108819958e-06f, 3.104436649e-06f, 3.100048565e-06f, 3.095655715e-06f, 3.091258107e-06f, 3.086855750e-06f, 3.082448651e-06f, 3.078036820e-06f, 3.073620264e-06f,
+3.069198992e-06f, 3.064773012e-06f, 3.060342332e-06f, 3.055906961e-06f, 3.051466907e-06f, 3.047022178e-06f, 3.042572783e-06f, 3.038118730e-06f, 3.033660027e-06f, 3.029196684e-06f,
+3.024728707e-06f, 3.020256107e-06f, 3.015778890e-06f, 3.011297065e-06f, 3.006810642e-06f, 3.002319627e-06f, 2.997824030e-06f, 2.993323860e-06f, 2.988819123e-06f, 2.984309830e-06f,
+2.979795988e-06f, 2.975277606e-06f, 2.970754692e-06f, 2.966227255e-06f, 2.961695303e-06f, 2.957158845e-06f, 2.952617889e-06f, 2.948072444e-06f, 2.943522518e-06f, 2.938968120e-06f,
+2.934409258e-06f, 2.929845941e-06f, 2.925278177e-06f, 2.920705975e-06f, 2.916129343e-06f, 2.911548290e-06f, 2.906962825e-06f, 2.902372956e-06f, 2.897778691e-06f, 2.893180040e-06f,
+2.888577010e-06f, 2.883969610e-06f, 2.879357850e-06f, 2.874741737e-06f, 2.870121280e-06f, 2.865496488e-06f, 2.860867369e-06f, 2.856233932e-06f, 2.851596186e-06f, 2.846954139e-06f,
+2.842307800e-06f, 2.837657178e-06f, 2.833002281e-06f, 2.828343117e-06f, 2.823679696e-06f, 2.819012027e-06f, 2.814340117e-06f, 2.809663976e-06f, 2.804983612e-06f, 2.800299034e-06f,
+2.795610251e-06f, 2.790917271e-06f, 2.786220103e-06f, 2.781518757e-06f, 2.776813239e-06f, 2.772103560e-06f, 2.767389728e-06f, 2.762671752e-06f, 2.757949640e-06f, 2.753223402e-06f,
+2.748493046e-06f, 2.743758580e-06f, 2.739020014e-06f, 2.734277357e-06f, 2.729530617e-06f, 2.724779802e-06f, 2.720024923e-06f, 2.715265987e-06f, 2.710503003e-06f, 2.705735981e-06f,
+2.700964929e-06f, 2.696189856e-06f, 2.691410770e-06f, 2.686627681e-06f, 2.681840597e-06f, 2.677049528e-06f, 2.672254481e-06f, 2.667455467e-06f, 2.662652493e-06f, 2.657845570e-06f,
+2.653034704e-06f, 2.648219907e-06f, 2.643401185e-06f, 2.638578549e-06f, 2.633752008e-06f, 2.628921569e-06f, 2.624087242e-06f, 2.619249036e-06f, 2.614406960e-06f, 2.609561023e-06f,
+2.604711234e-06f, 2.599857601e-06f, 2.595000134e-06f, 2.590138841e-06f, 2.585273732e-06f, 2.580404816e-06f, 2.575532101e-06f, 2.570655596e-06f, 2.565775311e-06f, 2.560891254e-06f,
+2.556003434e-06f, 2.551111861e-06f, 2.546216543e-06f, 2.541317490e-06f, 2.536414710e-06f, 2.531508213e-06f, 2.526598007e-06f, 2.521684101e-06f, 2.516766505e-06f, 2.511845227e-06f,
+2.506920278e-06f, 2.501991664e-06f, 2.497059397e-06f, 2.492123484e-06f, 2.487183935e-06f, 2.482240758e-06f, 2.477293964e-06f, 2.472343561e-06f, 2.467389558e-06f, 2.462431964e-06f,
+2.457470788e-06f, 2.452506040e-06f, 2.447537728e-06f, 2.442565862e-06f, 2.437590450e-06f, 2.432611503e-06f, 2.427629028e-06f, 2.422643036e-06f, 2.417653534e-06f, 2.412660533e-06f,
+2.407664042e-06f, 2.402664069e-06f, 2.397660624e-06f, 2.392653715e-06f, 2.387643353e-06f, 2.382629547e-06f, 2.377612304e-06f, 2.372591635e-06f, 2.367567550e-06f, 2.362540056e-06f,
+2.357509163e-06f, 2.352474880e-06f, 2.347437218e-06f, 2.342396184e-06f, 2.337351788e-06f, 2.332304039e-06f, 2.327252946e-06f, 2.322198519e-06f, 2.317140767e-06f, 2.312079699e-06f,
+2.307015325e-06f, 2.301947653e-06f, 2.296876693e-06f, 2.291802453e-06f, 2.286724945e-06f, 2.281644175e-06f, 2.276560155e-06f, 2.271472892e-06f, 2.266382397e-06f, 2.261288679e-06f,
+2.256191746e-06f, 2.251091609e-06f, 2.245988276e-06f, 2.240881757e-06f, 2.235772061e-06f, 2.230659198e-06f, 2.225543176e-06f, 2.220424005e-06f, 2.215301694e-06f, 2.210176253e-06f,
+2.205047691e-06f, 2.199916017e-06f, 2.194781241e-06f, 2.189643371e-06f, 2.184502418e-06f, 2.179358391e-06f, 2.174211298e-06f, 2.169061150e-06f, 2.163907955e-06f, 2.158751724e-06f,
+2.153592464e-06f, 2.148430187e-06f, 2.143264900e-06f, 2.138096614e-06f, 2.132925338e-06f, 2.127751081e-06f, 2.122573853e-06f, 2.117393663e-06f, 2.112210520e-06f, 2.107024434e-06f,
+2.101835414e-06f, 2.096643470e-06f, 2.091448611e-06f, 2.086250846e-06f, 2.081050185e-06f, 2.075846637e-06f, 2.070640212e-06f, 2.065430919e-06f, 2.060218768e-06f, 2.055003767e-06f,
+2.049785927e-06f, 2.044565257e-06f, 2.039341766e-06f, 2.034115464e-06f, 2.028886360e-06f, 2.023654464e-06f, 2.018419785e-06f, 2.013182332e-06f, 2.007942115e-06f, 2.002699144e-06f,
+1.997453428e-06f, 1.992204976e-06f, 1.986953799e-06f, 1.981699904e-06f, 1.976443303e-06f, 1.971184004e-06f, 1.965922017e-06f, 1.960657351e-06f, 1.955390016e-06f, 1.950120022e-06f,
+1.944847377e-06f, 1.939572092e-06f, 1.934294176e-06f, 1.929013638e-06f, 1.923730488e-06f, 1.918444736e-06f, 1.913156390e-06f, 1.907865461e-06f, 1.902571958e-06f, 1.897275891e-06f,
+1.891977269e-06f, 1.886676102e-06f, 1.881372399e-06f, 1.876066169e-06f, 1.870757423e-06f, 1.865446170e-06f, 1.860132419e-06f, 1.854816181e-06f, 1.849497464e-06f, 1.844176278e-06f,
+1.838852632e-06f, 1.833526537e-06f, 1.828198002e-06f, 1.822867036e-06f, 1.817533649e-06f, 1.812197851e-06f, 1.806859651e-06f, 1.801519059e-06f, 1.796176084e-06f, 1.790830736e-06f,
+1.785483025e-06f, 1.780132960e-06f, 1.774780550e-06f, 1.769425806e-06f, 1.764068737e-06f, 1.758709352e-06f, 1.753347662e-06f, 1.747983675e-06f, 1.742617402e-06f, 1.737248852e-06f,
+1.731878035e-06f, 1.726504960e-06f, 1.721129636e-06f, 1.715752075e-06f, 1.710372285e-06f, 1.704990275e-06f, 1.699606056e-06f, 1.694219637e-06f, 1.688831028e-06f, 1.683440238e-06f,
+1.678047278e-06f, 1.672652156e-06f, 1.667254882e-06f, 1.661855467e-06f, 1.656453919e-06f, 1.651050248e-06f, 1.645644465e-06f, 1.640236578e-06f, 1.634826598e-06f, 1.629414533e-06f,
+1.624000395e-06f, 1.618584191e-06f, 1.613165933e-06f, 1.607745630e-06f, 1.602323291e-06f, 1.596898926e-06f, 1.591472544e-06f, 1.586044157e-06f, 1.580613772e-06f, 1.575181401e-06f,
+1.569747051e-06f, 1.564310735e-06f, 1.558872460e-06f, 1.553432237e-06f, 1.547990075e-06f, 1.542545984e-06f, 1.537099974e-06f, 1.531652055e-06f, 1.526202235e-06f, 1.520750526e-06f,
+1.515296936e-06f, 1.509841476e-06f, 1.504384154e-06f, 1.498924982e-06f, 1.493463968e-06f, 1.488001122e-06f, 1.482536454e-06f, 1.477069974e-06f, 1.471601691e-06f, 1.466131616e-06f,
+1.460659757e-06f, 1.455186125e-06f, 1.449710730e-06f, 1.444233580e-06f, 1.438754686e-06f, 1.433274058e-06f, 1.427791706e-06f, 1.422307638e-06f, 1.416821865e-06f, 1.411334397e-06f,
+1.405845243e-06f, 1.400354413e-06f, 1.394861917e-06f, 1.389367764e-06f, 1.383871965e-06f, 1.378374529e-06f, 1.372875466e-06f, 1.367374786e-06f, 1.361872497e-06f, 1.356368611e-06f,
+1.350863137e-06f, 1.345356085e-06f, 1.339847464e-06f, 1.334337285e-06f, 1.328825556e-06f, 1.323312288e-06f, 1.317797491e-06f, 1.312281174e-06f, 1.306763347e-06f, 1.301244020e-06f,
+1.295723202e-06f, 1.290200904e-06f, 1.284677135e-06f, 1.279151906e-06f, 1.273625225e-06f, 1.268097102e-06f, 1.262567548e-06f, 1.257036572e-06f, 1.251504184e-06f, 1.245970394e-06f,
+1.240435211e-06f, 1.234898646e-06f, 1.229360708e-06f, 1.223821406e-06f, 1.218280751e-06f, 1.212738753e-06f, 1.207195421e-06f, 1.201650765e-06f, 1.196104795e-06f, 1.190557521e-06f,
+1.185008952e-06f, 1.179459098e-06f, 1.173907970e-06f, 1.168355576e-06f, 1.162801927e-06f, 1.157247033e-06f, 1.151690902e-06f, 1.146133546e-06f, 1.140574974e-06f, 1.135015196e-06f,
+1.129454221e-06f, 1.123892059e-06f, 1.118328721e-06f, 1.112764215e-06f, 1.107198552e-06f, 1.101631742e-06f, 1.096063794e-06f, 1.090494719e-06f, 1.084924525e-06f, 1.079353224e-06f,
+1.073780824e-06f, 1.068207335e-06f, 1.062632768e-06f, 1.057057132e-06f, 1.051480436e-06f, 1.045902692e-06f, 1.040323908e-06f, 1.034744094e-06f, 1.029163261e-06f, 1.023581417e-06f,
+1.017998574e-06f, 1.012414740e-06f, 1.006829926e-06f, 1.001244140e-06f, 9.956573943e-07f, 9.900696972e-07f, 9.844810589e-07f, 9.788914891e-07f, 9.733009977e-07f, 9.677095946e-07f,
+9.621172895e-07f, 9.565240922e-07f, 9.509300127e-07f, 9.453350607e-07f, 9.397392460e-07f, 9.341425785e-07f, 9.285450679e-07f, 9.229467242e-07f, 9.173475571e-07f, 9.117475765e-07f,
+9.061467922e-07f, 9.005452139e-07f, 8.949428516e-07f, 8.893397151e-07f, 8.837358141e-07f, 8.781311586e-07f, 8.725257583e-07f, 8.669196230e-07f, 8.613127626e-07f, 8.557051869e-07f,
+8.500969057e-07f, 8.444879289e-07f, 8.388782662e-07f, 8.332679276e-07f, 8.276569228e-07f, 8.220452616e-07f, 8.164329538e-07f, 8.108200094e-07f, 8.052064380e-07f, 7.995922496e-07f,
+7.939774540e-07f, 7.883620609e-07f, 7.827460802e-07f, 7.771295217e-07f, 7.715123953e-07f, 7.658947107e-07f, 7.602764778e-07f, 7.546577064e-07f, 7.490384063e-07f, 7.434185873e-07f,
+7.377982592e-07f, 7.321774320e-07f, 7.265561153e-07f, 7.209343190e-07f, 7.153120530e-07f, 7.096893269e-07f, 7.040661507e-07f, 6.984425342e-07f, 6.928184871e-07f, 6.871940193e-07f,
+6.815691407e-07f, 6.759438609e-07f, 6.703181898e-07f, 6.646921373e-07f, 6.590657131e-07f, 6.534389271e-07f, 6.478117890e-07f, 6.421843087e-07f, 6.365564959e-07f, 6.309283606e-07f,
+6.252999124e-07f, 6.196711612e-07f, 6.140421168e-07f, 6.084127889e-07f, 6.027831875e-07f, 5.971533223e-07f, 5.915232030e-07f, 5.858928396e-07f, 5.802622417e-07f, 5.746314192e-07f,
+5.690003819e-07f, 5.633691396e-07f, 5.577377021e-07f, 5.521060791e-07f, 5.464742805e-07f, 5.408423160e-07f, 5.352101955e-07f, 5.295779287e-07f, 5.239455254e-07f, 5.183129954e-07f,
+5.126803485e-07f, 5.070475945e-07f, 5.014147432e-07f, 4.957818042e-07f, 4.901487875e-07f, 4.845157028e-07f, 4.788825599e-07f, 4.732493685e-07f, 4.676161385e-07f, 4.619828795e-07f,
+4.563496014e-07f, 4.507163140e-07f, 4.450830270e-07f, 4.394497502e-07f, 4.338164933e-07f, 4.281832662e-07f, 4.225500786e-07f, 4.169169402e-07f, 4.112838608e-07f, 4.056508502e-07f,
+4.000179181e-07f, 3.943850743e-07f, 3.887523286e-07f, 3.831196907e-07f, 3.774871703e-07f, 3.718547772e-07f, 3.662225212e-07f, 3.605904120e-07f, 3.549584593e-07f, 3.493266730e-07f,
+3.436950627e-07f, 3.380636381e-07f, 3.324324091e-07f, 3.268013854e-07f, 3.211705767e-07f, 3.155399927e-07f, 3.099096431e-07f, 3.042795378e-07f, 2.986496864e-07f, 2.930200986e-07f,
+2.873907842e-07f, 2.817617530e-07f, 2.761330146e-07f, 2.705045787e-07f, 2.648764551e-07f, 2.592486535e-07f, 2.536211835e-07f, 2.479940550e-07f, 2.423672777e-07f, 2.367408611e-07f,
+2.311148152e-07f, 2.254891494e-07f, 2.198638736e-07f, 2.142389975e-07f, 2.086145307e-07f, 2.029904830e-07f, 1.973668640e-07f, 1.917436835e-07f, 1.861209511e-07f, 1.804986765e-07f,
+1.748768694e-07f, 1.692555395e-07f, 1.636346964e-07f, 1.580143500e-07f, 1.523945097e-07f, 1.467751854e-07f, 1.411563866e-07f, 1.355381231e-07f, 1.299204045e-07f, 1.243032405e-07f,
+1.186866408e-07f, 1.130706150e-07f, 1.074551727e-07f, 1.018403237e-07f, 9.622607753e-08f, 9.061244392e-08f, 8.499943250e-08f, 7.938705292e-08f, 7.377531482e-08f, 6.816422785e-08f,
+6.255380164e-08f, 5.694404583e-08f, 5.133497006e-08f, 4.572658397e-08f, 4.011889717e-08f, 3.451191931e-08f, 2.890566000e-08f, 2.330012887e-08f, 1.769533554e-08f, 1.209128962e-08f,
+6.488000734e-09f, 8.854784917e-10f, -4.716267498e-09f, -1.031722763e-08f, -1.591739230e-08f, -2.151675190e-08f, -2.711529683e-08f, -3.271301751e-08f, -3.830990433e-08f, -4.390594771e-08f,
+-4.950113806e-08f, -5.509546580e-08f, -6.068892133e-08f, -6.628149508e-08f, -7.187317749e-08f, -7.746395896e-08f, -8.305382994e-08f, -8.864278085e-08f, -9.423080212e-08f, -9.981788421e-08f,
+-1.054040175e-07f, -1.109891926e-07f, -1.165733997e-07f, -1.221566295e-07f, -1.277388723e-07f, -1.333201186e-07f, -1.389003589e-07f, -1.444795835e-07f, -1.500577831e-07f, -1.556349480e-07f,
+-1.612110688e-07f, -1.667861358e-07f, -1.723601396e-07f, -1.779330707e-07f, -1.835049196e-07f, -1.890756766e-07f, -1.946453324e-07f, -2.002138774e-07f, -2.057813021e-07f, -2.113475970e-07f,
+-2.169127527e-07f, -2.224767595e-07f, -2.280396081e-07f, -2.336012890e-07f, -2.391617926e-07f, -2.447211095e-07f, -2.502792302e-07f, -2.558361452e-07f, -2.613918451e-07f, -2.669463204e-07f,
+-2.724995617e-07f, -2.780515594e-07f, -2.836023042e-07f, -2.891517865e-07f, -2.946999969e-07f, -3.002469260e-07f, -3.057925644e-07f, -3.113369025e-07f, -3.168799310e-07f, -3.224216404e-07f,
+-3.279620214e-07f, -3.335010644e-07f, -3.390387601e-07f, -3.445750990e-07f, -3.501100717e-07f, -3.556436689e-07f, -3.611758811e-07f, -3.667066989e-07f, -3.722361129e-07f, -3.777641137e-07f,
+-3.832906920e-07f, -3.888158383e-07f, -3.943395432e-07f, -3.998617975e-07f, -4.053825916e-07f, -4.109019163e-07f, -4.164197622e-07f, -4.219361198e-07f, -4.274509799e-07f, -4.329643331e-07f,
+-4.384761700e-07f, -4.439864813e-07f, -4.494952577e-07f, -4.550024897e-07f, -4.605081682e-07f, -4.660122836e-07f, -4.715148268e-07f, -4.770157883e-07f, -4.825151589e-07f, -4.880129292e-07f,
+-4.935090900e-07f, -4.990036319e-07f, -5.044965456e-07f, -5.099878218e-07f, -5.154774513e-07f, -5.209654247e-07f, -5.264517327e-07f, -5.319363661e-07f, -5.374193156e-07f, -5.429005719e-07f,
+-5.483801257e-07f, -5.538579678e-07f, -5.593340890e-07f, -5.648084798e-07f, -5.702811312e-07f, -5.757520338e-07f, -5.812211784e-07f, -5.866885558e-07f, -5.921541567e-07f, -5.976179719e-07f,
+-6.030799921e-07f, -6.085402083e-07f, -6.139986110e-07f, -6.194551911e-07f, -6.249099395e-07f, -6.303628469e-07f, -6.358139040e-07f, -6.412631017e-07f, -6.467104309e-07f, -6.521558823e-07f,
+-6.575994467e-07f, -6.630411150e-07f, -6.684808779e-07f, -6.739187264e-07f, -6.793546512e-07f, -6.847886432e-07f, -6.902206933e-07f, -6.956507922e-07f, -7.010789309e-07f, -7.065051002e-07f,
+-7.119292909e-07f, -7.173514940e-07f, -7.227717003e-07f, -7.281899007e-07f, -7.336060860e-07f, -7.390202471e-07f, -7.444323751e-07f, -7.498424606e-07f, -7.552504947e-07f, -7.606564682e-07f,
+-7.660603721e-07f, -7.714621973e-07f, -7.768619347e-07f, -7.822595752e-07f, -7.876551097e-07f, -7.930485292e-07f, -7.984398247e-07f, -8.038289870e-07f, -8.092160071e-07f, -8.146008761e-07f,
+-8.199835847e-07f, -8.253641241e-07f, -8.307424851e-07f, -8.361186588e-07f, -8.414926361e-07f, -8.468644080e-07f, -8.522339656e-07f, -8.576012997e-07f, -8.629664014e-07f, -8.683292618e-07f,
+-8.736898718e-07f, -8.790482223e-07f, -8.844043046e-07f, -8.897581095e-07f, -8.951096282e-07f, -9.004588516e-07f, -9.058057708e-07f, -9.111503768e-07f, -9.164926608e-07f, -9.218326137e-07f,
+-9.271702266e-07f, -9.325054905e-07f, -9.378383967e-07f, -9.431689361e-07f, -9.484970998e-07f, -9.538228789e-07f, -9.591462645e-07f, -9.644672477e-07f, -9.697858196e-07f, -9.751019714e-07f,
+-9.804156941e-07f, -9.857269789e-07f, -9.910358168e-07f, -9.963421991e-07f, -1.001646117e-06f, -1.006947561e-06f, -1.012246523e-06f, -1.017542994e-06f, -1.022836965e-06f, -1.028128428e-06f,
+-1.033417373e-06f, -1.038703791e-06f, -1.043987674e-06f, -1.049269013e-06f, -1.054547799e-06f, -1.059824024e-06f, -1.065097678e-06f, -1.070368753e-06f, -1.075637240e-06f, -1.080903130e-06f,
+-1.086166415e-06f, -1.091427085e-06f, -1.096685132e-06f, -1.101940548e-06f, -1.107193322e-06f, -1.112443448e-06f, -1.117690915e-06f, -1.122935716e-06f, -1.128177841e-06f, -1.133417282e-06f,
+-1.138654030e-06f, -1.143888076e-06f, -1.149119412e-06f, -1.154348029e-06f, -1.159573918e-06f, -1.164797070e-06f, -1.170017478e-06f, -1.175235132e-06f, -1.180450023e-06f, -1.185662143e-06f,
+-1.190871484e-06f, -1.196078036e-06f, -1.201281791e-06f, -1.206482740e-06f, -1.211680875e-06f, -1.216876187e-06f, -1.222068668e-06f, -1.227258308e-06f, -1.232445100e-06f, -1.237629034e-06f,
+-1.242810102e-06f, -1.247988296e-06f, -1.253163607e-06f, -1.258336025e-06f, -1.263505544e-06f, -1.268672154e-06f, -1.273835846e-06f, -1.278996613e-06f, -1.284154445e-06f, -1.289309334e-06f,
+-1.294461271e-06f, -1.299610249e-06f, -1.304756257e-06f, -1.309899289e-06f, -1.315039335e-06f, -1.320176387e-06f, -1.325310436e-06f, -1.330441475e-06f, -1.335569494e-06f, -1.340694484e-06f,
+-1.345816438e-06f, -1.350935348e-06f, -1.356051203e-06f, -1.361163997e-06f, -1.366273721e-06f, -1.371380366e-06f, -1.376483924e-06f, -1.381584386e-06f, -1.386681744e-06f, -1.391775990e-06f,
+-1.396867115e-06f, -1.401955110e-06f, -1.407039968e-06f, -1.412121681e-06f, -1.417200238e-06f, -1.422275633e-06f, -1.427347857e-06f, -1.432416902e-06f, -1.437482759e-06f, -1.442545419e-06f,
+-1.447604875e-06f, -1.452661119e-06f, -1.457714141e-06f, -1.462763934e-06f, -1.467810489e-06f, -1.472853798e-06f, -1.477893853e-06f, -1.482930645e-06f, -1.487964166e-06f, -1.492994408e-06f,
+-1.498021362e-06f, -1.503045021e-06f, -1.508065376e-06f, -1.513082419e-06f, -1.518096141e-06f, -1.523106535e-06f, -1.528113591e-06f, -1.533117303e-06f, -1.538117661e-06f, -1.543114657e-06f,
+-1.548108284e-06f, -1.553098533e-06f, -1.558085396e-06f, -1.563068865e-06f, -1.568048931e-06f, -1.573025586e-06f, -1.577998823e-06f, -1.582968633e-06f, -1.587935007e-06f, -1.592897939e-06f,
+-1.597857419e-06f, -1.602813439e-06f, -1.607765992e-06f, -1.612715070e-06f, -1.617660663e-06f, -1.622602765e-06f, -1.627541367e-06f, -1.632476461e-06f, -1.637408038e-06f, -1.642336092e-06f,
+-1.647260613e-06f, -1.652181594e-06f, -1.657099027e-06f, -1.662012903e-06f, -1.666923215e-06f, -1.671829955e-06f, -1.676733114e-06f, -1.681632685e-06f, -1.686528659e-06f, -1.691421029e-06f,
+-1.696309787e-06f, -1.701194924e-06f, -1.706076433e-06f, -1.710954305e-06f, -1.715828534e-06f, -1.720699110e-06f, -1.725566026e-06f, -1.730429274e-06f, -1.735288846e-06f, -1.740144734e-06f,
+-1.744996931e-06f, -1.749845427e-06f, -1.754690216e-06f, -1.759531290e-06f, -1.764368640e-06f, -1.769202259e-06f, -1.774032139e-06f, -1.778858272e-06f, -1.783680650e-06f, -1.788499266e-06f,
+-1.793314111e-06f, -1.798125177e-06f, -1.802932458e-06f, -1.807735945e-06f, -1.812535630e-06f, -1.817331505e-06f, -1.822123563e-06f, -1.826911796e-06f, -1.831696196e-06f, -1.836476756e-06f,
+-1.841253467e-06f, -1.846026322e-06f, -1.850795314e-06f, -1.855560433e-06f, -1.860321673e-06f, -1.865079027e-06f, -1.869832485e-06f, -1.874582041e-06f, -1.879327687e-06f, -1.884069415e-06f,
+-1.888807218e-06f, -1.893541087e-06f, -1.898271016e-06f, -1.902996996e-06f, -1.907719019e-06f, -1.912437080e-06f, -1.917151168e-06f, -1.921861278e-06f, -1.926567401e-06f, -1.931269530e-06f,
+-1.935967657e-06f, -1.940661774e-06f, -1.945351875e-06f, -1.950037951e-06f, -1.954719994e-06f, -1.959397998e-06f, -1.964071955e-06f, -1.968741857e-06f, -1.973407696e-06f, -1.978069466e-06f,
+-1.982727158e-06f, -1.987380766e-06f, -1.992030281e-06f, -1.996675696e-06f, -2.001317003e-06f, -2.005954196e-06f, -2.010587267e-06f, -2.015216207e-06f, -2.019841011e-06f, -2.024461669e-06f,
+-2.029078176e-06f, -2.033690523e-06f, -2.038298703e-06f, -2.042902709e-06f, -2.047502533e-06f, -2.052098168e-06f, -2.056689606e-06f, -2.061276840e-06f, -2.065859863e-06f, -2.070438667e-06f,
+-2.075013246e-06f, -2.079583590e-06f, -2.084149695e-06f, -2.088711551e-06f, -2.093269151e-06f, -2.097822490e-06f, -2.102371558e-06f, -2.106916349e-06f, -2.111456855e-06f, -2.115993069e-06f,
+-2.120524985e-06f, -2.125052594e-06f, -2.129575889e-06f, -2.134094864e-06f, -2.138609510e-06f, -2.143119821e-06f, -2.147625790e-06f, -2.152127409e-06f, -2.156624670e-06f, -2.161117568e-06f,
+-2.165606095e-06f, -2.170090243e-06f, -2.174570005e-06f, -2.179045374e-06f, -2.183516344e-06f, -2.187982906e-06f, -2.192445054e-06f, -2.196902781e-06f, -2.201356079e-06f, -2.205804942e-06f,
+-2.210249362e-06f, -2.214689332e-06f, -2.219124846e-06f, -2.223555895e-06f, -2.227982474e-06f, -2.232404574e-06f, -2.236822189e-06f, -2.241235313e-06f, -2.245643937e-06f, -2.250048055e-06f,
+-2.254447659e-06f, -2.258842744e-06f, -2.263233301e-06f, -2.267619325e-06f, -2.272000807e-06f, -2.276377741e-06f, -2.280750120e-06f, -2.285117936e-06f, -2.289481184e-06f, -2.293839857e-06f,
+-2.298193946e-06f, -2.302543446e-06f, -2.306888349e-06f, -2.311228648e-06f, -2.315564337e-06f, -2.319895409e-06f, -2.324221857e-06f, -2.328543673e-06f, -2.332860852e-06f, -2.337173387e-06f,
+-2.341481269e-06f, -2.345784494e-06f, -2.350083053e-06f, -2.354376940e-06f, -2.358666149e-06f, -2.362950672e-06f, -2.367230502e-06f, -2.371505634e-06f, -2.375776060e-06f, -2.380041773e-06f,
+-2.384302767e-06f, -2.388559034e-06f, -2.392810569e-06f, -2.397057365e-06f, -2.401299414e-06f, -2.405536710e-06f, -2.409769247e-06f, -2.413997018e-06f, -2.418220015e-06f, -2.422438233e-06f,
+-2.426651665e-06f, -2.430860304e-06f, -2.435064143e-06f, -2.439263177e-06f, -2.443457397e-06f, -2.447646798e-06f, -2.451831374e-06f, -2.456011116e-06f, -2.460186020e-06f, -2.464356078e-06f,
+-2.468521284e-06f, -2.472681631e-06f, -2.476837112e-06f, -2.480987722e-06f, -2.485133453e-06f, -2.489274300e-06f, -2.493410255e-06f, -2.497541313e-06f, -2.501667466e-06f, -2.505788708e-06f,
+-2.509905033e-06f, -2.514016434e-06f, -2.518122905e-06f, -2.522224440e-06f, -2.526321031e-06f, -2.530412674e-06f, -2.534499360e-06f, -2.538581084e-06f, -2.542657839e-06f, -2.546729619e-06f,
+-2.550796418e-06f, -2.554858230e-06f, -2.558915047e-06f, -2.562966863e-06f, -2.567013673e-06f, -2.571055470e-06f, -2.575092248e-06f, -2.579124000e-06f, -2.583150720e-06f, -2.587172401e-06f,
+-2.591189038e-06f, -2.595200625e-06f, -2.599207154e-06f, -2.603208620e-06f, -2.607205016e-06f, -2.611196337e-06f, -2.615182576e-06f, -2.619163727e-06f, -2.623139783e-06f, -2.627110739e-06f,
+-2.631076588e-06f, -2.635037324e-06f, -2.638992941e-06f, -2.642943433e-06f, -2.646888794e-06f, -2.650829017e-06f, -2.654764096e-06f, -2.658694026e-06f, -2.662618801e-06f, -2.666538413e-06f,
+-2.670452857e-06f, -2.674362128e-06f, -2.678266218e-06f, -2.682165122e-06f, -2.686058834e-06f, -2.689947348e-06f, -2.693830658e-06f, -2.697708758e-06f, -2.701581641e-06f, -2.705449302e-06f,
+-2.709311735e-06f, -2.713168934e-06f, -2.717020893e-06f, -2.720867606e-06f, -2.724709066e-06f, -2.728545269e-06f, -2.732376208e-06f, -2.736201878e-06f, -2.740022271e-06f, -2.743837383e-06f,
+-2.747647208e-06f, -2.751451740e-06f, -2.755250972e-06f, -2.759044899e-06f, -2.762833516e-06f, -2.766616815e-06f, -2.770394793e-06f, -2.774167442e-06f, -2.777934757e-06f, -2.781696732e-06f,
+-2.785453362e-06f, -2.789204640e-06f, -2.792950560e-06f, -2.796691118e-06f, -2.800426308e-06f, -2.804156123e-06f, -2.807880557e-06f, -2.811599606e-06f, -2.815313264e-06f, -2.819021524e-06f,
+-2.822724381e-06f, -2.826421830e-06f, -2.830113865e-06f, -2.833800479e-06f, -2.837481669e-06f, -2.841157427e-06f, -2.844827748e-06f, -2.848492627e-06f, -2.852152058e-06f, -2.855806036e-06f,
+-2.859454554e-06f, -2.863097608e-06f, -2.866735191e-06f, -2.870367299e-06f, -2.873993925e-06f, -2.877615065e-06f, -2.881230712e-06f, -2.884840862e-06f, -2.888445508e-06f, -2.892044645e-06f,
+-2.895638268e-06f, -2.899226371e-06f, -2.902808949e-06f, -2.906385997e-06f, -2.909957508e-06f, -2.913523477e-06f, -2.917083900e-06f, -2.920638771e-06f, -2.924188084e-06f, -2.927731833e-06f,
+-2.931270014e-06f, -2.934802622e-06f, -2.938329650e-06f, -2.941851094e-06f, -2.945366948e-06f, -2.948877207e-06f, -2.952381865e-06f, -2.955880917e-06f, -2.959374359e-06f, -2.962862184e-06f,
+-2.966344388e-06f, -2.969820965e-06f, -2.973291909e-06f, -2.976757217e-06f, -2.980216882e-06f, -2.983670899e-06f, -2.987119263e-06f, -2.990561969e-06f, -2.993999012e-06f, -2.997430386e-06f,
+-3.000856087e-06f, -3.004276109e-06f, -3.007690446e-06f, -3.011099095e-06f, -3.014502050e-06f, -3.017899305e-06f, -3.021290856e-06f, -3.024676698e-06f, -3.028056825e-06f, -3.031431232e-06f,
+-3.034799915e-06f, -3.038162868e-06f, -3.041520086e-06f, -3.044871565e-06f, -3.048217298e-06f, -3.051557282e-06f, -3.054891512e-06f, -3.058219981e-06f, -3.061542686e-06f, -3.064859621e-06f,
+-3.068170782e-06f, -3.071476163e-06f, -3.074775759e-06f, -3.078069566e-06f, -3.081357579e-06f, -3.084639793e-06f, -3.087916202e-06f, -3.091186803e-06f, -3.094451590e-06f, -3.097710558e-06f,
+-3.100963703e-06f, -3.104211019e-06f, -3.107452503e-06f, -3.110688148e-06f, -3.113917951e-06f, -3.117141906e-06f, -3.120360009e-06f, -3.123572255e-06f, -3.126778639e-06f, -3.129979156e-06f,
+-3.133173802e-06f, -3.136362572e-06f, -3.139545462e-06f, -3.142722466e-06f, -3.145893580e-06f, -3.149058799e-06f, -3.152218118e-06f, -3.155371534e-06f, -3.158519041e-06f, -3.161660634e-06f,
+-3.164796310e-06f, -3.167926063e-06f, -3.171049888e-06f, -3.174167782e-06f, -3.177279740e-06f, -3.180385756e-06f, -3.183485827e-06f, -3.186579948e-06f, -3.189668115e-06f, -3.192750322e-06f,
+-3.195826566e-06f, -3.198896841e-06f, -3.201961144e-06f, -3.205019470e-06f, -3.208071815e-06f, -3.211118173e-06f, -3.214158541e-06f, -3.217192914e-06f, -3.220221287e-06f, -3.223243657e-06f,
+-3.226260019e-06f, -3.229270368e-06f, -3.232274701e-06f, -3.235273012e-06f, -3.238265297e-06f, -3.241251552e-06f, -3.244231773e-06f, -3.247205956e-06f, -3.250174095e-06f, -3.253136187e-06f,
+-3.256092228e-06f, -3.259042213e-06f, -3.261986137e-06f, -3.264923998e-06f, -3.267855789e-06f, -3.270781508e-06f, -3.273701150e-06f, -3.276614710e-06f, -3.279522185e-06f, -3.282423571e-06f,
+-3.285318862e-06f, -3.288208055e-06f, -3.291091147e-06f, -3.293968131e-06f, -3.296839006e-06f, -3.299703765e-06f, -3.302562406e-06f, -3.305414925e-06f, -3.308261316e-06f, -3.311101576e-06f,
+-3.313935701e-06f, -3.316763687e-06f, -3.319585530e-06f, -3.322401226e-06f, -3.325210771e-06f, -3.328014160e-06f, -3.330811390e-06f, -3.333602457e-06f, -3.336387356e-06f, -3.339166085e-06f,
+-3.341938638e-06f, -3.344705012e-06f, -3.347465203e-06f, -3.350219207e-06f, -3.352967021e-06f, -3.355708640e-06f, -3.358444060e-06f, -3.361173277e-06f, -3.363896288e-06f, -3.366613089e-06f,
+-3.369323676e-06f, -3.372028045e-06f, -3.374726192e-06f, -3.377418113e-06f, -3.380103806e-06f, -3.382783265e-06f, -3.385456487e-06f, -3.388123469e-06f, -3.390784206e-06f, -3.393438695e-06f,
+-3.396086932e-06f, -3.398728914e-06f, -3.401364636e-06f, -3.403994095e-06f, -3.406617287e-06f, -3.409234210e-06f, -3.411844858e-06f, -3.414449228e-06f, -3.417047317e-06f, -3.419639121e-06f,
+-3.422224637e-06f, -3.424803860e-06f, -3.427376788e-06f, -3.429943416e-06f, -3.432503742e-06f, -3.435057761e-06f, -3.437605469e-06f, -3.440146865e-06f, -3.442681943e-06f, -3.445210701e-06f,
+-3.447733134e-06f, -3.450249240e-06f, -3.452759015e-06f, -3.455262456e-06f, -3.457759558e-06f, -3.460250319e-06f, -3.462734735e-06f, -3.465212803e-06f, -3.467684519e-06f, -3.470149880e-06f,
+-3.472608882e-06f, -3.475061523e-06f, -3.477507798e-06f, -3.479947705e-06f, -3.482381240e-06f, -3.484808400e-06f, -3.487229181e-06f, -3.489643580e-06f, -3.492051595e-06f, -3.494453220e-06f,
+-3.496848454e-06f, -3.499237293e-06f, -3.501619734e-06f, -3.503995773e-06f, -3.506365408e-06f, -3.508728634e-06f, -3.511085450e-06f, -3.513435851e-06f, -3.515779835e-06f, -3.518117398e-06f,
+-3.520448538e-06f, -3.522773250e-06f, -3.525091533e-06f, -3.527403382e-06f, -3.529708795e-06f, -3.532007768e-06f, -3.534300299e-06f, -3.536586384e-06f, -3.538866021e-06f, -3.541139206e-06f,
+-3.543405937e-06f, -3.545666209e-06f, -3.547920021e-06f, -3.550167369e-06f, -3.552408251e-06f, -3.554642662e-06f, -3.556870601e-06f, -3.559092064e-06f, -3.561307049e-06f, -3.563515552e-06f,
+-3.565717571e-06f, -3.567913102e-06f, -3.570102143e-06f, -3.572284690e-06f, -3.574460742e-06f, -3.576630295e-06f, -3.578793346e-06f, -3.580949892e-06f, -3.583099931e-06f, -3.585243460e-06f,
+-3.587380475e-06f, -3.589510975e-06f, -3.591634956e-06f, -3.593752416e-06f, -3.595863351e-06f, -3.597967760e-06f, -3.600065639e-06f, -3.602156985e-06f, -3.604241797e-06f, -3.606320070e-06f,
+-3.608391804e-06f, -3.610456994e-06f, -3.612515638e-06f, -3.614567733e-06f, -3.616613278e-06f, -3.618652269e-06f, -3.620684703e-06f, -3.622710578e-06f, -3.624729892e-06f, -3.626742642e-06f,
+-3.628748825e-06f, -3.630748438e-06f, -3.632741480e-06f, -3.634727948e-06f, -3.636707838e-06f, -3.638681149e-06f, -3.640647878e-06f, -3.642608023e-06f, -3.644561581e-06f, -3.646508549e-06f,
+-3.648448926e-06f, -3.650382708e-06f, -3.652309894e-06f, -3.654230481e-06f, -3.656144466e-06f, -3.658051847e-06f, -3.659952622e-06f, -3.661846788e-06f, -3.663734343e-06f, -3.665615285e-06f,
+-3.667489611e-06f, -3.669357320e-06f, -3.671218407e-06f, -3.673072872e-06f, -3.674920713e-06f, -3.676761926e-06f, -3.678596509e-06f, -3.680424461e-06f, -3.682245779e-06f, -3.684060460e-06f,
+-3.685868504e-06f, -3.687669906e-06f, -3.689464666e-06f, -3.691252781e-06f, -3.693034248e-06f, -3.694809067e-06f, -3.696577233e-06f, -3.698338746e-06f, -3.700093604e-06f, -3.701841803e-06f,
+-3.703583343e-06f, -3.705318221e-06f, -3.707046434e-06f, -3.708767981e-06f, -3.710482861e-06f, -3.712191069e-06f, -3.713892606e-06f, -3.715587468e-06f, -3.717275654e-06f, -3.718957161e-06f,
+-3.720631989e-06f, -3.722300134e-06f, -3.723961594e-06f, -3.725616369e-06f, -3.727264456e-06f, -3.728905852e-06f, -3.730540557e-06f, -3.732168567e-06f, -3.733789882e-06f, -3.735404500e-06f,
+-3.737012418e-06f, -3.738613634e-06f, -3.740208148e-06f, -3.741795956e-06f, -3.743377058e-06f, -3.744951451e-06f, -3.746519134e-06f, -3.748080105e-06f, -3.749634362e-06f, -3.751181903e-06f,
+-3.752722726e-06f, -3.754256831e-06f, -3.755784214e-06f, -3.757304875e-06f, -3.758818812e-06f, -3.760326023e-06f, -3.761826506e-06f, -3.763320260e-06f, -3.764807283e-06f, -3.766287573e-06f,
+-3.767761130e-06f, -3.769227950e-06f, -3.770688033e-06f, -3.772141377e-06f, -3.773587980e-06f, -3.775027841e-06f, -3.776460959e-06f, -3.777887331e-06f, -3.779306957e-06f, -3.780719834e-06f,
+-3.782125961e-06f, -3.783525338e-06f, -3.784917961e-06f, -3.786303830e-06f, -3.787682944e-06f, -3.789055300e-06f, -3.790420898e-06f, -3.791779736e-06f, -3.793131812e-06f, -3.794477126e-06f,
+-3.795815675e-06f, -3.797147459e-06f, -3.798472476e-06f, -3.799790725e-06f, -3.801102204e-06f, -3.802406912e-06f, -3.803704848e-06f, -3.804996011e-06f, -3.806280398e-06f, -3.807558010e-06f,
+-3.808828844e-06f, -3.810092899e-06f, -3.811350175e-06f, -3.812600669e-06f, -3.813844381e-06f, -3.815081310e-06f, -3.816311454e-06f, -3.817534812e-06f, -3.818751383e-06f, -3.819961165e-06f,
+-3.821164159e-06f, -3.822360361e-06f, -3.823549772e-06f, -3.824732391e-06f, -3.825908215e-06f, -3.827077245e-06f, -3.828239478e-06f, -3.829394915e-06f, -3.830543553e-06f, -3.831685392e-06f,
+-3.832820431e-06f, -3.833948669e-06f, -3.835070104e-06f, -3.836184737e-06f, -3.837292565e-06f, -3.838393588e-06f, -3.839487804e-06f, -3.840575214e-06f, -3.841655816e-06f, -3.842729609e-06f,
+-3.843796592e-06f, -3.844856764e-06f, -3.845910125e-06f, -3.846956673e-06f, -3.847996408e-06f, -3.849029329e-06f, -3.850055435e-06f, -3.851074725e-06f, -3.852087198e-06f, -3.853092854e-06f,
+-3.854091691e-06f, -3.855083710e-06f, -3.856068909e-06f, -3.857047287e-06f, -3.858018844e-06f, -3.858983579e-06f, -3.859941491e-06f, -3.860892580e-06f, -3.861836845e-06f, -3.862774285e-06f,
+-3.863704899e-06f, -3.864628688e-06f, -3.865545649e-06f, -3.866455783e-06f, -3.867359089e-06f, -3.868255567e-06f, -3.869145215e-06f, -3.870028034e-06f, -3.870904022e-06f, -3.871773179e-06f,
+-3.872635504e-06f, -3.873490998e-06f, -3.874339659e-06f, -3.875181487e-06f, -3.876016481e-06f, -3.876844642e-06f, -3.877665967e-06f, -3.878480458e-06f, -3.879288113e-06f, -3.880088933e-06f,
+-3.880882916e-06f, -3.881670062e-06f, -3.882450371e-06f, -3.883223843e-06f, -3.883990476e-06f, -3.884750272e-06f, -3.885503228e-06f, -3.886249346e-06f, -3.886988624e-06f, -3.887721062e-06f,
+-3.888446661e-06f, -3.889165419e-06f, -3.889877337e-06f, -3.890582414e-06f, -3.891280650e-06f, -3.891972044e-06f, -3.892656597e-06f, -3.893334308e-06f, -3.894005176e-06f, -3.894669203e-06f,
+-3.895326387e-06f, -3.895976729e-06f, -3.896620228e-06f, -3.897256883e-06f, -3.897886696e-06f, -3.898509666e-06f, -3.899125792e-06f, -3.899735074e-06f, -3.900337514e-06f, -3.900933109e-06f,
+-3.901521861e-06f, -3.902103769e-06f, -3.902678833e-06f, -3.903247053e-06f, -3.903808430e-06f, -3.904362962e-06f, -3.904910651e-06f, -3.905451496e-06f, -3.905985497e-06f, -3.906512654e-06f,
+-3.907032967e-06f, -3.907546436e-06f, -3.908053062e-06f, -3.908552845e-06f, -3.909045783e-06f, -3.909531879e-06f, -3.910011131e-06f, -3.910483540e-06f, -3.910949106e-06f, -3.911407829e-06f,
+-3.911859710e-06f, -3.912304748e-06f, -3.912742944e-06f, -3.913174297e-06f, -3.913598809e-06f, -3.914016479e-06f, -3.914427308e-06f, -3.914831295e-06f, -3.915228441e-06f, -3.915618747e-06f,
+-3.916002213e-06f, -3.916378838e-06f, -3.916748623e-06f, -3.917111569e-06f, -3.917467676e-06f, -3.917816945e-06f, -3.918159374e-06f, -3.918494966e-06f, -3.918823720e-06f, -3.919145637e-06f,
+-3.919460716e-06f, -3.919768960e-06f, -3.920070367e-06f, -3.920364938e-06f, -3.920652675e-06f, -3.920933576e-06f, -3.921207644e-06f, -3.921474877e-06f, -3.921735278e-06f, -3.921988845e-06f,
+-3.922235581e-06f, -3.922475485e-06f, -3.922708557e-06f, -3.922934799e-06f, -3.923154211e-06f, -3.923366793e-06f, -3.923572547e-06f, -3.923771472e-06f, -3.923963569e-06f, -3.924148840e-06f,
+-3.924327284e-06f, -3.924498902e-06f, -3.924663696e-06f, -3.924821665e-06f, -3.924972810e-06f, -3.925117132e-06f, -3.925254631e-06f, -3.925385310e-06f, -3.925509167e-06f, -3.925626204e-06f,
+-3.925736422e-06f, -3.925839821e-06f, -3.925936402e-06f, -3.926026166e-06f, -3.926109114e-06f, -3.926185246e-06f, -3.926254564e-06f, -3.926317068e-06f, -3.926372760e-06f, -3.926421639e-06f,
+-3.926463706e-06f, -3.926498964e-06f, -3.926527412e-06f, -3.926549052e-06f, -3.926563884e-06f, -3.926571909e-06f, -3.926573129e-06f, -3.926567544e-06f, -3.926555155e-06f, -3.926535963e-06f,
+-3.926509969e-06f, -3.926477175e-06f, -3.926437581e-06f, -3.926391188e-06f, -3.926337997e-06f, -3.926278009e-06f, -3.926211226e-06f, -3.926137648e-06f, -3.926057277e-06f, -3.925970113e-06f,
+-3.925876158e-06f, -3.925775412e-06f, -3.925667878e-06f, -3.925553556e-06f, -3.925432447e-06f, -3.925304552e-06f, -3.925169873e-06f, -3.925028410e-06f, -3.924880166e-06f, -3.924725141e-06f,
+-3.924563336e-06f, -3.924394752e-06f, -3.924219392e-06f, -3.924037255e-06f, -3.923848344e-06f, -3.923652660e-06f, -3.923450204e-06f, -3.923240976e-06f, -3.923024980e-06f, -3.922802215e-06f,
+-3.922572683e-06f, -3.922336387e-06f, -3.922093325e-06f, -3.921843502e-06f, -3.921586917e-06f, -3.921323572e-06f, -3.921053468e-06f, -3.920776608e-06f, -3.920492991e-06f, -3.920202621e-06f,
+-3.919905498e-06f, -3.919601623e-06f, -3.919290999e-06f, -3.918973626e-06f, -3.918649506e-06f, -3.918318641e-06f, -3.917981032e-06f, -3.917636681e-06f, -3.917285589e-06f, -3.916927758e-06f,
+-3.916563190e-06f, -3.916191885e-06f, -3.915813846e-06f, -3.915429074e-06f, -3.915037571e-06f, -3.914639338e-06f, -3.914234377e-06f, -3.913822690e-06f, -3.913404278e-06f, -3.912979143e-06f,
+-3.912547287e-06f, -3.912108711e-06f, -3.911663418e-06f, -3.911211408e-06f, -3.910752683e-06f, -3.910287246e-06f, -3.909815098e-06f, -3.909336241e-06f, -3.908850676e-06f, -3.908358406e-06f,
+-3.907859431e-06f, -3.907353755e-06f, -3.906841378e-06f, -3.906322303e-06f, -3.905796532e-06f, -3.905264065e-06f, -3.904724906e-06f, -3.904179056e-06f, -3.903626516e-06f, -3.903067290e-06f,
+-3.902501378e-06f, -3.901928783e-06f, -3.901349506e-06f, -3.900763550e-06f, -3.900170917e-06f, -3.899571608e-06f, -3.898965625e-06f, -3.898352970e-06f, -3.897733646e-06f, -3.897107655e-06f,
+-3.896474998e-06f, -3.895835677e-06f, -3.895189695e-06f, -3.894537053e-06f, -3.893877754e-06f, -3.893211800e-06f, -3.892539192e-06f, -3.891859934e-06f, -3.891174026e-06f, -3.890481472e-06f,
+-3.889782273e-06f, -3.889076431e-06f, -3.888363949e-06f, -3.887644828e-06f, -3.886919072e-06f, -3.886186682e-06f, -3.885447660e-06f, -3.884702008e-06f, -3.883949729e-06f, -3.883190826e-06f,
+-3.882425299e-06f, -3.881653152e-06f, -3.880874387e-06f, -3.880089006e-06f, -3.879297011e-06f, -3.878498405e-06f, -3.877693190e-06f, -3.876881368e-06f, -3.876062942e-06f, -3.875237913e-06f,
+-3.874406285e-06f, -3.873568060e-06f, -3.872723240e-06f, -3.871871827e-06f, -3.871013824e-06f, -3.870149234e-06f, -3.869278058e-06f, -3.868400300e-06f, -3.867515960e-06f, -3.866625044e-06f,
+-3.865727551e-06f, -3.864823486e-06f, -3.863912850e-06f, -3.862995646e-06f, -3.862071876e-06f, -3.861141544e-06f, -3.860204651e-06f, -3.859261201e-06f, -3.858311195e-06f, -3.857354636e-06f,
+-3.856391527e-06f, -3.855421871e-06f, -3.854445670e-06f, -3.853462926e-06f, -3.852473643e-06f, -3.851477822e-06f, -3.850475467e-06f, -3.849466580e-06f, -3.848451164e-06f, -3.847429222e-06f,
+-3.846400756e-06f, -3.845365769e-06f, -3.844324263e-06f, -3.843276242e-06f, -3.842221708e-06f, -3.841160664e-06f, -3.840093113e-06f, -3.839019057e-06f, -3.837938499e-06f, -3.836851442e-06f,
+-3.835757889e-06f, -3.834657842e-06f, -3.833551305e-06f, -3.832438280e-06f, -3.831318770e-06f, -3.830192778e-06f, -3.829060306e-06f, -3.827921359e-06f, -3.826775937e-06f, -3.825624046e-06f,
+-3.824465686e-06f, -3.823300862e-06f, -3.822129576e-06f, -3.820951832e-06f, -3.819767631e-06f, -3.818576977e-06f, -3.817379874e-06f, -3.816176323e-06f, -3.814966328e-06f, -3.813749893e-06f,
+-3.812527019e-06f, -3.811297710e-06f, -3.810061970e-06f, -3.808819801e-06f, -3.807571205e-06f, -3.806316187e-06f, -3.805054750e-06f, -3.803786896e-06f, -3.802512628e-06f, -3.801231950e-06f,
+-3.799944865e-06f, -3.798651375e-06f, -3.797351485e-06f, -3.796045197e-06f, -3.794732514e-06f, -3.793413440e-06f, -3.792087977e-06f, -3.790756130e-06f, -3.789417900e-06f, -3.788073292e-06f,
+-3.786722309e-06f, -3.785364953e-06f, -3.784001228e-06f, -3.782631138e-06f, -3.781254685e-06f, -3.779871873e-06f, -3.778482706e-06f, -3.777087186e-06f, -3.775685316e-06f, -3.774277101e-06f,
+-3.772862543e-06f, -3.771441646e-06f, -3.770014413e-06f, -3.768580848e-06f, -3.767140953e-06f, -3.765694733e-06f, -3.764242191e-06f, -3.762783330e-06f, -3.761318153e-06f, -3.759846664e-06f,
+-3.758368866e-06f, -3.756884764e-06f, -3.755394359e-06f, -3.753897657e-06f, -3.752394659e-06f, -3.750885371e-06f, -3.749369794e-06f, -3.747847934e-06f, -3.746319792e-06f, -3.744785374e-06f,
+-3.743244682e-06f, -3.741697720e-06f, -3.740144491e-06f, -3.738584999e-06f, -3.737019248e-06f, -3.735447241e-06f, -3.733868983e-06f, -3.732284475e-06f, -3.730693723e-06f, -3.729096729e-06f,
+-3.727493498e-06f, -3.725884033e-06f, -3.724268337e-06f, -3.722646415e-06f, -3.721018270e-06f, -3.719383906e-06f, -3.717743326e-06f, -3.716096534e-06f, -3.714443535e-06f, -3.712784331e-06f,
+-3.711118926e-06f, -3.709447325e-06f, -3.707769530e-06f, -3.706085547e-06f, -3.704395378e-06f, -3.702699027e-06f, -3.700996498e-06f, -3.699287796e-06f, -3.697572923e-06f, -3.695851884e-06f,
+-3.694124682e-06f, -3.692391322e-06f, -3.690651807e-06f, -3.688906141e-06f, -3.687154328e-06f, -3.685396372e-06f, -3.683632277e-06f, -3.681862046e-06f, -3.680085684e-06f, -3.678303195e-06f,
+-3.676514583e-06f, -3.674719851e-06f, -3.672919003e-06f, -3.671112044e-06f, -3.669298978e-06f, -3.667479808e-06f, -3.665654539e-06f, -3.663823174e-06f, -3.661985717e-06f, -3.660142174e-06f,
+-3.658292547e-06f, -3.656436841e-06f, -3.654575059e-06f, -3.652707207e-06f, -3.650833287e-06f, -3.648953305e-06f, -3.647067264e-06f, -3.645175168e-06f, -3.643277022e-06f, -3.641372829e-06f,
+-3.639462594e-06f, -3.637546321e-06f, -3.635624014e-06f, -3.633695678e-06f, -3.631761316e-06f, -3.629820932e-06f, -3.627874532e-06f, -3.625922118e-06f, -3.623963696e-06f, -3.621999270e-06f,
+-3.620028844e-06f, -3.618052421e-06f, -3.616070007e-06f, -3.614081606e-06f, -3.612087221e-06f, -3.610086858e-06f, -3.608080521e-06f, -3.606068213e-06f, -3.604049940e-06f, -3.602025705e-06f,
+-3.599995513e-06f, -3.597959369e-06f, -3.595917276e-06f, -3.593869239e-06f, -3.591815263e-06f, -3.589755351e-06f, -3.587689509e-06f, -3.585617740e-06f, -3.583540049e-06f, -3.581456441e-06f,
+-3.579366920e-06f, -3.577271490e-06f, -3.575170156e-06f, -3.573062923e-06f, -3.570949794e-06f, -3.568830775e-06f, -3.566705869e-06f, -3.564575082e-06f, -3.562438418e-06f, -3.560295881e-06f,
+-3.558147476e-06f, -3.555993208e-06f, -3.553833081e-06f, -3.551667099e-06f, -3.549495268e-06f, -3.547317592e-06f, -3.545134075e-06f, -3.542944722e-06f, -3.540749537e-06f, -3.538548526e-06f,
+-3.536341693e-06f, -3.534129042e-06f, -3.531910579e-06f, -3.529686308e-06f, -3.527456233e-06f, -3.525220359e-06f, -3.522978691e-06f, -3.520731234e-06f, -3.518477993e-06f, -3.516218971e-06f,
+-3.513954174e-06f, -3.511683607e-06f, -3.509407274e-06f, -3.507125181e-06f, -3.504837331e-06f, -3.502543729e-06f, -3.500244382e-06f, -3.497939292e-06f, -3.495628465e-06f, -3.493311906e-06f,
+-3.490989620e-06f, -3.488661612e-06f, -3.486327885e-06f, -3.483988446e-06f, -3.481643299e-06f, -3.479292449e-06f, -3.476935901e-06f, -3.474573659e-06f, -3.472205729e-06f, -3.469832116e-06f,
+-3.467452824e-06f, -3.465067858e-06f, -3.462677224e-06f, -3.460280926e-06f, -3.457878969e-06f, -3.455471358e-06f, -3.453058098e-06f, -3.450639195e-06f, -3.448214652e-06f, -3.445784476e-06f,
+-3.443348670e-06f, -3.440907241e-06f, -3.438460193e-06f, -3.436007532e-06f, -3.433549261e-06f, -3.431085387e-06f, -3.428615914e-06f, -3.426140847e-06f, -3.423660192e-06f, -3.421173954e-06f,
+-3.418682137e-06f, -3.416184747e-06f, -3.413681789e-06f, -3.411173268e-06f, -3.408659190e-06f, -3.406139558e-06f, -3.403614379e-06f, -3.401083658e-06f, -3.398547400e-06f, -3.396005609e-06f,
+-3.393458292e-06f, -3.390905453e-06f, -3.388347098e-06f, -3.385783231e-06f, -3.383213859e-06f, -3.380638985e-06f, -3.378058616e-06f, -3.375472757e-06f, -3.372881413e-06f, -3.370284590e-06f,
+-3.367682292e-06f, -3.365074524e-06f, -3.362461293e-06f, -3.359842603e-06f, -3.357218460e-06f, -3.354588869e-06f, -3.351953835e-06f, -3.349313365e-06f, -3.346667462e-06f, -3.344016132e-06f,
+-3.341359382e-06f, -3.338697216e-06f, -3.336029639e-06f, -3.333356657e-06f, -3.330678275e-06f, -3.327994499e-06f, -3.325305335e-06f, -3.322610787e-06f, -3.319910861e-06f, -3.317205562e-06f,
+-3.314494896e-06f, -3.311778869e-06f, -3.309057486e-06f, -3.306330751e-06f, -3.303598672e-06f, -3.300861253e-06f, -3.298118499e-06f, -3.295370417e-06f, -3.292617012e-06f, -3.289858289e-06f,
+-3.287094254e-06f, -3.284324913e-06f, -3.281550270e-06f, -3.278770332e-06f, -3.275985104e-06f, -3.273194592e-06f, -3.270398801e-06f, -3.267597736e-06f, -3.264791405e-06f, -3.261979811e-06f,
+-3.259162961e-06f, -3.256340860e-06f, -3.253513515e-06f, -3.250680929e-06f, -3.247843111e-06f, -3.245000063e-06f, -3.242151794e-06f, -3.239298308e-06f, -3.236439611e-06f, -3.233575708e-06f,
+-3.230706606e-06f, -3.227832309e-06f, -3.224952825e-06f, -3.222068158e-06f, -3.219178314e-06f, -3.216283299e-06f, -3.213383119e-06f, -3.210477779e-06f, -3.207567286e-06f, -3.204651644e-06f,
+-3.201730861e-06f, -3.198804941e-06f, -3.195873890e-06f, -3.192937715e-06f, -3.189996420e-06f, -3.187050012e-06f, -3.184098497e-06f, -3.181141881e-06f, -3.178180169e-06f, -3.175213367e-06f,
+-3.172241481e-06f, -3.169264517e-06f, -3.166282481e-06f, -3.163295379e-06f, -3.160303216e-06f, -3.157305999e-06f, -3.154303733e-06f, -3.151296424e-06f, -3.148284079e-06f, -3.145266703e-06f,
+-3.142244302e-06f, -3.139216882e-06f, -3.136184450e-06f, -3.133147010e-06f, -3.130104569e-06f, -3.127057134e-06f, -3.124004709e-06f, -3.120947301e-06f, -3.117884916e-06f, -3.114817560e-06f,
+-3.111745240e-06f, -3.108667960e-06f, -3.105585727e-06f, -3.102498548e-06f, -3.099406427e-06f, -3.096309372e-06f, -3.093207388e-06f, -3.090100482e-06f, -3.086988659e-06f, -3.083871925e-06f,
+-3.080750288e-06f, -3.077623752e-06f, -3.074492323e-06f, -3.071356009e-06f, -3.068214815e-06f, -3.065068747e-06f, -3.061917812e-06f, -3.058762015e-06f, -3.055601363e-06f, -3.052435862e-06f,
+-3.049265518e-06f, -3.046090337e-06f, -3.042910326e-06f, -3.039725490e-06f, -3.036535836e-06f, -3.033341370e-06f, -3.030142098e-06f, -3.026938027e-06f, -3.023729163e-06f, -3.020515511e-06f,
+-3.017297079e-06f, -3.014073872e-06f, -3.010845897e-06f, -3.007613160e-06f, -3.004375667e-06f, -3.001133425e-06f, -2.997886440e-06f, -2.994634718e-06f, -2.991378265e-06f, -2.988117089e-06f,
+-2.984851194e-06f, -2.981580588e-06f, -2.978305276e-06f, -2.975025266e-06f, -2.971740563e-06f, -2.968451174e-06f, -2.965157106e-06f, -2.961858363e-06f, -2.958554954e-06f, -2.955246884e-06f,
+-2.951934160e-06f, -2.948616789e-06f, -2.945294775e-06f, -2.941968127e-06f, -2.938636850e-06f, -2.935300951e-06f, -2.931960436e-06f, -2.928615312e-06f, -2.925265585e-06f, -2.921911262e-06f,
+-2.918552349e-06f, -2.915188852e-06f, -2.911820779e-06f, -2.908448135e-06f, -2.905070927e-06f, -2.901689162e-06f, -2.898302846e-06f, -2.894911985e-06f, -2.891516586e-06f, -2.888116656e-06f,
+-2.884712202e-06f, -2.881303228e-06f, -2.877889744e-06f, -2.874471754e-06f, -2.871049265e-06f, -2.867622284e-06f, -2.864190818e-06f, -2.860754873e-06f, -2.857314456e-06f, -2.853869573e-06f,
+-2.850420230e-06f, -2.846966436e-06f, -2.843508195e-06f, -2.840045516e-06f, -2.836578403e-06f, -2.833106865e-06f, -2.829630908e-06f, -2.826150537e-06f, -2.822665761e-06f, -2.819176586e-06f,
+-2.815683018e-06f, -2.812185063e-06f, -2.808682730e-06f, -2.805176024e-06f, -2.801664952e-06f, -2.798149521e-06f, -2.794629737e-06f, -2.791105608e-06f, -2.787577139e-06f, -2.784044338e-06f,
+-2.780507212e-06f, -2.776965767e-06f, -2.773420010e-06f, -2.769869947e-06f, -2.766315586e-06f, -2.762756934e-06f, -2.759193996e-06f, -2.755626780e-06f, -2.752055293e-06f, -2.748479541e-06f,
+-2.744899531e-06f, -2.741315270e-06f, -2.737726765e-06f, -2.734134023e-06f, -2.730537050e-06f, -2.726935853e-06f, -2.723330440e-06f, -2.719720817e-06f, -2.716106990e-06f, -2.712488967e-06f,
+-2.708866755e-06f, -2.705240360e-06f, -2.701609790e-06f, -2.697975051e-06f, -2.694336150e-06f, -2.690693094e-06f, -2.687045890e-06f, -2.683394545e-06f, -2.679739065e-06f, -2.676079458e-06f,
+-2.672415731e-06f, -2.668747891e-06f, -2.665075944e-06f, -2.661399897e-06f, -2.657719758e-06f, -2.654035533e-06f, -2.650347229e-06f, -2.646654854e-06f, -2.642958414e-06f, -2.639257916e-06f,
+-2.635553368e-06f, -2.631844776e-06f, -2.628132147e-06f, -2.624415488e-06f, -2.620694807e-06f, -2.616970109e-06f, -2.613241404e-06f, -2.609508696e-06f, -2.605771995e-06f, -2.602031305e-06f,
+-2.598286635e-06f, -2.594537992e-06f, -2.590785382e-06f, -2.587028813e-06f, -2.583268292e-06f, -2.579503825e-06f, -2.575735421e-06f, -2.571963085e-06f, -2.568186826e-06f, -2.564406650e-06f,
+-2.560622564e-06f, -2.556834576e-06f, -2.553042692e-06f, -2.549246920e-06f, -2.545447267e-06f, -2.541643740e-06f, -2.537836346e-06f, -2.534025092e-06f, -2.530209986e-06f, -2.526391034e-06f,
+-2.522568244e-06f, -2.518741623e-06f, -2.514911179e-06f, -2.511076917e-06f, -2.507238846e-06f, -2.503396973e-06f, -2.499551304e-06f, -2.495701848e-06f, -2.491848611e-06f, -2.487991600e-06f,
+-2.484130824e-06f, -2.480266288e-06f, -2.476398000e-06f, -2.472525968e-06f, -2.468650199e-06f, -2.464770699e-06f, -2.460887477e-06f, -2.457000539e-06f, -2.453109893e-06f, -2.449215546e-06f,
+-2.445317505e-06f, -2.441415778e-06f, -2.437510372e-06f, -2.433601294e-06f, -2.429688551e-06f, -2.425772151e-06f, -2.421852101e-06f, -2.417928409e-06f, -2.414001081e-06f, -2.410070125e-06f,
+-2.406135549e-06f, -2.402197359e-06f, -2.398255563e-06f, -2.394310169e-06f, -2.390361184e-06f, -2.386408614e-06f, -2.382452468e-06f, -2.378492753e-06f, -2.374529476e-06f, -2.370562644e-06f,
+-2.366592266e-06f, -2.362618348e-06f, -2.358640898e-06f, -2.354659922e-06f, -2.350675430e-06f, -2.346687427e-06f, -2.342695922e-06f, -2.338700921e-06f, -2.334702433e-06f, -2.330700464e-06f,
+-2.326695022e-06f, -2.322686115e-06f, -2.318673750e-06f, -2.314657934e-06f, -2.310638675e-06f, -2.306615981e-06f, -2.302589858e-06f, -2.298560314e-06f, -2.294527357e-06f, -2.290490994e-06f,
+-2.286451233e-06f, -2.282408081e-06f, -2.278361546e-06f, -2.274311635e-06f, -2.270258356e-06f, -2.266201715e-06f, -2.262141722e-06f, -2.258078383e-06f, -2.254011705e-06f, -2.249941696e-06f,
+-2.245868365e-06f, -2.241791717e-06f, -2.237711762e-06f, -2.233628506e-06f, -2.229541957e-06f, -2.225452122e-06f, -2.221359009e-06f, -2.217262626e-06f, -2.213162980e-06f, -2.209060079e-06f,
+-2.204953930e-06f, -2.200844542e-06f, -2.196731920e-06f, -2.192616074e-06f, -2.188497010e-06f, -2.184374737e-06f, -2.180249262e-06f, -2.176120592e-06f, -2.171988735e-06f, -2.167853699e-06f,
+-2.163715491e-06f, -2.159574119e-06f, -2.155429591e-06f, -2.151281914e-06f, -2.147131096e-06f, -2.142977145e-06f, -2.138820067e-06f, -2.134659872e-06f, -2.130496566e-06f, -2.126330157e-06f,
+-2.122160653e-06f, -2.117988061e-06f, -2.113812390e-06f, -2.109633646e-06f, -2.105451838e-06f, -2.101266973e-06f, -2.097079059e-06f, -2.092888104e-06f, -2.088694114e-06f, -2.084497099e-06f,
+-2.080297066e-06f, -2.076094022e-06f, -2.071887975e-06f, -2.067678933e-06f, -2.063466904e-06f, -2.059251894e-06f, -2.055033913e-06f, -2.050812968e-06f, -2.046589066e-06f, -2.042362216e-06f,
+-2.038132424e-06f, -2.033899699e-06f, -2.029664049e-06f, -2.025425481e-06f, -2.021184003e-06f, -2.016939623e-06f, -2.012692348e-06f, -2.008442187e-06f, -2.004189147e-06f, -1.999933236e-06f,
+-1.995674461e-06f, -1.991412831e-06f, -1.987148354e-06f, -1.982881036e-06f, -1.978610886e-06f, -1.974337913e-06f, -1.970062122e-06f, -1.965783523e-06f, -1.961502123e-06f, -1.957217930e-06f,
+-1.952930952e-06f, -1.948641197e-06f, -1.944348672e-06f, -1.940053385e-06f, -1.935755344e-06f, -1.931454558e-06f, -1.927151033e-06f, -1.922844778e-06f, -1.918535801e-06f, -1.914224109e-06f,
+-1.909909710e-06f, -1.905592612e-06f, -1.901272823e-06f, -1.896950352e-06f, -1.892625205e-06f, -1.888297390e-06f, -1.883966916e-06f, -1.879633791e-06f, -1.875298022e-06f, -1.870959617e-06f,
+-1.866618584e-06f, -1.862274931e-06f, -1.857928666e-06f, -1.853579797e-06f, -1.849228332e-06f, -1.844874278e-06f, -1.840517644e-06f, -1.836158437e-06f, -1.831796666e-06f, -1.827432338e-06f,
+-1.823065461e-06f, -1.818696044e-06f, -1.814324093e-06f, -1.809949618e-06f, -1.805572626e-06f, -1.801193124e-06f, -1.796811122e-06f, -1.792426627e-06f, -1.788039646e-06f, -1.783650188e-06f,
+-1.779258261e-06f, -1.774863873e-06f, -1.770467031e-06f, -1.766067744e-06f, -1.761666020e-06f, -1.757261866e-06f, -1.752855291e-06f, -1.748446303e-06f, -1.744034909e-06f, -1.739621117e-06f,
+-1.735204937e-06f, -1.730786375e-06f, -1.726365439e-06f, -1.721942138e-06f, -1.717516480e-06f, -1.713088472e-06f, -1.708658123e-06f, -1.704225440e-06f, -1.699790432e-06f, -1.695353107e-06f,
+-1.690913473e-06f, -1.686471537e-06f, -1.682027308e-06f, -1.677580794e-06f, -1.673132002e-06f, -1.668680942e-06f, -1.664227620e-06f, -1.659772045e-06f, -1.655314226e-06f, -1.650854169e-06f,
+-1.646391884e-06f, -1.641927377e-06f, -1.637460658e-06f, -1.632991734e-06f, -1.628520613e-06f, -1.624047304e-06f, -1.619571815e-06f, -1.615094153e-06f, -1.610614326e-06f, -1.606132343e-06f,
+-1.601648212e-06f, -1.597161941e-06f, -1.592673538e-06f, -1.588183011e-06f, -1.583690368e-06f, -1.579195617e-06f, -1.574698766e-06f, -1.570199824e-06f, -1.565698798e-06f, -1.561195697e-06f,
+-1.556690529e-06f, -1.552183302e-06f, -1.547674023e-06f, -1.543162701e-06f, -1.538649345e-06f, -1.534133962e-06f, -1.529616560e-06f, -1.525097148e-06f, -1.520575734e-06f, -1.516052325e-06f,
+-1.511526930e-06f, -1.506999557e-06f, -1.502470214e-06f, -1.497938910e-06f, -1.493405652e-06f, -1.488870448e-06f, -1.484333308e-06f, -1.479794238e-06f, -1.475253247e-06f, -1.470710343e-06f,
+-1.466165535e-06f, -1.461618830e-06f, -1.457070237e-06f, -1.452519763e-06f, -1.447967418e-06f, -1.443413208e-06f, -1.438857143e-06f, -1.434299230e-06f, -1.429739478e-06f, -1.425177894e-06f,
+-1.420614487e-06f, -1.416049266e-06f, -1.411482238e-06f, -1.406913411e-06f, -1.402342794e-06f, -1.397770394e-06f, -1.393196221e-06f, -1.388620282e-06f, -1.384042585e-06f, -1.379463139e-06f,
+-1.374881951e-06f, -1.370299031e-06f, -1.365714386e-06f, -1.361128024e-06f, -1.356539953e-06f, -1.351950182e-06f, -1.347358719e-06f, -1.342765573e-06f, -1.338170750e-06f, -1.333574261e-06f,
+-1.328976112e-06f, -1.324376312e-06f, -1.319774869e-06f, -1.315171791e-06f, -1.310567087e-06f, -1.305960765e-06f, -1.301352833e-06f, -1.296743300e-06f, -1.292132172e-06f, -1.287519460e-06f,
+-1.282905170e-06f, -1.278289312e-06f, -1.273671893e-06f, -1.269052922e-06f, -1.264432406e-06f, -1.259810355e-06f, -1.255186776e-06f, -1.250561678e-06f, -1.245935068e-06f, -1.241306955e-06f,
+-1.236677348e-06f, -1.232046254e-06f, -1.227413682e-06f, -1.222779640e-06f, -1.218144136e-06f, -1.213507179e-06f, -1.208868777e-06f, -1.204228937e-06f, -1.199587669e-06f, -1.194944980e-06f,
+-1.190300880e-06f, -1.185655375e-06f, -1.181008474e-06f, -1.176360186e-06f, -1.171710519e-06f, -1.167059481e-06f, -1.162407080e-06f, -1.157753324e-06f, -1.153098223e-06f, -1.148441784e-06f,
+-1.143784015e-06f, -1.139124924e-06f, -1.134464521e-06f, -1.129802813e-06f, -1.125139808e-06f, -1.120475515e-06f, -1.115809942e-06f, -1.111143097e-06f, -1.106474989e-06f, -1.101805626e-06f,
+-1.097135016e-06f, -1.092463167e-06f, -1.087790088e-06f, -1.083115786e-06f, -1.078440271e-06f, -1.073763551e-06f, -1.069085633e-06f, -1.064406527e-06f, -1.059726239e-06f, -1.055044780e-06f,
+-1.050362156e-06f, -1.045678376e-06f, -1.040993449e-06f, -1.036307383e-06f, -1.031620186e-06f, -1.026931866e-06f, -1.022242432e-06f, -1.017551892e-06f, -1.012860254e-06f, -1.008167527e-06f,
+-1.003473719e-06f, -9.987788372e-07f, -9.940828913e-07f, -9.893858891e-07f, -9.846878389e-07f, -9.799887491e-07f, -9.752886278e-07f, -9.705874835e-07f, -9.658853244e-07f, -9.611821588e-07f,
+-9.564779951e-07f, -9.517728414e-07f, -9.470667062e-07f, -9.423595977e-07f, -9.376515242e-07f, -9.329424941e-07f, -9.282325156e-07f, -9.235215970e-07f, -9.188097467e-07f, -9.140969729e-07f,
+-9.093832839e-07f, -9.046686882e-07f, -8.999531938e-07f, -8.952368093e-07f, -8.905195428e-07f, -8.858014027e-07f, -8.810823974e-07f, -8.763625350e-07f, -8.716418239e-07f, -8.669202724e-07f,
+-8.621978889e-07f, -8.574746816e-07f, -8.527506588e-07f, -8.480258289e-07f, -8.433002002e-07f, -8.385737810e-07f, -8.338465795e-07f, -8.291186041e-07f, -8.243898631e-07f, -8.196603649e-07f,
+-8.149301177e-07f, -8.101991298e-07f, -8.054674096e-07f, -8.007349653e-07f, -7.960018053e-07f, -7.912679379e-07f, -7.865333714e-07f, -7.817981141e-07f, -7.770621743e-07f, -7.723255604e-07f,
+-7.675882806e-07f, -7.628503433e-07f, -7.581117567e-07f, -7.533725292e-07f, -7.486326691e-07f, -7.438921846e-07f, -7.391510842e-07f, -7.344093762e-07f, -7.296670687e-07f, -7.249241702e-07f,
+-7.201806890e-07f, -7.154366333e-07f, -7.106920115e-07f, -7.059468319e-07f, -7.012011027e-07f, -6.964548324e-07f, -6.917080292e-07f, -6.869607015e-07f, -6.822128574e-07f, -6.774645054e-07f,
+-6.727156538e-07f, -6.679663108e-07f, -6.632164847e-07f, -6.584661840e-07f, -6.537154168e-07f, -6.489641915e-07f, -6.442125164e-07f, -6.394603999e-07f, -6.347078501e-07f, -6.299548754e-07f,
+-6.252014841e-07f, -6.204476846e-07f, -6.156934851e-07f, -6.109388939e-07f, -6.061839193e-07f, -6.014285696e-07f, -5.966728532e-07f, -5.919167784e-07f, -5.871603533e-07f, -5.824035864e-07f,
+-5.776464859e-07f, -5.728890602e-07f, -5.681313175e-07f, -5.633732661e-07f, -5.586149143e-07f, -5.538562705e-07f, -5.490973429e-07f, -5.443381398e-07f, -5.395786694e-07f, -5.348189402e-07f,
+-5.300589604e-07f, -5.252987383e-07f, -5.205382821e-07f, -5.157776002e-07f, -5.110167009e-07f, -5.062555924e-07f, -5.014942830e-07f, -4.967327811e-07f, -4.919710948e-07f, -4.872092326e-07f,
+-4.824472026e-07f, -4.776850132e-07f, -4.729226726e-07f, -4.681601892e-07f, -4.633975711e-07f, -4.586348268e-07f, -4.538719644e-07f, -4.491089922e-07f, -4.443459186e-07f, -4.395827518e-07f,
+-4.348195000e-07f, -4.300561716e-07f, -4.252927748e-07f, -4.205293179e-07f, -4.157658091e-07f, -4.110022568e-07f, -4.062386692e-07f, -4.014750546e-07f, -3.967114212e-07f, -3.919477773e-07f,
+-3.871841311e-07f, -3.824204910e-07f, -3.776568652e-07f, -3.728932619e-07f, -3.681296895e-07f, -3.633661561e-07f, -3.586026700e-07f, -3.538392395e-07f, -3.490758729e-07f, -3.443125783e-07f,
+-3.395493641e-07f, -3.347862385e-07f, -3.300232097e-07f, -3.252602860e-07f, -3.204974756e-07f, -3.157347869e-07f, -3.109722279e-07f, -3.062098070e-07f, -3.014475324e-07f, -2.966854124e-07f,
+-2.919234552e-07f, -2.871616689e-07f, -2.824000620e-07f, -2.776386425e-07f, -2.728774188e-07f, -2.681163990e-07f, -2.633555914e-07f, -2.585950042e-07f, -2.538346456e-07f, -2.490745239e-07f,
+-2.443146473e-07f, -2.395550240e-07f, -2.347956623e-07f, -2.300365702e-07f, -2.252777562e-07f, -2.205192283e-07f, -2.157609948e-07f, -2.110030639e-07f, -2.062454438e-07f, -2.014881428e-07f,
+-1.967311689e-07f, -1.919745305e-07f, -1.872182358e-07f, -1.824622928e-07f, -1.777067100e-07f, -1.729514953e-07f, -1.681966571e-07f, -1.634422035e-07f, -1.586881427e-07f, -1.539344829e-07f,
+-1.491812323e-07f, -1.444283991e-07f, -1.396759914e-07f, -1.349240175e-07f, -1.301724856e-07f, -1.254214037e-07f, -1.206707801e-07f, -1.159206230e-07f, -1.111709405e-07f, -1.064217409e-07f,
+-1.016730322e-07f, -9.692482259e-08f, -9.217712034e-08f, -8.742993355e-08f, -8.268327040e-08f, -7.793713903e-08f, -7.319154762e-08f, -6.844650430e-08f, -6.370201724e-08f, -5.895809458e-08f,
+-5.421474447e-08f, -4.947197506e-08f, -4.472979450e-08f, -3.998821092e-08f, -3.524723247e-08f, -3.050686727e-08f, -2.576712348e-08f, -2.102800921e-08f, -1.628953261e-08f, -1.155170180e-08f,
+-6.814524901e-09f, -2.078010045e-09f, 2.657834651e-09f, 7.393001064e-09f, 1.212748108e-08f, 1.686126658e-08f, 2.159434946e-08f, 2.632672160e-08f, 3.105837490e-08f, 3.578930125e-08f,
+4.051949255e-08f, 4.524894070e-08f, 4.997763760e-08f, 5.470557516e-08f, 5.943274528e-08f, 6.415913987e-08f, 6.888475085e-08f, 7.360957012e-08f, 7.833358961e-08f, 8.305680124e-08f,
+8.777919692e-08f, 9.250076859e-08f, 9.722150816e-08f, 1.019414076e-07f, 1.066604588e-07f, 1.113786537e-07f, 1.160959842e-07f, 1.208124423e-07f, 1.255280200e-07f, 1.302427091e-07f,
+1.349565016e-07f, 1.396693896e-07f, 1.443813648e-07f, 1.490924193e-07f, 1.538025451e-07f, 1.585117341e-07f, 1.632199782e-07f, 1.679272695e-07f, 1.726335999e-07f, 1.773389614e-07f,
+1.820433459e-07f, 1.867467455e-07f, 1.914491521e-07f, 1.961505577e-07f, 2.008509543e-07f, 2.055503338e-07f, 2.102486884e-07f, 2.149460099e-07f, 2.196422903e-07f, 2.243375218e-07f,
+2.290316962e-07f, 2.337248056e-07f, 2.384168420e-07f, 2.431077974e-07f, 2.477976638e-07f, 2.524864333e-07f, 2.571740978e-07f, 2.618606495e-07f, 2.665460802e-07f, 2.712303821e-07f,
+2.759135472e-07f, 2.805955676e-07f, 2.852764352e-07f, 2.899561421e-07f, 2.946346804e-07f, 2.993120421e-07f, 3.039882192e-07f, 3.086632039e-07f, 3.133369882e-07f, 3.180095641e-07f,
+3.226809238e-07f, 3.273510592e-07f, 3.320199625e-07f, 3.366876258e-07f, 3.413540410e-07f, 3.460192004e-07f, 3.506830959e-07f, 3.553457197e-07f, 3.600070639e-07f, 3.646671206e-07f,
+3.693258818e-07f, 3.739833397e-07f, 3.786394864e-07f, 3.832943139e-07f, 3.879478145e-07f, 3.925999802e-07f, 3.972508031e-07f, 4.019002753e-07f, 4.065483891e-07f, 4.111951365e-07f,
+4.158405096e-07f, 4.204845007e-07f, 4.251271018e-07f, 4.297683050e-07f, 4.344081026e-07f, 4.390464866e-07f, 4.436834493e-07f, 4.483189828e-07f, 4.529530792e-07f, 4.575857308e-07f,
+4.622169296e-07f, 4.668466680e-07f, 4.714749379e-07f, 4.761017317e-07f, 4.807270415e-07f, 4.853508595e-07f, 4.899731779e-07f, 4.945939888e-07f, 4.992132846e-07f, 5.038310573e-07f,
+5.084472993e-07f, 5.130620026e-07f, 5.176751595e-07f, 5.222867623e-07f, 5.268968032e-07f, 5.315052743e-07f, 5.361121680e-07f, 5.407174764e-07f, 5.453211917e-07f, 5.499233064e-07f,
+5.545238124e-07f, 5.591227022e-07f, 5.637199680e-07f, 5.683156020e-07f, 5.729095965e-07f, 5.775019438e-07f, 5.820926360e-07f, 5.866816656e-07f, 5.912690248e-07f, 5.958547058e-07f,
+6.004387009e-07f, 6.050210025e-07f, 6.096016028e-07f, 6.141804941e-07f, 6.187576687e-07f, 6.233331189e-07f, 6.279068371e-07f, 6.324788155e-07f, 6.370490465e-07f, 6.416175224e-07f,
+6.461842355e-07f, 6.507491781e-07f, 6.553123426e-07f, 6.598737213e-07f, 6.644333065e-07f, 6.689910907e-07f, 6.735470661e-07f, 6.781012251e-07f, 6.826535601e-07f, 6.872040634e-07f,
+6.917527274e-07f, 6.962995444e-07f, 7.008445069e-07f, 7.053876073e-07f, 7.099288378e-07f, 7.144681909e-07f, 7.190056590e-07f, 7.235412345e-07f, 7.280749098e-07f, 7.326066773e-07f,
+7.371365294e-07f, 7.416644585e-07f, 7.461904571e-07f, 7.507145175e-07f, 7.552366323e-07f, 7.597567937e-07f, 7.642749943e-07f, 7.687912266e-07f, 7.733054828e-07f, 7.778177556e-07f,
+7.823280374e-07f, 7.868363206e-07f, 7.913425976e-07f, 7.958468610e-07f, 8.003491033e-07f, 8.048493168e-07f, 8.093474941e-07f, 8.138436277e-07f, 8.183377101e-07f, 8.228297338e-07f,
+8.273196912e-07f, 8.318075749e-07f, 8.362933774e-07f, 8.407770911e-07f, 8.452587087e-07f, 8.497382227e-07f, 8.542156255e-07f, 8.586909097e-07f, 8.631640679e-07f, 8.676350925e-07f,
+8.721039762e-07f, 8.765707115e-07f, 8.810352910e-07f, 8.854977071e-07f, 8.899579526e-07f, 8.944160198e-07f, 8.988719016e-07f, 9.033255903e-07f, 9.077770786e-07f, 9.122263592e-07f,
+9.166734245e-07f, 9.211182672e-07f, 9.255608799e-07f, 9.300012552e-07f, 9.344393858e-07f, 9.388752642e-07f, 9.433088830e-07f, 9.477402350e-07f, 9.521693127e-07f, 9.565961088e-07f,
+9.610206160e-07f, 9.654428268e-07f, 9.698627339e-07f, 9.742803300e-07f, 9.786956079e-07f, 9.831085600e-07f, 9.875191792e-07f, 9.919274580e-07f, 9.963333892e-07f, 1.000736966e-06f,
+1.005138180e-06f, 1.009537024e-06f, 1.013933492e-06f, 1.018327576e-06f, 1.022719268e-06f, 1.027108561e-06f, 1.031495449e-06f, 1.035879923e-06f, 1.040261977e-06f, 1.044641604e-06f,
+1.049018795e-06f, 1.053393544e-06f, 1.057765844e-06f, 1.062135686e-06f, 1.066503065e-06f, 1.070867973e-06f, 1.075230403e-06f, 1.079590347e-06f, 1.083947798e-06f, 1.088302749e-06f,
+1.092655193e-06f, 1.097005122e-06f, 1.101352530e-06f, 1.105697409e-06f, 1.110039753e-06f, 1.114379553e-06f, 1.118716803e-06f, 1.123051495e-06f, 1.127383623e-06f, 1.131713179e-06f,
+1.136040157e-06f, 1.140364548e-06f, 1.144686346e-06f, 1.149005544e-06f, 1.153322134e-06f, 1.157636110e-06f, 1.161947465e-06f, 1.166256190e-06f, 1.170562280e-06f, 1.174865727e-06f,
+1.179166524e-06f, 1.183464664e-06f, 1.187760140e-06f, 1.192052944e-06f, 1.196343070e-06f, 1.200630511e-06f, 1.204915259e-06f, 1.209197308e-06f, 1.213476651e-06f, 1.217753280e-06f,
+1.222027188e-06f, 1.226298369e-06f, 1.230566815e-06f, 1.234832519e-06f, 1.239095475e-06f, 1.243355675e-06f, 1.247613113e-06f, 1.251867780e-06f, 1.256119672e-06f, 1.260368779e-06f,
+1.264615097e-06f, 1.268858616e-06f, 1.273099331e-06f, 1.277337235e-06f, 1.281572320e-06f, 1.285804580e-06f, 1.290034008e-06f, 1.294260596e-06f, 1.298484338e-06f, 1.302705227e-06f,
+1.306923256e-06f, 1.311138419e-06f, 1.315350707e-06f, 1.319560115e-06f, 1.323766635e-06f, 1.327970261e-06f, 1.332170985e-06f, 1.336368802e-06f, 1.340563703e-06f, 1.344755682e-06f,
+1.348944732e-06f, 1.353130847e-06f, 1.357314019e-06f, 1.361494242e-06f, 1.365671509e-06f, 1.369845812e-06f, 1.374017146e-06f, 1.378185504e-06f, 1.382350878e-06f, 1.386513261e-06f,
+1.390672648e-06f, 1.394829031e-06f, 1.398982403e-06f, 1.403132758e-06f, 1.407280089e-06f, 1.411424389e-06f, 1.415565651e-06f, 1.419703869e-06f, 1.423839036e-06f, 1.427971145e-06f,
+1.432100189e-06f, 1.436226162e-06f, 1.440349057e-06f, 1.444468867e-06f, 1.448585585e-06f, 1.452699206e-06f, 1.456809721e-06f, 1.460917125e-06f, 1.465021411e-06f, 1.469122572e-06f,
+1.473220601e-06f, 1.477315493e-06f, 1.481407239e-06f, 1.485495833e-06f, 1.489581270e-06f, 1.493663542e-06f, 1.497742642e-06f, 1.501818564e-06f, 1.505891301e-06f, 1.509960847e-06f,
+1.514027196e-06f, 1.518090339e-06f, 1.522150272e-06f, 1.526206987e-06f, 1.530260478e-06f, 1.534310738e-06f, 1.538357760e-06f, 1.542401539e-06f, 1.546442067e-06f, 1.550479338e-06f,
+1.554513345e-06f, 1.558544083e-06f, 1.562571543e-06f, 1.566595721e-06f, 1.570616609e-06f, 1.574634200e-06f, 1.578648489e-06f, 1.582659469e-06f, 1.586667133e-06f, 1.590671475e-06f,
+1.594672489e-06f, 1.598670167e-06f, 1.602664504e-06f, 1.606655493e-06f, 1.610643127e-06f, 1.614627401e-06f, 1.618608307e-06f, 1.622585840e-06f, 1.626559992e-06f, 1.630530758e-06f,
+1.634498131e-06f, 1.638462105e-06f, 1.642422673e-06f, 1.646379828e-06f, 1.650333566e-06f, 1.654283878e-06f, 1.658230759e-06f, 1.662174203e-06f, 1.666114202e-06f, 1.670050752e-06f,
+1.673983844e-06f, 1.677913474e-06f, 1.681839635e-06f, 1.685762319e-06f, 1.689681522e-06f, 1.693597237e-06f, 1.697509458e-06f, 1.701418177e-06f, 1.705323390e-06f, 1.709225089e-06f,
+1.713123268e-06f, 1.717017922e-06f, 1.720909044e-06f, 1.724796627e-06f, 1.728680665e-06f, 1.732561153e-06f, 1.736438084e-06f, 1.740311451e-06f, 1.744181250e-06f, 1.748047472e-06f,
+1.751910112e-06f, 1.755769165e-06f, 1.759624623e-06f, 1.763476481e-06f, 1.767324732e-06f, 1.771169370e-06f, 1.775010390e-06f, 1.778847784e-06f, 1.782681547e-06f, 1.786511673e-06f,
+1.790338156e-06f, 1.794160989e-06f, 1.797980166e-06f, 1.801795681e-06f, 1.805607529e-06f, 1.809415703e-06f, 1.813220196e-06f, 1.817021004e-06f, 1.820818119e-06f, 1.824611536e-06f,
+1.828401249e-06f, 1.832187252e-06f, 1.835969538e-06f, 1.839748101e-06f, 1.843522937e-06f, 1.847294037e-06f, 1.851061398e-06f, 1.854825012e-06f, 1.858584873e-06f, 1.862340976e-06f,
+1.866093315e-06f, 1.869841883e-06f, 1.873586675e-06f, 1.877327685e-06f, 1.881064906e-06f, 1.884798333e-06f, 1.888527960e-06f, 1.892253781e-06f, 1.895975790e-06f, 1.899693981e-06f,
+1.903408349e-06f, 1.907118886e-06f, 1.910825588e-06f, 1.914528449e-06f, 1.918227462e-06f, 1.921922622e-06f, 1.925613923e-06f, 1.929301360e-06f, 1.932984925e-06f, 1.936664614e-06f,
+1.940340420e-06f, 1.944012338e-06f, 1.947680362e-06f, 1.951344487e-06f, 1.955004705e-06f, 1.958661012e-06f, 1.962313402e-06f, 1.965961869e-06f, 1.969606407e-06f, 1.973247011e-06f,
+1.976883674e-06f, 1.980516391e-06f, 1.984145156e-06f, 1.987769964e-06f, 1.991390809e-06f, 1.995007685e-06f, 1.998620586e-06f, 2.002229507e-06f, 2.005834441e-06f, 2.009435384e-06f,
+2.013032330e-06f, 2.016625272e-06f, 2.020214206e-06f, 2.023799125e-06f, 2.027380025e-06f, 2.030956899e-06f, 2.034529741e-06f, 2.038098546e-06f, 2.041663309e-06f, 2.045224024e-06f,
+2.048780685e-06f, 2.052333287e-06f, 2.055881824e-06f, 2.059426290e-06f, 2.062966681e-06f, 2.066502989e-06f, 2.070035211e-06f, 2.073563340e-06f, 2.077087370e-06f, 2.080607297e-06f,
+2.084123115e-06f, 2.087634818e-06f, 2.091142400e-06f, 2.094645857e-06f, 2.098145182e-06f, 2.101640371e-06f, 2.105131417e-06f, 2.108618316e-06f, 2.112101061e-06f, 2.115579648e-06f,
+2.119054071e-06f, 2.122524325e-06f, 2.125990403e-06f, 2.129452302e-06f, 2.132910014e-06f, 2.136363536e-06f, 2.139812860e-06f, 2.143257983e-06f, 2.146698899e-06f, 2.150135602e-06f,
+2.153568087e-06f, 2.156996349e-06f, 2.160420382e-06f, 2.163840181e-06f, 2.167255741e-06f, 2.170667056e-06f, 2.174074121e-06f, 2.177476931e-06f, 2.180875480e-06f, 2.184269763e-06f,
+2.187659775e-06f, 2.191045511e-06f, 2.194426965e-06f, 2.197804132e-06f, 2.201177007e-06f, 2.204545585e-06f, 2.207909860e-06f, 2.211269827e-06f, 2.214625481e-06f, 2.217976816e-06f,
+2.221323829e-06f, 2.224666512e-06f, 2.228004862e-06f, 2.231338873e-06f, 2.234668539e-06f, 2.237993856e-06f, 2.241314819e-06f, 2.244631422e-06f, 2.247943660e-06f, 2.251251529e-06f,
+2.254555022e-06f, 2.257854136e-06f, 2.261148864e-06f, 2.264439202e-06f, 2.267725145e-06f, 2.271006687e-06f, 2.274283824e-06f, 2.277556550e-06f, 2.280824860e-06f, 2.284088750e-06f,
+2.287348215e-06f, 2.290603248e-06f, 2.293853846e-06f, 2.297100004e-06f, 2.300341715e-06f, 2.303578976e-06f, 2.306811781e-06f, 2.310040126e-06f, 2.313264005e-06f, 2.316483414e-06f,
+2.319698347e-06f, 2.322908799e-06f, 2.326114766e-06f, 2.329316243e-06f, 2.332513225e-06f, 2.335705707e-06f, 2.338893684e-06f, 2.342077150e-06f, 2.345256103e-06f, 2.348430535e-06f,
+2.351600443e-06f, 2.354765822e-06f, 2.357926666e-06f, 2.361082972e-06f, 2.364234734e-06f, 2.367381947e-06f, 2.370524606e-06f, 2.373662708e-06f, 2.376796246e-06f, 2.379925217e-06f,
+2.383049615e-06f, 2.386169435e-06f, 2.389284674e-06f, 2.392395325e-06f, 2.395501385e-06f, 2.398602849e-06f, 2.401699711e-06f, 2.404791968e-06f, 2.407879614e-06f, 2.410962645e-06f,
+2.414041056e-06f, 2.417114843e-06f, 2.420184000e-06f, 2.423248524e-06f, 2.426308409e-06f, 2.429363651e-06f, 2.432414245e-06f, 2.435460187e-06f, 2.438501471e-06f, 2.441538094e-06f,
+2.444570051e-06f, 2.447597336e-06f, 2.450619947e-06f, 2.453637877e-06f, 2.456651123e-06f, 2.459659679e-06f, 2.462663542e-06f, 2.465662707e-06f, 2.468657168e-06f, 2.471646923e-06f,
+2.474631966e-06f, 2.477612292e-06f, 2.480587898e-06f, 2.483558779e-06f, 2.486524929e-06f, 2.489486346e-06f, 2.492443023e-06f, 2.495394958e-06f, 2.498342145e-06f, 2.501284580e-06f,
+2.504222259e-06f, 2.507155177e-06f, 2.510083329e-06f, 2.513006712e-06f, 2.515925321e-06f, 2.518839151e-06f, 2.521748199e-06f, 2.524652460e-06f, 2.527551929e-06f, 2.530446602e-06f,
+2.533336475e-06f, 2.536221543e-06f, 2.539101803e-06f, 2.541977249e-06f, 2.544847878e-06f, 2.547713686e-06f, 2.550574667e-06f, 2.553430818e-06f, 2.556282134e-06f, 2.559128612e-06f,
+2.561970247e-06f, 2.564807034e-06f, 2.567638970e-06f, 2.570466050e-06f, 2.573288270e-06f, 2.576105626e-06f, 2.578918114e-06f, 2.581725730e-06f, 2.584528468e-06f, 2.587326326e-06f,
+2.590119299e-06f, 2.592907382e-06f, 2.595690573e-06f, 2.598468866e-06f, 2.601242257e-06f, 2.604010743e-06f, 2.606774319e-06f, 2.609532981e-06f, 2.612286725e-06f, 2.615035548e-06f,
+2.617779444e-06f, 2.620518410e-06f, 2.623252442e-06f, 2.625981536e-06f, 2.628705688e-06f, 2.631424893e-06f, 2.634139149e-06f, 2.636848450e-06f, 2.639552792e-06f, 2.642252173e-06f,
+2.644946587e-06f, 2.647636032e-06f, 2.650320502e-06f, 2.652999994e-06f, 2.655674504e-06f, 2.658344028e-06f, 2.661008563e-06f, 2.663668103e-06f, 2.666322647e-06f, 2.668972188e-06f,
+2.671616724e-06f, 2.674256251e-06f, 2.676890765e-06f, 2.679520262e-06f, 2.682144738e-06f, 2.684764189e-06f, 2.687378612e-06f, 2.689988003e-06f, 2.692592357e-06f, 2.695191672e-06f,
+2.697785943e-06f, 2.700375166e-06f, 2.702959339e-06f, 2.705538456e-06f, 2.708112514e-06f, 2.710681510e-06f, 2.713245440e-06f, 2.715804300e-06f, 2.718358086e-06f, 2.720906795e-06f,
+2.723450423e-06f, 2.725988966e-06f, 2.728522421e-06f, 2.731050784e-06f, 2.733574051e-06f, 2.736092218e-06f, 2.738605283e-06f, 2.741113241e-06f, 2.743616088e-06f, 2.746113822e-06f,
+2.748606439e-06f, 2.751093934e-06f, 2.753576304e-06f, 2.756053547e-06f, 2.758525658e-06f, 2.760992633e-06f, 2.763454469e-06f, 2.765911163e-06f, 2.768362712e-06f, 2.770809110e-06f,
+2.773250356e-06f, 2.775686445e-06f, 2.778117375e-06f, 2.780543140e-06f, 2.782963740e-06f, 2.785379168e-06f, 2.787789423e-06f, 2.790194501e-06f, 2.792594398e-06f, 2.794989111e-06f,
+2.797378636e-06f, 2.799762971e-06f, 2.802142111e-06f, 2.804516054e-06f, 2.806884795e-06f, 2.809248332e-06f, 2.811606662e-06f, 2.813959780e-06f, 2.816307684e-06f, 2.818650370e-06f,
+2.820987835e-06f, 2.823320076e-06f, 2.825647088e-06f, 2.827968870e-06f, 2.830285418e-06f, 2.832596728e-06f, 2.834902798e-06f, 2.837203623e-06f, 2.839499201e-06f, 2.841789529e-06f,
+2.844074602e-06f, 2.846354419e-06f, 2.848628976e-06f, 2.850898270e-06f, 2.853162297e-06f, 2.855421054e-06f, 2.857674538e-06f, 2.859922747e-06f, 2.862165676e-06f, 2.864403323e-06f,
+2.866635685e-06f, 2.868862758e-06f, 2.871084539e-06f, 2.873301026e-06f, 2.875512215e-06f, 2.877718103e-06f, 2.879918687e-06f, 2.882113964e-06f, 2.884303931e-06f, 2.886488585e-06f,
+2.888667923e-06f, 2.890841942e-06f, 2.893010639e-06f, 2.895174010e-06f, 2.897332053e-06f, 2.899484766e-06f, 2.901632144e-06f, 2.903774185e-06f, 2.905910886e-06f, 2.908042244e-06f,
+2.910168256e-06f, 2.912288920e-06f, 2.914404232e-06f, 2.916514189e-06f, 2.918618788e-06f, 2.920718028e-06f, 2.922811904e-06f, 2.924900414e-06f, 2.926983555e-06f, 2.929061324e-06f,
+2.931133718e-06f, 2.933200735e-06f, 2.935262372e-06f, 2.937318626e-06f, 2.939369494e-06f, 2.941414973e-06f, 2.943455060e-06f, 2.945489754e-06f, 2.947519050e-06f, 2.949542947e-06f,
+2.951561441e-06f, 2.953574530e-06f, 2.955582212e-06f, 2.957584482e-06f, 2.959581340e-06f, 2.961572781e-06f, 2.963558804e-06f, 2.965539405e-06f, 2.967514582e-06f, 2.969484333e-06f,
+2.971448654e-06f, 2.973407544e-06f, 2.975360999e-06f, 2.977309017e-06f, 2.979251595e-06f, 2.981188730e-06f, 2.983120421e-06f, 2.985046665e-06f, 2.986967458e-06f, 2.988882799e-06f,
+2.990792684e-06f, 2.992697112e-06f, 2.994596080e-06f, 2.996489585e-06f, 2.998377625e-06f, 3.000260197e-06f, 3.002137299e-06f, 3.004008928e-06f, 3.005875082e-06f, 3.007735759e-06f,
+3.009590956e-06f, 3.011440670e-06f, 3.013284899e-06f, 3.015123642e-06f, 3.016956894e-06f, 3.018784654e-06f, 3.020606920e-06f, 3.022423690e-06f, 3.024234959e-06f, 3.026040728e-06f,
+3.027840992e-06f, 3.029635751e-06f, 3.031425001e-06f, 3.033208740e-06f, 3.034986965e-06f, 3.036759676e-06f, 3.038526868e-06f, 3.040288541e-06f, 3.042044691e-06f, 3.043795317e-06f,
+3.045540416e-06f, 3.047279986e-06f, 3.049014025e-06f, 3.050742531e-06f, 3.052465501e-06f, 3.054182932e-06f, 3.055894824e-06f, 3.057601174e-06f, 3.059301979e-06f, 3.060997238e-06f,
+3.062686948e-06f, 3.064371108e-06f, 3.066049714e-06f, 3.067722766e-06f, 3.069390260e-06f, 3.071052195e-06f, 3.072708569e-06f, 3.074359379e-06f, 3.076004624e-06f, 3.077644301e-06f,
+3.079278409e-06f, 3.080906945e-06f, 3.082529907e-06f, 3.084147294e-06f, 3.085759103e-06f, 3.087365333e-06f, 3.088965981e-06f, 3.090561045e-06f, 3.092150524e-06f, 3.093734415e-06f,
+3.095312717e-06f, 3.096885427e-06f, 3.098452544e-06f, 3.100014066e-06f, 3.101569990e-06f, 3.103120316e-06f, 3.104665040e-06f, 3.106204162e-06f, 3.107737679e-06f, 3.109265590e-06f,
+3.110787892e-06f, 3.112304584e-06f, 3.113815663e-06f, 3.115321129e-06f, 3.116820980e-06f, 3.118315213e-06f, 3.119803826e-06f, 3.121286819e-06f, 3.122764189e-06f, 3.124235934e-06f,
+3.125702053e-06f, 3.127162544e-06f, 3.128617405e-06f, 3.130066634e-06f, 3.131510231e-06f, 3.132948193e-06f, 3.134380518e-06f, 3.135807204e-06f, 3.137228251e-06f, 3.138643657e-06f,
+3.140053419e-06f, 3.141457536e-06f, 3.142856007e-06f, 3.144248830e-06f, 3.145636003e-06f, 3.147017525e-06f, 3.148393394e-06f, 3.149763608e-06f, 3.151128167e-06f, 3.152487068e-06f,
+3.153840310e-06f, 3.155187891e-06f, 3.156529810e-06f, 3.157866065e-06f, 3.159196655e-06f, 3.160521579e-06f, 3.161840834e-06f, 3.163154420e-06f, 3.164462334e-06f, 3.165764576e-06f,
+3.167061144e-06f, 3.168352037e-06f, 3.169637253e-06f, 3.170916790e-06f, 3.172190648e-06f, 3.173458824e-06f, 3.174721319e-06f, 3.175978129e-06f, 3.177229254e-06f, 3.178474693e-06f,
+3.179714443e-06f, 3.180948505e-06f, 3.182176876e-06f, 3.183399555e-06f, 3.184616541e-06f, 3.185827832e-06f, 3.187033428e-06f, 3.188233326e-06f, 3.189427527e-06f, 3.190616027e-06f,
+3.191798827e-06f, 3.192975925e-06f, 3.194147320e-06f, 3.195313010e-06f, 3.196472995e-06f, 3.197627273e-06f, 3.198775843e-06f, 3.199918703e-06f, 3.201055853e-06f, 3.202187292e-06f,
+3.203313018e-06f, 3.204433030e-06f, 3.205547327e-06f, 3.206655908e-06f, 3.207758772e-06f, 3.208855918e-06f, 3.209947345e-06f, 3.211033051e-06f, 3.212113036e-06f, 3.213187298e-06f,
+3.214255837e-06f, 3.215318651e-06f, 3.216375739e-06f, 3.217427101e-06f, 3.218472736e-06f, 3.219512641e-06f, 3.220546817e-06f, 3.221575263e-06f, 3.222597977e-06f, 3.223614959e-06f,
+3.224626207e-06f, 3.225631721e-06f, 3.226631500e-06f, 3.227625542e-06f, 3.228613848e-06f, 3.229596415e-06f, 3.230573244e-06f, 3.231544333e-06f, 3.232509681e-06f, 3.233469288e-06f,
+3.234423153e-06f, 3.235371274e-06f, 3.236313652e-06f, 3.237250285e-06f, 3.238181173e-06f, 3.239106314e-06f, 3.240025708e-06f, 3.240939354e-06f, 3.241847252e-06f, 3.242749401e-06f,
+3.243645799e-06f, 3.244536446e-06f, 3.245421342e-06f, 3.246300486e-06f, 3.247173876e-06f, 3.248041513e-06f, 3.248903396e-06f, 3.249759524e-06f, 3.250609896e-06f, 3.251454512e-06f,
+3.252293370e-06f, 3.253126472e-06f, 3.253953815e-06f, 3.254775399e-06f, 3.255591224e-06f, 3.256401289e-06f, 3.257205594e-06f, 3.258004137e-06f, 3.258796919e-06f, 3.259583938e-06f,
+3.260365195e-06f, 3.261140688e-06f, 3.261910418e-06f, 3.262674383e-06f, 3.263432583e-06f, 3.264185018e-06f, 3.264931688e-06f, 3.265672591e-06f, 3.266407727e-06f, 3.267137097e-06f,
+3.267860698e-06f, 3.268578532e-06f, 3.269290598e-06f, 3.269996894e-06f, 3.270697421e-06f, 3.271392179e-06f, 3.272081167e-06f, 3.272764384e-06f, 3.273441831e-06f, 3.274113506e-06f,
+3.274779410e-06f, 3.275439543e-06f, 3.276093903e-06f, 3.276742491e-06f, 3.277385307e-06f, 3.278022349e-06f, 3.278653619e-06f, 3.279279115e-06f, 3.279898837e-06f, 3.280512785e-06f,
+3.281120959e-06f, 3.281723359e-06f, 3.282319984e-06f, 3.282910834e-06f, 3.283495909e-06f, 3.284075209e-06f, 3.284648734e-06f, 3.285216483e-06f, 3.285778456e-06f, 3.286334653e-06f,
+3.286885075e-06f, 3.287429720e-06f, 3.287968589e-06f, 3.288501682e-06f, 3.289028998e-06f, 3.289550538e-06f, 3.290066301e-06f, 3.290576288e-06f, 3.291080498e-06f, 3.291578931e-06f,
+3.292071587e-06f, 3.292558467e-06f, 3.293039569e-06f, 3.293514895e-06f, 3.293984444e-06f, 3.294448216e-06f, 3.294906212e-06f, 3.295358431e-06f, 3.295804873e-06f, 3.296245538e-06f,
+3.296680427e-06f, 3.297109539e-06f, 3.297532875e-06f, 3.297950435e-06f, 3.298362218e-06f, 3.298768225e-06f, 3.299168457e-06f, 3.299562912e-06f, 3.299951592e-06f, 3.300334496e-06f,
+3.300711625e-06f, 3.301082979e-06f, 3.301448558e-06f, 3.301808362e-06f, 3.302162391e-06f, 3.302510646e-06f, 3.302853127e-06f, 3.303189834e-06f, 3.303520767e-06f, 3.303845927e-06f,
+3.304165314e-06f, 3.304478928e-06f, 3.304786769e-06f, 3.305088838e-06f, 3.305385135e-06f, 3.305675660e-06f, 3.305960414e-06f, 3.306239397e-06f, 3.306512609e-06f, 3.306780051e-06f,
+3.307041723e-06f, 3.307297626e-06f, 3.307547759e-06f, 3.307792123e-06f, 3.308030720e-06f, 3.308263548e-06f, 3.308490608e-06f, 3.308711902e-06f, 3.308927429e-06f, 3.309137190e-06f,
+3.309341185e-06f, 3.309539414e-06f, 3.309731879e-06f, 3.309918580e-06f, 3.310099517e-06f, 3.310274690e-06f, 3.310444101e-06f, 3.310607750e-06f, 3.310765637e-06f, 3.310917763e-06f,
+3.311064129e-06f, 3.311204734e-06f, 3.311339580e-06f, 3.311468668e-06f, 3.311591997e-06f, 3.311709569e-06f, 3.311821383e-06f, 3.311927442e-06f, 3.312027745e-06f, 3.312122292e-06f,
+3.312211086e-06f, 3.312294126e-06f, 3.312371412e-06f, 3.312442947e-06f, 3.312508730e-06f, 3.312568762e-06f, 3.312623044e-06f, 3.312671576e-06f, 3.312714360e-06f, 3.312751396e-06f,
+3.312782685e-06f, 3.312808227e-06f, 3.312828024e-06f, 3.312842076e-06f, 3.312850384e-06f, 3.312852949e-06f, 3.312849771e-06f, 3.312840852e-06f, 3.312826193e-06f, 3.312805793e-06f,
+3.312779654e-06f, 3.312747778e-06f, 3.312710164e-06f, 3.312666814e-06f, 3.312617728e-06f, 3.312562908e-06f, 3.312502354e-06f, 3.312436067e-06f, 3.312364049e-06f, 3.312286300e-06f,
+3.312202821e-06f, 3.312113613e-06f, 3.312018678e-06f, 3.311918015e-06f, 3.311811627e-06f, 3.311699514e-06f, 3.311581677e-06f, 3.311458117e-06f, 3.311328835e-06f, 3.311193832e-06f,
+3.311053110e-06f, 3.310906669e-06f, 3.310754511e-06f, 3.310596636e-06f, 3.310433046e-06f, 3.310263742e-06f, 3.310088724e-06f, 3.309907995e-06f, 3.309721554e-06f, 3.309529404e-06f,
+3.309331545e-06f, 3.309127979e-06f, 3.308918707e-06f, 3.308703729e-06f, 3.308483048e-06f, 3.308256664e-06f, 3.308024578e-06f, 3.307786793e-06f, 3.307543308e-06f, 3.307294126e-06f,
+3.307039247e-06f, 3.306778673e-06f, 3.306512405e-06f, 3.306240444e-06f, 3.305962792e-06f, 3.305679450e-06f, 3.305390419e-06f, 3.305095700e-06f, 3.304795296e-06f, 3.304489206e-06f,
+3.304177434e-06f, 3.303859979e-06f, 3.303536843e-06f, 3.303208028e-06f, 3.302873536e-06f, 3.302533366e-06f, 3.302187522e-06f, 3.301836004e-06f, 3.301478813e-06f, 3.301115952e-06f,
+3.300747421e-06f, 3.300373222e-06f, 3.299993357e-06f, 3.299607827e-06f, 3.299216633e-06f, 3.298819778e-06f, 3.298417262e-06f, 3.298009086e-06f, 3.297595254e-06f, 3.297175765e-06f,
+3.296750622e-06f, 3.296319826e-06f, 3.295883378e-06f, 3.295441281e-06f, 3.294993536e-06f, 3.294540145e-06f, 3.294081108e-06f, 3.293616428e-06f, 3.293146106e-06f, 3.292670144e-06f,
+3.292188544e-06f, 3.291701307e-06f, 3.291208434e-06f, 3.290709928e-06f, 3.290205791e-06f, 3.289696023e-06f, 3.289180627e-06f, 3.288659604e-06f, 3.288132956e-06f, 3.287600685e-06f,
+3.287062792e-06f, 3.286519279e-06f, 3.285970149e-06f, 3.285415402e-06f, 3.284855040e-06f, 3.284289066e-06f, 3.283717480e-06f, 3.283140286e-06f, 3.282557484e-06f, 3.281969077e-06f,
+3.281375066e-06f, 3.280775453e-06f, 3.280170240e-06f, 3.279559429e-06f, 3.278943022e-06f, 3.278321020e-06f, 3.277693426e-06f, 3.277060241e-06f, 3.276421467e-06f, 3.275777106e-06f,
+3.275127161e-06f, 3.274471632e-06f, 3.273810523e-06f, 3.273143834e-06f, 3.272471569e-06f, 3.271793728e-06f, 3.271110314e-06f, 3.270421329e-06f, 3.269726775e-06f, 3.269026653e-06f,
+3.268320966e-06f, 3.267609717e-06f, 3.266892906e-06f, 3.266170536e-06f, 3.265442609e-06f, 3.264709127e-06f, 3.263970092e-06f, 3.263225507e-06f, 3.262475372e-06f, 3.261719692e-06f,
+3.260958466e-06f, 3.260191699e-06f, 3.259419391e-06f, 3.258641545e-06f, 3.257858163e-06f, 3.257069247e-06f, 3.256274800e-06f, 3.255474823e-06f, 3.254669319e-06f, 3.253858290e-06f,
+3.253041738e-06f, 3.252219665e-06f, 3.251392074e-06f, 3.250558967e-06f, 3.249720346e-06f, 3.248876213e-06f, 3.248026570e-06f, 3.247171421e-06f, 3.246310766e-06f, 3.245444609e-06f,
+3.244572952e-06f, 3.243695796e-06f, 3.242813145e-06f, 3.241925001e-06f, 3.241031365e-06f, 3.240132241e-06f, 3.239227630e-06f, 3.238317536e-06f, 3.237401960e-06f, 3.236480904e-06f,
+3.235554372e-06f, 3.234622365e-06f, 3.233684886e-06f, 3.232741937e-06f, 3.231793522e-06f, 3.230839641e-06f, 3.229880298e-06f, 3.228915496e-06f, 3.227945235e-06f, 3.226969520e-06f,
+3.225988353e-06f, 3.225001735e-06f, 3.224009670e-06f, 3.223012160e-06f, 3.222009207e-06f, 3.221000815e-06f, 3.219986985e-06f, 3.218967720e-06f, 3.217943023e-06f, 3.216912896e-06f,
+3.215877342e-06f, 3.214836363e-06f, 3.213789962e-06f, 3.212738142e-06f, 3.211680905e-06f, 3.210618254e-06f, 3.209550191e-06f, 3.208476719e-06f, 3.207397841e-06f, 3.206313560e-06f,
+3.205223877e-06f, 3.204128796e-06f, 3.203028319e-06f, 3.201922450e-06f, 3.200811190e-06f, 3.199694542e-06f, 3.198572510e-06f, 3.197445096e-06f, 3.196312302e-06f, 3.195174131e-06f,
+3.194030587e-06f, 3.192881671e-06f, 3.191727388e-06f, 3.190567738e-06f, 3.189402726e-06f, 3.188232354e-06f, 3.187056624e-06f, 3.185875540e-06f, 3.184689105e-06f, 3.183497320e-06f,
+3.182300190e-06f, 3.181097717e-06f, 3.179889903e-06f, 3.178676753e-06f, 3.177458267e-06f, 3.176234451e-06f, 3.175005305e-06f, 3.173770834e-06f, 3.172531040e-06f, 3.171285925e-06f,
+3.170035494e-06f, 3.168779749e-06f, 3.167518692e-06f, 3.166252328e-06f, 3.164980658e-06f, 3.163703686e-06f, 3.162421414e-06f, 3.161133846e-06f, 3.159840985e-06f, 3.158542834e-06f,
+3.157239395e-06f, 3.155930673e-06f, 3.154616668e-06f, 3.153297386e-06f, 3.151972829e-06f, 3.150642999e-06f, 3.149307901e-06f, 3.147967536e-06f, 3.146621909e-06f, 3.145271022e-06f,
+3.143914878e-06f, 3.142553481e-06f, 3.141186833e-06f, 3.139814939e-06f, 3.138437799e-06f, 3.137055419e-06f, 3.135667801e-06f, 3.134274949e-06f, 3.132876865e-06f, 3.131473552e-06f,
+3.130065015e-06f, 3.128651255e-06f, 3.127232277e-06f, 3.125808083e-06f, 3.124378677e-06f, 3.122944061e-06f, 3.121504240e-06f, 3.120059217e-06f, 3.118608994e-06f, 3.117153575e-06f,
+3.115692963e-06f, 3.114227161e-06f, 3.112756174e-06f, 3.111280003e-06f, 3.109798653e-06f, 3.108312127e-06f, 3.106820428e-06f, 3.105323559e-06f, 3.103821523e-06f, 3.102314325e-06f,
+3.100801967e-06f, 3.099284453e-06f, 3.097761787e-06f, 3.096233970e-06f, 3.094701008e-06f, 3.093162903e-06f, 3.091619659e-06f, 3.090071279e-06f, 3.088517767e-06f, 3.086959125e-06f,
+3.085395358e-06f, 3.083826469e-06f, 3.082252462e-06f, 3.080673339e-06f, 3.079089105e-06f, 3.077499763e-06f, 3.075905315e-06f, 3.074305767e-06f, 3.072701121e-06f, 3.071091381e-06f,
+3.069476550e-06f, 3.067856633e-06f, 3.066231631e-06f, 3.064601550e-06f, 3.062966392e-06f, 3.061326162e-06f, 3.059680862e-06f, 3.058030496e-06f, 3.056375069e-06f, 3.054714583e-06f,
+3.053049042e-06f, 3.051378450e-06f, 3.049702810e-06f, 3.048022126e-06f, 3.046336402e-06f, 3.044645641e-06f, 3.042949847e-06f, 3.041249024e-06f, 3.039543175e-06f, 3.037832304e-06f,
+3.036116415e-06f, 3.034395511e-06f, 3.032669596e-06f, 3.030938674e-06f, 3.029202749e-06f, 3.027461824e-06f, 3.025715902e-06f, 3.023964989e-06f, 3.022209087e-06f, 3.020448201e-06f,
+3.018682333e-06f, 3.016911489e-06f, 3.015135671e-06f, 3.013354883e-06f, 3.011569130e-06f, 3.009778414e-06f, 3.007982741e-06f, 3.006182113e-06f, 3.004376535e-06f, 3.002566011e-06f,
+3.000750543e-06f, 2.998930137e-06f, 2.997104796e-06f, 2.995274523e-06f, 2.993439323e-06f, 2.991599200e-06f, 2.989754158e-06f, 2.987904200e-06f, 2.986049330e-06f, 2.984189553e-06f,
+2.982324872e-06f, 2.980455291e-06f, 2.978580814e-06f, 2.976701445e-06f, 2.974817189e-06f, 2.972928048e-06f, 2.971034028e-06f, 2.969135131e-06f, 2.967231363e-06f, 2.965322726e-06f,
+2.963409226e-06f, 2.961490865e-06f, 2.959567649e-06f, 2.957639581e-06f, 2.955706665e-06f, 2.953768905e-06f, 2.951826306e-06f, 2.949878871e-06f, 2.947926604e-06f, 2.945969510e-06f,
+2.944007592e-06f, 2.942040855e-06f, 2.940069303e-06f, 2.938092940e-06f, 2.936111770e-06f, 2.934125797e-06f, 2.932135026e-06f, 2.930139459e-06f, 2.928139103e-06f, 2.926133960e-06f,
+2.924124036e-06f, 2.922109333e-06f, 2.920089857e-06f, 2.918065611e-06f, 2.916036600e-06f, 2.914002828e-06f, 2.911964299e-06f, 2.909921017e-06f, 2.907872987e-06f, 2.905820213e-06f,
+2.903762699e-06f, 2.901700449e-06f, 2.899633468e-06f, 2.897561760e-06f, 2.895485329e-06f, 2.893404179e-06f, 2.891318315e-06f, 2.889227741e-06f, 2.887132462e-06f, 2.885032481e-06f,
+2.882927803e-06f, 2.880818432e-06f, 2.878704373e-06f, 2.876585630e-06f, 2.874462207e-06f, 2.872334109e-06f, 2.870201340e-06f, 2.868063904e-06f, 2.865921806e-06f, 2.863775051e-06f,
+2.861623642e-06f, 2.859467584e-06f, 2.857306881e-06f, 2.855141538e-06f, 2.852971560e-06f, 2.850796950e-06f, 2.848617713e-06f, 2.846433854e-06f, 2.844245377e-06f, 2.842052287e-06f,
+2.839854587e-06f, 2.837652283e-06f, 2.835445379e-06f, 2.833233879e-06f, 2.831017789e-06f, 2.828797111e-06f, 2.826571852e-06f, 2.824342015e-06f, 2.822107606e-06f, 2.819868627e-06f,
+2.817625085e-06f, 2.815376984e-06f, 2.813124327e-06f, 2.810867121e-06f, 2.808605369e-06f, 2.806339075e-06f, 2.804068246e-06f, 2.801792884e-06f, 2.799512995e-06f, 2.797228584e-06f,
+2.794939654e-06f, 2.792646211e-06f, 2.790348259e-06f, 2.788045803e-06f, 2.785738848e-06f, 2.783427397e-06f, 2.781111457e-06f, 2.778791031e-06f, 2.776466124e-06f, 2.774136740e-06f,
+2.771802886e-06f, 2.769464564e-06f, 2.767121781e-06f, 2.764774540e-06f, 2.762422846e-06f, 2.760066704e-06f, 2.757706120e-06f, 2.755341096e-06f, 2.752971639e-06f, 2.750597753e-06f,
+2.748219443e-06f, 2.745836713e-06f, 2.743449569e-06f, 2.741058015e-06f, 2.738662055e-06f, 2.736261695e-06f, 2.733856940e-06f, 2.731447794e-06f, 2.729034262e-06f, 2.726616349e-06f,
+2.724194060e-06f, 2.721767399e-06f, 2.719336372e-06f, 2.716900983e-06f, 2.714461237e-06f, 2.712017139e-06f, 2.709568694e-06f, 2.707115907e-06f, 2.704658782e-06f, 2.702197325e-06f,
+2.699731540e-06f, 2.697261433e-06f, 2.694787008e-06f, 2.692308270e-06f, 2.689825224e-06f, 2.687337874e-06f, 2.684846227e-06f, 2.682350287e-06f, 2.679850059e-06f, 2.677345547e-06f,
+2.674836757e-06f, 2.672323694e-06f, 2.669806362e-06f, 2.667284768e-06f, 2.664758914e-06f, 2.662228808e-06f, 2.659694453e-06f, 2.657155855e-06f, 2.654613018e-06f, 2.652065949e-06f,
+2.649514651e-06f, 2.646959130e-06f, 2.644399390e-06f, 2.641835438e-06f, 2.639267277e-06f, 2.636694914e-06f, 2.634118352e-06f, 2.631537598e-06f, 2.628952656e-06f, 2.626363531e-06f,
+2.623770229e-06f, 2.621172754e-06f, 2.618571112e-06f, 2.615965308e-06f, 2.613355346e-06f, 2.610741233e-06f, 2.608122972e-06f, 2.605500570e-06f, 2.602874032e-06f, 2.600243362e-06f,
+2.597608566e-06f, 2.594969648e-06f, 2.592326615e-06f, 2.589679471e-06f, 2.587028221e-06f, 2.584372872e-06f, 2.581713427e-06f, 2.579049892e-06f, 2.576382272e-06f, 2.573710573e-06f,
+2.571034799e-06f, 2.568354957e-06f, 2.565671050e-06f, 2.562983086e-06f, 2.560291067e-06f, 2.557595001e-06f, 2.554894892e-06f, 2.552190745e-06f, 2.549482566e-06f, 2.546770361e-06f,
+2.544054133e-06f, 2.541333889e-06f, 2.538609634e-06f, 2.535881373e-06f, 2.533149112e-06f, 2.530412856e-06f, 2.527672609e-06f, 2.524928379e-06f, 2.522180169e-06f, 2.519427985e-06f,
+2.516671833e-06f, 2.513911718e-06f, 2.511147645e-06f, 2.508379619e-06f, 2.505607647e-06f, 2.502831733e-06f, 2.500051883e-06f, 2.497268101e-06f, 2.494480395e-06f, 2.491688768e-06f,
+2.488893227e-06f, 2.486093777e-06f, 2.483290422e-06f, 2.480483170e-06f, 2.477672024e-06f, 2.474856991e-06f, 2.472038076e-06f, 2.469215284e-06f, 2.466388621e-06f, 2.463558093e-06f,
+2.460723704e-06f, 2.457885461e-06f, 2.455043368e-06f, 2.452197432e-06f, 2.449347657e-06f, 2.446494050e-06f, 2.443636615e-06f, 2.440775358e-06f, 2.437910286e-06f, 2.435041402e-06f,
+2.432168714e-06f, 2.429292226e-06f, 2.426411943e-06f, 2.423527873e-06f, 2.420640019e-06f, 2.417748387e-06f, 2.414852984e-06f, 2.411953815e-06f, 2.409050884e-06f, 2.406144199e-06f,
+2.403233764e-06f, 2.400319585e-06f, 2.397401668e-06f, 2.394480018e-06f, 2.391554640e-06f, 2.388625542e-06f, 2.385692727e-06f, 2.382756202e-06f, 2.379815972e-06f, 2.376872043e-06f,
+2.373924421e-06f, 2.370973111e-06f, 2.368018119e-06f, 2.365059451e-06f, 2.362097111e-06f, 2.359131107e-06f, 2.356161443e-06f, 2.353188126e-06f, 2.350211160e-06f, 2.347230552e-06f,
+2.344246308e-06f, 2.341258432e-06f, 2.338266932e-06f, 2.335271811e-06f, 2.332273077e-06f, 2.329270735e-06f, 2.326264790e-06f, 2.323255249e-06f, 2.320242117e-06f, 2.317225400e-06f,
+2.314205103e-06f, 2.311181233e-06f, 2.308153795e-06f, 2.305122795e-06f, 2.302088239e-06f, 2.299050132e-06f, 2.296008480e-06f, 2.292963289e-06f, 2.289914565e-06f, 2.286862314e-06f,
+2.283806541e-06f, 2.280747253e-06f, 2.277684455e-06f, 2.274618152e-06f, 2.271548351e-06f, 2.268475058e-06f, 2.265398278e-06f, 2.262318017e-06f, 2.259234282e-06f, 2.256147077e-06f,
+2.253056409e-06f, 2.249962284e-06f, 2.246864708e-06f, 2.243763685e-06f, 2.240659223e-06f, 2.237551327e-06f, 2.234440004e-06f, 2.231325258e-06f, 2.228207096e-06f, 2.225085524e-06f,
+2.221960547e-06f, 2.218832172e-06f, 2.215700405e-06f, 2.212565251e-06f, 2.209426716e-06f, 2.206284806e-06f, 2.203139528e-06f, 2.199990887e-06f, 2.196838889e-06f, 2.193683540e-06f,
+2.190524846e-06f, 2.187362814e-06f, 2.184197448e-06f, 2.181028755e-06f, 2.177856741e-06f, 2.174681412e-06f, 2.171502773e-06f, 2.168320832e-06f, 2.165135594e-06f, 2.161947064e-06f,
+2.158755249e-06f, 2.155560156e-06f, 2.152361789e-06f, 2.149160155e-06f, 2.145955260e-06f, 2.142747110e-06f, 2.139535711e-06f, 2.136321070e-06f, 2.133103191e-06f, 2.129882081e-06f,
+2.126657747e-06f, 2.123430194e-06f, 2.120199429e-06f, 2.116965457e-06f, 2.113728284e-06f, 2.110487917e-06f, 2.107244362e-06f, 2.103997625e-06f, 2.100747711e-06f, 2.097494627e-06f,
+2.094238380e-06f, 2.090978974e-06f, 2.087716417e-06f, 2.084450715e-06f, 2.081181872e-06f, 2.077909897e-06f, 2.074634794e-06f, 2.071356570e-06f, 2.068075231e-06f, 2.064790784e-06f,
+2.061503234e-06f, 2.058212587e-06f, 2.054918850e-06f, 2.051622029e-06f, 2.048322129e-06f, 2.045019158e-06f, 2.041713121e-06f, 2.038404025e-06f, 2.035091876e-06f, 2.031776679e-06f,
+2.028458441e-06f, 2.025137169e-06f, 2.021812868e-06f, 2.018485545e-06f, 2.015155206e-06f, 2.011821857e-06f, 2.008485504e-06f, 2.005146154e-06f, 2.001803813e-06f, 1.998458486e-06f,
+1.995110181e-06f, 1.991758903e-06f, 1.988404659e-06f, 1.985047455e-06f, 1.981687298e-06f, 1.978324192e-06f, 1.974958146e-06f, 1.971589165e-06f, 1.968217254e-06f, 1.964842422e-06f,
+1.961464673e-06f, 1.958084015e-06f, 1.954700453e-06f, 1.951313993e-06f, 1.947924643e-06f, 1.944532408e-06f, 1.941137294e-06f, 1.937739308e-06f, 1.934338457e-06f, 1.930934746e-06f,
+1.927528182e-06f, 1.924118772e-06f, 1.920706520e-06f, 1.917291435e-06f, 1.913873522e-06f, 1.910452787e-06f, 1.907029237e-06f, 1.903602878e-06f, 1.900173717e-06f, 1.896741760e-06f,
+1.893307013e-06f, 1.889869483e-06f, 1.886429176e-06f, 1.882986098e-06f, 1.879540256e-06f, 1.876091656e-06f, 1.872640305e-06f, 1.869186208e-06f, 1.865729373e-06f, 1.862269805e-06f,
+1.858807512e-06f, 1.855342499e-06f, 1.851874773e-06f, 1.848404340e-06f, 1.844931207e-06f, 1.841455380e-06f, 1.837976866e-06f, 1.834495671e-06f, 1.831011801e-06f, 1.827525263e-06f,
+1.824036063e-06f, 1.820544208e-06f, 1.817049704e-06f, 1.813552557e-06f, 1.810052775e-06f, 1.806550363e-06f, 1.803045328e-06f, 1.799537677e-06f, 1.796027416e-06f, 1.792514550e-06f,
+1.788999088e-06f, 1.785481035e-06f, 1.781960398e-06f, 1.778437183e-06f, 1.774911397e-06f, 1.771383046e-06f, 1.767852137e-06f, 1.764318676e-06f, 1.760782670e-06f, 1.757244125e-06f,
+1.753703048e-06f, 1.750159445e-06f, 1.746613323e-06f, 1.743064688e-06f, 1.739513547e-06f, 1.735959906e-06f, 1.732403772e-06f, 1.728845152e-06f, 1.725284052e-06f, 1.721720478e-06f,
+1.718154437e-06f, 1.714585935e-06f, 1.711014980e-06f, 1.707441577e-06f, 1.703865734e-06f, 1.700287456e-06f, 1.696706751e-06f, 1.693123624e-06f, 1.689538083e-06f, 1.685950134e-06f,
+1.682359784e-06f, 1.678767039e-06f, 1.675171905e-06f, 1.671574390e-06f, 1.667974500e-06f, 1.664372241e-06f, 1.660767621e-06f, 1.657160645e-06f, 1.653551321e-06f, 1.649939654e-06f,
+1.646325652e-06f, 1.642709321e-06f, 1.639090668e-06f, 1.635469699e-06f, 1.631846421e-06f, 1.628220841e-06f, 1.624592965e-06f, 1.620962800e-06f, 1.617330352e-06f, 1.613695629e-06f,
+1.610058636e-06f, 1.606419380e-06f, 1.602777869e-06f, 1.599134108e-06f, 1.595488105e-06f, 1.591839865e-06f, 1.588189397e-06f, 1.584536705e-06f, 1.580881798e-06f, 1.577224681e-06f,
+1.573565361e-06f, 1.569903845e-06f, 1.566240140e-06f, 1.562574252e-06f, 1.558906188e-06f, 1.555235955e-06f, 1.551563559e-06f, 1.547889007e-06f, 1.544212306e-06f, 1.540533462e-06f,
+1.536852482e-06f, 1.533169373e-06f, 1.529484142e-06f, 1.525796794e-06f, 1.522107338e-06f, 1.518415779e-06f, 1.514722125e-06f, 1.511026381e-06f, 1.507328555e-06f, 1.503628654e-06f,
+1.499926684e-06f, 1.496222651e-06f, 1.492516564e-06f, 1.488808427e-06f, 1.485098249e-06f, 1.481386035e-06f, 1.477671793e-06f, 1.473955530e-06f, 1.470237251e-06f, 1.466516964e-06f,
+1.462794676e-06f, 1.459070393e-06f, 1.455344121e-06f, 1.451615869e-06f, 1.447885642e-06f, 1.444153448e-06f, 1.440419292e-06f, 1.436683182e-06f, 1.432945125e-06f, 1.429205127e-06f,
+1.425463196e-06f, 1.421719337e-06f, 1.417973558e-06f, 1.414225865e-06f, 1.410476265e-06f, 1.406724766e-06f, 1.402971373e-06f, 1.399216094e-06f, 1.395458935e-06f, 1.391699903e-06f,
+1.387939005e-06f, 1.384176248e-06f, 1.380411638e-06f, 1.376645183e-06f, 1.372876889e-06f, 1.369106763e-06f, 1.365334811e-06f, 1.361561042e-06f, 1.357785460e-06f, 1.354008074e-06f,
+1.350228889e-06f, 1.346447914e-06f, 1.342665154e-06f, 1.338880616e-06f, 1.335094308e-06f, 1.331306236e-06f, 1.327516407e-06f, 1.323724828e-06f, 1.319931505e-06f, 1.316136445e-06f,
+1.312339656e-06f, 1.308541144e-06f, 1.304740916e-06f, 1.300938979e-06f, 1.297135339e-06f, 1.293330004e-06f, 1.289522980e-06f, 1.285714275e-06f, 1.281903894e-06f, 1.278091845e-06f,
+1.274278135e-06f, 1.270462771e-06f, 1.266645759e-06f, 1.262827106e-06f, 1.259006819e-06f, 1.255184906e-06f, 1.251361372e-06f, 1.247536225e-06f, 1.243709472e-06f, 1.239881120e-06f,
+1.236051174e-06f, 1.232219644e-06f, 1.228386534e-06f, 1.224551852e-06f, 1.220715605e-06f, 1.216877800e-06f, 1.213038444e-06f, 1.209197543e-06f, 1.205355104e-06f, 1.201511135e-06f,
+1.197665642e-06f, 1.193818633e-06f, 1.189970113e-06f, 1.186120090e-06f, 1.182268571e-06f, 1.178415563e-06f, 1.174561073e-06f, 1.170705106e-06f, 1.166847672e-06f, 1.162988775e-06f,
+1.159128424e-06f, 1.155266625e-06f, 1.151403385e-06f, 1.147538711e-06f, 1.143672610e-06f, 1.139805089e-06f, 1.135936155e-06f, 1.132065814e-06f, 1.128194073e-06f, 1.124320940e-06f,
+1.120446422e-06f, 1.116570524e-06f, 1.112693255e-06f, 1.108814622e-06f, 1.104934630e-06f, 1.101053287e-06f, 1.097170600e-06f, 1.093286576e-06f, 1.089401222e-06f, 1.085514545e-06f,
+1.081626551e-06f, 1.077737248e-06f, 1.073846643e-06f, 1.069954742e-06f, 1.066061552e-06f, 1.062167081e-06f, 1.058271335e-06f, 1.054374322e-06f, 1.050476047e-06f, 1.046576519e-06f,
+1.042675744e-06f, 1.038773729e-06f, 1.034870481e-06f, 1.030966007e-06f, 1.027060313e-06f, 1.023153408e-06f, 1.019245298e-06f, 1.015335989e-06f, 1.011425489e-06f, 1.007513804e-06f,
+1.003600943e-06f, 9.996869106e-07f, 9.957717151e-07f, 9.918553631e-07f, 9.879378615e-07f, 9.840192174e-07f, 9.800994378e-07f, 9.761785295e-07f, 9.722564995e-07f, 9.683333549e-07f,
+9.644091026e-07f, 9.604837495e-07f, 9.565573026e-07f, 9.526297689e-07f, 9.487011554e-07f, 9.447714690e-07f, 9.408407168e-07f, 9.369089056e-07f, 9.329760425e-07f, 9.290421344e-07f,
+9.251071883e-07f, 9.211712113e-07f, 9.172342102e-07f, 9.132961920e-07f, 9.093571638e-07f, 9.054171325e-07f, 9.014761051e-07f, 8.975340885e-07f, 8.935910898e-07f, 8.896471160e-07f,
+8.857021740e-07f, 8.817562708e-07f, 8.778094134e-07f, 8.738616088e-07f, 8.699128639e-07f, 8.659631858e-07f, 8.620125814e-07f, 8.580610578e-07f, 8.541086219e-07f, 8.501552807e-07f,
+8.462010412e-07f, 8.422459105e-07f, 8.382898953e-07f, 8.343330029e-07f, 8.303752402e-07f, 8.264166141e-07f, 8.224571316e-07f, 8.184967998e-07f, 8.145356257e-07f, 8.105736162e-07f,
+8.066107783e-07f, 8.026471191e-07f, 7.986826455e-07f, 7.947173645e-07f, 7.907512831e-07f, 7.867844084e-07f, 7.828167472e-07f, 7.788483067e-07f, 7.748790938e-07f, 7.709091155e-07f,
+7.669383788e-07f, 7.629668907e-07f, 7.589946583e-07f, 7.550216884e-07f, 7.510479881e-07f, 7.470735645e-07f, 7.430984244e-07f, 7.391225750e-07f, 7.351460232e-07f, 7.311687759e-07f,
+7.271908403e-07f, 7.232122234e-07f, 7.192329320e-07f, 7.152529732e-07f, 7.112723541e-07f, 7.072910816e-07f, 7.033091627e-07f, 6.993266044e-07f, 6.953434138e-07f, 6.913595978e-07f,
+6.873751634e-07f, 6.833901177e-07f, 6.794044676e-07f, 6.754182202e-07f, 6.714313824e-07f, 6.674439612e-07f, 6.634559637e-07f, 6.594673969e-07f, 6.554782677e-07f, 6.514885831e-07f,
+6.474983503e-07f, 6.435075761e-07f, 6.395162675e-07f, 6.355244316e-07f, 6.315320754e-07f, 6.275392059e-07f, 6.235458301e-07f, 6.195519549e-07f, 6.155575874e-07f, 6.115627346e-07f,
+6.075674034e-07f, 6.035716010e-07f, 5.995753342e-07f, 5.955786101e-07f, 5.915814357e-07f, 5.875838180e-07f, 5.835857640e-07f, 5.795872807e-07f, 5.755883750e-07f, 5.715890541e-07f,
+5.675893248e-07f, 5.635891942e-07f, 5.595886693e-07f, 5.555877570e-07f, 5.515864645e-07f, 5.475847986e-07f, 5.435827664e-07f, 5.395803748e-07f, 5.355776309e-07f, 5.315745417e-07f,
+5.275711141e-07f, 5.235673552e-07f, 5.195632719e-07f, 5.155588713e-07f, 5.115541603e-07f, 5.075491459e-07f, 5.035438351e-07f, 4.995382349e-07f, 4.955323524e-07f, 4.915261944e-07f,
+4.875197680e-07f, 4.835130802e-07f, 4.795061380e-07f, 4.754989483e-07f, 4.714915181e-07f, 4.674838545e-07f, 4.634759644e-07f, 4.594678548e-07f, 4.554595326e-07f, 4.514510050e-07f,
+4.474422788e-07f, 4.434333610e-07f, 4.394242586e-07f, 4.354149787e-07f, 4.314055281e-07f, 4.273959140e-07f, 4.233861431e-07f, 4.193762226e-07f, 4.153661594e-07f, 4.113559605e-07f,
+4.073456328e-07f, 4.033351834e-07f, 3.993246192e-07f, 3.953139471e-07f, 3.913031743e-07f, 3.872923076e-07f, 3.832813539e-07f, 3.792703204e-07f, 3.752592139e-07f, 3.712480414e-07f,
+3.672368099e-07f, 3.632255264e-07f, 3.592141978e-07f, 3.552028311e-07f, 3.511914332e-07f, 3.471800111e-07f, 3.431685719e-07f, 3.391571223e-07f, 3.351456695e-07f, 3.311342203e-07f,
+3.271227818e-07f, 3.231113608e-07f, 3.190999644e-07f, 3.150885995e-07f, 3.110772730e-07f, 3.070659919e-07f, 3.030547632e-07f, 2.990435938e-07f, 2.950324906e-07f, 2.910214607e-07f,
+2.870105109e-07f, 2.829996482e-07f, 2.789888795e-07f, 2.749782119e-07f, 2.709676521e-07f, 2.669572073e-07f, 2.629468843e-07f, 2.589366900e-07f, 2.549266314e-07f, 2.509167155e-07f,
+2.469069491e-07f, 2.428973393e-07f, 2.388878929e-07f, 2.348786168e-07f, 2.308695181e-07f, 2.268606036e-07f, 2.228518802e-07f, 2.188433550e-07f, 2.148350348e-07f, 2.108269265e-07f,
+2.068190370e-07f, 2.028113734e-07f, 1.988039424e-07f, 1.947967511e-07f, 1.907898063e-07f, 1.867831149e-07f, 1.827766840e-07f, 1.787705203e-07f, 1.747646308e-07f, 1.707590224e-07f,
+1.667537021e-07f, 1.627486766e-07f, 1.587439530e-07f, 1.547395381e-07f, 1.507354388e-07f, 1.467316621e-07f, 1.427282148e-07f, 1.387251038e-07f, 1.347223361e-07f, 1.307199185e-07f,
+1.267178578e-07f, 1.227161611e-07f, 1.187148352e-07f, 1.147138870e-07f, 1.107133233e-07f, 1.067131511e-07f, 1.027133773e-07f, 9.871400862e-08f, 9.471505207e-08f, 9.071651449e-08f,
+8.671840277e-08f, 8.272072377e-08f, 7.872348437e-08f, 7.472669145e-08f, 7.073035186e-08f, 6.673447247e-08f, 6.273906016e-08f, 5.874412179e-08f, 5.474966421e-08f, 5.075569429e-08f,
+4.676221888e-08f, 4.276924485e-08f, 3.877677905e-08f, 3.478482832e-08f, 3.079339953e-08f, 2.680249951e-08f, 2.281213512e-08f, 1.882231320e-08f, 1.483304060e-08f, 1.084432415e-08f,
+6.856170695e-09f, 2.868587072e-09f, -1.118419885e-09f, -5.104843341e-09f, -9.090676466e-09f, -1.307591243e-08f, -1.706054441e-08f, -2.104456557e-08f, -2.502796910e-08f, -2.901074818e-08f,
+-3.299289597e-08f, -3.697440568e-08f, -4.095527048e-08f, -4.493548355e-08f, -4.891503810e-08f, -5.289392731e-08f, -5.687214438e-08f, -6.084968250e-08f, -6.482653487e-08f, -6.880269468e-08f,
+-7.277815515e-08f, -7.675290948e-08f, -8.072695087e-08f, -8.470027254e-08f, -8.867286769e-08f, -9.264472953e-08f, -9.661585130e-08f, -1.005862262e-07f, -1.045558474e-07f, -1.085247083e-07f,
+-1.124928019e-07f, -1.164601215e-07f, -1.204266605e-07f, -1.243924119e-07f, -1.283573690e-07f, -1.323215251e-07f, -1.362848734e-07f, -1.402474071e-07f, -1.442091195e-07f, -1.481700039e-07f,
+-1.521300534e-07f, -1.560892614e-07f, -1.600476210e-07f, -1.640051256e-07f, -1.679617684e-07f, -1.719175427e-07f, -1.758724416e-07f, -1.798264586e-07f, -1.837795868e-07f, -1.877318196e-07f,
+-1.916831502e-07f, -1.956335718e-07f, -1.995830778e-07f, -2.035316615e-07f, -2.074793161e-07f, -2.114260349e-07f, -2.153718112e-07f, -2.193166383e-07f, -2.232605094e-07f, -2.272034180e-07f,
+-2.311453572e-07f, -2.350863204e-07f, -2.390263010e-07f, -2.429652921e-07f, -2.469032871e-07f, -2.508402794e-07f, -2.547762621e-07f, -2.587112288e-07f, -2.626451726e-07f, -2.665780869e-07f,
+-2.705099651e-07f, -2.744408004e-07f, -2.783705862e-07f, -2.822993158e-07f, -2.862269826e-07f, -2.901535798e-07f, -2.940791010e-07f, -2.980035393e-07f, -3.019268882e-07f, -3.058491409e-07f,
+-3.097702910e-07f, -3.136903316e-07f, -3.176092562e-07f, -3.215270581e-07f, -3.254437307e-07f, -3.293592674e-07f, -3.332736615e-07f, -3.371869065e-07f, -3.410989956e-07f, -3.450099223e-07f,
+-3.489196800e-07f, -3.528282620e-07f, -3.567356618e-07f, -3.606418727e-07f, -3.645468881e-07f, -3.684507014e-07f, -3.723533061e-07f, -3.762546955e-07f, -3.801548631e-07f, -3.840538022e-07f,
+-3.879515063e-07f, -3.918479687e-07f, -3.957431830e-07f, -3.996371425e-07f, -4.035298407e-07f, -4.074212709e-07f, -4.113114267e-07f, -4.152003014e-07f, -4.190878886e-07f, -4.229741815e-07f,
+-4.268591738e-07f, -4.307428588e-07f, -4.346252300e-07f, -4.385062809e-07f, -4.423860048e-07f, -4.462643953e-07f, -4.501414459e-07f, -4.540171500e-07f, -4.578915010e-07f, -4.617644925e-07f,
+-4.656361179e-07f, -4.695063708e-07f, -4.733752445e-07f, -4.772427326e-07f, -4.811088286e-07f, -4.849735260e-07f, -4.888368182e-07f, -4.926986989e-07f, -4.965591614e-07f, -5.004181993e-07f,
+-5.042758061e-07f, -5.081319753e-07f, -5.119867005e-07f, -5.158399751e-07f, -5.196917928e-07f, -5.235421469e-07f, -5.273910311e-07f, -5.312384389e-07f, -5.350843638e-07f, -5.389287994e-07f,
+-5.427717392e-07f, -5.466131768e-07f, -5.504531057e-07f, -5.542915195e-07f, -5.581284117e-07f, -5.619637760e-07f, -5.657976058e-07f, -5.696298948e-07f, -5.734606366e-07f, -5.772898246e-07f,
+-5.811174525e-07f, -5.849435139e-07f, -5.887680024e-07f, -5.925909115e-07f, -5.964122349e-07f, -6.002319662e-07f, -6.040500989e-07f, -6.078666267e-07f, -6.116815432e-07f, -6.154948421e-07f,
+-6.193065168e-07f, -6.231165611e-07f, -6.269249686e-07f, -6.307317328e-07f, -6.345368476e-07f, -6.383403064e-07f, -6.421421029e-07f, -6.459422309e-07f, -6.497406838e-07f, -6.535374554e-07f,
+-6.573325394e-07f, -6.611259294e-07f, -6.649176190e-07f, -6.687076020e-07f, -6.724958719e-07f, -6.762824226e-07f, -6.800672476e-07f, -6.838503407e-07f, -6.876316956e-07f, -6.914113058e-07f,
+-6.951891652e-07f, -6.989652675e-07f, -7.027396063e-07f, -7.065121753e-07f, -7.102829683e-07f, -7.140519790e-07f, -7.178192010e-07f, -7.215846282e-07f, -7.253482543e-07f, -7.291100730e-07f,
+-7.328700779e-07f, -7.366282630e-07f, -7.403846218e-07f, -7.441391483e-07f, -7.478918360e-07f, -7.516426788e-07f, -7.553916705e-07f, -7.591388047e-07f, -7.628840754e-07f, -7.666274761e-07f,
+-7.703690008e-07f, -7.741086432e-07f, -7.778463971e-07f, -7.815822563e-07f, -7.853162146e-07f, -7.890482657e-07f, -7.927784036e-07f, -7.965066219e-07f, -8.002329145e-07f, -8.039572753e-07f,
+-8.076796980e-07f, -8.114001764e-07f, -8.151187045e-07f, -8.188352760e-07f, -8.225498847e-07f, -8.262625245e-07f, -8.299731893e-07f, -8.336818730e-07f, -8.373885692e-07f, -8.410932720e-07f,
+-8.447959752e-07f, -8.484966726e-07f, -8.521953581e-07f, -8.558920257e-07f, -8.595866691e-07f, -8.632792823e-07f, -8.669698591e-07f, -8.706583935e-07f, -8.743448794e-07f, -8.780293106e-07f,
+-8.817116810e-07f, -8.853919847e-07f, -8.890702154e-07f, -8.927463671e-07f, -8.964204338e-07f, -9.000924094e-07f, -9.037622877e-07f, -9.074300628e-07f, -9.110957286e-07f, -9.147592790e-07f,
+-9.184207080e-07f, -9.220800095e-07f, -9.257371775e-07f, -9.293922060e-07f, -9.330450890e-07f, -9.366958204e-07f, -9.403443942e-07f, -9.439908043e-07f, -9.476350449e-07f, -9.512771098e-07f,
+-9.549169931e-07f, -9.585546887e-07f, -9.621901908e-07f, -9.658234932e-07f, -9.694545900e-07f, -9.730834753e-07f, -9.767101430e-07f, -9.803345873e-07f, -9.839568020e-07f, -9.875767814e-07f,
+-9.911945193e-07f, -9.948100099e-07f, -9.984232473e-07f, -1.002034225e-06f, -1.005642938e-06f, -1.009249380e-06f, -1.012853545e-06f, -1.016455427e-06f, -1.020055020e-06f, -1.023652319e-06f,
+-1.027247316e-06f, -1.030840008e-06f, -1.034430386e-06f, -1.038018447e-06f, -1.041604183e-06f, -1.045187589e-06f, -1.048768659e-06f, -1.052347387e-06f, -1.055923767e-06f, -1.059497794e-06f,
+-1.063069462e-06f, -1.066638764e-06f, -1.070205695e-06f, -1.073770249e-06f, -1.077332420e-06f, -1.080892202e-06f, -1.084449590e-06f, -1.088004578e-06f, -1.091557160e-06f, -1.095107329e-06f,
+-1.098655081e-06f, -1.102200410e-06f, -1.105743309e-06f, -1.109283773e-06f, -1.112821795e-06f, -1.116357372e-06f, -1.119890496e-06f, -1.123421161e-06f, -1.126949363e-06f, -1.130475094e-06f,
+-1.133998351e-06f, -1.137519126e-06f, -1.141037414e-06f, -1.144553209e-06f, -1.148066505e-06f, -1.151577298e-06f, -1.155085580e-06f, -1.158591347e-06f, -1.162094593e-06f, -1.165595311e-06f,
+-1.169093496e-06f, -1.172589143e-06f, -1.176082246e-06f, -1.179572799e-06f, -1.183060797e-06f, -1.186546233e-06f, -1.190029102e-06f, -1.193509398e-06f, -1.196987117e-06f, -1.200462251e-06f,
+-1.203934796e-06f, -1.207404746e-06f, -1.210872095e-06f, -1.214336837e-06f, -1.217798967e-06f, -1.221258480e-06f, -1.224715369e-06f, -1.228169629e-06f, -1.231621255e-06f, -1.235070240e-06f,
+-1.238516580e-06f, -1.241960268e-06f, -1.245401300e-06f, -1.248839668e-06f, -1.252275369e-06f, -1.255708396e-06f, -1.259138744e-06f, -1.262566407e-06f, -1.265991379e-06f, -1.269413656e-06f,
+-1.272833231e-06f, -1.276250100e-06f, -1.279664255e-06f, -1.283075693e-06f, -1.286484407e-06f, -1.289890392e-06f, -1.293293642e-06f, -1.296694153e-06f, -1.300091917e-06f, -1.303486931e-06f,
+-1.306879188e-06f, -1.310268683e-06f, -1.313655410e-06f, -1.317039365e-06f, -1.320420541e-06f, -1.323798933e-06f, -1.327174535e-06f, -1.330547343e-06f, -1.333917350e-06f, -1.337284552e-06f,
+-1.340648943e-06f, -1.344010517e-06f, -1.347369269e-06f, -1.350725193e-06f, -1.354078285e-06f, -1.357428539e-06f, -1.360775949e-06f, -1.364120510e-06f, -1.367462216e-06f, -1.370801063e-06f,
+-1.374137044e-06f, -1.377470155e-06f, -1.380800391e-06f, -1.384127745e-06f, -1.387452212e-06f, -1.390773787e-06f, -1.394092465e-06f, -1.397408241e-06f, -1.400721108e-06f, -1.404031063e-06f,
+-1.407338098e-06f, -1.410642210e-06f, -1.413943393e-06f, -1.417241641e-06f, -1.420536949e-06f, -1.423829313e-06f, -1.427118726e-06f, -1.430405183e-06f, -1.433688679e-06f, -1.436969210e-06f,
+-1.440246768e-06f, -1.443521350e-06f, -1.446792951e-06f, -1.450061564e-06f, -1.453327184e-06f, -1.456589807e-06f, -1.459849428e-06f, -1.463106040e-06f, -1.466359639e-06f, -1.469610219e-06f,
+-1.472857776e-06f, -1.476102304e-06f, -1.479343798e-06f, -1.482582252e-06f, -1.485817662e-06f, -1.489050023e-06f, -1.492279329e-06f, -1.495505575e-06f, -1.498728756e-06f, -1.501948867e-06f,
+-1.505165902e-06f, -1.508379857e-06f, -1.511590727e-06f, -1.514798506e-06f, -1.518003189e-06f, -1.521204771e-06f, -1.524403247e-06f, -1.527598612e-06f, -1.530790860e-06f, -1.533979988e-06f,
+-1.537165989e-06f, -1.540348859e-06f, -1.543528592e-06f, -1.546705184e-06f, -1.549878629e-06f, -1.553048922e-06f, -1.556216059e-06f, -1.559380034e-06f, -1.562540842e-06f, -1.565698479e-06f,
+-1.568852939e-06f, -1.572004217e-06f, -1.575152308e-06f, -1.578297207e-06f, -1.581438910e-06f, -1.584577411e-06f, -1.587712705e-06f, -1.590844787e-06f, -1.593973653e-06f, -1.597099297e-06f,
+-1.600221715e-06f, -1.603340901e-06f, -1.606456851e-06f, -1.609569559e-06f, -1.612679021e-06f, -1.615785232e-06f, -1.618888186e-06f, -1.621987880e-06f, -1.625084307e-06f, -1.628177464e-06f,
+-1.631267345e-06f, -1.634353946e-06f, -1.637437261e-06f, -1.640517285e-06f, -1.643594014e-06f, -1.646667444e-06f, -1.649737568e-06f, -1.652804383e-06f, -1.655867883e-06f, -1.658928063e-06f,
+-1.661984919e-06f, -1.665038447e-06f, -1.668088640e-06f, -1.671135495e-06f, -1.674179006e-06f, -1.677219169e-06f, -1.680255978e-06f, -1.683289430e-06f, -1.686319520e-06f, -1.689346242e-06f,
+-1.692369592e-06f, -1.695389565e-06f, -1.698406156e-06f, -1.701419361e-06f, -1.704429175e-06f, -1.707435593e-06f, -1.710438611e-06f, -1.713438223e-06f, -1.716434425e-06f, -1.719427213e-06f,
+-1.722416581e-06f, -1.725402526e-06f, -1.728385041e-06f, -1.731364124e-06f, -1.734339768e-06f, -1.737311969e-06f, -1.740280723e-06f, -1.743246025e-06f, -1.746207871e-06f, -1.749166255e-06f,
+-1.752121173e-06f, -1.755072621e-06f, -1.758020594e-06f, -1.760965086e-06f, -1.763906095e-06f, -1.766843615e-06f, -1.769777641e-06f, -1.772708169e-06f, -1.775635194e-06f, -1.778558712e-06f,
+-1.781478718e-06f, -1.784395208e-06f, -1.787308177e-06f, -1.790217621e-06f, -1.793123534e-06f, -1.796025914e-06f, -1.798924754e-06f, -1.801820050e-06f, -1.804711799e-06f, -1.807599995e-06f,
+-1.810484634e-06f, -1.813365712e-06f, -1.816243224e-06f, -1.819117165e-06f, -1.821987531e-06f, -1.824854318e-06f, -1.827717521e-06f, -1.830577136e-06f, -1.833433159e-06f, -1.836285584e-06f,
+-1.839134408e-06f, -1.841979625e-06f, -1.844821233e-06f, -1.847659225e-06f, -1.850493599e-06f, -1.853324348e-06f, -1.856151470e-06f, -1.858974960e-06f, -1.861794813e-06f, -1.864611025e-06f,
+-1.867423592e-06f, -1.870232509e-06f, -1.873037772e-06f, -1.875839376e-06f, -1.878637318e-06f, -1.881431593e-06f, -1.884222196e-06f, -1.887009124e-06f, -1.889792372e-06f, -1.892571936e-06f,
+-1.895347811e-06f, -1.898119993e-06f, -1.900888479e-06f, -1.903653263e-06f, -1.906414341e-06f, -1.909171710e-06f, -1.911925364e-06f, -1.914675301e-06f, -1.917421514e-06f, -1.920164001e-06f,
+-1.922902758e-06f, -1.925637779e-06f, -1.928369060e-06f, -1.931096598e-06f, -1.933820389e-06f, -1.936540427e-06f, -1.939256709e-06f, -1.941969232e-06f, -1.944677989e-06f, -1.947382979e-06f,
+-1.950084195e-06f, -1.952781635e-06f, -1.955475294e-06f, -1.958165168e-06f, -1.960851252e-06f, -1.963533544e-06f, -1.966212038e-06f, -1.968886730e-06f, -1.971557617e-06f, -1.974224695e-06f,
+-1.976887959e-06f, -1.979547405e-06f, -1.982203029e-06f, -1.984854827e-06f, -1.987502796e-06f, -1.990146930e-06f, -1.992787227e-06f, -1.995423681e-06f, -1.998056290e-06f, -2.000685049e-06f,
+-2.003309954e-06f, -2.005931000e-06f, -2.008548185e-06f, -2.011161504e-06f, -2.013770953e-06f, -2.016376528e-06f, -2.018978226e-06f, -2.021576041e-06f, -2.024169971e-06f, -2.026760012e-06f,
+-2.029346159e-06f, -2.031928408e-06f, -2.034506756e-06f, -2.037081199e-06f, -2.039651732e-06f, -2.042218353e-06f, -2.044781057e-06f, -2.047339839e-06f, -2.049894698e-06f, -2.052445627e-06f,
+-2.054992625e-06f, -2.057535686e-06f, -2.060074807e-06f, -2.062609984e-06f, -2.065141214e-06f, -2.067668492e-06f, -2.070191815e-06f, -2.072711178e-06f, -2.075226579e-06f, -2.077738013e-06f,
+-2.080245477e-06f, -2.082748966e-06f, -2.085248478e-06f, -2.087744008e-06f, -2.090235552e-06f, -2.092723107e-06f, -2.095206669e-06f, -2.097686234e-06f, -2.100161799e-06f, -2.102633360e-06f,
+-2.105100914e-06f, -2.107564455e-06f, -2.110023982e-06f, -2.112479489e-06f, -2.114930975e-06f, -2.117378434e-06f, -2.119821863e-06f, -2.122261258e-06f, -2.124696617e-06f, -2.127127935e-06f,
+-2.129555208e-06f, -2.131978433e-06f, -2.134397607e-06f, -2.136812726e-06f, -2.139223785e-06f, -2.141630783e-06f, -2.144033714e-06f, -2.146432576e-06f, -2.148827364e-06f, -2.151218076e-06f,
+-2.153604708e-06f, -2.155987256e-06f, -2.158365717e-06f, -2.160740087e-06f, -2.163110362e-06f, -2.165476540e-06f, -2.167838616e-06f, -2.170196588e-06f, -2.172550451e-06f, -2.174900202e-06f,
+-2.177245838e-06f, -2.179587355e-06f, -2.181924750e-06f, -2.184258020e-06f, -2.186587160e-06f, -2.188912168e-06f, -2.191233039e-06f, -2.193549772e-06f, -2.195862361e-06f, -2.198170804e-06f,
+-2.200475098e-06f, -2.202775239e-06f, -2.205071223e-06f, -2.207363047e-06f, -2.209650709e-06f, -2.211934204e-06f, -2.214213529e-06f, -2.216488681e-06f, -2.218759656e-06f, -2.221026452e-06f,
+-2.223289064e-06f, -2.225547490e-06f, -2.227801726e-06f, -2.230051769e-06f, -2.232297616e-06f, -2.234539263e-06f, -2.236776707e-06f, -2.239009945e-06f, -2.241238974e-06f, -2.243463790e-06f,
+-2.245684390e-06f, -2.247900771e-06f, -2.250112929e-06f, -2.252320862e-06f, -2.254524566e-06f, -2.256724038e-06f, -2.258919275e-06f, -2.261110274e-06f, -2.263297031e-06f, -2.265479543e-06f,
+-2.267657807e-06f, -2.269831820e-06f, -2.272001579e-06f, -2.274167081e-06f, -2.276328322e-06f, -2.278485300e-06f, -2.280638011e-06f, -2.282786452e-06f, -2.284930620e-06f, -2.287070512e-06f,
+-2.289206125e-06f, -2.291337455e-06f, -2.293464501e-06f, -2.295587258e-06f, -2.297705724e-06f, -2.299819895e-06f, -2.301929769e-06f, -2.304035343e-06f, -2.306136613e-06f, -2.308233576e-06f,
+-2.310326230e-06f, -2.312414572e-06f, -2.314498598e-06f, -2.316578305e-06f, -2.318653691e-06f, -2.320724753e-06f, -2.322791487e-06f, -2.324853890e-06f, -2.326911961e-06f, -2.328965695e-06f,
+-2.331015090e-06f, -2.333060144e-06f, -2.335100852e-06f, -2.337137212e-06f, -2.339169221e-06f, -2.341196877e-06f, -2.343220177e-06f, -2.345239117e-06f, -2.347253694e-06f, -2.349263907e-06f,
+-2.351269751e-06f, -2.353271225e-06f, -2.355268325e-06f, -2.357261049e-06f, -2.359249393e-06f, -2.361233355e-06f, -2.363212933e-06f, -2.365188123e-06f, -2.367158922e-06f, -2.369125328e-06f,
+-2.371087338e-06f, -2.373044949e-06f, -2.374998159e-06f, -2.376946965e-06f, -2.378891363e-06f, -2.380831352e-06f, -2.382766929e-06f, -2.384698090e-06f, -2.386624834e-06f, -2.388547157e-06f,
+-2.390465056e-06f, -2.392378530e-06f, -2.394287576e-06f, -2.396192190e-06f, -2.398092370e-06f, -2.399988114e-06f, -2.401879418e-06f, -2.403766281e-06f, -2.405648700e-06f, -2.407526671e-06f,
+-2.409400193e-06f, -2.411269262e-06f, -2.413133877e-06f, -2.414994034e-06f, -2.416849731e-06f, -2.418700966e-06f, -2.420547736e-06f, -2.422390038e-06f, -2.424227870e-06f, -2.426061229e-06f,
+-2.427890113e-06f, -2.429714520e-06f, -2.431534446e-06f, -2.433349889e-06f, -2.435160847e-06f, -2.436967317e-06f, -2.438769297e-06f, -2.440566785e-06f, -2.442359777e-06f, -2.444148272e-06f,
+-2.445932267e-06f, -2.447711759e-06f, -2.449486746e-06f, -2.451257226e-06f, -2.453023197e-06f, -2.454784655e-06f, -2.456541599e-06f, -2.458294026e-06f, -2.460041934e-06f, -2.461785320e-06f,
+-2.463524182e-06f, -2.465258518e-06f, -2.466988325e-06f, -2.468713601e-06f, -2.470434343e-06f, -2.472150550e-06f, -2.473862220e-06f, -2.475569348e-06f, -2.477271935e-06f, -2.478969976e-06f,
+-2.480663470e-06f, -2.482352415e-06f, -2.484036808e-06f, -2.485716647e-06f, -2.487391931e-06f, -2.489062655e-06f, -2.490728819e-06f, -2.492390421e-06f, -2.494047457e-06f, -2.495699926e-06f,
+-2.497347825e-06f, -2.498991153e-06f, -2.500629907e-06f, -2.502264085e-06f, -2.503893684e-06f, -2.505518704e-06f, -2.507139141e-06f, -2.508754993e-06f, -2.510366259e-06f, -2.511972936e-06f,
+-2.513575022e-06f, -2.515172515e-06f, -2.516765412e-06f, -2.518353713e-06f, -2.519937414e-06f, -2.521516513e-06f, -2.523091010e-06f, -2.524660900e-06f, -2.526226183e-06f, -2.527786857e-06f,
+-2.529342919e-06f, -2.530894367e-06f, -2.532441200e-06f, -2.533983415e-06f, -2.535521010e-06f, -2.537053983e-06f, -2.538582333e-06f, -2.540106058e-06f, -2.541625154e-06f, -2.543139621e-06f,
+-2.544649457e-06f, -2.546154660e-06f, -2.547655226e-06f, -2.549151156e-06f, -2.550642447e-06f, -2.552129096e-06f, -2.553611103e-06f, -2.555088464e-06f, -2.556561179e-06f, -2.558029245e-06f,
+-2.559492661e-06f, -2.560951424e-06f, -2.562405534e-06f, -2.563854987e-06f, -2.565299782e-06f, -2.566739918e-06f, -2.568175392e-06f, -2.569606203e-06f, -2.571032349e-06f, -2.572453827e-06f,
+-2.573870638e-06f, -2.575282777e-06f, -2.576690245e-06f, -2.578093039e-06f, -2.579491157e-06f, -2.580884597e-06f, -2.582273359e-06f, -2.583657439e-06f, -2.585036837e-06f, -2.586411551e-06f,
+-2.587781578e-06f, -2.589146918e-06f, -2.590507569e-06f, -2.591863528e-06f, -2.593214795e-06f, -2.594561367e-06f, -2.595903244e-06f, -2.597240423e-06f, -2.598572902e-06f, -2.599900681e-06f,
+-2.601223757e-06f, -2.602542129e-06f, -2.603855796e-06f, -2.605164755e-06f, -2.606469005e-06f, -2.607768545e-06f, -2.609063373e-06f, -2.610353487e-06f, -2.611638887e-06f, -2.612919569e-06f,
+-2.614195534e-06f, -2.615466778e-06f, -2.616733302e-06f, -2.617995103e-06f, -2.619252180e-06f, -2.620504531e-06f, -2.621752155e-06f, -2.622995050e-06f, -2.624233215e-06f, -2.625466649e-06f,
+-2.626695350e-06f, -2.627919316e-06f, -2.629138547e-06f, -2.630353040e-06f, -2.631562794e-06f, -2.632767809e-06f, -2.633968082e-06f, -2.635163612e-06f, -2.636354398e-06f, -2.637540439e-06f,
+-2.638721732e-06f, -2.639898278e-06f, -2.641070073e-06f, -2.642237118e-06f, -2.643399410e-06f, -2.644556949e-06f, -2.645709733e-06f, -2.646857760e-06f, -2.648001030e-06f, -2.649139542e-06f,
+-2.650273293e-06f, -2.651402283e-06f, -2.652526510e-06f, -2.653645974e-06f, -2.654760672e-06f, -2.655870604e-06f, -2.656975769e-06f, -2.658076164e-06f, -2.659171790e-06f, -2.660262645e-06f,
+-2.661348727e-06f, -2.662430036e-06f, -2.663506570e-06f, -2.664578328e-06f, -2.665645309e-06f, -2.666707512e-06f, -2.667764936e-06f, -2.668817579e-06f, -2.669865440e-06f, -2.670908519e-06f,
+-2.671946814e-06f, -2.672980325e-06f, -2.674009049e-06f, -2.675032986e-06f, -2.676052135e-06f, -2.677066495e-06f, -2.678076065e-06f, -2.679080843e-06f, -2.680080829e-06f, -2.681076022e-06f,
+-2.682066420e-06f, -2.683052023e-06f, -2.684032830e-06f, -2.685008839e-06f, -2.685980050e-06f, -2.686946461e-06f, -2.687908072e-06f, -2.688864882e-06f, -2.689816890e-06f, -2.690764094e-06f,
+-2.691706494e-06f, -2.692644089e-06f, -2.693576879e-06f, -2.694504861e-06f, -2.695428036e-06f, -2.696346401e-06f, -2.697259958e-06f, -2.698168704e-06f, -2.699072638e-06f, -2.699971761e-06f,
+-2.700866070e-06f, -2.701755566e-06f, -2.702640247e-06f, -2.703520112e-06f, -2.704395161e-06f, -2.705265393e-06f, -2.706130807e-06f, -2.706991402e-06f, -2.707847178e-06f, -2.708698133e-06f,
+-2.709544267e-06f, -2.710385580e-06f, -2.711222070e-06f, -2.712053737e-06f, -2.712880579e-06f, -2.713702597e-06f, -2.714519789e-06f, -2.715332155e-06f, -2.716139695e-06f, -2.716942406e-06f,
+-2.717740290e-06f, -2.718533344e-06f, -2.719321569e-06f, -2.720104964e-06f, -2.720883528e-06f, -2.721657260e-06f, -2.722426160e-06f, -2.723190227e-06f, -2.723949461e-06f, -2.724703861e-06f,
+-2.725453426e-06f, -2.726198156e-06f, -2.726938051e-06f, -2.727673109e-06f, -2.728403330e-06f, -2.729128713e-06f, -2.729849259e-06f, -2.730564966e-06f, -2.731275834e-06f, -2.731981862e-06f,
+-2.732683050e-06f, -2.733379398e-06f, -2.734070904e-06f, -2.734757569e-06f, -2.735439392e-06f, -2.736116373e-06f, -2.736788510e-06f, -2.737455804e-06f, -2.738118254e-06f, -2.738775859e-06f,
+-2.739428620e-06f, -2.740076536e-06f, -2.740719606e-06f, -2.741357830e-06f, -2.741991208e-06f, -2.742619739e-06f, -2.743243423e-06f, -2.743862259e-06f, -2.744476248e-06f, -2.745085388e-06f,
+-2.745689680e-06f, -2.746289123e-06f, -2.746883716e-06f, -2.747473460e-06f, -2.748058354e-06f, -2.748638399e-06f, -2.749213592e-06f, -2.749783935e-06f, -2.750349427e-06f, -2.750910068e-06f,
+-2.751465857e-06f, -2.752016794e-06f, -2.752562879e-06f, -2.753104112e-06f, -2.753640493e-06f, -2.754172021e-06f, -2.754698696e-06f, -2.755220518e-06f, -2.755737487e-06f, -2.756249602e-06f,
+-2.756756864e-06f, -2.757259272e-06f, -2.757756825e-06f, -2.758249525e-06f, -2.758737371e-06f, -2.759220362e-06f, -2.759698499e-06f, -2.760171781e-06f, -2.760640208e-06f, -2.761103781e-06f,
+-2.761562498e-06f, -2.762016361e-06f, -2.762465369e-06f, -2.762909521e-06f, -2.763348818e-06f, -2.763783261e-06f, -2.764212847e-06f, -2.764637579e-06f, -2.765057455e-06f, -2.765472476e-06f,
+-2.765882642e-06f, -2.766287952e-06f, -2.766688408e-06f, -2.767084007e-06f, -2.767474752e-06f, -2.767860641e-06f, -2.768241675e-06f, -2.768617854e-06f, -2.768989179e-06f, -2.769355648e-06f,
+-2.769717262e-06f, -2.770074021e-06f, -2.770425926e-06f, -2.770772976e-06f, -2.771115171e-06f, -2.771452512e-06f, -2.771784999e-06f, -2.772112632e-06f, -2.772435411e-06f, -2.772753336e-06f,
+-2.773066408e-06f, -2.773374626e-06f, -2.773677991e-06f, -2.773976502e-06f, -2.774270161e-06f, -2.774558967e-06f, -2.774842921e-06f, -2.775122022e-06f, -2.775396271e-06f, -2.775665669e-06f,
+-2.775930215e-06f, -2.776189910e-06f, -2.776444754e-06f, -2.776694747e-06f, -2.776939889e-06f, -2.777180182e-06f, -2.777415624e-06f, -2.777646217e-06f, -2.777871961e-06f, -2.778092856e-06f,
+-2.778308902e-06f, -2.778520100e-06f, -2.778726451e-06f, -2.778927953e-06f, -2.779124609e-06f, -2.779316417e-06f, -2.779503380e-06f, -2.779685496e-06f, -2.779862766e-06f, -2.780035192e-06f,
+-2.780202772e-06f, -2.780365509e-06f, -2.780523401e-06f, -2.780676450e-06f, -2.780824655e-06f, -2.780968019e-06f, -2.781106539e-06f, -2.781240219e-06f, -2.781369057e-06f, -2.781493054e-06f,
+-2.781612212e-06f, -2.781726529e-06f, -2.781836008e-06f, -2.781940648e-06f, -2.782040449e-06f, -2.782135413e-06f, -2.782225541e-06f, -2.782310831e-06f, -2.782391286e-06f, -2.782466906e-06f,
+-2.782537690e-06f, -2.782603641e-06f, -2.782664758e-06f, -2.782721042e-06f, -2.782772494e-06f, -2.782819114e-06f, -2.782860903e-06f, -2.782897861e-06f, -2.782929990e-06f, -2.782957290e-06f,
+-2.782979761e-06f, -2.782997405e-06f, -2.783010221e-06f, -2.783018211e-06f, -2.783021375e-06f, -2.783019714e-06f, -2.783013229e-06f, -2.783001921e-06f, -2.782985789e-06f, -2.782964836e-06f,
+-2.782939061e-06f, -2.782908465e-06f, -2.782873050e-06f, -2.782832816e-06f, -2.782787763e-06f, -2.782737893e-06f, -2.782683206e-06f, -2.782623704e-06f, -2.782559386e-06f, -2.782490254e-06f,
+-2.782416308e-06f, -2.782337551e-06f, -2.782253981e-06f, -2.782165600e-06f, -2.782072410e-06f, -2.781974410e-06f, -2.781871602e-06f, -2.781763987e-06f, -2.781651565e-06f, -2.781534338e-06f,
+-2.781412306e-06f, -2.781285470e-06f, -2.781153832e-06f, -2.781017391e-06f, -2.780876150e-06f, -2.780730109e-06f, -2.780579268e-06f, -2.780423630e-06f, -2.780263195e-06f, -2.780097963e-06f,
+-2.779927937e-06f, -2.779753116e-06f, -2.779573503e-06f, -2.779389097e-06f, -2.779199900e-06f, -2.779005914e-06f, -2.778807138e-06f, -2.778603575e-06f, -2.778395224e-06f, -2.778182088e-06f,
+-2.777964168e-06f, -2.777741464e-06f, -2.777513977e-06f, -2.777281709e-06f, -2.777044660e-06f, -2.776802833e-06f, -2.776556227e-06f, -2.776304844e-06f, -2.776048686e-06f, -2.775787753e-06f,
+-2.775522047e-06f, -2.775251568e-06f, -2.774976318e-06f, -2.774696299e-06f, -2.774411510e-06f, -2.774121954e-06f, -2.773827632e-06f, -2.773528544e-06f, -2.773224693e-06f, -2.772916079e-06f,
+-2.772602703e-06f, -2.772284567e-06f, -2.771961673e-06f, -2.771634020e-06f, -2.771301612e-06f, -2.770964448e-06f, -2.770622530e-06f, -2.770275860e-06f, -2.769924439e-06f, -2.769568267e-06f,
+-2.769207347e-06f, -2.768841680e-06f, -2.768471267e-06f, -2.768096109e-06f, -2.767716208e-06f, -2.767331565e-06f, -2.766942182e-06f, -2.766548059e-06f, -2.766149199e-06f, -2.765745603e-06f,
+-2.765337271e-06f, -2.764924206e-06f, -2.764506409e-06f, -2.764083881e-06f, -2.763656623e-06f, -2.763224638e-06f, -2.762787927e-06f, -2.762346490e-06f, -2.761900330e-06f, -2.761449448e-06f,
+-2.760993846e-06f, -2.760533524e-06f, -2.760068485e-06f, -2.759598730e-06f, -2.759124261e-06f, -2.758645078e-06f, -2.758161184e-06f, -2.757672580e-06f, -2.757179268e-06f, -2.756681249e-06f,
+-2.756178524e-06f, -2.755671096e-06f, -2.755158966e-06f, -2.754642135e-06f, -2.754120605e-06f, -2.753594378e-06f, -2.753063455e-06f, -2.752527837e-06f, -2.751987528e-06f, -2.751442527e-06f,
+-2.750892838e-06f, -2.750338460e-06f, -2.749779397e-06f, -2.749215649e-06f, -2.748647219e-06f, -2.748074108e-06f, -2.747496317e-06f, -2.746913849e-06f, -2.746326706e-06f, -2.745734888e-06f,
+-2.745138397e-06f, -2.744537236e-06f, -2.743931406e-06f, -2.743320909e-06f, -2.742705746e-06f, -2.742085919e-06f, -2.741461431e-06f, -2.740832282e-06f, -2.740198475e-06f, -2.739560012e-06f,
+-2.738916893e-06f, -2.738269122e-06f, -2.737616699e-06f, -2.736959627e-06f, -2.736297907e-06f, -2.735631542e-06f, -2.734960533e-06f, -2.734284882e-06f, -2.733604590e-06f, -2.732919661e-06f,
+-2.732230095e-06f, -2.731535894e-06f, -2.730837061e-06f, -2.730133597e-06f, -2.729425504e-06f, -2.728712784e-06f, -2.727995439e-06f, -2.727273471e-06f, -2.726546882e-06f, -2.725815673e-06f,
+-2.725079848e-06f, -2.724339407e-06f, -2.723594353e-06f, -2.722844687e-06f, -2.722090412e-06f, -2.721331530e-06f, -2.720568042e-06f, -2.719799951e-06f, -2.719027259e-06f, -2.718249967e-06f,
+-2.717468078e-06f, -2.716681593e-06f, -2.715890516e-06f, -2.715094847e-06f, -2.714294589e-06f, -2.713489744e-06f, -2.712680314e-06f, -2.711866301e-06f, -2.711047707e-06f, -2.710224535e-06f,
+-2.709396786e-06f, -2.708564462e-06f, -2.707727567e-06f, -2.706886101e-06f, -2.706040066e-06f, -2.705189466e-06f, -2.704334302e-06f, -2.703474576e-06f, -2.702610291e-06f, -2.701741449e-06f,
+-2.700868051e-06f, -2.699990101e-06f, -2.699107600e-06f, -2.698220550e-06f, -2.697328954e-06f, -2.696432813e-06f, -2.695532131e-06f, -2.694626909e-06f, -2.693717150e-06f, -2.692802856e-06f,
+-2.691884029e-06f, -2.690960671e-06f, -2.690032785e-06f, -2.689100372e-06f, -2.688163436e-06f, -2.687221978e-06f, -2.686276002e-06f, -2.685325508e-06f, -2.684370500e-06f, -2.683410979e-06f,
+-2.682446949e-06f, -2.681478411e-06f, -2.680505368e-06f, -2.679527821e-06f, -2.678545775e-06f, -2.677559230e-06f, -2.676568190e-06f, -2.675572656e-06f, -2.674572631e-06f, -2.673568117e-06f,
+-2.672559118e-06f, -2.671545634e-06f, -2.670527670e-06f, -2.669505226e-06f, -2.668478306e-06f, -2.667446912e-06f, -2.666411046e-06f, -2.665370711e-06f, -2.664325910e-06f, -2.663276644e-06f,
+-2.662222917e-06f, -2.661164730e-06f, -2.660102087e-06f, -2.659034989e-06f, -2.657963440e-06f, -2.656887442e-06f, -2.655806997e-06f, -2.654722107e-06f, -2.653632777e-06f, -2.652539007e-06f,
+-2.651440801e-06f, -2.650338160e-06f, -2.649231089e-06f, -2.648119589e-06f, -2.647003662e-06f, -2.645883312e-06f, -2.644758541e-06f, -2.643629351e-06f, -2.642495746e-06f, -2.641357728e-06f,
+-2.640215299e-06f, -2.639068462e-06f, -2.637917220e-06f, -2.636761575e-06f, -2.635601530e-06f, -2.634437088e-06f, -2.633268252e-06f, -2.632095023e-06f, -2.630917406e-06f, -2.629735401e-06f,
+-2.628549013e-06f, -2.627358244e-06f, -2.626163096e-06f, -2.624963573e-06f, -2.623759676e-06f, -2.622551410e-06f, -2.621338775e-06f, -2.620121777e-06f, -2.618900416e-06f, -2.617674695e-06f,
+-2.616444619e-06f, -2.615210189e-06f, -2.613971407e-06f, -2.612728278e-06f, -2.611480804e-06f, -2.610228987e-06f, -2.608972830e-06f, -2.607712336e-06f, -2.606447509e-06f, -2.605178350e-06f,
+-2.603904863e-06f, -2.602627050e-06f, -2.601344915e-06f, -2.600058460e-06f, -2.598767688e-06f, -2.597472602e-06f, -2.596173205e-06f, -2.594869500e-06f, -2.593561489e-06f, -2.592249176e-06f,
+-2.590932563e-06f, -2.589611654e-06f, -2.588286451e-06f, -2.586956958e-06f, -2.585623176e-06f, -2.584285110e-06f, -2.582942762e-06f, -2.581596135e-06f, -2.580245232e-06f, -2.578890056e-06f,
+-2.577530610e-06f, -2.576166897e-06f, -2.574798920e-06f, -2.573426682e-06f, -2.572050186e-06f, -2.570669435e-06f, -2.569284433e-06f, -2.567895181e-06f, -2.566501683e-06f, -2.565103943e-06f,
+-2.563701963e-06f, -2.562295746e-06f, -2.560885295e-06f, -2.559470614e-06f, -2.558051705e-06f, -2.556628572e-06f, -2.555201218e-06f, -2.553769646e-06f, -2.552333858e-06f, -2.550893859e-06f,
+-2.549449650e-06f, -2.548001236e-06f, -2.546548619e-06f, -2.545091803e-06f, -2.543630791e-06f, -2.542165585e-06f, -2.540696190e-06f, -2.539222607e-06f, -2.537744841e-06f, -2.536262895e-06f,
+-2.534776771e-06f, -2.533286474e-06f, -2.531792005e-06f, -2.530293369e-06f, -2.528790568e-06f, -2.527283606e-06f, -2.525772487e-06f, -2.524257212e-06f, -2.522737786e-06f, -2.521214212e-06f,
+-2.519686493e-06f, -2.518154632e-06f, -2.516618632e-06f, -2.515078498e-06f, -2.513534232e-06f, -2.511985837e-06f, -2.510433317e-06f, -2.508876674e-06f, -2.507315913e-06f, -2.505751037e-06f,
+-2.504182049e-06f, -2.502608952e-06f, -2.501031750e-06f, -2.499450446e-06f, -2.497865043e-06f, -2.496275545e-06f, -2.494681954e-06f, -2.493084276e-06f, -2.491482512e-06f, -2.489876666e-06f,
+-2.488266742e-06f, -2.486652743e-06f, -2.485034672e-06f, -2.483412533e-06f, -2.481786330e-06f, -2.480156065e-06f, -2.478521742e-06f, -2.476883364e-06f, -2.475240936e-06f, -2.473594460e-06f,
+-2.471943940e-06f, -2.470289379e-06f, -2.468630781e-06f, -2.466968149e-06f, -2.465301487e-06f, -2.463630798e-06f, -2.461956086e-06f, -2.460277355e-06f, -2.458594607e-06f, -2.456907846e-06f,
+-2.455217076e-06f, -2.453522300e-06f, -2.451823523e-06f, -2.450120746e-06f, -2.448413975e-06f, -2.446703212e-06f, -2.444988461e-06f, -2.443269726e-06f, -2.441547010e-06f, -2.439820317e-06f,
+-2.438089650e-06f, -2.436355013e-06f, -2.434616409e-06f, -2.432873843e-06f, -2.431127318e-06f, -2.429376837e-06f, -2.427622404e-06f, -2.425864022e-06f, -2.424101696e-06f, -2.422335429e-06f,
+-2.420565224e-06f, -2.418791086e-06f, -2.417013017e-06f, -2.415231022e-06f, -2.413445105e-06f, -2.411655268e-06f, -2.409861515e-06f, -2.408063851e-06f, -2.406262279e-06f, -2.404456803e-06f,
+-2.402647426e-06f, -2.400834153e-06f, -2.399016986e-06f, -2.397195929e-06f, -2.395370987e-06f, -2.393542163e-06f, -2.391709461e-06f, -2.389872885e-06f, -2.388032437e-06f, -2.386188123e-06f,
+-2.384339946e-06f, -2.382487909e-06f, -2.380632017e-06f, -2.378772273e-06f, -2.376908681e-06f, -2.375041245e-06f, -2.373169968e-06f, -2.371294855e-06f, -2.369415909e-06f, -2.367533134e-06f,
+-2.365646534e-06f, -2.363756113e-06f, -2.361861875e-06f, -2.359963823e-06f, -2.358061961e-06f, -2.356156294e-06f, -2.354246825e-06f, -2.352333557e-06f, -2.350416496e-06f, -2.348495644e-06f,
+-2.346571006e-06f, -2.344642585e-06f, -2.342710386e-06f, -2.340774412e-06f, -2.338834667e-06f, -2.336891156e-06f, -2.334943882e-06f, -2.332992848e-06f, -2.331038060e-06f, -2.329079520e-06f,
+-2.327117234e-06f, -2.325151204e-06f, -2.323181436e-06f, -2.321207932e-06f, -2.319230696e-06f, -2.317249734e-06f, -2.315265048e-06f, -2.313276643e-06f, -2.311284523e-06f, -2.309288692e-06f,
+-2.307289153e-06f, -2.305285911e-06f, -2.303278970e-06f, -2.301268334e-06f, -2.299254006e-06f, -2.297235992e-06f, -2.295214294e-06f, -2.293188918e-06f, -2.291159867e-06f, -2.289127145e-06f,
+-2.287090756e-06f, -2.285050704e-06f, -2.283006994e-06f, -2.280959629e-06f, -2.278908614e-06f, -2.276853952e-06f, -2.274795648e-06f, -2.272733707e-06f, -2.270668131e-06f, -2.268598925e-06f,
+-2.266526094e-06f, -2.264449640e-06f, -2.262369570e-06f, -2.260285886e-06f, -2.258198593e-06f, -2.256107695e-06f, -2.254013196e-06f, -2.251915101e-06f, -2.249813413e-06f, -2.247708136e-06f,
+-2.245599276e-06f, -2.243486835e-06f, -2.241370819e-06f, -2.239251231e-06f, -2.237128076e-06f, -2.235001358e-06f, -2.232871081e-06f, -2.230737249e-06f, -2.228599867e-06f, -2.226458939e-06f,
+-2.224314468e-06f, -2.222166460e-06f, -2.220014918e-06f, -2.217859848e-06f, -2.215701252e-06f, -2.213539135e-06f, -2.211373502e-06f, -2.209204357e-06f, -2.207031705e-06f, -2.204855548e-06f,
+-2.202675892e-06f, -2.200492742e-06f, -2.198306101e-06f, -2.196115973e-06f, -2.193922363e-06f, -2.191725276e-06f, -2.189524715e-06f, -2.187320685e-06f, -2.185113191e-06f, -2.182902236e-06f,
+-2.180687825e-06f, -2.178469963e-06f, -2.176248653e-06f, -2.174023901e-06f, -2.171795710e-06f, -2.169564084e-06f, -2.167329029e-06f, -2.165090549e-06f, -2.162848647e-06f, -2.160603329e-06f,
+-2.158354599e-06f, -2.156102460e-06f, -2.153846919e-06f, -2.151587978e-06f, -2.149325643e-06f, -2.147059918e-06f, -2.144790807e-06f, -2.142518315e-06f, -2.140242447e-06f, -2.137963205e-06f,
+-2.135680596e-06f, -2.133394624e-06f, -2.131105292e-06f, -2.128812606e-06f, -2.126516571e-06f, -2.124217189e-06f, -2.121914467e-06f, -2.119608408e-06f, -2.117299016e-06f, -2.114986298e-06f,
+-2.112670256e-06f, -2.110350896e-06f, -2.108028222e-06f, -2.105702238e-06f, -2.103372949e-06f, -2.101040360e-06f, -2.098704475e-06f, -2.096365299e-06f, -2.094022836e-06f, -2.091677090e-06f,
+-2.089328067e-06f, -2.086975771e-06f, -2.084620206e-06f, -2.082261378e-06f, -2.079899289e-06f, -2.077533946e-06f, -2.075165353e-06f, -2.072793514e-06f, -2.070418434e-06f, -2.068040118e-06f,
+-2.065658570e-06f, -2.063273794e-06f, -2.060885796e-06f, -2.058494580e-06f, -2.056100151e-06f, -2.053702513e-06f, -2.051301671e-06f, -2.048897629e-06f, -2.046490393e-06f, -2.044079966e-06f,
+-2.041666354e-06f, -2.039249561e-06f, -2.036829592e-06f, -2.034406451e-06f, -2.031980144e-06f, -2.029550674e-06f, -2.027118047e-06f, -2.024682268e-06f, -2.022243340e-06f, -2.019801269e-06f,
+-2.017356059e-06f, -2.014907715e-06f, -2.012456242e-06f, -2.010001644e-06f, -2.007543927e-06f, -2.005083095e-06f, -2.002619152e-06f, -2.000152104e-06f, -1.997681954e-06f, -1.995208709e-06f,
+-1.992732372e-06f, -1.990252949e-06f, -1.987770444e-06f, -1.985284862e-06f, -1.982796207e-06f, -1.980304485e-06f, -1.977809701e-06f, -1.975311858e-06f, -1.972810962e-06f, -1.970307018e-06f,
+-1.967800030e-06f, -1.965290003e-06f, -1.962776943e-06f, -1.960260853e-06f, -1.957741739e-06f, -1.955219605e-06f, -1.952694457e-06f, -1.950166298e-06f, -1.947635135e-06f, -1.945100972e-06f,
+-1.942563813e-06f, -1.940023663e-06f, -1.937480528e-06f, -1.934934413e-06f, -1.932385321e-06f, -1.929833258e-06f, -1.927278229e-06f, -1.924720239e-06f, -1.922159292e-06f, -1.919595394e-06f,
+-1.917028548e-06f, -1.914458762e-06f, -1.911886038e-06f, -1.909310382e-06f, -1.906731799e-06f, -1.904150294e-06f, -1.901565872e-06f, -1.898978538e-06f, -1.896388296e-06f, -1.893795151e-06f,
+-1.891199109e-06f, -1.888600174e-06f, -1.885998352e-06f, -1.883393647e-06f, -1.880786064e-06f, -1.878175608e-06f, -1.875562285e-06f, -1.872946098e-06f, -1.870327054e-06f, -1.867705156e-06f,
+-1.865080411e-06f, -1.862452822e-06f, -1.859822396e-06f, -1.857189136e-06f, -1.854553048e-06f, -1.851914137e-06f, -1.849272408e-06f, -1.846627866e-06f, -1.843980516e-06f, -1.841330363e-06f,
+-1.838677412e-06f, -1.836021668e-06f, -1.833363136e-06f, -1.830701820e-06f, -1.828037727e-06f, -1.825370861e-06f, -1.822701227e-06f, -1.820028830e-06f, -1.817353676e-06f, -1.814675769e-06f,
+-1.811995114e-06f, -1.809311716e-06f, -1.806625581e-06f, -1.803936714e-06f, -1.801245119e-06f, -1.798550801e-06f, -1.795853767e-06f, -1.793154020e-06f, -1.790451566e-06f, -1.787746410e-06f,
+-1.785038558e-06f, -1.782328013e-06f, -1.779614782e-06f, -1.776898870e-06f, -1.774180280e-06f, -1.771459020e-06f, -1.768735093e-06f, -1.766008505e-06f, -1.763279261e-06f, -1.760547367e-06f,
+-1.757812826e-06f, -1.755075645e-06f, -1.752335829e-06f, -1.749593382e-06f, -1.746848310e-06f, -1.744100619e-06f, -1.741350312e-06f, -1.738597396e-06f, -1.735841875e-06f, -1.733083755e-06f,
+-1.730323040e-06f, -1.727559737e-06f, -1.724793850e-06f, -1.722025384e-06f, -1.719254345e-06f, -1.716480738e-06f, -1.713704567e-06f, -1.710925839e-06f, -1.708144558e-06f, -1.705360730e-06f,
+-1.702574359e-06f, -1.699785452e-06f, -1.696994012e-06f, -1.694200046e-06f, -1.691403559e-06f, -1.688604555e-06f, -1.685803041e-06f, -1.682999021e-06f, -1.680192501e-06f, -1.677383485e-06f,
+-1.674571980e-06f, -1.671757989e-06f, -1.668941520e-06f, -1.666122576e-06f, -1.663301163e-06f, -1.660477287e-06f, -1.657650952e-06f, -1.654822164e-06f, -1.651990928e-06f, -1.649157250e-06f,
+-1.646321135e-06f, -1.643482587e-06f, -1.640641613e-06f, -1.637798217e-06f, -1.634952405e-06f, -1.632104183e-06f, -1.629253554e-06f, -1.626400526e-06f, -1.623545103e-06f, -1.620687290e-06f,
+-1.617827093e-06f, -1.614964516e-06f, -1.612099566e-06f, -1.609232248e-06f, -1.606362567e-06f, -1.603490528e-06f, -1.600616137e-06f, -1.597739399e-06f, -1.594860319e-06f, -1.591978903e-06f,
+-1.589095156e-06f, -1.586209083e-06f, -1.583320690e-06f, -1.580429982e-06f, -1.577536965e-06f, -1.574641644e-06f, -1.571744023e-06f, -1.568844109e-06f, -1.565941908e-06f, -1.563037423e-06f,
+-1.560130661e-06f, -1.557221627e-06f, -1.554310327e-06f, -1.551396766e-06f, -1.548480948e-06f, -1.545562881e-06f, -1.542642568e-06f, -1.539720016e-06f, -1.536795230e-06f, -1.533868215e-06f,
+-1.530938977e-06f, -1.528007520e-06f, -1.525073852e-06f, -1.522137976e-06f, -1.519199898e-06f, -1.516259624e-06f, -1.513317160e-06f, -1.510372510e-06f, -1.507425680e-06f, -1.504476676e-06f,
+-1.501525502e-06f, -1.498572165e-06f, -1.495616670e-06f, -1.492659022e-06f, -1.489699227e-06f, -1.486737290e-06f, -1.483773217e-06f, -1.480807012e-06f, -1.477838683e-06f, -1.474868233e-06f,
+-1.471895669e-06f, -1.468920996e-06f, -1.465944219e-06f, -1.462965344e-06f, -1.459984377e-06f, -1.457001322e-06f, -1.454016186e-06f, -1.451028974e-06f, -1.448039691e-06f, -1.445048344e-06f,
+-1.442054936e-06f, -1.439059474e-06f, -1.436061964e-06f, -1.433062411e-06f, -1.430060820e-06f, -1.427057196e-06f, -1.424051547e-06f, -1.421043876e-06f, -1.418034190e-06f, -1.415022493e-06f,
+-1.412008792e-06f, -1.408993093e-06f, -1.405975399e-06f, -1.402955718e-06f, -1.399934055e-06f, -1.396910414e-06f, -1.393884803e-06f, -1.390857225e-06f, -1.387827688e-06f, -1.384796195e-06f,
+-1.381762754e-06f, -1.378727369e-06f, -1.375690046e-06f, -1.372650791e-06f, -1.369609609e-06f, -1.366566505e-06f, -1.363521486e-06f, -1.360474557e-06f, -1.357425723e-06f, -1.354374990e-06f,
+-1.351322363e-06f, -1.348267849e-06f, -1.345211452e-06f, -1.342153179e-06f, -1.339093035e-06f, -1.336031025e-06f, -1.332967155e-06f, -1.329901431e-06f, -1.326833858e-06f, -1.323764442e-06f,
+-1.320693188e-06f, -1.317620102e-06f, -1.314545190e-06f, -1.311468458e-06f, -1.308389910e-06f, -1.305309553e-06f, -1.302227392e-06f, -1.299143432e-06f, -1.296057680e-06f, -1.292970141e-06f,
+-1.289880821e-06f, -1.286789724e-06f, -1.283696858e-06f, -1.280602227e-06f, -1.277505837e-06f, -1.274407694e-06f, -1.271307803e-06f, -1.268206171e-06f, -1.265102802e-06f, -1.261997702e-06f,
+-1.258890877e-06f, -1.255782333e-06f, -1.252672075e-06f, -1.249560109e-06f, -1.246446441e-06f, -1.243331075e-06f, -1.240214019e-06f, -1.237095277e-06f, -1.233974856e-06f, -1.230852760e-06f,
+-1.227728996e-06f, -1.224603569e-06f, -1.221476485e-06f, -1.218347749e-06f, -1.215217368e-06f, -1.212085346e-06f, -1.208951691e-06f, -1.205816406e-06f, -1.202679498e-06f, -1.199540973e-06f,
+-1.196400837e-06f, -1.193259094e-06f, -1.190115751e-06f, -1.186970813e-06f, -1.183824287e-06f, -1.180676177e-06f, -1.177526490e-06f, -1.174375231e-06f, -1.171222406e-06f, -1.168068020e-06f,
+-1.164912080e-06f, -1.161754590e-06f, -1.158595558e-06f, -1.155434988e-06f, -1.152272886e-06f, -1.149109258e-06f, -1.145944109e-06f, -1.142777446e-06f, -1.139609273e-06f, -1.136439598e-06f,
+-1.133268425e-06f, -1.130095760e-06f, -1.126921609e-06f, -1.123745978e-06f, -1.120568872e-06f, -1.117390297e-06f, -1.114210259e-06f, -1.111028763e-06f, -1.107845816e-06f, -1.104661423e-06f,
+-1.101475590e-06f, -1.098288322e-06f, -1.095099626e-06f, -1.091909507e-06f, -1.088717970e-06f, -1.085525022e-06f, -1.082330668e-06f, -1.079134914e-06f, -1.075937766e-06f, -1.072739230e-06f,
+-1.069539311e-06f, -1.066338015e-06f, -1.063135348e-06f, -1.059931315e-06f, -1.056725923e-06f, -1.053519176e-06f, -1.050311082e-06f, -1.047101645e-06f, -1.043890872e-06f, -1.040678768e-06f,
+-1.037465339e-06f, -1.034250591e-06f, -1.031034529e-06f, -1.027817159e-06f, -1.024598488e-06f, -1.021378520e-06f, -1.018157262e-06f, -1.014934719e-06f, -1.011710898e-06f, -1.008485803e-06f,
+-1.005259442e-06f, -1.002031819e-06f, -9.988029397e-07f, -9.955728110e-07f, -9.923414382e-07f, -9.891088272e-07f, -9.858749836e-07f, -9.826399134e-07f, -9.794036222e-07f, -9.761661160e-07f,
+-9.729274004e-07f, -9.696874814e-07f, -9.664463646e-07f, -9.632040560e-07f, -9.599605612e-07f, -9.567158862e-07f, -9.534700367e-07f, -9.502230185e-07f, -9.469748375e-07f, -9.437254994e-07f,
+-9.404750100e-07f, -9.372233752e-07f, -9.339706008e-07f, -9.307166926e-07f, -9.274616564e-07f, -9.242054981e-07f, -9.209482234e-07f, -9.176898381e-07f, -9.144303482e-07f, -9.111697593e-07f,
+-9.079080774e-07f, -9.046453083e-07f, -9.013814577e-07f, -8.981165315e-07f, -8.948505355e-07f, -8.915834756e-07f, -8.883153576e-07f, -8.850461873e-07f, -8.817759705e-07f, -8.785047131e-07f,
+-8.752324209e-07f, -8.719590998e-07f, -8.686847555e-07f, -8.654093940e-07f, -8.621330209e-07f, -8.588556423e-07f, -8.555772638e-07f, -8.522978915e-07f, -8.490175310e-07f, -8.457361882e-07f,
+-8.424538690e-07f, -8.391705793e-07f, -8.358863248e-07f, -8.326011114e-07f, -8.293149449e-07f, -8.260278312e-07f, -8.227397762e-07f, -8.194507857e-07f, -8.161608654e-07f, -8.128700214e-07f,
+-8.095782594e-07f, -8.062855852e-07f, -8.029920048e-07f, -7.996975239e-07f, -7.964021485e-07f, -7.931058844e-07f, -7.898087374e-07f, -7.865107133e-07f, -7.832118181e-07f, -7.799120576e-07f,
+-7.766114377e-07f, -7.733099641e-07f, -7.700076429e-07f, -7.667044797e-07f, -7.634004805e-07f, -7.600956511e-07f, -7.567899975e-07f, -7.534835254e-07f, -7.501762407e-07f, -7.468681492e-07f,
+-7.435592569e-07f, -7.402495696e-07f, -7.369390932e-07f, -7.336278335e-07f, -7.303157963e-07f, -7.270029876e-07f, -7.236894132e-07f, -7.203750790e-07f, -7.170599909e-07f, -7.137441546e-07f,
+-7.104275761e-07f, -7.071102613e-07f, -7.037922159e-07f, -7.004734459e-07f, -6.971539572e-07f, -6.938337555e-07f, -6.905128469e-07f, -6.871912370e-07f, -6.838689319e-07f, -6.805459374e-07f,
+-6.772222593e-07f, -6.738979035e-07f, -6.705728759e-07f, -6.672471824e-07f, -6.639208288e-07f, -6.605938210e-07f, -6.572661649e-07f, -6.539378664e-07f, -6.506089312e-07f, -6.472793653e-07f,
+-6.439491746e-07f, -6.406183649e-07f, -6.372869421e-07f, -6.339549121e-07f, -6.306222808e-07f, -6.272890539e-07f, -6.239552375e-07f, -6.206208373e-07f, -6.172858593e-07f, -6.139503093e-07f,
+-6.106141932e-07f, -6.072775168e-07f, -6.039402861e-07f, -6.006025069e-07f, -5.972641850e-07f, -5.939253265e-07f, -5.905859370e-07f, -5.872460226e-07f, -5.839055891e-07f, -5.805646423e-07f,
+-5.772231881e-07f, -5.738812324e-07f, -5.705387812e-07f, -5.671958401e-07f, -5.638524153e-07f, -5.605085124e-07f, -5.571641373e-07f, -5.538192961e-07f, -5.504739944e-07f, -5.471282383e-07f,
+-5.437820335e-07f, -5.404353860e-07f, -5.370883016e-07f, -5.337407862e-07f, -5.303928456e-07f, -5.270444858e-07f, -5.236957126e-07f, -5.203465319e-07f, -5.169969496e-07f, -5.136469714e-07f,
+-5.102966034e-07f, -5.069458514e-07f, -5.035947212e-07f, -5.002432187e-07f, -4.968913499e-07f, -4.935391204e-07f, -4.901865364e-07f, -4.868336035e-07f, -4.834803277e-07f, -4.801267148e-07f,
+-4.767727708e-07f, -4.734185014e-07f, -4.700639127e-07f, -4.667090103e-07f, -4.633538002e-07f, -4.599982883e-07f, -4.566424804e-07f, -4.532863824e-07f, -4.499300002e-07f, -4.465733396e-07f,
+-4.432164065e-07f, -4.398592068e-07f, -4.365017463e-07f, -4.331440309e-07f, -4.297860664e-07f, -4.264278588e-07f, -4.230694139e-07f, -4.197107375e-07f, -4.163518355e-07f, -4.129927138e-07f,
+-4.096333783e-07f, -4.062738347e-07f, -4.029140891e-07f, -3.995541471e-07f, -3.961940147e-07f, -3.928336978e-07f, -3.894732022e-07f, -3.861125337e-07f, -3.827516982e-07f, -3.793907016e-07f,
+-3.760295498e-07f, -3.726682485e-07f, -3.693068037e-07f, -3.659452212e-07f, -3.625835068e-07f, -3.592216664e-07f, -3.558597059e-07f, -3.524976311e-07f, -3.491354479e-07f, -3.457731621e-07f,
+-3.424107795e-07f, -3.390483061e-07f, -3.356857476e-07f, -3.323231099e-07f, -3.289603988e-07f, -3.255976203e-07f, -3.222347801e-07f, -3.188718841e-07f, -3.155089382e-07f, -3.121459481e-07f,
+-3.087829198e-07f, -3.054198590e-07f, -3.020567716e-07f, -2.986936635e-07f, -2.953305404e-07f, -2.919674083e-07f, -2.886042729e-07f, -2.852411401e-07f, -2.818780158e-07f, -2.785149057e-07f,
+-2.751518158e-07f, -2.717887517e-07f, -2.684257195e-07f, -2.650627248e-07f, -2.616997736e-07f, -2.583368716e-07f, -2.549740247e-07f, -2.516112387e-07f, -2.482485195e-07f, -2.448858728e-07f,
+-2.415233045e-07f, -2.381608205e-07f, -2.347984264e-07f, -2.314361283e-07f, -2.280739318e-07f, -2.247118428e-07f, -2.213498671e-07f, -2.179880106e-07f, -2.146262790e-07f, -2.112646782e-07f,
+-2.079032139e-07f, -2.045418921e-07f, -2.011807184e-07f, -1.978196988e-07f, -1.944588390e-07f, -1.910981448e-07f, -1.877376221e-07f, -1.843772766e-07f, -1.810171142e-07f, -1.776571406e-07f,
+-1.742973616e-07f, -1.709377832e-07f, -1.675784110e-07f, -1.642192508e-07f, -1.608603085e-07f, -1.575015899e-07f, -1.541431007e-07f, -1.507848467e-07f, -1.474268338e-07f, -1.440690677e-07f,
+-1.407115542e-07f, -1.373542992e-07f, -1.339973083e-07f, -1.306405874e-07f, -1.272841422e-07f, -1.239279786e-07f, -1.205721023e-07f, -1.172165192e-07f, -1.138612349e-07f, -1.105062553e-07f,
+-1.071515861e-07f, -1.037972332e-07f, -1.004432022e-07f, -9.708949899e-08f, -9.373612932e-08f, -9.038309896e-08f, -8.703041366e-08f, -8.367807921e-08f, -8.032610136e-08f, -7.697448587e-08f,
+-7.362323851e-08f, -7.027236504e-08f, -6.692187122e-08f, -6.357176281e-08f, -6.022204555e-08f, -5.687272522e-08f, -5.352380755e-08f, -5.017529830e-08f, -4.682720323e-08f, -4.347952807e-08f,
+-4.013227857e-08f, -3.678546049e-08f, -3.343907956e-08f, -3.009314153e-08f, -2.674765213e-08f, -2.340261710e-08f, -2.005804219e-08f, -1.671393312e-08f, -1.337029564e-08f, -1.002713546e-08f,
+-6.684458329e-09f, -3.342269966e-09f, -5.761004996e-13f, 3.340617543e-09f, 6.681305240e-09f, 1.002148127e-08f, 1.336113991e-08f, 1.670027545e-08f, 2.003888216e-08f, 2.337695434e-08f,
+2.671448627e-08f, 3.005147224e-08f, 3.338790654e-08f, 3.672378346e-08f, 4.005909730e-08f, 4.339384236e-08f, 4.672801292e-08f, 5.006160330e-08f, 5.339460779e-08f, 5.672702070e-08f,
+6.005883633e-08f, 6.339004899e-08f, 6.672065300e-08f, 7.005064265e-08f, 7.338001226e-08f, 7.670875616e-08f, 8.003686865e-08f, 8.336434405e-08f, 8.669117669e-08f, 9.001736089e-08f,
+9.334289098e-08f, 9.666776127e-08f, 9.999196611e-08f, 1.033154998e-07f, 1.066383567e-07f, 1.099605312e-07f, 1.132820175e-07f, 1.166028100e-07f, 1.199229031e-07f, 1.232422911e-07f,
+1.265609683e-07f, 1.298789291e-07f, 1.331961679e-07f, 1.365126789e-07f, 1.398284566e-07f, 1.431434953e-07f, 1.464577894e-07f, 1.497713332e-07f, 1.530841210e-07f, 1.563961473e-07f,
+1.597074064e-07f, 1.630178927e-07f, 1.663276005e-07f, 1.696365243e-07f, 1.729446583e-07f, 1.762519971e-07f, 1.795585348e-07f, 1.828642661e-07f, 1.861691851e-07f, 1.894732864e-07f,
+1.927765642e-07f, 1.960790130e-07f, 1.993806272e-07f, 2.026814012e-07f, 2.059813294e-07f, 2.092804061e-07f, 2.125786258e-07f, 2.158759829e-07f, 2.191724717e-07f, 2.224680868e-07f,
+2.257628225e-07f, 2.290566732e-07f, 2.323496333e-07f, 2.356416973e-07f, 2.389328595e-07f, 2.422231145e-07f, 2.455124566e-07f, 2.488008803e-07f, 2.520883799e-07f, 2.553749499e-07f,
+2.586605848e-07f, 2.619452791e-07f, 2.652290270e-07f, 2.685118231e-07f, 2.717936618e-07f, 2.750745376e-07f, 2.783544450e-07f, 2.816333783e-07f, 2.849113320e-07f, 2.881883006e-07f,
+2.914642786e-07f, 2.947392604e-07f, 2.980132405e-07f, 3.012862133e-07f, 3.045581733e-07f, 3.078291150e-07f, 3.110990329e-07f, 3.143679215e-07f, 3.176357751e-07f, 3.209025884e-07f,
+3.241683558e-07f, 3.274330717e-07f, 3.306967308e-07f, 3.339593274e-07f, 3.372208561e-07f, 3.404813113e-07f, 3.437406877e-07f, 3.469989796e-07f, 3.502561816e-07f, 3.535122882e-07f,
+3.567672939e-07f, 3.600211932e-07f, 3.632739807e-07f, 3.665256508e-07f, 3.697761982e-07f, 3.730256173e-07f, 3.762739026e-07f, 3.795210487e-07f, 3.827670501e-07f, 3.860119013e-07f,
+3.892555970e-07f, 3.924981316e-07f, 3.957394997e-07f, 3.989796959e-07f, 4.022187146e-07f, 4.054565505e-07f, 4.086931980e-07f, 4.119286519e-07f, 4.151629066e-07f, 4.183959566e-07f,
+4.216277967e-07f, 4.248584212e-07f, 4.280878249e-07f, 4.313160023e-07f, 4.345429480e-07f, 4.377686565e-07f, 4.409931225e-07f, 4.442163405e-07f, 4.474383051e-07f, 4.506590110e-07f,
+4.538784527e-07f, 4.570966248e-07f, 4.603135220e-07f, 4.635291388e-07f, 4.667434698e-07f, 4.699565098e-07f, 4.731682532e-07f, 4.763786947e-07f, 4.795878289e-07f, 4.827956506e-07f,
+4.860021542e-07f, 4.892073344e-07f, 4.924111858e-07f, 4.956137032e-07f, 4.988148811e-07f, 5.020147142e-07f, 5.052131971e-07f, 5.084103246e-07f, 5.116060911e-07f, 5.148004915e-07f,
+5.179935203e-07f, 5.211851722e-07f, 5.243754419e-07f, 5.275643241e-07f, 5.307518134e-07f, 5.339379045e-07f, 5.371225921e-07f, 5.403058709e-07f, 5.434877356e-07f, 5.466681808e-07f,
+5.498472012e-07f, 5.530247916e-07f, 5.562009467e-07f, 5.593756611e-07f, 5.625489295e-07f, 5.657207467e-07f, 5.688911074e-07f, 5.720600062e-07f, 5.752274380e-07f, 5.783933974e-07f,
+5.815578792e-07f, 5.847208781e-07f, 5.878823888e-07f, 5.910424060e-07f, 5.942009246e-07f, 5.973579392e-07f, 6.005134446e-07f, 6.036674355e-07f, 6.068199068e-07f, 6.099708531e-07f,
+6.131202691e-07f, 6.162681498e-07f, 6.194144898e-07f, 6.225592840e-07f, 6.257025270e-07f, 6.288442137e-07f, 6.319843388e-07f, 6.351228972e-07f, 6.382598836e-07f, 6.413952928e-07f,
+6.445291196e-07f, 6.476613588e-07f, 6.507920052e-07f, 6.539210537e-07f, 6.570484989e-07f, 6.601743358e-07f, 6.632985592e-07f, 6.664211638e-07f, 6.695421445e-07f, 6.726614962e-07f,
+6.757792136e-07f, 6.788952916e-07f, 6.820097250e-07f, 6.851225087e-07f, 6.882336375e-07f, 6.913431063e-07f, 6.944509099e-07f, 6.975570432e-07f, 7.006615010e-07f, 7.037642782e-07f,
+7.068653696e-07f, 7.099647702e-07f, 7.130624749e-07f, 7.161584784e-07f, 7.192527756e-07f, 7.223453616e-07f, 7.254362311e-07f, 7.285253790e-07f, 7.316128002e-07f, 7.346984898e-07f,
+7.377824424e-07f, 7.408646531e-07f, 7.439451168e-07f, 7.470238283e-07f, 7.501007827e-07f, 7.531759747e-07f, 7.562493995e-07f, 7.593210518e-07f, 7.623909266e-07f, 7.654590189e-07f,
+7.685253236e-07f, 7.715898356e-07f, 7.746525500e-07f, 7.777134616e-07f, 7.807725654e-07f, 7.838298564e-07f, 7.868853295e-07f, 7.899389797e-07f, 7.929908020e-07f, 7.960407914e-07f,
+7.990889429e-07f, 8.021352513e-07f, 8.051797118e-07f, 8.082223193e-07f, 8.112630688e-07f, 8.143019553e-07f, 8.173389739e-07f, 8.203741194e-07f, 8.234073871e-07f, 8.264387717e-07f,
+8.294682685e-07f, 8.324958724e-07f, 8.355215784e-07f, 8.385453816e-07f, 8.415672769e-07f, 8.445872596e-07f, 8.476053245e-07f, 8.506214668e-07f, 8.536356815e-07f, 8.566479637e-07f,
+8.596583084e-07f, 8.626667106e-07f, 8.656731656e-07f, 8.686776682e-07f, 8.716802137e-07f, 8.746807971e-07f, 8.776794135e-07f, 8.806760579e-07f, 8.836707255e-07f, 8.866634114e-07f,
+8.896541107e-07f, 8.926428184e-07f, 8.956295297e-07f, 8.986142398e-07f, 9.015969437e-07f, 9.045776365e-07f, 9.075563134e-07f, 9.105329696e-07f, 9.135076001e-07f, 9.164802001e-07f,
+9.194507647e-07f, 9.224192892e-07f, 9.253857685e-07f, 9.283501980e-07f, 9.313125728e-07f, 9.342728880e-07f, 9.372311388e-07f, 9.401873204e-07f, 9.431414280e-07f, 9.460934567e-07f,
+9.490434018e-07f, 9.519912584e-07f, 9.549370217e-07f, 9.578806870e-07f, 9.608222494e-07f, 9.637617041e-07f, 9.666990465e-07f, 9.696342716e-07f, 9.725673747e-07f, 9.754983510e-07f,
+9.784271959e-07f, 9.813539044e-07f, 9.842784719e-07f, 9.872008935e-07f, 9.901211647e-07f, 9.930392805e-07f, 9.959552363e-07f, 9.988690273e-07f, 1.001780649e-06f, 1.004690096e-06f,
+1.007597364e-06f, 1.010502449e-06f, 1.013405345e-06f, 1.016306048e-06f, 1.019204554e-06f, 1.022100857e-06f, 1.024994952e-06f, 1.027886836e-06f, 1.030776503e-06f, 1.033663949e-06f,
+1.036549169e-06f, 1.039432158e-06f, 1.042312912e-06f, 1.045191427e-06f, 1.048067696e-06f, 1.050941716e-06f, 1.053813483e-06f, 1.056682991e-06f, 1.059550235e-06f, 1.062415212e-06f,
+1.065277917e-06f, 1.068138344e-06f, 1.070996489e-06f, 1.073852349e-06f, 1.076705917e-06f, 1.079557190e-06f, 1.082406162e-06f, 1.085252830e-06f, 1.088097189e-06f, 1.090939233e-06f,
+1.093778959e-06f, 1.096616362e-06f, 1.099451438e-06f, 1.102284181e-06f, 1.105114587e-06f, 1.107942652e-06f, 1.110768371e-06f, 1.113591739e-06f, 1.116412753e-06f, 1.119231407e-06f,
+1.122047697e-06f, 1.124861618e-06f, 1.127673166e-06f, 1.130482336e-06f, 1.133289124e-06f, 1.136093526e-06f, 1.138895536e-06f, 1.141695150e-06f, 1.144492364e-06f, 1.147287174e-06f,
+1.150079574e-06f, 1.152869561e-06f, 1.155657129e-06f, 1.158442275e-06f, 1.161224994e-06f, 1.164005281e-06f, 1.166783132e-06f, 1.169558542e-06f, 1.172331508e-06f, 1.175102024e-06f,
+1.177870087e-06f, 1.180635691e-06f, 1.183398832e-06f, 1.186159506e-06f, 1.188917709e-06f, 1.191673436e-06f, 1.194426682e-06f, 1.197177444e-06f, 1.199925716e-06f, 1.202671495e-06f,
+1.205414776e-06f, 1.208155555e-06f, 1.210893827e-06f, 1.213629588e-06f, 1.216362833e-06f, 1.219093558e-06f, 1.221821760e-06f, 1.224547432e-06f, 1.227270572e-06f, 1.229991175e-06f,
+1.232709236e-06f, 1.235424751e-06f, 1.238137716e-06f, 1.240848126e-06f, 1.243555977e-06f, 1.246261265e-06f, 1.248963986e-06f, 1.251664135e-06f, 1.254361707e-06f, 1.257056699e-06f,
+1.259749107e-06f, 1.262438925e-06f, 1.265126151e-06f, 1.267810778e-06f, 1.270492804e-06f, 1.273172224e-06f, 1.275849034e-06f, 1.278523228e-06f, 1.281194804e-06f, 1.283863757e-06f,
+1.286530083e-06f, 1.289193777e-06f, 1.291854835e-06f, 1.294513254e-06f, 1.297169028e-06f, 1.299822153e-06f, 1.302472626e-06f, 1.305120442e-06f, 1.307765598e-06f, 1.310408088e-06f,
+1.313047908e-06f, 1.315685055e-06f, 1.318319524e-06f, 1.320951311e-06f, 1.323580412e-06f, 1.326206823e-06f, 1.328830540e-06f, 1.331451558e-06f, 1.334069873e-06f, 1.336685481e-06f,
+1.339298379e-06f, 1.341908561e-06f, 1.344516024e-06f, 1.347120764e-06f, 1.349722776e-06f, 1.352322057e-06f, 1.354918602e-06f, 1.357512407e-06f, 1.360103469e-06f, 1.362691782e-06f,
+1.365277344e-06f, 1.367860149e-06f, 1.370440195e-06f, 1.373017476e-06f, 1.375591989e-06f, 1.378163729e-06f, 1.380732694e-06f, 1.383298878e-06f, 1.385862277e-06f, 1.388422888e-06f,
+1.390980706e-06f, 1.393535728e-06f, 1.396087950e-06f, 1.398637367e-06f, 1.401183975e-06f, 1.403727771e-06f, 1.406268750e-06f, 1.408806909e-06f, 1.411342243e-06f, 1.413874749e-06f,
+1.416404422e-06f, 1.418931259e-06f, 1.421455256e-06f, 1.423976408e-06f, 1.426494713e-06f, 1.429010164e-06f, 1.431522760e-06f, 1.434032496e-06f, 1.436539368e-06f, 1.439043371e-06f,
+1.441544503e-06f, 1.444042760e-06f, 1.446538136e-06f, 1.449030629e-06f, 1.451520235e-06f, 1.454006949e-06f, 1.456490768e-06f, 1.458971688e-06f, 1.461449705e-06f, 1.463924816e-06f,
+1.466397015e-06f, 1.468866300e-06f, 1.471332667e-06f, 1.473796112e-06f, 1.476256630e-06f, 1.478714219e-06f, 1.481168874e-06f, 1.483620591e-06f, 1.486069367e-06f, 1.488515198e-06f,
+1.490958080e-06f, 1.493398010e-06f, 1.495834983e-06f, 1.498268995e-06f, 1.500700044e-06f, 1.503128124e-06f, 1.505553233e-06f, 1.507975367e-06f, 1.510394521e-06f, 1.512810693e-06f,
+1.515223877e-06f, 1.517634072e-06f, 1.520041272e-06f, 1.522445475e-06f, 1.524846676e-06f, 1.527244872e-06f, 1.529640059e-06f, 1.532032233e-06f, 1.534421390e-06f, 1.536807528e-06f,
+1.539190642e-06f, 1.541570728e-06f, 1.543947784e-06f, 1.546321804e-06f, 1.548692786e-06f, 1.551060726e-06f, 1.553425620e-06f, 1.555787465e-06f, 1.558146257e-06f, 1.560501992e-06f,
+1.562854667e-06f, 1.565204278e-06f, 1.567550821e-06f, 1.569894293e-06f, 1.572234691e-06f, 1.574572010e-06f, 1.576906247e-06f, 1.579237398e-06f, 1.581565461e-06f, 1.583890430e-06f,
+1.586212304e-06f, 1.588531077e-06f, 1.590846748e-06f, 1.593159311e-06f, 1.595468764e-06f, 1.597775102e-06f, 1.600078324e-06f, 1.602378424e-06f, 1.604675399e-06f, 1.606969247e-06f,
+1.609259962e-06f, 1.611547543e-06f, 1.613831985e-06f, 1.616113285e-06f, 1.618391439e-06f, 1.620666444e-06f, 1.622938297e-06f, 1.625206993e-06f, 1.627472530e-06f, 1.629734904e-06f,
+1.631994112e-06f, 1.634250149e-06f, 1.636503014e-06f, 1.638752702e-06f, 1.640999209e-06f, 1.643242533e-06f, 1.645482670e-06f, 1.647719617e-06f, 1.649953370e-06f, 1.652183926e-06f,
+1.654411281e-06f, 1.656635432e-06f, 1.658856376e-06f, 1.661074109e-06f, 1.663288628e-06f, 1.665499930e-06f, 1.667708010e-06f, 1.669912867e-06f, 1.672114496e-06f, 1.674312895e-06f,
+1.676508059e-06f, 1.678699986e-06f, 1.680888672e-06f, 1.683074114e-06f, 1.685256308e-06f, 1.687435252e-06f, 1.689610942e-06f, 1.691783374e-06f, 1.693952546e-06f, 1.696118455e-06f,
+1.698281096e-06f, 1.700440466e-06f, 1.702596564e-06f, 1.704749384e-06f, 1.706898924e-06f, 1.709045181e-06f, 1.711188151e-06f, 1.713327832e-06f, 1.715464219e-06f, 1.717597310e-06f,
+1.719727102e-06f, 1.721853591e-06f, 1.723976775e-06f, 1.726096649e-06f, 1.728213211e-06f, 1.730326458e-06f, 1.732436387e-06f, 1.734542993e-06f, 1.736646275e-06f, 1.738746229e-06f,
+1.740842851e-06f, 1.742936140e-06f, 1.745026091e-06f, 1.747112701e-06f, 1.749195968e-06f, 1.751275888e-06f, 1.753352458e-06f, 1.755425675e-06f, 1.757495537e-06f, 1.759562039e-06f,
+1.761625178e-06f, 1.763684953e-06f, 1.765741359e-06f, 1.767794394e-06f, 1.769844054e-06f, 1.771890336e-06f, 1.773933238e-06f, 1.775972757e-06f, 1.778008889e-06f, 1.780041631e-06f,
+1.782070980e-06f, 1.784096934e-06f, 1.786119489e-06f, 1.788138643e-06f, 1.790154391e-06f, 1.792166732e-06f, 1.794175663e-06f, 1.796181180e-06f, 1.798183280e-06f, 1.800181960e-06f,
+1.802177218e-06f, 1.804169051e-06f, 1.806157455e-06f, 1.808142428e-06f, 1.810123967e-06f, 1.812102068e-06f, 1.814076730e-06f, 1.816047948e-06f, 1.818015721e-06f, 1.819980045e-06f,
+1.821940917e-06f, 1.823898334e-06f, 1.825852294e-06f, 1.827802794e-06f, 1.829749830e-06f, 1.831693401e-06f, 1.833633502e-06f, 1.835570132e-06f, 1.837503288e-06f, 1.839432966e-06f,
+1.841359163e-06f, 1.843281878e-06f, 1.845201107e-06f, 1.847116847e-06f, 1.849029095e-06f, 1.850937850e-06f, 1.852843107e-06f, 1.854744865e-06f, 1.856643120e-06f, 1.858537869e-06f,
+1.860429111e-06f, 1.862316841e-06f, 1.864201058e-06f, 1.866081759e-06f, 1.867958941e-06f, 1.869832600e-06f, 1.871702735e-06f, 1.873569343e-06f, 1.875432421e-06f, 1.877291967e-06f,
+1.879147977e-06f, 1.881000448e-06f, 1.882849380e-06f, 1.884694767e-06f, 1.886536609e-06f, 1.888374902e-06f, 1.890209643e-06f, 1.892040831e-06f, 1.893868462e-06f, 1.895692533e-06f,
+1.897513043e-06f, 1.899329988e-06f, 1.901143366e-06f, 1.902953174e-06f, 1.904759409e-06f, 1.906562070e-06f, 1.908361153e-06f, 1.910156656e-06f, 1.911948576e-06f, 1.913736911e-06f,
+1.915521658e-06f, 1.917302814e-06f, 1.919080378e-06f, 1.920854346e-06f, 1.922624716e-06f, 1.924391485e-06f, 1.926154651e-06f, 1.927914212e-06f, 1.929670164e-06f, 1.931422506e-06f,
+1.933171235e-06f, 1.934916348e-06f, 1.936657843e-06f, 1.938395717e-06f, 1.940129968e-06f, 1.941860594e-06f, 1.943587592e-06f, 1.945310959e-06f, 1.947030694e-06f, 1.948746793e-06f,
+1.950459254e-06f, 1.952168076e-06f, 1.953873254e-06f, 1.955574788e-06f, 1.957272674e-06f, 1.958966911e-06f, 1.960657495e-06f, 1.962344425e-06f, 1.964027697e-06f, 1.965707311e-06f,
+1.967383263e-06f, 1.969055550e-06f, 1.970724172e-06f, 1.972389124e-06f, 1.974050406e-06f, 1.975708014e-06f, 1.977361947e-06f, 1.979012201e-06f, 1.980658775e-06f, 1.982301667e-06f,
+1.983940873e-06f, 1.985576393e-06f, 1.987208222e-06f, 1.988836361e-06f, 1.990460804e-06f, 1.992081552e-06f, 1.993698601e-06f, 1.995311950e-06f, 1.996921595e-06f, 1.998527535e-06f,
+2.000129767e-06f, 2.001728290e-06f, 2.003323100e-06f, 2.004914197e-06f, 2.006501577e-06f, 2.008085239e-06f, 2.009665180e-06f, 2.011241397e-06f, 2.012813890e-06f, 2.014382656e-06f,
+2.015947692e-06f, 2.017508996e-06f, 2.019066567e-06f, 2.020620402e-06f, 2.022170499e-06f, 2.023716856e-06f, 2.025259470e-06f, 2.026798341e-06f, 2.028333464e-06f, 2.029864839e-06f,
+2.031392464e-06f, 2.032916336e-06f, 2.034436452e-06f, 2.035952812e-06f, 2.037465414e-06f, 2.038974254e-06f, 2.040479331e-06f, 2.041980642e-06f, 2.043478187e-06f, 2.044971963e-06f,
+2.046461967e-06f, 2.047948198e-06f, 2.049430654e-06f, 2.050909332e-06f, 2.052384232e-06f, 2.053855350e-06f, 2.055322685e-06f, 2.056786235e-06f, 2.058245997e-06f, 2.059701971e-06f,
+2.061154153e-06f, 2.062602543e-06f, 2.064047137e-06f, 2.065487935e-06f, 2.066924934e-06f, 2.068358132e-06f, 2.069787527e-06f, 2.071213118e-06f, 2.072634903e-06f, 2.074052879e-06f,
+2.075467044e-06f, 2.076877398e-06f, 2.078283938e-06f, 2.079686662e-06f, 2.081085568e-06f, 2.082480654e-06f, 2.083871920e-06f, 2.085259361e-06f, 2.086642978e-06f, 2.088022768e-06f,
+2.089398729e-06f, 2.090770860e-06f, 2.092139159e-06f, 2.093503623e-06f, 2.094864251e-06f, 2.096221042e-06f, 2.097573993e-06f, 2.098923103e-06f, 2.100268370e-06f, 2.101609792e-06f,
+2.102947368e-06f, 2.104281095e-06f, 2.105610972e-06f, 2.106936998e-06f, 2.108259170e-06f, 2.109577488e-06f, 2.110891948e-06f, 2.112202550e-06f, 2.113509291e-06f, 2.114812171e-06f,
+2.116111187e-06f, 2.117406337e-06f, 2.118697621e-06f, 2.119985036e-06f, 2.121268581e-06f, 2.122548255e-06f, 2.123824054e-06f, 2.125095978e-06f, 2.126364026e-06f, 2.127628195e-06f,
+2.128888485e-06f, 2.130144892e-06f, 2.131397417e-06f, 2.132646056e-06f, 2.133890810e-06f, 2.135131675e-06f, 2.136368651e-06f, 2.137601736e-06f, 2.138830928e-06f, 2.140056226e-06f,
+2.141277628e-06f, 2.142495133e-06f, 2.143708740e-06f, 2.144918446e-06f, 2.146124250e-06f, 2.147326151e-06f, 2.148524147e-06f, 2.149718237e-06f, 2.150908420e-06f, 2.152094693e-06f,
+2.153277055e-06f, 2.154455505e-06f, 2.155630042e-06f, 2.156800663e-06f, 2.157967368e-06f, 2.159130155e-06f, 2.160289023e-06f, 2.161443970e-06f, 2.162594994e-06f, 2.163742096e-06f,
+2.164885272e-06f, 2.166024521e-06f, 2.167159843e-06f, 2.168291236e-06f, 2.169418699e-06f, 2.170542229e-06f, 2.171661826e-06f, 2.172777489e-06f, 2.173889215e-06f, 2.174997005e-06f,
+2.176100856e-06f, 2.177200767e-06f, 2.178296736e-06f, 2.179388763e-06f, 2.180476847e-06f, 2.181560985e-06f, 2.182641177e-06f, 2.183717421e-06f, 2.184789716e-06f, 2.185858061e-06f,
+2.186922455e-06f, 2.187982895e-06f, 2.189039382e-06f, 2.190091914e-06f, 2.191140489e-06f, 2.192185106e-06f, 2.193225765e-06f, 2.194262463e-06f, 2.195295201e-06f, 2.196323975e-06f,
+2.197348786e-06f, 2.198369633e-06f, 2.199386513e-06f, 2.200399426e-06f, 2.201408370e-06f, 2.202413346e-06f, 2.203414350e-06f, 2.204411383e-06f, 2.205404443e-06f, 2.206393529e-06f,
+2.207378639e-06f, 2.208359774e-06f, 2.209336931e-06f, 2.210310110e-06f, 2.211279309e-06f, 2.212244527e-06f, 2.213205764e-06f, 2.214163018e-06f, 2.215116288e-06f, 2.216065574e-06f,
+2.217010873e-06f, 2.217952186e-06f, 2.218889510e-06f, 2.219822846e-06f, 2.220752191e-06f, 2.221677546e-06f, 2.222598908e-06f, 2.223516278e-06f, 2.224429653e-06f, 2.225339033e-06f,
+2.226244418e-06f, 2.227145805e-06f, 2.228043195e-06f, 2.228936585e-06f, 2.229825976e-06f, 2.230711366e-06f, 2.231592755e-06f, 2.232470141e-06f, 2.233343523e-06f, 2.234212901e-06f,
+2.235078273e-06f, 2.235939640e-06f, 2.236796999e-06f, 2.237650350e-06f, 2.238499693e-06f, 2.239345025e-06f, 2.240186347e-06f, 2.241023658e-06f, 2.241856956e-06f, 2.242686241e-06f,
+2.243511512e-06f, 2.244332768e-06f, 2.245150009e-06f, 2.245963233e-06f, 2.246772440e-06f, 2.247577629e-06f, 2.248378800e-06f, 2.249175950e-06f, 2.249969080e-06f, 2.250758189e-06f,
+2.251543277e-06f, 2.252324341e-06f, 2.253101382e-06f, 2.253874399e-06f, 2.254643391e-06f, 2.255408357e-06f, 2.256169297e-06f, 2.256926211e-06f, 2.257679096e-06f, 2.258427953e-06f,
+2.259172780e-06f, 2.259913578e-06f, 2.260650346e-06f, 2.261383082e-06f, 2.262111786e-06f, 2.262836458e-06f, 2.263557097e-06f, 2.264273702e-06f, 2.264986272e-06f, 2.265694808e-06f,
+2.266399308e-06f, 2.267099772e-06f, 2.267796198e-06f, 2.268488588e-06f, 2.269176939e-06f, 2.269861252e-06f, 2.270541525e-06f, 2.271217759e-06f, 2.271889952e-06f, 2.272558104e-06f,
+2.273222215e-06f, 2.273882284e-06f, 2.274538310e-06f, 2.275190294e-06f, 2.275838234e-06f, 2.276482129e-06f, 2.277121980e-06f, 2.277757786e-06f, 2.278389547e-06f, 2.279017261e-06f,
+2.279640929e-06f, 2.280260549e-06f, 2.280876123e-06f, 2.281487648e-06f, 2.282095125e-06f, 2.282698553e-06f, 2.283297932e-06f, 2.283893261e-06f, 2.284484540e-06f, 2.285071769e-06f,
+2.285654946e-06f, 2.286234073e-06f, 2.286809147e-06f, 2.287380170e-06f, 2.287947140e-06f, 2.288510057e-06f, 2.289068921e-06f, 2.289623731e-06f, 2.290174487e-06f, 2.290721189e-06f,
+2.291263837e-06f, 2.291802429e-06f, 2.292336967e-06f, 2.292867448e-06f, 2.293393874e-06f, 2.293916244e-06f, 2.294434557e-06f, 2.294948814e-06f, 2.295459013e-06f, 2.295965155e-06f,
+2.296467240e-06f, 2.296965267e-06f, 2.297459235e-06f, 2.297949146e-06f, 2.298434997e-06f, 2.298916790e-06f, 2.299394524e-06f, 2.299868199e-06f, 2.300337815e-06f, 2.300803370e-06f,
+2.301264866e-06f, 2.301722302e-06f, 2.302175678e-06f, 2.302624993e-06f, 2.303070248e-06f, 2.303511442e-06f, 2.303948575e-06f, 2.304381648e-06f, 2.304810659e-06f, 2.305235609e-06f,
+2.305656497e-06f, 2.306073324e-06f, 2.306486090e-06f, 2.306894794e-06f, 2.307299436e-06f, 2.307700016e-06f, 2.308096534e-06f, 2.308488990e-06f, 2.308877384e-06f, 2.309261716e-06f,
+2.309641986e-06f, 2.310018193e-06f, 2.310390338e-06f, 2.310758421e-06f, 2.311122441e-06f, 2.311482400e-06f, 2.311838295e-06f, 2.312190129e-06f, 2.312537900e-06f, 2.312881608e-06f,
+2.313221254e-06f, 2.313556838e-06f, 2.313888360e-06f, 2.314215819e-06f, 2.314539217e-06f, 2.314858552e-06f, 2.315173825e-06f, 2.315485036e-06f, 2.315792185e-06f, 2.316095272e-06f,
+2.316394297e-06f, 2.316689261e-06f, 2.316980163e-06f, 2.317267004e-06f, 2.317549783e-06f, 2.317828501e-06f, 2.318103158e-06f, 2.318373754e-06f, 2.318640290e-06f, 2.318902764e-06f,
+2.319161178e-06f, 2.319415532e-06f, 2.319665826e-06f, 2.319912060e-06f, 2.320154233e-06f, 2.320392348e-06f, 2.320626403e-06f, 2.320856398e-06f, 2.321082335e-06f, 2.321304213e-06f,
+2.321522033e-06f, 2.321735794e-06f, 2.321945497e-06f, 2.322151142e-06f, 2.322352730e-06f, 2.322550261e-06f, 2.322743735e-06f, 2.322933152e-06f, 2.323118512e-06f, 2.323299816e-06f,
+2.323477065e-06f, 2.323650258e-06f, 2.323819396e-06f, 2.323984479e-06f, 2.324145507e-06f, 2.324302481e-06f, 2.324455401e-06f, 2.324604268e-06f, 2.324749081e-06f, 2.324889842e-06f,
+2.325026550e-06f, 2.325159206e-06f, 2.325287811e-06f, 2.325412364e-06f, 2.325532866e-06f, 2.325649318e-06f, 2.325761720e-06f, 2.325870072e-06f, 2.325974375e-06f, 2.326074628e-06f,
+2.326170834e-06f, 2.326262992e-06f, 2.326351102e-06f, 2.326435165e-06f, 2.326515182e-06f, 2.326591152e-06f, 2.326663077e-06f, 2.326730957e-06f, 2.326794792e-06f, 2.326854583e-06f,
+2.326910331e-06f, 2.326962035e-06f, 2.327009697e-06f, 2.327053317e-06f, 2.327092896e-06f, 2.327128433e-06f, 2.327159930e-06f, 2.327187387e-06f, 2.327210805e-06f, 2.327230185e-06f,
+2.327245526e-06f, 2.327256829e-06f, 2.327264096e-06f, 2.327267326e-06f, 2.327266521e-06f, 2.327261680e-06f, 2.327252805e-06f, 2.327239896e-06f, 2.327222954e-06f, 2.327201979e-06f,
+2.327176972e-06f, 2.327147934e-06f, 2.327114865e-06f, 2.327077767e-06f, 2.327036639e-06f, 2.326991482e-06f, 2.326942297e-06f, 2.326889086e-06f, 2.326831847e-06f, 2.326770583e-06f,
+2.326705294e-06f, 2.326635980e-06f, 2.326562643e-06f, 2.326485283e-06f, 2.326403900e-06f, 2.326318497e-06f, 2.326229072e-06f, 2.326135628e-06f, 2.326038164e-06f, 2.325936682e-06f,
+2.325831183e-06f, 2.325721667e-06f, 2.325608135e-06f, 2.325490587e-06f, 2.325369026e-06f, 2.325243450e-06f, 2.325113863e-06f, 2.324980263e-06f, 2.324842652e-06f, 2.324701031e-06f,
+2.324555401e-06f, 2.324405762e-06f, 2.324252115e-06f, 2.324094462e-06f, 2.323932803e-06f, 2.323767139e-06f, 2.323597471e-06f, 2.323423800e-06f, 2.323246127e-06f, 2.323064452e-06f,
+2.322878777e-06f, 2.322689102e-06f, 2.322495429e-06f, 2.322297758e-06f, 2.322096090e-06f, 2.321890427e-06f, 2.321680769e-06f, 2.321467117e-06f, 2.321249473e-06f, 2.321027836e-06f,
+2.320802209e-06f, 2.320572592e-06f, 2.320338986e-06f, 2.320101392e-06f, 2.319859812e-06f, 2.319614246e-06f, 2.319364695e-06f, 2.319111160e-06f, 2.318853643e-06f, 2.318592144e-06f,
+2.318326664e-06f, 2.318057205e-06f, 2.317783767e-06f, 2.317506353e-06f, 2.317224962e-06f, 2.316939595e-06f, 2.316650255e-06f, 2.316356942e-06f, 2.316059657e-06f, 2.315758401e-06f,
+2.315453175e-06f, 2.315143981e-06f, 2.314830820e-06f, 2.314513693e-06f, 2.314192600e-06f, 2.313867544e-06f, 2.313538525e-06f, 2.313205544e-06f, 2.312868603e-06f, 2.312527703e-06f,
+2.312182845e-06f, 2.311834030e-06f, 2.311481259e-06f, 2.311124534e-06f, 2.310763856e-06f, 2.310399226e-06f, 2.310030645e-06f, 2.309658115e-06f, 2.309281637e-06f, 2.308901212e-06f,
+2.308516841e-06f, 2.308128525e-06f, 2.307736267e-06f, 2.307340066e-06f, 2.306939925e-06f, 2.306535845e-06f, 2.306127826e-06f, 2.305715871e-06f, 2.305299981e-06f, 2.304880156e-06f,
+2.304456399e-06f, 2.304028710e-06f, 2.303597091e-06f, 2.303161544e-06f, 2.302722069e-06f, 2.302278668e-06f, 2.301831342e-06f, 2.301380094e-06f, 2.300924923e-06f, 2.300465832e-06f,
+2.300002821e-06f, 2.299535893e-06f, 2.299065049e-06f, 2.298590289e-06f, 2.298111617e-06f, 2.297629032e-06f, 2.297142536e-06f, 2.296652131e-06f, 2.296157819e-06f, 2.295659600e-06f,
+2.295157477e-06f, 2.294651450e-06f, 2.294141521e-06f, 2.293627691e-06f, 2.293109963e-06f, 2.292588337e-06f, 2.292062816e-06f, 2.291533400e-06f, 2.291000090e-06f, 2.290462890e-06f,
+2.289921799e-06f, 2.289376821e-06f, 2.288827955e-06f, 2.288275204e-06f, 2.287718569e-06f, 2.287158052e-06f, 2.286593655e-06f, 2.286025378e-06f, 2.285453224e-06f, 2.284877194e-06f,
+2.284297290e-06f, 2.283713512e-06f, 2.283125864e-06f, 2.282534347e-06f, 2.281938961e-06f, 2.281339709e-06f, 2.280736592e-06f, 2.280129613e-06f, 2.279518772e-06f, 2.278904071e-06f,
+2.278285512e-06f, 2.277663097e-06f, 2.277036827e-06f, 2.276406704e-06f, 2.275772730e-06f, 2.275134905e-06f, 2.274493233e-06f, 2.273847714e-06f, 2.273198351e-06f, 2.272545145e-06f,
+2.271888098e-06f, 2.271227211e-06f, 2.270562486e-06f, 2.269893926e-06f, 2.269221531e-06f, 2.268545304e-06f, 2.267865245e-06f, 2.267181358e-06f, 2.266493644e-06f, 2.265802104e-06f,
+2.265106741e-06f, 2.264407555e-06f, 2.263704550e-06f, 2.262997726e-06f, 2.262287086e-06f, 2.261572631e-06f, 2.260854363e-06f, 2.260132284e-06f, 2.259406396e-06f, 2.258676700e-06f,
+2.257943199e-06f, 2.257205895e-06f, 2.256464788e-06f, 2.255719882e-06f, 2.254971178e-06f, 2.254218677e-06f, 2.253462382e-06f, 2.252702294e-06f, 2.251938416e-06f, 2.251170750e-06f,
+2.250399297e-06f, 2.249624058e-06f, 2.248845037e-06f, 2.248062235e-06f, 2.247275654e-06f, 2.246485296e-06f, 2.245691163e-06f, 2.244893257e-06f, 2.244091579e-06f, 2.243286132e-06f,
+2.242476918e-06f, 2.241663938e-06f, 2.240847195e-06f, 2.240026691e-06f, 2.239202427e-06f, 2.238374406e-06f, 2.237542630e-06f, 2.236707100e-06f, 2.235867819e-06f, 2.235024789e-06f,
+2.234178011e-06f, 2.233327489e-06f, 2.232473223e-06f, 2.231615216e-06f, 2.230753470e-06f, 2.229887986e-06f, 2.229018768e-06f, 2.228145818e-06f, 2.227269136e-06f, 2.226388726e-06f,
+2.225504589e-06f, 2.224616727e-06f, 2.223725143e-06f, 2.222829839e-06f, 2.221930817e-06f, 2.221028079e-06f, 2.220121627e-06f, 2.219211463e-06f, 2.218297589e-06f, 2.217380008e-06f,
+2.216458722e-06f, 2.215533732e-06f, 2.214605042e-06f, 2.213672653e-06f, 2.212736567e-06f, 2.211796787e-06f, 2.210853314e-06f, 2.209906152e-06f, 2.208955301e-06f, 2.208000765e-06f,
+2.207042546e-06f, 2.206080645e-06f, 2.205115066e-06f, 2.204145809e-06f, 2.203172879e-06f, 2.202196276e-06f, 2.201216003e-06f, 2.200232062e-06f, 2.199244456e-06f, 2.198253186e-06f,
+2.197258256e-06f, 2.196259667e-06f, 2.195257422e-06f, 2.194251522e-06f, 2.193241971e-06f, 2.192228771e-06f, 2.191211923e-06f, 2.190191431e-06f, 2.189167296e-06f, 2.188139521e-06f,
+2.187108108e-06f, 2.186073060e-06f, 2.185034378e-06f, 2.183992066e-06f, 2.182946125e-06f, 2.181896559e-06f, 2.180843369e-06f, 2.179786557e-06f, 2.178726126e-06f, 2.177662079e-06f,
+2.176594418e-06f, 2.175523146e-06f, 2.174448263e-06f, 2.173369774e-06f, 2.172287681e-06f, 2.171201985e-06f, 2.170112690e-06f, 2.169019798e-06f, 2.167923311e-06f, 2.166823232e-06f,
+2.165719563e-06f, 2.164612306e-06f, 2.163501465e-06f, 2.162387041e-06f, 2.161269037e-06f, 2.160147456e-06f, 2.159022300e-06f, 2.157893571e-06f, 2.156761273e-06f, 2.155625407e-06f,
+2.154485976e-06f, 2.153342982e-06f, 2.152196429e-06f, 2.151046318e-06f, 2.149892653e-06f, 2.148735435e-06f, 2.147574667e-06f, 2.146410352e-06f, 2.145242493e-06f, 2.144071092e-06f,
+2.142896151e-06f, 2.141717673e-06f, 2.140535661e-06f, 2.139350117e-06f, 2.138161044e-06f, 2.136968444e-06f, 2.135772320e-06f, 2.134572676e-06f, 2.133369512e-06f, 2.132162832e-06f,
+2.130952639e-06f, 2.129738935e-06f, 2.128521723e-06f, 2.127301005e-06f, 2.126076785e-06f, 2.124849064e-06f, 2.123617846e-06f, 2.122383133e-06f, 2.121144927e-06f, 2.119903232e-06f,
+2.118658050e-06f, 2.117409384e-06f, 2.116157237e-06f, 2.114901611e-06f, 2.113642508e-06f, 2.112379933e-06f, 2.111113886e-06f, 2.109844372e-06f, 2.108571393e-06f, 2.107294951e-06f,
+2.106015050e-06f, 2.104731691e-06f, 2.103444879e-06f, 2.102154615e-06f, 2.100860902e-06f, 2.099563744e-06f, 2.098263142e-06f, 2.096959100e-06f, 2.095651621e-06f, 2.094340706e-06f,
+2.093026360e-06f, 2.091708585e-06f, 2.090387383e-06f, 2.089062758e-06f, 2.087734712e-06f, 2.086403248e-06f, 2.085068369e-06f, 2.083730078e-06f, 2.082388378e-06f, 2.081043271e-06f,
+2.079694760e-06f, 2.078342848e-06f, 2.076987539e-06f, 2.075628834e-06f, 2.074266738e-06f, 2.072901252e-06f, 2.071532379e-06f, 2.070160123e-06f, 2.068784486e-06f, 2.067405472e-06f,
+2.066023082e-06f, 2.064637321e-06f, 2.063248191e-06f, 2.061855694e-06f, 2.060459835e-06f, 2.059060615e-06f, 2.057658038e-06f, 2.056252107e-06f, 2.054842824e-06f, 2.053430193e-06f,
+2.052014216e-06f, 2.050594897e-06f, 2.049172238e-06f, 2.047746243e-06f, 2.046316914e-06f, 2.044884254e-06f, 2.043448267e-06f, 2.042008956e-06f, 2.040566322e-06f, 2.039120371e-06f,
+2.037671103e-06f, 2.036218523e-06f, 2.034762634e-06f, 2.033303438e-06f, 2.031840938e-06f, 2.030375139e-06f, 2.028906041e-06f, 2.027433650e-06f, 2.025957967e-06f, 2.024478996e-06f,
+2.022996740e-06f, 2.021511202e-06f, 2.020022385e-06f, 2.018530292e-06f, 2.017034926e-06f, 2.015536290e-06f, 2.014034388e-06f, 2.012529222e-06f, 2.011020796e-06f, 2.009509113e-06f,
+2.007994176e-06f, 2.006475987e-06f, 2.004954550e-06f, 2.003429869e-06f, 2.001901946e-06f, 2.000370785e-06f, 1.998836388e-06f, 1.997298759e-06f, 1.995757901e-06f, 1.994213818e-06f,
+1.992666511e-06f, 1.991115985e-06f, 1.989562243e-06f, 1.988005287e-06f, 1.986445122e-06f, 1.984881750e-06f, 1.983315174e-06f, 1.981745398e-06f, 1.980172425e-06f, 1.978596258e-06f,
+1.977016900e-06f, 1.975434354e-06f, 1.973848625e-06f, 1.972259714e-06f, 1.970667626e-06f, 1.969072363e-06f, 1.967473929e-06f, 1.965872327e-06f, 1.964267560e-06f, 1.962659632e-06f,
+1.961048546e-06f, 1.959434304e-06f, 1.957816911e-06f, 1.956196370e-06f, 1.954572684e-06f, 1.952945855e-06f, 1.951315889e-06f, 1.949682787e-06f, 1.948046553e-06f, 1.946407191e-06f,
+1.944764704e-06f, 1.943119094e-06f, 1.941470367e-06f, 1.939818524e-06f, 1.938163569e-06f, 1.936505505e-06f, 1.934844337e-06f, 1.933180066e-06f, 1.931512698e-06f, 1.929842234e-06f,
+1.928168678e-06f, 1.926492034e-06f, 1.924812305e-06f, 1.923129495e-06f, 1.921443606e-06f, 1.919754642e-06f, 1.918062608e-06f, 1.916367505e-06f, 1.914669337e-06f, 1.912968109e-06f,
+1.911263822e-06f, 1.909556482e-06f, 1.907846090e-06f, 1.906132651e-06f, 1.904416168e-06f, 1.902696645e-06f, 1.900974084e-06f, 1.899248490e-06f, 1.897519865e-06f, 1.895788214e-06f,
+1.894053539e-06f, 1.892315845e-06f, 1.890575134e-06f, 1.888831410e-06f, 1.887084677e-06f, 1.885334938e-06f, 1.883582197e-06f, 1.881826457e-06f, 1.880067721e-06f, 1.878305994e-06f,
+1.876541278e-06f, 1.874773577e-06f, 1.873002895e-06f, 1.871229236e-06f, 1.869452602e-06f, 1.867672997e-06f, 1.865890425e-06f, 1.864104889e-06f, 1.862316394e-06f, 1.860524942e-06f,
+1.858730536e-06f, 1.856933182e-06f, 1.855132881e-06f, 1.853329639e-06f, 1.851523457e-06f, 1.849714341e-06f, 1.847902293e-06f, 1.846087317e-06f, 1.844269417e-06f, 1.842448596e-06f,
+1.840624858e-06f, 1.838798206e-06f, 1.836968645e-06f, 1.835136177e-06f, 1.833300807e-06f, 1.831462537e-06f, 1.829621373e-06f, 1.827777316e-06f, 1.825930371e-06f, 1.824080542e-06f,
+1.822227832e-06f, 1.820372245e-06f, 1.818513784e-06f, 1.816652454e-06f, 1.814788257e-06f, 1.812921198e-06f, 1.811051280e-06f, 1.809178507e-06f, 1.807302882e-06f, 1.805424410e-06f,
+1.803543094e-06f, 1.801658937e-06f, 1.799771943e-06f, 1.797882117e-06f, 1.795989461e-06f, 1.794093980e-06f, 1.792195677e-06f, 1.790294556e-06f, 1.788390621e-06f, 1.786483875e-06f,
+1.784574322e-06f, 1.782661965e-06f, 1.780746810e-06f, 1.778828859e-06f, 1.776908116e-06f, 1.774984585e-06f, 1.773058269e-06f, 1.771129173e-06f, 1.769197300e-06f, 1.767262654e-06f,
+1.765325239e-06f, 1.763385058e-06f, 1.761442115e-06f, 1.759496415e-06f, 1.757547960e-06f, 1.755596756e-06f, 1.753642804e-06f, 1.751686110e-06f, 1.749726678e-06f, 1.747764510e-06f,
+1.745799610e-06f, 1.743831984e-06f, 1.741861634e-06f, 1.739888564e-06f, 1.737912778e-06f, 1.735934280e-06f, 1.733953074e-06f, 1.731969164e-06f, 1.729982553e-06f, 1.727993246e-06f,
+1.726001245e-06f, 1.724006556e-06f, 1.722009182e-06f, 1.720009126e-06f, 1.718006394e-06f, 1.716000988e-06f, 1.713992912e-06f, 1.711982171e-06f, 1.709968768e-06f, 1.707952707e-06f,
+1.705933993e-06f, 1.703912628e-06f, 1.701888617e-06f, 1.699861964e-06f, 1.697832673e-06f, 1.695800748e-06f, 1.693766192e-06f, 1.691729009e-06f, 1.689689205e-06f, 1.687646781e-06f,
+1.685601743e-06f, 1.683554094e-06f, 1.681503839e-06f, 1.679450980e-06f, 1.677395523e-06f, 1.675337471e-06f, 1.673276828e-06f, 1.671213598e-06f, 1.669147785e-06f, 1.667079394e-06f,
+1.665008427e-06f, 1.662934889e-06f, 1.660858784e-06f, 1.658780116e-06f, 1.656698890e-06f, 1.654615108e-06f, 1.652528775e-06f, 1.650439895e-06f, 1.648348472e-06f, 1.646254511e-06f,
+1.644158014e-06f, 1.642058986e-06f, 1.639957432e-06f, 1.637853354e-06f, 1.635746758e-06f, 1.633637647e-06f, 1.631526026e-06f, 1.629411897e-06f, 1.627295266e-06f, 1.625176137e-06f,
+1.623054513e-06f, 1.620930398e-06f, 1.618803797e-06f, 1.616674714e-06f, 1.614543153e-06f, 1.612409117e-06f, 1.610272611e-06f, 1.608133640e-06f, 1.605992206e-06f, 1.603848315e-06f,
+1.601701969e-06f, 1.599553175e-06f, 1.597401934e-06f, 1.595248253e-06f, 1.593092134e-06f, 1.590933582e-06f, 1.588772601e-06f, 1.586609194e-06f, 1.584443367e-06f, 1.582275124e-06f,
+1.580104468e-06f, 1.577931403e-06f, 1.575755934e-06f, 1.573578065e-06f, 1.571397800e-06f, 1.569215143e-06f, 1.567030099e-06f, 1.564842671e-06f, 1.562652863e-06f, 1.560460681e-06f,
+1.558266127e-06f, 1.556069206e-06f, 1.553869923e-06f, 1.551668281e-06f, 1.549464285e-06f, 1.547257939e-06f, 1.545049247e-06f, 1.542838213e-06f, 1.540624841e-06f, 1.538409136e-06f,
+1.536191102e-06f, 1.533970743e-06f, 1.531748063e-06f, 1.529523067e-06f, 1.527295758e-06f, 1.525066142e-06f, 1.522834221e-06f, 1.520600000e-06f, 1.518363485e-06f, 1.516124678e-06f,
+1.513883584e-06f, 1.511640207e-06f, 1.509394552e-06f, 1.507146622e-06f, 1.504896423e-06f, 1.502643958e-06f, 1.500389231e-06f, 1.498132248e-06f, 1.495873011e-06f, 1.493611525e-06f,
+1.491347795e-06f, 1.489081825e-06f, 1.486813619e-06f, 1.484543182e-06f, 1.482270517e-06f, 1.479995629e-06f, 1.477718522e-06f, 1.475439201e-06f, 1.473157670e-06f, 1.470873933e-06f,
+1.468587994e-06f, 1.466299858e-06f, 1.464009529e-06f, 1.461717012e-06f, 1.459422310e-06f, 1.457125428e-06f, 1.454826370e-06f, 1.452525141e-06f, 1.450221745e-06f, 1.447916187e-06f,
+1.445608469e-06f, 1.443298598e-06f, 1.440986577e-06f, 1.438672411e-06f, 1.436356104e-06f, 1.434037660e-06f, 1.431717084e-06f, 1.429394380e-06f, 1.427069552e-06f, 1.424742605e-06f,
+1.422413543e-06f, 1.420082370e-06f, 1.417749092e-06f, 1.415413711e-06f, 1.413076233e-06f, 1.410736662e-06f, 1.408395003e-06f, 1.406051259e-06f, 1.403705435e-06f, 1.401357536e-06f,
+1.399007566e-06f, 1.396655529e-06f, 1.394301429e-06f, 1.391945272e-06f, 1.389587061e-06f, 1.387226802e-06f, 1.384864497e-06f, 1.382500152e-06f, 1.380133772e-06f, 1.377765360e-06f,
+1.375394920e-06f, 1.373022459e-06f, 1.370647979e-06f, 1.368271485e-06f, 1.365892982e-06f, 1.363512475e-06f, 1.361129966e-06f, 1.358745462e-06f, 1.356358966e-06f, 1.353970483e-06f,
+1.351580018e-06f, 1.349187574e-06f, 1.346793157e-06f, 1.344396770e-06f, 1.341998418e-06f, 1.339598107e-06f, 1.337195839e-06f, 1.334791619e-06f, 1.332385453e-06f, 1.329977345e-06f,
+1.327567298e-06f, 1.325155318e-06f, 1.322741408e-06f, 1.320325575e-06f, 1.317907821e-06f, 1.315488151e-06f, 1.313066571e-06f, 1.310643083e-06f, 1.308217694e-06f, 1.305790407e-06f,
+1.303361227e-06f, 1.300930159e-06f, 1.298497206e-06f, 1.296062374e-06f, 1.293625667e-06f, 1.291187089e-06f, 1.288746645e-06f, 1.286304340e-06f, 1.283860177e-06f, 1.281414163e-06f,
+1.278966300e-06f, 1.276516594e-06f, 1.274065049e-06f, 1.271611670e-06f, 1.269156461e-06f, 1.266699426e-06f, 1.264240571e-06f, 1.261779900e-06f, 1.259317418e-06f, 1.256853128e-06f,
+1.254387036e-06f, 1.251919145e-06f, 1.249449462e-06f, 1.246977989e-06f, 1.244504733e-06f, 1.242029696e-06f, 1.239552885e-06f, 1.237074303e-06f, 1.234593955e-06f, 1.232111846e-06f,
+1.229627979e-06f, 1.227142361e-06f, 1.224654995e-06f, 1.222165885e-06f, 1.219675038e-06f, 1.217182456e-06f, 1.214688145e-06f, 1.212192110e-06f, 1.209694354e-06f, 1.207194882e-06f,
+1.204693700e-06f, 1.202190812e-06f, 1.199686221e-06f, 1.197179934e-06f, 1.194671954e-06f, 1.192162286e-06f, 1.189650935e-06f, 1.187137906e-06f, 1.184623202e-06f, 1.182106829e-06f,
+1.179588791e-06f, 1.177069093e-06f, 1.174547739e-06f, 1.172024735e-06f, 1.169500084e-06f, 1.166973791e-06f, 1.164445862e-06f, 1.161916300e-06f, 1.159385110e-06f, 1.156852298e-06f,
+1.154317866e-06f, 1.151781822e-06f, 1.149244168e-06f, 1.146704909e-06f, 1.144164051e-06f, 1.141621597e-06f, 1.139077553e-06f, 1.136531923e-06f, 1.133984712e-06f, 1.131435924e-06f,
+1.128885564e-06f, 1.126333637e-06f, 1.123780148e-06f, 1.121225101e-06f, 1.118668500e-06f, 1.116110351e-06f, 1.113550658e-06f, 1.110989426e-06f, 1.108426660e-06f, 1.105862363e-06f,
+1.103296542e-06f, 1.100729200e-06f, 1.098160342e-06f, 1.095589973e-06f, 1.093018098e-06f, 1.090444722e-06f, 1.087869848e-06f, 1.085293482e-06f, 1.082715628e-06f, 1.080136292e-06f,
+1.077555477e-06f, 1.074973189e-06f, 1.072389432e-06f, 1.069804212e-06f, 1.067217531e-06f, 1.064629397e-06f, 1.062039812e-06f, 1.059448782e-06f, 1.056856311e-06f, 1.054262405e-06f,
+1.051667068e-06f, 1.049070305e-06f, 1.046472120e-06f, 1.043872518e-06f, 1.041271504e-06f, 1.038669082e-06f, 1.036065258e-06f, 1.033460036e-06f, 1.030853421e-06f, 1.028245417e-06f,
+1.025636030e-06f, 1.023025264e-06f, 1.020413123e-06f, 1.017799613e-06f, 1.015184738e-06f, 1.012568504e-06f, 1.009950914e-06f, 1.007331973e-06f, 1.004711687e-06f, 1.002090060e-06f,
+9.994670961e-07f, 9.968428012e-07f, 9.942171795e-07f, 9.915902359e-07f, 9.889619752e-07f, 9.863324020e-07f, 9.837015211e-07f, 9.810693373e-07f, 9.784358555e-07f, 9.758010802e-07f,
+9.731650164e-07f, 9.705276688e-07f, 9.678890421e-07f, 9.652491412e-07f, 9.626079707e-07f, 9.599655356e-07f, 9.573218406e-07f, 9.546768904e-07f, 9.520306898e-07f, 9.493832437e-07f,
+9.467345567e-07f, 9.440846338e-07f, 9.414334797e-07f, 9.387810991e-07f, 9.361274969e-07f, 9.334726779e-07f, 9.308166468e-07f, 9.281594085e-07f, 9.255009677e-07f, 9.228413293e-07f,
+9.201804980e-07f, 9.175184786e-07f, 9.148552760e-07f, 9.121908950e-07f, 9.095253403e-07f, 9.068586168e-07f, 9.041907293e-07f, 9.015216825e-07f, 8.988514814e-07f, 8.961801306e-07f,
+8.935076351e-07f, 8.908339996e-07f, 8.881592289e-07f, 8.854833279e-07f, 8.828063014e-07f, 8.801281542e-07f, 8.774488911e-07f, 8.747685169e-07f, 8.720870365e-07f, 8.694044547e-07f,
+8.667207763e-07f, 8.640360062e-07f, 8.613501491e-07f, 8.586632099e-07f, 8.559751934e-07f, 8.532861045e-07f, 8.505959480e-07f, 8.479047287e-07f, 8.452124514e-07f, 8.425191211e-07f,
+8.398247424e-07f, 8.371293204e-07f, 8.344328597e-07f, 8.317353653e-07f, 8.290368419e-07f, 8.263372945e-07f, 8.236367278e-07f, 8.209351468e-07f, 8.182325562e-07f, 8.155289609e-07f,
+8.128243658e-07f, 8.101187756e-07f, 8.074121953e-07f, 8.047046297e-07f, 8.019960836e-07f, 7.992865619e-07f, 7.965760695e-07f, 7.938646112e-07f, 7.911521918e-07f, 7.884388162e-07f,
+7.857244893e-07f, 7.830092159e-07f, 7.802930009e-07f, 7.775758492e-07f, 7.748577655e-07f, 7.721387548e-07f, 7.694188220e-07f, 7.666979718e-07f, 7.639762092e-07f, 7.612535389e-07f,
+7.585299660e-07f, 7.558054952e-07f, 7.530801314e-07f, 7.503538795e-07f, 7.476267443e-07f, 7.448987308e-07f, 7.421698437e-07f, 7.394400880e-07f, 7.367094685e-07f, 7.339779902e-07f,
+7.312456578e-07f, 7.285124762e-07f, 7.257784503e-07f, 7.230435851e-07f, 7.203078853e-07f, 7.175713559e-07f, 7.148340017e-07f, 7.120958276e-07f, 7.093568384e-07f, 7.066170392e-07f,
+7.038764346e-07f, 7.011350297e-07f, 6.983928293e-07f, 6.956498383e-07f, 6.929060615e-07f, 6.901615039e-07f, 6.874161703e-07f, 6.846700657e-07f, 6.819231948e-07f, 6.791755626e-07f,
+6.764271740e-07f, 6.736780339e-07f, 6.709281471e-07f, 6.681775185e-07f, 6.654261531e-07f, 6.626740556e-07f, 6.599212311e-07f, 6.571676843e-07f, 6.544134203e-07f, 6.516584437e-07f,
+6.489027597e-07f, 6.461463730e-07f, 6.433892886e-07f, 6.406315113e-07f, 6.378730460e-07f, 6.351138976e-07f, 6.323540711e-07f, 6.295935713e-07f, 6.268324031e-07f, 6.240705714e-07f,
+6.213080811e-07f, 6.185449370e-07f, 6.157811442e-07f, 6.130167075e-07f, 6.102516317e-07f, 6.074859218e-07f, 6.047195828e-07f, 6.019526193e-07f, 5.991850365e-07f, 5.964168391e-07f,
+5.936480322e-07f, 5.908786204e-07f, 5.881086089e-07f, 5.853380025e-07f, 5.825668060e-07f, 5.797950244e-07f, 5.770226625e-07f, 5.742497254e-07f, 5.714762178e-07f, 5.687021447e-07f,
+5.659275110e-07f, 5.631523215e-07f, 5.603765813e-07f, 5.576002952e-07f, 5.548234680e-07f, 5.520461047e-07f, 5.492682103e-07f, 5.464897895e-07f, 5.437108473e-07f, 5.409313887e-07f,
+5.381514185e-07f, 5.353709415e-07f, 5.325899628e-07f, 5.298084873e-07f, 5.270265197e-07f, 5.242440651e-07f, 5.214611283e-07f, 5.186777143e-07f, 5.158938279e-07f, 5.131094741e-07f,
+5.103246577e-07f, 5.075393837e-07f, 5.047536569e-07f, 5.019674824e-07f, 4.991808649e-07f, 4.963938093e-07f, 4.936063207e-07f, 4.908184038e-07f, 4.880300637e-07f, 4.852413051e-07f,
+4.824521331e-07f, 4.796625525e-07f, 4.768725681e-07f, 4.740821850e-07f, 4.712914081e-07f, 4.685002421e-07f, 4.657086921e-07f, 4.629167629e-07f, 4.601244595e-07f, 4.573317867e-07f,
+4.545387495e-07f, 4.517453527e-07f, 4.489516013e-07f, 4.461575001e-07f, 4.433630541e-07f, 4.405682682e-07f, 4.377731472e-07f, 4.349776962e-07f, 4.321819199e-07f, 4.293858233e-07f,
+4.265894112e-07f, 4.237926887e-07f, 4.209956605e-07f, 4.181983317e-07f, 4.154007070e-07f, 4.126027914e-07f, 4.098045899e-07f, 4.070061072e-07f, 4.042073483e-07f, 4.014083181e-07f,
+3.986090215e-07f, 3.958094634e-07f, 3.930096487e-07f, 3.902095823e-07f, 3.874092691e-07f, 3.846087140e-07f, 3.818079219e-07f, 3.790068977e-07f, 3.762056463e-07f, 3.734041725e-07f,
+3.706024813e-07f, 3.678005777e-07f, 3.649984663e-07f, 3.621961523e-07f, 3.593936404e-07f, 3.565909356e-07f, 3.537880428e-07f, 3.509849668e-07f, 3.481817125e-07f, 3.453782849e-07f,
+3.425746888e-07f, 3.397709291e-07f, 3.369670107e-07f, 3.341629386e-07f, 3.313587175e-07f, 3.285543525e-07f, 3.257498483e-07f, 3.229452098e-07f, 3.201404421e-07f, 3.173355498e-07f,
+3.145305380e-07f, 3.117254116e-07f, 3.089201753e-07f, 3.061148341e-07f, 3.033093929e-07f, 3.005038566e-07f, 2.976982300e-07f, 2.948925180e-07f, 2.920867256e-07f, 2.892808575e-07f,
+2.864749187e-07f, 2.836689141e-07f, 2.808628485e-07f, 2.780567269e-07f, 2.752505540e-07f, 2.724443349e-07f, 2.696380743e-07f, 2.668317771e-07f, 2.640254482e-07f, 2.612190925e-07f,
+2.584127149e-07f, 2.556063202e-07f, 2.527999134e-07f, 2.499934992e-07f, 2.471870826e-07f, 2.443806684e-07f, 2.415742615e-07f, 2.387678668e-07f, 2.359614891e-07f, 2.331551333e-07f,
+2.303488043e-07f, 2.275425070e-07f, 2.247362461e-07f, 2.219300267e-07f, 2.191238535e-07f, 2.163177313e-07f, 2.135116652e-07f, 2.107056599e-07f, 2.078997203e-07f, 2.050938512e-07f,
+2.022880575e-07f, 1.994823441e-07f, 1.966767159e-07f, 1.938711776e-07f, 1.910657342e-07f, 1.882603904e-07f, 1.854551512e-07f, 1.826500215e-07f, 1.798450059e-07f, 1.770401095e-07f,
+1.742353370e-07f, 1.714306934e-07f, 1.686261834e-07f, 1.658218119e-07f, 1.630175838e-07f, 1.602135038e-07f, 1.574095769e-07f, 1.546058079e-07f, 1.518022016e-07f, 1.489987629e-07f,
+1.461954966e-07f, 1.433924075e-07f, 1.405895005e-07f, 1.377867805e-07f, 1.349842522e-07f, 1.321819205e-07f, 1.293797903e-07f, 1.265778663e-07f, 1.237761534e-07f, 1.209746564e-07f,
+1.181733802e-07f, 1.153723295e-07f, 1.125715093e-07f, 1.097709243e-07f, 1.069705794e-07f, 1.041704794e-07f, 1.013706290e-07f, 9.857103324e-08f, 9.577169680e-08f, 9.297262453e-08f,
+9.017382126e-08f, 8.737529179e-08f, 8.457704094e-08f, 8.177907353e-08f, 7.898139437e-08f, 7.618400828e-08f, 7.338692005e-08f, 7.059013451e-08f, 6.779365647e-08f, 6.499749071e-08f,
+6.220164207e-08f, 5.940611533e-08f, 5.661091530e-08f, 5.381604679e-08f, 5.102151458e-08f, 4.822732349e-08f, 4.543347832e-08f, 4.263998384e-08f, 3.984684487e-08f, 3.705406620e-08f,
+3.426165262e-08f, 3.146960891e-08f, 2.867793987e-08f, 2.588665029e-08f, 2.309574496e-08f, 2.030522865e-08f, 1.751510616e-08f, 1.472538226e-08f, 1.193606174e-08f, 9.147149383e-09f,
+6.358649958e-09f, 3.570568245e-09f, 7.829090213e-10f, -2.004322941e-09f, -4.791122868e-09f, -7.577485990e-09f, -1.036340754e-08f, -1.314888274e-08f, -1.593390683e-08f, -1.871847505e-08f,
+-2.150258263e-08f, -2.428622481e-08f, -2.706939683e-08f, -2.985209393e-08f, -3.263431135e-08f, -3.541604434e-08f, -3.819728815e-08f, -4.097803801e-08f, -4.375828918e-08f, -4.653803692e-08f,
+-4.931727647e-08f, -5.209600308e-08f, -5.487421201e-08f, -5.765189853e-08f, -6.042905788e-08f, -6.320568533e-08f, -6.598177613e-08f, -6.875732556e-08f, -7.153232889e-08f, -7.430678136e-08f,
+-7.708067826e-08f, -7.985401486e-08f, -8.262678642e-08f, -8.539898822e-08f, -8.817061554e-08f, -9.094166365e-08f, -9.371212784e-08f, -9.648200337e-08f, -9.925128555e-08f, -1.020199696e-07f,
+-1.047880509e-07f, -1.075555247e-07f, -1.103223863e-07f, -1.130886309e-07f, -1.158542540e-07f, -1.186192506e-07f, -1.213836163e-07f, -1.241473462e-07f, -1.269104356e-07f, -1.296728799e-07f,
+-1.324346744e-07f, -1.351958143e-07f, -1.379562951e-07f, -1.407161119e-07f, -1.434752601e-07f, -1.462337350e-07f, -1.489915319e-07f, -1.517486462e-07f, -1.545050732e-07f, -1.572608081e-07f,
+-1.600158464e-07f, -1.627701832e-07f, -1.655238141e-07f, -1.682767342e-07f, -1.710289389e-07f, -1.737804236e-07f, -1.765311836e-07f, -1.792812142e-07f, -1.820305108e-07f, -1.847790686e-07f,
+-1.875268831e-07f, -1.902739496e-07f, -1.930202634e-07f, -1.957658200e-07f, -1.985106145e-07f, -2.012546424e-07f, -2.039978991e-07f, -2.067403799e-07f, -2.094820801e-07f, -2.122229951e-07f,
+-2.149631203e-07f, -2.177024511e-07f, -2.204409828e-07f, -2.231787108e-07f, -2.259156304e-07f, -2.286517370e-07f, -2.313870261e-07f, -2.341214929e-07f, -2.368551329e-07f, -2.395879414e-07f,
+-2.423199138e-07f, -2.450510456e-07f, -2.477813321e-07f, -2.505107686e-07f, -2.532393507e-07f, -2.559670736e-07f, -2.586939328e-07f, -2.614199236e-07f, -2.641450416e-07f, -2.668692820e-07f,
+-2.695926403e-07f, -2.723151119e-07f, -2.750366923e-07f, -2.777573767e-07f, -2.804771607e-07f, -2.831960396e-07f, -2.859140089e-07f, -2.886310640e-07f, -2.913472003e-07f, -2.940624133e-07f,
+-2.967766983e-07f, -2.994900508e-07f, -3.022024663e-07f, -3.049139401e-07f, -3.076244678e-07f, -3.103340447e-07f, -3.130426663e-07f, -3.157503280e-07f, -3.184570253e-07f, -3.211627537e-07f,
+-3.238675086e-07f, -3.265712854e-07f, -3.292740796e-07f, -3.319758866e-07f, -3.346767020e-07f, -3.373765212e-07f, -3.400753396e-07f, -3.427731528e-07f, -3.454699562e-07f, -3.481657452e-07f,
+-3.508605153e-07f, -3.535542621e-07f, -3.562469810e-07f, -3.589386675e-07f, -3.616293171e-07f, -3.643189252e-07f, -3.670074874e-07f, -3.696949992e-07f, -3.723814560e-07f, -3.750668533e-07f,
+-3.777511867e-07f, -3.804344517e-07f, -3.831166437e-07f, -3.857977582e-07f, -3.884777909e-07f, -3.911567371e-07f, -3.938345925e-07f, -3.965113525e-07f, -3.991870126e-07f, -4.018615685e-07f,
+-4.045350155e-07f, -4.072073493e-07f, -4.098785653e-07f, -4.125486592e-07f, -4.152176263e-07f, -4.178854624e-07f, -4.205521629e-07f, -4.232177233e-07f, -4.258821393e-07f, -4.285454064e-07f,
+-4.312075201e-07f, -4.338684759e-07f, -4.365282695e-07f, -4.391868964e-07f, -4.418443522e-07f, -4.445006324e-07f, -4.471557326e-07f, -4.498096483e-07f, -4.524623753e-07f, -4.551139089e-07f,
+-4.577642449e-07f, -4.604133788e-07f, -4.630613061e-07f, -4.657080225e-07f, -4.683535236e-07f, -4.709978050e-07f, -4.736408622e-07f, -4.762826908e-07f, -4.789232865e-07f, -4.815626449e-07f,
+-4.842007615e-07f, -4.868376321e-07f, -4.894732521e-07f, -4.921076173e-07f, -4.947407232e-07f, -4.973725654e-07f, -5.000031397e-07f, -5.026324415e-07f, -5.052604666e-07f, -5.078872106e-07f,
+-5.105126691e-07f, -5.131368378e-07f, -5.157597123e-07f, -5.183812882e-07f, -5.210015613e-07f, -5.236205270e-07f, -5.262381812e-07f, -5.288545195e-07f, -5.314695375e-07f, -5.340832309e-07f,
+-5.366955953e-07f, -5.393066264e-07f, -5.419163200e-07f, -5.445246716e-07f, -5.471316770e-07f, -5.497373319e-07f, -5.523416318e-07f, -5.549445726e-07f, -5.575461499e-07f, -5.601463593e-07f,
+-5.627451967e-07f, -5.653426576e-07f, -5.679387379e-07f, -5.705334331e-07f, -5.731267391e-07f, -5.757186514e-07f, -5.783091659e-07f, -5.808982783e-07f, -5.834859843e-07f, -5.860722795e-07f,
+-5.886571598e-07f, -5.912406209e-07f, -5.938226584e-07f, -5.964032682e-07f, -5.989824460e-07f, -6.015601874e-07f, -6.041364884e-07f, -6.067113445e-07f, -6.092847516e-07f, -6.118567055e-07f,
+-6.144272018e-07f, -6.169962364e-07f, -6.195638049e-07f, -6.221299033e-07f, -6.246945272e-07f, -6.272576724e-07f, -6.298193348e-07f, -6.323795100e-07f, -6.349381939e-07f, -6.374953823e-07f,
+-6.400510709e-07f, -6.426052555e-07f, -6.451579320e-07f, -6.477090962e-07f, -6.502587438e-07f, -6.528068707e-07f, -6.553534726e-07f, -6.578985454e-07f, -6.604420849e-07f, -6.629840869e-07f,
+-6.655245473e-07f, -6.680634619e-07f, -6.706008264e-07f, -6.731366368e-07f, -6.756708889e-07f, -6.782035785e-07f, -6.807347014e-07f, -6.832642536e-07f, -6.857922308e-07f, -6.883186290e-07f,
+-6.908434439e-07f, -6.933666714e-07f, -6.958883075e-07f, -6.984083479e-07f, -7.009267886e-07f, -7.034436253e-07f, -7.059588541e-07f, -7.084724707e-07f, -7.109844711e-07f, -7.134948511e-07f,
+-7.160036067e-07f, -7.185107337e-07f, -7.210162281e-07f, -7.235200857e-07f, -7.260223024e-07f, -7.285228742e-07f, -7.310217969e-07f, -7.335190665e-07f, -7.360146789e-07f, -7.385086301e-07f,
+-7.410009159e-07f, -7.434915323e-07f, -7.459804751e-07f, -7.484677405e-07f, -7.509533242e-07f, -7.534372223e-07f, -7.559194306e-07f, -7.583999452e-07f, -7.608787620e-07f, -7.633558770e-07f,
+-7.658312860e-07f, -7.683049852e-07f, -7.707769703e-07f, -7.732472375e-07f, -7.757157828e-07f, -7.781826019e-07f, -7.806476911e-07f, -7.831110462e-07f, -7.855726632e-07f, -7.880325382e-07f,
+-7.904906671e-07f, -7.929470460e-07f, -7.954016708e-07f, -7.978545375e-07f, -8.003056422e-07f, -8.027549809e-07f, -8.052025497e-07f, -8.076483444e-07f, -8.100923612e-07f, -8.125345961e-07f,
+-8.149750451e-07f, -8.174137042e-07f, -8.198505696e-07f, -8.222856372e-07f, -8.247189031e-07f, -8.271503634e-07f, -8.295800141e-07f, -8.320078513e-07f, -8.344338710e-07f, -8.368580693e-07f,
+-8.392804423e-07f, -8.417009860e-07f, -8.441196966e-07f, -8.465365701e-07f, -8.489516026e-07f, -8.513647903e-07f, -8.537761291e-07f, -8.561856152e-07f, -8.585932447e-07f, -8.609990138e-07f,
+-8.634029184e-07f, -8.658049548e-07f, -8.682051190e-07f, -8.706034072e-07f, -8.729998155e-07f, -8.753943400e-07f, -8.777869769e-07f, -8.801777223e-07f, -8.825665724e-07f, -8.849535232e-07f,
+-8.873385709e-07f, -8.897217118e-07f, -8.921029419e-07f, -8.944822574e-07f, -8.968596545e-07f, -8.992351293e-07f, -9.016086781e-07f, -9.039802969e-07f, -9.063499820e-07f, -9.087177296e-07f,
+-9.110835358e-07f, -9.134473969e-07f, -9.158093090e-07f, -9.181692683e-07f, -9.205272711e-07f, -9.228833136e-07f, -9.252373919e-07f, -9.275895022e-07f, -9.299396409e-07f, -9.322878041e-07f,
+-9.346339881e-07f, -9.369781890e-07f, -9.393204032e-07f, -9.416606268e-07f, -9.439988562e-07f, -9.463350875e-07f, -9.486693170e-07f, -9.510015409e-07f, -9.533317557e-07f, -9.556599573e-07f,
+-9.579861423e-07f, -9.603103068e-07f, -9.626324471e-07f, -9.649525595e-07f, -9.672706403e-07f, -9.695866858e-07f, -9.719006922e-07f, -9.742126558e-07f, -9.765225731e-07f, -9.788304402e-07f,
+-9.811362535e-07f, -9.834400093e-07f, -9.857417039e-07f, -9.880413336e-07f, -9.903388948e-07f, -9.926343837e-07f, -9.949277968e-07f, -9.972191304e-07f, -9.995083808e-07f, -1.001795544e-06f,
+-1.004080617e-06f, -1.006363596e-06f, -1.008644477e-06f, -1.010923257e-06f, -1.013199932e-06f, -1.015474498e-06f, -1.017746952e-06f, -1.020017289e-06f, -1.022285508e-06f, -1.024551603e-06f,
+-1.026815571e-06f, -1.029077409e-06f, -1.031337113e-06f, -1.033594680e-06f, -1.035850105e-06f, -1.038103386e-06f, -1.040354519e-06f, -1.042603499e-06f, -1.044850324e-06f, -1.047094991e-06f,
+-1.049337494e-06f, -1.051577832e-06f, -1.053815999e-06f, -1.056051994e-06f, -1.058285812e-06f, -1.060517449e-06f, -1.062746903e-06f, -1.064974169e-06f, -1.067199244e-06f, -1.069422125e-06f,
+-1.071642808e-06f, -1.073861290e-06f, -1.076077566e-06f, -1.078291634e-06f, -1.080503490e-06f, -1.082713130e-06f, -1.084920552e-06f, -1.087125751e-06f, -1.089328724e-06f, -1.091529467e-06f,
+-1.093727978e-06f, -1.095924252e-06f, -1.098118287e-06f, -1.100310078e-06f, -1.102499622e-06f, -1.104686916e-06f, -1.106871956e-06f, -1.109054740e-06f, -1.111235262e-06f, -1.113413521e-06f,
+-1.115589512e-06f, -1.117763233e-06f, -1.119934679e-06f, -1.122103847e-06f, -1.124270734e-06f, -1.126435337e-06f, -1.128597652e-06f, -1.130757675e-06f, -1.132915404e-06f, -1.135070835e-06f,
+-1.137223964e-06f, -1.139374788e-06f, -1.141523304e-06f, -1.143669508e-06f, -1.145813398e-06f, -1.147954969e-06f, -1.150094218e-06f, -1.152231142e-06f, -1.154365738e-06f, -1.156498002e-06f,
+-1.158627930e-06f, -1.160755521e-06f, -1.162880769e-06f, -1.165003673e-06f, -1.167124228e-06f, -1.169242431e-06f, -1.171358279e-06f, -1.173471769e-06f, -1.175582897e-06f, -1.177691660e-06f,
+-1.179798055e-06f, -1.181902078e-06f, -1.184003726e-06f, -1.186102996e-06f, -1.188199885e-06f, -1.190294389e-06f, -1.192386505e-06f, -1.194476230e-06f, -1.196563561e-06f, -1.198648493e-06f,
+-1.200731025e-06f, -1.202811153e-06f, -1.204888873e-06f, -1.206964182e-06f, -1.209037077e-06f, -1.211107556e-06f, -1.213175613e-06f, -1.215241248e-06f, -1.217304455e-06f, -1.219365233e-06f,
+-1.221423577e-06f, -1.223479485e-06f, -1.225532953e-06f, -1.227583978e-06f, -1.229632558e-06f, -1.231678688e-06f, -1.233722366e-06f, -1.235763589e-06f, -1.237802352e-06f, -1.239838655e-06f,
+-1.241872492e-06f, -1.243903860e-06f, -1.245932758e-06f, -1.247959181e-06f, -1.249983127e-06f, -1.252004592e-06f, -1.254023573e-06f, -1.256040068e-06f, -1.258054072e-06f, -1.260065583e-06f,
+-1.262074598e-06f, -1.264081114e-06f, -1.266085127e-06f, -1.268086634e-06f, -1.270085633e-06f, -1.272082121e-06f, -1.274076093e-06f, -1.276067548e-06f, -1.278056481e-06f, -1.280042891e-06f,
+-1.282026773e-06f, -1.284008126e-06f, -1.285986945e-06f, -1.287963228e-06f, -1.289936972e-06f, -1.291908174e-06f, -1.293876830e-06f, -1.295842938e-06f, -1.297806495e-06f, -1.299767497e-06f,
+-1.301725942e-06f, -1.303681827e-06f, -1.305635148e-06f, -1.307585903e-06f, -1.309534088e-06f, -1.311479702e-06f, -1.313422739e-06f, -1.315363199e-06f, -1.317301077e-06f, -1.319236371e-06f,
+-1.321169078e-06f, -1.323099195e-06f, -1.325026719e-06f, -1.326951646e-06f, -1.328873975e-06f, -1.330793702e-06f, -1.332710823e-06f, -1.334625338e-06f, -1.336537241e-06f, -1.338446531e-06f,
+-1.340353204e-06f, -1.342257258e-06f, -1.344158690e-06f, -1.346057496e-06f, -1.347953674e-06f, -1.349847221e-06f, -1.351738135e-06f, -1.353626411e-06f, -1.355512048e-06f, -1.357395043e-06f,
+-1.359275392e-06f, -1.361153093e-06f, -1.363028143e-06f, -1.364900539e-06f, -1.366770279e-06f, -1.368637358e-06f, -1.370501776e-06f, -1.372363528e-06f, -1.374222612e-06f, -1.376079025e-06f,
+-1.377932765e-06f, -1.379783828e-06f, -1.381632212e-06f, -1.383477914e-06f, -1.385320931e-06f, -1.387161260e-06f, -1.388998899e-06f, -1.390833845e-06f, -1.392666094e-06f, -1.394495645e-06f,
+-1.396322495e-06f, -1.398146640e-06f, -1.399968079e-06f, -1.401786807e-06f, -1.403602823e-06f, -1.405416124e-06f, -1.407226707e-06f, -1.409034570e-06f, -1.410839709e-06f, -1.412642122e-06f,
+-1.414441806e-06f, -1.416238759e-06f, -1.418032977e-06f, -1.419824459e-06f, -1.421613201e-06f, -1.423399201e-06f, -1.425182455e-06f, -1.426962963e-06f, -1.428740720e-06f, -1.430515724e-06f,
+-1.432287973e-06f, -1.434057463e-06f, -1.435824192e-06f, -1.437588158e-06f, -1.439349358e-06f, -1.441107789e-06f, -1.442863449e-06f, -1.444616335e-06f, -1.446366444e-06f, -1.448113774e-06f,
+-1.449858322e-06f, -1.451600085e-06f, -1.453339062e-06f, -1.455075248e-06f, -1.456808643e-06f, -1.458539243e-06f, -1.460267046e-06f, -1.461992048e-06f, -1.463714249e-06f, -1.465433644e-06f,
+-1.467150231e-06f, -1.468864009e-06f, -1.470574973e-06f, -1.472283123e-06f, -1.473988455e-06f, -1.475690966e-06f, -1.477390655e-06f, -1.479087519e-06f, -1.480781555e-06f, -1.482472760e-06f,
+-1.484161133e-06f, -1.485846670e-06f, -1.487529370e-06f, -1.489209229e-06f, -1.490886245e-06f, -1.492560417e-06f, -1.494231740e-06f, -1.495900214e-06f, -1.497565835e-06f, -1.499228601e-06f,
+-1.500888509e-06f, -1.502545558e-06f, -1.504199744e-06f, -1.505851065e-06f, -1.507499520e-06f, -1.509145104e-06f, -1.510787817e-06f, -1.512427655e-06f, -1.514064616e-06f, -1.515698698e-06f,
+-1.517329898e-06f, -1.518958214e-06f, -1.520583644e-06f, -1.522206186e-06f, -1.523825835e-06f, -1.525442592e-06f, -1.527056453e-06f, -1.528667415e-06f, -1.530275477e-06f, -1.531880636e-06f,
+-1.533482889e-06f, -1.535082235e-06f, -1.536678672e-06f, -1.538272196e-06f, -1.539862805e-06f, -1.541450498e-06f, -1.543035271e-06f, -1.544617123e-06f, -1.546196051e-06f, -1.547772053e-06f,
+-1.549345127e-06f, -1.550915270e-06f, -1.552482481e-06f, -1.554046756e-06f, -1.555608094e-06f, -1.557166492e-06f, -1.558721948e-06f, -1.560274460e-06f, -1.561824026e-06f, -1.563370643e-06f,
+-1.564914309e-06f, -1.566455023e-06f, -1.567992781e-06f, -1.569527581e-06f, -1.571059422e-06f, -1.572588300e-06f, -1.574114215e-06f, -1.575637164e-06f, -1.577157143e-06f, -1.578674153e-06f,
+-1.580188189e-06f, -1.581699251e-06f, -1.583207335e-06f, -1.584712440e-06f, -1.586214563e-06f, -1.587713703e-06f, -1.589209857e-06f, -1.590703024e-06f, -1.592193200e-06f, -1.593680384e-06f,
+-1.595164574e-06f, -1.596645767e-06f, -1.598123962e-06f, -1.599599156e-06f, -1.601071348e-06f, -1.602540535e-06f, -1.604006715e-06f, -1.605469886e-06f, -1.606930046e-06f, -1.608387193e-06f,
+-1.609841325e-06f, -1.611292440e-06f, -1.612740535e-06f, -1.614185610e-06f, -1.615627660e-06f, -1.617066686e-06f, -1.618502684e-06f, -1.619935653e-06f, -1.621365590e-06f, -1.622792494e-06f,
+-1.624216362e-06f, -1.625637193e-06f, -1.627054984e-06f, -1.628469734e-06f, -1.629881440e-06f, -1.631290102e-06f, -1.632695715e-06f, -1.634098280e-06f, -1.635497793e-06f, -1.636894252e-06f,
+-1.638287657e-06f, -1.639678004e-06f, -1.641065292e-06f, -1.642449520e-06f, -1.643830684e-06f, -1.645208783e-06f, -1.646583816e-06f, -1.647955780e-06f, -1.649324673e-06f, -1.650690493e-06f,
+-1.652053240e-06f, -1.653412909e-06f, -1.654769501e-06f, -1.656123013e-06f, -1.657473442e-06f, -1.658820788e-06f, -1.660165048e-06f, -1.661506221e-06f, -1.662844304e-06f, -1.664179296e-06f,
+-1.665511195e-06f, -1.666839999e-06f, -1.668165707e-06f, -1.669488315e-06f, -1.670807824e-06f, -1.672124230e-06f, -1.673437532e-06f, -1.674747729e-06f, -1.676054818e-06f, -1.677358798e-06f,
+-1.678659666e-06f, -1.679957421e-06f, -1.681252062e-06f, -1.682543587e-06f, -1.683831993e-06f, -1.685117279e-06f, -1.686399444e-06f, -1.687678485e-06f, -1.688954401e-06f, -1.690227190e-06f,
+-1.691496850e-06f, -1.692763380e-06f, -1.694026778e-06f, -1.695287042e-06f, -1.696544171e-06f, -1.697798162e-06f, -1.699049015e-06f, -1.700296727e-06f, -1.701541296e-06f, -1.702782722e-06f,
+-1.704021003e-06f, -1.705256136e-06f, -1.706488120e-06f, -1.707716953e-06f, -1.708942635e-06f, -1.710165162e-06f, -1.711384535e-06f, -1.712600750e-06f, -1.713813806e-06f, -1.715023702e-06f,
+-1.716230436e-06f, -1.717434007e-06f, -1.718634412e-06f, -1.719831651e-06f, -1.721025721e-06f, -1.722216622e-06f, -1.723404350e-06f, -1.724588906e-06f, -1.725770288e-06f, -1.726948493e-06f,
+-1.728123520e-06f, -1.729295368e-06f, -1.730464036e-06f, -1.731629521e-06f, -1.732791822e-06f, -1.733950937e-06f, -1.735106866e-06f, -1.736259607e-06f, -1.737409157e-06f, -1.738555516e-06f,
+-1.739698682e-06f, -1.740838653e-06f, -1.741975429e-06f, -1.743109007e-06f, -1.744239387e-06f, -1.745366566e-06f, -1.746490543e-06f, -1.747611317e-06f, -1.748728887e-06f, -1.749843250e-06f,
+-1.750954406e-06f, -1.752062352e-06f, -1.753167089e-06f, -1.754268613e-06f, -1.755366924e-06f, -1.756462021e-06f, -1.757553901e-06f, -1.758642564e-06f, -1.759728008e-06f, -1.760810232e-06f,
+-1.761889234e-06f, -1.762965014e-06f, -1.764037569e-06f, -1.765106898e-06f, -1.766173000e-06f, -1.767235874e-06f, -1.768295517e-06f, -1.769351930e-06f, -1.770405110e-06f, -1.771455057e-06f,
+-1.772501768e-06f, -1.773545244e-06f, -1.774585481e-06f, -1.775622479e-06f, -1.776656237e-06f, -1.777686754e-06f, -1.778714027e-06f, -1.779738056e-06f, -1.780758840e-06f, -1.781776377e-06f,
+-1.782790666e-06f, -1.783801706e-06f, -1.784809496e-06f, -1.785814033e-06f, -1.786815318e-06f, -1.787813349e-06f, -1.788808124e-06f, -1.789799642e-06f, -1.790787903e-06f, -1.791772904e-06f,
+-1.792754645e-06f, -1.793733125e-06f, -1.794708342e-06f, -1.795680295e-06f, -1.796648983e-06f, -1.797614405e-06f, -1.798576559e-06f, -1.799535445e-06f, -1.800491061e-06f, -1.801443407e-06f,
+-1.802392480e-06f, -1.803338280e-06f, -1.804280806e-06f, -1.805220057e-06f, -1.806156030e-06f, -1.807088727e-06f, -1.808018144e-06f, -1.808944282e-06f, -1.809867139e-06f, -1.810786713e-06f,
+-1.811703005e-06f, -1.812616012e-06f, -1.813525734e-06f, -1.814432170e-06f, -1.815335318e-06f, -1.816235178e-06f, -1.817131748e-06f, -1.818025027e-06f, -1.818915015e-06f, -1.819801711e-06f,
+-1.820685112e-06f, -1.821565219e-06f, -1.822442030e-06f, -1.823315545e-06f, -1.824185761e-06f, -1.825052679e-06f, -1.825916297e-06f, -1.826776615e-06f, -1.827633631e-06f, -1.828487344e-06f,
+-1.829337753e-06f, -1.830184858e-06f, -1.831028657e-06f, -1.831869150e-06f, -1.832706335e-06f, -1.833540212e-06f, -1.834370780e-06f, -1.835198037e-06f, -1.836021983e-06f, -1.836842617e-06f,
+-1.837659938e-06f, -1.838473945e-06f, -1.839284638e-06f, -1.840092014e-06f, -1.840896074e-06f, -1.841696816e-06f, -1.842494241e-06f, -1.843288345e-06f, -1.844079130e-06f, -1.844866594e-06f,
+-1.845650736e-06f, -1.846431555e-06f, -1.847209051e-06f, -1.847983223e-06f, -1.848754069e-06f, -1.849521590e-06f, -1.850285784e-06f, -1.851046650e-06f, -1.851804188e-06f, -1.852558396e-06f,
+-1.853309275e-06f, -1.854056822e-06f, -1.854801039e-06f, -1.855541923e-06f, -1.856279474e-06f, -1.857013690e-06f, -1.857744573e-06f, -1.858472120e-06f, -1.859196331e-06f, -1.859917205e-06f,
+-1.860634741e-06f, -1.861348939e-06f, -1.862059799e-06f, -1.862767318e-06f, -1.863471497e-06f, -1.864172335e-06f, -1.864869830e-06f, -1.865563984e-06f, -1.866254794e-06f, -1.866942260e-06f,
+-1.867626382e-06f, -1.868307158e-06f, -1.868984589e-06f, -1.869658673e-06f, -1.870329409e-06f, -1.870996798e-06f, -1.871660838e-06f, -1.872321529e-06f, -1.872978871e-06f, -1.873632862e-06f,
+-1.874283502e-06f, -1.874930790e-06f, -1.875574726e-06f, -1.876215310e-06f, -1.876852540e-06f, -1.877486416e-06f, -1.878116937e-06f, -1.878744103e-06f, -1.879367914e-06f, -1.879988368e-06f,
+-1.880605465e-06f, -1.881219205e-06f, -1.881829588e-06f, -1.882436611e-06f, -1.883040276e-06f, -1.883640581e-06f, -1.884237526e-06f, -1.884831111e-06f, -1.885421335e-06f, -1.886008197e-06f,
+-1.886591697e-06f, -1.887171834e-06f, -1.887748608e-06f, -1.888322019e-06f, -1.888892066e-06f, -1.889458749e-06f, -1.890022066e-06f, -1.890582018e-06f, -1.891138605e-06f, -1.891691825e-06f,
+-1.892241678e-06f, -1.892788164e-06f, -1.893331283e-06f, -1.893871034e-06f, -1.894407416e-06f, -1.894940430e-06f, -1.895470074e-06f, -1.895996349e-06f, -1.896519254e-06f, -1.897038788e-06f,
+-1.897554952e-06f, -1.898067744e-06f, -1.898577165e-06f, -1.899083215e-06f, -1.899585892e-06f, -1.900085196e-06f, -1.900581128e-06f, -1.901073686e-06f, -1.901562871e-06f, -1.902048682e-06f,
+-1.902531119e-06f, -1.903010181e-06f, -1.903485869e-06f, -1.903958181e-06f, -1.904427118e-06f, -1.904892679e-06f, -1.905354865e-06f, -1.905813674e-06f, -1.906269106e-06f, -1.906721162e-06f,
+-1.907169840e-06f, -1.907615142e-06f, -1.908057065e-06f, -1.908495611e-06f, -1.908930779e-06f, -1.909362569e-06f, -1.909790980e-06f, -1.910216012e-06f, -1.910637666e-06f, -1.911055940e-06f,
+-1.911470835e-06f, -1.911882350e-06f, -1.912290486e-06f, -1.912695242e-06f, -1.913096618e-06f, -1.913494613e-06f, -1.913889228e-06f, -1.914280463e-06f, -1.914668317e-06f, -1.915052790e-06f,
+-1.915433882e-06f, -1.915811592e-06f, -1.916185922e-06f, -1.916556870e-06f, -1.916924437e-06f, -1.917288621e-06f, -1.917649425e-06f, -1.918006846e-06f, -1.918360885e-06f, -1.918711543e-06f,
+-1.919058818e-06f, -1.919402711e-06f, -1.919743222e-06f, -1.920080350e-06f, -1.920414097e-06f, -1.920744460e-06f, -1.921071441e-06f, -1.921395040e-06f, -1.921715256e-06f, -1.922032090e-06f,
+-1.922345541e-06f, -1.922655609e-06f, -1.922962295e-06f, -1.923265598e-06f, -1.923565518e-06f, -1.923862056e-06f, -1.924155211e-06f, -1.924444983e-06f, -1.924731373e-06f, -1.925014380e-06f,
+-1.925294005e-06f, -1.925570247e-06f, -1.925843107e-06f, -1.926112584e-06f, -1.926378680e-06f, -1.926641392e-06f, -1.926900723e-06f, -1.927156672e-06f, -1.927409238e-06f, -1.927658423e-06f,
+-1.927904225e-06f, -1.928146646e-06f, -1.928385685e-06f, -1.928621343e-06f, -1.928853620e-06f, -1.929082515e-06f, -1.929308028e-06f, -1.929530161e-06f, -1.929748913e-06f, -1.929964284e-06f,
+-1.930176275e-06f, -1.930384885e-06f, -1.930590115e-06f, -1.930791964e-06f, -1.930990434e-06f, -1.931185524e-06f, -1.931377235e-06f, -1.931565566e-06f, -1.931750518e-06f, -1.931932091e-06f,
+-1.932110285e-06f, -1.932285100e-06f, -1.932456538e-06f, -1.932624597e-06f, -1.932789278e-06f, -1.932950582e-06f, -1.933108509e-06f, -1.933263058e-06f, -1.933414230e-06f, -1.933562026e-06f,
+-1.933706446e-06f, -1.933847489e-06f, -1.933985157e-06f, -1.934119449e-06f, -1.934250366e-06f, -1.934377908e-06f, -1.934502076e-06f, -1.934622869e-06f, -1.934740288e-06f, -1.934854334e-06f,
+-1.934965006e-06f, -1.935072305e-06f, -1.935176232e-06f, -1.935276786e-06f, -1.935373968e-06f, -1.935467779e-06f, -1.935558219e-06f, -1.935645287e-06f, -1.935728986e-06f, -1.935809314e-06f,
+-1.935886272e-06f, -1.935959861e-06f, -1.936030081e-06f, -1.936096933e-06f, -1.936160416e-06f, -1.936220532e-06f, -1.936277280e-06f, -1.936330662e-06f, -1.936380677e-06f, -1.936427326e-06f,
+-1.936470609e-06f, -1.936510528e-06f, -1.936547081e-06f, -1.936580271e-06f, -1.936610097e-06f, -1.936636559e-06f, -1.936659659e-06f, -1.936679396e-06f, -1.936695772e-06f, -1.936708786e-06f,
+-1.936718440e-06f, -1.936724733e-06f, -1.936727667e-06f, -1.936727241e-06f, -1.936723456e-06f, -1.936716313e-06f, -1.936705813e-06f, -1.936691955e-06f, -1.936674741e-06f, -1.936654171e-06f,
+-1.936630245e-06f, -1.936602964e-06f, -1.936572329e-06f, -1.936538340e-06f, -1.936500998e-06f, -1.936460304e-06f, -1.936416257e-06f, -1.936368859e-06f, -1.936318110e-06f, -1.936264011e-06f,
+-1.936206562e-06f, -1.936145765e-06f, -1.936081619e-06f, -1.936014125e-06f, -1.935943284e-06f, -1.935869097e-06f, -1.935791564e-06f, -1.935710686e-06f, -1.935626464e-06f, -1.935538897e-06f,
+-1.935447988e-06f, -1.935353736e-06f, -1.935256142e-06f, -1.935155208e-06f, -1.935050933e-06f, -1.934943318e-06f, -1.934832364e-06f, -1.934718072e-06f, -1.934600443e-06f, -1.934479477e-06f,
+-1.934355174e-06f, -1.934227536e-06f, -1.934096564e-06f, -1.933962258e-06f, -1.933824619e-06f, -1.933683647e-06f, -1.933539344e-06f, -1.933391710e-06f, -1.933240746e-06f, -1.933086453e-06f,
+-1.932928831e-06f, -1.932767882e-06f, -1.932603606e-06f, -1.932436003e-06f, -1.932265076e-06f, -1.932090824e-06f, -1.931913248e-06f, -1.931732349e-06f, -1.931548129e-06f, -1.931360587e-06f,
+-1.931169726e-06f, -1.930975544e-06f, -1.930778044e-06f, -1.930577227e-06f, -1.930373092e-06f, -1.930165642e-06f, -1.929954876e-06f, -1.929740796e-06f, -1.929523403e-06f, -1.929302698e-06f,
+-1.929078681e-06f, -1.928851353e-06f, -1.928620715e-06f, -1.928386769e-06f, -1.928149515e-06f, -1.927908954e-06f, -1.927665086e-06f, -1.927417914e-06f, -1.927167438e-06f, -1.926913658e-06f,
+-1.926656576e-06f, -1.926396193e-06f, -1.926132509e-06f, -1.925865526e-06f, -1.925595245e-06f, -1.925321666e-06f, -1.925044791e-06f, -1.924764621e-06f, -1.924481156e-06f, -1.924194398e-06f,
+-1.923904347e-06f, -1.923611005e-06f, -1.923314373e-06f, -1.923014451e-06f, -1.922711241e-06f, -1.922404744e-06f, -1.922094961e-06f, -1.921781892e-06f, -1.921465540e-06f, -1.921145904e-06f,
+-1.920822986e-06f, -1.920496788e-06f, -1.920167309e-06f, -1.919834552e-06f, -1.919498518e-06f, -1.919159206e-06f, -1.918816620e-06f, -1.918470759e-06f, -1.918121624e-06f, -1.917769218e-06f,
+-1.917413540e-06f, -1.917054593e-06f, -1.916692377e-06f, -1.916326893e-06f, -1.915958143e-06f, -1.915586128e-06f, -1.915210848e-06f, -1.914832306e-06f, -1.914450501e-06f, -1.914065436e-06f,
+-1.913677112e-06f, -1.913285529e-06f, -1.912890689e-06f, -1.912492593e-06f, -1.912091243e-06f, -1.911686639e-06f, -1.911278783e-06f, -1.910867675e-06f, -1.910453318e-06f, -1.910035712e-06f,
+-1.909614859e-06f, -1.909190759e-06f, -1.908763415e-06f, -1.908332827e-06f, -1.907898996e-06f, -1.907461925e-06f, -1.907021613e-06f, -1.906578063e-06f, -1.906131275e-06f, -1.905681252e-06f,
+-1.905227993e-06f, -1.904771501e-06f, -1.904311777e-06f, -1.903848822e-06f, -1.903382637e-06f, -1.902913225e-06f, -1.902440585e-06f, -1.901964719e-06f, -1.901485629e-06f, -1.901003317e-06f,
+-1.900517782e-06f, -1.900029027e-06f, -1.899537054e-06f, -1.899041863e-06f, -1.898543455e-06f, -1.898041833e-06f, -1.897536997e-06f, -1.897028949e-06f, -1.896517691e-06f, -1.896003223e-06f,
+-1.895485547e-06f, -1.894964664e-06f, -1.894440577e-06f, -1.893913286e-06f, -1.893382792e-06f, -1.892849098e-06f, -1.892312204e-06f, -1.891772112e-06f, -1.891228823e-06f, -1.890682340e-06f,
+-1.890132662e-06f, -1.889579793e-06f, -1.889023732e-06f, -1.888464482e-06f, -1.887902045e-06f, -1.887336421e-06f, -1.886767612e-06f, -1.886195619e-06f, -1.885620445e-06f, -1.885042090e-06f,
+-1.884460557e-06f, -1.883875846e-06f, -1.883287959e-06f, -1.882696897e-06f, -1.882102663e-06f, -1.881505257e-06f, -1.880904682e-06f, -1.880300938e-06f, -1.879694027e-06f, -1.879083952e-06f,
+-1.878470712e-06f, -1.877854311e-06f, -1.877234749e-06f, -1.876612028e-06f, -1.875986150e-06f, -1.875357115e-06f, -1.874724927e-06f, -1.874089586e-06f, -1.873451094e-06f, -1.872809453e-06f,
+-1.872164663e-06f, -1.871516728e-06f, -1.870865648e-06f, -1.870211425e-06f, -1.869554060e-06f, -1.868893556e-06f, -1.868229914e-06f, -1.867563135e-06f, -1.866893222e-06f, -1.866220175e-06f,
+-1.865543997e-06f, -1.864864689e-06f, -1.864182253e-06f, -1.863496691e-06f, -1.862808003e-06f, -1.862116193e-06f, -1.861421261e-06f, -1.860723209e-06f, -1.860022040e-06f, -1.859317754e-06f,
+-1.858610353e-06f, -1.857899839e-06f, -1.857186215e-06f, -1.856469480e-06f, -1.855749639e-06f, -1.855026691e-06f, -1.854300638e-06f, -1.853571484e-06f, -1.852839228e-06f, -1.852103874e-06f,
+-1.851365422e-06f, -1.850623875e-06f, -1.849879234e-06f, -1.849131501e-06f, -1.848380678e-06f, -1.847626766e-06f, -1.846869768e-06f, -1.846109685e-06f, -1.845346520e-06f, -1.844580273e-06f,
+-1.843810946e-06f, -1.843038542e-06f, -1.842263063e-06f, -1.841484509e-06f, -1.840702884e-06f, -1.839918188e-06f, -1.839130424e-06f, -1.838339593e-06f, -1.837545697e-06f, -1.836748739e-06f,
+-1.835948720e-06f, -1.835145641e-06f, -1.834339506e-06f, -1.833530315e-06f, -1.832718070e-06f, -1.831902774e-06f, -1.831084429e-06f, -1.830263035e-06f, -1.829438596e-06f, -1.828611112e-06f,
+-1.827780587e-06f, -1.826947021e-06f, -1.826110417e-06f, -1.825270777e-06f, -1.824428102e-06f, -1.823582395e-06f, -1.822733658e-06f, -1.821881892e-06f, -1.821027099e-06f, -1.820169282e-06f,
+-1.819308442e-06f, -1.818444581e-06f, -1.817577701e-06f, -1.816707805e-06f, -1.815834894e-06f, -1.814958970e-06f, -1.814080035e-06f, -1.813198092e-06f, -1.812313142e-06f, -1.811425186e-06f,
+-1.810534229e-06f, -1.809640270e-06f, -1.808743312e-06f, -1.807843358e-06f, -1.806940409e-06f, -1.806034468e-06f, -1.805125536e-06f, -1.804213615e-06f, -1.803298707e-06f, -1.802380816e-06f,
+-1.801459941e-06f, -1.800536087e-06f, -1.799609254e-06f, -1.798679445e-06f, -1.797746662e-06f, -1.796810906e-06f, -1.795872181e-06f, -1.794930488e-06f, -1.793985829e-06f, -1.793038207e-06f,
+-1.792087623e-06f, -1.791134079e-06f, -1.790177578e-06f, -1.789218122e-06f, -1.788255713e-06f, -1.787290353e-06f, -1.786322045e-06f, -1.785350789e-06f, -1.784376589e-06f, -1.783399447e-06f,
+-1.782419364e-06f, -1.781436344e-06f, -1.780450387e-06f, -1.779461497e-06f, -1.778469675e-06f, -1.777474924e-06f, -1.776477246e-06f, -1.775476642e-06f, -1.774473116e-06f, -1.773466670e-06f,
+-1.772457305e-06f, -1.771445024e-06f, -1.770429828e-06f, -1.769411722e-06f, -1.768390705e-06f, -1.767366782e-06f, -1.766339953e-06f, -1.765310221e-06f, -1.764277589e-06f, -1.763242059e-06f,
+-1.762203632e-06f, -1.761162312e-06f, -1.760118100e-06f, -1.759070998e-06f, -1.758021010e-06f, -1.756968137e-06f, -1.755912381e-06f, -1.754853746e-06f, -1.753792232e-06f, -1.752727843e-06f,
+-1.751660580e-06f, -1.750590446e-06f, -1.749517444e-06f, -1.748441575e-06f, -1.747362842e-06f, -1.746281248e-06f, -1.745196794e-06f, -1.744109483e-06f, -1.743019317e-06f, -1.741926298e-06f,
+-1.740830430e-06f, -1.739731714e-06f, -1.738630152e-06f, -1.737525748e-06f, -1.736418502e-06f, -1.735308419e-06f, -1.734195499e-06f, -1.733079746e-06f, -1.731961162e-06f, -1.730839749e-06f,
+-1.729715509e-06f, -1.728588446e-06f, -1.727458561e-06f, -1.726325856e-06f, -1.725190335e-06f, -1.724052000e-06f, -1.722910852e-06f, -1.721766895e-06f, -1.720620131e-06f, -1.719470562e-06f,
+-1.718318191e-06f, -1.717163020e-06f, -1.716005052e-06f, -1.714844289e-06f, -1.713680733e-06f, -1.712514387e-06f, -1.711345254e-06f, -1.710173336e-06f, -1.708998635e-06f, -1.707821153e-06f,
+-1.706640894e-06f, -1.705457860e-06f, -1.704272054e-06f, -1.703083477e-06f, -1.701892132e-06f, -1.700698022e-06f, -1.699501150e-06f, -1.698301517e-06f, -1.697099126e-06f, -1.695893981e-06f,
+-1.694686082e-06f, -1.693475434e-06f, -1.692262038e-06f, -1.691045897e-06f, -1.689827013e-06f, -1.688605390e-06f, -1.687381029e-06f, -1.686153933e-06f, -1.684924105e-06f, -1.683691548e-06f,
+-1.682456263e-06f, -1.681218253e-06f, -1.679977522e-06f, -1.678734071e-06f, -1.677487903e-06f, -1.676239021e-06f, -1.674987427e-06f, -1.673733124e-06f, -1.672476115e-06f, -1.671216402e-06f,
+-1.669953987e-06f, -1.668688874e-06f, -1.667421065e-06f, -1.666150562e-06f, -1.664877369e-06f, -1.663601488e-06f, -1.662322921e-06f, -1.661041671e-06f, -1.659757741e-06f, -1.658471133e-06f,
+-1.657181850e-06f, -1.655889896e-06f, -1.654595271e-06f, -1.653297980e-06f, -1.651998024e-06f, -1.650695407e-06f, -1.649390131e-06f, -1.648082198e-06f, -1.646771612e-06f, -1.645458376e-06f,
+-1.644142491e-06f, -1.642823960e-06f, -1.641502787e-06f, -1.640178974e-06f, -1.638852523e-06f, -1.637523438e-06f, -1.636191721e-06f, -1.634857375e-06f, -1.633520402e-06f, -1.632180805e-06f,
+-1.630838588e-06f, -1.629493752e-06f, -1.628146301e-06f, -1.626796237e-06f, -1.625443563e-06f, -1.624088282e-06f, -1.622730396e-06f, -1.621369909e-06f, -1.620006822e-06f, -1.618641140e-06f,
+-1.617272864e-06f, -1.615901997e-06f, -1.614528543e-06f, -1.613152503e-06f, -1.611773882e-06f, -1.610392680e-06f, -1.609008903e-06f, -1.607622551e-06f, -1.606233628e-06f, -1.604842137e-06f,
+-1.603448081e-06f, -1.602051462e-06f, -1.600652284e-06f, -1.599250548e-06f, -1.597846259e-06f, -1.596439418e-06f, -1.595030028e-06f, -1.593618094e-06f, -1.592203616e-06f, -1.590786599e-06f,
+-1.589367044e-06f, -1.587944956e-06f, -1.586520336e-06f, -1.585093188e-06f, -1.583663514e-06f, -1.582231317e-06f, -1.580796601e-06f, -1.579359368e-06f, -1.577919621e-06f, -1.576477363e-06f,
+-1.575032596e-06f, -1.573585325e-06f, -1.572135551e-06f, -1.570683277e-06f, -1.569228507e-06f, -1.567771243e-06f, -1.566311488e-06f, -1.564849246e-06f, -1.563384519e-06f, -1.561917310e-06f,
+-1.560447621e-06f, -1.558975457e-06f, -1.557500820e-06f, -1.556023712e-06f, -1.554544137e-06f, -1.553062098e-06f, -1.551577597e-06f, -1.550090638e-06f, -1.548601224e-06f, -1.547109357e-06f,
+-1.545615041e-06f, -1.544118279e-06f, -1.542619073e-06f, -1.541117426e-06f, -1.539613342e-06f, -1.538106823e-06f, -1.536597873e-06f, -1.535086494e-06f, -1.533572690e-06f, -1.532056463e-06f,
+-1.530537817e-06f, -1.529016754e-06f, -1.527493278e-06f, -1.525967392e-06f, -1.524439098e-06f, -1.522908399e-06f, -1.521375299e-06f, -1.519839801e-06f, -1.518301908e-06f, -1.516761622e-06f,
+-1.515218948e-06f, -1.513673887e-06f, -1.512126443e-06f, -1.510576619e-06f, -1.509024418e-06f, -1.507469843e-06f, -1.505912898e-06f, -1.504353584e-06f, -1.502791906e-06f, -1.501227867e-06f,
+-1.499661469e-06f, -1.498092715e-06f, -1.496521609e-06f, -1.494948154e-06f, -1.493372353e-06f, -1.491794209e-06f, -1.490213725e-06f, -1.488630905e-06f, -1.487045750e-06f, -1.485458265e-06f,
+-1.483868453e-06f, -1.482276316e-06f, -1.480681858e-06f, -1.479085082e-06f, -1.477485991e-06f, -1.475884589e-06f, -1.474280877e-06f, -1.472674861e-06f, -1.471066542e-06f, -1.469455923e-06f,
+-1.467843009e-06f, -1.466227802e-06f, -1.464610305e-06f, -1.462990522e-06f, -1.461368455e-06f, -1.459744108e-06f, -1.458117484e-06f, -1.456488586e-06f, -1.454857418e-06f, -1.453223982e-06f,
+-1.451588281e-06f, -1.449950320e-06f, -1.448310101e-06f, -1.446667627e-06f, -1.445022902e-06f, -1.443375928e-06f, -1.441726710e-06f, -1.440075249e-06f, -1.438421550e-06f, -1.436765616e-06f,
+-1.435107449e-06f, -1.433447054e-06f, -1.431784432e-06f, -1.430119589e-06f, -1.428452526e-06f, -1.426783247e-06f, -1.425111755e-06f, -1.423438054e-06f, -1.421762146e-06f, -1.420084036e-06f,
+-1.418403726e-06f, -1.416721219e-06f, -1.415036519e-06f, -1.413349630e-06f, -1.411660553e-06f, -1.409969294e-06f, -1.408275854e-06f, -1.406580237e-06f, -1.404882447e-06f, -1.403182486e-06f,
+-1.401480359e-06f, -1.399776067e-06f, -1.398069616e-06f, -1.396361007e-06f, -1.394650245e-06f, -1.392937332e-06f, -1.391222272e-06f, -1.389505068e-06f, -1.387785724e-06f, -1.386064243e-06f,
+-1.384340627e-06f, -1.382614882e-06f, -1.380887008e-06f, -1.379157012e-06f, -1.377424894e-06f, -1.375690659e-06f, -1.373954311e-06f, -1.372215852e-06f, -1.370475286e-06f, -1.368732616e-06f,
+-1.366987845e-06f, -1.365240978e-06f, -1.363492016e-06f, -1.361740965e-06f, -1.359987826e-06f, -1.358232604e-06f, -1.356475301e-06f, -1.354715922e-06f, -1.352954469e-06f, -1.351190946e-06f,
+-1.349425356e-06f, -1.347657703e-06f, -1.345887990e-06f, -1.344116220e-06f, -1.342342398e-06f, -1.340566525e-06f, -1.338788606e-06f, -1.337008645e-06f, -1.335226643e-06f, -1.333442606e-06f,
+-1.331656536e-06f, -1.329868437e-06f, -1.328078312e-06f, -1.326286164e-06f, -1.324491997e-06f, -1.322695815e-06f, -1.320897621e-06f, -1.319097418e-06f, -1.317295210e-06f, -1.315491000e-06f,
+-1.313684791e-06f, -1.311876588e-06f, -1.310066393e-06f, -1.308254210e-06f, -1.306440043e-06f, -1.304623894e-06f, -1.302805768e-06f, -1.300985668e-06f, -1.299163597e-06f, -1.297339559e-06f,
+-1.295513557e-06f, -1.293685595e-06f, -1.291855676e-06f, -1.290023804e-06f, -1.288189982e-06f, -1.286354214e-06f, -1.284516503e-06f, -1.282676853e-06f, -1.280835266e-06f, -1.278991748e-06f,
+-1.277146300e-06f, -1.275298928e-06f, -1.273449633e-06f, -1.271598420e-06f, -1.269745293e-06f, -1.267890254e-06f, -1.266033307e-06f, -1.264174456e-06f, -1.262313705e-06f, -1.260451056e-06f,
+-1.258586514e-06f, -1.256720081e-06f, -1.254851762e-06f, -1.252981560e-06f, -1.251109479e-06f, -1.249235522e-06f, -1.247359692e-06f, -1.245481993e-06f, -1.243602429e-06f, -1.241721004e-06f,
+-1.239837720e-06f, -1.237952581e-06f, -1.236065592e-06f, -1.234176755e-06f, -1.232286074e-06f, -1.230393553e-06f, -1.228499195e-06f, -1.226603004e-06f, -1.224704984e-06f, -1.222805137e-06f,
+-1.220903468e-06f, -1.218999980e-06f, -1.217094676e-06f, -1.215187562e-06f, -1.213278639e-06f, -1.211367911e-06f, -1.209455383e-06f, -1.207541057e-06f, -1.205624938e-06f, -1.203707029e-06f,
+-1.201787333e-06f, -1.199865855e-06f, -1.197942597e-06f, -1.196017564e-06f, -1.194090758e-06f, -1.192162185e-06f, -1.190231846e-06f, -1.188299747e-06f, -1.186365890e-06f, -1.184430279e-06f,
+-1.182492918e-06f, -1.180553811e-06f, -1.178612960e-06f, -1.176670371e-06f, -1.174726046e-06f, -1.172779988e-06f, -1.170832203e-06f, -1.168882692e-06f, -1.166931461e-06f, -1.164978513e-06f,
+-1.163023850e-06f, -1.161067478e-06f, -1.159109399e-06f, -1.157149618e-06f, -1.155188137e-06f, -1.153224961e-06f, -1.151260094e-06f, -1.149293538e-06f, -1.147325299e-06f, -1.145355378e-06f,
+-1.143383781e-06f, -1.141410510e-06f, -1.139435570e-06f, -1.137458964e-06f, -1.135480695e-06f, -1.133500768e-06f, -1.131519187e-06f, -1.129535954e-06f, -1.127551074e-06f, -1.125564550e-06f,
+-1.123576386e-06f, -1.121586586e-06f, -1.119595153e-06f, -1.117602091e-06f, -1.115607404e-06f, -1.113611096e-06f, -1.111613170e-06f, -1.109613631e-06f, -1.107612480e-06f, -1.105609724e-06f,
+-1.103605364e-06f, -1.101599406e-06f, -1.099591852e-06f, -1.097582707e-06f, -1.095571973e-06f, -1.093559656e-06f, -1.091545758e-06f, -1.089530284e-06f, -1.087513237e-06f, -1.085494620e-06f,
+-1.083474438e-06f, -1.081452695e-06f, -1.079429394e-06f, -1.077404538e-06f, -1.075378132e-06f, -1.073350180e-06f, -1.071320685e-06f, -1.069289651e-06f, -1.067257081e-06f, -1.065222980e-06f,
+-1.063187351e-06f, -1.061150198e-06f, -1.059111525e-06f, -1.057071336e-06f, -1.055029634e-06f, -1.052986423e-06f, -1.050941707e-06f, -1.048895490e-06f, -1.046847775e-06f, -1.044798567e-06f,
+-1.042747868e-06f, -1.040695684e-06f, -1.038642017e-06f, -1.036586871e-06f, -1.034530251e-06f, -1.032472160e-06f, -1.030412602e-06f, -1.028351581e-06f, -1.026289100e-06f, -1.024225163e-06f,
+-1.022159774e-06f, -1.020092938e-06f, -1.018024657e-06f, -1.015954936e-06f, -1.013883778e-06f, -1.011811187e-06f, -1.009737167e-06f, -1.007661723e-06f, -1.005584856e-06f, -1.003506573e-06f,
+-1.001426876e-06f, -9.993457685e-07f, -9.972632554e-07f, -9.951793402e-07f, -9.930940267e-07f, -9.910073187e-07f, -9.889192200e-07f, -9.868297346e-07f, -9.847388662e-07f, -9.826466188e-07f,
+-9.805529961e-07f, -9.784580020e-07f, -9.763616403e-07f, -9.742639150e-07f, -9.721648299e-07f, -9.700643888e-07f, -9.679625956e-07f, -9.658594541e-07f, -9.637549683e-07f, -9.616491419e-07f,
+-9.595419789e-07f, -9.574334831e-07f, -9.553236584e-07f, -9.532125086e-07f, -9.511000377e-07f, -9.489862495e-07f, -9.468711479e-07f, -9.447547367e-07f, -9.426370199e-07f, -9.405180013e-07f,
+-9.383976848e-07f, -9.362760744e-07f, -9.341531738e-07f, -9.320289870e-07f, -9.299035178e-07f, -9.277767702e-07f, -9.256487481e-07f, -9.235194553e-07f, -9.213888957e-07f, -9.192570733e-07f,
+-9.171239919e-07f, -9.149896555e-07f, -9.128540679e-07f, -9.107172330e-07f, -9.085791548e-07f, -9.064398372e-07f, -9.042992840e-07f, -9.021574992e-07f, -9.000144867e-07f, -8.978702505e-07f,
+-8.957247943e-07f, -8.935781222e-07f, -8.914302380e-07f, -8.892811458e-07f, -8.871308493e-07f, -8.849793525e-07f, -8.828266594e-07f, -8.806727739e-07f, -8.785176999e-07f, -8.763614413e-07f,
+-8.742040020e-07f, -8.720453861e-07f, -8.698855973e-07f, -8.677246398e-07f, -8.655625173e-07f, -8.633992339e-07f, -8.612347934e-07f, -8.590691998e-07f, -8.569024571e-07f, -8.547345692e-07f,
+-8.525655400e-07f, -8.503953735e-07f, -8.482240737e-07f, -8.460516444e-07f, -8.438780896e-07f, -8.417034133e-07f, -8.395276195e-07f, -8.373507120e-07f, -8.351726949e-07f, -8.329935721e-07f,
+-8.308133475e-07f, -8.286320251e-07f, -8.264496090e-07f, -8.242661029e-07f, -8.220815109e-07f, -8.198958370e-07f, -8.177090852e-07f, -8.155212593e-07f, -8.133323634e-07f, -8.111424014e-07f,
+-8.089513773e-07f, -8.067592951e-07f, -8.045661587e-07f, -8.023719721e-07f, -8.001767393e-07f, -7.979804643e-07f, -7.957831510e-07f, -7.935848035e-07f, -7.913854256e-07f, -7.891850215e-07f,
+-7.869835950e-07f, -7.847811501e-07f, -7.825776909e-07f, -7.803732213e-07f, -7.781677453e-07f, -7.759612669e-07f, -7.737537901e-07f, -7.715453188e-07f, -7.693358571e-07f, -7.671254090e-07f,
+-7.649139784e-07f, -7.627015694e-07f, -7.604881858e-07f, -7.582738319e-07f, -7.560585114e-07f, -7.538422285e-07f, -7.516249871e-07f, -7.494067912e-07f, -7.471876449e-07f, -7.449675521e-07f,
+-7.427465168e-07f, -7.405245431e-07f, -7.383016349e-07f, -7.360777962e-07f, -7.338530312e-07f, -7.316273437e-07f, -7.294007378e-07f, -7.271732174e-07f, -7.249447867e-07f, -7.227154496e-07f,
+-7.204852101e-07f, -7.182540722e-07f, -7.160220400e-07f, -7.137891175e-07f, -7.115553087e-07f, -7.093206176e-07f, -7.070850482e-07f, -7.048486045e-07f, -7.026112906e-07f, -7.003731106e-07f,
+-6.981340683e-07f, -6.958941678e-07f, -6.936534132e-07f, -6.914118085e-07f, -6.891693577e-07f, -6.869260649e-07f, -6.846819340e-07f, -6.824369691e-07f, -6.801911742e-07f, -6.779445534e-07f,
+-6.756971106e-07f, -6.734488500e-07f, -6.711997755e-07f, -6.689498912e-07f, -6.666992011e-07f, -6.644477092e-07f, -6.621954197e-07f, -6.599423364e-07f, -6.576884635e-07f, -6.554338050e-07f,
+-6.531783650e-07f, -6.509221474e-07f, -6.486651563e-07f, -6.464073958e-07f, -6.441488698e-07f, -6.418895825e-07f, -6.396295379e-07f, -6.373687400e-07f, -6.351071929e-07f, -6.328449006e-07f,
+-6.305818671e-07f, -6.283180965e-07f, -6.260535929e-07f, -6.237883603e-07f, -6.215224027e-07f, -6.192557242e-07f, -6.169883288e-07f, -6.147202207e-07f, -6.124514038e-07f, -6.101818821e-07f,
+-6.079116598e-07f, -6.056407409e-07f, -6.033691295e-07f, -6.010968296e-07f, -5.988238452e-07f, -5.965501804e-07f, -5.942758393e-07f, -5.920008259e-07f, -5.897251443e-07f, -5.874487985e-07f,
+-5.851717926e-07f, -5.828941306e-07f, -5.806158167e-07f, -5.783368548e-07f, -5.760572490e-07f, -5.737770034e-07f, -5.714961221e-07f, -5.692146090e-07f, -5.669324684e-07f, -5.646497041e-07f,
+-5.623663203e-07f, -5.600823211e-07f, -5.577977105e-07f, -5.555124926e-07f, -5.532266714e-07f, -5.509402510e-07f, -5.486532354e-07f, -5.463656288e-07f, -5.440774352e-07f, -5.417886587e-07f,
+-5.394993033e-07f, -5.372093730e-07f, -5.349188721e-07f, -5.326278044e-07f, -5.303361742e-07f, -5.280439854e-07f, -5.257512421e-07f, -5.234579484e-07f, -5.211641084e-07f, -5.188697262e-07f,
+-5.165748057e-07f, -5.142793511e-07f, -5.119833665e-07f, -5.096868558e-07f, -5.073898233e-07f, -5.050922729e-07f, -5.027942087e-07f, -5.004956348e-07f, -4.981965553e-07f, -4.958969742e-07f,
+-4.935968956e-07f, -4.912963237e-07f, -4.889952623e-07f, -4.866937157e-07f, -4.843916879e-07f, -4.820891830e-07f, -4.797862050e-07f, -4.774827580e-07f, -4.751788461e-07f, -4.728744734e-07f,
+-4.705696439e-07f, -4.682643618e-07f, -4.659586310e-07f, -4.636524557e-07f, -4.613458399e-07f, -4.590387877e-07f, -4.567313032e-07f, -4.544233905e-07f, -4.521150536e-07f, -4.498062966e-07f,
+-4.474971236e-07f, -4.451875387e-07f, -4.428775458e-07f, -4.405671492e-07f, -4.382563529e-07f, -4.359451609e-07f, -4.336335774e-07f, -4.313216064e-07f, -4.290092519e-07f, -4.266965182e-07f,
+-4.243834091e-07f, -4.220699289e-07f, -4.197560815e-07f, -4.174418712e-07f, -4.151273018e-07f, -4.128123776e-07f, -4.104971025e-07f, -4.081814807e-07f, -4.058655163e-07f, -4.035492133e-07f,
+-4.012325757e-07f, -3.989156077e-07f, -3.965983134e-07f, -3.942806967e-07f, -3.919627619e-07f, -3.896445129e-07f, -3.873259539e-07f, -3.850070889e-07f, -3.826879219e-07f, -3.803684571e-07f,
+-3.780486986e-07f, -3.757286504e-07f, -3.734083165e-07f, -3.710877011e-07f, -3.687668083e-07f, -3.664456420e-07f, -3.641242064e-07f, -3.618025056e-07f, -3.594805436e-07f, -3.571583245e-07f,
+-3.548358524e-07f, -3.525131313e-07f, -3.501901653e-07f, -3.478669585e-07f, -3.455435150e-07f, -3.432198388e-07f, -3.408959340e-07f, -3.385718047e-07f, -3.362474549e-07f, -3.339228887e-07f,
+-3.315981102e-07f, -3.292731235e-07f, -3.269479326e-07f, -3.246225416e-07f, -3.222969545e-07f, -3.199711755e-07f, -3.176452086e-07f, -3.153190578e-07f, -3.129927273e-07f, -3.106662211e-07f,
+-3.083395432e-07f, -3.060126978e-07f, -3.036856889e-07f, -3.013585206e-07f, -2.990311969e-07f, -2.967037219e-07f, -2.943760997e-07f, -2.920483343e-07f, -2.897204298e-07f, -2.873923902e-07f,
+-2.850642197e-07f, -2.827359223e-07f, -2.804075020e-07f, -2.780789629e-07f, -2.757503091e-07f, -2.734215447e-07f, -2.710926736e-07f, -2.687637000e-07f, -2.664346279e-07f, -2.641054614e-07f,
+-2.617762045e-07f, -2.594468613e-07f, -2.571174358e-07f, -2.547879322e-07f, -2.524583544e-07f, -2.501287066e-07f, -2.477989927e-07f, -2.454692169e-07f, -2.431393831e-07f, -2.408094955e-07f,
+-2.384795581e-07f, -2.361495750e-07f, -2.338195501e-07f, -2.314894876e-07f, -2.291593915e-07f, -2.268292659e-07f, -2.244991148e-07f, -2.221689422e-07f, -2.198387523e-07f, -2.175085490e-07f,
+-2.151783364e-07f, -2.128481185e-07f, -2.105178995e-07f, -2.081876833e-07f, -2.058574740e-07f, -2.035272756e-07f, -2.011970922e-07f, -1.988669278e-07f, -1.965367865e-07f, -1.942066724e-07f,
+-1.918765893e-07f, -1.895465415e-07f, -1.872165328e-07f, -1.848865675e-07f, -1.825566495e-07f, -1.802267828e-07f, -1.778969715e-07f, -1.755672196e-07f, -1.732375312e-07f, -1.709079102e-07f,
+-1.685783608e-07f, -1.662488870e-07f, -1.639194927e-07f, -1.615901821e-07f, -1.592609591e-07f, -1.569318278e-07f, -1.546027922e-07f, -1.522738564e-07f, -1.499450244e-07f, -1.476163001e-07f,
+-1.452876877e-07f, -1.429591911e-07f, -1.406308144e-07f, -1.383025616e-07f, -1.359744367e-07f, -1.336464438e-07f, -1.313185869e-07f, -1.289908699e-07f, -1.266632969e-07f, -1.243358720e-07f,
+-1.220085991e-07f, -1.196814823e-07f, -1.173545255e-07f, -1.150277329e-07f, -1.127011083e-07f, -1.103746559e-07f, -1.080483796e-07f, -1.057222834e-07f, -1.033963714e-07f, -1.010706475e-07f,
+-9.874511587e-08f, -9.641978038e-08f, -9.409464507e-08f, -9.176971395e-08f, -8.944499103e-08f, -8.712048030e-08f, -8.479618578e-08f, -8.247211147e-08f, -8.014826135e-08f, -7.782463944e-08f,
+-7.550124974e-08f, -7.317809623e-08f, -7.085518292e-08f, -6.853251380e-08f, -6.621009287e-08f, -6.388792411e-08f, -6.156601153e-08f, -5.924435911e-08f, -5.692297085e-08f, -5.460185072e-08f,
+-5.228100273e-08f, -4.996043085e-08f, -4.764013907e-08f, -4.532013138e-08f, -4.300041176e-08f, -4.068098420e-08f, -3.836185266e-08f, -3.604302114e-08f, -3.372449362e-08f, -3.140627406e-08f,
+-2.908836645e-08f, -2.677077476e-08f, -2.445350297e-08f, -2.213655505e-08f, -1.981993496e-08f, -1.750364670e-08f, -1.518769421e-08f, -1.287208147e-08f, -1.055681245e-08f, -8.241891109e-09f,
+-5.927321417e-09f, -3.613107335e-09f, -1.299252826e-09f, 1.014238151e-09f, 3.327361634e-09f, 5.640113667e-09f, 7.952490291e-09f, 1.026448755e-08f, 1.257610149e-08f, 1.488732816e-08f,
+1.719816361e-08f, 1.950860389e-08f, 2.181864504e-08f, 2.412828311e-08f, 2.643751418e-08f, 2.874633427e-08f, 3.105473946e-08f, 3.336272581e-08f, 3.567028936e-08f, 3.797742618e-08f,
+4.028413233e-08f, 4.259040387e-08f, 4.489623687e-08f, 4.720162739e-08f, 4.950657151e-08f, 5.181106528e-08f, 5.411510478e-08f, 5.641868608e-08f, 5.872180525e-08f, 6.102445837e-08f,
+6.332664151e-08f, 6.562835075e-08f, 6.792958216e-08f, 7.023033184e-08f, 7.253059585e-08f, 7.483037028e-08f, 7.712965121e-08f, 7.942843473e-08f, 8.172671694e-08f, 8.402449391e-08f,
+8.632176173e-08f, 8.861851650e-08f, 9.091475432e-08f, 9.321047126e-08f, 9.550566344e-08f, 9.780032695e-08f, 1.000944579e-07f, 1.023880524e-07f, 1.046811065e-07f, 1.069736163e-07f,
+1.092655780e-07f, 1.115569876e-07f, 1.138478413e-07f, 1.161381351e-07f, 1.184278653e-07f, 1.207170278e-07f, 1.230056188e-07f, 1.252936344e-07f, 1.275810708e-07f, 1.298679241e-07f,
+1.321541903e-07f, 1.344398657e-07f, 1.367249462e-07f, 1.390094282e-07f, 1.412933076e-07f, 1.435765806e-07f, 1.458592434e-07f, 1.481412920e-07f, 1.504227227e-07f, 1.527035315e-07f,
+1.549837146e-07f, 1.572632681e-07f, 1.595421882e-07f, 1.618204710e-07f, 1.640981127e-07f, 1.663751094e-07f, 1.686514572e-07f, 1.709271523e-07f, 1.732021909e-07f, 1.754765691e-07f,
+1.777502830e-07f, 1.800233289e-07f, 1.822957028e-07f, 1.845674010e-07f, 1.868384196e-07f, 1.891087548e-07f, 1.913784026e-07f, 1.936473594e-07f, 1.959156213e-07f, 1.981831844e-07f,
+2.004500449e-07f, 2.027161990e-07f, 2.049816428e-07f, 2.072463726e-07f, 2.095103845e-07f, 2.117736748e-07f, 2.140362395e-07f, 2.162980749e-07f, 2.185591772e-07f, 2.208195425e-07f,
+2.230791671e-07f, 2.253380471e-07f, 2.275961787e-07f, 2.298535582e-07f, 2.321101817e-07f, 2.343660454e-07f, 2.366211456e-07f, 2.388754784e-07f, 2.411290401e-07f, 2.433818269e-07f,
+2.456338349e-07f, 2.478850603e-07f, 2.501354995e-07f, 2.523851486e-07f, 2.546340039e-07f, 2.568820614e-07f, 2.591293176e-07f, 2.613757686e-07f, 2.636214105e-07f, 2.658662398e-07f,
+2.681102525e-07f, 2.703534450e-07f, 2.725958134e-07f, 2.748373540e-07f, 2.770780630e-07f, 2.793179367e-07f, 2.815569713e-07f, 2.837951631e-07f, 2.860325083e-07f, 2.882690031e-07f,
+2.905046438e-07f, 2.927394267e-07f, 2.949733480e-07f, 2.972064040e-07f, 2.994385909e-07f, 3.016699051e-07f, 3.039003426e-07f, 3.061298999e-07f, 3.083585732e-07f, 3.105863587e-07f,
+3.128132528e-07f, 3.150392517e-07f, 3.172643517e-07f, 3.194885490e-07f, 3.217118400e-07f, 3.239342209e-07f, 3.261556880e-07f, 3.283762376e-07f, 3.305958660e-07f, 3.328145695e-07f,
+3.350323443e-07f, 3.372491869e-07f, 3.394650934e-07f, 3.416800601e-07f, 3.438940834e-07f, 3.461071597e-07f, 3.483192851e-07f, 3.505304559e-07f, 3.527406686e-07f, 3.549499194e-07f,
+3.571582047e-07f, 3.593655207e-07f, 3.615718638e-07f, 3.637772302e-07f, 3.659816164e-07f, 3.681850187e-07f, 3.703874333e-07f, 3.725888566e-07f, 3.747892850e-07f, 3.769887148e-07f,
+3.791871423e-07f, 3.813845638e-07f, 3.835809758e-07f, 3.857763745e-07f, 3.879707563e-07f, 3.901641176e-07f, 3.923564546e-07f, 3.945477639e-07f, 3.967380416e-07f, 3.989272842e-07f,
+4.011154881e-07f, 4.033026496e-07f, 4.054887650e-07f, 4.076738308e-07f, 4.098578433e-07f, 4.120407989e-07f, 4.142226940e-07f, 4.164035249e-07f, 4.185832880e-07f, 4.207619797e-07f,
+4.229395965e-07f, 4.251161346e-07f, 4.272915905e-07f, 4.294659606e-07f, 4.316392412e-07f, 4.338114289e-07f, 4.359825199e-07f, 4.381525106e-07f, 4.403213976e-07f, 4.424891771e-07f,
+4.446558456e-07f, 4.468213995e-07f, 4.489858353e-07f, 4.511491493e-07f, 4.533113380e-07f, 4.554723978e-07f, 4.576323251e-07f, 4.597911163e-07f, 4.619487680e-07f, 4.641052764e-07f,
+4.662606381e-07f, 4.684148495e-07f, 4.705679070e-07f, 4.727198071e-07f, 4.748705462e-07f, 4.770201208e-07f, 4.791685273e-07f, 4.813157622e-07f, 4.834618219e-07f, 4.856067029e-07f,
+4.877504017e-07f, 4.898929147e-07f, 4.920342384e-07f, 4.941743692e-07f, 4.963133037e-07f, 4.984510383e-07f, 5.005875694e-07f, 5.027228937e-07f, 5.048570075e-07f, 5.069899073e-07f,
+5.091215896e-07f, 5.112520510e-07f, 5.133812879e-07f, 5.155092968e-07f, 5.176360742e-07f, 5.197616166e-07f, 5.218859205e-07f, 5.240089824e-07f, 5.261307989e-07f, 5.282513664e-07f,
+5.303706815e-07f, 5.324887407e-07f, 5.346055404e-07f, 5.367210773e-07f, 5.388353478e-07f, 5.409483486e-07f, 5.430600760e-07f, 5.451705267e-07f, 5.472796971e-07f, 5.493875839e-07f,
+5.514941836e-07f, 5.535994926e-07f, 5.557035077e-07f, 5.578062252e-07f, 5.599076419e-07f, 5.620077541e-07f, 5.641065585e-07f, 5.662040517e-07f, 5.683002302e-07f, 5.703950906e-07f,
+5.724886295e-07f, 5.745808434e-07f, 5.766717288e-07f, 5.787612825e-07f, 5.808495010e-07f, 5.829363808e-07f, 5.850219185e-07f, 5.871061108e-07f, 5.891889542e-07f, 5.912704453e-07f,
+5.933505808e-07f, 5.954293572e-07f, 5.975067711e-07f, 5.995828192e-07f, 6.016574980e-07f, 6.037308042e-07f, 6.058027344e-07f, 6.078732852e-07f, 6.099424532e-07f, 6.120102351e-07f,
+6.140766275e-07f, 6.161416269e-07f, 6.182052302e-07f, 6.202674338e-07f, 6.223282345e-07f, 6.243876288e-07f, 6.264456135e-07f, 6.285021852e-07f, 6.305573404e-07f, 6.326110760e-07f,
+6.346633885e-07f, 6.367142746e-07f, 6.387637310e-07f, 6.408117543e-07f, 6.428583412e-07f, 6.449034884e-07f, 6.469471926e-07f, 6.489894504e-07f, 6.510302585e-07f, 6.530696137e-07f,
+6.551075125e-07f, 6.571439517e-07f, 6.591789280e-07f, 6.612124381e-07f, 6.632444787e-07f, 6.652750464e-07f, 6.673041381e-07f, 6.693317504e-07f, 6.713578800e-07f, 6.733825236e-07f,
+6.754056780e-07f, 6.774273399e-07f, 6.794475060e-07f, 6.814661730e-07f, 6.834833377e-07f, 6.854989968e-07f, 6.875131470e-07f, 6.895257851e-07f, 6.915369079e-07f, 6.935465120e-07f,
+6.955545943e-07f, 6.975611515e-07f, 6.995661803e-07f, 7.015696775e-07f, 7.035716398e-07f, 7.055720641e-07f, 7.075709471e-07f, 7.095682856e-07f, 7.115640764e-07f, 7.135583162e-07f,
+7.155510018e-07f, 7.175421300e-07f, 7.195316976e-07f, 7.215197013e-07f, 7.235061381e-07f, 7.254910047e-07f, 7.274742978e-07f, 7.294560143e-07f, 7.314361511e-07f, 7.334147048e-07f,
+7.353916724e-07f, 7.373670506e-07f, 7.393408363e-07f, 7.413130263e-07f, 7.432836174e-07f, 7.452526064e-07f, 7.472199903e-07f, 7.491857657e-07f, 7.511499297e-07f, 7.531124789e-07f,
+7.550734104e-07f, 7.570327208e-07f, 7.589904071e-07f, 7.609464661e-07f, 7.629008947e-07f, 7.648536898e-07f, 7.668048482e-07f, 7.687543668e-07f, 7.707022425e-07f, 7.726484721e-07f,
+7.745930525e-07f, 7.765359807e-07f, 7.784772534e-07f, 7.804168677e-07f, 7.823548203e-07f, 7.842911083e-07f, 7.862257284e-07f, 7.881586776e-07f, 7.900899528e-07f, 7.920195510e-07f,
+7.939474689e-07f, 7.958737037e-07f, 7.977982521e-07f, 7.997211110e-07f, 8.016422776e-07f, 8.035617486e-07f, 8.054795209e-07f, 8.073955916e-07f, 8.093099576e-07f, 8.112226159e-07f,
+8.131335633e-07f, 8.150427968e-07f, 8.169503134e-07f, 8.188561100e-07f, 8.207601837e-07f, 8.226625313e-07f, 8.245631499e-07f, 8.264620364e-07f, 8.283591879e-07f, 8.302546011e-07f,
+8.321482733e-07f, 8.340402013e-07f, 8.359303821e-07f, 8.378188128e-07f, 8.397054904e-07f, 8.415904117e-07f, 8.434735739e-07f, 8.453549740e-07f, 8.472346090e-07f, 8.491124758e-07f,
+8.509885715e-07f, 8.528628932e-07f, 8.547354378e-07f, 8.566062024e-07f, 8.584751840e-07f, 8.603423796e-07f, 8.622077864e-07f, 8.640714013e-07f, 8.659332214e-07f, 8.677932438e-07f,
+8.696514654e-07f, 8.715078834e-07f, 8.733624948e-07f, 8.752152967e-07f, 8.770662862e-07f, 8.789154603e-07f, 8.807628161e-07f, 8.826083507e-07f, 8.844520612e-07f, 8.862939446e-07f,
+8.881339981e-07f, 8.899722188e-07f, 8.918086036e-07f, 8.936431499e-07f, 8.954758546e-07f, 8.973067148e-07f, 8.991357278e-07f, 9.009628905e-07f, 9.027882002e-07f, 9.046116539e-07f,
+9.064332487e-07f, 9.082529819e-07f, 9.100708505e-07f, 9.118868517e-07f, 9.137009827e-07f, 9.155132404e-07f, 9.173236223e-07f, 9.191321252e-07f, 9.209387466e-07f, 9.227434834e-07f,
+9.245463328e-07f, 9.263472921e-07f, 9.281463585e-07f, 9.299435289e-07f, 9.317388008e-07f, 9.335321712e-07f, 9.353236373e-07f, 9.371131963e-07f, 9.389008455e-07f, 9.406865819e-07f,
+9.424704029e-07f, 9.442523057e-07f, 9.460322873e-07f, 9.478103451e-07f, 9.495864763e-07f, 9.513606781e-07f, 9.531329477e-07f, 9.549032823e-07f, 9.566716792e-07f, 9.584381356e-07f,
+9.602026488e-07f, 9.619652160e-07f, 9.637258345e-07f, 9.654845014e-07f, 9.672412141e-07f, 9.689959699e-07f, 9.707487659e-07f, 9.724995994e-07f, 9.742484678e-07f, 9.759953683e-07f,
+9.777402982e-07f, 9.794832547e-07f, 9.812242352e-07f, 9.829632369e-07f, 9.847002571e-07f, 9.864352932e-07f, 9.881683424e-07f, 9.898994020e-07f, 9.916284694e-07f, 9.933555419e-07f,
+9.950806167e-07f, 9.968036913e-07f, 9.985247629e-07f, 1.000243829e-06f, 1.001960886e-06f, 1.003675933e-06f, 1.005388966e-06f, 1.007099983e-06f, 1.008808981e-06f, 1.010515957e-06f,
+1.012220909e-06f, 1.013923834e-06f, 1.015624730e-06f, 1.017323593e-06f, 1.019020422e-06f, 1.020715214e-06f, 1.022407965e-06f, 1.024098674e-06f, 1.025787337e-06f, 1.027473953e-06f,
+1.029158518e-06f, 1.030841031e-06f, 1.032521487e-06f, 1.034199886e-06f, 1.035876223e-06f, 1.037550498e-06f, 1.039222706e-06f, 1.040892845e-06f, 1.042560914e-06f, 1.044226909e-06f,
+1.045890828e-06f, 1.047552668e-06f, 1.049212426e-06f, 1.050870101e-06f, 1.052525689e-06f, 1.054179188e-06f, 1.055830595e-06f, 1.057479909e-06f, 1.059127126e-06f, 1.060772244e-06f,
+1.062415260e-06f, 1.064056172e-06f, 1.065694977e-06f, 1.067331673e-06f, 1.068966257e-06f, 1.070598727e-06f, 1.072229081e-06f, 1.073857315e-06f, 1.075483427e-06f, 1.077107416e-06f,
+1.078729277e-06f, 1.080349010e-06f, 1.081966611e-06f, 1.083582077e-06f, 1.085195408e-06f, 1.086806599e-06f, 1.088415649e-06f, 1.090022554e-06f, 1.091627314e-06f, 1.093229925e-06f,
+1.094830384e-06f, 1.096428690e-06f, 1.098024839e-06f, 1.099618830e-06f, 1.101210660e-06f, 1.102800327e-06f, 1.104387827e-06f, 1.105973160e-06f, 1.107556322e-06f, 1.109137311e-06f,
+1.110716124e-06f, 1.112292759e-06f, 1.113867215e-06f, 1.115439487e-06f, 1.117009575e-06f, 1.118577475e-06f, 1.120143186e-06f, 1.121706704e-06f, 1.123268028e-06f, 1.124827155e-06f,
+1.126384083e-06f, 1.127938809e-06f, 1.129491332e-06f, 1.131041648e-06f, 1.132589755e-06f, 1.134135652e-06f, 1.135679335e-06f, 1.137220803e-06f, 1.138760052e-06f, 1.140297082e-06f,
+1.141831889e-06f, 1.143364471e-06f, 1.144894826e-06f, 1.146422951e-06f, 1.147948845e-06f, 1.149472504e-06f, 1.150993927e-06f, 1.152513112e-06f, 1.154030055e-06f, 1.155544756e-06f,
+1.157057210e-06f, 1.158567417e-06f, 1.160075375e-06f, 1.161581079e-06f, 1.163084530e-06f, 1.164585723e-06f, 1.166084657e-06f, 1.167581330e-06f, 1.169075740e-06f, 1.170567884e-06f,
+1.172057760e-06f, 1.173545365e-06f, 1.175030698e-06f, 1.176513757e-06f, 1.177994539e-06f, 1.179473041e-06f, 1.180949263e-06f, 1.182423200e-06f, 1.183894853e-06f, 1.185364217e-06f,
+1.186831291e-06f, 1.188296073e-06f, 1.189758561e-06f, 1.191218752e-06f, 1.192676644e-06f, 1.194132235e-06f, 1.195585523e-06f, 1.197036506e-06f, 1.198485182e-06f, 1.199931548e-06f,
+1.201375602e-06f, 1.202817342e-06f, 1.204256767e-06f, 1.205693873e-06f, 1.207128659e-06f, 1.208561123e-06f, 1.209991263e-06f, 1.211419075e-06f, 1.212844559e-06f, 1.214267713e-06f,
+1.215688533e-06f, 1.217107018e-06f, 1.218523167e-06f, 1.219936976e-06f, 1.221348444e-06f, 1.222757568e-06f, 1.224164347e-06f, 1.225568779e-06f, 1.226970861e-06f, 1.228370592e-06f,
+1.229767969e-06f, 1.231162990e-06f, 1.232555653e-06f, 1.233945957e-06f, 1.235333899e-06f, 1.236719477e-06f, 1.238102689e-06f, 1.239483533e-06f, 1.240862007e-06f, 1.242238109e-06f,
+1.243611837e-06f, 1.244983189e-06f, 1.246352164e-06f, 1.247718758e-06f, 1.249082970e-06f, 1.250444799e-06f, 1.251804241e-06f, 1.253161295e-06f, 1.254515960e-06f, 1.255868232e-06f,
+1.257218111e-06f, 1.258565594e-06f, 1.259910679e-06f, 1.261253365e-06f, 1.262593649e-06f, 1.263931529e-06f, 1.265267003e-06f, 1.266600070e-06f, 1.267930728e-06f, 1.269258974e-06f,
+1.270584807e-06f, 1.271908225e-06f, 1.273229226e-06f, 1.274547808e-06f, 1.275863969e-06f, 1.277177707e-06f, 1.278489020e-06f, 1.279797906e-06f, 1.281104365e-06f, 1.282408392e-06f,
+1.283709988e-06f, 1.285009149e-06f, 1.286305875e-06f, 1.287600162e-06f, 1.288892010e-06f, 1.290181416e-06f, 1.291468379e-06f, 1.292752897e-06f, 1.294034967e-06f, 1.295314588e-06f,
+1.296591759e-06f, 1.297866477e-06f, 1.299138741e-06f, 1.300408548e-06f, 1.301675898e-06f, 1.302940787e-06f, 1.304203215e-06f, 1.305463179e-06f, 1.306720678e-06f, 1.307975710e-06f,
+1.309228274e-06f, 1.310478366e-06f, 1.311725986e-06f, 1.312971132e-06f, 1.314213802e-06f, 1.315453994e-06f, 1.316691707e-06f, 1.317926939e-06f, 1.319159687e-06f, 1.320389951e-06f,
+1.321617728e-06f, 1.322843018e-06f, 1.324065817e-06f, 1.325286125e-06f, 1.326503939e-06f, 1.327719258e-06f, 1.328932080e-06f, 1.330142404e-06f, 1.331350228e-06f, 1.332555549e-06f,
+1.333758367e-06f, 1.334958680e-06f, 1.336156486e-06f, 1.337351783e-06f, 1.338544570e-06f, 1.339734845e-06f, 1.340922606e-06f, 1.342107851e-06f, 1.343290580e-06f, 1.344470790e-06f,
+1.345648480e-06f, 1.346823648e-06f, 1.347996292e-06f, 1.349166411e-06f, 1.350334003e-06f, 1.351499067e-06f, 1.352661600e-06f, 1.353821602e-06f, 1.354979071e-06f, 1.356134004e-06f,
+1.357286402e-06f, 1.358436260e-06f, 1.359583580e-06f, 1.360728358e-06f, 1.361870593e-06f, 1.363010283e-06f, 1.364147428e-06f, 1.365282025e-06f, 1.366414073e-06f, 1.367543570e-06f,
+1.368670514e-06f, 1.369794905e-06f, 1.370916741e-06f, 1.372036019e-06f, 1.373152740e-06f, 1.374266900e-06f, 1.375378498e-06f, 1.376487534e-06f, 1.377594005e-06f, 1.378697910e-06f,
+1.379799247e-06f, 1.380898016e-06f, 1.381994213e-06f, 1.383087839e-06f, 1.384178891e-06f, 1.385267368e-06f, 1.386353269e-06f, 1.387436591e-06f, 1.388517334e-06f, 1.389595496e-06f,
+1.390671076e-06f, 1.391744072e-06f, 1.392814482e-06f, 1.393882306e-06f, 1.394947542e-06f, 1.396010188e-06f, 1.397070242e-06f, 1.398127705e-06f, 1.399182573e-06f, 1.400234846e-06f,
+1.401284523e-06f, 1.402331601e-06f, 1.403376080e-06f, 1.404417958e-06f, 1.405457233e-06f, 1.406493905e-06f, 1.407527971e-06f, 1.408559431e-06f, 1.409588283e-06f, 1.410614526e-06f,
+1.411638158e-06f, 1.412659178e-06f, 1.413677585e-06f, 1.414693378e-06f, 1.415706554e-06f, 1.416717113e-06f, 1.417725053e-06f, 1.418730373e-06f, 1.419733071e-06f, 1.420733147e-06f,
+1.421730599e-06f, 1.422725426e-06f, 1.423717626e-06f, 1.424707198e-06f, 1.425694141e-06f, 1.426678453e-06f, 1.427660133e-06f, 1.428639180e-06f, 1.429615593e-06f, 1.430589371e-06f,
+1.431560511e-06f, 1.432529013e-06f, 1.433494876e-06f, 1.434458097e-06f, 1.435418677e-06f, 1.436376614e-06f, 1.437331906e-06f, 1.438284553e-06f, 1.439234552e-06f, 1.440181904e-06f,
+1.441126606e-06f, 1.442068657e-06f, 1.443008057e-06f, 1.443944803e-06f, 1.444878896e-06f, 1.445810333e-06f, 1.446739113e-06f, 1.447665236e-06f, 1.448588699e-06f, 1.449509503e-06f,
+1.450427645e-06f, 1.451343124e-06f, 1.452255940e-06f, 1.453166091e-06f, 1.454073576e-06f, 1.454978394e-06f, 1.455880543e-06f, 1.456780023e-06f, 1.457676833e-06f, 1.458570971e-06f,
+1.459462436e-06f, 1.460351227e-06f, 1.461237343e-06f, 1.462120782e-06f, 1.463001545e-06f, 1.463879629e-06f, 1.464755034e-06f, 1.465627758e-06f, 1.466497800e-06f, 1.467365160e-06f,
+1.468229836e-06f, 1.469091827e-06f, 1.469951132e-06f, 1.470807750e-06f, 1.471661679e-06f, 1.472512920e-06f, 1.473361471e-06f, 1.474207330e-06f, 1.475050497e-06f, 1.475890971e-06f,
+1.476728750e-06f, 1.477563834e-06f, 1.478396221e-06f, 1.479225912e-06f, 1.480052903e-06f, 1.480877196e-06f, 1.481698788e-06f, 1.482517678e-06f, 1.483333866e-06f, 1.484147351e-06f,
+1.484958131e-06f, 1.485766206e-06f, 1.486571575e-06f, 1.487374237e-06f, 1.488174190e-06f, 1.488971434e-06f, 1.489765967e-06f, 1.490557790e-06f, 1.491346901e-06f, 1.492133298e-06f,
+1.492916982e-06f, 1.493697951e-06f, 1.494476204e-06f, 1.495251741e-06f, 1.496024560e-06f, 1.496794660e-06f, 1.497562041e-06f, 1.498326701e-06f, 1.499088641e-06f, 1.499847858e-06f,
+1.500604353e-06f, 1.501358123e-06f, 1.502109169e-06f, 1.502857489e-06f, 1.503603083e-06f, 1.504345949e-06f, 1.505086087e-06f, 1.505823497e-06f, 1.506558176e-06f, 1.507290125e-06f,
+1.508019342e-06f, 1.508745826e-06f, 1.509469578e-06f, 1.510190595e-06f, 1.510908878e-06f, 1.511624425e-06f, 1.512337236e-06f, 1.513047309e-06f, 1.513754644e-06f, 1.514459241e-06f,
+1.515161098e-06f, 1.515860214e-06f, 1.516556589e-06f, 1.517250222e-06f, 1.517941113e-06f, 1.518629260e-06f, 1.519314663e-06f, 1.519997321e-06f, 1.520677233e-06f, 1.521354398e-06f,
+1.522028817e-06f, 1.522700487e-06f, 1.523369409e-06f, 1.524035581e-06f, 1.524699003e-06f, 1.525359675e-06f, 1.526017595e-06f, 1.526672762e-06f, 1.527325177e-06f, 1.527974838e-06f,
+1.528621745e-06f, 1.529265896e-06f, 1.529907292e-06f, 1.530545932e-06f, 1.531181814e-06f, 1.531814939e-06f, 1.532445306e-06f, 1.533072914e-06f, 1.533697761e-06f, 1.534319849e-06f,
+1.534939176e-06f, 1.535555741e-06f, 1.536169544e-06f, 1.536780584e-06f, 1.537388861e-06f, 1.537994373e-06f, 1.538597121e-06f, 1.539197104e-06f, 1.539794320e-06f, 1.540388771e-06f,
+1.540980454e-06f, 1.541569370e-06f, 1.542155517e-06f, 1.542738895e-06f, 1.543319505e-06f, 1.543897344e-06f, 1.544472413e-06f, 1.545044710e-06f, 1.545614236e-06f, 1.546180990e-06f,
+1.546744971e-06f, 1.547306179e-06f, 1.547864614e-06f, 1.548420274e-06f, 1.548973159e-06f, 1.549523269e-06f, 1.550070602e-06f, 1.550615160e-06f, 1.551156941e-06f, 1.551695944e-06f,
+1.552232170e-06f, 1.552765617e-06f, 1.553296286e-06f, 1.553824175e-06f, 1.554349284e-06f, 1.554871613e-06f, 1.555391162e-06f, 1.555907929e-06f, 1.556421915e-06f, 1.556933119e-06f,
+1.557441540e-06f, 1.557947178e-06f, 1.558450033e-06f, 1.558950104e-06f, 1.559447391e-06f, 1.559941893e-06f, 1.560433611e-06f, 1.560922542e-06f, 1.561408688e-06f, 1.561892048e-06f,
+1.562372621e-06f, 1.562850407e-06f, 1.563325405e-06f, 1.563797616e-06f, 1.564267039e-06f, 1.564733673e-06f, 1.565197518e-06f, 1.565658574e-06f, 1.566116840e-06f, 1.566572316e-06f,
+1.567025002e-06f, 1.567474897e-06f, 1.567922002e-06f, 1.568366315e-06f, 1.568807836e-06f, 1.569246565e-06f, 1.569682502e-06f, 1.570115647e-06f, 1.570545998e-06f, 1.570973556e-06f,
+1.571398321e-06f, 1.571820292e-06f, 1.572239469e-06f, 1.572655852e-06f, 1.573069440e-06f, 1.573480233e-06f, 1.573888230e-06f, 1.574293433e-06f, 1.574695840e-06f, 1.575095450e-06f,
+1.575492265e-06f, 1.575886283e-06f, 1.576277505e-06f, 1.576665929e-06f, 1.577051557e-06f, 1.577434387e-06f, 1.577814419e-06f, 1.578191654e-06f, 1.578566091e-06f, 1.578937729e-06f,
+1.579306569e-06f, 1.579672611e-06f, 1.580035854e-06f, 1.580396298e-06f, 1.580753942e-06f, 1.581108788e-06f, 1.581460834e-06f, 1.581810080e-06f, 1.582156527e-06f, 1.582500173e-06f,
+1.582841020e-06f, 1.583179066e-06f, 1.583514312e-06f, 1.583846757e-06f, 1.584176402e-06f, 1.584503245e-06f, 1.584827288e-06f, 1.585148530e-06f, 1.585466971e-06f, 1.585782611e-06f,
+1.586095449e-06f, 1.586405486e-06f, 1.586712722e-06f, 1.587017155e-06f, 1.587318787e-06f, 1.587617618e-06f, 1.587913646e-06f, 1.588206873e-06f, 1.588497298e-06f, 1.588784921e-06f,
+1.589069741e-06f, 1.589351760e-06f, 1.589630976e-06f, 1.589907390e-06f, 1.590181002e-06f, 1.590451812e-06f, 1.590719820e-06f, 1.590985025e-06f, 1.591247428e-06f, 1.591507029e-06f,
+1.591763827e-06f, 1.592017823e-06f, 1.592269017e-06f, 1.592517409e-06f, 1.592762998e-06f, 1.593005785e-06f, 1.593245770e-06f, 1.593482952e-06f, 1.593717333e-06f, 1.593948911e-06f,
+1.594177688e-06f, 1.594403662e-06f, 1.594626834e-06f, 1.594847205e-06f, 1.595064773e-06f, 1.595279540e-06f, 1.595491506e-06f, 1.595700669e-06f, 1.595907031e-06f, 1.596110592e-06f,
+1.596311352e-06f, 1.596509310e-06f, 1.596704467e-06f, 1.596896823e-06f, 1.597086378e-06f, 1.597273132e-06f, 1.597457086e-06f, 1.597638239e-06f, 1.597816592e-06f, 1.597992145e-06f,
+1.598164897e-06f, 1.598334849e-06f, 1.598502002e-06f, 1.598666355e-06f, 1.598827909e-06f, 1.598986663e-06f, 1.599142618e-06f, 1.599295774e-06f, 1.599446131e-06f, 1.599593690e-06f,
+1.599738450e-06f, 1.599880412e-06f, 1.600019576e-06f, 1.600155942e-06f, 1.600289511e-06f, 1.600420282e-06f, 1.600548256e-06f, 1.600673434e-06f, 1.600795814e-06f, 1.600915398e-06f,
+1.601032186e-06f, 1.601146177e-06f, 1.601257373e-06f, 1.601365774e-06f, 1.601471379e-06f, 1.601574190e-06f, 1.601674205e-06f, 1.601771427e-06f, 1.601865854e-06f, 1.601957487e-06f,
+1.602046327e-06f, 1.602132373e-06f, 1.602215627e-06f, 1.602296088e-06f, 1.602373756e-06f, 1.602448632e-06f, 1.602520717e-06f, 1.602590010e-06f, 1.602656512e-06f, 1.602720224e-06f,
+1.602781145e-06f, 1.602839276e-06f, 1.602894617e-06f, 1.602947169e-06f, 1.602996932e-06f, 1.603043906e-06f, 1.603088091e-06f, 1.603129489e-06f, 1.603168100e-06f, 1.603203923e-06f,
+1.603236959e-06f, 1.603267209e-06f, 1.603294673e-06f, 1.603319351e-06f, 1.603341245e-06f, 1.603360353e-06f, 1.603376677e-06f, 1.603390217e-06f, 1.603400973e-06f, 1.603408947e-06f,
+1.603414137e-06f, 1.603416546e-06f, 1.603416172e-06f, 1.603413017e-06f, 1.603407082e-06f, 1.603398365e-06f, 1.603386869e-06f, 1.603372594e-06f, 1.603355539e-06f, 1.603335705e-06f,
+1.603313094e-06f, 1.603287705e-06f, 1.603259539e-06f, 1.603228596e-06f, 1.603194877e-06f, 1.603158382e-06f, 1.603119112e-06f, 1.603077068e-06f, 1.603032250e-06f, 1.602984658e-06f,
+1.602934292e-06f, 1.602881155e-06f, 1.602825245e-06f, 1.602766564e-06f, 1.602705112e-06f, 1.602640890e-06f, 1.602573898e-06f, 1.602504137e-06f, 1.602431607e-06f, 1.602356308e-06f,
+1.602278243e-06f, 1.602197410e-06f, 1.602113811e-06f, 1.602027447e-06f, 1.601938317e-06f, 1.601846423e-06f, 1.601751764e-06f, 1.601654342e-06f, 1.601554158e-06f, 1.601451211e-06f,
+1.601345503e-06f, 1.601237034e-06f, 1.601125805e-06f, 1.601011816e-06f, 1.600895068e-06f, 1.600775562e-06f, 1.600653298e-06f, 1.600528277e-06f, 1.600400499e-06f, 1.600269966e-06f,
+1.600136678e-06f, 1.600000635e-06f, 1.599861839e-06f, 1.599720290e-06f, 1.599575988e-06f, 1.599428935e-06f, 1.599279131e-06f, 1.599126577e-06f, 1.598971273e-06f, 1.598813220e-06f,
+1.598652419e-06f, 1.598488871e-06f, 1.598322576e-06f, 1.598153535e-06f, 1.597981749e-06f, 1.597807219e-06f, 1.597629945e-06f, 1.597449928e-06f, 1.597267168e-06f, 1.597081667e-06f,
+1.596893426e-06f, 1.596702444e-06f, 1.596508724e-06f, 1.596312265e-06f, 1.596113068e-06f, 1.595911135e-06f, 1.595706465e-06f, 1.595499060e-06f, 1.595288921e-06f, 1.595076049e-06f,
+1.594860443e-06f, 1.594642105e-06f, 1.594421036e-06f, 1.594197237e-06f, 1.593970708e-06f, 1.593741451e-06f, 1.593509466e-06f, 1.593274753e-06f, 1.593037315e-06f, 1.592797151e-06f,
+1.592554262e-06f, 1.592308650e-06f, 1.592060315e-06f, 1.591809258e-06f, 1.591555481e-06f, 1.591298983e-06f, 1.591039765e-06f, 1.590777830e-06f, 1.590513177e-06f, 1.590245807e-06f,
+1.589975721e-06f, 1.589702921e-06f, 1.589427407e-06f, 1.589149180e-06f, 1.588868241e-06f, 1.588584591e-06f, 1.588298230e-06f, 1.588009160e-06f, 1.587717382e-06f, 1.587422897e-06f,
+1.587125705e-06f, 1.586825807e-06f, 1.586523205e-06f, 1.586217900e-06f, 1.585909891e-06f, 1.585599182e-06f, 1.585285771e-06f, 1.584969661e-06f, 1.584650852e-06f, 1.584329345e-06f,
+1.584005142e-06f, 1.583678242e-06f, 1.583348648e-06f, 1.583016361e-06f, 1.582681380e-06f, 1.582343708e-06f, 1.582003345e-06f, 1.581660293e-06f, 1.581314551e-06f, 1.580966122e-06f,
+1.580615007e-06f, 1.580261206e-06f, 1.579904721e-06f, 1.579545552e-06f, 1.579183700e-06f, 1.578819168e-06f, 1.578451955e-06f, 1.578082063e-06f, 1.577709492e-06f, 1.577334245e-06f,
+1.576956322e-06f, 1.576575724e-06f, 1.576192452e-06f, 1.575806507e-06f, 1.575417890e-06f, 1.575026604e-06f, 1.574632647e-06f, 1.574236023e-06f, 1.573836731e-06f, 1.573434774e-06f,
+1.573030151e-06f, 1.572622864e-06f, 1.572212915e-06f, 1.571800305e-06f, 1.571385034e-06f, 1.570967104e-06f, 1.570546515e-06f, 1.570123270e-06f, 1.569697369e-06f, 1.569268814e-06f,
+1.568837605e-06f, 1.568403744e-06f, 1.567967231e-06f, 1.567528069e-06f, 1.567086258e-06f, 1.566641800e-06f, 1.566194695e-06f, 1.565744946e-06f, 1.565292552e-06f, 1.564837516e-06f,
+1.564379838e-06f, 1.563919520e-06f, 1.563456563e-06f, 1.562990968e-06f, 1.562522737e-06f, 1.562051870e-06f, 1.561578369e-06f, 1.561102235e-06f, 1.560623470e-06f, 1.560142074e-06f,
+1.559658050e-06f, 1.559171397e-06f, 1.558682118e-06f, 1.558190214e-06f, 1.557695685e-06f, 1.557198534e-06f, 1.556698761e-06f, 1.556196369e-06f, 1.555691357e-06f, 1.555183728e-06f,
+1.554673482e-06f, 1.554160622e-06f, 1.553645148e-06f, 1.553127062e-06f, 1.552606364e-06f, 1.552083057e-06f, 1.551557142e-06f, 1.551028619e-06f, 1.550497491e-06f, 1.549963758e-06f,
+1.549427423e-06f, 1.548888486e-06f, 1.548346948e-06f, 1.547802812e-06f, 1.547256078e-06f, 1.546706747e-06f, 1.546154822e-06f, 1.545600304e-06f, 1.545043193e-06f, 1.544483492e-06f,
+1.543921201e-06f, 1.543356322e-06f, 1.542788857e-06f, 1.542218807e-06f, 1.541646173e-06f, 1.541070956e-06f, 1.540493159e-06f, 1.539912782e-06f, 1.539329827e-06f, 1.538744296e-06f,
+1.538156189e-06f, 1.537565509e-06f, 1.536972256e-06f, 1.536376432e-06f, 1.535778039e-06f, 1.535177078e-06f, 1.534573551e-06f, 1.533967458e-06f, 1.533358802e-06f, 1.532747583e-06f,
+1.532133804e-06f, 1.531517466e-06f, 1.530898570e-06f, 1.530277117e-06f, 1.529653110e-06f, 1.529026550e-06f, 1.528397438e-06f, 1.527765776e-06f, 1.527131565e-06f, 1.526494807e-06f,
+1.525855503e-06f, 1.525213655e-06f, 1.524569264e-06f, 1.523922332e-06f, 1.523272861e-06f, 1.522620851e-06f, 1.521966305e-06f, 1.521309224e-06f, 1.520649610e-06f, 1.519987463e-06f,
+1.519322787e-06f, 1.518655581e-06f, 1.517985848e-06f, 1.517313590e-06f, 1.516638808e-06f, 1.515961503e-06f, 1.515281677e-06f, 1.514599332e-06f, 1.513914469e-06f, 1.513227090e-06f,
+1.512537197e-06f, 1.511844791e-06f, 1.511149873e-06f, 1.510452445e-06f, 1.509752510e-06f, 1.509050068e-06f, 1.508345121e-06f, 1.507637671e-06f, 1.506927719e-06f, 1.506215268e-06f,
+1.505500318e-06f, 1.504782871e-06f, 1.504062929e-06f, 1.503340494e-06f, 1.502615567e-06f, 1.501888150e-06f, 1.501158245e-06f, 1.500425853e-06f, 1.499690976e-06f, 1.498953615e-06f,
+1.498213773e-06f, 1.497471451e-06f, 1.496726650e-06f, 1.495979373e-06f, 1.495229621e-06f, 1.494477395e-06f, 1.493722698e-06f, 1.492965531e-06f, 1.492205896e-06f, 1.491443795e-06f,
+1.490679229e-06f, 1.489912200e-06f, 1.489142709e-06f, 1.488370759e-06f, 1.487596352e-06f, 1.486819488e-06f, 1.486040170e-06f, 1.485258400e-06f, 1.484474178e-06f, 1.483687508e-06f,
+1.482898390e-06f, 1.482106827e-06f, 1.481312820e-06f, 1.480516372e-06f, 1.479717483e-06f, 1.478916155e-06f, 1.478112391e-06f, 1.477306192e-06f, 1.476497560e-06f, 1.475686497e-06f,
+1.474873004e-06f, 1.474057084e-06f, 1.473238737e-06f, 1.472417967e-06f, 1.471594775e-06f, 1.470769162e-06f, 1.469941130e-06f, 1.469110682e-06f, 1.468277819e-06f, 1.467442543e-06f,
+1.466604855e-06f, 1.465764758e-06f, 1.464922254e-06f, 1.464077344e-06f, 1.463230030e-06f, 1.462380314e-06f, 1.461528198e-06f, 1.460673683e-06f, 1.459816772e-06f, 1.458957467e-06f,
+1.458095769e-06f, 1.457231680e-06f, 1.456365202e-06f, 1.455496338e-06f, 1.454625088e-06f, 1.453751455e-06f, 1.452875441e-06f, 1.451997047e-06f, 1.451116276e-06f, 1.450233129e-06f,
+1.449347609e-06f, 1.448459716e-06f, 1.447569454e-06f, 1.446676825e-06f, 1.445781829e-06f, 1.444884469e-06f, 1.443984747e-06f, 1.443082665e-06f, 1.442178224e-06f, 1.441271428e-06f,
+1.440362277e-06f, 1.439450774e-06f, 1.438536920e-06f, 1.437620718e-06f, 1.436702170e-06f, 1.435781277e-06f, 1.434858041e-06f, 1.433932465e-06f, 1.433004551e-06f, 1.432074300e-06f,
+1.431141714e-06f, 1.430206796e-06f, 1.429269547e-06f, 1.428329970e-06f, 1.427388066e-06f, 1.426443838e-06f, 1.425497287e-06f, 1.424548416e-06f, 1.423597226e-06f, 1.422643719e-06f,
+1.421687899e-06f, 1.420729765e-06f, 1.419769322e-06f, 1.418806570e-06f, 1.417841512e-06f, 1.416874150e-06f, 1.415904485e-06f, 1.414932520e-06f, 1.413958257e-06f, 1.412981699e-06f,
+1.412002846e-06f, 1.411021701e-06f, 1.410038267e-06f, 1.409052545e-06f, 1.408064537e-06f, 1.407074246e-06f, 1.406081673e-06f, 1.405086821e-06f, 1.404089691e-06f, 1.403090286e-06f,
+1.402088609e-06f, 1.401084660e-06f, 1.400078442e-06f, 1.399069958e-06f, 1.398059209e-06f, 1.397046197e-06f, 1.396030925e-06f, 1.395013395e-06f, 1.393993608e-06f, 1.392971568e-06f,
+1.391947276e-06f, 1.390920734e-06f, 1.389891944e-06f, 1.388860909e-06f, 1.387827630e-06f, 1.386792111e-06f, 1.385754352e-06f, 1.384714357e-06f, 1.383672127e-06f, 1.382627665e-06f,
+1.381580972e-06f, 1.380532051e-06f, 1.379480905e-06f, 1.378427534e-06f, 1.377371942e-06f, 1.376314130e-06f, 1.375254102e-06f, 1.374191858e-06f, 1.373127401e-06f, 1.372060734e-06f,
+1.370991859e-06f, 1.369920777e-06f, 1.368847492e-06f, 1.367772005e-06f, 1.366694318e-06f, 1.365614434e-06f, 1.364532355e-06f, 1.363448083e-06f, 1.362361620e-06f, 1.361272969e-06f,
+1.360182132e-06f, 1.359089111e-06f, 1.357993909e-06f, 1.356896527e-06f, 1.355796968e-06f, 1.354695234e-06f, 1.353591328e-06f, 1.352485252e-06f, 1.351377007e-06f, 1.350266597e-06f,
+1.349154023e-06f, 1.348039288e-06f, 1.346922394e-06f, 1.345803343e-06f, 1.344682138e-06f, 1.343558781e-06f, 1.342433274e-06f, 1.341305620e-06f, 1.340175820e-06f, 1.339043878e-06f,
+1.337909795e-06f, 1.336773575e-06f, 1.335635218e-06f, 1.334494727e-06f, 1.333352106e-06f, 1.332207355e-06f, 1.331060478e-06f, 1.329911476e-06f, 1.328760353e-06f, 1.327607110e-06f,
+1.326451750e-06f, 1.325294275e-06f, 1.324134687e-06f, 1.322972989e-06f, 1.321809184e-06f, 1.320643273e-06f, 1.319475259e-06f, 1.318305144e-06f, 1.317132930e-06f, 1.315958621e-06f,
+1.314782218e-06f, 1.313603724e-06f, 1.312423141e-06f, 1.311240472e-06f, 1.310055718e-06f, 1.308868883e-06f, 1.307679969e-06f, 1.306488977e-06f, 1.305295912e-06f, 1.304100774e-06f,
+1.302903566e-06f, 1.301704292e-06f, 1.300502952e-06f, 1.299299550e-06f, 1.298094088e-06f, 1.296886568e-06f, 1.295676994e-06f, 1.294465366e-06f, 1.293251688e-06f, 1.292035963e-06f,
+1.290818192e-06f, 1.289598378e-06f, 1.288376524e-06f, 1.287152631e-06f, 1.285926703e-06f, 1.284698742e-06f, 1.283468750e-06f, 1.282236730e-06f, 1.281002685e-06f, 1.279766616e-06f,
+1.278528526e-06f, 1.277288417e-06f, 1.276046293e-06f, 1.274802156e-06f, 1.273556008e-06f, 1.272307851e-06f, 1.271057688e-06f, 1.269805522e-06f, 1.268551355e-06f, 1.267295190e-06f,
+1.266037029e-06f, 1.264776874e-06f, 1.263514729e-06f, 1.262250595e-06f, 1.260984475e-06f, 1.259716372e-06f, 1.258446288e-06f, 1.257174225e-06f, 1.255900187e-06f, 1.254624176e-06f,
+1.253346194e-06f, 1.252066244e-06f, 1.250784328e-06f, 1.249500450e-06f, 1.248214610e-06f, 1.246926813e-06f, 1.245637060e-06f, 1.244345354e-06f, 1.243051698e-06f, 1.241756095e-06f,
+1.240458546e-06f, 1.239159054e-06f, 1.237857622e-06f, 1.236554253e-06f, 1.235248949e-06f, 1.233941713e-06f, 1.232632547e-06f, 1.231321453e-06f, 1.230008435e-06f, 1.228693496e-06f,
+1.227376636e-06f, 1.226057860e-06f, 1.224737170e-06f, 1.223414568e-06f, 1.222090057e-06f, 1.220763640e-06f, 1.219435319e-06f, 1.218105097e-06f, 1.216772976e-06f, 1.215438959e-06f,
+1.214103050e-06f, 1.212765249e-06f, 1.211425560e-06f, 1.210083986e-06f, 1.208740529e-06f, 1.207395192e-06f, 1.206047978e-06f, 1.204698889e-06f, 1.203347927e-06f, 1.201995096e-06f,
+1.200640398e-06f, 1.199283836e-06f, 1.197925412e-06f, 1.196565129e-06f, 1.195202990e-06f, 1.193838997e-06f, 1.192473153e-06f, 1.191105461e-06f, 1.189735923e-06f, 1.188364543e-06f,
+1.186991322e-06f, 1.185616264e-06f, 1.184239370e-06f, 1.182860645e-06f, 1.181480090e-06f, 1.180097708e-06f, 1.178713502e-06f, 1.177327475e-06f, 1.175939629e-06f, 1.174549967e-06f,
+1.173158491e-06f, 1.171765206e-06f, 1.170370112e-06f, 1.168973213e-06f, 1.167574511e-06f, 1.166174010e-06f, 1.164771711e-06f, 1.163367619e-06f, 1.161961735e-06f, 1.160554062e-06f,
+1.159144603e-06f, 1.157733360e-06f, 1.156320337e-06f, 1.154905536e-06f, 1.153488960e-06f, 1.152070612e-06f, 1.150650494e-06f, 1.149228609e-06f, 1.147804959e-06f, 1.146379549e-06f,
+1.144952380e-06f, 1.143523455e-06f, 1.142092777e-06f, 1.140660348e-06f, 1.139226172e-06f, 1.137790251e-06f, 1.136352589e-06f, 1.134913187e-06f, 1.133472048e-06f, 1.132029176e-06f,
+1.130584573e-06f, 1.129138242e-06f, 1.127690186e-06f, 1.126240407e-06f, 1.124788908e-06f, 1.123335693e-06f, 1.121880763e-06f, 1.120424122e-06f, 1.118965772e-06f, 1.117505717e-06f,
+1.116043959e-06f, 1.114580501e-06f, 1.113115346e-06f, 1.111648496e-06f, 1.110179954e-06f, 1.108709724e-06f, 1.107237808e-06f, 1.105764209e-06f, 1.104288929e-06f, 1.102811972e-06f,
+1.101333340e-06f, 1.099853037e-06f, 1.098371064e-06f, 1.096887426e-06f, 1.095402124e-06f, 1.093915161e-06f, 1.092426541e-06f, 1.090936267e-06f, 1.089444340e-06f, 1.087950765e-06f,
+1.086455543e-06f, 1.084958678e-06f, 1.083460173e-06f, 1.081960030e-06f, 1.080458253e-06f, 1.078954843e-06f, 1.077449805e-06f, 1.075943141e-06f, 1.074434853e-06f, 1.072924945e-06f,
+1.071413420e-06f, 1.069900280e-06f, 1.068385529e-06f, 1.066869169e-06f, 1.065351203e-06f, 1.063831634e-06f, 1.062310465e-06f, 1.060787698e-06f, 1.059263338e-06f, 1.057737386e-06f,
+1.056209846e-06f, 1.054680720e-06f, 1.053150012e-06f, 1.051617724e-06f, 1.050083859e-06f, 1.048548420e-06f, 1.047011410e-06f, 1.045472832e-06f, 1.043932690e-06f, 1.042390984e-06f,
+1.040847720e-06f, 1.039302900e-06f, 1.037756526e-06f, 1.036208601e-06f, 1.034659129e-06f, 1.033108113e-06f, 1.031555554e-06f, 1.030001458e-06f, 1.028445825e-06f, 1.026888660e-06f,
+1.025329964e-06f, 1.023769742e-06f, 1.022207996e-06f, 1.020644729e-06f, 1.019079945e-06f, 1.017513645e-06f, 1.015945833e-06f, 1.014376511e-06f, 1.012805684e-06f, 1.011233354e-06f,
+1.009659523e-06f, 1.008084195e-06f, 1.006507373e-06f, 1.004929060e-06f, 1.003349258e-06f, 1.001767971e-06f, 1.000185202e-06f, 9.986009534e-07f, 9.970152286e-07f, 9.954280304e-07f,
+9.938393618e-07f, 9.922492260e-07f, 9.906576258e-07f, 9.890645642e-07f, 9.874700443e-07f, 9.858740690e-07f, 9.842766415e-07f, 9.826777646e-07f, 9.810774414e-07f, 9.794756749e-07f,
+9.778724681e-07f, 9.762678241e-07f, 9.746617458e-07f, 9.730542363e-07f, 9.714452986e-07f, 9.698349358e-07f, 9.682231507e-07f, 9.666099466e-07f, 9.649953264e-07f, 9.633792931e-07f,
+9.617618498e-07f, 9.601429995e-07f, 9.585227453e-07f, 9.569010901e-07f, 9.552780371e-07f, 9.536535893e-07f, 9.520277497e-07f, 9.504005214e-07f, 9.487719075e-07f, 9.471419109e-07f,
+9.455105348e-07f, 9.438777821e-07f, 9.422436560e-07f, 9.406081595e-07f, 9.389712957e-07f, 9.373330676e-07f, 9.356934783e-07f, 9.340525309e-07f, 9.324102285e-07f, 9.307665740e-07f,
+9.291215706e-07f, 9.274752214e-07f, 9.258275294e-07f, 9.241784978e-07f, 9.225281295e-07f, 9.208764277e-07f, 9.192233955e-07f, 9.175690359e-07f, 9.159133521e-07f, 9.142563471e-07f,
+9.125980240e-07f, 9.109383859e-07f, 9.092774359e-07f, 9.076151771e-07f, 9.059516126e-07f, 9.042867456e-07f, 9.026205790e-07f, 9.009531160e-07f, 8.992843597e-07f, 8.976143133e-07f,
+8.959429798e-07f, 8.942703623e-07f, 8.925964640e-07f, 8.909212879e-07f, 8.892448373e-07f, 8.875671151e-07f, 8.858881245e-07f, 8.842078687e-07f, 8.825263507e-07f, 8.808435738e-07f,
+8.791595409e-07f, 8.774742553e-07f, 8.757877201e-07f, 8.740999383e-07f, 8.724109132e-07f, 8.707206479e-07f, 8.690291454e-07f, 8.673364090e-07f, 8.656424418e-07f, 8.639472469e-07f,
+8.622508275e-07f, 8.605531867e-07f, 8.588543277e-07f, 8.571542535e-07f, 8.554529674e-07f, 8.537504725e-07f, 8.520467720e-07f, 8.503418690e-07f, 8.486357666e-07f, 8.469284681e-07f,
+8.452199765e-07f, 8.435102951e-07f, 8.417994270e-07f, 8.400873754e-07f, 8.383741433e-07f, 8.366597341e-07f, 8.349441509e-07f, 8.332273968e-07f, 8.315094750e-07f, 8.297903886e-07f,
+8.280701410e-07f, 8.263487351e-07f, 8.246261743e-07f, 8.229024616e-07f, 8.211776003e-07f, 8.194515936e-07f, 8.177244445e-07f, 8.159961564e-07f, 8.142667324e-07f, 8.125361757e-07f,
+8.108044894e-07f, 8.090716769e-07f, 8.073377411e-07f, 8.056026855e-07f, 8.038665130e-07f, 8.021292270e-07f, 8.003908307e-07f, 7.986513272e-07f, 7.969107197e-07f, 7.951690114e-07f,
+7.934262056e-07f, 7.916823055e-07f, 7.899373142e-07f, 7.881912349e-07f, 7.864440710e-07f, 7.846958255e-07f, 7.829465017e-07f, 7.811961028e-07f, 7.794446320e-07f, 7.776920925e-07f,
+7.759384876e-07f, 7.741838205e-07f, 7.724280943e-07f, 7.706713124e-07f, 7.689134778e-07f, 7.671545940e-07f, 7.653946640e-07f, 7.636336911e-07f, 7.618716785e-07f, 7.601086295e-07f,
+7.583445473e-07f, 7.565794351e-07f, 7.548132961e-07f, 7.530461336e-07f, 7.512779509e-07f, 7.495087511e-07f, 7.477385375e-07f, 7.459673133e-07f, 7.441950818e-07f, 7.424218462e-07f,
+7.406476098e-07f, 7.388723758e-07f, 7.370961474e-07f, 7.353189279e-07f, 7.335407205e-07f, 7.317615285e-07f, 7.299813551e-07f, 7.282002037e-07f, 7.264180773e-07f, 7.246349794e-07f,
+7.228509131e-07f, 7.210658817e-07f, 7.192798884e-07f, 7.174929366e-07f, 7.157050294e-07f, 7.139161701e-07f, 7.121263621e-07f, 7.103356085e-07f, 7.085439126e-07f, 7.067512777e-07f,
+7.049577070e-07f, 7.031632039e-07f, 7.013677715e-07f, 6.995714132e-07f, 6.977741322e-07f, 6.959759318e-07f, 6.941768153e-07f, 6.923767859e-07f, 6.905758469e-07f, 6.887740016e-07f,
+6.869712532e-07f, 6.851676051e-07f, 6.833630605e-07f, 6.815576227e-07f, 6.797512950e-07f, 6.779440806e-07f, 6.761359829e-07f, 6.743270051e-07f, 6.725171505e-07f, 6.707064224e-07f,
+6.688948240e-07f, 6.670823588e-07f, 6.652690298e-07f, 6.634548406e-07f, 6.616397942e-07f, 6.598238941e-07f, 6.580071435e-07f, 6.561895458e-07f, 6.543711041e-07f, 6.525518218e-07f,
+6.507317022e-07f, 6.489107486e-07f, 6.470889643e-07f, 6.452663526e-07f, 6.434429168e-07f, 6.416186601e-07f, 6.397935860e-07f, 6.379676976e-07f, 6.361409983e-07f, 6.343134915e-07f,
+6.324851803e-07f, 6.306560681e-07f, 6.288261583e-07f, 6.269954541e-07f, 6.251639588e-07f, 6.233316757e-07f, 6.214986082e-07f, 6.196647596e-07f, 6.178301331e-07f, 6.159947322e-07f,
+6.141585600e-07f, 6.123216199e-07f, 6.104839153e-07f, 6.086454494e-07f, 6.068062255e-07f, 6.049662470e-07f, 6.031255173e-07f, 6.012840395e-07f, 5.994418171e-07f, 5.975988533e-07f,
+5.957551515e-07f, 5.939107150e-07f, 5.920655471e-07f, 5.902196511e-07f, 5.883730305e-07f, 5.865256884e-07f, 5.846776282e-07f, 5.828288532e-07f, 5.809793669e-07f, 5.791291724e-07f,
+5.772782731e-07f, 5.754266724e-07f, 5.735743736e-07f, 5.717213800e-07f, 5.698676949e-07f, 5.680133217e-07f, 5.661582638e-07f, 5.643025243e-07f, 5.624461067e-07f, 5.605890144e-07f,
+5.587312505e-07f, 5.568728186e-07f, 5.550137218e-07f, 5.531539637e-07f, 5.512935474e-07f, 5.494324763e-07f, 5.475707538e-07f, 5.457083832e-07f, 5.438453678e-07f, 5.419817110e-07f,
+5.401174162e-07f, 5.382524866e-07f, 5.363869256e-07f, 5.345207365e-07f, 5.326539228e-07f, 5.307864877e-07f, 5.289184345e-07f, 5.270497667e-07f, 5.251804876e-07f, 5.233106005e-07f,
+5.214401087e-07f, 5.195690156e-07f, 5.176973246e-07f, 5.158250390e-07f, 5.139521622e-07f, 5.120786974e-07f, 5.102046481e-07f, 5.083300176e-07f, 5.064548093e-07f, 5.045790264e-07f,
+5.027026724e-07f, 5.008257506e-07f, 4.989482644e-07f, 4.970702171e-07f, 4.951916120e-07f, 4.933124525e-07f, 4.914327420e-07f, 4.895524838e-07f, 4.876716813e-07f, 4.857903378e-07f,
+4.839084567e-07f, 4.820260414e-07f, 4.801430951e-07f, 4.782596213e-07f, 4.763756233e-07f, 4.744911045e-07f, 4.726060682e-07f, 4.707205178e-07f, 4.688344566e-07f, 4.669478880e-07f,
+4.650608154e-07f, 4.631732421e-07f, 4.612851715e-07f, 4.593966069e-07f, 4.575075517e-07f, 4.556180092e-07f, 4.537279829e-07f, 4.518374761e-07f, 4.499464921e-07f, 4.480550343e-07f,
+4.461631060e-07f, 4.442707107e-07f, 4.423778517e-07f, 4.404845324e-07f, 4.385907560e-07f, 4.366965260e-07f, 4.348018458e-07f, 4.329067187e-07f, 4.310111480e-07f, 4.291151372e-07f,
+4.272186896e-07f, 4.253218085e-07f, 4.234244974e-07f, 4.215267596e-07f, 4.196285984e-07f, 4.177300172e-07f, 4.158310195e-07f, 4.139316085e-07f, 4.120317876e-07f, 4.101315602e-07f,
+4.082309296e-07f, 4.063298993e-07f, 4.044284726e-07f, 4.025266528e-07f, 4.006244433e-07f, 3.987218475e-07f, 3.968188688e-07f, 3.949155105e-07f, 3.930117760e-07f, 3.911076687e-07f,
+3.892031918e-07f, 3.872983489e-07f, 3.853931432e-07f, 3.834875782e-07f, 3.815816571e-07f, 3.796753834e-07f, 3.777687605e-07f, 3.758617916e-07f, 3.739544802e-07f, 3.720468297e-07f,
+3.701388433e-07f, 3.682305246e-07f, 3.663218767e-07f, 3.644129032e-07f, 3.625036074e-07f, 3.605939926e-07f, 3.586840622e-07f, 3.567738196e-07f, 3.548632682e-07f, 3.529524113e-07f,
+3.510412522e-07f, 3.491297945e-07f, 3.472180413e-07f, 3.453059962e-07f, 3.433936624e-07f, 3.414810433e-07f, 3.395681424e-07f, 3.376549629e-07f, 3.357415083e-07f, 3.338277818e-07f,
+3.319137869e-07f, 3.299995270e-07f, 3.280850054e-07f, 3.261702254e-07f, 3.242551905e-07f, 3.223399040e-07f, 3.204243693e-07f, 3.185085897e-07f, 3.165925687e-07f, 3.146763095e-07f,
+3.127598156e-07f, 3.108430902e-07f, 3.089261369e-07f, 3.070089589e-07f, 3.050915596e-07f, 3.031739424e-07f, 3.012561107e-07f, 2.993380677e-07f, 2.974198169e-07f, 2.955013617e-07f,
+2.935827054e-07f, 2.916638513e-07f, 2.897448029e-07f, 2.878255635e-07f, 2.859061365e-07f, 2.839865251e-07f, 2.820667329e-07f, 2.801467632e-07f, 2.782266192e-07f, 2.763063045e-07f,
+2.743858223e-07f, 2.724651760e-07f, 2.705443689e-07f, 2.686234045e-07f, 2.667022862e-07f, 2.647810171e-07f, 2.628596008e-07f, 2.609380406e-07f, 2.590163398e-07f, 2.570945018e-07f,
+2.551725300e-07f, 2.532504277e-07f, 2.513281983e-07f, 2.494058451e-07f, 2.474833716e-07f, 2.455607810e-07f, 2.436380767e-07f, 2.417152621e-07f, 2.397923405e-07f, 2.378693153e-07f,
+2.359461898e-07f, 2.340229675e-07f, 2.320996516e-07f, 2.301762456e-07f, 2.282527527e-07f, 2.263291763e-07f, 2.244055199e-07f, 2.224817866e-07f, 2.205579800e-07f, 2.186341032e-07f,
+2.167101598e-07f, 2.147861531e-07f, 2.128620863e-07f, 2.109379629e-07f, 2.090137862e-07f, 2.070895595e-07f, 2.051652863e-07f, 2.032409697e-07f, 2.013166133e-07f, 1.993922204e-07f,
+1.974677943e-07f, 1.955433383e-07f, 1.936188557e-07f, 1.916943501e-07f, 1.897698246e-07f, 1.878452827e-07f, 1.859207276e-07f, 1.839961628e-07f, 1.820715915e-07f, 1.801470171e-07f,
+1.782224430e-07f, 1.762978725e-07f, 1.743733090e-07f, 1.724487557e-07f, 1.705242161e-07f, 1.685996934e-07f, 1.666751910e-07f, 1.647507122e-07f, 1.628262605e-07f, 1.609018390e-07f,
+1.589774513e-07f, 1.570531005e-07f, 1.551287900e-07f, 1.532045232e-07f, 1.512803034e-07f, 1.493561340e-07f, 1.474320182e-07f, 1.455079594e-07f, 1.435839610e-07f, 1.416600262e-07f,
+1.397361584e-07f, 1.378123610e-07f, 1.358886372e-07f, 1.339649904e-07f, 1.320414239e-07f, 1.301179411e-07f, 1.281945453e-07f, 1.262712397e-07f, 1.243480278e-07f, 1.224249128e-07f,
+1.205018981e-07f, 1.185789870e-07f, 1.166561828e-07f, 1.147334888e-07f, 1.128109085e-07f, 1.108884450e-07f, 1.089661017e-07f, 1.070438820e-07f, 1.051217890e-07f, 1.031998263e-07f,
+1.012779970e-07f, 9.935630456e-08f, 9.743475220e-08f, 9.551334327e-08f, 9.359208108e-08f, 9.167096894e-08f, 8.975001017e-08f, 8.782920808e-08f, 8.590856598e-08f, 8.398808717e-08f,
+8.206777497e-08f, 8.014763269e-08f, 7.822766363e-08f, 7.630787109e-08f, 7.438825840e-08f, 7.246882885e-08f, 7.054958574e-08f, 6.863053237e-08f, 6.671167206e-08f, 6.479300810e-08f,
+6.287454379e-08f, 6.095628244e-08f, 5.903822733e-08f, 5.712038178e-08f, 5.520274907e-08f, 5.328533250e-08f, 5.136813537e-08f, 4.945116097e-08f, 4.753441259e-08f, 4.561789353e-08f,
+4.370160708e-08f, 4.178555653e-08f, 3.986974517e-08f, 3.795417629e-08f, 3.603885317e-08f, 3.412377911e-08f, 3.220895738e-08f, 3.029439127e-08f, 2.838008407e-08f, 2.646603907e-08f,
+2.455225953e-08f, 2.263874874e-08f, 2.072550999e-08f, 1.881254655e-08f, 1.689986169e-08f, 1.498745871e-08f, 1.307534086e-08f, 1.116351143e-08f, 9.251973690e-09f, 7.340730913e-09f,
+5.429786370e-09f, 3.519143333e-09f, 1.608805070e-09f, -3.012251495e-10f, -2.210944058e-09f, -4.120348390e-09f, -6.029434880e-09f, -7.938200263e-09f, -9.846641276e-09f, -1.175475466e-08f,
+-1.366253715e-08f, -1.556998548e-08f, -1.747709641e-08f, -1.938386667e-08f, -2.129029300e-08f, -2.319637215e-08f, -2.510210087e-08f, -2.700747589e-08f, -2.891249398e-08f, -3.081715188e-08f,
+-3.272144634e-08f, -3.462537411e-08f, -3.652893194e-08f, -3.843211659e-08f, -4.033492482e-08f, -4.223735337e-08f, -4.413939901e-08f, -4.604105849e-08f, -4.794232858e-08f, -4.984320604e-08f,
+-5.174368762e-08f, -5.364377010e-08f, -5.554345023e-08f, -5.744272478e-08f, -5.934159053e-08f, -6.124004423e-08f, -6.313808265e-08f, -6.503570258e-08f, -6.693290078e-08f, -6.882967402e-08f,
+-7.072601907e-08f, -7.262193272e-08f, -7.451741175e-08f, -7.641245292e-08f, -7.830705302e-08f, -8.020120883e-08f, -8.209491714e-08f, -8.398817471e-08f, -8.588097836e-08f, -8.777332484e-08f,
+-8.966521097e-08f, -9.155663351e-08f, -9.344758927e-08f, -9.533807504e-08f, -9.722808760e-08f, -9.911762376e-08f, -1.010066803e-07f, -1.028952540e-07f, -1.047833417e-07f, -1.066709402e-07f,
+-1.085580463e-07f, -1.104446568e-07f, -1.123307684e-07f, -1.142163781e-07f, -1.161014825e-07f, -1.179860786e-07f, -1.198701631e-07f, -1.217537328e-07f, -1.236367845e-07f, -1.255193151e-07f,
+-1.274013214e-07f, -1.292828002e-07f, -1.311637482e-07f, -1.330441624e-07f, -1.349240396e-07f, -1.368033765e-07f, -1.386821700e-07f, -1.405604169e-07f, -1.424381140e-07f, -1.443152583e-07f,
+-1.461918464e-07f, -1.480678752e-07f, -1.499433417e-07f, -1.518182425e-07f, -1.536925745e-07f, -1.555663346e-07f, -1.574395197e-07f, -1.593121264e-07f, -1.611841518e-07f, -1.630555926e-07f,
+-1.649264457e-07f, -1.667967079e-07f, -1.686663760e-07f, -1.705354470e-07f, -1.724039177e-07f, -1.742717849e-07f, -1.761390454e-07f, -1.780056962e-07f, -1.798717341e-07f, -1.817371560e-07f,
+-1.836019586e-07f, -1.854661389e-07f, -1.873296938e-07f, -1.891926200e-07f, -1.910549146e-07f, -1.929165742e-07f, -1.947775959e-07f, -1.966379764e-07f, -1.984977127e-07f, -2.003568016e-07f,
+-2.022152400e-07f, -2.040730248e-07f, -2.059301528e-07f, -2.077866210e-07f, -2.096424261e-07f, -2.114975652e-07f, -2.133520351e-07f, -2.152058327e-07f, -2.170589548e-07f, -2.189113984e-07f,
+-2.207631604e-07f, -2.226142376e-07f, -2.244646269e-07f, -2.263143253e-07f, -2.281633297e-07f, -2.300116368e-07f, -2.318592437e-07f, -2.337061473e-07f, -2.355523444e-07f, -2.373978320e-07f,
+-2.392426070e-07f, -2.410866663e-07f, -2.429300067e-07f, -2.447726253e-07f, -2.466145189e-07f, -2.484556845e-07f, -2.502961189e-07f, -2.521358191e-07f, -2.539747821e-07f, -2.558130047e-07f,
+-2.576504839e-07f, -2.594872165e-07f, -2.613231996e-07f, -2.631584301e-07f, -2.649929049e-07f, -2.668266209e-07f, -2.686595751e-07f, -2.704917644e-07f, -2.723231858e-07f, -2.741538362e-07f,
+-2.759837125e-07f, -2.778128117e-07f, -2.796411308e-07f, -2.814686667e-07f, -2.832954163e-07f, -2.851213766e-07f, -2.869465446e-07f, -2.887709172e-07f, -2.905944914e-07f, -2.924172642e-07f,
+-2.942392324e-07f, -2.960603932e-07f, -2.978807434e-07f, -2.997002800e-07f, -3.015189999e-07f, -3.033369003e-07f, -3.051539780e-07f, -3.069702300e-07f, -3.087856533e-07f, -3.106002449e-07f,
+-3.124140017e-07f, -3.142269208e-07f, -3.160389991e-07f, -3.178502336e-07f, -3.196606214e-07f, -3.214701594e-07f, -3.232788445e-07f, -3.250866739e-07f, -3.268936445e-07f, -3.286997532e-07f,
+-3.305049972e-07f, -3.323093734e-07f, -3.341128788e-07f, -3.359155105e-07f, -3.377172653e-07f, -3.395181405e-07f, -3.413181329e-07f, -3.431172395e-07f, -3.449154575e-07f, -3.467127838e-07f,
+-3.485092155e-07f, -3.503047495e-07f, -3.520993830e-07f, -3.538931128e-07f, -3.556859361e-07f, -3.574778500e-07f, -3.592688513e-07f, -3.610589373e-07f, -3.628481048e-07f, -3.646363510e-07f,
+-3.664236729e-07f, -3.682100675e-07f, -3.699955319e-07f, -3.717800632e-07f, -3.735636584e-07f, -3.753463145e-07f, -3.771280286e-07f, -3.789087978e-07f, -3.806886191e-07f, -3.824674896e-07f,
+-3.842454063e-07f, -3.860223664e-07f, -3.877983668e-07f, -3.895734047e-07f, -3.913474772e-07f, -3.931205813e-07f, -3.948927140e-07f, -3.966638725e-07f, -3.984340539e-07f, -4.002032552e-07f,
+-4.019714735e-07f, -4.037387060e-07f, -4.055049496e-07f, -4.072702016e-07f, -4.090344589e-07f, -4.107977187e-07f, -4.125599782e-07f, -4.143212343e-07f, -4.160814842e-07f, -4.178407250e-07f,
+-4.195989538e-07f, -4.213561678e-07f, -4.231123639e-07f, -4.248675395e-07f, -4.266216915e-07f, -4.283748170e-07f, -4.301269134e-07f, -4.318779775e-07f, -4.336280066e-07f, -4.353769978e-07f,
+-4.371249482e-07f, -4.388718550e-07f, -4.406177152e-07f, -4.423625261e-07f, -4.441062848e-07f, -4.458489884e-07f, -4.475906340e-07f, -4.493312189e-07f, -4.510707401e-07f, -4.528091948e-07f,
+-4.545465802e-07f, -4.562828934e-07f, -4.580181315e-07f, -4.597522918e-07f, -4.614853715e-07f, -4.632173675e-07f, -4.649482773e-07f, -4.666780978e-07f, -4.684068263e-07f, -4.701344600e-07f,
+-4.718609960e-07f, -4.735864315e-07f, -4.753107637e-07f, -4.770339898e-07f, -4.787561070e-07f, -4.804771124e-07f, -4.821970033e-07f, -4.839157768e-07f, -4.856334302e-07f, -4.873499606e-07f,
+-4.890653652e-07f, -4.907796413e-07f, -4.924927860e-07f, -4.942047966e-07f, -4.959156703e-07f, -4.976254043e-07f, -4.993339958e-07f, -5.010414420e-07f, -5.027477401e-07f, -5.044528874e-07f,
+-5.061568811e-07f, -5.078597184e-07f, -5.095613966e-07f, -5.112619128e-07f, -5.129612644e-07f, -5.146594486e-07f, -5.163564625e-07f, -5.180523035e-07f, -5.197469687e-07f, -5.214404555e-07f,
+-5.231327611e-07f, -5.248238828e-07f, -5.265138177e-07f, -5.282025632e-07f, -5.298901165e-07f, -5.315764749e-07f, -5.332616356e-07f, -5.349455960e-07f, -5.366283532e-07f, -5.383099046e-07f,
+-5.399902474e-07f, -5.416693789e-07f, -5.433472965e-07f, -5.450239973e-07f, -5.466994786e-07f, -5.483737379e-07f, -5.500467722e-07f, -5.517185790e-07f, -5.533891556e-07f, -5.550584991e-07f,
+-5.567266070e-07f, -5.583934766e-07f, -5.600591051e-07f, -5.617234898e-07f, -5.633866281e-07f, -5.650485173e-07f, -5.667091547e-07f, -5.683685376e-07f, -5.700266634e-07f, -5.716835293e-07f,
+-5.733391327e-07f, -5.749934709e-07f, -5.766465413e-07f, -5.782983412e-07f, -5.799488679e-07f, -5.815981188e-07f, -5.832460912e-07f, -5.848927825e-07f, -5.865381900e-07f, -5.881823110e-07f,
+-5.898251430e-07f, -5.914666832e-07f, -5.931069291e-07f, -5.947458780e-07f, -5.963835272e-07f, -5.980198741e-07f, -5.996549162e-07f, -6.012886507e-07f, -6.029210751e-07f, -6.045521866e-07f,
+-6.061819828e-07f, -6.078104610e-07f, -6.094376186e-07f, -6.110634529e-07f, -6.126879614e-07f, -6.143111414e-07f, -6.159329904e-07f, -6.175535058e-07f, -6.191726849e-07f, -6.207905251e-07f,
+-6.224070239e-07f, -6.240221787e-07f, -6.256359869e-07f, -6.272484459e-07f, -6.288595532e-07f, -6.304693061e-07f, -6.320777020e-07f, -6.336847385e-07f, -6.352904129e-07f, -6.368947226e-07f,
+-6.384976652e-07f, -6.400992380e-07f, -6.416994385e-07f, -6.432982642e-07f, -6.448957124e-07f, -6.464917806e-07f, -6.480864663e-07f, -6.496797670e-07f, -6.512716800e-07f, -6.528622029e-07f,
+-6.544513331e-07f, -6.560390682e-07f, -6.576254054e-07f, -6.592103424e-07f, -6.607938766e-07f, -6.623760055e-07f, -6.639567266e-07f, -6.655360373e-07f, -6.671139352e-07f, -6.686904176e-07f,
+-6.702654822e-07f, -6.718391264e-07f, -6.734113478e-07f, -6.749821437e-07f, -6.765515118e-07f, -6.781194495e-07f, -6.796859543e-07f, -6.812510238e-07f, -6.828146554e-07f, -6.843768468e-07f,
+-6.859375953e-07f, -6.874968986e-07f, -6.890547542e-07f, -6.906111595e-07f, -6.921661121e-07f, -6.937196097e-07f, -6.952716496e-07f, -6.968222294e-07f, -6.983713468e-07f, -6.999189992e-07f,
+-7.014651841e-07f, -7.030098993e-07f, -7.045531421e-07f, -7.060949101e-07f, -7.076352010e-07f, -7.091740123e-07f, -7.107113415e-07f, -7.122471863e-07f, -7.137815442e-07f, -7.153144127e-07f,
+-7.168457895e-07f, -7.183756722e-07f, -7.199040582e-07f, -7.214309453e-07f, -7.229563311e-07f, -7.244802130e-07f, -7.260025887e-07f, -7.275234559e-07f, -7.290428120e-07f, -7.305606548e-07f,
+-7.320769818e-07f, -7.335917907e-07f, -7.351050790e-07f, -7.366168444e-07f, -7.381270846e-07f, -7.396357970e-07f, -7.411429794e-07f, -7.426486294e-07f, -7.441527447e-07f, -7.456553228e-07f,
+-7.471563614e-07f, -7.486558582e-07f, -7.501538108e-07f, -7.516502168e-07f, -7.531450739e-07f, -7.546383798e-07f, -7.561301321e-07f, -7.576203285e-07f, -7.591089667e-07f, -7.605960443e-07f,
+-7.620815589e-07f, -7.635655083e-07f, -7.650478902e-07f, -7.665287022e-07f, -7.680079420e-07f, -7.694856073e-07f, -7.709616958e-07f, -7.724362052e-07f, -7.739091331e-07f, -7.753804774e-07f,
+-7.768502356e-07f, -7.783184055e-07f, -7.797849848e-07f, -7.812499712e-07f, -7.827133624e-07f, -7.841751562e-07f, -7.856353503e-07f, -7.870939423e-07f, -7.885509301e-07f, -7.900063113e-07f,
+-7.914600837e-07f, -7.929122451e-07f, -7.943627931e-07f, -7.958117255e-07f, -7.972590400e-07f, -7.987047345e-07f, -8.001488066e-07f, -8.015912542e-07f, -8.030320749e-07f, -8.044712666e-07f,
+-8.059088270e-07f, -8.073447539e-07f, -8.087790450e-07f, -8.102116981e-07f, -8.116427111e-07f, -8.130720816e-07f, -8.144998076e-07f, -8.159258866e-07f, -8.173503167e-07f, -8.187730955e-07f,
+-8.201942208e-07f, -8.216136905e-07f, -8.230315024e-07f, -8.244476542e-07f, -8.258621438e-07f, -8.272749690e-07f, -8.286861276e-07f, -8.300956174e-07f, -8.315034363e-07f, -8.329095821e-07f,
+-8.343140525e-07f, -8.357168456e-07f, -8.371179590e-07f, -8.385173907e-07f, -8.399151384e-07f, -8.413112001e-07f, -8.427055735e-07f, -8.440982565e-07f, -8.454892471e-07f, -8.468785429e-07f,
+-8.482661420e-07f, -8.496520422e-07f, -8.510362413e-07f, -8.524187372e-07f, -8.537995279e-07f, -8.551786111e-07f, -8.565559847e-07f, -8.579316467e-07f, -8.593055950e-07f, -8.606778274e-07f,
+-8.620483418e-07f, -8.634171361e-07f, -8.647842083e-07f, -8.661495562e-07f, -8.675131778e-07f, -8.688750710e-07f, -8.702352336e-07f, -8.715936636e-07f, -8.729503590e-07f, -8.743053176e-07f,
+-8.756585374e-07f, -8.770100163e-07f, -8.783597523e-07f, -8.797077432e-07f, -8.810539871e-07f, -8.823984819e-07f, -8.837412256e-07f, -8.850822160e-07f, -8.864214512e-07f, -8.877589291e-07f,
+-8.890946476e-07f, -8.904286049e-07f, -8.917607987e-07f, -8.930912271e-07f, -8.944198881e-07f, -8.957467797e-07f, -8.970718997e-07f, -8.983952463e-07f, -8.997168174e-07f, -9.010366111e-07f,
+-9.023546252e-07f, -9.036708578e-07f, -9.049853070e-07f, -9.062979706e-07f, -9.076088469e-07f, -9.089179336e-07f, -9.102252289e-07f, -9.115307309e-07f, -9.128344374e-07f, -9.141363466e-07f,
+-9.154364565e-07f, -9.167347651e-07f, -9.180312704e-07f, -9.193259705e-07f, -9.206188635e-07f, -9.219099474e-07f, -9.231992202e-07f, -9.244866801e-07f, -9.257723250e-07f, -9.270561530e-07f,
+-9.283381622e-07f, -9.296183507e-07f, -9.308967166e-07f, -9.321732579e-07f, -9.334479726e-07f, -9.347208590e-07f, -9.359919150e-07f, -9.372611388e-07f, -9.385285285e-07f, -9.397940821e-07f,
+-9.410577978e-07f, -9.423196737e-07f, -9.435797078e-07f, -9.448378983e-07f, -9.460942434e-07f, -9.473487410e-07f, -9.486013894e-07f, -9.498521867e-07f, -9.511011310e-07f, -9.523482205e-07f,
+-9.535934532e-07f, -9.548368274e-07f, -9.560783411e-07f, -9.573179925e-07f, -9.585557798e-07f, -9.597917011e-07f, -9.610257546e-07f, -9.622579384e-07f, -9.634882508e-07f, -9.647166898e-07f,
+-9.659432537e-07f, -9.671679406e-07f, -9.683907487e-07f, -9.696116762e-07f, -9.708307213e-07f, -9.720478821e-07f, -9.732631569e-07f, -9.744765439e-07f, -9.756880412e-07f, -9.768976471e-07f,
+-9.781053598e-07f, -9.793111774e-07f, -9.805150983e-07f, -9.817171206e-07f, -9.829172425e-07f, -9.841154623e-07f, -9.853117782e-07f, -9.865061885e-07f, -9.876986913e-07f, -9.888892850e-07f,
+-9.900779677e-07f, -9.912647377e-07f, -9.924495932e-07f, -9.936325326e-07f, -9.948135541e-07f, -9.959926559e-07f, -9.971698363e-07f, -9.983450936e-07f, -9.995184260e-07f, -1.000689832e-06f,
+-1.001859309e-06f, -1.003026857e-06f, -1.004192473e-06f, -1.005356155e-06f, -1.006517902e-06f, -1.007677713e-06f, -1.008835585e-06f, -1.009991516e-06f, -1.011145506e-06f, -1.012297552e-06f,
+-1.013447653e-06f, -1.014595807e-06f, -1.015742012e-06f, -1.016886267e-06f, -1.018028570e-06f, -1.019168920e-06f, -1.020307314e-06f, -1.021443751e-06f, -1.022578229e-06f, -1.023710747e-06f,
+-1.024841304e-06f, -1.025969896e-06f, -1.027096524e-06f, -1.028221184e-06f, -1.029343877e-06f, -1.030464599e-06f, -1.031583349e-06f, -1.032700126e-06f, -1.033814929e-06f, -1.034927754e-06f,
+-1.036038602e-06f, -1.037147469e-06f, -1.038254356e-06f, -1.039359259e-06f, -1.040462178e-06f, -1.041563110e-06f, -1.042662055e-06f, -1.043759011e-06f, -1.044853975e-06f, -1.045946947e-06f,
+-1.047037926e-06f, -1.048126908e-06f, -1.049213893e-06f, -1.050298880e-06f, -1.051381866e-06f, -1.052462850e-06f, -1.053541831e-06f, -1.054618807e-06f, -1.055693777e-06f, -1.056766738e-06f,
+-1.057837690e-06f, -1.058906631e-06f, -1.059973559e-06f, -1.061038473e-06f, -1.062101372e-06f, -1.063162253e-06f, -1.064221115e-06f, -1.065277958e-06f, -1.066332778e-06f, -1.067385575e-06f,
+-1.068436348e-06f, -1.069485095e-06f, -1.070531813e-06f, -1.071576503e-06f, -1.072619162e-06f, -1.073659789e-06f, -1.074698382e-06f, -1.075734940e-06f, -1.076769461e-06f, -1.077801945e-06f,
+-1.078832389e-06f, -1.079860792e-06f, -1.080887153e-06f, -1.081911470e-06f, -1.082933741e-06f, -1.083953966e-06f, -1.084972143e-06f, -1.085988270e-06f, -1.087002346e-06f, -1.088014370e-06f,
+-1.089024340e-06f, -1.090032255e-06f, -1.091038113e-06f, -1.092041913e-06f, -1.093043653e-06f, -1.094043332e-06f, -1.095040950e-06f, -1.096036503e-06f, -1.097029991e-06f, -1.098021413e-06f,
+-1.099010767e-06f, -1.099998052e-06f, -1.100983266e-06f, -1.101966408e-06f, -1.102947477e-06f, -1.103926471e-06f, -1.104903389e-06f, -1.105878230e-06f, -1.106850992e-06f, -1.107821673e-06f,
+-1.108790274e-06f, -1.109756791e-06f, -1.110721224e-06f, -1.111683572e-06f, -1.112643833e-06f, -1.113602006e-06f, -1.114558089e-06f, -1.115512081e-06f, -1.116463982e-06f, -1.117413789e-06f,
+-1.118361501e-06f, -1.119307117e-06f, -1.120250636e-06f, -1.121192056e-06f, -1.122131377e-06f, -1.123068596e-06f, -1.124003713e-06f, -1.124936726e-06f, -1.125867634e-06f, -1.126796435e-06f,
+-1.127723129e-06f, -1.128647714e-06f, -1.129570190e-06f, -1.130490553e-06f, -1.131408805e-06f, -1.132324942e-06f, -1.133238964e-06f, -1.134150870e-06f, -1.135060658e-06f, -1.135968328e-06f,
+-1.136873877e-06f, -1.137777306e-06f, -1.138678611e-06f, -1.139577793e-06f, -1.140474850e-06f, -1.141369781e-06f, -1.142262585e-06f, -1.143153260e-06f, -1.144041806e-06f, -1.144928220e-06f,
+-1.145812503e-06f, -1.146694652e-06f, -1.147574666e-06f, -1.148452545e-06f, -1.149328287e-06f, -1.150201891e-06f, -1.151073356e-06f, -1.151942681e-06f, -1.152809864e-06f, -1.153674905e-06f,
+-1.154537801e-06f, -1.155398553e-06f, -1.156257159e-06f, -1.157113617e-06f, -1.157967927e-06f, -1.158820088e-06f, -1.159670098e-06f, -1.160517956e-06f, -1.161363661e-06f, -1.162207213e-06f,
+-1.163048609e-06f, -1.163887849e-06f, -1.164724932e-06f, -1.165559856e-06f, -1.166392621e-06f, -1.167223225e-06f, -1.168051668e-06f, -1.168877948e-06f, -1.169702064e-06f, -1.170524015e-06f,
+-1.171343800e-06f, -1.172161418e-06f, -1.172976868e-06f, -1.173790149e-06f, -1.174601259e-06f, -1.175410198e-06f, -1.176216965e-06f, -1.177021559e-06f, -1.177823978e-06f, -1.178624221e-06f,
+-1.179422288e-06f, -1.180218178e-06f, -1.181011889e-06f, -1.181803420e-06f, -1.182592771e-06f, -1.183379940e-06f, -1.184164927e-06f, -1.184947730e-06f, -1.185728348e-06f, -1.186506781e-06f,
+-1.187283027e-06f, -1.188057086e-06f, -1.188828956e-06f, -1.189598636e-06f, -1.190366126e-06f, -1.191131425e-06f, -1.191894530e-06f, -1.192655443e-06f, -1.193414161e-06f, -1.194170683e-06f,
+-1.194925010e-06f, -1.195677139e-06f, -1.196427070e-06f, -1.197174801e-06f, -1.197920333e-06f, -1.198663663e-06f, -1.199404792e-06f, -1.200143718e-06f, -1.200880440e-06f, -1.201614957e-06f,
+-1.202347268e-06f, -1.203077373e-06f, -1.203805271e-06f, -1.204530960e-06f, -1.205254440e-06f, -1.205975710e-06f, -1.206694768e-06f, -1.207411615e-06f, -1.208126249e-06f, -1.208838669e-06f,
+-1.209548875e-06f, -1.210256865e-06f, -1.210962639e-06f, -1.211666196e-06f, -1.212367535e-06f, -1.213066655e-06f, -1.213763555e-06f, -1.214458235e-06f, -1.215150693e-06f, -1.215840929e-06f,
+-1.216528942e-06f, -1.217214732e-06f, -1.217898296e-06f, -1.218579635e-06f, -1.219258747e-06f, -1.219935632e-06f, -1.220610290e-06f, -1.221282718e-06f, -1.221952917e-06f, -1.222620885e-06f,
+-1.223286622e-06f, -1.223950128e-06f, -1.224611400e-06f, -1.225270439e-06f, -1.225927244e-06f, -1.226581813e-06f, -1.227234147e-06f, -1.227884244e-06f, -1.228532103e-06f, -1.229177725e-06f,
+-1.229821107e-06f, -1.230462250e-06f, -1.231101152e-06f, -1.231737814e-06f, -1.232372233e-06f, -1.233004410e-06f, -1.233634343e-06f, -1.234262033e-06f, -1.234887477e-06f, -1.235510676e-06f,
+-1.236131629e-06f, -1.236750335e-06f, -1.237366793e-06f, -1.237981003e-06f, -1.238592964e-06f, -1.239202675e-06f, -1.239810136e-06f, -1.240415345e-06f, -1.241018303e-06f, -1.241619008e-06f,
+-1.242217461e-06f, -1.242813659e-06f, -1.243407603e-06f, -1.243999292e-06f, -1.244588724e-06f, -1.245175901e-06f, -1.245760820e-06f, -1.246343482e-06f, -1.246923885e-06f, -1.247502030e-06f,
+-1.248077914e-06f, -1.248651539e-06f, -1.249222902e-06f, -1.249792004e-06f, -1.250358844e-06f, -1.250923421e-06f, -1.251485734e-06f, -1.252045784e-06f, -1.252603569e-06f, -1.253159089e-06f,
+-1.253712343e-06f, -1.254263331e-06f, -1.254812052e-06f, -1.255358505e-06f, -1.255902691e-06f, -1.256444607e-06f, -1.256984255e-06f, -1.257521632e-06f, -1.258056739e-06f, -1.258589576e-06f,
+-1.259120141e-06f, -1.259648434e-06f, -1.260174454e-06f, -1.260698201e-06f, -1.261219675e-06f, -1.261738874e-06f, -1.262255799e-06f, -1.262770448e-06f, -1.263282822e-06f, -1.263792920e-06f,
+-1.264300741e-06f, -1.264806284e-06f, -1.265309550e-06f, -1.265810537e-06f, -1.266309246e-06f, -1.266805675e-06f, -1.267299825e-06f, -1.267791695e-06f, -1.268281283e-06f, -1.268768591e-06f,
+-1.269253617e-06f, -1.269736361e-06f, -1.270216822e-06f, -1.270695000e-06f, -1.271170895e-06f, -1.271644505e-06f, -1.272115832e-06f, -1.272584873e-06f, -1.273051629e-06f, -1.273516100e-06f,
+-1.273978284e-06f, -1.274438182e-06f, -1.274895793e-06f, -1.275351116e-06f, -1.275804152e-06f, -1.276254899e-06f, -1.276703357e-06f, -1.277149527e-06f, -1.277593407e-06f, -1.278034997e-06f,
+-1.278474298e-06f, -1.278911307e-06f, -1.279346025e-06f, -1.279778453e-06f, -1.280208588e-06f, -1.280636431e-06f, -1.281061982e-06f, -1.281485240e-06f, -1.281906204e-06f, -1.282324875e-06f,
+-1.282741252e-06f, -1.283155335e-06f, -1.283567124e-06f, -1.283976617e-06f, -1.284383815e-06f, -1.284788718e-06f, -1.285191324e-06f, -1.285591635e-06f, -1.285989648e-06f, -1.286385365e-06f,
+-1.286778785e-06f, -1.287169907e-06f, -1.287558732e-06f, -1.287945258e-06f, -1.288329486e-06f, -1.288711415e-06f, -1.289091045e-06f, -1.289468376e-06f, -1.289843408e-06f, -1.290216140e-06f,
+-1.290586571e-06f, -1.290954703e-06f, -1.291320533e-06f, -1.291684063e-06f, -1.292045292e-06f, -1.292404220e-06f, -1.292760846e-06f, -1.293115170e-06f, -1.293467192e-06f, -1.293816911e-06f,
+-1.294164329e-06f, -1.294509443e-06f, -1.294852255e-06f, -1.295192763e-06f, -1.295530968e-06f, -1.295866869e-06f, -1.296200466e-06f, -1.296531760e-06f, -1.296860749e-06f, -1.297187434e-06f,
+-1.297511814e-06f, -1.297833890e-06f, -1.298153660e-06f, -1.298471125e-06f, -1.298786286e-06f, -1.299099140e-06f, -1.299409689e-06f, -1.299717932e-06f, -1.300023870e-06f, -1.300327501e-06f,
+-1.300628826e-06f, -1.300927844e-06f, -1.301224556e-06f, -1.301518961e-06f, -1.301811060e-06f, -1.302100851e-06f, -1.302388336e-06f, -1.302673513e-06f, -1.302956383e-06f, -1.303236946e-06f,
+-1.303515201e-06f, -1.303791149e-06f, -1.304064788e-06f, -1.304336120e-06f, -1.304605145e-06f, -1.304871861e-06f, -1.305136269e-06f, -1.305398369e-06f, -1.305658161e-06f, -1.305915644e-06f,
+-1.306170819e-06f, -1.306423686e-06f, -1.306674244e-06f, -1.306922494e-06f, -1.307168435e-06f, -1.307412067e-06f, -1.307653391e-06f, -1.307892406e-06f, -1.308129112e-06f, -1.308363510e-06f,
+-1.308595599e-06f, -1.308825379e-06f, -1.309052850e-06f, -1.309278012e-06f, -1.309500865e-06f, -1.309721410e-06f, -1.309939645e-06f, -1.310155572e-06f, -1.310369190e-06f, -1.310580498e-06f,
+-1.310789499e-06f, -1.310996190e-06f, -1.311200572e-06f, -1.311402646e-06f, -1.311602411e-06f, -1.311799867e-06f, -1.311995014e-06f, -1.312187853e-06f, -1.312378383e-06f, -1.312566605e-06f,
+-1.312752518e-06f, -1.312936123e-06f, -1.313117419e-06f, -1.313296407e-06f, -1.313473087e-06f, -1.313647458e-06f, -1.313819522e-06f, -1.313989277e-06f, -1.314156725e-06f, -1.314321865e-06f,
+-1.314484697e-06f, -1.314645221e-06f, -1.314803438e-06f, -1.314959347e-06f, -1.315112949e-06f, -1.315264244e-06f, -1.315413231e-06f, -1.315559912e-06f, -1.315704286e-06f, -1.315846353e-06f,
+-1.315986114e-06f, -1.316123568e-06f, -1.316258715e-06f, -1.316391557e-06f, -1.316522093e-06f, -1.316650322e-06f, -1.316776246e-06f, -1.316899865e-06f, -1.317021178e-06f, -1.317140186e-06f,
+-1.317256888e-06f, -1.317371286e-06f, -1.317483380e-06f, -1.317593168e-06f, -1.317700653e-06f, -1.317805833e-06f, -1.317908710e-06f, -1.318009282e-06f, -1.318107552e-06f, -1.318203518e-06f,
+-1.318297180e-06f, -1.318388540e-06f, -1.318477598e-06f, -1.318564352e-06f, -1.318648805e-06f, -1.318730956e-06f, -1.318810805e-06f, -1.318888352e-06f, -1.318963599e-06f, -1.319036544e-06f,
+-1.319107188e-06f, -1.319175532e-06f, -1.319241576e-06f, -1.319305320e-06f, -1.319366764e-06f, -1.319425909e-06f, -1.319482755e-06f, -1.319537301e-06f, -1.319589550e-06f, -1.319639499e-06f,
+-1.319687151e-06f, -1.319732506e-06f, -1.319775562e-06f, -1.319816322e-06f, -1.319854785e-06f, -1.319890951e-06f, -1.319924822e-06f, -1.319956396e-06f, -1.319985675e-06f, -1.320012659e-06f,
+-1.320037348e-06f, -1.320059742e-06f, -1.320079842e-06f, -1.320097648e-06f, -1.320113161e-06f, -1.320126381e-06f, -1.320137308e-06f, -1.320145942e-06f, -1.320152285e-06f, -1.320156335e-06f,
+-1.320158095e-06f, -1.320157563e-06f, -1.320154741e-06f, -1.320149629e-06f, -1.320142227e-06f, -1.320132535e-06f, -1.320120555e-06f, -1.320106286e-06f, -1.320089728e-06f, -1.320070883e-06f,
+-1.320049750e-06f, -1.320026331e-06f, -1.320000625e-06f, -1.319972632e-06f, -1.319942354e-06f, -1.319909791e-06f, -1.319874943e-06f, -1.319837810e-06f, -1.319798394e-06f, -1.319756694e-06f,
+-1.319712711e-06f, -1.319666445e-06f, -1.319617897e-06f, -1.319567067e-06f, -1.319513956e-06f, -1.319458565e-06f, -1.319400893e-06f, -1.319340941e-06f, -1.319278710e-06f, -1.319214199e-06f,
+-1.319147411e-06f, -1.319078345e-06f, -1.319007001e-06f, -1.318933380e-06f, -1.318857483e-06f, -1.318779311e-06f, -1.318698862e-06f, -1.318616139e-06f, -1.318531142e-06f, -1.318443871e-06f,
+-1.318354326e-06f, -1.318262509e-06f, -1.318168419e-06f, -1.318072058e-06f, -1.317973426e-06f, -1.317872523e-06f, -1.317769350e-06f, -1.317663907e-06f, -1.317556196e-06f, -1.317446216e-06f,
+-1.317333969e-06f, -1.317219454e-06f, -1.317102673e-06f, -1.316983625e-06f, -1.316862312e-06f, -1.316738734e-06f, -1.316612892e-06f, -1.316484786e-06f, -1.316354417e-06f, -1.316221785e-06f,
+-1.316086891e-06f, -1.315949736e-06f, -1.315810321e-06f, -1.315668645e-06f, -1.315524710e-06f, -1.315378516e-06f, -1.315230063e-06f, -1.315079353e-06f, -1.314926386e-06f, -1.314771163e-06f,
+-1.314613684e-06f, -1.314453950e-06f, -1.314291962e-06f, -1.314127720e-06f, -1.313961224e-06f, -1.313792477e-06f, -1.313621477e-06f, -1.313448227e-06f, -1.313272726e-06f, -1.313094975e-06f,
+-1.312914976e-06f, -1.312732728e-06f, -1.312548232e-06f, -1.312361489e-06f, -1.312172500e-06f, -1.311981266e-06f, -1.311787786e-06f, -1.311592062e-06f, -1.311394095e-06f, -1.311193885e-06f,
+-1.310991433e-06f, -1.310786740e-06f, -1.310579806e-06f, -1.310370632e-06f, -1.310159219e-06f, -1.309945568e-06f, -1.309729679e-06f, -1.309511553e-06f, -1.309291191e-06f, -1.309068593e-06f,
+-1.308843761e-06f, -1.308616695e-06f, -1.308387396e-06f, -1.308155864e-06f, -1.307922101e-06f, -1.307686107e-06f, -1.307447883e-06f, -1.307207430e-06f, -1.306964748e-06f, -1.306719839e-06f,
+-1.306472702e-06f, -1.306223340e-06f, -1.305971752e-06f, -1.305717940e-06f, -1.305461904e-06f, -1.305203645e-06f, -1.304943165e-06f, -1.304680462e-06f, -1.304415540e-06f, -1.304148398e-06f,
+-1.303879037e-06f, -1.303607458e-06f, -1.303333663e-06f, -1.303057651e-06f, -1.302779423e-06f, -1.302498981e-06f, -1.302216325e-06f, -1.301931457e-06f, -1.301644376e-06f, -1.301355085e-06f,
+-1.301063583e-06f, -1.300769872e-06f, -1.300473952e-06f, -1.300175825e-06f, -1.299875491e-06f, -1.299572951e-06f, -1.299268206e-06f, -1.298961257e-06f, -1.298652105e-06f, -1.298340751e-06f,
+-1.298027195e-06f, -1.297711439e-06f, -1.297393483e-06f, -1.297073329e-06f, -1.296750977e-06f, -1.296426428e-06f, -1.296099683e-06f, -1.295770744e-06f, -1.295439610e-06f, -1.295106283e-06f,
+-1.294770765e-06f, -1.294433055e-06f, -1.294093155e-06f, -1.293751065e-06f, -1.293406788e-06f, -1.293060322e-06f, -1.292711671e-06f, -1.292360834e-06f, -1.292007813e-06f, -1.291652608e-06f,
+-1.291295221e-06f, -1.290935652e-06f, -1.290573903e-06f, -1.290209974e-06f, -1.289843866e-06f, -1.289475581e-06f, -1.289105120e-06f, -1.288732483e-06f, -1.288357671e-06f, -1.287980686e-06f,
+-1.287601529e-06f, -1.287220199e-06f, -1.286836700e-06f, -1.286451031e-06f, -1.286063193e-06f, -1.285673188e-06f, -1.285281017e-06f, -1.284886681e-06f, -1.284490180e-06f, -1.284091516e-06f,
+-1.283690689e-06f, -1.283287702e-06f, -1.282882555e-06f, -1.282475248e-06f, -1.282065784e-06f, -1.281654163e-06f, -1.281240385e-06f, -1.280824454e-06f, -1.280406368e-06f, -1.279986130e-06f,
+-1.279563741e-06f, -1.279139201e-06f, -1.278712512e-06f, -1.278283674e-06f, -1.277852690e-06f, -1.277419560e-06f, -1.276984284e-06f, -1.276546865e-06f, -1.276107303e-06f, -1.275665600e-06f,
+-1.275221756e-06f, -1.274775773e-06f, -1.274327652e-06f, -1.273877394e-06f, -1.273425000e-06f, -1.272970471e-06f, -1.272513808e-06f, -1.272055013e-06f, -1.271594087e-06f, -1.271131030e-06f,
+-1.270665845e-06f, -1.270198531e-06f, -1.269729091e-06f, -1.269257526e-06f, -1.268783836e-06f, -1.268308023e-06f, -1.267830087e-06f, -1.267350032e-06f, -1.266867856e-06f, -1.266383562e-06f,
+-1.265897151e-06f, -1.265408623e-06f, -1.264917981e-06f, -1.264425225e-06f, -1.263930357e-06f, -1.263433377e-06f, -1.262934288e-06f, -1.262433089e-06f, -1.261929783e-06f, -1.261424371e-06f,
+-1.260916853e-06f, -1.260407232e-06f, -1.259895508e-06f, -1.259381682e-06f, -1.258865756e-06f, -1.258347732e-06f, -1.257827609e-06f, -1.257305390e-06f, -1.256781076e-06f, -1.256254668e-06f,
+-1.255726167e-06f, -1.255195575e-06f, -1.254662893e-06f, -1.254128121e-06f, -1.253591262e-06f, -1.253052317e-06f, -1.252511287e-06f, -1.251968173e-06f, -1.251422976e-06f, -1.250875699e-06f,
+-1.250326341e-06f, -1.249774905e-06f, -1.249221391e-06f, -1.248665802e-06f, -1.248108138e-06f, -1.247548400e-06f, -1.246986590e-06f, -1.246422710e-06f, -1.245856760e-06f, -1.245288743e-06f,
+-1.244718658e-06f, -1.244146508e-06f, -1.243572294e-06f, -1.242996017e-06f, -1.242417679e-06f, -1.241837280e-06f, -1.241254823e-06f, -1.240670309e-06f, -1.240083738e-06f, -1.239495113e-06f,
+-1.238904435e-06f, -1.238311705e-06f, -1.237716924e-06f, -1.237120094e-06f, -1.236521216e-06f, -1.235920292e-06f, -1.235317323e-06f, -1.234712310e-06f, -1.234105255e-06f, -1.233496159e-06f,
+-1.232885023e-06f, -1.232271850e-06f, -1.231656640e-06f, -1.231039394e-06f, -1.230420115e-06f, -1.229798803e-06f, -1.229175460e-06f, -1.228550088e-06f, -1.227922687e-06f, -1.227293260e-06f,
+-1.226661807e-06f, -1.226028330e-06f, -1.225392831e-06f, -1.224755311e-06f, -1.224115771e-06f, -1.223474214e-06f, -1.222830639e-06f, -1.222185049e-06f, -1.221537446e-06f, -1.220887830e-06f,
+-1.220236203e-06f, -1.219582567e-06f, -1.218926923e-06f, -1.218269273e-06f, -1.217609617e-06f, -1.216947958e-06f, -1.216284297e-06f, -1.215618636e-06f, -1.214950975e-06f, -1.214281317e-06f,
+-1.213609663e-06f, -1.212936014e-06f, -1.212260372e-06f, -1.211582739e-06f, -1.210903115e-06f, -1.210221503e-06f, -1.209537904e-06f, -1.208852319e-06f, -1.208164751e-06f, -1.207475200e-06f,
+-1.206783668e-06f, -1.206090156e-06f, -1.205394667e-06f, -1.204697201e-06f, -1.203997761e-06f, -1.203296347e-06f, -1.202592962e-06f, -1.201887606e-06f, -1.201180282e-06f, -1.200470991e-06f,
+-1.199759734e-06f, -1.199046513e-06f, -1.198331330e-06f, -1.197614186e-06f, -1.196895083e-06f, -1.196174022e-06f, -1.195451005e-06f, -1.194726033e-06f, -1.193999109e-06f, -1.193270233e-06f,
+-1.192539407e-06f, -1.191806634e-06f, -1.191071913e-06f, -1.190335248e-06f, -1.189596640e-06f, -1.188856089e-06f, -1.188113599e-06f, -1.187369170e-06f, -1.186622804e-06f, -1.185874502e-06f,
+-1.185124267e-06f, -1.184372100e-06f, -1.183618003e-06f, -1.182861976e-06f, -1.182104023e-06f, -1.181344144e-06f, -1.180582341e-06f, -1.179818616e-06f, -1.179052970e-06f, -1.178285405e-06f,
+-1.177515923e-06f, -1.176744525e-06f, -1.175971213e-06f, -1.175195989e-06f, -1.174418854e-06f, -1.173639811e-06f, -1.172858859e-06f, -1.172076003e-06f, -1.171291242e-06f, -1.170504579e-06f,
+-1.169716015e-06f, -1.168925552e-06f, -1.168133192e-06f, -1.167338937e-06f, -1.166542787e-06f, -1.165744746e-06f, -1.164944814e-06f, -1.164142993e-06f, -1.163339285e-06f, -1.162533692e-06f,
+-1.161726215e-06f, -1.160916856e-06f, -1.160105617e-06f, -1.159292499e-06f, -1.158477505e-06f, -1.157660636e-06f, -1.156841893e-06f, -1.156021279e-06f, -1.155198795e-06f, -1.154374442e-06f,
+-1.153548224e-06f, -1.152720141e-06f, -1.151890194e-06f, -1.151058387e-06f, -1.150224721e-06f, -1.149389197e-06f, -1.148551817e-06f, -1.147712582e-06f, -1.146871496e-06f, -1.146028559e-06f,
+-1.145183773e-06f, -1.144337140e-06f, -1.143488662e-06f, -1.142638341e-06f, -1.141786178e-06f, -1.140932175e-06f, -1.140076334e-06f, -1.139218656e-06f, -1.138359144e-06f, -1.137497800e-06f,
+-1.136634624e-06f, -1.135769619e-06f, -1.134902787e-06f, -1.134034130e-06f, -1.133163649e-06f, -1.132291346e-06f, -1.131417223e-06f, -1.130541281e-06f, -1.129663524e-06f, -1.128783951e-06f,
+-1.127902566e-06f, -1.127019370e-06f, -1.126134365e-06f, -1.125247553e-06f, -1.124358935e-06f, -1.123468514e-06f, -1.122576291e-06f, -1.121682268e-06f, -1.120786447e-06f, -1.119888830e-06f,
+-1.118989419e-06f, -1.118088215e-06f, -1.117185221e-06f, -1.116280438e-06f, -1.115373868e-06f, -1.114465513e-06f, -1.113555375e-06f, -1.112643456e-06f, -1.111729757e-06f, -1.110814281e-06f,
+-1.109897029e-06f, -1.108978004e-06f, -1.108057207e-06f, -1.107134640e-06f, -1.106210305e-06f, -1.105284204e-06f, -1.104356338e-06f, -1.103426711e-06f, -1.102495322e-06f, -1.101562176e-06f,
+-1.100627273e-06f, -1.099690615e-06f, -1.098752204e-06f, -1.097812043e-06f, -1.096870133e-06f, -1.095926476e-06f, -1.094981073e-06f, -1.094033928e-06f, -1.093085041e-06f, -1.092134416e-06f,
+-1.091182053e-06f, -1.090227954e-06f, -1.089272122e-06f, -1.088314559e-06f, -1.087355266e-06f, -1.086394246e-06f, -1.085431500e-06f, -1.084467030e-06f, -1.083500839e-06f, -1.082532928e-06f,
+-1.081563299e-06f, -1.080591955e-06f, -1.079618896e-06f, -1.078644126e-06f, -1.077667646e-06f, -1.076689458e-06f, -1.075709565e-06f, -1.074727967e-06f, -1.073744667e-06f, -1.072759668e-06f,
+-1.071772970e-06f, -1.070784577e-06f, -1.069794490e-06f, -1.068802710e-06f, -1.067809241e-06f, -1.066814084e-06f, -1.065817241e-06f, -1.064818714e-06f, -1.063818505e-06f, -1.062816617e-06f,
+-1.061813050e-06f, -1.060807808e-06f, -1.059800891e-06f, -1.058792303e-06f, -1.057782046e-06f, -1.056770120e-06f, -1.055756529e-06f, -1.054741274e-06f, -1.053724358e-06f, -1.052705782e-06f,
+-1.051685548e-06f, -1.050663659e-06f, -1.049640117e-06f, -1.048614923e-06f, -1.047588080e-06f, -1.046559590e-06f, -1.045529454e-06f, -1.044497675e-06f, -1.043464256e-06f, -1.042429197e-06f,
+-1.041392501e-06f, -1.040354171e-06f, -1.039314207e-06f, -1.038272613e-06f, -1.037229391e-06f, -1.036184541e-06f, -1.035138068e-06f, -1.034089972e-06f, -1.033040255e-06f, -1.031988921e-06f,
+-1.030935970e-06f, -1.029881406e-06f, -1.028825229e-06f, -1.027767443e-06f, -1.026708049e-06f, -1.025647050e-06f, -1.024584447e-06f, -1.023520242e-06f, -1.022454439e-06f, -1.021387038e-06f,
+-1.020318042e-06f, -1.019247454e-06f, -1.018175274e-06f, -1.017101506e-06f, -1.016026152e-06f, -1.014949213e-06f, -1.013870692e-06f, -1.012790591e-06f, -1.011708911e-06f, -1.010625656e-06f,
+-1.009540828e-06f, -1.008454428e-06f, -1.007366458e-06f, -1.006276921e-06f, -1.005185819e-06f, -1.004093155e-06f, -1.002998929e-06f, -1.001903145e-06f, -1.000805804e-06f, -9.997069093e-07f,
+-9.986064623e-07f, -9.975044653e-07f, -9.964009206e-07f, -9.952958303e-07f, -9.941891966e-07f, -9.930810216e-07f, -9.919713076e-07f, -9.908600567e-07f, -9.897472712e-07f, -9.886329531e-07f,
+-9.875171047e-07f, -9.863997282e-07f, -9.852808258e-07f, -9.841603996e-07f, -9.830384520e-07f, -9.819149850e-07f, -9.807900009e-07f, -9.796635019e-07f, -9.785354901e-07f, -9.774059679e-07f,
+-9.762749374e-07f, -9.751424009e-07f, -9.740083605e-07f, -9.728728185e-07f, -9.717357771e-07f, -9.705972385e-07f, -9.694572049e-07f, -9.683156786e-07f, -9.671726619e-07f, -9.660281569e-07f,
+-9.648821658e-07f, -9.637346910e-07f, -9.625857346e-07f, -9.614352990e-07f, -9.602833862e-07f, -9.591299987e-07f, -9.579751386e-07f, -9.568188082e-07f, -9.556610097e-07f, -9.545017454e-07f,
+-9.533410176e-07f, -9.521788285e-07f, -9.510151804e-07f, -9.498500755e-07f, -9.486835162e-07f, -9.475155046e-07f, -9.463460430e-07f, -9.451751338e-07f, -9.440027792e-07f, -9.428289814e-07f,
+-9.416537428e-07f, -9.404770656e-07f, -9.392989522e-07f, -9.381194047e-07f, -9.369384256e-07f, -9.357560170e-07f, -9.345721812e-07f, -9.333869207e-07f, -9.322002376e-07f, -9.310121342e-07f,
+-9.298226130e-07f, -9.286316760e-07f, -9.274393258e-07f, -9.262455645e-07f, -9.250503945e-07f, -9.238538181e-07f, -9.226558376e-07f, -9.214564553e-07f, -9.202556735e-07f, -9.190534946e-07f,
+-9.178499209e-07f, -9.166449547e-07f, -9.154385982e-07f, -9.142308540e-07f, -9.130217242e-07f, -9.118112112e-07f, -9.105993174e-07f, -9.093860450e-07f, -9.081713965e-07f, -9.069553741e-07f,
+-9.057379802e-07f, -9.045192172e-07f, -9.032990873e-07f, -9.020775929e-07f, -9.008547365e-07f, -8.996305202e-07f, -8.984049466e-07f, -8.971780179e-07f, -8.959497365e-07f, -8.947201047e-07f,
+-8.934891249e-07f, -8.922567996e-07f, -8.910231309e-07f, -8.897881214e-07f, -8.885517733e-07f, -8.873140891e-07f, -8.860750712e-07f, -8.848347218e-07f, -8.835930434e-07f, -8.823500383e-07f,
+-8.811057089e-07f, -8.798600577e-07f, -8.786130870e-07f, -8.773647991e-07f, -8.761151965e-07f, -8.748642816e-07f, -8.736120567e-07f, -8.723585243e-07f, -8.711036867e-07f, -8.698475464e-07f,
+-8.685901056e-07f, -8.673313670e-07f, -8.660713327e-07f, -8.648100053e-07f, -8.635473872e-07f, -8.622834807e-07f, -8.610182882e-07f, -8.597518123e-07f, -8.584840552e-07f, -8.572150195e-07f,
+-8.559447075e-07f, -8.546731216e-07f, -8.534002643e-07f, -8.521261380e-07f, -8.508507451e-07f, -8.495740880e-07f, -8.482961692e-07f, -8.470169911e-07f, -8.457365562e-07f, -8.444548668e-07f,
+-8.431719254e-07f, -8.418877345e-07f, -8.406022964e-07f, -8.393156136e-07f, -8.380276886e-07f, -8.367385239e-07f, -8.354481217e-07f, -8.341564847e-07f, -8.328636152e-07f, -8.315695157e-07f,
+-8.302741887e-07f, -8.289776365e-07f, -8.276798617e-07f, -8.263808668e-07f, -8.250806541e-07f, -8.237792262e-07f, -8.224765855e-07f, -8.211727344e-07f, -8.198676755e-07f, -8.185614112e-07f,
+-8.172539440e-07f, -8.159452763e-07f, -8.146354107e-07f, -8.133243495e-07f, -8.120120953e-07f, -8.106986506e-07f, -8.093840178e-07f, -8.080681994e-07f, -8.067511979e-07f, -8.054330158e-07f,
+-8.041136555e-07f, -8.027931197e-07f, -8.014714106e-07f, -8.001485309e-07f, -7.988244830e-07f, -7.974992695e-07f, -7.961728928e-07f, -7.948453554e-07f, -7.935166598e-07f, -7.921868085e-07f,
+-7.908558041e-07f, -7.895236490e-07f, -7.881903457e-07f, -7.868558968e-07f, -7.855203047e-07f, -7.841835720e-07f, -7.828457012e-07f, -7.815066947e-07f, -7.801665552e-07f, -7.788252850e-07f,
+-7.774828869e-07f, -7.761393631e-07f, -7.747947164e-07f, -7.734489491e-07f, -7.721020639e-07f, -7.707540632e-07f, -7.694049497e-07f, -7.680547257e-07f, -7.667033939e-07f, -7.653509567e-07f,
+-7.639974168e-07f, -7.626427766e-07f, -7.612870386e-07f, -7.599302055e-07f, -7.585722798e-07f, -7.572132640e-07f, -7.558531606e-07f, -7.544919721e-07f, -7.531297012e-07f, -7.517663504e-07f,
+-7.504019223e-07f, -7.490364193e-07f, -7.476698440e-07f, -7.463021990e-07f, -7.449334868e-07f, -7.435637101e-07f, -7.421928712e-07f, -7.408209729e-07f, -7.394480177e-07f, -7.380740080e-07f,
+-7.366989466e-07f, -7.353228359e-07f, -7.339456786e-07f, -7.325674771e-07f, -7.311882341e-07f, -7.298079521e-07f, -7.284266337e-07f, -7.270442815e-07f, -7.256608980e-07f, -7.242764859e-07f,
+-7.228910476e-07f, -7.215045858e-07f, -7.201171031e-07f, -7.187286020e-07f, -7.173390851e-07f, -7.159485550e-07f, -7.145570143e-07f, -7.131644656e-07f, -7.117709114e-07f, -7.103763543e-07f,
+-7.089807970e-07f, -7.075842420e-07f, -7.061866920e-07f, -7.047881494e-07f, -7.033886170e-07f, -7.019880972e-07f, -7.005865928e-07f, -6.991841063e-07f, -6.977806402e-07f, -6.963761973e-07f,
+-6.949707801e-07f, -6.935643912e-07f, -6.921570332e-07f, -6.907487087e-07f, -6.893394203e-07f, -6.879291707e-07f, -6.865179624e-07f, -6.851057981e-07f, -6.836926804e-07f, -6.822786118e-07f,
+-6.808635951e-07f, -6.794476328e-07f, -6.780307275e-07f, -6.766128818e-07f, -6.751940985e-07f, -6.737743800e-07f, -6.723537291e-07f, -6.709321483e-07f, -6.695096402e-07f, -6.680862076e-07f,
+-6.666618530e-07f, -6.652365790e-07f, -6.638103883e-07f, -6.623832835e-07f, -6.609552673e-07f, -6.595263422e-07f, -6.580965109e-07f, -6.566657761e-07f, -6.552341403e-07f, -6.538016063e-07f,
+-6.523681766e-07f, -6.509338540e-07f, -6.494986409e-07f, -6.480625401e-07f, -6.466255543e-07f, -6.451876860e-07f, -6.437489379e-07f, -6.423093127e-07f, -6.408688130e-07f, -6.394274415e-07f,
+-6.379852007e-07f, -6.365420934e-07f, -6.350981222e-07f, -6.336532897e-07f, -6.322075987e-07f, -6.307610517e-07f, -6.293136515e-07f, -6.278654006e-07f, -6.264163018e-07f, -6.249663577e-07f,
+-6.235155709e-07f, -6.220639441e-07f, -6.206114800e-07f, -6.191581813e-07f, -6.177040506e-07f, -6.162490905e-07f, -6.147933038e-07f, -6.133366930e-07f, -6.118792610e-07f, -6.104210103e-07f,
+-6.089619436e-07f, -6.075020636e-07f, -6.060413729e-07f, -6.045798743e-07f, -6.031175703e-07f, -6.016544638e-07f, -6.001905573e-07f, -5.987258535e-07f, -5.972603551e-07f, -5.957940648e-07f,
+-5.943269853e-07f, -5.928591192e-07f, -5.913904693e-07f, -5.899210382e-07f, -5.884508285e-07f, -5.869798431e-07f, -5.855080845e-07f, -5.840355554e-07f, -5.825622586e-07f, -5.810881967e-07f,
+-5.796133724e-07f, -5.781377884e-07f, -5.766614474e-07f, -5.751843521e-07f, -5.737065052e-07f, -5.722279093e-07f, -5.707485672e-07f, -5.692684815e-07f, -5.677876550e-07f, -5.663060904e-07f,
+-5.648237903e-07f, -5.633407574e-07f, -5.618569945e-07f, -5.603725042e-07f, -5.588872893e-07f, -5.574013524e-07f, -5.559146962e-07f, -5.544273235e-07f, -5.529392370e-07f, -5.514504393e-07f,
+-5.499609332e-07f, -5.484707213e-07f, -5.469798065e-07f, -5.454881913e-07f, -5.439958784e-07f, -5.425028707e-07f, -5.410091708e-07f, -5.395147815e-07f, -5.380197053e-07f, -5.365239451e-07f,
+-5.350275036e-07f, -5.335303834e-07f, -5.320325873e-07f, -5.305341180e-07f, -5.290349783e-07f, -5.275351707e-07f, -5.260346982e-07f, -5.245335632e-07f, -5.230317687e-07f, -5.215293173e-07f,
+-5.200262117e-07f, -5.185224546e-07f, -5.170180489e-07f, -5.155129971e-07f, -5.140073020e-07f, -5.125009663e-07f, -5.109939929e-07f, -5.094863843e-07f, -5.079781433e-07f, -5.064692726e-07f,
+-5.049597750e-07f, -5.034496532e-07f, -5.019389099e-07f, -5.004275479e-07f, -4.989155699e-07f, -4.974029785e-07f, -4.958897766e-07f, -4.943759668e-07f, -4.928615520e-07f, -4.913465348e-07f,
+-4.898309179e-07f, -4.883147041e-07f, -4.867978962e-07f, -4.852804969e-07f, -4.837625088e-07f, -4.822439348e-07f, -4.807247775e-07f, -4.792050398e-07f, -4.776847243e-07f, -4.761638337e-07f,
+-4.746423709e-07f, -4.731203386e-07f, -4.715977395e-07f, -4.700745763e-07f, -4.685508518e-07f, -4.670265687e-07f, -4.655017298e-07f, -4.639763378e-07f, -4.624503954e-07f, -4.609239054e-07f,
+-4.593968706e-07f, -4.578692936e-07f, -4.563411773e-07f, -4.548125244e-07f, -4.532833375e-07f, -4.517536195e-07f, -4.502233731e-07f, -4.486926011e-07f, -4.471613062e-07f, -4.456294911e-07f,
+-4.440971587e-07f, -4.425643115e-07f, -4.410309525e-07f, -4.394970843e-07f, -4.379627097e-07f, -4.364278315e-07f, -4.348924523e-07f, -4.333565751e-07f, -4.318202024e-07f, -4.302833370e-07f,
+-4.287459818e-07f, -4.272081394e-07f, -4.256698126e-07f, -4.241310042e-07f, -4.225917169e-07f, -4.210519535e-07f, -4.195117167e-07f, -4.179710093e-07f, -4.164298340e-07f, -4.148881937e-07f,
+-4.133460909e-07f, -4.118035286e-07f, -4.102605095e-07f, -4.087170362e-07f, -4.071731117e-07f, -4.056287385e-07f, -4.040839196e-07f, -4.025386576e-07f, -4.009929554e-07f, -3.994468156e-07f,
+-3.979002410e-07f, -3.963532345e-07f, -3.948057986e-07f, -3.932579363e-07f, -3.917096503e-07f, -3.901609433e-07f, -3.886118181e-07f, -3.870622774e-07f, -3.855123241e-07f, -3.839619608e-07f,
+-3.824111904e-07f, -3.808600156e-07f, -3.793084391e-07f, -3.777564638e-07f, -3.762040923e-07f, -3.746513276e-07f, -3.730981722e-07f, -3.715446290e-07f, -3.699907008e-07f, -3.684363902e-07f,
+-3.668817002e-07f, -3.653266334e-07f, -3.637711926e-07f, -3.622153805e-07f, -3.606592000e-07f, -3.591026538e-07f, -3.575457446e-07f, -3.559884753e-07f, -3.544308486e-07f, -3.528728673e-07f,
+-3.513145340e-07f, -3.497558517e-07f, -3.481968230e-07f, -3.466374508e-07f, -3.450777378e-07f, -3.435176867e-07f, -3.419573003e-07f, -3.403965815e-07f, -3.388355329e-07f, -3.372741573e-07f,
+-3.357124575e-07f, -3.341504363e-07f, -3.325880965e-07f, -3.310254407e-07f, -3.294624718e-07f, -3.278991925e-07f, -3.263356057e-07f, -3.247717140e-07f, -3.232075203e-07f, -3.216430272e-07f,
+-3.200782377e-07f, -3.185131544e-07f, -3.169477801e-07f, -3.153821176e-07f, -3.138161696e-07f, -3.122499390e-07f, -3.106834284e-07f, -3.091166407e-07f, -3.075495786e-07f, -3.059822450e-07f,
+-3.044146424e-07f, -3.028467739e-07f, -3.012786420e-07f, -2.997102496e-07f, -2.981415994e-07f, -2.965726942e-07f, -2.950035368e-07f, -2.934341300e-07f, -2.918644764e-07f, -2.902945790e-07f,
+-2.887244404e-07f, -2.871540634e-07f, -2.855834507e-07f, -2.840126053e-07f, -2.824415297e-07f, -2.808702269e-07f, -2.792986995e-07f, -2.777269503e-07f, -2.761549822e-07f, -2.745827978e-07f,
+-2.730103999e-07f, -2.714377913e-07f, -2.698649748e-07f, -2.682919531e-07f, -2.667187290e-07f, -2.651453053e-07f, -2.635716847e-07f, -2.619978700e-07f, -2.604238640e-07f, -2.588496694e-07f,
+-2.572752890e-07f, -2.557007256e-07f, -2.541259819e-07f, -2.525510607e-07f, -2.509759648e-07f, -2.494006970e-07f, -2.478252599e-07f, -2.462496564e-07f, -2.446738892e-07f, -2.430979611e-07f,
+-2.415218748e-07f, -2.399456332e-07f, -2.383692390e-07f, -2.367926949e-07f, -2.352160038e-07f, -2.336391683e-07f, -2.320621913e-07f, -2.304850755e-07f, -2.289078236e-07f, -2.273304385e-07f,
+-2.257529229e-07f, -2.241752796e-07f, -2.225975113e-07f, -2.210196208e-07f, -2.194416108e-07f, -2.178634841e-07f, -2.162852435e-07f, -2.147068917e-07f, -2.131284316e-07f, -2.115498657e-07f,
+-2.099711970e-07f, -2.083924282e-07f, -2.068135620e-07f, -2.052346012e-07f, -2.036555486e-07f, -2.020764068e-07f, -2.004971788e-07f, -1.989178672e-07f, -1.973384747e-07f, -1.957590042e-07f,
+-1.941794584e-07f, -1.925998401e-07f, -1.910201520e-07f, -1.894403968e-07f, -1.878605774e-07f, -1.862806965e-07f, -1.847007568e-07f, -1.831207611e-07f, -1.815407122e-07f, -1.799606127e-07f,
+-1.783804655e-07f, -1.768002734e-07f, -1.752200390e-07f, -1.736397651e-07f, -1.720594545e-07f, -1.704791099e-07f, -1.688987340e-07f, -1.673183297e-07f, -1.657378997e-07f, -1.641574467e-07f,
+-1.625769735e-07f, -1.609964828e-07f, -1.594159774e-07f, -1.578354600e-07f, -1.562549333e-07f, -1.546744002e-07f, -1.530938634e-07f, -1.515133255e-07f, -1.499327894e-07f, -1.483522579e-07f,
+-1.467717335e-07f, -1.451912192e-07f, -1.436107176e-07f, -1.420302315e-07f, -1.404497636e-07f, -1.388693167e-07f, -1.372888935e-07f, -1.357084967e-07f, -1.341281292e-07f, -1.325477936e-07f,
+-1.309674926e-07f, -1.293872291e-07f, -1.278070057e-07f, -1.262268253e-07f, -1.246466904e-07f, -1.230666040e-07f, -1.214865686e-07f, -1.199065871e-07f, -1.183266622e-07f, -1.167467966e-07f,
+-1.151669930e-07f, -1.135872543e-07f, -1.120075830e-07f, -1.104279820e-07f, -1.088484540e-07f, -1.072690017e-07f, -1.056896279e-07f, -1.041103352e-07f, -1.025311265e-07f, -1.009520044e-07f,
+-9.937297168e-08f, -9.779403105e-08f, -9.621518526e-08f, -9.463643702e-08f, -9.305778906e-08f, -9.147924412e-08f, -8.990080490e-08f, -8.832247415e-08f, -8.674425458e-08f, -8.516614892e-08f,
+-8.358815989e-08f, -8.201029020e-08f, -8.043254260e-08f, -7.885491978e-08f, -7.727742449e-08f, -7.570005942e-08f, -7.412282731e-08f, -7.254573087e-08f, -7.096877283e-08f, -6.939195588e-08f,
+-6.781528276e-08f, -6.623875618e-08f, -6.466237884e-08f, -6.308615348e-08f, -6.151008279e-08f, -5.993416950e-08f, -5.835841631e-08f, -5.678282593e-08f, -5.520740108e-08f, -5.363214446e-08f,
+-5.205705879e-08f, -5.048214677e-08f, -4.890741111e-08f, -4.733285451e-08f, -4.575847969e-08f, -4.418428934e-08f, -4.261028618e-08f, -4.103647289e-08f, -3.946285220e-08f, -3.788942679e-08f,
+-3.631619938e-08f, -3.474317265e-08f, -3.317034932e-08f, -3.159773207e-08f, -3.002532361e-08f, -2.845312663e-08f, -2.688114384e-08f, -2.530937792e-08f, -2.373783157e-08f, -2.216650748e-08f,
+-2.059540836e-08f, -1.902453688e-08f, -1.745389574e-08f, -1.588348763e-08f, -1.431331524e-08f, -1.274338127e-08f, -1.117368839e-08f, -9.604239291e-09f, -8.035036665e-09f, -6.466083195e-09f,
+-4.897381565e-09f, -3.328934458e-09f, -1.760744557e-09f, -1.928145440e-10f, 1.374852901e-09f, 2.942255098e-09f, 4.509389367e-09f, 6.076253032e-09f, 7.642843413e-09f, 9.209157837e-09f,
+1.077519363e-08f, 1.234094811e-08f, 1.390641861e-08f, 1.547160245e-08f, 1.703649697e-08f, 1.860109950e-08f, 2.016540735e-08f, 2.172941788e-08f, 2.329312840e-08f, 2.485653625e-08f,
+2.641963877e-08f, 2.798243329e-08f, 2.954491714e-08f, 3.110708767e-08f, 3.266894221e-08f, 3.423047811e-08f, 3.579169269e-08f, 3.735258331e-08f, 3.891314730e-08f, 4.047338201e-08f,
+4.203328478e-08f, 4.359285296e-08f, 4.515208390e-08f, 4.671097493e-08f, 4.826952342e-08f, 4.982772670e-08f, 5.138558214e-08f, 5.294308707e-08f, 5.450023886e-08f, 5.605703485e-08f,
+5.761347241e-08f, 5.916954888e-08f, 6.072526163e-08f, 6.228060801e-08f, 6.383558538e-08f, 6.539019110e-08f, 6.694442254e-08f, 6.849827705e-08f, 7.005175199e-08f, 7.160484474e-08f,
+7.315755265e-08f, 7.470987310e-08f, 7.626180345e-08f, 7.781334108e-08f, 7.936448334e-08f, 8.091522761e-08f, 8.246557127e-08f, 8.401551169e-08f, 8.556504624e-08f, 8.711417229e-08f,
+8.866288723e-08f, 9.021118843e-08f, 9.175907328e-08f, 9.330653914e-08f, 9.485358341e-08f, 9.640020347e-08f, 9.794639669e-08f, 9.949216047e-08f, 1.010374922e-07f, 1.025823892e-07f,
+1.041268490e-07f, 1.056708689e-07f, 1.072144463e-07f, 1.087575785e-07f, 1.103002631e-07f, 1.118424973e-07f, 1.133842786e-07f, 1.149256043e-07f, 1.164664720e-07f, 1.180068789e-07f,
+1.195468224e-07f, 1.210863001e-07f, 1.226253092e-07f, 1.241638472e-07f, 1.257019115e-07f, 1.272394994e-07f, 1.287766085e-07f, 1.303132361e-07f, 1.318493796e-07f, 1.333850364e-07f,
+1.349202040e-07f, 1.364548797e-07f, 1.379890611e-07f, 1.395227454e-07f, 1.410559301e-07f, 1.425886126e-07f, 1.441207904e-07f, 1.456524609e-07f, 1.471836215e-07f, 1.487142696e-07f,
+1.502444027e-07f, 1.517740181e-07f, 1.533031133e-07f, 1.548316858e-07f, 1.563597329e-07f, 1.578872522e-07f, 1.594142410e-07f, 1.609406967e-07f, 1.624666169e-07f, 1.639919989e-07f,
+1.655168402e-07f, 1.670411382e-07f, 1.685648904e-07f, 1.700880942e-07f, 1.716107471e-07f, 1.731328465e-07f, 1.746543899e-07f, 1.761753746e-07f, 1.776957982e-07f, 1.792156581e-07f,
+1.807349518e-07f, 1.822536767e-07f, 1.837718303e-07f, 1.852894100e-07f, 1.868064132e-07f, 1.883228376e-07f, 1.898386804e-07f, 1.913539393e-07f, 1.928686116e-07f, 1.943826947e-07f,
+1.958961863e-07f, 1.974090837e-07f, 1.989213845e-07f, 2.004330860e-07f, 2.019441858e-07f, 2.034546813e-07f, 2.049645701e-07f, 2.064738495e-07f, 2.079825171e-07f, 2.094905704e-07f,
+2.109980068e-07f, 2.125048238e-07f, 2.140110190e-07f, 2.155165897e-07f, 2.170215336e-07f, 2.185258480e-07f, 2.200295304e-07f, 2.215325785e-07f, 2.230349896e-07f, 2.245367612e-07f,
+2.260378909e-07f, 2.275383761e-07f, 2.290382144e-07f, 2.305374033e-07f, 2.320359402e-07f, 2.335338226e-07f, 2.350310482e-07f, 2.365276143e-07f, 2.380235185e-07f, 2.395187583e-07f,
+2.410133312e-07f, 2.425072348e-07f, 2.440004664e-07f, 2.454930238e-07f, 2.469849043e-07f, 2.484761056e-07f, 2.499666251e-07f, 2.514564603e-07f, 2.529456088e-07f, 2.544340681e-07f,
+2.559218357e-07f, 2.574089093e-07f, 2.588952862e-07f, 2.603809640e-07f, 2.618659403e-07f, 2.633502127e-07f, 2.648337785e-07f, 2.663166355e-07f, 2.677987811e-07f, 2.692802129e-07f,
+2.707609283e-07f, 2.722409251e-07f, 2.737202007e-07f, 2.751987526e-07f, 2.766765785e-07f, 2.781536758e-07f, 2.796300421e-07f, 2.811056751e-07f, 2.825805722e-07f, 2.840547310e-07f,
+2.855281491e-07f, 2.870008240e-07f, 2.884727533e-07f, 2.899439345e-07f, 2.914143653e-07f, 2.928840432e-07f, 2.943529658e-07f, 2.958211307e-07f, 2.972885354e-07f, 2.987551775e-07f,
+3.002210545e-07f, 3.016861642e-07f, 3.031505040e-07f, 3.046140715e-07f, 3.060768644e-07f, 3.075388802e-07f, 3.090001165e-07f, 3.104605708e-07f, 3.119202409e-07f, 3.133791243e-07f,
+3.148372185e-07f, 3.162945212e-07f, 3.177510300e-07f, 3.192067425e-07f, 3.206616563e-07f, 3.221157689e-07f, 3.235690781e-07f, 3.250215814e-07f, 3.264732764e-07f, 3.279241607e-07f,
+3.293742320e-07f, 3.308234879e-07f, 3.322719259e-07f, 3.337195438e-07f, 3.351663391e-07f, 3.366123094e-07f, 3.380574525e-07f, 3.395017658e-07f, 3.409452471e-07f, 3.423878939e-07f,
+3.438297040e-07f, 3.452706749e-07f, 3.467108042e-07f, 3.481500897e-07f, 3.495885290e-07f, 3.510261196e-07f, 3.524628593e-07f, 3.538987457e-07f, 3.553337764e-07f, 3.567679491e-07f,
+3.582012615e-07f, 3.596337111e-07f, 3.610652957e-07f, 3.624960129e-07f, 3.639258604e-07f, 3.653548358e-07f, 3.667829368e-07f, 3.682101611e-07f, 3.696365063e-07f, 3.710619701e-07f,
+3.724865501e-07f, 3.739102441e-07f, 3.753330497e-07f, 3.767549647e-07f, 3.781759865e-07f, 3.795961131e-07f, 3.810153420e-07f, 3.824336709e-07f, 3.838510975e-07f, 3.852676195e-07f,
+3.866832346e-07f, 3.880979404e-07f, 3.895117348e-07f, 3.909246153e-07f, 3.923365797e-07f, 3.937476256e-07f, 3.951577509e-07f, 3.965669531e-07f, 3.979752300e-07f, 3.993825793e-07f,
+4.007889986e-07f, 4.021944859e-07f, 4.035990386e-07f, 4.050026546e-07f, 4.064053315e-07f, 4.078070672e-07f, 4.092078592e-07f, 4.106077054e-07f, 4.120066034e-07f, 4.134045511e-07f,
+4.148015460e-07f, 4.161975860e-07f, 4.175926688e-07f, 4.189867921e-07f, 4.203799537e-07f, 4.217721513e-07f, 4.231633826e-07f, 4.245536455e-07f, 4.259429375e-07f, 4.273312566e-07f,
+4.287186004e-07f, 4.301049666e-07f, 4.314903532e-07f, 4.328747577e-07f, 4.342581780e-07f, 4.356406119e-07f, 4.370220570e-07f, 4.384025112e-07f, 4.397819722e-07f, 4.411604378e-07f,
+4.425379057e-07f, 4.439143738e-07f, 4.452898399e-07f, 4.466643016e-07f, 4.480377568e-07f, 4.494102032e-07f, 4.507816388e-07f, 4.521520611e-07f, 4.535214680e-07f, 4.548898574e-07f,
+4.562572270e-07f, 4.576235746e-07f, 4.589888980e-07f, 4.603531949e-07f, 4.617164633e-07f, 4.630787009e-07f, 4.644399055e-07f, 4.658000749e-07f, 4.671592069e-07f, 4.685172994e-07f,
+4.698743502e-07f, 4.712303570e-07f, 4.725853177e-07f, 4.739392301e-07f, 4.752920921e-07f, 4.766439015e-07f, 4.779946560e-07f, 4.793443536e-07f, 4.806929920e-07f, 4.820405691e-07f,
+4.833870827e-07f, 4.847325307e-07f, 4.860769110e-07f, 4.874202212e-07f, 4.887624594e-07f, 4.901036233e-07f, 4.914437108e-07f, 4.927827198e-07f, 4.941206481e-07f, 4.954574935e-07f,
+4.967932540e-07f, 4.981279273e-07f, 4.994615114e-07f, 5.007940041e-07f, 5.021254033e-07f, 5.034557068e-07f, 5.047849126e-07f, 5.061130185e-07f, 5.074400223e-07f, 5.087659220e-07f,
+5.100907154e-07f, 5.114144005e-07f, 5.127369751e-07f, 5.140584370e-07f, 5.153787843e-07f, 5.166980147e-07f, 5.180161262e-07f, 5.193331167e-07f, 5.206489841e-07f, 5.219637262e-07f,
+5.232773411e-07f, 5.245898265e-07f, 5.259011804e-07f, 5.272114008e-07f, 5.285204854e-07f, 5.298284323e-07f, 5.311352394e-07f, 5.324409045e-07f, 5.337454257e-07f, 5.350488008e-07f,
+5.363510277e-07f, 5.376521045e-07f, 5.389520289e-07f, 5.402507990e-07f, 5.415484128e-07f, 5.428448680e-07f, 5.441401627e-07f, 5.454342949e-07f, 5.467272624e-07f, 5.480190633e-07f,
+5.493096954e-07f, 5.505991567e-07f, 5.518874452e-07f, 5.531745589e-07f, 5.544604957e-07f, 5.557452535e-07f, 5.570288304e-07f, 5.583112242e-07f, 5.595924331e-07f, 5.608724549e-07f,
+5.621512876e-07f, 5.634289292e-07f, 5.647053776e-07f, 5.659806310e-07f, 5.672546872e-07f, 5.685275442e-07f, 5.697992000e-07f, 5.710696527e-07f, 5.723389002e-07f, 5.736069404e-07f,
+5.748737715e-07f, 5.761393914e-07f, 5.774037982e-07f, 5.786669897e-07f, 5.799289641e-07f, 5.811897193e-07f, 5.824492534e-07f, 5.837075644e-07f, 5.849646502e-07f, 5.862205090e-07f,
+5.874751387e-07f, 5.887285374e-07f, 5.899807031e-07f, 5.912316339e-07f, 5.924813277e-07f, 5.937297826e-07f, 5.949769966e-07f, 5.962229678e-07f, 5.974676943e-07f, 5.987111740e-07f,
+5.999534051e-07f, 6.011943855e-07f, 6.024341133e-07f, 6.036725867e-07f, 6.049098036e-07f, 6.061457621e-07f, 6.073804602e-07f, 6.086138962e-07f, 6.098460679e-07f, 6.110769735e-07f,
+6.123066110e-07f, 6.135349786e-07f, 6.147620743e-07f, 6.159878962e-07f, 6.172124424e-07f, 6.184357109e-07f, 6.196576999e-07f, 6.208784075e-07f, 6.220978316e-07f, 6.233159706e-07f,
+6.245328223e-07f, 6.257483850e-07f, 6.269626568e-07f, 6.281756357e-07f, 6.293873199e-07f, 6.305977074e-07f, 6.318067964e-07f, 6.330145851e-07f, 6.342210715e-07f, 6.354262537e-07f,
+6.366301299e-07f, 6.378326982e-07f, 6.390339568e-07f, 6.402339037e-07f, 6.414325371e-07f, 6.426298552e-07f, 6.438258561e-07f, 6.450205379e-07f, 6.462138987e-07f, 6.474059368e-07f,
+6.485966503e-07f, 6.497860373e-07f, 6.509740960e-07f, 6.521608246e-07f, 6.533462211e-07f, 6.545302839e-07f, 6.557130109e-07f, 6.568944005e-07f, 6.580744508e-07f, 6.592531599e-07f,
+6.604305261e-07f, 6.616065475e-07f, 6.627812222e-07f, 6.639545486e-07f, 6.651265248e-07f, 6.662971489e-07f, 6.674664192e-07f, 6.686343338e-07f, 6.698008910e-07f, 6.709660889e-07f,
+6.721299258e-07f, 6.732923999e-07f, 6.744535094e-07f, 6.756132524e-07f, 6.767716273e-07f, 6.779286322e-07f, 6.790842653e-07f, 6.802385249e-07f, 6.813914092e-07f, 6.825429164e-07f,
+6.836930447e-07f, 6.848417925e-07f, 6.859891579e-07f, 6.871351391e-07f, 6.882797344e-07f, 6.894229421e-07f, 6.905647604e-07f, 6.917051876e-07f, 6.928442218e-07f, 6.939818614e-07f,
+6.951181046e-07f, 6.962529497e-07f, 6.973863949e-07f, 6.985184386e-07f, 6.996490789e-07f, 7.007783142e-07f, 7.019061426e-07f, 7.030325626e-07f, 7.041575724e-07f, 7.052811702e-07f,
+7.064033544e-07f, 7.075241232e-07f, 7.086434749e-07f, 7.097614079e-07f, 7.108779204e-07f, 7.119930107e-07f, 7.131066771e-07f, 7.142189179e-07f, 7.153297315e-07f, 7.164391161e-07f,
+7.175470701e-07f, 7.186535917e-07f, 7.197586794e-07f, 7.208623313e-07f, 7.219645459e-07f, 7.230653215e-07f, 7.241646563e-07f, 7.252625488e-07f, 7.263589972e-07f, 7.274540000e-07f,
+7.285475554e-07f, 7.296396617e-07f, 7.307303174e-07f, 7.318195208e-07f, 7.329072702e-07f, 7.339935641e-07f, 7.350784006e-07f, 7.361617783e-07f, 7.372436954e-07f, 7.383241504e-07f,
+7.394031416e-07f, 7.404806673e-07f, 7.415567261e-07f, 7.426313161e-07f, 7.437044359e-07f, 7.447760838e-07f, 7.458462581e-07f, 7.469149573e-07f, 7.479821798e-07f, 7.490479239e-07f,
+7.501121881e-07f, 7.511749708e-07f, 7.522362703e-07f, 7.532960850e-07f, 7.543544135e-07f, 7.554112540e-07f, 7.564666051e-07f, 7.575204650e-07f, 7.585728323e-07f, 7.596237054e-07f,
+7.606730826e-07f, 7.617209624e-07f, 7.627673433e-07f, 7.638122237e-07f, 7.648556020e-07f, 7.658974767e-07f, 7.669378462e-07f, 7.679767089e-07f, 7.690140633e-07f, 7.700499079e-07f,
+7.710842411e-07f, 7.721170613e-07f, 7.731483671e-07f, 7.741781568e-07f, 7.752064290e-07f, 7.762331822e-07f, 7.772584147e-07f, 7.782821251e-07f, 7.793043119e-07f, 7.803249734e-07f,
+7.813441083e-07f, 7.823617150e-07f, 7.833777920e-07f, 7.843923378e-07f, 7.854053508e-07f, 7.864168297e-07f, 7.874267728e-07f, 7.884351787e-07f, 7.894420458e-07f, 7.904473728e-07f,
+7.914511581e-07f, 7.924534002e-07f, 7.934540977e-07f, 7.944532490e-07f, 7.954508528e-07f, 7.964469074e-07f, 7.974414115e-07f, 7.984343636e-07f, 7.994257623e-07f, 8.004156059e-07f,
+8.014038932e-07f, 8.023906227e-07f, 8.033757928e-07f, 8.043594022e-07f, 8.053414494e-07f, 8.063219330e-07f, 8.073008514e-07f, 8.082782034e-07f, 8.092539874e-07f, 8.102282021e-07f,
+8.112008459e-07f, 8.121719175e-07f, 8.131414154e-07f, 8.141093383e-07f, 8.150756847e-07f, 8.160404532e-07f, 8.170036424e-07f, 8.179652508e-07f, 8.189252771e-07f, 8.198837199e-07f,
+8.208405778e-07f, 8.217958494e-07f, 8.227495333e-07f, 8.237016280e-07f, 8.246521323e-07f, 8.256010447e-07f, 8.265483639e-07f, 8.274940884e-07f, 8.284382170e-07f, 8.293807481e-07f,
+8.303216806e-07f, 8.312610129e-07f, 8.321987438e-07f, 8.331348718e-07f, 8.340693957e-07f, 8.350023140e-07f, 8.359336255e-07f, 8.368633287e-07f, 8.377914224e-07f, 8.387179051e-07f,
+8.396427756e-07f, 8.405660325e-07f, 8.414876745e-07f, 8.424077002e-07f, 8.433261084e-07f, 8.442428977e-07f, 8.451580667e-07f, 8.460716142e-07f, 8.469835389e-07f, 8.478938394e-07f,
+8.488025145e-07f, 8.497095628e-07f, 8.506149830e-07f, 8.515187739e-07f, 8.524209341e-07f, 8.533214623e-07f, 8.542203573e-07f, 8.551176178e-07f, 8.560132424e-07f, 8.569072300e-07f,
+8.577995792e-07f, 8.586902887e-07f, 8.595793574e-07f, 8.604667838e-07f, 8.613525668e-07f, 8.622367051e-07f, 8.631191975e-07f, 8.640000426e-07f, 8.648792392e-07f, 8.657567861e-07f,
+8.666326821e-07f, 8.675069258e-07f, 8.683795161e-07f, 8.692504517e-07f, 8.701197314e-07f, 8.709873539e-07f, 8.718533181e-07f, 8.727176226e-07f, 8.735802663e-07f, 8.744412480e-07f,
+8.753005664e-07f, 8.761582203e-07f, 8.770142085e-07f, 8.778685299e-07f, 8.787211832e-07f, 8.795721672e-07f, 8.804214807e-07f, 8.812691225e-07f, 8.821150914e-07f, 8.829593863e-07f,
+8.838020059e-07f, 8.846429492e-07f, 8.854822148e-07f, 8.863198016e-07f, 8.871557085e-07f, 8.879899343e-07f, 8.888224778e-07f, 8.896533379e-07f, 8.904825133e-07f, 8.913100030e-07f,
+8.921358058e-07f, 8.929599205e-07f, 8.937823460e-07f, 8.946030812e-07f, 8.954221248e-07f, 8.962394759e-07f, 8.970551331e-07f, 8.978690955e-07f, 8.986813619e-07f, 8.994919311e-07f,
+9.003008020e-07f, 9.011079736e-07f, 9.019134446e-07f, 9.027172140e-07f, 9.035192808e-07f, 9.043196436e-07f, 9.051183016e-07f, 9.059152535e-07f, 9.067104983e-07f, 9.075040348e-07f,
+9.082958621e-07f, 9.090859789e-07f, 9.098743843e-07f, 9.106610771e-07f, 9.114460563e-07f, 9.122293207e-07f, 9.130108694e-07f, 9.137907012e-07f, 9.145688151e-07f, 9.153452100e-07f,
+9.161198849e-07f, 9.168928386e-07f, 9.176640703e-07f, 9.184335787e-07f, 9.192013629e-07f, 9.199674218e-07f, 9.207317544e-07f, 9.214943596e-07f, 9.222552365e-07f, 9.230143839e-07f,
+9.237718008e-07f, 9.245274863e-07f, 9.252814393e-07f, 9.260336588e-07f, 9.267841438e-07f, 9.275328932e-07f, 9.282799061e-07f, 9.290251815e-07f, 9.297687183e-07f, 9.305105155e-07f,
+9.312505722e-07f, 9.319888874e-07f, 9.327254601e-07f, 9.334602892e-07f, 9.341933739e-07f, 9.349247131e-07f, 9.356543059e-07f, 9.363821512e-07f, 9.371082482e-07f, 9.378325958e-07f,
+9.385551931e-07f, 9.392760392e-07f, 9.399951330e-07f, 9.407124736e-07f, 9.414280601e-07f, 9.421418915e-07f, 9.428539669e-07f, 9.435642853e-07f, 9.442728459e-07f, 9.449796476e-07f,
+9.456846895e-07f, 9.463879708e-07f, 9.470894904e-07f, 9.477892475e-07f, 9.484872412e-07f, 9.491834705e-07f, 9.498779345e-07f, 9.505706323e-07f, 9.512615630e-07f, 9.519507258e-07f,
+9.526381196e-07f, 9.533237437e-07f, 9.540075970e-07f, 9.546896788e-07f, 9.553699882e-07f, 9.560485242e-07f, 9.567252860e-07f, 9.574002728e-07f, 9.580734835e-07f, 9.587449174e-07f,
+9.594145737e-07f, 9.600824513e-07f, 9.607485496e-07f, 9.614128676e-07f, 9.620754044e-07f, 9.627361593e-07f, 9.633951313e-07f, 9.640523197e-07f, 9.647077235e-07f, 9.653613420e-07f,
+9.660131744e-07f, 9.666632197e-07f, 9.673114772e-07f, 9.679579460e-07f, 9.686026254e-07f, 9.692455144e-07f, 9.698866123e-07f, 9.705259184e-07f, 9.711634316e-07f, 9.717991514e-07f,
+9.724330768e-07f, 9.730652070e-07f, 9.736955414e-07f, 9.743240790e-07f, 9.749508191e-07f, 9.755757609e-07f, 9.761989037e-07f, 9.768202466e-07f, 9.774397888e-07f, 9.780575297e-07f,
+9.786734684e-07f, 9.792876042e-07f, 9.798999362e-07f, 9.805104638e-07f, 9.811191862e-07f, 9.817261027e-07f, 9.823312124e-07f, 9.829345147e-07f, 9.835360088e-07f, 9.841356939e-07f,
+9.847335694e-07f, 9.853296344e-07f, 9.859238884e-07f, 9.865163304e-07f, 9.871069599e-07f, 9.876957761e-07f, 9.882827783e-07f, 9.888679657e-07f, 9.894513377e-07f, 9.900328935e-07f,
+9.906126325e-07f, 9.911905539e-07f, 9.917666571e-07f, 9.923409414e-07f, 9.929134060e-07f, 9.934840503e-07f, 9.940528736e-07f, 9.946198752e-07f, 9.951850545e-07f, 9.957484107e-07f,
+9.963099433e-07f, 9.968696514e-07f, 9.974275346e-07f, 9.979835920e-07f, 9.985378231e-07f, 9.990902272e-07f, 9.996408037e-07f, 1.000189552e-06f, 1.000736471e-06f, 1.001281561e-06f,
+1.001824820e-06f, 1.002366249e-06f, 1.002905846e-06f, 1.003443611e-06f, 1.003979543e-06f, 1.004513642e-06f, 1.005045907e-06f, 1.005576337e-06f, 1.006104932e-06f, 1.006631691e-06f,
+1.007156614e-06f, 1.007679700e-06f, 1.008200948e-06f, 1.008720358e-06f, 1.009237929e-06f, 1.009753661e-06f, 1.010267553e-06f, 1.010779604e-06f, 1.011289815e-06f, 1.011798183e-06f,
+1.012304709e-06f, 1.012809393e-06f, 1.013312233e-06f, 1.013813229e-06f, 1.014312380e-06f, 1.014809687e-06f, 1.015305147e-06f, 1.015798762e-06f, 1.016290530e-06f, 1.016780450e-06f,
+1.017268523e-06f, 1.017754748e-06f, 1.018239123e-06f, 1.018721649e-06f, 1.019202325e-06f, 1.019681151e-06f, 1.020158126e-06f, 1.020633249e-06f, 1.021106521e-06f, 1.021577940e-06f,
+1.022047505e-06f, 1.022515218e-06f, 1.022981076e-06f, 1.023445080e-06f, 1.023907229e-06f, 1.024367522e-06f, 1.024825959e-06f, 1.025282540e-06f, 1.025737264e-06f, 1.026190131e-06f,
+1.026641140e-06f, 1.027090290e-06f, 1.027537581e-06f, 1.027983014e-06f, 1.028426586e-06f, 1.028868299e-06f, 1.029308150e-06f, 1.029746141e-06f, 1.030182270e-06f, 1.030616537e-06f,
+1.031048942e-06f, 1.031479484e-06f, 1.031908162e-06f, 1.032334977e-06f, 1.032759928e-06f, 1.033183014e-06f, 1.033604235e-06f, 1.034023591e-06f, 1.034441081e-06f, 1.034856704e-06f,
+1.035270461e-06f, 1.035682351e-06f, 1.036092374e-06f, 1.036500529e-06f, 1.036906816e-06f, 1.037311234e-06f, 1.037713783e-06f, 1.038114462e-06f, 1.038513272e-06f, 1.038910212e-06f,
+1.039305281e-06f, 1.039698480e-06f, 1.040089807e-06f, 1.040479262e-06f, 1.040866846e-06f, 1.041252557e-06f, 1.041636396e-06f, 1.042018361e-06f, 1.042398454e-06f, 1.042776672e-06f,
+1.043153017e-06f, 1.043527487e-06f, 1.043900082e-06f, 1.044270803e-06f, 1.044639648e-06f, 1.045006617e-06f, 1.045371710e-06f, 1.045734927e-06f, 1.046096268e-06f, 1.046455731e-06f,
+1.046813317e-06f, 1.047169026e-06f, 1.047522856e-06f, 1.047874809e-06f, 1.048224883e-06f, 1.048573078e-06f, 1.048919395e-06f, 1.049263832e-06f, 1.049606389e-06f, 1.049947067e-06f,
+1.050285864e-06f, 1.050622781e-06f, 1.050957818e-06f, 1.051290973e-06f, 1.051622247e-06f, 1.051951640e-06f, 1.052279151e-06f, 1.052604780e-06f, 1.052928527e-06f, 1.053250392e-06f,
+1.053570374e-06f, 1.053888473e-06f, 1.054204688e-06f, 1.054519021e-06f, 1.054831469e-06f, 1.055142034e-06f, 1.055450715e-06f, 1.055757512e-06f, 1.056062424e-06f, 1.056365451e-06f,
+1.056666594e-06f, 1.056965851e-06f, 1.057263223e-06f, 1.057558710e-06f, 1.057852311e-06f, 1.058144026e-06f, 1.058433855e-06f, 1.058721797e-06f, 1.059007853e-06f, 1.059292023e-06f,
+1.059574306e-06f, 1.059854702e-06f, 1.060133211e-06f, 1.060409832e-06f, 1.060684566e-06f, 1.060957412e-06f, 1.061228371e-06f, 1.061497442e-06f, 1.061764624e-06f, 1.062029919e-06f,
+1.062293325e-06f, 1.062554843e-06f, 1.062814472e-06f, 1.063072212e-06f, 1.063328064e-06f, 1.063582026e-06f, 1.063834099e-06f, 1.064084283e-06f, 1.064332578e-06f, 1.064578983e-06f,
+1.064823499e-06f, 1.065066125e-06f, 1.065306862e-06f, 1.065545708e-06f, 1.065782664e-06f, 1.066017731e-06f, 1.066250907e-06f, 1.066482193e-06f, 1.066711589e-06f, 1.066939094e-06f,
+1.067164709e-06f, 1.067388433e-06f, 1.067610267e-06f, 1.067830210e-06f, 1.068048263e-06f, 1.068264424e-06f, 1.068478695e-06f, 1.068691075e-06f, 1.068901564e-06f, 1.069110162e-06f,
+1.069316869e-06f, 1.069521685e-06f, 1.069724610e-06f, 1.069925643e-06f, 1.070124786e-06f, 1.070322037e-06f, 1.070517397e-06f, 1.070710866e-06f, 1.070902444e-06f, 1.071092131e-06f,
+1.071279926e-06f, 1.071465830e-06f, 1.071649842e-06f, 1.071831964e-06f, 1.072012194e-06f, 1.072190533e-06f, 1.072366981e-06f, 1.072541537e-06f, 1.072714203e-06f, 1.072884977e-06f,
+1.073053860e-06f, 1.073220851e-06f, 1.073385952e-06f, 1.073549162e-06f, 1.073710480e-06f, 1.073869908e-06f, 1.074027445e-06f, 1.074183091e-06f, 1.074336846e-06f, 1.074488710e-06f,
+1.074638683e-06f, 1.074786766e-06f, 1.074932958e-06f, 1.075077260e-06f, 1.075219671e-06f, 1.075360192e-06f, 1.075498822e-06f, 1.075635563e-06f, 1.075770413e-06f, 1.075903373e-06f,
+1.076034443e-06f, 1.076163623e-06f, 1.076290913e-06f, 1.076416314e-06f, 1.076539825e-06f, 1.076661447e-06f, 1.076781179e-06f, 1.076899022e-06f, 1.077014976e-06f, 1.077129041e-06f,
+1.077241216e-06f, 1.077351504e-06f, 1.077459902e-06f, 1.077566412e-06f, 1.077671034e-06f, 1.077773767e-06f, 1.077874612e-06f, 1.077973570e-06f, 1.078070639e-06f, 1.078165821e-06f,
+1.078259116e-06f, 1.078350523e-06f, 1.078440043e-06f, 1.078527676e-06f, 1.078613422e-06f, 1.078697281e-06f, 1.078779254e-06f, 1.078859341e-06f, 1.078937541e-06f, 1.079013856e-06f,
+1.079088285e-06f, 1.079160828e-06f, 1.079231486e-06f, 1.079300258e-06f, 1.079367146e-06f, 1.079432149e-06f, 1.079495268e-06f, 1.079556502e-06f, 1.079615851e-06f, 1.079673317e-06f,
+1.079728900e-06f, 1.079782599e-06f, 1.079834414e-06f, 1.079884347e-06f, 1.079932396e-06f, 1.079978564e-06f, 1.080022848e-06f, 1.080065251e-06f, 1.080105772e-06f, 1.080144412e-06f,
+1.080181170e-06f, 1.080216047e-06f, 1.080249043e-06f, 1.080280159e-06f, 1.080309394e-06f, 1.080336750e-06f, 1.080362225e-06f, 1.080385822e-06f, 1.080407539e-06f, 1.080427377e-06f,
+1.080445337e-06f, 1.080461418e-06f, 1.080475621e-06f, 1.080487946e-06f, 1.080498394e-06f, 1.080506965e-06f, 1.080513659e-06f, 1.080518477e-06f, 1.080521418e-06f, 1.080522484e-06f,
+1.080521673e-06f, 1.080518988e-06f, 1.080514428e-06f, 1.080507993e-06f, 1.080499683e-06f, 1.080489500e-06f, 1.080477443e-06f, 1.080463513e-06f, 1.080447710e-06f, 1.080430034e-06f,
+1.080410487e-06f, 1.080389067e-06f, 1.080365775e-06f, 1.080340613e-06f, 1.080313580e-06f, 1.080284676e-06f, 1.080253902e-06f, 1.080221259e-06f, 1.080186746e-06f, 1.080150364e-06f,
+1.080112114e-06f, 1.080071995e-06f, 1.080030009e-06f, 1.079986155e-06f, 1.079940434e-06f, 1.079892847e-06f, 1.079843393e-06f, 1.079792074e-06f, 1.079738889e-06f, 1.079683839e-06f,
+1.079626925e-06f, 1.079568147e-06f, 1.079507504e-06f, 1.079444999e-06f, 1.079380630e-06f, 1.079314399e-06f, 1.079246306e-06f, 1.079176351e-06f, 1.079104536e-06f, 1.079030859e-06f,
+1.078955322e-06f, 1.078877926e-06f, 1.078798670e-06f, 1.078717555e-06f, 1.078634581e-06f, 1.078549750e-06f, 1.078463061e-06f, 1.078374515e-06f, 1.078284112e-06f, 1.078191853e-06f,
+1.078097739e-06f, 1.078001769e-06f, 1.077903945e-06f, 1.077804266e-06f, 1.077702734e-06f, 1.077599349e-06f, 1.077494110e-06f, 1.077387020e-06f, 1.077278078e-06f, 1.077167284e-06f,
+1.077054640e-06f, 1.076940146e-06f, 1.076823802e-06f, 1.076705608e-06f, 1.076585566e-06f, 1.076463676e-06f, 1.076339939e-06f, 1.076214354e-06f, 1.076086923e-06f, 1.075957645e-06f,
+1.075826522e-06f, 1.075693555e-06f, 1.075558743e-06f, 1.075422087e-06f, 1.075283587e-06f, 1.075143245e-06f, 1.075001061e-06f, 1.074857035e-06f, 1.074711169e-06f, 1.074563461e-06f,
+1.074413914e-06f, 1.074262527e-06f, 1.074109302e-06f, 1.073954239e-06f, 1.073797337e-06f, 1.073638599e-06f, 1.073478025e-06f, 1.073315614e-06f, 1.073151368e-06f, 1.072985288e-06f,
+1.072817374e-06f, 1.072647626e-06f, 1.072476045e-06f, 1.072302632e-06f, 1.072127388e-06f, 1.071950312e-06f, 1.071771407e-06f, 1.071590671e-06f, 1.071408106e-06f, 1.071223713e-06f,
+1.071037492e-06f, 1.070849444e-06f, 1.070659569e-06f, 1.070467868e-06f, 1.070274342e-06f, 1.070078991e-06f, 1.069881816e-06f, 1.069682818e-06f, 1.069481997e-06f, 1.069279354e-06f,
+1.069074889e-06f, 1.068868604e-06f, 1.068660499e-06f, 1.068450575e-06f, 1.068238832e-06f, 1.068025270e-06f, 1.067809892e-06f, 1.067592697e-06f, 1.067373685e-06f, 1.067152859e-06f,
+1.066930218e-06f, 1.066705763e-06f, 1.066479495e-06f, 1.066251414e-06f, 1.066021522e-06f, 1.065789818e-06f, 1.065556305e-06f, 1.065320981e-06f, 1.065083849e-06f, 1.064844908e-06f,
+1.064604160e-06f, 1.064361605e-06f, 1.064117244e-06f, 1.063871078e-06f, 1.063623107e-06f, 1.063373333e-06f, 1.063121755e-06f, 1.062868375e-06f, 1.062613193e-06f, 1.062356211e-06f,
+1.062097428e-06f, 1.061836846e-06f, 1.061574466e-06f, 1.061310287e-06f, 1.061044312e-06f, 1.060776540e-06f, 1.060506973e-06f, 1.060235611e-06f, 1.059962456e-06f, 1.059687507e-06f,
+1.059410765e-06f, 1.059132232e-06f, 1.058851908e-06f, 1.058569794e-06f, 1.058285891e-06f, 1.058000200e-06f, 1.057712721e-06f, 1.057423455e-06f, 1.057132403e-06f, 1.056839566e-06f,
+1.056544944e-06f, 1.056248539e-06f, 1.055950351e-06f, 1.055650381e-06f, 1.055348630e-06f, 1.055045099e-06f, 1.054739788e-06f, 1.054432699e-06f, 1.054123832e-06f, 1.053813188e-06f,
+1.053500767e-06f, 1.053186572e-06f, 1.052870602e-06f, 1.052552859e-06f, 1.052233343e-06f, 1.051912055e-06f, 1.051588996e-06f, 1.051264167e-06f, 1.050937569e-06f, 1.050609202e-06f,
+1.050279068e-06f, 1.049947167e-06f, 1.049613500e-06f, 1.049278069e-06f, 1.048940873e-06f, 1.048601915e-06f, 1.048261194e-06f, 1.047918712e-06f, 1.047574469e-06f, 1.047228467e-06f,
+1.046880707e-06f, 1.046531188e-06f, 1.046179913e-06f, 1.045826882e-06f, 1.045472096e-06f, 1.045115556e-06f, 1.044757262e-06f, 1.044397217e-06f, 1.044035420e-06f, 1.043671872e-06f,
+1.043306575e-06f, 1.042939530e-06f, 1.042570737e-06f, 1.042200198e-06f, 1.041827912e-06f, 1.041453882e-06f, 1.041078109e-06f, 1.040700592e-06f, 1.040321333e-06f, 1.039940334e-06f,
+1.039557594e-06f, 1.039173116e-06f, 1.038786899e-06f, 1.038398945e-06f, 1.038009255e-06f, 1.037617830e-06f, 1.037224671e-06f, 1.036829779e-06f, 1.036433154e-06f, 1.036034798e-06f,
+1.035634712e-06f, 1.035232896e-06f, 1.034829353e-06f, 1.034424082e-06f, 1.034017084e-06f, 1.033608362e-06f, 1.033197915e-06f, 1.032785745e-06f, 1.032371853e-06f, 1.031956239e-06f,
+1.031538906e-06f, 1.031119853e-06f, 1.030699082e-06f, 1.030276594e-06f, 1.029852389e-06f, 1.029426470e-06f, 1.028998836e-06f, 1.028569490e-06f, 1.028138431e-06f, 1.027705662e-06f,
+1.027271182e-06f, 1.026834994e-06f, 1.026397098e-06f, 1.025957495e-06f, 1.025516187e-06f, 1.025073173e-06f, 1.024628457e-06f, 1.024182037e-06f, 1.023733917e-06f, 1.023284096e-06f,
+1.022832575e-06f, 1.022379356e-06f, 1.021924441e-06f, 1.021467829e-06f, 1.021009522e-06f, 1.020549521e-06f, 1.020087828e-06f, 1.019624442e-06f, 1.019159366e-06f, 1.018692601e-06f,
+1.018224147e-06f, 1.017754005e-06f, 1.017282178e-06f, 1.016808665e-06f, 1.016333469e-06f, 1.015856589e-06f, 1.015378028e-06f, 1.014897786e-06f, 1.014415864e-06f, 1.013932264e-06f,
+1.013446987e-06f, 1.012960033e-06f, 1.012471405e-06f, 1.011981103e-06f, 1.011489128e-06f, 1.010995481e-06f, 1.010500164e-06f, 1.010003177e-06f, 1.009504522e-06f, 1.009004200e-06f,
+1.008502213e-06f, 1.007998560e-06f, 1.007493245e-06f, 1.006986266e-06f, 1.006477627e-06f, 1.005967327e-06f, 1.005455369e-06f, 1.004941752e-06f, 1.004426480e-06f, 1.003909551e-06f,
+1.003390969e-06f, 1.002870734e-06f, 1.002348847e-06f, 1.001825309e-06f, 1.001300122e-06f, 1.000773286e-06f, 1.000244804e-06f, 9.997146754e-07f, 9.991829024e-07f, 9.986494860e-07f,
+9.981144274e-07f, 9.975777277e-07f, 9.970393882e-07f, 9.964994101e-07f, 9.959577947e-07f, 9.954145431e-07f, 9.948696566e-07f, 9.943231364e-07f, 9.937749837e-07f, 9.932251997e-07f,
+9.926737858e-07f, 9.921207430e-07f, 9.915660728e-07f, 9.910097762e-07f, 9.904518546e-07f, 9.898923093e-07f, 9.893311413e-07f, 9.887683521e-07f, 9.882039428e-07f, 9.876379147e-07f,
+9.870702691e-07f, 9.865010073e-07f, 9.859301305e-07f, 9.853576399e-07f, 9.847835368e-07f, 9.842078226e-07f, 9.836304985e-07f, 9.830515658e-07f, 9.824710256e-07f, 9.818888795e-07f,
+9.813051285e-07f, 9.807197741e-07f, 9.801328174e-07f, 9.795442599e-07f, 9.789541027e-07f, 9.783623473e-07f, 9.777689948e-07f, 9.771740466e-07f, 9.765775040e-07f, 9.759793683e-07f,
+9.753796409e-07f, 9.747783230e-07f, 9.741754159e-07f, 9.735709210e-07f, 9.729648396e-07f, 9.723571730e-07f, 9.717479226e-07f, 9.711370896e-07f, 9.705246755e-07f, 9.699106815e-07f,
+9.692951089e-07f, 9.686779592e-07f, 9.680592337e-07f, 9.674389336e-07f, 9.668170604e-07f, 9.661936154e-07f, 9.655685999e-07f, 9.649420154e-07f, 9.643138631e-07f, 9.636841444e-07f,
+9.630528608e-07f, 9.624200134e-07f, 9.617856038e-07f, 9.611496333e-07f, 9.605121033e-07f, 9.598730150e-07f, 9.592323700e-07f, 9.585901696e-07f, 9.579464151e-07f, 9.573011080e-07f,
+9.566542497e-07f, 9.560058415e-07f, 9.553558848e-07f, 9.547043810e-07f, 9.540513315e-07f, 9.533967378e-07f, 9.527406011e-07f, 9.520829230e-07f, 9.514237048e-07f, 9.507629480e-07f,
+9.501006539e-07f, 9.494368239e-07f, 9.487714595e-07f, 9.481045622e-07f, 9.474361332e-07f, 9.467661741e-07f, 9.460946862e-07f, 9.454216711e-07f, 9.447471300e-07f, 9.440710645e-07f,
+9.433934760e-07f, 9.427143660e-07f, 9.420337358e-07f, 9.413515869e-07f, 9.406679208e-07f, 9.399827389e-07f, 9.392960427e-07f, 9.386078335e-07f, 9.379181129e-07f, 9.372268824e-07f,
+9.365341433e-07f, 9.358398972e-07f, 9.351441455e-07f, 9.344468896e-07f, 9.337481311e-07f, 9.330478714e-07f, 9.323461120e-07f, 9.316428543e-07f, 9.309380999e-07f, 9.302318502e-07f,
+9.295241068e-07f, 9.288148710e-07f, 9.281041444e-07f, 9.273919284e-07f, 9.266782246e-07f, 9.259630345e-07f, 9.252463596e-07f, 9.245282012e-07f, 9.238085611e-07f, 9.230874406e-07f,
+9.223648412e-07f, 9.216407646e-07f, 9.209152121e-07f, 9.201881853e-07f, 9.194596857e-07f, 9.187297149e-07f, 9.179982743e-07f, 9.172653655e-07f, 9.165309900e-07f, 9.157951493e-07f,
+9.150578449e-07f, 9.143190785e-07f, 9.135788515e-07f, 9.128371654e-07f, 9.120940219e-07f, 9.113494223e-07f, 9.106033684e-07f, 9.098558616e-07f, 9.091069034e-07f, 9.083564955e-07f,
+9.076046393e-07f, 9.068513365e-07f, 9.060965886e-07f, 9.053403971e-07f, 9.045827636e-07f, 9.038236897e-07f, 9.030631769e-07f, 9.023012268e-07f, 9.015378411e-07f, 9.007730211e-07f,
+9.000067686e-07f, 8.992390850e-07f, 8.984699721e-07f, 8.976994313e-07f, 8.969274642e-07f, 8.961540725e-07f, 8.953792577e-07f, 8.946030214e-07f, 8.938253652e-07f, 8.930462906e-07f,
+8.922657994e-07f, 8.914838931e-07f, 8.907005732e-07f, 8.899158415e-07f, 8.891296994e-07f, 8.883421486e-07f, 8.875531908e-07f, 8.867628275e-07f, 8.859710603e-07f, 8.851778908e-07f,
+8.843833208e-07f, 8.835873517e-07f, 8.827899853e-07f, 8.819912231e-07f, 8.811910668e-07f, 8.803895180e-07f, 8.795865783e-07f, 8.787822494e-07f, 8.779765328e-07f, 8.771694304e-07f,
+8.763609436e-07f, 8.755510741e-07f, 8.747398235e-07f, 8.739271936e-07f, 8.731131860e-07f, 8.722978022e-07f, 8.714810441e-07f, 8.706629131e-07f, 8.698434110e-07f, 8.690225395e-07f,
+8.682003001e-07f, 8.673766946e-07f, 8.665517246e-07f, 8.657253918e-07f, 8.648976979e-07f, 8.640686445e-07f, 8.632382333e-07f, 8.624064660e-07f, 8.615733442e-07f, 8.607388697e-07f,
+8.599030441e-07f, 8.590658691e-07f, 8.582273463e-07f, 8.573874776e-07f, 8.565462645e-07f, 8.557037088e-07f, 8.548598122e-07f, 8.540145763e-07f, 8.531680028e-07f, 8.523200935e-07f,
+8.514708501e-07f, 8.506202742e-07f, 8.497683675e-07f, 8.489151319e-07f, 8.480605689e-07f, 8.472046803e-07f, 8.463474678e-07f, 8.454889331e-07f, 8.446290780e-07f, 8.437679042e-07f,
+8.429054133e-07f, 8.420416071e-07f, 8.411764874e-07f, 8.403100559e-07f, 8.394423142e-07f, 8.385732642e-07f, 8.377029075e-07f, 8.368312459e-07f, 8.359582812e-07f, 8.350840151e-07f,
+8.342084492e-07f, 8.333315855e-07f, 8.324534255e-07f, 8.315739711e-07f, 8.306932240e-07f, 8.298111860e-07f, 8.289278588e-07f, 8.280432441e-07f, 8.271573438e-07f, 8.262701596e-07f,
+8.253816932e-07f, 8.244919465e-07f, 8.236009211e-07f, 8.227086189e-07f, 8.218150416e-07f, 8.209201910e-07f, 8.200240688e-07f, 8.191266769e-07f, 8.182280170e-07f, 8.173280909e-07f,
+8.164269004e-07f, 8.155244472e-07f, 8.146207332e-07f, 8.137157601e-07f, 8.128095297e-07f, 8.119020438e-07f, 8.109933042e-07f, 8.100833128e-07f, 8.091720712e-07f, 8.082595813e-07f,
+8.073458449e-07f, 8.064308638e-07f, 8.055146397e-07f, 8.045971746e-07f, 8.036784702e-07f, 8.027585283e-07f, 8.018373507e-07f, 8.009149393e-07f, 7.999912958e-07f, 7.990664221e-07f,
+7.981403199e-07f, 7.972129912e-07f, 7.962844377e-07f, 7.953546613e-07f, 7.944236637e-07f, 7.934914469e-07f, 7.925580126e-07f, 7.916233626e-07f, 7.906874989e-07f, 7.897504232e-07f,
+7.888121373e-07f, 7.878726432e-07f, 7.869319426e-07f, 7.859900374e-07f, 7.850469295e-07f, 7.841026206e-07f, 7.831571126e-07f, 7.822104075e-07f, 7.812625069e-07f, 7.803134128e-07f,
+7.793631271e-07f, 7.784116515e-07f, 7.774589880e-07f, 7.765051384e-07f, 7.755501046e-07f, 7.745938884e-07f, 7.736364917e-07f, 7.726779163e-07f, 7.717181642e-07f, 7.707572371e-07f,
+7.697951371e-07f, 7.688318658e-07f, 7.678674253e-07f, 7.669018174e-07f, 7.659350440e-07f, 7.649671069e-07f, 7.639980080e-07f, 7.630277493e-07f, 7.620563326e-07f, 7.610837597e-07f,
+7.601100327e-07f, 7.591351533e-07f, 7.581591234e-07f, 7.571819450e-07f, 7.562036200e-07f, 7.552241502e-07f, 7.542435376e-07f, 7.532617840e-07f, 7.522788913e-07f, 7.512948615e-07f,
+7.503096965e-07f, 7.493233981e-07f, 7.483359683e-07f, 7.473474090e-07f, 7.463577220e-07f, 7.453669094e-07f, 7.443749730e-07f, 7.433819147e-07f, 7.423877365e-07f, 7.413924402e-07f,
+7.403960279e-07f, 7.393985014e-07f, 7.383998626e-07f, 7.374001135e-07f, 7.363992560e-07f, 7.353972920e-07f, 7.343942235e-07f, 7.333900524e-07f, 7.323847806e-07f, 7.313784101e-07f,
+7.303709428e-07f, 7.293623806e-07f, 7.283527255e-07f, 7.273419795e-07f, 7.263301444e-07f, 7.253172222e-07f, 7.243032148e-07f, 7.232881243e-07f, 7.222719526e-07f, 7.212547015e-07f,
+7.202363731e-07f, 7.192169693e-07f, 7.181964922e-07f, 7.171749435e-07f, 7.161523253e-07f, 7.151286396e-07f, 7.141038883e-07f, 7.130780734e-07f, 7.120511968e-07f, 7.110232605e-07f,
+7.099942665e-07f, 7.089642168e-07f, 7.079331133e-07f, 7.069009579e-07f, 7.058677528e-07f, 7.048334998e-07f, 7.037982009e-07f, 7.027618581e-07f, 7.017244734e-07f, 7.006860487e-07f,
+6.996465861e-07f, 6.986060875e-07f, 6.975645550e-07f, 6.965219904e-07f, 6.954783958e-07f, 6.944337732e-07f, 6.933881246e-07f, 6.923414520e-07f, 6.912937573e-07f, 6.902450426e-07f,
+6.891953098e-07f, 6.881445610e-07f, 6.870927982e-07f, 6.860400233e-07f, 6.849862384e-07f, 6.839314454e-07f, 6.828756465e-07f, 6.818188435e-07f, 6.807610385e-07f, 6.797022335e-07f,
+6.786424305e-07f, 6.775816315e-07f, 6.765198386e-07f, 6.754570537e-07f, 6.743932789e-07f, 6.733285162e-07f, 6.722627676e-07f, 6.711960352e-07f, 6.701283209e-07f, 6.690596268e-07f,
+6.679899549e-07f, 6.669193072e-07f, 6.658476858e-07f, 6.647750927e-07f, 6.637015299e-07f, 6.626269995e-07f, 6.615515034e-07f, 6.604750438e-07f, 6.593976227e-07f, 6.583192420e-07f,
+6.572399039e-07f, 6.561596103e-07f, 6.550783634e-07f, 6.539961652e-07f, 6.529130176e-07f, 6.518289228e-07f, 6.507438828e-07f, 6.496578997e-07f, 6.485709754e-07f, 6.474831121e-07f,
+6.463943118e-07f, 6.453045765e-07f, 6.442139084e-07f, 6.431223094e-07f, 6.420297817e-07f, 6.409363272e-07f, 6.398419480e-07f, 6.387466463e-07f, 6.376504240e-07f, 6.365532832e-07f,
+6.354552261e-07f, 6.343562546e-07f, 6.332563708e-07f, 6.321555768e-07f, 6.310538746e-07f, 6.299512664e-07f, 6.288477542e-07f, 6.277433401e-07f, 6.266380261e-07f, 6.255318143e-07f,
+6.244247069e-07f, 6.233167058e-07f, 6.222078132e-07f, 6.210980311e-07f, 6.199873617e-07f, 6.188758069e-07f, 6.177633690e-07f, 6.166500499e-07f, 6.155358518e-07f, 6.144207767e-07f,
+6.133048268e-07f, 6.121880041e-07f, 6.110703107e-07f, 6.099517487e-07f, 6.088323203e-07f, 6.077120274e-07f, 6.065908722e-07f, 6.054688568e-07f, 6.043459833e-07f, 6.032222538e-07f,
+6.020976704e-07f, 6.009722351e-07f, 5.998459502e-07f, 5.987188176e-07f, 5.975908396e-07f, 5.964620181e-07f, 5.953323554e-07f, 5.942018535e-07f, 5.930705145e-07f, 5.919383405e-07f,
+5.908053337e-07f, 5.896714962e-07f, 5.885368300e-07f, 5.874013374e-07f, 5.862650203e-07f, 5.851278810e-07f, 5.839899215e-07f, 5.828511439e-07f, 5.817115505e-07f, 5.805711432e-07f,
+5.794299243e-07f, 5.782878958e-07f, 5.771450599e-07f, 5.760014186e-07f, 5.748569742e-07f, 5.737117287e-07f, 5.725656844e-07f, 5.714188432e-07f, 5.702712073e-07f, 5.691227790e-07f,
+5.679735602e-07f, 5.668235531e-07f, 5.656727599e-07f, 5.645211828e-07f, 5.633688237e-07f, 5.622156849e-07f, 5.610617686e-07f, 5.599070768e-07f, 5.587516117e-07f, 5.575953754e-07f,
+5.564383701e-07f, 5.552805979e-07f, 5.541220610e-07f, 5.529627615e-07f, 5.518027015e-07f, 5.506418833e-07f, 5.494803089e-07f, 5.483179804e-07f, 5.471549002e-07f, 5.459910702e-07f,
+5.448264927e-07f, 5.436611698e-07f, 5.424951037e-07f, 5.413282964e-07f, 5.401607502e-07f, 5.389924673e-07f, 5.378234497e-07f, 5.366536997e-07f, 5.354832194e-07f, 5.343120109e-07f,
+5.331400764e-07f, 5.319674182e-07f, 5.307940382e-07f, 5.296199388e-07f, 5.284451220e-07f, 5.272695901e-07f, 5.260933452e-07f, 5.249163894e-07f, 5.237387250e-07f, 5.225603541e-07f,
+5.213812789e-07f, 5.202015015e-07f, 5.190210241e-07f, 5.178398489e-07f, 5.166579781e-07f, 5.154754138e-07f, 5.142921582e-07f, 5.131082136e-07f, 5.119235819e-07f, 5.107382655e-07f,
+5.095522666e-07f, 5.083655872e-07f, 5.071782296e-07f, 5.059901960e-07f, 5.048014885e-07f, 5.036121093e-07f, 5.024220606e-07f, 5.012313446e-07f, 5.000399635e-07f, 4.988479194e-07f,
+4.976552145e-07f, 4.964618511e-07f, 4.952678314e-07f, 4.940731574e-07f, 4.928778314e-07f, 4.916818556e-07f, 4.904852321e-07f, 4.892879632e-07f, 4.880900511e-07f, 4.868914980e-07f,
+4.856923059e-07f, 4.844924772e-07f, 4.832920141e-07f, 4.820909186e-07f, 4.808891931e-07f, 4.796868397e-07f, 4.784838607e-07f, 4.772802581e-07f, 4.760760343e-07f, 4.748711913e-07f,
+4.736657315e-07f, 4.724596570e-07f, 4.712529701e-07f, 4.700456728e-07f, 4.688377675e-07f, 4.676292563e-07f, 4.664201414e-07f, 4.652104251e-07f, 4.640001096e-07f, 4.627891969e-07f,
+4.615776895e-07f, 4.603655894e-07f, 4.591528989e-07f, 4.579396202e-07f, 4.567257554e-07f, 4.555113069e-07f, 4.542962768e-07f, 4.530806673e-07f, 4.518644807e-07f, 4.506477191e-07f,
+4.494303848e-07f, 4.482124800e-07f, 4.469940069e-07f, 4.457749677e-07f, 4.445553647e-07f, 4.433351999e-07f, 4.421144758e-07f, 4.408931944e-07f, 4.396713580e-07f, 4.384489689e-07f,
+4.372260292e-07f, 4.360025411e-07f, 4.347785070e-07f, 4.335539289e-07f, 4.323288092e-07f, 4.311031500e-07f, 4.298769536e-07f, 4.286502222e-07f, 4.274229580e-07f, 4.261951633e-07f,
+4.249668402e-07f, 4.237379910e-07f, 4.225086180e-07f, 4.212787233e-07f, 4.200483091e-07f, 4.188173778e-07f, 4.175859315e-07f, 4.163539725e-07f, 4.151215030e-07f, 4.138885252e-07f,
+4.126550413e-07f, 4.114210536e-07f, 4.101865644e-07f, 4.089515758e-07f, 4.077160900e-07f, 4.064801094e-07f, 4.052436361e-07f, 4.040066725e-07f, 4.027692206e-07f, 4.015312828e-07f,
+4.002928612e-07f, 3.990539582e-07f, 3.978145759e-07f, 3.965747167e-07f, 3.953343827e-07f, 3.940935761e-07f, 3.928522992e-07f, 3.916105543e-07f, 3.903683436e-07f, 3.891256693e-07f,
+3.878825337e-07f, 3.866389389e-07f, 3.853948873e-07f, 3.841503811e-07f, 3.829054225e-07f, 3.816600138e-07f, 3.804141572e-07f, 3.791678550e-07f, 3.779211093e-07f, 3.766739225e-07f,
+3.754262968e-07f, 3.741782344e-07f, 3.729297376e-07f, 3.716808086e-07f, 3.704314496e-07f, 3.691816630e-07f, 3.679314509e-07f, 3.666808156e-07f, 3.654297594e-07f, 3.641782844e-07f,
+3.629263930e-07f, 3.616740874e-07f, 3.604213699e-07f, 3.591682426e-07f, 3.579147078e-07f, 3.566607678e-07f, 3.554064249e-07f, 3.541516812e-07f, 3.528965391e-07f, 3.516410007e-07f,
+3.503850684e-07f, 3.491287444e-07f, 3.478720309e-07f, 3.466149302e-07f, 3.453574445e-07f, 3.440995761e-07f, 3.428413273e-07f, 3.415827003e-07f, 3.403236973e-07f, 3.390643206e-07f,
+3.378045724e-07f, 3.365444551e-07f, 3.352839708e-07f, 3.340231218e-07f, 3.327619105e-07f, 3.315003389e-07f, 3.302384094e-07f, 3.289761243e-07f, 3.277134857e-07f, 3.264504960e-07f,
+3.251871574e-07f, 3.239234721e-07f, 3.226594425e-07f, 3.213950707e-07f, 3.201303590e-07f, 3.188653098e-07f, 3.175999251e-07f, 3.163342074e-07f, 3.150681588e-07f, 3.138017817e-07f,
+3.125350782e-07f, 3.112680506e-07f, 3.100007013e-07f, 3.087330323e-07f, 3.074650461e-07f, 3.061967448e-07f, 3.049281308e-07f, 3.036592062e-07f, 3.023899734e-07f, 3.011204346e-07f,
+2.998505920e-07f, 2.985804479e-07f, 2.973100047e-07f, 2.960392644e-07f, 2.947682295e-07f, 2.934969021e-07f, 2.922252845e-07f, 2.909533790e-07f, 2.896811878e-07f, 2.884087133e-07f,
+2.871359576e-07f, 2.858629230e-07f, 2.845896118e-07f, 2.833160262e-07f, 2.820421686e-07f, 2.807680411e-07f, 2.794936460e-07f, 2.782189856e-07f, 2.769440621e-07f, 2.756688779e-07f,
+2.743934351e-07f, 2.731177361e-07f, 2.718417830e-07f, 2.705655783e-07f, 2.692891240e-07f, 2.680124225e-07f, 2.667354760e-07f, 2.654582869e-07f, 2.641808573e-07f, 2.629031895e-07f,
+2.616252858e-07f, 2.603471485e-07f, 2.590687797e-07f, 2.577901819e-07f, 2.565113572e-07f, 2.552323078e-07f, 2.539530362e-07f, 2.526735444e-07f, 2.513938348e-07f, 2.501139097e-07f,
+2.488337713e-07f, 2.475534218e-07f, 2.462728636e-07f, 2.449920989e-07f, 2.437111299e-07f, 2.424299589e-07f, 2.411485883e-07f, 2.398670201e-07f, 2.385852567e-07f, 2.373033005e-07f,
+2.360211535e-07f, 2.347388181e-07f, 2.334562966e-07f, 2.321735911e-07f, 2.308907041e-07f, 2.296076376e-07f, 2.283243941e-07f, 2.270409757e-07f, 2.257573847e-07f, 2.244736234e-07f,
+2.231896940e-07f, 2.219055989e-07f, 2.206213402e-07f, 2.193369201e-07f, 2.180523411e-07f, 2.167676053e-07f, 2.154827150e-07f, 2.141976725e-07f, 2.129124800e-07f, 2.116271397e-07f,
+2.103416540e-07f, 2.090560251e-07f, 2.077702552e-07f, 2.064843467e-07f, 2.051983017e-07f, 2.039121226e-07f, 2.026258115e-07f, 2.013393708e-07f, 2.000528027e-07f, 1.987661095e-07f,
+1.974792934e-07f, 1.961923567e-07f, 1.949053016e-07f, 1.936181304e-07f, 1.923308454e-07f, 1.910434488e-07f, 1.897559428e-07f, 1.884683298e-07f, 1.871806120e-07f, 1.858927916e-07f,
+1.846048709e-07f, 1.833168521e-07f, 1.820287376e-07f, 1.807405295e-07f, 1.794522301e-07f, 1.781638417e-07f, 1.768753665e-07f, 1.755868069e-07f, 1.742981649e-07f, 1.730094430e-07f,
+1.717206432e-07f, 1.704317680e-07f, 1.691428195e-07f, 1.678538001e-07f, 1.665647119e-07f, 1.652755572e-07f, 1.639863382e-07f, 1.626970573e-07f, 1.614077167e-07f, 1.601183185e-07f,
+1.588288652e-07f, 1.575393588e-07f, 1.562498017e-07f, 1.549601962e-07f, 1.536705444e-07f, 1.523808486e-07f, 1.510911111e-07f, 1.498013341e-07f, 1.485115199e-07f, 1.472216707e-07f,
+1.459317887e-07f, 1.446418763e-07f, 1.433519356e-07f, 1.420619690e-07f, 1.407719785e-07f, 1.394819666e-07f, 1.381919354e-07f, 1.369018873e-07f, 1.356118243e-07f, 1.343217488e-07f,
+1.330316631e-07f, 1.317415693e-07f, 1.304514697e-07f, 1.291613666e-07f, 1.278712622e-07f, 1.265811587e-07f, 1.252910585e-07f, 1.240009636e-07f, 1.227108764e-07f, 1.214207991e-07f,
+1.201307340e-07f, 1.188406832e-07f, 1.175506491e-07f, 1.162606339e-07f, 1.149706397e-07f, 1.136806689e-07f, 1.123907237e-07f, 1.111008063e-07f, 1.098109190e-07f, 1.085210640e-07f,
+1.072312435e-07f, 1.059414598e-07f, 1.046517150e-07f, 1.033620116e-07f, 1.020723516e-07f, 1.007827373e-07f, 9.949317090e-08f, 9.820365471e-08f, 9.691419094e-08f, 9.562478181e-08f,
+9.433542955e-08f, 9.304613639e-08f, 9.175690457e-08f, 9.046773632e-08f, 8.917863385e-08f, 8.788959942e-08f, 8.660063523e-08f, 8.531174353e-08f, 8.402292654e-08f, 8.273418648e-08f,
+8.144552559e-08f, 8.015694609e-08f, 7.886845020e-08f, 7.758004015e-08f, 7.629171817e-08f, 7.500348648e-08f, 7.371534730e-08f, 7.242730286e-08f, 7.113935538e-08f, 6.985150708e-08f,
+6.856376018e-08f, 6.727611690e-08f, 6.598857947e-08f, 6.470115010e-08f, 6.341383101e-08f, 6.212662443e-08f, 6.083953256e-08f, 5.955255763e-08f, 5.826570185e-08f, 5.697896744e-08f,
+5.569235662e-08f, 5.440587160e-08f, 5.311951459e-08f, 5.183328781e-08f, 5.054719347e-08f, 4.926123379e-08f, 4.797541097e-08f, 4.668972723e-08f, 4.540418478e-08f, 4.411878583e-08f,
+4.283353258e-08f, 4.154842726e-08f, 4.026347205e-08f, 3.897866918e-08f, 3.769402086e-08f, 3.640952927e-08f, 3.512519664e-08f, 3.384102517e-08f, 3.255701705e-08f, 3.127317450e-08f,
+2.998949972e-08f, 2.870599491e-08f, 2.742266227e-08f, 2.613950400e-08f, 2.485652231e-08f, 2.357371939e-08f, 2.229109744e-08f, 2.100865866e-08f, 1.972640524e-08f, 1.844433939e-08f,
+1.716246331e-08f, 1.588077917e-08f, 1.459928919e-08f, 1.331799555e-08f, 1.203690045e-08f, 1.075600607e-08f, 9.475314621e-09f, 8.194828283e-09f, 6.914549247e-09f, 5.634479704e-09f,
+4.354621843e-09f, 3.074977851e-09f, 1.795549916e-09f, 5.163402239e-10f, -7.626490387e-10f, -2.041415687e-09f, -3.319957536e-09f, -4.598272404e-09f, -5.876358106e-09f, -7.154212462e-09f,
+-8.431833289e-09f, -9.709218408e-09f, -1.098636564e-08f, -1.226327280e-08f, -1.353993772e-08f, -1.481635822e-08f, -1.609253211e-08f, -1.736845724e-08f, -1.864413141e-08f, -1.991955246e-08f,
+-2.119471821e-08f, -2.246962650e-08f, -2.374427514e-08f, -2.501866198e-08f, -2.629278483e-08f, -2.756664153e-08f, -2.884022991e-08f, -3.011354781e-08f, -3.138659306e-08f, -3.265936348e-08f,
+-3.393185693e-08f, -3.520407122e-08f, -3.647600421e-08f, -3.774765372e-08f, -3.901901760e-08f, -4.029009369e-08f, -4.156087982e-08f, -4.283137384e-08f, -4.410157359e-08f, -4.537147691e-08f,
+-4.664108165e-08f, -4.791038564e-08f, -4.917938675e-08f, -5.044808281e-08f, -5.171647167e-08f, -5.298455117e-08f, -5.425231918e-08f, -5.551977353e-08f, -5.678691209e-08f, -5.805373269e-08f,
+-5.932023320e-08f, -6.058641147e-08f, -6.185226535e-08f, -6.311779270e-08f, -6.438299138e-08f, -6.564785924e-08f, -6.691239414e-08f, -6.817659394e-08f, -6.944045651e-08f, -7.070397970e-08f,
+-7.196716137e-08f, -7.322999939e-08f, -7.449249163e-08f, -7.575463595e-08f, -7.701643021e-08f, -7.827787228e-08f, -7.953896003e-08f, -8.079969133e-08f, -8.206006406e-08f, -8.332007607e-08f,
+-8.457972525e-08f, -8.583900946e-08f, -8.709792659e-08f, -8.835647450e-08f, -8.961465107e-08f, -9.087245418e-08f, -9.212988171e-08f, -9.338693154e-08f, -9.464360154e-08f, -9.589988961e-08f,
+-9.715579361e-08f, -9.841131144e-08f, -9.966644097e-08f, -1.009211801e-07f, -1.021755267e-07f, -1.034294787e-07f, -1.046830339e-07f, -1.059361903e-07f, -1.071889457e-07f, -1.084412981e-07f,
+-1.096932453e-07f, -1.109447851e-07f, -1.121959156e-07f, -1.134466346e-07f, -1.146969400e-07f, -1.159468298e-07f, -1.171963017e-07f, -1.184453537e-07f, -1.196939837e-07f, -1.209421896e-07f,
+-1.221899694e-07f, -1.234373208e-07f, -1.246842419e-07f, -1.259307305e-07f, -1.271767845e-07f, -1.284224019e-07f, -1.296675805e-07f, -1.309123183e-07f, -1.321566132e-07f, -1.334004631e-07f,
+-1.346438658e-07f, -1.358868194e-07f, -1.371293218e-07f, -1.383713708e-07f, -1.396129644e-07f, -1.408541004e-07f, -1.420947770e-07f, -1.433349918e-07f, -1.445747429e-07f, -1.458140282e-07f,
+-1.470528457e-07f, -1.482911931e-07f, -1.495290686e-07f, -1.507664700e-07f, -1.520033952e-07f, -1.532398421e-07f, -1.544758088e-07f, -1.557112931e-07f, -1.569462930e-07f, -1.581808064e-07f,
+-1.594148313e-07f, -1.606483655e-07f, -1.618814071e-07f, -1.631139539e-07f, -1.643460040e-07f, -1.655775552e-07f, -1.668086055e-07f, -1.680391529e-07f, -1.692691953e-07f, -1.704987306e-07f,
+-1.717277568e-07f, -1.729562719e-07f, -1.741842738e-07f, -1.754117604e-07f, -1.766387297e-07f, -1.778651798e-07f, -1.790911084e-07f, -1.803165137e-07f, -1.815413935e-07f, -1.827657458e-07f,
+-1.839895686e-07f, -1.852128598e-07f, -1.864356174e-07f, -1.876578394e-07f, -1.888795237e-07f, -1.901006684e-07f, -1.913212713e-07f, -1.925413305e-07f, -1.937608439e-07f, -1.949798095e-07f,
+-1.961982252e-07f, -1.974160892e-07f, -1.986333992e-07f, -1.998501534e-07f, -2.010663497e-07f, -2.022819860e-07f, -2.034970604e-07f, -2.047115709e-07f, -2.059255153e-07f, -2.071388918e-07f,
+-2.083516983e-07f, -2.095639328e-07f, -2.107755933e-07f, -2.119866778e-07f, -2.131971843e-07f, -2.144071107e-07f, -2.156164551e-07f, -2.168252155e-07f, -2.180333899e-07f, -2.192409762e-07f,
+-2.204479725e-07f, -2.216543767e-07f, -2.228601870e-07f, -2.240654013e-07f, -2.252700175e-07f, -2.264740338e-07f, -2.276774480e-07f, -2.288802584e-07f, -2.300824627e-07f, -2.312840591e-07f,
+-2.324850456e-07f, -2.336854202e-07f, -2.348851809e-07f, -2.360843258e-07f, -2.372828528e-07f, -2.384807600e-07f, -2.396780454e-07f, -2.408747070e-07f, -2.420707429e-07f, -2.432661511e-07f,
+-2.444609296e-07f, -2.456550765e-07f, -2.468485898e-07f, -2.480414675e-07f, -2.492337076e-07f, -2.504253082e-07f, -2.516162674e-07f, -2.528065832e-07f, -2.539962536e-07f, -2.551852766e-07f,
+-2.563736504e-07f, -2.575613729e-07f, -2.587484422e-07f, -2.599348564e-07f, -2.611206134e-07f, -2.623057115e-07f, -2.634901485e-07f, -2.646739227e-07f, -2.658570319e-07f, -2.670394744e-07f,
+-2.682212480e-07f, -2.694023510e-07f, -2.705827814e-07f, -2.717625372e-07f, -2.729416165e-07f, -2.741200174e-07f, -2.752977379e-07f, -2.764747761e-07f, -2.776511301e-07f, -2.788267979e-07f,
+-2.800017777e-07f, -2.811760675e-07f, -2.823496654e-07f, -2.835225694e-07f, -2.846947777e-07f, -2.858662883e-07f, -2.870370993e-07f, -2.882072089e-07f, -2.893766150e-07f, -2.905453158e-07f,
+-2.917133093e-07f, -2.928805938e-07f, -2.940471671e-07f, -2.952130276e-07f, -2.963781732e-07f, -2.975426020e-07f, -2.987063121e-07f, -2.998693018e-07f, -3.010315689e-07f, -3.021931117e-07f,
+-3.033539283e-07f, -3.045140168e-07f, -3.056733752e-07f, -3.068320017e-07f, -3.079898945e-07f, -3.091470515e-07f, -3.103034710e-07f, -3.114591510e-07f, -3.126140897e-07f, -3.137682852e-07f,
+-3.149217357e-07f, -3.160744391e-07f, -3.172263937e-07f, -3.183775977e-07f, -3.195280490e-07f, -3.206777459e-07f, -3.218266865e-07f, -3.229748689e-07f, -3.241222912e-07f, -3.252689516e-07f,
+-3.264148483e-07f, -3.275599794e-07f, -3.287043429e-07f, -3.298479371e-07f, -3.309907602e-07f, -3.321328101e-07f, -3.332740852e-07f, -3.344145835e-07f, -3.355543032e-07f, -3.366932425e-07f,
+-3.378313995e-07f, -3.389687724e-07f, -3.401053592e-07f, -3.412411583e-07f, -3.423761677e-07f, -3.435103857e-07f, -3.446438103e-07f, -3.457764398e-07f, -3.469082723e-07f, -3.480393059e-07f,
+-3.491695390e-07f, -3.502989695e-07f, -3.514275958e-07f, -3.525554160e-07f, -3.536824282e-07f, -3.548086307e-07f, -3.559340216e-07f, -3.570585992e-07f, -3.581823615e-07f, -3.593053068e-07f,
+-3.604274333e-07f, -3.615487392e-07f, -3.626692226e-07f, -3.637888818e-07f, -3.649077150e-07f, -3.660257203e-07f, -3.671428960e-07f, -3.682592402e-07f, -3.693747512e-07f, -3.704894272e-07f,
+-3.716032663e-07f, -3.727162668e-07f, -3.738284269e-07f, -3.749397448e-07f, -3.760502188e-07f, -3.771598469e-07f, -3.782686276e-07f, -3.793765589e-07f, -3.804836391e-07f, -3.815898664e-07f,
+-3.826952391e-07f, -3.837997553e-07f, -3.849034133e-07f, -3.860062114e-07f, -3.871081477e-07f, -3.882092205e-07f, -3.893094281e-07f, -3.904087686e-07f, -3.915072404e-07f, -3.926048416e-07f,
+-3.937015704e-07f, -3.947974253e-07f, -3.958924043e-07f, -3.969865057e-07f, -3.980797279e-07f, -3.991720689e-07f, -4.002635272e-07f, -4.013541009e-07f, -4.024437883e-07f, -4.035325877e-07f,
+-4.046204973e-07f, -4.057075154e-07f, -4.067936403e-07f, -4.078788701e-07f, -4.089632033e-07f, -4.100466380e-07f, -4.111291726e-07f, -4.122108053e-07f, -4.132915343e-07f, -4.143713581e-07f,
+-4.154502747e-07f, -4.165282826e-07f, -4.176053801e-07f, -4.186815653e-07f, -4.197568365e-07f, -4.208311922e-07f, -4.219046305e-07f, -4.229771498e-07f, -4.240487484e-07f, -4.251194244e-07f,
+-4.261891764e-07f, -4.272580025e-07f, -4.283259010e-07f, -4.293928703e-07f, -4.304589087e-07f, -4.315240144e-07f, -4.325881858e-07f, -4.336514212e-07f, -4.347137190e-07f, -4.357750773e-07f,
+-4.368354946e-07f, -4.378949692e-07f, -4.389534994e-07f, -4.400110834e-07f, -4.410677197e-07f, -4.421234066e-07f, -4.431781423e-07f, -4.442319253e-07f, -4.452847539e-07f, -4.463366263e-07f,
+-4.473875410e-07f, -4.484374963e-07f, -4.494864904e-07f, -4.505345218e-07f, -4.515815889e-07f, -4.526276898e-07f, -4.536728231e-07f, -4.547169871e-07f, -4.557601800e-07f, -4.568024003e-07f,
+-4.578436463e-07f, -4.588839164e-07f, -4.599232089e-07f, -4.609615222e-07f, -4.619988547e-07f, -4.630352048e-07f, -4.640705707e-07f, -4.651049509e-07f, -4.661383438e-07f, -4.671707476e-07f,
+-4.682021609e-07f, -4.692325820e-07f, -4.702620092e-07f, -4.712904409e-07f, -4.723178756e-07f, -4.733443116e-07f, -4.743697473e-07f, -4.753941811e-07f, -4.764176114e-07f, -4.774400366e-07f,
+-4.784614551e-07f, -4.794818652e-07f, -4.805012654e-07f, -4.815196542e-07f, -4.825370298e-07f, -4.835533907e-07f, -4.845687353e-07f, -4.855830620e-07f, -4.865963693e-07f, -4.876086555e-07f,
+-4.886199191e-07f, -4.896301585e-07f, -4.906393721e-07f, -4.916475583e-07f, -4.926547156e-07f, -4.936608424e-07f, -4.946659370e-07f, -4.956699981e-07f, -4.966730239e-07f, -4.976750130e-07f,
+-4.986759637e-07f, -4.996758745e-07f, -5.006747438e-07f, -5.016725701e-07f, -5.026693519e-07f, -5.036650876e-07f, -5.046597756e-07f, -5.056534143e-07f, -5.066460023e-07f, -5.076375381e-07f,
+-5.086280199e-07f, -5.096174464e-07f, -5.106058160e-07f, -5.115931271e-07f, -5.125793783e-07f, -5.135645679e-07f, -5.145486945e-07f, -5.155317565e-07f, -5.165137525e-07f, -5.174946808e-07f,
+-5.184745400e-07f, -5.194533285e-07f, -5.204310449e-07f, -5.214076876e-07f, -5.223832551e-07f, -5.233577459e-07f, -5.243311585e-07f, -5.253034914e-07f, -5.262747431e-07f, -5.272449121e-07f,
+-5.282139968e-07f, -5.291819959e-07f, -5.301489078e-07f, -5.311147309e-07f, -5.320794639e-07f, -5.330431052e-07f, -5.340056534e-07f, -5.349671069e-07f, -5.359274643e-07f, -5.368867241e-07f,
+-5.378448849e-07f, -5.388019451e-07f, -5.397579032e-07f, -5.407127579e-07f, -5.416665076e-07f, -5.426191509e-07f, -5.435706863e-07f, -5.445211124e-07f, -5.454704276e-07f, -5.464186306e-07f,
+-5.473657199e-07f, -5.483116940e-07f, -5.492565515e-07f, -5.502002909e-07f, -5.511429108e-07f, -5.520844097e-07f, -5.530247862e-07f, -5.539640389e-07f, -5.549021663e-07f, -5.558391670e-07f,
+-5.567750395e-07f, -5.577097825e-07f, -5.586433944e-07f, -5.595758739e-07f, -5.605072196e-07f, -5.614374300e-07f, -5.623665037e-07f, -5.632944393e-07f, -5.642212353e-07f, -5.651468904e-07f,
+-5.660714032e-07f, -5.669947722e-07f, -5.679169960e-07f, -5.688380732e-07f, -5.697580025e-07f, -5.706767824e-07f, -5.715944116e-07f, -5.725108885e-07f, -5.734262120e-07f, -5.743403804e-07f,
+-5.752533926e-07f, -5.761652470e-07f, -5.770759423e-07f, -5.779854771e-07f, -5.788938500e-07f, -5.798010597e-07f, -5.807071048e-07f, -5.816119839e-07f, -5.825156957e-07f, -5.834182387e-07f,
+-5.843196116e-07f, -5.852198131e-07f, -5.861188417e-07f, -5.870166962e-07f, -5.879133752e-07f, -5.888088772e-07f, -5.897032010e-07f, -5.905963453e-07f, -5.914883086e-07f, -5.923790896e-07f,
+-5.932686870e-07f, -5.941570994e-07f, -5.950443255e-07f, -5.959303640e-07f, -5.968152135e-07f, -5.976988728e-07f, -5.985813404e-07f, -5.994626150e-07f, -6.003426953e-07f, -6.012215801e-07f,
+-6.020992679e-07f, -6.029757575e-07f, -6.038510475e-07f, -6.047251367e-07f, -6.055980237e-07f, -6.064697072e-07f, -6.073401859e-07f, -6.082094585e-07f, -6.090775237e-07f, -6.099443802e-07f,
+-6.108100267e-07f, -6.116744620e-07f, -6.125376846e-07f, -6.133996934e-07f, -6.142604870e-07f, -6.151200642e-07f, -6.159784237e-07f, -6.168355642e-07f, -6.176914844e-07f, -6.185461830e-07f,
+-6.193996588e-07f, -6.202519105e-07f, -6.211029369e-07f, -6.219527366e-07f, -6.228013084e-07f, -6.236486511e-07f, -6.244947633e-07f, -6.253396439e-07f, -6.261832915e-07f, -6.270257050e-07f,
+-6.278668830e-07f, -6.287068244e-07f, -6.295455278e-07f, -6.303829921e-07f, -6.312192159e-07f, -6.320541982e-07f, -6.328879375e-07f, -6.337204328e-07f, -6.345516827e-07f, -6.353816860e-07f,
+-6.362104415e-07f, -6.370379481e-07f, -6.378642044e-07f, -6.386892092e-07f, -6.395129614e-07f, -6.403354596e-07f, -6.411567028e-07f, -6.419766897e-07f, -6.427954191e-07f, -6.436128897e-07f,
+-6.444291004e-07f, -6.452440500e-07f, -6.460577373e-07f, -6.468701611e-07f, -6.476813202e-07f, -6.484912134e-07f, -6.492998395e-07f, -6.501071973e-07f, -6.509132857e-07f, -6.517181035e-07f,
+-6.525216495e-07f, -6.533239225e-07f, -6.541249213e-07f, -6.549246448e-07f, -6.557230919e-07f, -6.565202612e-07f, -6.573161518e-07f, -6.581107623e-07f, -6.589040918e-07f, -6.596961389e-07f,
+-6.604869026e-07f, -6.612763817e-07f, -6.620645751e-07f, -6.628514815e-07f, -6.636370999e-07f, -6.644214292e-07f, -6.652044681e-07f, -6.659862156e-07f, -6.667666704e-07f, -6.675458316e-07f,
+-6.683236979e-07f, -6.691002683e-07f, -6.698755415e-07f, -6.706495165e-07f, -6.714221922e-07f, -6.721935675e-07f, -6.729636411e-07f, -6.737324121e-07f, -6.744998793e-07f, -6.752660416e-07f,
+-6.760308979e-07f, -6.767944471e-07f, -6.775566880e-07f, -6.783176197e-07f, -6.790772410e-07f, -6.798355508e-07f, -6.805925480e-07f, -6.813482316e-07f, -6.821026004e-07f, -6.828556534e-07f,
+-6.836073894e-07f, -6.843578075e-07f, -6.851069065e-07f, -6.858546854e-07f, -6.866011431e-07f, -6.873462785e-07f, -6.880900906e-07f, -6.888325782e-07f, -6.895737405e-07f, -6.903135761e-07f,
+-6.910520843e-07f, -6.917892638e-07f, -6.925251136e-07f, -6.932596327e-07f, -6.939928201e-07f, -6.947246746e-07f, -6.954551953e-07f, -6.961843811e-07f, -6.969122310e-07f, -6.976387439e-07f,
+-6.983639189e-07f, -6.990877548e-07f, -6.998102507e-07f, -7.005314056e-07f, -7.012512183e-07f, -7.019696880e-07f, -7.026868136e-07f, -7.034025941e-07f, -7.041170284e-07f, -7.048301156e-07f,
+-7.055418546e-07f, -7.062522445e-07f, -7.069612843e-07f, -7.076689729e-07f, -7.083753094e-07f, -7.090802927e-07f, -7.097839220e-07f, -7.104861961e-07f, -7.111871142e-07f, -7.118866752e-07f,
+-7.125848781e-07f, -7.132817220e-07f, -7.139772059e-07f, -7.146713288e-07f, -7.153640898e-07f, -7.160554879e-07f, -7.167455221e-07f, -7.174341915e-07f, -7.181214951e-07f, -7.188074319e-07f,
+-7.194920010e-07f, -7.201752015e-07f, -7.208570324e-07f, -7.215374927e-07f, -7.222165815e-07f, -7.228942979e-07f, -7.235706409e-07f, -7.242456096e-07f, -7.249192031e-07f, -7.255914204e-07f,
+-7.262622606e-07f, -7.269317227e-07f, -7.275998059e-07f, -7.282665093e-07f, -7.289318318e-07f, -7.295957726e-07f, -7.302583308e-07f, -7.309195055e-07f, -7.315792958e-07f, -7.322377006e-07f,
+-7.328947193e-07f, -7.335503508e-07f, -7.342045943e-07f, -7.348574488e-07f, -7.355089135e-07f, -7.361589874e-07f, -7.368076698e-07f, -7.374549596e-07f, -7.381008561e-07f, -7.387453583e-07f,
+-7.393884654e-07f, -7.400301765e-07f, -7.406704907e-07f, -7.413094072e-07f, -7.419469250e-07f, -7.425830434e-07f, -7.432177614e-07f, -7.438510782e-07f, -7.444829930e-07f, -7.451135048e-07f,
+-7.457426129e-07f, -7.463703164e-07f, -7.469966144e-07f, -7.476215061e-07f, -7.482449907e-07f, -7.488670673e-07f, -7.494877351e-07f, -7.501069932e-07f, -7.507248409e-07f, -7.513412772e-07f,
+-7.519563015e-07f, -7.525699127e-07f, -7.531821102e-07f, -7.537928931e-07f, -7.544022606e-07f, -7.550102119e-07f, -7.556167462e-07f, -7.562218626e-07f, -7.568255603e-07f, -7.574278387e-07f,
+-7.580286968e-07f, -7.586281338e-07f, -7.592261491e-07f, -7.598227417e-07f, -7.604179109e-07f, -7.610116558e-07f, -7.616039759e-07f, -7.621948701e-07f, -7.627843378e-07f, -7.633723782e-07f,
+-7.639589905e-07f, -7.645441740e-07f, -7.651279278e-07f, -7.657102513e-07f, -7.662911435e-07f, -7.668706039e-07f, -7.674486316e-07f, -7.680252259e-07f, -7.686003860e-07f, -7.691741111e-07f,
+-7.697464006e-07f, -7.703172537e-07f, -7.708866696e-07f, -7.714546476e-07f, -7.720211870e-07f, -7.725862870e-07f, -7.731499469e-07f, -7.737121660e-07f, -7.742729435e-07f, -7.748322788e-07f,
+-7.753901711e-07f, -7.759466196e-07f, -7.765016237e-07f, -7.770551827e-07f, -7.776072958e-07f, -7.781579624e-07f, -7.787071817e-07f, -7.792549530e-07f, -7.798012757e-07f, -7.803461490e-07f,
+-7.808895722e-07f, -7.814315447e-07f, -7.819720658e-07f, -7.825111347e-07f, -7.830487509e-07f, -7.835849135e-07f, -7.841196220e-07f, -7.846528756e-07f, -7.851846738e-07f, -7.857150157e-07f,
+-7.862439008e-07f, -7.867713284e-07f, -7.872972978e-07f, -7.878218084e-07f, -7.883448595e-07f, -7.888664504e-07f, -7.893865805e-07f, -7.899052492e-07f, -7.904224558e-07f, -7.909381996e-07f,
+-7.914524801e-07f, -7.919652965e-07f, -7.924766483e-07f, -7.929865348e-07f, -7.934949554e-07f, -7.940019095e-07f, -7.945073963e-07f, -7.950114154e-07f, -7.955139661e-07f, -7.960150477e-07f,
+-7.965146597e-07f, -7.970128015e-07f, -7.975094724e-07f, -7.980046718e-07f, -7.984983991e-07f, -7.989906538e-07f, -7.994814352e-07f, -7.999707427e-07f, -8.004585757e-07f, -8.009449337e-07f,
+-8.014298161e-07f, -8.019132223e-07f, -8.023951516e-07f, -8.028756035e-07f, -8.033545775e-07f, -8.038320730e-07f, -8.043080893e-07f, -8.047826260e-07f, -8.052556824e-07f, -8.057272580e-07f,
+-8.061973522e-07f, -8.066659645e-07f, -8.071330943e-07f, -8.075987411e-07f, -8.080629043e-07f, -8.085255834e-07f, -8.089867778e-07f, -8.094464870e-07f, -8.099047104e-07f, -8.103614475e-07f,
+-8.108166978e-07f, -8.112704607e-07f, -8.117227357e-07f, -8.121735223e-07f, -8.126228200e-07f, -8.130706282e-07f, -8.135169464e-07f, -8.139617741e-07f, -8.144051108e-07f, -8.148469560e-07f,
+-8.152873092e-07f, -8.157261699e-07f, -8.161635375e-07f, -8.165994116e-07f, -8.170337916e-07f, -8.174666772e-07f, -8.178980677e-07f, -8.183279627e-07f, -8.187563617e-07f, -8.191832643e-07f,
+-8.196086699e-07f, -8.200325781e-07f, -8.204549884e-07f, -8.208759003e-07f, -8.212953134e-07f, -8.217132271e-07f, -8.221296411e-07f, -8.225445548e-07f, -8.229579679e-07f, -8.233698797e-07f,
+-8.237802900e-07f, -8.241891982e-07f, -8.245966040e-07f, -8.250025067e-07f, -8.254069061e-07f, -8.258098016e-07f, -8.262111929e-07f, -8.266110795e-07f, -8.270094609e-07f, -8.274063367e-07f,
+-8.278017066e-07f, -8.281955701e-07f, -8.285879267e-07f, -8.289787760e-07f, -8.293681177e-07f, -8.297559513e-07f, -8.301422764e-07f, -8.305270926e-07f, -8.309103995e-07f, -8.312921966e-07f,
+-8.316724837e-07f, -8.320512602e-07f, -8.324285259e-07f, -8.328042803e-07f, -8.331785229e-07f, -8.335512535e-07f, -8.339224717e-07f, -8.342921770e-07f, -8.346603691e-07f, -8.350270477e-07f,
+-8.353922122e-07f, -8.357558625e-07f, -8.361179980e-07f, -8.364786185e-07f, -8.368377236e-07f, -8.371953129e-07f, -8.375513860e-07f, -8.379059427e-07f, -8.382589825e-07f, -8.386105051e-07f,
+-8.389605102e-07f, -8.393089974e-07f, -8.396559664e-07f, -8.400014168e-07f, -8.403453484e-07f, -8.406877607e-07f, -8.410286535e-07f, -8.413680264e-07f, -8.417058791e-07f, -8.420422112e-07f,
+-8.423770226e-07f, -8.427103127e-07f, -8.430420814e-07f, -8.433723283e-07f, -8.437010532e-07f, -8.440282556e-07f, -8.443539353e-07f, -8.446780921e-07f, -8.450007255e-07f, -8.453218354e-07f,
+-8.456414213e-07f, -8.459594831e-07f, -8.462760205e-07f, -8.465910331e-07f, -8.469045207e-07f, -8.472164830e-07f, -8.475269197e-07f, -8.478358306e-07f, -8.481432154e-07f, -8.484490738e-07f,
+-8.487534055e-07f, -8.490562103e-07f, -8.493574880e-07f, -8.496572383e-07f, -8.499554608e-07f, -8.502521555e-07f, -8.505473219e-07f, -8.508409600e-07f, -8.511330694e-07f, -8.514236498e-07f,
+-8.517127012e-07f, -8.520002231e-07f, -8.522862155e-07f, -8.525706780e-07f, -8.528536105e-07f, -8.531350126e-07f, -8.534148843e-07f, -8.536932252e-07f, -8.539700352e-07f, -8.542453140e-07f,
+-8.545190614e-07f, -8.547912773e-07f, -8.550619614e-07f, -8.553311135e-07f, -8.555987335e-07f, -8.558648210e-07f, -8.561293760e-07f, -8.563923982e-07f, -8.566538875e-07f, -8.569138436e-07f,
+-8.571722664e-07f, -8.574291557e-07f, -8.576845114e-07f, -8.579383331e-07f, -8.581906209e-07f, -8.584413744e-07f, -8.586905936e-07f, -8.589382782e-07f, -8.591844282e-07f, -8.594290433e-07f,
+-8.596721233e-07f, -8.599136683e-07f, -8.601536779e-07f, -8.603921520e-07f, -8.606290906e-07f, -8.608644934e-07f, -8.610983603e-07f, -8.613306912e-07f, -8.615614859e-07f, -8.617907443e-07f,
+-8.620184663e-07f, -8.622446518e-07f, -8.624693005e-07f, -8.626924125e-07f, -8.629139876e-07f, -8.631340256e-07f, -8.633525265e-07f, -8.635694902e-07f, -8.637849165e-07f, -8.639988053e-07f,
+-8.642111565e-07f, -8.644219701e-07f, -8.646312459e-07f, -8.648389839e-07f, -8.650451839e-07f, -8.652498459e-07f, -8.654529697e-07f, -8.656545553e-07f, -8.658546027e-07f, -8.660531116e-07f,
+-8.662500821e-07f, -8.664455142e-07f, -8.666394076e-07f, -8.668317623e-07f, -8.670225784e-07f, -8.672118556e-07f, -8.673995941e-07f, -8.675857936e-07f, -8.677704542e-07f, -8.679535757e-07f,
+-8.681351582e-07f, -8.683152017e-07f, -8.684937059e-07f, -8.686706710e-07f, -8.688460969e-07f, -8.690199835e-07f, -8.691923309e-07f, -8.693631389e-07f, -8.695324076e-07f, -8.697001369e-07f,
+-8.698663268e-07f, -8.700309773e-07f, -8.701940884e-07f, -8.703556600e-07f, -8.705156922e-07f, -8.706741850e-07f, -8.708311383e-07f, -8.709865521e-07f, -8.711404264e-07f, -8.712927613e-07f,
+-8.714435567e-07f, -8.715928127e-07f, -8.717405292e-07f, -8.718867063e-07f, -8.720313440e-07f, -8.721744423e-07f, -8.723160012e-07f, -8.724560208e-07f, -8.725945010e-07f, -8.727314420e-07f,
+-8.728668437e-07f, -8.730007061e-07f, -8.731330294e-07f, -8.732638135e-07f, -8.733930585e-07f, -8.735207645e-07f, -8.736469315e-07f, -8.737715594e-07f, -8.738946485e-07f, -8.740161987e-07f,
+-8.741362101e-07f, -8.742546828e-07f, -8.743716168e-07f, -8.744870123e-07f, -8.746008691e-07f, -8.747131876e-07f, -8.748239676e-07f, -8.749332093e-07f, -8.750409128e-07f, -8.751470781e-07f,
+-8.752517054e-07f, -8.753547947e-07f, -8.754563461e-07f, -8.755563597e-07f, -8.756548357e-07f, -8.757517740e-07f, -8.758471748e-07f, -8.759410383e-07f, -8.760333644e-07f, -8.761241534e-07f,
+-8.762134053e-07f, -8.763011203e-07f, -8.763872984e-07f, -8.764719398e-07f, -8.765550447e-07f, -8.766366130e-07f, -8.767166451e-07f, -8.767951409e-07f, -8.768721006e-07f, -8.769475244e-07f,
+-8.770214124e-07f, -8.770937648e-07f, -8.771645816e-07f, -8.772338631e-07f, -8.773016093e-07f, -8.773678205e-07f, -8.774324968e-07f, -8.774956383e-07f, -8.775572452e-07f, -8.776173176e-07f,
+-8.776758558e-07f, -8.777328599e-07f, -8.777883301e-07f, -8.778422665e-07f, -8.778946693e-07f, -8.779455387e-07f, -8.779948749e-07f, -8.780426780e-07f, -8.780889483e-07f, -8.781336859e-07f,
+-8.781768911e-07f, -8.782185639e-07f, -8.782587047e-07f, -8.782973136e-07f, -8.783343908e-07f, -8.783699365e-07f, -8.784039509e-07f, -8.784364343e-07f, -8.784673868e-07f, -8.784968087e-07f,
+-8.785247001e-07f, -8.785510614e-07f, -8.785758927e-07f, -8.785991942e-07f, -8.786209662e-07f, -8.786412089e-07f, -8.786599226e-07f, -8.786771074e-07f, -8.786927637e-07f, -8.787068916e-07f,
+-8.787194914e-07f, -8.787305633e-07f, -8.787401076e-07f, -8.787481246e-07f, -8.787546145e-07f, -8.787595776e-07f, -8.787630140e-07f, -8.787649242e-07f, -8.787653082e-07f, -8.787641665e-07f,
+-8.787614993e-07f, -8.787573068e-07f, -8.787515894e-07f, -8.787443472e-07f, -8.787355807e-07f, -8.787252900e-07f, -8.787134755e-07f, -8.787001374e-07f, -8.786852760e-07f, -8.786688917e-07f,
+-8.786509847e-07f, -8.786315553e-07f, -8.786106039e-07f, -8.785881306e-07f, -8.785641359e-07f, -8.785386201e-07f, -8.785115834e-07f, -8.784830261e-07f, -8.784529487e-07f, -8.784213513e-07f,
+-8.783882344e-07f, -8.783535982e-07f, -8.783174431e-07f, -8.782797694e-07f, -8.782405775e-07f, -8.781998676e-07f, -8.781576401e-07f, -8.781138954e-07f, -8.780686337e-07f, -8.780218555e-07f,
+-8.779735611e-07f, -8.779237509e-07f, -8.778724251e-07f, -8.778195841e-07f, -8.777652284e-07f, -8.777093582e-07f, -8.776519740e-07f, -8.775930760e-07f, -8.775326648e-07f, -8.774707405e-07f,
+-8.774073036e-07f, -8.773423546e-07f, -8.772758936e-07f, -8.772079213e-07f, -8.771384378e-07f, -8.770674437e-07f, -8.769949392e-07f, -8.769209249e-07f, -8.768454010e-07f, -8.767683680e-07f,
+-8.766898263e-07f, -8.766097763e-07f, -8.765282184e-07f, -8.764451529e-07f, -8.763605804e-07f, -8.762745011e-07f, -8.761869157e-07f, -8.760978243e-07f, -8.760072275e-07f, -8.759151257e-07f,
+-8.758215193e-07f, -8.757264088e-07f, -8.756297945e-07f, -8.755316769e-07f, -8.754320565e-07f, -8.753309336e-07f, -8.752283087e-07f, -8.751241823e-07f, -8.750185548e-07f, -8.749114267e-07f,
+-8.748027983e-07f, -8.746926702e-07f, -8.745810428e-07f, -8.744679165e-07f, -8.743532919e-07f, -8.742371694e-07f, -8.741195494e-07f, -8.740004324e-07f, -8.738798190e-07f, -8.737577095e-07f,
+-8.736341044e-07f, -8.735090042e-07f, -8.733824094e-07f, -8.732543205e-07f, -8.731247380e-07f, -8.729936623e-07f, -8.728610940e-07f, -8.727270335e-07f, -8.725914813e-07f, -8.724544380e-07f,
+-8.723159040e-07f, -8.721758798e-07f, -8.720343659e-07f, -8.718913629e-07f, -8.717468713e-07f, -8.716008915e-07f, -8.714534241e-07f, -8.713044696e-07f, -8.711540285e-07f, -8.710021013e-07f,
+-8.708486887e-07f, -8.706937910e-07f, -8.705374088e-07f, -8.703795428e-07f, -8.702201933e-07f, -8.700593609e-07f, -8.698970462e-07f, -8.697332498e-07f, -8.695679721e-07f, -8.694012137e-07f,
+-8.692329752e-07f, -8.690632571e-07f, -8.688920599e-07f, -8.687193843e-07f, -8.685452308e-07f, -8.683695999e-07f, -8.681924922e-07f, -8.680139083e-07f, -8.678338488e-07f, -8.676523142e-07f,
+-8.674693051e-07f, -8.672848220e-07f, -8.670988657e-07f, -8.669114365e-07f, -8.667225352e-07f, -8.665321623e-07f, -8.663403184e-07f, -8.661470041e-07f, -8.659522200e-07f, -8.657559667e-07f,
+-8.655582448e-07f, -8.653590548e-07f, -8.651583975e-07f, -8.649562733e-07f, -8.647526830e-07f, -8.645476270e-07f, -8.643411061e-07f, -8.641331209e-07f, -8.639236719e-07f, -8.637127598e-07f,
+-8.635003853e-07f, -8.632865489e-07f, -8.630712512e-07f, -8.628544930e-07f, -8.626362748e-07f, -8.624165972e-07f, -8.621954610e-07f, -8.619728668e-07f, -8.617488151e-07f, -8.615233067e-07f,
+-8.612963421e-07f, -8.610679222e-07f, -8.608380474e-07f, -8.606067184e-07f, -8.603739360e-07f, -8.601397007e-07f, -8.599040133e-07f, -8.596668744e-07f, -8.594282846e-07f, -8.591882447e-07f,
+-8.589467552e-07f, -8.587038170e-07f, -8.584594306e-07f, -8.582135968e-07f, -8.579663162e-07f, -8.577175895e-07f, -8.574674173e-07f, -8.572158005e-07f, -8.569627397e-07f, -8.567082355e-07f,
+-8.564522886e-07f, -8.561948999e-07f, -8.559360699e-07f, -8.556757994e-07f, -8.554140890e-07f, -8.551509396e-07f, -8.548863517e-07f, -8.546203261e-07f, -8.543528636e-07f, -8.540839648e-07f,
+-8.538136305e-07f, -8.535418613e-07f, -8.532686581e-07f, -8.529940215e-07f, -8.527179523e-07f, -8.524404511e-07f, -8.521615188e-07f, -8.518811561e-07f, -8.515993637e-07f, -8.513161423e-07f,
+-8.510314927e-07f, -8.507454157e-07f, -8.504579120e-07f, -8.501689823e-07f, -8.498786274e-07f, -8.495868480e-07f, -8.492936450e-07f, -8.489990190e-07f, -8.487029709e-07f, -8.484055013e-07f,
+-8.481066111e-07f, -8.478063011e-07f, -8.475045719e-07f, -8.472014245e-07f, -8.468968595e-07f, -8.465908777e-07f, -8.462834800e-07f, -8.459746670e-07f, -8.456644397e-07f, -8.453527987e-07f,
+-8.450397449e-07f, -8.447252790e-07f, -8.444094019e-07f, -8.440921144e-07f, -8.437734172e-07f, -8.434533112e-07f, -8.431317971e-07f, -8.428088758e-07f, -8.424845481e-07f, -8.421588147e-07f,
+-8.418316766e-07f, -8.415031345e-07f, -8.411731892e-07f, -8.408418416e-07f, -8.405090924e-07f, -8.401749426e-07f, -8.398393929e-07f, -8.395024441e-07f, -8.391640972e-07f, -8.388243529e-07f,
+-8.384832121e-07f, -8.381406755e-07f, -8.377967441e-07f, -8.374514187e-07f, -8.371047002e-07f, -8.367565893e-07f, -8.364070870e-07f, -8.360561940e-07f, -8.357039113e-07f, -8.353502397e-07f,
+-8.349951801e-07f, -8.346387333e-07f, -8.342809001e-07f, -8.339216816e-07f, -8.335610784e-07f, -8.331990916e-07f, -8.328357219e-07f, -8.324709702e-07f, -8.321048375e-07f, -8.317373246e-07f,
+-8.313684323e-07f, -8.309981616e-07f, -8.306265134e-07f, -8.302534885e-07f, -8.298790879e-07f, -8.295033123e-07f, -8.291261628e-07f, -8.287476402e-07f, -8.283677455e-07f, -8.279864794e-07f,
+-8.276038430e-07f, -8.272198371e-07f, -8.268344627e-07f, -8.264477206e-07f, -8.260596117e-07f, -8.256701371e-07f, -8.252792976e-07f, -8.248870940e-07f, -8.244935275e-07f, -8.240985987e-07f,
+-8.237023088e-07f, -8.233046586e-07f, -8.229056491e-07f, -8.225052811e-07f, -8.221035557e-07f, -8.217004737e-07f, -8.212960362e-07f, -8.208902439e-07f, -8.204830980e-07f, -8.200745993e-07f,
+-8.196647488e-07f, -8.192535474e-07f, -8.188409961e-07f, -8.184270958e-07f, -8.180118475e-07f, -8.175952522e-07f, -8.171773108e-07f, -8.167580243e-07f, -8.163373937e-07f, -8.159154198e-07f,
+-8.154921038e-07f, -8.150674465e-07f, -8.146414490e-07f, -8.142141121e-07f, -8.137854370e-07f, -8.133554245e-07f, -8.129240757e-07f, -8.124913915e-07f, -8.120573730e-07f, -8.116220211e-07f,
+-8.111853368e-07f, -8.107473211e-07f, -8.103079750e-07f, -8.098672995e-07f, -8.094252956e-07f, -8.089819643e-07f, -8.085373066e-07f, -8.080913236e-07f, -8.076440161e-07f, -8.071953853e-07f,
+-8.067454322e-07f, -8.062941577e-07f, -8.058415629e-07f, -8.053876488e-07f, -8.049324164e-07f, -8.044758668e-07f, -8.040180009e-07f, -8.035588199e-07f, -8.030983247e-07f, -8.026365163e-07f,
+-8.021733959e-07f, -8.017089644e-07f, -8.012432229e-07f, -8.007761724e-07f, -8.003078139e-07f, -7.998381486e-07f, -7.993671774e-07f, -7.988949014e-07f, -7.984213216e-07f, -7.979464392e-07f,
+-7.974702551e-07f, -7.969927704e-07f, -7.965139863e-07f, -7.960339036e-07f, -7.955525236e-07f, -7.950698472e-07f, -7.945858756e-07f, -7.941006098e-07f, -7.936140508e-07f, -7.931261998e-07f,
+-7.926370579e-07f, -7.921466260e-07f, -7.916549054e-07f, -7.911618970e-07f, -7.906676019e-07f, -7.901720213e-07f, -7.896751563e-07f, -7.891770078e-07f, -7.886775771e-07f, -7.881768652e-07f,
+-7.876748732e-07f, -7.871716021e-07f, -7.866670532e-07f, -7.861612275e-07f, -7.856541261e-07f, -7.851457501e-07f, -7.846361007e-07f, -7.841251789e-07f, -7.836129858e-07f, -7.830995226e-07f,
+-7.825847904e-07f, -7.820687903e-07f, -7.815515234e-07f, -7.810329908e-07f, -7.805131937e-07f, -7.799921333e-07f, -7.794698105e-07f, -7.789462266e-07f, -7.784213827e-07f, -7.778952799e-07f,
+-7.773679194e-07f, -7.768393022e-07f, -7.763094297e-07f, -7.757783028e-07f, -7.752459227e-07f, -7.747122906e-07f, -7.741774076e-07f, -7.736412749e-07f, -7.731038937e-07f, -7.725652650e-07f,
+-7.720253900e-07f, -7.714842700e-07f, -7.709419060e-07f, -7.703982992e-07f, -7.698534508e-07f, -7.693073620e-07f, -7.687600339e-07f, -7.682114677e-07f, -7.676616645e-07f, -7.671106256e-07f,
+-7.665583521e-07f, -7.660048452e-07f, -7.654501060e-07f, -7.648941359e-07f, -7.643369358e-07f, -7.637785071e-07f, -7.632188509e-07f, -7.626579684e-07f, -7.620958608e-07f, -7.615325292e-07f,
+-7.609679750e-07f, -7.604021992e-07f, -7.598352032e-07f, -7.592669880e-07f, -7.586975549e-07f, -7.581269050e-07f, -7.575550397e-07f, -7.569819601e-07f, -7.564076674e-07f, -7.558321628e-07f,
+-7.552554476e-07f, -7.546775229e-07f, -7.540983900e-07f, -7.535180501e-07f, -7.529365044e-07f, -7.523537542e-07f, -7.517698006e-07f, -7.511846450e-07f, -7.505982884e-07f, -7.500107323e-07f,
+-7.494219777e-07f, -7.488320260e-07f, -7.482408783e-07f, -7.476485359e-07f, -7.470550001e-07f, -7.464602720e-07f, -7.458643530e-07f, -7.452672443e-07f, -7.446689471e-07f, -7.440694627e-07f,
+-7.434687923e-07f, -7.428669372e-07f, -7.422638987e-07f, -7.416596779e-07f, -7.410542762e-07f, -7.404476948e-07f, -7.398399350e-07f, -7.392309981e-07f, -7.386208852e-07f, -7.380095978e-07f,
+-7.373971369e-07f, -7.367835041e-07f, -7.361687004e-07f, -7.355527272e-07f, -7.349355857e-07f, -7.343172773e-07f, -7.336978032e-07f, -7.330771647e-07f, -7.324553630e-07f, -7.318323995e-07f,
+-7.312082755e-07f, -7.305829923e-07f, -7.299565510e-07f, -7.293289531e-07f, -7.287001999e-07f, -7.280702925e-07f, -7.274392324e-07f, -7.268070208e-07f, -7.261736590e-07f, -7.255391484e-07f,
+-7.249034902e-07f, -7.242666857e-07f, -7.236287363e-07f, -7.229896433e-07f, -7.223494080e-07f, -7.217080316e-07f, -7.210655156e-07f, -7.204218612e-07f, -7.197770697e-07f, -7.191311425e-07f,
+-7.184840809e-07f, -7.178358863e-07f, -7.171865599e-07f, -7.165361030e-07f, -7.158845171e-07f, -7.152318034e-07f, -7.145779633e-07f, -7.139229981e-07f, -7.132669092e-07f, -7.126096979e-07f,
+-7.119513654e-07f, -7.112919133e-07f, -7.106313428e-07f, -7.099696552e-07f, -7.093068520e-07f, -7.086429344e-07f, -7.079779038e-07f, -7.073117616e-07f, -7.066445091e-07f, -7.059761477e-07f,
+-7.053066788e-07f, -7.046361036e-07f, -7.039644236e-07f, -7.032916401e-07f, -7.026177545e-07f, -7.019427681e-07f, -7.012666824e-07f, -7.005894987e-07f, -6.999112183e-07f, -6.992318426e-07f,
+-6.985513731e-07f, -6.978698110e-07f, -6.971871579e-07f, -6.965034149e-07f, -6.958185836e-07f, -6.951326653e-07f, -6.944456614e-07f, -6.937575733e-07f, -6.930684023e-07f, -6.923781499e-07f,
+-6.916868175e-07f, -6.909944064e-07f, -6.903009180e-07f, -6.896063538e-07f, -6.889107151e-07f, -6.882140033e-07f, -6.875162199e-07f, -6.868173661e-07f, -6.861174436e-07f, -6.854164536e-07f,
+-6.847143975e-07f, -6.840112768e-07f, -6.833070929e-07f, -6.826018472e-07f, -6.818955410e-07f, -6.811881759e-07f, -6.804797532e-07f, -6.797702744e-07f, -6.790597408e-07f, -6.783481539e-07f,
+-6.776355152e-07f, -6.769218260e-07f, -6.762070877e-07f, -6.754913019e-07f, -6.747744699e-07f, -6.740565932e-07f, -6.733376731e-07f, -6.726177112e-07f, -6.718967088e-07f, -6.711746674e-07f,
+-6.704515885e-07f, -6.697274735e-07f, -6.690023237e-07f, -6.682761408e-07f, -6.675489260e-07f, -6.668206810e-07f, -6.660914070e-07f, -6.653611056e-07f, -6.646297782e-07f, -6.638974262e-07f,
+-6.631640512e-07f, -6.624296546e-07f, -6.616942378e-07f, -6.609578022e-07f, -6.602203495e-07f, -6.594818809e-07f, -6.587423980e-07f, -6.580019023e-07f, -6.572603952e-07f, -6.565178781e-07f,
+-6.557743526e-07f, -6.550298201e-07f, -6.542842821e-07f, -6.535377401e-07f, -6.527901955e-07f, -6.520416499e-07f, -6.512921046e-07f, -6.505415612e-07f, -6.497900212e-07f, -6.490374860e-07f,
+-6.482839572e-07f, -6.475294361e-07f, -6.467739244e-07f, -6.460174234e-07f, -6.452599348e-07f, -6.445014599e-07f, -6.437420002e-07f, -6.429815574e-07f, -6.422201327e-07f, -6.414577279e-07f,
+-6.406943443e-07f, -6.399299834e-07f, -6.391646468e-07f, -6.383983360e-07f, -6.376310524e-07f, -6.368627976e-07f, -6.360935731e-07f, -6.353233804e-07f, -6.345522209e-07f, -6.337800963e-07f,
+-6.330070080e-07f, -6.322329576e-07f, -6.314579465e-07f, -6.306819762e-07f, -6.299050484e-07f, -6.291271645e-07f, -6.283483260e-07f, -6.275685344e-07f, -6.267877914e-07f, -6.260060984e-07f,
+-6.252234568e-07f, -6.244398684e-07f, -6.236553345e-07f, -6.228698568e-07f, -6.220834368e-07f, -6.212960759e-07f, -6.205077757e-07f, -6.197185379e-07f, -6.189283638e-07f, -6.181372551e-07f,
+-6.173452132e-07f, -6.165522398e-07f, -6.157583364e-07f, -6.149635044e-07f, -6.141677456e-07f, -6.133710613e-07f, -6.125734532e-07f, -6.117749228e-07f, -6.109754717e-07f, -6.101751014e-07f,
+-6.093738134e-07f, -6.085716094e-07f, -6.077684909e-07f, -6.069644594e-07f, -6.061595165e-07f, -6.053536638e-07f, -6.045469028e-07f, -6.037392351e-07f, -6.029306622e-07f, -6.021211858e-07f,
+-6.013108073e-07f, -6.004995284e-07f, -5.996873506e-07f, -5.988742755e-07f, -5.980603047e-07f, -5.972454398e-07f, -5.964296822e-07f, -5.956130337e-07f, -5.947954957e-07f, -5.939770699e-07f,
+-5.931577578e-07f, -5.923375610e-07f, -5.915164811e-07f, -5.906945197e-07f, -5.898716784e-07f, -5.890479587e-07f, -5.882233622e-07f, -5.873978906e-07f, -5.865715454e-07f, -5.857443283e-07f,
+-5.849162407e-07f, -5.840872843e-07f, -5.832574607e-07f, -5.824267716e-07f, -5.815952184e-07f, -5.807628028e-07f, -5.799295263e-07f, -5.790953907e-07f, -5.782603975e-07f, -5.774245482e-07f,
+-5.765878446e-07f, -5.757502882e-07f, -5.749118806e-07f, -5.740726234e-07f, -5.732325182e-07f, -5.723915667e-07f, -5.715497704e-07f, -5.707071310e-07f, -5.698636501e-07f, -5.690193293e-07f,
+-5.681741703e-07f, -5.673281745e-07f, -5.664813437e-07f, -5.656336795e-07f, -5.647851835e-07f, -5.639358573e-07f, -5.630857025e-07f, -5.622347208e-07f, -5.613829139e-07f, -5.605302832e-07f,
+-5.596768305e-07f, -5.588225573e-07f, -5.579674654e-07f, -5.571115563e-07f, -5.562548317e-07f, -5.553972932e-07f, -5.545389425e-07f, -5.536797811e-07f, -5.528198108e-07f, -5.519590331e-07f,
+-5.510974497e-07f, -5.502350623e-07f, -5.493718725e-07f, -5.485078818e-07f, -5.476430921e-07f, -5.467775048e-07f, -5.459111217e-07f, -5.450439445e-07f, -5.441759746e-07f, -5.433072139e-07f,
+-5.424376640e-07f, -5.415673264e-07f, -5.406962030e-07f, -5.398242952e-07f, -5.389516048e-07f, -5.380781335e-07f, -5.372038828e-07f, -5.363288545e-07f, -5.354530501e-07f, -5.345764715e-07f,
+-5.336991202e-07f, -5.328209978e-07f, -5.319421061e-07f, -5.310624468e-07f, -5.301820214e-07f, -5.293008316e-07f, -5.284188792e-07f, -5.275361658e-07f, -5.266526930e-07f, -5.257684625e-07f,
+-5.248834761e-07f, -5.239977353e-07f, -5.231112419e-07f, -5.222239974e-07f, -5.213360037e-07f, -5.204472624e-07f, -5.195577751e-07f, -5.186675435e-07f, -5.177765694e-07f, -5.168848543e-07f,
+-5.159924000e-07f, -5.150992082e-07f, -5.142052805e-07f, -5.133106186e-07f, -5.124152242e-07f, -5.115190991e-07f, -5.106222448e-07f, -5.097246631e-07f, -5.088263557e-07f, -5.079273242e-07f,
+-5.070275704e-07f, -5.061270959e-07f, -5.052259024e-07f, -5.043239917e-07f, -5.034213654e-07f, -5.025180252e-07f, -5.016139728e-07f, -5.007092099e-07f, -4.998037383e-07f, -4.988975596e-07f,
+-4.979906755e-07f, -4.970830877e-07f, -4.961747979e-07f, -4.952658078e-07f, -4.943561192e-07f, -4.934457337e-07f, -4.925346531e-07f, -4.916228790e-07f, -4.907104132e-07f, -4.897972573e-07f,
+-4.888834131e-07f, -4.879688823e-07f, -4.870536666e-07f, -4.861377678e-07f, -4.852211874e-07f, -4.843039273e-07f, -4.833859891e-07f, -4.824673747e-07f, -4.815480856e-07f, -4.806281236e-07f,
+-4.797074905e-07f, -4.787861879e-07f, -4.778642176e-07f, -4.769415812e-07f, -4.760182806e-07f, -4.750943174e-07f, -4.741696934e-07f, -4.732444103e-07f, -4.723184698e-07f, -4.713918736e-07f,
+-4.704646235e-07f, -4.695367212e-07f, -4.686081684e-07f, -4.676789668e-07f, -4.667491183e-07f, -4.658186245e-07f, -4.648874871e-07f, -4.639557079e-07f, -4.630232886e-07f, -4.620902310e-07f,
+-4.611565368e-07f, -4.602222077e-07f, -4.592872454e-07f, -4.583516518e-07f, -4.574154285e-07f, -4.564785772e-07f, -4.555410998e-07f, -4.546029980e-07f, -4.536642735e-07f, -4.527249280e-07f,
+-4.517849633e-07f, -4.508443811e-07f, -4.499031832e-07f, -4.489613713e-07f, -4.480189472e-07f, -4.470759127e-07f, -4.461322694e-07f, -4.451880191e-07f, -4.442431636e-07f, -4.432977045e-07f,
+-4.423516438e-07f, -4.414049831e-07f, -4.404577241e-07f, -4.395098687e-07f, -4.385614186e-07f, -4.376123755e-07f, -4.366627412e-07f, -4.357125174e-07f, -4.347617060e-07f, -4.338103086e-07f,
+-4.328583270e-07f, -4.319057630e-07f, -4.309526183e-07f, -4.299988947e-07f, -4.290445940e-07f, -4.280897180e-07f, -4.271342683e-07f, -4.261782467e-07f, -4.252216551e-07f, -4.242644951e-07f,
+-4.233067686e-07f, -4.223484773e-07f, -4.213896230e-07f, -4.204302074e-07f, -4.194702323e-07f, -4.185096995e-07f, -4.175486108e-07f, -4.165869679e-07f, -4.156247725e-07f, -4.146620265e-07f,
+-4.136987317e-07f, -4.127348897e-07f, -4.117705025e-07f, -4.108055716e-07f, -4.098400991e-07f, -4.088740865e-07f, -4.079075357e-07f, -4.069404484e-07f, -4.059728265e-07f, -4.050046717e-07f,
+-4.040359857e-07f, -4.030667705e-07f, -4.020970276e-07f, -4.011267590e-07f, -4.001559664e-07f, -3.991846516e-07f, -3.982128164e-07f, -3.972404625e-07f, -3.962675917e-07f, -3.952942059e-07f,
+-3.943203067e-07f, -3.933458961e-07f, -3.923709757e-07f, -3.913955474e-07f, -3.904196129e-07f, -3.894431740e-07f, -3.884662326e-07f, -3.874887904e-07f, -3.865108491e-07f, -3.855324107e-07f,
+-3.845534768e-07f, -3.835740493e-07f, -3.825941299e-07f, -3.816137205e-07f, -3.806328228e-07f, -3.796514387e-07f, -3.786695698e-07f, -3.776872181e-07f, -3.767043853e-07f, -3.757210732e-07f,
+-3.747372837e-07f, -3.737530184e-07f, -3.727682792e-07f, -3.717830678e-07f, -3.707973862e-07f, -3.698112361e-07f, -3.688246192e-07f, -3.678375374e-07f, -3.668499925e-07f, -3.658619863e-07f,
+-3.648735205e-07f, -3.638845971e-07f, -3.628952177e-07f, -3.619053842e-07f, -3.609150983e-07f, -3.599243620e-07f, -3.589331769e-07f, -3.579415450e-07f, -3.569494679e-07f, -3.559569476e-07f,
+-3.549639857e-07f, -3.539705842e-07f, -3.529767447e-07f, -3.519824692e-07f, -3.509877594e-07f, -3.499926172e-07f, -3.489970443e-07f, -3.480010426e-07f, -3.470046138e-07f, -3.460077597e-07f,
+-3.450104823e-07f, -3.440127832e-07f, -3.430146643e-07f, -3.420161275e-07f, -3.410171744e-07f, -3.400178070e-07f, -3.390180270e-07f, -3.380178363e-07f, -3.370172366e-07f, -3.360162299e-07f,
+-3.350148178e-07f, -3.340130022e-07f, -3.330107849e-07f, -3.320081677e-07f, -3.310051525e-07f, -3.300017411e-07f, -3.289979352e-07f, -3.279937367e-07f, -3.269891474e-07f, -3.259841692e-07f,
+-3.249788038e-07f, -3.239730530e-07f, -3.229669188e-07f, -3.219604028e-07f, -3.209535069e-07f, -3.199462329e-07f, -3.189385827e-07f, -3.179305581e-07f, -3.169221609e-07f, -3.159133928e-07f,
+-3.149042558e-07f, -3.138947517e-07f, -3.128848822e-07f, -3.118746492e-07f, -3.108640545e-07f, -3.098530999e-07f, -3.088417873e-07f, -3.078301184e-07f, -3.068180952e-07f, -3.058057194e-07f,
+-3.047929928e-07f, -3.037799173e-07f, -3.027664947e-07f, -3.017527268e-07f, -3.007386154e-07f, -2.997241625e-07f, -2.987093697e-07f, -2.976942389e-07f, -2.966787719e-07f, -2.956629706e-07f,
+-2.946468369e-07f, -2.936303724e-07f, -2.926135791e-07f, -2.915964587e-07f, -2.905790131e-07f, -2.895612442e-07f, -2.885431537e-07f, -2.875247435e-07f, -2.865060154e-07f, -2.854869713e-07f,
+-2.844676129e-07f, -2.834479421e-07f, -2.824279607e-07f, -2.814076706e-07f, -2.803870735e-07f, -2.793661714e-07f, -2.783449659e-07f, -2.773234591e-07f, -2.763016527e-07f, -2.752795485e-07f,
+-2.742571483e-07f, -2.732344540e-07f, -2.722114675e-07f, -2.711881905e-07f, -2.701646249e-07f, -2.691407725e-07f, -2.681166351e-07f, -2.670922147e-07f, -2.660675129e-07f, -2.650425317e-07f,
+-2.640172728e-07f, -2.629917382e-07f, -2.619659295e-07f, -2.609398488e-07f, -2.599134977e-07f, -2.588868782e-07f, -2.578599921e-07f, -2.568328411e-07f, -2.558054272e-07f, -2.547777522e-07f,
+-2.537498179e-07f, -2.527216261e-07f, -2.516931786e-07f, -2.506644774e-07f, -2.496355242e-07f, -2.486063209e-07f, -2.475768693e-07f, -2.465471712e-07f, -2.455172285e-07f, -2.444870430e-07f,
+-2.434566165e-07f, -2.424259510e-07f, -2.413950481e-07f, -2.403639098e-07f, -2.393325378e-07f, -2.383009341e-07f, -2.372691005e-07f, -2.362370387e-07f, -2.352047507e-07f, -2.341722382e-07f,
+-2.331395031e-07f, -2.321065472e-07f, -2.310733724e-07f, -2.300399805e-07f, -2.290063733e-07f, -2.279725528e-07f, -2.269385206e-07f, -2.259042786e-07f, -2.248698288e-07f, -2.238351728e-07f,
+-2.228003127e-07f, -2.217652501e-07f, -2.207299869e-07f, -2.196945250e-07f, -2.186588661e-07f, -2.176230123e-07f, -2.165869651e-07f, -2.155507266e-07f, -2.145142985e-07f, -2.134776827e-07f,
+-2.124408810e-07f, -2.114038953e-07f, -2.103667273e-07f, -2.093293790e-07f, -2.082918521e-07f, -2.072541485e-07f, -2.062162701e-07f, -2.051782186e-07f, -2.041399959e-07f, -2.031016038e-07f,
+-2.020630442e-07f, -2.010243190e-07f, -1.999854298e-07f, -1.989463787e-07f, -1.979071673e-07f, -1.968677976e-07f, -1.958282714e-07f, -1.947885906e-07f, -1.937487568e-07f, -1.927087721e-07f,
+-1.916686382e-07f, -1.906283570e-07f, -1.895879302e-07f, -1.885473598e-07f, -1.875066476e-07f, -1.864657953e-07f, -1.854248049e-07f, -1.843836782e-07f, -1.833424170e-07f, -1.823010231e-07f,
+-1.812594985e-07f, -1.802178448e-07f, -1.791760640e-07f, -1.781341578e-07f, -1.770921282e-07f, -1.760499769e-07f, -1.750077058e-07f, -1.739653167e-07f, -1.729228115e-07f, -1.718801919e-07f,
+-1.708374599e-07f, -1.697946172e-07f, -1.687516657e-07f, -1.677086073e-07f, -1.666654436e-07f, -1.656221767e-07f, -1.645788083e-07f, -1.635353402e-07f, -1.624917743e-07f, -1.614481124e-07f,
+-1.604043564e-07f, -1.593605080e-07f, -1.583165692e-07f, -1.572725417e-07f, -1.562284273e-07f, -1.551842280e-07f, -1.541399455e-07f, -1.530955816e-07f, -1.520511383e-07f, -1.510066173e-07f,
+-1.499620204e-07f, -1.489173495e-07f, -1.478726065e-07f, -1.468277930e-07f, -1.457829111e-07f, -1.447379625e-07f, -1.436929490e-07f, -1.426478724e-07f, -1.416027347e-07f, -1.405575375e-07f,
+-1.395122828e-07f, -1.384669724e-07f, -1.374216081e-07f, -1.363761917e-07f, -1.353307251e-07f, -1.342852100e-07f, -1.332396484e-07f, -1.321940420e-07f, -1.311483927e-07f, -1.301027022e-07f,
+-1.290569725e-07f, -1.280112053e-07f, -1.269654025e-07f, -1.259195659e-07f, -1.248736973e-07f, -1.238277985e-07f, -1.227818714e-07f, -1.217359178e-07f, -1.206899395e-07f, -1.196439383e-07f,
+-1.185979161e-07f, -1.175518747e-07f, -1.165058158e-07f, -1.154597414e-07f, -1.144136533e-07f, -1.133675532e-07f, -1.123214430e-07f, -1.112753245e-07f, -1.102291996e-07f, -1.091830700e-07f,
+-1.081369375e-07f, -1.070908041e-07f, -1.060446715e-07f, -1.049985415e-07f, -1.039524160e-07f, -1.029062967e-07f, -1.018601855e-07f, -1.008140842e-07f, -9.976799465e-08f, -9.872191862e-08f,
+-9.767585795e-08f, -9.662981446e-08f, -9.558378995e-08f, -9.453778624e-08f, -9.349180515e-08f, -9.244584849e-08f, -9.139991808e-08f, -9.035401574e-08f, -8.930814327e-08f, -8.826230248e-08f,
+-8.721649520e-08f, -8.617072324e-08f, -8.512498840e-08f, -8.407929250e-08f, -8.303363735e-08f, -8.198802476e-08f, -8.094245655e-08f, -7.989693452e-08f, -7.885146048e-08f, -7.780603624e-08f,
+-7.676066361e-08f, -7.571534440e-08f, -7.467008043e-08f, -7.362487348e-08f, -7.257972538e-08f, -7.153463793e-08f, -7.048961294e-08f, -6.944465221e-08f, -6.839975755e-08f, -6.735493077e-08f,
+-6.631017366e-08f, -6.526548804e-08f, -6.422087570e-08f, -6.317633846e-08f, -6.213187810e-08f, -6.108749645e-08f, -6.004319529e-08f, -5.899897644e-08f, -5.795484168e-08f, -5.691079283e-08f,
+-5.586683168e-08f, -5.482296003e-08f, -5.377917969e-08f, -5.273549244e-08f, -5.169190010e-08f, -5.064840445e-08f, -4.960500729e-08f, -4.856171043e-08f, -4.751851565e-08f, -4.647542475e-08f,
+-4.543243954e-08f, -4.438956180e-08f, -4.334679332e-08f, -4.230413591e-08f, -4.126159135e-08f, -4.021916144e-08f, -3.917684798e-08f, -3.813465274e-08f, -3.709257753e-08f, -3.605062413e-08f,
+-3.500879433e-08f, -3.396708993e-08f, -3.292551272e-08f, -3.188406447e-08f, -3.084274698e-08f, -2.980156205e-08f, -2.876051144e-08f, -2.771959696e-08f, -2.667882038e-08f, -2.563818350e-08f,
+-2.459768809e-08f, -2.355733594e-08f, -2.251712884e-08f, -2.147706857e-08f, -2.043715690e-08f, -1.939739563e-08f, -1.835778653e-08f, -1.731833138e-08f, -1.627903197e-08f, -1.523989007e-08f,
+-1.420090746e-08f, -1.316208593e-08f, -1.212342724e-08f, -1.108493318e-08f, -1.004660552e-08f, -9.008446041e-09f, -7.970456514e-09f, -6.932638715e-09f, -5.894994419e-09f, -4.857525398e-09f,
+-3.820233427e-09f, -2.783120276e-09f, -1.746187719e-09f, -7.094375244e-10f, 3.271285358e-10f, 1.363508692e-09f, 2.399701176e-09f, 3.435704218e-09f, 4.471516052e-09f, 5.507134909e-09f,
+6.542559023e-09f, 7.577786629e-09f, 8.612815962e-09f, 9.647645256e-09f, 1.068227275e-08f, 1.171669667e-08f, 1.275091527e-08f, 1.378492678e-08f, 1.481872944e-08f, 1.585232149e-08f,
+1.688570117e-08f, 1.791886671e-08f, 1.895181637e-08f, 1.998454838e-08f, 2.101706099e-08f, 2.204935244e-08f, 2.308142097e-08f, 2.411326483e-08f, 2.514488227e-08f, 2.617627153e-08f,
+2.720743085e-08f, 2.823835850e-08f, 2.926905271e-08f, 3.029951173e-08f, 3.132973382e-08f, 3.235971722e-08f, 3.338946020e-08f, 3.441896099e-08f, 3.544821785e-08f, 3.647722904e-08f,
+3.750599280e-08f, 3.853450741e-08f, 3.956277110e-08f, 4.059078215e-08f, 4.161853879e-08f, 4.264603931e-08f, 4.367328194e-08f, 4.470026496e-08f, 4.572698661e-08f, 4.675344518e-08f,
+4.777963890e-08f, 4.880556606e-08f, 4.983122491e-08f, 5.085661371e-08f, 5.188173074e-08f, 5.290657425e-08f, 5.393114252e-08f, 5.495543381e-08f, 5.597944639e-08f, 5.700317852e-08f,
+5.802662849e-08f, 5.904979455e-08f, 6.007267499e-08f, 6.109526806e-08f, 6.211757206e-08f, 6.313958524e-08f, 6.416130589e-08f, 6.518273227e-08f, 6.620386267e-08f, 6.722469537e-08f,
+6.824522864e-08f, 6.926546075e-08f, 7.028539000e-08f, 7.130501466e-08f, 7.232433300e-08f, 7.334334332e-08f, 7.436204390e-08f, 7.538043302e-08f, 7.639850896e-08f, 7.741627001e-08f,
+7.843371446e-08f, 7.945084060e-08f, 8.046764670e-08f, 8.148413107e-08f, 8.250029199e-08f, 8.351612775e-08f, 8.453163664e-08f, 8.554681696e-08f, 8.656166699e-08f, 8.757618504e-08f,
+8.859036940e-08f, 8.960421836e-08f, 9.061773023e-08f, 9.163090329e-08f, 9.264373585e-08f, 9.365622620e-08f, 9.466837265e-08f, 9.568017351e-08f, 9.669162706e-08f, 9.770273162e-08f,
+9.871348548e-08f, 9.972388696e-08f, 1.007339344e-07f, 1.017436260e-07f, 1.027529601e-07f, 1.037619351e-07f, 1.047705493e-07f, 1.057788009e-07f, 1.067866883e-07f, 1.077942098e-07f,
+1.088013636e-07f, 1.098081482e-07f, 1.108145618e-07f, 1.118206028e-07f, 1.128262694e-07f, 1.138315600e-07f, 1.148364729e-07f, 1.158410064e-07f, 1.168451589e-07f, 1.178489286e-07f,
+1.188523139e-07f, 1.198553131e-07f, 1.208579246e-07f, 1.218601466e-07f, 1.228619775e-07f, 1.238634156e-07f, 1.248644592e-07f, 1.258651068e-07f, 1.268653565e-07f, 1.278652067e-07f,
+1.288646559e-07f, 1.298637022e-07f, 1.308623441e-07f, 1.318605798e-07f, 1.328584077e-07f, 1.338558262e-07f, 1.348528336e-07f, 1.358494282e-07f, 1.368456084e-07f, 1.378413724e-07f,
+1.388367188e-07f, 1.398316457e-07f, 1.408261515e-07f, 1.418202347e-07f, 1.428138934e-07f, 1.438071262e-07f, 1.447999312e-07f, 1.457923070e-07f, 1.467842518e-07f, 1.477757639e-07f,
+1.487668418e-07f, 1.497574838e-07f, 1.507476882e-07f, 1.517374534e-07f, 1.527267778e-07f, 1.537156597e-07f, 1.547040975e-07f, 1.556920895e-07f, 1.566796341e-07f, 1.576667296e-07f,
+1.586533745e-07f, 1.596395671e-07f, 1.606253057e-07f, 1.616105888e-07f, 1.625954146e-07f, 1.635797816e-07f, 1.645636881e-07f, 1.655471325e-07f, 1.665301132e-07f, 1.675126286e-07f,
+1.684946769e-07f, 1.694762567e-07f, 1.704573662e-07f, 1.714380039e-07f, 1.724181681e-07f, 1.733978573e-07f, 1.743770697e-07f, 1.753558038e-07f, 1.763340579e-07f, 1.773118305e-07f,
+1.782891199e-07f, 1.792659246e-07f, 1.802422428e-07f, 1.812180730e-07f, 1.821934136e-07f, 1.831682630e-07f, 1.841426196e-07f, 1.851164817e-07f, 1.860898478e-07f, 1.870627162e-07f,
+1.880350853e-07f, 1.890069537e-07f, 1.899783195e-07f, 1.909491813e-07f, 1.919195375e-07f, 1.928893864e-07f, 1.938587265e-07f, 1.948275561e-07f, 1.957958737e-07f, 1.967636777e-07f,
+1.977309665e-07f, 1.986977384e-07f, 1.996639920e-07f, 2.006297256e-07f, 2.015949376e-07f, 2.025596264e-07f, 2.035237906e-07f, 2.044874284e-07f, 2.054505383e-07f, 2.064131187e-07f,
+2.073751681e-07f, 2.083366848e-07f, 2.092976673e-07f, 2.102581140e-07f, 2.112180234e-07f, 2.121773938e-07f, 2.131362237e-07f, 2.140945115e-07f, 2.150522557e-07f, 2.160094547e-07f,
+2.169661069e-07f, 2.179222107e-07f, 2.188777646e-07f, 2.198327670e-07f, 2.207872164e-07f, 2.217411112e-07f, 2.226944498e-07f, 2.236472307e-07f, 2.245994524e-07f, 2.255511132e-07f,
+2.265022116e-07f, 2.274527461e-07f, 2.284027151e-07f, 2.293521170e-07f, 2.303009503e-07f, 2.312492136e-07f, 2.321969051e-07f, 2.331440234e-07f, 2.340905669e-07f, 2.350365341e-07f,
+2.359819234e-07f, 2.369267333e-07f, 2.378709623e-07f, 2.388146088e-07f, 2.397576713e-07f, 2.407001482e-07f, 2.416420381e-07f, 2.425833393e-07f, 2.435240504e-07f, 2.444641698e-07f,
+2.454036960e-07f, 2.463426274e-07f, 2.472809626e-07f, 2.482187000e-07f, 2.491558381e-07f, 2.500923753e-07f, 2.510283102e-07f, 2.519636413e-07f, 2.528983669e-07f, 2.538324856e-07f,
+2.547659959e-07f, 2.556988962e-07f, 2.566311851e-07f, 2.575628611e-07f, 2.584939225e-07f, 2.594243680e-07f, 2.603541960e-07f, 2.612834049e-07f, 2.622119934e-07f, 2.631399599e-07f,
+2.640673028e-07f, 2.649940208e-07f, 2.659201122e-07f, 2.668455756e-07f, 2.677704095e-07f, 2.686946125e-07f, 2.696181829e-07f, 2.705411193e-07f, 2.714634203e-07f, 2.723850842e-07f,
+2.733061098e-07f, 2.742264954e-07f, 2.751462395e-07f, 2.760653407e-07f, 2.769837976e-07f, 2.779016085e-07f, 2.788187721e-07f, 2.797352868e-07f, 2.806511513e-07f, 2.815663639e-07f,
+2.824809233e-07f, 2.833948279e-07f, 2.843080763e-07f, 2.852206671e-07f, 2.861325986e-07f, 2.870438696e-07f, 2.879544784e-07f, 2.888644238e-07f, 2.897737041e-07f, 2.906823179e-07f,
+2.915902638e-07f, 2.924975402e-07f, 2.934041459e-07f, 2.943100792e-07f, 2.952153387e-07f, 2.961199230e-07f, 2.970238307e-07f, 2.979270602e-07f, 2.988296102e-07f, 2.997314791e-07f,
+3.006326656e-07f, 3.015331682e-07f, 3.024329854e-07f, 3.033321158e-07f, 3.042305579e-07f, 3.051283104e-07f, 3.060253718e-07f, 3.069217406e-07f, 3.078174155e-07f, 3.087123949e-07f,
+3.096066775e-07f, 3.105002618e-07f, 3.113931464e-07f, 3.122853298e-07f, 3.131768107e-07f, 3.140675877e-07f, 3.149576592e-07f, 3.158470238e-07f, 3.167356802e-07f, 3.176236270e-07f,
+3.185108627e-07f, 3.193973858e-07f, 3.202831951e-07f, 3.211682890e-07f, 3.220526662e-07f, 3.229363252e-07f, 3.238192647e-07f, 3.247014832e-07f, 3.255829794e-07f, 3.264637518e-07f,
+3.273437990e-07f, 3.282231196e-07f, 3.291017123e-07f, 3.299795756e-07f, 3.308567082e-07f, 3.317331085e-07f, 3.326087754e-07f, 3.334837073e-07f, 3.343579028e-07f, 3.352313607e-07f,
+3.361040794e-07f, 3.369760576e-07f, 3.378472940e-07f, 3.387177871e-07f, 3.395875355e-07f, 3.404565380e-07f, 3.413247930e-07f, 3.421922993e-07f, 3.430590555e-07f, 3.439250601e-07f,
+3.447903118e-07f, 3.456548093e-07f, 3.465185511e-07f, 3.473815360e-07f, 3.482437625e-07f, 3.491052293e-07f, 3.499659350e-07f, 3.508258782e-07f, 3.516850577e-07f, 3.525434720e-07f,
+3.534011197e-07f, 3.542579996e-07f, 3.551141103e-07f, 3.559694505e-07f, 3.568240186e-07f, 3.576778136e-07f, 3.585308339e-07f, 3.593830782e-07f, 3.602345453e-07f, 3.610852337e-07f,
+3.619351421e-07f, 3.627842692e-07f, 3.636326137e-07f, 3.644801741e-07f, 3.653269493e-07f, 3.661729378e-07f, 3.670181382e-07f, 3.678625494e-07f, 3.687061700e-07f, 3.695489985e-07f,
+3.703910338e-07f, 3.712322745e-07f, 3.720727192e-07f, 3.729123667e-07f, 3.737512156e-07f, 3.745892646e-07f, 3.754265124e-07f, 3.762629577e-07f, 3.770985992e-07f, 3.779334356e-07f,
+3.787674655e-07f, 3.796006877e-07f, 3.804331009e-07f, 3.812647037e-07f, 3.820954948e-07f, 3.829254730e-07f, 3.837546369e-07f, 3.845829854e-07f, 3.854105169e-07f, 3.862372304e-07f,
+3.870631244e-07f, 3.878881977e-07f, 3.887124490e-07f, 3.895358771e-07f, 3.903584805e-07f, 3.911802582e-07f, 3.920012086e-07f, 3.928213307e-07f, 3.936406231e-07f, 3.944590846e-07f,
+3.952767138e-07f, 3.960935095e-07f, 3.969094704e-07f, 3.977245952e-07f, 3.985388828e-07f, 3.993523318e-07f, 4.001649409e-07f, 4.009767089e-07f, 4.017876346e-07f, 4.025977166e-07f,
+4.034069537e-07f, 4.042153447e-07f, 4.050228883e-07f, 4.058295833e-07f, 4.066354283e-07f, 4.074404223e-07f, 4.082445638e-07f, 4.090478517e-07f, 4.098502847e-07f, 4.106518616e-07f,
+4.114525811e-07f, 4.122524420e-07f, 4.130514431e-07f, 4.138495831e-07f, 4.146468608e-07f, 4.154432749e-07f, 4.162388243e-07f, 4.170335077e-07f, 4.178273239e-07f, 4.186202716e-07f,
+4.194123497e-07f, 4.202035568e-07f, 4.209938919e-07f, 4.217833536e-07f, 4.225719408e-07f, 4.233596522e-07f, 4.241464867e-07f, 4.249324429e-07f, 4.257175198e-07f, 4.265017161e-07f,
+4.272850305e-07f, 4.280674620e-07f, 4.288490092e-07f, 4.296296711e-07f, 4.304094463e-07f, 4.311883337e-07f, 4.319663321e-07f, 4.327434404e-07f, 4.335196572e-07f, 4.342949815e-07f,
+4.350694120e-07f, 4.358429475e-07f, 4.366155869e-07f, 4.373873290e-07f, 4.381581726e-07f, 4.389281166e-07f, 4.396971596e-07f, 4.404653007e-07f, 4.412325385e-07f, 4.419988720e-07f,
+4.427642999e-07f, 4.435288211e-07f, 4.442924345e-07f, 4.450551387e-07f, 4.458169328e-07f, 4.465778155e-07f, 4.473377857e-07f, 4.480968422e-07f, 4.488549839e-07f, 4.496122095e-07f,
+4.503685180e-07f, 4.511239082e-07f, 4.518783790e-07f, 4.526319292e-07f, 4.533845576e-07f, 4.541362631e-07f, 4.548870447e-07f, 4.556369010e-07f, 4.563858311e-07f, 4.571338337e-07f,
+4.578809078e-07f, 4.586270521e-07f, 4.593722656e-07f, 4.601165472e-07f, 4.608598957e-07f, 4.616023099e-07f, 4.623437888e-07f, 4.630843313e-07f, 4.638239362e-07f, 4.645626024e-07f,
+4.653003287e-07f, 4.660371142e-07f, 4.667729576e-07f, 4.675078579e-07f, 4.682418139e-07f, 4.689748245e-07f, 4.697068887e-07f, 4.704380053e-07f, 4.711681733e-07f, 4.718973914e-07f,
+4.726256587e-07f, 4.733529741e-07f, 4.740793364e-07f, 4.748047445e-07f, 4.755291974e-07f, 4.762526940e-07f, 4.769752331e-07f, 4.776968138e-07f, 4.784174348e-07f, 4.791370953e-07f,
+4.798557939e-07f, 4.805735298e-07f, 4.812903018e-07f, 4.820061088e-07f, 4.827209498e-07f, 4.834348236e-07f, 4.841477293e-07f, 4.848596658e-07f, 4.855706320e-07f, 4.862806267e-07f,
+4.869896491e-07f, 4.876976980e-07f, 4.884047724e-07f, 4.891108711e-07f, 4.898159932e-07f, 4.905201377e-07f, 4.912233033e-07f, 4.919254892e-07f, 4.926266943e-07f, 4.933269174e-07f,
+4.940261577e-07f, 4.947244140e-07f, 4.954216853e-07f, 4.961179706e-07f, 4.968132688e-07f, 4.975075789e-07f, 4.982008998e-07f, 4.988932307e-07f, 4.995845703e-07f, 5.002749178e-07f,
+5.009642720e-07f, 5.016526319e-07f, 5.023399967e-07f, 5.030263651e-07f, 5.037117362e-07f, 5.043961090e-07f, 5.050794826e-07f, 5.057618557e-07f, 5.064432276e-07f, 5.071235971e-07f,
+5.078029633e-07f, 5.084813251e-07f, 5.091586816e-07f, 5.098350317e-07f, 5.105103746e-07f, 5.111847091e-07f, 5.118580342e-07f, 5.125303491e-07f, 5.132016527e-07f, 5.138719440e-07f,
+5.145412220e-07f, 5.152094858e-07f, 5.158767344e-07f, 5.165429668e-07f, 5.172081820e-07f, 5.178723790e-07f, 5.185355569e-07f, 5.191977148e-07f, 5.198588515e-07f, 5.205189663e-07f,
+5.211780580e-07f, 5.218361258e-07f, 5.224931687e-07f, 5.231491857e-07f, 5.238041759e-07f, 5.244581383e-07f, 5.251110720e-07f, 5.257629760e-07f, 5.264138494e-07f, 5.270636912e-07f,
+5.277125004e-07f, 5.283602762e-07f, 5.290070176e-07f, 5.296527237e-07f, 5.302973935e-07f, 5.309410260e-07f, 5.315836204e-07f, 5.322251757e-07f, 5.328656911e-07f, 5.335051655e-07f,
+5.341435980e-07f, 5.347809877e-07f, 5.354173338e-07f, 5.360526352e-07f, 5.366868911e-07f, 5.373201006e-07f, 5.379522627e-07f, 5.385833765e-07f, 5.392134411e-07f, 5.398424556e-07f,
+5.404704192e-07f, 5.410973308e-07f, 5.417231896e-07f, 5.423479948e-07f, 5.429717453e-07f, 5.435944404e-07f, 5.442160791e-07f, 5.448366605e-07f, 5.454561837e-07f, 5.460746479e-07f,
+5.466920522e-07f, 5.473083956e-07f, 5.479236774e-07f, 5.485378966e-07f, 5.491510523e-07f, 5.497631437e-07f, 5.503741699e-07f, 5.509841300e-07f, 5.515930232e-07f, 5.522008486e-07f,
+5.528076053e-07f, 5.534132925e-07f, 5.540179092e-07f, 5.546214548e-07f, 5.552239282e-07f, 5.558253287e-07f, 5.564256553e-07f, 5.570249073e-07f, 5.576230837e-07f, 5.582201839e-07f,
+5.588162067e-07f, 5.594111516e-07f, 5.600050175e-07f, 5.605978038e-07f, 5.611895094e-07f, 5.617801337e-07f, 5.623696758e-07f, 5.629581347e-07f, 5.635455098e-07f, 5.641318002e-07f,
+5.647170050e-07f, 5.653011235e-07f, 5.658841548e-07f, 5.664660981e-07f, 5.670469526e-07f, 5.676267174e-07f, 5.682053918e-07f, 5.687829750e-07f, 5.693594661e-07f, 5.699348643e-07f,
+5.705091689e-07f, 5.710823790e-07f, 5.716544938e-07f, 5.722255126e-07f, 5.727954345e-07f, 5.733642587e-07f, 5.739319845e-07f, 5.744986111e-07f, 5.750641376e-07f, 5.756285633e-07f,
+5.761918874e-07f, 5.767541092e-07f, 5.773152278e-07f, 5.778752425e-07f, 5.784341525e-07f, 5.789919570e-07f, 5.795486552e-07f, 5.801042465e-07f, 5.806587299e-07f, 5.812121048e-07f,
+5.817643704e-07f, 5.823155259e-07f, 5.828655706e-07f, 5.834145037e-07f, 5.839623245e-07f, 5.845090322e-07f, 5.850546260e-07f, 5.855991053e-07f, 5.861424692e-07f, 5.866847170e-07f,
+5.872258480e-07f, 5.877658615e-07f, 5.883047566e-07f, 5.888425327e-07f, 5.893791891e-07f, 5.899147250e-07f, 5.904491396e-07f, 5.909824322e-07f, 5.915146022e-07f, 5.920456488e-07f,
+5.925755713e-07f, 5.931043689e-07f, 5.936320410e-07f, 5.941585867e-07f, 5.946840055e-07f, 5.952082966e-07f, 5.957314593e-07f, 5.962534929e-07f, 5.967743967e-07f, 5.972941699e-07f,
+5.978128119e-07f, 5.983303220e-07f, 5.988466995e-07f, 5.993619437e-07f, 5.998760539e-07f, 6.003890294e-07f, 6.009008696e-07f, 6.014115736e-07f, 6.019211409e-07f, 6.024295708e-07f,
+6.029368626e-07f, 6.034430157e-07f, 6.039480292e-07f, 6.044519027e-07f, 6.049546353e-07f, 6.054562265e-07f, 6.059566755e-07f, 6.064559817e-07f, 6.069541445e-07f, 6.074511632e-07f,
+6.079470371e-07f, 6.084417655e-07f, 6.089353479e-07f, 6.094277835e-07f, 6.099190717e-07f, 6.104092119e-07f, 6.108982034e-07f, 6.113860456e-07f, 6.118727379e-07f, 6.123582795e-07f,
+6.128426699e-07f, 6.133259084e-07f, 6.138079944e-07f, 6.142889272e-07f, 6.147687063e-07f, 6.152473310e-07f, 6.157248007e-07f, 6.162011147e-07f, 6.166762725e-07f, 6.171502734e-07f,
+6.176231169e-07f, 6.180948022e-07f, 6.185653288e-07f, 6.190346960e-07f, 6.195029034e-07f, 6.199699502e-07f, 6.204358358e-07f, 6.209005598e-07f, 6.213641213e-07f, 6.218265200e-07f,
+6.222877551e-07f, 6.227478261e-07f, 6.232067324e-07f, 6.236644734e-07f, 6.241210485e-07f, 6.245764571e-07f, 6.250306987e-07f, 6.254837726e-07f, 6.259356783e-07f, 6.263864153e-07f,
+6.268359829e-07f, 6.272843806e-07f, 6.277316077e-07f, 6.281776639e-07f, 6.286225484e-07f, 6.290662607e-07f, 6.295088002e-07f, 6.299501665e-07f, 6.303903589e-07f, 6.308293769e-07f,
+6.312672199e-07f, 6.317038874e-07f, 6.321393788e-07f, 6.325736936e-07f, 6.330068313e-07f, 6.334387913e-07f, 6.338695731e-07f, 6.342991761e-07f, 6.347275997e-07f, 6.351548436e-07f,
+6.355809071e-07f, 6.360057897e-07f, 6.364294909e-07f, 6.368520102e-07f, 6.372733470e-07f, 6.376935008e-07f, 6.381124711e-07f, 6.385302574e-07f, 6.389468592e-07f, 6.393622759e-07f,
+6.397765071e-07f, 6.401895523e-07f, 6.406014109e-07f, 6.410120824e-07f, 6.414215664e-07f, 6.418298623e-07f, 6.422369697e-07f, 6.426428881e-07f, 6.430476169e-07f, 6.434511557e-07f,
+6.438535040e-07f, 6.442546612e-07f, 6.446546271e-07f, 6.450534009e-07f, 6.454509823e-07f, 6.458473708e-07f, 6.462425660e-07f, 6.466365672e-07f, 6.470293742e-07f, 6.474209863e-07f,
+6.478114032e-07f, 6.482006244e-07f, 6.485886494e-07f, 6.489754778e-07f, 6.493611090e-07f, 6.497455427e-07f, 6.501287784e-07f, 6.505108157e-07f, 6.508916540e-07f, 6.512712930e-07f,
+6.516497322e-07f, 6.520269712e-07f, 6.524030095e-07f, 6.527778467e-07f, 6.531514823e-07f, 6.535239160e-07f, 6.538951473e-07f, 6.542651757e-07f, 6.546340009e-07f, 6.550016224e-07f,
+6.553680397e-07f, 6.557332526e-07f, 6.560972605e-07f, 6.564600631e-07f, 6.568216599e-07f, 6.571820505e-07f, 6.575412345e-07f, 6.578992115e-07f, 6.582559811e-07f, 6.586115429e-07f,
+6.589658965e-07f, 6.593190415e-07f, 6.596709775e-07f, 6.600217041e-07f, 6.603712209e-07f, 6.607195276e-07f, 6.610666236e-07f, 6.614125088e-07f, 6.617571826e-07f, 6.621006447e-07f,
+6.624428947e-07f, 6.627839323e-07f, 6.631237570e-07f, 6.634623686e-07f, 6.637997665e-07f, 6.641359505e-07f, 6.644709202e-07f, 6.648046752e-07f, 6.651372152e-07f, 6.654685398e-07f,
+6.657986487e-07f, 6.661275414e-07f, 6.664552177e-07f, 6.667816772e-07f, 6.671069195e-07f, 6.674309443e-07f, 6.677537513e-07f, 6.680753402e-07f, 6.683957104e-07f, 6.687148619e-07f,
+6.690327941e-07f, 6.693495068e-07f, 6.696649997e-07f, 6.699792724e-07f, 6.702923245e-07f, 6.706041559e-07f, 6.709147661e-07f, 6.712241548e-07f, 6.715323217e-07f, 6.718392665e-07f,
+6.721449889e-07f, 6.724494885e-07f, 6.727527652e-07f, 6.730548184e-07f, 6.733556481e-07f, 6.736552537e-07f, 6.739536352e-07f, 6.742507921e-07f, 6.745467241e-07f, 6.748414310e-07f,
+6.751349125e-07f, 6.754271683e-07f, 6.757181980e-07f, 6.760080015e-07f, 6.762965784e-07f, 6.765839285e-07f, 6.768700514e-07f, 6.771549469e-07f, 6.774386148e-07f, 6.777210547e-07f,
+6.780022664e-07f, 6.782822496e-07f, 6.785610041e-07f, 6.788385296e-07f, 6.791148257e-07f, 6.793898924e-07f, 6.796637293e-07f, 6.799363361e-07f, 6.802077127e-07f, 6.804778587e-07f,
+6.807467739e-07f, 6.810144581e-07f, 6.812809111e-07f, 6.815461325e-07f, 6.818101222e-07f, 6.820728798e-07f, 6.823344053e-07f, 6.825946983e-07f, 6.828537586e-07f, 6.831115860e-07f,
+6.833681803e-07f, 6.836235412e-07f, 6.838776685e-07f, 6.841305620e-07f, 6.843822216e-07f, 6.846326468e-07f, 6.848818377e-07f, 6.851297939e-07f, 6.853765152e-07f, 6.856220015e-07f,
+6.858662525e-07f, 6.861092680e-07f, 6.863510479e-07f, 6.865915919e-07f, 6.868308998e-07f, 6.870689715e-07f, 6.873058067e-07f, 6.875414053e-07f, 6.877757671e-07f, 6.880088919e-07f,
+6.882407795e-07f, 6.884714298e-07f, 6.887008425e-07f, 6.889290175e-07f, 6.891559546e-07f, 6.893816536e-07f, 6.896061145e-07f, 6.898293369e-07f, 6.900513208e-07f, 6.902720659e-07f,
+6.904915722e-07f, 6.907098395e-07f, 6.909268675e-07f, 6.911426563e-07f, 6.913572055e-07f, 6.915705151e-07f, 6.917825849e-07f, 6.919934148e-07f, 6.922030045e-07f, 6.924113541e-07f,
+6.926184633e-07f, 6.928243321e-07f, 6.930289602e-07f, 6.932323476e-07f, 6.934344940e-07f, 6.936353995e-07f, 6.938350639e-07f, 6.940334869e-07f, 6.942306686e-07f, 6.944266089e-07f,
+6.946213075e-07f, 6.948147643e-07f, 6.950069794e-07f, 6.951979525e-07f, 6.953876835e-07f, 6.955761724e-07f, 6.957634191e-07f, 6.959494233e-07f, 6.961341851e-07f, 6.963177044e-07f,
+6.964999810e-07f, 6.966810149e-07f, 6.968608059e-07f, 6.970393540e-07f, 6.972166592e-07f, 6.973927212e-07f, 6.975675401e-07f, 6.977411157e-07f, 6.979134480e-07f, 6.980845369e-07f,
+6.982543823e-07f, 6.984229842e-07f, 6.985903424e-07f, 6.987564571e-07f, 6.989213279e-07f, 6.990849550e-07f, 6.992473382e-07f, 6.994084775e-07f, 6.995683728e-07f, 6.997270241e-07f,
+6.998844314e-07f, 7.000405945e-07f, 7.001955134e-07f, 7.003491882e-07f, 7.005016186e-07f, 7.006528048e-07f, 7.008027467e-07f, 7.009514442e-07f, 7.010988973e-07f, 7.012451059e-07f,
+7.013900701e-07f, 7.015337899e-07f, 7.016762651e-07f, 7.018174957e-07f, 7.019574819e-07f, 7.020962234e-07f, 7.022337204e-07f, 7.023699728e-07f, 7.025049806e-07f, 7.026387437e-07f,
+7.027712622e-07f, 7.029025361e-07f, 7.030325654e-07f, 7.031613500e-07f, 7.032888900e-07f, 7.034151853e-07f, 7.035402361e-07f, 7.036640422e-07f, 7.037866037e-07f, 7.039079207e-07f,
+7.040279930e-07f, 7.041468208e-07f, 7.042644041e-07f, 7.043807428e-07f, 7.044958370e-07f, 7.046096868e-07f, 7.047222921e-07f, 7.048336530e-07f, 7.049437695e-07f, 7.050526417e-07f,
+7.051602696e-07f, 7.052666531e-07f, 7.053717925e-07f, 7.054756877e-07f, 7.055783387e-07f, 7.056797456e-07f, 7.057799085e-07f, 7.058788273e-07f, 7.059765023e-07f, 7.060729333e-07f,
+7.061681205e-07f, 7.062620640e-07f, 7.063547637e-07f, 7.064462198e-07f, 7.065364323e-07f, 7.066254013e-07f, 7.067131269e-07f, 7.067996091e-07f, 7.068848480e-07f, 7.069688437e-07f,
+7.070515963e-07f, 7.071331058e-07f, 7.072133724e-07f, 7.072923960e-07f, 7.073701769e-07f, 7.074467151e-07f, 7.075220106e-07f, 7.075960637e-07f, 7.076688743e-07f, 7.077404426e-07f,
+7.078107687e-07f, 7.078798526e-07f, 7.079476946e-07f, 7.080142946e-07f, 7.080796529e-07f, 7.081437694e-07f, 7.082066444e-07f, 7.082682779e-07f, 7.083286701e-07f, 7.083878211e-07f,
+7.084457310e-07f, 7.085023999e-07f, 7.085578280e-07f, 7.086120154e-07f, 7.086649622e-07f, 7.087166685e-07f, 7.087671345e-07f, 7.088163604e-07f, 7.088643462e-07f, 7.089110921e-07f,
+7.089565982e-07f, 7.090008647e-07f, 7.090438918e-07f, 7.090856796e-07f, 7.091262282e-07f, 7.091655378e-07f, 7.092036086e-07f, 7.092404407e-07f, 7.092760342e-07f, 7.093103894e-07f,
+7.093435064e-07f, 7.093753854e-07f, 7.094060265e-07f, 7.094354299e-07f, 7.094635958e-07f, 7.094905243e-07f, 7.095162157e-07f, 7.095406701e-07f, 7.095638877e-07f, 7.095858686e-07f,
+7.096066132e-07f, 7.096261215e-07f, 7.096443937e-07f, 7.096614301e-07f, 7.096772308e-07f, 7.096917961e-07f, 7.097051261e-07f, 7.097172210e-07f, 7.097280810e-07f, 7.097377064e-07f,
+7.097460973e-07f, 7.097532540e-07f, 7.097591767e-07f, 7.097638655e-07f, 7.097673207e-07f, 7.097695426e-07f, 7.097705313e-07f, 7.097702870e-07f, 7.097688100e-07f, 7.097661006e-07f,
+7.097621588e-07f, 7.097569851e-07f, 7.097505795e-07f, 7.097429424e-07f, 7.097340739e-07f, 7.097239744e-07f, 7.097126440e-07f, 7.097000830e-07f, 7.096862916e-07f, 7.096712702e-07f,
+7.096550188e-07f, 7.096375379e-07f, 7.096188276e-07f, 7.095988882e-07f, 7.095777199e-07f, 7.095553231e-07f, 7.095316980e-07f, 7.095068448e-07f, 7.094807638e-07f, 7.094534552e-07f,
+7.094249195e-07f, 7.093951567e-07f, 7.093641673e-07f, 7.093319514e-07f, 7.092985093e-07f, 7.092638414e-07f, 7.092279480e-07f, 7.091908292e-07f, 7.091524854e-07f, 7.091129168e-07f,
+7.090721239e-07f, 7.090301068e-07f, 7.089868658e-07f, 7.089424013e-07f, 7.088967136e-07f, 7.088498029e-07f, 7.088016696e-07f, 7.087523140e-07f, 7.087017363e-07f, 7.086499369e-07f,
+7.085969161e-07f, 7.085426742e-07f, 7.084872115e-07f, 7.084305283e-07f, 7.083726251e-07f, 7.083135020e-07f, 7.082531594e-07f, 7.081915977e-07f, 7.081288171e-07f, 7.080648180e-07f,
+7.079996008e-07f, 7.079331657e-07f, 7.078655131e-07f, 7.077966434e-07f, 7.077265568e-07f, 7.076552538e-07f, 7.075827346e-07f, 7.075089997e-07f, 7.074340493e-07f, 7.073578838e-07f,
+7.072805036e-07f, 7.072019090e-07f, 7.071221004e-07f, 7.070410782e-07f, 7.069588426e-07f, 7.068753941e-07f, 7.067907331e-07f, 7.067048598e-07f, 7.066177748e-07f, 7.065294782e-07f,
+7.064399706e-07f, 7.063492522e-07f, 7.062573236e-07f, 7.061641850e-07f, 7.060698368e-07f, 7.059742794e-07f, 7.058775132e-07f, 7.057795386e-07f, 7.056803560e-07f, 7.055799658e-07f,
+7.054783683e-07f, 7.053755640e-07f, 7.052715533e-07f, 7.051663365e-07f, 7.050599141e-07f, 7.049522864e-07f, 7.048434539e-07f, 7.047334170e-07f, 7.046221761e-07f, 7.045097316e-07f,
+7.043960839e-07f, 7.042812334e-07f, 7.041651806e-07f, 7.040479259e-07f, 7.039294696e-07f, 7.038098123e-07f, 7.036889544e-07f, 7.035668962e-07f, 7.034436382e-07f, 7.033191808e-07f,
+7.031935246e-07f, 7.030666698e-07f, 7.029386170e-07f, 7.028093665e-07f, 7.026789189e-07f, 7.025472746e-07f, 7.024144340e-07f, 7.022803976e-07f, 7.021451658e-07f, 7.020087391e-07f,
+7.018711179e-07f, 7.017323027e-07f, 7.015922939e-07f, 7.014510920e-07f, 7.013086975e-07f, 7.011651109e-07f, 7.010203325e-07f, 7.008743629e-07f, 7.007272025e-07f, 7.005788519e-07f,
+7.004293114e-07f, 7.002785816e-07f, 7.001266630e-07f, 6.999735559e-07f, 6.998192610e-07f, 6.996637786e-07f, 6.995071094e-07f, 6.993492537e-07f, 6.991902120e-07f, 6.990299849e-07f,
+6.988685728e-07f, 6.987059763e-07f, 6.985421958e-07f, 6.983772318e-07f, 6.982110849e-07f, 6.980437555e-07f, 6.978752442e-07f, 6.977055514e-07f, 6.975346776e-07f, 6.973626235e-07f,
+6.971893895e-07f, 6.970149760e-07f, 6.968393837e-07f, 6.966626130e-07f, 6.964846645e-07f, 6.963055387e-07f, 6.961252361e-07f, 6.959437573e-07f, 6.957611027e-07f, 6.955772729e-07f,
+6.953922685e-07f, 6.952060900e-07f, 6.950187378e-07f, 6.948302126e-07f, 6.946405150e-07f, 6.944496453e-07f, 6.942576042e-07f, 6.940643923e-07f, 6.938700100e-07f, 6.936744580e-07f,
+6.934777368e-07f, 6.932798468e-07f, 6.930807888e-07f, 6.928805633e-07f, 6.926791707e-07f, 6.924766118e-07f, 6.922728869e-07f, 6.920679968e-07f, 6.918619420e-07f, 6.916547230e-07f,
+6.914463404e-07f, 6.912367948e-07f, 6.910260868e-07f, 6.908142170e-07f, 6.906011859e-07f, 6.903869940e-07f, 6.901716421e-07f, 6.899551307e-07f, 6.897374603e-07f, 6.895186316e-07f,
+6.892986451e-07f, 6.890775015e-07f, 6.888552013e-07f, 6.886317452e-07f, 6.884071336e-07f, 6.881813674e-07f, 6.879544469e-07f, 6.877263729e-07f, 6.874971460e-07f, 6.872667667e-07f,
+6.870352357e-07f, 6.868025535e-07f, 6.865687209e-07f, 6.863337384e-07f, 6.860976066e-07f, 6.858603261e-07f, 6.856218976e-07f, 6.853823217e-07f, 6.851415991e-07f, 6.848997303e-07f,
+6.846567159e-07f, 6.844125567e-07f, 6.841672532e-07f, 6.839208061e-07f, 6.836732161e-07f, 6.834244836e-07f, 6.831746095e-07f, 6.829235943e-07f, 6.826714387e-07f, 6.824181433e-07f,
+6.821637088e-07f, 6.819081358e-07f, 6.816514250e-07f, 6.813935770e-07f, 6.811345926e-07f, 6.808744722e-07f, 6.806132167e-07f, 6.803508266e-07f, 6.800873027e-07f, 6.798226455e-07f,
+6.795568559e-07f, 6.792899343e-07f, 6.790218815e-07f, 6.787526983e-07f, 6.784823851e-07f, 6.782109428e-07f, 6.779383720e-07f, 6.776646734e-07f, 6.773898476e-07f, 6.771138954e-07f,
+6.768368174e-07f, 6.765586143e-07f, 6.762792868e-07f, 6.759988357e-07f, 6.757172615e-07f, 6.754345650e-07f, 6.751507469e-07f, 6.748658078e-07f, 6.745797486e-07f, 6.742925698e-07f,
+6.740042722e-07f, 6.737148565e-07f, 6.734243234e-07f, 6.731326736e-07f, 6.728399078e-07f, 6.725460267e-07f, 6.722510311e-07f, 6.719549216e-07f, 6.716576990e-07f, 6.713593640e-07f,
+6.710599174e-07f, 6.707593598e-07f, 6.704576919e-07f, 6.701549145e-07f, 6.698510284e-07f, 6.695460342e-07f, 6.692399327e-07f, 6.689327246e-07f, 6.686244107e-07f, 6.683149917e-07f,
+6.680044683e-07f, 6.676928413e-07f, 6.673801114e-07f, 6.670662793e-07f, 6.667513459e-07f, 6.664353119e-07f, 6.661181779e-07f, 6.657999448e-07f, 6.654806134e-07f, 6.651601843e-07f,
+6.648386583e-07f, 6.645160362e-07f, 6.641923188e-07f, 6.638675067e-07f, 6.635416009e-07f, 6.632146020e-07f, 6.628865108e-07f, 6.625573281e-07f, 6.622270547e-07f, 6.618956912e-07f,
+6.615632386e-07f, 6.612296976e-07f, 6.608950689e-07f, 6.605593533e-07f, 6.602225517e-07f, 6.598846647e-07f, 6.595456933e-07f, 6.592056381e-07f, 6.588645000e-07f, 6.585222798e-07f,
+6.581789782e-07f, 6.578345960e-07f, 6.574891341e-07f, 6.571425933e-07f, 6.567949742e-07f, 6.564462778e-07f, 6.560965049e-07f, 6.557456561e-07f, 6.553937325e-07f, 6.550407347e-07f,
+6.546866636e-07f, 6.543315199e-07f, 6.539753046e-07f, 6.536180183e-07f, 6.532596620e-07f, 6.529002364e-07f, 6.525397424e-07f, 6.521781808e-07f, 6.518155524e-07f, 6.514518581e-07f,
+6.510870986e-07f, 6.507212748e-07f, 6.503543875e-07f, 6.499864376e-07f, 6.496174258e-07f, 6.492473531e-07f, 6.488762203e-07f, 6.485040281e-07f, 6.481307775e-07f, 6.477564693e-07f,
+6.473811043e-07f, 6.470046834e-07f, 6.466272074e-07f, 6.462486772e-07f, 6.458690936e-07f, 6.454884575e-07f, 6.451067697e-07f, 6.447240311e-07f, 6.443402425e-07f, 6.439554048e-07f,
+6.435695189e-07f, 6.431825857e-07f, 6.427946059e-07f, 6.424055804e-07f, 6.420155102e-07f, 6.416243961e-07f, 6.412322389e-07f, 6.408390396e-07f, 6.404447990e-07f, 6.400495179e-07f,
+6.396531974e-07f, 6.392558381e-07f, 6.388574411e-07f, 6.384580072e-07f, 6.380575373e-07f, 6.376560322e-07f, 6.372534930e-07f, 6.368499203e-07f, 6.364453152e-07f, 6.360396786e-07f,
+6.356330112e-07f, 6.352253141e-07f, 6.348165881e-07f, 6.344068342e-07f, 6.339960531e-07f, 6.335842459e-07f, 6.331714134e-07f, 6.327575565e-07f, 6.323426762e-07f, 6.319267733e-07f,
+6.315098487e-07f, 6.310919035e-07f, 6.306729384e-07f, 6.302529544e-07f, 6.298319524e-07f, 6.294099333e-07f, 6.289868981e-07f, 6.285628477e-07f, 6.281377829e-07f, 6.277117048e-07f,
+6.272846143e-07f, 6.268565122e-07f, 6.264273995e-07f, 6.259972771e-07f, 6.255661460e-07f, 6.251340071e-07f, 6.247008613e-07f, 6.242667096e-07f, 6.238315530e-07f, 6.233953922e-07f,
+6.229582284e-07f, 6.225200624e-07f, 6.220808952e-07f, 6.216407277e-07f, 6.211995609e-07f, 6.207573957e-07f, 6.203142331e-07f, 6.198700741e-07f, 6.194249195e-07f, 6.189787704e-07f,
+6.185316276e-07f, 6.180834923e-07f, 6.176343652e-07f, 6.171842475e-07f, 6.167331399e-07f, 6.162810436e-07f, 6.158279595e-07f, 6.153738885e-07f, 6.149188317e-07f, 6.144627899e-07f,
+6.140057642e-07f, 6.135477556e-07f, 6.130887649e-07f, 6.126287933e-07f, 6.121678416e-07f, 6.117059109e-07f, 6.112430021e-07f, 6.107791162e-07f, 6.103142542e-07f, 6.098484171e-07f,
+6.093816059e-07f, 6.089138216e-07f, 6.084450651e-07f, 6.079753375e-07f, 6.075046398e-07f, 6.070329728e-07f, 6.065603378e-07f, 6.060867355e-07f, 6.056121671e-07f, 6.051366336e-07f,
+6.046601359e-07f, 6.041826750e-07f, 6.037042520e-07f, 6.032248679e-07f, 6.027445237e-07f, 6.022632203e-07f, 6.017809589e-07f, 6.012977403e-07f, 6.008135657e-07f, 6.003284361e-07f,
+5.998423524e-07f, 5.993553156e-07f, 5.988673269e-07f, 5.983783873e-07f, 5.978884976e-07f, 5.973976591e-07f, 5.969058726e-07f, 5.964131393e-07f, 5.959194602e-07f, 5.954248363e-07f,
+5.949292686e-07f, 5.944327581e-07f, 5.939353060e-07f, 5.934369132e-07f, 5.929375807e-07f, 5.924373097e-07f, 5.919361012e-07f, 5.914339561e-07f, 5.909308756e-07f, 5.904268607e-07f,
+5.899219125e-07f, 5.894160319e-07f, 5.889092200e-07f, 5.884014780e-07f, 5.878928068e-07f, 5.873832075e-07f, 5.868726812e-07f, 5.863612288e-07f, 5.858488516e-07f, 5.853355505e-07f,
+5.848213265e-07f, 5.843061809e-07f, 5.837901145e-07f, 5.832731286e-07f, 5.827552241e-07f, 5.822364021e-07f, 5.817166637e-07f, 5.811960100e-07f, 5.806744421e-07f, 5.801519609e-07f,
+5.796285676e-07f, 5.791042634e-07f, 5.785790491e-07f, 5.780529260e-07f, 5.775258951e-07f, 5.769979575e-07f, 5.764691142e-07f, 5.759393664e-07f, 5.754087152e-07f, 5.748771616e-07f,
+5.743447067e-07f, 5.738113517e-07f, 5.732770975e-07f, 5.727419454e-07f, 5.722058963e-07f, 5.716689515e-07f, 5.711311119e-07f, 5.705923787e-07f, 5.700527530e-07f, 5.695122360e-07f,
+5.689708286e-07f, 5.684285320e-07f, 5.678853473e-07f, 5.673412757e-07f, 5.667963181e-07f, 5.662504758e-07f, 5.657037499e-07f, 5.651561414e-07f, 5.646076515e-07f, 5.640582812e-07f,
+5.635080318e-07f, 5.629569043e-07f, 5.624048998e-07f, 5.618520195e-07f, 5.612982645e-07f, 5.607436359e-07f, 5.601881348e-07f, 5.596317624e-07f, 5.590745197e-07f, 5.585164080e-07f,
+5.579574283e-07f, 5.573975818e-07f, 5.568368697e-07f, 5.562752929e-07f, 5.557128527e-07f, 5.551495503e-07f, 5.545853867e-07f, 5.540203630e-07f, 5.534544805e-07f, 5.528877403e-07f,
+5.523201435e-07f, 5.517516913e-07f, 5.511823847e-07f, 5.506122250e-07f, 5.500412134e-07f, 5.494693508e-07f, 5.488966386e-07f, 5.483230778e-07f, 5.477486696e-07f, 5.471734151e-07f,
+5.465973156e-07f, 5.460203722e-07f, 5.454425860e-07f, 5.448639581e-07f, 5.442844898e-07f, 5.437041823e-07f, 5.431230365e-07f, 5.425410539e-07f, 5.419582354e-07f, 5.413745823e-07f,
+5.407900958e-07f, 5.402047769e-07f, 5.396186269e-07f, 5.390316470e-07f, 5.384438383e-07f, 5.378552020e-07f, 5.372657393e-07f, 5.366754513e-07f, 5.360843393e-07f, 5.354924043e-07f,
+5.348996476e-07f, 5.343060704e-07f, 5.337116739e-07f, 5.331164592e-07f, 5.325204275e-07f, 5.319235800e-07f, 5.313259179e-07f, 5.307274424e-07f, 5.301281547e-07f, 5.295280559e-07f,
+5.289271473e-07f, 5.283254301e-07f, 5.277229054e-07f, 5.271195744e-07f, 5.265154383e-07f, 5.259104984e-07f, 5.253047559e-07f, 5.246982119e-07f, 5.240908676e-07f, 5.234827242e-07f,
+5.228737830e-07f, 5.222640452e-07f, 5.216535119e-07f, 5.210421844e-07f, 5.204300638e-07f, 5.198171515e-07f, 5.192034485e-07f, 5.185889561e-07f, 5.179736756e-07f, 5.173576081e-07f,
+5.167407549e-07f, 5.161231171e-07f, 5.155046960e-07f, 5.148854928e-07f, 5.142655087e-07f, 5.136447450e-07f, 5.130232029e-07f, 5.124008836e-07f, 5.117777882e-07f, 5.111539182e-07f,
+5.105292746e-07f, 5.099038587e-07f, 5.092776717e-07f, 5.086507149e-07f, 5.080229895e-07f, 5.073944967e-07f, 5.067652378e-07f, 5.061352140e-07f, 5.055044265e-07f, 5.048728766e-07f,
+5.042405654e-07f, 5.036074944e-07f, 5.029736646e-07f, 5.023390773e-07f, 5.017037338e-07f, 5.010676354e-07f, 5.004307832e-07f, 4.997931785e-07f, 4.991548225e-07f, 4.985157166e-07f,
+4.978758619e-07f, 4.972352597e-07f, 4.965939112e-07f, 4.959518178e-07f, 4.953089806e-07f, 4.946654009e-07f, 4.940210800e-07f, 4.933760192e-07f, 4.927302196e-07f, 4.920836825e-07f,
+4.914364093e-07f, 4.907884011e-07f, 4.901396592e-07f, 4.894901850e-07f, 4.888399795e-07f, 4.881890442e-07f, 4.875373803e-07f, 4.868849890e-07f, 4.862318717e-07f, 4.855780295e-07f,
+4.849234638e-07f, 4.842681758e-07f, 4.836121669e-07f, 4.829554382e-07f, 4.822979910e-07f, 4.816398267e-07f, 4.809809465e-07f, 4.803213516e-07f, 4.796610434e-07f, 4.790000232e-07f,
+4.783382921e-07f, 4.776758516e-07f, 4.770127028e-07f, 4.763488471e-07f, 4.756842858e-07f, 4.750190201e-07f, 4.743530513e-07f, 4.736863807e-07f, 4.730190096e-07f, 4.723509393e-07f,
+4.716821711e-07f, 4.710127062e-07f, 4.703425461e-07f, 4.696716918e-07f, 4.690001448e-07f, 4.683279064e-07f, 4.676549778e-07f, 4.669813603e-07f, 4.663070552e-07f, 4.656320639e-07f,
+4.649563877e-07f, 4.642800277e-07f, 4.636029854e-07f, 4.629252621e-07f, 4.622468589e-07f, 4.615677774e-07f, 4.608880187e-07f, 4.602075841e-07f, 4.595264750e-07f, 4.588446927e-07f,
+4.581622385e-07f, 4.574791137e-07f, 4.567953195e-07f, 4.561108575e-07f, 4.554257287e-07f, 4.547399346e-07f, 4.540534764e-07f, 4.533663556e-07f, 4.526785733e-07f, 4.519901309e-07f,
+4.513010298e-07f, 4.506112712e-07f, 4.499208565e-07f, 4.492297870e-07f, 4.485380640e-07f, 4.478456889e-07f, 4.471526629e-07f, 4.464589874e-07f, 4.457646637e-07f, 4.450696932e-07f,
+4.443740771e-07f, 4.436778169e-07f, 4.429809137e-07f, 4.422833690e-07f, 4.415851841e-07f, 4.408863603e-07f, 4.401868990e-07f, 4.394868015e-07f, 4.387860691e-07f, 4.380847031e-07f,
+4.373827050e-07f, 4.366800759e-07f, 4.359768174e-07f, 4.352729306e-07f, 4.345684170e-07f, 4.338632779e-07f, 4.331575146e-07f, 4.324511285e-07f, 4.317441209e-07f, 4.310364932e-07f,
+4.303282467e-07f, 4.296193827e-07f, 4.289099026e-07f, 4.281998078e-07f, 4.274890995e-07f, 4.267777792e-07f, 4.260658482e-07f, 4.253533079e-07f, 4.246401595e-07f, 4.239264045e-07f,
+4.232120441e-07f, 4.224970799e-07f, 4.217815130e-07f, 4.210653449e-07f, 4.203485769e-07f, 4.196312104e-07f, 4.189132467e-07f, 4.181946872e-07f, 4.174755333e-07f, 4.167557862e-07f,
+4.160354475e-07f, 4.153145184e-07f, 4.145930002e-07f, 4.138708945e-07f, 4.131482024e-07f, 4.124249255e-07f, 4.117010650e-07f, 4.109766223e-07f, 4.102515989e-07f, 4.095259959e-07f,
+4.087998149e-07f, 4.080730572e-07f, 4.073457242e-07f, 4.066178172e-07f, 4.058893376e-07f, 4.051602868e-07f, 4.044306661e-07f, 4.037004770e-07f, 4.029697208e-07f, 4.022383988e-07f,
+4.015065125e-07f, 4.007740632e-07f, 4.000410524e-07f, 3.993074813e-07f, 3.985733514e-07f, 3.978386640e-07f, 3.971034206e-07f, 3.963676224e-07f, 3.956312710e-07f, 3.948943676e-07f,
+3.941569137e-07f, 3.934189106e-07f, 3.926803598e-07f, 3.919412625e-07f, 3.912016203e-07f, 3.904614344e-07f, 3.897207063e-07f, 3.889794374e-07f, 3.882376290e-07f, 3.874952825e-07f,
+3.867523994e-07f, 3.860089810e-07f, 3.852650287e-07f, 3.845205439e-07f, 3.837755279e-07f, 3.830299823e-07f, 3.822839084e-07f, 3.815373075e-07f, 3.807901811e-07f, 3.800425306e-07f,
+3.792943574e-07f, 3.785456628e-07f, 3.777964482e-07f, 3.770467152e-07f, 3.762964650e-07f, 3.755456990e-07f, 3.747944187e-07f, 3.740426255e-07f, 3.732903208e-07f, 3.725375059e-07f,
+3.717841823e-07f, 3.710303513e-07f, 3.702760145e-07f, 3.695211731e-07f, 3.687658286e-07f, 3.680099824e-07f, 3.672536359e-07f, 3.664967906e-07f, 3.657394477e-07f, 3.649816088e-07f,
+3.642232753e-07f, 3.634644484e-07f, 3.627051298e-07f, 3.619453207e-07f, 3.611850226e-07f, 3.604242369e-07f, 3.596629650e-07f, 3.589012083e-07f, 3.581389682e-07f, 3.573762462e-07f,
+3.566130437e-07f, 3.558493621e-07f, 3.550852028e-07f, 3.543205671e-07f, 3.535554567e-07f, 3.527898727e-07f, 3.520238168e-07f, 3.512572902e-07f, 3.504902945e-07f, 3.497228310e-07f,
+3.489549011e-07f, 3.481865063e-07f, 3.474176480e-07f, 3.466483277e-07f, 3.458785467e-07f, 3.451083064e-07f, 3.443376084e-07f, 3.435664539e-07f, 3.427948445e-07f, 3.420227816e-07f,
+3.412502666e-07f, 3.404773009e-07f, 3.397038859e-07f, 3.389300231e-07f, 3.381557140e-07f, 3.373809598e-07f, 3.366057622e-07f, 3.358301224e-07f, 3.350540419e-07f, 3.342775223e-07f,
+3.335005648e-07f, 3.327231709e-07f, 3.319453421e-07f, 3.311670797e-07f, 3.303883853e-07f, 3.296092603e-07f, 3.288297060e-07f, 3.280497240e-07f, 3.272693156e-07f, 3.264884823e-07f,
+3.257072256e-07f, 3.249255468e-07f, 3.241434474e-07f, 3.233609289e-07f, 3.225779927e-07f, 3.217946402e-07f, 3.210108728e-07f, 3.202266921e-07f, 3.194420994e-07f, 3.186570961e-07f,
+3.178716838e-07f, 3.170858639e-07f, 3.162996378e-07f, 3.155130069e-07f, 3.147259728e-07f, 3.139385367e-07f, 3.131507003e-07f, 3.123624649e-07f, 3.115738319e-07f, 3.107848029e-07f,
+3.099953792e-07f, 3.092055623e-07f, 3.084153537e-07f, 3.076247548e-07f, 3.068337670e-07f, 3.060423919e-07f, 3.052506307e-07f, 3.044584851e-07f, 3.036659564e-07f, 3.028730461e-07f,
+3.020797557e-07f, 3.012860865e-07f, 3.004920401e-07f, 2.996976178e-07f, 2.989028212e-07f, 2.981076517e-07f, 2.973121108e-07f, 2.965161998e-07f, 2.957199203e-07f, 2.949232737e-07f,
+2.941262614e-07f, 2.933288850e-07f, 2.925311458e-07f, 2.917330454e-07f, 2.909345851e-07f, 2.901357665e-07f, 2.893365909e-07f, 2.885370599e-07f, 2.877371749e-07f, 2.869369374e-07f,
+2.861363487e-07f, 2.853354104e-07f, 2.845341240e-07f, 2.837324908e-07f, 2.829305124e-07f, 2.821281902e-07f, 2.813255257e-07f, 2.805225203e-07f, 2.797191754e-07f, 2.789154926e-07f,
+2.781114733e-07f, 2.773071190e-07f, 2.765024311e-07f, 2.756974111e-07f, 2.748920604e-07f, 2.740863805e-07f, 2.732803729e-07f, 2.724740391e-07f, 2.716673804e-07f, 2.708603984e-07f,
+2.700530945e-07f, 2.692454702e-07f, 2.684375270e-07f, 2.676292663e-07f, 2.668206895e-07f, 2.660117982e-07f, 2.652025939e-07f, 2.643930779e-07f, 2.635832517e-07f, 2.627731168e-07f,
+2.619626747e-07f, 2.611519269e-07f, 2.603408748e-07f, 2.595295198e-07f, 2.587178635e-07f, 2.579059073e-07f, 2.570936526e-07f, 2.562811010e-07f, 2.554682540e-07f, 2.546551129e-07f,
+2.538416792e-07f, 2.530279545e-07f, 2.522139402e-07f, 2.513996377e-07f, 2.505850486e-07f, 2.497701742e-07f, 2.489550162e-07f, 2.481395758e-07f, 2.473238547e-07f, 2.465078543e-07f,
+2.456915760e-07f, 2.448750213e-07f, 2.440581917e-07f, 2.432410887e-07f, 2.424237138e-07f, 2.416060683e-07f, 2.407881539e-07f, 2.399699718e-07f, 2.391515238e-07f, 2.383328111e-07f,
+2.375138353e-07f, 2.366945978e-07f, 2.358751002e-07f, 2.350553438e-07f, 2.342353302e-07f, 2.334150609e-07f, 2.325945373e-07f, 2.317737609e-07f, 2.309527331e-07f, 2.301314555e-07f,
+2.293099295e-07f, 2.284881566e-07f, 2.276661382e-07f, 2.268438759e-07f, 2.260213711e-07f, 2.251986253e-07f, 2.243756400e-07f, 2.235524166e-07f, 2.227289567e-07f, 2.219052616e-07f,
+2.210813329e-07f, 2.202571721e-07f, 2.194327806e-07f, 2.186081598e-07f, 2.177833114e-07f, 2.169582367e-07f, 2.161329373e-07f, 2.153074146e-07f, 2.144816700e-07f, 2.136557052e-07f,
+2.128295214e-07f, 2.120031203e-07f, 2.111765033e-07f, 2.103496719e-07f, 2.095226275e-07f, 2.086953717e-07f, 2.078679058e-07f, 2.070402315e-07f, 2.062123501e-07f, 2.053842632e-07f,
+2.045559722e-07f, 2.037274786e-07f, 2.028987839e-07f, 2.020698895e-07f, 2.012407970e-07f, 2.004115078e-07f, 1.995820234e-07f, 1.987523453e-07f, 1.979224750e-07f, 1.970924138e-07f,
+1.962621634e-07f, 1.954317252e-07f, 1.946011007e-07f, 1.937702913e-07f, 1.929392986e-07f, 1.921081239e-07f, 1.912767689e-07f, 1.904452349e-07f, 1.896135235e-07f, 1.887816361e-07f,
+1.879495743e-07f, 1.871173394e-07f, 1.862849330e-07f, 1.854523565e-07f, 1.846196115e-07f, 1.837866994e-07f, 1.829536217e-07f, 1.821203798e-07f, 1.812869753e-07f, 1.804534096e-07f,
+1.796196843e-07f, 1.787858007e-07f, 1.779517604e-07f, 1.771175648e-07f, 1.762832155e-07f, 1.754487139e-07f, 1.746140615e-07f, 1.737792598e-07f, 1.729443102e-07f, 1.721092142e-07f,
+1.712739733e-07f, 1.704385891e-07f, 1.696030629e-07f, 1.687673962e-07f, 1.679315906e-07f, 1.670956475e-07f, 1.662595684e-07f, 1.654233547e-07f, 1.645870080e-07f, 1.637505298e-07f,
+1.629139214e-07f, 1.620771844e-07f, 1.612403203e-07f, 1.604033306e-07f, 1.595662166e-07f, 1.587289800e-07f, 1.578916222e-07f, 1.570541446e-07f, 1.562165488e-07f, 1.553788361e-07f,
+1.545410082e-07f, 1.537030665e-07f, 1.528650124e-07f, 1.520268475e-07f, 1.511885732e-07f, 1.503501909e-07f, 1.495117023e-07f, 1.486731087e-07f, 1.478344116e-07f, 1.469956125e-07f,
+1.461567130e-07f, 1.453177144e-07f, 1.444786182e-07f, 1.436394260e-07f, 1.428001391e-07f, 1.419607591e-07f, 1.411212875e-07f, 1.402817257e-07f, 1.394420753e-07f, 1.386023376e-07f,
+1.377625141e-07f, 1.369226065e-07f, 1.360826160e-07f, 1.352425442e-07f, 1.344023926e-07f, 1.335621627e-07f, 1.327218558e-07f, 1.318814736e-07f, 1.310410174e-07f, 1.302004888e-07f,
+1.293598892e-07f, 1.285192202e-07f, 1.276784831e-07f, 1.268376794e-07f, 1.259968107e-07f, 1.251558784e-07f, 1.243148840e-07f, 1.234738289e-07f, 1.226327146e-07f, 1.217915427e-07f,
+1.209503145e-07f, 1.201090316e-07f, 1.192676954e-07f, 1.184263074e-07f, 1.175848690e-07f, 1.167433818e-07f, 1.159018473e-07f, 1.150602668e-07f, 1.142186419e-07f, 1.133769740e-07f,
+1.125352646e-07f, 1.116935152e-07f, 1.108517273e-07f, 1.100099023e-07f, 1.091680417e-07f, 1.083261469e-07f, 1.074842195e-07f, 1.066422609e-07f, 1.058002725e-07f, 1.049582560e-07f,
+1.041162126e-07f, 1.032741439e-07f, 1.024320514e-07f, 1.015899365e-07f, 1.007478008e-07f, 9.990564554e-08f, 9.906347236e-08f, 9.822128268e-08f, 9.737907798e-08f, 9.653685972e-08f,
+9.569462937e-08f, 9.485238840e-08f, 9.401013827e-08f, 9.316788045e-08f, 9.232561641e-08f, 9.148334762e-08f, 9.064107553e-08f, 8.979880163e-08f, 8.895652736e-08f, 8.811425421e-08f,
+8.727198362e-08f, 8.642971708e-08f, 8.558745604e-08f, 8.474520197e-08f, 8.390295633e-08f, 8.306072058e-08f, 8.221849620e-08f, 8.137628464e-08f, 8.053408736e-08f, 7.969190583e-08f,
+7.884974151e-08f, 7.800759587e-08f, 7.716547036e-08f, 7.632336644e-08f, 7.548128559e-08f, 7.463922925e-08f, 7.379719889e-08f, 7.295519597e-08f, 7.211322194e-08f, 7.127127828e-08f,
+7.042936643e-08f, 6.958748786e-08f, 6.874564403e-08f, 6.790383639e-08f, 6.706206640e-08f, 6.622033552e-08f, 6.537864521e-08f, 6.453699692e-08f, 6.369539211e-08f, 6.285383223e-08f,
+6.201231875e-08f, 6.117085312e-08f, 6.032943679e-08f, 5.948807121e-08f, 5.864675785e-08f, 5.780549816e-08f, 5.696429359e-08f, 5.612314559e-08f, 5.528205562e-08f, 5.444102512e-08f,
+5.360005556e-08f, 5.275914838e-08f, 5.191830504e-08f, 5.107752699e-08f, 5.023681567e-08f, 4.939617254e-08f, 4.855559905e-08f, 4.771509664e-08f, 4.687466678e-08f, 4.603431089e-08f,
+4.519403045e-08f, 4.435382688e-08f, 4.351370164e-08f, 4.267365619e-08f, 4.183369195e-08f, 4.099381039e-08f, 4.015401294e-08f, 3.931430105e-08f, 3.847467617e-08f, 3.763513975e-08f,
+3.679569322e-08f, 3.595633803e-08f, 3.511707562e-08f, 3.427790744e-08f, 3.343883493e-08f, 3.259985954e-08f, 3.176098269e-08f, 3.092220584e-08f, 3.008353043e-08f, 2.924495789e-08f,
+2.840648967e-08f, 2.756812721e-08f, 2.672987194e-08f, 2.589172531e-08f, 2.505368874e-08f, 2.421576369e-08f, 2.337795159e-08f, 2.254025386e-08f, 2.170267196e-08f, 2.086520732e-08f,
+2.002786137e-08f, 1.919063554e-08f, 1.835353127e-08f, 1.751655000e-08f, 1.667969316e-08f, 1.584296218e-08f, 1.500635850e-08f, 1.416988354e-08f, 1.333353874e-08f, 1.249732553e-08f,
+1.166124533e-08f, 1.082529959e-08f, 9.989489731e-09f, 9.153817177e-09f, 8.318283361e-09f, 7.482889710e-09f, 6.647637653e-09f, 5.812528615e-09f, 4.977564024e-09f, 4.142745306e-09f,
+3.308073886e-09f, 2.473551189e-09f, 1.639178640e-09f, 8.049576632e-10f, -2.911031848e-11f, -8.630238820e-10f, -1.696781605e-09f, -2.530382066e-09f, -3.363823842e-09f, -4.197105514e-09f,
+-5.030225662e-09f, -5.863182865e-09f, -6.695975704e-09f, -7.528602761e-09f, -8.361062618e-09f, -9.193353857e-09f, -1.002547506e-08f, -1.085742481e-08f, -1.168920170e-08f, -1.252080430e-08f,
+-1.335223121e-08f, -1.418348101e-08f, -1.501455228e-08f, -1.584544361e-08f, -1.667615360e-08f, -1.750668082e-08f, -1.833702387e-08f, -1.916718133e-08f, -1.999715180e-08f, -2.082693387e-08f,
+-2.165652612e-08f, -2.248592716e-08f, -2.331513557e-08f, -2.414414994e-08f, -2.497296887e-08f, -2.580159095e-08f, -2.663001477e-08f, -2.745823894e-08f, -2.828626205e-08f, -2.911408269e-08f,
+-2.994169947e-08f, -3.076911097e-08f, -3.159631580e-08f, -3.242331256e-08f, -3.325009984e-08f, -3.407667625e-08f, -3.490304038e-08f, -3.572919085e-08f, -3.655512624e-08f, -3.738084517e-08f,
+-3.820634623e-08f, -3.903162804e-08f, -3.985668919e-08f, -4.068152829e-08f, -4.150614395e-08f, -4.233053477e-08f, -4.315469936e-08f, -4.397863632e-08f, -4.480234428e-08f, -4.562582183e-08f,
+-4.644906759e-08f, -4.727208016e-08f, -4.809485816e-08f, -4.891740020e-08f, -4.973970489e-08f, -5.056177084e-08f, -5.138359667e-08f, -5.220518100e-08f, -5.302652243e-08f, -5.384761959e-08f,
+-5.466847109e-08f, -5.548907555e-08f, -5.630943158e-08f, -5.712953781e-08f, -5.794939285e-08f, -5.876899532e-08f, -5.958834385e-08f, -6.040743706e-08f, -6.122627356e-08f, -6.204485198e-08f,
+-6.286317095e-08f, -6.368122908e-08f, -6.449902501e-08f, -6.531655735e-08f, -6.613382475e-08f, -6.695082581e-08f, -6.776755917e-08f, -6.858402346e-08f, -6.940021731e-08f, -7.021613935e-08f,
+-7.103178820e-08f, -7.184716251e-08f, -7.266226089e-08f, -7.347708199e-08f, -7.429162444e-08f, -7.510588687e-08f, -7.591986792e-08f, -7.673356622e-08f, -7.754698041e-08f, -7.836010913e-08f,
+-7.917295101e-08f, -7.998550470e-08f, -8.079776883e-08f, -8.160974204e-08f, -8.242142298e-08f, -8.323281029e-08f, -8.404390260e-08f, -8.485469857e-08f, -8.566519683e-08f, -8.647539604e-08f,
+-8.728529483e-08f, -8.809489186e-08f, -8.890418577e-08f, -8.971317520e-08f, -9.052185882e-08f, -9.133023526e-08f, -9.213830318e-08f, -9.294606122e-08f, -9.375350805e-08f, -9.456064231e-08f,
+-9.536746266e-08f, -9.617396775e-08f, -9.698015623e-08f, -9.778602677e-08f, -9.859157802e-08f, -9.939680863e-08f, -1.002017173e-07f, -1.010063026e-07f, -1.018105633e-07f, -1.026144979e-07f,
+-1.034181053e-07f, -1.042213839e-07f, -1.050243326e-07f, -1.058269499e-07f, -1.066292345e-07f, -1.074311851e-07f, -1.082328004e-07f, -1.090340790e-07f, -1.098350196e-07f, -1.106356208e-07f,
+-1.114358814e-07f, -1.122357999e-07f, -1.130353752e-07f, -1.138346057e-07f, -1.146334903e-07f, -1.154320276e-07f, -1.162302162e-07f, -1.170280549e-07f, -1.178255423e-07f, -1.186226771e-07f,
+-1.194194580e-07f, -1.202158836e-07f, -1.210119526e-07f, -1.218076638e-07f, -1.226030157e-07f, -1.233980071e-07f, -1.241926367e-07f, -1.249869031e-07f, -1.257808051e-07f, -1.265743413e-07f,
+-1.273675104e-07f, -1.281603110e-07f, -1.289527420e-07f, -1.297448019e-07f, -1.305364895e-07f, -1.313278034e-07f, -1.321187424e-07f, -1.329093051e-07f, -1.336994902e-07f, -1.344892965e-07f,
+-1.352787226e-07f, -1.360677672e-07f, -1.368564290e-07f, -1.376447068e-07f, -1.384325991e-07f, -1.392201048e-07f, -1.400072225e-07f, -1.407939509e-07f, -1.415802887e-07f, -1.423662347e-07f,
+-1.431517875e-07f, -1.439369458e-07f, -1.447217084e-07f, -1.455060739e-07f, -1.462900411e-07f, -1.470736087e-07f, -1.478567753e-07f, -1.486395398e-07f, -1.494219007e-07f, -1.502038569e-07f,
+-1.509854070e-07f, -1.517665498e-07f, -1.525472839e-07f, -1.533276081e-07f, -1.541075211e-07f, -1.548870216e-07f, -1.556661084e-07f, -1.564447801e-07f, -1.572230355e-07f, -1.580008733e-07f,
+-1.587782923e-07f, -1.595552911e-07f, -1.603318685e-07f, -1.611080232e-07f, -1.618837539e-07f, -1.626590594e-07f, -1.634339384e-07f, -1.642083896e-07f, -1.649824118e-07f, -1.657560037e-07f,
+-1.665291640e-07f, -1.673018914e-07f, -1.680741848e-07f, -1.688460428e-07f, -1.696174641e-07f, -1.703884476e-07f, -1.711589919e-07f, -1.719290958e-07f, -1.726987580e-07f, -1.734679773e-07f,
+-1.742367524e-07f, -1.750050821e-07f, -1.757729651e-07f, -1.765404001e-07f, -1.773073860e-07f, -1.780739214e-07f, -1.788400051e-07f, -1.796056358e-07f, -1.803708124e-07f, -1.811355335e-07f,
+-1.818997979e-07f, -1.826636044e-07f, -1.834269517e-07f, -1.841898385e-07f, -1.849522637e-07f, -1.857142261e-07f, -1.864757242e-07f, -1.872367570e-07f, -1.879973231e-07f, -1.887574214e-07f,
+-1.895170506e-07f, -1.902762095e-07f, -1.910348968e-07f, -1.917931113e-07f, -1.925508518e-07f, -1.933081170e-07f, -1.940649058e-07f, -1.948212168e-07f, -1.955770489e-07f, -1.963324008e-07f,
+-1.970872713e-07f, -1.978416592e-07f, -1.985955633e-07f, -1.993489822e-07f, -2.001019149e-07f, -2.008543601e-07f, -2.016063166e-07f, -2.023577832e-07f, -2.031087585e-07f, -2.038592415e-07f,
+-2.046092310e-07f, -2.053587256e-07f, -2.061077242e-07f, -2.068562256e-07f, -2.076042285e-07f, -2.083517318e-07f, -2.090987342e-07f, -2.098452346e-07f, -2.105912317e-07f, -2.113367244e-07f,
+-2.120817114e-07f, -2.128261915e-07f, -2.135701635e-07f, -2.143136263e-07f, -2.150565785e-07f, -2.157990191e-07f, -2.165409469e-07f, -2.172823605e-07f, -2.180232589e-07f, -2.187636409e-07f,
+-2.195035052e-07f, -2.202428506e-07f, -2.209816761e-07f, -2.217199803e-07f, -2.224577621e-07f, -2.231950203e-07f, -2.239317538e-07f, -2.246679613e-07f, -2.254036416e-07f, -2.261387936e-07f,
+-2.268734161e-07f, -2.276075079e-07f, -2.283410678e-07f, -2.290740947e-07f, -2.298065874e-07f, -2.305385447e-07f, -2.312699654e-07f, -2.320008483e-07f, -2.327311924e-07f, -2.334609963e-07f,
+-2.341902590e-07f, -2.349189793e-07f, -2.356471560e-07f, -2.363747879e-07f, -2.371018739e-07f, -2.378284128e-07f, -2.385544035e-07f, -2.392798447e-07f, -2.400047354e-07f, -2.407290744e-07f,
+-2.414528604e-07f, -2.421760924e-07f, -2.428987693e-07f, -2.436208897e-07f, -2.443424527e-07f, -2.450634569e-07f, -2.457839014e-07f, -2.465037849e-07f, -2.472231063e-07f, -2.479418645e-07f,
+-2.486600582e-07f, -2.493776864e-07f, -2.500947480e-07f, -2.508112416e-07f, -2.515271663e-07f, -2.522425209e-07f, -2.529573043e-07f, -2.536715152e-07f, -2.543851526e-07f, -2.550982154e-07f,
+-2.558107023e-07f, -2.565226123e-07f, -2.572339443e-07f, -2.579446971e-07f, -2.586548695e-07f, -2.593644605e-07f, -2.600734690e-07f, -2.607818937e-07f, -2.614897336e-07f, -2.621969875e-07f,
+-2.629036544e-07f, -2.636097331e-07f, -2.643152225e-07f, -2.650201215e-07f, -2.657244289e-07f, -2.664281436e-07f, -2.671312646e-07f, -2.678337907e-07f, -2.685357208e-07f, -2.692370537e-07f,
+-2.699377885e-07f, -2.706379239e-07f, -2.713374589e-07f, -2.720363924e-07f, -2.727347232e-07f, -2.734324503e-07f, -2.741295725e-07f, -2.748260887e-07f, -2.755219980e-07f, -2.762172990e-07f,
+-2.769119908e-07f, -2.776060723e-07f, -2.782995424e-07f, -2.789923999e-07f, -2.796846438e-07f, -2.803762730e-07f, -2.810672864e-07f, -2.817576829e-07f, -2.824474614e-07f, -2.831366209e-07f,
+-2.838251602e-07f, -2.845130783e-07f, -2.852003741e-07f, -2.858870465e-07f, -2.865730945e-07f, -2.872585169e-07f, -2.879433126e-07f, -2.886274807e-07f, -2.893110200e-07f, -2.899939295e-07f,
+-2.906762081e-07f, -2.913578546e-07f, -2.920388681e-07f, -2.927192475e-07f, -2.933989918e-07f, -2.940780997e-07f, -2.947565704e-07f, -2.954344027e-07f, -2.961115955e-07f, -2.967881479e-07f,
+-2.974640586e-07f, -2.981393268e-07f, -2.988139514e-07f, -2.994879311e-07f, -3.001612652e-07f, -3.008339524e-07f, -3.015059917e-07f, -3.021773821e-07f, -3.028481225e-07f, -3.035182119e-07f,
+-3.041876493e-07f, -3.048564335e-07f, -3.055245636e-07f, -3.061920385e-07f, -3.068588572e-07f, -3.075250186e-07f, -3.081905217e-07f, -3.088553655e-07f, -3.095195489e-07f, -3.101830709e-07f,
+-3.108459304e-07f, -3.115081265e-07f, -3.121696581e-07f, -3.128305241e-07f, -3.134907236e-07f, -3.141502556e-07f, -3.148091189e-07f, -3.154673126e-07f, -3.161248357e-07f, -3.167816871e-07f,
+-3.174378658e-07f, -3.180933708e-07f, -3.187482011e-07f, -3.194023557e-07f, -3.200558336e-07f, -3.207086337e-07f, -3.213607550e-07f, -3.220121966e-07f, -3.226629574e-07f, -3.233130364e-07f,
+-3.239624327e-07f, -3.246111451e-07f, -3.252591728e-07f, -3.259065147e-07f, -3.265531697e-07f, -3.271991370e-07f, -3.278444156e-07f, -3.284890043e-07f, -3.291329023e-07f, -3.297761085e-07f,
+-3.304186219e-07f, -3.310604416e-07f, -3.317015666e-07f, -3.323419959e-07f, -3.329817285e-07f, -3.336207633e-07f, -3.342590996e-07f, -3.348967361e-07f, -3.355336721e-07f, -3.361699064e-07f,
+-3.368054382e-07f, -3.374402664e-07f, -3.380743901e-07f, -3.387078083e-07f, -3.393405200e-07f, -3.399725242e-07f, -3.406038201e-07f, -3.412344065e-07f, -3.418642827e-07f, -3.424934475e-07f,
+-3.431219001e-07f, -3.437496394e-07f, -3.443766645e-07f, -3.450029745e-07f, -3.456285684e-07f, -3.462534453e-07f, -3.468776041e-07f, -3.475010439e-07f, -3.481237639e-07f, -3.487457629e-07f,
+-3.493670402e-07f, -3.499875947e-07f, -3.506074255e-07f, -3.512265316e-07f, -3.518449122e-07f, -3.524625662e-07f, -3.530794927e-07f, -3.536956909e-07f, -3.543111597e-07f, -3.549258982e-07f,
+-3.555399055e-07f, -3.561531806e-07f, -3.567657227e-07f, -3.573775307e-07f, -3.579886038e-07f, -3.585989411e-07f, -3.592085416e-07f, -3.598174043e-07f, -3.604255284e-07f, -3.610329130e-07f,
+-3.616395571e-07f, -3.622454598e-07f, -3.628506202e-07f, -3.634550374e-07f, -3.640587104e-07f, -3.646616384e-07f, -3.652638204e-07f, -3.658652556e-07f, -3.664659430e-07f, -3.670658817e-07f,
+-3.676650708e-07f, -3.682635094e-07f, -3.688611967e-07f, -3.694581316e-07f, -3.700543134e-07f, -3.706497411e-07f, -3.712444138e-07f, -3.718383306e-07f, -3.724314907e-07f, -3.730238931e-07f,
+-3.736155369e-07f, -3.742064214e-07f, -3.747965455e-07f, -3.753859083e-07f, -3.759745091e-07f, -3.765623469e-07f, -3.771494209e-07f, -3.777357301e-07f, -3.783212738e-07f, -3.789060509e-07f,
+-3.794900606e-07f, -3.800733022e-07f, -3.806557746e-07f, -3.812374770e-07f, -3.818184086e-07f, -3.823985685e-07f, -3.829779558e-07f, -3.835565696e-07f, -3.841344092e-07f, -3.847114735e-07f,
+-3.852877619e-07f, -3.858632733e-07f, -3.864380070e-07f, -3.870119622e-07f, -3.875851378e-07f, -3.881575332e-07f, -3.887291474e-07f, -3.892999796e-07f, -3.898700289e-07f, -3.904392946e-07f,
+-3.910077757e-07f, -3.915754714e-07f, -3.921423809e-07f, -3.927085033e-07f, -3.932738378e-07f, -3.938383836e-07f, -3.944021398e-07f, -3.949651056e-07f, -3.955272801e-07f, -3.960886626e-07f,
+-3.966492522e-07f, -3.972090480e-07f, -3.977680493e-07f, -3.983262552e-07f, -3.988836649e-07f, -3.994402775e-07f, -3.999960924e-07f, -4.005511085e-07f, -4.011053252e-07f, -4.016587415e-07f,
+-4.022113568e-07f, -4.027631701e-07f, -4.033141807e-07f, -4.038643878e-07f, -4.044137905e-07f, -4.049623880e-07f, -4.055101796e-07f, -4.060571645e-07f, -4.066033417e-07f, -4.071487106e-07f,
+-4.076932703e-07f, -4.082370201e-07f, -4.087799591e-07f, -4.093220865e-07f, -4.098634017e-07f, -4.104039036e-07f, -4.109435917e-07f, -4.114824650e-07f, -4.120205229e-07f, -4.125577645e-07f,
+-4.130941890e-07f, -4.136297957e-07f, -4.141645837e-07f, -4.146985524e-07f, -4.152317009e-07f, -4.157640284e-07f, -4.162955342e-07f, -4.168262175e-07f, -4.173560775e-07f, -4.178851135e-07f,
+-4.184133247e-07f, -4.189407104e-07f, -4.194672697e-07f, -4.199930019e-07f, -4.205179062e-07f, -4.210419820e-07f, -4.215652283e-07f, -4.220876446e-07f, -4.226092300e-07f, -4.231299837e-07f,
+-4.236499050e-07f, -4.241689933e-07f, -4.246872476e-07f, -4.252046673e-07f, -4.257212517e-07f, -4.262369999e-07f, -4.267519113e-07f, -4.272659850e-07f, -4.277792205e-07f, -4.282916168e-07f,
+-4.288031734e-07f, -4.293138894e-07f, -4.298237642e-07f, -4.303327969e-07f, -4.308409869e-07f, -4.313483335e-07f, -4.318548358e-07f, -4.323604933e-07f, -4.328653051e-07f, -4.333692706e-07f,
+-4.338723890e-07f, -4.343746597e-07f, -4.348760818e-07f, -4.353766547e-07f, -4.358763777e-07f, -4.363752500e-07f, -4.368732710e-07f, -4.373704399e-07f, -4.378667561e-07f, -4.383622188e-07f,
+-4.388568273e-07f, -4.393505810e-07f, -4.398434791e-07f, -4.403355209e-07f, -4.408267057e-07f, -4.413170329e-07f, -4.418065018e-07f, -4.422951115e-07f, -4.427828616e-07f, -4.432697512e-07f,
+-4.437557797e-07f, -4.442409464e-07f, -4.447252507e-07f, -4.452086917e-07f, -4.456912690e-07f, -4.461729817e-07f, -4.466538292e-07f, -4.471338108e-07f, -4.476129259e-07f, -4.480911738e-07f,
+-4.485685538e-07f, -4.490450653e-07f, -4.495207075e-07f, -4.499954798e-07f, -4.504693816e-07f, -4.509424121e-07f, -4.514145708e-07f, -4.518858569e-07f, -4.523562699e-07f, -4.528258090e-07f,
+-4.532944736e-07f, -4.537622630e-07f, -4.542291767e-07f, -4.546952139e-07f, -4.551603740e-07f, -4.556246563e-07f, -4.560880603e-07f, -4.565505852e-07f, -4.570122304e-07f, -4.574729954e-07f,
+-4.579328793e-07f, -4.583918817e-07f, -4.588500019e-07f, -4.593072393e-07f, -4.597635931e-07f, -4.602190628e-07f, -4.606736478e-07f, -4.611273475e-07f, -4.615801611e-07f, -4.620320881e-07f,
+-4.624831279e-07f, -4.629332798e-07f, -4.633825433e-07f, -4.638309177e-07f, -4.642784024e-07f, -4.647249967e-07f, -4.651707002e-07f, -4.656155121e-07f, -4.660594319e-07f, -4.665024589e-07f,
+-4.669445926e-07f, -4.673858323e-07f, -4.678261775e-07f, -4.682656275e-07f, -4.687041818e-07f, -4.691418397e-07f, -4.695786007e-07f, -4.700144641e-07f, -4.704494295e-07f, -4.708834961e-07f,
+-4.713166634e-07f, -4.717489308e-07f, -4.721802978e-07f, -4.726107637e-07f, -4.730403280e-07f, -4.734689900e-07f, -4.738967493e-07f, -4.743236052e-07f, -4.747495572e-07f, -4.751746046e-07f,
+-4.755987470e-07f, -4.760219837e-07f, -4.764443142e-07f, -4.768657379e-07f, -4.772862543e-07f, -4.777058628e-07f, -4.781245628e-07f, -4.785423537e-07f, -4.789592351e-07f, -4.793752063e-07f,
+-4.797902669e-07f, -4.802044161e-07f, -4.806176536e-07f, -4.810299788e-07f, -4.814413910e-07f, -4.818518898e-07f, -4.822614746e-07f, -4.826701449e-07f, -4.830779002e-07f, -4.834847398e-07f,
+-4.838906633e-07f, -4.842956701e-07f, -4.846997597e-07f, -4.851029315e-07f, -4.855051851e-07f, -4.859065199e-07f, -4.863069354e-07f, -4.867064310e-07f, -4.871050062e-07f, -4.875026605e-07f,
+-4.878993935e-07f, -4.882952045e-07f, -4.886900930e-07f, -4.890840586e-07f, -4.894771006e-07f, -4.898692188e-07f, -4.902604124e-07f, -4.906506809e-07f, -4.910400240e-07f, -4.914284411e-07f,
+-4.918159316e-07f, -4.922024952e-07f, -4.925881311e-07f, -4.929728391e-07f, -4.933566186e-07f, -4.937394690e-07f, -4.941213900e-07f, -4.945023810e-07f, -4.948824414e-07f, -4.952615709e-07f,
+-4.956397690e-07f, -4.960170351e-07f, -4.963933688e-07f, -4.967687696e-07f, -4.971432370e-07f, -4.975167706e-07f, -4.978893698e-07f, -4.982610342e-07f, -4.986317633e-07f, -4.990015567e-07f,
+-4.993704139e-07f, -4.997383344e-07f, -5.001053177e-07f, -5.004713634e-07f, -5.008364711e-07f, -5.012006402e-07f, -5.015638703e-07f, -5.019261610e-07f, -5.022875118e-07f, -5.026479222e-07f,
+-5.030073918e-07f, -5.033659201e-07f, -5.037235068e-07f, -5.040801513e-07f, -5.044358531e-07f, -5.047906120e-07f, -5.051444274e-07f, -5.054972988e-07f, -5.058492259e-07f, -5.062002082e-07f,
+-5.065502453e-07f, -5.068993368e-07f, -5.072474821e-07f, -5.075946809e-07f, -5.079409328e-07f, -5.082862373e-07f, -5.086305940e-07f, -5.089740025e-07f, -5.093164623e-07f, -5.096579731e-07f,
+-5.099985345e-07f, -5.103381459e-07f, -5.106768070e-07f, -5.110145175e-07f, -5.113512768e-07f, -5.116870846e-07f, -5.120219404e-07f, -5.123558439e-07f, -5.126887947e-07f, -5.130207923e-07f,
+-5.133518364e-07f, -5.136819265e-07f, -5.140110623e-07f, -5.143392434e-07f, -5.146664693e-07f, -5.149927397e-07f, -5.153180543e-07f, -5.156424125e-07f, -5.159658140e-07f, -5.162882585e-07f,
+-5.166097456e-07f, -5.169302748e-07f, -5.172498459e-07f, -5.175684583e-07f, -5.178861118e-07f, -5.182028060e-07f, -5.185185405e-07f, -5.188333149e-07f, -5.191471289e-07f, -5.194599820e-07f,
+-5.197718741e-07f, -5.200828045e-07f, -5.203927731e-07f, -5.207017795e-07f, -5.210098232e-07f, -5.213169040e-07f, -5.216230214e-07f, -5.219281752e-07f, -5.222323650e-07f, -5.225355904e-07f,
+-5.228378510e-07f, -5.231391467e-07f, -5.234394769e-07f, -5.237388413e-07f, -5.240372397e-07f, -5.243346717e-07f, -5.246311369e-07f, -5.249266349e-07f, -5.252211656e-07f, -5.255147285e-07f,
+-5.258073233e-07f, -5.260989497e-07f, -5.263896073e-07f, -5.266792959e-07f, -5.269680151e-07f, -5.272557646e-07f, -5.275425440e-07f, -5.278283531e-07f, -5.281131915e-07f, -5.283970589e-07f,
+-5.286799551e-07f, -5.289618796e-07f, -5.292428323e-07f, -5.295228127e-07f, -5.298018206e-07f, -5.300798556e-07f, -5.303569176e-07f, -5.306330061e-07f, -5.309081209e-07f, -5.311822616e-07f,
+-5.314554281e-07f, -5.317276199e-07f, -5.319988368e-07f, -5.322690786e-07f, -5.325383448e-07f, -5.328066353e-07f, -5.330739498e-07f, -5.333402879e-07f, -5.336056494e-07f, -5.338700340e-07f,
+-5.341334415e-07f, -5.343958715e-07f, -5.346573238e-07f, -5.349177981e-07f, -5.351772941e-07f, -5.354358117e-07f, -5.356933504e-07f, -5.359499101e-07f, -5.362054904e-07f, -5.364600912e-07f,
+-5.367137121e-07f, -5.369663529e-07f, -5.372180134e-07f, -5.374686933e-07f, -5.377183923e-07f, -5.379671101e-07f, -5.382148467e-07f, -5.384616016e-07f, -5.387073746e-07f, -5.389521656e-07f,
+-5.391959742e-07f, -5.394388003e-07f, -5.396806435e-07f, -5.399215036e-07f, -5.401613805e-07f, -5.404002739e-07f, -5.406381835e-07f, -5.408751091e-07f, -5.411110505e-07f, -5.413460074e-07f,
+-5.415799797e-07f, -5.418129671e-07f, -5.420449694e-07f, -5.422759864e-07f, -5.425060178e-07f, -5.427350635e-07f, -5.429631232e-07f, -5.431901967e-07f, -5.434162838e-07f, -5.436413843e-07f,
+-5.438654980e-07f, -5.440886247e-07f, -5.443107642e-07f, -5.445319163e-07f, -5.447520807e-07f, -5.449712573e-07f, -5.451894459e-07f, -5.454066463e-07f, -5.456228583e-07f, -5.458380816e-07f,
+-5.460523163e-07f, -5.462655619e-07f, -5.464778184e-07f, -5.466890855e-07f, -5.468993631e-07f, -5.471086511e-07f, -5.473169491e-07f, -5.475242571e-07f, -5.477305748e-07f, -5.479359022e-07f,
+-5.481402390e-07f, -5.483435850e-07f, -5.485459401e-07f, -5.487473041e-07f, -5.489476769e-07f, -5.491470583e-07f, -5.493454481e-07f, -5.495428461e-07f, -5.497392523e-07f, -5.499346664e-07f,
+-5.501290884e-07f, -5.503225180e-07f, -5.505149551e-07f, -5.507063995e-07f, -5.508968512e-07f, -5.510863099e-07f, -5.512747755e-07f, -5.514622479e-07f, -5.516487269e-07f, -5.518342124e-07f,
+-5.520187043e-07f, -5.522022024e-07f, -5.523847066e-07f, -5.525662168e-07f, -5.527467328e-07f, -5.529262545e-07f, -5.531047817e-07f, -5.532823145e-07f, -5.534588525e-07f, -5.536343958e-07f,
+-5.538089441e-07f, -5.539824975e-07f, -5.541550557e-07f, -5.543266186e-07f, -5.544971862e-07f, -5.546667583e-07f, -5.548353348e-07f, -5.550029156e-07f, -5.551695006e-07f, -5.553350897e-07f,
+-5.554996828e-07f, -5.556632798e-07f, -5.558258807e-07f, -5.559874852e-07f, -5.561480933e-07f, -5.563077050e-07f, -5.564663201e-07f, -5.566239385e-07f, -5.567805601e-07f, -5.569361850e-07f,
+-5.570908129e-07f, -5.572444438e-07f, -5.573970777e-07f, -5.575487143e-07f, -5.576993538e-07f, -5.578489959e-07f, -5.579976407e-07f, -5.581452880e-07f, -5.582919377e-07f, -5.584375899e-07f,
+-5.585822444e-07f, -5.587259012e-07f, -5.588685602e-07f, -5.590102214e-07f, -5.591508846e-07f, -5.592905499e-07f, -5.594292172e-07f, -5.595668864e-07f, -5.597035574e-07f, -5.598392303e-07f,
+-5.599739050e-07f, -5.601075814e-07f, -5.602402594e-07f, -5.603719392e-07f, -5.605026205e-07f, -5.606323033e-07f, -5.607609877e-07f, -5.608886736e-07f, -5.610153609e-07f, -5.611410496e-07f,
+-5.612657397e-07f, -5.613894312e-07f, -5.615121240e-07f, -5.616338181e-07f, -5.617545134e-07f, -5.618742100e-07f, -5.619929079e-07f, -5.621106069e-07f, -5.622273072e-07f, -5.623430086e-07f,
+-5.624577112e-07f, -5.625714150e-07f, -5.626841199e-07f, -5.627958259e-07f, -5.629065331e-07f, -5.630162414e-07f, -5.631249508e-07f, -5.632326613e-07f, -5.633393729e-07f, -5.634450857e-07f,
+-5.635497996e-07f, -5.636535146e-07f, -5.637562307e-07f, -5.638579480e-07f, -5.639586665e-07f, -5.640583861e-07f, -5.641571069e-07f, -5.642548289e-07f, -5.643515521e-07f, -5.644472766e-07f,
+-5.645420023e-07f, -5.646357292e-07f, -5.647284575e-07f, -5.648201871e-07f, -5.649109181e-07f, -5.650006505e-07f, -5.650893842e-07f, -5.651771194e-07f, -5.652638562e-07f, -5.653495944e-07f,
+-5.654343342e-07f, -5.655180756e-07f, -5.656008186e-07f, -5.656825633e-07f, -5.657633098e-07f, -5.658430580e-07f, -5.659218081e-07f, -5.659995600e-07f, -5.660763139e-07f, -5.661520697e-07f,
+-5.662268276e-07f, -5.663005876e-07f, -5.663733497e-07f, -5.664451141e-07f, -5.665158807e-07f, -5.665856497e-07f, -5.666544211e-07f, -5.667221950e-07f, -5.667889714e-07f, -5.668547504e-07f,
+-5.669195321e-07f, -5.669833166e-07f, -5.670461040e-07f, -5.671078942e-07f, -5.671686875e-07f, -5.672284838e-07f, -5.672872833e-07f, -5.673450861e-07f, -5.674018921e-07f, -5.674577016e-07f,
+-5.675125147e-07f, -5.675663313e-07f, -5.676191516e-07f, -5.676709758e-07f, -5.677218038e-07f, -5.677716358e-07f, -5.678204719e-07f, -5.678683122e-07f, -5.679151568e-07f, -5.679610058e-07f,
+-5.680058593e-07f, -5.680497174e-07f, -5.680925803e-07f, -5.681344480e-07f, -5.681753207e-07f, -5.682151984e-07f, -5.682540813e-07f, -5.682919696e-07f, -5.683288632e-07f, -5.683647625e-07f,
+-5.683996674e-07f, -5.684335781e-07f, -5.684664947e-07f, -5.684984174e-07f, -5.685293463e-07f, -5.685592815e-07f, -5.685882232e-07f, -5.686161715e-07f, -5.686431265e-07f, -5.686690884e-07f,
+-5.686940573e-07f, -5.687180334e-07f, -5.687410168e-07f, -5.687630076e-07f, -5.687840060e-07f, -5.688040122e-07f, -5.688230263e-07f, -5.688410485e-07f, -5.688580788e-07f, -5.688741175e-07f,
+-5.688891648e-07f, -5.689032207e-07f, -5.689162855e-07f, -5.689283593e-07f, -5.689394422e-07f, -5.689495346e-07f, -5.689586364e-07f, -5.689667479e-07f, -5.689738693e-07f, -5.689800007e-07f,
+-5.689851423e-07f, -5.689892942e-07f, -5.689924568e-07f, -5.689946301e-07f, -5.689958143e-07f, -5.689960096e-07f, -5.689952162e-07f, -5.689934343e-07f, -5.689906641e-07f, -5.689869057e-07f,
+-5.689821594e-07f, -5.689764253e-07f, -5.689697037e-07f, -5.689619947e-07f, -5.689532985e-07f, -5.689436154e-07f, -5.689329456e-07f, -5.689212891e-07f, -5.689086464e-07f, -5.688950175e-07f,
+-5.688804026e-07f, -5.688648021e-07f, -5.688482160e-07f, -5.688306447e-07f, -5.688120883e-07f, -5.687925470e-07f, -5.687720210e-07f, -5.687505107e-07f, -5.687280162e-07f, -5.687045376e-07f,
+-5.686800754e-07f, -5.686546296e-07f, -5.686282006e-07f, -5.686007884e-07f, -5.685723935e-07f, -5.685430160e-07f, -5.685126561e-07f, -5.684813141e-07f, -5.684489902e-07f, -5.684156847e-07f,
+-5.683813978e-07f, -5.683461297e-07f, -5.683098807e-07f, -5.682726511e-07f, -5.682344411e-07f, -5.681952509e-07f, -5.681550808e-07f, -5.681139311e-07f, -5.680718020e-07f, -5.680286937e-07f,
+-5.679846066e-07f, -5.679395408e-07f, -5.678934967e-07f, -5.678464746e-07f, -5.677984746e-07f, -5.677494970e-07f, -5.676995422e-07f, -5.676486103e-07f, -5.675967017e-07f, -5.675438166e-07f,
+-5.674899554e-07f, -5.674351182e-07f, -5.673793054e-07f, -5.673225173e-07f, -5.672647540e-07f, -5.672060160e-07f, -5.671463035e-07f, -5.670856168e-07f, -5.670239561e-07f, -5.669613218e-07f,
+-5.668977142e-07f, -5.668331335e-07f, -5.667675801e-07f, -5.667010542e-07f, -5.666335562e-07f, -5.665650863e-07f, -5.664956448e-07f, -5.664252322e-07f, -5.663538485e-07f, -5.662814942e-07f,
+-5.662081696e-07f, -5.661338750e-07f, -5.660586107e-07f, -5.659823770e-07f, -5.659051742e-07f, -5.658270026e-07f, -5.657478626e-07f, -5.656677545e-07f, -5.655866785e-07f, -5.655046351e-07f,
+-5.654216246e-07f, -5.653376472e-07f, -5.652527033e-07f, -5.651667933e-07f, -5.650799174e-07f, -5.649920760e-07f, -5.649032695e-07f, -5.648134981e-07f, -5.647227623e-07f, -5.646310622e-07f,
+-5.645383984e-07f, -5.644447711e-07f, -5.643501807e-07f, -5.642546274e-07f, -5.641581118e-07f, -5.640606341e-07f, -5.639621946e-07f, -5.638627938e-07f, -5.637624319e-07f, -5.636611094e-07f,
+-5.635588266e-07f, -5.634555838e-07f, -5.633513814e-07f, -5.632462198e-07f, -5.631400993e-07f, -5.630330203e-07f, -5.629249832e-07f, -5.628159883e-07f, -5.627060360e-07f, -5.625951267e-07f,
+-5.624832608e-07f, -5.623704386e-07f, -5.622566604e-07f, -5.621419268e-07f, -5.620262380e-07f, -5.619095945e-07f, -5.617919965e-07f, -5.616734446e-07f, -5.615539391e-07f, -5.614334804e-07f,
+-5.613120688e-07f, -5.611897048e-07f, -5.610663887e-07f, -5.609421210e-07f, -5.608169021e-07f, -5.606907323e-07f, -5.605636120e-07f, -5.604355416e-07f, -5.603065216e-07f, -5.601765524e-07f,
+-5.600456343e-07f, -5.599137678e-07f, -5.597809532e-07f, -5.596471910e-07f, -5.595124816e-07f, -5.593768253e-07f, -5.592402228e-07f, -5.591026742e-07f, -5.589641801e-07f, -5.588247408e-07f,
+-5.586843569e-07f, -5.585430286e-07f, -5.584007565e-07f, -5.582575409e-07f, -5.581133824e-07f, -5.579682812e-07f, -5.578222379e-07f, -5.576752529e-07f, -5.575273266e-07f, -5.573784594e-07f,
+-5.572286518e-07f, -5.570779042e-07f, -5.569262171e-07f, -5.567735909e-07f, -5.566200261e-07f, -5.564655230e-07f, -5.563100822e-07f, -5.561537040e-07f, -5.559963890e-07f, -5.558381376e-07f,
+-5.556789502e-07f, -5.555188273e-07f, -5.553577693e-07f, -5.551957767e-07f, -5.550328500e-07f, -5.548689896e-07f, -5.547041959e-07f, -5.545384696e-07f, -5.543718109e-07f, -5.542042204e-07f,
+-5.540356985e-07f, -5.538662457e-07f, -5.536958626e-07f, -5.535245494e-07f, -5.533523068e-07f, -5.531791352e-07f, -5.530050350e-07f, -5.528300069e-07f, -5.526540511e-07f, -5.524771683e-07f,
+-5.522993588e-07f, -5.521206233e-07f, -5.519409621e-07f, -5.517603757e-07f, -5.515788647e-07f, -5.513964296e-07f, -5.512130707e-07f, -5.510287887e-07f, -5.508435840e-07f, -5.506574571e-07f,
+-5.504704085e-07f, -5.502824387e-07f, -5.500935482e-07f, -5.499037376e-07f, -5.497130072e-07f, -5.495213577e-07f, -5.493287895e-07f, -5.491353031e-07f, -5.489408991e-07f, -5.487455779e-07f,
+-5.485493401e-07f, -5.483521862e-07f, -5.481541167e-07f, -5.479551321e-07f, -5.477552330e-07f, -5.475544198e-07f, -5.473526930e-07f, -5.471500533e-07f, -5.469465011e-07f, -5.467420370e-07f,
+-5.465366614e-07f, -5.463303750e-07f, -5.461231782e-07f, -5.459150716e-07f, -5.457060556e-07f, -5.454961310e-07f, -5.452852981e-07f, -5.450735575e-07f, -5.448609098e-07f, -5.446473555e-07f,
+-5.444328951e-07f, -5.442175292e-07f, -5.440012584e-07f, -5.437840831e-07f, -5.435660040e-07f, -5.433470215e-07f, -5.431271363e-07f, -5.429063488e-07f, -5.426846597e-07f, -5.424620695e-07f,
+-5.422385788e-07f, -5.420141880e-07f, -5.417888979e-07f, -5.415627088e-07f, -5.413356215e-07f, -5.411076364e-07f, -5.408787541e-07f, -5.406489753e-07f, -5.404183004e-07f, -5.401867300e-07f,
+-5.399542648e-07f, -5.397209052e-07f, -5.394866519e-07f, -5.392515054e-07f, -5.390154664e-07f, -5.387785353e-07f, -5.385407128e-07f, -5.383019994e-07f, -5.380623958e-07f, -5.378219025e-07f,
+-5.375805201e-07f, -5.373382492e-07f, -5.370950904e-07f, -5.368510443e-07f, -5.366061114e-07f, -5.363602924e-07f, -5.361135879e-07f, -5.358659984e-07f, -5.356175246e-07f, -5.353681670e-07f,
+-5.351179263e-07f, -5.348668030e-07f, -5.346147978e-07f, -5.343619113e-07f, -5.341081440e-07f, -5.338534966e-07f, -5.335979697e-07f, -5.333415639e-07f, -5.330842798e-07f, -5.328261180e-07f,
+-5.325670792e-07f, -5.323071639e-07f, -5.320463728e-07f, -5.317847065e-07f, -5.315221656e-07f, -5.312587508e-07f, -5.309944626e-07f, -5.307293017e-07f, -5.304632687e-07f, -5.301963642e-07f,
+-5.299285889e-07f, -5.296599435e-07f, -5.293904284e-07f, -5.291200444e-07f, -5.288487921e-07f, -5.285766722e-07f, -5.283036852e-07f, -5.280298318e-07f, -5.277551127e-07f, -5.274795285e-07f,
+-5.272030798e-07f, -5.269257673e-07f, -5.266475916e-07f, -5.263685534e-07f, -5.260886533e-07f, -5.258078920e-07f, -5.255262701e-07f, -5.252437883e-07f, -5.249604473e-07f, -5.246762476e-07f,
+-5.243911900e-07f, -5.241052750e-07f, -5.238185035e-07f, -5.235308759e-07f, -5.232423930e-07f, -5.229530555e-07f, -5.226628640e-07f, -5.223718192e-07f, -5.220799218e-07f, -5.217871723e-07f,
+-5.214935715e-07f, -5.211991201e-07f, -5.209038188e-07f, -5.206076681e-07f, -5.203106688e-07f, -5.200128216e-07f, -5.197141272e-07f, -5.194145861e-07f, -5.191141992e-07f, -5.188129670e-07f,
+-5.185108903e-07f, -5.182079698e-07f, -5.179042061e-07f, -5.175995999e-07f, -5.172941519e-07f, -5.169878629e-07f, -5.166807334e-07f, -5.163727643e-07f, -5.160639561e-07f, -5.157543097e-07f,
+-5.154438256e-07f, -5.151325046e-07f, -5.148203473e-07f, -5.145073546e-07f, -5.141935270e-07f, -5.138788654e-07f, -5.135633703e-07f, -5.132470425e-07f, -5.129298828e-07f, -5.126118917e-07f,
+-5.122930701e-07f, -5.119734187e-07f, -5.116529380e-07f, -5.113316290e-07f, -5.110094922e-07f, -5.106865285e-07f, -5.103627385e-07f, -5.100381229e-07f, -5.097126824e-07f, -5.093864179e-07f,
+-5.090593300e-07f, -5.087314194e-07f, -5.084026868e-07f, -5.080731331e-07f, -5.077427588e-07f, -5.074115648e-07f, -5.070795518e-07f, -5.067467205e-07f, -5.064130717e-07f, -5.060786060e-07f,
+-5.057433243e-07f, -5.054072272e-07f, -5.050703154e-07f, -5.047325899e-07f, -5.043940512e-07f, -5.040547001e-07f, -5.037145374e-07f, -5.033735638e-07f, -5.030317800e-07f, -5.026891869e-07f,
+-5.023457851e-07f, -5.020015754e-07f, -5.016565586e-07f, -5.013107354e-07f, -5.009641065e-07f, -5.006166728e-07f, -5.002684349e-07f, -4.999193937e-07f, -4.995695499e-07f, -4.992189042e-07f,
+-4.988674575e-07f, -4.985152104e-07f, -4.981621638e-07f, -4.978083184e-07f, -4.974536749e-07f, -4.970982342e-07f, -4.967419971e-07f, -4.963849642e-07f, -4.960271363e-07f, -4.956685143e-07f,
+-4.953090990e-07f, -4.949488909e-07f, -4.945878911e-07f, -4.942261002e-07f, -4.938635190e-07f, -4.935001483e-07f, -4.931359889e-07f, -4.927710415e-07f, -4.924053070e-07f, -4.920387861e-07f,
+-4.916714797e-07f, -4.913033884e-07f, -4.909345132e-07f, -4.905648547e-07f, -4.901944138e-07f, -4.898231913e-07f, -4.894511879e-07f, -4.890784045e-07f, -4.887048419e-07f, -4.883305008e-07f,
+-4.879553821e-07f, -4.875794865e-07f, -4.872028149e-07f, -4.868253680e-07f, -4.864471467e-07f, -4.860681518e-07f, -4.856883840e-07f, -4.853078443e-07f, -4.849265333e-07f, -4.845444519e-07f,
+-4.841616009e-07f, -4.837779811e-07f, -4.833935934e-07f, -4.830084385e-07f, -4.826225173e-07f, -4.822358306e-07f, -4.818483791e-07f, -4.814601638e-07f, -4.810711854e-07f, -4.806814448e-07f,
+-4.802909427e-07f, -4.798996801e-07f, -4.795076577e-07f, -4.791148764e-07f, -4.787213369e-07f, -4.783270402e-07f, -4.779319870e-07f, -4.775361781e-07f, -4.771396145e-07f, -4.767422969e-07f,
+-4.763442262e-07f, -4.759454032e-07f, -4.755458288e-07f, -4.751455037e-07f, -4.747444289e-07f, -4.743426051e-07f, -4.739400332e-07f, -4.735367141e-07f, -4.731326486e-07f, -4.727278374e-07f,
+-4.723222816e-07f, -4.719159819e-07f, -4.715089392e-07f, -4.711011543e-07f, -4.706926281e-07f, -4.702833614e-07f, -4.698733551e-07f, -4.694626100e-07f, -4.690511270e-07f, -4.686389070e-07f,
+-4.682259507e-07f, -4.678122591e-07f, -4.673978330e-07f, -4.669826734e-07f, -4.665667809e-07f, -4.661501566e-07f, -4.657328012e-07f, -4.653147156e-07f, -4.648959008e-07f, -4.644763575e-07f,
+-4.640560866e-07f, -4.636350891e-07f, -4.632133657e-07f, -4.627909174e-07f, -4.623677450e-07f, -4.619438494e-07f, -4.615192314e-07f, -4.610938920e-07f, -4.606678320e-07f, -4.602410523e-07f,
+-4.598135538e-07f, -4.593853374e-07f, -4.589564038e-07f, -4.585267541e-07f, -4.580963891e-07f, -4.576653097e-07f, -4.572335168e-07f, -4.568010112e-07f, -4.563677939e-07f, -4.559338657e-07f,
+-4.554992276e-07f, -4.550638804e-07f, -4.546278249e-07f, -4.541910622e-07f, -4.537535931e-07f, -4.533154185e-07f, -4.528765393e-07f, -4.524369563e-07f, -4.519966706e-07f, -4.515556829e-07f,
+-4.511139942e-07f, -4.506716054e-07f, -4.502285174e-07f, -4.497847311e-07f, -4.493402474e-07f, -4.488950672e-07f, -4.484491914e-07f, -4.480026210e-07f, -4.475553568e-07f, -4.471073997e-07f,
+-4.466587506e-07f, -4.462094105e-07f, -4.457593803e-07f, -4.453086609e-07f, -4.448572532e-07f, -4.444051581e-07f, -4.439523766e-07f, -4.434989095e-07f, -4.430447578e-07f, -4.425899224e-07f,
+-4.421344042e-07f, -4.416782042e-07f, -4.412213232e-07f, -4.407637622e-07f, -4.403055221e-07f, -4.398466038e-07f, -4.393870084e-07f, -4.389267366e-07f, -4.384657894e-07f, -4.380041678e-07f,
+-4.375418727e-07f, -4.370789050e-07f, -4.366152657e-07f, -4.361509556e-07f, -4.356859758e-07f, -4.352203271e-07f, -4.347540106e-07f, -4.342870270e-07f, -4.338193774e-07f, -4.333510628e-07f,
+-4.328820840e-07f, -4.324124420e-07f, -4.319421378e-07f, -4.314711722e-07f, -4.309995463e-07f, -4.305272609e-07f, -4.300543171e-07f, -4.295807157e-07f, -4.291064578e-07f, -4.286315442e-07f,
+-4.281559759e-07f, -4.276797540e-07f, -4.272028792e-07f, -4.267253527e-07f, -4.262471752e-07f, -4.257683479e-07f, -4.252888716e-07f, -4.248087473e-07f, -4.243279760e-07f, -4.238465586e-07f,
+-4.233644961e-07f, -4.228817895e-07f, -4.223984396e-07f, -4.219144475e-07f, -4.214298142e-07f, -4.209445406e-07f, -4.204586276e-07f, -4.199720763e-07f, -4.194848875e-07f, -4.189970624e-07f,
+-4.185086018e-07f, -4.180195067e-07f, -4.175297780e-07f, -4.170394169e-07f, -4.165484242e-07f, -4.160568008e-07f, -4.155645479e-07f, -4.150716663e-07f, -4.145781571e-07f, -4.140840211e-07f,
+-4.135892595e-07f, -4.130938731e-07f, -4.125978630e-07f, -4.121012301e-07f, -4.116039754e-07f, -4.111061000e-07f, -4.106076047e-07f, -4.101084906e-07f, -4.096087586e-07f, -4.091084098e-07f,
+-4.086074451e-07f, -4.081058656e-07f, -4.076036721e-07f, -4.071008658e-07f, -4.065974475e-07f, -4.060934183e-07f, -4.055887792e-07f, -4.050835312e-07f, -4.045776753e-07f, -4.040712124e-07f,
+-4.035641435e-07f, -4.030564698e-07f, -4.025481921e-07f, -4.020393114e-07f, -4.015298288e-07f, -4.010197453e-07f, -4.005090618e-07f, -3.999977793e-07f, -3.994858990e-07f, -3.989734217e-07f,
+-3.984603485e-07f, -3.979466804e-07f, -3.974324183e-07f, -3.969175634e-07f, -3.964021165e-07f, -3.958860788e-07f, -3.953694512e-07f, -3.948522348e-07f, -3.943344305e-07f, -3.938160393e-07f,
+-3.932970623e-07f, -3.927775006e-07f, -3.922573550e-07f, -3.917366266e-07f, -3.912153165e-07f, -3.906934257e-07f, -3.901709551e-07f, -3.896479058e-07f, -3.891242788e-07f, -3.886000752e-07f,
+-3.880752959e-07f, -3.875499420e-07f, -3.870240145e-07f, -3.864975145e-07f, -3.859704429e-07f, -3.854428008e-07f, -3.849145892e-07f, -3.843858091e-07f, -3.838564616e-07f, -3.833265476e-07f,
+-3.827960683e-07f, -3.822650247e-07f, -3.817334177e-07f, -3.812012485e-07f, -3.806685180e-07f, -3.801352273e-07f, -3.796013774e-07f, -3.790669694e-07f, -3.785320043e-07f, -3.779964831e-07f,
+-3.774604068e-07f, -3.769237766e-07f, -3.763865934e-07f, -3.758488583e-07f, -3.753105723e-07f, -3.747717365e-07f, -3.742323519e-07f, -3.736924195e-07f, -3.731519405e-07f, -3.726109158e-07f,
+-3.720693464e-07f, -3.715272335e-07f, -3.709845781e-07f, -3.704413812e-07f, -3.698976439e-07f, -3.693533672e-07f, -3.688085522e-07f, -3.682631999e-07f, -3.677173114e-07f, -3.671708877e-07f,
+-3.666239299e-07f, -3.660764391e-07f, -3.655284162e-07f, -3.649798623e-07f, -3.644307786e-07f, -3.638811660e-07f, -3.633310257e-07f, -3.627803586e-07f, -3.622291658e-07f, -3.616774485e-07f,
+-3.611252076e-07f, -3.605724442e-07f, -3.600191593e-07f, -3.594653541e-07f, -3.589110296e-07f, -3.583561869e-07f, -3.578008270e-07f, -3.572449510e-07f, -3.566885599e-07f, -3.561316548e-07f,
+-3.555742369e-07f, -3.550163071e-07f, -3.544578665e-07f, -3.538989163e-07f, -3.533394574e-07f, -3.527794909e-07f, -3.522190179e-07f, -3.516580395e-07f, -3.510965568e-07f, -3.505345708e-07f,
+-3.499720826e-07f, -3.494090932e-07f, -3.488456039e-07f, -3.482816155e-07f, -3.477171292e-07f, -3.471521462e-07f, -3.465866673e-07f, -3.460206938e-07f, -3.454542268e-07f, -3.448872672e-07f,
+-3.443198162e-07f, -3.437518748e-07f, -3.431834442e-07f, -3.426145254e-07f, -3.420451195e-07f, -3.414752276e-07f, -3.409048508e-07f, -3.403339901e-07f, -3.397626467e-07f, -3.391908216e-07f,
+-3.386185159e-07f, -3.380457307e-07f, -3.374724671e-07f, -3.368987262e-07f, -3.363245091e-07f, -3.357498168e-07f, -3.351746505e-07f, -3.345990112e-07f, -3.340229000e-07f, -3.334463181e-07f,
+-3.328692665e-07f, -3.322917463e-07f, -3.317137586e-07f, -3.311353045e-07f, -3.305563852e-07f, -3.299770016e-07f, -3.293971549e-07f, -3.288168462e-07f, -3.282360766e-07f, -3.276548472e-07f,
+-3.270731590e-07f, -3.264910133e-07f, -3.259084110e-07f, -3.253253533e-07f, -3.247418413e-07f, -3.241578761e-07f, -3.235734588e-07f, -3.229885905e-07f, -3.224032723e-07f, -3.218175053e-07f,
+-3.212312906e-07f, -3.206446293e-07f, -3.200575225e-07f, -3.194699714e-07f, -3.188819770e-07f, -3.182935405e-07f, -3.177046629e-07f, -3.171153453e-07f, -3.165255890e-07f, -3.159353949e-07f,
+-3.153447642e-07f, -3.147536980e-07f, -3.141621974e-07f, -3.135702636e-07f, -3.129778976e-07f, -3.123851005e-07f, -3.117918735e-07f, -3.111982177e-07f, -3.106041342e-07f, -3.100096241e-07f,
+-3.094146886e-07f, -3.088193287e-07f, -3.082235455e-07f, -3.076273402e-07f, -3.070307139e-07f, -3.064336678e-07f, -3.058362028e-07f, -3.052383203e-07f, -3.046400212e-07f, -3.040413067e-07f,
+-3.034421779e-07f, -3.028426360e-07f, -3.022426820e-07f, -3.016423171e-07f, -3.010415424e-07f, -3.004403590e-07f, -2.998387681e-07f, -2.992367708e-07f, -2.986343682e-07f, -2.980315614e-07f,
+-2.974283516e-07f, -2.968247399e-07f, -2.962207274e-07f, -2.956163152e-07f, -2.950115045e-07f, -2.944062964e-07f, -2.938006920e-07f, -2.931946924e-07f, -2.925882989e-07f, -2.919815125e-07f,
+-2.913743343e-07f, -2.907667655e-07f, -2.901588072e-07f, -2.895504605e-07f, -2.889417267e-07f, -2.883326067e-07f, -2.877231018e-07f, -2.871132131e-07f, -2.865029416e-07f, -2.858922887e-07f,
+-2.852812553e-07f, -2.846698426e-07f, -2.840580518e-07f, -2.834458840e-07f, -2.828333403e-07f, -2.822204219e-07f, -2.816071299e-07f, -2.809934654e-07f, -2.803794296e-07f, -2.797650236e-07f,
+-2.791502487e-07f, -2.785351058e-07f, -2.779195961e-07f, -2.773037209e-07f, -2.766874812e-07f, -2.760708781e-07f, -2.754539129e-07f, -2.748365866e-07f, -2.742189004e-07f, -2.736008555e-07f,
+-2.729824529e-07f, -2.723636939e-07f, -2.717445796e-07f, -2.711251111e-07f, -2.705052895e-07f, -2.698851161e-07f, -2.692645920e-07f, -2.686437182e-07f, -2.680224960e-07f, -2.674009265e-07f,
+-2.667790109e-07f, -2.661567502e-07f, -2.655341457e-07f, -2.649111986e-07f, -2.642879098e-07f, -2.636642807e-07f, -2.630403123e-07f, -2.624160058e-07f, -2.617913624e-07f, -2.611663831e-07f,
+-2.605410692e-07f, -2.599154219e-07f, -2.592894422e-07f, -2.586631313e-07f, -2.580364903e-07f, -2.574095205e-07f, -2.567822230e-07f, -2.561545989e-07f, -2.555266494e-07f, -2.548983756e-07f,
+-2.542697787e-07f, -2.536408598e-07f, -2.530116202e-07f, -2.523820609e-07f, -2.517521832e-07f, -2.511219881e-07f, -2.504914769e-07f, -2.498606506e-07f, -2.492295105e-07f, -2.485980578e-07f,
+-2.479662934e-07f, -2.473342187e-07f, -2.467018348e-07f, -2.460691429e-07f, -2.454361440e-07f, -2.448028394e-07f, -2.441692303e-07f, -2.435353177e-07f, -2.429011029e-07f, -2.422665870e-07f,
+-2.416317712e-07f, -2.409966566e-07f, -2.403612444e-07f, -2.397255357e-07f, -2.390895318e-07f, -2.384532338e-07f, -2.378166428e-07f, -2.371797600e-07f, -2.365425867e-07f, -2.359051238e-07f,
+-2.352673727e-07f, -2.346293345e-07f, -2.339910103e-07f, -2.333524012e-07f, -2.327135086e-07f, -2.320743335e-07f, -2.314348771e-07f, -2.307951406e-07f, -2.301551251e-07f, -2.295148319e-07f,
+-2.288742620e-07f, -2.282334166e-07f, -2.275922969e-07f, -2.269509042e-07f, -2.263092394e-07f, -2.256673039e-07f, -2.250250988e-07f, -2.243826252e-07f, -2.237398844e-07f, -2.230968774e-07f,
+-2.224536055e-07f, -2.218100699e-07f, -2.211662716e-07f, -2.205222119e-07f, -2.198778920e-07f, -2.192333130e-07f, -2.185884761e-07f, -2.179433824e-07f, -2.172980332e-07f, -2.166524295e-07f,
+-2.160065727e-07f, -2.153604638e-07f, -2.147141040e-07f, -2.140674945e-07f, -2.134206365e-07f, -2.127735311e-07f, -2.121261796e-07f, -2.114785830e-07f, -2.108307426e-07f, -2.101826595e-07f,
+-2.095343350e-07f, -2.088857701e-07f, -2.082369661e-07f, -2.075879242e-07f, -2.069386454e-07f, -2.062891311e-07f, -2.056393823e-07f, -2.049894002e-07f, -2.043391861e-07f, -2.036887410e-07f,
+-2.030380662e-07f, -2.023871629e-07f, -2.017360322e-07f, -2.010846752e-07f, -2.004330933e-07f, -1.997812875e-07f, -1.991292591e-07f, -1.984770091e-07f, -1.978245388e-07f, -1.971718494e-07f,
+-1.965189421e-07f, -1.958658179e-07f, -1.952124782e-07f, -1.945589240e-07f, -1.939051566e-07f, -1.932511771e-07f, -1.925969868e-07f, -1.919425867e-07f, -1.912879781e-07f, -1.906331621e-07f,
+-1.899781400e-07f, -1.893229129e-07f, -1.886674820e-07f, -1.880118484e-07f, -1.873560134e-07f, -1.866999781e-07f, -1.860437438e-07f, -1.853873115e-07f, -1.847306825e-07f, -1.840738579e-07f,
+-1.834168390e-07f, -1.827596269e-07f, -1.821022228e-07f, -1.814446279e-07f, -1.807868433e-07f, -1.801288702e-07f, -1.794707099e-07f, -1.788123635e-07f, -1.781538321e-07f, -1.774951170e-07f,
+-1.768362194e-07f, -1.761771404e-07f, -1.755178812e-07f, -1.748584430e-07f, -1.741988270e-07f, -1.735390343e-07f, -1.728790661e-07f, -1.722189237e-07f, -1.715586082e-07f, -1.708981208e-07f,
+-1.702374626e-07f, -1.695766349e-07f, -1.689156388e-07f, -1.682544756e-07f, -1.675931463e-07f, -1.669316522e-07f, -1.662699945e-07f, -1.656081743e-07f, -1.649461929e-07f, -1.642840514e-07f,
+-1.636217510e-07f, -1.629592928e-07f, -1.622966781e-07f, -1.616339081e-07f, -1.609709839e-07f, -1.603079067e-07f, -1.596446778e-07f, -1.589812982e-07f, -1.583177691e-07f, -1.576540918e-07f,
+-1.569902675e-07f, -1.563262973e-07f, -1.556621823e-07f, -1.549979239e-07f, -1.543335231e-07f, -1.536689812e-07f, -1.530042993e-07f, -1.523394786e-07f, -1.516745204e-07f, -1.510094257e-07f,
+-1.503441958e-07f, -1.496788318e-07f, -1.490133350e-07f, -1.483477065e-07f, -1.476819475e-07f, -1.470160592e-07f, -1.463500428e-07f, -1.456838995e-07f, -1.450176303e-07f, -1.443512367e-07f,
+-1.436847196e-07f, -1.430180803e-07f, -1.423513200e-07f, -1.416844398e-07f, -1.410174410e-07f, -1.403503248e-07f, -1.396830922e-07f, -1.390157446e-07f, -1.383482830e-07f, -1.376807087e-07f,
+-1.370130228e-07f, -1.363452266e-07f, -1.356773212e-07f, -1.350093078e-07f, -1.343411875e-07f, -1.336729617e-07f, -1.330046314e-07f, -1.323361978e-07f, -1.316676621e-07f, -1.309990256e-07f,
+-1.303302893e-07f, -1.296614545e-07f, -1.289925223e-07f, -1.283234940e-07f, -1.276543707e-07f, -1.269851536e-07f, -1.263158438e-07f, -1.256464427e-07f, -1.249769512e-07f, -1.243073708e-07f,
+-1.236377024e-07f, -1.229679473e-07f, -1.222981067e-07f, -1.216281818e-07f, -1.209581737e-07f, -1.202880836e-07f, -1.196179127e-07f, -1.189476623e-07f, -1.182773334e-07f, -1.176069272e-07f,
+-1.169364450e-07f, -1.162658879e-07f, -1.155952571e-07f, -1.149245538e-07f, -1.142537792e-07f, -1.135829344e-07f, -1.129120206e-07f, -1.122410390e-07f, -1.115699908e-07f, -1.108988772e-07f,
+-1.102276993e-07f, -1.095564584e-07f, -1.088851556e-07f, -1.082137920e-07f, -1.075423690e-07f, -1.068708876e-07f, -1.061993490e-07f, -1.055277544e-07f, -1.048561050e-07f, -1.041844020e-07f,
+-1.035126466e-07f, -1.028408398e-07f, -1.021689830e-07f, -1.014970773e-07f, -1.008251238e-07f, -1.001531238e-07f, -9.948107841e-08f, -9.880898883e-08f, -9.813685622e-08f, -9.746468178e-08f,
+-9.679246668e-08f, -9.612021210e-08f, -9.544791921e-08f, -9.477558919e-08f, -9.410322323e-08f, -9.343082249e-08f, -9.275838816e-08f, -9.208592141e-08f, -9.141342342e-08f, -9.074089536e-08f,
+-9.006833842e-08f, -8.939575377e-08f, -8.872314258e-08f, -8.805050603e-08f, -8.737784530e-08f, -8.670516156e-08f, -8.603245599e-08f, -8.535972976e-08f, -8.468698405e-08f, -8.401422004e-08f,
+-8.334143889e-08f, -8.266864178e-08f, -8.199582989e-08f, -8.132300440e-08f, -8.065016646e-08f, -7.997731727e-08f, -7.930445799e-08f, -7.863158979e-08f, -7.795871385e-08f, -7.728583134e-08f,
+-7.661294344e-08f, -7.594005131e-08f, -7.526715614e-08f, -7.459425908e-08f, -7.392136132e-08f, -7.324846402e-08f, -7.257556835e-08f, -7.190267549e-08f, -7.122978661e-08f, -7.055690288e-08f,
+-6.988402547e-08f, -6.921115555e-08f, -6.853829428e-08f, -6.786544284e-08f, -6.719260241e-08f, -6.651977414e-08f, -6.584695920e-08f, -6.517415877e-08f, -6.450137402e-08f, -6.382860610e-08f,
+-6.315585620e-08f, -6.248312547e-08f, -6.181041509e-08f, -6.113772622e-08f, -6.046506003e-08f, -5.979241769e-08f, -5.911980036e-08f, -5.844720921e-08f, -5.777464540e-08f, -5.710211010e-08f,
+-5.642960448e-08f, -5.575712970e-08f, -5.508468693e-08f, -5.441227732e-08f, -5.373990205e-08f, -5.306756228e-08f, -5.239525917e-08f, -5.172299388e-08f, -5.105076759e-08f, -5.037858144e-08f,
+-4.970643661e-08f, -4.903433426e-08f, -4.836227554e-08f, -4.769026162e-08f, -4.701829366e-08f, -4.634637283e-08f, -4.567450028e-08f, -4.500267717e-08f, -4.433090467e-08f, -4.365918393e-08f,
+-4.298751611e-08f, -4.231590237e-08f, -4.164434387e-08f, -4.097284178e-08f, -4.030139724e-08f, -3.963001141e-08f, -3.895868546e-08f, -3.828742054e-08f, -3.761621781e-08f, -3.694507842e-08f,
+-3.627400353e-08f, -3.560299430e-08f, -3.493205187e-08f, -3.426117742e-08f, -3.359037209e-08f, -3.291963703e-08f, -3.224897340e-08f, -3.157838236e-08f, -3.090786506e-08f, -3.023742265e-08f,
+-2.956705628e-08f, -2.889676711e-08f, -2.822655629e-08f, -2.755642496e-08f, -2.688637429e-08f, -2.621640543e-08f, -2.554651951e-08f, -2.487671770e-08f, -2.420700115e-08f, -2.353737100e-08f,
+-2.286782840e-08f, -2.219837450e-08f, -2.152901046e-08f, -2.085973741e-08f, -2.019055651e-08f, -1.952146890e-08f, -1.885247573e-08f, -1.818357815e-08f, -1.751477730e-08f, -1.684607433e-08f,
+-1.617747038e-08f, -1.550896661e-08f, -1.484056414e-08f, -1.417226414e-08f, -1.350406774e-08f, -1.283597608e-08f, -1.216799031e-08f, -1.150011158e-08f, -1.083234101e-08f, -1.016467976e-08f,
+-9.497128973e-09f, -8.829689779e-09f, -8.162363323e-09f, -7.495150745e-09f, -6.828053186e-09f, -6.161071784e-09f, -5.494207678e-09f, -4.827462007e-09f, -4.160835909e-09f, -3.494330522e-09f,
+-2.827946982e-09f, -2.161686427e-09f, -1.495549992e-09f, -8.295388147e-10f, -1.636540294e-10f, 5.021032286e-10f, 1.167731825e-09f, 1.833230625e-09f, 2.498598495e-09f, 3.163834302e-09f,
+3.828936914e-09f, 4.493905197e-09f, 5.158738020e-09f, 5.823434251e-09f, 6.487992759e-09f, 7.152412415e-09f, 7.816692087e-09f, 8.480830646e-09f, 9.144826963e-09f, 9.808679909e-09f,
+1.047238836e-08f, 1.113595118e-08f, 1.179936724e-08f, 1.246263543e-08f, 1.312575460e-08f, 1.378872365e-08f, 1.445154143e-08f, 1.511420684e-08f, 1.577671873e-08f, 1.643907599e-08f,
+1.710127750e-08f, 1.776332213e-08f, 1.842520875e-08f, 1.908693626e-08f, 1.974850352e-08f, 2.040990941e-08f, 2.107115282e-08f, 2.173223262e-08f, 2.239314770e-08f, 2.305389693e-08f,
+2.371447920e-08f, 2.437489338e-08f, 2.503513837e-08f, 2.569521304e-08f, 2.635511628e-08f, 2.701484697e-08f, 2.767440400e-08f, 2.833378625e-08f, 2.899299261e-08f, 2.965202196e-08f,
+3.031087319e-08f, 3.096954518e-08f, 3.162803683e-08f, 3.228634702e-08f, 3.294447465e-08f, 3.360241859e-08f, 3.426017775e-08f, 3.491775100e-08f, 3.557513725e-08f, 3.623233538e-08f,
+3.688934428e-08f, 3.754616285e-08f, 3.820278999e-08f, 3.885922457e-08f, 3.951546551e-08f, 4.017151168e-08f, 4.082736200e-08f, 4.148301534e-08f, 4.213847062e-08f, 4.279372673e-08f,
+4.344878255e-08f, 4.410363701e-08f, 4.475828898e-08f, 4.541273737e-08f, 4.606698108e-08f, 4.672101901e-08f, 4.737485006e-08f, 4.802847314e-08f, 4.868188714e-08f, 4.933509096e-08f,
+4.998808352e-08f, 5.064086370e-08f, 5.129343043e-08f, 5.194578260e-08f, 5.259791911e-08f, 5.324983888e-08f, 5.390154082e-08f, 5.455302382e-08f, 5.520428679e-08f, 5.585532865e-08f,
+5.650614830e-08f, 5.715674466e-08f, 5.780711662e-08f, 5.845726312e-08f, 5.910718304e-08f, 5.975687532e-08f, 6.040633885e-08f, 6.105557255e-08f, 6.170457535e-08f, 6.235334614e-08f,
+6.300188385e-08f, 6.365018739e-08f, 6.429825568e-08f, 6.494608764e-08f, 6.559368218e-08f, 6.624103821e-08f, 6.688815467e-08f, 6.753503047e-08f, 6.818166452e-08f, 6.882805576e-08f,
+6.947420309e-08f, 7.012010545e-08f, 7.076576175e-08f, 7.141117092e-08f, 7.205633189e-08f, 7.270124357e-08f, 7.334590489e-08f, 7.399031478e-08f, 7.463447216e-08f, 7.527837596e-08f,
+7.592202511e-08f, 7.656541854e-08f, 7.720855518e-08f, 7.785143394e-08f, 7.849405378e-08f, 7.913641361e-08f, 7.977851237e-08f, 8.042034899e-08f, 8.106192240e-08f, 8.170323154e-08f,
+8.234427534e-08f, 8.298505274e-08f, 8.362556267e-08f, 8.426580406e-08f, 8.490577586e-08f, 8.554547701e-08f, 8.618490643e-08f, 8.682406307e-08f, 8.746294588e-08f, 8.810155378e-08f,
+8.873988572e-08f, 8.937794064e-08f, 9.001571749e-08f, 9.065321521e-08f, 9.129043274e-08f, 9.192736902e-08f, 9.256402301e-08f, 9.320039364e-08f, 9.383647986e-08f, 9.447228063e-08f,
+9.510779488e-08f, 9.574302157e-08f, 9.637795965e-08f, 9.701260806e-08f, 9.764696576e-08f, 9.828103170e-08f, 9.891480483e-08f, 9.954828410e-08f, 1.001814685e-07f, 1.008143569e-07f,
+1.014469483e-07f, 1.020792417e-07f, 1.027112360e-07f, 1.033429302e-07f, 1.039743232e-07f, 1.046054140e-07f, 1.052362016e-07f, 1.058666849e-07f, 1.064968628e-07f, 1.071267344e-07f,
+1.077562986e-07f, 1.083855543e-07f, 1.090145006e-07f, 1.096431363e-07f, 1.102714605e-07f, 1.108994721e-07f, 1.115271701e-07f, 1.121545535e-07f, 1.127816212e-07f, 1.134083721e-07f,
+1.140348053e-07f, 1.146609198e-07f, 1.152867145e-07f, 1.159121883e-07f, 1.165373403e-07f, 1.171621694e-07f, 1.177866745e-07f, 1.184108548e-07f, 1.190347091e-07f, 1.196582364e-07f,
+1.202814358e-07f, 1.209043060e-07f, 1.215268463e-07f, 1.221490555e-07f, 1.227709326e-07f, 1.233924766e-07f, 1.240136865e-07f, 1.246345612e-07f, 1.252550998e-07f, 1.258753012e-07f,
+1.264951644e-07f, 1.271146884e-07f, 1.277338723e-07f, 1.283527148e-07f, 1.289712152e-07f, 1.295893723e-07f, 1.302071851e-07f, 1.308246527e-07f, 1.314417740e-07f, 1.320585480e-07f,
+1.326749737e-07f, 1.332910501e-07f, 1.339067762e-07f, 1.345221510e-07f, 1.351371735e-07f, 1.357518427e-07f, 1.363661575e-07f, 1.369801171e-07f, 1.375937203e-07f, 1.382069662e-07f,
+1.388198538e-07f, 1.394323820e-07f, 1.400445500e-07f, 1.406563566e-07f, 1.412678009e-07f, 1.418788820e-07f, 1.424895987e-07f, 1.430999502e-07f, 1.437099353e-07f, 1.443195532e-07f,
+1.449288029e-07f, 1.455376832e-07f, 1.461461934e-07f, 1.467543323e-07f, 1.473620990e-07f, 1.479694925e-07f, 1.485765118e-07f, 1.491831559e-07f, 1.497894238e-07f, 1.503953147e-07f,
+1.510008274e-07f, 1.516059610e-07f, 1.522107145e-07f, 1.528150869e-07f, 1.534190773e-07f, 1.540226847e-07f, 1.546259081e-07f, 1.552287465e-07f, 1.558311989e-07f, 1.564332644e-07f,
+1.570349421e-07f, 1.576362308e-07f, 1.582371297e-07f, 1.588376378e-07f, 1.594377541e-07f, 1.600374776e-07f, 1.606368075e-07f, 1.612357426e-07f, 1.618342821e-07f, 1.624324249e-07f,
+1.630301702e-07f, 1.636275169e-07f, 1.642244640e-07f, 1.648210108e-07f, 1.654171560e-07f, 1.660128989e-07f, 1.666082384e-07f, 1.672031736e-07f, 1.677977035e-07f, 1.683918271e-07f,
+1.689855436e-07f, 1.695788519e-07f, 1.701717511e-07f, 1.707642403e-07f, 1.713563185e-07f, 1.719479847e-07f, 1.725392380e-07f, 1.731300774e-07f, 1.737205020e-07f, 1.743105109e-07f,
+1.749001030e-07f, 1.754892775e-07f, 1.760780334e-07f, 1.766663698e-07f, 1.772542857e-07f, 1.778417802e-07f, 1.784288523e-07f, 1.790155010e-07f, 1.796017256e-07f, 1.801875249e-07f,
+1.807728981e-07f, 1.813578443e-07f, 1.819423625e-07f, 1.825264517e-07f, 1.831101110e-07f, 1.836933396e-07f, 1.842761364e-07f, 1.848585005e-07f, 1.854404311e-07f, 1.860219271e-07f,
+1.866029877e-07f, 1.871836119e-07f, 1.877637987e-07f, 1.883435474e-07f, 1.889228569e-07f, 1.895017263e-07f, 1.900801546e-07f, 1.906581411e-07f, 1.912356847e-07f, 1.918127845e-07f,
+1.923894397e-07f, 1.929656492e-07f, 1.935414122e-07f, 1.941167278e-07f, 1.946915950e-07f, 1.952660129e-07f, 1.958399806e-07f, 1.964134973e-07f, 1.969865619e-07f, 1.975591736e-07f,
+1.981313315e-07f, 1.987030347e-07f, 1.992742821e-07f, 1.998450731e-07f, 2.004154066e-07f, 2.009852817e-07f, 2.015546975e-07f, 2.021236532e-07f, 2.026921478e-07f, 2.032601804e-07f,
+2.038277501e-07f, 2.043948561e-07f, 2.049614974e-07f, 2.055276731e-07f, 2.060933824e-07f, 2.066586243e-07f, 2.072233980e-07f, 2.077877025e-07f, 2.083515369e-07f, 2.089149005e-07f,
+2.094777922e-07f, 2.100402112e-07f, 2.106021566e-07f, 2.111636275e-07f, 2.117246231e-07f, 2.122851424e-07f, 2.128451845e-07f, 2.134047487e-07f, 2.139638339e-07f, 2.145224393e-07f,
+2.150805641e-07f, 2.156382073e-07f, 2.161953681e-07f, 2.167520456e-07f, 2.173082389e-07f, 2.178639472e-07f, 2.184191696e-07f, 2.189739051e-07f, 2.195281530e-07f, 2.200819123e-07f,
+2.206351822e-07f, 2.211879619e-07f, 2.217402504e-07f, 2.222920469e-07f, 2.228433505e-07f, 2.233941603e-07f, 2.239444755e-07f, 2.244942953e-07f, 2.250436187e-07f, 2.255924450e-07f,
+2.261407731e-07f, 2.266886024e-07f, 2.272359319e-07f, 2.277827608e-07f, 2.283290881e-07f, 2.288749132e-07f, 2.294202350e-07f, 2.299650528e-07f, 2.305093658e-07f, 2.310531729e-07f,
+2.315964735e-07f, 2.321392666e-07f, 2.326815515e-07f, 2.332233272e-07f, 2.337645929e-07f, 2.343053478e-07f, 2.348455910e-07f, 2.353853217e-07f, 2.359245391e-07f, 2.364632422e-07f,
+2.370014304e-07f, 2.375391026e-07f, 2.380762582e-07f, 2.386128962e-07f, 2.391490159e-07f, 2.396846163e-07f, 2.402196967e-07f, 2.407542562e-07f, 2.412882941e-07f, 2.418218094e-07f,
+2.423548013e-07f, 2.428872690e-07f, 2.434192118e-07f, 2.439506287e-07f, 2.444815189e-07f, 2.450118817e-07f, 2.455417161e-07f, 2.460710214e-07f, 2.465997968e-07f, 2.471280414e-07f,
+2.476557545e-07f, 2.481829351e-07f, 2.487095825e-07f, 2.492356959e-07f, 2.497612745e-07f, 2.502863174e-07f, 2.508108238e-07f, 2.513347930e-07f, 2.518582241e-07f, 2.523811163e-07f,
+2.529034688e-07f, 2.534252808e-07f, 2.539465515e-07f, 2.544672800e-07f, 2.549874657e-07f, 2.555071077e-07f, 2.560262052e-07f, 2.565447573e-07f, 2.570627633e-07f, 2.575802225e-07f,
+2.580971339e-07f, 2.586134969e-07f, 2.591293105e-07f, 2.596445741e-07f, 2.601592868e-07f, 2.606734479e-07f, 2.611870565e-07f, 2.617001119e-07f, 2.622126132e-07f, 2.627245598e-07f,
+2.632359507e-07f, 2.637467853e-07f, 2.642570627e-07f, 2.647667822e-07f, 2.652759430e-07f, 2.657845442e-07f, 2.662925852e-07f, 2.668000652e-07f, 2.673069833e-07f, 2.678133388e-07f,
+2.683191309e-07f, 2.688243589e-07f, 2.693290220e-07f, 2.698331194e-07f, 2.703366504e-07f, 2.708396141e-07f, 2.713420099e-07f, 2.718438368e-07f, 2.723450943e-07f, 2.728457815e-07f,
+2.733458977e-07f, 2.738454420e-07f, 2.743444138e-07f, 2.748428123e-07f, 2.753406367e-07f, 2.758378863e-07f, 2.763345602e-07f, 2.768306579e-07f, 2.773261784e-07f, 2.778211211e-07f,
+2.783154853e-07f, 2.788092700e-07f, 2.793024747e-07f, 2.797950985e-07f, 2.802871408e-07f, 2.807786007e-07f, 2.812694776e-07f, 2.817597706e-07f, 2.822494791e-07f, 2.827386023e-07f,
+2.832271395e-07f, 2.837150899e-07f, 2.842024528e-07f, 2.846892275e-07f, 2.851754131e-07f, 2.856610091e-07f, 2.861460146e-07f, 2.866304290e-07f, 2.871142515e-07f, 2.875974813e-07f,
+2.880801178e-07f, 2.885621602e-07f, 2.890436078e-07f, 2.895244599e-07f, 2.900047157e-07f, 2.904843746e-07f, 2.909634357e-07f, 2.914418985e-07f, 2.919197621e-07f, 2.923970259e-07f,
+2.928736891e-07f, 2.933497511e-07f, 2.938252111e-07f, 2.943000683e-07f, 2.947743222e-07f, 2.952479720e-07f, 2.957210169e-07f, 2.961934563e-07f, 2.966652895e-07f, 2.971365157e-07f,
+2.976071343e-07f, 2.980771445e-07f, 2.985465457e-07f, 2.990153372e-07f, 2.994835182e-07f, 2.999510881e-07f, 3.004180461e-07f, 3.008843916e-07f, 3.013501238e-07f, 3.018152422e-07f,
+3.022797459e-07f, 3.027436344e-07f, 3.032069068e-07f, 3.036695626e-07f, 3.041316010e-07f, 3.045930214e-07f, 3.050538230e-07f, 3.055140053e-07f, 3.059735674e-07f, 3.064325088e-07f,
+3.068908287e-07f, 3.073485264e-07f, 3.078056014e-07f, 3.082620529e-07f, 3.087178802e-07f, 3.091730827e-07f, 3.096276596e-07f, 3.100816104e-07f, 3.105349344e-07f, 3.109876308e-07f,
+3.114396991e-07f, 3.118911385e-07f, 3.123419485e-07f, 3.127921282e-07f, 3.132416771e-07f, 3.136905945e-07f, 3.141388798e-07f, 3.145865323e-07f, 3.150335512e-07f, 3.154799361e-07f,
+3.159256862e-07f, 3.163708008e-07f, 3.168152794e-07f, 3.172591212e-07f, 3.177023256e-07f, 3.181448920e-07f, 3.185868197e-07f, 3.190281081e-07f, 3.194687565e-07f, 3.199087643e-07f,
+3.203481309e-07f, 3.207868555e-07f, 3.212249376e-07f, 3.216623766e-07f, 3.220991717e-07f, 3.225353223e-07f, 3.229708279e-07f, 3.234056878e-07f, 3.238399013e-07f, 3.242734678e-07f,
+3.247063867e-07f, 3.251386574e-07f, 3.255702792e-07f, 3.260012515e-07f, 3.264315737e-07f, 3.268612451e-07f, 3.272902652e-07f, 3.277186333e-07f, 3.281463488e-07f, 3.285734110e-07f,
+3.289998195e-07f, 3.294255734e-07f, 3.298506723e-07f, 3.302751155e-07f, 3.306989025e-07f, 3.311220325e-07f, 3.315445050e-07f, 3.319663193e-07f, 3.323874749e-07f, 3.328079712e-07f,
+3.332278076e-07f, 3.336469834e-07f, 3.340654980e-07f, 3.344833509e-07f, 3.349005415e-07f, 3.353170691e-07f, 3.357329331e-07f, 3.361481331e-07f, 3.365626682e-07f, 3.369765381e-07f,
+3.373897420e-07f, 3.378022795e-07f, 3.382141498e-07f, 3.386253524e-07f, 3.390358868e-07f, 3.394457523e-07f, 3.398549483e-07f, 3.402634744e-07f, 3.406713298e-07f, 3.410785140e-07f,
+3.414850265e-07f, 3.418908666e-07f, 3.422960338e-07f, 3.427005275e-07f, 3.431043471e-07f, 3.435074921e-07f, 3.439099619e-07f, 3.443117559e-07f, 3.447128735e-07f, 3.451133142e-07f,
+3.455130774e-07f, 3.459121626e-07f, 3.463105691e-07f, 3.467082965e-07f, 3.471053441e-07f, 3.475017114e-07f, 3.478973979e-07f, 3.482924029e-07f, 3.486867260e-07f, 3.490803666e-07f,
+3.494733241e-07f, 3.498655979e-07f, 3.502571876e-07f, 3.506480925e-07f, 3.510383121e-07f, 3.514278460e-07f, 3.518166934e-07f, 3.522048540e-07f, 3.525923270e-07f, 3.529791121e-07f,
+3.533652086e-07f, 3.537506161e-07f, 3.541353339e-07f, 3.545193616e-07f, 3.549026986e-07f, 3.552853444e-07f, 3.556672984e-07f, 3.560485602e-07f, 3.564291291e-07f, 3.568090047e-07f,
+3.571881864e-07f, 3.575666737e-07f, 3.579444661e-07f, 3.583215630e-07f, 3.586979640e-07f, 3.590736685e-07f, 3.594486760e-07f, 3.598229859e-07f, 3.601965979e-07f, 3.605695112e-07f,
+3.609417255e-07f, 3.613132402e-07f, 3.616840548e-07f, 3.620541689e-07f, 3.624235818e-07f, 3.627922930e-07f, 3.631603022e-07f, 3.635276087e-07f, 3.638942121e-07f, 3.642601118e-07f,
+3.646253074e-07f, 3.649897984e-07f, 3.653535843e-07f, 3.657166645e-07f, 3.660790385e-07f, 3.664407060e-07f, 3.668016663e-07f, 3.671619191e-07f, 3.675214637e-07f, 3.678802998e-07f,
+3.682384267e-07f, 3.685958442e-07f, 3.689525515e-07f, 3.693085484e-07f, 3.696638342e-07f, 3.700184086e-07f, 3.703722709e-07f, 3.707254209e-07f, 3.710778579e-07f, 3.714295815e-07f,
+3.717805912e-07f, 3.721308866e-07f, 3.724804672e-07f, 3.728293325e-07f, 3.731774820e-07f, 3.735249153e-07f, 3.738716319e-07f, 3.742176313e-07f, 3.745629131e-07f, 3.749074769e-07f,
+3.752513221e-07f, 3.755944483e-07f, 3.759368550e-07f, 3.762785418e-07f, 3.766195083e-07f, 3.769597539e-07f, 3.772992783e-07f, 3.776380809e-07f, 3.779761613e-07f, 3.783135191e-07f,
+3.786501538e-07f, 3.789860650e-07f, 3.793212523e-07f, 3.796557151e-07f, 3.799894531e-07f, 3.803224658e-07f, 3.806547527e-07f, 3.809863135e-07f, 3.813171477e-07f, 3.816472548e-07f,
+3.819766344e-07f, 3.823052862e-07f, 3.826332096e-07f, 3.829604042e-07f, 3.832868697e-07f, 3.836126055e-07f, 3.839376113e-07f, 3.842618865e-07f, 3.845854309e-07f, 3.849082440e-07f,
+3.852303253e-07f, 3.855516745e-07f, 3.858722911e-07f, 3.861921747e-07f, 3.865113249e-07f, 3.868297413e-07f, 3.871474235e-07f, 3.874643710e-07f, 3.877805834e-07f, 3.880960604e-07f,
+3.884108015e-07f, 3.887248064e-07f, 3.890380745e-07f, 3.893506056e-07f, 3.896623993e-07f, 3.899734550e-07f, 3.902837724e-07f, 3.905933512e-07f, 3.909021909e-07f, 3.912102912e-07f,
+3.915176515e-07f, 3.918242717e-07f, 3.921301512e-07f, 3.924352896e-07f, 3.927396867e-07f, 3.930433419e-07f, 3.933462549e-07f, 3.936484254e-07f, 3.939498529e-07f, 3.942505371e-07f,
+3.945504776e-07f, 3.948496740e-07f, 3.951481259e-07f, 3.954458329e-07f, 3.957427948e-07f, 3.960390110e-07f, 3.963344813e-07f, 3.966292053e-07f, 3.969231826e-07f, 3.972164128e-07f,
+3.975088955e-07f, 3.978006305e-07f, 3.980916173e-07f, 3.983818556e-07f, 3.986713450e-07f, 3.989600852e-07f, 3.992480757e-07f, 3.995353163e-07f, 3.998218066e-07f, 4.001075463e-07f,
+4.003925349e-07f, 4.006767722e-07f, 4.009602577e-07f, 4.012429912e-07f, 4.015249723e-07f, 4.018062007e-07f, 4.020866759e-07f, 4.023663977e-07f, 4.026453657e-07f, 4.029235796e-07f,
+4.032010391e-07f, 4.034777438e-07f, 4.037536933e-07f, 4.040288874e-07f, 4.043033256e-07f, 4.045770078e-07f, 4.048499335e-07f, 4.051221024e-07f, 4.053935142e-07f, 4.056641686e-07f,
+4.059340652e-07f, 4.062032037e-07f, 4.064715838e-07f, 4.067392052e-07f, 4.070060675e-07f, 4.072721705e-07f, 4.075375138e-07f, 4.078020972e-07f, 4.080659202e-07f, 4.083289826e-07f,
+4.085912840e-07f, 4.088528243e-07f, 4.091136030e-07f, 4.093736198e-07f, 4.096328745e-07f, 4.098913667e-07f, 4.101490962e-07f, 4.104060626e-07f, 4.106622657e-07f, 4.109177051e-07f,
+4.111723805e-07f, 4.114262917e-07f, 4.116794383e-07f, 4.119318202e-07f, 4.121834368e-07f, 4.124342881e-07f, 4.126843737e-07f, 4.129336933e-07f, 4.131822466e-07f, 4.134300333e-07f,
+4.136770532e-07f, 4.139233060e-07f, 4.141687914e-07f, 4.144135090e-07f, 4.146574588e-07f, 4.149006403e-07f, 4.151430533e-07f, 4.153846975e-07f, 4.156255726e-07f, 4.158656785e-07f,
+4.161050147e-07f, 4.163435811e-07f, 4.165813773e-07f, 4.168184032e-07f, 4.170546584e-07f, 4.172901427e-07f, 4.175248559e-07f, 4.177587975e-07f, 4.179919676e-07f, 4.182243656e-07f,
+4.184559915e-07f, 4.186868449e-07f, 4.189169256e-07f, 4.191462333e-07f, 4.193747678e-07f, 4.196025289e-07f, 4.198295163e-07f, 4.200557297e-07f, 4.202811690e-07f, 4.205058338e-07f,
+4.207297239e-07f, 4.209528392e-07f, 4.211751793e-07f, 4.213967440e-07f, 4.216175331e-07f, 4.218375463e-07f, 4.220567834e-07f, 4.222752442e-07f, 4.224929285e-07f, 4.227098360e-07f,
+4.229259665e-07f, 4.231413198e-07f, 4.233558956e-07f, 4.235696938e-07f, 4.237827140e-07f, 4.239949562e-07f, 4.242064200e-07f, 4.244171052e-07f, 4.246270117e-07f, 4.248361393e-07f,
+4.250444876e-07f, 4.252520565e-07f, 4.254588458e-07f, 4.256648553e-07f, 4.258700848e-07f, 4.260745340e-07f, 4.262782028e-07f, 4.264810909e-07f, 4.266831982e-07f, 4.268845245e-07f,
+4.270850695e-07f, 4.272848331e-07f, 4.274838150e-07f, 4.276820151e-07f, 4.278794332e-07f, 4.280760691e-07f, 4.282719226e-07f, 4.284669934e-07f, 4.286612815e-07f, 4.288547867e-07f,
+4.290475086e-07f, 4.292394473e-07f, 4.294306024e-07f, 4.296209738e-07f, 4.298105614e-07f, 4.299993649e-07f, 4.301873841e-07f, 4.303746190e-07f, 4.305610693e-07f, 4.307467348e-07f,
+4.309316154e-07f, 4.311157109e-07f, 4.312990212e-07f, 4.314815460e-07f, 4.316632852e-07f, 4.318442387e-07f, 4.320244063e-07f, 4.322037878e-07f, 4.323823830e-07f, 4.325601919e-07f,
+4.327372142e-07f, 4.329134498e-07f, 4.330888985e-07f, 4.332635602e-07f, 4.334374348e-07f, 4.336105220e-07f, 4.337828218e-07f, 4.339543340e-07f, 4.341250584e-07f, 4.342949950e-07f,
+4.344641434e-07f, 4.346325037e-07f, 4.348000757e-07f, 4.349668592e-07f, 4.351328542e-07f, 4.352980603e-07f, 4.354624777e-07f, 4.356261060e-07f, 4.357889452e-07f, 4.359509951e-07f,
+4.361122556e-07f, 4.362727266e-07f, 4.364324080e-07f, 4.365912996e-07f, 4.367494013e-07f, 4.369067131e-07f, 4.370632346e-07f, 4.372189659e-07f, 4.373739069e-07f, 4.375280574e-07f,
+4.376814172e-07f, 4.378339864e-07f, 4.379857647e-07f, 4.381367521e-07f, 4.382869485e-07f, 4.384363537e-07f, 4.385849676e-07f, 4.387327902e-07f, 4.388798213e-07f, 4.390260609e-07f,
+4.391715088e-07f, 4.393161649e-07f, 4.394600291e-07f, 4.396031014e-07f, 4.397453817e-07f, 4.398868697e-07f, 4.400275656e-07f, 4.401674691e-07f, 4.403065802e-07f, 4.404448987e-07f,
+4.405824247e-07f, 4.407191580e-07f, 4.408550986e-07f, 4.409902462e-07f, 4.411246010e-07f, 4.412581627e-07f, 4.413909314e-07f, 4.415229069e-07f, 4.416540891e-07f, 4.417844781e-07f,
+4.419140737e-07f, 4.420428758e-07f, 4.421708843e-07f, 4.422980993e-07f, 4.424245206e-07f, 4.425501482e-07f, 4.426749820e-07f, 4.427990220e-07f, 4.429222680e-07f, 4.430447200e-07f,
+4.431663781e-07f, 4.432872420e-07f, 4.434073118e-07f, 4.435265873e-07f, 4.436450686e-07f, 4.437627557e-07f, 4.438796483e-07f, 4.439957466e-07f, 4.441110504e-07f, 4.442255597e-07f,
+4.443392744e-07f, 4.444521946e-07f, 4.445643201e-07f, 4.446756510e-07f, 4.447861872e-07f, 4.448959286e-07f, 4.450048752e-07f, 4.451130270e-07f, 4.452203840e-07f, 4.453269461e-07f,
+4.454327132e-07f, 4.455376854e-07f, 4.456418627e-07f, 4.457452449e-07f, 4.458478322e-07f, 4.459496244e-07f, 4.460506215e-07f, 4.461508235e-07f, 4.462502304e-07f, 4.463488422e-07f,
+4.464466589e-07f, 4.465436803e-07f, 4.466399067e-07f, 4.467353378e-07f, 4.468299737e-07f, 4.469238144e-07f, 4.470168599e-07f, 4.471091102e-07f, 4.472005653e-07f, 4.472912251e-07f,
+4.473810897e-07f, 4.474701590e-07f, 4.475584331e-07f, 4.476459120e-07f, 4.477325956e-07f, 4.478184840e-07f, 4.479035772e-07f, 4.479878752e-07f, 4.480713779e-07f, 4.481540855e-07f,
+4.482359978e-07f, 4.483171150e-07f, 4.483974371e-07f, 4.484769639e-07f, 4.485556957e-07f, 4.486336323e-07f, 4.487107739e-07f, 4.487871203e-07f, 4.488626718e-07f, 4.489374281e-07f,
+4.490113895e-07f, 4.490845559e-07f, 4.491569274e-07f, 4.492285039e-07f, 4.492992856e-07f, 4.493692724e-07f, 4.494384643e-07f, 4.495068615e-07f, 4.495744639e-07f, 4.496412716e-07f,
+4.497072847e-07f, 4.497725030e-07f, 4.498369268e-07f, 4.499005561e-07f, 4.499633908e-07f, 4.500254310e-07f, 4.500866769e-07f, 4.501471283e-07f, 4.502067855e-07f, 4.502656484e-07f,
+4.503237170e-07f, 4.503809915e-07f, 4.504374719e-07f, 4.504931582e-07f, 4.505480506e-07f, 4.506021490e-07f, 4.506554535e-07f, 4.507079642e-07f, 4.507596812e-07f, 4.508106045e-07f,
+4.508607342e-07f, 4.509100703e-07f, 4.509586129e-07f, 4.510063621e-07f, 4.510533180e-07f, 4.510994806e-07f, 4.511448501e-07f, 4.511894264e-07f, 4.512332096e-07f, 4.512761999e-07f,
+4.513183974e-07f, 4.513598020e-07f, 4.514004139e-07f, 4.514402332e-07f, 4.514792599e-07f, 4.515174942e-07f, 4.515549361e-07f, 4.515915857e-07f, 4.516274431e-07f, 4.516625084e-07f,
+4.516967817e-07f, 4.517302631e-07f, 4.517629526e-07f, 4.517948505e-07f, 4.518259567e-07f, 4.518562714e-07f, 4.518857947e-07f, 4.519145267e-07f, 4.519424675e-07f, 4.519696171e-07f,
+4.519959758e-07f, 4.520215435e-07f, 4.520463205e-07f, 4.520703069e-07f, 4.520935026e-07f, 4.521159079e-07f, 4.521375229e-07f, 4.521583477e-07f, 4.521783824e-07f, 4.521976271e-07f,
+4.522160820e-07f, 4.522337471e-07f, 4.522506226e-07f, 4.522667087e-07f, 4.522820054e-07f, 4.522965128e-07f, 4.523102312e-07f, 4.523231605e-07f, 4.523353011e-07f, 4.523466529e-07f,
+4.523572162e-07f, 4.523669910e-07f, 4.523759775e-07f, 4.523841759e-07f, 4.523915863e-07f, 4.523982087e-07f, 4.524040434e-07f, 4.524090906e-07f, 4.524133503e-07f, 4.524168226e-07f,
+4.524195078e-07f, 4.524214061e-07f, 4.524225174e-07f, 4.524228421e-07f, 4.524223802e-07f, 4.524211319e-07f, 4.524190973e-07f, 4.524162767e-07f, 4.524126701e-07f, 4.524082778e-07f,
+4.524030999e-07f, 4.523971365e-07f, 4.523903879e-07f, 4.523828541e-07f, 4.523745354e-07f, 4.523654319e-07f, 4.523555438e-07f, 4.523448713e-07f, 4.523334144e-07f, 4.523211735e-07f,
+4.523081487e-07f, 4.522943401e-07f, 4.522797480e-07f, 4.522643724e-07f, 4.522482137e-07f, 4.522312719e-07f, 4.522135473e-07f, 4.521950400e-07f, 4.521757502e-07f, 4.521556782e-07f,
+4.521348240e-07f, 4.521131880e-07f, 4.520907702e-07f, 4.520675708e-07f, 4.520435902e-07f, 4.520188283e-07f, 4.519932856e-07f, 4.519669621e-07f, 4.519398580e-07f, 4.519119735e-07f,
+4.518833090e-07f, 4.518538644e-07f, 4.518236402e-07f, 4.517926363e-07f, 4.517608532e-07f, 4.517282909e-07f, 4.516949497e-07f, 4.516608298e-07f, 4.516259313e-07f, 4.515902546e-07f,
+4.515537999e-07f, 4.515165672e-07f, 4.514785570e-07f, 4.514397693e-07f, 4.514002044e-07f, 4.513598625e-07f, 4.513187439e-07f, 4.512768488e-07f, 4.512341773e-07f, 4.511907297e-07f,
+4.511465063e-07f, 4.511015073e-07f, 4.510557329e-07f, 4.510091832e-07f, 4.509618587e-07f, 4.509137595e-07f, 4.508648858e-07f, 4.508152378e-07f, 4.507648159e-07f, 4.507136202e-07f,
+4.506616510e-07f, 4.506089086e-07f, 4.505553931e-07f, 4.505011048e-07f, 4.504460440e-07f, 4.503902109e-07f, 4.503336058e-07f, 4.502762289e-07f, 4.502180804e-07f, 4.501591606e-07f,
+4.500994698e-07f, 4.500390083e-07f, 4.499777762e-07f, 4.499157738e-07f, 4.498530014e-07f, 4.497894593e-07f, 4.497251476e-07f, 4.496600668e-07f, 4.495942170e-07f, 4.495275985e-07f,
+4.494602115e-07f, 4.493920564e-07f, 4.493231334e-07f, 4.492534428e-07f, 4.491829848e-07f, 4.491117598e-07f, 4.490397679e-07f, 4.489670095e-07f, 4.488934849e-07f, 4.488191942e-07f,
+4.487441379e-07f, 4.486683162e-07f, 4.485917293e-07f, 4.485143776e-07f, 4.484362613e-07f, 4.483573807e-07f, 4.482777361e-07f, 4.481973278e-07f, 4.481161561e-07f, 4.480342213e-07f,
+4.479515236e-07f, 4.478680634e-07f, 4.477838410e-07f, 4.476988566e-07f, 4.476131105e-07f, 4.475266031e-07f, 4.474393346e-07f, 4.473513054e-07f, 4.472625157e-07f, 4.471729658e-07f,
+4.470826561e-07f, 4.469915869e-07f, 4.468997585e-07f, 4.468071711e-07f, 4.467138251e-07f, 4.466197208e-07f, 4.465248585e-07f, 4.464292385e-07f, 4.463328611e-07f, 4.462357268e-07f,
+4.461378356e-07f, 4.460391881e-07f, 4.459397845e-07f, 4.458396251e-07f, 4.457387103e-07f, 4.456370403e-07f, 4.455346155e-07f, 4.454314363e-07f, 4.453275029e-07f, 4.452228157e-07f,
+4.451173750e-07f, 4.450111811e-07f, 4.449042345e-07f, 4.447965353e-07f, 4.446880839e-07f, 4.445788808e-07f, 4.444689262e-07f, 4.443582204e-07f, 4.442467638e-07f, 4.441345568e-07f,
+4.440215996e-07f, 4.439078926e-07f, 4.437934363e-07f, 4.436782308e-07f, 4.435622766e-07f, 4.434455740e-07f, 4.433281233e-07f, 4.432099250e-07f, 4.430909793e-07f, 4.429712866e-07f,
+4.428508474e-07f, 4.427296618e-07f, 4.426077303e-07f, 4.424850533e-07f, 4.423616310e-07f, 4.422374639e-07f, 4.421125524e-07f, 4.419868967e-07f, 4.418604973e-07f, 4.417333544e-07f,
+4.416054686e-07f, 4.414768401e-07f, 4.413474694e-07f, 4.412173567e-07f, 4.410865025e-07f, 4.409549072e-07f, 4.408225710e-07f, 4.406894944e-07f, 4.405556778e-07f, 4.404211216e-07f,
+4.402858260e-07f, 4.401497916e-07f, 4.400130186e-07f, 4.398755075e-07f, 4.397372587e-07f, 4.395982725e-07f, 4.394585493e-07f, 4.393180895e-07f, 4.391768935e-07f, 4.390349617e-07f,
+4.388922945e-07f, 4.387488922e-07f, 4.386047553e-07f, 4.384598842e-07f, 4.383142792e-07f, 4.381679408e-07f, 4.380208693e-07f, 4.378730652e-07f, 4.377245288e-07f, 4.375752606e-07f,
+4.374252609e-07f, 4.372745302e-07f, 4.371230689e-07f, 4.369708774e-07f, 4.368179560e-07f, 4.366643052e-07f, 4.365099254e-07f, 4.363548171e-07f, 4.361989805e-07f, 4.360424162e-07f,
+4.358851246e-07f, 4.357271060e-07f, 4.355683609e-07f, 4.354088898e-07f, 4.352486929e-07f, 4.350877708e-07f, 4.349261239e-07f, 4.347637526e-07f, 4.346006573e-07f, 4.344368384e-07f,
+4.342722964e-07f, 4.341070317e-07f, 4.339410448e-07f, 4.337743360e-07f, 4.336069058e-07f, 4.334387546e-07f, 4.332698829e-07f, 4.331002911e-07f, 4.329299796e-07f, 4.327589489e-07f,
+4.325871994e-07f, 4.324147315e-07f, 4.322415457e-07f, 4.320676425e-07f, 4.318930222e-07f, 4.317176854e-07f, 4.315416324e-07f, 4.313648638e-07f, 4.311873799e-07f, 4.310091812e-07f,
+4.308302681e-07f, 4.306506412e-07f, 4.304703008e-07f, 4.302892475e-07f, 4.301074817e-07f, 4.299250037e-07f, 4.297418142e-07f, 4.295579135e-07f, 4.293733021e-07f, 4.291879805e-07f,
+4.290019491e-07f, 4.288152083e-07f, 4.286277588e-07f, 4.284396009e-07f, 4.282507350e-07f, 4.280611617e-07f, 4.278708815e-07f, 4.276798947e-07f, 4.274882019e-07f, 4.272958035e-07f,
+4.271027001e-07f, 4.269088920e-07f, 4.267143798e-07f, 4.265191639e-07f, 4.263232449e-07f, 4.261266231e-07f, 4.259292992e-07f, 4.257312734e-07f, 4.255325464e-07f, 4.253331187e-07f,
+4.251329906e-07f, 4.249321628e-07f, 4.247306356e-07f, 4.245284096e-07f, 4.243254852e-07f, 4.241218630e-07f, 4.239175434e-07f, 4.237125270e-07f, 4.235068142e-07f, 4.233004055e-07f,
+4.230933014e-07f, 4.228855025e-07f, 4.226770091e-07f, 4.224678219e-07f, 4.222579413e-07f, 4.220473678e-07f, 4.218361019e-07f, 4.216241441e-07f, 4.214114949e-07f, 4.211981549e-07f,
+4.209841245e-07f, 4.207694043e-07f, 4.205539947e-07f, 4.203378963e-07f, 4.201211096e-07f, 4.199036350e-07f, 4.196854732e-07f, 4.194666245e-07f, 4.192470896e-07f, 4.190268690e-07f,
+4.188059631e-07f, 4.185843725e-07f, 4.183620978e-07f, 4.181391393e-07f, 4.179154977e-07f, 4.176911735e-07f, 4.174661672e-07f, 4.172404793e-07f, 4.170141103e-07f, 4.167870609e-07f,
+4.165593314e-07f, 4.163309225e-07f, 4.161018346e-07f, 4.158720684e-07f, 4.156416243e-07f, 4.154105029e-07f, 4.151787046e-07f, 4.149462301e-07f, 4.147130799e-07f, 4.144792545e-07f,
+4.142447545e-07f, 4.140095804e-07f, 4.137737327e-07f, 4.135372120e-07f, 4.133000188e-07f, 4.130621537e-07f, 4.128236172e-07f, 4.125844099e-07f, 4.123445323e-07f, 4.121039850e-07f,
+4.118627684e-07f, 4.116208833e-07f, 4.113783300e-07f, 4.111351093e-07f, 4.108912215e-07f, 4.106466674e-07f, 4.104014473e-07f, 4.101555620e-07f, 4.099090119e-07f, 4.096617977e-07f,
+4.094139198e-07f, 4.091653789e-07f, 4.089161754e-07f, 4.086663101e-07f, 4.084157833e-07f, 4.081645958e-07f, 4.079127480e-07f, 4.076602405e-07f, 4.074070740e-07f, 4.071532489e-07f,
+4.068987659e-07f, 4.066436255e-07f, 4.063878283e-07f, 4.061313748e-07f, 4.058742657e-07f, 4.056165015e-07f, 4.053580828e-07f, 4.050990101e-07f, 4.048392841e-07f, 4.045789054e-07f,
+4.043178744e-07f, 4.040561919e-07f, 4.037938583e-07f, 4.035308743e-07f, 4.032672405e-07f, 4.030029573e-07f, 4.027380255e-07f, 4.024724457e-07f, 4.022062183e-07f, 4.019393440e-07f,
+4.016718234e-07f, 4.014036571e-07f, 4.011348457e-07f, 4.008653897e-07f, 4.005952898e-07f, 4.003245466e-07f, 4.000531606e-07f, 3.997811325e-07f, 3.995084628e-07f, 3.992351522e-07f,
+3.989612012e-07f, 3.986866106e-07f, 3.984113807e-07f, 3.981355124e-07f, 3.978590061e-07f, 3.975818625e-07f, 3.973040823e-07f, 3.970256659e-07f, 3.967466140e-07f, 3.964669272e-07f,
+3.961866062e-07f, 3.959056516e-07f, 3.956240639e-07f, 3.953418437e-07f, 3.950589918e-07f, 3.947755086e-07f, 3.944913949e-07f, 3.942066513e-07f, 3.939212783e-07f, 3.936352766e-07f,
+3.933486468e-07f, 3.930613895e-07f, 3.927735054e-07f, 3.924849950e-07f, 3.921958591e-07f, 3.919060982e-07f, 3.916157129e-07f, 3.913247040e-07f, 3.910330719e-07f, 3.907408174e-07f,
+3.904479411e-07f, 3.901544436e-07f, 3.898603255e-07f, 3.895655875e-07f, 3.892702302e-07f, 3.889742543e-07f, 3.886776603e-07f, 3.883804490e-07f, 3.880826209e-07f, 3.877841768e-07f,
+3.874851172e-07f, 3.871854427e-07f, 3.868851541e-07f, 3.865842520e-07f, 3.862827370e-07f, 3.859806097e-07f, 3.856778709e-07f, 3.853745211e-07f, 3.850705610e-07f, 3.847659912e-07f,
+3.844608125e-07f, 3.841550254e-07f, 3.838486307e-07f, 3.835416289e-07f, 3.832340207e-07f, 3.829258067e-07f, 3.826169878e-07f, 3.823075643e-07f, 3.819975372e-07f, 3.816869069e-07f,
+3.813756742e-07f, 3.810638397e-07f, 3.807514041e-07f, 3.804383680e-07f, 3.801247321e-07f, 3.798104971e-07f, 3.794956637e-07f, 3.791802324e-07f, 3.788642040e-07f, 3.785475792e-07f,
+3.782303585e-07f, 3.779125427e-07f, 3.775941325e-07f, 3.772751285e-07f, 3.769555314e-07f, 3.766353418e-07f, 3.763145605e-07f, 3.759931881e-07f, 3.756712252e-07f, 3.753486727e-07f,
+3.750255311e-07f, 3.747018011e-07f, 3.743774834e-07f, 3.740525786e-07f, 3.737270876e-07f, 3.734010109e-07f, 3.730743492e-07f, 3.727471032e-07f, 3.724192737e-07f, 3.720908612e-07f,
+3.717618665e-07f, 3.714322902e-07f, 3.711021331e-07f, 3.707713958e-07f, 3.704400790e-07f, 3.701081835e-07f, 3.697757099e-07f, 3.694426588e-07f, 3.691090311e-07f, 3.687748273e-07f,
+3.684400483e-07f, 3.681046946e-07f, 3.677687670e-07f, 3.674322662e-07f, 3.670951928e-07f, 3.667575476e-07f, 3.664193313e-07f, 3.660805446e-07f, 3.657411881e-07f, 3.654012627e-07f,
+3.650607689e-07f, 3.647197075e-07f, 3.643780792e-07f, 3.640358847e-07f, 3.636931247e-07f, 3.633497999e-07f, 3.630059111e-07f, 3.626614589e-07f, 3.623164441e-07f, 3.619708673e-07f,
+3.616247293e-07f, 3.612780307e-07f, 3.609307724e-07f, 3.605829550e-07f, 3.602345792e-07f, 3.598856458e-07f, 3.595361554e-07f, 3.591861088e-07f, 3.588355067e-07f, 3.584843499e-07f,
+3.581326390e-07f, 3.577803747e-07f, 3.574275578e-07f, 3.570741891e-07f, 3.567202692e-07f, 3.563657988e-07f, 3.560107788e-07f, 3.556552097e-07f, 3.552990924e-07f, 3.549424276e-07f,
+3.545852159e-07f, 3.542274582e-07f, 3.538691551e-07f, 3.535103074e-07f, 3.531509159e-07f, 3.527909812e-07f, 3.524305041e-07f, 3.520694853e-07f, 3.517079256e-07f, 3.513458256e-07f,
+3.509831862e-07f, 3.506200081e-07f, 3.502562920e-07f, 3.498920386e-07f, 3.495272487e-07f, 3.491619231e-07f, 3.487960624e-07f, 3.484296674e-07f, 3.480627389e-07f, 3.476952776e-07f,
+3.473272842e-07f, 3.469587595e-07f, 3.465897043e-07f, 3.462201192e-07f, 3.458500051e-07f, 3.454793627e-07f, 3.451081927e-07f, 3.447364959e-07f, 3.443642730e-07f, 3.439915248e-07f,
+3.436182520e-07f, 3.432444554e-07f, 3.428701358e-07f, 3.424952939e-07f, 3.421199304e-07f, 3.417440462e-07f, 3.413676419e-07f, 3.409907183e-07f, 3.406132763e-07f, 3.402353164e-07f,
+3.398568396e-07f, 3.394778466e-07f, 3.390983381e-07f, 3.387183148e-07f, 3.383377777e-07f, 3.379567273e-07f, 3.375751646e-07f, 3.371930902e-07f, 3.368105049e-07f, 3.364274095e-07f,
+3.360438047e-07f, 3.356596914e-07f, 3.352750702e-07f, 3.348899421e-07f, 3.345043076e-07f, 3.341181677e-07f, 3.337315230e-07f, 3.333443743e-07f, 3.329567225e-07f, 3.325685683e-07f,
+3.321799125e-07f, 3.317907558e-07f, 3.314010990e-07f, 3.310109429e-07f, 3.306202883e-07f, 3.302291360e-07f, 3.298374867e-07f, 3.294453412e-07f, 3.290527003e-07f, 3.286595648e-07f,
+3.282659354e-07f, 3.278718130e-07f, 3.274771983e-07f, 3.270820921e-07f, 3.266864952e-07f, 3.262904084e-07f, 3.258938325e-07f, 3.254967682e-07f, 3.250992164e-07f, 3.247011778e-07f,
+3.243026532e-07f, 3.239036435e-07f, 3.235041493e-07f, 3.231041715e-07f, 3.227037110e-07f, 3.223027684e-07f, 3.219013445e-07f, 3.214994403e-07f, 3.210970564e-07f, 3.206941936e-07f,
+3.202908528e-07f, 3.198870348e-07f, 3.194827403e-07f, 3.190779701e-07f, 3.186727251e-07f, 3.182670060e-07f, 3.178608137e-07f, 3.174541489e-07f, 3.170470124e-07f, 3.166394052e-07f,
+3.162313278e-07f, 3.158227812e-07f, 3.154137662e-07f, 3.150042835e-07f, 3.145943340e-07f, 3.141839185e-07f, 3.137730377e-07f, 3.133616926e-07f, 3.129498838e-07f, 3.125376123e-07f,
+3.121248787e-07f, 3.117116840e-07f, 3.112980289e-07f, 3.108839143e-07f, 3.104693409e-07f, 3.100543096e-07f, 3.096388212e-07f, 3.092228765e-07f, 3.088064763e-07f, 3.083896214e-07f,
+3.079723126e-07f, 3.075545509e-07f, 3.071363369e-07f, 3.067176715e-07f, 3.062985555e-07f, 3.058789897e-07f, 3.054589750e-07f, 3.050385121e-07f, 3.046176020e-07f, 3.041962454e-07f,
+3.037744431e-07f, 3.033521959e-07f, 3.029295048e-07f, 3.025063704e-07f, 3.020827937e-07f, 3.016587754e-07f, 3.012343165e-07f, 3.008094176e-07f, 3.003840796e-07f, 2.999583035e-07f,
+2.995320899e-07f, 2.991054397e-07f, 2.986783538e-07f, 2.982508329e-07f, 2.978228780e-07f, 2.973944898e-07f, 2.969656692e-07f, 2.965364169e-07f, 2.961067339e-07f, 2.956766210e-07f,
+2.952460790e-07f, 2.948151087e-07f, 2.943837110e-07f, 2.939518867e-07f, 2.935196367e-07f, 2.930869617e-07f, 2.926538626e-07f, 2.922203403e-07f, 2.917863957e-07f, 2.913520294e-07f,
+2.909172424e-07f, 2.904820355e-07f, 2.900464096e-07f, 2.896103655e-07f, 2.891739040e-07f, 2.887370261e-07f, 2.882997324e-07f, 2.878620239e-07f, 2.874239014e-07f, 2.869853658e-07f,
+2.865464179e-07f, 2.861070585e-07f, 2.856672886e-07f, 2.852271089e-07f, 2.847865202e-07f, 2.843455235e-07f, 2.839041196e-07f, 2.834623094e-07f, 2.830200936e-07f, 2.825774732e-07f,
+2.821344489e-07f, 2.816910217e-07f, 2.812471924e-07f, 2.808029618e-07f, 2.803583309e-07f, 2.799133003e-07f, 2.794678711e-07f, 2.790220441e-07f, 2.785758200e-07f, 2.781291999e-07f,
+2.776821844e-07f, 2.772347746e-07f, 2.767869712e-07f, 2.763387751e-07f, 2.758901871e-07f, 2.754412082e-07f, 2.749918391e-07f, 2.745420808e-07f, 2.740919340e-07f, 2.736413997e-07f,
+2.731904788e-07f, 2.727391720e-07f, 2.722874802e-07f, 2.718354044e-07f, 2.713829453e-07f, 2.709301039e-07f, 2.704768810e-07f, 2.700232774e-07f, 2.695692940e-07f, 2.691149318e-07f,
+2.686601915e-07f, 2.682050740e-07f, 2.677495802e-07f, 2.672937109e-07f, 2.668374671e-07f, 2.663808496e-07f, 2.659238593e-07f, 2.654664970e-07f, 2.650087636e-07f, 2.645506600e-07f,
+2.640921870e-07f, 2.636333456e-07f, 2.631741365e-07f, 2.627145607e-07f, 2.622546190e-07f, 2.617943124e-07f, 2.613336416e-07f, 2.608726076e-07f, 2.604112112e-07f, 2.599494534e-07f,
+2.594873349e-07f, 2.590248567e-07f, 2.585620196e-07f, 2.580988245e-07f, 2.576352723e-07f, 2.571713639e-07f, 2.567071002e-07f, 2.562424819e-07f, 2.557775101e-07f, 2.553121856e-07f,
+2.548465092e-07f, 2.543804819e-07f, 2.539141045e-07f, 2.534473779e-07f, 2.529803030e-07f, 2.525128807e-07f, 2.520451118e-07f, 2.515769973e-07f, 2.511085380e-07f, 2.506397348e-07f,
+2.501705886e-07f, 2.497011003e-07f, 2.492312707e-07f, 2.487611008e-07f, 2.482905915e-07f, 2.478197435e-07f, 2.473485579e-07f, 2.468770354e-07f, 2.464051771e-07f, 2.459329837e-07f,
+2.454604562e-07f, 2.449875954e-07f, 2.445144023e-07f, 2.440408777e-07f, 2.435670225e-07f, 2.430928377e-07f, 2.426183240e-07f, 2.421434825e-07f, 2.416683139e-07f, 2.411928192e-07f,
+2.407169993e-07f, 2.402408550e-07f, 2.397643873e-07f, 2.392875971e-07f, 2.388104852e-07f, 2.383330525e-07f, 2.378553000e-07f, 2.373772285e-07f, 2.368988389e-07f, 2.364201322e-07f,
+2.359411092e-07f, 2.354617708e-07f, 2.349821179e-07f, 2.345021514e-07f, 2.340218722e-07f, 2.335412813e-07f, 2.330603794e-07f, 2.325791676e-07f, 2.320976467e-07f, 2.316158175e-07f,
+2.311336811e-07f, 2.306512383e-07f, 2.301684900e-07f, 2.296854371e-07f, 2.292020805e-07f, 2.287184212e-07f, 2.282344599e-07f, 2.277501977e-07f, 2.272656354e-07f, 2.267807739e-07f,
+2.262956141e-07f, 2.258101570e-07f, 2.253244034e-07f, 2.248383543e-07f, 2.243520105e-07f, 2.238653729e-07f, 2.233784425e-07f, 2.228912202e-07f, 2.224037069e-07f, 2.219159034e-07f,
+2.214278107e-07f, 2.209394297e-07f, 2.204507613e-07f, 2.199618065e-07f, 2.194725660e-07f, 2.189830409e-07f, 2.184932319e-07f, 2.180031402e-07f, 2.175127665e-07f, 2.170221117e-07f,
+2.165311769e-07f, 2.160399628e-07f, 2.155484704e-07f, 2.150567006e-07f, 2.145646543e-07f, 2.140723325e-07f, 2.135797360e-07f, 2.130868658e-07f, 2.125937227e-07f, 2.121003077e-07f,
+2.116066217e-07f, 2.111126656e-07f, 2.106184404e-07f, 2.101239468e-07f, 2.096291860e-07f, 2.091341586e-07f, 2.086388658e-07f, 2.081433084e-07f, 2.076474872e-07f, 2.071514033e-07f,
+2.066550576e-07f, 2.061584509e-07f, 2.056615842e-07f, 2.051644583e-07f, 2.046670743e-07f, 2.041694330e-07f, 2.036715354e-07f, 2.031733823e-07f, 2.026749747e-07f, 2.021763135e-07f,
+2.016773996e-07f, 2.011782339e-07f, 2.006788175e-07f, 2.001791511e-07f, 1.996792356e-07f, 1.991790722e-07f, 1.986786615e-07f, 1.981780046e-07f, 1.976771024e-07f, 1.971759558e-07f,
+1.966745657e-07f, 1.961729330e-07f, 1.956710587e-07f, 1.951689437e-07f, 1.946665890e-07f, 1.941639953e-07f, 1.936611637e-07f, 1.931580951e-07f, 1.926547904e-07f, 1.921512505e-07f,
+1.916474763e-07f, 1.911434688e-07f, 1.906392290e-07f, 1.901347576e-07f, 1.896300557e-07f, 1.891251242e-07f, 1.886199639e-07f, 1.881145759e-07f, 1.876089610e-07f, 1.871031202e-07f,
+1.865970544e-07f, 1.860907645e-07f, 1.855842515e-07f, 1.850775162e-07f, 1.845705597e-07f, 1.840633828e-07f, 1.835559864e-07f, 1.830483715e-07f, 1.825405391e-07f, 1.820324900e-07f,
+1.815242251e-07f, 1.810157454e-07f, 1.805070519e-07f, 1.799981454e-07f, 1.794890269e-07f, 1.789796974e-07f, 1.784701576e-07f, 1.779604086e-07f, 1.774504514e-07f, 1.769402867e-07f,
+1.764299156e-07f, 1.759193390e-07f, 1.754085578e-07f, 1.748975730e-07f, 1.743863854e-07f, 1.738749961e-07f, 1.733634059e-07f, 1.728516157e-07f, 1.723396266e-07f, 1.718274394e-07f,
+1.713150551e-07f, 1.708024745e-07f, 1.702896987e-07f, 1.697767286e-07f, 1.692635650e-07f, 1.687502090e-07f, 1.682366614e-07f, 1.677229233e-07f, 1.672089954e-07f, 1.666948788e-07f,
+1.661805744e-07f, 1.656660831e-07f, 1.651514059e-07f, 1.646365436e-07f, 1.641214973e-07f, 1.636062678e-07f, 1.630908561e-07f, 1.625752632e-07f, 1.620594899e-07f, 1.615435372e-07f,
+1.610274060e-07f, 1.605110973e-07f, 1.599946119e-07f, 1.594779509e-07f, 1.589611152e-07f, 1.584441057e-07f, 1.579269233e-07f, 1.574095690e-07f, 1.568920436e-07f, 1.563743483e-07f,
+1.558564838e-07f, 1.553384511e-07f, 1.548202511e-07f, 1.543018849e-07f, 1.537833532e-07f, 1.532646571e-07f, 1.527457975e-07f, 1.522267754e-07f, 1.517075916e-07f, 1.511882471e-07f,
+1.506687428e-07f, 1.501490797e-07f, 1.496292588e-07f, 1.491092808e-07f, 1.485891469e-07f, 1.480688579e-07f, 1.475484147e-07f, 1.470278183e-07f, 1.465070697e-07f, 1.459861697e-07f,
+1.454651194e-07f, 1.449439196e-07f, 1.444225712e-07f, 1.439010753e-07f, 1.433794328e-07f, 1.428576445e-07f, 1.423357115e-07f, 1.418136347e-07f, 1.412914150e-07f, 1.407690533e-07f,
+1.402465506e-07f, 1.397239078e-07f, 1.392011259e-07f, 1.386782058e-07f, 1.381551484e-07f, 1.376319547e-07f, 1.371086256e-07f, 1.365851621e-07f, 1.360615651e-07f, 1.355378355e-07f,
+1.350139743e-07f, 1.344899823e-07f, 1.339658607e-07f, 1.334416102e-07f, 1.329172318e-07f, 1.323927265e-07f, 1.318680953e-07f, 1.313433389e-07f, 1.308184584e-07f, 1.302934548e-07f,
+1.297683289e-07f, 1.292430817e-07f, 1.287177142e-07f, 1.281922272e-07f, 1.276666217e-07f, 1.271408987e-07f, 1.266150591e-07f, 1.260891039e-07f, 1.255630339e-07f, 1.250368501e-07f,
+1.245105534e-07f, 1.239841449e-07f, 1.234576253e-07f, 1.229309958e-07f, 1.224042571e-07f, 1.218774103e-07f, 1.213504563e-07f, 1.208233960e-07f, 1.202962304e-07f, 1.197689604e-07f,
+1.192415869e-07f, 1.187141109e-07f, 1.181865333e-07f, 1.176588551e-07f, 1.171310772e-07f, 1.166032005e-07f, 1.160752260e-07f, 1.155471546e-07f, 1.150189873e-07f, 1.144907250e-07f,
+1.139623686e-07f, 1.134339191e-07f, 1.129053774e-07f, 1.123767444e-07f, 1.118480212e-07f, 1.113192085e-07f, 1.107903075e-07f, 1.102613189e-07f, 1.097322438e-07f, 1.092030831e-07f,
+1.086738377e-07f, 1.081445085e-07f, 1.076150966e-07f, 1.070856028e-07f, 1.065560281e-07f, 1.060263734e-07f, 1.054966397e-07f, 1.049668278e-07f, 1.044369388e-07f, 1.039069736e-07f,
+1.033769330e-07f, 1.028468182e-07f, 1.023166299e-07f, 1.017863691e-07f, 1.012560368e-07f, 1.007256339e-07f, 1.001951613e-07f, 9.966462003e-08f, 9.913401096e-08f, 9.860333504e-08f,
+9.807259321e-08f, 9.754178641e-08f, 9.701091558e-08f, 9.647998165e-08f, 9.594898556e-08f, 9.541792825e-08f, 9.488681065e-08f, 9.435563371e-08f, 9.382439836e-08f, 9.329310553e-08f,
+9.276175617e-08f, 9.223035121e-08f, 9.169889158e-08f, 9.116737823e-08f, 9.063581209e-08f, 9.010419410e-08f, 8.957252520e-08f, 8.904080631e-08f, 8.850903838e-08f, 8.797722234e-08f,
+8.744535913e-08f, 8.691344968e-08f, 8.638149494e-08f, 8.584949583e-08f, 8.531745329e-08f, 8.478536826e-08f, 8.425324167e-08f, 8.372107446e-08f, 8.318886756e-08f, 8.265662191e-08f,
+8.212433844e-08f, 8.159201809e-08f, 8.105966179e-08f, 8.052727048e-08f, 7.999484509e-08f, 7.946238656e-08f, 7.892989581e-08f, 7.839737379e-08f, 7.786482143e-08f, 7.733223965e-08f,
+7.679962940e-08f, 7.626699161e-08f, 7.573432722e-08f, 7.520163714e-08f, 7.466892233e-08f, 7.413618370e-08f, 7.360342220e-08f, 7.307063876e-08f, 7.253783431e-08f, 7.200500977e-08f,
+7.147216609e-08f, 7.093930420e-08f, 7.040642502e-08f, 6.987352950e-08f, 6.934061855e-08f, 6.880769312e-08f, 6.827475413e-08f, 6.774180251e-08f, 6.720883920e-08f, 6.667586513e-08f,
+6.614288123e-08f, 6.560988842e-08f, 6.507688764e-08f, 6.454387982e-08f, 6.401086588e-08f, 6.347784676e-08f, 6.294482340e-08f, 6.241179670e-08f, 6.187876762e-08f, 6.134573707e-08f,
+6.081270598e-08f, 6.027967528e-08f, 5.974664591e-08f, 5.921361878e-08f, 5.868059484e-08f, 5.814757500e-08f, 5.761456019e-08f, 5.708155134e-08f, 5.654854938e-08f, 5.601555524e-08f,
+5.548256984e-08f, 5.494959410e-08f, 5.441662897e-08f, 5.388367535e-08f, 5.335073419e-08f, 5.281780639e-08f, 5.228489290e-08f, 5.175199463e-08f, 5.121911252e-08f, 5.068624748e-08f,
+5.015340044e-08f, 4.962057232e-08f, 4.908776406e-08f, 4.855497657e-08f, 4.802221078e-08f, 4.748946761e-08f, 4.695674799e-08f, 4.642405283e-08f, 4.589138307e-08f, 4.535873962e-08f,
+4.482612341e-08f, 4.429353536e-08f, 4.376097639e-08f, 4.322844743e-08f, 4.269594939e-08f, 4.216348321e-08f, 4.163104979e-08f, 4.109865006e-08f, 4.056628494e-08f, 4.003395535e-08f,
+3.950166221e-08f, 3.896940645e-08f, 3.843718898e-08f, 3.790501071e-08f, 3.737287258e-08f, 3.684077550e-08f, 3.630872039e-08f, 3.577670816e-08f, 3.524473974e-08f, 3.471281604e-08f,
+3.418093798e-08f, 3.364910648e-08f, 3.311732246e-08f, 3.258558683e-08f, 3.205390050e-08f, 3.152226441e-08f, 3.099067945e-08f, 3.045914656e-08f, 2.992766663e-08f, 2.939624060e-08f,
+2.886486937e-08f, 2.833355386e-08f, 2.780229498e-08f, 2.727109365e-08f, 2.673995078e-08f, 2.620886729e-08f, 2.567784408e-08f, 2.514688208e-08f, 2.461598219e-08f, 2.408514532e-08f,
+2.355437240e-08f, 2.302366433e-08f, 2.249302202e-08f, 2.196244638e-08f, 2.143193833e-08f, 2.090149878e-08f, 2.037112863e-08f, 1.984082880e-08f, 1.931060019e-08f, 1.878044372e-08f,
+1.825036030e-08f, 1.772035083e-08f, 1.719041622e-08f, 1.666055738e-08f, 1.613077523e-08f, 1.560107066e-08f, 1.507144458e-08f, 1.454189790e-08f, 1.401243154e-08f, 1.348304638e-08f,
+1.295374335e-08f, 1.242452334e-08f, 1.189538727e-08f, 1.136633603e-08f, 1.083737053e-08f, 1.030849168e-08f, 9.779700378e-09f, 9.250997529e-09f, 8.722384039e-09f, 8.193860808e-09f,
+7.665428741e-09f, 7.137088739e-09f, 6.608841705e-09f, 6.080688540e-09f, 5.552630146e-09f, 5.024667424e-09f, 4.496801275e-09f, 3.969032598e-09f, 3.441362295e-09f, 2.913791264e-09f,
+2.386320406e-09f, 1.858950618e-09f, 1.331682800e-09f, 8.045178501e-10f, 2.774566659e-10f, -2.494998550e-10f, -7.763508155e-10f, -1.303095319e-09f, -1.829732468e-09f, -2.356261367e-09f,
+-2.882681121e-09f, -3.408990834e-09f, -3.935189611e-09f, -4.461276557e-09f, -4.987250779e-09f, -5.513111382e-09f, -6.038857472e-09f, -6.564488158e-09f, -7.090002546e-09f, -7.615399743e-09f,
+-8.140678858e-09f, -8.665838999e-09f, -9.190879275e-09f, -9.715798795e-09f, -1.024059667e-08f, -1.076527201e-08f, -1.128982392e-08f, -1.181425151e-08f, -1.233855391e-08f, -1.286273021e-08f,
+-1.338677953e-08f, -1.391070098e-08f, -1.443449367e-08f, -1.495815672e-08f, -1.548168925e-08f, -1.600509036e-08f, -1.652835917e-08f, -1.705149479e-08f, -1.757449634e-08f, -1.809736294e-08f,
+-1.862009369e-08f, -1.914268773e-08f, -1.966514416e-08f, -2.018746210e-08f, -2.070964067e-08f, -2.123167899e-08f, -2.175357617e-08f, -2.227533133e-08f, -2.279694360e-08f, -2.331841210e-08f,
+-2.383973594e-08f, -2.436091424e-08f, -2.488194612e-08f, -2.540283072e-08f, -2.592356714e-08f, -2.644415452e-08f, -2.696459196e-08f, -2.748487861e-08f, -2.800501357e-08f, -2.852499598e-08f,
+-2.904482496e-08f, -2.956449964e-08f, -3.008401913e-08f, -3.060338257e-08f, -3.112258908e-08f, -3.164163779e-08f, -3.216052782e-08f, -3.267925831e-08f, -3.319782838e-08f, -3.371623716e-08f,
+-3.423448378e-08f, -3.475256737e-08f, -3.527048706e-08f, -3.578824197e-08f, -3.630583125e-08f, -3.682325401e-08f, -3.734050940e-08f, -3.785759655e-08f, -3.837451458e-08f, -3.889126263e-08f,
+-3.940783984e-08f, -3.992424533e-08f, -4.044047825e-08f, -4.095653773e-08f, -4.147242290e-08f, -4.198813290e-08f, -4.250366687e-08f, -4.301902394e-08f, -4.353420325e-08f, -4.404920394e-08f,
+-4.456402514e-08f, -4.507866601e-08f, -4.559312566e-08f, -4.610740326e-08f, -4.662149793e-08f, -4.713540881e-08f, -4.764913505e-08f, -4.816267580e-08f, -4.867603018e-08f, -4.918919735e-08f,
+-4.970217645e-08f, -5.021496662e-08f, -5.072756700e-08f, -5.123997675e-08f, -5.175219500e-08f, -5.226422091e-08f, -5.277605361e-08f, -5.328769226e-08f, -5.379913600e-08f, -5.431038398e-08f,
+-5.482143535e-08f, -5.533228926e-08f, -5.584294486e-08f, -5.635340129e-08f, -5.686365771e-08f, -5.737371327e-08f, -5.788356712e-08f, -5.839321842e-08f, -5.890266630e-08f, -5.941190994e-08f,
+-5.992094847e-08f, -6.042978106e-08f, -6.093840686e-08f, -6.144682503e-08f, -6.195503472e-08f, -6.246303508e-08f, -6.297082528e-08f, -6.347840446e-08f, -6.398577180e-08f, -6.449292645e-08f,
+-6.499986756e-08f, -6.550659429e-08f, -6.601310581e-08f, -6.651940128e-08f, -6.702547985e-08f, -6.753134070e-08f, -6.803698297e-08f, -6.854240584e-08f, -6.904760846e-08f, -6.955259001e-08f,
+-7.005734964e-08f, -7.056188651e-08f, -7.106619981e-08f, -7.157028869e-08f, -7.207415231e-08f, -7.257778985e-08f, -7.308120047e-08f, -7.358438334e-08f, -7.408733764e-08f, -7.459006252e-08f,
+-7.509255716e-08f, -7.559482073e-08f, -7.609685241e-08f, -7.659865135e-08f, -7.710021674e-08f, -7.760154775e-08f, -7.810264355e-08f, -7.860350331e-08f, -7.910412621e-08f, -7.960451143e-08f,
+-8.010465814e-08f, -8.060456551e-08f, -8.110423273e-08f, -8.160365897e-08f, -8.210284341e-08f, -8.260178522e-08f, -8.310048360e-08f, -8.359893770e-08f, -8.409714673e-08f, -8.459510985e-08f,
+-8.509282626e-08f, -8.559029512e-08f, -8.608751563e-08f, -8.658448697e-08f, -8.708120831e-08f, -8.757767886e-08f, -8.807389778e-08f, -8.856986428e-08f, -8.906557752e-08f, -8.956103671e-08f,
+-9.005624103e-08f, -9.055118966e-08f, -9.104588179e-08f, -9.154031662e-08f, -9.203449334e-08f, -9.252841113e-08f, -9.302206918e-08f, -9.351546669e-08f, -9.400860286e-08f, -9.450147687e-08f,
+-9.499408791e-08f, -9.548643519e-08f, -9.597851789e-08f, -9.647033521e-08f, -9.696188636e-08f, -9.745317051e-08f, -9.794418688e-08f, -9.843493466e-08f, -9.892541305e-08f, -9.941562125e-08f,
+-9.990555846e-08f, -1.003952239e-07f, -1.008846167e-07f, -1.013737361e-07f, -1.018625814e-07f, -1.023511517e-07f, -1.028394461e-07f, -1.033274641e-07f, -1.038152046e-07f, -1.043026670e-07f,
+-1.047898504e-07f, -1.052767541e-07f, -1.057633772e-07f, -1.062497190e-07f, -1.067357787e-07f, -1.072215555e-07f, -1.077070485e-07f, -1.081922571e-07f, -1.086771803e-07f, -1.091618176e-07f,
+-1.096461679e-07f, -1.101302306e-07f, -1.106140049e-07f, -1.110974899e-07f, -1.115806850e-07f, -1.120635893e-07f, -1.125462020e-07f, -1.130285223e-07f, -1.135105495e-07f, -1.139922828e-07f,
+-1.144737215e-07f, -1.149548646e-07f, -1.154357115e-07f, -1.159162614e-07f, -1.163965134e-07f, -1.168764669e-07f, -1.173561210e-07f, -1.178354749e-07f, -1.183145280e-07f, -1.187932793e-07f,
+-1.192717282e-07f, -1.197498739e-07f, -1.202277156e-07f, -1.207052525e-07f, -1.211824838e-07f, -1.216594088e-07f, -1.221360267e-07f, -1.226123368e-07f, -1.230883382e-07f, -1.235640303e-07f,
+-1.240394121e-07f, -1.245144831e-07f, -1.249892424e-07f, -1.254636892e-07f, -1.259378227e-07f, -1.264116423e-07f, -1.268851472e-07f, -1.273583365e-07f, -1.278312096e-07f, -1.283037656e-07f,
+-1.287760038e-07f, -1.292479235e-07f, -1.297195239e-07f, -1.301908042e-07f, -1.306617637e-07f, -1.311324016e-07f, -1.316027172e-07f, -1.320727097e-07f, -1.325423783e-07f, -1.330117223e-07f,
+-1.334807410e-07f, -1.339494336e-07f, -1.344177993e-07f, -1.348858374e-07f, -1.353535472e-07f, -1.358209279e-07f, -1.362879787e-07f, -1.367546989e-07f, -1.372210877e-07f, -1.376871445e-07f,
+-1.381528684e-07f, -1.386182587e-07f, -1.390833148e-07f, -1.395480357e-07f, -1.400124208e-07f, -1.404764694e-07f, -1.409401806e-07f, -1.414035539e-07f, -1.418665883e-07f, -1.423292833e-07f,
+-1.427916379e-07f, -1.432536516e-07f, -1.437153236e-07f, -1.441766531e-07f, -1.446376394e-07f, -1.450982817e-07f, -1.455585794e-07f, -1.460185317e-07f, -1.464781379e-07f, -1.469373972e-07f,
+-1.473963089e-07f, -1.478548723e-07f, -1.483130866e-07f, -1.487709511e-07f, -1.492284651e-07f, -1.496856279e-07f, -1.501424387e-07f, -1.505988969e-07f, -1.510550016e-07f, -1.515107522e-07f,
+-1.519661479e-07f, -1.524211880e-07f, -1.528758719e-07f, -1.533301987e-07f, -1.537841677e-07f, -1.542377783e-07f, -1.546910297e-07f, -1.551439212e-07f, -1.555964521e-07f, -1.560486217e-07f,
+-1.565004292e-07f, -1.569518739e-07f, -1.574029552e-07f, -1.578536722e-07f, -1.583040244e-07f, -1.587540110e-07f, -1.592036312e-07f, -1.596528844e-07f, -1.601017698e-07f, -1.605502868e-07f,
+-1.609984346e-07f, -1.614462126e-07f, -1.618936199e-07f, -1.623406560e-07f, -1.627873202e-07f, -1.632336116e-07f, -1.636795296e-07f, -1.641250736e-07f, -1.645702427e-07f, -1.650150364e-07f,
+-1.654594538e-07f, -1.659034944e-07f, -1.663471574e-07f, -1.667904420e-07f, -1.672333477e-07f, -1.676758737e-07f, -1.681180194e-07f, -1.685597839e-07f, -1.690011667e-07f, -1.694421671e-07f,
+-1.698827843e-07f, -1.703230177e-07f, -1.707628665e-07f, -1.712023301e-07f, -1.716414078e-07f, -1.720800989e-07f, -1.725184027e-07f, -1.729563186e-07f, -1.733938458e-07f, -1.738309837e-07f,
+-1.742677315e-07f, -1.747040887e-07f, -1.751400544e-07f, -1.755756281e-07f, -1.760108091e-07f, -1.764455966e-07f, -1.768799900e-07f, -1.773139886e-07f, -1.777475918e-07f, -1.781807988e-07f,
+-1.786136090e-07f, -1.790460218e-07f, -1.794780363e-07f, -1.799096521e-07f, -1.803408683e-07f, -1.807716844e-07f, -1.812020996e-07f, -1.816321133e-07f, -1.820617248e-07f, -1.824909334e-07f,
+-1.829197386e-07f, -1.833481395e-07f, -1.837761356e-07f, -1.842037262e-07f, -1.846309106e-07f, -1.850576882e-07f, -1.854840582e-07f, -1.859100201e-07f, -1.863355732e-07f, -1.867607168e-07f,
+-1.871854502e-07f, -1.876097728e-07f, -1.880336840e-07f, -1.884571831e-07f, -1.888802694e-07f, -1.893029422e-07f, -1.897252010e-07f, -1.901470451e-07f, -1.905684737e-07f, -1.909894864e-07f,
+-1.914100823e-07f, -1.918302610e-07f, -1.922500216e-07f, -1.926693636e-07f, -1.930882863e-07f, -1.935067892e-07f, -1.939248714e-07f, -1.943425324e-07f, -1.947597716e-07f, -1.951765883e-07f,
+-1.955929819e-07f, -1.960089516e-07f, -1.964244970e-07f, -1.968396173e-07f, -1.972543119e-07f, -1.976685801e-07f, -1.980824214e-07f, -1.984958351e-07f, -1.989088206e-07f, -1.993213772e-07f,
+-1.997335043e-07f, -2.001452012e-07f, -2.005564674e-07f, -2.009673022e-07f, -2.013777049e-07f, -2.017876750e-07f, -2.021972118e-07f, -2.026063147e-07f, -2.030149831e-07f, -2.034232163e-07f,
+-2.038310137e-07f, -2.042383748e-07f, -2.046452988e-07f, -2.050517851e-07f, -2.054578332e-07f, -2.058634423e-07f, -2.062686120e-07f, -2.066733415e-07f, -2.070776303e-07f, -2.074814778e-07f,
+-2.078848832e-07f, -2.082878461e-07f, -2.086903658e-07f, -2.090924416e-07f, -2.094940731e-07f, -2.098952595e-07f, -2.102960002e-07f, -2.106962947e-07f, -2.110961423e-07f, -2.114955425e-07f,
+-2.118944946e-07f, -2.122929980e-07f, -2.126910521e-07f, -2.130886563e-07f, -2.134858100e-07f, -2.138825127e-07f, -2.142787636e-07f, -2.146745623e-07f, -2.150699080e-07f, -2.154648003e-07f,
+-2.158592385e-07f, -2.162532220e-07f, -2.166467502e-07f, -2.170398226e-07f, -2.174324384e-07f, -2.178245973e-07f, -2.182162984e-07f, -2.186075414e-07f, -2.189983255e-07f, -2.193886502e-07f,
+-2.197785148e-07f, -2.201679189e-07f, -2.205568618e-07f, -2.209453430e-07f, -2.213333618e-07f, -2.217209176e-07f, -2.221080099e-07f, -2.224946382e-07f, -2.228808018e-07f, -2.232665001e-07f,
+-2.236517326e-07f, -2.240364986e-07f, -2.244207977e-07f, -2.248046292e-07f, -2.251879926e-07f, -2.255708872e-07f, -2.259533126e-07f, -2.263352681e-07f, -2.267167532e-07f, -2.270977673e-07f,
+-2.274783098e-07f, -2.278583802e-07f, -2.282379778e-07f, -2.286171022e-07f, -2.289957528e-07f, -2.293739290e-07f, -2.297516302e-07f, -2.301288558e-07f, -2.305056054e-07f, -2.308818783e-07f,
+-2.312576740e-07f, -2.316329920e-07f, -2.320078316e-07f, -2.323821923e-07f, -2.327560736e-07f, -2.331294749e-07f, -2.335023957e-07f, -2.338748353e-07f, -2.342467933e-07f, -2.346182691e-07f,
+-2.349892621e-07f, -2.353597719e-07f, -2.357297977e-07f, -2.360993392e-07f, -2.364683957e-07f, -2.368369667e-07f, -2.372050517e-07f, -2.375726501e-07f, -2.379397614e-07f, -2.383063850e-07f,
+-2.386725204e-07f, -2.390381670e-07f, -2.394033244e-07f, -2.397679919e-07f, -2.401321691e-07f, -2.404958554e-07f, -2.408590503e-07f, -2.412217531e-07f, -2.415839635e-07f, -2.419456809e-07f,
+-2.423069047e-07f, -2.426676343e-07f, -2.430278694e-07f, -2.433876093e-07f, -2.437468536e-07f, -2.441056016e-07f, -2.444638529e-07f, -2.448216070e-07f, -2.451788633e-07f, -2.455356212e-07f,
+-2.458918804e-07f, -2.462476402e-07f, -2.466029001e-07f, -2.469576597e-07f, -2.473119184e-07f, -2.476656757e-07f, -2.480189310e-07f, -2.483716839e-07f, -2.487239338e-07f, -2.490756803e-07f,
+-2.494269227e-07f, -2.497776607e-07f, -2.501278937e-07f, -2.504776212e-07f, -2.508268426e-07f, -2.511755576e-07f, -2.515237654e-07f, -2.518714658e-07f, -2.522186581e-07f, -2.525653419e-07f,
+-2.529115166e-07f, -2.532571818e-07f, -2.536023370e-07f, -2.539469816e-07f, -2.542911151e-07f, -2.546347371e-07f, -2.549778471e-07f, -2.553204446e-07f, -2.556625290e-07f, -2.560040999e-07f,
+-2.563451568e-07f, -2.566856992e-07f, -2.570257266e-07f, -2.573652386e-07f, -2.577042346e-07f, -2.580427141e-07f, -2.583806767e-07f, -2.587181218e-07f, -2.590550491e-07f, -2.593914580e-07f,
+-2.597273479e-07f, -2.600627186e-07f, -2.603975694e-07f, -2.607318999e-07f, -2.610657096e-07f, -2.613989980e-07f, -2.617317647e-07f, -2.620640092e-07f, -2.623957310e-07f, -2.627269296e-07f,
+-2.630576046e-07f, -2.633877555e-07f, -2.637173818e-07f, -2.640464831e-07f, -2.643750588e-07f, -2.647031086e-07f, -2.650306319e-07f, -2.653576283e-07f, -2.656840974e-07f, -2.660100386e-07f,
+-2.663354515e-07f, -2.666603356e-07f, -2.669846906e-07f, -2.673085158e-07f, -2.676318109e-07f, -2.679545755e-07f, -2.682768090e-07f, -2.685985109e-07f, -2.689196810e-07f, -2.692403186e-07f,
+-2.695604233e-07f, -2.698799948e-07f, -2.701990325e-07f, -2.705175359e-07f, -2.708355048e-07f, -2.711529385e-07f, -2.714698366e-07f, -2.717861988e-07f, -2.721020246e-07f, -2.724173134e-07f,
+-2.727320650e-07f, -2.730462788e-07f, -2.733599544e-07f, -2.736730913e-07f, -2.739856892e-07f, -2.742977476e-07f, -2.746092660e-07f, -2.749202441e-07f, -2.752306813e-07f, -2.755405773e-07f,
+-2.758499316e-07f, -2.761587438e-07f, -2.764670135e-07f, -2.767747402e-07f, -2.770819236e-07f, -2.773885631e-07f, -2.776946584e-07f, -2.780002090e-07f, -2.783052145e-07f, -2.786096745e-07f,
+-2.789135886e-07f, -2.792169564e-07f, -2.795197773e-07f, -2.798220511e-07f, -2.801237773e-07f, -2.804249555e-07f, -2.807255852e-07f, -2.810256661e-07f, -2.813251978e-07f, -2.816241798e-07f,
+-2.819226117e-07f, -2.822204931e-07f, -2.825178236e-07f, -2.828146028e-07f, -2.831108303e-07f, -2.834065057e-07f, -2.837016286e-07f, -2.839961986e-07f, -2.842902152e-07f, -2.845836781e-07f,
+-2.848765869e-07f, -2.851689412e-07f, -2.854607405e-07f, -2.857519845e-07f, -2.860426729e-07f, -2.863328051e-07f, -2.866223808e-07f, -2.869113996e-07f, -2.871998612e-07f, -2.874877650e-07f,
+-2.877751108e-07f, -2.880618982e-07f, -2.883481267e-07f, -2.886337960e-07f, -2.889189057e-07f, -2.892034553e-07f, -2.894874446e-07f, -2.897708732e-07f, -2.900537406e-07f, -2.903360465e-07f,
+-2.906177905e-07f, -2.908989722e-07f, -2.911795912e-07f, -2.914596473e-07f, -2.917391399e-07f, -2.920180688e-07f, -2.922964335e-07f, -2.925742336e-07f, -2.928514689e-07f, -2.931281390e-07f,
+-2.934042434e-07f, -2.936797818e-07f, -2.939547538e-07f, -2.942291592e-07f, -2.945029974e-07f, -2.947762682e-07f, -2.950489711e-07f, -2.953211059e-07f, -2.955926722e-07f, -2.958636696e-07f,
+-2.961340977e-07f, -2.964039562e-07f, -2.966732447e-07f, -2.969419629e-07f, -2.972101105e-07f, -2.974776870e-07f, -2.977446922e-07f, -2.980111256e-07f, -2.982769870e-07f, -2.985422759e-07f,
+-2.988069921e-07f, -2.990711351e-07f, -2.993347047e-07f, -2.995977005e-07f, -2.998601222e-07f, -3.001219694e-07f, -3.003832417e-07f, -3.006439389e-07f, -3.009040606e-07f, -3.011636064e-07f,
+-3.014225760e-07f, -3.016809692e-07f, -3.019387855e-07f, -3.021960246e-07f, -3.024526862e-07f, -3.027087700e-07f, -3.029642755e-07f, -3.032192026e-07f, -3.034735509e-07f, -3.037273200e-07f,
+-3.039805096e-07f, -3.042331194e-07f, -3.044851491e-07f, -3.047365984e-07f, -3.049874669e-07f, -3.052377542e-07f, -3.054874602e-07f, -3.057365845e-07f, -3.059851267e-07f, -3.062330865e-07f,
+-3.064804637e-07f, -3.067272579e-07f, -3.069734688e-07f, -3.072190960e-07f, -3.074641394e-07f, -3.077085985e-07f, -3.079524731e-07f, -3.081957628e-07f, -3.084384674e-07f, -3.086805865e-07f,
+-3.089221199e-07f, -3.091630672e-07f, -3.094034281e-07f, -3.096432024e-07f, -3.098823897e-07f, -3.101209897e-07f, -3.103590022e-07f, -3.105964268e-07f, -3.108332633e-07f, -3.110695113e-07f,
+-3.113051706e-07f, -3.115402408e-07f, -3.117747217e-07f, -3.120086131e-07f, -3.122419145e-07f, -3.124746257e-07f, -3.127067465e-07f, -3.129382765e-07f, -3.131692154e-07f, -3.133995630e-07f,
+-3.136293191e-07f, -3.138584832e-07f, -3.140870552e-07f, -3.143150347e-07f, -3.145424215e-07f, -3.147692152e-07f, -3.149954157e-07f, -3.152210227e-07f, -3.154460358e-07f, -3.156704549e-07f,
+-3.158942795e-07f, -3.161175095e-07f, -3.163401446e-07f, -3.165621846e-07f, -3.167836291e-07f, -3.170044779e-07f, -3.172247307e-07f, -3.174443873e-07f, -3.176634473e-07f, -3.178819107e-07f,
+-3.180997770e-07f, -3.183170460e-07f, -3.185337175e-07f, -3.187497911e-07f, -3.189652668e-07f, -3.191801441e-07f, -3.193944229e-07f, -3.196081028e-07f, -3.198211837e-07f, -3.200336653e-07f,
+-3.202455474e-07f, -3.204568296e-07f, -3.206675117e-07f, -3.208775936e-07f, -3.210870749e-07f, -3.212959554e-07f, -3.215042349e-07f, -3.217119131e-07f, -3.219189898e-07f, -3.221254647e-07f,
+-3.223313376e-07f, -3.225366083e-07f, -3.227412766e-07f, -3.229453421e-07f, -3.231488047e-07f, -3.233516641e-07f, -3.235539202e-07f, -3.237555726e-07f, -3.239566211e-07f, -3.241570655e-07f,
+-3.243569057e-07f, -3.245561413e-07f, -3.247547721e-07f, -3.249527979e-07f, -3.251502185e-07f, -3.253470337e-07f, -3.255432432e-07f, -3.257388469e-07f, -3.259338444e-07f, -3.261282357e-07f,
+-3.263220204e-07f, -3.265151983e-07f, -3.267077694e-07f, -3.268997332e-07f, -3.270910897e-07f, -3.272818385e-07f, -3.274719796e-07f, -3.276615126e-07f, -3.278504375e-07f, -3.280387539e-07f,
+-3.282264616e-07f, -3.284135606e-07f, -3.286000505e-07f, -3.287859311e-07f, -3.289712024e-07f, -3.291558639e-07f, -3.293399157e-07f, -3.295233574e-07f, -3.297061889e-07f, -3.298884099e-07f,
+-3.300700204e-07f, -3.302510200e-07f, -3.304314086e-07f, -3.306111860e-07f, -3.307903520e-07f, -3.309689065e-07f, -3.311468491e-07f, -3.313241799e-07f, -3.315008985e-07f, -3.316770047e-07f,
+-3.318524985e-07f, -3.320273796e-07f, -3.322016478e-07f, -3.323753030e-07f, -3.325483450e-07f, -3.327207735e-07f, -3.328925885e-07f, -3.330637897e-07f, -3.332343770e-07f, -3.334043502e-07f,
+-3.335737091e-07f, -3.337424536e-07f, -3.339105835e-07f, -3.340780985e-07f, -3.342449987e-07f, -3.344112837e-07f, -3.345769534e-07f, -3.347420077e-07f, -3.349064464e-07f, -3.350702693e-07f,
+-3.352334763e-07f, -3.353960671e-07f, -3.355580418e-07f, -3.357194000e-07f, -3.358801417e-07f, -3.360402666e-07f, -3.361997747e-07f, -3.363586657e-07f, -3.365169395e-07f, -3.366745961e-07f,
+-3.368316351e-07f, -3.369880565e-07f, -3.371438601e-07f, -3.372990459e-07f, -3.374536135e-07f, -3.376075629e-07f, -3.377608940e-07f, -3.379136066e-07f, -3.380657005e-07f, -3.382171756e-07f,
+-3.383680319e-07f, -3.385182690e-07f, -3.386678870e-07f, -3.388168857e-07f, -3.389652649e-07f, -3.391130244e-07f, -3.392601643e-07f, -3.394066843e-07f, -3.395525843e-07f, -3.396978642e-07f,
+-3.398425239e-07f, -3.399865631e-07f, -3.401299819e-07f, -3.402727801e-07f, -3.404149575e-07f, -3.405565140e-07f, -3.406974496e-07f, -3.408377640e-07f, -3.409774572e-07f, -3.411165291e-07f,
+-3.412549795e-07f, -3.413928083e-07f, -3.415300155e-07f, -3.416666008e-07f, -3.418025642e-07f, -3.419379056e-07f, -3.420726249e-07f, -3.422067219e-07f, -3.423401965e-07f, -3.424730487e-07f,
+-3.426052783e-07f, -3.427368852e-07f, -3.428678694e-07f, -3.429982307e-07f, -3.431279690e-07f, -3.432570842e-07f, -3.433855763e-07f, -3.435134451e-07f, -3.436406905e-07f, -3.437673124e-07f,
+-3.438933108e-07f, -3.440186855e-07f, -3.441434365e-07f, -3.442675636e-07f, -3.443910669e-07f, -3.445139460e-07f, -3.446362011e-07f, -3.447578320e-07f, -3.448788386e-07f, -3.449992209e-07f,
+-3.451189787e-07f, -3.452381120e-07f, -3.453566206e-07f, -3.454745046e-07f, -3.455917638e-07f, -3.457083982e-07f, -3.458244076e-07f, -3.459397921e-07f, -3.460545515e-07f, -3.461686857e-07f,
+-3.462821947e-07f, -3.463950784e-07f, -3.465073368e-07f, -3.466189697e-07f, -3.467299771e-07f, -3.468403590e-07f, -3.469501152e-07f, -3.470592458e-07f, -3.471677506e-07f, -3.472756295e-07f,
+-3.473828826e-07f, -3.474895098e-07f, -3.475955109e-07f, -3.477008860e-07f, -3.478056350e-07f, -3.479097578e-07f, -3.480132544e-07f, -3.481161247e-07f, -3.482183686e-07f, -3.483199862e-07f,
+-3.484209774e-07f, -3.485213420e-07f, -3.486210802e-07f, -3.487201917e-07f, -3.488186767e-07f, -3.489165349e-07f, -3.490137665e-07f, -3.491103713e-07f, -3.492063493e-07f, -3.493017005e-07f,
+-3.493964248e-07f, -3.494905222e-07f, -3.495839926e-07f, -3.496768361e-07f, -3.497690525e-07f, -3.498606419e-07f, -3.499516042e-07f, -3.500419394e-07f, -3.501316474e-07f, -3.502207283e-07f,
+-3.503091819e-07f, -3.503970083e-07f, -3.504842075e-07f, -3.505707794e-07f, -3.506567239e-07f, -3.507420412e-07f, -3.508267311e-07f, -3.509107936e-07f, -3.509942287e-07f, -3.510770364e-07f,
+-3.511592167e-07f, -3.512407696e-07f, -3.513216950e-07f, -3.514019929e-07f, -3.514816633e-07f, -3.515607062e-07f, -3.516391217e-07f, -3.517169096e-07f, -3.517940700e-07f, -3.518706028e-07f,
+-3.519465082e-07f, -3.520217859e-07f, -3.520964362e-07f, -3.521704588e-07f, -3.522438540e-07f, -3.523166216e-07f, -3.523887616e-07f, -3.524602741e-07f, -3.525311590e-07f, -3.526014164e-07f,
+-3.526710462e-07f, -3.527400485e-07f, -3.528084233e-07f, -3.528761706e-07f, -3.529432903e-07f, -3.530097826e-07f, -3.530756474e-07f, -3.531408847e-07f, -3.532054945e-07f, -3.532694769e-07f,
+-3.533328319e-07f, -3.533955594e-07f, -3.534576595e-07f, -3.535191323e-07f, -3.535799777e-07f, -3.536401958e-07f, -3.536997866e-07f, -3.537587500e-07f, -3.538170862e-07f, -3.538747952e-07f,
+-3.539318769e-07f, -3.539883315e-07f, -3.540441589e-07f, -3.540993592e-07f, -3.541539324e-07f, -3.542078785e-07f, -3.542611976e-07f, -3.543138897e-07f, -3.543659548e-07f, -3.544173930e-07f,
+-3.544682043e-07f, -3.545183888e-07f, -3.545679464e-07f, -3.546168773e-07f, -3.546651815e-07f, -3.547128590e-07f, -3.547599098e-07f, -3.548063340e-07f, -3.548521317e-07f, -3.548973029e-07f,
+-3.549418477e-07f, -3.549857660e-07f, -3.550290580e-07f, -3.550717237e-07f, -3.551137631e-07f, -3.551551763e-07f, -3.551959634e-07f, -3.552361244e-07f, -3.552756594e-07f, -3.553145684e-07f,
+-3.553528515e-07f, -3.553905088e-07f, -3.554275403e-07f, -3.554639460e-07f, -3.554997261e-07f, -3.555348806e-07f, -3.555694095e-07f, -3.556033130e-07f, -3.556365911e-07f, -3.556692439e-07f,
+-3.557012714e-07f, -3.557326737e-07f, -3.557634509e-07f, -3.557936031e-07f, -3.558231303e-07f, -3.558520326e-07f, -3.558803101e-07f, -3.559079628e-07f, -3.559349909e-07f, -3.559613944e-07f,
+-3.559871734e-07f, -3.560123280e-07f, -3.560368583e-07f, -3.560607643e-07f, -3.560840461e-07f, -3.561067039e-07f, -3.561287377e-07f, -3.561501475e-07f, -3.561709336e-07f, -3.561910959e-07f,
+-3.562106346e-07f, -3.562295498e-07f, -3.562478415e-07f, -3.562655098e-07f, -3.562825550e-07f, -3.562989769e-07f, -3.563147758e-07f, -3.563299517e-07f, -3.563445048e-07f, -3.563584351e-07f,
+-3.563717427e-07f, -3.563844278e-07f, -3.563964904e-07f, -3.564079307e-07f, -3.564187488e-07f, -3.564289447e-07f, -3.564385186e-07f, -3.564474705e-07f, -3.564558007e-07f, -3.564635092e-07f,
+-3.564705961e-07f, -3.564770615e-07f, -3.564829056e-07f, -3.564881285e-07f, -3.564927302e-07f, -3.564967110e-07f, -3.565000708e-07f, -3.565028099e-07f, -3.565049284e-07f, -3.565064263e-07f,
+-3.565073039e-07f, -3.565075612e-07f, -3.565071983e-07f, -3.565062155e-07f, -3.565046127e-07f, -3.565023902e-07f, -3.564995481e-07f, -3.564960864e-07f, -3.564920054e-07f, -3.564873052e-07f,
+-3.564819858e-07f, -3.564760475e-07f, -3.564694904e-07f, -3.564623145e-07f, -3.564545202e-07f, -3.564461074e-07f, -3.564370763e-07f, -3.564274271e-07f, -3.564171599e-07f, -3.564062749e-07f,
+-3.563947721e-07f, -3.563826518e-07f, -3.563699141e-07f, -3.563565591e-07f, -3.563425871e-07f, -3.563279980e-07f, -3.563127922e-07f, -3.562969696e-07f, -3.562805306e-07f, -3.562634752e-07f,
+-3.562458036e-07f, -3.562275160e-07f, -3.562086125e-07f, -3.561890933e-07f, -3.561689585e-07f, -3.561482082e-07f, -3.561268428e-07f, -3.561048622e-07f, -3.560822668e-07f, -3.560590565e-07f,
+-3.560352317e-07f, -3.560107924e-07f, -3.559857389e-07f, -3.559600713e-07f, -3.559337898e-07f, -3.559068946e-07f, -3.558793857e-07f, -3.558512635e-07f, -3.558225280e-07f, -3.557931794e-07f,
+-3.557632180e-07f, -3.557326439e-07f, -3.557014573e-07f, -3.556696583e-07f, -3.556372471e-07f, -3.556042239e-07f, -3.555705890e-07f, -3.555363424e-07f, -3.555014844e-07f, -3.554660151e-07f,
+-3.554299348e-07f, -3.553932436e-07f, -3.553559416e-07f, -3.553180292e-07f, -3.552795065e-07f, -3.552403737e-07f, -3.552006309e-07f, -3.551602784e-07f, -3.551193163e-07f, -3.550777450e-07f,
+-3.550355644e-07f, -3.549927749e-07f, -3.549493767e-07f, -3.549053699e-07f, -3.548607547e-07f, -3.548155314e-07f, -3.547697002e-07f, -3.547232612e-07f, -3.546762146e-07f, -3.546285607e-07f,
+-3.545802997e-07f, -3.545314318e-07f, -3.544819571e-07f, -3.544318760e-07f, -3.543811886e-07f, -3.543298950e-07f, -3.542779956e-07f, -3.542254906e-07f, -3.541723801e-07f, -3.541186644e-07f,
+-3.540643437e-07f, -3.540094182e-07f, -3.539538881e-07f, -3.538977537e-07f, -3.538410151e-07f, -3.537836727e-07f, -3.537257265e-07f, -3.536671769e-07f, -3.536080240e-07f, -3.535482682e-07f,
+-3.534879095e-07f, -3.534269483e-07f, -3.533653848e-07f, -3.533032191e-07f, -3.532404516e-07f, -3.531770825e-07f, -3.531131120e-07f, -3.530485402e-07f, -3.529833676e-07f, -3.529175943e-07f,
+-3.528512205e-07f, -3.527842464e-07f, -3.527166724e-07f, -3.526484987e-07f, -3.525797254e-07f, -3.525103529e-07f, -3.524403814e-07f, -3.523698111e-07f, -3.522986422e-07f, -3.522268751e-07f,
+-3.521545099e-07f, -3.520815470e-07f, -3.520079865e-07f, -3.519338287e-07f, -3.518590738e-07f, -3.517837222e-07f, -3.517077741e-07f, -3.516312296e-07f, -3.515540892e-07f, -3.514763530e-07f,
+-3.513980212e-07f, -3.513190942e-07f, -3.512395722e-07f, -3.511594555e-07f, -3.510787443e-07f, -3.509974388e-07f, -3.509155394e-07f, -3.508330464e-07f, -3.507499599e-07f, -3.506662802e-07f,
+-3.505820076e-07f, -3.504971425e-07f, -3.504116849e-07f, -3.503256353e-07f, -3.502389939e-07f, -3.501517609e-07f, -3.500639366e-07f, -3.499755214e-07f, -3.498865154e-07f, -3.497969190e-07f,
+-3.497067324e-07f, -3.496159559e-07f, -3.495245898e-07f, -3.494326343e-07f, -3.493400898e-07f, -3.492469565e-07f, -3.491532347e-07f, -3.490589247e-07f, -3.489640268e-07f, -3.488685413e-07f,
+-3.487724684e-07f, -3.486758084e-07f, -3.485785616e-07f, -3.484807284e-07f, -3.483823089e-07f, -3.482833035e-07f, -3.481837126e-07f, -3.480835362e-07f, -3.479827749e-07f, -3.478814288e-07f,
+-3.477794983e-07f, -3.476769836e-07f, -3.475738851e-07f, -3.474702031e-07f, -3.473659378e-07f, -3.472610895e-07f, -3.471556586e-07f, -3.470496453e-07f, -3.469430501e-07f, -3.468358730e-07f,
+-3.467281146e-07f, -3.466197750e-07f, -3.465108546e-07f, -3.464013537e-07f, -3.462912726e-07f, -3.461806116e-07f, -3.460693710e-07f, -3.459575512e-07f, -3.458451524e-07f, -3.457321749e-07f,
+-3.456186191e-07f, -3.455044854e-07f, -3.453897739e-07f, -3.452744851e-07f, -3.451586192e-07f, -3.450421765e-07f, -3.449251575e-07f, -3.448075623e-07f, -3.446893914e-07f, -3.445706450e-07f,
+-3.444513235e-07f, -3.443314272e-07f, -3.442109564e-07f, -3.440899115e-07f, -3.439682928e-07f, -3.438461005e-07f, -3.437233351e-07f, -3.435999969e-07f, -3.434760862e-07f, -3.433516033e-07f,
+-3.432265486e-07f, -3.431009224e-07f, -3.429747250e-07f, -3.428479568e-07f, -3.427206181e-07f, -3.425927093e-07f, -3.424642306e-07f, -3.423351825e-07f, -3.422055653e-07f, -3.420753792e-07f,
+-3.419446247e-07f, -3.418133022e-07f, -3.416814118e-07f, -3.415489541e-07f, -3.414159292e-07f, -3.412823377e-07f, -3.411481798e-07f, -3.410134559e-07f, -3.408781663e-07f, -3.407423114e-07f,
+-3.406058915e-07f, -3.404689071e-07f, -3.403313583e-07f, -3.401932457e-07f, -3.400545695e-07f, -3.399153301e-07f, -3.397755279e-07f, -3.396351632e-07f, -3.394942364e-07f, -3.393527478e-07f,
+-3.392106979e-07f, -3.390680869e-07f, -3.389249152e-07f, -3.387811832e-07f, -3.386368913e-07f, -3.384920398e-07f, -3.383466292e-07f, -3.382006596e-07f, -3.380541316e-07f, -3.379070455e-07f,
+-3.377594017e-07f, -3.376112005e-07f, -3.374624423e-07f, -3.373131274e-07f, -3.371632564e-07f, -3.370128295e-07f, -3.368618471e-07f, -3.367103095e-07f, -3.365582172e-07f, -3.364055706e-07f,
+-3.362523700e-07f, -3.360986158e-07f, -3.359443083e-07f, -3.357894481e-07f, -3.356340353e-07f, -3.354780705e-07f, -3.353215540e-07f, -3.351644862e-07f, -3.350068675e-07f, -3.348486983e-07f,
+-3.346899789e-07f, -3.345307097e-07f, -3.343708912e-07f, -3.342105238e-07f, -3.340496077e-07f, -3.338881435e-07f, -3.337261314e-07f, -3.335635720e-07f, -3.334004655e-07f, -3.332368125e-07f,
+-3.330726132e-07f, -3.329078681e-07f, -3.327425776e-07f, -3.325767421e-07f, -3.324103620e-07f, -3.322434376e-07f, -3.320759695e-07f, -3.319079579e-07f, -3.317394033e-07f, -3.315703061e-07f,
+-3.314006667e-07f, -3.312304856e-07f, -3.310597630e-07f, -3.308884995e-07f, -3.307166954e-07f, -3.305443511e-07f, -3.303714671e-07f, -3.301980438e-07f, -3.300240815e-07f, -3.298495807e-07f,
+-3.296745419e-07f, -3.294989653e-07f, -3.293228515e-07f, -3.291462009e-07f, -3.289690138e-07f, -3.287912907e-07f, -3.286130320e-07f, -3.284342381e-07f, -3.282549095e-07f, -3.280750466e-07f,
+-3.278946497e-07f, -3.277137194e-07f, -3.275322560e-07f, -3.273502600e-07f, -3.271677317e-07f, -3.269846717e-07f, -3.268010803e-07f, -3.266169580e-07f, -3.264323053e-07f, -3.262471224e-07f,
+-3.260614099e-07f, -3.258751682e-07f, -3.256883977e-07f, -3.255010989e-07f, -3.253132722e-07f, -3.251249180e-07f, -3.249360368e-07f, -3.247466290e-07f, -3.245566951e-07f, -3.243662354e-07f,
+-3.241752505e-07f, -3.239837407e-07f, -3.237917065e-07f, -3.235991483e-07f, -3.234060667e-07f, -3.232124619e-07f, -3.230183346e-07f, -3.228236851e-07f, -3.226285138e-07f, -3.224328212e-07f,
+-3.222366078e-07f, -3.220398741e-07f, -3.218426203e-07f, -3.216448471e-07f, -3.214465548e-07f, -3.212477440e-07f, -3.210484150e-07f, -3.208485683e-07f, -3.206482044e-07f, -3.204473238e-07f,
+-3.202459268e-07f, -3.200440139e-07f, -3.198415856e-07f, -3.196386424e-07f, -3.194351847e-07f, -3.192312130e-07f, -3.190267277e-07f, -3.188217293e-07f, -3.186162183e-07f, -3.184101950e-07f,
+-3.182036601e-07f, -3.179966139e-07f, -3.177890569e-07f, -3.175809896e-07f, -3.173724124e-07f, -3.171633259e-07f, -3.169537304e-07f, -3.167436265e-07f, -3.165330146e-07f, -3.163218952e-07f,
+-3.161102688e-07f, -3.158981358e-07f, -3.156854967e-07f, -3.154723520e-07f, -3.152587021e-07f, -3.150445476e-07f, -3.148298889e-07f, -3.146147265e-07f, -3.143990609e-07f, -3.141828924e-07f,
+-3.139662218e-07f, -3.137490493e-07f, -3.135313755e-07f, -3.133132009e-07f, -3.130945259e-07f, -3.128753511e-07f, -3.126556769e-07f, -3.124355037e-07f, -3.122148322e-07f, -3.119936628e-07f,
+-3.117719959e-07f, -3.115498320e-07f, -3.113271717e-07f, -3.111040155e-07f, -3.108803637e-07f, -3.106562170e-07f, -3.104315757e-07f, -3.102064405e-07f, -3.099808117e-07f, -3.097546900e-07f,
+-3.095280757e-07f, -3.093009694e-07f, -3.090733715e-07f, -3.088452826e-07f, -3.086167032e-07f, -3.083876338e-07f, -3.081580748e-07f, -3.079280268e-07f, -3.076974902e-07f, -3.074664656e-07f,
+-3.072349535e-07f, -3.070029544e-07f, -3.067704687e-07f, -3.065374970e-07f, -3.063040398e-07f, -3.060700976e-07f, -3.058356709e-07f, -3.056007602e-07f, -3.053653660e-07f, -3.051294888e-07f,
+-3.048931292e-07f, -3.046562876e-07f, -3.044189646e-07f, -3.041811606e-07f, -3.039428763e-07f, -3.037041120e-07f, -3.034648683e-07f, -3.032251458e-07f, -3.029849449e-07f, -3.027442661e-07f,
+-3.025031101e-07f, -3.022614772e-07f, -3.020193680e-07f, -3.017767831e-07f, -3.015337229e-07f, -3.012901880e-07f, -3.010461789e-07f, -3.008016961e-07f, -3.005567402e-07f, -3.003113116e-07f,
+-3.000654109e-07f, -2.998190386e-07f, -2.995721952e-07f, -2.993248814e-07f, -2.990770975e-07f, -2.988288441e-07f, -2.985801218e-07f, -2.983309310e-07f, -2.980812724e-07f, -2.978311464e-07f,
+-2.975805536e-07f, -2.973294945e-07f, -2.970779696e-07f, -2.968259795e-07f, -2.965735247e-07f, -2.963206058e-07f, -2.960672232e-07f, -2.958133775e-07f, -2.955590693e-07f, -2.953042991e-07f,
+-2.950490674e-07f, -2.947933747e-07f, -2.945372217e-07f, -2.942806088e-07f, -2.940235367e-07f, -2.937660057e-07f, -2.935080165e-07f, -2.932495697e-07f, -2.929906657e-07f, -2.927313051e-07f,
+-2.924714884e-07f, -2.922112163e-07f, -2.919504892e-07f, -2.916893077e-07f, -2.914276723e-07f, -2.911655836e-07f, -2.909030422e-07f, -2.906400485e-07f, -2.903766032e-07f, -2.901127068e-07f,
+-2.898483599e-07f, -2.895835629e-07f, -2.893183165e-07f, -2.890526212e-07f, -2.887864775e-07f, -2.885198861e-07f, -2.882528474e-07f, -2.879853621e-07f, -2.877174307e-07f, -2.874490537e-07f,
+-2.871802317e-07f, -2.869109653e-07f, -2.866412550e-07f, -2.863711014e-07f, -2.861005051e-07f, -2.858294665e-07f, -2.855579863e-07f, -2.852860651e-07f, -2.850137034e-07f, -2.847409017e-07f,
+-2.844676607e-07f, -2.841939809e-07f, -2.839198628e-07f, -2.836453071e-07f, -2.833703143e-07f, -2.830948849e-07f, -2.828190196e-07f, -2.825427189e-07f, -2.822659834e-07f, -2.819888136e-07f,
+-2.817112101e-07f, -2.814331736e-07f, -2.811547045e-07f, -2.808758035e-07f, -2.805964711e-07f, -2.803167079e-07f, -2.800365144e-07f, -2.797558913e-07f, -2.794748391e-07f, -2.791933585e-07f,
+-2.789114499e-07f, -2.786291140e-07f, -2.783463513e-07f, -2.780631624e-07f, -2.777795479e-07f, -2.774955085e-07f, -2.772110445e-07f, -2.769261568e-07f, -2.766408457e-07f, -2.763551120e-07f,
+-2.760689562e-07f, -2.757823788e-07f, -2.754953806e-07f, -2.752079620e-07f, -2.749201236e-07f, -2.746318661e-07f, -2.743431900e-07f, -2.740540959e-07f, -2.737645844e-07f, -2.734746560e-07f,
+-2.731843115e-07f, -2.728935514e-07f, -2.726023762e-07f, -2.723107865e-07f, -2.720187830e-07f, -2.717263663e-07f, -2.714335369e-07f, -2.711402954e-07f, -2.708466425e-07f, -2.705525787e-07f,
+-2.702581046e-07f, -2.699632208e-07f, -2.696679280e-07f, -2.693722266e-07f, -2.690761174e-07f, -2.687796009e-07f, -2.684826777e-07f, -2.681853484e-07f, -2.678876137e-07f, -2.675894740e-07f,
+-2.672909301e-07f, -2.669919825e-07f, -2.666926319e-07f, -2.663928788e-07f, -2.660927238e-07f, -2.657921675e-07f, -2.654912107e-07f, -2.651898537e-07f, -2.648880974e-07f, -2.645859422e-07f,
+-2.642833888e-07f, -2.639804378e-07f, -2.636770898e-07f, -2.633733454e-07f, -2.630692052e-07f, -2.627646698e-07f, -2.624597399e-07f, -2.621544161e-07f, -2.618486989e-07f, -2.615425890e-07f,
+-2.612360870e-07f, -2.609291936e-07f, -2.606219092e-07f, -2.603142346e-07f, -2.600061704e-07f, -2.596977171e-07f, -2.593888754e-07f, -2.590796460e-07f, -2.587700293e-07f, -2.584600262e-07f,
+-2.581496371e-07f, -2.578388626e-07f, -2.575277035e-07f, -2.572161604e-07f, -2.569042337e-07f, -2.565919243e-07f, -2.562792327e-07f, -2.559661595e-07f, -2.556527053e-07f, -2.553388708e-07f,
+-2.550246566e-07f, -2.547100633e-07f, -2.543950916e-07f, -2.540797420e-07f, -2.537640153e-07f, -2.534479120e-07f, -2.531314327e-07f, -2.528145781e-07f, -2.524973489e-07f, -2.521797456e-07f,
+-2.518617689e-07f, -2.515434193e-07f, -2.512246977e-07f, -2.509056045e-07f, -2.505861404e-07f, -2.502663060e-07f, -2.499461020e-07f, -2.496255290e-07f, -2.493045877e-07f, -2.489832786e-07f,
+-2.486616024e-07f, -2.483395598e-07f, -2.480171514e-07f, -2.476943777e-07f, -2.473712396e-07f, -2.470477375e-07f, -2.467238722e-07f, -2.463996442e-07f, -2.460750543e-07f, -2.457501030e-07f,
+-2.454247910e-07f, -2.450991190e-07f, -2.447730875e-07f, -2.444466972e-07f, -2.441199488e-07f, -2.437928429e-07f, -2.434653802e-07f, -2.431375612e-07f, -2.428093867e-07f, -2.424808572e-07f,
+-2.421519735e-07f, -2.418227362e-07f, -2.414931459e-07f, -2.411632032e-07f, -2.408329089e-07f, -2.405022635e-07f, -2.401712677e-07f, -2.398399222e-07f, -2.395082276e-07f, -2.391761846e-07f,
+-2.388437938e-07f, -2.385110558e-07f, -2.381779714e-07f, -2.378445411e-07f, -2.375107656e-07f, -2.371766456e-07f, -2.368421817e-07f, -2.365073746e-07f, -2.361722249e-07f, -2.358367334e-07f,
+-2.355009005e-07f, -2.351647270e-07f, -2.348282136e-07f, -2.344913609e-07f, -2.341541696e-07f, -2.338166403e-07f, -2.334787736e-07f, -2.331405703e-07f, -2.328020310e-07f, -2.324631564e-07f,
+-2.321239471e-07f, -2.317844037e-07f, -2.314445270e-07f, -2.311043176e-07f, -2.307637761e-07f, -2.304229033e-07f, -2.300816997e-07f, -2.297401661e-07f, -2.293983031e-07f, -2.290561113e-07f,
+-2.287135915e-07f, -2.283707443e-07f, -2.280275704e-07f, -2.276840704e-07f, -2.273402450e-07f, -2.269960948e-07f, -2.266516206e-07f, -2.263068230e-07f, -2.259617027e-07f, -2.256162602e-07f,
+-2.252704964e-07f, -2.249244118e-07f, -2.245780072e-07f, -2.242312832e-07f, -2.238842405e-07f, -2.235368797e-07f, -2.231892015e-07f, -2.228412067e-07f, -2.224928958e-07f, -2.221442695e-07f,
+-2.217953285e-07f, -2.214460735e-07f, -2.210965052e-07f, -2.207466242e-07f, -2.203964312e-07f, -2.200459269e-07f, -2.196951119e-07f, -2.193439869e-07f, -2.189925527e-07f, -2.186408098e-07f,
+-2.182887590e-07f, -2.179364009e-07f, -2.175837362e-07f, -2.172307656e-07f, -2.168774898e-07f, -2.165239094e-07f, -2.161700252e-07f, -2.158158377e-07f, -2.154613478e-07f, -2.151065560e-07f,
+-2.147514630e-07f, -2.143960696e-07f, -2.140403763e-07f, -2.136843840e-07f, -2.133280932e-07f, -2.129715047e-07f, -2.126146191e-07f, -2.122574371e-07f, -2.118999594e-07f, -2.115421868e-07f,
+-2.111841197e-07f, -2.108257591e-07f, -2.104671054e-07f, -2.101081595e-07f, -2.097489221e-07f, -2.093893937e-07f, -2.090295751e-07f, -2.086694669e-07f, -2.083090699e-07f, -2.079483848e-07f,
+-2.075874122e-07f, -2.072261528e-07f, -2.068646074e-07f, -2.065027765e-07f, -2.061406609e-07f, -2.057782613e-07f, -2.054155784e-07f, -2.050526128e-07f, -2.046893653e-07f, -2.043258365e-07f,
+-2.039620271e-07f, -2.035979379e-07f, -2.032335695e-07f, -2.028689226e-07f, -2.025039979e-07f, -2.021387961e-07f, -2.017733179e-07f, -2.014075640e-07f, -2.010415351e-07f, -2.006752318e-07f,
+-2.003086549e-07f, -1.999418051e-07f, -1.995746830e-07f, -1.992072894e-07f, -1.988396249e-07f, -1.984716903e-07f, -1.981034862e-07f, -1.977350134e-07f, -1.973662725e-07f, -1.969972642e-07f,
+-1.966279893e-07f, -1.962584484e-07f, -1.958886423e-07f, -1.955185716e-07f, -1.951482370e-07f, -1.947776393e-07f, -1.944067790e-07f, -1.940356571e-07f, -1.936642740e-07f, -1.932926306e-07f,
+-1.929207275e-07f, -1.925485655e-07f, -1.921761452e-07f, -1.918034673e-07f, -1.914305326e-07f, -1.910573418e-07f, -1.906838955e-07f, -1.903101944e-07f, -1.899362393e-07f, -1.895620309e-07f,
+-1.891875698e-07f, -1.888128569e-07f, -1.884378927e-07f, -1.880626779e-07f, -1.876872134e-07f, -1.873114998e-07f, -1.869355377e-07f, -1.865593280e-07f, -1.861828713e-07f, -1.858061683e-07f,
+-1.854292197e-07f, -1.850520263e-07f, -1.846745887e-07f, -1.842969077e-07f, -1.839189840e-07f, -1.835408182e-07f, -1.831624111e-07f, -1.827837633e-07f, -1.824048757e-07f, -1.820257489e-07f,
+-1.816463836e-07f, -1.812667806e-07f, -1.808869404e-07f, -1.805068640e-07f, -1.801265518e-07f, -1.797460048e-07f, -1.793652236e-07f, -1.789842088e-07f, -1.786029613e-07f, -1.782214816e-07f,
+-1.778397707e-07f, -1.774578290e-07f, -1.770756575e-07f, -1.766932567e-07f, -1.763106274e-07f, -1.759277703e-07f, -1.755446861e-07f, -1.751613755e-07f, -1.747778393e-07f, -1.743940782e-07f,
+-1.740100928e-07f, -1.736258839e-07f, -1.732414523e-07f, -1.728567985e-07f, -1.724719234e-07f, -1.720868277e-07f, -1.717015120e-07f, -1.713159772e-07f, -1.709302238e-07f, -1.705442527e-07f,
+-1.701580645e-07f, -1.697716600e-07f, -1.693850398e-07f, -1.689982048e-07f, -1.686111555e-07f, -1.682238929e-07f, -1.678364174e-07f, -1.674487300e-07f, -1.670608312e-07f, -1.666727218e-07f,
+-1.662844026e-07f, -1.658958743e-07f, -1.655071375e-07f, -1.651181930e-07f, -1.647290415e-07f, -1.643396838e-07f, -1.639501205e-07f, -1.635603524e-07f, -1.631703802e-07f, -1.627802047e-07f,
+-1.623898264e-07f, -1.619992463e-07f, -1.616084649e-07f, -1.612174831e-07f, -1.608263014e-07f, -1.604349208e-07f, -1.600433418e-07f, -1.596515653e-07f, -1.592595918e-07f, -1.588674223e-07f,
+-1.584750573e-07f, -1.580824976e-07f, -1.576897439e-07f, -1.572967970e-07f, -1.569036575e-07f, -1.565103263e-07f, -1.561168040e-07f, -1.557230913e-07f, -1.553291890e-07f, -1.549350979e-07f,
+-1.545408185e-07f, -1.541463517e-07f, -1.537516982e-07f, -1.533568587e-07f, -1.529618340e-07f, -1.525666247e-07f, -1.521712316e-07f, -1.517756554e-07f, -1.513798968e-07f, -1.509839566e-07f,
+-1.505878356e-07f, -1.501915343e-07f, -1.497950536e-07f, -1.493983942e-07f, -1.490015568e-07f, -1.486045421e-07f, -1.482073510e-07f, -1.478099840e-07f, -1.474124419e-07f, -1.470147255e-07f,
+-1.466168355e-07f, -1.462187726e-07f, -1.458205375e-07f, -1.454221310e-07f, -1.450235538e-07f, -1.446248067e-07f, -1.442258903e-07f, -1.438268054e-07f, -1.434275527e-07f, -1.430281330e-07f,
+-1.426285470e-07f, -1.422287954e-07f, -1.418288789e-07f, -1.414287984e-07f, -1.410285544e-07f, -1.406281478e-07f, -1.402275792e-07f, -1.398268495e-07f, -1.394259593e-07f, -1.390249094e-07f,
+-1.386237004e-07f, -1.382223332e-07f, -1.378208085e-07f, -1.374191270e-07f, -1.370172894e-07f, -1.366152964e-07f, -1.362131489e-07f, -1.358108475e-07f, -1.354083930e-07f, -1.350057860e-07f,
+-1.346030274e-07f, -1.342001178e-07f, -1.337970581e-07f, -1.333938489e-07f, -1.329904909e-07f, -1.325869850e-07f, -1.321833317e-07f, -1.317795320e-07f, -1.313755864e-07f, -1.309714958e-07f,
+-1.305672608e-07f, -1.301628823e-07f, -1.297583609e-07f, -1.293536973e-07f, -1.289488924e-07f, -1.285439468e-07f, -1.281388613e-07f, -1.277336366e-07f, -1.273282735e-07f, -1.269227726e-07f,
+-1.265171348e-07f, -1.261113607e-07f, -1.257054511e-07f, -1.252994067e-07f, -1.248932283e-07f, -1.244869166e-07f, -1.240804723e-07f, -1.236738962e-07f, -1.232671890e-07f, -1.228603514e-07f,
+-1.224533843e-07f, -1.220462882e-07f, -1.216390640e-07f, -1.212317123e-07f, -1.208242340e-07f, -1.204166298e-07f, -1.200089003e-07f, -1.196010464e-07f, -1.191930687e-07f, -1.187849681e-07f,
+-1.183767452e-07f, -1.179684007e-07f, -1.175599355e-07f, -1.171513503e-07f, -1.167426457e-07f, -1.163338226e-07f, -1.159248816e-07f, -1.155158235e-07f, -1.151066491e-07f, -1.146973591e-07f,
+-1.142879541e-07f, -1.138784351e-07f, -1.134688026e-07f, -1.130590574e-07f, -1.126492003e-07f, -1.122392320e-07f, -1.118291533e-07f, -1.114189648e-07f, -1.110086673e-07f, -1.105982616e-07f,
+-1.101877484e-07f, -1.097771284e-07f, -1.093664024e-07f, -1.089555711e-07f, -1.085446352e-07f, -1.081335955e-07f, -1.077224528e-07f, -1.073112077e-07f, -1.068998610e-07f, -1.064884134e-07f,
+-1.060768657e-07f, -1.056652186e-07f, -1.052534728e-07f, -1.048416292e-07f, -1.044296884e-07f, -1.040176511e-07f, -1.036055181e-07f, -1.031932902e-07f, -1.027809680e-07f, -1.023685524e-07f,
+-1.019560440e-07f, -1.015434436e-07f, -1.011307520e-07f, -1.007179698e-07f, -1.003050978e-07f, -9.989213679e-08f, -9.947908745e-08f, -9.906595052e-08f, -9.865272676e-08f, -9.823941690e-08f,
+-9.782602168e-08f, -9.741254184e-08f, -9.699897811e-08f, -9.658533123e-08f, -9.617160195e-08f, -9.575779099e-08f, -9.534389910e-08f, -9.492992702e-08f, -9.451587549e-08f, -9.410174524e-08f,
+-9.368753701e-08f, -9.327325154e-08f, -9.285888957e-08f, -9.244445183e-08f, -9.202993907e-08f, -9.161535202e-08f, -9.120069143e-08f, -9.078595802e-08f, -9.037115254e-08f, -8.995627572e-08f,
+-8.954132831e-08f, -8.912631104e-08f, -8.871122465e-08f, -8.829606987e-08f, -8.788084745e-08f, -8.746555812e-08f, -8.705020263e-08f, -8.663478170e-08f, -8.621929608e-08f, -8.580374650e-08f,
+-8.538813371e-08f, -8.497245843e-08f, -8.455672142e-08f, -8.414092339e-08f, -8.372506510e-08f, -8.330914728e-08f, -8.289317067e-08f, -8.247713600e-08f, -8.206104401e-08f, -8.164489545e-08f,
+-8.122869104e-08f, -8.081243152e-08f, -8.039611763e-08f, -7.997975011e-08f, -7.956332970e-08f, -7.914685713e-08f, -7.873033313e-08f, -7.831375845e-08f, -7.789713383e-08f, -7.748045999e-08f,
+-7.706373768e-08f, -7.664696763e-08f, -7.623015058e-08f, -7.581328726e-08f, -7.539637842e-08f, -7.497942478e-08f, -7.456242709e-08f, -7.414538608e-08f, -7.372830248e-08f, -7.331117703e-08f,
+-7.289401048e-08f, -7.247680354e-08f, -7.205955697e-08f, -7.164227149e-08f, -7.122494784e-08f, -7.080758676e-08f, -7.039018898e-08f, -6.997275523e-08f, -6.955528626e-08f, -6.913778280e-08f,
+-6.872024557e-08f, -6.830267533e-08f, -6.788507279e-08f, -6.746743871e-08f, -6.704977380e-08f, -6.663207881e-08f, -6.621435447e-08f, -6.579660152e-08f, -6.537882068e-08f, -6.496101270e-08f,
+-6.454317830e-08f, -6.412531823e-08f, -6.370743321e-08f, -6.328952397e-08f, -6.287159127e-08f, -6.245363581e-08f, -6.203565835e-08f, -6.161765961e-08f, -6.119964032e-08f, -6.078160122e-08f,
+-6.036354305e-08f, -5.994546653e-08f, -5.952737239e-08f, -5.910926138e-08f, -5.869113422e-08f, -5.827299164e-08f, -5.785483438e-08f, -5.743666316e-08f, -5.701847873e-08f, -5.660028181e-08f,
+-5.618207314e-08f, -5.576385344e-08f, -5.534562345e-08f, -5.492738389e-08f, -5.450913551e-08f, -5.409087903e-08f, -5.367261518e-08f, -5.325434469e-08f, -5.283606829e-08f, -5.241778672e-08f,
+-5.199950070e-08f, -5.158121096e-08f, -5.116291824e-08f, -5.074462327e-08f, -5.032632676e-08f, -4.990802946e-08f, -4.948973210e-08f, -4.907143539e-08f, -4.865314008e-08f, -4.823484688e-08f,
+-4.781655654e-08f, -4.739826977e-08f, -4.697998731e-08f, -4.656170988e-08f, -4.614343822e-08f, -4.572517305e-08f, -4.530691509e-08f, -4.488866509e-08f, -4.447042375e-08f, -4.405219182e-08f,
+-4.363397002e-08f, -4.321575907e-08f, -4.279755970e-08f, -4.237937265e-08f, -4.196119863e-08f, -4.154303837e-08f, -4.112489260e-08f, -4.070676205e-08f, -4.028864744e-08f, -3.987054949e-08f,
+-3.945246893e-08f, -3.903440649e-08f, -3.861636290e-08f, -3.819833886e-08f, -3.778033513e-08f, -3.736235240e-08f, -3.694439142e-08f, -3.652645290e-08f, -3.610853758e-08f, -3.569064616e-08f,
+-3.527277938e-08f, -3.485493796e-08f, -3.443712263e-08f, -3.401933410e-08f, -3.360157310e-08f, -3.318384035e-08f, -3.276613657e-08f, -3.234846249e-08f, -3.193081883e-08f, -3.151320631e-08f,
+-3.109562565e-08f, -3.067807758e-08f, -3.026056280e-08f, -2.984308206e-08f, -2.942563606e-08f, -2.900822553e-08f, -2.859085118e-08f, -2.817351375e-08f, -2.775621394e-08f, -2.733895248e-08f,
+-2.692173008e-08f, -2.650454747e-08f, -2.608740537e-08f, -2.567030449e-08f, -2.525324555e-08f, -2.483622928e-08f, -2.441925638e-08f, -2.400232758e-08f, -2.358544360e-08f, -2.316860515e-08f,
+-2.275181295e-08f, -2.233506772e-08f, -2.191837017e-08f, -2.150172103e-08f, -2.108512100e-08f, -2.066857080e-08f, -2.025207115e-08f, -1.983562277e-08f, -1.941922637e-08f, -1.900288266e-08f,
+-1.858659237e-08f, -1.817035620e-08f, -1.775417486e-08f, -1.733804909e-08f, -1.692197958e-08f, -1.650596705e-08f, -1.609001222e-08f, -1.567411580e-08f, -1.525827850e-08f, -1.484250103e-08f,
+-1.442678411e-08f, -1.401112845e-08f, -1.359553476e-08f, -1.318000375e-08f, -1.276453614e-08f, -1.234913263e-08f, -1.193379394e-08f, -1.151852078e-08f, -1.110331385e-08f, -1.068817387e-08f,
+-1.027310155e-08f, -9.858097599e-09f, -9.443162723e-09f, -9.028297633e-09f, -8.613503037e-09f, -8.198779645e-09f, -7.784128164e-09f, -7.369549303e-09f, -6.955043769e-09f, -6.540612271e-09f,
+-6.126255514e-09f, -5.711974207e-09f, -5.297769055e-09f, -4.883640765e-09f, -4.469590044e-09f, -4.055617596e-09f, -3.641724128e-09f, -3.227910345e-09f, -2.814176952e-09f, -2.400524653e-09f,
+-1.986954152e-09f, -1.573466155e-09f, -1.160061364e-09f, -7.467404840e-10f, -3.335042170e-10f, 7.964673359e-11f, 4.927116652e-10f, 9.056898754e-10f, 1.318580662e-09f, 1.731383324e-09f,
+2.144097159e-09f, 2.556721466e-09f, 2.969255545e-09f, 3.381698695e-09f, 3.794050215e-09f, 4.206309406e-09f, 4.618475568e-09f, 5.030548002e-09f, 5.442526009e-09f, 5.854408889e-09f,
+6.266195946e-09f, 6.677886480e-09f, 7.089479794e-09f, 7.500975190e-09f, 7.912371971e-09f, 8.323669441e-09f, 8.734866903e-09f, 9.145963661e-09f, 9.556959018e-09f, 9.967852280e-09f,
+1.037864275e-08f, 1.078932974e-08f, 1.119991254e-08f, 1.161039047e-08f, 1.202076283e-08f, 1.243102893e-08f, 1.284118808e-08f, 1.325123958e-08f, 1.366118273e-08f, 1.407101685e-08f,
+1.448074125e-08f, 1.489035523e-08f, 1.529985811e-08f, 1.570924918e-08f, 1.611852777e-08f, 1.652769317e-08f, 1.693674471e-08f, 1.734568169e-08f, 1.775450342e-08f, 1.816320921e-08f,
+1.857179837e-08f, 1.898027023e-08f, 1.938862408e-08f, 1.979685924e-08f, 2.020497502e-08f, 2.061297075e-08f, 2.102084572e-08f, 2.142859926e-08f, 2.183623068e-08f, 2.224373929e-08f,
+2.265112440e-08f, 2.305838535e-08f, 2.346552143e-08f, 2.387253196e-08f, 2.427941627e-08f, 2.468617367e-08f, 2.509280348e-08f, 2.549930500e-08f, 2.590567757e-08f, 2.631192050e-08f,
+2.671803311e-08f, 2.712401471e-08f, 2.752986463e-08f, 2.793558219e-08f, 2.834116670e-08f, 2.874661749e-08f, 2.915193388e-08f, 2.955711519e-08f, 2.996216073e-08f, 3.036706984e-08f,
+3.077184184e-08f, 3.117647604e-08f, 3.158097178e-08f, 3.198532836e-08f, 3.238954513e-08f, 3.279362140e-08f, 3.319755649e-08f, 3.360134974e-08f, 3.400500047e-08f, 3.440850800e-08f,
+3.481187166e-08f, 3.521509077e-08f, 3.561816467e-08f, 3.602109268e-08f, 3.642387413e-08f, 3.682650834e-08f, 3.722899465e-08f, 3.763133239e-08f, 3.803352087e-08f, 3.843555944e-08f,
+3.883744743e-08f, 3.923918416e-08f, 3.964076896e-08f, 4.004220117e-08f, 4.044348012e-08f, 4.084460514e-08f, 4.124557556e-08f, 4.164639072e-08f, 4.204704994e-08f, 4.244755258e-08f,
+4.284789794e-08f, 4.324808538e-08f, 4.364811423e-08f, 4.404798382e-08f, 4.444769349e-08f, 4.484724258e-08f, 4.524663042e-08f, 4.564585634e-08f, 4.604491969e-08f, 4.644381981e-08f,
+4.684255603e-08f, 4.724112769e-08f, 4.763953413e-08f, 4.803777470e-08f, 4.843584872e-08f, 4.883375555e-08f, 4.923149452e-08f, 4.962906497e-08f, 5.002646625e-08f, 5.042369769e-08f,
+5.082075865e-08f, 5.121764846e-08f, 5.161436647e-08f, 5.201091202e-08f, 5.240728446e-08f, 5.280348312e-08f, 5.319950736e-08f, 5.359535653e-08f, 5.399102996e-08f, 5.438652701e-08f,
+5.478184702e-08f, 5.517698934e-08f, 5.557195331e-08f, 5.596673830e-08f, 5.636134363e-08f, 5.675576868e-08f, 5.715001277e-08f, 5.754407527e-08f, 5.793795552e-08f, 5.833165288e-08f,
+5.872516670e-08f, 5.911849633e-08f, 5.951164112e-08f, 5.990460042e-08f, 6.029737360e-08f, 6.068995999e-08f, 6.108235896e-08f, 6.147456987e-08f, 6.186659206e-08f, 6.225842489e-08f,
+6.265006773e-08f, 6.304151991e-08f, 6.343278081e-08f, 6.382384978e-08f, 6.421472618e-08f, 6.460540937e-08f, 6.499589870e-08f, 6.538619354e-08f, 6.577629324e-08f, 6.616619717e-08f,
+6.655590468e-08f, 6.694541514e-08f, 6.733472792e-08f, 6.772384236e-08f, 6.811275784e-08f, 6.850147372e-08f, 6.888998936e-08f, 6.927830412e-08f, 6.966641738e-08f, 7.005432849e-08f,
+7.044203683e-08f, 7.082954175e-08f, 7.121684263e-08f, 7.160393883e-08f, 7.199082972e-08f, 7.237751467e-08f, 7.276399304e-08f, 7.315026421e-08f, 7.353632755e-08f, 7.392218242e-08f,
+7.430782820e-08f, 7.469326425e-08f, 7.507848995e-08f, 7.546350468e-08f, 7.584830779e-08f, 7.623289868e-08f, 7.661727670e-08f, 7.700144124e-08f, 7.738539166e-08f, 7.776912735e-08f,
+7.815264769e-08f, 7.853595203e-08f, 7.891903977e-08f, 7.930191028e-08f, 7.968456293e-08f, 8.006699711e-08f, 8.044921220e-08f, 8.083120757e-08f, 8.121298260e-08f, 8.159453667e-08f,
+8.197586917e-08f, 8.235697947e-08f, 8.273786696e-08f, 8.311853102e-08f, 8.349897103e-08f, 8.387918638e-08f, 8.425917644e-08f, 8.463894061e-08f, 8.501847827e-08f, 8.539778880e-08f,
+8.577687159e-08f, 8.615572602e-08f, 8.653435149e-08f, 8.691274738e-08f, 8.729091308e-08f, 8.766884798e-08f, 8.804655146e-08f, 8.842402292e-08f, 8.880126175e-08f, 8.917826733e-08f,
+8.955503906e-08f, 8.993157633e-08f, 9.030787853e-08f, 9.068394506e-08f, 9.105977530e-08f, 9.143536866e-08f, 9.181072452e-08f, 9.218584229e-08f, 9.256072135e-08f, 9.293536111e-08f,
+9.330976096e-08f, 9.368392029e-08f, 9.405783851e-08f, 9.443151501e-08f, 9.480494919e-08f, 9.517814046e-08f, 9.555108821e-08f, 9.592379183e-08f, 9.629625075e-08f, 9.666846434e-08f,
+9.704043202e-08f, 9.741215319e-08f, 9.778362726e-08f, 9.815485362e-08f, 9.852583168e-08f, 9.889656084e-08f, 9.926704052e-08f, 9.963727011e-08f, 1.000072490e-07f, 1.003769767e-07f,
+1.007464525e-07f, 1.011156758e-07f, 1.014846461e-07f, 1.018533627e-07f, 1.022218252e-07f, 1.025900328e-07f, 1.029579850e-07f, 1.033256812e-07f, 1.036931208e-07f, 1.040603033e-07f,
+1.044272280e-07f, 1.047938944e-07f, 1.051603018e-07f, 1.055264498e-07f, 1.058923376e-07f, 1.062579648e-07f, 1.066233307e-07f, 1.069884348e-07f, 1.073532764e-07f, 1.077178550e-07f,
+1.080821701e-07f, 1.084462209e-07f, 1.088100071e-07f, 1.091735279e-07f, 1.095367828e-07f, 1.098997712e-07f, 1.102624925e-07f, 1.106249462e-07f, 1.109871317e-07f, 1.113490484e-07f,
+1.117106958e-07f, 1.120720732e-07f, 1.124331800e-07f, 1.127940158e-07f, 1.131545800e-07f, 1.135148719e-07f, 1.138748910e-07f, 1.142346368e-07f, 1.145941085e-07f, 1.149533058e-07f,
+1.153122280e-07f, 1.156708746e-07f, 1.160292449e-07f, 1.163873384e-07f, 1.167451546e-07f, 1.171026929e-07f, 1.174599527e-07f, 1.178169334e-07f, 1.181736346e-07f, 1.185300555e-07f,
+1.188861957e-07f, 1.192420547e-07f, 1.195976317e-07f, 1.199529263e-07f, 1.203079380e-07f, 1.206626660e-07f, 1.210171100e-07f, 1.213712694e-07f, 1.217251435e-07f, 1.220787318e-07f,
+1.224320338e-07f, 1.227850489e-07f, 1.231377765e-07f, 1.234902161e-07f, 1.238423672e-07f, 1.241942292e-07f, 1.245458015e-07f, 1.248970836e-07f, 1.252480749e-07f, 1.255987749e-07f,
+1.259491830e-07f, 1.262992987e-07f, 1.266491215e-07f, 1.269986507e-07f, 1.273478858e-07f, 1.276968264e-07f, 1.280454718e-07f, 1.283938214e-07f, 1.287418748e-07f, 1.290896314e-07f,
+1.294370907e-07f, 1.297842521e-07f, 1.301311150e-07f, 1.304776790e-07f, 1.308239434e-07f, 1.311699078e-07f, 1.315155717e-07f, 1.318609343e-07f, 1.322059953e-07f, 1.325507541e-07f,
+1.328952101e-07f, 1.332393628e-07f, 1.335832117e-07f, 1.339267563e-07f, 1.342699959e-07f, 1.346129301e-07f, 1.349555584e-07f, 1.352978801e-07f, 1.356398948e-07f, 1.359816020e-07f,
+1.363230010e-07f, 1.366640914e-07f, 1.370048727e-07f, 1.373453442e-07f, 1.376855056e-07f, 1.380253562e-07f, 1.383648955e-07f, 1.387041230e-07f, 1.390430382e-07f, 1.393816405e-07f,
+1.397199295e-07f, 1.400579046e-07f, 1.403955652e-07f, 1.407329109e-07f, 1.410699411e-07f, 1.414066553e-07f, 1.417430530e-07f, 1.420791337e-07f, 1.424148968e-07f, 1.427503418e-07f,
+1.430854682e-07f, 1.434202756e-07f, 1.437547633e-07f, 1.440889308e-07f, 1.444227777e-07f, 1.447563035e-07f, 1.450895075e-07f, 1.454223893e-07f, 1.457549484e-07f, 1.460871843e-07f,
+1.464190965e-07f, 1.467506843e-07f, 1.470819475e-07f, 1.474128853e-07f, 1.477434974e-07f, 1.480737832e-07f, 1.484037422e-07f, 1.487333739e-07f, 1.490626777e-07f, 1.493916533e-07f,
+1.497203000e-07f, 1.500486174e-07f, 1.503766050e-07f, 1.507042622e-07f, 1.510315886e-07f, 1.513585837e-07f, 1.516852469e-07f, 1.520115778e-07f, 1.523375759e-07f, 1.526632406e-07f,
+1.529885715e-07f, 1.533135681e-07f, 1.536382298e-07f, 1.539625562e-07f, 1.542865468e-07f, 1.546102010e-07f, 1.549335185e-07f, 1.552564986e-07f, 1.555791410e-07f, 1.559014451e-07f,
+1.562234103e-07f, 1.565450364e-07f, 1.568663226e-07f, 1.571872686e-07f, 1.575078739e-07f, 1.578281380e-07f, 1.581480603e-07f, 1.584676405e-07f, 1.587868779e-07f, 1.591057722e-07f,
+1.594243228e-07f, 1.597425293e-07f, 1.600603912e-07f, 1.603779080e-07f, 1.606950792e-07f, 1.610119043e-07f, 1.613283829e-07f, 1.616445145e-07f, 1.619602985e-07f, 1.622757346e-07f,
+1.625908222e-07f, 1.629055609e-07f, 1.632199502e-07f, 1.635339896e-07f, 1.638476786e-07f, 1.641610168e-07f, 1.644740037e-07f, 1.647866388e-07f, 1.650989217e-07f, 1.654108518e-07f,
+1.657224288e-07f, 1.660336521e-07f, 1.663445212e-07f, 1.666550358e-07f, 1.669651953e-07f, 1.672749993e-07f, 1.675844472e-07f, 1.678935387e-07f, 1.682022733e-07f, 1.685106505e-07f,
+1.688186699e-07f, 1.691263309e-07f, 1.694336331e-07f, 1.697405761e-07f, 1.700471594e-07f, 1.703533826e-07f, 1.706592451e-07f, 1.709647466e-07f, 1.712698865e-07f, 1.715746645e-07f,
+1.718790800e-07f, 1.721831326e-07f, 1.724868218e-07f, 1.727901473e-07f, 1.730931085e-07f, 1.733957049e-07f, 1.736979362e-07f, 1.739998019e-07f, 1.743013016e-07f, 1.746024347e-07f,
+1.749032009e-07f, 1.752035996e-07f, 1.755036305e-07f, 1.758032931e-07f, 1.761025870e-07f, 1.764015117e-07f, 1.767000667e-07f, 1.769982517e-07f, 1.772960661e-07f, 1.775935096e-07f,
+1.778905816e-07f, 1.781872818e-07f, 1.784836098e-07f, 1.787795650e-07f, 1.790751471e-07f, 1.793703555e-07f, 1.796651899e-07f, 1.799596499e-07f, 1.802537349e-07f, 1.805474447e-07f,
+1.808407786e-07f, 1.811337363e-07f, 1.814263174e-07f, 1.817185215e-07f, 1.820103480e-07f, 1.823017966e-07f, 1.825928668e-07f, 1.828835583e-07f, 1.831738705e-07f, 1.834638031e-07f,
+1.837533556e-07f, 1.840425277e-07f, 1.843313188e-07f, 1.846197285e-07f, 1.849077566e-07f, 1.851954024e-07f, 1.854826656e-07f, 1.857695458e-07f, 1.860560425e-07f, 1.863421554e-07f,
+1.866278840e-07f, 1.869132279e-07f, 1.871981866e-07f, 1.874827598e-07f, 1.877669471e-07f, 1.880507480e-07f, 1.883341621e-07f, 1.886171890e-07f, 1.888998284e-07f, 1.891820796e-07f,
+1.894639425e-07f, 1.897454165e-07f, 1.900265013e-07f, 1.903071964e-07f, 1.905875015e-07f, 1.908674161e-07f, 1.911469397e-07f, 1.914260722e-07f, 1.917048129e-07f, 1.919831615e-07f,
+1.922611176e-07f, 1.925386809e-07f, 1.928158508e-07f, 1.930926270e-07f, 1.933690092e-07f, 1.936449968e-07f, 1.939205895e-07f, 1.941957869e-07f, 1.944705887e-07f, 1.947449943e-07f,
+1.950190035e-07f, 1.952926157e-07f, 1.955658307e-07f, 1.958386481e-07f, 1.961110673e-07f, 1.963830881e-07f, 1.966547101e-07f, 1.969259328e-07f, 1.971967559e-07f, 1.974671790e-07f,
+1.977372017e-07f, 1.980068237e-07f, 1.982760444e-07f, 1.985448636e-07f, 1.988132808e-07f, 1.990812957e-07f, 1.993489080e-07f, 1.996161171e-07f, 1.998829227e-07f, 2.001493245e-07f,
+2.004153221e-07f, 2.006809150e-07f, 2.009461030e-07f, 2.012108855e-07f, 2.014752624e-07f, 2.017392331e-07f, 2.020027973e-07f, 2.022659547e-07f, 2.025287048e-07f, 2.027910473e-07f,
+2.030529818e-07f, 2.033145079e-07f, 2.035756253e-07f, 2.038363336e-07f, 2.040966325e-07f, 2.043565215e-07f, 2.046160003e-07f, 2.048750685e-07f, 2.051337258e-07f, 2.053919718e-07f,
+2.056498061e-07f, 2.059072284e-07f, 2.061642383e-07f, 2.064208354e-07f, 2.066770195e-07f, 2.069327900e-07f, 2.071881467e-07f, 2.074430893e-07f, 2.076976173e-07f, 2.079517303e-07f,
+2.082054282e-07f, 2.084587104e-07f, 2.087115766e-07f, 2.089640265e-07f, 2.092160597e-07f, 2.094676759e-07f, 2.097188747e-07f, 2.099696558e-07f, 2.102200188e-07f, 2.104699633e-07f,
+2.107194891e-07f, 2.109685958e-07f, 2.112172829e-07f, 2.114655503e-07f, 2.117133975e-07f, 2.119608242e-07f, 2.122078300e-07f, 2.124544147e-07f, 2.127005778e-07f, 2.129463190e-07f,
+2.131916380e-07f, 2.134365345e-07f, 2.136810081e-07f, 2.139250584e-07f, 2.141686852e-07f, 2.144118880e-07f, 2.146546667e-07f, 2.148970207e-07f, 2.151389499e-07f, 2.153804538e-07f,
+2.156215321e-07f, 2.158621845e-07f, 2.161024107e-07f, 2.163422104e-07f, 2.165815831e-07f, 2.168205286e-07f, 2.170590466e-07f, 2.172971367e-07f, 2.175347986e-07f, 2.177720320e-07f,
+2.180088366e-07f, 2.182452119e-07f, 2.184811578e-07f, 2.187166739e-07f, 2.189517598e-07f, 2.191864153e-07f, 2.194206400e-07f, 2.196544336e-07f, 2.198877959e-07f, 2.201207264e-07f,
+2.203532248e-07f, 2.205852909e-07f, 2.208169244e-07f, 2.210481248e-07f, 2.212788920e-07f, 2.215092255e-07f, 2.217391252e-07f, 2.219685906e-07f, 2.221976215e-07f, 2.224262175e-07f,
+2.226543784e-07f, 2.228821039e-07f, 2.231093936e-07f, 2.233362472e-07f, 2.235626644e-07f, 2.237886450e-07f, 2.240141886e-07f, 2.242392949e-07f, 2.244639637e-07f, 2.246881945e-07f,
+2.249119872e-07f, 2.251353414e-07f, 2.253582569e-07f, 2.255807333e-07f, 2.258027703e-07f, 2.260243676e-07f, 2.262455250e-07f, 2.264662422e-07f, 2.266865188e-07f, 2.269063546e-07f,
+2.271257492e-07f, 2.273447025e-07f, 2.275632140e-07f, 2.277812836e-07f, 2.279989108e-07f, 2.282160955e-07f, 2.284328374e-07f, 2.286491361e-07f, 2.288649915e-07f, 2.290804031e-07f,
+2.292953707e-07f, 2.295098941e-07f, 2.297239729e-07f, 2.299376069e-07f, 2.301507958e-07f, 2.303635393e-07f, 2.305758371e-07f, 2.307876890e-07f, 2.309990947e-07f, 2.312100539e-07f,
+2.314205664e-07f, 2.316306318e-07f, 2.318402499e-07f, 2.320494204e-07f, 2.322581431e-07f, 2.324664177e-07f, 2.326742438e-07f, 2.328816213e-07f, 2.330885499e-07f, 2.332950293e-07f,
+2.335010593e-07f, 2.337066395e-07f, 2.339117697e-07f, 2.341164497e-07f, 2.343206792e-07f, 2.345244579e-07f, 2.347277855e-07f, 2.349306619e-07f, 2.351330867e-07f, 2.353350598e-07f,
+2.355365807e-07f, 2.357376493e-07f, 2.359382654e-07f, 2.361384286e-07f, 2.363381387e-07f, 2.365373955e-07f, 2.367361987e-07f, 2.369345480e-07f, 2.371324433e-07f, 2.373298842e-07f,
+2.375268705e-07f, 2.377234020e-07f, 2.379194784e-07f, 2.381150994e-07f, 2.383102649e-07f, 2.385049746e-07f, 2.386992282e-07f, 2.388930254e-07f, 2.390863662e-07f, 2.392792501e-07f,
+2.394716770e-07f, 2.396636466e-07f, 2.398551587e-07f, 2.400462131e-07f, 2.402368094e-07f, 2.404269476e-07f, 2.406166273e-07f, 2.408058483e-07f, 2.409946104e-07f, 2.411829133e-07f,
+2.413707568e-07f, 2.415581407e-07f, 2.417450648e-07f, 2.419315287e-07f, 2.421175324e-07f, 2.423030755e-07f, 2.424881579e-07f, 2.426727793e-07f, 2.428569394e-07f, 2.430406381e-07f,
+2.432238752e-07f, 2.434066504e-07f, 2.435889634e-07f, 2.437708142e-07f, 2.439522024e-07f, 2.441331278e-07f, 2.443135903e-07f, 2.444935895e-07f, 2.446731253e-07f, 2.448521975e-07f,
+2.450308059e-07f, 2.452089502e-07f, 2.453866302e-07f, 2.455638457e-07f, 2.457405965e-07f, 2.459168825e-07f, 2.460927033e-07f, 2.462680588e-07f, 2.464429487e-07f, 2.466173729e-07f,
+2.467913312e-07f, 2.469648233e-07f, 2.471378490e-07f, 2.473104082e-07f, 2.474825006e-07f, 2.476541261e-07f, 2.478252843e-07f, 2.479959753e-07f, 2.481661986e-07f, 2.483359542e-07f,
+2.485052418e-07f, 2.486740613e-07f, 2.488424124e-07f, 2.490102950e-07f, 2.491777088e-07f, 2.493446537e-07f, 2.495111294e-07f, 2.496771359e-07f, 2.498426728e-07f, 2.500077400e-07f,
+2.501723373e-07f, 2.503364646e-07f, 2.505001216e-07f, 2.506633081e-07f, 2.508260240e-07f, 2.509882691e-07f, 2.511500431e-07f, 2.513113460e-07f, 2.514721775e-07f, 2.516325374e-07f,
+2.517924257e-07f, 2.519518420e-07f, 2.521107862e-07f, 2.522692581e-07f, 2.524272576e-07f, 2.525847845e-07f, 2.527418386e-07f, 2.528984197e-07f, 2.530545276e-07f, 2.532101623e-07f,
+2.533653234e-07f, 2.535200109e-07f, 2.536742246e-07f, 2.538279642e-07f, 2.539812297e-07f, 2.541340209e-07f, 2.542863376e-07f, 2.544381796e-07f, 2.545895467e-07f, 2.547404389e-07f,
+2.548908559e-07f, 2.550407976e-07f, 2.551902638e-07f, 2.553392543e-07f, 2.554877691e-07f, 2.556358079e-07f, 2.557833705e-07f, 2.559304569e-07f, 2.560770669e-07f, 2.562232003e-07f,
+2.563688569e-07f, 2.565140366e-07f, 2.566587393e-07f, 2.568029648e-07f, 2.569467130e-07f, 2.570899836e-07f, 2.572327766e-07f, 2.573750918e-07f, 2.575169290e-07f, 2.576582881e-07f,
+2.577991690e-07f, 2.579395715e-07f, 2.580794955e-07f, 2.582189409e-07f, 2.583579074e-07f, 2.584963949e-07f, 2.586344034e-07f, 2.587719326e-07f, 2.589089824e-07f, 2.590455528e-07f,
+2.591816434e-07f, 2.593172543e-07f, 2.594523853e-07f, 2.595870362e-07f, 2.597212070e-07f, 2.598548974e-07f, 2.599881073e-07f, 2.601208367e-07f, 2.602530853e-07f, 2.603848532e-07f,
+2.605161400e-07f, 2.606469457e-07f, 2.607772702e-07f, 2.609071134e-07f, 2.610364751e-07f, 2.611653551e-07f, 2.612937535e-07f, 2.614216700e-07f, 2.615491045e-07f, 2.616760570e-07f,
+2.618025272e-07f, 2.619285151e-07f, 2.620540206e-07f, 2.621790435e-07f, 2.623035837e-07f, 2.624276411e-07f, 2.625512156e-07f, 2.626743071e-07f, 2.627969154e-07f, 2.629190405e-07f,
+2.630406823e-07f, 2.631618406e-07f, 2.632825152e-07f, 2.634027063e-07f, 2.635224135e-07f, 2.636416368e-07f, 2.637603761e-07f, 2.638786313e-07f, 2.639964022e-07f, 2.641136889e-07f,
+2.642304911e-07f, 2.643468088e-07f, 2.644626419e-07f, 2.645779903e-07f, 2.646928538e-07f, 2.648072324e-07f, 2.649211260e-07f, 2.650345345e-07f, 2.651474577e-07f, 2.652598957e-07f,
+2.653718483e-07f, 2.654833153e-07f, 2.655942968e-07f, 2.657047926e-07f, 2.658148027e-07f, 2.659243269e-07f, 2.660333651e-07f, 2.661419174e-07f, 2.662499835e-07f, 2.663575634e-07f,
+2.664646570e-07f, 2.665712642e-07f, 2.666773850e-07f, 2.667830193e-07f, 2.668881669e-07f, 2.669928278e-07f, 2.670970020e-07f, 2.672006892e-07f, 2.673038896e-07f, 2.674066029e-07f,
+2.675088292e-07f, 2.676105683e-07f, 2.677118201e-07f, 2.678125846e-07f, 2.679128618e-07f, 2.680126514e-07f, 2.681119536e-07f, 2.682107681e-07f, 2.683090950e-07f, 2.684069342e-07f,
+2.685042855e-07f, 2.686011490e-07f, 2.686975245e-07f, 2.687934120e-07f, 2.688888114e-07f, 2.689837228e-07f, 2.690781459e-07f, 2.691720807e-07f, 2.692655273e-07f, 2.693584855e-07f,
+2.694509552e-07f, 2.695429364e-07f, 2.696344291e-07f, 2.697254332e-07f, 2.698159486e-07f, 2.699059753e-07f, 2.699955133e-07f, 2.700845624e-07f, 2.701731226e-07f, 2.702611939e-07f,
+2.703487762e-07f, 2.704358695e-07f, 2.705224737e-07f, 2.706085888e-07f, 2.706942148e-07f, 2.707793515e-07f, 2.708639989e-07f, 2.709481570e-07f, 2.710318258e-07f, 2.711150052e-07f,
+2.711976952e-07f, 2.712798957e-07f, 2.713616067e-07f, 2.714428281e-07f, 2.715235599e-07f, 2.716038021e-07f, 2.716835546e-07f, 2.717628174e-07f, 2.718415905e-07f, 2.719198739e-07f,
+2.719976674e-07f, 2.720749711e-07f, 2.721517849e-07f, 2.722281088e-07f, 2.723039428e-07f, 2.723792868e-07f, 2.724541408e-07f, 2.725285049e-07f, 2.726023789e-07f, 2.726757628e-07f,
+2.727486567e-07f, 2.728210604e-07f, 2.728929740e-07f, 2.729643975e-07f, 2.730353307e-07f, 2.731057738e-07f, 2.731757267e-07f, 2.732451893e-07f, 2.733141617e-07f, 2.733826438e-07f,
+2.734506356e-07f, 2.735181371e-07f, 2.735851483e-07f, 2.736516692e-07f, 2.737176998e-07f, 2.737832400e-07f, 2.738482898e-07f, 2.739128493e-07f, 2.739769183e-07f, 2.740404970e-07f,
+2.741035853e-07f, 2.741661832e-07f, 2.742282907e-07f, 2.742899078e-07f, 2.743510345e-07f, 2.744116707e-07f, 2.744718165e-07f, 2.745314720e-07f, 2.745906369e-07f, 2.746493115e-07f,
+2.747074956e-07f, 2.747651894e-07f, 2.748223927e-07f, 2.748791055e-07f, 2.749353280e-07f, 2.749910601e-07f, 2.750463018e-07f, 2.751010531e-07f, 2.751553140e-07f, 2.752090846e-07f,
+2.752623648e-07f, 2.753151546e-07f, 2.753674542e-07f, 2.754192633e-07f, 2.754705822e-07f, 2.755214108e-07f, 2.755717491e-07f, 2.756215971e-07f, 2.756709549e-07f, 2.757198224e-07f,
+2.757681998e-07f, 2.758160869e-07f, 2.758634839e-07f, 2.759103907e-07f, 2.759568073e-07f, 2.760027339e-07f, 2.760481704e-07f, 2.760931168e-07f, 2.761375732e-07f, 2.761815396e-07f,
+2.762250160e-07f, 2.762680024e-07f, 2.763104989e-07f, 2.763525055e-07f, 2.763940223e-07f, 2.764350492e-07f, 2.764755863e-07f, 2.765156337e-07f, 2.765551913e-07f, 2.765942592e-07f,
+2.766328374e-07f, 2.766709260e-07f, 2.767085250e-07f, 2.767456345e-07f, 2.767822544e-07f, 2.768183849e-07f, 2.768540259e-07f, 2.768891776e-07f, 2.769238399e-07f, 2.769580128e-07f,
+2.769916965e-07f, 2.770248910e-07f, 2.770575964e-07f, 2.770898125e-07f, 2.771215397e-07f, 2.771527777e-07f, 2.771835268e-07f, 2.772137870e-07f, 2.772435583e-07f, 2.772728407e-07f,
+2.773016344e-07f, 2.773299393e-07f, 2.773577556e-07f, 2.773850832e-07f, 2.774119223e-07f, 2.774382729e-07f, 2.774641350e-07f, 2.774895088e-07f, 2.775143942e-07f, 2.775387914e-07f,
+2.775627003e-07f, 2.775861211e-07f, 2.776090538e-07f, 2.776314985e-07f, 2.776534552e-07f, 2.776749241e-07f, 2.776959051e-07f, 2.777163983e-07f, 2.777364039e-07f, 2.777559218e-07f,
+2.777749522e-07f, 2.777934951e-07f, 2.778115506e-07f, 2.778291187e-07f, 2.778461996e-07f, 2.778627933e-07f, 2.778788998e-07f, 2.778945193e-07f, 2.779096518e-07f, 2.779242975e-07f,
+2.779384563e-07f, 2.779521284e-07f, 2.779653138e-07f, 2.779780127e-07f, 2.779902250e-07f, 2.780019509e-07f, 2.780131905e-07f, 2.780239439e-07f, 2.780342111e-07f, 2.780439922e-07f,
+2.780532873e-07f, 2.780620965e-07f, 2.780704198e-07f, 2.780782575e-07f, 2.780856095e-07f, 2.780924759e-07f, 2.780988569e-07f, 2.781047525e-07f, 2.781101629e-07f, 2.781150880e-07f,
+2.781195281e-07f, 2.781234831e-07f, 2.781269533e-07f, 2.781299386e-07f, 2.781324393e-07f, 2.781344553e-07f, 2.781359869e-07f, 2.781370340e-07f, 2.781375968e-07f, 2.781376754e-07f,
+2.781372700e-07f, 2.781363805e-07f, 2.781350071e-07f, 2.781331499e-07f, 2.781308091e-07f, 2.781279846e-07f, 2.781246767e-07f, 2.781208854e-07f, 2.781166109e-07f, 2.781118532e-07f,
+2.781066125e-07f, 2.781008889e-07f, 2.780946825e-07f, 2.780879933e-07f, 2.780808216e-07f, 2.780731674e-07f, 2.780650309e-07f, 2.780564121e-07f, 2.780473112e-07f, 2.780377284e-07f,
+2.780276636e-07f, 2.780171171e-07f, 2.780060889e-07f, 2.779945792e-07f, 2.779825881e-07f, 2.779701157e-07f, 2.779571622e-07f, 2.779437277e-07f, 2.779298122e-07f, 2.779154160e-07f,
+2.779005391e-07f, 2.778851817e-07f, 2.778693439e-07f, 2.778530259e-07f, 2.778362277e-07f, 2.778189496e-07f, 2.778011915e-07f, 2.777829537e-07f, 2.777642363e-07f, 2.777450395e-07f,
+2.777253633e-07f, 2.777052079e-07f, 2.776845735e-07f, 2.776634601e-07f, 2.776418680e-07f, 2.776197972e-07f, 2.775972479e-07f, 2.775742202e-07f, 2.775507143e-07f, 2.775267304e-07f,
+2.775022685e-07f, 2.774773288e-07f, 2.774519114e-07f, 2.774260166e-07f, 2.773996444e-07f, 2.773727950e-07f, 2.773454685e-07f, 2.773176651e-07f, 2.772893850e-07f, 2.772606282e-07f,
+2.772313950e-07f, 2.772016855e-07f, 2.771714998e-07f, 2.771408381e-07f, 2.771097006e-07f, 2.770780874e-07f, 2.770459986e-07f, 2.770134345e-07f, 2.769803951e-07f, 2.769468807e-07f,
+2.769128914e-07f, 2.768784273e-07f, 2.768434886e-07f, 2.768080756e-07f, 2.767721882e-07f, 2.767358268e-07f, 2.766989914e-07f, 2.766616823e-07f, 2.766238996e-07f, 2.765856434e-07f,
+2.765469140e-07f, 2.765077114e-07f, 2.764680360e-07f, 2.764278877e-07f, 2.763872669e-07f, 2.763461737e-07f, 2.763046082e-07f, 2.762625706e-07f, 2.762200612e-07f, 2.761770800e-07f,
+2.761336272e-07f, 2.760897031e-07f, 2.760453078e-07f, 2.760004415e-07f, 2.759551043e-07f, 2.759092964e-07f, 2.758630181e-07f, 2.758162694e-07f, 2.757690507e-07f, 2.757213620e-07f,
+2.756732035e-07f, 2.756245755e-07f, 2.755754780e-07f, 2.755259114e-07f, 2.754758757e-07f, 2.754253713e-07f, 2.753743981e-07f, 2.753229565e-07f, 2.752710467e-07f, 2.752186688e-07f,
+2.751658229e-07f, 2.751125094e-07f, 2.750587284e-07f, 2.750044801e-07f, 2.749497647e-07f, 2.748945823e-07f, 2.748389332e-07f, 2.747828176e-07f, 2.747262357e-07f, 2.746691876e-07f,
+2.746116736e-07f, 2.745536938e-07f, 2.744952485e-07f, 2.744363379e-07f, 2.743769621e-07f, 2.743171214e-07f, 2.742568160e-07f, 2.741960461e-07f, 2.741348118e-07f, 2.740731134e-07f,
+2.740109512e-07f, 2.739483252e-07f, 2.738852357e-07f, 2.738216829e-07f, 2.737576671e-07f, 2.736931884e-07f, 2.736282470e-07f, 2.735628432e-07f, 2.734969771e-07f, 2.734306491e-07f,
+2.733638592e-07f, 2.732966078e-07f, 2.732288949e-07f, 2.731607210e-07f, 2.730920860e-07f, 2.730229904e-07f, 2.729534342e-07f, 2.728834178e-07f, 2.728129413e-07f, 2.727420049e-07f,
+2.726706089e-07f, 2.725987535e-07f, 2.725264390e-07f, 2.724536655e-07f, 2.723804332e-07f, 2.723067425e-07f, 2.722325934e-07f, 2.721579863e-07f, 2.720829214e-07f, 2.720073989e-07f,
+2.719314190e-07f, 2.718549820e-07f, 2.717780881e-07f, 2.717007375e-07f, 2.716229304e-07f, 2.715446672e-07f, 2.714659480e-07f, 2.713867730e-07f, 2.713071425e-07f, 2.712270567e-07f,
+2.711465159e-07f, 2.710655203e-07f, 2.709840701e-07f, 2.709021657e-07f, 2.708198071e-07f, 2.707369947e-07f, 2.706537286e-07f, 2.705700093e-07f, 2.704858368e-07f, 2.704012114e-07f,
+2.703161334e-07f, 2.702306030e-07f, 2.701446205e-07f, 2.700581860e-07f, 2.699712999e-07f, 2.698839625e-07f, 2.697961738e-07f, 2.697079343e-07f, 2.696192441e-07f, 2.695301035e-07f,
+2.694405128e-07f, 2.693504721e-07f, 2.692599818e-07f, 2.691690421e-07f, 2.690776533e-07f, 2.689858156e-07f, 2.688935292e-07f, 2.688007945e-07f, 2.687076117e-07f, 2.686139810e-07f,
+2.685199027e-07f, 2.684253771e-07f, 2.683304044e-07f, 2.682349848e-07f, 2.681391188e-07f, 2.680428064e-07f, 2.679460480e-07f, 2.678488438e-07f, 2.677511941e-07f, 2.676530992e-07f,
+2.675545593e-07f, 2.674555746e-07f, 2.673561456e-07f, 2.672562724e-07f, 2.671559553e-07f, 2.670551945e-07f, 2.669539904e-07f, 2.668523432e-07f, 2.667502531e-07f, 2.666477205e-07f,
+2.665447457e-07f, 2.664413288e-07f, 2.663374702e-07f, 2.662331702e-07f, 2.661284290e-07f, 2.660232468e-07f, 2.659176241e-07f, 2.658115610e-07f, 2.657050579e-07f, 2.655981149e-07f,
+2.654907325e-07f, 2.653829108e-07f, 2.652746502e-07f, 2.651659509e-07f, 2.650568132e-07f, 2.649472375e-07f, 2.648372239e-07f, 2.647267728e-07f, 2.646158845e-07f, 2.645045592e-07f,
+2.643927973e-07f, 2.642805989e-07f, 2.641679645e-07f, 2.640548943e-07f, 2.639413886e-07f, 2.638274476e-07f, 2.637130717e-07f, 2.635982612e-07f, 2.634830163e-07f, 2.633673374e-07f,
+2.632512248e-07f, 2.631346786e-07f, 2.630176994e-07f, 2.629002872e-07f, 2.627824425e-07f, 2.626641654e-07f, 2.625454565e-07f, 2.624263158e-07f, 2.623067438e-07f, 2.621867406e-07f,
+2.620663068e-07f, 2.619454424e-07f, 2.618241478e-07f, 2.617024234e-07f, 2.615802695e-07f, 2.614576862e-07f, 2.613346740e-07f, 2.612112332e-07f, 2.610873640e-07f, 2.609630668e-07f,
+2.608383419e-07f, 2.607131895e-07f, 2.605876101e-07f, 2.604616038e-07f, 2.603351710e-07f, 2.602083121e-07f, 2.600810273e-07f, 2.599533170e-07f, 2.598251814e-07f, 2.596966209e-07f,
+2.595676357e-07f, 2.594382263e-07f, 2.593083929e-07f, 2.591781359e-07f, 2.590474555e-07f, 2.589163521e-07f, 2.587848259e-07f, 2.586528774e-07f, 2.585205068e-07f, 2.583877145e-07f,
+2.582545007e-07f, 2.581208659e-07f, 2.579868102e-07f, 2.578523341e-07f, 2.577174379e-07f, 2.575821218e-07f, 2.574463863e-07f, 2.573102316e-07f, 2.571736581e-07f, 2.570366661e-07f,
+2.568992559e-07f, 2.567614279e-07f, 2.566231824e-07f, 2.564845197e-07f, 2.563454401e-07f, 2.562059440e-07f, 2.560660317e-07f, 2.559257035e-07f, 2.557849598e-07f, 2.556438010e-07f,
+2.555022272e-07f, 2.553602390e-07f, 2.552178366e-07f, 2.550750203e-07f, 2.549317905e-07f, 2.547881476e-07f, 2.546440918e-07f, 2.544996235e-07f, 2.543547430e-07f, 2.542094508e-07f,
+2.540637470e-07f, 2.539176322e-07f, 2.537711065e-07f, 2.536241704e-07f, 2.534768242e-07f, 2.533290683e-07f, 2.531809029e-07f, 2.530323285e-07f, 2.528833453e-07f, 2.527339538e-07f,
+2.525841543e-07f, 2.524339471e-07f, 2.522833325e-07f, 2.521323110e-07f, 2.519808828e-07f, 2.518290484e-07f, 2.516768080e-07f, 2.515241621e-07f, 2.513711109e-07f, 2.512176549e-07f,
+2.510637944e-07f, 2.509095297e-07f, 2.507548612e-07f, 2.505997892e-07f, 2.504443142e-07f, 2.502884364e-07f, 2.501321563e-07f, 2.499754741e-07f, 2.498183903e-07f, 2.496609052e-07f,
+2.495030191e-07f, 2.493447325e-07f, 2.491860456e-07f, 2.490269589e-07f, 2.488674727e-07f, 2.487075874e-07f, 2.485473033e-07f, 2.483866209e-07f, 2.482255403e-07f, 2.480640621e-07f,
+2.479021867e-07f, 2.477399142e-07f, 2.475772453e-07f, 2.474141801e-07f, 2.472507191e-07f, 2.470868626e-07f, 2.469226110e-07f, 2.467579647e-07f, 2.465929241e-07f, 2.464274895e-07f,
+2.462616613e-07f, 2.460954399e-07f, 2.459288256e-07f, 2.457618188e-07f, 2.455944200e-07f, 2.454266294e-07f, 2.452584474e-07f, 2.450898745e-07f, 2.449209110e-07f, 2.447515572e-07f,
+2.445818136e-07f, 2.444116806e-07f, 2.442411584e-07f, 2.440702476e-07f, 2.438989484e-07f, 2.437272613e-07f, 2.435551867e-07f, 2.433827248e-07f, 2.432098762e-07f, 2.430366412e-07f,
+2.428630201e-07f, 2.426890134e-07f, 2.425146215e-07f, 2.423398447e-07f, 2.421646834e-07f, 2.419891380e-07f, 2.418132090e-07f, 2.416368966e-07f, 2.414602013e-07f, 2.412831234e-07f,
+2.411056634e-07f, 2.409278217e-07f, 2.407495986e-07f, 2.405709945e-07f, 2.403920099e-07f, 2.402126451e-07f, 2.400329005e-07f, 2.398527765e-07f, 2.396722735e-07f, 2.394913919e-07f,
+2.393101321e-07f, 2.391284945e-07f, 2.389464794e-07f, 2.387640874e-07f, 2.385813188e-07f, 2.383981739e-07f, 2.382146532e-07f, 2.380307571e-07f, 2.378464860e-07f, 2.376618403e-07f,
+2.374768204e-07f, 2.372914266e-07f, 2.371056595e-07f, 2.369195194e-07f, 2.367330066e-07f, 2.365461217e-07f, 2.363588650e-07f, 2.361712369e-07f, 2.359832379e-07f, 2.357948682e-07f,
+2.356061285e-07f, 2.354170189e-07f, 2.352275401e-07f, 2.350376923e-07f, 2.348474759e-07f, 2.346568915e-07f, 2.344659394e-07f, 2.342746200e-07f, 2.340829337e-07f, 2.338908809e-07f,
+2.336984621e-07f, 2.335056777e-07f, 2.333125280e-07f, 2.331190136e-07f, 2.329251347e-07f, 2.327308919e-07f, 2.325362855e-07f, 2.323413160e-07f, 2.321459837e-07f, 2.319502892e-07f,
+2.317542327e-07f, 2.315578148e-07f, 2.313610359e-07f, 2.311638963e-07f, 2.309663965e-07f, 2.307685370e-07f, 2.305703180e-07f, 2.303717402e-07f, 2.301728038e-07f, 2.299735093e-07f,
+2.297738572e-07f, 2.295738478e-07f, 2.293734816e-07f, 2.291727590e-07f, 2.289716805e-07f, 2.287702464e-07f, 2.285684572e-07f, 2.283663133e-07f, 2.281638152e-07f, 2.279609632e-07f,
+2.277577578e-07f, 2.275541995e-07f, 2.273502886e-07f, 2.271460257e-07f, 2.269414110e-07f, 2.267364451e-07f, 2.265311285e-07f, 2.263254614e-07f, 2.261194444e-07f, 2.259130779e-07f,
+2.257063623e-07f, 2.254992981e-07f, 2.252918856e-07f, 2.250841255e-07f, 2.248760179e-07f, 2.246675635e-07f, 2.244587627e-07f, 2.242496158e-07f, 2.240401234e-07f, 2.238302858e-07f,
+2.236201035e-07f, 2.234095770e-07f, 2.231987066e-07f, 2.229874929e-07f, 2.227759362e-07f, 2.225640371e-07f, 2.223517959e-07f, 2.221392131e-07f, 2.219262891e-07f, 2.217130245e-07f,
+2.214994195e-07f, 2.212854748e-07f, 2.210711906e-07f, 2.208565675e-07f, 2.206416060e-07f, 2.204263064e-07f, 2.202106692e-07f, 2.199946949e-07f, 2.197783838e-07f, 2.195617366e-07f,
+2.193447535e-07f, 2.191274351e-07f, 2.189097818e-07f, 2.186917941e-07f, 2.184734724e-07f, 2.182548171e-07f, 2.180358288e-07f, 2.178165078e-07f, 2.175968547e-07f, 2.173768698e-07f,
+2.171565537e-07f, 2.169359067e-07f, 2.167149294e-07f, 2.164936222e-07f, 2.162719856e-07f, 2.160500200e-07f, 2.158277258e-07f, 2.156051036e-07f, 2.153821537e-07f, 2.151588767e-07f,
+2.149352730e-07f, 2.147113431e-07f, 2.144870874e-07f, 2.142625064e-07f, 2.140376005e-07f, 2.138123703e-07f, 2.135868161e-07f, 2.133609385e-07f, 2.131347378e-07f, 2.129082147e-07f,
+2.126813694e-07f, 2.124542026e-07f, 2.122267146e-07f, 2.119989059e-07f, 2.117707770e-07f, 2.115423284e-07f, 2.113135605e-07f, 2.110844738e-07f, 2.108550687e-07f, 2.106253458e-07f,
+2.103953055e-07f, 2.101649482e-07f, 2.099342745e-07f, 2.097032848e-07f, 2.094719795e-07f, 2.092403592e-07f, 2.090084243e-07f, 2.087761753e-07f, 2.085436127e-07f, 2.083107369e-07f,
+2.080775484e-07f, 2.078440477e-07f, 2.076102352e-07f, 2.073761115e-07f, 2.071416770e-07f, 2.069069322e-07f, 2.066718775e-07f, 2.064365135e-07f, 2.062008406e-07f, 2.059648592e-07f,
+2.057285700e-07f, 2.054919732e-07f, 2.052550695e-07f, 2.050178593e-07f, 2.047803431e-07f, 2.045425214e-07f, 2.043043945e-07f, 2.040659631e-07f, 2.038272277e-07f, 2.035881886e-07f,
+2.033488463e-07f, 2.031092014e-07f, 2.028692544e-07f, 2.026290057e-07f, 2.023884557e-07f, 2.021476051e-07f, 2.019064542e-07f, 2.016650036e-07f, 2.014232537e-07f, 2.011812050e-07f,
+2.009388581e-07f, 2.006962134e-07f, 2.004532713e-07f, 2.002100324e-07f, 1.999664972e-07f, 1.997226661e-07f, 1.994785397e-07f, 1.992341183e-07f, 1.989894027e-07f, 1.987443931e-07f,
+1.984990901e-07f, 1.982534942e-07f, 1.980076059e-07f, 1.977614256e-07f, 1.975149539e-07f, 1.972681913e-07f, 1.970211382e-07f, 1.967737952e-07f, 1.965261627e-07f, 1.962782412e-07f,
+1.960300313e-07f, 1.957815333e-07f, 1.955327479e-07f, 1.952836755e-07f, 1.950343166e-07f, 1.947846717e-07f, 1.945347413e-07f, 1.942845259e-07f, 1.940340260e-07f, 1.937832421e-07f,
+1.935321747e-07f, 1.932808243e-07f, 1.930291913e-07f, 1.927772764e-07f, 1.925250799e-07f, 1.922726024e-07f, 1.920198444e-07f, 1.917668065e-07f, 1.915134890e-07f, 1.912598924e-07f,
+1.910060174e-07f, 1.907518644e-07f, 1.904974339e-07f, 1.902427264e-07f, 1.899877424e-07f, 1.897324824e-07f, 1.894769470e-07f, 1.892211365e-07f, 1.889650516e-07f, 1.887086927e-07f,
+1.884520604e-07f, 1.881951551e-07f, 1.879379773e-07f, 1.876805277e-07f, 1.874228065e-07f, 1.871648145e-07f, 1.869065521e-07f, 1.866480197e-07f, 1.863892179e-07f, 1.861301473e-07f,
+1.858708082e-07f, 1.856112013e-07f, 1.853513271e-07f, 1.850911860e-07f, 1.848307785e-07f, 1.845701053e-07f, 1.843091667e-07f, 1.840479633e-07f, 1.837864956e-07f, 1.835247641e-07f,
+1.832627694e-07f, 1.830005119e-07f, 1.827379922e-07f, 1.824752108e-07f, 1.822121682e-07f, 1.819488649e-07f, 1.816853014e-07f, 1.814214782e-07f, 1.811573959e-07f, 1.808930549e-07f,
+1.806284559e-07f, 1.803635992e-07f, 1.800984855e-07f, 1.798331152e-07f, 1.795674889e-07f, 1.793016071e-07f, 1.790354702e-07f, 1.787690789e-07f, 1.785024336e-07f, 1.782355348e-07f,
+1.779683831e-07f, 1.777009791e-07f, 1.774333231e-07f, 1.771654158e-07f, 1.768972576e-07f, 1.766288491e-07f, 1.763601908e-07f, 1.760912832e-07f, 1.758221269e-07f, 1.755527223e-07f,
+1.752830701e-07f, 1.750131706e-07f, 1.747430245e-07f, 1.744726322e-07f, 1.742019944e-07f, 1.739311114e-07f, 1.736599839e-07f, 1.733886124e-07f, 1.731169973e-07f, 1.728451393e-07f,
+1.725730388e-07f, 1.723006964e-07f, 1.720281125e-07f, 1.717552878e-07f, 1.714822228e-07f, 1.712089179e-07f, 1.709353737e-07f, 1.706615908e-07f, 1.703875697e-07f, 1.701133108e-07f,
+1.698388148e-07f, 1.695640821e-07f, 1.692891133e-07f, 1.690139089e-07f, 1.687384694e-07f, 1.684627955e-07f, 1.681868875e-07f, 1.679107461e-07f, 1.676343717e-07f, 1.673577650e-07f,
+1.670809264e-07f, 1.668038565e-07f, 1.665265557e-07f, 1.662490247e-07f, 1.659712640e-07f, 1.656932741e-07f, 1.654150555e-07f, 1.651366088e-07f, 1.648579345e-07f, 1.645790331e-07f,
+1.642999052e-07f, 1.640205514e-07f, 1.637409720e-07f, 1.634611678e-07f, 1.631811392e-07f, 1.629008867e-07f, 1.626204110e-07f, 1.623397124e-07f, 1.620587917e-07f, 1.617776492e-07f,
+1.614962856e-07f, 1.612147014e-07f, 1.609328971e-07f, 1.606508733e-07f, 1.603686305e-07f, 1.600861692e-07f, 1.598034900e-07f, 1.595205934e-07f, 1.592374800e-07f, 1.589541503e-07f,
+1.586706048e-07f, 1.583868441e-07f, 1.581028687e-07f, 1.578186792e-07f, 1.575342761e-07f, 1.572496600e-07f, 1.569648314e-07f, 1.566797908e-07f, 1.563945387e-07f, 1.561090758e-07f,
+1.558234026e-07f, 1.555375196e-07f, 1.552514273e-07f, 1.549651263e-07f, 1.546786172e-07f, 1.543919004e-07f, 1.541049766e-07f, 1.538178463e-07f, 1.535305099e-07f, 1.532429682e-07f,
+1.529552215e-07f, 1.526672706e-07f, 1.523791158e-07f, 1.520907578e-07f, 1.518021970e-07f, 1.515134342e-07f, 1.512244697e-07f, 1.509353041e-07f, 1.506459381e-07f, 1.503563721e-07f,
+1.500666067e-07f, 1.497766424e-07f, 1.494864797e-07f, 1.491961194e-07f, 1.489055618e-07f, 1.486148075e-07f, 1.483238571e-07f, 1.480327111e-07f, 1.477413701e-07f, 1.474498347e-07f,
+1.471581053e-07f, 1.468661826e-07f, 1.465740670e-07f, 1.462817592e-07f, 1.459892596e-07f, 1.456965689e-07f, 1.454036876e-07f, 1.451106162e-07f, 1.448173553e-07f, 1.445239055e-07f,
+1.442302672e-07f, 1.439364411e-07f, 1.436424277e-07f, 1.433482276e-07f, 1.430538413e-07f, 1.427592693e-07f, 1.424645122e-07f, 1.421695707e-07f, 1.418744451e-07f, 1.415791361e-07f,
+1.412836443e-07f, 1.409879702e-07f, 1.406921143e-07f, 1.403960771e-07f, 1.400998594e-07f, 1.398034616e-07f, 1.395068842e-07f, 1.392101279e-07f, 1.389131931e-07f, 1.386160805e-07f,
+1.383187905e-07f, 1.380213239e-07f, 1.377236810e-07f, 1.374258625e-07f, 1.371278689e-07f, 1.368297008e-07f, 1.365313587e-07f, 1.362328432e-07f, 1.359341549e-07f, 1.356352943e-07f,
+1.353362619e-07f, 1.350370584e-07f, 1.347376843e-07f, 1.344381401e-07f, 1.341384264e-07f, 1.338385438e-07f, 1.335384929e-07f, 1.332382741e-07f, 1.329378880e-07f, 1.326373353e-07f,
+1.323366164e-07f, 1.320357319e-07f, 1.317346825e-07f, 1.314334686e-07f, 1.311320907e-07f, 1.308305496e-07f, 1.305288457e-07f, 1.302269796e-07f, 1.299249518e-07f, 1.296227630e-07f,
+1.293204136e-07f, 1.290179043e-07f, 1.287152355e-07f, 1.284124080e-07f, 1.281094221e-07f, 1.278062786e-07f, 1.275029779e-07f, 1.271995206e-07f, 1.268959073e-07f, 1.265921386e-07f,
+1.262882149e-07f, 1.259841369e-07f, 1.256799052e-07f, 1.253755202e-07f, 1.250709826e-07f, 1.247662930e-07f, 1.244614518e-07f, 1.241564597e-07f, 1.238513172e-07f, 1.235460249e-07f,
+1.232405833e-07f, 1.229349931e-07f, 1.226292547e-07f, 1.223233688e-07f, 1.220173359e-07f, 1.217111565e-07f, 1.214048313e-07f, 1.210983608e-07f, 1.207917456e-07f, 1.204849863e-07f,
+1.201780833e-07f, 1.198710373e-07f, 1.195638488e-07f, 1.192565185e-07f, 1.189490468e-07f, 1.186414344e-07f, 1.183336818e-07f, 1.180257895e-07f, 1.177177582e-07f, 1.174095884e-07f,
+1.171012807e-07f, 1.167928356e-07f, 1.164842537e-07f, 1.161755356e-07f, 1.158666819e-07f, 1.155576930e-07f, 1.152485697e-07f, 1.149393124e-07f, 1.146299217e-07f, 1.143203983e-07f,
+1.140107425e-07f, 1.137009551e-07f, 1.133910366e-07f, 1.130809876e-07f, 1.127708086e-07f, 1.124605002e-07f, 1.121500630e-07f, 1.118394975e-07f, 1.115288044e-07f, 1.112179841e-07f,
+1.109070373e-07f, 1.105959644e-07f, 1.102847662e-07f, 1.099734432e-07f, 1.096619958e-07f, 1.093504248e-07f, 1.090387307e-07f, 1.087269140e-07f, 1.084149753e-07f, 1.081029151e-07f,
+1.077907342e-07f, 1.074784330e-07f, 1.071660120e-07f, 1.068534719e-07f, 1.065408133e-07f, 1.062280367e-07f, 1.059151426e-07f, 1.056021318e-07f, 1.052890046e-07f, 1.049757617e-07f,
+1.046624037e-07f, 1.043489311e-07f, 1.040353446e-07f, 1.037216446e-07f, 1.034078318e-07f, 1.030939067e-07f, 1.027798699e-07f, 1.024657219e-07f, 1.021514634e-07f, 1.018370949e-07f,
+1.015226171e-07f, 1.012080303e-07f, 1.008933353e-07f, 1.005785326e-07f, 1.002636228e-07f, 9.994860639e-08f, 9.963348403e-08f, 9.931825626e-08f, 9.900292366e-08f, 9.868748679e-08f,
+9.837194624e-08f, 9.805630258e-08f, 9.774055637e-08f, 9.742470819e-08f, 9.710875862e-08f, 9.679270822e-08f, 9.647655758e-08f, 9.616030726e-08f, 9.584395783e-08f, 9.552750988e-08f,
+9.521096397e-08f, 9.489432067e-08f, 9.457758057e-08f, 9.426074424e-08f, 9.394381224e-08f, 9.362678515e-08f, 9.330966355e-08f, 9.299244801e-08f, 9.267513910e-08f, 9.235773740e-08f,
+9.204024348e-08f, 9.172265792e-08f, 9.140498128e-08f, 9.108721415e-08f, 9.076935709e-08f, 9.045141068e-08f, 9.013337550e-08f, 8.981525212e-08f, 8.949704111e-08f, 8.917874305e-08f,
+8.886035851e-08f, 8.854188807e-08f, 8.822333229e-08f, 8.790469177e-08f, 8.758596706e-08f, 8.726715874e-08f, 8.694826739e-08f, 8.662929358e-08f, 8.631023789e-08f, 8.599110089e-08f,
+8.567188315e-08f, 8.535258526e-08f, 8.503320778e-08f, 8.471375128e-08f, 8.439421635e-08f, 8.407460356e-08f, 8.375491348e-08f, 8.343514668e-08f, 8.311530375e-08f, 8.279538525e-08f,
+8.247539177e-08f, 8.215532386e-08f, 8.183518212e-08f, 8.151496711e-08f, 8.119467941e-08f, 8.087431960e-08f, 8.055388824e-08f, 8.023338591e-08f, 7.991281319e-08f, 7.959217066e-08f,
+7.927145887e-08f, 7.895067842e-08f, 7.862982988e-08f, 7.830891381e-08f, 7.798793080e-08f, 7.766688142e-08f, 7.734576625e-08f, 7.702458585e-08f, 7.670334080e-08f, 7.638203168e-08f,
+7.606065907e-08f, 7.573922353e-08f, 7.541772564e-08f, 7.509616597e-08f, 7.477454511e-08f, 7.445286362e-08f, 7.413112208e-08f, 7.380932106e-08f, 7.348746114e-08f, 7.316554290e-08f,
+7.284356689e-08f, 7.252153371e-08f, 7.219944393e-08f, 7.187729811e-08f, 7.155509684e-08f, 7.123284068e-08f, 7.091053022e-08f, 7.058816602e-08f, 7.026574867e-08f, 6.994327872e-08f,
+6.962075677e-08f, 6.929818338e-08f, 6.897555912e-08f, 6.865288458e-08f, 6.833016032e-08f, 6.800738692e-08f, 6.768456495e-08f, 6.736169499e-08f, 6.703877760e-08f, 6.671581337e-08f,
+6.639280287e-08f, 6.606974667e-08f, 6.574664534e-08f, 6.542349946e-08f, 6.510030961e-08f, 6.477707634e-08f, 6.445380025e-08f, 6.413048190e-08f, 6.380712186e-08f, 6.348372072e-08f,
+6.316027903e-08f, 6.283679738e-08f, 6.251327634e-08f, 6.218971648e-08f, 6.186611837e-08f, 6.154248259e-08f, 6.121880972e-08f, 6.089510031e-08f, 6.057135495e-08f, 6.024757421e-08f,
+5.992375866e-08f, 5.959990887e-08f, 5.927602542e-08f, 5.895210888e-08f, 5.862815982e-08f, 5.830417881e-08f, 5.798016643e-08f, 5.765612325e-08f, 5.733204984e-08f, 5.700794676e-08f,
+5.668381461e-08f, 5.635965394e-08f, 5.603546533e-08f, 5.571124934e-08f, 5.538700656e-08f, 5.506273755e-08f, 5.473844289e-08f, 5.441412314e-08f, 5.408977888e-08f, 5.376541068e-08f,
+5.344101911e-08f, 5.311660474e-08f, 5.279216814e-08f, 5.246770989e-08f, 5.214323055e-08f, 5.181873069e-08f, 5.149421089e-08f, 5.116967172e-08f, 5.084511374e-08f, 5.052053753e-08f,
+5.019594366e-08f, 4.987133269e-08f, 4.954670521e-08f, 4.922206177e-08f, 4.889740295e-08f, 4.857272932e-08f, 4.824804144e-08f, 4.792333989e-08f, 4.759862524e-08f, 4.727389806e-08f,
+4.694915891e-08f, 4.662440837e-08f, 4.629964700e-08f, 4.597487537e-08f, 4.565009406e-08f, 4.532530363e-08f, 4.500050464e-08f, 4.467569768e-08f, 4.435088330e-08f, 4.402606208e-08f,
+4.370123459e-08f, 4.337640138e-08f, 4.305156304e-08f, 4.272672012e-08f, 4.240187320e-08f, 4.207702285e-08f, 4.175216962e-08f, 4.142731410e-08f, 4.110245684e-08f, 4.077759841e-08f,
+4.045273939e-08f, 4.012788033e-08f, 3.980302181e-08f, 3.947816439e-08f, 3.915330864e-08f, 3.882845513e-08f, 3.850360441e-08f, 3.817875706e-08f, 3.785391365e-08f, 3.752907474e-08f,
+3.720424089e-08f, 3.687941267e-08f, 3.655459065e-08f, 3.622977540e-08f, 3.590496747e-08f, 3.558016743e-08f, 3.525537585e-08f, 3.493059330e-08f, 3.460582033e-08f, 3.428105752e-08f,
+3.395630543e-08f, 3.363156461e-08f, 3.330683565e-08f, 3.298211909e-08f, 3.265741551e-08f, 3.233272546e-08f, 3.200804952e-08f, 3.168338824e-08f, 3.135874219e-08f, 3.103411193e-08f,
+3.070949803e-08f, 3.038490105e-08f, 3.006032154e-08f, 2.973576008e-08f, 2.941121723e-08f, 2.908669354e-08f, 2.876218959e-08f, 2.843770592e-08f, 2.811324312e-08f, 2.778880172e-08f,
+2.746438231e-08f, 2.713998543e-08f, 2.681561166e-08f, 2.649126154e-08f, 2.616693565e-08f, 2.584263454e-08f, 2.551835878e-08f, 2.519410891e-08f, 2.486988552e-08f, 2.454568914e-08f,
+2.422152036e-08f, 2.389737971e-08f, 2.357326777e-08f, 2.324918509e-08f, 2.292513224e-08f, 2.260110976e-08f, 2.227711823e-08f, 2.195315819e-08f, 2.162923021e-08f, 2.130533485e-08f,
+2.098147266e-08f, 2.065764421e-08f, 2.033385004e-08f, 2.001009072e-08f, 1.968636681e-08f, 1.936267885e-08f, 1.903902742e-08f, 1.871541306e-08f, 1.839183634e-08f, 1.806829781e-08f,
+1.774479802e-08f, 1.742133753e-08f, 1.709791690e-08f, 1.677453669e-08f, 1.645119744e-08f, 1.612789972e-08f, 1.580464408e-08f, 1.548143107e-08f, 1.515826125e-08f, 1.483513518e-08f,
+1.451205341e-08f, 1.418901649e-08f, 1.386602497e-08f, 1.354307942e-08f, 1.322018038e-08f, 1.289732841e-08f, 1.257452406e-08f, 1.225176789e-08f, 1.192906044e-08f, 1.160640227e-08f,
+1.128379393e-08f, 1.096123598e-08f, 1.063872896e-08f, 1.031627344e-08f, 9.993869948e-09f, 9.671519051e-09f, 9.349221296e-09f, 9.026977234e-09f, 8.704787416e-09f, 8.382652392e-09f,
+8.060572713e-09f, 7.738548928e-09f, 7.416581588e-09f, 7.094671243e-09f, 6.772818441e-09f, 6.451023732e-09f, 6.129287665e-09f, 5.807610789e-09f, 5.485993652e-09f, 5.164436802e-09f,
+4.842940788e-09f, 4.521506158e-09f, 4.200133459e-09f, 3.878823238e-09f, 3.557576044e-09f, 3.236392422e-09f, 2.915272920e-09f, 2.594218083e-09f, 2.273228459e-09f, 1.952304594e-09f,
+1.631447033e-09f, 1.310656321e-09f, 9.899330045e-10f, 6.692776283e-10f, 3.486907371e-10f, 2.817287574e-11f, -2.922754116e-10f, -6.126535806e-10f, -9.329610874e-10f, -1.253197388e-09f,
+-1.573361940e-09f, -1.893454199e-09f, -2.213473623e-09f, -2.533419668e-09f, -2.853291793e-09f, -3.173089456e-09f, -3.492812113e-09f, -3.812459224e-09f, -4.132030247e-09f, -4.451524641e-09f,
+-4.770941865e-09f, -5.090281378e-09f, -5.409542640e-09f, -5.728725110e-09f, -6.047828249e-09f, -6.366851517e-09f, -6.685794375e-09f, -7.004656282e-09f, -7.323436701e-09f, -7.642135093e-09f,
+-7.960750919e-09f, -8.279283642e-09f, -8.597732722e-09f, -8.916097624e-09f, -9.234377808e-09f, -9.552572739e-09f, -9.870681880e-09f, -1.018870469e-08f, -1.050664064e-08f, -1.082448919e-08f,
+-1.114224981e-08f, -1.145992195e-08f, -1.177750509e-08f, -1.209499869e-08f, -1.241240221e-08f, -1.272971513e-08f, -1.304693689e-08f, -1.336406699e-08f, -1.368110487e-08f, -1.399805000e-08f,
+-1.431490186e-08f, -1.463165991e-08f, -1.494832361e-08f, -1.526489244e-08f, -1.558136586e-08f, -1.589774335e-08f, -1.621402436e-08f, -1.653020837e-08f, -1.684629485e-08f, -1.716228327e-08f,
+-1.747817310e-08f, -1.779396381e-08f, -1.810965486e-08f, -1.842524573e-08f, -1.874073589e-08f, -1.905612482e-08f, -1.937141197e-08f, -1.968659683e-08f, -2.000167887e-08f, -2.031665756e-08f,
+-2.063153237e-08f, -2.094630277e-08f, -2.126096824e-08f, -2.157552825e-08f, -2.188998228e-08f, -2.220432980e-08f, -2.251857028e-08f, -2.283270321e-08f, -2.314672804e-08f, -2.346064427e-08f,
+-2.377445136e-08f, -2.408814879e-08f, -2.440173605e-08f, -2.471521259e-08f, -2.502857791e-08f, -2.534183148e-08f, -2.565497277e-08f, -2.596800126e-08f, -2.628091644e-08f, -2.659371778e-08f,
+-2.690640476e-08f, -2.721897686e-08f, -2.753143356e-08f, -2.784377433e-08f, -2.815599867e-08f, -2.846810604e-08f, -2.878009593e-08f, -2.909196782e-08f, -2.940372119e-08f, -2.971535553e-08f,
+-3.002687031e-08f, -3.033826502e-08f, -3.064953914e-08f, -3.096069215e-08f, -3.127172353e-08f, -3.158263278e-08f, -3.189341937e-08f, -3.220408279e-08f, -3.251462252e-08f, -3.282503805e-08f,
+-3.313532887e-08f, -3.344549445e-08f, -3.375553428e-08f, -3.406544786e-08f, -3.437523466e-08f, -3.468489417e-08f, -3.499442589e-08f, -3.530382930e-08f, -3.561310388e-08f, -3.592224913e-08f,
+-3.623126453e-08f, -3.654014957e-08f, -3.684890375e-08f, -3.715752654e-08f, -3.746601745e-08f, -3.777437596e-08f, -3.808260156e-08f, -3.839069374e-08f, -3.869865199e-08f, -3.900647582e-08f,
+-3.931416470e-08f, -3.962171813e-08f, -3.992913560e-08f, -4.023641661e-08f, -4.054356065e-08f, -4.085056721e-08f, -4.115743579e-08f, -4.146416588e-08f, -4.177075697e-08f, -4.207720857e-08f,
+-4.238352016e-08f, -4.268969125e-08f, -4.299572132e-08f, -4.330160988e-08f, -4.360735643e-08f, -4.391296045e-08f, -4.421842145e-08f, -4.452373892e-08f, -4.482891237e-08f, -4.513394129e-08f,
+-4.543882518e-08f, -4.574356355e-08f, -4.604815588e-08f, -4.635260168e-08f, -4.665690046e-08f, -4.696105170e-08f, -4.726505492e-08f, -4.756890962e-08f, -4.787261529e-08f, -4.817617144e-08f,
+-4.847957757e-08f, -4.878283319e-08f, -4.908593780e-08f, -4.938889090e-08f, -4.969169199e-08f, -4.999434059e-08f, -5.029683619e-08f, -5.059917830e-08f, -5.090136644e-08f, -5.120340009e-08f,
+-5.150527877e-08f, -5.180700200e-08f, -5.210856926e-08f, -5.240998008e-08f, -5.271123395e-08f, -5.301233039e-08f, -5.331326891e-08f, -5.361404902e-08f, -5.391467022e-08f, -5.421513203e-08f,
+-5.451543395e-08f, -5.481557549e-08f, -5.511555618e-08f, -5.541537551e-08f, -5.571503300e-08f, -5.601452817e-08f, -5.631386052e-08f, -5.661302956e-08f, -5.691203482e-08f, -5.721087581e-08f,
+-5.750955203e-08f, -5.780806301e-08f, -5.810640826e-08f, -5.840458729e-08f, -5.870259962e-08f, -5.900044477e-08f, -5.929812225e-08f, -5.959563158e-08f, -5.989297228e-08f, -6.019014387e-08f,
+-6.048714585e-08f, -6.078397776e-08f, -6.108063911e-08f, -6.137712942e-08f, -6.167344820e-08f, -6.196959499e-08f, -6.226556930e-08f, -6.256137065e-08f, -6.285699856e-08f, -6.315245256e-08f,
+-6.344773216e-08f, -6.374283689e-08f, -6.403776628e-08f, -6.433251984e-08f, -6.462709710e-08f, -6.492149759e-08f, -6.521572082e-08f, -6.550976632e-08f, -6.580363363e-08f, -6.609732226e-08f,
+-6.639083174e-08f, -6.668416160e-08f, -6.697731137e-08f, -6.727028057e-08f, -6.756306873e-08f, -6.785567537e-08f, -6.814810004e-08f, -6.844034225e-08f, -6.873240154e-08f, -6.902427744e-08f,
+-6.931596947e-08f, -6.960747718e-08f, -6.989880008e-08f, -7.018993772e-08f, -7.048088961e-08f, -7.077165531e-08f, -7.106223433e-08f, -7.135262622e-08f, -7.164283051e-08f, -7.193284672e-08f,
+-7.222267441e-08f, -7.251231309e-08f, -7.280176231e-08f, -7.309102160e-08f, -7.338009051e-08f, -7.366896856e-08f, -7.395765529e-08f, -7.424615025e-08f, -7.453445296e-08f, -7.482256298e-08f,
+-7.511047983e-08f, -7.539820306e-08f, -7.568573221e-08f, -7.597306681e-08f, -7.626020641e-08f, -7.654715056e-08f, -7.683389878e-08f, -7.712045063e-08f, -7.740680565e-08f, -7.769296337e-08f,
+-7.797892335e-08f, -7.826468513e-08f, -7.855024825e-08f, -7.883561225e-08f, -7.912077669e-08f, -7.940574111e-08f, -7.969050504e-08f, -7.997506805e-08f, -8.025942968e-08f, -8.054358947e-08f,
+-8.082754698e-08f, -8.111130175e-08f, -8.139485332e-08f, -8.167820126e-08f, -8.196134511e-08f, -8.224428442e-08f, -8.252701874e-08f, -8.280954762e-08f, -8.309187062e-08f, -8.337398728e-08f,
+-8.365589716e-08f, -8.393759981e-08f, -8.421909479e-08f, -8.450038165e-08f, -8.478145994e-08f, -8.506232922e-08f, -8.534298904e-08f, -8.562343896e-08f, -8.590367854e-08f, -8.618370733e-08f,
+-8.646352489e-08f, -8.674313078e-08f, -8.702252455e-08f, -8.730170577e-08f, -8.758067399e-08f, -8.785942877e-08f, -8.813796968e-08f, -8.841629627e-08f, -8.869440810e-08f, -8.897230474e-08f,
+-8.924998575e-08f, -8.952745069e-08f, -8.980469912e-08f, -9.008173060e-08f, -9.035854471e-08f, -9.063514100e-08f, -9.091151903e-08f, -9.118767839e-08f, -9.146361862e-08f, -9.173933930e-08f,
+-9.201483999e-08f, -9.229012026e-08f, -9.256517967e-08f, -9.284001781e-08f, -9.311463422e-08f, -9.338902849e-08f, -9.366320019e-08f, -9.393714887e-08f, -9.421087412e-08f, -9.448437550e-08f,
+-9.475765259e-08f, -9.503070495e-08f, -9.530353217e-08f, -9.557613381e-08f, -9.584850944e-08f, -9.612065864e-08f, -9.639258099e-08f, -9.666427606e-08f, -9.693574342e-08f, -9.720698266e-08f,
+-9.747799334e-08f, -9.774877504e-08f, -9.801932734e-08f, -9.828964983e-08f, -9.855974207e-08f, -9.882960365e-08f, -9.909923414e-08f, -9.936863313e-08f, -9.963780019e-08f, -9.990673491e-08f,
+-1.001754369e-07f, -1.004439057e-07f, -1.007121408e-07f, -1.009801420e-07f, -1.012479087e-07f, -1.015154406e-07f, -1.017827372e-07f, -1.020497982e-07f, -1.023166230e-07f, -1.025832114e-07f,
+-1.028495628e-07f, -1.031156769e-07f, -1.033815532e-07f, -1.036471914e-07f, -1.039125910e-07f, -1.041777516e-07f, -1.044426728e-07f, -1.047073542e-07f, -1.049717955e-07f, -1.052359960e-07f,
+-1.054999556e-07f, -1.057636737e-07f, -1.060271500e-07f, -1.062903840e-07f, -1.065533754e-07f, -1.068161237e-07f, -1.070786285e-07f, -1.073408894e-07f, -1.076029061e-07f, -1.078646781e-07f,
+-1.081262050e-07f, -1.083874864e-07f, -1.086485219e-07f, -1.089093111e-07f, -1.091698536e-07f, -1.094301490e-07f, -1.096901969e-07f, -1.099499969e-07f, -1.102095487e-07f, -1.104688517e-07f,
+-1.107279056e-07f, -1.109867100e-07f, -1.112452646e-07f, -1.115035689e-07f, -1.117616224e-07f, -1.120194249e-07f, -1.122769759e-07f, -1.125342751e-07f, -1.127913220e-07f, -1.130481162e-07f,
+-1.133046574e-07f, -1.135609452e-07f, -1.138169791e-07f, -1.140727588e-07f, -1.143282839e-07f, -1.145835539e-07f, -1.148385686e-07f, -1.150933275e-07f, -1.153478302e-07f, -1.156020763e-07f,
+-1.158560656e-07f, -1.161097974e-07f, -1.163632716e-07f, -1.166164876e-07f, -1.168694451e-07f, -1.171221438e-07f, -1.173745832e-07f, -1.176267629e-07f, -1.178786826e-07f, -1.181303419e-07f,
+-1.183817404e-07f, -1.186328777e-07f, -1.188837535e-07f, -1.191343673e-07f, -1.193847188e-07f, -1.196348076e-07f, -1.198846333e-07f, -1.201341955e-07f, -1.203834940e-07f, -1.206325282e-07f,
+-1.208812978e-07f, -1.211298024e-07f, -1.213780417e-07f, -1.216260153e-07f, -1.218737228e-07f, -1.221211638e-07f, -1.223683380e-07f, -1.226152449e-07f, -1.228618843e-07f, -1.231082557e-07f,
+-1.233543588e-07f, -1.236001932e-07f, -1.238457585e-07f, -1.240910544e-07f, -1.243360804e-07f, -1.245808363e-07f, -1.248253216e-07f, -1.250695361e-07f, -1.253134792e-07f, -1.255571507e-07f,
+-1.258005502e-07f, -1.260436772e-07f, -1.262865316e-07f, -1.265291128e-07f, -1.267714206e-07f, -1.270134545e-07f, -1.272552142e-07f, -1.274966994e-07f, -1.277379097e-07f, -1.279788446e-07f,
+-1.282195039e-07f, -1.284598873e-07f, -1.286999942e-07f, -1.289398245e-07f, -1.291793776e-07f, -1.294186533e-07f, -1.296576513e-07f, -1.298963710e-07f, -1.301348123e-07f, -1.303729747e-07f,
+-1.306108579e-07f, -1.308484615e-07f, -1.310857852e-07f, -1.313228286e-07f, -1.315595914e-07f, -1.317960732e-07f, -1.320322737e-07f, -1.322681925e-07f, -1.325038293e-07f, -1.327391837e-07f,
+-1.329742553e-07f, -1.332090439e-07f, -1.334435490e-07f, -1.336777704e-07f, -1.339117076e-07f, -1.341453604e-07f, -1.343787284e-07f, -1.346118112e-07f, -1.348446085e-07f, -1.350771199e-07f,
+-1.353093452e-07f, -1.355412839e-07f, -1.357729358e-07f, -1.360043004e-07f, -1.362353775e-07f, -1.364661667e-07f, -1.366966676e-07f, -1.369268800e-07f, -1.371568034e-07f, -1.373864376e-07f,
+-1.376157822e-07f, -1.378448369e-07f, -1.380736013e-07f, -1.383020751e-07f, -1.385302580e-07f, -1.387581496e-07f, -1.389857496e-07f, -1.392130576e-07f, -1.394400734e-07f, -1.396667966e-07f,
+-1.398932269e-07f, -1.401193638e-07f, -1.403452072e-07f, -1.405707567e-07f, -1.407960119e-07f, -1.410209725e-07f, -1.412456382e-07f, -1.414700087e-07f, -1.416940836e-07f, -1.419178626e-07f,
+-1.421413454e-07f, -1.423645316e-07f, -1.425874210e-07f, -1.428100132e-07f, -1.430323078e-07f, -1.432543046e-07f, -1.434760033e-07f, -1.436974035e-07f, -1.439185048e-07f, -1.441393071e-07f,
+-1.443598099e-07f, -1.445800129e-07f, -1.447999159e-07f, -1.450195184e-07f, -1.452388202e-07f, -1.454578210e-07f, -1.456765205e-07f, -1.458949183e-07f, -1.461130140e-07f, -1.463308075e-07f,
+-1.465482984e-07f, -1.467654864e-07f, -1.469823711e-07f, -1.471989523e-07f, -1.474152296e-07f, -1.476312027e-07f, -1.478468713e-07f, -1.480622352e-07f, -1.482772940e-07f, -1.484920473e-07f,
+-1.487064949e-07f, -1.489206365e-07f, -1.491344718e-07f, -1.493480004e-07f, -1.495612221e-07f, -1.497741366e-07f, -1.499867435e-07f, -1.501990425e-07f, -1.504110333e-07f, -1.506227158e-07f,
+-1.508340894e-07f, -1.510451540e-07f, -1.512559092e-07f, -1.514663547e-07f, -1.516764903e-07f, -1.518863156e-07f, -1.520958304e-07f, -1.523050342e-07f, -1.525139270e-07f, -1.527225082e-07f,
+-1.529307778e-07f, -1.531387352e-07f, -1.533463804e-07f, -1.535537129e-07f, -1.537607325e-07f, -1.539674388e-07f, -1.541738317e-07f, -1.543799107e-07f, -1.545856756e-07f, -1.547911262e-07f,
+-1.549962621e-07f, -1.552010830e-07f, -1.554055887e-07f, -1.556097788e-07f, -1.558136531e-07f, -1.560172113e-07f, -1.562204531e-07f, -1.564233782e-07f, -1.566259863e-07f, -1.568282772e-07f,
+-1.570302505e-07f, -1.572319060e-07f, -1.574332434e-07f, -1.576342625e-07f, -1.578349628e-07f, -1.580353442e-07f, -1.582354064e-07f, -1.584351491e-07f, -1.586345720e-07f, -1.588336749e-07f,
+-1.590324573e-07f, -1.592309192e-07f, -1.594290602e-07f, -1.596268800e-07f, -1.598243784e-07f, -1.600215551e-07f, -1.602184097e-07f, -1.604149421e-07f, -1.606111520e-07f, -1.608070391e-07f,
+-1.610026030e-07f, -1.611978437e-07f, -1.613927607e-07f, -1.615873538e-07f, -1.617816228e-07f, -1.619755673e-07f, -1.621691872e-07f, -1.623624821e-07f, -1.625554517e-07f, -1.627480959e-07f,
+-1.629404143e-07f, -1.631324067e-07f, -1.633240728e-07f, -1.635154124e-07f, -1.637064251e-07f, -1.638971108e-07f, -1.640874692e-07f, -1.642774999e-07f, -1.644672028e-07f, -1.646565776e-07f,
+-1.648456241e-07f, -1.650343419e-07f, -1.652227308e-07f, -1.654107905e-07f, -1.655985209e-07f, -1.657859216e-07f, -1.659729924e-07f, -1.661597331e-07f, -1.663461433e-07f, -1.665322229e-07f,
+-1.667179715e-07f, -1.669033890e-07f, -1.670884750e-07f, -1.672732294e-07f, -1.674576519e-07f, -1.676417421e-07f, -1.678255000e-07f, -1.680089252e-07f, -1.681920175e-07f, -1.683747766e-07f,
+-1.685572023e-07f, -1.687392943e-07f, -1.689210524e-07f, -1.691024765e-07f, -1.692835661e-07f, -1.694643211e-07f, -1.696447412e-07f, -1.698248262e-07f, -1.700045758e-07f, -1.701839899e-07f,
+-1.703630681e-07f, -1.705418103e-07f, -1.707202161e-07f, -1.708982854e-07f, -1.710760179e-07f, -1.712534134e-07f, -1.714304717e-07f, -1.716071924e-07f, -1.717835755e-07f, -1.719596205e-07f,
+-1.721353274e-07f, -1.723106958e-07f, -1.724857256e-07f, -1.726604165e-07f, -1.728347683e-07f, -1.730087808e-07f, -1.731824536e-07f, -1.733557867e-07f, -1.735287797e-07f, -1.737014324e-07f,
+-1.738737447e-07f, -1.740457163e-07f, -1.742173469e-07f, -1.743886363e-07f, -1.745595844e-07f, -1.747301909e-07f, -1.749004555e-07f, -1.750703781e-07f, -1.752399583e-07f, -1.754091961e-07f,
+-1.755780912e-07f, -1.757466433e-07f, -1.759148523e-07f, -1.760827179e-07f, -1.762502399e-07f, -1.764174181e-07f, -1.765842523e-07f, -1.767507422e-07f, -1.769168877e-07f, -1.770826885e-07f,
+-1.772481444e-07f, -1.774132552e-07f, -1.775780207e-07f, -1.777424407e-07f, -1.779065149e-07f, -1.780702433e-07f, -1.782336254e-07f, -1.783966612e-07f, -1.785593504e-07f, -1.787216929e-07f,
+-1.788836883e-07f, -1.790453366e-07f, -1.792066374e-07f, -1.793675907e-07f, -1.795281962e-07f, -1.796884536e-07f, -1.798483628e-07f, -1.800079236e-07f, -1.801671358e-07f, -1.803259992e-07f,
+-1.804845135e-07f, -1.806426786e-07f, -1.808004943e-07f, -1.809579604e-07f, -1.811150767e-07f, -1.812718429e-07f, -1.814282590e-07f, -1.815843246e-07f, -1.817400396e-07f, -1.818954038e-07f,
+-1.820504171e-07f, -1.822050791e-07f, -1.823593898e-07f, -1.825133489e-07f, -1.826669562e-07f, -1.828202116e-07f, -1.829731148e-07f, -1.831256658e-07f, -1.832778641e-07f, -1.834297098e-07f,
+-1.835812026e-07f, -1.837323423e-07f, -1.838831287e-07f, -1.840335617e-07f, -1.841836410e-07f, -1.843333665e-07f, -1.844827380e-07f, -1.846317553e-07f, -1.847804182e-07f, -1.849287266e-07f,
+-1.850766803e-07f, -1.852242790e-07f, -1.853715226e-07f, -1.855184110e-07f, -1.856649439e-07f, -1.858111211e-07f, -1.859569426e-07f, -1.861024081e-07f, -1.862475174e-07f, -1.863922704e-07f,
+-1.865366669e-07f, -1.866807067e-07f, -1.868243896e-07f, -1.869677155e-07f, -1.871106842e-07f, -1.872532956e-07f, -1.873955494e-07f, -1.875374455e-07f, -1.876789837e-07f, -1.878201638e-07f,
+-1.879609858e-07f, -1.881014493e-07f, -1.882415544e-07f, -1.883813007e-07f, -1.885206881e-07f, -1.886597165e-07f, -1.887983856e-07f, -1.889366954e-07f, -1.890746457e-07f, -1.892122363e-07f,
+-1.893494670e-07f, -1.894863377e-07f, -1.896228482e-07f, -1.897589984e-07f, -1.898947881e-07f, -1.900302172e-07f, -1.901652854e-07f, -1.902999927e-07f, -1.904343389e-07f, -1.905683237e-07f,
+-1.907019472e-07f, -1.908352091e-07f, -1.909681092e-07f, -1.911006474e-07f, -1.912328237e-07f, -1.913646377e-07f, -1.914960893e-07f, -1.916271785e-07f, -1.917579051e-07f, -1.918882688e-07f,
+-1.920182696e-07f, -1.921479074e-07f, -1.922771819e-07f, -1.924060930e-07f, -1.925346406e-07f, -1.926628246e-07f, -1.927906447e-07f, -1.929181009e-07f, -1.930451930e-07f, -1.931719208e-07f,
+-1.932982843e-07f, -1.934242833e-07f, -1.935499176e-07f, -1.936751871e-07f, -1.938000916e-07f, -1.939246311e-07f, -1.940488054e-07f, -1.941726144e-07f, -1.942960579e-07f, -1.944191357e-07f,
+-1.945418478e-07f, -1.946641940e-07f, -1.947861742e-07f, -1.949077883e-07f, -1.950290361e-07f, -1.951499174e-07f, -1.952704322e-07f, -1.953905804e-07f, -1.955103617e-07f, -1.956297762e-07f,
+-1.957488235e-07f, -1.958675037e-07f, -1.959858166e-07f, -1.961037620e-07f, -1.962213399e-07f, -1.963385501e-07f, -1.964553924e-07f, -1.965718669e-07f, -1.966879733e-07f, -1.968037115e-07f,
+-1.969190814e-07f, -1.970340829e-07f, -1.971487159e-07f, -1.972629802e-07f, -1.973768758e-07f, -1.974904024e-07f, -1.976035601e-07f, -1.977163486e-07f, -1.978287679e-07f, -1.979408178e-07f,
+-1.980524982e-07f, -1.981638091e-07f, -1.982747503e-07f, -1.983853217e-07f, -1.984955231e-07f, -1.986053546e-07f, -1.987148159e-07f, -1.988239069e-07f, -1.989326276e-07f, -1.990409778e-07f,
+-1.991489574e-07f, -1.992565664e-07f, -1.993638046e-07f, -1.994706719e-07f, -1.995771682e-07f, -1.996832933e-07f, -1.997890473e-07f, -1.998944300e-07f, -1.999994413e-07f, -2.001040810e-07f,
+-2.002083492e-07f, -2.003122456e-07f, -2.004157702e-07f, -2.005189229e-07f, -2.006217036e-07f, -2.007241122e-07f, -2.008261486e-07f, -2.009278127e-07f, -2.010291044e-07f, -2.011300237e-07f,
+-2.012305703e-07f, -2.013307442e-07f, -2.014305454e-07f, -2.015299738e-07f, -2.016290292e-07f, -2.017277115e-07f, -2.018260207e-07f, -2.019239567e-07f, -2.020215194e-07f, -2.021187086e-07f,
+-2.022155244e-07f, -2.023119666e-07f, -2.024080352e-07f, -2.025037300e-07f, -2.025990510e-07f, -2.026939981e-07f, -2.027885712e-07f, -2.028827702e-07f, -2.029765950e-07f, -2.030700456e-07f,
+-2.031631219e-07f, -2.032558238e-07f, -2.033481512e-07f, -2.034401040e-07f, -2.035316822e-07f, -2.036228857e-07f, -2.037137144e-07f, -2.038041682e-07f, -2.038942471e-07f, -2.039839510e-07f,
+-2.040732797e-07f, -2.041622334e-07f, -2.042508117e-07f, -2.043390148e-07f, -2.044268425e-07f, -2.045142947e-07f, -2.046013715e-07f, -2.046880726e-07f, -2.047743981e-07f, -2.048603478e-07f,
+-2.049459218e-07f, -2.050311199e-07f, -2.051159421e-07f, -2.052003882e-07f, -2.052844584e-07f, -2.053681524e-07f, -2.054514702e-07f, -2.055344118e-07f, -2.056169771e-07f, -2.056991660e-07f,
+-2.057809785e-07f, -2.058624145e-07f, -2.059434740e-07f, -2.060241568e-07f, -2.061044630e-07f, -2.061843925e-07f, -2.062639452e-07f, -2.063431211e-07f, -2.064219201e-07f, -2.065003421e-07f,
+-2.065783872e-07f, -2.066560552e-07f, -2.067333461e-07f, -2.068102599e-07f, -2.068867964e-07f, -2.069629557e-07f, -2.070387377e-07f, -2.071141424e-07f, -2.071891696e-07f, -2.072638194e-07f,
+-2.073380918e-07f, -2.074119865e-07f, -2.074855037e-07f, -2.075586433e-07f, -2.076314052e-07f, -2.077037893e-07f, -2.077757957e-07f, -2.078474243e-07f, -2.079186751e-07f, -2.079895479e-07f,
+-2.080600429e-07f, -2.081301599e-07f, -2.081998988e-07f, -2.082692598e-07f, -2.083382426e-07f, -2.084068473e-07f, -2.084750739e-07f, -2.085429223e-07f, -2.086103925e-07f, -2.086774844e-07f,
+-2.087441980e-07f, -2.088105333e-07f, -2.088764902e-07f, -2.089420687e-07f, -2.090072688e-07f, -2.090720905e-07f, -2.091365337e-07f, -2.092005984e-07f, -2.092642845e-07f, -2.093275921e-07f,
+-2.093905211e-07f, -2.094530715e-07f, -2.095152432e-07f, -2.095770362e-07f, -2.096384506e-07f, -2.096994863e-07f, -2.097601432e-07f, -2.098204213e-07f, -2.098803207e-07f, -2.099398413e-07f,
+-2.099989830e-07f, -2.100577459e-07f, -2.101161300e-07f, -2.101741351e-07f, -2.102317614e-07f, -2.102890087e-07f, -2.103458772e-07f, -2.104023666e-07f, -2.104584771e-07f, -2.105142087e-07f,
+-2.105695612e-07f, -2.106245348e-07f, -2.106791293e-07f, -2.107333448e-07f, -2.107871813e-07f, -2.108406387e-07f, -2.108937171e-07f, -2.109464164e-07f, -2.109987366e-07f, -2.110506778e-07f,
+-2.111022399e-07f, -2.111534228e-07f, -2.112042267e-07f, -2.112546515e-07f, -2.113046971e-07f, -2.113543637e-07f, -2.114036511e-07f, -2.114525594e-07f, -2.115010886e-07f, -2.115492387e-07f,
+-2.115970097e-07f, -2.116444015e-07f, -2.116914143e-07f, -2.117380479e-07f, -2.117843024e-07f, -2.118301778e-07f, -2.118756740e-07f, -2.119207912e-07f, -2.119655293e-07f, -2.120098883e-07f,
+-2.120538682e-07f, -2.120974690e-07f, -2.121406908e-07f, -2.121835335e-07f, -2.122259971e-07f, -2.122680817e-07f, -2.123097873e-07f, -2.123511138e-07f, -2.123920614e-07f, -2.124326299e-07f,
+-2.124728194e-07f, -2.125126300e-07f, -2.125520616e-07f, -2.125911143e-07f, -2.126297881e-07f, -2.126680829e-07f, -2.127059989e-07f, -2.127435360e-07f, -2.127806942e-07f, -2.128174736e-07f,
+-2.128538741e-07f, -2.128898959e-07f, -2.129255389e-07f, -2.129608031e-07f, -2.129956886e-07f, -2.130301954e-07f, -2.130643235e-07f, -2.130980730e-07f, -2.131314438e-07f, -2.131644360e-07f,
+-2.131970496e-07f, -2.132292846e-07f, -2.132611411e-07f, -2.132926191e-07f, -2.133237187e-07f, -2.133544398e-07f, -2.133847824e-07f, -2.134147467e-07f, -2.134443327e-07f, -2.134735403e-07f,
+-2.135023696e-07f, -2.135308207e-07f, -2.135588936e-07f, -2.135865882e-07f, -2.136139047e-07f, -2.136408431e-07f, -2.136674035e-07f, -2.136935858e-07f, -2.137193900e-07f, -2.137448164e-07f,
+-2.137698648e-07f, -2.137945353e-07f, -2.138188279e-07f, -2.138427428e-07f, -2.138662799e-07f, -2.138894393e-07f, -2.139122210e-07f, -2.139346251e-07f, -2.139566516e-07f, -2.139783005e-07f,
+-2.139995720e-07f, -2.140204660e-07f, -2.140409826e-07f, -2.140611219e-07f, -2.140808838e-07f, -2.141002685e-07f, -2.141192760e-07f, -2.141379063e-07f, -2.141561595e-07f, -2.141740357e-07f,
+-2.141915349e-07f, -2.142086571e-07f, -2.142254024e-07f, -2.142417709e-07f, -2.142577626e-07f, -2.142733775e-07f, -2.142886158e-07f, -2.143034775e-07f, -2.143179626e-07f, -2.143320712e-07f,
+-2.143458033e-07f, -2.143591591e-07f, -2.143721386e-07f, -2.143847418e-07f, -2.143969688e-07f, -2.144088196e-07f, -2.144202944e-07f, -2.144313931e-07f, -2.144421160e-07f, -2.144524629e-07f,
+-2.144624340e-07f, -2.144720293e-07f, -2.144812490e-07f, -2.144900930e-07f, -2.144985615e-07f, -2.145066545e-07f, -2.145143721e-07f, -2.145217144e-07f, -2.145286814e-07f, -2.145352731e-07f,
+-2.145414898e-07f, -2.145473313e-07f, -2.145527979e-07f, -2.145578896e-07f, -2.145626064e-07f, -2.145669485e-07f, -2.145709159e-07f, -2.145745086e-07f, -2.145777269e-07f, -2.145805706e-07f,
+-2.145830400e-07f, -2.145851351e-07f, -2.145868560e-07f, -2.145882027e-07f, -2.145891754e-07f, -2.145897741e-07f, -2.145899988e-07f, -2.145898498e-07f, -2.145893270e-07f, -2.145884306e-07f,
+-2.145871606e-07f, -2.145855172e-07f, -2.145835003e-07f, -2.145811102e-07f, -2.145783468e-07f, -2.145752102e-07f, -2.145717007e-07f, -2.145678182e-07f, -2.145635628e-07f, -2.145589346e-07f,
+-2.145539337e-07f, -2.145485603e-07f, -2.145428143e-07f, -2.145366960e-07f, -2.145302053e-07f, -2.145233424e-07f, -2.145161074e-07f, -2.145085003e-07f, -2.145005213e-07f, -2.144921705e-07f,
+-2.144834479e-07f, -2.144743536e-07f, -2.144648879e-07f, -2.144550506e-07f, -2.144448421e-07f, -2.144342622e-07f, -2.144233112e-07f, -2.144119892e-07f, -2.144002963e-07f, -2.143882324e-07f,
+-2.143757979e-07f, -2.143629927e-07f, -2.143498170e-07f, -2.143362708e-07f, -2.143223544e-07f, -2.143080677e-07f, -2.142934109e-07f, -2.142783842e-07f, -2.142629875e-07f, -2.142472210e-07f,
+-2.142310849e-07f, -2.142145792e-07f, -2.141977041e-07f, -2.141804596e-07f, -2.141628459e-07f, -2.141448631e-07f, -2.141265113e-07f, -2.141077906e-07f, -2.140887012e-07f, -2.140692430e-07f,
+-2.140494164e-07f, -2.140292213e-07f, -2.140086579e-07f, -2.139877263e-07f, -2.139664266e-07f, -2.139447590e-07f, -2.139227235e-07f, -2.139003204e-07f, -2.138775496e-07f, -2.138544114e-07f,
+-2.138309058e-07f, -2.138070330e-07f, -2.137827931e-07f, -2.137581862e-07f, -2.137332125e-07f, -2.137078720e-07f, -2.136821649e-07f, -2.136560914e-07f, -2.136296515e-07f, -2.136028454e-07f,
+-2.135756731e-07f, -2.135481349e-07f, -2.135202309e-07f, -2.134919612e-07f, -2.134633259e-07f, -2.134343251e-07f, -2.134049590e-07f, -2.133752278e-07f, -2.133451315e-07f, -2.133146703e-07f,
+-2.132838443e-07f, -2.132526536e-07f, -2.132210984e-07f, -2.131891789e-07f, -2.131568951e-07f, -2.131242473e-07f, -2.130912354e-07f, -2.130578598e-07f, -2.130241204e-07f, -2.129900176e-07f,
+-2.129555513e-07f, -2.129207217e-07f, -2.128855290e-07f, -2.128499734e-07f, -2.128140549e-07f, -2.127777737e-07f, -2.127411299e-07f, -2.127041238e-07f, -2.126667554e-07f, -2.126290248e-07f,
+-2.125909323e-07f, -2.125524780e-07f, -2.125136620e-07f, -2.124744845e-07f, -2.124349456e-07f, -2.123950455e-07f, -2.123547843e-07f, -2.123141621e-07f, -2.122731792e-07f, -2.122318357e-07f,
+-2.121901317e-07f, -2.121480674e-07f, -2.121056429e-07f, -2.120628584e-07f, -2.120197140e-07f, -2.119762099e-07f, -2.119323463e-07f, -2.118881233e-07f, -2.118435411e-07f, -2.117985998e-07f,
+-2.117532996e-07f, -2.117076406e-07f, -2.116616230e-07f, -2.116152470e-07f, -2.115685127e-07f, -2.115214203e-07f, -2.114739699e-07f, -2.114261617e-07f, -2.113779959e-07f, -2.113294727e-07f,
+-2.112805921e-07f, -2.112313544e-07f, -2.111817598e-07f, -2.111318083e-07f, -2.110815002e-07f, -2.110308356e-07f, -2.109798147e-07f, -2.109284377e-07f, -2.108767047e-07f, -2.108246159e-07f,
+-2.107721715e-07f, -2.107193716e-07f, -2.106662165e-07f, -2.106127062e-07f, -2.105588410e-07f, -2.105046210e-07f, -2.104500465e-07f, -2.103951175e-07f, -2.103398342e-07f, -2.102841969e-07f,
+-2.102282057e-07f, -2.101718608e-07f, -2.101151623e-07f, -2.100581105e-07f, -2.100007055e-07f, -2.099429475e-07f, -2.098848367e-07f, -2.098263732e-07f, -2.097675572e-07f, -2.097083890e-07f,
+-2.096488686e-07f, -2.095889964e-07f, -2.095287723e-07f, -2.094681968e-07f, -2.094072699e-07f, -2.093459917e-07f, -2.092843626e-07f, -2.092223827e-07f, -2.091600521e-07f, -2.090973711e-07f,
+-2.090343398e-07f, -2.089709585e-07f, -2.089072273e-07f, -2.088431464e-07f, -2.087787160e-07f, -2.087139363e-07f, -2.086488075e-07f, -2.085833297e-07f, -2.085175032e-07f, -2.084513282e-07f,
+-2.083848048e-07f, -2.083179333e-07f, -2.082507138e-07f, -2.081831465e-07f, -2.081152317e-07f, -2.080469694e-07f, -2.079783600e-07f, -2.079094037e-07f, -2.078401005e-07f, -2.077704508e-07f,
+-2.077004546e-07f, -2.076301123e-07f, -2.075594240e-07f, -2.074883899e-07f, -2.074170102e-07f, -2.073452851e-07f, -2.072732149e-07f, -2.072007996e-07f, -2.071280396e-07f, -2.070549350e-07f,
+-2.069814861e-07f, -2.069076929e-07f, -2.068335559e-07f, -2.067590750e-07f, -2.066842507e-07f, -2.066090829e-07f, -2.065335721e-07f, -2.064577183e-07f, -2.063815218e-07f, -2.063049828e-07f,
+-2.062281016e-07f, -2.061508782e-07f, -2.060733129e-07f, -2.059954060e-07f, -2.059171577e-07f, -2.058385681e-07f, -2.057596375e-07f, -2.056803660e-07f, -2.056007540e-07f, -2.055208016e-07f,
+-2.054405090e-07f, -2.053598765e-07f, -2.052789043e-07f, -2.051975925e-07f, -2.051159414e-07f, -2.050339513e-07f, -2.049516223e-07f, -2.048689546e-07f, -2.047859486e-07f, -2.047026043e-07f,
+-2.046189220e-07f, -2.045349020e-07f, -2.044505445e-07f, -2.043658496e-07f, -2.042808176e-07f, -2.041954488e-07f, -2.041097433e-07f, -2.040237014e-07f, -2.039373233e-07f, -2.038506093e-07f,
+-2.037635595e-07f, -2.036761741e-07f, -2.035884535e-07f, -2.035003979e-07f, -2.034120074e-07f, -2.033232823e-07f, -2.032342228e-07f, -2.031448291e-07f, -2.030551016e-07f, -2.029650404e-07f,
+-2.028746457e-07f, -2.027839178e-07f, -2.026928570e-07f, -2.026014633e-07f, -2.025097372e-07f, -2.024176788e-07f, -2.023252883e-07f, -2.022325660e-07f, -2.021395121e-07f, -2.020461269e-07f,
+-2.019524106e-07f, -2.018583634e-07f, -2.017639856e-07f, -2.016692774e-07f, -2.015742390e-07f, -2.014788707e-07f, -2.013831728e-07f, -2.012871454e-07f, -2.011907888e-07f, -2.010941033e-07f,
+-2.009970891e-07f, -2.008997464e-07f, -2.008020755e-07f, -2.007040766e-07f, -2.006057500e-07f, -2.005070958e-07f, -2.004081145e-07f, -2.003088061e-07f, -2.002091710e-07f, -2.001092094e-07f,
+-2.000089216e-07f, -1.999083077e-07f, -1.998073681e-07f, -1.997061029e-07f, -1.996045125e-07f, -1.995025971e-07f, -1.994003569e-07f, -1.992977922e-07f, -1.991949033e-07f, -1.990916903e-07f,
+-1.989881536e-07f, -1.988842934e-07f, -1.987801099e-07f, -1.986756034e-07f, -1.985707742e-07f, -1.984656225e-07f, -1.983601486e-07f, -1.982543527e-07f, -1.981482351e-07f, -1.980417961e-07f,
+-1.979350358e-07f, -1.978279546e-07f, -1.977205527e-07f, -1.976128304e-07f, -1.975047879e-07f, -1.973964255e-07f, -1.972877435e-07f, -1.971787420e-07f, -1.970694215e-07f, -1.969597821e-07f,
+-1.968498241e-07f, -1.967395477e-07f, -1.966289533e-07f, -1.965180411e-07f, -1.964068113e-07f, -1.962952643e-07f, -1.961834002e-07f, -1.960712194e-07f, -1.959587221e-07f, -1.958459086e-07f,
+-1.957327792e-07f, -1.956193341e-07f, -1.955055735e-07f, -1.953914979e-07f, -1.952771073e-07f, -1.951624022e-07f, -1.950473827e-07f, -1.949320492e-07f, -1.948164019e-07f, -1.947004411e-07f,
+-1.945841670e-07f, -1.944675800e-07f, -1.943506802e-07f, -1.942334681e-07f, -1.941159438e-07f, -1.939981076e-07f, -1.938799598e-07f, -1.937615007e-07f, -1.936427306e-07f, -1.935236497e-07f,
+-1.934042583e-07f, -1.932845567e-07f, -1.931645451e-07f, -1.930442239e-07f, -1.929235933e-07f, -1.928026536e-07f, -1.926814052e-07f, -1.925598481e-07f, -1.924379828e-07f, -1.923158096e-07f,
+-1.921933286e-07f, -1.920705403e-07f, -1.919474448e-07f, -1.918240425e-07f, -1.917003336e-07f, -1.915763184e-07f, -1.914519973e-07f, -1.913273704e-07f, -1.912024381e-07f, -1.910772007e-07f,
+-1.909516585e-07f, -1.908258117e-07f, -1.906996606e-07f, -1.905732056e-07f, -1.904464468e-07f, -1.903193847e-07f, -1.901920194e-07f, -1.900643514e-07f, -1.899363808e-07f, -1.898081079e-07f,
+-1.896795331e-07f, -1.895506566e-07f, -1.894214788e-07f, -1.892919999e-07f, -1.891622202e-07f, -1.890321401e-07f, -1.889017597e-07f, -1.887710795e-07f, -1.886400996e-07f, -1.885088205e-07f,
+-1.883772423e-07f, -1.882453654e-07f, -1.881131901e-07f, -1.879807167e-07f, -1.878479455e-07f, -1.877148767e-07f, -1.875815108e-07f, -1.874478479e-07f, -1.873138883e-07f, -1.871796325e-07f,
+-1.870450806e-07f, -1.869102330e-07f, -1.867750900e-07f, -1.866396519e-07f, -1.865039190e-07f, -1.863678915e-07f, -1.862315698e-07f, -1.860949543e-07f, -1.859580451e-07f, -1.858208426e-07f,
+-1.856833472e-07f, -1.855455590e-07f, -1.854074785e-07f, -1.852691059e-07f, -1.851304415e-07f, -1.849914857e-07f, -1.848522387e-07f, -1.847127009e-07f, -1.845728726e-07f, -1.844327540e-07f,
+-1.842923455e-07f, -1.841516474e-07f, -1.840106600e-07f, -1.838693836e-07f, -1.837278186e-07f, -1.835859652e-07f, -1.834438237e-07f, -1.833013945e-07f, -1.831586779e-07f, -1.830156742e-07f,
+-1.828723837e-07f, -1.827288067e-07f, -1.825849435e-07f, -1.824407945e-07f, -1.822963599e-07f, -1.821516402e-07f, -1.820066355e-07f, -1.818613462e-07f, -1.817157727e-07f, -1.815699152e-07f,
+-1.814237741e-07f, -1.812773497e-07f, -1.811306422e-07f, -1.809836521e-07f, -1.808363797e-07f, -1.806888252e-07f, -1.805409890e-07f, -1.803928714e-07f, -1.802444727e-07f, -1.800957933e-07f,
+-1.799468335e-07f, -1.797975935e-07f, -1.796480738e-07f, -1.794982746e-07f, -1.793481963e-07f, -1.791978392e-07f, -1.790472036e-07f, -1.788962898e-07f, -1.787450982e-07f, -1.785936291e-07f,
+-1.784418828e-07f, -1.782898597e-07f, -1.781375600e-07f, -1.779849842e-07f, -1.778321324e-07f, -1.776790052e-07f, -1.775256027e-07f, -1.773719253e-07f, -1.772179734e-07f, -1.770637473e-07f,
+-1.769092473e-07f, -1.767544737e-07f, -1.765994269e-07f, -1.764441072e-07f, -1.762885149e-07f, -1.761326504e-07f, -1.759765140e-07f, -1.758201060e-07f, -1.756634268e-07f, -1.755064768e-07f,
+-1.753492561e-07f, -1.751917652e-07f, -1.750340045e-07f, -1.748759741e-07f, -1.747176746e-07f, -1.745591062e-07f, -1.744002692e-07f, -1.742411640e-07f, -1.740817910e-07f, -1.739221504e-07f,
+-1.737622427e-07f, -1.736020680e-07f, -1.734416269e-07f, -1.732809196e-07f, -1.731199465e-07f, -1.729587078e-07f, -1.727972041e-07f, -1.726354355e-07f, -1.724734024e-07f, -1.723111052e-07f,
+-1.721485442e-07f, -1.719857198e-07f, -1.718226323e-07f, -1.716592821e-07f, -1.714956694e-07f, -1.713317946e-07f, -1.711676582e-07f, -1.710032604e-07f, -1.708386015e-07f, -1.706736820e-07f,
+-1.705085021e-07f, -1.703430622e-07f, -1.701773627e-07f, -1.700114039e-07f, -1.698451861e-07f, -1.696787098e-07f, -1.695119752e-07f, -1.693449827e-07f, -1.691777326e-07f, -1.690102253e-07f,
+-1.688424612e-07f, -1.686744406e-07f, -1.685061638e-07f, -1.683376313e-07f, -1.681688433e-07f, -1.679998002e-07f, -1.678305023e-07f, -1.676609501e-07f, -1.674911438e-07f, -1.673210838e-07f,
+-1.671507705e-07f, -1.669802043e-07f, -1.668093854e-07f, -1.666383142e-07f, -1.664669912e-07f, -1.662954165e-07f, -1.661235907e-07f, -1.659515141e-07f, -1.657791869e-07f, -1.656066096e-07f,
+-1.654337826e-07f, -1.652607061e-07f, -1.650873806e-07f, -1.649138064e-07f, -1.647399838e-07f, -1.645659133e-07f, -1.643915951e-07f, -1.642170297e-07f, -1.640422174e-07f, -1.638671586e-07f,
+-1.636918535e-07f, -1.635163027e-07f, -1.633405064e-07f, -1.631644650e-07f, -1.629881789e-07f, -1.628116484e-07f, -1.626348739e-07f, -1.624578558e-07f, -1.622805944e-07f, -1.621030901e-07f,
+-1.619253432e-07f, -1.617473541e-07f, -1.615691233e-07f, -1.613906509e-07f, -1.612119375e-07f, -1.610329834e-07f, -1.608537889e-07f, -1.606743544e-07f, -1.604946803e-07f, -1.603147670e-07f,
+-1.601346148e-07f, -1.599542240e-07f, -1.597735951e-07f, -1.595927285e-07f, -1.594116244e-07f, -1.592302832e-07f, -1.590487054e-07f, -1.588668913e-07f, -1.586848413e-07f, -1.585025557e-07f,
+-1.583200350e-07f, -1.581372794e-07f, -1.579542893e-07f, -1.577710652e-07f, -1.575876074e-07f, -1.574039163e-07f, -1.572199922e-07f, -1.570358355e-07f, -1.568514467e-07f, -1.566668260e-07f,
+-1.564819738e-07f, -1.562968906e-07f, -1.561115766e-07f, -1.559260323e-07f, -1.557402581e-07f, -1.555542543e-07f, -1.553680212e-07f, -1.551815594e-07f, -1.549948691e-07f, -1.548079507e-07f,
+-1.546208046e-07f, -1.544334312e-07f, -1.542458309e-07f, -1.540580040e-07f, -1.538699509e-07f, -1.536816721e-07f, -1.534931678e-07f, -1.533044384e-07f, -1.531154844e-07f, -1.529263061e-07f,
+-1.527369039e-07f, -1.525472782e-07f, -1.523574293e-07f, -1.521673577e-07f, -1.519770637e-07f, -1.517865478e-07f, -1.515958102e-07f, -1.514048514e-07f, -1.512136717e-07f, -1.510222716e-07f,
+-1.508306514e-07f, -1.506388115e-07f, -1.504467522e-07f, -1.502544741e-07f, -1.500619774e-07f, -1.498692626e-07f, -1.496763300e-07f, -1.494831800e-07f, -1.492898130e-07f, -1.490962295e-07f,
+-1.489024296e-07f, -1.487084140e-07f, -1.485141829e-07f, -1.483197367e-07f, -1.481250759e-07f, -1.479302008e-07f, -1.477351118e-07f, -1.475398092e-07f, -1.473442936e-07f, -1.471485652e-07f,
+-1.469526245e-07f, -1.467564718e-07f, -1.465601076e-07f, -1.463635322e-07f, -1.461667460e-07f, -1.459697495e-07f, -1.457725429e-07f, -1.455751267e-07f, -1.453775014e-07f, -1.451796672e-07f,
+-1.449816245e-07f, -1.447833739e-07f, -1.445849156e-07f, -1.443862500e-07f, -1.441873776e-07f, -1.439882987e-07f, -1.437890138e-07f, -1.435895231e-07f, -1.433898272e-07f, -1.431899265e-07f,
+-1.429898212e-07f, -1.427895118e-07f, -1.425889987e-07f, -1.423882824e-07f, -1.421873631e-07f, -1.419862413e-07f, -1.417849174e-07f, -1.415833918e-07f, -1.413816649e-07f, -1.411797371e-07f,
+-1.409776087e-07f, -1.407752802e-07f, -1.405727520e-07f, -1.403700244e-07f, -1.401670979e-07f, -1.399639729e-07f, -1.397606498e-07f, -1.395571289e-07f, -1.393534107e-07f, -1.391494956e-07f,
+-1.389453839e-07f, -1.387410761e-07f, -1.385365726e-07f, -1.383318738e-07f, -1.381269800e-07f, -1.379218917e-07f, -1.377166093e-07f, -1.375111331e-07f, -1.373054637e-07f, -1.370996013e-07f,
+-1.368935464e-07f, -1.366872994e-07f, -1.364808607e-07f, -1.362742307e-07f, -1.360674098e-07f, -1.358603985e-07f, -1.356531970e-07f, -1.354458058e-07f, -1.352382254e-07f, -1.350304560e-07f,
+-1.348224983e-07f, -1.346143524e-07f, -1.344060189e-07f, -1.341974981e-07f, -1.339887905e-07f, -1.337798965e-07f, -1.335708164e-07f, -1.333615507e-07f, -1.331520998e-07f, -1.329424640e-07f,
+-1.327326439e-07f, -1.325226398e-07f, -1.323124521e-07f, -1.321020812e-07f, -1.318915275e-07f, -1.316807915e-07f, -1.314698735e-07f, -1.312587740e-07f, -1.310474933e-07f, -1.308360320e-07f,
+-1.306243903e-07f, -1.304125687e-07f, -1.302005676e-07f, -1.299883874e-07f, -1.297760286e-07f, -1.295634915e-07f, -1.293507766e-07f, -1.291378842e-07f, -1.289248148e-07f, -1.287115688e-07f,
+-1.284981466e-07f, -1.282845485e-07f, -1.280707752e-07f, -1.278568268e-07f, -1.276427039e-07f, -1.274284069e-07f, -1.272139362e-07f, -1.269992921e-07f, -1.267844751e-07f, -1.265694857e-07f,
+-1.263543242e-07f, -1.261389910e-07f, -1.259234866e-07f, -1.257078114e-07f, -1.254919658e-07f, -1.252759502e-07f, -1.250597650e-07f, -1.248434106e-07f, -1.246268875e-07f, -1.244101961e-07f,
+-1.241933368e-07f, -1.239763099e-07f, -1.237591160e-07f, -1.235417554e-07f, -1.233242286e-07f, -1.231065360e-07f, -1.228886779e-07f, -1.226706549e-07f, -1.224524672e-07f, -1.222341155e-07f,
+-1.220155999e-07f, -1.217969211e-07f, -1.215780794e-07f, -1.213590751e-07f, -1.211399089e-07f, -1.209205809e-07f, -1.207010918e-07f, -1.204814418e-07f, -1.202616315e-07f, -1.200416612e-07f,
+-1.198215314e-07f, -1.196012424e-07f, -1.193807947e-07f, -1.191601888e-07f, -1.189394250e-07f, -1.187185037e-07f, -1.184974254e-07f, -1.182761906e-07f, -1.180547995e-07f, -1.178332527e-07f,
+-1.176115506e-07f, -1.173896936e-07f, -1.171676820e-07f, -1.169455165e-07f, -1.167231972e-07f, -1.165007248e-07f, -1.162780996e-07f, -1.160553219e-07f, -1.158323924e-07f, -1.156093113e-07f,
+-1.153860791e-07f, -1.151626962e-07f, -1.149391631e-07f, -1.147154802e-07f, -1.144916478e-07f, -1.142676665e-07f, -1.140435366e-07f, -1.138192586e-07f, -1.135948329e-07f, -1.133702599e-07f,
+-1.131455400e-07f, -1.129206738e-07f, -1.126956615e-07f, -1.124705036e-07f, -1.122452006e-07f, -1.120197529e-07f, -1.117941608e-07f, -1.115684249e-07f, -1.113425456e-07f, -1.111165232e-07f,
+-1.108903583e-07f, -1.106640511e-07f, -1.104376023e-07f, -1.102110121e-07f, -1.099842811e-07f, -1.097574096e-07f, -1.095303981e-07f, -1.093032469e-07f, -1.090759566e-07f, -1.088485276e-07f,
+-1.086209603e-07f, -1.083932550e-07f, -1.081654124e-07f, -1.079374327e-07f, -1.077093164e-07f, -1.074810639e-07f, -1.072526757e-07f, -1.070241522e-07f, -1.067954938e-07f, -1.065667009e-07f,
+-1.063377741e-07f, -1.061087136e-07f, -1.058795200e-07f, -1.056501937e-07f, -1.054207350e-07f, -1.051911445e-07f, -1.049614226e-07f, -1.047315697e-07f, -1.045015861e-07f, -1.042714725e-07f,
+-1.040412291e-07f, -1.038108565e-07f, -1.035803549e-07f, -1.033497250e-07f, -1.031189671e-07f, -1.028880817e-07f, -1.026570691e-07f, -1.024259298e-07f, -1.021946643e-07f, -1.019632730e-07f,
+-1.017317562e-07f, -1.015001145e-07f, -1.012683483e-07f, -1.010364580e-07f, -1.008044440e-07f, -1.005723068e-07f, -1.003400468e-07f, -1.001076644e-07f, -9.987516013e-08f, -9.964253435e-08f,
+-9.940978751e-08f, -9.917692005e-08f, -9.894393239e-08f, -9.871082497e-08f, -9.847759824e-08f, -9.824425261e-08f, -9.801078853e-08f, -9.777720643e-08f, -9.754350674e-08f, -9.730968990e-08f,
+-9.707575635e-08f, -9.684170651e-08f, -9.660754083e-08f, -9.637325974e-08f, -9.613886368e-08f, -9.590435307e-08f, -9.566972836e-08f, -9.543498998e-08f, -9.520013837e-08f, -9.496517396e-08f,
+-9.473009719e-08f, -9.449490849e-08f, -9.425960831e-08f, -9.402419707e-08f, -9.378867521e-08f, -9.355304318e-08f, -9.331730140e-08f, -9.308145031e-08f, -9.284549035e-08f, -9.260942196e-08f,
+-9.237324557e-08f, -9.213696162e-08f, -9.190057055e-08f, -9.166407279e-08f, -9.142746878e-08f, -9.119075896e-08f, -9.095394377e-08f, -9.071702364e-08f, -9.047999901e-08f, -9.024287032e-08f,
+-9.000563800e-08f, -8.976830250e-08f, -8.953086425e-08f, -8.929332369e-08f, -8.905568126e-08f, -8.881793740e-08f, -8.858009254e-08f, -8.834214712e-08f, -8.810410158e-08f, -8.786595636e-08f,
+-8.762771190e-08f, -8.738936863e-08f, -8.715092700e-08f, -8.691238745e-08f, -8.667375040e-08f, -8.643501631e-08f, -8.619618561e-08f, -8.595725873e-08f, -8.571823613e-08f, -8.547911823e-08f,
+-8.523990548e-08f, -8.500059832e-08f, -8.476119718e-08f, -8.452170251e-08f, -8.428211474e-08f, -8.404243431e-08f, -8.380266167e-08f, -8.356279725e-08f, -8.332284150e-08f, -8.308279485e-08f,
+-8.284265774e-08f, -8.260243061e-08f, -8.236211390e-08f, -8.212170806e-08f, -8.188121352e-08f, -8.164063073e-08f, -8.139996011e-08f, -8.115920212e-08f, -8.091835719e-08f, -8.067742577e-08f,
+-8.043640829e-08f, -8.019530520e-08f, -7.995411693e-08f, -7.971284393e-08f, -7.947148663e-08f, -7.923004549e-08f, -7.898852092e-08f, -7.874691339e-08f, -7.850522333e-08f, -7.826345118e-08f,
+-7.802159738e-08f, -7.777966237e-08f, -7.753764660e-08f, -7.729555050e-08f, -7.705337451e-08f, -7.681111908e-08f, -7.656878465e-08f, -7.632637166e-08f, -7.608388054e-08f, -7.584131175e-08f,
+-7.559866572e-08f, -7.535594290e-08f, -7.511314372e-08f, -7.487026863e-08f, -7.462731806e-08f, -7.438429247e-08f, -7.414119228e-08f, -7.389801795e-08f, -7.365476991e-08f, -7.341144861e-08f,
+-7.316805449e-08f, -7.292458798e-08f, -7.268104954e-08f, -7.243743959e-08f, -7.219375859e-08f, -7.195000698e-08f, -7.170618520e-08f, -7.146229368e-08f, -7.121833288e-08f, -7.097430323e-08f,
+-7.073020517e-08f, -7.048603915e-08f, -7.024180561e-08f, -6.999750499e-08f, -6.975313774e-08f, -6.950870429e-08f, -6.926420508e-08f, -6.901964056e-08f, -6.877501118e-08f, -6.853031736e-08f,
+-6.828555957e-08f, -6.804073822e-08f, -6.779585378e-08f, -6.755090668e-08f, -6.730589736e-08f, -6.706082626e-08f, -6.681569384e-08f, -6.657050052e-08f, -6.632524675e-08f, -6.607993298e-08f,
+-6.583455964e-08f, -6.558912718e-08f, -6.534363604e-08f, -6.509808666e-08f, -6.485247948e-08f, -6.460681495e-08f, -6.436109351e-08f, -6.411531560e-08f, -6.386948167e-08f, -6.362359214e-08f,
+-6.337764748e-08f, -6.313164811e-08f, -6.288559449e-08f, -6.263948704e-08f, -6.239332623e-08f, -6.214711248e-08f, -6.190084624e-08f, -6.165452795e-08f, -6.140815806e-08f, -6.116173700e-08f,
+-6.091526522e-08f, -6.066874316e-08f, -6.042217126e-08f, -6.017554996e-08f, -5.992887971e-08f, -5.968216095e-08f, -5.943539412e-08f, -5.918857966e-08f, -5.894171802e-08f, -5.869480963e-08f,
+-5.844785494e-08f, -5.820085439e-08f, -5.795380842e-08f, -5.770671747e-08f, -5.745958199e-08f, -5.721240241e-08f, -5.696517919e-08f, -5.671791275e-08f, -5.647060355e-08f, -5.622325202e-08f,
+-5.597585861e-08f, -5.572842376e-08f, -5.548094790e-08f, -5.523343149e-08f, -5.498587496e-08f, -5.473827875e-08f, -5.449064330e-08f, -5.424296907e-08f, -5.399525648e-08f, -5.374750598e-08f,
+-5.349971802e-08f, -5.325189302e-08f, -5.300403144e-08f, -5.275613372e-08f, -5.250820029e-08f, -5.226023160e-08f, -5.201222809e-08f, -5.176419020e-08f, -5.151611837e-08f, -5.126801304e-08f,
+-5.101987466e-08f, -5.077170366e-08f, -5.052350048e-08f, -5.027526557e-08f, -5.002699937e-08f, -4.977870231e-08f, -4.953037485e-08f, -4.928201741e-08f, -4.903363045e-08f, -4.878521439e-08f,
+-4.853676968e-08f, -4.828829677e-08f, -4.803979609e-08f, -4.779126808e-08f, -4.754271318e-08f, -4.729413184e-08f, -4.704552449e-08f, -4.679689158e-08f, -4.654823353e-08f, -4.629955081e-08f,
+-4.605084383e-08f, -4.580211305e-08f, -4.555335891e-08f, -4.530458183e-08f, -4.505578228e-08f, -4.480696067e-08f, -4.455811746e-08f, -4.430925308e-08f, -4.406036797e-08f, -4.381146258e-08f,
+-4.356253733e-08f, -4.331359268e-08f, -4.306462905e-08f, -4.281564690e-08f, -4.256664665e-08f, -4.231762875e-08f, -4.206859364e-08f, -4.181954175e-08f, -4.157047353e-08f, -4.132138941e-08f,
+-4.107228983e-08f, -4.082317524e-08f, -4.057404606e-08f, -4.032490274e-08f, -4.007574571e-08f, -3.982657542e-08f, -3.957739231e-08f, -3.932819680e-08f, -3.907898935e-08f, -3.882977038e-08f,
+-3.858054033e-08f, -3.833129965e-08f, -3.808204878e-08f, -3.783278814e-08f, -3.758351817e-08f, -3.733423933e-08f, -3.708495203e-08f, -3.683565672e-08f, -3.658635384e-08f, -3.633704382e-08f,
+-3.608772711e-08f, -3.583840413e-08f, -3.558907533e-08f, -3.533974113e-08f, -3.509040199e-08f, -3.484105834e-08f, -3.459171060e-08f, -3.434235923e-08f, -3.409300465e-08f, -3.384364730e-08f,
+-3.359428762e-08f, -3.334492604e-08f, -3.309556300e-08f, -3.284619894e-08f, -3.259683429e-08f, -3.234746949e-08f, -3.209810497e-08f, -3.184874118e-08f, -3.159937853e-08f, -3.135001748e-08f,
+-3.110065845e-08f, -3.085130188e-08f, -3.060194821e-08f, -3.035259787e-08f, -3.010325129e-08f, -2.985390891e-08f, -2.960457117e-08f, -2.935523850e-08f, -2.910591133e-08f, -2.885659010e-08f,
+-2.860727524e-08f, -2.835796719e-08f, -2.810866638e-08f, -2.785937324e-08f, -2.761008821e-08f, -2.736081172e-08f, -2.711154421e-08f, -2.686228611e-08f, -2.661303785e-08f, -2.636379987e-08f,
+-2.611457259e-08f, -2.586535646e-08f, -2.561615190e-08f, -2.536695935e-08f, -2.511777923e-08f, -2.486861199e-08f, -2.461945806e-08f, -2.437031786e-08f, -2.412119183e-08f, -2.387208041e-08f,
+-2.362298401e-08f, -2.337390308e-08f, -2.312483805e-08f, -2.287578935e-08f, -2.262675740e-08f, -2.237774265e-08f, -2.212874552e-08f, -2.187976644e-08f, -2.163080584e-08f, -2.138186416e-08f,
+-2.113294183e-08f, -2.088403927e-08f, -2.063515691e-08f, -2.038629520e-08f, -2.013745455e-08f, -1.988863540e-08f, -1.963983817e-08f, -1.939106330e-08f, -1.914231121e-08f, -1.889358234e-08f,
+-1.864487712e-08f, -1.839619596e-08f, -1.814753931e-08f, -1.789890760e-08f, -1.765030124e-08f, -1.740172067e-08f, -1.715316631e-08f, -1.690463861e-08f, -1.665613797e-08f, -1.640766484e-08f,
+-1.615921964e-08f, -1.591080279e-08f, -1.566241473e-08f, -1.541405589e-08f, -1.516572668e-08f, -1.491742753e-08f, -1.466915889e-08f, -1.442092116e-08f, -1.417271478e-08f, -1.392454017e-08f,
+-1.367639776e-08f, -1.342828798e-08f, -1.318021125e-08f, -1.293216800e-08f, -1.268415865e-08f, -1.243618364e-08f, -1.218824337e-08f, -1.194033829e-08f, -1.169246882e-08f, -1.144463537e-08f,
+-1.119683838e-08f, -1.094907827e-08f, -1.070135546e-08f, -1.045367039e-08f, -1.020602346e-08f, -9.958415114e-09f, -9.710845767e-09f, -9.463315844e-09f, -9.215825770e-09f, -8.968375967e-09f,
+-8.720966858e-09f, -8.473598867e-09f, -8.226272416e-09f, -7.978987929e-09f, -7.731745827e-09f, -7.484546532e-09f, -7.237390468e-09f, -6.990278056e-09f, -6.743209718e-09f, -6.496185875e-09f,
+-6.249206949e-09f, -6.002273362e-09f, -5.755385534e-09f, -5.508543886e-09f, -5.261748840e-09f, -5.015000815e-09f, -4.768300233e-09f, -4.521647513e-09f, -4.275043075e-09f, -4.028487340e-09f,
+-3.781980727e-09f, -3.535523655e-09f, -3.289116545e-09f, -3.042759814e-09f, -2.796453883e-09f, -2.550199170e-09f, -2.303996093e-09f, -2.057845071e-09f, -1.811746522e-09f, -1.565700864e-09f,
+-1.319708516e-09f, -1.073769894e-09f, -8.278854161e-10f, -5.820554999e-10f, -3.362805624e-10f, -9.056102029e-11f, 1.551027095e-10f, 4.007102106e-10f, 6.462610665e-10f, 8.917548612e-10f,
+1.137191179e-09f, 1.382569603e-09f, 1.627889719e-09f, 1.873151111e-09f, 2.118353365e-09f, 2.363496064e-09f, 2.608578794e-09f, 2.853601141e-09f, 3.098562690e-09f, 3.343463028e-09f,
+3.588301740e-09f, 3.833078412e-09f, 4.077792630e-09f, 4.322443983e-09f, 4.567032055e-09f, 4.811556435e-09f, 5.056016710e-09f, 5.300412467e-09f, 5.544743293e-09f, 5.789008777e-09f,
+6.033208507e-09f, 6.277342071e-09f, 6.521409058e-09f, 6.765409055e-09f, 7.009341653e-09f, 7.253206440e-09f, 7.497003005e-09f, 7.740730939e-09f, 7.984389831e-09f, 8.227979271e-09f,
+8.471498848e-09f, 8.714948155e-09f, 8.958326780e-09f, 9.201634316e-09f, 9.444870352e-09f, 9.688034481e-09f, 9.931126294e-09f, 1.017414538e-08f, 1.041709134e-08f, 1.065996375e-08f,
+1.090276222e-08f, 1.114548633e-08f, 1.138813569e-08f, 1.163070987e-08f, 1.187320847e-08f, 1.211563109e-08f, 1.235797732e-08f, 1.260024676e-08f, 1.284243900e-08f, 1.308455363e-08f,
+1.332659025e-08f, 1.356854845e-08f, 1.381042783e-08f, 1.405222799e-08f, 1.429394851e-08f, 1.453558900e-08f, 1.477714905e-08f, 1.501862825e-08f, 1.526002621e-08f, 1.550134252e-08f,
+1.574257678e-08f, 1.598372858e-08f, 1.622479752e-08f, 1.646578321e-08f, 1.670668523e-08f, 1.694750319e-08f, 1.718823668e-08f, 1.742888530e-08f, 1.766944865e-08f, 1.790992634e-08f,
+1.815031795e-08f, 1.839062310e-08f, 1.863084137e-08f, 1.887097237e-08f, 1.911101571e-08f, 1.935097097e-08f, 1.959083776e-08f, 1.983061569e-08f, 2.007030435e-08f, 2.030990334e-08f,
+2.054941227e-08f, 2.078883074e-08f, 2.102815835e-08f, 2.126739470e-08f, 2.150653940e-08f, 2.174559205e-08f, 2.198455225e-08f, 2.222341961e-08f, 2.246219373e-08f, 2.270087421e-08f,
+2.293946066e-08f, 2.317795268e-08f, 2.341634988e-08f, 2.365465186e-08f, 2.389285823e-08f, 2.413096860e-08f, 2.436898256e-08f, 2.460689973e-08f, 2.484471971e-08f, 2.508244211e-08f,
+2.532006653e-08f, 2.555759259e-08f, 2.579501989e-08f, 2.603234803e-08f, 2.626957663e-08f, 2.650670529e-08f, 2.674373363e-08f, 2.698066124e-08f, 2.721748775e-08f, 2.745421275e-08f,
+2.769083586e-08f, 2.792735669e-08f, 2.816377485e-08f, 2.840008995e-08f, 2.863630160e-08f, 2.887240940e-08f, 2.910841298e-08f, 2.934431194e-08f, 2.958010589e-08f, 2.981579445e-08f,
+3.005137723e-08f, 3.028685384e-08f, 3.052222389e-08f, 3.075748700e-08f, 3.099264278e-08f, 3.122769084e-08f, 3.146263080e-08f, 3.169746227e-08f, 3.193218487e-08f, 3.216679821e-08f,
+3.240130190e-08f, 3.263569557e-08f, 3.286997882e-08f, 3.310415127e-08f, 3.333821254e-08f, 3.357216224e-08f, 3.380600000e-08f, 3.403972542e-08f, 3.427333813e-08f, 3.450683775e-08f,
+3.474022388e-08f, 3.497349615e-08f, 3.520665418e-08f, 3.543969759e-08f, 3.567262599e-08f, 3.590543900e-08f, 3.613813625e-08f, 3.637071735e-08f, 3.660318192e-08f, 3.683552959e-08f,
+3.706775997e-08f, 3.729987269e-08f, 3.753186737e-08f, 3.776374362e-08f, 3.799550107e-08f, 3.822713935e-08f, 3.845865807e-08f, 3.869005685e-08f, 3.892133533e-08f, 3.915249312e-08f,
+3.938352985e-08f, 3.961444514e-08f, 3.984523862e-08f, 4.007590990e-08f, 4.030645863e-08f, 4.053688441e-08f, 4.076718687e-08f, 4.099736565e-08f, 4.122742037e-08f, 4.145735064e-08f,
+4.168715611e-08f, 4.191683640e-08f, 4.214639113e-08f, 4.237581993e-08f, 4.260512243e-08f, 4.283429826e-08f, 4.306334705e-08f, 4.329226842e-08f, 4.352106200e-08f, 4.374972743e-08f,
+4.397826434e-08f, 4.420667234e-08f, 4.443495108e-08f, 4.466310018e-08f, 4.489111928e-08f, 4.511900801e-08f, 4.534676599e-08f, 4.557439286e-08f, 4.580188825e-08f, 4.602925180e-08f,
+4.625648314e-08f, 4.648358190e-08f, 4.671054771e-08f, 4.693738020e-08f, 4.716407902e-08f, 4.739064380e-08f, 4.761707417e-08f, 4.784336976e-08f, 4.806953021e-08f, 4.829555516e-08f,
+4.852144425e-08f, 4.874719710e-08f, 4.897281336e-08f, 4.919829266e-08f, 4.942363464e-08f, 4.964883894e-08f, 4.987390520e-08f, 5.009883304e-08f, 5.032362213e-08f, 5.054827208e-08f,
+5.077278254e-08f, 5.099715315e-08f, 5.122138356e-08f, 5.144547339e-08f, 5.166942229e-08f, 5.189322991e-08f, 5.211689588e-08f, 5.234041984e-08f, 5.256380144e-08f, 5.278704032e-08f,
+5.301013611e-08f, 5.323308847e-08f, 5.345589704e-08f, 5.367856146e-08f, 5.390108138e-08f, 5.412345643e-08f, 5.434568626e-08f, 5.456777052e-08f, 5.478970886e-08f, 5.501150091e-08f,
+5.523314633e-08f, 5.545464476e-08f, 5.567599585e-08f, 5.589719924e-08f, 5.611825458e-08f, 5.633916152e-08f, 5.655991971e-08f, 5.678052879e-08f, 5.700098842e-08f, 5.722129823e-08f,
+5.744145789e-08f, 5.766146705e-08f, 5.788132534e-08f, 5.810103242e-08f, 5.832058795e-08f, 5.853999157e-08f, 5.875924293e-08f, 5.897834169e-08f, 5.919728750e-08f, 5.941608001e-08f,
+5.963471887e-08f, 5.985320374e-08f, 6.007153427e-08f, 6.028971011e-08f, 6.050773092e-08f, 6.072559635e-08f, 6.094330606e-08f, 6.116085970e-08f, 6.137825693e-08f, 6.159549740e-08f,
+6.181258078e-08f, 6.202950671e-08f, 6.224627485e-08f, 6.246288486e-08f, 6.267933640e-08f, 6.289562913e-08f, 6.311176270e-08f, 6.332773677e-08f, 6.354355101e-08f, 6.375920507e-08f,
+6.397469861e-08f, 6.419003129e-08f, 6.440520278e-08f, 6.462021273e-08f, 6.483506080e-08f, 6.504974666e-08f, 6.526426996e-08f, 6.547863038e-08f, 6.569282757e-08f, 6.590686119e-08f,
+6.612073092e-08f, 6.633443640e-08f, 6.654797732e-08f, 6.676135332e-08f, 6.697456409e-08f, 6.718760927e-08f, 6.740048854e-08f, 6.761320157e-08f, 6.782574801e-08f, 6.803812754e-08f,
+6.825033983e-08f, 6.846238453e-08f, 6.867426133e-08f, 6.888596988e-08f, 6.909750985e-08f, 6.930888092e-08f, 6.952008276e-08f, 6.973111502e-08f, 6.994197739e-08f, 7.015266954e-08f,
+7.036319113e-08f, 7.057354183e-08f, 7.078372132e-08f, 7.099372927e-08f, 7.120356535e-08f, 7.141322924e-08f, 7.162272060e-08f, 7.183203911e-08f, 7.204118445e-08f, 7.225015628e-08f,
+7.245895429e-08f, 7.266757814e-08f, 7.287602752e-08f, 7.308430210e-08f, 7.329240155e-08f, 7.350032555e-08f, 7.370807378e-08f, 7.391564592e-08f, 7.412304164e-08f, 7.433026062e-08f,
+7.453730253e-08f, 7.474416707e-08f, 7.495085390e-08f, 7.515736271e-08f, 7.536369318e-08f, 7.556984498e-08f, 7.577581780e-08f, 7.598161132e-08f, 7.618722522e-08f, 7.639265917e-08f,
+7.659791288e-08f, 7.680298601e-08f, 7.700787824e-08f, 7.721258928e-08f, 7.741711878e-08f, 7.762146645e-08f, 7.782563196e-08f, 7.802961501e-08f, 7.823341527e-08f, 7.843703243e-08f,
+7.864046617e-08f, 7.884371619e-08f, 7.904678218e-08f, 7.924966380e-08f, 7.945236077e-08f, 7.965487276e-08f, 7.985719946e-08f, 8.005934056e-08f, 8.026129575e-08f, 8.046306472e-08f,
+8.066464717e-08f, 8.086604277e-08f, 8.106725122e-08f, 8.126827222e-08f, 8.146910545e-08f, 8.166975061e-08f, 8.187020738e-08f, 8.207047547e-08f, 8.227055456e-08f, 8.247044435e-08f,
+8.267014454e-08f, 8.286965481e-08f, 8.306897486e-08f, 8.326810439e-08f, 8.346704309e-08f, 8.366579066e-08f, 8.386434680e-08f, 8.406271120e-08f, 8.426088356e-08f, 8.445886358e-08f,
+8.465665095e-08f, 8.485424537e-08f, 8.505164655e-08f, 8.524885418e-08f, 8.544586796e-08f, 8.564268760e-08f, 8.583931278e-08f, 8.603574322e-08f, 8.623197862e-08f, 8.642801867e-08f,
+8.662386308e-08f, 8.681951155e-08f, 8.701496379e-08f, 8.721021949e-08f, 8.740527837e-08f, 8.760014012e-08f, 8.779480445e-08f, 8.798927107e-08f, 8.818353968e-08f, 8.837760999e-08f,
+8.857148170e-08f, 8.876515452e-08f, 8.895862815e-08f, 8.915190231e-08f, 8.934497671e-08f, 8.953785104e-08f, 8.973052503e-08f, 8.992299837e-08f, 9.011527079e-08f, 9.030734198e-08f,
+9.049921166e-08f, 9.069087954e-08f, 9.088234534e-08f, 9.107360875e-08f, 9.126466951e-08f, 9.145552731e-08f, 9.164618187e-08f, 9.183663291e-08f, 9.202688013e-08f, 9.221692326e-08f,
+9.240676200e-08f, 9.259639608e-08f, 9.278582521e-08f, 9.297504910e-08f, 9.316406747e-08f, 9.335288003e-08f, 9.354148651e-08f, 9.372988663e-08f, 9.391808009e-08f, 9.410606662e-08f,
+9.429384594e-08f, 9.448141777e-08f, 9.466878183e-08f, 9.485593783e-08f, 9.504288550e-08f, 9.522962455e-08f, 9.541615472e-08f, 9.560247572e-08f, 9.578858728e-08f, 9.597448911e-08f,
+9.616018095e-08f, 9.634566250e-08f, 9.653093351e-08f, 9.671599369e-08f, 9.690084277e-08f, 9.708548047e-08f, 9.726990652e-08f, 9.745412064e-08f, 9.763812257e-08f, 9.782191203e-08f,
+9.800548874e-08f, 9.818885244e-08f, 9.837200286e-08f, 9.855493971e-08f, 9.873766274e-08f, 9.892017167e-08f, 9.910246622e-08f, 9.928454615e-08f, 9.946641116e-08f, 9.964806100e-08f,
+9.982949540e-08f, 1.000107141e-07f, 1.001917168e-07f, 1.003725032e-07f, 1.005530732e-07f, 1.007334264e-07f, 1.009135625e-07f, 1.010934813e-07f, 1.012731826e-07f, 1.014526660e-07f,
+1.016319313e-07f, 1.018109783e-07f, 1.019898066e-07f, 1.021684160e-07f, 1.023468063e-07f, 1.025249772e-07f, 1.027029284e-07f, 1.028806597e-07f, 1.030581708e-07f, 1.032354614e-07f,
+1.034125313e-07f, 1.035893802e-07f, 1.037660080e-07f, 1.039424142e-07f, 1.041185987e-07f, 1.042945611e-07f, 1.044703014e-07f, 1.046458191e-07f, 1.048211140e-07f, 1.049961859e-07f,
+1.051710346e-07f, 1.053456597e-07f, 1.055200610e-07f, 1.056942383e-07f, 1.058681913e-07f, 1.060419197e-07f, 1.062154233e-07f, 1.063887019e-07f, 1.065617552e-07f, 1.067345829e-07f,
+1.069071849e-07f, 1.070795607e-07f, 1.072517103e-07f, 1.074236333e-07f, 1.075953296e-07f, 1.077667988e-07f, 1.079380406e-07f, 1.081090550e-07f, 1.082798416e-07f, 1.084504001e-07f,
+1.086207303e-07f, 1.087908321e-07f, 1.089607050e-07f, 1.091303489e-07f, 1.092997636e-07f, 1.094689488e-07f, 1.096379043e-07f, 1.098066297e-07f, 1.099751249e-07f, 1.101433897e-07f,
+1.103114237e-07f, 1.104792268e-07f, 1.106467987e-07f, 1.108141392e-07f, 1.109812480e-07f, 1.111481249e-07f, 1.113147696e-07f, 1.114811820e-07f, 1.116473617e-07f, 1.118133086e-07f,
+1.119790223e-07f, 1.121445028e-07f, 1.123097497e-07f, 1.124747627e-07f, 1.126395418e-07f, 1.128040865e-07f, 1.129683968e-07f, 1.131324723e-07f, 1.132963128e-07f, 1.134599182e-07f,
+1.136232881e-07f, 1.137864223e-07f, 1.139493207e-07f, 1.141119829e-07f, 1.142744087e-07f, 1.144365980e-07f, 1.145985504e-07f, 1.147602658e-07f, 1.149217439e-07f, 1.150829846e-07f,
+1.152439875e-07f, 1.154047524e-07f, 1.155652792e-07f, 1.157255675e-07f, 1.158856172e-07f, 1.160454281e-07f, 1.162049998e-07f, 1.163643323e-07f, 1.165234253e-07f, 1.166822784e-07f,
+1.168408917e-07f, 1.169992647e-07f, 1.171573973e-07f, 1.173152892e-07f, 1.174729403e-07f, 1.176303504e-07f, 1.177875191e-07f, 1.179444463e-07f, 1.181011317e-07f, 1.182575752e-07f,
+1.184137766e-07f, 1.185697355e-07f, 1.187254518e-07f, 1.188809254e-07f, 1.190361558e-07f, 1.191911430e-07f, 1.193458868e-07f, 1.195003868e-07f, 1.196546430e-07f, 1.198086551e-07f,
+1.199624228e-07f, 1.201159460e-07f, 1.202692244e-07f, 1.204222579e-07f, 1.205750462e-07f, 1.207275891e-07f, 1.208798864e-07f, 1.210319379e-07f, 1.211837435e-07f, 1.213353028e-07f,
+1.214866156e-07f, 1.216376818e-07f, 1.217885012e-07f, 1.219390736e-07f, 1.220893986e-07f, 1.222394763e-07f, 1.223893062e-07f, 1.225388883e-07f, 1.226882223e-07f, 1.228373080e-07f,
+1.229861452e-07f, 1.231347338e-07f, 1.232830734e-07f, 1.234311640e-07f, 1.235790052e-07f, 1.237265970e-07f, 1.238739391e-07f, 1.240210313e-07f, 1.241678734e-07f, 1.243144652e-07f,
+1.244608065e-07f, 1.246068971e-07f, 1.247527368e-07f, 1.248983255e-07f, 1.250436628e-07f, 1.251887487e-07f, 1.253335829e-07f, 1.254781653e-07f, 1.256224955e-07f, 1.257665736e-07f,
+1.259103991e-07f, 1.260539721e-07f, 1.261972922e-07f, 1.263403592e-07f, 1.264831731e-07f, 1.266257335e-07f, 1.267680403e-07f, 1.269100934e-07f, 1.270518924e-07f, 1.271934373e-07f,
+1.273347278e-07f, 1.274757638e-07f, 1.276165450e-07f, 1.277570713e-07f, 1.278973425e-07f, 1.280373584e-07f, 1.281771188e-07f, 1.283166235e-07f, 1.284558724e-07f, 1.285948653e-07f,
+1.287336019e-07f, 1.288720821e-07f, 1.290103057e-07f, 1.291482726e-07f, 1.292859825e-07f, 1.294234353e-07f, 1.295606307e-07f, 1.296975687e-07f, 1.298342490e-07f, 1.299706714e-07f,
+1.301068358e-07f, 1.302427420e-07f, 1.303783897e-07f, 1.305137790e-07f, 1.306489094e-07f, 1.307837810e-07f, 1.309183934e-07f, 1.310527466e-07f, 1.311868403e-07f, 1.313206744e-07f,
+1.314542487e-07f, 1.315875631e-07f, 1.317206173e-07f, 1.318534111e-07f, 1.319859445e-07f, 1.321182172e-07f, 1.322502291e-07f, 1.323819800e-07f, 1.325134697e-07f, 1.326446981e-07f,
+1.327756649e-07f, 1.329063701e-07f, 1.330368135e-07f, 1.331669948e-07f, 1.332969139e-07f, 1.334265707e-07f, 1.335559650e-07f, 1.336850965e-07f, 1.338139653e-07f, 1.339425710e-07f,
+1.340709136e-07f, 1.341989928e-07f, 1.343268085e-07f, 1.344543606e-07f, 1.345816488e-07f, 1.347086730e-07f, 1.348354331e-07f, 1.349619289e-07f, 1.350881602e-07f, 1.352141269e-07f,
+1.353398287e-07f, 1.354652657e-07f, 1.355904375e-07f, 1.357153441e-07f, 1.358399852e-07f, 1.359643608e-07f, 1.360884707e-07f, 1.362123146e-07f, 1.363358925e-07f, 1.364592042e-07f,
+1.365822496e-07f, 1.367050284e-07f, 1.368275406e-07f, 1.369497860e-07f, 1.370717644e-07f, 1.371934757e-07f, 1.373149197e-07f, 1.374360964e-07f, 1.375570054e-07f, 1.376776467e-07f,
+1.377980202e-07f, 1.379181257e-07f, 1.380379629e-07f, 1.381575319e-07f, 1.382768324e-07f, 1.383958644e-07f, 1.385146275e-07f, 1.386331218e-07f, 1.387513470e-07f, 1.388693031e-07f,
+1.389869898e-07f, 1.391044070e-07f, 1.392215547e-07f, 1.393384325e-07f, 1.394550405e-07f, 1.395713784e-07f, 1.396874462e-07f, 1.398032436e-07f, 1.399187705e-07f, 1.400340269e-07f,
+1.401490125e-07f, 1.402637272e-07f, 1.403781710e-07f, 1.404923435e-07f, 1.406062448e-07f, 1.407198746e-07f, 1.408332329e-07f, 1.409463195e-07f, 1.410591342e-07f, 1.411716770e-07f,
+1.412839476e-07f, 1.413959460e-07f, 1.415076721e-07f, 1.416191256e-07f, 1.417303066e-07f, 1.418412147e-07f, 1.419518500e-07f, 1.420622122e-07f, 1.421723013e-07f, 1.422821171e-07f,
+1.423916594e-07f, 1.425009282e-07f, 1.426099234e-07f, 1.427186448e-07f, 1.428270922e-07f, 1.429352656e-07f, 1.430431648e-07f, 1.431507897e-07f, 1.432581401e-07f, 1.433652161e-07f,
+1.434720173e-07f, 1.435785438e-07f, 1.436847953e-07f, 1.437907718e-07f, 1.438964731e-07f, 1.440018991e-07f, 1.441070497e-07f, 1.442119248e-07f, 1.443165243e-07f, 1.444208480e-07f,
+1.445248958e-07f, 1.446286676e-07f, 1.447321633e-07f, 1.448353827e-07f, 1.449383258e-07f, 1.450409924e-07f, 1.451433824e-07f, 1.452454957e-07f, 1.453473323e-07f, 1.454488918e-07f,
+1.455501744e-07f, 1.456511798e-07f, 1.457519079e-07f, 1.458523586e-07f, 1.459525319e-07f, 1.460524275e-07f, 1.461520454e-07f, 1.462513855e-07f, 1.463504477e-07f, 1.464492319e-07f,
+1.465477378e-07f, 1.466459656e-07f, 1.467439149e-07f, 1.468415858e-07f, 1.469389781e-07f, 1.470360917e-07f, 1.471329266e-07f, 1.472294825e-07f, 1.473257595e-07f, 1.474217573e-07f,
+1.475174759e-07f, 1.476129153e-07f, 1.477080752e-07f, 1.478029556e-07f, 1.478975564e-07f, 1.479918774e-07f, 1.480859187e-07f, 1.481796800e-07f, 1.482731614e-07f, 1.483663626e-07f,
+1.484592836e-07f, 1.485519243e-07f, 1.486442846e-07f, 1.487363644e-07f, 1.488281636e-07f, 1.489196821e-07f, 1.490109198e-07f, 1.491018766e-07f, 1.491925525e-07f, 1.492829473e-07f,
+1.493730609e-07f, 1.494628933e-07f, 1.495524443e-07f, 1.496417139e-07f, 1.497307019e-07f, 1.498194084e-07f, 1.499078331e-07f, 1.499959760e-07f, 1.500838370e-07f, 1.501714161e-07f,
+1.502587131e-07f, 1.503457279e-07f, 1.504324605e-07f, 1.505189108e-07f, 1.506050786e-07f, 1.506909640e-07f, 1.507765668e-07f, 1.508618869e-07f, 1.509469243e-07f, 1.510316788e-07f,
+1.511161504e-07f, 1.512003391e-07f, 1.512842446e-07f, 1.513678670e-07f, 1.514512061e-07f, 1.515342620e-07f, 1.516170344e-07f, 1.516995233e-07f, 1.517817287e-07f, 1.518636504e-07f,
+1.519452885e-07f, 1.520266427e-07f, 1.521077131e-07f, 1.521884995e-07f, 1.522690019e-07f, 1.523492203e-07f, 1.524291544e-07f, 1.525088043e-07f, 1.525881699e-07f, 1.526672511e-07f,
+1.527460479e-07f, 1.528245601e-07f, 1.529027877e-07f, 1.529807306e-07f, 1.530583888e-07f, 1.531357622e-07f, 1.532128506e-07f, 1.532896542e-07f, 1.533661727e-07f, 1.534424061e-07f,
+1.535183544e-07f, 1.535940174e-07f, 1.536693951e-07f, 1.537444875e-07f, 1.538192945e-07f, 1.538938160e-07f, 1.539680519e-07f, 1.540420023e-07f, 1.541156669e-07f, 1.541890458e-07f,
+1.542621389e-07f, 1.543349462e-07f, 1.544074675e-07f, 1.544797028e-07f, 1.545516521e-07f, 1.546233153e-07f, 1.546946924e-07f, 1.547657832e-07f, 1.548365877e-07f, 1.549071059e-07f,
+1.549773377e-07f, 1.550472830e-07f, 1.551169419e-07f, 1.551863142e-07f, 1.552553998e-07f, 1.553241988e-07f, 1.553927111e-07f, 1.554609366e-07f, 1.555288752e-07f, 1.555965270e-07f,
+1.556638919e-07f, 1.557309697e-07f, 1.557977605e-07f, 1.558642643e-07f, 1.559304809e-07f, 1.559964103e-07f, 1.560620525e-07f, 1.561274074e-07f, 1.561924749e-07f, 1.562572551e-07f,
+1.563217479e-07f, 1.563859532e-07f, 1.564498709e-07f, 1.565135012e-07f, 1.565768438e-07f, 1.566398987e-07f, 1.567026660e-07f, 1.567651455e-07f, 1.568273373e-07f, 1.568892412e-07f,
+1.569508573e-07f, 1.570121854e-07f, 1.570732257e-07f, 1.571339779e-07f, 1.571944421e-07f, 1.572546183e-07f, 1.573145063e-07f, 1.573741062e-07f, 1.574334180e-07f, 1.574924415e-07f,
+1.575511768e-07f, 1.576096237e-07f, 1.576677824e-07f, 1.577256527e-07f, 1.577832347e-07f, 1.578405282e-07f, 1.578975332e-07f, 1.579542498e-07f, 1.580106778e-07f, 1.580668173e-07f,
+1.581226682e-07f, 1.581782305e-07f, 1.582335041e-07f, 1.582884890e-07f, 1.583431853e-07f, 1.583975928e-07f, 1.584517116e-07f, 1.585055416e-07f, 1.585590827e-07f, 1.586123350e-07f,
+1.586652985e-07f, 1.587179730e-07f, 1.587703587e-07f, 1.588224554e-07f, 1.588742631e-07f, 1.589257818e-07f, 1.589770115e-07f, 1.590279522e-07f, 1.590786038e-07f, 1.591289664e-07f,
+1.591790398e-07f, 1.592288241e-07f, 1.592783193e-07f, 1.593275253e-07f, 1.593764422e-07f, 1.594250698e-07f, 1.594734082e-07f, 1.595214574e-07f, 1.595692173e-07f, 1.596166880e-07f,
+1.596638694e-07f, 1.597107615e-07f, 1.597573643e-07f, 1.598036777e-07f, 1.598497018e-07f, 1.598954366e-07f, 1.599408819e-07f, 1.599860379e-07f, 1.600309045e-07f, 1.600754818e-07f,
+1.601197696e-07f, 1.601637679e-07f, 1.602074769e-07f, 1.602508964e-07f, 1.602940264e-07f, 1.603368670e-07f, 1.603794181e-07f, 1.604216797e-07f, 1.604636519e-07f, 1.605053346e-07f,
+1.605467277e-07f, 1.605878314e-07f, 1.606286456e-07f, 1.606691703e-07f, 1.607094054e-07f, 1.607493511e-07f, 1.607890072e-07f, 1.608283738e-07f, 1.608674509e-07f, 1.609062385e-07f,
+1.609447365e-07f, 1.609829451e-07f, 1.610208641e-07f, 1.610584935e-07f, 1.610958335e-07f, 1.611328839e-07f, 1.611696449e-07f, 1.612061163e-07f, 1.612422982e-07f, 1.612781906e-07f,
+1.613137935e-07f, 1.613491069e-07f, 1.613841309e-07f, 1.614188653e-07f, 1.614533103e-07f, 1.614874658e-07f, 1.615213318e-07f, 1.615549084e-07f, 1.615881955e-07f, 1.616211932e-07f,
+1.616539015e-07f, 1.616863203e-07f, 1.617184498e-07f, 1.617502898e-07f, 1.617818405e-07f, 1.618131018e-07f, 1.618440737e-07f, 1.618747563e-07f, 1.619051495e-07f, 1.619352535e-07f,
+1.619650681e-07f, 1.619945934e-07f, 1.620238295e-07f, 1.620527763e-07f, 1.620814339e-07f, 1.621098022e-07f, 1.621378814e-07f, 1.621656713e-07f, 1.621931721e-07f, 1.622203837e-07f,
+1.622473063e-07f, 1.622739396e-07f, 1.623002840e-07f, 1.623263392e-07f, 1.623521054e-07f, 1.623775825e-07f, 1.624027707e-07f, 1.624276699e-07f, 1.624522801e-07f, 1.624766014e-07f,
+1.625006338e-07f, 1.625243773e-07f, 1.625478320e-07f, 1.625709978e-07f, 1.625938748e-07f, 1.626164630e-07f, 1.626387625e-07f, 1.626607733e-07f, 1.626824954e-07f, 1.627039288e-07f,
+1.627250736e-07f, 1.627459298e-07f, 1.627664974e-07f, 1.627867765e-07f, 1.628067671e-07f, 1.628264691e-07f, 1.628458828e-07f, 1.628650080e-07f, 1.628838449e-07f, 1.629023934e-07f,
+1.629206536e-07f, 1.629386255e-07f, 1.629563092e-07f, 1.629737047e-07f, 1.629908120e-07f, 1.630076312e-07f, 1.630241623e-07f, 1.630404054e-07f, 1.630563604e-07f, 1.630720275e-07f,
+1.630874066e-07f, 1.631024978e-07f, 1.631173012e-07f, 1.631318167e-07f, 1.631460445e-07f, 1.631599846e-07f, 1.631736370e-07f, 1.631870017e-07f, 1.632000788e-07f, 1.632128684e-07f,
+1.632253704e-07f, 1.632375850e-07f, 1.632495122e-07f, 1.632611520e-07f, 1.632725045e-07f, 1.632835696e-07f, 1.632943476e-07f, 1.633048384e-07f, 1.633150420e-07f, 1.633249585e-07f,
+1.633345880e-07f, 1.633439305e-07f, 1.633529861e-07f, 1.633617547e-07f, 1.633702366e-07f, 1.633784316e-07f, 1.633863399e-07f, 1.633939616e-07f, 1.634012966e-07f, 1.634083450e-07f,
+1.634151070e-07f, 1.634215824e-07f, 1.634277715e-07f, 1.634336742e-07f, 1.634392906e-07f, 1.634446207e-07f, 1.634496647e-07f, 1.634544226e-07f, 1.634588944e-07f, 1.634630802e-07f,
+1.634669800e-07f, 1.634705939e-07f, 1.634739221e-07f, 1.634769644e-07f, 1.634797211e-07f, 1.634821921e-07f, 1.634843775e-07f, 1.634862774e-07f, 1.634878918e-07f, 1.634892209e-07f,
+1.634902646e-07f, 1.634910231e-07f, 1.634914964e-07f, 1.634916845e-07f, 1.634915876e-07f, 1.634912056e-07f, 1.634905388e-07f, 1.634895870e-07f, 1.634883505e-07f, 1.634868292e-07f,
+1.634850233e-07f, 1.634829328e-07f, 1.634805578e-07f, 1.634778983e-07f, 1.634749544e-07f, 1.634717262e-07f, 1.634682138e-07f, 1.634644172e-07f, 1.634603366e-07f, 1.634559719e-07f,
+1.634513233e-07f, 1.634463908e-07f, 1.634411745e-07f, 1.634356745e-07f, 1.634298908e-07f, 1.634238236e-07f, 1.634174729e-07f, 1.634108387e-07f, 1.634039213e-07f, 1.633967205e-07f,
+1.633892366e-07f, 1.633814696e-07f, 1.633734196e-07f, 1.633650866e-07f, 1.633564708e-07f, 1.633475722e-07f, 1.633383909e-07f, 1.633289269e-07f, 1.633191805e-07f, 1.633091516e-07f,
+1.632988403e-07f, 1.632882467e-07f, 1.632773710e-07f, 1.632662131e-07f, 1.632547732e-07f, 1.632430513e-07f, 1.632310476e-07f, 1.632187621e-07f, 1.632061950e-07f, 1.631933462e-07f,
+1.631802159e-07f, 1.631668043e-07f, 1.631531112e-07f, 1.631391370e-07f, 1.631248816e-07f, 1.631103451e-07f, 1.630955276e-07f, 1.630804293e-07f, 1.630650502e-07f, 1.630493904e-07f,
+1.630334500e-07f, 1.630172291e-07f, 1.630007278e-07f, 1.629839461e-07f, 1.629668842e-07f, 1.629495422e-07f, 1.629319202e-07f, 1.629140182e-07f, 1.628958364e-07f, 1.628773748e-07f,
+1.628586336e-07f, 1.628396129e-07f, 1.628203127e-07f, 1.628007331e-07f, 1.627808743e-07f, 1.627607363e-07f, 1.627403193e-07f, 1.627196233e-07f, 1.626986485e-07f, 1.626773949e-07f,
+1.626558627e-07f, 1.626340519e-07f, 1.626119627e-07f, 1.625895952e-07f, 1.625669494e-07f, 1.625440255e-07f, 1.625208236e-07f, 1.624973438e-07f, 1.624735861e-07f, 1.624495507e-07f,
+1.624252378e-07f, 1.624006473e-07f, 1.623757795e-07f, 1.623506343e-07f, 1.623252121e-07f, 1.622995127e-07f, 1.622735364e-07f, 1.622472833e-07f, 1.622207534e-07f, 1.621939470e-07f,
+1.621668640e-07f, 1.621395046e-07f, 1.621118689e-07f, 1.620839571e-07f, 1.620557692e-07f, 1.620273054e-07f, 1.619985657e-07f, 1.619695504e-07f, 1.619402594e-07f, 1.619106930e-07f,
+1.618808511e-07f, 1.618507341e-07f, 1.618203419e-07f, 1.617896747e-07f, 1.617587325e-07f, 1.617275156e-07f, 1.616960241e-07f, 1.616642580e-07f, 1.616322175e-07f, 1.615999026e-07f,
+1.615673136e-07f, 1.615344506e-07f, 1.615013136e-07f, 1.614679027e-07f, 1.614342182e-07f, 1.614002601e-07f, 1.613660286e-07f, 1.613315237e-07f, 1.612967457e-07f, 1.612616945e-07f,
+1.612263704e-07f, 1.611907735e-07f, 1.611549039e-07f, 1.611187617e-07f, 1.610823470e-07f, 1.610456601e-07f, 1.610087009e-07f, 1.609714697e-07f, 1.609339665e-07f, 1.608961916e-07f,
+1.608581449e-07f, 1.608198267e-07f, 1.607812371e-07f, 1.607423762e-07f, 1.607032442e-07f, 1.606638411e-07f, 1.606241672e-07f, 1.605842225e-07f, 1.605440071e-07f, 1.605035213e-07f,
+1.604627651e-07f, 1.604217387e-07f, 1.603804422e-07f, 1.603388757e-07f, 1.602970395e-07f, 1.602549335e-07f, 1.602125580e-07f, 1.601699131e-07f, 1.601269990e-07f, 1.600838157e-07f,
+1.600403634e-07f, 1.599966422e-07f, 1.599526524e-07f, 1.599083939e-07f, 1.598638671e-07f, 1.598190719e-07f, 1.597740086e-07f, 1.597286772e-07f, 1.596830780e-07f, 1.596372111e-07f,
+1.595910766e-07f, 1.595446746e-07f, 1.594980054e-07f, 1.594510690e-07f, 1.594038655e-07f, 1.593563953e-07f, 1.593086582e-07f, 1.592606547e-07f, 1.592123847e-07f, 1.591638484e-07f,
+1.591150459e-07f, 1.590659775e-07f, 1.590166433e-07f, 1.589670434e-07f, 1.589171779e-07f, 1.588670470e-07f, 1.588166509e-07f, 1.587659897e-07f, 1.587150635e-07f, 1.586638726e-07f,
+1.586124170e-07f, 1.585606970e-07f, 1.585087126e-07f, 1.584564640e-07f, 1.584039514e-07f, 1.583511749e-07f, 1.582981347e-07f, 1.582448309e-07f, 1.581912637e-07f, 1.581374333e-07f,
+1.580833397e-07f, 1.580289832e-07f, 1.579743640e-07f, 1.579194821e-07f, 1.578643377e-07f, 1.578089310e-07f, 1.577532621e-07f, 1.576973312e-07f, 1.576411385e-07f, 1.575846842e-07f,
+1.575279683e-07f, 1.574709910e-07f, 1.574137525e-07f, 1.573562530e-07f, 1.572984926e-07f, 1.572404715e-07f, 1.571821899e-07f, 1.571236478e-07f, 1.570648456e-07f, 1.570057832e-07f,
+1.569464610e-07f, 1.568868790e-07f, 1.568270375e-07f, 1.567669366e-07f, 1.567065764e-07f, 1.566459571e-07f, 1.565850790e-07f, 1.565239421e-07f, 1.564625466e-07f, 1.564008927e-07f,
+1.563389806e-07f, 1.562768105e-07f, 1.562143824e-07f, 1.561516966e-07f, 1.560887532e-07f, 1.560255525e-07f, 1.559620945e-07f, 1.558983795e-07f, 1.558344076e-07f, 1.557701791e-07f,
+1.557056939e-07f, 1.556409525e-07f, 1.555759548e-07f, 1.555107012e-07f, 1.554451917e-07f, 1.553794265e-07f, 1.553134058e-07f, 1.552471299e-07f, 1.551805988e-07f, 1.551138127e-07f,
+1.550467719e-07f, 1.549794764e-07f, 1.549119265e-07f, 1.548441224e-07f, 1.547760642e-07f, 1.547077521e-07f, 1.546391863e-07f, 1.545703669e-07f, 1.545012942e-07f, 1.544319683e-07f,
+1.543623894e-07f, 1.542925577e-07f, 1.542224734e-07f, 1.541521366e-07f, 1.540815476e-07f, 1.540107064e-07f, 1.539396134e-07f, 1.538682686e-07f, 1.537966723e-07f, 1.537248246e-07f,
+1.536527258e-07f, 1.535803759e-07f, 1.535077753e-07f, 1.534349241e-07f, 1.533618224e-07f, 1.532884705e-07f, 1.532148685e-07f, 1.531410167e-07f, 1.530669152e-07f, 1.529925642e-07f,
+1.529179639e-07f, 1.528431145e-07f, 1.527680161e-07f, 1.526926690e-07f, 1.526170734e-07f, 1.525412294e-07f, 1.524651373e-07f, 1.523887972e-07f, 1.523122093e-07f, 1.522353738e-07f,
+1.521582909e-07f, 1.520809608e-07f, 1.520033837e-07f, 1.519255598e-07f, 1.518474892e-07f, 1.517691723e-07f, 1.516906090e-07f, 1.516117998e-07f, 1.515327447e-07f, 1.514534440e-07f,
+1.513738978e-07f, 1.512941063e-07f, 1.512140698e-07f, 1.511337884e-07f, 1.510532624e-07f, 1.509724919e-07f, 1.508914771e-07f, 1.508102183e-07f, 1.507287156e-07f, 1.506469692e-07f,
+1.505649794e-07f, 1.504827463e-07f, 1.504002701e-07f, 1.503175510e-07f, 1.502345893e-07f, 1.501513852e-07f, 1.500679387e-07f, 1.499842502e-07f, 1.499003199e-07f, 1.498161479e-07f,
+1.497317344e-07f, 1.496470798e-07f, 1.495621840e-07f, 1.494770475e-07f, 1.493916703e-07f, 1.493060527e-07f, 1.492201948e-07f, 1.491340970e-07f, 1.490477593e-07f, 1.489611821e-07f,
+1.488743655e-07f, 1.487873097e-07f, 1.487000149e-07f, 1.486124813e-07f, 1.485247092e-07f, 1.484366988e-07f, 1.483484502e-07f, 1.482599637e-07f, 1.481712395e-07f, 1.480822777e-07f,
+1.479930787e-07f, 1.479036426e-07f, 1.478139697e-07f, 1.477240600e-07f, 1.476339140e-07f, 1.475435317e-07f, 1.474529133e-07f, 1.473620592e-07f, 1.472709695e-07f, 1.471796444e-07f,
+1.470880842e-07f, 1.469962890e-07f, 1.469042591e-07f, 1.468119946e-07f, 1.467194959e-07f, 1.466267631e-07f, 1.465337964e-07f, 1.464405961e-07f, 1.463471623e-07f, 1.462534954e-07f,
+1.461595954e-07f, 1.460654627e-07f, 1.459710974e-07f, 1.458764998e-07f, 1.457816701e-07f, 1.456866085e-07f, 1.455913152e-07f, 1.454957905e-07f, 1.454000345e-07f, 1.453040475e-07f,
+1.452078298e-07f, 1.451113815e-07f, 1.450147028e-07f, 1.449177940e-07f, 1.448206553e-07f, 1.447232870e-07f, 1.446256892e-07f, 1.445278622e-07f, 1.444298061e-07f, 1.443315214e-07f,
+1.442330080e-07f, 1.441342664e-07f, 1.440352966e-07f, 1.439360990e-07f, 1.438366737e-07f, 1.437370211e-07f, 1.436371412e-07f, 1.435370344e-07f, 1.434367009e-07f, 1.433361408e-07f,
+1.432353545e-07f, 1.431343421e-07f, 1.430331040e-07f, 1.429316402e-07f, 1.428299511e-07f, 1.427280369e-07f, 1.426258978e-07f, 1.425235340e-07f, 1.424209458e-07f, 1.423181334e-07f,
+1.422150970e-07f, 1.421118369e-07f, 1.420083533e-07f, 1.419046465e-07f, 1.418007166e-07f, 1.416965639e-07f, 1.415921887e-07f, 1.414875911e-07f, 1.413827715e-07f, 1.412777299e-07f,
+1.411724668e-07f, 1.410669823e-07f, 1.409612766e-07f, 1.408553501e-07f, 1.407492028e-07f, 1.406428351e-07f, 1.405362473e-07f, 1.404294394e-07f, 1.403224119e-07f, 1.402151648e-07f,
+1.401076985e-07f, 1.400000132e-07f, 1.398921092e-07f, 1.397839866e-07f, 1.396756457e-07f, 1.395670868e-07f, 1.394583101e-07f, 1.393493158e-07f, 1.392401043e-07f, 1.391306756e-07f,
+1.390210301e-07f, 1.389111680e-07f, 1.388010896e-07f, 1.386907950e-07f, 1.385802846e-07f, 1.384695586e-07f, 1.383586172e-07f, 1.382474606e-07f, 1.381360892e-07f, 1.380245032e-07f,
+1.379127027e-07f, 1.378006881e-07f, 1.376884597e-07f, 1.375760175e-07f, 1.374633620e-07f, 1.373504932e-07f, 1.372374116e-07f, 1.371241173e-07f, 1.370106106e-07f, 1.368968917e-07f,
+1.367829609e-07f, 1.366688185e-07f, 1.365544646e-07f, 1.364398995e-07f, 1.363251235e-07f, 1.362101369e-07f, 1.360949398e-07f, 1.359795326e-07f, 1.358639154e-07f, 1.357480886e-07f,
+1.356320523e-07f, 1.355158069e-07f, 1.353993526e-07f, 1.352826896e-07f, 1.351658182e-07f, 1.350487387e-07f, 1.349314512e-07f, 1.348139562e-07f, 1.346962537e-07f, 1.345783441e-07f,
+1.344602276e-07f, 1.343419045e-07f, 1.342233750e-07f, 1.341046395e-07f, 1.339856980e-07f, 1.338665510e-07f, 1.337471986e-07f, 1.336276411e-07f, 1.335078788e-07f, 1.333879119e-07f,
+1.332677407e-07f, 1.331473655e-07f, 1.330267864e-07f, 1.329060038e-07f, 1.327850180e-07f, 1.326638291e-07f, 1.325424375e-07f, 1.324208433e-07f, 1.322990469e-07f, 1.321770486e-07f,
+1.320548485e-07f, 1.319324469e-07f, 1.318098442e-07f, 1.316870405e-07f, 1.315640362e-07f, 1.314408314e-07f, 1.313174265e-07f, 1.311938217e-07f, 1.310700173e-07f, 1.309460136e-07f,
+1.308218107e-07f, 1.306974090e-07f, 1.305728088e-07f, 1.304480102e-07f, 1.303230136e-07f, 1.301978193e-07f, 1.300724274e-07f, 1.299468383e-07f, 1.298210522e-07f, 1.296950694e-07f,
+1.295688902e-07f, 1.294425148e-07f, 1.293159435e-07f, 1.291891765e-07f, 1.290622142e-07f, 1.289350568e-07f, 1.288077045e-07f, 1.286801577e-07f, 1.285524166e-07f, 1.284244815e-07f,
+1.282963526e-07f, 1.281680302e-07f, 1.280395145e-07f, 1.279108060e-07f, 1.277819047e-07f, 1.276528111e-07f, 1.275235253e-07f, 1.273940477e-07f, 1.272643784e-07f, 1.271345178e-07f,
+1.270044662e-07f, 1.268742238e-07f, 1.267437909e-07f, 1.266131678e-07f, 1.264823547e-07f, 1.263513519e-07f, 1.262201598e-07f, 1.260887784e-07f, 1.259572083e-07f, 1.258254495e-07f,
+1.256935024e-07f, 1.255613673e-07f, 1.254290444e-07f, 1.252965340e-07f, 1.251638364e-07f, 1.250309519e-07f, 1.248978808e-07f, 1.247646232e-07f, 1.246311795e-07f, 1.244975500e-07f,
+1.243637350e-07f, 1.242297347e-07f, 1.240955494e-07f, 1.239611794e-07f, 1.238266249e-07f, 1.236918863e-07f, 1.235569638e-07f, 1.234218577e-07f, 1.232865683e-07f, 1.231510958e-07f,
+1.230154406e-07f, 1.228796029e-07f, 1.227435830e-07f, 1.226073811e-07f, 1.224709977e-07f, 1.223344329e-07f, 1.221976870e-07f, 1.220607603e-07f, 1.219236531e-07f, 1.217863656e-07f,
+1.216488983e-07f, 1.215112512e-07f, 1.213734248e-07f, 1.212354193e-07f, 1.210972350e-07f, 1.209588721e-07f, 1.208203310e-07f, 1.206816119e-07f, 1.205427152e-07f, 1.204036410e-07f,
+1.202643898e-07f, 1.201249617e-07f, 1.199853571e-07f, 1.198455763e-07f, 1.197056194e-07f, 1.195654869e-07f, 1.194251791e-07f, 1.192846961e-07f, 1.191440382e-07f, 1.190032059e-07f,
+1.188621993e-07f, 1.187210188e-07f, 1.185796646e-07f, 1.184381370e-07f, 1.182964363e-07f, 1.181545628e-07f, 1.180125168e-07f, 1.178702986e-07f, 1.177279084e-07f, 1.175853466e-07f,
+1.174426134e-07f, 1.172997092e-07f, 1.171566342e-07f, 1.170133887e-07f, 1.168699730e-07f, 1.167263875e-07f, 1.165826323e-07f, 1.164387077e-07f, 1.162946142e-07f, 1.161503519e-07f,
+1.160059212e-07f, 1.158613223e-07f, 1.157165555e-07f, 1.155716212e-07f, 1.154265196e-07f, 1.152812511e-07f, 1.151358158e-07f, 1.149902142e-07f, 1.148444464e-07f, 1.146985129e-07f,
+1.145524138e-07f, 1.144061495e-07f, 1.142597203e-07f, 1.141131265e-07f, 1.139663683e-07f, 1.138194461e-07f, 1.136723602e-07f, 1.135251108e-07f, 1.133776982e-07f, 1.132301228e-07f,
+1.130823849e-07f, 1.129344847e-07f, 1.127864225e-07f, 1.126381987e-07f, 1.124898135e-07f, 1.123412672e-07f, 1.121925602e-07f, 1.120436927e-07f, 1.118946650e-07f, 1.117454774e-07f,
+1.115961302e-07f, 1.114466238e-07f, 1.112969584e-07f, 1.111471343e-07f, 1.109971518e-07f, 1.108470113e-07f, 1.106967129e-07f, 1.105462571e-07f, 1.103956441e-07f, 1.102448742e-07f,
+1.100939477e-07f, 1.099428650e-07f, 1.097916262e-07f, 1.096402318e-07f, 1.094886821e-07f, 1.093369772e-07f, 1.091851176e-07f, 1.090331035e-07f, 1.088809352e-07f, 1.087286131e-07f,
+1.085761374e-07f, 1.084235084e-07f, 1.082707265e-07f, 1.081177919e-07f, 1.079647050e-07f, 1.078114661e-07f, 1.076580754e-07f, 1.075045332e-07f, 1.073508399e-07f, 1.071969958e-07f,
+1.070430012e-07f, 1.068888564e-07f, 1.067345616e-07f, 1.065801172e-07f, 1.064255236e-07f, 1.062707809e-07f, 1.061158895e-07f, 1.059608498e-07f, 1.058056619e-07f, 1.056503263e-07f,
+1.054948433e-07f, 1.053392130e-07f, 1.051834359e-07f, 1.050275123e-07f, 1.048714424e-07f, 1.047152266e-07f, 1.045588652e-07f, 1.044023585e-07f, 1.042457067e-07f, 1.040889103e-07f,
+1.039319695e-07f, 1.037748845e-07f, 1.036176558e-07f, 1.034602837e-07f, 1.033027684e-07f, 1.031451102e-07f, 1.029873095e-07f, 1.028293666e-07f, 1.026712818e-07f, 1.025130553e-07f,
+1.023546876e-07f, 1.021961788e-07f, 1.020375294e-07f, 1.018787397e-07f, 1.017198099e-07f, 1.015607403e-07f, 1.014015313e-07f, 1.012421832e-07f, 1.010826962e-07f, 1.009230708e-07f,
+1.007633072e-07f, 1.006034057e-07f, 1.004433667e-07f, 1.002831904e-07f, 1.001228772e-07f, 9.996242732e-08f, 9.980184116e-08f, 9.964111901e-08f, 9.948026117e-08f, 9.931926796e-08f,
+9.915813969e-08f, 9.899687668e-08f, 9.883547925e-08f, 9.867394769e-08f, 9.851228234e-08f, 9.835048350e-08f, 9.818855149e-08f, 9.802648662e-08f, 9.786428921e-08f, 9.770195958e-08f,
+9.753949803e-08f, 9.737690488e-08f, 9.721418046e-08f, 9.705132507e-08f, 9.688833903e-08f, 9.672522265e-08f, 9.656197626e-08f, 9.639860017e-08f, 9.623509469e-08f, 9.607146015e-08f,
+9.590769685e-08f, 9.574380512e-08f, 9.557978527e-08f, 9.541563763e-08f, 9.525136250e-08f, 9.508696020e-08f, 9.492243106e-08f, 9.475777538e-08f, 9.459299350e-08f, 9.442808572e-08f,
+9.426305236e-08f, 9.409789375e-08f, 9.393261020e-08f, 9.376720203e-08f, 9.360166956e-08f, 9.343601310e-08f, 9.327023299e-08f, 9.310432952e-08f, 9.293830304e-08f, 9.277215385e-08f,
+9.260588227e-08f, 9.243948863e-08f, 9.227297324e-08f, 9.210633642e-08f, 9.193957850e-08f, 9.177269980e-08f, 9.160570063e-08f, 9.143858131e-08f, 9.127134218e-08f, 9.110398354e-08f,
+9.093650571e-08f, 9.076890903e-08f, 9.060119381e-08f, 9.043336037e-08f, 9.026540904e-08f, 9.009734013e-08f, 8.992915397e-08f, 8.976085088e-08f, 8.959243118e-08f, 8.942389519e-08f,
+8.925524324e-08f, 8.908647565e-08f, 8.891759273e-08f, 8.874859482e-08f, 8.857948224e-08f, 8.841025531e-08f, 8.824091435e-08f, 8.807145969e-08f, 8.790189164e-08f, 8.773221054e-08f,
+8.756241670e-08f, 8.739251045e-08f, 8.722249212e-08f, 8.705236202e-08f, 8.688212049e-08f, 8.671176784e-08f, 8.654130440e-08f, 8.637073050e-08f, 8.620004645e-08f, 8.602925259e-08f,
+8.585834923e-08f, 8.568733671e-08f, 8.551621535e-08f, 8.534498547e-08f, 8.517364740e-08f, 8.500220146e-08f, 8.483064798e-08f, 8.465898729e-08f, 8.448721970e-08f, 8.431534555e-08f,
+8.414336517e-08f, 8.397127887e-08f, 8.379908699e-08f, 8.362678985e-08f, 8.345438777e-08f, 8.328188109e-08f, 8.310927012e-08f, 8.293655520e-08f, 8.276373666e-08f, 8.259081481e-08f,
+8.241779000e-08f, 8.224466253e-08f, 8.207143275e-08f, 8.189810097e-08f, 8.172466753e-08f, 8.155113275e-08f, 8.137749697e-08f, 8.120376050e-08f, 8.102992368e-08f, 8.085598683e-08f,
+8.068195028e-08f, 8.050781436e-08f, 8.033357940e-08f, 8.015924573e-08f, 7.998481367e-08f, 7.981028356e-08f, 7.963565571e-08f, 7.946093047e-08f, 7.928610815e-08f, 7.911118910e-08f,
+7.893617363e-08f, 7.876106207e-08f, 7.858585476e-08f, 7.841055202e-08f, 7.823515419e-08f, 7.805966159e-08f, 7.788407455e-08f, 7.770839340e-08f, 7.753261847e-08f, 7.735675009e-08f,
+7.718078860e-08f, 7.700473431e-08f, 7.682858756e-08f, 7.665234869e-08f, 7.647601801e-08f, 7.629959587e-08f, 7.612308258e-08f, 7.594647849e-08f, 7.576978392e-08f, 7.559299920e-08f,
+7.541612466e-08f, 7.523916064e-08f, 7.506210746e-08f, 7.488496546e-08f, 7.470773496e-08f, 7.453041631e-08f, 7.435300981e-08f, 7.417551582e-08f, 7.399793466e-08f, 7.382026666e-08f,
+7.364251215e-08f, 7.346467147e-08f, 7.328674495e-08f, 7.310873291e-08f, 7.293063569e-08f, 7.275245362e-08f, 7.257418704e-08f, 7.239583627e-08f, 7.221740165e-08f, 7.203888350e-08f,
+7.186028217e-08f, 7.168159798e-08f, 7.150283127e-08f, 7.132398236e-08f, 7.114505160e-08f, 7.096603930e-08f, 7.078694581e-08f, 7.060777146e-08f, 7.042851658e-08f, 7.024918150e-08f,
+7.006976655e-08f, 6.989027208e-08f, 6.971069840e-08f, 6.953104586e-08f, 6.935131479e-08f, 6.917150552e-08f, 6.899161837e-08f, 6.881165370e-08f, 6.863161182e-08f, 6.845149308e-08f,
+6.827129781e-08f, 6.809102633e-08f, 6.791067898e-08f, 6.773025611e-08f, 6.754975803e-08f, 6.736918508e-08f, 6.718853760e-08f, 6.700781593e-08f, 6.682702038e-08f, 6.664615131e-08f,
+6.646520904e-08f, 6.628419390e-08f, 6.610310623e-08f, 6.592194637e-08f, 6.574071464e-08f, 6.555941139e-08f, 6.537803694e-08f, 6.519659164e-08f, 6.501507581e-08f, 6.483348978e-08f,
+6.465183390e-08f, 6.447010850e-08f, 6.428831391e-08f, 6.410645046e-08f, 6.392451850e-08f, 6.374251835e-08f, 6.356045035e-08f, 6.337831484e-08f, 6.319611215e-08f, 6.301384260e-08f,
+6.283150655e-08f, 6.264910432e-08f, 6.246663625e-08f, 6.228410267e-08f, 6.210150392e-08f, 6.191884033e-08f, 6.173611224e-08f, 6.155331998e-08f, 6.137046389e-08f, 6.118754431e-08f,
+6.100456156e-08f, 6.082151598e-08f, 6.063840791e-08f, 6.045523768e-08f, 6.027200563e-08f, 6.008871210e-08f, 5.990535741e-08f, 5.972194191e-08f, 5.953846593e-08f, 5.935492980e-08f,
+5.917133386e-08f, 5.898767844e-08f, 5.880396389e-08f, 5.862019053e-08f, 5.843635871e-08f, 5.825246875e-08f, 5.806852099e-08f, 5.788451577e-08f, 5.770045343e-08f, 5.751633429e-08f,
+5.733215870e-08f, 5.714792699e-08f, 5.696363950e-08f, 5.677929655e-08f, 5.659489850e-08f, 5.641044567e-08f, 5.622593839e-08f, 5.604137701e-08f, 5.585676186e-08f, 5.567209328e-08f,
+5.548737159e-08f, 5.530259715e-08f, 5.511777027e-08f, 5.493289131e-08f, 5.474796059e-08f, 5.456297845e-08f, 5.437794522e-08f, 5.419286125e-08f, 5.400772687e-08f, 5.382254241e-08f,
+5.363730821e-08f, 5.345202460e-08f, 5.326669193e-08f, 5.308131052e-08f, 5.289588072e-08f, 5.271040285e-08f, 5.252487726e-08f, 5.233930428e-08f, 5.215368425e-08f, 5.196801750e-08f,
+5.178230437e-08f, 5.159654519e-08f, 5.141074030e-08f, 5.122489004e-08f, 5.103899474e-08f, 5.085305474e-08f, 5.066707037e-08f, 5.048104198e-08f, 5.029496988e-08f, 5.010885443e-08f,
+4.992269596e-08f, 4.973649480e-08f, 4.955025129e-08f, 4.936396576e-08f, 4.917763856e-08f, 4.899127001e-08f, 4.880486045e-08f, 4.861841023e-08f, 4.843191966e-08f, 4.824538910e-08f,
+4.805881887e-08f, 4.787220932e-08f, 4.768556077e-08f, 4.749887357e-08f, 4.731214804e-08f, 4.712538454e-08f, 4.693858338e-08f, 4.675174490e-08f, 4.656486945e-08f, 4.637795736e-08f,
+4.619100896e-08f, 4.600402459e-08f, 4.581700459e-08f, 4.562994929e-08f, 4.544285902e-08f, 4.525573412e-08f, 4.506857493e-08f, 4.488138179e-08f, 4.469415502e-08f, 4.450689497e-08f,
+4.431960197e-08f, 4.413227635e-08f, 4.394491845e-08f, 4.375752861e-08f, 4.357010716e-08f, 4.338265444e-08f, 4.319517078e-08f, 4.300765651e-08f, 4.282011198e-08f, 4.263253752e-08f,
+4.244493346e-08f, 4.225730014e-08f, 4.206963789e-08f, 4.188194705e-08f, 4.169422796e-08f, 4.150648095e-08f, 4.131870635e-08f, 4.113090450e-08f, 4.094307573e-08f, 4.075522038e-08f,
+4.056733879e-08f, 4.037943129e-08f, 4.019149821e-08f, 4.000353989e-08f, 3.981555667e-08f, 3.962754887e-08f, 3.943951684e-08f, 3.925146090e-08f, 3.906338140e-08f, 3.887527866e-08f,
+3.868715303e-08f, 3.849900484e-08f, 3.831083441e-08f, 3.812264209e-08f, 3.793442821e-08f, 3.774619311e-08f, 3.755793711e-08f, 3.736966056e-08f, 3.718136379e-08f, 3.699304712e-08f,
+3.680471091e-08f, 3.661635547e-08f, 3.642798115e-08f, 3.623958827e-08f, 3.605117718e-08f, 3.586274820e-08f, 3.567430167e-08f, 3.548583793e-08f, 3.529735731e-08f, 3.510886013e-08f,
+3.492034674e-08f, 3.473181747e-08f, 3.454327266e-08f, 3.435471262e-08f, 3.416613771e-08f, 3.397754825e-08f, 3.378894458e-08f, 3.360032702e-08f, 3.341169592e-08f, 3.322305161e-08f,
+3.303439441e-08f, 3.284572467e-08f, 3.265704271e-08f, 3.246834887e-08f, 3.227964348e-08f, 3.209092688e-08f, 3.190219939e-08f, 3.171346136e-08f, 3.152471310e-08f, 3.133595496e-08f,
+3.114718727e-08f, 3.095841036e-08f, 3.076962456e-08f, 3.058083020e-08f, 3.039202763e-08f, 3.020321716e-08f, 3.001439914e-08f, 2.982557389e-08f, 2.963674174e-08f, 2.944790303e-08f,
+2.925905810e-08f, 2.907020726e-08f, 2.888135086e-08f, 2.869248923e-08f, 2.850362269e-08f, 2.831475158e-08f, 2.812587623e-08f, 2.793699697e-08f, 2.774811413e-08f, 2.755922805e-08f,
+2.737033905e-08f, 2.718144747e-08f, 2.699255364e-08f, 2.680365789e-08f, 2.661476054e-08f, 2.642586194e-08f, 2.623696241e-08f, 2.604806228e-08f, 2.585916188e-08f, 2.567026155e-08f,
+2.548136160e-08f, 2.529246239e-08f, 2.510356422e-08f, 2.491466745e-08f, 2.472577238e-08f, 2.453687936e-08f, 2.434798872e-08f, 2.415910078e-08f, 2.397021587e-08f, 2.378133433e-08f,
+2.359245648e-08f, 2.340358265e-08f, 2.321471318e-08f, 2.302584839e-08f, 2.283698861e-08f, 2.264813417e-08f, 2.245928540e-08f, 2.227044263e-08f, 2.208160619e-08f, 2.189277640e-08f,
+2.170395360e-08f, 2.151513811e-08f, 2.132633027e-08f, 2.113753040e-08f, 2.094873882e-08f, 2.075995588e-08f, 2.057118189e-08f, 2.038241718e-08f, 2.019366209e-08f, 2.000491693e-08f,
+1.981618204e-08f, 1.962745775e-08f, 1.943874439e-08f, 1.925004227e-08f, 1.906135173e-08f, 1.887267310e-08f, 1.868400670e-08f, 1.849535286e-08f, 1.830671191e-08f, 1.811808417e-08f,
+1.792946997e-08f, 1.774086964e-08f, 1.755228351e-08f, 1.736371189e-08f, 1.717515512e-08f, 1.698661353e-08f, 1.679808743e-08f, 1.660957717e-08f, 1.642108305e-08f, 1.623260541e-08f,
+1.604414458e-08f, 1.585570087e-08f, 1.566727462e-08f, 1.547886615e-08f, 1.529047579e-08f, 1.510210385e-08f, 1.491375068e-08f, 1.472541658e-08f, 1.453710189e-08f, 1.434880693e-08f,
+1.416053203e-08f, 1.397227751e-08f, 1.378404369e-08f, 1.359583090e-08f, 1.340763947e-08f, 1.321946971e-08f, 1.303132196e-08f, 1.284319653e-08f, 1.265509375e-08f, 1.246701394e-08f,
+1.227895743e-08f, 1.209092454e-08f, 1.190291559e-08f, 1.171493091e-08f, 1.152697082e-08f, 1.133903565e-08f, 1.115112571e-08f, 1.096324132e-08f, 1.077538282e-08f, 1.058755052e-08f,
+1.039974475e-08f, 1.021196582e-08f, 1.002421406e-08f, 9.836489800e-09f, 9.648793350e-09f, 9.461125036e-09f, 9.273485179e-09f, 9.085874101e-09f, 8.898292123e-09f, 8.710739566e-09f,
+8.523216751e-09f, 8.335724000e-09f, 8.148261634e-09f, 7.960829972e-09f, 7.773429336e-09f, 7.586060045e-09f, 7.398722421e-09f, 7.211416784e-09f, 7.024143453e-09f, 6.836902748e-09f,
+6.649694990e-09f, 6.462520498e-09f, 6.275379591e-09f, 6.088272589e-09f, 5.901199811e-09f, 5.714161576e-09f, 5.527158204e-09f, 5.340190012e-09f, 5.153257320e-09f, 4.966360446e-09f,
+4.779499709e-09f, 4.592675427e-09f, 4.405887918e-09f, 4.219137501e-09f, 4.032424492e-09f, 3.845749210e-09f, 3.659111972e-09f, 3.472513096e-09f, 3.285952899e-09f, 3.099431698e-09f,
+2.912949810e-09f, 2.726507552e-09f, 2.540105242e-09f, 2.353743194e-09f, 2.167421726e-09f, 1.981141154e-09f, 1.794901795e-09f, 1.608703963e-09f, 1.422547976e-09f, 1.236434148e-09f,
+1.050362795e-09f, 8.643342328e-10f, 6.783487766e-10f, 4.924067412e-10f, 3.065084417e-10f, 1.206541928e-10f, -6.515569085e-11f, -2.509208947e-10f, -4.366411046e-10f, -6.223160062e-10f,
+-8.079452856e-10f, -9.935286289e-10f, -1.179065722e-09f, -1.364556252e-09f, -1.549999906e-09f, -1.735396369e-09f, -1.920745330e-09f, -2.106046474e-09f, -2.291299490e-09f, -2.476504064e-09f,
+-2.661659884e-09f, -2.846766639e-09f, -3.031824015e-09f, -3.216831701e-09f, -3.401789385e-09f, -3.586696756e-09f, -3.771553501e-09f, -3.956359311e-09f, -4.141113872e-09f, -4.325816876e-09f,
+-4.510468010e-09f, -4.695066963e-09f, -4.879613427e-09f, -5.064107090e-09f, -5.248547642e-09f, -5.432934773e-09f, -5.617268173e-09f, -5.801547533e-09f, -5.985772543e-09f, -6.169942894e-09f,
+-6.354058276e-09f, -6.538118382e-09f, -6.722122901e-09f, -6.906071525e-09f, -7.089963947e-09f, -7.273799857e-09f, -7.457578947e-09f, -7.641300910e-09f, -7.824965438e-09f, -8.008572223e-09f,
+-8.192120957e-09f, -8.375611334e-09f, -8.559043047e-09f, -8.742415788e-09f, -8.925729251e-09f, -9.108983129e-09f, -9.292177116e-09f, -9.475310906e-09f, -9.658384193e-09f, -9.841396670e-09f,
+-1.002434803e-08f, -1.020723798e-08f, -1.039006619e-08f, -1.057283238e-08f, -1.075553623e-08f, -1.093817744e-08f, -1.112075571e-08f, -1.130327073e-08f, -1.148572219e-08f, -1.166810980e-08f,
+-1.185043324e-08f, -1.203269222e-08f, -1.221488644e-08f, -1.239701558e-08f, -1.257907935e-08f, -1.276107743e-08f, -1.294300954e-08f, -1.312487537e-08f, -1.330667461e-08f, -1.348840697e-08f,
+-1.367007213e-08f, -1.385166981e-08f, -1.403319969e-08f, -1.421466148e-08f, -1.439605488e-08f, -1.457737958e-08f, -1.475863528e-08f, -1.493982168e-08f, -1.512093849e-08f, -1.530198540e-08f,
+-1.548296211e-08f, -1.566386832e-08f, -1.584470374e-08f, -1.602546806e-08f, -1.620616098e-08f, -1.638678221e-08f, -1.656733145e-08f, -1.674780839e-08f, -1.692821274e-08f, -1.710854421e-08f,
+-1.728880248e-08f, -1.746898727e-08f, -1.764909828e-08f, -1.782913521e-08f, -1.800909776e-08f, -1.818898563e-08f, -1.836879854e-08f, -1.854853617e-08f, -1.872819825e-08f, -1.890778446e-08f,
+-1.908729451e-08f, -1.926672811e-08f, -1.944608497e-08f, -1.962536478e-08f, -1.980456725e-08f, -1.998369209e-08f, -2.016273900e-08f, -2.034170769e-08f, -2.052059786e-08f, -2.069940922e-08f,
+-2.087814147e-08f, -2.105679432e-08f, -2.123536748e-08f, -2.141386066e-08f, -2.159227355e-08f, -2.177060587e-08f, -2.194885733e-08f, -2.212702763e-08f, -2.230511648e-08f, -2.248312359e-08f,
+-2.266104867e-08f, -2.283889142e-08f, -2.301665155e-08f, -2.319432878e-08f, -2.337192280e-08f, -2.354943334e-08f, -2.372686010e-08f, -2.390420278e-08f, -2.408146111e-08f, -2.425863478e-08f,
+-2.443572352e-08f, -2.461272702e-08f, -2.478964501e-08f, -2.496647719e-08f, -2.514322327e-08f, -2.531988297e-08f, -2.549645599e-08f, -2.567294205e-08f, -2.584934086e-08f, -2.602565213e-08f,
+-2.620187558e-08f, -2.637801092e-08f, -2.655405785e-08f, -2.673001610e-08f, -2.690588538e-08f, -2.708166540e-08f, -2.725735587e-08f, -2.743295651e-08f, -2.760846704e-08f, -2.778388716e-08f,
+-2.795921660e-08f, -2.813445506e-08f, -2.830960226e-08f, -2.848465793e-08f, -2.865962176e-08f, -2.883449349e-08f, -2.900927282e-08f, -2.918395948e-08f, -2.935855317e-08f, -2.953305362e-08f,
+-2.970746054e-08f, -2.988177365e-08f, -3.005599267e-08f, -3.023011732e-08f, -3.040414730e-08f, -3.057808235e-08f, -3.075192218e-08f, -3.092566651e-08f, -3.109931506e-08f, -3.127286754e-08f,
+-3.144632368e-08f, -3.161968319e-08f, -3.179294580e-08f, -3.196611123e-08f, -3.213917919e-08f, -3.231214941e-08f, -3.248502160e-08f, -3.265779550e-08f, -3.283047081e-08f, -3.300304726e-08f,
+-3.317552458e-08f, -3.334790249e-08f, -3.352018070e-08f, -3.369235894e-08f, -3.386443693e-08f, -3.403641440e-08f, -3.420829107e-08f, -3.438006666e-08f, -3.455174090e-08f, -3.472331351e-08f,
+-3.489478421e-08f, -3.506615273e-08f, -3.523741879e-08f, -3.540858213e-08f, -3.557964245e-08f, -3.575059950e-08f, -3.592145299e-08f, -3.609220265e-08f, -3.626284820e-08f, -3.643338939e-08f,
+-3.660382592e-08f, -3.677415752e-08f, -3.694438393e-08f, -3.711450488e-08f, -3.728452008e-08f, -3.745442927e-08f, -3.762423217e-08f, -3.779392852e-08f, -3.796351804e-08f, -3.813300046e-08f,
+-3.830237552e-08f, -3.847164293e-08f, -3.864080243e-08f, -3.880985375e-08f, -3.897879662e-08f, -3.914763078e-08f, -3.931635594e-08f, -3.948497184e-08f, -3.965347822e-08f, -3.982187480e-08f,
+-3.999016132e-08f, -4.015833751e-08f, -4.032640310e-08f, -4.049435782e-08f, -4.066220141e-08f, -4.082993359e-08f, -4.099755411e-08f, -4.116506269e-08f, -4.133245908e-08f, -4.149974300e-08f,
+-4.166691418e-08f, -4.183397237e-08f, -4.200091730e-08f, -4.216774869e-08f, -4.233446630e-08f, -4.250106985e-08f, -4.266755908e-08f, -4.283393373e-08f, -4.300019352e-08f, -4.316633821e-08f,
+-4.333236752e-08f, -4.349828120e-08f, -4.366407897e-08f, -4.382976059e-08f, -4.399532578e-08f, -4.416077428e-08f, -4.432610584e-08f, -4.449132019e-08f, -4.465641708e-08f, -4.482139623e-08f,
+-4.498625739e-08f, -4.515100031e-08f, -4.531562471e-08f, -4.548013034e-08f, -4.564451695e-08f, -4.580878427e-08f, -4.597293204e-08f, -4.613696001e-08f, -4.630086791e-08f, -4.646465550e-08f,
+-4.662832250e-08f, -4.679186867e-08f, -4.695529375e-08f, -4.711859747e-08f, -4.728177960e-08f, -4.744483985e-08f, -4.760777799e-08f, -4.777059376e-08f, -4.793328689e-08f, -4.809585715e-08f,
+-4.825830426e-08f, -4.842062797e-08f, -4.858282804e-08f, -4.874490421e-08f, -4.890685622e-08f, -4.906868382e-08f, -4.923038675e-08f, -4.939196477e-08f, -4.955341762e-08f, -4.971474505e-08f,
+-4.987594681e-08f, -5.003702264e-08f, -5.019797229e-08f, -5.035879552e-08f, -5.051949207e-08f, -5.068006168e-08f, -5.084050412e-08f, -5.100081913e-08f, -5.116100646e-08f, -5.132106586e-08f,
+-5.148099708e-08f, -5.164079987e-08f, -5.180047398e-08f, -5.196001917e-08f, -5.211943519e-08f, -5.227872179e-08f, -5.243787872e-08f, -5.259690573e-08f, -5.275580258e-08f, -5.291456902e-08f,
+-5.307320480e-08f, -5.323170969e-08f, -5.339008342e-08f, -5.354832576e-08f, -5.370643647e-08f, -5.386441529e-08f, -5.402226198e-08f, -5.417997630e-08f, -5.433755800e-08f, -5.449500684e-08f,
+-5.465232258e-08f, -5.480950497e-08f, -5.496655378e-08f, -5.512346874e-08f, -5.528024964e-08f, -5.543689622e-08f, -5.559340823e-08f, -5.574978545e-08f, -5.590602763e-08f, -5.606213452e-08f,
+-5.621810589e-08f, -5.637394150e-08f, -5.652964111e-08f, -5.668520447e-08f, -5.684063135e-08f, -5.699592151e-08f, -5.715107471e-08f, -5.730609071e-08f, -5.746096928e-08f, -5.761571017e-08f,
+-5.777031315e-08f, -5.792477797e-08f, -5.807910442e-08f, -5.823329224e-08f, -5.838734120e-08f, -5.854125106e-08f, -5.869502159e-08f, -5.884865256e-08f, -5.900214372e-08f, -5.915549485e-08f,
+-5.930870570e-08f, -5.946177605e-08f, -5.961470566e-08f, -5.976749430e-08f, -5.992014173e-08f, -6.007264772e-08f, -6.022501204e-08f, -6.037723445e-08f, -6.052931472e-08f, -6.068125263e-08f,
+-6.083304793e-08f, -6.098470040e-08f, -6.113620982e-08f, -6.128757593e-08f, -6.143879852e-08f, -6.158987736e-08f, -6.174081222e-08f, -6.189160286e-08f, -6.204224906e-08f, -6.219275059e-08f,
+-6.234310722e-08f, -6.249331873e-08f, -6.264338488e-08f, -6.279330544e-08f, -6.294308020e-08f, -6.309270892e-08f, -6.324219137e-08f, -6.339152734e-08f, -6.354071659e-08f, -6.368975889e-08f,
+-6.383865404e-08f, -6.398740178e-08f, -6.413600192e-08f, -6.428445421e-08f, -6.443275844e-08f, -6.458091437e-08f, -6.472892180e-08f, -6.487678049e-08f, -6.502449022e-08f, -6.517205077e-08f,
+-6.531946192e-08f, -6.546672344e-08f, -6.561383512e-08f, -6.576079673e-08f, -6.590760805e-08f, -6.605426885e-08f, -6.620077893e-08f, -6.634713806e-08f, -6.649334602e-08f, -6.663940260e-08f,
+-6.678530756e-08f, -6.693106070e-08f, -6.707666179e-08f, -6.722211062e-08f, -6.736740697e-08f, -6.751255061e-08f, -6.765754135e-08f, -6.780237895e-08f, -6.794706320e-08f, -6.809159389e-08f,
+-6.823597080e-08f, -6.838019371e-08f, -6.852426241e-08f, -6.866817668e-08f, -6.881193631e-08f, -6.895554109e-08f, -6.909899080e-08f, -6.924228522e-08f, -6.938542415e-08f, -6.952840737e-08f,
+-6.967123467e-08f, -6.981390583e-08f, -6.995642065e-08f, -7.009877891e-08f, -7.024098041e-08f, -7.038302492e-08f, -7.052491224e-08f, -7.066664217e-08f, -7.080821448e-08f, -7.094962897e-08f,
+-7.109088543e-08f, -7.123198365e-08f, -7.137292343e-08f, -7.151370455e-08f, -7.165432680e-08f, -7.179478999e-08f, -7.193509389e-08f, -7.207523831e-08f, -7.221522304e-08f, -7.235504787e-08f,
+-7.249471259e-08f, -7.263421700e-08f, -7.277356090e-08f, -7.291274407e-08f, -7.305176632e-08f, -7.319062744e-08f, -7.332932722e-08f, -7.346786547e-08f, -7.360624197e-08f, -7.374445653e-08f,
+-7.388250894e-08f, -7.402039900e-08f, -7.415812651e-08f, -7.429569127e-08f, -7.443309307e-08f, -7.457033172e-08f, -7.470740700e-08f, -7.484431873e-08f, -7.498106671e-08f, -7.511765072e-08f,
+-7.525407058e-08f, -7.539032609e-08f, -7.552641704e-08f, -7.566234324e-08f, -7.579810449e-08f, -7.593370058e-08f, -7.606913134e-08f, -7.620439655e-08f, -7.633949602e-08f, -7.647442955e-08f,
+-7.660919696e-08f, -7.674379803e-08f, -7.687823259e-08f, -7.701250042e-08f, -7.714660135e-08f, -7.728053516e-08f, -7.741430168e-08f, -7.754790070e-08f, -7.768133203e-08f, -7.781459549e-08f,
+-7.794769087e-08f, -7.808061798e-08f, -7.821337664e-08f, -7.834596664e-08f, -7.847838781e-08f, -7.861063995e-08f, -7.874272286e-08f, -7.887463637e-08f, -7.900638027e-08f, -7.913795438e-08f,
+-7.926935850e-08f, -7.940059246e-08f, -7.953165607e-08f, -7.966254912e-08f, -7.979327144e-08f, -7.992382284e-08f, -8.005420314e-08f, -8.018441213e-08f, -8.031444965e-08f, -8.044431549e-08f,
+-8.057400949e-08f, -8.070353144e-08f, -8.083288117e-08f, -8.096205850e-08f, -8.109106323e-08f, -8.121989518e-08f, -8.134855417e-08f, -8.147704002e-08f, -8.160535254e-08f, -8.173349155e-08f,
+-8.186145687e-08f, -8.198924832e-08f, -8.211686571e-08f, -8.224430887e-08f, -8.237157760e-08f, -8.249867174e-08f, -8.262559111e-08f, -8.275233551e-08f, -8.287890478e-08f, -8.300529873e-08f,
+-8.313151718e-08f, -8.325755997e-08f, -8.338342690e-08f, -8.350911780e-08f, -8.363463249e-08f, -8.375997080e-08f, -8.388513256e-08f, -8.401011757e-08f, -8.413492567e-08f, -8.425955669e-08f,
+-8.438401044e-08f, -8.450828675e-08f, -8.463238545e-08f, -8.475630636e-08f, -8.488004931e-08f, -8.500361413e-08f, -8.512700064e-08f, -8.525020867e-08f, -8.537323805e-08f, -8.549608861e-08f,
+-8.561876016e-08f, -8.574125255e-08f, -8.586356560e-08f, -8.598569915e-08f, -8.610765301e-08f, -8.622942702e-08f, -8.635102102e-08f, -8.647243483e-08f, -8.659366828e-08f, -8.671472120e-08f,
+-8.683559343e-08f, -8.695628480e-08f, -8.707679514e-08f, -8.719712429e-08f, -8.731727207e-08f, -8.743723833e-08f, -8.755702288e-08f, -8.767662558e-08f, -8.779604626e-08f, -8.791528474e-08f,
+-8.803434087e-08f, -8.815321448e-08f, -8.827190540e-08f, -8.839041348e-08f, -8.850873855e-08f, -8.862688045e-08f, -8.874483901e-08f, -8.886261408e-08f, -8.898020549e-08f, -8.909761308e-08f,
+-8.921483669e-08f, -8.933187615e-08f, -8.944873132e-08f, -8.956540202e-08f, -8.968188811e-08f, -8.979818941e-08f, -8.991430577e-08f, -9.003023704e-08f, -9.014598306e-08f, -9.026154366e-08f,
+-9.037691869e-08f, -9.049210799e-08f, -9.060711141e-08f, -9.072192880e-08f, -9.083655998e-08f, -9.095100482e-08f, -9.106526315e-08f, -9.117933481e-08f, -9.129321967e-08f, -9.140691755e-08f,
+-9.152042831e-08f, -9.163375180e-08f, -9.174688785e-08f, -9.185983633e-08f, -9.197259707e-08f, -9.208516992e-08f, -9.219755474e-08f, -9.230975137e-08f, -9.242175966e-08f, -9.253357946e-08f,
+-9.264521062e-08f, -9.275665300e-08f, -9.286790643e-08f, -9.297897078e-08f, -9.308984589e-08f, -9.320053162e-08f, -9.331102782e-08f, -9.342133434e-08f, -9.353145103e-08f, -9.364137775e-08f,
+-9.375111435e-08f, -9.386066069e-08f, -9.397001662e-08f, -9.407918199e-08f, -9.418815666e-08f, -9.429694049e-08f, -9.440553332e-08f, -9.451393503e-08f, -9.462214545e-08f, -9.473016446e-08f,
+-9.483799191e-08f, -9.494562765e-08f, -9.505307155e-08f, -9.516032346e-08f, -9.526738325e-08f, -9.537425076e-08f, -9.548092586e-08f, -9.558740842e-08f, -9.569369828e-08f, -9.579979532e-08f,
+-9.590569939e-08f, -9.601141036e-08f, -9.611692808e-08f, -9.622225242e-08f, -9.632738324e-08f, -9.643232040e-08f, -9.653706377e-08f, -9.664161321e-08f, -9.674596859e-08f, -9.685012977e-08f,
+-9.695409661e-08f, -9.705786898e-08f, -9.716144674e-08f, -9.726482977e-08f, -9.736801792e-08f, -9.747101107e-08f, -9.757380908e-08f, -9.767641182e-08f, -9.777881916e-08f, -9.788103096e-08f,
+-9.798304709e-08f, -9.808486743e-08f, -9.818649184e-08f, -9.828792018e-08f, -9.838915235e-08f, -9.849018819e-08f, -9.859102758e-08f, -9.869167040e-08f, -9.879211652e-08f, -9.889236580e-08f,
+-9.899241812e-08f, -9.909227336e-08f, -9.919193138e-08f, -9.929139206e-08f, -9.939065527e-08f, -9.948972089e-08f, -9.958858880e-08f, -9.968725886e-08f, -9.978573095e-08f, -9.988400495e-08f,
+-9.998208073e-08f, -1.000799582e-07f, -1.001776372e-07f, -1.002751176e-07f, -1.003723992e-07f, -1.004694821e-07f, -1.005663660e-07f, -1.006630508e-07f, -1.007595365e-07f, -1.008558228e-07f,
+-1.009519097e-07f, -1.010477971e-07f, -1.011434847e-07f, -1.012389726e-07f, -1.013342606e-07f, -1.014293485e-07f, -1.015242363e-07f, -1.016189238e-07f, -1.017134110e-07f, -1.018076976e-07f,
+-1.019017837e-07f, -1.019956690e-07f, -1.020893534e-07f, -1.021828369e-07f, -1.022761194e-07f, -1.023692006e-07f, -1.024620805e-07f, -1.025547590e-07f, -1.026472360e-07f, -1.027395114e-07f,
+-1.028315849e-07f, -1.029234567e-07f, -1.030151264e-07f, -1.031065940e-07f, -1.031978595e-07f, -1.032889226e-07f, -1.033797833e-07f, -1.034704415e-07f, -1.035608970e-07f, -1.036511498e-07f,
+-1.037411997e-07f, -1.038310467e-07f, -1.039206906e-07f, -1.040101313e-07f, -1.040993687e-07f, -1.041884027e-07f, -1.042772332e-07f, -1.043658601e-07f, -1.044542833e-07f, -1.045425026e-07f,
+-1.046305180e-07f, -1.047183294e-07f, -1.048059367e-07f, -1.048933397e-07f, -1.049805384e-07f, -1.050675327e-07f, -1.051543224e-07f, -1.052409074e-07f, -1.053272877e-07f, -1.054134632e-07f,
+-1.054994337e-07f, -1.055851991e-07f, -1.056707594e-07f, -1.057561145e-07f, -1.058412641e-07f, -1.059262084e-07f, -1.060109471e-07f, -1.060954801e-07f, -1.061798074e-07f, -1.062639288e-07f,
+-1.063478443e-07f, -1.064315538e-07f, -1.065150571e-07f, -1.065983542e-07f, -1.066814450e-07f, -1.067643293e-07f, -1.068470072e-07f, -1.069294784e-07f, -1.070117429e-07f, -1.070938006e-07f,
+-1.071756515e-07f, -1.072572953e-07f, -1.073387321e-07f, -1.074199617e-07f, -1.075009840e-07f, -1.075817990e-07f, -1.076624065e-07f, -1.077428065e-07f, -1.078229989e-07f, -1.079029836e-07f,
+-1.079827605e-07f, -1.080623294e-07f, -1.081416904e-07f, -1.082208434e-07f, -1.082997881e-07f, -1.083785246e-07f, -1.084570528e-07f, -1.085353726e-07f, -1.086134839e-07f, -1.086913865e-07f,
+-1.087690805e-07f, -1.088465658e-07f, -1.089238422e-07f, -1.090009096e-07f, -1.090777681e-07f, -1.091544174e-07f, -1.092308576e-07f, -1.093070885e-07f, -1.093831100e-07f, -1.094589222e-07f,
+-1.095345248e-07f, -1.096099178e-07f, -1.096851011e-07f, -1.097600747e-07f, -1.098348385e-07f, -1.099093923e-07f, -1.099837362e-07f, -1.100578700e-07f, -1.101317936e-07f, -1.102055070e-07f,
+-1.102790101e-07f, -1.103523028e-07f, -1.104253851e-07f, -1.104982568e-07f, -1.105709179e-07f, -1.106433683e-07f, -1.107156080e-07f, -1.107876368e-07f, -1.108594547e-07f, -1.109310616e-07f,
+-1.110024574e-07f, -1.110736421e-07f, -1.111446156e-07f, -1.112153778e-07f, -1.112859287e-07f, -1.113562681e-07f, -1.114263960e-07f, -1.114963124e-07f, -1.115660171e-07f, -1.116355101e-07f,
+-1.117047914e-07f, -1.117738607e-07f, -1.118427182e-07f, -1.119113637e-07f, -1.119797971e-07f, -1.120480184e-07f, -1.121160275e-07f, -1.121838243e-07f, -1.122514088e-07f, -1.123187809e-07f,
+-1.123859406e-07f, -1.124528877e-07f, -1.125196222e-07f, -1.125861441e-07f, -1.126524533e-07f, -1.127185497e-07f, -1.127844332e-07f, -1.128501038e-07f, -1.129155614e-07f, -1.129808060e-07f,
+-1.130458376e-07f, -1.131106559e-07f, -1.131752610e-07f, -1.132396528e-07f, -1.133038313e-07f, -1.133677964e-07f, -1.134315480e-07f, -1.134950861e-07f, -1.135584106e-07f, -1.136215215e-07f,
+-1.136844187e-07f, -1.137471021e-07f, -1.138095717e-07f, -1.138718274e-07f, -1.139338692e-07f, -1.139956970e-07f, -1.140573107e-07f, -1.141187104e-07f, -1.141798959e-07f, -1.142408672e-07f,
+-1.143016242e-07f, -1.143621669e-07f, -1.144224953e-07f, -1.144826092e-07f, -1.145425086e-07f, -1.146021935e-07f, -1.146616639e-07f, -1.147209196e-07f, -1.147799606e-07f, -1.148387869e-07f,
+-1.148973983e-07f, -1.149557950e-07f, -1.150139768e-07f, -1.150719436e-07f, -1.151296954e-07f, -1.151872323e-07f, -1.152445540e-07f, -1.153016606e-07f, -1.153585520e-07f, -1.154152282e-07f,
+-1.154716891e-07f, -1.155279347e-07f, -1.155839650e-07f, -1.156397798e-07f, -1.156953792e-07f, -1.157507631e-07f, -1.158059315e-07f, -1.158608842e-07f, -1.159156213e-07f, -1.159701428e-07f,
+-1.160244485e-07f, -1.160785385e-07f, -1.161324127e-07f, -1.161860710e-07f, -1.162395135e-07f, -1.162927400e-07f, -1.163457506e-07f, -1.163985452e-07f, -1.164511237e-07f, -1.165034861e-07f,
+-1.165556324e-07f, -1.166075626e-07f, -1.166592765e-07f, -1.167107743e-07f, -1.167620557e-07f, -1.168131208e-07f, -1.168639696e-07f, -1.169146020e-07f, -1.169650180e-07f, -1.170152175e-07f,
+-1.170652005e-07f, -1.171149671e-07f, -1.171645170e-07f, -1.172138504e-07f, -1.172629671e-07f, -1.173118672e-07f, -1.173605506e-07f, -1.174090172e-07f, -1.174572671e-07f, -1.175053002e-07f,
+-1.175531165e-07f, -1.176007160e-07f, -1.176480985e-07f, -1.176952642e-07f, -1.177422129e-07f, -1.177889447e-07f, -1.178354594e-07f, -1.178817571e-07f, -1.179278378e-07f, -1.179737014e-07f,
+-1.180193479e-07f, -1.180647772e-07f, -1.181099894e-07f, -1.181549844e-07f, -1.181997622e-07f, -1.182443227e-07f, -1.182886660e-07f, -1.183327920e-07f, -1.183767007e-07f, -1.184203920e-07f,
+-1.184638660e-07f, -1.185071226e-07f, -1.185501618e-07f, -1.185929836e-07f, -1.186355879e-07f, -1.186779748e-07f, -1.187201441e-07f, -1.187620960e-07f, -1.188038303e-07f, -1.188453471e-07f,
+-1.188866463e-07f, -1.189277279e-07f, -1.189685919e-07f, -1.190092382e-07f, -1.190496670e-07f, -1.190898780e-07f, -1.191298714e-07f, -1.191696471e-07f, -1.192092050e-07f, -1.192485453e-07f,
+-1.192876678e-07f, -1.193265725e-07f, -1.193652594e-07f, -1.194037286e-07f, -1.194419800e-07f, -1.194800135e-07f, -1.195178292e-07f, -1.195554271e-07f, -1.195928071e-07f, -1.196299692e-07f,
+-1.196669135e-07f, -1.197036399e-07f, -1.197401483e-07f, -1.197764389e-07f, -1.198125115e-07f, -1.198483662e-07f, -1.198840030e-07f, -1.199194218e-07f, -1.199546226e-07f, -1.199896055e-07f,
+-1.200243704e-07f, -1.200589173e-07f, -1.200932462e-07f, -1.201273572e-07f, -1.201612501e-07f, -1.201949250e-07f, -1.202283819e-07f, -1.202616208e-07f, -1.202946416e-07f, -1.203274444e-07f,
+-1.203600292e-07f, -1.203923960e-07f, -1.204245447e-07f, -1.204564753e-07f, -1.204881879e-07f, -1.205196825e-07f, -1.205509590e-07f, -1.205820175e-07f, -1.206128579e-07f, -1.206434802e-07f,
+-1.206738845e-07f, -1.207040708e-07f, -1.207340390e-07f, -1.207637891e-07f, -1.207933212e-07f, -1.208226352e-07f, -1.208517312e-07f, -1.208806091e-07f, -1.209092691e-07f, -1.209377109e-07f,
+-1.209659347e-07f, -1.209939405e-07f, -1.210217283e-07f, -1.210492981e-07f, -1.210766498e-07f, -1.211037835e-07f, -1.211306992e-07f, -1.211573969e-07f, -1.211838767e-07f, -1.212101384e-07f,
+-1.212361821e-07f, -1.212620079e-07f, -1.212876158e-07f, -1.213130056e-07f, -1.213381776e-07f, -1.213631315e-07f, -1.213878676e-07f, -1.214123858e-07f, -1.214366860e-07f, -1.214607683e-07f,
+-1.214846328e-07f, -1.215082794e-07f, -1.215317081e-07f, -1.215549190e-07f, -1.215779121e-07f, -1.216006873e-07f, -1.216232447e-07f, -1.216455844e-07f, -1.216677062e-07f, -1.216896103e-07f,
+-1.217112966e-07f, -1.217327652e-07f, -1.217540161e-07f, -1.217750493e-07f, -1.217958648e-07f, -1.218164626e-07f, -1.218368427e-07f, -1.218570053e-07f, -1.218769502e-07f, -1.218966775e-07f,
+-1.219161873e-07f, -1.219354794e-07f, -1.219545541e-07f, -1.219734112e-07f, -1.219920508e-07f, -1.220104729e-07f, -1.220286776e-07f, -1.220466649e-07f, -1.220644347e-07f, -1.220819871e-07f,
+-1.220993222e-07f, -1.221164399e-07f, -1.221333403e-07f, -1.221500234e-07f, -1.221664892e-07f, -1.221827378e-07f, -1.221987691e-07f, -1.222145832e-07f, -1.222301802e-07f, -1.222455600e-07f,
+-1.222607227e-07f, -1.222756683e-07f, -1.222903968e-07f, -1.223049082e-07f, -1.223192027e-07f, -1.223332802e-07f, -1.223471407e-07f, -1.223607843e-07f, -1.223742109e-07f, -1.223874207e-07f,
+-1.224004137e-07f, -1.224131899e-07f, -1.224257493e-07f, -1.224380919e-07f, -1.224502178e-07f, -1.224621270e-07f, -1.224738196e-07f, -1.224852956e-07f, -1.224965549e-07f, -1.225075978e-07f,
+-1.225184241e-07f, -1.225290339e-07f, -1.225394272e-07f, -1.225496042e-07f, -1.225595648e-07f, -1.225693090e-07f, -1.225788369e-07f, -1.225881485e-07f, -1.225972440e-07f, -1.226061232e-07f,
+-1.226147862e-07f, -1.226232331e-07f, -1.226314640e-07f, -1.226394788e-07f, -1.226472776e-07f, -1.226548604e-07f, -1.226622273e-07f, -1.226693783e-07f, -1.226763134e-07f, -1.226830328e-07f,
+-1.226895364e-07f, -1.226958242e-07f, -1.227018964e-07f, -1.227077529e-07f, -1.227133939e-07f, -1.227188193e-07f, -1.227240291e-07f, -1.227290236e-07f, -1.227338025e-07f, -1.227383662e-07f,
+-1.227427144e-07f, -1.227468474e-07f, -1.227507652e-07f, -1.227544677e-07f, -1.227579551e-07f, -1.227612274e-07f, -1.227642847e-07f, -1.227671269e-07f, -1.227697542e-07f, -1.227721665e-07f,
+-1.227743640e-07f, -1.227763467e-07f, -1.227781146e-07f, -1.227796678e-07f, -1.227810063e-07f, -1.227821302e-07f, -1.227830396e-07f, -1.227837344e-07f, -1.227842148e-07f, -1.227844808e-07f,
+-1.227845324e-07f, -1.227843697e-07f, -1.227839927e-07f, -1.227834016e-07f, -1.227825963e-07f, -1.227815769e-07f, -1.227803434e-07f, -1.227788960e-07f, -1.227772347e-07f, -1.227753595e-07f,
+-1.227732705e-07f, -1.227709677e-07f, -1.227684512e-07f, -1.227657210e-07f, -1.227627773e-07f, -1.227596200e-07f, -1.227562493e-07f, -1.227526651e-07f, -1.227488676e-07f, -1.227448568e-07f,
+-1.227406328e-07f, -1.227361956e-07f, -1.227315452e-07f, -1.227266818e-07f, -1.227216054e-07f, -1.227163161e-07f, -1.227108139e-07f, -1.227050989e-07f, -1.226991711e-07f, -1.226930306e-07f,
+-1.226866776e-07f, -1.226801119e-07f, -1.226733338e-07f, -1.226663432e-07f, -1.226591403e-07f, -1.226517250e-07f, -1.226440975e-07f, -1.226362579e-07f, -1.226282061e-07f, -1.226199423e-07f,
+-1.226114666e-07f, -1.226027789e-07f, -1.225938793e-07f, -1.225847680e-07f, -1.225754450e-07f, -1.225659104e-07f, -1.225561642e-07f, -1.225462065e-07f, -1.225360374e-07f, -1.225256569e-07f,
+-1.225150651e-07f, -1.225042621e-07f, -1.224932480e-07f, -1.224820227e-07f, -1.224705865e-07f, -1.224589394e-07f, -1.224470813e-07f, -1.224350125e-07f, -1.224227330e-07f, -1.224102429e-07f,
+-1.223975421e-07f, -1.223846309e-07f, -1.223715093e-07f, -1.223581773e-07f, -1.223446350e-07f, -1.223308826e-07f, -1.223169200e-07f, -1.223027474e-07f, -1.222883648e-07f, -1.222737724e-07f,
+-1.222589701e-07f, -1.222439581e-07f, -1.222287364e-07f, -1.222133052e-07f, -1.221976644e-07f, -1.221818142e-07f, -1.221657547e-07f, -1.221494860e-07f, -1.221330080e-07f, -1.221163210e-07f,
+-1.220994249e-07f, -1.220823199e-07f, -1.220650060e-07f, -1.220474834e-07f, -1.220297520e-07f, -1.220118121e-07f, -1.219936636e-07f, -1.219753067e-07f, -1.219567414e-07f, -1.219379678e-07f,
+-1.219189861e-07f, -1.218997962e-07f, -1.218803983e-07f, -1.218607925e-07f, -1.218409788e-07f, -1.218209573e-07f, -1.218007282e-07f, -1.217802914e-07f, -1.217596472e-07f, -1.217387955e-07f,
+-1.217177365e-07f, -1.216964703e-07f, -1.216749969e-07f, -1.216533164e-07f, -1.216314289e-07f, -1.216093346e-07f, -1.215870334e-07f, -1.215645255e-07f, -1.215418111e-07f, -1.215188900e-07f,
+-1.214957626e-07f, -1.214724288e-07f, -1.214488887e-07f, -1.214251425e-07f, -1.214011902e-07f, -1.213770319e-07f, -1.213526678e-07f, -1.213280978e-07f, -1.213033222e-07f, -1.212783409e-07f,
+-1.212531541e-07f, -1.212277619e-07f, -1.212021644e-07f, -1.211763617e-07f, -1.211503538e-07f, -1.211241409e-07f, -1.210977231e-07f, -1.210711004e-07f, -1.210442730e-07f, -1.210172409e-07f,
+-1.209900043e-07f, -1.209625632e-07f, -1.209349178e-07f, -1.209070681e-07f, -1.208790143e-07f, -1.208507564e-07f, -1.208222946e-07f, -1.207936289e-07f, -1.207647595e-07f, -1.207356864e-07f,
+-1.207064097e-07f, -1.206769296e-07f, -1.206472462e-07f, -1.206173595e-07f, -1.205872696e-07f, -1.205569767e-07f, -1.205264809e-07f, -1.204957822e-07f, -1.204648808e-07f, -1.204337768e-07f,
+-1.204024703e-07f, -1.203709613e-07f, -1.203392500e-07f, -1.203073365e-07f, -1.202752210e-07f, -1.202429034e-07f, -1.202103839e-07f, -1.201776626e-07f, -1.201447397e-07f, -1.201116152e-07f,
+-1.200782892e-07f, -1.200447619e-07f, -1.200110334e-07f, -1.199771037e-07f, -1.199429729e-07f, -1.199086413e-07f, -1.198741089e-07f, -1.198393757e-07f, -1.198044420e-07f, -1.197693078e-07f,
+-1.197339732e-07f, -1.196984383e-07f, -1.196627034e-07f, -1.196267684e-07f, -1.195906334e-07f, -1.195542987e-07f, -1.195177643e-07f, -1.194810303e-07f, -1.194440968e-07f, -1.194069640e-07f,
+-1.193696319e-07f, -1.193321007e-07f, -1.192943705e-07f, -1.192564414e-07f, -1.192183136e-07f, -1.191799870e-07f, -1.191414619e-07f, -1.191027384e-07f, -1.190638166e-07f, -1.190246966e-07f,
+-1.189853785e-07f, -1.189458624e-07f, -1.189061485e-07f, -1.188662369e-07f, -1.188261277e-07f, -1.187858209e-07f, -1.187453168e-07f, -1.187046155e-07f, -1.186637170e-07f, -1.186226216e-07f,
+-1.185813292e-07f, -1.185398401e-07f, -1.184981543e-07f, -1.184562720e-07f, -1.184141933e-07f, -1.183719183e-07f, -1.183294472e-07f, -1.182867800e-07f, -1.182439169e-07f, -1.182008581e-07f,
+-1.181576035e-07f, -1.181141535e-07f, -1.180705080e-07f, -1.180266672e-07f, -1.179826312e-07f, -1.179384002e-07f, -1.178939743e-07f, -1.178493537e-07f, -1.178045383e-07f, -1.177595284e-07f,
+-1.177143241e-07f, -1.176689255e-07f, -1.176233328e-07f, -1.175775460e-07f, -1.175315654e-07f, -1.174853909e-07f, -1.174390228e-07f, -1.173924612e-07f, -1.173457063e-07f, -1.172987580e-07f,
+-1.172516167e-07f, -1.172042823e-07f, -1.171567551e-07f, -1.171090352e-07f, -1.170611226e-07f, -1.170130176e-07f, -1.169647203e-07f, -1.169162307e-07f, -1.168675491e-07f, -1.168186755e-07f,
+-1.167696101e-07f, -1.167203531e-07f, -1.166709045e-07f, -1.166212645e-07f, -1.165714332e-07f, -1.165214108e-07f, -1.164711974e-07f, -1.164207931e-07f, -1.163701981e-07f, -1.163194125e-07f,
+-1.162684364e-07f, -1.162172700e-07f, -1.161659134e-07f, -1.161143668e-07f, -1.160626302e-07f, -1.160107039e-07f, -1.159585879e-07f, -1.159062825e-07f, -1.158537876e-07f, -1.158011036e-07f,
+-1.157482304e-07f, -1.156951684e-07f, -1.156419175e-07f, -1.155884779e-07f, -1.155348498e-07f, -1.154810334e-07f, -1.154270287e-07f, -1.153728359e-07f, -1.153184551e-07f, -1.152638865e-07f,
+-1.152091302e-07f, -1.151541864e-07f, -1.150990552e-07f, -1.150437368e-07f, -1.149882312e-07f, -1.149325387e-07f, -1.148766594e-07f, -1.148205934e-07f, -1.147643408e-07f, -1.147079019e-07f,
+-1.146512767e-07f, -1.145944655e-07f, -1.145374683e-07f, -1.144802852e-07f, -1.144229166e-07f, -1.143653624e-07f, -1.143076228e-07f, -1.142496980e-07f, -1.141915882e-07f, -1.141332934e-07f,
+-1.140748139e-07f, -1.140161497e-07f, -1.139573010e-07f, -1.138982680e-07f, -1.138390509e-07f, -1.137796497e-07f, -1.137200646e-07f, -1.136602958e-07f, -1.136003434e-07f, -1.135402075e-07f,
+-1.134798884e-07f, -1.134193861e-07f, -1.133587009e-07f, -1.132978329e-07f, -1.132367821e-07f, -1.131755489e-07f, -1.131141332e-07f, -1.130525354e-07f, -1.129907555e-07f, -1.129287936e-07f,
+-1.128666501e-07f, -1.128043249e-07f, -1.127418182e-07f, -1.126791303e-07f, -1.126162612e-07f, -1.125532111e-07f, -1.124899802e-07f, -1.124265686e-07f, -1.123629765e-07f, -1.122992040e-07f,
+-1.122352514e-07f, -1.121711186e-07f, -1.121068060e-07f, -1.120423136e-07f, -1.119776417e-07f, -1.119127903e-07f, -1.118477597e-07f, -1.117825500e-07f, -1.117171613e-07f, -1.116515938e-07f,
+-1.115858477e-07f, -1.115199231e-07f, -1.114538202e-07f, -1.113875392e-07f, -1.113210801e-07f, -1.112544433e-07f, -1.111876287e-07f, -1.111206367e-07f, -1.110534673e-07f, -1.109861207e-07f,
+-1.109185971e-07f, -1.108508966e-07f, -1.107830195e-07f, -1.107149658e-07f, -1.106467357e-07f, -1.105783294e-07f, -1.105097471e-07f, -1.104409889e-07f, -1.103720549e-07f, -1.103029454e-07f,
+-1.102336605e-07f, -1.101642004e-07f, -1.100945653e-07f, -1.100247552e-07f, -1.099547704e-07f, -1.098846110e-07f, -1.098142772e-07f, -1.097437692e-07f, -1.096730872e-07f, -1.096022312e-07f,
+-1.095312015e-07f, -1.094599983e-07f, -1.093886216e-07f, -1.093170717e-07f, -1.092453488e-07f, -1.091734530e-07f, -1.091013844e-07f, -1.090291433e-07f, -1.089567298e-07f, -1.088841441e-07f,
+-1.088113863e-07f, -1.087384567e-07f, -1.086653554e-07f, -1.085920825e-07f, -1.085186383e-07f, -1.084450228e-07f, -1.083712364e-07f, -1.082972791e-07f, -1.082231511e-07f, -1.081488527e-07f,
+-1.080743838e-07f, -1.079997449e-07f, -1.079249359e-07f, -1.078499571e-07f, -1.077748087e-07f, -1.076994908e-07f, -1.076240037e-07f, -1.075483474e-07f, -1.074725221e-07f, -1.073965281e-07f,
+-1.073203655e-07f, -1.072440345e-07f, -1.071675352e-07f, -1.070908679e-07f, -1.070140327e-07f, -1.069370297e-07f, -1.068598592e-07f, -1.067825214e-07f, -1.067050163e-07f, -1.066273443e-07f,
+-1.065495054e-07f, -1.064714999e-07f, -1.063933279e-07f, -1.063149896e-07f, -1.062364852e-07f, -1.061578148e-07f, -1.060789787e-07f, -1.059999770e-07f, -1.059208098e-07f, -1.058414775e-07f,
+-1.057619801e-07f, -1.056823179e-07f, -1.056024910e-07f, -1.055224995e-07f, -1.054423438e-07f, -1.053620239e-07f, -1.052815400e-07f, -1.052008924e-07f, -1.051200812e-07f, -1.050391066e-07f,
+-1.049579687e-07f, -1.048766678e-07f, -1.047952040e-07f, -1.047135775e-07f, -1.046317886e-07f, -1.045498373e-07f, -1.044677239e-07f, -1.043854485e-07f, -1.043030114e-07f, -1.042204127e-07f,
+-1.041376526e-07f, -1.040547313e-07f, -1.039716490e-07f, -1.038884058e-07f, -1.038050020e-07f, -1.037214377e-07f, -1.036377132e-07f, -1.035538285e-07f, -1.034697840e-07f, -1.033855797e-07f,
+-1.033012159e-07f, -1.032166927e-07f, -1.031320104e-07f, -1.030471691e-07f, -1.029621690e-07f, -1.028770103e-07f, -1.027916933e-07f, -1.027062180e-07f, -1.026205846e-07f, -1.025347935e-07f,
+-1.024488447e-07f, -1.023627384e-07f, -1.022764749e-07f, -1.021900543e-07f, -1.021034768e-07f, -1.020167426e-07f, -1.019298518e-07f, -1.018428048e-07f, -1.017556017e-07f, -1.016682426e-07f,
+-1.015807277e-07f, -1.014930574e-07f, -1.014052316e-07f, -1.013172507e-07f, -1.012291149e-07f, -1.011408242e-07f, -1.010523790e-07f, -1.009637793e-07f, -1.008750255e-07f, -1.007861176e-07f,
+-1.006970560e-07f, -1.006078407e-07f, -1.005184720e-07f, -1.004289501e-07f, -1.003392751e-07f, -1.002494473e-07f, -1.001594669e-07f, -1.000693340e-07f, -9.997904886e-08f, -9.988861166e-08f,
+-9.979802260e-08f, -9.970728187e-08f, -9.961638968e-08f, -9.952534622e-08f, -9.943415168e-08f, -9.934280627e-08f, -9.925131018e-08f, -9.915966360e-08f, -9.906786675e-08f, -9.897591981e-08f,
+-9.888382298e-08f, -9.879157647e-08f, -9.869918046e-08f, -9.860663517e-08f, -9.851394078e-08f, -9.842109751e-08f, -9.832810554e-08f, -9.823496507e-08f, -9.814167632e-08f, -9.804823948e-08f,
+-9.795465474e-08f, -9.786092231e-08f, -9.776704239e-08f, -9.767301519e-08f, -9.757884089e-08f, -9.748451971e-08f, -9.739005185e-08f, -9.729543750e-08f, -9.720067688e-08f, -9.710577017e-08f,
+-9.701071759e-08f, -9.691551934e-08f, -9.682017562e-08f, -9.672468663e-08f, -9.662905258e-08f, -9.653327367e-08f, -9.643735011e-08f, -9.634128209e-08f, -9.624506983e-08f, -9.614871352e-08f,
+-9.605221338e-08f, -9.595556960e-08f, -9.585878239e-08f, -9.576185196e-08f, -9.566477851e-08f, -9.556756225e-08f, -9.547020338e-08f, -9.537270212e-08f, -9.527505865e-08f, -9.517727320e-08f,
+-9.507934597e-08f, -9.498127717e-08f, -9.488306699e-08f, -9.478471566e-08f, -9.468622337e-08f, -9.458759034e-08f, -9.448881677e-08f, -9.438990287e-08f, -9.429084885e-08f, -9.419165492e-08f,
+-9.409232128e-08f, -9.399284815e-08f, -9.389323573e-08f, -9.379348423e-08f, -9.369359386e-08f, -9.359356484e-08f, -9.349339737e-08f, -9.339309165e-08f, -9.329264791e-08f, -9.319206635e-08f,
+-9.309134718e-08f, -9.299049062e-08f, -9.288949686e-08f, -9.278836613e-08f, -9.268709864e-08f, -9.258569460e-08f, -9.248415421e-08f, -9.238247769e-08f, -9.228066526e-08f, -9.217871712e-08f,
+-9.207663348e-08f, -9.197441457e-08f, -9.187206059e-08f, -9.176957175e-08f, -9.166694828e-08f, -9.156419037e-08f, -9.146129825e-08f, -9.135827213e-08f, -9.125511222e-08f, -9.115181873e-08f,
+-9.104839189e-08f, -9.094483190e-08f, -9.084113899e-08f, -9.073731335e-08f, -9.063335522e-08f, -9.052926480e-08f, -9.042504231e-08f, -9.032068796e-08f, -9.021620198e-08f, -9.011158457e-08f,
+-9.000683595e-08f, -8.990195635e-08f, -8.979694597e-08f, -8.969180503e-08f, -8.958653374e-08f, -8.948113234e-08f, -8.937560102e-08f, -8.926994002e-08f, -8.916414954e-08f, -8.905822981e-08f,
+-8.895218103e-08f, -8.884600344e-08f, -8.873969725e-08f, -8.863326267e-08f, -8.852669993e-08f, -8.842000924e-08f, -8.831319082e-08f, -8.820624490e-08f, -8.809917168e-08f, -8.799197139e-08f,
+-8.788464426e-08f, -8.777719049e-08f, -8.766961031e-08f, -8.756190393e-08f, -8.745407159e-08f, -8.734611350e-08f, -8.723802987e-08f, -8.712982093e-08f, -8.702148691e-08f, -8.691302801e-08f,
+-8.680444447e-08f, -8.669573650e-08f, -8.658690433e-08f, -8.647794817e-08f, -8.636886826e-08f, -8.625966480e-08f, -8.615033803e-08f, -8.604088816e-08f, -8.593131542e-08f, -8.582162002e-08f,
+-8.571180221e-08f, -8.560186218e-08f, -8.549180018e-08f, -8.538161641e-08f, -8.527131112e-08f, -8.516088451e-08f, -8.505033681e-08f, -8.493966825e-08f, -8.482887905e-08f, -8.471796943e-08f,
+-8.460693963e-08f, -8.449578985e-08f, -8.438452034e-08f, -8.427313130e-08f, -8.416162298e-08f, -8.404999558e-08f, -8.393824935e-08f, -8.382638449e-08f, -8.371440125e-08f, -8.360229984e-08f,
+-8.349008049e-08f, -8.337774343e-08f, -8.326528888e-08f, -8.315271707e-08f, -8.304002822e-08f, -8.292722257e-08f, -8.281430033e-08f, -8.270126174e-08f, -8.258810703e-08f, -8.247483641e-08f,
+-8.236145012e-08f, -8.224794838e-08f, -8.213433143e-08f, -8.202059948e-08f, -8.190675278e-08f, -8.179279154e-08f, -8.167871599e-08f, -8.156452637e-08f, -8.145022289e-08f, -8.133580580e-08f,
+-8.122127531e-08f, -8.110663167e-08f, -8.099187509e-08f, -8.087700580e-08f, -8.076202404e-08f, -8.064693004e-08f, -8.053172401e-08f, -8.041640621e-08f, -8.030097684e-08f, -8.018543615e-08f,
+-8.006978437e-08f, -7.995402171e-08f, -7.983814843e-08f, -7.972216474e-08f, -7.960607087e-08f, -7.948986706e-08f, -7.937355354e-08f, -7.925713054e-08f, -7.914059829e-08f, -7.902395703e-08f,
+-7.890720697e-08f, -7.879034836e-08f, -7.867338143e-08f, -7.855630641e-08f, -7.843912353e-08f, -7.832183302e-08f, -7.820443511e-08f, -7.808693005e-08f, -7.796931805e-08f, -7.785159936e-08f,
+-7.773377421e-08f, -7.761584282e-08f, -7.749780544e-08f, -7.737966229e-08f, -7.726141362e-08f, -7.714305964e-08f, -7.702460060e-08f, -7.690603673e-08f, -7.678736827e-08f, -7.666859544e-08f,
+-7.654971848e-08f, -7.643073763e-08f, -7.631165313e-08f, -7.619246519e-08f, -7.607317407e-08f, -7.595377999e-08f, -7.583428319e-08f, -7.571468391e-08f, -7.559498237e-08f, -7.547517882e-08f,
+-7.535527349e-08f, -7.523526662e-08f, -7.511515843e-08f, -7.499494918e-08f, -7.487463908e-08f, -7.475422839e-08f, -7.463371733e-08f, -7.451310614e-08f, -7.439239506e-08f, -7.427158432e-08f,
+-7.415067417e-08f, -7.402966483e-08f, -7.390855654e-08f, -7.378734954e-08f, -7.366604408e-08f, -7.354464038e-08f, -7.342313868e-08f, -7.330153921e-08f, -7.317984223e-08f, -7.305804796e-08f,
+-7.293615665e-08f, -7.281416852e-08f, -7.269208382e-08f, -7.256990279e-08f, -7.244762566e-08f, -7.232525267e-08f, -7.220278407e-08f, -7.208022008e-08f, -7.195756095e-08f, -7.183480692e-08f,
+-7.171195822e-08f, -7.158901510e-08f, -7.146597779e-08f, -7.134284653e-08f, -7.121962156e-08f, -7.109630312e-08f, -7.097289146e-08f, -7.084938680e-08f, -7.072578939e-08f, -7.060209948e-08f,
+-7.047831729e-08f, -7.035444307e-08f, -7.023047705e-08f, -7.010641949e-08f, -6.998227062e-08f, -6.985803067e-08f, -6.973369990e-08f, -6.960927853e-08f, -6.948476682e-08f, -6.936016500e-08f,
+-6.923547331e-08f, -6.911069199e-08f, -6.898582129e-08f, -6.886086145e-08f, -6.873581270e-08f, -6.861067529e-08f, -6.848544946e-08f, -6.836013545e-08f, -6.823473351e-08f, -6.810924386e-08f,
+-6.798366677e-08f, -6.785800246e-08f, -6.773225119e-08f, -6.760641318e-08f, -6.748048869e-08f, -6.735447796e-08f, -6.722838122e-08f, -6.710219873e-08f, -6.697593072e-08f, -6.684957744e-08f,
+-6.672313913e-08f, -6.659661602e-08f, -6.647000838e-08f, -6.634331643e-08f, -6.621654042e-08f, -6.608968060e-08f, -6.596273721e-08f, -6.583571048e-08f, -6.570860067e-08f, -6.558140802e-08f,
+-6.545413276e-08f, -6.532677516e-08f, -6.519933544e-08f, -6.507181385e-08f, -6.494421064e-08f, -6.481652605e-08f, -6.468876033e-08f, -6.456091371e-08f, -6.443298645e-08f, -6.430497878e-08f,
+-6.417689096e-08f, -6.404872322e-08f, -6.392047581e-08f, -6.379214898e-08f, -6.366374296e-08f, -6.353525802e-08f, -6.340669438e-08f, -6.327805229e-08f, -6.314933201e-08f, -6.302053377e-08f,
+-6.289165782e-08f, -6.276270440e-08f, -6.263367377e-08f, -6.250456616e-08f, -6.237538182e-08f, -6.224612100e-08f, -6.211678394e-08f, -6.198737089e-08f, -6.185788210e-08f, -6.172831780e-08f,
+-6.159867825e-08f, -6.146896369e-08f, -6.133917437e-08f, -6.120931053e-08f, -6.107937243e-08f, -6.094936029e-08f, -6.081927439e-08f, -6.068911495e-08f, -6.055888222e-08f, -6.042857646e-08f,
+-6.029819791e-08f, -6.016774681e-08f, -6.003722342e-08f, -5.990662797e-08f, -5.977596072e-08f, -5.964522191e-08f, -5.951441179e-08f, -5.938353061e-08f, -5.925257861e-08f, -5.912155605e-08f,
+-5.899046316e-08f, -5.885930019e-08f, -5.872806740e-08f, -5.859676503e-08f, -5.846539333e-08f, -5.833395254e-08f, -5.820244292e-08f, -5.807086471e-08f, -5.793921815e-08f, -5.780750350e-08f,
+-5.767572101e-08f, -5.754387092e-08f, -5.741195348e-08f, -5.727996893e-08f, -5.714791753e-08f, -5.701579953e-08f, -5.688361517e-08f, -5.675136469e-08f, -5.661904836e-08f, -5.648666641e-08f,
+-5.635421910e-08f, -5.622170668e-08f, -5.608912938e-08f, -5.595648747e-08f, -5.582378119e-08f, -5.569101078e-08f, -5.555817651e-08f, -5.542527860e-08f, -5.529231733e-08f, -5.515929292e-08f,
+-5.502620564e-08f, -5.489305573e-08f, -5.475984344e-08f, -5.462656902e-08f, -5.449323272e-08f, -5.435983478e-08f, -5.422637546e-08f, -5.409285501e-08f, -5.395927368e-08f, -5.382563170e-08f,
+-5.369192935e-08f, -5.355816685e-08f, -5.342434447e-08f, -5.329046245e-08f, -5.315652104e-08f, -5.302252049e-08f, -5.288846106e-08f, -5.275434298e-08f, -5.262016652e-08f, -5.248593192e-08f,
+-5.235163942e-08f, -5.221728929e-08f, -5.208288176e-08f, -5.194841710e-08f, -5.181389554e-08f, -5.167931735e-08f, -5.154468276e-08f, -5.140999203e-08f, -5.127524542e-08f, -5.114044316e-08f,
+-5.100558551e-08f, -5.087067272e-08f, -5.073570504e-08f, -5.060068273e-08f, -5.046560602e-08f, -5.033047518e-08f, -5.019529044e-08f, -5.006005207e-08f, -4.992476031e-08f, -4.978941542e-08f,
+-4.965401763e-08f, -4.951856722e-08f, -4.938306441e-08f, -4.924750947e-08f, -4.911190265e-08f, -4.897624419e-08f, -4.884053435e-08f, -4.870477337e-08f, -4.856896152e-08f, -4.843309903e-08f,
+-4.829718617e-08f, -4.816122317e-08f, -4.802521030e-08f, -4.788914779e-08f, -4.775303591e-08f, -4.761687491e-08f, -4.748066503e-08f, -4.734440652e-08f, -4.720809964e-08f, -4.707174464e-08f,
+-4.693534177e-08f, -4.679889128e-08f, -4.666239342e-08f, -4.652584844e-08f, -4.638925660e-08f, -4.625261813e-08f, -4.611593331e-08f, -4.597920237e-08f, -4.584242556e-08f, -4.570560315e-08f,
+-4.556873538e-08f, -4.543182249e-08f, -4.529486475e-08f, -4.515786241e-08f, -4.502081571e-08f, -4.488372490e-08f, -4.474659024e-08f, -4.460941198e-08f, -4.447219037e-08f, -4.433492566e-08f,
+-4.419761811e-08f, -4.406026796e-08f, -4.392287546e-08f, -4.378544087e-08f, -4.364796444e-08f, -4.351044642e-08f, -4.337288706e-08f, -4.323528662e-08f, -4.309764533e-08f, -4.295996347e-08f,
+-4.282224127e-08f, -4.268447898e-08f, -4.254667687e-08f, -4.240883518e-08f, -4.227095416e-08f, -4.213303407e-08f, -4.199507515e-08f, -4.185707765e-08f, -4.171904184e-08f, -4.158096796e-08f,
+-4.144285626e-08f, -4.130470699e-08f, -4.116652041e-08f, -4.102829676e-08f, -4.089003630e-08f, -4.075173928e-08f, -4.061340595e-08f, -4.047503657e-08f, -4.033663137e-08f, -4.019819063e-08f,
+-4.005971458e-08f, -3.992120347e-08f, -3.978265757e-08f, -3.964407712e-08f, -3.950546237e-08f, -3.936681358e-08f, -3.922813100e-08f, -3.908941487e-08f, -3.895066545e-08f, -3.881188299e-08f,
+-3.867306774e-08f, -3.853421996e-08f, -3.839533989e-08f, -3.825642778e-08f, -3.811748390e-08f, -3.797850848e-08f, -3.783950179e-08f, -3.770046407e-08f, -3.756139557e-08f, -3.742229655e-08f,
+-3.728316725e-08f, -3.714400793e-08f, -3.700481884e-08f, -3.686560024e-08f, -3.672635236e-08f, -3.658707547e-08f, -3.644776981e-08f, -3.630843564e-08f, -3.616907321e-08f, -3.602968276e-08f,
+-3.589026456e-08f, -3.575081885e-08f, -3.561134588e-08f, -3.547184590e-08f, -3.533231917e-08f, -3.519276594e-08f, -3.505318645e-08f, -3.491358096e-08f, -3.477394973e-08f, -3.463429299e-08f,
+-3.449461101e-08f, -3.435490403e-08f, -3.421517230e-08f, -3.407541608e-08f, -3.393563562e-08f, -3.379583116e-08f, -3.365600297e-08f, -3.351615128e-08f, -3.337627635e-08f, -3.323637844e-08f,
+-3.309645779e-08f, -3.295651465e-08f, -3.281654928e-08f, -3.267656192e-08f, -3.253655283e-08f, -3.239652225e-08f, -3.225647045e-08f, -3.211639766e-08f, -3.197630414e-08f, -3.183619014e-08f,
+-3.169605591e-08f, -3.155590171e-08f, -3.141572777e-08f, -3.127553436e-08f, -3.113532172e-08f, -3.099509011e-08f, -3.085483977e-08f, -3.071457095e-08f, -3.057428391e-08f, -3.043397889e-08f,
+-3.029365615e-08f, -3.015331594e-08f, -3.001295850e-08f, -2.987258409e-08f, -2.973219296e-08f, -2.959178536e-08f, -2.945136153e-08f, -2.931092173e-08f, -2.917046621e-08f, -2.902999522e-08f,
+-2.888950900e-08f, -2.874900782e-08f, -2.860849191e-08f, -2.846796153e-08f, -2.832741692e-08f, -2.818685835e-08f, -2.804628605e-08f, -2.790570028e-08f, -2.776510129e-08f, -2.762448932e-08f,
+-2.748386463e-08f, -2.734322747e-08f, -2.720257808e-08f, -2.706191672e-08f, -2.692124363e-08f, -2.678055907e-08f, -2.663986328e-08f, -2.649915652e-08f, -2.635843902e-08f, -2.621771105e-08f,
+-2.607697285e-08f, -2.593622467e-08f, -2.579546676e-08f, -2.565469937e-08f, -2.551392274e-08f, -2.537313714e-08f, -2.523234279e-08f, -2.509153997e-08f, -2.495072890e-08f, -2.480990985e-08f,
+-2.466908306e-08f, -2.452824878e-08f, -2.438740726e-08f, -2.424655874e-08f, -2.410570348e-08f, -2.396484173e-08f, -2.382397372e-08f, -2.368309972e-08f, -2.354221997e-08f, -2.340133471e-08f,
+-2.326044421e-08f, -2.311954869e-08f, -2.297864842e-08f, -2.283774364e-08f, -2.269683460e-08f, -2.255592155e-08f, -2.241500473e-08f, -2.227408439e-08f, -2.213316078e-08f, -2.199223415e-08f,
+-2.185130475e-08f, -2.171037282e-08f, -2.156943861e-08f, -2.142850237e-08f, -2.128756435e-08f, -2.114662479e-08f, -2.100568394e-08f, -2.086474205e-08f, -2.072379937e-08f, -2.058285614e-08f,
+-2.044191261e-08f, -2.030096903e-08f, -2.016002564e-08f, -2.001908269e-08f, -1.987814043e-08f, -1.973719910e-08f, -1.959625896e-08f, -1.945532024e-08f, -1.931438320e-08f, -1.917344808e-08f,
+-1.903251513e-08f, -1.889158459e-08f, -1.875065671e-08f, -1.860973174e-08f, -1.846880992e-08f, -1.832789151e-08f, -1.818697673e-08f, -1.804606585e-08f, -1.790515911e-08f, -1.776425675e-08f,
+-1.762335902e-08f, -1.748246617e-08f, -1.734157843e-08f, -1.720069606e-08f, -1.705981931e-08f, -1.691894841e-08f, -1.677808361e-08f, -1.663722516e-08f, -1.649637330e-08f, -1.635552829e-08f,
+-1.621469035e-08f, -1.607385975e-08f, -1.593303672e-08f, -1.579222150e-08f, -1.565141435e-08f, -1.551061551e-08f, -1.536982522e-08f, -1.522904373e-08f, -1.508827128e-08f, -1.494750811e-08f,
+-1.480675448e-08f, -1.466601062e-08f, -1.452527678e-08f, -1.438455320e-08f, -1.424384013e-08f, -1.410313781e-08f, -1.396244648e-08f, -1.382176640e-08f, -1.368109779e-08f, -1.354044091e-08f,
+-1.339979601e-08f, -1.325916331e-08f, -1.311854307e-08f, -1.297793553e-08f, -1.283734093e-08f, -1.269675952e-08f, -1.255619154e-08f, -1.241563723e-08f, -1.227509683e-08f, -1.213457060e-08f,
+-1.199405876e-08f, -1.185356156e-08f, -1.171307925e-08f, -1.157261207e-08f, -1.143216026e-08f, -1.129172406e-08f, -1.115130372e-08f, -1.101089947e-08f, -1.087051156e-08f, -1.073014023e-08f,
+-1.058978573e-08f, -1.044944829e-08f, -1.030912815e-08f, -1.016882556e-08f, -1.002854076e-08f, -9.888273994e-09f, -9.748025497e-09f, -9.607795512e-09f, -9.467584280e-09f, -9.327392044e-09f,
+-9.187219043e-09f, -9.047065518e-09f, -8.906931711e-09f, -8.766817861e-09f, -8.626724209e-09f, -8.486650996e-09f, -8.346598462e-09f, -8.206566848e-09f, -8.066556392e-09f, -7.926567336e-09f,
+-7.786599919e-09f, -7.646654382e-09f, -7.506730963e-09f, -7.366829902e-09f, -7.226951440e-09f, -7.087095815e-09f, -6.947263267e-09f, -6.807454035e-09f, -6.667668358e-09f, -6.527906475e-09f,
+-6.388168625e-09f, -6.248455047e-09f, -6.108765980e-09f, -5.969101662e-09f, -5.829462332e-09f, -5.689848228e-09f, -5.550259589e-09f, -5.410696652e-09f, -5.271159656e-09f, -5.131648839e-09f,
+-4.992164439e-09f, -4.852706693e-09f, -4.713275839e-09f, -4.573872114e-09f, -4.434495757e-09f, -4.295147005e-09f, -4.155826094e-09f, -4.016533262e-09f, -3.877268746e-09f, -3.738032782e-09f,
+-3.598825609e-09f, -3.459647461e-09f, -3.320498577e-09f, -3.181379192e-09f, -3.042289542e-09f, -2.903229864e-09f, -2.764200395e-09f, -2.625201370e-09f, -2.486233024e-09f, -2.347295595e-09f,
+-2.208389317e-09f, -2.069514426e-09f, -1.930671157e-09f, -1.791859747e-09f, -1.653080429e-09f, -1.514333440e-09f, -1.375619013e-09f, -1.236937385e-09f, -1.098288790e-09f, -9.596734617e-10f,
+-8.210916357e-10f, -6.825435460e-10f, -5.440294270e-10f, -4.055495128e-10f, -2.671040375e-10f, -1.286932349e-10f, 9.682661028e-12f, 1.480234167e-10f, 2.863287986e-10f, 4.245985731e-10f,
+5.628325071e-10f, 7.010303672e-10f, 8.391919204e-10f, 9.773169338e-10f, 1.115405175e-09f, 1.253456410e-09f, 1.391470407e-09f, 1.529446934e-09f, 1.667385758e-09f, 1.805286647e-09f,
+1.943149369e-09f, 2.080973692e-09f, 2.218759385e-09f, 2.356506214e-09f, 2.494213950e-09f, 2.631882359e-09f, 2.769511212e-09f, 2.907100277e-09f, 3.044649323e-09f, 3.182158118e-09f,
+3.319626432e-09f, 3.457054035e-09f, 3.594440696e-09f, 3.731786184e-09f, 3.869090269e-09f, 4.006352721e-09f, 4.143573310e-09f, 4.280751805e-09f, 4.417887978e-09f, 4.554981599e-09f,
+4.692032438e-09f, 4.829040265e-09f, 4.966004852e-09f, 5.102925970e-09f, 5.239803388e-09f, 5.376636880e-09f, 5.513426215e-09f, 5.650171166e-09f, 5.786871503e-09f, 5.923527000e-09f,
+6.060137426e-09f, 6.196702555e-09f, 6.333222159e-09f, 6.469696010e-09f, 6.606123879e-09f, 6.742505541e-09f, 6.878840767e-09f, 7.015129330e-09f, 7.151371004e-09f, 7.287565561e-09f,
+7.423712774e-09f, 7.559812417e-09f, 7.695864264e-09f, 7.831868088e-09f, 7.967823663e-09f, 8.103730762e-09f, 8.239589161e-09f, 8.375398633e-09f, 8.511158952e-09f, 8.646869893e-09f,
+8.782531231e-09f, 8.918142740e-09f, 9.053704196e-09f, 9.189215373e-09f, 9.324676047e-09f, 9.460085993e-09f, 9.595444987e-09f, 9.730752804e-09f, 9.866009221e-09f, 1.000121401e-08f,
+1.013636695e-08f, 1.027146782e-08f, 1.040651640e-08f, 1.054151245e-08f, 1.067645576e-08f, 1.081134611e-08f, 1.094618327e-08f, 1.108096701e-08f, 1.121569712e-08f, 1.135037338e-08f,
+1.148499555e-08f, 1.161956342e-08f, 1.175407677e-08f, 1.188853537e-08f, 1.202293901e-08f, 1.215728746e-08f, 1.229158049e-08f, 1.242581789e-08f, 1.255999945e-08f, 1.269412492e-08f,
+1.282819410e-08f, 1.296220677e-08f, 1.309616270e-08f, 1.323006167e-08f, 1.336390347e-08f, 1.349768787e-08f, 1.363141465e-08f, 1.376508360e-08f, 1.389869449e-08f, 1.403224710e-08f,
+1.416574122e-08f, 1.429917662e-08f, 1.443255309e-08f, 1.456587041e-08f, 1.469912836e-08f, 1.483232672e-08f, 1.496546527e-08f, 1.509854380e-08f, 1.523156208e-08f, 1.536451991e-08f,
+1.549741705e-08f, 1.563025329e-08f, 1.576302843e-08f, 1.589574223e-08f, 1.602839448e-08f, 1.616098496e-08f, 1.629351347e-08f, 1.642597977e-08f, 1.655838367e-08f, 1.669072493e-08f,
+1.682300334e-08f, 1.695521869e-08f, 1.708737076e-08f, 1.721945933e-08f, 1.735148420e-08f, 1.748344514e-08f, 1.761534194e-08f, 1.774717439e-08f, 1.787894227e-08f, 1.801064536e-08f,
+1.814228345e-08f, 1.827385633e-08f, 1.840536378e-08f, 1.853680560e-08f, 1.866818156e-08f, 1.879949144e-08f, 1.893073505e-08f, 1.906191217e-08f, 1.919302257e-08f, 1.932406606e-08f,
+1.945504241e-08f, 1.958595141e-08f, 1.971679286e-08f, 1.984756654e-08f, 1.997827223e-08f, 2.010890973e-08f, 2.023947883e-08f, 2.036997931e-08f, 2.050041095e-08f, 2.063077356e-08f,
+2.076106692e-08f, 2.089129082e-08f, 2.102144504e-08f, 2.115152938e-08f, 2.128154363e-08f, 2.141148758e-08f, 2.154136101e-08f, 2.167116372e-08f, 2.180089550e-08f, 2.193055613e-08f,
+2.206014542e-08f, 2.218966314e-08f, 2.231910910e-08f, 2.244848308e-08f, 2.257778488e-08f, 2.270701428e-08f, 2.283617107e-08f, 2.296525506e-08f, 2.309426603e-08f, 2.322320378e-08f,
+2.335206809e-08f, 2.348085876e-08f, 2.360957559e-08f, 2.373821836e-08f, 2.386678687e-08f, 2.399528092e-08f, 2.412370029e-08f, 2.425204478e-08f, 2.438031418e-08f, 2.450850830e-08f,
+2.463662692e-08f, 2.476466983e-08f, 2.489263684e-08f, 2.502052774e-08f, 2.514834232e-08f, 2.527608038e-08f, 2.540374171e-08f, 2.553132611e-08f, 2.565883338e-08f, 2.578626331e-08f,
+2.591361569e-08f, 2.604089033e-08f, 2.616808703e-08f, 2.629520557e-08f, 2.642224575e-08f, 2.654920738e-08f, 2.667609025e-08f, 2.680289415e-08f, 2.692961889e-08f, 2.705626426e-08f,
+2.718283007e-08f, 2.730931610e-08f, 2.743572217e-08f, 2.756204806e-08f, 2.768829357e-08f, 2.781445851e-08f, 2.794054268e-08f, 2.806654587e-08f, 2.819246788e-08f, 2.831830852e-08f,
+2.844406758e-08f, 2.856974486e-08f, 2.869534017e-08f, 2.882085331e-08f, 2.894628407e-08f, 2.907163226e-08f, 2.919689768e-08f, 2.932208013e-08f, 2.944717941e-08f, 2.957219532e-08f,
+2.969712767e-08f, 2.982197626e-08f, 2.994674089e-08f, 3.007142136e-08f, 3.019601748e-08f, 3.032052904e-08f, 3.044495586e-08f, 3.056929774e-08f, 3.069355447e-08f, 3.081772587e-08f,
+3.094181174e-08f, 3.106581188e-08f, 3.118972609e-08f, 3.131355419e-08f, 3.143729597e-08f, 3.156095124e-08f, 3.168451981e-08f, 3.180800148e-08f, 3.193139605e-08f, 3.205470334e-08f,
+3.217792315e-08f, 3.230105529e-08f, 3.242409955e-08f, 3.254705576e-08f, 3.266992371e-08f, 3.279270321e-08f, 3.291539407e-08f, 3.303799611e-08f, 3.316050911e-08f, 3.328293290e-08f,
+3.340526728e-08f, 3.352751206e-08f, 3.364966705e-08f, 3.377173205e-08f, 3.389370688e-08f, 3.401559135e-08f, 3.413738526e-08f, 3.425908842e-08f, 3.438070065e-08f, 3.450222175e-08f,
+3.462365154e-08f, 3.474498982e-08f, 3.486623640e-08f, 3.498739110e-08f, 3.510845373e-08f, 3.522942409e-08f, 3.535030201e-08f, 3.547108728e-08f, 3.559177973e-08f, 3.571237916e-08f,
+3.583288539e-08f, 3.595329823e-08f, 3.607361749e-08f, 3.619384299e-08f, 3.631397454e-08f, 3.643401195e-08f, 3.655395503e-08f, 3.667380361e-08f, 3.679355748e-08f, 3.691321648e-08f,
+3.703278040e-08f, 3.715224908e-08f, 3.727162231e-08f, 3.739089992e-08f, 3.751008173e-08f, 3.762916754e-08f, 3.774815717e-08f, 3.786705044e-08f, 3.798584717e-08f, 3.810454717e-08f,
+3.822315026e-08f, 3.834165625e-08f, 3.846006497e-08f, 3.857837622e-08f, 3.869658983e-08f, 3.881470561e-08f, 3.893272339e-08f, 3.905064298e-08f, 3.916846419e-08f, 3.928618686e-08f,
+3.940381078e-08f, 3.952133580e-08f, 3.963876171e-08f, 3.975608836e-08f, 3.987331554e-08f, 3.999044309e-08f, 4.010747082e-08f, 4.022439855e-08f, 4.034122611e-08f, 4.045795331e-08f,
+4.057457998e-08f, 4.069110594e-08f, 4.080753100e-08f, 4.092385499e-08f, 4.104007774e-08f, 4.115619906e-08f, 4.127221877e-08f, 4.138813671e-08f, 4.150395268e-08f, 4.161966653e-08f,
+4.173527805e-08f, 4.185078709e-08f, 4.196619347e-08f, 4.208149700e-08f, 4.219669752e-08f, 4.231179484e-08f, 4.242678879e-08f, 4.254167921e-08f, 4.265646590e-08f, 4.277114870e-08f,
+4.288572743e-08f, 4.300020192e-08f, 4.311457200e-08f, 4.322883748e-08f, 4.334299820e-08f, 4.345705398e-08f, 4.357100466e-08f, 4.368485005e-08f, 4.379858998e-08f, 4.391222429e-08f,
+4.402575280e-08f, 4.413917533e-08f, 4.425249172e-08f, 4.436570179e-08f, 4.447880538e-08f, 4.459180231e-08f, 4.470469241e-08f, 4.481747551e-08f, 4.493015144e-08f, 4.504272003e-08f,
+4.515518111e-08f, 4.526753451e-08f, 4.537978006e-08f, 4.549191759e-08f, 4.560394693e-08f, 4.571586792e-08f, 4.582768038e-08f, 4.593938415e-08f, 4.605097906e-08f, 4.616246494e-08f,
+4.627384163e-08f, 4.638510894e-08f, 4.649626673e-08f, 4.660731482e-08f, 4.671825305e-08f, 4.682908124e-08f, 4.693979924e-08f, 4.705040687e-08f, 4.716090398e-08f, 4.727129039e-08f,
+4.738156594e-08f, 4.749173047e-08f, 4.760178380e-08f, 4.771172579e-08f, 4.782155625e-08f, 4.793127504e-08f, 4.804088197e-08f, 4.815037690e-08f, 4.825975965e-08f, 4.836903007e-08f,
+4.847818799e-08f, 4.858723325e-08f, 4.869616568e-08f, 4.880498513e-08f, 4.891369143e-08f, 4.902228442e-08f, 4.913076394e-08f, 4.923912983e-08f, 4.934738192e-08f, 4.945552006e-08f,
+4.956354409e-08f, 4.967145384e-08f, 4.977924916e-08f, 4.988692988e-08f, 4.999449585e-08f, 5.010194691e-08f, 5.020928289e-08f, 5.031650365e-08f, 5.042360901e-08f, 5.053059883e-08f,
+5.063747294e-08f, 5.074423119e-08f, 5.085087342e-08f, 5.095739947e-08f, 5.106380918e-08f, 5.117010241e-08f, 5.127627898e-08f, 5.138233875e-08f, 5.148828156e-08f, 5.159410726e-08f,
+5.169981568e-08f, 5.180540667e-08f, 5.191088008e-08f, 5.201623575e-08f, 5.212147354e-08f, 5.222659327e-08f, 5.233159481e-08f, 5.243647799e-08f, 5.254124266e-08f, 5.264588867e-08f,
+5.275041587e-08f, 5.285482409e-08f, 5.295911320e-08f, 5.306328304e-08f, 5.316733345e-08f, 5.327126429e-08f, 5.337507540e-08f, 5.347876663e-08f, 5.358233783e-08f, 5.368578885e-08f,
+5.378911954e-08f, 5.389232974e-08f, 5.399541931e-08f, 5.409838810e-08f, 5.420123596e-08f, 5.430396274e-08f, 5.440656829e-08f, 5.450905246e-08f, 5.461141510e-08f, 5.471365606e-08f,
+5.481577520e-08f, 5.491777237e-08f, 5.501964742e-08f, 5.512140020e-08f, 5.522303057e-08f, 5.532453838e-08f, 5.542592348e-08f, 5.552718572e-08f, 5.562832497e-08f, 5.572934107e-08f,
+5.583023388e-08f, 5.593100325e-08f, 5.603164905e-08f, 5.613217111e-08f, 5.623256930e-08f, 5.633284348e-08f, 5.643299350e-08f, 5.653301922e-08f, 5.663292049e-08f, 5.673269717e-08f,
+5.683234911e-08f, 5.693187619e-08f, 5.703127824e-08f, 5.713055513e-08f, 5.722970672e-08f, 5.732873287e-08f, 5.742763342e-08f, 5.752640826e-08f, 5.762505722e-08f, 5.772358018e-08f,
+5.782197699e-08f, 5.792024750e-08f, 5.801839159e-08f, 5.811640911e-08f, 5.821429992e-08f, 5.831206389e-08f, 5.840970086e-08f, 5.850721071e-08f, 5.860459330e-08f, 5.870184849e-08f,
+5.879897614e-08f, 5.889597611e-08f, 5.899284826e-08f, 5.908959247e-08f, 5.918620859e-08f, 5.928269648e-08f, 5.937905601e-08f, 5.947528704e-08f, 5.957138944e-08f, 5.966736307e-08f,
+5.976320780e-08f, 5.985892349e-08f, 5.995451000e-08f, 6.004996721e-08f, 6.014529497e-08f, 6.024049316e-08f, 6.033556164e-08f, 6.043050028e-08f, 6.052530893e-08f, 6.061998748e-08f,
+6.071453579e-08f, 6.080895372e-08f, 6.090324115e-08f, 6.099739794e-08f, 6.109142395e-08f, 6.118531907e-08f, 6.127908315e-08f, 6.137271607e-08f, 6.146621770e-08f, 6.155958790e-08f,
+6.165282655e-08f, 6.174593352e-08f, 6.183890867e-08f, 6.193175188e-08f, 6.202446301e-08f, 6.211704195e-08f, 6.220948856e-08f, 6.230180271e-08f, 6.239398428e-08f, 6.248603314e-08f,
+6.257794915e-08f, 6.266973220e-08f, 6.276138216e-08f, 6.285289890e-08f, 6.294428229e-08f, 6.303553221e-08f, 6.312664853e-08f, 6.321763112e-08f, 6.330847987e-08f, 6.339919464e-08f,
+6.348977532e-08f, 6.358022177e-08f, 6.367053388e-08f, 6.376071151e-08f, 6.385075456e-08f, 6.394066288e-08f, 6.403043636e-08f, 6.412007488e-08f, 6.420957831e-08f, 6.429894654e-08f,
+6.438817943e-08f, 6.447727687e-08f, 6.456623874e-08f, 6.465506492e-08f, 6.474375527e-08f, 6.483230969e-08f, 6.492072806e-08f, 6.500901025e-08f, 6.509715614e-08f, 6.518516562e-08f,
+6.527303855e-08f, 6.536077484e-08f, 6.544837435e-08f, 6.553583697e-08f, 6.562316258e-08f, 6.571035107e-08f, 6.579740230e-08f, 6.588431618e-08f, 6.597109257e-08f, 6.605773137e-08f,
+6.614423245e-08f, 6.623059570e-08f, 6.631682101e-08f, 6.640290826e-08f, 6.648885733e-08f, 6.657466810e-08f, 6.666034047e-08f, 6.674587432e-08f, 6.683126953e-08f, 6.691652599e-08f,
+6.700164359e-08f, 6.708662221e-08f, 6.717146173e-08f, 6.725616205e-08f, 6.734072306e-08f, 6.742514464e-08f, 6.750942667e-08f, 6.759356905e-08f, 6.767757167e-08f, 6.776143441e-08f,
+6.784515716e-08f, 6.792873981e-08f, 6.801218225e-08f, 6.809548438e-08f, 6.817864607e-08f, 6.826166723e-08f, 6.834454773e-08f, 6.842728748e-08f, 6.850988636e-08f, 6.859234427e-08f,
+6.867466109e-08f, 6.875683672e-08f, 6.883887105e-08f, 6.892076398e-08f, 6.900251538e-08f, 6.908412517e-08f, 6.916559323e-08f, 6.924691946e-08f, 6.932810374e-08f, 6.940914598e-08f,
+6.949004606e-08f, 6.957080389e-08f, 6.965141936e-08f, 6.973189236e-08f, 6.981222278e-08f, 6.989241053e-08f, 6.997245550e-08f, 7.005235759e-08f, 7.013211669e-08f, 7.021173270e-08f,
+7.029120552e-08f, 7.037053504e-08f, 7.044972117e-08f, 7.052876379e-08f, 7.060766281e-08f, 7.068641814e-08f, 7.076502965e-08f, 7.084349726e-08f, 7.092182087e-08f, 7.100000037e-08f,
+7.107803567e-08f, 7.115592666e-08f, 7.123367324e-08f, 7.131127533e-08f, 7.138873280e-08f, 7.146604558e-08f, 7.154321356e-08f, 7.162023664e-08f, 7.169711472e-08f, 7.177384771e-08f,
+7.185043551e-08f, 7.192687802e-08f, 7.200317515e-08f, 7.207932680e-08f, 7.215533287e-08f, 7.223119326e-08f, 7.230690789e-08f, 7.238247666e-08f, 7.245789947e-08f, 7.253317622e-08f,
+7.260830683e-08f, 7.268329120e-08f, 7.275812923e-08f, 7.283282083e-08f, 7.290736591e-08f, 7.298176438e-08f, 7.305601614e-08f, 7.313012109e-08f, 7.320407916e-08f, 7.327789024e-08f,
+7.335155424e-08f, 7.342507108e-08f, 7.349844065e-08f, 7.357166288e-08f, 7.364473767e-08f, 7.371766493e-08f, 7.379044457e-08f, 7.386307650e-08f, 7.393556063e-08f, 7.400789688e-08f,
+7.408008514e-08f, 7.415212535e-08f, 7.422401740e-08f, 7.429576120e-08f, 7.436735668e-08f, 7.443880375e-08f, 7.451010231e-08f, 7.458125228e-08f, 7.465225357e-08f, 7.472310610e-08f,
+7.479380978e-08f, 7.486436453e-08f, 7.493477026e-08f, 7.500502688e-08f, 7.507513432e-08f, 7.514509248e-08f, 7.521490128e-08f, 7.528456064e-08f, 7.535407047e-08f, 7.542343069e-08f,
+7.549264122e-08f, 7.556170198e-08f, 7.563061288e-08f, 7.569937384e-08f, 7.576798478e-08f, 7.583644561e-08f, 7.590475626e-08f, 7.597291664e-08f, 7.604092668e-08f, 7.610878628e-08f,
+7.617649538e-08f, 7.624405390e-08f, 7.631146174e-08f, 7.637871884e-08f, 7.644582512e-08f, 7.651278048e-08f, 7.657958487e-08f, 7.664623819e-08f, 7.671274038e-08f, 7.677909135e-08f,
+7.684529102e-08f, 7.691133932e-08f, 7.697723618e-08f, 7.704298151e-08f, 7.710857523e-08f, 7.717401729e-08f, 7.723930758e-08f, 7.730444606e-08f, 7.736943262e-08f, 7.743426721e-08f,
+7.749894975e-08f, 7.756348016e-08f, 7.762785837e-08f, 7.769208431e-08f, 7.775615789e-08f, 7.782007906e-08f, 7.788384774e-08f, 7.794746384e-08f, 7.801092731e-08f, 7.807423807e-08f,
+7.813739605e-08f, 7.820040117e-08f, 7.826325337e-08f, 7.832595258e-08f, 7.838849872e-08f, 7.845089172e-08f, 7.851313152e-08f, 7.857521804e-08f, 7.863715122e-08f, 7.869893099e-08f,
+7.876055727e-08f, 7.882203000e-08f, 7.888334911e-08f, 7.894451453e-08f, 7.900552620e-08f, 7.906638405e-08f, 7.912708801e-08f, 7.918763801e-08f, 7.924803399e-08f, 7.930827589e-08f,
+7.936836362e-08f, 7.942829714e-08f, 7.948807637e-08f, 7.954770125e-08f, 7.960717172e-08f, 7.966648771e-08f, 7.972564915e-08f, 7.978465599e-08f, 7.984350815e-08f, 7.990220558e-08f,
+7.996074821e-08f, 8.001913599e-08f, 8.007736884e-08f, 8.013544670e-08f, 8.019336952e-08f, 8.025113723e-08f, 8.030874977e-08f, 8.036620708e-08f, 8.042350910e-08f, 8.048065577e-08f,
+8.053764703e-08f, 8.059448281e-08f, 8.065116306e-08f, 8.070768773e-08f, 8.076405674e-08f, 8.082027005e-08f, 8.087632759e-08f, 8.093222930e-08f, 8.098797513e-08f, 8.104356503e-08f,
+8.109899892e-08f, 8.115427676e-08f, 8.120939850e-08f, 8.126436406e-08f, 8.131917340e-08f, 8.137382647e-08f, 8.142832319e-08f, 8.148266353e-08f, 8.153684743e-08f, 8.159087482e-08f,
+8.164474567e-08f, 8.169845990e-08f, 8.175201747e-08f, 8.180541833e-08f, 8.185866242e-08f, 8.191174970e-08f, 8.196468009e-08f, 8.201745356e-08f, 8.207007006e-08f, 8.212252952e-08f,
+8.217483191e-08f, 8.222697716e-08f, 8.227896523e-08f, 8.233079607e-08f, 8.238246962e-08f, 8.243398584e-08f, 8.248534467e-08f, 8.253654608e-08f, 8.258759000e-08f, 8.263847639e-08f,
+8.268920520e-08f, 8.273977638e-08f, 8.279018989e-08f, 8.284044568e-08f, 8.289054369e-08f, 8.294048389e-08f, 8.299026622e-08f, 8.303989064e-08f, 8.308935711e-08f, 8.313866557e-08f,
+8.318781598e-08f, 8.323680830e-08f, 8.328564248e-08f, 8.333431848e-08f, 8.338283624e-08f, 8.343119574e-08f, 8.347939692e-08f, 8.352743974e-08f, 8.357532415e-08f, 8.362305012e-08f,
+8.367061760e-08f, 8.371802655e-08f, 8.376527692e-08f, 8.381236868e-08f, 8.385930179e-08f, 8.390607619e-08f, 8.395269185e-08f, 8.399914874e-08f, 8.404544680e-08f, 8.409158600e-08f,
+8.413756630e-08f, 8.418338767e-08f, 8.422905005e-08f, 8.427455341e-08f, 8.431989772e-08f, 8.436508293e-08f, 8.441010901e-08f, 8.445497591e-08f, 8.449968361e-08f, 8.454423206e-08f,
+8.458862123e-08f, 8.463285108e-08f, 8.467692157e-08f, 8.472083267e-08f, 8.476458435e-08f, 8.480817656e-08f, 8.485160927e-08f, 8.489488244e-08f, 8.493799605e-08f, 8.498095006e-08f,
+8.502374443e-08f, 8.506637913e-08f, 8.510885413e-08f, 8.515116939e-08f, 8.519332488e-08f, 8.523532056e-08f, 8.527715642e-08f, 8.531883240e-08f, 8.536034849e-08f, 8.540170465e-08f,
+8.544290084e-08f, 8.548393705e-08f, 8.552481323e-08f, 8.556552936e-08f, 8.560608540e-08f, 8.564648134e-08f, 8.568671713e-08f, 8.572679275e-08f, 8.576670818e-08f, 8.580646337e-08f,
+8.584605831e-08f, 8.588549296e-08f, 8.592476730e-08f, 8.596388130e-08f, 8.600283493e-08f, 8.604162818e-08f, 8.608026100e-08f, 8.611873337e-08f, 8.615704527e-08f, 8.619519668e-08f,
+8.623318756e-08f, 8.627101789e-08f, 8.630868766e-08f, 8.634619682e-08f, 8.638354536e-08f, 8.642073326e-08f, 8.645776048e-08f, 8.649462702e-08f, 8.653133284e-08f, 8.656787792e-08f,
+8.660426224e-08f, 8.664048577e-08f, 8.667654850e-08f, 8.671245041e-08f, 8.674819147e-08f, 8.678377166e-08f, 8.681919095e-08f, 8.685444934e-08f, 8.688954680e-08f, 8.692448331e-08f,
+8.695925885e-08f, 8.699387340e-08f, 8.702832694e-08f, 8.706261946e-08f, 8.709675093e-08f, 8.713072134e-08f, 8.716453067e-08f, 8.719817889e-08f, 8.723166601e-08f, 8.726499199e-08f,
+8.729815682e-08f, 8.733116048e-08f, 8.736400296e-08f, 8.739668425e-08f, 8.742920432e-08f, 8.746156316e-08f, 8.749376076e-08f, 8.752579710e-08f, 8.755767217e-08f, 8.758938595e-08f,
+8.762093843e-08f, 8.765232959e-08f, 8.768355943e-08f, 8.771462793e-08f, 8.774553507e-08f, 8.777628085e-08f, 8.780686525e-08f, 8.783728826e-08f, 8.786754987e-08f, 8.789765007e-08f,
+8.792758885e-08f, 8.795736619e-08f, 8.798698209e-08f, 8.801643653e-08f, 8.804572951e-08f, 8.807486102e-08f, 8.810383104e-08f, 8.813263957e-08f, 8.816128661e-08f, 8.818977213e-08f,
+8.821809614e-08f, 8.824625862e-08f, 8.827425957e-08f, 8.830209898e-08f, 8.832977684e-08f, 8.835729315e-08f, 8.838464790e-08f, 8.841184109e-08f, 8.843887270e-08f, 8.846574274e-08f,
+8.849245120e-08f, 8.851899807e-08f, 8.854538335e-08f, 8.857160703e-08f, 8.859766911e-08f, 8.862356959e-08f, 8.864930847e-08f, 8.867488573e-08f, 8.870030138e-08f, 8.872555541e-08f,
+8.875064782e-08f, 8.877557862e-08f, 8.880034779e-08f, 8.882495534e-08f, 8.884940126e-08f, 8.887368556e-08f, 8.889780823e-08f, 8.892176927e-08f, 8.894556869e-08f, 8.896920648e-08f,
+8.899268265e-08f, 8.901599718e-08f, 8.903915010e-08f, 8.906214139e-08f, 8.908497106e-08f, 8.910763911e-08f, 8.913014554e-08f, 8.915249036e-08f, 8.917467357e-08f, 8.919669516e-08f,
+8.921855515e-08f, 8.924025354e-08f, 8.926179033e-08f, 8.928316553e-08f, 8.930437913e-08f, 8.932543116e-08f, 8.934632160e-08f, 8.936705047e-08f, 8.938761776e-08f, 8.940802350e-08f,
+8.942826768e-08f, 8.944835031e-08f, 8.946827139e-08f, 8.948803094e-08f, 8.950762896e-08f, 8.952706545e-08f, 8.954634043e-08f, 8.956545391e-08f, 8.958440589e-08f, 8.960319638e-08f,
+8.962182539e-08f, 8.964029293e-08f, 8.965859901e-08f, 8.967674364e-08f, 8.969472682e-08f, 8.971254858e-08f, 8.973020891e-08f, 8.974770784e-08f, 8.976504537e-08f, 8.978222151e-08f,
+8.979923628e-08f, 8.981608969e-08f, 8.983278175e-08f, 8.984931246e-08f, 8.986568186e-08f, 8.988188994e-08f, 8.989793673e-08f, 8.991382223e-08f, 8.992954646e-08f, 8.994510944e-08f,
+8.996051117e-08f, 8.997575168e-08f, 8.999083098e-08f, 9.000574908e-08f, 9.002050600e-08f, 9.003510176e-08f, 9.004953637e-08f, 9.006380986e-08f, 9.007792222e-08f, 9.009187349e-08f,
+9.010566368e-08f, 9.011929281e-08f, 9.013276089e-08f, 9.014606795e-08f, 9.015921400e-08f, 9.017219907e-08f, 9.018502316e-08f, 9.019768631e-08f, 9.021018852e-08f, 9.022252982e-08f,
+9.023471024e-08f, 9.024672978e-08f, 9.025858847e-08f, 9.027028634e-08f, 9.028182340e-08f, 9.029319968e-08f, 9.030441519e-08f, 9.031546996e-08f, 9.032636401e-08f, 9.033709737e-08f,
+9.034767005e-08f, 9.035808208e-08f, 9.036833349e-08f, 9.037842429e-08f, 9.038835452e-08f, 9.039812419e-08f, 9.040773333e-08f, 9.041718197e-08f, 9.042647013e-08f, 9.043559784e-08f,
+9.044456511e-08f, 9.045337199e-08f, 9.046201849e-08f, 9.047050464e-08f, 9.047883046e-08f, 9.048699600e-08f, 9.049500126e-08f, 9.050284628e-08f, 9.051053110e-08f, 9.051805572e-08f,
+9.052542019e-08f, 9.053262454e-08f, 9.053966878e-08f, 9.054655296e-08f, 9.055327710e-08f, 9.055984123e-08f, 9.056624538e-08f, 9.057248958e-08f, 9.057857387e-08f, 9.058449827e-08f,
+9.059026281e-08f, 9.059586752e-08f, 9.060131245e-08f, 9.060659761e-08f, 9.061172305e-08f, 9.061668879e-08f, 9.062149487e-08f, 9.062614132e-08f, 9.063062817e-08f, 9.063495546e-08f,
+9.063912322e-08f, 9.064313148e-08f, 9.064698029e-08f, 9.065066967e-08f, 9.065419966e-08f, 9.065757030e-08f, 9.066078162e-08f, 9.066383365e-08f, 9.066672644e-08f, 9.066946002e-08f,
+9.067203442e-08f, 9.067444969e-08f, 9.067670585e-08f, 9.067880296e-08f, 9.068074103e-08f, 9.068252013e-08f, 9.068414027e-08f, 9.068560150e-08f, 9.068690387e-08f, 9.068804740e-08f,
+9.068903213e-08f, 9.068985812e-08f, 9.069052539e-08f, 9.069103399e-08f, 9.069138396e-08f, 9.069157533e-08f, 9.069160816e-08f, 9.069148247e-08f, 9.069119832e-08f, 9.069075574e-08f,
+9.069015478e-08f, 9.068939547e-08f, 9.068847787e-08f, 9.068740201e-08f, 9.068616794e-08f, 9.068477569e-08f, 9.068322532e-08f, 9.068151687e-08f, 9.067965038e-08f, 9.067762590e-08f,
+9.067544347e-08f, 9.067310313e-08f, 9.067060494e-08f, 9.066794893e-08f, 9.066513516e-08f, 9.066216366e-08f, 9.065903449e-08f, 9.065574769e-08f, 9.065230331e-08f, 9.064870140e-08f,
+9.064494199e-08f, 9.064102515e-08f, 9.063695092e-08f, 9.063271935e-08f, 9.062833048e-08f, 9.062378436e-08f, 9.061908105e-08f, 9.061422059e-08f, 9.060920303e-08f, 9.060402842e-08f,
+9.059869682e-08f, 9.059320826e-08f, 9.058756281e-08f, 9.058176051e-08f, 9.057580142e-08f, 9.056968558e-08f, 9.056341305e-08f, 9.055698388e-08f, 9.055039812e-08f, 9.054365582e-08f,
+9.053675704e-08f, 9.052970183e-08f, 9.052249024e-08f, 9.051512233e-08f, 9.050759814e-08f, 9.049991774e-08f, 9.049208118e-08f, 9.048408851e-08f, 9.047593979e-08f, 9.046763507e-08f,
+9.045917440e-08f, 9.045055785e-08f, 9.044178547e-08f, 9.043285731e-08f, 9.042377343e-08f, 9.041453389e-08f, 9.040513875e-08f, 9.039558806e-08f, 9.038588187e-08f, 9.037602025e-08f,
+9.036600326e-08f, 9.035583095e-08f, 9.034550337e-08f, 9.033502060e-08f, 9.032438269e-08f, 9.031358969e-08f, 9.030264167e-08f, 9.029153869e-08f, 9.028028080e-08f, 9.026886807e-08f,
+9.025730056e-08f, 9.024557833e-08f, 9.023370143e-08f, 9.022166994e-08f, 9.020948390e-08f, 9.019714339e-08f, 9.018464846e-08f, 9.017199918e-08f, 9.015919561e-08f, 9.014623782e-08f,
+9.013312586e-08f, 9.011985979e-08f, 9.010643969e-08f, 9.009286562e-08f, 9.007913764e-08f, 9.006525581e-08f, 9.005122020e-08f, 9.003703087e-08f, 9.002268789e-08f, 9.000819133e-08f,
+8.999354125e-08f, 8.997873771e-08f, 8.996378078e-08f, 8.994867053e-08f, 8.993340703e-08f, 8.991799033e-08f, 8.990242052e-08f, 8.988669765e-08f, 8.987082179e-08f, 8.985479302e-08f,
+8.983861139e-08f, 8.982227698e-08f, 8.980578986e-08f, 8.978915009e-08f, 8.977235774e-08f, 8.975541289e-08f, 8.973831560e-08f, 8.972106595e-08f, 8.970366399e-08f, 8.968610981e-08f,
+8.966840347e-08f, 8.965054505e-08f, 8.963253461e-08f, 8.961437223e-08f, 8.959605798e-08f, 8.957759193e-08f, 8.955897415e-08f, 8.954020471e-08f, 8.952128369e-08f, 8.950221116e-08f,
+8.948298720e-08f, 8.946361187e-08f, 8.944408525e-08f, 8.942440741e-08f, 8.940457843e-08f, 8.938459839e-08f, 8.936446735e-08f, 8.934418539e-08f, 8.932375259e-08f, 8.930316901e-08f,
+8.928243475e-08f, 8.926154987e-08f, 8.924051445e-08f, 8.921932856e-08f, 8.919799229e-08f, 8.917650570e-08f, 8.915486888e-08f, 8.913308191e-08f, 8.911114485e-08f, 8.908905779e-08f,
+8.906682081e-08f, 8.904443398e-08f, 8.902189739e-08f, 8.899921110e-08f, 8.897637521e-08f, 8.895338978e-08f, 8.893025491e-08f, 8.890697066e-08f, 8.888353712e-08f, 8.885995437e-08f,
+8.883622249e-08f, 8.881234156e-08f, 8.878831166e-08f, 8.876413288e-08f, 8.873980528e-08f, 8.871532896e-08f, 8.869070400e-08f, 8.866593048e-08f, 8.864100847e-08f, 8.861593807e-08f,
+8.859071936e-08f, 8.856535242e-08f, 8.853983733e-08f, 8.851417418e-08f, 8.848836304e-08f, 8.846240401e-08f, 8.843629717e-08f, 8.841004261e-08f, 8.838364040e-08f, 8.835709063e-08f,
+8.833039339e-08f, 8.830354876e-08f, 8.827655684e-08f, 8.824941770e-08f, 8.822213142e-08f, 8.819469811e-08f, 8.816711784e-08f, 8.813939070e-08f, 8.811151678e-08f, 8.808349617e-08f,
+8.805532895e-08f, 8.802701520e-08f, 8.799855503e-08f, 8.796994852e-08f, 8.794119575e-08f, 8.791229681e-08f, 8.788325180e-08f, 8.785406080e-08f, 8.782472390e-08f, 8.779524119e-08f,
+8.776561277e-08f, 8.773583871e-08f, 8.770591912e-08f, 8.767585408e-08f, 8.764564369e-08f, 8.761528803e-08f, 8.758478719e-08f, 8.755414128e-08f, 8.752335037e-08f, 8.749241456e-08f,
+8.746133395e-08f, 8.743010862e-08f, 8.739873867e-08f, 8.736722420e-08f, 8.733556528e-08f, 8.730376203e-08f, 8.727181453e-08f, 8.723972287e-08f, 8.720748715e-08f, 8.717510747e-08f,
+8.714258391e-08f, 8.710991658e-08f, 8.707710557e-08f, 8.704415097e-08f, 8.701105288e-08f, 8.697781139e-08f, 8.694442661e-08f, 8.691089862e-08f, 8.687722752e-08f, 8.684341341e-08f,
+8.680945639e-08f, 8.677535655e-08f, 8.674111400e-08f, 8.670672882e-08f, 8.667220112e-08f, 8.663753099e-08f, 8.660271853e-08f, 8.656776384e-08f, 8.653266703e-08f, 8.649742818e-08f,
+8.646204740e-08f, 8.642652478e-08f, 8.639086043e-08f, 8.635505444e-08f, 8.631910692e-08f, 8.628301797e-08f, 8.624678768e-08f, 8.621041616e-08f, 8.617390350e-08f, 8.613724982e-08f,
+8.610045520e-08f, 8.606351976e-08f, 8.602644359e-08f, 8.598922679e-08f, 8.595186947e-08f, 8.591437173e-08f, 8.587673367e-08f, 8.583895540e-08f, 8.580103702e-08f, 8.576297863e-08f,
+8.572478033e-08f, 8.568644223e-08f, 8.564796443e-08f, 8.560934704e-08f, 8.557059017e-08f, 8.553169390e-08f, 8.549265836e-08f, 8.545348365e-08f, 8.541416986e-08f, 8.537471711e-08f,
+8.533512550e-08f, 8.529539514e-08f, 8.525552614e-08f, 8.521551860e-08f, 8.517537262e-08f, 8.513508831e-08f, 8.509466579e-08f, 8.505410516e-08f, 8.501340652e-08f, 8.497256998e-08f,
+8.493159565e-08f, 8.489048364e-08f, 8.484923406e-08f, 8.480784702e-08f, 8.476632262e-08f, 8.472466097e-08f, 8.468286219e-08f, 8.464092637e-08f, 8.459885364e-08f, 8.455664410e-08f,
+8.451429786e-08f, 8.447181503e-08f, 8.442919573e-08f, 8.438644005e-08f, 8.434354812e-08f, 8.430052004e-08f, 8.425735593e-08f, 8.421405589e-08f, 8.417062005e-08f, 8.412704850e-08f,
+8.408334136e-08f, 8.403949875e-08f, 8.399552078e-08f, 8.395140756e-08f, 8.390715920e-08f, 8.386277582e-08f, 8.381825752e-08f, 8.377360443e-08f, 8.372881665e-08f, 8.368389431e-08f,
+8.363883751e-08f, 8.359364637e-08f, 8.354832100e-08f, 8.350286153e-08f, 8.345726805e-08f, 8.341154070e-08f, 8.336567957e-08f, 8.331968480e-08f, 8.327355650e-08f, 8.322729477e-08f,
+8.318089974e-08f, 8.313437153e-08f, 8.308771025e-08f, 8.304091602e-08f, 8.299398895e-08f, 8.294692916e-08f, 8.289973677e-08f, 8.285241190e-08f, 8.280495467e-08f, 8.275736518e-08f,
+8.270964357e-08f, 8.266178995e-08f, 8.261380444e-08f, 8.256568715e-08f, 8.251743821e-08f, 8.246905774e-08f, 8.242054585e-08f, 8.237190267e-08f, 8.232312831e-08f, 8.227422290e-08f,
+8.222518655e-08f, 8.217601938e-08f, 8.212672153e-08f, 8.207729310e-08f, 8.202773421e-08f, 8.197804500e-08f, 8.192822558e-08f, 8.187827607e-08f, 8.182819659e-08f, 8.177798728e-08f,
+8.172764824e-08f, 8.167717960e-08f, 8.162658148e-08f, 8.157585401e-08f, 8.152499731e-08f, 8.147401151e-08f, 8.142289672e-08f, 8.137165306e-08f, 8.132028068e-08f, 8.126877968e-08f,
+8.121715019e-08f, 8.116539234e-08f, 8.111350625e-08f, 8.106149205e-08f, 8.100934985e-08f, 8.095707979e-08f, 8.090468200e-08f, 8.085215659e-08f, 8.079950369e-08f, 8.074672343e-08f,
+8.069381593e-08f, 8.064078133e-08f, 8.058761974e-08f, 8.053433130e-08f, 8.048091613e-08f, 8.042737435e-08f, 8.037370610e-08f, 8.031991151e-08f, 8.026599069e-08f, 8.021194378e-08f,
+8.015777091e-08f, 8.010347220e-08f, 8.004904779e-08f, 7.999449780e-08f, 7.993982236e-08f, 7.988502159e-08f, 7.983009564e-08f, 7.977504462e-08f, 7.971986867e-08f, 7.966456792e-08f,
+7.960914249e-08f, 7.955359252e-08f, 7.949791814e-08f, 7.944211947e-08f, 7.938619666e-08f, 7.933014982e-08f, 7.927397909e-08f, 7.921768461e-08f, 7.916126649e-08f, 7.910472488e-08f,
+7.904805991e-08f, 7.899127170e-08f, 7.893436040e-08f, 7.887732613e-08f, 7.882016902e-08f, 7.876288921e-08f, 7.870548682e-08f, 7.864796201e-08f, 7.859031488e-08f, 7.853254559e-08f,
+7.847465426e-08f, 7.841664103e-08f, 7.835850603e-08f, 7.830024940e-08f, 7.824187126e-08f, 7.818337176e-08f, 7.812475103e-08f, 7.806600920e-08f, 7.800714640e-08f, 7.794816278e-08f,
+7.788905847e-08f, 7.782983361e-08f, 7.777048832e-08f, 7.771102275e-08f, 7.765143703e-08f, 7.759173130e-08f, 7.753190570e-08f, 7.747196035e-08f, 7.741189541e-08f, 7.735171099e-08f,
+7.729140725e-08f, 7.723098432e-08f, 7.717044234e-08f, 7.710978144e-08f, 7.704900176e-08f, 7.698810344e-08f, 7.692708662e-08f, 7.686595144e-08f, 7.680469803e-08f, 7.674332653e-08f,
+7.668183709e-08f, 7.662022984e-08f, 7.655850492e-08f, 7.649666247e-08f, 7.643470263e-08f, 7.637262553e-08f, 7.631043133e-08f, 7.624812015e-08f, 7.618569215e-08f, 7.612314745e-08f,
+7.606048621e-08f, 7.599770855e-08f, 7.593481463e-08f, 7.587180458e-08f, 7.580867854e-08f, 7.574543666e-08f, 7.568207907e-08f, 7.561860593e-08f, 7.555501736e-08f, 7.549131352e-08f,
+7.542749454e-08f, 7.536356057e-08f, 7.529951174e-08f, 7.523534821e-08f, 7.517107012e-08f, 7.510667760e-08f, 7.504217080e-08f, 7.497754987e-08f, 7.491281495e-08f, 7.484796617e-08f,
+7.478300370e-08f, 7.471792766e-08f, 7.465273821e-08f, 7.458743548e-08f, 7.452201963e-08f, 7.445649080e-08f, 7.439084913e-08f, 7.432509476e-08f, 7.425922785e-08f, 7.419324853e-08f,
+7.412715696e-08f, 7.406095327e-08f, 7.399463762e-08f, 7.392821015e-08f, 7.386167101e-08f, 7.379502034e-08f, 7.372825829e-08f, 7.366138500e-08f, 7.359440063e-08f, 7.352730531e-08f,
+7.346009921e-08f, 7.339278245e-08f, 7.332535520e-08f, 7.325781759e-08f, 7.319016978e-08f, 7.312241192e-08f, 7.305454414e-08f, 7.298656661e-08f, 7.291847946e-08f, 7.285028285e-08f,
+7.278197693e-08f, 7.271356184e-08f, 7.264503773e-08f, 7.257640475e-08f, 7.250766306e-08f, 7.243881279e-08f, 7.236985411e-08f, 7.230078715e-08f, 7.223161208e-08f, 7.216232903e-08f,
+7.209293816e-08f, 7.202343963e-08f, 7.195383357e-08f, 7.188412014e-08f, 7.181429950e-08f, 7.174437179e-08f, 7.167433716e-08f, 7.160419576e-08f, 7.153394775e-08f, 7.146359328e-08f,
+7.139313250e-08f, 7.132256555e-08f, 7.125189260e-08f, 7.118111380e-08f, 7.111022929e-08f, 7.103923923e-08f, 7.096814377e-08f, 7.089694307e-08f, 7.082563727e-08f, 7.075422653e-08f,
+7.068271100e-08f, 7.061109085e-08f, 7.053936621e-08f, 7.046753724e-08f, 7.039560410e-08f, 7.032356694e-08f, 7.025142591e-08f, 7.017918118e-08f, 7.010683288e-08f, 7.003438118e-08f,
+6.996182624e-08f, 6.988916820e-08f, 6.981640722e-08f, 6.974354345e-08f, 6.967057706e-08f, 6.959750819e-08f, 6.952433701e-08f, 6.945106366e-08f, 6.937768830e-08f, 6.930421109e-08f,
+6.923063219e-08f, 6.915695174e-08f, 6.908316991e-08f, 6.900928686e-08f, 6.893530273e-08f, 6.886121769e-08f, 6.878703189e-08f, 6.871274549e-08f, 6.863835864e-08f, 6.856387151e-08f,
+6.848928425e-08f, 6.841459702e-08f, 6.833980997e-08f, 6.826492327e-08f, 6.818993707e-08f, 6.811485152e-08f, 6.803966679e-08f, 6.796438304e-08f, 6.788900042e-08f, 6.781351909e-08f,
+6.773793922e-08f, 6.766226095e-08f, 6.758648445e-08f, 6.751060988e-08f, 6.743463739e-08f, 6.735856715e-08f, 6.728239931e-08f, 6.720613404e-08f, 6.712977149e-08f, 6.705331182e-08f,
+6.697675520e-08f, 6.690010179e-08f, 6.682335173e-08f, 6.674650520e-08f, 6.666956236e-08f, 6.659252335e-08f, 6.651538836e-08f, 6.643815753e-08f, 6.636083103e-08f, 6.628340902e-08f,
+6.620589165e-08f, 6.612827910e-08f, 6.605057152e-08f, 6.597276907e-08f, 6.589487192e-08f, 6.581688023e-08f, 6.573879416e-08f, 6.566061386e-08f, 6.558233951e-08f, 6.550397127e-08f,
+6.542550929e-08f, 6.534695375e-08f, 6.526830480e-08f, 6.518956260e-08f, 6.511072732e-08f, 6.503179913e-08f, 6.495277818e-08f, 6.487366464e-08f, 6.479445867e-08f, 6.471516043e-08f,
+6.463577010e-08f, 6.455628783e-08f, 6.447671378e-08f, 6.439704813e-08f, 6.431729103e-08f, 6.423744264e-08f, 6.415750314e-08f, 6.407747269e-08f, 6.399735145e-08f, 6.391713959e-08f,
+6.383683727e-08f, 6.375644466e-08f, 6.367596192e-08f, 6.359538921e-08f, 6.351472671e-08f, 6.343397457e-08f, 6.335313297e-08f, 6.327220206e-08f, 6.319118202e-08f, 6.311007301e-08f,
+6.302887520e-08f, 6.294758874e-08f, 6.286621382e-08f, 6.278475059e-08f, 6.270319922e-08f, 6.262155988e-08f, 6.253983273e-08f, 6.245801794e-08f, 6.237611568e-08f, 6.229412612e-08f,
+6.221204941e-08f, 6.212988574e-08f, 6.204763526e-08f, 6.196529814e-08f, 6.188287456e-08f, 6.180036467e-08f, 6.171776865e-08f, 6.163508667e-08f, 6.155231888e-08f, 6.146946547e-08f,
+6.138652659e-08f, 6.130350242e-08f, 6.122039313e-08f, 6.113719887e-08f, 6.105391983e-08f, 6.097055617e-08f, 6.088710806e-08f, 6.080357567e-08f, 6.071995916e-08f, 6.063625871e-08f,
+6.055247449e-08f, 6.046860666e-08f, 6.038465539e-08f, 6.030062086e-08f, 6.021650322e-08f, 6.013230267e-08f, 6.004801935e-08f, 5.996365345e-08f, 5.987920513e-08f, 5.979467456e-08f,
+5.971006191e-08f, 5.962536736e-08f, 5.954059107e-08f, 5.945573322e-08f, 5.937079397e-08f, 5.928577349e-08f, 5.920067196e-08f, 5.911548955e-08f, 5.903022642e-08f, 5.894488276e-08f,
+5.885945872e-08f, 5.877395449e-08f, 5.868837022e-08f, 5.860270611e-08f, 5.851696230e-08f, 5.843113899e-08f, 5.834523633e-08f, 5.825925451e-08f, 5.817319369e-08f, 5.808705404e-08f,
+5.800083574e-08f, 5.791453896e-08f, 5.782816387e-08f, 5.774171065e-08f, 5.765517946e-08f, 5.756857048e-08f, 5.748188388e-08f, 5.739511984e-08f, 5.730827852e-08f, 5.722136011e-08f,
+5.713436477e-08f, 5.704729267e-08f, 5.696014400e-08f, 5.687291892e-08f, 5.678561760e-08f, 5.669824023e-08f, 5.661078697e-08f, 5.652325799e-08f, 5.643565348e-08f, 5.634797360e-08f,
+5.626021853e-08f, 5.617238845e-08f, 5.608448352e-08f, 5.599650392e-08f, 5.590844983e-08f, 5.582032141e-08f, 5.573211886e-08f, 5.564384233e-08f, 5.555549200e-08f, 5.546706805e-08f,
+5.537857065e-08f, 5.528999999e-08f, 5.520135622e-08f, 5.511263953e-08f, 5.502385010e-08f, 5.493498809e-08f, 5.484605369e-08f, 5.475704706e-08f, 5.466796839e-08f, 5.457881785e-08f,
+5.448959561e-08f, 5.440030186e-08f, 5.431093676e-08f, 5.422150049e-08f, 5.413199323e-08f, 5.404241516e-08f, 5.395276645e-08f, 5.386304727e-08f, 5.377325780e-08f, 5.368339823e-08f,
+5.359346872e-08f, 5.350346945e-08f, 5.341340060e-08f, 5.332326235e-08f, 5.323305486e-08f, 5.314277833e-08f, 5.305243292e-08f, 5.296201882e-08f, 5.287153619e-08f, 5.278098522e-08f,
+5.269036608e-08f, 5.259967895e-08f, 5.250892401e-08f, 5.241810144e-08f, 5.232721141e-08f, 5.223625410e-08f, 5.214522969e-08f, 5.205413835e-08f, 5.196298026e-08f, 5.187175561e-08f,
+5.178046457e-08f, 5.168910731e-08f, 5.159768401e-08f, 5.150619486e-08f, 5.141464003e-08f, 5.132301970e-08f, 5.123133405e-08f, 5.113958325e-08f, 5.104776749e-08f, 5.095588693e-08f,
+5.086394177e-08f, 5.077193218e-08f, 5.067985834e-08f, 5.058772042e-08f, 5.049551861e-08f, 5.040325309e-08f, 5.031092403e-08f, 5.021853161e-08f, 5.012607601e-08f, 5.003355742e-08f,
+4.994097600e-08f, 4.984833194e-08f, 4.975562542e-08f, 4.966285662e-08f, 4.957002572e-08f, 4.947713289e-08f, 4.938417832e-08f, 4.929116219e-08f, 4.919808467e-08f, 4.910494594e-08f,
+4.901174620e-08f, 4.891848560e-08f, 4.882516435e-08f, 4.873178260e-08f, 4.863834055e-08f, 4.854483838e-08f, 4.845127626e-08f, 4.835765438e-08f, 4.826397292e-08f, 4.817023205e-08f,
+4.807643195e-08f, 4.798257282e-08f, 4.788865482e-08f, 4.779467814e-08f, 4.770064295e-08f, 4.760654945e-08f, 4.751239781e-08f, 4.741818821e-08f, 4.732392082e-08f, 4.722959585e-08f,
+4.713521345e-08f, 4.704077382e-08f, 4.694627714e-08f, 4.685172358e-08f, 4.675711333e-08f, 4.666244656e-08f, 4.656772347e-08f, 4.647294423e-08f, 4.637810903e-08f, 4.628321803e-08f,
+4.618827143e-08f, 4.609326941e-08f, 4.599821215e-08f, 4.590309983e-08f, 4.580793263e-08f, 4.571271074e-08f, 4.561743433e-08f, 4.552210358e-08f, 4.542671869e-08f, 4.533127983e-08f,
+4.523578718e-08f, 4.514024092e-08f, 4.504464124e-08f, 4.494898832e-08f, 4.485328235e-08f, 4.475752349e-08f, 4.466171194e-08f, 4.456584788e-08f, 4.446993149e-08f, 4.437396295e-08f,
+4.427794244e-08f, 4.418187016e-08f, 4.408574627e-08f, 4.398957096e-08f, 4.389334442e-08f, 4.379706683e-08f, 4.370073837e-08f, 4.360435922e-08f, 4.350792956e-08f, 4.341144959e-08f,
+4.331491947e-08f, 4.321833940e-08f, 4.312170955e-08f, 4.302503012e-08f, 4.292830128e-08f, 4.283152321e-08f, 4.273469610e-08f, 4.263782013e-08f, 4.254089549e-08f, 4.244392236e-08f,
+4.234690091e-08f, 4.224983135e-08f, 4.215271384e-08f, 4.205554857e-08f, 4.195833572e-08f, 4.186107548e-08f, 4.176376804e-08f, 4.166641356e-08f, 4.156901225e-08f, 4.147156428e-08f,
+4.137406983e-08f, 4.127652909e-08f, 4.117894224e-08f, 4.108130947e-08f, 4.098363096e-08f, 4.088590689e-08f, 4.078813745e-08f, 4.069032282e-08f, 4.059246319e-08f, 4.049455873e-08f,
+4.039660963e-08f, 4.029861609e-08f, 4.020057827e-08f, 4.010249636e-08f, 4.000437055e-08f, 3.990620103e-08f, 3.980798797e-08f, 3.970973156e-08f, 3.961143198e-08f, 3.951308943e-08f,
+3.941470407e-08f, 3.931627610e-08f, 3.921780571e-08f, 3.911929307e-08f, 3.902073836e-08f, 3.892214178e-08f, 3.882350351e-08f, 3.872482373e-08f, 3.862610263e-08f, 3.852734038e-08f,
+3.842853719e-08f, 3.832969322e-08f, 3.823080866e-08f, 3.813188371e-08f, 3.803291854e-08f, 3.793391333e-08f, 3.783486828e-08f, 3.773578356e-08f, 3.763665936e-08f, 3.753749587e-08f,
+3.743829328e-08f, 3.733905175e-08f, 3.723977149e-08f, 3.714045266e-08f, 3.704109547e-08f, 3.694170009e-08f, 3.684226671e-08f, 3.674279552e-08f, 3.664328669e-08f, 3.654374041e-08f,
+3.644415687e-08f, 3.634453625e-08f, 3.624487874e-08f, 3.614518453e-08f, 3.604545379e-08f, 3.594568671e-08f, 3.584588347e-08f, 3.574604427e-08f, 3.564616928e-08f, 3.554625870e-08f,
+3.544631270e-08f, 3.534633147e-08f, 3.524631520e-08f, 3.514626407e-08f, 3.504617827e-08f, 3.494605798e-08f, 3.484590338e-08f, 3.474571466e-08f, 3.464549201e-08f, 3.454523562e-08f,
+3.444494565e-08f, 3.434462231e-08f, 3.424426578e-08f, 3.414387623e-08f, 3.404345387e-08f, 3.394299886e-08f, 3.384251141e-08f, 3.374199168e-08f, 3.364143987e-08f, 3.354085616e-08f,
+3.344024074e-08f, 3.333959380e-08f, 3.323891551e-08f, 3.313820606e-08f, 3.303746564e-08f, 3.293669444e-08f, 3.283589263e-08f, 3.273506041e-08f, 3.263419795e-08f, 3.253330545e-08f,
+3.243238309e-08f, 3.233143105e-08f, 3.223044952e-08f, 3.212943869e-08f, 3.202839873e-08f, 3.192732985e-08f, 3.182623221e-08f, 3.172510601e-08f, 3.162395142e-08f, 3.152276865e-08f,
+3.142155786e-08f, 3.132031925e-08f, 3.121905301e-08f, 3.111775931e-08f, 3.101643834e-08f, 3.091509029e-08f, 3.081371534e-08f, 3.071231368e-08f, 3.061088549e-08f, 3.050943096e-08f,
+3.040795027e-08f, 3.030644361e-08f, 3.020491117e-08f, 3.010335312e-08f, 3.000176966e-08f, 2.990016097e-08f, 2.979852723e-08f, 2.969686863e-08f, 2.959518536e-08f, 2.949347759e-08f,
+2.939174552e-08f, 2.928998933e-08f, 2.918820921e-08f, 2.908640533e-08f, 2.898457790e-08f, 2.888272708e-08f, 2.878085307e-08f, 2.867895605e-08f, 2.857703620e-08f, 2.847509372e-08f,
+2.837312878e-08f, 2.827114157e-08f, 2.816913228e-08f, 2.806710109e-08f, 2.796504819e-08f, 2.786297376e-08f, 2.776087799e-08f, 2.765876105e-08f, 2.755662315e-08f, 2.745446445e-08f,
+2.735228515e-08f, 2.725008543e-08f, 2.714786548e-08f, 2.704562548e-08f, 2.694336561e-08f, 2.684108607e-08f, 2.673878703e-08f, 2.663646868e-08f, 2.653413121e-08f, 2.643177480e-08f,
+2.632939963e-08f, 2.622700589e-08f, 2.612459377e-08f, 2.602216345e-08f, 2.591971511e-08f, 2.581724894e-08f, 2.571476512e-08f, 2.561226384e-08f, 2.550974529e-08f, 2.540720964e-08f,
+2.530465708e-08f, 2.520208781e-08f, 2.509950199e-08f, 2.499689982e-08f, 2.489428148e-08f, 2.479164716e-08f, 2.468899703e-08f, 2.458633129e-08f, 2.448365012e-08f, 2.438095370e-08f,
+2.427824222e-08f, 2.417551586e-08f, 2.407277481e-08f, 2.397001925e-08f, 2.386724936e-08f, 2.376446533e-08f, 2.366166735e-08f, 2.355885560e-08f, 2.345603025e-08f, 2.335319151e-08f,
+2.325033954e-08f, 2.314747454e-08f, 2.304459669e-08f, 2.294170617e-08f, 2.283880317e-08f, 2.273588786e-08f, 2.263296045e-08f, 2.253002110e-08f, 2.242707001e-08f, 2.232410735e-08f,
+2.222113332e-08f, 2.211814809e-08f, 2.201515185e-08f, 2.191214478e-08f, 2.180912707e-08f, 2.170609889e-08f, 2.160306045e-08f, 2.150001191e-08f, 2.139695346e-08f, 2.129388528e-08f,
+2.119080757e-08f, 2.108772049e-08f, 2.098462425e-08f, 2.088151901e-08f, 2.077840496e-08f, 2.067528229e-08f, 2.057215118e-08f, 2.046901182e-08f, 2.036586438e-08f, 2.026270904e-08f,
+2.015954601e-08f, 2.005637545e-08f, 1.995319754e-08f, 1.985001248e-08f, 1.974682045e-08f, 1.964362162e-08f, 1.954041619e-08f, 1.943720433e-08f, 1.933398623e-08f, 1.923076207e-08f,
+1.912753203e-08f, 1.902429630e-08f, 1.892105506e-08f, 1.881780849e-08f, 1.871455678e-08f, 1.861130010e-08f, 1.850803865e-08f, 1.840477260e-08f, 1.830150213e-08f, 1.819822743e-08f,
+1.809494868e-08f, 1.799166607e-08f, 1.788837977e-08f, 1.778508997e-08f, 1.768179684e-08f, 1.757850059e-08f, 1.747520137e-08f, 1.737189938e-08f, 1.726859481e-08f, 1.716528782e-08f,
+1.706197861e-08f, 1.695866735e-08f, 1.685535423e-08f, 1.675203943e-08f, 1.664872313e-08f, 1.654540551e-08f, 1.644208676e-08f, 1.633876705e-08f, 1.623544657e-08f, 1.613212551e-08f,
+1.602880403e-08f, 1.592548233e-08f, 1.582216058e-08f, 1.571883897e-08f, 1.561551768e-08f, 1.551219688e-08f, 1.540887677e-08f, 1.530555752e-08f, 1.520223931e-08f, 1.509892232e-08f,
+1.499560674e-08f, 1.489229275e-08f, 1.478898052e-08f, 1.468567024e-08f, 1.458236209e-08f, 1.447905626e-08f, 1.437575291e-08f, 1.427245223e-08f, 1.416915441e-08f, 1.406585961e-08f,
+1.396256804e-08f, 1.385927985e-08f, 1.375599524e-08f, 1.365271439e-08f, 1.354943747e-08f, 1.344616467e-08f, 1.334289616e-08f, 1.323963213e-08f, 1.313637276e-08f, 1.303311822e-08f,
+1.292986870e-08f, 1.282662437e-08f, 1.272338543e-08f, 1.262015203e-08f, 1.251692438e-08f, 1.241370264e-08f, 1.231048700e-08f, 1.220727763e-08f, 1.210407471e-08f, 1.200087844e-08f,
+1.189768897e-08f, 1.179450650e-08f, 1.169133120e-08f, 1.158816325e-08f, 1.148500284e-08f, 1.138185013e-08f, 1.127870532e-08f, 1.117556857e-08f, 1.107244007e-08f, 1.096931999e-08f,
+1.086620853e-08f, 1.076310584e-08f, 1.066001212e-08f, 1.055692754e-08f, 1.045385228e-08f, 1.035078652e-08f, 1.024773043e-08f, 1.014468420e-08f, 1.004164801e-08f, 9.938622024e-09f,
+9.835606431e-09f, 9.732601406e-09f, 9.629607127e-09f, 9.526623773e-09f, 9.423651522e-09f, 9.320690550e-09f, 9.217741037e-09f, 9.114803159e-09f, 9.011877095e-09f, 8.908963022e-09f,
+8.806061118e-09f, 8.703171560e-09f, 8.600294525e-09f, 8.497430191e-09f, 8.394578735e-09f, 8.291740334e-09f, 8.188915166e-09f, 8.086103407e-09f, 7.983305235e-09f, 7.880520826e-09f,
+7.777750357e-09f, 7.674994005e-09f, 7.572251946e-09f, 7.469524358e-09f, 7.366811416e-09f, 7.264113298e-09f, 7.161430179e-09f, 7.058762236e-09f, 6.956109645e-09f, 6.853472583e-09f,
+6.750851225e-09f, 6.648245747e-09f, 6.545656326e-09f, 6.443083137e-09f, 6.340526356e-09f, 6.237986159e-09f, 6.135462722e-09f, 6.032956219e-09f, 5.930466827e-09f, 5.827994721e-09f,
+5.725540076e-09f, 5.623103068e-09f, 5.520683871e-09f, 5.418282661e-09f, 5.315899613e-09f, 5.213534901e-09f, 5.111188701e-09f, 5.008861188e-09f, 4.906552536e-09f, 4.804262919e-09f,
+4.701992513e-09f, 4.599741491e-09f, 4.497510029e-09f, 4.395298300e-09f, 4.293106478e-09f, 4.190934739e-09f, 4.088783255e-09f, 3.986652201e-09f, 3.884541751e-09f, 3.782452078e-09f,
+3.680383357e-09f, 3.578335760e-09f, 3.476309462e-09f, 3.374304636e-09f, 3.272321455e-09f, 3.170360093e-09f, 3.068420722e-09f, 2.966503517e-09f, 2.864608649e-09f, 2.762736293e-09f,
+2.660886620e-09f, 2.559059804e-09f, 2.457256017e-09f, 2.355475433e-09f, 2.253718222e-09f, 2.151984559e-09f, 2.050274615e-09f, 1.948588563e-09f, 1.846926574e-09f, 1.745288821e-09f,
+1.643675476e-09f, 1.542086711e-09f, 1.440522697e-09f, 1.338983607e-09f, 1.237469611e-09f, 1.135980882e-09f, 1.034517591e-09f, 9.330799091e-10f, 8.316680079e-10f, 7.302820585e-10f,
+6.289222319e-10f, 5.275886993e-10f, 4.262816314e-10f, 3.250011991e-10f, 2.237475732e-10f, 1.225209243e-10f, 2.132142281e-11f, -7.985076068e-11f, -1.809954559e-10f, -2.821124925e-10f,
+-3.832017004e-10f, -4.842629095e-10f, -5.852959498e-10f, -6.863006515e-10f, -7.872768447e-10f, -8.882243599e-10f, -9.891430273e-10f, -1.090032678e-09f, -1.190893141e-09f, -1.291724249e-09f,
+-1.392525831e-09f, -1.493297720e-09f, -1.594039745e-09f, -1.694751738e-09f, -1.795433530e-09f, -1.896084953e-09f, -1.996705837e-09f, -2.097296015e-09f, -2.197855317e-09f, -2.298383576e-09f,
+-2.398880623e-09f, -2.499346290e-09f, -2.599780409e-09f, -2.700182813e-09f, -2.800553333e-09f, -2.900891801e-09f, -3.001198051e-09f, -3.101471914e-09f, -3.201713224e-09f, -3.301921812e-09f,
+-3.402097513e-09f, -3.502240157e-09f, -3.602349580e-09f, -3.702425613e-09f, -3.802468089e-09f, -3.902476843e-09f, -4.002451708e-09f, -4.102392517e-09f, -4.202299104e-09f, -4.302171302e-09f,
+-4.402008946e-09f, -4.501811869e-09f, -4.601579905e-09f, -4.701312889e-09f, -4.801010654e-09f, -4.900673036e-09f, -5.000299869e-09f, -5.099890986e-09f, -5.199446224e-09f, -5.298965416e-09f,
+-5.398448398e-09f, -5.497895005e-09f, -5.597305071e-09f, -5.696678433e-09f, -5.796014924e-09f, -5.895314382e-09f, -5.994576641e-09f, -6.093801537e-09f, -6.192988905e-09f, -6.292138583e-09f,
+-6.391250405e-09f, -6.490324208e-09f, -6.589359828e-09f, -6.688357102e-09f, -6.787315865e-09f, -6.886235955e-09f, -6.985117207e-09f, -7.083959460e-09f, -7.182762549e-09f, -7.281526312e-09f,
+-7.380250586e-09f, -7.478935209e-09f, -7.577580016e-09f, -7.676184847e-09f, -7.774749538e-09f, -7.873273927e-09f, -7.971757852e-09f, -8.070201152e-09f, -8.168603663e-09f, -8.266965224e-09f,
+-8.365285674e-09f, -8.463564850e-09f, -8.561802592e-09f, -8.659998738e-09f, -8.758153126e-09f, -8.856265596e-09f, -8.954335987e-09f, -9.052364136e-09f, -9.150349885e-09f, -9.248293072e-09f,
+-9.346193536e-09f, -9.444051117e-09f, -9.541865656e-09f, -9.639636990e-09f, -9.737364961e-09f, -9.835049409e-09f, -9.932690173e-09f, -1.003028709e-08f, -1.012784001e-08f, -1.022534877e-08f,
+-1.032281320e-08f, -1.042023316e-08f, -1.051760847e-08f, -1.061493899e-08f, -1.071222455e-08f, -1.080946499e-08f, -1.090666015e-08f, -1.100380989e-08f, -1.110091403e-08f, -1.119797242e-08f,
+-1.129498490e-08f, -1.139195132e-08f, -1.148887151e-08f, -1.158574532e-08f, -1.168257259e-08f, -1.177935316e-08f, -1.187608688e-08f, -1.197277358e-08f, -1.206941312e-08f, -1.216600533e-08f,
+-1.226255006e-08f, -1.235904714e-08f, -1.245549644e-08f, -1.255189777e-08f, -1.264825100e-08f, -1.274455597e-08f, -1.284081251e-08f, -1.293702047e-08f, -1.303317970e-08f, -1.312929005e-08f,
+-1.322535134e-08f, -1.332136344e-08f, -1.341732618e-08f, -1.351323941e-08f, -1.360910297e-08f, -1.370491671e-08f, -1.380068048e-08f, -1.389639412e-08f, -1.399205747e-08f, -1.408767038e-08f,
+-1.418323270e-08f, -1.427874426e-08f, -1.437420493e-08f, -1.446961454e-08f, -1.456497294e-08f, -1.466027998e-08f, -1.475553550e-08f, -1.485073934e-08f, -1.494589137e-08f, -1.504099142e-08f,
+-1.513603933e-08f, -1.523103497e-08f, -1.532597817e-08f, -1.542086878e-08f, -1.551570665e-08f, -1.561049163e-08f, -1.570522356e-08f, -1.579990229e-08f, -1.589452768e-08f, -1.598909956e-08f,
+-1.608361779e-08f, -1.617808222e-08f, -1.627249269e-08f, -1.636684906e-08f, -1.646115116e-08f, -1.655539886e-08f, -1.664959200e-08f, -1.674373042e-08f, -1.683781399e-08f, -1.693184254e-08f,
+-1.702581594e-08f, -1.711973402e-08f, -1.721359663e-08f, -1.730740364e-08f, -1.740115488e-08f, -1.749485022e-08f, -1.758848949e-08f, -1.768207255e-08f, -1.777559926e-08f, -1.786906945e-08f,
+-1.796248299e-08f, -1.805583972e-08f, -1.814913950e-08f, -1.824238217e-08f, -1.833556759e-08f, -1.842869561e-08f, -1.852176609e-08f, -1.861477887e-08f, -1.870773380e-08f, -1.880063075e-08f,
+-1.889346955e-08f, -1.898625007e-08f, -1.907897216e-08f, -1.917163567e-08f, -1.926424045e-08f, -1.935678635e-08f, -1.944927324e-08f, -1.954170096e-08f, -1.963406936e-08f, -1.972637831e-08f,
+-1.981862764e-08f, -1.991081723e-08f, -2.000294692e-08f, -2.009501657e-08f, -2.018702603e-08f, -2.027897515e-08f, -2.037086380e-08f, -2.046269182e-08f, -2.055445907e-08f, -2.064616541e-08f,
+-2.073781069e-08f, -2.082939477e-08f, -2.092091750e-08f, -2.101237874e-08f, -2.110377834e-08f, -2.119511617e-08f, -2.128639207e-08f, -2.137760590e-08f, -2.146875753e-08f, -2.155984680e-08f,
+-2.165087358e-08f, -2.174183772e-08f, -2.183273907e-08f, -2.192357750e-08f, -2.201435286e-08f, -2.210506501e-08f, -2.219571381e-08f, -2.228629912e-08f, -2.237682079e-08f, -2.246727868e-08f,
+-2.255767266e-08f, -2.264800257e-08f, -2.273826828e-08f, -2.282846965e-08f, -2.291860653e-08f, -2.300867879e-08f, -2.309868628e-08f, -2.318862886e-08f, -2.327850640e-08f, -2.336831875e-08f,
+-2.345806577e-08f, -2.354774733e-08f, -2.363736328e-08f, -2.372691348e-08f, -2.381639780e-08f, -2.390581609e-08f, -2.399516821e-08f, -2.408445403e-08f, -2.417367341e-08f, -2.426282621e-08f,
+-2.435191228e-08f, -2.444093150e-08f, -2.452988372e-08f, -2.461876881e-08f, -2.470758663e-08f, -2.479633703e-08f, -2.488501988e-08f, -2.497363505e-08f, -2.506218240e-08f, -2.515066179e-08f,
+-2.523907308e-08f, -2.532741613e-08f, -2.541569082e-08f, -2.550389699e-08f, -2.559203453e-08f, -2.568010328e-08f, -2.576810312e-08f, -2.585603390e-08f, -2.594389550e-08f, -2.603168778e-08f,
+-2.611941059e-08f, -2.620706382e-08f, -2.629464731e-08f, -2.638216094e-08f, -2.646960457e-08f, -2.655697807e-08f, -2.664428130e-08f, -2.673151413e-08f, -2.681867642e-08f, -2.690576804e-08f,
+-2.699278886e-08f, -2.707973874e-08f, -2.716661754e-08f, -2.725342515e-08f, -2.734016141e-08f, -2.742682621e-08f, -2.751341940e-08f, -2.759994085e-08f, -2.768639044e-08f, -2.777276802e-08f,
+-2.785907347e-08f, -2.794530666e-08f, -2.803146745e-08f, -2.811755570e-08f, -2.820357130e-08f, -2.828951411e-08f, -2.837538399e-08f, -2.846118082e-08f, -2.854690446e-08f, -2.863255479e-08f,
+-2.871813167e-08f, -2.880363497e-08f, -2.888906457e-08f, -2.897442033e-08f, -2.905970212e-08f, -2.914490981e-08f, -2.923004328e-08f, -2.931510239e-08f, -2.940008702e-08f, -2.948499703e-08f,
+-2.956983230e-08f, -2.965459270e-08f, -2.973927810e-08f, -2.982388836e-08f, -2.990842337e-08f, -2.999288300e-08f, -3.007726711e-08f, -3.016157558e-08f, -3.024580829e-08f, -3.032996509e-08f,
+-3.041404588e-08f, -3.049805051e-08f, -3.058197887e-08f, -3.066583082e-08f, -3.074960625e-08f, -3.083330501e-08f, -3.091692699e-08f, -3.100047207e-08f, -3.108394011e-08f, -3.116733099e-08f,
+-3.125064458e-08f, -3.133388076e-08f, -3.141703940e-08f, -3.150012039e-08f, -3.158312358e-08f, -3.166604887e-08f, -3.174889611e-08f, -3.183166520e-08f, -3.191435601e-08f, -3.199696840e-08f,
+-3.207950227e-08f, -3.216195747e-08f, -3.224433390e-08f, -3.232663143e-08f, -3.240884993e-08f, -3.249098928e-08f, -3.257304936e-08f, -3.265503005e-08f, -3.273693121e-08f, -3.281875274e-08f,
+-3.290049451e-08f, -3.298215640e-08f, -3.306373828e-08f, -3.314524004e-08f, -3.322666155e-08f, -3.330800268e-08f, -3.338926333e-08f, -3.347044337e-08f, -3.355154268e-08f, -3.363256113e-08f,
+-3.371349862e-08f, -3.379435501e-08f, -3.387513018e-08f, -3.395582403e-08f, -3.403643642e-08f, -3.411696724e-08f, -3.419741637e-08f, -3.427778369e-08f, -3.435806909e-08f, -3.443827243e-08f,
+-3.451839361e-08f, -3.459843250e-08f, -3.467838899e-08f, -3.475826296e-08f, -3.483805429e-08f, -3.491776286e-08f, -3.499738856e-08f, -3.507693127e-08f, -3.515639087e-08f, -3.523576725e-08f,
+-3.531506028e-08f, -3.539426985e-08f, -3.547339585e-08f, -3.555243815e-08f, -3.563139665e-08f, -3.571027123e-08f, -3.578906176e-08f, -3.586776814e-08f, -3.594639025e-08f, -3.602492797e-08f,
+-3.610338120e-08f, -3.618174980e-08f, -3.626003368e-08f, -3.633823271e-08f, -3.641634679e-08f, -3.649437579e-08f, -3.657231960e-08f, -3.665017811e-08f, -3.672795121e-08f, -3.680563878e-08f,
+-3.688324071e-08f, -3.696075689e-08f, -3.703818720e-08f, -3.711553153e-08f, -3.719278976e-08f, -3.726996180e-08f, -3.734704751e-08f, -3.742404680e-08f, -3.750095955e-08f, -3.757778565e-08f,
+-3.765452498e-08f, -3.773117744e-08f, -3.780774292e-08f, -3.788422130e-08f, -3.796061247e-08f, -3.803691633e-08f, -3.811313276e-08f, -3.818926165e-08f, -3.826530289e-08f, -3.834125637e-08f,
+-3.841712199e-08f, -3.849289964e-08f, -3.856858920e-08f, -3.864419056e-08f, -3.871970362e-08f, -3.879512827e-08f, -3.887046440e-08f, -3.894571190e-08f, -3.902087067e-08f, -3.909594059e-08f,
+-3.917092155e-08f, -3.924581346e-08f, -3.932061621e-08f, -3.939532968e-08f, -3.946995376e-08f, -3.954448836e-08f, -3.961893337e-08f, -3.969328868e-08f, -3.976755417e-08f, -3.984172976e-08f,
+-3.991581533e-08f, -3.998981077e-08f, -4.006371599e-08f, -4.013753087e-08f, -4.021125531e-08f, -4.028488920e-08f, -4.035843245e-08f, -4.043188494e-08f, -4.050524657e-08f, -4.057851724e-08f,
+-4.065169684e-08f, -4.072478528e-08f, -4.079778244e-08f, -4.087068822e-08f, -4.094350253e-08f, -4.101622525e-08f, -4.108885628e-08f, -4.116139552e-08f, -4.123384288e-08f, -4.130619824e-08f,
+-4.137846151e-08f, -4.145063257e-08f, -4.152271134e-08f, -4.159469771e-08f, -4.166659158e-08f, -4.173839285e-08f, -4.181010141e-08f, -4.188171717e-08f, -4.195324002e-08f, -4.202466987e-08f,
+-4.209600661e-08f, -4.216725015e-08f, -4.223840038e-08f, -4.230945721e-08f, -4.238042053e-08f, -4.245129025e-08f, -4.252206627e-08f, -4.259274849e-08f, -4.266333681e-08f, -4.273383113e-08f,
+-4.280423135e-08f, -4.287453739e-08f, -4.294474912e-08f, -4.301486647e-08f, -4.308488934e-08f, -4.315481762e-08f, -4.322465121e-08f, -4.329439003e-08f, -4.336403398e-08f, -4.343358295e-08f,
+-4.350303686e-08f, -4.357239560e-08f, -4.364165908e-08f, -4.371082721e-08f, -4.377989989e-08f, -4.384887702e-08f, -4.391775851e-08f, -4.398654426e-08f, -4.405523419e-08f, -4.412382819e-08f,
+-4.419232617e-08f, -4.426072803e-08f, -4.432903369e-08f, -4.439724304e-08f, -4.446535601e-08f, -4.453337248e-08f, -4.460129237e-08f, -4.466911559e-08f, -4.473684204e-08f, -4.480447163e-08f,
+-4.487200426e-08f, -4.493943986e-08f, -4.500677831e-08f, -4.507401954e-08f, -4.514116345e-08f, -4.520820995e-08f, -4.527515895e-08f, -4.534201035e-08f, -4.540876407e-08f, -4.547542001e-08f,
+-4.554197809e-08f, -4.560843822e-08f, -4.567480030e-08f, -4.574106424e-08f, -4.580722996e-08f, -4.587329736e-08f, -4.593926636e-08f, -4.600513687e-08f, -4.607090880e-08f, -4.613658206e-08f,
+-4.620215656e-08f, -4.626763221e-08f, -4.633300893e-08f, -4.639828662e-08f, -4.646346521e-08f, -4.652854460e-08f, -4.659352470e-08f, -4.665840543e-08f, -4.672318671e-08f, -4.678786844e-08f,
+-4.685245053e-08f, -4.691693291e-08f, -4.698131549e-08f, -4.704559817e-08f, -4.710978088e-08f, -4.717386353e-08f, -4.723784603e-08f, -4.730172830e-08f, -4.736551026e-08f, -4.742919181e-08f,
+-4.749277288e-08f, -4.755625338e-08f, -4.761963323e-08f, -4.768291234e-08f, -4.774609063e-08f, -4.780916801e-08f, -4.787214441e-08f, -4.793501974e-08f, -4.799779391e-08f, -4.806046685e-08f,
+-4.812303847e-08f, -4.818550868e-08f, -4.824787742e-08f, -4.831014459e-08f, -4.837231011e-08f, -4.843437391e-08f, -4.849633590e-08f, -4.855819600e-08f, -4.861995412e-08f, -4.868161020e-08f,
+-4.874316415e-08f, -4.880461588e-08f, -4.886596532e-08f, -4.892721239e-08f, -4.898835700e-08f, -4.904939909e-08f, -4.911033857e-08f, -4.917117535e-08f, -4.923190937e-08f, -4.929254055e-08f,
+-4.935306880e-08f, -4.941349404e-08f, -4.947381621e-08f, -4.953403521e-08f, -4.959415098e-08f, -4.965416344e-08f, -4.971407250e-08f, -4.977387810e-08f, -4.983358016e-08f, -4.989317859e-08f,
+-4.995267332e-08f, -5.001206428e-08f, -5.007135139e-08f, -5.013053458e-08f, -5.018961376e-08f, -5.024858887e-08f, -5.030745983e-08f, -5.036622656e-08f, -5.042488899e-08f, -5.048344704e-08f,
+-5.054190065e-08f, -5.060024973e-08f, -5.065849421e-08f, -5.071663402e-08f, -5.077466909e-08f, -5.083259934e-08f, -5.089042469e-08f, -5.094814509e-08f, -5.100576044e-08f, -5.106327069e-08f,
+-5.112067575e-08f, -5.117797556e-08f, -5.123517005e-08f, -5.129225913e-08f, -5.134924275e-08f, -5.140612083e-08f, -5.146289330e-08f, -5.151956009e-08f, -5.157612112e-08f, -5.163257633e-08f,
+-5.168892565e-08f, -5.174516900e-08f, -5.180130632e-08f, -5.185733754e-08f, -5.191326259e-08f, -5.196908140e-08f, -5.202479389e-08f, -5.208040001e-08f, -5.213589968e-08f, -5.219129284e-08f,
+-5.224657941e-08f, -5.230175933e-08f, -5.235683253e-08f, -5.241179894e-08f, -5.246665850e-08f, -5.252141114e-08f, -5.257605679e-08f, -5.263059538e-08f, -5.268502685e-08f, -5.273935114e-08f,
+-5.279356817e-08f, -5.284767788e-08f, -5.290168021e-08f, -5.295557508e-08f, -5.300936244e-08f, -5.306304222e-08f, -5.311661436e-08f, -5.317007878e-08f, -5.322343542e-08f, -5.327668423e-08f,
+-5.332982514e-08f, -5.338285808e-08f, -5.343578298e-08f, -5.348859980e-08f, -5.354130845e-08f, -5.359390889e-08f, -5.364640104e-08f, -5.369878485e-08f, -5.375106025e-08f, -5.380322719e-08f,
+-5.385528558e-08f, -5.390723539e-08f, -5.395907654e-08f, -5.401080898e-08f, -5.406243264e-08f, -5.411394746e-08f, -5.416535338e-08f, -5.421665034e-08f, -5.426783828e-08f, -5.431891715e-08f,
+-5.436988687e-08f, -5.442074740e-08f, -5.447149866e-08f, -5.452214061e-08f, -5.457267319e-08f, -5.462309632e-08f, -5.467340997e-08f, -5.472361406e-08f, -5.477370854e-08f, -5.482369335e-08f,
+-5.487356844e-08f, -5.492333374e-08f, -5.497298921e-08f, -5.502253477e-08f, -5.507197038e-08f, -5.512129598e-08f, -5.517051151e-08f, -5.521961692e-08f, -5.526861214e-08f, -5.531749713e-08f,
+-5.536627183e-08f, -5.541493618e-08f, -5.546349013e-08f, -5.551193362e-08f, -5.556026659e-08f, -5.560848901e-08f, -5.565660080e-08f, -5.570460191e-08f, -5.575249230e-08f, -5.580027190e-08f,
+-5.584794066e-08f, -5.589549854e-08f, -5.594294547e-08f, -5.599028141e-08f, -5.603750630e-08f, -5.608462008e-08f, -5.613162271e-08f, -5.617851414e-08f, -5.622529431e-08f, -5.627196317e-08f,
+-5.631852068e-08f, -5.636496676e-08f, -5.641130139e-08f, -5.645752450e-08f, -5.650363605e-08f, -5.654963599e-08f, -5.659552426e-08f, -5.664130081e-08f, -5.668696561e-08f, -5.673251858e-08f,
+-5.677795970e-08f, -5.682328890e-08f, -5.686850614e-08f, -5.691361137e-08f, -5.695860455e-08f, -5.700348561e-08f, -5.704825452e-08f, -5.709291123e-08f, -5.713745569e-08f, -5.718188785e-08f,
+-5.722620767e-08f, -5.727041510e-08f, -5.731451008e-08f, -5.735849259e-08f, -5.740236256e-08f, -5.744611995e-08f, -5.748976472e-08f, -5.753329682e-08f, -5.757671620e-08f, -5.762002283e-08f,
+-5.766321665e-08f, -5.770629762e-08f, -5.774926569e-08f, -5.779212083e-08f, -5.783486298e-08f, -5.787749211e-08f, -5.792000816e-08f, -5.796241110e-08f, -5.800470088e-08f, -5.804687746e-08f,
+-5.808894079e-08f, -5.813089084e-08f, -5.817272756e-08f, -5.821445090e-08f, -5.825606083e-08f, -5.829755730e-08f, -5.833894028e-08f, -5.838020972e-08f, -5.842136557e-08f, -5.846240781e-08f,
+-5.850333638e-08f, -5.854415125e-08f, -5.858485237e-08f, -5.862543971e-08f, -5.866591323e-08f, -5.870627288e-08f, -5.874651863e-08f, -5.878665044e-08f, -5.882666826e-08f, -5.886657207e-08f,
+-5.890636181e-08f, -5.894603746e-08f, -5.898559897e-08f, -5.902504630e-08f, -5.906437943e-08f, -5.910359830e-08f, -5.914270288e-08f, -5.918169314e-08f, -5.922056904e-08f, -5.925933054e-08f,
+-5.929797760e-08f, -5.933651020e-08f, -5.937492828e-08f, -5.941323182e-08f, -5.945142078e-08f, -5.948949513e-08f, -5.952745482e-08f, -5.956529983e-08f, -5.960303012e-08f, -5.964064565e-08f,
+-5.967814639e-08f, -5.971553231e-08f, -5.975280337e-08f, -5.978995954e-08f, -5.982700078e-08f, -5.986392706e-08f, -5.990073835e-08f, -5.993743462e-08f, -5.997401582e-08f, -6.001048194e-08f,
+-6.004683293e-08f, -6.008306877e-08f, -6.011918942e-08f, -6.015519485e-08f, -6.019108503e-08f, -6.022685992e-08f, -6.026251951e-08f, -6.029806375e-08f, -6.033349261e-08f, -6.036880607e-08f,
+-6.040400410e-08f, -6.043908666e-08f, -6.047405372e-08f, -6.050890526e-08f, -6.054364125e-08f, -6.057826165e-08f, -6.061276644e-08f, -6.064715559e-08f, -6.068142907e-08f, -6.071558685e-08f,
+-6.074962890e-08f, -6.078355520e-08f, -6.081736572e-08f, -6.085106043e-08f, -6.088463930e-08f, -6.091810231e-08f, -6.095144943e-08f, -6.098468063e-08f, -6.101779588e-08f, -6.105079517e-08f,
+-6.108367846e-08f, -6.111644573e-08f, -6.114909695e-08f, -6.118163210e-08f, -6.121405115e-08f, -6.124635408e-08f, -6.127854086e-08f, -6.131061146e-08f, -6.134256587e-08f, -6.137440407e-08f,
+-6.140612601e-08f, -6.143773169e-08f, -6.146922108e-08f, -6.150059415e-08f, -6.153185088e-08f, -6.156299125e-08f, -6.159401524e-08f, -6.162492283e-08f, -6.165571398e-08f, -6.168638869e-08f,
+-6.171694692e-08f, -6.174738866e-08f, -6.177771389e-08f, -6.180792258e-08f, -6.183801471e-08f, -6.186799027e-08f, -6.189784922e-08f, -6.192759156e-08f, -6.195721726e-08f, -6.198672631e-08f,
+-6.201611867e-08f, -6.204539434e-08f, -6.207455329e-08f, -6.210359550e-08f, -6.213252096e-08f, -6.216132965e-08f, -6.219002155e-08f, -6.221859663e-08f, -6.224705489e-08f, -6.227539630e-08f,
+-6.230362085e-08f, -6.233172852e-08f, -6.235971930e-08f, -6.238759316e-08f, -6.241535008e-08f, -6.244299006e-08f, -6.247051308e-08f, -6.249791911e-08f, -6.252520815e-08f, -6.255238018e-08f,
+-6.257943518e-08f, -6.260637314e-08f, -6.263319405e-08f, -6.265989788e-08f, -6.268648462e-08f, -6.271295427e-08f, -6.273930679e-08f, -6.276554219e-08f, -6.279166045e-08f, -6.281766155e-08f,
+-6.284354548e-08f, -6.286931223e-08f, -6.289496178e-08f, -6.292049413e-08f, -6.294590925e-08f, -6.297120714e-08f, -6.299638779e-08f, -6.302145117e-08f, -6.304639729e-08f, -6.307122613e-08f,
+-6.309593768e-08f, -6.312053192e-08f, -6.314500886e-08f, -6.316936847e-08f, -6.319361074e-08f, -6.321773567e-08f, -6.324174325e-08f, -6.326563346e-08f, -6.328940629e-08f, -6.331306175e-08f,
+-6.333659981e-08f, -6.336002047e-08f, -6.338332373e-08f, -6.340650956e-08f, -6.342957797e-08f, -6.345252894e-08f, -6.347536247e-08f, -6.349807855e-08f, -6.352067718e-08f, -6.354315833e-08f,
+-6.356552202e-08f, -6.358776823e-08f, -6.360989695e-08f, -6.363190818e-08f, -6.365380192e-08f, -6.367557815e-08f, -6.369723687e-08f, -6.371877807e-08f, -6.374020175e-08f, -6.376150791e-08f,
+-6.378269654e-08f, -6.380376763e-08f, -6.382472119e-08f, -6.384555719e-08f, -6.386627565e-08f, -6.388687656e-08f, -6.390735992e-08f, -6.392772571e-08f, -6.394797394e-08f, -6.396810460e-08f,
+-6.398811770e-08f, -6.400801323e-08f, -6.402779118e-08f, -6.404745155e-08f, -6.406699435e-08f, -6.408641957e-08f, -6.410572721e-08f, -6.412491726e-08f, -6.414398973e-08f, -6.416294462e-08f,
+-6.418178192e-08f, -6.420050164e-08f, -6.421910376e-08f, -6.423758831e-08f, -6.425595526e-08f, -6.427420463e-08f, -6.429233641e-08f, -6.431035061e-08f, -6.432824722e-08f, -6.434602625e-08f,
+-6.436368770e-08f, -6.438123157e-08f, -6.439865786e-08f, -6.441596658e-08f, -6.443315771e-08f, -6.445023128e-08f, -6.446718728e-08f, -6.448402571e-08f, -6.450074658e-08f, -6.451734988e-08f,
+-6.453383563e-08f, -6.455020382e-08f, -6.456645447e-08f, -6.458258757e-08f, -6.459860312e-08f, -6.461450114e-08f, -6.463028163e-08f, -6.464594459e-08f, -6.466149003e-08f, -6.467691794e-08f,
+-6.469222835e-08f, -6.470742125e-08f, -6.472249665e-08f, -6.473745455e-08f, -6.475229497e-08f, -6.476701790e-08f, -6.478162336e-08f, -6.479611135e-08f, -6.481048188e-08f, -6.482473496e-08f,
+-6.483887059e-08f, -6.485288878e-08f, -6.486678954e-08f, -6.488057287e-08f, -6.489423879e-08f, -6.490778731e-08f, -6.492121843e-08f, -6.493453216e-08f, -6.494772851e-08f, -6.496080750e-08f,
+-6.497376912e-08f, -6.498661339e-08f, -6.499934032e-08f, -6.501194992e-08f, -6.502444220e-08f, -6.503681717e-08f, -6.504907485e-08f, -6.506121523e-08f, -6.507323834e-08f, -6.508514418e-08f,
+-6.509693277e-08f, -6.510860412e-08f, -6.512015824e-08f, -6.513159514e-08f, -6.514291484e-08f, -6.515411734e-08f, -6.516520267e-08f, -6.517617083e-08f, -6.518702183e-08f, -6.519775570e-08f,
+-6.520837244e-08f, -6.521887206e-08f, -6.522925459e-08f, -6.523952003e-08f, -6.524966841e-08f, -6.525969972e-08f, -6.526961400e-08f, -6.527941126e-08f, -6.528909150e-08f, -6.529865475e-08f,
+-6.530810102e-08f, -6.531743032e-08f, -6.532664268e-08f, -6.533573811e-08f, -6.534471663e-08f, -6.535357825e-08f, -6.536232298e-08f, -6.537095085e-08f, -6.537946188e-08f, -6.538785608e-08f,
+-6.539613347e-08f, -6.540429406e-08f, -6.541233788e-08f, -6.542026494e-08f, -6.542807526e-08f, -6.543576886e-08f, -6.544334577e-08f, -6.545080599e-08f, -6.545814954e-08f, -6.546537646e-08f,
+-6.547248675e-08f, -6.547948044e-08f, -6.548635754e-08f, -6.549311808e-08f, -6.549976208e-08f, -6.550628956e-08f, -6.551270053e-08f, -6.551899503e-08f, -6.552517307e-08f, -6.553123467e-08f,
+-6.553717985e-08f, -6.554300864e-08f, -6.554872106e-08f, -6.555431713e-08f, -6.555979687e-08f, -6.556516031e-08f, -6.557040747e-08f, -6.557553837e-08f, -6.558055304e-08f, -6.558545149e-08f,
+-6.559023376e-08f, -6.559489986e-08f, -6.559944982e-08f, -6.560388367e-08f, -6.560820142e-08f, -6.561240311e-08f, -6.561648876e-08f, -6.562045839e-08f, -6.562431204e-08f, -6.562804971e-08f,
+-6.563167145e-08f, -6.563517727e-08f, -6.563856720e-08f, -6.564184127e-08f, -6.564499951e-08f, -6.564804194e-08f, -6.565096858e-08f, -6.565377947e-08f, -6.565647464e-08f, -6.565905410e-08f,
+-6.566151789e-08f, -6.566386604e-08f, -6.566609857e-08f, -6.566821551e-08f, -6.567021689e-08f, -6.567210274e-08f, -6.567387309e-08f, -6.567552796e-08f, -6.567706739e-08f, -6.567849141e-08f,
+-6.567980004e-08f, -6.568099331e-08f, -6.568207126e-08f, -6.568303391e-08f, -6.568388130e-08f, -6.568461345e-08f, -6.568523040e-08f, -6.568573218e-08f, -6.568611881e-08f, -6.568639034e-08f,
+-6.568654679e-08f, -6.568658819e-08f, -6.568651457e-08f, -6.568632597e-08f, -6.568602243e-08f, -6.568560396e-08f, -6.568507061e-08f, -6.568442241e-08f, -6.568365938e-08f, -6.568278157e-08f,
+-6.568178901e-08f, -6.568068173e-08f, -6.567945977e-08f, -6.567812315e-08f, -6.567667192e-08f, -6.567510610e-08f, -6.567342574e-08f, -6.567163087e-08f, -6.566972152e-08f, -6.566769772e-08f,
+-6.566555952e-08f, -6.566330695e-08f, -6.566094004e-08f, -6.565845883e-08f, -6.565586336e-08f, -6.565315366e-08f, -6.565032977e-08f, -6.564739173e-08f, -6.564433957e-08f, -6.564117333e-08f,
+-6.563789305e-08f, -6.563449877e-08f, -6.563099052e-08f, -6.562736833e-08f, -6.562363226e-08f, -6.561978234e-08f, -6.561581860e-08f, -6.561174108e-08f, -6.560754983e-08f, -6.560324488e-08f,
+-6.559882628e-08f, -6.559429405e-08f, -6.558964825e-08f, -6.558488890e-08f, -6.558001606e-08f, -6.557502975e-08f, -6.556993003e-08f, -6.556471693e-08f, -6.555939049e-08f, -6.555395076e-08f,
+-6.554839777e-08f, -6.554273156e-08f, -6.553695218e-08f, -6.553105967e-08f, -6.552505408e-08f, -6.551893543e-08f, -6.551270378e-08f, -6.550635917e-08f, -6.549990164e-08f, -6.549333123e-08f,
+-6.548664799e-08f, -6.547985196e-08f, -6.547294318e-08f, -6.546592170e-08f, -6.545878755e-08f, -6.545154079e-08f, -6.544418146e-08f, -6.543670960e-08f, -6.542912526e-08f, -6.542142848e-08f,
+-6.541361931e-08f, -6.540569779e-08f, -6.539766397e-08f, -6.538951788e-08f, -6.538125959e-08f, -6.537288913e-08f, -6.536440655e-08f, -6.535581190e-08f, -6.534710522e-08f, -6.533828655e-08f,
+-6.532935596e-08f, -6.532031347e-08f, -6.531115915e-08f, -6.530189303e-08f, -6.529251517e-08f, -6.528302561e-08f, -6.527342440e-08f, -6.526371159e-08f, -6.525388722e-08f, -6.524395135e-08f,
+-6.523390402e-08f, -6.522374528e-08f, -6.521347519e-08f, -6.520309378e-08f, -6.519260112e-08f, -6.518199724e-08f, -6.517128220e-08f, -6.516045605e-08f, -6.514951884e-08f, -6.513847062e-08f,
+-6.512731144e-08f, -6.511604134e-08f, -6.510466039e-08f, -6.509316863e-08f, -6.508156611e-08f, -6.506985288e-08f, -6.505802900e-08f, -6.504609452e-08f, -6.503404949e-08f, -6.502189395e-08f,
+-6.500962797e-08f, -6.499725160e-08f, -6.498476489e-08f, -6.497216788e-08f, -6.495946064e-08f, -6.494664322e-08f, -6.493371566e-08f, -6.492067803e-08f, -6.490753038e-08f, -6.489427276e-08f,
+-6.488090523e-08f, -6.486742783e-08f, -6.485384063e-08f, -6.484014368e-08f, -6.482633703e-08f, -6.481242074e-08f, -6.479839486e-08f, -6.478425945e-08f, -6.477001456e-08f, -6.475566026e-08f,
+-6.474119658e-08f, -6.472662361e-08f, -6.471194137e-08f, -6.469714995e-08f, -6.468224938e-08f, -6.466723973e-08f, -6.465212105e-08f, -6.463689341e-08f, -6.462155685e-08f, -6.460611144e-08f,
+-6.459055723e-08f, -6.457489429e-08f, -6.455912266e-08f, -6.454324241e-08f, -6.452725359e-08f, -6.451115627e-08f, -6.449495050e-08f, -6.447863635e-08f, -6.446221386e-08f, -6.444568310e-08f,
+-6.442904413e-08f, -6.441229701e-08f, -6.439544180e-08f, -6.437847855e-08f, -6.436140734e-08f, -6.434422821e-08f, -6.432694123e-08f, -6.430954645e-08f, -6.429204395e-08f, -6.427443378e-08f,
+-6.425671600e-08f, -6.423889068e-08f, -6.422095786e-08f, -6.420291763e-08f, -6.418477003e-08f, -6.416651513e-08f, -6.414815299e-08f, -6.412968368e-08f, -6.411110725e-08f, -6.409242377e-08f,
+-6.407363331e-08f, -6.405473592e-08f, -6.403573167e-08f, -6.401662061e-08f, -6.399740283e-08f, -6.397807837e-08f, -6.395864731e-08f, -6.393910970e-08f, -6.391946561e-08f, -6.389971510e-08f,
+-6.387985825e-08f, -6.385989511e-08f, -6.383982575e-08f, -6.381965023e-08f, -6.379936862e-08f, -6.377898099e-08f, -6.375848739e-08f, -6.373788791e-08f, -6.371718259e-08f, -6.369637151e-08f,
+-6.367545473e-08f, -6.365443233e-08f, -6.363330436e-08f, -6.361207089e-08f, -6.359073200e-08f, -6.356928774e-08f, -6.354773819e-08f, -6.352608341e-08f, -6.350432346e-08f, -6.348245843e-08f,
+-6.346048837e-08f, -6.343841335e-08f, -6.341623345e-08f, -6.339394872e-08f, -6.337155924e-08f, -6.334906508e-08f, -6.332646631e-08f, -6.330376299e-08f, -6.328095519e-08f, -6.325804299e-08f,
+-6.323502645e-08f, -6.321190564e-08f, -6.318868063e-08f, -6.316535150e-08f, -6.314191831e-08f, -6.311838113e-08f, -6.309474004e-08f, -6.307099510e-08f, -6.304714639e-08f, -6.302319397e-08f,
+-6.299913792e-08f, -6.297497831e-08f, -6.295071520e-08f, -6.292634868e-08f, -6.290187882e-08f, -6.287730568e-08f, -6.285262933e-08f, -6.282784986e-08f, -6.280296733e-08f, -6.277798182e-08f,
+-6.275289339e-08f, -6.272770212e-08f, -6.270240809e-08f, -6.267701137e-08f, -6.265151203e-08f, -6.262591014e-08f, -6.260020578e-08f, -6.257439902e-08f, -6.254848993e-08f, -6.252247860e-08f,
+-6.249636510e-08f, -6.247014949e-08f, -6.244383186e-08f, -6.241741227e-08f, -6.239089081e-08f, -6.236426755e-08f, -6.233754257e-08f, -6.231071593e-08f, -6.228378772e-08f, -6.225675801e-08f,
+-6.222962688e-08f, -6.220239441e-08f, -6.217506066e-08f, -6.214762572e-08f, -6.212008967e-08f, -6.209245257e-08f, -6.206471452e-08f, -6.203687557e-08f, -6.200893582e-08f, -6.198089534e-08f,
+-6.195275420e-08f, -6.192451249e-08f, -6.189617028e-08f, -6.186772765e-08f, -6.183918467e-08f, -6.181054144e-08f, -6.178179802e-08f, -6.175295449e-08f, -6.172401094e-08f, -6.169496744e-08f,
+-6.166582406e-08f, -6.163658090e-08f, -6.160723803e-08f, -6.157779553e-08f, -6.154825348e-08f, -6.151861195e-08f, -6.148887103e-08f, -6.145903081e-08f, -6.142909135e-08f, -6.139905274e-08f,
+-6.136891506e-08f, -6.133867840e-08f, -6.130834282e-08f, -6.127790842e-08f, -6.124737528e-08f, -6.121674347e-08f, -6.118601307e-08f, -6.115518418e-08f, -6.112425687e-08f, -6.109323122e-08f,
+-6.106210732e-08f, -6.103088525e-08f, -6.099956508e-08f, -6.096814691e-08f, -6.093663082e-08f, -6.090501688e-08f, -6.087330518e-08f, -6.084149581e-08f, -6.080958885e-08f, -6.077758438e-08f,
+-6.074548249e-08f, -6.071328325e-08f, -6.068098676e-08f, -6.064859310e-08f, -6.061610235e-08f, -6.058351459e-08f, -6.055082991e-08f, -6.051804841e-08f, -6.048517015e-08f, -6.045219522e-08f,
+-6.041912372e-08f, -6.038595572e-08f, -6.035269132e-08f, -6.031933059e-08f, -6.028587362e-08f, -6.025232050e-08f, -6.021867132e-08f, -6.018492615e-08f, -6.015108510e-08f, -6.011714824e-08f,
+-6.008311565e-08f, -6.004898744e-08f, -6.001476368e-08f, -5.998044446e-08f, -5.994602987e-08f, -5.991151999e-08f, -5.987691491e-08f, -5.984221473e-08f, -5.980741953e-08f, -5.977252939e-08f,
+-5.973754440e-08f, -5.970246466e-08f, -5.966729025e-08f, -5.963202126e-08f, -5.959665777e-08f, -5.956119989e-08f, -5.952564768e-08f, -5.949000126e-08f, -5.945426070e-08f, -5.941842609e-08f,
+-5.938249752e-08f, -5.934647508e-08f, -5.931035887e-08f, -5.927414897e-08f, -5.923784547e-08f, -5.920144847e-08f, -5.916495804e-08f, -5.912837429e-08f, -5.909169731e-08f, -5.905492717e-08f,
+-5.901806399e-08f, -5.898110784e-08f, -5.894405881e-08f, -5.890691701e-08f, -5.886968251e-08f, -5.883235542e-08f, -5.879493582e-08f, -5.875742381e-08f, -5.871981947e-08f, -5.868212290e-08f,
+-5.864433420e-08f, -5.860645345e-08f, -5.856848074e-08f, -5.853041618e-08f, -5.849225984e-08f, -5.845401184e-08f, -5.841567225e-08f, -5.837724117e-08f, -5.833871869e-08f, -5.830010492e-08f,
+-5.826139993e-08f, -5.822260384e-08f, -5.818371672e-08f, -5.814473867e-08f, -5.810566979e-08f, -5.806651018e-08f, -5.802725992e-08f, -5.798791911e-08f, -5.794848785e-08f, -5.790896623e-08f,
+-5.786935434e-08f, -5.782965229e-08f, -5.778986016e-08f, -5.774997805e-08f, -5.771000606e-08f, -5.766994428e-08f, -5.762979281e-08f, -5.758955174e-08f, -5.754922117e-08f, -5.750880120e-08f,
+-5.746829192e-08f, -5.742769343e-08f, -5.738700583e-08f, -5.734622920e-08f, -5.730536366e-08f, -5.726440929e-08f, -5.722336620e-08f, -5.718223447e-08f, -5.714101422e-08f, -5.709970552e-08f,
+-5.705830849e-08f, -5.701682322e-08f, -5.697524981e-08f, -5.693358836e-08f, -5.689183896e-08f, -5.685000171e-08f, -5.680807671e-08f, -5.676606406e-08f, -5.672396386e-08f, -5.668177620e-08f,
+-5.663950119e-08f, -5.659713893e-08f, -5.655468951e-08f, -5.651215303e-08f, -5.646952959e-08f, -5.642681929e-08f, -5.638402224e-08f, -5.634113853e-08f, -5.629816825e-08f, -5.625511152e-08f,
+-5.621196843e-08f, -5.616873908e-08f, -5.612542358e-08f, -5.608202201e-08f, -5.603853449e-08f, -5.599496111e-08f, -5.595130197e-08f, -5.590755718e-08f, -5.586372684e-08f, -5.581981104e-08f,
+-5.577580990e-08f, -5.573172350e-08f, -5.568755196e-08f, -5.564329537e-08f, -5.559895383e-08f, -5.555452745e-08f, -5.551001634e-08f, -5.546542058e-08f, -5.542074029e-08f, -5.537597557e-08f,
+-5.533112651e-08f, -5.528619323e-08f, -5.524117582e-08f, -5.519607439e-08f, -5.515088904e-08f, -5.510561987e-08f, -5.506026699e-08f, -5.501483051e-08f, -5.496931051e-08f, -5.492370712e-08f,
+-5.487802042e-08f, -5.483225053e-08f, -5.478639756e-08f, -5.474046159e-08f, -5.469444274e-08f, -5.464834112e-08f, -5.460215682e-08f, -5.455588995e-08f, -5.450954062e-08f, -5.446310893e-08f,
+-5.441659498e-08f, -5.436999889e-08f, -5.432332075e-08f, -5.427656067e-08f, -5.422971876e-08f, -5.418279512e-08f, -5.413578986e-08f, -5.408870309e-08f, -5.404153490e-08f, -5.399428541e-08f,
+-5.394695472e-08f, -5.389954293e-08f, -5.385205016e-08f, -5.380447651e-08f, -5.375682209e-08f, -5.370908700e-08f, -5.366127136e-08f, -5.361337526e-08f, -5.356539881e-08f, -5.351734212e-08f,
+-5.346920531e-08f, -5.342098847e-08f, -5.337269171e-08f, -5.332431514e-08f, -5.327585888e-08f, -5.322732302e-08f, -5.317870767e-08f, -5.313001294e-08f, -5.308123895e-08f, -5.303238579e-08f,
+-5.298345358e-08f, -5.293444243e-08f, -5.288535244e-08f, -5.283618372e-08f, -5.278693638e-08f, -5.273761054e-08f, -5.268820629e-08f, -5.263872375e-08f, -5.258916303e-08f, -5.253952423e-08f,
+-5.248980747e-08f, -5.244001286e-08f, -5.239014050e-08f, -5.234019050e-08f, -5.229016298e-08f, -5.224005805e-08f, -5.218987581e-08f, -5.213961637e-08f, -5.208927985e-08f, -5.203886636e-08f,
+-5.198837600e-08f, -5.193780889e-08f, -5.188716513e-08f, -5.183644484e-08f, -5.178564814e-08f, -5.173477512e-08f, -5.168382590e-08f, -5.163280059e-08f, -5.158169931e-08f, -5.153052216e-08f,
+-5.147926926e-08f, -5.142794072e-08f, -5.137653664e-08f, -5.132505715e-08f, -5.127350235e-08f, -5.122187236e-08f, -5.117016728e-08f, -5.111838723e-08f, -5.106653233e-08f, -5.101460268e-08f,
+-5.096259839e-08f, -5.091051959e-08f, -5.085836638e-08f, -5.080613887e-08f, -5.075383718e-08f, -5.070146143e-08f, -5.064901171e-08f, -5.059648816e-08f, -5.054389087e-08f, -5.049121997e-08f,
+-5.043847557e-08f, -5.038565777e-08f, -5.033276670e-08f, -5.027980248e-08f, -5.022676520e-08f, -5.017365499e-08f, -5.012047196e-08f, -5.006721623e-08f, -5.001388790e-08f, -4.996048710e-08f,
+-4.990701394e-08f, -4.985346852e-08f, -4.979985098e-08f, -4.974616142e-08f, -4.969239996e-08f, -4.963856670e-08f, -4.958466178e-08f, -4.953068529e-08f, -4.947663737e-08f, -4.942251811e-08f,
+-4.936832765e-08f, -4.931406609e-08f, -4.925973354e-08f, -4.920533014e-08f, -4.915085598e-08f, -4.909631119e-08f, -4.904169588e-08f, -4.898701017e-08f, -4.893225418e-08f, -4.887742801e-08f,
+-4.882253180e-08f, -4.876756565e-08f, -4.871252968e-08f, -4.865742400e-08f, -4.860224874e-08f, -4.854700401e-08f, -4.849168993e-08f, -4.843630661e-08f, -4.838085417e-08f, -4.832533274e-08f,
+-4.826974242e-08f, -4.821408333e-08f, -4.815835559e-08f, -4.810255932e-08f, -4.804669464e-08f, -4.799076166e-08f, -4.793476050e-08f, -4.787869128e-08f, -4.782255412e-08f, -4.776634913e-08f,
+-4.771007644e-08f, -4.765373616e-08f, -4.759732840e-08f, -4.754085330e-08f, -4.748431096e-08f, -4.742770151e-08f, -4.737102506e-08f, -4.731428174e-08f, -4.725747165e-08f, -4.720059493e-08f,
+-4.714365169e-08f, -4.708664204e-08f, -4.702956611e-08f, -4.697242402e-08f, -4.691521589e-08f, -4.685794183e-08f, -4.680060196e-08f, -4.674319641e-08f, -4.668572529e-08f, -4.662818873e-08f,
+-4.657058684e-08f, -4.651291975e-08f, -4.645518757e-08f, -4.639739042e-08f, -4.633952843e-08f, -4.628160171e-08f, -4.622361038e-08f, -4.616555457e-08f, -4.610743440e-08f, -4.604924998e-08f,
+-4.599100144e-08f, -4.593268889e-08f, -4.587431246e-08f, -4.581587227e-08f, -4.575736844e-08f, -4.569880109e-08f, -4.564017035e-08f, -4.558147632e-08f, -4.552271914e-08f, -4.546389893e-08f,
+-4.540501580e-08f, -4.534606988e-08f, -4.528706129e-08f, -4.522799015e-08f, -4.516885659e-08f, -4.510966072e-08f, -4.505040267e-08f, -4.499108255e-08f, -4.493170050e-08f, -4.487225663e-08f,
+-4.481275107e-08f, -4.475318393e-08f, -4.469355534e-08f, -4.463386542e-08f, -4.457411430e-08f, -4.451430210e-08f, -4.445442893e-08f, -4.439449493e-08f, -4.433450021e-08f, -4.427444491e-08f,
+-4.421432913e-08f, -4.415415300e-08f, -4.409391665e-08f, -4.403362021e-08f, -4.397326378e-08f, -4.391284750e-08f, -4.385237149e-08f, -4.379183588e-08f, -4.373124078e-08f, -4.367058632e-08f,
+-4.360987263e-08f, -4.354909982e-08f, -4.348826802e-08f, -4.342737736e-08f, -4.336642796e-08f, -4.330541994e-08f, -4.324435342e-08f, -4.318322854e-08f, -4.312204542e-08f, -4.306080417e-08f,
+-4.299950492e-08f, -4.293814781e-08f, -4.287673294e-08f, -4.281526046e-08f, -4.275373047e-08f, -4.269214311e-08f, -4.263049850e-08f, -4.256879677e-08f, -4.250703804e-08f, -4.244522243e-08f,
+-4.238335008e-08f, -4.232142109e-08f, -4.225943561e-08f, -4.219739376e-08f, -4.213529565e-08f, -4.207314143e-08f, -4.201093120e-08f, -4.194866510e-08f, -4.188634325e-08f, -4.182396578e-08f,
+-4.176153281e-08f, -4.169904447e-08f, -4.163650089e-08f, -4.157390219e-08f, -4.151124849e-08f, -4.144853993e-08f, -4.138577662e-08f, -4.132295870e-08f, -4.126008629e-08f, -4.119715952e-08f,
+-4.113417851e-08f, -4.107114339e-08f, -4.100805428e-08f, -4.094491132e-08f, -4.088171462e-08f, -4.081846432e-08f, -4.075516054e-08f, -4.069180341e-08f, -4.062839305e-08f, -4.056492959e-08f,
+-4.050141317e-08f, -4.043784389e-08f, -4.037422190e-08f, -4.031054732e-08f, -4.024682028e-08f, -4.018304090e-08f, -4.011920930e-08f, -4.005532563e-08f, -3.999139000e-08f, -3.992740254e-08f,
+-3.986336339e-08f, -3.979927265e-08f, -3.973513048e-08f, -3.967093698e-08f, -3.960669230e-08f, -3.954239655e-08f, -3.947804987e-08f, -3.941365238e-08f, -3.934920421e-08f, -3.928470549e-08f,
+-3.922015634e-08f, -3.915555690e-08f, -3.909090729e-08f, -3.902620765e-08f, -3.896145809e-08f, -3.889665874e-08f, -3.883180975e-08f, -3.876691122e-08f, -3.870196330e-08f, -3.863696610e-08f,
+-3.857191977e-08f, -3.850682442e-08f, -3.844168019e-08f, -3.837648720e-08f, -3.831124558e-08f, -3.824595546e-08f, -3.818061698e-08f, -3.811523025e-08f, -3.804979541e-08f, -3.798431259e-08f,
+-3.791878191e-08f, -3.785320351e-08f, -3.778757751e-08f, -3.772190405e-08f, -3.765618324e-08f, -3.759041523e-08f, -3.752460013e-08f, -3.745873809e-08f, -3.739282922e-08f, -3.732687366e-08f,
+-3.726087154e-08f, -3.719482299e-08f, -3.712872813e-08f, -3.706258710e-08f, -3.699640002e-08f, -3.693016703e-08f, -3.686388825e-08f, -3.679756382e-08f, -3.673119386e-08f, -3.666477851e-08f,
+-3.659831789e-08f, -3.653181213e-08f, -3.646526137e-08f, -3.639866573e-08f, -3.633202534e-08f, -3.626534034e-08f, -3.619861085e-08f, -3.613183701e-08f, -3.606501894e-08f, -3.599815677e-08f,
+-3.593125064e-08f, -3.586430068e-08f, -3.579730701e-08f, -3.573026976e-08f, -3.566318908e-08f, -3.559606507e-08f, -3.552889789e-08f, -3.546168765e-08f, -3.539443449e-08f, -3.532713854e-08f,
+-3.525979993e-08f, -3.519241879e-08f, -3.512499526e-08f, -3.505752945e-08f, -3.499002150e-08f, -3.492247155e-08f, -3.485487973e-08f, -3.478724616e-08f, -3.471957097e-08f, -3.465185430e-08f,
+-3.458409628e-08f, -3.451629705e-08f, -3.444845672e-08f, -3.438057543e-08f, -3.431265331e-08f, -3.424469050e-08f, -3.417668713e-08f, -3.410864332e-08f, -3.404055921e-08f, -3.397243493e-08f,
+-3.390427061e-08f, -3.383606638e-08f, -3.376782237e-08f, -3.369953872e-08f, -3.363121556e-08f, -3.356285302e-08f, -3.349445122e-08f, -3.342601031e-08f, -3.335753041e-08f, -3.328901165e-08f,
+-3.322045417e-08f, -3.315185810e-08f, -3.308322357e-08f, -3.301455071e-08f, -3.294583965e-08f, -3.287709053e-08f, -3.280830348e-08f, -3.273947862e-08f, -3.267061610e-08f, -3.260171604e-08f,
+-3.253277857e-08f, -3.246380383e-08f, -3.239479196e-08f, -3.232574307e-08f, -3.225665731e-08f, -3.218753480e-08f, -3.211837568e-08f, -3.204918008e-08f, -3.197994813e-08f, -3.191067997e-08f,
+-3.184137572e-08f, -3.177203553e-08f, -3.170265951e-08f, -3.163324781e-08f, -3.156380056e-08f, -3.149431788e-08f, -3.142479992e-08f, -3.135524680e-08f, -3.128565865e-08f, -3.121603562e-08f,
+-3.114637782e-08f, -3.107668540e-08f, -3.100695848e-08f, -3.093719721e-08f, -3.086740170e-08f, -3.079757210e-08f, -3.072770854e-08f, -3.065781115e-08f, -3.058788006e-08f, -3.051791540e-08f,
+-3.044791731e-08f, -3.037788593e-08f, -3.030782137e-08f, -3.023772379e-08f, -3.016759330e-08f, -3.009743004e-08f, -3.002723415e-08f, -2.995700576e-08f, -2.988674500e-08f, -2.981645200e-08f,
+-2.974612690e-08f, -2.967576982e-08f, -2.960538091e-08f, -2.953496030e-08f, -2.946450812e-08f, -2.939402449e-08f, -2.932350957e-08f, -2.925296347e-08f, -2.918238633e-08f, -2.911177828e-08f,
+-2.904113947e-08f, -2.897047001e-08f, -2.889977005e-08f, -2.882903971e-08f, -2.875827914e-08f, -2.868748846e-08f, -2.861666780e-08f, -2.854581731e-08f, -2.847493711e-08f, -2.840402733e-08f,
+-2.833308812e-08f, -2.826211960e-08f, -2.819112190e-08f, -2.812009517e-08f, -2.804903953e-08f, -2.797795511e-08f, -2.790684206e-08f, -2.783570049e-08f, -2.776453056e-08f, -2.769333239e-08f,
+-2.762210610e-08f, -2.755085185e-08f, -2.747956976e-08f, -2.740825996e-08f, -2.733692259e-08f, -2.726555778e-08f, -2.719416566e-08f, -2.712274637e-08f, -2.705130005e-08f, -2.697982682e-08f,
+-2.690832682e-08f, -2.683680018e-08f, -2.676524703e-08f, -2.669366752e-08f, -2.662206177e-08f, -2.655042991e-08f, -2.647877209e-08f, -2.640708842e-08f, -2.633537906e-08f, -2.626364413e-08f,
+-2.619188376e-08f, -2.612009809e-08f, -2.604828725e-08f, -2.597645138e-08f, -2.590459061e-08f, -2.583270507e-08f, -2.576079489e-08f, -2.568886022e-08f, -2.561690118e-08f, -2.554491791e-08f,
+-2.547291054e-08f, -2.540087920e-08f, -2.532882403e-08f, -2.525674517e-08f, -2.518464274e-08f, -2.511251688e-08f, -2.504036773e-08f, -2.496819541e-08f, -2.489600006e-08f, -2.482378182e-08f,
+-2.475154081e-08f, -2.467927718e-08f, -2.460699105e-08f, -2.453468257e-08f, -2.446235185e-08f, -2.438999905e-08f, -2.431762428e-08f, -2.424522769e-08f, -2.417280940e-08f, -2.410036956e-08f,
+-2.402790830e-08f, -2.395542574e-08f, -2.388292203e-08f, -2.381039729e-08f, -2.373785166e-08f, -2.366528528e-08f, -2.359269828e-08f, -2.352009079e-08f, -2.344746294e-08f, -2.337481487e-08f,
+-2.330214672e-08f, -2.322945861e-08f, -2.315675068e-08f, -2.308402307e-08f, -2.301127590e-08f, -2.293850932e-08f, -2.286572345e-08f, -2.279291843e-08f, -2.272009440e-08f, -2.264725147e-08f,
+-2.257438980e-08f, -2.250150952e-08f, -2.242861075e-08f, -2.235569363e-08f, -2.228275829e-08f, -2.220980488e-08f, -2.213683351e-08f, -2.206384433e-08f, -2.199083747e-08f, -2.191781307e-08f,
+-2.184477125e-08f, -2.177171215e-08f, -2.169863590e-08f, -2.162554264e-08f, -2.155243250e-08f, -2.147930562e-08f, -2.140616213e-08f, -2.133300215e-08f, -2.125982583e-08f, -2.118663330e-08f,
+-2.111342470e-08f, -2.104020015e-08f, -2.096695978e-08f, -2.089370374e-08f, -2.082043216e-08f, -2.074714517e-08f, -2.067384290e-08f, -2.060052548e-08f, -2.052719306e-08f, -2.045384576e-08f,
+-2.038048372e-08f, -2.030710707e-08f, -2.023371594e-08f, -2.016031047e-08f, -2.008689079e-08f, -2.001345704e-08f, -1.994000934e-08f, -1.986654783e-08f, -1.979307265e-08f, -1.971958393e-08f,
+-1.964608179e-08f, -1.957256638e-08f, -1.949903783e-08f, -1.942549627e-08f, -1.935194183e-08f, -1.927837465e-08f, -1.920479485e-08f, -1.913120259e-08f, -1.905759798e-08f, -1.898398115e-08f,
+-1.891035226e-08f, -1.883671141e-08f, -1.876305876e-08f, -1.868939443e-08f, -1.861571856e-08f, -1.854203127e-08f, -1.846833270e-08f, -1.839462299e-08f, -1.832090227e-08f, -1.824717067e-08f,
+-1.817342832e-08f, -1.809967536e-08f, -1.802591191e-08f, -1.795213812e-08f, -1.787835412e-08f, -1.780456003e-08f, -1.773075600e-08f, -1.765694214e-08f, -1.758311861e-08f, -1.750928552e-08f,
+-1.743544302e-08f, -1.736159123e-08f, -1.728773029e-08f, -1.721386033e-08f, -1.713998148e-08f, -1.706609387e-08f, -1.699219765e-08f, -1.691829294e-08f, -1.684437987e-08f, -1.677045858e-08f,
+-1.669652919e-08f, -1.662259185e-08f, -1.654864668e-08f, -1.647469381e-08f, -1.640073339e-08f, -1.632676554e-08f, -1.625279039e-08f, -1.617880807e-08f, -1.610481873e-08f, -1.603082248e-08f,
+-1.595681947e-08f, -1.588280982e-08f, -1.580879367e-08f, -1.573477115e-08f, -1.566074239e-08f, -1.558670753e-08f, -1.551266669e-08f, -1.543862001e-08f, -1.536456762e-08f, -1.529050965e-08f,
+-1.521644624e-08f, -1.514237752e-08f, -1.506830361e-08f, -1.499422465e-08f, -1.492014078e-08f, -1.484605212e-08f, -1.477195880e-08f, -1.469786096e-08f, -1.462375874e-08f, -1.454965225e-08f,
+-1.447554164e-08f, -1.440142703e-08f, -1.432730856e-08f, -1.425318636e-08f, -1.417906056e-08f, -1.410493129e-08f, -1.403079868e-08f, -1.395666286e-08f, -1.388252398e-08f, -1.380838215e-08f,
+-1.373423751e-08f, -1.366009019e-08f, -1.358594032e-08f, -1.351178803e-08f, -1.343763346e-08f, -1.336347674e-08f, -1.328931799e-08f, -1.321515735e-08f, -1.314099495e-08f, -1.306683091e-08f,
+-1.299266538e-08f, -1.291849849e-08f, -1.284433035e-08f, -1.277016112e-08f, -1.269599090e-08f, -1.262181984e-08f, -1.254764807e-08f, -1.247347572e-08f, -1.239930292e-08f, -1.232512980e-08f,
+-1.225095648e-08f, -1.217678311e-08f, -1.210260981e-08f, -1.202843672e-08f, -1.195426395e-08f, -1.188009165e-08f, -1.180591994e-08f, -1.173174896e-08f, -1.165757883e-08f, -1.158340969e-08f,
+-1.150924167e-08f, -1.143507489e-08f, -1.136090948e-08f, -1.128674558e-08f, -1.121258332e-08f, -1.113842283e-08f, -1.106426423e-08f, -1.099010766e-08f, -1.091595325e-08f, -1.084180113e-08f,
+-1.076765142e-08f, -1.069350426e-08f, -1.061935977e-08f, -1.054521809e-08f, -1.047107935e-08f, -1.039694368e-08f, -1.032281120e-08f, -1.024868204e-08f, -1.017455635e-08f, -1.010043423e-08f,
+-1.002631583e-08f, -9.952201277e-09f, -9.878090694e-09f, -9.803984214e-09f, -9.729881966e-09f, -9.655784079e-09f, -9.581690682e-09f, -9.507601906e-09f, -9.433517878e-09f, -9.359438728e-09f,
+-9.285364585e-09f, -9.211295578e-09f, -9.137231837e-09f, -9.063173489e-09f, -8.989120664e-09f, -8.915073491e-09f, -8.841032099e-09f, -8.766996616e-09f, -8.692967171e-09f, -8.618943893e-09f,
+-8.544926911e-09f, -8.470916352e-09f, -8.396912345e-09f, -8.322915019e-09f, -8.248924503e-09f, -8.174940924e-09f, -8.100964412e-09f, -8.026995093e-09f, -7.953033097e-09f, -7.879078552e-09f,
+-7.805131585e-09f, -7.731192325e-09f, -7.657260900e-09f, -7.583337438e-09f, -7.509422067e-09f, -7.435514914e-09f, -7.361616108e-09f, -7.287725776e-09f, -7.213844046e-09f, -7.139971045e-09f,
+-7.066106902e-09f, -6.992251743e-09f, -6.918405696e-09f, -6.844568890e-09f, -6.770741450e-09f, -6.696923505e-09f, -6.623115181e-09f, -6.549316607e-09f, -6.475527909e-09f, -6.401749214e-09f,
+-6.327980649e-09f, -6.254222342e-09f, -6.180474419e-09f, -6.106737008e-09f, -6.033010234e-09f, -5.959294226e-09f, -5.885589109e-09f, -5.811895011e-09f, -5.738212058e-09f, -5.664540376e-09f,
+-5.590880092e-09f, -5.517231333e-09f, -5.443594226e-09f, -5.369968895e-09f, -5.296355468e-09f, -5.222754071e-09f, -5.149164830e-09f, -5.075587872e-09f, -5.002023321e-09f, -4.928471305e-09f,
+-4.854931949e-09f, -4.781405380e-09f, -4.707891722e-09f, -4.634391102e-09f, -4.560903645e-09f, -4.487429478e-09f, -4.413968725e-09f, -4.340521513e-09f, -4.267087966e-09f, -4.193668210e-09f,
+-4.120262371e-09f, -4.046870574e-09f, -3.973492943e-09f, -3.900129605e-09f, -3.826780684e-09f, -3.753446306e-09f, -3.680126595e-09f, -3.606821676e-09f, -3.533531674e-09f, -3.460256714e-09f,
+-3.386996921e-09f, -3.313752419e-09f, -3.240523333e-09f, -3.167309788e-09f, -3.094111908e-09f, -3.020929817e-09f, -2.947763640e-09f, -2.874613501e-09f, -2.801479524e-09f, -2.728361834e-09f,
+-2.655260554e-09f, -2.582175809e-09f, -2.509107722e-09f, -2.436056418e-09f, -2.363022021e-09f, -2.290004653e-09f, -2.217004440e-09f, -2.144021504e-09f, -2.071055969e-09f, -1.998107958e-09f,
+-1.925177596e-09f, -1.852265005e-09f, -1.779370308e-09f, -1.706493630e-09f, -1.633635093e-09f, -1.560794820e-09f, -1.487972934e-09f, -1.415169559e-09f, -1.342384817e-09f, -1.269618831e-09f,
+-1.196871723e-09f, -1.124143617e-09f, -1.051434636e-09f, -9.787449008e-10f, -9.060745350e-10f, -8.334236608e-10f, -7.607924005e-10f, -6.881808766e-10f, -6.155892111e-10f, -5.430175262e-10f,
+-4.704659440e-10f, -3.979345865e-10f, -3.254235756e-10f, -2.529330332e-10f, -1.804630812e-10f, -1.080138411e-10f, -3.558543463e-11f, 3.682201658e-11f, 1.092083911e-10f, 1.815735674e-10f,
+2.539174242e-10f, 3.262398402e-10f, 3.985406942e-10f, 4.708198650e-10f, 5.430772316e-10f, 6.153126730e-10f, 6.875260683e-10f, 7.597172966e-10f, 8.318862371e-10f, 9.040327691e-10f,
+9.761567721e-10f, 1.048258125e-09f, 1.120336709e-09f, 1.192392402e-09f, 1.264425083e-09f, 1.336434634e-09f, 1.408420934e-09f, 1.480383862e-09f, 1.552323299e-09f, 1.624239125e-09f,
+1.696131219e-09f, 1.767999463e-09f, 1.839843736e-09f, 1.911663918e-09f, 1.983459891e-09f, 2.055231534e-09f, 2.126978728e-09f, 2.198701355e-09f, 2.270399294e-09f, 2.342072426e-09f,
+2.413720633e-09f, 2.485343796e-09f, 2.556941794e-09f, 2.628514511e-09f, 2.700061826e-09f, 2.771583621e-09f, 2.843079777e-09f, 2.914550177e-09f, 2.985994701e-09f, 3.057413231e-09f,
+3.128805649e-09f, 3.200171836e-09f, 3.271511675e-09f, 3.342825047e-09f, 3.414111835e-09f, 3.485371920e-09f, 3.556605185e-09f, 3.627811511e-09f, 3.698990782e-09f, 3.770142880e-09f,
+3.841267687e-09f, 3.912365086e-09f, 3.983434959e-09f, 4.054477189e-09f, 4.125491660e-09f, 4.196478253e-09f, 4.267436852e-09f, 4.338367341e-09f, 4.409269602e-09f, 4.480143518e-09f,
+4.550988973e-09f, 4.621805851e-09f, 4.692594034e-09f, 4.763353407e-09f, 4.834083853e-09f, 4.904785255e-09f, 4.975457498e-09f, 5.046100466e-09f, 5.116714043e-09f, 5.187298112e-09f,
+5.257852558e-09f, 5.328377265e-09f, 5.398872118e-09f, 5.469337001e-09f, 5.539771799e-09f, 5.610176395e-09f, 5.680550675e-09f, 5.750894524e-09f, 5.821207827e-09f, 5.891490468e-09f,
+5.961742333e-09f, 6.031963306e-09f, 6.102153273e-09f, 6.172312120e-09f, 6.242439731e-09f, 6.312535992e-09f, 6.382600789e-09f, 6.452634008e-09f, 6.522635533e-09f, 6.592605252e-09f,
+6.662543049e-09f, 6.732448812e-09f, 6.802322425e-09f, 6.872163776e-09f, 6.941972751e-09f, 7.011749235e-09f, 7.081493117e-09f, 7.151204281e-09f, 7.220882614e-09f, 7.290528005e-09f,
+7.360140338e-09f, 7.429719502e-09f, 7.499265383e-09f, 7.568777868e-09f, 7.638256845e-09f, 7.707702201e-09f, 7.777113823e-09f, 7.846491599e-09f, 7.915835417e-09f, 7.985145163e-09f,
+8.054420726e-09f, 8.123661994e-09f, 8.192868854e-09f, 8.262041195e-09f, 8.331178904e-09f, 8.400281871e-09f, 8.469349983e-09f, 8.538383128e-09f, 8.607381196e-09f, 8.676344074e-09f,
+8.745271653e-09f, 8.814163819e-09f, 8.883020463e-09f, 8.951841473e-09f, 9.020626738e-09f, 9.089376147e-09f, 9.158089591e-09f, 9.226766957e-09f, 9.295408136e-09f, 9.364013017e-09f,
+9.432581490e-09f, 9.501113444e-09f, 9.569608770e-09f, 9.638067357e-09f, 9.706489095e-09f, 9.774873875e-09f, 9.843221586e-09f, 9.911532119e-09f, 9.979805365e-09f, 1.004804121e-08f,
+1.011623956e-08f, 1.018440028e-08f, 1.025252329e-08f, 1.032060845e-08f, 1.038865568e-08f, 1.045666485e-08f, 1.052463587e-08f, 1.059256861e-08f, 1.066046297e-08f, 1.072831885e-08f,
+1.079613614e-08f, 1.086391472e-08f, 1.093165449e-08f, 1.099935534e-08f, 1.106701717e-08f, 1.113463985e-08f, 1.120222330e-08f, 1.126976740e-08f, 1.133727203e-08f, 1.140473710e-08f,
+1.147216250e-08f, 1.153954812e-08f, 1.160689385e-08f, 1.167419959e-08f, 1.174146522e-08f, 1.180869064e-08f, 1.187587576e-08f, 1.194302044e-08f, 1.201012460e-08f, 1.207718813e-08f,
+1.214421091e-08f, 1.221119285e-08f, 1.227813383e-08f, 1.234503375e-08f, 1.241189251e-08f, 1.247870999e-08f, 1.254548610e-08f, 1.261222073e-08f, 1.267891376e-08f, 1.274556511e-08f,
+1.281217465e-08f, 1.287874229e-08f, 1.294526792e-08f, 1.301175143e-08f, 1.307819272e-08f, 1.314459170e-08f, 1.321094824e-08f, 1.327726224e-08f, 1.334353361e-08f, 1.340976224e-08f,
+1.347594802e-08f, 1.354209085e-08f, 1.360819063e-08f, 1.367424724e-08f, 1.374026059e-08f, 1.380623058e-08f, 1.387215710e-08f, 1.393804004e-08f, 1.400387930e-08f, 1.406967479e-08f,
+1.413542639e-08f, 1.420113400e-08f, 1.426679753e-08f, 1.433241686e-08f, 1.439799190e-08f, 1.446352254e-08f, 1.452900867e-08f, 1.459445021e-08f, 1.465984704e-08f, 1.472519906e-08f,
+1.479050617e-08f, 1.485576827e-08f, 1.492098526e-08f, 1.498615703e-08f, 1.505128348e-08f, 1.511636452e-08f, 1.518140003e-08f, 1.524638993e-08f, 1.531133410e-08f, 1.537623245e-08f,
+1.544108487e-08f, 1.550589126e-08f, 1.557065153e-08f, 1.563536557e-08f, 1.570003329e-08f, 1.576465457e-08f, 1.582922933e-08f, 1.589375746e-08f, 1.595823885e-08f, 1.602267342e-08f,
+1.608706106e-08f, 1.615140167e-08f, 1.621569515e-08f, 1.627994141e-08f, 1.634414033e-08f, 1.640829183e-08f, 1.647239581e-08f, 1.653645215e-08f, 1.660046078e-08f, 1.666442158e-08f,
+1.672833446e-08f, 1.679219931e-08f, 1.685601605e-08f, 1.691978457e-08f, 1.698350477e-08f, 1.704717656e-08f, 1.711079984e-08f, 1.717437451e-08f, 1.723790047e-08f, 1.730137762e-08f,
+1.736480587e-08f, 1.742818511e-08f, 1.749151526e-08f, 1.755479622e-08f, 1.761802788e-08f, 1.768121014e-08f, 1.774434293e-08f, 1.780742613e-08f, 1.787045964e-08f, 1.793344338e-08f,
+1.799637725e-08f, 1.805926115e-08f, 1.812209498e-08f, 1.818487865e-08f, 1.824761205e-08f, 1.831029511e-08f, 1.837292771e-08f, 1.843550977e-08f, 1.849804119e-08f, 1.856052187e-08f,
+1.862295172e-08f, 1.868533064e-08f, 1.874765853e-08f, 1.880993532e-08f, 1.887216088e-08f, 1.893433514e-08f, 1.899645800e-08f, 1.905852937e-08f, 1.912054914e-08f, 1.918251723e-08f,
+1.924443353e-08f, 1.930629797e-08f, 1.936811044e-08f, 1.942987085e-08f, 1.949157910e-08f, 1.955323511e-08f, 1.961483877e-08f, 1.967639000e-08f, 1.973788871e-08f, 1.979933479e-08f,
+1.986072816e-08f, 1.992206872e-08f, 1.998335638e-08f, 2.004459105e-08f, 2.010577264e-08f, 2.016690104e-08f, 2.022797619e-08f, 2.028899797e-08f, 2.034996629e-08f, 2.041088107e-08f,
+2.047174222e-08f, 2.053254964e-08f, 2.059330323e-08f, 2.065400292e-08f, 2.071464861e-08f, 2.077524020e-08f, 2.083577760e-08f, 2.089626074e-08f, 2.095668950e-08f, 2.101706381e-08f,
+2.107738357e-08f, 2.113764870e-08f, 2.119785910e-08f, 2.125801467e-08f, 2.131811535e-08f, 2.137816102e-08f, 2.143815161e-08f, 2.149808701e-08f, 2.155796716e-08f, 2.161779194e-08f,
+2.167756128e-08f, 2.173727509e-08f, 2.179693327e-08f, 2.185653574e-08f, 2.191608241e-08f, 2.197557319e-08f, 2.203500799e-08f, 2.209438672e-08f, 2.215370930e-08f, 2.221297564e-08f,
+2.227218564e-08f, 2.233133923e-08f, 2.239043630e-08f, 2.244947679e-08f, 2.250846059e-08f, 2.256738762e-08f, 2.262625780e-08f, 2.268507103e-08f, 2.274382723e-08f, 2.280252631e-08f,
+2.286116819e-08f, 2.291975277e-08f, 2.297827998e-08f, 2.303674973e-08f, 2.309516192e-08f, 2.315351648e-08f, 2.321181331e-08f, 2.327005234e-08f, 2.332823347e-08f, 2.338635663e-08f,
+2.344442171e-08f, 2.350242865e-08f, 2.356037735e-08f, 2.361826773e-08f, 2.367609971e-08f, 2.373387319e-08f, 2.379158810e-08f, 2.384924434e-08f, 2.390684185e-08f, 2.396438052e-08f,
+2.402186028e-08f, 2.407928104e-08f, 2.413664272e-08f, 2.419394524e-08f, 2.425118851e-08f, 2.430837244e-08f, 2.436549696e-08f, 2.442256199e-08f, 2.447956742e-08f, 2.453651320e-08f,
+2.459339922e-08f, 2.465022542e-08f, 2.470699170e-08f, 2.476369798e-08f, 2.482034419e-08f, 2.487693023e-08f, 2.493345603e-08f, 2.498992151e-08f, 2.504632658e-08f, 2.510267116e-08f,
+2.515895517e-08f, 2.521517853e-08f, 2.527134116e-08f, 2.532744297e-08f, 2.538348388e-08f, 2.543946382e-08f, 2.549538271e-08f, 2.555124045e-08f, 2.560703698e-08f, 2.566277221e-08f,
+2.571844605e-08f, 2.577405844e-08f, 2.582960929e-08f, 2.588509852e-08f, 2.594052605e-08f, 2.599589181e-08f, 2.605119570e-08f, 2.610643766e-08f, 2.616161760e-08f, 2.621673544e-08f,
+2.627179111e-08f, 2.632678453e-08f, 2.638171561e-08f, 2.643658428e-08f, 2.649139047e-08f, 2.654613408e-08f, 2.660081505e-08f, 2.665543330e-08f, 2.670998874e-08f, 2.676448130e-08f,
+2.681891091e-08f, 2.687327748e-08f, 2.692758094e-08f, 2.698182121e-08f, 2.703599821e-08f, 2.709011187e-08f, 2.714416212e-08f, 2.719814886e-08f, 2.725207203e-08f, 2.730593155e-08f,
+2.735972734e-08f, 2.741345933e-08f, 2.746712744e-08f, 2.752073160e-08f, 2.757427173e-08f, 2.762774775e-08f, 2.768115959e-08f, 2.773450718e-08f, 2.778779043e-08f, 2.784100928e-08f,
+2.789416364e-08f, 2.794725345e-08f, 2.800027863e-08f, 2.805323910e-08f, 2.810613479e-08f, 2.815896563e-08f, 2.821173154e-08f, 2.826443245e-08f, 2.831706828e-08f, 2.836963896e-08f,
+2.842214441e-08f, 2.847458457e-08f, 2.852695936e-08f, 2.857926871e-08f, 2.863151254e-08f, 2.868369078e-08f, 2.873580336e-08f, 2.878785020e-08f, 2.883983124e-08f, 2.889174639e-08f,
+2.894359560e-08f, 2.899537878e-08f, 2.904709586e-08f, 2.909874678e-08f, 2.915033146e-08f, 2.920184983e-08f, 2.925330182e-08f, 2.930468735e-08f, 2.935600636e-08f, 2.940725877e-08f,
+2.945844452e-08f, 2.950956353e-08f, 2.956061574e-08f, 2.961160106e-08f, 2.966251944e-08f, 2.971337080e-08f, 2.976415508e-08f, 2.981487219e-08f, 2.986552208e-08f, 2.991610467e-08f,
+2.996661989e-08f, 3.001706768e-08f, 3.006744797e-08f, 3.011776067e-08f, 3.016800574e-08f, 3.021818310e-08f, 3.026829267e-08f, 3.031833440e-08f, 3.036830821e-08f, 3.041821403e-08f,
+3.046805180e-08f, 3.051782145e-08f, 3.056752292e-08f, 3.061715612e-08f, 3.066672100e-08f, 3.071621750e-08f, 3.076564553e-08f, 3.081500504e-08f, 3.086429595e-08f, 3.091351821e-08f,
+3.096267174e-08f, 3.101175648e-08f, 3.106077236e-08f, 3.110971932e-08f, 3.115859729e-08f, 3.120740620e-08f, 3.125614598e-08f, 3.130481658e-08f, 3.135341793e-08f, 3.140194996e-08f,
+3.145041260e-08f, 3.149880580e-08f, 3.154712948e-08f, 3.159538359e-08f, 3.164356805e-08f, 3.169168280e-08f, 3.173972778e-08f, 3.178770292e-08f, 3.183560817e-08f, 3.188344345e-08f,
+3.193120870e-08f, 3.197890386e-08f, 3.202652887e-08f, 3.207408366e-08f, 3.212156816e-08f, 3.216898232e-08f, 3.221632608e-08f, 3.226359936e-08f, 3.231080211e-08f, 3.235793427e-08f,
+3.240499576e-08f, 3.245198654e-08f, 3.249890653e-08f, 3.254575569e-08f, 3.259253393e-08f, 3.263924121e-08f, 3.268587746e-08f, 3.273244262e-08f, 3.277893663e-08f, 3.282535942e-08f,
+3.287171094e-08f, 3.291799113e-08f, 3.296419993e-08f, 3.301033727e-08f, 3.305640309e-08f, 3.310239734e-08f, 3.314831995e-08f, 3.319417086e-08f, 3.323995002e-08f, 3.328565737e-08f,
+3.333129284e-08f, 3.337685638e-08f, 3.342234792e-08f, 3.346776742e-08f, 3.351311480e-08f, 3.355839001e-08f, 3.360359300e-08f, 3.364872370e-08f, 3.369378205e-08f, 3.373876800e-08f,
+3.378368149e-08f, 3.382852246e-08f, 3.387329085e-08f, 3.391798661e-08f, 3.396260968e-08f, 3.400716000e-08f, 3.405163751e-08f, 3.409604216e-08f, 3.414037389e-08f, 3.418463265e-08f,
+3.422881837e-08f, 3.427293100e-08f, 3.431697049e-08f, 3.436093677e-08f, 3.440482980e-08f, 3.444864951e-08f, 3.449239585e-08f, 3.453606877e-08f, 3.457966821e-08f, 3.462319411e-08f,
+3.466664642e-08f, 3.471002509e-08f, 3.475333005e-08f, 3.479656126e-08f, 3.483971867e-08f, 3.488280220e-08f, 3.492581182e-08f, 3.496874747e-08f, 3.501160909e-08f, 3.505439663e-08f,
+3.509711004e-08f, 3.513974926e-08f, 3.518231425e-08f, 3.522480493e-08f, 3.526722128e-08f, 3.530956322e-08f, 3.535183071e-08f, 3.539402369e-08f, 3.543614212e-08f, 3.547818594e-08f,
+3.552015510e-08f, 3.556204954e-08f, 3.560386922e-08f, 3.564561409e-08f, 3.568728408e-08f, 3.572887915e-08f, 3.577039925e-08f, 3.581184433e-08f, 3.585321434e-08f, 3.589450922e-08f,
+3.593572893e-08f, 3.597687341e-08f, 3.601794262e-08f, 3.605893650e-08f, 3.609985500e-08f, 3.614069808e-08f, 3.618146568e-08f, 3.622215776e-08f, 3.626277426e-08f, 3.630331514e-08f,
+3.634378034e-08f, 3.638416982e-08f, 3.642448353e-08f, 3.646472142e-08f, 3.650488345e-08f, 3.654496955e-08f, 3.658497969e-08f, 3.662491381e-08f, 3.666477188e-08f, 3.670455383e-08f,
+3.674425963e-08f, 3.678388922e-08f, 3.682344257e-08f, 3.686291961e-08f, 3.690232030e-08f, 3.694164460e-08f, 3.698089247e-08f, 3.702006384e-08f, 3.705915868e-08f, 3.709817695e-08f,
+3.713711858e-08f, 3.717598355e-08f, 3.721477179e-08f, 3.725348328e-08f, 3.729211795e-08f, 3.733067577e-08f, 3.736915669e-08f, 3.740756066e-08f, 3.744588764e-08f, 3.748413759e-08f,
+3.752231046e-08f, 3.756040621e-08f, 3.759842478e-08f, 3.763636615e-08f, 3.767423025e-08f, 3.771201706e-08f, 3.774972652e-08f, 3.778735859e-08f, 3.782491323e-08f, 3.786239039e-08f,
+3.789979004e-08f, 3.793711212e-08f, 3.797435660e-08f, 3.801152343e-08f, 3.804861257e-08f, 3.808562398e-08f, 3.812255762e-08f, 3.815941343e-08f, 3.819619139e-08f, 3.823289145e-08f,
+3.826951357e-08f, 3.830605770e-08f, 3.834252381e-08f, 3.837891185e-08f, 3.841522178e-08f, 3.845145356e-08f, 3.848760715e-08f, 3.852368252e-08f, 3.855967961e-08f, 3.859559839e-08f,
+3.863143882e-08f, 3.866720086e-08f, 3.870288447e-08f, 3.873848960e-08f, 3.877401623e-08f, 3.880946430e-08f, 3.884483379e-08f, 3.888012465e-08f, 3.891533684e-08f, 3.895047032e-08f,
+3.898552506e-08f, 3.902050102e-08f, 3.905539815e-08f, 3.909021643e-08f, 3.912495580e-08f, 3.915961624e-08f, 3.919419770e-08f, 3.922870016e-08f, 3.926312356e-08f, 3.929746788e-08f,
+3.933173307e-08f, 3.936591910e-08f, 3.940002594e-08f, 3.943405354e-08f, 3.946800187e-08f, 3.950187089e-08f, 3.953566057e-08f, 3.956937087e-08f, 3.960300175e-08f, 3.963655319e-08f,
+3.967002513e-08f, 3.970341755e-08f, 3.973673042e-08f, 3.976996369e-08f, 3.980311733e-08f, 3.983619131e-08f, 3.986918559e-08f, 3.990210014e-08f, 3.993493492e-08f, 3.996768990e-08f,
+4.000036504e-08f, 4.003296031e-08f, 4.006547568e-08f, 4.009791112e-08f, 4.013026658e-08f, 4.016254204e-08f, 4.019473746e-08f, 4.022685281e-08f, 4.025888806e-08f, 4.029084317e-08f,
+4.032271811e-08f, 4.035451285e-08f, 4.038622736e-08f, 4.041786160e-08f, 4.044941554e-08f, 4.048088916e-08f, 4.051228241e-08f, 4.054359527e-08f, 4.057482770e-08f, 4.060597968e-08f,
+4.063705117e-08f, 4.066804214e-08f, 4.069895257e-08f, 4.072978241e-08f, 4.076053165e-08f, 4.079120025e-08f, 4.082178817e-08f, 4.085229539e-08f, 4.088272189e-08f, 4.091306762e-08f,
+4.094333257e-08f, 4.097351669e-08f, 4.100361997e-08f, 4.103364236e-08f, 4.106358386e-08f, 4.109344441e-08f, 4.112322400e-08f, 4.115292260e-08f, 4.118254018e-08f, 4.121207671e-08f,
+4.124153216e-08f, 4.127090651e-08f, 4.130019972e-08f, 4.132941177e-08f, 4.135854263e-08f, 4.138759228e-08f, 4.141656069e-08f, 4.144544782e-08f, 4.147425366e-08f, 4.150297817e-08f,
+4.153162134e-08f, 4.156018313e-08f, 4.158866351e-08f, 4.161706247e-08f, 4.164537997e-08f, 4.167361599e-08f, 4.170177051e-08f, 4.172984349e-08f, 4.175783492e-08f, 4.178574477e-08f,
+4.181357300e-08f, 4.184131961e-08f, 4.186898456e-08f, 4.189656783e-08f, 4.192406939e-08f, 4.195148922e-08f, 4.197882730e-08f, 4.200608359e-08f, 4.203325809e-08f, 4.206035076e-08f,
+4.208736158e-08f, 4.211429053e-08f, 4.214113758e-08f, 4.216790272e-08f, 4.219458591e-08f, 4.222118714e-08f, 4.224770638e-08f, 4.227414361e-08f, 4.230049881e-08f, 4.232677195e-08f,
+4.235296302e-08f, 4.237907199e-08f, 4.240509884e-08f, 4.243104355e-08f, 4.245690610e-08f, 4.248268646e-08f, 4.250838462e-08f, 4.253400055e-08f, 4.255953423e-08f, 4.258498565e-08f,
+4.261035478e-08f, 4.263564160e-08f, 4.266084609e-08f, 4.268596824e-08f, 4.271100802e-08f, 4.273596541e-08f, 4.276084039e-08f, 4.278563294e-08f, 4.281034305e-08f, 4.283497069e-08f,
+4.285951585e-08f, 4.288397851e-08f, 4.290835864e-08f, 4.293265623e-08f, 4.295687127e-08f, 4.298100373e-08f, 4.300505359e-08f, 4.302902084e-08f, 4.305290546e-08f, 4.307670743e-08f,
+4.310042674e-08f, 4.312406336e-08f, 4.314761728e-08f, 4.317108849e-08f, 4.319447696e-08f, 4.321778268e-08f, 4.324100564e-08f, 4.326414581e-08f, 4.328720318e-08f, 4.331017774e-08f,
+4.333306946e-08f, 4.335587834e-08f, 4.337860435e-08f, 4.340124749e-08f, 4.342380773e-08f, 4.344628506e-08f, 4.346867947e-08f, 4.349099094e-08f, 4.351321946e-08f, 4.353536501e-08f,
+4.355742757e-08f, 4.357940714e-08f, 4.360130370e-08f, 4.362311723e-08f, 4.364484772e-08f, 4.366649516e-08f, 4.368805954e-08f, 4.370954083e-08f, 4.373093904e-08f, 4.375225414e-08f,
+4.377348612e-08f, 4.379463496e-08f, 4.381570067e-08f, 4.383668322e-08f, 4.385758260e-08f, 4.387839880e-08f, 4.389913180e-08f, 4.391978161e-08f, 4.394034819e-08f, 4.396083155e-08f,
+4.398123167e-08f, 4.400154854e-08f, 4.402178215e-08f, 4.404193248e-08f, 4.406199953e-08f, 4.408198329e-08f, 4.410188375e-08f, 4.412170089e-08f, 4.414143470e-08f, 4.416108518e-08f,
+4.418065232e-08f, 4.420013610e-08f, 4.421953651e-08f, 4.423885356e-08f, 4.425808722e-08f, 4.427723749e-08f, 4.429630436e-08f, 4.431528781e-08f, 4.433418785e-08f, 4.435300447e-08f,
+4.437173765e-08f, 4.439038738e-08f, 4.440895366e-08f, 4.442743649e-08f, 4.444583584e-08f, 4.446415173e-08f, 4.448238413e-08f, 4.450053304e-08f, 4.451859845e-08f, 4.453658036e-08f,
+4.455447876e-08f, 4.457229364e-08f, 4.459002500e-08f, 4.460767282e-08f, 4.462523712e-08f, 4.464271786e-08f, 4.466011506e-08f, 4.467742871e-08f, 4.469465879e-08f, 4.471180531e-08f,
+4.472886826e-08f, 4.474584763e-08f, 4.476274342e-08f, 4.477955562e-08f, 4.479628423e-08f, 4.481292925e-08f, 4.482949067e-08f, 4.484596848e-08f, 4.486236268e-08f, 4.487867327e-08f,
+4.489490025e-08f, 4.491104360e-08f, 4.492710333e-08f, 4.494307943e-08f, 4.495897190e-08f, 4.497478074e-08f, 4.499050594e-08f, 4.500614751e-08f, 4.502170542e-08f, 4.503717970e-08f,
+4.505257033e-08f, 4.506787731e-08f, 4.508310063e-08f, 4.509824031e-08f, 4.511329633e-08f, 4.512826869e-08f, 4.514315739e-08f, 4.515796243e-08f, 4.517268382e-08f, 4.518732154e-08f,
+4.520187560e-08f, 4.521634599e-08f, 4.523073272e-08f, 4.524503579e-08f, 4.525925519e-08f, 4.527339093e-08f, 4.528744300e-08f, 4.530141141e-08f, 4.531529615e-08f, 4.532909723e-08f,
+4.534281464e-08f, 4.535644839e-08f, 4.536999849e-08f, 4.538346491e-08f, 4.539684768e-08f, 4.541014680e-08f, 4.542336225e-08f, 4.543649405e-08f, 4.544954220e-08f, 4.546250669e-08f,
+4.547538753e-08f, 4.548818473e-08f, 4.550089829e-08f, 4.551352820e-08f, 4.552607447e-08f, 4.553853710e-08f, 4.555091610e-08f, 4.556321147e-08f, 4.557542321e-08f, 4.558755133e-08f,
+4.559959583e-08f, 4.561155671e-08f, 4.562343397e-08f, 4.563522763e-08f, 4.564693769e-08f, 4.565856414e-08f, 4.567010700e-08f, 4.568156626e-08f, 4.569294194e-08f, 4.570423403e-08f,
+4.571544255e-08f, 4.572656750e-08f, 4.573760888e-08f, 4.574856670e-08f, 4.575944096e-08f, 4.577023168e-08f, 4.578093885e-08f, 4.579156248e-08f, 4.580210258e-08f, 4.581255916e-08f,
+4.582293221e-08f, 4.583322176e-08f, 4.584342780e-08f, 4.585355034e-08f, 4.586358939e-08f, 4.587354495e-08f, 4.588341704e-08f, 4.589320566e-08f, 4.590291082e-08f, 4.591253252e-08f,
+4.592207078e-08f, 4.593152560e-08f, 4.594089699e-08f, 4.595018496e-08f, 4.595938951e-08f, 4.596851066e-08f, 4.597754842e-08f, 4.598650279e-08f, 4.599537379e-08f, 4.600416141e-08f,
+4.601286568e-08f, 4.602148660e-08f, 4.603002418e-08f, 4.603847843e-08f, 4.604684936e-08f, 4.605513698e-08f, 4.606334130e-08f, 4.607146233e-08f, 4.607950009e-08f, 4.608745457e-08f,
+4.609532581e-08f, 4.610311379e-08f, 4.611081854e-08f, 4.611844007e-08f, 4.612597839e-08f, 4.613343350e-08f, 4.614080543e-08f, 4.614809418e-08f, 4.615529977e-08f, 4.616242220e-08f,
+4.616946149e-08f, 4.617641766e-08f, 4.618329071e-08f, 4.619008066e-08f, 4.619678752e-08f, 4.620341130e-08f, 4.620995202e-08f, 4.621640969e-08f, 4.622278432e-08f, 4.622907593e-08f,
+4.623528453e-08f, 4.624141013e-08f, 4.624745275e-08f, 4.625341241e-08f, 4.625928911e-08f, 4.626508288e-08f, 4.627079371e-08f, 4.627642164e-08f, 4.628196668e-08f, 4.628742884e-08f,
+4.629280813e-08f, 4.629810457e-08f, 4.630331818e-08f, 4.630844897e-08f, 4.631349696e-08f, 4.631846216e-08f, 4.632334459e-08f, 4.632814427e-08f, 4.633286121e-08f, 4.633749543e-08f,
+4.634204694e-08f, 4.634651577e-08f, 4.635090192e-08f, 4.635520542e-08f, 4.635942628e-08f, 4.636356452e-08f, 4.636762016e-08f, 4.637159321e-08f, 4.637548370e-08f, 4.637929164e-08f,
+4.638301704e-08f, 4.638665994e-08f, 4.639022033e-08f, 4.639369825e-08f, 4.639709372e-08f, 4.640040674e-08f, 4.640363734e-08f, 4.640678554e-08f, 4.640985136e-08f, 4.641283482e-08f,
+4.641573593e-08f, 4.641855472e-08f, 4.642129120e-08f, 4.642394540e-08f, 4.642651733e-08f, 4.642900702e-08f, 4.643141448e-08f, 4.643373974e-08f, 4.643598282e-08f, 4.643814373e-08f,
+4.644022250e-08f, 4.644221915e-08f, 4.644413370e-08f, 4.644596617e-08f, 4.644771658e-08f, 4.644938496e-08f, 4.645097132e-08f, 4.645247569e-08f, 4.645389809e-08f, 4.645523853e-08f,
+4.645649706e-08f, 4.645767368e-08f, 4.645876841e-08f, 4.645978129e-08f, 4.646071233e-08f, 4.646156156e-08f, 4.646232900e-08f, 4.646301467e-08f, 4.646361859e-08f, 4.646414080e-08f,
+4.646458130e-08f, 4.646494014e-08f, 4.646521732e-08f, 4.646541288e-08f, 4.646552684e-08f, 4.646555922e-08f, 4.646551005e-08f, 4.646537935e-08f, 4.646516714e-08f, 4.646487346e-08f,
+4.646449832e-08f, 4.646404176e-08f, 4.646350379e-08f, 4.646288444e-08f, 4.646218374e-08f, 4.646140172e-08f, 4.646053839e-08f, 4.645959378e-08f, 4.645856793e-08f, 4.645746085e-08f,
+4.645627258e-08f, 4.645500314e-08f, 4.645365255e-08f, 4.645222085e-08f, 4.645070805e-08f, 4.644911419e-08f, 4.644743930e-08f, 4.644568340e-08f, 4.644384651e-08f, 4.644192867e-08f,
+4.643992991e-08f, 4.643785025e-08f, 4.643568971e-08f, 4.643344834e-08f, 4.643112615e-08f, 4.642872317e-08f, 4.642623944e-08f, 4.642367498e-08f, 4.642102981e-08f, 4.641830398e-08f,
+4.641549751e-08f, 4.641261042e-08f, 4.640964275e-08f, 4.640659452e-08f, 4.640346577e-08f, 4.640025652e-08f, 4.639696681e-08f, 4.639359667e-08f, 4.639014611e-08f, 4.638661519e-08f,
+4.638300392e-08f, 4.637931233e-08f, 4.637554046e-08f, 4.637168834e-08f, 4.636775600e-08f, 4.636374347e-08f, 4.635965077e-08f, 4.635547795e-08f, 4.635122503e-08f, 4.634689205e-08f,
+4.634247903e-08f, 4.633798602e-08f, 4.633341303e-08f, 4.632876010e-08f, 4.632402727e-08f, 4.631921456e-08f, 4.631432202e-08f, 4.630934966e-08f, 4.630429753e-08f, 4.629916566e-08f,
+4.629395408e-08f, 4.628866282e-08f, 4.628329192e-08f, 4.627784141e-08f, 4.627231133e-08f, 4.626670170e-08f, 4.626101256e-08f, 4.625524395e-08f, 4.624939590e-08f, 4.624346844e-08f,
+4.623746161e-08f, 4.623137544e-08f, 4.622520997e-08f, 4.621896523e-08f, 4.621264126e-08f, 4.620623809e-08f, 4.619975575e-08f, 4.619319429e-08f, 4.618655374e-08f, 4.617983412e-08f,
+4.617303549e-08f, 4.616615787e-08f, 4.615920130e-08f, 4.615216581e-08f, 4.614505145e-08f, 4.613785824e-08f, 4.613058624e-08f, 4.612323546e-08f, 4.611580595e-08f, 4.610829774e-08f,
+4.610071088e-08f, 4.609304539e-08f, 4.608530132e-08f, 4.607747871e-08f, 4.606957758e-08f, 4.606159799e-08f, 4.605353996e-08f, 4.604540353e-08f, 4.603718874e-08f, 4.602889564e-08f,
+4.602052425e-08f, 4.601207462e-08f, 4.600354678e-08f, 4.599494078e-08f, 4.598625665e-08f, 4.597749442e-08f, 4.596865415e-08f, 4.595973587e-08f, 4.595073962e-08f, 4.594166543e-08f,
+4.593251335e-08f, 4.592328342e-08f, 4.591397567e-08f, 4.590459015e-08f, 4.589512689e-08f, 4.588558594e-08f, 4.587596734e-08f, 4.586627113e-08f, 4.585649734e-08f, 4.584664602e-08f,
+4.583671720e-08f, 4.582671094e-08f, 4.581662727e-08f, 4.580646622e-08f, 4.579622786e-08f, 4.578591220e-08f, 4.577551930e-08f, 4.576504920e-08f, 4.575450194e-08f, 4.574387755e-08f,
+4.573317609e-08f, 4.572239760e-08f, 4.571154211e-08f, 4.570060967e-08f, 4.568960032e-08f, 4.567851411e-08f, 4.566735107e-08f, 4.565611126e-08f, 4.564479470e-08f, 4.563340146e-08f,
+4.562193156e-08f, 4.561038505e-08f, 4.559876198e-08f, 4.558706239e-08f, 4.557528633e-08f, 4.556343383e-08f, 4.555150494e-08f, 4.553949971e-08f, 4.552741817e-08f, 4.551526038e-08f,
+4.550302638e-08f, 4.549071621e-08f, 4.547832992e-08f, 4.546586755e-08f, 4.545332915e-08f, 4.544071475e-08f, 4.542802442e-08f, 4.541525819e-08f, 4.540241611e-08f, 4.538949822e-08f,
+4.537650457e-08f, 4.536343520e-08f, 4.535029017e-08f, 4.533706951e-08f, 4.532377327e-08f, 4.531040151e-08f, 4.529695426e-08f, 4.528343157e-08f, 4.526983349e-08f, 4.525616007e-08f,
+4.524241134e-08f, 4.522858737e-08f, 4.521468820e-08f, 4.520071386e-08f, 4.518666442e-08f, 4.517253992e-08f, 4.515834040e-08f, 4.514406592e-08f, 4.512971652e-08f, 4.511529225e-08f,
+4.510079315e-08f, 4.508621928e-08f, 4.507157068e-08f, 4.505684741e-08f, 4.504204951e-08f, 4.502717703e-08f, 4.501223001e-08f, 4.499720851e-08f, 4.498211258e-08f, 4.496694226e-08f,
+4.495169761e-08f, 4.493637867e-08f, 4.492098550e-08f, 4.490551813e-08f, 4.488997663e-08f, 4.487436104e-08f, 4.485867142e-08f, 4.484290780e-08f, 4.482707025e-08f, 4.481115881e-08f,
+4.479517354e-08f, 4.477911448e-08f, 4.476298168e-08f, 4.474677520e-08f, 4.473049508e-08f, 4.471414138e-08f, 4.469771414e-08f, 4.468121343e-08f, 4.466463929e-08f, 4.464799177e-08f,
+4.463127092e-08f, 4.461447679e-08f, 4.459760945e-08f, 4.458066893e-08f, 4.456365529e-08f, 4.454656859e-08f, 4.452940887e-08f, 4.451217618e-08f, 4.449487059e-08f, 4.447749214e-08f,
+4.446004089e-08f, 4.444251688e-08f, 4.442492017e-08f, 4.440725082e-08f, 4.438950887e-08f, 4.437169439e-08f, 4.435380741e-08f, 4.433584801e-08f, 4.431781622e-08f, 4.429971211e-08f,
+4.428153573e-08f, 4.426328713e-08f, 4.424496637e-08f, 4.422657349e-08f, 4.420810856e-08f, 4.418957163e-08f, 4.417096275e-08f, 4.415228198e-08f, 4.413352938e-08f, 4.411470499e-08f,
+4.409580887e-08f, 4.407684108e-08f, 4.405780167e-08f, 4.403869071e-08f, 4.401950823e-08f, 4.400025430e-08f, 4.398092898e-08f, 4.396153232e-08f, 4.394206437e-08f, 4.392252519e-08f,
+4.390291485e-08f, 4.388323338e-08f, 4.386348086e-08f, 4.384365733e-08f, 4.382376286e-08f, 4.380379749e-08f, 4.378376129e-08f, 4.376365432e-08f, 4.374347662e-08f, 4.372322827e-08f,
+4.370290930e-08f, 4.368251979e-08f, 4.366205978e-08f, 4.364152935e-08f, 4.362092853e-08f, 4.360025740e-08f, 4.357951600e-08f, 4.355870441e-08f, 4.353782267e-08f, 4.351687084e-08f,
+4.349584898e-08f, 4.347475715e-08f, 4.345359541e-08f, 4.343236381e-08f, 4.341106243e-08f, 4.338969130e-08f, 4.336825050e-08f, 4.334674008e-08f, 4.332516010e-08f, 4.330351062e-08f,
+4.328179169e-08f, 4.326000339e-08f, 4.323814577e-08f, 4.321621888e-08f, 4.319422279e-08f, 4.317215755e-08f, 4.315002324e-08f, 4.312781990e-08f, 4.310554759e-08f, 4.308320639e-08f,
+4.306079634e-08f, 4.303831751e-08f, 4.301576995e-08f, 4.299315374e-08f, 4.297046893e-08f, 4.294771557e-08f, 4.292489374e-08f, 4.290200349e-08f, 4.287904488e-08f, 4.285601798e-08f,
+4.283292285e-08f, 4.280975954e-08f, 4.278652812e-08f, 4.276322865e-08f, 4.273986120e-08f, 4.271642582e-08f, 4.269292257e-08f, 4.266935153e-08f, 4.264571274e-08f, 4.262200628e-08f,
+4.259823220e-08f, 4.257439057e-08f, 4.255048146e-08f, 4.252650491e-08f, 4.250246100e-08f, 4.247834979e-08f, 4.245417134e-08f, 4.242992571e-08f, 4.240561297e-08f, 4.238123318e-08f,
+4.235678641e-08f, 4.233227272e-08f, 4.230769216e-08f, 4.228304481e-08f, 4.225833073e-08f, 4.223354999e-08f, 4.220870264e-08f, 4.218378875e-08f, 4.215880838e-08f, 4.213376161e-08f,
+4.210864849e-08f, 4.208346908e-08f, 4.205822346e-08f, 4.203291169e-08f, 4.200753382e-08f, 4.198208994e-08f, 4.195658009e-08f, 4.193100436e-08f, 4.190536279e-08f, 4.187965546e-08f,
+4.185388244e-08f, 4.182804378e-08f, 4.180213956e-08f, 4.177616983e-08f, 4.175013467e-08f, 4.172403414e-08f, 4.169786831e-08f, 4.167163724e-08f, 4.164534100e-08f, 4.161897965e-08f,
+4.159255327e-08f, 4.156606191e-08f, 4.153950565e-08f, 4.151288454e-08f, 4.148619867e-08f, 4.145944809e-08f, 4.143263287e-08f, 4.140575307e-08f, 4.137880878e-08f, 4.135180004e-08f,
+4.132472693e-08f, 4.129758953e-08f, 4.127038788e-08f, 4.124312207e-08f, 4.121579215e-08f, 4.118839821e-08f, 4.116094030e-08f, 4.113341849e-08f, 4.110583285e-08f, 4.107818345e-08f,
+4.105047036e-08f, 4.102269364e-08f, 4.099485337e-08f, 4.096694961e-08f, 4.093898243e-08f, 4.091095189e-08f, 4.088285808e-08f, 4.085470106e-08f, 4.082648089e-08f, 4.079819764e-08f,
+4.076985139e-08f, 4.074144220e-08f, 4.071297015e-08f, 4.068443529e-08f, 4.065583771e-08f, 4.062717747e-08f, 4.059845464e-08f, 4.056966929e-08f, 4.054082149e-08f, 4.051191130e-08f,
+4.048293881e-08f, 4.045390408e-08f, 4.042480718e-08f, 4.039564818e-08f, 4.036642715e-08f, 4.033714416e-08f, 4.030779929e-08f, 4.027839259e-08f, 4.024892415e-08f, 4.021939404e-08f,
+4.018980231e-08f, 4.016014906e-08f, 4.013043434e-08f, 4.010065823e-08f, 4.007082080e-08f, 4.004092212e-08f, 4.001096226e-08f, 3.998094129e-08f, 3.995085929e-08f, 3.992071633e-08f,
+3.989051248e-08f, 3.986024780e-08f, 3.982992238e-08f, 3.979953628e-08f, 3.976908958e-08f, 3.973858235e-08f, 3.970801466e-08f, 3.967738658e-08f, 3.964669819e-08f, 3.961594956e-08f,
+3.958514076e-08f, 3.955427186e-08f, 3.952334293e-08f, 3.949235406e-08f, 3.946130531e-08f, 3.943019676e-08f, 3.939902847e-08f, 3.936780053e-08f, 3.933651300e-08f, 3.930516596e-08f,
+3.927375948e-08f, 3.924229363e-08f, 3.921076850e-08f, 3.917918415e-08f, 3.914754065e-08f, 3.911583809e-08f, 3.908407653e-08f, 3.905225604e-08f, 3.902037672e-08f, 3.898843861e-08f,
+3.895644181e-08f, 3.892438639e-08f, 3.889227241e-08f, 3.886009996e-08f, 3.882786911e-08f, 3.879557993e-08f, 3.876323250e-08f, 3.873082689e-08f, 3.869836318e-08f, 3.866584145e-08f,
+3.863326176e-08f, 3.860062420e-08f, 3.856792883e-08f, 3.853517574e-08f, 3.850236500e-08f, 3.846949669e-08f, 3.843657087e-08f, 3.840358764e-08f, 3.837054705e-08f, 3.833744919e-08f,
+3.830429414e-08f, 3.827108197e-08f, 3.823781275e-08f, 3.820448656e-08f, 3.817110349e-08f, 3.813766359e-08f, 3.810416696e-08f, 3.807061367e-08f, 3.803700379e-08f, 3.800333740e-08f,
+3.796961457e-08f, 3.793583539e-08f, 3.790199993e-08f, 3.786810827e-08f, 3.783416049e-08f, 3.780015665e-08f, 3.776609685e-08f, 3.773198115e-08f, 3.769780963e-08f, 3.766358238e-08f,
+3.762929946e-08f, 3.759496096e-08f, 3.756056695e-08f, 3.752611751e-08f, 3.749161272e-08f, 3.745705266e-08f, 3.742243740e-08f, 3.738776702e-08f, 3.735304161e-08f, 3.731826123e-08f,
+3.728342597e-08f, 3.724853590e-08f, 3.721359111e-08f, 3.717859167e-08f, 3.714353766e-08f, 3.710842916e-08f, 3.707326624e-08f, 3.703804899e-08f, 3.700277749e-08f, 3.696745181e-08f,
+3.693207203e-08f, 3.689663823e-08f, 3.686115050e-08f, 3.682560890e-08f, 3.679001352e-08f, 3.675436444e-08f, 3.671866174e-08f, 3.668290550e-08f, 3.664709579e-08f, 3.661123270e-08f,
+3.657531630e-08f, 3.653934668e-08f, 3.650332391e-08f, 3.646724808e-08f, 3.643111927e-08f, 3.639493754e-08f, 3.635870300e-08f, 3.632241571e-08f, 3.628607575e-08f, 3.624968321e-08f,
+3.621323816e-08f, 3.617674069e-08f, 3.614019088e-08f, 3.610358881e-08f, 3.606693455e-08f, 3.603022819e-08f, 3.599346981e-08f, 3.595665949e-08f, 3.591979731e-08f, 3.588288335e-08f,
+3.584591770e-08f, 3.580890043e-08f, 3.577183162e-08f, 3.573471136e-08f, 3.569753973e-08f, 3.566031681e-08f, 3.562304268e-08f, 3.558571742e-08f, 3.554834111e-08f, 3.551091384e-08f,
+3.547343568e-08f, 3.543590672e-08f, 3.539832705e-08f, 3.536069673e-08f, 3.532301586e-08f, 3.528528451e-08f, 3.524750278e-08f, 3.520967073e-08f, 3.517178845e-08f, 3.513385603e-08f,
+3.509587355e-08f, 3.505784109e-08f, 3.501975872e-08f, 3.498162655e-08f, 3.494344463e-08f, 3.490521307e-08f, 3.486693194e-08f, 3.482860133e-08f, 3.479022131e-08f, 3.475179198e-08f,
+3.471331341e-08f, 3.467478568e-08f, 3.463620888e-08f, 3.459758310e-08f, 3.455890841e-08f, 3.452018491e-08f, 3.448141266e-08f, 3.444259176e-08f, 3.440372229e-08f, 3.436480434e-08f,
+3.432583798e-08f, 3.428682330e-08f, 3.424776038e-08f, 3.420864932e-08f, 3.416949018e-08f, 3.413028306e-08f, 3.409102804e-08f, 3.405172520e-08f, 3.401237463e-08f, 3.397297641e-08f,
+3.393353063e-08f, 3.389403736e-08f, 3.385449670e-08f, 3.381490873e-08f, 3.377527353e-08f, 3.373559119e-08f, 3.369586179e-08f, 3.365608542e-08f, 3.361626216e-08f, 3.357639210e-08f,
+3.353647531e-08f, 3.349651189e-08f, 3.345650192e-08f, 3.341644549e-08f, 3.337634267e-08f, 3.333619356e-08f, 3.329599824e-08f, 3.325575680e-08f, 3.321546932e-08f, 3.317513588e-08f,
+3.313475657e-08f, 3.309433148e-08f, 3.305386070e-08f, 3.301334430e-08f, 3.297278237e-08f, 3.293217500e-08f, 3.289152228e-08f, 3.285082428e-08f, 3.281008110e-08f, 3.276929283e-08f,
+3.272845954e-08f, 3.268758132e-08f, 3.264665826e-08f, 3.260569045e-08f, 3.256467797e-08f, 3.252362091e-08f, 3.248251935e-08f, 3.244137338e-08f, 3.240018308e-08f, 3.235894855e-08f,
+3.231766987e-08f, 3.227634712e-08f, 3.223498040e-08f, 3.219356978e-08f, 3.215211536e-08f, 3.211061722e-08f, 3.206907545e-08f, 3.202749013e-08f, 3.198586136e-08f, 3.194418921e-08f,
+3.190247378e-08f, 3.186071515e-08f, 3.181891342e-08f, 3.177706866e-08f, 3.173518096e-08f, 3.169325041e-08f, 3.165127710e-08f, 3.160926112e-08f, 3.156720255e-08f, 3.152510148e-08f,
+3.148295800e-08f, 3.144077219e-08f, 3.139854415e-08f, 3.135627395e-08f, 3.131396170e-08f, 3.127160747e-08f, 3.122921135e-08f, 3.118677343e-08f, 3.114429380e-08f, 3.110177255e-08f,
+3.105920976e-08f, 3.101660552e-08f, 3.097395992e-08f, 3.093127306e-08f, 3.088854500e-08f, 3.084577586e-08f, 3.080296570e-08f, 3.076011463e-08f, 3.071722272e-08f, 3.067429007e-08f,
+3.063131677e-08f, 3.058830290e-08f, 3.054524855e-08f, 3.050215382e-08f, 3.045901878e-08f, 3.041584353e-08f, 3.037262816e-08f, 3.032937276e-08f, 3.028607741e-08f, 3.024274220e-08f,
+3.019936722e-08f, 3.015595256e-08f, 3.011249831e-08f, 3.006900456e-08f, 3.002547140e-08f, 2.998189891e-08f, 2.993828719e-08f, 2.989463633e-08f, 2.985094640e-08f, 2.980721751e-08f,
+2.976344974e-08f, 2.971964319e-08f, 2.967579793e-08f, 2.963191406e-08f, 2.958799167e-08f, 2.954403085e-08f, 2.950003169e-08f, 2.945599428e-08f, 2.941191870e-08f, 2.936780505e-08f,
+2.932365342e-08f, 2.927946389e-08f, 2.923523656e-08f, 2.919097151e-08f, 2.914666884e-08f, 2.910232863e-08f, 2.905795098e-08f, 2.901353597e-08f, 2.896908370e-08f, 2.892459425e-08f,
+2.888006772e-08f, 2.883550419e-08f, 2.879090376e-08f, 2.874626652e-08f, 2.870159254e-08f, 2.865688194e-08f, 2.861213479e-08f, 2.856735118e-08f, 2.852253121e-08f, 2.847767497e-08f,
+2.843278255e-08f, 2.838785403e-08f, 2.834288951e-08f, 2.829788909e-08f, 2.825285283e-08f, 2.820778085e-08f, 2.816267323e-08f, 2.811753006e-08f, 2.807235144e-08f, 2.802713744e-08f,
+2.798188817e-08f, 2.793660371e-08f, 2.789128416e-08f, 2.784592960e-08f, 2.780054013e-08f, 2.775511583e-08f, 2.770965681e-08f, 2.766416314e-08f, 2.761863493e-08f, 2.757307225e-08f,
+2.752747521e-08f, 2.748184390e-08f, 2.743617839e-08f, 2.739047880e-08f, 2.734474520e-08f, 2.729897769e-08f, 2.725317636e-08f, 2.720734130e-08f, 2.716147261e-08f, 2.711557037e-08f,
+2.706963467e-08f, 2.702366561e-08f, 2.697766328e-08f, 2.693162777e-08f, 2.688555917e-08f, 2.683945757e-08f, 2.679332307e-08f, 2.674715576e-08f, 2.670095572e-08f, 2.665472305e-08f,
+2.660845785e-08f, 2.656216020e-08f, 2.651583019e-08f, 2.646946792e-08f, 2.642307348e-08f, 2.637664696e-08f, 2.633018845e-08f, 2.628369805e-08f, 2.623717584e-08f, 2.619062192e-08f,
+2.614403638e-08f, 2.609741931e-08f, 2.605077081e-08f, 2.600409097e-08f, 2.595737987e-08f, 2.591063762e-08f, 2.586386430e-08f, 2.581706000e-08f, 2.577022482e-08f, 2.572335885e-08f,
+2.567646219e-08f, 2.562953491e-08f, 2.558257713e-08f, 2.553558892e-08f, 2.548857039e-08f, 2.544152162e-08f, 2.539444271e-08f, 2.534733374e-08f, 2.530019482e-08f, 2.525302603e-08f,
+2.520582747e-08f, 2.515859923e-08f, 2.511134140e-08f, 2.506405407e-08f, 2.501673734e-08f, 2.496939130e-08f, 2.492201604e-08f, 2.487461166e-08f, 2.482717825e-08f, 2.477971589e-08f,
+2.473222469e-08f, 2.468470474e-08f, 2.463715612e-08f, 2.458957894e-08f, 2.454197328e-08f, 2.449433925e-08f, 2.444667692e-08f, 2.439898639e-08f, 2.435126776e-08f, 2.430352112e-08f,
+2.425574657e-08f, 2.420794419e-08f, 2.416011407e-08f, 2.411225632e-08f, 2.406437103e-08f, 2.401645828e-08f, 2.396851817e-08f, 2.392055080e-08f, 2.387255626e-08f, 2.382453463e-08f,
+2.377648602e-08f, 2.372841052e-08f, 2.368030822e-08f, 2.363217921e-08f, 2.358402359e-08f, 2.353584145e-08f, 2.348763288e-08f, 2.343939798e-08f, 2.339113684e-08f, 2.334284955e-08f,
+2.329453621e-08f, 2.324619691e-08f, 2.319783174e-08f, 2.314944081e-08f, 2.310102419e-08f, 2.305258199e-08f, 2.300411429e-08f, 2.295562120e-08f, 2.290710280e-08f, 2.285855919e-08f,
+2.280999046e-08f, 2.276139671e-08f, 2.271277802e-08f, 2.266413450e-08f, 2.261546624e-08f, 2.256677333e-08f, 2.251805586e-08f, 2.246931392e-08f, 2.242054762e-08f, 2.237175705e-08f,
+2.232294229e-08f, 2.227410344e-08f, 2.222524060e-08f, 2.217635386e-08f, 2.212744332e-08f, 2.207850906e-08f, 2.202955118e-08f, 2.198056978e-08f, 2.193156495e-08f, 2.188253678e-08f,
+2.183348537e-08f, 2.178441080e-08f, 2.173531318e-08f, 2.168619260e-08f, 2.163704915e-08f, 2.158788293e-08f, 2.153869403e-08f, 2.148948254e-08f, 2.144024856e-08f, 2.139099218e-08f,
+2.134171350e-08f, 2.129241261e-08f, 2.124308960e-08f, 2.119374457e-08f, 2.114437761e-08f, 2.109498881e-08f, 2.104557828e-08f, 2.099614610e-08f, 2.094669237e-08f, 2.089721718e-08f,
+2.084772063e-08f, 2.079820280e-08f, 2.074866381e-08f, 2.069910373e-08f, 2.064952266e-08f, 2.059992070e-08f, 2.055029794e-08f, 2.050065447e-08f, 2.045099040e-08f, 2.040130580e-08f,
+2.035160079e-08f, 2.030187544e-08f, 2.025212987e-08f, 2.020236415e-08f, 2.015257838e-08f, 2.010277267e-08f, 2.005294710e-08f, 2.000310176e-08f, 1.995323675e-08f, 1.990335217e-08f,
+1.985344811e-08f, 1.980352467e-08f, 1.975358193e-08f, 1.970361999e-08f, 1.965363895e-08f, 1.960363890e-08f, 1.955361993e-08f, 1.950358214e-08f, 1.945352563e-08f, 1.940345049e-08f,
+1.935335680e-08f, 1.930324468e-08f, 1.925311420e-08f, 1.920296547e-08f, 1.915279857e-08f, 1.910261361e-08f, 1.905241068e-08f, 1.900218987e-08f, 1.895195128e-08f, 1.890169499e-08f,
+1.885142112e-08f, 1.880112974e-08f, 1.875082095e-08f, 1.870049485e-08f, 1.865015154e-08f, 1.859979110e-08f, 1.854941363e-08f, 1.849901922e-08f, 1.844860798e-08f, 1.839817999e-08f,
+1.834773535e-08f, 1.829727415e-08f, 1.824679648e-08f, 1.819630245e-08f, 1.814579214e-08f, 1.809526566e-08f, 1.804472308e-08f, 1.799416452e-08f, 1.794359005e-08f, 1.789299979e-08f,
+1.784239381e-08f, 1.779177222e-08f, 1.774113511e-08f, 1.769048258e-08f, 1.763981471e-08f, 1.758913161e-08f, 1.753843336e-08f, 1.748772007e-08f, 1.743699182e-08f, 1.738624871e-08f,
+1.733549084e-08f, 1.728471829e-08f, 1.723393117e-08f, 1.718312956e-08f, 1.713231357e-08f, 1.708148328e-08f, 1.703063879e-08f, 1.697978020e-08f, 1.692890759e-08f, 1.687802107e-08f,
+1.682712072e-08f, 1.677620665e-08f, 1.672527894e-08f, 1.667433769e-08f, 1.662338300e-08f, 1.657241495e-08f, 1.652143365e-08f, 1.647043919e-08f, 1.641943165e-08f, 1.636841114e-08f,
+1.631737775e-08f, 1.626633158e-08f, 1.621527271e-08f, 1.616420124e-08f, 1.611311728e-08f, 1.606202090e-08f, 1.601091220e-08f, 1.595979129e-08f, 1.590865825e-08f, 1.585751317e-08f,
+1.580635616e-08f, 1.575518730e-08f, 1.570400670e-08f, 1.565281443e-08f, 1.560161061e-08f, 1.555039531e-08f, 1.549916864e-08f, 1.544793070e-08f, 1.539668156e-08f, 1.534542134e-08f,
+1.529415012e-08f, 1.524286799e-08f, 1.519157505e-08f, 1.514027140e-08f, 1.508895713e-08f, 1.503763233e-08f, 1.498629710e-08f, 1.493495152e-08f, 1.488359571e-08f, 1.483222974e-08f,
+1.478085371e-08f, 1.472946772e-08f, 1.467807186e-08f, 1.462666622e-08f, 1.457525090e-08f, 1.452382600e-08f, 1.447239160e-08f, 1.442094780e-08f, 1.436949469e-08f, 1.431803237e-08f,
+1.426656094e-08f, 1.421508047e-08f, 1.416359108e-08f, 1.411209285e-08f, 1.406058588e-08f, 1.400907025e-08f, 1.395754608e-08f, 1.390601343e-08f, 1.385447243e-08f, 1.380292314e-08f,
+1.375136568e-08f, 1.369980013e-08f, 1.364822658e-08f, 1.359664514e-08f, 1.354505588e-08f, 1.349345892e-08f, 1.344185434e-08f, 1.339024223e-08f, 1.333862269e-08f, 1.328699581e-08f,
+1.323536169e-08f, 1.318372041e-08f, 1.313207208e-08f, 1.308041679e-08f, 1.302875462e-08f, 1.297708568e-08f, 1.292541005e-08f, 1.287372784e-08f, 1.282203912e-08f, 1.277034400e-08f,
+1.271864258e-08f, 1.266693493e-08f, 1.261522117e-08f, 1.256350137e-08f, 1.251177564e-08f, 1.246004406e-08f, 1.240830673e-08f, 1.235656375e-08f, 1.230481520e-08f, 1.225306118e-08f,
+1.220130179e-08f, 1.214953711e-08f, 1.209776724e-08f, 1.204599228e-08f, 1.199421231e-08f, 1.194242742e-08f, 1.189063772e-08f, 1.183884330e-08f, 1.178704424e-08f, 1.173524064e-08f,
+1.168343260e-08f, 1.163162020e-08f, 1.157980354e-08f, 1.152798272e-08f, 1.147615782e-08f, 1.142432894e-08f, 1.137249617e-08f, 1.132065961e-08f, 1.126881934e-08f, 1.121697547e-08f,
+1.116512807e-08f, 1.111327725e-08f, 1.106142310e-08f, 1.100956572e-08f, 1.095770518e-08f, 1.090584159e-08f, 1.085397504e-08f, 1.080210562e-08f, 1.075023343e-08f, 1.069835855e-08f,
+1.064648108e-08f, 1.059460112e-08f, 1.054271875e-08f, 1.049083406e-08f, 1.043894716e-08f, 1.038705812e-08f, 1.033516706e-08f, 1.028327404e-08f, 1.023137918e-08f, 1.017948256e-08f,
+1.012758427e-08f, 1.007568441e-08f, 1.002378306e-08f, 9.971880329e-09f, 9.919976298e-09f, 9.868071061e-09f, 9.816164712e-09f, 9.764257342e-09f, 9.712349043e-09f, 9.660439907e-09f,
+9.608530027e-09f, 9.556619494e-09f, 9.504708400e-09f, 9.452796838e-09f, 9.400884899e-09f, 9.348972675e-09f, 9.297060258e-09f, 9.245147740e-09f, 9.193235213e-09f, 9.141322768e-09f,
+9.089410498e-09f, 9.037498493e-09f, 8.985586847e-09f, 8.933675649e-09f, 8.881764993e-09f, 8.829854970e-09f, 8.777945671e-09f, 8.726037188e-09f, 8.674129612e-09f, 8.622223036e-09f,
+8.570317549e-09f, 8.518413245e-09f, 8.466510213e-09f, 8.414608547e-09f, 8.362708336e-09f, 8.310809673e-09f, 8.258912648e-09f, 8.207017354e-09f, 8.155123880e-09f, 8.103232319e-09f,
+8.051342761e-09f, 7.999455297e-09f, 7.947570020e-09f, 7.895687019e-09f, 7.843806386e-09f, 7.791928212e-09f, 7.740052588e-09f, 7.688179604e-09f, 7.636309352e-09f, 7.584441923e-09f,
+7.532577407e-09f, 7.480715895e-09f, 7.428857478e-09f, 7.377002247e-09f, 7.325150292e-09f, 7.273301704e-09f, 7.221456574e-09f, 7.169614992e-09f, 7.117777050e-09f, 7.065942836e-09f,
+7.014112443e-09f, 6.962285960e-09f, 6.910463477e-09f, 6.858645086e-09f, 6.806830877e-09f, 6.755020939e-09f, 6.703215364e-09f, 6.651414241e-09f, 6.599617661e-09f, 6.547825714e-09f,
+6.496038489e-09f, 6.444256078e-09f, 6.392478570e-09f, 6.340706055e-09f, 6.288938623e-09f, 6.237176365e-09f, 6.185419370e-09f, 6.133667727e-09f, 6.081921528e-09f, 6.030180861e-09f,
+5.978445817e-09f, 5.926716485e-09f, 5.874992954e-09f, 5.823275316e-09f, 5.771563658e-09f, 5.719858071e-09f, 5.668158645e-09f, 5.616465468e-09f, 5.564778630e-09f, 5.513098222e-09f,
+5.461424331e-09f, 5.409757048e-09f, 5.358096461e-09f, 5.306442661e-09f, 5.254795736e-09f, 5.203155775e-09f, 5.151522868e-09f, 5.099897104e-09f, 5.048278571e-09f, 4.996667360e-09f,
+4.945063558e-09f, 4.893467255e-09f, 4.841878539e-09f, 4.790297500e-09f, 4.738724227e-09f, 4.687158807e-09f, 4.635601331e-09f, 4.584051886e-09f, 4.532510561e-09f, 4.480977446e-09f,
+4.429452628e-09f, 4.377936195e-09f, 4.326428238e-09f, 4.274928843e-09f, 4.223438099e-09f, 4.171956096e-09f, 4.120482920e-09f, 4.069018660e-09f, 4.017563406e-09f, 3.966117243e-09f,
+3.914680262e-09f, 3.863252550e-09f, 3.811834195e-09f, 3.760425284e-09f, 3.709025907e-09f, 3.657636151e-09f, 3.606256104e-09f, 3.554885853e-09f, 3.503525487e-09f, 3.452175093e-09f,
+3.400834759e-09f, 3.349504572e-09f, 3.298184621e-09f, 3.246874992e-09f, 3.195575774e-09f, 3.144287054e-09f, 3.093008918e-09f, 3.041741456e-09f, 2.990484753e-09f, 2.939238897e-09f,
+2.888003976e-09f, 2.836780077e-09f, 2.785567286e-09f, 2.734365691e-09f, 2.683175379e-09f, 2.631996438e-09f, 2.580828953e-09f, 2.529673012e-09f, 2.478528702e-09f, 2.427396109e-09f,
+2.376275320e-09f, 2.325166423e-09f, 2.274069503e-09f, 2.222984648e-09f, 2.171911944e-09f, 2.120851477e-09f, 2.069803334e-09f, 2.018767602e-09f, 1.967744366e-09f, 1.916733713e-09f,
+1.865735730e-09f, 1.814750503e-09f, 1.763778117e-09f, 1.712818659e-09f, 1.661872215e-09f, 1.610938872e-09f, 1.560018714e-09f, 1.509111829e-09f, 1.458218301e-09f, 1.407338217e-09f,
+1.356471663e-09f, 1.305618724e-09f, 1.254779486e-09f, 1.203954034e-09f, 1.153142455e-09f, 1.102344833e-09f, 1.051561255e-09f, 1.000791805e-09f, 9.500365693e-10f, 8.992956328e-10f,
+8.485690810e-10f, 7.978569989e-10f, 7.471594718e-10f, 6.964765849e-10f, 6.458084231e-10f, 5.951550715e-10f, 5.445166150e-10f, 4.938931386e-10f, 4.432847270e-10f, 3.926914652e-10f,
+3.421134378e-10f, 2.915507296e-10f, 2.410034251e-10f, 1.904716089e-10f, 1.399553657e-10f, 8.945477985e-11f, 3.896993577e-11f, -1.149908214e-11f, -6.195218958e-11f, -1.123893023e-10f,
+-1.628103361e-10f, -2.132152067e-10f, -2.636038302e-10f, -3.139761225e-10f, -3.643319996e-10f, -4.146713775e-10f, -4.649941724e-10f, -5.153003005e-10f, -5.655896779e-10f, -6.158622211e-10f,
+-6.661178464e-10f, -7.163564701e-10f, -7.665780087e-10f, -8.167823787e-10f, -8.669694967e-10f, -9.171392794e-10f, -9.672916435e-10f, -1.017426506e-09f, -1.067543783e-09f, -1.117643391e-09f,
+-1.167725249e-09f, -1.217789272e-09f, -1.267835377e-09f, -1.317863483e-09f, -1.367873505e-09f, -1.417865361e-09f, -1.467838969e-09f, -1.517794246e-09f, -1.567731108e-09f, -1.617649474e-09f,
+-1.667549261e-09f, -1.717430387e-09f, -1.767292769e-09f, -1.817136324e-09f, -1.866960972e-09f, -1.916766628e-09f, -1.966553212e-09f, -2.016320641e-09f, -2.066068833e-09f, -2.115797706e-09f,
+-2.165507179e-09f, -2.215197169e-09f, -2.264867594e-09f, -2.314518374e-09f, -2.364149425e-09f, -2.413760668e-09f, -2.463352019e-09f, -2.512923398e-09f, -2.562474723e-09f, -2.612005912e-09f,
+-2.661516886e-09f, -2.711007561e-09f, -2.760477858e-09f, -2.809927694e-09f, -2.859356990e-09f, -2.908765663e-09f, -2.958153633e-09f, -3.007520819e-09f, -3.056867141e-09f, -3.106192517e-09f,
+-3.155496867e-09f, -3.204780110e-09f, -3.254042166e-09f, -3.303282954e-09f, -3.352502394e-09f, -3.401700406e-09f, -3.450876908e-09f, -3.500031821e-09f, -3.549165065e-09f, -3.598276559e-09f,
+-3.647366224e-09f, -3.696433980e-09f, -3.745479746e-09f, -3.794503442e-09f, -3.843504990e-09f, -3.892484309e-09f, -3.941441319e-09f, -3.990375941e-09f, -4.039288096e-09f, -4.088177704e-09f,
+-4.137044685e-09f, -4.185888960e-09f, -4.234710450e-09f, -4.283509076e-09f, -4.332284758e-09f, -4.381037418e-09f, -4.429766977e-09f, -4.478473354e-09f, -4.527156473e-09f, -4.575816253e-09f,
+-4.624452616e-09f, -4.673065484e-09f, -4.721654777e-09f, -4.770220418e-09f, -4.818762327e-09f, -4.867280427e-09f, -4.915774638e-09f, -4.964244883e-09f, -5.012691084e-09f, -5.061113162e-09f,
+-5.109511039e-09f, -5.157884637e-09f, -5.206233879e-09f, -5.254558686e-09f, -5.302858980e-09f, -5.351134684e-09f, -5.399385721e-09f, -5.447612012e-09f, -5.495813479e-09f, -5.543990047e-09f,
+-5.592141636e-09f, -5.640268171e-09f, -5.688369572e-09f, -5.736445764e-09f, -5.784496670e-09f, -5.832522211e-09f, -5.880522312e-09f, -5.928496894e-09f, -5.976445883e-09f, -6.024369199e-09f,
+-6.072266768e-09f, -6.120138512e-09f, -6.167984354e-09f, -6.215804219e-09f, -6.263598030e-09f, -6.311365710e-09f, -6.359107183e-09f, -6.406822372e-09f, -6.454511203e-09f, -6.502173598e-09f,
+-6.549809482e-09f, -6.597418779e-09f, -6.645001412e-09f, -6.692557306e-09f, -6.740086386e-09f, -6.787588576e-09f, -6.835063799e-09f, -6.882511981e-09f, -6.929933047e-09f, -6.977326920e-09f,
+-7.024693525e-09f, -7.072032788e-09f, -7.119344633e-09f, -7.166628985e-09f, -7.213885769e-09f, -7.261114910e-09f, -7.308316334e-09f, -7.355489965e-09f, -7.402635729e-09f, -7.449753550e-09f,
+-7.496843356e-09f, -7.543905070e-09f, -7.590938619e-09f, -7.637943929e-09f, -7.684920924e-09f, -7.731869532e-09f, -7.778789677e-09f, -7.825681285e-09f, -7.872544284e-09f, -7.919378598e-09f,
+-7.966184154e-09f, -8.012960878e-09f, -8.059708697e-09f, -8.106427537e-09f, -8.153117324e-09f, -8.199777985e-09f, -8.246409447e-09f, -8.293011636e-09f, -8.339584478e-09f, -8.386127902e-09f,
+-8.432641834e-09f, -8.479126200e-09f, -8.525580928e-09f, -8.572005945e-09f, -8.618401178e-09f, -8.664766555e-09f, -8.711102003e-09f, -8.757407449e-09f, -8.803682821e-09f, -8.849928046e-09f,
+-8.896143052e-09f, -8.942327768e-09f, -8.988482120e-09f, -9.034606037e-09f, -9.080699446e-09f, -9.126762276e-09f, -9.172794455e-09f, -9.218795911e-09f, -9.264766572e-09f, -9.310706367e-09f,
+-9.356615224e-09f, -9.402493071e-09f, -9.448339838e-09f, -9.494155453e-09f, -9.539939845e-09f, -9.585692942e-09f, -9.631414674e-09f, -9.677104969e-09f, -9.722763757e-09f, -9.768390966e-09f,
+-9.813986526e-09f, -9.859550367e-09f, -9.905082417e-09f, -9.950582606e-09f, -9.996050864e-09f, -1.004148712e-08f, -1.008689130e-08f, -1.013226335e-08f, -1.017760317e-08f, -1.022291072e-08f,
+-1.026818592e-08f, -1.031342869e-08f, -1.035863897e-08f, -1.040381668e-08f, -1.044896177e-08f, -1.049407416e-08f, -1.053915377e-08f, -1.058420054e-08f, -1.062921441e-08f, -1.067419530e-08f,
+-1.071914313e-08f, -1.076405785e-08f, -1.080893939e-08f, -1.085378767e-08f, -1.089860263e-08f, -1.094338419e-08f, -1.098813229e-08f, -1.103284686e-08f, -1.107752784e-08f, -1.112217515e-08f,
+-1.116678872e-08f, -1.121136849e-08f, -1.125591438e-08f, -1.130042634e-08f, -1.134490429e-08f, -1.138934816e-08f, -1.143375789e-08f, -1.147813341e-08f, -1.152247465e-08f, -1.156678154e-08f,
+-1.161105401e-08f, -1.165529201e-08f, -1.169949545e-08f, -1.174366428e-08f, -1.178779843e-08f, -1.183189782e-08f, -1.187596240e-08f, -1.191999209e-08f, -1.196398683e-08f, -1.200794655e-08f,
+-1.205187118e-08f, -1.209576067e-08f, -1.213961493e-08f, -1.218343391e-08f, -1.222721754e-08f, -1.227096575e-08f, -1.231467847e-08f, -1.235835565e-08f, -1.240199721e-08f, -1.244560309e-08f,
+-1.248917322e-08f, -1.253270753e-08f, -1.257620597e-08f, -1.261966846e-08f, -1.266309494e-08f, -1.270648534e-08f, -1.274983960e-08f, -1.279315766e-08f, -1.283643944e-08f, -1.287968489e-08f,
+-1.292289393e-08f, -1.296606651e-08f, -1.300920255e-08f, -1.305230200e-08f, -1.309536478e-08f, -1.313839084e-08f, -1.318138011e-08f, -1.322433253e-08f, -1.326724802e-08f, -1.331012653e-08f,
+-1.335296800e-08f, -1.339577235e-08f, -1.343853952e-08f, -1.348126946e-08f, -1.352396209e-08f, -1.356661735e-08f, -1.360923518e-08f, -1.365181552e-08f, -1.369435830e-08f, -1.373686346e-08f,
+-1.377933093e-08f, -1.382176066e-08f, -1.386415257e-08f, -1.390650661e-08f, -1.394882271e-08f, -1.399110082e-08f, -1.403334086e-08f, -1.407554277e-08f, -1.411770649e-08f, -1.415983197e-08f,
+-1.420191913e-08f, -1.424396791e-08f, -1.428597826e-08f, -1.432795011e-08f, -1.436988339e-08f, -1.441177806e-08f, -1.445363403e-08f, -1.449545126e-08f, -1.453722968e-08f, -1.457896922e-08f,
+-1.462066984e-08f, -1.466233146e-08f, -1.470395402e-08f, -1.474553747e-08f, -1.478708173e-08f, -1.482858676e-08f, -1.487005249e-08f, -1.491147886e-08f, -1.495286581e-08f, -1.499421327e-08f,
+-1.503552119e-08f, -1.507678950e-08f, -1.511801816e-08f, -1.515920708e-08f, -1.520035622e-08f, -1.524146552e-08f, -1.528253491e-08f, -1.532356433e-08f, -1.536455373e-08f, -1.540550304e-08f,
+-1.544641221e-08f, -1.548728117e-08f, -1.552810987e-08f, -1.556889825e-08f, -1.560964624e-08f, -1.565035379e-08f, -1.569102084e-08f, -1.573164732e-08f, -1.577223319e-08f, -1.581277837e-08f,
+-1.585328282e-08f, -1.589374648e-08f, -1.593416927e-08f, -1.597455116e-08f, -1.601489207e-08f, -1.605519195e-08f, -1.609545074e-08f, -1.613566838e-08f, -1.617584482e-08f, -1.621597999e-08f,
+-1.625607385e-08f, -1.629612632e-08f, -1.633613736e-08f, -1.637610690e-08f, -1.641603489e-08f, -1.645592127e-08f, -1.649576598e-08f, -1.653556897e-08f, -1.657533018e-08f, -1.661504955e-08f,
+-1.665472702e-08f, -1.669436254e-08f, -1.673395605e-08f, -1.677350749e-08f, -1.681301681e-08f, -1.685248395e-08f, -1.689190886e-08f, -1.693129147e-08f, -1.697063174e-08f, -1.700992960e-08f,
+-1.704918499e-08f, -1.708839788e-08f, -1.712756818e-08f, -1.716669586e-08f, -1.720578086e-08f, -1.724482312e-08f, -1.728382258e-08f, -1.732277918e-08f, -1.736169289e-08f, -1.740056363e-08f,
+-1.743939135e-08f, -1.747817601e-08f, -1.751691753e-08f, -1.755561588e-08f, -1.759427099e-08f, -1.763288280e-08f, -1.767145127e-08f, -1.770997635e-08f, -1.774845796e-08f, -1.778689607e-08f,
+-1.782529061e-08f, -1.786364154e-08f, -1.790194880e-08f, -1.794021233e-08f, -1.797843208e-08f, -1.801660800e-08f, -1.805474003e-08f, -1.809282813e-08f, -1.813087223e-08f, -1.816887228e-08f,
+-1.820682823e-08f, -1.824474003e-08f, -1.828260763e-08f, -1.832043096e-08f, -1.835820998e-08f, -1.839594464e-08f, -1.843363488e-08f, -1.847128065e-08f, -1.850888190e-08f, -1.854643857e-08f,
+-1.858395062e-08f, -1.862141798e-08f, -1.865884062e-08f, -1.869621847e-08f, -1.873355148e-08f, -1.877083961e-08f, -1.880808280e-08f, -1.884528099e-08f, -1.888243415e-08f, -1.891954221e-08f,
+-1.895660512e-08f, -1.899362284e-08f, -1.903059532e-08f, -1.906752249e-08f, -1.910440431e-08f, -1.914124074e-08f, -1.917803171e-08f, -1.921477718e-08f, -1.925147710e-08f, -1.928813141e-08f,
+-1.932474007e-08f, -1.936130303e-08f, -1.939782024e-08f, -1.943429164e-08f, -1.947071719e-08f, -1.950709683e-08f, -1.954343052e-08f, -1.957971821e-08f, -1.961595984e-08f, -1.965215538e-08f,
+-1.968830476e-08f, -1.972440794e-08f, -1.976046487e-08f, -1.979647550e-08f, -1.983243978e-08f, -1.986835767e-08f, -1.990422911e-08f, -1.994005405e-08f, -1.997583246e-08f, -2.001156427e-08f,
+-2.004724944e-08f, -2.008288792e-08f, -2.011847966e-08f, -2.015402462e-08f, -2.018952275e-08f, -2.022497400e-08f, -2.026037832e-08f, -2.029573566e-08f, -2.033104598e-08f, -2.036630922e-08f,
+-2.040152535e-08f, -2.043669431e-08f, -2.047181606e-08f, -2.050689055e-08f, -2.054191773e-08f, -2.057689755e-08f, -2.061182998e-08f, -2.064671495e-08f, -2.068155243e-08f, -2.071634237e-08f,
+-2.075108472e-08f, -2.078577944e-08f, -2.082042648e-08f, -2.085502579e-08f, -2.088957733e-08f, -2.092408105e-08f, -2.095853691e-08f, -2.099294485e-08f, -2.102730484e-08f, -2.106161683e-08f,
+-2.109588077e-08f, -2.113009663e-08f, -2.116426434e-08f, -2.119838387e-08f, -2.123245517e-08f, -2.126647821e-08f, -2.130045292e-08f, -2.133437927e-08f, -2.136825722e-08f, -2.140208671e-08f,
+-2.143586771e-08f, -2.146960017e-08f, -2.150328405e-08f, -2.153691930e-08f, -2.157050587e-08f, -2.160404373e-08f, -2.163753283e-08f, -2.167097312e-08f, -2.170436457e-08f, -2.173770713e-08f,
+-2.177100075e-08f, -2.180424540e-08f, -2.183744102e-08f, -2.187058758e-08f, -2.190368503e-08f, -2.193673334e-08f, -2.196973245e-08f, -2.200268232e-08f, -2.203558292e-08f, -2.206843419e-08f,
+-2.210123611e-08f, -2.213398862e-08f, -2.216669168e-08f, -2.219934525e-08f, -2.223194928e-08f, -2.226450375e-08f, -2.229700860e-08f, -2.232946379e-08f, -2.236186928e-08f, -2.239422504e-08f,
+-2.242653101e-08f, -2.245878716e-08f, -2.249099344e-08f, -2.252314982e-08f, -2.255525626e-08f, -2.258731270e-08f, -2.261931912e-08f, -2.265127547e-08f, -2.268318171e-08f, -2.271503780e-08f,
+-2.274684370e-08f, -2.277859937e-08f, -2.281030477e-08f, -2.284195986e-08f, -2.287356460e-08f, -2.290511894e-08f, -2.293662286e-08f, -2.296807631e-08f, -2.299947925e-08f, -2.303083164e-08f,
+-2.306213344e-08f, -2.309338461e-08f, -2.312458512e-08f, -2.315573492e-08f, -2.318683398e-08f, -2.321788225e-08f, -2.324887970e-08f, -2.327982629e-08f, -2.331072198e-08f, -2.334156674e-08f,
+-2.337236051e-08f, -2.340310328e-08f, -2.343379499e-08f, -2.346443561e-08f, -2.349502510e-08f, -2.352556342e-08f, -2.355605054e-08f, -2.358648642e-08f, -2.361687102e-08f, -2.364720430e-08f,
+-2.367748623e-08f, -2.370771677e-08f, -2.373789588e-08f, -2.376802353e-08f, -2.379809967e-08f, -2.382812428e-08f, -2.385809731e-08f, -2.388801873e-08f, -2.391788849e-08f, -2.394770658e-08f,
+-2.397747294e-08f, -2.400718755e-08f, -2.403685036e-08f, -2.406646135e-08f, -2.409602046e-08f, -2.412552768e-08f, -2.415498296e-08f, -2.418438627e-08f, -2.421373758e-08f, -2.424303683e-08f,
+-2.427228402e-08f, -2.430147908e-08f, -2.433062200e-08f, -2.435971274e-08f, -2.438875126e-08f, -2.441773753e-08f, -2.444667151e-08f, -2.447555317e-08f, -2.450438247e-08f, -2.453315938e-08f,
+-2.456188387e-08f, -2.459055590e-08f, -2.461917543e-08f, -2.464774244e-08f, -2.467625689e-08f, -2.470471875e-08f, -2.473312798e-08f, -2.476148455e-08f, -2.478978842e-08f, -2.481803957e-08f,
+-2.484623795e-08f, -2.487438355e-08f, -2.490247631e-08f, -2.493051622e-08f, -2.495850323e-08f, -2.498643732e-08f, -2.501431846e-08f, -2.504214660e-08f, -2.506992172e-08f, -2.509764379e-08f,
+-2.512531277e-08f, -2.515292863e-08f, -2.518049135e-08f, -2.520800088e-08f, -2.523545720e-08f, -2.526286027e-08f, -2.529021007e-08f, -2.531750656e-08f, -2.534474971e-08f, -2.537193948e-08f,
+-2.539907586e-08f, -2.542615881e-08f, -2.545318829e-08f, -2.548016428e-08f, -2.550708675e-08f, -2.553395566e-08f, -2.556077098e-08f, -2.558753269e-08f, -2.561424075e-08f, -2.564089514e-08f,
+-2.566749582e-08f, -2.569404277e-08f, -2.572053595e-08f, -2.574697534e-08f, -2.577336090e-08f, -2.579969260e-08f, -2.582597043e-08f, -2.585219434e-08f, -2.587836430e-08f, -2.590448030e-08f,
+-2.593054230e-08f, -2.595655027e-08f, -2.598250418e-08f, -2.600840400e-08f, -2.603424971e-08f, -2.606004128e-08f, -2.608577867e-08f, -2.611146187e-08f, -2.613709084e-08f, -2.616266555e-08f,
+-2.618818598e-08f, -2.621365210e-08f, -2.623906388e-08f, -2.626442129e-08f, -2.628972431e-08f, -2.631497291e-08f, -2.634016706e-08f, -2.636530673e-08f, -2.639039190e-08f, -2.641542254e-08f,
+-2.644039863e-08f, -2.646532013e-08f, -2.649018702e-08f, -2.651499928e-08f, -2.653975687e-08f, -2.656445977e-08f, -2.658910796e-08f, -2.661370141e-08f, -2.663824009e-08f, -2.666272398e-08f,
+-2.668715305e-08f, -2.671152727e-08f, -2.673584662e-08f, -2.676011108e-08f, -2.678432062e-08f, -2.680847521e-08f, -2.683257483e-08f, -2.685661946e-08f, -2.688060906e-08f, -2.690454362e-08f,
+-2.692842310e-08f, -2.695224749e-08f, -2.697601677e-08f, -2.699973089e-08f, -2.702338985e-08f, -2.704699362e-08f, -2.707054217e-08f, -2.709403548e-08f, -2.711747352e-08f, -2.714085628e-08f,
+-2.716418373e-08f, -2.718745584e-08f, -2.721067259e-08f, -2.723383396e-08f, -2.725693992e-08f, -2.727999045e-08f, -2.730298554e-08f, -2.732592515e-08f, -2.734880926e-08f, -2.737163785e-08f,
+-2.739441090e-08f, -2.741712839e-08f, -2.743979029e-08f, -2.746239658e-08f, -2.748494723e-08f, -2.750744224e-08f, -2.752988156e-08f, -2.755226519e-08f, -2.757459311e-08f, -2.759686528e-08f,
+-2.761908168e-08f, -2.764124231e-08f, -2.766334713e-08f, -2.768539612e-08f, -2.770738927e-08f, -2.772932655e-08f, -2.775120793e-08f, -2.777303341e-08f, -2.779480296e-08f, -2.781651656e-08f,
+-2.783817418e-08f, -2.785977582e-08f, -2.788132144e-08f, -2.790281103e-08f, -2.792424456e-08f, -2.794562203e-08f, -2.796694340e-08f, -2.798820866e-08f, -2.800941779e-08f, -2.803057076e-08f,
+-2.805166757e-08f, -2.807270819e-08f, -2.809369260e-08f, -2.811462078e-08f, -2.813549272e-08f, -2.815630838e-08f, -2.817706777e-08f, -2.819777085e-08f, -2.821841761e-08f, -2.823900803e-08f,
+-2.825954209e-08f, -2.828001978e-08f, -2.830044107e-08f, -2.832080595e-08f, -2.834111439e-08f, -2.836136639e-08f, -2.838156193e-08f, -2.840170098e-08f, -2.842178352e-08f, -2.844180955e-08f,
+-2.846177905e-08f, -2.848169199e-08f, -2.850154836e-08f, -2.852134814e-08f, -2.854109133e-08f, -2.856077789e-08f, -2.858040781e-08f, -2.859998108e-08f, -2.861949768e-08f, -2.863895759e-08f,
+-2.865836080e-08f, -2.867770730e-08f, -2.869699705e-08f, -2.871623006e-08f, -2.873540630e-08f, -2.875452576e-08f, -2.877358842e-08f, -2.879259427e-08f, -2.881154329e-08f, -2.883043547e-08f,
+-2.884927079e-08f, -2.886804923e-08f, -2.888677079e-08f, -2.890543544e-08f, -2.892404318e-08f, -2.894259398e-08f, -2.896108783e-08f, -2.897952473e-08f, -2.899790464e-08f, -2.901622757e-08f,
+-2.903449350e-08f, -2.905270240e-08f, -2.907085427e-08f, -2.908894910e-08f, -2.910698687e-08f, -2.912496756e-08f, -2.914289117e-08f, -2.916075768e-08f, -2.917856708e-08f, -2.919631935e-08f,
+-2.921401448e-08f, -2.923165246e-08f, -2.924923327e-08f, -2.926675691e-08f, -2.928422336e-08f, -2.930163260e-08f, -2.931898463e-08f, -2.933627944e-08f, -2.935351700e-08f, -2.937069731e-08f,
+-2.938782036e-08f, -2.940488613e-08f, -2.942189462e-08f, -2.943884581e-08f, -2.945573969e-08f, -2.947257624e-08f, -2.948935547e-08f, -2.950607735e-08f, -2.952274187e-08f, -2.953934903e-08f,
+-2.955589881e-08f, -2.957239121e-08f, -2.958882620e-08f, -2.960520379e-08f, -2.962152396e-08f, -2.963778669e-08f, -2.965399199e-08f, -2.967013984e-08f, -2.968623022e-08f, -2.970226314e-08f,
+-2.971823857e-08f, -2.973415652e-08f, -2.975001697e-08f, -2.976581991e-08f, -2.978156532e-08f, -2.979725322e-08f, -2.981288357e-08f, -2.982845638e-08f, -2.984397163e-08f, -2.985942932e-08f,
+-2.987482944e-08f, -2.989017198e-08f, -2.990545692e-08f, -2.992068427e-08f, -2.993585401e-08f, -2.995096614e-08f, -2.996602064e-08f, -2.998101751e-08f, -2.999595675e-08f, -3.001083833e-08f,
+-3.002566226e-08f, -3.004042853e-08f, -3.005513713e-08f, -3.006978806e-08f, -3.008438129e-08f, -3.009891684e-08f, -3.011339469e-08f, -3.012781483e-08f, -3.014217726e-08f, -3.015648197e-08f,
+-3.017072895e-08f, -3.018491820e-08f, -3.019904971e-08f, -3.021312348e-08f, -3.022713950e-08f, -3.024109775e-08f, -3.025499825e-08f, -3.026884097e-08f, -3.028262592e-08f, -3.029635308e-08f,
+-3.031002246e-08f, -3.032363405e-08f, -3.033718784e-08f, -3.035068382e-08f, -3.036412200e-08f, -3.037750236e-08f, -3.039082491e-08f, -3.040408963e-08f, -3.041729652e-08f, -3.043044558e-08f,
+-3.044353681e-08f, -3.045657019e-08f, -3.046954572e-08f, -3.048246341e-08f, -3.049532324e-08f, -3.050812521e-08f, -3.052086932e-08f, -3.053355556e-08f, -3.054618393e-08f, -3.055875443e-08f,
+-3.057126705e-08f, -3.058372178e-08f, -3.059611864e-08f, -3.060845761e-08f, -3.062073868e-08f, -3.063296187e-08f, -3.064512716e-08f, -3.065723454e-08f, -3.066928403e-08f, -3.068127561e-08f,
+-3.069320928e-08f, -3.070508505e-08f, -3.071690290e-08f, -3.072866284e-08f, -3.074036487e-08f, -3.075200897e-08f, -3.076359516e-08f, -3.077512342e-08f, -3.078659377e-08f, -3.079800618e-08f,
+-3.080936067e-08f, -3.082065724e-08f, -3.083189587e-08f, -3.084307658e-08f, -3.085419935e-08f, -3.086526419e-08f, -3.087627110e-08f, -3.088722008e-08f, -3.089811112e-08f, -3.090894423e-08f,
+-3.091971940e-08f, -3.093043664e-08f, -3.094109594e-08f, -3.095169731e-08f, -3.096224074e-08f, -3.097272624e-08f, -3.098315380e-08f, -3.099352342e-08f, -3.100383512e-08f, -3.101408887e-08f,
+-3.102428470e-08f, -3.103442259e-08f, -3.104450255e-08f, -3.105452458e-08f, -3.106448868e-08f, -3.107439485e-08f, -3.108424310e-08f, -3.109403341e-08f, -3.110376581e-08f, -3.111344028e-08f,
+-3.112305683e-08f, -3.113261545e-08f, -3.114211617e-08f, -3.115155896e-08f, -3.116094384e-08f, -3.117027081e-08f, -3.117953988e-08f, -3.118875103e-08f, -3.119790428e-08f, -3.120699963e-08f,
+-3.121603708e-08f, -3.122501663e-08f, -3.123393829e-08f, -3.124280206e-08f, -3.125160794e-08f, -3.126035593e-08f, -3.126904605e-08f, -3.127767829e-08f, -3.128625265e-08f, -3.129476915e-08f,
+-3.130322777e-08f, -3.131162854e-08f, -3.131997144e-08f, -3.132825649e-08f, -3.133648369e-08f, -3.134465305e-08f, -3.135276456e-08f, -3.136081823e-08f, -3.136881407e-08f, -3.137675208e-08f,
+-3.138463227e-08f, -3.139245463e-08f, -3.140021918e-08f, -3.140792593e-08f, -3.141557487e-08f, -3.142316601e-08f, -3.143069935e-08f, -3.143817491e-08f, -3.144559269e-08f, -3.145295269e-08f,
+-3.146025491e-08f, -3.146749938e-08f, -3.147468608e-08f, -3.148181503e-08f, -3.148888623e-08f, -3.149589969e-08f, -3.150285542e-08f, -3.150975341e-08f, -3.151659369e-08f, -3.152337625e-08f,
+-3.153010110e-08f, -3.153676825e-08f, -3.154337771e-08f, -3.154992948e-08f, -3.155642357e-08f, -3.156285999e-08f, -3.156923874e-08f, -3.157555983e-08f, -3.158182327e-08f, -3.158802907e-08f,
+-3.159417723e-08f, -3.160026776e-08f, -3.160630068e-08f, -3.161227598e-08f, -3.161819368e-08f, -3.162405379e-08f, -3.162985631e-08f, -3.163560125e-08f, -3.164128862e-08f, -3.164691843e-08f,
+-3.165249069e-08f, -3.165800541e-08f, -3.166346259e-08f, -3.166886224e-08f, -3.167420438e-08f, -3.167948901e-08f, -3.168471614e-08f, -3.168988579e-08f, -3.169499796e-08f, -3.170005266e-08f,
+-3.170504989e-08f, -3.170998968e-08f, -3.171487203e-08f, -3.171969695e-08f, -3.172446446e-08f, -3.172917455e-08f, -3.173382724e-08f, -3.173842255e-08f, -3.174296048e-08f, -3.174744104e-08f,
+-3.175186424e-08f, -3.175623010e-08f, -3.176053863e-08f, -3.176478983e-08f, -3.176898372e-08f, -3.177312031e-08f, -3.177719961e-08f, -3.178122163e-08f, -3.178518638e-08f, -3.178909388e-08f,
+-3.179294413e-08f, -3.179673716e-08f, -3.180047296e-08f, -3.180415156e-08f, -3.180777296e-08f, -3.181133718e-08f, -3.181484422e-08f, -3.181829411e-08f, -3.182168685e-08f, -3.182502246e-08f,
+-3.182830095e-08f, -3.183152233e-08f, -3.183468662e-08f, -3.183779382e-08f, -3.184084396e-08f, -3.184383704e-08f, -3.184677307e-08f, -3.184965208e-08f, -3.185247407e-08f, -3.185523906e-08f,
+-3.185794707e-08f, -3.186059809e-08f, -3.186319216e-08f, -3.186572928e-08f, -3.186820947e-08f, -3.187063274e-08f, -3.187299911e-08f, -3.187530858e-08f, -3.187756119e-08f, -3.187975693e-08f,
+-3.188189582e-08f, -3.188397788e-08f, -3.188600313e-08f, -3.188797158e-08f, -3.188988324e-08f, -3.189173813e-08f, -3.189353626e-08f, -3.189527765e-08f, -3.189696232e-08f, -3.189859027e-08f,
+-3.190016154e-08f, -3.190167612e-08f, -3.190313404e-08f, -3.190453532e-08f, -3.190587996e-08f, -3.190716799e-08f, -3.190839943e-08f, -3.190957428e-08f, -3.191069256e-08f, -3.191175429e-08f,
+-3.191275950e-08f, -3.191370818e-08f, -3.191460037e-08f, -3.191543608e-08f, -3.191621532e-08f, -3.191693811e-08f, -3.191760447e-08f, -3.191821442e-08f, -3.191876797e-08f, -3.191926514e-08f,
+-3.191970595e-08f, -3.192009042e-08f, -3.192041856e-08f, -3.192069039e-08f, -3.192090593e-08f, -3.192106520e-08f, -3.192116821e-08f, -3.192121499e-08f, -3.192120555e-08f, -3.192113991e-08f,
+-3.192101809e-08f, -3.192084011e-08f, -3.192060599e-08f, -3.192031574e-08f, -3.191996938e-08f, -3.191956694e-08f, -3.191910842e-08f, -3.191859386e-08f, -3.191802327e-08f, -3.191739667e-08f,
+-3.191671408e-08f, -3.191597552e-08f, -3.191518100e-08f, -3.191433056e-08f, -3.191342420e-08f, -3.191246194e-08f, -3.191144382e-08f, -3.191036984e-08f, -3.190924003e-08f, -3.190805441e-08f,
+-3.190681300e-08f, -3.190551582e-08f, -3.190416288e-08f, -3.190275422e-08f, -3.190128985e-08f, -3.189976978e-08f, -3.189819405e-08f, -3.189656268e-08f, -3.189487568e-08f, -3.189313307e-08f,
+-3.189133488e-08f, -3.188948113e-08f, -3.188757184e-08f, -3.188560703e-08f, -3.188358673e-08f, -3.188151095e-08f, -3.187937971e-08f, -3.187719305e-08f, -3.187495097e-08f, -3.187265351e-08f,
+-3.187030068e-08f, -3.186789251e-08f, -3.186542902e-08f, -3.186291023e-08f, -3.186033617e-08f, -3.185770685e-08f, -3.185502231e-08f, -3.185228255e-08f, -3.184948762e-08f, -3.184663752e-08f,
+-3.184373228e-08f, -3.184077193e-08f, -3.183775649e-08f, -3.183468597e-08f, -3.183156042e-08f, -3.182837984e-08f, -3.182514427e-08f, -3.182185372e-08f, -3.181850822e-08f, -3.181510780e-08f,
+-3.181165247e-08f, -3.180814227e-08f, -3.180457721e-08f, -3.180095732e-08f, -3.179728263e-08f, -3.179355316e-08f, -3.178976893e-08f, -3.178592998e-08f, -3.178203631e-08f, -3.177808796e-08f,
+-3.177408496e-08f, -3.177002732e-08f, -3.176591508e-08f, -3.176174826e-08f, -3.175752688e-08f, -3.175325097e-08f, -3.174892055e-08f, -3.174453566e-08f, -3.174009631e-08f, -3.173560253e-08f,
+-3.173105435e-08f, -3.172645179e-08f, -3.172179489e-08f, -3.171708365e-08f, -3.171231812e-08f, -3.170749832e-08f, -3.170262427e-08f, -3.169769600e-08f, -3.169271354e-08f, -3.168767691e-08f,
+-3.168258614e-08f, -3.167744126e-08f, -3.167224230e-08f, -3.166698927e-08f, -3.166168222e-08f, -3.165632115e-08f, -3.165090611e-08f, -3.164543712e-08f, -3.163991421e-08f, -3.163433740e-08f,
+-3.162870673e-08f, -3.162302221e-08f, -3.161728388e-08f, -3.161149177e-08f, -3.160564590e-08f, -3.159974630e-08f, -3.159379300e-08f, -3.158778603e-08f, -3.158172541e-08f, -3.157561118e-08f,
+-3.156944336e-08f, -3.156322199e-08f, -3.155694708e-08f, -3.155061867e-08f, -3.154423679e-08f, -3.153780146e-08f, -3.153131272e-08f, -3.152477059e-08f, -3.151817511e-08f, -3.151152630e-08f,
+-3.150482419e-08f, -3.149806881e-08f, -3.149126020e-08f, -3.148439837e-08f, -3.147748336e-08f, -3.147051521e-08f, -3.146349393e-08f, -3.145641956e-08f, -3.144929213e-08f, -3.144211167e-08f,
+-3.143487821e-08f, -3.142759178e-08f, -3.142025241e-08f, -3.141286013e-08f, -3.140541497e-08f, -3.139791696e-08f, -3.139036614e-08f, -3.138276253e-08f, -3.137510616e-08f, -3.136739707e-08f,
+-3.135963528e-08f, -3.135182083e-08f, -3.134395374e-08f, -3.133603406e-08f, -3.132806181e-08f, -3.132003702e-08f, -3.131195972e-08f, -3.130382995e-08f, -3.129564773e-08f, -3.128741310e-08f,
+-3.127912610e-08f, -3.127078674e-08f, -3.126239507e-08f, -3.125395112e-08f, -3.124545491e-08f, -3.123690649e-08f, -3.122830587e-08f, -3.121965311e-08f, -3.121094822e-08f, -3.120219124e-08f,
+-3.119338221e-08f, -3.118452115e-08f, -3.117560810e-08f, -3.116664309e-08f, -3.115762616e-08f, -3.114855733e-08f, -3.113943665e-08f, -3.113026414e-08f, -3.112103983e-08f, -3.111176377e-08f,
+-3.110243598e-08f, -3.109305650e-08f, -3.108362537e-08f, -3.107414260e-08f, -3.106460825e-08f, -3.105502234e-08f, -3.104538491e-08f, -3.103569598e-08f, -3.102595561e-08f, -3.101616381e-08f,
+-3.100632062e-08f, -3.099642609e-08f, -3.098648023e-08f, -3.097648310e-08f, -3.096643471e-08f, -3.095633511e-08f, -3.094618434e-08f, -3.093598242e-08f, -3.092572939e-08f, -3.091542528e-08f,
+-3.090507014e-08f, -3.089466399e-08f, -3.088420687e-08f, -3.087369882e-08f, -3.086313988e-08f, -3.085253007e-08f, -3.084186943e-08f, -3.083115801e-08f, -3.082039582e-08f, -3.080958292e-08f,
+-3.079871934e-08f, -3.078780510e-08f, -3.077684026e-08f, -3.076582484e-08f, -3.075475888e-08f, -3.074364242e-08f, -3.073247549e-08f, -3.072125813e-08f, -3.070999037e-08f, -3.069867226e-08f,
+-3.068730383e-08f, -3.067588512e-08f, -3.066441616e-08f, -3.065289699e-08f, -3.064132764e-08f, -3.062970816e-08f, -3.061803858e-08f, -3.060631894e-08f, -3.059454928e-08f, -3.058272962e-08f,
+-3.057086002e-08f, -3.055894051e-08f, -3.054697112e-08f, -3.053495190e-08f, -3.052288288e-08f, -3.051076409e-08f, -3.049859558e-08f, -3.048637739e-08f, -3.047410955e-08f, -3.046179210e-08f,
+-3.044942509e-08f, -3.043700853e-08f, -3.042454249e-08f, -3.041202699e-08f, -3.039946207e-08f, -3.038684777e-08f, -3.037418413e-08f, -3.036147120e-08f, -3.034870900e-08f, -3.033589757e-08f,
+-3.032303696e-08f, -3.031012721e-08f, -3.029716835e-08f, -3.028416042e-08f, -3.027110347e-08f, -3.025799752e-08f, -3.024484263e-08f, -3.023163883e-08f, -3.021838616e-08f, -3.020508465e-08f,
+-3.019173436e-08f, -3.017833532e-08f, -3.016488756e-08f, -3.015139114e-08f, -3.013784608e-08f, -3.012425243e-08f, -3.011061023e-08f, -3.009691952e-08f, -3.008318034e-08f, -3.006939273e-08f,
+-3.005555673e-08f, -3.004167238e-08f, -3.002773973e-08f, -3.001375880e-08f, -2.999972965e-08f, -2.998565232e-08f, -2.997152683e-08f, -2.995735325e-08f, -2.994313160e-08f, -2.992886193e-08f,
+-2.991454427e-08f, -2.990017868e-08f, -2.988576519e-08f, -2.987130384e-08f, -2.985679468e-08f, -2.984223775e-08f, -2.982763308e-08f, -2.981298072e-08f, -2.979828071e-08f, -2.978353309e-08f,
+-2.976873791e-08f, -2.975389521e-08f, -2.973900502e-08f, -2.972406740e-08f, -2.970908238e-08f, -2.969405000e-08f, -2.967897032e-08f, -2.966384336e-08f, -2.964866918e-08f, -2.963344781e-08f,
+-2.961817929e-08f, -2.960286368e-08f, -2.958750102e-08f, -2.957209133e-08f, -2.955663468e-08f, -2.954113110e-08f, -2.952558063e-08f, -2.950998332e-08f, -2.949433922e-08f, -2.947864835e-08f,
+-2.946291078e-08f, -2.944712653e-08f, -2.943129567e-08f, -2.941541821e-08f, -2.939949422e-08f, -2.938352374e-08f, -2.936750680e-08f, -2.935144346e-08f, -2.933533375e-08f, -2.931917773e-08f,
+-2.930297543e-08f, -2.928672690e-08f, -2.927043218e-08f, -2.925409131e-08f, -2.923770435e-08f, -2.922127133e-08f, -2.920479231e-08f, -2.918826732e-08f, -2.917169640e-08f, -2.915507961e-08f,
+-2.913841699e-08f, -2.912170858e-08f, -2.910495443e-08f, -2.908815459e-08f, -2.907130909e-08f, -2.905441798e-08f, -2.903748131e-08f, -2.902049912e-08f, -2.900347146e-08f, -2.898639837e-08f,
+-2.896927991e-08f, -2.895211610e-08f, -2.893490701e-08f, -2.891765267e-08f, -2.890035313e-08f, -2.888300844e-08f, -2.886561864e-08f, -2.884818378e-08f, -2.883070390e-08f, -2.881317905e-08f,
+-2.879560928e-08f, -2.877799463e-08f, -2.876033514e-08f, -2.874263087e-08f, -2.872488186e-08f, -2.870708816e-08f, -2.868924981e-08f, -2.867136686e-08f, -2.865343935e-08f, -2.863546734e-08f,
+-2.861745087e-08f, -2.859938998e-08f, -2.858128473e-08f, -2.856313515e-08f, -2.854494130e-08f, -2.852670323e-08f, -2.850842097e-08f, -2.849009459e-08f, -2.847172411e-08f, -2.845330960e-08f,
+-2.843485110e-08f, -2.841634865e-08f, -2.839780231e-08f, -2.837921212e-08f, -2.836057813e-08f, -2.834190039e-08f, -2.832317893e-08f, -2.830441382e-08f, -2.828560511e-08f, -2.826675282e-08f,
+-2.824785703e-08f, -2.822891776e-08f, -2.820993508e-08f, -2.819090903e-08f, -2.817183965e-08f, -2.815272700e-08f, -2.813357113e-08f, -2.811437207e-08f, -2.809512989e-08f, -2.807584463e-08f,
+-2.805651633e-08f, -2.803714506e-08f, -2.801773084e-08f, -2.799827374e-08f, -2.797877381e-08f, -2.795923108e-08f, -2.793964561e-08f, -2.792001746e-08f, -2.790034666e-08f, -2.788063327e-08f,
+-2.786087733e-08f, -2.784107890e-08f, -2.782123803e-08f, -2.780135476e-08f, -2.778142914e-08f, -2.776146123e-08f, -2.774145106e-08f, -2.772139870e-08f, -2.770130419e-08f, -2.768116759e-08f,
+-2.766098893e-08f, -2.764076827e-08f, -2.762050567e-08f, -2.760020116e-08f, -2.757985481e-08f, -2.755946666e-08f, -2.753903675e-08f, -2.751856515e-08f, -2.749805190e-08f, -2.747749704e-08f,
+-2.745690064e-08f, -2.743626275e-08f, -2.741558340e-08f, -2.739486266e-08f, -2.737410056e-08f, -2.735329718e-08f, -2.733245254e-08f, -2.731156672e-08f, -2.729063974e-08f, -2.726967168e-08f,
+-2.724866257e-08f, -2.722761247e-08f, -2.720652143e-08f, -2.718538950e-08f, -2.716421673e-08f, -2.714300318e-08f, -2.712174889e-08f, -2.710045391e-08f, -2.707911830e-08f, -2.705774211e-08f,
+-2.703632538e-08f, -2.701486818e-08f, -2.699337055e-08f, -2.697183255e-08f, -2.695025422e-08f, -2.692863561e-08f, -2.690697679e-08f, -2.688527780e-08f, -2.686353869e-08f, -2.684175951e-08f,
+-2.681994032e-08f, -2.679808117e-08f, -2.677618212e-08f, -2.675424320e-08f, -2.673226448e-08f, -2.671024601e-08f, -2.668818783e-08f, -2.666609001e-08f, -2.664395259e-08f, -2.662177563e-08f,
+-2.659955918e-08f, -2.657730330e-08f, -2.655500802e-08f, -2.653267342e-08f, -2.651029953e-08f, -2.648788642e-08f, -2.646543413e-08f, -2.644294272e-08f, -2.642041225e-08f, -2.639784275e-08f,
+-2.637523430e-08f, -2.635258694e-08f, -2.632990072e-08f, -2.630717569e-08f, -2.628441192e-08f, -2.626160945e-08f, -2.623876834e-08f, -2.621588864e-08f, -2.619297040e-08f, -2.617001369e-08f,
+-2.614701854e-08f, -2.612398501e-08f, -2.610091317e-08f, -2.607780306e-08f, -2.605465473e-08f, -2.603146824e-08f, -2.600824365e-08f, -2.598498100e-08f, -2.596168035e-08f, -2.593834177e-08f,
+-2.591496529e-08f, -2.589155097e-08f, -2.586809887e-08f, -2.584460904e-08f, -2.582108154e-08f, -2.579751642e-08f, -2.577391374e-08f, -2.575027354e-08f, -2.572659589e-08f, -2.570288084e-08f,
+-2.567912844e-08f, -2.565533875e-08f, -2.563151182e-08f, -2.560764770e-08f, -2.558374646e-08f, -2.555980815e-08f, -2.553583282e-08f, -2.551182052e-08f, -2.548777131e-08f, -2.546368525e-08f,
+-2.543956240e-08f, -2.541540279e-08f, -2.539120650e-08f, -2.536697358e-08f, -2.534270408e-08f, -2.531839806e-08f, -2.529405556e-08f, -2.526967666e-08f, -2.524526140e-08f, -2.522080984e-08f,
+-2.519632203e-08f, -2.517179804e-08f, -2.514723791e-08f, -2.512264170e-08f, -2.509800946e-08f, -2.507334126e-08f, -2.504863715e-08f, -2.502389718e-08f, -2.499912142e-08f, -2.497430991e-08f,
+-2.494946271e-08f, -2.492457988e-08f, -2.489966147e-08f, -2.487470754e-08f, -2.484971816e-08f, -2.482469336e-08f, -2.479963321e-08f, -2.477453777e-08f, -2.474940709e-08f, -2.472424123e-08f,
+-2.469904024e-08f, -2.467380418e-08f, -2.464853311e-08f, -2.462322708e-08f, -2.459788616e-08f, -2.457251039e-08f, -2.454709983e-08f, -2.452165455e-08f, -2.449617459e-08f, -2.447066002e-08f,
+-2.444511089e-08f, -2.441952726e-08f, -2.439390918e-08f, -2.436825671e-08f, -2.434256992e-08f, -2.431684885e-08f, -2.429109356e-08f, -2.426530411e-08f, -2.423948056e-08f, -2.421362297e-08f,
+-2.418773138e-08f, -2.416180587e-08f, -2.413584648e-08f, -2.410985328e-08f, -2.408382632e-08f, -2.405776566e-08f, -2.403167135e-08f, -2.400554346e-08f, -2.397938204e-08f, -2.395318715e-08f,
+-2.392695885e-08f, -2.390069719e-08f, -2.387440224e-08f, -2.384807404e-08f, -2.382171267e-08f, -2.379531817e-08f, -2.376889060e-08f, -2.374243003e-08f, -2.371593651e-08f, -2.368941009e-08f,
+-2.366285085e-08f, -2.363625882e-08f, -2.360963408e-08f, -2.358297668e-08f, -2.355628668e-08f, -2.352956414e-08f, -2.350280911e-08f, -2.347602166e-08f, -2.344920184e-08f, -2.342234971e-08f,
+-2.339546533e-08f, -2.336854876e-08f, -2.334160006e-08f, -2.331461928e-08f, -2.328760649e-08f, -2.326056173e-08f, -2.323348508e-08f, -2.320637659e-08f, -2.317923632e-08f, -2.315206433e-08f,
+-2.312486067e-08f, -2.309762541e-08f, -2.307035860e-08f, -2.304306030e-08f, -2.301573058e-08f, -2.298836949e-08f, -2.296097709e-08f, -2.293355344e-08f, -2.290609860e-08f, -2.287861263e-08f,
+-2.285109558e-08f, -2.282354752e-08f, -2.279596851e-08f, -2.276835860e-08f, -2.274071786e-08f, -2.271304634e-08f, -2.268534411e-08f, -2.265761121e-08f, -2.262984772e-08f, -2.260205369e-08f,
+-2.257422919e-08f, -2.254637426e-08f, -2.251848898e-08f, -2.249057339e-08f, -2.246262757e-08f, -2.243465156e-08f, -2.240664544e-08f, -2.237860926e-08f, -2.235054307e-08f, -2.232244695e-08f,
+-2.229432094e-08f, -2.226616511e-08f, -2.223797953e-08f, -2.220976424e-08f, -2.218151931e-08f, -2.215324480e-08f, -2.212494077e-08f, -2.209660728e-08f, -2.206824439e-08f, -2.203985216e-08f,
+-2.201143065e-08f, -2.198297993e-08f, -2.195450004e-08f, -2.192599105e-08f, -2.189745303e-08f, -2.186888603e-08f, -2.184029011e-08f, -2.181166534e-08f, -2.178301176e-08f, -2.175432946e-08f,
+-2.172561847e-08f, -2.169687888e-08f, -2.166811073e-08f, -2.163931408e-08f, -2.161048900e-08f, -2.158163556e-08f, -2.155275380e-08f, -2.152384379e-08f, -2.149490559e-08f, -2.146593926e-08f,
+-2.143694486e-08f, -2.140792246e-08f, -2.137887211e-08f, -2.134979388e-08f, -2.132068782e-08f, -2.129155400e-08f, -2.126239248e-08f, -2.123320332e-08f, -2.120398658e-08f, -2.117474232e-08f,
+-2.114547060e-08f, -2.111617149e-08f, -2.108684504e-08f, -2.105749132e-08f, -2.102811038e-08f, -2.099870230e-08f, -2.096926712e-08f, -2.093980492e-08f, -2.091031575e-08f, -2.088079967e-08f,
+-2.085125676e-08f, -2.082168705e-08f, -2.079209063e-08f, -2.076246755e-08f, -2.073281787e-08f, -2.070314166e-08f, -2.067343897e-08f, -2.064370986e-08f, -2.061395441e-08f, -2.058417267e-08f,
+-2.055436470e-08f, -2.052453056e-08f, -2.049467032e-08f, -2.046478403e-08f, -2.043487177e-08f, -2.040493359e-08f, -2.037496955e-08f, -2.034497971e-08f, -2.031496414e-08f, -2.028492290e-08f,
+-2.025485605e-08f, -2.022476366e-08f, -2.019464578e-08f, -2.016450248e-08f, -2.013433381e-08f, -2.010413985e-08f, -2.007392065e-08f, -2.004367628e-08f, -2.001340679e-08f, -1.998311225e-08f,
+-1.995279273e-08f, -1.992244828e-08f, -1.989207897e-08f, -1.986168485e-08f, -1.983126600e-08f, -1.980082247e-08f, -1.977035433e-08f, -1.973986164e-08f, -1.970934445e-08f, -1.967880284e-08f,
+-1.964823687e-08f, -1.961764659e-08f, -1.958703208e-08f, -1.955639339e-08f, -1.952573058e-08f, -1.949504373e-08f, -1.946433288e-08f, -1.943359811e-08f, -1.940283947e-08f, -1.937205704e-08f,
+-1.934125086e-08f, -1.931042101e-08f, -1.927956755e-08f, -1.924869053e-08f, -1.921779003e-08f, -1.918686611e-08f, -1.915591882e-08f, -1.912494824e-08f, -1.909395442e-08f, -1.906293742e-08f,
+-1.903189732e-08f, -1.900083417e-08f, -1.896974803e-08f, -1.893863897e-08f, -1.890750706e-08f, -1.887635235e-08f, -1.884517490e-08f, -1.881397479e-08f, -1.878275207e-08f, -1.875150681e-08f,
+-1.872023907e-08f, -1.868894891e-08f, -1.865763640e-08f, -1.862630159e-08f, -1.859494456e-08f, -1.856356537e-08f, -1.853216407e-08f, -1.850074074e-08f, -1.846929543e-08f, -1.843782821e-08f,
+-1.840633914e-08f, -1.837482829e-08f, -1.834329571e-08f, -1.831174148e-08f, -1.828016566e-08f, -1.824856830e-08f, -1.821694947e-08f, -1.818530924e-08f, -1.815364767e-08f, -1.812196482e-08f,
+-1.809026076e-08f, -1.805853554e-08f, -1.802678924e-08f, -1.799502192e-08f, -1.796323363e-08f, -1.793142445e-08f, -1.789959444e-08f, -1.786774365e-08f, -1.783587216e-08f, -1.780398003e-08f,
+-1.777206732e-08f, -1.774013409e-08f, -1.770818041e-08f, -1.767620635e-08f, -1.764421196e-08f, -1.761219731e-08f, -1.758016246e-08f, -1.754810748e-08f, -1.751603243e-08f, -1.748393738e-08f,
+-1.745182238e-08f, -1.741968751e-08f, -1.738753282e-08f, -1.735535839e-08f, -1.732316426e-08f, -1.729095052e-08f, -1.725871721e-08f, -1.722646441e-08f, -1.719419218e-08f, -1.716190058e-08f,
+-1.712958968e-08f, -1.709725954e-08f, -1.706491023e-08f, -1.703254180e-08f, -1.700015432e-08f, -1.696774787e-08f, -1.693532249e-08f, -1.690287826e-08f, -1.687041523e-08f, -1.683793348e-08f,
+-1.680543307e-08f, -1.677291405e-08f, -1.674037650e-08f, -1.670782048e-08f, -1.667524606e-08f, -1.664265329e-08f, -1.661004224e-08f, -1.657741298e-08f, -1.654476556e-08f, -1.651210006e-08f,
+-1.647941654e-08f, -1.644671506e-08f, -1.641399568e-08f, -1.638125848e-08f, -1.634850351e-08f, -1.631573083e-08f, -1.628294052e-08f, -1.625013264e-08f, -1.621730725e-08f, -1.618446442e-08f,
+-1.615160420e-08f, -1.611872667e-08f, -1.608583189e-08f, -1.605291992e-08f, -1.601999082e-08f, -1.598704467e-08f, -1.595408152e-08f, -1.592110145e-08f, -1.588810450e-08f, -1.585509076e-08f,
+-1.582206028e-08f, -1.578901312e-08f, -1.575594936e-08f, -1.572286905e-08f, -1.568977227e-08f, -1.565665906e-08f, -1.562352951e-08f, -1.559038367e-08f, -1.555722161e-08f, -1.552404339e-08f,
+-1.549084908e-08f, -1.545763874e-08f, -1.542441243e-08f, -1.539117023e-08f, -1.535791218e-08f, -1.532463837e-08f, -1.529134885e-08f, -1.525804369e-08f, -1.522472295e-08f, -1.519138670e-08f,
+-1.515803500e-08f, -1.512466791e-08f, -1.509128551e-08f, -1.505788785e-08f, -1.502447500e-08f, -1.499104702e-08f, -1.495760399e-08f, -1.492414595e-08f, -1.489067298e-08f, -1.485718515e-08f,
+-1.482368251e-08f, -1.479016513e-08f, -1.475663308e-08f, -1.472308641e-08f, -1.468952521e-08f, -1.465594952e-08f, -1.462235941e-08f, -1.458875496e-08f, -1.455513621e-08f, -1.452150325e-08f,
+-1.448785613e-08f, -1.445419491e-08f, -1.442051967e-08f, -1.438683046e-08f, -1.435312735e-08f, -1.431941041e-08f, -1.428567969e-08f, -1.425193527e-08f, -1.421817721e-08f, -1.418440558e-08f,
+-1.415062043e-08f, -1.411682184e-08f, -1.408300986e-08f, -1.404918456e-08f, -1.401534602e-08f, -1.398149428e-08f, -1.394762942e-08f, -1.391375150e-08f, -1.387986058e-08f, -1.384595674e-08f,
+-1.381204003e-08f, -1.377811052e-08f, -1.374416827e-08f, -1.371021335e-08f, -1.367624582e-08f, -1.364226576e-08f, -1.360827321e-08f, -1.357426825e-08f, -1.354025095e-08f, -1.350622136e-08f,
+-1.347217955e-08f, -1.343812559e-08f, -1.340405953e-08f, -1.336998145e-08f, -1.333589142e-08f, -1.330178948e-08f, -1.326767572e-08f, -1.323355019e-08f, -1.319941295e-08f, -1.316526408e-08f,
+-1.313110364e-08f, -1.309693169e-08f, -1.306274829e-08f, -1.302855352e-08f, -1.299434743e-08f, -1.296013010e-08f, -1.292590158e-08f, -1.289166194e-08f, -1.285741124e-08f, -1.282314955e-08f,
+-1.278887694e-08f, -1.275459347e-08f, -1.272029919e-08f, -1.268599419e-08f, -1.265167852e-08f, -1.261735225e-08f, -1.258301543e-08f, -1.254866815e-08f, -1.251431045e-08f, -1.247994241e-08f,
+-1.244556409e-08f, -1.241117555e-08f, -1.237677687e-08f, -1.234236809e-08f, -1.230794930e-08f, -1.227352055e-08f, -1.223908190e-08f, -1.220463343e-08f, -1.217017520e-08f, -1.213570726e-08f,
+-1.210122969e-08f, -1.206674256e-08f, -1.203224591e-08f, -1.199773983e-08f, -1.196322437e-08f, -1.192869960e-08f, -1.189416558e-08f, -1.185962238e-08f, -1.182507006e-08f, -1.179050869e-08f,
+-1.175593833e-08f, -1.172135904e-08f, -1.168677090e-08f, -1.165217396e-08f, -1.161756829e-08f, -1.158295395e-08f, -1.154833101e-08f, -1.151369954e-08f, -1.147905959e-08f, -1.144441123e-08f,
+-1.140975453e-08f, -1.137508955e-08f, -1.134041635e-08f, -1.130573500e-08f, -1.127104557e-08f, -1.123634811e-08f, -1.120164270e-08f, -1.116692939e-08f, -1.113220826e-08f, -1.109747936e-08f,
+-1.106274276e-08f, -1.102799852e-08f, -1.099324672e-08f, -1.095848741e-08f, -1.092372065e-08f, -1.088894652e-08f, -1.085416507e-08f, -1.081937637e-08f, -1.078458049e-08f, -1.074977749e-08f,
+-1.071496743e-08f, -1.068015038e-08f, -1.064532640e-08f, -1.061049555e-08f, -1.057565791e-08f, -1.054081353e-08f, -1.050596248e-08f, -1.047110483e-08f, -1.043624063e-08f, -1.040136995e-08f,
+-1.036649286e-08f, -1.033160942e-08f, -1.029671969e-08f, -1.026182374e-08f, -1.022692163e-08f, -1.019201343e-08f, -1.015709921e-08f, -1.012217901e-08f, -1.008725292e-08f, -1.005232098e-08f,
+-1.001738328e-08f, -9.982439866e-09f, -9.947490808e-09f, -9.912536170e-09f, -9.877576015e-09f, -9.842610407e-09f, -9.807639412e-09f, -9.772663091e-09f, -9.737681510e-09f, -9.702694733e-09f,
+-9.667702823e-09f, -9.632705845e-09f, -9.597703862e-09f, -9.562696938e-09f, -9.527685138e-09f, -9.492668525e-09f, -9.457647163e-09f, -9.422621116e-09f, -9.387590448e-09f, -9.352555222e-09f,
+-9.317515503e-09f, -9.282471354e-09f, -9.247422840e-09f, -9.212370024e-09f, -9.177312969e-09f, -9.142251740e-09f, -9.107186400e-09f, -9.072117013e-09f, -9.037043644e-09f, -9.001966354e-09f,
+-8.966885209e-09f, -8.931800272e-09f, -8.896711606e-09f, -8.861619276e-09f, -8.826523345e-09f, -8.791423876e-09f, -8.756320933e-09f, -8.721214580e-09f, -8.686104880e-09f, -8.650991897e-09f,
+-8.615875695e-09f, -8.580756337e-09f, -8.545633886e-09f, -8.510508406e-09f, -8.475379961e-09f, -8.440248613e-09f, -8.405114428e-09f, -8.369977467e-09f, -8.334837794e-09f, -8.299695473e-09f,
+-8.264550567e-09f, -8.229403140e-09f, -8.194253254e-09f, -8.159100974e-09f, -8.123946362e-09f, -8.088789482e-09f, -8.053630397e-09f, -8.018469170e-09f, -7.983305865e-09f, -7.948140545e-09f,
+-7.912973273e-09f, -7.877804113e-09f, -7.842633126e-09f, -7.807460378e-09f, -7.772285930e-09f, -7.737109846e-09f, -7.701932189e-09f, -7.666753022e-09f, -7.631572409e-09f, -7.596390411e-09f,
+-7.561207093e-09f, -7.526022517e-09f, -7.490836746e-09f, -7.455649844e-09f, -7.420461873e-09f, -7.385272896e-09f, -7.350082976e-09f, -7.314892176e-09f, -7.279700559e-09f, -7.244508187e-09f,
+-7.209315124e-09f, -7.174121433e-09f, -7.138927176e-09f, -7.103732415e-09f, -7.068537215e-09f, -7.033341636e-09f, -6.998145743e-09f, -6.962949598e-09f, -6.927753264e-09f, -6.892556802e-09f,
+-6.857360276e-09f, -6.822163749e-09f, -6.786967283e-09f, -6.751770941e-09f, -6.716574784e-09f, -6.681378877e-09f, -6.646183280e-09f, -6.610988057e-09f, -6.575793271e-09f, -6.540598983e-09f,
+-6.505405256e-09f, -6.470212152e-09f, -6.435019734e-09f, -6.399828064e-09f, -6.364637205e-09f, -6.329447218e-09f, -6.294258167e-09f, -6.259070113e-09f, -6.223883118e-09f, -6.188697245e-09f,
+-6.153512557e-09f, -6.118329114e-09f, -6.083146979e-09f, -6.047966215e-09f, -6.012786884e-09f, -5.977609047e-09f, -5.942432766e-09f, -5.907258105e-09f, -5.872085124e-09f, -5.836913885e-09f,
+-5.801744451e-09f, -5.766576884e-09f, -5.731411245e-09f, -5.696247597e-09f, -5.661086000e-09f, -5.625926518e-09f, -5.590769212e-09f, -5.555614143e-09f, -5.520461373e-09f, -5.485310965e-09f,
+-5.450162979e-09f, -5.415017478e-09f, -5.379874523e-09f, -5.344734176e-09f, -5.309596498e-09f, -5.274461551e-09f, -5.239329397e-09f, -5.204200097e-09f, -5.169073712e-09f, -5.133950305e-09f,
+-5.098829936e-09f, -5.063712666e-09f, -5.028598559e-09f, -4.993487673e-09f, -4.958380072e-09f, -4.923275816e-09f, -4.888174967e-09f, -4.853077586e-09f, -4.817983734e-09f, -4.782893472e-09f,
+-4.747806862e-09f, -4.712723965e-09f, -4.677644841e-09f, -4.642569552e-09f, -4.607498160e-09f, -4.572430724e-09f, -4.537367306e-09f, -4.502307968e-09f, -4.467252769e-09f, -4.432201772e-09f,
+-4.397155036e-09f, -4.362112623e-09f, -4.327074594e-09f, -4.292041009e-09f, -4.257011930e-09f, -4.221987416e-09f, -4.186967529e-09f, -4.151952329e-09f, -4.116941878e-09f, -4.081936235e-09f,
+-4.046935462e-09f, -4.011939618e-09f, -3.976948766e-09f, -3.941962964e-09f, -3.906982273e-09f, -3.872006755e-09f, -3.837036469e-09f, -3.802071476e-09f, -3.767111836e-09f, -3.732157610e-09f,
+-3.697208858e-09f, -3.662265640e-09f, -3.627328016e-09f, -3.592396047e-09f, -3.557469793e-09f, -3.522549314e-09f, -3.487634670e-09f, -3.452725922e-09f, -3.417823129e-09f, -3.382926351e-09f,
+-3.348035649e-09f, -3.313151082e-09f, -3.278272710e-09f, -3.243400594e-09f, -3.208534793e-09f, -3.173675367e-09f, -3.138822376e-09f, -3.103975880e-09f, -3.069135938e-09f, -3.034302610e-09f,
+-2.999475956e-09f, -2.964656035e-09f, -2.929842907e-09f, -2.895036633e-09f, -2.860237270e-09f, -2.825444880e-09f, -2.790659520e-09f, -2.755881252e-09f, -2.721110133e-09f, -2.686346225e-09f,
+-2.651589585e-09f, -2.616840273e-09f, -2.582098350e-09f, -2.547363873e-09f, -2.512636902e-09f, -2.477917497e-09f, -2.443205716e-09f, -2.408501619e-09f, -2.373805264e-09f, -2.339116711e-09f,
+-2.304436020e-09f, -2.269763248e-09f, -2.235098454e-09f, -2.200441699e-09f, -2.165793040e-09f, -2.131152537e-09f, -2.096520247e-09f, -2.061896231e-09f, -2.027280547e-09f, -1.992673254e-09f,
+-1.958074409e-09f, -1.923484073e-09f, -1.888902303e-09f, -1.854329158e-09f, -1.819764697e-09f, -1.785208978e-09f, -1.750662060e-09f, -1.716124000e-09f, -1.681594858e-09f, -1.647074692e-09f,
+-1.612563561e-09f, -1.578061521e-09f, -1.543568633e-09f, -1.509084953e-09f, -1.474610540e-09f, -1.440145453e-09f, -1.405689749e-09f, -1.371243486e-09f, -1.336806723e-09f, -1.302379518e-09f,
+-1.267961928e-09f, -1.233554011e-09f, -1.199155826e-09f, -1.164767430e-09f, -1.130388880e-09f, -1.096020236e-09f, -1.061661554e-09f, -1.027312892e-09f, -9.929743076e-10f, -9.586458590e-10f,
+-9.243276035e-10f, -8.900195985e-10f, -8.557219017e-10f, -8.214345705e-10f, -7.871576624e-10f, -7.528912347e-10f, -7.186353448e-10f, -6.843900500e-10f, -6.501554077e-10f, -6.159314750e-10f,
+-5.817183091e-10f, -5.475159673e-10f, -5.133245067e-10f, -4.791439843e-10f, -4.449744573e-10f, -4.108159825e-10f, -3.766686171e-10f, -3.425324179e-10f, -3.084074417e-10f, -2.742937456e-10f,
+-2.401913863e-10f, -2.061004205e-10f, -1.720209050e-10f, -1.379528966e-10f, -1.038964518e-10f, -6.985162720e-11f, -3.581847950e-11f, -1.797065166e-12f, 3.221255929e-11f, 6.621033742e-11f,
+1.001962128e-10f, 1.341701291e-10f, 1.681320299e-10f, 2.020818590e-10f, 2.360195601e-10f, 2.699450770e-10f, 3.038583535e-10f, 3.377593336e-10f, 3.716479610e-10f, 4.055241798e-10f,
+4.393879340e-10f, 4.732391676e-10f, 5.070778247e-10f, 5.409038494e-10f, 5.747171859e-10f, 6.085177783e-10f, 6.423055710e-10f, 6.760805082e-10f, 7.098425342e-10f, 7.435915934e-10f,
+7.773276303e-10f, 8.110505892e-10f, 8.447604148e-10f, 8.784570514e-10f, 9.121404438e-10f, 9.458105365e-10f, 9.794672743e-10f, 1.013110602e-09f, 1.046740464e-09f, 1.080356805e-09f,
+1.113959570e-09f, 1.147548705e-09f, 1.181124153e-09f, 1.214685860e-09f, 1.248233771e-09f, 1.281767831e-09f, 1.315287986e-09f, 1.348794179e-09f, 1.382286357e-09f, 1.415764465e-09f,
+1.449228447e-09f, 1.482678250e-09f, 1.516113818e-09f, 1.549535098e-09f, 1.582942033e-09f, 1.616334571e-09f, 1.649712657e-09f, 1.683076235e-09f, 1.716425253e-09f, 1.749759655e-09f,
+1.783079387e-09f, 1.816384394e-09f, 1.849674624e-09f, 1.882950021e-09f, 1.916210532e-09f, 1.949456102e-09f, 1.982686678e-09f, 2.015902205e-09f, 2.049102630e-09f, 2.082287898e-09f,
+2.115457956e-09f, 2.148612751e-09f, 2.181752227e-09f, 2.214876333e-09f, 2.247985013e-09f, 2.281078215e-09f, 2.314155885e-09f, 2.347217969e-09f, 2.380264414e-09f, 2.413295167e-09f,
+2.446310174e-09f, 2.479309381e-09f, 2.512292736e-09f, 2.545260186e-09f, 2.578211677e-09f, 2.611147155e-09f, 2.644066569e-09f, 2.676969865e-09f, 2.709856989e-09f, 2.742727890e-09f,
+2.775582513e-09f, 2.808420807e-09f, 2.841242718e-09f, 2.874048194e-09f, 2.906837182e-09f, 2.939609630e-09f, 2.972365484e-09f, 3.005104692e-09f, 3.037827202e-09f, 3.070532961e-09f,
+3.103221917e-09f, 3.135894017e-09f, 3.168549209e-09f, 3.201187441e-09f, 3.233808661e-09f, 3.266412816e-09f, 3.298999854e-09f, 3.331569723e-09f, 3.364122372e-09f, 3.396657748e-09f,
+3.429175799e-09f, 3.461676473e-09f, 3.494159719e-09f, 3.526625485e-09f, 3.559073718e-09f, 3.591504368e-09f, 3.623917383e-09f, 3.656312710e-09f, 3.688690300e-09f, 3.721050099e-09f,
+3.753392057e-09f, 3.785716122e-09f, 3.818022243e-09f, 3.850310368e-09f, 3.882580447e-09f, 3.914832428e-09f, 3.947066260e-09f, 3.979281892e-09f, 4.011479273e-09f, 4.043658352e-09f,
+4.075819078e-09f, 4.107961399e-09f, 4.140085266e-09f, 4.172190628e-09f, 4.204277433e-09f, 4.236345631e-09f, 4.268395171e-09f, 4.300426003e-09f, 4.332438077e-09f, 4.364431341e-09f,
+4.396405746e-09f, 4.428361240e-09f, 4.460297774e-09f, 4.492215297e-09f, 4.524113760e-09f, 4.555993111e-09f, 4.587853301e-09f, 4.619694280e-09f, 4.651515998e-09f, 4.683318404e-09f,
+4.715101449e-09f, 4.746865083e-09f, 4.778609257e-09f, 4.810333919e-09f, 4.842039022e-09f, 4.873724514e-09f, 4.905390346e-09f, 4.937036470e-09f, 4.968662835e-09f, 5.000269391e-09f,
+5.031856091e-09f, 5.063422883e-09f, 5.094969719e-09f, 5.126496550e-09f, 5.158003326e-09f, 5.189489999e-09f, 5.220956519e-09f, 5.252402837e-09f, 5.283828904e-09f, 5.315234671e-09f,
+5.346620090e-09f, 5.377985112e-09f, 5.409329687e-09f, 5.440653768e-09f, 5.471957305e-09f, 5.503240250e-09f, 5.534502554e-09f, 5.565744169e-09f, 5.596965047e-09f, 5.628165139e-09f,
+5.659344396e-09f, 5.690502771e-09f, 5.721640215e-09f, 5.752756680e-09f, 5.783852118e-09f, 5.814926481e-09f, 5.845979721e-09f, 5.877011789e-09f, 5.908022639e-09f, 5.939012222e-09f,
+5.969980490e-09f, 6.000927396e-09f, 6.031852892e-09f, 6.062756930e-09f, 6.093639463e-09f, 6.124500443e-09f, 6.155339823e-09f, 6.186157555e-09f, 6.216953593e-09f, 6.247727888e-09f,
+6.278480394e-09f, 6.309211063e-09f, 6.339919849e-09f, 6.370606703e-09f, 6.401271580e-09f, 6.431914432e-09f, 6.462535212e-09f, 6.493133873e-09f, 6.523710370e-09f, 6.554264654e-09f,
+6.584796679e-09f, 6.615306399e-09f, 6.645793767e-09f, 6.676258736e-09f, 6.706701260e-09f, 6.737121294e-09f, 6.767518789e-09f, 6.797893700e-09f, 6.828245982e-09f, 6.858575586e-09f,
+6.888882469e-09f, 6.919166582e-09f, 6.949427882e-09f, 6.979666320e-09f, 7.009881853e-09f, 7.040074433e-09f, 7.070244015e-09f, 7.100390553e-09f, 7.130514002e-09f, 7.160614316e-09f,
+7.190691449e-09f, 7.220745356e-09f, 7.250775992e-09f, 7.280783311e-09f, 7.310767268e-09f, 7.340727817e-09f, 7.370664914e-09f, 7.400578513e-09f, 7.430468569e-09f, 7.460335037e-09f,
+7.490177872e-09f, 7.519997030e-09f, 7.549792465e-09f, 7.579564132e-09f, 7.609311988e-09f, 7.639035986e-09f, 7.668736083e-09f, 7.698412234e-09f, 7.728064394e-09f, 7.757692520e-09f,
+7.787296566e-09f, 7.816876488e-09f, 7.846432242e-09f, 7.875963784e-09f, 7.905471070e-09f, 7.934954055e-09f, 7.964412696e-09f, 7.993846948e-09f, 8.023256768e-09f, 8.052642112e-09f,
+8.082002935e-09f, 8.111339195e-09f, 8.140650847e-09f, 8.169937848e-09f, 8.199200155e-09f, 8.228437723e-09f, 8.257650509e-09f, 8.286838471e-09f, 8.316001564e-09f, 8.345139746e-09f,
+8.374252973e-09f, 8.403341202e-09f, 8.432404390e-09f, 8.461442493e-09f, 8.490455470e-09f, 8.519443277e-09f, 8.548405871e-09f, 8.577343209e-09f, 8.606255249e-09f, 8.635141948e-09f,
+8.664003264e-09f, 8.692839153e-09f, 8.721649574e-09f, 8.750434483e-09f, 8.779193839e-09f, 8.807927600e-09f, 8.836635722e-09f, 8.865318164e-09f, 8.893974884e-09f, 8.922605840e-09f,
+8.951210989e-09f, 8.979790290e-09f, 9.008343701e-09f, 9.036871180e-09f, 9.065372685e-09f, 9.093848174e-09f, 9.122297607e-09f, 9.150720941e-09f, 9.179118134e-09f, 9.207489146e-09f,
+9.235833935e-09f, 9.264152460e-09f, 9.292444679e-09f, 9.320710551e-09f, 9.348950035e-09f, 9.377163090e-09f, 9.405349675e-09f, 9.433509749e-09f, 9.461643271e-09f, 9.489750201e-09f,
+9.517830496e-09f, 9.545884118e-09f, 9.573911024e-09f, 9.601911175e-09f, 9.629884530e-09f, 9.657831049e-09f, 9.685750690e-09f, 9.713643414e-09f, 9.741509181e-09f, 9.769347950e-09f,
+9.797159681e-09f, 9.824944334e-09f, 9.852701870e-09f, 9.880432247e-09f, 9.908135426e-09f, 9.935811367e-09f, 9.963460031e-09f, 9.991081378e-09f, 1.001867537e-08f, 1.004624196e-08f,
+1.007378112e-08f, 1.010129280e-08f, 1.012877697e-08f, 1.015623358e-08f, 1.018366260e-08f, 1.021106399e-08f, 1.023843770e-08f, 1.026578371e-08f, 1.029310196e-08f, 1.032039243e-08f,
+1.034765506e-08f, 1.037488983e-08f, 1.040209670e-08f, 1.042927562e-08f, 1.045642656e-08f, 1.048354948e-08f, 1.051064433e-08f, 1.053771109e-08f, 1.056474972e-08f, 1.059176016e-08f,
+1.061874240e-08f, 1.064569638e-08f, 1.067262207e-08f, 1.069951944e-08f, 1.072638844e-08f, 1.075322904e-08f, 1.078004119e-08f, 1.080682487e-08f, 1.083358003e-08f, 1.086030663e-08f,
+1.088700464e-08f, 1.091367402e-08f, 1.094031474e-08f, 1.096692675e-08f, 1.099351001e-08f, 1.102006450e-08f, 1.104659017e-08f, 1.107308699e-08f, 1.109955492e-08f, 1.112599392e-08f,
+1.115240395e-08f, 1.117878498e-08f, 1.120513698e-08f, 1.123145989e-08f, 1.125775370e-08f, 1.128401836e-08f, 1.131025383e-08f, 1.133646008e-08f, 1.136263707e-08f, 1.138878477e-08f,
+1.141490313e-08f, 1.144099213e-08f, 1.146705172e-08f, 1.149308188e-08f, 1.151908256e-08f, 1.154505372e-08f, 1.157099534e-08f, 1.159690738e-08f, 1.162278980e-08f, 1.164864256e-08f,
+1.167446563e-08f, 1.170025898e-08f, 1.172602256e-08f, 1.175175635e-08f, 1.177746030e-08f, 1.180313438e-08f, 1.182877857e-08f, 1.185439281e-08f, 1.187997708e-08f, 1.190553134e-08f,
+1.193105556e-08f, 1.195654970e-08f, 1.198201372e-08f, 1.200744760e-08f, 1.203285129e-08f, 1.205822477e-08f, 1.208356799e-08f, 1.210888093e-08f, 1.213416354e-08f, 1.215941580e-08f,
+1.218463767e-08f, 1.220982912e-08f, 1.223499010e-08f, 1.226012060e-08f, 1.228522056e-08f, 1.231028997e-08f, 1.233532878e-08f, 1.236033696e-08f, 1.238531448e-08f, 1.241026130e-08f,
+1.243517740e-08f, 1.246006273e-08f, 1.248491726e-08f, 1.250974096e-08f, 1.253453380e-08f, 1.255929574e-08f, 1.258402675e-08f, 1.260872680e-08f, 1.263339585e-08f, 1.265803387e-08f,
+1.268264082e-08f, 1.270721668e-08f, 1.273176142e-08f, 1.275627499e-08f, 1.278075736e-08f, 1.280520851e-08f, 1.282962840e-08f, 1.285401700e-08f, 1.287837427e-08f, 1.290270018e-08f,
+1.292699471e-08f, 1.295125781e-08f, 1.297548946e-08f, 1.299968963e-08f, 1.302385828e-08f, 1.304799537e-08f, 1.307210089e-08f, 1.309617479e-08f, 1.312021704e-08f, 1.314422762e-08f,
+1.316820649e-08f, 1.319215362e-08f, 1.321606897e-08f, 1.323995252e-08f, 1.326380424e-08f, 1.328762409e-08f, 1.331141205e-08f, 1.333516807e-08f, 1.335889214e-08f, 1.338258421e-08f,
+1.340624427e-08f, 1.342987227e-08f, 1.345346818e-08f, 1.347703198e-08f, 1.350056364e-08f, 1.352406312e-08f, 1.354753040e-08f, 1.357096544e-08f, 1.359436821e-08f, 1.361773868e-08f,
+1.364107683e-08f, 1.366438262e-08f, 1.368765602e-08f, 1.371089700e-08f, 1.373410554e-08f, 1.375728159e-08f, 1.378042514e-08f, 1.380353615e-08f, 1.382661459e-08f, 1.384966044e-08f,
+1.387267366e-08f, 1.389565422e-08f, 1.391860210e-08f, 1.394151726e-08f, 1.396439967e-08f, 1.398724932e-08f, 1.401006616e-08f, 1.403285016e-08f, 1.405560131e-08f, 1.407831957e-08f,
+1.410100490e-08f, 1.412365729e-08f, 1.414627671e-08f, 1.416886311e-08f, 1.419141649e-08f, 1.421393680e-08f, 1.423642402e-08f, 1.425887812e-08f, 1.428129907e-08f, 1.430368685e-08f,
+1.432604142e-08f, 1.434836276e-08f, 1.437065084e-08f, 1.439290563e-08f, 1.441512710e-08f, 1.443731523e-08f, 1.445946999e-08f, 1.448159134e-08f, 1.450367927e-08f, 1.452573375e-08f,
+1.454775474e-08f, 1.456974222e-08f, 1.459169617e-08f, 1.461361655e-08f, 1.463550333e-08f, 1.465735650e-08f, 1.467917602e-08f, 1.470096187e-08f, 1.472271402e-08f, 1.474443244e-08f,
+1.476611711e-08f, 1.478776800e-08f, 1.480938507e-08f, 1.483096832e-08f, 1.485251770e-08f, 1.487403320e-08f, 1.489551478e-08f, 1.491696243e-08f, 1.493837610e-08f, 1.495975579e-08f,
+1.498110146e-08f, 1.500241308e-08f, 1.502369063e-08f, 1.504493409e-08f, 1.506614342e-08f, 1.508731861e-08f, 1.510845962e-08f, 1.512956643e-08f, 1.515063902e-08f, 1.517167736e-08f,
+1.519268142e-08f, 1.521365118e-08f, 1.523458661e-08f, 1.525548770e-08f, 1.527635440e-08f, 1.529718671e-08f, 1.531798458e-08f, 1.533874801e-08f, 1.535947696e-08f, 1.538017141e-08f,
+1.540083133e-08f, 1.542145670e-08f, 1.544204750e-08f, 1.546260370e-08f, 1.548312527e-08f, 1.550361219e-08f, 1.552406444e-08f, 1.554448200e-08f, 1.556486483e-08f, 1.558521292e-08f,
+1.560552624e-08f, 1.562580476e-08f, 1.564604847e-08f, 1.566625734e-08f, 1.568643134e-08f, 1.570657046e-08f, 1.572667466e-08f, 1.574674393e-08f, 1.576677824e-08f, 1.578677757e-08f,
+1.580674189e-08f, 1.582667118e-08f, 1.584656542e-08f, 1.586642459e-08f, 1.588624866e-08f, 1.590603761e-08f, 1.592579141e-08f, 1.594551005e-08f, 1.596519350e-08f, 1.598484174e-08f,
+1.600445474e-08f, 1.602403249e-08f, 1.604357495e-08f, 1.606308212e-08f, 1.608255396e-08f, 1.610199046e-08f, 1.612139158e-08f, 1.614075732e-08f, 1.616008764e-08f, 1.617938253e-08f,
+1.619864197e-08f, 1.621786592e-08f, 1.623705438e-08f, 1.625620731e-08f, 1.627532470e-08f, 1.629440653e-08f, 1.631345277e-08f, 1.633246340e-08f, 1.635143840e-08f, 1.637037776e-08f,
+1.638928144e-08f, 1.640814943e-08f, 1.642698171e-08f, 1.644577826e-08f, 1.646453905e-08f, 1.648326406e-08f, 1.650195328e-08f, 1.652060668e-08f, 1.653922424e-08f, 1.655780594e-08f,
+1.657635177e-08f, 1.659486170e-08f, 1.661333570e-08f, 1.663177377e-08f, 1.665017588e-08f, 1.666854201e-08f, 1.668687214e-08f, 1.670516625e-08f, 1.672342432e-08f, 1.674164633e-08f,
+1.675983226e-08f, 1.677798209e-08f, 1.679609581e-08f, 1.681417338e-08f, 1.683221480e-08f, 1.685022004e-08f, 1.686818909e-08f, 1.688612192e-08f, 1.690401852e-08f, 1.692187886e-08f,
+1.693970294e-08f, 1.695749072e-08f, 1.697524219e-08f, 1.699295733e-08f, 1.701063612e-08f, 1.702827855e-08f, 1.704588459e-08f, 1.706345423e-08f, 1.708098745e-08f, 1.709848423e-08f,
+1.711594455e-08f, 1.713336839e-08f, 1.715075574e-08f, 1.716810657e-08f, 1.718542088e-08f, 1.720269864e-08f, 1.721993982e-08f, 1.723714443e-08f, 1.725431243e-08f, 1.727144382e-08f,
+1.728853856e-08f, 1.730559665e-08f, 1.732261807e-08f, 1.733960280e-08f, 1.735655082e-08f, 1.737346212e-08f, 1.739033668e-08f, 1.740717448e-08f, 1.742397550e-08f, 1.744073974e-08f,
+1.745746716e-08f, 1.747415776e-08f, 1.749081151e-08f, 1.750742841e-08f, 1.752400843e-08f, 1.754055156e-08f, 1.755705778e-08f, 1.757352707e-08f, 1.758995943e-08f, 1.760635483e-08f,
+1.762271325e-08f, 1.763903468e-08f, 1.765531911e-08f, 1.767156652e-08f, 1.768777689e-08f, 1.770395021e-08f, 1.772008646e-08f, 1.773618562e-08f, 1.775224769e-08f, 1.776827264e-08f,
+1.778426045e-08f, 1.780021113e-08f, 1.781612464e-08f, 1.783200097e-08f, 1.784784012e-08f, 1.786364206e-08f, 1.787940677e-08f, 1.789513425e-08f, 1.791082448e-08f, 1.792647744e-08f,
+1.794209312e-08f, 1.795767151e-08f, 1.797321259e-08f, 1.798871634e-08f, 1.800418275e-08f, 1.801961181e-08f, 1.803500351e-08f, 1.805035782e-08f, 1.806567474e-08f, 1.808095424e-08f,
+1.809619633e-08f, 1.811140097e-08f, 1.812656817e-08f, 1.814169790e-08f, 1.815679015e-08f, 1.817184491e-08f, 1.818686217e-08f, 1.820184190e-08f, 1.821678410e-08f, 1.823168876e-08f,
+1.824655586e-08f, 1.826138538e-08f, 1.827617732e-08f, 1.829093167e-08f, 1.830564840e-08f, 1.832032750e-08f, 1.833496897e-08f, 1.834957279e-08f, 1.836413895e-08f, 1.837866743e-08f,
+1.839315823e-08f, 1.840761132e-08f, 1.842202671e-08f, 1.843640437e-08f, 1.845074429e-08f, 1.846504646e-08f, 1.847931087e-08f, 1.849353751e-08f, 1.850772637e-08f, 1.852187742e-08f,
+1.853599067e-08f, 1.855006610e-08f, 1.856410370e-08f, 1.857810345e-08f, 1.859206535e-08f, 1.860598938e-08f, 1.861987554e-08f, 1.863372380e-08f, 1.864753417e-08f, 1.866130662e-08f,
+1.867504115e-08f, 1.868873775e-08f, 1.870239640e-08f, 1.871601710e-08f, 1.872959983e-08f, 1.874314459e-08f, 1.875665136e-08f, 1.877012013e-08f, 1.878355089e-08f, 1.879694363e-08f,
+1.881029834e-08f, 1.882361502e-08f, 1.883689364e-08f, 1.885013421e-08f, 1.886333670e-08f, 1.887650112e-08f, 1.888962744e-08f, 1.890271567e-08f, 1.891576578e-08f, 1.892877778e-08f,
+1.894175165e-08f, 1.895468738e-08f, 1.896758496e-08f, 1.898044439e-08f, 1.899326565e-08f, 1.900604873e-08f, 1.901879363e-08f, 1.903150033e-08f, 1.904416883e-08f, 1.905679912e-08f,
+1.906939119e-08f, 1.908194503e-08f, 1.909446063e-08f, 1.910693798e-08f, 1.911937708e-08f, 1.913177791e-08f, 1.914414047e-08f, 1.915646474e-08f, 1.916875073e-08f, 1.918099842e-08f,
+1.919320781e-08f, 1.920537888e-08f, 1.921751162e-08f, 1.922960604e-08f, 1.924166212e-08f, 1.925367985e-08f, 1.926565923e-08f, 1.927760025e-08f, 1.928950290e-08f, 1.930136717e-08f,
+1.931319306e-08f, 1.932498055e-08f, 1.933672965e-08f, 1.934844034e-08f, 1.936011262e-08f, 1.937174648e-08f, 1.938334191e-08f, 1.939489891e-08f, 1.940641746e-08f, 1.941789757e-08f,
+1.942933922e-08f, 1.944074241e-08f, 1.945210713e-08f, 1.946343338e-08f, 1.947472115e-08f, 1.948597043e-08f, 1.949718121e-08f, 1.950835350e-08f, 1.951948728e-08f, 1.953058254e-08f,
+1.954163929e-08f, 1.955265751e-08f, 1.956363721e-08f, 1.957457836e-08f, 1.958548098e-08f, 1.959634505e-08f, 1.960717056e-08f, 1.961795752e-08f, 1.962870591e-08f, 1.963941573e-08f,
+1.965008698e-08f, 1.966071964e-08f, 1.967131372e-08f, 1.968186922e-08f, 1.969238611e-08f, 1.970286441e-08f, 1.971330410e-08f, 1.972370518e-08f, 1.973406764e-08f, 1.974439149e-08f,
+1.975467671e-08f, 1.976492330e-08f, 1.977513126e-08f, 1.978530058e-08f, 1.979543126e-08f, 1.980552329e-08f, 1.981557667e-08f, 1.982559140e-08f, 1.983556747e-08f, 1.984550487e-08f,
+1.985540361e-08f, 1.986526368e-08f, 1.987508508e-08f, 1.988486780e-08f, 1.989461183e-08f, 1.990431718e-08f, 1.991398385e-08f, 1.992361182e-08f, 1.993320109e-08f, 1.994275167e-08f,
+1.995226355e-08f, 1.996173672e-08f, 1.997117118e-08f, 1.998056694e-08f, 1.998992398e-08f, 1.999924230e-08f, 2.000852190e-08f, 2.001776278e-08f, 2.002696494e-08f, 2.003612837e-08f,
+2.004525307e-08f, 2.005433904e-08f, 2.006338627e-08f, 2.007239477e-08f, 2.008136452e-08f, 2.009029554e-08f, 2.009918782e-08f, 2.010804134e-08f, 2.011685613e-08f, 2.012563216e-08f,
+2.013436944e-08f, 2.014306797e-08f, 2.015172775e-08f, 2.016034877e-08f, 2.016893103e-08f, 2.017747453e-08f, 2.018597928e-08f, 2.019444526e-08f, 2.020287248e-08f, 2.021126094e-08f,
+2.021961063e-08f, 2.022792156e-08f, 2.023619372e-08f, 2.024442711e-08f, 2.025262174e-08f, 2.026077760e-08f, 2.026889468e-08f, 2.027697300e-08f, 2.028501255e-08f, 2.029301332e-08f,
+2.030097532e-08f, 2.030889855e-08f, 2.031678301e-08f, 2.032462870e-08f, 2.033243561e-08f, 2.034020376e-08f, 2.034793313e-08f, 2.035562372e-08f, 2.036327555e-08f, 2.037088860e-08f,
+2.037846288e-08f, 2.038599840e-08f, 2.039349514e-08f, 2.040095311e-08f, 2.040837231e-08f, 2.041575274e-08f, 2.042309440e-08f, 2.043039730e-08f, 2.043766143e-08f, 2.044488679e-08f,
+2.045207339e-08f, 2.045922123e-08f, 2.046633031e-08f, 2.047340062e-08f, 2.048043217e-08f, 2.048742497e-08f, 2.049437901e-08f, 2.050129429e-08f, 2.050817082e-08f, 2.051500860e-08f,
+2.052180762e-08f, 2.052856790e-08f, 2.053528943e-08f, 2.054197222e-08f, 2.054861626e-08f, 2.055522156e-08f, 2.056178813e-08f, 2.056831595e-08f, 2.057480504e-08f, 2.058125541e-08f,
+2.058766704e-08f, 2.059403994e-08f, 2.060037412e-08f, 2.060666957e-08f, 2.061292631e-08f, 2.061914433e-08f, 2.062532364e-08f, 2.063146424e-08f, 2.063756612e-08f, 2.064362931e-08f,
+2.064965379e-08f, 2.065563957e-08f, 2.066158666e-08f, 2.066749505e-08f, 2.067336476e-08f, 2.067919578e-08f, 2.068498812e-08f, 2.069074178e-08f, 2.069645677e-08f, 2.070213308e-08f,
+2.070777073e-08f, 2.071336971e-08f, 2.071893004e-08f, 2.072445171e-08f, 2.072993473e-08f, 2.073537910e-08f, 2.074078482e-08f, 2.074615191e-08f, 2.075148037e-08f, 2.075677019e-08f,
+2.076202139e-08f, 2.076723396e-08f, 2.077240792e-08f, 2.077754327e-08f, 2.078264001e-08f, 2.078769815e-08f, 2.079271769e-08f, 2.079769864e-08f, 2.080264100e-08f, 2.080754477e-08f,
+2.081240997e-08f, 2.081723660e-08f, 2.082202466e-08f, 2.082677416e-08f, 2.083148510e-08f, 2.083615749e-08f, 2.084079134e-08f, 2.084538664e-08f, 2.084994342e-08f, 2.085446166e-08f,
+2.085894138e-08f, 2.086338259e-08f, 2.086778528e-08f, 2.087214947e-08f, 2.087647516e-08f, 2.088076236e-08f, 2.088501107e-08f, 2.088922130e-08f, 2.089339306e-08f, 2.089752635e-08f,
+2.090162118e-08f, 2.090567756e-08f, 2.090969549e-08f, 2.091367497e-08f, 2.091761603e-08f, 2.092151865e-08f, 2.092538286e-08f, 2.092920865e-08f, 2.093299603e-08f, 2.093674502e-08f,
+2.094045561e-08f, 2.094412782e-08f, 2.094776165e-08f, 2.095135711e-08f, 2.095491421e-08f, 2.095843295e-08f, 2.096191334e-08f, 2.096535539e-08f, 2.096875911e-08f, 2.097212451e-08f,
+2.097545159e-08f, 2.097874035e-08f, 2.098199082e-08f, 2.098520299e-08f, 2.098837688e-08f, 2.099151249e-08f, 2.099460983e-08f, 2.099766892e-08f, 2.100068974e-08f, 2.100367233e-08f,
+2.100661668e-08f, 2.100952280e-08f, 2.101239070e-08f, 2.101522040e-08f, 2.101801189e-08f, 2.102076519e-08f, 2.102348031e-08f, 2.102615725e-08f, 2.102879603e-08f, 2.103139665e-08f,
+2.103395912e-08f, 2.103648346e-08f, 2.103896967e-08f, 2.104141775e-08f, 2.104382773e-08f, 2.104619961e-08f, 2.104853340e-08f, 2.105082910e-08f, 2.105308673e-08f, 2.105530630e-08f,
+2.105748782e-08f, 2.105963130e-08f, 2.106173674e-08f, 2.106380416e-08f, 2.106583357e-08f, 2.106782497e-08f, 2.106977839e-08f, 2.107169382e-08f, 2.107357128e-08f, 2.107541077e-08f,
+2.107721232e-08f, 2.107897593e-08f, 2.108070160e-08f, 2.108238936e-08f, 2.108403921e-08f, 2.108565116e-08f, 2.108722522e-08f, 2.108876141e-08f, 2.109025973e-08f, 2.109172020e-08f,
+2.109314282e-08f, 2.109452761e-08f, 2.109587458e-08f, 2.109718374e-08f, 2.109845511e-08f, 2.109968868e-08f, 2.110088448e-08f, 2.110204252e-08f, 2.110316281e-08f, 2.110424535e-08f,
+2.110529017e-08f, 2.110629726e-08f, 2.110726666e-08f, 2.110819835e-08f, 2.110909237e-08f, 2.110994872e-08f, 2.111076741e-08f, 2.111154846e-08f, 2.111229187e-08f, 2.111299766e-08f,
+2.111366585e-08f, 2.111429643e-08f, 2.111488944e-08f, 2.111544487e-08f, 2.111596275e-08f, 2.111644307e-08f, 2.111688587e-08f, 2.111729115e-08f, 2.111765892e-08f, 2.111798919e-08f,
+2.111828198e-08f, 2.111853731e-08f, 2.111875518e-08f, 2.111893561e-08f, 2.111907860e-08f, 2.111918419e-08f, 2.111925237e-08f, 2.111928316e-08f, 2.111927658e-08f, 2.111923263e-08f,
+2.111915134e-08f, 2.111903271e-08f, 2.111887676e-08f, 2.111868351e-08f, 2.111845296e-08f, 2.111818513e-08f, 2.111788004e-08f, 2.111753769e-08f, 2.111715811e-08f, 2.111674131e-08f,
+2.111628730e-08f, 2.111579609e-08f, 2.111526770e-08f, 2.111470215e-08f, 2.111409944e-08f, 2.111345960e-08f, 2.111278264e-08f, 2.111206857e-08f, 2.111131741e-08f, 2.111052917e-08f,
+2.110970387e-08f, 2.110884151e-08f, 2.110794213e-08f, 2.110700573e-08f, 2.110603232e-08f, 2.110502193e-08f, 2.110397456e-08f, 2.110289024e-08f, 2.110176897e-08f, 2.110061078e-08f,
+2.109941568e-08f, 2.109818368e-08f, 2.109691480e-08f, 2.109560905e-08f, 2.109426646e-08f, 2.109288704e-08f, 2.109147079e-08f, 2.109001775e-08f, 2.108852792e-08f, 2.108700132e-08f,
+2.108543797e-08f, 2.108383788e-08f, 2.108220107e-08f, 2.108052756e-08f, 2.107881735e-08f, 2.107707048e-08f, 2.107528695e-08f, 2.107346678e-08f, 2.107160999e-08f, 2.106971659e-08f,
+2.106778660e-08f, 2.106582004e-08f, 2.106381692e-08f, 2.106177727e-08f, 2.105970109e-08f, 2.105758841e-08f, 2.105543924e-08f, 2.105325360e-08f, 2.105103150e-08f, 2.104877297e-08f,
+2.104647802e-08f, 2.104414667e-08f, 2.104177893e-08f, 2.103937483e-08f, 2.103693437e-08f, 2.103445759e-08f, 2.103194449e-08f, 2.102939509e-08f, 2.102680941e-08f, 2.102418747e-08f,
+2.102152929e-08f, 2.101883488e-08f, 2.101610427e-08f, 2.101333747e-08f, 2.101053449e-08f, 2.100769536e-08f, 2.100482010e-08f, 2.100190872e-08f, 2.099896124e-08f, 2.099597768e-08f,
+2.099295806e-08f, 2.098990239e-08f, 2.098681070e-08f, 2.098368301e-08f, 2.098051933e-08f, 2.097731968e-08f, 2.097408408e-08f, 2.097081255e-08f, 2.096750510e-08f, 2.096416177e-08f,
+2.096078256e-08f, 2.095736749e-08f, 2.095391659e-08f, 2.095042987e-08f, 2.094690736e-08f, 2.094334907e-08f, 2.093975501e-08f, 2.093612522e-08f, 2.093245971e-08f, 2.092875850e-08f,
+2.092502161e-08f, 2.092124906e-08f, 2.091744086e-08f, 2.091359705e-08f, 2.090971763e-08f, 2.090580264e-08f, 2.090185207e-08f, 2.089786597e-08f, 2.089384435e-08f, 2.088978722e-08f,
+2.088569462e-08f, 2.088156655e-08f, 2.087740304e-08f, 2.087320411e-08f, 2.086896978e-08f, 2.086470007e-08f, 2.086039500e-08f, 2.085605460e-08f, 2.085167887e-08f, 2.084726785e-08f,
+2.084282155e-08f, 2.083833999e-08f, 2.083382320e-08f, 2.082927120e-08f, 2.082468400e-08f, 2.082006163e-08f, 2.081540411e-08f, 2.081071146e-08f, 2.080598370e-08f, 2.080122085e-08f,
+2.079642294e-08f, 2.079158998e-08f, 2.078672200e-08f, 2.078181901e-08f, 2.077688105e-08f, 2.077190813e-08f, 2.076690027e-08f, 2.076185749e-08f, 2.075677982e-08f, 2.075166728e-08f,
+2.074651989e-08f, 2.074133766e-08f, 2.073612064e-08f, 2.073086883e-08f, 2.072558225e-08f, 2.072026094e-08f, 2.071490491e-08f, 2.070951418e-08f, 2.070408878e-08f, 2.069862872e-08f,
+2.069313404e-08f, 2.068760476e-08f, 2.068204088e-08f, 2.067644245e-08f, 2.067080948e-08f, 2.066514199e-08f, 2.065944001e-08f, 2.065370356e-08f, 2.064793266e-08f, 2.064212734e-08f,
+2.063628761e-08f, 2.063041351e-08f, 2.062450505e-08f, 2.061856226e-08f, 2.061258515e-08f, 2.060657376e-08f, 2.060052811e-08f, 2.059444822e-08f, 2.058833411e-08f, 2.058218581e-08f,
+2.057600334e-08f, 2.056978672e-08f, 2.056353598e-08f, 2.055725114e-08f, 2.055093223e-08f, 2.054457926e-08f, 2.053819227e-08f, 2.053177127e-08f, 2.052531630e-08f, 2.051882737e-08f,
+2.051230450e-08f, 2.050574773e-08f, 2.049915707e-08f, 2.049253256e-08f, 2.048587420e-08f, 2.047918204e-08f, 2.047245609e-08f, 2.046569638e-08f, 2.045890293e-08f, 2.045207577e-08f,
+2.044521491e-08f, 2.043832040e-08f, 2.043139224e-08f, 2.042443046e-08f, 2.041743510e-08f, 2.041040617e-08f, 2.040334370e-08f, 2.039624772e-08f, 2.038911824e-08f, 2.038195530e-08f,
+2.037475891e-08f, 2.036752911e-08f, 2.036026592e-08f, 2.035296936e-08f, 2.034563946e-08f, 2.033827625e-08f, 2.033087975e-08f, 2.032344998e-08f, 2.031598698e-08f, 2.030849076e-08f,
+2.030096135e-08f, 2.029339878e-08f, 2.028580307e-08f, 2.027817426e-08f, 2.027051235e-08f, 2.026281739e-08f, 2.025508940e-08f, 2.024732839e-08f, 2.023953441e-08f, 2.023170747e-08f,
+2.022384760e-08f, 2.021595482e-08f, 2.020802917e-08f, 2.020007067e-08f, 2.019207934e-08f, 2.018405521e-08f, 2.017599832e-08f, 2.016790867e-08f, 2.015978631e-08f, 2.015163125e-08f,
+2.014344353e-08f, 2.013522316e-08f, 2.012697018e-08f, 2.011868462e-08f, 2.011036650e-08f, 2.010201584e-08f, 2.009363268e-08f, 2.008521704e-08f, 2.007676894e-08f, 2.006828842e-08f,
+2.005977551e-08f, 2.005123022e-08f, 2.004265258e-08f, 2.003404263e-08f, 2.002540039e-08f, 2.001672589e-08f, 2.000801915e-08f, 1.999928021e-08f, 1.999050908e-08f, 1.998170581e-08f,
+1.997287040e-08f, 1.996400290e-08f, 1.995510333e-08f, 1.994617172e-08f, 1.993720809e-08f, 1.992821247e-08f, 1.991918490e-08f, 1.991012539e-08f, 1.990103398e-08f, 1.989191070e-08f,
+1.988275556e-08f, 1.987356861e-08f, 1.986434987e-08f, 1.985509936e-08f, 1.984581712e-08f, 1.983650317e-08f, 1.982715755e-08f, 1.981778027e-08f, 1.980837137e-08f, 1.979893088e-08f,
+1.978945882e-08f, 1.977995523e-08f, 1.977042013e-08f, 1.976085355e-08f, 1.975125551e-08f, 1.974162606e-08f, 1.973196521e-08f, 1.972227300e-08f, 1.971254946e-08f, 1.970279460e-08f,
+1.969300847e-08f, 1.968319109e-08f, 1.967334250e-08f, 1.966346271e-08f, 1.965355175e-08f, 1.964360967e-08f, 1.963363648e-08f, 1.962363222e-08f, 1.961359692e-08f, 1.960353060e-08f,
+1.959343329e-08f, 1.958330503e-08f, 1.957314584e-08f, 1.956295575e-08f, 1.955273479e-08f, 1.954248300e-08f, 1.953220040e-08f, 1.952188701e-08f, 1.951154288e-08f, 1.950116803e-08f,
+1.949076249e-08f, 1.948032629e-08f, 1.946985947e-08f, 1.945936204e-08f, 1.944883404e-08f, 1.943827550e-08f, 1.942768645e-08f, 1.941706692e-08f, 1.940641694e-08f, 1.939573655e-08f,
+1.938502576e-08f, 1.937428462e-08f, 1.936351315e-08f, 1.935271138e-08f, 1.934187934e-08f, 1.933101707e-08f, 1.932012459e-08f, 1.930920193e-08f, 1.929824913e-08f, 1.928726622e-08f,
+1.927625322e-08f, 1.926521017e-08f, 1.925413710e-08f, 1.924303403e-08f, 1.923190101e-08f, 1.922073805e-08f, 1.920954520e-08f, 1.919832248e-08f, 1.918706992e-08f, 1.917578756e-08f,
+1.916447542e-08f, 1.915313354e-08f, 1.914176195e-08f, 1.913036068e-08f, 1.911892976e-08f, 1.910746922e-08f, 1.909597910e-08f, 1.908445942e-08f, 1.907291022e-08f, 1.906133152e-08f,
+1.904972336e-08f, 1.903808578e-08f, 1.902641880e-08f, 1.901472245e-08f, 1.900299677e-08f, 1.899124179e-08f, 1.897945753e-08f, 1.896764404e-08f, 1.895580134e-08f, 1.894392947e-08f,
+1.893202845e-08f, 1.892009833e-08f, 1.890813912e-08f, 1.889615087e-08f, 1.888413361e-08f, 1.887208736e-08f, 1.886001216e-08f, 1.884790805e-08f, 1.883577505e-08f, 1.882361320e-08f,
+1.881142252e-08f, 1.879920306e-08f, 1.878695484e-08f, 1.877467790e-08f, 1.876237227e-08f, 1.875003798e-08f, 1.873767507e-08f, 1.872528356e-08f, 1.871286349e-08f, 1.870041490e-08f,
+1.868793781e-08f, 1.867543226e-08f, 1.866289828e-08f, 1.865033590e-08f, 1.863774516e-08f, 1.862512609e-08f, 1.861247873e-08f, 1.859980310e-08f, 1.858709924e-08f, 1.857436718e-08f,
+1.856160695e-08f, 1.854881860e-08f, 1.853600214e-08f, 1.852315763e-08f, 1.851028508e-08f, 1.849738453e-08f, 1.848445602e-08f, 1.847149957e-08f, 1.845851523e-08f, 1.844550302e-08f,
+1.843246299e-08f, 1.841939515e-08f, 1.840629955e-08f, 1.839317623e-08f, 1.838002520e-08f, 1.836684652e-08f, 1.835364020e-08f, 1.834040629e-08f, 1.832714482e-08f, 1.831385582e-08f,
+1.830053933e-08f, 1.828719538e-08f, 1.827382401e-08f, 1.826042524e-08f, 1.824699912e-08f, 1.823354567e-08f, 1.822006493e-08f, 1.820655694e-08f, 1.819302173e-08f, 1.817945934e-08f,
+1.816586979e-08f, 1.815225312e-08f, 1.813860937e-08f, 1.812493858e-08f, 1.811124077e-08f, 1.809751597e-08f, 1.808376424e-08f, 1.806998559e-08f, 1.805618007e-08f, 1.804234770e-08f,
+1.802848853e-08f, 1.801460259e-08f, 1.800068990e-08f, 1.798675052e-08f, 1.797278447e-08f, 1.795879178e-08f, 1.794477250e-08f, 1.793072665e-08f, 1.791665428e-08f, 1.790255541e-08f,
+1.788843009e-08f, 1.787427834e-08f, 1.786010020e-08f, 1.784589571e-08f, 1.783166490e-08f, 1.781740781e-08f, 1.780312448e-08f, 1.778881493e-08f, 1.777447920e-08f, 1.776011733e-08f,
+1.774572936e-08f, 1.773131531e-08f, 1.771687523e-08f, 1.770240915e-08f, 1.768791711e-08f, 1.767339913e-08f, 1.765885527e-08f, 1.764428554e-08f, 1.762968999e-08f, 1.761506866e-08f,
+1.760042158e-08f, 1.758574878e-08f, 1.757105030e-08f, 1.755632618e-08f, 1.754157645e-08f, 1.752680115e-08f, 1.751200032e-08f, 1.749717398e-08f, 1.748232218e-08f, 1.746744495e-08f,
+1.745254233e-08f, 1.743761436e-08f, 1.742266106e-08f, 1.740768249e-08f, 1.739267866e-08f, 1.737764962e-08f, 1.736259541e-08f, 1.734751606e-08f, 1.733241161e-08f, 1.731728209e-08f,
+1.730212754e-08f, 1.728694800e-08f, 1.727174350e-08f, 1.725651408e-08f, 1.724125978e-08f, 1.722598063e-08f, 1.721067666e-08f, 1.719534793e-08f, 1.717999445e-08f, 1.716461628e-08f,
+1.714921344e-08f, 1.713378597e-08f, 1.711833392e-08f, 1.710285730e-08f, 1.708735617e-08f, 1.707183056e-08f, 1.705628051e-08f, 1.704070605e-08f, 1.702510722e-08f, 1.700948405e-08f,
+1.699383659e-08f, 1.697816488e-08f, 1.696246894e-08f, 1.694674881e-08f, 1.693100454e-08f, 1.691523615e-08f, 1.689944369e-08f, 1.688362720e-08f, 1.686778671e-08f, 1.685192225e-08f,
+1.683603387e-08f, 1.682012161e-08f, 1.680418549e-08f, 1.678822556e-08f, 1.677224186e-08f, 1.675623441e-08f, 1.674020327e-08f, 1.672414847e-08f, 1.670807003e-08f, 1.669196802e-08f,
+1.667584245e-08f, 1.665969337e-08f, 1.664352081e-08f, 1.662732482e-08f, 1.661110542e-08f, 1.659486267e-08f, 1.657859659e-08f, 1.656230722e-08f, 1.654599461e-08f, 1.652965879e-08f,
+1.651329979e-08f, 1.649691766e-08f, 1.648051243e-08f, 1.646408414e-08f, 1.644763283e-08f, 1.643115853e-08f, 1.641466129e-08f, 1.639814115e-08f, 1.638159813e-08f, 1.636503229e-08f,
+1.634844365e-08f, 1.633183225e-08f, 1.631519814e-08f, 1.629854136e-08f, 1.628186193e-08f, 1.626515990e-08f, 1.624843530e-08f, 1.623168818e-08f, 1.621491858e-08f, 1.619812652e-08f,
+1.618131206e-08f, 1.616447522e-08f, 1.614761606e-08f, 1.613073459e-08f, 1.611383087e-08f, 1.609690493e-08f, 1.607995682e-08f, 1.606298656e-08f, 1.604599420e-08f, 1.602897978e-08f,
+1.601194333e-08f, 1.599488490e-08f, 1.597780452e-08f, 1.596070223e-08f, 1.594357807e-08f, 1.592643208e-08f, 1.590926430e-08f, 1.589207476e-08f, 1.587486351e-08f, 1.585763059e-08f,
+1.584037602e-08f, 1.582309986e-08f, 1.580580215e-08f, 1.578848291e-08f, 1.577114219e-08f, 1.575378003e-08f, 1.573639646e-08f, 1.571899154e-08f, 1.570156529e-08f, 1.568411775e-08f,
+1.566664897e-08f, 1.564915898e-08f, 1.563164782e-08f, 1.561411553e-08f, 1.559656216e-08f, 1.557898773e-08f, 1.556139229e-08f, 1.554377588e-08f, 1.552613854e-08f, 1.550848031e-08f,
+1.549080122e-08f, 1.547310132e-08f, 1.545538065e-08f, 1.543763924e-08f, 1.541987713e-08f, 1.540209437e-08f, 1.538429099e-08f, 1.536646704e-08f, 1.534862255e-08f, 1.533075756e-08f,
+1.531287211e-08f, 1.529496624e-08f, 1.527703999e-08f, 1.525909341e-08f, 1.524112652e-08f, 1.522313938e-08f, 1.520513202e-08f, 1.518710447e-08f, 1.516905679e-08f, 1.515098900e-08f,
+1.513290115e-08f, 1.511479329e-08f, 1.509666544e-08f, 1.507851765e-08f, 1.506034996e-08f, 1.504216241e-08f, 1.502395503e-08f, 1.500572788e-08f, 1.498748098e-08f, 1.496921439e-08f,
+1.495092813e-08f, 1.493262225e-08f, 1.491429679e-08f, 1.489595179e-08f, 1.487758728e-08f, 1.485920332e-08f, 1.484079994e-08f, 1.482237717e-08f, 1.480393507e-08f, 1.478547367e-08f,
+1.476699300e-08f, 1.474849312e-08f, 1.472997406e-08f, 1.471143586e-08f, 1.469287856e-08f, 1.467430221e-08f, 1.465570683e-08f, 1.463709248e-08f, 1.461845919e-08f, 1.459980701e-08f,
+1.458113597e-08f, 1.456244612e-08f, 1.454373748e-08f, 1.452501012e-08f, 1.450626406e-08f, 1.448749935e-08f, 1.446871602e-08f, 1.444991413e-08f, 1.443109370e-08f, 1.441225478e-08f,
+1.439339741e-08f, 1.437452163e-08f, 1.435562748e-08f, 1.433671500e-08f, 1.431778424e-08f, 1.429883523e-08f, 1.427986801e-08f, 1.426088262e-08f, 1.424187912e-08f, 1.422285752e-08f,
+1.420381789e-08f, 1.418476025e-08f, 1.416568466e-08f, 1.414659114e-08f, 1.412747974e-08f, 1.410835050e-08f, 1.408920347e-08f, 1.407003868e-08f, 1.405085617e-08f, 1.403165599e-08f,
+1.401243817e-08f, 1.399320277e-08f, 1.397394981e-08f, 1.395467934e-08f, 1.393539139e-08f, 1.391608603e-08f, 1.389676327e-08f, 1.387742317e-08f, 1.385806576e-08f, 1.383869109e-08f,
+1.381929919e-08f, 1.379989011e-08f, 1.378046390e-08f, 1.376102058e-08f, 1.374156020e-08f, 1.372208281e-08f, 1.370258844e-08f, 1.368307714e-08f, 1.366354894e-08f, 1.364400390e-08f,
+1.362444204e-08f, 1.360486341e-08f, 1.358526805e-08f, 1.356565601e-08f, 1.354602732e-08f, 1.352638203e-08f, 1.350672018e-08f, 1.348704181e-08f, 1.346734695e-08f, 1.344763566e-08f,
+1.342790797e-08f, 1.340816393e-08f, 1.338840357e-08f, 1.336862694e-08f, 1.334883408e-08f, 1.332902503e-08f, 1.330919983e-08f, 1.328935853e-08f, 1.326950116e-08f, 1.324962777e-08f,
+1.322973839e-08f, 1.320983308e-08f, 1.318991187e-08f, 1.316997481e-08f, 1.315002193e-08f, 1.313005327e-08f, 1.311006888e-08f, 1.309006881e-08f, 1.307005309e-08f, 1.305002176e-08f,
+1.302997486e-08f, 1.300991244e-08f, 1.298983454e-08f, 1.296974121e-08f, 1.294963247e-08f, 1.292950838e-08f, 1.290936897e-08f, 1.288921430e-08f, 1.286904439e-08f, 1.284885929e-08f,
+1.282865905e-08f, 1.280844370e-08f, 1.278821329e-08f, 1.276796786e-08f, 1.274770745e-08f, 1.272743210e-08f, 1.270714186e-08f, 1.268683676e-08f, 1.266651685e-08f, 1.264618218e-08f,
+1.262583277e-08f, 1.260546868e-08f, 1.258508995e-08f, 1.256469661e-08f, 1.254428872e-08f, 1.252386630e-08f, 1.250342942e-08f, 1.248297810e-08f, 1.246251238e-08f, 1.244203232e-08f,
+1.242153795e-08f, 1.240102932e-08f, 1.238050646e-08f, 1.235996942e-08f, 1.233941825e-08f, 1.231885297e-08f, 1.229827364e-08f, 1.227768030e-08f, 1.225707299e-08f, 1.223645175e-08f,
+1.221581663e-08f, 1.219516766e-08f, 1.217450489e-08f, 1.215382836e-08f, 1.213313811e-08f, 1.211243419e-08f, 1.209171664e-08f, 1.207098549e-08f, 1.205024080e-08f, 1.202948260e-08f,
+1.200871094e-08f, 1.198792585e-08f, 1.196712739e-08f, 1.194631559e-08f, 1.192549050e-08f, 1.190465215e-08f, 1.188380059e-08f, 1.186293587e-08f, 1.184205802e-08f, 1.182116709e-08f,
+1.180026311e-08f, 1.177934614e-08f, 1.175841622e-08f, 1.173747338e-08f, 1.171651766e-08f, 1.169554912e-08f, 1.167456780e-08f, 1.165357373e-08f, 1.163256695e-08f, 1.161154752e-08f,
+1.159051547e-08f, 1.156947085e-08f, 1.154841370e-08f, 1.152734405e-08f, 1.150626196e-08f, 1.148516747e-08f, 1.146406061e-08f, 1.144294144e-08f, 1.142180998e-08f, 1.140066629e-08f,
+1.137951041e-08f, 1.135834238e-08f, 1.133716225e-08f, 1.131597005e-08f, 1.129476582e-08f, 1.127354962e-08f, 1.125232148e-08f, 1.123108145e-08f, 1.120982956e-08f, 1.118856586e-08f,
+1.116729040e-08f, 1.114600321e-08f, 1.112470434e-08f, 1.110339384e-08f, 1.108207173e-08f, 1.106073807e-08f, 1.103939290e-08f, 1.101803626e-08f, 1.099666820e-08f, 1.097528875e-08f,
+1.095389796e-08f, 1.093249587e-08f, 1.091108253e-08f, 1.088965797e-08f, 1.086822224e-08f, 1.084677538e-08f, 1.082531744e-08f, 1.080384846e-08f, 1.078236847e-08f, 1.076087753e-08f,
+1.073937567e-08f, 1.071786294e-08f, 1.069633938e-08f, 1.067480504e-08f, 1.065325995e-08f, 1.063170415e-08f, 1.061013770e-08f, 1.058856064e-08f, 1.056697300e-08f, 1.054537482e-08f,
+1.052376616e-08f, 1.050214706e-08f, 1.048051755e-08f, 1.045887768e-08f, 1.043722750e-08f, 1.041556704e-08f, 1.039389634e-08f, 1.037221546e-08f, 1.035052443e-08f, 1.032882330e-08f,
+1.030711210e-08f, 1.028539089e-08f, 1.026365970e-08f, 1.024191858e-08f, 1.022016757e-08f, 1.019840671e-08f, 1.017663604e-08f, 1.015485561e-08f, 1.013306546e-08f, 1.011126564e-08f,
+1.008945618e-08f, 1.006763713e-08f, 1.004580853e-08f, 1.002397043e-08f, 1.000212286e-08f, 9.980265873e-09f, 9.958399506e-09f, 9.936523805e-09f, 9.914638811e-09f, 9.892744568e-09f,
+9.870841118e-09f, 9.848928504e-09f, 9.827006768e-09f, 9.805075954e-09f, 9.783136104e-09f, 9.761187261e-09f, 9.739229467e-09f, 9.717262765e-09f, 9.695287199e-09f, 9.673302810e-09f,
+9.651309642e-09f, 9.629307737e-09f, 9.607297139e-09f, 9.585277888e-09f, 9.563250030e-09f, 9.541213605e-09f, 9.519168658e-09f, 9.497115230e-09f, 9.475053364e-09f, 9.452983104e-09f,
+9.430904492e-09f, 9.408817570e-09f, 9.386722382e-09f, 9.364618969e-09f, 9.342507376e-09f, 9.320387644e-09f, 9.298259816e-09f, 9.276123935e-09f, 9.253980044e-09f, 9.231828186e-09f,
+9.209668403e-09f, 9.187500737e-09f, 9.165325232e-09f, 9.143141931e-09f, 9.120950875e-09f, 9.098752109e-09f, 9.076545673e-09f, 9.054331612e-09f, 9.032109968e-09f, 9.009880784e-09f,
+8.987644101e-09f, 8.965399964e-09f, 8.943148414e-09f, 8.920889495e-09f, 8.898623249e-09f, 8.876349719e-09f, 8.854068947e-09f, 8.831780976e-09f, 8.809485849e-09f, 8.787183609e-09f,
+8.764874297e-09f, 8.742557958e-09f, 8.720234633e-09f, 8.697904366e-09f, 8.675567198e-09f, 8.653223172e-09f, 8.630872332e-09f, 8.608514720e-09f, 8.586150378e-09f, 8.563779349e-09f,
+8.541401676e-09f, 8.519017402e-09f, 8.496626568e-09f, 8.474229218e-09f, 8.451825394e-09f, 8.429415139e-09f, 8.406998496e-09f, 8.384575507e-09f, 8.362146214e-09f, 8.339710661e-09f,
+8.317268890e-09f, 8.294820943e-09f, 8.272366864e-09f, 8.249906694e-09f, 8.227440476e-09f, 8.204968253e-09f, 8.182490068e-09f, 8.160005962e-09f, 8.137515979e-09f, 8.115020161e-09f,
+8.092518551e-09f, 8.070011191e-09f, 8.047498124e-09f, 8.024979391e-09f, 8.002455037e-09f, 7.979925103e-09f, 7.957389632e-09f, 7.934848665e-09f, 7.912302247e-09f, 7.889750419e-09f,
+7.867193224e-09f, 7.844630704e-09f, 7.822062902e-09f, 7.799489860e-09f, 7.776911621e-09f, 7.754328227e-09f, 7.731739720e-09f, 7.709146144e-09f, 7.686547540e-09f, 7.663943951e-09f,
+7.641335419e-09f, 7.618721987e-09f, 7.596103697e-09f, 7.573480592e-09f, 7.550852713e-09f, 7.528220104e-09f, 7.505582807e-09f, 7.482940863e-09f, 7.460294317e-09f, 7.437643209e-09f,
+7.414987582e-09f, 7.392327478e-09f, 7.369662941e-09f, 7.346994011e-09f, 7.324320733e-09f, 7.301643147e-09f, 7.278961296e-09f, 7.256275222e-09f, 7.233584968e-09f, 7.210890576e-09f,
+7.188192089e-09f, 7.165489548e-09f, 7.142782995e-09f, 7.120072474e-09f, 7.097358026e-09f, 7.074639693e-09f, 7.051917518e-09f, 7.029191543e-09f, 7.006461810e-09f, 6.983728361e-09f,
+6.960991238e-09f, 6.938250485e-09f, 6.915506142e-09f, 6.892758252e-09f, 6.870006857e-09f, 6.847251999e-09f, 6.824493721e-09f, 6.801732064e-09f, 6.778967071e-09f, 6.756198784e-09f,
+6.733427244e-09f, 6.710652494e-09f, 6.687874576e-09f, 6.665093532e-09f, 6.642309404e-09f, 6.619522234e-09f, 6.596732064e-09f, 6.573938936e-09f, 6.551142893e-09f, 6.528343975e-09f,
+6.505542226e-09f, 6.482737686e-09f, 6.459930399e-09f, 6.437120405e-09f, 6.414307748e-09f, 6.391492468e-09f, 6.368674608e-09f, 6.345854210e-09f, 6.323031315e-09f, 6.300205966e-09f,
+6.277378204e-09f, 6.254548071e-09f, 6.231715610e-09f, 6.208880861e-09f, 6.186043867e-09f, 6.163204669e-09f, 6.140363310e-09f, 6.117519831e-09f, 6.094674274e-09f, 6.071826680e-09f,
+6.048977092e-09f, 6.026125552e-09f, 6.003272100e-09f, 5.980416778e-09f, 5.957559629e-09f, 5.934700694e-09f, 5.911840015e-09f, 5.888977634e-09f, 5.866113591e-09f, 5.843247929e-09f,
+5.820380689e-09f, 5.797511913e-09f, 5.774641643e-09f, 5.751769920e-09f, 5.728896786e-09f, 5.706022282e-09f, 5.683146450e-09f, 5.660269332e-09f, 5.637390968e-09f, 5.614511401e-09f,
+5.591630671e-09f, 5.568748821e-09f, 5.545865893e-09f, 5.522981926e-09f, 5.500096963e-09f, 5.477211046e-09f, 5.454324215e-09f, 5.431436512e-09f, 5.408547979e-09f, 5.385658657e-09f,
+5.362768587e-09f, 5.339877810e-09f, 5.316986369e-09f, 5.294094303e-09f, 5.271201655e-09f, 5.248308466e-09f, 5.225414777e-09f, 5.202520630e-09f, 5.179626065e-09f, 5.156731124e-09f,
+5.133835848e-09f, 5.110940278e-09f, 5.088044455e-09f, 5.065148422e-09f, 5.042252218e-09f, 5.019355885e-09f, 4.996459464e-09f, 4.973562996e-09f, 4.950666522e-09f, 4.927770084e-09f,
+4.904873722e-09f, 4.881977478e-09f, 4.859081392e-09f, 4.836185506e-09f, 4.813289860e-09f, 4.790394496e-09f, 4.767499454e-09f, 4.744604776e-09f, 4.721710501e-09f, 4.698816673e-09f,
+4.675923330e-09f, 4.653030515e-09f, 4.630138267e-09f, 4.607246628e-09f, 4.584355639e-09f, 4.561465341e-09f, 4.538575773e-09f, 4.515686978e-09f, 4.492798996e-09f, 4.469911867e-09f,
+4.447025633e-09f, 4.424140333e-09f, 4.401256010e-09f, 4.378372702e-09f, 4.355490452e-09f, 4.332609300e-09f, 4.309729286e-09f, 4.286850452e-09f, 4.263972836e-09f, 4.241096482e-09f,
+4.218221427e-09f, 4.195347715e-09f, 4.172475384e-09f, 4.149604475e-09f, 4.126735030e-09f, 4.103867087e-09f, 4.081000689e-09f, 4.058135875e-09f, 4.035272685e-09f, 4.012411161e-09f,
+3.989551342e-09f, 3.966693269e-09f, 3.943836982e-09f, 3.920982521e-09f, 3.898129928e-09f, 3.875279241e-09f, 3.852430502e-09f, 3.829583751e-09f, 3.806739028e-09f, 3.783896372e-09f,
+3.761055825e-09f, 3.738217427e-09f, 3.715381217e-09f, 3.692547236e-09f, 3.669715524e-09f, 3.646886121e-09f, 3.624059067e-09f, 3.601234402e-09f, 3.578412166e-09f, 3.555592400e-09f,
+3.532775143e-09f, 3.509960435e-09f, 3.487148317e-09f, 3.464338827e-09f, 3.441532007e-09f, 3.418727895e-09f, 3.395926533e-09f, 3.373127959e-09f, 3.350332214e-09f, 3.327539337e-09f,
+3.304749369e-09f, 3.281962349e-09f, 3.259178316e-09f, 3.236397311e-09f, 3.213619373e-09f, 3.190844542e-09f, 3.168072858e-09f, 3.145304360e-09f, 3.122539088e-09f, 3.099777081e-09f,
+3.077018380e-09f, 3.054263024e-09f, 3.031511052e-09f, 3.008762503e-09f, 2.986017418e-09f, 2.963275836e-09f, 2.940537796e-09f, 2.917803338e-09f, 2.895072501e-09f, 2.872345325e-09f,
+2.849621849e-09f, 2.826902112e-09f, 2.804186154e-09f, 2.781474014e-09f, 2.758765732e-09f, 2.736061345e-09f, 2.713360895e-09f, 2.690664420e-09f, 2.667971959e-09f, 2.645283552e-09f,
+2.622599238e-09f, 2.599919055e-09f, 2.577243043e-09f, 2.554571241e-09f, 2.531903689e-09f, 2.509240425e-09f, 2.486581487e-09f, 2.463926916e-09f, 2.441276751e-09f, 2.418631029e-09f,
+2.395989791e-09f, 2.373353074e-09f, 2.350720919e-09f, 2.328093363e-09f, 2.305470447e-09f, 2.282852207e-09f, 2.260238684e-09f, 2.237629916e-09f, 2.215025942e-09f, 2.192426800e-09f,
+2.169832530e-09f, 2.147243170e-09f, 2.124658758e-09f, 2.102079334e-09f, 2.079504935e-09f, 2.056935601e-09f, 2.034371370e-09f, 2.011812281e-09f, 1.989258371e-09f, 1.966709681e-09f,
+1.944166247e-09f, 1.921628109e-09f, 1.899095305e-09f, 1.876567873e-09f, 1.854045852e-09f, 1.831529280e-09f, 1.809018196e-09f, 1.786512637e-09f, 1.764012643e-09f, 1.741518250e-09f,
+1.719029498e-09f, 1.696546425e-09f, 1.674069068e-09f, 1.651597467e-09f, 1.629131658e-09f, 1.606671681e-09f, 1.584217574e-09f, 1.561769373e-09f, 1.539327118e-09f, 1.516890847e-09f,
+1.494460597e-09f, 1.472036406e-09f, 1.449618312e-09f, 1.427206354e-09f, 1.404800568e-09f, 1.382400994e-09f, 1.360007668e-09f, 1.337620629e-09f, 1.315239914e-09f, 1.292865561e-09f,
+1.270497608e-09f, 1.248136093e-09f, 1.225781052e-09f, 1.203432524e-09f, 1.181090547e-09f, 1.158755158e-09f, 1.136426394e-09f, 1.114104293e-09f, 1.091788893e-09f, 1.069480231e-09f,
+1.047178345e-09f, 1.024883271e-09f, 1.002595048e-09f, 9.803137127e-10f, 9.580393024e-10f, 9.357718546e-10f, 9.135114066e-10f, 8.912579955e-10f, 8.690116588e-10f, 8.467724335e-10f,
+8.245403568e-10f, 8.023154660e-10f, 7.800977982e-10f, 7.578873905e-10f, 7.356842799e-10f, 7.134885035e-10f, 6.913000984e-10f, 6.691191015e-10f, 6.469455499e-10f, 6.247794804e-10f,
+6.026209300e-10f, 5.804699355e-10f, 5.583265339e-10f, 5.361907620e-10f, 5.140626565e-10f, 4.919422543e-10f, 4.698295921e-10f, 4.477247066e-10f, 4.256276345e-10f, 4.035384125e-10f,
+3.814570772e-10f, 3.593836653e-10f, 3.373182133e-10f, 3.152607577e-10f, 2.932113351e-10f, 2.711699820e-10f, 2.491367349e-10f, 2.271116302e-10f, 2.050947042e-10f, 1.830859935e-10f,
+1.610855342e-10f, 1.390933629e-10f, 1.171095156e-10f, 9.513402883e-11f, 7.316693868e-11f, 5.120828140e-11f, 2.925809316e-11f, 7.316410108e-12f, -1.461673163e-11f, -3.654129597e-11f,
+-5.845724685e-11f, -8.036454823e-11f, -1.022631641e-10f, -1.241530585e-10f, -1.460341955e-10f, -1.679065392e-10f, -1.897700536e-10f, -2.116247030e-10f, -2.334704515e-10f, -2.553072633e-10f,
+-2.771351027e-10f, -2.989539339e-10f, -3.207637211e-10f, -3.425644288e-10f, -3.643560213e-10f, -3.861384630e-10f, -4.079117182e-10f, -4.296757515e-10f, -4.514305273e-10f, -4.731760101e-10f,
+-4.949121645e-10f, -5.166389549e-10f, -5.383563461e-10f, -5.600643027e-10f, -5.817627892e-10f, -6.034517704e-10f, -6.251312111e-10f, -6.468010759e-10f, -6.684613297e-10f, -6.901119372e-10f,
+-7.117528633e-10f, -7.333840729e-10f, -7.550055309e-10f, -7.766172022e-10f, -7.982190518e-10f, -8.198110447e-10f, -8.413931459e-10f, -8.629653204e-10f, -8.845275335e-10f, -9.060797502e-10f,
+-9.276219356e-10f, -9.491540549e-10f, -9.706760735e-10f, -9.921879564e-10f, -1.013689669e-09f, -1.035181177e-09f, -1.056662445e-09f, -1.078133438e-09f, -1.099594123e-09f, -1.121044465e-09f,
+-1.142484428e-09f, -1.163913979e-09f, -1.185333084e-09f, -1.206741707e-09f, -1.228139814e-09f, -1.249527371e-09f, -1.270904343e-09f, -1.292270697e-09f, -1.313626398e-09f, -1.334971412e-09f,
+-1.356305704e-09f, -1.377629241e-09f, -1.398941988e-09f, -1.420243911e-09f, -1.441534977e-09f, -1.462815150e-09f, -1.484084397e-09f, -1.505342684e-09f, -1.526589978e-09f, -1.547826244e-09f,
+-1.569051448e-09f, -1.590265556e-09f, -1.611468536e-09f, -1.632660352e-09f, -1.653840971e-09f, -1.675010360e-09f, -1.696168484e-09f, -1.717315311e-09f, -1.738450806e-09f, -1.759574937e-09f,
+-1.780687668e-09f, -1.801788968e-09f, -1.822878802e-09f, -1.843957137e-09f, -1.865023939e-09f, -1.886079176e-09f, -1.907122813e-09f, -1.928154819e-09f, -1.949175158e-09f, -1.970183798e-09f,
+-1.991180707e-09f, -2.012165850e-09f, -2.033139194e-09f, -2.054100707e-09f, -2.075050356e-09f, -2.095988106e-09f, -2.116913926e-09f, -2.137827782e-09f, -2.158729642e-09f, -2.179619472e-09f,
+-2.200497240e-09f, -2.221362913e-09f, -2.242216458e-09f, -2.263057842e-09f, -2.283887033e-09f, -2.304703998e-09f, -2.325508703e-09f, -2.346301118e-09f, -2.367081208e-09f, -2.387848942e-09f,
+-2.408604287e-09f, -2.429347210e-09f, -2.450077680e-09f, -2.470795663e-09f, -2.491501127e-09f, -2.512194040e-09f, -2.532874370e-09f, -2.553542084e-09f, -2.574197150e-09f, -2.594839536e-09f,
+-2.615469210e-09f, -2.636086139e-09f, -2.656690292e-09f, -2.677281636e-09f, -2.697860140e-09f, -2.718425771e-09f, -2.738978498e-09f, -2.759518288e-09f, -2.780045110e-09f, -2.800558932e-09f,
+-2.821059722e-09f, -2.841547448e-09f, -2.862022079e-09f, -2.882483583e-09f, -2.902931927e-09f, -2.923367082e-09f, -2.943789014e-09f, -2.964197693e-09f, -2.984593086e-09f, -3.004975163e-09f,
+-3.025343892e-09f, -3.045699242e-09f, -3.066041181e-09f, -3.086369677e-09f, -3.106684701e-09f, -3.126986219e-09f, -3.147274202e-09f, -3.167548617e-09f, -3.187809434e-09f, -3.208056622e-09f,
+-3.228290149e-09f, -3.248509985e-09f, -3.268716098e-09f, -3.288908457e-09f, -3.309087032e-09f, -3.329251792e-09f, -3.349402706e-09f, -3.369539743e-09f, -3.389662871e-09f, -3.409772062e-09f,
+-3.429867283e-09f, -3.449948504e-09f, -3.470015694e-09f, -3.490068824e-09f, -3.510107861e-09f, -3.530132776e-09f, -3.550143539e-09f, -3.570140118e-09f, -3.590122484e-09f, -3.610090606e-09f,
+-3.630044453e-09f, -3.649983996e-09f, -3.669909204e-09f, -3.689820047e-09f, -3.709716495e-09f, -3.729598517e-09f, -3.749466083e-09f, -3.769319164e-09f, -3.789157729e-09f, -3.808981749e-09f,
+-3.828791193e-09f, -3.848586031e-09f, -3.868366234e-09f, -3.888131772e-09f, -3.907882615e-09f, -3.927618733e-09f, -3.947340096e-09f, -3.967046675e-09f, -3.986738440e-09f, -4.006415361e-09f,
+-4.026077410e-09f, -4.045724556e-09f, -4.065356769e-09f, -4.084974021e-09f, -4.104576282e-09f, -4.124163523e-09f, -4.143735714e-09f, -4.163292825e-09f, -4.182834829e-09f, -4.202361694e-09f,
+-4.221873393e-09f, -4.241369896e-09f, -4.260851174e-09f, -4.280317198e-09f, -4.299767939e-09f, -4.319203368e-09f, -4.338623455e-09f, -4.358028173e-09f, -4.377417492e-09f, -4.396791383e-09f,
+-4.416149817e-09f, -4.435492766e-09f, -4.454820201e-09f, -4.474132093e-09f, -4.493428414e-09f, -4.512709136e-09f, -4.531974228e-09f, -4.551223664e-09f, -4.570457413e-09f, -4.589675449e-09f,
+-4.608877743e-09f, -4.628064266e-09f, -4.647234990e-09f, -4.666389886e-09f, -4.685528927e-09f, -4.704652084e-09f, -4.723759329e-09f, -4.742850633e-09f, -4.761925970e-09f, -4.780985310e-09f,
+-4.800028626e-09f, -4.819055890e-09f, -4.838067074e-09f, -4.857062149e-09f, -4.876041089e-09f, -4.895003864e-09f, -4.913950449e-09f, -4.932880814e-09f, -4.951794932e-09f, -4.970692776e-09f,
+-4.989574317e-09f, -5.008439529e-09f, -5.027288383e-09f, -5.046120853e-09f, -5.064936910e-09f, -5.083736528e-09f, -5.102519679e-09f, -5.121286336e-09f, -5.140036470e-09f, -5.158770057e-09f,
+-5.177487067e-09f, -5.196187473e-09f, -5.214871250e-09f, -5.233538369e-09f, -5.252188803e-09f, -5.270822527e-09f, -5.289439511e-09f, -5.308039731e-09f, -5.326623158e-09f, -5.345189766e-09f,
+-5.363739528e-09f, -5.382272418e-09f, -5.400788408e-09f, -5.419287472e-09f, -5.437769584e-09f, -5.456234716e-09f, -5.474682843e-09f, -5.493113938e-09f, -5.511527973e-09f, -5.529924924e-09f,
+-5.548304763e-09f, -5.566667464e-09f, -5.585013000e-09f, -5.603341347e-09f, -5.621652476e-09f, -5.639946363e-09f, -5.658222981e-09f, -5.676482304e-09f, -5.694724305e-09f, -5.712948960e-09f,
+-5.731156241e-09f, -5.749346123e-09f, -5.767518580e-09f, -5.785673587e-09f, -5.803811117e-09f, -5.821931144e-09f, -5.840033643e-09f, -5.858118589e-09f, -5.876185955e-09f, -5.894235717e-09f,
+-5.912267847e-09f, -5.930282322e-09f, -5.948279115e-09f, -5.966258201e-09f, -5.984219555e-09f, -6.002163151e-09f, -6.020088965e-09f, -6.037996970e-09f, -6.055887141e-09f, -6.073759454e-09f,
+-6.091613883e-09f, -6.109450403e-09f, -6.127268990e-09f, -6.145069617e-09f, -6.162852261e-09f, -6.180616896e-09f, -6.198363497e-09f, -6.216092040e-09f, -6.233802499e-09f, -6.251494851e-09f,
+-6.269169069e-09f, -6.286825131e-09f, -6.304463010e-09f, -6.322082682e-09f, -6.339684124e-09f, -6.357267310e-09f, -6.374832215e-09f, -6.392378817e-09f, -6.409907089e-09f, -6.427417008e-09f,
+-6.444908550e-09f, -6.462381690e-09f, -6.479836404e-09f, -6.497272668e-09f, -6.514690458e-09f, -6.532089749e-09f, -6.549470519e-09f, -6.566832742e-09f, -6.584176395e-09f, -6.601501454e-09f,
+-6.618807894e-09f, -6.636095694e-09f, -6.653364827e-09f, -6.670615272e-09f, -6.687847003e-09f, -6.705059998e-09f, -6.722254233e-09f, -6.739429685e-09f, -6.756586329e-09f, -6.773724142e-09f,
+-6.790843102e-09f, -6.807943184e-09f, -6.825024365e-09f, -6.842086622e-09f, -6.859129932e-09f, -6.876154271e-09f, -6.893159617e-09f, -6.910145946e-09f, -6.927113235e-09f, -6.944061461e-09f,
+-6.960990601e-09f, -6.977900633e-09f, -6.994791533e-09f, -7.011663278e-09f, -7.028515846e-09f, -7.045349214e-09f, -7.062163359e-09f, -7.078958258e-09f, -7.095733890e-09f, -7.112490230e-09f,
+-7.129227258e-09f, -7.145944949e-09f, -7.162643282e-09f, -7.179322235e-09f, -7.195981785e-09f, -7.212621909e-09f, -7.229242585e-09f, -7.245843792e-09f, -7.262425507e-09f, -7.278987707e-09f,
+-7.295530371e-09f, -7.312053477e-09f, -7.328557002e-09f, -7.345040925e-09f, -7.361505224e-09f, -7.377949876e-09f, -7.394374861e-09f, -7.410780155e-09f, -7.427165738e-09f, -7.443531588e-09f,
+-7.459877683e-09f, -7.476204001e-09f, -7.492510521e-09f, -7.508797221e-09f, -7.525064080e-09f, -7.541311077e-09f, -7.557538189e-09f, -7.573745397e-09f, -7.589932677e-09f, -7.606100010e-09f,
+-7.622247373e-09f, -7.638374747e-09f, -7.654482108e-09f, -7.670569437e-09f, -7.686636713e-09f, -7.702683914e-09f, -7.718711020e-09f, -7.734718009e-09f, -7.750704861e-09f, -7.766671554e-09f,
+-7.782618069e-09f, -7.798544384e-09f, -7.814450479e-09f, -7.830336333e-09f, -7.846201926e-09f, -7.862047236e-09f, -7.877872244e-09f, -7.893676929e-09f, -7.909461271e-09f, -7.925225248e-09f,
+-7.940968842e-09f, -7.956692031e-09f, -7.972394796e-09f, -7.988077115e-09f, -8.003738970e-09f, -8.019380340e-09f, -8.035001204e-09f, -8.050601544e-09f, -8.066181338e-09f, -8.081740567e-09f,
+-8.097279212e-09f, -8.112797252e-09f, -8.128294667e-09f, -8.143771438e-09f, -8.159227545e-09f, -8.174662969e-09f, -8.190077690e-09f, -8.205471688e-09f, -8.220844943e-09f, -8.236197437e-09f,
+-8.251529150e-09f, -8.266840062e-09f, -8.282130155e-09f, -8.297399408e-09f, -8.312647804e-09f, -8.327875321e-09f, -8.343081942e-09f, -8.358267648e-09f, -8.373432418e-09f, -8.388576235e-09f,
+-8.403699079e-09f, -8.418800931e-09f, -8.433881772e-09f, -8.448941585e-09f, -8.463980349e-09f, -8.478998046e-09f, -8.493994657e-09f, -8.508970165e-09f, -8.523924549e-09f, -8.538857792e-09f,
+-8.553769875e-09f, -8.568660780e-09f, -8.583530488e-09f, -8.598378981e-09f, -8.613206240e-09f, -8.628012248e-09f, -8.642796986e-09f, -8.657560435e-09f, -8.672302578e-09f, -8.687023397e-09f,
+-8.701722873e-09f, -8.716400989e-09f, -8.731057726e-09f, -8.745693067e-09f, -8.760306994e-09f, -8.774899489e-09f, -8.789470534e-09f, -8.804020112e-09f, -8.818548204e-09f, -8.833054794e-09f,
+-8.847539863e-09f, -8.862003394e-09f, -8.876445370e-09f, -8.890865772e-09f, -8.905264585e-09f, -8.919641790e-09f, -8.933997369e-09f, -8.948331307e-09f, -8.962643585e-09f, -8.976934186e-09f,
+-8.991203094e-09f, -9.005450291e-09f, -9.019675760e-09f, -9.033879484e-09f, -9.048061446e-09f, -9.062221629e-09f, -9.076360017e-09f, -9.090476593e-09f, -9.104571339e-09f, -9.118644240e-09f,
+-9.132695278e-09f, -9.146724437e-09f, -9.160731700e-09f, -9.174717051e-09f, -9.188680473e-09f, -9.202621950e-09f, -9.216541466e-09f, -9.230439004e-09f, -9.244314547e-09f, -9.258168080e-09f,
+-9.271999587e-09f, -9.285809051e-09f, -9.299596456e-09f, -9.313361786e-09f, -9.327105025e-09f, -9.340826157e-09f, -9.354525166e-09f, -9.368202036e-09f, -9.381856752e-09f, -9.395489298e-09f,
+-9.409099658e-09f, -9.422687815e-09f, -9.436253756e-09f, -9.449797463e-09f, -9.463318922e-09f, -9.476818117e-09f, -9.490295032e-09f, -9.503749653e-09f, -9.517181963e-09f, -9.530591947e-09f,
+-9.543979591e-09f, -9.557344878e-09f, -9.570687795e-09f, -9.584008324e-09f, -9.597306453e-09f, -9.610582165e-09f, -9.623835445e-09f, -9.637066279e-09f, -9.650274651e-09f, -9.663460548e-09f,
+-9.676623953e-09f, -9.689764853e-09f, -9.702883232e-09f, -9.715979076e-09f, -9.729052370e-09f, -9.742103100e-09f, -9.755131251e-09f, -9.768136809e-09f, -9.781119759e-09f, -9.794080087e-09f,
+-9.807017779e-09f, -9.819932819e-09f, -9.832825195e-09f, -9.845694892e-09f, -9.858541895e-09f, -9.871366191e-09f, -9.884167765e-09f, -9.896946604e-09f, -9.909702693e-09f, -9.922436019e-09f,
+-9.935146568e-09f, -9.947834326e-09f, -9.960499279e-09f, -9.973141413e-09f, -9.985760716e-09f, -9.998357172e-09f, -1.001093077e-08f, -1.002348149e-08f, -1.003600933e-08f, -1.004851427e-08f,
+-1.006099629e-08f, -1.007345539e-08f, -1.008589155e-08f, -1.009830475e-08f, -1.011069499e-08f, -1.012306225e-08f, -1.013540651e-08f, -1.014772777e-08f, -1.016002602e-08f, -1.017230123e-08f,
+-1.018455339e-08f, -1.019678250e-08f, -1.020898853e-08f, -1.022117149e-08f, -1.023333135e-08f, -1.024546810e-08f, -1.025758172e-08f, -1.026967222e-08f, -1.028173957e-08f, -1.029378375e-08f,
+-1.030580477e-08f, -1.031780261e-08f, -1.032977724e-08f, -1.034172867e-08f, -1.035365688e-08f, -1.036556186e-08f, -1.037744359e-08f, -1.038930206e-08f, -1.040113727e-08f, -1.041294919e-08f,
+-1.042473782e-08f, -1.043650314e-08f, -1.044824515e-08f, -1.045996383e-08f, -1.047165917e-08f, -1.048333115e-08f, -1.049497977e-08f, -1.050660502e-08f, -1.051820687e-08f, -1.052978533e-08f,
+-1.054134038e-08f, -1.055287201e-08f, -1.056438020e-08f, -1.057586495e-08f, -1.058732624e-08f, -1.059876406e-08f, -1.061017841e-08f, -1.062156926e-08f, -1.063293662e-08f, -1.064428046e-08f,
+-1.065560078e-08f, -1.066689757e-08f, -1.067817081e-08f, -1.068942049e-08f, -1.070064661e-08f, -1.071184915e-08f, -1.072302810e-08f, -1.073418346e-08f, -1.074531520e-08f, -1.075642332e-08f,
+-1.076750781e-08f, -1.077856867e-08f, -1.078960587e-08f, -1.080061940e-08f, -1.081160927e-08f, -1.082257545e-08f, -1.083351794e-08f, -1.084443672e-08f, -1.085533179e-08f, -1.086620314e-08f,
+-1.087705075e-08f, -1.088787462e-08f, -1.089867474e-08f, -1.090945109e-08f, -1.092020366e-08f, -1.093093246e-08f, -1.094163746e-08f, -1.095231865e-08f, -1.096297604e-08f, -1.097360960e-08f,
+-1.098421933e-08f, -1.099480522e-08f, -1.100536725e-08f, -1.101590543e-08f, -1.102641973e-08f, -1.103691016e-08f, -1.104737669e-08f, -1.105781933e-08f, -1.106823806e-08f, -1.107863287e-08f,
+-1.108900376e-08f, -1.109935071e-08f, -1.110967372e-08f, -1.111997278e-08f, -1.113024787e-08f, -1.114049899e-08f, -1.115072613e-08f, -1.116092929e-08f, -1.117110844e-08f, -1.118126359e-08f,
+-1.119139473e-08f, -1.120150184e-08f, -1.121158492e-08f, -1.122164396e-08f, -1.123167895e-08f, -1.124168988e-08f, -1.125167675e-08f, -1.126163954e-08f, -1.127157825e-08f, -1.128149287e-08f,
+-1.129138339e-08f, -1.130124981e-08f, -1.131109211e-08f, -1.132091028e-08f, -1.133070432e-08f, -1.134047423e-08f, -1.135021998e-08f, -1.135994159e-08f, -1.136963903e-08f, -1.137931229e-08f,
+-1.138896138e-08f, -1.139858629e-08f, -1.140818700e-08f, -1.141776350e-08f, -1.142731580e-08f, -1.143684389e-08f, -1.144634775e-08f, -1.145582737e-08f, -1.146528276e-08f, -1.147471391e-08f,
+-1.148412080e-08f, -1.149350343e-08f, -1.150286179e-08f, -1.151219588e-08f, -1.152150568e-08f, -1.153079120e-08f, -1.154005242e-08f, -1.154928934e-08f, -1.155850195e-08f, -1.156769024e-08f,
+-1.157685421e-08f, -1.158599385e-08f, -1.159510915e-08f, -1.160420011e-08f, -1.161326672e-08f, -1.162230897e-08f, -1.163132686e-08f, -1.164032038e-08f, -1.164928952e-08f, -1.165823428e-08f,
+-1.166715466e-08f, -1.167605064e-08f, -1.168492221e-08f, -1.169376938e-08f, -1.170259214e-08f, -1.171139048e-08f, -1.172016439e-08f, -1.172891387e-08f, -1.173763891e-08f, -1.174633951e-08f,
+-1.175501566e-08f, -1.176366736e-08f, -1.177229459e-08f, -1.178089736e-08f, -1.178947566e-08f, -1.179802947e-08f, -1.180655881e-08f, -1.181506365e-08f, -1.182354400e-08f, -1.183199986e-08f,
+-1.184043120e-08f, -1.184883804e-08f, -1.185722036e-08f, -1.186557816e-08f, -1.187391143e-08f, -1.188222017e-08f, -1.189050438e-08f, -1.189876404e-08f, -1.190699916e-08f, -1.191520972e-08f,
+-1.192339573e-08f, -1.193155718e-08f, -1.193969406e-08f, -1.194780637e-08f, -1.195589411e-08f, -1.196395726e-08f, -1.197199583e-08f, -1.198000981e-08f, -1.198799920e-08f, -1.199596399e-08f,
+-1.200390417e-08f, -1.201181975e-08f, -1.201971072e-08f, -1.202757707e-08f, -1.203541879e-08f, -1.204323590e-08f, -1.205102837e-08f, -1.205879622e-08f, -1.206653942e-08f, -1.207425799e-08f,
+-1.208195191e-08f, -1.208962118e-08f, -1.209726580e-08f, -1.210488576e-08f, -1.211248106e-08f, -1.212005170e-08f, -1.212759767e-08f, -1.213511897e-08f, -1.214261559e-08f, -1.215008754e-08f,
+-1.215753480e-08f, -1.216495738e-08f, -1.217235526e-08f, -1.217972846e-08f, -1.218707696e-08f, -1.219440076e-08f, -1.220169986e-08f, -1.220897425e-08f, -1.221622393e-08f, -1.222344890e-08f,
+-1.223064916e-08f, -1.223782470e-08f, -1.224497552e-08f, -1.225210161e-08f, -1.225920298e-08f, -1.226627962e-08f, -1.227333153e-08f, -1.228035870e-08f, -1.228736113e-08f, -1.229433883e-08f,
+-1.230129178e-08f, -1.230821998e-08f, -1.231512344e-08f, -1.232200215e-08f, -1.232885610e-08f, -1.233568530e-08f, -1.234248974e-08f, -1.234926943e-08f, -1.235602435e-08f, -1.236275450e-08f,
+-1.236945989e-08f, -1.237614052e-08f, -1.238279637e-08f, -1.238942745e-08f, -1.239603375e-08f, -1.240261528e-08f, -1.240917203e-08f, -1.241570401e-08f, -1.242221120e-08f, -1.242869360e-08f,
+-1.243515122e-08f, -1.244158406e-08f, -1.244799211e-08f, -1.245437536e-08f, -1.246073383e-08f, -1.246706750e-08f, -1.247337638e-08f, -1.247966047e-08f, -1.248591975e-08f, -1.249215424e-08f,
+-1.249836393e-08f, -1.250454882e-08f, -1.251070891e-08f, -1.251684420e-08f, -1.252295468e-08f, -1.252904036e-08f, -1.253510123e-08f, -1.254113730e-08f, -1.254714856e-08f, -1.255313501e-08f,
+-1.255909665e-08f, -1.256503348e-08f, -1.257094551e-08f, -1.257683272e-08f, -1.258269512e-08f, -1.258853271e-08f, -1.259434549e-08f, -1.260013345e-08f, -1.260589660e-08f, -1.261163494e-08f,
+-1.261734846e-08f, -1.262303717e-08f, -1.262870107e-08f, -1.263434015e-08f, -1.263995441e-08f, -1.264554386e-08f, -1.265110850e-08f, -1.265664832e-08f, -1.266216333e-08f, -1.266765353e-08f,
+-1.267311891e-08f, -1.267855947e-08f, -1.268397522e-08f, -1.268936616e-08f, -1.269473228e-08f, -1.270007360e-08f, -1.270539009e-08f, -1.271068178e-08f, -1.271594866e-08f, -1.272119072e-08f,
+-1.272640798e-08f, -1.273160042e-08f, -1.273676806e-08f, -1.274191089e-08f, -1.274702891e-08f, -1.275212212e-08f, -1.275719053e-08f, -1.276223413e-08f, -1.276725293e-08f, -1.277224693e-08f,
+-1.277721612e-08f, -1.278216052e-08f, -1.278708011e-08f, -1.279197491e-08f, -1.279684491e-08f, -1.280169011e-08f, -1.280651052e-08f, -1.281130614e-08f, -1.281607697e-08f, -1.282082300e-08f,
+-1.282554425e-08f, -1.283024070e-08f, -1.283491238e-08f, -1.283955927e-08f, -1.284418137e-08f, -1.284877870e-08f, -1.285335125e-08f, -1.285789902e-08f, -1.286242201e-08f, -1.286692023e-08f,
+-1.287139369e-08f, -1.287584237e-08f, -1.288026628e-08f, -1.288466543e-08f, -1.288903982e-08f, -1.289338944e-08f, -1.289771431e-08f, -1.290201442e-08f, -1.290628978e-08f, -1.291054038e-08f,
+-1.291476624e-08f, -1.291896734e-08f, -1.292314371e-08f, -1.292729533e-08f, -1.293142221e-08f, -1.293552436e-08f, -1.293960177e-08f, -1.294365445e-08f, -1.294768241e-08f, -1.295168563e-08f,
+-1.295566414e-08f, -1.295961792e-08f, -1.296354699e-08f, -1.296745134e-08f, -1.297133098e-08f, -1.297518591e-08f, -1.297901614e-08f, -1.298282166e-08f, -1.298660249e-08f, -1.299035862e-08f,
+-1.299409006e-08f, -1.299779681e-08f, -1.300147888e-08f, -1.300513626e-08f, -1.300876896e-08f, -1.301237699e-08f, -1.301596035e-08f, -1.301951904e-08f, -1.302305306e-08f, -1.302656243e-08f,
+-1.303004713e-08f, -1.303350719e-08f, -1.303694259e-08f, -1.304035335e-08f, -1.304373947e-08f, -1.304710094e-08f, -1.305043779e-08f, -1.305375000e-08f, -1.305703759e-08f, -1.306030056e-08f,
+-1.306353891e-08f, -1.306675265e-08f, -1.306994177e-08f, -1.307310630e-08f, -1.307624622e-08f, -1.307936154e-08f, -1.308245228e-08f, -1.308551842e-08f, -1.308855998e-08f, -1.309157697e-08f,
+-1.309456938e-08f, -1.309753722e-08f, -1.310048050e-08f, -1.310339922e-08f, -1.310629338e-08f, -1.310916299e-08f, -1.311200806e-08f, -1.311482859e-08f, -1.311762458e-08f, -1.312039604e-08f,
+-1.312314297e-08f, -1.312586538e-08f, -1.312856328e-08f, -1.313123667e-08f, -1.313388555e-08f, -1.313650994e-08f, -1.313910982e-08f, -1.314168522e-08f, -1.314423614e-08f, -1.314676257e-08f,
+-1.314926454e-08f, -1.315174203e-08f, -1.315419506e-08f, -1.315662364e-08f, -1.315902776e-08f, -1.316140744e-08f, -1.316376268e-08f, -1.316609349e-08f, -1.316839987e-08f, -1.317068182e-08f,
+-1.317293936e-08f, -1.317517249e-08f, -1.317738121e-08f, -1.317956554e-08f, -1.318172547e-08f, -1.318386101e-08f, -1.318597218e-08f, -1.318805897e-08f, -1.319012139e-08f, -1.319215945e-08f,
+-1.319417315e-08f, -1.319616251e-08f, -1.319812752e-08f, -1.320006819e-08f, -1.320198454e-08f, -1.320387656e-08f, -1.320574426e-08f, -1.320758766e-08f, -1.320940675e-08f, -1.321120154e-08f,
+-1.321297204e-08f, -1.321471826e-08f, -1.321644020e-08f, -1.321813787e-08f, -1.321981127e-08f, -1.322146043e-08f, -1.322308533e-08f, -1.322468598e-08f, -1.322626241e-08f, -1.322781460e-08f,
+-1.322934257e-08f, -1.323084633e-08f, -1.323232589e-08f, -1.323378124e-08f, -1.323521240e-08f, -1.323661937e-08f, -1.323800217e-08f, -1.323936079e-08f, -1.324069526e-08f, -1.324200556e-08f,
+-1.324329172e-08f, -1.324455374e-08f, -1.324579163e-08f, -1.324700539e-08f, -1.324819504e-08f, -1.324936057e-08f, -1.325050200e-08f, -1.325161934e-08f, -1.325271259e-08f, -1.325378177e-08f,
+-1.325482687e-08f, -1.325584791e-08f, -1.325684490e-08f, -1.325781784e-08f, -1.325876674e-08f, -1.325969161e-08f, -1.326059246e-08f, -1.326146929e-08f, -1.326232212e-08f, -1.326315096e-08f,
+-1.326395580e-08f, -1.326473667e-08f, -1.326549356e-08f, -1.326622649e-08f, -1.326693546e-08f, -1.326762048e-08f, -1.326828157e-08f, -1.326891873e-08f, -1.326953197e-08f, -1.327012130e-08f,
+-1.327068672e-08f, -1.327122825e-08f, -1.327174589e-08f, -1.327223966e-08f, -1.327270956e-08f, -1.327315560e-08f, -1.327357779e-08f, -1.327397614e-08f, -1.327435065e-08f, -1.327470135e-08f,
+-1.327502823e-08f, -1.327533131e-08f, -1.327561059e-08f, -1.327586608e-08f, -1.327609780e-08f, -1.327630575e-08f, -1.327648995e-08f, -1.327665039e-08f, -1.327678710e-08f, -1.327690008e-08f,
+-1.327698933e-08f, -1.327705488e-08f, -1.327709673e-08f, -1.327711488e-08f, -1.327710936e-08f, -1.327708016e-08f, -1.327702730e-08f, -1.327695079e-08f, -1.327685063e-08f, -1.327672685e-08f,
+-1.327657944e-08f, -1.327640842e-08f, -1.327621380e-08f, -1.327599558e-08f, -1.327575378e-08f, -1.327548841e-08f, -1.327519948e-08f, -1.327488700e-08f, -1.327455097e-08f, -1.327419142e-08f,
+-1.327380834e-08f, -1.327340176e-08f, -1.327297167e-08f, -1.327251809e-08f, -1.327204104e-08f, -1.327154051e-08f, -1.327101653e-08f, -1.327046910e-08f, -1.326989823e-08f, -1.326930394e-08f,
+-1.326868623e-08f, -1.326804512e-08f, -1.326738061e-08f, -1.326669273e-08f, -1.326598146e-08f, -1.326524684e-08f, -1.326448887e-08f, -1.326370756e-08f, -1.326290291e-08f, -1.326207496e-08f,
+-1.326122369e-08f, -1.326034913e-08f, -1.325945129e-08f, -1.325853017e-08f, -1.325758580e-08f, -1.325661817e-08f, -1.325562730e-08f, -1.325461321e-08f, -1.325357590e-08f, -1.325251539e-08f,
+-1.325143168e-08f, -1.325032479e-08f, -1.324919473e-08f, -1.324804152e-08f, -1.324686515e-08f, -1.324566565e-08f, -1.324444303e-08f, -1.324319730e-08f, -1.324192846e-08f, -1.324063654e-08f,
+-1.323932154e-08f, -1.323798348e-08f, -1.323662237e-08f, -1.323523821e-08f, -1.323383103e-08f, -1.323240083e-08f, -1.323094762e-08f, -1.322947142e-08f, -1.322797225e-08f, -1.322645010e-08f,
+-1.322490500e-08f, -1.322333696e-08f, -1.322174598e-08f, -1.322013209e-08f, -1.321849529e-08f, -1.321683559e-08f, -1.321515302e-08f, -1.321344757e-08f, -1.321171927e-08f, -1.320996813e-08f,
+-1.320819415e-08f, -1.320639735e-08f, -1.320457775e-08f, -1.320273536e-08f, -1.320087018e-08f, -1.319898224e-08f, -1.319707154e-08f, -1.319513810e-08f, -1.319318193e-08f, -1.319120304e-08f,
+-1.318920145e-08f, -1.318717717e-08f, -1.318513022e-08f, -1.318306059e-08f, -1.318096832e-08f, -1.317885341e-08f, -1.317671587e-08f, -1.317455573e-08f, -1.317237298e-08f, -1.317016765e-08f,
+-1.316793975e-08f, -1.316568928e-08f, -1.316341628e-08f, -1.316112074e-08f, -1.315880268e-08f, -1.315646212e-08f, -1.315409907e-08f, -1.315171354e-08f, -1.314930555e-08f, -1.314687510e-08f,
+-1.314442222e-08f, -1.314194692e-08f, -1.313944920e-08f, -1.313692910e-08f, -1.313438660e-08f, -1.313182175e-08f, -1.312923454e-08f, -1.312662498e-08f, -1.312399311e-08f, -1.312133892e-08f,
+-1.311866243e-08f, -1.311596366e-08f, -1.311324262e-08f, -1.311049932e-08f, -1.310773378e-08f, -1.310494602e-08f, -1.310213604e-08f, -1.309930386e-08f, -1.309644950e-08f, -1.309357297e-08f,
+-1.309067428e-08f, -1.308775345e-08f, -1.308481050e-08f, -1.308184543e-08f, -1.307885826e-08f, -1.307584901e-08f, -1.307281770e-08f, -1.306976432e-08f, -1.306668891e-08f, -1.306359148e-08f,
+-1.306047203e-08f, -1.305733059e-08f, -1.305416717e-08f, -1.305098178e-08f, -1.304777444e-08f, -1.304454517e-08f, -1.304129398e-08f, -1.303802088e-08f, -1.303472588e-08f, -1.303140902e-08f,
+-1.302807029e-08f, -1.302470972e-08f, -1.302132731e-08f, -1.301792309e-08f, -1.301449707e-08f, -1.301104926e-08f, -1.300757969e-08f, -1.300408836e-08f, -1.300057529e-08f, -1.299704050e-08f,
+-1.299348400e-08f, -1.298990581e-08f, -1.298630593e-08f, -1.298268440e-08f, -1.297904122e-08f, -1.297537641e-08f, -1.297168999e-08f, -1.296798196e-08f, -1.296425235e-08f, -1.296050118e-08f,
+-1.295672845e-08f, -1.295293418e-08f, -1.294911839e-08f, -1.294528110e-08f, -1.294142232e-08f, -1.293754207e-08f, -1.293364036e-08f, -1.292971720e-08f, -1.292577262e-08f, -1.292180664e-08f,
+-1.291781926e-08f, -1.291381050e-08f, -1.290978038e-08f, -1.290572891e-08f, -1.290165612e-08f, -1.289756202e-08f, -1.289344661e-08f, -1.288930993e-08f, -1.288515199e-08f, -1.288097280e-08f,
+-1.287677237e-08f, -1.287255073e-08f, -1.286830790e-08f, -1.286404388e-08f, -1.285975870e-08f, -1.285545237e-08f, -1.285112491e-08f, -1.284677633e-08f, -1.284240666e-08f, -1.283801590e-08f,
+-1.283360407e-08f, -1.282917120e-08f, -1.282471730e-08f, -1.282024238e-08f, -1.281574647e-08f, -1.281122957e-08f, -1.280669171e-08f, -1.280213290e-08f, -1.279755316e-08f, -1.279295251e-08f,
+-1.278833096e-08f, -1.278368853e-08f, -1.277902524e-08f, -1.277434111e-08f, -1.276963614e-08f, -1.276491037e-08f, -1.276016380e-08f, -1.275539646e-08f, -1.275060836e-08f, -1.274579951e-08f,
+-1.274096994e-08f, -1.273611967e-08f, -1.273124870e-08f, -1.272635707e-08f, -1.272144477e-08f, -1.271651184e-08f, -1.271155830e-08f, -1.270658414e-08f, -1.270158941e-08f, -1.269657411e-08f,
+-1.269153825e-08f, -1.268648187e-08f, -1.268140497e-08f, -1.267630758e-08f, -1.267118971e-08f, -1.266605137e-08f, -1.266089260e-08f, -1.265571340e-08f, -1.265051379e-08f, -1.264529379e-08f,
+-1.264005342e-08f, -1.263479270e-08f, -1.262951165e-08f, -1.262421027e-08f, -1.261888860e-08f, -1.261354665e-08f, -1.260818443e-08f, -1.260280197e-08f, -1.259739928e-08f, -1.259197638e-08f,
+-1.258653330e-08f, -1.258107004e-08f, -1.257558663e-08f, -1.257008308e-08f, -1.256455942e-08f, -1.255901565e-08f, -1.255345181e-08f, -1.254786791e-08f, -1.254226396e-08f, -1.253663999e-08f,
+-1.253099601e-08f, -1.252533204e-08f, -1.251964811e-08f, -1.251394422e-08f, -1.250822041e-08f, -1.250247668e-08f, -1.249671306e-08f, -1.249092956e-08f, -1.248512620e-08f, -1.247930301e-08f,
+-1.247346000e-08f, -1.246759718e-08f, -1.246171459e-08f, -1.245581223e-08f, -1.244989013e-08f, -1.244394831e-08f, -1.243798678e-08f, -1.243200556e-08f, -1.242600467e-08f, -1.241998414e-08f,
+-1.241394398e-08f, -1.240788421e-08f, -1.240180484e-08f, -1.239570591e-08f, -1.238958742e-08f, -1.238344940e-08f, -1.237729187e-08f, -1.237111484e-08f, -1.236491833e-08f, -1.235870237e-08f,
+-1.235246697e-08f, -1.234621216e-08f, -1.233993794e-08f, -1.233364435e-08f, -1.232733140e-08f, -1.232099911e-08f, -1.231464750e-08f, -1.230827659e-08f, -1.230188640e-08f, -1.229547695e-08f,
+-1.228904826e-08f, -1.228260035e-08f, -1.227613323e-08f, -1.226964693e-08f, -1.226314147e-08f, -1.225661687e-08f, -1.225007315e-08f, -1.224351032e-08f, -1.223692841e-08f, -1.223032743e-08f,
+-1.222370742e-08f, -1.221706838e-08f, -1.221041033e-08f, -1.220373330e-08f, -1.219703731e-08f, -1.219032238e-08f, -1.218358853e-08f, -1.217683577e-08f, -1.217006412e-08f, -1.216327362e-08f,
+-1.215646427e-08f, -1.214963610e-08f, -1.214278913e-08f, -1.213592338e-08f, -1.212903887e-08f, -1.212213561e-08f, -1.211521364e-08f, -1.210827296e-08f, -1.210131361e-08f, -1.209433559e-08f,
+-1.208733894e-08f, -1.208032367e-08f, -1.207328980e-08f, -1.206623735e-08f, -1.205916634e-08f, -1.205207680e-08f, -1.204496875e-08f, -1.203784219e-08f, -1.203069717e-08f, -1.202353369e-08f,
+-1.201635178e-08f, -1.200915145e-08f, -1.200193274e-08f, -1.199469565e-08f, -1.198744021e-08f, -1.198016645e-08f, -1.197287437e-08f, -1.196556401e-08f, -1.195823538e-08f, -1.195088851e-08f,
+-1.194352341e-08f, -1.193614011e-08f, -1.192873863e-08f, -1.192131898e-08f, -1.191388120e-08f, -1.190642530e-08f, -1.189895129e-08f, -1.189145921e-08f, -1.188394908e-08f, -1.187642091e-08f,
+-1.186887472e-08f, -1.186131055e-08f, -1.185372840e-08f, -1.184612831e-08f, -1.183851028e-08f, -1.183087435e-08f, -1.182322053e-08f, -1.181554885e-08f, -1.180785933e-08f, -1.180015198e-08f,
+-1.179242683e-08f, -1.178468391e-08f, -1.177692323e-08f, -1.176914481e-08f, -1.176134868e-08f, -1.175353485e-08f, -1.174570336e-08f, -1.173785421e-08f, -1.172998744e-08f, -1.172210307e-08f,
+-1.171420110e-08f, -1.170628158e-08f, -1.169834451e-08f, -1.169038993e-08f, -1.168241785e-08f, -1.167442829e-08f, -1.166642128e-08f, -1.165839684e-08f, -1.165035499e-08f, -1.164229575e-08f,
+-1.163421914e-08f, -1.162612519e-08f, -1.161801392e-08f, -1.160988535e-08f, -1.160173949e-08f, -1.159357639e-08f, -1.158539605e-08f, -1.157719849e-08f, -1.156898375e-08f, -1.156075184e-08f,
+-1.155250278e-08f, -1.154423660e-08f, -1.153595332e-08f, -1.152765296e-08f, -1.151933554e-08f, -1.151100109e-08f, -1.150264962e-08f, -1.149428117e-08f, -1.148589575e-08f, -1.147749338e-08f,
+-1.146907409e-08f, -1.146063790e-08f, -1.145218483e-08f, -1.144371490e-08f, -1.143522814e-08f, -1.142672457e-08f, -1.141820421e-08f, -1.140966709e-08f, -1.140111322e-08f, -1.139254263e-08f,
+-1.138395534e-08f, -1.137535138e-08f, -1.136673077e-08f, -1.135809352e-08f, -1.134943967e-08f, -1.134076923e-08f, -1.133208223e-08f, -1.132337869e-08f, -1.131465863e-08f, -1.130592208e-08f,
+-1.129716906e-08f, -1.128839959e-08f, -1.127961369e-08f, -1.127081139e-08f, -1.126199271e-08f, -1.125315767e-08f, -1.124430630e-08f, -1.123543862e-08f, -1.122655465e-08f, -1.121765442e-08f,
+-1.120873794e-08f, -1.119980524e-08f, -1.119085635e-08f, -1.118189128e-08f, -1.117291007e-08f, -1.116391273e-08f, -1.115489928e-08f, -1.114586975e-08f, -1.113682417e-08f, -1.112776255e-08f,
+-1.111868492e-08f, -1.110959130e-08f, -1.110048172e-08f, -1.109135619e-08f, -1.108221475e-08f, -1.107305741e-08f, -1.106388420e-08f, -1.105469514e-08f, -1.104549026e-08f, -1.103626958e-08f,
+-1.102703311e-08f, -1.101778090e-08f, -1.100851295e-08f, -1.099922929e-08f, -1.098992995e-08f, -1.098061495e-08f, -1.097128431e-08f, -1.096193806e-08f, -1.095257622e-08f, -1.094319881e-08f,
+-1.093380586e-08f, -1.092439738e-08f, -1.091497341e-08f, -1.090553397e-08f, -1.089607908e-08f, -1.088660877e-08f, -1.087712305e-08f, -1.086762196e-08f, -1.085810551e-08f, -1.084857374e-08f,
+-1.083902665e-08f, -1.082946429e-08f, -1.081988666e-08f, -1.081029380e-08f, -1.080068573e-08f, -1.079106247e-08f, -1.078142405e-08f, -1.077177049e-08f, -1.076210182e-08f, -1.075241805e-08f,
+-1.074271921e-08f, -1.073300533e-08f, -1.072327643e-08f, -1.071353254e-08f, -1.070377367e-08f, -1.069399986e-08f, -1.068421112e-08f, -1.067440748e-08f, -1.066458897e-08f, -1.065475560e-08f,
+-1.064490741e-08f, -1.063504442e-08f, -1.062516665e-08f, -1.061527412e-08f, -1.060536686e-08f, -1.059544489e-08f, -1.058550825e-08f, -1.057555694e-08f, -1.056559100e-08f, -1.055561045e-08f,
+-1.054561532e-08f, -1.053560562e-08f, -1.052558139e-08f, -1.051554265e-08f, -1.050548942e-08f, -1.049542173e-08f, -1.048533959e-08f, -1.047524305e-08f, -1.046513211e-08f, -1.045500681e-08f,
+-1.044486716e-08f, -1.043471320e-08f, -1.042454495e-08f, -1.041436242e-08f, -1.040416566e-08f, -1.039395468e-08f, -1.038372950e-08f, -1.037349015e-08f, -1.036323666e-08f, -1.035296904e-08f,
+-1.034268734e-08f, -1.033239156e-08f, -1.032208173e-08f, -1.031175788e-08f, -1.030142004e-08f, -1.029106822e-08f, -1.028070245e-08f, -1.027032276e-08f, -1.025992917e-08f, -1.024952171e-08f,
+-1.023910040e-08f, -1.022866527e-08f, -1.021821634e-08f, -1.020775363e-08f, -1.019727717e-08f, -1.018678699e-08f, -1.017628311e-08f, -1.016576555e-08f, -1.015523434e-08f, -1.014468951e-08f,
+-1.013413108e-08f, -1.012355907e-08f, -1.011297351e-08f, -1.010237443e-08f, -1.009176185e-08f, -1.008113579e-08f, -1.007049628e-08f, -1.005984334e-08f, -1.004917700e-08f, -1.003849729e-08f,
+-1.002780423e-08f, -1.001709784e-08f, -1.000637816e-08f, -9.995645193e-09f, -9.984898980e-09f, -9.974139543e-09f, -9.963366906e-09f, -9.952581095e-09f, -9.941782134e-09f, -9.930970049e-09f,
+-9.920144865e-09f, -9.909306607e-09f, -9.898455301e-09f, -9.887590971e-09f, -9.876713644e-09f, -9.865823343e-09f, -9.854920095e-09f, -9.844003925e-09f, -9.833074858e-09f, -9.822132920e-09f,
+-9.811178135e-09f, -9.800210530e-09f, -9.789230129e-09f, -9.778236957e-09f, -9.767231041e-09f, -9.756212406e-09f, -9.745181076e-09f, -9.734137078e-09f, -9.723080437e-09f, -9.712011179e-09f,
+-9.700929328e-09f, -9.689834910e-09f, -9.678727951e-09f, -9.667608477e-09f, -9.656476512e-09f, -9.645332082e-09f, -9.634175214e-09f, -9.623005931e-09f, -9.611824261e-09f, -9.600630228e-09f,
+-9.589423858e-09f, -9.578205177e-09f, -9.566974210e-09f, -9.555730983e-09f, -9.544475522e-09f, -9.533207852e-09f, -9.521927998e-09f, -9.510635987e-09f, -9.499331845e-09f, -9.488015596e-09f,
+-9.476687267e-09f, -9.465346883e-09f, -9.453994470e-09f, -9.442630053e-09f, -9.431253660e-09f, -9.419865314e-09f, -9.408465043e-09f, -9.397052871e-09f, -9.385628825e-09f, -9.374192930e-09f,
+-9.362745213e-09f, -9.351285698e-09f, -9.339814412e-09f, -9.328331381e-09f, -9.316836631e-09f, -9.305330187e-09f, -9.293812075e-09f, -9.282282322e-09f, -9.270740952e-09f, -9.259187993e-09f,
+-9.247623469e-09f, -9.236047408e-09f, -9.224459834e-09f, -9.212860774e-09f, -9.201250253e-09f, -9.189628299e-09f, -9.177994935e-09f, -9.166350190e-09f, -9.154694088e-09f, -9.143026656e-09f,
+-9.131347919e-09f, -9.119657905e-09f, -9.107956638e-09f, -9.096244144e-09f, -9.084520451e-09f, -9.072785583e-09f, -9.061039568e-09f, -9.049282430e-09f, -9.037514197e-09f, -9.025734894e-09f,
+-9.013944548e-09f, -9.002143184e-09f, -8.990330829e-09f, -8.978507508e-09f, -8.966673249e-09f, -8.954828077e-09f, -8.942972018e-09f, -8.931105098e-09f, -8.919227344e-09f, -8.907338782e-09f,
+-8.895439439e-09f, -8.883529339e-09f, -8.871608510e-09f, -8.859676978e-09f, -8.847734769e-09f, -8.835781909e-09f, -8.823818425e-09f, -8.811844342e-09f, -8.799859688e-09f, -8.787864488e-09f,
+-8.775858768e-09f, -8.763842556e-09f, -8.751815877e-09f, -8.739778757e-09f, -8.727731223e-09f, -8.715673302e-09f, -8.703605019e-09f, -8.691526401e-09f, -8.679437475e-09f, -8.667338266e-09f,
+-8.655228801e-09f, -8.643109107e-09f, -8.630979209e-09f, -8.618839135e-09f, -8.606688910e-09f, -8.594528562e-09f, -8.582358115e-09f, -8.570177598e-09f, -8.557987036e-09f, -8.545786456e-09f,
+-8.533575884e-09f, -8.521355347e-09f, -8.509124871e-09f, -8.496884482e-09f, -8.484634208e-09f, -8.472374074e-09f, -8.460104107e-09f, -8.447824334e-09f, -8.435534781e-09f, -8.423235474e-09f,
+-8.410926441e-09f, -8.398607707e-09f, -8.386279300e-09f, -8.373941245e-09f, -8.361593569e-09f, -8.349236299e-09f, -8.336869462e-09f, -8.324493084e-09f, -8.312107191e-09f, -8.299711810e-09f,
+-8.287306968e-09f, -8.274892691e-09f, -8.262469006e-09f, -8.250035939e-09f, -8.237593518e-09f, -8.225141768e-09f, -8.212680717e-09f, -8.200210391e-09f, -8.187730816e-09f, -8.175242019e-09f,
+-8.162744027e-09f, -8.150236867e-09f, -8.137720565e-09f, -8.125195148e-09f, -8.112660642e-09f, -8.100117075e-09f, -8.087564472e-09f, -8.075002861e-09f, -8.062432268e-09f, -8.049852721e-09f,
+-8.037264244e-09f, -8.024666866e-09f, -8.012060614e-09f, -7.999445512e-09f, -7.986821590e-09f, -7.974188872e-09f, -7.961547387e-09f, -7.948897160e-09f, -7.936238219e-09f, -7.923570589e-09f,
+-7.910894299e-09f, -7.898209374e-09f, -7.885515842e-09f, -7.872813729e-09f, -7.860103062e-09f, -7.847383867e-09f, -7.834656173e-09f, -7.821920004e-09f, -7.809175388e-09f, -7.796422353e-09f,
+-7.783660924e-09f, -7.770891128e-09f, -7.758112993e-09f, -7.745326544e-09f, -7.732531810e-09f, -7.719728816e-09f, -7.706917590e-09f, -7.694098158e-09f, -7.681270547e-09f, -7.668434784e-09f,
+-7.655590896e-09f, -7.642738909e-09f, -7.629878851e-09f, -7.617010748e-09f, -7.604134628e-09f, -7.591250516e-09f, -7.578358441e-09f, -7.565458428e-09f, -7.552550504e-09f, -7.539634698e-09f,
+-7.526711034e-09f, -7.513779541e-09f, -7.500840244e-09f, -7.487893172e-09f, -7.474938350e-09f, -7.461975806e-09f, -7.449005567e-09f, -7.436027659e-09f, -7.423042109e-09f, -7.410048945e-09f,
+-7.397048193e-09f, -7.384039880e-09f, -7.371024033e-09f, -7.358000678e-09f, -7.344969844e-09f, -7.331931556e-09f, -7.318885841e-09f, -7.305832727e-09f, -7.292772241e-09f, -7.279704408e-09f,
+-7.266629257e-09f, -7.253546814e-09f, -7.240457107e-09f, -7.227360161e-09f, -7.214256004e-09f, -7.201144663e-09f, -7.188026164e-09f, -7.174900536e-09f, -7.161767804e-09f, -7.148627995e-09f,
+-7.135481137e-09f, -7.122327257e-09f, -7.109166381e-09f, -7.095998536e-09f, -7.082823750e-09f, -7.069642048e-09f, -7.056453459e-09f, -7.043258009e-09f, -7.030055726e-09f, -7.016846635e-09f,
+-7.003630764e-09f, -6.990408140e-09f, -6.977178790e-09f, -6.963942740e-09f, -6.950700019e-09f, -6.937450652e-09f, -6.924194667e-09f, -6.910932090e-09f, -6.897662949e-09f, -6.884387271e-09f,
+-6.871105082e-09f, -6.857816410e-09f, -6.844521281e-09f, -6.831219722e-09f, -6.817911761e-09f, -6.804597424e-09f, -6.791276739e-09f, -6.777949731e-09f, -6.764616429e-09f, -6.751276859e-09f,
+-6.737931048e-09f, -6.724579023e-09f, -6.711220812e-09f, -6.697856440e-09f, -6.684485935e-09f, -6.671109324e-09f, -6.657726634e-09f, -6.644337892e-09f, -6.630943125e-09f, -6.617542360e-09f,
+-6.604135623e-09f, -6.590722942e-09f, -6.577304343e-09f, -6.563879855e-09f, -6.550449503e-09f, -6.537013314e-09f, -6.523571316e-09f, -6.510123535e-09f, -6.496669999e-09f, -6.483210734e-09f,
+-6.469745767e-09f, -6.456275126e-09f, -6.442798837e-09f, -6.429316927e-09f, -6.415829423e-09f, -6.402336352e-09f, -6.388837741e-09f, -6.375333617e-09f, -6.361824007e-09f, -6.348308938e-09f,
+-6.334788437e-09f, -6.321262530e-09f, -6.307731245e-09f, -6.294194609e-09f, -6.280652648e-09f, -6.267105390e-09f, -6.253552861e-09f, -6.239995088e-09f, -6.226432099e-09f, -6.212863920e-09f,
+-6.199290578e-09f, -6.185712100e-09f, -6.172128513e-09f, -6.158539844e-09f, -6.144946119e-09f, -6.131347367e-09f, -6.117743613e-09f, -6.104134884e-09f, -6.090521208e-09f, -6.076902611e-09f,
+-6.063279121e-09f, -6.049650764e-09f, -6.036017566e-09f, -6.022379556e-09f, -6.008736760e-09f, -5.995089204e-09f, -5.981436916e-09f, -5.967779922e-09f, -5.954118250e-09f, -5.940451926e-09f,
+-5.926780977e-09f, -5.913105430e-09f, -5.899425312e-09f, -5.885740650e-09f, -5.872051471e-09f, -5.858357801e-09f, -5.844659667e-09f, -5.830957097e-09f, -5.817250116e-09f, -5.803538752e-09f,
+-5.789823033e-09f, -5.776102983e-09f, -5.762378632e-09f, -5.748650004e-09f, -5.734917128e-09f, -5.721180029e-09f, -5.707438735e-09f, -5.693693273e-09f, -5.679943669e-09f, -5.666189950e-09f,
+-5.652432144e-09f, -5.638670276e-09f, -5.624904373e-09f, -5.611134464e-09f, -5.597360573e-09f, -5.583582728e-09f, -5.569800956e-09f, -5.556015284e-09f, -5.542225738e-09f, -5.528432345e-09f,
+-5.514635132e-09f, -5.500834125e-09f, -5.487029352e-09f, -5.473220839e-09f, -5.459408613e-09f, -5.445592701e-09f, -5.431773129e-09f, -5.417949924e-09f, -5.404123113e-09f, -5.390292723e-09f,
+-5.376458779e-09f, -5.362621310e-09f, -5.348780342e-09f, -5.334935901e-09f, -5.321088014e-09f, -5.307236708e-09f, -5.293382009e-09f, -5.279523945e-09f, -5.265662542e-09f, -5.251797826e-09f,
+-5.237929824e-09f, -5.224058563e-09f, -5.210184070e-09f, -5.196306371e-09f, -5.182425493e-09f, -5.168541463e-09f, -5.154654306e-09f, -5.140764051e-09f, -5.126870723e-09f, -5.112974348e-09f,
+-5.099074955e-09f, -5.085172569e-09f, -5.071267216e-09f, -5.057358924e-09f, -5.043447719e-09f, -5.029533628e-09f, -5.015616677e-09f, -5.001696893e-09f, -4.987774302e-09f, -4.973848931e-09f,
+-4.959920806e-09f, -4.945989955e-09f, -4.932056403e-09f, -4.918120177e-09f, -4.904181304e-09f, -4.890239810e-09f, -4.876295721e-09f, -4.862349065e-09f, -4.848399868e-09f, -4.834448155e-09f,
+-4.820493955e-09f, -4.806537292e-09f, -4.792578194e-09f, -4.778616687e-09f, -4.764652798e-09f, -4.750686553e-09f, -4.736717978e-09f, -4.722747100e-09f, -4.708773946e-09f, -4.694798541e-09f,
+-4.680820913e-09f, -4.666841087e-09f, -4.652859090e-09f, -4.638874948e-09f, -4.624888689e-09f, -4.610900337e-09f, -4.596909920e-09f, -4.582917464e-09f, -4.568922996e-09f, -4.554926540e-09f,
+-4.540928125e-09f, -4.526927777e-09f, -4.512925521e-09f, -4.498921383e-09f, -4.484915392e-09f, -4.470907571e-09f, -4.456897949e-09f, -4.442886551e-09f, -4.428873403e-09f, -4.414858533e-09f,
+-4.400841965e-09f, -4.386823726e-09f, -4.372803843e-09f, -4.358782342e-09f, -4.344759249e-09f, -4.330734590e-09f, -4.316708391e-09f, -4.302680679e-09f, -4.288651480e-09f, -4.274620820e-09f,
+-4.260588726e-09f, -4.246555222e-09f, -4.232520337e-09f, -4.218484095e-09f, -4.204446523e-09f, -4.190407647e-09f, -4.176367493e-09f, -4.162326087e-09f, -4.148283456e-09f, -4.134239625e-09f,
+-4.120194621e-09f, -4.106148470e-09f, -4.092101197e-09f, -4.078052829e-09f, -4.064003392e-09f, -4.049952912e-09f, -4.035901415e-09f, -4.021848927e-09f, -4.007795474e-09f, -3.993741083e-09f,
+-3.979685778e-09f, -3.965629586e-09f, -3.951572533e-09f, -3.937514645e-09f, -3.923455949e-09f, -3.909396469e-09f, -3.895336232e-09f, -3.881275263e-09f, -3.867213590e-09f, -3.853151237e-09f,
+-3.839088231e-09f, -3.825024597e-09f, -3.810960362e-09f, -3.796895550e-09f, -3.782830189e-09f, -3.768764304e-09f, -3.754697921e-09f, -3.740631065e-09f, -3.726563762e-09f, -3.712496039e-09f,
+-3.698427921e-09f, -3.684359434e-09f, -3.670290603e-09f, -3.656221455e-09f, -3.642152015e-09f, -3.628082309e-09f, -3.614012363e-09f, -3.599942202e-09f, -3.585871852e-09f, -3.571801339e-09f,
+-3.557730689e-09f, -3.543659926e-09f, -3.529589078e-09f, -3.515518169e-09f, -3.501447226e-09f, -3.487376273e-09f, -3.473305337e-09f, -3.459234443e-09f, -3.445163617e-09f, -3.431092884e-09f,
+-3.417022270e-09f, -3.402951800e-09f, -3.388881501e-09f, -3.374811397e-09f, -3.360741514e-09f, -3.346671878e-09f, -3.332602514e-09f, -3.318533448e-09f, -3.304464706e-09f, -3.290396312e-09f,
+-3.276328292e-09f, -3.262260671e-09f, -3.248193476e-09f, -3.234126732e-09f, -3.220060463e-09f, -3.205994696e-09f, -3.191929455e-09f, -3.177864767e-09f, -3.163800656e-09f, -3.149737149e-09f,
+-3.135674269e-09f, -3.121612043e-09f, -3.107550496e-09f, -3.093489654e-09f, -3.079429541e-09f, -3.065370183e-09f, -3.051311605e-09f, -3.037253832e-09f, -3.023196890e-09f, -3.009140804e-09f,
+-2.995085600e-09f, -2.981031301e-09f, -2.966977934e-09f, -2.952925524e-09f, -2.938874096e-09f, -2.924823676e-09f, -2.910774287e-09f, -2.896725956e-09f, -2.882678707e-09f, -2.868632567e-09f,
+-2.854587559e-09f, -2.840543708e-09f, -2.826501041e-09f, -2.812459582e-09f, -2.798419356e-09f, -2.784380388e-09f, -2.770342704e-09f, -2.756306327e-09f, -2.742271284e-09f, -2.728237598e-09f,
+-2.714205296e-09f, -2.700174402e-09f, -2.686144942e-09f, -2.672116939e-09f, -2.658090419e-09f, -2.644065406e-09f, -2.630041927e-09f, -2.616020005e-09f, -2.601999666e-09f, -2.587980933e-09f,
+-2.573963833e-09f, -2.559948390e-09f, -2.545934629e-09f, -2.531922574e-09f, -2.517912251e-09f, -2.503903684e-09f, -2.489896898e-09f, -2.475891917e-09f, -2.461888767e-09f, -2.447887471e-09f,
+-2.433888056e-09f, -2.419890545e-09f, -2.405894963e-09f, -2.391901335e-09f, -2.377909685e-09f, -2.363920038e-09f, -2.349932419e-09f, -2.335946853e-09f, -2.321963363e-09f, -2.307981974e-09f,
+-2.294002712e-09f, -2.280025600e-09f, -2.266050663e-09f, -2.252077926e-09f, -2.238107412e-09f, -2.224139147e-09f, -2.210173156e-09f, -2.196209461e-09f, -2.182248089e-09f, -2.168289063e-09f,
+-2.154332407e-09f, -2.140378147e-09f, -2.126426306e-09f, -2.112476910e-09f, -2.098529981e-09f, -2.084585545e-09f, -2.070643625e-09f, -2.056704247e-09f, -2.042767435e-09f, -2.028833212e-09f,
+-2.014901603e-09f, -2.000972632e-09f, -1.987046324e-09f, -1.973122702e-09f, -1.959201791e-09f, -1.945283616e-09f, -1.931368199e-09f, -1.917455566e-09f, -1.903545740e-09f, -1.889638746e-09f,
+-1.875734608e-09f, -1.861833349e-09f, -1.847934994e-09f, -1.834039567e-09f, -1.820147092e-09f, -1.806257593e-09f, -1.792371094e-09f, -1.778487619e-09f, -1.764607192e-09f, -1.750729837e-09f,
+-1.736855578e-09f, -1.722984438e-09f, -1.709116442e-09f, -1.695251614e-09f, -1.681389977e-09f, -1.667531556e-09f, -1.653676373e-09f, -1.639824454e-09f, -1.625975821e-09f, -1.612130499e-09f,
+-1.598288512e-09f, -1.584449882e-09f, -1.570614635e-09f, -1.556782793e-09f, -1.542954380e-09f, -1.529129420e-09f, -1.515307937e-09f, -1.501489955e-09f, -1.487675496e-09f, -1.473864585e-09f,
+-1.460057245e-09f, -1.446253500e-09f, -1.432453374e-09f, -1.418656890e-09f, -1.404864071e-09f, -1.391074941e-09f, -1.377289524e-09f, -1.363507842e-09f, -1.349729921e-09f, -1.335955782e-09f,
+-1.322185450e-09f, -1.308418947e-09f, -1.294656298e-09f, -1.280897526e-09f, -1.267142654e-09f, -1.253391705e-09f, -1.239644702e-09f, -1.225901670e-09f, -1.212162631e-09f, -1.198427609e-09f,
+-1.184696627e-09f, -1.170969708e-09f, -1.157246875e-09f, -1.143528152e-09f, -1.129813562e-09f, -1.116103127e-09f, -1.102396872e-09f, -1.088694819e-09f, -1.074996992e-09f, -1.061303413e-09f,
+-1.047614105e-09f, -1.033929093e-09f, -1.020248398e-09f, -1.006572044e-09f, -9.929000534e-10f, -9.792324499e-10f, -9.655692561e-10f, -9.519104951e-10f, -9.382561898e-10f, -9.246063631e-10f,
+-9.109610379e-10f, -8.973202372e-10f, -8.836839837e-10f, -8.700523003e-10f, -8.564252100e-10f, -8.428027354e-10f, -8.291848994e-10f, -8.155717248e-10f, -8.019632343e-10f, -7.883594507e-10f,
+-7.747603967e-10f, -7.611660950e-10f, -7.475765683e-10f, -7.339918393e-10f, -7.204119305e-10f, -7.068368647e-10f, -6.932666645e-10f, -6.797013524e-10f, -6.661409510e-10f, -6.525854829e-10f,
+-6.390349705e-10f, -6.254894366e-10f, -6.119489034e-10f, -5.984133935e-10f, -5.848829294e-10f, -5.713575335e-10f, -5.578372283e-10f, -5.443220360e-10f, -5.308119792e-10f, -5.173070801e-10f,
+-5.038073611e-10f, -4.903128446e-10f, -4.768235528e-10f, -4.633395081e-10f, -4.498607326e-10f, -4.363872487e-10f, -4.229190786e-10f, -4.094562444e-10f, -3.959987684e-10f, -3.825466727e-10f,
+-3.690999796e-10f, -3.556587110e-10f, -3.422228892e-10f, -3.287925362e-10f, -3.153676740e-10f, -3.019483248e-10f, -2.885345106e-10f, -2.751262533e-10f, -2.617235750e-10f, -2.483264976e-10f,
+-2.349350431e-10f, -2.215492335e-10f, -2.081690905e-10f, -1.947946362e-10f, -1.814258924e-10f, -1.680628809e-10f, -1.547056236e-10f, -1.413541422e-10f, -1.280084586e-10f, -1.146685946e-10f,
+-1.013345718e-10f, -8.800641207e-11f, -7.468413705e-11f, -6.136776843e-11f, -4.805732789e-11f, -3.475283708e-11f, -2.145431761e-11f, -8.161791107e-12f, 5.124720860e-12f, 1.840519672e-11f,
+3.167961493e-11f, 4.494795397e-11f, 5.821019233e-11f, 7.146630853e-11f, 8.471628111e-11f, 9.796008864e-11f, 1.111977097e-10f, 1.244291228e-10f, 1.376543068e-10f, 1.508732401e-10f,
+1.640859014e-10f, 1.772922695e-10f, 1.904923230e-10f, 2.036860407e-10f, 2.168734013e-10f, 2.300543836e-10f, 2.432289664e-10f, 2.563971285e-10f, 2.695588487e-10f, 2.827141058e-10f,
+2.958628789e-10f, 3.090051466e-10f, 3.221408880e-10f, 3.352700821e-10f, 3.483927077e-10f, 3.615087438e-10f, 3.746181695e-10f, 3.877209638e-10f, 4.008171057e-10f, 4.139065742e-10f,
+4.269893486e-10f, 4.400654078e-10f, 4.531347311e-10f, 4.661972975e-10f, 4.792530863e-10f, 4.923020767e-10f, 5.053442478e-10f, 5.183795789e-10f, 5.314080493e-10f, 5.444296382e-10f,
+5.574443251e-10f, 5.704520891e-10f, 5.834529096e-10f, 5.964467661e-10f, 6.094336379e-10f, 6.224135044e-10f, 6.353863450e-10f, 6.483521393e-10f, 6.613108667e-10f, 6.742625068e-10f,
+6.872070389e-10f, 7.001444428e-10f, 7.130746979e-10f, 7.259977838e-10f, 7.389136803e-10f, 7.518223668e-10f, 7.647238231e-10f, 7.776180288e-10f, 7.905049637e-10f, 8.033846075e-10f,
+8.162569399e-10f, 8.291219408e-10f, 8.419795898e-10f, 8.548298668e-10f, 8.676727517e-10f, 8.805082243e-10f, 8.933362645e-10f, 9.061568523e-10f, 9.189699674e-10f, 9.317755900e-10f,
+9.445737000e-10f, 9.573642773e-10f, 9.701473020e-10f, 9.829227541e-10f, 9.956906137e-10f, 1.008450861e-09f, 1.021203476e-09f, 1.033948439e-09f, 1.046685729e-09f, 1.059415328e-09f,
+1.072137216e-09f, 1.084851372e-09f, 1.097557776e-09f, 1.110256410e-09f, 1.122947254e-09f, 1.135630287e-09f, 1.148305490e-09f, 1.160972844e-09f, 1.173632328e-09f, 1.186283924e-09f,
+1.198927612e-09f, 1.211563371e-09f, 1.224191184e-09f, 1.236811029e-09f, 1.249422888e-09f, 1.262026742e-09f, 1.274622570e-09f, 1.287210353e-09f, 1.299790073e-09f, 1.312361709e-09f,
+1.324925243e-09f, 1.337480654e-09f, 1.350027925e-09f, 1.362567035e-09f, 1.375097965e-09f, 1.387620696e-09f, 1.400135209e-09f, 1.412641485e-09f, 1.425139504e-09f, 1.437629248e-09f,
+1.450110697e-09f, 1.462583833e-09f, 1.475048635e-09f, 1.487505086e-09f, 1.499953166e-09f, 1.512392856e-09f, 1.524824138e-09f, 1.537246992e-09f, 1.549661399e-09f, 1.562067341e-09f,
+1.574464799e-09f, 1.586853753e-09f, 1.599234186e-09f, 1.611606078e-09f, 1.623969411e-09f, 1.636324165e-09f, 1.648670323e-09f, 1.661007864e-09f, 1.673336772e-09f, 1.685657027e-09f,
+1.697968610e-09f, 1.710271503e-09f, 1.722565688e-09f, 1.734851145e-09f, 1.747127857e-09f, 1.759395805e-09f, 1.771654970e-09f, 1.783905333e-09f, 1.796146878e-09f, 1.808379584e-09f,
+1.820603434e-09f, 1.832818410e-09f, 1.845024492e-09f, 1.857221664e-09f, 1.869409906e-09f, 1.881589200e-09f, 1.893759528e-09f, 1.905920872e-09f, 1.918073214e-09f, 1.930216535e-09f,
+1.942350818e-09f, 1.954476044e-09f, 1.966592195e-09f, 1.978699254e-09f, 1.990797201e-09f, 2.002886020e-09f, 2.014965692e-09f, 2.027036199e-09f, 2.039097524e-09f, 2.051149648e-09f,
+2.063192554e-09f, 2.075226223e-09f, 2.087250638e-09f, 2.099265782e-09f, 2.111271635e-09f, 2.123268182e-09f, 2.135255403e-09f, 2.147233281e-09f, 2.159201799e-09f, 2.171160938e-09f,
+2.183110682e-09f, 2.195051013e-09f, 2.206981912e-09f, 2.218903363e-09f, 2.230815348e-09f, 2.242717850e-09f, 2.254610851e-09f, 2.266494333e-09f, 2.278368279e-09f, 2.290232672e-09f,
+2.302087495e-09f, 2.313932729e-09f, 2.325768359e-09f, 2.337594366e-09f, 2.349410733e-09f, 2.361217443e-09f, 2.373014478e-09f, 2.384801823e-09f, 2.396579458e-09f, 2.408347368e-09f,
+2.420105535e-09f, 2.431853942e-09f, 2.443592573e-09f, 2.455321409e-09f, 2.467040434e-09f, 2.478749631e-09f, 2.490448983e-09f, 2.502138473e-09f, 2.513818084e-09f, 2.525487800e-09f,
+2.537147602e-09f, 2.548797476e-09f, 2.560437404e-09f, 2.572067368e-09f, 2.583687353e-09f, 2.595297341e-09f, 2.606897316e-09f, 2.618487262e-09f, 2.630067160e-09f, 2.641636996e-09f,
+2.653196752e-09f, 2.664746412e-09f, 2.676285959e-09f, 2.687815377e-09f, 2.699334649e-09f, 2.710843759e-09f, 2.722342690e-09f, 2.733831426e-09f, 2.745309951e-09f, 2.756778248e-09f,
+2.768236300e-09f, 2.779684092e-09f, 2.791121607e-09f, 2.802548830e-09f, 2.813965743e-09f, 2.825372330e-09f, 2.836768576e-09f, 2.848154465e-09f, 2.859529979e-09f, 2.870895103e-09f,
+2.882249822e-09f, 2.893594118e-09f, 2.904927976e-09f, 2.916251380e-09f, 2.927564314e-09f, 2.938866762e-09f, 2.950158708e-09f, 2.961440137e-09f, 2.972711031e-09f, 2.983971377e-09f,
+2.995221157e-09f, 3.006460356e-09f, 3.017688958e-09f, 3.028906947e-09f, 3.040114309e-09f, 3.051311026e-09f, 3.062497084e-09f, 3.073672467e-09f, 3.084837159e-09f, 3.095991145e-09f,
+3.107134409e-09f, 3.118266936e-09f, 3.129388710e-09f, 3.140499715e-09f, 3.151599937e-09f, 3.162689360e-09f, 3.173767969e-09f, 3.184835747e-09f, 3.195892680e-09f, 3.206938753e-09f,
+3.217973951e-09f, 3.228998257e-09f, 3.240011657e-09f, 3.251014136e-09f, 3.262005678e-09f, 3.272986269e-09f, 3.283955893e-09f, 3.294914535e-09f, 3.305862181e-09f, 3.316798814e-09f,
+3.327724421e-09f, 3.338638986e-09f, 3.349542494e-09f, 3.360434930e-09f, 3.371316280e-09f, 3.382186528e-09f, 3.393045660e-09f, 3.403893661e-09f, 3.414730516e-09f, 3.425556211e-09f,
+3.436370730e-09f, 3.447174059e-09f, 3.457966183e-09f, 3.468747089e-09f, 3.479516760e-09f, 3.490275183e-09f, 3.501022342e-09f, 3.511758224e-09f, 3.522482814e-09f, 3.533196097e-09f,
+3.543898060e-09f, 3.554588687e-09f, 3.565267964e-09f, 3.575935876e-09f, 3.586592411e-09f, 3.597237552e-09f, 3.607871286e-09f, 3.618493599e-09f, 3.629104476e-09f, 3.639703903e-09f,
+3.650291867e-09f, 3.660868352e-09f, 3.671433345e-09f, 3.681986831e-09f, 3.692528798e-09f, 3.703059229e-09f, 3.713578113e-09f, 3.724085433e-09f, 3.734581178e-09f, 3.745065332e-09f,
+3.755537882e-09f, 3.765998814e-09f, 3.776448114e-09f, 3.786885768e-09f, 3.797311762e-09f, 3.807726084e-09f, 3.818128718e-09f, 3.828519652e-09f, 3.838898871e-09f, 3.849266363e-09f,
+3.859622113e-09f, 3.869966107e-09f, 3.880298333e-09f, 3.890618776e-09f, 3.900927424e-09f, 3.911224262e-09f, 3.921509278e-09f, 3.931782457e-09f, 3.942043787e-09f, 3.952293254e-09f,
+3.962530845e-09f, 3.972756546e-09f, 3.982970344e-09f, 3.993172227e-09f, 4.003362180e-09f, 4.013540190e-09f, 4.023706245e-09f, 4.033860331e-09f, 4.044002435e-09f, 4.054132543e-09f,
+4.064250644e-09f, 4.074356724e-09f, 4.084450770e-09f, 4.094532768e-09f, 4.104602707e-09f, 4.114660573e-09f, 4.124706352e-09f, 4.134740034e-09f, 4.144761603e-09f, 4.154771049e-09f,
+4.164768357e-09f, 4.174753515e-09f, 4.184726511e-09f, 4.194687332e-09f, 4.204635965e-09f, 4.214572397e-09f, 4.224496616e-09f, 4.234408610e-09f, 4.244308365e-09f, 4.254195869e-09f,
+4.264071111e-09f, 4.273934076e-09f, 4.283784754e-09f, 4.293623130e-09f, 4.303449194e-09f, 4.313262933e-09f, 4.323064334e-09f, 4.332853385e-09f, 4.342630074e-09f, 4.352394389e-09f,
+4.362146317e-09f, 4.371885847e-09f, 4.381612965e-09f, 4.391327661e-09f, 4.401029921e-09f, 4.410719734e-09f, 4.420397088e-09f, 4.430061971e-09f, 4.439714371e-09f, 4.449354275e-09f,
+4.458981672e-09f, 4.468596551e-09f, 4.478198899e-09f, 4.487788704e-09f, 4.497365954e-09f, 4.506930639e-09f, 4.516482745e-09f, 4.526022262e-09f, 4.535549177e-09f, 4.545063480e-09f,
+4.554565158e-09f, 4.564054199e-09f, 4.573530593e-09f, 4.582994327e-09f, 4.592445390e-09f, 4.601883771e-09f, 4.611309459e-09f, 4.620722440e-09f, 4.630122706e-09f, 4.639510243e-09f,
+4.648885040e-09f, 4.658247088e-09f, 4.667596373e-09f, 4.676932884e-09f, 4.686256612e-09f, 4.695567543e-09f, 4.704865668e-09f, 4.714150975e-09f, 4.723423453e-09f, 4.732683090e-09f,
+4.741929876e-09f, 4.751163800e-09f, 4.760384851e-09f, 4.769593018e-09f, 4.778788289e-09f, 4.787970654e-09f, 4.797140102e-09f, 4.806296623e-09f, 4.815440204e-09f, 4.824570837e-09f,
+4.833688509e-09f, 4.842793210e-09f, 4.851884930e-09f, 4.860963657e-09f, 4.870029381e-09f, 4.879082091e-09f, 4.888121778e-09f, 4.897148430e-09f, 4.906162036e-09f, 4.915162586e-09f,
+4.924150071e-09f, 4.933124478e-09f, 4.942085799e-09f, 4.951034022e-09f, 4.959969137e-09f, 4.968891134e-09f, 4.977800002e-09f, 4.986695731e-09f, 4.995578312e-09f, 5.004447733e-09f,
+5.013303985e-09f, 5.022147057e-09f, 5.030976940e-09f, 5.039793622e-09f, 5.048597095e-09f, 5.057387348e-09f, 5.066164371e-09f, 5.074928154e-09f, 5.083678687e-09f, 5.092415961e-09f,
+5.101139965e-09f, 5.109850689e-09f, 5.118548124e-09f, 5.127232260e-09f, 5.135903086e-09f, 5.144560594e-09f, 5.153204774e-09f, 5.161835615e-09f, 5.170453109e-09f, 5.179057246e-09f,
+5.187648015e-09f, 5.196225408e-09f, 5.204789415e-09f, 5.213340026e-09f, 5.221877232e-09f, 5.230401023e-09f, 5.238911390e-09f, 5.247408325e-09f, 5.255891816e-09f, 5.264361855e-09f,
+5.272818433e-09f, 5.281261540e-09f, 5.289691167e-09f, 5.298107305e-09f, 5.306509945e-09f, 5.314899077e-09f, 5.323274693e-09f, 5.331636783e-09f, 5.339985338e-09f, 5.348320349e-09f,
+5.356641807e-09f, 5.364949704e-09f, 5.373244030e-09f, 5.381524776e-09f, 5.389791933e-09f, 5.398045493e-09f, 5.406285446e-09f, 5.414511785e-09f, 5.422724499e-09f, 5.430923581e-09f,
+5.439109021e-09f, 5.447280812e-09f, 5.455438943e-09f, 5.463583407e-09f, 5.471714195e-09f, 5.479831299e-09f, 5.487934709e-09f, 5.496024418e-09f, 5.504100417e-09f, 5.512162697e-09f,
+5.520211250e-09f, 5.528246068e-09f, 5.536267142e-09f, 5.544274464e-09f, 5.552268026e-09f, 5.560247818e-09f, 5.568213834e-09f, 5.576166065e-09f, 5.584104502e-09f, 5.592029138e-09f,
+5.599939964e-09f, 5.607836973e-09f, 5.615720155e-09f, 5.623589504e-09f, 5.631445011e-09f, 5.639286668e-09f, 5.647114467e-09f, 5.654928400e-09f, 5.662728460e-09f, 5.670514638e-09f,
+5.678286927e-09f, 5.686045319e-09f, 5.693789805e-09f, 5.701520379e-09f, 5.709237033e-09f, 5.716939758e-09f, 5.724628548e-09f, 5.732303394e-09f, 5.739964289e-09f, 5.747611226e-09f,
+5.755244197e-09f, 5.762863194e-09f, 5.770468209e-09f, 5.778059237e-09f, 5.785636268e-09f, 5.793199295e-09f, 5.800748312e-09f, 5.808283311e-09f, 5.815804285e-09f, 5.823311226e-09f,
+5.830804126e-09f, 5.838282980e-09f, 5.845747779e-09f, 5.853198517e-09f, 5.860635186e-09f, 5.868057780e-09f, 5.875466290e-09f, 5.882860711e-09f, 5.890241035e-09f, 5.897607255e-09f,
+5.904959364e-09f, 5.912297355e-09f, 5.919621222e-09f, 5.926930958e-09f, 5.934226555e-09f, 5.941508006e-09f, 5.948775306e-09f, 5.956028447e-09f, 5.963267423e-09f, 5.970492227e-09f,
+5.977702852e-09f, 5.984899292e-09f, 5.992081539e-09f, 5.999249589e-09f, 6.006403433e-09f, 6.013543065e-09f, 6.020668480e-09f, 6.027779669e-09f, 6.034876628e-09f, 6.041959350e-09f,
+6.049027828e-09f, 6.056082056e-09f, 6.063122027e-09f, 6.070147736e-09f, 6.077159176e-09f, 6.084156341e-09f, 6.091139225e-09f, 6.098107821e-09f, 6.105062124e-09f, 6.112002127e-09f,
+6.118927824e-09f, 6.125839210e-09f, 6.132736278e-09f, 6.139619022e-09f, 6.146487436e-09f, 6.153341514e-09f, 6.160181252e-09f, 6.167006641e-09f, 6.173817678e-09f, 6.180614355e-09f,
+6.187396668e-09f, 6.194164610e-09f, 6.200918176e-09f, 6.207657360e-09f, 6.214382156e-09f, 6.221092559e-09f, 6.227788563e-09f, 6.234470163e-09f, 6.241137353e-09f, 6.247790128e-09f,
+6.254428481e-09f, 6.261052408e-09f, 6.267661904e-09f, 6.274256962e-09f, 6.280837577e-09f, 6.287403745e-09f, 6.293955459e-09f, 6.300492715e-09f, 6.307015508e-09f, 6.313523831e-09f,
+6.320017680e-09f, 6.326497050e-09f, 6.332961935e-09f, 6.339412332e-09f, 6.345848233e-09f, 6.352269635e-09f, 6.358676532e-09f, 6.365068920e-09f, 6.371446793e-09f, 6.377810146e-09f,
+6.384158975e-09f, 6.390493275e-09f, 6.396813041e-09f, 6.403118268e-09f, 6.409408952e-09f, 6.415685087e-09f, 6.421946668e-09f, 6.428193693e-09f, 6.434426154e-09f, 6.440644049e-09f,
+6.446847372e-09f, 6.453036118e-09f, 6.459210284e-09f, 6.465369864e-09f, 6.471514855e-09f, 6.477645252e-09f, 6.483761050e-09f, 6.489862244e-09f, 6.495948832e-09f, 6.502020807e-09f,
+6.508078167e-09f, 6.514120906e-09f, 6.520149021e-09f, 6.526162506e-09f, 6.532161359e-09f, 6.538145575e-09f, 6.544115149e-09f, 6.550070078e-09f, 6.556010358e-09f, 6.561935984e-09f,
+6.567846952e-09f, 6.573743259e-09f, 6.579624901e-09f, 6.585491873e-09f, 6.591344172e-09f, 6.597181794e-09f, 6.603004735e-09f, 6.608812991e-09f, 6.614606558e-09f, 6.620385433e-09f,
+6.626149612e-09f, 6.631899092e-09f, 6.637633868e-09f, 6.643353936e-09f, 6.649059295e-09f, 6.654749939e-09f, 6.660425865e-09f, 6.666087070e-09f, 6.671733550e-09f, 6.677365302e-09f,
+6.682982323e-09f, 6.688584608e-09f, 6.694172155e-09f, 6.699744960e-09f, 6.705303020e-09f, 6.710846332e-09f, 6.716374892e-09f, 6.721888697e-09f, 6.727387744e-09f, 6.732872030e-09f,
+6.738341552e-09f, 6.743796306e-09f, 6.749236289e-09f, 6.754661499e-09f, 6.760071933e-09f, 6.765467586e-09f, 6.770848457e-09f, 6.776214543e-09f, 6.781565840e-09f, 6.786902346e-09f,
+6.792224058e-09f, 6.797530972e-09f, 6.802823087e-09f, 6.808100400e-09f, 6.813362907e-09f, 6.818610606e-09f, 6.823843495e-09f, 6.829061570e-09f, 6.834264829e-09f, 6.839453270e-09f,
+6.844626890e-09f, 6.849785686e-09f, 6.854929656e-09f, 6.860058798e-09f, 6.865173109e-09f, 6.870272586e-09f, 6.875357227e-09f, 6.880427030e-09f, 6.885481993e-09f, 6.890522113e-09f,
+6.895547387e-09f, 6.900557815e-09f, 6.905553393e-09f, 6.910534119e-09f, 6.915499992e-09f, 6.920451008e-09f, 6.925387166e-09f, 6.930308464e-09f, 6.935214900e-09f, 6.940106472e-09f,
+6.944983178e-09f, 6.949845015e-09f, 6.954691982e-09f, 6.959524077e-09f, 6.964341299e-09f, 6.969143645e-09f, 6.973931113e-09f, 6.978703702e-09f, 6.983461410e-09f, 6.988204235e-09f,
+6.992932176e-09f, 6.997645230e-09f, 7.002343397e-09f, 7.007026674e-09f, 7.011695061e-09f, 7.016348555e-09f, 7.020987155e-09f, 7.025610859e-09f, 7.030219667e-09f, 7.034813575e-09f,
+7.039392585e-09f, 7.043956692e-09f, 7.048505898e-09f, 7.053040199e-09f, 7.057559595e-09f, 7.062064085e-09f, 7.066553666e-09f, 7.071028339e-09f, 7.075488102e-09f, 7.079932954e-09f,
+7.084362893e-09f, 7.088777918e-09f, 7.093178029e-09f, 7.097563225e-09f, 7.101933504e-09f, 7.106288865e-09f, 7.110629308e-09f, 7.114954831e-09f, 7.119265434e-09f, 7.123561115e-09f,
+7.127841874e-09f, 7.132107711e-09f, 7.136358624e-09f, 7.140594612e-09f, 7.144815675e-09f, 7.149021812e-09f, 7.153213023e-09f, 7.157389306e-09f, 7.161550662e-09f, 7.165697089e-09f,
+7.169828587e-09f, 7.173945156e-09f, 7.178046795e-09f, 7.182133503e-09f, 7.186205280e-09f, 7.190262126e-09f, 7.194304041e-09f, 7.198331023e-09f, 7.202343072e-09f, 7.206340189e-09f,
+7.210322373e-09f, 7.214289624e-09f, 7.218241941e-09f, 7.222179324e-09f, 7.226101774e-09f, 7.230009289e-09f, 7.233901870e-09f, 7.237779518e-09f, 7.241642231e-09f, 7.245490009e-09f,
+7.249322854e-09f, 7.253140764e-09f, 7.256943740e-09f, 7.260731782e-09f, 7.264504890e-09f, 7.268263064e-09f, 7.272006304e-09f, 7.275734611e-09f, 7.279447985e-09f, 7.283146426e-09f,
+7.286829934e-09f, 7.290498509e-09f, 7.294152153e-09f, 7.297790865e-09f, 7.301414645e-09f, 7.305023495e-09f, 7.308617414e-09f, 7.312196403e-09f, 7.315760463e-09f, 7.319309594e-09f,
+7.322843796e-09f, 7.326363071e-09f, 7.329867418e-09f, 7.333356839e-09f, 7.336831334e-09f, 7.340290904e-09f, 7.343735549e-09f, 7.347165271e-09f, 7.350580070e-09f, 7.353979946e-09f,
+7.357364902e-09f, 7.360734937e-09f, 7.364090052e-09f, 7.367430249e-09f, 7.370755528e-09f, 7.374065891e-09f, 7.377361338e-09f, 7.380641870e-09f, 7.383907488e-09f, 7.387158195e-09f,
+7.390393989e-09f, 7.393614874e-09f, 7.396820849e-09f, 7.400011916e-09f, 7.403188077e-09f, 7.406349332e-09f, 7.409495683e-09f, 7.412627131e-09f, 7.415743678e-09f, 7.418845324e-09f,
+7.421932072e-09f, 7.425003922e-09f, 7.428060877e-09f, 7.431102936e-09f, 7.434130103e-09f, 7.437142379e-09f, 7.440139764e-09f, 7.443122261e-09f, 7.446089871e-09f, 7.449042596e-09f,
+7.451980438e-09f, 7.454903398e-09f, 7.457811478e-09f, 7.460704679e-09f, 7.463583004e-09f, 7.466446454e-09f, 7.469295032e-09f, 7.472128738e-09f, 7.474947574e-09f, 7.477751544e-09f,
+7.480540648e-09f, 7.483314888e-09f, 7.486074267e-09f, 7.488818787e-09f, 7.491548449e-09f, 7.494263256e-09f, 7.496963209e-09f, 7.499648311e-09f, 7.502318564e-09f, 7.504973971e-09f,
+7.507614532e-09f, 7.510240251e-09f, 7.512851130e-09f, 7.515447171e-09f, 7.518028376e-09f, 7.520594748e-09f, 7.523146290e-09f, 7.525683002e-09f, 7.528204888e-09f, 7.530711951e-09f,
+7.533204192e-09f, 7.535681615e-09f, 7.538144221e-09f, 7.540592014e-09f, 7.543024995e-09f, 7.545443168e-09f, 7.547846535e-09f, 7.550235099e-09f, 7.552608862e-09f, 7.554967827e-09f,
+7.557311997e-09f, 7.559641375e-09f, 7.561955962e-09f, 7.564255764e-09f, 7.566540781e-09f, 7.568811017e-09f, 7.571066474e-09f, 7.573307157e-09f, 7.575533067e-09f, 7.577744207e-09f,
+7.579940581e-09f, 7.582122192e-09f, 7.584289042e-09f, 7.586441135e-09f, 7.588578474e-09f, 7.590701062e-09f, 7.592808901e-09f, 7.594901996e-09f, 7.596980350e-09f, 7.599043965e-09f,
+7.601092845e-09f, 7.603126993e-09f, 7.605146412e-09f, 7.607151107e-09f, 7.609141080e-09f, 7.611116334e-09f, 7.613076873e-09f, 7.615022701e-09f, 7.616953821e-09f, 7.618870236e-09f,
+7.620771949e-09f, 7.622658966e-09f, 7.624531288e-09f, 7.626388920e-09f, 7.628231865e-09f, 7.630060127e-09f, 7.631873710e-09f, 7.633672616e-09f, 7.635456851e-09f, 7.637226417e-09f,
+7.638981319e-09f, 7.640721560e-09f, 7.642447144e-09f, 7.644158075e-09f, 7.645854357e-09f, 7.647535994e-09f, 7.649202989e-09f, 7.650855347e-09f, 7.652493072e-09f, 7.654116167e-09f,
+7.655724636e-09f, 7.657318485e-09f, 7.658897716e-09f, 7.660462333e-09f, 7.662012342e-09f, 7.663547746e-09f, 7.665068550e-09f, 7.666574756e-09f, 7.668066371e-09f, 7.669543398e-09f,
+7.671005841e-09f, 7.672453704e-09f, 7.673886993e-09f, 7.675305711e-09f, 7.676709862e-09f, 7.678099452e-09f, 7.679474484e-09f, 7.680834963e-09f, 7.682180894e-09f, 7.683512281e-09f,
+7.684829128e-09f, 7.686131440e-09f, 7.687419222e-09f, 7.688692479e-09f, 7.689951214e-09f, 7.691195433e-09f, 7.692425140e-09f, 7.693640340e-09f, 7.694841038e-09f, 7.696027239e-09f,
+7.697198947e-09f, 7.698356166e-09f, 7.699498903e-09f, 7.700627162e-09f, 7.701740947e-09f, 7.702840264e-09f, 7.703925118e-09f, 7.704995513e-09f, 7.706051454e-09f, 7.707092947e-09f,
+7.708119997e-09f, 7.709132608e-09f, 7.710130786e-09f, 7.711114536e-09f, 7.712083863e-09f, 7.713038771e-09f, 7.713979267e-09f, 7.714905356e-09f, 7.715817042e-09f, 7.716714331e-09f,
+7.717597229e-09f, 7.718465740e-09f, 7.719319870e-09f, 7.720159625e-09f, 7.720985009e-09f, 7.721796028e-09f, 7.722592687e-09f, 7.723374993e-09f, 7.724142949e-09f, 7.724896563e-09f,
+7.725635840e-09f, 7.726360784e-09f, 7.727071402e-09f, 7.727767699e-09f, 7.728449681e-09f, 7.729117353e-09f, 7.729770722e-09f, 7.730409792e-09f, 7.731034570e-09f, 7.731645061e-09f,
+7.732241271e-09f, 7.732823206e-09f, 7.733390872e-09f, 7.733944274e-09f, 7.734483419e-09f, 7.735008312e-09f, 7.735518959e-09f, 7.736015367e-09f, 7.736497540e-09f, 7.736965486e-09f,
+7.737419209e-09f, 7.737858717e-09f, 7.738284015e-09f, 7.738695109e-09f, 7.739092006e-09f, 7.739474711e-09f, 7.739843231e-09f, 7.740197572e-09f, 7.740537739e-09f, 7.740863740e-09f,
+7.741175581e-09f, 7.741473267e-09f, 7.741756805e-09f, 7.742026202e-09f, 7.742281463e-09f, 7.742522596e-09f, 7.742749606e-09f, 7.742962500e-09f, 7.743161284e-09f, 7.743345966e-09f,
+7.743516550e-09f, 7.743673044e-09f, 7.743815455e-09f, 7.743943788e-09f, 7.744058051e-09f, 7.744158250e-09f, 7.744244392e-09f, 7.744316483e-09f, 7.744374530e-09f, 7.744418540e-09f,
+7.744448519e-09f, 7.744464475e-09f, 7.744466413e-09f, 7.744454341e-09f, 7.744428266e-09f, 7.744388193e-09f, 7.744334132e-09f, 7.744266087e-09f, 7.744184066e-09f, 7.744088076e-09f,
+7.743978124e-09f, 7.743854217e-09f, 7.743716362e-09f, 7.743564565e-09f, 7.743398835e-09f, 7.743219177e-09f, 7.743025600e-09f, 7.742818109e-09f, 7.742596713e-09f, 7.742361419e-09f,
+7.742112233e-09f, 7.741849163e-09f, 7.741572215e-09f, 7.741281399e-09f, 7.740976719e-09f, 7.740658185e-09f, 7.740325802e-09f, 7.739979580e-09f, 7.739619524e-09f, 7.739245642e-09f,
+7.738857942e-09f, 7.738456431e-09f, 7.738041116e-09f, 7.737612006e-09f, 7.737169107e-09f, 7.736712427e-09f, 7.736241973e-09f, 7.735757754e-09f, 7.735259776e-09f, 7.734748047e-09f,
+7.734222576e-09f, 7.733683369e-09f, 7.733130434e-09f, 7.732563779e-09f, 7.731983412e-09f, 7.731389340e-09f, 7.730781571e-09f, 7.730160114e-09f, 7.729524975e-09f, 7.728876162e-09f,
+7.728213684e-09f, 7.727537548e-09f, 7.726847762e-09f, 7.726144335e-09f, 7.725427273e-09f, 7.724696585e-09f, 7.723952280e-09f, 7.723194364e-09f, 7.722422846e-09f, 7.721637735e-09f,
+7.720839037e-09f, 7.720026762e-09f, 7.719200916e-09f, 7.718361510e-09f, 7.717508549e-09f, 7.716642044e-09f, 7.715762002e-09f, 7.714868430e-09f, 7.713961339e-09f, 7.713040734e-09f,
+7.712106626e-09f, 7.711159022e-09f, 7.710197931e-09f, 7.709223360e-09f, 7.708235319e-09f, 7.707233816e-09f, 7.706218858e-09f, 7.705190456e-09f, 7.704148616e-09f, 7.703093348e-09f,
+7.702024659e-09f, 7.700942560e-09f, 7.699847057e-09f, 7.698738160e-09f, 7.697615877e-09f, 7.696480216e-09f, 7.695331187e-09f, 7.694168799e-09f, 7.692993059e-09f, 7.691803976e-09f,
+7.690601559e-09f, 7.689385818e-09f, 7.688156760e-09f, 7.686914394e-09f, 7.685658729e-09f, 7.684389775e-09f, 7.683107539e-09f, 7.681812031e-09f, 7.680503259e-09f, 7.679181233e-09f,
+7.677845961e-09f, 7.676497453e-09f, 7.675135716e-09f, 7.673760761e-09f, 7.672372597e-09f, 7.670971231e-09f, 7.669556674e-09f, 7.668128934e-09f, 7.666688020e-09f, 7.665233942e-09f,
+7.663766709e-09f, 7.662286329e-09f, 7.660792813e-09f, 7.659286168e-09f, 7.657766405e-09f, 7.656233533e-09f, 7.654687560e-09f, 7.653128497e-09f, 7.651556351e-09f, 7.649971134e-09f,
+7.648372853e-09f, 7.646761519e-09f, 7.645137141e-09f, 7.643499728e-09f, 7.641849289e-09f, 7.640185834e-09f, 7.638509372e-09f, 7.636819914e-09f, 7.635117468e-09f, 7.633402043e-09f,
+7.631673650e-09f, 7.629932298e-09f, 7.628177996e-09f, 7.626410755e-09f, 7.624630583e-09f, 7.622837490e-09f, 7.621031487e-09f, 7.619212582e-09f, 7.617380785e-09f, 7.615536106e-09f,
+7.613678555e-09f, 7.611808142e-09f, 7.609924876e-09f, 7.608028767e-09f, 7.606119824e-09f, 7.604198058e-09f, 7.602263479e-09f, 7.600316096e-09f, 7.598355920e-09f, 7.596382959e-09f,
+7.594397225e-09f, 7.592398726e-09f, 7.590387474e-09f, 7.588363477e-09f, 7.586326746e-09f, 7.584277292e-09f, 7.582215123e-09f, 7.580140250e-09f, 7.578052684e-09f, 7.575952433e-09f,
+7.573839509e-09f, 7.571713922e-09f, 7.569575680e-09f, 7.567424796e-09f, 7.565261279e-09f, 7.563085139e-09f, 7.560896386e-09f, 7.558695030e-09f, 7.556481083e-09f, 7.554254554e-09f,
+7.552015453e-09f, 7.549763791e-09f, 7.547499579e-09f, 7.545222825e-09f, 7.542933542e-09f, 7.540631739e-09f, 7.538317426e-09f, 7.535990615e-09f, 7.533651315e-09f, 7.531299537e-09f,
+7.528935292e-09f, 7.526558589e-09f, 7.524169441e-09f, 7.521767856e-09f, 7.519353846e-09f, 7.516927421e-09f, 7.514488592e-09f, 7.512037369e-09f, 7.509573764e-09f, 7.507097786e-09f,
+7.504609447e-09f, 7.502108756e-09f, 7.499595726e-09f, 7.497070366e-09f, 7.494532687e-09f, 7.491982700e-09f, 7.489420417e-09f, 7.486845846e-09f, 7.484259000e-09f, 7.481659890e-09f,
+7.479048525e-09f, 7.476424918e-09f, 7.473789078e-09f, 7.471141017e-09f, 7.468480746e-09f, 7.465808275e-09f, 7.463123616e-09f, 7.460426780e-09f, 7.457717777e-09f, 7.454996619e-09f,
+7.452263316e-09f, 7.449517880e-09f, 7.446760322e-09f, 7.443990653e-09f, 7.441208883e-09f, 7.438415025e-09f, 7.435609088e-09f, 7.432791085e-09f, 7.429961027e-09f, 7.427118924e-09f,
+7.424264788e-09f, 7.421398630e-09f, 7.418520461e-09f, 7.415630293e-09f, 7.412728137e-09f, 7.409814004e-09f, 7.406887905e-09f, 7.403949853e-09f, 7.400999857e-09f, 7.398037930e-09f,
+7.395064083e-09f, 7.392078327e-09f, 7.389080673e-09f, 7.386071134e-09f, 7.383049720e-09f, 7.380016444e-09f, 7.376971316e-09f, 7.373914348e-09f, 7.370845551e-09f, 7.367764937e-09f,
+7.364672518e-09f, 7.361568305e-09f, 7.358452310e-09f, 7.355324544e-09f, 7.352185019e-09f, 7.349033747e-09f, 7.345870739e-09f, 7.342696006e-09f, 7.339509561e-09f, 7.336311416e-09f,
+7.333101581e-09f, 7.329880069e-09f, 7.326646892e-09f, 7.323402060e-09f, 7.320145587e-09f, 7.316877483e-09f, 7.313597761e-09f, 7.310306433e-09f, 7.307003509e-09f, 7.303689003e-09f,
+7.300362926e-09f, 7.297025289e-09f, 7.293676105e-09f, 7.290315386e-09f, 7.286943144e-09f, 7.283559390e-09f, 7.280164137e-09f, 7.276757396e-09f, 7.273339180e-09f, 7.269909500e-09f,
+7.266468370e-09f, 7.263015799e-09f, 7.259551802e-09f, 7.256076389e-09f, 7.252589573e-09f, 7.249091366e-09f, 7.245581780e-09f, 7.242060828e-09f, 7.238528521e-09f, 7.234984872e-09f,
+7.231429892e-09f, 7.227863595e-09f, 7.224285991e-09f, 7.220697095e-09f, 7.217096917e-09f, 7.213485470e-09f, 7.209862766e-09f, 7.206228818e-09f, 7.202583638e-09f, 7.198927238e-09f,
+7.195259630e-09f, 7.191580828e-09f, 7.187890843e-09f, 7.184189688e-09f, 7.180477375e-09f, 7.176753916e-09f, 7.173019324e-09f, 7.169273612e-09f, 7.165516792e-09f, 7.161748876e-09f,
+7.157969877e-09f, 7.154179807e-09f, 7.150378680e-09f, 7.146566506e-09f, 7.142743300e-09f, 7.138909074e-09f, 7.135063839e-09f, 7.131207610e-09f, 7.127340397e-09f, 7.123462215e-09f,
+7.119573076e-09f, 7.115672992e-09f, 7.111761975e-09f, 7.107840040e-09f, 7.103907198e-09f, 7.099963462e-09f, 7.096008845e-09f, 7.092043359e-09f, 7.088067018e-09f, 7.084079834e-09f,
+7.080081820e-09f, 7.076072988e-09f, 7.072053353e-09f, 7.068022925e-09f, 7.063981719e-09f, 7.059929747e-09f, 7.055867021e-09f, 7.051793556e-09f, 7.047709363e-09f, 7.043614456e-09f,
+7.039508848e-09f, 7.035392551e-09f, 7.031265579e-09f, 7.027127944e-09f, 7.022979660e-09f, 7.018820739e-09f, 7.014651194e-09f, 7.010471039e-09f, 7.006280287e-09f, 7.002078950e-09f,
+6.997867042e-09f, 6.993644575e-09f, 6.989411564e-09f, 6.985168020e-09f, 6.980913958e-09f, 6.976649389e-09f, 6.972374328e-09f, 6.968088788e-09f, 6.963792781e-09f, 6.959486321e-09f,
+6.955169422e-09f, 6.950842095e-09f, 6.946504356e-09f, 6.942156216e-09f, 6.937797689e-09f, 6.933428788e-09f, 6.929049527e-09f, 6.924659919e-09f, 6.920259977e-09f, 6.915849715e-09f,
+6.911429146e-09f, 6.906998282e-09f, 6.902557139e-09f, 6.898105728e-09f, 6.893644064e-09f, 6.889172160e-09f, 6.884690028e-09f, 6.880197684e-09f, 6.875695139e-09f, 6.871182408e-09f,
+6.866659504e-09f, 6.862126440e-09f, 6.857583230e-09f, 6.853029888e-09f, 6.848466426e-09f, 6.843892859e-09f, 6.839309201e-09f, 6.834715463e-09f, 6.830111661e-09f, 6.825497808e-09f,
+6.820873917e-09f, 6.816240001e-09f, 6.811596076e-09f, 6.806942153e-09f, 6.802278247e-09f, 6.797604372e-09f, 6.792920541e-09f, 6.788226768e-09f, 6.783523066e-09f, 6.778809449e-09f,
+6.774085932e-09f, 6.769352526e-09f, 6.764609248e-09f, 6.759856109e-09f, 6.755093124e-09f, 6.750320307e-09f, 6.745537672e-09f, 6.740745231e-09f, 6.735943000e-09f, 6.731130992e-09f,
+6.726309220e-09f, 6.721477699e-09f, 6.716636442e-09f, 6.711785463e-09f, 6.706924777e-09f, 6.702054397e-09f, 6.697174337e-09f, 6.692284610e-09f, 6.687385231e-09f, 6.682476214e-09f,
+6.677557573e-09f, 6.672629322e-09f, 6.667691474e-09f, 6.662744043e-09f, 6.657787044e-09f, 6.652820491e-09f, 6.647844398e-09f, 6.642858778e-09f, 6.637863645e-09f, 6.632859015e-09f,
+6.627844900e-09f, 6.622821315e-09f, 6.617788275e-09f, 6.612745792e-09f, 6.607693881e-09f, 6.602632557e-09f, 6.597561833e-09f, 6.592481723e-09f, 6.587392243e-09f, 6.582293405e-09f,
+6.577185224e-09f, 6.572067714e-09f, 6.566940890e-09f, 6.561804766e-09f, 6.556659355e-09f, 6.551504672e-09f, 6.546340732e-09f, 6.541167548e-09f, 6.535985135e-09f, 6.530793507e-09f,
+6.525592678e-09f, 6.520382663e-09f, 6.515163476e-09f, 6.509935131e-09f, 6.504697643e-09f, 6.499451026e-09f, 6.494195293e-09f, 6.488930461e-09f, 6.483656542e-09f, 6.478373552e-09f,
+6.473081504e-09f, 6.467780414e-09f, 6.462470295e-09f, 6.457151162e-09f, 6.451823029e-09f, 6.446485911e-09f, 6.441139822e-09f, 6.435784777e-09f, 6.430420790e-09f, 6.425047876e-09f,
+6.419666048e-09f, 6.414275322e-09f, 6.408875713e-09f, 6.403467234e-09f, 6.398049899e-09f, 6.392623725e-09f, 6.387188725e-09f, 6.381744913e-09f, 6.376292305e-09f, 6.370830915e-09f,
+6.365360757e-09f, 6.359881846e-09f, 6.354394196e-09f, 6.348897823e-09f, 6.343392741e-09f, 6.337878964e-09f, 6.332356507e-09f, 6.326825385e-09f, 6.321285613e-09f, 6.315737204e-09f,
+6.310180174e-09f, 6.304614538e-09f, 6.299040310e-09f, 6.293457504e-09f, 6.287866136e-09f, 6.282266220e-09f, 6.276657772e-09f, 6.271040804e-09f, 6.265415334e-09f, 6.259781374e-09f,
+6.254138941e-09f, 6.248488048e-09f, 6.242828711e-09f, 6.237160944e-09f, 6.231484762e-09f, 6.225800180e-09f, 6.220107212e-09f, 6.214405875e-09f, 6.208696181e-09f, 6.202978147e-09f,
+6.197251787e-09f, 6.191517116e-09f, 6.185774148e-09f, 6.180022899e-09f, 6.174263384e-09f, 6.168495617e-09f, 6.162719614e-09f, 6.156935389e-09f, 6.151142957e-09f, 6.145342333e-09f,
+6.139533532e-09f, 6.133716569e-09f, 6.127891458e-09f, 6.122058216e-09f, 6.116216857e-09f, 6.110367395e-09f, 6.104509846e-09f, 6.098644225e-09f, 6.092770547e-09f, 6.086888826e-09f,
+6.080999079e-09f, 6.075101319e-09f, 6.069195562e-09f, 6.063281822e-09f, 6.057360116e-09f, 6.051430458e-09f, 6.045492862e-09f, 6.039547345e-09f, 6.033593921e-09f, 6.027632606e-09f,
+6.021663413e-09f, 6.015686359e-09f, 6.009701459e-09f, 6.003708727e-09f, 5.997708179e-09f, 5.991699830e-09f, 5.985683695e-09f, 5.979659790e-09f, 5.973628128e-09f, 5.967588727e-09f,
+5.961541599e-09f, 5.955486762e-09f, 5.949424230e-09f, 5.943354018e-09f, 5.937276141e-09f, 5.931190615e-09f, 5.925097454e-09f, 5.918996675e-09f, 5.912888292e-09f, 5.906772321e-09f,
+5.900648776e-09f, 5.894517673e-09f, 5.888379027e-09f, 5.882232854e-09f, 5.876079168e-09f, 5.869917986e-09f, 5.863749322e-09f, 5.857573191e-09f, 5.851389609e-09f, 5.845198591e-09f,
+5.839000153e-09f, 5.832794309e-09f, 5.826581076e-09f, 5.820360468e-09f, 5.814132500e-09f, 5.807897189e-09f, 5.801654549e-09f, 5.795404596e-09f, 5.789147345e-09f, 5.782882811e-09f,
+5.776611010e-09f, 5.770331958e-09f, 5.764045669e-09f, 5.757752158e-09f, 5.751451443e-09f, 5.745143537e-09f, 5.738828456e-09f, 5.732506215e-09f, 5.726176831e-09f, 5.719840318e-09f,
+5.713496692e-09f, 5.707145968e-09f, 5.700788162e-09f, 5.694423289e-09f, 5.688051365e-09f, 5.681672404e-09f, 5.675286423e-09f, 5.668893437e-09f, 5.662493462e-09f, 5.656086513e-09f,
+5.649672605e-09f, 5.643251753e-09f, 5.636823975e-09f, 5.630389284e-09f, 5.623947697e-09f, 5.617499228e-09f, 5.611043894e-09f, 5.604581710e-09f, 5.598112692e-09f, 5.591636854e-09f,
+5.585154213e-09f, 5.578664785e-09f, 5.572168583e-09f, 5.565665626e-09f, 5.559155927e-09f, 5.552639502e-09f, 5.546116367e-09f, 5.539586538e-09f, 5.533050030e-09f, 5.526506858e-09f,
+5.519957039e-09f, 5.513400587e-09f, 5.506837520e-09f, 5.500267851e-09f, 5.493691596e-09f, 5.487108773e-09f, 5.480519395e-09f, 5.473923478e-09f, 5.467321039e-09f, 5.460712092e-09f,
+5.454096654e-09f, 5.447474740e-09f, 5.440846366e-09f, 5.434211547e-09f, 5.427570299e-09f, 5.420922638e-09f, 5.414268579e-09f, 5.407608139e-09f, 5.400941332e-09f, 5.394268174e-09f,
+5.387588681e-09f, 5.380902870e-09f, 5.374210754e-09f, 5.367512351e-09f, 5.360807676e-09f, 5.354096744e-09f, 5.347379571e-09f, 5.340656174e-09f, 5.333926567e-09f, 5.327190766e-09f,
+5.320448788e-09f, 5.313700648e-09f, 5.306946361e-09f, 5.300185943e-09f, 5.293419411e-09f, 5.286646779e-09f, 5.279868064e-09f, 5.273083281e-09f, 5.266292447e-09f, 5.259495576e-09f,
+5.252692685e-09f, 5.245883789e-09f, 5.239068904e-09f, 5.232248046e-09f, 5.225421231e-09f, 5.218588474e-09f, 5.211749792e-09f, 5.204905200e-09f, 5.198054713e-09f, 5.191198348e-09f,
+5.184336121e-09f, 5.177468046e-09f, 5.170594141e-09f, 5.163714421e-09f, 5.156828901e-09f, 5.149937598e-09f, 5.143040527e-09f, 5.136137704e-09f, 5.129229145e-09f, 5.122314865e-09f,
+5.115394882e-09f, 5.108469210e-09f, 5.101537865e-09f, 5.094600863e-09f, 5.087658220e-09f, 5.080709951e-09f, 5.073756074e-09f, 5.066796603e-09f, 5.059831554e-09f, 5.052860943e-09f,
+5.045884787e-09f, 5.038903100e-09f, 5.031915899e-09f, 5.024923200e-09f, 5.017925018e-09f, 5.010921369e-09f, 5.003912270e-09f, 4.996897736e-09f, 4.989877783e-09f, 4.982852427e-09f,
+4.975821683e-09f, 4.968785568e-09f, 4.961744098e-09f, 4.954697288e-09f, 4.947645155e-09f, 4.940587714e-09f, 4.933524980e-09f, 4.926456971e-09f, 4.919383702e-09f, 4.912305188e-09f,
+4.905221447e-09f, 4.898132492e-09f, 4.891038342e-09f, 4.883939011e-09f, 4.876834515e-09f, 4.869724870e-09f, 4.862610093e-09f, 4.855490199e-09f, 4.848365204e-09f, 4.841235124e-09f,
+4.834099974e-09f, 4.826959772e-09f, 4.819814532e-09f, 4.812664271e-09f, 4.805509005e-09f, 4.798348749e-09f, 4.791183519e-09f, 4.784013332e-09f, 4.776838203e-09f, 4.769658149e-09f,
+4.762473185e-09f, 4.755283327e-09f, 4.748088591e-09f, 4.740888993e-09f, 4.733684549e-09f, 4.726475275e-09f, 4.719261187e-09f, 4.712042301e-09f, 4.704818632e-09f, 4.697590198e-09f,
+4.690357013e-09f, 4.683119093e-09f, 4.675876456e-09f, 4.668629116e-09f, 4.661377089e-09f, 4.654120392e-09f, 4.646859040e-09f, 4.639593050e-09f, 4.632322437e-09f, 4.625047217e-09f,
+4.617767407e-09f, 4.610483022e-09f, 4.603194078e-09f, 4.595900591e-09f, 4.588602578e-09f, 4.581300054e-09f, 4.573993034e-09f, 4.566681536e-09f, 4.559365575e-09f, 4.552045166e-09f,
+4.544720327e-09f, 4.537391073e-09f, 4.530057419e-09f, 4.522719382e-09f, 4.515376979e-09f, 4.508030224e-09f, 4.500679133e-09f, 4.493323724e-09f, 4.485964011e-09f, 4.478600011e-09f,
+4.471231740e-09f, 4.463859213e-09f, 4.456482447e-09f, 4.449101457e-09f, 4.441716260e-09f, 4.434326872e-09f, 4.426933308e-09f, 4.419535584e-09f, 4.412133717e-09f, 4.404727722e-09f,
+4.397317616e-09f, 4.389903414e-09f, 4.382485133e-09f, 4.375062787e-09f, 4.367636394e-09f, 4.360205970e-09f, 4.352771529e-09f, 4.345333089e-09f, 4.337890665e-09f, 4.330444273e-09f,
+4.322993929e-09f, 4.315539649e-09f, 4.308081449e-09f, 4.300619346e-09f, 4.293153354e-09f, 4.285683490e-09f, 4.278209770e-09f, 4.270732210e-09f, 4.263250826e-09f, 4.255765634e-09f,
+4.248276649e-09f, 4.240783888e-09f, 4.233287367e-09f, 4.225787101e-09f, 4.218283107e-09f, 4.210775401e-09f, 4.203263998e-09f, 4.195748915e-09f, 4.188230167e-09f, 4.180707771e-09f,
+4.173181742e-09f, 4.165652096e-09f, 4.158118850e-09f, 4.150582018e-09f, 4.143041618e-09f, 4.135497665e-09f, 4.127950175e-09f, 4.120399165e-09f, 4.112844649e-09f, 4.105286644e-09f,
+4.097725165e-09f, 4.090160230e-09f, 4.082591853e-09f, 4.075020051e-09f, 4.067444840e-09f, 4.059866235e-09f, 4.052284253e-09f, 4.044698909e-09f, 4.037110219e-09f, 4.029518200e-09f,
+4.021922867e-09f, 4.014324236e-09f, 4.006722323e-09f, 3.999117143e-09f, 3.991508714e-09f, 3.983897051e-09f, 3.976282169e-09f, 3.968664085e-09f, 3.961042815e-09f, 3.953418374e-09f,
+3.945790778e-09f, 3.938160044e-09f, 3.930526187e-09f, 3.922889223e-09f, 3.915249167e-09f, 3.907606037e-09f, 3.899959848e-09f, 3.892310615e-09f, 3.884658355e-09f, 3.877003083e-09f,
+3.869344816e-09f, 3.861683569e-09f, 3.854019358e-09f, 3.846352199e-09f, 3.838682108e-09f, 3.831009100e-09f, 3.823333192e-09f, 3.815654400e-09f, 3.807972739e-09f, 3.800288226e-09f,
+3.792600875e-09f, 3.784910704e-09f, 3.777217727e-09f, 3.769521961e-09f, 3.761823421e-09f, 3.754122124e-09f, 3.746418085e-09f, 3.738711320e-09f, 3.731001846e-09f, 3.723289676e-09f,
+3.715574829e-09f, 3.707857319e-09f, 3.700137162e-09f, 3.692414374e-09f, 3.684688971e-09f, 3.676960969e-09f, 3.669230384e-09f, 3.661497231e-09f, 3.653761526e-09f, 3.646023285e-09f,
+3.638282524e-09f, 3.630539258e-09f, 3.622793504e-09f, 3.615045277e-09f, 3.607294593e-09f, 3.599541468e-09f, 3.591785918e-09f, 3.584027958e-09f, 3.576267604e-09f, 3.568504871e-09f,
+3.560739777e-09f, 3.552972336e-09f, 3.545202565e-09f, 3.537430478e-09f, 3.529656092e-09f, 3.521879423e-09f, 3.514100486e-09f, 3.506319297e-09f, 3.498535871e-09f, 3.490750226e-09f,
+3.482962375e-09f, 3.475172336e-09f, 3.467380123e-09f, 3.459585752e-09f, 3.451789240e-09f, 3.443990602e-09f, 3.436189853e-09f, 3.428387010e-09f, 3.420582087e-09f, 3.412775102e-09f,
+3.404966069e-09f, 3.397155004e-09f, 3.389341922e-09f, 3.381526840e-09f, 3.373709774e-09f, 3.365890738e-09f, 3.358069749e-09f, 3.350246822e-09f, 3.342421973e-09f, 3.334595217e-09f,
+3.326766571e-09f, 3.318936050e-09f, 3.311103669e-09f, 3.303269444e-09f, 3.295433391e-09f, 3.287595525e-09f, 3.279755863e-09f, 3.271914419e-09f, 3.264071209e-09f, 3.256226249e-09f,
+3.248379555e-09f, 3.240531142e-09f, 3.232681026e-09f, 3.224829222e-09f, 3.216975746e-09f, 3.209120614e-09f, 3.201263841e-09f, 3.193405442e-09f, 3.185545434e-09f, 3.177683832e-09f,
+3.169820651e-09f, 3.161955907e-09f, 3.154089616e-09f, 3.146221792e-09f, 3.138352453e-09f, 3.130481612e-09f, 3.122609286e-09f, 3.114735491e-09f, 3.106860241e-09f, 3.098983553e-09f,
+3.091105441e-09f, 3.083225922e-09f, 3.075345010e-09f, 3.067462722e-09f, 3.059579073e-09f, 3.051694078e-09f, 3.043807753e-09f, 3.035920113e-09f, 3.028031174e-09f, 3.020140951e-09f,
+3.012249460e-09f, 3.004356716e-09f, 2.996462735e-09f, 2.988567532e-09f, 2.980671122e-09f, 2.972773521e-09f, 2.964874745e-09f, 2.956974808e-09f, 2.949073727e-09f, 2.941171516e-09f,
+2.933268191e-09f, 2.925363768e-09f, 2.917458261e-09f, 2.909551687e-09f, 2.901644060e-09f, 2.893735397e-09f, 2.885825711e-09f, 2.877915020e-09f, 2.870003337e-09f, 2.862090679e-09f,
+2.854177061e-09f, 2.846262498e-09f, 2.838347006e-09f, 2.830430599e-09f, 2.822513294e-09f, 2.814595104e-09f, 2.806676047e-09f, 2.798756137e-09f, 2.790835389e-09f, 2.782913819e-09f,
+2.774991442e-09f, 2.767068273e-09f, 2.759144328e-09f, 2.751219621e-09f, 2.743294169e-09f, 2.735367986e-09f, 2.727441087e-09f, 2.719513489e-09f, 2.711585205e-09f, 2.703656252e-09f,
+2.695726644e-09f, 2.687796397e-09f, 2.679865526e-09f, 2.671934046e-09f, 2.664001972e-09f, 2.656069321e-09f, 2.648136105e-09f, 2.640202342e-09f, 2.632268046e-09f, 2.624333232e-09f,
+2.616397915e-09f, 2.608462112e-09f, 2.600525835e-09f, 2.592589102e-09f, 2.584651927e-09f, 2.576714325e-09f, 2.568776311e-09f, 2.560837900e-09f, 2.552899108e-09f, 2.544959949e-09f,
+2.537020439e-09f, 2.529080593e-09f, 2.521140426e-09f, 2.513199952e-09f, 2.505259188e-09f, 2.497318147e-09f, 2.489376846e-09f, 2.481435298e-09f, 2.473493520e-09f, 2.465551526e-09f,
+2.457609331e-09f, 2.449666950e-09f, 2.441724398e-09f, 2.433781691e-09f, 2.425838842e-09f, 2.417895868e-09f, 2.409952783e-09f, 2.402009602e-09f, 2.394066341e-09f, 2.386123013e-09f,
+2.378179634e-09f, 2.370236219e-09f, 2.362292783e-09f, 2.354349340e-09f, 2.346405907e-09f, 2.338462496e-09f, 2.330519125e-09f, 2.322575806e-09f, 2.314632556e-09f, 2.306689389e-09f,
+2.298746320e-09f, 2.290803364e-09f, 2.282860536e-09f, 2.274917850e-09f, 2.266975322e-09f, 2.259032965e-09f, 2.251090796e-09f, 2.243148829e-09f, 2.235207078e-09f, 2.227265559e-09f,
+2.219324286e-09f, 2.211383274e-09f, 2.203442538e-09f, 2.195502092e-09f, 2.187561952e-09f, 2.179622132e-09f, 2.171682647e-09f, 2.163743511e-09f, 2.155804739e-09f, 2.147866347e-09f,
+2.139928348e-09f, 2.131990757e-09f, 2.124053590e-09f, 2.116116861e-09f, 2.108180583e-09f, 2.100244774e-09f, 2.092309445e-09f, 2.084374614e-09f, 2.076440293e-09f, 2.068506498e-09f,
+2.060573243e-09f, 2.052640543e-09f, 2.044708413e-09f, 2.036776867e-09f, 2.028845920e-09f, 2.020915586e-09f, 2.012985880e-09f, 2.005056816e-09f, 1.997128409e-09f, 1.989200674e-09f,
+1.981273625e-09f, 1.973347277e-09f, 1.965421644e-09f, 1.957496740e-09f, 1.949572581e-09f, 1.941649180e-09f, 1.933726552e-09f, 1.925804712e-09f, 1.917883674e-09f, 1.909963453e-09f,
+1.902044062e-09f, 1.894125517e-09f, 1.886207832e-09f, 1.878291021e-09f, 1.870375099e-09f, 1.862460080e-09f, 1.854545979e-09f, 1.846632809e-09f, 1.838720585e-09f, 1.830809322e-09f,
+1.822899035e-09f, 1.814989736e-09f, 1.807081441e-09f, 1.799174164e-09f, 1.791267920e-09f, 1.783362722e-09f, 1.775458584e-09f, 1.767555523e-09f, 1.759653550e-09f, 1.751752682e-09f,
+1.743852931e-09f, 1.735954313e-09f, 1.728056841e-09f, 1.720160530e-09f, 1.712265394e-09f, 1.704371448e-09f, 1.696478704e-09f, 1.688587179e-09f, 1.680696885e-09f, 1.672807837e-09f,
+1.664920049e-09f, 1.657033536e-09f, 1.649148311e-09f, 1.641264388e-09f, 1.633381783e-09f, 1.625500508e-09f, 1.617620578e-09f, 1.609742007e-09f, 1.601864809e-09f, 1.593988999e-09f,
+1.586114590e-09f, 1.578241596e-09f, 1.570370032e-09f, 1.562499911e-09f, 1.554631247e-09f, 1.546764055e-09f, 1.538898349e-09f, 1.531034142e-09f, 1.523171448e-09f, 1.515310282e-09f,
+1.507450658e-09f, 1.499592589e-09f, 1.491736089e-09f, 1.483881172e-09f, 1.476027853e-09f, 1.468176145e-09f, 1.460326062e-09f, 1.452477618e-09f, 1.444630826e-09f, 1.436785702e-09f,
+1.428942258e-09f, 1.421100508e-09f, 1.413260467e-09f, 1.405422148e-09f, 1.397585564e-09f, 1.389750731e-09f, 1.381917661e-09f, 1.374086368e-09f, 1.366256867e-09f, 1.358429170e-09f,
+1.350603292e-09f, 1.342779247e-09f, 1.334957047e-09f, 1.327136708e-09f, 1.319318242e-09f, 1.311501663e-09f, 1.303686986e-09f, 1.295874223e-09f, 1.288063388e-09f, 1.280254496e-09f,
+1.272447559e-09f, 1.264642592e-09f, 1.256839608e-09f, 1.249038620e-09f, 1.241239642e-09f, 1.233442688e-09f, 1.225647772e-09f, 1.217854907e-09f, 1.210064106e-09f, 1.202275383e-09f,
+1.194488752e-09f, 1.186704226e-09f, 1.178921819e-09f, 1.171141544e-09f, 1.163363414e-09f, 1.155587444e-09f, 1.147813647e-09f, 1.140042035e-09f, 1.132272624e-09f, 1.124505425e-09f,
+1.116740453e-09f, 1.108977721e-09f, 1.101217242e-09f, 1.093459030e-09f, 1.085703098e-09f, 1.077949459e-09f, 1.070198128e-09f, 1.062449116e-09f, 1.054702438e-09f, 1.046958107e-09f,
+1.039216136e-09f, 1.031476539e-09f, 1.023739329e-09f, 1.016004518e-09f, 1.008272121e-09f, 1.000542151e-09f, 9.928146205e-10f, 9.850895432e-10f, 9.773669322e-10f, 9.696468009e-10f,
+9.619291623e-10f, 9.542140297e-10f, 9.465014162e-10f, 9.387913351e-10f, 9.310837995e-10f, 9.233788225e-10f, 9.156764173e-10f, 9.079765970e-10f, 9.002793747e-10f, 8.925847634e-10f,
+8.848927764e-10f, 8.772034267e-10f, 8.695167273e-10f, 8.618326913e-10f, 8.541513317e-10f, 8.464726616e-10f, 8.387966939e-10f, 8.311234417e-10f, 8.234529180e-10f, 8.157851358e-10f,
+8.081201079e-10f, 8.004578475e-10f, 7.927983673e-10f, 7.851416804e-10f, 7.774877997e-10f, 7.698367381e-10f, 7.621885084e-10f, 7.545431236e-10f, 7.469005965e-10f, 7.392609400e-10f,
+7.316241670e-10f, 7.239902902e-10f, 7.163593226e-10f, 7.087312768e-10f, 7.011061657e-10f, 6.934840022e-10f, 6.858647989e-10f, 6.782485686e-10f, 6.706353241e-10f, 6.630250781e-10f,
+6.554178433e-10f, 6.478136325e-10f, 6.402124583e-10f, 6.326143335e-10f, 6.250192706e-10f, 6.174272824e-10f, 6.098383816e-10f, 6.022525807e-10f, 5.946698923e-10f, 5.870903292e-10f,
+5.795139038e-10f, 5.719406288e-10f, 5.643705168e-10f, 5.568035802e-10f, 5.492398317e-10f, 5.416792838e-10f, 5.341219491e-10f, 5.265678399e-10f, 5.190169688e-10f, 5.114693484e-10f,
+5.039249910e-10f, 4.963839092e-10f, 4.888461154e-10f, 4.813116219e-10f, 4.737804413e-10f, 4.662525859e-10f, 4.587280682e-10f, 4.512069005e-10f, 4.436890952e-10f, 4.361746646e-10f,
+4.286636211e-10f, 4.211559771e-10f, 4.136517447e-10f, 4.061509364e-10f, 3.986535644e-10f, 3.911596410e-10f, 3.836691785e-10f, 3.761821892e-10f, 3.686986851e-10f, 3.612186787e-10f,
+3.537421821e-10f, 3.462692074e-10f, 3.387997670e-10f, 3.313338729e-10f, 3.238715373e-10f, 3.164127723e-10f, 3.089575902e-10f, 3.015060030e-10f, 2.940580228e-10f, 2.866136617e-10f,
+2.791729318e-10f, 2.717358452e-10f, 2.643024139e-10f, 2.568726500e-10f, 2.494465654e-10f, 2.420241722e-10f, 2.346054824e-10f, 2.271905080e-10f, 2.197792610e-10f, 2.123717532e-10f,
+2.049679968e-10f, 1.975680035e-10f, 1.901717853e-10f, 1.827793541e-10f, 1.753907219e-10f, 1.680059004e-10f, 1.606249016e-10f, 1.532477373e-10f, 1.458744193e-10f, 1.385049595e-10f,
+1.311393697e-10f, 1.237776616e-10f, 1.164198471e-10f, 1.090659379e-10f, 1.017159458e-10f, 9.436988248e-11f, 8.702775973e-11f, 7.968958925e-11f, 7.235538272e-11f, 6.502515185e-11f,
+5.769890829e-11f, 5.037666372e-11f, 4.305842978e-11f, 3.574421809e-11f, 2.843404027e-11f, 2.112790794e-11f, 1.382583267e-11f, 6.527826049e-12f, -7.661003671e-13f, -8.055935030e-12f,
+-1.534166640e-11f, -2.262328297e-11f, -2.990077322e-11f, -3.717412567e-11f, -4.444332883e-11f, -5.170837125e-11f, -5.896924147e-11f, -6.622592805e-11f, -7.347841958e-11f, -8.072670465e-11f,
+-8.797077187e-11f, -9.521060984e-11f, -1.024462072e-10f, -1.096775526e-10f, -1.169046348e-10f, -1.241274423e-10f, -1.313459639e-10f, -1.385601883e-10f, -1.457701042e-10f, -1.529757004e-10f,
+-1.601769655e-10f, -1.673738884e-10f, -1.745664578e-10f, -1.817546625e-10f, -1.889384914e-10f, -1.961179332e-10f, -2.032929768e-10f, -2.104636110e-10f, -2.176298248e-10f, -2.247916069e-10f,
+-2.319489462e-10f, -2.391018318e-10f, -2.462502524e-10f, -2.533941970e-10f, -2.605336547e-10f, -2.676686142e-10f, -2.747990647e-10f, -2.819249951e-10f, -2.890463945e-10f, -2.961632517e-10f,
+-3.032755560e-10f, -3.103832963e-10f, -3.174864617e-10f, -3.245850413e-10f, -3.316790241e-10f, -3.387683993e-10f, -3.458531561e-10f, -3.529332835e-10f, -3.600087707e-10f, -3.670796069e-10f,
+-3.741457813e-10f, -3.812072830e-10f, -3.882641012e-10f, -3.953162253e-10f, -4.023636444e-10f, -4.094063478e-10f, -4.164443248e-10f, -4.234775647e-10f, -4.305060567e-10f, -4.375297901e-10f,
+-4.445487544e-10f, -4.515629388e-10f, -4.585723328e-10f, -4.655769256e-10f, -4.725767068e-10f, -4.795716656e-10f, -4.865617915e-10f, -4.935470740e-10f, -5.005275024e-10f, -5.075030663e-10f,
+-5.144737552e-10f, -5.214395585e-10f, -5.284004657e-10f, -5.353564664e-10f, -5.423075502e-10f, -5.492537065e-10f, -5.561949249e-10f, -5.631311951e-10f, -5.700625066e-10f, -5.769888490e-10f,
+-5.839102120e-10f, -5.908265853e-10f, -5.977379584e-10f, -6.046443211e-10f, -6.115456630e-10f, -6.184419739e-10f, -6.253332434e-10f, -6.322194614e-10f, -6.391006176e-10f, -6.459767017e-10f,
+-6.528477035e-10f, -6.597136128e-10f, -6.665744194e-10f, -6.734301133e-10f, -6.802806841e-10f, -6.871261218e-10f, -6.939664162e-10f, -7.008015572e-10f, -7.076315348e-10f, -7.144563388e-10f,
+-7.212759593e-10f, -7.280903860e-10f, -7.348996091e-10f, -7.417036185e-10f, -7.485024041e-10f, -7.552959561e-10f, -7.620842644e-10f, -7.688673190e-10f, -7.756451101e-10f, -7.824176277e-10f,
+-7.891848619e-10f, -7.959468028e-10f, -8.027034405e-10f, -8.094547652e-10f, -8.162007670e-10f, -8.229414361e-10f, -8.296767626e-10f, -8.364067368e-10f, -8.431313489e-10f, -8.498505891e-10f,
+-8.565644476e-10f, -8.632729147e-10f, -8.699759808e-10f, -8.766736360e-10f, -8.833658707e-10f, -8.900526753e-10f, -8.967340400e-10f, -9.034099552e-10f, -9.100804112e-10f, -9.167453986e-10f,
+-9.234049076e-10f, -9.300589287e-10f, -9.367074523e-10f, -9.433504689e-10f, -9.499879690e-10f, -9.566199429e-10f, -9.632463813e-10f, -9.698672746e-10f, -9.764826133e-10f, -9.830923880e-10f,
+-9.896965893e-10f, -9.962952078e-10f, -1.002888234e-09f, -1.009475658e-09f, -1.016057472e-09f, -1.022633665e-09f, -1.029204228e-09f, -1.035769152e-09f, -1.042328428e-09f, -1.048882046e-09f,
+-1.055429997e-09f, -1.061972272e-09f, -1.068508862e-09f, -1.075039757e-09f, -1.081564947e-09f, -1.088084425e-09f, -1.094598180e-09f, -1.101106204e-09f, -1.107608487e-09f, -1.114105021e-09f,
+-1.120595795e-09f, -1.127080801e-09f, -1.133560031e-09f, -1.140033474e-09f, -1.146501122e-09f, -1.152962966e-09f, -1.159418996e-09f, -1.165869204e-09f, -1.172313581e-09f, -1.178752117e-09f,
+-1.185184804e-09f, -1.191611633e-09f, -1.198032595e-09f, -1.204447681e-09f, -1.210856882e-09f, -1.217260189e-09f, -1.223657594e-09f, -1.230049087e-09f, -1.236434660e-09f, -1.242814303e-09f,
+-1.249188008e-09f, -1.255555767e-09f, -1.261917570e-09f, -1.268273409e-09f, -1.274623275e-09f, -1.280967160e-09f, -1.287305054e-09f, -1.293636948e-09f, -1.299962835e-09f, -1.306282706e-09f,
+-1.312596551e-09f, -1.318904363e-09f, -1.325206133e-09f, -1.331501851e-09f, -1.337791510e-09f, -1.344075102e-09f, -1.350352616e-09f, -1.356624046e-09f, -1.362889382e-09f, -1.369148616e-09f,
+-1.375401739e-09f, -1.381648744e-09f, -1.387889621e-09f, -1.394124362e-09f, -1.400352959e-09f, -1.406575403e-09f, -1.412791687e-09f, -1.419001800e-09f, -1.425205737e-09f, -1.431403487e-09f,
+-1.437595042e-09f, -1.443780395e-09f, -1.449959538e-09f, -1.456132461e-09f, -1.462299156e-09f, -1.468459616e-09f, -1.474613832e-09f, -1.480761796e-09f, -1.486903500e-09f, -1.493038935e-09f,
+-1.499168094e-09f, -1.505290968e-09f, -1.511407549e-09f, -1.517517830e-09f, -1.523621801e-09f, -1.529719456e-09f, -1.535810785e-09f, -1.541895782e-09f, -1.547974437e-09f, -1.554046743e-09f,
+-1.560112692e-09f, -1.566172277e-09f, -1.572225488e-09f, -1.578272318e-09f, -1.584312759e-09f, -1.590346804e-09f, -1.596374444e-09f, -1.602395672e-09f, -1.608410480e-09f, -1.614418859e-09f,
+-1.620420802e-09f, -1.626416302e-09f, -1.632405350e-09f, -1.638387939e-09f, -1.644364061e-09f, -1.650333708e-09f, -1.656296873e-09f, -1.662253547e-09f, -1.668203724e-09f, -1.674147396e-09f,
+-1.680084554e-09f, -1.686015191e-09f, -1.691939300e-09f, -1.697856874e-09f, -1.703767903e-09f, -1.709672382e-09f, -1.715570302e-09f, -1.721461655e-09f, -1.727346436e-09f, -1.733224634e-09f,
+-1.739096245e-09f, -1.744961259e-09f, -1.750819670e-09f, -1.756671469e-09f, -1.762516651e-09f, -1.768355206e-09f, -1.774187129e-09f, -1.780012411e-09f, -1.785831045e-09f, -1.791643024e-09f,
+-1.797448341e-09f, -1.803246987e-09f, -1.809038957e-09f, -1.814824243e-09f, -1.820602837e-09f, -1.826374732e-09f, -1.832139921e-09f, -1.837898397e-09f, -1.843650153e-09f, -1.849395181e-09f,
+-1.855133475e-09f, -1.860865027e-09f, -1.866589830e-09f, -1.872307878e-09f, -1.878019162e-09f, -1.883723676e-09f, -1.889421413e-09f, -1.895112366e-09f, -1.900796528e-09f, -1.906473892e-09f,
+-1.912144451e-09f, -1.917808198e-09f, -1.923465126e-09f, -1.929115228e-09f, -1.934758497e-09f, -1.940394927e-09f, -1.946024510e-09f, -1.951647240e-09f, -1.957263109e-09f, -1.962872112e-09f,
+-1.968474241e-09f, -1.974069489e-09f, -1.979657850e-09f, -1.985239317e-09f, -1.990813883e-09f, -1.996381541e-09f, -2.001942285e-09f, -2.007496109e-09f, -2.013043004e-09f, -2.018582966e-09f,
+-2.024115987e-09f, -2.029642060e-09f, -2.035161179e-09f, -2.040673338e-09f, -2.046178529e-09f, -2.051676747e-09f, -2.057167985e-09f, -2.062652235e-09f, -2.068129493e-09f, -2.073599751e-09f,
+-2.079063002e-09f, -2.084519241e-09f, -2.089968461e-09f, -2.095410656e-09f, -2.100845819e-09f, -2.106273943e-09f, -2.111695023e-09f, -2.117109052e-09f, -2.122516024e-09f, -2.127915933e-09f,
+-2.133308771e-09f, -2.138694534e-09f, -2.144073214e-09f, -2.149444806e-09f, -2.154809303e-09f, -2.160166699e-09f, -2.165516988e-09f, -2.170860163e-09f, -2.176196220e-09f, -2.181525150e-09f,
+-2.186846949e-09f, -2.192161610e-09f, -2.197469128e-09f, -2.202769495e-09f, -2.208062706e-09f, -2.213348756e-09f, -2.218627637e-09f, -2.223899345e-09f, -2.229163872e-09f, -2.234421214e-09f,
+-2.239671363e-09f, -2.244914315e-09f, -2.250150064e-09f, -2.255378602e-09f, -2.260599926e-09f, -2.265814027e-09f, -2.271020902e-09f, -2.276220544e-09f, -2.281412947e-09f, -2.286598106e-09f,
+-2.291776014e-09f, -2.296946666e-09f, -2.302110056e-09f, -2.307266179e-09f, -2.312415029e-09f, -2.317556599e-09f, -2.322690886e-09f, -2.327817882e-09f, -2.332937582e-09f, -2.338049980e-09f,
+-2.343155072e-09f, -2.348252851e-09f, -2.353343312e-09f, -2.358426449e-09f, -2.363502257e-09f, -2.368570730e-09f, -2.373631863e-09f, -2.378685650e-09f, -2.383732086e-09f, -2.388771166e-09f,
+-2.393802883e-09f, -2.398827233e-09f, -2.403844210e-09f, -2.408853809e-09f, -2.413856025e-09f, -2.418850851e-09f, -2.423838283e-09f, -2.428818316e-09f, -2.433790944e-09f, -2.438756162e-09f,
+-2.443713965e-09f, -2.448664347e-09f, -2.453607303e-09f, -2.458542829e-09f, -2.463470918e-09f, -2.468391566e-09f, -2.473304768e-09f, -2.478210518e-09f, -2.483108811e-09f, -2.487999643e-09f,
+-2.492883008e-09f, -2.497758901e-09f, -2.502627317e-09f, -2.507488251e-09f, -2.512341698e-09f, -2.517187653e-09f, -2.522026112e-09f, -2.526857068e-09f, -2.531680518e-09f, -2.536496456e-09f,
+-2.541304877e-09f, -2.546105777e-09f, -2.550899150e-09f, -2.555684992e-09f, -2.560463299e-09f, -2.565234064e-09f, -2.569997283e-09f, -2.574752953e-09f, -2.579501066e-09f, -2.584241620e-09f,
+-2.588974610e-09f, -2.593700030e-09f, -2.598417876e-09f, -2.603128143e-09f, -2.607830826e-09f, -2.612525922e-09f, -2.617213425e-09f, -2.621893330e-09f, -2.626565634e-09f, -2.631230331e-09f,
+-2.635887418e-09f, -2.640536888e-09f, -2.645178739e-09f, -2.649812965e-09f, -2.654439562e-09f, -2.659058526e-09f, -2.663669851e-09f, -2.668273535e-09f, -2.672869571e-09f, -2.677457956e-09f,
+-2.682038686e-09f, -2.686611755e-09f, -2.691177161e-09f, -2.695734897e-09f, -2.700284961e-09f, -2.704827348e-09f, -2.709362053e-09f, -2.713889072e-09f, -2.718408401e-09f, -2.722920036e-09f,
+-2.727423972e-09f, -2.731920206e-09f, -2.736408734e-09f, -2.740889550e-09f, -2.745362651e-09f, -2.749828033e-09f, -2.754285691e-09f, -2.758735622e-09f, -2.763177822e-09f, -2.767612286e-09f,
+-2.772039011e-09f, -2.776457992e-09f, -2.780869225e-09f, -2.785272707e-09f, -2.789668433e-09f, -2.794056400e-09f, -2.798436604e-09f, -2.802809040e-09f, -2.807173705e-09f, -2.811530595e-09f,
+-2.815879706e-09f, -2.820221034e-09f, -2.824554576e-09f, -2.828880327e-09f, -2.833198284e-09f, -2.837508443e-09f, -2.841810800e-09f, -2.846105352e-09f, -2.850392095e-09f, -2.854671024e-09f,
+-2.858942138e-09f, -2.863205430e-09f, -2.867460900e-09f, -2.871708541e-09f, -2.875948351e-09f, -2.880180327e-09f, -2.884404464e-09f, -2.888620760e-09f, -2.892829209e-09f, -2.897029810e-09f,
+-2.901222559e-09f, -2.905407451e-09f, -2.909584484e-09f, -2.913753654e-09f, -2.917914958e-09f, -2.922068392e-09f, -2.926213953e-09f, -2.930351637e-09f, -2.934481441e-09f, -2.938603362e-09f,
+-2.942717396e-09f, -2.946823540e-09f, -2.950921791e-09f, -2.955012145e-09f, -2.959094599e-09f, -2.963169151e-09f, -2.967235796e-09f, -2.971294531e-09f, -2.975345354e-09f, -2.979388260e-09f,
+-2.983423248e-09f, -2.987450313e-09f, -2.991469453e-09f, -2.995480664e-09f, -2.999483944e-09f, -3.003479289e-09f, -3.007466696e-09f, -3.011446162e-09f, -3.015417685e-09f, -3.019381261e-09f,
+-3.023336886e-09f, -3.027284560e-09f, -3.031224277e-09f, -3.035156035e-09f, -3.039079832e-09f, -3.042995664e-09f, -3.046903529e-09f, -3.050803424e-09f, -3.054695345e-09f, -3.058579290e-09f,
+-3.062455257e-09f, -3.066323242e-09f, -3.070183242e-09f, -3.074035255e-09f, -3.077879278e-09f, -3.081715309e-09f, -3.085543344e-09f, -3.089363381e-09f, -3.093175417e-09f, -3.096979449e-09f,
+-3.100775476e-09f, -3.104563494e-09f, -3.108343500e-09f, -3.112115492e-09f, -3.115879468e-09f, -3.119635425e-09f, -3.123383360e-09f, -3.127123270e-09f, -3.130855154e-09f, -3.134579009e-09f,
+-3.138294832e-09f, -3.142002621e-09f, -3.145702374e-09f, -3.149394087e-09f, -3.153077759e-09f, -3.156753387e-09f, -3.160420969e-09f, -3.164080502e-09f, -3.167731984e-09f, -3.171375414e-09f,
+-3.175010787e-09f, -3.178638103e-09f, -3.182257358e-09f, -3.185868552e-09f, -3.189471680e-09f, -3.193066742e-09f, -3.196653735e-09f, -3.200232656e-09f, -3.203803505e-09f, -3.207366277e-09f,
+-3.210920972e-09f, -3.214467587e-09f, -3.218006120e-09f, -3.221536569e-09f, -3.225058933e-09f, -3.228573207e-09f, -3.232079392e-09f, -3.235577485e-09f, -3.239067483e-09f, -3.242549386e-09f,
+-3.246023190e-09f, -3.249488894e-09f, -3.252946496e-09f, -3.256395994e-09f, -3.259837386e-09f, -3.263270671e-09f, -3.266695846e-09f, -3.270112910e-09f, -3.273521860e-09f, -3.276922695e-09f,
+-3.280315414e-09f, -3.283700013e-09f, -3.287076493e-09f, -3.290444850e-09f, -3.293805083e-09f, -3.297157191e-09f, -3.300501171e-09f, -3.303837023e-09f, -3.307164743e-09f, -3.310484332e-09f,
+-3.313795786e-09f, -3.317099105e-09f, -3.320394287e-09f, -3.323681331e-09f, -3.326960234e-09f, -3.330230995e-09f, -3.333493613e-09f, -3.336748086e-09f, -3.339994412e-09f, -3.343232591e-09f,
+-3.346462621e-09f, -3.349684500e-09f, -3.352898226e-09f, -3.356103800e-09f, -3.359301218e-09f, -3.362490480e-09f, -3.365671584e-09f, -3.368844530e-09f, -3.372009314e-09f, -3.375165938e-09f,
+-3.378314398e-09f, -3.381454694e-09f, -3.384586825e-09f, -3.387710789e-09f, -3.390826585e-09f, -3.393934212e-09f, -3.397033668e-09f, -3.400124953e-09f, -3.403208066e-09f, -3.406283004e-09f,
+-3.409349768e-09f, -3.412408355e-09f, -3.415458766e-09f, -3.418500998e-09f, -3.421535051e-09f, -3.424560924e-09f, -3.427578615e-09f, -3.430588124e-09f, -3.433589450e-09f, -3.436582591e-09f,
+-3.439567547e-09f, -3.442544317e-09f, -3.445512900e-09f, -3.448473295e-09f, -3.451425501e-09f, -3.454369517e-09f, -3.457305342e-09f, -3.460232976e-09f, -3.463152418e-09f, -3.466063666e-09f,
+-3.468966721e-09f, -3.471861581e-09f, -3.474748245e-09f, -3.477626713e-09f, -3.480496985e-09f, -3.483359058e-09f, -3.486212934e-09f, -3.489058610e-09f, -3.491896087e-09f, -3.494725363e-09f,
+-3.497546439e-09f, -3.500359313e-09f, -3.503163985e-09f, -3.505960454e-09f, -3.508748720e-09f, -3.511528782e-09f, -3.514300640e-09f, -3.517064293e-09f, -3.519819741e-09f, -3.522566982e-09f,
+-3.525306018e-09f, -3.528036847e-09f, -3.530759469e-09f, -3.533473883e-09f, -3.536180089e-09f, -3.538878087e-09f, -3.541567876e-09f, -3.544249456e-09f, -3.546922827e-09f, -3.549587988e-09f,
+-3.552244939e-09f, -3.554893680e-09f, -3.557534211e-09f, -3.560166530e-09f, -3.562790639e-09f, -3.565406536e-09f, -3.568014222e-09f, -3.570613697e-09f, -3.573204959e-09f, -3.575788010e-09f,
+-3.578362849e-09f, -3.580929475e-09f, -3.583487889e-09f, -3.586038091e-09f, -3.588580081e-09f, -3.591113858e-09f, -3.593639422e-09f, -3.596156774e-09f, -3.598665913e-09f, -3.601166840e-09f,
+-3.603659555e-09f, -3.606144056e-09f, -3.608620346e-09f, -3.611088423e-09f, -3.613548288e-09f, -3.615999941e-09f, -3.618443382e-09f, -3.620878611e-09f, -3.623305628e-09f, -3.625724434e-09f,
+-3.628135028e-09f, -3.630537412e-09f, -3.632931584e-09f, -3.635317546e-09f, -3.637695297e-09f, -3.640064839e-09f, -3.642426170e-09f, -3.644779292e-09f, -3.647124204e-09f, -3.649460908e-09f,
+-3.651789403e-09f, -3.654109690e-09f, -3.656421770e-09f, -3.658725641e-09f, -3.661021306e-09f, -3.663308764e-09f, -3.665588017e-09f, -3.667859063e-09f, -3.670121904e-09f, -3.672376541e-09f,
+-3.674622973e-09f, -3.676861202e-09f, -3.679091228e-09f, -3.681313051e-09f, -3.683526672e-09f, -3.685732092e-09f, -3.687929311e-09f, -3.690118330e-09f, -3.692299150e-09f, -3.694471770e-09f,
+-3.696636192e-09f, -3.698792417e-09f, -3.700940445e-09f, -3.703080277e-09f, -3.705211914e-09f, -3.707335356e-09f, -3.709450604e-09f, -3.711557659e-09f, -3.713656522e-09f, -3.715747193e-09f,
+-3.717829673e-09f, -3.719903964e-09f, -3.721970066e-09f, -3.724027980e-09f, -3.726077707e-09f, -3.728119247e-09f, -3.730152602e-09f, -3.732177772e-09f, -3.734194760e-09f, -3.736203564e-09f,
+-3.738204187e-09f, -3.740196630e-09f, -3.742180893e-09f, -3.744156977e-09f, -3.746124885e-09f, -3.748084615e-09f, -3.750036171e-09f, -3.751979552e-09f, -3.753914760e-09f, -3.755841797e-09f,
+-3.757760662e-09f, -3.759671358e-09f, -3.761573885e-09f, -3.763468245e-09f, -3.765354439e-09f, -3.767232468e-09f, -3.769102333e-09f, -3.770964035e-09f, -3.772817577e-09f, -3.774662959e-09f,
+-3.776500182e-09f, -3.778329248e-09f, -3.780150158e-09f, -3.781962913e-09f, -3.783767515e-09f, -3.785563965e-09f, -3.787352264e-09f, -3.789132415e-09f, -3.790904418e-09f, -3.792668274e-09f,
+-3.794423986e-09f, -3.796171554e-09f, -3.797910981e-09f, -3.799642267e-09f, -3.801365414e-09f, -3.803080424e-09f, -3.804787298e-09f, -3.806486037e-09f, -3.808176645e-09f, -3.809859120e-09f,
+-3.811533467e-09f, -3.813199685e-09f, -3.814857778e-09f, -3.816507745e-09f, -3.818149590e-09f, -3.819783314e-09f, -3.821408917e-09f, -3.823026403e-09f, -3.824635773e-09f, -3.826237028e-09f,
+-3.827830171e-09f, -3.829415203e-09f, -3.830992125e-09f, -3.832560941e-09f, -3.834121650e-09f, -3.835674256e-09f, -3.837218761e-09f, -3.838755165e-09f, -3.840283471e-09f, -3.841803681e-09f,
+-3.843315796e-09f, -3.844819819e-09f, -3.846315751e-09f, -3.847803595e-09f, -3.849283353e-09f, -3.850755025e-09f, -3.852218615e-09f, -3.853674125e-09f, -3.855121556e-09f, -3.856560910e-09f,
+-3.857992190e-09f, -3.859415397e-09f, -3.860830534e-09f, -3.862237603e-09f, -3.863636605e-09f, -3.865027543e-09f, -3.866410420e-09f, -3.867785237e-09f, -3.869151996e-09f, -3.870510700e-09f,
+-3.871861350e-09f, -3.873203950e-09f, -3.874538500e-09f, -3.875865005e-09f, -3.877183465e-09f, -3.878493882e-09f, -3.879796261e-09f, -3.881090602e-09f, -3.882376907e-09f, -3.883655180e-09f,
+-3.884925423e-09f, -3.886187637e-09f, -3.887441826e-09f, -3.888687991e-09f, -3.889926136e-09f, -3.891156262e-09f, -3.892378372e-09f, -3.893592468e-09f, -3.894798554e-09f, -3.895996630e-09f,
+-3.897186701e-09f, -3.898368767e-09f, -3.899542833e-09f, -3.900708900e-09f, -3.901866971e-09f, -3.903017048e-09f, -3.904159134e-09f, -3.905293233e-09f, -3.906419345e-09f, -3.907537474e-09f,
+-3.908647623e-09f, -3.909749793e-09f, -3.910843989e-09f, -3.911930212e-09f, -3.913008465e-09f, -3.914078752e-09f, -3.915141073e-09f, -3.916195434e-09f, -3.917241835e-09f, -3.918280280e-09f,
+-3.919310772e-09f, -3.920333313e-09f, -3.921347906e-09f, -3.922354554e-09f, -3.923353261e-09f, -3.924344028e-09f, -3.925326858e-09f, -3.926301755e-09f, -3.927268721e-09f, -3.928227760e-09f,
+-3.929178874e-09f, -3.930122066e-09f, -3.931057339e-09f, -3.931984696e-09f, -3.932904139e-09f, -3.933815673e-09f, -3.934719300e-09f, -3.935615023e-09f, -3.936502845e-09f, -3.937382769e-09f,
+-3.938254798e-09f, -3.939118935e-09f, -3.939975184e-09f, -3.940823546e-09f, -3.941664027e-09f, -3.942496628e-09f, -3.943321352e-09f, -3.944138204e-09f, -3.944947186e-09f, -3.945748301e-09f,
+-3.946541552e-09f, -3.947326943e-09f, -3.948104477e-09f, -3.948874158e-09f, -3.949635987e-09f, -3.950389969e-09f, -3.951136107e-09f, -3.951874405e-09f, -3.952604865e-09f, -3.953327490e-09f,
+-3.954042285e-09f, -3.954749253e-09f, -3.955448396e-09f, -3.956139719e-09f, -3.956823224e-09f, -3.957498915e-09f, -3.958166796e-09f, -3.958826870e-09f, -3.959479140e-09f, -3.960123610e-09f,
+-3.960760283e-09f, -3.961389163e-09f, -3.962010253e-09f, -3.962623557e-09f, -3.963229078e-09f, -3.963826820e-09f, -3.964416786e-09f, -3.964998980e-09f, -3.965573406e-09f, -3.966140067e-09f,
+-3.966698967e-09f, -3.967250109e-09f, -3.967793497e-09f, -3.968329134e-09f, -3.968857025e-09f, -3.969377173e-09f, -3.969889581e-09f, -3.970394254e-09f, -3.970891195e-09f, -3.971380407e-09f,
+-3.971861895e-09f, -3.972335662e-09f, -3.972801713e-09f, -3.973260050e-09f, -3.973710677e-09f, -3.974153599e-09f, -3.974588819e-09f, -3.975016341e-09f, -3.975436169e-09f, -3.975848307e-09f,
+-3.976252758e-09f, -3.976649527e-09f, -3.977038617e-09f, -3.977420033e-09f, -3.977793777e-09f, -3.978159855e-09f, -3.978518270e-09f, -3.978869026e-09f, -3.979212127e-09f, -3.979547577e-09f,
+-3.979875380e-09f, -3.980195540e-09f, -3.980508061e-09f, -3.980812947e-09f, -3.981110202e-09f, -3.981399830e-09f, -3.981681836e-09f, -3.981956223e-09f, -3.982222995e-09f, -3.982482157e-09f,
+-3.982733713e-09f, -3.982977666e-09f, -3.983214022e-09f, -3.983442784e-09f, -3.983663956e-09f, -3.983877542e-09f, -3.984083547e-09f, -3.984281976e-09f, -3.984472831e-09f, -3.984656118e-09f,
+-3.984831840e-09f, -3.985000003e-09f, -3.985160610e-09f, -3.985313665e-09f, -3.985459173e-09f, -3.985597138e-09f, -3.985727565e-09f, -3.985850457e-09f, -3.985965820e-09f, -3.986073657e-09f,
+-3.986173973e-09f, -3.986266773e-09f, -3.986352060e-09f, -3.986429839e-09f, -3.986500115e-09f, -3.986562892e-09f, -3.986618174e-09f, -3.986665966e-09f, -3.986706273e-09f, -3.986739099e-09f,
+-3.986764448e-09f, -3.986782324e-09f, -3.986792734e-09f, -3.986795680e-09f, -3.986791168e-09f, -3.986779202e-09f, -3.986759787e-09f, -3.986732927e-09f, -3.986698627e-09f, -3.986656891e-09f,
+-3.986607725e-09f, -3.986551132e-09f, -3.986487118e-09f, -3.986415686e-09f, -3.986336843e-09f, -3.986250592e-09f, -3.986156938e-09f, -3.986055886e-09f, -3.985947441e-09f, -3.985831606e-09f,
+-3.985708388e-09f, -3.985577791e-09f, -3.985439819e-09f, -3.985294478e-09f, -3.985141772e-09f, -3.984981706e-09f, -3.984814285e-09f, -3.984639513e-09f, -3.984457396e-09f, -3.984267938e-09f,
+-3.984071144e-09f, -3.983867020e-09f, -3.983655569e-09f, -3.983436797e-09f, -3.983210709e-09f, -3.982977310e-09f, -3.982736604e-09f, -3.982488597e-09f, -3.982233294e-09f, -3.981970699e-09f,
+-3.981700818e-09f, -3.981423655e-09f, -3.981139215e-09f, -3.980847504e-09f, -3.980548527e-09f, -3.980242288e-09f, -3.979928793e-09f, -3.979608047e-09f, -3.979280055e-09f, -3.978944821e-09f,
+-3.978602352e-09f, -3.978252651e-09f, -3.977895725e-09f, -3.977531578e-09f, -3.977160216e-09f, -3.976781643e-09f, -3.976395865e-09f, -3.976002887e-09f, -3.975602715e-09f, -3.975195353e-09f,
+-3.974780806e-09f, -3.974359080e-09f, -3.973930181e-09f, -3.973494113e-09f, -3.973050881e-09f, -3.972600491e-09f, -3.972142949e-09f, -3.971678259e-09f, -3.971206426e-09f, -3.970727457e-09f,
+-3.970241356e-09f, -3.969748129e-09f, -3.969247781e-09f, -3.968740317e-09f, -3.968225743e-09f, -3.967704065e-09f, -3.967175287e-09f, -3.966639415e-09f, -3.966096454e-09f, -3.965546410e-09f,
+-3.964989289e-09f, -3.964425095e-09f, -3.963853835e-09f, -3.963275513e-09f, -3.962690135e-09f, -3.962097707e-09f, -3.961498234e-09f, -3.960891722e-09f, -3.960278176e-09f, -3.959657602e-09f,
+-3.959030005e-09f, -3.958395390e-09f, -3.957753764e-09f, -3.957105133e-09f, -3.956449500e-09f, -3.955786873e-09f, -3.955117257e-09f, -3.954440657e-09f, -3.953757079e-09f, -3.953066529e-09f,
+-3.952369012e-09f, -3.951664534e-09f, -3.950953101e-09f, -3.950234718e-09f, -3.949509391e-09f, -3.948777126e-09f, -3.948037928e-09f, -3.947291804e-09f, -3.946538759e-09f, -3.945778798e-09f,
+-3.945011928e-09f, -3.944238154e-09f, -3.943457482e-09f, -3.942669918e-09f, -3.941875468e-09f, -3.941074137e-09f, -3.940265931e-09f, -3.939450856e-09f, -3.938628918e-09f, -3.937800123e-09f,
+-3.936964477e-09f, -3.936121985e-09f, -3.935272654e-09f, -3.934416488e-09f, -3.933553496e-09f, -3.932683681e-09f, -3.931807050e-09f, -3.930923609e-09f, -3.930033365e-09f, -3.929136322e-09f,
+-3.928232487e-09f, -3.927321865e-09f, -3.926404464e-09f, -3.925480288e-09f, -3.924549345e-09f, -3.923611639e-09f, -3.922667177e-09f, -3.921715965e-09f, -3.920758008e-09f, -3.919793314e-09f,
+-3.918821888e-09f, -3.917843736e-09f, -3.916858865e-09f, -3.915867279e-09f, -3.914868987e-09f, -3.913863992e-09f, -3.912852303e-09f, -3.911833924e-09f, -3.910808862e-09f, -3.909777124e-09f,
+-3.908738714e-09f, -3.907693640e-09f, -3.906641908e-09f, -3.905583524e-09f, -3.904518493e-09f, -3.903446823e-09f, -3.902368520e-09f, -3.901283589e-09f, -3.900192037e-09f, -3.899093871e-09f,
+-3.897989096e-09f, -3.896877719e-09f, -3.895759745e-09f, -3.894635182e-09f, -3.893504036e-09f, -3.892366313e-09f, -3.891222019e-09f, -3.890071160e-09f, -3.888913744e-09f, -3.887749776e-09f,
+-3.886579262e-09f, -3.885402210e-09f, -3.884218625e-09f, -3.883028513e-09f, -3.881831882e-09f, -3.880628738e-09f, -3.879419086e-09f, -3.878202934e-09f, -3.876980288e-09f, -3.875751154e-09f,
+-3.874515538e-09f, -3.873273448e-09f, -3.872024890e-09f, -3.870769870e-09f, -3.869508394e-09f, -3.868240470e-09f, -3.866966103e-09f, -3.865685301e-09f, -3.864398069e-09f, -3.863104414e-09f,
+-3.861804343e-09f, -3.860497862e-09f, -3.859184979e-09f, -3.857865698e-09f, -3.856540028e-09f, -3.855207975e-09f, -3.853869544e-09f, -3.852524744e-09f, -3.851173579e-09f, -3.849816058e-09f,
+-3.848452187e-09f, -3.847081972e-09f, -3.845705420e-09f, -3.844322537e-09f, -3.842933331e-09f, -3.841537808e-09f, -3.840135974e-09f, -3.838727837e-09f, -3.837313403e-09f, -3.835892679e-09f,
+-3.834465671e-09f, -3.833032387e-09f, -3.831592832e-09f, -3.830147014e-09f, -3.828694940e-09f, -3.827236616e-09f, -3.825772048e-09f, -3.824301245e-09f, -3.822824212e-09f, -3.821340957e-09f,
+-3.819851486e-09f, -3.818355805e-09f, -3.816853923e-09f, -3.815345845e-09f, -3.813831579e-09f, -3.812311131e-09f, -3.810784508e-09f, -3.809251717e-09f, -3.807712765e-09f, -3.806167659e-09f,
+-3.804616406e-09f, -3.803059012e-09f, -3.801495485e-09f, -3.799925831e-09f, -3.798350058e-09f, -3.796768172e-09f, -3.795180180e-09f, -3.793586089e-09f, -3.791985906e-09f, -3.790379639e-09f,
+-3.788767293e-09f, -3.787148877e-09f, -3.785524397e-09f, -3.783893859e-09f, -3.782257272e-09f, -3.780614642e-09f, -3.778965975e-09f, -3.777311280e-09f, -3.775650563e-09f, -3.773983831e-09f,
+-3.772311092e-09f, -3.770632352e-09f, -3.768947618e-09f, -3.767256897e-09f, -3.765560197e-09f, -3.763857525e-09f, -3.762148887e-09f, -3.760434291e-09f, -3.758713744e-09f, -3.756987254e-09f,
+-3.755254826e-09f, -3.753516469e-09f, -3.751772189e-09f, -3.750021994e-09f, -3.748265890e-09f, -3.746503886e-09f, -3.744735987e-09f, -3.742962202e-09f, -3.741182538e-09f, -3.739397001e-09f,
+-3.737605599e-09f, -3.735808340e-09f, -3.734005229e-09f, -3.732196276e-09f, -3.730381486e-09f, -3.728560867e-09f, -3.726734427e-09f, -3.724902172e-09f, -3.723064110e-09f, -3.721220248e-09f,
+-3.719370594e-09f, -3.717515154e-09f, -3.715653936e-09f, -3.713786948e-09f, -3.711914196e-09f, -3.710035688e-09f, -3.708151432e-09f, -3.706261434e-09f, -3.704365702e-09f, -3.702464243e-09f,
+-3.700557065e-09f, -3.698644175e-09f, -3.696725580e-09f, -3.694801288e-09f, -3.692871306e-09f, -3.690935642e-09f, -3.688994303e-09f, -3.687047296e-09f, -3.685094629e-09f, -3.683136308e-09f,
+-3.681172343e-09f, -3.679202740e-09f, -3.677227506e-09f, -3.675246648e-09f, -3.673260176e-09f, -3.671268095e-09f, -3.669270413e-09f, -3.667267138e-09f, -3.665258278e-09f, -3.663243839e-09f,
+-3.661223830e-09f, -3.659198257e-09f, -3.657167128e-09f, -3.655130451e-09f, -3.653088234e-09f, -3.651040483e-09f, -3.648987207e-09f, -3.646928412e-09f, -3.644864107e-09f, -3.642794299e-09f,
+-3.640718996e-09f, -3.638638204e-09f, -3.636551933e-09f, -3.634460188e-09f, -3.632362979e-09f, -3.630260312e-09f, -3.628152195e-09f, -3.626038636e-09f, -3.623919642e-09f, -3.621795220e-09f,
+-3.619665380e-09f, -3.617530128e-09f, -3.615389471e-09f, -3.613243418e-09f, -3.611091976e-09f, -3.608935153e-09f, -3.606772956e-09f, -3.604605393e-09f, -3.602432473e-09f, -3.600254201e-09f,
+-3.598070587e-09f, -3.595881638e-09f, -3.593687361e-09f, -3.591487764e-09f, -3.589282856e-09f, -3.587072643e-09f, -3.584857134e-09f, -3.582636335e-09f, -3.580410256e-09f, -3.578178903e-09f,
+-3.575942285e-09f, -3.573700409e-09f, -3.571453283e-09f, -3.569200915e-09f, -3.566943312e-09f, -3.564680482e-09f, -3.562412433e-09f, -3.560139173e-09f, -3.557860710e-09f, -3.555577052e-09f,
+-3.553288205e-09f, -3.550994179e-09f, -3.548694980e-09f, -3.546390617e-09f, -3.544081098e-09f, -3.541766430e-09f, -3.539446622e-09f, -3.537121680e-09f, -3.534791614e-09f, -3.532456430e-09f,
+-3.530116137e-09f, -3.527770742e-09f, -3.525420254e-09f, -3.523064681e-09f, -3.520704029e-09f, -3.518338308e-09f, -3.515967524e-09f, -3.513591687e-09f, -3.511210803e-09f, -3.508824881e-09f,
+-3.506433929e-09f, -3.504037954e-09f, -3.501636965e-09f, -3.499230970e-09f, -3.496819976e-09f, -3.494403991e-09f, -3.491983023e-09f, -3.489557081e-09f, -3.487126172e-09f, -3.484690305e-09f,
+-3.482249486e-09f, -3.479803725e-09f, -3.477353029e-09f, -3.474897406e-09f, -3.472436864e-09f, -3.469971412e-09f, -3.467501056e-09f, -3.465025806e-09f, -3.462545669e-09f, -3.460060653e-09f,
+-3.457570767e-09f, -3.455076018e-09f, -3.452576414e-09f, -3.450071964e-09f, -3.447562675e-09f, -3.445048555e-09f, -3.442529614e-09f, -3.440005857e-09f, -3.437477295e-09f, -3.434943934e-09f,
+-3.432405783e-09f, -3.429862850e-09f, -3.427315143e-09f, -3.424762670e-09f, -3.422205439e-09f, -3.419643459e-09f, -3.417076737e-09f, -3.414505281e-09f, -3.411929100e-09f, -3.409348202e-09f,
+-3.406762595e-09f, -3.404172287e-09f, -3.401577286e-09f, -3.398977600e-09f, -3.396373238e-09f, -3.393764207e-09f, -3.391150516e-09f, -3.388532173e-09f, -3.385909186e-09f, -3.383281564e-09f,
+-3.380649313e-09f, -3.378012444e-09f, -3.375370963e-09f, -3.372724879e-09f, -3.370074200e-09f, -3.367418935e-09f, -3.364759091e-09f, -3.362094676e-09f, -3.359425700e-09f, -3.356752170e-09f,
+-3.354074094e-09f, -3.351391481e-09f, -3.348704339e-09f, -3.346012676e-09f, -3.343316500e-09f, -3.340615819e-09f, -3.337910642e-09f, -3.335200978e-09f, -3.332486833e-09f, -3.329768217e-09f,
+-3.327045138e-09f, -3.324317604e-09f, -3.321585623e-09f, -3.318849204e-09f, -3.316108355e-09f, -3.313363083e-09f, -3.310613399e-09f, -3.307859308e-09f, -3.305100821e-09f, -3.302337945e-09f,
+-3.299570689e-09f, -3.296799060e-09f, -3.294023068e-09f, -3.291242720e-09f, -3.288458025e-09f, -3.285668991e-09f, -3.282875627e-09f, -3.280077940e-09f, -3.277275940e-09f, -3.274469634e-09f,
+-3.271659030e-09f, -3.268844138e-09f, -3.266024965e-09f, -3.263201520e-09f, -3.260373811e-09f, -3.257541847e-09f, -3.254705635e-09f, -3.251865185e-09f, -3.249020504e-09f, -3.246171601e-09f,
+-3.243318485e-09f, -3.240461163e-09f, -3.237599644e-09f, -3.234733937e-09f, -3.231864050e-09f, -3.228989991e-09f, -3.226111768e-09f, -3.223229391e-09f, -3.220342867e-09f, -3.217452205e-09f,
+-3.214557413e-09f, -3.211658499e-09f, -3.208755473e-09f, -3.205848342e-09f, -3.202937115e-09f, -3.200021801e-09f, -3.197102407e-09f, -3.194178942e-09f, -3.191251415e-09f, -3.188319834e-09f,
+-3.185384207e-09f, -3.182444544e-09f, -3.179500852e-09f, -3.176553139e-09f, -3.173601415e-09f, -3.170645687e-09f, -3.167685965e-09f, -3.164722256e-09f, -3.161754570e-09f, -3.158782914e-09f,
+-3.155807297e-09f, -3.152827727e-09f, -3.149844214e-09f, -3.146856765e-09f, -3.143865389e-09f, -3.140870094e-09f, -3.137870889e-09f, -3.134867783e-09f, -3.131860784e-09f, -3.128849899e-09f,
+-3.125835139e-09f, -3.122816511e-09f, -3.119794024e-09f, -3.116767687e-09f, -3.113737507e-09f, -3.110703494e-09f, -3.107665656e-09f, -3.104624001e-09f, -3.101578538e-09f, -3.098529275e-09f,
+-3.095476222e-09f, -3.092419386e-09f, -3.089358776e-09f, -3.086294400e-09f, -3.083226268e-09f, -3.080154388e-09f, -3.077078767e-09f, -3.073999416e-09f, -3.070916341e-09f, -3.067829553e-09f,
+-3.064739059e-09f, -3.061644868e-09f, -3.058546988e-09f, -3.055445428e-09f, -3.052340197e-09f, -3.049231303e-09f, -3.046118755e-09f, -3.043002561e-09f, -3.039882730e-09f, -3.036759270e-09f,
+-3.033632190e-09f, -3.030501499e-09f, -3.027367205e-09f, -3.024229317e-09f, -3.021087843e-09f, -3.017942791e-09f, -3.014794172e-09f, -3.011641992e-09f, -3.008486261e-09f, -3.005326987e-09f,
+-3.002164179e-09f, -2.998997845e-09f, -2.995827995e-09f, -2.992654636e-09f, -2.989477777e-09f, -2.986297427e-09f, -2.983113594e-09f, -2.979926288e-09f, -2.976735516e-09f, -2.973541287e-09f,
+-2.970343610e-09f, -2.967142493e-09f, -2.963937946e-09f, -2.960729976e-09f, -2.957518592e-09f, -2.954303804e-09f, -2.951085619e-09f, -2.947864046e-09f, -2.944639094e-09f, -2.941410771e-09f,
+-2.938179086e-09f, -2.934944048e-09f, -2.931705666e-09f, -2.928463947e-09f, -2.925218901e-09f, -2.921970535e-09f, -2.918718860e-09f, -2.915463883e-09f, -2.912205614e-09f, -2.908944060e-09f,
+-2.905679230e-09f, -2.902411134e-09f, -2.899139779e-09f, -2.895865175e-09f, -2.892587329e-09f, -2.889306251e-09f, -2.886021950e-09f, -2.882734433e-09f, -2.879443710e-09f, -2.876149789e-09f,
+-2.872852679e-09f, -2.869552389e-09f, -2.866248927e-09f, -2.862942301e-09f, -2.859632522e-09f, -2.856319596e-09f, -2.853003533e-09f, -2.849684342e-09f, -2.846362031e-09f, -2.843036609e-09f,
+-2.839708084e-09f, -2.836376466e-09f, -2.833041762e-09f, -2.829703982e-09f, -2.826363134e-09f, -2.823019227e-09f, -2.819672269e-09f, -2.816322270e-09f, -2.812969238e-09f, -2.809613181e-09f,
+-2.806254108e-09f, -2.802892029e-09f, -2.799526951e-09f, -2.796158883e-09f, -2.792787834e-09f, -2.789413813e-09f, -2.786036828e-09f, -2.782656888e-09f, -2.779274002e-09f, -2.775888178e-09f,
+-2.772499425e-09f, -2.769107752e-09f, -2.765713167e-09f, -2.762315680e-09f, -2.758915298e-09f, -2.755512031e-09f, -2.752105887e-09f, -2.748696874e-09f, -2.745285003e-09f, -2.741870280e-09f,
+-2.738452716e-09f, -2.735032318e-09f, -2.731609095e-09f, -2.728183057e-09f, -2.724754211e-09f, -2.721322566e-09f, -2.717888132e-09f, -2.714450916e-09f, -2.711010928e-09f, -2.707568176e-09f,
+-2.704122668e-09f, -2.700674415e-09f, -2.697223423e-09f, -2.693769703e-09f, -2.690313262e-09f, -2.686854109e-09f, -2.683392254e-09f, -2.679927704e-09f, -2.676460469e-09f, -2.672990556e-09f,
+-2.669517976e-09f, -2.666042736e-09f, -2.662564845e-09f, -2.659084312e-09f, -2.655601146e-09f, -2.652115355e-09f, -2.648626947e-09f, -2.645135933e-09f, -2.641642320e-09f, -2.638146117e-09f,
+-2.634647333e-09f, -2.631145976e-09f, -2.627642056e-09f, -2.624135580e-09f, -2.620626558e-09f, -2.617114998e-09f, -2.613600909e-09f, -2.610084299e-09f, -2.606565178e-09f, -2.603043554e-09f,
+-2.599519436e-09f, -2.595992832e-09f, -2.592463751e-09f, -2.588932202e-09f, -2.585398194e-09f, -2.581861735e-09f, -2.578322833e-09f, -2.574781498e-09f, -2.571237739e-09f, -2.567691563e-09f,
+-2.564142980e-09f, -2.560591999e-09f, -2.557038627e-09f, -2.553482874e-09f, -2.549924749e-09f, -2.546364259e-09f, -2.542801415e-09f, -2.539236224e-09f, -2.535668695e-09f, -2.532098837e-09f,
+-2.528526658e-09f, -2.524952168e-09f, -2.521375375e-09f, -2.517796287e-09f, -2.514214913e-09f, -2.510631263e-09f, -2.507045344e-09f, -2.503457165e-09f, -2.499866735e-09f, -2.496274063e-09f,
+-2.492679158e-09f, -2.489082027e-09f, -2.485482681e-09f, -2.481881126e-09f, -2.478277373e-09f, -2.474671429e-09f, -2.471063304e-09f, -2.467453006e-09f, -2.463840544e-09f, -2.460225926e-09f,
+-2.456609161e-09f, -2.452990258e-09f, -2.449369225e-09f, -2.445746072e-09f, -2.442120806e-09f, -2.438493437e-09f, -2.434863973e-09f, -2.431232422e-09f, -2.427598795e-09f, -2.423963098e-09f,
+-2.420325341e-09f, -2.416685532e-09f, -2.413043680e-09f, -2.409399795e-09f, -2.405753883e-09f, -2.402105955e-09f, -2.398456018e-09f, -2.394804082e-09f, -2.391150154e-09f, -2.387494245e-09f,
+-2.383836361e-09f, -2.380176513e-09f, -2.376514708e-09f, -2.372850955e-09f, -2.369185263e-09f, -2.365517641e-09f, -2.361848097e-09f, -2.358176639e-09f, -2.354503277e-09f, -2.350828019e-09f,
+-2.347150874e-09f, -2.343471850e-09f, -2.339790956e-09f, -2.336108201e-09f, -2.332423593e-09f, -2.328737141e-09f, -2.325048853e-09f, -2.321358738e-09f, -2.317666805e-09f, -2.313973063e-09f,
+-2.310277519e-09f, -2.306580183e-09f, -2.302881063e-09f, -2.299180168e-09f, -2.295477506e-09f, -2.291773086e-09f, -2.288066917e-09f, -2.284359007e-09f, -2.280649365e-09f, -2.276937999e-09f,
+-2.273224919e-09f, -2.269510132e-09f, -2.265793647e-09f, -2.262075473e-09f, -2.258355619e-09f, -2.254634092e-09f, -2.250910902e-09f, -2.247186057e-09f, -2.243459567e-09f, -2.239731438e-09f,
+-2.236001680e-09f, -2.232270302e-09f, -2.228537312e-09f, -2.224802719e-09f, -2.221066531e-09f, -2.217328757e-09f, -2.213589405e-09f, -2.209848484e-09f, -2.206106002e-09f, -2.202361969e-09f,
+-2.198616392e-09f, -2.194869281e-09f, -2.191120643e-09f, -2.187370488e-09f, -2.183618823e-09f, -2.179865658e-09f, -2.176111001e-09f, -2.172354861e-09f, -2.168597245e-09f, -2.164838163e-09f,
+-2.161077623e-09f, -2.157315634e-09f, -2.153552204e-09f, -2.149787342e-09f, -2.146021056e-09f, -2.142253354e-09f, -2.138484247e-09f, -2.134713740e-09f, -2.130941845e-09f, -2.127168568e-09f,
+-2.123393918e-09f, -2.119617905e-09f, -2.115840536e-09f, -2.112061819e-09f, -2.108281765e-09f, -2.104500380e-09f, -2.100717673e-09f, -2.096933654e-09f, -2.093148329e-09f, -2.089361709e-09f,
+-2.085573801e-09f, -2.081784614e-09f, -2.077994157e-09f, -2.074202437e-09f, -2.070409463e-09f, -2.066615245e-09f, -2.062819789e-09f, -2.059023105e-09f, -2.055225202e-09f, -2.051426087e-09f,
+-2.047625769e-09f, -2.043824257e-09f, -2.040021559e-09f, -2.036217683e-09f, -2.032412638e-09f, -2.028606433e-09f, -2.024799076e-09f, -2.020990574e-09f, -2.017180938e-09f, -2.013370174e-09f,
+-2.009558293e-09f, -2.005745301e-09f, -2.001931207e-09f, -1.998116021e-09f, -1.994299750e-09f, -1.990482402e-09f, -1.986663987e-09f, -1.982844512e-09f, -1.979023986e-09f, -1.975202417e-09f,
+-1.971379814e-09f, -1.967556185e-09f, -1.963731539e-09f, -1.959905883e-09f, -1.956079227e-09f, -1.952251579e-09f, -1.948422946e-09f, -1.944593339e-09f, -1.940762763e-09f, -1.936931230e-09f,
+-1.933098745e-09f, -1.929265319e-09f, -1.925430959e-09f, -1.921595673e-09f, -1.917759471e-09f, -1.913922360e-09f, -1.910084348e-09f, -1.906245445e-09f, -1.902405658e-09f, -1.898564996e-09f,
+-1.894723467e-09f, -1.890881079e-09f, -1.887037841e-09f, -1.883193761e-09f, -1.879348848e-09f, -1.875503109e-09f, -1.871656553e-09f, -1.867809189e-09f, -1.863961024e-09f, -1.860112067e-09f,
+-1.856262326e-09f, -1.852411810e-09f, -1.848560526e-09f, -1.844708484e-09f, -1.840855691e-09f, -1.837002156e-09f, -1.833147887e-09f, -1.829292892e-09f, -1.825437179e-09f, -1.821580758e-09f,
+-1.817723635e-09f, -1.813865820e-09f, -1.810007320e-09f, -1.806148144e-09f, -1.802288300e-09f, -1.798427796e-09f, -1.794566641e-09f, -1.790704842e-09f, -1.786842409e-09f, -1.782979349e-09f,
+-1.779115670e-09f, -1.775251381e-09f, -1.771386490e-09f, -1.767521005e-09f, -1.763654934e-09f, -1.759788286e-09f, -1.755921068e-09f, -1.752053289e-09f, -1.748184958e-09f, -1.744316082e-09f,
+-1.740446669e-09f, -1.736576728e-09f, -1.732706266e-09f, -1.728835293e-09f, -1.724963816e-09f, -1.721091843e-09f, -1.717219383e-09f, -1.713346443e-09f, -1.709473033e-09f, -1.705599159e-09f,
+-1.701724830e-09f, -1.697850055e-09f, -1.693974840e-09f, -1.690099196e-09f, -1.686223129e-09f, -1.682346648e-09f, -1.678469760e-09f, -1.674592475e-09f, -1.670714799e-09f, -1.666836742e-09f,
+-1.662958311e-09f, -1.659079515e-09f, -1.655200361e-09f, -1.651320858e-09f, -1.647441013e-09f, -1.643560835e-09f, -1.639680332e-09f, -1.635799512e-09f, -1.631918382e-09f, -1.628036952e-09f,
+-1.624155228e-09f, -1.620273220e-09f, -1.616390935e-09f, -1.612508381e-09f, -1.608625567e-09f, -1.604742499e-09f, -1.600859187e-09f, -1.596975638e-09f, -1.593091861e-09f, -1.589207863e-09f,
+-1.585323652e-09f, -1.581439237e-09f, -1.577554625e-09f, -1.573669824e-09f, -1.569784843e-09f, -1.565899689e-09f, -1.562014370e-09f, -1.558128895e-09f, -1.554243271e-09f, -1.550357506e-09f,
+-1.546471609e-09f, -1.542585586e-09f, -1.538699447e-09f, -1.534813199e-09f, -1.530926850e-09f, -1.527040407e-09f, -1.523153880e-09f, -1.519267275e-09f, -1.515380601e-09f, -1.511493866e-09f,
+-1.507607078e-09f, -1.503720243e-09f, -1.499833372e-09f, -1.495946470e-09f, -1.492059547e-09f, -1.488172609e-09f, -1.484285666e-09f, -1.480398724e-09f, -1.476511793e-09f, -1.472624878e-09f,
+-1.468737990e-09f, -1.464851134e-09f, -1.460964320e-09f, -1.457077554e-09f, -1.453190846e-09f, -1.449304202e-09f, -1.445417630e-09f, -1.441531139e-09f, -1.437644736e-09f, -1.433758429e-09f,
+-1.429872226e-09f, -1.425986135e-09f, -1.422100162e-09f, -1.418214318e-09f, -1.414328608e-09f, -1.410443040e-09f, -1.406557624e-09f, -1.402672365e-09f, -1.398787273e-09f, -1.394902355e-09f,
+-1.391017618e-09f, -1.387133071e-09f, -1.383248720e-09f, -1.379364575e-09f, -1.375480642e-09f, -1.371596930e-09f, -1.367713446e-09f, -1.363830197e-09f, -1.359947192e-09f, -1.356064438e-09f,
+-1.352181943e-09f, -1.348299715e-09f, -1.344417761e-09f, -1.340536089e-09f, -1.336654707e-09f, -1.332773622e-09f, -1.328892842e-09f, -1.325012375e-09f, -1.321132228e-09f, -1.317252409e-09f,
+-1.313372926e-09f, -1.309493786e-09f, -1.305614998e-09f, -1.301736567e-09f, -1.297858503e-09f, -1.293980813e-09f, -1.290103505e-09f, -1.286226585e-09f, -1.282350062e-09f, -1.278473943e-09f,
+-1.274598237e-09f, -1.270722949e-09f, -1.266848089e-09f, -1.262973663e-09f, -1.259099680e-09f, -1.255226146e-09f, -1.251353069e-09f, -1.247480458e-09f, -1.243608318e-09f, -1.239736659e-09f,
+-1.235865487e-09f, -1.231994810e-09f, -1.228124636e-09f, -1.224254972e-09f, -1.220385825e-09f, -1.216517204e-09f, -1.212649115e-09f, -1.208781566e-09f, -1.204914564e-09f, -1.201048118e-09f,
+-1.197182234e-09f, -1.193316920e-09f, -1.189452184e-09f, -1.185588032e-09f, -1.181724473e-09f, -1.177861514e-09f, -1.173999161e-09f, -1.170137424e-09f, -1.166276308e-09f, -1.162415822e-09f,
+-1.158555974e-09f, -1.154696769e-09f, -1.150838216e-09f, -1.146980322e-09f, -1.143123095e-09f, -1.139266542e-09f, -1.135410670e-09f, -1.131555487e-09f, -1.127700999e-09f, -1.123847215e-09f,
+-1.119994142e-09f, -1.116141787e-09f, -1.112290158e-09f, -1.108439261e-09f, -1.104589104e-09f, -1.100739695e-09f, -1.096891040e-09f, -1.093043148e-09f, -1.089196024e-09f, -1.085349678e-09f,
+-1.081504115e-09f, -1.077659344e-09f, -1.073815371e-09f, -1.069972204e-09f, -1.066129850e-09f, -1.062288316e-09f, -1.058447610e-09f, -1.054607739e-09f, -1.050768709e-09f, -1.046930529e-09f,
+-1.043093205e-09f, -1.039256746e-09f, -1.035421157e-09f, -1.031586446e-09f, -1.027752620e-09f, -1.023919687e-09f, -1.020087654e-09f, -1.016256528e-09f, -1.012426315e-09f, -1.008597024e-09f,
+-1.004768661e-09f, -1.000941234e-09f, -9.971147499e-10f, -9.932892153e-10f, -9.894646377e-10f, -9.856410242e-10f, -9.818183819e-10f, -9.779967180e-10f, -9.741760395e-10f, -9.703563535e-10f,
+-9.665376672e-10f, -9.627199877e-10f, -9.589033219e-10f, -9.550876770e-10f, -9.512730601e-10f, -9.474594782e-10f, -9.436469384e-10f, -9.398354477e-10f, -9.360250131e-10f, -9.322156418e-10f,
+-9.284073406e-10f, -9.246001167e-10f, -9.207939771e-10f, -9.169889287e-10f, -9.131849785e-10f, -9.093821336e-10f, -9.055804010e-10f, -9.017797876e-10f, -8.979803003e-10f, -8.941819462e-10f,
+-8.903847322e-10f, -8.865886653e-10f, -8.827937524e-10f, -8.790000004e-10f, -8.752074163e-10f, -8.714160070e-10f, -8.676257794e-10f, -8.638367405e-10f, -8.600488970e-10f, -8.562622560e-10f,
+-8.524768243e-10f, -8.486926088e-10f, -8.449096163e-10f, -8.411278538e-10f, -8.373473281e-10f, -8.335680460e-10f, -8.297900145e-10f, -8.260132402e-10f, -8.222377301e-10f, -8.184634910e-10f,
+-8.146905297e-10f, -8.109188531e-10f, -8.071484678e-10f, -8.033793808e-10f, -7.996115987e-10f, -7.958451285e-10f, -7.920799768e-10f, -7.883161504e-10f, -7.845536561e-10f, -7.807925007e-10f,
+-7.770326908e-10f, -7.732742333e-10f, -7.695171349e-10f, -7.657614022e-10f, -7.620070420e-10f, -7.582540610e-10f, -7.545024659e-10f, -7.507522634e-10f, -7.470034603e-10f, -7.432560630e-10f,
+-7.395100785e-10f, -7.357655132e-10f, -7.320223739e-10f, -7.282806672e-10f, -7.245403998e-10f, -7.208015783e-10f, -7.170642093e-10f, -7.133282994e-10f, -7.095938553e-10f, -7.058608836e-10f,
+-7.021293909e-10f, -6.983993836e-10f, -6.946708686e-10f, -6.909438522e-10f, -6.872183412e-10f, -6.834943419e-10f, -6.797718611e-10f, -6.760509052e-10f, -6.723314809e-10f, -6.686135945e-10f,
+-6.648972527e-10f, -6.611824619e-10f, -6.574692287e-10f, -6.537575595e-10f, -6.500474610e-10f, -6.463389394e-10f, -6.426320014e-10f, -6.389266534e-10f, -6.352229019e-10f, -6.315207533e-10f,
+-6.278202140e-10f, -6.241212905e-10f, -6.204239893e-10f, -6.167283167e-10f, -6.130342792e-10f, -6.093418833e-10f, -6.056511351e-10f, -6.019620413e-10f, -5.982746082e-10f, -5.945888421e-10f,
+-5.909047494e-10f, -5.872223365e-10f, -5.835416098e-10f, -5.798625755e-10f, -5.761852401e-10f, -5.725096098e-10f, -5.688356910e-10f, -5.651634901e-10f, -5.614930132e-10f, -5.578242668e-10f,
+-5.541572570e-10f, -5.504919903e-10f, -5.468284728e-10f, -5.431667109e-10f, -5.395067107e-10f, -5.358484787e-10f, -5.321920209e-10f, -5.285373437e-10f, -5.248844532e-10f, -5.212333558e-10f,
+-5.175840575e-10f, -5.139365647e-10f, -5.102908835e-10f, -5.066470201e-10f, -5.030049807e-10f, -4.993647714e-10f, -4.957263985e-10f, -4.920898681e-10f, -4.884551864e-10f, -4.848223594e-10f,
+-4.811913933e-10f, -4.775622943e-10f, -4.739350685e-10f, -4.703097219e-10f, -4.666862608e-10f, -4.630646911e-10f, -4.594450190e-10f, -4.558272505e-10f, -4.522113917e-10f, -4.485974488e-10f,
+-4.449854276e-10f, -4.413753344e-10f, -4.377671751e-10f, -4.341609557e-10f, -4.305566823e-10f, -4.269543609e-10f, -4.233539975e-10f, -4.197555981e-10f, -4.161591686e-10f, -4.125647152e-10f,
+-4.089722437e-10f, -4.053817601e-10f, -4.017932703e-10f, -3.982067804e-10f, -3.946222962e-10f, -3.910398237e-10f, -3.874593689e-10f, -3.838809375e-10f, -3.803045356e-10f, -3.767301690e-10f,
+-3.731578437e-10f, -3.695875655e-10f, -3.660193403e-10f, -3.624531739e-10f, -3.588890723e-10f, -3.553270412e-10f, -3.517670865e-10f, -3.482092141e-10f, -3.446534297e-10f, -3.410997392e-10f,
+-3.375481484e-10f, -3.339986632e-10f, -3.304512892e-10f, -3.269060323e-10f, -3.233628982e-10f, -3.198218927e-10f, -3.162830217e-10f, -3.127462907e-10f, -3.092117056e-10f, -3.056792722e-10f,
+-3.021489960e-10f, -2.986208829e-10f, -2.950949386e-10f, -2.915711687e-10f, -2.880495789e-10f, -2.845301750e-10f, -2.810129626e-10f, -2.774979474e-10f, -2.739851350e-10f, -2.704745311e-10f,
+-2.669661413e-10f, -2.634599713e-10f, -2.599560266e-10f, -2.564543130e-10f, -2.529548359e-10f, -2.494576011e-10f, -2.459626140e-10f, -2.424698804e-10f, -2.389794056e-10f, -2.354911954e-10f,
+-2.320052553e-10f, -2.285215908e-10f, -2.250402074e-10f, -2.215611108e-10f, -2.180843063e-10f, -2.146097996e-10f, -2.111375961e-10f, -2.076677013e-10f, -2.042001207e-10f, -2.007348599e-10f,
+-1.972719242e-10f, -1.938113191e-10f, -1.903530501e-10f, -1.868971226e-10f, -1.834435421e-10f, -1.799923140e-10f, -1.765434437e-10f, -1.730969366e-10f, -1.696527982e-10f, -1.662110337e-10f,
+-1.627716487e-10f, -1.593346484e-10f, -1.559000383e-10f, -1.524678237e-10f, -1.490380099e-10f, -1.456106023e-10f, -1.421856062e-10f, -1.387630270e-10f, -1.353428700e-10f, -1.319251404e-10f,
+-1.285098436e-10f, -1.250969848e-10f, -1.216865694e-10f, -1.182786025e-10f, -1.148730896e-10f, -1.114700358e-10f, -1.080694463e-10f, -1.046713264e-10f, -1.012756814e-10f, -9.788251641e-11f,
+-9.449183669e-11f, -9.110364743e-11f, -8.771795382e-11f, -8.433476105e-11f, -8.095407428e-11f, -7.757589870e-11f, -7.420023945e-11f, -7.082710167e-11f, -6.745649053e-11f, -6.408841113e-11f,
+-6.072286860e-11f, -5.735986806e-11f, -5.399941461e-11f, -5.064151335e-11f, -4.728616936e-11f, -4.393338771e-11f, -4.058317348e-11f, -3.723553173e-11f, -3.389046751e-11f, -3.054798585e-11f,
+-2.720809180e-11f, -2.387079037e-11f, -2.053608658e-11f, -1.720398544e-11f, -1.387449194e-11f, -1.054761107e-11f, -7.223347816e-12f, -3.901707142e-12f, -3.901707142e-12f
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/respec/LinearResample.cpp b/extern/audaspace/src/respec/LinearResample.cpp
new file mode 100644
index 00000000000..bcdc3409771
--- /dev/null
+++ b/extern/audaspace/src/respec/LinearResample.cpp
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "respec/LinearResample.h"
+#include "respec/LinearResampleReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+LinearResample::LinearResample(std::shared_ptr<ISound> sound, DeviceSpecs specs) :
+ SpecsChanger(sound, specs)
+{
+}
+
+std::shared_ptr<IReader> LinearResample::createReader()
+{
+ return std::shared_ptr<IReader>(new LinearResampleReader(getReader(), m_specs.rate));
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/respec/LinearResampleReader.cpp b/extern/audaspace/src/respec/LinearResampleReader.cpp
new file mode 100644
index 00000000000..53d506115ce
--- /dev/null
+++ b/extern/audaspace/src/respec/LinearResampleReader.cpp
@@ -0,0 +1,174 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "respec/LinearResampleReader.h"
+
+#include <cmath>
+#include <cstring>
+
+AUD_NAMESPACE_BEGIN
+
+LinearResampleReader::LinearResampleReader(std::shared_ptr<IReader> reader, SampleRate rate) :
+ ResampleReader(reader, rate),
+ m_channels(reader->getSpecs().channels),
+ m_cache_pos(0),
+ m_cache_ok(false)
+{
+ Specs specs = { rate, m_channels };
+ m_cache.resize(2 * AUD_SAMPLE_SIZE(specs));
+}
+
+void LinearResampleReader::seek(int position)
+{
+ position = std::floor(position * double(m_reader->getSpecs().rate) / double(m_rate));
+ m_reader->seek(position);
+ m_cache_ok = false;
+ m_cache_pos = 0;
+}
+
+int LinearResampleReader::getLength() const
+{
+ return std::floor(m_reader->getLength() * double(m_rate) / double(m_reader->getSpecs().rate));
+}
+
+int LinearResampleReader::getPosition() const
+{
+ return std::floor((m_reader->getPosition() + (m_cache_ok ? m_cache_pos - 1 : 0))
+ * m_rate / m_reader->getSpecs().rate);
+}
+
+Specs LinearResampleReader::getSpecs() const
+{
+ Specs specs = m_reader->getSpecs();
+ specs.rate = m_rate;
+ return specs;
+}
+
+void LinearResampleReader::read(int& length, bool& eos, sample_t* buffer)
+{
+ if(length == 0)
+ return;
+
+ Specs specs = m_reader->getSpecs();
+
+ int samplesize = AUD_SAMPLE_SIZE(specs);
+ int size = length;
+ float factor = m_rate / m_reader->getSpecs().rate;
+ float spos = 0.0f;
+ sample_t low, high;
+ eos = false;
+
+ // check for channels changed
+
+ if(specs.channels != m_channels)
+ {
+ m_cache.resize(2 * samplesize);
+ m_channels = specs.channels;
+ m_cache_ok = false;
+ }
+
+ if(factor == 1 && (!m_cache_ok || m_cache_pos == 1))
+ {
+ // can read directly!
+ m_reader->read(length, eos, buffer);
+
+ if(length > 0)
+ {
+ std::memcpy(m_cache.getBuffer() + m_channels, buffer + m_channels * (length - 1), samplesize);
+ m_cache_pos = 1;
+ m_cache_ok = true;
+ }
+
+ return;
+ }
+
+ int len;
+ sample_t* buf;
+
+ if(m_cache_ok)
+ {
+ int need = std::ceil(length / factor + m_cache_pos) - 1;
+
+ len = need;
+
+ m_buffer.assureSize((len + 2) * samplesize);
+ buf = m_buffer.getBuffer();
+
+ std::memcpy(buf, m_cache.getBuffer(), 2 * samplesize);
+ m_reader->read(len, eos, buf + 2 * m_channels);
+
+ if(len < need)
+ length = std::floor((len + 1 - m_cache_pos) * factor);
+ }
+ else
+ {
+ m_cache_pos = 1 - 1 / factor;
+
+ int need = std::ceil(length / factor + m_cache_pos);
+
+ len = need;
+
+ m_buffer.assureSize((len + 1) * samplesize);
+ buf = m_buffer.getBuffer();
+
+ std::memset(buf, 0, samplesize);
+ m_reader->read(len, eos, buf + m_channels);
+
+ if(len == 0)
+ {
+ length = 0;
+ return;
+ }
+
+ if(len < need)
+ {
+ length = std::floor((len - m_cache_pos) * factor);
+ }
+
+ m_cache_ok = true;
+ }
+
+ if(length == 0)
+ return;
+
+ for(int channel = 0; channel < m_channels; channel++)
+ {
+ for(int i = 0; i < length; i++)
+ {
+ spos = (i + 1) / factor + m_cache_pos;
+
+ low = buf[(int)std::floor(spos) * m_channels + channel];
+ high = buf[(int)std::ceil(spos) * m_channels + channel];
+
+ buffer[i * m_channels + channel] = low + (spos - std::floor(spos)) * (high - low);
+ }
+ }
+
+ if(std::floor(spos) == spos)
+ {
+ std::memcpy(m_cache.getBuffer() + m_channels, buf + int(std::floor(spos)) * m_channels, samplesize);
+ m_cache_pos = 1;
+ }
+ else
+ {
+ std::memcpy(m_cache.getBuffer(), buf + int(std::floor(spos)) * m_channels, 2 * samplesize);
+ m_cache_pos = spos - std::floor(spos);
+ }
+
+ eos &= length < size;
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/respec/Mixer.cpp b/extern/audaspace/src/respec/Mixer.cpp
new file mode 100644
index 00000000000..d63f0bab2bb
--- /dev/null
+++ b/extern/audaspace/src/respec/Mixer.cpp
@@ -0,0 +1,112 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "respec/Mixer.h"
+
+#include <algorithm>
+#include <cstring>
+
+AUD_NAMESPACE_BEGIN
+
+Mixer::Mixer(DeviceSpecs specs) :
+ m_specs(specs)
+{
+ switch(m_specs.format)
+ {
+ case FORMAT_U8:
+ m_convert = convert_float_u8;
+ break;
+ case FORMAT_S16:
+ m_convert = convert_float_s16;
+ break;
+ case FORMAT_S24:
+
+#ifdef __BIG_ENDIAN__
+ m_convert = convert_float_s24_be;
+#else
+ m_convert = convert_float_s24_le;
+#endif
+ break;
+ case FORMAT_S32:
+ m_convert = convert_float_s32;
+ break;
+ case FORMAT_FLOAT32:
+ m_convert = convert_copy<float>;
+ break;
+ case FORMAT_FLOAT64:
+ m_convert = convert_float_double;
+ break;
+ default:
+ break;
+ }
+}
+
+DeviceSpecs Mixer::getSpecs() const
+{
+ return m_specs;
+}
+
+void Mixer::setSpecs(Specs specs)
+{
+ m_specs.specs = specs;
+}
+
+void Mixer::clear(int length)
+{
+ m_buffer.assureSize(length * m_specs.channels * AUD_SAMPLE_SIZE(m_specs));
+
+ m_length = length;
+
+ std::memset(m_buffer.getBuffer(), 0, length * m_specs.channels * AUD_SAMPLE_SIZE(m_specs));
+}
+
+void Mixer::mix(sample_t* buffer, int start, int length, float volume)
+{
+ sample_t* out = m_buffer.getBuffer();
+
+ length = (std::min(m_length, length + start) - start) * m_specs.channels;
+ start *= m_specs.channels;
+
+ for(int i = 0; i < length; i++)
+ out[i + start] += buffer[i] * volume;
+}
+
+void Mixer::mix(sample_t* buffer, int start, int length, float volume_to, float volume_from)
+{
+ sample_t* out = m_buffer.getBuffer();
+
+ length = (std::min(m_length, length + start) - start);
+
+ for(int i = 0; i < length; i++)
+ {
+ float volume = volume_from * (1.0f - i / float(length)) + volume_to * (i / float(length));
+
+ for(int c = 0; c < m_specs.channels; c++)
+ out[(i + start) * m_specs.channels + c] += buffer[i * m_specs.channels + c] * volume;
+ }
+}
+
+void Mixer::read(data_t* buffer, float volume)
+{
+ sample_t* out = m_buffer.getBuffer();
+
+ for(int i = 0; i < m_length * m_specs.channels; i++)
+ out[i] *= volume;
+
+ m_convert(buffer, (data_t*) out, m_length * m_specs.channels);
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/respec/ResampleReader.cpp b/extern/audaspace/src/respec/ResampleReader.cpp
new file mode 100644
index 00000000000..d7f5bff3a51
--- /dev/null
+++ b/extern/audaspace/src/respec/ResampleReader.cpp
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "respec/ResampleReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+ResampleReader::ResampleReader(std::shared_ptr<IReader> reader, SampleRate rate) :
+ EffectReader(reader), m_rate(rate)
+{
+}
+
+void ResampleReader::setRate(SampleRate rate)
+{
+ m_rate = rate;
+}
+
+SampleRate ResampleReader::getRate()
+{
+ return m_rate;
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/respec/SpecsChanger.cpp b/extern/audaspace/src/respec/SpecsChanger.cpp
new file mode 100644
index 00000000000..146d9789160
--- /dev/null
+++ b/extern/audaspace/src/respec/SpecsChanger.cpp
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "respec/SpecsChanger.h"
+
+AUD_NAMESPACE_BEGIN
+
+std::shared_ptr<IReader> SpecsChanger::getReader() const
+{
+ return m_sound->createReader();
+}
+
+SpecsChanger::SpecsChanger(std::shared_ptr<ISound> sound,
+ DeviceSpecs specs) :
+ m_specs(specs), m_sound(sound)
+{
+}
+
+DeviceSpecs SpecsChanger::getSpecs() const
+{
+ return m_specs;
+}
+
+std::shared_ptr<ISound> SpecsChanger::getSound() const
+{
+ return m_sound;
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/sequence/AnimateableProperty.cpp b/extern/audaspace/src/sequence/AnimateableProperty.cpp
new file mode 100644
index 00000000000..306ba8e07f5
--- /dev/null
+++ b/extern/audaspace/src/sequence/AnimateableProperty.cpp
@@ -0,0 +1,217 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "sequence/AnimateableProperty.h"
+
+#include <cstring>
+#include <cmath>
+#include <mutex>
+
+AUD_NAMESPACE_BEGIN
+
+AnimateableProperty::AnimateableProperty(int count) :
+ Buffer(count * sizeof(float)), m_count(count), m_isAnimated(false)
+{
+ std::memset(getBuffer(), 0, count * sizeof(float));
+}
+
+AnimateableProperty::AnimateableProperty(int count, float value) :
+ Buffer(count * sizeof(float)), m_count(count), m_isAnimated(false)
+{
+ sample_t* buf = getBuffer();
+
+ for(int i = 0; i < count; i++)
+ buf[i] = value;
+}
+
+void AnimateableProperty::updateUnknownCache(int start, int end)
+{
+ float* buf = getBuffer();
+
+ // we could do a better interpolation than zero order, but that doesn't work with Blender's animation system
+ // as frames are only written when changing, so to support jumps, we need zero order interpolation here.
+ for(int i = start; i <= end; i++)
+ std::memcpy(buf + i * m_count, buf + (start - 1) * m_count, m_count * sizeof(float));
+}
+
+AnimateableProperty::~AnimateableProperty()
+{
+}
+
+int AnimateableProperty::getCount() const
+{
+ return m_count;
+}
+
+void AnimateableProperty::write(const float* data)
+{
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ m_isAnimated = false;
+ m_unknown.clear();
+ std::memcpy(getBuffer(), data, m_count * sizeof(float));
+}
+
+void AnimateableProperty::write(const float* data, int position, int count)
+{
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ int pos = getSize() / (sizeof(float) * m_count);
+
+ if(!m_isAnimated)
+ pos = 0;
+
+ m_isAnimated = true;
+
+ assureSize((count + position) * m_count * sizeof(float), true);
+
+ float* buf = getBuffer();
+
+ std::memcpy(buf + position * m_count, data, count * m_count * sizeof(float));
+
+ // have to fill up space between?
+ if(pos < position)
+ {
+ m_unknown.push_back(Unknown(pos, position - 1));
+
+ // if the buffer was not animated before, we copy the previous static value
+ if(pos == 0)
+ pos = 1;
+
+ updateUnknownCache(pos, position - 1);
+ }
+ // otherwise it's not at the end, let's check if some unknown part got filled
+ else
+ {
+ bool erased = false;
+
+ for(auto it = m_unknown.begin(); it != m_unknown.end(); erased ? it : it++)
+ {
+ erased = false;
+
+ // unknown area before position
+ if(it->end < position)
+ continue;
+
+ // we're after the new area, let's stop
+ if(it->start >= position + count)
+ break;
+
+ // we have an intersection, now 4 cases:
+ // the start is included
+ if(position <= it->start)
+ {
+ // the end is included
+ if(position + count > it->end)
+ {
+ // simply delete
+ it = m_unknown.erase(it);
+ erased = true;
+ }
+ // the end is excluded, a second part remains
+ else
+ {
+ // update second part
+ it->start = position + count;
+ updateUnknownCache(it->start, it->end);
+ break;
+ }
+ }
+ // start is excluded, a first part remains
+ else
+ {
+ // the end is included
+ if(position + count > it->end)
+ {
+ // update first part
+ it->end = position - 1;
+ }
+ // the end is excluded, a second part remains
+ else
+ {
+ // add another item and update both parts
+ m_unknown.insert(it, Unknown(it->start, position - 1));
+ it->start = position + count;
+ updateUnknownCache(it->start, it->end);
+ }
+ }
+ }
+ }
+}
+
+void AnimateableProperty::read(float position, float* out)
+{
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ if(!m_isAnimated)
+ {
+ std::memcpy(out, getBuffer(), m_count * sizeof(float));
+ return;
+ }
+
+ int last = getSize() / (sizeof(float) * m_count) - 1;
+ float t = position - std::floor(position);
+
+ if(position >= last)
+ {
+ position = last;
+ t = 0;
+ }
+
+ if(t == 0)
+ {
+ std::memcpy(out, getBuffer() + int(std::floor(position)) * m_count, m_count * sizeof(float));
+ }
+ else
+ {
+ int pos = int(std::floor(position)) * m_count;
+ float t2 = t * t;
+ float t3 = t2 * t;
+ float m0, m1;
+ float* p0;
+ float* p1 = getBuffer() + pos;
+ float* p2;
+ float* p3;
+ last *= m_count;
+
+ if(pos == 0)
+ p0 = p1;
+ else
+ p0 = p1 - m_count;
+
+ p2 = p1 + m_count;
+ if(pos + m_count == last)
+ p3 = p2;
+ else
+ p3 = p2 + m_count;
+
+ for(int i = 0; i < m_count; i++)
+ {
+ m0 = (p2[i] - p0[i]) / 2.0f;
+ m1 = (p3[i] - p1[i]) / 2.0f;
+
+ out[i] = (2 * t3 - 3 * t2 + 1) * p0[i] + (-2 * t3 + 3 * t2) * p1[i] +
+ (t3 - 2 * t2 + t) * m0 + (t3 - t2) * m1;
+ }
+ }
+}
+
+bool AnimateableProperty::isAnimated() const
+{
+ return m_isAnimated;
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/sequence/Double.cpp b/extern/audaspace/src/sequence/Double.cpp
new file mode 100644
index 00000000000..1086be84a11
--- /dev/null
+++ b/extern/audaspace/src/sequence/Double.cpp
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "sequence/Double.h"
+#include "sequence/DoubleReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+Double::Double(std::shared_ptr<ISound> sound1, std::shared_ptr<ISound> sound2) :
+ m_sound1(sound1), m_sound2(sound2)
+{
+}
+
+std::shared_ptr<IReader> Double::createReader()
+{
+ std::shared_ptr<IReader> reader1 = m_sound1->createReader();
+ std::shared_ptr<IReader> reader2 = m_sound2->createReader();
+
+ return std::shared_ptr<IReader>(new DoubleReader(reader1, reader2));
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/sequence/DoubleReader.cpp b/extern/audaspace/src/sequence/DoubleReader.cpp
new file mode 100644
index 00000000000..33ab34ce366
--- /dev/null
+++ b/extern/audaspace/src/sequence/DoubleReader.cpp
@@ -0,0 +1,102 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "sequence/DoubleReader.h"
+
+#include <cstring>
+
+AUD_NAMESPACE_BEGIN
+
+DoubleReader::DoubleReader(std::shared_ptr<IReader> reader1, std::shared_ptr<IReader> reader2) :
+ m_reader1(reader1), m_reader2(reader2), m_finished1(false)
+{
+ Specs s1, s2;
+ s1 = reader1->getSpecs();
+ s2 = reader2->getSpecs();
+}
+
+DoubleReader::~DoubleReader()
+{
+}
+
+bool DoubleReader::isSeekable() const
+{
+ return m_reader1->isSeekable() && m_reader2->isSeekable();
+}
+
+void DoubleReader::seek(int position)
+{
+ m_reader1->seek(position);
+
+ int pos1 = m_reader1->getPosition();
+
+ if((m_finished1 = (pos1 < position)))
+ m_reader2->seek(position - pos1);
+ else
+ m_reader2->seek(0);
+}
+
+int DoubleReader::getLength() const
+{
+ int len1 = m_reader1->getLength();
+ int len2 = m_reader2->getLength();
+ if(len1 < 0 || len2 < 0)
+ return -1;
+ return len1 + len2;
+}
+
+int DoubleReader::getPosition() const
+{
+ return m_reader1->getPosition() + m_reader2->getPosition();
+}
+
+Specs DoubleReader::getSpecs() const
+{
+ return m_finished1 ? m_reader1->getSpecs() : m_reader2->getSpecs();
+}
+
+void DoubleReader::read(int& length, bool& eos, sample_t* buffer)
+{
+ eos = false;
+
+ if(!m_finished1)
+ {
+ int len = length;
+
+ m_reader1->read(len, m_finished1, buffer);
+
+ if(len < length)
+ {
+ Specs specs1, specs2;
+ specs1 = m_reader1->getSpecs();
+ specs2 = m_reader2->getSpecs();
+ if(AUD_COMPARE_SPECS(specs1, specs2))
+ {
+ int len2 = length - len;
+ m_reader2->read(len2, eos, buffer + specs1.channels * len);
+ length = len + len2;
+ }
+ else
+ length = len;
+ }
+ }
+ else
+ {
+ m_reader2->read(length, eos, buffer);
+ }
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/sequence/PingPong.cpp b/extern/audaspace/src/sequence/PingPong.cpp
new file mode 100644
index 00000000000..19bfb10fc2d
--- /dev/null
+++ b/extern/audaspace/src/sequence/PingPong.cpp
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "sequence/PingPong.h"
+#include "sequence/DoubleReader.h"
+#include "fx/ReverseReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+PingPong::PingPong(std::shared_ptr<ISound> sound) :
+ Effect(sound)
+{
+}
+
+std::shared_ptr<IReader> PingPong::createReader()
+{
+ std::shared_ptr<IReader> reader = getReader();
+ std::shared_ptr<IReader> reader2 = std::shared_ptr<IReader>(new ReverseReader(getReader()));
+
+ return std::shared_ptr<IReader>(new DoubleReader(reader, reader2));
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/sequence/Sequence.cpp b/extern/audaspace/src/sequence/Sequence.cpp
new file mode 100644
index 00000000000..eaec4d84ae1
--- /dev/null
+++ b/extern/audaspace/src/sequence/Sequence.cpp
@@ -0,0 +1,113 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "sequence/Sequence.h"
+#include "sequence/SequenceReader.h"
+#include "sequence/SequenceData.h"
+
+AUD_NAMESPACE_BEGIN
+
+Sequence::Sequence(Specs specs, float fps, bool muted)
+{
+ m_sequence = std::shared_ptr<SequenceData>(new SequenceData(specs, fps, muted));
+}
+
+Specs Sequence::getSpecs()
+{
+ return m_sequence->getSpecs();
+}
+
+void Sequence::setSpecs(Specs specs)
+{
+ m_sequence->setSpecs(specs);
+}
+
+float Sequence::getFPS() const
+{
+ return m_sequence->getFPS();
+}
+
+void Sequence::setFPS(float fps)
+{
+ m_sequence->setFPS(fps);
+}
+
+void Sequence::mute(bool muted)
+{
+ m_sequence->mute(muted);
+}
+
+bool Sequence::isMuted() const
+{
+ return m_sequence->isMuted();
+}
+
+float Sequence::getSpeedOfSound() const
+{
+ return m_sequence->getSpeedOfSound();
+}
+
+void Sequence::setSpeedOfSound(float speed)
+{
+ m_sequence->setSpeedOfSound(speed);
+}
+
+float Sequence::getDopplerFactor() const
+{
+ return m_sequence->getDopplerFactor();
+}
+
+void Sequence::setDopplerFactor(float factor)
+{
+ m_sequence->setDopplerFactor(factor);
+}
+
+DistanceModel Sequence::getDistanceModel() const
+{
+ return m_sequence->getDistanceModel();
+}
+
+void Sequence::setDistanceModel(DistanceModel model)
+{
+ m_sequence->setDistanceModel(model);
+}
+
+AnimateableProperty* Sequence::getAnimProperty(AnimateablePropertyType type)
+{
+ return m_sequence->getAnimProperty(type);
+}
+
+std::shared_ptr<SequenceEntry> Sequence::add(std::shared_ptr<ISound> sound, float begin, float end, float skip)
+{
+ return m_sequence->add(sound, begin, end, skip);
+}
+
+void Sequence::remove(std::shared_ptr<SequenceEntry> entry)
+{
+ m_sequence->remove(entry);
+}
+
+std::shared_ptr<IReader> Sequence::createQualityReader()
+{
+ return std::shared_ptr<IReader>(new SequenceReader(m_sequence, true));
+}
+
+std::shared_ptr<IReader> Sequence::createReader()
+{
+ return std::shared_ptr<IReader>(new SequenceReader(m_sequence));
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/sequence/SequenceData.cpp b/extern/audaspace/src/sequence/SequenceData.cpp
new file mode 100644
index 00000000000..fb920acc1a8
--- /dev/null
+++ b/extern/audaspace/src/sequence/SequenceData.cpp
@@ -0,0 +1,172 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "sequence/SequenceData.h"
+#include "sequence/SequenceReader.h"
+#include "sequence/SequenceEntry.h"
+
+#include <mutex>
+
+AUD_NAMESPACE_BEGIN
+
+SequenceData::SequenceData(Specs specs, float fps, bool muted) :
+ m_specs(specs),
+ m_status(0),
+ m_entry_status(0),
+ m_id(0),
+ m_muted(muted),
+ m_fps(fps),
+ m_speed_of_sound(343.3f),
+ m_doppler_factor(1),
+ m_distance_model(DISTANCE_MODEL_INVERSE_CLAMPED),
+ m_volume(1, 1.0f),
+ m_location(3),
+ m_orientation(4)
+{
+ Quaternion q;
+ m_orientation.write(q.get());
+ float f = 1;
+ m_volume.write(&f);
+}
+
+SequenceData::~SequenceData()
+{
+}
+
+void SequenceData::lock()
+{
+ m_mutex.lock();
+}
+
+void SequenceData::unlock()
+{
+ m_mutex.unlock();
+}
+
+Specs SequenceData::getSpecs()
+{
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ return m_specs;
+}
+
+void SequenceData::setSpecs(Specs specs)
+{
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ m_specs = specs;
+ m_status++;
+}
+
+float SequenceData::getFPS() const
+{
+ return m_fps;
+}
+
+void SequenceData::setFPS(float fps)
+{
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ m_fps = fps;
+}
+
+void SequenceData::mute(bool muted)
+{
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ m_muted = muted;
+}
+
+bool SequenceData::isMuted() const
+{
+ return m_muted;
+}
+
+float SequenceData::getSpeedOfSound() const
+{
+ return m_speed_of_sound;
+}
+
+void SequenceData::setSpeedOfSound(float speed)
+{
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ m_speed_of_sound = speed;
+ m_status++;
+}
+
+float SequenceData::getDopplerFactor() const
+{
+ return m_doppler_factor;
+}
+
+void SequenceData::setDopplerFactor(float factor)
+{
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ m_doppler_factor = factor;
+ m_status++;
+}
+
+DistanceModel SequenceData::getDistanceModel() const
+{
+ return m_distance_model;
+}
+
+void SequenceData::setDistanceModel(DistanceModel model)
+{
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ m_distance_model = model;
+ m_status++;
+}
+
+AnimateableProperty* SequenceData::getAnimProperty(AnimateablePropertyType type)
+{
+ switch(type)
+ {
+ case AP_VOLUME:
+ return &m_volume;
+ case AP_LOCATION:
+ return &m_location;
+ case AP_ORIENTATION:
+ return &m_orientation;
+ default:
+ return nullptr;
+ }
+}
+
+std::shared_ptr<SequenceEntry> SequenceData::add(std::shared_ptr<ISound> sound, float begin, float end, float skip)
+{
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ std::shared_ptr<SequenceEntry> entry = std::shared_ptr<SequenceEntry>(new SequenceEntry(sound, begin, end, skip, m_id++));
+
+ m_entries.push_back(entry);
+ m_entry_status++;
+
+ return entry;
+}
+
+void SequenceData::remove(std::shared_ptr<SequenceEntry> entry)
+{
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ m_entries.remove(entry);
+ m_entry_status++;
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/sequence/SequenceEntry.cpp b/extern/audaspace/src/sequence/SequenceEntry.cpp
new file mode 100644
index 00000000000..de538199d7d
--- /dev/null
+++ b/extern/audaspace/src/sequence/SequenceEntry.cpp
@@ -0,0 +1,256 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "sequence/SequenceEntry.h"
+#include "sequence/SequenceReader.h"
+
+#include <limits>
+#include <mutex>
+
+AUD_NAMESPACE_BEGIN
+
+SequenceEntry::SequenceEntry(std::shared_ptr<ISound> sound, float begin, float end, float skip, int id) :
+ m_status(0),
+ m_pos_status(1),
+ m_sound_status(0),
+ m_id(id),
+ m_sound(sound),
+ m_begin(begin),
+ m_end(end),
+ m_skip(skip),
+ m_muted(false),
+ m_relative(true),
+ m_volume_max(1.0f),
+ m_volume_min(0),
+ m_distance_max(std::numeric_limits<float>::max()),
+ m_distance_reference(1.0f),
+ m_attenuation(1.0f),
+ m_cone_angle_outer(360),
+ m_cone_angle_inner(360),
+ m_cone_volume_outer(0),
+ m_volume(1, 1.0f),
+ m_pitch(1, 1.0f),
+ m_location(3),
+ m_orientation(4)
+{
+ Quaternion q;
+ m_orientation.write(q.get());
+ float f = 1;
+ m_volume.write(&f);
+ m_pitch.write(&f);
+}
+
+SequenceEntry::~SequenceEntry()
+{
+}
+
+void SequenceEntry::lock()
+{
+ m_mutex.lock();
+}
+
+void SequenceEntry::unlock()
+{
+ m_mutex.unlock();
+}
+
+std::shared_ptr<ISound> SequenceEntry::getSound()
+{
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+ return m_sound;
+}
+
+void SequenceEntry::setSound(std::shared_ptr<ISound> sound)
+{
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ if(m_sound.get() != sound.get())
+ {
+ m_sound = sound;
+ m_sound_status++;
+ }
+}
+
+void SequenceEntry::move(float begin, float end, float skip)
+{
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ if(m_begin != begin || m_skip != skip || m_end != end)
+ {
+ m_begin = begin;
+ m_skip = skip;
+ m_end = end;
+ m_pos_status++;
+ }
+}
+
+bool SequenceEntry::isMuted()
+{
+ return m_muted;
+}
+
+void SequenceEntry::mute(bool mute)
+{
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ m_muted = mute;
+}
+
+int SequenceEntry::getID() const
+{
+ return m_id;
+}
+
+AnimateableProperty* SequenceEntry::getAnimProperty(AnimateablePropertyType type)
+{
+ switch(type)
+ {
+ case AP_VOLUME:
+ return &m_volume;
+ case AP_PITCH:
+ return &m_pitch;
+ case AP_PANNING:
+ return &m_panning;
+ case AP_LOCATION:
+ return &m_location;
+ case AP_ORIENTATION:
+ return &m_orientation;
+ default:
+ return nullptr;
+ }
+}
+
+bool SequenceEntry::isRelative()
+{
+ return m_relative;
+}
+
+void SequenceEntry::setRelative(bool relative)
+{
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ if(m_relative != relative)
+ {
+ m_relative = relative;
+ m_status++;
+ }
+}
+
+float SequenceEntry::getVolumeMaximum()
+{
+ return m_volume_max;
+}
+
+void SequenceEntry::setVolumeMaximum(float volume)
+{
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ m_volume_max = volume;
+ m_status++;
+}
+
+float SequenceEntry::getVolumeMinimum()
+{
+ return m_volume_min;
+}
+
+void SequenceEntry::setVolumeMinimum(float volume)
+{
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ m_volume_min = volume;
+ m_status++;
+}
+
+float SequenceEntry::getDistanceMaximum()
+{
+ return m_distance_max;
+}
+
+void SequenceEntry::setDistanceMaximum(float distance)
+{
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ m_distance_max = distance;
+ m_status++;
+}
+
+float SequenceEntry::getDistanceReference()
+{
+ return m_distance_reference;
+}
+
+void SequenceEntry::setDistanceReference(float distance)
+{
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ m_distance_reference = distance;
+ m_status++;
+}
+
+float SequenceEntry::getAttenuation()
+{
+ return m_attenuation;
+}
+
+void SequenceEntry::setAttenuation(float factor)
+{
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ m_attenuation = factor;
+ m_status++;
+}
+
+float SequenceEntry::getConeAngleOuter()
+{
+ return m_cone_angle_outer;
+}
+
+void SequenceEntry::setConeAngleOuter(float angle)
+{
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ m_cone_angle_outer = angle;
+ m_status++;
+}
+
+float SequenceEntry::getConeAngleInner()
+{
+ return m_cone_angle_inner;
+}
+
+void SequenceEntry::setConeAngleInner(float angle)
+{
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ m_cone_angle_inner = angle;
+ m_status++;
+}
+
+float SequenceEntry::getConeVolumeOuter()
+{
+ return m_cone_volume_outer;
+}
+
+void SequenceEntry::setConeVolumeOuter(float volume)
+{
+ std::lock_guard<std::recursive_mutex> lock(m_mutex);
+
+ m_cone_volume_outer = volume;
+ m_status++;
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/sequence/SequenceHandle.cpp b/extern/audaspace/src/sequence/SequenceHandle.cpp
new file mode 100644
index 00000000000..140b1fbd94a
--- /dev/null
+++ b/extern/audaspace/src/sequence/SequenceHandle.cpp
@@ -0,0 +1,253 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "SequenceHandle.h"
+#include "sequence/SequenceEntry.h"
+#include "devices/ReadDevice.h"
+#include "Exception.h"
+
+#include <mutex>
+
+#define KEEP_TIME 10
+
+AUD_NAMESPACE_BEGIN
+
+void SequenceHandle::start()
+{
+ // we already tried to start, aborting
+ if(!m_valid)
+ return;
+
+ // in case the sound is playing, we need to stop first
+ stop();
+
+ std::lock_guard<ILockable> lock(*m_entry);
+
+ // let's try playing
+ if(m_entry->m_sound.get())
+ {
+ try
+ {
+ m_handle = m_device.play(m_entry->m_sound, true);
+ m_3dhandle = std::dynamic_pointer_cast<I3DHandle>(m_handle);
+ }
+ catch(Exception&)
+ {
+ // handle stays invalid in case we get an exception
+ }
+
+ // after starting we have to set the properties, so let's ensure that
+ m_status--;
+ }
+
+ // if the sound could not be played, we invalidate
+ m_valid = m_handle.get();
+}
+
+bool SequenceHandle::updatePosition(float position)
+{
+ std::lock_guard<ILockable> lock(*m_entry);
+
+ if(m_handle.get())
+ {
+ // we currently have a handle, let's check where we are
+ if(position >= m_entry->m_end)
+ {
+ if(position >= m_entry->m_end + KEEP_TIME)
+ // far end, stopping
+ stop();
+ else
+ {
+ // close end, just pausing
+ m_handle->pause();
+ return true;
+ }
+ }
+ else if(position >= m_entry->m_begin)
+ {
+ // inside, resuming
+ m_handle->resume();
+ return true;
+ }
+ else
+ {
+ if(position < m_entry->m_begin - KEEP_TIME)
+ // far beginning, stopping
+ stop();
+ else
+ {
+ // close beginning, just pausing
+ m_handle->pause();
+ return true;
+ }
+ }
+ }
+ else
+ {
+ // we don't have a handle, let's start if we should be playing
+ if(position >= m_entry->m_begin && position <= m_entry->m_end)
+ {
+ start();
+ return m_valid;
+ }
+ }
+
+ return false;
+}
+
+SequenceHandle::SequenceHandle(std::shared_ptr<SequenceEntry> entry, ReadDevice& device) :
+ m_entry(entry),
+ m_valid(true),
+ m_status(0),
+ m_pos_status(0),
+ m_sound_status(0),
+ m_device(device)
+{
+}
+
+SequenceHandle::~SequenceHandle()
+{
+ stop();
+}
+
+int SequenceHandle::compare(std::shared_ptr<SequenceEntry> entry) const
+{
+ if(m_entry->getID() < entry->getID())
+ return -1;
+ else if(m_entry->getID() == entry->getID())
+ return 0;
+ return 1;
+}
+
+void SequenceHandle::stop()
+{
+ if(m_handle.get())
+ m_handle->stop();
+ m_handle = nullptr;
+ m_3dhandle = nullptr;
+}
+
+void SequenceHandle::update(float position, float frame, float fps)
+{
+ if(m_sound_status != m_entry->m_sound_status)
+ {
+ // if a new sound has been set, it's possible to get valid again!
+ m_sound_status = m_entry->m_sound_status;
+ m_valid = true;
+
+ // stop whatever sound has been playing
+ stop();
+
+ // seek starts and seeks to the correct position
+ if(!seek(position))
+ // no handle, aborting
+ return;
+ }
+ else
+ {
+ if(!m_valid)
+ // invalid, aborting
+ return;
+
+ if(m_handle.get())
+ {
+ // we have a handle, let's update the position
+ if(!updatePosition(position))
+ // lost handle, aborting
+ return;
+ }
+ else
+ {
+ // we don't have a handle, let's see if we can start
+ if(!seek(position))
+ return;
+ }
+ }
+
+ std::lock_guard<ILockable> lock(*m_entry);
+ if(m_pos_status != m_entry->m_pos_status)
+ {
+ m_pos_status = m_entry->m_pos_status;
+
+ // position changed, need to seek
+ if(!seek(position))
+ // lost handle, aborting
+ return;
+ }
+
+ // so far everything alright and handle is there, let's keep going
+
+ if(m_status != m_entry->m_status)
+ {
+ m_3dhandle->setRelative(m_entry->m_relative);
+ m_3dhandle->setVolumeMaximum(m_entry->m_volume_max);
+ m_3dhandle->setVolumeMinimum(m_entry->m_volume_min);
+ m_3dhandle->setDistanceMaximum(m_entry->m_distance_max);
+ m_3dhandle->setDistanceReference(m_entry->m_distance_reference);
+ m_3dhandle->setAttenuation(m_entry->m_attenuation);
+ m_3dhandle->setConeAngleOuter(m_entry->m_cone_angle_outer);
+ m_3dhandle->setConeAngleInner(m_entry->m_cone_angle_inner);
+ m_3dhandle->setConeVolumeOuter(m_entry->m_cone_volume_outer);
+
+ m_status = m_entry->m_status;
+ }
+
+ float value;
+
+ m_entry->m_volume.read(frame, &value);
+ m_handle->setVolume(value);
+ m_entry->m_pitch.read(frame, &value);
+ m_handle->setPitch(value);
+ m_entry->m_panning.read(frame, &value);
+ SoftwareDevice::setPanning(m_handle.get(), value);
+
+ Vector3 v, v2;
+ Quaternion q;
+
+ m_entry->m_orientation.read(frame, q.get());
+ m_3dhandle->setOrientation(q);
+ m_entry->m_location.read(frame, v.get());
+ m_3dhandle->setLocation(v);
+ m_entry->m_location.read(frame + 1, v2.get());
+ v2 -= v;
+ m_3dhandle->setVelocity(v2 * fps);
+
+ if(m_entry->m_muted)
+ m_handle->setVolume(0);
+}
+
+bool SequenceHandle::seek(float position)
+{
+ if(!m_valid)
+ // sound not valid, aborting
+ return false;
+
+ if(!updatePosition(position))
+ // no handle, aborting
+ return false;
+
+ std::lock_guard<ILockable> lock(*m_entry);
+ float seekpos = position - m_entry->m_begin;
+ if(seekpos < 0)
+ seekpos = 0;
+ seekpos += m_entry->m_skip;
+ m_handle->setPitch(1.0f);
+ m_handle->seek(seekpos);
+
+ return true;
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/sequence/SequenceHandle.h b/extern/audaspace/src/sequence/SequenceHandle.h
new file mode 100644
index 00000000000..9a77489a8f8
--- /dev/null
+++ b/extern/audaspace/src/sequence/SequenceHandle.h
@@ -0,0 +1,117 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+#include "Audaspace.h"
+
+#include <memory>
+
+AUD_NAMESPACE_BEGIN
+
+class ReadDevice;
+class IHandle;
+class I3DHandle;
+class SequenceEntry;
+
+/**
+ * Represents a playing sequenced entry.
+ */
+class SequenceHandle
+{
+private:
+ /// The entry this handle belongs to.
+ std::shared_ptr<SequenceEntry> m_entry;
+
+ /// The handle in the read device.
+ std::shared_ptr<IHandle> m_handle;
+
+ /// The 3D handle in the read device.
+ std::shared_ptr<I3DHandle> m_3dhandle;
+
+ /// Whether the sound is playable.
+ bool m_valid;
+
+ /// The last read status from the entry.
+ int m_status;
+
+ /// The last position status from the entry.
+ int m_pos_status;
+
+ /// The last sound status from the entry.
+ int m_sound_status;
+
+ /// The read device this handle is played on.
+ ReadDevice& m_device;
+
+ // delete copy constructor and operator=
+ SequenceHandle(const SequenceHandle&) = delete;
+ SequenceHandle& operator=(const SequenceHandle&) = delete;
+
+ /**
+ * Starts playing back the handle.
+ */
+ void start();
+
+ /**
+ * Updates the handle state depending on position.
+ * \param position Current playback position in seconds.
+ * \return Whether the handle is valid.
+ */
+ bool updatePosition(float position);
+
+public:
+ /**
+ * Creates a new sequenced handle.
+ * \param entry The entry this handle plays.
+ * \param device The read device to play on.
+ */
+ SequenceHandle(std::shared_ptr<SequenceEntry> entry, ReadDevice& device);
+
+ /**
+ * Destroys the handle.
+ */
+ ~SequenceHandle();
+
+ /**
+ * Compares whether this handle is playing the same entry as supplied.
+ * \param entry The entry to compare to.
+ * \return Whether the entries ID is smaller, equal or bigger.
+ */
+ int compare(std::shared_ptr<SequenceEntry> entry) const;
+
+ /**
+ * Stops playing back the handle.
+ */
+ void stop();
+
+ /**
+ * Updates the handle for playback.
+ * \param position The current time during playback.
+ * \param frame The current frame during playback.
+ * \param fps The animation frames per second.
+ */
+ void update(float position, float frame, float fps);
+
+ /**
+ * Seeks the handle to a specific time position.
+ * \param position The time to seek to.
+ * \return Whether the handle is valid.
+ */
+ bool seek(float position);
+};
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/sequence/SequenceReader.cpp b/extern/audaspace/src/sequence/SequenceReader.cpp
new file mode 100644
index 00000000000..38647aaeadf
--- /dev/null
+++ b/extern/audaspace/src/sequence/SequenceReader.cpp
@@ -0,0 +1,198 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "sequence/SequenceReader.h"
+#include "sequence/SequenceData.h"
+#include "Exception.h"
+#include "SequenceHandle.h"
+
+#include <algorithm>
+#include <mutex>
+#include <cmath>
+
+AUD_NAMESPACE_BEGIN
+
+SequenceReader::SequenceReader(std::shared_ptr<SequenceData> sequence, bool quality) :
+ m_position(0), m_device(sequence->m_specs), m_sequence(sequence), m_status(0), m_entry_status(0)
+{
+ m_device.setQuality(quality);
+}
+
+SequenceReader::~SequenceReader()
+{
+}
+
+bool SequenceReader::isSeekable() const
+{
+ return true;
+}
+
+void SequenceReader::seek(int position)
+{
+ if(position < 0)
+ return;
+
+ m_position = position;
+
+ for(auto& handle : m_handles)
+ {
+ handle->seek(position / m_sequence->m_specs.rate);
+ }
+}
+
+int SequenceReader::getLength() const
+{
+ return -1;
+}
+
+int SequenceReader::getPosition() const
+{
+ return m_position;
+}
+
+Specs SequenceReader::getSpecs() const
+{
+ return m_sequence->m_specs;
+}
+
+void SequenceReader::read(int& length, bool& eos, sample_t* buffer)
+{
+ std::lock_guard<ILockable> lock(*m_sequence);
+
+ if(m_sequence->m_status != m_status)
+ {
+ m_device.changeSpecs(m_sequence->m_specs);
+ m_device.setSpeedOfSound(m_sequence->m_speed_of_sound);
+ m_device.setDistanceModel(m_sequence->m_distance_model);
+ m_device.setDopplerFactor(m_sequence->m_doppler_factor);
+
+ m_status = m_sequence->m_status;
+ }
+
+ if(m_sequence->m_entry_status != m_entry_status)
+ {
+ std::list<std::shared_ptr<SequenceHandle> > handles;
+
+ auto hit = m_handles.begin();
+ auto eit = m_sequence->m_entries.begin();
+
+ int result;
+ std::shared_ptr<SequenceHandle> handle;
+
+ while(hit != m_handles.end() && eit != m_sequence->m_entries.end())
+ {
+ handle = *hit;
+ std::shared_ptr<SequenceEntry> entry = *eit;
+
+ result = handle->compare(entry);
+
+ if(result < 0)
+ {
+ try
+ {
+ handle = std::shared_ptr<SequenceHandle>(new SequenceHandle(entry, m_device));
+ handles.push_back(handle);
+ }
+ catch(Exception&)
+ {
+ }
+ eit++;
+ }
+ else if(result == 0)
+ {
+ handles.push_back(handle);
+ hit++;
+ eit++;
+ }
+ else
+ {
+ handle->stop();
+ hit++;
+ }
+ }
+
+ while(hit != m_handles.end())
+ {
+ (*hit)->stop();
+ hit++;
+ }
+
+ while(eit != m_sequence->m_entries.end())
+ {
+ try
+ {
+ handle = std::shared_ptr<SequenceHandle>(new SequenceHandle(*eit, m_device));
+ handles.push_back(handle);
+ }
+ catch(Exception&)
+ {
+ }
+ eit++;
+ }
+
+ m_handles = handles;
+
+ m_entry_status = m_sequence->m_entry_status;
+ }
+
+ Specs specs = m_sequence->m_specs;
+ int pos = 0;
+ float time = float(m_position) / float(specs.rate);
+ float volume, frame;
+ int len, cfra;
+ Vector3 v, v2;
+ Quaternion q;
+
+
+ while(pos < length)
+ {
+ frame = time * m_sequence->m_fps;
+ cfra = int(std::floor(frame));
+
+ len = int(std::ceil((cfra + 1) / m_sequence->m_fps * specs.rate)) - m_position;
+ len = std::min(length - pos, len);
+ len = std::max(len, 1);
+
+ for(auto& handle : m_handles)
+ {
+ handle->update(time, frame, m_sequence->m_fps);
+ }
+
+ m_sequence->m_volume.read(frame, &volume);
+ if(m_sequence->m_muted)
+ volume = 0.0f;
+ m_device.setVolume(volume);
+
+ m_sequence->m_orientation.read(frame, q.get());
+ m_device.setListenerOrientation(q);
+ m_sequence->m_location.read(frame, v.get());
+ m_device.setListenerLocation(v);
+ m_sequence->m_location.read(frame + 1, v2.get());
+ v2 -= v;
+ m_device.setListenerVelocity(v2 * m_sequence->m_fps);
+
+ m_device.read(reinterpret_cast<data_t*>(buffer + specs.channels * pos), len);
+
+ pos += len;
+ time += float(len) / float(specs.rate);
+ }
+
+ m_position += length;
+
+ eos = false;
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/sequence/Superpose.cpp b/extern/audaspace/src/sequence/Superpose.cpp
new file mode 100644
index 00000000000..3d13f7db627
--- /dev/null
+++ b/extern/audaspace/src/sequence/Superpose.cpp
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "sequence/Superpose.h"
+#include "sequence/SuperposeReader.h"
+
+AUD_NAMESPACE_BEGIN
+
+Superpose::Superpose(std::shared_ptr<ISound> sound1, std::shared_ptr<ISound> sound2) :
+ m_sound1(sound1), m_sound2(sound2)
+{
+}
+
+std::shared_ptr<IReader> Superpose::createReader()
+{
+ std::shared_ptr<IReader> reader1 = m_sound1->createReader();
+ std::shared_ptr<IReader> reader2 = m_sound2->createReader();
+
+ return std::shared_ptr<IReader>(new SuperposeReader(reader1, reader2));
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/sequence/SuperposeReader.cpp b/extern/audaspace/src/sequence/SuperposeReader.cpp
new file mode 100644
index 00000000000..9206a7a96ef
--- /dev/null
+++ b/extern/audaspace/src/sequence/SuperposeReader.cpp
@@ -0,0 +1,95 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "sequence/SuperposeReader.h"
+#include "Exception.h"
+
+#include <algorithm>
+#include <cstring>
+
+AUD_NAMESPACE_BEGIN
+
+SuperposeReader::SuperposeReader(std::shared_ptr<IReader> reader1, std::shared_ptr<IReader> reader2) :
+ m_reader1(reader1), m_reader2(reader2)
+{
+}
+
+SuperposeReader::~SuperposeReader()
+{
+}
+
+bool SuperposeReader::isSeekable() const
+{
+ return m_reader1->isSeekable() && m_reader2->isSeekable();
+}
+
+void SuperposeReader::seek(int position)
+{
+ m_reader1->seek(position);
+ m_reader2->seek(position);
+}
+
+int SuperposeReader::getLength() const
+{
+ int len1 = m_reader1->getLength();
+ int len2 = m_reader2->getLength();
+ if((len1 < 0) || (len2 < 0))
+ return -1;
+ return std::min(len1, len2);
+}
+
+int SuperposeReader::getPosition() const
+{
+ int pos1 = m_reader1->getPosition();
+ int pos2 = m_reader2->getPosition();
+ return std::max(pos1, pos2);
+}
+
+Specs SuperposeReader::getSpecs() const
+{
+ return m_reader1->getSpecs();
+}
+
+void SuperposeReader::read(int& length, bool& eos, sample_t* buffer)
+{
+ Specs specs = m_reader1->getSpecs();
+ Specs s2 = m_reader2->getSpecs();
+ if(!AUD_COMPARE_SPECS(specs, s2))
+ AUD_THROW(StateException, "Two readers with different specifiactions cannot be superposed.");
+
+ int samplesize = AUD_SAMPLE_SIZE(specs);
+
+ m_buffer.assureSize(length * samplesize);
+
+ int len1 = length;
+ m_reader1->read(len1, eos, buffer);
+
+ if(len1 < length)
+ std::memset(buffer + len1 * specs.channels, 0, (length - len1) * samplesize);
+
+ int len2 = length;
+ bool eos2;
+ sample_t* buf = m_buffer.getBuffer();
+ m_reader2->read(len2, eos2, buf);
+
+ for(int i = 0; i < len2 * specs.channels; i++)
+ buffer[i] += buf[i];
+
+ length = std::max(len1, len2);
+ eos &= eos2;
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/util/Barrier.cpp b/extern/audaspace/src/util/Barrier.cpp
new file mode 100644
index 00000000000..3347a38092b
--- /dev/null
+++ b/extern/audaspace/src/util/Barrier.cpp
@@ -0,0 +1,42 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "util/Barrier.h"
+
+AUD_NAMESPACE_BEGIN
+Barrier::Barrier(unsigned int count) :
+ m_threshold(count), m_count(count), m_generation(0)
+{
+}
+
+Barrier::~Barrier()
+{
+}
+
+void Barrier::wait()
+{
+ std::unique_lock<std::mutex> lck(m_mutex);
+ int gen = m_generation;
+ if(!--m_count)
+ {
+ m_count = m_threshold;
+ m_generation++;
+ m_condition.notify_all();
+ }
+ else
+ m_condition.wait(lck, [this, gen] { return gen != m_generation; });
+}
+AUD_NAMESPACE_END \ No newline at end of file
diff --git a/extern/audaspace/src/util/Buffer.cpp b/extern/audaspace/src/util/Buffer.cpp
new file mode 100644
index 00000000000..d212278cacc
--- /dev/null
+++ b/extern/audaspace/src/util/Buffer.cpp
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "util/Buffer.h"
+
+#include <algorithm>
+#include <cstring>
+#include <cstdlib>
+
+#define ALIGNMENT 32
+#define ALIGN(a) (a + ALIGNMENT - ((long long)a & (ALIGNMENT-1)))
+
+AUD_NAMESPACE_BEGIN
+
+Buffer::Buffer(int size)
+{
+ m_size = size;
+ m_buffer = (data_t*) std::malloc(size + ALIGNMENT);
+}
+
+Buffer::~Buffer()
+{
+ std::free(m_buffer);
+}
+
+sample_t* Buffer::getBuffer() const
+{
+ return (sample_t*) ALIGN(m_buffer);
+}
+
+int Buffer::getSize() const
+{
+ return m_size;
+}
+
+void Buffer::resize(int size, bool keep)
+{
+ if(keep)
+ {
+ data_t* buffer = (data_t*) std::malloc(size + ALIGNMENT);
+
+ std::memcpy(ALIGN(buffer), ALIGN(m_buffer), std::min(size, m_size));
+
+ std::free(m_buffer);
+ m_buffer = buffer;
+ }
+ else
+ m_buffer = (data_t*) std::realloc(m_buffer, size + ALIGNMENT);
+
+ m_size = size;
+}
+
+void Buffer::assureSize(int size, bool keep)
+{
+ if(m_size < size)
+ resize(size, keep);
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/util/BufferReader.cpp b/extern/audaspace/src/util/BufferReader.cpp
new file mode 100644
index 00000000000..37744420ab8
--- /dev/null
+++ b/extern/audaspace/src/util/BufferReader.cpp
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "util/BufferReader.h"
+#include "util/Buffer.h"
+
+#include <cstring>
+
+AUD_NAMESPACE_BEGIN
+
+BufferReader::BufferReader(std::shared_ptr<Buffer> buffer,
+ Specs specs) :
+ m_position(0), m_buffer(buffer), m_specs(specs)
+{
+}
+
+bool BufferReader::isSeekable() const
+{
+ return true;
+}
+
+void BufferReader::seek(int position)
+{
+ m_position = position;
+}
+
+int BufferReader::getLength() const
+{
+ return m_buffer->getSize() / AUD_SAMPLE_SIZE(m_specs);
+}
+
+int BufferReader::getPosition() const
+{
+ return m_position;
+}
+
+Specs BufferReader::getSpecs() const
+{
+ return m_specs;
+}
+
+void BufferReader::read(int& length, bool& eos, sample_t* buffer)
+{
+ eos = false;
+
+ int sample_size = AUD_SAMPLE_SIZE(m_specs);
+
+ sample_t* buf = m_buffer->getBuffer() + m_position * m_specs.channels;
+
+ // in case the end of the buffer is reached
+ if(m_buffer->getSize() < (m_position + length) * sample_size)
+ {
+ length = m_buffer->getSize() / sample_size - m_position;
+ eos = true;
+ }
+
+ if(length < 0)
+ {
+ length = 0;
+ return;
+ }
+
+ m_position += length;
+ std::memcpy(buffer, buf, length * sample_size);
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/util/FFTPlan.cpp b/extern/audaspace/src/util/FFTPlan.cpp
new file mode 100644
index 00000000000..5e99dbff247
--- /dev/null
+++ b/extern/audaspace/src/util/FFTPlan.cpp
@@ -0,0 +1,66 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "util/FFTPlan.h"
+
+AUD_NAMESPACE_BEGIN
+FFTPlan::FFTPlan(double measureTime) :
+ FFTPlan(DEFAULT_N, measureTime)
+{
+}
+
+FFTPlan::FFTPlan(int n, double measureTime) :
+ m_N(n), m_bufferSize(((n/2)+1)*2*sizeof(fftwf_complex))
+{
+ fftwf_set_timelimit(measureTime);
+ void* buf = fftwf_malloc(m_bufferSize);
+ m_fftPlanR2C = fftwf_plan_dft_r2c_1d(m_N, (float*)buf, (fftwf_complex*)buf, FFTW_EXHAUSTIVE);
+ m_fftPlanC2R = fftwf_plan_dft_c2r_1d(m_N, (fftwf_complex*)buf, (float*)buf, FFTW_EXHAUSTIVE);
+ fftwf_free(buf);
+}
+
+FFTPlan::~FFTPlan()
+{
+ fftwf_destroy_plan(m_fftPlanC2R);
+ fftwf_destroy_plan(m_fftPlanR2C);
+}
+
+int FFTPlan::getSize()
+{
+ return m_N;
+}
+
+void FFTPlan::FFT(void* buffer)
+{
+ fftwf_execute_dft_r2c(m_fftPlanR2C, (float*)buffer, (fftwf_complex*)buffer);
+}
+
+void FFTPlan::IFFT(void* buffer)
+{
+ fftwf_execute_dft_c2r(m_fftPlanC2R, (fftwf_complex*)buffer, (float*)buffer);
+}
+
+void* FFTPlan::getBuffer()
+{
+ return fftwf_malloc(m_bufferSize);
+}
+
+void FFTPlan::freeBuffer(void* buffer)
+{
+ fftwf_free(buffer);
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/util/StreamBuffer.cpp b/extern/audaspace/src/util/StreamBuffer.cpp
new file mode 100644
index 00000000000..b87b363377d
--- /dev/null
+++ b/extern/audaspace/src/util/StreamBuffer.cpp
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#include "util/StreamBuffer.h"
+#include "util/BufferReader.h"
+#include "util/Buffer.h"
+
+// 5 sec * 48000 samples/sec * 4 bytes/sample * 6 channels
+#define BUFFER_RESIZE_BYTES 5760000
+
+AUD_NAMESPACE_BEGIN
+
+StreamBuffer::StreamBuffer(std::shared_ptr<ISound> sound) :
+ m_buffer(new Buffer())
+{
+ std::shared_ptr<IReader> reader = sound->createReader();
+
+ m_specs = reader->getSpecs();
+
+ int sample_size = AUD_SAMPLE_SIZE(m_specs);
+ int length;
+ int index = 0;
+ bool eos = false;
+
+ // get an approximated size if possible
+ int size = reader->getLength();
+
+ if(size <= 0)
+ size = BUFFER_RESIZE_BYTES / sample_size;
+ else
+ size += m_specs.rate;
+
+ // as long as the end of the stream is not reached
+ while(!eos)
+ {
+ // increase
+ m_buffer->resize(size*sample_size, true);
+
+ // read more
+ length = size-index;
+ reader->read(length, eos, m_buffer->getBuffer() + index * m_specs.channels);
+ if(index == m_buffer->getSize() / sample_size)
+ size += BUFFER_RESIZE_BYTES / sample_size;
+ index += length;
+ }
+
+ m_buffer->resize(index * sample_size, true);
+}
+
+StreamBuffer::StreamBuffer(std::shared_ptr<Buffer> buffer, Specs specs) :
+ m_buffer(buffer), m_specs(specs)
+{
+}
+
+std::shared_ptr<Buffer> StreamBuffer::getBuffer()
+{
+ return m_buffer;
+}
+
+Specs StreamBuffer::getSpecs()
+{
+ return m_specs;
+}
+
+std::shared_ptr<IReader> StreamBuffer::createReader()
+{
+ return std::shared_ptr<IReader>(new BufferReader(m_buffer, m_specs));
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/audaspace/src/util/ThreadPool.cpp b/extern/audaspace/src/util/ThreadPool.cpp
new file mode 100644
index 00000000000..74051902c3b
--- /dev/null
+++ b/extern/audaspace/src/util/ThreadPool.cpp
@@ -0,0 +1,60 @@
+/*******************************************************************************
+* Copyright 2015-2016 Juan Francisco Crespo Galán
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+******************************************************************************/
+
+#include "util/ThreadPool.h"
+
+AUD_NAMESPACE_BEGIN
+
+ThreadPool::ThreadPool(unsigned int count) :
+ m_stopFlag(false), m_numThreads(count)
+{
+ for(unsigned int i = 0; i < count; i++)
+ m_threads.emplace_back(&ThreadPool::threadFunction, this);
+}
+
+ThreadPool::~ThreadPool()
+{
+ m_mutex.lock();
+ m_stopFlag = true;
+ m_mutex.unlock();
+ m_condition.notify_all();
+ for(unsigned int i = 0; i < m_threads.size(); i++)
+ m_threads[i].join();
+}
+
+unsigned int ThreadPool::getNumOfThreads()
+{
+ return m_numThreads;
+}
+
+void ThreadPool::threadFunction()
+{
+ while(true)
+ {
+ std::function<void()> task;
+ {
+ std::unique_lock<std::mutex> lock(m_mutex);
+ m_condition.wait(lock, [this] { return m_stopFlag || !m_queue.empty(); });
+ if(m_stopFlag && m_queue.empty())
+ return;
+ task = std::move(m_queue.front());
+ this->m_queue.pop();
+ }
+ task();
+ }
+}
+
+AUD_NAMESPACE_END
diff --git a/extern/glew-es/CMakeLists.txt b/extern/glew-es/CMakeLists.txt
index ba80d3f6120..ea25425df81 100644
--- a/extern/glew-es/CMakeLists.txt
+++ b/extern/glew-es/CMakeLists.txt
@@ -49,9 +49,4 @@ set(SRC
add_definitions(${GL_DEFINITIONS})
-if(WITH_GLEW_MX)
- add_definitions(-DGLEW_MX)
-endif()
-
-
blender_add_lib(extern_glew_es "${SRC}" "${INC}" "${INC_SYS}")
diff --git a/extern/glew/CMakeLists.txt b/extern/glew/CMakeLists.txt
index f264b3905be..c9323fa12b2 100644
--- a/extern/glew/CMakeLists.txt
+++ b/extern/glew/CMakeLists.txt
@@ -40,6 +40,7 @@ endif()
set(SRC
src/glew.c
+ include/GL/eglew.h
include/GL/glew.h
include/GL/glxew.h
include/GL/wglew.h
@@ -47,8 +48,4 @@ set(SRC
add_definitions(${GL_DEFINITIONS})
-if(WITH_GLEW_MX)
- add_definitions(-DGLEW_MX)
-endif()
-
blender_add_lib(extern_glew "${SRC}" "${INC}" "${INC_SYS}")
diff --git a/extern/glew/include/GL/eglew.h b/extern/glew/include/GL/eglew.h
new file mode 100644
index 00000000000..aef65c87950
--- /dev/null
+++ b/extern/glew/include/GL/eglew.h
@@ -0,0 +1,2261 @@
+/*
+** The OpenGL Extension Wrangler Library
+** Copyright (C) 2008-2015, Nigel Stewart <nigels[]users sourceforge net>
+** Copyright (C) 2002-2008, Milan Ikits <milan ikits[]ieee org>
+** Copyright (C) 2002-2008, Marcelo E. Magallon <mmagallo[]debian org>
+** Copyright (C) 2002, Lev Povalahev
+** All rights reserved.
+**
+** Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are met:
+**
+** * Redistributions of source code must retain the above copyright notice,
+** this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright notice,
+** this list of conditions and the following disclaimer in the documentation
+** and/or other materials provided with the distribution.
+** * The name of the author may be used to endorse or promote products
+** derived from this software without specific prior written permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+** THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/*
+ * Mesa 3-D graphics library
+ * Version: 7.0
+ *
+ * Copyright (C) 1999-2007 Brian Paul All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+** Copyright (c) 2007 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+
+#ifndef __eglew_h__
+#define __eglew_h__
+#define __EGLEW_H__
+
+#ifdef __eglext_h_
+#error eglext.h included before eglew.h
+#endif
+
+#if defined(__egl_h_)
+#error egl.h included before eglew.h
+#endif
+
+#define __eglext_h_
+
+#define __egl_h_
+
+#ifndef EGLAPIENTRY
+#define EGLAPIENTRY
+#endif
+#ifndef EGLAPI
+#define EGLAPI extern
+#endif
+
+/* EGL Types */
+#include <sys/types.h>
+
+#include <KHR/khrplatform.h>
+#include <EGL/eglplatform.h>
+
+#include <GL/glew.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef int32_t EGLint;
+
+typedef unsigned int EGLBoolean;
+typedef void *EGLDisplay;
+typedef void *EGLConfig;
+typedef void *EGLSurface;
+typedef void *EGLContext;
+typedef void (*__eglMustCastToProperFunctionPointerType)(void);
+
+typedef unsigned int EGLenum;
+typedef void *EGLClientBuffer;
+
+typedef void *EGLSync;
+typedef intptr_t EGLAttrib;
+typedef khronos_utime_nanoseconds_t EGLTime;
+typedef void *EGLImage;
+
+typedef void *EGLSyncKHR;
+typedef intptr_t EGLAttribKHR;
+typedef void *EGLLabelKHR;
+typedef void *EGLObjectKHR;
+typedef void (EGLAPIENTRY *EGLDEBUGPROCKHR)(EGLenum error,const char *command,EGLint messageType,EGLLabelKHR threadLabel,EGLLabelKHR objectLabel,const char* message);
+typedef khronos_utime_nanoseconds_t EGLTimeKHR;
+typedef void *EGLImageKHR;
+typedef void *EGLStreamKHR;
+typedef khronos_uint64_t EGLuint64KHR;
+typedef int EGLNativeFileDescriptorKHR;
+typedef khronos_ssize_t EGLsizeiANDROID;
+typedef void (*EGLSetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, const void *value, EGLsizeiANDROID valueSize);
+typedef EGLsizeiANDROID (*EGLGetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, void *value, EGLsizeiANDROID valueSize);
+typedef void *EGLDeviceEXT;
+typedef void *EGLOutputLayerEXT;
+typedef void *EGLOutputPortEXT;
+typedef void *EGLSyncNV;
+typedef khronos_utime_nanoseconds_t EGLTimeNV;
+typedef khronos_utime_nanoseconds_t EGLuint64NV;
+typedef khronos_stime_nanoseconds_t EGLnsecsANDROID;
+
+struct EGLClientPixmapHI;
+
+#define EGL_DONT_CARE ((EGLint)-1)
+
+#define EGL_NO_CONTEXT ((EGLContext)0)
+#define EGL_NO_DISPLAY ((EGLDisplay)0)
+#define EGL_NO_IMAGE ((EGLImage)0)
+#define EGL_NO_SURFACE ((EGLSurface)0)
+#define EGL_NO_SYNC ((EGLSync)0)
+
+#define EGL_UNKNOWN ((EGLint)-1)
+
+#define EGL_DEFAULT_DISPLAY ((EGLNativeDisplayType)0)
+
+EGLAPI __eglMustCastToProperFunctionPointerType EGLAPIENTRY eglGetProcAddress (const char *procname);
+/* ---------------------------- EGL_VERSION_1_0 ---------------------------- */
+
+#ifndef EGL_VERSION_1_0
+#define EGL_VERSION_1_0 1
+
+#define EGL_FALSE 0
+#define EGL_PBUFFER_BIT 0x0001
+#define EGL_TRUE 1
+#define EGL_PIXMAP_BIT 0x0002
+#define EGL_WINDOW_BIT 0x0004
+#define EGL_SUCCESS 0x3000
+#define EGL_NOT_INITIALIZED 0x3001
+#define EGL_BAD_ACCESS 0x3002
+#define EGL_BAD_ALLOC 0x3003
+#define EGL_BAD_ATTRIBUTE 0x3004
+#define EGL_BAD_CONFIG 0x3005
+#define EGL_BAD_CONTEXT 0x3006
+#define EGL_BAD_CURRENT_SURFACE 0x3007
+#define EGL_BAD_DISPLAY 0x3008
+#define EGL_BAD_MATCH 0x3009
+#define EGL_BAD_NATIVE_PIXMAP 0x300A
+#define EGL_BAD_NATIVE_WINDOW 0x300B
+#define EGL_BAD_PARAMETER 0x300C
+#define EGL_BAD_SURFACE 0x300D
+#define EGL_BUFFER_SIZE 0x3020
+#define EGL_ALPHA_SIZE 0x3021
+#define EGL_BLUE_SIZE 0x3022
+#define EGL_GREEN_SIZE 0x3023
+#define EGL_RED_SIZE 0x3024
+#define EGL_DEPTH_SIZE 0x3025
+#define EGL_STENCIL_SIZE 0x3026
+#define EGL_CONFIG_CAVEAT 0x3027
+#define EGL_CONFIG_ID 0x3028
+#define EGL_LEVEL 0x3029
+#define EGL_MAX_PBUFFER_HEIGHT 0x302A
+#define EGL_MAX_PBUFFER_PIXELS 0x302B
+#define EGL_MAX_PBUFFER_WIDTH 0x302C
+#define EGL_NATIVE_RENDERABLE 0x302D
+#define EGL_NATIVE_VISUAL_ID 0x302E
+#define EGL_NATIVE_VISUAL_TYPE 0x302F
+#define EGL_SAMPLES 0x3031
+#define EGL_SAMPLE_BUFFERS 0x3032
+#define EGL_SURFACE_TYPE 0x3033
+#define EGL_TRANSPARENT_TYPE 0x3034
+#define EGL_TRANSPARENT_BLUE_VALUE 0x3035
+#define EGL_TRANSPARENT_GREEN_VALUE 0x3036
+#define EGL_TRANSPARENT_RED_VALUE 0x3037
+#define EGL_NONE 0x3038
+#define EGL_SLOW_CONFIG 0x3050
+#define EGL_NON_CONFORMANT_CONFIG 0x3051
+#define EGL_TRANSPARENT_RGB 0x3052
+#define EGL_VENDOR 0x3053
+#define EGL_VERSION 0x3054
+#define EGL_EXTENSIONS 0x3055
+#define EGL_HEIGHT 0x3056
+#define EGL_WIDTH 0x3057
+#define EGL_LARGEST_PBUFFER 0x3058
+#define EGL_DRAW 0x3059
+#define EGL_READ 0x305A
+#define EGL_CORE_NATIVE_ENGINE 0x305B
+
+typedef EGLBoolean ( * PFNEGLCHOOSECONFIGPROC) (EGLDisplay dpy, const EGLint * attrib_list, EGLConfig * configs, EGLint config_size, EGLint * num_config);
+typedef EGLBoolean ( * PFNEGLCOPYBUFFERSPROC) (EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target);
+typedef EGLContext ( * PFNEGLCREATECONTEXTPROC) (EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint * attrib_list);
+typedef EGLSurface ( * PFNEGLCREATEPBUFFERSURFACEPROC) (EGLDisplay dpy, EGLConfig config, const EGLint * attrib_list);
+typedef EGLSurface ( * PFNEGLCREATEPIXMAPSURFACEPROC) (EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint * attrib_list);
+typedef EGLSurface ( * PFNEGLCREATEWINDOWSURFACEPROC) (EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint * attrib_list);
+typedef EGLBoolean ( * PFNEGLDESTROYCONTEXTPROC) (EGLDisplay dpy, EGLContext ctx);
+typedef EGLBoolean ( * PFNEGLDESTROYSURFACEPROC) (EGLDisplay dpy, EGLSurface surface);
+typedef EGLBoolean ( * PFNEGLGETCONFIGATTRIBPROC) (EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint * value);
+typedef EGLBoolean ( * PFNEGLGETCONFIGSPROC) (EGLDisplay dpy, EGLConfig * configs, EGLint config_size, EGLint * num_config);
+typedef EGLDisplay ( * PFNEGLGETCURRENTDISPLAYPROC) ( void );
+typedef EGLSurface ( * PFNEGLGETCURRENTSURFACEPROC) (EGLint readdraw);
+typedef EGLDisplay ( * PFNEGLGETDISPLAYPROC) (EGLNativeDisplayType display_id);
+typedef EGLint ( * PFNEGLGETERRORPROC) ( void );
+typedef EGLBoolean ( * PFNEGLINITIALIZEPROC) (EGLDisplay dpy, EGLint * major, EGLint * minor);
+typedef EGLBoolean ( * PFNEGLMAKECURRENTPROC) (EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx);
+typedef EGLBoolean ( * PFNEGLQUERYCONTEXTPROC) (EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint * value);
+typedef const char * ( * PFNEGLQUERYSTRINGPROC) (EGLDisplay dpy, EGLint name);
+typedef EGLBoolean ( * PFNEGLQUERYSURFACEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint * value);
+typedef EGLBoolean ( * PFNEGLSWAPBUFFERSPROC) (EGLDisplay dpy, EGLSurface surface);
+typedef EGLBoolean ( * PFNEGLTERMINATEPROC) (EGLDisplay dpy);
+typedef EGLBoolean ( * PFNEGLWAITGLPROC) ( void );
+typedef EGLBoolean ( * PFNEGLWAITNATIVEPROC) (EGLint engine);
+
+#define eglChooseConfig EGLEW_GET_FUN(__eglewChooseConfig)
+#define eglCopyBuffers EGLEW_GET_FUN(__eglewCopyBuffers)
+#define eglCreateContext EGLEW_GET_FUN(__eglewCreateContext)
+#define eglCreatePbufferSurface EGLEW_GET_FUN(__eglewCreatePbufferSurface)
+#define eglCreatePixmapSurface EGLEW_GET_FUN(__eglewCreatePixmapSurface)
+#define eglCreateWindowSurface EGLEW_GET_FUN(__eglewCreateWindowSurface)
+#define eglDestroyContext EGLEW_GET_FUN(__eglewDestroyContext)
+#define eglDestroySurface EGLEW_GET_FUN(__eglewDestroySurface)
+#define eglGetConfigAttrib EGLEW_GET_FUN(__eglewGetConfigAttrib)
+#define eglGetConfigs EGLEW_GET_FUN(__eglewGetConfigs)
+#define eglGetCurrentDisplay EGLEW_GET_FUN(__eglewGetCurrentDisplay)
+#define eglGetCurrentSurface EGLEW_GET_FUN(__eglewGetCurrentSurface)
+#define eglGetDisplay EGLEW_GET_FUN(__eglewGetDisplay)
+#define eglGetError EGLEW_GET_FUN(__eglewGetError)
+#define eglInitialize EGLEW_GET_FUN(__eglewInitialize)
+#define eglMakeCurrent EGLEW_GET_FUN(__eglewMakeCurrent)
+#define eglQueryContext EGLEW_GET_FUN(__eglewQueryContext)
+#define eglQueryString EGLEW_GET_FUN(__eglewQueryString)
+#define eglQuerySurface EGLEW_GET_FUN(__eglewQuerySurface)
+#define eglSwapBuffers EGLEW_GET_FUN(__eglewSwapBuffers)
+#define eglTerminate EGLEW_GET_FUN(__eglewTerminate)
+#define eglWaitGL EGLEW_GET_FUN(__eglewWaitGL)
+#define eglWaitNative EGLEW_GET_FUN(__eglewWaitNative)
+
+#define EGLEW_VERSION_1_0 EGLEW_GET_VAR(__EGLEW_VERSION_1_0)
+
+#endif /* EGL_VERSION_1_0 */
+
+/* ---------------------------- EGL_VERSION_1_1 ---------------------------- */
+
+#ifndef EGL_VERSION_1_1
+#define EGL_VERSION_1_1 1
+
+#define EGL_CONTEXT_LOST 0x300E
+#define EGL_BIND_TO_TEXTURE_RGB 0x3039
+#define EGL_BIND_TO_TEXTURE_RGBA 0x303A
+#define EGL_MIN_SWAP_INTERVAL 0x303B
+#define EGL_MAX_SWAP_INTERVAL 0x303C
+#define EGL_NO_TEXTURE 0x305C
+#define EGL_TEXTURE_RGB 0x305D
+#define EGL_TEXTURE_RGBA 0x305E
+#define EGL_TEXTURE_2D 0x305F
+#define EGL_TEXTURE_FORMAT 0x3080
+#define EGL_TEXTURE_TARGET 0x3081
+#define EGL_MIPMAP_TEXTURE 0x3082
+#define EGL_MIPMAP_LEVEL 0x3083
+#define EGL_BACK_BUFFER 0x3084
+
+typedef EGLBoolean ( * PFNEGLBINDTEXIMAGEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint buffer);
+typedef EGLBoolean ( * PFNEGLRELEASETEXIMAGEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint buffer);
+typedef EGLBoolean ( * PFNEGLSURFACEATTRIBPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value);
+typedef EGLBoolean ( * PFNEGLSWAPINTERVALPROC) (EGLDisplay dpy, EGLint interval);
+
+#define eglBindTexImage EGLEW_GET_FUN(__eglewBindTexImage)
+#define eglReleaseTexImage EGLEW_GET_FUN(__eglewReleaseTexImage)
+#define eglSurfaceAttrib EGLEW_GET_FUN(__eglewSurfaceAttrib)
+#define eglSwapInterval EGLEW_GET_FUN(__eglewSwapInterval)
+
+#define EGLEW_VERSION_1_1 EGLEW_GET_VAR(__EGLEW_VERSION_1_1)
+
+#endif /* EGL_VERSION_1_1 */
+
+/* ---------------------------- EGL_VERSION_1_2 ---------------------------- */
+
+#ifndef EGL_VERSION_1_2
+#define EGL_VERSION_1_2 1
+
+#define EGL_OPENGL_ES_BIT 0x0001
+#define EGL_OPENVG_BIT 0x0002
+#define EGL_LUMINANCE_SIZE 0x303D
+#define EGL_ALPHA_MASK_SIZE 0x303E
+#define EGL_COLOR_BUFFER_TYPE 0x303F
+#define EGL_RENDERABLE_TYPE 0x3040
+#define EGL_SINGLE_BUFFER 0x3085
+#define EGL_RENDER_BUFFER 0x3086
+#define EGL_COLORSPACE 0x3087
+#define EGL_ALPHA_FORMAT 0x3088
+#define EGL_COLORSPACE_LINEAR 0x308A
+#define EGL_ALPHA_FORMAT_NONPRE 0x308B
+#define EGL_ALPHA_FORMAT_PRE 0x308C
+#define EGL_CLIENT_APIS 0x308D
+#define EGL_RGB_BUFFER 0x308E
+#define EGL_LUMINANCE_BUFFER 0x308F
+#define EGL_HORIZONTAL_RESOLUTION 0x3090
+#define EGL_VERTICAL_RESOLUTION 0x3091
+#define EGL_PIXEL_ASPECT_RATIO 0x3092
+#define EGL_SWAP_BEHAVIOR 0x3093
+#define EGL_BUFFER_PRESERVED 0x3094
+#define EGL_BUFFER_DESTROYED 0x3095
+#define EGL_OPENVG_IMAGE 0x3096
+#define EGL_CONTEXT_CLIENT_TYPE 0x3097
+#define EGL_OPENGL_ES_API 0x30A0
+#define EGL_OPENVG_API 0x30A1
+#define EGL_DISPLAY_SCALING 10000
+
+typedef EGLBoolean ( * PFNEGLBINDAPIPROC) (EGLenum api);
+typedef EGLSurface ( * PFNEGLCREATEPBUFFERFROMCLIENTBUFFERPROC) (EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint * attrib_list);
+typedef EGLenum ( * PFNEGLQUERYAPIPROC) ( void );
+typedef EGLBoolean ( * PFNEGLRELEASETHREADPROC) ( void );
+typedef EGLBoolean ( * PFNEGLWAITCLIENTPROC) ( void );
+
+#define eglBindAPI EGLEW_GET_FUN(__eglewBindAPI)
+#define eglCreatePbufferFromClientBuffer EGLEW_GET_FUN(__eglewCreatePbufferFromClientBuffer)
+#define eglQueryAPI EGLEW_GET_FUN(__eglewQueryAPI)
+#define eglReleaseThread EGLEW_GET_FUN(__eglewReleaseThread)
+#define eglWaitClient EGLEW_GET_FUN(__eglewWaitClient)
+
+#define EGLEW_VERSION_1_2 EGLEW_GET_VAR(__EGLEW_VERSION_1_2)
+
+#endif /* EGL_VERSION_1_2 */
+
+/* ---------------------------- EGL_VERSION_1_3 ---------------------------- */
+
+#ifndef EGL_VERSION_1_3
+#define EGL_VERSION_1_3 1
+
+#define EGL_OPENGL_ES2_BIT 0x0004
+#define EGL_VG_COLORSPACE_LINEAR_BIT 0x0020
+#define EGL_VG_ALPHA_FORMAT_PRE_BIT 0x0040
+#define EGL_MATCH_NATIVE_PIXMAP 0x3041
+#define EGL_CONFORMANT 0x3042
+#define EGL_VG_COLORSPACE 0x3087
+#define EGL_VG_ALPHA_FORMAT 0x3088
+#define EGL_VG_COLORSPACE_LINEAR 0x308A
+#define EGL_VG_ALPHA_FORMAT_NONPRE 0x308B
+#define EGL_VG_ALPHA_FORMAT_PRE 0x308C
+#define EGL_CONTEXT_CLIENT_VERSION 0x3098
+
+#define EGLEW_VERSION_1_3 EGLEW_GET_VAR(__EGLEW_VERSION_1_3)
+
+#endif /* EGL_VERSION_1_3 */
+
+/* ---------------------------- EGL_VERSION_1_4 ---------------------------- */
+
+#ifndef EGL_VERSION_1_4
+#define EGL_VERSION_1_4 1
+
+#define EGL_OPENGL_BIT 0x0008
+#define EGL_MULTISAMPLE_RESOLVE_BOX_BIT 0x0200
+#define EGL_SWAP_BEHAVIOR_PRESERVED_BIT 0x0400
+#define EGL_MULTISAMPLE_RESOLVE 0x3099
+#define EGL_MULTISAMPLE_RESOLVE_DEFAULT 0x309A
+#define EGL_MULTISAMPLE_RESOLVE_BOX 0x309B
+#define EGL_OPENGL_API 0x30A2
+
+typedef EGLContext ( * PFNEGLGETCURRENTCONTEXTPROC) ( void );
+
+#define eglGetCurrentContext EGLEW_GET_FUN(__eglewGetCurrentContext)
+
+#define EGLEW_VERSION_1_4 EGLEW_GET_VAR(__EGLEW_VERSION_1_4)
+
+#endif /* EGL_VERSION_1_4 */
+
+/* ---------------------------- EGL_VERSION_1_5 ---------------------------- */
+
+#ifndef EGL_VERSION_1_5
+#define EGL_VERSION_1_5 1
+
+#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT 0x00000001
+#define EGL_SYNC_FLUSH_COMMANDS_BIT 0x0001
+#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT 0x00000002
+#define EGL_OPENGL_ES3_BIT 0x00000040
+#define EGL_GL_COLORSPACE_SRGB 0x3089
+#define EGL_GL_COLORSPACE_LINEAR 0x308A
+#define EGL_CONTEXT_MAJOR_VERSION 0x3098
+#define EGL_CL_EVENT_HANDLE 0x309C
+#define EGL_GL_COLORSPACE 0x309D
+#define EGL_GL_TEXTURE_2D 0x30B1
+#define EGL_GL_TEXTURE_3D 0x30B2
+#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x30B3
+#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x30B4
+#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x30B5
+#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x30B6
+#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x30B7
+#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x30B8
+#define EGL_GL_RENDERBUFFER 0x30B9
+#define EGL_GL_TEXTURE_LEVEL 0x30BC
+#define EGL_GL_TEXTURE_ZOFFSET 0x30BD
+#define EGL_IMAGE_PRESERVED 0x30D2
+#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE 0x30F0
+#define EGL_SYNC_STATUS 0x30F1
+#define EGL_SIGNALED 0x30F2
+#define EGL_UNSIGNALED 0x30F3
+#define EGL_TIMEOUT_EXPIRED 0x30F5
+#define EGL_CONDITION_SATISFIED 0x30F6
+#define EGL_SYNC_TYPE 0x30F7
+#define EGL_SYNC_CONDITION 0x30F8
+#define EGL_SYNC_FENCE 0x30F9
+#define EGL_CONTEXT_MINOR_VERSION 0x30FB
+#define EGL_CONTEXT_OPENGL_PROFILE_MASK 0x30FD
+#define EGL_SYNC_CL_EVENT 0x30FE
+#define EGL_SYNC_CL_EVENT_COMPLETE 0x30FF
+#define EGL_CONTEXT_OPENGL_DEBUG 0x31B0
+#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE 0x31B1
+#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS 0x31B2
+#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY 0x31BD
+#define EGL_NO_RESET_NOTIFICATION 0x31BE
+#define EGL_LOSE_CONTEXT_ON_RESET 0x31BF
+#define EGL_FOREVER 0xFFFFFFFFFFFFFFFF
+
+typedef EGLint ( * PFNEGLCLIENTWAITSYNCPROC) (EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout);
+typedef EGLImage ( * PFNEGLCREATEIMAGEPROC) (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib * attrib_list);
+typedef EGLSurface ( * PFNEGLCREATEPLATFORMPIXMAPSURFACEPROC) (EGLDisplay dpy, EGLConfig config, void * native_pixmap, const EGLAttrib * attrib_list);
+typedef EGLSurface ( * PFNEGLCREATEPLATFORMWINDOWSURFACEPROC) (EGLDisplay dpy, EGLConfig config, void * native_window, const EGLAttrib * attrib_list);
+typedef EGLSync ( * PFNEGLCREATESYNCPROC) (EGLDisplay dpy, EGLenum type, const EGLAttrib * attrib_list);
+typedef EGLBoolean ( * PFNEGLDESTROYIMAGEPROC) (EGLDisplay dpy, EGLImage image);
+typedef EGLBoolean ( * PFNEGLDESTROYSYNCPROC) (EGLDisplay dpy, EGLSync sync);
+typedef EGLDisplay ( * PFNEGLGETPLATFORMDISPLAYPROC) (EGLenum platform, void * native_display, const EGLAttrib * attrib_list);
+typedef EGLBoolean ( * PFNEGLGETSYNCATTRIBPROC) (EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLAttrib * value);
+typedef EGLBoolean ( * PFNEGLWAITSYNCPROC) (EGLDisplay dpy, EGLSync sync, EGLint flags);
+
+#define eglClientWaitSync EGLEW_GET_FUN(__eglewClientWaitSync)
+#define eglCreateImage EGLEW_GET_FUN(__eglewCreateImage)
+#define eglCreatePlatformPixmapSurface EGLEW_GET_FUN(__eglewCreatePlatformPixmapSurface)
+#define eglCreatePlatformWindowSurface EGLEW_GET_FUN(__eglewCreatePlatformWindowSurface)
+#define eglCreateSync EGLEW_GET_FUN(__eglewCreateSync)
+#define eglDestroyImage EGLEW_GET_FUN(__eglewDestroyImage)
+#define eglDestroySync EGLEW_GET_FUN(__eglewDestroySync)
+#define eglGetPlatformDisplay EGLEW_GET_FUN(__eglewGetPlatformDisplay)
+#define eglGetSyncAttrib EGLEW_GET_FUN(__eglewGetSyncAttrib)
+#define eglWaitSync EGLEW_GET_FUN(__eglewWaitSync)
+
+#define EGLEW_VERSION_1_5 EGLEW_GET_VAR(__EGLEW_VERSION_1_5)
+
+#endif /* EGL_VERSION_1_5 */
+
+/* ------------------------- EGL_ANDROID_blob_cache ------------------------ */
+
+#ifndef EGL_ANDROID_blob_cache
+#define EGL_ANDROID_blob_cache 1
+
+typedef void ( * PFNEGLSETBLOBCACHEFUNCSANDROIDPROC) (EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get);
+
+#define eglSetBlobCacheFuncsANDROID EGLEW_GET_FUN(__eglewSetBlobCacheFuncsANDROID)
+
+#define EGLEW_ANDROID_blob_cache EGLEW_GET_VAR(__EGLEW_ANDROID_blob_cache)
+
+#endif /* EGL_ANDROID_blob_cache */
+
+/* ---------------- EGL_ANDROID_create_native_client_buffer ---------------- */
+
+#ifndef EGL_ANDROID_create_native_client_buffer
+#define EGL_ANDROID_create_native_client_buffer 1
+
+#define EGL_NATIVE_BUFFER_USAGE_PROTECTED_BIT_ANDROID 0x00000001
+#define EGL_NATIVE_BUFFER_USAGE_RENDERBUFFER_BIT_ANDROID 0x00000002
+#define EGL_NATIVE_BUFFER_USAGE_TEXTURE_BIT_ANDROID 0x00000004
+#define EGL_NATIVE_BUFFER_USAGE_ANDROID 0x3143
+
+typedef EGLClientBuffer ( * PFNEGLCREATENATIVECLIENTBUFFERANDROIDPROC) (const EGLint * attrib_list);
+
+#define eglCreateNativeClientBufferANDROID EGLEW_GET_FUN(__eglewCreateNativeClientBufferANDROID)
+
+#define EGLEW_ANDROID_create_native_client_buffer EGLEW_GET_VAR(__EGLEW_ANDROID_create_native_client_buffer)
+
+#endif /* EGL_ANDROID_create_native_client_buffer */
+
+/* --------------------- EGL_ANDROID_framebuffer_target -------------------- */
+
+#ifndef EGL_ANDROID_framebuffer_target
+#define EGL_ANDROID_framebuffer_target 1
+
+#define EGL_FRAMEBUFFER_TARGET_ANDROID 0x3147
+
+#define EGLEW_ANDROID_framebuffer_target EGLEW_GET_VAR(__EGLEW_ANDROID_framebuffer_target)
+
+#endif /* EGL_ANDROID_framebuffer_target */
+
+/* ----------------- EGL_ANDROID_front_buffer_auto_refresh ----------------- */
+
+#ifndef EGL_ANDROID_front_buffer_auto_refresh
+#define EGL_ANDROID_front_buffer_auto_refresh 1
+
+#define EGL_FRONT_BUFFER_AUTO_REFRESH_ANDROID 0x314C
+
+#define EGLEW_ANDROID_front_buffer_auto_refresh EGLEW_GET_VAR(__EGLEW_ANDROID_front_buffer_auto_refresh)
+
+#endif /* EGL_ANDROID_front_buffer_auto_refresh */
+
+/* -------------------- EGL_ANDROID_image_native_buffer -------------------- */
+
+#ifndef EGL_ANDROID_image_native_buffer
+#define EGL_ANDROID_image_native_buffer 1
+
+#define EGL_NATIVE_BUFFER_ANDROID 0x3140
+
+#define EGLEW_ANDROID_image_native_buffer EGLEW_GET_VAR(__EGLEW_ANDROID_image_native_buffer)
+
+#endif /* EGL_ANDROID_image_native_buffer */
+
+/* --------------------- EGL_ANDROID_native_fence_sync --------------------- */
+
+#ifndef EGL_ANDROID_native_fence_sync
+#define EGL_ANDROID_native_fence_sync 1
+
+#define EGL_SYNC_NATIVE_FENCE_ANDROID 0x3144
+#define EGL_SYNC_NATIVE_FENCE_FD_ANDROID 0x3145
+#define EGL_SYNC_NATIVE_FENCE_SIGNALED_ANDROID 0x3146
+
+typedef EGLint ( * PFNEGLDUPNATIVEFENCEFDANDROIDPROC) (EGLDisplay dpy, EGLSyncKHR sync);
+
+#define eglDupNativeFenceFDANDROID EGLEW_GET_FUN(__eglewDupNativeFenceFDANDROID)
+
+#define EGLEW_ANDROID_native_fence_sync EGLEW_GET_VAR(__EGLEW_ANDROID_native_fence_sync)
+
+#endif /* EGL_ANDROID_native_fence_sync */
+
+/* --------------------- EGL_ANDROID_presentation_time --------------------- */
+
+#ifndef EGL_ANDROID_presentation_time
+#define EGL_ANDROID_presentation_time 1
+
+typedef EGLBoolean ( * PFNEGLPRESENTATIONTIMEANDROIDPROC) (EGLDisplay dpy, EGLSurface surface, EGLnsecsANDROID time);
+
+#define eglPresentationTimeANDROID EGLEW_GET_FUN(__eglewPresentationTimeANDROID)
+
+#define EGLEW_ANDROID_presentation_time EGLEW_GET_VAR(__EGLEW_ANDROID_presentation_time)
+
+#endif /* EGL_ANDROID_presentation_time */
+
+/* ------------------------- EGL_ANDROID_recordable ------------------------ */
+
+#ifndef EGL_ANDROID_recordable
+#define EGL_ANDROID_recordable 1
+
+#define EGL_RECORDABLE_ANDROID 0x3142
+
+#define EGLEW_ANDROID_recordable EGLEW_GET_VAR(__EGLEW_ANDROID_recordable)
+
+#endif /* EGL_ANDROID_recordable */
+
+/* ---------------- EGL_ANGLE_d3d_share_handle_client_buffer --------------- */
+
+#ifndef EGL_ANGLE_d3d_share_handle_client_buffer
+#define EGL_ANGLE_d3d_share_handle_client_buffer 1
+
+#define EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE 0x3200
+
+#define EGLEW_ANGLE_d3d_share_handle_client_buffer EGLEW_GET_VAR(__EGLEW_ANGLE_d3d_share_handle_client_buffer)
+
+#endif /* EGL_ANGLE_d3d_share_handle_client_buffer */
+
+/* -------------------------- EGL_ANGLE_device_d3d ------------------------- */
+
+#ifndef EGL_ANGLE_device_d3d
+#define EGL_ANGLE_device_d3d 1
+
+#define EGL_D3D9_DEVICE_ANGLE 0x33A0
+#define EGL_D3D11_DEVICE_ANGLE 0x33A1
+
+#define EGLEW_ANGLE_device_d3d EGLEW_GET_VAR(__EGLEW_ANGLE_device_d3d)
+
+#endif /* EGL_ANGLE_device_d3d */
+
+/* -------------------- EGL_ANGLE_query_surface_pointer -------------------- */
+
+#ifndef EGL_ANGLE_query_surface_pointer
+#define EGL_ANGLE_query_surface_pointer 1
+
+typedef EGLBoolean ( * PFNEGLQUERYSURFACEPOINTERANGLEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, void ** value);
+
+#define eglQuerySurfacePointerANGLE EGLEW_GET_FUN(__eglewQuerySurfacePointerANGLE)
+
+#define EGLEW_ANGLE_query_surface_pointer EGLEW_GET_VAR(__EGLEW_ANGLE_query_surface_pointer)
+
+#endif /* EGL_ANGLE_query_surface_pointer */
+
+/* ------------- EGL_ANGLE_surface_d3d_texture_2d_share_handle ------------- */
+
+#ifndef EGL_ANGLE_surface_d3d_texture_2d_share_handle
+#define EGL_ANGLE_surface_d3d_texture_2d_share_handle 1
+
+#define EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE 0x3200
+
+#define EGLEW_ANGLE_surface_d3d_texture_2d_share_handle EGLEW_GET_VAR(__EGLEW_ANGLE_surface_d3d_texture_2d_share_handle)
+
+#endif /* EGL_ANGLE_surface_d3d_texture_2d_share_handle */
+
+/* ---------------------- EGL_ANGLE_window_fixed_size ---------------------- */
+
+#ifndef EGL_ANGLE_window_fixed_size
+#define EGL_ANGLE_window_fixed_size 1
+
+#define EGL_FIXED_SIZE_ANGLE 0x3201
+
+#define EGLEW_ANGLE_window_fixed_size EGLEW_GET_VAR(__EGLEW_ANGLE_window_fixed_size)
+
+#endif /* EGL_ANGLE_window_fixed_size */
+
+/* ------------------- EGL_ARM_pixmap_multisample_discard ------------------ */
+
+#ifndef EGL_ARM_pixmap_multisample_discard
+#define EGL_ARM_pixmap_multisample_discard 1
+
+#define EGL_DISCARD_SAMPLES_ARM 0x3286
+
+#define EGLEW_ARM_pixmap_multisample_discard EGLEW_GET_VAR(__EGLEW_ARM_pixmap_multisample_discard)
+
+#endif /* EGL_ARM_pixmap_multisample_discard */
+
+/* --------------------------- EGL_EXT_buffer_age -------------------------- */
+
+#ifndef EGL_EXT_buffer_age
+#define EGL_EXT_buffer_age 1
+
+#define EGL_BUFFER_AGE_EXT 0x313D
+
+#define EGLEW_EXT_buffer_age EGLEW_GET_VAR(__EGLEW_EXT_buffer_age)
+
+#endif /* EGL_EXT_buffer_age */
+
+/* ----------------------- EGL_EXT_client_extensions ----------------------- */
+
+#ifndef EGL_EXT_client_extensions
+#define EGL_EXT_client_extensions 1
+
+#define EGLEW_EXT_client_extensions EGLEW_GET_VAR(__EGLEW_EXT_client_extensions)
+
+#endif /* EGL_EXT_client_extensions */
+
+/* ------------------- EGL_EXT_create_context_robustness ------------------- */
+
+#ifndef EGL_EXT_create_context_robustness
+#define EGL_EXT_create_context_robustness 1
+
+#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT 0x30BF
+#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT 0x3138
+#define EGL_NO_RESET_NOTIFICATION_EXT 0x31BE
+#define EGL_LOSE_CONTEXT_ON_RESET_EXT 0x31BF
+
+#define EGLEW_EXT_create_context_robustness EGLEW_GET_VAR(__EGLEW_EXT_create_context_robustness)
+
+#endif /* EGL_EXT_create_context_robustness */
+
+/* -------------------------- EGL_EXT_device_base -------------------------- */
+
+#ifndef EGL_EXT_device_base
+#define EGL_EXT_device_base 1
+
+#define EGL_BAD_DEVICE_EXT 0x322B
+#define EGL_DEVICE_EXT 0x322C
+
+#define EGLEW_EXT_device_base EGLEW_GET_VAR(__EGLEW_EXT_device_base)
+
+#endif /* EGL_EXT_device_base */
+
+/* --------------------------- EGL_EXT_device_drm -------------------------- */
+
+#ifndef EGL_EXT_device_drm
+#define EGL_EXT_device_drm 1
+
+#define EGL_DRM_DEVICE_FILE_EXT 0x3233
+
+#define EGLEW_EXT_device_drm EGLEW_GET_VAR(__EGLEW_EXT_device_drm)
+
+#endif /* EGL_EXT_device_drm */
+
+/* ----------------------- EGL_EXT_device_enumeration ---------------------- */
+
+#ifndef EGL_EXT_device_enumeration
+#define EGL_EXT_device_enumeration 1
+
+typedef EGLBoolean ( * PFNEGLQUERYDEVICESEXTPROC) (EGLint max_devices, EGLDeviceEXT * devices, EGLint * num_devices);
+
+#define eglQueryDevicesEXT EGLEW_GET_FUN(__eglewQueryDevicesEXT)
+
+#define EGLEW_EXT_device_enumeration EGLEW_GET_VAR(__EGLEW_EXT_device_enumeration)
+
+#endif /* EGL_EXT_device_enumeration */
+
+/* ------------------------- EGL_EXT_device_openwf ------------------------- */
+
+#ifndef EGL_EXT_device_openwf
+#define EGL_EXT_device_openwf 1
+
+#define EGL_OPENWF_DEVICE_ID_EXT 0x3237
+
+#define EGLEW_EXT_device_openwf EGLEW_GET_VAR(__EGLEW_EXT_device_openwf)
+
+#endif /* EGL_EXT_device_openwf */
+
+/* -------------------------- EGL_EXT_device_query ------------------------- */
+
+#ifndef EGL_EXT_device_query
+#define EGL_EXT_device_query 1
+
+#define EGL_BAD_DEVICE_EXT 0x322B
+#define EGL_DEVICE_EXT 0x322C
+
+typedef EGLBoolean ( * PFNEGLQUERYDEVICEATTRIBEXTPROC) (EGLDeviceEXT device, EGLint attribute, EGLAttrib * value);
+typedef const char * ( * PFNEGLQUERYDEVICESTRINGEXTPROC) (EGLDeviceEXT device, EGLint name);
+typedef EGLBoolean ( * PFNEGLQUERYDISPLAYATTRIBEXTPROC) (EGLDisplay dpy, EGLint attribute, EGLAttrib * value);
+
+#define eglQueryDeviceAttribEXT EGLEW_GET_FUN(__eglewQueryDeviceAttribEXT)
+#define eglQueryDeviceStringEXT EGLEW_GET_FUN(__eglewQueryDeviceStringEXT)
+#define eglQueryDisplayAttribEXT EGLEW_GET_FUN(__eglewQueryDisplayAttribEXT)
+
+#define EGLEW_EXT_device_query EGLEW_GET_VAR(__EGLEW_EXT_device_query)
+
+#endif /* EGL_EXT_device_query */
+
+/* ---------------------- EGL_EXT_image_dma_buf_import --------------------- */
+
+#ifndef EGL_EXT_image_dma_buf_import
+#define EGL_EXT_image_dma_buf_import 1
+
+#define EGL_LINUX_DMA_BUF_EXT 0x3270
+#define EGL_LINUX_DRM_FOURCC_EXT 0x3271
+#define EGL_DMA_BUF_PLANE0_FD_EXT 0x3272
+#define EGL_DMA_BUF_PLANE0_OFFSET_EXT 0x3273
+#define EGL_DMA_BUF_PLANE0_PITCH_EXT 0x3274
+#define EGL_DMA_BUF_PLANE1_FD_EXT 0x3275
+#define EGL_DMA_BUF_PLANE1_OFFSET_EXT 0x3276
+#define EGL_DMA_BUF_PLANE1_PITCH_EXT 0x3277
+#define EGL_DMA_BUF_PLANE2_FD_EXT 0x3278
+#define EGL_DMA_BUF_PLANE2_OFFSET_EXT 0x3279
+#define EGL_DMA_BUF_PLANE2_PITCH_EXT 0x327A
+#define EGL_YUV_COLOR_SPACE_HINT_EXT 0x327B
+#define EGL_SAMPLE_RANGE_HINT_EXT 0x327C
+#define EGL_YUV_CHROMA_HORIZONTAL_SITING_HINT_EXT 0x327D
+#define EGL_YUV_CHROMA_VERTICAL_SITING_HINT_EXT 0x327E
+#define EGL_ITU_REC601_EXT 0x327F
+#define EGL_ITU_REC709_EXT 0x3280
+#define EGL_ITU_REC2020_EXT 0x3281
+#define EGL_YUV_FULL_RANGE_EXT 0x3282
+#define EGL_YUV_NARROW_RANGE_EXT 0x3283
+#define EGL_YUV_CHROMA_SITING_0_EXT 0x3284
+#define EGL_YUV_CHROMA_SITING_0_5_EXT 0x3285
+
+#define EGLEW_EXT_image_dma_buf_import EGLEW_GET_VAR(__EGLEW_EXT_image_dma_buf_import)
+
+#endif /* EGL_EXT_image_dma_buf_import */
+
+/* ------------------------ EGL_EXT_multiview_window ----------------------- */
+
+#ifndef EGL_EXT_multiview_window
+#define EGL_EXT_multiview_window 1
+
+#define EGL_MULTIVIEW_VIEW_COUNT_EXT 0x3134
+
+#define EGLEW_EXT_multiview_window EGLEW_GET_VAR(__EGLEW_EXT_multiview_window)
+
+#endif /* EGL_EXT_multiview_window */
+
+/* -------------------------- EGL_EXT_output_base -------------------------- */
+
+#ifndef EGL_EXT_output_base
+#define EGL_EXT_output_base 1
+
+#define EGL_BAD_OUTPUT_LAYER_EXT 0x322D
+#define EGL_BAD_OUTPUT_PORT_EXT 0x322E
+#define EGL_SWAP_INTERVAL_EXT 0x322F
+
+typedef EGLBoolean ( * PFNEGLGETOUTPUTLAYERSEXTPROC) (EGLDisplay dpy, const EGLAttrib * attrib_list, EGLOutputLayerEXT * layers, EGLint max_layers, EGLint * num_layers);
+typedef EGLBoolean ( * PFNEGLGETOUTPUTPORTSEXTPROC) (EGLDisplay dpy, const EGLAttrib * attrib_list, EGLOutputPortEXT * ports, EGLint max_ports, EGLint * num_ports);
+typedef EGLBoolean ( * PFNEGLOUTPUTLAYERATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib value);
+typedef EGLBoolean ( * PFNEGLOUTPUTPORTATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib value);
+typedef EGLBoolean ( * PFNEGLQUERYOUTPUTLAYERATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib * value);
+typedef const char * ( * PFNEGLQUERYOUTPUTLAYERSTRINGEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint name);
+typedef EGLBoolean ( * PFNEGLQUERYOUTPUTPORTATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib * value);
+typedef const char * ( * PFNEGLQUERYOUTPUTPORTSTRINGEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint name);
+
+#define eglGetOutputLayersEXT EGLEW_GET_FUN(__eglewGetOutputLayersEXT)
+#define eglGetOutputPortsEXT EGLEW_GET_FUN(__eglewGetOutputPortsEXT)
+#define eglOutputLayerAttribEXT EGLEW_GET_FUN(__eglewOutputLayerAttribEXT)
+#define eglOutputPortAttribEXT EGLEW_GET_FUN(__eglewOutputPortAttribEXT)
+#define eglQueryOutputLayerAttribEXT EGLEW_GET_FUN(__eglewQueryOutputLayerAttribEXT)
+#define eglQueryOutputLayerStringEXT EGLEW_GET_FUN(__eglewQueryOutputLayerStringEXT)
+#define eglQueryOutputPortAttribEXT EGLEW_GET_FUN(__eglewQueryOutputPortAttribEXT)
+#define eglQueryOutputPortStringEXT EGLEW_GET_FUN(__eglewQueryOutputPortStringEXT)
+
+#define EGLEW_EXT_output_base EGLEW_GET_VAR(__EGLEW_EXT_output_base)
+
+#endif /* EGL_EXT_output_base */
+
+/* --------------------------- EGL_EXT_output_drm -------------------------- */
+
+#ifndef EGL_EXT_output_drm
+#define EGL_EXT_output_drm 1
+
+#define EGL_DRM_CRTC_EXT 0x3234
+#define EGL_DRM_PLANE_EXT 0x3235
+#define EGL_DRM_CONNECTOR_EXT 0x3236
+
+#define EGLEW_EXT_output_drm EGLEW_GET_VAR(__EGLEW_EXT_output_drm)
+
+#endif /* EGL_EXT_output_drm */
+
+/* ------------------------- EGL_EXT_output_openwf ------------------------- */
+
+#ifndef EGL_EXT_output_openwf
+#define EGL_EXT_output_openwf 1
+
+#define EGL_OPENWF_PIPELINE_ID_EXT 0x3238
+#define EGL_OPENWF_PORT_ID_EXT 0x3239
+
+#define EGLEW_EXT_output_openwf EGLEW_GET_VAR(__EGLEW_EXT_output_openwf)
+
+#endif /* EGL_EXT_output_openwf */
+
+/* ------------------------- EGL_EXT_platform_base ------------------------- */
+
+#ifndef EGL_EXT_platform_base
+#define EGL_EXT_platform_base 1
+
+typedef EGLSurface ( * PFNEGLCREATEPLATFORMPIXMAPSURFACEEXTPROC) (EGLDisplay dpy, EGLConfig config, void * native_pixmap, const EGLint * attrib_list);
+typedef EGLSurface ( * PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC) (EGLDisplay dpy, EGLConfig config, void * native_window, const EGLint * attrib_list);
+typedef EGLDisplay ( * PFNEGLGETPLATFORMDISPLAYEXTPROC) (EGLenum platform, void * native_display, const EGLint * attrib_list);
+
+#define eglCreatePlatformPixmapSurfaceEXT EGLEW_GET_FUN(__eglewCreatePlatformPixmapSurfaceEXT)
+#define eglCreatePlatformWindowSurfaceEXT EGLEW_GET_FUN(__eglewCreatePlatformWindowSurfaceEXT)
+#define eglGetPlatformDisplayEXT EGLEW_GET_FUN(__eglewGetPlatformDisplayEXT)
+
+#define EGLEW_EXT_platform_base EGLEW_GET_VAR(__EGLEW_EXT_platform_base)
+
+#endif /* EGL_EXT_platform_base */
+
+/* ------------------------ EGL_EXT_platform_device ------------------------ */
+
+#ifndef EGL_EXT_platform_device
+#define EGL_EXT_platform_device 1
+
+#define EGL_PLATFORM_DEVICE_EXT 0x313F
+
+#define EGLEW_EXT_platform_device EGLEW_GET_VAR(__EGLEW_EXT_platform_device)
+
+#endif /* EGL_EXT_platform_device */
+
+/* ------------------------ EGL_EXT_platform_wayland ----------------------- */
+
+#ifndef EGL_EXT_platform_wayland
+#define EGL_EXT_platform_wayland 1
+
+#define EGL_PLATFORM_WAYLAND_EXT 0x31D8
+
+#define EGLEW_EXT_platform_wayland EGLEW_GET_VAR(__EGLEW_EXT_platform_wayland)
+
+#endif /* EGL_EXT_platform_wayland */
+
+/* -------------------------- EGL_EXT_platform_x11 ------------------------- */
+
+#ifndef EGL_EXT_platform_x11
+#define EGL_EXT_platform_x11 1
+
+#define EGL_PLATFORM_X11_EXT 0x31D5
+#define EGL_PLATFORM_X11_SCREEN_EXT 0x31D6
+
+#define EGLEW_EXT_platform_x11 EGLEW_GET_VAR(__EGLEW_EXT_platform_x11)
+
+#endif /* EGL_EXT_platform_x11 */
+
+/* ----------------------- EGL_EXT_protected_content ----------------------- */
+
+#ifndef EGL_EXT_protected_content
+#define EGL_EXT_protected_content 1
+
+#define EGL_PROTECTED_CONTENT_EXT 0x32C0
+
+#define EGLEW_EXT_protected_content EGLEW_GET_VAR(__EGLEW_EXT_protected_content)
+
+#endif /* EGL_EXT_protected_content */
+
+/* ----------------------- EGL_EXT_protected_surface ----------------------- */
+
+#ifndef EGL_EXT_protected_surface
+#define EGL_EXT_protected_surface 1
+
+#define EGL_PROTECTED_CONTENT_EXT 0x32C0
+
+#define EGLEW_EXT_protected_surface EGLEW_GET_VAR(__EGLEW_EXT_protected_surface)
+
+#endif /* EGL_EXT_protected_surface */
+
+/* ------------------- EGL_EXT_stream_consumer_egloutput ------------------- */
+
+#ifndef EGL_EXT_stream_consumer_egloutput
+#define EGL_EXT_stream_consumer_egloutput 1
+
+typedef EGLBoolean ( * PFNEGLSTREAMCONSUMEROUTPUTEXTPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLOutputLayerEXT layer);
+
+#define eglStreamConsumerOutputEXT EGLEW_GET_FUN(__eglewStreamConsumerOutputEXT)
+
+#define EGLEW_EXT_stream_consumer_egloutput EGLEW_GET_VAR(__EGLEW_EXT_stream_consumer_egloutput)
+
+#endif /* EGL_EXT_stream_consumer_egloutput */
+
+/* -------------------- EGL_EXT_swap_buffers_with_damage ------------------- */
+
+#ifndef EGL_EXT_swap_buffers_with_damage
+#define EGL_EXT_swap_buffers_with_damage 1
+
+typedef EGLBoolean ( * PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC) (EGLDisplay dpy, EGLSurface surface, EGLint * rects, EGLint n_rects);
+
+#define eglSwapBuffersWithDamageEXT EGLEW_GET_FUN(__eglewSwapBuffersWithDamageEXT)
+
+#define EGLEW_EXT_swap_buffers_with_damage EGLEW_GET_VAR(__EGLEW_EXT_swap_buffers_with_damage)
+
+#endif /* EGL_EXT_swap_buffers_with_damage */
+
+/* -------------------------- EGL_EXT_yuv_surface -------------------------- */
+
+#ifndef EGL_EXT_yuv_surface
+#define EGL_EXT_yuv_surface 1
+
+#define EGL_YUV_BUFFER_EXT 0x3300
+#define EGL_YUV_ORDER_EXT 0x3301
+#define EGL_YUV_ORDER_YUV_EXT 0x3302
+#define EGL_YUV_ORDER_YVU_EXT 0x3303
+#define EGL_YUV_ORDER_YUYV_EXT 0x3304
+#define EGL_YUV_ORDER_UYVY_EXT 0x3305
+#define EGL_YUV_ORDER_YVYU_EXT 0x3306
+#define EGL_YUV_ORDER_VYUY_EXT 0x3307
+#define EGL_YUV_ORDER_AYUV_EXT 0x3308
+#define EGL_YUV_CSC_STANDARD_EXT 0x330A
+#define EGL_YUV_CSC_STANDARD_601_EXT 0x330B
+#define EGL_YUV_CSC_STANDARD_709_EXT 0x330C
+#define EGL_YUV_CSC_STANDARD_2020_EXT 0x330D
+#define EGL_YUV_NUMBER_OF_PLANES_EXT 0x3311
+#define EGL_YUV_SUBSAMPLE_EXT 0x3312
+#define EGL_YUV_SUBSAMPLE_4_2_0_EXT 0x3313
+#define EGL_YUV_SUBSAMPLE_4_2_2_EXT 0x3314
+#define EGL_YUV_SUBSAMPLE_4_4_4_EXT 0x3315
+#define EGL_YUV_DEPTH_RANGE_EXT 0x3317
+#define EGL_YUV_DEPTH_RANGE_LIMITED_EXT 0x3318
+#define EGL_YUV_DEPTH_RANGE_FULL_EXT 0x3319
+#define EGL_YUV_PLANE_BPP_EXT 0x331A
+#define EGL_YUV_PLANE_BPP_0_EXT 0x331B
+#define EGL_YUV_PLANE_BPP_8_EXT 0x331C
+#define EGL_YUV_PLANE_BPP_10_EXT 0x331D
+
+#define EGLEW_EXT_yuv_surface EGLEW_GET_VAR(__EGLEW_EXT_yuv_surface)
+
+#endif /* EGL_EXT_yuv_surface */
+
+/* -------------------------- EGL_HI_clientpixmap -------------------------- */
+
+#ifndef EGL_HI_clientpixmap
+#define EGL_HI_clientpixmap 1
+
+#define EGL_CLIENT_PIXMAP_POINTER_HI 0x8F74
+
+typedef EGLSurface ( * PFNEGLCREATEPIXMAPSURFACEHIPROC) (EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI * pixmap);
+
+#define eglCreatePixmapSurfaceHI EGLEW_GET_FUN(__eglewCreatePixmapSurfaceHI)
+
+#define EGLEW_HI_clientpixmap EGLEW_GET_VAR(__EGLEW_HI_clientpixmap)
+
+#endif /* EGL_HI_clientpixmap */
+
+/* -------------------------- EGL_HI_colorformats -------------------------- */
+
+#ifndef EGL_HI_colorformats
+#define EGL_HI_colorformats 1
+
+#define EGL_COLOR_FORMAT_HI 0x8F70
+#define EGL_COLOR_RGB_HI 0x8F71
+#define EGL_COLOR_RGBA_HI 0x8F72
+#define EGL_COLOR_ARGB_HI 0x8F73
+
+#define EGLEW_HI_colorformats EGLEW_GET_VAR(__EGLEW_HI_colorformats)
+
+#endif /* EGL_HI_colorformats */
+
+/* ------------------------ EGL_IMG_context_priority ----------------------- */
+
+#ifndef EGL_IMG_context_priority
+#define EGL_IMG_context_priority 1
+
+#define EGL_CONTEXT_PRIORITY_LEVEL_IMG 0x3100
+#define EGL_CONTEXT_PRIORITY_HIGH_IMG 0x3101
+#define EGL_CONTEXT_PRIORITY_MEDIUM_IMG 0x3102
+#define EGL_CONTEXT_PRIORITY_LOW_IMG 0x3103
+
+#define EGLEW_IMG_context_priority EGLEW_GET_VAR(__EGLEW_IMG_context_priority)
+
+#endif /* EGL_IMG_context_priority */
+
+/* ---------------------- EGL_IMG_image_plane_attribs ---------------------- */
+
+#ifndef EGL_IMG_image_plane_attribs
+#define EGL_IMG_image_plane_attribs 1
+
+#define EGL_NATIVE_BUFFER_MULTIPLANE_SEPARATE_IMG 0x3105
+#define EGL_NATIVE_BUFFER_PLANE_OFFSET_IMG 0x3106
+
+#define EGLEW_IMG_image_plane_attribs EGLEW_GET_VAR(__EGLEW_IMG_image_plane_attribs)
+
+#endif /* EGL_IMG_image_plane_attribs */
+
+/* ---------------------------- EGL_KHR_cl_event --------------------------- */
+
+#ifndef EGL_KHR_cl_event
+#define EGL_KHR_cl_event 1
+
+#define EGL_CL_EVENT_HANDLE_KHR 0x309C
+#define EGL_SYNC_CL_EVENT_KHR 0x30FE
+#define EGL_SYNC_CL_EVENT_COMPLETE_KHR 0x30FF
+
+#define EGLEW_KHR_cl_event EGLEW_GET_VAR(__EGLEW_KHR_cl_event)
+
+#endif /* EGL_KHR_cl_event */
+
+/* --------------------------- EGL_KHR_cl_event2 --------------------------- */
+
+#ifndef EGL_KHR_cl_event2
+#define EGL_KHR_cl_event2 1
+
+#define EGL_CL_EVENT_HANDLE_KHR 0x309C
+#define EGL_SYNC_CL_EVENT_KHR 0x30FE
+#define EGL_SYNC_CL_EVENT_COMPLETE_KHR 0x30FF
+
+typedef EGLSyncKHR ( * PFNEGLCREATESYNC64KHRPROC) (EGLDisplay dpy, EGLenum type, const EGLAttribKHR * attrib_list);
+
+#define eglCreateSync64KHR EGLEW_GET_FUN(__eglewCreateSync64KHR)
+
+#define EGLEW_KHR_cl_event2 EGLEW_GET_VAR(__EGLEW_KHR_cl_event2)
+
+#endif /* EGL_KHR_cl_event2 */
+
+/* ----------------- EGL_KHR_client_get_all_proc_addresses ----------------- */
+
+#ifndef EGL_KHR_client_get_all_proc_addresses
+#define EGL_KHR_client_get_all_proc_addresses 1
+
+#define EGLEW_KHR_client_get_all_proc_addresses EGLEW_GET_VAR(__EGLEW_KHR_client_get_all_proc_addresses)
+
+#endif /* EGL_KHR_client_get_all_proc_addresses */
+
+/* ------------------------- EGL_KHR_config_attribs ------------------------ */
+
+#ifndef EGL_KHR_config_attribs
+#define EGL_KHR_config_attribs 1
+
+#define EGL_VG_COLORSPACE_LINEAR_BIT_KHR 0x0020
+#define EGL_VG_ALPHA_FORMAT_PRE_BIT_KHR 0x0040
+#define EGL_CONFORMANT_KHR 0x3042
+
+#define EGLEW_KHR_config_attribs EGLEW_GET_VAR(__EGLEW_KHR_config_attribs)
+
+#endif /* EGL_KHR_config_attribs */
+
+/* ------------------------- EGL_KHR_create_context ------------------------ */
+
+#ifndef EGL_KHR_create_context
+#define EGL_KHR_create_context 1
+
+#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR 0x00000001
+#define EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR 0x00000001
+#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR 0x00000002
+#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR 0x00000002
+#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR 0x00000004
+#define EGL_OPENGL_ES3_BIT 0x00000040
+#define EGL_OPENGL_ES3_BIT_KHR 0x00000040
+#define EGL_CONTEXT_MAJOR_VERSION_KHR 0x3098
+#define EGL_CONTEXT_MINOR_VERSION_KHR 0x30FB
+#define EGL_CONTEXT_FLAGS_KHR 0x30FC
+#define EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR 0x30FD
+#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR 0x31BD
+#define EGL_NO_RESET_NOTIFICATION_KHR 0x31BE
+#define EGL_LOSE_CONTEXT_ON_RESET_KHR 0x31BF
+
+#define EGLEW_KHR_create_context EGLEW_GET_VAR(__EGLEW_KHR_create_context)
+
+#endif /* EGL_KHR_create_context */
+
+/* -------------------- EGL_KHR_create_context_no_error -------------------- */
+
+#ifndef EGL_KHR_create_context_no_error
+#define EGL_KHR_create_context_no_error 1
+
+#define EGL_CONTEXT_OPENGL_NO_ERROR_KHR 0x31B3
+
+#define EGLEW_KHR_create_context_no_error EGLEW_GET_VAR(__EGLEW_KHR_create_context_no_error)
+
+#endif /* EGL_KHR_create_context_no_error */
+
+/* ----------------------------- EGL_KHR_debug ----------------------------- */
+
+#ifndef EGL_KHR_debug
+#define EGL_KHR_debug 1
+
+#define EGL_OBJECT_THREAD_KHR 0x33B0
+#define EGL_OBJECT_DISPLAY_KHR 0x33B1
+#define EGL_OBJECT_CONTEXT_KHR 0x33B2
+#define EGL_OBJECT_SURFACE_KHR 0x33B3
+#define EGL_OBJECT_IMAGE_KHR 0x33B4
+#define EGL_OBJECT_SYNC_KHR 0x33B5
+#define EGL_OBJECT_STREAM_KHR 0x33B6
+#define EGL_DEBUG_CALLBACK_KHR 0x33B8
+#define EGL_DEBUG_MSG_CRITICAL_KHR 0x33B9
+#define EGL_DEBUG_MSG_ERROR_KHR 0x33BA
+#define EGL_DEBUG_MSG_WARN_KHR 0x33BB
+#define EGL_DEBUG_MSG_INFO_KHR 0x33BC
+
+typedef EGLint ( * PFNEGLDEBUGMESSAGECONTROLKHRPROC) (EGLDEBUGPROCKHR callback, const EGLAttrib * attrib_list);
+typedef EGLint ( * PFNEGLLABELOBJECTKHRPROC) (EGLDisplay display, EGLenum objectType, EGLObjectKHR object, EGLLabelKHR label);
+typedef EGLBoolean ( * PFNEGLQUERYDEBUGKHRPROC) (EGLint attribute, EGLAttrib * value);
+
+#define eglDebugMessageControlKHR EGLEW_GET_FUN(__eglewDebugMessageControlKHR)
+#define eglLabelObjectKHR EGLEW_GET_FUN(__eglewLabelObjectKHR)
+#define eglQueryDebugKHR EGLEW_GET_FUN(__eglewQueryDebugKHR)
+
+#define EGLEW_KHR_debug EGLEW_GET_VAR(__EGLEW_KHR_debug)
+
+#endif /* EGL_KHR_debug */
+
+/* --------------------------- EGL_KHR_fence_sync -------------------------- */
+
+#ifndef EGL_KHR_fence_sync
+#define EGL_KHR_fence_sync 1
+
+#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR 0x30F0
+#define EGL_SYNC_CONDITION_KHR 0x30F8
+#define EGL_SYNC_FENCE_KHR 0x30F9
+
+#define EGLEW_KHR_fence_sync EGLEW_GET_VAR(__EGLEW_KHR_fence_sync)
+
+#endif /* EGL_KHR_fence_sync */
+
+/* --------------------- EGL_KHR_get_all_proc_addresses -------------------- */
+
+#ifndef EGL_KHR_get_all_proc_addresses
+#define EGL_KHR_get_all_proc_addresses 1
+
+#define EGLEW_KHR_get_all_proc_addresses EGLEW_GET_VAR(__EGLEW_KHR_get_all_proc_addresses)
+
+#endif /* EGL_KHR_get_all_proc_addresses */
+
+/* ------------------------- EGL_KHR_gl_colorspace ------------------------- */
+
+#ifndef EGL_KHR_gl_colorspace
+#define EGL_KHR_gl_colorspace 1
+
+#define EGL_GL_COLORSPACE_SRGB_KHR 0x3089
+#define EGL_GL_COLORSPACE_LINEAR_KHR 0x308A
+#define EGL_GL_COLORSPACE_KHR 0x309D
+
+#define EGLEW_KHR_gl_colorspace EGLEW_GET_VAR(__EGLEW_KHR_gl_colorspace)
+
+#endif /* EGL_KHR_gl_colorspace */
+
+/* --------------------- EGL_KHR_gl_renderbuffer_image --------------------- */
+
+#ifndef EGL_KHR_gl_renderbuffer_image
+#define EGL_KHR_gl_renderbuffer_image 1
+
+#define EGL_GL_RENDERBUFFER_KHR 0x30B9
+
+#define EGLEW_KHR_gl_renderbuffer_image EGLEW_GET_VAR(__EGLEW_KHR_gl_renderbuffer_image)
+
+#endif /* EGL_KHR_gl_renderbuffer_image */
+
+/* ---------------------- EGL_KHR_gl_texture_2D_image ---------------------- */
+
+#ifndef EGL_KHR_gl_texture_2D_image
+#define EGL_KHR_gl_texture_2D_image 1
+
+#define EGL_GL_TEXTURE_2D_KHR 0x30B1
+#define EGL_GL_TEXTURE_LEVEL_KHR 0x30BC
+
+#define EGLEW_KHR_gl_texture_2D_image EGLEW_GET_VAR(__EGLEW_KHR_gl_texture_2D_image)
+
+#endif /* EGL_KHR_gl_texture_2D_image */
+
+/* ---------------------- EGL_KHR_gl_texture_3D_image ---------------------- */
+
+#ifndef EGL_KHR_gl_texture_3D_image
+#define EGL_KHR_gl_texture_3D_image 1
+
+#define EGL_GL_TEXTURE_3D_KHR 0x30B2
+#define EGL_GL_TEXTURE_ZOFFSET_KHR 0x30BD
+
+#define EGLEW_KHR_gl_texture_3D_image EGLEW_GET_VAR(__EGLEW_KHR_gl_texture_3D_image)
+
+#endif /* EGL_KHR_gl_texture_3D_image */
+
+/* -------------------- EGL_KHR_gl_texture_cubemap_image ------------------- */
+
+#ifndef EGL_KHR_gl_texture_cubemap_image
+#define EGL_KHR_gl_texture_cubemap_image 1
+
+#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR 0x30B3
+#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR 0x30B4
+#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR 0x30B5
+#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR 0x30B6
+#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR 0x30B7
+#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR 0x30B8
+
+#define EGLEW_KHR_gl_texture_cubemap_image EGLEW_GET_VAR(__EGLEW_KHR_gl_texture_cubemap_image)
+
+#endif /* EGL_KHR_gl_texture_cubemap_image */
+
+/* ----------------------------- EGL_KHR_image ----------------------------- */
+
+#ifndef EGL_KHR_image
+#define EGL_KHR_image 1
+
+#define EGL_NATIVE_PIXMAP_KHR 0x30B0
+
+typedef EGLImageKHR ( * PFNEGLCREATEIMAGEKHRPROC) (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint * attrib_list);
+typedef EGLBoolean ( * PFNEGLDESTROYIMAGEKHRPROC) (EGLDisplay dpy, EGLImageKHR image);
+
+#define eglCreateImageKHR EGLEW_GET_FUN(__eglewCreateImageKHR)
+#define eglDestroyImageKHR EGLEW_GET_FUN(__eglewDestroyImageKHR)
+
+#define EGLEW_KHR_image EGLEW_GET_VAR(__EGLEW_KHR_image)
+
+#endif /* EGL_KHR_image */
+
+/* --------------------------- EGL_KHR_image_base -------------------------- */
+
+#ifndef EGL_KHR_image_base
+#define EGL_KHR_image_base 1
+
+#define EGL_IMAGE_PRESERVED_KHR 0x30D2
+
+#define EGLEW_KHR_image_base EGLEW_GET_VAR(__EGLEW_KHR_image_base)
+
+#endif /* EGL_KHR_image_base */
+
+/* -------------------------- EGL_KHR_image_pixmap ------------------------- */
+
+#ifndef EGL_KHR_image_pixmap
+#define EGL_KHR_image_pixmap 1
+
+#define EGL_NATIVE_PIXMAP_KHR 0x30B0
+
+#define EGLEW_KHR_image_pixmap EGLEW_GET_VAR(__EGLEW_KHR_image_pixmap)
+
+#endif /* EGL_KHR_image_pixmap */
+
+/* -------------------------- EGL_KHR_lock_surface ------------------------- */
+
+#ifndef EGL_KHR_lock_surface
+#define EGL_KHR_lock_surface 1
+
+#define EGL_READ_SURFACE_BIT_KHR 0x0001
+#define EGL_WRITE_SURFACE_BIT_KHR 0x0002
+#define EGL_LOCK_SURFACE_BIT_KHR 0x0080
+#define EGL_OPTIMAL_FORMAT_BIT_KHR 0x0100
+#define EGL_MATCH_FORMAT_KHR 0x3043
+#define EGL_FORMAT_RGB_565_EXACT_KHR 0x30C0
+#define EGL_FORMAT_RGB_565_KHR 0x30C1
+#define EGL_FORMAT_RGBA_8888_EXACT_KHR 0x30C2
+#define EGL_FORMAT_RGBA_8888_KHR 0x30C3
+#define EGL_MAP_PRESERVE_PIXELS_KHR 0x30C4
+#define EGL_LOCK_USAGE_HINT_KHR 0x30C5
+#define EGL_BITMAP_POINTER_KHR 0x30C6
+#define EGL_BITMAP_PITCH_KHR 0x30C7
+#define EGL_BITMAP_ORIGIN_KHR 0x30C8
+#define EGL_BITMAP_PIXEL_RED_OFFSET_KHR 0x30C9
+#define EGL_BITMAP_PIXEL_GREEN_OFFSET_KHR 0x30CA
+#define EGL_BITMAP_PIXEL_BLUE_OFFSET_KHR 0x30CB
+#define EGL_BITMAP_PIXEL_ALPHA_OFFSET_KHR 0x30CC
+#define EGL_BITMAP_PIXEL_LUMINANCE_OFFSET_KHR 0x30CD
+#define EGL_LOWER_LEFT_KHR 0x30CE
+#define EGL_UPPER_LEFT_KHR 0x30CF
+
+typedef EGLBoolean ( * PFNEGLLOCKSURFACEKHRPROC) (EGLDisplay dpy, EGLSurface surface, const EGLint * attrib_list);
+typedef EGLBoolean ( * PFNEGLUNLOCKSURFACEKHRPROC) (EGLDisplay dpy, EGLSurface surface);
+
+#define eglLockSurfaceKHR EGLEW_GET_FUN(__eglewLockSurfaceKHR)
+#define eglUnlockSurfaceKHR EGLEW_GET_FUN(__eglewUnlockSurfaceKHR)
+
+#define EGLEW_KHR_lock_surface EGLEW_GET_VAR(__EGLEW_KHR_lock_surface)
+
+#endif /* EGL_KHR_lock_surface */
+
+/* ------------------------- EGL_KHR_lock_surface2 ------------------------- */
+
+#ifndef EGL_KHR_lock_surface2
+#define EGL_KHR_lock_surface2 1
+
+#define EGL_BITMAP_PIXEL_SIZE_KHR 0x3110
+
+#define EGLEW_KHR_lock_surface2 EGLEW_GET_VAR(__EGLEW_KHR_lock_surface2)
+
+#endif /* EGL_KHR_lock_surface2 */
+
+/* ------------------------- EGL_KHR_lock_surface3 ------------------------- */
+
+#ifndef EGL_KHR_lock_surface3
+#define EGL_KHR_lock_surface3 1
+
+#define EGL_READ_SURFACE_BIT_KHR 0x0001
+#define EGL_WRITE_SURFACE_BIT_KHR 0x0002
+#define EGL_LOCK_SURFACE_BIT_KHR 0x0080
+#define EGL_OPTIMAL_FORMAT_BIT_KHR 0x0100
+#define EGL_MATCH_FORMAT_KHR 0x3043
+#define EGL_FORMAT_RGB_565_EXACT_KHR 0x30C0
+#define EGL_FORMAT_RGB_565_KHR 0x30C1
+#define EGL_FORMAT_RGBA_8888_EXACT_KHR 0x30C2
+#define EGL_FORMAT_RGBA_8888_KHR 0x30C3
+#define EGL_MAP_PRESERVE_PIXELS_KHR 0x30C4
+#define EGL_LOCK_USAGE_HINT_KHR 0x30C5
+#define EGL_BITMAP_POINTER_KHR 0x30C6
+#define EGL_BITMAP_PITCH_KHR 0x30C7
+#define EGL_BITMAP_ORIGIN_KHR 0x30C8
+#define EGL_BITMAP_PIXEL_RED_OFFSET_KHR 0x30C9
+#define EGL_BITMAP_PIXEL_GREEN_OFFSET_KHR 0x30CA
+#define EGL_BITMAP_PIXEL_BLUE_OFFSET_KHR 0x30CB
+#define EGL_BITMAP_PIXEL_ALPHA_OFFSET_KHR 0x30CC
+#define EGL_BITMAP_PIXEL_LUMINANCE_OFFSET_KHR 0x30CD
+#define EGL_LOWER_LEFT_KHR 0x30CE
+#define EGL_UPPER_LEFT_KHR 0x30CF
+#define EGL_BITMAP_PIXEL_SIZE_KHR 0x3110
+
+typedef EGLBoolean ( * PFNEGLQUERYSURFACE64KHRPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLAttribKHR * value);
+
+#define eglQuerySurface64KHR EGLEW_GET_FUN(__eglewQuerySurface64KHR)
+
+#define EGLEW_KHR_lock_surface3 EGLEW_GET_VAR(__EGLEW_KHR_lock_surface3)
+
+#endif /* EGL_KHR_lock_surface3 */
+
+/* --------------------- EGL_KHR_mutable_render_buffer --------------------- */
+
+#ifndef EGL_KHR_mutable_render_buffer
+#define EGL_KHR_mutable_render_buffer 1
+
+#define EGL_MUTABLE_RENDER_BUFFER_BIT_KHR 0x1000
+
+#define EGLEW_KHR_mutable_render_buffer EGLEW_GET_VAR(__EGLEW_KHR_mutable_render_buffer)
+
+#endif /* EGL_KHR_mutable_render_buffer */
+
+/* ------------------------- EGL_KHR_partial_update ------------------------ */
+
+#ifndef EGL_KHR_partial_update
+#define EGL_KHR_partial_update 1
+
+#define EGL_BUFFER_AGE_KHR 0x313D
+
+typedef EGLBoolean ( * PFNEGLSETDAMAGEREGIONKHRPROC) (EGLDisplay dpy, EGLSurface surface, EGLint * rects, EGLint n_rects);
+
+#define eglSetDamageRegionKHR EGLEW_GET_FUN(__eglewSetDamageRegionKHR)
+
+#define EGLEW_KHR_partial_update EGLEW_GET_VAR(__EGLEW_KHR_partial_update)
+
+#endif /* EGL_KHR_partial_update */
+
+/* ------------------------ EGL_KHR_platform_android ----------------------- */
+
+#ifndef EGL_KHR_platform_android
+#define EGL_KHR_platform_android 1
+
+#define EGL_PLATFORM_ANDROID_KHR 0x3141
+
+#define EGLEW_KHR_platform_android EGLEW_GET_VAR(__EGLEW_KHR_platform_android)
+
+#endif /* EGL_KHR_platform_android */
+
+/* -------------------------- EGL_KHR_platform_gbm ------------------------- */
+
+#ifndef EGL_KHR_platform_gbm
+#define EGL_KHR_platform_gbm 1
+
+#define EGL_PLATFORM_GBM_KHR 0x31D7
+
+#define EGLEW_KHR_platform_gbm EGLEW_GET_VAR(__EGLEW_KHR_platform_gbm)
+
+#endif /* EGL_KHR_platform_gbm */
+
+/* ------------------------ EGL_KHR_platform_wayland ----------------------- */
+
+#ifndef EGL_KHR_platform_wayland
+#define EGL_KHR_platform_wayland 1
+
+#define EGL_PLATFORM_WAYLAND_KHR 0x31D8
+
+#define EGLEW_KHR_platform_wayland EGLEW_GET_VAR(__EGLEW_KHR_platform_wayland)
+
+#endif /* EGL_KHR_platform_wayland */
+
+/* -------------------------- EGL_KHR_platform_x11 ------------------------- */
+
+#ifndef EGL_KHR_platform_x11
+#define EGL_KHR_platform_x11 1
+
+#define EGL_PLATFORM_X11_KHR 0x31D5
+#define EGL_PLATFORM_X11_SCREEN_KHR 0x31D6
+
+#define EGLEW_KHR_platform_x11 EGLEW_GET_VAR(__EGLEW_KHR_platform_x11)
+
+#endif /* EGL_KHR_platform_x11 */
+
+/* ------------------------- EGL_KHR_reusable_sync ------------------------- */
+
+#ifndef EGL_KHR_reusable_sync
+#define EGL_KHR_reusable_sync 1
+
+#define EGL_SYNC_FLUSH_COMMANDS_BIT_KHR 0x0001
+#define EGL_SYNC_STATUS_KHR 0x30F1
+#define EGL_SIGNALED_KHR 0x30F2
+#define EGL_UNSIGNALED_KHR 0x30F3
+#define EGL_TIMEOUT_EXPIRED_KHR 0x30F5
+#define EGL_CONDITION_SATISFIED_KHR 0x30F6
+#define EGL_SYNC_TYPE_KHR 0x30F7
+#define EGL_SYNC_REUSABLE_KHR 0x30FA
+#define EGL_FOREVER_KHR 0xFFFFFFFFFFFFFFFF
+
+typedef EGLint ( * PFNEGLCLIENTWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout);
+typedef EGLSyncKHR ( * PFNEGLCREATESYNCKHRPROC) (EGLDisplay dpy, EGLenum type, const EGLint * attrib_list);
+typedef EGLBoolean ( * PFNEGLDESTROYSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync);
+typedef EGLBoolean ( * PFNEGLGETSYNCATTRIBKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint * value);
+typedef EGLBoolean ( * PFNEGLSIGNALSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode);
+
+#define eglClientWaitSyncKHR EGLEW_GET_FUN(__eglewClientWaitSyncKHR)
+#define eglCreateSyncKHR EGLEW_GET_FUN(__eglewCreateSyncKHR)
+#define eglDestroySyncKHR EGLEW_GET_FUN(__eglewDestroySyncKHR)
+#define eglGetSyncAttribKHR EGLEW_GET_FUN(__eglewGetSyncAttribKHR)
+#define eglSignalSyncKHR EGLEW_GET_FUN(__eglewSignalSyncKHR)
+
+#define EGLEW_KHR_reusable_sync EGLEW_GET_VAR(__EGLEW_KHR_reusable_sync)
+
+#endif /* EGL_KHR_reusable_sync */
+
+/* ----------------------------- EGL_KHR_stream ---------------------------- */
+
+#ifndef EGL_KHR_stream
+#define EGL_KHR_stream 1
+
+#define EGL_CONSUMER_LATENCY_USEC_KHR 0x3210
+#define EGL_PRODUCER_FRAME_KHR 0x3212
+#define EGL_CONSUMER_FRAME_KHR 0x3213
+#define EGL_STREAM_STATE_KHR 0x3214
+#define EGL_STREAM_STATE_CREATED_KHR 0x3215
+#define EGL_STREAM_STATE_CONNECTING_KHR 0x3216
+#define EGL_STREAM_STATE_EMPTY_KHR 0x3217
+#define EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR 0x3218
+#define EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR 0x3219
+#define EGL_STREAM_STATE_DISCONNECTED_KHR 0x321A
+#define EGL_BAD_STREAM_KHR 0x321B
+#define EGL_BAD_STATE_KHR 0x321C
+
+typedef EGLStreamKHR ( * PFNEGLCREATESTREAMKHRPROC) (EGLDisplay dpy, const EGLint * attrib_list);
+typedef EGLBoolean ( * PFNEGLDESTROYSTREAMKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream);
+typedef EGLBoolean ( * PFNEGLQUERYSTREAMKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint * value);
+typedef EGLBoolean ( * PFNEGLQUERYSTREAMU64KHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR * value);
+typedef EGLBoolean ( * PFNEGLSTREAMATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value);
+
+#define eglCreateStreamKHR EGLEW_GET_FUN(__eglewCreateStreamKHR)
+#define eglDestroyStreamKHR EGLEW_GET_FUN(__eglewDestroyStreamKHR)
+#define eglQueryStreamKHR EGLEW_GET_FUN(__eglewQueryStreamKHR)
+#define eglQueryStreamu64KHR EGLEW_GET_FUN(__eglewQueryStreamu64KHR)
+#define eglStreamAttribKHR EGLEW_GET_FUN(__eglewStreamAttribKHR)
+
+#define EGLEW_KHR_stream EGLEW_GET_VAR(__EGLEW_KHR_stream)
+
+#endif /* EGL_KHR_stream */
+
+/* ------------------- EGL_KHR_stream_consumer_gltexture ------------------- */
+
+#ifndef EGL_KHR_stream_consumer_gltexture
+#define EGL_KHR_stream_consumer_gltexture 1
+
+#define EGL_CONSUMER_ACQUIRE_TIMEOUT_USEC_KHR 0x321E
+
+typedef EGLBoolean ( * PFNEGLSTREAMCONSUMERACQUIREKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream);
+typedef EGLBoolean ( * PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream);
+typedef EGLBoolean ( * PFNEGLSTREAMCONSUMERRELEASEKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream);
+
+#define eglStreamConsumerAcquireKHR EGLEW_GET_FUN(__eglewStreamConsumerAcquireKHR)
+#define eglStreamConsumerGLTextureExternalKHR EGLEW_GET_FUN(__eglewStreamConsumerGLTextureExternalKHR)
+#define eglStreamConsumerReleaseKHR EGLEW_GET_FUN(__eglewStreamConsumerReleaseKHR)
+
+#define EGLEW_KHR_stream_consumer_gltexture EGLEW_GET_VAR(__EGLEW_KHR_stream_consumer_gltexture)
+
+#endif /* EGL_KHR_stream_consumer_gltexture */
+
+/* -------------------- EGL_KHR_stream_cross_process_fd -------------------- */
+
+#ifndef EGL_KHR_stream_cross_process_fd
+#define EGL_KHR_stream_cross_process_fd 1
+
+typedef EGLStreamKHR ( * PFNEGLCREATESTREAMFROMFILEDESCRIPTORKHRPROC) (EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor);
+typedef EGLNativeFileDescriptorKHR ( * PFNEGLGETSTREAMFILEDESCRIPTORKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream);
+
+#define eglCreateStreamFromFileDescriptorKHR EGLEW_GET_FUN(__eglewCreateStreamFromFileDescriptorKHR)
+#define eglGetStreamFileDescriptorKHR EGLEW_GET_FUN(__eglewGetStreamFileDescriptorKHR)
+
+#define EGLEW_KHR_stream_cross_process_fd EGLEW_GET_VAR(__EGLEW_KHR_stream_cross_process_fd)
+
+#endif /* EGL_KHR_stream_cross_process_fd */
+
+/* -------------------------- EGL_KHR_stream_fifo -------------------------- */
+
+#ifndef EGL_KHR_stream_fifo
+#define EGL_KHR_stream_fifo 1
+
+#define EGL_STREAM_FIFO_LENGTH_KHR 0x31FC
+#define EGL_STREAM_TIME_NOW_KHR 0x31FD
+#define EGL_STREAM_TIME_CONSUMER_KHR 0x31FE
+#define EGL_STREAM_TIME_PRODUCER_KHR 0x31FF
+
+typedef EGLBoolean ( * PFNEGLQUERYSTREAMTIMEKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR * value);
+
+#define eglQueryStreamTimeKHR EGLEW_GET_FUN(__eglewQueryStreamTimeKHR)
+
+#define EGLEW_KHR_stream_fifo EGLEW_GET_VAR(__EGLEW_KHR_stream_fifo)
+
+#endif /* EGL_KHR_stream_fifo */
+
+/* ----------------- EGL_KHR_stream_producer_aldatalocator ----------------- */
+
+#ifndef EGL_KHR_stream_producer_aldatalocator
+#define EGL_KHR_stream_producer_aldatalocator 1
+
+#define EGLEW_KHR_stream_producer_aldatalocator EGLEW_GET_VAR(__EGLEW_KHR_stream_producer_aldatalocator)
+
+#endif /* EGL_KHR_stream_producer_aldatalocator */
+
+/* ------------------- EGL_KHR_stream_producer_eglsurface ------------------ */
+
+#ifndef EGL_KHR_stream_producer_eglsurface
+#define EGL_KHR_stream_producer_eglsurface 1
+
+#define EGL_STREAM_BIT_KHR 0x0800
+
+typedef EGLSurface ( * PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC) (EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint * attrib_list);
+
+#define eglCreateStreamProducerSurfaceKHR EGLEW_GET_FUN(__eglewCreateStreamProducerSurfaceKHR)
+
+#define EGLEW_KHR_stream_producer_eglsurface EGLEW_GET_VAR(__EGLEW_KHR_stream_producer_eglsurface)
+
+#endif /* EGL_KHR_stream_producer_eglsurface */
+
+/* ---------------------- EGL_KHR_surfaceless_context ---------------------- */
+
+#ifndef EGL_KHR_surfaceless_context
+#define EGL_KHR_surfaceless_context 1
+
+#define EGLEW_KHR_surfaceless_context EGLEW_GET_VAR(__EGLEW_KHR_surfaceless_context)
+
+#endif /* EGL_KHR_surfaceless_context */
+
+/* -------------------- EGL_KHR_swap_buffers_with_damage ------------------- */
+
+#ifndef EGL_KHR_swap_buffers_with_damage
+#define EGL_KHR_swap_buffers_with_damage 1
+
+typedef EGLBoolean ( * PFNEGLSWAPBUFFERSWITHDAMAGEKHRPROC) (EGLDisplay dpy, EGLSurface surface, EGLint * rects, EGLint n_rects);
+
+#define eglSwapBuffersWithDamageKHR EGLEW_GET_FUN(__eglewSwapBuffersWithDamageKHR)
+
+#define EGLEW_KHR_swap_buffers_with_damage EGLEW_GET_VAR(__EGLEW_KHR_swap_buffers_with_damage)
+
+#endif /* EGL_KHR_swap_buffers_with_damage */
+
+/* ------------------------ EGL_KHR_vg_parent_image ------------------------ */
+
+#ifndef EGL_KHR_vg_parent_image
+#define EGL_KHR_vg_parent_image 1
+
+#define EGL_VG_PARENT_IMAGE_KHR 0x30BA
+
+#define EGLEW_KHR_vg_parent_image EGLEW_GET_VAR(__EGLEW_KHR_vg_parent_image)
+
+#endif /* EGL_KHR_vg_parent_image */
+
+/* --------------------------- EGL_KHR_wait_sync --------------------------- */
+
+#ifndef EGL_KHR_wait_sync
+#define EGL_KHR_wait_sync 1
+
+typedef EGLint ( * PFNEGLWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags);
+
+#define eglWaitSyncKHR EGLEW_GET_FUN(__eglewWaitSyncKHR)
+
+#define EGLEW_KHR_wait_sync EGLEW_GET_VAR(__EGLEW_KHR_wait_sync)
+
+#endif /* EGL_KHR_wait_sync */
+
+/* --------------------------- EGL_MESA_drm_image -------------------------- */
+
+#ifndef EGL_MESA_drm_image
+#define EGL_MESA_drm_image 1
+
+#define EGL_DRM_BUFFER_USE_SCANOUT_MESA 0x00000001
+#define EGL_DRM_BUFFER_USE_SHARE_MESA 0x00000002
+#define EGL_DRM_BUFFER_FORMAT_MESA 0x31D0
+#define EGL_DRM_BUFFER_USE_MESA 0x31D1
+#define EGL_DRM_BUFFER_FORMAT_ARGB32_MESA 0x31D2
+#define EGL_DRM_BUFFER_MESA 0x31D3
+#define EGL_DRM_BUFFER_STRIDE_MESA 0x31D4
+
+typedef EGLImageKHR ( * PFNEGLCREATEDRMIMAGEMESAPROC) (EGLDisplay dpy, const EGLint * attrib_list);
+typedef EGLBoolean ( * PFNEGLEXPORTDRMIMAGEMESAPROC) (EGLDisplay dpy, EGLImageKHR image, EGLint * name, EGLint * handle, EGLint * stride);
+
+#define eglCreateDRMImageMESA EGLEW_GET_FUN(__eglewCreateDRMImageMESA)
+#define eglExportDRMImageMESA EGLEW_GET_FUN(__eglewExportDRMImageMESA)
+
+#define EGLEW_MESA_drm_image EGLEW_GET_VAR(__EGLEW_MESA_drm_image)
+
+#endif /* EGL_MESA_drm_image */
+
+/* --------------------- EGL_MESA_image_dma_buf_export --------------------- */
+
+#ifndef EGL_MESA_image_dma_buf_export
+#define EGL_MESA_image_dma_buf_export 1
+
+typedef EGLBoolean ( * PFNEGLEXPORTDMABUFIMAGEMESAPROC) (EGLDisplay dpy, EGLImageKHR image, int * fds, EGLint * strides, EGLint * offsets);
+typedef EGLBoolean ( * PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC) (EGLDisplay dpy, EGLImageKHR image, int * fourcc, int * num_planes, EGLuint64KHR * modifiers);
+
+#define eglExportDMABUFImageMESA EGLEW_GET_FUN(__eglewExportDMABUFImageMESA)
+#define eglExportDMABUFImageQueryMESA EGLEW_GET_FUN(__eglewExportDMABUFImageQueryMESA)
+
+#define EGLEW_MESA_image_dma_buf_export EGLEW_GET_VAR(__EGLEW_MESA_image_dma_buf_export)
+
+#endif /* EGL_MESA_image_dma_buf_export */
+
+/* ------------------------- EGL_MESA_platform_gbm ------------------------- */
+
+#ifndef EGL_MESA_platform_gbm
+#define EGL_MESA_platform_gbm 1
+
+#define EGL_PLATFORM_GBM_MESA 0x31D7
+
+#define EGLEW_MESA_platform_gbm EGLEW_GET_VAR(__EGLEW_MESA_platform_gbm)
+
+#endif /* EGL_MESA_platform_gbm */
+
+/* -------------------------- EGL_NOK_swap_region -------------------------- */
+
+#ifndef EGL_NOK_swap_region
+#define EGL_NOK_swap_region 1
+
+typedef EGLBoolean ( * PFNEGLSWAPBUFFERSREGIONNOKPROC) (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint * rects);
+
+#define eglSwapBuffersRegionNOK EGLEW_GET_FUN(__eglewSwapBuffersRegionNOK)
+
+#define EGLEW_NOK_swap_region EGLEW_GET_VAR(__EGLEW_NOK_swap_region)
+
+#endif /* EGL_NOK_swap_region */
+
+/* -------------------------- EGL_NOK_swap_region2 ------------------------- */
+
+#ifndef EGL_NOK_swap_region2
+#define EGL_NOK_swap_region2 1
+
+typedef EGLBoolean ( * PFNEGLSWAPBUFFERSREGION2NOKPROC) (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint * rects);
+
+#define eglSwapBuffersRegion2NOK EGLEW_GET_FUN(__eglewSwapBuffersRegion2NOK)
+
+#define EGLEW_NOK_swap_region2 EGLEW_GET_VAR(__EGLEW_NOK_swap_region2)
+
+#endif /* EGL_NOK_swap_region2 */
+
+/* ---------------------- EGL_NOK_texture_from_pixmap ---------------------- */
+
+#ifndef EGL_NOK_texture_from_pixmap
+#define EGL_NOK_texture_from_pixmap 1
+
+#define EGL_Y_INVERTED_NOK 0x307F
+
+#define EGLEW_NOK_texture_from_pixmap EGLEW_GET_VAR(__EGLEW_NOK_texture_from_pixmap)
+
+#endif /* EGL_NOK_texture_from_pixmap */
+
+/* ------------------------ EGL_NV_3dvision_surface ------------------------ */
+
+#ifndef EGL_NV_3dvision_surface
+#define EGL_NV_3dvision_surface 1
+
+#define EGL_AUTO_STEREO_NV 0x3136
+
+#define EGLEW_NV_3dvision_surface EGLEW_GET_VAR(__EGLEW_NV_3dvision_surface)
+
+#endif /* EGL_NV_3dvision_surface */
+
+/* ------------------------- EGL_NV_coverage_sample ------------------------ */
+
+#ifndef EGL_NV_coverage_sample
+#define EGL_NV_coverage_sample 1
+
+#define EGL_COVERAGE_BUFFERS_NV 0x30E0
+#define EGL_COVERAGE_SAMPLES_NV 0x30E1
+
+#define EGLEW_NV_coverage_sample EGLEW_GET_VAR(__EGLEW_NV_coverage_sample)
+
+#endif /* EGL_NV_coverage_sample */
+
+/* --------------------- EGL_NV_coverage_sample_resolve -------------------- */
+
+#ifndef EGL_NV_coverage_sample_resolve
+#define EGL_NV_coverage_sample_resolve 1
+
+#define EGL_COVERAGE_SAMPLE_RESOLVE_NV 0x3131
+#define EGL_COVERAGE_SAMPLE_RESOLVE_DEFAULT_NV 0x3132
+#define EGL_COVERAGE_SAMPLE_RESOLVE_NONE_NV 0x3133
+
+#define EGLEW_NV_coverage_sample_resolve EGLEW_GET_VAR(__EGLEW_NV_coverage_sample_resolve)
+
+#endif /* EGL_NV_coverage_sample_resolve */
+
+/* --------------------------- EGL_NV_cuda_event --------------------------- */
+
+#ifndef EGL_NV_cuda_event
+#define EGL_NV_cuda_event 1
+
+#define EGL_CUDA_EVENT_HANDLE_NV 0x323B
+#define EGL_SYNC_CUDA_EVENT_NV 0x323C
+#define EGL_SYNC_CUDA_EVENT_COMPLETE_NV 0x323D
+
+#define EGLEW_NV_cuda_event EGLEW_GET_VAR(__EGLEW_NV_cuda_event)
+
+#endif /* EGL_NV_cuda_event */
+
+/* ------------------------- EGL_NV_depth_nonlinear ------------------------ */
+
+#ifndef EGL_NV_depth_nonlinear
+#define EGL_NV_depth_nonlinear 1
+
+#define EGL_DEPTH_ENCODING_NONE_NV 0
+#define EGL_DEPTH_ENCODING_NV 0x30E2
+#define EGL_DEPTH_ENCODING_NONLINEAR_NV 0x30E3
+
+#define EGLEW_NV_depth_nonlinear EGLEW_GET_VAR(__EGLEW_NV_depth_nonlinear)
+
+#endif /* EGL_NV_depth_nonlinear */
+
+/* --------------------------- EGL_NV_device_cuda -------------------------- */
+
+#ifndef EGL_NV_device_cuda
+#define EGL_NV_device_cuda 1
+
+#define EGL_CUDA_DEVICE_NV 0x323A
+
+#define EGLEW_NV_device_cuda EGLEW_GET_VAR(__EGLEW_NV_device_cuda)
+
+#endif /* EGL_NV_device_cuda */
+
+/* -------------------------- EGL_NV_native_query -------------------------- */
+
+#ifndef EGL_NV_native_query
+#define EGL_NV_native_query 1
+
+typedef EGLBoolean ( * PFNEGLQUERYNATIVEDISPLAYNVPROC) (EGLDisplay dpy, EGLNativeDisplayType * display_id);
+typedef EGLBoolean ( * PFNEGLQUERYNATIVEPIXMAPNVPROC) (EGLDisplay dpy, EGLSurface surf, EGLNativePixmapType * pixmap);
+typedef EGLBoolean ( * PFNEGLQUERYNATIVEWINDOWNVPROC) (EGLDisplay dpy, EGLSurface surf, EGLNativeWindowType * window);
+
+#define eglQueryNativeDisplayNV EGLEW_GET_FUN(__eglewQueryNativeDisplayNV)
+#define eglQueryNativePixmapNV EGLEW_GET_FUN(__eglewQueryNativePixmapNV)
+#define eglQueryNativeWindowNV EGLEW_GET_FUN(__eglewQueryNativeWindowNV)
+
+#define EGLEW_NV_native_query EGLEW_GET_VAR(__EGLEW_NV_native_query)
+
+#endif /* EGL_NV_native_query */
+
+/* ---------------------- EGL_NV_post_convert_rounding --------------------- */
+
+#ifndef EGL_NV_post_convert_rounding
+#define EGL_NV_post_convert_rounding 1
+
+#define EGLEW_NV_post_convert_rounding EGLEW_GET_VAR(__EGLEW_NV_post_convert_rounding)
+
+#endif /* EGL_NV_post_convert_rounding */
+
+/* ------------------------- EGL_NV_post_sub_buffer ------------------------ */
+
+#ifndef EGL_NV_post_sub_buffer
+#define EGL_NV_post_sub_buffer 1
+
+#define EGL_POST_SUB_BUFFER_SUPPORTED_NV 0x30BE
+
+typedef EGLBoolean ( * PFNEGLPOSTSUBBUFFERNVPROC) (EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height);
+
+#define eglPostSubBufferNV EGLEW_GET_FUN(__eglewPostSubBufferNV)
+
+#define EGLEW_NV_post_sub_buffer EGLEW_GET_VAR(__EGLEW_NV_post_sub_buffer)
+
+#endif /* EGL_NV_post_sub_buffer */
+
+/* ------------------ EGL_NV_robustness_video_memory_purge ----------------- */
+
+#ifndef EGL_NV_robustness_video_memory_purge
+#define EGL_NV_robustness_video_memory_purge 1
+
+#define EGL_GENERATE_RESET_ON_VIDEO_MEMORY_PURGE_NV 0x334C
+
+#define EGLEW_NV_robustness_video_memory_purge EGLEW_GET_VAR(__EGLEW_NV_robustness_video_memory_purge)
+
+#endif /* EGL_NV_robustness_video_memory_purge */
+
+/* ------------------ EGL_NV_stream_consumer_gltexture_yuv ----------------- */
+
+#ifndef EGL_NV_stream_consumer_gltexture_yuv
+#define EGL_NV_stream_consumer_gltexture_yuv 1
+
+#define EGL_YUV_BUFFER_EXT 0x3300
+#define EGL_YUV_NUMBER_OF_PLANES_EXT 0x3311
+#define EGL_YUV_PLANE0_TEXTURE_UNIT_NV 0x332C
+#define EGL_YUV_PLANE1_TEXTURE_UNIT_NV 0x332D
+#define EGL_YUV_PLANE2_TEXTURE_UNIT_NV 0x332E
+
+typedef EGLBoolean ( * PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALATTRIBSNVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLAttrib *attrib_list);
+
+#define eglStreamConsumerGLTextureExternalAttribsNV EGLEW_GET_FUN(__eglewStreamConsumerGLTextureExternalAttribsNV)
+
+#define EGLEW_NV_stream_consumer_gltexture_yuv EGLEW_GET_VAR(__EGLEW_NV_stream_consumer_gltexture_yuv)
+
+#endif /* EGL_NV_stream_consumer_gltexture_yuv */
+
+/* ------------------------- EGL_NV_stream_metadata ------------------------ */
+
+#ifndef EGL_NV_stream_metadata
+#define EGL_NV_stream_metadata 1
+
+#define EGL_MAX_STREAM_METADATA_BLOCKS_NV 0x3250
+#define EGL_MAX_STREAM_METADATA_BLOCK_SIZE_NV 0x3251
+#define EGL_MAX_STREAM_METADATA_TOTAL_SIZE_NV 0x3252
+#define EGL_PRODUCER_METADATA_NV 0x3253
+#define EGL_CONSUMER_METADATA_NV 0x3254
+#define EGL_METADATA0_SIZE_NV 0x3255
+#define EGL_METADATA1_SIZE_NV 0x3256
+#define EGL_METADATA2_SIZE_NV 0x3257
+#define EGL_METADATA3_SIZE_NV 0x3258
+#define EGL_METADATA0_TYPE_NV 0x3259
+#define EGL_METADATA1_TYPE_NV 0x325A
+#define EGL_METADATA2_TYPE_NV 0x325B
+#define EGL_METADATA3_TYPE_NV 0x325C
+#define EGL_PENDING_METADATA_NV 0x3328
+
+typedef EGLBoolean ( * PFNEGLQUERYDISPLAYATTRIBNVPROC) (EGLDisplay dpy, EGLint attribute, EGLAttrib * value);
+typedef EGLBoolean ( * PFNEGLQUERYSTREAMMETADATANVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum name, EGLint n, EGLint offset, EGLint size, void * data);
+typedef EGLBoolean ( * PFNEGLSETSTREAMMETADATANVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLint n, EGLint offset, EGLint size, const void * data);
+
+#define eglQueryDisplayAttribNV EGLEW_GET_FUN(__eglewQueryDisplayAttribNV)
+#define eglQueryStreamMetadataNV EGLEW_GET_FUN(__eglewQueryStreamMetadataNV)
+#define eglSetStreamMetadataNV EGLEW_GET_FUN(__eglewSetStreamMetadataNV)
+
+#define EGLEW_NV_stream_metadata EGLEW_GET_VAR(__EGLEW_NV_stream_metadata)
+
+#endif /* EGL_NV_stream_metadata */
+
+/* --------------------------- EGL_NV_stream_sync -------------------------- */
+
+#ifndef EGL_NV_stream_sync
+#define EGL_NV_stream_sync 1
+
+#define EGL_SYNC_TYPE_KHR 0x30F7
+#define EGL_SYNC_NEW_FRAME_NV 0x321F
+
+typedef EGLSyncKHR ( * PFNEGLCREATESTREAMSYNCNVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum type, const EGLint * attrib_list);
+
+#define eglCreateStreamSyncNV EGLEW_GET_FUN(__eglewCreateStreamSyncNV)
+
+#define EGLEW_NV_stream_sync EGLEW_GET_VAR(__EGLEW_NV_stream_sync)
+
+#endif /* EGL_NV_stream_sync */
+
+/* ------------------------------ EGL_NV_sync ------------------------------ */
+
+#ifndef EGL_NV_sync
+#define EGL_NV_sync 1
+
+#define EGL_SYNC_FLUSH_COMMANDS_BIT_NV 0x0001
+#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_NV 0x30E6
+#define EGL_SYNC_STATUS_NV 0x30E7
+#define EGL_SIGNALED_NV 0x30E8
+#define EGL_UNSIGNALED_NV 0x30E9
+#define EGL_ALREADY_SIGNALED_NV 0x30EA
+#define EGL_TIMEOUT_EXPIRED_NV 0x30EB
+#define EGL_CONDITION_SATISFIED_NV 0x30EC
+#define EGL_SYNC_TYPE_NV 0x30ED
+#define EGL_SYNC_CONDITION_NV 0x30EE
+#define EGL_SYNC_FENCE_NV 0x30EF
+#define EGL_FOREVER_NV 0xFFFFFFFFFFFFFFFF
+
+typedef EGLint ( * PFNEGLCLIENTWAITSYNCNVPROC) (EGLSyncNV sync, EGLint flags, EGLTimeNV timeout);
+typedef EGLSyncNV ( * PFNEGLCREATEFENCESYNCNVPROC) (EGLDisplay dpy, EGLenum condition, const EGLint * attrib_list);
+typedef EGLBoolean ( * PFNEGLDESTROYSYNCNVPROC) (EGLSyncNV sync);
+typedef EGLBoolean ( * PFNEGLFENCENVPROC) (EGLSyncNV sync);
+typedef EGLBoolean ( * PFNEGLGETSYNCATTRIBNVPROC) (EGLSyncNV sync, EGLint attribute, EGLint * value);
+typedef EGLBoolean ( * PFNEGLSIGNALSYNCNVPROC) (EGLSyncNV sync, EGLenum mode);
+
+#define eglClientWaitSyncNV EGLEW_GET_FUN(__eglewClientWaitSyncNV)
+#define eglCreateFenceSyncNV EGLEW_GET_FUN(__eglewCreateFenceSyncNV)
+#define eglDestroySyncNV EGLEW_GET_FUN(__eglewDestroySyncNV)
+#define eglFenceNV EGLEW_GET_FUN(__eglewFenceNV)
+#define eglGetSyncAttribNV EGLEW_GET_FUN(__eglewGetSyncAttribNV)
+#define eglSignalSyncNV EGLEW_GET_FUN(__eglewSignalSyncNV)
+
+#define EGLEW_NV_sync EGLEW_GET_VAR(__EGLEW_NV_sync)
+
+#endif /* EGL_NV_sync */
+
+/* --------------------------- EGL_NV_system_time -------------------------- */
+
+#ifndef EGL_NV_system_time
+#define EGL_NV_system_time 1
+
+typedef EGLuint64NV ( * PFNEGLGETSYSTEMTIMEFREQUENCYNVPROC) ( void );
+typedef EGLuint64NV ( * PFNEGLGETSYSTEMTIMENVPROC) ( void );
+
+#define eglGetSystemTimeFrequencyNV EGLEW_GET_FUN(__eglewGetSystemTimeFrequencyNV)
+#define eglGetSystemTimeNV EGLEW_GET_FUN(__eglewGetSystemTimeNV)
+
+#define EGLEW_NV_system_time EGLEW_GET_VAR(__EGLEW_NV_system_time)
+
+#endif /* EGL_NV_system_time */
+
+/* --------------------- EGL_TIZEN_image_native_buffer --------------------- */
+
+#ifndef EGL_TIZEN_image_native_buffer
+#define EGL_TIZEN_image_native_buffer 1
+
+#define EGL_NATIVE_BUFFER_TIZEN 0x32A0
+
+#define EGLEW_TIZEN_image_native_buffer EGLEW_GET_VAR(__EGLEW_TIZEN_image_native_buffer)
+
+#endif /* EGL_TIZEN_image_native_buffer */
+
+/* --------------------- EGL_TIZEN_image_native_surface -------------------- */
+
+#ifndef EGL_TIZEN_image_native_surface
+#define EGL_TIZEN_image_native_surface 1
+
+#define EGL_NATIVE_SURFACE_TIZEN 0x32A1
+
+#define EGLEW_TIZEN_image_native_surface EGLEW_GET_VAR(__EGLEW_TIZEN_image_native_surface)
+
+#endif /* EGL_TIZEN_image_native_surface */
+
+/* ------------------------------------------------------------------------- */
+
+#define EGLEW_FUN_EXPORT GLEW_FUN_EXPORT
+#define EGLEW_VAR_EXPORT GLEW_VAR_EXPORT
+
+EGLEW_FUN_EXPORT PFNEGLCHOOSECONFIGPROC __eglewChooseConfig;
+EGLEW_FUN_EXPORT PFNEGLCOPYBUFFERSPROC __eglewCopyBuffers;
+EGLEW_FUN_EXPORT PFNEGLCREATECONTEXTPROC __eglewCreateContext;
+EGLEW_FUN_EXPORT PFNEGLCREATEPBUFFERSURFACEPROC __eglewCreatePbufferSurface;
+EGLEW_FUN_EXPORT PFNEGLCREATEPIXMAPSURFACEPROC __eglewCreatePixmapSurface;
+EGLEW_FUN_EXPORT PFNEGLCREATEWINDOWSURFACEPROC __eglewCreateWindowSurface;
+EGLEW_FUN_EXPORT PFNEGLDESTROYCONTEXTPROC __eglewDestroyContext;
+EGLEW_FUN_EXPORT PFNEGLDESTROYSURFACEPROC __eglewDestroySurface;
+EGLEW_FUN_EXPORT PFNEGLGETCONFIGATTRIBPROC __eglewGetConfigAttrib;
+EGLEW_FUN_EXPORT PFNEGLGETCONFIGSPROC __eglewGetConfigs;
+EGLEW_FUN_EXPORT PFNEGLGETCURRENTDISPLAYPROC __eglewGetCurrentDisplay;
+EGLEW_FUN_EXPORT PFNEGLGETCURRENTSURFACEPROC __eglewGetCurrentSurface;
+EGLEW_FUN_EXPORT PFNEGLGETDISPLAYPROC __eglewGetDisplay;
+EGLEW_FUN_EXPORT PFNEGLGETERRORPROC __eglewGetError;
+EGLEW_FUN_EXPORT PFNEGLINITIALIZEPROC __eglewInitialize;
+EGLEW_FUN_EXPORT PFNEGLMAKECURRENTPROC __eglewMakeCurrent;
+EGLEW_FUN_EXPORT PFNEGLQUERYCONTEXTPROC __eglewQueryContext;
+EGLEW_FUN_EXPORT PFNEGLQUERYSTRINGPROC __eglewQueryString;
+EGLEW_FUN_EXPORT PFNEGLQUERYSURFACEPROC __eglewQuerySurface;
+EGLEW_FUN_EXPORT PFNEGLSWAPBUFFERSPROC __eglewSwapBuffers;
+EGLEW_FUN_EXPORT PFNEGLTERMINATEPROC __eglewTerminate;
+EGLEW_FUN_EXPORT PFNEGLWAITGLPROC __eglewWaitGL;
+EGLEW_FUN_EXPORT PFNEGLWAITNATIVEPROC __eglewWaitNative;
+
+EGLEW_FUN_EXPORT PFNEGLBINDTEXIMAGEPROC __eglewBindTexImage;
+EGLEW_FUN_EXPORT PFNEGLRELEASETEXIMAGEPROC __eglewReleaseTexImage;
+EGLEW_FUN_EXPORT PFNEGLSURFACEATTRIBPROC __eglewSurfaceAttrib;
+EGLEW_FUN_EXPORT PFNEGLSWAPINTERVALPROC __eglewSwapInterval;
+
+EGLEW_FUN_EXPORT PFNEGLBINDAPIPROC __eglewBindAPI;
+EGLEW_FUN_EXPORT PFNEGLCREATEPBUFFERFROMCLIENTBUFFERPROC __eglewCreatePbufferFromClientBuffer;
+EGLEW_FUN_EXPORT PFNEGLQUERYAPIPROC __eglewQueryAPI;
+EGLEW_FUN_EXPORT PFNEGLRELEASETHREADPROC __eglewReleaseThread;
+EGLEW_FUN_EXPORT PFNEGLWAITCLIENTPROC __eglewWaitClient;
+
+EGLEW_FUN_EXPORT PFNEGLGETCURRENTCONTEXTPROC __eglewGetCurrentContext;
+
+EGLEW_FUN_EXPORT PFNEGLCLIENTWAITSYNCPROC __eglewClientWaitSync;
+EGLEW_FUN_EXPORT PFNEGLCREATEIMAGEPROC __eglewCreateImage;
+EGLEW_FUN_EXPORT PFNEGLCREATEPLATFORMPIXMAPSURFACEPROC __eglewCreatePlatformPixmapSurface;
+EGLEW_FUN_EXPORT PFNEGLCREATEPLATFORMWINDOWSURFACEPROC __eglewCreatePlatformWindowSurface;
+EGLEW_FUN_EXPORT PFNEGLCREATESYNCPROC __eglewCreateSync;
+EGLEW_FUN_EXPORT PFNEGLDESTROYIMAGEPROC __eglewDestroyImage;
+EGLEW_FUN_EXPORT PFNEGLDESTROYSYNCPROC __eglewDestroySync;
+EGLEW_FUN_EXPORT PFNEGLGETPLATFORMDISPLAYPROC __eglewGetPlatformDisplay;
+EGLEW_FUN_EXPORT PFNEGLGETSYNCATTRIBPROC __eglewGetSyncAttrib;
+EGLEW_FUN_EXPORT PFNEGLWAITSYNCPROC __eglewWaitSync;
+
+EGLEW_FUN_EXPORT PFNEGLSETBLOBCACHEFUNCSANDROIDPROC __eglewSetBlobCacheFuncsANDROID;
+
+EGLEW_FUN_EXPORT PFNEGLCREATENATIVECLIENTBUFFERANDROIDPROC __eglewCreateNativeClientBufferANDROID;
+
+EGLEW_FUN_EXPORT PFNEGLDUPNATIVEFENCEFDANDROIDPROC __eglewDupNativeFenceFDANDROID;
+
+EGLEW_FUN_EXPORT PFNEGLPRESENTATIONTIMEANDROIDPROC __eglewPresentationTimeANDROID;
+
+EGLEW_FUN_EXPORT PFNEGLQUERYSURFACEPOINTERANGLEPROC __eglewQuerySurfacePointerANGLE;
+
+EGLEW_FUN_EXPORT PFNEGLQUERYDEVICESEXTPROC __eglewQueryDevicesEXT;
+
+EGLEW_FUN_EXPORT PFNEGLQUERYDEVICEATTRIBEXTPROC __eglewQueryDeviceAttribEXT;
+EGLEW_FUN_EXPORT PFNEGLQUERYDEVICESTRINGEXTPROC __eglewQueryDeviceStringEXT;
+EGLEW_FUN_EXPORT PFNEGLQUERYDISPLAYATTRIBEXTPROC __eglewQueryDisplayAttribEXT;
+
+EGLEW_FUN_EXPORT PFNEGLGETOUTPUTLAYERSEXTPROC __eglewGetOutputLayersEXT;
+EGLEW_FUN_EXPORT PFNEGLGETOUTPUTPORTSEXTPROC __eglewGetOutputPortsEXT;
+EGLEW_FUN_EXPORT PFNEGLOUTPUTLAYERATTRIBEXTPROC __eglewOutputLayerAttribEXT;
+EGLEW_FUN_EXPORT PFNEGLOUTPUTPORTATTRIBEXTPROC __eglewOutputPortAttribEXT;
+EGLEW_FUN_EXPORT PFNEGLQUERYOUTPUTLAYERATTRIBEXTPROC __eglewQueryOutputLayerAttribEXT;
+EGLEW_FUN_EXPORT PFNEGLQUERYOUTPUTLAYERSTRINGEXTPROC __eglewQueryOutputLayerStringEXT;
+EGLEW_FUN_EXPORT PFNEGLQUERYOUTPUTPORTATTRIBEXTPROC __eglewQueryOutputPortAttribEXT;
+EGLEW_FUN_EXPORT PFNEGLQUERYOUTPUTPORTSTRINGEXTPROC __eglewQueryOutputPortStringEXT;
+
+EGLEW_FUN_EXPORT PFNEGLCREATEPLATFORMPIXMAPSURFACEEXTPROC __eglewCreatePlatformPixmapSurfaceEXT;
+EGLEW_FUN_EXPORT PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC __eglewCreatePlatformWindowSurfaceEXT;
+EGLEW_FUN_EXPORT PFNEGLGETPLATFORMDISPLAYEXTPROC __eglewGetPlatformDisplayEXT;
+
+EGLEW_FUN_EXPORT PFNEGLSTREAMCONSUMEROUTPUTEXTPROC __eglewStreamConsumerOutputEXT;
+
+EGLEW_FUN_EXPORT PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC __eglewSwapBuffersWithDamageEXT;
+
+EGLEW_FUN_EXPORT PFNEGLCREATEPIXMAPSURFACEHIPROC __eglewCreatePixmapSurfaceHI;
+
+EGLEW_FUN_EXPORT PFNEGLCREATESYNC64KHRPROC __eglewCreateSync64KHR;
+
+EGLEW_FUN_EXPORT PFNEGLDEBUGMESSAGECONTROLKHRPROC __eglewDebugMessageControlKHR;
+EGLEW_FUN_EXPORT PFNEGLLABELOBJECTKHRPROC __eglewLabelObjectKHR;
+EGLEW_FUN_EXPORT PFNEGLQUERYDEBUGKHRPROC __eglewQueryDebugKHR;
+
+EGLEW_FUN_EXPORT PFNEGLCREATEIMAGEKHRPROC __eglewCreateImageKHR;
+EGLEW_FUN_EXPORT PFNEGLDESTROYIMAGEKHRPROC __eglewDestroyImageKHR;
+
+EGLEW_FUN_EXPORT PFNEGLLOCKSURFACEKHRPROC __eglewLockSurfaceKHR;
+EGLEW_FUN_EXPORT PFNEGLUNLOCKSURFACEKHRPROC __eglewUnlockSurfaceKHR;
+
+EGLEW_FUN_EXPORT PFNEGLQUERYSURFACE64KHRPROC __eglewQuerySurface64KHR;
+
+EGLEW_FUN_EXPORT PFNEGLSETDAMAGEREGIONKHRPROC __eglewSetDamageRegionKHR;
+
+EGLEW_FUN_EXPORT PFNEGLCLIENTWAITSYNCKHRPROC __eglewClientWaitSyncKHR;
+EGLEW_FUN_EXPORT PFNEGLCREATESYNCKHRPROC __eglewCreateSyncKHR;
+EGLEW_FUN_EXPORT PFNEGLDESTROYSYNCKHRPROC __eglewDestroySyncKHR;
+EGLEW_FUN_EXPORT PFNEGLGETSYNCATTRIBKHRPROC __eglewGetSyncAttribKHR;
+EGLEW_FUN_EXPORT PFNEGLSIGNALSYNCKHRPROC __eglewSignalSyncKHR;
+
+EGLEW_FUN_EXPORT PFNEGLCREATESTREAMKHRPROC __eglewCreateStreamKHR;
+EGLEW_FUN_EXPORT PFNEGLDESTROYSTREAMKHRPROC __eglewDestroyStreamKHR;
+EGLEW_FUN_EXPORT PFNEGLQUERYSTREAMKHRPROC __eglewQueryStreamKHR;
+EGLEW_FUN_EXPORT PFNEGLQUERYSTREAMU64KHRPROC __eglewQueryStreamu64KHR;
+EGLEW_FUN_EXPORT PFNEGLSTREAMATTRIBKHRPROC __eglewStreamAttribKHR;
+
+EGLEW_FUN_EXPORT PFNEGLSTREAMCONSUMERACQUIREKHRPROC __eglewStreamConsumerAcquireKHR;
+EGLEW_FUN_EXPORT PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALKHRPROC __eglewStreamConsumerGLTextureExternalKHR;
+EGLEW_FUN_EXPORT PFNEGLSTREAMCONSUMERRELEASEKHRPROC __eglewStreamConsumerReleaseKHR;
+
+EGLEW_FUN_EXPORT PFNEGLCREATESTREAMFROMFILEDESCRIPTORKHRPROC __eglewCreateStreamFromFileDescriptorKHR;
+EGLEW_FUN_EXPORT PFNEGLGETSTREAMFILEDESCRIPTORKHRPROC __eglewGetStreamFileDescriptorKHR;
+
+EGLEW_FUN_EXPORT PFNEGLQUERYSTREAMTIMEKHRPROC __eglewQueryStreamTimeKHR;
+
+EGLEW_FUN_EXPORT PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC __eglewCreateStreamProducerSurfaceKHR;
+
+EGLEW_FUN_EXPORT PFNEGLSWAPBUFFERSWITHDAMAGEKHRPROC __eglewSwapBuffersWithDamageKHR;
+
+EGLEW_FUN_EXPORT PFNEGLWAITSYNCKHRPROC __eglewWaitSyncKHR;
+
+EGLEW_FUN_EXPORT PFNEGLCREATEDRMIMAGEMESAPROC __eglewCreateDRMImageMESA;
+EGLEW_FUN_EXPORT PFNEGLEXPORTDRMIMAGEMESAPROC __eglewExportDRMImageMESA;
+
+EGLEW_FUN_EXPORT PFNEGLEXPORTDMABUFIMAGEMESAPROC __eglewExportDMABUFImageMESA;
+EGLEW_FUN_EXPORT PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC __eglewExportDMABUFImageQueryMESA;
+
+EGLEW_FUN_EXPORT PFNEGLSWAPBUFFERSREGIONNOKPROC __eglewSwapBuffersRegionNOK;
+
+EGLEW_FUN_EXPORT PFNEGLSWAPBUFFERSREGION2NOKPROC __eglewSwapBuffersRegion2NOK;
+
+EGLEW_FUN_EXPORT PFNEGLQUERYNATIVEDISPLAYNVPROC __eglewQueryNativeDisplayNV;
+EGLEW_FUN_EXPORT PFNEGLQUERYNATIVEPIXMAPNVPROC __eglewQueryNativePixmapNV;
+EGLEW_FUN_EXPORT PFNEGLQUERYNATIVEWINDOWNVPROC __eglewQueryNativeWindowNV;
+
+EGLEW_FUN_EXPORT PFNEGLPOSTSUBBUFFERNVPROC __eglewPostSubBufferNV;
+
+EGLEW_FUN_EXPORT PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALATTRIBSNVPROC __eglewStreamConsumerGLTextureExternalAttribsNV;
+
+EGLEW_FUN_EXPORT PFNEGLQUERYDISPLAYATTRIBNVPROC __eglewQueryDisplayAttribNV;
+EGLEW_FUN_EXPORT PFNEGLQUERYSTREAMMETADATANVPROC __eglewQueryStreamMetadataNV;
+EGLEW_FUN_EXPORT PFNEGLSETSTREAMMETADATANVPROC __eglewSetStreamMetadataNV;
+
+EGLEW_FUN_EXPORT PFNEGLCREATESTREAMSYNCNVPROC __eglewCreateStreamSyncNV;
+
+EGLEW_FUN_EXPORT PFNEGLCLIENTWAITSYNCNVPROC __eglewClientWaitSyncNV;
+EGLEW_FUN_EXPORT PFNEGLCREATEFENCESYNCNVPROC __eglewCreateFenceSyncNV;
+EGLEW_FUN_EXPORT PFNEGLDESTROYSYNCNVPROC __eglewDestroySyncNV;
+EGLEW_FUN_EXPORT PFNEGLFENCENVPROC __eglewFenceNV;
+EGLEW_FUN_EXPORT PFNEGLGETSYNCATTRIBNVPROC __eglewGetSyncAttribNV;
+EGLEW_FUN_EXPORT PFNEGLSIGNALSYNCNVPROC __eglewSignalSyncNV;
+
+EGLEW_FUN_EXPORT PFNEGLGETSYSTEMTIMEFREQUENCYNVPROC __eglewGetSystemTimeFrequencyNV;
+EGLEW_FUN_EXPORT PFNEGLGETSYSTEMTIMENVPROC __eglewGetSystemTimeNV;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_VERSION_1_0;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_VERSION_1_1;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_VERSION_1_2;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_VERSION_1_3;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_VERSION_1_4;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_VERSION_1_5;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_ANDROID_blob_cache;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_ANDROID_create_native_client_buffer;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_ANDROID_framebuffer_target;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_ANDROID_front_buffer_auto_refresh;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_ANDROID_image_native_buffer;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_ANDROID_native_fence_sync;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_ANDROID_presentation_time;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_ANDROID_recordable;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_ANGLE_d3d_share_handle_client_buffer;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_ANGLE_device_d3d;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_ANGLE_query_surface_pointer;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_ANGLE_surface_d3d_texture_2d_share_handle;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_ANGLE_window_fixed_size;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_ARM_pixmap_multisample_discard;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_buffer_age;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_client_extensions;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_create_context_robustness;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_device_base;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_device_drm;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_device_enumeration;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_device_openwf;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_device_query;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_image_dma_buf_import;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_multiview_window;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_output_base;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_output_drm;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_output_openwf;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_platform_base;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_platform_device;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_platform_wayland;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_platform_x11;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_protected_content;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_protected_surface;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_stream_consumer_egloutput;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_swap_buffers_with_damage;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_yuv_surface;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_HI_clientpixmap;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_HI_colorformats;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_IMG_context_priority;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_IMG_image_plane_attribs;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_cl_event;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_cl_event2;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_client_get_all_proc_addresses;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_config_attribs;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_create_context;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_create_context_no_error;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_debug;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_fence_sync;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_get_all_proc_addresses;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_gl_colorspace;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_gl_renderbuffer_image;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_gl_texture_2D_image;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_gl_texture_3D_image;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_gl_texture_cubemap_image;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_image;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_image_base;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_image_pixmap;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_lock_surface;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_lock_surface2;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_lock_surface3;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_mutable_render_buffer;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_partial_update;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_platform_android;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_platform_gbm;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_platform_wayland;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_platform_x11;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_reusable_sync;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_stream;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_stream_consumer_gltexture;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_stream_cross_process_fd;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_stream_fifo;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_stream_producer_aldatalocator;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_stream_producer_eglsurface;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_surfaceless_context;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_swap_buffers_with_damage;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_vg_parent_image;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_wait_sync;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_MESA_drm_image;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_MESA_image_dma_buf_export;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_MESA_platform_gbm;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_NOK_swap_region;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_NOK_swap_region2;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_NOK_texture_from_pixmap;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_3dvision_surface;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_coverage_sample;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_coverage_sample_resolve;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_cuda_event;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_depth_nonlinear;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_device_cuda;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_native_query;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_post_convert_rounding;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_post_sub_buffer;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_robustness_video_memory_purge;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_stream_consumer_gltexture_yuv;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_stream_metadata;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_stream_sync;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_sync;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_system_time;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_TIZEN_image_native_buffer;
+EGLEW_VAR_EXPORT GLboolean __EGLEW_TIZEN_image_native_surface;
+/* ------------------------------------------------------------------------ */
+
+GLEWAPI GLenum GLEWAPIENTRY eglewInit (EGLDisplay display);
+GLEWAPI GLboolean GLEWAPIENTRY eglewIsSupported (const char *name);
+
+#define EGLEW_GET_VAR(x) (*(const GLboolean*)&x)
+#define EGLEW_GET_FUN(x) x
+
+GLEWAPI GLboolean GLEWAPIENTRY eglewGetExtension (const char *name);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __eglew_h__ */
diff --git a/extern/glew/include/GL/glew.h b/extern/glew/include/GL/glew.h
index 702265c38b4..fae0c216a96 100644
--- a/extern/glew/include/GL/glew.h
+++ b/extern/glew/include/GL/glew.h
@@ -263,6 +263,9 @@ typedef _W64 int ptrdiff_t;
#define GLEWAPIENTRY
#endif
+#define GLEW_VAR_EXPORT GLEWAPI
+#define GLEW_FUN_EXPORT GLEWAPI
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -2819,6 +2822,15 @@ typedef void (GLAPIENTRY * PFNGLSETMULTISAMPLEFVAMDPROC) (GLenum pname, GLuint i
#endif /* GL_AMD_shader_atomic_counter_ops */
+/* ---------------- GL_AMD_shader_explicit_vertex_parameter ---------------- */
+
+#ifndef GL_AMD_shader_explicit_vertex_parameter
+#define GL_AMD_shader_explicit_vertex_parameter 1
+
+#define GLEW_AMD_shader_explicit_vertex_parameter GLEW_GET_VAR(__GLEW_AMD_shader_explicit_vertex_parameter)
+
+#endif /* GL_AMD_shader_explicit_vertex_parameter */
+
/* ---------------------- GL_AMD_shader_stencil_export --------------------- */
#ifndef GL_AMD_shader_stencil_export
@@ -4023,8 +4035,8 @@ typedef void (GLAPIENTRY * PFNGLBLITNAMEDFRAMEBUFFERPROC) (GLuint readFramebuffe
typedef GLenum (GLAPIENTRY * PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC) (GLuint framebuffer, GLenum target);
typedef void (GLAPIENTRY * PFNGLCLEARNAMEDBUFFERDATAPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data);
typedef void (GLAPIENTRY * PFNGLCLEARNAMEDBUFFERSUBDATAPROC) (GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data);
-typedef void (GLAPIENTRY * PFNGLCLEARNAMEDFRAMEBUFFERFIPROC) (GLuint framebuffer, GLenum buffer, GLfloat depth, GLint stencil);
-typedef void (GLAPIENTRY * PFNGLCLEARNAMEDFRAMEBUFFERFVPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLCLEARNAMEDFRAMEBUFFERFIPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
+typedef void (GLAPIENTRY * PFNGLCLEARNAMEDFRAMEBUFFERFVPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, GLfloat* value);
typedef void (GLAPIENTRY * PFNGLCLEARNAMEDFRAMEBUFFERIVPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint* value);
typedef void (GLAPIENTRY * PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint* value);
typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC) (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data);
@@ -4663,6 +4675,22 @@ typedef void (GLAPIENTRY * PFNGLGETTEXTURESUBIMAGEPROC) (GLuint texture, GLint l
#endif /* GL_ARB_get_texture_sub_image */
+/* ---------------------------- GL_ARB_gl_spirv ---------------------------- */
+
+#ifndef GL_ARB_gl_spirv
+#define GL_ARB_gl_spirv 1
+
+#define GL_SHADER_BINARY_FORMAT_SPIR_V_ARB 0x9551
+#define GL_SPIR_V_BINARY_ARB 0x9552
+
+typedef void (GLAPIENTRY * PFNGLSPECIALIZESHADERARBPROC) (GLuint shader, const GLchar* pEntryPoint, GLuint numSpecializationConstants, const GLuint* pConstantIndex, const GLuint* pConstantValue);
+
+#define glSpecializeShaderARB GLEW_GET_FUN(__glewSpecializeShaderARB)
+
+#define GLEW_ARB_gl_spirv GLEW_GET_VAR(__GLEW_ARB_gl_spirv)
+
+#endif /* GL_ARB_gl_spirv */
+
/* --------------------------- GL_ARB_gpu_shader5 -------------------------- */
#ifndef GL_ARB_gpu_shader5
@@ -6600,7 +6628,7 @@ typedef void (GLAPIENTRY * PFNGLTEXTUREPAGECOMMITMENTEXTPROC) (GLuint texture, G
#define GL_TIMEOUT_EXPIRED 0x911B
#define GL_CONDITION_SATISFIED 0x911C
#define GL_WAIT_FAILED 0x911D
-#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFF
+#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull
typedef GLenum (GLAPIENTRY * PFNGLCLIENTWAITSYNCPROC) (GLsync GLsync,GLbitfield flags,GLuint64 timeout);
typedef void (GLAPIENTRY * PFNGLDELETESYNCPROC) (GLsync GLsync);
@@ -7363,7 +7391,7 @@ typedef void (GLAPIENTRY * PFNGLMULTTRANSPOSEMATRIXFARBPROC) (GLfloat m[16]);
#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44
#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45
#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46
-#define GL_INVALID_INDEX 0xFFFFFFFF
+#define GL_INVALID_INDEX 0xFFFFFFFFu
typedef void (GLAPIENTRY * PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer);
typedef void (GLAPIENTRY * PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
@@ -8620,6 +8648,18 @@ typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GL
#endif /* GL_ATI_vertex_streams */
+/* ---------------- GL_EGL_NV_robustness_video_memory_purge ---------------- */
+
+#ifndef GL_EGL_NV_robustness_video_memory_purge
+#define GL_EGL_NV_robustness_video_memory_purge 1
+
+#define GL_EGL_GENERATE_RESET_ON_VIDEO_MEMORY_PURGE_NV 0x334C
+#define GL_PURGED_CONTEXT_RESET_NV 0x92BB
+
+#define GLEW_EGL_NV_robustness_video_memory_purge GLEW_GET_VAR(__GLEW_EGL_NV_robustness_video_memory_purge)
+
+#endif /* GL_EGL_NV_robustness_video_memory_purge */
+
/* --------------------------- GL_EXT_422_pixels --------------------------- */
#ifndef GL_EXT_422_pixels
@@ -11597,6 +11637,26 @@ typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTFVEXTPROC) (GLfloat* weight);
#endif /* GL_EXT_vertex_weighting */
+/* ------------------------ GL_EXT_window_rectangles ----------------------- */
+
+#ifndef GL_EXT_window_rectangles
+#define GL_EXT_window_rectangles 1
+
+#define GL_INCLUSIVE_EXT 0x8F10
+#define GL_EXCLUSIVE_EXT 0x8F11
+#define GL_WINDOW_RECTANGLE_EXT 0x8F12
+#define GL_WINDOW_RECTANGLE_MODE_EXT 0x8F13
+#define GL_MAX_WINDOW_RECTANGLES_EXT 0x8F14
+#define GL_NUM_WINDOW_RECTANGLES_EXT 0x8F15
+
+typedef void (GLAPIENTRY * PFNGLWINDOWRECTANGLESEXTPROC) (GLenum mode, GLsizei count, const GLint box[]);
+
+#define glWindowRectanglesEXT GLEW_GET_FUN(__glewWindowRectanglesEXT)
+
+#define GLEW_EXT_window_rectangles GLEW_GET_VAR(__GLEW_EXT_window_rectangles)
+
+#endif /* GL_EXT_window_rectangles */
+
/* ------------------------- GL_EXT_x11_sync_object ------------------------ */
#ifndef GL_EXT_x11_sync_object
@@ -11821,6 +11881,17 @@ typedef void (GLAPIENTRY * PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum ty
#endif /* GL_INGR_interlace_read */
+/* ------------------ GL_INTEL_conservative_rasterization ------------------ */
+
+#ifndef GL_INTEL_conservative_rasterization
+#define GL_INTEL_conservative_rasterization 1
+
+#define GL_CONSERVATIVE_RASTERIZATION_INTEL 0x83FE
+
+#define GLEW_INTEL_conservative_rasterization GLEW_GET_VAR(__GLEW_INTEL_conservative_rasterization)
+
+#endif /* GL_INTEL_conservative_rasterization */
+
/* ------------------- GL_INTEL_fragment_shader_ordering ------------------- */
#ifndef GL_INTEL_fragment_shader_ordering
@@ -12202,6 +12273,15 @@ typedef void (GLAPIENTRY * PFNGLREADNPIXELSPROC) (GLint x, GLint y, GLsizei widt
#endif /* GL_KHR_texture_compression_astc_ldr */
+/* --------------- GL_KHR_texture_compression_astc_sliced_3d --------------- */
+
+#ifndef GL_KHR_texture_compression_astc_sliced_3d
+#define GL_KHR_texture_compression_astc_sliced_3d 1
+
+#define GLEW_KHR_texture_compression_astc_sliced_3d GLEW_GET_VAR(__GLEW_KHR_texture_compression_astc_sliced_3d)
+
+#endif /* GL_KHR_texture_compression_astc_sliced_3d */
+
/* -------------------------- GL_KTX_buffer_region ------------------------- */
#ifndef GL_KTX_buffer_region
@@ -12268,6 +12348,15 @@ typedef void (GLAPIENTRY * PFNGLRESIZEBUFFERSMESAPROC) (void);
#endif /* GL_MESA_resize_buffers */
+/* -------------------- GL_MESA_shader_integer_functions ------------------- */
+
+#ifndef GL_MESA_shader_integer_functions
+#define GL_MESA_shader_integer_functions 1
+
+#define GLEW_MESA_shader_integer_functions GLEW_GET_VAR(__GLEW_MESA_shader_integer_functions)
+
+#endif /* GL_MESA_shader_integer_functions */
+
/* --------------------------- GL_MESA_window_pos -------------------------- */
#ifndef GL_MESA_window_pos
@@ -12340,6 +12429,15 @@ typedef void (GLAPIENTRY * PFNGLWINDOWPOS4SVMESAPROC) (const GLshort* p);
#endif /* GL_MESA_ycbcr_texture */
+/* ----------- GL_NVX_blend_equation_advanced_multi_draw_buffers ----------- */
+
+#ifndef GL_NVX_blend_equation_advanced_multi_draw_buffers
+#define GL_NVX_blend_equation_advanced_multi_draw_buffers 1
+
+#define GLEW_NVX_blend_equation_advanced_multi_draw_buffers GLEW_GET_VAR(__GLEW_NVX_blend_equation_advanced_multi_draw_buffers)
+
+#endif /* GL_NVX_blend_equation_advanced_multi_draw_buffers */
+
/* ----------------------- GL_NVX_conditional_render ----------------------- */
#ifndef GL_NVX_conditional_render
@@ -12370,6 +12468,26 @@ typedef void (GLAPIENTRY * PFNGLENDCONDITIONALRENDERNVXPROC) (void);
#endif /* GL_NVX_gpu_memory_info */
+/* ---------------------- GL_NVX_linked_gpu_multicast ---------------------- */
+
+#ifndef GL_NVX_linked_gpu_multicast
+#define GL_NVX_linked_gpu_multicast 1
+
+#define GL_LGPU_SEPARATE_STORAGE_BIT_NVX 0x0800
+#define GL_MAX_LGPU_GPUS_NVX 0x92BA
+
+typedef void (GLAPIENTRY * PFNGLLGPUCOPYIMAGESUBDATANVXPROC) (GLuint sourceGpu, GLbitfield destinationGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srxY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
+typedef void (GLAPIENTRY * PFNGLLGPUINTERLOCKNVXPROC) (void);
+typedef void (GLAPIENTRY * PFNGLLGPUNAMEDBUFFERSUBDATANVXPROC) (GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data);
+
+#define glLGPUCopyImageSubDataNVX GLEW_GET_FUN(__glewLGPUCopyImageSubDataNVX)
+#define glLGPUInterlockNVX GLEW_GET_FUN(__glewLGPUInterlockNVX)
+#define glLGPUNamedBufferSubDataNVX GLEW_GET_FUN(__glewLGPUNamedBufferSubDataNVX)
+
+#define GLEW_NVX_linked_gpu_multicast GLEW_GET_VAR(__GLEW_NVX_linked_gpu_multicast)
+
+#endif /* GL_NVX_linked_gpu_multicast */
+
/* ------------------- GL_NV_bindless_multi_draw_indirect ------------------ */
#ifndef GL_NV_bindless_multi_draw_indirect
@@ -12521,6 +12639,88 @@ typedef void (GLAPIENTRY * PFNGLBLENDPARAMETERINVPROC) (GLenum pname, GLint valu
#endif /* GL_NV_blend_square */
+/* ----------------------- GL_NV_clip_space_w_scaling ---------------------- */
+
+#ifndef GL_NV_clip_space_w_scaling
+#define GL_NV_clip_space_w_scaling 1
+
+#define GL_VIEWPORT_POSITION_W_SCALE_NV 0x937C
+#define GL_VIEWPORT_POSITION_W_SCALE_X_COEFF_NV 0x937D
+#define GL_VIEWPORT_POSITION_W_SCALE_Y_COEFF_NV 0x937E
+
+typedef void (GLAPIENTRY * PFNGLVIEWPORTPOSITIONWSCALENVPROC) (GLuint index, GLfloat xcoeff, GLfloat ycoeff);
+
+#define glViewportPositionWScaleNV GLEW_GET_FUN(__glewViewportPositionWScaleNV)
+
+#define GLEW_NV_clip_space_w_scaling GLEW_GET_VAR(__GLEW_NV_clip_space_w_scaling)
+
+#endif /* GL_NV_clip_space_w_scaling */
+
+/* --------------------------- GL_NV_command_list -------------------------- */
+
+#ifndef GL_NV_command_list
+#define GL_NV_command_list 1
+
+#define GL_TERMINATE_SEQUENCE_COMMAND_NV 0x0000
+#define GL_NOP_COMMAND_NV 0x0001
+#define GL_DRAW_ELEMENTS_COMMAND_NV 0x0002
+#define GL_DRAW_ARRAYS_COMMAND_NV 0x0003
+#define GL_DRAW_ELEMENTS_STRIP_COMMAND_NV 0x0004
+#define GL_DRAW_ARRAYS_STRIP_COMMAND_NV 0x0005
+#define GL_DRAW_ELEMENTS_INSTANCED_COMMAND_NV 0x0006
+#define GL_DRAW_ARRAYS_INSTANCED_COMMAND_NV 0x0007
+#define GL_ELEMENT_ADDRESS_COMMAND_NV 0x0008
+#define GL_ATTRIBUTE_ADDRESS_COMMAND_NV 0x0009
+#define GL_UNIFORM_ADDRESS_COMMAND_NV 0x000a
+#define GL_BLEND_COLOR_COMMAND_NV 0x000b
+#define GL_STENCIL_REF_COMMAND_NV 0x000c
+#define GL_LINE_WIDTH_COMMAND_NV 0x000d
+#define GL_POLYGON_OFFSET_COMMAND_NV 0x000e
+#define GL_ALPHA_REF_COMMAND_NV 0x000f
+#define GL_VIEWPORT_COMMAND_NV 0x0010
+#define GL_SCISSOR_COMMAND_NV 0x0011
+#define GL_FRONT_FACE_COMMAND_NV 0x0012
+
+typedef void (GLAPIENTRY * PFNGLCALLCOMMANDLISTNVPROC) (GLuint list);
+typedef void (GLAPIENTRY * PFNGLCOMMANDLISTSEGMENTSNVPROC) (GLuint list, GLuint segments);
+typedef void (GLAPIENTRY * PFNGLCOMPILECOMMANDLISTNVPROC) (GLuint list);
+typedef void (GLAPIENTRY * PFNGLCREATECOMMANDLISTSNVPROC) (GLsizei n, GLuint* lists);
+typedef void (GLAPIENTRY * PFNGLCREATESTATESNVPROC) (GLsizei n, GLuint* states);
+typedef void (GLAPIENTRY * PFNGLDELETECOMMANDLISTSNVPROC) (GLsizei n, const GLuint* lists);
+typedef void (GLAPIENTRY * PFNGLDELETESTATESNVPROC) (GLsizei n, const GLuint* states);
+typedef void (GLAPIENTRY * PFNGLDRAWCOMMANDSADDRESSNVPROC) (GLenum primitiveMode, const GLuint64* indirects, const GLsizei* sizes, GLuint count);
+typedef void (GLAPIENTRY * PFNGLDRAWCOMMANDSNVPROC) (GLenum primitiveMode, GLuint buffer, const GLintptr* indirects, const GLsizei* sizes, GLuint count);
+typedef void (GLAPIENTRY * PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC) (const GLuint64* indirects, const GLsizei* sizes, const GLuint* states, const GLuint* fbos, GLuint count);
+typedef void (GLAPIENTRY * PFNGLDRAWCOMMANDSSTATESNVPROC) (GLuint buffer, const GLintptr* indirects, const GLsizei* sizes, const GLuint* states, const GLuint* fbos, GLuint count);
+typedef GLuint (GLAPIENTRY * PFNGLGETCOMMANDHEADERNVPROC) (GLenum tokenID, GLuint size);
+typedef GLushort (GLAPIENTRY * PFNGLGETSTAGEINDEXNVPROC) (GLenum shadertype);
+typedef GLboolean (GLAPIENTRY * PFNGLISCOMMANDLISTNVPROC) (GLuint list);
+typedef GLboolean (GLAPIENTRY * PFNGLISSTATENVPROC) (GLuint state);
+typedef void (GLAPIENTRY * PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC) (GLuint list, GLuint segment, const void** indirects, const GLsizei* sizes, const GLuint* states, const GLuint* fbos, GLuint count);
+typedef void (GLAPIENTRY * PFNGLSTATECAPTURENVPROC) (GLuint state, GLenum mode);
+
+#define glCallCommandListNV GLEW_GET_FUN(__glewCallCommandListNV)
+#define glCommandListSegmentsNV GLEW_GET_FUN(__glewCommandListSegmentsNV)
+#define glCompileCommandListNV GLEW_GET_FUN(__glewCompileCommandListNV)
+#define glCreateCommandListsNV GLEW_GET_FUN(__glewCreateCommandListsNV)
+#define glCreateStatesNV GLEW_GET_FUN(__glewCreateStatesNV)
+#define glDeleteCommandListsNV GLEW_GET_FUN(__glewDeleteCommandListsNV)
+#define glDeleteStatesNV GLEW_GET_FUN(__glewDeleteStatesNV)
+#define glDrawCommandsAddressNV GLEW_GET_FUN(__glewDrawCommandsAddressNV)
+#define glDrawCommandsNV GLEW_GET_FUN(__glewDrawCommandsNV)
+#define glDrawCommandsStatesAddressNV GLEW_GET_FUN(__glewDrawCommandsStatesAddressNV)
+#define glDrawCommandsStatesNV GLEW_GET_FUN(__glewDrawCommandsStatesNV)
+#define glGetCommandHeaderNV GLEW_GET_FUN(__glewGetCommandHeaderNV)
+#define glGetStageIndexNV GLEW_GET_FUN(__glewGetStageIndexNV)
+#define glIsCommandListNV GLEW_GET_FUN(__glewIsCommandListNV)
+#define glIsStateNV GLEW_GET_FUN(__glewIsStateNV)
+#define glListDrawCommandsStatesClientNV GLEW_GET_FUN(__glewListDrawCommandsStatesClientNV)
+#define glStateCaptureNV GLEW_GET_FUN(__glewStateCaptureNV)
+
+#define GLEW_NV_command_list GLEW_GET_VAR(__GLEW_NV_command_list)
+
+#endif /* GL_NV_command_list */
+
/* ------------------------- GL_NV_compute_program5 ------------------------ */
#ifndef GL_NV_compute_program5
@@ -12588,6 +12788,23 @@ typedef void (GLAPIENTRY * PFNGLCONSERVATIVERASTERPARAMETERFNVPROC) (GLenum pnam
#endif /* GL_NV_conservative_raster_dilate */
+/* -------------- GL_NV_conservative_raster_pre_snap_triangles ------------- */
+
+#ifndef GL_NV_conservative_raster_pre_snap_triangles
+#define GL_NV_conservative_raster_pre_snap_triangles 1
+
+#define GL_CONSERVATIVE_RASTER_MODE_NV 0x954D
+#define GL_CONSERVATIVE_RASTER_MODE_POST_SNAP_NV 0x954E
+#define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_TRIANGLES_NV 0x954F
+
+typedef void (GLAPIENTRY * PFNGLCONSERVATIVERASTERPARAMETERINVPROC) (GLenum pname, GLint param);
+
+#define glConservativeRasterParameteriNV GLEW_GET_FUN(__glewConservativeRasterParameteriNV)
+
+#define GLEW_NV_conservative_raster_pre_snap_triangles GLEW_GET_VAR(__GLEW_NV_conservative_raster_pre_snap_triangles)
+
+#endif /* GL_NV_conservative_raster_pre_snap_triangles */
+
/* ----------------------- GL_NV_copy_depth_to_color ----------------------- */
#ifndef GL_NV_copy_depth_to_color
@@ -12686,6 +12903,29 @@ typedef void (GLAPIENTRY * PFNGLDRAWTEXTURENVPROC) (GLuint texture, GLuint sampl
#endif /* GL_NV_draw_texture */
+/* ------------------------ GL_NV_draw_vulkan_image ------------------------ */
+
+#ifndef GL_NV_draw_vulkan_image
+#define GL_NV_draw_vulkan_image 1
+
+typedef void (APIENTRY *GLVULKANPROCNV)(void);
+
+typedef void (GLAPIENTRY * PFNGLDRAWVKIMAGENVPROC) (GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1);
+typedef GLVULKANPROCNV (GLAPIENTRY * PFNGLGETVKPROCADDRNVPROC) (const GLchar* name);
+typedef void (GLAPIENTRY * PFNGLSIGNALVKFENCENVPROC) (GLuint64 vkFence);
+typedef void (GLAPIENTRY * PFNGLSIGNALVKSEMAPHORENVPROC) (GLuint64 vkSemaphore);
+typedef void (GLAPIENTRY * PFNGLWAITVKSEMAPHORENVPROC) (GLuint64 vkSemaphore);
+
+#define glDrawVkImageNV GLEW_GET_FUN(__glewDrawVkImageNV)
+#define glGetVkProcAddrNV GLEW_GET_FUN(__glewGetVkProcAddrNV)
+#define glSignalVkFenceNV GLEW_GET_FUN(__glewSignalVkFenceNV)
+#define glSignalVkSemaphoreNV GLEW_GET_FUN(__glewSignalVkSemaphoreNV)
+#define glWaitVkSemaphoreNV GLEW_GET_FUN(__glewWaitVkSemaphoreNV)
+
+#define GLEW_NV_draw_vulkan_image GLEW_GET_VAR(__GLEW_NV_draw_vulkan_image)
+
+#endif /* GL_NV_draw_vulkan_image */
+
/* ---------------------------- GL_NV_evaluators --------------------------- */
#ifndef GL_NV_evaluators
@@ -13011,6 +13251,47 @@ typedef void (GLAPIENTRY * PFNGLPROGRAMVERTEXLIMITNVPROC) (GLenum target, GLint
#endif /* GL_NV_geometry_shader_passthrough */
+/* -------------------------- GL_NV_gpu_multicast -------------------------- */
+
+#ifndef GL_NV_gpu_multicast
+#define GL_NV_gpu_multicast 1
+
+#define GL_PER_GPU_STORAGE_BIT_NV 0x0800
+#define GL_MULTICAST_GPUS_NV 0x92BA
+#define GL_PER_GPU_STORAGE_NV 0x9548
+#define GL_MULTICAST_PROGRAMMABLE_SAMPLE_LOCATION_NV 0x9549
+#define GL_RENDER_GPU_MASK_NV 0x9558
+
+typedef void (GLAPIENTRY * PFNGLMULTICASTBARRIERNVPROC) (void);
+typedef void (GLAPIENTRY * PFNGLMULTICASTBLITFRAMEBUFFERNVPROC) (GLuint srcGpu, GLuint dstGpu, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+typedef void (GLAPIENTRY * PFNGLMULTICASTBUFFERSUBDATANVPROC) (GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data);
+typedef void (GLAPIENTRY * PFNGLMULTICASTCOPYBUFFERSUBDATANVPROC) (GLuint readGpu, GLbitfield writeGpuMask, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+typedef void (GLAPIENTRY * PFNGLMULTICASTCOPYIMAGESUBDATANVPROC) (GLuint srcGpu, GLbitfield dstGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srxY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth);
+typedef void (GLAPIENTRY * PFNGLMULTICASTFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLuint gpu, GLuint framebuffer, GLuint start, GLsizei count, const GLfloat* v);
+typedef void (GLAPIENTRY * PFNGLMULTICASTGETQUERYOBJECTI64VNVPROC) (GLuint gpu, GLuint id, GLenum pname, GLint64* params);
+typedef void (GLAPIENTRY * PFNGLMULTICASTGETQUERYOBJECTIVNVPROC) (GLuint gpu, GLuint id, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLMULTICASTGETQUERYOBJECTUI64VNVPROC) (GLuint gpu, GLuint id, GLenum pname, GLuint64* params);
+typedef void (GLAPIENTRY * PFNGLMULTICASTGETQUERYOBJECTUIVNVPROC) (GLuint gpu, GLuint id, GLenum pname, GLuint* params);
+typedef void (GLAPIENTRY * PFNGLMULTICASTWAITSYNCNVPROC) (GLuint signalGpu, GLbitfield waitGpuMask);
+typedef void (GLAPIENTRY * PFNGLRENDERGPUMASKNVPROC) (GLbitfield mask);
+
+#define glMulticastBarrierNV GLEW_GET_FUN(__glewMulticastBarrierNV)
+#define glMulticastBlitFramebufferNV GLEW_GET_FUN(__glewMulticastBlitFramebufferNV)
+#define glMulticastBufferSubDataNV GLEW_GET_FUN(__glewMulticastBufferSubDataNV)
+#define glMulticastCopyBufferSubDataNV GLEW_GET_FUN(__glewMulticastCopyBufferSubDataNV)
+#define glMulticastCopyImageSubDataNV GLEW_GET_FUN(__glewMulticastCopyImageSubDataNV)
+#define glMulticastFramebufferSampleLocationsfvNV GLEW_GET_FUN(__glewMulticastFramebufferSampleLocationsfvNV)
+#define glMulticastGetQueryObjecti64vNV GLEW_GET_FUN(__glewMulticastGetQueryObjecti64vNV)
+#define glMulticastGetQueryObjectivNV GLEW_GET_FUN(__glewMulticastGetQueryObjectivNV)
+#define glMulticastGetQueryObjectui64vNV GLEW_GET_FUN(__glewMulticastGetQueryObjectui64vNV)
+#define glMulticastGetQueryObjectuivNV GLEW_GET_FUN(__glewMulticastGetQueryObjectuivNV)
+#define glMulticastWaitSyncNV GLEW_GET_FUN(__glewMulticastWaitSyncNV)
+#define glRenderGpuMaskNV GLEW_GET_FUN(__glewRenderGpuMaskNV)
+
+#define GLEW_NV_gpu_multicast GLEW_GET_VAR(__GLEW_NV_gpu_multicast)
+
+#endif /* GL_NV_gpu_multicast */
+
/* --------------------------- GL_NV_gpu_program4 -------------------------- */
#ifndef GL_NV_gpu_program4
@@ -13925,6 +14206,18 @@ typedef void (GLAPIENTRY * PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage
#endif /* GL_NV_register_combiners2 */
+/* ------------------ GL_NV_robustness_video_memory_purge ------------------ */
+
+#ifndef GL_NV_robustness_video_memory_purge
+#define GL_NV_robustness_video_memory_purge 1
+
+#define GL_EGL_GENERATE_RESET_ON_VIDEO_MEMORY_PURGE_NV 0x334C
+#define GL_PURGED_CONTEXT_RESET_NV 0x92BB
+
+#define GLEW_NV_robustness_video_memory_purge GLEW_GET_VAR(__GLEW_NV_robustness_video_memory_purge)
+
+#endif /* GL_NV_robustness_video_memory_purge */
+
/* ------------------------- GL_NV_sample_locations ------------------------ */
#ifndef GL_NV_sample_locations
@@ -13976,6 +14269,15 @@ typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLuint
#endif /* GL_NV_shader_atomic_float */
+/* ---------------------- GL_NV_shader_atomic_float64 ---------------------- */
+
+#ifndef GL_NV_shader_atomic_float64
+#define GL_NV_shader_atomic_float64 1
+
+#define GLEW_NV_shader_atomic_float64 GLEW_GET_VAR(__GLEW_NV_shader_atomic_float64)
+
+#endif /* GL_NV_shader_atomic_float64 */
+
/* -------------------- GL_NV_shader_atomic_fp16_vector -------------------- */
#ifndef GL_NV_shader_atomic_fp16_vector
@@ -14066,6 +14368,15 @@ typedef void (GLAPIENTRY * PFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei cou
#endif /* GL_NV_shader_thread_shuffle */
+/* ---------------------- GL_NV_stereo_view_rendering ---------------------- */
+
+#ifndef GL_NV_stereo_view_rendering
+#define GL_NV_stereo_view_rendering 1
+
+#define GLEW_NV_stereo_view_rendering GLEW_GET_VAR(__GLEW_NV_stereo_view_rendering)
+
+#endif /* GL_NV_stereo_view_rendering */
+
/* ---------------------- GL_NV_tessellation_program5 ---------------------- */
#ifndef GL_NV_tessellation_program5
@@ -14976,6 +15287,32 @@ typedef void (GLAPIENTRY * PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC) (GLuint vid
#endif /* GL_NV_viewport_array2 */
+/* ------------------------- GL_NV_viewport_swizzle ------------------------ */
+
+#ifndef GL_NV_viewport_swizzle
+#define GL_NV_viewport_swizzle 1
+
+#define GL_VIEWPORT_SWIZZLE_POSITIVE_X_NV 0x9350
+#define GL_VIEWPORT_SWIZZLE_NEGATIVE_X_NV 0x9351
+#define GL_VIEWPORT_SWIZZLE_POSITIVE_Y_NV 0x9352
+#define GL_VIEWPORT_SWIZZLE_NEGATIVE_Y_NV 0x9353
+#define GL_VIEWPORT_SWIZZLE_POSITIVE_Z_NV 0x9354
+#define GL_VIEWPORT_SWIZZLE_NEGATIVE_Z_NV 0x9355
+#define GL_VIEWPORT_SWIZZLE_POSITIVE_W_NV 0x9356
+#define GL_VIEWPORT_SWIZZLE_NEGATIVE_W_NV 0x9357
+#define GL_VIEWPORT_SWIZZLE_X_NV 0x9358
+#define GL_VIEWPORT_SWIZZLE_Y_NV 0x9359
+#define GL_VIEWPORT_SWIZZLE_Z_NV 0x935A
+#define GL_VIEWPORT_SWIZZLE_W_NV 0x935B
+
+typedef void (GLAPIENTRY * PFNGLVIEWPORTSWIZZLENVPROC) (GLuint index, GLenum swizzlex, GLenum swizzley, GLenum swizzlez, GLenum swizzlew);
+
+#define glViewportSwizzleNV GLEW_GET_FUN(__glewViewportSwizzleNV)
+
+#define GLEW_NV_viewport_swizzle GLEW_GET_VAR(__GLEW_NV_viewport_swizzle)
+
+#endif /* GL_NV_viewport_swizzle */
+
/* ------------------------ GL_OES_byte_coordinates ------------------------ */
#ifndef GL_OES_byte_coordinates
@@ -15733,10 +16070,6 @@ typedef void (GLAPIENTRY * PFNGLFLUSHRASTERSGIXPROC) (void);
#ifndef GL_SGIX_fog_texture
#define GL_SGIX_fog_texture 1
-#define GL_FOG_PATCHY_FACTOR_SGIX 0
-#define GL_FRAGMENT_FOG_SGIX 0
-#define GL_TEXTURE_FOG_SGIX 0
-
typedef void (GLAPIENTRY * PFNGLTEXTUREFOGSGIXPROC) (GLenum pname);
#define glTextureFogSGIX GLEW_GET_FUN(__glewTextureFogSGIX)
@@ -16406,22 +16739,7 @@ typedef void (GLAPIENTRY * PFNGLADDSWAPHINTRECTWINPROC) (GLint x, GLint y, GLsiz
/* ------------------------------------------------------------------------- */
-#if defined(GLEW_MX) && defined(_WIN32)
-#define GLEW_FUN_EXPORT
-#else
-#define GLEW_FUN_EXPORT GLEWAPI
-#endif /* GLEW_MX */
-
-#if defined(GLEW_MX)
-#define GLEW_VAR_EXPORT
-#else
-#define GLEW_VAR_EXPORT GLEWAPI
-#endif /* GLEW_MX */
-#if defined(GLEW_MX) && defined(_WIN32)
-struct GLEWContextStruct
-{
-#endif /* GLEW_MX */
GLEW_FUN_EXPORT PFNGLCOPYTEXSUBIMAGE3DPROC __glewCopyTexSubImage3D;
GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTSPROC __glewDrawRangeElements;
@@ -17047,6 +17365,8 @@ GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETERIPROC __glewProgramParameteri;
GLEW_FUN_EXPORT PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC __glewGetCompressedTextureSubImage;
GLEW_FUN_EXPORT PFNGLGETTEXTURESUBIMAGEPROC __glewGetTextureSubImage;
+GLEW_FUN_EXPORT PFNGLSPECIALIZESHADERARBPROC __glewSpecializeShaderARB;
+
GLEW_FUN_EXPORT PFNGLGETUNIFORMDVPROC __glewGetUniformdv;
GLEW_FUN_EXPORT PFNGLUNIFORM1DPROC __glewUniform1d;
GLEW_FUN_EXPORT PFNGLUNIFORM1DVPROC __glewUniform1dv;
@@ -18323,6 +18643,8 @@ GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTPOINTEREXTPROC __glewVertexWeightPointerEXT;
GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTFEXTPROC __glewVertexWeightfEXT;
GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTFVEXTPROC __glewVertexWeightfvEXT;
+GLEW_FUN_EXPORT PFNGLWINDOWRECTANGLESEXTPROC __glewWindowRectanglesEXT;
+
GLEW_FUN_EXPORT PFNGLIMPORTSYNCEXTPROC __glewImportSyncEXT;
GLEW_FUN_EXPORT PFNGLFRAMETERMINATORGREMEDYPROC __glewFrameTerminatorGREMEDY;
@@ -18425,6 +18747,10 @@ GLEW_FUN_EXPORT PFNGLWINDOWPOS4SVMESAPROC __glewWindowPos4svMESA;
GLEW_FUN_EXPORT PFNGLBEGINCONDITIONALRENDERNVXPROC __glewBeginConditionalRenderNVX;
GLEW_FUN_EXPORT PFNGLENDCONDITIONALRENDERNVXPROC __glewEndConditionalRenderNVX;
+GLEW_FUN_EXPORT PFNGLLGPUCOPYIMAGESUBDATANVXPROC __glewLGPUCopyImageSubDataNVX;
+GLEW_FUN_EXPORT PFNGLLGPUINTERLOCKNVXPROC __glewLGPUInterlockNVX;
+GLEW_FUN_EXPORT PFNGLLGPUNAMEDBUFFERSUBDATANVXPROC __glewLGPUNamedBufferSubDataNVX;
+
GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC __glewMultiDrawArraysIndirectBindlessNV;
GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC __glewMultiDrawElementsIndirectBindlessNV;
@@ -18448,6 +18774,26 @@ GLEW_FUN_EXPORT PFNGLUNIFORMHANDLEUI64VNVPROC __glewUniformHandleui64vNV;
GLEW_FUN_EXPORT PFNGLBLENDBARRIERNVPROC __glewBlendBarrierNV;
GLEW_FUN_EXPORT PFNGLBLENDPARAMETERINVPROC __glewBlendParameteriNV;
+GLEW_FUN_EXPORT PFNGLVIEWPORTPOSITIONWSCALENVPROC __glewViewportPositionWScaleNV;
+
+GLEW_FUN_EXPORT PFNGLCALLCOMMANDLISTNVPROC __glewCallCommandListNV;
+GLEW_FUN_EXPORT PFNGLCOMMANDLISTSEGMENTSNVPROC __glewCommandListSegmentsNV;
+GLEW_FUN_EXPORT PFNGLCOMPILECOMMANDLISTNVPROC __glewCompileCommandListNV;
+GLEW_FUN_EXPORT PFNGLCREATECOMMANDLISTSNVPROC __glewCreateCommandListsNV;
+GLEW_FUN_EXPORT PFNGLCREATESTATESNVPROC __glewCreateStatesNV;
+GLEW_FUN_EXPORT PFNGLDELETECOMMANDLISTSNVPROC __glewDeleteCommandListsNV;
+GLEW_FUN_EXPORT PFNGLDELETESTATESNVPROC __glewDeleteStatesNV;
+GLEW_FUN_EXPORT PFNGLDRAWCOMMANDSADDRESSNVPROC __glewDrawCommandsAddressNV;
+GLEW_FUN_EXPORT PFNGLDRAWCOMMANDSNVPROC __glewDrawCommandsNV;
+GLEW_FUN_EXPORT PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC __glewDrawCommandsStatesAddressNV;
+GLEW_FUN_EXPORT PFNGLDRAWCOMMANDSSTATESNVPROC __glewDrawCommandsStatesNV;
+GLEW_FUN_EXPORT PFNGLGETCOMMANDHEADERNVPROC __glewGetCommandHeaderNV;
+GLEW_FUN_EXPORT PFNGLGETSTAGEINDEXNVPROC __glewGetStageIndexNV;
+GLEW_FUN_EXPORT PFNGLISCOMMANDLISTNVPROC __glewIsCommandListNV;
+GLEW_FUN_EXPORT PFNGLISSTATENVPROC __glewIsStateNV;
+GLEW_FUN_EXPORT PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC __glewListDrawCommandsStatesClientNV;
+GLEW_FUN_EXPORT PFNGLSTATECAPTURENVPROC __glewStateCaptureNV;
+
GLEW_FUN_EXPORT PFNGLBEGINCONDITIONALRENDERNVPROC __glewBeginConditionalRenderNV;
GLEW_FUN_EXPORT PFNGLENDCONDITIONALRENDERNVPROC __glewEndConditionalRenderNV;
@@ -18455,6 +18801,8 @@ GLEW_FUN_EXPORT PFNGLSUBPIXELPRECISIONBIASNVPROC __glewSubpixelPrecisionBiasNV;
GLEW_FUN_EXPORT PFNGLCONSERVATIVERASTERPARAMETERFNVPROC __glewConservativeRasterParameterfNV;
+GLEW_FUN_EXPORT PFNGLCONSERVATIVERASTERPARAMETERINVPROC __glewConservativeRasterParameteriNV;
+
GLEW_FUN_EXPORT PFNGLCOPYIMAGESUBDATANVPROC __glewCopyImageSubDataNV;
GLEW_FUN_EXPORT PFNGLCLEARDEPTHDNVPROC __glewClearDepthdNV;
@@ -18463,6 +18811,12 @@ GLEW_FUN_EXPORT PFNGLDEPTHRANGEDNVPROC __glewDepthRangedNV;
GLEW_FUN_EXPORT PFNGLDRAWTEXTURENVPROC __glewDrawTextureNV;
+GLEW_FUN_EXPORT PFNGLDRAWVKIMAGENVPROC __glewDrawVkImageNV;
+GLEW_FUN_EXPORT PFNGLGETVKPROCADDRNVPROC __glewGetVkProcAddrNV;
+GLEW_FUN_EXPORT PFNGLSIGNALVKFENCENVPROC __glewSignalVkFenceNV;
+GLEW_FUN_EXPORT PFNGLSIGNALVKSEMAPHORENVPROC __glewSignalVkSemaphoreNV;
+GLEW_FUN_EXPORT PFNGLWAITVKSEMAPHORENVPROC __glewWaitVkSemaphoreNV;
+
GLEW_FUN_EXPORT PFNGLEVALMAPSNVPROC __glewEvalMapsNV;
GLEW_FUN_EXPORT PFNGLGETMAPATTRIBPARAMETERFVNVPROC __glewGetMapAttribParameterfvNV;
GLEW_FUN_EXPORT PFNGLGETMAPATTRIBPARAMETERIVNVPROC __glewGetMapAttribParameterivNV;
@@ -18498,6 +18852,19 @@ GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC __glewRenderbu
GLEW_FUN_EXPORT PFNGLPROGRAMVERTEXLIMITNVPROC __glewProgramVertexLimitNV;
+GLEW_FUN_EXPORT PFNGLMULTICASTBARRIERNVPROC __glewMulticastBarrierNV;
+GLEW_FUN_EXPORT PFNGLMULTICASTBLITFRAMEBUFFERNVPROC __glewMulticastBlitFramebufferNV;
+GLEW_FUN_EXPORT PFNGLMULTICASTBUFFERSUBDATANVPROC __glewMulticastBufferSubDataNV;
+GLEW_FUN_EXPORT PFNGLMULTICASTCOPYBUFFERSUBDATANVPROC __glewMulticastCopyBufferSubDataNV;
+GLEW_FUN_EXPORT PFNGLMULTICASTCOPYIMAGESUBDATANVPROC __glewMulticastCopyImageSubDataNV;
+GLEW_FUN_EXPORT PFNGLMULTICASTFRAMEBUFFERSAMPLELOCATIONSFVNVPROC __glewMulticastFramebufferSampleLocationsfvNV;
+GLEW_FUN_EXPORT PFNGLMULTICASTGETQUERYOBJECTI64VNVPROC __glewMulticastGetQueryObjecti64vNV;
+GLEW_FUN_EXPORT PFNGLMULTICASTGETQUERYOBJECTIVNVPROC __glewMulticastGetQueryObjectivNV;
+GLEW_FUN_EXPORT PFNGLMULTICASTGETQUERYOBJECTUI64VNVPROC __glewMulticastGetQueryObjectui64vNV;
+GLEW_FUN_EXPORT PFNGLMULTICASTGETQUERYOBJECTUIVNVPROC __glewMulticastGetQueryObjectuivNV;
+GLEW_FUN_EXPORT PFNGLMULTICASTWAITSYNCNVPROC __glewMulticastWaitSyncNV;
+GLEW_FUN_EXPORT PFNGLRENDERGPUMASKNVPROC __glewRenderGpuMaskNV;
+
GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERI4INVPROC __glewProgramEnvParameterI4iNV;
GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERI4IVNVPROC __glewProgramEnvParameterI4ivNV;
GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERI4UINVPROC __glewProgramEnvParameterI4uiNV;
@@ -18876,6 +19243,8 @@ GLEW_FUN_EXPORT PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC __glewVideoCaptureStrea
GLEW_FUN_EXPORT PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC __glewVideoCaptureStreamParameterfvNV;
GLEW_FUN_EXPORT PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC __glewVideoCaptureStreamParameterivNV;
+GLEW_FUN_EXPORT PFNGLVIEWPORTSWIZZLENVPROC __glewViewportSwizzleNV;
+
GLEW_FUN_EXPORT PFNGLCLEARDEPTHFOESPROC __glewClearDepthfOES;
GLEW_FUN_EXPORT PFNGLCLIPPLANEFOESPROC __glewClipPlanefOES;
GLEW_FUN_EXPORT PFNGLDEPTHRANGEFOESPROC __glewDepthRangefOES;
@@ -19071,12 +19440,6 @@ GLEW_FUN_EXPORT PFNGLTEXCOORD4FVERTEX4FSUNPROC __glewTexCoord4fVertex4fSUN;
GLEW_FUN_EXPORT PFNGLTEXCOORD4FVERTEX4FVSUNPROC __glewTexCoord4fVertex4fvSUN;
GLEW_FUN_EXPORT PFNGLADDSWAPHINTRECTWINPROC __glewAddSwapHintRectWIN;
-
-#if defined(GLEW_MX) && !defined(_WIN32)
-struct GLEWContextStruct
-{
-#endif /* GLEW_MX */
-
GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_1;
GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_2;
GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_2_1;
@@ -19115,6 +19478,7 @@ GLEW_VAR_EXPORT GLboolean __GLEW_AMD_query_buffer_object;
GLEW_VAR_EXPORT GLboolean __GLEW_AMD_sample_positions;
GLEW_VAR_EXPORT GLboolean __GLEW_AMD_seamless_cubemap_per_texture;
GLEW_VAR_EXPORT GLboolean __GLEW_AMD_shader_atomic_counter_ops;
+GLEW_VAR_EXPORT GLboolean __GLEW_AMD_shader_explicit_vertex_parameter;
GLEW_VAR_EXPORT GLboolean __GLEW_AMD_shader_stencil_export;
GLEW_VAR_EXPORT GLboolean __GLEW_AMD_shader_stencil_value_export;
GLEW_VAR_EXPORT GLboolean __GLEW_AMD_shader_trinary_minmax;
@@ -19204,6 +19568,7 @@ GLEW_VAR_EXPORT GLboolean __GLEW_ARB_framebuffer_sRGB;
GLEW_VAR_EXPORT GLboolean __GLEW_ARB_geometry_shader4;
GLEW_VAR_EXPORT GLboolean __GLEW_ARB_get_program_binary;
GLEW_VAR_EXPORT GLboolean __GLEW_ARB_get_texture_sub_image;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_gl_spirv;
GLEW_VAR_EXPORT GLboolean __GLEW_ARB_gpu_shader5;
GLEW_VAR_EXPORT GLboolean __GLEW_ARB_gpu_shader_fp64;
GLEW_VAR_EXPORT GLboolean __GLEW_ARB_gpu_shader_int64;
@@ -19344,6 +19709,7 @@ GLEW_VAR_EXPORT GLboolean __GLEW_ATI_texture_mirror_once;
GLEW_VAR_EXPORT GLboolean __GLEW_ATI_vertex_array_object;
GLEW_VAR_EXPORT GLboolean __GLEW_ATI_vertex_attrib_array_object;
GLEW_VAR_EXPORT GLboolean __GLEW_ATI_vertex_streams;
+GLEW_VAR_EXPORT GLboolean __GLEW_EGL_NV_robustness_video_memory_purge;
GLEW_VAR_EXPORT GLboolean __GLEW_EXT_422_pixels;
GLEW_VAR_EXPORT GLboolean __GLEW_EXT_Cg_shader;
GLEW_VAR_EXPORT GLboolean __GLEW_EXT_abgr;
@@ -19451,6 +19817,7 @@ GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_array_bgra;
GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_attrib_64bit;
GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_shader;
GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_weighting;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_window_rectangles;
GLEW_VAR_EXPORT GLboolean __GLEW_EXT_x11_sync_object;
GLEW_VAR_EXPORT GLboolean __GLEW_GREMEDY_frame_terminator;
GLEW_VAR_EXPORT GLboolean __GLEW_GREMEDY_string_marker;
@@ -19466,6 +19833,7 @@ GLEW_VAR_EXPORT GLboolean __GLEW_IBM_texture_mirrored_repeat;
GLEW_VAR_EXPORT GLboolean __GLEW_IBM_vertex_array_lists;
GLEW_VAR_EXPORT GLboolean __GLEW_INGR_color_clamp;
GLEW_VAR_EXPORT GLboolean __GLEW_INGR_interlace_read;
+GLEW_VAR_EXPORT GLboolean __GLEW_INTEL_conservative_rasterization;
GLEW_VAR_EXPORT GLboolean __GLEW_INTEL_fragment_shader_ordering;
GLEW_VAR_EXPORT GLboolean __GLEW_INTEL_framebuffer_CMAA;
GLEW_VAR_EXPORT GLboolean __GLEW_INTEL_map_texture;
@@ -19481,24 +19849,31 @@ GLEW_VAR_EXPORT GLboolean __GLEW_KHR_robust_buffer_access_behavior;
GLEW_VAR_EXPORT GLboolean __GLEW_KHR_robustness;
GLEW_VAR_EXPORT GLboolean __GLEW_KHR_texture_compression_astc_hdr;
GLEW_VAR_EXPORT GLboolean __GLEW_KHR_texture_compression_astc_ldr;
+GLEW_VAR_EXPORT GLboolean __GLEW_KHR_texture_compression_astc_sliced_3d;
GLEW_VAR_EXPORT GLboolean __GLEW_KTX_buffer_region;
GLEW_VAR_EXPORT GLboolean __GLEW_MESAX_texture_stack;
GLEW_VAR_EXPORT GLboolean __GLEW_MESA_pack_invert;
GLEW_VAR_EXPORT GLboolean __GLEW_MESA_resize_buffers;
+GLEW_VAR_EXPORT GLboolean __GLEW_MESA_shader_integer_functions;
GLEW_VAR_EXPORT GLboolean __GLEW_MESA_window_pos;
GLEW_VAR_EXPORT GLboolean __GLEW_MESA_ycbcr_texture;
+GLEW_VAR_EXPORT GLboolean __GLEW_NVX_blend_equation_advanced_multi_draw_buffers;
GLEW_VAR_EXPORT GLboolean __GLEW_NVX_conditional_render;
GLEW_VAR_EXPORT GLboolean __GLEW_NVX_gpu_memory_info;
+GLEW_VAR_EXPORT GLboolean __GLEW_NVX_linked_gpu_multicast;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_bindless_multi_draw_indirect;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_bindless_multi_draw_indirect_count;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_bindless_texture;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_blend_equation_advanced;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_blend_equation_advanced_coherent;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_blend_square;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_clip_space_w_scaling;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_command_list;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_compute_program5;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_conditional_render;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_conservative_raster;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_conservative_raster_dilate;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_conservative_raster_pre_snap_triangles;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_copy_depth_to_color;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_copy_image;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_deep_texture3D;
@@ -19506,6 +19881,7 @@ GLEW_VAR_EXPORT GLboolean __GLEW_NV_depth_buffer_float;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_depth_clamp;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_depth_range_unclamped;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_draw_texture;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_draw_vulkan_image;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_evaluators;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_explicit_multisample;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_fence;
@@ -19523,6 +19899,7 @@ GLEW_VAR_EXPORT GLboolean __GLEW_NV_framebuffer_multisample_coverage;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_geometry_program4;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_geometry_shader4;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_geometry_shader_passthrough;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_gpu_multicast;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_gpu_program4;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_gpu_program5;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_gpu_program5_mem_extended;
@@ -19545,16 +19922,19 @@ GLEW_VAR_EXPORT GLboolean __GLEW_NV_present_video;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_primitive_restart;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_register_combiners;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_register_combiners2;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_robustness_video_memory_purge;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_sample_locations;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_sample_mask_override_coverage;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_atomic_counters;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_atomic_float;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_atomic_float64;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_atomic_fp16_vector;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_atomic_int64;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_buffer_load;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_storage_buffer_object;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_thread_group;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_thread_shuffle;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_stereo_view_rendering;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_tessellation_program5;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_texgen_emboss;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_texgen_reflection;
@@ -19583,6 +19963,7 @@ GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program3;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program4;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_video_capture;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_viewport_array2;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_viewport_swizzle;
GLEW_VAR_EXPORT GLboolean __GLEW_OES_byte_coordinates;
GLEW_VAR_EXPORT GLboolean __GLEW_OES_compressed_paletted_texture;
GLEW_VAR_EXPORT GLboolean __GLEW_OES_read_format;
@@ -19663,11 +20044,6 @@ GLEW_VAR_EXPORT GLboolean __GLEW_SUN_vertex;
GLEW_VAR_EXPORT GLboolean __GLEW_WIN_phong_shading;
GLEW_VAR_EXPORT GLboolean __GLEW_WIN_specular_fog;
GLEW_VAR_EXPORT GLboolean __GLEW_WIN_swap_hint;
-
-#ifdef GLEW_MX
-}; /* GLEWContextStruct */
-#endif /* GLEW_MX */
-
/* ------------------------------------------------------------------------- */
/* error codes */
@@ -19688,40 +20064,24 @@ GLEW_VAR_EXPORT GLboolean __GLEW_WIN_swap_hint;
/* GLEW version info */
/*
-VERSION 1.13.0
-VERSION_MAJOR 1
-VERSION_MINOR 13
+VERSION 2.0.0
+VERSION_MAJOR 2
+VERSION_MINOR 0
VERSION_MICRO 0
*/
/* API */
-#ifdef GLEW_MX
-
-typedef struct GLEWContextStruct GLEWContext;
-GLEWAPI GLenum GLEWAPIENTRY glewContextInit (GLEWContext *ctx);
-GLEWAPI GLboolean GLEWAPIENTRY glewContextIsSupported (const GLEWContext *ctx, const char *name);
-
-#define glewInit() glewContextInit(glewGetContext())
-#define glewIsSupported(x) glewContextIsSupported(glewGetContext(), x)
-#define glewIsExtensionSupported(x) glewIsSupported(x)
-
-#define GLEW_GET_VAR(x) (*(const GLboolean*)&(glewGetContext()->x))
-#ifdef _WIN32
-# define GLEW_GET_FUN(x) glewGetContext()->x
-#else
-# define GLEW_GET_FUN(x) x
-#endif
-
-#else /* GLEW_MX */
-
GLEWAPI GLenum GLEWAPIENTRY glewInit (void);
GLEWAPI GLboolean GLEWAPIENTRY glewIsSupported (const char *name);
#define glewIsExtensionSupported(x) glewIsSupported(x)
+#ifndef GLEW_GET_VAR
#define GLEW_GET_VAR(x) (*(const GLboolean*)&x)
-#define GLEW_GET_FUN(x) x
+#endif
-#endif /* GLEW_MX */
+#ifndef GLEW_GET_FUN
+#define GLEW_GET_FUN(x) x
+#endif
GLEWAPI GLboolean glewExperimental;
GLEWAPI GLboolean GLEWAPIENTRY glewGetExtension (const char *name);
diff --git a/extern/glew/include/GL/glxew.h b/extern/glew/include/GL/glxew.h
index d803d260b37..1e2596d6627 100644
--- a/extern/glew/include/GL/glxew.h
+++ b/extern/glew/include/GL/glxew.h
@@ -670,6 +670,17 @@ typedef int ( * PFNGLXQUERYCONTEXTINFOEXTPROC) (Display* dpy, GLXContext context
#endif /* GLX_EXT_import_context */
+/* ---------------------------- GLX_EXT_libglvnd --------------------------- */
+
+#ifndef GLX_EXT_libglvnd
+#define GLX_EXT_libglvnd 1
+
+#define GLX_VENDOR_NAMES_EXT 0x20F6
+
+#define GLXEW_EXT_libglvnd GLXEW_GET_VAR(__GLXEW_EXT_libglvnd)
+
+#endif /* GLX_EXT_libglvnd */
+
/* -------------------------- GLX_EXT_scene_marker ------------------------- */
#ifndef GLX_EXT_scene_marker
@@ -1015,6 +1026,17 @@ typedef unsigned int* ( * PFNGLXENUMERATEVIDEODEVICESNVPROC) (Display *dpy, int
#endif /* GLX_NV_present_video */
+/* ------------------ GLX_NV_robustness_video_memory_purge ----------------- */
+
+#ifndef GLX_NV_robustness_video_memory_purge
+#define GLX_NV_robustness_video_memory_purge 1
+
+#define GLX_GENERATE_RESET_ON_VIDEO_MEMORY_PURGE_NV 0x20F7
+
+#define GLXEW_NV_robustness_video_memory_purge GLXEW_GET_VAR(__GLXEW_NV_robustness_video_memory_purge)
+
+#endif /* GLX_NV_robustness_video_memory_purge */
+
/* --------------------------- GLX_NV_swap_group --------------------------- */
#ifndef GLX_NV_swap_group
@@ -1500,13 +1522,8 @@ typedef int ( * PFNGLXVIDEORESIZESUNPROC) (Display* display, GLXDrawable window,
/* ------------------------------------------------------------------------- */
-#ifdef GLEW_MX
-#define GLXEW_FUN_EXPORT GLEW_FUN_EXPORT
-#define GLXEW_VAR_EXPORT
-#else
#define GLXEW_FUN_EXPORT GLEW_FUN_EXPORT
#define GLXEW_VAR_EXPORT GLEW_VAR_EXPORT
-#endif /* GLEW_MX */
GLXEW_FUN_EXPORT PFNGLXGETCURRENTDISPLAYPROC __glewXGetCurrentDisplay;
@@ -1658,12 +1675,6 @@ GLXEW_FUN_EXPORT PFNGLXGETTRANSPARENTINDEXSUNPROC __glewXGetTransparentIndexSUN;
GLXEW_FUN_EXPORT PFNGLXGETVIDEORESIZESUNPROC __glewXGetVideoResizeSUN;
GLXEW_FUN_EXPORT PFNGLXVIDEORESIZESUNPROC __glewXVideoResizeSUN;
-
-#if defined(GLEW_MX)
-struct GLXEWContextStruct
-{
-#endif /* GLEW_MX */
-
GLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_0;
GLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_1;
GLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_2;
@@ -1690,6 +1701,7 @@ GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_create_context_es_profile;
GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_fbconfig_packed_float;
GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_framebuffer_sRGB;
GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_import_context;
+GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_libglvnd;
GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_scene_marker;
GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_stereo_tree;
GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_swap_control;
@@ -1711,6 +1723,7 @@ GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_delay_before_swap;
GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_float_buffer;
GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_multisample_coverage;
GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_present_video;
+GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_robustness_video_memory_purge;
GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_swap_group;
GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_vertex_array_range;
GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_video_capture;
@@ -1734,34 +1747,18 @@ GLXEW_VAR_EXPORT GLboolean __GLXEW_SGI_swap_control;
GLXEW_VAR_EXPORT GLboolean __GLXEW_SGI_video_sync;
GLXEW_VAR_EXPORT GLboolean __GLXEW_SUN_get_transparent_index;
GLXEW_VAR_EXPORT GLboolean __GLXEW_SUN_video_resize;
-
-#ifdef GLEW_MX
-}; /* GLXEWContextStruct */
-#endif /* GLEW_MX */
-
/* ------------------------------------------------------------------------ */
-#ifdef GLEW_MX
-
-typedef struct GLXEWContextStruct GLXEWContext;
-GLEWAPI GLenum GLEWAPIENTRY glxewContextInit (GLXEWContext *ctx);
-GLEWAPI GLboolean GLEWAPIENTRY glxewContextIsSupported (const GLXEWContext *ctx, const char *name);
-
-#define glxewInit() glxewContextInit(glxewGetContext())
-#define glxewIsSupported(x) glxewContextIsSupported(glxewGetContext(), x)
-
-#define GLXEW_GET_VAR(x) (*(const GLboolean*)&(glxewGetContext()->x))
-#define GLXEW_GET_FUN(x) x
-
-#else /* GLEW_MX */
-
GLEWAPI GLenum GLEWAPIENTRY glxewInit ();
GLEWAPI GLboolean GLEWAPIENTRY glxewIsSupported (const char *name);
+#ifndef GLXEW_GET_VAR
#define GLXEW_GET_VAR(x) (*(const GLboolean*)&x)
-#define GLXEW_GET_FUN(x) x
+#endif
-#endif /* GLEW_MX */
+#ifndef GLXEW_GET_FUN
+#define GLXEW_GET_FUN(x) x
+#endif
GLEWAPI GLboolean GLEWAPIENTRY glxewGetExtension (const char *name);
diff --git a/extern/glew/include/GL/wglew.h b/extern/glew/include/GL/wglew.h
index 23e4d3fbaba..71ee0f30132 100644
--- a/extern/glew/include/GL/wglew.h
+++ b/extern/glew/include/GL/wglew.h
@@ -1197,18 +1197,8 @@ typedef BOOL (WINAPI * PFNWGLWAITFORSBCOMLPROC) (HDC hdc, INT64 target_sbc, INT6
/* ------------------------------------------------------------------------- */
-#ifdef GLEW_MX
-#define WGLEW_FUN_EXPORT
-#define WGLEW_VAR_EXPORT
-#else
#define WGLEW_FUN_EXPORT GLEW_FUN_EXPORT
#define WGLEW_VAR_EXPORT GLEW_VAR_EXPORT
-#endif /* GLEW_MX */
-
-#ifdef GLEW_MX
-struct WGLEWContextStruct
-{
-#endif /* GLEW_MX */
WGLEW_FUN_EXPORT PFNWGLSETSTEREOEMITTERSTATE3DLPROC __wglewSetStereoEmitterState3DL;
@@ -1413,34 +1403,18 @@ WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_vertex_array_range;
WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_video_capture;
WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_video_output;
WGLEW_VAR_EXPORT GLboolean __WGLEW_OML_sync_control;
-
-#ifdef GLEW_MX
-}; /* WGLEWContextStruct */
-#endif /* GLEW_MX */
-
/* ------------------------------------------------------------------------- */
-#ifdef GLEW_MX
-
-typedef struct WGLEWContextStruct WGLEWContext;
-GLEWAPI GLenum GLEWAPIENTRY wglewContextInit (WGLEWContext *ctx);
-GLEWAPI GLboolean GLEWAPIENTRY wglewContextIsSupported (const WGLEWContext *ctx, const char *name);
-
-#define wglewInit() wglewContextInit(wglewGetContext())
-#define wglewIsSupported(x) wglewContextIsSupported(wglewGetContext(), x)
-
-#define WGLEW_GET_VAR(x) (*(const GLboolean*)&(wglewGetContext()->x))
-#define WGLEW_GET_FUN(x) wglewGetContext()->x
-
-#else /* GLEW_MX */
-
GLEWAPI GLenum GLEWAPIENTRY wglewInit ();
GLEWAPI GLboolean GLEWAPIENTRY wglewIsSupported (const char *name);
+#ifndef WGLEW_GET_VAR
#define WGLEW_GET_VAR(x) (*(const GLboolean*)&x)
-#define WGLEW_GET_FUN(x) x
+#endif
-#endif /* GLEW_MX */
+#ifndef WGLEW_GET_FUN
+#define WGLEW_GET_FUN(x) x
+#endif
GLEWAPI GLboolean GLEWAPIENTRY wglewGetExtension (const char *name);
diff --git a/extern/glew/src/glew.c b/extern/glew/src/glew.c
index 0ed5520dae2..6c93c07e46f 100644
--- a/extern/glew/src/glew.c
+++ b/extern/glew/src/glew.c
@@ -32,7 +32,12 @@
#include <GL/glew.h>
-#if defined(_WIN32)
+#if defined(GLEW_OSMESA)
+# define GLAPI extern
+# include <GL/osmesa.h>
+#elif defined(GLEW_EGL)
+# include <GL/eglew.h>
+#elif defined(_WIN32)
# include <GL/wglew.h>
#elif !defined(__ANDROID__) && !defined(__native_client__) && !defined(__HAIKU__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX))
# include <GL/glxew.h>
@@ -40,36 +45,8 @@
#include <stddef.h> /* For size_t */
-/*
- * Define glewGetContext and related helper macros.
- */
-#ifdef GLEW_MX
-# define glewGetContext() ctx
-# ifdef _WIN32
-# define GLEW_CONTEXT_ARG_DEF_INIT GLEWContext* ctx
-# define GLEW_CONTEXT_ARG_VAR_INIT ctx
-# define wglewGetContext() ctx
-# define WGLEW_CONTEXT_ARG_DEF_INIT WGLEWContext* ctx
-# define WGLEW_CONTEXT_ARG_DEF_LIST WGLEWContext* ctx
-# else /* _WIN32 */
-# define GLEW_CONTEXT_ARG_DEF_INIT void
-# define GLEW_CONTEXT_ARG_VAR_INIT
-# define glxewGetContext() ctx
-# define GLXEW_CONTEXT_ARG_DEF_INIT void
-# define GLXEW_CONTEXT_ARG_DEF_LIST GLXEWContext* ctx
-# endif /* _WIN32 */
-# define GLEW_CONTEXT_ARG_DEF_LIST GLEWContext* ctx
-#else /* GLEW_MX */
-# define GLEW_CONTEXT_ARG_DEF_INIT void
-# define GLEW_CONTEXT_ARG_VAR_INIT
-# define GLEW_CONTEXT_ARG_DEF_LIST void
-# define WGLEW_CONTEXT_ARG_DEF_INIT void
-# define WGLEW_CONTEXT_ARG_DEF_LIST void
-# define GLXEW_CONTEXT_ARG_DEF_INIT void
-# define GLXEW_CONTEXT_ARG_DEF_LIST void
-#endif /* GLEW_MX */
-
-#if defined(GLEW_REGAL)
+#if defined(GLEW_EGL)
+#elif defined(GLEW_REGAL)
/* In GLEW_REGAL mode we call direcly into the linked
libRegal.so glGetProcAddressREGAL for looking up
@@ -121,7 +98,7 @@ void* NSGLGetProcAddress (const GLubyte *name)
{
static void* image = NULL;
void* addr;
- if (NULL == image)
+ if (NULL == image)
{
image = dlopen("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL", RTLD_LAZY);
}
@@ -170,7 +147,11 @@ void* NSGLGetProcAddress (const GLubyte *name)
* Define glewGetProcAddress.
*/
#if defined(GLEW_REGAL)
-# define glewGetProcAddress(name) regalGetProcAddress((const GLchar *) name)
+# define glewGetProcAddress(name) regalGetProcAddress((const GLchar *)name)
+#elif defined(GLEW_OSMESA)
+# define glewGetProcAddress(name) OSMesaGetProcAddress((const char *)name)
+#elif defined(GLEW_EGL)
+# define glewGetProcAddress(name) eglGetProcAddress((const char *)name)
#elif defined(_WIN32)
# define glewGetProcAddress(name) wglGetProcAddress((LPCSTR)name)
#elif defined(__APPLE__) && !defined(GLEW_APPLE_GLX)
@@ -190,34 +171,28 @@ void* NSGLGetProcAddress (const GLubyte *name)
*/
#undef GLEW_GET_VAR
-#ifdef GLEW_MX
-# define GLEW_GET_VAR(x) (glewGetContext()->x)
-#else /* GLEW_MX */
# define GLEW_GET_VAR(x) (x)
-#endif /* GLEW_MX */
#ifdef WGLEW_GET_VAR
# undef WGLEW_GET_VAR
-# ifdef GLEW_MX
-# define WGLEW_GET_VAR(x) (wglewGetContext()->x)
-# else /* GLEW_MX */
-# define WGLEW_GET_VAR(x) (x)
-# endif /* GLEW_MX */
+# define WGLEW_GET_VAR(x) (x)
#endif /* WGLEW_GET_VAR */
#ifdef GLXEW_GET_VAR
# undef GLXEW_GET_VAR
-# ifdef GLEW_MX
-# define GLXEW_GET_VAR(x) (glxewGetContext()->x)
-# else /* GLEW_MX */
-# define GLXEW_GET_VAR(x) (x)
-# endif /* GLEW_MX */
+# define GLXEW_GET_VAR(x) (x)
#endif /* GLXEW_GET_VAR */
+#ifdef EGLEW_GET_VAR
+# undef EGLEW_GET_VAR
+# define EGLEW_GET_VAR(x) (x)
+#endif /* EGLEW_GET_VAR */
+
/*
* GLEW, just like OpenGL or GLU, does not rely on the standard C library.
* These functions implement the functionality required in this file.
*/
+
static GLuint _glewStrLen (const GLubyte* s)
{
GLuint i=0;
@@ -231,9 +206,20 @@ static GLuint _glewStrCLen (const GLubyte* s, GLubyte c)
GLuint i=0;
if (s == NULL) return 0;
while (s[i] != '\0' && s[i] != c) i++;
- return (s[i] == '\0' || s[i] == c) ? i : 0;
+ return i;
+}
+
+static GLuint _glewStrCopy(char *d, const char *s, char c)
+{
+ GLuint i=0;
+ if (s == NULL) return 0;
+ while (s[i] != '\0' && s[i] != c) { d[i] = s[i]; i++; }
+ d[i] = '\0';
+ return i;
}
+#if !defined(GLEW_OSMESA)
+#if !defined(__APPLE__) || defined(GLEW_APPLE_GLX)
static GLboolean _glewStrSame (const GLubyte* a, const GLubyte* b, GLuint n)
{
GLuint i=0;
@@ -242,6 +228,8 @@ static GLboolean _glewStrSame (const GLubyte* a, const GLubyte* b, GLuint n)
while (i < n && a[i] != '\0' && b[i] != '\0' && a[i] == b[i]) i++;
return i == n ? GL_TRUE : GL_FALSE;
}
+#endif
+#endif
static GLboolean _glewStrSame1 (const GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb)
{
@@ -302,6 +290,8 @@ static GLboolean _glewStrSame3 (const GLubyte** a, GLuint* na, const GLubyte* b,
* other extension names. Could use strtok() but the constant
* string returned by glGetString might be in read-only memory.
*/
+#if !defined(GLEW_OSMESA)
+#if !defined(__APPLE__) || defined(GLEW_APPLE_GLX)
static GLboolean _glewSearchExtension (const char* name, const GLubyte *start, const GLubyte *end)
{
const GLubyte* p;
@@ -315,8 +305,8 @@ static GLboolean _glewSearchExtension (const char* name, const GLubyte *start, c
}
return GL_FALSE;
}
-
-#if !defined(_WIN32) || !defined(GLEW_MX)
+#endif
+#endif
PFNGLCOPYTEXSUBIMAGE3DPROC __glewCopyTexSubImage3D = NULL;
PFNGLDRAWRANGEELEMENTSPROC __glewDrawRangeElements = NULL;
@@ -942,6 +932,8 @@ PFNGLPROGRAMPARAMETERIPROC __glewProgramParameteri = NULL;
PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC __glewGetCompressedTextureSubImage = NULL;
PFNGLGETTEXTURESUBIMAGEPROC __glewGetTextureSubImage = NULL;
+PFNGLSPECIALIZESHADERARBPROC __glewSpecializeShaderARB = NULL;
+
PFNGLGETUNIFORMDVPROC __glewGetUniformdv = NULL;
PFNGLUNIFORM1DPROC __glewUniform1d = NULL;
PFNGLUNIFORM1DVPROC __glewUniform1dv = NULL;
@@ -2218,6 +2210,8 @@ PFNGLVERTEXWEIGHTPOINTEREXTPROC __glewVertexWeightPointerEXT = NULL;
PFNGLVERTEXWEIGHTFEXTPROC __glewVertexWeightfEXT = NULL;
PFNGLVERTEXWEIGHTFVEXTPROC __glewVertexWeightfvEXT = NULL;
+PFNGLWINDOWRECTANGLESEXTPROC __glewWindowRectanglesEXT = NULL;
+
PFNGLIMPORTSYNCEXTPROC __glewImportSyncEXT = NULL;
PFNGLFRAMETERMINATORGREMEDYPROC __glewFrameTerminatorGREMEDY = NULL;
@@ -2320,6 +2314,10 @@ PFNGLWINDOWPOS4SVMESAPROC __glewWindowPos4svMESA = NULL;
PFNGLBEGINCONDITIONALRENDERNVXPROC __glewBeginConditionalRenderNVX = NULL;
PFNGLENDCONDITIONALRENDERNVXPROC __glewEndConditionalRenderNVX = NULL;
+PFNGLLGPUCOPYIMAGESUBDATANVXPROC __glewLGPUCopyImageSubDataNVX = NULL;
+PFNGLLGPUINTERLOCKNVXPROC __glewLGPUInterlockNVX = NULL;
+PFNGLLGPUNAMEDBUFFERSUBDATANVXPROC __glewLGPUNamedBufferSubDataNVX = NULL;
+
PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC __glewMultiDrawArraysIndirectBindlessNV = NULL;
PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC __glewMultiDrawElementsIndirectBindlessNV = NULL;
@@ -2343,6 +2341,26 @@ PFNGLUNIFORMHANDLEUI64VNVPROC __glewUniformHandleui64vNV = NULL;
PFNGLBLENDBARRIERNVPROC __glewBlendBarrierNV = NULL;
PFNGLBLENDPARAMETERINVPROC __glewBlendParameteriNV = NULL;
+PFNGLVIEWPORTPOSITIONWSCALENVPROC __glewViewportPositionWScaleNV = NULL;
+
+PFNGLCALLCOMMANDLISTNVPROC __glewCallCommandListNV = NULL;
+PFNGLCOMMANDLISTSEGMENTSNVPROC __glewCommandListSegmentsNV = NULL;
+PFNGLCOMPILECOMMANDLISTNVPROC __glewCompileCommandListNV = NULL;
+PFNGLCREATECOMMANDLISTSNVPROC __glewCreateCommandListsNV = NULL;
+PFNGLCREATESTATESNVPROC __glewCreateStatesNV = NULL;
+PFNGLDELETECOMMANDLISTSNVPROC __glewDeleteCommandListsNV = NULL;
+PFNGLDELETESTATESNVPROC __glewDeleteStatesNV = NULL;
+PFNGLDRAWCOMMANDSADDRESSNVPROC __glewDrawCommandsAddressNV = NULL;
+PFNGLDRAWCOMMANDSNVPROC __glewDrawCommandsNV = NULL;
+PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC __glewDrawCommandsStatesAddressNV = NULL;
+PFNGLDRAWCOMMANDSSTATESNVPROC __glewDrawCommandsStatesNV = NULL;
+PFNGLGETCOMMANDHEADERNVPROC __glewGetCommandHeaderNV = NULL;
+PFNGLGETSTAGEINDEXNVPROC __glewGetStageIndexNV = NULL;
+PFNGLISCOMMANDLISTNVPROC __glewIsCommandListNV = NULL;
+PFNGLISSTATENVPROC __glewIsStateNV = NULL;
+PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC __glewListDrawCommandsStatesClientNV = NULL;
+PFNGLSTATECAPTURENVPROC __glewStateCaptureNV = NULL;
+
PFNGLBEGINCONDITIONALRENDERNVPROC __glewBeginConditionalRenderNV = NULL;
PFNGLENDCONDITIONALRENDERNVPROC __glewEndConditionalRenderNV = NULL;
@@ -2350,6 +2368,8 @@ PFNGLSUBPIXELPRECISIONBIASNVPROC __glewSubpixelPrecisionBiasNV = NULL;
PFNGLCONSERVATIVERASTERPARAMETERFNVPROC __glewConservativeRasterParameterfNV = NULL;
+PFNGLCONSERVATIVERASTERPARAMETERINVPROC __glewConservativeRasterParameteriNV = NULL;
+
PFNGLCOPYIMAGESUBDATANVPROC __glewCopyImageSubDataNV = NULL;
PFNGLCLEARDEPTHDNVPROC __glewClearDepthdNV = NULL;
@@ -2358,6 +2378,12 @@ PFNGLDEPTHRANGEDNVPROC __glewDepthRangedNV = NULL;
PFNGLDRAWTEXTURENVPROC __glewDrawTextureNV = NULL;
+PFNGLDRAWVKIMAGENVPROC __glewDrawVkImageNV = NULL;
+PFNGLGETVKPROCADDRNVPROC __glewGetVkProcAddrNV = NULL;
+PFNGLSIGNALVKFENCENVPROC __glewSignalVkFenceNV = NULL;
+PFNGLSIGNALVKSEMAPHORENVPROC __glewSignalVkSemaphoreNV = NULL;
+PFNGLWAITVKSEMAPHORENVPROC __glewWaitVkSemaphoreNV = NULL;
+
PFNGLEVALMAPSNVPROC __glewEvalMapsNV = NULL;
PFNGLGETMAPATTRIBPARAMETERFVNVPROC __glewGetMapAttribParameterfvNV = NULL;
PFNGLGETMAPATTRIBPARAMETERIVNVPROC __glewGetMapAttribParameterivNV = NULL;
@@ -2393,6 +2419,19 @@ PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC __glewRenderbufferStorageMulti
PFNGLPROGRAMVERTEXLIMITNVPROC __glewProgramVertexLimitNV = NULL;
+PFNGLMULTICASTBARRIERNVPROC __glewMulticastBarrierNV = NULL;
+PFNGLMULTICASTBLITFRAMEBUFFERNVPROC __glewMulticastBlitFramebufferNV = NULL;
+PFNGLMULTICASTBUFFERSUBDATANVPROC __glewMulticastBufferSubDataNV = NULL;
+PFNGLMULTICASTCOPYBUFFERSUBDATANVPROC __glewMulticastCopyBufferSubDataNV = NULL;
+PFNGLMULTICASTCOPYIMAGESUBDATANVPROC __glewMulticastCopyImageSubDataNV = NULL;
+PFNGLMULTICASTFRAMEBUFFERSAMPLELOCATIONSFVNVPROC __glewMulticastFramebufferSampleLocationsfvNV = NULL;
+PFNGLMULTICASTGETQUERYOBJECTI64VNVPROC __glewMulticastGetQueryObjecti64vNV = NULL;
+PFNGLMULTICASTGETQUERYOBJECTIVNVPROC __glewMulticastGetQueryObjectivNV = NULL;
+PFNGLMULTICASTGETQUERYOBJECTUI64VNVPROC __glewMulticastGetQueryObjectui64vNV = NULL;
+PFNGLMULTICASTGETQUERYOBJECTUIVNVPROC __glewMulticastGetQueryObjectuivNV = NULL;
+PFNGLMULTICASTWAITSYNCNVPROC __glewMulticastWaitSyncNV = NULL;
+PFNGLRENDERGPUMASKNVPROC __glewRenderGpuMaskNV = NULL;
+
PFNGLPROGRAMENVPARAMETERI4INVPROC __glewProgramEnvParameterI4iNV = NULL;
PFNGLPROGRAMENVPARAMETERI4IVNVPROC __glewProgramEnvParameterI4ivNV = NULL;
PFNGLPROGRAMENVPARAMETERI4UINVPROC __glewProgramEnvParameterI4uiNV = NULL;
@@ -2771,6 +2810,8 @@ PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC __glewVideoCaptureStreamParameterdvNV =
PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC __glewVideoCaptureStreamParameterfvNV = NULL;
PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC __glewVideoCaptureStreamParameterivNV = NULL;
+PFNGLVIEWPORTSWIZZLENVPROC __glewViewportSwizzleNV = NULL;
+
PFNGLCLEARDEPTHFOESPROC __glewClearDepthfOES = NULL;
PFNGLCLIPPLANEFOESPROC __glewClipPlanefOES = NULL;
PFNGLDEPTHRANGEFOESPROC __glewDepthRangefOES = NULL;
@@ -2967,10 +3008,6 @@ PFNGLTEXCOORD4FVERTEX4FVSUNPROC __glewTexCoord4fVertex4fvSUN = NULL;
PFNGLADDSWAPHINTRECTWINPROC __glewAddSwapHintRectWIN = NULL;
-#endif /* !WIN32 || !GLEW_MX */
-
-#if !defined(GLEW_MX)
-
GLboolean __GLEW_VERSION_1_1 = GL_FALSE;
GLboolean __GLEW_VERSION_1_2 = GL_FALSE;
GLboolean __GLEW_VERSION_1_2_1 = GL_FALSE;
@@ -3009,6 +3046,7 @@ GLboolean __GLEW_AMD_query_buffer_object = GL_FALSE;
GLboolean __GLEW_AMD_sample_positions = GL_FALSE;
GLboolean __GLEW_AMD_seamless_cubemap_per_texture = GL_FALSE;
GLboolean __GLEW_AMD_shader_atomic_counter_ops = GL_FALSE;
+GLboolean __GLEW_AMD_shader_explicit_vertex_parameter = GL_FALSE;
GLboolean __GLEW_AMD_shader_stencil_export = GL_FALSE;
GLboolean __GLEW_AMD_shader_stencil_value_export = GL_FALSE;
GLboolean __GLEW_AMD_shader_trinary_minmax = GL_FALSE;
@@ -3098,6 +3136,7 @@ GLboolean __GLEW_ARB_framebuffer_sRGB = GL_FALSE;
GLboolean __GLEW_ARB_geometry_shader4 = GL_FALSE;
GLboolean __GLEW_ARB_get_program_binary = GL_FALSE;
GLboolean __GLEW_ARB_get_texture_sub_image = GL_FALSE;
+GLboolean __GLEW_ARB_gl_spirv = GL_FALSE;
GLboolean __GLEW_ARB_gpu_shader5 = GL_FALSE;
GLboolean __GLEW_ARB_gpu_shader_fp64 = GL_FALSE;
GLboolean __GLEW_ARB_gpu_shader_int64 = GL_FALSE;
@@ -3238,6 +3277,7 @@ GLboolean __GLEW_ATI_texture_mirror_once = GL_FALSE;
GLboolean __GLEW_ATI_vertex_array_object = GL_FALSE;
GLboolean __GLEW_ATI_vertex_attrib_array_object = GL_FALSE;
GLboolean __GLEW_ATI_vertex_streams = GL_FALSE;
+GLboolean __GLEW_EGL_NV_robustness_video_memory_purge = GL_FALSE;
GLboolean __GLEW_EXT_422_pixels = GL_FALSE;
GLboolean __GLEW_EXT_Cg_shader = GL_FALSE;
GLboolean __GLEW_EXT_abgr = GL_FALSE;
@@ -3345,6 +3385,7 @@ GLboolean __GLEW_EXT_vertex_array_bgra = GL_FALSE;
GLboolean __GLEW_EXT_vertex_attrib_64bit = GL_FALSE;
GLboolean __GLEW_EXT_vertex_shader = GL_FALSE;
GLboolean __GLEW_EXT_vertex_weighting = GL_FALSE;
+GLboolean __GLEW_EXT_window_rectangles = GL_FALSE;
GLboolean __GLEW_EXT_x11_sync_object = GL_FALSE;
GLboolean __GLEW_GREMEDY_frame_terminator = GL_FALSE;
GLboolean __GLEW_GREMEDY_string_marker = GL_FALSE;
@@ -3360,6 +3401,7 @@ GLboolean __GLEW_IBM_texture_mirrored_repeat = GL_FALSE;
GLboolean __GLEW_IBM_vertex_array_lists = GL_FALSE;
GLboolean __GLEW_INGR_color_clamp = GL_FALSE;
GLboolean __GLEW_INGR_interlace_read = GL_FALSE;
+GLboolean __GLEW_INTEL_conservative_rasterization = GL_FALSE;
GLboolean __GLEW_INTEL_fragment_shader_ordering = GL_FALSE;
GLboolean __GLEW_INTEL_framebuffer_CMAA = GL_FALSE;
GLboolean __GLEW_INTEL_map_texture = GL_FALSE;
@@ -3375,24 +3417,31 @@ GLboolean __GLEW_KHR_robust_buffer_access_behavior = GL_FALSE;
GLboolean __GLEW_KHR_robustness = GL_FALSE;
GLboolean __GLEW_KHR_texture_compression_astc_hdr = GL_FALSE;
GLboolean __GLEW_KHR_texture_compression_astc_ldr = GL_FALSE;
+GLboolean __GLEW_KHR_texture_compression_astc_sliced_3d = GL_FALSE;
GLboolean __GLEW_KTX_buffer_region = GL_FALSE;
GLboolean __GLEW_MESAX_texture_stack = GL_FALSE;
GLboolean __GLEW_MESA_pack_invert = GL_FALSE;
GLboolean __GLEW_MESA_resize_buffers = GL_FALSE;
+GLboolean __GLEW_MESA_shader_integer_functions = GL_FALSE;
GLboolean __GLEW_MESA_window_pos = GL_FALSE;
GLboolean __GLEW_MESA_ycbcr_texture = GL_FALSE;
+GLboolean __GLEW_NVX_blend_equation_advanced_multi_draw_buffers = GL_FALSE;
GLboolean __GLEW_NVX_conditional_render = GL_FALSE;
GLboolean __GLEW_NVX_gpu_memory_info = GL_FALSE;
+GLboolean __GLEW_NVX_linked_gpu_multicast = GL_FALSE;
GLboolean __GLEW_NV_bindless_multi_draw_indirect = GL_FALSE;
GLboolean __GLEW_NV_bindless_multi_draw_indirect_count = GL_FALSE;
GLboolean __GLEW_NV_bindless_texture = GL_FALSE;
GLboolean __GLEW_NV_blend_equation_advanced = GL_FALSE;
GLboolean __GLEW_NV_blend_equation_advanced_coherent = GL_FALSE;
GLboolean __GLEW_NV_blend_square = GL_FALSE;
+GLboolean __GLEW_NV_clip_space_w_scaling = GL_FALSE;
+GLboolean __GLEW_NV_command_list = GL_FALSE;
GLboolean __GLEW_NV_compute_program5 = GL_FALSE;
GLboolean __GLEW_NV_conditional_render = GL_FALSE;
GLboolean __GLEW_NV_conservative_raster = GL_FALSE;
GLboolean __GLEW_NV_conservative_raster_dilate = GL_FALSE;
+GLboolean __GLEW_NV_conservative_raster_pre_snap_triangles = GL_FALSE;
GLboolean __GLEW_NV_copy_depth_to_color = GL_FALSE;
GLboolean __GLEW_NV_copy_image = GL_FALSE;
GLboolean __GLEW_NV_deep_texture3D = GL_FALSE;
@@ -3400,6 +3449,7 @@ GLboolean __GLEW_NV_depth_buffer_float = GL_FALSE;
GLboolean __GLEW_NV_depth_clamp = GL_FALSE;
GLboolean __GLEW_NV_depth_range_unclamped = GL_FALSE;
GLboolean __GLEW_NV_draw_texture = GL_FALSE;
+GLboolean __GLEW_NV_draw_vulkan_image = GL_FALSE;
GLboolean __GLEW_NV_evaluators = GL_FALSE;
GLboolean __GLEW_NV_explicit_multisample = GL_FALSE;
GLboolean __GLEW_NV_fence = GL_FALSE;
@@ -3417,6 +3467,7 @@ GLboolean __GLEW_NV_framebuffer_multisample_coverage = GL_FALSE;
GLboolean __GLEW_NV_geometry_program4 = GL_FALSE;
GLboolean __GLEW_NV_geometry_shader4 = GL_FALSE;
GLboolean __GLEW_NV_geometry_shader_passthrough = GL_FALSE;
+GLboolean __GLEW_NV_gpu_multicast = GL_FALSE;
GLboolean __GLEW_NV_gpu_program4 = GL_FALSE;
GLboolean __GLEW_NV_gpu_program5 = GL_FALSE;
GLboolean __GLEW_NV_gpu_program5_mem_extended = GL_FALSE;
@@ -3439,16 +3490,19 @@ GLboolean __GLEW_NV_present_video = GL_FALSE;
GLboolean __GLEW_NV_primitive_restart = GL_FALSE;
GLboolean __GLEW_NV_register_combiners = GL_FALSE;
GLboolean __GLEW_NV_register_combiners2 = GL_FALSE;
+GLboolean __GLEW_NV_robustness_video_memory_purge = GL_FALSE;
GLboolean __GLEW_NV_sample_locations = GL_FALSE;
GLboolean __GLEW_NV_sample_mask_override_coverage = GL_FALSE;
GLboolean __GLEW_NV_shader_atomic_counters = GL_FALSE;
GLboolean __GLEW_NV_shader_atomic_float = GL_FALSE;
+GLboolean __GLEW_NV_shader_atomic_float64 = GL_FALSE;
GLboolean __GLEW_NV_shader_atomic_fp16_vector = GL_FALSE;
GLboolean __GLEW_NV_shader_atomic_int64 = GL_FALSE;
GLboolean __GLEW_NV_shader_buffer_load = GL_FALSE;
GLboolean __GLEW_NV_shader_storage_buffer_object = GL_FALSE;
GLboolean __GLEW_NV_shader_thread_group = GL_FALSE;
GLboolean __GLEW_NV_shader_thread_shuffle = GL_FALSE;
+GLboolean __GLEW_NV_stereo_view_rendering = GL_FALSE;
GLboolean __GLEW_NV_tessellation_program5 = GL_FALSE;
GLboolean __GLEW_NV_texgen_emboss = GL_FALSE;
GLboolean __GLEW_NV_texgen_reflection = GL_FALSE;
@@ -3477,6 +3531,7 @@ GLboolean __GLEW_NV_vertex_program3 = GL_FALSE;
GLboolean __GLEW_NV_vertex_program4 = GL_FALSE;
GLboolean __GLEW_NV_video_capture = GL_FALSE;
GLboolean __GLEW_NV_viewport_array2 = GL_FALSE;
+GLboolean __GLEW_NV_viewport_swizzle = GL_FALSE;
GLboolean __GLEW_OES_byte_coordinates = GL_FALSE;
GLboolean __GLEW_OES_compressed_paletted_texture = GL_FALSE;
GLboolean __GLEW_OES_read_format = GL_FALSE;
@@ -3558,11 +3613,3925 @@ GLboolean __GLEW_WIN_phong_shading = GL_FALSE;
GLboolean __GLEW_WIN_specular_fog = GL_FALSE;
GLboolean __GLEW_WIN_swap_hint = GL_FALSE;
-#endif /* !GLEW_MX */
+static const char * _glewExtensionLookup[] = {
+#ifdef GL_VERSION_1_2
+ "GL_VERSION_1_2",
+#endif
+#ifdef GL_VERSION_1_2_1
+ "GL_VERSION_1_2_1",
+#endif
+#ifdef GL_VERSION_1_3
+ "GL_VERSION_1_3",
+#endif
+#ifdef GL_VERSION_1_4
+ "GL_VERSION_1_4",
+#endif
+#ifdef GL_VERSION_1_5
+ "GL_VERSION_1_5",
+#endif
+#ifdef GL_VERSION_2_0
+ "GL_VERSION_2_0",
+#endif
+#ifdef GL_VERSION_2_1
+ "GL_VERSION_2_1",
+#endif
+#ifdef GL_VERSION_3_0
+ "GL_VERSION_3_0",
+#endif
+#ifdef GL_VERSION_3_1
+ "GL_VERSION_3_1",
+#endif
+#ifdef GL_VERSION_3_2
+ "GL_VERSION_3_2",
+#endif
+#ifdef GL_VERSION_3_3
+ "GL_VERSION_3_3",
+#endif
+#ifdef GL_VERSION_4_0
+ "GL_VERSION_4_0",
+#endif
+#ifdef GL_VERSION_4_1
+ "GL_VERSION_4_1",
+#endif
+#ifdef GL_VERSION_4_2
+ "GL_VERSION_4_2",
+#endif
+#ifdef GL_VERSION_4_3
+ "GL_VERSION_4_3",
+#endif
+#ifdef GL_VERSION_4_4
+ "GL_VERSION_4_4",
+#endif
+#ifdef GL_VERSION_4_5
+ "GL_VERSION_4_5",
+#endif
+#ifdef GL_3DFX_multisample
+ "GL_3DFX_multisample",
+#endif
+#ifdef GL_3DFX_tbuffer
+ "GL_3DFX_tbuffer",
+#endif
+#ifdef GL_3DFX_texture_compression_FXT1
+ "GL_3DFX_texture_compression_FXT1",
+#endif
+#ifdef GL_AMD_blend_minmax_factor
+ "GL_AMD_blend_minmax_factor",
+#endif
+#ifdef GL_AMD_conservative_depth
+ "GL_AMD_conservative_depth",
+#endif
+#ifdef GL_AMD_debug_output
+ "GL_AMD_debug_output",
+#endif
+#ifdef GL_AMD_depth_clamp_separate
+ "GL_AMD_depth_clamp_separate",
+#endif
+#ifdef GL_AMD_draw_buffers_blend
+ "GL_AMD_draw_buffers_blend",
+#endif
+#ifdef GL_AMD_gcn_shader
+ "GL_AMD_gcn_shader",
+#endif
+#ifdef GL_AMD_gpu_shader_int64
+ "GL_AMD_gpu_shader_int64",
+#endif
+#ifdef GL_AMD_interleaved_elements
+ "GL_AMD_interleaved_elements",
+#endif
+#ifdef GL_AMD_multi_draw_indirect
+ "GL_AMD_multi_draw_indirect",
+#endif
+#ifdef GL_AMD_name_gen_delete
+ "GL_AMD_name_gen_delete",
+#endif
+#ifdef GL_AMD_occlusion_query_event
+ "GL_AMD_occlusion_query_event",
+#endif
+#ifdef GL_AMD_performance_monitor
+ "GL_AMD_performance_monitor",
+#endif
+#ifdef GL_AMD_pinned_memory
+ "GL_AMD_pinned_memory",
+#endif
+#ifdef GL_AMD_query_buffer_object
+ "GL_AMD_query_buffer_object",
+#endif
+#ifdef GL_AMD_sample_positions
+ "GL_AMD_sample_positions",
+#endif
+#ifdef GL_AMD_seamless_cubemap_per_texture
+ "GL_AMD_seamless_cubemap_per_texture",
+#endif
+#ifdef GL_AMD_shader_atomic_counter_ops
+ "GL_AMD_shader_atomic_counter_ops",
+#endif
+#ifdef GL_AMD_shader_explicit_vertex_parameter
+ "GL_AMD_shader_explicit_vertex_parameter",
+#endif
+#ifdef GL_AMD_shader_stencil_export
+ "GL_AMD_shader_stencil_export",
+#endif
+#ifdef GL_AMD_shader_stencil_value_export
+ "GL_AMD_shader_stencil_value_export",
+#endif
+#ifdef GL_AMD_shader_trinary_minmax
+ "GL_AMD_shader_trinary_minmax",
+#endif
+#ifdef GL_AMD_sparse_texture
+ "GL_AMD_sparse_texture",
+#endif
+#ifdef GL_AMD_stencil_operation_extended
+ "GL_AMD_stencil_operation_extended",
+#endif
+#ifdef GL_AMD_texture_texture4
+ "GL_AMD_texture_texture4",
+#endif
+#ifdef GL_AMD_transform_feedback3_lines_triangles
+ "GL_AMD_transform_feedback3_lines_triangles",
+#endif
+#ifdef GL_AMD_transform_feedback4
+ "GL_AMD_transform_feedback4",
+#endif
+#ifdef GL_AMD_vertex_shader_layer
+ "GL_AMD_vertex_shader_layer",
+#endif
+#ifdef GL_AMD_vertex_shader_tessellator
+ "GL_AMD_vertex_shader_tessellator",
+#endif
+#ifdef GL_AMD_vertex_shader_viewport_index
+ "GL_AMD_vertex_shader_viewport_index",
+#endif
+#ifdef GL_ANGLE_depth_texture
+ "GL_ANGLE_depth_texture",
+#endif
+#ifdef GL_ANGLE_framebuffer_blit
+ "GL_ANGLE_framebuffer_blit",
+#endif
+#ifdef GL_ANGLE_framebuffer_multisample
+ "GL_ANGLE_framebuffer_multisample",
+#endif
+#ifdef GL_ANGLE_instanced_arrays
+ "GL_ANGLE_instanced_arrays",
+#endif
+#ifdef GL_ANGLE_pack_reverse_row_order
+ "GL_ANGLE_pack_reverse_row_order",
+#endif
+#ifdef GL_ANGLE_program_binary
+ "GL_ANGLE_program_binary",
+#endif
+#ifdef GL_ANGLE_texture_compression_dxt1
+ "GL_ANGLE_texture_compression_dxt1",
+#endif
+#ifdef GL_ANGLE_texture_compression_dxt3
+ "GL_ANGLE_texture_compression_dxt3",
+#endif
+#ifdef GL_ANGLE_texture_compression_dxt5
+ "GL_ANGLE_texture_compression_dxt5",
+#endif
+#ifdef GL_ANGLE_texture_usage
+ "GL_ANGLE_texture_usage",
+#endif
+#ifdef GL_ANGLE_timer_query
+ "GL_ANGLE_timer_query",
+#endif
+#ifdef GL_ANGLE_translated_shader_source
+ "GL_ANGLE_translated_shader_source",
+#endif
+#ifdef GL_APPLE_aux_depth_stencil
+ "GL_APPLE_aux_depth_stencil",
+#endif
+#ifdef GL_APPLE_client_storage
+ "GL_APPLE_client_storage",
+#endif
+#ifdef GL_APPLE_element_array
+ "GL_APPLE_element_array",
+#endif
+#ifdef GL_APPLE_fence
+ "GL_APPLE_fence",
+#endif
+#ifdef GL_APPLE_float_pixels
+ "GL_APPLE_float_pixels",
+#endif
+#ifdef GL_APPLE_flush_buffer_range
+ "GL_APPLE_flush_buffer_range",
+#endif
+#ifdef GL_APPLE_object_purgeable
+ "GL_APPLE_object_purgeable",
+#endif
+#ifdef GL_APPLE_pixel_buffer
+ "GL_APPLE_pixel_buffer",
+#endif
+#ifdef GL_APPLE_rgb_422
+ "GL_APPLE_rgb_422",
+#endif
+#ifdef GL_APPLE_row_bytes
+ "GL_APPLE_row_bytes",
+#endif
+#ifdef GL_APPLE_specular_vector
+ "GL_APPLE_specular_vector",
+#endif
+#ifdef GL_APPLE_texture_range
+ "GL_APPLE_texture_range",
+#endif
+#ifdef GL_APPLE_transform_hint
+ "GL_APPLE_transform_hint",
+#endif
+#ifdef GL_APPLE_vertex_array_object
+ "GL_APPLE_vertex_array_object",
+#endif
+#ifdef GL_APPLE_vertex_array_range
+ "GL_APPLE_vertex_array_range",
+#endif
+#ifdef GL_APPLE_vertex_program_evaluators
+ "GL_APPLE_vertex_program_evaluators",
+#endif
+#ifdef GL_APPLE_ycbcr_422
+ "GL_APPLE_ycbcr_422",
+#endif
+#ifdef GL_ARB_ES2_compatibility
+ "GL_ARB_ES2_compatibility",
+#endif
+#ifdef GL_ARB_ES3_1_compatibility
+ "GL_ARB_ES3_1_compatibility",
+#endif
+#ifdef GL_ARB_ES3_2_compatibility
+ "GL_ARB_ES3_2_compatibility",
+#endif
+#ifdef GL_ARB_ES3_compatibility
+ "GL_ARB_ES3_compatibility",
+#endif
+#ifdef GL_ARB_arrays_of_arrays
+ "GL_ARB_arrays_of_arrays",
+#endif
+#ifdef GL_ARB_base_instance
+ "GL_ARB_base_instance",
+#endif
+#ifdef GL_ARB_bindless_texture
+ "GL_ARB_bindless_texture",
+#endif
+#ifdef GL_ARB_blend_func_extended
+ "GL_ARB_blend_func_extended",
+#endif
+#ifdef GL_ARB_buffer_storage
+ "GL_ARB_buffer_storage",
+#endif
+#ifdef GL_ARB_cl_event
+ "GL_ARB_cl_event",
+#endif
+#ifdef GL_ARB_clear_buffer_object
+ "GL_ARB_clear_buffer_object",
+#endif
+#ifdef GL_ARB_clear_texture
+ "GL_ARB_clear_texture",
+#endif
+#ifdef GL_ARB_clip_control
+ "GL_ARB_clip_control",
+#endif
+#ifdef GL_ARB_color_buffer_float
+ "GL_ARB_color_buffer_float",
+#endif
+#ifdef GL_ARB_compatibility
+ "GL_ARB_compatibility",
+#endif
+#ifdef GL_ARB_compressed_texture_pixel_storage
+ "GL_ARB_compressed_texture_pixel_storage",
+#endif
+#ifdef GL_ARB_compute_shader
+ "GL_ARB_compute_shader",
+#endif
+#ifdef GL_ARB_compute_variable_group_size
+ "GL_ARB_compute_variable_group_size",
+#endif
+#ifdef GL_ARB_conditional_render_inverted
+ "GL_ARB_conditional_render_inverted",
+#endif
+#ifdef GL_ARB_conservative_depth
+ "GL_ARB_conservative_depth",
+#endif
+#ifdef GL_ARB_copy_buffer
+ "GL_ARB_copy_buffer",
+#endif
+#ifdef GL_ARB_copy_image
+ "GL_ARB_copy_image",
+#endif
+#ifdef GL_ARB_cull_distance
+ "GL_ARB_cull_distance",
+#endif
+#ifdef GL_ARB_debug_output
+ "GL_ARB_debug_output",
+#endif
+#ifdef GL_ARB_depth_buffer_float
+ "GL_ARB_depth_buffer_float",
+#endif
+#ifdef GL_ARB_depth_clamp
+ "GL_ARB_depth_clamp",
+#endif
+#ifdef GL_ARB_depth_texture
+ "GL_ARB_depth_texture",
+#endif
+#ifdef GL_ARB_derivative_control
+ "GL_ARB_derivative_control",
+#endif
+#ifdef GL_ARB_direct_state_access
+ "GL_ARB_direct_state_access",
+#endif
+#ifdef GL_ARB_draw_buffers
+ "GL_ARB_draw_buffers",
+#endif
+#ifdef GL_ARB_draw_buffers_blend
+ "GL_ARB_draw_buffers_blend",
+#endif
+#ifdef GL_ARB_draw_elements_base_vertex
+ "GL_ARB_draw_elements_base_vertex",
+#endif
+#ifdef GL_ARB_draw_indirect
+ "GL_ARB_draw_indirect",
+#endif
+#ifdef GL_ARB_draw_instanced
+ "GL_ARB_draw_instanced",
+#endif
+#ifdef GL_ARB_enhanced_layouts
+ "GL_ARB_enhanced_layouts",
+#endif
+#ifdef GL_ARB_explicit_attrib_location
+ "GL_ARB_explicit_attrib_location",
+#endif
+#ifdef GL_ARB_explicit_uniform_location
+ "GL_ARB_explicit_uniform_location",
+#endif
+#ifdef GL_ARB_fragment_coord_conventions
+ "GL_ARB_fragment_coord_conventions",
+#endif
+#ifdef GL_ARB_fragment_layer_viewport
+ "GL_ARB_fragment_layer_viewport",
+#endif
+#ifdef GL_ARB_fragment_program
+ "GL_ARB_fragment_program",
+#endif
+#ifdef GL_ARB_fragment_program_shadow
+ "GL_ARB_fragment_program_shadow",
+#endif
+#ifdef GL_ARB_fragment_shader
+ "GL_ARB_fragment_shader",
+#endif
+#ifdef GL_ARB_fragment_shader_interlock
+ "GL_ARB_fragment_shader_interlock",
+#endif
+#ifdef GL_ARB_framebuffer_no_attachments
+ "GL_ARB_framebuffer_no_attachments",
+#endif
+#ifdef GL_ARB_framebuffer_object
+ "GL_ARB_framebuffer_object",
+#endif
+#ifdef GL_ARB_framebuffer_sRGB
+ "GL_ARB_framebuffer_sRGB",
+#endif
+#ifdef GL_ARB_geometry_shader4
+ "GL_ARB_geometry_shader4",
+#endif
+#ifdef GL_ARB_get_program_binary
+ "GL_ARB_get_program_binary",
+#endif
+#ifdef GL_ARB_get_texture_sub_image
+ "GL_ARB_get_texture_sub_image",
+#endif
+#ifdef GL_ARB_gl_spirv
+ "GL_ARB_gl_spirv",
+#endif
+#ifdef GL_ARB_gpu_shader5
+ "GL_ARB_gpu_shader5",
+#endif
+#ifdef GL_ARB_gpu_shader_fp64
+ "GL_ARB_gpu_shader_fp64",
+#endif
+#ifdef GL_ARB_gpu_shader_int64
+ "GL_ARB_gpu_shader_int64",
+#endif
+#ifdef GL_ARB_half_float_pixel
+ "GL_ARB_half_float_pixel",
+#endif
+#ifdef GL_ARB_half_float_vertex
+ "GL_ARB_half_float_vertex",
+#endif
+#ifdef GL_ARB_imaging
+ "GL_ARB_imaging",
+#endif
+#ifdef GL_ARB_indirect_parameters
+ "GL_ARB_indirect_parameters",
+#endif
+#ifdef GL_ARB_instanced_arrays
+ "GL_ARB_instanced_arrays",
+#endif
+#ifdef GL_ARB_internalformat_query
+ "GL_ARB_internalformat_query",
+#endif
+#ifdef GL_ARB_internalformat_query2
+ "GL_ARB_internalformat_query2",
+#endif
+#ifdef GL_ARB_invalidate_subdata
+ "GL_ARB_invalidate_subdata",
+#endif
+#ifdef GL_ARB_map_buffer_alignment
+ "GL_ARB_map_buffer_alignment",
+#endif
+#ifdef GL_ARB_map_buffer_range
+ "GL_ARB_map_buffer_range",
+#endif
+#ifdef GL_ARB_matrix_palette
+ "GL_ARB_matrix_palette",
+#endif
+#ifdef GL_ARB_multi_bind
+ "GL_ARB_multi_bind",
+#endif
+#ifdef GL_ARB_multi_draw_indirect
+ "GL_ARB_multi_draw_indirect",
+#endif
+#ifdef GL_ARB_multisample
+ "GL_ARB_multisample",
+#endif
+#ifdef GL_ARB_multitexture
+ "GL_ARB_multitexture",
+#endif
+#ifdef GL_ARB_occlusion_query
+ "GL_ARB_occlusion_query",
+#endif
+#ifdef GL_ARB_occlusion_query2
+ "GL_ARB_occlusion_query2",
+#endif
+#ifdef GL_ARB_parallel_shader_compile
+ "GL_ARB_parallel_shader_compile",
+#endif
+#ifdef GL_ARB_pipeline_statistics_query
+ "GL_ARB_pipeline_statistics_query",
+#endif
+#ifdef GL_ARB_pixel_buffer_object
+ "GL_ARB_pixel_buffer_object",
+#endif
+#ifdef GL_ARB_point_parameters
+ "GL_ARB_point_parameters",
+#endif
+#ifdef GL_ARB_point_sprite
+ "GL_ARB_point_sprite",
+#endif
+#ifdef GL_ARB_post_depth_coverage
+ "GL_ARB_post_depth_coverage",
+#endif
+#ifdef GL_ARB_program_interface_query
+ "GL_ARB_program_interface_query",
+#endif
+#ifdef GL_ARB_provoking_vertex
+ "GL_ARB_provoking_vertex",
+#endif
+#ifdef GL_ARB_query_buffer_object
+ "GL_ARB_query_buffer_object",
+#endif
+#ifdef GL_ARB_robust_buffer_access_behavior
+ "GL_ARB_robust_buffer_access_behavior",
+#endif
+#ifdef GL_ARB_robustness
+ "GL_ARB_robustness",
+#endif
+#ifdef GL_ARB_robustness_application_isolation
+ "GL_ARB_robustness_application_isolation",
+#endif
+#ifdef GL_ARB_robustness_share_group_isolation
+ "GL_ARB_robustness_share_group_isolation",
+#endif
+#ifdef GL_ARB_sample_locations
+ "GL_ARB_sample_locations",
+#endif
+#ifdef GL_ARB_sample_shading
+ "GL_ARB_sample_shading",
+#endif
+#ifdef GL_ARB_sampler_objects
+ "GL_ARB_sampler_objects",
+#endif
+#ifdef GL_ARB_seamless_cube_map
+ "GL_ARB_seamless_cube_map",
+#endif
+#ifdef GL_ARB_seamless_cubemap_per_texture
+ "GL_ARB_seamless_cubemap_per_texture",
+#endif
+#ifdef GL_ARB_separate_shader_objects
+ "GL_ARB_separate_shader_objects",
+#endif
+#ifdef GL_ARB_shader_atomic_counter_ops
+ "GL_ARB_shader_atomic_counter_ops",
+#endif
+#ifdef GL_ARB_shader_atomic_counters
+ "GL_ARB_shader_atomic_counters",
+#endif
+#ifdef GL_ARB_shader_ballot
+ "GL_ARB_shader_ballot",
+#endif
+#ifdef GL_ARB_shader_bit_encoding
+ "GL_ARB_shader_bit_encoding",
+#endif
+#ifdef GL_ARB_shader_clock
+ "GL_ARB_shader_clock",
+#endif
+#ifdef GL_ARB_shader_draw_parameters
+ "GL_ARB_shader_draw_parameters",
+#endif
+#ifdef GL_ARB_shader_group_vote
+ "GL_ARB_shader_group_vote",
+#endif
+#ifdef GL_ARB_shader_image_load_store
+ "GL_ARB_shader_image_load_store",
+#endif
+#ifdef GL_ARB_shader_image_size
+ "GL_ARB_shader_image_size",
+#endif
+#ifdef GL_ARB_shader_objects
+ "GL_ARB_shader_objects",
+#endif
+#ifdef GL_ARB_shader_precision
+ "GL_ARB_shader_precision",
+#endif
+#ifdef GL_ARB_shader_stencil_export
+ "GL_ARB_shader_stencil_export",
+#endif
+#ifdef GL_ARB_shader_storage_buffer_object
+ "GL_ARB_shader_storage_buffer_object",
+#endif
+#ifdef GL_ARB_shader_subroutine
+ "GL_ARB_shader_subroutine",
+#endif
+#ifdef GL_ARB_shader_texture_image_samples
+ "GL_ARB_shader_texture_image_samples",
+#endif
+#ifdef GL_ARB_shader_texture_lod
+ "GL_ARB_shader_texture_lod",
+#endif
+#ifdef GL_ARB_shader_viewport_layer_array
+ "GL_ARB_shader_viewport_layer_array",
+#endif
+#ifdef GL_ARB_shading_language_100
+ "GL_ARB_shading_language_100",
+#endif
+#ifdef GL_ARB_shading_language_420pack
+ "GL_ARB_shading_language_420pack",
+#endif
+#ifdef GL_ARB_shading_language_include
+ "GL_ARB_shading_language_include",
+#endif
+#ifdef GL_ARB_shading_language_packing
+ "GL_ARB_shading_language_packing",
+#endif
+#ifdef GL_ARB_shadow
+ "GL_ARB_shadow",
+#endif
+#ifdef GL_ARB_shadow_ambient
+ "GL_ARB_shadow_ambient",
+#endif
+#ifdef GL_ARB_sparse_buffer
+ "GL_ARB_sparse_buffer",
+#endif
+#ifdef GL_ARB_sparse_texture
+ "GL_ARB_sparse_texture",
+#endif
+#ifdef GL_ARB_sparse_texture2
+ "GL_ARB_sparse_texture2",
+#endif
+#ifdef GL_ARB_sparse_texture_clamp
+ "GL_ARB_sparse_texture_clamp",
+#endif
+#ifdef GL_ARB_stencil_texturing
+ "GL_ARB_stencil_texturing",
+#endif
+#ifdef GL_ARB_sync
+ "GL_ARB_sync",
+#endif
+#ifdef GL_ARB_tessellation_shader
+ "GL_ARB_tessellation_shader",
+#endif
+#ifdef GL_ARB_texture_barrier
+ "GL_ARB_texture_barrier",
+#endif
+#ifdef GL_ARB_texture_border_clamp
+ "GL_ARB_texture_border_clamp",
+#endif
+#ifdef GL_ARB_texture_buffer_object
+ "GL_ARB_texture_buffer_object",
+#endif
+#ifdef GL_ARB_texture_buffer_object_rgb32
+ "GL_ARB_texture_buffer_object_rgb32",
+#endif
+#ifdef GL_ARB_texture_buffer_range
+ "GL_ARB_texture_buffer_range",
+#endif
+#ifdef GL_ARB_texture_compression
+ "GL_ARB_texture_compression",
+#endif
+#ifdef GL_ARB_texture_compression_bptc
+ "GL_ARB_texture_compression_bptc",
+#endif
+#ifdef GL_ARB_texture_compression_rgtc
+ "GL_ARB_texture_compression_rgtc",
+#endif
+#ifdef GL_ARB_texture_cube_map
+ "GL_ARB_texture_cube_map",
+#endif
+#ifdef GL_ARB_texture_cube_map_array
+ "GL_ARB_texture_cube_map_array",
+#endif
+#ifdef GL_ARB_texture_env_add
+ "GL_ARB_texture_env_add",
+#endif
+#ifdef GL_ARB_texture_env_combine
+ "GL_ARB_texture_env_combine",
+#endif
+#ifdef GL_ARB_texture_env_crossbar
+ "GL_ARB_texture_env_crossbar",
+#endif
+#ifdef GL_ARB_texture_env_dot3
+ "GL_ARB_texture_env_dot3",
+#endif
+#ifdef GL_ARB_texture_filter_minmax
+ "GL_ARB_texture_filter_minmax",
+#endif
+#ifdef GL_ARB_texture_float
+ "GL_ARB_texture_float",
+#endif
+#ifdef GL_ARB_texture_gather
+ "GL_ARB_texture_gather",
+#endif
+#ifdef GL_ARB_texture_mirror_clamp_to_edge
+ "GL_ARB_texture_mirror_clamp_to_edge",
+#endif
+#ifdef GL_ARB_texture_mirrored_repeat
+ "GL_ARB_texture_mirrored_repeat",
+#endif
+#ifdef GL_ARB_texture_multisample
+ "GL_ARB_texture_multisample",
+#endif
+#ifdef GL_ARB_texture_non_power_of_two
+ "GL_ARB_texture_non_power_of_two",
+#endif
+#ifdef GL_ARB_texture_query_levels
+ "GL_ARB_texture_query_levels",
+#endif
+#ifdef GL_ARB_texture_query_lod
+ "GL_ARB_texture_query_lod",
+#endif
+#ifdef GL_ARB_texture_rectangle
+ "GL_ARB_texture_rectangle",
+#endif
+#ifdef GL_ARB_texture_rg
+ "GL_ARB_texture_rg",
+#endif
+#ifdef GL_ARB_texture_rgb10_a2ui
+ "GL_ARB_texture_rgb10_a2ui",
+#endif
+#ifdef GL_ARB_texture_stencil8
+ "GL_ARB_texture_stencil8",
+#endif
+#ifdef GL_ARB_texture_storage
+ "GL_ARB_texture_storage",
+#endif
+#ifdef GL_ARB_texture_storage_multisample
+ "GL_ARB_texture_storage_multisample",
+#endif
+#ifdef GL_ARB_texture_swizzle
+ "GL_ARB_texture_swizzle",
+#endif
+#ifdef GL_ARB_texture_view
+ "GL_ARB_texture_view",
+#endif
+#ifdef GL_ARB_timer_query
+ "GL_ARB_timer_query",
+#endif
+#ifdef GL_ARB_transform_feedback2
+ "GL_ARB_transform_feedback2",
+#endif
+#ifdef GL_ARB_transform_feedback3
+ "GL_ARB_transform_feedback3",
+#endif
+#ifdef GL_ARB_transform_feedback_instanced
+ "GL_ARB_transform_feedback_instanced",
+#endif
+#ifdef GL_ARB_transform_feedback_overflow_query
+ "GL_ARB_transform_feedback_overflow_query",
+#endif
+#ifdef GL_ARB_transpose_matrix
+ "GL_ARB_transpose_matrix",
+#endif
+#ifdef GL_ARB_uniform_buffer_object
+ "GL_ARB_uniform_buffer_object",
+#endif
+#ifdef GL_ARB_vertex_array_bgra
+ "GL_ARB_vertex_array_bgra",
+#endif
+#ifdef GL_ARB_vertex_array_object
+ "GL_ARB_vertex_array_object",
+#endif
+#ifdef GL_ARB_vertex_attrib_64bit
+ "GL_ARB_vertex_attrib_64bit",
+#endif
+#ifdef GL_ARB_vertex_attrib_binding
+ "GL_ARB_vertex_attrib_binding",
+#endif
+#ifdef GL_ARB_vertex_blend
+ "GL_ARB_vertex_blend",
+#endif
+#ifdef GL_ARB_vertex_buffer_object
+ "GL_ARB_vertex_buffer_object",
+#endif
+#ifdef GL_ARB_vertex_program
+ "GL_ARB_vertex_program",
+#endif
+#ifdef GL_ARB_vertex_shader
+ "GL_ARB_vertex_shader",
+#endif
+#ifdef GL_ARB_vertex_type_10f_11f_11f_rev
+ "GL_ARB_vertex_type_10f_11f_11f_rev",
+#endif
+#ifdef GL_ARB_vertex_type_2_10_10_10_rev
+ "GL_ARB_vertex_type_2_10_10_10_rev",
+#endif
+#ifdef GL_ARB_viewport_array
+ "GL_ARB_viewport_array",
+#endif
+#ifdef GL_ARB_window_pos
+ "GL_ARB_window_pos",
+#endif
+#ifdef GL_ATIX_point_sprites
+ "GL_ATIX_point_sprites",
+#endif
+#ifdef GL_ATIX_texture_env_combine3
+ "GL_ATIX_texture_env_combine3",
+#endif
+#ifdef GL_ATIX_texture_env_route
+ "GL_ATIX_texture_env_route",
+#endif
+#ifdef GL_ATIX_vertex_shader_output_point_size
+ "GL_ATIX_vertex_shader_output_point_size",
+#endif
+#ifdef GL_ATI_draw_buffers
+ "GL_ATI_draw_buffers",
+#endif
+#ifdef GL_ATI_element_array
+ "GL_ATI_element_array",
+#endif
+#ifdef GL_ATI_envmap_bumpmap
+ "GL_ATI_envmap_bumpmap",
+#endif
+#ifdef GL_ATI_fragment_shader
+ "GL_ATI_fragment_shader",
+#endif
+#ifdef GL_ATI_map_object_buffer
+ "GL_ATI_map_object_buffer",
+#endif
+#ifdef GL_ATI_meminfo
+ "GL_ATI_meminfo",
+#endif
+#ifdef GL_ATI_pn_triangles
+ "GL_ATI_pn_triangles",
+#endif
+#ifdef GL_ATI_separate_stencil
+ "GL_ATI_separate_stencil",
+#endif
+#ifdef GL_ATI_shader_texture_lod
+ "GL_ATI_shader_texture_lod",
+#endif
+#ifdef GL_ATI_text_fragment_shader
+ "GL_ATI_text_fragment_shader",
+#endif
+#ifdef GL_ATI_texture_compression_3dc
+ "GL_ATI_texture_compression_3dc",
+#endif
+#ifdef GL_ATI_texture_env_combine3
+ "GL_ATI_texture_env_combine3",
+#endif
+#ifdef GL_ATI_texture_float
+ "GL_ATI_texture_float",
+#endif
+#ifdef GL_ATI_texture_mirror_once
+ "GL_ATI_texture_mirror_once",
+#endif
+#ifdef GL_ATI_vertex_array_object
+ "GL_ATI_vertex_array_object",
+#endif
+#ifdef GL_ATI_vertex_attrib_array_object
+ "GL_ATI_vertex_attrib_array_object",
+#endif
+#ifdef GL_ATI_vertex_streams
+ "GL_ATI_vertex_streams",
+#endif
+#ifdef GL_EGL_NV_robustness_video_memory_purge
+ "GL_EGL_NV_robustness_video_memory_purge",
+#endif
+#ifdef GL_EXT_422_pixels
+ "GL_EXT_422_pixels",
+#endif
+#ifdef GL_EXT_Cg_shader
+ "GL_EXT_Cg_shader",
+#endif
+#ifdef GL_EXT_abgr
+ "GL_EXT_abgr",
+#endif
+#ifdef GL_EXT_bgra
+ "GL_EXT_bgra",
+#endif
+#ifdef GL_EXT_bindable_uniform
+ "GL_EXT_bindable_uniform",
+#endif
+#ifdef GL_EXT_blend_color
+ "GL_EXT_blend_color",
+#endif
+#ifdef GL_EXT_blend_equation_separate
+ "GL_EXT_blend_equation_separate",
+#endif
+#ifdef GL_EXT_blend_func_separate
+ "GL_EXT_blend_func_separate",
+#endif
+#ifdef GL_EXT_blend_logic_op
+ "GL_EXT_blend_logic_op",
+#endif
+#ifdef GL_EXT_blend_minmax
+ "GL_EXT_blend_minmax",
+#endif
+#ifdef GL_EXT_blend_subtract
+ "GL_EXT_blend_subtract",
+#endif
+#ifdef GL_EXT_clip_volume_hint
+ "GL_EXT_clip_volume_hint",
+#endif
+#ifdef GL_EXT_cmyka
+ "GL_EXT_cmyka",
+#endif
+#ifdef GL_EXT_color_subtable
+ "GL_EXT_color_subtable",
+#endif
+#ifdef GL_EXT_compiled_vertex_array
+ "GL_EXT_compiled_vertex_array",
+#endif
+#ifdef GL_EXT_convolution
+ "GL_EXT_convolution",
+#endif
+#ifdef GL_EXT_coordinate_frame
+ "GL_EXT_coordinate_frame",
+#endif
+#ifdef GL_EXT_copy_texture
+ "GL_EXT_copy_texture",
+#endif
+#ifdef GL_EXT_cull_vertex
+ "GL_EXT_cull_vertex",
+#endif
+#ifdef GL_EXT_debug_label
+ "GL_EXT_debug_label",
+#endif
+#ifdef GL_EXT_debug_marker
+ "GL_EXT_debug_marker",
+#endif
+#ifdef GL_EXT_depth_bounds_test
+ "GL_EXT_depth_bounds_test",
+#endif
+#ifdef GL_EXT_direct_state_access
+ "GL_EXT_direct_state_access",
+#endif
+#ifdef GL_EXT_draw_buffers2
+ "GL_EXT_draw_buffers2",
+#endif
+#ifdef GL_EXT_draw_instanced
+ "GL_EXT_draw_instanced",
+#endif
+#ifdef GL_EXT_draw_range_elements
+ "GL_EXT_draw_range_elements",
+#endif
+#ifdef GL_EXT_fog_coord
+ "GL_EXT_fog_coord",
+#endif
+#ifdef GL_EXT_fragment_lighting
+ "GL_EXT_fragment_lighting",
+#endif
+#ifdef GL_EXT_framebuffer_blit
+ "GL_EXT_framebuffer_blit",
+#endif
+#ifdef GL_EXT_framebuffer_multisample
+ "GL_EXT_framebuffer_multisample",
+#endif
+#ifdef GL_EXT_framebuffer_multisample_blit_scaled
+ "GL_EXT_framebuffer_multisample_blit_scaled",
+#endif
+#ifdef GL_EXT_framebuffer_object
+ "GL_EXT_framebuffer_object",
+#endif
+#ifdef GL_EXT_framebuffer_sRGB
+ "GL_EXT_framebuffer_sRGB",
+#endif
+#ifdef GL_EXT_geometry_shader4
+ "GL_EXT_geometry_shader4",
+#endif
+#ifdef GL_EXT_gpu_program_parameters
+ "GL_EXT_gpu_program_parameters",
+#endif
+#ifdef GL_EXT_gpu_shader4
+ "GL_EXT_gpu_shader4",
+#endif
+#ifdef GL_EXT_histogram
+ "GL_EXT_histogram",
+#endif
+#ifdef GL_EXT_index_array_formats
+ "GL_EXT_index_array_formats",
+#endif
+#ifdef GL_EXT_index_func
+ "GL_EXT_index_func",
+#endif
+#ifdef GL_EXT_index_material
+ "GL_EXT_index_material",
+#endif
+#ifdef GL_EXT_index_texture
+ "GL_EXT_index_texture",
+#endif
+#ifdef GL_EXT_light_texture
+ "GL_EXT_light_texture",
+#endif
+#ifdef GL_EXT_misc_attribute
+ "GL_EXT_misc_attribute",
+#endif
+#ifdef GL_EXT_multi_draw_arrays
+ "GL_EXT_multi_draw_arrays",
+#endif
+#ifdef GL_EXT_multisample
+ "GL_EXT_multisample",
+#endif
+#ifdef GL_EXT_packed_depth_stencil
+ "GL_EXT_packed_depth_stencil",
+#endif
+#ifdef GL_EXT_packed_float
+ "GL_EXT_packed_float",
+#endif
+#ifdef GL_EXT_packed_pixels
+ "GL_EXT_packed_pixels",
+#endif
+#ifdef GL_EXT_paletted_texture
+ "GL_EXT_paletted_texture",
+#endif
+#ifdef GL_EXT_pixel_buffer_object
+ "GL_EXT_pixel_buffer_object",
+#endif
+#ifdef GL_EXT_pixel_transform
+ "GL_EXT_pixel_transform",
+#endif
+#ifdef GL_EXT_pixel_transform_color_table
+ "GL_EXT_pixel_transform_color_table",
+#endif
+#ifdef GL_EXT_point_parameters
+ "GL_EXT_point_parameters",
+#endif
+#ifdef GL_EXT_polygon_offset
+ "GL_EXT_polygon_offset",
+#endif
+#ifdef GL_EXT_polygon_offset_clamp
+ "GL_EXT_polygon_offset_clamp",
+#endif
+#ifdef GL_EXT_post_depth_coverage
+ "GL_EXT_post_depth_coverage",
+#endif
+#ifdef GL_EXT_provoking_vertex
+ "GL_EXT_provoking_vertex",
+#endif
+#ifdef GL_EXT_raster_multisample
+ "GL_EXT_raster_multisample",
+#endif
+#ifdef GL_EXT_rescale_normal
+ "GL_EXT_rescale_normal",
+#endif
+#ifdef GL_EXT_scene_marker
+ "GL_EXT_scene_marker",
+#endif
+#ifdef GL_EXT_secondary_color
+ "GL_EXT_secondary_color",
+#endif
+#ifdef GL_EXT_separate_shader_objects
+ "GL_EXT_separate_shader_objects",
+#endif
+#ifdef GL_EXT_separate_specular_color
+ "GL_EXT_separate_specular_color",
+#endif
+#ifdef GL_EXT_shader_image_load_formatted
+ "GL_EXT_shader_image_load_formatted",
+#endif
+#ifdef GL_EXT_shader_image_load_store
+ "GL_EXT_shader_image_load_store",
+#endif
+#ifdef GL_EXT_shader_integer_mix
+ "GL_EXT_shader_integer_mix",
+#endif
+#ifdef GL_EXT_shadow_funcs
+ "GL_EXT_shadow_funcs",
+#endif
+#ifdef GL_EXT_shared_texture_palette
+ "GL_EXT_shared_texture_palette",
+#endif
+#ifdef GL_EXT_sparse_texture2
+ "GL_EXT_sparse_texture2",
+#endif
+#ifdef GL_EXT_stencil_clear_tag
+ "GL_EXT_stencil_clear_tag",
+#endif
+#ifdef GL_EXT_stencil_two_side
+ "GL_EXT_stencil_two_side",
+#endif
+#ifdef GL_EXT_stencil_wrap
+ "GL_EXT_stencil_wrap",
+#endif
+#ifdef GL_EXT_subtexture
+ "GL_EXT_subtexture",
+#endif
+#ifdef GL_EXT_texture
+ "GL_EXT_texture",
+#endif
+#ifdef GL_EXT_texture3D
+ "GL_EXT_texture3D",
+#endif
+#ifdef GL_EXT_texture_array
+ "GL_EXT_texture_array",
+#endif
+#ifdef GL_EXT_texture_buffer_object
+ "GL_EXT_texture_buffer_object",
+#endif
+#ifdef GL_EXT_texture_compression_dxt1
+ "GL_EXT_texture_compression_dxt1",
+#endif
+#ifdef GL_EXT_texture_compression_latc
+ "GL_EXT_texture_compression_latc",
+#endif
+#ifdef GL_EXT_texture_compression_rgtc
+ "GL_EXT_texture_compression_rgtc",
+#endif
+#ifdef GL_EXT_texture_compression_s3tc
+ "GL_EXT_texture_compression_s3tc",
+#endif
+#ifdef GL_EXT_texture_cube_map
+ "GL_EXT_texture_cube_map",
+#endif
+#ifdef GL_EXT_texture_edge_clamp
+ "GL_EXT_texture_edge_clamp",
+#endif
+#ifdef GL_EXT_texture_env
+ "GL_EXT_texture_env",
+#endif
+#ifdef GL_EXT_texture_env_add
+ "GL_EXT_texture_env_add",
+#endif
+#ifdef GL_EXT_texture_env_combine
+ "GL_EXT_texture_env_combine",
+#endif
+#ifdef GL_EXT_texture_env_dot3
+ "GL_EXT_texture_env_dot3",
+#endif
+#ifdef GL_EXT_texture_filter_anisotropic
+ "GL_EXT_texture_filter_anisotropic",
+#endif
+#ifdef GL_EXT_texture_filter_minmax
+ "GL_EXT_texture_filter_minmax",
+#endif
+#ifdef GL_EXT_texture_integer
+ "GL_EXT_texture_integer",
+#endif
+#ifdef GL_EXT_texture_lod_bias
+ "GL_EXT_texture_lod_bias",
+#endif
+#ifdef GL_EXT_texture_mirror_clamp
+ "GL_EXT_texture_mirror_clamp",
+#endif
+#ifdef GL_EXT_texture_object
+ "GL_EXT_texture_object",
+#endif
+#ifdef GL_EXT_texture_perturb_normal
+ "GL_EXT_texture_perturb_normal",
+#endif
+#ifdef GL_EXT_texture_rectangle
+ "GL_EXT_texture_rectangle",
+#endif
+#ifdef GL_EXT_texture_sRGB
+ "GL_EXT_texture_sRGB",
+#endif
+#ifdef GL_EXT_texture_sRGB_decode
+ "GL_EXT_texture_sRGB_decode",
+#endif
+#ifdef GL_EXT_texture_shared_exponent
+ "GL_EXT_texture_shared_exponent",
+#endif
+#ifdef GL_EXT_texture_snorm
+ "GL_EXT_texture_snorm",
+#endif
+#ifdef GL_EXT_texture_swizzle
+ "GL_EXT_texture_swizzle",
+#endif
+#ifdef GL_EXT_timer_query
+ "GL_EXT_timer_query",
+#endif
+#ifdef GL_EXT_transform_feedback
+ "GL_EXT_transform_feedback",
+#endif
+#ifdef GL_EXT_vertex_array
+ "GL_EXT_vertex_array",
+#endif
+#ifdef GL_EXT_vertex_array_bgra
+ "GL_EXT_vertex_array_bgra",
+#endif
+#ifdef GL_EXT_vertex_attrib_64bit
+ "GL_EXT_vertex_attrib_64bit",
+#endif
+#ifdef GL_EXT_vertex_shader
+ "GL_EXT_vertex_shader",
+#endif
+#ifdef GL_EXT_vertex_weighting
+ "GL_EXT_vertex_weighting",
+#endif
+#ifdef GL_EXT_window_rectangles
+ "GL_EXT_window_rectangles",
+#endif
+#ifdef GL_EXT_x11_sync_object
+ "GL_EXT_x11_sync_object",
+#endif
+#ifdef GL_GREMEDY_frame_terminator
+ "GL_GREMEDY_frame_terminator",
+#endif
+#ifdef GL_GREMEDY_string_marker
+ "GL_GREMEDY_string_marker",
+#endif
+#ifdef GL_HP_convolution_border_modes
+ "GL_HP_convolution_border_modes",
+#endif
+#ifdef GL_HP_image_transform
+ "GL_HP_image_transform",
+#endif
+#ifdef GL_HP_occlusion_test
+ "GL_HP_occlusion_test",
+#endif
+#ifdef GL_HP_texture_lighting
+ "GL_HP_texture_lighting",
+#endif
+#ifdef GL_IBM_cull_vertex
+ "GL_IBM_cull_vertex",
+#endif
+#ifdef GL_IBM_multimode_draw_arrays
+ "GL_IBM_multimode_draw_arrays",
+#endif
+#ifdef GL_IBM_rasterpos_clip
+ "GL_IBM_rasterpos_clip",
+#endif
+#ifdef GL_IBM_static_data
+ "GL_IBM_static_data",
+#endif
+#ifdef GL_IBM_texture_mirrored_repeat
+ "GL_IBM_texture_mirrored_repeat",
+#endif
+#ifdef GL_IBM_vertex_array_lists
+ "GL_IBM_vertex_array_lists",
+#endif
+#ifdef GL_INGR_color_clamp
+ "GL_INGR_color_clamp",
+#endif
+#ifdef GL_INGR_interlace_read
+ "GL_INGR_interlace_read",
+#endif
+#ifdef GL_INTEL_conservative_rasterization
+ "GL_INTEL_conservative_rasterization",
+#endif
+#ifdef GL_INTEL_fragment_shader_ordering
+ "GL_INTEL_fragment_shader_ordering",
+#endif
+#ifdef GL_INTEL_framebuffer_CMAA
+ "GL_INTEL_framebuffer_CMAA",
+#endif
+#ifdef GL_INTEL_map_texture
+ "GL_INTEL_map_texture",
+#endif
+#ifdef GL_INTEL_parallel_arrays
+ "GL_INTEL_parallel_arrays",
+#endif
+#ifdef GL_INTEL_performance_query
+ "GL_INTEL_performance_query",
+#endif
+#ifdef GL_INTEL_texture_scissor
+ "GL_INTEL_texture_scissor",
+#endif
+#ifdef GL_KHR_blend_equation_advanced
+ "GL_KHR_blend_equation_advanced",
+#endif
+#ifdef GL_KHR_blend_equation_advanced_coherent
+ "GL_KHR_blend_equation_advanced_coherent",
+#endif
+#ifdef GL_KHR_context_flush_control
+ "GL_KHR_context_flush_control",
+#endif
+#ifdef GL_KHR_debug
+ "GL_KHR_debug",
+#endif
+#ifdef GL_KHR_no_error
+ "GL_KHR_no_error",
+#endif
+#ifdef GL_KHR_robust_buffer_access_behavior
+ "GL_KHR_robust_buffer_access_behavior",
+#endif
+#ifdef GL_KHR_robustness
+ "GL_KHR_robustness",
+#endif
+#ifdef GL_KHR_texture_compression_astc_hdr
+ "GL_KHR_texture_compression_astc_hdr",
+#endif
+#ifdef GL_KHR_texture_compression_astc_ldr
+ "GL_KHR_texture_compression_astc_ldr",
+#endif
+#ifdef GL_KHR_texture_compression_astc_sliced_3d
+ "GL_KHR_texture_compression_astc_sliced_3d",
+#endif
+#ifdef GL_KTX_buffer_region
+ "GL_KTX_buffer_region",
+#endif
+#ifdef GL_MESAX_texture_stack
+ "GL_MESAX_texture_stack",
+#endif
+#ifdef GL_MESA_pack_invert
+ "GL_MESA_pack_invert",
+#endif
+#ifdef GL_MESA_resize_buffers
+ "GL_MESA_resize_buffers",
+#endif
+#ifdef GL_MESA_shader_integer_functions
+ "GL_MESA_shader_integer_functions",
+#endif
+#ifdef GL_MESA_window_pos
+ "GL_MESA_window_pos",
+#endif
+#ifdef GL_MESA_ycbcr_texture
+ "GL_MESA_ycbcr_texture",
+#endif
+#ifdef GL_NVX_blend_equation_advanced_multi_draw_buffers
+ "GL_NVX_blend_equation_advanced_multi_draw_buffers",
+#endif
+#ifdef GL_NVX_conditional_render
+ "GL_NVX_conditional_render",
+#endif
+#ifdef GL_NVX_gpu_memory_info
+ "GL_NVX_gpu_memory_info",
+#endif
+#ifdef GL_NVX_linked_gpu_multicast
+ "GL_NVX_linked_gpu_multicast",
+#endif
+#ifdef GL_NV_bindless_multi_draw_indirect
+ "GL_NV_bindless_multi_draw_indirect",
+#endif
+#ifdef GL_NV_bindless_multi_draw_indirect_count
+ "GL_NV_bindless_multi_draw_indirect_count",
+#endif
+#ifdef GL_NV_bindless_texture
+ "GL_NV_bindless_texture",
+#endif
+#ifdef GL_NV_blend_equation_advanced
+ "GL_NV_blend_equation_advanced",
+#endif
+#ifdef GL_NV_blend_equation_advanced_coherent
+ "GL_NV_blend_equation_advanced_coherent",
+#endif
+#ifdef GL_NV_blend_square
+ "GL_NV_blend_square",
+#endif
+#ifdef GL_NV_clip_space_w_scaling
+ "GL_NV_clip_space_w_scaling",
+#endif
+#ifdef GL_NV_command_list
+ "GL_NV_command_list",
+#endif
+#ifdef GL_NV_compute_program5
+ "GL_NV_compute_program5",
+#endif
+#ifdef GL_NV_conditional_render
+ "GL_NV_conditional_render",
+#endif
+#ifdef GL_NV_conservative_raster
+ "GL_NV_conservative_raster",
+#endif
+#ifdef GL_NV_conservative_raster_dilate
+ "GL_NV_conservative_raster_dilate",
+#endif
+#ifdef GL_NV_conservative_raster_pre_snap_triangles
+ "GL_NV_conservative_raster_pre_snap_triangles",
+#endif
+#ifdef GL_NV_copy_depth_to_color
+ "GL_NV_copy_depth_to_color",
+#endif
+#ifdef GL_NV_copy_image
+ "GL_NV_copy_image",
+#endif
+#ifdef GL_NV_deep_texture3D
+ "GL_NV_deep_texture3D",
+#endif
+#ifdef GL_NV_depth_buffer_float
+ "GL_NV_depth_buffer_float",
+#endif
+#ifdef GL_NV_depth_clamp
+ "GL_NV_depth_clamp",
+#endif
+#ifdef GL_NV_depth_range_unclamped
+ "GL_NV_depth_range_unclamped",
+#endif
+#ifdef GL_NV_draw_texture
+ "GL_NV_draw_texture",
+#endif
+#ifdef GL_NV_draw_vulkan_image
+ "GL_NV_draw_vulkan_image",
+#endif
+#ifdef GL_NV_evaluators
+ "GL_NV_evaluators",
+#endif
+#ifdef GL_NV_explicit_multisample
+ "GL_NV_explicit_multisample",
+#endif
+#ifdef GL_NV_fence
+ "GL_NV_fence",
+#endif
+#ifdef GL_NV_fill_rectangle
+ "GL_NV_fill_rectangle",
+#endif
+#ifdef GL_NV_float_buffer
+ "GL_NV_float_buffer",
+#endif
+#ifdef GL_NV_fog_distance
+ "GL_NV_fog_distance",
+#endif
+#ifdef GL_NV_fragment_coverage_to_color
+ "GL_NV_fragment_coverage_to_color",
+#endif
+#ifdef GL_NV_fragment_program
+ "GL_NV_fragment_program",
+#endif
+#ifdef GL_NV_fragment_program2
+ "GL_NV_fragment_program2",
+#endif
+#ifdef GL_NV_fragment_program4
+ "GL_NV_fragment_program4",
+#endif
+#ifdef GL_NV_fragment_program_option
+ "GL_NV_fragment_program_option",
+#endif
+#ifdef GL_NV_fragment_shader_interlock
+ "GL_NV_fragment_shader_interlock",
+#endif
+#ifdef GL_NV_framebuffer_mixed_samples
+ "GL_NV_framebuffer_mixed_samples",
+#endif
+#ifdef GL_NV_framebuffer_multisample_coverage
+ "GL_NV_framebuffer_multisample_coverage",
+#endif
+#ifdef GL_NV_geometry_program4
+ "GL_NV_geometry_program4",
+#endif
+#ifdef GL_NV_geometry_shader4
+ "GL_NV_geometry_shader4",
+#endif
+#ifdef GL_NV_geometry_shader_passthrough
+ "GL_NV_geometry_shader_passthrough",
+#endif
+#ifdef GL_NV_gpu_multicast
+ "GL_NV_gpu_multicast",
+#endif
+#ifdef GL_NV_gpu_program4
+ "GL_NV_gpu_program4",
+#endif
+#ifdef GL_NV_gpu_program5
+ "GL_NV_gpu_program5",
+#endif
+#ifdef GL_NV_gpu_program5_mem_extended
+ "GL_NV_gpu_program5_mem_extended",
+#endif
+#ifdef GL_NV_gpu_program_fp64
+ "GL_NV_gpu_program_fp64",
+#endif
+#ifdef GL_NV_gpu_shader5
+ "GL_NV_gpu_shader5",
+#endif
+#ifdef GL_NV_half_float
+ "GL_NV_half_float",
+#endif
+#ifdef GL_NV_internalformat_sample_query
+ "GL_NV_internalformat_sample_query",
+#endif
+#ifdef GL_NV_light_max_exponent
+ "GL_NV_light_max_exponent",
+#endif
+#ifdef GL_NV_multisample_coverage
+ "GL_NV_multisample_coverage",
+#endif
+#ifdef GL_NV_multisample_filter_hint
+ "GL_NV_multisample_filter_hint",
+#endif
+#ifdef GL_NV_occlusion_query
+ "GL_NV_occlusion_query",
+#endif
+#ifdef GL_NV_packed_depth_stencil
+ "GL_NV_packed_depth_stencil",
+#endif
+#ifdef GL_NV_parameter_buffer_object
+ "GL_NV_parameter_buffer_object",
+#endif
+#ifdef GL_NV_parameter_buffer_object2
+ "GL_NV_parameter_buffer_object2",
+#endif
+#ifdef GL_NV_path_rendering
+ "GL_NV_path_rendering",
+#endif
+#ifdef GL_NV_path_rendering_shared_edge
+ "GL_NV_path_rendering_shared_edge",
+#endif
+#ifdef GL_NV_pixel_data_range
+ "GL_NV_pixel_data_range",
+#endif
+#ifdef GL_NV_point_sprite
+ "GL_NV_point_sprite",
+#endif
+#ifdef GL_NV_present_video
+ "GL_NV_present_video",
+#endif
+#ifdef GL_NV_primitive_restart
+ "GL_NV_primitive_restart",
+#endif
+#ifdef GL_NV_register_combiners
+ "GL_NV_register_combiners",
+#endif
+#ifdef GL_NV_register_combiners2
+ "GL_NV_register_combiners2",
+#endif
+#ifdef GL_NV_robustness_video_memory_purge
+ "GL_NV_robustness_video_memory_purge",
+#endif
+#ifdef GL_NV_sample_locations
+ "GL_NV_sample_locations",
+#endif
+#ifdef GL_NV_sample_mask_override_coverage
+ "GL_NV_sample_mask_override_coverage",
+#endif
+#ifdef GL_NV_shader_atomic_counters
+ "GL_NV_shader_atomic_counters",
+#endif
+#ifdef GL_NV_shader_atomic_float
+ "GL_NV_shader_atomic_float",
+#endif
+#ifdef GL_NV_shader_atomic_float64
+ "GL_NV_shader_atomic_float64",
+#endif
+#ifdef GL_NV_shader_atomic_fp16_vector
+ "GL_NV_shader_atomic_fp16_vector",
+#endif
+#ifdef GL_NV_shader_atomic_int64
+ "GL_NV_shader_atomic_int64",
+#endif
+#ifdef GL_NV_shader_buffer_load
+ "GL_NV_shader_buffer_load",
+#endif
+#ifdef GL_NV_shader_storage_buffer_object
+ "GL_NV_shader_storage_buffer_object",
+#endif
+#ifdef GL_NV_shader_thread_group
+ "GL_NV_shader_thread_group",
+#endif
+#ifdef GL_NV_shader_thread_shuffle
+ "GL_NV_shader_thread_shuffle",
+#endif
+#ifdef GL_NV_stereo_view_rendering
+ "GL_NV_stereo_view_rendering",
+#endif
+#ifdef GL_NV_tessellation_program5
+ "GL_NV_tessellation_program5",
+#endif
+#ifdef GL_NV_texgen_emboss
+ "GL_NV_texgen_emboss",
+#endif
+#ifdef GL_NV_texgen_reflection
+ "GL_NV_texgen_reflection",
+#endif
+#ifdef GL_NV_texture_barrier
+ "GL_NV_texture_barrier",
+#endif
+#ifdef GL_NV_texture_compression_vtc
+ "GL_NV_texture_compression_vtc",
+#endif
+#ifdef GL_NV_texture_env_combine4
+ "GL_NV_texture_env_combine4",
+#endif
+#ifdef GL_NV_texture_expand_normal
+ "GL_NV_texture_expand_normal",
+#endif
+#ifdef GL_NV_texture_multisample
+ "GL_NV_texture_multisample",
+#endif
+#ifdef GL_NV_texture_rectangle
+ "GL_NV_texture_rectangle",
+#endif
+#ifdef GL_NV_texture_shader
+ "GL_NV_texture_shader",
+#endif
+#ifdef GL_NV_texture_shader2
+ "GL_NV_texture_shader2",
+#endif
+#ifdef GL_NV_texture_shader3
+ "GL_NV_texture_shader3",
+#endif
+#ifdef GL_NV_transform_feedback
+ "GL_NV_transform_feedback",
+#endif
+#ifdef GL_NV_transform_feedback2
+ "GL_NV_transform_feedback2",
+#endif
+#ifdef GL_NV_uniform_buffer_unified_memory
+ "GL_NV_uniform_buffer_unified_memory",
+#endif
+#ifdef GL_NV_vdpau_interop
+ "GL_NV_vdpau_interop",
+#endif
+#ifdef GL_NV_vertex_array_range
+ "GL_NV_vertex_array_range",
+#endif
+#ifdef GL_NV_vertex_array_range2
+ "GL_NV_vertex_array_range2",
+#endif
+#ifdef GL_NV_vertex_attrib_integer_64bit
+ "GL_NV_vertex_attrib_integer_64bit",
+#endif
+#ifdef GL_NV_vertex_buffer_unified_memory
+ "GL_NV_vertex_buffer_unified_memory",
+#endif
+#ifdef GL_NV_vertex_program
+ "GL_NV_vertex_program",
+#endif
+#ifdef GL_NV_vertex_program1_1
+ "GL_NV_vertex_program1_1",
+#endif
+#ifdef GL_NV_vertex_program2
+ "GL_NV_vertex_program2",
+#endif
+#ifdef GL_NV_vertex_program2_option
+ "GL_NV_vertex_program2_option",
+#endif
+#ifdef GL_NV_vertex_program3
+ "GL_NV_vertex_program3",
+#endif
+#ifdef GL_NV_vertex_program4
+ "GL_NV_vertex_program4",
+#endif
+#ifdef GL_NV_video_capture
+ "GL_NV_video_capture",
+#endif
+#ifdef GL_NV_viewport_array2
+ "GL_NV_viewport_array2",
+#endif
+#ifdef GL_NV_viewport_swizzle
+ "GL_NV_viewport_swizzle",
+#endif
+#ifdef GL_OES_byte_coordinates
+ "GL_OES_byte_coordinates",
+#endif
+#ifdef GL_OES_compressed_paletted_texture
+ "GL_OES_compressed_paletted_texture",
+#endif
+#ifdef GL_OES_read_format
+ "GL_OES_read_format",
+#endif
+#ifdef GL_OES_single_precision
+ "GL_OES_single_precision",
+#endif
+#ifdef GL_OML_interlace
+ "GL_OML_interlace",
+#endif
+#ifdef GL_OML_resample
+ "GL_OML_resample",
+#endif
+#ifdef GL_OML_subsample
+ "GL_OML_subsample",
+#endif
+#ifdef GL_OVR_multiview
+ "GL_OVR_multiview",
+#endif
+#ifdef GL_OVR_multiview2
+ "GL_OVR_multiview2",
+#endif
+#ifdef GL_PGI_misc_hints
+ "GL_PGI_misc_hints",
+#endif
+#ifdef GL_PGI_vertex_hints
+ "GL_PGI_vertex_hints",
+#endif
+#ifdef GL_REGAL_ES1_0_compatibility
+ "GL_REGAL_ES1_0_compatibility",
+#endif
+#ifdef GL_REGAL_ES1_1_compatibility
+ "GL_REGAL_ES1_1_compatibility",
+#endif
+#ifdef GL_REGAL_enable
+ "GL_REGAL_enable",
+#endif
+#ifdef GL_REGAL_error_string
+ "GL_REGAL_error_string",
+#endif
+#ifdef GL_REGAL_extension_query
+ "GL_REGAL_extension_query",
+#endif
+#ifdef GL_REGAL_log
+ "GL_REGAL_log",
+#endif
+#ifdef GL_REGAL_proc_address
+ "GL_REGAL_proc_address",
+#endif
+#ifdef GL_REND_screen_coordinates
+ "GL_REND_screen_coordinates",
+#endif
+#ifdef GL_S3_s3tc
+ "GL_S3_s3tc",
+#endif
+#ifdef GL_SGIS_color_range
+ "GL_SGIS_color_range",
+#endif
+#ifdef GL_SGIS_detail_texture
+ "GL_SGIS_detail_texture",
+#endif
+#ifdef GL_SGIS_fog_function
+ "GL_SGIS_fog_function",
+#endif
+#ifdef GL_SGIS_generate_mipmap
+ "GL_SGIS_generate_mipmap",
+#endif
+#ifdef GL_SGIS_multisample
+ "GL_SGIS_multisample",
+#endif
+#ifdef GL_SGIS_pixel_texture
+ "GL_SGIS_pixel_texture",
+#endif
+#ifdef GL_SGIS_point_line_texgen
+ "GL_SGIS_point_line_texgen",
+#endif
+#ifdef GL_SGIS_sharpen_texture
+ "GL_SGIS_sharpen_texture",
+#endif
+#ifdef GL_SGIS_texture4D
+ "GL_SGIS_texture4D",
+#endif
+#ifdef GL_SGIS_texture_border_clamp
+ "GL_SGIS_texture_border_clamp",
+#endif
+#ifdef GL_SGIS_texture_edge_clamp
+ "GL_SGIS_texture_edge_clamp",
+#endif
+#ifdef GL_SGIS_texture_filter4
+ "GL_SGIS_texture_filter4",
+#endif
+#ifdef GL_SGIS_texture_lod
+ "GL_SGIS_texture_lod",
+#endif
+#ifdef GL_SGIS_texture_select
+ "GL_SGIS_texture_select",
+#endif
+#ifdef GL_SGIX_async
+ "GL_SGIX_async",
+#endif
+#ifdef GL_SGIX_async_histogram
+ "GL_SGIX_async_histogram",
+#endif
+#ifdef GL_SGIX_async_pixel
+ "GL_SGIX_async_pixel",
+#endif
+#ifdef GL_SGIX_blend_alpha_minmax
+ "GL_SGIX_blend_alpha_minmax",
+#endif
+#ifdef GL_SGIX_clipmap
+ "GL_SGIX_clipmap",
+#endif
+#ifdef GL_SGIX_convolution_accuracy
+ "GL_SGIX_convolution_accuracy",
+#endif
+#ifdef GL_SGIX_depth_texture
+ "GL_SGIX_depth_texture",
+#endif
+#ifdef GL_SGIX_flush_raster
+ "GL_SGIX_flush_raster",
+#endif
+#ifdef GL_SGIX_fog_offset
+ "GL_SGIX_fog_offset",
+#endif
+#ifdef GL_SGIX_fog_texture
+ "GL_SGIX_fog_texture",
+#endif
+#ifdef GL_SGIX_fragment_specular_lighting
+ "GL_SGIX_fragment_specular_lighting",
+#endif
+#ifdef GL_SGIX_framezoom
+ "GL_SGIX_framezoom",
+#endif
+#ifdef GL_SGIX_interlace
+ "GL_SGIX_interlace",
+#endif
+#ifdef GL_SGIX_ir_instrument1
+ "GL_SGIX_ir_instrument1",
+#endif
+#ifdef GL_SGIX_list_priority
+ "GL_SGIX_list_priority",
+#endif
+#ifdef GL_SGIX_pixel_texture
+ "GL_SGIX_pixel_texture",
+#endif
+#ifdef GL_SGIX_pixel_texture_bits
+ "GL_SGIX_pixel_texture_bits",
+#endif
+#ifdef GL_SGIX_reference_plane
+ "GL_SGIX_reference_plane",
+#endif
+#ifdef GL_SGIX_resample
+ "GL_SGIX_resample",
+#endif
+#ifdef GL_SGIX_shadow
+ "GL_SGIX_shadow",
+#endif
+#ifdef GL_SGIX_shadow_ambient
+ "GL_SGIX_shadow_ambient",
+#endif
+#ifdef GL_SGIX_sprite
+ "GL_SGIX_sprite",
+#endif
+#ifdef GL_SGIX_tag_sample_buffer
+ "GL_SGIX_tag_sample_buffer",
+#endif
+#ifdef GL_SGIX_texture_add_env
+ "GL_SGIX_texture_add_env",
+#endif
+#ifdef GL_SGIX_texture_coordinate_clamp
+ "GL_SGIX_texture_coordinate_clamp",
+#endif
+#ifdef GL_SGIX_texture_lod_bias
+ "GL_SGIX_texture_lod_bias",
+#endif
+#ifdef GL_SGIX_texture_multi_buffer
+ "GL_SGIX_texture_multi_buffer",
+#endif
+#ifdef GL_SGIX_texture_range
+ "GL_SGIX_texture_range",
+#endif
+#ifdef GL_SGIX_texture_scale_bias
+ "GL_SGIX_texture_scale_bias",
+#endif
+#ifdef GL_SGIX_vertex_preclip
+ "GL_SGIX_vertex_preclip",
+#endif
+#ifdef GL_SGIX_vertex_preclip_hint
+ "GL_SGIX_vertex_preclip_hint",
+#endif
+#ifdef GL_SGIX_ycrcb
+ "GL_SGIX_ycrcb",
+#endif
+#ifdef GL_SGI_color_matrix
+ "GL_SGI_color_matrix",
+#endif
+#ifdef GL_SGI_color_table
+ "GL_SGI_color_table",
+#endif
+#ifdef GL_SGI_texture_color_table
+ "GL_SGI_texture_color_table",
+#endif
+#ifdef GL_SUNX_constant_data
+ "GL_SUNX_constant_data",
+#endif
+#ifdef GL_SUN_convolution_border_modes
+ "GL_SUN_convolution_border_modes",
+#endif
+#ifdef GL_SUN_global_alpha
+ "GL_SUN_global_alpha",
+#endif
+#ifdef GL_SUN_mesh_array
+ "GL_SUN_mesh_array",
+#endif
+#ifdef GL_SUN_read_video_pixels
+ "GL_SUN_read_video_pixels",
+#endif
+#ifdef GL_SUN_slice_accum
+ "GL_SUN_slice_accum",
+#endif
+#ifdef GL_SUN_triangle_list
+ "GL_SUN_triangle_list",
+#endif
+#ifdef GL_SUN_vertex
+ "GL_SUN_vertex",
+#endif
+#ifdef GL_WIN_phong_shading
+ "GL_WIN_phong_shading",
+#endif
+#ifdef GL_WIN_specular_fog
+ "GL_WIN_specular_fog",
+#endif
+#ifdef GL_WIN_swap_hint
+ "GL_WIN_swap_hint",
+#endif
+ NULL
+};
+
+/* Detected in the extension string or strings */
+static GLboolean _glewExtensionString[603];
+/* Detected via extension string or experimental mode */
+static GLboolean* _glewExtensionEnabled[] = {
+#ifdef GL_VERSION_1_2
+ &__GLEW_VERSION_1_2,
+#endif
+#ifdef GL_VERSION_1_2_1
+ &__GLEW_VERSION_1_2_1,
+#endif
+#ifdef GL_VERSION_1_3
+ &__GLEW_VERSION_1_3,
+#endif
+#ifdef GL_VERSION_1_4
+ &__GLEW_VERSION_1_4,
+#endif
+#ifdef GL_VERSION_1_5
+ &__GLEW_VERSION_1_5,
+#endif
+#ifdef GL_VERSION_2_0
+ &__GLEW_VERSION_2_0,
+#endif
+#ifdef GL_VERSION_2_1
+ &__GLEW_VERSION_2_1,
+#endif
+#ifdef GL_VERSION_3_0
+ &__GLEW_VERSION_3_0,
+#endif
+#ifdef GL_VERSION_3_1
+ &__GLEW_VERSION_3_1,
+#endif
+#ifdef GL_VERSION_3_2
+ &__GLEW_VERSION_3_2,
+#endif
+#ifdef GL_VERSION_3_3
+ &__GLEW_VERSION_3_3,
+#endif
+#ifdef GL_VERSION_4_0
+ &__GLEW_VERSION_4_0,
+#endif
+#ifdef GL_VERSION_4_1
+ &__GLEW_VERSION_4_1,
+#endif
+#ifdef GL_VERSION_4_2
+ &__GLEW_VERSION_4_2,
+#endif
+#ifdef GL_VERSION_4_3
+ &__GLEW_VERSION_4_3,
+#endif
+#ifdef GL_VERSION_4_4
+ &__GLEW_VERSION_4_4,
+#endif
+#ifdef GL_VERSION_4_5
+ &__GLEW_VERSION_4_5,
+#endif
+#ifdef GL_3DFX_multisample
+ &__GLEW_3DFX_multisample,
+#endif
+#ifdef GL_3DFX_tbuffer
+ &__GLEW_3DFX_tbuffer,
+#endif
+#ifdef GL_3DFX_texture_compression_FXT1
+ &__GLEW_3DFX_texture_compression_FXT1,
+#endif
+#ifdef GL_AMD_blend_minmax_factor
+ &__GLEW_AMD_blend_minmax_factor,
+#endif
+#ifdef GL_AMD_conservative_depth
+ &__GLEW_AMD_conservative_depth,
+#endif
+#ifdef GL_AMD_debug_output
+ &__GLEW_AMD_debug_output,
+#endif
+#ifdef GL_AMD_depth_clamp_separate
+ &__GLEW_AMD_depth_clamp_separate,
+#endif
+#ifdef GL_AMD_draw_buffers_blend
+ &__GLEW_AMD_draw_buffers_blend,
+#endif
+#ifdef GL_AMD_gcn_shader
+ &__GLEW_AMD_gcn_shader,
+#endif
+#ifdef GL_AMD_gpu_shader_int64
+ &__GLEW_AMD_gpu_shader_int64,
+#endif
+#ifdef GL_AMD_interleaved_elements
+ &__GLEW_AMD_interleaved_elements,
+#endif
+#ifdef GL_AMD_multi_draw_indirect
+ &__GLEW_AMD_multi_draw_indirect,
+#endif
+#ifdef GL_AMD_name_gen_delete
+ &__GLEW_AMD_name_gen_delete,
+#endif
+#ifdef GL_AMD_occlusion_query_event
+ &__GLEW_AMD_occlusion_query_event,
+#endif
+#ifdef GL_AMD_performance_monitor
+ &__GLEW_AMD_performance_monitor,
+#endif
+#ifdef GL_AMD_pinned_memory
+ &__GLEW_AMD_pinned_memory,
+#endif
+#ifdef GL_AMD_query_buffer_object
+ &__GLEW_AMD_query_buffer_object,
+#endif
+#ifdef GL_AMD_sample_positions
+ &__GLEW_AMD_sample_positions,
+#endif
+#ifdef GL_AMD_seamless_cubemap_per_texture
+ &__GLEW_AMD_seamless_cubemap_per_texture,
+#endif
+#ifdef GL_AMD_shader_atomic_counter_ops
+ &__GLEW_AMD_shader_atomic_counter_ops,
+#endif
+#ifdef GL_AMD_shader_explicit_vertex_parameter
+ &__GLEW_AMD_shader_explicit_vertex_parameter,
+#endif
+#ifdef GL_AMD_shader_stencil_export
+ &__GLEW_AMD_shader_stencil_export,
+#endif
+#ifdef GL_AMD_shader_stencil_value_export
+ &__GLEW_AMD_shader_stencil_value_export,
+#endif
+#ifdef GL_AMD_shader_trinary_minmax
+ &__GLEW_AMD_shader_trinary_minmax,
+#endif
+#ifdef GL_AMD_sparse_texture
+ &__GLEW_AMD_sparse_texture,
+#endif
+#ifdef GL_AMD_stencil_operation_extended
+ &__GLEW_AMD_stencil_operation_extended,
+#endif
+#ifdef GL_AMD_texture_texture4
+ &__GLEW_AMD_texture_texture4,
+#endif
+#ifdef GL_AMD_transform_feedback3_lines_triangles
+ &__GLEW_AMD_transform_feedback3_lines_triangles,
+#endif
+#ifdef GL_AMD_transform_feedback4
+ &__GLEW_AMD_transform_feedback4,
+#endif
+#ifdef GL_AMD_vertex_shader_layer
+ &__GLEW_AMD_vertex_shader_layer,
+#endif
+#ifdef GL_AMD_vertex_shader_tessellator
+ &__GLEW_AMD_vertex_shader_tessellator,
+#endif
+#ifdef GL_AMD_vertex_shader_viewport_index
+ &__GLEW_AMD_vertex_shader_viewport_index,
+#endif
+#ifdef GL_ANGLE_depth_texture
+ &__GLEW_ANGLE_depth_texture,
+#endif
+#ifdef GL_ANGLE_framebuffer_blit
+ &__GLEW_ANGLE_framebuffer_blit,
+#endif
+#ifdef GL_ANGLE_framebuffer_multisample
+ &__GLEW_ANGLE_framebuffer_multisample,
+#endif
+#ifdef GL_ANGLE_instanced_arrays
+ &__GLEW_ANGLE_instanced_arrays,
+#endif
+#ifdef GL_ANGLE_pack_reverse_row_order
+ &__GLEW_ANGLE_pack_reverse_row_order,
+#endif
+#ifdef GL_ANGLE_program_binary
+ &__GLEW_ANGLE_program_binary,
+#endif
+#ifdef GL_ANGLE_texture_compression_dxt1
+ &__GLEW_ANGLE_texture_compression_dxt1,
+#endif
+#ifdef GL_ANGLE_texture_compression_dxt3
+ &__GLEW_ANGLE_texture_compression_dxt3,
+#endif
+#ifdef GL_ANGLE_texture_compression_dxt5
+ &__GLEW_ANGLE_texture_compression_dxt5,
+#endif
+#ifdef GL_ANGLE_texture_usage
+ &__GLEW_ANGLE_texture_usage,
+#endif
+#ifdef GL_ANGLE_timer_query
+ &__GLEW_ANGLE_timer_query,
+#endif
+#ifdef GL_ANGLE_translated_shader_source
+ &__GLEW_ANGLE_translated_shader_source,
+#endif
+#ifdef GL_APPLE_aux_depth_stencil
+ &__GLEW_APPLE_aux_depth_stencil,
+#endif
+#ifdef GL_APPLE_client_storage
+ &__GLEW_APPLE_client_storage,
+#endif
+#ifdef GL_APPLE_element_array
+ &__GLEW_APPLE_element_array,
+#endif
+#ifdef GL_APPLE_fence
+ &__GLEW_APPLE_fence,
+#endif
+#ifdef GL_APPLE_float_pixels
+ &__GLEW_APPLE_float_pixels,
+#endif
+#ifdef GL_APPLE_flush_buffer_range
+ &__GLEW_APPLE_flush_buffer_range,
+#endif
+#ifdef GL_APPLE_object_purgeable
+ &__GLEW_APPLE_object_purgeable,
+#endif
+#ifdef GL_APPLE_pixel_buffer
+ &__GLEW_APPLE_pixel_buffer,
+#endif
+#ifdef GL_APPLE_rgb_422
+ &__GLEW_APPLE_rgb_422,
+#endif
+#ifdef GL_APPLE_row_bytes
+ &__GLEW_APPLE_row_bytes,
+#endif
+#ifdef GL_APPLE_specular_vector
+ &__GLEW_APPLE_specular_vector,
+#endif
+#ifdef GL_APPLE_texture_range
+ &__GLEW_APPLE_texture_range,
+#endif
+#ifdef GL_APPLE_transform_hint
+ &__GLEW_APPLE_transform_hint,
+#endif
+#ifdef GL_APPLE_vertex_array_object
+ &__GLEW_APPLE_vertex_array_object,
+#endif
+#ifdef GL_APPLE_vertex_array_range
+ &__GLEW_APPLE_vertex_array_range,
+#endif
+#ifdef GL_APPLE_vertex_program_evaluators
+ &__GLEW_APPLE_vertex_program_evaluators,
+#endif
+#ifdef GL_APPLE_ycbcr_422
+ &__GLEW_APPLE_ycbcr_422,
+#endif
+#ifdef GL_ARB_ES2_compatibility
+ &__GLEW_ARB_ES2_compatibility,
+#endif
+#ifdef GL_ARB_ES3_1_compatibility
+ &__GLEW_ARB_ES3_1_compatibility,
+#endif
+#ifdef GL_ARB_ES3_2_compatibility
+ &__GLEW_ARB_ES3_2_compatibility,
+#endif
+#ifdef GL_ARB_ES3_compatibility
+ &__GLEW_ARB_ES3_compatibility,
+#endif
+#ifdef GL_ARB_arrays_of_arrays
+ &__GLEW_ARB_arrays_of_arrays,
+#endif
+#ifdef GL_ARB_base_instance
+ &__GLEW_ARB_base_instance,
+#endif
+#ifdef GL_ARB_bindless_texture
+ &__GLEW_ARB_bindless_texture,
+#endif
+#ifdef GL_ARB_blend_func_extended
+ &__GLEW_ARB_blend_func_extended,
+#endif
+#ifdef GL_ARB_buffer_storage
+ &__GLEW_ARB_buffer_storage,
+#endif
+#ifdef GL_ARB_cl_event
+ &__GLEW_ARB_cl_event,
+#endif
+#ifdef GL_ARB_clear_buffer_object
+ &__GLEW_ARB_clear_buffer_object,
+#endif
+#ifdef GL_ARB_clear_texture
+ &__GLEW_ARB_clear_texture,
+#endif
+#ifdef GL_ARB_clip_control
+ &__GLEW_ARB_clip_control,
+#endif
+#ifdef GL_ARB_color_buffer_float
+ &__GLEW_ARB_color_buffer_float,
+#endif
+#ifdef GL_ARB_compatibility
+ &__GLEW_ARB_compatibility,
+#endif
+#ifdef GL_ARB_compressed_texture_pixel_storage
+ &__GLEW_ARB_compressed_texture_pixel_storage,
+#endif
+#ifdef GL_ARB_compute_shader
+ &__GLEW_ARB_compute_shader,
+#endif
+#ifdef GL_ARB_compute_variable_group_size
+ &__GLEW_ARB_compute_variable_group_size,
+#endif
+#ifdef GL_ARB_conditional_render_inverted
+ &__GLEW_ARB_conditional_render_inverted,
+#endif
+#ifdef GL_ARB_conservative_depth
+ &__GLEW_ARB_conservative_depth,
+#endif
+#ifdef GL_ARB_copy_buffer
+ &__GLEW_ARB_copy_buffer,
+#endif
+#ifdef GL_ARB_copy_image
+ &__GLEW_ARB_copy_image,
+#endif
+#ifdef GL_ARB_cull_distance
+ &__GLEW_ARB_cull_distance,
+#endif
+#ifdef GL_ARB_debug_output
+ &__GLEW_ARB_debug_output,
+#endif
+#ifdef GL_ARB_depth_buffer_float
+ &__GLEW_ARB_depth_buffer_float,
+#endif
+#ifdef GL_ARB_depth_clamp
+ &__GLEW_ARB_depth_clamp,
+#endif
+#ifdef GL_ARB_depth_texture
+ &__GLEW_ARB_depth_texture,
+#endif
+#ifdef GL_ARB_derivative_control
+ &__GLEW_ARB_derivative_control,
+#endif
+#ifdef GL_ARB_direct_state_access
+ &__GLEW_ARB_direct_state_access,
+#endif
+#ifdef GL_ARB_draw_buffers
+ &__GLEW_ARB_draw_buffers,
+#endif
+#ifdef GL_ARB_draw_buffers_blend
+ &__GLEW_ARB_draw_buffers_blend,
+#endif
+#ifdef GL_ARB_draw_elements_base_vertex
+ &__GLEW_ARB_draw_elements_base_vertex,
+#endif
+#ifdef GL_ARB_draw_indirect
+ &__GLEW_ARB_draw_indirect,
+#endif
+#ifdef GL_ARB_draw_instanced
+ &__GLEW_ARB_draw_instanced,
+#endif
+#ifdef GL_ARB_enhanced_layouts
+ &__GLEW_ARB_enhanced_layouts,
+#endif
+#ifdef GL_ARB_explicit_attrib_location
+ &__GLEW_ARB_explicit_attrib_location,
+#endif
+#ifdef GL_ARB_explicit_uniform_location
+ &__GLEW_ARB_explicit_uniform_location,
+#endif
+#ifdef GL_ARB_fragment_coord_conventions
+ &__GLEW_ARB_fragment_coord_conventions,
+#endif
+#ifdef GL_ARB_fragment_layer_viewport
+ &__GLEW_ARB_fragment_layer_viewport,
+#endif
+#ifdef GL_ARB_fragment_program
+ &__GLEW_ARB_fragment_program,
+#endif
+#ifdef GL_ARB_fragment_program_shadow
+ &__GLEW_ARB_fragment_program_shadow,
+#endif
+#ifdef GL_ARB_fragment_shader
+ &__GLEW_ARB_fragment_shader,
+#endif
+#ifdef GL_ARB_fragment_shader_interlock
+ &__GLEW_ARB_fragment_shader_interlock,
+#endif
+#ifdef GL_ARB_framebuffer_no_attachments
+ &__GLEW_ARB_framebuffer_no_attachments,
+#endif
+#ifdef GL_ARB_framebuffer_object
+ &__GLEW_ARB_framebuffer_object,
+#endif
+#ifdef GL_ARB_framebuffer_sRGB
+ &__GLEW_ARB_framebuffer_sRGB,
+#endif
+#ifdef GL_ARB_geometry_shader4
+ &__GLEW_ARB_geometry_shader4,
+#endif
+#ifdef GL_ARB_get_program_binary
+ &__GLEW_ARB_get_program_binary,
+#endif
+#ifdef GL_ARB_get_texture_sub_image
+ &__GLEW_ARB_get_texture_sub_image,
+#endif
+#ifdef GL_ARB_gl_spirv
+ &__GLEW_ARB_gl_spirv,
+#endif
+#ifdef GL_ARB_gpu_shader5
+ &__GLEW_ARB_gpu_shader5,
+#endif
+#ifdef GL_ARB_gpu_shader_fp64
+ &__GLEW_ARB_gpu_shader_fp64,
+#endif
+#ifdef GL_ARB_gpu_shader_int64
+ &__GLEW_ARB_gpu_shader_int64,
+#endif
+#ifdef GL_ARB_half_float_pixel
+ &__GLEW_ARB_half_float_pixel,
+#endif
+#ifdef GL_ARB_half_float_vertex
+ &__GLEW_ARB_half_float_vertex,
+#endif
+#ifdef GL_ARB_imaging
+ &__GLEW_ARB_imaging,
+#endif
+#ifdef GL_ARB_indirect_parameters
+ &__GLEW_ARB_indirect_parameters,
+#endif
+#ifdef GL_ARB_instanced_arrays
+ &__GLEW_ARB_instanced_arrays,
+#endif
+#ifdef GL_ARB_internalformat_query
+ &__GLEW_ARB_internalformat_query,
+#endif
+#ifdef GL_ARB_internalformat_query2
+ &__GLEW_ARB_internalformat_query2,
+#endif
+#ifdef GL_ARB_invalidate_subdata
+ &__GLEW_ARB_invalidate_subdata,
+#endif
+#ifdef GL_ARB_map_buffer_alignment
+ &__GLEW_ARB_map_buffer_alignment,
+#endif
+#ifdef GL_ARB_map_buffer_range
+ &__GLEW_ARB_map_buffer_range,
+#endif
+#ifdef GL_ARB_matrix_palette
+ &__GLEW_ARB_matrix_palette,
+#endif
+#ifdef GL_ARB_multi_bind
+ &__GLEW_ARB_multi_bind,
+#endif
+#ifdef GL_ARB_multi_draw_indirect
+ &__GLEW_ARB_multi_draw_indirect,
+#endif
+#ifdef GL_ARB_multisample
+ &__GLEW_ARB_multisample,
+#endif
+#ifdef GL_ARB_multitexture
+ &__GLEW_ARB_multitexture,
+#endif
+#ifdef GL_ARB_occlusion_query
+ &__GLEW_ARB_occlusion_query,
+#endif
+#ifdef GL_ARB_occlusion_query2
+ &__GLEW_ARB_occlusion_query2,
+#endif
+#ifdef GL_ARB_parallel_shader_compile
+ &__GLEW_ARB_parallel_shader_compile,
+#endif
+#ifdef GL_ARB_pipeline_statistics_query
+ &__GLEW_ARB_pipeline_statistics_query,
+#endif
+#ifdef GL_ARB_pixel_buffer_object
+ &__GLEW_ARB_pixel_buffer_object,
+#endif
+#ifdef GL_ARB_point_parameters
+ &__GLEW_ARB_point_parameters,
+#endif
+#ifdef GL_ARB_point_sprite
+ &__GLEW_ARB_point_sprite,
+#endif
+#ifdef GL_ARB_post_depth_coverage
+ &__GLEW_ARB_post_depth_coverage,
+#endif
+#ifdef GL_ARB_program_interface_query
+ &__GLEW_ARB_program_interface_query,
+#endif
+#ifdef GL_ARB_provoking_vertex
+ &__GLEW_ARB_provoking_vertex,
+#endif
+#ifdef GL_ARB_query_buffer_object
+ &__GLEW_ARB_query_buffer_object,
+#endif
+#ifdef GL_ARB_robust_buffer_access_behavior
+ &__GLEW_ARB_robust_buffer_access_behavior,
+#endif
+#ifdef GL_ARB_robustness
+ &__GLEW_ARB_robustness,
+#endif
+#ifdef GL_ARB_robustness_application_isolation
+ &__GLEW_ARB_robustness_application_isolation,
+#endif
+#ifdef GL_ARB_robustness_share_group_isolation
+ &__GLEW_ARB_robustness_share_group_isolation,
+#endif
+#ifdef GL_ARB_sample_locations
+ &__GLEW_ARB_sample_locations,
+#endif
+#ifdef GL_ARB_sample_shading
+ &__GLEW_ARB_sample_shading,
+#endif
+#ifdef GL_ARB_sampler_objects
+ &__GLEW_ARB_sampler_objects,
+#endif
+#ifdef GL_ARB_seamless_cube_map
+ &__GLEW_ARB_seamless_cube_map,
+#endif
+#ifdef GL_ARB_seamless_cubemap_per_texture
+ &__GLEW_ARB_seamless_cubemap_per_texture,
+#endif
+#ifdef GL_ARB_separate_shader_objects
+ &__GLEW_ARB_separate_shader_objects,
+#endif
+#ifdef GL_ARB_shader_atomic_counter_ops
+ &__GLEW_ARB_shader_atomic_counter_ops,
+#endif
+#ifdef GL_ARB_shader_atomic_counters
+ &__GLEW_ARB_shader_atomic_counters,
+#endif
+#ifdef GL_ARB_shader_ballot
+ &__GLEW_ARB_shader_ballot,
+#endif
+#ifdef GL_ARB_shader_bit_encoding
+ &__GLEW_ARB_shader_bit_encoding,
+#endif
+#ifdef GL_ARB_shader_clock
+ &__GLEW_ARB_shader_clock,
+#endif
+#ifdef GL_ARB_shader_draw_parameters
+ &__GLEW_ARB_shader_draw_parameters,
+#endif
+#ifdef GL_ARB_shader_group_vote
+ &__GLEW_ARB_shader_group_vote,
+#endif
+#ifdef GL_ARB_shader_image_load_store
+ &__GLEW_ARB_shader_image_load_store,
+#endif
+#ifdef GL_ARB_shader_image_size
+ &__GLEW_ARB_shader_image_size,
+#endif
+#ifdef GL_ARB_shader_objects
+ &__GLEW_ARB_shader_objects,
+#endif
+#ifdef GL_ARB_shader_precision
+ &__GLEW_ARB_shader_precision,
+#endif
+#ifdef GL_ARB_shader_stencil_export
+ &__GLEW_ARB_shader_stencil_export,
+#endif
+#ifdef GL_ARB_shader_storage_buffer_object
+ &__GLEW_ARB_shader_storage_buffer_object,
+#endif
+#ifdef GL_ARB_shader_subroutine
+ &__GLEW_ARB_shader_subroutine,
+#endif
+#ifdef GL_ARB_shader_texture_image_samples
+ &__GLEW_ARB_shader_texture_image_samples,
+#endif
+#ifdef GL_ARB_shader_texture_lod
+ &__GLEW_ARB_shader_texture_lod,
+#endif
+#ifdef GL_ARB_shader_viewport_layer_array
+ &__GLEW_ARB_shader_viewport_layer_array,
+#endif
+#ifdef GL_ARB_shading_language_100
+ &__GLEW_ARB_shading_language_100,
+#endif
+#ifdef GL_ARB_shading_language_420pack
+ &__GLEW_ARB_shading_language_420pack,
+#endif
+#ifdef GL_ARB_shading_language_include
+ &__GLEW_ARB_shading_language_include,
+#endif
+#ifdef GL_ARB_shading_language_packing
+ &__GLEW_ARB_shading_language_packing,
+#endif
+#ifdef GL_ARB_shadow
+ &__GLEW_ARB_shadow,
+#endif
+#ifdef GL_ARB_shadow_ambient
+ &__GLEW_ARB_shadow_ambient,
+#endif
+#ifdef GL_ARB_sparse_buffer
+ &__GLEW_ARB_sparse_buffer,
+#endif
+#ifdef GL_ARB_sparse_texture
+ &__GLEW_ARB_sparse_texture,
+#endif
+#ifdef GL_ARB_sparse_texture2
+ &__GLEW_ARB_sparse_texture2,
+#endif
+#ifdef GL_ARB_sparse_texture_clamp
+ &__GLEW_ARB_sparse_texture_clamp,
+#endif
+#ifdef GL_ARB_stencil_texturing
+ &__GLEW_ARB_stencil_texturing,
+#endif
+#ifdef GL_ARB_sync
+ &__GLEW_ARB_sync,
+#endif
+#ifdef GL_ARB_tessellation_shader
+ &__GLEW_ARB_tessellation_shader,
+#endif
+#ifdef GL_ARB_texture_barrier
+ &__GLEW_ARB_texture_barrier,
+#endif
+#ifdef GL_ARB_texture_border_clamp
+ &__GLEW_ARB_texture_border_clamp,
+#endif
+#ifdef GL_ARB_texture_buffer_object
+ &__GLEW_ARB_texture_buffer_object,
+#endif
+#ifdef GL_ARB_texture_buffer_object_rgb32
+ &__GLEW_ARB_texture_buffer_object_rgb32,
+#endif
+#ifdef GL_ARB_texture_buffer_range
+ &__GLEW_ARB_texture_buffer_range,
+#endif
+#ifdef GL_ARB_texture_compression
+ &__GLEW_ARB_texture_compression,
+#endif
+#ifdef GL_ARB_texture_compression_bptc
+ &__GLEW_ARB_texture_compression_bptc,
+#endif
+#ifdef GL_ARB_texture_compression_rgtc
+ &__GLEW_ARB_texture_compression_rgtc,
+#endif
+#ifdef GL_ARB_texture_cube_map
+ &__GLEW_ARB_texture_cube_map,
+#endif
+#ifdef GL_ARB_texture_cube_map_array
+ &__GLEW_ARB_texture_cube_map_array,
+#endif
+#ifdef GL_ARB_texture_env_add
+ &__GLEW_ARB_texture_env_add,
+#endif
+#ifdef GL_ARB_texture_env_combine
+ &__GLEW_ARB_texture_env_combine,
+#endif
+#ifdef GL_ARB_texture_env_crossbar
+ &__GLEW_ARB_texture_env_crossbar,
+#endif
+#ifdef GL_ARB_texture_env_dot3
+ &__GLEW_ARB_texture_env_dot3,
+#endif
+#ifdef GL_ARB_texture_filter_minmax
+ &__GLEW_ARB_texture_filter_minmax,
+#endif
+#ifdef GL_ARB_texture_float
+ &__GLEW_ARB_texture_float,
+#endif
+#ifdef GL_ARB_texture_gather
+ &__GLEW_ARB_texture_gather,
+#endif
+#ifdef GL_ARB_texture_mirror_clamp_to_edge
+ &__GLEW_ARB_texture_mirror_clamp_to_edge,
+#endif
+#ifdef GL_ARB_texture_mirrored_repeat
+ &__GLEW_ARB_texture_mirrored_repeat,
+#endif
+#ifdef GL_ARB_texture_multisample
+ &__GLEW_ARB_texture_multisample,
+#endif
+#ifdef GL_ARB_texture_non_power_of_two
+ &__GLEW_ARB_texture_non_power_of_two,
+#endif
+#ifdef GL_ARB_texture_query_levels
+ &__GLEW_ARB_texture_query_levels,
+#endif
+#ifdef GL_ARB_texture_query_lod
+ &__GLEW_ARB_texture_query_lod,
+#endif
+#ifdef GL_ARB_texture_rectangle
+ &__GLEW_ARB_texture_rectangle,
+#endif
+#ifdef GL_ARB_texture_rg
+ &__GLEW_ARB_texture_rg,
+#endif
+#ifdef GL_ARB_texture_rgb10_a2ui
+ &__GLEW_ARB_texture_rgb10_a2ui,
+#endif
+#ifdef GL_ARB_texture_stencil8
+ &__GLEW_ARB_texture_stencil8,
+#endif
+#ifdef GL_ARB_texture_storage
+ &__GLEW_ARB_texture_storage,
+#endif
+#ifdef GL_ARB_texture_storage_multisample
+ &__GLEW_ARB_texture_storage_multisample,
+#endif
+#ifdef GL_ARB_texture_swizzle
+ &__GLEW_ARB_texture_swizzle,
+#endif
+#ifdef GL_ARB_texture_view
+ &__GLEW_ARB_texture_view,
+#endif
+#ifdef GL_ARB_timer_query
+ &__GLEW_ARB_timer_query,
+#endif
+#ifdef GL_ARB_transform_feedback2
+ &__GLEW_ARB_transform_feedback2,
+#endif
+#ifdef GL_ARB_transform_feedback3
+ &__GLEW_ARB_transform_feedback3,
+#endif
+#ifdef GL_ARB_transform_feedback_instanced
+ &__GLEW_ARB_transform_feedback_instanced,
+#endif
+#ifdef GL_ARB_transform_feedback_overflow_query
+ &__GLEW_ARB_transform_feedback_overflow_query,
+#endif
+#ifdef GL_ARB_transpose_matrix
+ &__GLEW_ARB_transpose_matrix,
+#endif
+#ifdef GL_ARB_uniform_buffer_object
+ &__GLEW_ARB_uniform_buffer_object,
+#endif
+#ifdef GL_ARB_vertex_array_bgra
+ &__GLEW_ARB_vertex_array_bgra,
+#endif
+#ifdef GL_ARB_vertex_array_object
+ &__GLEW_ARB_vertex_array_object,
+#endif
+#ifdef GL_ARB_vertex_attrib_64bit
+ &__GLEW_ARB_vertex_attrib_64bit,
+#endif
+#ifdef GL_ARB_vertex_attrib_binding
+ &__GLEW_ARB_vertex_attrib_binding,
+#endif
+#ifdef GL_ARB_vertex_blend
+ &__GLEW_ARB_vertex_blend,
+#endif
+#ifdef GL_ARB_vertex_buffer_object
+ &__GLEW_ARB_vertex_buffer_object,
+#endif
+#ifdef GL_ARB_vertex_program
+ &__GLEW_ARB_vertex_program,
+#endif
+#ifdef GL_ARB_vertex_shader
+ &__GLEW_ARB_vertex_shader,
+#endif
+#ifdef GL_ARB_vertex_type_10f_11f_11f_rev
+ &__GLEW_ARB_vertex_type_10f_11f_11f_rev,
+#endif
+#ifdef GL_ARB_vertex_type_2_10_10_10_rev
+ &__GLEW_ARB_vertex_type_2_10_10_10_rev,
+#endif
+#ifdef GL_ARB_viewport_array
+ &__GLEW_ARB_viewport_array,
+#endif
+#ifdef GL_ARB_window_pos
+ &__GLEW_ARB_window_pos,
+#endif
+#ifdef GL_ATIX_point_sprites
+ &__GLEW_ATIX_point_sprites,
+#endif
+#ifdef GL_ATIX_texture_env_combine3
+ &__GLEW_ATIX_texture_env_combine3,
+#endif
+#ifdef GL_ATIX_texture_env_route
+ &__GLEW_ATIX_texture_env_route,
+#endif
+#ifdef GL_ATIX_vertex_shader_output_point_size
+ &__GLEW_ATIX_vertex_shader_output_point_size,
+#endif
+#ifdef GL_ATI_draw_buffers
+ &__GLEW_ATI_draw_buffers,
+#endif
+#ifdef GL_ATI_element_array
+ &__GLEW_ATI_element_array,
+#endif
+#ifdef GL_ATI_envmap_bumpmap
+ &__GLEW_ATI_envmap_bumpmap,
+#endif
+#ifdef GL_ATI_fragment_shader
+ &__GLEW_ATI_fragment_shader,
+#endif
+#ifdef GL_ATI_map_object_buffer
+ &__GLEW_ATI_map_object_buffer,
+#endif
+#ifdef GL_ATI_meminfo
+ &__GLEW_ATI_meminfo,
+#endif
+#ifdef GL_ATI_pn_triangles
+ &__GLEW_ATI_pn_triangles,
+#endif
+#ifdef GL_ATI_separate_stencil
+ &__GLEW_ATI_separate_stencil,
+#endif
+#ifdef GL_ATI_shader_texture_lod
+ &__GLEW_ATI_shader_texture_lod,
+#endif
+#ifdef GL_ATI_text_fragment_shader
+ &__GLEW_ATI_text_fragment_shader,
+#endif
+#ifdef GL_ATI_texture_compression_3dc
+ &__GLEW_ATI_texture_compression_3dc,
+#endif
+#ifdef GL_ATI_texture_env_combine3
+ &__GLEW_ATI_texture_env_combine3,
+#endif
+#ifdef GL_ATI_texture_float
+ &__GLEW_ATI_texture_float,
+#endif
+#ifdef GL_ATI_texture_mirror_once
+ &__GLEW_ATI_texture_mirror_once,
+#endif
+#ifdef GL_ATI_vertex_array_object
+ &__GLEW_ATI_vertex_array_object,
+#endif
+#ifdef GL_ATI_vertex_attrib_array_object
+ &__GLEW_ATI_vertex_attrib_array_object,
+#endif
+#ifdef GL_ATI_vertex_streams
+ &__GLEW_ATI_vertex_streams,
+#endif
+#ifdef GL_EGL_NV_robustness_video_memory_purge
+ &__GLEW_EGL_NV_robustness_video_memory_purge,
+#endif
+#ifdef GL_EXT_422_pixels
+ &__GLEW_EXT_422_pixels,
+#endif
+#ifdef GL_EXT_Cg_shader
+ &__GLEW_EXT_Cg_shader,
+#endif
+#ifdef GL_EXT_abgr
+ &__GLEW_EXT_abgr,
+#endif
+#ifdef GL_EXT_bgra
+ &__GLEW_EXT_bgra,
+#endif
+#ifdef GL_EXT_bindable_uniform
+ &__GLEW_EXT_bindable_uniform,
+#endif
+#ifdef GL_EXT_blend_color
+ &__GLEW_EXT_blend_color,
+#endif
+#ifdef GL_EXT_blend_equation_separate
+ &__GLEW_EXT_blend_equation_separate,
+#endif
+#ifdef GL_EXT_blend_func_separate
+ &__GLEW_EXT_blend_func_separate,
+#endif
+#ifdef GL_EXT_blend_logic_op
+ &__GLEW_EXT_blend_logic_op,
+#endif
+#ifdef GL_EXT_blend_minmax
+ &__GLEW_EXT_blend_minmax,
+#endif
+#ifdef GL_EXT_blend_subtract
+ &__GLEW_EXT_blend_subtract,
+#endif
+#ifdef GL_EXT_clip_volume_hint
+ &__GLEW_EXT_clip_volume_hint,
+#endif
+#ifdef GL_EXT_cmyka
+ &__GLEW_EXT_cmyka,
+#endif
+#ifdef GL_EXT_color_subtable
+ &__GLEW_EXT_color_subtable,
+#endif
+#ifdef GL_EXT_compiled_vertex_array
+ &__GLEW_EXT_compiled_vertex_array,
+#endif
+#ifdef GL_EXT_convolution
+ &__GLEW_EXT_convolution,
+#endif
+#ifdef GL_EXT_coordinate_frame
+ &__GLEW_EXT_coordinate_frame,
+#endif
+#ifdef GL_EXT_copy_texture
+ &__GLEW_EXT_copy_texture,
+#endif
+#ifdef GL_EXT_cull_vertex
+ &__GLEW_EXT_cull_vertex,
+#endif
+#ifdef GL_EXT_debug_label
+ &__GLEW_EXT_debug_label,
+#endif
+#ifdef GL_EXT_debug_marker
+ &__GLEW_EXT_debug_marker,
+#endif
+#ifdef GL_EXT_depth_bounds_test
+ &__GLEW_EXT_depth_bounds_test,
+#endif
+#ifdef GL_EXT_direct_state_access
+ &__GLEW_EXT_direct_state_access,
+#endif
+#ifdef GL_EXT_draw_buffers2
+ &__GLEW_EXT_draw_buffers2,
+#endif
+#ifdef GL_EXT_draw_instanced
+ &__GLEW_EXT_draw_instanced,
+#endif
+#ifdef GL_EXT_draw_range_elements
+ &__GLEW_EXT_draw_range_elements,
+#endif
+#ifdef GL_EXT_fog_coord
+ &__GLEW_EXT_fog_coord,
+#endif
+#ifdef GL_EXT_fragment_lighting
+ &__GLEW_EXT_fragment_lighting,
+#endif
+#ifdef GL_EXT_framebuffer_blit
+ &__GLEW_EXT_framebuffer_blit,
+#endif
+#ifdef GL_EXT_framebuffer_multisample
+ &__GLEW_EXT_framebuffer_multisample,
+#endif
+#ifdef GL_EXT_framebuffer_multisample_blit_scaled
+ &__GLEW_EXT_framebuffer_multisample_blit_scaled,
+#endif
+#ifdef GL_EXT_framebuffer_object
+ &__GLEW_EXT_framebuffer_object,
+#endif
+#ifdef GL_EXT_framebuffer_sRGB
+ &__GLEW_EXT_framebuffer_sRGB,
+#endif
+#ifdef GL_EXT_geometry_shader4
+ &__GLEW_EXT_geometry_shader4,
+#endif
+#ifdef GL_EXT_gpu_program_parameters
+ &__GLEW_EXT_gpu_program_parameters,
+#endif
+#ifdef GL_EXT_gpu_shader4
+ &__GLEW_EXT_gpu_shader4,
+#endif
+#ifdef GL_EXT_histogram
+ &__GLEW_EXT_histogram,
+#endif
+#ifdef GL_EXT_index_array_formats
+ &__GLEW_EXT_index_array_formats,
+#endif
+#ifdef GL_EXT_index_func
+ &__GLEW_EXT_index_func,
+#endif
+#ifdef GL_EXT_index_material
+ &__GLEW_EXT_index_material,
+#endif
+#ifdef GL_EXT_index_texture
+ &__GLEW_EXT_index_texture,
+#endif
+#ifdef GL_EXT_light_texture
+ &__GLEW_EXT_light_texture,
+#endif
+#ifdef GL_EXT_misc_attribute
+ &__GLEW_EXT_misc_attribute,
+#endif
+#ifdef GL_EXT_multi_draw_arrays
+ &__GLEW_EXT_multi_draw_arrays,
+#endif
+#ifdef GL_EXT_multisample
+ &__GLEW_EXT_multisample,
+#endif
+#ifdef GL_EXT_packed_depth_stencil
+ &__GLEW_EXT_packed_depth_stencil,
+#endif
+#ifdef GL_EXT_packed_float
+ &__GLEW_EXT_packed_float,
+#endif
+#ifdef GL_EXT_packed_pixels
+ &__GLEW_EXT_packed_pixels,
+#endif
+#ifdef GL_EXT_paletted_texture
+ &__GLEW_EXT_paletted_texture,
+#endif
+#ifdef GL_EXT_pixel_buffer_object
+ &__GLEW_EXT_pixel_buffer_object,
+#endif
+#ifdef GL_EXT_pixel_transform
+ &__GLEW_EXT_pixel_transform,
+#endif
+#ifdef GL_EXT_pixel_transform_color_table
+ &__GLEW_EXT_pixel_transform_color_table,
+#endif
+#ifdef GL_EXT_point_parameters
+ &__GLEW_EXT_point_parameters,
+#endif
+#ifdef GL_EXT_polygon_offset
+ &__GLEW_EXT_polygon_offset,
+#endif
+#ifdef GL_EXT_polygon_offset_clamp
+ &__GLEW_EXT_polygon_offset_clamp,
+#endif
+#ifdef GL_EXT_post_depth_coverage
+ &__GLEW_EXT_post_depth_coverage,
+#endif
+#ifdef GL_EXT_provoking_vertex
+ &__GLEW_EXT_provoking_vertex,
+#endif
+#ifdef GL_EXT_raster_multisample
+ &__GLEW_EXT_raster_multisample,
+#endif
+#ifdef GL_EXT_rescale_normal
+ &__GLEW_EXT_rescale_normal,
+#endif
+#ifdef GL_EXT_scene_marker
+ &__GLEW_EXT_scene_marker,
+#endif
+#ifdef GL_EXT_secondary_color
+ &__GLEW_EXT_secondary_color,
+#endif
+#ifdef GL_EXT_separate_shader_objects
+ &__GLEW_EXT_separate_shader_objects,
+#endif
+#ifdef GL_EXT_separate_specular_color
+ &__GLEW_EXT_separate_specular_color,
+#endif
+#ifdef GL_EXT_shader_image_load_formatted
+ &__GLEW_EXT_shader_image_load_formatted,
+#endif
+#ifdef GL_EXT_shader_image_load_store
+ &__GLEW_EXT_shader_image_load_store,
+#endif
+#ifdef GL_EXT_shader_integer_mix
+ &__GLEW_EXT_shader_integer_mix,
+#endif
+#ifdef GL_EXT_shadow_funcs
+ &__GLEW_EXT_shadow_funcs,
+#endif
+#ifdef GL_EXT_shared_texture_palette
+ &__GLEW_EXT_shared_texture_palette,
+#endif
+#ifdef GL_EXT_sparse_texture2
+ &__GLEW_EXT_sparse_texture2,
+#endif
+#ifdef GL_EXT_stencil_clear_tag
+ &__GLEW_EXT_stencil_clear_tag,
+#endif
+#ifdef GL_EXT_stencil_two_side
+ &__GLEW_EXT_stencil_two_side,
+#endif
+#ifdef GL_EXT_stencil_wrap
+ &__GLEW_EXT_stencil_wrap,
+#endif
+#ifdef GL_EXT_subtexture
+ &__GLEW_EXT_subtexture,
+#endif
+#ifdef GL_EXT_texture
+ &__GLEW_EXT_texture,
+#endif
+#ifdef GL_EXT_texture3D
+ &__GLEW_EXT_texture3D,
+#endif
+#ifdef GL_EXT_texture_array
+ &__GLEW_EXT_texture_array,
+#endif
+#ifdef GL_EXT_texture_buffer_object
+ &__GLEW_EXT_texture_buffer_object,
+#endif
+#ifdef GL_EXT_texture_compression_dxt1
+ &__GLEW_EXT_texture_compression_dxt1,
+#endif
+#ifdef GL_EXT_texture_compression_latc
+ &__GLEW_EXT_texture_compression_latc,
+#endif
+#ifdef GL_EXT_texture_compression_rgtc
+ &__GLEW_EXT_texture_compression_rgtc,
+#endif
+#ifdef GL_EXT_texture_compression_s3tc
+ &__GLEW_EXT_texture_compression_s3tc,
+#endif
+#ifdef GL_EXT_texture_cube_map
+ &__GLEW_EXT_texture_cube_map,
+#endif
+#ifdef GL_EXT_texture_edge_clamp
+ &__GLEW_EXT_texture_edge_clamp,
+#endif
+#ifdef GL_EXT_texture_env
+ &__GLEW_EXT_texture_env,
+#endif
+#ifdef GL_EXT_texture_env_add
+ &__GLEW_EXT_texture_env_add,
+#endif
+#ifdef GL_EXT_texture_env_combine
+ &__GLEW_EXT_texture_env_combine,
+#endif
+#ifdef GL_EXT_texture_env_dot3
+ &__GLEW_EXT_texture_env_dot3,
+#endif
+#ifdef GL_EXT_texture_filter_anisotropic
+ &__GLEW_EXT_texture_filter_anisotropic,
+#endif
+#ifdef GL_EXT_texture_filter_minmax
+ &__GLEW_EXT_texture_filter_minmax,
+#endif
+#ifdef GL_EXT_texture_integer
+ &__GLEW_EXT_texture_integer,
+#endif
+#ifdef GL_EXT_texture_lod_bias
+ &__GLEW_EXT_texture_lod_bias,
+#endif
+#ifdef GL_EXT_texture_mirror_clamp
+ &__GLEW_EXT_texture_mirror_clamp,
+#endif
+#ifdef GL_EXT_texture_object
+ &__GLEW_EXT_texture_object,
+#endif
+#ifdef GL_EXT_texture_perturb_normal
+ &__GLEW_EXT_texture_perturb_normal,
+#endif
+#ifdef GL_EXT_texture_rectangle
+ &__GLEW_EXT_texture_rectangle,
+#endif
+#ifdef GL_EXT_texture_sRGB
+ &__GLEW_EXT_texture_sRGB,
+#endif
+#ifdef GL_EXT_texture_sRGB_decode
+ &__GLEW_EXT_texture_sRGB_decode,
+#endif
+#ifdef GL_EXT_texture_shared_exponent
+ &__GLEW_EXT_texture_shared_exponent,
+#endif
+#ifdef GL_EXT_texture_snorm
+ &__GLEW_EXT_texture_snorm,
+#endif
+#ifdef GL_EXT_texture_swizzle
+ &__GLEW_EXT_texture_swizzle,
+#endif
+#ifdef GL_EXT_timer_query
+ &__GLEW_EXT_timer_query,
+#endif
+#ifdef GL_EXT_transform_feedback
+ &__GLEW_EXT_transform_feedback,
+#endif
+#ifdef GL_EXT_vertex_array
+ &__GLEW_EXT_vertex_array,
+#endif
+#ifdef GL_EXT_vertex_array_bgra
+ &__GLEW_EXT_vertex_array_bgra,
+#endif
+#ifdef GL_EXT_vertex_attrib_64bit
+ &__GLEW_EXT_vertex_attrib_64bit,
+#endif
+#ifdef GL_EXT_vertex_shader
+ &__GLEW_EXT_vertex_shader,
+#endif
+#ifdef GL_EXT_vertex_weighting
+ &__GLEW_EXT_vertex_weighting,
+#endif
+#ifdef GL_EXT_window_rectangles
+ &__GLEW_EXT_window_rectangles,
+#endif
+#ifdef GL_EXT_x11_sync_object
+ &__GLEW_EXT_x11_sync_object,
+#endif
+#ifdef GL_GREMEDY_frame_terminator
+ &__GLEW_GREMEDY_frame_terminator,
+#endif
+#ifdef GL_GREMEDY_string_marker
+ &__GLEW_GREMEDY_string_marker,
+#endif
+#ifdef GL_HP_convolution_border_modes
+ &__GLEW_HP_convolution_border_modes,
+#endif
+#ifdef GL_HP_image_transform
+ &__GLEW_HP_image_transform,
+#endif
+#ifdef GL_HP_occlusion_test
+ &__GLEW_HP_occlusion_test,
+#endif
+#ifdef GL_HP_texture_lighting
+ &__GLEW_HP_texture_lighting,
+#endif
+#ifdef GL_IBM_cull_vertex
+ &__GLEW_IBM_cull_vertex,
+#endif
+#ifdef GL_IBM_multimode_draw_arrays
+ &__GLEW_IBM_multimode_draw_arrays,
+#endif
+#ifdef GL_IBM_rasterpos_clip
+ &__GLEW_IBM_rasterpos_clip,
+#endif
+#ifdef GL_IBM_static_data
+ &__GLEW_IBM_static_data,
+#endif
+#ifdef GL_IBM_texture_mirrored_repeat
+ &__GLEW_IBM_texture_mirrored_repeat,
+#endif
+#ifdef GL_IBM_vertex_array_lists
+ &__GLEW_IBM_vertex_array_lists,
+#endif
+#ifdef GL_INGR_color_clamp
+ &__GLEW_INGR_color_clamp,
+#endif
+#ifdef GL_INGR_interlace_read
+ &__GLEW_INGR_interlace_read,
+#endif
+#ifdef GL_INTEL_conservative_rasterization
+ &__GLEW_INTEL_conservative_rasterization,
+#endif
+#ifdef GL_INTEL_fragment_shader_ordering
+ &__GLEW_INTEL_fragment_shader_ordering,
+#endif
+#ifdef GL_INTEL_framebuffer_CMAA
+ &__GLEW_INTEL_framebuffer_CMAA,
+#endif
+#ifdef GL_INTEL_map_texture
+ &__GLEW_INTEL_map_texture,
+#endif
+#ifdef GL_INTEL_parallel_arrays
+ &__GLEW_INTEL_parallel_arrays,
+#endif
+#ifdef GL_INTEL_performance_query
+ &__GLEW_INTEL_performance_query,
+#endif
+#ifdef GL_INTEL_texture_scissor
+ &__GLEW_INTEL_texture_scissor,
+#endif
+#ifdef GL_KHR_blend_equation_advanced
+ &__GLEW_KHR_blend_equation_advanced,
+#endif
+#ifdef GL_KHR_blend_equation_advanced_coherent
+ &__GLEW_KHR_blend_equation_advanced_coherent,
+#endif
+#ifdef GL_KHR_context_flush_control
+ &__GLEW_KHR_context_flush_control,
+#endif
+#ifdef GL_KHR_debug
+ &__GLEW_KHR_debug,
+#endif
+#ifdef GL_KHR_no_error
+ &__GLEW_KHR_no_error,
+#endif
+#ifdef GL_KHR_robust_buffer_access_behavior
+ &__GLEW_KHR_robust_buffer_access_behavior,
+#endif
+#ifdef GL_KHR_robustness
+ &__GLEW_KHR_robustness,
+#endif
+#ifdef GL_KHR_texture_compression_astc_hdr
+ &__GLEW_KHR_texture_compression_astc_hdr,
+#endif
+#ifdef GL_KHR_texture_compression_astc_ldr
+ &__GLEW_KHR_texture_compression_astc_ldr,
+#endif
+#ifdef GL_KHR_texture_compression_astc_sliced_3d
+ &__GLEW_KHR_texture_compression_astc_sliced_3d,
+#endif
+#ifdef GL_KTX_buffer_region
+ &__GLEW_KTX_buffer_region,
+#endif
+#ifdef GL_MESAX_texture_stack
+ &__GLEW_MESAX_texture_stack,
+#endif
+#ifdef GL_MESA_pack_invert
+ &__GLEW_MESA_pack_invert,
+#endif
+#ifdef GL_MESA_resize_buffers
+ &__GLEW_MESA_resize_buffers,
+#endif
+#ifdef GL_MESA_shader_integer_functions
+ &__GLEW_MESA_shader_integer_functions,
+#endif
+#ifdef GL_MESA_window_pos
+ &__GLEW_MESA_window_pos,
+#endif
+#ifdef GL_MESA_ycbcr_texture
+ &__GLEW_MESA_ycbcr_texture,
+#endif
+#ifdef GL_NVX_blend_equation_advanced_multi_draw_buffers
+ &__GLEW_NVX_blend_equation_advanced_multi_draw_buffers,
+#endif
+#ifdef GL_NVX_conditional_render
+ &__GLEW_NVX_conditional_render,
+#endif
+#ifdef GL_NVX_gpu_memory_info
+ &__GLEW_NVX_gpu_memory_info,
+#endif
+#ifdef GL_NVX_linked_gpu_multicast
+ &__GLEW_NVX_linked_gpu_multicast,
+#endif
+#ifdef GL_NV_bindless_multi_draw_indirect
+ &__GLEW_NV_bindless_multi_draw_indirect,
+#endif
+#ifdef GL_NV_bindless_multi_draw_indirect_count
+ &__GLEW_NV_bindless_multi_draw_indirect_count,
+#endif
+#ifdef GL_NV_bindless_texture
+ &__GLEW_NV_bindless_texture,
+#endif
+#ifdef GL_NV_blend_equation_advanced
+ &__GLEW_NV_blend_equation_advanced,
+#endif
+#ifdef GL_NV_blend_equation_advanced_coherent
+ &__GLEW_NV_blend_equation_advanced_coherent,
+#endif
+#ifdef GL_NV_blend_square
+ &__GLEW_NV_blend_square,
+#endif
+#ifdef GL_NV_clip_space_w_scaling
+ &__GLEW_NV_clip_space_w_scaling,
+#endif
+#ifdef GL_NV_command_list
+ &__GLEW_NV_command_list,
+#endif
+#ifdef GL_NV_compute_program5
+ &__GLEW_NV_compute_program5,
+#endif
+#ifdef GL_NV_conditional_render
+ &__GLEW_NV_conditional_render,
+#endif
+#ifdef GL_NV_conservative_raster
+ &__GLEW_NV_conservative_raster,
+#endif
+#ifdef GL_NV_conservative_raster_dilate
+ &__GLEW_NV_conservative_raster_dilate,
+#endif
+#ifdef GL_NV_conservative_raster_pre_snap_triangles
+ &__GLEW_NV_conservative_raster_pre_snap_triangles,
+#endif
+#ifdef GL_NV_copy_depth_to_color
+ &__GLEW_NV_copy_depth_to_color,
+#endif
+#ifdef GL_NV_copy_image
+ &__GLEW_NV_copy_image,
+#endif
+#ifdef GL_NV_deep_texture3D
+ &__GLEW_NV_deep_texture3D,
+#endif
+#ifdef GL_NV_depth_buffer_float
+ &__GLEW_NV_depth_buffer_float,
+#endif
+#ifdef GL_NV_depth_clamp
+ &__GLEW_NV_depth_clamp,
+#endif
+#ifdef GL_NV_depth_range_unclamped
+ &__GLEW_NV_depth_range_unclamped,
+#endif
+#ifdef GL_NV_draw_texture
+ &__GLEW_NV_draw_texture,
+#endif
+#ifdef GL_NV_draw_vulkan_image
+ &__GLEW_NV_draw_vulkan_image,
+#endif
+#ifdef GL_NV_evaluators
+ &__GLEW_NV_evaluators,
+#endif
+#ifdef GL_NV_explicit_multisample
+ &__GLEW_NV_explicit_multisample,
+#endif
+#ifdef GL_NV_fence
+ &__GLEW_NV_fence,
+#endif
+#ifdef GL_NV_fill_rectangle
+ &__GLEW_NV_fill_rectangle,
+#endif
+#ifdef GL_NV_float_buffer
+ &__GLEW_NV_float_buffer,
+#endif
+#ifdef GL_NV_fog_distance
+ &__GLEW_NV_fog_distance,
+#endif
+#ifdef GL_NV_fragment_coverage_to_color
+ &__GLEW_NV_fragment_coverage_to_color,
+#endif
+#ifdef GL_NV_fragment_program
+ &__GLEW_NV_fragment_program,
+#endif
+#ifdef GL_NV_fragment_program2
+ &__GLEW_NV_fragment_program2,
+#endif
+#ifdef GL_NV_fragment_program4
+ &__GLEW_NV_fragment_program4,
+#endif
+#ifdef GL_NV_fragment_program_option
+ &__GLEW_NV_fragment_program_option,
+#endif
+#ifdef GL_NV_fragment_shader_interlock
+ &__GLEW_NV_fragment_shader_interlock,
+#endif
+#ifdef GL_NV_framebuffer_mixed_samples
+ &__GLEW_NV_framebuffer_mixed_samples,
+#endif
+#ifdef GL_NV_framebuffer_multisample_coverage
+ &__GLEW_NV_framebuffer_multisample_coverage,
+#endif
+#ifdef GL_NV_geometry_program4
+ &__GLEW_NV_geometry_program4,
+#endif
+#ifdef GL_NV_geometry_shader4
+ &__GLEW_NV_geometry_shader4,
+#endif
+#ifdef GL_NV_geometry_shader_passthrough
+ &__GLEW_NV_geometry_shader_passthrough,
+#endif
+#ifdef GL_NV_gpu_multicast
+ &__GLEW_NV_gpu_multicast,
+#endif
+#ifdef GL_NV_gpu_program4
+ &__GLEW_NV_gpu_program4,
+#endif
+#ifdef GL_NV_gpu_program5
+ &__GLEW_NV_gpu_program5,
+#endif
+#ifdef GL_NV_gpu_program5_mem_extended
+ &__GLEW_NV_gpu_program5_mem_extended,
+#endif
+#ifdef GL_NV_gpu_program_fp64
+ &__GLEW_NV_gpu_program_fp64,
+#endif
+#ifdef GL_NV_gpu_shader5
+ &__GLEW_NV_gpu_shader5,
+#endif
+#ifdef GL_NV_half_float
+ &__GLEW_NV_half_float,
+#endif
+#ifdef GL_NV_internalformat_sample_query
+ &__GLEW_NV_internalformat_sample_query,
+#endif
+#ifdef GL_NV_light_max_exponent
+ &__GLEW_NV_light_max_exponent,
+#endif
+#ifdef GL_NV_multisample_coverage
+ &__GLEW_NV_multisample_coverage,
+#endif
+#ifdef GL_NV_multisample_filter_hint
+ &__GLEW_NV_multisample_filter_hint,
+#endif
+#ifdef GL_NV_occlusion_query
+ &__GLEW_NV_occlusion_query,
+#endif
+#ifdef GL_NV_packed_depth_stencil
+ &__GLEW_NV_packed_depth_stencil,
+#endif
+#ifdef GL_NV_parameter_buffer_object
+ &__GLEW_NV_parameter_buffer_object,
+#endif
+#ifdef GL_NV_parameter_buffer_object2
+ &__GLEW_NV_parameter_buffer_object2,
+#endif
+#ifdef GL_NV_path_rendering
+ &__GLEW_NV_path_rendering,
+#endif
+#ifdef GL_NV_path_rendering_shared_edge
+ &__GLEW_NV_path_rendering_shared_edge,
+#endif
+#ifdef GL_NV_pixel_data_range
+ &__GLEW_NV_pixel_data_range,
+#endif
+#ifdef GL_NV_point_sprite
+ &__GLEW_NV_point_sprite,
+#endif
+#ifdef GL_NV_present_video
+ &__GLEW_NV_present_video,
+#endif
+#ifdef GL_NV_primitive_restart
+ &__GLEW_NV_primitive_restart,
+#endif
+#ifdef GL_NV_register_combiners
+ &__GLEW_NV_register_combiners,
+#endif
+#ifdef GL_NV_register_combiners2
+ &__GLEW_NV_register_combiners2,
+#endif
+#ifdef GL_NV_robustness_video_memory_purge
+ &__GLEW_NV_robustness_video_memory_purge,
+#endif
+#ifdef GL_NV_sample_locations
+ &__GLEW_NV_sample_locations,
+#endif
+#ifdef GL_NV_sample_mask_override_coverage
+ &__GLEW_NV_sample_mask_override_coverage,
+#endif
+#ifdef GL_NV_shader_atomic_counters
+ &__GLEW_NV_shader_atomic_counters,
+#endif
+#ifdef GL_NV_shader_atomic_float
+ &__GLEW_NV_shader_atomic_float,
+#endif
+#ifdef GL_NV_shader_atomic_float64
+ &__GLEW_NV_shader_atomic_float64,
+#endif
+#ifdef GL_NV_shader_atomic_fp16_vector
+ &__GLEW_NV_shader_atomic_fp16_vector,
+#endif
+#ifdef GL_NV_shader_atomic_int64
+ &__GLEW_NV_shader_atomic_int64,
+#endif
+#ifdef GL_NV_shader_buffer_load
+ &__GLEW_NV_shader_buffer_load,
+#endif
+#ifdef GL_NV_shader_storage_buffer_object
+ &__GLEW_NV_shader_storage_buffer_object,
+#endif
+#ifdef GL_NV_shader_thread_group
+ &__GLEW_NV_shader_thread_group,
+#endif
+#ifdef GL_NV_shader_thread_shuffle
+ &__GLEW_NV_shader_thread_shuffle,
+#endif
+#ifdef GL_NV_stereo_view_rendering
+ &__GLEW_NV_stereo_view_rendering,
+#endif
+#ifdef GL_NV_tessellation_program5
+ &__GLEW_NV_tessellation_program5,
+#endif
+#ifdef GL_NV_texgen_emboss
+ &__GLEW_NV_texgen_emboss,
+#endif
+#ifdef GL_NV_texgen_reflection
+ &__GLEW_NV_texgen_reflection,
+#endif
+#ifdef GL_NV_texture_barrier
+ &__GLEW_NV_texture_barrier,
+#endif
+#ifdef GL_NV_texture_compression_vtc
+ &__GLEW_NV_texture_compression_vtc,
+#endif
+#ifdef GL_NV_texture_env_combine4
+ &__GLEW_NV_texture_env_combine4,
+#endif
+#ifdef GL_NV_texture_expand_normal
+ &__GLEW_NV_texture_expand_normal,
+#endif
+#ifdef GL_NV_texture_multisample
+ &__GLEW_NV_texture_multisample,
+#endif
+#ifdef GL_NV_texture_rectangle
+ &__GLEW_NV_texture_rectangle,
+#endif
+#ifdef GL_NV_texture_shader
+ &__GLEW_NV_texture_shader,
+#endif
+#ifdef GL_NV_texture_shader2
+ &__GLEW_NV_texture_shader2,
+#endif
+#ifdef GL_NV_texture_shader3
+ &__GLEW_NV_texture_shader3,
+#endif
+#ifdef GL_NV_transform_feedback
+ &__GLEW_NV_transform_feedback,
+#endif
+#ifdef GL_NV_transform_feedback2
+ &__GLEW_NV_transform_feedback2,
+#endif
+#ifdef GL_NV_uniform_buffer_unified_memory
+ &__GLEW_NV_uniform_buffer_unified_memory,
+#endif
+#ifdef GL_NV_vdpau_interop
+ &__GLEW_NV_vdpau_interop,
+#endif
+#ifdef GL_NV_vertex_array_range
+ &__GLEW_NV_vertex_array_range,
+#endif
+#ifdef GL_NV_vertex_array_range2
+ &__GLEW_NV_vertex_array_range2,
+#endif
+#ifdef GL_NV_vertex_attrib_integer_64bit
+ &__GLEW_NV_vertex_attrib_integer_64bit,
+#endif
+#ifdef GL_NV_vertex_buffer_unified_memory
+ &__GLEW_NV_vertex_buffer_unified_memory,
+#endif
+#ifdef GL_NV_vertex_program
+ &__GLEW_NV_vertex_program,
+#endif
+#ifdef GL_NV_vertex_program1_1
+ &__GLEW_NV_vertex_program1_1,
+#endif
+#ifdef GL_NV_vertex_program2
+ &__GLEW_NV_vertex_program2,
+#endif
+#ifdef GL_NV_vertex_program2_option
+ &__GLEW_NV_vertex_program2_option,
+#endif
+#ifdef GL_NV_vertex_program3
+ &__GLEW_NV_vertex_program3,
+#endif
+#ifdef GL_NV_vertex_program4
+ &__GLEW_NV_vertex_program4,
+#endif
+#ifdef GL_NV_video_capture
+ &__GLEW_NV_video_capture,
+#endif
+#ifdef GL_NV_viewport_array2
+ &__GLEW_NV_viewport_array2,
+#endif
+#ifdef GL_NV_viewport_swizzle
+ &__GLEW_NV_viewport_swizzle,
+#endif
+#ifdef GL_OES_byte_coordinates
+ &__GLEW_OES_byte_coordinates,
+#endif
+#ifdef GL_OES_compressed_paletted_texture
+ &__GLEW_OES_compressed_paletted_texture,
+#endif
+#ifdef GL_OES_read_format
+ &__GLEW_OES_read_format,
+#endif
+#ifdef GL_OES_single_precision
+ &__GLEW_OES_single_precision,
+#endif
+#ifdef GL_OML_interlace
+ &__GLEW_OML_interlace,
+#endif
+#ifdef GL_OML_resample
+ &__GLEW_OML_resample,
+#endif
+#ifdef GL_OML_subsample
+ &__GLEW_OML_subsample,
+#endif
+#ifdef GL_OVR_multiview
+ &__GLEW_OVR_multiview,
+#endif
+#ifdef GL_OVR_multiview2
+ &__GLEW_OVR_multiview2,
+#endif
+#ifdef GL_PGI_misc_hints
+ &__GLEW_PGI_misc_hints,
+#endif
+#ifdef GL_PGI_vertex_hints
+ &__GLEW_PGI_vertex_hints,
+#endif
+#ifdef GL_REGAL_ES1_0_compatibility
+ &__GLEW_REGAL_ES1_0_compatibility,
+#endif
+#ifdef GL_REGAL_ES1_1_compatibility
+ &__GLEW_REGAL_ES1_1_compatibility,
+#endif
+#ifdef GL_REGAL_enable
+ &__GLEW_REGAL_enable,
+#endif
+#ifdef GL_REGAL_error_string
+ &__GLEW_REGAL_error_string,
+#endif
+#ifdef GL_REGAL_extension_query
+ &__GLEW_REGAL_extension_query,
+#endif
+#ifdef GL_REGAL_log
+ &__GLEW_REGAL_log,
+#endif
+#ifdef GL_REGAL_proc_address
+ &__GLEW_REGAL_proc_address,
+#endif
+#ifdef GL_REND_screen_coordinates
+ &__GLEW_REND_screen_coordinates,
+#endif
+#ifdef GL_S3_s3tc
+ &__GLEW_S3_s3tc,
+#endif
+#ifdef GL_SGIS_color_range
+ &__GLEW_SGIS_color_range,
+#endif
+#ifdef GL_SGIS_detail_texture
+ &__GLEW_SGIS_detail_texture,
+#endif
+#ifdef GL_SGIS_fog_function
+ &__GLEW_SGIS_fog_function,
+#endif
+#ifdef GL_SGIS_generate_mipmap
+ &__GLEW_SGIS_generate_mipmap,
+#endif
+#ifdef GL_SGIS_multisample
+ &__GLEW_SGIS_multisample,
+#endif
+#ifdef GL_SGIS_pixel_texture
+ &__GLEW_SGIS_pixel_texture,
+#endif
+#ifdef GL_SGIS_point_line_texgen
+ &__GLEW_SGIS_point_line_texgen,
+#endif
+#ifdef GL_SGIS_sharpen_texture
+ &__GLEW_SGIS_sharpen_texture,
+#endif
+#ifdef GL_SGIS_texture4D
+ &__GLEW_SGIS_texture4D,
+#endif
+#ifdef GL_SGIS_texture_border_clamp
+ &__GLEW_SGIS_texture_border_clamp,
+#endif
+#ifdef GL_SGIS_texture_edge_clamp
+ &__GLEW_SGIS_texture_edge_clamp,
+#endif
+#ifdef GL_SGIS_texture_filter4
+ &__GLEW_SGIS_texture_filter4,
+#endif
+#ifdef GL_SGIS_texture_lod
+ &__GLEW_SGIS_texture_lod,
+#endif
+#ifdef GL_SGIS_texture_select
+ &__GLEW_SGIS_texture_select,
+#endif
+#ifdef GL_SGIX_async
+ &__GLEW_SGIX_async,
+#endif
+#ifdef GL_SGIX_async_histogram
+ &__GLEW_SGIX_async_histogram,
+#endif
+#ifdef GL_SGIX_async_pixel
+ &__GLEW_SGIX_async_pixel,
+#endif
+#ifdef GL_SGIX_blend_alpha_minmax
+ &__GLEW_SGIX_blend_alpha_minmax,
+#endif
+#ifdef GL_SGIX_clipmap
+ &__GLEW_SGIX_clipmap,
+#endif
+#ifdef GL_SGIX_convolution_accuracy
+ &__GLEW_SGIX_convolution_accuracy,
+#endif
+#ifdef GL_SGIX_depth_texture
+ &__GLEW_SGIX_depth_texture,
+#endif
+#ifdef GL_SGIX_flush_raster
+ &__GLEW_SGIX_flush_raster,
+#endif
+#ifdef GL_SGIX_fog_offset
+ &__GLEW_SGIX_fog_offset,
+#endif
+#ifdef GL_SGIX_fog_texture
+ &__GLEW_SGIX_fog_texture,
+#endif
+#ifdef GL_SGIX_fragment_specular_lighting
+ &__GLEW_SGIX_fragment_specular_lighting,
+#endif
+#ifdef GL_SGIX_framezoom
+ &__GLEW_SGIX_framezoom,
+#endif
+#ifdef GL_SGIX_interlace
+ &__GLEW_SGIX_interlace,
+#endif
+#ifdef GL_SGIX_ir_instrument1
+ &__GLEW_SGIX_ir_instrument1,
+#endif
+#ifdef GL_SGIX_list_priority
+ &__GLEW_SGIX_list_priority,
+#endif
+#ifdef GL_SGIX_pixel_texture
+ &__GLEW_SGIX_pixel_texture,
+#endif
+#ifdef GL_SGIX_pixel_texture_bits
+ &__GLEW_SGIX_pixel_texture_bits,
+#endif
+#ifdef GL_SGIX_reference_plane
+ &__GLEW_SGIX_reference_plane,
+#endif
+#ifdef GL_SGIX_resample
+ &__GLEW_SGIX_resample,
+#endif
+#ifdef GL_SGIX_shadow
+ &__GLEW_SGIX_shadow,
+#endif
+#ifdef GL_SGIX_shadow_ambient
+ &__GLEW_SGIX_shadow_ambient,
+#endif
+#ifdef GL_SGIX_sprite
+ &__GLEW_SGIX_sprite,
+#endif
+#ifdef GL_SGIX_tag_sample_buffer
+ &__GLEW_SGIX_tag_sample_buffer,
+#endif
+#ifdef GL_SGIX_texture_add_env
+ &__GLEW_SGIX_texture_add_env,
+#endif
+#ifdef GL_SGIX_texture_coordinate_clamp
+ &__GLEW_SGIX_texture_coordinate_clamp,
+#endif
+#ifdef GL_SGIX_texture_lod_bias
+ &__GLEW_SGIX_texture_lod_bias,
+#endif
+#ifdef GL_SGIX_texture_multi_buffer
+ &__GLEW_SGIX_texture_multi_buffer,
+#endif
+#ifdef GL_SGIX_texture_range
+ &__GLEW_SGIX_texture_range,
+#endif
+#ifdef GL_SGIX_texture_scale_bias
+ &__GLEW_SGIX_texture_scale_bias,
+#endif
+#ifdef GL_SGIX_vertex_preclip
+ &__GLEW_SGIX_vertex_preclip,
+#endif
+#ifdef GL_SGIX_vertex_preclip_hint
+ &__GLEW_SGIX_vertex_preclip_hint,
+#endif
+#ifdef GL_SGIX_ycrcb
+ &__GLEW_SGIX_ycrcb,
+#endif
+#ifdef GL_SGI_color_matrix
+ &__GLEW_SGI_color_matrix,
+#endif
+#ifdef GL_SGI_color_table
+ &__GLEW_SGI_color_table,
+#endif
+#ifdef GL_SGI_texture_color_table
+ &__GLEW_SGI_texture_color_table,
+#endif
+#ifdef GL_SUNX_constant_data
+ &__GLEW_SUNX_constant_data,
+#endif
+#ifdef GL_SUN_convolution_border_modes
+ &__GLEW_SUN_convolution_border_modes,
+#endif
+#ifdef GL_SUN_global_alpha
+ &__GLEW_SUN_global_alpha,
+#endif
+#ifdef GL_SUN_mesh_array
+ &__GLEW_SUN_mesh_array,
+#endif
+#ifdef GL_SUN_read_video_pixels
+ &__GLEW_SUN_read_video_pixels,
+#endif
+#ifdef GL_SUN_slice_accum
+ &__GLEW_SUN_slice_accum,
+#endif
+#ifdef GL_SUN_triangle_list
+ &__GLEW_SUN_triangle_list,
+#endif
+#ifdef GL_SUN_vertex
+ &__GLEW_SUN_vertex,
+#endif
+#ifdef GL_WIN_phong_shading
+ &__GLEW_WIN_phong_shading,
+#endif
+#ifdef GL_WIN_specular_fog
+ &__GLEW_WIN_specular_fog,
+#endif
+#ifdef GL_WIN_swap_hint
+ &__GLEW_WIN_swap_hint,
+#endif
+ NULL
+};
+static GLboolean _glewInit_GL_VERSION_1_2 ();
+static GLboolean _glewInit_GL_VERSION_1_3 ();
+static GLboolean _glewInit_GL_VERSION_1_4 ();
+static GLboolean _glewInit_GL_VERSION_1_5 ();
+static GLboolean _glewInit_GL_VERSION_2_0 ();
+static GLboolean _glewInit_GL_VERSION_2_1 ();
+static GLboolean _glewInit_GL_VERSION_3_0 ();
+static GLboolean _glewInit_GL_VERSION_3_1 ();
+static GLboolean _glewInit_GL_VERSION_3_2 ();
+static GLboolean _glewInit_GL_VERSION_3_3 ();
+static GLboolean _glewInit_GL_VERSION_4_0 ();
+static GLboolean _glewInit_GL_VERSION_4_5 ();
+static GLboolean _glewInit_GL_3DFX_tbuffer ();
+static GLboolean _glewInit_GL_AMD_debug_output ();
+static GLboolean _glewInit_GL_AMD_draw_buffers_blend ();
+static GLboolean _glewInit_GL_AMD_interleaved_elements ();
+static GLboolean _glewInit_GL_AMD_multi_draw_indirect ();
+static GLboolean _glewInit_GL_AMD_name_gen_delete ();
+static GLboolean _glewInit_GL_AMD_occlusion_query_event ();
+static GLboolean _glewInit_GL_AMD_performance_monitor ();
+static GLboolean _glewInit_GL_AMD_sample_positions ();
+static GLboolean _glewInit_GL_AMD_sparse_texture ();
+static GLboolean _glewInit_GL_AMD_stencil_operation_extended ();
+static GLboolean _glewInit_GL_AMD_vertex_shader_tessellator ();
+static GLboolean _glewInit_GL_ANGLE_framebuffer_blit ();
+static GLboolean _glewInit_GL_ANGLE_framebuffer_multisample ();
+static GLboolean _glewInit_GL_ANGLE_instanced_arrays ();
+static GLboolean _glewInit_GL_ANGLE_timer_query ();
+static GLboolean _glewInit_GL_ANGLE_translated_shader_source ();
+static GLboolean _glewInit_GL_APPLE_element_array ();
+static GLboolean _glewInit_GL_APPLE_fence ();
+static GLboolean _glewInit_GL_APPLE_flush_buffer_range ();
+static GLboolean _glewInit_GL_APPLE_object_purgeable ();
+static GLboolean _glewInit_GL_APPLE_texture_range ();
+static GLboolean _glewInit_GL_APPLE_vertex_array_object ();
+static GLboolean _glewInit_GL_APPLE_vertex_array_range ();
+static GLboolean _glewInit_GL_APPLE_vertex_program_evaluators ();
+static GLboolean _glewInit_GL_ARB_ES2_compatibility ();
+static GLboolean _glewInit_GL_ARB_ES3_1_compatibility ();
+static GLboolean _glewInit_GL_ARB_ES3_2_compatibility ();
+static GLboolean _glewInit_GL_ARB_base_instance ();
+static GLboolean _glewInit_GL_ARB_bindless_texture ();
+static GLboolean _glewInit_GL_ARB_blend_func_extended ();
+static GLboolean _glewInit_GL_ARB_buffer_storage ();
+static GLboolean _glewInit_GL_ARB_cl_event ();
+static GLboolean _glewInit_GL_ARB_clear_buffer_object ();
+static GLboolean _glewInit_GL_ARB_clear_texture ();
+static GLboolean _glewInit_GL_ARB_clip_control ();
+static GLboolean _glewInit_GL_ARB_color_buffer_float ();
+static GLboolean _glewInit_GL_ARB_compute_shader ();
+static GLboolean _glewInit_GL_ARB_compute_variable_group_size ();
+static GLboolean _glewInit_GL_ARB_copy_buffer ();
+static GLboolean _glewInit_GL_ARB_copy_image ();
+static GLboolean _glewInit_GL_ARB_debug_output ();
+static GLboolean _glewInit_GL_ARB_direct_state_access ();
+static GLboolean _glewInit_GL_ARB_draw_buffers ();
+static GLboolean _glewInit_GL_ARB_draw_buffers_blend ();
+static GLboolean _glewInit_GL_ARB_draw_elements_base_vertex ();
+static GLboolean _glewInit_GL_ARB_draw_indirect ();
+static GLboolean _glewInit_GL_ARB_framebuffer_no_attachments ();
+static GLboolean _glewInit_GL_ARB_framebuffer_object ();
+static GLboolean _glewInit_GL_ARB_geometry_shader4 ();
+static GLboolean _glewInit_GL_ARB_get_program_binary ();
+static GLboolean _glewInit_GL_ARB_get_texture_sub_image ();
+static GLboolean _glewInit_GL_ARB_gl_spirv ();
+static GLboolean _glewInit_GL_ARB_gpu_shader_fp64 ();
+static GLboolean _glewInit_GL_ARB_gpu_shader_int64 ();
+static GLboolean _glewInit_GL_ARB_imaging ();
+static GLboolean _glewInit_GL_ARB_indirect_parameters ();
+static GLboolean _glewInit_GL_ARB_instanced_arrays ();
+static GLboolean _glewInit_GL_ARB_internalformat_query ();
+static GLboolean _glewInit_GL_ARB_internalformat_query2 ();
+static GLboolean _glewInit_GL_ARB_invalidate_subdata ();
+static GLboolean _glewInit_GL_ARB_map_buffer_range ();
+static GLboolean _glewInit_GL_ARB_matrix_palette ();
+static GLboolean _glewInit_GL_ARB_multi_bind ();
+static GLboolean _glewInit_GL_ARB_multi_draw_indirect ();
+static GLboolean _glewInit_GL_ARB_multisample ();
+static GLboolean _glewInit_GL_ARB_multitexture ();
+static GLboolean _glewInit_GL_ARB_occlusion_query ();
+static GLboolean _glewInit_GL_ARB_parallel_shader_compile ();
+static GLboolean _glewInit_GL_ARB_point_parameters ();
+static GLboolean _glewInit_GL_ARB_program_interface_query ();
+static GLboolean _glewInit_GL_ARB_provoking_vertex ();
+static GLboolean _glewInit_GL_ARB_robustness ();
+static GLboolean _glewInit_GL_ARB_sample_locations ();
+static GLboolean _glewInit_GL_ARB_sample_shading ();
+static GLboolean _glewInit_GL_ARB_sampler_objects ();
+static GLboolean _glewInit_GL_ARB_separate_shader_objects ();
+static GLboolean _glewInit_GL_ARB_shader_atomic_counters ();
+static GLboolean _glewInit_GL_ARB_shader_image_load_store ();
+static GLboolean _glewInit_GL_ARB_shader_objects ();
+static GLboolean _glewInit_GL_ARB_shader_storage_buffer_object ();
+static GLboolean _glewInit_GL_ARB_shader_subroutine ();
+static GLboolean _glewInit_GL_ARB_shading_language_include ();
+static GLboolean _glewInit_GL_ARB_sparse_buffer ();
+static GLboolean _glewInit_GL_ARB_sparse_texture ();
+static GLboolean _glewInit_GL_ARB_sync ();
+static GLboolean _glewInit_GL_ARB_tessellation_shader ();
+static GLboolean _glewInit_GL_ARB_texture_barrier ();
+static GLboolean _glewInit_GL_ARB_texture_buffer_object ();
+static GLboolean _glewInit_GL_ARB_texture_buffer_range ();
+static GLboolean _glewInit_GL_ARB_texture_compression ();
+static GLboolean _glewInit_GL_ARB_texture_multisample ();
+static GLboolean _glewInit_GL_ARB_texture_storage ();
+static GLboolean _glewInit_GL_ARB_texture_storage_multisample ();
+static GLboolean _glewInit_GL_ARB_texture_view ();
+static GLboolean _glewInit_GL_ARB_timer_query ();
+static GLboolean _glewInit_GL_ARB_transform_feedback2 ();
+static GLboolean _glewInit_GL_ARB_transform_feedback3 ();
+static GLboolean _glewInit_GL_ARB_transform_feedback_instanced ();
+static GLboolean _glewInit_GL_ARB_transpose_matrix ();
+static GLboolean _glewInit_GL_ARB_uniform_buffer_object ();
+static GLboolean _glewInit_GL_ARB_vertex_array_object ();
+static GLboolean _glewInit_GL_ARB_vertex_attrib_64bit ();
+static GLboolean _glewInit_GL_ARB_vertex_attrib_binding ();
+static GLboolean _glewInit_GL_ARB_vertex_blend ();
+static GLboolean _glewInit_GL_ARB_vertex_buffer_object ();
+static GLboolean _glewInit_GL_ARB_vertex_program ();
+static GLboolean _glewInit_GL_ARB_vertex_shader ();
+static GLboolean _glewInit_GL_ARB_vertex_type_2_10_10_10_rev ();
+static GLboolean _glewInit_GL_ARB_viewport_array ();
+static GLboolean _glewInit_GL_ARB_window_pos ();
+static GLboolean _glewInit_GL_ATI_draw_buffers ();
+static GLboolean _glewInit_GL_ATI_element_array ();
+static GLboolean _glewInit_GL_ATI_envmap_bumpmap ();
+static GLboolean _glewInit_GL_ATI_fragment_shader ();
+static GLboolean _glewInit_GL_ATI_map_object_buffer ();
+static GLboolean _glewInit_GL_ATI_pn_triangles ();
+static GLboolean _glewInit_GL_ATI_separate_stencil ();
+static GLboolean _glewInit_GL_ATI_vertex_array_object ();
+static GLboolean _glewInit_GL_ATI_vertex_attrib_array_object ();
+static GLboolean _glewInit_GL_ATI_vertex_streams ();
+static GLboolean _glewInit_GL_EXT_bindable_uniform ();
+static GLboolean _glewInit_GL_EXT_blend_color ();
+static GLboolean _glewInit_GL_EXT_blend_equation_separate ();
+static GLboolean _glewInit_GL_EXT_blend_func_separate ();
+static GLboolean _glewInit_GL_EXT_blend_minmax ();
+static GLboolean _glewInit_GL_EXT_color_subtable ();
+static GLboolean _glewInit_GL_EXT_compiled_vertex_array ();
+static GLboolean _glewInit_GL_EXT_convolution ();
+static GLboolean _glewInit_GL_EXT_coordinate_frame ();
+static GLboolean _glewInit_GL_EXT_copy_texture ();
+static GLboolean _glewInit_GL_EXT_cull_vertex ();
+static GLboolean _glewInit_GL_EXT_debug_label ();
+static GLboolean _glewInit_GL_EXT_debug_marker ();
+static GLboolean _glewInit_GL_EXT_depth_bounds_test ();
+static GLboolean _glewInit_GL_EXT_direct_state_access ();
+static GLboolean _glewInit_GL_EXT_draw_buffers2 ();
+static GLboolean _glewInit_GL_EXT_draw_instanced ();
+static GLboolean _glewInit_GL_EXT_draw_range_elements ();
+static GLboolean _glewInit_GL_EXT_fog_coord ();
+static GLboolean _glewInit_GL_EXT_fragment_lighting ();
+static GLboolean _glewInit_GL_EXT_framebuffer_blit ();
+static GLboolean _glewInit_GL_EXT_framebuffer_multisample ();
+static GLboolean _glewInit_GL_EXT_framebuffer_object ();
+static GLboolean _glewInit_GL_EXT_geometry_shader4 ();
+static GLboolean _glewInit_GL_EXT_gpu_program_parameters ();
+static GLboolean _glewInit_GL_EXT_gpu_shader4 ();
+static GLboolean _glewInit_GL_EXT_histogram ();
+static GLboolean _glewInit_GL_EXT_index_func ();
+static GLboolean _glewInit_GL_EXT_index_material ();
+static GLboolean _glewInit_GL_EXT_light_texture ();
+static GLboolean _glewInit_GL_EXT_multi_draw_arrays ();
+static GLboolean _glewInit_GL_EXT_multisample ();
+static GLboolean _glewInit_GL_EXT_paletted_texture ();
+static GLboolean _glewInit_GL_EXT_pixel_transform ();
+static GLboolean _glewInit_GL_EXT_point_parameters ();
+static GLboolean _glewInit_GL_EXT_polygon_offset ();
+static GLboolean _glewInit_GL_EXT_polygon_offset_clamp ();
+static GLboolean _glewInit_GL_EXT_provoking_vertex ();
+static GLboolean _glewInit_GL_EXT_raster_multisample ();
+static GLboolean _glewInit_GL_EXT_scene_marker ();
+static GLboolean _glewInit_GL_EXT_secondary_color ();
+static GLboolean _glewInit_GL_EXT_separate_shader_objects ();
+static GLboolean _glewInit_GL_EXT_shader_image_load_store ();
+static GLboolean _glewInit_GL_EXT_stencil_two_side ();
+static GLboolean _glewInit_GL_EXT_subtexture ();
+static GLboolean _glewInit_GL_EXT_texture3D ();
+static GLboolean _glewInit_GL_EXT_texture_array ();
+static GLboolean _glewInit_GL_EXT_texture_buffer_object ();
+static GLboolean _glewInit_GL_EXT_texture_integer ();
+static GLboolean _glewInit_GL_EXT_texture_object ();
+static GLboolean _glewInit_GL_EXT_texture_perturb_normal ();
+static GLboolean _glewInit_GL_EXT_timer_query ();
+static GLboolean _glewInit_GL_EXT_transform_feedback ();
+static GLboolean _glewInit_GL_EXT_vertex_array ();
+static GLboolean _glewInit_GL_EXT_vertex_attrib_64bit ();
+static GLboolean _glewInit_GL_EXT_vertex_shader ();
+static GLboolean _glewInit_GL_EXT_vertex_weighting ();
+static GLboolean _glewInit_GL_EXT_window_rectangles ();
+static GLboolean _glewInit_GL_EXT_x11_sync_object ();
+static GLboolean _glewInit_GL_GREMEDY_frame_terminator ();
+static GLboolean _glewInit_GL_GREMEDY_string_marker ();
+static GLboolean _glewInit_GL_HP_image_transform ();
+static GLboolean _glewInit_GL_IBM_multimode_draw_arrays ();
+static GLboolean _glewInit_GL_IBM_vertex_array_lists ();
+static GLboolean _glewInit_GL_INTEL_map_texture ();
+static GLboolean _glewInit_GL_INTEL_parallel_arrays ();
+static GLboolean _glewInit_GL_INTEL_performance_query ();
+static GLboolean _glewInit_GL_INTEL_texture_scissor ();
+static GLboolean _glewInit_GL_KHR_blend_equation_advanced ();
+static GLboolean _glewInit_GL_KHR_debug ();
+static GLboolean _glewInit_GL_KHR_robustness ();
+static GLboolean _glewInit_GL_KTX_buffer_region ();
+static GLboolean _glewInit_GL_MESA_resize_buffers ();
+static GLboolean _glewInit_GL_MESA_window_pos ();
+static GLboolean _glewInit_GL_NVX_conditional_render ();
+static GLboolean _glewInit_GL_NVX_linked_gpu_multicast ();
+static GLboolean _glewInit_GL_NV_bindless_multi_draw_indirect ();
+static GLboolean _glewInit_GL_NV_bindless_multi_draw_indirect_count ();
+static GLboolean _glewInit_GL_NV_bindless_texture ();
+static GLboolean _glewInit_GL_NV_blend_equation_advanced ();
+static GLboolean _glewInit_GL_NV_clip_space_w_scaling ();
+static GLboolean _glewInit_GL_NV_command_list ();
+static GLboolean _glewInit_GL_NV_conditional_render ();
+static GLboolean _glewInit_GL_NV_conservative_raster ();
+static GLboolean _glewInit_GL_NV_conservative_raster_dilate ();
+static GLboolean _glewInit_GL_NV_conservative_raster_pre_snap_triangles ();
+static GLboolean _glewInit_GL_NV_copy_image ();
+static GLboolean _glewInit_GL_NV_depth_buffer_float ();
+static GLboolean _glewInit_GL_NV_draw_texture ();
+static GLboolean _glewInit_GL_NV_draw_vulkan_image ();
+static GLboolean _glewInit_GL_NV_evaluators ();
+static GLboolean _glewInit_GL_NV_explicit_multisample ();
+static GLboolean _glewInit_GL_NV_fence ();
+static GLboolean _glewInit_GL_NV_fragment_coverage_to_color ();
+static GLboolean _glewInit_GL_NV_fragment_program ();
+static GLboolean _glewInit_GL_NV_framebuffer_multisample_coverage ();
+static GLboolean _glewInit_GL_NV_geometry_program4 ();
+static GLboolean _glewInit_GL_NV_gpu_multicast ();
+static GLboolean _glewInit_GL_NV_gpu_program4 ();
+static GLboolean _glewInit_GL_NV_gpu_shader5 ();
+static GLboolean _glewInit_GL_NV_half_float ();
+static GLboolean _glewInit_GL_NV_internalformat_sample_query ();
+static GLboolean _glewInit_GL_NV_occlusion_query ();
+static GLboolean _glewInit_GL_NV_parameter_buffer_object ();
+static GLboolean _glewInit_GL_NV_path_rendering ();
+static GLboolean _glewInit_GL_NV_pixel_data_range ();
+static GLboolean _glewInit_GL_NV_point_sprite ();
+static GLboolean _glewInit_GL_NV_present_video ();
+static GLboolean _glewInit_GL_NV_primitive_restart ();
+static GLboolean _glewInit_GL_NV_register_combiners ();
+static GLboolean _glewInit_GL_NV_register_combiners2 ();
+static GLboolean _glewInit_GL_NV_sample_locations ();
+static GLboolean _glewInit_GL_NV_shader_buffer_load ();
+static GLboolean _glewInit_GL_NV_texture_barrier ();
+static GLboolean _glewInit_GL_NV_texture_multisample ();
+static GLboolean _glewInit_GL_NV_transform_feedback ();
+static GLboolean _glewInit_GL_NV_transform_feedback2 ();
+static GLboolean _glewInit_GL_NV_vdpau_interop ();
+static GLboolean _glewInit_GL_NV_vertex_array_range ();
+static GLboolean _glewInit_GL_NV_vertex_attrib_integer_64bit ();
+static GLboolean _glewInit_GL_NV_vertex_buffer_unified_memory ();
+static GLboolean _glewInit_GL_NV_vertex_program ();
+static GLboolean _glewInit_GL_NV_video_capture ();
+static GLboolean _glewInit_GL_NV_viewport_swizzle ();
+static GLboolean _glewInit_GL_OES_single_precision ();
+static GLboolean _glewInit_GL_OVR_multiview ();
+static GLboolean _glewInit_GL_REGAL_ES1_0_compatibility ();
+static GLboolean _glewInit_GL_REGAL_ES1_1_compatibility ();
+static GLboolean _glewInit_GL_REGAL_error_string ();
+static GLboolean _glewInit_GL_REGAL_extension_query ();
+static GLboolean _glewInit_GL_REGAL_log ();
+static GLboolean _glewInit_GL_REGAL_proc_address ();
+static GLboolean _glewInit_GL_SGIS_detail_texture ();
+static GLboolean _glewInit_GL_SGIS_fog_function ();
+static GLboolean _glewInit_GL_SGIS_multisample ();
+static GLboolean _glewInit_GL_SGIS_sharpen_texture ();
+static GLboolean _glewInit_GL_SGIS_texture4D ();
+static GLboolean _glewInit_GL_SGIS_texture_filter4 ();
+static GLboolean _glewInit_GL_SGIX_async ();
+static GLboolean _glewInit_GL_SGIX_flush_raster ();
+static GLboolean _glewInit_GL_SGIX_fog_texture ();
+static GLboolean _glewInit_GL_SGIX_fragment_specular_lighting ();
+static GLboolean _glewInit_GL_SGIX_framezoom ();
+static GLboolean _glewInit_GL_SGIX_pixel_texture ();
+static GLboolean _glewInit_GL_SGIX_reference_plane ();
+static GLboolean _glewInit_GL_SGIX_sprite ();
+static GLboolean _glewInit_GL_SGIX_tag_sample_buffer ();
+static GLboolean _glewInit_GL_SGI_color_table ();
+static GLboolean _glewInit_GL_SUNX_constant_data ();
+static GLboolean _glewInit_GL_SUN_global_alpha ();
+static GLboolean _glewInit_GL_SUN_read_video_pixels ();
+static GLboolean _glewInit_GL_SUN_triangle_list ();
+static GLboolean _glewInit_GL_SUN_vertex ();
+static GLboolean _glewInit_GL_WIN_swap_hint ();
#ifdef GL_VERSION_1_2
-static GLboolean _glewInit_GL_VERSION_1_2 (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_VERSION_1_2 ()
{
GLboolean r = GL_FALSE;
@@ -3578,7 +7547,7 @@ static GLboolean _glewInit_GL_VERSION_1_2 (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_VERSION_1_3
-static GLboolean _glewInit_GL_VERSION_1_3 (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_VERSION_1_3 ()
{
GLboolean r = GL_FALSE;
@@ -3636,7 +7605,7 @@ static GLboolean _glewInit_GL_VERSION_1_3 (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_VERSION_1_4
-static GLboolean _glewInit_GL_VERSION_1_4 (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_VERSION_1_4 ()
{
GLboolean r = GL_FALSE;
@@ -3695,7 +7664,7 @@ static GLboolean _glewInit_GL_VERSION_1_4 (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_VERSION_1_5
-static GLboolean _glewInit_GL_VERSION_1_5 (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_VERSION_1_5 ()
{
GLboolean r = GL_FALSE;
@@ -3726,7 +7695,7 @@ static GLboolean _glewInit_GL_VERSION_1_5 (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_VERSION_2_0
-static GLboolean _glewInit_GL_VERSION_2_0 (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_VERSION_2_0 ()
{
GLboolean r = GL_FALSE;
@@ -3831,7 +7800,7 @@ static GLboolean _glewInit_GL_VERSION_2_0 (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_VERSION_2_1
-static GLboolean _glewInit_GL_VERSION_2_1 (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_VERSION_2_1 ()
{
GLboolean r = GL_FALSE;
@@ -3849,10 +7818,15 @@ static GLboolean _glewInit_GL_VERSION_2_1 (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_VERSION_3_0
-static GLboolean _glewInit_GL_VERSION_3_0 (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_VERSION_3_0 ()
{
GLboolean r = GL_FALSE;
+ r = _glewInit_GL_ARB_framebuffer_object() || r;
+ r = _glewInit_GL_ARB_map_buffer_range() || r;
+ r = _glewInit_GL_ARB_uniform_buffer_object() || r;
+ r = _glewInit_GL_ARB_vertex_array_object() || r;
+
r = ((glBeginConditionalRender = (PFNGLBEGINCONDITIONALRENDERPROC)glewGetProcAddress((const GLubyte*)"glBeginConditionalRender")) == NULL) || r;
r = ((glBeginTransformFeedback = (PFNGLBEGINTRANSFORMFEEDBACKPROC)glewGetProcAddress((const GLubyte*)"glBeginTransformFeedback")) == NULL) || r;
r = ((glBindFragDataLocation = (PFNGLBINDFRAGDATALOCATIONPROC)glewGetProcAddress((const GLubyte*)"glBindFragDataLocation")) == NULL) || r;
@@ -3916,10 +7890,12 @@ static GLboolean _glewInit_GL_VERSION_3_0 (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_VERSION_3_1
-static GLboolean _glewInit_GL_VERSION_3_1 (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_VERSION_3_1 ()
{
GLboolean r = GL_FALSE;
+ r = _glewInit_GL_ARB_copy_buffer() || r;
+
r = ((glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDPROC)glewGetProcAddress((const GLubyte*)"glDrawArraysInstanced")) == NULL) || r;
r = ((glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDPROC)glewGetProcAddress((const GLubyte*)"glDrawElementsInstanced")) == NULL) || r;
r = ((glPrimitiveRestartIndex = (PFNGLPRIMITIVERESTARTINDEXPROC)glewGetProcAddress((const GLubyte*)"glPrimitiveRestartIndex")) == NULL) || r;
@@ -3932,10 +7908,15 @@ static GLboolean _glewInit_GL_VERSION_3_1 (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_VERSION_3_2
-static GLboolean _glewInit_GL_VERSION_3_2 (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_VERSION_3_2 ()
{
GLboolean r = GL_FALSE;
+ r = _glewInit_GL_ARB_draw_elements_base_vertex() || r;
+ r = _glewInit_GL_ARB_provoking_vertex() || r;
+ r = _glewInit_GL_ARB_sync() || r;
+ r = _glewInit_GL_ARB_texture_multisample() || r;
+
r = ((glFramebufferTexture = (PFNGLFRAMEBUFFERTEXTUREPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTexture")) == NULL) || r;
r = ((glGetBufferParameteri64v = (PFNGLGETBUFFERPARAMETERI64VPROC)glewGetProcAddress((const GLubyte*)"glGetBufferParameteri64v")) == NULL) || r;
r = ((glGetInteger64i_v = (PFNGLGETINTEGER64I_VPROC)glewGetProcAddress((const GLubyte*)"glGetInteger64i_v")) == NULL) || r;
@@ -3947,7 +7928,7 @@ static GLboolean _glewInit_GL_VERSION_3_2 (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_VERSION_3_3
-static GLboolean _glewInit_GL_VERSION_3_3 (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_VERSION_3_3 ()
{
GLboolean r = GL_FALSE;
@@ -3960,7 +7941,7 @@ static GLboolean _glewInit_GL_VERSION_3_3 (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_VERSION_4_0
-static GLboolean _glewInit_GL_VERSION_4_0 (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_VERSION_4_0 ()
{
GLboolean r = GL_FALSE;
@@ -3977,7 +7958,7 @@ static GLboolean _glewInit_GL_VERSION_4_0 (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_VERSION_4_5
-static GLboolean _glewInit_GL_VERSION_4_5 (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_VERSION_4_5 ()
{
GLboolean r = GL_FALSE;
@@ -3993,7 +7974,7 @@ static GLboolean _glewInit_GL_VERSION_4_5 (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_3DFX_tbuffer
-static GLboolean _glewInit_GL_3DFX_tbuffer (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_3DFX_tbuffer ()
{
GLboolean r = GL_FALSE;
@@ -4006,7 +7987,7 @@ static GLboolean _glewInit_GL_3DFX_tbuffer (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_AMD_debug_output
-static GLboolean _glewInit_GL_AMD_debug_output (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_AMD_debug_output ()
{
GLboolean r = GL_FALSE;
@@ -4022,7 +8003,7 @@ static GLboolean _glewInit_GL_AMD_debug_output (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_AMD_draw_buffers_blend
-static GLboolean _glewInit_GL_AMD_draw_buffers_blend (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_AMD_draw_buffers_blend ()
{
GLboolean r = GL_FALSE;
@@ -4038,7 +8019,7 @@ static GLboolean _glewInit_GL_AMD_draw_buffers_blend (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_AMD_interleaved_elements
-static GLboolean _glewInit_GL_AMD_interleaved_elements (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_AMD_interleaved_elements ()
{
GLboolean r = GL_FALSE;
@@ -4051,7 +8032,7 @@ static GLboolean _glewInit_GL_AMD_interleaved_elements (GLEW_CONTEXT_ARG_DEF_INI
#ifdef GL_AMD_multi_draw_indirect
-static GLboolean _glewInit_GL_AMD_multi_draw_indirect (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_AMD_multi_draw_indirect ()
{
GLboolean r = GL_FALSE;
@@ -4065,7 +8046,7 @@ static GLboolean _glewInit_GL_AMD_multi_draw_indirect (GLEW_CONTEXT_ARG_DEF_INIT
#ifdef GL_AMD_name_gen_delete
-static GLboolean _glewInit_GL_AMD_name_gen_delete (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_AMD_name_gen_delete ()
{
GLboolean r = GL_FALSE;
@@ -4080,7 +8061,7 @@ static GLboolean _glewInit_GL_AMD_name_gen_delete (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_AMD_occlusion_query_event
-static GLboolean _glewInit_GL_AMD_occlusion_query_event (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_AMD_occlusion_query_event ()
{
GLboolean r = GL_FALSE;
@@ -4093,7 +8074,7 @@ static GLboolean _glewInit_GL_AMD_occlusion_query_event (GLEW_CONTEXT_ARG_DEF_IN
#ifdef GL_AMD_performance_monitor
-static GLboolean _glewInit_GL_AMD_performance_monitor (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_AMD_performance_monitor ()
{
GLboolean r = GL_FALSE;
@@ -4116,7 +8097,7 @@ static GLboolean _glewInit_GL_AMD_performance_monitor (GLEW_CONTEXT_ARG_DEF_INIT
#ifdef GL_AMD_sample_positions
-static GLboolean _glewInit_GL_AMD_sample_positions (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_AMD_sample_positions ()
{
GLboolean r = GL_FALSE;
@@ -4129,7 +8110,7 @@ static GLboolean _glewInit_GL_AMD_sample_positions (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_AMD_sparse_texture
-static GLboolean _glewInit_GL_AMD_sparse_texture (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_AMD_sparse_texture ()
{
GLboolean r = GL_FALSE;
@@ -4143,7 +8124,7 @@ static GLboolean _glewInit_GL_AMD_sparse_texture (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_AMD_stencil_operation_extended
-static GLboolean _glewInit_GL_AMD_stencil_operation_extended (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_AMD_stencil_operation_extended ()
{
GLboolean r = GL_FALSE;
@@ -4156,7 +8137,7 @@ static GLboolean _glewInit_GL_AMD_stencil_operation_extended (GLEW_CONTEXT_ARG_D
#ifdef GL_AMD_vertex_shader_tessellator
-static GLboolean _glewInit_GL_AMD_vertex_shader_tessellator (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_AMD_vertex_shader_tessellator ()
{
GLboolean r = GL_FALSE;
@@ -4170,7 +8151,7 @@ static GLboolean _glewInit_GL_AMD_vertex_shader_tessellator (GLEW_CONTEXT_ARG_DE
#ifdef GL_ANGLE_framebuffer_blit
-static GLboolean _glewInit_GL_ANGLE_framebuffer_blit (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ANGLE_framebuffer_blit ()
{
GLboolean r = GL_FALSE;
@@ -4183,7 +8164,7 @@ static GLboolean _glewInit_GL_ANGLE_framebuffer_blit (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ANGLE_framebuffer_multisample
-static GLboolean _glewInit_GL_ANGLE_framebuffer_multisample (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ANGLE_framebuffer_multisample ()
{
GLboolean r = GL_FALSE;
@@ -4196,7 +8177,7 @@ static GLboolean _glewInit_GL_ANGLE_framebuffer_multisample (GLEW_CONTEXT_ARG_DE
#ifdef GL_ANGLE_instanced_arrays
-static GLboolean _glewInit_GL_ANGLE_instanced_arrays (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ANGLE_instanced_arrays ()
{
GLboolean r = GL_FALSE;
@@ -4211,7 +8192,7 @@ static GLboolean _glewInit_GL_ANGLE_instanced_arrays (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ANGLE_timer_query
-static GLboolean _glewInit_GL_ANGLE_timer_query (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ANGLE_timer_query ()
{
GLboolean r = GL_FALSE;
@@ -4234,7 +8215,7 @@ static GLboolean _glewInit_GL_ANGLE_timer_query (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ANGLE_translated_shader_source
-static GLboolean _glewInit_GL_ANGLE_translated_shader_source (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ANGLE_translated_shader_source ()
{
GLboolean r = GL_FALSE;
@@ -4247,7 +8228,7 @@ static GLboolean _glewInit_GL_ANGLE_translated_shader_source (GLEW_CONTEXT_ARG_D
#ifdef GL_APPLE_element_array
-static GLboolean _glewInit_GL_APPLE_element_array (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_APPLE_element_array ()
{
GLboolean r = GL_FALSE;
@@ -4264,7 +8245,7 @@ static GLboolean _glewInit_GL_APPLE_element_array (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_APPLE_fence
-static GLboolean _glewInit_GL_APPLE_fence (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_APPLE_fence ()
{
GLboolean r = GL_FALSE;
@@ -4284,7 +8265,7 @@ static GLboolean _glewInit_GL_APPLE_fence (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_APPLE_flush_buffer_range
-static GLboolean _glewInit_GL_APPLE_flush_buffer_range (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_APPLE_flush_buffer_range ()
{
GLboolean r = GL_FALSE;
@@ -4298,7 +8279,7 @@ static GLboolean _glewInit_GL_APPLE_flush_buffer_range (GLEW_CONTEXT_ARG_DEF_INI
#ifdef GL_APPLE_object_purgeable
-static GLboolean _glewInit_GL_APPLE_object_purgeable (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_APPLE_object_purgeable ()
{
GLboolean r = GL_FALSE;
@@ -4313,7 +8294,7 @@ static GLboolean _glewInit_GL_APPLE_object_purgeable (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_APPLE_texture_range
-static GLboolean _glewInit_GL_APPLE_texture_range (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_APPLE_texture_range ()
{
GLboolean r = GL_FALSE;
@@ -4327,7 +8308,7 @@ static GLboolean _glewInit_GL_APPLE_texture_range (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_APPLE_vertex_array_object
-static GLboolean _glewInit_GL_APPLE_vertex_array_object (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_APPLE_vertex_array_object ()
{
GLboolean r = GL_FALSE;
@@ -4343,7 +8324,7 @@ static GLboolean _glewInit_GL_APPLE_vertex_array_object (GLEW_CONTEXT_ARG_DEF_IN
#ifdef GL_APPLE_vertex_array_range
-static GLboolean _glewInit_GL_APPLE_vertex_array_range (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_APPLE_vertex_array_range ()
{
GLboolean r = GL_FALSE;
@@ -4358,7 +8339,7 @@ static GLboolean _glewInit_GL_APPLE_vertex_array_range (GLEW_CONTEXT_ARG_DEF_INI
#ifdef GL_APPLE_vertex_program_evaluators
-static GLboolean _glewInit_GL_APPLE_vertex_program_evaluators (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_APPLE_vertex_program_evaluators ()
{
GLboolean r = GL_FALSE;
@@ -4377,7 +8358,7 @@ static GLboolean _glewInit_GL_APPLE_vertex_program_evaluators (GLEW_CONTEXT_ARG_
#ifdef GL_ARB_ES2_compatibility
-static GLboolean _glewInit_GL_ARB_ES2_compatibility (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_ES2_compatibility ()
{
GLboolean r = GL_FALSE;
@@ -4394,7 +8375,7 @@ static GLboolean _glewInit_GL_ARB_ES2_compatibility (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_ES3_1_compatibility
-static GLboolean _glewInit_GL_ARB_ES3_1_compatibility (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_ES3_1_compatibility ()
{
GLboolean r = GL_FALSE;
@@ -4407,7 +8388,7 @@ static GLboolean _glewInit_GL_ARB_ES3_1_compatibility (GLEW_CONTEXT_ARG_DEF_INIT
#ifdef GL_ARB_ES3_2_compatibility
-static GLboolean _glewInit_GL_ARB_ES3_2_compatibility (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_ES3_2_compatibility ()
{
GLboolean r = GL_FALSE;
@@ -4420,7 +8401,7 @@ static GLboolean _glewInit_GL_ARB_ES3_2_compatibility (GLEW_CONTEXT_ARG_DEF_INIT
#ifdef GL_ARB_base_instance
-static GLboolean _glewInit_GL_ARB_base_instance (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_base_instance ()
{
GLboolean r = GL_FALSE;
@@ -4435,7 +8416,7 @@ static GLboolean _glewInit_GL_ARB_base_instance (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_bindless_texture
-static GLboolean _glewInit_GL_ARB_bindless_texture (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_bindless_texture ()
{
GLboolean r = GL_FALSE;
@@ -4463,7 +8444,7 @@ static GLboolean _glewInit_GL_ARB_bindless_texture (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_blend_func_extended
-static GLboolean _glewInit_GL_ARB_blend_func_extended (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_blend_func_extended ()
{
GLboolean r = GL_FALSE;
@@ -4477,7 +8458,7 @@ static GLboolean _glewInit_GL_ARB_blend_func_extended (GLEW_CONTEXT_ARG_DEF_INIT
#ifdef GL_ARB_buffer_storage
-static GLboolean _glewInit_GL_ARB_buffer_storage (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_buffer_storage ()
{
GLboolean r = GL_FALSE;
@@ -4491,7 +8472,7 @@ static GLboolean _glewInit_GL_ARB_buffer_storage (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_cl_event
-static GLboolean _glewInit_GL_ARB_cl_event (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_cl_event ()
{
GLboolean r = GL_FALSE;
@@ -4504,7 +8485,7 @@ static GLboolean _glewInit_GL_ARB_cl_event (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_clear_buffer_object
-static GLboolean _glewInit_GL_ARB_clear_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_clear_buffer_object ()
{
GLboolean r = GL_FALSE;
@@ -4520,7 +8501,7 @@ static GLboolean _glewInit_GL_ARB_clear_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT
#ifdef GL_ARB_clear_texture
-static GLboolean _glewInit_GL_ARB_clear_texture (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_clear_texture ()
{
GLboolean r = GL_FALSE;
@@ -4534,7 +8515,7 @@ static GLboolean _glewInit_GL_ARB_clear_texture (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_clip_control
-static GLboolean _glewInit_GL_ARB_clip_control (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_clip_control ()
{
GLboolean r = GL_FALSE;
@@ -4547,7 +8528,7 @@ static GLboolean _glewInit_GL_ARB_clip_control (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_color_buffer_float
-static GLboolean _glewInit_GL_ARB_color_buffer_float (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_color_buffer_float ()
{
GLboolean r = GL_FALSE;
@@ -4560,7 +8541,7 @@ static GLboolean _glewInit_GL_ARB_color_buffer_float (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_compute_shader
-static GLboolean _glewInit_GL_ARB_compute_shader (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_compute_shader ()
{
GLboolean r = GL_FALSE;
@@ -4574,7 +8555,7 @@ static GLboolean _glewInit_GL_ARB_compute_shader (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_compute_variable_group_size
-static GLboolean _glewInit_GL_ARB_compute_variable_group_size (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_compute_variable_group_size ()
{
GLboolean r = GL_FALSE;
@@ -4587,7 +8568,7 @@ static GLboolean _glewInit_GL_ARB_compute_variable_group_size (GLEW_CONTEXT_ARG_
#ifdef GL_ARB_copy_buffer
-static GLboolean _glewInit_GL_ARB_copy_buffer (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_copy_buffer ()
{
GLboolean r = GL_FALSE;
@@ -4600,7 +8581,7 @@ static GLboolean _glewInit_GL_ARB_copy_buffer (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_copy_image
-static GLboolean _glewInit_GL_ARB_copy_image (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_copy_image ()
{
GLboolean r = GL_FALSE;
@@ -4613,7 +8594,7 @@ static GLboolean _glewInit_GL_ARB_copy_image (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_debug_output
-static GLboolean _glewInit_GL_ARB_debug_output (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_debug_output ()
{
GLboolean r = GL_FALSE;
@@ -4629,7 +8610,7 @@ static GLboolean _glewInit_GL_ARB_debug_output (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_direct_state_access
-static GLboolean _glewInit_GL_ARB_direct_state_access (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_direct_state_access ()
{
GLboolean r = GL_FALSE;
@@ -4738,7 +8719,7 @@ static GLboolean _glewInit_GL_ARB_direct_state_access (GLEW_CONTEXT_ARG_DEF_INIT
#ifdef GL_ARB_draw_buffers
-static GLboolean _glewInit_GL_ARB_draw_buffers (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_draw_buffers ()
{
GLboolean r = GL_FALSE;
@@ -4751,7 +8732,7 @@ static GLboolean _glewInit_GL_ARB_draw_buffers (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_draw_buffers_blend
-static GLboolean _glewInit_GL_ARB_draw_buffers_blend (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_draw_buffers_blend ()
{
GLboolean r = GL_FALSE;
@@ -4767,7 +8748,7 @@ static GLboolean _glewInit_GL_ARB_draw_buffers_blend (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_draw_elements_base_vertex
-static GLboolean _glewInit_GL_ARB_draw_elements_base_vertex (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_draw_elements_base_vertex ()
{
GLboolean r = GL_FALSE;
@@ -4783,7 +8764,7 @@ static GLboolean _glewInit_GL_ARB_draw_elements_base_vertex (GLEW_CONTEXT_ARG_DE
#ifdef GL_ARB_draw_indirect
-static GLboolean _glewInit_GL_ARB_draw_indirect (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_draw_indirect ()
{
GLboolean r = GL_FALSE;
@@ -4797,7 +8778,7 @@ static GLboolean _glewInit_GL_ARB_draw_indirect (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_framebuffer_no_attachments
-static GLboolean _glewInit_GL_ARB_framebuffer_no_attachments (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_framebuffer_no_attachments ()
{
GLboolean r = GL_FALSE;
@@ -4813,7 +8794,7 @@ static GLboolean _glewInit_GL_ARB_framebuffer_no_attachments (GLEW_CONTEXT_ARG_D
#ifdef GL_ARB_framebuffer_object
-static GLboolean _glewInit_GL_ARB_framebuffer_object (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_framebuffer_object ()
{
GLboolean r = GL_FALSE;
@@ -4845,7 +8826,7 @@ static GLboolean _glewInit_GL_ARB_framebuffer_object (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_geometry_shader4
-static GLboolean _glewInit_GL_ARB_geometry_shader4 (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_geometry_shader4 ()
{
GLboolean r = GL_FALSE;
@@ -4861,7 +8842,7 @@ static GLboolean _glewInit_GL_ARB_geometry_shader4 (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_get_program_binary
-static GLboolean _glewInit_GL_ARB_get_program_binary (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_get_program_binary ()
{
GLboolean r = GL_FALSE;
@@ -4876,7 +8857,7 @@ static GLboolean _glewInit_GL_ARB_get_program_binary (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_get_texture_sub_image
-static GLboolean _glewInit_GL_ARB_get_texture_sub_image (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_get_texture_sub_image ()
{
GLboolean r = GL_FALSE;
@@ -4888,9 +8869,22 @@ static GLboolean _glewInit_GL_ARB_get_texture_sub_image (GLEW_CONTEXT_ARG_DEF_IN
#endif /* GL_ARB_get_texture_sub_image */
+#ifdef GL_ARB_gl_spirv
+
+static GLboolean _glewInit_GL_ARB_gl_spirv ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((glSpecializeShaderARB = (PFNGLSPECIALIZESHADERARBPROC)glewGetProcAddress((const GLubyte*)"glSpecializeShaderARB")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* GL_ARB_gl_spirv */
+
#ifdef GL_ARB_gpu_shader_fp64
-static GLboolean _glewInit_GL_ARB_gpu_shader_fp64 (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_gpu_shader_fp64 ()
{
GLboolean r = GL_FALSE;
@@ -4920,7 +8914,7 @@ static GLboolean _glewInit_GL_ARB_gpu_shader_fp64 (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_gpu_shader_int64
-static GLboolean _glewInit_GL_ARB_gpu_shader_int64 (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_gpu_shader_int64 ()
{
GLboolean r = GL_FALSE;
@@ -4968,7 +8962,7 @@ static GLboolean _glewInit_GL_ARB_gpu_shader_int64 (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_imaging
-static GLboolean _glewInit_GL_ARB_imaging (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_imaging ()
{
GLboolean r = GL_FALSE;
@@ -5013,7 +9007,7 @@ static GLboolean _glewInit_GL_ARB_imaging (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_indirect_parameters
-static GLboolean _glewInit_GL_ARB_indirect_parameters (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_indirect_parameters ()
{
GLboolean r = GL_FALSE;
@@ -5027,7 +9021,7 @@ static GLboolean _glewInit_GL_ARB_indirect_parameters (GLEW_CONTEXT_ARG_DEF_INIT
#ifdef GL_ARB_instanced_arrays
-static GLboolean _glewInit_GL_ARB_instanced_arrays (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_instanced_arrays ()
{
GLboolean r = GL_FALSE;
@@ -5042,7 +9036,7 @@ static GLboolean _glewInit_GL_ARB_instanced_arrays (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_internalformat_query
-static GLboolean _glewInit_GL_ARB_internalformat_query (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_internalformat_query ()
{
GLboolean r = GL_FALSE;
@@ -5055,7 +9049,7 @@ static GLboolean _glewInit_GL_ARB_internalformat_query (GLEW_CONTEXT_ARG_DEF_INI
#ifdef GL_ARB_internalformat_query2
-static GLboolean _glewInit_GL_ARB_internalformat_query2 (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_internalformat_query2 ()
{
GLboolean r = GL_FALSE;
@@ -5068,7 +9062,7 @@ static GLboolean _glewInit_GL_ARB_internalformat_query2 (GLEW_CONTEXT_ARG_DEF_IN
#ifdef GL_ARB_invalidate_subdata
-static GLboolean _glewInit_GL_ARB_invalidate_subdata (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_invalidate_subdata ()
{
GLboolean r = GL_FALSE;
@@ -5086,7 +9080,7 @@ static GLboolean _glewInit_GL_ARB_invalidate_subdata (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_map_buffer_range
-static GLboolean _glewInit_GL_ARB_map_buffer_range (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_map_buffer_range ()
{
GLboolean r = GL_FALSE;
@@ -5100,7 +9094,7 @@ static GLboolean _glewInit_GL_ARB_map_buffer_range (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_matrix_palette
-static GLboolean _glewInit_GL_ARB_matrix_palette (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_matrix_palette ()
{
GLboolean r = GL_FALSE;
@@ -5117,7 +9111,7 @@ static GLboolean _glewInit_GL_ARB_matrix_palette (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_multi_bind
-static GLboolean _glewInit_GL_ARB_multi_bind (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_multi_bind ()
{
GLboolean r = GL_FALSE;
@@ -5135,7 +9129,7 @@ static GLboolean _glewInit_GL_ARB_multi_bind (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_multi_draw_indirect
-static GLboolean _glewInit_GL_ARB_multi_draw_indirect (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_multi_draw_indirect ()
{
GLboolean r = GL_FALSE;
@@ -5149,7 +9143,7 @@ static GLboolean _glewInit_GL_ARB_multi_draw_indirect (GLEW_CONTEXT_ARG_DEF_INIT
#ifdef GL_ARB_multisample
-static GLboolean _glewInit_GL_ARB_multisample (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_multisample ()
{
GLboolean r = GL_FALSE;
@@ -5162,7 +9156,7 @@ static GLboolean _glewInit_GL_ARB_multisample (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_multitexture
-static GLboolean _glewInit_GL_ARB_multitexture (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_multitexture ()
{
GLboolean r = GL_FALSE;
@@ -5208,7 +9202,7 @@ static GLboolean _glewInit_GL_ARB_multitexture (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_occlusion_query
-static GLboolean _glewInit_GL_ARB_occlusion_query (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_occlusion_query ()
{
GLboolean r = GL_FALSE;
@@ -5228,7 +9222,7 @@ static GLboolean _glewInit_GL_ARB_occlusion_query (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_parallel_shader_compile
-static GLboolean _glewInit_GL_ARB_parallel_shader_compile (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_parallel_shader_compile ()
{
GLboolean r = GL_FALSE;
@@ -5241,7 +9235,7 @@ static GLboolean _glewInit_GL_ARB_parallel_shader_compile (GLEW_CONTEXT_ARG_DEF_
#ifdef GL_ARB_point_parameters
-static GLboolean _glewInit_GL_ARB_point_parameters (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_point_parameters ()
{
GLboolean r = GL_FALSE;
@@ -5255,7 +9249,7 @@ static GLboolean _glewInit_GL_ARB_point_parameters (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_program_interface_query
-static GLboolean _glewInit_GL_ARB_program_interface_query (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_program_interface_query ()
{
GLboolean r = GL_FALSE;
@@ -5273,7 +9267,7 @@ static GLboolean _glewInit_GL_ARB_program_interface_query (GLEW_CONTEXT_ARG_DEF_
#ifdef GL_ARB_provoking_vertex
-static GLboolean _glewInit_GL_ARB_provoking_vertex (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_provoking_vertex ()
{
GLboolean r = GL_FALSE;
@@ -5286,7 +9280,7 @@ static GLboolean _glewInit_GL_ARB_provoking_vertex (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_robustness
-static GLboolean _glewInit_GL_ARB_robustness (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_robustness ()
{
GLboolean r = GL_FALSE;
@@ -5318,7 +9312,7 @@ static GLboolean _glewInit_GL_ARB_robustness (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_sample_locations
-static GLboolean _glewInit_GL_ARB_sample_locations (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_sample_locations ()
{
GLboolean r = GL_FALSE;
@@ -5332,7 +9326,7 @@ static GLboolean _glewInit_GL_ARB_sample_locations (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_sample_shading
-static GLboolean _glewInit_GL_ARB_sample_shading (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_sample_shading ()
{
GLboolean r = GL_FALSE;
@@ -5345,7 +9339,7 @@ static GLboolean _glewInit_GL_ARB_sample_shading (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_sampler_objects
-static GLboolean _glewInit_GL_ARB_sampler_objects (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_sampler_objects ()
{
GLboolean r = GL_FALSE;
@@ -5371,7 +9365,7 @@ static GLboolean _glewInit_GL_ARB_sampler_objects (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_separate_shader_objects
-static GLboolean _glewInit_GL_ARB_separate_shader_objects (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_separate_shader_objects ()
{
GLboolean r = GL_FALSE;
@@ -5443,7 +9437,7 @@ static GLboolean _glewInit_GL_ARB_separate_shader_objects (GLEW_CONTEXT_ARG_DEF_
#ifdef GL_ARB_shader_atomic_counters
-static GLboolean _glewInit_GL_ARB_shader_atomic_counters (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_shader_atomic_counters ()
{
GLboolean r = GL_FALSE;
@@ -5456,7 +9450,7 @@ static GLboolean _glewInit_GL_ARB_shader_atomic_counters (GLEW_CONTEXT_ARG_DEF_I
#ifdef GL_ARB_shader_image_load_store
-static GLboolean _glewInit_GL_ARB_shader_image_load_store (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_shader_image_load_store ()
{
GLboolean r = GL_FALSE;
@@ -5470,7 +9464,7 @@ static GLboolean _glewInit_GL_ARB_shader_image_load_store (GLEW_CONTEXT_ARG_DEF_
#ifdef GL_ARB_shader_objects
-static GLboolean _glewInit_GL_ARB_shader_objects (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_shader_objects ()
{
GLboolean r = GL_FALSE;
@@ -5521,7 +9515,7 @@ static GLboolean _glewInit_GL_ARB_shader_objects (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_shader_storage_buffer_object
-static GLboolean _glewInit_GL_ARB_shader_storage_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_shader_storage_buffer_object ()
{
GLboolean r = GL_FALSE;
@@ -5534,7 +9528,7 @@ static GLboolean _glewInit_GL_ARB_shader_storage_buffer_object (GLEW_CONTEXT_ARG
#ifdef GL_ARB_shader_subroutine
-static GLboolean _glewInit_GL_ARB_shader_subroutine (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_shader_subroutine ()
{
GLboolean r = GL_FALSE;
@@ -5554,7 +9548,7 @@ static GLboolean _glewInit_GL_ARB_shader_subroutine (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_shading_language_include
-static GLboolean _glewInit_GL_ARB_shading_language_include (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_shading_language_include ()
{
GLboolean r = GL_FALSE;
@@ -5572,7 +9566,7 @@ static GLboolean _glewInit_GL_ARB_shading_language_include (GLEW_CONTEXT_ARG_DEF
#ifdef GL_ARB_sparse_buffer
-static GLboolean _glewInit_GL_ARB_sparse_buffer (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_sparse_buffer ()
{
GLboolean r = GL_FALSE;
@@ -5585,7 +9579,7 @@ static GLboolean _glewInit_GL_ARB_sparse_buffer (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_sparse_texture
-static GLboolean _glewInit_GL_ARB_sparse_texture (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_sparse_texture ()
{
GLboolean r = GL_FALSE;
@@ -5599,7 +9593,7 @@ static GLboolean _glewInit_GL_ARB_sparse_texture (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_sync
-static GLboolean _glewInit_GL_ARB_sync (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_sync ()
{
GLboolean r = GL_FALSE;
@@ -5618,7 +9612,7 @@ static GLboolean _glewInit_GL_ARB_sync (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_tessellation_shader
-static GLboolean _glewInit_GL_ARB_tessellation_shader (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_tessellation_shader ()
{
GLboolean r = GL_FALSE;
@@ -5632,7 +9626,7 @@ static GLboolean _glewInit_GL_ARB_tessellation_shader (GLEW_CONTEXT_ARG_DEF_INIT
#ifdef GL_ARB_texture_barrier
-static GLboolean _glewInit_GL_ARB_texture_barrier (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_texture_barrier ()
{
GLboolean r = GL_FALSE;
@@ -5645,7 +9639,7 @@ static GLboolean _glewInit_GL_ARB_texture_barrier (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_texture_buffer_object
-static GLboolean _glewInit_GL_ARB_texture_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_texture_buffer_object ()
{
GLboolean r = GL_FALSE;
@@ -5658,7 +9652,7 @@ static GLboolean _glewInit_GL_ARB_texture_buffer_object (GLEW_CONTEXT_ARG_DEF_IN
#ifdef GL_ARB_texture_buffer_range
-static GLboolean _glewInit_GL_ARB_texture_buffer_range (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_texture_buffer_range ()
{
GLboolean r = GL_FALSE;
@@ -5672,7 +9666,7 @@ static GLboolean _glewInit_GL_ARB_texture_buffer_range (GLEW_CONTEXT_ARG_DEF_INI
#ifdef GL_ARB_texture_compression
-static GLboolean _glewInit_GL_ARB_texture_compression (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_texture_compression ()
{
GLboolean r = GL_FALSE;
@@ -5691,7 +9685,7 @@ static GLboolean _glewInit_GL_ARB_texture_compression (GLEW_CONTEXT_ARG_DEF_INIT
#ifdef GL_ARB_texture_multisample
-static GLboolean _glewInit_GL_ARB_texture_multisample (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_texture_multisample ()
{
GLboolean r = GL_FALSE;
@@ -5707,7 +9701,7 @@ static GLboolean _glewInit_GL_ARB_texture_multisample (GLEW_CONTEXT_ARG_DEF_INIT
#ifdef GL_ARB_texture_storage
-static GLboolean _glewInit_GL_ARB_texture_storage (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_texture_storage ()
{
GLboolean r = GL_FALSE;
@@ -5725,7 +9719,7 @@ static GLboolean _glewInit_GL_ARB_texture_storage (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_texture_storage_multisample
-static GLboolean _glewInit_GL_ARB_texture_storage_multisample (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_texture_storage_multisample ()
{
GLboolean r = GL_FALSE;
@@ -5741,7 +9735,7 @@ static GLboolean _glewInit_GL_ARB_texture_storage_multisample (GLEW_CONTEXT_ARG_
#ifdef GL_ARB_texture_view
-static GLboolean _glewInit_GL_ARB_texture_view (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_texture_view ()
{
GLboolean r = GL_FALSE;
@@ -5754,7 +9748,7 @@ static GLboolean _glewInit_GL_ARB_texture_view (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_timer_query
-static GLboolean _glewInit_GL_ARB_timer_query (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_timer_query ()
{
GLboolean r = GL_FALSE;
@@ -5769,7 +9763,7 @@ static GLboolean _glewInit_GL_ARB_timer_query (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_transform_feedback2
-static GLboolean _glewInit_GL_ARB_transform_feedback2 (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_transform_feedback2 ()
{
GLboolean r = GL_FALSE;
@@ -5788,7 +9782,7 @@ static GLboolean _glewInit_GL_ARB_transform_feedback2 (GLEW_CONTEXT_ARG_DEF_INIT
#ifdef GL_ARB_transform_feedback3
-static GLboolean _glewInit_GL_ARB_transform_feedback3 (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_transform_feedback3 ()
{
GLboolean r = GL_FALSE;
@@ -5804,7 +9798,7 @@ static GLboolean _glewInit_GL_ARB_transform_feedback3 (GLEW_CONTEXT_ARG_DEF_INIT
#ifdef GL_ARB_transform_feedback_instanced
-static GLboolean _glewInit_GL_ARB_transform_feedback_instanced (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_transform_feedback_instanced ()
{
GLboolean r = GL_FALSE;
@@ -5818,7 +9812,7 @@ static GLboolean _glewInit_GL_ARB_transform_feedback_instanced (GLEW_CONTEXT_ARG
#ifdef GL_ARB_transpose_matrix
-static GLboolean _glewInit_GL_ARB_transpose_matrix (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_transpose_matrix ()
{
GLboolean r = GL_FALSE;
@@ -5834,7 +9828,7 @@ static GLboolean _glewInit_GL_ARB_transpose_matrix (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_uniform_buffer_object
-static GLboolean _glewInit_GL_ARB_uniform_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_uniform_buffer_object ()
{
GLboolean r = GL_FALSE;
@@ -5856,7 +9850,7 @@ static GLboolean _glewInit_GL_ARB_uniform_buffer_object (GLEW_CONTEXT_ARG_DEF_IN
#ifdef GL_ARB_vertex_array_object
-static GLboolean _glewInit_GL_ARB_vertex_array_object (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_vertex_array_object ()
{
GLboolean r = GL_FALSE;
@@ -5872,7 +9866,7 @@ static GLboolean _glewInit_GL_ARB_vertex_array_object (GLEW_CONTEXT_ARG_DEF_INIT
#ifdef GL_ARB_vertex_attrib_64bit
-static GLboolean _glewInit_GL_ARB_vertex_attrib_64bit (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_vertex_attrib_64bit ()
{
GLboolean r = GL_FALSE;
@@ -5894,7 +9888,7 @@ static GLboolean _glewInit_GL_ARB_vertex_attrib_64bit (GLEW_CONTEXT_ARG_DEF_INIT
#ifdef GL_ARB_vertex_attrib_binding
-static GLboolean _glewInit_GL_ARB_vertex_attrib_binding (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_vertex_attrib_binding ()
{
GLboolean r = GL_FALSE;
@@ -5918,7 +9912,7 @@ static GLboolean _glewInit_GL_ARB_vertex_attrib_binding (GLEW_CONTEXT_ARG_DEF_IN
#ifdef GL_ARB_vertex_blend
-static GLboolean _glewInit_GL_ARB_vertex_blend (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_vertex_blend ()
{
GLboolean r = GL_FALSE;
@@ -5940,7 +9934,7 @@ static GLboolean _glewInit_GL_ARB_vertex_blend (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_vertex_buffer_object
-static GLboolean _glewInit_GL_ARB_vertex_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_vertex_buffer_object ()
{
GLboolean r = GL_FALSE;
@@ -5963,7 +9957,7 @@ static GLboolean _glewInit_GL_ARB_vertex_buffer_object (GLEW_CONTEXT_ARG_DEF_INI
#ifdef GL_ARB_vertex_program
-static GLboolean _glewInit_GL_ARB_vertex_program (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_vertex_program ()
{
GLboolean r = GL_FALSE;
@@ -6037,7 +10031,7 @@ static GLboolean _glewInit_GL_ARB_vertex_program (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_vertex_shader
-static GLboolean _glewInit_GL_ARB_vertex_shader (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_vertex_shader ()
{
GLboolean r = GL_FALSE;
@@ -6052,7 +10046,7 @@ static GLboolean _glewInit_GL_ARB_vertex_shader (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_vertex_type_2_10_10_10_rev
-static GLboolean _glewInit_GL_ARB_vertex_type_2_10_10_10_rev (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_vertex_type_2_10_10_10_rev ()
{
GLboolean r = GL_FALSE;
@@ -6102,7 +10096,7 @@ static GLboolean _glewInit_GL_ARB_vertex_type_2_10_10_10_rev (GLEW_CONTEXT_ARG_D
#ifdef GL_ARB_viewport_array
-static GLboolean _glewInit_GL_ARB_viewport_array (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_viewport_array ()
{
GLboolean r = GL_FALSE;
@@ -6124,7 +10118,7 @@ static GLboolean _glewInit_GL_ARB_viewport_array (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ARB_window_pos
-static GLboolean _glewInit_GL_ARB_window_pos (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ARB_window_pos ()
{
GLboolean r = GL_FALSE;
@@ -6152,7 +10146,7 @@ static GLboolean _glewInit_GL_ARB_window_pos (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ATI_draw_buffers
-static GLboolean _glewInit_GL_ATI_draw_buffers (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ATI_draw_buffers ()
{
GLboolean r = GL_FALSE;
@@ -6165,7 +10159,7 @@ static GLboolean _glewInit_GL_ATI_draw_buffers (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ATI_element_array
-static GLboolean _glewInit_GL_ATI_element_array (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ATI_element_array ()
{
GLboolean r = GL_FALSE;
@@ -6180,7 +10174,7 @@ static GLboolean _glewInit_GL_ATI_element_array (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ATI_envmap_bumpmap
-static GLboolean _glewInit_GL_ATI_envmap_bumpmap (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ATI_envmap_bumpmap ()
{
GLboolean r = GL_FALSE;
@@ -6196,7 +10190,7 @@ static GLboolean _glewInit_GL_ATI_envmap_bumpmap (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ATI_fragment_shader
-static GLboolean _glewInit_GL_ATI_fragment_shader (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ATI_fragment_shader ()
{
GLboolean r = GL_FALSE;
@@ -6222,7 +10216,7 @@ static GLboolean _glewInit_GL_ATI_fragment_shader (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ATI_map_object_buffer
-static GLboolean _glewInit_GL_ATI_map_object_buffer (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ATI_map_object_buffer ()
{
GLboolean r = GL_FALSE;
@@ -6236,7 +10230,7 @@ static GLboolean _glewInit_GL_ATI_map_object_buffer (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ATI_pn_triangles
-static GLboolean _glewInit_GL_ATI_pn_triangles (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ATI_pn_triangles ()
{
GLboolean r = GL_FALSE;
@@ -6250,7 +10244,7 @@ static GLboolean _glewInit_GL_ATI_pn_triangles (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ATI_separate_stencil
-static GLboolean _glewInit_GL_ATI_separate_stencil (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ATI_separate_stencil ()
{
GLboolean r = GL_FALSE;
@@ -6264,7 +10258,7 @@ static GLboolean _glewInit_GL_ATI_separate_stencil (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_ATI_vertex_array_object
-static GLboolean _glewInit_GL_ATI_vertex_array_object (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ATI_vertex_array_object ()
{
GLboolean r = GL_FALSE;
@@ -6288,7 +10282,7 @@ static GLboolean _glewInit_GL_ATI_vertex_array_object (GLEW_CONTEXT_ARG_DEF_INIT
#ifdef GL_ATI_vertex_attrib_array_object
-static GLboolean _glewInit_GL_ATI_vertex_attrib_array_object (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ATI_vertex_attrib_array_object ()
{
GLboolean r = GL_FALSE;
@@ -6303,7 +10297,7 @@ static GLboolean _glewInit_GL_ATI_vertex_attrib_array_object (GLEW_CONTEXT_ARG_D
#ifdef GL_ATI_vertex_streams
-static GLboolean _glewInit_GL_ATI_vertex_streams (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_ATI_vertex_streams ()
{
GLboolean r = GL_FALSE;
@@ -6360,7 +10354,7 @@ static GLboolean _glewInit_GL_ATI_vertex_streams (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_bindable_uniform
-static GLboolean _glewInit_GL_EXT_bindable_uniform (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_bindable_uniform ()
{
GLboolean r = GL_FALSE;
@@ -6375,7 +10369,7 @@ static GLboolean _glewInit_GL_EXT_bindable_uniform (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_blend_color
-static GLboolean _glewInit_GL_EXT_blend_color (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_blend_color ()
{
GLboolean r = GL_FALSE;
@@ -6388,7 +10382,7 @@ static GLboolean _glewInit_GL_EXT_blend_color (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_blend_equation_separate
-static GLboolean _glewInit_GL_EXT_blend_equation_separate (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_blend_equation_separate ()
{
GLboolean r = GL_FALSE;
@@ -6401,7 +10395,7 @@ static GLboolean _glewInit_GL_EXT_blend_equation_separate (GLEW_CONTEXT_ARG_DEF_
#ifdef GL_EXT_blend_func_separate
-static GLboolean _glewInit_GL_EXT_blend_func_separate (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_blend_func_separate ()
{
GLboolean r = GL_FALSE;
@@ -6414,7 +10408,7 @@ static GLboolean _glewInit_GL_EXT_blend_func_separate (GLEW_CONTEXT_ARG_DEF_INIT
#ifdef GL_EXT_blend_minmax
-static GLboolean _glewInit_GL_EXT_blend_minmax (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_blend_minmax ()
{
GLboolean r = GL_FALSE;
@@ -6427,7 +10421,7 @@ static GLboolean _glewInit_GL_EXT_blend_minmax (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_color_subtable
-static GLboolean _glewInit_GL_EXT_color_subtable (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_color_subtable ()
{
GLboolean r = GL_FALSE;
@@ -6441,7 +10435,7 @@ static GLboolean _glewInit_GL_EXT_color_subtable (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_compiled_vertex_array
-static GLboolean _glewInit_GL_EXT_compiled_vertex_array (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_compiled_vertex_array ()
{
GLboolean r = GL_FALSE;
@@ -6455,7 +10449,7 @@ static GLboolean _glewInit_GL_EXT_compiled_vertex_array (GLEW_CONTEXT_ARG_DEF_IN
#ifdef GL_EXT_convolution
-static GLboolean _glewInit_GL_EXT_convolution (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_convolution ()
{
GLboolean r = GL_FALSE;
@@ -6480,7 +10474,7 @@ static GLboolean _glewInit_GL_EXT_convolution (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_coordinate_frame
-static GLboolean _glewInit_GL_EXT_coordinate_frame (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_coordinate_frame ()
{
GLboolean r = GL_FALSE;
@@ -6494,7 +10488,7 @@ static GLboolean _glewInit_GL_EXT_coordinate_frame (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_copy_texture
-static GLboolean _glewInit_GL_EXT_copy_texture (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_copy_texture ()
{
GLboolean r = GL_FALSE;
@@ -6511,7 +10505,7 @@ static GLboolean _glewInit_GL_EXT_copy_texture (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_cull_vertex
-static GLboolean _glewInit_GL_EXT_cull_vertex (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_cull_vertex ()
{
GLboolean r = GL_FALSE;
@@ -6525,7 +10519,7 @@ static GLboolean _glewInit_GL_EXT_cull_vertex (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_debug_label
-static GLboolean _glewInit_GL_EXT_debug_label (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_debug_label ()
{
GLboolean r = GL_FALSE;
@@ -6539,7 +10533,7 @@ static GLboolean _glewInit_GL_EXT_debug_label (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_debug_marker
-static GLboolean _glewInit_GL_EXT_debug_marker (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_debug_marker ()
{
GLboolean r = GL_FALSE;
@@ -6554,7 +10548,7 @@ static GLboolean _glewInit_GL_EXT_debug_marker (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_depth_bounds_test
-static GLboolean _glewInit_GL_EXT_depth_bounds_test (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_depth_bounds_test ()
{
GLboolean r = GL_FALSE;
@@ -6567,7 +10561,7 @@ static GLboolean _glewInit_GL_EXT_depth_bounds_test (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_direct_state_access
-static GLboolean _glewInit_GL_EXT_direct_state_access (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_direct_state_access ()
{
GLboolean r = GL_FALSE;
@@ -6793,7 +10787,7 @@ static GLboolean _glewInit_GL_EXT_direct_state_access (GLEW_CONTEXT_ARG_DEF_INIT
#ifdef GL_EXT_draw_buffers2
-static GLboolean _glewInit_GL_EXT_draw_buffers2 (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_draw_buffers2 ()
{
GLboolean r = GL_FALSE;
@@ -6811,7 +10805,7 @@ static GLboolean _glewInit_GL_EXT_draw_buffers2 (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_draw_instanced
-static GLboolean _glewInit_GL_EXT_draw_instanced (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_draw_instanced ()
{
GLboolean r = GL_FALSE;
@@ -6825,7 +10819,7 @@ static GLboolean _glewInit_GL_EXT_draw_instanced (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_draw_range_elements
-static GLboolean _glewInit_GL_EXT_draw_range_elements (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_draw_range_elements ()
{
GLboolean r = GL_FALSE;
@@ -6838,7 +10832,7 @@ static GLboolean _glewInit_GL_EXT_draw_range_elements (GLEW_CONTEXT_ARG_DEF_INIT
#ifdef GL_EXT_fog_coord
-static GLboolean _glewInit_GL_EXT_fog_coord (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_fog_coord ()
{
GLboolean r = GL_FALSE;
@@ -6855,7 +10849,7 @@ static GLboolean _glewInit_GL_EXT_fog_coord (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_fragment_lighting
-static GLboolean _glewInit_GL_EXT_fragment_lighting (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_fragment_lighting ()
{
GLboolean r = GL_FALSE;
@@ -6885,7 +10879,7 @@ static GLboolean _glewInit_GL_EXT_fragment_lighting (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_framebuffer_blit
-static GLboolean _glewInit_GL_EXT_framebuffer_blit (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_framebuffer_blit ()
{
GLboolean r = GL_FALSE;
@@ -6898,7 +10892,7 @@ static GLboolean _glewInit_GL_EXT_framebuffer_blit (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_framebuffer_multisample
-static GLboolean _glewInit_GL_EXT_framebuffer_multisample (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_framebuffer_multisample ()
{
GLboolean r = GL_FALSE;
@@ -6911,7 +10905,7 @@ static GLboolean _glewInit_GL_EXT_framebuffer_multisample (GLEW_CONTEXT_ARG_DEF_
#ifdef GL_EXT_framebuffer_object
-static GLboolean _glewInit_GL_EXT_framebuffer_object (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_framebuffer_object ()
{
GLboolean r = GL_FALSE;
@@ -6940,7 +10934,7 @@ static GLboolean _glewInit_GL_EXT_framebuffer_object (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_geometry_shader4
-static GLboolean _glewInit_GL_EXT_geometry_shader4 (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_geometry_shader4 ()
{
GLboolean r = GL_FALSE;
@@ -6955,7 +10949,7 @@ static GLboolean _glewInit_GL_EXT_geometry_shader4 (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_gpu_program_parameters
-static GLboolean _glewInit_GL_EXT_gpu_program_parameters (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_gpu_program_parameters ()
{
GLboolean r = GL_FALSE;
@@ -6969,7 +10963,7 @@ static GLboolean _glewInit_GL_EXT_gpu_program_parameters (GLEW_CONTEXT_ARG_DEF_I
#ifdef GL_EXT_gpu_shader4
-static GLboolean _glewInit_GL_EXT_gpu_shader4 (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_gpu_shader4 ()
{
GLboolean r = GL_FALSE;
@@ -7015,7 +11009,7 @@ static GLboolean _glewInit_GL_EXT_gpu_shader4 (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_histogram
-static GLboolean _glewInit_GL_EXT_histogram (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_histogram ()
{
GLboolean r = GL_FALSE;
@@ -7037,7 +11031,7 @@ static GLboolean _glewInit_GL_EXT_histogram (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_index_func
-static GLboolean _glewInit_GL_EXT_index_func (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_index_func ()
{
GLboolean r = GL_FALSE;
@@ -7050,7 +11044,7 @@ static GLboolean _glewInit_GL_EXT_index_func (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_index_material
-static GLboolean _glewInit_GL_EXT_index_material (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_index_material ()
{
GLboolean r = GL_FALSE;
@@ -7063,7 +11057,7 @@ static GLboolean _glewInit_GL_EXT_index_material (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_light_texture
-static GLboolean _glewInit_GL_EXT_light_texture (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_light_texture ()
{
GLboolean r = GL_FALSE;
@@ -7078,7 +11072,7 @@ static GLboolean _glewInit_GL_EXT_light_texture (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_multi_draw_arrays
-static GLboolean _glewInit_GL_EXT_multi_draw_arrays (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_multi_draw_arrays ()
{
GLboolean r = GL_FALSE;
@@ -7092,7 +11086,7 @@ static GLboolean _glewInit_GL_EXT_multi_draw_arrays (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_multisample
-static GLboolean _glewInit_GL_EXT_multisample (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_multisample ()
{
GLboolean r = GL_FALSE;
@@ -7106,7 +11100,7 @@ static GLboolean _glewInit_GL_EXT_multisample (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_paletted_texture
-static GLboolean _glewInit_GL_EXT_paletted_texture (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_paletted_texture ()
{
GLboolean r = GL_FALSE;
@@ -7122,7 +11116,7 @@ static GLboolean _glewInit_GL_EXT_paletted_texture (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_pixel_transform
-static GLboolean _glewInit_GL_EXT_pixel_transform (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_pixel_transform ()
{
GLboolean r = GL_FALSE;
@@ -7140,7 +11134,7 @@ static GLboolean _glewInit_GL_EXT_pixel_transform (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_point_parameters
-static GLboolean _glewInit_GL_EXT_point_parameters (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_point_parameters ()
{
GLboolean r = GL_FALSE;
@@ -7154,7 +11148,7 @@ static GLboolean _glewInit_GL_EXT_point_parameters (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_polygon_offset
-static GLboolean _glewInit_GL_EXT_polygon_offset (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_polygon_offset ()
{
GLboolean r = GL_FALSE;
@@ -7167,7 +11161,7 @@ static GLboolean _glewInit_GL_EXT_polygon_offset (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_polygon_offset_clamp
-static GLboolean _glewInit_GL_EXT_polygon_offset_clamp (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_polygon_offset_clamp ()
{
GLboolean r = GL_FALSE;
@@ -7180,7 +11174,7 @@ static GLboolean _glewInit_GL_EXT_polygon_offset_clamp (GLEW_CONTEXT_ARG_DEF_INI
#ifdef GL_EXT_provoking_vertex
-static GLboolean _glewInit_GL_EXT_provoking_vertex (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_provoking_vertex ()
{
GLboolean r = GL_FALSE;
@@ -7193,7 +11187,7 @@ static GLboolean _glewInit_GL_EXT_provoking_vertex (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_raster_multisample
-static GLboolean _glewInit_GL_EXT_raster_multisample (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_raster_multisample ()
{
GLboolean r = GL_FALSE;
@@ -7209,7 +11203,7 @@ static GLboolean _glewInit_GL_EXT_raster_multisample (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_scene_marker
-static GLboolean _glewInit_GL_EXT_scene_marker (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_scene_marker ()
{
GLboolean r = GL_FALSE;
@@ -7223,7 +11217,7 @@ static GLboolean _glewInit_GL_EXT_scene_marker (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_secondary_color
-static GLboolean _glewInit_GL_EXT_secondary_color (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_secondary_color ()
{
GLboolean r = GL_FALSE;
@@ -7252,7 +11246,7 @@ static GLboolean _glewInit_GL_EXT_secondary_color (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_separate_shader_objects
-static GLboolean _glewInit_GL_EXT_separate_shader_objects (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_separate_shader_objects ()
{
GLboolean r = GL_FALSE;
@@ -7267,7 +11261,7 @@ static GLboolean _glewInit_GL_EXT_separate_shader_objects (GLEW_CONTEXT_ARG_DEF_
#ifdef GL_EXT_shader_image_load_store
-static GLboolean _glewInit_GL_EXT_shader_image_load_store (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_shader_image_load_store ()
{
GLboolean r = GL_FALSE;
@@ -7281,7 +11275,7 @@ static GLboolean _glewInit_GL_EXT_shader_image_load_store (GLEW_CONTEXT_ARG_DEF_
#ifdef GL_EXT_stencil_two_side
-static GLboolean _glewInit_GL_EXT_stencil_two_side (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_stencil_two_side ()
{
GLboolean r = GL_FALSE;
@@ -7294,7 +11288,7 @@ static GLboolean _glewInit_GL_EXT_stencil_two_side (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_subtexture
-static GLboolean _glewInit_GL_EXT_subtexture (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_subtexture ()
{
GLboolean r = GL_FALSE;
@@ -7309,7 +11303,7 @@ static GLboolean _glewInit_GL_EXT_subtexture (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_texture3D
-static GLboolean _glewInit_GL_EXT_texture3D (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_texture3D ()
{
GLboolean r = GL_FALSE;
@@ -7322,7 +11316,7 @@ static GLboolean _glewInit_GL_EXT_texture3D (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_texture_array
-static GLboolean _glewInit_GL_EXT_texture_array (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_texture_array ()
{
GLboolean r = GL_FALSE;
@@ -7335,7 +11329,7 @@ static GLboolean _glewInit_GL_EXT_texture_array (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_texture_buffer_object
-static GLboolean _glewInit_GL_EXT_texture_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_texture_buffer_object ()
{
GLboolean r = GL_FALSE;
@@ -7348,7 +11342,7 @@ static GLboolean _glewInit_GL_EXT_texture_buffer_object (GLEW_CONTEXT_ARG_DEF_IN
#ifdef GL_EXT_texture_integer
-static GLboolean _glewInit_GL_EXT_texture_integer (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_texture_integer ()
{
GLboolean r = GL_FALSE;
@@ -7366,7 +11360,7 @@ static GLboolean _glewInit_GL_EXT_texture_integer (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_texture_object
-static GLboolean _glewInit_GL_EXT_texture_object (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_texture_object ()
{
GLboolean r = GL_FALSE;
@@ -7384,7 +11378,7 @@ static GLboolean _glewInit_GL_EXT_texture_object (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_texture_perturb_normal
-static GLboolean _glewInit_GL_EXT_texture_perturb_normal (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_texture_perturb_normal ()
{
GLboolean r = GL_FALSE;
@@ -7397,7 +11391,7 @@ static GLboolean _glewInit_GL_EXT_texture_perturb_normal (GLEW_CONTEXT_ARG_DEF_I
#ifdef GL_EXT_timer_query
-static GLboolean _glewInit_GL_EXT_timer_query (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_timer_query ()
{
GLboolean r = GL_FALSE;
@@ -7411,7 +11405,7 @@ static GLboolean _glewInit_GL_EXT_timer_query (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_transform_feedback
-static GLboolean _glewInit_GL_EXT_transform_feedback (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_transform_feedback ()
{
GLboolean r = GL_FALSE;
@@ -7430,7 +11424,7 @@ static GLboolean _glewInit_GL_EXT_transform_feedback (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_vertex_array
-static GLboolean _glewInit_GL_EXT_vertex_array (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_vertex_array ()
{
GLboolean r = GL_FALSE;
@@ -7450,7 +11444,7 @@ static GLboolean _glewInit_GL_EXT_vertex_array (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_vertex_attrib_64bit
-static GLboolean _glewInit_GL_EXT_vertex_attrib_64bit (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_vertex_attrib_64bit ()
{
GLboolean r = GL_FALSE;
@@ -7473,7 +11467,7 @@ static GLboolean _glewInit_GL_EXT_vertex_attrib_64bit (GLEW_CONTEXT_ARG_DEF_INIT
#ifdef GL_EXT_vertex_shader
-static GLboolean _glewInit_GL_EXT_vertex_shader (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_vertex_shader ()
{
GLboolean r = GL_FALSE;
@@ -7527,7 +11521,7 @@ static GLboolean _glewInit_GL_EXT_vertex_shader (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_EXT_vertex_weighting
-static GLboolean _glewInit_GL_EXT_vertex_weighting (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_vertex_weighting ()
{
GLboolean r = GL_FALSE;
@@ -7540,9 +11534,22 @@ static GLboolean _glewInit_GL_EXT_vertex_weighting (GLEW_CONTEXT_ARG_DEF_INIT)
#endif /* GL_EXT_vertex_weighting */
+#ifdef GL_EXT_window_rectangles
+
+static GLboolean _glewInit_GL_EXT_window_rectangles ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((glWindowRectanglesEXT = (PFNGLWINDOWRECTANGLESEXTPROC)glewGetProcAddress((const GLubyte*)"glWindowRectanglesEXT")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* GL_EXT_window_rectangles */
+
#ifdef GL_EXT_x11_sync_object
-static GLboolean _glewInit_GL_EXT_x11_sync_object (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_EXT_x11_sync_object ()
{
GLboolean r = GL_FALSE;
@@ -7555,7 +11562,7 @@ static GLboolean _glewInit_GL_EXT_x11_sync_object (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_GREMEDY_frame_terminator
-static GLboolean _glewInit_GL_GREMEDY_frame_terminator (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_GREMEDY_frame_terminator ()
{
GLboolean r = GL_FALSE;
@@ -7568,7 +11575,7 @@ static GLboolean _glewInit_GL_GREMEDY_frame_terminator (GLEW_CONTEXT_ARG_DEF_INI
#ifdef GL_GREMEDY_string_marker
-static GLboolean _glewInit_GL_GREMEDY_string_marker (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_GREMEDY_string_marker ()
{
GLboolean r = GL_FALSE;
@@ -7581,7 +11588,7 @@ static GLboolean _glewInit_GL_GREMEDY_string_marker (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_HP_image_transform
-static GLboolean _glewInit_GL_HP_image_transform (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_HP_image_transform ()
{
GLboolean r = GL_FALSE;
@@ -7599,7 +11606,7 @@ static GLboolean _glewInit_GL_HP_image_transform (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_IBM_multimode_draw_arrays
-static GLboolean _glewInit_GL_IBM_multimode_draw_arrays (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_IBM_multimode_draw_arrays ()
{
GLboolean r = GL_FALSE;
@@ -7613,7 +11620,7 @@ static GLboolean _glewInit_GL_IBM_multimode_draw_arrays (GLEW_CONTEXT_ARG_DEF_IN
#ifdef GL_IBM_vertex_array_lists
-static GLboolean _glewInit_GL_IBM_vertex_array_lists (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_IBM_vertex_array_lists ()
{
GLboolean r = GL_FALSE;
@@ -7633,7 +11640,7 @@ static GLboolean _glewInit_GL_IBM_vertex_array_lists (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_INTEL_map_texture
-static GLboolean _glewInit_GL_INTEL_map_texture (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_INTEL_map_texture ()
{
GLboolean r = GL_FALSE;
@@ -7648,7 +11655,7 @@ static GLboolean _glewInit_GL_INTEL_map_texture (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_INTEL_parallel_arrays
-static GLboolean _glewInit_GL_INTEL_parallel_arrays (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_INTEL_parallel_arrays ()
{
GLboolean r = GL_FALSE;
@@ -7664,7 +11671,7 @@ static GLboolean _glewInit_GL_INTEL_parallel_arrays (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_INTEL_performance_query
-static GLboolean _glewInit_GL_INTEL_performance_query (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_INTEL_performance_query ()
{
GLboolean r = GL_FALSE;
@@ -7686,7 +11693,7 @@ static GLboolean _glewInit_GL_INTEL_performance_query (GLEW_CONTEXT_ARG_DEF_INIT
#ifdef GL_INTEL_texture_scissor
-static GLboolean _glewInit_GL_INTEL_texture_scissor (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_INTEL_texture_scissor ()
{
GLboolean r = GL_FALSE;
@@ -7700,7 +11707,7 @@ static GLboolean _glewInit_GL_INTEL_texture_scissor (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_KHR_blend_equation_advanced
-static GLboolean _glewInit_GL_KHR_blend_equation_advanced (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_KHR_blend_equation_advanced ()
{
GLboolean r = GL_FALSE;
@@ -7713,7 +11720,7 @@ static GLboolean _glewInit_GL_KHR_blend_equation_advanced (GLEW_CONTEXT_ARG_DEF_
#ifdef GL_KHR_debug
-static GLboolean _glewInit_GL_KHR_debug (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_KHR_debug ()
{
GLboolean r = GL_FALSE;
@@ -7735,7 +11742,7 @@ static GLboolean _glewInit_GL_KHR_debug (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_KHR_robustness
-static GLboolean _glewInit_GL_KHR_robustness (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_KHR_robustness ()
{
GLboolean r = GL_FALSE;
@@ -7751,7 +11758,7 @@ static GLboolean _glewInit_GL_KHR_robustness (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_KTX_buffer_region
-static GLboolean _glewInit_GL_KTX_buffer_region (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_KTX_buffer_region ()
{
GLboolean r = GL_FALSE;
@@ -7768,7 +11775,7 @@ static GLboolean _glewInit_GL_KTX_buffer_region (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_MESA_resize_buffers
-static GLboolean _glewInit_GL_MESA_resize_buffers (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_MESA_resize_buffers ()
{
GLboolean r = GL_FALSE;
@@ -7781,7 +11788,7 @@ static GLboolean _glewInit_GL_MESA_resize_buffers (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_MESA_window_pos
-static GLboolean _glewInit_GL_MESA_window_pos (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_MESA_window_pos ()
{
GLboolean r = GL_FALSE;
@@ -7817,7 +11824,7 @@ static GLboolean _glewInit_GL_MESA_window_pos (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_NVX_conditional_render
-static GLboolean _glewInit_GL_NVX_conditional_render (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NVX_conditional_render ()
{
GLboolean r = GL_FALSE;
@@ -7829,9 +11836,24 @@ static GLboolean _glewInit_GL_NVX_conditional_render (GLEW_CONTEXT_ARG_DEF_INIT)
#endif /* GL_NVX_conditional_render */
+#ifdef GL_NVX_linked_gpu_multicast
+
+static GLboolean _glewInit_GL_NVX_linked_gpu_multicast ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((glLGPUCopyImageSubDataNVX = (PFNGLLGPUCOPYIMAGESUBDATANVXPROC)glewGetProcAddress((const GLubyte*)"glLGPUCopyImageSubDataNVX")) == NULL) || r;
+ r = ((glLGPUInterlockNVX = (PFNGLLGPUINTERLOCKNVXPROC)glewGetProcAddress((const GLubyte*)"glLGPUInterlockNVX")) == NULL) || r;
+ r = ((glLGPUNamedBufferSubDataNVX = (PFNGLLGPUNAMEDBUFFERSUBDATANVXPROC)glewGetProcAddress((const GLubyte*)"glLGPUNamedBufferSubDataNVX")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* GL_NVX_linked_gpu_multicast */
+
#ifdef GL_NV_bindless_multi_draw_indirect
-static GLboolean _glewInit_GL_NV_bindless_multi_draw_indirect (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_bindless_multi_draw_indirect ()
{
GLboolean r = GL_FALSE;
@@ -7845,7 +11867,7 @@ static GLboolean _glewInit_GL_NV_bindless_multi_draw_indirect (GLEW_CONTEXT_ARG_
#ifdef GL_NV_bindless_multi_draw_indirect_count
-static GLboolean _glewInit_GL_NV_bindless_multi_draw_indirect_count (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_bindless_multi_draw_indirect_count ()
{
GLboolean r = GL_FALSE;
@@ -7859,7 +11881,7 @@ static GLboolean _glewInit_GL_NV_bindless_multi_draw_indirect_count (GLEW_CONTEX
#ifdef GL_NV_bindless_texture
-static GLboolean _glewInit_GL_NV_bindless_texture (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_bindless_texture ()
{
GLboolean r = GL_FALSE;
@@ -7884,7 +11906,7 @@ static GLboolean _glewInit_GL_NV_bindless_texture (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_NV_blend_equation_advanced
-static GLboolean _glewInit_GL_NV_blend_equation_advanced (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_blend_equation_advanced ()
{
GLboolean r = GL_FALSE;
@@ -7896,9 +11918,51 @@ static GLboolean _glewInit_GL_NV_blend_equation_advanced (GLEW_CONTEXT_ARG_DEF_I
#endif /* GL_NV_blend_equation_advanced */
+#ifdef GL_NV_clip_space_w_scaling
+
+static GLboolean _glewInit_GL_NV_clip_space_w_scaling ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((glViewportPositionWScaleNV = (PFNGLVIEWPORTPOSITIONWSCALENVPROC)glewGetProcAddress((const GLubyte*)"glViewportPositionWScaleNV")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* GL_NV_clip_space_w_scaling */
+
+#ifdef GL_NV_command_list
+
+static GLboolean _glewInit_GL_NV_command_list ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((glCallCommandListNV = (PFNGLCALLCOMMANDLISTNVPROC)glewGetProcAddress((const GLubyte*)"glCallCommandListNV")) == NULL) || r;
+ r = ((glCommandListSegmentsNV = (PFNGLCOMMANDLISTSEGMENTSNVPROC)glewGetProcAddress((const GLubyte*)"glCommandListSegmentsNV")) == NULL) || r;
+ r = ((glCompileCommandListNV = (PFNGLCOMPILECOMMANDLISTNVPROC)glewGetProcAddress((const GLubyte*)"glCompileCommandListNV")) == NULL) || r;
+ r = ((glCreateCommandListsNV = (PFNGLCREATECOMMANDLISTSNVPROC)glewGetProcAddress((const GLubyte*)"glCreateCommandListsNV")) == NULL) || r;
+ r = ((glCreateStatesNV = (PFNGLCREATESTATESNVPROC)glewGetProcAddress((const GLubyte*)"glCreateStatesNV")) == NULL) || r;
+ r = ((glDeleteCommandListsNV = (PFNGLDELETECOMMANDLISTSNVPROC)glewGetProcAddress((const GLubyte*)"glDeleteCommandListsNV")) == NULL) || r;
+ r = ((glDeleteStatesNV = (PFNGLDELETESTATESNVPROC)glewGetProcAddress((const GLubyte*)"glDeleteStatesNV")) == NULL) || r;
+ r = ((glDrawCommandsAddressNV = (PFNGLDRAWCOMMANDSADDRESSNVPROC)glewGetProcAddress((const GLubyte*)"glDrawCommandsAddressNV")) == NULL) || r;
+ r = ((glDrawCommandsNV = (PFNGLDRAWCOMMANDSNVPROC)glewGetProcAddress((const GLubyte*)"glDrawCommandsNV")) == NULL) || r;
+ r = ((glDrawCommandsStatesAddressNV = (PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC)glewGetProcAddress((const GLubyte*)"glDrawCommandsStatesAddressNV")) == NULL) || r;
+ r = ((glDrawCommandsStatesNV = (PFNGLDRAWCOMMANDSSTATESNVPROC)glewGetProcAddress((const GLubyte*)"glDrawCommandsStatesNV")) == NULL) || r;
+ r = ((glGetCommandHeaderNV = (PFNGLGETCOMMANDHEADERNVPROC)glewGetProcAddress((const GLubyte*)"glGetCommandHeaderNV")) == NULL) || r;
+ r = ((glGetStageIndexNV = (PFNGLGETSTAGEINDEXNVPROC)glewGetProcAddress((const GLubyte*)"glGetStageIndexNV")) == NULL) || r;
+ r = ((glIsCommandListNV = (PFNGLISCOMMANDLISTNVPROC)glewGetProcAddress((const GLubyte*)"glIsCommandListNV")) == NULL) || r;
+ r = ((glIsStateNV = (PFNGLISSTATENVPROC)glewGetProcAddress((const GLubyte*)"glIsStateNV")) == NULL) || r;
+ r = ((glListDrawCommandsStatesClientNV = (PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC)glewGetProcAddress((const GLubyte*)"glListDrawCommandsStatesClientNV")) == NULL) || r;
+ r = ((glStateCaptureNV = (PFNGLSTATECAPTURENVPROC)glewGetProcAddress((const GLubyte*)"glStateCaptureNV")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* GL_NV_command_list */
+
#ifdef GL_NV_conditional_render
-static GLboolean _glewInit_GL_NV_conditional_render (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_conditional_render ()
{
GLboolean r = GL_FALSE;
@@ -7912,7 +11976,7 @@ static GLboolean _glewInit_GL_NV_conditional_render (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_NV_conservative_raster
-static GLboolean _glewInit_GL_NV_conservative_raster (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_conservative_raster ()
{
GLboolean r = GL_FALSE;
@@ -7925,7 +11989,7 @@ static GLboolean _glewInit_GL_NV_conservative_raster (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_NV_conservative_raster_dilate
-static GLboolean _glewInit_GL_NV_conservative_raster_dilate (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_conservative_raster_dilate ()
{
GLboolean r = GL_FALSE;
@@ -7936,9 +12000,22 @@ static GLboolean _glewInit_GL_NV_conservative_raster_dilate (GLEW_CONTEXT_ARG_DE
#endif /* GL_NV_conservative_raster_dilate */
+#ifdef GL_NV_conservative_raster_pre_snap_triangles
+
+static GLboolean _glewInit_GL_NV_conservative_raster_pre_snap_triangles ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((glConservativeRasterParameteriNV = (PFNGLCONSERVATIVERASTERPARAMETERINVPROC)glewGetProcAddress((const GLubyte*)"glConservativeRasterParameteriNV")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* GL_NV_conservative_raster_pre_snap_triangles */
+
#ifdef GL_NV_copy_image
-static GLboolean _glewInit_GL_NV_copy_image (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_copy_image ()
{
GLboolean r = GL_FALSE;
@@ -7951,7 +12028,7 @@ static GLboolean _glewInit_GL_NV_copy_image (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_NV_depth_buffer_float
-static GLboolean _glewInit_GL_NV_depth_buffer_float (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_depth_buffer_float ()
{
GLboolean r = GL_FALSE;
@@ -7966,7 +12043,7 @@ static GLboolean _glewInit_GL_NV_depth_buffer_float (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_NV_draw_texture
-static GLboolean _glewInit_GL_NV_draw_texture (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_draw_texture ()
{
GLboolean r = GL_FALSE;
@@ -7977,9 +12054,26 @@ static GLboolean _glewInit_GL_NV_draw_texture (GLEW_CONTEXT_ARG_DEF_INIT)
#endif /* GL_NV_draw_texture */
+#ifdef GL_NV_draw_vulkan_image
+
+static GLboolean _glewInit_GL_NV_draw_vulkan_image ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((glDrawVkImageNV = (PFNGLDRAWVKIMAGENVPROC)glewGetProcAddress((const GLubyte*)"glDrawVkImageNV")) == NULL) || r;
+ r = ((glGetVkProcAddrNV = (PFNGLGETVKPROCADDRNVPROC)glewGetProcAddress((const GLubyte*)"glGetVkProcAddrNV")) == NULL) || r;
+ r = ((glSignalVkFenceNV = (PFNGLSIGNALVKFENCENVPROC)glewGetProcAddress((const GLubyte*)"glSignalVkFenceNV")) == NULL) || r;
+ r = ((glSignalVkSemaphoreNV = (PFNGLSIGNALVKSEMAPHORENVPROC)glewGetProcAddress((const GLubyte*)"glSignalVkSemaphoreNV")) == NULL) || r;
+ r = ((glWaitVkSemaphoreNV = (PFNGLWAITVKSEMAPHORENVPROC)glewGetProcAddress((const GLubyte*)"glWaitVkSemaphoreNV")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* GL_NV_draw_vulkan_image */
+
#ifdef GL_NV_evaluators
-static GLboolean _glewInit_GL_NV_evaluators (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_evaluators ()
{
GLboolean r = GL_FALSE;
@@ -8000,7 +12094,7 @@ static GLboolean _glewInit_GL_NV_evaluators (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_NV_explicit_multisample
-static GLboolean _glewInit_GL_NV_explicit_multisample (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_explicit_multisample ()
{
GLboolean r = GL_FALSE;
@@ -8015,7 +12109,7 @@ static GLboolean _glewInit_GL_NV_explicit_multisample (GLEW_CONTEXT_ARG_DEF_INIT
#ifdef GL_NV_fence
-static GLboolean _glewInit_GL_NV_fence (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_fence ()
{
GLboolean r = GL_FALSE;
@@ -8034,7 +12128,7 @@ static GLboolean _glewInit_GL_NV_fence (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_NV_fragment_coverage_to_color
-static GLboolean _glewInit_GL_NV_fragment_coverage_to_color (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_fragment_coverage_to_color ()
{
GLboolean r = GL_FALSE;
@@ -8047,7 +12141,7 @@ static GLboolean _glewInit_GL_NV_fragment_coverage_to_color (GLEW_CONTEXT_ARG_DE
#ifdef GL_NV_fragment_program
-static GLboolean _glewInit_GL_NV_fragment_program (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_fragment_program ()
{
GLboolean r = GL_FALSE;
@@ -8065,7 +12159,7 @@ static GLboolean _glewInit_GL_NV_fragment_program (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_NV_framebuffer_multisample_coverage
-static GLboolean _glewInit_GL_NV_framebuffer_multisample_coverage (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_framebuffer_multisample_coverage ()
{
GLboolean r = GL_FALSE;
@@ -8078,7 +12172,7 @@ static GLboolean _glewInit_GL_NV_framebuffer_multisample_coverage (GLEW_CONTEXT_
#ifdef GL_NV_geometry_program4
-static GLboolean _glewInit_GL_NV_geometry_program4 (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_geometry_program4 ()
{
GLboolean r = GL_FALSE;
@@ -8089,9 +12183,33 @@ static GLboolean _glewInit_GL_NV_geometry_program4 (GLEW_CONTEXT_ARG_DEF_INIT)
#endif /* GL_NV_geometry_program4 */
+#ifdef GL_NV_gpu_multicast
+
+static GLboolean _glewInit_GL_NV_gpu_multicast ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((glMulticastBarrierNV = (PFNGLMULTICASTBARRIERNVPROC)glewGetProcAddress((const GLubyte*)"glMulticastBarrierNV")) == NULL) || r;
+ r = ((glMulticastBlitFramebufferNV = (PFNGLMULTICASTBLITFRAMEBUFFERNVPROC)glewGetProcAddress((const GLubyte*)"glMulticastBlitFramebufferNV")) == NULL) || r;
+ r = ((glMulticastBufferSubDataNV = (PFNGLMULTICASTBUFFERSUBDATANVPROC)glewGetProcAddress((const GLubyte*)"glMulticastBufferSubDataNV")) == NULL) || r;
+ r = ((glMulticastCopyBufferSubDataNV = (PFNGLMULTICASTCOPYBUFFERSUBDATANVPROC)glewGetProcAddress((const GLubyte*)"glMulticastCopyBufferSubDataNV")) == NULL) || r;
+ r = ((glMulticastCopyImageSubDataNV = (PFNGLMULTICASTCOPYIMAGESUBDATANVPROC)glewGetProcAddress((const GLubyte*)"glMulticastCopyImageSubDataNV")) == NULL) || r;
+ r = ((glMulticastFramebufferSampleLocationsfvNV = (PFNGLMULTICASTFRAMEBUFFERSAMPLELOCATIONSFVNVPROC)glewGetProcAddress((const GLubyte*)"glMulticastFramebufferSampleLocationsfvNV")) == NULL) || r;
+ r = ((glMulticastGetQueryObjecti64vNV = (PFNGLMULTICASTGETQUERYOBJECTI64VNVPROC)glewGetProcAddress((const GLubyte*)"glMulticastGetQueryObjecti64vNV")) == NULL) || r;
+ r = ((glMulticastGetQueryObjectivNV = (PFNGLMULTICASTGETQUERYOBJECTIVNVPROC)glewGetProcAddress((const GLubyte*)"glMulticastGetQueryObjectivNV")) == NULL) || r;
+ r = ((glMulticastGetQueryObjectui64vNV = (PFNGLMULTICASTGETQUERYOBJECTUI64VNVPROC)glewGetProcAddress((const GLubyte*)"glMulticastGetQueryObjectui64vNV")) == NULL) || r;
+ r = ((glMulticastGetQueryObjectuivNV = (PFNGLMULTICASTGETQUERYOBJECTUIVNVPROC)glewGetProcAddress((const GLubyte*)"glMulticastGetQueryObjectuivNV")) == NULL) || r;
+ r = ((glMulticastWaitSyncNV = (PFNGLMULTICASTWAITSYNCNVPROC)glewGetProcAddress((const GLubyte*)"glMulticastWaitSyncNV")) == NULL) || r;
+ r = ((glRenderGpuMaskNV = (PFNGLRENDERGPUMASKNVPROC)glewGetProcAddress((const GLubyte*)"glRenderGpuMaskNV")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* GL_NV_gpu_multicast */
+
#ifdef GL_NV_gpu_program4
-static GLboolean _glewInit_GL_NV_gpu_program4 (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_gpu_program4 ()
{
GLboolean r = GL_FALSE;
@@ -8115,7 +12233,7 @@ static GLboolean _glewInit_GL_NV_gpu_program4 (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_NV_gpu_shader5
-static GLboolean _glewInit_GL_NV_gpu_shader5 (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_gpu_shader5 ()
{
GLboolean r = GL_FALSE;
@@ -8161,7 +12279,7 @@ static GLboolean _glewInit_GL_NV_gpu_shader5 (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_NV_half_float
-static GLboolean _glewInit_GL_NV_half_float (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_half_float ()
{
GLboolean r = GL_FALSE;
@@ -8219,7 +12337,7 @@ static GLboolean _glewInit_GL_NV_half_float (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_NV_internalformat_sample_query
-static GLboolean _glewInit_GL_NV_internalformat_sample_query (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_internalformat_sample_query ()
{
GLboolean r = GL_FALSE;
@@ -8232,7 +12350,7 @@ static GLboolean _glewInit_GL_NV_internalformat_sample_query (GLEW_CONTEXT_ARG_D
#ifdef GL_NV_occlusion_query
-static GLboolean _glewInit_GL_NV_occlusion_query (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_occlusion_query ()
{
GLboolean r = GL_FALSE;
@@ -8251,7 +12369,7 @@ static GLboolean _glewInit_GL_NV_occlusion_query (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_NV_parameter_buffer_object
-static GLboolean _glewInit_GL_NV_parameter_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_parameter_buffer_object ()
{
GLboolean r = GL_FALSE;
@@ -8266,7 +12384,7 @@ static GLboolean _glewInit_GL_NV_parameter_buffer_object (GLEW_CONTEXT_ARG_DEF_I
#ifdef GL_NV_path_rendering
-static GLboolean _glewInit_GL_NV_path_rendering (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_path_rendering ()
{
GLboolean r = GL_FALSE;
@@ -8342,7 +12460,7 @@ static GLboolean _glewInit_GL_NV_path_rendering (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_NV_pixel_data_range
-static GLboolean _glewInit_GL_NV_pixel_data_range (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_pixel_data_range ()
{
GLboolean r = GL_FALSE;
@@ -8356,7 +12474,7 @@ static GLboolean _glewInit_GL_NV_pixel_data_range (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_NV_point_sprite
-static GLboolean _glewInit_GL_NV_point_sprite (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_point_sprite ()
{
GLboolean r = GL_FALSE;
@@ -8370,7 +12488,7 @@ static GLboolean _glewInit_GL_NV_point_sprite (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_NV_present_video
-static GLboolean _glewInit_GL_NV_present_video (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_present_video ()
{
GLboolean r = GL_FALSE;
@@ -8388,7 +12506,7 @@ static GLboolean _glewInit_GL_NV_present_video (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_NV_primitive_restart
-static GLboolean _glewInit_GL_NV_primitive_restart (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_primitive_restart ()
{
GLboolean r = GL_FALSE;
@@ -8402,7 +12520,7 @@ static GLboolean _glewInit_GL_NV_primitive_restart (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_NV_register_combiners
-static GLboolean _glewInit_GL_NV_register_combiners (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_register_combiners ()
{
GLboolean r = GL_FALSE;
@@ -8427,7 +12545,7 @@ static GLboolean _glewInit_GL_NV_register_combiners (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_NV_register_combiners2
-static GLboolean _glewInit_GL_NV_register_combiners2 (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_register_combiners2 ()
{
GLboolean r = GL_FALSE;
@@ -8441,7 +12559,7 @@ static GLboolean _glewInit_GL_NV_register_combiners2 (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_NV_sample_locations
-static GLboolean _glewInit_GL_NV_sample_locations (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_sample_locations ()
{
GLboolean r = GL_FALSE;
@@ -8455,7 +12573,7 @@ static GLboolean _glewInit_GL_NV_sample_locations (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_NV_shader_buffer_load
-static GLboolean _glewInit_GL_NV_shader_buffer_load (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_shader_buffer_load ()
{
GLboolean r = GL_FALSE;
@@ -8480,7 +12598,7 @@ static GLboolean _glewInit_GL_NV_shader_buffer_load (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_NV_texture_barrier
-static GLboolean _glewInit_GL_NV_texture_barrier (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_texture_barrier ()
{
GLboolean r = GL_FALSE;
@@ -8493,7 +12611,7 @@ static GLboolean _glewInit_GL_NV_texture_barrier (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_NV_texture_multisample
-static GLboolean _glewInit_GL_NV_texture_multisample (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_texture_multisample ()
{
GLboolean r = GL_FALSE;
@@ -8511,7 +12629,7 @@ static GLboolean _glewInit_GL_NV_texture_multisample (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_NV_transform_feedback
-static GLboolean _glewInit_GL_NV_transform_feedback (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_transform_feedback ()
{
GLboolean r = GL_FALSE;
@@ -8534,7 +12652,7 @@ static GLboolean _glewInit_GL_NV_transform_feedback (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_NV_transform_feedback2
-static GLboolean _glewInit_GL_NV_transform_feedback2 (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_transform_feedback2 ()
{
GLboolean r = GL_FALSE;
@@ -8553,7 +12671,7 @@ static GLboolean _glewInit_GL_NV_transform_feedback2 (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_NV_vdpau_interop
-static GLboolean _glewInit_GL_NV_vdpau_interop (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_vdpau_interop ()
{
GLboolean r = GL_FALSE;
@@ -8575,7 +12693,7 @@ static GLboolean _glewInit_GL_NV_vdpau_interop (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_NV_vertex_array_range
-static GLboolean _glewInit_GL_NV_vertex_array_range (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_vertex_array_range ()
{
GLboolean r = GL_FALSE;
@@ -8589,7 +12707,7 @@ static GLboolean _glewInit_GL_NV_vertex_array_range (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_NV_vertex_attrib_integer_64bit
-static GLboolean _glewInit_GL_NV_vertex_attrib_integer_64bit (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_vertex_attrib_integer_64bit ()
{
GLboolean r = GL_FALSE;
@@ -8620,7 +12738,7 @@ static GLboolean _glewInit_GL_NV_vertex_attrib_integer_64bit (GLEW_CONTEXT_ARG_D
#ifdef GL_NV_vertex_buffer_unified_memory
-static GLboolean _glewInit_GL_NV_vertex_buffer_unified_memory (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_vertex_buffer_unified_memory ()
{
GLboolean r = GL_FALSE;
@@ -8644,7 +12762,7 @@ static GLboolean _glewInit_GL_NV_vertex_buffer_unified_memory (GLEW_CONTEXT_ARG_
#ifdef GL_NV_vertex_program
-static GLboolean _glewInit_GL_NV_vertex_program (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_vertex_program ()
{
GLboolean r = GL_FALSE;
@@ -8720,7 +12838,7 @@ static GLboolean _glewInit_GL_NV_vertex_program (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_NV_video_capture
-static GLboolean _glewInit_GL_NV_video_capture (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_NV_video_capture ()
{
GLboolean r = GL_FALSE;
@@ -8742,9 +12860,22 @@ static GLboolean _glewInit_GL_NV_video_capture (GLEW_CONTEXT_ARG_DEF_INIT)
#endif /* GL_NV_video_capture */
+#ifdef GL_NV_viewport_swizzle
+
+static GLboolean _glewInit_GL_NV_viewport_swizzle ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((glViewportSwizzleNV = (PFNGLVIEWPORTSWIZZLENVPROC)glewGetProcAddress((const GLubyte*)"glViewportSwizzleNV")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* GL_NV_viewport_swizzle */
+
#ifdef GL_OES_single_precision
-static GLboolean _glewInit_GL_OES_single_precision (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_OES_single_precision ()
{
GLboolean r = GL_FALSE;
@@ -8762,7 +12893,7 @@ static GLboolean _glewInit_GL_OES_single_precision (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_OVR_multiview
-static GLboolean _glewInit_GL_OVR_multiview (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_OVR_multiview ()
{
GLboolean r = GL_FALSE;
@@ -8775,7 +12906,7 @@ static GLboolean _glewInit_GL_OVR_multiview (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_REGAL_ES1_0_compatibility
-static GLboolean _glewInit_GL_REGAL_ES1_0_compatibility (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_REGAL_ES1_0_compatibility ()
{
GLboolean r = GL_FALSE;
@@ -8818,7 +12949,7 @@ static GLboolean _glewInit_GL_REGAL_ES1_0_compatibility (GLEW_CONTEXT_ARG_DEF_IN
#ifdef GL_REGAL_ES1_1_compatibility
-static GLboolean _glewInit_GL_REGAL_ES1_1_compatibility (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_REGAL_ES1_1_compatibility ()
{
GLboolean r = GL_FALSE;
@@ -8843,7 +12974,7 @@ static GLboolean _glewInit_GL_REGAL_ES1_1_compatibility (GLEW_CONTEXT_ARG_DEF_IN
#ifdef GL_REGAL_error_string
-static GLboolean _glewInit_GL_REGAL_error_string (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_REGAL_error_string ()
{
GLboolean r = GL_FALSE;
@@ -8856,7 +12987,7 @@ static GLboolean _glewInit_GL_REGAL_error_string (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_REGAL_extension_query
-static GLboolean _glewInit_GL_REGAL_extension_query (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_REGAL_extension_query ()
{
GLboolean r = GL_FALSE;
@@ -8870,7 +13001,7 @@ static GLboolean _glewInit_GL_REGAL_extension_query (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_REGAL_log
-static GLboolean _glewInit_GL_REGAL_log (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_REGAL_log ()
{
GLboolean r = GL_FALSE;
@@ -8883,7 +13014,7 @@ static GLboolean _glewInit_GL_REGAL_log (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_REGAL_proc_address
-static GLboolean _glewInit_GL_REGAL_proc_address (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_REGAL_proc_address ()
{
GLboolean r = GL_FALSE;
@@ -8896,7 +13027,7 @@ static GLboolean _glewInit_GL_REGAL_proc_address (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_SGIS_detail_texture
-static GLboolean _glewInit_GL_SGIS_detail_texture (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_SGIS_detail_texture ()
{
GLboolean r = GL_FALSE;
@@ -8910,7 +13041,7 @@ static GLboolean _glewInit_GL_SGIS_detail_texture (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_SGIS_fog_function
-static GLboolean _glewInit_GL_SGIS_fog_function (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_SGIS_fog_function ()
{
GLboolean r = GL_FALSE;
@@ -8924,7 +13055,7 @@ static GLboolean _glewInit_GL_SGIS_fog_function (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_SGIS_multisample
-static GLboolean _glewInit_GL_SGIS_multisample (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_SGIS_multisample ()
{
GLboolean r = GL_FALSE;
@@ -8938,7 +13069,7 @@ static GLboolean _glewInit_GL_SGIS_multisample (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_SGIS_sharpen_texture
-static GLboolean _glewInit_GL_SGIS_sharpen_texture (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_SGIS_sharpen_texture ()
{
GLboolean r = GL_FALSE;
@@ -8952,7 +13083,7 @@ static GLboolean _glewInit_GL_SGIS_sharpen_texture (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_SGIS_texture4D
-static GLboolean _glewInit_GL_SGIS_texture4D (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_SGIS_texture4D ()
{
GLboolean r = GL_FALSE;
@@ -8966,7 +13097,7 @@ static GLboolean _glewInit_GL_SGIS_texture4D (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_SGIS_texture_filter4
-static GLboolean _glewInit_GL_SGIS_texture_filter4 (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_SGIS_texture_filter4 ()
{
GLboolean r = GL_FALSE;
@@ -8980,7 +13111,7 @@ static GLboolean _glewInit_GL_SGIS_texture_filter4 (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_SGIX_async
-static GLboolean _glewInit_GL_SGIX_async (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_SGIX_async ()
{
GLboolean r = GL_FALSE;
@@ -8998,7 +13129,7 @@ static GLboolean _glewInit_GL_SGIX_async (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_SGIX_flush_raster
-static GLboolean _glewInit_GL_SGIX_flush_raster (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_SGIX_flush_raster ()
{
GLboolean r = GL_FALSE;
@@ -9011,7 +13142,7 @@ static GLboolean _glewInit_GL_SGIX_flush_raster (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_SGIX_fog_texture
-static GLboolean _glewInit_GL_SGIX_fog_texture (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_SGIX_fog_texture ()
{
GLboolean r = GL_FALSE;
@@ -9024,7 +13155,7 @@ static GLboolean _glewInit_GL_SGIX_fog_texture (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_SGIX_fragment_specular_lighting
-static GLboolean _glewInit_GL_SGIX_fragment_specular_lighting (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_SGIX_fragment_specular_lighting ()
{
GLboolean r = GL_FALSE;
@@ -9053,7 +13184,7 @@ static GLboolean _glewInit_GL_SGIX_fragment_specular_lighting (GLEW_CONTEXT_ARG_
#ifdef GL_SGIX_framezoom
-static GLboolean _glewInit_GL_SGIX_framezoom (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_SGIX_framezoom ()
{
GLboolean r = GL_FALSE;
@@ -9066,7 +13197,7 @@ static GLboolean _glewInit_GL_SGIX_framezoom (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_SGIX_pixel_texture
-static GLboolean _glewInit_GL_SGIX_pixel_texture (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_SGIX_pixel_texture ()
{
GLboolean r = GL_FALSE;
@@ -9079,7 +13210,7 @@ static GLboolean _glewInit_GL_SGIX_pixel_texture (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_SGIX_reference_plane
-static GLboolean _glewInit_GL_SGIX_reference_plane (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_SGIX_reference_plane ()
{
GLboolean r = GL_FALSE;
@@ -9092,7 +13223,7 @@ static GLboolean _glewInit_GL_SGIX_reference_plane (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_SGIX_sprite
-static GLboolean _glewInit_GL_SGIX_sprite (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_SGIX_sprite ()
{
GLboolean r = GL_FALSE;
@@ -9108,7 +13239,7 @@ static GLboolean _glewInit_GL_SGIX_sprite (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_SGIX_tag_sample_buffer
-static GLboolean _glewInit_GL_SGIX_tag_sample_buffer (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_SGIX_tag_sample_buffer ()
{
GLboolean r = GL_FALSE;
@@ -9121,7 +13252,7 @@ static GLboolean _glewInit_GL_SGIX_tag_sample_buffer (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_SGI_color_table
-static GLboolean _glewInit_GL_SGI_color_table (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_SGI_color_table ()
{
GLboolean r = GL_FALSE;
@@ -9140,7 +13271,7 @@ static GLboolean _glewInit_GL_SGI_color_table (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_SUNX_constant_data
-static GLboolean _glewInit_GL_SUNX_constant_data (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_SUNX_constant_data ()
{
GLboolean r = GL_FALSE;
@@ -9153,7 +13284,7 @@ static GLboolean _glewInit_GL_SUNX_constant_data (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_SUN_global_alpha
-static GLboolean _glewInit_GL_SUN_global_alpha (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_SUN_global_alpha ()
{
GLboolean r = GL_FALSE;
@@ -9173,7 +13304,7 @@ static GLboolean _glewInit_GL_SUN_global_alpha (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_SUN_read_video_pixels
-static GLboolean _glewInit_GL_SUN_read_video_pixels (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_SUN_read_video_pixels ()
{
GLboolean r = GL_FALSE;
@@ -9186,7 +13317,7 @@ static GLboolean _glewInit_GL_SUN_read_video_pixels (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_SUN_triangle_list
-static GLboolean _glewInit_GL_SUN_triangle_list (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_SUN_triangle_list ()
{
GLboolean r = GL_FALSE;
@@ -9205,7 +13336,7 @@ static GLboolean _glewInit_GL_SUN_triangle_list (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_SUN_vertex
-static GLboolean _glewInit_GL_SUN_vertex (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_SUN_vertex ()
{
GLboolean r = GL_FALSE;
@@ -9257,7 +13388,7 @@ static GLboolean _glewInit_GL_SUN_vertex (GLEW_CONTEXT_ARG_DEF_INIT)
#ifdef GL_WIN_swap_hint
-static GLboolean _glewInit_GL_WIN_swap_hint (GLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GL_WIN_swap_hint ()
{
GLboolean r = GL_FALSE;
@@ -9270,35 +13401,101 @@ static GLboolean _glewInit_GL_WIN_swap_hint (GLEW_CONTEXT_ARG_DEF_INIT)
/* ------------------------------------------------------------------------- */
+static int _glewExtensionCompare(const char *s1, const char *s2)
+{
+ /* http://www.chanduthedev.com/2012/07/strcmp-implementation-in-c.html */
+ while (*s1 || *s2)
+ {
+ if (*s1 > *s2)
+ return 1;
+ if (*s1 < *s2)
+ return -1;
+ s1++;
+ s2++;
+ }
+ return 0;
+}
+
+static ptrdiff_t _glewBsearchExtension(const char* name)
+{
+ ptrdiff_t lo = 0, hi = sizeof(_glewExtensionLookup) / sizeof(char*) - 2;
+
+ while (lo <= hi)
+ {
+ ptrdiff_t mid = (lo + hi) / 2;
+ const int cmp = _glewExtensionCompare(name, _glewExtensionLookup[mid]);
+ if (cmp < 0) hi = mid - 1;
+ else if (cmp > 0) lo = mid + 1;
+ else return mid;
+ }
+ return -1;
+}
+
+static GLboolean *_glewGetExtensionString(const char *name)
+{
+ ptrdiff_t n = _glewBsearchExtension(name);
+ if (n >= 0) return &_glewExtensionString[n];
+ return NULL;
+}
+
+static GLboolean *_glewGetExtensionEnable(const char *name)
+{
+ ptrdiff_t n = _glewBsearchExtension(name);
+ if (n >= 0) return _glewExtensionEnabled[n];
+ return NULL;
+}
+
+static const char *_glewNextSpace(const char *i)
+{
+ const char *j = i;
+ if (j)
+ while (*j!=' ' && *j) ++j;
+ return j;
+}
+
+static const char *_glewNextNonSpace(const char *i)
+{
+ const char *j = i;
+ if (j)
+ while (*j==' ') ++j;
+ return j;
+}
+
GLboolean GLEWAPIENTRY glewGetExtension (const char* name)
-{
- const GLubyte* start;
- const GLubyte* end;
- start = (const GLubyte*)glGetString(GL_EXTENSIONS);
- if (start == 0)
- return GL_FALSE;
- end = start + _glewStrLen(start);
- return _glewSearchExtension(name, start, end);
+{
+ GLboolean *enable = _glewGetExtensionString(name);
+ if (enable)
+ return *enable;
+ return GL_FALSE;
}
/* ------------------------------------------------------------------------- */
-#ifndef GLEW_MX
-static
-#endif
-GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST)
+typedef const GLubyte* (GLAPIENTRY * PFNGLGETSTRINGPROC) (GLenum name);
+typedef void (GLAPIENTRY * PFNGLGETINTEGERVPROC) (GLenum pname, GLint *params);
+
+static GLenum GLEWAPIENTRY glewContextInit ()
{
+ PFNGLGETSTRINGPROC getString;
const GLubyte* s;
GLuint dot;
GLint major, minor;
- const GLubyte* extStart;
- const GLubyte* extEnd;
+ size_t n;
+
+ #ifdef _WIN32
+ getString = glGetString;
+ #else
+ getString = (PFNGLGETSTRINGPROC) glewGetProcAddress((const GLubyte*)"glGetString");
+ if (!getString)
+ return GLEW_ERROR_NO_GL_VERSION;
+ #endif
+
/* query opengl version */
- s = glGetString(GL_VERSION);
+ s = getString(GL_VERSION);
dot = _glewStrCLen(s, '.');
if (dot == 0)
return GLEW_ERROR_NO_GL_VERSION;
-
+
major = s[dot-1]-'0';
minor = s[dot+1]-'0';
@@ -9306,7 +13503,6 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST)
minor = 0;
if (major<0 || major>9)
return GLEW_ERROR_NO_GL_VERSION;
-
if (major == 1 && minor == 0)
{
@@ -9324,2047 +13520,2262 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST)
GLEW_VERSION_3_2 = GLEW_VERSION_3_3 == GL_TRUE || ( major == 3 && minor >= 2 ) ? GL_TRUE : GL_FALSE;
GLEW_VERSION_3_1 = GLEW_VERSION_3_2 == GL_TRUE || ( major == 3 && minor >= 1 ) ? GL_TRUE : GL_FALSE;
GLEW_VERSION_3_0 = GLEW_VERSION_3_1 == GL_TRUE || ( major == 3 ) ? GL_TRUE : GL_FALSE;
- GLEW_VERSION_2_1 = GLEW_VERSION_3_0 == GL_TRUE || ( major == 2 && minor >= 1 ) ? GL_TRUE : GL_FALSE;
+ GLEW_VERSION_2_1 = GLEW_VERSION_3_0 == GL_TRUE || ( major == 2 && minor >= 1 ) ? GL_TRUE : GL_FALSE;
GLEW_VERSION_2_0 = GLEW_VERSION_2_1 == GL_TRUE || ( major == 2 ) ? GL_TRUE : GL_FALSE;
GLEW_VERSION_1_5 = GLEW_VERSION_2_0 == GL_TRUE || ( major == 1 && minor >= 5 ) ? GL_TRUE : GL_FALSE;
GLEW_VERSION_1_4 = GLEW_VERSION_1_5 == GL_TRUE || ( major == 1 && minor >= 4 ) ? GL_TRUE : GL_FALSE;
GLEW_VERSION_1_3 = GLEW_VERSION_1_4 == GL_TRUE || ( major == 1 && minor >= 3 ) ? GL_TRUE : GL_FALSE;
- GLEW_VERSION_1_2_1 = GLEW_VERSION_1_3 == GL_TRUE ? GL_TRUE : GL_FALSE;
+ GLEW_VERSION_1_2_1 = GLEW_VERSION_1_3 == GL_TRUE ? GL_TRUE : GL_FALSE;
GLEW_VERSION_1_2 = GLEW_VERSION_1_2_1 == GL_TRUE || ( major == 1 && minor >= 2 ) ? GL_TRUE : GL_FALSE;
GLEW_VERSION_1_1 = GLEW_VERSION_1_2 == GL_TRUE || ( major == 1 && minor >= 1 ) ? GL_TRUE : GL_FALSE;
}
- /* query opengl extensions string */
- extStart = glGetString(GL_EXTENSIONS);
- if (extStart == 0)
- extStart = (const GLubyte*)"";
- extEnd = extStart + _glewStrLen(extStart);
+ for (n = 0; n < sizeof(_glewExtensionString) / sizeof(_glewExtensionString[0]); ++n)
+ _glewExtensionString[n] = GL_FALSE;
- /* initialize extensions */
+ if (GLEW_VERSION_3_0)
+ {
+ GLint n = 0;
+ GLint i;
+ PFNGLGETINTEGERVPROC getIntegerv;
+ PFNGLGETSTRINGIPROC getStringi;
+ const char *ext;
+ GLboolean *enable;
+
+ #ifdef _WIN32
+ getIntegerv = glGetIntegerv;
+ #else
+ getIntegerv = (PFNGLGETINTEGERVPROC) glewGetProcAddress((const GLubyte*)"glGetIntegerv");
+ #endif
+
+ if (getIntegerv)
+ getIntegerv(GL_NUM_EXTENSIONS, &n);
+
+ /* glGetStringi is OpenGL 3.0 */
+ getStringi = (PFNGLGETSTRINGIPROC) glewGetProcAddress((const GLubyte*)"glGetStringi");
+ if (getStringi)
+ for (i = 0; i<n; ++i)
+ {
+ ext = (const char *) getStringi(GL_EXTENSIONS, i);
+
+ /* Based on extension string(s), glewGetExtension purposes */
+ enable = _glewGetExtensionString(ext);
+ if (enable)
+ *enable = GL_TRUE;
+
+ /* Based on extension string(s), experimental mode, glewIsSupported purposes */
+ enable = _glewGetExtensionEnable(ext);
+ if (enable)
+ *enable = GL_TRUE;
+ }
+ }
+ else
+ {
+ const char *extensions;
+ const char *end;
+ const char *i;
+ const char *j;
+ char ext[128];
+ GLboolean *enable;
+
+ extensions = (const char *) getString(GL_EXTENSIONS);
+
+ if (extensions)
+ {
+ end = extensions + _glewStrLen((const GLubyte *) extensions);
+ for (i=extensions; i<end; i = j + 1)
+ {
+ i = _glewNextNonSpace(i);
+ j = _glewNextSpace(i);
+
+ /* Copy extension into NUL terminated string */
+ if (j-i >= (ptrdiff_t) sizeof(ext))
+ continue;
+ _glewStrCopy(ext, i, ' ');
+
+ /* Based on extension string(s), glewGetExtension purposes */
+ enable = _glewGetExtensionString(ext);
+ if (enable)
+ *enable = GL_TRUE;
+
+ /* Based on extension string(s), experimental mode, glewIsSupported purposes */
+ enable = _glewGetExtensionEnable(ext);
+ if (enable)
+ *enable = GL_TRUE;
+ }
+ }
+ }
#ifdef GL_VERSION_1_2
- if (glewExperimental || GLEW_VERSION_1_2) GLEW_VERSION_1_2 = !_glewInit_GL_VERSION_1_2(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_VERSION_1_2) GLEW_VERSION_1_2 = !_glewInit_GL_VERSION_1_2();
#endif /* GL_VERSION_1_2 */
-#ifdef GL_VERSION_1_2_1
-#endif /* GL_VERSION_1_2_1 */
#ifdef GL_VERSION_1_3
- if (glewExperimental || GLEW_VERSION_1_3) GLEW_VERSION_1_3 = !_glewInit_GL_VERSION_1_3(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_VERSION_1_3) GLEW_VERSION_1_3 = !_glewInit_GL_VERSION_1_3();
#endif /* GL_VERSION_1_3 */
#ifdef GL_VERSION_1_4
- if (glewExperimental || GLEW_VERSION_1_4) GLEW_VERSION_1_4 = !_glewInit_GL_VERSION_1_4(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_VERSION_1_4) GLEW_VERSION_1_4 = !_glewInit_GL_VERSION_1_4();
#endif /* GL_VERSION_1_4 */
#ifdef GL_VERSION_1_5
- if (glewExperimental || GLEW_VERSION_1_5) GLEW_VERSION_1_5 = !_glewInit_GL_VERSION_1_5(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_VERSION_1_5) GLEW_VERSION_1_5 = !_glewInit_GL_VERSION_1_5();
#endif /* GL_VERSION_1_5 */
#ifdef GL_VERSION_2_0
- if (glewExperimental || GLEW_VERSION_2_0) GLEW_VERSION_2_0 = !_glewInit_GL_VERSION_2_0(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_VERSION_2_0) GLEW_VERSION_2_0 = !_glewInit_GL_VERSION_2_0();
#endif /* GL_VERSION_2_0 */
#ifdef GL_VERSION_2_1
- if (glewExperimental || GLEW_VERSION_2_1) GLEW_VERSION_2_1 = !_glewInit_GL_VERSION_2_1(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_VERSION_2_1) GLEW_VERSION_2_1 = !_glewInit_GL_VERSION_2_1();
#endif /* GL_VERSION_2_1 */
#ifdef GL_VERSION_3_0
- if (glewExperimental || GLEW_VERSION_3_0) GLEW_VERSION_3_0 = !_glewInit_GL_VERSION_3_0(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_VERSION_3_0) GLEW_VERSION_3_0 = !_glewInit_GL_VERSION_3_0();
#endif /* GL_VERSION_3_0 */
#ifdef GL_VERSION_3_1
- if (glewExperimental || GLEW_VERSION_3_1) GLEW_VERSION_3_1 = !_glewInit_GL_VERSION_3_1(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_VERSION_3_1) GLEW_VERSION_3_1 = !_glewInit_GL_VERSION_3_1();
#endif /* GL_VERSION_3_1 */
#ifdef GL_VERSION_3_2
- if (glewExperimental || GLEW_VERSION_3_2) GLEW_VERSION_3_2 = !_glewInit_GL_VERSION_3_2(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_VERSION_3_2) GLEW_VERSION_3_2 = !_glewInit_GL_VERSION_3_2();
#endif /* GL_VERSION_3_2 */
#ifdef GL_VERSION_3_3
- if (glewExperimental || GLEW_VERSION_3_3) GLEW_VERSION_3_3 = !_glewInit_GL_VERSION_3_3(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_VERSION_3_3) GLEW_VERSION_3_3 = !_glewInit_GL_VERSION_3_3();
#endif /* GL_VERSION_3_3 */
#ifdef GL_VERSION_4_0
- if (glewExperimental || GLEW_VERSION_4_0) GLEW_VERSION_4_0 = !_glewInit_GL_VERSION_4_0(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_VERSION_4_0) GLEW_VERSION_4_0 = !_glewInit_GL_VERSION_4_0();
#endif /* GL_VERSION_4_0 */
-#ifdef GL_VERSION_4_1
-#endif /* GL_VERSION_4_1 */
-#ifdef GL_VERSION_4_2
-#endif /* GL_VERSION_4_2 */
-#ifdef GL_VERSION_4_3
-#endif /* GL_VERSION_4_3 */
-#ifdef GL_VERSION_4_4
-#endif /* GL_VERSION_4_4 */
#ifdef GL_VERSION_4_5
- if (glewExperimental || GLEW_VERSION_4_5) GLEW_VERSION_4_5 = !_glewInit_GL_VERSION_4_5(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_VERSION_4_5) GLEW_VERSION_4_5 = !_glewInit_GL_VERSION_4_5();
#endif /* GL_VERSION_4_5 */
-#ifdef GL_3DFX_multisample
- GLEW_3DFX_multisample = _glewSearchExtension("GL_3DFX_multisample", extStart, extEnd);
-#endif /* GL_3DFX_multisample */
#ifdef GL_3DFX_tbuffer
- GLEW_3DFX_tbuffer = _glewSearchExtension("GL_3DFX_tbuffer", extStart, extEnd);
- if (glewExperimental || GLEW_3DFX_tbuffer) GLEW_3DFX_tbuffer = !_glewInit_GL_3DFX_tbuffer(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_3DFX_tbuffer) GLEW_3DFX_tbuffer = !_glewInit_GL_3DFX_tbuffer();
#endif /* GL_3DFX_tbuffer */
-#ifdef GL_3DFX_texture_compression_FXT1
- GLEW_3DFX_texture_compression_FXT1 = _glewSearchExtension("GL_3DFX_texture_compression_FXT1", extStart, extEnd);
-#endif /* GL_3DFX_texture_compression_FXT1 */
-#ifdef GL_AMD_blend_minmax_factor
- GLEW_AMD_blend_minmax_factor = _glewSearchExtension("GL_AMD_blend_minmax_factor", extStart, extEnd);
-#endif /* GL_AMD_blend_minmax_factor */
-#ifdef GL_AMD_conservative_depth
- GLEW_AMD_conservative_depth = _glewSearchExtension("GL_AMD_conservative_depth", extStart, extEnd);
-#endif /* GL_AMD_conservative_depth */
#ifdef GL_AMD_debug_output
- GLEW_AMD_debug_output = _glewSearchExtension("GL_AMD_debug_output", extStart, extEnd);
- if (glewExperimental || GLEW_AMD_debug_output) GLEW_AMD_debug_output = !_glewInit_GL_AMD_debug_output(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_AMD_debug_output) GLEW_AMD_debug_output = !_glewInit_GL_AMD_debug_output();
#endif /* GL_AMD_debug_output */
-#ifdef GL_AMD_depth_clamp_separate
- GLEW_AMD_depth_clamp_separate = _glewSearchExtension("GL_AMD_depth_clamp_separate", extStart, extEnd);
-#endif /* GL_AMD_depth_clamp_separate */
#ifdef GL_AMD_draw_buffers_blend
- GLEW_AMD_draw_buffers_blend = _glewSearchExtension("GL_AMD_draw_buffers_blend", extStart, extEnd);
- if (glewExperimental || GLEW_AMD_draw_buffers_blend) GLEW_AMD_draw_buffers_blend = !_glewInit_GL_AMD_draw_buffers_blend(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_AMD_draw_buffers_blend) GLEW_AMD_draw_buffers_blend = !_glewInit_GL_AMD_draw_buffers_blend();
#endif /* GL_AMD_draw_buffers_blend */
-#ifdef GL_AMD_gcn_shader
- GLEW_AMD_gcn_shader = _glewSearchExtension("GL_AMD_gcn_shader", extStart, extEnd);
-#endif /* GL_AMD_gcn_shader */
-#ifdef GL_AMD_gpu_shader_int64
- GLEW_AMD_gpu_shader_int64 = _glewSearchExtension("GL_AMD_gpu_shader_int64", extStart, extEnd);
-#endif /* GL_AMD_gpu_shader_int64 */
#ifdef GL_AMD_interleaved_elements
- GLEW_AMD_interleaved_elements = _glewSearchExtension("GL_AMD_interleaved_elements", extStart, extEnd);
- if (glewExperimental || GLEW_AMD_interleaved_elements) GLEW_AMD_interleaved_elements = !_glewInit_GL_AMD_interleaved_elements(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_AMD_interleaved_elements) GLEW_AMD_interleaved_elements = !_glewInit_GL_AMD_interleaved_elements();
#endif /* GL_AMD_interleaved_elements */
#ifdef GL_AMD_multi_draw_indirect
- GLEW_AMD_multi_draw_indirect = _glewSearchExtension("GL_AMD_multi_draw_indirect", extStart, extEnd);
- if (glewExperimental || GLEW_AMD_multi_draw_indirect) GLEW_AMD_multi_draw_indirect = !_glewInit_GL_AMD_multi_draw_indirect(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_AMD_multi_draw_indirect) GLEW_AMD_multi_draw_indirect = !_glewInit_GL_AMD_multi_draw_indirect();
#endif /* GL_AMD_multi_draw_indirect */
#ifdef GL_AMD_name_gen_delete
- GLEW_AMD_name_gen_delete = _glewSearchExtension("GL_AMD_name_gen_delete", extStart, extEnd);
- if (glewExperimental || GLEW_AMD_name_gen_delete) GLEW_AMD_name_gen_delete = !_glewInit_GL_AMD_name_gen_delete(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_AMD_name_gen_delete) GLEW_AMD_name_gen_delete = !_glewInit_GL_AMD_name_gen_delete();
#endif /* GL_AMD_name_gen_delete */
#ifdef GL_AMD_occlusion_query_event
- GLEW_AMD_occlusion_query_event = _glewSearchExtension("GL_AMD_occlusion_query_event", extStart, extEnd);
- if (glewExperimental || GLEW_AMD_occlusion_query_event) GLEW_AMD_occlusion_query_event = !_glewInit_GL_AMD_occlusion_query_event(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_AMD_occlusion_query_event) GLEW_AMD_occlusion_query_event = !_glewInit_GL_AMD_occlusion_query_event();
#endif /* GL_AMD_occlusion_query_event */
#ifdef GL_AMD_performance_monitor
- GLEW_AMD_performance_monitor = _glewSearchExtension("GL_AMD_performance_monitor", extStart, extEnd);
- if (glewExperimental || GLEW_AMD_performance_monitor) GLEW_AMD_performance_monitor = !_glewInit_GL_AMD_performance_monitor(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_AMD_performance_monitor) GLEW_AMD_performance_monitor = !_glewInit_GL_AMD_performance_monitor();
#endif /* GL_AMD_performance_monitor */
-#ifdef GL_AMD_pinned_memory
- GLEW_AMD_pinned_memory = _glewSearchExtension("GL_AMD_pinned_memory", extStart, extEnd);
-#endif /* GL_AMD_pinned_memory */
-#ifdef GL_AMD_query_buffer_object
- GLEW_AMD_query_buffer_object = _glewSearchExtension("GL_AMD_query_buffer_object", extStart, extEnd);
-#endif /* GL_AMD_query_buffer_object */
#ifdef GL_AMD_sample_positions
- GLEW_AMD_sample_positions = _glewSearchExtension("GL_AMD_sample_positions", extStart, extEnd);
- if (glewExperimental || GLEW_AMD_sample_positions) GLEW_AMD_sample_positions = !_glewInit_GL_AMD_sample_positions(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_AMD_sample_positions) GLEW_AMD_sample_positions = !_glewInit_GL_AMD_sample_positions();
#endif /* GL_AMD_sample_positions */
-#ifdef GL_AMD_seamless_cubemap_per_texture
- GLEW_AMD_seamless_cubemap_per_texture = _glewSearchExtension("GL_AMD_seamless_cubemap_per_texture", extStart, extEnd);
-#endif /* GL_AMD_seamless_cubemap_per_texture */
-#ifdef GL_AMD_shader_atomic_counter_ops
- GLEW_AMD_shader_atomic_counter_ops = _glewSearchExtension("GL_AMD_shader_atomic_counter_ops", extStart, extEnd);
-#endif /* GL_AMD_shader_atomic_counter_ops */
-#ifdef GL_AMD_shader_stencil_export
- GLEW_AMD_shader_stencil_export = _glewSearchExtension("GL_AMD_shader_stencil_export", extStart, extEnd);
-#endif /* GL_AMD_shader_stencil_export */
-#ifdef GL_AMD_shader_stencil_value_export
- GLEW_AMD_shader_stencil_value_export = _glewSearchExtension("GL_AMD_shader_stencil_value_export", extStart, extEnd);
-#endif /* GL_AMD_shader_stencil_value_export */
-#ifdef GL_AMD_shader_trinary_minmax
- GLEW_AMD_shader_trinary_minmax = _glewSearchExtension("GL_AMD_shader_trinary_minmax", extStart, extEnd);
-#endif /* GL_AMD_shader_trinary_minmax */
#ifdef GL_AMD_sparse_texture
- GLEW_AMD_sparse_texture = _glewSearchExtension("GL_AMD_sparse_texture", extStart, extEnd);
- if (glewExperimental || GLEW_AMD_sparse_texture) GLEW_AMD_sparse_texture = !_glewInit_GL_AMD_sparse_texture(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_AMD_sparse_texture) GLEW_AMD_sparse_texture = !_glewInit_GL_AMD_sparse_texture();
#endif /* GL_AMD_sparse_texture */
#ifdef GL_AMD_stencil_operation_extended
- GLEW_AMD_stencil_operation_extended = _glewSearchExtension("GL_AMD_stencil_operation_extended", extStart, extEnd);
- if (glewExperimental || GLEW_AMD_stencil_operation_extended) GLEW_AMD_stencil_operation_extended = !_glewInit_GL_AMD_stencil_operation_extended(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_AMD_stencil_operation_extended) GLEW_AMD_stencil_operation_extended = !_glewInit_GL_AMD_stencil_operation_extended();
#endif /* GL_AMD_stencil_operation_extended */
-#ifdef GL_AMD_texture_texture4
- GLEW_AMD_texture_texture4 = _glewSearchExtension("GL_AMD_texture_texture4", extStart, extEnd);
-#endif /* GL_AMD_texture_texture4 */
-#ifdef GL_AMD_transform_feedback3_lines_triangles
- GLEW_AMD_transform_feedback3_lines_triangles = _glewSearchExtension("GL_AMD_transform_feedback3_lines_triangles", extStart, extEnd);
-#endif /* GL_AMD_transform_feedback3_lines_triangles */
-#ifdef GL_AMD_transform_feedback4
- GLEW_AMD_transform_feedback4 = _glewSearchExtension("GL_AMD_transform_feedback4", extStart, extEnd);
-#endif /* GL_AMD_transform_feedback4 */
-#ifdef GL_AMD_vertex_shader_layer
- GLEW_AMD_vertex_shader_layer = _glewSearchExtension("GL_AMD_vertex_shader_layer", extStart, extEnd);
-#endif /* GL_AMD_vertex_shader_layer */
#ifdef GL_AMD_vertex_shader_tessellator
- GLEW_AMD_vertex_shader_tessellator = _glewSearchExtension("GL_AMD_vertex_shader_tessellator", extStart, extEnd);
- if (glewExperimental || GLEW_AMD_vertex_shader_tessellator) GLEW_AMD_vertex_shader_tessellator = !_glewInit_GL_AMD_vertex_shader_tessellator(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_AMD_vertex_shader_tessellator) GLEW_AMD_vertex_shader_tessellator = !_glewInit_GL_AMD_vertex_shader_tessellator();
#endif /* GL_AMD_vertex_shader_tessellator */
-#ifdef GL_AMD_vertex_shader_viewport_index
- GLEW_AMD_vertex_shader_viewport_index = _glewSearchExtension("GL_AMD_vertex_shader_viewport_index", extStart, extEnd);
-#endif /* GL_AMD_vertex_shader_viewport_index */
-#ifdef GL_ANGLE_depth_texture
- GLEW_ANGLE_depth_texture = _glewSearchExtension("GL_ANGLE_depth_texture", extStart, extEnd);
-#endif /* GL_ANGLE_depth_texture */
#ifdef GL_ANGLE_framebuffer_blit
- GLEW_ANGLE_framebuffer_blit = _glewSearchExtension("GL_ANGLE_framebuffer_blit", extStart, extEnd);
- if (glewExperimental || GLEW_ANGLE_framebuffer_blit) GLEW_ANGLE_framebuffer_blit = !_glewInit_GL_ANGLE_framebuffer_blit(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ANGLE_framebuffer_blit) GLEW_ANGLE_framebuffer_blit = !_glewInit_GL_ANGLE_framebuffer_blit();
#endif /* GL_ANGLE_framebuffer_blit */
#ifdef GL_ANGLE_framebuffer_multisample
- GLEW_ANGLE_framebuffer_multisample = _glewSearchExtension("GL_ANGLE_framebuffer_multisample", extStart, extEnd);
- if (glewExperimental || GLEW_ANGLE_framebuffer_multisample) GLEW_ANGLE_framebuffer_multisample = !_glewInit_GL_ANGLE_framebuffer_multisample(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ANGLE_framebuffer_multisample) GLEW_ANGLE_framebuffer_multisample = !_glewInit_GL_ANGLE_framebuffer_multisample();
#endif /* GL_ANGLE_framebuffer_multisample */
#ifdef GL_ANGLE_instanced_arrays
- GLEW_ANGLE_instanced_arrays = _glewSearchExtension("GL_ANGLE_instanced_arrays", extStart, extEnd);
- if (glewExperimental || GLEW_ANGLE_instanced_arrays) GLEW_ANGLE_instanced_arrays = !_glewInit_GL_ANGLE_instanced_arrays(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ANGLE_instanced_arrays) GLEW_ANGLE_instanced_arrays = !_glewInit_GL_ANGLE_instanced_arrays();
#endif /* GL_ANGLE_instanced_arrays */
-#ifdef GL_ANGLE_pack_reverse_row_order
- GLEW_ANGLE_pack_reverse_row_order = _glewSearchExtension("GL_ANGLE_pack_reverse_row_order", extStart, extEnd);
-#endif /* GL_ANGLE_pack_reverse_row_order */
-#ifdef GL_ANGLE_program_binary
- GLEW_ANGLE_program_binary = _glewSearchExtension("GL_ANGLE_program_binary", extStart, extEnd);
-#endif /* GL_ANGLE_program_binary */
-#ifdef GL_ANGLE_texture_compression_dxt1
- GLEW_ANGLE_texture_compression_dxt1 = _glewSearchExtension("GL_ANGLE_texture_compression_dxt1", extStart, extEnd);
-#endif /* GL_ANGLE_texture_compression_dxt1 */
-#ifdef GL_ANGLE_texture_compression_dxt3
- GLEW_ANGLE_texture_compression_dxt3 = _glewSearchExtension("GL_ANGLE_texture_compression_dxt3", extStart, extEnd);
-#endif /* GL_ANGLE_texture_compression_dxt3 */
-#ifdef GL_ANGLE_texture_compression_dxt5
- GLEW_ANGLE_texture_compression_dxt5 = _glewSearchExtension("GL_ANGLE_texture_compression_dxt5", extStart, extEnd);
-#endif /* GL_ANGLE_texture_compression_dxt5 */
-#ifdef GL_ANGLE_texture_usage
- GLEW_ANGLE_texture_usage = _glewSearchExtension("GL_ANGLE_texture_usage", extStart, extEnd);
-#endif /* GL_ANGLE_texture_usage */
#ifdef GL_ANGLE_timer_query
- GLEW_ANGLE_timer_query = _glewSearchExtension("GL_ANGLE_timer_query", extStart, extEnd);
- if (glewExperimental || GLEW_ANGLE_timer_query) GLEW_ANGLE_timer_query = !_glewInit_GL_ANGLE_timer_query(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ANGLE_timer_query) GLEW_ANGLE_timer_query = !_glewInit_GL_ANGLE_timer_query();
#endif /* GL_ANGLE_timer_query */
#ifdef GL_ANGLE_translated_shader_source
- GLEW_ANGLE_translated_shader_source = _glewSearchExtension("GL_ANGLE_translated_shader_source", extStart, extEnd);
- if (glewExperimental || GLEW_ANGLE_translated_shader_source) GLEW_ANGLE_translated_shader_source = !_glewInit_GL_ANGLE_translated_shader_source(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ANGLE_translated_shader_source) GLEW_ANGLE_translated_shader_source = !_glewInit_GL_ANGLE_translated_shader_source();
#endif /* GL_ANGLE_translated_shader_source */
-#ifdef GL_APPLE_aux_depth_stencil
- GLEW_APPLE_aux_depth_stencil = _glewSearchExtension("GL_APPLE_aux_depth_stencil", extStart, extEnd);
-#endif /* GL_APPLE_aux_depth_stencil */
-#ifdef GL_APPLE_client_storage
- GLEW_APPLE_client_storage = _glewSearchExtension("GL_APPLE_client_storage", extStart, extEnd);
-#endif /* GL_APPLE_client_storage */
#ifdef GL_APPLE_element_array
- GLEW_APPLE_element_array = _glewSearchExtension("GL_APPLE_element_array", extStart, extEnd);
- if (glewExperimental || GLEW_APPLE_element_array) GLEW_APPLE_element_array = !_glewInit_GL_APPLE_element_array(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_APPLE_element_array) GLEW_APPLE_element_array = !_glewInit_GL_APPLE_element_array();
#endif /* GL_APPLE_element_array */
#ifdef GL_APPLE_fence
- GLEW_APPLE_fence = _glewSearchExtension("GL_APPLE_fence", extStart, extEnd);
- if (glewExperimental || GLEW_APPLE_fence) GLEW_APPLE_fence = !_glewInit_GL_APPLE_fence(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_APPLE_fence) GLEW_APPLE_fence = !_glewInit_GL_APPLE_fence();
#endif /* GL_APPLE_fence */
-#ifdef GL_APPLE_float_pixels
- GLEW_APPLE_float_pixels = _glewSearchExtension("GL_APPLE_float_pixels", extStart, extEnd);
-#endif /* GL_APPLE_float_pixels */
#ifdef GL_APPLE_flush_buffer_range
- GLEW_APPLE_flush_buffer_range = _glewSearchExtension("GL_APPLE_flush_buffer_range", extStart, extEnd);
- if (glewExperimental || GLEW_APPLE_flush_buffer_range) GLEW_APPLE_flush_buffer_range = !_glewInit_GL_APPLE_flush_buffer_range(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_APPLE_flush_buffer_range) GLEW_APPLE_flush_buffer_range = !_glewInit_GL_APPLE_flush_buffer_range();
#endif /* GL_APPLE_flush_buffer_range */
#ifdef GL_APPLE_object_purgeable
- GLEW_APPLE_object_purgeable = _glewSearchExtension("GL_APPLE_object_purgeable", extStart, extEnd);
- if (glewExperimental || GLEW_APPLE_object_purgeable) GLEW_APPLE_object_purgeable = !_glewInit_GL_APPLE_object_purgeable(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_APPLE_object_purgeable) GLEW_APPLE_object_purgeable = !_glewInit_GL_APPLE_object_purgeable();
#endif /* GL_APPLE_object_purgeable */
-#ifdef GL_APPLE_pixel_buffer
- GLEW_APPLE_pixel_buffer = _glewSearchExtension("GL_APPLE_pixel_buffer", extStart, extEnd);
-#endif /* GL_APPLE_pixel_buffer */
-#ifdef GL_APPLE_rgb_422
- GLEW_APPLE_rgb_422 = _glewSearchExtension("GL_APPLE_rgb_422", extStart, extEnd);
-#endif /* GL_APPLE_rgb_422 */
-#ifdef GL_APPLE_row_bytes
- GLEW_APPLE_row_bytes = _glewSearchExtension("GL_APPLE_row_bytes", extStart, extEnd);
-#endif /* GL_APPLE_row_bytes */
-#ifdef GL_APPLE_specular_vector
- GLEW_APPLE_specular_vector = _glewSearchExtension("GL_APPLE_specular_vector", extStart, extEnd);
-#endif /* GL_APPLE_specular_vector */
#ifdef GL_APPLE_texture_range
- GLEW_APPLE_texture_range = _glewSearchExtension("GL_APPLE_texture_range", extStart, extEnd);
- if (glewExperimental || GLEW_APPLE_texture_range) GLEW_APPLE_texture_range = !_glewInit_GL_APPLE_texture_range(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_APPLE_texture_range) GLEW_APPLE_texture_range = !_glewInit_GL_APPLE_texture_range();
#endif /* GL_APPLE_texture_range */
-#ifdef GL_APPLE_transform_hint
- GLEW_APPLE_transform_hint = _glewSearchExtension("GL_APPLE_transform_hint", extStart, extEnd);
-#endif /* GL_APPLE_transform_hint */
#ifdef GL_APPLE_vertex_array_object
- GLEW_APPLE_vertex_array_object = _glewSearchExtension("GL_APPLE_vertex_array_object", extStart, extEnd);
- if (glewExperimental || GLEW_APPLE_vertex_array_object) GLEW_APPLE_vertex_array_object = !_glewInit_GL_APPLE_vertex_array_object(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_APPLE_vertex_array_object) GLEW_APPLE_vertex_array_object = !_glewInit_GL_APPLE_vertex_array_object();
#endif /* GL_APPLE_vertex_array_object */
#ifdef GL_APPLE_vertex_array_range
- GLEW_APPLE_vertex_array_range = _glewSearchExtension("GL_APPLE_vertex_array_range", extStart, extEnd);
- if (glewExperimental || GLEW_APPLE_vertex_array_range) GLEW_APPLE_vertex_array_range = !_glewInit_GL_APPLE_vertex_array_range(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_APPLE_vertex_array_range) GLEW_APPLE_vertex_array_range = !_glewInit_GL_APPLE_vertex_array_range();
#endif /* GL_APPLE_vertex_array_range */
#ifdef GL_APPLE_vertex_program_evaluators
- GLEW_APPLE_vertex_program_evaluators = _glewSearchExtension("GL_APPLE_vertex_program_evaluators", extStart, extEnd);
- if (glewExperimental || GLEW_APPLE_vertex_program_evaluators) GLEW_APPLE_vertex_program_evaluators = !_glewInit_GL_APPLE_vertex_program_evaluators(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_APPLE_vertex_program_evaluators) GLEW_APPLE_vertex_program_evaluators = !_glewInit_GL_APPLE_vertex_program_evaluators();
#endif /* GL_APPLE_vertex_program_evaluators */
-#ifdef GL_APPLE_ycbcr_422
- GLEW_APPLE_ycbcr_422 = _glewSearchExtension("GL_APPLE_ycbcr_422", extStart, extEnd);
-#endif /* GL_APPLE_ycbcr_422 */
#ifdef GL_ARB_ES2_compatibility
- GLEW_ARB_ES2_compatibility = _glewSearchExtension("GL_ARB_ES2_compatibility", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_ES2_compatibility) GLEW_ARB_ES2_compatibility = !_glewInit_GL_ARB_ES2_compatibility(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_ES2_compatibility) GLEW_ARB_ES2_compatibility = !_glewInit_GL_ARB_ES2_compatibility();
#endif /* GL_ARB_ES2_compatibility */
#ifdef GL_ARB_ES3_1_compatibility
- GLEW_ARB_ES3_1_compatibility = _glewSearchExtension("GL_ARB_ES3_1_compatibility", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_ES3_1_compatibility) GLEW_ARB_ES3_1_compatibility = !_glewInit_GL_ARB_ES3_1_compatibility(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_ES3_1_compatibility) GLEW_ARB_ES3_1_compatibility = !_glewInit_GL_ARB_ES3_1_compatibility();
#endif /* GL_ARB_ES3_1_compatibility */
#ifdef GL_ARB_ES3_2_compatibility
- GLEW_ARB_ES3_2_compatibility = _glewSearchExtension("GL_ARB_ES3_2_compatibility", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_ES3_2_compatibility) GLEW_ARB_ES3_2_compatibility = !_glewInit_GL_ARB_ES3_2_compatibility(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_ES3_2_compatibility) GLEW_ARB_ES3_2_compatibility = !_glewInit_GL_ARB_ES3_2_compatibility();
#endif /* GL_ARB_ES3_2_compatibility */
-#ifdef GL_ARB_ES3_compatibility
- GLEW_ARB_ES3_compatibility = _glewSearchExtension("GL_ARB_ES3_compatibility", extStart, extEnd);
-#endif /* GL_ARB_ES3_compatibility */
-#ifdef GL_ARB_arrays_of_arrays
- GLEW_ARB_arrays_of_arrays = _glewSearchExtension("GL_ARB_arrays_of_arrays", extStart, extEnd);
-#endif /* GL_ARB_arrays_of_arrays */
#ifdef GL_ARB_base_instance
- GLEW_ARB_base_instance = _glewSearchExtension("GL_ARB_base_instance", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_base_instance) GLEW_ARB_base_instance = !_glewInit_GL_ARB_base_instance(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_base_instance) GLEW_ARB_base_instance = !_glewInit_GL_ARB_base_instance();
#endif /* GL_ARB_base_instance */
#ifdef GL_ARB_bindless_texture
- GLEW_ARB_bindless_texture = _glewSearchExtension("GL_ARB_bindless_texture", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_bindless_texture) GLEW_ARB_bindless_texture = !_glewInit_GL_ARB_bindless_texture(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_bindless_texture) GLEW_ARB_bindless_texture = !_glewInit_GL_ARB_bindless_texture();
#endif /* GL_ARB_bindless_texture */
#ifdef GL_ARB_blend_func_extended
- GLEW_ARB_blend_func_extended = _glewSearchExtension("GL_ARB_blend_func_extended", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_blend_func_extended) GLEW_ARB_blend_func_extended = !_glewInit_GL_ARB_blend_func_extended(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_blend_func_extended) GLEW_ARB_blend_func_extended = !_glewInit_GL_ARB_blend_func_extended();
#endif /* GL_ARB_blend_func_extended */
#ifdef GL_ARB_buffer_storage
- GLEW_ARB_buffer_storage = _glewSearchExtension("GL_ARB_buffer_storage", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_buffer_storage) GLEW_ARB_buffer_storage = !_glewInit_GL_ARB_buffer_storage(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_buffer_storage) GLEW_ARB_buffer_storage = !_glewInit_GL_ARB_buffer_storage();
#endif /* GL_ARB_buffer_storage */
#ifdef GL_ARB_cl_event
- GLEW_ARB_cl_event = _glewSearchExtension("GL_ARB_cl_event", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_cl_event) GLEW_ARB_cl_event = !_glewInit_GL_ARB_cl_event(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_cl_event) GLEW_ARB_cl_event = !_glewInit_GL_ARB_cl_event();
#endif /* GL_ARB_cl_event */
#ifdef GL_ARB_clear_buffer_object
- GLEW_ARB_clear_buffer_object = _glewSearchExtension("GL_ARB_clear_buffer_object", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_clear_buffer_object) GLEW_ARB_clear_buffer_object = !_glewInit_GL_ARB_clear_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_clear_buffer_object) GLEW_ARB_clear_buffer_object = !_glewInit_GL_ARB_clear_buffer_object();
#endif /* GL_ARB_clear_buffer_object */
#ifdef GL_ARB_clear_texture
- GLEW_ARB_clear_texture = _glewSearchExtension("GL_ARB_clear_texture", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_clear_texture) GLEW_ARB_clear_texture = !_glewInit_GL_ARB_clear_texture(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_clear_texture) GLEW_ARB_clear_texture = !_glewInit_GL_ARB_clear_texture();
#endif /* GL_ARB_clear_texture */
#ifdef GL_ARB_clip_control
- GLEW_ARB_clip_control = _glewSearchExtension("GL_ARB_clip_control", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_clip_control) GLEW_ARB_clip_control = !_glewInit_GL_ARB_clip_control(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_clip_control) GLEW_ARB_clip_control = !_glewInit_GL_ARB_clip_control();
#endif /* GL_ARB_clip_control */
#ifdef GL_ARB_color_buffer_float
- GLEW_ARB_color_buffer_float = _glewSearchExtension("GL_ARB_color_buffer_float", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_color_buffer_float) GLEW_ARB_color_buffer_float = !_glewInit_GL_ARB_color_buffer_float(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_color_buffer_float) GLEW_ARB_color_buffer_float = !_glewInit_GL_ARB_color_buffer_float();
#endif /* GL_ARB_color_buffer_float */
-#ifdef GL_ARB_compatibility
- GLEW_ARB_compatibility = _glewSearchExtension("GL_ARB_compatibility", extStart, extEnd);
-#endif /* GL_ARB_compatibility */
-#ifdef GL_ARB_compressed_texture_pixel_storage
- GLEW_ARB_compressed_texture_pixel_storage = _glewSearchExtension("GL_ARB_compressed_texture_pixel_storage", extStart, extEnd);
-#endif /* GL_ARB_compressed_texture_pixel_storage */
#ifdef GL_ARB_compute_shader
- GLEW_ARB_compute_shader = _glewSearchExtension("GL_ARB_compute_shader", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_compute_shader) GLEW_ARB_compute_shader = !_glewInit_GL_ARB_compute_shader(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_compute_shader) GLEW_ARB_compute_shader = !_glewInit_GL_ARB_compute_shader();
#endif /* GL_ARB_compute_shader */
#ifdef GL_ARB_compute_variable_group_size
- GLEW_ARB_compute_variable_group_size = _glewSearchExtension("GL_ARB_compute_variable_group_size", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_compute_variable_group_size) GLEW_ARB_compute_variable_group_size = !_glewInit_GL_ARB_compute_variable_group_size(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_compute_variable_group_size) GLEW_ARB_compute_variable_group_size = !_glewInit_GL_ARB_compute_variable_group_size();
#endif /* GL_ARB_compute_variable_group_size */
-#ifdef GL_ARB_conditional_render_inverted
- GLEW_ARB_conditional_render_inverted = _glewSearchExtension("GL_ARB_conditional_render_inverted", extStart, extEnd);
-#endif /* GL_ARB_conditional_render_inverted */
-#ifdef GL_ARB_conservative_depth
- GLEW_ARB_conservative_depth = _glewSearchExtension("GL_ARB_conservative_depth", extStart, extEnd);
-#endif /* GL_ARB_conservative_depth */
#ifdef GL_ARB_copy_buffer
- GLEW_ARB_copy_buffer = _glewSearchExtension("GL_ARB_copy_buffer", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_copy_buffer) GLEW_ARB_copy_buffer = !_glewInit_GL_ARB_copy_buffer(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_copy_buffer) GLEW_ARB_copy_buffer = !_glewInit_GL_ARB_copy_buffer();
#endif /* GL_ARB_copy_buffer */
#ifdef GL_ARB_copy_image
- GLEW_ARB_copy_image = _glewSearchExtension("GL_ARB_copy_image", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_copy_image) GLEW_ARB_copy_image = !_glewInit_GL_ARB_copy_image(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_copy_image) GLEW_ARB_copy_image = !_glewInit_GL_ARB_copy_image();
#endif /* GL_ARB_copy_image */
-#ifdef GL_ARB_cull_distance
- GLEW_ARB_cull_distance = _glewSearchExtension("GL_ARB_cull_distance", extStart, extEnd);
-#endif /* GL_ARB_cull_distance */
#ifdef GL_ARB_debug_output
- GLEW_ARB_debug_output = _glewSearchExtension("GL_ARB_debug_output", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_debug_output) GLEW_ARB_debug_output = !_glewInit_GL_ARB_debug_output(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_debug_output) GLEW_ARB_debug_output = !_glewInit_GL_ARB_debug_output();
#endif /* GL_ARB_debug_output */
-#ifdef GL_ARB_depth_buffer_float
- GLEW_ARB_depth_buffer_float = _glewSearchExtension("GL_ARB_depth_buffer_float", extStart, extEnd);
-#endif /* GL_ARB_depth_buffer_float */
-#ifdef GL_ARB_depth_clamp
- GLEW_ARB_depth_clamp = _glewSearchExtension("GL_ARB_depth_clamp", extStart, extEnd);
-#endif /* GL_ARB_depth_clamp */
-#ifdef GL_ARB_depth_texture
- GLEW_ARB_depth_texture = _glewSearchExtension("GL_ARB_depth_texture", extStart, extEnd);
-#endif /* GL_ARB_depth_texture */
-#ifdef GL_ARB_derivative_control
- GLEW_ARB_derivative_control = _glewSearchExtension("GL_ARB_derivative_control", extStart, extEnd);
-#endif /* GL_ARB_derivative_control */
#ifdef GL_ARB_direct_state_access
- GLEW_ARB_direct_state_access = _glewSearchExtension("GL_ARB_direct_state_access", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_direct_state_access) GLEW_ARB_direct_state_access = !_glewInit_GL_ARB_direct_state_access(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_direct_state_access) GLEW_ARB_direct_state_access = !_glewInit_GL_ARB_direct_state_access();
#endif /* GL_ARB_direct_state_access */
#ifdef GL_ARB_draw_buffers
- GLEW_ARB_draw_buffers = _glewSearchExtension("GL_ARB_draw_buffers", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_draw_buffers) GLEW_ARB_draw_buffers = !_glewInit_GL_ARB_draw_buffers(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_draw_buffers) GLEW_ARB_draw_buffers = !_glewInit_GL_ARB_draw_buffers();
#endif /* GL_ARB_draw_buffers */
#ifdef GL_ARB_draw_buffers_blend
- GLEW_ARB_draw_buffers_blend = _glewSearchExtension("GL_ARB_draw_buffers_blend", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_draw_buffers_blend) GLEW_ARB_draw_buffers_blend = !_glewInit_GL_ARB_draw_buffers_blend(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_draw_buffers_blend) GLEW_ARB_draw_buffers_blend = !_glewInit_GL_ARB_draw_buffers_blend();
#endif /* GL_ARB_draw_buffers_blend */
#ifdef GL_ARB_draw_elements_base_vertex
- GLEW_ARB_draw_elements_base_vertex = _glewSearchExtension("GL_ARB_draw_elements_base_vertex", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_draw_elements_base_vertex) GLEW_ARB_draw_elements_base_vertex = !_glewInit_GL_ARB_draw_elements_base_vertex(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_draw_elements_base_vertex) GLEW_ARB_draw_elements_base_vertex = !_glewInit_GL_ARB_draw_elements_base_vertex();
#endif /* GL_ARB_draw_elements_base_vertex */
#ifdef GL_ARB_draw_indirect
- GLEW_ARB_draw_indirect = _glewSearchExtension("GL_ARB_draw_indirect", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_draw_indirect) GLEW_ARB_draw_indirect = !_glewInit_GL_ARB_draw_indirect(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_draw_indirect) GLEW_ARB_draw_indirect = !_glewInit_GL_ARB_draw_indirect();
#endif /* GL_ARB_draw_indirect */
-#ifdef GL_ARB_draw_instanced
- GLEW_ARB_draw_instanced = _glewSearchExtension("GL_ARB_draw_instanced", extStart, extEnd);
-#endif /* GL_ARB_draw_instanced */
-#ifdef GL_ARB_enhanced_layouts
- GLEW_ARB_enhanced_layouts = _glewSearchExtension("GL_ARB_enhanced_layouts", extStart, extEnd);
-#endif /* GL_ARB_enhanced_layouts */
-#ifdef GL_ARB_explicit_attrib_location
- GLEW_ARB_explicit_attrib_location = _glewSearchExtension("GL_ARB_explicit_attrib_location", extStart, extEnd);
-#endif /* GL_ARB_explicit_attrib_location */
-#ifdef GL_ARB_explicit_uniform_location
- GLEW_ARB_explicit_uniform_location = _glewSearchExtension("GL_ARB_explicit_uniform_location", extStart, extEnd);
-#endif /* GL_ARB_explicit_uniform_location */
-#ifdef GL_ARB_fragment_coord_conventions
- GLEW_ARB_fragment_coord_conventions = _glewSearchExtension("GL_ARB_fragment_coord_conventions", extStart, extEnd);
-#endif /* GL_ARB_fragment_coord_conventions */
-#ifdef GL_ARB_fragment_layer_viewport
- GLEW_ARB_fragment_layer_viewport = _glewSearchExtension("GL_ARB_fragment_layer_viewport", extStart, extEnd);
-#endif /* GL_ARB_fragment_layer_viewport */
-#ifdef GL_ARB_fragment_program
- GLEW_ARB_fragment_program = _glewSearchExtension("GL_ARB_fragment_program", extStart, extEnd);
-#endif /* GL_ARB_fragment_program */
-#ifdef GL_ARB_fragment_program_shadow
- GLEW_ARB_fragment_program_shadow = _glewSearchExtension("GL_ARB_fragment_program_shadow", extStart, extEnd);
-#endif /* GL_ARB_fragment_program_shadow */
-#ifdef GL_ARB_fragment_shader
- GLEW_ARB_fragment_shader = _glewSearchExtension("GL_ARB_fragment_shader", extStart, extEnd);
-#endif /* GL_ARB_fragment_shader */
-#ifdef GL_ARB_fragment_shader_interlock
- GLEW_ARB_fragment_shader_interlock = _glewSearchExtension("GL_ARB_fragment_shader_interlock", extStart, extEnd);
-#endif /* GL_ARB_fragment_shader_interlock */
#ifdef GL_ARB_framebuffer_no_attachments
- GLEW_ARB_framebuffer_no_attachments = _glewSearchExtension("GL_ARB_framebuffer_no_attachments", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_framebuffer_no_attachments) GLEW_ARB_framebuffer_no_attachments = !_glewInit_GL_ARB_framebuffer_no_attachments(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_framebuffer_no_attachments) GLEW_ARB_framebuffer_no_attachments = !_glewInit_GL_ARB_framebuffer_no_attachments();
#endif /* GL_ARB_framebuffer_no_attachments */
#ifdef GL_ARB_framebuffer_object
- GLEW_ARB_framebuffer_object = _glewSearchExtension("GL_ARB_framebuffer_object", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_framebuffer_object) GLEW_ARB_framebuffer_object = !_glewInit_GL_ARB_framebuffer_object(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_framebuffer_object) GLEW_ARB_framebuffer_object = !_glewInit_GL_ARB_framebuffer_object();
#endif /* GL_ARB_framebuffer_object */
-#ifdef GL_ARB_framebuffer_sRGB
- GLEW_ARB_framebuffer_sRGB = _glewSearchExtension("GL_ARB_framebuffer_sRGB", extStart, extEnd);
-#endif /* GL_ARB_framebuffer_sRGB */
#ifdef GL_ARB_geometry_shader4
- GLEW_ARB_geometry_shader4 = _glewSearchExtension("GL_ARB_geometry_shader4", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_geometry_shader4) GLEW_ARB_geometry_shader4 = !_glewInit_GL_ARB_geometry_shader4(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_geometry_shader4) GLEW_ARB_geometry_shader4 = !_glewInit_GL_ARB_geometry_shader4();
#endif /* GL_ARB_geometry_shader4 */
#ifdef GL_ARB_get_program_binary
- GLEW_ARB_get_program_binary = _glewSearchExtension("GL_ARB_get_program_binary", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_get_program_binary) GLEW_ARB_get_program_binary = !_glewInit_GL_ARB_get_program_binary(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_get_program_binary) GLEW_ARB_get_program_binary = !_glewInit_GL_ARB_get_program_binary();
#endif /* GL_ARB_get_program_binary */
#ifdef GL_ARB_get_texture_sub_image
- GLEW_ARB_get_texture_sub_image = _glewSearchExtension("GL_ARB_get_texture_sub_image", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_get_texture_sub_image) GLEW_ARB_get_texture_sub_image = !_glewInit_GL_ARB_get_texture_sub_image(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_get_texture_sub_image) GLEW_ARB_get_texture_sub_image = !_glewInit_GL_ARB_get_texture_sub_image();
#endif /* GL_ARB_get_texture_sub_image */
-#ifdef GL_ARB_gpu_shader5
- GLEW_ARB_gpu_shader5 = _glewSearchExtension("GL_ARB_gpu_shader5", extStart, extEnd);
-#endif /* GL_ARB_gpu_shader5 */
+#ifdef GL_ARB_gl_spirv
+ if (glewExperimental || GLEW_ARB_gl_spirv) GLEW_ARB_gl_spirv = !_glewInit_GL_ARB_gl_spirv();
+#endif /* GL_ARB_gl_spirv */
#ifdef GL_ARB_gpu_shader_fp64
- GLEW_ARB_gpu_shader_fp64 = _glewSearchExtension("GL_ARB_gpu_shader_fp64", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_gpu_shader_fp64) GLEW_ARB_gpu_shader_fp64 = !_glewInit_GL_ARB_gpu_shader_fp64(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_gpu_shader_fp64) GLEW_ARB_gpu_shader_fp64 = !_glewInit_GL_ARB_gpu_shader_fp64();
#endif /* GL_ARB_gpu_shader_fp64 */
#ifdef GL_ARB_gpu_shader_int64
- GLEW_ARB_gpu_shader_int64 = _glewSearchExtension("GL_ARB_gpu_shader_int64", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_gpu_shader_int64) GLEW_ARB_gpu_shader_int64 = !_glewInit_GL_ARB_gpu_shader_int64(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_gpu_shader_int64) GLEW_ARB_gpu_shader_int64 = !_glewInit_GL_ARB_gpu_shader_int64();
#endif /* GL_ARB_gpu_shader_int64 */
-#ifdef GL_ARB_half_float_pixel
- GLEW_ARB_half_float_pixel = _glewSearchExtension("GL_ARB_half_float_pixel", extStart, extEnd);
-#endif /* GL_ARB_half_float_pixel */
-#ifdef GL_ARB_half_float_vertex
- GLEW_ARB_half_float_vertex = _glewSearchExtension("GL_ARB_half_float_vertex", extStart, extEnd);
-#endif /* GL_ARB_half_float_vertex */
#ifdef GL_ARB_imaging
- GLEW_ARB_imaging = _glewSearchExtension("GL_ARB_imaging", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_imaging) GLEW_ARB_imaging = !_glewInit_GL_ARB_imaging(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_imaging) GLEW_ARB_imaging = !_glewInit_GL_ARB_imaging();
#endif /* GL_ARB_imaging */
#ifdef GL_ARB_indirect_parameters
- GLEW_ARB_indirect_parameters = _glewSearchExtension("GL_ARB_indirect_parameters", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_indirect_parameters) GLEW_ARB_indirect_parameters = !_glewInit_GL_ARB_indirect_parameters(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_indirect_parameters) GLEW_ARB_indirect_parameters = !_glewInit_GL_ARB_indirect_parameters();
#endif /* GL_ARB_indirect_parameters */
#ifdef GL_ARB_instanced_arrays
- GLEW_ARB_instanced_arrays = _glewSearchExtension("GL_ARB_instanced_arrays", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_instanced_arrays) GLEW_ARB_instanced_arrays = !_glewInit_GL_ARB_instanced_arrays(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_instanced_arrays) GLEW_ARB_instanced_arrays = !_glewInit_GL_ARB_instanced_arrays();
#endif /* GL_ARB_instanced_arrays */
#ifdef GL_ARB_internalformat_query
- GLEW_ARB_internalformat_query = _glewSearchExtension("GL_ARB_internalformat_query", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_internalformat_query) GLEW_ARB_internalformat_query = !_glewInit_GL_ARB_internalformat_query(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_internalformat_query) GLEW_ARB_internalformat_query = !_glewInit_GL_ARB_internalformat_query();
#endif /* GL_ARB_internalformat_query */
#ifdef GL_ARB_internalformat_query2
- GLEW_ARB_internalformat_query2 = _glewSearchExtension("GL_ARB_internalformat_query2", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_internalformat_query2) GLEW_ARB_internalformat_query2 = !_glewInit_GL_ARB_internalformat_query2(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_internalformat_query2) GLEW_ARB_internalformat_query2 = !_glewInit_GL_ARB_internalformat_query2();
#endif /* GL_ARB_internalformat_query2 */
#ifdef GL_ARB_invalidate_subdata
- GLEW_ARB_invalidate_subdata = _glewSearchExtension("GL_ARB_invalidate_subdata", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_invalidate_subdata) GLEW_ARB_invalidate_subdata = !_glewInit_GL_ARB_invalidate_subdata(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_invalidate_subdata) GLEW_ARB_invalidate_subdata = !_glewInit_GL_ARB_invalidate_subdata();
#endif /* GL_ARB_invalidate_subdata */
-#ifdef GL_ARB_map_buffer_alignment
- GLEW_ARB_map_buffer_alignment = _glewSearchExtension("GL_ARB_map_buffer_alignment", extStart, extEnd);
-#endif /* GL_ARB_map_buffer_alignment */
#ifdef GL_ARB_map_buffer_range
- GLEW_ARB_map_buffer_range = _glewSearchExtension("GL_ARB_map_buffer_range", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_map_buffer_range) GLEW_ARB_map_buffer_range = !_glewInit_GL_ARB_map_buffer_range(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_map_buffer_range) GLEW_ARB_map_buffer_range = !_glewInit_GL_ARB_map_buffer_range();
#endif /* GL_ARB_map_buffer_range */
#ifdef GL_ARB_matrix_palette
- GLEW_ARB_matrix_palette = _glewSearchExtension("GL_ARB_matrix_palette", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_matrix_palette) GLEW_ARB_matrix_palette = !_glewInit_GL_ARB_matrix_palette(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_matrix_palette) GLEW_ARB_matrix_palette = !_glewInit_GL_ARB_matrix_palette();
#endif /* GL_ARB_matrix_palette */
#ifdef GL_ARB_multi_bind
- GLEW_ARB_multi_bind = _glewSearchExtension("GL_ARB_multi_bind", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_multi_bind) GLEW_ARB_multi_bind = !_glewInit_GL_ARB_multi_bind(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_multi_bind) GLEW_ARB_multi_bind = !_glewInit_GL_ARB_multi_bind();
#endif /* GL_ARB_multi_bind */
#ifdef GL_ARB_multi_draw_indirect
- GLEW_ARB_multi_draw_indirect = _glewSearchExtension("GL_ARB_multi_draw_indirect", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_multi_draw_indirect) GLEW_ARB_multi_draw_indirect = !_glewInit_GL_ARB_multi_draw_indirect(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_multi_draw_indirect) GLEW_ARB_multi_draw_indirect = !_glewInit_GL_ARB_multi_draw_indirect();
#endif /* GL_ARB_multi_draw_indirect */
#ifdef GL_ARB_multisample
- GLEW_ARB_multisample = _glewSearchExtension("GL_ARB_multisample", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_multisample) GLEW_ARB_multisample = !_glewInit_GL_ARB_multisample(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_multisample) GLEW_ARB_multisample = !_glewInit_GL_ARB_multisample();
#endif /* GL_ARB_multisample */
#ifdef GL_ARB_multitexture
- GLEW_ARB_multitexture = _glewSearchExtension("GL_ARB_multitexture", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_multitexture) GLEW_ARB_multitexture = !_glewInit_GL_ARB_multitexture(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_multitexture) GLEW_ARB_multitexture = !_glewInit_GL_ARB_multitexture();
#endif /* GL_ARB_multitexture */
#ifdef GL_ARB_occlusion_query
- GLEW_ARB_occlusion_query = _glewSearchExtension("GL_ARB_occlusion_query", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_occlusion_query) GLEW_ARB_occlusion_query = !_glewInit_GL_ARB_occlusion_query(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_occlusion_query) GLEW_ARB_occlusion_query = !_glewInit_GL_ARB_occlusion_query();
#endif /* GL_ARB_occlusion_query */
-#ifdef GL_ARB_occlusion_query2
- GLEW_ARB_occlusion_query2 = _glewSearchExtension("GL_ARB_occlusion_query2", extStart, extEnd);
-#endif /* GL_ARB_occlusion_query2 */
#ifdef GL_ARB_parallel_shader_compile
- GLEW_ARB_parallel_shader_compile = _glewSearchExtension("GL_ARB_parallel_shader_compile", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_parallel_shader_compile) GLEW_ARB_parallel_shader_compile = !_glewInit_GL_ARB_parallel_shader_compile(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_parallel_shader_compile) GLEW_ARB_parallel_shader_compile = !_glewInit_GL_ARB_parallel_shader_compile();
#endif /* GL_ARB_parallel_shader_compile */
-#ifdef GL_ARB_pipeline_statistics_query
- GLEW_ARB_pipeline_statistics_query = _glewSearchExtension("GL_ARB_pipeline_statistics_query", extStart, extEnd);
-#endif /* GL_ARB_pipeline_statistics_query */
-#ifdef GL_ARB_pixel_buffer_object
- GLEW_ARB_pixel_buffer_object = _glewSearchExtension("GL_ARB_pixel_buffer_object", extStart, extEnd);
-#endif /* GL_ARB_pixel_buffer_object */
#ifdef GL_ARB_point_parameters
- GLEW_ARB_point_parameters = _glewSearchExtension("GL_ARB_point_parameters", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_point_parameters) GLEW_ARB_point_parameters = !_glewInit_GL_ARB_point_parameters(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_point_parameters) GLEW_ARB_point_parameters = !_glewInit_GL_ARB_point_parameters();
#endif /* GL_ARB_point_parameters */
-#ifdef GL_ARB_point_sprite
- GLEW_ARB_point_sprite = _glewSearchExtension("GL_ARB_point_sprite", extStart, extEnd);
-#endif /* GL_ARB_point_sprite */
-#ifdef GL_ARB_post_depth_coverage
- GLEW_ARB_post_depth_coverage = _glewSearchExtension("GL_ARB_post_depth_coverage", extStart, extEnd);
-#endif /* GL_ARB_post_depth_coverage */
#ifdef GL_ARB_program_interface_query
- GLEW_ARB_program_interface_query = _glewSearchExtension("GL_ARB_program_interface_query", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_program_interface_query) GLEW_ARB_program_interface_query = !_glewInit_GL_ARB_program_interface_query(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_program_interface_query) GLEW_ARB_program_interface_query = !_glewInit_GL_ARB_program_interface_query();
#endif /* GL_ARB_program_interface_query */
#ifdef GL_ARB_provoking_vertex
- GLEW_ARB_provoking_vertex = _glewSearchExtension("GL_ARB_provoking_vertex", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_provoking_vertex) GLEW_ARB_provoking_vertex = !_glewInit_GL_ARB_provoking_vertex(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_provoking_vertex) GLEW_ARB_provoking_vertex = !_glewInit_GL_ARB_provoking_vertex();
#endif /* GL_ARB_provoking_vertex */
-#ifdef GL_ARB_query_buffer_object
- GLEW_ARB_query_buffer_object = _glewSearchExtension("GL_ARB_query_buffer_object", extStart, extEnd);
-#endif /* GL_ARB_query_buffer_object */
-#ifdef GL_ARB_robust_buffer_access_behavior
- GLEW_ARB_robust_buffer_access_behavior = _glewSearchExtension("GL_ARB_robust_buffer_access_behavior", extStart, extEnd);
-#endif /* GL_ARB_robust_buffer_access_behavior */
#ifdef GL_ARB_robustness
- GLEW_ARB_robustness = _glewSearchExtension("GL_ARB_robustness", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_robustness) GLEW_ARB_robustness = !_glewInit_GL_ARB_robustness(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_robustness) GLEW_ARB_robustness = !_glewInit_GL_ARB_robustness();
#endif /* GL_ARB_robustness */
-#ifdef GL_ARB_robustness_application_isolation
- GLEW_ARB_robustness_application_isolation = _glewSearchExtension("GL_ARB_robustness_application_isolation", extStart, extEnd);
-#endif /* GL_ARB_robustness_application_isolation */
-#ifdef GL_ARB_robustness_share_group_isolation
- GLEW_ARB_robustness_share_group_isolation = _glewSearchExtension("GL_ARB_robustness_share_group_isolation", extStart, extEnd);
-#endif /* GL_ARB_robustness_share_group_isolation */
#ifdef GL_ARB_sample_locations
- GLEW_ARB_sample_locations = _glewSearchExtension("GL_ARB_sample_locations", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_sample_locations) GLEW_ARB_sample_locations = !_glewInit_GL_ARB_sample_locations(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_sample_locations) GLEW_ARB_sample_locations = !_glewInit_GL_ARB_sample_locations();
#endif /* GL_ARB_sample_locations */
#ifdef GL_ARB_sample_shading
- GLEW_ARB_sample_shading = _glewSearchExtension("GL_ARB_sample_shading", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_sample_shading) GLEW_ARB_sample_shading = !_glewInit_GL_ARB_sample_shading(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_sample_shading) GLEW_ARB_sample_shading = !_glewInit_GL_ARB_sample_shading();
#endif /* GL_ARB_sample_shading */
#ifdef GL_ARB_sampler_objects
- GLEW_ARB_sampler_objects = _glewSearchExtension("GL_ARB_sampler_objects", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_sampler_objects) GLEW_ARB_sampler_objects = !_glewInit_GL_ARB_sampler_objects(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_sampler_objects) GLEW_ARB_sampler_objects = !_glewInit_GL_ARB_sampler_objects();
#endif /* GL_ARB_sampler_objects */
-#ifdef GL_ARB_seamless_cube_map
- GLEW_ARB_seamless_cube_map = _glewSearchExtension("GL_ARB_seamless_cube_map", extStart, extEnd);
-#endif /* GL_ARB_seamless_cube_map */
-#ifdef GL_ARB_seamless_cubemap_per_texture
- GLEW_ARB_seamless_cubemap_per_texture = _glewSearchExtension("GL_ARB_seamless_cubemap_per_texture", extStart, extEnd);
-#endif /* GL_ARB_seamless_cubemap_per_texture */
#ifdef GL_ARB_separate_shader_objects
- GLEW_ARB_separate_shader_objects = _glewSearchExtension("GL_ARB_separate_shader_objects", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_separate_shader_objects) GLEW_ARB_separate_shader_objects = !_glewInit_GL_ARB_separate_shader_objects(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_separate_shader_objects) GLEW_ARB_separate_shader_objects = !_glewInit_GL_ARB_separate_shader_objects();
#endif /* GL_ARB_separate_shader_objects */
-#ifdef GL_ARB_shader_atomic_counter_ops
- GLEW_ARB_shader_atomic_counter_ops = _glewSearchExtension("GL_ARB_shader_atomic_counter_ops", extStart, extEnd);
-#endif /* GL_ARB_shader_atomic_counter_ops */
#ifdef GL_ARB_shader_atomic_counters
- GLEW_ARB_shader_atomic_counters = _glewSearchExtension("GL_ARB_shader_atomic_counters", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_shader_atomic_counters) GLEW_ARB_shader_atomic_counters = !_glewInit_GL_ARB_shader_atomic_counters(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_shader_atomic_counters) GLEW_ARB_shader_atomic_counters = !_glewInit_GL_ARB_shader_atomic_counters();
#endif /* GL_ARB_shader_atomic_counters */
-#ifdef GL_ARB_shader_ballot
- GLEW_ARB_shader_ballot = _glewSearchExtension("GL_ARB_shader_ballot", extStart, extEnd);
-#endif /* GL_ARB_shader_ballot */
-#ifdef GL_ARB_shader_bit_encoding
- GLEW_ARB_shader_bit_encoding = _glewSearchExtension("GL_ARB_shader_bit_encoding", extStart, extEnd);
-#endif /* GL_ARB_shader_bit_encoding */
-#ifdef GL_ARB_shader_clock
- GLEW_ARB_shader_clock = _glewSearchExtension("GL_ARB_shader_clock", extStart, extEnd);
-#endif /* GL_ARB_shader_clock */
-#ifdef GL_ARB_shader_draw_parameters
- GLEW_ARB_shader_draw_parameters = _glewSearchExtension("GL_ARB_shader_draw_parameters", extStart, extEnd);
-#endif /* GL_ARB_shader_draw_parameters */
-#ifdef GL_ARB_shader_group_vote
- GLEW_ARB_shader_group_vote = _glewSearchExtension("GL_ARB_shader_group_vote", extStart, extEnd);
-#endif /* GL_ARB_shader_group_vote */
#ifdef GL_ARB_shader_image_load_store
- GLEW_ARB_shader_image_load_store = _glewSearchExtension("GL_ARB_shader_image_load_store", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_shader_image_load_store) GLEW_ARB_shader_image_load_store = !_glewInit_GL_ARB_shader_image_load_store(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_shader_image_load_store) GLEW_ARB_shader_image_load_store = !_glewInit_GL_ARB_shader_image_load_store();
#endif /* GL_ARB_shader_image_load_store */
-#ifdef GL_ARB_shader_image_size
- GLEW_ARB_shader_image_size = _glewSearchExtension("GL_ARB_shader_image_size", extStart, extEnd);
-#endif /* GL_ARB_shader_image_size */
#ifdef GL_ARB_shader_objects
- GLEW_ARB_shader_objects = _glewSearchExtension("GL_ARB_shader_objects", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_shader_objects) GLEW_ARB_shader_objects = !_glewInit_GL_ARB_shader_objects(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_shader_objects) GLEW_ARB_shader_objects = !_glewInit_GL_ARB_shader_objects();
#endif /* GL_ARB_shader_objects */
-#ifdef GL_ARB_shader_precision
- GLEW_ARB_shader_precision = _glewSearchExtension("GL_ARB_shader_precision", extStart, extEnd);
-#endif /* GL_ARB_shader_precision */
-#ifdef GL_ARB_shader_stencil_export
- GLEW_ARB_shader_stencil_export = _glewSearchExtension("GL_ARB_shader_stencil_export", extStart, extEnd);
-#endif /* GL_ARB_shader_stencil_export */
#ifdef GL_ARB_shader_storage_buffer_object
- GLEW_ARB_shader_storage_buffer_object = _glewSearchExtension("GL_ARB_shader_storage_buffer_object", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_shader_storage_buffer_object) GLEW_ARB_shader_storage_buffer_object = !_glewInit_GL_ARB_shader_storage_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_shader_storage_buffer_object) GLEW_ARB_shader_storage_buffer_object = !_glewInit_GL_ARB_shader_storage_buffer_object();
#endif /* GL_ARB_shader_storage_buffer_object */
#ifdef GL_ARB_shader_subroutine
- GLEW_ARB_shader_subroutine = _glewSearchExtension("GL_ARB_shader_subroutine", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_shader_subroutine) GLEW_ARB_shader_subroutine = !_glewInit_GL_ARB_shader_subroutine(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_shader_subroutine) GLEW_ARB_shader_subroutine = !_glewInit_GL_ARB_shader_subroutine();
#endif /* GL_ARB_shader_subroutine */
-#ifdef GL_ARB_shader_texture_image_samples
- GLEW_ARB_shader_texture_image_samples = _glewSearchExtension("GL_ARB_shader_texture_image_samples", extStart, extEnd);
-#endif /* GL_ARB_shader_texture_image_samples */
-#ifdef GL_ARB_shader_texture_lod
- GLEW_ARB_shader_texture_lod = _glewSearchExtension("GL_ARB_shader_texture_lod", extStart, extEnd);
-#endif /* GL_ARB_shader_texture_lod */
-#ifdef GL_ARB_shader_viewport_layer_array
- GLEW_ARB_shader_viewport_layer_array = _glewSearchExtension("GL_ARB_shader_viewport_layer_array", extStart, extEnd);
-#endif /* GL_ARB_shader_viewport_layer_array */
-#ifdef GL_ARB_shading_language_100
- GLEW_ARB_shading_language_100 = _glewSearchExtension("GL_ARB_shading_language_100", extStart, extEnd);
-#endif /* GL_ARB_shading_language_100 */
-#ifdef GL_ARB_shading_language_420pack
- GLEW_ARB_shading_language_420pack = _glewSearchExtension("GL_ARB_shading_language_420pack", extStart, extEnd);
-#endif /* GL_ARB_shading_language_420pack */
#ifdef GL_ARB_shading_language_include
- GLEW_ARB_shading_language_include = _glewSearchExtension("GL_ARB_shading_language_include", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_shading_language_include) GLEW_ARB_shading_language_include = !_glewInit_GL_ARB_shading_language_include(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_shading_language_include) GLEW_ARB_shading_language_include = !_glewInit_GL_ARB_shading_language_include();
#endif /* GL_ARB_shading_language_include */
-#ifdef GL_ARB_shading_language_packing
- GLEW_ARB_shading_language_packing = _glewSearchExtension("GL_ARB_shading_language_packing", extStart, extEnd);
-#endif /* GL_ARB_shading_language_packing */
-#ifdef GL_ARB_shadow
- GLEW_ARB_shadow = _glewSearchExtension("GL_ARB_shadow", extStart, extEnd);
-#endif /* GL_ARB_shadow */
-#ifdef GL_ARB_shadow_ambient
- GLEW_ARB_shadow_ambient = _glewSearchExtension("GL_ARB_shadow_ambient", extStart, extEnd);
-#endif /* GL_ARB_shadow_ambient */
#ifdef GL_ARB_sparse_buffer
- GLEW_ARB_sparse_buffer = _glewSearchExtension("GL_ARB_sparse_buffer", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_sparse_buffer) GLEW_ARB_sparse_buffer = !_glewInit_GL_ARB_sparse_buffer(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_sparse_buffer) GLEW_ARB_sparse_buffer = !_glewInit_GL_ARB_sparse_buffer();
#endif /* GL_ARB_sparse_buffer */
#ifdef GL_ARB_sparse_texture
- GLEW_ARB_sparse_texture = _glewSearchExtension("GL_ARB_sparse_texture", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_sparse_texture) GLEW_ARB_sparse_texture = !_glewInit_GL_ARB_sparse_texture(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_sparse_texture) GLEW_ARB_sparse_texture = !_glewInit_GL_ARB_sparse_texture();
#endif /* GL_ARB_sparse_texture */
-#ifdef GL_ARB_sparse_texture2
- GLEW_ARB_sparse_texture2 = _glewSearchExtension("GL_ARB_sparse_texture2", extStart, extEnd);
-#endif /* GL_ARB_sparse_texture2 */
-#ifdef GL_ARB_sparse_texture_clamp
- GLEW_ARB_sparse_texture_clamp = _glewSearchExtension("GL_ARB_sparse_texture_clamp", extStart, extEnd);
-#endif /* GL_ARB_sparse_texture_clamp */
-#ifdef GL_ARB_stencil_texturing
- GLEW_ARB_stencil_texturing = _glewSearchExtension("GL_ARB_stencil_texturing", extStart, extEnd);
-#endif /* GL_ARB_stencil_texturing */
#ifdef GL_ARB_sync
- GLEW_ARB_sync = _glewSearchExtension("GL_ARB_sync", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_sync) GLEW_ARB_sync = !_glewInit_GL_ARB_sync(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_sync) GLEW_ARB_sync = !_glewInit_GL_ARB_sync();
#endif /* GL_ARB_sync */
#ifdef GL_ARB_tessellation_shader
- GLEW_ARB_tessellation_shader = _glewSearchExtension("GL_ARB_tessellation_shader", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_tessellation_shader) GLEW_ARB_tessellation_shader = !_glewInit_GL_ARB_tessellation_shader(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_tessellation_shader) GLEW_ARB_tessellation_shader = !_glewInit_GL_ARB_tessellation_shader();
#endif /* GL_ARB_tessellation_shader */
#ifdef GL_ARB_texture_barrier
- GLEW_ARB_texture_barrier = _glewSearchExtension("GL_ARB_texture_barrier", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_texture_barrier) GLEW_ARB_texture_barrier = !_glewInit_GL_ARB_texture_barrier(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_texture_barrier) GLEW_ARB_texture_barrier = !_glewInit_GL_ARB_texture_barrier();
#endif /* GL_ARB_texture_barrier */
-#ifdef GL_ARB_texture_border_clamp
- GLEW_ARB_texture_border_clamp = _glewSearchExtension("GL_ARB_texture_border_clamp", extStart, extEnd);
-#endif /* GL_ARB_texture_border_clamp */
#ifdef GL_ARB_texture_buffer_object
- GLEW_ARB_texture_buffer_object = _glewSearchExtension("GL_ARB_texture_buffer_object", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_texture_buffer_object) GLEW_ARB_texture_buffer_object = !_glewInit_GL_ARB_texture_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_texture_buffer_object) GLEW_ARB_texture_buffer_object = !_glewInit_GL_ARB_texture_buffer_object();
#endif /* GL_ARB_texture_buffer_object */
-#ifdef GL_ARB_texture_buffer_object_rgb32
- GLEW_ARB_texture_buffer_object_rgb32 = _glewSearchExtension("GL_ARB_texture_buffer_object_rgb32", extStart, extEnd);
-#endif /* GL_ARB_texture_buffer_object_rgb32 */
#ifdef GL_ARB_texture_buffer_range
- GLEW_ARB_texture_buffer_range = _glewSearchExtension("GL_ARB_texture_buffer_range", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_texture_buffer_range) GLEW_ARB_texture_buffer_range = !_glewInit_GL_ARB_texture_buffer_range(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_texture_buffer_range) GLEW_ARB_texture_buffer_range = !_glewInit_GL_ARB_texture_buffer_range();
#endif /* GL_ARB_texture_buffer_range */
#ifdef GL_ARB_texture_compression
- GLEW_ARB_texture_compression = _glewSearchExtension("GL_ARB_texture_compression", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_texture_compression) GLEW_ARB_texture_compression = !_glewInit_GL_ARB_texture_compression(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_texture_compression) GLEW_ARB_texture_compression = !_glewInit_GL_ARB_texture_compression();
#endif /* GL_ARB_texture_compression */
-#ifdef GL_ARB_texture_compression_bptc
- GLEW_ARB_texture_compression_bptc = _glewSearchExtension("GL_ARB_texture_compression_bptc", extStart, extEnd);
-#endif /* GL_ARB_texture_compression_bptc */
-#ifdef GL_ARB_texture_compression_rgtc
- GLEW_ARB_texture_compression_rgtc = _glewSearchExtension("GL_ARB_texture_compression_rgtc", extStart, extEnd);
-#endif /* GL_ARB_texture_compression_rgtc */
-#ifdef GL_ARB_texture_cube_map
- GLEW_ARB_texture_cube_map = _glewSearchExtension("GL_ARB_texture_cube_map", extStart, extEnd);
-#endif /* GL_ARB_texture_cube_map */
-#ifdef GL_ARB_texture_cube_map_array
- GLEW_ARB_texture_cube_map_array = _glewSearchExtension("GL_ARB_texture_cube_map_array", extStart, extEnd);
-#endif /* GL_ARB_texture_cube_map_array */
-#ifdef GL_ARB_texture_env_add
- GLEW_ARB_texture_env_add = _glewSearchExtension("GL_ARB_texture_env_add", extStart, extEnd);
-#endif /* GL_ARB_texture_env_add */
-#ifdef GL_ARB_texture_env_combine
- GLEW_ARB_texture_env_combine = _glewSearchExtension("GL_ARB_texture_env_combine", extStart, extEnd);
-#endif /* GL_ARB_texture_env_combine */
-#ifdef GL_ARB_texture_env_crossbar
- GLEW_ARB_texture_env_crossbar = _glewSearchExtension("GL_ARB_texture_env_crossbar", extStart, extEnd);
-#endif /* GL_ARB_texture_env_crossbar */
-#ifdef GL_ARB_texture_env_dot3
- GLEW_ARB_texture_env_dot3 = _glewSearchExtension("GL_ARB_texture_env_dot3", extStart, extEnd);
-#endif /* GL_ARB_texture_env_dot3 */
-#ifdef GL_ARB_texture_filter_minmax
- GLEW_ARB_texture_filter_minmax = _glewSearchExtension("GL_ARB_texture_filter_minmax", extStart, extEnd);
-#endif /* GL_ARB_texture_filter_minmax */
-#ifdef GL_ARB_texture_float
- GLEW_ARB_texture_float = _glewSearchExtension("GL_ARB_texture_float", extStart, extEnd);
-#endif /* GL_ARB_texture_float */
-#ifdef GL_ARB_texture_gather
- GLEW_ARB_texture_gather = _glewSearchExtension("GL_ARB_texture_gather", extStart, extEnd);
-#endif /* GL_ARB_texture_gather */
-#ifdef GL_ARB_texture_mirror_clamp_to_edge
- GLEW_ARB_texture_mirror_clamp_to_edge = _glewSearchExtension("GL_ARB_texture_mirror_clamp_to_edge", extStart, extEnd);
-#endif /* GL_ARB_texture_mirror_clamp_to_edge */
-#ifdef GL_ARB_texture_mirrored_repeat
- GLEW_ARB_texture_mirrored_repeat = _glewSearchExtension("GL_ARB_texture_mirrored_repeat", extStart, extEnd);
-#endif /* GL_ARB_texture_mirrored_repeat */
#ifdef GL_ARB_texture_multisample
- GLEW_ARB_texture_multisample = _glewSearchExtension("GL_ARB_texture_multisample", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_texture_multisample) GLEW_ARB_texture_multisample = !_glewInit_GL_ARB_texture_multisample(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_texture_multisample) GLEW_ARB_texture_multisample = !_glewInit_GL_ARB_texture_multisample();
#endif /* GL_ARB_texture_multisample */
-#ifdef GL_ARB_texture_non_power_of_two
- GLEW_ARB_texture_non_power_of_two = _glewSearchExtension("GL_ARB_texture_non_power_of_two", extStart, extEnd);
-#endif /* GL_ARB_texture_non_power_of_two */
-#ifdef GL_ARB_texture_query_levels
- GLEW_ARB_texture_query_levels = _glewSearchExtension("GL_ARB_texture_query_levels", extStart, extEnd);
-#endif /* GL_ARB_texture_query_levels */
-#ifdef GL_ARB_texture_query_lod
- GLEW_ARB_texture_query_lod = _glewSearchExtension("GL_ARB_texture_query_lod", extStart, extEnd);
-#endif /* GL_ARB_texture_query_lod */
-#ifdef GL_ARB_texture_rectangle
- GLEW_ARB_texture_rectangle = _glewSearchExtension("GL_ARB_texture_rectangle", extStart, extEnd);
-#endif /* GL_ARB_texture_rectangle */
-#ifdef GL_ARB_texture_rg
- GLEW_ARB_texture_rg = _glewSearchExtension("GL_ARB_texture_rg", extStart, extEnd);
-#endif /* GL_ARB_texture_rg */
-#ifdef GL_ARB_texture_rgb10_a2ui
- GLEW_ARB_texture_rgb10_a2ui = _glewSearchExtension("GL_ARB_texture_rgb10_a2ui", extStart, extEnd);
-#endif /* GL_ARB_texture_rgb10_a2ui */
-#ifdef GL_ARB_texture_stencil8
- GLEW_ARB_texture_stencil8 = _glewSearchExtension("GL_ARB_texture_stencil8", extStart, extEnd);
-#endif /* GL_ARB_texture_stencil8 */
#ifdef GL_ARB_texture_storage
- GLEW_ARB_texture_storage = _glewSearchExtension("GL_ARB_texture_storage", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_texture_storage) GLEW_ARB_texture_storage = !_glewInit_GL_ARB_texture_storage(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_texture_storage) GLEW_ARB_texture_storage = !_glewInit_GL_ARB_texture_storage();
#endif /* GL_ARB_texture_storage */
#ifdef GL_ARB_texture_storage_multisample
- GLEW_ARB_texture_storage_multisample = _glewSearchExtension("GL_ARB_texture_storage_multisample", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_texture_storage_multisample) GLEW_ARB_texture_storage_multisample = !_glewInit_GL_ARB_texture_storage_multisample(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_texture_storage_multisample) GLEW_ARB_texture_storage_multisample = !_glewInit_GL_ARB_texture_storage_multisample();
#endif /* GL_ARB_texture_storage_multisample */
-#ifdef GL_ARB_texture_swizzle
- GLEW_ARB_texture_swizzle = _glewSearchExtension("GL_ARB_texture_swizzle", extStart, extEnd);
-#endif /* GL_ARB_texture_swizzle */
#ifdef GL_ARB_texture_view
- GLEW_ARB_texture_view = _glewSearchExtension("GL_ARB_texture_view", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_texture_view) GLEW_ARB_texture_view = !_glewInit_GL_ARB_texture_view(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_texture_view) GLEW_ARB_texture_view = !_glewInit_GL_ARB_texture_view();
#endif /* GL_ARB_texture_view */
#ifdef GL_ARB_timer_query
- GLEW_ARB_timer_query = _glewSearchExtension("GL_ARB_timer_query", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_timer_query) GLEW_ARB_timer_query = !_glewInit_GL_ARB_timer_query(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_timer_query) GLEW_ARB_timer_query = !_glewInit_GL_ARB_timer_query();
#endif /* GL_ARB_timer_query */
#ifdef GL_ARB_transform_feedback2
- GLEW_ARB_transform_feedback2 = _glewSearchExtension("GL_ARB_transform_feedback2", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_transform_feedback2) GLEW_ARB_transform_feedback2 = !_glewInit_GL_ARB_transform_feedback2(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_transform_feedback2) GLEW_ARB_transform_feedback2 = !_glewInit_GL_ARB_transform_feedback2();
#endif /* GL_ARB_transform_feedback2 */
#ifdef GL_ARB_transform_feedback3
- GLEW_ARB_transform_feedback3 = _glewSearchExtension("GL_ARB_transform_feedback3", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_transform_feedback3) GLEW_ARB_transform_feedback3 = !_glewInit_GL_ARB_transform_feedback3(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_transform_feedback3) GLEW_ARB_transform_feedback3 = !_glewInit_GL_ARB_transform_feedback3();
#endif /* GL_ARB_transform_feedback3 */
#ifdef GL_ARB_transform_feedback_instanced
- GLEW_ARB_transform_feedback_instanced = _glewSearchExtension("GL_ARB_transform_feedback_instanced", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_transform_feedback_instanced) GLEW_ARB_transform_feedback_instanced = !_glewInit_GL_ARB_transform_feedback_instanced(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_transform_feedback_instanced) GLEW_ARB_transform_feedback_instanced = !_glewInit_GL_ARB_transform_feedback_instanced();
#endif /* GL_ARB_transform_feedback_instanced */
-#ifdef GL_ARB_transform_feedback_overflow_query
- GLEW_ARB_transform_feedback_overflow_query = _glewSearchExtension("GL_ARB_transform_feedback_overflow_query", extStart, extEnd);
-#endif /* GL_ARB_transform_feedback_overflow_query */
#ifdef GL_ARB_transpose_matrix
- GLEW_ARB_transpose_matrix = _glewSearchExtension("GL_ARB_transpose_matrix", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_transpose_matrix) GLEW_ARB_transpose_matrix = !_glewInit_GL_ARB_transpose_matrix(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_transpose_matrix) GLEW_ARB_transpose_matrix = !_glewInit_GL_ARB_transpose_matrix();
#endif /* GL_ARB_transpose_matrix */
#ifdef GL_ARB_uniform_buffer_object
- GLEW_ARB_uniform_buffer_object = _glewSearchExtension("GL_ARB_uniform_buffer_object", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_uniform_buffer_object) GLEW_ARB_uniform_buffer_object = !_glewInit_GL_ARB_uniform_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_uniform_buffer_object) GLEW_ARB_uniform_buffer_object = !_glewInit_GL_ARB_uniform_buffer_object();
#endif /* GL_ARB_uniform_buffer_object */
-#ifdef GL_ARB_vertex_array_bgra
- GLEW_ARB_vertex_array_bgra = _glewSearchExtension("GL_ARB_vertex_array_bgra", extStart, extEnd);
-#endif /* GL_ARB_vertex_array_bgra */
#ifdef GL_ARB_vertex_array_object
- GLEW_ARB_vertex_array_object = _glewSearchExtension("GL_ARB_vertex_array_object", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_vertex_array_object) GLEW_ARB_vertex_array_object = !_glewInit_GL_ARB_vertex_array_object(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_vertex_array_object) GLEW_ARB_vertex_array_object = !_glewInit_GL_ARB_vertex_array_object();
#endif /* GL_ARB_vertex_array_object */
#ifdef GL_ARB_vertex_attrib_64bit
- GLEW_ARB_vertex_attrib_64bit = _glewSearchExtension("GL_ARB_vertex_attrib_64bit", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_vertex_attrib_64bit) GLEW_ARB_vertex_attrib_64bit = !_glewInit_GL_ARB_vertex_attrib_64bit(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_vertex_attrib_64bit) GLEW_ARB_vertex_attrib_64bit = !_glewInit_GL_ARB_vertex_attrib_64bit();
#endif /* GL_ARB_vertex_attrib_64bit */
#ifdef GL_ARB_vertex_attrib_binding
- GLEW_ARB_vertex_attrib_binding = _glewSearchExtension("GL_ARB_vertex_attrib_binding", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_vertex_attrib_binding) GLEW_ARB_vertex_attrib_binding = !_glewInit_GL_ARB_vertex_attrib_binding(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_vertex_attrib_binding) GLEW_ARB_vertex_attrib_binding = !_glewInit_GL_ARB_vertex_attrib_binding();
#endif /* GL_ARB_vertex_attrib_binding */
#ifdef GL_ARB_vertex_blend
- GLEW_ARB_vertex_blend = _glewSearchExtension("GL_ARB_vertex_blend", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_vertex_blend) GLEW_ARB_vertex_blend = !_glewInit_GL_ARB_vertex_blend(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_vertex_blend) GLEW_ARB_vertex_blend = !_glewInit_GL_ARB_vertex_blend();
#endif /* GL_ARB_vertex_blend */
#ifdef GL_ARB_vertex_buffer_object
- GLEW_ARB_vertex_buffer_object = _glewSearchExtension("GL_ARB_vertex_buffer_object", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_vertex_buffer_object) GLEW_ARB_vertex_buffer_object = !_glewInit_GL_ARB_vertex_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_vertex_buffer_object) GLEW_ARB_vertex_buffer_object = !_glewInit_GL_ARB_vertex_buffer_object();
#endif /* GL_ARB_vertex_buffer_object */
#ifdef GL_ARB_vertex_program
- GLEW_ARB_vertex_program = _glewSearchExtension("GL_ARB_vertex_program", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_vertex_program) GLEW_ARB_vertex_program = !_glewInit_GL_ARB_vertex_program(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_vertex_program) GLEW_ARB_vertex_program = !_glewInit_GL_ARB_vertex_program();
#endif /* GL_ARB_vertex_program */
#ifdef GL_ARB_vertex_shader
- GLEW_ARB_vertex_shader = _glewSearchExtension("GL_ARB_vertex_shader", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_vertex_shader) { GLEW_ARB_vertex_shader = !_glewInit_GL_ARB_vertex_shader(GLEW_CONTEXT_ARG_VAR_INIT); _glewInit_GL_ARB_vertex_program(GLEW_CONTEXT_ARG_VAR_INIT); }
+ if (glewExperimental || GLEW_ARB_vertex_shader) { GLEW_ARB_vertex_shader = !_glewInit_GL_ARB_vertex_shader(); _glewInit_GL_ARB_vertex_program(); }
#endif /* GL_ARB_vertex_shader */
-#ifdef GL_ARB_vertex_type_10f_11f_11f_rev
- GLEW_ARB_vertex_type_10f_11f_11f_rev = _glewSearchExtension("GL_ARB_vertex_type_10f_11f_11f_rev", extStart, extEnd);
-#endif /* GL_ARB_vertex_type_10f_11f_11f_rev */
#ifdef GL_ARB_vertex_type_2_10_10_10_rev
- GLEW_ARB_vertex_type_2_10_10_10_rev = _glewSearchExtension("GL_ARB_vertex_type_2_10_10_10_rev", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_vertex_type_2_10_10_10_rev) GLEW_ARB_vertex_type_2_10_10_10_rev = !_glewInit_GL_ARB_vertex_type_2_10_10_10_rev(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_vertex_type_2_10_10_10_rev) GLEW_ARB_vertex_type_2_10_10_10_rev = !_glewInit_GL_ARB_vertex_type_2_10_10_10_rev();
#endif /* GL_ARB_vertex_type_2_10_10_10_rev */
#ifdef GL_ARB_viewport_array
- GLEW_ARB_viewport_array = _glewSearchExtension("GL_ARB_viewport_array", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_viewport_array) GLEW_ARB_viewport_array = !_glewInit_GL_ARB_viewport_array(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_viewport_array) GLEW_ARB_viewport_array = !_glewInit_GL_ARB_viewport_array();
#endif /* GL_ARB_viewport_array */
#ifdef GL_ARB_window_pos
- GLEW_ARB_window_pos = _glewSearchExtension("GL_ARB_window_pos", extStart, extEnd);
- if (glewExperimental || GLEW_ARB_window_pos) GLEW_ARB_window_pos = !_glewInit_GL_ARB_window_pos(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ARB_window_pos) GLEW_ARB_window_pos = !_glewInit_GL_ARB_window_pos();
#endif /* GL_ARB_window_pos */
-#ifdef GL_ATIX_point_sprites
- GLEW_ATIX_point_sprites = _glewSearchExtension("GL_ATIX_point_sprites", extStart, extEnd);
-#endif /* GL_ATIX_point_sprites */
-#ifdef GL_ATIX_texture_env_combine3
- GLEW_ATIX_texture_env_combine3 = _glewSearchExtension("GL_ATIX_texture_env_combine3", extStart, extEnd);
-#endif /* GL_ATIX_texture_env_combine3 */
-#ifdef GL_ATIX_texture_env_route
- GLEW_ATIX_texture_env_route = _glewSearchExtension("GL_ATIX_texture_env_route", extStart, extEnd);
-#endif /* GL_ATIX_texture_env_route */
-#ifdef GL_ATIX_vertex_shader_output_point_size
- GLEW_ATIX_vertex_shader_output_point_size = _glewSearchExtension("GL_ATIX_vertex_shader_output_point_size", extStart, extEnd);
-#endif /* GL_ATIX_vertex_shader_output_point_size */
#ifdef GL_ATI_draw_buffers
- GLEW_ATI_draw_buffers = _glewSearchExtension("GL_ATI_draw_buffers", extStart, extEnd);
- if (glewExperimental || GLEW_ATI_draw_buffers) GLEW_ATI_draw_buffers = !_glewInit_GL_ATI_draw_buffers(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ATI_draw_buffers) GLEW_ATI_draw_buffers = !_glewInit_GL_ATI_draw_buffers();
#endif /* GL_ATI_draw_buffers */
#ifdef GL_ATI_element_array
- GLEW_ATI_element_array = _glewSearchExtension("GL_ATI_element_array", extStart, extEnd);
- if (glewExperimental || GLEW_ATI_element_array) GLEW_ATI_element_array = !_glewInit_GL_ATI_element_array(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ATI_element_array) GLEW_ATI_element_array = !_glewInit_GL_ATI_element_array();
#endif /* GL_ATI_element_array */
#ifdef GL_ATI_envmap_bumpmap
- GLEW_ATI_envmap_bumpmap = _glewSearchExtension("GL_ATI_envmap_bumpmap", extStart, extEnd);
- if (glewExperimental || GLEW_ATI_envmap_bumpmap) GLEW_ATI_envmap_bumpmap = !_glewInit_GL_ATI_envmap_bumpmap(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ATI_envmap_bumpmap) GLEW_ATI_envmap_bumpmap = !_glewInit_GL_ATI_envmap_bumpmap();
#endif /* GL_ATI_envmap_bumpmap */
#ifdef GL_ATI_fragment_shader
- GLEW_ATI_fragment_shader = _glewSearchExtension("GL_ATI_fragment_shader", extStart, extEnd);
- if (glewExperimental || GLEW_ATI_fragment_shader) GLEW_ATI_fragment_shader = !_glewInit_GL_ATI_fragment_shader(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ATI_fragment_shader) GLEW_ATI_fragment_shader = !_glewInit_GL_ATI_fragment_shader();
#endif /* GL_ATI_fragment_shader */
#ifdef GL_ATI_map_object_buffer
- GLEW_ATI_map_object_buffer = _glewSearchExtension("GL_ATI_map_object_buffer", extStart, extEnd);
- if (glewExperimental || GLEW_ATI_map_object_buffer) GLEW_ATI_map_object_buffer = !_glewInit_GL_ATI_map_object_buffer(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ATI_map_object_buffer) GLEW_ATI_map_object_buffer = !_glewInit_GL_ATI_map_object_buffer();
#endif /* GL_ATI_map_object_buffer */
-#ifdef GL_ATI_meminfo
- GLEW_ATI_meminfo = _glewSearchExtension("GL_ATI_meminfo", extStart, extEnd);
-#endif /* GL_ATI_meminfo */
#ifdef GL_ATI_pn_triangles
- GLEW_ATI_pn_triangles = _glewSearchExtension("GL_ATI_pn_triangles", extStart, extEnd);
- if (glewExperimental || GLEW_ATI_pn_triangles) GLEW_ATI_pn_triangles = !_glewInit_GL_ATI_pn_triangles(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ATI_pn_triangles) GLEW_ATI_pn_triangles = !_glewInit_GL_ATI_pn_triangles();
#endif /* GL_ATI_pn_triangles */
#ifdef GL_ATI_separate_stencil
- GLEW_ATI_separate_stencil = _glewSearchExtension("GL_ATI_separate_stencil", extStart, extEnd);
- if (glewExperimental || GLEW_ATI_separate_stencil) GLEW_ATI_separate_stencil = !_glewInit_GL_ATI_separate_stencil(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ATI_separate_stencil) GLEW_ATI_separate_stencil = !_glewInit_GL_ATI_separate_stencil();
#endif /* GL_ATI_separate_stencil */
-#ifdef GL_ATI_shader_texture_lod
- GLEW_ATI_shader_texture_lod = _glewSearchExtension("GL_ATI_shader_texture_lod", extStart, extEnd);
-#endif /* GL_ATI_shader_texture_lod */
-#ifdef GL_ATI_text_fragment_shader
- GLEW_ATI_text_fragment_shader = _glewSearchExtension("GL_ATI_text_fragment_shader", extStart, extEnd);
-#endif /* GL_ATI_text_fragment_shader */
-#ifdef GL_ATI_texture_compression_3dc
- GLEW_ATI_texture_compression_3dc = _glewSearchExtension("GL_ATI_texture_compression_3dc", extStart, extEnd);
-#endif /* GL_ATI_texture_compression_3dc */
-#ifdef GL_ATI_texture_env_combine3
- GLEW_ATI_texture_env_combine3 = _glewSearchExtension("GL_ATI_texture_env_combine3", extStart, extEnd);
-#endif /* GL_ATI_texture_env_combine3 */
-#ifdef GL_ATI_texture_float
- GLEW_ATI_texture_float = _glewSearchExtension("GL_ATI_texture_float", extStart, extEnd);
-#endif /* GL_ATI_texture_float */
-#ifdef GL_ATI_texture_mirror_once
- GLEW_ATI_texture_mirror_once = _glewSearchExtension("GL_ATI_texture_mirror_once", extStart, extEnd);
-#endif /* GL_ATI_texture_mirror_once */
#ifdef GL_ATI_vertex_array_object
- GLEW_ATI_vertex_array_object = _glewSearchExtension("GL_ATI_vertex_array_object", extStart, extEnd);
- if (glewExperimental || GLEW_ATI_vertex_array_object) GLEW_ATI_vertex_array_object = !_glewInit_GL_ATI_vertex_array_object(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ATI_vertex_array_object) GLEW_ATI_vertex_array_object = !_glewInit_GL_ATI_vertex_array_object();
#endif /* GL_ATI_vertex_array_object */
#ifdef GL_ATI_vertex_attrib_array_object
- GLEW_ATI_vertex_attrib_array_object = _glewSearchExtension("GL_ATI_vertex_attrib_array_object", extStart, extEnd);
- if (glewExperimental || GLEW_ATI_vertex_attrib_array_object) GLEW_ATI_vertex_attrib_array_object = !_glewInit_GL_ATI_vertex_attrib_array_object(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ATI_vertex_attrib_array_object) GLEW_ATI_vertex_attrib_array_object = !_glewInit_GL_ATI_vertex_attrib_array_object();
#endif /* GL_ATI_vertex_attrib_array_object */
#ifdef GL_ATI_vertex_streams
- GLEW_ATI_vertex_streams = _glewSearchExtension("GL_ATI_vertex_streams", extStart, extEnd);
- if (glewExperimental || GLEW_ATI_vertex_streams) GLEW_ATI_vertex_streams = !_glewInit_GL_ATI_vertex_streams(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_ATI_vertex_streams) GLEW_ATI_vertex_streams = !_glewInit_GL_ATI_vertex_streams();
#endif /* GL_ATI_vertex_streams */
-#ifdef GL_EXT_422_pixels
- GLEW_EXT_422_pixels = _glewSearchExtension("GL_EXT_422_pixels", extStart, extEnd);
-#endif /* GL_EXT_422_pixels */
-#ifdef GL_EXT_Cg_shader
- GLEW_EXT_Cg_shader = _glewSearchExtension("GL_EXT_Cg_shader", extStart, extEnd);
-#endif /* GL_EXT_Cg_shader */
-#ifdef GL_EXT_abgr
- GLEW_EXT_abgr = _glewSearchExtension("GL_EXT_abgr", extStart, extEnd);
-#endif /* GL_EXT_abgr */
-#ifdef GL_EXT_bgra
- GLEW_EXT_bgra = _glewSearchExtension("GL_EXT_bgra", extStart, extEnd);
-#endif /* GL_EXT_bgra */
#ifdef GL_EXT_bindable_uniform
- GLEW_EXT_bindable_uniform = _glewSearchExtension("GL_EXT_bindable_uniform", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_bindable_uniform) GLEW_EXT_bindable_uniform = !_glewInit_GL_EXT_bindable_uniform(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_bindable_uniform) GLEW_EXT_bindable_uniform = !_glewInit_GL_EXT_bindable_uniform();
#endif /* GL_EXT_bindable_uniform */
#ifdef GL_EXT_blend_color
- GLEW_EXT_blend_color = _glewSearchExtension("GL_EXT_blend_color", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_blend_color) GLEW_EXT_blend_color = !_glewInit_GL_EXT_blend_color(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_blend_color) GLEW_EXT_blend_color = !_glewInit_GL_EXT_blend_color();
#endif /* GL_EXT_blend_color */
#ifdef GL_EXT_blend_equation_separate
- GLEW_EXT_blend_equation_separate = _glewSearchExtension("GL_EXT_blend_equation_separate", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_blend_equation_separate) GLEW_EXT_blend_equation_separate = !_glewInit_GL_EXT_blend_equation_separate(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_blend_equation_separate) GLEW_EXT_blend_equation_separate = !_glewInit_GL_EXT_blend_equation_separate();
#endif /* GL_EXT_blend_equation_separate */
#ifdef GL_EXT_blend_func_separate
- GLEW_EXT_blend_func_separate = _glewSearchExtension("GL_EXT_blend_func_separate", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_blend_func_separate) GLEW_EXT_blend_func_separate = !_glewInit_GL_EXT_blend_func_separate(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_blend_func_separate) GLEW_EXT_blend_func_separate = !_glewInit_GL_EXT_blend_func_separate();
#endif /* GL_EXT_blend_func_separate */
-#ifdef GL_EXT_blend_logic_op
- GLEW_EXT_blend_logic_op = _glewSearchExtension("GL_EXT_blend_logic_op", extStart, extEnd);
-#endif /* GL_EXT_blend_logic_op */
#ifdef GL_EXT_blend_minmax
- GLEW_EXT_blend_minmax = _glewSearchExtension("GL_EXT_blend_minmax", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_blend_minmax) GLEW_EXT_blend_minmax = !_glewInit_GL_EXT_blend_minmax(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_blend_minmax) GLEW_EXT_blend_minmax = !_glewInit_GL_EXT_blend_minmax();
#endif /* GL_EXT_blend_minmax */
-#ifdef GL_EXT_blend_subtract
- GLEW_EXT_blend_subtract = _glewSearchExtension("GL_EXT_blend_subtract", extStart, extEnd);
-#endif /* GL_EXT_blend_subtract */
-#ifdef GL_EXT_clip_volume_hint
- GLEW_EXT_clip_volume_hint = _glewSearchExtension("GL_EXT_clip_volume_hint", extStart, extEnd);
-#endif /* GL_EXT_clip_volume_hint */
-#ifdef GL_EXT_cmyka
- GLEW_EXT_cmyka = _glewSearchExtension("GL_EXT_cmyka", extStart, extEnd);
-#endif /* GL_EXT_cmyka */
#ifdef GL_EXT_color_subtable
- GLEW_EXT_color_subtable = _glewSearchExtension("GL_EXT_color_subtable", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_color_subtable) GLEW_EXT_color_subtable = !_glewInit_GL_EXT_color_subtable(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_color_subtable) GLEW_EXT_color_subtable = !_glewInit_GL_EXT_color_subtable();
#endif /* GL_EXT_color_subtable */
#ifdef GL_EXT_compiled_vertex_array
- GLEW_EXT_compiled_vertex_array = _glewSearchExtension("GL_EXT_compiled_vertex_array", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_compiled_vertex_array) GLEW_EXT_compiled_vertex_array = !_glewInit_GL_EXT_compiled_vertex_array(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_compiled_vertex_array) GLEW_EXT_compiled_vertex_array = !_glewInit_GL_EXT_compiled_vertex_array();
#endif /* GL_EXT_compiled_vertex_array */
#ifdef GL_EXT_convolution
- GLEW_EXT_convolution = _glewSearchExtension("GL_EXT_convolution", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_convolution) GLEW_EXT_convolution = !_glewInit_GL_EXT_convolution(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_convolution) GLEW_EXT_convolution = !_glewInit_GL_EXT_convolution();
#endif /* GL_EXT_convolution */
#ifdef GL_EXT_coordinate_frame
- GLEW_EXT_coordinate_frame = _glewSearchExtension("GL_EXT_coordinate_frame", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_coordinate_frame) GLEW_EXT_coordinate_frame = !_glewInit_GL_EXT_coordinate_frame(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_coordinate_frame) GLEW_EXT_coordinate_frame = !_glewInit_GL_EXT_coordinate_frame();
#endif /* GL_EXT_coordinate_frame */
#ifdef GL_EXT_copy_texture
- GLEW_EXT_copy_texture = _glewSearchExtension("GL_EXT_copy_texture", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_copy_texture) GLEW_EXT_copy_texture = !_glewInit_GL_EXT_copy_texture(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_copy_texture) GLEW_EXT_copy_texture = !_glewInit_GL_EXT_copy_texture();
#endif /* GL_EXT_copy_texture */
#ifdef GL_EXT_cull_vertex
- GLEW_EXT_cull_vertex = _glewSearchExtension("GL_EXT_cull_vertex", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_cull_vertex) GLEW_EXT_cull_vertex = !_glewInit_GL_EXT_cull_vertex(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_cull_vertex) GLEW_EXT_cull_vertex = !_glewInit_GL_EXT_cull_vertex();
#endif /* GL_EXT_cull_vertex */
#ifdef GL_EXT_debug_label
- GLEW_EXT_debug_label = _glewSearchExtension("GL_EXT_debug_label", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_debug_label) GLEW_EXT_debug_label = !_glewInit_GL_EXT_debug_label(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_debug_label) GLEW_EXT_debug_label = !_glewInit_GL_EXT_debug_label();
#endif /* GL_EXT_debug_label */
#ifdef GL_EXT_debug_marker
- GLEW_EXT_debug_marker = _glewSearchExtension("GL_EXT_debug_marker", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_debug_marker) GLEW_EXT_debug_marker = !_glewInit_GL_EXT_debug_marker(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_debug_marker) GLEW_EXT_debug_marker = !_glewInit_GL_EXT_debug_marker();
#endif /* GL_EXT_debug_marker */
#ifdef GL_EXT_depth_bounds_test
- GLEW_EXT_depth_bounds_test = _glewSearchExtension("GL_EXT_depth_bounds_test", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_depth_bounds_test) GLEW_EXT_depth_bounds_test = !_glewInit_GL_EXT_depth_bounds_test(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_depth_bounds_test) GLEW_EXT_depth_bounds_test = !_glewInit_GL_EXT_depth_bounds_test();
#endif /* GL_EXT_depth_bounds_test */
#ifdef GL_EXT_direct_state_access
- GLEW_EXT_direct_state_access = _glewSearchExtension("GL_EXT_direct_state_access", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_direct_state_access) GLEW_EXT_direct_state_access = !_glewInit_GL_EXT_direct_state_access(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_direct_state_access) GLEW_EXT_direct_state_access = !_glewInit_GL_EXT_direct_state_access();
#endif /* GL_EXT_direct_state_access */
#ifdef GL_EXT_draw_buffers2
- GLEW_EXT_draw_buffers2 = _glewSearchExtension("GL_EXT_draw_buffers2", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_draw_buffers2) GLEW_EXT_draw_buffers2 = !_glewInit_GL_EXT_draw_buffers2(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_draw_buffers2) GLEW_EXT_draw_buffers2 = !_glewInit_GL_EXT_draw_buffers2();
#endif /* GL_EXT_draw_buffers2 */
#ifdef GL_EXT_draw_instanced
- GLEW_EXT_draw_instanced = _glewSearchExtension("GL_EXT_draw_instanced", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_draw_instanced) GLEW_EXT_draw_instanced = !_glewInit_GL_EXT_draw_instanced(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_draw_instanced) GLEW_EXT_draw_instanced = !_glewInit_GL_EXT_draw_instanced();
#endif /* GL_EXT_draw_instanced */
#ifdef GL_EXT_draw_range_elements
- GLEW_EXT_draw_range_elements = _glewSearchExtension("GL_EXT_draw_range_elements", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_draw_range_elements) GLEW_EXT_draw_range_elements = !_glewInit_GL_EXT_draw_range_elements(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_draw_range_elements) GLEW_EXT_draw_range_elements = !_glewInit_GL_EXT_draw_range_elements();
#endif /* GL_EXT_draw_range_elements */
#ifdef GL_EXT_fog_coord
- GLEW_EXT_fog_coord = _glewSearchExtension("GL_EXT_fog_coord", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_fog_coord) GLEW_EXT_fog_coord = !_glewInit_GL_EXT_fog_coord(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_fog_coord) GLEW_EXT_fog_coord = !_glewInit_GL_EXT_fog_coord();
#endif /* GL_EXT_fog_coord */
#ifdef GL_EXT_fragment_lighting
- GLEW_EXT_fragment_lighting = _glewSearchExtension("GL_EXT_fragment_lighting", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_fragment_lighting) GLEW_EXT_fragment_lighting = !_glewInit_GL_EXT_fragment_lighting(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_fragment_lighting) GLEW_EXT_fragment_lighting = !_glewInit_GL_EXT_fragment_lighting();
#endif /* GL_EXT_fragment_lighting */
#ifdef GL_EXT_framebuffer_blit
- GLEW_EXT_framebuffer_blit = _glewSearchExtension("GL_EXT_framebuffer_blit", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_framebuffer_blit) GLEW_EXT_framebuffer_blit = !_glewInit_GL_EXT_framebuffer_blit(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_framebuffer_blit) GLEW_EXT_framebuffer_blit = !_glewInit_GL_EXT_framebuffer_blit();
#endif /* GL_EXT_framebuffer_blit */
#ifdef GL_EXT_framebuffer_multisample
- GLEW_EXT_framebuffer_multisample = _glewSearchExtension("GL_EXT_framebuffer_multisample", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_framebuffer_multisample) GLEW_EXT_framebuffer_multisample = !_glewInit_GL_EXT_framebuffer_multisample(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_framebuffer_multisample) GLEW_EXT_framebuffer_multisample = !_glewInit_GL_EXT_framebuffer_multisample();
#endif /* GL_EXT_framebuffer_multisample */
-#ifdef GL_EXT_framebuffer_multisample_blit_scaled
- GLEW_EXT_framebuffer_multisample_blit_scaled = _glewSearchExtension("GL_EXT_framebuffer_multisample_blit_scaled", extStart, extEnd);
-#endif /* GL_EXT_framebuffer_multisample_blit_scaled */
#ifdef GL_EXT_framebuffer_object
- GLEW_EXT_framebuffer_object = _glewSearchExtension("GL_EXT_framebuffer_object", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_framebuffer_object) GLEW_EXT_framebuffer_object = !_glewInit_GL_EXT_framebuffer_object(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_framebuffer_object) GLEW_EXT_framebuffer_object = !_glewInit_GL_EXT_framebuffer_object();
#endif /* GL_EXT_framebuffer_object */
-#ifdef GL_EXT_framebuffer_sRGB
- GLEW_EXT_framebuffer_sRGB = _glewSearchExtension("GL_EXT_framebuffer_sRGB", extStart, extEnd);
-#endif /* GL_EXT_framebuffer_sRGB */
#ifdef GL_EXT_geometry_shader4
- GLEW_EXT_geometry_shader4 = _glewSearchExtension("GL_EXT_geometry_shader4", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_geometry_shader4) GLEW_EXT_geometry_shader4 = !_glewInit_GL_EXT_geometry_shader4(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_geometry_shader4) GLEW_EXT_geometry_shader4 = !_glewInit_GL_EXT_geometry_shader4();
#endif /* GL_EXT_geometry_shader4 */
#ifdef GL_EXT_gpu_program_parameters
- GLEW_EXT_gpu_program_parameters = _glewSearchExtension("GL_EXT_gpu_program_parameters", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_gpu_program_parameters) GLEW_EXT_gpu_program_parameters = !_glewInit_GL_EXT_gpu_program_parameters(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_gpu_program_parameters) GLEW_EXT_gpu_program_parameters = !_glewInit_GL_EXT_gpu_program_parameters();
#endif /* GL_EXT_gpu_program_parameters */
#ifdef GL_EXT_gpu_shader4
- GLEW_EXT_gpu_shader4 = _glewSearchExtension("GL_EXT_gpu_shader4", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_gpu_shader4) GLEW_EXT_gpu_shader4 = !_glewInit_GL_EXT_gpu_shader4(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_gpu_shader4) GLEW_EXT_gpu_shader4 = !_glewInit_GL_EXT_gpu_shader4();
#endif /* GL_EXT_gpu_shader4 */
#ifdef GL_EXT_histogram
- GLEW_EXT_histogram = _glewSearchExtension("GL_EXT_histogram", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_histogram) GLEW_EXT_histogram = !_glewInit_GL_EXT_histogram(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_histogram) GLEW_EXT_histogram = !_glewInit_GL_EXT_histogram();
#endif /* GL_EXT_histogram */
-#ifdef GL_EXT_index_array_formats
- GLEW_EXT_index_array_formats = _glewSearchExtension("GL_EXT_index_array_formats", extStart, extEnd);
-#endif /* GL_EXT_index_array_formats */
#ifdef GL_EXT_index_func
- GLEW_EXT_index_func = _glewSearchExtension("GL_EXT_index_func", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_index_func) GLEW_EXT_index_func = !_glewInit_GL_EXT_index_func(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_index_func) GLEW_EXT_index_func = !_glewInit_GL_EXT_index_func();
#endif /* GL_EXT_index_func */
#ifdef GL_EXT_index_material
- GLEW_EXT_index_material = _glewSearchExtension("GL_EXT_index_material", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_index_material) GLEW_EXT_index_material = !_glewInit_GL_EXT_index_material(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_index_material) GLEW_EXT_index_material = !_glewInit_GL_EXT_index_material();
#endif /* GL_EXT_index_material */
-#ifdef GL_EXT_index_texture
- GLEW_EXT_index_texture = _glewSearchExtension("GL_EXT_index_texture", extStart, extEnd);
-#endif /* GL_EXT_index_texture */
#ifdef GL_EXT_light_texture
- GLEW_EXT_light_texture = _glewSearchExtension("GL_EXT_light_texture", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_light_texture) GLEW_EXT_light_texture = !_glewInit_GL_EXT_light_texture(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_light_texture) GLEW_EXT_light_texture = !_glewInit_GL_EXT_light_texture();
#endif /* GL_EXT_light_texture */
-#ifdef GL_EXT_misc_attribute
- GLEW_EXT_misc_attribute = _glewSearchExtension("GL_EXT_misc_attribute", extStart, extEnd);
-#endif /* GL_EXT_misc_attribute */
#ifdef GL_EXT_multi_draw_arrays
- GLEW_EXT_multi_draw_arrays = _glewSearchExtension("GL_EXT_multi_draw_arrays", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_multi_draw_arrays) GLEW_EXT_multi_draw_arrays = !_glewInit_GL_EXT_multi_draw_arrays(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_multi_draw_arrays) GLEW_EXT_multi_draw_arrays = !_glewInit_GL_EXT_multi_draw_arrays();
#endif /* GL_EXT_multi_draw_arrays */
#ifdef GL_EXT_multisample
- GLEW_EXT_multisample = _glewSearchExtension("GL_EXT_multisample", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_multisample) GLEW_EXT_multisample = !_glewInit_GL_EXT_multisample(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_multisample) GLEW_EXT_multisample = !_glewInit_GL_EXT_multisample();
#endif /* GL_EXT_multisample */
-#ifdef GL_EXT_packed_depth_stencil
- GLEW_EXT_packed_depth_stencil = _glewSearchExtension("GL_EXT_packed_depth_stencil", extStart, extEnd);
-#endif /* GL_EXT_packed_depth_stencil */
-#ifdef GL_EXT_packed_float
- GLEW_EXT_packed_float = _glewSearchExtension("GL_EXT_packed_float", extStart, extEnd);
-#endif /* GL_EXT_packed_float */
-#ifdef GL_EXT_packed_pixels
- GLEW_EXT_packed_pixels = _glewSearchExtension("GL_EXT_packed_pixels", extStart, extEnd);
-#endif /* GL_EXT_packed_pixels */
#ifdef GL_EXT_paletted_texture
- GLEW_EXT_paletted_texture = _glewSearchExtension("GL_EXT_paletted_texture", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_paletted_texture) GLEW_EXT_paletted_texture = !_glewInit_GL_EXT_paletted_texture(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_paletted_texture) GLEW_EXT_paletted_texture = !_glewInit_GL_EXT_paletted_texture();
#endif /* GL_EXT_paletted_texture */
-#ifdef GL_EXT_pixel_buffer_object
- GLEW_EXT_pixel_buffer_object = _glewSearchExtension("GL_EXT_pixel_buffer_object", extStart, extEnd);
-#endif /* GL_EXT_pixel_buffer_object */
#ifdef GL_EXT_pixel_transform
- GLEW_EXT_pixel_transform = _glewSearchExtension("GL_EXT_pixel_transform", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_pixel_transform) GLEW_EXT_pixel_transform = !_glewInit_GL_EXT_pixel_transform(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_pixel_transform) GLEW_EXT_pixel_transform = !_glewInit_GL_EXT_pixel_transform();
#endif /* GL_EXT_pixel_transform */
-#ifdef GL_EXT_pixel_transform_color_table
- GLEW_EXT_pixel_transform_color_table = _glewSearchExtension("GL_EXT_pixel_transform_color_table", extStart, extEnd);
-#endif /* GL_EXT_pixel_transform_color_table */
#ifdef GL_EXT_point_parameters
- GLEW_EXT_point_parameters = _glewSearchExtension("GL_EXT_point_parameters", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_point_parameters) GLEW_EXT_point_parameters = !_glewInit_GL_EXT_point_parameters(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_point_parameters) GLEW_EXT_point_parameters = !_glewInit_GL_EXT_point_parameters();
#endif /* GL_EXT_point_parameters */
#ifdef GL_EXT_polygon_offset
- GLEW_EXT_polygon_offset = _glewSearchExtension("GL_EXT_polygon_offset", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_polygon_offset) GLEW_EXT_polygon_offset = !_glewInit_GL_EXT_polygon_offset(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_polygon_offset) GLEW_EXT_polygon_offset = !_glewInit_GL_EXT_polygon_offset();
#endif /* GL_EXT_polygon_offset */
#ifdef GL_EXT_polygon_offset_clamp
- GLEW_EXT_polygon_offset_clamp = _glewSearchExtension("GL_EXT_polygon_offset_clamp", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_polygon_offset_clamp) GLEW_EXT_polygon_offset_clamp = !_glewInit_GL_EXT_polygon_offset_clamp(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_polygon_offset_clamp) GLEW_EXT_polygon_offset_clamp = !_glewInit_GL_EXT_polygon_offset_clamp();
#endif /* GL_EXT_polygon_offset_clamp */
-#ifdef GL_EXT_post_depth_coverage
- GLEW_EXT_post_depth_coverage = _glewSearchExtension("GL_EXT_post_depth_coverage", extStart, extEnd);
-#endif /* GL_EXT_post_depth_coverage */
#ifdef GL_EXT_provoking_vertex
- GLEW_EXT_provoking_vertex = _glewSearchExtension("GL_EXT_provoking_vertex", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_provoking_vertex) GLEW_EXT_provoking_vertex = !_glewInit_GL_EXT_provoking_vertex(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_provoking_vertex) GLEW_EXT_provoking_vertex = !_glewInit_GL_EXT_provoking_vertex();
#endif /* GL_EXT_provoking_vertex */
#ifdef GL_EXT_raster_multisample
- GLEW_EXT_raster_multisample = _glewSearchExtension("GL_EXT_raster_multisample", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_raster_multisample) GLEW_EXT_raster_multisample = !_glewInit_GL_EXT_raster_multisample(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_raster_multisample) GLEW_EXT_raster_multisample = !_glewInit_GL_EXT_raster_multisample();
#endif /* GL_EXT_raster_multisample */
-#ifdef GL_EXT_rescale_normal
- GLEW_EXT_rescale_normal = _glewSearchExtension("GL_EXT_rescale_normal", extStart, extEnd);
-#endif /* GL_EXT_rescale_normal */
#ifdef GL_EXT_scene_marker
- GLEW_EXT_scene_marker = _glewSearchExtension("GL_EXT_scene_marker", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_scene_marker) GLEW_EXT_scene_marker = !_glewInit_GL_EXT_scene_marker(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_scene_marker) GLEW_EXT_scene_marker = !_glewInit_GL_EXT_scene_marker();
#endif /* GL_EXT_scene_marker */
#ifdef GL_EXT_secondary_color
- GLEW_EXT_secondary_color = _glewSearchExtension("GL_EXT_secondary_color", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_secondary_color) GLEW_EXT_secondary_color = !_glewInit_GL_EXT_secondary_color(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_secondary_color) GLEW_EXT_secondary_color = !_glewInit_GL_EXT_secondary_color();
#endif /* GL_EXT_secondary_color */
#ifdef GL_EXT_separate_shader_objects
- GLEW_EXT_separate_shader_objects = _glewSearchExtension("GL_EXT_separate_shader_objects", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_separate_shader_objects) GLEW_EXT_separate_shader_objects = !_glewInit_GL_EXT_separate_shader_objects(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_separate_shader_objects) GLEW_EXT_separate_shader_objects = !_glewInit_GL_EXT_separate_shader_objects();
#endif /* GL_EXT_separate_shader_objects */
-#ifdef GL_EXT_separate_specular_color
- GLEW_EXT_separate_specular_color = _glewSearchExtension("GL_EXT_separate_specular_color", extStart, extEnd);
-#endif /* GL_EXT_separate_specular_color */
-#ifdef GL_EXT_shader_image_load_formatted
- GLEW_EXT_shader_image_load_formatted = _glewSearchExtension("GL_EXT_shader_image_load_formatted", extStart, extEnd);
-#endif /* GL_EXT_shader_image_load_formatted */
#ifdef GL_EXT_shader_image_load_store
- GLEW_EXT_shader_image_load_store = _glewSearchExtension("GL_EXT_shader_image_load_store", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_shader_image_load_store) GLEW_EXT_shader_image_load_store = !_glewInit_GL_EXT_shader_image_load_store(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_shader_image_load_store) GLEW_EXT_shader_image_load_store = !_glewInit_GL_EXT_shader_image_load_store();
#endif /* GL_EXT_shader_image_load_store */
-#ifdef GL_EXT_shader_integer_mix
- GLEW_EXT_shader_integer_mix = _glewSearchExtension("GL_EXT_shader_integer_mix", extStart, extEnd);
-#endif /* GL_EXT_shader_integer_mix */
-#ifdef GL_EXT_shadow_funcs
- GLEW_EXT_shadow_funcs = _glewSearchExtension("GL_EXT_shadow_funcs", extStart, extEnd);
-#endif /* GL_EXT_shadow_funcs */
-#ifdef GL_EXT_shared_texture_palette
- GLEW_EXT_shared_texture_palette = _glewSearchExtension("GL_EXT_shared_texture_palette", extStart, extEnd);
-#endif /* GL_EXT_shared_texture_palette */
-#ifdef GL_EXT_sparse_texture2
- GLEW_EXT_sparse_texture2 = _glewSearchExtension("GL_EXT_sparse_texture2", extStart, extEnd);
-#endif /* GL_EXT_sparse_texture2 */
-#ifdef GL_EXT_stencil_clear_tag
- GLEW_EXT_stencil_clear_tag = _glewSearchExtension("GL_EXT_stencil_clear_tag", extStart, extEnd);
-#endif /* GL_EXT_stencil_clear_tag */
#ifdef GL_EXT_stencil_two_side
- GLEW_EXT_stencil_two_side = _glewSearchExtension("GL_EXT_stencil_two_side", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_stencil_two_side) GLEW_EXT_stencil_two_side = !_glewInit_GL_EXT_stencil_two_side(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_stencil_two_side) GLEW_EXT_stencil_two_side = !_glewInit_GL_EXT_stencil_two_side();
#endif /* GL_EXT_stencil_two_side */
-#ifdef GL_EXT_stencil_wrap
- GLEW_EXT_stencil_wrap = _glewSearchExtension("GL_EXT_stencil_wrap", extStart, extEnd);
-#endif /* GL_EXT_stencil_wrap */
#ifdef GL_EXT_subtexture
- GLEW_EXT_subtexture = _glewSearchExtension("GL_EXT_subtexture", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_subtexture) GLEW_EXT_subtexture = !_glewInit_GL_EXT_subtexture(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_subtexture) GLEW_EXT_subtexture = !_glewInit_GL_EXT_subtexture();
#endif /* GL_EXT_subtexture */
-#ifdef GL_EXT_texture
- GLEW_EXT_texture = _glewSearchExtension("GL_EXT_texture", extStart, extEnd);
-#endif /* GL_EXT_texture */
#ifdef GL_EXT_texture3D
- GLEW_EXT_texture3D = _glewSearchExtension("GL_EXT_texture3D", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_texture3D) GLEW_EXT_texture3D = !_glewInit_GL_EXT_texture3D(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_texture3D) GLEW_EXT_texture3D = !_glewInit_GL_EXT_texture3D();
#endif /* GL_EXT_texture3D */
#ifdef GL_EXT_texture_array
- GLEW_EXT_texture_array = _glewSearchExtension("GL_EXT_texture_array", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_texture_array) GLEW_EXT_texture_array = !_glewInit_GL_EXT_texture_array(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_texture_array) GLEW_EXT_texture_array = !_glewInit_GL_EXT_texture_array();
#endif /* GL_EXT_texture_array */
#ifdef GL_EXT_texture_buffer_object
- GLEW_EXT_texture_buffer_object = _glewSearchExtension("GL_EXT_texture_buffer_object", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_texture_buffer_object) GLEW_EXT_texture_buffer_object = !_glewInit_GL_EXT_texture_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_texture_buffer_object) GLEW_EXT_texture_buffer_object = !_glewInit_GL_EXT_texture_buffer_object();
#endif /* GL_EXT_texture_buffer_object */
-#ifdef GL_EXT_texture_compression_dxt1
- GLEW_EXT_texture_compression_dxt1 = _glewSearchExtension("GL_EXT_texture_compression_dxt1", extStart, extEnd);
-#endif /* GL_EXT_texture_compression_dxt1 */
-#ifdef GL_EXT_texture_compression_latc
- GLEW_EXT_texture_compression_latc = _glewSearchExtension("GL_EXT_texture_compression_latc", extStart, extEnd);
-#endif /* GL_EXT_texture_compression_latc */
-#ifdef GL_EXT_texture_compression_rgtc
- GLEW_EXT_texture_compression_rgtc = _glewSearchExtension("GL_EXT_texture_compression_rgtc", extStart, extEnd);
-#endif /* GL_EXT_texture_compression_rgtc */
-#ifdef GL_EXT_texture_compression_s3tc
- GLEW_EXT_texture_compression_s3tc = _glewSearchExtension("GL_EXT_texture_compression_s3tc", extStart, extEnd);
-#endif /* GL_EXT_texture_compression_s3tc */
-#ifdef GL_EXT_texture_cube_map
- GLEW_EXT_texture_cube_map = _glewSearchExtension("GL_EXT_texture_cube_map", extStart, extEnd);
-#endif /* GL_EXT_texture_cube_map */
-#ifdef GL_EXT_texture_edge_clamp
- GLEW_EXT_texture_edge_clamp = _glewSearchExtension("GL_EXT_texture_edge_clamp", extStart, extEnd);
-#endif /* GL_EXT_texture_edge_clamp */
-#ifdef GL_EXT_texture_env
- GLEW_EXT_texture_env = _glewSearchExtension("GL_EXT_texture_env", extStart, extEnd);
-#endif /* GL_EXT_texture_env */
-#ifdef GL_EXT_texture_env_add
- GLEW_EXT_texture_env_add = _glewSearchExtension("GL_EXT_texture_env_add", extStart, extEnd);
-#endif /* GL_EXT_texture_env_add */
-#ifdef GL_EXT_texture_env_combine
- GLEW_EXT_texture_env_combine = _glewSearchExtension("GL_EXT_texture_env_combine", extStart, extEnd);
-#endif /* GL_EXT_texture_env_combine */
-#ifdef GL_EXT_texture_env_dot3
- GLEW_EXT_texture_env_dot3 = _glewSearchExtension("GL_EXT_texture_env_dot3", extStart, extEnd);
-#endif /* GL_EXT_texture_env_dot3 */
-#ifdef GL_EXT_texture_filter_anisotropic
- GLEW_EXT_texture_filter_anisotropic = _glewSearchExtension("GL_EXT_texture_filter_anisotropic", extStart, extEnd);
-#endif /* GL_EXT_texture_filter_anisotropic */
-#ifdef GL_EXT_texture_filter_minmax
- GLEW_EXT_texture_filter_minmax = _glewSearchExtension("GL_EXT_texture_filter_minmax", extStart, extEnd);
-#endif /* GL_EXT_texture_filter_minmax */
#ifdef GL_EXT_texture_integer
- GLEW_EXT_texture_integer = _glewSearchExtension("GL_EXT_texture_integer", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_texture_integer) GLEW_EXT_texture_integer = !_glewInit_GL_EXT_texture_integer(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_texture_integer) GLEW_EXT_texture_integer = !_glewInit_GL_EXT_texture_integer();
#endif /* GL_EXT_texture_integer */
-#ifdef GL_EXT_texture_lod_bias
- GLEW_EXT_texture_lod_bias = _glewSearchExtension("GL_EXT_texture_lod_bias", extStart, extEnd);
-#endif /* GL_EXT_texture_lod_bias */
-#ifdef GL_EXT_texture_mirror_clamp
- GLEW_EXT_texture_mirror_clamp = _glewSearchExtension("GL_EXT_texture_mirror_clamp", extStart, extEnd);
-#endif /* GL_EXT_texture_mirror_clamp */
#ifdef GL_EXT_texture_object
- GLEW_EXT_texture_object = _glewSearchExtension("GL_EXT_texture_object", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_texture_object) GLEW_EXT_texture_object = !_glewInit_GL_EXT_texture_object(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_texture_object) GLEW_EXT_texture_object = !_glewInit_GL_EXT_texture_object();
#endif /* GL_EXT_texture_object */
#ifdef GL_EXT_texture_perturb_normal
- GLEW_EXT_texture_perturb_normal = _glewSearchExtension("GL_EXT_texture_perturb_normal", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_texture_perturb_normal) GLEW_EXT_texture_perturb_normal = !_glewInit_GL_EXT_texture_perturb_normal(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_texture_perturb_normal) GLEW_EXT_texture_perturb_normal = !_glewInit_GL_EXT_texture_perturb_normal();
#endif /* GL_EXT_texture_perturb_normal */
-#ifdef GL_EXT_texture_rectangle
- GLEW_EXT_texture_rectangle = _glewSearchExtension("GL_EXT_texture_rectangle", extStart, extEnd);
-#endif /* GL_EXT_texture_rectangle */
-#ifdef GL_EXT_texture_sRGB
- GLEW_EXT_texture_sRGB = _glewSearchExtension("GL_EXT_texture_sRGB", extStart, extEnd);
-#endif /* GL_EXT_texture_sRGB */
-#ifdef GL_EXT_texture_sRGB_decode
- GLEW_EXT_texture_sRGB_decode = _glewSearchExtension("GL_EXT_texture_sRGB_decode", extStart, extEnd);
-#endif /* GL_EXT_texture_sRGB_decode */
-#ifdef GL_EXT_texture_shared_exponent
- GLEW_EXT_texture_shared_exponent = _glewSearchExtension("GL_EXT_texture_shared_exponent", extStart, extEnd);
-#endif /* GL_EXT_texture_shared_exponent */
-#ifdef GL_EXT_texture_snorm
- GLEW_EXT_texture_snorm = _glewSearchExtension("GL_EXT_texture_snorm", extStart, extEnd);
-#endif /* GL_EXT_texture_snorm */
-#ifdef GL_EXT_texture_swizzle
- GLEW_EXT_texture_swizzle = _glewSearchExtension("GL_EXT_texture_swizzle", extStart, extEnd);
-#endif /* GL_EXT_texture_swizzle */
#ifdef GL_EXT_timer_query
- GLEW_EXT_timer_query = _glewSearchExtension("GL_EXT_timer_query", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_timer_query) GLEW_EXT_timer_query = !_glewInit_GL_EXT_timer_query(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_timer_query) GLEW_EXT_timer_query = !_glewInit_GL_EXT_timer_query();
#endif /* GL_EXT_timer_query */
#ifdef GL_EXT_transform_feedback
- GLEW_EXT_transform_feedback = _glewSearchExtension("GL_EXT_transform_feedback", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_transform_feedback) GLEW_EXT_transform_feedback = !_glewInit_GL_EXT_transform_feedback(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_transform_feedback) GLEW_EXT_transform_feedback = !_glewInit_GL_EXT_transform_feedback();
#endif /* GL_EXT_transform_feedback */
#ifdef GL_EXT_vertex_array
- GLEW_EXT_vertex_array = _glewSearchExtension("GL_EXT_vertex_array", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_vertex_array) GLEW_EXT_vertex_array = !_glewInit_GL_EXT_vertex_array(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_vertex_array) GLEW_EXT_vertex_array = !_glewInit_GL_EXT_vertex_array();
#endif /* GL_EXT_vertex_array */
-#ifdef GL_EXT_vertex_array_bgra
- GLEW_EXT_vertex_array_bgra = _glewSearchExtension("GL_EXT_vertex_array_bgra", extStart, extEnd);
-#endif /* GL_EXT_vertex_array_bgra */
#ifdef GL_EXT_vertex_attrib_64bit
- GLEW_EXT_vertex_attrib_64bit = _glewSearchExtension("GL_EXT_vertex_attrib_64bit", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_vertex_attrib_64bit) GLEW_EXT_vertex_attrib_64bit = !_glewInit_GL_EXT_vertex_attrib_64bit(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_vertex_attrib_64bit) GLEW_EXT_vertex_attrib_64bit = !_glewInit_GL_EXT_vertex_attrib_64bit();
#endif /* GL_EXT_vertex_attrib_64bit */
#ifdef GL_EXT_vertex_shader
- GLEW_EXT_vertex_shader = _glewSearchExtension("GL_EXT_vertex_shader", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_vertex_shader) GLEW_EXT_vertex_shader = !_glewInit_GL_EXT_vertex_shader(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_vertex_shader) GLEW_EXT_vertex_shader = !_glewInit_GL_EXT_vertex_shader();
#endif /* GL_EXT_vertex_shader */
#ifdef GL_EXT_vertex_weighting
- GLEW_EXT_vertex_weighting = _glewSearchExtension("GL_EXT_vertex_weighting", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_vertex_weighting) GLEW_EXT_vertex_weighting = !_glewInit_GL_EXT_vertex_weighting(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_vertex_weighting) GLEW_EXT_vertex_weighting = !_glewInit_GL_EXT_vertex_weighting();
#endif /* GL_EXT_vertex_weighting */
+#ifdef GL_EXT_window_rectangles
+ if (glewExperimental || GLEW_EXT_window_rectangles) GLEW_EXT_window_rectangles = !_glewInit_GL_EXT_window_rectangles();
+#endif /* GL_EXT_window_rectangles */
#ifdef GL_EXT_x11_sync_object
- GLEW_EXT_x11_sync_object = _glewSearchExtension("GL_EXT_x11_sync_object", extStart, extEnd);
- if (glewExperimental || GLEW_EXT_x11_sync_object) GLEW_EXT_x11_sync_object = !_glewInit_GL_EXT_x11_sync_object(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_EXT_x11_sync_object) GLEW_EXT_x11_sync_object = !_glewInit_GL_EXT_x11_sync_object();
#endif /* GL_EXT_x11_sync_object */
#ifdef GL_GREMEDY_frame_terminator
- GLEW_GREMEDY_frame_terminator = _glewSearchExtension("GL_GREMEDY_frame_terminator", extStart, extEnd);
- if (glewExperimental || GLEW_GREMEDY_frame_terminator) GLEW_GREMEDY_frame_terminator = !_glewInit_GL_GREMEDY_frame_terminator(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_GREMEDY_frame_terminator) GLEW_GREMEDY_frame_terminator = !_glewInit_GL_GREMEDY_frame_terminator();
#endif /* GL_GREMEDY_frame_terminator */
#ifdef GL_GREMEDY_string_marker
- GLEW_GREMEDY_string_marker = _glewSearchExtension("GL_GREMEDY_string_marker", extStart, extEnd);
- if (glewExperimental || GLEW_GREMEDY_string_marker) GLEW_GREMEDY_string_marker = !_glewInit_GL_GREMEDY_string_marker(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_GREMEDY_string_marker) GLEW_GREMEDY_string_marker = !_glewInit_GL_GREMEDY_string_marker();
#endif /* GL_GREMEDY_string_marker */
-#ifdef GL_HP_convolution_border_modes
- GLEW_HP_convolution_border_modes = _glewSearchExtension("GL_HP_convolution_border_modes", extStart, extEnd);
-#endif /* GL_HP_convolution_border_modes */
#ifdef GL_HP_image_transform
- GLEW_HP_image_transform = _glewSearchExtension("GL_HP_image_transform", extStart, extEnd);
- if (glewExperimental || GLEW_HP_image_transform) GLEW_HP_image_transform = !_glewInit_GL_HP_image_transform(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_HP_image_transform) GLEW_HP_image_transform = !_glewInit_GL_HP_image_transform();
#endif /* GL_HP_image_transform */
-#ifdef GL_HP_occlusion_test
- GLEW_HP_occlusion_test = _glewSearchExtension("GL_HP_occlusion_test", extStart, extEnd);
-#endif /* GL_HP_occlusion_test */
-#ifdef GL_HP_texture_lighting
- GLEW_HP_texture_lighting = _glewSearchExtension("GL_HP_texture_lighting", extStart, extEnd);
-#endif /* GL_HP_texture_lighting */
-#ifdef GL_IBM_cull_vertex
- GLEW_IBM_cull_vertex = _glewSearchExtension("GL_IBM_cull_vertex", extStart, extEnd);
-#endif /* GL_IBM_cull_vertex */
#ifdef GL_IBM_multimode_draw_arrays
- GLEW_IBM_multimode_draw_arrays = _glewSearchExtension("GL_IBM_multimode_draw_arrays", extStart, extEnd);
- if (glewExperimental || GLEW_IBM_multimode_draw_arrays) GLEW_IBM_multimode_draw_arrays = !_glewInit_GL_IBM_multimode_draw_arrays(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_IBM_multimode_draw_arrays) GLEW_IBM_multimode_draw_arrays = !_glewInit_GL_IBM_multimode_draw_arrays();
#endif /* GL_IBM_multimode_draw_arrays */
-#ifdef GL_IBM_rasterpos_clip
- GLEW_IBM_rasterpos_clip = _glewSearchExtension("GL_IBM_rasterpos_clip", extStart, extEnd);
-#endif /* GL_IBM_rasterpos_clip */
-#ifdef GL_IBM_static_data
- GLEW_IBM_static_data = _glewSearchExtension("GL_IBM_static_data", extStart, extEnd);
-#endif /* GL_IBM_static_data */
-#ifdef GL_IBM_texture_mirrored_repeat
- GLEW_IBM_texture_mirrored_repeat = _glewSearchExtension("GL_IBM_texture_mirrored_repeat", extStart, extEnd);
-#endif /* GL_IBM_texture_mirrored_repeat */
#ifdef GL_IBM_vertex_array_lists
- GLEW_IBM_vertex_array_lists = _glewSearchExtension("GL_IBM_vertex_array_lists", extStart, extEnd);
- if (glewExperimental || GLEW_IBM_vertex_array_lists) GLEW_IBM_vertex_array_lists = !_glewInit_GL_IBM_vertex_array_lists(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_IBM_vertex_array_lists) GLEW_IBM_vertex_array_lists = !_glewInit_GL_IBM_vertex_array_lists();
#endif /* GL_IBM_vertex_array_lists */
-#ifdef GL_INGR_color_clamp
- GLEW_INGR_color_clamp = _glewSearchExtension("GL_INGR_color_clamp", extStart, extEnd);
-#endif /* GL_INGR_color_clamp */
-#ifdef GL_INGR_interlace_read
- GLEW_INGR_interlace_read = _glewSearchExtension("GL_INGR_interlace_read", extStart, extEnd);
-#endif /* GL_INGR_interlace_read */
-#ifdef GL_INTEL_fragment_shader_ordering
- GLEW_INTEL_fragment_shader_ordering = _glewSearchExtension("GL_INTEL_fragment_shader_ordering", extStart, extEnd);
-#endif /* GL_INTEL_fragment_shader_ordering */
-#ifdef GL_INTEL_framebuffer_CMAA
- GLEW_INTEL_framebuffer_CMAA = _glewSearchExtension("GL_INTEL_framebuffer_CMAA", extStart, extEnd);
-#endif /* GL_INTEL_framebuffer_CMAA */
#ifdef GL_INTEL_map_texture
- GLEW_INTEL_map_texture = _glewSearchExtension("GL_INTEL_map_texture", extStart, extEnd);
- if (glewExperimental || GLEW_INTEL_map_texture) GLEW_INTEL_map_texture = !_glewInit_GL_INTEL_map_texture(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_INTEL_map_texture) GLEW_INTEL_map_texture = !_glewInit_GL_INTEL_map_texture();
#endif /* GL_INTEL_map_texture */
#ifdef GL_INTEL_parallel_arrays
- GLEW_INTEL_parallel_arrays = _glewSearchExtension("GL_INTEL_parallel_arrays", extStart, extEnd);
- if (glewExperimental || GLEW_INTEL_parallel_arrays) GLEW_INTEL_parallel_arrays = !_glewInit_GL_INTEL_parallel_arrays(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_INTEL_parallel_arrays) GLEW_INTEL_parallel_arrays = !_glewInit_GL_INTEL_parallel_arrays();
#endif /* GL_INTEL_parallel_arrays */
#ifdef GL_INTEL_performance_query
- GLEW_INTEL_performance_query = _glewSearchExtension("GL_INTEL_performance_query", extStart, extEnd);
- if (glewExperimental || GLEW_INTEL_performance_query) GLEW_INTEL_performance_query = !_glewInit_GL_INTEL_performance_query(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_INTEL_performance_query) GLEW_INTEL_performance_query = !_glewInit_GL_INTEL_performance_query();
#endif /* GL_INTEL_performance_query */
#ifdef GL_INTEL_texture_scissor
- GLEW_INTEL_texture_scissor = _glewSearchExtension("GL_INTEL_texture_scissor", extStart, extEnd);
- if (glewExperimental || GLEW_INTEL_texture_scissor) GLEW_INTEL_texture_scissor = !_glewInit_GL_INTEL_texture_scissor(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_INTEL_texture_scissor) GLEW_INTEL_texture_scissor = !_glewInit_GL_INTEL_texture_scissor();
#endif /* GL_INTEL_texture_scissor */
#ifdef GL_KHR_blend_equation_advanced
- GLEW_KHR_blend_equation_advanced = _glewSearchExtension("GL_KHR_blend_equation_advanced", extStart, extEnd);
- if (glewExperimental || GLEW_KHR_blend_equation_advanced) GLEW_KHR_blend_equation_advanced = !_glewInit_GL_KHR_blend_equation_advanced(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_KHR_blend_equation_advanced) GLEW_KHR_blend_equation_advanced = !_glewInit_GL_KHR_blend_equation_advanced();
#endif /* GL_KHR_blend_equation_advanced */
-#ifdef GL_KHR_blend_equation_advanced_coherent
- GLEW_KHR_blend_equation_advanced_coherent = _glewSearchExtension("GL_KHR_blend_equation_advanced_coherent", extStart, extEnd);
-#endif /* GL_KHR_blend_equation_advanced_coherent */
-#ifdef GL_KHR_context_flush_control
- GLEW_KHR_context_flush_control = _glewSearchExtension("GL_KHR_context_flush_control", extStart, extEnd);
-#endif /* GL_KHR_context_flush_control */
#ifdef GL_KHR_debug
- GLEW_KHR_debug = _glewSearchExtension("GL_KHR_debug", extStart, extEnd);
- if (glewExperimental || GLEW_KHR_debug) GLEW_KHR_debug = !_glewInit_GL_KHR_debug(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_KHR_debug) GLEW_KHR_debug = !_glewInit_GL_KHR_debug();
#endif /* GL_KHR_debug */
-#ifdef GL_KHR_no_error
- GLEW_KHR_no_error = _glewSearchExtension("GL_KHR_no_error", extStart, extEnd);
-#endif /* GL_KHR_no_error */
-#ifdef GL_KHR_robust_buffer_access_behavior
- GLEW_KHR_robust_buffer_access_behavior = _glewSearchExtension("GL_KHR_robust_buffer_access_behavior", extStart, extEnd);
-#endif /* GL_KHR_robust_buffer_access_behavior */
#ifdef GL_KHR_robustness
- GLEW_KHR_robustness = _glewSearchExtension("GL_KHR_robustness", extStart, extEnd);
- if (glewExperimental || GLEW_KHR_robustness) GLEW_KHR_robustness = !_glewInit_GL_KHR_robustness(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_KHR_robustness) GLEW_KHR_robustness = !_glewInit_GL_KHR_robustness();
#endif /* GL_KHR_robustness */
-#ifdef GL_KHR_texture_compression_astc_hdr
- GLEW_KHR_texture_compression_astc_hdr = _glewSearchExtension("GL_KHR_texture_compression_astc_hdr", extStart, extEnd);
-#endif /* GL_KHR_texture_compression_astc_hdr */
-#ifdef GL_KHR_texture_compression_astc_ldr
- GLEW_KHR_texture_compression_astc_ldr = _glewSearchExtension("GL_KHR_texture_compression_astc_ldr", extStart, extEnd);
-#endif /* GL_KHR_texture_compression_astc_ldr */
#ifdef GL_KTX_buffer_region
- GLEW_KTX_buffer_region = _glewSearchExtension("GL_KTX_buffer_region", extStart, extEnd);
- if (glewExperimental || GLEW_KTX_buffer_region) GLEW_KTX_buffer_region = !_glewInit_GL_KTX_buffer_region(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_KTX_buffer_region) GLEW_KTX_buffer_region = !_glewInit_GL_KTX_buffer_region();
#endif /* GL_KTX_buffer_region */
-#ifdef GL_MESAX_texture_stack
- GLEW_MESAX_texture_stack = _glewSearchExtension("GL_MESAX_texture_stack", extStart, extEnd);
-#endif /* GL_MESAX_texture_stack */
-#ifdef GL_MESA_pack_invert
- GLEW_MESA_pack_invert = _glewSearchExtension("GL_MESA_pack_invert", extStart, extEnd);
-#endif /* GL_MESA_pack_invert */
#ifdef GL_MESA_resize_buffers
- GLEW_MESA_resize_buffers = _glewSearchExtension("GL_MESA_resize_buffers", extStart, extEnd);
- if (glewExperimental || GLEW_MESA_resize_buffers) GLEW_MESA_resize_buffers = !_glewInit_GL_MESA_resize_buffers(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_MESA_resize_buffers) GLEW_MESA_resize_buffers = !_glewInit_GL_MESA_resize_buffers();
#endif /* GL_MESA_resize_buffers */
#ifdef GL_MESA_window_pos
- GLEW_MESA_window_pos = _glewSearchExtension("GL_MESA_window_pos", extStart, extEnd);
- if (glewExperimental || GLEW_MESA_window_pos) GLEW_MESA_window_pos = !_glewInit_GL_MESA_window_pos(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_MESA_window_pos) GLEW_MESA_window_pos = !_glewInit_GL_MESA_window_pos();
#endif /* GL_MESA_window_pos */
-#ifdef GL_MESA_ycbcr_texture
- GLEW_MESA_ycbcr_texture = _glewSearchExtension("GL_MESA_ycbcr_texture", extStart, extEnd);
-#endif /* GL_MESA_ycbcr_texture */
#ifdef GL_NVX_conditional_render
- GLEW_NVX_conditional_render = _glewSearchExtension("GL_NVX_conditional_render", extStart, extEnd);
- if (glewExperimental || GLEW_NVX_conditional_render) GLEW_NVX_conditional_render = !_glewInit_GL_NVX_conditional_render(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NVX_conditional_render) GLEW_NVX_conditional_render = !_glewInit_GL_NVX_conditional_render();
#endif /* GL_NVX_conditional_render */
-#ifdef GL_NVX_gpu_memory_info
- GLEW_NVX_gpu_memory_info = _glewSearchExtension("GL_NVX_gpu_memory_info", extStart, extEnd);
-#endif /* GL_NVX_gpu_memory_info */
+#ifdef GL_NVX_linked_gpu_multicast
+ if (glewExperimental || GLEW_NVX_linked_gpu_multicast) GLEW_NVX_linked_gpu_multicast = !_glewInit_GL_NVX_linked_gpu_multicast();
+#endif /* GL_NVX_linked_gpu_multicast */
#ifdef GL_NV_bindless_multi_draw_indirect
- GLEW_NV_bindless_multi_draw_indirect = _glewSearchExtension("GL_NV_bindless_multi_draw_indirect", extStart, extEnd);
- if (glewExperimental || GLEW_NV_bindless_multi_draw_indirect) GLEW_NV_bindless_multi_draw_indirect = !_glewInit_GL_NV_bindless_multi_draw_indirect(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_bindless_multi_draw_indirect) GLEW_NV_bindless_multi_draw_indirect = !_glewInit_GL_NV_bindless_multi_draw_indirect();
#endif /* GL_NV_bindless_multi_draw_indirect */
#ifdef GL_NV_bindless_multi_draw_indirect_count
- GLEW_NV_bindless_multi_draw_indirect_count = _glewSearchExtension("GL_NV_bindless_multi_draw_indirect_count", extStart, extEnd);
- if (glewExperimental || GLEW_NV_bindless_multi_draw_indirect_count) GLEW_NV_bindless_multi_draw_indirect_count = !_glewInit_GL_NV_bindless_multi_draw_indirect_count(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_bindless_multi_draw_indirect_count) GLEW_NV_bindless_multi_draw_indirect_count = !_glewInit_GL_NV_bindless_multi_draw_indirect_count();
#endif /* GL_NV_bindless_multi_draw_indirect_count */
#ifdef GL_NV_bindless_texture
- GLEW_NV_bindless_texture = _glewSearchExtension("GL_NV_bindless_texture", extStart, extEnd);
- if (glewExperimental || GLEW_NV_bindless_texture) GLEW_NV_bindless_texture = !_glewInit_GL_NV_bindless_texture(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_bindless_texture) GLEW_NV_bindless_texture = !_glewInit_GL_NV_bindless_texture();
#endif /* GL_NV_bindless_texture */
#ifdef GL_NV_blend_equation_advanced
- GLEW_NV_blend_equation_advanced = _glewSearchExtension("GL_NV_blend_equation_advanced", extStart, extEnd);
- if (glewExperimental || GLEW_NV_blend_equation_advanced) GLEW_NV_blend_equation_advanced = !_glewInit_GL_NV_blend_equation_advanced(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_blend_equation_advanced) GLEW_NV_blend_equation_advanced = !_glewInit_GL_NV_blend_equation_advanced();
#endif /* GL_NV_blend_equation_advanced */
-#ifdef GL_NV_blend_equation_advanced_coherent
- GLEW_NV_blend_equation_advanced_coherent = _glewSearchExtension("GL_NV_blend_equation_advanced_coherent", extStart, extEnd);
-#endif /* GL_NV_blend_equation_advanced_coherent */
-#ifdef GL_NV_blend_square
- GLEW_NV_blend_square = _glewSearchExtension("GL_NV_blend_square", extStart, extEnd);
-#endif /* GL_NV_blend_square */
-#ifdef GL_NV_compute_program5
- GLEW_NV_compute_program5 = _glewSearchExtension("GL_NV_compute_program5", extStart, extEnd);
-#endif /* GL_NV_compute_program5 */
+#ifdef GL_NV_clip_space_w_scaling
+ if (glewExperimental || GLEW_NV_clip_space_w_scaling) GLEW_NV_clip_space_w_scaling = !_glewInit_GL_NV_clip_space_w_scaling();
+#endif /* GL_NV_clip_space_w_scaling */
+#ifdef GL_NV_command_list
+ if (glewExperimental || GLEW_NV_command_list) GLEW_NV_command_list = !_glewInit_GL_NV_command_list();
+#endif /* GL_NV_command_list */
#ifdef GL_NV_conditional_render
- GLEW_NV_conditional_render = _glewSearchExtension("GL_NV_conditional_render", extStart, extEnd);
- if (glewExperimental || GLEW_NV_conditional_render) GLEW_NV_conditional_render = !_glewInit_GL_NV_conditional_render(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_conditional_render) GLEW_NV_conditional_render = !_glewInit_GL_NV_conditional_render();
#endif /* GL_NV_conditional_render */
#ifdef GL_NV_conservative_raster
- GLEW_NV_conservative_raster = _glewSearchExtension("GL_NV_conservative_raster", extStart, extEnd);
- if (glewExperimental || GLEW_NV_conservative_raster) GLEW_NV_conservative_raster = !_glewInit_GL_NV_conservative_raster(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_conservative_raster) GLEW_NV_conservative_raster = !_glewInit_GL_NV_conservative_raster();
#endif /* GL_NV_conservative_raster */
#ifdef GL_NV_conservative_raster_dilate
- GLEW_NV_conservative_raster_dilate = _glewSearchExtension("GL_NV_conservative_raster_dilate", extStart, extEnd);
- if (glewExperimental || GLEW_NV_conservative_raster_dilate) GLEW_NV_conservative_raster_dilate = !_glewInit_GL_NV_conservative_raster_dilate(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_conservative_raster_dilate) GLEW_NV_conservative_raster_dilate = !_glewInit_GL_NV_conservative_raster_dilate();
#endif /* GL_NV_conservative_raster_dilate */
-#ifdef GL_NV_copy_depth_to_color
- GLEW_NV_copy_depth_to_color = _glewSearchExtension("GL_NV_copy_depth_to_color", extStart, extEnd);
-#endif /* GL_NV_copy_depth_to_color */
+#ifdef GL_NV_conservative_raster_pre_snap_triangles
+ if (glewExperimental || GLEW_NV_conservative_raster_pre_snap_triangles) GLEW_NV_conservative_raster_pre_snap_triangles = !_glewInit_GL_NV_conservative_raster_pre_snap_triangles();
+#endif /* GL_NV_conservative_raster_pre_snap_triangles */
#ifdef GL_NV_copy_image
- GLEW_NV_copy_image = _glewSearchExtension("GL_NV_copy_image", extStart, extEnd);
- if (glewExperimental || GLEW_NV_copy_image) GLEW_NV_copy_image = !_glewInit_GL_NV_copy_image(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_copy_image) GLEW_NV_copy_image = !_glewInit_GL_NV_copy_image();
#endif /* GL_NV_copy_image */
-#ifdef GL_NV_deep_texture3D
- GLEW_NV_deep_texture3D = _glewSearchExtension("GL_NV_deep_texture3D", extStart, extEnd);
-#endif /* GL_NV_deep_texture3D */
#ifdef GL_NV_depth_buffer_float
- GLEW_NV_depth_buffer_float = _glewSearchExtension("GL_NV_depth_buffer_float", extStart, extEnd);
- if (glewExperimental || GLEW_NV_depth_buffer_float) GLEW_NV_depth_buffer_float = !_glewInit_GL_NV_depth_buffer_float(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_depth_buffer_float) GLEW_NV_depth_buffer_float = !_glewInit_GL_NV_depth_buffer_float();
#endif /* GL_NV_depth_buffer_float */
-#ifdef GL_NV_depth_clamp
- GLEW_NV_depth_clamp = _glewSearchExtension("GL_NV_depth_clamp", extStart, extEnd);
-#endif /* GL_NV_depth_clamp */
-#ifdef GL_NV_depth_range_unclamped
- GLEW_NV_depth_range_unclamped = _glewSearchExtension("GL_NV_depth_range_unclamped", extStart, extEnd);
-#endif /* GL_NV_depth_range_unclamped */
#ifdef GL_NV_draw_texture
- GLEW_NV_draw_texture = _glewSearchExtension("GL_NV_draw_texture", extStart, extEnd);
- if (glewExperimental || GLEW_NV_draw_texture) GLEW_NV_draw_texture = !_glewInit_GL_NV_draw_texture(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_draw_texture) GLEW_NV_draw_texture = !_glewInit_GL_NV_draw_texture();
#endif /* GL_NV_draw_texture */
+#ifdef GL_NV_draw_vulkan_image
+ if (glewExperimental || GLEW_NV_draw_vulkan_image) GLEW_NV_draw_vulkan_image = !_glewInit_GL_NV_draw_vulkan_image();
+#endif /* GL_NV_draw_vulkan_image */
#ifdef GL_NV_evaluators
- GLEW_NV_evaluators = _glewSearchExtension("GL_NV_evaluators", extStart, extEnd);
- if (glewExperimental || GLEW_NV_evaluators) GLEW_NV_evaluators = !_glewInit_GL_NV_evaluators(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_evaluators) GLEW_NV_evaluators = !_glewInit_GL_NV_evaluators();
#endif /* GL_NV_evaluators */
#ifdef GL_NV_explicit_multisample
- GLEW_NV_explicit_multisample = _glewSearchExtension("GL_NV_explicit_multisample", extStart, extEnd);
- if (glewExperimental || GLEW_NV_explicit_multisample) GLEW_NV_explicit_multisample = !_glewInit_GL_NV_explicit_multisample(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_explicit_multisample) GLEW_NV_explicit_multisample = !_glewInit_GL_NV_explicit_multisample();
#endif /* GL_NV_explicit_multisample */
#ifdef GL_NV_fence
- GLEW_NV_fence = _glewSearchExtension("GL_NV_fence", extStart, extEnd);
- if (glewExperimental || GLEW_NV_fence) GLEW_NV_fence = !_glewInit_GL_NV_fence(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_fence) GLEW_NV_fence = !_glewInit_GL_NV_fence();
#endif /* GL_NV_fence */
-#ifdef GL_NV_fill_rectangle
- GLEW_NV_fill_rectangle = _glewSearchExtension("GL_NV_fill_rectangle", extStart, extEnd);
-#endif /* GL_NV_fill_rectangle */
-#ifdef GL_NV_float_buffer
- GLEW_NV_float_buffer = _glewSearchExtension("GL_NV_float_buffer", extStart, extEnd);
-#endif /* GL_NV_float_buffer */
-#ifdef GL_NV_fog_distance
- GLEW_NV_fog_distance = _glewSearchExtension("GL_NV_fog_distance", extStart, extEnd);
-#endif /* GL_NV_fog_distance */
#ifdef GL_NV_fragment_coverage_to_color
- GLEW_NV_fragment_coverage_to_color = _glewSearchExtension("GL_NV_fragment_coverage_to_color", extStart, extEnd);
- if (glewExperimental || GLEW_NV_fragment_coverage_to_color) GLEW_NV_fragment_coverage_to_color = !_glewInit_GL_NV_fragment_coverage_to_color(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_fragment_coverage_to_color) GLEW_NV_fragment_coverage_to_color = !_glewInit_GL_NV_fragment_coverage_to_color();
#endif /* GL_NV_fragment_coverage_to_color */
#ifdef GL_NV_fragment_program
- GLEW_NV_fragment_program = _glewSearchExtension("GL_NV_fragment_program", extStart, extEnd);
- if (glewExperimental || GLEW_NV_fragment_program) GLEW_NV_fragment_program = !_glewInit_GL_NV_fragment_program(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_fragment_program) GLEW_NV_fragment_program = !_glewInit_GL_NV_fragment_program();
#endif /* GL_NV_fragment_program */
-#ifdef GL_NV_fragment_program2
- GLEW_NV_fragment_program2 = _glewSearchExtension("GL_NV_fragment_program2", extStart, extEnd);
-#endif /* GL_NV_fragment_program2 */
-#ifdef GL_NV_fragment_program4
- GLEW_NV_fragment_program4 = _glewSearchExtension("GL_NV_gpu_program4", extStart, extEnd);
-#endif /* GL_NV_fragment_program4 */
-#ifdef GL_NV_fragment_program_option
- GLEW_NV_fragment_program_option = _glewSearchExtension("GL_NV_fragment_program_option", extStart, extEnd);
-#endif /* GL_NV_fragment_program_option */
-#ifdef GL_NV_fragment_shader_interlock
- GLEW_NV_fragment_shader_interlock = _glewSearchExtension("GL_NV_fragment_shader_interlock", extStart, extEnd);
-#endif /* GL_NV_fragment_shader_interlock */
-#ifdef GL_NV_framebuffer_mixed_samples
- GLEW_NV_framebuffer_mixed_samples = _glewSearchExtension("GL_NV_framebuffer_mixed_samples", extStart, extEnd);
-#endif /* GL_NV_framebuffer_mixed_samples */
#ifdef GL_NV_framebuffer_multisample_coverage
- GLEW_NV_framebuffer_multisample_coverage = _glewSearchExtension("GL_NV_framebuffer_multisample_coverage", extStart, extEnd);
- if (glewExperimental || GLEW_NV_framebuffer_multisample_coverage) GLEW_NV_framebuffer_multisample_coverage = !_glewInit_GL_NV_framebuffer_multisample_coverage(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_framebuffer_multisample_coverage) GLEW_NV_framebuffer_multisample_coverage = !_glewInit_GL_NV_framebuffer_multisample_coverage();
#endif /* GL_NV_framebuffer_multisample_coverage */
#ifdef GL_NV_geometry_program4
- GLEW_NV_geometry_program4 = _glewSearchExtension("GL_NV_gpu_program4", extStart, extEnd);
- if (glewExperimental || GLEW_NV_geometry_program4) GLEW_NV_geometry_program4 = !_glewInit_GL_NV_geometry_program4(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_geometry_program4) GLEW_NV_geometry_program4 = !_glewInit_GL_NV_geometry_program4();
#endif /* GL_NV_geometry_program4 */
-#ifdef GL_NV_geometry_shader4
- GLEW_NV_geometry_shader4 = _glewSearchExtension("GL_NV_geometry_shader4", extStart, extEnd);
-#endif /* GL_NV_geometry_shader4 */
-#ifdef GL_NV_geometry_shader_passthrough
- GLEW_NV_geometry_shader_passthrough = _glewSearchExtension("GL_NV_geometry_shader_passthrough", extStart, extEnd);
-#endif /* GL_NV_geometry_shader_passthrough */
+#ifdef GL_NV_gpu_multicast
+ if (glewExperimental || GLEW_NV_gpu_multicast) GLEW_NV_gpu_multicast = !_glewInit_GL_NV_gpu_multicast();
+#endif /* GL_NV_gpu_multicast */
#ifdef GL_NV_gpu_program4
- GLEW_NV_gpu_program4 = _glewSearchExtension("GL_NV_gpu_program4", extStart, extEnd);
- if (glewExperimental || GLEW_NV_gpu_program4) GLEW_NV_gpu_program4 = !_glewInit_GL_NV_gpu_program4(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_gpu_program4) GLEW_NV_gpu_program4 = !_glewInit_GL_NV_gpu_program4();
#endif /* GL_NV_gpu_program4 */
-#ifdef GL_NV_gpu_program5
- GLEW_NV_gpu_program5 = _glewSearchExtension("GL_NV_gpu_program5", extStart, extEnd);
-#endif /* GL_NV_gpu_program5 */
-#ifdef GL_NV_gpu_program5_mem_extended
- GLEW_NV_gpu_program5_mem_extended = _glewSearchExtension("GL_NV_gpu_program5_mem_extended", extStart, extEnd);
-#endif /* GL_NV_gpu_program5_mem_extended */
-#ifdef GL_NV_gpu_program_fp64
- GLEW_NV_gpu_program_fp64 = _glewSearchExtension("GL_NV_gpu_program_fp64", extStart, extEnd);
-#endif /* GL_NV_gpu_program_fp64 */
#ifdef GL_NV_gpu_shader5
- GLEW_NV_gpu_shader5 = _glewSearchExtension("GL_NV_gpu_shader5", extStart, extEnd);
- if (glewExperimental || GLEW_NV_gpu_shader5) GLEW_NV_gpu_shader5 = !_glewInit_GL_NV_gpu_shader5(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_gpu_shader5) GLEW_NV_gpu_shader5 = !_glewInit_GL_NV_gpu_shader5();
#endif /* GL_NV_gpu_shader5 */
#ifdef GL_NV_half_float
- GLEW_NV_half_float = _glewSearchExtension("GL_NV_half_float", extStart, extEnd);
- if (glewExperimental || GLEW_NV_half_float) GLEW_NV_half_float = !_glewInit_GL_NV_half_float(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_half_float) GLEW_NV_half_float = !_glewInit_GL_NV_half_float();
#endif /* GL_NV_half_float */
#ifdef GL_NV_internalformat_sample_query
- GLEW_NV_internalformat_sample_query = _glewSearchExtension("GL_NV_internalformat_sample_query", extStart, extEnd);
- if (glewExperimental || GLEW_NV_internalformat_sample_query) GLEW_NV_internalformat_sample_query = !_glewInit_GL_NV_internalformat_sample_query(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_internalformat_sample_query) GLEW_NV_internalformat_sample_query = !_glewInit_GL_NV_internalformat_sample_query();
#endif /* GL_NV_internalformat_sample_query */
-#ifdef GL_NV_light_max_exponent
- GLEW_NV_light_max_exponent = _glewSearchExtension("GL_NV_light_max_exponent", extStart, extEnd);
-#endif /* GL_NV_light_max_exponent */
-#ifdef GL_NV_multisample_coverage
- GLEW_NV_multisample_coverage = _glewSearchExtension("GL_NV_multisample_coverage", extStart, extEnd);
-#endif /* GL_NV_multisample_coverage */
-#ifdef GL_NV_multisample_filter_hint
- GLEW_NV_multisample_filter_hint = _glewSearchExtension("GL_NV_multisample_filter_hint", extStart, extEnd);
-#endif /* GL_NV_multisample_filter_hint */
#ifdef GL_NV_occlusion_query
- GLEW_NV_occlusion_query = _glewSearchExtension("GL_NV_occlusion_query", extStart, extEnd);
- if (glewExperimental || GLEW_NV_occlusion_query) GLEW_NV_occlusion_query = !_glewInit_GL_NV_occlusion_query(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_occlusion_query) GLEW_NV_occlusion_query = !_glewInit_GL_NV_occlusion_query();
#endif /* GL_NV_occlusion_query */
-#ifdef GL_NV_packed_depth_stencil
- GLEW_NV_packed_depth_stencil = _glewSearchExtension("GL_NV_packed_depth_stencil", extStart, extEnd);
-#endif /* GL_NV_packed_depth_stencil */
#ifdef GL_NV_parameter_buffer_object
- GLEW_NV_parameter_buffer_object = _glewSearchExtension("GL_NV_parameter_buffer_object", extStart, extEnd);
- if (glewExperimental || GLEW_NV_parameter_buffer_object) GLEW_NV_parameter_buffer_object = !_glewInit_GL_NV_parameter_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_parameter_buffer_object) GLEW_NV_parameter_buffer_object = !_glewInit_GL_NV_parameter_buffer_object();
#endif /* GL_NV_parameter_buffer_object */
-#ifdef GL_NV_parameter_buffer_object2
- GLEW_NV_parameter_buffer_object2 = _glewSearchExtension("GL_NV_parameter_buffer_object2", extStart, extEnd);
-#endif /* GL_NV_parameter_buffer_object2 */
#ifdef GL_NV_path_rendering
- GLEW_NV_path_rendering = _glewSearchExtension("GL_NV_path_rendering", extStart, extEnd);
- if (glewExperimental || GLEW_NV_path_rendering) GLEW_NV_path_rendering = !_glewInit_GL_NV_path_rendering(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_path_rendering) GLEW_NV_path_rendering = !_glewInit_GL_NV_path_rendering();
#endif /* GL_NV_path_rendering */
-#ifdef GL_NV_path_rendering_shared_edge
- GLEW_NV_path_rendering_shared_edge = _glewSearchExtension("GL_NV_path_rendering_shared_edge", extStart, extEnd);
-#endif /* GL_NV_path_rendering_shared_edge */
#ifdef GL_NV_pixel_data_range
- GLEW_NV_pixel_data_range = _glewSearchExtension("GL_NV_pixel_data_range", extStart, extEnd);
- if (glewExperimental || GLEW_NV_pixel_data_range) GLEW_NV_pixel_data_range = !_glewInit_GL_NV_pixel_data_range(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_pixel_data_range) GLEW_NV_pixel_data_range = !_glewInit_GL_NV_pixel_data_range();
#endif /* GL_NV_pixel_data_range */
#ifdef GL_NV_point_sprite
- GLEW_NV_point_sprite = _glewSearchExtension("GL_NV_point_sprite", extStart, extEnd);
- if (glewExperimental || GLEW_NV_point_sprite) GLEW_NV_point_sprite = !_glewInit_GL_NV_point_sprite(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_point_sprite) GLEW_NV_point_sprite = !_glewInit_GL_NV_point_sprite();
#endif /* GL_NV_point_sprite */
#ifdef GL_NV_present_video
- GLEW_NV_present_video = _glewSearchExtension("GL_NV_present_video", extStart, extEnd);
- if (glewExperimental || GLEW_NV_present_video) GLEW_NV_present_video = !_glewInit_GL_NV_present_video(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_present_video) GLEW_NV_present_video = !_glewInit_GL_NV_present_video();
#endif /* GL_NV_present_video */
#ifdef GL_NV_primitive_restart
- GLEW_NV_primitive_restart = _glewSearchExtension("GL_NV_primitive_restart", extStart, extEnd);
- if (glewExperimental || GLEW_NV_primitive_restart) GLEW_NV_primitive_restart = !_glewInit_GL_NV_primitive_restart(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_primitive_restart) GLEW_NV_primitive_restart = !_glewInit_GL_NV_primitive_restart();
#endif /* GL_NV_primitive_restart */
#ifdef GL_NV_register_combiners
- GLEW_NV_register_combiners = _glewSearchExtension("GL_NV_register_combiners", extStart, extEnd);
- if (glewExperimental || GLEW_NV_register_combiners) GLEW_NV_register_combiners = !_glewInit_GL_NV_register_combiners(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_register_combiners) GLEW_NV_register_combiners = !_glewInit_GL_NV_register_combiners();
#endif /* GL_NV_register_combiners */
#ifdef GL_NV_register_combiners2
- GLEW_NV_register_combiners2 = _glewSearchExtension("GL_NV_register_combiners2", extStart, extEnd);
- if (glewExperimental || GLEW_NV_register_combiners2) GLEW_NV_register_combiners2 = !_glewInit_GL_NV_register_combiners2(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_register_combiners2) GLEW_NV_register_combiners2 = !_glewInit_GL_NV_register_combiners2();
#endif /* GL_NV_register_combiners2 */
#ifdef GL_NV_sample_locations
- GLEW_NV_sample_locations = _glewSearchExtension("GL_NV_sample_locations", extStart, extEnd);
- if (glewExperimental || GLEW_NV_sample_locations) GLEW_NV_sample_locations = !_glewInit_GL_NV_sample_locations(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_sample_locations) GLEW_NV_sample_locations = !_glewInit_GL_NV_sample_locations();
#endif /* GL_NV_sample_locations */
-#ifdef GL_NV_sample_mask_override_coverage
- GLEW_NV_sample_mask_override_coverage = _glewSearchExtension("GL_NV_sample_mask_override_coverage", extStart, extEnd);
-#endif /* GL_NV_sample_mask_override_coverage */
-#ifdef GL_NV_shader_atomic_counters
- GLEW_NV_shader_atomic_counters = _glewSearchExtension("GL_NV_shader_atomic_counters", extStart, extEnd);
-#endif /* GL_NV_shader_atomic_counters */
-#ifdef GL_NV_shader_atomic_float
- GLEW_NV_shader_atomic_float = _glewSearchExtension("GL_NV_shader_atomic_float", extStart, extEnd);
-#endif /* GL_NV_shader_atomic_float */
-#ifdef GL_NV_shader_atomic_fp16_vector
- GLEW_NV_shader_atomic_fp16_vector = _glewSearchExtension("GL_NV_shader_atomic_fp16_vector", extStart, extEnd);
-#endif /* GL_NV_shader_atomic_fp16_vector */
-#ifdef GL_NV_shader_atomic_int64
- GLEW_NV_shader_atomic_int64 = _glewSearchExtension("GL_NV_shader_atomic_int64", extStart, extEnd);
-#endif /* GL_NV_shader_atomic_int64 */
#ifdef GL_NV_shader_buffer_load
- GLEW_NV_shader_buffer_load = _glewSearchExtension("GL_NV_shader_buffer_load", extStart, extEnd);
- if (glewExperimental || GLEW_NV_shader_buffer_load) GLEW_NV_shader_buffer_load = !_glewInit_GL_NV_shader_buffer_load(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_shader_buffer_load) GLEW_NV_shader_buffer_load = !_glewInit_GL_NV_shader_buffer_load();
#endif /* GL_NV_shader_buffer_load */
-#ifdef GL_NV_shader_storage_buffer_object
- GLEW_NV_shader_storage_buffer_object = _glewSearchExtension("GL_NV_shader_storage_buffer_object", extStart, extEnd);
-#endif /* GL_NV_shader_storage_buffer_object */
-#ifdef GL_NV_shader_thread_group
- GLEW_NV_shader_thread_group = _glewSearchExtension("GL_NV_shader_thread_group", extStart, extEnd);
-#endif /* GL_NV_shader_thread_group */
-#ifdef GL_NV_shader_thread_shuffle
- GLEW_NV_shader_thread_shuffle = _glewSearchExtension("GL_NV_shader_thread_shuffle", extStart, extEnd);
-#endif /* GL_NV_shader_thread_shuffle */
-#ifdef GL_NV_tessellation_program5
- GLEW_NV_tessellation_program5 = _glewSearchExtension("GL_NV_gpu_program5", extStart, extEnd);
-#endif /* GL_NV_tessellation_program5 */
-#ifdef GL_NV_texgen_emboss
- GLEW_NV_texgen_emboss = _glewSearchExtension("GL_NV_texgen_emboss", extStart, extEnd);
-#endif /* GL_NV_texgen_emboss */
-#ifdef GL_NV_texgen_reflection
- GLEW_NV_texgen_reflection = _glewSearchExtension("GL_NV_texgen_reflection", extStart, extEnd);
-#endif /* GL_NV_texgen_reflection */
#ifdef GL_NV_texture_barrier
- GLEW_NV_texture_barrier = _glewSearchExtension("GL_NV_texture_barrier", extStart, extEnd);
- if (glewExperimental || GLEW_NV_texture_barrier) GLEW_NV_texture_barrier = !_glewInit_GL_NV_texture_barrier(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_texture_barrier) GLEW_NV_texture_barrier = !_glewInit_GL_NV_texture_barrier();
#endif /* GL_NV_texture_barrier */
-#ifdef GL_NV_texture_compression_vtc
- GLEW_NV_texture_compression_vtc = _glewSearchExtension("GL_NV_texture_compression_vtc", extStart, extEnd);
-#endif /* GL_NV_texture_compression_vtc */
-#ifdef GL_NV_texture_env_combine4
- GLEW_NV_texture_env_combine4 = _glewSearchExtension("GL_NV_texture_env_combine4", extStart, extEnd);
-#endif /* GL_NV_texture_env_combine4 */
-#ifdef GL_NV_texture_expand_normal
- GLEW_NV_texture_expand_normal = _glewSearchExtension("GL_NV_texture_expand_normal", extStart, extEnd);
-#endif /* GL_NV_texture_expand_normal */
#ifdef GL_NV_texture_multisample
- GLEW_NV_texture_multisample = _glewSearchExtension("GL_NV_texture_multisample", extStart, extEnd);
- if (glewExperimental || GLEW_NV_texture_multisample) GLEW_NV_texture_multisample = !_glewInit_GL_NV_texture_multisample(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_texture_multisample) GLEW_NV_texture_multisample = !_glewInit_GL_NV_texture_multisample();
#endif /* GL_NV_texture_multisample */
-#ifdef GL_NV_texture_rectangle
- GLEW_NV_texture_rectangle = _glewSearchExtension("GL_NV_texture_rectangle", extStart, extEnd);
-#endif /* GL_NV_texture_rectangle */
-#ifdef GL_NV_texture_shader
- GLEW_NV_texture_shader = _glewSearchExtension("GL_NV_texture_shader", extStart, extEnd);
-#endif /* GL_NV_texture_shader */
-#ifdef GL_NV_texture_shader2
- GLEW_NV_texture_shader2 = _glewSearchExtension("GL_NV_texture_shader2", extStart, extEnd);
-#endif /* GL_NV_texture_shader2 */
-#ifdef GL_NV_texture_shader3
- GLEW_NV_texture_shader3 = _glewSearchExtension("GL_NV_texture_shader3", extStart, extEnd);
-#endif /* GL_NV_texture_shader3 */
#ifdef GL_NV_transform_feedback
- GLEW_NV_transform_feedback = _glewSearchExtension("GL_NV_transform_feedback", extStart, extEnd);
- if (glewExperimental || GLEW_NV_transform_feedback) GLEW_NV_transform_feedback = !_glewInit_GL_NV_transform_feedback(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_transform_feedback) GLEW_NV_transform_feedback = !_glewInit_GL_NV_transform_feedback();
#endif /* GL_NV_transform_feedback */
#ifdef GL_NV_transform_feedback2
- GLEW_NV_transform_feedback2 = _glewSearchExtension("GL_NV_transform_feedback2", extStart, extEnd);
- if (glewExperimental || GLEW_NV_transform_feedback2) GLEW_NV_transform_feedback2 = !_glewInit_GL_NV_transform_feedback2(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_transform_feedback2) GLEW_NV_transform_feedback2 = !_glewInit_GL_NV_transform_feedback2();
#endif /* GL_NV_transform_feedback2 */
-#ifdef GL_NV_uniform_buffer_unified_memory
- GLEW_NV_uniform_buffer_unified_memory = _glewSearchExtension("GL_NV_uniform_buffer_unified_memory", extStart, extEnd);
-#endif /* GL_NV_uniform_buffer_unified_memory */
#ifdef GL_NV_vdpau_interop
- GLEW_NV_vdpau_interop = _glewSearchExtension("GL_NV_vdpau_interop", extStart, extEnd);
- if (glewExperimental || GLEW_NV_vdpau_interop) GLEW_NV_vdpau_interop = !_glewInit_GL_NV_vdpau_interop(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_vdpau_interop) GLEW_NV_vdpau_interop = !_glewInit_GL_NV_vdpau_interop();
#endif /* GL_NV_vdpau_interop */
#ifdef GL_NV_vertex_array_range
- GLEW_NV_vertex_array_range = _glewSearchExtension("GL_NV_vertex_array_range", extStart, extEnd);
- if (glewExperimental || GLEW_NV_vertex_array_range) GLEW_NV_vertex_array_range = !_glewInit_GL_NV_vertex_array_range(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_vertex_array_range) GLEW_NV_vertex_array_range = !_glewInit_GL_NV_vertex_array_range();
#endif /* GL_NV_vertex_array_range */
-#ifdef GL_NV_vertex_array_range2
- GLEW_NV_vertex_array_range2 = _glewSearchExtension("GL_NV_vertex_array_range2", extStart, extEnd);
-#endif /* GL_NV_vertex_array_range2 */
#ifdef GL_NV_vertex_attrib_integer_64bit
- GLEW_NV_vertex_attrib_integer_64bit = _glewSearchExtension("GL_NV_vertex_attrib_integer_64bit", extStart, extEnd);
- if (glewExperimental || GLEW_NV_vertex_attrib_integer_64bit) GLEW_NV_vertex_attrib_integer_64bit = !_glewInit_GL_NV_vertex_attrib_integer_64bit(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_vertex_attrib_integer_64bit) GLEW_NV_vertex_attrib_integer_64bit = !_glewInit_GL_NV_vertex_attrib_integer_64bit();
#endif /* GL_NV_vertex_attrib_integer_64bit */
#ifdef GL_NV_vertex_buffer_unified_memory
- GLEW_NV_vertex_buffer_unified_memory = _glewSearchExtension("GL_NV_vertex_buffer_unified_memory", extStart, extEnd);
- if (glewExperimental || GLEW_NV_vertex_buffer_unified_memory) GLEW_NV_vertex_buffer_unified_memory = !_glewInit_GL_NV_vertex_buffer_unified_memory(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_vertex_buffer_unified_memory) GLEW_NV_vertex_buffer_unified_memory = !_glewInit_GL_NV_vertex_buffer_unified_memory();
#endif /* GL_NV_vertex_buffer_unified_memory */
#ifdef GL_NV_vertex_program
- GLEW_NV_vertex_program = _glewSearchExtension("GL_NV_vertex_program", extStart, extEnd);
- if (glewExperimental || GLEW_NV_vertex_program) GLEW_NV_vertex_program = !_glewInit_GL_NV_vertex_program(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_vertex_program) GLEW_NV_vertex_program = !_glewInit_GL_NV_vertex_program();
#endif /* GL_NV_vertex_program */
-#ifdef GL_NV_vertex_program1_1
- GLEW_NV_vertex_program1_1 = _glewSearchExtension("GL_NV_vertex_program1_1", extStart, extEnd);
-#endif /* GL_NV_vertex_program1_1 */
-#ifdef GL_NV_vertex_program2
- GLEW_NV_vertex_program2 = _glewSearchExtension("GL_NV_vertex_program2", extStart, extEnd);
-#endif /* GL_NV_vertex_program2 */
-#ifdef GL_NV_vertex_program2_option
- GLEW_NV_vertex_program2_option = _glewSearchExtension("GL_NV_vertex_program2_option", extStart, extEnd);
-#endif /* GL_NV_vertex_program2_option */
-#ifdef GL_NV_vertex_program3
- GLEW_NV_vertex_program3 = _glewSearchExtension("GL_NV_vertex_program3", extStart, extEnd);
-#endif /* GL_NV_vertex_program3 */
-#ifdef GL_NV_vertex_program4
- GLEW_NV_vertex_program4 = _glewSearchExtension("GL_NV_gpu_program4", extStart, extEnd);
-#endif /* GL_NV_vertex_program4 */
#ifdef GL_NV_video_capture
- GLEW_NV_video_capture = _glewSearchExtension("GL_NV_video_capture", extStart, extEnd);
- if (glewExperimental || GLEW_NV_video_capture) GLEW_NV_video_capture = !_glewInit_GL_NV_video_capture(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_NV_video_capture) GLEW_NV_video_capture = !_glewInit_GL_NV_video_capture();
#endif /* GL_NV_video_capture */
-#ifdef GL_NV_viewport_array2
- GLEW_NV_viewport_array2 = _glewSearchExtension("GL_NV_viewport_array2", extStart, extEnd);
-#endif /* GL_NV_viewport_array2 */
-#ifdef GL_OES_byte_coordinates
- GLEW_OES_byte_coordinates = _glewSearchExtension("GL_OES_byte_coordinates", extStart, extEnd);
-#endif /* GL_OES_byte_coordinates */
-#ifdef GL_OES_compressed_paletted_texture
- GLEW_OES_compressed_paletted_texture = _glewSearchExtension("GL_OES_compressed_paletted_texture", extStart, extEnd);
-#endif /* GL_OES_compressed_paletted_texture */
-#ifdef GL_OES_read_format
- GLEW_OES_read_format = _glewSearchExtension("GL_OES_read_format", extStart, extEnd);
-#endif /* GL_OES_read_format */
+#ifdef GL_NV_viewport_swizzle
+ if (glewExperimental || GLEW_NV_viewport_swizzle) GLEW_NV_viewport_swizzle = !_glewInit_GL_NV_viewport_swizzle();
+#endif /* GL_NV_viewport_swizzle */
#ifdef GL_OES_single_precision
- GLEW_OES_single_precision = _glewSearchExtension("GL_OES_single_precision", extStart, extEnd);
- if (glewExperimental || GLEW_OES_single_precision) GLEW_OES_single_precision = !_glewInit_GL_OES_single_precision(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_OES_single_precision) GLEW_OES_single_precision = !_glewInit_GL_OES_single_precision();
#endif /* GL_OES_single_precision */
-#ifdef GL_OML_interlace
- GLEW_OML_interlace = _glewSearchExtension("GL_OML_interlace", extStart, extEnd);
-#endif /* GL_OML_interlace */
-#ifdef GL_OML_resample
- GLEW_OML_resample = _glewSearchExtension("GL_OML_resample", extStart, extEnd);
-#endif /* GL_OML_resample */
-#ifdef GL_OML_subsample
- GLEW_OML_subsample = _glewSearchExtension("GL_OML_subsample", extStart, extEnd);
-#endif /* GL_OML_subsample */
#ifdef GL_OVR_multiview
- GLEW_OVR_multiview = _glewSearchExtension("GL_OVR_multiview", extStart, extEnd);
- if (glewExperimental || GLEW_OVR_multiview) GLEW_OVR_multiview = !_glewInit_GL_OVR_multiview(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_OVR_multiview) GLEW_OVR_multiview = !_glewInit_GL_OVR_multiview();
#endif /* GL_OVR_multiview */
-#ifdef GL_OVR_multiview2
- GLEW_OVR_multiview2 = _glewSearchExtension("GL_OVR_multiview2", extStart, extEnd);
-#endif /* GL_OVR_multiview2 */
-#ifdef GL_PGI_misc_hints
- GLEW_PGI_misc_hints = _glewSearchExtension("GL_PGI_misc_hints", extStart, extEnd);
-#endif /* GL_PGI_misc_hints */
-#ifdef GL_PGI_vertex_hints
- GLEW_PGI_vertex_hints = _glewSearchExtension("GL_PGI_vertex_hints", extStart, extEnd);
-#endif /* GL_PGI_vertex_hints */
#ifdef GL_REGAL_ES1_0_compatibility
- GLEW_REGAL_ES1_0_compatibility = _glewSearchExtension("GL_REGAL_ES1_0_compatibility", extStart, extEnd);
- if (glewExperimental || GLEW_REGAL_ES1_0_compatibility) GLEW_REGAL_ES1_0_compatibility = !_glewInit_GL_REGAL_ES1_0_compatibility(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_REGAL_ES1_0_compatibility) GLEW_REGAL_ES1_0_compatibility = !_glewInit_GL_REGAL_ES1_0_compatibility();
#endif /* GL_REGAL_ES1_0_compatibility */
#ifdef GL_REGAL_ES1_1_compatibility
- GLEW_REGAL_ES1_1_compatibility = _glewSearchExtension("GL_REGAL_ES1_1_compatibility", extStart, extEnd);
- if (glewExperimental || GLEW_REGAL_ES1_1_compatibility) GLEW_REGAL_ES1_1_compatibility = !_glewInit_GL_REGAL_ES1_1_compatibility(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_REGAL_ES1_1_compatibility) GLEW_REGAL_ES1_1_compatibility = !_glewInit_GL_REGAL_ES1_1_compatibility();
#endif /* GL_REGAL_ES1_1_compatibility */
-#ifdef GL_REGAL_enable
- GLEW_REGAL_enable = _glewSearchExtension("GL_REGAL_enable", extStart, extEnd);
-#endif /* GL_REGAL_enable */
#ifdef GL_REGAL_error_string
- GLEW_REGAL_error_string = _glewSearchExtension("GL_REGAL_error_string", extStart, extEnd);
- if (glewExperimental || GLEW_REGAL_error_string) GLEW_REGAL_error_string = !_glewInit_GL_REGAL_error_string(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_REGAL_error_string) GLEW_REGAL_error_string = !_glewInit_GL_REGAL_error_string();
#endif /* GL_REGAL_error_string */
#ifdef GL_REGAL_extension_query
- GLEW_REGAL_extension_query = _glewSearchExtension("GL_REGAL_extension_query", extStart, extEnd);
- if (glewExperimental || GLEW_REGAL_extension_query) GLEW_REGAL_extension_query = !_glewInit_GL_REGAL_extension_query(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_REGAL_extension_query) GLEW_REGAL_extension_query = !_glewInit_GL_REGAL_extension_query();
#endif /* GL_REGAL_extension_query */
#ifdef GL_REGAL_log
- GLEW_REGAL_log = _glewSearchExtension("GL_REGAL_log", extStart, extEnd);
- if (glewExperimental || GLEW_REGAL_log) GLEW_REGAL_log = !_glewInit_GL_REGAL_log(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_REGAL_log) GLEW_REGAL_log = !_glewInit_GL_REGAL_log();
#endif /* GL_REGAL_log */
#ifdef GL_REGAL_proc_address
- GLEW_REGAL_proc_address = _glewSearchExtension("GL_REGAL_proc_address", extStart, extEnd);
- if (glewExperimental || GLEW_REGAL_proc_address) GLEW_REGAL_proc_address = !_glewInit_GL_REGAL_proc_address(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_REGAL_proc_address) GLEW_REGAL_proc_address = !_glewInit_GL_REGAL_proc_address();
#endif /* GL_REGAL_proc_address */
-#ifdef GL_REND_screen_coordinates
- GLEW_REND_screen_coordinates = _glewSearchExtension("GL_REND_screen_coordinates", extStart, extEnd);
-#endif /* GL_REND_screen_coordinates */
-#ifdef GL_S3_s3tc
- GLEW_S3_s3tc = _glewSearchExtension("GL_S3_s3tc", extStart, extEnd);
-#endif /* GL_S3_s3tc */
-#ifdef GL_SGIS_color_range
- GLEW_SGIS_color_range = _glewSearchExtension("GL_SGIS_color_range", extStart, extEnd);
-#endif /* GL_SGIS_color_range */
#ifdef GL_SGIS_detail_texture
- GLEW_SGIS_detail_texture = _glewSearchExtension("GL_SGIS_detail_texture", extStart, extEnd);
- if (glewExperimental || GLEW_SGIS_detail_texture) GLEW_SGIS_detail_texture = !_glewInit_GL_SGIS_detail_texture(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_SGIS_detail_texture) GLEW_SGIS_detail_texture = !_glewInit_GL_SGIS_detail_texture();
#endif /* GL_SGIS_detail_texture */
#ifdef GL_SGIS_fog_function
- GLEW_SGIS_fog_function = _glewSearchExtension("GL_SGIS_fog_function", extStart, extEnd);
- if (glewExperimental || GLEW_SGIS_fog_function) GLEW_SGIS_fog_function = !_glewInit_GL_SGIS_fog_function(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_SGIS_fog_function) GLEW_SGIS_fog_function = !_glewInit_GL_SGIS_fog_function();
#endif /* GL_SGIS_fog_function */
-#ifdef GL_SGIS_generate_mipmap
- GLEW_SGIS_generate_mipmap = _glewSearchExtension("GL_SGIS_generate_mipmap", extStart, extEnd);
-#endif /* GL_SGIS_generate_mipmap */
#ifdef GL_SGIS_multisample
- GLEW_SGIS_multisample = _glewSearchExtension("GL_SGIS_multisample", extStart, extEnd);
- if (glewExperimental || GLEW_SGIS_multisample) GLEW_SGIS_multisample = !_glewInit_GL_SGIS_multisample(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_SGIS_multisample) GLEW_SGIS_multisample = !_glewInit_GL_SGIS_multisample();
#endif /* GL_SGIS_multisample */
-#ifdef GL_SGIS_pixel_texture
- GLEW_SGIS_pixel_texture = _glewSearchExtension("GL_SGIS_pixel_texture", extStart, extEnd);
-#endif /* GL_SGIS_pixel_texture */
-#ifdef GL_SGIS_point_line_texgen
- GLEW_SGIS_point_line_texgen = _glewSearchExtension("GL_SGIS_point_line_texgen", extStart, extEnd);
-#endif /* GL_SGIS_point_line_texgen */
#ifdef GL_SGIS_sharpen_texture
- GLEW_SGIS_sharpen_texture = _glewSearchExtension("GL_SGIS_sharpen_texture", extStart, extEnd);
- if (glewExperimental || GLEW_SGIS_sharpen_texture) GLEW_SGIS_sharpen_texture = !_glewInit_GL_SGIS_sharpen_texture(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_SGIS_sharpen_texture) GLEW_SGIS_sharpen_texture = !_glewInit_GL_SGIS_sharpen_texture();
#endif /* GL_SGIS_sharpen_texture */
#ifdef GL_SGIS_texture4D
- GLEW_SGIS_texture4D = _glewSearchExtension("GL_SGIS_texture4D", extStart, extEnd);
- if (glewExperimental || GLEW_SGIS_texture4D) GLEW_SGIS_texture4D = !_glewInit_GL_SGIS_texture4D(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_SGIS_texture4D) GLEW_SGIS_texture4D = !_glewInit_GL_SGIS_texture4D();
#endif /* GL_SGIS_texture4D */
-#ifdef GL_SGIS_texture_border_clamp
- GLEW_SGIS_texture_border_clamp = _glewSearchExtension("GL_SGIS_texture_border_clamp", extStart, extEnd);
-#endif /* GL_SGIS_texture_border_clamp */
-#ifdef GL_SGIS_texture_edge_clamp
- GLEW_SGIS_texture_edge_clamp = _glewSearchExtension("GL_SGIS_texture_edge_clamp", extStart, extEnd);
-#endif /* GL_SGIS_texture_edge_clamp */
#ifdef GL_SGIS_texture_filter4
- GLEW_SGIS_texture_filter4 = _glewSearchExtension("GL_SGIS_texture_filter4", extStart, extEnd);
- if (glewExperimental || GLEW_SGIS_texture_filter4) GLEW_SGIS_texture_filter4 = !_glewInit_GL_SGIS_texture_filter4(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_SGIS_texture_filter4) GLEW_SGIS_texture_filter4 = !_glewInit_GL_SGIS_texture_filter4();
#endif /* GL_SGIS_texture_filter4 */
-#ifdef GL_SGIS_texture_lod
- GLEW_SGIS_texture_lod = _glewSearchExtension("GL_SGIS_texture_lod", extStart, extEnd);
-#endif /* GL_SGIS_texture_lod */
-#ifdef GL_SGIS_texture_select
- GLEW_SGIS_texture_select = _glewSearchExtension("GL_SGIS_texture_select", extStart, extEnd);
-#endif /* GL_SGIS_texture_select */
#ifdef GL_SGIX_async
- GLEW_SGIX_async = _glewSearchExtension("GL_SGIX_async", extStart, extEnd);
- if (glewExperimental || GLEW_SGIX_async) GLEW_SGIX_async = !_glewInit_GL_SGIX_async(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_SGIX_async) GLEW_SGIX_async = !_glewInit_GL_SGIX_async();
#endif /* GL_SGIX_async */
-#ifdef GL_SGIX_async_histogram
- GLEW_SGIX_async_histogram = _glewSearchExtension("GL_SGIX_async_histogram", extStart, extEnd);
-#endif /* GL_SGIX_async_histogram */
-#ifdef GL_SGIX_async_pixel
- GLEW_SGIX_async_pixel = _glewSearchExtension("GL_SGIX_async_pixel", extStart, extEnd);
-#endif /* GL_SGIX_async_pixel */
-#ifdef GL_SGIX_blend_alpha_minmax
- GLEW_SGIX_blend_alpha_minmax = _glewSearchExtension("GL_SGIX_blend_alpha_minmax", extStart, extEnd);
-#endif /* GL_SGIX_blend_alpha_minmax */
-#ifdef GL_SGIX_clipmap
- GLEW_SGIX_clipmap = _glewSearchExtension("GL_SGIX_clipmap", extStart, extEnd);
-#endif /* GL_SGIX_clipmap */
-#ifdef GL_SGIX_convolution_accuracy
- GLEW_SGIX_convolution_accuracy = _glewSearchExtension("GL_SGIX_convolution_accuracy", extStart, extEnd);
-#endif /* GL_SGIX_convolution_accuracy */
-#ifdef GL_SGIX_depth_texture
- GLEW_SGIX_depth_texture = _glewSearchExtension("GL_SGIX_depth_texture", extStart, extEnd);
-#endif /* GL_SGIX_depth_texture */
#ifdef GL_SGIX_flush_raster
- GLEW_SGIX_flush_raster = _glewSearchExtension("GL_SGIX_flush_raster", extStart, extEnd);
- if (glewExperimental || GLEW_SGIX_flush_raster) GLEW_SGIX_flush_raster = !_glewInit_GL_SGIX_flush_raster(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_SGIX_flush_raster) GLEW_SGIX_flush_raster = !_glewInit_GL_SGIX_flush_raster();
#endif /* GL_SGIX_flush_raster */
-#ifdef GL_SGIX_fog_offset
- GLEW_SGIX_fog_offset = _glewSearchExtension("GL_SGIX_fog_offset", extStart, extEnd);
-#endif /* GL_SGIX_fog_offset */
#ifdef GL_SGIX_fog_texture
- GLEW_SGIX_fog_texture = _glewSearchExtension("GL_SGIX_fog_texture", extStart, extEnd);
- if (glewExperimental || GLEW_SGIX_fog_texture) GLEW_SGIX_fog_texture = !_glewInit_GL_SGIX_fog_texture(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_SGIX_fog_texture) GLEW_SGIX_fog_texture = !_glewInit_GL_SGIX_fog_texture();
#endif /* GL_SGIX_fog_texture */
#ifdef GL_SGIX_fragment_specular_lighting
- GLEW_SGIX_fragment_specular_lighting = _glewSearchExtension("GL_SGIX_fragment_specular_lighting", extStart, extEnd);
- if (glewExperimental || GLEW_SGIX_fragment_specular_lighting) GLEW_SGIX_fragment_specular_lighting = !_glewInit_GL_SGIX_fragment_specular_lighting(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_SGIX_fragment_specular_lighting) GLEW_SGIX_fragment_specular_lighting = !_glewInit_GL_SGIX_fragment_specular_lighting();
#endif /* GL_SGIX_fragment_specular_lighting */
#ifdef GL_SGIX_framezoom
- GLEW_SGIX_framezoom = _glewSearchExtension("GL_SGIX_framezoom", extStart, extEnd);
- if (glewExperimental || GLEW_SGIX_framezoom) GLEW_SGIX_framezoom = !_glewInit_GL_SGIX_framezoom(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_SGIX_framezoom) GLEW_SGIX_framezoom = !_glewInit_GL_SGIX_framezoom();
#endif /* GL_SGIX_framezoom */
-#ifdef GL_SGIX_interlace
- GLEW_SGIX_interlace = _glewSearchExtension("GL_SGIX_interlace", extStart, extEnd);
-#endif /* GL_SGIX_interlace */
-#ifdef GL_SGIX_ir_instrument1
- GLEW_SGIX_ir_instrument1 = _glewSearchExtension("GL_SGIX_ir_instrument1", extStart, extEnd);
-#endif /* GL_SGIX_ir_instrument1 */
-#ifdef GL_SGIX_list_priority
- GLEW_SGIX_list_priority = _glewSearchExtension("GL_SGIX_list_priority", extStart, extEnd);
-#endif /* GL_SGIX_list_priority */
#ifdef GL_SGIX_pixel_texture
- GLEW_SGIX_pixel_texture = _glewSearchExtension("GL_SGIX_pixel_texture", extStart, extEnd);
- if (glewExperimental || GLEW_SGIX_pixel_texture) GLEW_SGIX_pixel_texture = !_glewInit_GL_SGIX_pixel_texture(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_SGIX_pixel_texture) GLEW_SGIX_pixel_texture = !_glewInit_GL_SGIX_pixel_texture();
#endif /* GL_SGIX_pixel_texture */
-#ifdef GL_SGIX_pixel_texture_bits
- GLEW_SGIX_pixel_texture_bits = _glewSearchExtension("GL_SGIX_pixel_texture_bits", extStart, extEnd);
-#endif /* GL_SGIX_pixel_texture_bits */
#ifdef GL_SGIX_reference_plane
- GLEW_SGIX_reference_plane = _glewSearchExtension("GL_SGIX_reference_plane", extStart, extEnd);
- if (glewExperimental || GLEW_SGIX_reference_plane) GLEW_SGIX_reference_plane = !_glewInit_GL_SGIX_reference_plane(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_SGIX_reference_plane) GLEW_SGIX_reference_plane = !_glewInit_GL_SGIX_reference_plane();
#endif /* GL_SGIX_reference_plane */
-#ifdef GL_SGIX_resample
- GLEW_SGIX_resample = _glewSearchExtension("GL_SGIX_resample", extStart, extEnd);
-#endif /* GL_SGIX_resample */
-#ifdef GL_SGIX_shadow
- GLEW_SGIX_shadow = _glewSearchExtension("GL_SGIX_shadow", extStart, extEnd);
-#endif /* GL_SGIX_shadow */
-#ifdef GL_SGIX_shadow_ambient
- GLEW_SGIX_shadow_ambient = _glewSearchExtension("GL_SGIX_shadow_ambient", extStart, extEnd);
-#endif /* GL_SGIX_shadow_ambient */
#ifdef GL_SGIX_sprite
- GLEW_SGIX_sprite = _glewSearchExtension("GL_SGIX_sprite", extStart, extEnd);
- if (glewExperimental || GLEW_SGIX_sprite) GLEW_SGIX_sprite = !_glewInit_GL_SGIX_sprite(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_SGIX_sprite) GLEW_SGIX_sprite = !_glewInit_GL_SGIX_sprite();
#endif /* GL_SGIX_sprite */
#ifdef GL_SGIX_tag_sample_buffer
- GLEW_SGIX_tag_sample_buffer = _glewSearchExtension("GL_SGIX_tag_sample_buffer", extStart, extEnd);
- if (glewExperimental || GLEW_SGIX_tag_sample_buffer) GLEW_SGIX_tag_sample_buffer = !_glewInit_GL_SGIX_tag_sample_buffer(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_SGIX_tag_sample_buffer) GLEW_SGIX_tag_sample_buffer = !_glewInit_GL_SGIX_tag_sample_buffer();
#endif /* GL_SGIX_tag_sample_buffer */
-#ifdef GL_SGIX_texture_add_env
- GLEW_SGIX_texture_add_env = _glewSearchExtension("GL_SGIX_texture_add_env", extStart, extEnd);
-#endif /* GL_SGIX_texture_add_env */
-#ifdef GL_SGIX_texture_coordinate_clamp
- GLEW_SGIX_texture_coordinate_clamp = _glewSearchExtension("GL_SGIX_texture_coordinate_clamp", extStart, extEnd);
-#endif /* GL_SGIX_texture_coordinate_clamp */
-#ifdef GL_SGIX_texture_lod_bias
- GLEW_SGIX_texture_lod_bias = _glewSearchExtension("GL_SGIX_texture_lod_bias", extStart, extEnd);
-#endif /* GL_SGIX_texture_lod_bias */
-#ifdef GL_SGIX_texture_multi_buffer
- GLEW_SGIX_texture_multi_buffer = _glewSearchExtension("GL_SGIX_texture_multi_buffer", extStart, extEnd);
-#endif /* GL_SGIX_texture_multi_buffer */
-#ifdef GL_SGIX_texture_range
- GLEW_SGIX_texture_range = _glewSearchExtension("GL_SGIX_texture_range", extStart, extEnd);
-#endif /* GL_SGIX_texture_range */
-#ifdef GL_SGIX_texture_scale_bias
- GLEW_SGIX_texture_scale_bias = _glewSearchExtension("GL_SGIX_texture_scale_bias", extStart, extEnd);
-#endif /* GL_SGIX_texture_scale_bias */
-#ifdef GL_SGIX_vertex_preclip
- GLEW_SGIX_vertex_preclip = _glewSearchExtension("GL_SGIX_vertex_preclip", extStart, extEnd);
-#endif /* GL_SGIX_vertex_preclip */
-#ifdef GL_SGIX_vertex_preclip_hint
- GLEW_SGIX_vertex_preclip_hint = _glewSearchExtension("GL_SGIX_vertex_preclip_hint", extStart, extEnd);
-#endif /* GL_SGIX_vertex_preclip_hint */
-#ifdef GL_SGIX_ycrcb
- GLEW_SGIX_ycrcb = _glewSearchExtension("GL_SGIX_ycrcb", extStart, extEnd);
-#endif /* GL_SGIX_ycrcb */
-#ifdef GL_SGI_color_matrix
- GLEW_SGI_color_matrix = _glewSearchExtension("GL_SGI_color_matrix", extStart, extEnd);
-#endif /* GL_SGI_color_matrix */
#ifdef GL_SGI_color_table
- GLEW_SGI_color_table = _glewSearchExtension("GL_SGI_color_table", extStart, extEnd);
- if (glewExperimental || GLEW_SGI_color_table) GLEW_SGI_color_table = !_glewInit_GL_SGI_color_table(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_SGI_color_table) GLEW_SGI_color_table = !_glewInit_GL_SGI_color_table();
#endif /* GL_SGI_color_table */
-#ifdef GL_SGI_texture_color_table
- GLEW_SGI_texture_color_table = _glewSearchExtension("GL_SGI_texture_color_table", extStart, extEnd);
-#endif /* GL_SGI_texture_color_table */
#ifdef GL_SUNX_constant_data
- GLEW_SUNX_constant_data = _glewSearchExtension("GL_SUNX_constant_data", extStart, extEnd);
- if (glewExperimental || GLEW_SUNX_constant_data) GLEW_SUNX_constant_data = !_glewInit_GL_SUNX_constant_data(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_SUNX_constant_data) GLEW_SUNX_constant_data = !_glewInit_GL_SUNX_constant_data();
#endif /* GL_SUNX_constant_data */
-#ifdef GL_SUN_convolution_border_modes
- GLEW_SUN_convolution_border_modes = _glewSearchExtension("GL_SUN_convolution_border_modes", extStart, extEnd);
-#endif /* GL_SUN_convolution_border_modes */
#ifdef GL_SUN_global_alpha
- GLEW_SUN_global_alpha = _glewSearchExtension("GL_SUN_global_alpha", extStart, extEnd);
- if (glewExperimental || GLEW_SUN_global_alpha) GLEW_SUN_global_alpha = !_glewInit_GL_SUN_global_alpha(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_SUN_global_alpha) GLEW_SUN_global_alpha = !_glewInit_GL_SUN_global_alpha();
#endif /* GL_SUN_global_alpha */
-#ifdef GL_SUN_mesh_array
- GLEW_SUN_mesh_array = _glewSearchExtension("GL_SUN_mesh_array", extStart, extEnd);
-#endif /* GL_SUN_mesh_array */
#ifdef GL_SUN_read_video_pixels
- GLEW_SUN_read_video_pixels = _glewSearchExtension("GL_SUN_read_video_pixels", extStart, extEnd);
- if (glewExperimental || GLEW_SUN_read_video_pixels) GLEW_SUN_read_video_pixels = !_glewInit_GL_SUN_read_video_pixels(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_SUN_read_video_pixels) GLEW_SUN_read_video_pixels = !_glewInit_GL_SUN_read_video_pixels();
#endif /* GL_SUN_read_video_pixels */
-#ifdef GL_SUN_slice_accum
- GLEW_SUN_slice_accum = _glewSearchExtension("GL_SUN_slice_accum", extStart, extEnd);
-#endif /* GL_SUN_slice_accum */
#ifdef GL_SUN_triangle_list
- GLEW_SUN_triangle_list = _glewSearchExtension("GL_SUN_triangle_list", extStart, extEnd);
- if (glewExperimental || GLEW_SUN_triangle_list) GLEW_SUN_triangle_list = !_glewInit_GL_SUN_triangle_list(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_SUN_triangle_list) GLEW_SUN_triangle_list = !_glewInit_GL_SUN_triangle_list();
#endif /* GL_SUN_triangle_list */
#ifdef GL_SUN_vertex
- GLEW_SUN_vertex = _glewSearchExtension("GL_SUN_vertex", extStart, extEnd);
- if (glewExperimental || GLEW_SUN_vertex) GLEW_SUN_vertex = !_glewInit_GL_SUN_vertex(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_SUN_vertex) GLEW_SUN_vertex = !_glewInit_GL_SUN_vertex();
#endif /* GL_SUN_vertex */
-#ifdef GL_WIN_phong_shading
- GLEW_WIN_phong_shading = _glewSearchExtension("GL_WIN_phong_shading", extStart, extEnd);
-#endif /* GL_WIN_phong_shading */
-#ifdef GL_WIN_specular_fog
- GLEW_WIN_specular_fog = _glewSearchExtension("GL_WIN_specular_fog", extStart, extEnd);
-#endif /* GL_WIN_specular_fog */
#ifdef GL_WIN_swap_hint
- GLEW_WIN_swap_hint = _glewSearchExtension("GL_WIN_swap_hint", extStart, extEnd);
- if (glewExperimental || GLEW_WIN_swap_hint) GLEW_WIN_swap_hint = !_glewInit_GL_WIN_swap_hint(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLEW_WIN_swap_hint) GLEW_WIN_swap_hint = !_glewInit_GL_WIN_swap_hint();
#endif /* GL_WIN_swap_hint */
+#ifdef GL_NV_fragment_program4
+ GLEW_NV_fragment_program4 = GLEW_NV_gpu_program4;
+#endif /* GL_NV_fragment_program4 */
+#ifdef GL_NV_geometry_program4
+ GLEW_NV_geometry_program4 = GLEW_NV_gpu_program4;
+#endif /* GL_NV_geometry_program4 */
+#ifdef GL_NV_tessellation_program5
+ GLEW_NV_tessellation_program5 = GLEW_NV_gpu_program5;
+#endif /* GL_NV_tessellation_program5 */
+#ifdef GL_NV_vertex_program4
+ GLEW_NV_vertex_program4 = GLEW_NV_gpu_program4;
+#endif /* GL_NV_vertex_program4 */
return GLEW_OK;
}
-#if defined(_WIN32)
+#if defined(GLEW_OSMESA)
+
+#elif defined(GLEW_EGL)
+
+PFNEGLCHOOSECONFIGPROC __eglewChooseConfig = NULL;
+PFNEGLCOPYBUFFERSPROC __eglewCopyBuffers = NULL;
+PFNEGLCREATECONTEXTPROC __eglewCreateContext = NULL;
+PFNEGLCREATEPBUFFERSURFACEPROC __eglewCreatePbufferSurface = NULL;
+PFNEGLCREATEPIXMAPSURFACEPROC __eglewCreatePixmapSurface = NULL;
+PFNEGLCREATEWINDOWSURFACEPROC __eglewCreateWindowSurface = NULL;
+PFNEGLDESTROYCONTEXTPROC __eglewDestroyContext = NULL;
+PFNEGLDESTROYSURFACEPROC __eglewDestroySurface = NULL;
+PFNEGLGETCONFIGATTRIBPROC __eglewGetConfigAttrib = NULL;
+PFNEGLGETCONFIGSPROC __eglewGetConfigs = NULL;
+PFNEGLGETCURRENTDISPLAYPROC __eglewGetCurrentDisplay = NULL;
+PFNEGLGETCURRENTSURFACEPROC __eglewGetCurrentSurface = NULL;
+PFNEGLGETDISPLAYPROC __eglewGetDisplay = NULL;
+PFNEGLGETERRORPROC __eglewGetError = NULL;
+PFNEGLINITIALIZEPROC __eglewInitialize = NULL;
+PFNEGLMAKECURRENTPROC __eglewMakeCurrent = NULL;
+PFNEGLQUERYCONTEXTPROC __eglewQueryContext = NULL;
+PFNEGLQUERYSTRINGPROC __eglewQueryString = NULL;
+PFNEGLQUERYSURFACEPROC __eglewQuerySurface = NULL;
+PFNEGLSWAPBUFFERSPROC __eglewSwapBuffers = NULL;
+PFNEGLTERMINATEPROC __eglewTerminate = NULL;
+PFNEGLWAITGLPROC __eglewWaitGL = NULL;
+PFNEGLWAITNATIVEPROC __eglewWaitNative = NULL;
+
+PFNEGLBINDTEXIMAGEPROC __eglewBindTexImage = NULL;
+PFNEGLRELEASETEXIMAGEPROC __eglewReleaseTexImage = NULL;
+PFNEGLSURFACEATTRIBPROC __eglewSurfaceAttrib = NULL;
+PFNEGLSWAPINTERVALPROC __eglewSwapInterval = NULL;
+
+PFNEGLBINDAPIPROC __eglewBindAPI = NULL;
+PFNEGLCREATEPBUFFERFROMCLIENTBUFFERPROC __eglewCreatePbufferFromClientBuffer = NULL;
+PFNEGLQUERYAPIPROC __eglewQueryAPI = NULL;
+PFNEGLRELEASETHREADPROC __eglewReleaseThread = NULL;
+PFNEGLWAITCLIENTPROC __eglewWaitClient = NULL;
+
+PFNEGLGETCURRENTCONTEXTPROC __eglewGetCurrentContext = NULL;
+
+PFNEGLCLIENTWAITSYNCPROC __eglewClientWaitSync = NULL;
+PFNEGLCREATEIMAGEPROC __eglewCreateImage = NULL;
+PFNEGLCREATEPLATFORMPIXMAPSURFACEPROC __eglewCreatePlatformPixmapSurface = NULL;
+PFNEGLCREATEPLATFORMWINDOWSURFACEPROC __eglewCreatePlatformWindowSurface = NULL;
+PFNEGLCREATESYNCPROC __eglewCreateSync = NULL;
+PFNEGLDESTROYIMAGEPROC __eglewDestroyImage = NULL;
+PFNEGLDESTROYSYNCPROC __eglewDestroySync = NULL;
+PFNEGLGETPLATFORMDISPLAYPROC __eglewGetPlatformDisplay = NULL;
+PFNEGLGETSYNCATTRIBPROC __eglewGetSyncAttrib = NULL;
+PFNEGLWAITSYNCPROC __eglewWaitSync = NULL;
+
+PFNEGLSETBLOBCACHEFUNCSANDROIDPROC __eglewSetBlobCacheFuncsANDROID = NULL;
+
+PFNEGLCREATENATIVECLIENTBUFFERANDROIDPROC __eglewCreateNativeClientBufferANDROID = NULL;
+
+PFNEGLDUPNATIVEFENCEFDANDROIDPROC __eglewDupNativeFenceFDANDROID = NULL;
+
+PFNEGLPRESENTATIONTIMEANDROIDPROC __eglewPresentationTimeANDROID = NULL;
+
+PFNEGLQUERYSURFACEPOINTERANGLEPROC __eglewQuerySurfacePointerANGLE = NULL;
+
+PFNEGLQUERYDEVICESEXTPROC __eglewQueryDevicesEXT = NULL;
+
+PFNEGLQUERYDEVICEATTRIBEXTPROC __eglewQueryDeviceAttribEXT = NULL;
+PFNEGLQUERYDEVICESTRINGEXTPROC __eglewQueryDeviceStringEXT = NULL;
+PFNEGLQUERYDISPLAYATTRIBEXTPROC __eglewQueryDisplayAttribEXT = NULL;
+
+PFNEGLGETOUTPUTLAYERSEXTPROC __eglewGetOutputLayersEXT = NULL;
+PFNEGLGETOUTPUTPORTSEXTPROC __eglewGetOutputPortsEXT = NULL;
+PFNEGLOUTPUTLAYERATTRIBEXTPROC __eglewOutputLayerAttribEXT = NULL;
+PFNEGLOUTPUTPORTATTRIBEXTPROC __eglewOutputPortAttribEXT = NULL;
+PFNEGLQUERYOUTPUTLAYERATTRIBEXTPROC __eglewQueryOutputLayerAttribEXT = NULL;
+PFNEGLQUERYOUTPUTLAYERSTRINGEXTPROC __eglewQueryOutputLayerStringEXT = NULL;
+PFNEGLQUERYOUTPUTPORTATTRIBEXTPROC __eglewQueryOutputPortAttribEXT = NULL;
+PFNEGLQUERYOUTPUTPORTSTRINGEXTPROC __eglewQueryOutputPortStringEXT = NULL;
+
+PFNEGLCREATEPLATFORMPIXMAPSURFACEEXTPROC __eglewCreatePlatformPixmapSurfaceEXT = NULL;
+PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC __eglewCreatePlatformWindowSurfaceEXT = NULL;
+PFNEGLGETPLATFORMDISPLAYEXTPROC __eglewGetPlatformDisplayEXT = NULL;
+
+PFNEGLSTREAMCONSUMEROUTPUTEXTPROC __eglewStreamConsumerOutputEXT = NULL;
+
+PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC __eglewSwapBuffersWithDamageEXT = NULL;
+
+PFNEGLCREATEPIXMAPSURFACEHIPROC __eglewCreatePixmapSurfaceHI = NULL;
+
+PFNEGLCREATESYNC64KHRPROC __eglewCreateSync64KHR = NULL;
+
+PFNEGLDEBUGMESSAGECONTROLKHRPROC __eglewDebugMessageControlKHR = NULL;
+PFNEGLLABELOBJECTKHRPROC __eglewLabelObjectKHR = NULL;
+PFNEGLQUERYDEBUGKHRPROC __eglewQueryDebugKHR = NULL;
+
+PFNEGLCREATEIMAGEKHRPROC __eglewCreateImageKHR = NULL;
+PFNEGLDESTROYIMAGEKHRPROC __eglewDestroyImageKHR = NULL;
+
+PFNEGLLOCKSURFACEKHRPROC __eglewLockSurfaceKHR = NULL;
+PFNEGLUNLOCKSURFACEKHRPROC __eglewUnlockSurfaceKHR = NULL;
+
+PFNEGLQUERYSURFACE64KHRPROC __eglewQuerySurface64KHR = NULL;
+
+PFNEGLSETDAMAGEREGIONKHRPROC __eglewSetDamageRegionKHR = NULL;
+
+PFNEGLCLIENTWAITSYNCKHRPROC __eglewClientWaitSyncKHR = NULL;
+PFNEGLCREATESYNCKHRPROC __eglewCreateSyncKHR = NULL;
+PFNEGLDESTROYSYNCKHRPROC __eglewDestroySyncKHR = NULL;
+PFNEGLGETSYNCATTRIBKHRPROC __eglewGetSyncAttribKHR = NULL;
+PFNEGLSIGNALSYNCKHRPROC __eglewSignalSyncKHR = NULL;
+
+PFNEGLCREATESTREAMKHRPROC __eglewCreateStreamKHR = NULL;
+PFNEGLDESTROYSTREAMKHRPROC __eglewDestroyStreamKHR = NULL;
+PFNEGLQUERYSTREAMKHRPROC __eglewQueryStreamKHR = NULL;
+PFNEGLQUERYSTREAMU64KHRPROC __eglewQueryStreamu64KHR = NULL;
+PFNEGLSTREAMATTRIBKHRPROC __eglewStreamAttribKHR = NULL;
+
+PFNEGLSTREAMCONSUMERACQUIREKHRPROC __eglewStreamConsumerAcquireKHR = NULL;
+PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALKHRPROC __eglewStreamConsumerGLTextureExternalKHR = NULL;
+PFNEGLSTREAMCONSUMERRELEASEKHRPROC __eglewStreamConsumerReleaseKHR = NULL;
+
+PFNEGLCREATESTREAMFROMFILEDESCRIPTORKHRPROC __eglewCreateStreamFromFileDescriptorKHR = NULL;
+PFNEGLGETSTREAMFILEDESCRIPTORKHRPROC __eglewGetStreamFileDescriptorKHR = NULL;
+
+PFNEGLQUERYSTREAMTIMEKHRPROC __eglewQueryStreamTimeKHR = NULL;
+
+PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC __eglewCreateStreamProducerSurfaceKHR = NULL;
+
+PFNEGLSWAPBUFFERSWITHDAMAGEKHRPROC __eglewSwapBuffersWithDamageKHR = NULL;
+
+PFNEGLWAITSYNCKHRPROC __eglewWaitSyncKHR = NULL;
+
+PFNEGLCREATEDRMIMAGEMESAPROC __eglewCreateDRMImageMESA = NULL;
+PFNEGLEXPORTDRMIMAGEMESAPROC __eglewExportDRMImageMESA = NULL;
+
+PFNEGLEXPORTDMABUFIMAGEMESAPROC __eglewExportDMABUFImageMESA = NULL;
+PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC __eglewExportDMABUFImageQueryMESA = NULL;
+
+PFNEGLSWAPBUFFERSREGIONNOKPROC __eglewSwapBuffersRegionNOK = NULL;
+
+PFNEGLSWAPBUFFERSREGION2NOKPROC __eglewSwapBuffersRegion2NOK = NULL;
+
+PFNEGLQUERYNATIVEDISPLAYNVPROC __eglewQueryNativeDisplayNV = NULL;
+PFNEGLQUERYNATIVEPIXMAPNVPROC __eglewQueryNativePixmapNV = NULL;
+PFNEGLQUERYNATIVEWINDOWNVPROC __eglewQueryNativeWindowNV = NULL;
+
+PFNEGLPOSTSUBBUFFERNVPROC __eglewPostSubBufferNV = NULL;
+
+PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALATTRIBSNVPROC __eglewStreamConsumerGLTextureExternalAttribsNV = NULL;
+
+PFNEGLQUERYDISPLAYATTRIBNVPROC __eglewQueryDisplayAttribNV = NULL;
+PFNEGLQUERYSTREAMMETADATANVPROC __eglewQueryStreamMetadataNV = NULL;
+PFNEGLSETSTREAMMETADATANVPROC __eglewSetStreamMetadataNV = NULL;
+
+PFNEGLCREATESTREAMSYNCNVPROC __eglewCreateStreamSyncNV = NULL;
+
+PFNEGLCLIENTWAITSYNCNVPROC __eglewClientWaitSyncNV = NULL;
+PFNEGLCREATEFENCESYNCNVPROC __eglewCreateFenceSyncNV = NULL;
+PFNEGLDESTROYSYNCNVPROC __eglewDestroySyncNV = NULL;
+PFNEGLFENCENVPROC __eglewFenceNV = NULL;
+PFNEGLGETSYNCATTRIBNVPROC __eglewGetSyncAttribNV = NULL;
+PFNEGLSIGNALSYNCNVPROC __eglewSignalSyncNV = NULL;
+
+PFNEGLGETSYSTEMTIMEFREQUENCYNVPROC __eglewGetSystemTimeFrequencyNV = NULL;
+PFNEGLGETSYSTEMTIMENVPROC __eglewGetSystemTimeNV = NULL;
+GLboolean __EGLEW_VERSION_1_0 = GL_FALSE;
+GLboolean __EGLEW_VERSION_1_1 = GL_FALSE;
+GLboolean __EGLEW_VERSION_1_2 = GL_FALSE;
+GLboolean __EGLEW_VERSION_1_3 = GL_FALSE;
+GLboolean __EGLEW_VERSION_1_4 = GL_FALSE;
+GLboolean __EGLEW_VERSION_1_5 = GL_FALSE;
+GLboolean __EGLEW_ANDROID_blob_cache = GL_FALSE;
+GLboolean __EGLEW_ANDROID_create_native_client_buffer = GL_FALSE;
+GLboolean __EGLEW_ANDROID_framebuffer_target = GL_FALSE;
+GLboolean __EGLEW_ANDROID_front_buffer_auto_refresh = GL_FALSE;
+GLboolean __EGLEW_ANDROID_image_native_buffer = GL_FALSE;
+GLboolean __EGLEW_ANDROID_native_fence_sync = GL_FALSE;
+GLboolean __EGLEW_ANDROID_presentation_time = GL_FALSE;
+GLboolean __EGLEW_ANDROID_recordable = GL_FALSE;
+GLboolean __EGLEW_ANGLE_d3d_share_handle_client_buffer = GL_FALSE;
+GLboolean __EGLEW_ANGLE_device_d3d = GL_FALSE;
+GLboolean __EGLEW_ANGLE_query_surface_pointer = GL_FALSE;
+GLboolean __EGLEW_ANGLE_surface_d3d_texture_2d_share_handle = GL_FALSE;
+GLboolean __EGLEW_ANGLE_window_fixed_size = GL_FALSE;
+GLboolean __EGLEW_ARM_pixmap_multisample_discard = GL_FALSE;
+GLboolean __EGLEW_EXT_buffer_age = GL_FALSE;
+GLboolean __EGLEW_EXT_client_extensions = GL_FALSE;
+GLboolean __EGLEW_EXT_create_context_robustness = GL_FALSE;
+GLboolean __EGLEW_EXT_device_base = GL_FALSE;
+GLboolean __EGLEW_EXT_device_drm = GL_FALSE;
+GLboolean __EGLEW_EXT_device_enumeration = GL_FALSE;
+GLboolean __EGLEW_EXT_device_openwf = GL_FALSE;
+GLboolean __EGLEW_EXT_device_query = GL_FALSE;
+GLboolean __EGLEW_EXT_image_dma_buf_import = GL_FALSE;
+GLboolean __EGLEW_EXT_multiview_window = GL_FALSE;
+GLboolean __EGLEW_EXT_output_base = GL_FALSE;
+GLboolean __EGLEW_EXT_output_drm = GL_FALSE;
+GLboolean __EGLEW_EXT_output_openwf = GL_FALSE;
+GLboolean __EGLEW_EXT_platform_base = GL_FALSE;
+GLboolean __EGLEW_EXT_platform_device = GL_FALSE;
+GLboolean __EGLEW_EXT_platform_wayland = GL_FALSE;
+GLboolean __EGLEW_EXT_platform_x11 = GL_FALSE;
+GLboolean __EGLEW_EXT_protected_content = GL_FALSE;
+GLboolean __EGLEW_EXT_protected_surface = GL_FALSE;
+GLboolean __EGLEW_EXT_stream_consumer_egloutput = GL_FALSE;
+GLboolean __EGLEW_EXT_swap_buffers_with_damage = GL_FALSE;
+GLboolean __EGLEW_EXT_yuv_surface = GL_FALSE;
+GLboolean __EGLEW_HI_clientpixmap = GL_FALSE;
+GLboolean __EGLEW_HI_colorformats = GL_FALSE;
+GLboolean __EGLEW_IMG_context_priority = GL_FALSE;
+GLboolean __EGLEW_IMG_image_plane_attribs = GL_FALSE;
+GLboolean __EGLEW_KHR_cl_event = GL_FALSE;
+GLboolean __EGLEW_KHR_cl_event2 = GL_FALSE;
+GLboolean __EGLEW_KHR_client_get_all_proc_addresses = GL_FALSE;
+GLboolean __EGLEW_KHR_config_attribs = GL_FALSE;
+GLboolean __EGLEW_KHR_create_context = GL_FALSE;
+GLboolean __EGLEW_KHR_create_context_no_error = GL_FALSE;
+GLboolean __EGLEW_KHR_debug = GL_FALSE;
+GLboolean __EGLEW_KHR_fence_sync = GL_FALSE;
+GLboolean __EGLEW_KHR_get_all_proc_addresses = GL_FALSE;
+GLboolean __EGLEW_KHR_gl_colorspace = GL_FALSE;
+GLboolean __EGLEW_KHR_gl_renderbuffer_image = GL_FALSE;
+GLboolean __EGLEW_KHR_gl_texture_2D_image = GL_FALSE;
+GLboolean __EGLEW_KHR_gl_texture_3D_image = GL_FALSE;
+GLboolean __EGLEW_KHR_gl_texture_cubemap_image = GL_FALSE;
+GLboolean __EGLEW_KHR_image = GL_FALSE;
+GLboolean __EGLEW_KHR_image_base = GL_FALSE;
+GLboolean __EGLEW_KHR_image_pixmap = GL_FALSE;
+GLboolean __EGLEW_KHR_lock_surface = GL_FALSE;
+GLboolean __EGLEW_KHR_lock_surface2 = GL_FALSE;
+GLboolean __EGLEW_KHR_lock_surface3 = GL_FALSE;
+GLboolean __EGLEW_KHR_mutable_render_buffer = GL_FALSE;
+GLboolean __EGLEW_KHR_partial_update = GL_FALSE;
+GLboolean __EGLEW_KHR_platform_android = GL_FALSE;
+GLboolean __EGLEW_KHR_platform_gbm = GL_FALSE;
+GLboolean __EGLEW_KHR_platform_wayland = GL_FALSE;
+GLboolean __EGLEW_KHR_platform_x11 = GL_FALSE;
+GLboolean __EGLEW_KHR_reusable_sync = GL_FALSE;
+GLboolean __EGLEW_KHR_stream = GL_FALSE;
+GLboolean __EGLEW_KHR_stream_consumer_gltexture = GL_FALSE;
+GLboolean __EGLEW_KHR_stream_cross_process_fd = GL_FALSE;
+GLboolean __EGLEW_KHR_stream_fifo = GL_FALSE;
+GLboolean __EGLEW_KHR_stream_producer_aldatalocator = GL_FALSE;
+GLboolean __EGLEW_KHR_stream_producer_eglsurface = GL_FALSE;
+GLboolean __EGLEW_KHR_surfaceless_context = GL_FALSE;
+GLboolean __EGLEW_KHR_swap_buffers_with_damage = GL_FALSE;
+GLboolean __EGLEW_KHR_vg_parent_image = GL_FALSE;
+GLboolean __EGLEW_KHR_wait_sync = GL_FALSE;
+GLboolean __EGLEW_MESA_drm_image = GL_FALSE;
+GLboolean __EGLEW_MESA_image_dma_buf_export = GL_FALSE;
+GLboolean __EGLEW_MESA_platform_gbm = GL_FALSE;
+GLboolean __EGLEW_NOK_swap_region = GL_FALSE;
+GLboolean __EGLEW_NOK_swap_region2 = GL_FALSE;
+GLboolean __EGLEW_NOK_texture_from_pixmap = GL_FALSE;
+GLboolean __EGLEW_NV_3dvision_surface = GL_FALSE;
+GLboolean __EGLEW_NV_coverage_sample = GL_FALSE;
+GLboolean __EGLEW_NV_coverage_sample_resolve = GL_FALSE;
+GLboolean __EGLEW_NV_cuda_event = GL_FALSE;
+GLboolean __EGLEW_NV_depth_nonlinear = GL_FALSE;
+GLboolean __EGLEW_NV_device_cuda = GL_FALSE;
+GLboolean __EGLEW_NV_native_query = GL_FALSE;
+GLboolean __EGLEW_NV_post_convert_rounding = GL_FALSE;
+GLboolean __EGLEW_NV_post_sub_buffer = GL_FALSE;
+GLboolean __EGLEW_NV_robustness_video_memory_purge = GL_FALSE;
+GLboolean __EGLEW_NV_stream_consumer_gltexture_yuv = GL_FALSE;
+GLboolean __EGLEW_NV_stream_metadata = GL_FALSE;
+GLboolean __EGLEW_NV_stream_sync = GL_FALSE;
+GLboolean __EGLEW_NV_sync = GL_FALSE;
+GLboolean __EGLEW_NV_system_time = GL_FALSE;
+GLboolean __EGLEW_TIZEN_image_native_buffer = GL_FALSE;
+GLboolean __EGLEW_TIZEN_image_native_surface = GL_FALSE;
+#ifdef EGL_VERSION_1_0
+
+static GLboolean _glewInit_EGL_VERSION_1_0 ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglChooseConfig = (PFNEGLCHOOSECONFIGPROC)glewGetProcAddress((const GLubyte*)"eglChooseConfig")) == NULL) || r;
+ r = ((eglCopyBuffers = (PFNEGLCOPYBUFFERSPROC)glewGetProcAddress((const GLubyte*)"eglCopyBuffers")) == NULL) || r;
+ r = ((eglCreateContext = (PFNEGLCREATECONTEXTPROC)glewGetProcAddress((const GLubyte*)"eglCreateContext")) == NULL) || r;
+ r = ((eglCreatePbufferSurface = (PFNEGLCREATEPBUFFERSURFACEPROC)glewGetProcAddress((const GLubyte*)"eglCreatePbufferSurface")) == NULL) || r;
+ r = ((eglCreatePixmapSurface = (PFNEGLCREATEPIXMAPSURFACEPROC)glewGetProcAddress((const GLubyte*)"eglCreatePixmapSurface")) == NULL) || r;
+ r = ((eglCreateWindowSurface = (PFNEGLCREATEWINDOWSURFACEPROC)glewGetProcAddress((const GLubyte*)"eglCreateWindowSurface")) == NULL) || r;
+ r = ((eglDestroyContext = (PFNEGLDESTROYCONTEXTPROC)glewGetProcAddress((const GLubyte*)"eglDestroyContext")) == NULL) || r;
+ r = ((eglDestroySurface = (PFNEGLDESTROYSURFACEPROC)glewGetProcAddress((const GLubyte*)"eglDestroySurface")) == NULL) || r;
+ r = ((eglGetConfigAttrib = (PFNEGLGETCONFIGATTRIBPROC)glewGetProcAddress((const GLubyte*)"eglGetConfigAttrib")) == NULL) || r;
+ r = ((eglGetConfigs = (PFNEGLGETCONFIGSPROC)glewGetProcAddress((const GLubyte*)"eglGetConfigs")) == NULL) || r;
+ r = ((eglGetCurrentDisplay = (PFNEGLGETCURRENTDISPLAYPROC)glewGetProcAddress((const GLubyte*)"eglGetCurrentDisplay")) == NULL) || r;
+ r = ((eglGetCurrentSurface = (PFNEGLGETCURRENTSURFACEPROC)glewGetProcAddress((const GLubyte*)"eglGetCurrentSurface")) == NULL) || r;
+ r = ((eglGetDisplay = (PFNEGLGETDISPLAYPROC)glewGetProcAddress((const GLubyte*)"eglGetDisplay")) == NULL) || r;
+ r = ((eglGetError = (PFNEGLGETERRORPROC)glewGetProcAddress((const GLubyte*)"eglGetError")) == NULL) || r;
+ r = ((eglInitialize = (PFNEGLINITIALIZEPROC)glewGetProcAddress((const GLubyte*)"eglInitialize")) == NULL) || r;
+ r = ((eglMakeCurrent = (PFNEGLMAKECURRENTPROC)glewGetProcAddress((const GLubyte*)"eglMakeCurrent")) == NULL) || r;
+ r = ((eglQueryContext = (PFNEGLQUERYCONTEXTPROC)glewGetProcAddress((const GLubyte*)"eglQueryContext")) == NULL) || r;
+ r = ((eglQueryString = (PFNEGLQUERYSTRINGPROC)glewGetProcAddress((const GLubyte*)"eglQueryString")) == NULL) || r;
+ r = ((eglQuerySurface = (PFNEGLQUERYSURFACEPROC)glewGetProcAddress((const GLubyte*)"eglQuerySurface")) == NULL) || r;
+ r = ((eglSwapBuffers = (PFNEGLSWAPBUFFERSPROC)glewGetProcAddress((const GLubyte*)"eglSwapBuffers")) == NULL) || r;
+ r = ((eglTerminate = (PFNEGLTERMINATEPROC)glewGetProcAddress((const GLubyte*)"eglTerminate")) == NULL) || r;
+ r = ((eglWaitGL = (PFNEGLWAITGLPROC)glewGetProcAddress((const GLubyte*)"eglWaitGL")) == NULL) || r;
+ r = ((eglWaitNative = (PFNEGLWAITNATIVEPROC)glewGetProcAddress((const GLubyte*)"eglWaitNative")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_VERSION_1_0 */
+
+#ifdef EGL_VERSION_1_1
+
+static GLboolean _glewInit_EGL_VERSION_1_1 ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglBindTexImage = (PFNEGLBINDTEXIMAGEPROC)glewGetProcAddress((const GLubyte*)"eglBindTexImage")) == NULL) || r;
+ r = ((eglReleaseTexImage = (PFNEGLRELEASETEXIMAGEPROC)glewGetProcAddress((const GLubyte*)"eglReleaseTexImage")) == NULL) || r;
+ r = ((eglSurfaceAttrib = (PFNEGLSURFACEATTRIBPROC)glewGetProcAddress((const GLubyte*)"eglSurfaceAttrib")) == NULL) || r;
+ r = ((eglSwapInterval = (PFNEGLSWAPINTERVALPROC)glewGetProcAddress((const GLubyte*)"eglSwapInterval")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_VERSION_1_1 */
+
+#ifdef EGL_VERSION_1_2
+
+static GLboolean _glewInit_EGL_VERSION_1_2 ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglBindAPI = (PFNEGLBINDAPIPROC)glewGetProcAddress((const GLubyte*)"eglBindAPI")) == NULL) || r;
+ r = ((eglCreatePbufferFromClientBuffer = (PFNEGLCREATEPBUFFERFROMCLIENTBUFFERPROC)glewGetProcAddress((const GLubyte*)"eglCreatePbufferFromClientBuffer")) == NULL) || r;
+ r = ((eglQueryAPI = (PFNEGLQUERYAPIPROC)glewGetProcAddress((const GLubyte*)"eglQueryAPI")) == NULL) || r;
+ r = ((eglReleaseThread = (PFNEGLRELEASETHREADPROC)glewGetProcAddress((const GLubyte*)"eglReleaseThread")) == NULL) || r;
+ r = ((eglWaitClient = (PFNEGLWAITCLIENTPROC)glewGetProcAddress((const GLubyte*)"eglWaitClient")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_VERSION_1_2 */
+
+#ifdef EGL_VERSION_1_4
+
+static GLboolean _glewInit_EGL_VERSION_1_4 ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglGetCurrentContext = (PFNEGLGETCURRENTCONTEXTPROC)glewGetProcAddress((const GLubyte*)"eglGetCurrentContext")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_VERSION_1_4 */
+
+#ifdef EGL_VERSION_1_5
+
+static GLboolean _glewInit_EGL_VERSION_1_5 ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglClientWaitSync = (PFNEGLCLIENTWAITSYNCPROC)glewGetProcAddress((const GLubyte*)"eglClientWaitSync")) == NULL) || r;
+ r = ((eglCreateImage = (PFNEGLCREATEIMAGEPROC)glewGetProcAddress((const GLubyte*)"eglCreateImage")) == NULL) || r;
+ r = ((eglCreatePlatformPixmapSurface = (PFNEGLCREATEPLATFORMPIXMAPSURFACEPROC)glewGetProcAddress((const GLubyte*)"eglCreatePlatformPixmapSurface")) == NULL) || r;
+ r = ((eglCreatePlatformWindowSurface = (PFNEGLCREATEPLATFORMWINDOWSURFACEPROC)glewGetProcAddress((const GLubyte*)"eglCreatePlatformWindowSurface")) == NULL) || r;
+ r = ((eglCreateSync = (PFNEGLCREATESYNCPROC)glewGetProcAddress((const GLubyte*)"eglCreateSync")) == NULL) || r;
+ r = ((eglDestroyImage = (PFNEGLDESTROYIMAGEPROC)glewGetProcAddress((const GLubyte*)"eglDestroyImage")) == NULL) || r;
+ r = ((eglDestroySync = (PFNEGLDESTROYSYNCPROC)glewGetProcAddress((const GLubyte*)"eglDestroySync")) == NULL) || r;
+ r = ((eglGetPlatformDisplay = (PFNEGLGETPLATFORMDISPLAYPROC)glewGetProcAddress((const GLubyte*)"eglGetPlatformDisplay")) == NULL) || r;
+ r = ((eglGetSyncAttrib = (PFNEGLGETSYNCATTRIBPROC)glewGetProcAddress((const GLubyte*)"eglGetSyncAttrib")) == NULL) || r;
+ r = ((eglWaitSync = (PFNEGLWAITSYNCPROC)glewGetProcAddress((const GLubyte*)"eglWaitSync")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_VERSION_1_5 */
+
+#ifdef EGL_ANDROID_blob_cache
+
+static GLboolean _glewInit_EGL_ANDROID_blob_cache ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglSetBlobCacheFuncsANDROID = (PFNEGLSETBLOBCACHEFUNCSANDROIDPROC)glewGetProcAddress((const GLubyte*)"eglSetBlobCacheFuncsANDROID")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_ANDROID_blob_cache */
+
+#ifdef EGL_ANDROID_create_native_client_buffer
+
+static GLboolean _glewInit_EGL_ANDROID_create_native_client_buffer ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglCreateNativeClientBufferANDROID = (PFNEGLCREATENATIVECLIENTBUFFERANDROIDPROC)glewGetProcAddress((const GLubyte*)"eglCreateNativeClientBufferANDROID")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_ANDROID_create_native_client_buffer */
+
+#ifdef EGL_ANDROID_native_fence_sync
+
+static GLboolean _glewInit_EGL_ANDROID_native_fence_sync ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglDupNativeFenceFDANDROID = (PFNEGLDUPNATIVEFENCEFDANDROIDPROC)glewGetProcAddress((const GLubyte*)"eglDupNativeFenceFDANDROID")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_ANDROID_native_fence_sync */
+
+#ifdef EGL_ANDROID_presentation_time
+
+static GLboolean _glewInit_EGL_ANDROID_presentation_time ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglPresentationTimeANDROID = (PFNEGLPRESENTATIONTIMEANDROIDPROC)glewGetProcAddress((const GLubyte*)"eglPresentationTimeANDROID")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_ANDROID_presentation_time */
+
+#ifdef EGL_ANGLE_query_surface_pointer
+
+static GLboolean _glewInit_EGL_ANGLE_query_surface_pointer ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglQuerySurfacePointerANGLE = (PFNEGLQUERYSURFACEPOINTERANGLEPROC)glewGetProcAddress((const GLubyte*)"eglQuerySurfacePointerANGLE")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_ANGLE_query_surface_pointer */
+
+#ifdef EGL_EXT_device_enumeration
+
+static GLboolean _glewInit_EGL_EXT_device_enumeration ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglQueryDevicesEXT = (PFNEGLQUERYDEVICESEXTPROC)glewGetProcAddress((const GLubyte*)"eglQueryDevicesEXT")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_EXT_device_enumeration */
+
+#ifdef EGL_EXT_device_query
+
+static GLboolean _glewInit_EGL_EXT_device_query ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglQueryDeviceAttribEXT = (PFNEGLQUERYDEVICEATTRIBEXTPROC)glewGetProcAddress((const GLubyte*)"eglQueryDeviceAttribEXT")) == NULL) || r;
+ r = ((eglQueryDeviceStringEXT = (PFNEGLQUERYDEVICESTRINGEXTPROC)glewGetProcAddress((const GLubyte*)"eglQueryDeviceStringEXT")) == NULL) || r;
+ r = ((eglQueryDisplayAttribEXT = (PFNEGLQUERYDISPLAYATTRIBEXTPROC)glewGetProcAddress((const GLubyte*)"eglQueryDisplayAttribEXT")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_EXT_device_query */
+
+#ifdef EGL_EXT_output_base
+
+static GLboolean _glewInit_EGL_EXT_output_base ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglGetOutputLayersEXT = (PFNEGLGETOUTPUTLAYERSEXTPROC)glewGetProcAddress((const GLubyte*)"eglGetOutputLayersEXT")) == NULL) || r;
+ r = ((eglGetOutputPortsEXT = (PFNEGLGETOUTPUTPORTSEXTPROC)glewGetProcAddress((const GLubyte*)"eglGetOutputPortsEXT")) == NULL) || r;
+ r = ((eglOutputLayerAttribEXT = (PFNEGLOUTPUTLAYERATTRIBEXTPROC)glewGetProcAddress((const GLubyte*)"eglOutputLayerAttribEXT")) == NULL) || r;
+ r = ((eglOutputPortAttribEXT = (PFNEGLOUTPUTPORTATTRIBEXTPROC)glewGetProcAddress((const GLubyte*)"eglOutputPortAttribEXT")) == NULL) || r;
+ r = ((eglQueryOutputLayerAttribEXT = (PFNEGLQUERYOUTPUTLAYERATTRIBEXTPROC)glewGetProcAddress((const GLubyte*)"eglQueryOutputLayerAttribEXT")) == NULL) || r;
+ r = ((eglQueryOutputLayerStringEXT = (PFNEGLQUERYOUTPUTLAYERSTRINGEXTPROC)glewGetProcAddress((const GLubyte*)"eglQueryOutputLayerStringEXT")) == NULL) || r;
+ r = ((eglQueryOutputPortAttribEXT = (PFNEGLQUERYOUTPUTPORTATTRIBEXTPROC)glewGetProcAddress((const GLubyte*)"eglQueryOutputPortAttribEXT")) == NULL) || r;
+ r = ((eglQueryOutputPortStringEXT = (PFNEGLQUERYOUTPUTPORTSTRINGEXTPROC)glewGetProcAddress((const GLubyte*)"eglQueryOutputPortStringEXT")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_EXT_output_base */
+
+#ifdef EGL_EXT_platform_base
+
+static GLboolean _glewInit_EGL_EXT_platform_base ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglCreatePlatformPixmapSurfaceEXT = (PFNEGLCREATEPLATFORMPIXMAPSURFACEEXTPROC)glewGetProcAddress((const GLubyte*)"eglCreatePlatformPixmapSurfaceEXT")) == NULL) || r;
+ r = ((eglCreatePlatformWindowSurfaceEXT = (PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC)glewGetProcAddress((const GLubyte*)"eglCreatePlatformWindowSurfaceEXT")) == NULL) || r;
+ r = ((eglGetPlatformDisplayEXT = (PFNEGLGETPLATFORMDISPLAYEXTPROC)glewGetProcAddress((const GLubyte*)"eglGetPlatformDisplayEXT")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_EXT_platform_base */
+
+#ifdef EGL_EXT_stream_consumer_egloutput
+
+static GLboolean _glewInit_EGL_EXT_stream_consumer_egloutput ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglStreamConsumerOutputEXT = (PFNEGLSTREAMCONSUMEROUTPUTEXTPROC)glewGetProcAddress((const GLubyte*)"eglStreamConsumerOutputEXT")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_EXT_stream_consumer_egloutput */
+
+#ifdef EGL_EXT_swap_buffers_with_damage
+
+static GLboolean _glewInit_EGL_EXT_swap_buffers_with_damage ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglSwapBuffersWithDamageEXT = (PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC)glewGetProcAddress((const GLubyte*)"eglSwapBuffersWithDamageEXT")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_EXT_swap_buffers_with_damage */
+
+#ifdef EGL_HI_clientpixmap
+
+static GLboolean _glewInit_EGL_HI_clientpixmap ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglCreatePixmapSurfaceHI = (PFNEGLCREATEPIXMAPSURFACEHIPROC)glewGetProcAddress((const GLubyte*)"eglCreatePixmapSurfaceHI")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_HI_clientpixmap */
+
+#ifdef EGL_KHR_cl_event2
+
+static GLboolean _glewInit_EGL_KHR_cl_event2 ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglCreateSync64KHR = (PFNEGLCREATESYNC64KHRPROC)glewGetProcAddress((const GLubyte*)"eglCreateSync64KHR")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_KHR_cl_event2 */
+
+#ifdef EGL_KHR_debug
+
+static GLboolean _glewInit_EGL_KHR_debug ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglDebugMessageControlKHR = (PFNEGLDEBUGMESSAGECONTROLKHRPROC)glewGetProcAddress((const GLubyte*)"eglDebugMessageControlKHR")) == NULL) || r;
+ r = ((eglLabelObjectKHR = (PFNEGLLABELOBJECTKHRPROC)glewGetProcAddress((const GLubyte*)"eglLabelObjectKHR")) == NULL) || r;
+ r = ((eglQueryDebugKHR = (PFNEGLQUERYDEBUGKHRPROC)glewGetProcAddress((const GLubyte*)"eglQueryDebugKHR")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_KHR_debug */
+
+#ifdef EGL_KHR_image
+
+static GLboolean _glewInit_EGL_KHR_image ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglCreateImageKHR = (PFNEGLCREATEIMAGEKHRPROC)glewGetProcAddress((const GLubyte*)"eglCreateImageKHR")) == NULL) || r;
+ r = ((eglDestroyImageKHR = (PFNEGLDESTROYIMAGEKHRPROC)glewGetProcAddress((const GLubyte*)"eglDestroyImageKHR")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_KHR_image */
+
+#ifdef EGL_KHR_lock_surface
+
+static GLboolean _glewInit_EGL_KHR_lock_surface ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglLockSurfaceKHR = (PFNEGLLOCKSURFACEKHRPROC)glewGetProcAddress((const GLubyte*)"eglLockSurfaceKHR")) == NULL) || r;
+ r = ((eglUnlockSurfaceKHR = (PFNEGLUNLOCKSURFACEKHRPROC)glewGetProcAddress((const GLubyte*)"eglUnlockSurfaceKHR")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_KHR_lock_surface */
+
+#ifdef EGL_KHR_lock_surface3
+
+static GLboolean _glewInit_EGL_KHR_lock_surface3 ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglQuerySurface64KHR = (PFNEGLQUERYSURFACE64KHRPROC)glewGetProcAddress((const GLubyte*)"eglQuerySurface64KHR")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_KHR_lock_surface3 */
+
+#ifdef EGL_KHR_partial_update
+
+static GLboolean _glewInit_EGL_KHR_partial_update ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglSetDamageRegionKHR = (PFNEGLSETDAMAGEREGIONKHRPROC)glewGetProcAddress((const GLubyte*)"eglSetDamageRegionKHR")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_KHR_partial_update */
+
+#ifdef EGL_KHR_reusable_sync
+
+static GLboolean _glewInit_EGL_KHR_reusable_sync ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglClientWaitSyncKHR = (PFNEGLCLIENTWAITSYNCKHRPROC)glewGetProcAddress((const GLubyte*)"eglClientWaitSyncKHR")) == NULL) || r;
+ r = ((eglCreateSyncKHR = (PFNEGLCREATESYNCKHRPROC)glewGetProcAddress((const GLubyte*)"eglCreateSyncKHR")) == NULL) || r;
+ r = ((eglDestroySyncKHR = (PFNEGLDESTROYSYNCKHRPROC)glewGetProcAddress((const GLubyte*)"eglDestroySyncKHR")) == NULL) || r;
+ r = ((eglGetSyncAttribKHR = (PFNEGLGETSYNCATTRIBKHRPROC)glewGetProcAddress((const GLubyte*)"eglGetSyncAttribKHR")) == NULL) || r;
+ r = ((eglSignalSyncKHR = (PFNEGLSIGNALSYNCKHRPROC)glewGetProcAddress((const GLubyte*)"eglSignalSyncKHR")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_KHR_reusable_sync */
+
+#ifdef EGL_KHR_stream
+
+static GLboolean _glewInit_EGL_KHR_stream ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglCreateStreamKHR = (PFNEGLCREATESTREAMKHRPROC)glewGetProcAddress((const GLubyte*)"eglCreateStreamKHR")) == NULL) || r;
+ r = ((eglDestroyStreamKHR = (PFNEGLDESTROYSTREAMKHRPROC)glewGetProcAddress((const GLubyte*)"eglDestroyStreamKHR")) == NULL) || r;
+ r = ((eglQueryStreamKHR = (PFNEGLQUERYSTREAMKHRPROC)glewGetProcAddress((const GLubyte*)"eglQueryStreamKHR")) == NULL) || r;
+ r = ((eglQueryStreamu64KHR = (PFNEGLQUERYSTREAMU64KHRPROC)glewGetProcAddress((const GLubyte*)"eglQueryStreamu64KHR")) == NULL) || r;
+ r = ((eglStreamAttribKHR = (PFNEGLSTREAMATTRIBKHRPROC)glewGetProcAddress((const GLubyte*)"eglStreamAttribKHR")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_KHR_stream */
+
+#ifdef EGL_KHR_stream_consumer_gltexture
+
+static GLboolean _glewInit_EGL_KHR_stream_consumer_gltexture ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglStreamConsumerAcquireKHR = (PFNEGLSTREAMCONSUMERACQUIREKHRPROC)glewGetProcAddress((const GLubyte*)"eglStreamConsumerAcquireKHR")) == NULL) || r;
+ r = ((eglStreamConsumerGLTextureExternalKHR = (PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALKHRPROC)glewGetProcAddress((const GLubyte*)"eglStreamConsumerGLTextureExternalKHR")) == NULL) || r;
+ r = ((eglStreamConsumerReleaseKHR = (PFNEGLSTREAMCONSUMERRELEASEKHRPROC)glewGetProcAddress((const GLubyte*)"eglStreamConsumerReleaseKHR")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_KHR_stream_consumer_gltexture */
+
+#ifdef EGL_KHR_stream_cross_process_fd
+
+static GLboolean _glewInit_EGL_KHR_stream_cross_process_fd ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglCreateStreamFromFileDescriptorKHR = (PFNEGLCREATESTREAMFROMFILEDESCRIPTORKHRPROC)glewGetProcAddress((const GLubyte*)"eglCreateStreamFromFileDescriptorKHR")) == NULL) || r;
+ r = ((eglGetStreamFileDescriptorKHR = (PFNEGLGETSTREAMFILEDESCRIPTORKHRPROC)glewGetProcAddress((const GLubyte*)"eglGetStreamFileDescriptorKHR")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_KHR_stream_cross_process_fd */
+
+#ifdef EGL_KHR_stream_fifo
+
+static GLboolean _glewInit_EGL_KHR_stream_fifo ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglQueryStreamTimeKHR = (PFNEGLQUERYSTREAMTIMEKHRPROC)glewGetProcAddress((const GLubyte*)"eglQueryStreamTimeKHR")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_KHR_stream_fifo */
+
+#ifdef EGL_KHR_stream_producer_eglsurface
+
+static GLboolean _glewInit_EGL_KHR_stream_producer_eglsurface ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglCreateStreamProducerSurfaceKHR = (PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC)glewGetProcAddress((const GLubyte*)"eglCreateStreamProducerSurfaceKHR")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_KHR_stream_producer_eglsurface */
+
+#ifdef EGL_KHR_swap_buffers_with_damage
+
+static GLboolean _glewInit_EGL_KHR_swap_buffers_with_damage ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglSwapBuffersWithDamageKHR = (PFNEGLSWAPBUFFERSWITHDAMAGEKHRPROC)glewGetProcAddress((const GLubyte*)"eglSwapBuffersWithDamageKHR")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_KHR_swap_buffers_with_damage */
+
+#ifdef EGL_KHR_wait_sync
+
+static GLboolean _glewInit_EGL_KHR_wait_sync ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglWaitSyncKHR = (PFNEGLWAITSYNCKHRPROC)glewGetProcAddress((const GLubyte*)"eglWaitSyncKHR")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_KHR_wait_sync */
+
+#ifdef EGL_MESA_drm_image
+
+static GLboolean _glewInit_EGL_MESA_drm_image ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglCreateDRMImageMESA = (PFNEGLCREATEDRMIMAGEMESAPROC)glewGetProcAddress((const GLubyte*)"eglCreateDRMImageMESA")) == NULL) || r;
+ r = ((eglExportDRMImageMESA = (PFNEGLEXPORTDRMIMAGEMESAPROC)glewGetProcAddress((const GLubyte*)"eglExportDRMImageMESA")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_MESA_drm_image */
+
+#ifdef EGL_MESA_image_dma_buf_export
+
+static GLboolean _glewInit_EGL_MESA_image_dma_buf_export ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglExportDMABUFImageMESA = (PFNEGLEXPORTDMABUFIMAGEMESAPROC)glewGetProcAddress((const GLubyte*)"eglExportDMABUFImageMESA")) == NULL) || r;
+ r = ((eglExportDMABUFImageQueryMESA = (PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC)glewGetProcAddress((const GLubyte*)"eglExportDMABUFImageQueryMESA")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_MESA_image_dma_buf_export */
+
+#ifdef EGL_NOK_swap_region
+
+static GLboolean _glewInit_EGL_NOK_swap_region ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglSwapBuffersRegionNOK = (PFNEGLSWAPBUFFERSREGIONNOKPROC)glewGetProcAddress((const GLubyte*)"eglSwapBuffersRegionNOK")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_NOK_swap_region */
+
+#ifdef EGL_NOK_swap_region2
+
+static GLboolean _glewInit_EGL_NOK_swap_region2 ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglSwapBuffersRegion2NOK = (PFNEGLSWAPBUFFERSREGION2NOKPROC)glewGetProcAddress((const GLubyte*)"eglSwapBuffersRegion2NOK")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_NOK_swap_region2 */
+
+#ifdef EGL_NV_native_query
+
+static GLboolean _glewInit_EGL_NV_native_query ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglQueryNativeDisplayNV = (PFNEGLQUERYNATIVEDISPLAYNVPROC)glewGetProcAddress((const GLubyte*)"eglQueryNativeDisplayNV")) == NULL) || r;
+ r = ((eglQueryNativePixmapNV = (PFNEGLQUERYNATIVEPIXMAPNVPROC)glewGetProcAddress((const GLubyte*)"eglQueryNativePixmapNV")) == NULL) || r;
+ r = ((eglQueryNativeWindowNV = (PFNEGLQUERYNATIVEWINDOWNVPROC)glewGetProcAddress((const GLubyte*)"eglQueryNativeWindowNV")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_NV_native_query */
+
+#ifdef EGL_NV_post_sub_buffer
+
+static GLboolean _glewInit_EGL_NV_post_sub_buffer ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglPostSubBufferNV = (PFNEGLPOSTSUBBUFFERNVPROC)glewGetProcAddress((const GLubyte*)"eglPostSubBufferNV")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_NV_post_sub_buffer */
+
+#ifdef EGL_NV_stream_consumer_gltexture_yuv
+
+static GLboolean _glewInit_EGL_NV_stream_consumer_gltexture_yuv ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglStreamConsumerGLTextureExternalAttribsNV = (PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALATTRIBSNVPROC)glewGetProcAddress((const GLubyte*)"eglStreamConsumerGLTextureExternalAttribsNV")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_NV_stream_consumer_gltexture_yuv */
+
+#ifdef EGL_NV_stream_metadata
+
+static GLboolean _glewInit_EGL_NV_stream_metadata ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglQueryDisplayAttribNV = (PFNEGLQUERYDISPLAYATTRIBNVPROC)glewGetProcAddress((const GLubyte*)"eglQueryDisplayAttribNV")) == NULL) || r;
+ r = ((eglQueryStreamMetadataNV = (PFNEGLQUERYSTREAMMETADATANVPROC)glewGetProcAddress((const GLubyte*)"eglQueryStreamMetadataNV")) == NULL) || r;
+ r = ((eglSetStreamMetadataNV = (PFNEGLSETSTREAMMETADATANVPROC)glewGetProcAddress((const GLubyte*)"eglSetStreamMetadataNV")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_NV_stream_metadata */
+
+#ifdef EGL_NV_stream_sync
+
+static GLboolean _glewInit_EGL_NV_stream_sync ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglCreateStreamSyncNV = (PFNEGLCREATESTREAMSYNCNVPROC)glewGetProcAddress((const GLubyte*)"eglCreateStreamSyncNV")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_NV_stream_sync */
+
+#ifdef EGL_NV_sync
+
+static GLboolean _glewInit_EGL_NV_sync ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglClientWaitSyncNV = (PFNEGLCLIENTWAITSYNCNVPROC)glewGetProcAddress((const GLubyte*)"eglClientWaitSyncNV")) == NULL) || r;
+ r = ((eglCreateFenceSyncNV = (PFNEGLCREATEFENCESYNCNVPROC)glewGetProcAddress((const GLubyte*)"eglCreateFenceSyncNV")) == NULL) || r;
+ r = ((eglDestroySyncNV = (PFNEGLDESTROYSYNCNVPROC)glewGetProcAddress((const GLubyte*)"eglDestroySyncNV")) == NULL) || r;
+ r = ((eglFenceNV = (PFNEGLFENCENVPROC)glewGetProcAddress((const GLubyte*)"eglFenceNV")) == NULL) || r;
+ r = ((eglGetSyncAttribNV = (PFNEGLGETSYNCATTRIBNVPROC)glewGetProcAddress((const GLubyte*)"eglGetSyncAttribNV")) == NULL) || r;
+ r = ((eglSignalSyncNV = (PFNEGLSIGNALSYNCNVPROC)glewGetProcAddress((const GLubyte*)"eglSignalSyncNV")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_NV_sync */
+
+#ifdef EGL_NV_system_time
+
+static GLboolean _glewInit_EGL_NV_system_time ()
+{
+ GLboolean r = GL_FALSE;
+
+ r = ((eglGetSystemTimeFrequencyNV = (PFNEGLGETSYSTEMTIMEFREQUENCYNVPROC)glewGetProcAddress((const GLubyte*)"eglGetSystemTimeFrequencyNV")) == NULL) || r;
+ r = ((eglGetSystemTimeNV = (PFNEGLGETSYSTEMTIMENVPROC)glewGetProcAddress((const GLubyte*)"eglGetSystemTimeNV")) == NULL) || r;
+
+ return r;
+}
+
+#endif /* EGL_NV_system_time */
+
+ /* ------------------------------------------------------------------------ */
+
+GLboolean eglewGetExtension (const char* name)
+{
+ const GLubyte* start;
+ const GLubyte* end;
+
+ start = (const GLubyte*) eglQueryString(eglGetCurrentDisplay(), EGL_EXTENSIONS);
+ if (0 == start) return GL_FALSE;
+ end = start + _glewStrLen(start);
+ return _glewSearchExtension(name, start, end);
+}
+
+GLenum eglewInit (EGLDisplay display)
+{
+ EGLint major, minor;
+ const GLubyte* extStart;
+ const GLubyte* extEnd;
+ PFNEGLINITIALIZEPROC initialize = NULL;
+ PFNEGLQUERYSTRINGPROC queryString = NULL;
+
+ /* Load necessary entry points */
+ initialize = (PFNEGLINITIALIZEPROC) glewGetProcAddress("eglInitialize");
+ queryString = (PFNEGLQUERYSTRINGPROC) glewGetProcAddress("eglQueryString");
+ if (!initialize || !queryString)
+ return 1;
+
+ /* query EGK version */
+ if (initialize(display, &major, &minor) != EGL_TRUE)
+ return 1;
+
+ EGLEW_VERSION_1_5 = ( major > 1 ) || ( major == 1 && minor >= 5 ) ? GL_TRUE : GL_FALSE;
+ EGLEW_VERSION_1_4 = EGLEW_VERSION_1_5 == GL_TRUE || ( major == 1 && minor >= 4 ) ? GL_TRUE : GL_FALSE;
+ EGLEW_VERSION_1_3 = EGLEW_VERSION_1_4 == GL_TRUE || ( major == 1 && minor >= 3 ) ? GL_TRUE : GL_FALSE;
+ EGLEW_VERSION_1_2 = EGLEW_VERSION_1_3 == GL_TRUE || ( major == 1 && minor >= 2 ) ? GL_TRUE : GL_FALSE;
+ EGLEW_VERSION_1_1 = EGLEW_VERSION_1_2 == GL_TRUE || ( major == 1 && minor >= 1 ) ? GL_TRUE : GL_FALSE;
+ EGLEW_VERSION_1_0 = EGLEW_VERSION_1_1 == GL_TRUE || ( major == 1 && minor >= 0 ) ? GL_TRUE : GL_FALSE;
+
+ /* query EGL extension string */
+ extStart = (const GLubyte*) queryString(display, EGL_EXTENSIONS);
+ if (extStart == 0)
+ extStart = (const GLubyte *)"";
+ extEnd = extStart + _glewStrLen(extStart);
+
+ /* initialize extensions */
+#ifdef EGL_VERSION_1_0
+ if (glewExperimental || EGLEW_VERSION_1_0) EGLEW_VERSION_1_0 = !_glewInit_EGL_VERSION_1_0();
+#endif /* EGL_VERSION_1_0 */
+#ifdef EGL_VERSION_1_1
+ if (glewExperimental || EGLEW_VERSION_1_1) EGLEW_VERSION_1_1 = !_glewInit_EGL_VERSION_1_1();
+#endif /* EGL_VERSION_1_1 */
+#ifdef EGL_VERSION_1_2
+ if (glewExperimental || EGLEW_VERSION_1_2) EGLEW_VERSION_1_2 = !_glewInit_EGL_VERSION_1_2();
+#endif /* EGL_VERSION_1_2 */
+#ifdef EGL_VERSION_1_4
+ if (glewExperimental || EGLEW_VERSION_1_4) EGLEW_VERSION_1_4 = !_glewInit_EGL_VERSION_1_4();
+#endif /* EGL_VERSION_1_4 */
+#ifdef EGL_VERSION_1_5
+ if (glewExperimental || EGLEW_VERSION_1_5) EGLEW_VERSION_1_5 = !_glewInit_EGL_VERSION_1_5();
+#endif /* EGL_VERSION_1_5 */
+#ifdef EGL_ANDROID_blob_cache
+ EGLEW_ANDROID_blob_cache = _glewSearchExtension("EGL_ANDROID_blob_cache", extStart, extEnd);
+ if (glewExperimental || EGLEW_ANDROID_blob_cache) EGLEW_ANDROID_blob_cache = !_glewInit_EGL_ANDROID_blob_cache();
+#endif /* EGL_ANDROID_blob_cache */
+#ifdef EGL_ANDROID_create_native_client_buffer
+ EGLEW_ANDROID_create_native_client_buffer = _glewSearchExtension("EGL_ANDROID_create_native_client_buffer", extStart, extEnd);
+ if (glewExperimental || EGLEW_ANDROID_create_native_client_buffer) EGLEW_ANDROID_create_native_client_buffer = !_glewInit_EGL_ANDROID_create_native_client_buffer();
+#endif /* EGL_ANDROID_create_native_client_buffer */
+#ifdef EGL_ANDROID_framebuffer_target
+ EGLEW_ANDROID_framebuffer_target = _glewSearchExtension("EGL_ANDROID_framebuffer_target", extStart, extEnd);
+#endif /* EGL_ANDROID_framebuffer_target */
+#ifdef EGL_ANDROID_front_buffer_auto_refresh
+ EGLEW_ANDROID_front_buffer_auto_refresh = _glewSearchExtension("EGL_ANDROID_front_buffer_auto_refresh", extStart, extEnd);
+#endif /* EGL_ANDROID_front_buffer_auto_refresh */
+#ifdef EGL_ANDROID_image_native_buffer
+ EGLEW_ANDROID_image_native_buffer = _glewSearchExtension("EGL_ANDROID_image_native_buffer", extStart, extEnd);
+#endif /* EGL_ANDROID_image_native_buffer */
+#ifdef EGL_ANDROID_native_fence_sync
+ EGLEW_ANDROID_native_fence_sync = _glewSearchExtension("EGL_ANDROID_native_fence_sync", extStart, extEnd);
+ if (glewExperimental || EGLEW_ANDROID_native_fence_sync) EGLEW_ANDROID_native_fence_sync = !_glewInit_EGL_ANDROID_native_fence_sync();
+#endif /* EGL_ANDROID_native_fence_sync */
+#ifdef EGL_ANDROID_presentation_time
+ EGLEW_ANDROID_presentation_time = _glewSearchExtension("EGL_ANDROID_presentation_time", extStart, extEnd);
+ if (glewExperimental || EGLEW_ANDROID_presentation_time) EGLEW_ANDROID_presentation_time = !_glewInit_EGL_ANDROID_presentation_time();
+#endif /* EGL_ANDROID_presentation_time */
+#ifdef EGL_ANDROID_recordable
+ EGLEW_ANDROID_recordable = _glewSearchExtension("EGL_ANDROID_recordable", extStart, extEnd);
+#endif /* EGL_ANDROID_recordable */
+#ifdef EGL_ANGLE_d3d_share_handle_client_buffer
+ EGLEW_ANGLE_d3d_share_handle_client_buffer = _glewSearchExtension("EGL_ANGLE_d3d_share_handle_client_buffer", extStart, extEnd);
+#endif /* EGL_ANGLE_d3d_share_handle_client_buffer */
+#ifdef EGL_ANGLE_device_d3d
+ EGLEW_ANGLE_device_d3d = _glewSearchExtension("EGL_ANGLE_device_d3d", extStart, extEnd);
+#endif /* EGL_ANGLE_device_d3d */
+#ifdef EGL_ANGLE_query_surface_pointer
+ EGLEW_ANGLE_query_surface_pointer = _glewSearchExtension("EGL_ANGLE_query_surface_pointer", extStart, extEnd);
+ if (glewExperimental || EGLEW_ANGLE_query_surface_pointer) EGLEW_ANGLE_query_surface_pointer = !_glewInit_EGL_ANGLE_query_surface_pointer();
+#endif /* EGL_ANGLE_query_surface_pointer */
+#ifdef EGL_ANGLE_surface_d3d_texture_2d_share_handle
+ EGLEW_ANGLE_surface_d3d_texture_2d_share_handle = _glewSearchExtension("EGL_ANGLE_surface_d3d_texture_2d_share_handle", extStart, extEnd);
+#endif /* EGL_ANGLE_surface_d3d_texture_2d_share_handle */
+#ifdef EGL_ANGLE_window_fixed_size
+ EGLEW_ANGLE_window_fixed_size = _glewSearchExtension("EGL_ANGLE_window_fixed_size", extStart, extEnd);
+#endif /* EGL_ANGLE_window_fixed_size */
+#ifdef EGL_ARM_pixmap_multisample_discard
+ EGLEW_ARM_pixmap_multisample_discard = _glewSearchExtension("EGL_ARM_pixmap_multisample_discard", extStart, extEnd);
+#endif /* EGL_ARM_pixmap_multisample_discard */
+#ifdef EGL_EXT_buffer_age
+ EGLEW_EXT_buffer_age = _glewSearchExtension("EGL_EXT_buffer_age", extStart, extEnd);
+#endif /* EGL_EXT_buffer_age */
+#ifdef EGL_EXT_client_extensions
+ EGLEW_EXT_client_extensions = _glewSearchExtension("EGL_EXT_client_extensions", extStart, extEnd);
+#endif /* EGL_EXT_client_extensions */
+#ifdef EGL_EXT_create_context_robustness
+ EGLEW_EXT_create_context_robustness = _glewSearchExtension("EGL_EXT_create_context_robustness", extStart, extEnd);
+#endif /* EGL_EXT_create_context_robustness */
+#ifdef EGL_EXT_device_base
+ EGLEW_EXT_device_base = _glewSearchExtension("EGL_EXT_device_base", extStart, extEnd);
+#endif /* EGL_EXT_device_base */
+#ifdef EGL_EXT_device_drm
+ EGLEW_EXT_device_drm = _glewSearchExtension("EGL_EXT_device_drm", extStart, extEnd);
+#endif /* EGL_EXT_device_drm */
+#ifdef EGL_EXT_device_enumeration
+ EGLEW_EXT_device_enumeration = _glewSearchExtension("EGL_EXT_device_enumeration", extStart, extEnd);
+ if (glewExperimental || EGLEW_EXT_device_enumeration) EGLEW_EXT_device_enumeration = !_glewInit_EGL_EXT_device_enumeration();
+#endif /* EGL_EXT_device_enumeration */
+#ifdef EGL_EXT_device_openwf
+ EGLEW_EXT_device_openwf = _glewSearchExtension("EGL_EXT_device_openwf", extStart, extEnd);
+#endif /* EGL_EXT_device_openwf */
+#ifdef EGL_EXT_device_query
+ EGLEW_EXT_device_query = _glewSearchExtension("EGL_EXT_device_query", extStart, extEnd);
+ if (glewExperimental || EGLEW_EXT_device_query) EGLEW_EXT_device_query = !_glewInit_EGL_EXT_device_query();
+#endif /* EGL_EXT_device_query */
+#ifdef EGL_EXT_image_dma_buf_import
+ EGLEW_EXT_image_dma_buf_import = _glewSearchExtension("EGL_EXT_image_dma_buf_import", extStart, extEnd);
+#endif /* EGL_EXT_image_dma_buf_import */
+#ifdef EGL_EXT_multiview_window
+ EGLEW_EXT_multiview_window = _glewSearchExtension("EGL_EXT_multiview_window", extStart, extEnd);
+#endif /* EGL_EXT_multiview_window */
+#ifdef EGL_EXT_output_base
+ EGLEW_EXT_output_base = _glewSearchExtension("EGL_EXT_output_base", extStart, extEnd);
+ if (glewExperimental || EGLEW_EXT_output_base) EGLEW_EXT_output_base = !_glewInit_EGL_EXT_output_base();
+#endif /* EGL_EXT_output_base */
+#ifdef EGL_EXT_output_drm
+ EGLEW_EXT_output_drm = _glewSearchExtension("EGL_EXT_output_drm", extStart, extEnd);
+#endif /* EGL_EXT_output_drm */
+#ifdef EGL_EXT_output_openwf
+ EGLEW_EXT_output_openwf = _glewSearchExtension("EGL_EXT_output_openwf", extStart, extEnd);
+#endif /* EGL_EXT_output_openwf */
+#ifdef EGL_EXT_platform_base
+ EGLEW_EXT_platform_base = _glewSearchExtension("EGL_EXT_platform_base", extStart, extEnd);
+ if (glewExperimental || EGLEW_EXT_platform_base) EGLEW_EXT_platform_base = !_glewInit_EGL_EXT_platform_base();
+#endif /* EGL_EXT_platform_base */
+#ifdef EGL_EXT_platform_device
+ EGLEW_EXT_platform_device = _glewSearchExtension("EGL_EXT_platform_device", extStart, extEnd);
+#endif /* EGL_EXT_platform_device */
+#ifdef EGL_EXT_platform_wayland
+ EGLEW_EXT_platform_wayland = _glewSearchExtension("EGL_EXT_platform_wayland", extStart, extEnd);
+#endif /* EGL_EXT_platform_wayland */
+#ifdef EGL_EXT_platform_x11
+ EGLEW_EXT_platform_x11 = _glewSearchExtension("EGL_EXT_platform_x11", extStart, extEnd);
+#endif /* EGL_EXT_platform_x11 */
+#ifdef EGL_EXT_protected_content
+ EGLEW_EXT_protected_content = _glewSearchExtension("EGL_EXT_protected_content", extStart, extEnd);
+#endif /* EGL_EXT_protected_content */
+#ifdef EGL_EXT_protected_surface
+ EGLEW_EXT_protected_surface = _glewSearchExtension("EGL_EXT_protected_surface", extStart, extEnd);
+#endif /* EGL_EXT_protected_surface */
+#ifdef EGL_EXT_stream_consumer_egloutput
+ EGLEW_EXT_stream_consumer_egloutput = _glewSearchExtension("EGL_EXT_stream_consumer_egloutput", extStart, extEnd);
+ if (glewExperimental || EGLEW_EXT_stream_consumer_egloutput) EGLEW_EXT_stream_consumer_egloutput = !_glewInit_EGL_EXT_stream_consumer_egloutput();
+#endif /* EGL_EXT_stream_consumer_egloutput */
+#ifdef EGL_EXT_swap_buffers_with_damage
+ EGLEW_EXT_swap_buffers_with_damage = _glewSearchExtension("EGL_EXT_swap_buffers_with_damage", extStart, extEnd);
+ if (glewExperimental || EGLEW_EXT_swap_buffers_with_damage) EGLEW_EXT_swap_buffers_with_damage = !_glewInit_EGL_EXT_swap_buffers_with_damage();
+#endif /* EGL_EXT_swap_buffers_with_damage */
+#ifdef EGL_EXT_yuv_surface
+ EGLEW_EXT_yuv_surface = _glewSearchExtension("EGL_EXT_yuv_surface", extStart, extEnd);
+#endif /* EGL_EXT_yuv_surface */
+#ifdef EGL_HI_clientpixmap
+ EGLEW_HI_clientpixmap = _glewSearchExtension("EGL_HI_clientpixmap", extStart, extEnd);
+ if (glewExperimental || EGLEW_HI_clientpixmap) EGLEW_HI_clientpixmap = !_glewInit_EGL_HI_clientpixmap();
+#endif /* EGL_HI_clientpixmap */
+#ifdef EGL_HI_colorformats
+ EGLEW_HI_colorformats = _glewSearchExtension("EGL_HI_colorformats", extStart, extEnd);
+#endif /* EGL_HI_colorformats */
+#ifdef EGL_IMG_context_priority
+ EGLEW_IMG_context_priority = _glewSearchExtension("EGL_IMG_context_priority", extStart, extEnd);
+#endif /* EGL_IMG_context_priority */
+#ifdef EGL_IMG_image_plane_attribs
+ EGLEW_IMG_image_plane_attribs = _glewSearchExtension("EGL_IMG_image_plane_attribs", extStart, extEnd);
+#endif /* EGL_IMG_image_plane_attribs */
+#ifdef EGL_KHR_cl_event
+ EGLEW_KHR_cl_event = _glewSearchExtension("EGL_KHR_cl_event", extStart, extEnd);
+#endif /* EGL_KHR_cl_event */
+#ifdef EGL_KHR_cl_event2
+ EGLEW_KHR_cl_event2 = _glewSearchExtension("EGL_KHR_cl_event2", extStart, extEnd);
+ if (glewExperimental || EGLEW_KHR_cl_event2) EGLEW_KHR_cl_event2 = !_glewInit_EGL_KHR_cl_event2();
+#endif /* EGL_KHR_cl_event2 */
+#ifdef EGL_KHR_client_get_all_proc_addresses
+ EGLEW_KHR_client_get_all_proc_addresses = _glewSearchExtension("EGL_KHR_client_get_all_proc_addresses", extStart, extEnd);
+#endif /* EGL_KHR_client_get_all_proc_addresses */
+#ifdef EGL_KHR_config_attribs
+ EGLEW_KHR_config_attribs = _glewSearchExtension("EGL_KHR_config_attribs", extStart, extEnd);
+#endif /* EGL_KHR_config_attribs */
+#ifdef EGL_KHR_create_context
+ EGLEW_KHR_create_context = _glewSearchExtension("EGL_KHR_create_context", extStart, extEnd);
+#endif /* EGL_KHR_create_context */
+#ifdef EGL_KHR_create_context_no_error
+ EGLEW_KHR_create_context_no_error = _glewSearchExtension("EGL_KHR_create_context_no_error", extStart, extEnd);
+#endif /* EGL_KHR_create_context_no_error */
+#ifdef EGL_KHR_debug
+ EGLEW_KHR_debug = _glewSearchExtension("EGL_KHR_debug", extStart, extEnd);
+ if (glewExperimental || EGLEW_KHR_debug) EGLEW_KHR_debug = !_glewInit_EGL_KHR_debug();
+#endif /* EGL_KHR_debug */
+#ifdef EGL_KHR_fence_sync
+ EGLEW_KHR_fence_sync = _glewSearchExtension("EGL_KHR_fence_sync", extStart, extEnd);
+#endif /* EGL_KHR_fence_sync */
+#ifdef EGL_KHR_get_all_proc_addresses
+ EGLEW_KHR_get_all_proc_addresses = _glewSearchExtension("EGL_KHR_get_all_proc_addresses", extStart, extEnd);
+#endif /* EGL_KHR_get_all_proc_addresses */
+#ifdef EGL_KHR_gl_colorspace
+ EGLEW_KHR_gl_colorspace = _glewSearchExtension("EGL_KHR_gl_colorspace", extStart, extEnd);
+#endif /* EGL_KHR_gl_colorspace */
+#ifdef EGL_KHR_gl_renderbuffer_image
+ EGLEW_KHR_gl_renderbuffer_image = _glewSearchExtension("EGL_KHR_gl_renderbuffer_image", extStart, extEnd);
+#endif /* EGL_KHR_gl_renderbuffer_image */
+#ifdef EGL_KHR_gl_texture_2D_image
+ EGLEW_KHR_gl_texture_2D_image = _glewSearchExtension("EGL_KHR_gl_texture_2D_image", extStart, extEnd);
+#endif /* EGL_KHR_gl_texture_2D_image */
+#ifdef EGL_KHR_gl_texture_3D_image
+ EGLEW_KHR_gl_texture_3D_image = _glewSearchExtension("EGL_KHR_gl_texture_3D_image", extStart, extEnd);
+#endif /* EGL_KHR_gl_texture_3D_image */
+#ifdef EGL_KHR_gl_texture_cubemap_image
+ EGLEW_KHR_gl_texture_cubemap_image = _glewSearchExtension("EGL_KHR_gl_texture_cubemap_image", extStart, extEnd);
+#endif /* EGL_KHR_gl_texture_cubemap_image */
+#ifdef EGL_KHR_image
+ EGLEW_KHR_image = _glewSearchExtension("EGL_KHR_image", extStart, extEnd);
+ if (glewExperimental || EGLEW_KHR_image) EGLEW_KHR_image = !_glewInit_EGL_KHR_image();
+#endif /* EGL_KHR_image */
+#ifdef EGL_KHR_image_base
+ EGLEW_KHR_image_base = _glewSearchExtension("EGL_KHR_image_base", extStart, extEnd);
+#endif /* EGL_KHR_image_base */
+#ifdef EGL_KHR_image_pixmap
+ EGLEW_KHR_image_pixmap = _glewSearchExtension("EGL_KHR_image_pixmap", extStart, extEnd);
+#endif /* EGL_KHR_image_pixmap */
+#ifdef EGL_KHR_lock_surface
+ EGLEW_KHR_lock_surface = _glewSearchExtension("EGL_KHR_lock_surface", extStart, extEnd);
+ if (glewExperimental || EGLEW_KHR_lock_surface) EGLEW_KHR_lock_surface = !_glewInit_EGL_KHR_lock_surface();
+#endif /* EGL_KHR_lock_surface */
+#ifdef EGL_KHR_lock_surface2
+ EGLEW_KHR_lock_surface2 = _glewSearchExtension("EGL_KHR_lock_surface2", extStart, extEnd);
+#endif /* EGL_KHR_lock_surface2 */
+#ifdef EGL_KHR_lock_surface3
+ EGLEW_KHR_lock_surface3 = _glewSearchExtension("EGL_KHR_lock_surface3", extStart, extEnd);
+ if (glewExperimental || EGLEW_KHR_lock_surface3) EGLEW_KHR_lock_surface3 = !_glewInit_EGL_KHR_lock_surface3();
+#endif /* EGL_KHR_lock_surface3 */
+#ifdef EGL_KHR_mutable_render_buffer
+ EGLEW_KHR_mutable_render_buffer = _glewSearchExtension("EGL_KHR_mutable_render_buffer", extStart, extEnd);
+#endif /* EGL_KHR_mutable_render_buffer */
+#ifdef EGL_KHR_partial_update
+ EGLEW_KHR_partial_update = _glewSearchExtension("EGL_KHR_partial_update", extStart, extEnd);
+ if (glewExperimental || EGLEW_KHR_partial_update) EGLEW_KHR_partial_update = !_glewInit_EGL_KHR_partial_update();
+#endif /* EGL_KHR_partial_update */
+#ifdef EGL_KHR_platform_android
+ EGLEW_KHR_platform_android = _glewSearchExtension("EGL_KHR_platform_android", extStart, extEnd);
+#endif /* EGL_KHR_platform_android */
+#ifdef EGL_KHR_platform_gbm
+ EGLEW_KHR_platform_gbm = _glewSearchExtension("EGL_KHR_platform_gbm", extStart, extEnd);
+#endif /* EGL_KHR_platform_gbm */
+#ifdef EGL_KHR_platform_wayland
+ EGLEW_KHR_platform_wayland = _glewSearchExtension("EGL_KHR_platform_wayland", extStart, extEnd);
+#endif /* EGL_KHR_platform_wayland */
+#ifdef EGL_KHR_platform_x11
+ EGLEW_KHR_platform_x11 = _glewSearchExtension("EGL_KHR_platform_x11", extStart, extEnd);
+#endif /* EGL_KHR_platform_x11 */
+#ifdef EGL_KHR_reusable_sync
+ EGLEW_KHR_reusable_sync = _glewSearchExtension("EGL_KHR_reusable_sync", extStart, extEnd);
+ if (glewExperimental || EGLEW_KHR_reusable_sync) EGLEW_KHR_reusable_sync = !_glewInit_EGL_KHR_reusable_sync();
+#endif /* EGL_KHR_reusable_sync */
+#ifdef EGL_KHR_stream
+ EGLEW_KHR_stream = _glewSearchExtension("EGL_KHR_stream", extStart, extEnd);
+ if (glewExperimental || EGLEW_KHR_stream) EGLEW_KHR_stream = !_glewInit_EGL_KHR_stream();
+#endif /* EGL_KHR_stream */
+#ifdef EGL_KHR_stream_consumer_gltexture
+ EGLEW_KHR_stream_consumer_gltexture = _glewSearchExtension("EGL_KHR_stream_consumer_gltexture", extStart, extEnd);
+ if (glewExperimental || EGLEW_KHR_stream_consumer_gltexture) EGLEW_KHR_stream_consumer_gltexture = !_glewInit_EGL_KHR_stream_consumer_gltexture();
+#endif /* EGL_KHR_stream_consumer_gltexture */
+#ifdef EGL_KHR_stream_cross_process_fd
+ EGLEW_KHR_stream_cross_process_fd = _glewSearchExtension("EGL_KHR_stream_cross_process_fd", extStart, extEnd);
+ if (glewExperimental || EGLEW_KHR_stream_cross_process_fd) EGLEW_KHR_stream_cross_process_fd = !_glewInit_EGL_KHR_stream_cross_process_fd();
+#endif /* EGL_KHR_stream_cross_process_fd */
+#ifdef EGL_KHR_stream_fifo
+ EGLEW_KHR_stream_fifo = _glewSearchExtension("EGL_KHR_stream_fifo", extStart, extEnd);
+ if (glewExperimental || EGLEW_KHR_stream_fifo) EGLEW_KHR_stream_fifo = !_glewInit_EGL_KHR_stream_fifo();
+#endif /* EGL_KHR_stream_fifo */
+#ifdef EGL_KHR_stream_producer_aldatalocator
+ EGLEW_KHR_stream_producer_aldatalocator = _glewSearchExtension("EGL_KHR_stream_producer_aldatalocator", extStart, extEnd);
+#endif /* EGL_KHR_stream_producer_aldatalocator */
+#ifdef EGL_KHR_stream_producer_eglsurface
+ EGLEW_KHR_stream_producer_eglsurface = _glewSearchExtension("EGL_KHR_stream_producer_eglsurface", extStart, extEnd);
+ if (glewExperimental || EGLEW_KHR_stream_producer_eglsurface) EGLEW_KHR_stream_producer_eglsurface = !_glewInit_EGL_KHR_stream_producer_eglsurface();
+#endif /* EGL_KHR_stream_producer_eglsurface */
+#ifdef EGL_KHR_surfaceless_context
+ EGLEW_KHR_surfaceless_context = _glewSearchExtension("EGL_KHR_surfaceless_context", extStart, extEnd);
+#endif /* EGL_KHR_surfaceless_context */
+#ifdef EGL_KHR_swap_buffers_with_damage
+ EGLEW_KHR_swap_buffers_with_damage = _glewSearchExtension("EGL_KHR_swap_buffers_with_damage", extStart, extEnd);
+ if (glewExperimental || EGLEW_KHR_swap_buffers_with_damage) EGLEW_KHR_swap_buffers_with_damage = !_glewInit_EGL_KHR_swap_buffers_with_damage();
+#endif /* EGL_KHR_swap_buffers_with_damage */
+#ifdef EGL_KHR_vg_parent_image
+ EGLEW_KHR_vg_parent_image = _glewSearchExtension("EGL_KHR_vg_parent_image", extStart, extEnd);
+#endif /* EGL_KHR_vg_parent_image */
+#ifdef EGL_KHR_wait_sync
+ EGLEW_KHR_wait_sync = _glewSearchExtension("EGL_KHR_wait_sync", extStart, extEnd);
+ if (glewExperimental || EGLEW_KHR_wait_sync) EGLEW_KHR_wait_sync = !_glewInit_EGL_KHR_wait_sync();
+#endif /* EGL_KHR_wait_sync */
+#ifdef EGL_MESA_drm_image
+ EGLEW_MESA_drm_image = _glewSearchExtension("EGL_MESA_drm_image", extStart, extEnd);
+ if (glewExperimental || EGLEW_MESA_drm_image) EGLEW_MESA_drm_image = !_glewInit_EGL_MESA_drm_image();
+#endif /* EGL_MESA_drm_image */
+#ifdef EGL_MESA_image_dma_buf_export
+ EGLEW_MESA_image_dma_buf_export = _glewSearchExtension("EGL_MESA_image_dma_buf_export", extStart, extEnd);
+ if (glewExperimental || EGLEW_MESA_image_dma_buf_export) EGLEW_MESA_image_dma_buf_export = !_glewInit_EGL_MESA_image_dma_buf_export();
+#endif /* EGL_MESA_image_dma_buf_export */
+#ifdef EGL_MESA_platform_gbm
+ EGLEW_MESA_platform_gbm = _glewSearchExtension("EGL_MESA_platform_gbm", extStart, extEnd);
+#endif /* EGL_MESA_platform_gbm */
+#ifdef EGL_NOK_swap_region
+ EGLEW_NOK_swap_region = _glewSearchExtension("EGL_NOK_swap_region", extStart, extEnd);
+ if (glewExperimental || EGLEW_NOK_swap_region) EGLEW_NOK_swap_region = !_glewInit_EGL_NOK_swap_region();
+#endif /* EGL_NOK_swap_region */
+#ifdef EGL_NOK_swap_region2
+ EGLEW_NOK_swap_region2 = _glewSearchExtension("EGL_NOK_swap_region2", extStart, extEnd);
+ if (glewExperimental || EGLEW_NOK_swap_region2) EGLEW_NOK_swap_region2 = !_glewInit_EGL_NOK_swap_region2();
+#endif /* EGL_NOK_swap_region2 */
+#ifdef EGL_NOK_texture_from_pixmap
+ EGLEW_NOK_texture_from_pixmap = _glewSearchExtension("EGL_NOK_texture_from_pixmap", extStart, extEnd);
+#endif /* EGL_NOK_texture_from_pixmap */
+#ifdef EGL_NV_3dvision_surface
+ EGLEW_NV_3dvision_surface = _glewSearchExtension("EGL_NV_3dvision_surface", extStart, extEnd);
+#endif /* EGL_NV_3dvision_surface */
+#ifdef EGL_NV_coverage_sample
+ EGLEW_NV_coverage_sample = _glewSearchExtension("EGL_NV_coverage_sample", extStart, extEnd);
+#endif /* EGL_NV_coverage_sample */
+#ifdef EGL_NV_coverage_sample_resolve
+ EGLEW_NV_coverage_sample_resolve = _glewSearchExtension("EGL_NV_coverage_sample_resolve", extStart, extEnd);
+#endif /* EGL_NV_coverage_sample_resolve */
+#ifdef EGL_NV_cuda_event
+ EGLEW_NV_cuda_event = _glewSearchExtension("EGL_NV_cuda_event", extStart, extEnd);
+#endif /* EGL_NV_cuda_event */
+#ifdef EGL_NV_depth_nonlinear
+ EGLEW_NV_depth_nonlinear = _glewSearchExtension("EGL_NV_depth_nonlinear", extStart, extEnd);
+#endif /* EGL_NV_depth_nonlinear */
+#ifdef EGL_NV_device_cuda
+ EGLEW_NV_device_cuda = _glewSearchExtension("EGL_NV_device_cuda", extStart, extEnd);
+#endif /* EGL_NV_device_cuda */
+#ifdef EGL_NV_native_query
+ EGLEW_NV_native_query = _glewSearchExtension("EGL_NV_native_query", extStart, extEnd);
+ if (glewExperimental || EGLEW_NV_native_query) EGLEW_NV_native_query = !_glewInit_EGL_NV_native_query();
+#endif /* EGL_NV_native_query */
+#ifdef EGL_NV_post_convert_rounding
+ EGLEW_NV_post_convert_rounding = _glewSearchExtension("EGL_NV_post_convert_rounding", extStart, extEnd);
+#endif /* EGL_NV_post_convert_rounding */
+#ifdef EGL_NV_post_sub_buffer
+ EGLEW_NV_post_sub_buffer = _glewSearchExtension("EGL_NV_post_sub_buffer", extStart, extEnd);
+ if (glewExperimental || EGLEW_NV_post_sub_buffer) EGLEW_NV_post_sub_buffer = !_glewInit_EGL_NV_post_sub_buffer();
+#endif /* EGL_NV_post_sub_buffer */
+#ifdef EGL_NV_robustness_video_memory_purge
+ EGLEW_NV_robustness_video_memory_purge = _glewSearchExtension("EGL_NV_robustness_video_memory_purge", extStart, extEnd);
+#endif /* EGL_NV_robustness_video_memory_purge */
+#ifdef EGL_NV_stream_consumer_gltexture_yuv
+ EGLEW_NV_stream_consumer_gltexture_yuv = _glewSearchExtension("EGL_NV_stream_consumer_gltexture_yuv", extStart, extEnd);
+ if (glewExperimental || EGLEW_NV_stream_consumer_gltexture_yuv) EGLEW_NV_stream_consumer_gltexture_yuv = !_glewInit_EGL_NV_stream_consumer_gltexture_yuv();
+#endif /* EGL_NV_stream_consumer_gltexture_yuv */
+#ifdef EGL_NV_stream_metadata
+ EGLEW_NV_stream_metadata = _glewSearchExtension("EGL_NV_stream_metadata", extStart, extEnd);
+ if (glewExperimental || EGLEW_NV_stream_metadata) EGLEW_NV_stream_metadata = !_glewInit_EGL_NV_stream_metadata();
+#endif /* EGL_NV_stream_metadata */
+#ifdef EGL_NV_stream_sync
+ EGLEW_NV_stream_sync = _glewSearchExtension("EGL_NV_stream_sync", extStart, extEnd);
+ if (glewExperimental || EGLEW_NV_stream_sync) EGLEW_NV_stream_sync = !_glewInit_EGL_NV_stream_sync();
+#endif /* EGL_NV_stream_sync */
+#ifdef EGL_NV_sync
+ EGLEW_NV_sync = _glewSearchExtension("EGL_NV_sync", extStart, extEnd);
+ if (glewExperimental || EGLEW_NV_sync) EGLEW_NV_sync = !_glewInit_EGL_NV_sync();
+#endif /* EGL_NV_sync */
+#ifdef EGL_NV_system_time
+ EGLEW_NV_system_time = _glewSearchExtension("EGL_NV_system_time", extStart, extEnd);
+ if (glewExperimental || EGLEW_NV_system_time) EGLEW_NV_system_time = !_glewInit_EGL_NV_system_time();
+#endif /* EGL_NV_system_time */
+#ifdef EGL_TIZEN_image_native_buffer
+ EGLEW_TIZEN_image_native_buffer = _glewSearchExtension("EGL_TIZEN_image_native_buffer", extStart, extEnd);
+#endif /* EGL_TIZEN_image_native_buffer */
+#ifdef EGL_TIZEN_image_native_surface
+ EGLEW_TIZEN_image_native_surface = _glewSearchExtension("EGL_TIZEN_image_native_surface", extStart, extEnd);
+#endif /* EGL_TIZEN_image_native_surface */
+
+ return GLEW_OK;
+}
-#if !defined(GLEW_MX)
+#elif defined(_WIN32)
PFNWGLSETSTEREOEMITTERSTATE3DLPROC __wglewSetStereoEmitterState3DL = NULL;
@@ -11569,12 +15980,9 @@ GLboolean __WGLEW_NV_vertex_array_range = GL_FALSE;
GLboolean __WGLEW_NV_video_capture = GL_FALSE;
GLboolean __WGLEW_NV_video_output = GL_FALSE;
GLboolean __WGLEW_OML_sync_control = GL_FALSE;
-
-#endif /* !GLEW_MX */
-
#ifdef WGL_3DL_stereo_control
-static GLboolean _glewInit_WGL_3DL_stereo_control (WGLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_WGL_3DL_stereo_control ()
{
GLboolean r = GL_FALSE;
@@ -11587,7 +15995,7 @@ static GLboolean _glewInit_WGL_3DL_stereo_control (WGLEW_CONTEXT_ARG_DEF_INIT)
#ifdef WGL_AMD_gpu_association
-static GLboolean _glewInit_WGL_AMD_gpu_association (WGLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_WGL_AMD_gpu_association ()
{
GLboolean r = GL_FALSE;
@@ -11608,7 +16016,7 @@ static GLboolean _glewInit_WGL_AMD_gpu_association (WGLEW_CONTEXT_ARG_DEF_INIT)
#ifdef WGL_ARB_buffer_region
-static GLboolean _glewInit_WGL_ARB_buffer_region (WGLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_WGL_ARB_buffer_region ()
{
GLboolean r = GL_FALSE;
@@ -11624,7 +16032,7 @@ static GLboolean _glewInit_WGL_ARB_buffer_region (WGLEW_CONTEXT_ARG_DEF_INIT)
#ifdef WGL_ARB_create_context
-static GLboolean _glewInit_WGL_ARB_create_context (WGLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_WGL_ARB_create_context ()
{
GLboolean r = GL_FALSE;
@@ -11637,7 +16045,7 @@ static GLboolean _glewInit_WGL_ARB_create_context (WGLEW_CONTEXT_ARG_DEF_INIT)
#ifdef WGL_ARB_extensions_string
-static GLboolean _glewInit_WGL_ARB_extensions_string (WGLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_WGL_ARB_extensions_string ()
{
GLboolean r = GL_FALSE;
@@ -11650,7 +16058,7 @@ static GLboolean _glewInit_WGL_ARB_extensions_string (WGLEW_CONTEXT_ARG_DEF_INIT
#ifdef WGL_ARB_make_current_read
-static GLboolean _glewInit_WGL_ARB_make_current_read (WGLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_WGL_ARB_make_current_read ()
{
GLboolean r = GL_FALSE;
@@ -11664,7 +16072,7 @@ static GLboolean _glewInit_WGL_ARB_make_current_read (WGLEW_CONTEXT_ARG_DEF_INIT
#ifdef WGL_ARB_pbuffer
-static GLboolean _glewInit_WGL_ARB_pbuffer (WGLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_WGL_ARB_pbuffer ()
{
GLboolean r = GL_FALSE;
@@ -11681,7 +16089,7 @@ static GLboolean _glewInit_WGL_ARB_pbuffer (WGLEW_CONTEXT_ARG_DEF_INIT)
#ifdef WGL_ARB_pixel_format
-static GLboolean _glewInit_WGL_ARB_pixel_format (WGLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_WGL_ARB_pixel_format ()
{
GLboolean r = GL_FALSE;
@@ -11696,7 +16104,7 @@ static GLboolean _glewInit_WGL_ARB_pixel_format (WGLEW_CONTEXT_ARG_DEF_INIT)
#ifdef WGL_ARB_render_texture
-static GLboolean _glewInit_WGL_ARB_render_texture (WGLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_WGL_ARB_render_texture ()
{
GLboolean r = GL_FALSE;
@@ -11711,7 +16119,7 @@ static GLboolean _glewInit_WGL_ARB_render_texture (WGLEW_CONTEXT_ARG_DEF_INIT)
#ifdef WGL_EXT_display_color_table
-static GLboolean _glewInit_WGL_EXT_display_color_table (WGLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_WGL_EXT_display_color_table ()
{
GLboolean r = GL_FALSE;
@@ -11727,7 +16135,7 @@ static GLboolean _glewInit_WGL_EXT_display_color_table (WGLEW_CONTEXT_ARG_DEF_IN
#ifdef WGL_EXT_extensions_string
-static GLboolean _glewInit_WGL_EXT_extensions_string (WGLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_WGL_EXT_extensions_string ()
{
GLboolean r = GL_FALSE;
@@ -11740,7 +16148,7 @@ static GLboolean _glewInit_WGL_EXT_extensions_string (WGLEW_CONTEXT_ARG_DEF_INIT
#ifdef WGL_EXT_make_current_read
-static GLboolean _glewInit_WGL_EXT_make_current_read (WGLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_WGL_EXT_make_current_read ()
{
GLboolean r = GL_FALSE;
@@ -11754,7 +16162,7 @@ static GLboolean _glewInit_WGL_EXT_make_current_read (WGLEW_CONTEXT_ARG_DEF_INIT
#ifdef WGL_EXT_pbuffer
-static GLboolean _glewInit_WGL_EXT_pbuffer (WGLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_WGL_EXT_pbuffer ()
{
GLboolean r = GL_FALSE;
@@ -11771,7 +16179,7 @@ static GLboolean _glewInit_WGL_EXT_pbuffer (WGLEW_CONTEXT_ARG_DEF_INIT)
#ifdef WGL_EXT_pixel_format
-static GLboolean _glewInit_WGL_EXT_pixel_format (WGLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_WGL_EXT_pixel_format ()
{
GLboolean r = GL_FALSE;
@@ -11786,7 +16194,7 @@ static GLboolean _glewInit_WGL_EXT_pixel_format (WGLEW_CONTEXT_ARG_DEF_INIT)
#ifdef WGL_EXT_swap_control
-static GLboolean _glewInit_WGL_EXT_swap_control (WGLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_WGL_EXT_swap_control ()
{
GLboolean r = GL_FALSE;
@@ -11800,7 +16208,7 @@ static GLboolean _glewInit_WGL_EXT_swap_control (WGLEW_CONTEXT_ARG_DEF_INIT)
#ifdef WGL_I3D_digital_video_control
-static GLboolean _glewInit_WGL_I3D_digital_video_control (WGLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_WGL_I3D_digital_video_control ()
{
GLboolean r = GL_FALSE;
@@ -11814,7 +16222,7 @@ static GLboolean _glewInit_WGL_I3D_digital_video_control (WGLEW_CONTEXT_ARG_DEF_
#ifdef WGL_I3D_gamma
-static GLboolean _glewInit_WGL_I3D_gamma (WGLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_WGL_I3D_gamma ()
{
GLboolean r = GL_FALSE;
@@ -11830,7 +16238,7 @@ static GLboolean _glewInit_WGL_I3D_gamma (WGLEW_CONTEXT_ARG_DEF_INIT)
#ifdef WGL_I3D_genlock
-static GLboolean _glewInit_WGL_I3D_genlock (WGLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_WGL_I3D_genlock ()
{
GLboolean r = GL_FALSE;
@@ -11854,7 +16262,7 @@ static GLboolean _glewInit_WGL_I3D_genlock (WGLEW_CONTEXT_ARG_DEF_INIT)
#ifdef WGL_I3D_image_buffer
-static GLboolean _glewInit_WGL_I3D_image_buffer (WGLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_WGL_I3D_image_buffer ()
{
GLboolean r = GL_FALSE;
@@ -11870,7 +16278,7 @@ static GLboolean _glewInit_WGL_I3D_image_buffer (WGLEW_CONTEXT_ARG_DEF_INIT)
#ifdef WGL_I3D_swap_frame_lock
-static GLboolean _glewInit_WGL_I3D_swap_frame_lock (WGLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_WGL_I3D_swap_frame_lock ()
{
GLboolean r = GL_FALSE;
@@ -11886,7 +16294,7 @@ static GLboolean _glewInit_WGL_I3D_swap_frame_lock (WGLEW_CONTEXT_ARG_DEF_INIT)
#ifdef WGL_I3D_swap_frame_usage
-static GLboolean _glewInit_WGL_I3D_swap_frame_usage (WGLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_WGL_I3D_swap_frame_usage ()
{
GLboolean r = GL_FALSE;
@@ -11902,7 +16310,7 @@ static GLboolean _glewInit_WGL_I3D_swap_frame_usage (WGLEW_CONTEXT_ARG_DEF_INIT)
#ifdef WGL_NV_DX_interop
-static GLboolean _glewInit_WGL_NV_DX_interop (WGLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_WGL_NV_DX_interop ()
{
GLboolean r = GL_FALSE;
@@ -11922,7 +16330,7 @@ static GLboolean _glewInit_WGL_NV_DX_interop (WGLEW_CONTEXT_ARG_DEF_INIT)
#ifdef WGL_NV_copy_image
-static GLboolean _glewInit_WGL_NV_copy_image (WGLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_WGL_NV_copy_image ()
{
GLboolean r = GL_FALSE;
@@ -11935,7 +16343,7 @@ static GLboolean _glewInit_WGL_NV_copy_image (WGLEW_CONTEXT_ARG_DEF_INIT)
#ifdef WGL_NV_delay_before_swap
-static GLboolean _glewInit_WGL_NV_delay_before_swap (WGLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_WGL_NV_delay_before_swap ()
{
GLboolean r = GL_FALSE;
@@ -11948,7 +16356,7 @@ static GLboolean _glewInit_WGL_NV_delay_before_swap (WGLEW_CONTEXT_ARG_DEF_INIT)
#ifdef WGL_NV_gpu_affinity
-static GLboolean _glewInit_WGL_NV_gpu_affinity (WGLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_WGL_NV_gpu_affinity ()
{
GLboolean r = GL_FALSE;
@@ -11965,7 +16373,7 @@ static GLboolean _glewInit_WGL_NV_gpu_affinity (WGLEW_CONTEXT_ARG_DEF_INIT)
#ifdef WGL_NV_present_video
-static GLboolean _glewInit_WGL_NV_present_video (WGLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_WGL_NV_present_video ()
{
GLboolean r = GL_FALSE;
@@ -11980,7 +16388,7 @@ static GLboolean _glewInit_WGL_NV_present_video (WGLEW_CONTEXT_ARG_DEF_INIT)
#ifdef WGL_NV_swap_group
-static GLboolean _glewInit_WGL_NV_swap_group (WGLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_WGL_NV_swap_group ()
{
GLboolean r = GL_FALSE;
@@ -11998,7 +16406,7 @@ static GLboolean _glewInit_WGL_NV_swap_group (WGLEW_CONTEXT_ARG_DEF_INIT)
#ifdef WGL_NV_vertex_array_range
-static GLboolean _glewInit_WGL_NV_vertex_array_range (WGLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_WGL_NV_vertex_array_range ()
{
GLboolean r = GL_FALSE;
@@ -12012,7 +16420,7 @@ static GLboolean _glewInit_WGL_NV_vertex_array_range (WGLEW_CONTEXT_ARG_DEF_INIT
#ifdef WGL_NV_video_capture
-static GLboolean _glewInit_WGL_NV_video_capture (WGLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_WGL_NV_video_capture ()
{
GLboolean r = GL_FALSE;
@@ -12029,7 +16437,7 @@ static GLboolean _glewInit_WGL_NV_video_capture (WGLEW_CONTEXT_ARG_DEF_INIT)
#ifdef WGL_NV_video_output
-static GLboolean _glewInit_WGL_NV_video_output (WGLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_WGL_NV_video_output ()
{
GLboolean r = GL_FALSE;
@@ -12047,7 +16455,7 @@ static GLboolean _glewInit_WGL_NV_video_output (WGLEW_CONTEXT_ARG_DEF_INIT)
#ifdef WGL_OML_sync_control
-static GLboolean _glewInit_WGL_OML_sync_control (WGLEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_WGL_OML_sync_control ()
{
GLboolean r = GL_FALSE;
@@ -12085,11 +16493,7 @@ GLboolean GLEWAPIENTRY wglewGetExtension (const char* name)
return _glewSearchExtension(name, start, end);
}
-#ifdef GLEW_MX
-GLenum GLEWAPIENTRY wglewContextInit (WGLEW_CONTEXT_ARG_DEF_LIST)
-#else
-GLenum GLEWAPIENTRY wglewInit (WGLEW_CONTEXT_ARG_DEF_LIST)
-#endif
+GLenum GLEWAPIENTRY wglewInit ()
{
GLboolean crippled;
const GLubyte* extStart;
@@ -12113,22 +16517,22 @@ GLenum GLEWAPIENTRY wglewInit (WGLEW_CONTEXT_ARG_DEF_LIST)
#endif /* WGL_3DFX_multisample */
#ifdef WGL_3DL_stereo_control
WGLEW_3DL_stereo_control = _glewSearchExtension("WGL_3DL_stereo_control", extStart, extEnd);
- if (glewExperimental || WGLEW_3DL_stereo_control|| crippled) WGLEW_3DL_stereo_control= !_glewInit_WGL_3DL_stereo_control(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || WGLEW_3DL_stereo_control|| crippled) WGLEW_3DL_stereo_control= !_glewInit_WGL_3DL_stereo_control();
#endif /* WGL_3DL_stereo_control */
#ifdef WGL_AMD_gpu_association
WGLEW_AMD_gpu_association = _glewSearchExtension("WGL_AMD_gpu_association", extStart, extEnd);
- if (glewExperimental || WGLEW_AMD_gpu_association|| crippled) WGLEW_AMD_gpu_association= !_glewInit_WGL_AMD_gpu_association(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || WGLEW_AMD_gpu_association|| crippled) WGLEW_AMD_gpu_association= !_glewInit_WGL_AMD_gpu_association();
#endif /* WGL_AMD_gpu_association */
#ifdef WGL_ARB_buffer_region
WGLEW_ARB_buffer_region = _glewSearchExtension("WGL_ARB_buffer_region", extStart, extEnd);
- if (glewExperimental || WGLEW_ARB_buffer_region|| crippled) WGLEW_ARB_buffer_region= !_glewInit_WGL_ARB_buffer_region(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || WGLEW_ARB_buffer_region|| crippled) WGLEW_ARB_buffer_region= !_glewInit_WGL_ARB_buffer_region();
#endif /* WGL_ARB_buffer_region */
#ifdef WGL_ARB_context_flush_control
WGLEW_ARB_context_flush_control = _glewSearchExtension("WGL_ARB_context_flush_control", extStart, extEnd);
#endif /* WGL_ARB_context_flush_control */
#ifdef WGL_ARB_create_context
WGLEW_ARB_create_context = _glewSearchExtension("WGL_ARB_create_context", extStart, extEnd);
- if (glewExperimental || WGLEW_ARB_create_context|| crippled) WGLEW_ARB_create_context= !_glewInit_WGL_ARB_create_context(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || WGLEW_ARB_create_context|| crippled) WGLEW_ARB_create_context= !_glewInit_WGL_ARB_create_context();
#endif /* WGL_ARB_create_context */
#ifdef WGL_ARB_create_context_profile
WGLEW_ARB_create_context_profile = _glewSearchExtension("WGL_ARB_create_context_profile", extStart, extEnd);
@@ -12138,32 +16542,32 @@ GLenum GLEWAPIENTRY wglewInit (WGLEW_CONTEXT_ARG_DEF_LIST)
#endif /* WGL_ARB_create_context_robustness */
#ifdef WGL_ARB_extensions_string
WGLEW_ARB_extensions_string = _glewSearchExtension("WGL_ARB_extensions_string", extStart, extEnd);
- if (glewExperimental || WGLEW_ARB_extensions_string|| crippled) WGLEW_ARB_extensions_string= !_glewInit_WGL_ARB_extensions_string(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || WGLEW_ARB_extensions_string|| crippled) WGLEW_ARB_extensions_string= !_glewInit_WGL_ARB_extensions_string();
#endif /* WGL_ARB_extensions_string */
#ifdef WGL_ARB_framebuffer_sRGB
WGLEW_ARB_framebuffer_sRGB = _glewSearchExtension("WGL_ARB_framebuffer_sRGB", extStart, extEnd);
#endif /* WGL_ARB_framebuffer_sRGB */
#ifdef WGL_ARB_make_current_read
WGLEW_ARB_make_current_read = _glewSearchExtension("WGL_ARB_make_current_read", extStart, extEnd);
- if (glewExperimental || WGLEW_ARB_make_current_read|| crippled) WGLEW_ARB_make_current_read= !_glewInit_WGL_ARB_make_current_read(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || WGLEW_ARB_make_current_read|| crippled) WGLEW_ARB_make_current_read= !_glewInit_WGL_ARB_make_current_read();
#endif /* WGL_ARB_make_current_read */
#ifdef WGL_ARB_multisample
WGLEW_ARB_multisample = _glewSearchExtension("WGL_ARB_multisample", extStart, extEnd);
#endif /* WGL_ARB_multisample */
#ifdef WGL_ARB_pbuffer
WGLEW_ARB_pbuffer = _glewSearchExtension("WGL_ARB_pbuffer", extStart, extEnd);
- if (glewExperimental || WGLEW_ARB_pbuffer|| crippled) WGLEW_ARB_pbuffer= !_glewInit_WGL_ARB_pbuffer(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || WGLEW_ARB_pbuffer|| crippled) WGLEW_ARB_pbuffer= !_glewInit_WGL_ARB_pbuffer();
#endif /* WGL_ARB_pbuffer */
#ifdef WGL_ARB_pixel_format
WGLEW_ARB_pixel_format = _glewSearchExtension("WGL_ARB_pixel_format", extStart, extEnd);
- if (glewExperimental || WGLEW_ARB_pixel_format|| crippled) WGLEW_ARB_pixel_format= !_glewInit_WGL_ARB_pixel_format(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || WGLEW_ARB_pixel_format|| crippled) WGLEW_ARB_pixel_format= !_glewInit_WGL_ARB_pixel_format();
#endif /* WGL_ARB_pixel_format */
#ifdef WGL_ARB_pixel_format_float
WGLEW_ARB_pixel_format_float = _glewSearchExtension("WGL_ARB_pixel_format_float", extStart, extEnd);
#endif /* WGL_ARB_pixel_format_float */
#ifdef WGL_ARB_render_texture
WGLEW_ARB_render_texture = _glewSearchExtension("WGL_ARB_render_texture", extStart, extEnd);
- if (glewExperimental || WGLEW_ARB_render_texture|| crippled) WGLEW_ARB_render_texture= !_glewInit_WGL_ARB_render_texture(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || WGLEW_ARB_render_texture|| crippled) WGLEW_ARB_render_texture= !_glewInit_WGL_ARB_render_texture();
#endif /* WGL_ARB_render_texture */
#ifdef WGL_ARB_robustness_application_isolation
WGLEW_ARB_robustness_application_isolation = _glewSearchExtension("WGL_ARB_robustness_application_isolation", extStart, extEnd);
@@ -12188,92 +16592,92 @@ GLenum GLEWAPIENTRY wglewInit (WGLEW_CONTEXT_ARG_DEF_LIST)
#endif /* WGL_EXT_depth_float */
#ifdef WGL_EXT_display_color_table
WGLEW_EXT_display_color_table = _glewSearchExtension("WGL_EXT_display_color_table", extStart, extEnd);
- if (glewExperimental || WGLEW_EXT_display_color_table|| crippled) WGLEW_EXT_display_color_table= !_glewInit_WGL_EXT_display_color_table(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || WGLEW_EXT_display_color_table|| crippled) WGLEW_EXT_display_color_table= !_glewInit_WGL_EXT_display_color_table();
#endif /* WGL_EXT_display_color_table */
#ifdef WGL_EXT_extensions_string
WGLEW_EXT_extensions_string = _glewSearchExtension("WGL_EXT_extensions_string", extStart, extEnd);
- if (glewExperimental || WGLEW_EXT_extensions_string|| crippled) WGLEW_EXT_extensions_string= !_glewInit_WGL_EXT_extensions_string(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || WGLEW_EXT_extensions_string|| crippled) WGLEW_EXT_extensions_string= !_glewInit_WGL_EXT_extensions_string();
#endif /* WGL_EXT_extensions_string */
#ifdef WGL_EXT_framebuffer_sRGB
WGLEW_EXT_framebuffer_sRGB = _glewSearchExtension("WGL_EXT_framebuffer_sRGB", extStart, extEnd);
#endif /* WGL_EXT_framebuffer_sRGB */
#ifdef WGL_EXT_make_current_read
WGLEW_EXT_make_current_read = _glewSearchExtension("WGL_EXT_make_current_read", extStart, extEnd);
- if (glewExperimental || WGLEW_EXT_make_current_read|| crippled) WGLEW_EXT_make_current_read= !_glewInit_WGL_EXT_make_current_read(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || WGLEW_EXT_make_current_read|| crippled) WGLEW_EXT_make_current_read= !_glewInit_WGL_EXT_make_current_read();
#endif /* WGL_EXT_make_current_read */
#ifdef WGL_EXT_multisample
WGLEW_EXT_multisample = _glewSearchExtension("WGL_EXT_multisample", extStart, extEnd);
#endif /* WGL_EXT_multisample */
#ifdef WGL_EXT_pbuffer
WGLEW_EXT_pbuffer = _glewSearchExtension("WGL_EXT_pbuffer", extStart, extEnd);
- if (glewExperimental || WGLEW_EXT_pbuffer|| crippled) WGLEW_EXT_pbuffer= !_glewInit_WGL_EXT_pbuffer(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || WGLEW_EXT_pbuffer|| crippled) WGLEW_EXT_pbuffer= !_glewInit_WGL_EXT_pbuffer();
#endif /* WGL_EXT_pbuffer */
#ifdef WGL_EXT_pixel_format
WGLEW_EXT_pixel_format = _glewSearchExtension("WGL_EXT_pixel_format", extStart, extEnd);
- if (glewExperimental || WGLEW_EXT_pixel_format|| crippled) WGLEW_EXT_pixel_format= !_glewInit_WGL_EXT_pixel_format(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || WGLEW_EXT_pixel_format|| crippled) WGLEW_EXT_pixel_format= !_glewInit_WGL_EXT_pixel_format();
#endif /* WGL_EXT_pixel_format */
#ifdef WGL_EXT_pixel_format_packed_float
WGLEW_EXT_pixel_format_packed_float = _glewSearchExtension("WGL_EXT_pixel_format_packed_float", extStart, extEnd);
#endif /* WGL_EXT_pixel_format_packed_float */
#ifdef WGL_EXT_swap_control
WGLEW_EXT_swap_control = _glewSearchExtension("WGL_EXT_swap_control", extStart, extEnd);
- if (glewExperimental || WGLEW_EXT_swap_control|| crippled) WGLEW_EXT_swap_control= !_glewInit_WGL_EXT_swap_control(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || WGLEW_EXT_swap_control|| crippled) WGLEW_EXT_swap_control= !_glewInit_WGL_EXT_swap_control();
#endif /* WGL_EXT_swap_control */
#ifdef WGL_EXT_swap_control_tear
WGLEW_EXT_swap_control_tear = _glewSearchExtension("WGL_EXT_swap_control_tear", extStart, extEnd);
#endif /* WGL_EXT_swap_control_tear */
#ifdef WGL_I3D_digital_video_control
WGLEW_I3D_digital_video_control = _glewSearchExtension("WGL_I3D_digital_video_control", extStart, extEnd);
- if (glewExperimental || WGLEW_I3D_digital_video_control|| crippled) WGLEW_I3D_digital_video_control= !_glewInit_WGL_I3D_digital_video_control(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || WGLEW_I3D_digital_video_control|| crippled) WGLEW_I3D_digital_video_control= !_glewInit_WGL_I3D_digital_video_control();
#endif /* WGL_I3D_digital_video_control */
#ifdef WGL_I3D_gamma
WGLEW_I3D_gamma = _glewSearchExtension("WGL_I3D_gamma", extStart, extEnd);
- if (glewExperimental || WGLEW_I3D_gamma|| crippled) WGLEW_I3D_gamma= !_glewInit_WGL_I3D_gamma(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || WGLEW_I3D_gamma|| crippled) WGLEW_I3D_gamma= !_glewInit_WGL_I3D_gamma();
#endif /* WGL_I3D_gamma */
#ifdef WGL_I3D_genlock
WGLEW_I3D_genlock = _glewSearchExtension("WGL_I3D_genlock", extStart, extEnd);
- if (glewExperimental || WGLEW_I3D_genlock|| crippled) WGLEW_I3D_genlock= !_glewInit_WGL_I3D_genlock(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || WGLEW_I3D_genlock|| crippled) WGLEW_I3D_genlock= !_glewInit_WGL_I3D_genlock();
#endif /* WGL_I3D_genlock */
#ifdef WGL_I3D_image_buffer
WGLEW_I3D_image_buffer = _glewSearchExtension("WGL_I3D_image_buffer", extStart, extEnd);
- if (glewExperimental || WGLEW_I3D_image_buffer|| crippled) WGLEW_I3D_image_buffer= !_glewInit_WGL_I3D_image_buffer(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || WGLEW_I3D_image_buffer|| crippled) WGLEW_I3D_image_buffer= !_glewInit_WGL_I3D_image_buffer();
#endif /* WGL_I3D_image_buffer */
#ifdef WGL_I3D_swap_frame_lock
WGLEW_I3D_swap_frame_lock = _glewSearchExtension("WGL_I3D_swap_frame_lock", extStart, extEnd);
- if (glewExperimental || WGLEW_I3D_swap_frame_lock|| crippled) WGLEW_I3D_swap_frame_lock= !_glewInit_WGL_I3D_swap_frame_lock(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || WGLEW_I3D_swap_frame_lock|| crippled) WGLEW_I3D_swap_frame_lock= !_glewInit_WGL_I3D_swap_frame_lock();
#endif /* WGL_I3D_swap_frame_lock */
#ifdef WGL_I3D_swap_frame_usage
WGLEW_I3D_swap_frame_usage = _glewSearchExtension("WGL_I3D_swap_frame_usage", extStart, extEnd);
- if (glewExperimental || WGLEW_I3D_swap_frame_usage|| crippled) WGLEW_I3D_swap_frame_usage= !_glewInit_WGL_I3D_swap_frame_usage(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || WGLEW_I3D_swap_frame_usage|| crippled) WGLEW_I3D_swap_frame_usage= !_glewInit_WGL_I3D_swap_frame_usage();
#endif /* WGL_I3D_swap_frame_usage */
#ifdef WGL_NV_DX_interop
WGLEW_NV_DX_interop = _glewSearchExtension("WGL_NV_DX_interop", extStart, extEnd);
- if (glewExperimental || WGLEW_NV_DX_interop|| crippled) WGLEW_NV_DX_interop= !_glewInit_WGL_NV_DX_interop(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || WGLEW_NV_DX_interop|| crippled) WGLEW_NV_DX_interop= !_glewInit_WGL_NV_DX_interop();
#endif /* WGL_NV_DX_interop */
#ifdef WGL_NV_DX_interop2
WGLEW_NV_DX_interop2 = _glewSearchExtension("WGL_NV_DX_interop2", extStart, extEnd);
#endif /* WGL_NV_DX_interop2 */
#ifdef WGL_NV_copy_image
WGLEW_NV_copy_image = _glewSearchExtension("WGL_NV_copy_image", extStart, extEnd);
- if (glewExperimental || WGLEW_NV_copy_image|| crippled) WGLEW_NV_copy_image= !_glewInit_WGL_NV_copy_image(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || WGLEW_NV_copy_image|| crippled) WGLEW_NV_copy_image= !_glewInit_WGL_NV_copy_image();
#endif /* WGL_NV_copy_image */
#ifdef WGL_NV_delay_before_swap
WGLEW_NV_delay_before_swap = _glewSearchExtension("WGL_NV_delay_before_swap", extStart, extEnd);
- if (glewExperimental || WGLEW_NV_delay_before_swap|| crippled) WGLEW_NV_delay_before_swap= !_glewInit_WGL_NV_delay_before_swap(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || WGLEW_NV_delay_before_swap|| crippled) WGLEW_NV_delay_before_swap= !_glewInit_WGL_NV_delay_before_swap();
#endif /* WGL_NV_delay_before_swap */
#ifdef WGL_NV_float_buffer
WGLEW_NV_float_buffer = _glewSearchExtension("WGL_NV_float_buffer", extStart, extEnd);
#endif /* WGL_NV_float_buffer */
#ifdef WGL_NV_gpu_affinity
WGLEW_NV_gpu_affinity = _glewSearchExtension("WGL_NV_gpu_affinity", extStart, extEnd);
- if (glewExperimental || WGLEW_NV_gpu_affinity|| crippled) WGLEW_NV_gpu_affinity= !_glewInit_WGL_NV_gpu_affinity(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || WGLEW_NV_gpu_affinity|| crippled) WGLEW_NV_gpu_affinity= !_glewInit_WGL_NV_gpu_affinity();
#endif /* WGL_NV_gpu_affinity */
#ifdef WGL_NV_multisample_coverage
WGLEW_NV_multisample_coverage = _glewSearchExtension("WGL_NV_multisample_coverage", extStart, extEnd);
#endif /* WGL_NV_multisample_coverage */
#ifdef WGL_NV_present_video
WGLEW_NV_present_video = _glewSearchExtension("WGL_NV_present_video", extStart, extEnd);
- if (glewExperimental || WGLEW_NV_present_video|| crippled) WGLEW_NV_present_video= !_glewInit_WGL_NV_present_video(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || WGLEW_NV_present_video|| crippled) WGLEW_NV_present_video= !_glewInit_WGL_NV_present_video();
#endif /* WGL_NV_present_video */
#ifdef WGL_NV_render_depth_texture
WGLEW_NV_render_depth_texture = _glewSearchExtension("WGL_NV_render_depth_texture", extStart, extEnd);
@@ -12283,23 +16687,23 @@ GLenum GLEWAPIENTRY wglewInit (WGLEW_CONTEXT_ARG_DEF_LIST)
#endif /* WGL_NV_render_texture_rectangle */
#ifdef WGL_NV_swap_group
WGLEW_NV_swap_group = _glewSearchExtension("WGL_NV_swap_group", extStart, extEnd);
- if (glewExperimental || WGLEW_NV_swap_group|| crippled) WGLEW_NV_swap_group= !_glewInit_WGL_NV_swap_group(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || WGLEW_NV_swap_group|| crippled) WGLEW_NV_swap_group= !_glewInit_WGL_NV_swap_group();
#endif /* WGL_NV_swap_group */
#ifdef WGL_NV_vertex_array_range
WGLEW_NV_vertex_array_range = _glewSearchExtension("WGL_NV_vertex_array_range", extStart, extEnd);
- if (glewExperimental || WGLEW_NV_vertex_array_range|| crippled) WGLEW_NV_vertex_array_range= !_glewInit_WGL_NV_vertex_array_range(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || WGLEW_NV_vertex_array_range|| crippled) WGLEW_NV_vertex_array_range= !_glewInit_WGL_NV_vertex_array_range();
#endif /* WGL_NV_vertex_array_range */
#ifdef WGL_NV_video_capture
WGLEW_NV_video_capture = _glewSearchExtension("WGL_NV_video_capture", extStart, extEnd);
- if (glewExperimental || WGLEW_NV_video_capture|| crippled) WGLEW_NV_video_capture= !_glewInit_WGL_NV_video_capture(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || WGLEW_NV_video_capture|| crippled) WGLEW_NV_video_capture= !_glewInit_WGL_NV_video_capture();
#endif /* WGL_NV_video_capture */
#ifdef WGL_NV_video_output
WGLEW_NV_video_output = _glewSearchExtension("WGL_NV_video_output", extStart, extEnd);
- if (glewExperimental || WGLEW_NV_video_output|| crippled) WGLEW_NV_video_output= !_glewInit_WGL_NV_video_output(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || WGLEW_NV_video_output|| crippled) WGLEW_NV_video_output= !_glewInit_WGL_NV_video_output();
#endif /* WGL_NV_video_output */
#ifdef WGL_OML_sync_control
WGLEW_OML_sync_control = _glewSearchExtension("WGL_OML_sync_control", extStart, extEnd);
- if (glewExperimental || WGLEW_OML_sync_control|| crippled) WGLEW_OML_sync_control= !_glewInit_WGL_OML_sync_control(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || WGLEW_OML_sync_control|| crippled) WGLEW_OML_sync_control= !_glewInit_WGL_OML_sync_control();
#endif /* WGL_OML_sync_control */
return GLEW_OK;
@@ -12458,8 +16862,6 @@ PFNGLXGETTRANSPARENTINDEXSUNPROC __glewXGetTransparentIndexSUN = NULL;
PFNGLXGETVIDEORESIZESUNPROC __glewXGetVideoResizeSUN = NULL;
PFNGLXVIDEORESIZESUNPROC __glewXVideoResizeSUN = NULL;
-#if !defined(GLEW_MX)
-
GLboolean __GLXEW_VERSION_1_0 = GL_FALSE;
GLboolean __GLXEW_VERSION_1_1 = GL_FALSE;
GLboolean __GLXEW_VERSION_1_2 = GL_FALSE;
@@ -12486,6 +16888,7 @@ GLboolean __GLXEW_EXT_create_context_es_profile = GL_FALSE;
GLboolean __GLXEW_EXT_fbconfig_packed_float = GL_FALSE;
GLboolean __GLXEW_EXT_framebuffer_sRGB = GL_FALSE;
GLboolean __GLXEW_EXT_import_context = GL_FALSE;
+GLboolean __GLXEW_EXT_libglvnd = GL_FALSE;
GLboolean __GLXEW_EXT_scene_marker = GL_FALSE;
GLboolean __GLXEW_EXT_stereo_tree = GL_FALSE;
GLboolean __GLXEW_EXT_swap_control = GL_FALSE;
@@ -12507,6 +16910,7 @@ GLboolean __GLXEW_NV_delay_before_swap = GL_FALSE;
GLboolean __GLXEW_NV_float_buffer = GL_FALSE;
GLboolean __GLXEW_NV_multisample_coverage = GL_FALSE;
GLboolean __GLXEW_NV_present_video = GL_FALSE;
+GLboolean __GLXEW_NV_robustness_video_memory_purge = GL_FALSE;
GLboolean __GLXEW_NV_swap_group = GL_FALSE;
GLboolean __GLXEW_NV_vertex_array_range = GL_FALSE;
GLboolean __GLXEW_NV_video_capture = GL_FALSE;
@@ -12530,12 +16934,9 @@ GLboolean __GLXEW_SGI_swap_control = GL_FALSE;
GLboolean __GLXEW_SGI_video_sync = GL_FALSE;
GLboolean __GLXEW_SUN_get_transparent_index = GL_FALSE;
GLboolean __GLXEW_SUN_video_resize = GL_FALSE;
-
-#endif /* !GLEW_MX */
-
#ifdef GLX_VERSION_1_2
-static GLboolean _glewInit_GLX_VERSION_1_2 (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_VERSION_1_2 ()
{
GLboolean r = GL_FALSE;
@@ -12548,7 +16949,7 @@ static GLboolean _glewInit_GLX_VERSION_1_2 (GLXEW_CONTEXT_ARG_DEF_INIT)
#ifdef GLX_VERSION_1_3
-static GLboolean _glewInit_GLX_VERSION_1_3 (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_VERSION_1_3 ()
{
GLboolean r = GL_FALSE;
@@ -12577,7 +16978,7 @@ static GLboolean _glewInit_GLX_VERSION_1_3 (GLXEW_CONTEXT_ARG_DEF_INIT)
#ifdef GLX_AMD_gpu_association
-static GLboolean _glewInit_GLX_AMD_gpu_association (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_AMD_gpu_association ()
{
GLboolean r = GL_FALSE;
@@ -12598,7 +16999,7 @@ static GLboolean _glewInit_GLX_AMD_gpu_association (GLXEW_CONTEXT_ARG_DEF_INIT)
#ifdef GLX_ARB_create_context
-static GLboolean _glewInit_GLX_ARB_create_context (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_ARB_create_context ()
{
GLboolean r = GL_FALSE;
@@ -12611,7 +17012,7 @@ static GLboolean _glewInit_GLX_ARB_create_context (GLXEW_CONTEXT_ARG_DEF_INIT)
#ifdef GLX_ATI_render_texture
-static GLboolean _glewInit_GLX_ATI_render_texture (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_ATI_render_texture ()
{
GLboolean r = GL_FALSE;
@@ -12626,7 +17027,7 @@ static GLboolean _glewInit_GLX_ATI_render_texture (GLXEW_CONTEXT_ARG_DEF_INIT)
#ifdef GLX_EXT_import_context
-static GLboolean _glewInit_GLX_EXT_import_context (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_EXT_import_context ()
{
GLboolean r = GL_FALSE;
@@ -12642,7 +17043,7 @@ static GLboolean _glewInit_GLX_EXT_import_context (GLXEW_CONTEXT_ARG_DEF_INIT)
#ifdef GLX_EXT_swap_control
-static GLboolean _glewInit_GLX_EXT_swap_control (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_EXT_swap_control ()
{
GLboolean r = GL_FALSE;
@@ -12655,7 +17056,7 @@ static GLboolean _glewInit_GLX_EXT_swap_control (GLXEW_CONTEXT_ARG_DEF_INIT)
#ifdef GLX_EXT_texture_from_pixmap
-static GLboolean _glewInit_GLX_EXT_texture_from_pixmap (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_EXT_texture_from_pixmap ()
{
GLboolean r = GL_FALSE;
@@ -12669,7 +17070,7 @@ static GLboolean _glewInit_GLX_EXT_texture_from_pixmap (GLXEW_CONTEXT_ARG_DEF_IN
#ifdef GLX_MESA_agp_offset
-static GLboolean _glewInit_GLX_MESA_agp_offset (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_MESA_agp_offset ()
{
GLboolean r = GL_FALSE;
@@ -12682,7 +17083,7 @@ static GLboolean _glewInit_GLX_MESA_agp_offset (GLXEW_CONTEXT_ARG_DEF_INIT)
#ifdef GLX_MESA_copy_sub_buffer
-static GLboolean _glewInit_GLX_MESA_copy_sub_buffer (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_MESA_copy_sub_buffer ()
{
GLboolean r = GL_FALSE;
@@ -12695,7 +17096,7 @@ static GLboolean _glewInit_GLX_MESA_copy_sub_buffer (GLXEW_CONTEXT_ARG_DEF_INIT)
#ifdef GLX_MESA_pixmap_colormap
-static GLboolean _glewInit_GLX_MESA_pixmap_colormap (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_MESA_pixmap_colormap ()
{
GLboolean r = GL_FALSE;
@@ -12708,7 +17109,7 @@ static GLboolean _glewInit_GLX_MESA_pixmap_colormap (GLXEW_CONTEXT_ARG_DEF_INIT)
#ifdef GLX_MESA_query_renderer
-static GLboolean _glewInit_GLX_MESA_query_renderer (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_MESA_query_renderer ()
{
GLboolean r = GL_FALSE;
@@ -12724,7 +17125,7 @@ static GLboolean _glewInit_GLX_MESA_query_renderer (GLXEW_CONTEXT_ARG_DEF_INIT)
#ifdef GLX_MESA_release_buffers
-static GLboolean _glewInit_GLX_MESA_release_buffers (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_MESA_release_buffers ()
{
GLboolean r = GL_FALSE;
@@ -12737,7 +17138,7 @@ static GLboolean _glewInit_GLX_MESA_release_buffers (GLXEW_CONTEXT_ARG_DEF_INIT)
#ifdef GLX_MESA_set_3dfx_mode
-static GLboolean _glewInit_GLX_MESA_set_3dfx_mode (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_MESA_set_3dfx_mode ()
{
GLboolean r = GL_FALSE;
@@ -12750,7 +17151,7 @@ static GLboolean _glewInit_GLX_MESA_set_3dfx_mode (GLXEW_CONTEXT_ARG_DEF_INIT)
#ifdef GLX_MESA_swap_control
-static GLboolean _glewInit_GLX_MESA_swap_control (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_MESA_swap_control ()
{
GLboolean r = GL_FALSE;
@@ -12764,7 +17165,7 @@ static GLboolean _glewInit_GLX_MESA_swap_control (GLXEW_CONTEXT_ARG_DEF_INIT)
#ifdef GLX_NV_copy_buffer
-static GLboolean _glewInit_GLX_NV_copy_buffer (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_NV_copy_buffer ()
{
GLboolean r = GL_FALSE;
@@ -12778,7 +17179,7 @@ static GLboolean _glewInit_GLX_NV_copy_buffer (GLXEW_CONTEXT_ARG_DEF_INIT)
#ifdef GLX_NV_copy_image
-static GLboolean _glewInit_GLX_NV_copy_image (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_NV_copy_image ()
{
GLboolean r = GL_FALSE;
@@ -12791,7 +17192,7 @@ static GLboolean _glewInit_GLX_NV_copy_image (GLXEW_CONTEXT_ARG_DEF_INIT)
#ifdef GLX_NV_delay_before_swap
-static GLboolean _glewInit_GLX_NV_delay_before_swap (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_NV_delay_before_swap ()
{
GLboolean r = GL_FALSE;
@@ -12804,7 +17205,7 @@ static GLboolean _glewInit_GLX_NV_delay_before_swap (GLXEW_CONTEXT_ARG_DEF_INIT)
#ifdef GLX_NV_present_video
-static GLboolean _glewInit_GLX_NV_present_video (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_NV_present_video ()
{
GLboolean r = GL_FALSE;
@@ -12818,7 +17219,7 @@ static GLboolean _glewInit_GLX_NV_present_video (GLXEW_CONTEXT_ARG_DEF_INIT)
#ifdef GLX_NV_swap_group
-static GLboolean _glewInit_GLX_NV_swap_group (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_NV_swap_group ()
{
GLboolean r = GL_FALSE;
@@ -12836,7 +17237,7 @@ static GLboolean _glewInit_GLX_NV_swap_group (GLXEW_CONTEXT_ARG_DEF_INIT)
#ifdef GLX_NV_vertex_array_range
-static GLboolean _glewInit_GLX_NV_vertex_array_range (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_NV_vertex_array_range ()
{
GLboolean r = GL_FALSE;
@@ -12850,7 +17251,7 @@ static GLboolean _glewInit_GLX_NV_vertex_array_range (GLXEW_CONTEXT_ARG_DEF_INIT
#ifdef GLX_NV_video_capture
-static GLboolean _glewInit_GLX_NV_video_capture (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_NV_video_capture ()
{
GLboolean r = GL_FALSE;
@@ -12867,7 +17268,7 @@ static GLboolean _glewInit_GLX_NV_video_capture (GLXEW_CONTEXT_ARG_DEF_INIT)
#ifdef GLX_NV_video_out
-static GLboolean _glewInit_GLX_NV_video_out (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_NV_video_out ()
{
GLboolean r = GL_FALSE;
@@ -12885,7 +17286,7 @@ static GLboolean _glewInit_GLX_NV_video_out (GLXEW_CONTEXT_ARG_DEF_INIT)
#ifdef GLX_OML_sync_control
-static GLboolean _glewInit_GLX_OML_sync_control (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_OML_sync_control ()
{
GLboolean r = GL_FALSE;
@@ -12902,7 +17303,7 @@ static GLboolean _glewInit_GLX_OML_sync_control (GLXEW_CONTEXT_ARG_DEF_INIT)
#ifdef GLX_SGIX_fbconfig
-static GLboolean _glewInit_GLX_SGIX_fbconfig (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_SGIX_fbconfig ()
{
GLboolean r = GL_FALSE;
@@ -12920,7 +17321,7 @@ static GLboolean _glewInit_GLX_SGIX_fbconfig (GLXEW_CONTEXT_ARG_DEF_INIT)
#ifdef GLX_SGIX_hyperpipe
-static GLboolean _glewInit_GLX_SGIX_hyperpipe (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_SGIX_hyperpipe ()
{
GLboolean r = GL_FALSE;
@@ -12940,7 +17341,7 @@ static GLboolean _glewInit_GLX_SGIX_hyperpipe (GLXEW_CONTEXT_ARG_DEF_INIT)
#ifdef GLX_SGIX_pbuffer
-static GLboolean _glewInit_GLX_SGIX_pbuffer (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_SGIX_pbuffer ()
{
GLboolean r = GL_FALSE;
@@ -12957,7 +17358,7 @@ static GLboolean _glewInit_GLX_SGIX_pbuffer (GLXEW_CONTEXT_ARG_DEF_INIT)
#ifdef GLX_SGIX_swap_barrier
-static GLboolean _glewInit_GLX_SGIX_swap_barrier (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_SGIX_swap_barrier ()
{
GLboolean r = GL_FALSE;
@@ -12971,7 +17372,7 @@ static GLboolean _glewInit_GLX_SGIX_swap_barrier (GLXEW_CONTEXT_ARG_DEF_INIT)
#ifdef GLX_SGIX_swap_group
-static GLboolean _glewInit_GLX_SGIX_swap_group (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_SGIX_swap_group ()
{
GLboolean r = GL_FALSE;
@@ -12984,7 +17385,7 @@ static GLboolean _glewInit_GLX_SGIX_swap_group (GLXEW_CONTEXT_ARG_DEF_INIT)
#ifdef GLX_SGIX_video_resize
-static GLboolean _glewInit_GLX_SGIX_video_resize (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_SGIX_video_resize ()
{
GLboolean r = GL_FALSE;
@@ -13001,7 +17402,7 @@ static GLboolean _glewInit_GLX_SGIX_video_resize (GLXEW_CONTEXT_ARG_DEF_INIT)
#ifdef GLX_SGI_cushion
-static GLboolean _glewInit_GLX_SGI_cushion (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_SGI_cushion ()
{
GLboolean r = GL_FALSE;
@@ -13014,7 +17415,7 @@ static GLboolean _glewInit_GLX_SGI_cushion (GLXEW_CONTEXT_ARG_DEF_INIT)
#ifdef GLX_SGI_make_current_read
-static GLboolean _glewInit_GLX_SGI_make_current_read (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_SGI_make_current_read ()
{
GLboolean r = GL_FALSE;
@@ -13028,7 +17429,7 @@ static GLboolean _glewInit_GLX_SGI_make_current_read (GLXEW_CONTEXT_ARG_DEF_INIT
#ifdef GLX_SGI_swap_control
-static GLboolean _glewInit_GLX_SGI_swap_control (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_SGI_swap_control ()
{
GLboolean r = GL_FALSE;
@@ -13041,7 +17442,7 @@ static GLboolean _glewInit_GLX_SGI_swap_control (GLXEW_CONTEXT_ARG_DEF_INIT)
#ifdef GLX_SGI_video_sync
-static GLboolean _glewInit_GLX_SGI_video_sync (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_SGI_video_sync ()
{
GLboolean r = GL_FALSE;
@@ -13055,7 +17456,7 @@ static GLboolean _glewInit_GLX_SGI_video_sync (GLXEW_CONTEXT_ARG_DEF_INIT)
#ifdef GLX_SUN_get_transparent_index
-static GLboolean _glewInit_GLX_SUN_get_transparent_index (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_SUN_get_transparent_index ()
{
GLboolean r = GL_FALSE;
@@ -13068,7 +17469,7 @@ static GLboolean _glewInit_GLX_SUN_get_transparent_index (GLXEW_CONTEXT_ARG_DEF_
#ifdef GLX_SUN_video_resize
-static GLboolean _glewInit_GLX_SUN_video_resize (GLXEW_CONTEXT_ARG_DEF_INIT)
+static GLboolean _glewInit_GLX_SUN_video_resize ()
{
GLboolean r = GL_FALSE;
@@ -13094,17 +17495,13 @@ GLboolean glxewGetExtension (const char* name)
return _glewSearchExtension(name, start, end);
}
-#ifdef GLEW_MX
-GLenum glxewContextInit (GLXEW_CONTEXT_ARG_DEF_LIST)
-#else
-GLenum glxewInit (GLXEW_CONTEXT_ARG_DEF_LIST)
-#endif
+GLenum glxewInit ()
{
int major, minor;
const GLubyte* extStart;
const GLubyte* extEnd;
/* initialize core GLX 1.2 */
- if (_glewInit_GLX_VERSION_1_2(GLEW_CONTEXT_ARG_VAR_INIT)) return GLEW_ERROR_GLX_VERSION_11_ONLY;
+ if (_glewInit_GLX_VERSION_1_2()) return GLEW_ERROR_GLX_VERSION_11_ONLY;
/* initialize flags */
GLXEW_VERSION_1_0 = GL_TRUE;
GLXEW_VERSION_1_1 = GL_TRUE;
@@ -13138,21 +17535,21 @@ GLenum glxewInit (GLXEW_CONTEXT_ARG_DEF_LIST)
extEnd = extStart + _glewStrLen(extStart);
/* initialize extensions */
#ifdef GLX_VERSION_1_3
- if (glewExperimental || GLXEW_VERSION_1_3) GLXEW_VERSION_1_3 = !_glewInit_GLX_VERSION_1_3(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_VERSION_1_3) GLXEW_VERSION_1_3 = !_glewInit_GLX_VERSION_1_3();
#endif /* GLX_VERSION_1_3 */
#ifdef GLX_3DFX_multisample
GLXEW_3DFX_multisample = _glewSearchExtension("GLX_3DFX_multisample", extStart, extEnd);
#endif /* GLX_3DFX_multisample */
#ifdef GLX_AMD_gpu_association
GLXEW_AMD_gpu_association = _glewSearchExtension("GLX_AMD_gpu_association", extStart, extEnd);
- if (glewExperimental || GLXEW_AMD_gpu_association) GLXEW_AMD_gpu_association = !_glewInit_GLX_AMD_gpu_association(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_AMD_gpu_association) GLXEW_AMD_gpu_association = !_glewInit_GLX_AMD_gpu_association();
#endif /* GLX_AMD_gpu_association */
#ifdef GLX_ARB_context_flush_control
GLXEW_ARB_context_flush_control = _glewSearchExtension("GLX_ARB_context_flush_control", extStart, extEnd);
#endif /* GLX_ARB_context_flush_control */
#ifdef GLX_ARB_create_context
GLXEW_ARB_create_context = _glewSearchExtension("GLX_ARB_create_context", extStart, extEnd);
- if (glewExperimental || GLXEW_ARB_create_context) GLXEW_ARB_create_context = !_glewInit_GLX_ARB_create_context(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_ARB_create_context) GLXEW_ARB_create_context = !_glewInit_GLX_ARB_create_context();
#endif /* GLX_ARB_create_context */
#ifdef GLX_ARB_create_context_profile
GLXEW_ARB_create_context_profile = _glewSearchExtension("GLX_ARB_create_context_profile", extStart, extEnd);
@@ -13186,7 +17583,7 @@ GLenum glxewInit (GLXEW_CONTEXT_ARG_DEF_LIST)
#endif /* GLX_ATI_pixel_format_float */
#ifdef GLX_ATI_render_texture
GLXEW_ATI_render_texture = _glewSearchExtension("GLX_ATI_render_texture", extStart, extEnd);
- if (glewExperimental || GLXEW_ATI_render_texture) GLXEW_ATI_render_texture = !_glewInit_GLX_ATI_render_texture(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_ATI_render_texture) GLXEW_ATI_render_texture = !_glewInit_GLX_ATI_render_texture();
#endif /* GLX_ATI_render_texture */
#ifdef GLX_EXT_buffer_age
GLXEW_EXT_buffer_age = _glewSearchExtension("GLX_EXT_buffer_age", extStart, extEnd);
@@ -13205,8 +17602,11 @@ GLenum glxewInit (GLXEW_CONTEXT_ARG_DEF_LIST)
#endif /* GLX_EXT_framebuffer_sRGB */
#ifdef GLX_EXT_import_context
GLXEW_EXT_import_context = _glewSearchExtension("GLX_EXT_import_context", extStart, extEnd);
- if (glewExperimental || GLXEW_EXT_import_context) GLXEW_EXT_import_context = !_glewInit_GLX_EXT_import_context(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_EXT_import_context) GLXEW_EXT_import_context = !_glewInit_GLX_EXT_import_context();
#endif /* GLX_EXT_import_context */
+#ifdef GLX_EXT_libglvnd
+ GLXEW_EXT_libglvnd = _glewSearchExtension("GLX_EXT_libglvnd", extStart, extEnd);
+#endif /* GLX_EXT_libglvnd */
#ifdef GLX_EXT_scene_marker
GLXEW_EXT_scene_marker = _glewSearchExtension("GLX_EXT_scene_marker", extStart, extEnd);
#endif /* GLX_EXT_scene_marker */
@@ -13215,14 +17615,14 @@ GLenum glxewInit (GLXEW_CONTEXT_ARG_DEF_LIST)
#endif /* GLX_EXT_stereo_tree */
#ifdef GLX_EXT_swap_control
GLXEW_EXT_swap_control = _glewSearchExtension("GLX_EXT_swap_control", extStart, extEnd);
- if (glewExperimental || GLXEW_EXT_swap_control) GLXEW_EXT_swap_control = !_glewInit_GLX_EXT_swap_control(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_EXT_swap_control) GLXEW_EXT_swap_control = !_glewInit_GLX_EXT_swap_control();
#endif /* GLX_EXT_swap_control */
#ifdef GLX_EXT_swap_control_tear
GLXEW_EXT_swap_control_tear = _glewSearchExtension("GLX_EXT_swap_control_tear", extStart, extEnd);
#endif /* GLX_EXT_swap_control_tear */
#ifdef GLX_EXT_texture_from_pixmap
GLXEW_EXT_texture_from_pixmap = _glewSearchExtension("GLX_EXT_texture_from_pixmap", extStart, extEnd);
- if (glewExperimental || GLXEW_EXT_texture_from_pixmap) GLXEW_EXT_texture_from_pixmap = !_glewInit_GLX_EXT_texture_from_pixmap(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_EXT_texture_from_pixmap) GLXEW_EXT_texture_from_pixmap = !_glewInit_GLX_EXT_texture_from_pixmap();
#endif /* GLX_EXT_texture_from_pixmap */
#ifdef GLX_EXT_visual_info
GLXEW_EXT_visual_info = _glewSearchExtension("GLX_EXT_visual_info", extStart, extEnd);
@@ -13235,43 +17635,43 @@ GLenum glxewInit (GLXEW_CONTEXT_ARG_DEF_LIST)
#endif /* GLX_INTEL_swap_event */
#ifdef GLX_MESA_agp_offset
GLXEW_MESA_agp_offset = _glewSearchExtension("GLX_MESA_agp_offset", extStart, extEnd);
- if (glewExperimental || GLXEW_MESA_agp_offset) GLXEW_MESA_agp_offset = !_glewInit_GLX_MESA_agp_offset(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_MESA_agp_offset) GLXEW_MESA_agp_offset = !_glewInit_GLX_MESA_agp_offset();
#endif /* GLX_MESA_agp_offset */
#ifdef GLX_MESA_copy_sub_buffer
GLXEW_MESA_copy_sub_buffer = _glewSearchExtension("GLX_MESA_copy_sub_buffer", extStart, extEnd);
- if (glewExperimental || GLXEW_MESA_copy_sub_buffer) GLXEW_MESA_copy_sub_buffer = !_glewInit_GLX_MESA_copy_sub_buffer(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_MESA_copy_sub_buffer) GLXEW_MESA_copy_sub_buffer = !_glewInit_GLX_MESA_copy_sub_buffer();
#endif /* GLX_MESA_copy_sub_buffer */
#ifdef GLX_MESA_pixmap_colormap
GLXEW_MESA_pixmap_colormap = _glewSearchExtension("GLX_MESA_pixmap_colormap", extStart, extEnd);
- if (glewExperimental || GLXEW_MESA_pixmap_colormap) GLXEW_MESA_pixmap_colormap = !_glewInit_GLX_MESA_pixmap_colormap(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_MESA_pixmap_colormap) GLXEW_MESA_pixmap_colormap = !_glewInit_GLX_MESA_pixmap_colormap();
#endif /* GLX_MESA_pixmap_colormap */
#ifdef GLX_MESA_query_renderer
GLXEW_MESA_query_renderer = _glewSearchExtension("GLX_MESA_query_renderer", extStart, extEnd);
- if (glewExperimental || GLXEW_MESA_query_renderer) GLXEW_MESA_query_renderer = !_glewInit_GLX_MESA_query_renderer(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_MESA_query_renderer) GLXEW_MESA_query_renderer = !_glewInit_GLX_MESA_query_renderer();
#endif /* GLX_MESA_query_renderer */
#ifdef GLX_MESA_release_buffers
GLXEW_MESA_release_buffers = _glewSearchExtension("GLX_MESA_release_buffers", extStart, extEnd);
- if (glewExperimental || GLXEW_MESA_release_buffers) GLXEW_MESA_release_buffers = !_glewInit_GLX_MESA_release_buffers(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_MESA_release_buffers) GLXEW_MESA_release_buffers = !_glewInit_GLX_MESA_release_buffers();
#endif /* GLX_MESA_release_buffers */
#ifdef GLX_MESA_set_3dfx_mode
GLXEW_MESA_set_3dfx_mode = _glewSearchExtension("GLX_MESA_set_3dfx_mode", extStart, extEnd);
- if (glewExperimental || GLXEW_MESA_set_3dfx_mode) GLXEW_MESA_set_3dfx_mode = !_glewInit_GLX_MESA_set_3dfx_mode(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_MESA_set_3dfx_mode) GLXEW_MESA_set_3dfx_mode = !_glewInit_GLX_MESA_set_3dfx_mode();
#endif /* GLX_MESA_set_3dfx_mode */
#ifdef GLX_MESA_swap_control
GLXEW_MESA_swap_control = _glewSearchExtension("GLX_MESA_swap_control", extStart, extEnd);
- if (glewExperimental || GLXEW_MESA_swap_control) GLXEW_MESA_swap_control = !_glewInit_GLX_MESA_swap_control(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_MESA_swap_control) GLXEW_MESA_swap_control = !_glewInit_GLX_MESA_swap_control();
#endif /* GLX_MESA_swap_control */
#ifdef GLX_NV_copy_buffer
GLXEW_NV_copy_buffer = _glewSearchExtension("GLX_NV_copy_buffer", extStart, extEnd);
- if (glewExperimental || GLXEW_NV_copy_buffer) GLXEW_NV_copy_buffer = !_glewInit_GLX_NV_copy_buffer(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_NV_copy_buffer) GLXEW_NV_copy_buffer = !_glewInit_GLX_NV_copy_buffer();
#endif /* GLX_NV_copy_buffer */
#ifdef GLX_NV_copy_image
GLXEW_NV_copy_image = _glewSearchExtension("GLX_NV_copy_image", extStart, extEnd);
- if (glewExperimental || GLXEW_NV_copy_image) GLXEW_NV_copy_image = !_glewInit_GLX_NV_copy_image(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_NV_copy_image) GLXEW_NV_copy_image = !_glewInit_GLX_NV_copy_image();
#endif /* GLX_NV_copy_image */
#ifdef GLX_NV_delay_before_swap
GLXEW_NV_delay_before_swap = _glewSearchExtension("GLX_NV_delay_before_swap", extStart, extEnd);
- if (glewExperimental || GLXEW_NV_delay_before_swap) GLXEW_NV_delay_before_swap = !_glewInit_GLX_NV_delay_before_swap(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_NV_delay_before_swap) GLXEW_NV_delay_before_swap = !_glewInit_GLX_NV_delay_before_swap();
#endif /* GLX_NV_delay_before_swap */
#ifdef GLX_NV_float_buffer
GLXEW_NV_float_buffer = _glewSearchExtension("GLX_NV_float_buffer", extStart, extEnd);
@@ -13281,30 +17681,33 @@ GLenum glxewInit (GLXEW_CONTEXT_ARG_DEF_LIST)
#endif /* GLX_NV_multisample_coverage */
#ifdef GLX_NV_present_video
GLXEW_NV_present_video = _glewSearchExtension("GLX_NV_present_video", extStart, extEnd);
- if (glewExperimental || GLXEW_NV_present_video) GLXEW_NV_present_video = !_glewInit_GLX_NV_present_video(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_NV_present_video) GLXEW_NV_present_video = !_glewInit_GLX_NV_present_video();
#endif /* GLX_NV_present_video */
+#ifdef GLX_NV_robustness_video_memory_purge
+ GLXEW_NV_robustness_video_memory_purge = _glewSearchExtension("GLX_NV_robustness_video_memory_purge", extStart, extEnd);
+#endif /* GLX_NV_robustness_video_memory_purge */
#ifdef GLX_NV_swap_group
GLXEW_NV_swap_group = _glewSearchExtension("GLX_NV_swap_group", extStart, extEnd);
- if (glewExperimental || GLXEW_NV_swap_group) GLXEW_NV_swap_group = !_glewInit_GLX_NV_swap_group(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_NV_swap_group) GLXEW_NV_swap_group = !_glewInit_GLX_NV_swap_group();
#endif /* GLX_NV_swap_group */
#ifdef GLX_NV_vertex_array_range
GLXEW_NV_vertex_array_range = _glewSearchExtension("GLX_NV_vertex_array_range", extStart, extEnd);
- if (glewExperimental || GLXEW_NV_vertex_array_range) GLXEW_NV_vertex_array_range = !_glewInit_GLX_NV_vertex_array_range(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_NV_vertex_array_range) GLXEW_NV_vertex_array_range = !_glewInit_GLX_NV_vertex_array_range();
#endif /* GLX_NV_vertex_array_range */
#ifdef GLX_NV_video_capture
GLXEW_NV_video_capture = _glewSearchExtension("GLX_NV_video_capture", extStart, extEnd);
- if (glewExperimental || GLXEW_NV_video_capture) GLXEW_NV_video_capture = !_glewInit_GLX_NV_video_capture(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_NV_video_capture) GLXEW_NV_video_capture = !_glewInit_GLX_NV_video_capture();
#endif /* GLX_NV_video_capture */
#ifdef GLX_NV_video_out
GLXEW_NV_video_out = _glewSearchExtension("GLX_NV_video_out", extStart, extEnd);
- if (glewExperimental || GLXEW_NV_video_out) GLXEW_NV_video_out = !_glewInit_GLX_NV_video_out(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_NV_video_out) GLXEW_NV_video_out = !_glewInit_GLX_NV_video_out();
#endif /* GLX_NV_video_out */
#ifdef GLX_OML_swap_method
GLXEW_OML_swap_method = _glewSearchExtension("GLX_OML_swap_method", extStart, extEnd);
#endif /* GLX_OML_swap_method */
#ifdef GLX_OML_sync_control
GLXEW_OML_sync_control = _glewSearchExtension("GLX_OML_sync_control", extStart, extEnd);
- if (glewExperimental || GLXEW_OML_sync_control) GLXEW_OML_sync_control = !_glewInit_GLX_OML_sync_control(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_OML_sync_control) GLXEW_OML_sync_control = !_glewInit_GLX_OML_sync_control();
#endif /* GLX_OML_sync_control */
#ifdef GLX_SGIS_blended_overlay
GLXEW_SGIS_blended_overlay = _glewSearchExtension("GLX_SGIS_blended_overlay", extStart, extEnd);
@@ -13320,54 +17723,54 @@ GLenum glxewInit (GLXEW_CONTEXT_ARG_DEF_LIST)
#endif /* GLX_SGIS_shared_multisample */
#ifdef GLX_SGIX_fbconfig
GLXEW_SGIX_fbconfig = _glewSearchExtension("GLX_SGIX_fbconfig", extStart, extEnd);
- if (glewExperimental || GLXEW_SGIX_fbconfig) GLXEW_SGIX_fbconfig = !_glewInit_GLX_SGIX_fbconfig(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_SGIX_fbconfig) GLXEW_SGIX_fbconfig = !_glewInit_GLX_SGIX_fbconfig();
#endif /* GLX_SGIX_fbconfig */
#ifdef GLX_SGIX_hyperpipe
GLXEW_SGIX_hyperpipe = _glewSearchExtension("GLX_SGIX_hyperpipe", extStart, extEnd);
- if (glewExperimental || GLXEW_SGIX_hyperpipe) GLXEW_SGIX_hyperpipe = !_glewInit_GLX_SGIX_hyperpipe(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_SGIX_hyperpipe) GLXEW_SGIX_hyperpipe = !_glewInit_GLX_SGIX_hyperpipe();
#endif /* GLX_SGIX_hyperpipe */
#ifdef GLX_SGIX_pbuffer
GLXEW_SGIX_pbuffer = _glewSearchExtension("GLX_SGIX_pbuffer", extStart, extEnd);
- if (glewExperimental || GLXEW_SGIX_pbuffer) GLXEW_SGIX_pbuffer = !_glewInit_GLX_SGIX_pbuffer(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_SGIX_pbuffer) GLXEW_SGIX_pbuffer = !_glewInit_GLX_SGIX_pbuffer();
#endif /* GLX_SGIX_pbuffer */
#ifdef GLX_SGIX_swap_barrier
GLXEW_SGIX_swap_barrier = _glewSearchExtension("GLX_SGIX_swap_barrier", extStart, extEnd);
- if (glewExperimental || GLXEW_SGIX_swap_barrier) GLXEW_SGIX_swap_barrier = !_glewInit_GLX_SGIX_swap_barrier(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_SGIX_swap_barrier) GLXEW_SGIX_swap_barrier = !_glewInit_GLX_SGIX_swap_barrier();
#endif /* GLX_SGIX_swap_barrier */
#ifdef GLX_SGIX_swap_group
GLXEW_SGIX_swap_group = _glewSearchExtension("GLX_SGIX_swap_group", extStart, extEnd);
- if (glewExperimental || GLXEW_SGIX_swap_group) GLXEW_SGIX_swap_group = !_glewInit_GLX_SGIX_swap_group(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_SGIX_swap_group) GLXEW_SGIX_swap_group = !_glewInit_GLX_SGIX_swap_group();
#endif /* GLX_SGIX_swap_group */
#ifdef GLX_SGIX_video_resize
GLXEW_SGIX_video_resize = _glewSearchExtension("GLX_SGIX_video_resize", extStart, extEnd);
- if (glewExperimental || GLXEW_SGIX_video_resize) GLXEW_SGIX_video_resize = !_glewInit_GLX_SGIX_video_resize(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_SGIX_video_resize) GLXEW_SGIX_video_resize = !_glewInit_GLX_SGIX_video_resize();
#endif /* GLX_SGIX_video_resize */
#ifdef GLX_SGIX_visual_select_group
GLXEW_SGIX_visual_select_group = _glewSearchExtension("GLX_SGIX_visual_select_group", extStart, extEnd);
#endif /* GLX_SGIX_visual_select_group */
#ifdef GLX_SGI_cushion
GLXEW_SGI_cushion = _glewSearchExtension("GLX_SGI_cushion", extStart, extEnd);
- if (glewExperimental || GLXEW_SGI_cushion) GLXEW_SGI_cushion = !_glewInit_GLX_SGI_cushion(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_SGI_cushion) GLXEW_SGI_cushion = !_glewInit_GLX_SGI_cushion();
#endif /* GLX_SGI_cushion */
#ifdef GLX_SGI_make_current_read
GLXEW_SGI_make_current_read = _glewSearchExtension("GLX_SGI_make_current_read", extStart, extEnd);
- if (glewExperimental || GLXEW_SGI_make_current_read) GLXEW_SGI_make_current_read = !_glewInit_GLX_SGI_make_current_read(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_SGI_make_current_read) GLXEW_SGI_make_current_read = !_glewInit_GLX_SGI_make_current_read();
#endif /* GLX_SGI_make_current_read */
#ifdef GLX_SGI_swap_control
GLXEW_SGI_swap_control = _glewSearchExtension("GLX_SGI_swap_control", extStart, extEnd);
- if (glewExperimental || GLXEW_SGI_swap_control) GLXEW_SGI_swap_control = !_glewInit_GLX_SGI_swap_control(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_SGI_swap_control) GLXEW_SGI_swap_control = !_glewInit_GLX_SGI_swap_control();
#endif /* GLX_SGI_swap_control */
#ifdef GLX_SGI_video_sync
GLXEW_SGI_video_sync = _glewSearchExtension("GLX_SGI_video_sync", extStart, extEnd);
- if (glewExperimental || GLXEW_SGI_video_sync) GLXEW_SGI_video_sync = !_glewInit_GLX_SGI_video_sync(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_SGI_video_sync) GLXEW_SGI_video_sync = !_glewInit_GLX_SGI_video_sync();
#endif /* GLX_SGI_video_sync */
#ifdef GLX_SUN_get_transparent_index
GLXEW_SUN_get_transparent_index = _glewSearchExtension("GLX_SUN_get_transparent_index", extStart, extEnd);
- if (glewExperimental || GLXEW_SUN_get_transparent_index) GLXEW_SUN_get_transparent_index = !_glewInit_GLX_SUN_get_transparent_index(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_SUN_get_transparent_index) GLXEW_SUN_get_transparent_index = !_glewInit_GLX_SUN_get_transparent_index();
#endif /* GLX_SUN_get_transparent_index */
#ifdef GLX_SUN_video_resize
GLXEW_SUN_video_resize = _glewSearchExtension("GLX_SUN_video_resize", extStart, extEnd);
- if (glewExperimental || GLXEW_SUN_video_resize) GLXEW_SUN_video_resize = !_glewInit_GLX_SUN_video_resize(GLEW_CONTEXT_ARG_VAR_INIT);
+ if (glewExperimental || GLXEW_SUN_video_resize) GLXEW_SUN_video_resize = !_glewInit_GLX_SUN_video_resize();
#endif /* GLX_SUN_video_resize */
return GLEW_OK;
@@ -13396,9 +17799,9 @@ const GLubyte * GLEWAPIENTRY glewGetString (GLenum name)
static const GLubyte* _glewString[] =
{
(const GLubyte*)NULL,
- (const GLubyte*)"1.13.0",
- (const GLubyte*)"1",
- (const GLubyte*)"13",
+ (const GLubyte*)"2.0.0",
+ (const GLubyte*)"2",
+ (const GLubyte*)"0",
(const GLubyte*)"0"
};
const size_t max_string = sizeof(_glewString)/sizeof(*_glewString) - 1;
@@ -13409,28 +17812,40 @@ const GLubyte * GLEWAPIENTRY glewGetString (GLenum name)
GLboolean glewExperimental = GL_FALSE;
-#if !defined(GLEW_MX)
-
GLenum GLEWAPIENTRY glewInit (void)
{
GLenum r;
+#if defined(GLEW_EGL)
+ PFNEGLGETCURRENTDISPLAYPROC getCurrentDisplay = NULL;
+#endif
r = glewContextInit();
if ( r != 0 ) return r;
-#if defined(_WIN32)
+#if defined(GLEW_EGL)
+ getCurrentDisplay = (PFNEGLGETCURRENTDISPLAYPROC) glewGetProcAddress("eglGetCurrentDisplay");
+ return eglewInit(getCurrentDisplay());
+#elif defined(GLEW_OSMESA) || defined(__ANDROID__) || defined(__native_client__) || defined(__HAIKU__)
+ return r;
+#elif defined(_WIN32)
return wglewInit();
-#elif !defined(__ANDROID__) && !defined(__native_client__) && !defined(__HAIKU__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) /* _UNIX */
+#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) /* _UNIX */
return glxewInit();
#else
return r;
#endif /* _WIN32 */
}
-#endif /* !GLEW_MX */
-#ifdef GLEW_MX
-GLboolean GLEWAPIENTRY glewContextIsSupported (const GLEWContext* ctx, const char* name)
-#else
-GLboolean GLEWAPIENTRY glewIsSupported (const char* name)
+#if defined(_WIN32) && defined(GLEW_BUILD) && defined(__GNUC__)
+/* GCC requires a DLL entry point even without any standard library included. */
+/* Types extracted from windows.h to avoid polluting the rest of the file. */
+int __stdcall DllMainCRTStartup(void* instance, unsigned reason, void* reserved)
+{
+ (void) instance;
+ (void) reason;
+ (void) reserved;
+ return 1;
+}
#endif
+GLboolean GLEWAPIENTRY glewIsSupported (const char* name)
{
const GLubyte* pos = (const GLubyte*)name;
GLuint len = _glewStrLen(pos);
@@ -13706,6 +18121,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name)
continue;
}
#endif
+#ifdef GL_AMD_shader_explicit_vertex_parameter
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_explicit_vertex_parameter", 32))
+ {
+ ret = GLEW_AMD_shader_explicit_vertex_parameter;
+ continue;
+ }
+#endif
#ifdef GL_AMD_shader_stencil_export
if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_stencil_export", 21))
{
@@ -14338,6 +18760,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name)
continue;
}
#endif
+#ifdef GL_ARB_gl_spirv
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"gl_spirv", 8))
+ {
+ ret = GLEW_ARB_gl_spirv;
+ continue;
+ }
+#endif
#ifdef GL_ARB_gpu_shader5
if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_shader5", 11))
{
@@ -15325,6 +19754,16 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name)
}
#endif
}
+ if (_glewStrSame2(&pos, &len, (const GLubyte*)"EGL_", 4))
+ {
+#ifdef GL_EGL_NV_robustness_video_memory_purge
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"NV_robustness_video_memory_purge", 32))
+ {
+ ret = GLEW_EGL_NV_robustness_video_memory_purge;
+ continue;
+ }
+#endif
+ }
if (_glewStrSame2(&pos, &len, (const GLubyte*)"EXT_", 4))
{
#ifdef GL_EXT_422_pixels
@@ -16076,6 +20515,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name)
continue;
}
#endif
+#ifdef GL_EXT_window_rectangles
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"window_rectangles", 17))
+ {
+ ret = GLEW_EXT_window_rectangles;
+ continue;
+ }
+#endif
#ifdef GL_EXT_x11_sync_object
if (_glewStrSame3(&pos, &len, (const GLubyte*)"x11_sync_object", 15))
{
@@ -16196,6 +20642,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name)
}
if (_glewStrSame2(&pos, &len, (const GLubyte*)"INTEL_", 6))
{
+#ifdef GL_INTEL_conservative_rasterization
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"conservative_rasterization", 26))
+ {
+ ret = GLEW_INTEL_conservative_rasterization;
+ continue;
+ }
+#endif
#ifdef GL_INTEL_fragment_shader_ordering
if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_shader_ordering", 24))
{
@@ -16304,6 +20757,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name)
continue;
}
#endif
+#ifdef GL_KHR_texture_compression_astc_sliced_3d
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_astc_sliced_3d", 34))
+ {
+ ret = GLEW_KHR_texture_compression_astc_sliced_3d;
+ continue;
+ }
+#endif
}
if (_glewStrSame2(&pos, &len, (const GLubyte*)"KTX_", 4))
{
@@ -16341,6 +20801,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name)
continue;
}
#endif
+#ifdef GL_MESA_shader_integer_functions
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_integer_functions", 24))
+ {
+ ret = GLEW_MESA_shader_integer_functions;
+ continue;
+ }
+#endif
#ifdef GL_MESA_window_pos
if (_glewStrSame3(&pos, &len, (const GLubyte*)"window_pos", 10))
{
@@ -16358,6 +20825,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name)
}
if (_glewStrSame2(&pos, &len, (const GLubyte*)"NVX_", 4))
{
+#ifdef GL_NVX_blend_equation_advanced_multi_draw_buffers
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_equation_advanced_multi_draw_buffers", 42))
+ {
+ ret = GLEW_NVX_blend_equation_advanced_multi_draw_buffers;
+ continue;
+ }
+#endif
#ifdef GL_NVX_conditional_render
if (_glewStrSame3(&pos, &len, (const GLubyte*)"conditional_render", 18))
{
@@ -16372,6 +20846,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name)
continue;
}
#endif
+#ifdef GL_NVX_linked_gpu_multicast
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"linked_gpu_multicast", 20))
+ {
+ ret = GLEW_NVX_linked_gpu_multicast;
+ continue;
+ }
+#endif
}
if (_glewStrSame2(&pos, &len, (const GLubyte*)"NV_", 3))
{
@@ -16417,6 +20898,20 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name)
continue;
}
#endif
+#ifdef GL_NV_clip_space_w_scaling
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"clip_space_w_scaling", 20))
+ {
+ ret = GLEW_NV_clip_space_w_scaling;
+ continue;
+ }
+#endif
+#ifdef GL_NV_command_list
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"command_list", 12))
+ {
+ ret = GLEW_NV_command_list;
+ continue;
+ }
+#endif
#ifdef GL_NV_compute_program5
if (_glewStrSame3(&pos, &len, (const GLubyte*)"compute_program5", 16))
{
@@ -16445,6 +20940,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name)
continue;
}
#endif
+#ifdef GL_NV_conservative_raster_pre_snap_triangles
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"conservative_raster_pre_snap_triangles", 38))
+ {
+ ret = GLEW_NV_conservative_raster_pre_snap_triangles;
+ continue;
+ }
+#endif
#ifdef GL_NV_copy_depth_to_color
if (_glewStrSame3(&pos, &len, (const GLubyte*)"copy_depth_to_color", 19))
{
@@ -16494,6 +20996,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name)
continue;
}
#endif
+#ifdef GL_NV_draw_vulkan_image
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_vulkan_image", 17))
+ {
+ ret = GLEW_NV_draw_vulkan_image;
+ continue;
+ }
+#endif
#ifdef GL_NV_evaluators
if (_glewStrSame3(&pos, &len, (const GLubyte*)"evaluators", 10))
{
@@ -16613,6 +21122,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name)
continue;
}
#endif
+#ifdef GL_NV_gpu_multicast
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_multicast", 13))
+ {
+ ret = GLEW_NV_gpu_multicast;
+ continue;
+ }
+#endif
#ifdef GL_NV_gpu_program4
if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_program4", 12))
{
@@ -16767,6 +21283,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name)
continue;
}
#endif
+#ifdef GL_NV_robustness_video_memory_purge
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"robustness_video_memory_purge", 29))
+ {
+ ret = GLEW_NV_robustness_video_memory_purge;
+ continue;
+ }
+#endif
#ifdef GL_NV_sample_locations
if (_glewStrSame3(&pos, &len, (const GLubyte*)"sample_locations", 16))
{
@@ -16795,6 +21318,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name)
continue;
}
#endif
+#ifdef GL_NV_shader_atomic_float64
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_atomic_float64", 21))
+ {
+ ret = GLEW_NV_shader_atomic_float64;
+ continue;
+ }
+#endif
#ifdef GL_NV_shader_atomic_fp16_vector
if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_atomic_fp16_vector", 25))
{
@@ -16837,6 +21367,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name)
continue;
}
#endif
+#ifdef GL_NV_stereo_view_rendering
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"stereo_view_rendering", 21))
+ {
+ ret = GLEW_NV_stereo_view_rendering;
+ continue;
+ }
+#endif
#ifdef GL_NV_tessellation_program5
if (_glewStrSame3(&pos, &len, (const GLubyte*)"tessellation_program5", 21))
{
@@ -17033,6 +21570,13 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name)
continue;
}
#endif
+#ifdef GL_NV_viewport_swizzle
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"viewport_swizzle", 16))
+ {
+ ret = GLEW_NV_viewport_swizzle;
+ continue;
+ }
+#endif
}
if (_glewStrSame2(&pos, &len, (const GLubyte*)"OES_", 4))
{
@@ -17639,13 +22183,9 @@ GLboolean GLEWAPIENTRY glewIsSupported (const char* name)
return ret;
}
-#if defined(_WIN32)
+#if defined(_WIN32) && !defined(GLEW_EGL) && !defined(GLEW_OSMESA)
-#if defined(GLEW_MX)
-GLboolean GLEWAPIENTRY wglewContextIsSupported (const WGLEWContext* ctx, const char* name)
-#else
GLboolean GLEWAPIENTRY wglewIsSupported (const char* name)
-#endif
{
const GLubyte* pos = (const GLubyte*)name;
GLuint len = _glewStrLen(pos);
@@ -18065,13 +22605,9 @@ GLboolean GLEWAPIENTRY wglewIsSupported (const char* name)
return ret;
}
-#elif !defined(__ANDROID__) && !defined(__native_client__) && !defined(__HAIKU__) && !defined(__APPLE__) || defined(GLEW_APPLE_GLX)
+#elif !defined(GLEW_OSMESA) && !defined(GLEW_EGL) && !defined(__ANDROID__) && !defined(__native_client__) && !defined(__HAIKU__) && !defined(__APPLE__) || defined(GLEW_APPLE_GLX)
-#if defined(GLEW_MX)
-GLboolean glxewContextIsSupported (const GLXEWContext* ctx, const char* name)
-#else
GLboolean glxewIsSupported (const char* name)
-#endif
{
const GLubyte* pos = (const GLubyte*)name;
GLuint len = _glewStrLen(pos);
@@ -18265,6 +22801,13 @@ GLboolean glxewIsSupported (const char* name)
continue;
}
#endif
+#ifdef GLX_EXT_libglvnd
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"libglvnd", 8))
+ {
+ ret = GLXEW_EXT_libglvnd;
+ continue;
+ }
+#endif
#ifdef GLX_EXT_scene_marker
if (_glewStrSame3(&pos, &len, (const GLubyte*)"scene_marker", 12))
{
@@ -18421,6 +22964,13 @@ GLboolean glxewIsSupported (const char* name)
continue;
}
#endif
+#ifdef GLX_NV_robustness_video_memory_purge
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"robustness_video_memory_purge", 29))
+ {
+ ret = GLXEW_NV_robustness_video_memory_purge;
+ continue;
+ }
+#endif
#ifdef GLX_NV_swap_group
if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_group", 10))
{
@@ -18604,4 +23154,799 @@ GLboolean glxewIsSupported (const char* name)
return ret;
}
+#elif defined(GLEW_EGL)
+
+GLboolean eglewIsSupported (const char* name)
+{
+ const GLubyte* pos = (const GLubyte*)name;
+ GLuint len = _glewStrLen(pos);
+ GLboolean ret = GL_TRUE;
+ while (ret && len > 0)
+ {
+ if(_glewStrSame1(&pos, &len, (const GLubyte*)"EGL_", 4))
+ {
+ if (_glewStrSame2(&pos, &len, (const GLubyte*)"VERSION_", 8))
+ {
+#ifdef EGL_VERSION_1_0
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_0", 3))
+ {
+ ret = EGLEW_VERSION_1_0;
+ continue;
+ }
+#endif
+#ifdef EGL_VERSION_1_1
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_1", 3))
+ {
+ ret = EGLEW_VERSION_1_1;
+ continue;
+ }
+#endif
+#ifdef EGL_VERSION_1_2
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_2", 3))
+ {
+ ret = EGLEW_VERSION_1_2;
+ continue;
+ }
+#endif
+#ifdef EGL_VERSION_1_3
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_3", 3))
+ {
+ ret = EGLEW_VERSION_1_3;
+ continue;
+ }
+#endif
+#ifdef EGL_VERSION_1_4
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_4", 3))
+ {
+ ret = EGLEW_VERSION_1_4;
+ continue;
+ }
+#endif
+#ifdef EGL_VERSION_1_5
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_5", 3))
+ {
+ ret = EGLEW_VERSION_1_5;
+ continue;
+ }
+#endif
+ }
+ if (_glewStrSame2(&pos, &len, (const GLubyte*)"ANDROID_", 8))
+ {
+#ifdef EGL_ANDROID_blob_cache
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"blob_cache", 10))
+ {
+ ret = EGLEW_ANDROID_blob_cache;
+ continue;
+ }
+#endif
+#ifdef EGL_ANDROID_create_native_client_buffer
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_native_client_buffer", 27))
+ {
+ ret = EGLEW_ANDROID_create_native_client_buffer;
+ continue;
+ }
+#endif
+#ifdef EGL_ANDROID_framebuffer_target
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_target", 18))
+ {
+ ret = EGLEW_ANDROID_framebuffer_target;
+ continue;
+ }
+#endif
+#ifdef EGL_ANDROID_front_buffer_auto_refresh
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"front_buffer_auto_refresh", 25))
+ {
+ ret = EGLEW_ANDROID_front_buffer_auto_refresh;
+ continue;
+ }
+#endif
+#ifdef EGL_ANDROID_image_native_buffer
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"image_native_buffer", 19))
+ {
+ ret = EGLEW_ANDROID_image_native_buffer;
+ continue;
+ }
+#endif
+#ifdef EGL_ANDROID_native_fence_sync
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"native_fence_sync", 17))
+ {
+ ret = EGLEW_ANDROID_native_fence_sync;
+ continue;
+ }
+#endif
+#ifdef EGL_ANDROID_presentation_time
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"presentation_time", 17))
+ {
+ ret = EGLEW_ANDROID_presentation_time;
+ continue;
+ }
+#endif
+#ifdef EGL_ANDROID_recordable
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"recordable", 10))
+ {
+ ret = EGLEW_ANDROID_recordable;
+ continue;
+ }
+#endif
+ }
+ if (_glewStrSame2(&pos, &len, (const GLubyte*)"ANGLE_", 6))
+ {
+#ifdef EGL_ANGLE_d3d_share_handle_client_buffer
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"d3d_share_handle_client_buffer", 30))
+ {
+ ret = EGLEW_ANGLE_d3d_share_handle_client_buffer;
+ continue;
+ }
+#endif
+#ifdef EGL_ANGLE_device_d3d
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"device_d3d", 10))
+ {
+ ret = EGLEW_ANGLE_device_d3d;
+ continue;
+ }
+#endif
+#ifdef EGL_ANGLE_query_surface_pointer
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"query_surface_pointer", 21))
+ {
+ ret = EGLEW_ANGLE_query_surface_pointer;
+ continue;
+ }
+#endif
+#ifdef EGL_ANGLE_surface_d3d_texture_2d_share_handle
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"surface_d3d_texture_2d_share_handle", 35))
+ {
+ ret = EGLEW_ANGLE_surface_d3d_texture_2d_share_handle;
+ continue;
+ }
+#endif
+#ifdef EGL_ANGLE_window_fixed_size
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"window_fixed_size", 17))
+ {
+ ret = EGLEW_ANGLE_window_fixed_size;
+ continue;
+ }
+#endif
+ }
+ if (_glewStrSame2(&pos, &len, (const GLubyte*)"ARM_", 4))
+ {
+#ifdef EGL_ARM_pixmap_multisample_discard
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixmap_multisample_discard", 26))
+ {
+ ret = EGLEW_ARM_pixmap_multisample_discard;
+ continue;
+ }
+#endif
+ }
+ if (_glewStrSame2(&pos, &len, (const GLubyte*)"EXT_", 4))
+ {
+#ifdef EGL_EXT_buffer_age
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"buffer_age", 10))
+ {
+ ret = EGLEW_EXT_buffer_age;
+ continue;
+ }
+#endif
+#ifdef EGL_EXT_client_extensions
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"client_extensions", 17))
+ {
+ ret = EGLEW_EXT_client_extensions;
+ continue;
+ }
+#endif
+#ifdef EGL_EXT_create_context_robustness
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context_robustness", 25))
+ {
+ ret = EGLEW_EXT_create_context_robustness;
+ continue;
+ }
+#endif
+#ifdef EGL_EXT_device_base
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"device_base", 11))
+ {
+ ret = EGLEW_EXT_device_base;
+ continue;
+ }
+#endif
+#ifdef EGL_EXT_device_drm
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"device_drm", 10))
+ {
+ ret = EGLEW_EXT_device_drm;
+ continue;
+ }
+#endif
+#ifdef EGL_EXT_device_enumeration
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"device_enumeration", 18))
+ {
+ ret = EGLEW_EXT_device_enumeration;
+ continue;
+ }
+#endif
+#ifdef EGL_EXT_device_openwf
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"device_openwf", 13))
+ {
+ ret = EGLEW_EXT_device_openwf;
+ continue;
+ }
+#endif
+#ifdef EGL_EXT_device_query
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"device_query", 12))
+ {
+ ret = EGLEW_EXT_device_query;
+ continue;
+ }
+#endif
+#ifdef EGL_EXT_image_dma_buf_import
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"image_dma_buf_import", 20))
+ {
+ ret = EGLEW_EXT_image_dma_buf_import;
+ continue;
+ }
+#endif
+#ifdef EGL_EXT_multiview_window
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"multiview_window", 16))
+ {
+ ret = EGLEW_EXT_multiview_window;
+ continue;
+ }
+#endif
+#ifdef EGL_EXT_output_base
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"output_base", 11))
+ {
+ ret = EGLEW_EXT_output_base;
+ continue;
+ }
+#endif
+#ifdef EGL_EXT_output_drm
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"output_drm", 10))
+ {
+ ret = EGLEW_EXT_output_drm;
+ continue;
+ }
+#endif
+#ifdef EGL_EXT_output_openwf
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"output_openwf", 13))
+ {
+ ret = EGLEW_EXT_output_openwf;
+ continue;
+ }
+#endif
+#ifdef EGL_EXT_platform_base
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"platform_base", 13))
+ {
+ ret = EGLEW_EXT_platform_base;
+ continue;
+ }
+#endif
+#ifdef EGL_EXT_platform_device
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"platform_device", 15))
+ {
+ ret = EGLEW_EXT_platform_device;
+ continue;
+ }
+#endif
+#ifdef EGL_EXT_platform_wayland
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"platform_wayland", 16))
+ {
+ ret = EGLEW_EXT_platform_wayland;
+ continue;
+ }
+#endif
+#ifdef EGL_EXT_platform_x11
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"platform_x11", 12))
+ {
+ ret = EGLEW_EXT_platform_x11;
+ continue;
+ }
+#endif
+#ifdef EGL_EXT_protected_content
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"protected_content", 17))
+ {
+ ret = EGLEW_EXT_protected_content;
+ continue;
+ }
+#endif
+#ifdef EGL_EXT_protected_surface
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"protected_surface", 17))
+ {
+ ret = EGLEW_EXT_protected_surface;
+ continue;
+ }
+#endif
+#ifdef EGL_EXT_stream_consumer_egloutput
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"stream_consumer_egloutput", 25))
+ {
+ ret = EGLEW_EXT_stream_consumer_egloutput;
+ continue;
+ }
+#endif
+#ifdef EGL_EXT_swap_buffers_with_damage
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_buffers_with_damage", 24))
+ {
+ ret = EGLEW_EXT_swap_buffers_with_damage;
+ continue;
+ }
+#endif
+#ifdef EGL_EXT_yuv_surface
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"yuv_surface", 11))
+ {
+ ret = EGLEW_EXT_yuv_surface;
+ continue;
+ }
+#endif
+ }
+ if (_glewStrSame2(&pos, &len, (const GLubyte*)"HI_", 3))
+ {
+#ifdef EGL_HI_clientpixmap
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"clientpixmap", 12))
+ {
+ ret = EGLEW_HI_clientpixmap;
+ continue;
+ }
+#endif
+#ifdef EGL_HI_colorformats
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"colorformats", 12))
+ {
+ ret = EGLEW_HI_colorformats;
+ continue;
+ }
+#endif
+ }
+ if (_glewStrSame2(&pos, &len, (const GLubyte*)"IMG_", 4))
+ {
+#ifdef EGL_IMG_context_priority
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"context_priority", 16))
+ {
+ ret = EGLEW_IMG_context_priority;
+ continue;
+ }
+#endif
+#ifdef EGL_IMG_image_plane_attribs
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"image_plane_attribs", 19))
+ {
+ ret = EGLEW_IMG_image_plane_attribs;
+ continue;
+ }
+#endif
+ }
+ if (_glewStrSame2(&pos, &len, (const GLubyte*)"KHR_", 4))
+ {
+#ifdef EGL_KHR_cl_event
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"cl_event", 8))
+ {
+ ret = EGLEW_KHR_cl_event;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_cl_event2
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"cl_event2", 9))
+ {
+ ret = EGLEW_KHR_cl_event2;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_client_get_all_proc_addresses
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"client_get_all_proc_addresses", 29))
+ {
+ ret = EGLEW_KHR_client_get_all_proc_addresses;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_config_attribs
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"config_attribs", 14))
+ {
+ ret = EGLEW_KHR_config_attribs;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_create_context
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context", 14))
+ {
+ ret = EGLEW_KHR_create_context;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_create_context_no_error
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context_no_error", 23))
+ {
+ ret = EGLEW_KHR_create_context_no_error;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_debug
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"debug", 5))
+ {
+ ret = EGLEW_KHR_debug;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_fence_sync
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"fence_sync", 10))
+ {
+ ret = EGLEW_KHR_fence_sync;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_get_all_proc_addresses
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"get_all_proc_addresses", 22))
+ {
+ ret = EGLEW_KHR_get_all_proc_addresses;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_gl_colorspace
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"gl_colorspace", 13))
+ {
+ ret = EGLEW_KHR_gl_colorspace;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_gl_renderbuffer_image
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"gl_renderbuffer_image", 21))
+ {
+ ret = EGLEW_KHR_gl_renderbuffer_image;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_gl_texture_2D_image
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"gl_texture_2D_image", 19))
+ {
+ ret = EGLEW_KHR_gl_texture_2D_image;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_gl_texture_3D_image
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"gl_texture_3D_image", 19))
+ {
+ ret = EGLEW_KHR_gl_texture_3D_image;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_gl_texture_cubemap_image
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"gl_texture_cubemap_image", 24))
+ {
+ ret = EGLEW_KHR_gl_texture_cubemap_image;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_image
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"image", 5))
+ {
+ ret = EGLEW_KHR_image;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_image_base
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"image_base", 10))
+ {
+ ret = EGLEW_KHR_image_base;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_image_pixmap
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"image_pixmap", 12))
+ {
+ ret = EGLEW_KHR_image_pixmap;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_lock_surface
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"lock_surface", 12))
+ {
+ ret = EGLEW_KHR_lock_surface;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_lock_surface2
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"lock_surface2", 13))
+ {
+ ret = EGLEW_KHR_lock_surface2;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_lock_surface3
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"lock_surface3", 13))
+ {
+ ret = EGLEW_KHR_lock_surface3;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_mutable_render_buffer
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"mutable_render_buffer", 21))
+ {
+ ret = EGLEW_KHR_mutable_render_buffer;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_partial_update
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"partial_update", 14))
+ {
+ ret = EGLEW_KHR_partial_update;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_platform_android
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"platform_android", 16))
+ {
+ ret = EGLEW_KHR_platform_android;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_platform_gbm
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"platform_gbm", 12))
+ {
+ ret = EGLEW_KHR_platform_gbm;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_platform_wayland
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"platform_wayland", 16))
+ {
+ ret = EGLEW_KHR_platform_wayland;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_platform_x11
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"platform_x11", 12))
+ {
+ ret = EGLEW_KHR_platform_x11;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_reusable_sync
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"reusable_sync", 13))
+ {
+ ret = EGLEW_KHR_reusable_sync;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_stream
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"stream", 6))
+ {
+ ret = EGLEW_KHR_stream;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_stream_consumer_gltexture
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"stream_consumer_gltexture", 25))
+ {
+ ret = EGLEW_KHR_stream_consumer_gltexture;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_stream_cross_process_fd
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"stream_cross_process_fd", 23))
+ {
+ ret = EGLEW_KHR_stream_cross_process_fd;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_stream_fifo
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"stream_fifo", 11))
+ {
+ ret = EGLEW_KHR_stream_fifo;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_stream_producer_aldatalocator
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"stream_producer_aldatalocator", 29))
+ {
+ ret = EGLEW_KHR_stream_producer_aldatalocator;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_stream_producer_eglsurface
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"stream_producer_eglsurface", 26))
+ {
+ ret = EGLEW_KHR_stream_producer_eglsurface;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_surfaceless_context
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"surfaceless_context", 19))
+ {
+ ret = EGLEW_KHR_surfaceless_context;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_swap_buffers_with_damage
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_buffers_with_damage", 24))
+ {
+ ret = EGLEW_KHR_swap_buffers_with_damage;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_vg_parent_image
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"vg_parent_image", 15))
+ {
+ ret = EGLEW_KHR_vg_parent_image;
+ continue;
+ }
+#endif
+#ifdef EGL_KHR_wait_sync
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"wait_sync", 9))
+ {
+ ret = EGLEW_KHR_wait_sync;
+ continue;
+ }
+#endif
+ }
+ if (_glewStrSame2(&pos, &len, (const GLubyte*)"MESA_", 5))
+ {
+#ifdef EGL_MESA_drm_image
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"drm_image", 9))
+ {
+ ret = EGLEW_MESA_drm_image;
+ continue;
+ }
+#endif
+#ifdef EGL_MESA_image_dma_buf_export
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"image_dma_buf_export", 20))
+ {
+ ret = EGLEW_MESA_image_dma_buf_export;
+ continue;
+ }
+#endif
+#ifdef EGL_MESA_platform_gbm
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"platform_gbm", 12))
+ {
+ ret = EGLEW_MESA_platform_gbm;
+ continue;
+ }
+#endif
+ }
+ if (_glewStrSame2(&pos, &len, (const GLubyte*)"NOK_", 4))
+ {
+#ifdef EGL_NOK_swap_region
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_region", 11))
+ {
+ ret = EGLEW_NOK_swap_region;
+ continue;
+ }
+#endif
+#ifdef EGL_NOK_swap_region2
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_region2", 12))
+ {
+ ret = EGLEW_NOK_swap_region2;
+ continue;
+ }
+#endif
+#ifdef EGL_NOK_texture_from_pixmap
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_from_pixmap", 19))
+ {
+ ret = EGLEW_NOK_texture_from_pixmap;
+ continue;
+ }
+#endif
+ }
+ if (_glewStrSame2(&pos, &len, (const GLubyte*)"NV_", 3))
+ {
+#ifdef EGL_NV_3dvision_surface
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"3dvision_surface", 16))
+ {
+ ret = EGLEW_NV_3dvision_surface;
+ continue;
+ }
+#endif
+#ifdef EGL_NV_coverage_sample
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"coverage_sample", 15))
+ {
+ ret = EGLEW_NV_coverage_sample;
+ continue;
+ }
+#endif
+#ifdef EGL_NV_coverage_sample_resolve
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"coverage_sample_resolve", 23))
+ {
+ ret = EGLEW_NV_coverage_sample_resolve;
+ continue;
+ }
+#endif
+#ifdef EGL_NV_cuda_event
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"cuda_event", 10))
+ {
+ ret = EGLEW_NV_cuda_event;
+ continue;
+ }
+#endif
+#ifdef EGL_NV_depth_nonlinear
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_nonlinear", 15))
+ {
+ ret = EGLEW_NV_depth_nonlinear;
+ continue;
+ }
+#endif
+#ifdef EGL_NV_device_cuda
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"device_cuda", 11))
+ {
+ ret = EGLEW_NV_device_cuda;
+ continue;
+ }
+#endif
+#ifdef EGL_NV_native_query
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"native_query", 12))
+ {
+ ret = EGLEW_NV_native_query;
+ continue;
+ }
+#endif
+#ifdef EGL_NV_post_convert_rounding
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"post_convert_rounding", 21))
+ {
+ ret = EGLEW_NV_post_convert_rounding;
+ continue;
+ }
+#endif
+#ifdef EGL_NV_post_sub_buffer
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"post_sub_buffer", 15))
+ {
+ ret = EGLEW_NV_post_sub_buffer;
+ continue;
+ }
+#endif
+#ifdef EGL_NV_robustness_video_memory_purge
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"robustness_video_memory_purge", 29))
+ {
+ ret = EGLEW_NV_robustness_video_memory_purge;
+ continue;
+ }
+#endif
+#ifdef EGL_NV_stream_consumer_gltexture_yuv
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"stream_consumer_gltexture_yuv", 29))
+ {
+ ret = EGLEW_NV_stream_consumer_gltexture_yuv;
+ continue;
+ }
+#endif
+#ifdef EGL_NV_stream_metadata
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"stream_metadata", 15))
+ {
+ ret = EGLEW_NV_stream_metadata;
+ continue;
+ }
+#endif
+#ifdef EGL_NV_stream_sync
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"stream_sync", 11))
+ {
+ ret = EGLEW_NV_stream_sync;
+ continue;
+ }
+#endif
+#ifdef EGL_NV_sync
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"sync", 4))
+ {
+ ret = EGLEW_NV_sync;
+ continue;
+ }
+#endif
+#ifdef EGL_NV_system_time
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"system_time", 11))
+ {
+ ret = EGLEW_NV_system_time;
+ continue;
+ }
+#endif
+ }
+ if (_glewStrSame2(&pos, &len, (const GLubyte*)"TIZEN_", 6))
+ {
+#ifdef EGL_TIZEN_image_native_buffer
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"image_native_buffer", 19))
+ {
+ ret = EGLEW_TIZEN_image_native_buffer;
+ continue;
+ }
+#endif
+#ifdef EGL_TIZEN_image_native_surface
+ if (_glewStrSame3(&pos, &len, (const GLubyte*)"image_native_surface", 20))
+ {
+ ret = EGLEW_TIZEN_image_native_surface;
+ continue;
+ }
+#endif
+ }
+ }
+ ret = (len == 0);
+ }
+ return ret;
+}
+
#endif /* _WIN32 */
diff --git a/intern/CMakeLists.txt b/intern/CMakeLists.txt
index bfe230250ae..af3b9296077 100644
--- a/intern/CMakeLists.txt
+++ b/intern/CMakeLists.txt
@@ -33,6 +33,7 @@ add_subdirectory(opencolorio)
add_subdirectory(mikktspace)
add_subdirectory(glew-mx)
add_subdirectory(eigen)
+add_subdirectory(gawain)
if(WITH_GAMEENGINE_DECKLINK)
add_subdirectory(decklink)
diff --git a/intern/audaspace/CMakeLists.txt b/intern/audaspace/CMakeLists.txt
index dd446613fd0..e359a631532 100644
--- a/intern/audaspace/CMakeLists.txt
+++ b/intern/audaspace/CMakeLists.txt
@@ -24,9 +24,6 @@ remove_strict_flags()
if(CMAKE_COMPILER_IS_GNUCC)
remove_cc_flag("-Wunused-macros")
endif()
-
-if(WITH_SYSTEM_AUDASPACE)
-
set(INC
.
)
@@ -52,305 +49,4 @@ if(WITH_PYTHON)
add_definitions(-DWITH_PYTHON)
endif()
-else()
-
-set(INC
- .
- FX
- intern
- ../ffmpeg
-)
-
-set(INC_SYS
- ${PTHREADS_INCLUDE_DIRS}
- ${BOOST_INCLUDE_DIR}
-)
-
-set(SRC
- FX/AUD_AccumulatorFactory.cpp
- FX/AUD_BandpassCalculator.cpp
- FX/AUD_BaseIIRFilterReader.cpp
- FX/AUD_ButterworthCalculator.cpp
- FX/AUD_ButterworthFactory.cpp
- FX/AUD_CallbackIIRFilterReader.cpp
- FX/AUD_DelayFactory.cpp
- FX/AUD_DelayReader.cpp
- FX/AUD_DoubleFactory.cpp
- FX/AUD_DoubleReader.cpp
- FX/AUD_DynamicIIRFilterFactory.cpp
- FX/AUD_DynamicIIRFilterReader.cpp
- FX/AUD_EffectFactory.cpp
- FX/AUD_EffectReader.cpp
- FX/AUD_EnvelopeFactory.cpp
- FX/AUD_FaderFactory.cpp
- FX/AUD_FaderReader.cpp
- FX/AUD_HighpassCalculator.cpp
- FX/AUD_HighpassFactory.cpp
- FX/AUD_IIRFilterFactory.cpp
- FX/AUD_IIRFilterReader.cpp
- FX/AUD_LimiterFactory.cpp
- FX/AUD_LimiterReader.cpp
- FX/AUD_LoopFactory.cpp
- FX/AUD_LoopReader.cpp
- FX/AUD_LowpassCalculator.cpp
- FX/AUD_LowpassFactory.cpp
- FX/AUD_PingPongFactory.cpp
- FX/AUD_PitchFactory.cpp
- FX/AUD_PitchReader.cpp
- FX/AUD_RectifyFactory.cpp
- FX/AUD_ReverseFactory.cpp
- FX/AUD_ReverseReader.cpp
- FX/AUD_SquareFactory.cpp
- FX/AUD_SumFactory.cpp
- FX/AUD_SuperposeFactory.cpp
- FX/AUD_SuperposeReader.cpp
- FX/AUD_VolumeFactory.cpp
-
- intern/AUD_3DMath.h
- intern/AUD_AnimateableProperty.cpp
- intern/AUD_AnimateableProperty.h
- intern/AUD_Buffer.cpp
- intern/AUD_Buffer.h
- intern/AUD_BufferReader.cpp
- intern/AUD_BufferReader.h
- intern/AUD_C-API.cpp
- intern/AUD_C-API.h
- intern/AUD_ChannelMapperFactory.cpp
- intern/AUD_ChannelMapperFactory.h
- intern/AUD_ChannelMapperReader.cpp
- intern/AUD_ChannelMapperReader.h
- intern/AUD_ConverterFactory.cpp
- intern/AUD_ConverterFactory.h
- intern/AUD_ConverterFunctions.cpp
- intern/AUD_ConverterFunctions.h
- intern/AUD_ConverterReader.cpp
- intern/AUD_ConverterReader.h
- intern/AUD_FileFactory.cpp
- intern/AUD_FileFactory.h
- intern/AUD_FileWriter.cpp
- intern/AUD_FileWriter.h
- intern/AUD_I3DDevice.h
- intern/AUD_I3DHandle.h
- intern/AUD_IDevice.h
- intern/AUD_IFactory.h
- intern/AUD_IHandle.h
- intern/AUD_ILockable.h
- intern/AUD_IReader.h
- intern/AUD_IWriter.h
- intern/AUD_JOSResampleFactory.cpp
- intern/AUD_JOSResampleFactory.h
- intern/AUD_JOSResampleReader.cpp
- intern/AUD_JOSResampleReader.h
- intern/AUD_LinearResampleFactory.cpp
- intern/AUD_LinearResampleFactory.h
- intern/AUD_LinearResampleReader.cpp
- intern/AUD_LinearResampleReader.h
- intern/AUD_Mixer.cpp
- intern/AUD_Mixer.h
- intern/AUD_MixerFactory.cpp
- intern/AUD_MixerFactory.h
- intern/AUD_MutexLock.h
- intern/AUD_NULLDevice.cpp
- intern/AUD_NULLDevice.h
- intern/AUD_PyInit.h
- intern/AUD_ReadDevice.cpp
- intern/AUD_ReadDevice.h
- intern/AUD_ResampleFactory.h
- intern/AUD_ResampleReader.cpp
- intern/AUD_ResampleReader.h
- intern/AUD_Sequencer.cpp
- intern/AUD_Sequencer.h
- intern/AUD_SequencerEntry.cpp
- intern/AUD_SequencerEntry.h
- intern/AUD_SequencerFactory.cpp
- intern/AUD_SequencerFactory.h
- intern/AUD_SequencerHandle.cpp
- intern/AUD_SequencerHandle.h
- intern/AUD_SequencerReader.cpp
- intern/AUD_SequencerReader.h
- intern/AUD_Set.cpp
- intern/AUD_Set.h
- intern/AUD_SilenceFactory.cpp
- intern/AUD_SilenceFactory.h
- intern/AUD_SilenceReader.cpp
- intern/AUD_SilenceReader.h
- intern/AUD_SinusFactory.cpp
- intern/AUD_SinusFactory.h
- intern/AUD_SinusReader.cpp
- intern/AUD_SinusReader.h
- intern/AUD_SoftwareDevice.cpp
- intern/AUD_SoftwareDevice.h
- intern/AUD_Space.h
- intern/AUD_StreamBufferFactory.cpp
- intern/AUD_StreamBufferFactory.h
-
- FX/AUD_AccumulatorFactory.h
- FX/AUD_BandpassCalculator.h
- FX/AUD_BaseIIRFilterReader.h
- FX/AUD_ButterworthCalculator.h
- FX/AUD_ButterworthFactory.h
- FX/AUD_CallbackIIRFilterReader.h
- FX/AUD_DelayFactory.h
- FX/AUD_DelayReader.h
- FX/AUD_DoubleFactory.h
- FX/AUD_DoubleReader.h
- FX/AUD_IDynamicIIRFilterCalculator.h
- FX/AUD_DynamicIIRFilterFactory.h
- FX/AUD_DynamicIIRFilterReader.h
- FX/AUD_EffectFactory.h
- FX/AUD_EffectReader.h
- FX/AUD_EnvelopeFactory.h
- FX/AUD_FaderFactory.h
- FX/AUD_FaderReader.h
- FX/AUD_HighpassCalculator.h
- FX/AUD_HighpassFactory.h
- FX/AUD_IIRFilterFactory.h
- FX/AUD_IIRFilterReader.h
- FX/AUD_LimiterFactory.h
- FX/AUD_LimiterReader.h
- FX/AUD_LoopFactory.h
- FX/AUD_LoopReader.h
- FX/AUD_LowpassCalculator.h
- FX/AUD_LowpassFactory.h
- FX/AUD_PingPongFactory.h
- FX/AUD_PitchFactory.h
- FX/AUD_PitchReader.h
- FX/AUD_RectifyFactory.h
- FX/AUD_ReverseFactory.h
- FX/AUD_ReverseReader.h
- FX/AUD_SquareFactory.h
- FX/AUD_SumFactory.h
- FX/AUD_SuperposeFactory.h
- FX/AUD_SuperposeReader.h
- FX/AUD_VolumeFactory.h
-)
-
-if(WITH_CODEC_FFMPEG)
- add_definitions(-DWITH_FFMPEG)
- list(APPEND INC
- ffmpeg
- )
- list(APPEND INC_SYS
- ${FFMPEG_INCLUDE_DIRS}
- )
- list(APPEND SRC
- ffmpeg/AUD_FFMPEGFactory.cpp
- ffmpeg/AUD_FFMPEGReader.cpp
- ffmpeg/AUD_FFMPEGWriter.cpp
-
- ffmpeg/AUD_FFMPEGFactory.h
- ffmpeg/AUD_FFMPEGReader.h
- ffmpeg/AUD_FFMPEGWriter.h
- )
-
- remove_strict_flags_file(
- ffmpeg/AUD_FFMPEGFactory.cpp
- ffmpeg/AUD_FFMPEGReader.cpp
- ffmpeg/AUD_FFMPEGWriter.cpp
- )
-endif()
-
-if(WITH_SDL)
- add_definitions(-DWITH_SDL)
- list(APPEND INC
- SDL
- )
- list(APPEND INC_SYS
- ${SDL_INCLUDE_DIR}
- )
- list(APPEND SRC
- SDL/AUD_SDLDevice.cpp
-
- SDL/AUD_SDLDevice.h
- )
-endif()
-
-if(WITH_OPENAL)
- add_definitions(-DWITH_OPENAL)
- list(APPEND INC
- OpenAL
- )
- list(APPEND INC_SYS
- ${OPENAL_INCLUDE_DIR}
- )
- list(APPEND SRC
- OpenAL/AUD_OpenALDevice.cpp
-
- OpenAL/AUD_OpenALDevice.h
- )
-endif()
-
-if(WITH_JACK)
- add_definitions(-DWITH_JACK)
- list(APPEND INC
- jack
- )
- list(APPEND INC_SYS
- ${JACK_INCLUDE_DIRS}
- )
- list(APPEND SRC
- jack/AUD_JackDevice.cpp
- jack/AUD_JackLibrary.cpp
-
- jack/AUD_JackDevice.h
- jack/AUD_JackLibrary.h
- )
-
- if(WITH_JACK_DYNLOAD)
- add_definitions(-DWITH_JACK_DYNLOAD)
- endif()
-endif()
-
-if(WITH_CODEC_SNDFILE)
- add_definitions(-DWITH_SNDFILE)
- list(APPEND INC
- sndfile
- )
- list(APPEND INC_SYS
- ${SNDFILE_INCLUDE_DIRS}
- )
- list(APPEND SRC
- sndfile/AUD_SndFileFactory.cpp
- sndfile/AUD_SndFileReader.cpp
- sndfile/AUD_SndFileWriter.cpp
-
- sndfile/AUD_SndFileFactory.h
- sndfile/AUD_SndFileReader.h
- sndfile/AUD_SndFileWriter.h
- )
-endif()
-
-if(WITH_FFTW3 AND FALSE)
- add_definitions(-DWITH_FFTW3)
- list(APPEND INC
- fftw
- )
- list(APPEND INC_SYS
- ${FFTW3_INCLUDE_DIRS}
- )
- list(APPEND SRC
- fftw/AUD_BandPassFactory.cpp
- fftw/AUD_BandPassReader.cpp
-
- fftw/AUD_BandPassFactory.h
- fftw/AUD_BandPassReader.h
- )
-endif()
-
-if(WITH_PYTHON)
- list(APPEND INC
- Python
- )
- list(APPEND INC_SYS
- ${PYTHON_INCLUDE_DIRS}
- )
- list(APPEND SRC
- Python/AUD_PyAPI.cpp
-
- Python/AUD_PyAPI.h
- )
- add_definitions(-DWITH_PYTHON)
-endif()
-endif()
-
blender_add_lib(bf_intern_audaspace "${SRC}" "${INC}" "${INC_SYS}")
diff --git a/intern/audaspace/COPYING b/intern/audaspace/COPYING
deleted file mode 100644
index a330e6d9193..00000000000
--- a/intern/audaspace/COPYING
+++ /dev/null
@@ -1,339 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.
diff --git a/intern/audaspace/FX/AUD_AccumulatorFactory.cpp b/intern/audaspace/FX/AUD_AccumulatorFactory.cpp
deleted file mode 100644
index 00d3a9f2395..00000000000
--- a/intern/audaspace/FX/AUD_AccumulatorFactory.cpp
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_AccumulatorFactory.cpp
- * \ingroup audfx
- */
-
-
-#include "AUD_AccumulatorFactory.h"
-#include "AUD_CallbackIIRFilterReader.h"
-
-sample_t AUD_AccumulatorFactory::accumulatorFilterAdditive(AUD_CallbackIIRFilterReader* reader, void* useless)
-{
- float in = reader->x(0);
- float lastin = reader->x(-1);
- float out = reader->y(-1) + in - lastin;
- if(in > lastin)
- out += in - lastin;
- return out;
-}
-
-sample_t AUD_AccumulatorFactory::accumulatorFilter(AUD_CallbackIIRFilterReader* reader, void* useless)
-{
- float in = reader->x(0);
- float lastin = reader->x(-1);
- float out = reader->y(-1);
- if(in > lastin)
- out += in - lastin;
- return out;
-}
-
-AUD_AccumulatorFactory::AUD_AccumulatorFactory(boost::shared_ptr<AUD_IFactory> factory,
- bool additive) :
- AUD_EffectFactory(factory),
- m_additive(additive)
-{
-}
-
-boost::shared_ptr<AUD_IReader> AUD_AccumulatorFactory::createReader()
-{
- return boost::shared_ptr<AUD_IReader>(new AUD_CallbackIIRFilterReader(getReader(), 2, 2,
- m_additive ? accumulatorFilterAdditive : accumulatorFilter));
-}
diff --git a/intern/audaspace/FX/AUD_AccumulatorFactory.h b/intern/audaspace/FX/AUD_AccumulatorFactory.h
deleted file mode 100644
index 9087218a5f9..00000000000
--- a/intern/audaspace/FX/AUD_AccumulatorFactory.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_AccumulatorFactory.h
- * \ingroup audfx
- */
-
-
-#ifndef __AUD_ACCUMULATORFACTORY_H__
-#define __AUD_ACCUMULATORFACTORY_H__
-
-#include "AUD_EffectFactory.h"
-class AUD_CallbackIIRFilterReader;
-
-/**
- * This factory creates an accumulator reader.
- *
- * The accumulator adds the difference at the input to the last output in case
- * it's positive. In additive mode it additionaly adds the difference always.
- * So in case the difference is positive, it's added twice.
- */
-class AUD_AccumulatorFactory : public AUD_EffectFactory
-{
-private:
- /**
- * Whether the accumulator is additive.
- */
- const bool m_additive;
-
- // hide copy constructor and operator=
- AUD_AccumulatorFactory(const AUD_AccumulatorFactory&);
- AUD_AccumulatorFactory& operator=(const AUD_AccumulatorFactory&);
-
-public:
- /**
- * Creates a new accumulator factory.
- * \param factory The input factory.
- * \param additive Whether the accumulator is additive.
- */
- AUD_AccumulatorFactory(boost::shared_ptr<AUD_IFactory> factory, bool additive = false);
-
- virtual boost::shared_ptr<AUD_IReader> createReader();
-
- static sample_t accumulatorFilterAdditive(AUD_CallbackIIRFilterReader* reader, void* useless);
- static sample_t accumulatorFilter(AUD_CallbackIIRFilterReader* reader, void* useless);
-};
-
-#endif //__AUD_ACCUMULATORFACTORY_H__
diff --git a/intern/audaspace/FX/AUD_BandpassCalculator.cpp b/intern/audaspace/FX/AUD_BandpassCalculator.cpp
deleted file mode 100644
index f5bbd63f81c..00000000000
--- a/intern/audaspace/FX/AUD_BandpassCalculator.cpp
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "AUD_BandpassCalculator.h"
-
-AUD_BandpassCalculator::AUD_BandpassCalculator()
-{
-}
diff --git a/intern/audaspace/FX/AUD_BandpassCalculator.h b/intern/audaspace/FX/AUD_BandpassCalculator.h
deleted file mode 100644
index b5b3cad17ca..00000000000
--- a/intern/audaspace/FX/AUD_BandpassCalculator.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef AUD_BANDPASSCALCULATOR_H
-#define AUD_BANDPASSCALCULATOR_H
-
-class AUD_BandpassCalculator
-{
-public:
- AUD_BandpassCalculator();
-};
-
-#endif // AUD_BANDPASSCALCULATOR_H
diff --git a/intern/audaspace/FX/AUD_BaseIIRFilterReader.cpp b/intern/audaspace/FX/AUD_BaseIIRFilterReader.cpp
deleted file mode 100644
index eadfc525f96..00000000000
--- a/intern/audaspace/FX/AUD_BaseIIRFilterReader.cpp
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_BaseIIRFilterReader.cpp
- * \ingroup audfx
- */
-
-
-#include "AUD_BaseIIRFilterReader.h"
-
-#include <cstring>
-
-#define CC m_specs.channels + m_channel
-
-AUD_BaseIIRFilterReader::AUD_BaseIIRFilterReader(boost::shared_ptr<AUD_IReader> reader, int in,
- int out) :
- AUD_EffectReader(reader),
- m_specs(reader->getSpecs()),
- m_xlen(in), m_ylen(out),
- m_xpos(0), m_ypos(0), m_channel(0)
-{
- m_x = new sample_t[m_xlen * m_specs.channels];
- m_y = new sample_t[m_ylen * m_specs.channels];
-
- memset(m_x, 0, sizeof(sample_t) * m_xlen * m_specs.channels);
- memset(m_y, 0, sizeof(sample_t) * m_ylen * m_specs.channels);
-}
-
-AUD_BaseIIRFilterReader::~AUD_BaseIIRFilterReader()
-{
- delete[] m_x;
- delete[] m_y;
-}
-
-void AUD_BaseIIRFilterReader::setLengths(int in, int out)
-{
- if(in != m_xlen)
- {
- sample_t* xn = new sample_t[in * m_specs.channels];
- memset(xn, 0, sizeof(sample_t) * in * m_specs.channels);
-
- for(m_channel = 0; m_channel < m_specs.channels; m_channel++)
- {
- for(int i = 1; i <= in && i <= m_xlen; i++)
- {
- xn[(in - i) * CC] = x(-i);
- }
- }
-
- delete[] m_x;
- m_x = xn;
- m_xpos = 0;
- m_xlen = in;
- }
-
- if(out != m_ylen)
- {
- sample_t* yn = new sample_t[out * m_specs.channels];
- memset(yn, 0, sizeof(sample_t) * out * m_specs.channels);
-
- for(m_channel = 0; m_channel < m_specs.channels; m_channel++)
- {
- for(int i = 1; i <= out && i <= m_ylen; i++)
- {
- yn[(out - i) * CC] = y(-i);
- }
- }
-
- delete[] m_y;
- m_y = yn;
- m_ypos = 0;
- m_ylen = out;
- }
-}
-
-void AUD_BaseIIRFilterReader::read(int& length, bool& eos, sample_t* buffer)
-{
- AUD_Specs specs = m_reader->getSpecs();
- if(specs.channels != m_specs.channels)
- {
- m_specs.channels = specs.channels;
-
- delete[] m_x;
- delete[] m_y;
-
- m_x = new sample_t[m_xlen * m_specs.channels];
- m_y = new sample_t[m_ylen * m_specs.channels];
-
- memset(m_x, 0, sizeof(sample_t) * m_xlen * m_specs.channels);
- memset(m_y, 0, sizeof(sample_t) * m_ylen * m_specs.channels);
- }
-
- if(specs.rate != m_specs.rate)
- {
- m_specs = specs;
- sampleRateChanged(m_specs.rate);
- }
-
- m_reader->read(length, eos, buffer);
-
- for(m_channel = 0; m_channel < m_specs.channels; m_channel++)
- {
- for(int i = 0; i < length; i++)
- {
- m_x[m_xpos * CC] = buffer[i * CC];
- m_y[m_ypos * CC] = buffer[i * CC] = filter();
-
- m_xpos = (m_xpos + 1) % m_xlen;
- m_ypos = (m_ypos + 1) % m_ylen;
- }
- }
-}
-
-void AUD_BaseIIRFilterReader::sampleRateChanged(AUD_SampleRate rate)
-{
-}
diff --git a/intern/audaspace/FX/AUD_BaseIIRFilterReader.h b/intern/audaspace/FX/AUD_BaseIIRFilterReader.h
deleted file mode 100644
index fe0a8efce64..00000000000
--- a/intern/audaspace/FX/AUD_BaseIIRFilterReader.h
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_BaseIIRFilterReader.h
- * \ingroup audfx
- */
-
-
-#ifndef __AUD_BASEIIRFILTERREADER_H__
-#define __AUD_BASEIIRFILTERREADER_H__
-
-#include "AUD_EffectReader.h"
-#include "AUD_Buffer.h"
-
-/**
- * This class is a base class for infinite impulse response filters.
- */
-class AUD_BaseIIRFilterReader : public AUD_EffectReader
-{
-private:
- /**
- * Specs.
- */
- AUD_Specs m_specs;
-
- /**
- * Length of input samples needed.
- */
- int m_xlen;
-
- /**
- * Length of output samples needed.
- */
- int m_ylen;
-
- /**
- * The last in samples array.
- */
- sample_t* m_x;
-
- /**
- * The last out samples array.
- */
- sample_t* m_y;
-
- /**
- * Position of the current input sample in the input array.
- */
- int m_xpos;
-
- /**
- * Position of the current output sample in the output array.
- */
- int m_ypos;
-
- /**
- * Current channel.
- */
- int m_channel;
-
- // hide copy constructor and operator=
- AUD_BaseIIRFilterReader(const AUD_BaseIIRFilterReader&);
- AUD_BaseIIRFilterReader& operator=(const AUD_BaseIIRFilterReader&);
-
-protected:
- /**
- * Creates a new base IIR filter reader.
- * \param reader The reader to read from.
- * \param in The count of past input samples needed.
- * \param out The count of past output samples needed.
- */
- AUD_BaseIIRFilterReader(boost::shared_ptr<AUD_IReader> reader, int in, int out);
-
- void setLengths(int in, int out);
-
-public:
- /**
- * Retrieves the last input samples.
- * \param pos The position, valid are 0 (current) or negative values.
- * \return The sample value.
- */
- inline sample_t x(int pos)
- {
- return m_x[(m_xpos + pos + m_xlen) % m_xlen * m_specs.channels + m_channel];
- }
-
- /**
- * Retrieves the last output samples.
- * \param pos The position, valid are negative values.
- * \return The sample value.
- */
- inline sample_t y(int pos)
- {
- return m_y[(m_ypos + pos + m_ylen) % m_ylen * m_specs.channels + m_channel];
- }
-
- virtual ~AUD_BaseIIRFilterReader();
-
- virtual void read(int& length, bool& eos, sample_t* buffer);
-
- /**
- * Runs the filtering function.
- * \return The current output sample value.
- */
- virtual sample_t filter()=0;
-
- /**
- * Notifies the filter about a sample rate change.
- * \param rate The new sample rate.
- */
- virtual void sampleRateChanged(AUD_SampleRate rate);
-};
-
-#endif //__AUD_BASEIIRFILTERREADER_H__
diff --git a/intern/audaspace/FX/AUD_ButterworthCalculator.cpp b/intern/audaspace/FX/AUD_ButterworthCalculator.cpp
deleted file mode 100644
index 7a3c6f71e15..00000000000
--- a/intern/audaspace/FX/AUD_ButterworthCalculator.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-#include "AUD_ButterworthCalculator.h"
-
-#include <cmath>
-
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-
-#define BWPB41 0.76536686473
-#define BWPB42 1.84775906502
-
-AUD_ButterworthCalculator::AUD_ButterworthCalculator(float frequency) :
- m_frequency(frequency)
-{
-}
-
-void AUD_ButterworthCalculator::recalculateCoefficients(AUD_SampleRate rate, std::vector<float> &b, std::vector<float> &a)
-{
- float omega = 2 * tan(m_frequency * M_PI / rate);
- float o2 = omega * omega;
- float o4 = o2 * o2;
- float x1 = o2 + 2.0f * (float)BWPB41 * omega + 4.0f;
- float x2 = o2 + 2.0f * (float)BWPB42 * omega + 4.0f;
- float y1 = o2 - 2.0f * (float)BWPB41 * omega + 4.0f;
- float y2 = o2 - 2.0f * (float)BWPB42 * omega + 4.0f;
- float o228 = 2.0f * o2 - 8.0f;
- float norm = x1 * x2;
- a.push_back(1);
- a.push_back((x1 + x2) * o228 / norm);
- a.push_back((x1 * y2 + x2 * y1 + o228 * o228) / norm);
- a.push_back((y1 + y2) * o228 / norm);
- a.push_back(y1 * y2 / norm);
- b.push_back(o4 / norm);
- b.push_back(4 * o4 / norm);
- b.push_back(6 * o4 / norm);
- b.push_back(b[1]);
- b.push_back(b[0]);
-}
diff --git a/intern/audaspace/FX/AUD_ButterworthCalculator.h b/intern/audaspace/FX/AUD_ButterworthCalculator.h
deleted file mode 100644
index a7ae196afda..00000000000
--- a/intern/audaspace/FX/AUD_ButterworthCalculator.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef AUD_BUTTERWORTHCALCULATOR_H
-#define AUD_BUTTERWORTHCALCULATOR_H
-
-#include "AUD_IDynamicIIRFilterCalculator.h"
-
-class AUD_ButterworthCalculator : public AUD_IDynamicIIRFilterCalculator
-{
-private:
- /**
- * The attack value in seconds.
- */
- const float m_frequency;
-
-public:
- AUD_ButterworthCalculator(float frequency);
-
- virtual void recalculateCoefficients(AUD_SampleRate rate, std::vector<float> &b, std::vector<float> &a);
-};
-
-#endif // AUD_BUTTERWORTHCALCULATOR_H
diff --git a/intern/audaspace/FX/AUD_ButterworthFactory.cpp b/intern/audaspace/FX/AUD_ButterworthFactory.cpp
deleted file mode 100644
index 12c4306c2f7..00000000000
--- a/intern/audaspace/FX/AUD_ButterworthFactory.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_ButterworthFactory.cpp
- * \ingroup audfx
- */
-
-
-#include "AUD_ButterworthFactory.h"
-#include "AUD_IIRFilterReader.h"
-#include "AUD_ButterworthCalculator.h"
-
-AUD_ButterworthFactory::AUD_ButterworthFactory(boost::shared_ptr<AUD_IFactory> factory,
- float frequency) :
- AUD_DynamicIIRFilterFactory(factory, boost::shared_ptr<AUD_IDynamicIIRFilterCalculator>(new AUD_ButterworthCalculator(frequency)))
-{
-}
-
diff --git a/intern/audaspace/FX/AUD_ButterworthFactory.h b/intern/audaspace/FX/AUD_ButterworthFactory.h
deleted file mode 100644
index 3a86b14a7a6..00000000000
--- a/intern/audaspace/FX/AUD_ButterworthFactory.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_ButterworthFactory.h
- * \ingroup audfx
- */
-
-
-#ifndef __AUD_BUTTERWORTHFACTORY_H__
-#define __AUD_BUTTERWORTHFACTORY_H__
-
-#include "AUD_DynamicIIRFilterFactory.h"
-
-/**
- * This factory creates a butterworth lowpass filter reader.
- */
-class AUD_ButterworthFactory : public AUD_DynamicIIRFilterFactory
-{
-private:
- // hide copy constructor and operator=
- AUD_ButterworthFactory(const AUD_ButterworthFactory&);
- AUD_ButterworthFactory& operator=(const AUD_ButterworthFactory&);
-
-public:
- /**
- * Creates a new butterworth factory.
- * \param factory The input factory.
- * \param frequency The cutoff frequency.
- */
- AUD_ButterworthFactory(boost::shared_ptr<AUD_IFactory> factory, float frequency);
-};
-
-#endif //__AUD_BUTTERWORTHFACTORY_H__
diff --git a/intern/audaspace/FX/AUD_CallbackIIRFilterReader.cpp b/intern/audaspace/FX/AUD_CallbackIIRFilterReader.cpp
deleted file mode 100644
index b5157d47666..00000000000
--- a/intern/audaspace/FX/AUD_CallbackIIRFilterReader.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_CallbackIIRFilterReader.cpp
- * \ingroup audfx
- */
-
-
-#include "AUD_CallbackIIRFilterReader.h"
-
-AUD_CallbackIIRFilterReader::AUD_CallbackIIRFilterReader(boost::shared_ptr<AUD_IReader> reader,
- int in, int out,
- doFilterIIR doFilter,
- endFilterIIR endFilter,
- void* data) :
- AUD_BaseIIRFilterReader(reader, in, out),
- m_filter(doFilter), m_endFilter(endFilter), m_data(data)
-{
-}
-
-AUD_CallbackIIRFilterReader::~AUD_CallbackIIRFilterReader()
-{
- if(m_endFilter)
- m_endFilter(m_data);
-}
-
-sample_t AUD_CallbackIIRFilterReader::filter()
-{
- return m_filter(this, m_data);
-}
diff --git a/intern/audaspace/FX/AUD_CallbackIIRFilterReader.h b/intern/audaspace/FX/AUD_CallbackIIRFilterReader.h
deleted file mode 100644
index 66f82ba1a01..00000000000
--- a/intern/audaspace/FX/AUD_CallbackIIRFilterReader.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_CallbackIIRFilterReader.h
- * \ingroup audfx
- */
-
-
-#ifndef __AUD_CALLBACKIIRFILTERREADER_H__
-#define __AUD_CALLBACKIIRFILTERREADER_H__
-
-#include "AUD_BaseIIRFilterReader.h"
-#include "AUD_Buffer.h"
-
-class AUD_CallbackIIRFilterReader;
-
-typedef sample_t (*doFilterIIR)(AUD_CallbackIIRFilterReader*, void*);
-typedef void (*endFilterIIR)(void*);
-
-/**
- * This class provides an interface for infinite impulse response filters via a
- * callback filter function.
- */
-class AUD_CallbackIIRFilterReader : public AUD_BaseIIRFilterReader
-{
-private:
- /**
- * Filter function.
- */
- const doFilterIIR m_filter;
-
- /**
- * End filter function.
- */
- const endFilterIIR m_endFilter;
-
- /**
- * Data pointer.
- */
- void* m_data;
-
- // hide copy constructor and operator=
- AUD_CallbackIIRFilterReader(const AUD_CallbackIIRFilterReader&);
- AUD_CallbackIIRFilterReader& operator=(const AUD_CallbackIIRFilterReader&);
-
-public:
- /**
- * Creates a new callback IIR filter reader.
- * \param reader The reader to read from.
- * \param in The count of past input samples needed.
- * \param out The count of past output samples needed.
- * \param doFilter The filter callback.
- * \param endFilter The finishing callback.
- * \param data Data pointer for the callbacks.
- */
- AUD_CallbackIIRFilterReader(boost::shared_ptr<AUD_IReader> reader, int in, int out,
- doFilterIIR doFilter,
- endFilterIIR endFilter = 0,
- void* data = NULL);
-
- virtual ~AUD_CallbackIIRFilterReader();
-
- virtual sample_t filter();
-};
-
-#endif //__AUD_CALLBACKIIRFILTERREADER_H__
diff --git a/intern/audaspace/FX/AUD_DelayFactory.cpp b/intern/audaspace/FX/AUD_DelayFactory.cpp
deleted file mode 100644
index 3e5a7cfd2f8..00000000000
--- a/intern/audaspace/FX/AUD_DelayFactory.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_DelayFactory.cpp
- * \ingroup audfx
- */
-
-
-#include "AUD_DelayFactory.h"
-#include "AUD_DelayReader.h"
-#include "AUD_Space.h"
-
-AUD_DelayFactory::AUD_DelayFactory(boost::shared_ptr<AUD_IFactory> factory, float delay) :
- AUD_EffectFactory(factory),
- m_delay(delay)
-{
-}
-
-float AUD_DelayFactory::getDelay() const
-{
- return m_delay;
-}
-
-boost::shared_ptr<AUD_IReader> AUD_DelayFactory::createReader()
-{
- return boost::shared_ptr<AUD_IReader>(new AUD_DelayReader(getReader(), m_delay));
-}
diff --git a/intern/audaspace/FX/AUD_DelayFactory.h b/intern/audaspace/FX/AUD_DelayFactory.h
deleted file mode 100644
index 8cfb2be9ac8..00000000000
--- a/intern/audaspace/FX/AUD_DelayFactory.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_DelayFactory.h
- * \ingroup audfx
- */
-
-
-#ifndef __AUD_DELAYFACTORY_H__
-#define __AUD_DELAYFACTORY_H__
-
-#include "AUD_EffectFactory.h"
-
-/**
- * This factory plays another factory delayed.
- */
-class AUD_DelayFactory : public AUD_EffectFactory
-{
-private:
- /**
- * The delay in samples.
- */
- const float m_delay;
-
- // hide copy constructor and operator=
- AUD_DelayFactory(const AUD_DelayFactory&);
- AUD_DelayFactory& operator=(const AUD_DelayFactory&);
-
-public:
- /**
- * Creates a new delay factory.
- * \param factory The input factory.
- * \param delay The desired delay in seconds.
- */
- AUD_DelayFactory(boost::shared_ptr<AUD_IFactory> factory, float delay = 0);
-
- /**
- * Returns the delay in seconds.
- */
- float getDelay() const;
-
- virtual boost::shared_ptr<AUD_IReader> createReader();
-};
-
-#endif //__AUD_DELAYFACTORY_H__
diff --git a/intern/audaspace/FX/AUD_DelayReader.cpp b/intern/audaspace/FX/AUD_DelayReader.cpp
deleted file mode 100644
index 050508f28da..00000000000
--- a/intern/audaspace/FX/AUD_DelayReader.cpp
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_DelayReader.cpp
- * \ingroup audfx
- */
-
-
-#include "AUD_DelayReader.h"
-
-#include <cstring>
-
-AUD_DelayReader::AUD_DelayReader(boost::shared_ptr<AUD_IReader> reader, float delay) :
- AUD_EffectReader(reader),
- m_delay(int((AUD_SampleRate)delay * reader->getSpecs().rate)),
- m_remdelay(int((AUD_SampleRate)delay * reader->getSpecs().rate))
-{
-}
-
-void AUD_DelayReader::seek(int position)
-{
- if(position < m_delay)
- {
- m_remdelay = m_delay - position;
- m_reader->seek(0);
- }
- else
- {
- m_remdelay = 0;
- m_reader->seek(position - m_delay);
- }
-}
-
-int AUD_DelayReader::getLength() const
-{
- int len = m_reader->getLength();
- if(len < 0)
- return len;
- return len + m_delay;
-}
-
-int AUD_DelayReader::getPosition() const
-{
- if(m_remdelay > 0)
- return m_delay - m_remdelay;
- return m_reader->getPosition() + m_delay;
-}
-
-void AUD_DelayReader::read(int& length, bool& eos, sample_t* buffer)
-{
- if(m_remdelay > 0)
- {
- AUD_Specs specs = m_reader->getSpecs();
- int samplesize = AUD_SAMPLE_SIZE(specs);
-
- if(length > m_remdelay)
- {
- memset(buffer, 0, m_remdelay * samplesize);
-
- int len = length - m_remdelay;
- m_reader->read(len, eos, buffer + m_remdelay * specs.channels);
-
- length = m_remdelay + len;
-
- m_remdelay = 0;
- }
- else
- {
- memset(buffer, 0, length * samplesize);
- m_remdelay -= length;
- }
- }
- else
- m_reader->read(length, eos, buffer);
-}
diff --git a/intern/audaspace/FX/AUD_DelayReader.h b/intern/audaspace/FX/AUD_DelayReader.h
deleted file mode 100644
index d4388e3befc..00000000000
--- a/intern/audaspace/FX/AUD_DelayReader.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_DelayReader.h
- * \ingroup audfx
- */
-
-
-#ifndef __AUD_DELAYREADER_H__
-#define __AUD_DELAYREADER_H__
-
-#include "AUD_EffectReader.h"
-#include "AUD_Buffer.h"
-
-/**
- * This class reads another reader and delays it.
- */
-class AUD_DelayReader : public AUD_EffectReader
-{
-private:
- /**
- * The delay level.
- */
- const int m_delay;
-
- /**
- * The remaining delay for playback.
- */
- int m_remdelay;
-
- // hide copy constructor and operator=
- AUD_DelayReader(const AUD_DelayReader&);
- AUD_DelayReader& operator=(const AUD_DelayReader&);
-
-public:
- /**
- * Creates a new delay reader.
- * \param reader The reader to read from.
- * \param delay The delay in seconds.
- */
- AUD_DelayReader(boost::shared_ptr<AUD_IReader> reader, float delay);
-
- virtual void seek(int position);
- virtual int getLength() const;
- virtual int getPosition() const;
- virtual void read(int& length, bool& eos, sample_t* buffer);
-};
-
-#endif //__AUD_DELAYREADER_H__
diff --git a/intern/audaspace/FX/AUD_DoubleFactory.cpp b/intern/audaspace/FX/AUD_DoubleFactory.cpp
deleted file mode 100644
index 21bcbc2f649..00000000000
--- a/intern/audaspace/FX/AUD_DoubleFactory.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_DoubleFactory.cpp
- * \ingroup audfx
- */
-
-
-#include "AUD_DoubleFactory.h"
-#include "AUD_DoubleReader.h"
-
-AUD_DoubleFactory::AUD_DoubleFactory(boost::shared_ptr<AUD_IFactory> factory1, boost::shared_ptr<AUD_IFactory> factory2) :
- m_factory1(factory1), m_factory2(factory2)
-{
-}
-
-boost::shared_ptr<AUD_IReader> AUD_DoubleFactory::createReader()
-{
- boost::shared_ptr<AUD_IReader> reader1 = m_factory1->createReader();
- boost::shared_ptr<AUD_IReader> reader2 = m_factory2->createReader();
-
- return boost::shared_ptr<AUD_IReader>(new AUD_DoubleReader(reader1, reader2));
-}
diff --git a/intern/audaspace/FX/AUD_DoubleFactory.h b/intern/audaspace/FX/AUD_DoubleFactory.h
deleted file mode 100644
index 4a02cc7bcdb..00000000000
--- a/intern/audaspace/FX/AUD_DoubleFactory.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_DoubleFactory.h
- * \ingroup audfx
- */
-
-
-#ifndef __AUD_DOUBLEFACTORY_H__
-#define __AUD_DOUBLEFACTORY_H__
-
-#include "AUD_IFactory.h"
-
-/**
- * This factory plays two other factories behind each other.
- */
-class AUD_DoubleFactory : public AUD_IFactory
-{
-private:
- /**
- * First played factory.
- */
- boost::shared_ptr<AUD_IFactory> m_factory1;
-
- /**
- * Second played factory.
- */
- boost::shared_ptr<AUD_IFactory> m_factory2;
-
- // hide copy constructor and operator=
- AUD_DoubleFactory(const AUD_DoubleFactory&);
- AUD_DoubleFactory& operator=(const AUD_DoubleFactory&);
-
-public:
- /**
- * Creates a new double factory.
- * \param factory1 The first input factory.
- * \param factory2 The second input factory.
- */
- AUD_DoubleFactory(boost::shared_ptr<AUD_IFactory> factory1, boost::shared_ptr<AUD_IFactory> factory2);
-
- virtual boost::shared_ptr<AUD_IReader> createReader();
-};
-
-#endif //__AUD_DOUBLEFACTORY_H__
diff --git a/intern/audaspace/FX/AUD_DoubleReader.cpp b/intern/audaspace/FX/AUD_DoubleReader.cpp
deleted file mode 100644
index ee18914e93f..00000000000
--- a/intern/audaspace/FX/AUD_DoubleReader.cpp
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_DoubleReader.cpp
- * \ingroup audfx
- */
-
-
-#include "AUD_DoubleReader.h"
-
-#include <cstring>
-
-AUD_DoubleReader::AUD_DoubleReader(boost::shared_ptr<AUD_IReader> reader1,
- boost::shared_ptr<AUD_IReader> reader2) :
- m_reader1(reader1), m_reader2(reader2), m_finished1(false)
-{
- AUD_Specs s1, s2;
- s1 = reader1->getSpecs();
- s2 = reader2->getSpecs();
-}
-
-AUD_DoubleReader::~AUD_DoubleReader()
-{
-}
-
-bool AUD_DoubleReader::isSeekable() const
-{
- return m_reader1->isSeekable() && m_reader2->isSeekable();
-}
-
-void AUD_DoubleReader::seek(int position)
-{
- m_reader1->seek(position);
-
- int pos1 = m_reader1->getPosition();
-
- if((m_finished1 = (pos1 < position)))
- m_reader2->seek(position - pos1);
- else
- m_reader2->seek(0);
-}
-
-int AUD_DoubleReader::getLength() const
-{
- int len1 = m_reader1->getLength();
- int len2 = m_reader2->getLength();
- if(len1 < 0 || len2 < 0)
- return -1;
- return len1 + len2;
-}
-
-int AUD_DoubleReader::getPosition() const
-{
- return m_reader1->getPosition() + m_reader2->getPosition();
-}
-
-AUD_Specs AUD_DoubleReader::getSpecs() const
-{
- return m_finished1 ? m_reader1->getSpecs() : m_reader2->getSpecs();
-}
-
-void AUD_DoubleReader::read(int& length, bool& eos, sample_t* buffer)
-{
- eos = false;
-
- if(!m_finished1)
- {
- int len = length;
-
- m_reader1->read(len, m_finished1, buffer);
-
- if(len < length)
- {
- AUD_Specs specs1, specs2;
- specs1 = m_reader1->getSpecs();
- specs2 = m_reader2->getSpecs();
- if(AUD_COMPARE_SPECS(specs1, specs2))
- {
- int len2 = length - len;
- m_reader2->read(len2, eos, buffer + specs1.channels * len);
- length = len + len2;
- }
- else
- length = len;
- }
- }
- else
- {
- m_reader2->read(length, eos, buffer);
- }
-}
diff --git a/intern/audaspace/FX/AUD_DoubleReader.h b/intern/audaspace/FX/AUD_DoubleReader.h
deleted file mode 100644
index 5d2f65f1a90..00000000000
--- a/intern/audaspace/FX/AUD_DoubleReader.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_DoubleReader.h
- * \ingroup audfx
- */
-
-
-#ifndef __AUD_DOUBLEREADER_H__
-#define __AUD_DOUBLEREADER_H__
-
-#include "AUD_IReader.h"
-#include "AUD_Buffer.h"
-
-#include <boost/shared_ptr.hpp>
-
-/**
- * This reader plays two readers sequently.
- */
-class AUD_DoubleReader : public AUD_IReader
-{
-private:
- /**
- * The first reader.
- */
- boost::shared_ptr<AUD_IReader> m_reader1;
-
- /**
- * The second reader.
- */
- boost::shared_ptr<AUD_IReader> m_reader2;
-
- /**
- * Whether we've reached the end of the first reader.
- */
- bool m_finished1;
-
- // hide copy constructor and operator=
- AUD_DoubleReader(const AUD_DoubleReader&);
- AUD_DoubleReader& operator=(const AUD_DoubleReader&);
-
-public:
- /**
- * Creates a new double reader.
- * \param reader1 The first reader to read from.
- * \param reader2 The second reader to read from.
- */
- AUD_DoubleReader(boost::shared_ptr<AUD_IReader> reader1, boost::shared_ptr<AUD_IReader> reader2);
-
- /**
- * Destroys the reader.
- */
- virtual ~AUD_DoubleReader();
-
- virtual bool isSeekable() const;
- virtual void seek(int position);
- virtual int getLength() const;
- virtual int getPosition() const;
- virtual AUD_Specs getSpecs() const;
- virtual void read(int& length, bool& eos, sample_t* buffer);
-};
-
-#endif //__AUD_DOUBLEREADER_H__
diff --git a/intern/audaspace/FX/AUD_DynamicIIRFilterFactory.cpp b/intern/audaspace/FX/AUD_DynamicIIRFilterFactory.cpp
deleted file mode 100644
index 319a78cfedd..00000000000
--- a/intern/audaspace/FX/AUD_DynamicIIRFilterFactory.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_DynamicIIRFilterFactory.cpp
- * \ingroup audfx
- */
-
-#include "AUD_DynamicIIRFilterFactory.h"
-#include "AUD_DynamicIIRFilterReader.h"
-
-
-AUD_DynamicIIRFilterFactory::AUD_DynamicIIRFilterFactory(boost::shared_ptr<AUD_IFactory> factory,
- boost::shared_ptr<AUD_IDynamicIIRFilterCalculator> calculator) :
- AUD_EffectFactory(factory),
- m_calculator(calculator)
-{
-}
-
-boost::shared_ptr<AUD_IReader> AUD_DynamicIIRFilterFactory::createReader()
-{
- return boost::shared_ptr<AUD_IReader>(new AUD_DynamicIIRFilterReader(getReader(), m_calculator));
-}
-
diff --git a/intern/audaspace/FX/AUD_DynamicIIRFilterFactory.h b/intern/audaspace/FX/AUD_DynamicIIRFilterFactory.h
deleted file mode 100644
index aece7a8c2ef..00000000000
--- a/intern/audaspace/FX/AUD_DynamicIIRFilterFactory.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_DynamicIIRFilterFactory.h
- * \ingroup audfx
- */
-
-#ifndef __AUD_DYNAMICIIRFILTERFACTORY_H__
-#define __AUD_DYNAMICIIRFILTERFACTORY_H__
-
-#include "AUD_EffectFactory.h"
-#include "AUD_IDynamicIIRFilterCalculator.h"
-#include <vector>
-
-/**
- * This factory creates a IIR filter reader.
- *
- * This means that on sample rate change the filter recalculates its
- * coefficients.
- */
-class AUD_DynamicIIRFilterFactory : public AUD_EffectFactory
-{
-protected:
- boost::shared_ptr<AUD_IDynamicIIRFilterCalculator> m_calculator;
-
-public:
- /**
- * Creates a new Dynmic IIR filter factory.
- * \param factory The input factory.
- */
- AUD_DynamicIIRFilterFactory(boost::shared_ptr<AUD_IFactory> factory,
- boost::shared_ptr<AUD_IDynamicIIRFilterCalculator> calculator);
-
- virtual boost::shared_ptr<AUD_IReader> createReader();
-};
-
-#endif // __AUD_DYNAMICIIRFILTERFACTORY_H__
diff --git a/intern/audaspace/FX/AUD_DynamicIIRFilterReader.cpp b/intern/audaspace/FX/AUD_DynamicIIRFilterReader.cpp
deleted file mode 100644
index 52aaf2311c0..00000000000
--- a/intern/audaspace/FX/AUD_DynamicIIRFilterReader.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_DynamicIIRFilterReader.cpp
- * \ingroup audfx
- */
-
-#include "AUD_DynamicIIRFilterReader.h"
-
-AUD_DynamicIIRFilterReader::AUD_DynamicIIRFilterReader(boost::shared_ptr<AUD_IReader> reader,
- boost::shared_ptr<AUD_IDynamicIIRFilterCalculator> calculator) :
- AUD_IIRFilterReader(reader, std::vector<float>(), std::vector<float>()),
- m_calculator(calculator)
-{
- sampleRateChanged(reader->getSpecs().rate);
-}
-
-void AUD_DynamicIIRFilterReader::sampleRateChanged(AUD_SampleRate rate)
-{
- std::vector<float> a, b;
- m_calculator->recalculateCoefficients(rate, b, a);
- setCoefficients(b, a);
-}
diff --git a/intern/audaspace/FX/AUD_DynamicIIRFilterReader.h b/intern/audaspace/FX/AUD_DynamicIIRFilterReader.h
deleted file mode 100644
index 0b68578bc53..00000000000
--- a/intern/audaspace/FX/AUD_DynamicIIRFilterReader.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_DynamicIIRFilterReader.h
- * \ingroup audfx
- */
-
-#ifndef __AUD_DYNAMICIIRFILTERREADER_H__
-#define __AUD_DYNAMICIIRFILTERREADER_H__
-
-#include "AUD_IIRFilterReader.h"
-#include "AUD_IDynamicIIRFilterCalculator.h"
-
-/**
- * This class is for dynamic infinite impulse response filters with simple
- * coefficients that change depending on the sample rate.
- */
-class AUD_DynamicIIRFilterReader : public AUD_IIRFilterReader
-{
-private:
- /**
- * The factory for dynamically recalculating filter coefficients.
- */
- boost::shared_ptr<AUD_IDynamicIIRFilterCalculator> m_calculator;
-
-public:
- AUD_DynamicIIRFilterReader(boost::shared_ptr<AUD_IReader> reader,
- boost::shared_ptr<AUD_IDynamicIIRFilterCalculator> calculator);
-
- virtual void sampleRateChanged(AUD_SampleRate rate);
-};
-
-#endif // __AUD_DYNAMICIIRFILTERREADER_H__
diff --git a/intern/audaspace/FX/AUD_EffectFactory.cpp b/intern/audaspace/FX/AUD_EffectFactory.cpp
deleted file mode 100644
index 6018ed561ca..00000000000
--- a/intern/audaspace/FX/AUD_EffectFactory.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_EffectFactory.cpp
- * \ingroup audfx
- */
-
-
-#include "AUD_EffectFactory.h"
-#include "AUD_IReader.h"
-
-AUD_EffectFactory::AUD_EffectFactory(boost::shared_ptr<AUD_IFactory> factory)
-{
- m_factory = factory;
-}
-
-AUD_EffectFactory::~AUD_EffectFactory()
-{
-}
-
-boost::shared_ptr<AUD_IFactory> AUD_EffectFactory::getFactory() const
-{
- return m_factory;
-}
diff --git a/intern/audaspace/FX/AUD_EffectFactory.h b/intern/audaspace/FX/AUD_EffectFactory.h
deleted file mode 100644
index d09872638be..00000000000
--- a/intern/audaspace/FX/AUD_EffectFactory.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_EffectFactory.h
- * \ingroup audfx
- */
-
-
-#ifndef __AUD_EFFECTFACTORY_H__
-#define __AUD_EFFECTFACTORY_H__
-
-#include "AUD_IFactory.h"
-
-/**
- * This factory is a base class for all effect factories that take one other
- * factory as input.
- */
-class AUD_EffectFactory : public AUD_IFactory
-{
-private:
- // hide copy constructor and operator=
- AUD_EffectFactory(const AUD_EffectFactory&);
- AUD_EffectFactory& operator=(const AUD_EffectFactory&);
-
-protected:
- /**
- * If there is no reader it is created out of this factory.
- */
- boost::shared_ptr<AUD_IFactory> m_factory;
-
- /**
- * Returns the reader created out of the factory.
- * This method can be used for the createReader function of the implementing
- * classes.
- * \return The reader created out of the factory.
- */
- inline boost::shared_ptr<AUD_IReader> getReader() const
- {
- return m_factory->createReader();
- }
-
-public:
- /**
- * Creates a new factory.
- * \param factory The input factory.
- */
- AUD_EffectFactory(boost::shared_ptr<AUD_IFactory> factory);
-
- /**
- * Destroys the factory.
- */
- virtual ~AUD_EffectFactory();
-
- /**
- * Returns the saved factory.
- * \return The factory or NULL if there has no factory been saved.
- */
- boost::shared_ptr<AUD_IFactory> getFactory() const;
-};
-
-#endif //__AUD_EFFECTFACTORY_H__
diff --git a/intern/audaspace/FX/AUD_EffectReader.cpp b/intern/audaspace/FX/AUD_EffectReader.cpp
deleted file mode 100644
index b3e80bef03b..00000000000
--- a/intern/audaspace/FX/AUD_EffectReader.cpp
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_EffectReader.cpp
- * \ingroup audfx
- */
-
-
-#include "AUD_EffectReader.h"
-
-AUD_EffectReader::AUD_EffectReader(boost::shared_ptr<AUD_IReader> reader)
-{
- m_reader = reader;
-}
-
-AUD_EffectReader::~AUD_EffectReader()
-{
-}
-
-bool AUD_EffectReader::isSeekable() const
-{
- return m_reader->isSeekable();
-}
-
-void AUD_EffectReader::seek(int position)
-{
- m_reader->seek(position);
-}
-
-int AUD_EffectReader::getLength() const
-{
- return m_reader->getLength();
-}
-
-int AUD_EffectReader::getPosition() const
-{
- return m_reader->getPosition();
-}
-
-AUD_Specs AUD_EffectReader::getSpecs() const
-{
- return m_reader->getSpecs();
-}
-
-void AUD_EffectReader::read(int& length, bool& eos, sample_t* buffer)
-{
- m_reader->read(length, eos, buffer);
-}
diff --git a/intern/audaspace/FX/AUD_EffectReader.h b/intern/audaspace/FX/AUD_EffectReader.h
deleted file mode 100644
index 2745c12afaf..00000000000
--- a/intern/audaspace/FX/AUD_EffectReader.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_EffectReader.h
- * \ingroup audfx
- */
-
-
-#ifndef __AUD_EFFECTREADER_H__
-#define __AUD_EFFECTREADER_H__
-
-#include "AUD_IReader.h"
-
-#include <boost/shared_ptr.hpp>
-
-/**
- * This reader is a base class for all effect readers that take one other reader
- * as input.
- */
-class AUD_EffectReader : public AUD_IReader
-{
-private:
- // hide copy constructor and operator=
- AUD_EffectReader(const AUD_EffectReader&);
- AUD_EffectReader& operator=(const AUD_EffectReader&);
-
-protected:
- /**
- * The reader to read from.
- */
- boost::shared_ptr<AUD_IReader> m_reader;
-
-public:
- /**
- * Creates a new effect reader.
- * \param reader The reader to read from.
- */
- AUD_EffectReader(boost::shared_ptr<AUD_IReader> reader);
-
- /**
- * Destroys the reader.
- */
- virtual ~AUD_EffectReader();
-
- virtual bool isSeekable() const;
- virtual void seek(int position);
- virtual int getLength() const;
- virtual int getPosition() const;
- virtual AUD_Specs getSpecs() const;
- virtual void read(int& length, bool& eos, sample_t* buffer);
-};
-
-#endif //__AUD_EFFECTREADER_H__
diff --git a/intern/audaspace/FX/AUD_EnvelopeFactory.cpp b/intern/audaspace/FX/AUD_EnvelopeFactory.cpp
deleted file mode 100644
index 1e5737557c1..00000000000
--- a/intern/audaspace/FX/AUD_EnvelopeFactory.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_EnvelopeFactory.cpp
- * \ingroup audfx
- */
-
-
-#include "AUD_EnvelopeFactory.h"
-#include "AUD_CallbackIIRFilterReader.h"
-
-#include <cmath>
-
-struct EnvelopeParameters
-{
- float attack;
- float release;
- float threshold;
- float arthreshold;
-};
-
-sample_t AUD_EnvelopeFactory::envelopeFilter(AUD_CallbackIIRFilterReader* reader, EnvelopeParameters* param)
-{
- float in = fabs(reader->x(0));
- float out = reader->y(-1);
- if(in < param->threshold)
- in = 0.0f;
- return (in > out ? param->attack : param->release) * (out - in) + in;
-}
-
-void AUD_EnvelopeFactory::endEnvelopeFilter(EnvelopeParameters* param)
-{
- delete param;
-}
-
-AUD_EnvelopeFactory::AUD_EnvelopeFactory(boost::shared_ptr<AUD_IFactory> factory, float attack,
- float release, float threshold,
- float arthreshold) :
- AUD_EffectFactory(factory),
- m_attack(attack),
- m_release(release),
- m_threshold(threshold),
- m_arthreshold(arthreshold)
-{
-}
-
-boost::shared_ptr<AUD_IReader> AUD_EnvelopeFactory::createReader()
-{
- boost::shared_ptr<AUD_IReader> reader = getReader();
-
- EnvelopeParameters* param = new EnvelopeParameters();
- param->arthreshold = m_arthreshold;
- param->attack = pow(m_arthreshold, 1.0f/(static_cast<float>(reader->getSpecs().rate) * m_attack));
- param->release = pow(m_arthreshold, 1.0f/(static_cast<float>(reader->getSpecs().rate) * m_release));
- param->threshold = m_threshold;
-
- return boost::shared_ptr<AUD_IReader>(new AUD_CallbackIIRFilterReader(reader, 1, 2,
- (doFilterIIR) envelopeFilter,
- (endFilterIIR) endEnvelopeFilter,
- param));
-}
diff --git a/intern/audaspace/FX/AUD_EnvelopeFactory.h b/intern/audaspace/FX/AUD_EnvelopeFactory.h
deleted file mode 100644
index 656212c8cac..00000000000
--- a/intern/audaspace/FX/AUD_EnvelopeFactory.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_EnvelopeFactory.h
- * \ingroup audfx
- */
-
-
-#ifndef __AUD_ENVELOPEFACTORY_H__
-#define __AUD_ENVELOPEFACTORY_H__
-
-#include "AUD_EffectFactory.h"
-class AUD_CallbackIIRFilterReader;
-struct EnvelopeParameters;
-
-/**
- * This factory creates an envelope follower reader.
- */
-class AUD_EnvelopeFactory : public AUD_EffectFactory
-{
-private:
- /**
- * The attack value in seconds.
- */
- const float m_attack;
-
- /**
- * The release value in seconds.
- */
- const float m_release;
-
- /**
- * The threshold value.
- */
- const float m_threshold;
-
- /**
- * The attack/release threshold value.
- */
- const float m_arthreshold;
-
- // hide copy constructor and operator=
- AUD_EnvelopeFactory(const AUD_EnvelopeFactory&);
- AUD_EnvelopeFactory& operator=(const AUD_EnvelopeFactory&);
-
-public:
- /**
- * Creates a new envelope factory.
- * \param factory The input factory.
- * \param attack The attack value in seconds.
- * \param release The release value in seconds.
- * \param threshold The threshold value.
- * \param arthreshold The attack/release threshold value.
- */
- AUD_EnvelopeFactory(boost::shared_ptr<AUD_IFactory> factory, float attack, float release,
- float threshold, float arthreshold);
-
- virtual boost::shared_ptr<AUD_IReader> createReader();
-
- static sample_t envelopeFilter(AUD_CallbackIIRFilterReader* reader, EnvelopeParameters* param);
- static void endEnvelopeFilter(EnvelopeParameters* param);
-};
-
-#endif //__AUD_ENVELOPEFACTORY_H__
diff --git a/intern/audaspace/FX/AUD_FaderFactory.cpp b/intern/audaspace/FX/AUD_FaderFactory.cpp
deleted file mode 100644
index b34d2134385..00000000000
--- a/intern/audaspace/FX/AUD_FaderFactory.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_FaderFactory.cpp
- * \ingroup audfx
- */
-
-
-#include "AUD_FaderFactory.h"
-#include "AUD_FaderReader.h"
-
-AUD_FaderFactory::AUD_FaderFactory(boost::shared_ptr<AUD_IFactory> factory, AUD_FadeType type,
- float start, float length) :
- AUD_EffectFactory(factory),
- m_type(type),
- m_start(start),
- m_length(length)
-{
-}
-
-AUD_FadeType AUD_FaderFactory::getType() const
-{
- return m_type;
-}
-
-float AUD_FaderFactory::getStart() const
-{
- return m_start;
-}
-
-float AUD_FaderFactory::getLength() const
-{
- return m_length;
-}
-
-boost::shared_ptr<AUD_IReader> AUD_FaderFactory::createReader()
-{
- return boost::shared_ptr<AUD_IReader>(new AUD_FaderReader(getReader(), m_type, m_start, m_length));
-}
diff --git a/intern/audaspace/FX/AUD_FaderFactory.h b/intern/audaspace/FX/AUD_FaderFactory.h
deleted file mode 100644
index f9ad88a751d..00000000000
--- a/intern/audaspace/FX/AUD_FaderFactory.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_FaderFactory.h
- * \ingroup audfx
- */
-
-
-#ifndef __AUD_FADERFACTORY_H__
-#define __AUD_FADERFACTORY_H__
-
-#include "AUD_EffectFactory.h"
-
-/**
- * This factory fades another factory.
- * If the fading type is AUD_FADE_IN, everything before the fading start will be
- * silenced, for AUD_FADE_OUT that's true for everything after fading ends.
- */
-class AUD_FaderFactory : public AUD_EffectFactory
-{
-private:
- /**
- * The fading type.
- */
- const AUD_FadeType m_type;
-
- /**
- * The fading start.
- */
- const float m_start;
-
- /**
- * The fading length.
- */
- const float m_length;
-
- // hide copy constructor and operator=
- AUD_FaderFactory(const AUD_FaderFactory&);
- AUD_FaderFactory& operator=(const AUD_FaderFactory&);
-
-public:
- /**
- * Creates a new fader factory.
- * \param factory The input factory.
- * \param type The fading type.
- * \param start The time where fading should start in seconds.
- * \param length How long fading should last in seconds.
- */
- AUD_FaderFactory(boost::shared_ptr<AUD_IFactory> factory,
- AUD_FadeType type = AUD_FADE_IN,
- float start = 0.0f, float length = 1.0f);
-
- /**
- * Returns the fading type.
- */
- AUD_FadeType getType() const;
-
- /**
- * Returns the fading start.
- */
- float getStart() const;
-
- /**
- * Returns the fading length.
- */
- float getLength() const;
-
- virtual boost::shared_ptr<AUD_IReader> createReader();
-};
-
-#endif //__AUD_FADERFACTORY_H__
diff --git a/intern/audaspace/FX/AUD_FaderReader.cpp b/intern/audaspace/FX/AUD_FaderReader.cpp
deleted file mode 100644
index e09072054cb..00000000000
--- a/intern/audaspace/FX/AUD_FaderReader.cpp
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_FaderReader.cpp
- * \ingroup audfx
- */
-
-
-#include "AUD_FaderReader.h"
-
-#include <cstring>
-
-AUD_FaderReader::AUD_FaderReader(boost::shared_ptr<AUD_IReader> reader, AUD_FadeType type,
- float start,float length) :
- AUD_EffectReader(reader),
- m_type(type),
- m_start(start),
- m_length(length)
-{
-}
-
-void AUD_FaderReader::read(int& length, bool& eos, sample_t* buffer)
-{
- int position = m_reader->getPosition();
- AUD_Specs specs = m_reader->getSpecs();
- int samplesize = AUD_SAMPLE_SIZE(specs);
-
- m_reader->read(length, eos, buffer);
-
- if((position + length) / (float)specs.rate <= m_start)
- {
- if(m_type != AUD_FADE_OUT)
- {
- memset(buffer, 0, length * samplesize);
- }
- }
- else if(position / (float)specs.rate >= m_start+m_length)
- {
- if(m_type == AUD_FADE_OUT)
- {
- memset(buffer, 0, length * samplesize);
- }
- }
- else
- {
- float volume = 1.0f;
-
- for(int i = 0; i < length * specs.channels; i++)
- {
- if(i % specs.channels == 0)
- {
- volume = (((position+i)/(float)specs.rate)-m_start) / m_length;
- if(volume > 1.0f)
- volume = 1.0f;
- else if(volume < 0.0f)
- volume = 0.0f;
-
- if(m_type == AUD_FADE_OUT)
- volume = 1.0f - volume;
- }
-
- buffer[i] = buffer[i] * volume;
- }
- }
-}
diff --git a/intern/audaspace/FX/AUD_FaderReader.h b/intern/audaspace/FX/AUD_FaderReader.h
deleted file mode 100644
index a49960b30fb..00000000000
--- a/intern/audaspace/FX/AUD_FaderReader.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_FaderReader.h
- * \ingroup audfx
- */
-
-
-#ifndef __AUD_FADERREADER_H__
-#define __AUD_FADERREADER_H__
-
-#include "AUD_EffectReader.h"
-#include "AUD_Buffer.h"
-
-/**
- * This class fades another reader.
- * If the fading type is AUD_FADE_IN, everything before the fading start will be
- * silenced, for AUD_FADE_OUT that's true for everything after fading ends.
- */
-class AUD_FaderReader : public AUD_EffectReader
-{
-private:
- /**
- * The fading type.
- */
- const AUD_FadeType m_type;
-
- /**
- * The fading start.
- */
- const float m_start;
-
- /**
- * The fading length.
- */
- const float m_length;
-
- // hide copy constructor and operator=
- AUD_FaderReader(const AUD_FaderReader&);
- AUD_FaderReader& operator=(const AUD_FaderReader&);
-
-public:
- /**
- * Creates a new fader reader.
- * \param type The fading type.
- * \param start The time where fading should start in seconds.
- * \param length How long fading should last in seconds.
- */
- AUD_FaderReader(boost::shared_ptr<AUD_IReader> reader, AUD_FadeType type,
- float start,float length);
-
- virtual void read(int& length, bool& eos, sample_t* buffer);
-};
-
-#endif //__AUD_FADERREADER_H__
diff --git a/intern/audaspace/FX/AUD_HighpassCalculator.cpp b/intern/audaspace/FX/AUD_HighpassCalculator.cpp
deleted file mode 100644
index 573bba1c62b..00000000000
--- a/intern/audaspace/FX/AUD_HighpassCalculator.cpp
+++ /dev/null
@@ -1,27 +0,0 @@
-#include "AUD_HighpassCalculator.h"
-
-#include <cmath>
-
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-
-AUD_HighpassCalculator::AUD_HighpassCalculator(float frequency, float Q) :
- m_frequency(frequency),
- m_Q(Q)
-{
-}
-
-void AUD_HighpassCalculator::recalculateCoefficients(AUD_SampleRate rate, std::vector<float> &b, std::vector<float> &a)
-{
- float w0 = 2.0 * M_PI * (AUD_SampleRate)m_frequency / rate;
- float alpha = (float)(sin(w0) / (2.0 * (double)m_Q));
- float norm = 1 + alpha;
- float c = cos(w0);
- a.push_back(1);
- a.push_back(-2 * c / norm);
- a.push_back((1 - alpha) / norm);
- b.push_back((1 + c) / (2 * norm));
- b.push_back((-1 - c) / norm);
- b.push_back(b[0]);
-}
diff --git a/intern/audaspace/FX/AUD_HighpassCalculator.h b/intern/audaspace/FX/AUD_HighpassCalculator.h
deleted file mode 100644
index bad1c08f7c7..00000000000
--- a/intern/audaspace/FX/AUD_HighpassCalculator.h
+++ /dev/null
@@ -1,25 +0,0 @@
-#ifndef AUD_HIGHPASSCALCULATOR_H
-#define AUD_HIGHPASSCALCULATOR_H
-
-#include "AUD_IDynamicIIRFilterCalculator.h"
-
-class AUD_HighpassCalculator : public AUD_IDynamicIIRFilterCalculator
-{
-private:
- /**
- * The cutoff frequency.
- */
- const float m_frequency;
-
- /**
- * The Q factor.
- */
- const float m_Q;
-
-public:
- AUD_HighpassCalculator(float frequency, float Q);
-
- virtual void recalculateCoefficients(AUD_SampleRate rate, std::vector<float> &b, std::vector<float> &a);
-};
-
-#endif // AUD_HIGHPASSCALCULATOR_H
diff --git a/intern/audaspace/FX/AUD_HighpassFactory.cpp b/intern/audaspace/FX/AUD_HighpassFactory.cpp
deleted file mode 100644
index 2456085a8a1..00000000000
--- a/intern/audaspace/FX/AUD_HighpassFactory.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_HighpassFactory.cpp
- * \ingroup audfx
- */
-
-
-#include "AUD_HighpassFactory.h"
-#include "AUD_IIRFilterReader.h"
-#include "AUD_HighpassCalculator.h"
-
-AUD_HighpassFactory::AUD_HighpassFactory(boost::shared_ptr<AUD_IFactory> factory, float frequency,
- float Q) :
- AUD_DynamicIIRFilterFactory(factory, boost::shared_ptr<AUD_IDynamicIIRFilterCalculator>(new AUD_HighpassCalculator(frequency, Q)))
-{
-}
-
diff --git a/intern/audaspace/FX/AUD_HighpassFactory.h b/intern/audaspace/FX/AUD_HighpassFactory.h
deleted file mode 100644
index 56ced91c53c..00000000000
--- a/intern/audaspace/FX/AUD_HighpassFactory.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_HighpassFactory.h
- * \ingroup audfx
- */
-
-
-#ifndef __AUD_HIGHPASSFACTORY_H__
-#define __AUD_HIGHPASSFACTORY_H__
-
-#include "AUD_DynamicIIRFilterFactory.h"
-
-/**
- * This factory creates a highpass filter reader.
- */
-class AUD_HighpassFactory : public AUD_DynamicIIRFilterFactory
-{
-private:
- // hide copy constructor and operator=
- AUD_HighpassFactory(const AUD_HighpassFactory&);
- AUD_HighpassFactory& operator=(const AUD_HighpassFactory&);
-
-public:
- /**
- * Creates a new highpass factory.
- * \param factory The input factory.
- * \param frequency The cutoff frequency.
- * \param Q The Q factor.
- */
- AUD_HighpassFactory(boost::shared_ptr<AUD_IFactory> factory, float frequency, float Q = 1.0f);
-};
-
-#endif //__AUD_HIGHPASSFACTORY_H__
diff --git a/intern/audaspace/FX/AUD_IDynamicIIRFilterCalculator.h b/intern/audaspace/FX/AUD_IDynamicIIRFilterCalculator.h
deleted file mode 100644
index 2e0d8418571..00000000000
--- a/intern/audaspace/FX/AUD_IDynamicIIRFilterCalculator.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_IDynamicIIRFilterCalculator.h
- * \ingroup audfx
- */
-
-#ifndef AUD_IDYNAMICIIRFILTERCALCULATOR_H
-#define AUD_IDYNAMICIIRFILTERCALCULATOR_H
-
-#include "AUD_Space.h"
-
-#include <vector>
-
-/**
- * This interface calculates dynamic filter coefficients which depend on the
- * sampling rate for AUD_DynamicIIRFilterReaders.
- */
-class AUD_IDynamicIIRFilterCalculator
-{
-public:
- virtual ~AUD_IDynamicIIRFilterCalculator() {}
-
- /**
- * Recalculates the filter coefficients.
- * \param rate The sample rate of the audio data.
- * \param[out] b The input filter coefficients.
- * \param[out] a The output filter coefficients.
- */
- virtual void recalculateCoefficients(AUD_SampleRate rate,
- std::vector<float>& b,
- std::vector<float>& a)=0;
-};
-
-#endif // AUD_IDYNAMICIIRFILTERCALCULATOR_H
diff --git a/intern/audaspace/FX/AUD_IIRFilterFactory.cpp b/intern/audaspace/FX/AUD_IIRFilterFactory.cpp
deleted file mode 100644
index c4f94a2dc27..00000000000
--- a/intern/audaspace/FX/AUD_IIRFilterFactory.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_IIRFilterFactory.cpp
- * \ingroup audfx
- */
-
-
-#include "AUD_IIRFilterFactory.h"
-#include "AUD_IIRFilterReader.h"
-
-AUD_IIRFilterFactory::AUD_IIRFilterFactory(boost::shared_ptr<AUD_IFactory> factory,
- std::vector<float> b,
- std::vector<float> a) :
- AUD_EffectFactory(factory), m_a(a), m_b(b)
-{
-}
-
-boost::shared_ptr<AUD_IReader> AUD_IIRFilterFactory::createReader()
-{
- return boost::shared_ptr<AUD_IReader>(new AUD_IIRFilterReader(getReader(), m_b, m_a));
-}
diff --git a/intern/audaspace/FX/AUD_IIRFilterFactory.h b/intern/audaspace/FX/AUD_IIRFilterFactory.h
deleted file mode 100644
index 0b55c120384..00000000000
--- a/intern/audaspace/FX/AUD_IIRFilterFactory.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_IIRFilterFactory.h
- * \ingroup audfx
- */
-
-
-#ifndef __AUD_IIRFILTERFACTORY_H__
-#define __AUD_IIRFILTERFACTORY_H__
-
-#include "AUD_EffectFactory.h"
-#include "AUD_IDynamicIIRFilterCalculator.h"
-
-#include <vector>
-
-/**
- * This factory creates a IIR filter reader.
- */
-class AUD_IIRFilterFactory : public AUD_EffectFactory
-{
-private:
- /**
- * Output filter coefficients.
- */
- std::vector<float> m_a;
-
- /**
- * Input filter coefficients.
- */
- std::vector<float> m_b;
-
- // hide copy constructor and operator=
- AUD_IIRFilterFactory(const AUD_IIRFilterFactory&);
- AUD_IIRFilterFactory& operator=(const AUD_IIRFilterFactory&);
-
-public:
- /**
- * Creates a new IIR filter factory.
- * \param factory The input factory.
- * \param b The input filter coefficients.
- * \param a The output filter coefficients.
- */
- AUD_IIRFilterFactory(boost::shared_ptr<AUD_IFactory> factory, std::vector<float> b,
- std::vector<float> a);
-
- virtual boost::shared_ptr<AUD_IReader> createReader();
-};
-
-#endif //__AUD_IIRFILTERFACTORY_H__
diff --git a/intern/audaspace/FX/AUD_IIRFilterReader.cpp b/intern/audaspace/FX/AUD_IIRFilterReader.cpp
deleted file mode 100644
index 6716e6b9ddc..00000000000
--- a/intern/audaspace/FX/AUD_IIRFilterReader.cpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_IIRFilterReader.cpp
- * \ingroup audfx
- */
-
-
-#include "AUD_IIRFilterReader.h"
-
-AUD_IIRFilterReader::AUD_IIRFilterReader(boost::shared_ptr<AUD_IReader> reader,
- const std::vector<float>& b,
- const std::vector<float>& a) :
- AUD_BaseIIRFilterReader(reader, b.size(), a.size()), m_a(a), m_b(b)
-{
- if(m_a.empty() == false)
- {
- for(int i = 1; i < m_a.size(); i++)
- m_a[i] /= m_a[0];
- for(int i = 0; i < m_b.size(); i++)
- m_b[i] /= m_a[0];
- m_a[0] = 1;
- }
-}
-
-sample_t AUD_IIRFilterReader::filter()
-{
- sample_t out = 0;
-
- for(int i = 1; i < m_a.size(); i++)
- out -= y(-i) * m_a[i];
- for(int i = 0; i < m_b.size(); i++)
- out += x(-i) * m_b[i];
-
- return out;
-}
-
-void AUD_IIRFilterReader::setCoefficients(const std::vector<float>& b,
- const std::vector<float>& a)
-{
- setLengths(b.size(), a.size());
- m_a = a;
- m_b = b;
-}
diff --git a/intern/audaspace/FX/AUD_IIRFilterReader.h b/intern/audaspace/FX/AUD_IIRFilterReader.h
deleted file mode 100644
index d663805b50f..00000000000
--- a/intern/audaspace/FX/AUD_IIRFilterReader.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_IIRFilterReader.h
- * \ingroup audfx
- */
-
-
-#ifndef __AUD_IIRFILTERREADER_H__
-#define __AUD_IIRFILTERREADER_H__
-
-#include "AUD_BaseIIRFilterReader.h"
-
-#include <vector>
-
-/**
- * This class is for infinite impulse response filters with simple coefficients.
- */
-class AUD_IIRFilterReader : public AUD_BaseIIRFilterReader
-{
-private:
- /**
- * Output filter coefficients.
- */
- std::vector<float> m_a;
-
- /**
- * Input filter coefficients.
- */
- std::vector<float> m_b;
-
- // hide copy constructor and operator=
- AUD_IIRFilterReader(const AUD_IIRFilterReader&);
- AUD_IIRFilterReader& operator=(const AUD_IIRFilterReader&);
-
-public:
- /**
- * Creates a new IIR filter reader.
- * \param reader The reader to read from.
- * \param b The input filter coefficients.
- * \param a The output filter coefficients.
- */
- AUD_IIRFilterReader(boost::shared_ptr<AUD_IReader> reader, const std::vector<float>& b,
- const std::vector<float>& a);
-
- virtual sample_t filter();
-
- void setCoefficients(const std::vector<float>& b,
- const std::vector<float>& a);
-};
-
-#endif //__AUD_IIRFILTERREADER_H__
diff --git a/intern/audaspace/FX/AUD_LimiterFactory.cpp b/intern/audaspace/FX/AUD_LimiterFactory.cpp
deleted file mode 100644
index 679ed3a6b8b..00000000000
--- a/intern/audaspace/FX/AUD_LimiterFactory.cpp
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_LimiterFactory.cpp
- * \ingroup audfx
- */
-
-
-#include "AUD_LimiterFactory.h"
-#include "AUD_LimiterReader.h"
-#include "AUD_Space.h"
-
-AUD_LimiterFactory::AUD_LimiterFactory(boost::shared_ptr<AUD_IFactory> factory,
- float start, float end) :
- AUD_EffectFactory(factory),
- m_start(start),
- m_end(end)
-{
-}
-
-float AUD_LimiterFactory::getStart() const
-{
- return m_start;
-}
-
-float AUD_LimiterFactory::getEnd() const
-{
- return m_end;
-}
-
-boost::shared_ptr<AUD_IReader> AUD_LimiterFactory::createReader()
-{
- return boost::shared_ptr<AUD_IReader>(new AUD_LimiterReader(getReader(), m_start, m_end));
-}
diff --git a/intern/audaspace/FX/AUD_LimiterFactory.h b/intern/audaspace/FX/AUD_LimiterFactory.h
deleted file mode 100644
index 0376952b4bd..00000000000
--- a/intern/audaspace/FX/AUD_LimiterFactory.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_LimiterFactory.h
- * \ingroup audfx
- */
-
-
-#ifndef __AUD_LIMITERFACTORY_H__
-#define __AUD_LIMITERFACTORY_H__
-
-#include "AUD_EffectFactory.h"
-
-/**
- * This factory limits another factory in start and end time.
- */
-class AUD_LimiterFactory : public AUD_EffectFactory
-{
-private:
- /**
- * The start time.
- */
- const float m_start;
-
- /**
- * The end time.
- */
- const float m_end;
-
- // hide copy constructor and operator=
- AUD_LimiterFactory(const AUD_LimiterFactory&);
- AUD_LimiterFactory& operator=(const AUD_LimiterFactory&);
-
-public:
- /**
- * Creates a new limiter factory.
- * \param factory The input factory.
- * \param start The desired start time.
- * \param end The desired end time, a negative value signals that it should
- * play to the end.
- */
- AUD_LimiterFactory(boost::shared_ptr<AUD_IFactory> factory,
- float start = 0, float end = -1);
-
- /**
- * Returns the start time.
- */
- float getStart() const;
-
- /**
- * Returns the end time.
- */
- float getEnd() const;
-
- virtual boost::shared_ptr<AUD_IReader> createReader();
-};
-
-#endif //__AUD_LIMITERFACTORY_H__
diff --git a/intern/audaspace/FX/AUD_LimiterReader.cpp b/intern/audaspace/FX/AUD_LimiterReader.cpp
deleted file mode 100644
index 7d850ac7b5f..00000000000
--- a/intern/audaspace/FX/AUD_LimiterReader.cpp
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_LimiterReader.cpp
- * \ingroup audfx
- */
-
-
-#include "AUD_LimiterReader.h"
-#include "AUD_Buffer.h"
-
-AUD_LimiterReader::AUD_LimiterReader(boost::shared_ptr<AUD_IReader> reader,
- float start, float end) :
- AUD_EffectReader(reader),
- m_start(start),
- m_end(end)
-{
- if(m_start > 0)
- {
- AUD_Specs specs = m_reader->getSpecs();
- AUD_Specs specs2;
-
- if(m_reader->isSeekable())
- m_reader->seek(m_start * specs.rate);
- else
- {
- // skip first m_start samples by reading them
- int length = AUD_DEFAULT_BUFFER_SIZE;
- AUD_Buffer buffer(AUD_DEFAULT_BUFFER_SIZE * AUD_SAMPLE_SIZE(specs));
- bool eos = false;
- for(int len = m_start * specs.rate;
- length > 0 && !eos;
- len -= length)
- {
- if(len < AUD_DEFAULT_BUFFER_SIZE)
- length = len;
-
- m_reader->read(length, eos, buffer.getBuffer());
-
- specs2 = m_reader->getSpecs();
- if(specs2.rate != specs.rate)
- {
- len = len * specs2.rate / specs.rate;
- specs.rate = specs2.rate;
- }
-
- if(specs2.channels != specs.channels)
- {
- specs = specs2;
- buffer.assureSize(AUD_DEFAULT_BUFFER_SIZE * AUD_SAMPLE_SIZE(specs));
- }
- }
- }
- }
-}
-
-void AUD_LimiterReader::seek(int position)
-{
- m_reader->seek(position + m_start * m_reader->getSpecs().rate);
-}
-
-int AUD_LimiterReader::getLength() const
-{
- int len = m_reader->getLength();
- AUD_SampleRate rate = m_reader->getSpecs().rate;
- if(len < 0 || (len > m_end * rate && m_end >= 0))
- len = m_end * rate;
- return len - m_start * rate;
-}
-
-int AUD_LimiterReader::getPosition() const
-{
- int pos = m_reader->getPosition();
- AUD_SampleRate rate = m_reader->getSpecs().rate;
- return AUD_MIN(pos, m_end * rate) - m_start * rate;
-}
-
-void AUD_LimiterReader::read(int& length, bool& eos, sample_t* buffer)
-{
- eos = false;
- if(m_end >= 0)
- {
- int position = m_reader->getPosition();
- AUD_SampleRate rate = m_reader->getSpecs().rate;
-
- if(position + length > m_end * rate)
- {
- length = m_end * rate - position;
- eos = true;
- }
-
- if(position < int(m_start * rate))
- {
- int len2 = length;
- for(int len = int(m_start * rate) - position;
- len2 == length && !eos;
- len -= length)
- {
- if(len < length)
- len2 = len;
-
- m_reader->read(len2, eos, buffer);
- position += len2;
- }
-
- if(position < m_start * rate)
- {
- length = 0;
- return;
- }
- }
-
- if(length < 0)
- {
- length = 0;
- return;
- }
- }
- if(eos)
- {
- m_reader->read(length, eos, buffer);
- eos = true;
- }
- else
- m_reader->read(length, eos, buffer);
-}
diff --git a/intern/audaspace/FX/AUD_LimiterReader.h b/intern/audaspace/FX/AUD_LimiterReader.h
deleted file mode 100644
index 607eb9e5bec..00000000000
--- a/intern/audaspace/FX/AUD_LimiterReader.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_LimiterReader.h
- * \ingroup audfx
- */
-
-
-#ifndef __AUD_LIMITERREADER_H__
-#define __AUD_LIMITERREADER_H__
-
-#include "AUD_EffectReader.h"
-
-/**
- * This reader limits another reader in start and end times.
- */
-class AUD_LimiterReader : public AUD_EffectReader
-{
-private:
- /**
- * The start sample: inclusive.
- */
- const float m_start;
-
- /**
- * The end sample: exlusive.
- */
- const float m_end;
-
- // hide copy constructor and operator=
- AUD_LimiterReader(const AUD_LimiterReader&);
- AUD_LimiterReader& operator=(const AUD_LimiterReader&);
-
-public:
- /**
- * Creates a new limiter reader.
- * \param reader The reader to read from.
- * \param start The desired start time (inclusive).
- * \param end The desired end time (sample exklusive), a negative value
- * signals that it should play to the end.
- */
- AUD_LimiterReader(boost::shared_ptr<AUD_IReader> reader, float start = 0, float end = -1);
-
- virtual void seek(int position);
- virtual int getLength() const;
- virtual int getPosition() const;
- virtual void read(int& length, bool& eos, sample_t* buffer);
-};
-
-#endif //__AUD_LIMITERREADER_H__
diff --git a/intern/audaspace/FX/AUD_LoopFactory.cpp b/intern/audaspace/FX/AUD_LoopFactory.cpp
deleted file mode 100644
index a9e83e349a0..00000000000
--- a/intern/audaspace/FX/AUD_LoopFactory.cpp
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_LoopFactory.cpp
- * \ingroup audfx
- */
-
-
-#include "AUD_LoopFactory.h"
-#include "AUD_LoopReader.h"
-
-AUD_LoopFactory::AUD_LoopFactory(boost::shared_ptr<AUD_IFactory> factory, int loop) :
- AUD_EffectFactory(factory),
- m_loop(loop)
-{
-}
-
-int AUD_LoopFactory::getLoop() const
-{
- return m_loop;
-}
-
-boost::shared_ptr<AUD_IReader> AUD_LoopFactory::createReader()
-{
- return boost::shared_ptr<AUD_IReader>(new AUD_LoopReader(getReader(), m_loop));
-}
diff --git a/intern/audaspace/FX/AUD_LoopFactory.h b/intern/audaspace/FX/AUD_LoopFactory.h
deleted file mode 100644
index 570536bee9a..00000000000
--- a/intern/audaspace/FX/AUD_LoopFactory.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_LoopFactory.h
- * \ingroup audfx
- */
-
-
-#ifndef __AUD_LOOPFACTORY_H__
-#define __AUD_LOOPFACTORY_H__
-
-#include "AUD_EffectFactory.h"
-
-/**
- * This factory loops another factory.
- * \note The reader has to be seekable.
- */
-class AUD_LoopFactory : public AUD_EffectFactory
-{
-private:
- /**
- * The loop count.
- */
- const int m_loop;
-
- // hide copy constructor and operator=
- AUD_LoopFactory(const AUD_LoopFactory&);
- AUD_LoopFactory& operator=(const AUD_LoopFactory&);
-
-public:
- /**
- * Creates a new loop factory.
- * \param factory The input factory.
- * \param loop The desired loop count, negative values result in endless
- * looping.
- */
- AUD_LoopFactory(boost::shared_ptr<AUD_IFactory> factory, int loop = -1);
-
- /**
- * Returns the loop count.
- */
- int getLoop() const;
-
- virtual boost::shared_ptr<AUD_IReader> createReader();
-};
-
-#endif //__AUD_LOOPFACTORY_H__
diff --git a/intern/audaspace/FX/AUD_LoopReader.cpp b/intern/audaspace/FX/AUD_LoopReader.cpp
deleted file mode 100644
index 6fbcaa5af37..00000000000
--- a/intern/audaspace/FX/AUD_LoopReader.cpp
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_LoopReader.cpp
- * \ingroup audfx
- */
-
-
-#include "AUD_LoopReader.h"
-#include "AUD_Buffer.h"
-
-#include <cstring>
-
-AUD_LoopReader::AUD_LoopReader(boost::shared_ptr<AUD_IReader> reader, int loop) :
- AUD_EffectReader(reader), m_count(loop), m_left(loop)
-{
-}
-
-void AUD_LoopReader::seek(int position)
-{
- int len = m_reader->getLength();
- if(len < 0)
- m_reader->seek(position);
- else
- {
- if(m_count >= 0)
- {
- m_left = m_count - (position / len);
- if(m_left < 0)
- m_left = 0;
- }
- m_reader->seek(position % len);
- }
-}
-
-int AUD_LoopReader::getLength() const
-{
- if(m_count < 0)
- return -1;
- return m_reader->getLength() * m_count;
-}
-
-int AUD_LoopReader::getPosition() const
-{
- return m_reader->getPosition() * (m_count < 0 ? 1 : m_count);
-}
-
-void AUD_LoopReader::read(int& length, bool& eos, sample_t* buffer)
-{
- const AUD_Specs specs = m_reader->getSpecs();
-
- int len = length;
-
- m_reader->read(length, eos, buffer);
-
- if(length < len && eos && m_left)
- {
- int pos = length;
- length = len;
-
- while(pos < length && eos && m_left)
- {
- if(m_left > 0)
- m_left--;
-
- m_reader->seek(0);
-
- len = length - pos;
- m_reader->read(len, eos, buffer + pos * specs.channels);
-
- // prevent endless loop
- if(!len)
- break;
-
- pos += len;
- }
-
- length = pos;
- }
-}
diff --git a/intern/audaspace/FX/AUD_LoopReader.h b/intern/audaspace/FX/AUD_LoopReader.h
deleted file mode 100644
index 12b8078b12d..00000000000
--- a/intern/audaspace/FX/AUD_LoopReader.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_LoopReader.h
- * \ingroup audfx
- */
-
-
-#ifndef __AUD_LOOPREADER_H__
-#define __AUD_LOOPREADER_H__
-
-#include "AUD_EffectReader.h"
-#include "AUD_Buffer.h"
-
-/**
- * This class reads another reader and loops it.
- * \note The other reader must be seekable.
- */
-class AUD_LoopReader : public AUD_EffectReader
-{
-private:
- /**
- * The loop count.
- */
- const int m_count;
-
- /**
- * The left loop count.
- */
- int m_left;
-
- // hide copy constructor and operator=
- AUD_LoopReader(const AUD_LoopReader&);
- AUD_LoopReader& operator=(const AUD_LoopReader&);
-
-public:
- /**
- * Creates a new loop reader.
- * \param reader The reader to read from.
- * \param loop The desired loop count, negative values result in endless
- * looping.
- */
- AUD_LoopReader(boost::shared_ptr<AUD_IReader> reader, int loop);
-
- virtual void seek(int position);
- virtual int getLength() const;
- virtual int getPosition() const;
- virtual void read(int& length, bool& eos, sample_t* buffer);
-};
-
-#endif //__AUD_LOOPREADER_H__
diff --git a/intern/audaspace/FX/AUD_LowpassCalculator.cpp b/intern/audaspace/FX/AUD_LowpassCalculator.cpp
deleted file mode 100644
index 57452f09038..00000000000
--- a/intern/audaspace/FX/AUD_LowpassCalculator.cpp
+++ /dev/null
@@ -1,27 +0,0 @@
-#include "AUD_LowpassCalculator.h"
-
-#include <cmath>
-
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-
-AUD_LowpassCalculator::AUD_LowpassCalculator(float frequency, float Q) :
- m_frequency(frequency),
- m_Q(Q)
-{
-}
-
-void AUD_LowpassCalculator::recalculateCoefficients(AUD_SampleRate rate, std::vector<float> &b, std::vector<float> &a)
-{
- float w0 = 2 * M_PI * m_frequency / rate;
- float alpha = sin(w0) / (2 * m_Q);
- float norm = 1 + alpha;
- float c = cos(w0);
- a.push_back(1);
- a.push_back(-2 * c / norm);
- a.push_back((1 - alpha) / norm);
- b.push_back((1 - c) / (2 * norm));
- b.push_back((1 - c) / norm);
- b.push_back(b[0]);
-}
diff --git a/intern/audaspace/FX/AUD_LowpassCalculator.h b/intern/audaspace/FX/AUD_LowpassCalculator.h
deleted file mode 100644
index 18bb11feda7..00000000000
--- a/intern/audaspace/FX/AUD_LowpassCalculator.h
+++ /dev/null
@@ -1,25 +0,0 @@
-#ifndef AUD_LOWPASSCALCULATOR_H
-#define AUD_LOWPASSCALCULATOR_H
-
-#include "AUD_IDynamicIIRFilterCalculator.h"
-
-class AUD_LowpassCalculator : public AUD_IDynamicIIRFilterCalculator
-{
-private:
- /**
- * The cutoff frequency.
- */
- const float m_frequency;
-
- /**
- * The Q factor.
- */
- const float m_Q;
-
-public:
- AUD_LowpassCalculator(float frequency, float Q);
-
- virtual void recalculateCoefficients(AUD_SampleRate rate, std::vector<float> &b, std::vector<float> &a);
-};
-
-#endif // AUD_LOWPASSCALCULATOR_H
diff --git a/intern/audaspace/FX/AUD_LowpassFactory.cpp b/intern/audaspace/FX/AUD_LowpassFactory.cpp
deleted file mode 100644
index bd225998392..00000000000
--- a/intern/audaspace/FX/AUD_LowpassFactory.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_LowpassFactory.cpp
- * \ingroup audfx
- */
-
-
-#include "AUD_LowpassFactory.h"
-#include "AUD_IIRFilterReader.h"
-#include "AUD_LowpassCalculator.h"
-
-AUD_LowpassFactory::AUD_LowpassFactory(boost::shared_ptr<AUD_IFactory> factory, float frequency,
- float Q) :
- AUD_DynamicIIRFilterFactory(factory, boost::shared_ptr<AUD_IDynamicIIRFilterCalculator>(new AUD_LowpassCalculator(frequency, Q)))
-{
-}
diff --git a/intern/audaspace/FX/AUD_LowpassFactory.h b/intern/audaspace/FX/AUD_LowpassFactory.h
deleted file mode 100644
index dfd8ab35521..00000000000
--- a/intern/audaspace/FX/AUD_LowpassFactory.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_LowpassFactory.h
- * \ingroup audfx
- */
-
-
-#ifndef __AUD_LOWPASSFACTORY_H__
-#define __AUD_LOWPASSFACTORY_H__
-
-#include "AUD_DynamicIIRFilterFactory.h"
-
-/**
- * This factory creates a lowpass filter reader.
- */
-class AUD_LowpassFactory : public AUD_DynamicIIRFilterFactory
-{
-private:
- // hide copy constructor and operator=
- AUD_LowpassFactory(const AUD_LowpassFactory&);
- AUD_LowpassFactory& operator=(const AUD_LowpassFactory&);
-
-public:
- /**
- * Creates a new lowpass factory.
- * \param factory The input factory.
- * \param frequency The cutoff frequency.
- * \param Q The Q factor.
- */
- AUD_LowpassFactory(boost::shared_ptr<AUD_IFactory> factory, float frequency, float Q = 1.0f);
-};
-
-#endif //__AUD_LOWPASSFACTORY_H__
diff --git a/intern/audaspace/FX/AUD_PingPongFactory.cpp b/intern/audaspace/FX/AUD_PingPongFactory.cpp
deleted file mode 100644
index 84e4b29415e..00000000000
--- a/intern/audaspace/FX/AUD_PingPongFactory.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_PingPongFactory.cpp
- * \ingroup audfx
- */
-
-
-#include "AUD_PingPongFactory.h"
-#include "AUD_DoubleReader.h"
-#include "AUD_ReverseFactory.h"
-
-AUD_PingPongFactory::AUD_PingPongFactory(boost::shared_ptr<AUD_IFactory> factory) :
- AUD_EffectFactory(factory)
-{
-}
-
-boost::shared_ptr<AUD_IReader> AUD_PingPongFactory::createReader()
-{
- boost::shared_ptr<AUD_IReader> reader = getReader();
- AUD_ReverseFactory factory(m_factory);
- boost::shared_ptr<AUD_IReader> reader2 = factory.createReader();
-
- return boost::shared_ptr<AUD_IReader>(new AUD_DoubleReader(reader, reader2));
-}
diff --git a/intern/audaspace/FX/AUD_PingPongFactory.h b/intern/audaspace/FX/AUD_PingPongFactory.h
deleted file mode 100644
index e8ee5c9e389..00000000000
--- a/intern/audaspace/FX/AUD_PingPongFactory.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_PingPongFactory.h
- * \ingroup audfx
- */
-
-
-#ifndef __AUD_PINGPONGFACTORY_H__
-#define __AUD_PINGPONGFACTORY_H__
-
-#include "AUD_EffectFactory.h"
-
-/**
- * This factory plays another factory first normal, then reversed.
- * \note Readers from the underlying factory must be reversable with seeking.
- */
-class AUD_PingPongFactory : public AUD_EffectFactory
-{
-private:
- // hide copy constructor and operator=
- AUD_PingPongFactory(const AUD_PingPongFactory&);
- AUD_PingPongFactory& operator=(const AUD_PingPongFactory&);
-
-public:
- /**
- * Creates a new ping pong factory.
- * \param factory The input factory.
- */
- AUD_PingPongFactory(boost::shared_ptr<AUD_IFactory> factory);
-
- virtual boost::shared_ptr<AUD_IReader> createReader();
-};
-
-#endif //__AUD_PINGPONGFACTORY_H__
diff --git a/intern/audaspace/FX/AUD_PitchFactory.cpp b/intern/audaspace/FX/AUD_PitchFactory.cpp
deleted file mode 100644
index 9dc27a58162..00000000000
--- a/intern/audaspace/FX/AUD_PitchFactory.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_PitchFactory.cpp
- * \ingroup audfx
- */
-
-
-#include "AUD_PitchFactory.h"
-#include "AUD_PitchReader.h"
-#include "AUD_Space.h"
-
-AUD_PitchFactory::AUD_PitchFactory(boost::shared_ptr<AUD_IFactory> factory, float pitch) :
- AUD_EffectFactory(factory),
- m_pitch(pitch)
-{
-}
-
-boost::shared_ptr<AUD_IReader> AUD_PitchFactory::createReader()
-{
- return boost::shared_ptr<AUD_IReader>(new AUD_PitchReader(getReader(), m_pitch));
-}
diff --git a/intern/audaspace/FX/AUD_PitchFactory.h b/intern/audaspace/FX/AUD_PitchFactory.h
deleted file mode 100644
index 159388b28dd..00000000000
--- a/intern/audaspace/FX/AUD_PitchFactory.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_PitchFactory.h
- * \ingroup audfx
- */
-
-
-#ifndef __AUD_PITCHFACTORY_H__
-#define __AUD_PITCHFACTORY_H__
-
-#include "AUD_EffectFactory.h"
-
-/**
- * This factory changes the pitch of another factory.
- */
-class AUD_PitchFactory : public AUD_EffectFactory
-{
-private:
- /**
- * The pitch.
- */
- const float m_pitch;
-
- // hide copy constructor and operator=
- AUD_PitchFactory(const AUD_PitchFactory&);
- AUD_PitchFactory& operator=(const AUD_PitchFactory&);
-
-public:
- /**
- * Creates a new pitch factory.
- * \param factory The input factory.
- * \param pitch The desired pitch.
- */
- AUD_PitchFactory(boost::shared_ptr<AUD_IFactory> factory, float pitch);
-
- virtual boost::shared_ptr<AUD_IReader> createReader();
-};
-
-#endif //__AUD_PITCHFACTORY_H__
diff --git a/intern/audaspace/FX/AUD_PitchReader.cpp b/intern/audaspace/FX/AUD_PitchReader.cpp
deleted file mode 100644
index b3775c71a28..00000000000
--- a/intern/audaspace/FX/AUD_PitchReader.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_PitchReader.cpp
- * \ingroup audfx
- */
-
-
-#include "AUD_PitchReader.h"
-
-AUD_PitchReader::AUD_PitchReader(boost::shared_ptr<AUD_IReader> reader, float pitch) :
- AUD_EffectReader(reader), m_pitch(pitch)
-{
-}
-
-AUD_Specs AUD_PitchReader::getSpecs() const
-{
- AUD_Specs specs = m_reader->getSpecs();
- specs.rate *= m_pitch;
- return specs;
-}
-
-float AUD_PitchReader::getPitch() const
-{
- return m_pitch;
-}
-
-void AUD_PitchReader::setPitch(float pitch)
-{
- if(pitch <= 0)
- pitch = 1;
- m_pitch = pitch;
-}
diff --git a/intern/audaspace/FX/AUD_PitchReader.h b/intern/audaspace/FX/AUD_PitchReader.h
deleted file mode 100644
index d22e589b05d..00000000000
--- a/intern/audaspace/FX/AUD_PitchReader.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_PitchReader.h
- * \ingroup audfx
- */
-
-
-#ifndef __AUD_PITCHREADER_H__
-#define __AUD_PITCHREADER_H__
-
-#include "AUD_EffectReader.h"
-
-/**
- * This class reads another reader and changes it's pitch.
- */
-class AUD_PitchReader : public AUD_EffectReader
-{
-private:
- /**
- * The pitch level.
- */
- float m_pitch;
-
- // hide copy constructor and operator=
- AUD_PitchReader(const AUD_PitchReader&);
- AUD_PitchReader& operator=(const AUD_PitchReader&);
-
-public:
- /**
- * Creates a new pitch reader.
- * \param reader The reader to read from.
- * \param pitch The pitch value.
- */
- AUD_PitchReader(boost::shared_ptr<AUD_IReader> reader, float pitch);
-
- virtual AUD_Specs getSpecs() const;
-
- /**
- * Retrieves the pitch.
- * \return The current pitch value.
- */
- float getPitch() const;
-
- /**
- * Sets the pitch.
- * \param pitch The new pitch value.
- */
- void setPitch(float pitch);
-};
-
-#endif //__AUD_PITCHREADER_H__
diff --git a/intern/audaspace/FX/AUD_RectifyFactory.cpp b/intern/audaspace/FX/AUD_RectifyFactory.cpp
deleted file mode 100644
index 26bb5615dad..00000000000
--- a/intern/audaspace/FX/AUD_RectifyFactory.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_RectifyFactory.cpp
- * \ingroup audfx
- */
-
-
-#include "AUD_RectifyFactory.h"
-#include "AUD_CallbackIIRFilterReader.h"
-
-#include <cmath>
-
-sample_t AUD_RectifyFactory::rectifyFilter(AUD_CallbackIIRFilterReader* reader, void* useless)
-{
- return fabs(reader->x(0));
-}
-
-AUD_RectifyFactory::AUD_RectifyFactory(boost::shared_ptr<AUD_IFactory> factory) :
- AUD_EffectFactory(factory)
-{
-}
-
-boost::shared_ptr<AUD_IReader> AUD_RectifyFactory::createReader()
-{
- return boost::shared_ptr<AUD_IReader>(new AUD_CallbackIIRFilterReader(getReader(), 1, 1, rectifyFilter));
-}
diff --git a/intern/audaspace/FX/AUD_RectifyFactory.h b/intern/audaspace/FX/AUD_RectifyFactory.h
deleted file mode 100644
index eb595e43e4f..00000000000
--- a/intern/audaspace/FX/AUD_RectifyFactory.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_RectifyFactory.h
- * \ingroup audfx
- */
-
-
-#ifndef __AUD_RECTIFYFACTORY_H__
-#define __AUD_RECTIFYFACTORY_H__
-
-#include "AUD_EffectFactory.h"
-class AUD_CallbackIIRFilterReader;
-
-/**
- * This factory rectifies another factory.
- */
-class AUD_RectifyFactory : public AUD_EffectFactory
-{
-private:
- // hide copy constructor and operator=
- AUD_RectifyFactory(const AUD_RectifyFactory&);
- AUD_RectifyFactory& operator=(const AUD_RectifyFactory&);
-
-public:
- /**
- * Creates a new rectify factory.
- * \param factory The input factory.
- */
- AUD_RectifyFactory(boost::shared_ptr<AUD_IFactory> factory);
-
- virtual boost::shared_ptr<AUD_IReader> createReader();
-
- static sample_t rectifyFilter(AUD_CallbackIIRFilterReader* reader, void* useless);
-};
-
-#endif //__AUD_RECTIFYFACTORY_H__
diff --git a/intern/audaspace/FX/AUD_ReverseFactory.cpp b/intern/audaspace/FX/AUD_ReverseFactory.cpp
deleted file mode 100644
index afb4ad2bec9..00000000000
--- a/intern/audaspace/FX/AUD_ReverseFactory.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_ReverseFactory.cpp
- * \ingroup audfx
- */
-
-
-#include "AUD_ReverseFactory.h"
-#include "AUD_ReverseReader.h"
-#include "AUD_Space.h"
-
-AUD_ReverseFactory::AUD_ReverseFactory(boost::shared_ptr<AUD_IFactory> factory) :
- AUD_EffectFactory(factory)
-{
-}
-
-boost::shared_ptr<AUD_IReader> AUD_ReverseFactory::createReader()
-{
- return boost::shared_ptr<AUD_IReader>(new AUD_ReverseReader(getReader()));
-}
diff --git a/intern/audaspace/FX/AUD_ReverseFactory.h b/intern/audaspace/FX/AUD_ReverseFactory.h
deleted file mode 100644
index 5b0c9e3c29a..00000000000
--- a/intern/audaspace/FX/AUD_ReverseFactory.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_ReverseFactory.h
- * \ingroup audfx
- */
-
-
-#ifndef __AUD_REVERSEFACTORY_H__
-#define __AUD_REVERSEFACTORY_H__
-
-#include "AUD_EffectFactory.h"
-
-/**
- * This factory reads another factory reverted.
- * \note Readers from the underlying factory must be seekable.
- */
-class AUD_ReverseFactory : public AUD_EffectFactory
-{
-private:
- // hide copy constructor and operator=
- AUD_ReverseFactory(const AUD_ReverseFactory&);
- AUD_ReverseFactory& operator=(const AUD_ReverseFactory&);
-
-public:
- /**
- * Creates a new reverse factory.
- * \param factory The input factory.
- */
- AUD_ReverseFactory(boost::shared_ptr<AUD_IFactory> factory);
-
- virtual boost::shared_ptr<AUD_IReader> createReader();
-};
-
-#endif //__AUD_REVERSEFACTORY_H__
diff --git a/intern/audaspace/FX/AUD_ReverseReader.cpp b/intern/audaspace/FX/AUD_ReverseReader.cpp
deleted file mode 100644
index c0a5962a299..00000000000
--- a/intern/audaspace/FX/AUD_ReverseReader.cpp
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_ReverseReader.cpp
- * \ingroup audfx
- */
-
-
-#include "AUD_ReverseReader.h"
-
-#include <cstring>
-
-static const char* props_error = "AUD_ReverseReader: The reader has to be "
- "seekable and a finite length.";
-
-AUD_ReverseReader::AUD_ReverseReader(boost::shared_ptr<AUD_IReader> reader) :
- AUD_EffectReader(reader),
- m_length(reader->getLength()),
- m_position(0)
-{
- if(m_length < 0 || !reader->isSeekable())
- AUD_THROW(AUD_ERROR_PROPS, props_error);
-}
-
-void AUD_ReverseReader::seek(int position)
-{
- m_position = position;
-}
-
-int AUD_ReverseReader::getLength() const
-{
- return m_length;
-}
-
-int AUD_ReverseReader::getPosition() const
-{
- return m_position;
-}
-
-void AUD_ReverseReader::read(int& length, bool& eos, sample_t* buffer)
-{
- // first correct the length
- if(m_position + length > m_length)
- length = m_length - m_position;
-
- if(length <= 0)
- {
- length = 0;
- eos = true;
- return;
- }
-
- const AUD_Specs specs = getSpecs();
- const int samplesize = AUD_SAMPLE_SIZE(specs);
-
- sample_t temp[AUD_CHANNEL_MAX];
-
- int len = length;
-
- // read from reader
- m_reader->seek(m_length - m_position - len);
- m_reader->read(len, eos, buffer);
-
- // set null if reader didn't give enough data
- if(len < length)
- memset(buffer, 0, (length - len) * samplesize);
-
- // copy the samples reverted
- for(int i = 0; i < length / 2; i++)
- {
- memcpy(temp,
- buffer + (len - 1 - i) * specs.channels,
- samplesize);
- memcpy(buffer + (len - 1 - i) * specs.channels,
- buffer + i * specs.channels,
- samplesize);
- memcpy(buffer + i * specs.channels,
- temp,
- samplesize);
- }
-
- m_position += length;
- eos = false;
-}
diff --git a/intern/audaspace/FX/AUD_ReverseReader.h b/intern/audaspace/FX/AUD_ReverseReader.h
deleted file mode 100644
index 219047915bd..00000000000
--- a/intern/audaspace/FX/AUD_ReverseReader.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_ReverseReader.h
- * \ingroup audfx
- */
-
-
-#ifndef __AUD_REVERSEREADER_H__
-#define __AUD_REVERSEREADER_H__
-
-#include "AUD_EffectReader.h"
-#include "AUD_Buffer.h"
-
-/**
- * This class reads another reader from back to front.
- * \note The underlying reader must be seekable.
- */
-class AUD_ReverseReader : public AUD_EffectReader
-{
-private:
- /**
- * The sample count.
- */
- const int m_length;
-
- /**
- * The current position.
- */
- int m_position;
-
- // hide copy constructor and operator=
- AUD_ReverseReader(const AUD_ReverseReader&);
- AUD_ReverseReader& operator=(const AUD_ReverseReader&);
-
-public:
- /**
- * Creates a new reverse reader.
- * \param reader The reader to read from.
- * \exception AUD_Exception Thrown if the reader specified has an
- * undeterminable/infinite length or is not seekable.
- */
- AUD_ReverseReader(boost::shared_ptr<AUD_IReader> reader);
-
- virtual void seek(int position);
- virtual int getLength() const;
- virtual int getPosition() const;
- virtual void read(int& length, bool& eos, sample_t* buffer);
-};
-
-#endif //__AUD_REVERSEREADER_H__
diff --git a/intern/audaspace/FX/AUD_SquareFactory.cpp b/intern/audaspace/FX/AUD_SquareFactory.cpp
deleted file mode 100644
index 4b4dccb6e6b..00000000000
--- a/intern/audaspace/FX/AUD_SquareFactory.cpp
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_SquareFactory.cpp
- * \ingroup audfx
- */
-
-
-#include "AUD_SquareFactory.h"
-#include "AUD_CallbackIIRFilterReader.h"
-
-sample_t AUD_SquareFactory::squareFilter(AUD_CallbackIIRFilterReader* reader, float* threshold)
-{
- float in = reader->x(0);
- if(in >= *threshold)
- return 1;
- else if(in <= -*threshold)
- return -1;
- else
- return 0;
-}
-
-void AUD_SquareFactory::endSquareFilter(float* threshold)
-{
- delete threshold;
-}
-
-AUD_SquareFactory::AUD_SquareFactory(boost::shared_ptr<AUD_IFactory> factory, float threshold) :
- AUD_EffectFactory(factory),
- m_threshold(threshold)
-{
-}
-
-float AUD_SquareFactory::getThreshold() const
-{
- return m_threshold;
-}
-
-boost::shared_ptr<AUD_IReader> AUD_SquareFactory::createReader()
-{
- return boost::shared_ptr<AUD_IReader>(new AUD_CallbackIIRFilterReader(getReader(), 1, 1,
- (doFilterIIR) squareFilter,
- (endFilterIIR) endSquareFilter,
- new float(m_threshold)));
-}
diff --git a/intern/audaspace/FX/AUD_SquareFactory.h b/intern/audaspace/FX/AUD_SquareFactory.h
deleted file mode 100644
index 27e62b6f4cc..00000000000
--- a/intern/audaspace/FX/AUD_SquareFactory.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_SquareFactory.h
- * \ingroup audfx
- */
-
-
-#ifndef __AUD_SQUAREFACTORY_H__
-#define __AUD_SQUAREFACTORY_H__
-
-#include "AUD_EffectFactory.h"
-class AUD_CallbackIIRFilterReader;
-
-/**
- * This factory Transforms any signal to a square signal.
- */
-class AUD_SquareFactory : public AUD_EffectFactory
-{
-private:
- /**
- * The threshold.
- */
- const float m_threshold;
-
- // hide copy constructor and operator=
- AUD_SquareFactory(const AUD_SquareFactory&);
- AUD_SquareFactory& operator=(const AUD_SquareFactory&);
-
-public:
- /**
- * Creates a new square factory.
- * \param factory The input factory.
- * \param threshold The threshold.
- */
- AUD_SquareFactory(boost::shared_ptr<AUD_IFactory> factory, float threshold = 0.0f);
-
- /**
- * Returns the threshold.
- */
- float getThreshold() const;
-
- virtual boost::shared_ptr<AUD_IReader> createReader();
-
- static sample_t squareFilter(AUD_CallbackIIRFilterReader* reader, float* threshold);
- static void endSquareFilter(float* threshold);
-};
-
-#endif //__AUD_SQUAREFACTORY_H__
diff --git a/intern/audaspace/FX/AUD_SumFactory.cpp b/intern/audaspace/FX/AUD_SumFactory.cpp
deleted file mode 100644
index 7f82233a0b7..00000000000
--- a/intern/audaspace/FX/AUD_SumFactory.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_SumFactory.cpp
- * \ingroup audfx
- */
-
-
-#include "AUD_SumFactory.h"
-#include "AUD_IIRFilterReader.h"
-
-AUD_SumFactory::AUD_SumFactory(boost::shared_ptr<AUD_IFactory> factory) :
- AUD_EffectFactory(factory)
-{
-}
-
-boost::shared_ptr<AUD_IReader> AUD_SumFactory::createReader()
-{
- std::vector<float> a, b;
- a.push_back(1);
- a.push_back(-1);
- b.push_back(1);
- return boost::shared_ptr<AUD_IReader>(new AUD_IIRFilterReader(getReader(), b, a));
-}
diff --git a/intern/audaspace/FX/AUD_SumFactory.h b/intern/audaspace/FX/AUD_SumFactory.h
deleted file mode 100644
index a916f3509cb..00000000000
--- a/intern/audaspace/FX/AUD_SumFactory.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_SumFactory.h
- * \ingroup audfx
- */
-
-
-#ifndef __AUD_SUMFACTORY_H__
-#define __AUD_SUMFACTORY_H__
-
-#include "AUD_EffectFactory.h"
-
-/**
- * This factory creates a sum reader.
- */
-class AUD_SumFactory : public AUD_EffectFactory
-{
-private:
- // hide copy constructor and operator=
- AUD_SumFactory(const AUD_SumFactory&);
- AUD_SumFactory& operator=(const AUD_SumFactory&);
-
-public:
- /**
- * Creates a new sum factory.
- * \param factory The input factory.
- */
- AUD_SumFactory(boost::shared_ptr<AUD_IFactory> factory);
-
- virtual boost::shared_ptr<AUD_IReader> createReader();
-};
-
-#endif //__AUD_SUMFACTORY_H__
diff --git a/intern/audaspace/FX/AUD_SuperposeFactory.cpp b/intern/audaspace/FX/AUD_SuperposeFactory.cpp
deleted file mode 100644
index 3efad37a5b3..00000000000
--- a/intern/audaspace/FX/AUD_SuperposeFactory.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_SuperposeFactory.cpp
- * \ingroup audfx
- */
-
-
-#include "AUD_SuperposeFactory.h"
-#include "AUD_SuperposeReader.h"
-
-AUD_SuperposeFactory::AUD_SuperposeFactory(boost::shared_ptr<AUD_IFactory> factory1, boost::shared_ptr<AUD_IFactory> factory2) :
- m_factory1(factory1), m_factory2(factory2)
-{
-}
-
-boost::shared_ptr<AUD_IReader> AUD_SuperposeFactory::createReader()
-{
- boost::shared_ptr<AUD_IReader> reader1 = m_factory1->createReader();
- boost::shared_ptr<AUD_IReader> reader2 = m_factory2->createReader();
-
- return boost::shared_ptr<AUD_IReader>(new AUD_SuperposeReader(reader1, reader2));
-}
diff --git a/intern/audaspace/FX/AUD_SuperposeFactory.h b/intern/audaspace/FX/AUD_SuperposeFactory.h
deleted file mode 100644
index caa0dfb752f..00000000000
--- a/intern/audaspace/FX/AUD_SuperposeFactory.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_SuperposeFactory.h
- * \ingroup audfx
- */
-
-
-#ifndef __AUD_SUPERPOSEFACTORY_H__
-#define __AUD_SUPERPOSEFACTORY_H__
-
-#include "AUD_IFactory.h"
-
-/**
- * This factory mixes two other factories, playing them the same time.
- * \note Readers from the underlying factories must have the same sample rate
- * and channel count.
- */
-class AUD_SuperposeFactory : public AUD_IFactory
-{
-private:
- /**
- * First played factory.
- */
- boost::shared_ptr<AUD_IFactory> m_factory1;
-
- /**
- * Second played factory.
- */
- boost::shared_ptr<AUD_IFactory> m_factory2;
-
- // hide copy constructor and operator=
- AUD_SuperposeFactory(const AUD_SuperposeFactory&);
- AUD_SuperposeFactory& operator=(const AUD_SuperposeFactory&);
-
-public:
- /**
- * Creates a new superpose factory.
- * \param factory1 The first input factory.
- * \param factory2 The second input factory.
- */
- AUD_SuperposeFactory(boost::shared_ptr<AUD_IFactory> factory1, boost::shared_ptr<AUD_IFactory> factory2);
-
- virtual boost::shared_ptr<AUD_IReader> createReader();
-};
-
-#endif //__AUD_SUPERPOSEFACTORY_H__
diff --git a/intern/audaspace/FX/AUD_SuperposeReader.cpp b/intern/audaspace/FX/AUD_SuperposeReader.cpp
deleted file mode 100644
index 294a48b3e7a..00000000000
--- a/intern/audaspace/FX/AUD_SuperposeReader.cpp
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_SuperposeReader.cpp
- * \ingroup audfx
- */
-
-
-#include "AUD_SuperposeReader.h"
-
-#include <cstring>
-
-static const char* specs_error = "AUD_SuperposeReader: Both readers have to "
- "have the same specs.";
-
-AUD_SuperposeReader::AUD_SuperposeReader(boost::shared_ptr<AUD_IReader> reader1, boost::shared_ptr<AUD_IReader> reader2) :
- m_reader1(reader1), m_reader2(reader2)
-{
-}
-
-AUD_SuperposeReader::~AUD_SuperposeReader()
-{
-}
-
-bool AUD_SuperposeReader::isSeekable() const
-{
- return m_reader1->isSeekable() && m_reader2->isSeekable();
-}
-
-void AUD_SuperposeReader::seek(int position)
-{
- m_reader1->seek(position);
- m_reader2->seek(position);
-}
-
-int AUD_SuperposeReader::getLength() const
-{
- int len1 = m_reader1->getLength();
- int len2 = m_reader2->getLength();
- if((len1 < 0) || (len2 < 0))
- return -1;
- return AUD_MIN(len1, len2);
-}
-
-int AUD_SuperposeReader::getPosition() const
-{
- int pos1 = m_reader1->getPosition();
- int pos2 = m_reader2->getPosition();
- return AUD_MAX(pos1, pos2);
-}
-
-AUD_Specs AUD_SuperposeReader::getSpecs() const
-{
- return m_reader1->getSpecs();
-}
-
-void AUD_SuperposeReader::read(int& length, bool& eos, sample_t* buffer)
-{
- AUD_Specs specs = m_reader1->getSpecs();
- AUD_Specs s2 = m_reader2->getSpecs();
- if(!AUD_COMPARE_SPECS(specs, s2))
- AUD_THROW(AUD_ERROR_SPECS, specs_error);
-
- int samplesize = AUD_SAMPLE_SIZE(specs);
-
- m_buffer.assureSize(length * samplesize);
-
- int len1 = length;
- m_reader1->read(len1, eos, buffer);
-
- if(len1 < length)
- memset(buffer + len1 * specs.channels, 0, (length - len1) * samplesize);
-
- int len2 = length;
- bool eos2;
- sample_t* buf = m_buffer.getBuffer();
- m_reader2->read(len2, eos2, buf);
-
- for(int i = 0; i < len2 * specs.channels; i++)
- buffer[i] += buf[i];
-
- length = AUD_MAX(len1, len2);
- eos &= eos2;
-}
diff --git a/intern/audaspace/FX/AUD_SuperposeReader.h b/intern/audaspace/FX/AUD_SuperposeReader.h
deleted file mode 100644
index a04ab90fe43..00000000000
--- a/intern/audaspace/FX/AUD_SuperposeReader.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_SuperposeReader.h
- * \ingroup audfx
- */
-
-
-#ifndef __AUD_SUPERPOSEREADER_H__
-#define __AUD_SUPERPOSEREADER_H__
-
-#include "AUD_IReader.h"
-#include "AUD_Buffer.h"
-
-#include <boost/shared_ptr.hpp>
-
-/**
- * This reader plays two readers with the same specs in parallel.
- */
-class AUD_SuperposeReader : public AUD_IReader
-{
-private:
- /**
- * The first reader.
- */
- boost::shared_ptr<AUD_IReader> m_reader1;
-
- /**
- * The second reader.
- */
- boost::shared_ptr<AUD_IReader> m_reader2;
-
- /**
- * Buffer used for mixing.
- */
- AUD_Buffer m_buffer;
-
- // hide copy constructor and operator=
- AUD_SuperposeReader(const AUD_SuperposeReader&);
- AUD_SuperposeReader& operator=(const AUD_SuperposeReader&);
-
-public:
- /**
- * Creates a new superpose reader.
- * \param reader1 The first reader to read from.
- * \param reader2 The second reader to read from.
- * \exception AUD_Exception Thrown if the specs from the readers differ.
- */
- AUD_SuperposeReader(boost::shared_ptr<AUD_IReader> reader1, boost::shared_ptr<AUD_IReader> reader2);
-
- /**
- * Destroys the reader.
- */
- virtual ~AUD_SuperposeReader();
-
- virtual bool isSeekable() const;
- virtual void seek(int position);
- virtual int getLength() const;
- virtual int getPosition() const;
- virtual AUD_Specs getSpecs() const;
- virtual void read(int& length, bool& eos, sample_t* buffer);
-};
-
-#endif //__AUD_SUPERPOSEREADER_H__
diff --git a/intern/audaspace/FX/AUD_VolumeFactory.cpp b/intern/audaspace/FX/AUD_VolumeFactory.cpp
deleted file mode 100644
index 4f0e1e425e6..00000000000
--- a/intern/audaspace/FX/AUD_VolumeFactory.cpp
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_VolumeFactory.cpp
- * \ingroup audfx
- */
-
-
-#include "AUD_VolumeFactory.h"
-#include "AUD_IIRFilterReader.h"
-
-AUD_VolumeFactory::AUD_VolumeFactory(boost::shared_ptr<AUD_IFactory> factory, float volume) :
- AUD_EffectFactory(factory),
- m_volume(volume)
-{
-}
-
-float AUD_VolumeFactory::getVolume() const
-{
- return m_volume;
-}
-
-boost::shared_ptr<AUD_IReader> AUD_VolumeFactory::createReader()
-{
- std::vector<float> a, b;
- a.push_back(1);
- b.push_back(m_volume);
- return boost::shared_ptr<AUD_IReader>(new AUD_IIRFilterReader(getReader(), b, a));
-}
diff --git a/intern/audaspace/FX/AUD_VolumeFactory.h b/intern/audaspace/FX/AUD_VolumeFactory.h
deleted file mode 100644
index 6fe779ffb88..00000000000
--- a/intern/audaspace/FX/AUD_VolumeFactory.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/FX/AUD_VolumeFactory.h
- * \ingroup audfx
- */
-
-
-#ifndef __AUD_VOLUMEFACTORY_H__
-#define __AUD_VOLUMEFACTORY_H__
-
-#include "AUD_EffectFactory.h"
-
-/**
- * This factory changes the volume of another factory.
- * The set volume should be a value between 0.0 and 1.0, higher values at your
- * own risk!
- */
-class AUD_VolumeFactory : public AUD_EffectFactory
-{
-private:
- /**
- * The volume.
- */
- const float m_volume;
-
- // hide copy constructor and operator=
- AUD_VolumeFactory(const AUD_VolumeFactory&);
- AUD_VolumeFactory& operator=(const AUD_VolumeFactory&);
-
-public:
- /**
- * Creates a new volume factory.
- * \param factory The input factory.
- * \param volume The desired volume.
- */
- AUD_VolumeFactory(boost::shared_ptr<AUD_IFactory> factory, float volume);
-
- /**
- * Returns the volume.
- * \return The current volume.
- */
- float getVolume() const;
-
- virtual boost::shared_ptr<AUD_IReader> createReader();
-};
-
-#endif //__AUD_VOLUMEFACTORY_H__
diff --git a/intern/audaspace/OpenAL/AUD_OpenALDevice.cpp b/intern/audaspace/OpenAL/AUD_OpenALDevice.cpp
deleted file mode 100644
index c0c77b6f917..00000000000
--- a/intern/audaspace/OpenAL/AUD_OpenALDevice.cpp
+++ /dev/null
@@ -1,1647 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/OpenAL/AUD_OpenALDevice.cpp
- * \ingroup audopenal
- */
-
-
-#include "AUD_OpenALDevice.h"
-#include "AUD_IFactory.h"
-#include "AUD_IReader.h"
-#include "AUD_ConverterReader.h"
-#include "AUD_MutexLock.h"
-
-#include <cstring>
-#include <limits>
-
-#ifdef WIN32
-#include <windows.h>
-#else
-#include <unistd.h>
-#endif
-
-/*struct AUD_OpenALBufferedFactory
-{
- /// The factory.
- AUD_IFactory* factory;
-
- /// The OpenAL buffer.
- ALuint buffer;
-};*/
-
-//typedef std::list<AUD_OpenALBufferedFactory*>::iterator AUD_BFIterator;
-
-
-/******************************************************************************/
-/*********************** AUD_OpenALHandle Handle Code *************************/
-/******************************************************************************/
-
-static const char* genbuffer_error = "AUD_OpenALDevice: Buffer couldn't be "
- "generated.";
-static const char* gensource_error = "AUD_OpenALDevice: Source couldn't be "
- "generated.";
-static const char* queue_error = "AUD_OpenALDevice: Buffer couldn't be "
- "queued to the source.";
-static const char* bufferdata_error = "AUD_OpenALDevice: Buffer couldn't be "
- "filled with data.";
-
-bool AUD_OpenALDevice::AUD_OpenALHandle::pause(bool keep)
-{
- if(m_status)
- {
- AUD_MutexLock lock(*m_device);
-
- if(m_status == AUD_STATUS_PLAYING)
- {
- for(AUD_HandleIterator it = m_device->m_playingSounds.begin(); it != m_device->m_playingSounds.end(); it++)
- {
- if(it->get() == this)
- {
- boost::shared_ptr<AUD_OpenALHandle> This = *it;
-
- m_device->m_playingSounds.erase(it);
- m_device->m_pausedSounds.push_back(This);
-
- alSourcePause(m_source);
-
- m_status = keep ? AUD_STATUS_STOPPED : AUD_STATUS_PAUSED;
-
- return true;
- }
- }
- }
- }
-
- return false;}
-
-AUD_OpenALDevice::AUD_OpenALHandle::AUD_OpenALHandle(AUD_OpenALDevice* device, ALenum format, boost::shared_ptr<AUD_IReader> reader, bool keep) :
- m_isBuffered(false), m_reader(reader), m_keep(keep), m_format(format), m_current(0),
- m_eos(false), m_loopcount(0), m_stop(NULL), m_stop_data(NULL), m_status(AUD_STATUS_PLAYING),
- m_device(device)
-{
- AUD_DeviceSpecs specs = m_device->m_specs;
- specs.specs = m_reader->getSpecs();
-
- // OpenAL playback code
- alGenBuffers(CYCLE_BUFFERS, m_buffers);
- if(alGetError() != AL_NO_ERROR)
- AUD_THROW(AUD_ERROR_OPENAL, genbuffer_error);
-
- try
- {
- m_device->m_buffer.assureSize(m_device->m_buffersize * AUD_DEVICE_SAMPLE_SIZE(specs));
- int length;
- bool eos;
-
- for(int i = 0; i < CYCLE_BUFFERS; i++)
- {
- length = m_device->m_buffersize;
- reader->read(length, eos, m_device->m_buffer.getBuffer());
-
- if(length == 0)
- {
- // AUD_XXX: TODO: don't fill all buffers and enqueue them later
- length = 1;
- memset(m_device->m_buffer.getBuffer(), 0, length * AUD_DEVICE_SAMPLE_SIZE(specs));
- }
-
- alBufferData(m_buffers[i], m_format, m_device->m_buffer.getBuffer(),
- length * AUD_DEVICE_SAMPLE_SIZE(specs),
- specs.rate);
- if(alGetError() != AL_NO_ERROR)
- AUD_THROW(AUD_ERROR_OPENAL, bufferdata_error);
- }
-
- alGenSources(1, &m_source);
- if(alGetError() != AL_NO_ERROR)
- AUD_THROW(AUD_ERROR_OPENAL, gensource_error);
-
- try
- {
- alSourceQueueBuffers(m_source, CYCLE_BUFFERS, m_buffers);
- if(alGetError() != AL_NO_ERROR)
- AUD_THROW(AUD_ERROR_OPENAL, queue_error);
- }
- catch(AUD_Exception&)
- {
- alDeleteSources(1, &m_source);
- throw;
- }
- }
- catch(AUD_Exception&)
- {
- alDeleteBuffers(CYCLE_BUFFERS, m_buffers);
- throw;
- }
- alSourcei(m_source, AL_SOURCE_RELATIVE, 1);
-}
-
-bool AUD_OpenALDevice::AUD_OpenALHandle::pause()
-{
- return pause(false);
-}
-
-bool AUD_OpenALDevice::AUD_OpenALHandle::resume()
-{
- if(m_status)
- {
- AUD_MutexLock lock(*m_device);
-
- if(m_status == AUD_STATUS_PAUSED)
- {
- for(AUD_HandleIterator it = m_device->m_pausedSounds.begin(); it != m_device->m_pausedSounds.end(); it++)
- {
- if(it->get() == this)
- {
- boost::shared_ptr<AUD_OpenALHandle> This = *it;
-
- m_device->m_pausedSounds.erase(it);
- m_device->m_playingSounds.push_back(This);
-
- m_device->start();
- m_status = AUD_STATUS_PLAYING;
-
- return true;
- }
- }
- }
- }
-
- return false;
-}
-
-bool AUD_OpenALDevice::AUD_OpenALHandle::stop()
-{
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return false;
-
- m_status = AUD_STATUS_INVALID;
-
- alDeleteSources(1, &m_source);
- if(!m_isBuffered)
- alDeleteBuffers(CYCLE_BUFFERS, m_buffers);
-
- for(AUD_HandleIterator it = m_device->m_playingSounds.begin(); it != m_device->m_playingSounds.end(); it++)
- {
- if(it->get() == this)
- {
- boost::shared_ptr<AUD_OpenALHandle> This = *it;
-
- m_device->m_playingSounds.erase(it);
-
- return true;
- }
- }
-
- for(AUD_HandleIterator it = m_device->m_pausedSounds.begin(); it != m_device->m_pausedSounds.end(); it++)
- {
- if(it->get() == this)
- {
- m_device->m_pausedSounds.erase(it);
- return true;
- }
- }
-
- return false;
-}
-
-bool AUD_OpenALDevice::AUD_OpenALHandle::getKeep()
-{
- if(m_status)
- return m_keep;
-
- return false;
-}
-
-bool AUD_OpenALDevice::AUD_OpenALHandle::setKeep(bool keep)
-{
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return false;
-
- m_keep = keep;
-
- return true;
-}
-
-bool AUD_OpenALDevice::AUD_OpenALHandle::seek(float position)
-{
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return false;
-
- if(m_isBuffered)
- alSourcef(m_source, AL_SEC_OFFSET, position);
- else
- {
- m_reader->seek((int)(position * m_reader->getSpecs().rate));
- m_eos = false;
-
- ALint info;
-
- alGetSourcei(m_source, AL_SOURCE_STATE, &info);
-
- // we need to stop playing sounds as well to clear the buffers
- // this might cause clicks, but fixes a bug regarding position determination
- if(info == AL_PAUSED || info == AL_PLAYING)
- alSourceStop(m_source);
-
- alSourcei(m_source, AL_BUFFER, 0);
- m_current = 0;
-
- ALenum err;
- if((err = alGetError()) == AL_NO_ERROR)
- {
- int length;
- AUD_DeviceSpecs specs = m_device->m_specs;
- specs.specs = m_reader->getSpecs();
- m_device->m_buffer.assureSize(m_device->m_buffersize * AUD_DEVICE_SAMPLE_SIZE(specs));
-
- for(int i = 0; i < CYCLE_BUFFERS; i++)
- {
- length = m_device->m_buffersize;
- m_reader->read(length, m_eos, m_device->m_buffer.getBuffer());
-
- if(length == 0)
- {
- // AUD_XXX: TODO: don't fill all buffers and enqueue them later
- length = 1;
- memset(m_device->m_buffer.getBuffer(), 0, length * AUD_DEVICE_SAMPLE_SIZE(specs));
- }
-
- alBufferData(m_buffers[i], m_format, m_device->m_buffer.getBuffer(),
- length * AUD_DEVICE_SAMPLE_SIZE(specs), specs.rate);
-
- if(alGetError() != AL_NO_ERROR)
- break;
- }
-
- if(m_loopcount != 0)
- m_eos = false;
-
- alSourceQueueBuffers(m_source, CYCLE_BUFFERS, m_buffers);
- }
-
- alSourceRewind(m_source);
- }
-
- if(m_status == AUD_STATUS_STOPPED)
- m_status = AUD_STATUS_PAUSED;
-
- return true;
-}
-
-float AUD_OpenALDevice::AUD_OpenALHandle::getPosition()
-{
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return 0.0f;
-
- float position = 0.0f;
-
- alGetSourcef(m_source, AL_SEC_OFFSET, &position);
-
- if(!m_isBuffered)
- {
- int queued;
-
- // this usually always returns CYCLE_BUFFERS
- alGetSourcei(m_source, AL_BUFFERS_QUEUED, &queued);
-
- AUD_Specs specs = m_reader->getSpecs();
- position += (m_reader->getPosition() - m_device->m_buffersize *
- queued) / (float)specs.rate;
- }
-
- return position;
-}
-
-AUD_Status AUD_OpenALDevice::AUD_OpenALHandle::getStatus()
-{
- return m_status;
-}
-
-float AUD_OpenALDevice::AUD_OpenALHandle::getVolume()
-{
- float result = std::numeric_limits<float>::quiet_NaN();
-
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return result;
-
- alGetSourcef(m_source, AL_GAIN, &result);
-
- return result;
-}
-
-bool AUD_OpenALDevice::AUD_OpenALHandle::setVolume(float volume)
-{
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return false;
-
- alSourcef(m_source, AL_GAIN, volume);
-
- return true;
-}
-
-float AUD_OpenALDevice::AUD_OpenALHandle::getPitch()
-{
- float result = std::numeric_limits<float>::quiet_NaN();
-
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return result;
-
- alGetSourcef(m_source, AL_PITCH, &result);
-
- return result;
-}
-
-bool AUD_OpenALDevice::AUD_OpenALHandle::setPitch(float pitch)
-{
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return false;
-
- alSourcef(m_source, AL_PITCH, pitch);
-
- return true;
-}
-
-int AUD_OpenALDevice::AUD_OpenALHandle::getLoopCount()
-{
- if(!m_status)
- return 0;
- return m_loopcount;
-}
-
-bool AUD_OpenALDevice::AUD_OpenALHandle::setLoopCount(int count)
-{
- if(!m_status)
- return false;
-
- if(m_status == AUD_STATUS_STOPPED && (count > m_loopcount || count < 0))
- m_status = AUD_STATUS_PAUSED;
-
- m_loopcount = count;
-
- return true;
-}
-
-bool AUD_OpenALDevice::AUD_OpenALHandle::setStopCallback(stopCallback callback, void* data)
-{
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return false;
-
- m_stop = callback;
- m_stop_data = data;
-
- return true;
-}
-
-/******************************************************************************/
-/********************* AUD_OpenALHandle 3DHandle Code *************************/
-/******************************************************************************/
-
-AUD_Vector3 AUD_OpenALDevice::AUD_OpenALHandle::getSourceLocation()
-{
- AUD_Vector3 result = AUD_Vector3(0, 0, 0);
-
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return result;
-
- ALfloat p[3];
- alGetSourcefv(m_source, AL_POSITION, p);
-
- result = AUD_Vector3(p[0], p[1], p[2]);
-
- return result;
-}
-
-bool AUD_OpenALDevice::AUD_OpenALHandle::setSourceLocation(const AUD_Vector3& location)
-{
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return false;
-
- alSourcefv(m_source, AL_POSITION, (ALfloat*)location.get());
-
- return true;
-}
-
-AUD_Vector3 AUD_OpenALDevice::AUD_OpenALHandle::getSourceVelocity()
-{
- AUD_Vector3 result = AUD_Vector3(0, 0, 0);
-
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return result;
-
- ALfloat v[3];
- alGetSourcefv(m_source, AL_VELOCITY, v);
-
- result = AUD_Vector3(v[0], v[1], v[2]);
-
- return result;
-}
-
-bool AUD_OpenALDevice::AUD_OpenALHandle::setSourceVelocity(const AUD_Vector3& velocity)
-{
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return false;
-
- alSourcefv(m_source, AL_VELOCITY, (ALfloat*)velocity.get());
-
- return true;
-}
-
-AUD_Quaternion AUD_OpenALDevice::AUD_OpenALHandle::getSourceOrientation()
-{
- return m_orientation;
-}
-
-bool AUD_OpenALDevice::AUD_OpenALHandle::setSourceOrientation(const AUD_Quaternion& orientation)
-{
- ALfloat direction[3];
- direction[0] = -2 * (orientation.w() * orientation.y() +
- orientation.x() * orientation.z());
- direction[1] = 2 * (orientation.x() * orientation.w() -
- orientation.z() * orientation.y());
- direction[2] = 2 * (orientation.x() * orientation.x() +
- orientation.y() * orientation.y()) - 1;
-
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return false;
-
- alSourcefv(m_source, AL_DIRECTION, direction);
-
- m_orientation = orientation;
-
- return true;
-}
-
-bool AUD_OpenALDevice::AUD_OpenALHandle::isRelative()
-{
- int result;
-
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return false;
-
- alGetSourcei(m_source, AL_SOURCE_RELATIVE, &result);
-
- return result;
-}
-
-bool AUD_OpenALDevice::AUD_OpenALHandle::setRelative(bool relative)
-{
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return false;
-
- alSourcei(m_source, AL_SOURCE_RELATIVE, relative);
-
- return true;
-}
-
-float AUD_OpenALDevice::AUD_OpenALHandle::getVolumeMaximum()
-{
- float result = std::numeric_limits<float>::quiet_NaN();
-
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return result;
-
- alGetSourcef(m_source, AL_MAX_GAIN, &result);
-
- return result;
-}
-
-bool AUD_OpenALDevice::AUD_OpenALHandle::setVolumeMaximum(float volume)
-{
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return false;
-
- alSourcef(m_source, AL_MAX_GAIN, volume);
-
- return true;
-}
-
-float AUD_OpenALDevice::AUD_OpenALHandle::getVolumeMinimum()
-{
- float result = std::numeric_limits<float>::quiet_NaN();
-
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return result;
-
- alGetSourcef(m_source, AL_MIN_GAIN, &result);
-
- return result;
-}
-
-bool AUD_OpenALDevice::AUD_OpenALHandle::setVolumeMinimum(float volume)
-{
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return false;
-
- alSourcef(m_source, AL_MIN_GAIN, volume);
-
- return true;
-}
-
-float AUD_OpenALDevice::AUD_OpenALHandle::getDistanceMaximum()
-{
- float result = std::numeric_limits<float>::quiet_NaN();
-
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return result;
-
- alGetSourcef(m_source, AL_MAX_DISTANCE, &result);
-
- return result;
-}
-
-bool AUD_OpenALDevice::AUD_OpenALHandle::setDistanceMaximum(float distance)
-{
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return false;
-
- alSourcef(m_source, AL_MAX_DISTANCE, distance);
-
- return true;
-}
-
-float AUD_OpenALDevice::AUD_OpenALHandle::getDistanceReference()
-{
- float result = std::numeric_limits<float>::quiet_NaN();
-
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return result;
-
- alGetSourcef(m_source, AL_REFERENCE_DISTANCE, &result);
-
- return result;
-}
-
-bool AUD_OpenALDevice::AUD_OpenALHandle::setDistanceReference(float distance)
-{
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return false;
-
- alSourcef(m_source, AL_REFERENCE_DISTANCE, distance);
-
- return true;
-}
-
-float AUD_OpenALDevice::AUD_OpenALHandle::getAttenuation()
-{
- float result = std::numeric_limits<float>::quiet_NaN();
-
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return result;
-
- alGetSourcef(m_source, AL_ROLLOFF_FACTOR, &result);
-
- return result;
-}
-
-bool AUD_OpenALDevice::AUD_OpenALHandle::setAttenuation(float factor)
-{
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return false;
-
- alSourcef(m_source, AL_ROLLOFF_FACTOR, factor);
-
- return true;
-}
-
-float AUD_OpenALDevice::AUD_OpenALHandle::getConeAngleOuter()
-{
- float result = std::numeric_limits<float>::quiet_NaN();
-
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return result;
-
- alGetSourcef(m_source, AL_CONE_OUTER_ANGLE, &result);
-
- return result;
-}
-
-bool AUD_OpenALDevice::AUD_OpenALHandle::setConeAngleOuter(float angle)
-{
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return false;
-
- alSourcef(m_source, AL_CONE_OUTER_ANGLE, angle);
-
- return true;
-}
-
-float AUD_OpenALDevice::AUD_OpenALHandle::getConeAngleInner()
-{
- float result = std::numeric_limits<float>::quiet_NaN();
-
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return result;
-
- alGetSourcef(m_source, AL_CONE_INNER_ANGLE, &result);
-
- return result;
-}
-
-bool AUD_OpenALDevice::AUD_OpenALHandle::setConeAngleInner(float angle)
-{
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return false;
-
- alSourcef(m_source, AL_CONE_INNER_ANGLE, angle);
-
- return true;
-}
-
-float AUD_OpenALDevice::AUD_OpenALHandle::getConeVolumeOuter()
-{
- float result = std::numeric_limits<float>::quiet_NaN();
-
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return result;
-
- alGetSourcef(m_source, AL_CONE_OUTER_GAIN, &result);
-
- return result;
-}
-
-bool AUD_OpenALDevice::AUD_OpenALHandle::setConeVolumeOuter(float volume)
-{
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return false;
-
- alSourcef(m_source, AL_CONE_OUTER_GAIN, volume);
-
- return true;
-}
-
-/******************************************************************************/
-/**************************** Threading Code **********************************/
-/******************************************************************************/
-
-static void *AUD_openalRunThread(void *device)
-{
- AUD_OpenALDevice* dev = (AUD_OpenALDevice*)device;
- dev->updateStreams();
- return NULL;
-}
-
-void AUD_OpenALDevice::start(bool join)
-{
- AUD_MutexLock lock(*this);
-
- if(!m_playing)
- {
- if(join)
- pthread_join(m_thread, NULL);
-
- pthread_attr_t attr;
- pthread_attr_init(&attr);
- pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
-
- pthread_create(&m_thread, &attr, AUD_openalRunThread, this);
-
- pthread_attr_destroy(&attr);
-
- m_playing = true;
- }
-}
-
-void AUD_OpenALDevice::updateStreams()
-{
- boost::shared_ptr<AUD_OpenALHandle> sound;
-
- int length;
-
- ALint info;
- AUD_DeviceSpecs specs = m_specs;
- ALCenum cerr;
- std::list<boost::shared_ptr<AUD_OpenALHandle> > stopSounds;
- std::list<boost::shared_ptr<AUD_OpenALHandle> > pauseSounds;
- AUD_HandleIterator it;
-
- while(1)
- {
- lock();
-
- alcSuspendContext(m_context);
- cerr = alcGetError(m_device);
- if(cerr == ALC_NO_ERROR)
- {
- // for all sounds
- for(it = m_playingSounds.begin(); it != m_playingSounds.end(); it++)
- {
- sound = *it;
-
- // is it a streamed sound?
- if(!sound->m_isBuffered)
- {
- // check for buffer refilling
- alGetSourcei(sound->m_source, AL_BUFFERS_PROCESSED, &info);
-
- if(info)
- {
- specs.specs = sound->m_reader->getSpecs();
- m_buffer.assureSize(m_buffersize * AUD_DEVICE_SAMPLE_SIZE(specs));
-
- // for all empty buffers
- while(info--)
- {
- // if there's still data to play back
- if(!sound->m_eos)
- {
- // read data
- length = m_buffersize;
- sound->m_reader->read(length, sound->m_eos, m_buffer.getBuffer());
-
- // looping necessary?
- if(length == 0 && sound->m_loopcount)
- {
- if(sound->m_loopcount > 0)
- sound->m_loopcount--;
-
- sound->m_reader->seek(0);
-
- length = m_buffersize;
- sound->m_reader->read(length, sound->m_eos, m_buffer.getBuffer());
- }
-
- if(sound->m_loopcount != 0)
- sound->m_eos = false;
-
- // read nothing?
- if(length == 0)
- {
- break;
- }
-
- // unqueue buffer (warning: this might fail for slow early returning sources (none exist so far) if the buffer was not queued due to recent changes - has to be tested)
- alSourceUnqueueBuffers(sound->m_source, 1, &sound->m_buffers[sound->m_current]);
- ALenum err;
- if((err = alGetError()) != AL_NO_ERROR)
- {
- sound->m_eos = true;
- break;
- }
-
- // fill with new data
- alBufferData(sound->m_buffers[sound->m_current],
- sound->m_format,
- m_buffer.getBuffer(), length *
- AUD_DEVICE_SAMPLE_SIZE(specs),
- specs.rate);
-
- if((err = alGetError()) != AL_NO_ERROR)
- {
- sound->m_eos = true;
- break;
- }
-
- // and queue again
- alSourceQueueBuffers(sound->m_source, 1,
- &sound->m_buffers[sound->m_current]);
- if(alGetError() != AL_NO_ERROR)
- {
- sound->m_eos = true;
- break;
- }
-
- sound->m_current = (sound->m_current+1) %
- AUD_OpenALHandle::CYCLE_BUFFERS;
- }
- else
- break;
- }
- }
- }
-
- // check if the sound has been stopped
- alGetSourcei(sound->m_source, AL_SOURCE_STATE, &info);
-
- if(info != AL_PLAYING)
- {
- // if it really stopped
- if(sound->m_eos && info != AL_INITIAL)
- {
- if(sound->m_stop)
- sound->m_stop(sound->m_stop_data);
-
- // pause or
- if(sound->m_keep)
- pauseSounds.push_back(sound);
- // stop
- else
- stopSounds.push_back(sound);
- }
- // continue playing
- else
- alSourcePlay(sound->m_source);
- }
- }
-
- for(it = pauseSounds.begin(); it != pauseSounds.end(); it++)
- (*it)->pause(true);
-
- for(it = stopSounds.begin(); it != stopSounds.end(); it++)
- (*it)->stop();
-
- pauseSounds.clear();
- stopSounds.clear();
-
- alcProcessContext(m_context);
- }
-
- // stop thread
- if(m_playingSounds.empty() || (cerr != ALC_NO_ERROR))
- {
- m_playing = false;
- unlock();
- pthread_exit(NULL);
- }
-
- unlock();
-
-#ifdef WIN32
- Sleep(20);
-#else
- usleep(20000);
-#endif
- }
-}
-
-/******************************************************************************/
-/**************************** IDevice Code ************************************/
-/******************************************************************************/
-
-static const char* open_error = "AUD_OpenALDevice: Device couldn't be opened.";
-
-AUD_OpenALDevice::AUD_OpenALDevice(AUD_DeviceSpecs specs, int buffersize)
-{
- // cannot determine how many channels or which format OpenAL uses, but
- // it at least is able to play 16 bit stereo audio
- specs.format = AUD_FORMAT_S16;
-
-#if 0
- if(alcIsExtensionPresent(NULL, "ALC_ENUMERATION_EXT") == AL_TRUE)
- {
- ALCchar* devices = const_cast<ALCchar*>(alcGetString(NULL, ALC_DEVICE_SPECIFIER));
- printf("OpenAL devices (standard is: %s):\n", alcGetString(NULL, ALC_DEFAULT_DEVICE_SPECIFIER));
-
- while(*devices)
- {
- printf("%s\n", devices);
- devices += strlen(devices) + 1;
- }
- }
-#endif
-
- m_device = alcOpenDevice(NULL);
-
- if(!m_device)
- AUD_THROW(AUD_ERROR_OPENAL, open_error);
-
- // at least try to set the frequency
- ALCint attribs[] = { ALC_FREQUENCY, (ALCint)specs.rate, 0 };
- ALCint* attributes = attribs;
- if(specs.rate == AUD_RATE_INVALID)
- attributes = NULL;
-
- m_context = alcCreateContext(m_device, attributes);
- alcMakeContextCurrent(m_context);
-
- alcGetIntegerv(m_device, ALC_FREQUENCY, 1, (ALCint*)&specs.rate);
-
- // check for specific formats and channel counts to be played back
- if(alIsExtensionPresent("AL_EXT_FLOAT32") == AL_TRUE)
- specs.format = AUD_FORMAT_FLOAT32;
-
- m_useMC = alIsExtensionPresent("AL_EXT_MCFORMATS") == AL_TRUE;
-
- if((!m_useMC && specs.channels > AUD_CHANNELS_STEREO) ||
- specs.channels == AUD_CHANNELS_STEREO_LFE ||
- specs.channels == AUD_CHANNELS_SURROUND5)
- specs.channels = AUD_CHANNELS_STEREO;
-
- alGetError();
- alcGetError(m_device);
-
- m_specs = specs;
- m_buffersize = buffersize;
- m_playing = false;
-
-// m_bufferedFactories = new std::list<AUD_OpenALBufferedFactory*>();
-
- pthread_mutexattr_t attr;
- pthread_mutexattr_init(&attr);
- pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
-
- pthread_mutex_init(&m_mutex, &attr);
-
- pthread_mutexattr_destroy(&attr);
-
- start(false);
-}
-
-AUD_OpenALDevice::~AUD_OpenALDevice()
-{
- lock();
- alcSuspendContext(m_context);
-
- while(!m_playingSounds.empty())
- m_playingSounds.front()->stop();
-
- while(!m_pausedSounds.empty())
- m_pausedSounds.front()->stop();
-
-
- // delete all buffered factories
- /*while(!m_bufferedFactories->empty())
- {
- alDeleteBuffers(1, &(*(m_bufferedFactories->begin()))->buffer);
- delete *m_bufferedFactories->begin();
- m_bufferedFactories->erase(m_bufferedFactories->begin());
- }*/
-
- alcProcessContext(m_context);
-
- // wait for the thread to stop
- unlock();
- pthread_join(m_thread, NULL);
-
- //delete m_bufferedFactories;
-
- // quit OpenAL
- alcMakeContextCurrent(NULL);
- alcDestroyContext(m_context);
- alcCloseDevice(m_device);
-
- pthread_mutex_destroy(&m_mutex);
-}
-
-AUD_DeviceSpecs AUD_OpenALDevice::getSpecs() const
-{
- return m_specs;
-}
-
-bool AUD_OpenALDevice::getFormat(ALenum &format, AUD_Specs specs)
-{
- bool valid = true;
- format = 0;
-
- switch(m_specs.format)
- {
- case AUD_FORMAT_S16:
- switch(specs.channels)
- {
- case AUD_CHANNELS_MONO:
- format = AL_FORMAT_MONO16;
- break;
- case AUD_CHANNELS_STEREO:
- format = AL_FORMAT_STEREO16;
- break;
- case AUD_CHANNELS_SURROUND4:
- if(m_useMC)
- {
- format = alGetEnumValue("AL_FORMAT_QUAD16");
- break;
- }
- case AUD_CHANNELS_SURROUND51:
- if(m_useMC)
- {
- format = alGetEnumValue("AL_FORMAT_51CHN16");
- break;
- }
- case AUD_CHANNELS_SURROUND61:
- if(m_useMC)
- {
- format = alGetEnumValue("AL_FORMAT_61CHN16");
- break;
- }
- case AUD_CHANNELS_SURROUND71:
- if(m_useMC)
- {
- format = alGetEnumValue("AL_FORMAT_71CHN16");
- break;
- }
- default:
- valid = false;
- }
- break;
- case AUD_FORMAT_FLOAT32:
- switch(specs.channels)
- {
- case AUD_CHANNELS_MONO:
- format = alGetEnumValue("AL_FORMAT_MONO_FLOAT32");
- break;
- case AUD_CHANNELS_STEREO:
- format = alGetEnumValue("AL_FORMAT_STEREO_FLOAT32");
- break;
- case AUD_CHANNELS_SURROUND4:
- if(m_useMC)
- {
- format = alGetEnumValue("AL_FORMAT_QUAD32");
- break;
- }
- case AUD_CHANNELS_SURROUND51:
- if(m_useMC)
- {
- format = alGetEnumValue("AL_FORMAT_51CHN32");
- break;
- }
- case AUD_CHANNELS_SURROUND61:
- if(m_useMC)
- {
- format = alGetEnumValue("AL_FORMAT_61CHN32");
- break;
- }
- case AUD_CHANNELS_SURROUND71:
- if(m_useMC)
- {
- format = alGetEnumValue("AL_FORMAT_71CHN32");
- break;
- }
- default:
- valid = false;
- }
- break;
- default:
- valid = false;
- }
-
- if(!format)
- valid = false;
-
- return valid;
-}
-
-boost::shared_ptr<AUD_IHandle> AUD_OpenALDevice::play(boost::shared_ptr<AUD_IReader> reader, bool keep)
-{
- AUD_Specs specs = reader->getSpecs();
-
- // check format
- if(specs.channels == AUD_CHANNELS_INVALID)
- return boost::shared_ptr<AUD_IHandle>();
-
- if(m_specs.format != AUD_FORMAT_FLOAT32)
- reader = boost::shared_ptr<AUD_IReader>(new AUD_ConverterReader(reader, m_specs));
-
- ALenum format;
-
- if(!getFormat(format, specs))
- return boost::shared_ptr<AUD_IHandle>();
-
- AUD_MutexLock lock(*this);
-
- alcSuspendContext(m_context);
-
- boost::shared_ptr<AUD_OpenALDevice::AUD_OpenALHandle> sound;
-
- try
- {
- // create the handle
- sound = boost::shared_ptr<AUD_OpenALDevice::AUD_OpenALHandle>(new AUD_OpenALDevice::AUD_OpenALHandle(this, format, reader, keep));
- }
- catch(AUD_Exception&)
- {
- alcProcessContext(m_context);
- throw;
- }
-
- alcProcessContext(m_context);
-
- // play sound
- m_playingSounds.push_back(sound);
-
- start();
-
- return boost::shared_ptr<AUD_IHandle>(sound);
-}
-
-boost::shared_ptr<AUD_IHandle> AUD_OpenALDevice::play(boost::shared_ptr<AUD_IFactory> factory, bool keep)
-{
- /* AUD_XXX disabled
- AUD_OpenALHandle* sound = NULL;
-
- lock();
-
- try
- {
- // check if it is a buffered factory
- for(AUD_BFIterator i = m_bufferedFactories->begin();
- i != m_bufferedFactories->end(); i++)
- {
- if((*i)->factory == factory)
- {
- // create the handle
- sound = new AUD_OpenALHandle;
- sound->keep = keep;
- sound->current = -1;
- sound->isBuffered = true;
- sound->eos = true;
- sound->loopcount = 0;
- sound->stop = NULL;
- sound->stop_data = NULL;
-
- alcSuspendContext(m_context);
-
- // OpenAL playback code
- try
- {
- alGenSources(1, &sound->source);
- if(alGetError() != AL_NO_ERROR)
- AUD_THROW(AUD_ERROR_OPENAL, gensource_error);
-
- try
- {
- alSourcei(sound->source, AL_BUFFER, (*i)->buffer);
- if(alGetError() != AL_NO_ERROR)
- AUD_THROW(AUD_ERROR_OPENAL, queue_error);
- }
- catch(AUD_Exception&)
- {
- alDeleteSources(1, &sound->source);
- throw;
- }
- }
- catch(AUD_Exception&)
- {
- delete sound;
- alcProcessContext(m_context);
- throw;
- }
-
- // play sound
- m_playingSounds->push_back(sound);
-
- alSourcei(sound->source, AL_SOURCE_RELATIVE, 1);
- start();
-
- alcProcessContext(m_context);
- }
- }
- }
- catch(AUD_Exception&)
- {
- unlock();
- throw;
- }
-
- unlock();
-
- if(sound)
- return sound;*/
-
- return play(factory->createReader(), keep);
-}
-
-void AUD_OpenALDevice::stopAll()
-{
- AUD_MutexLock lock(*this);
-
- alcSuspendContext(m_context);
-
- while(!m_playingSounds.empty())
- m_playingSounds.front()->stop();
-
- while(!m_pausedSounds.empty())
- m_pausedSounds.front()->stop();
-
- alcProcessContext(m_context);
-}
-
-void AUD_OpenALDevice::lock()
-{
- pthread_mutex_lock(&m_mutex);
-}
-
-void AUD_OpenALDevice::unlock()
-{
- pthread_mutex_unlock(&m_mutex);
-}
-
-float AUD_OpenALDevice::getVolume() const
-{
- float result;
- alGetListenerf(AL_GAIN, &result);
- return result;
-}
-
-void AUD_OpenALDevice::setVolume(float volume)
-{
- alListenerf(AL_GAIN, volume);
-}
-
-/* AUD_XXX Temorary disabled
-
-bool AUD_OpenALDevice::bufferFactory(void *value)
-{
- bool result = false;
- AUD_IFactory* factory = (AUD_IFactory*) value;
-
- // load the factory into an OpenAL buffer
- if(factory)
- {
- // check if the factory is already buffered
- lock();
- for(AUD_BFIterator i = m_bufferedFactories->begin();
- i != m_bufferedFactories->end(); i++)
- {
- if((*i)->factory == factory)
- {
- result = true;
- break;
- }
- }
- unlock();
- if(result)
- return result;
-
- AUD_IReader* reader = factory->createReader();
-
- if(reader == NULL)
- return false;
-
- AUD_DeviceSpecs specs = m_specs;
- specs.specs = reader->getSpecs();
-
- if(m_specs.format != AUD_FORMAT_FLOAT32)
- reader = new AUD_ConverterReader(reader, m_specs);
-
- ALenum format;
-
- if(!getFormat(format, specs.specs))
- {
- return false;
- }
-
- // load into a buffer
- lock();
- alcSuspendContext(m_context);
-
- AUD_OpenALBufferedFactory* bf = new AUD_OpenALBufferedFactory;
- bf->factory = factory;
-
- try
- {
- alGenBuffers(1, &bf->buffer);
- if(alGetError() != AL_NO_ERROR)
- AUD_THROW(AUD_ERROR_OPENAL);
-
- try
- {
- sample_t* buf;
- int length = reader->getLength();
-
- reader->read(length, buf);
- alBufferData(bf->buffer, format, buf,
- length * AUD_DEVICE_SAMPLE_SIZE(specs),
- specs.rate);
- if(alGetError() != AL_NO_ERROR)
- AUD_THROW(AUD_ERROR_OPENAL);
- }
- catch(AUD_Exception&)
- {
- alDeleteBuffers(1, &bf->buffer);
- throw;
- }
- }
- catch(AUD_Exception&)
- {
- delete bf;
- alcProcessContext(m_context);
- unlock();
- return false;
- }
-
- m_bufferedFactories->push_back(bf);
-
- alcProcessContext(m_context);
- unlock();
- }
- else
- {
- // stop all playing and paused buffered sources
- lock();
- alcSuspendContext(m_context);
-
- AUD_OpenALHandle* sound;
- AUD_HandleIterator it = m_playingSounds->begin();
- while(it != m_playingSounds->end())
- {
- sound = *it;
- ++it;
-
- if(sound->isBuffered)
- stop(sound);
- }
- alcProcessContext(m_context);
-
- while(!m_bufferedFactories->empty())
- {
- alDeleteBuffers(1,
- &(*(m_bufferedFactories->begin()))->buffer);
- delete *m_bufferedFactories->begin();
- m_bufferedFactories->erase(m_bufferedFactories->begin());
- }
- unlock();
- }
-
- return true;
-}*/
-
-/******************************************************************************/
-/**************************** 3D Device Code **********************************/
-/******************************************************************************/
-
-AUD_Vector3 AUD_OpenALDevice::getListenerLocation() const
-{
- ALfloat p[3];
- alGetListenerfv(AL_POSITION, p);
- return AUD_Vector3(p[0], p[1], p[2]);
-}
-
-void AUD_OpenALDevice::setListenerLocation(const AUD_Vector3& location)
-{
- alListenerfv(AL_POSITION, (ALfloat*)location.get());
-}
-
-AUD_Vector3 AUD_OpenALDevice::getListenerVelocity() const
-{
- ALfloat v[3];
- alGetListenerfv(AL_VELOCITY, v);
- return AUD_Vector3(v[0], v[1], v[2]);
-}
-
-void AUD_OpenALDevice::setListenerVelocity(const AUD_Vector3& velocity)
-{
- alListenerfv(AL_VELOCITY, (ALfloat*)velocity.get());
-}
-
-AUD_Quaternion AUD_OpenALDevice::getListenerOrientation() const
-{
- return m_orientation;
-}
-
-void AUD_OpenALDevice::setListenerOrientation(const AUD_Quaternion& orientation)
-{
- ALfloat direction[6];
- direction[0] = -2 * (orientation.w() * orientation.y() +
- orientation.x() * orientation.z());
- direction[1] = 2 * (orientation.x() * orientation.w() -
- orientation.z() * orientation.y());
- direction[2] = 2 * (orientation.x() * orientation.x() +
- orientation.y() * orientation.y()) - 1;
- direction[3] = 2 * (orientation.x() * orientation.y() -
- orientation.w() * orientation.z());
- direction[4] = 1 - 2 * (orientation.x() * orientation.x() +
- orientation.z() * orientation.z());
- direction[5] = 2 * (orientation.w() * orientation.x() +
- orientation.y() * orientation.z());
- alListenerfv(AL_ORIENTATION, direction);
- m_orientation = orientation;
-}
-
-float AUD_OpenALDevice::getSpeedOfSound() const
-{
- return alGetFloat(AL_SPEED_OF_SOUND);
-}
-
-void AUD_OpenALDevice::setSpeedOfSound(float speed)
-{
- alSpeedOfSound(speed);
-}
-
-float AUD_OpenALDevice::getDopplerFactor() const
-{
- return alGetFloat(AL_DOPPLER_FACTOR);
-}
-
-void AUD_OpenALDevice::setDopplerFactor(float factor)
-{
- alDopplerFactor(factor);
-}
-
-AUD_DistanceModel AUD_OpenALDevice::getDistanceModel() const
-{
- switch(alGetInteger(AL_DISTANCE_MODEL))
- {
- case AL_INVERSE_DISTANCE:
- return AUD_DISTANCE_MODEL_INVERSE;
- case AL_INVERSE_DISTANCE_CLAMPED:
- return AUD_DISTANCE_MODEL_INVERSE_CLAMPED;
- case AL_LINEAR_DISTANCE:
- return AUD_DISTANCE_MODEL_LINEAR;
- case AL_LINEAR_DISTANCE_CLAMPED:
- return AUD_DISTANCE_MODEL_LINEAR_CLAMPED;
- case AL_EXPONENT_DISTANCE:
- return AUD_DISTANCE_MODEL_EXPONENT;
- case AL_EXPONENT_DISTANCE_CLAMPED:
- return AUD_DISTANCE_MODEL_EXPONENT_CLAMPED;
- default:
- return AUD_DISTANCE_MODEL_INVALID;
- }
-}
-
-void AUD_OpenALDevice::setDistanceModel(AUD_DistanceModel model)
-{
- switch(model)
- {
- case AUD_DISTANCE_MODEL_INVERSE:
- alDistanceModel(AL_INVERSE_DISTANCE);
- break;
- case AUD_DISTANCE_MODEL_INVERSE_CLAMPED:
- alDistanceModel(AL_INVERSE_DISTANCE_CLAMPED);
- break;
- case AUD_DISTANCE_MODEL_LINEAR:
- alDistanceModel(AL_LINEAR_DISTANCE);
- break;
- case AUD_DISTANCE_MODEL_LINEAR_CLAMPED:
- alDistanceModel(AL_LINEAR_DISTANCE_CLAMPED);
- break;
- case AUD_DISTANCE_MODEL_EXPONENT:
- alDistanceModel(AL_EXPONENT_DISTANCE);
- break;
- case AUD_DISTANCE_MODEL_EXPONENT_CLAMPED:
- alDistanceModel(AL_EXPONENT_DISTANCE_CLAMPED);
- break;
- default:
- alDistanceModel(AL_NONE);
- }
-}
diff --git a/intern/audaspace/OpenAL/AUD_OpenALDevice.h b/intern/audaspace/OpenAL/AUD_OpenALDevice.h
deleted file mode 100644
index f0e47824967..00000000000
--- a/intern/audaspace/OpenAL/AUD_OpenALDevice.h
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/OpenAL/AUD_OpenALDevice.h
- * \ingroup audopenal
- */
-
-
-#ifndef __AUD_OPENALDEVICE_H__
-#define __AUD_OPENALDEVICE_H__
-
-#include "AUD_IDevice.h"
-#include "AUD_IHandle.h"
-#include "AUD_I3DDevice.h"
-#include "AUD_I3DHandle.h"
-#include "AUD_Buffer.h"
-//struct AUD_OpenALBufferedFactory;
-
-#include <AL/al.h>
-#include <AL/alc.h>
-#include <list>
-#include <pthread.h>
-
-/**
- * This device plays through OpenAL.
- */
-class AUD_OpenALDevice : public AUD_IDevice, public AUD_I3DDevice
-{
-private:
- /// Saves the data for playback.
- class AUD_OpenALHandle : public AUD_IHandle, public AUD_I3DHandle
- {
- public:
- static const int CYCLE_BUFFERS = 3;
-
- /// Whether it's a buffered or a streamed source.
- bool m_isBuffered;
-
- /// The reader source.
- boost::shared_ptr<AUD_IReader> m_reader;
-
- /// Whether to keep the source if end of it is reached.
- bool m_keep;
-
- /// OpenAL sample format.
- ALenum m_format;
-
- /// OpenAL source.
- ALuint m_source;
-
- /// OpenAL buffers.
- ALuint m_buffers[CYCLE_BUFFERS];
-
- /// The first buffer to be read next.
- int m_current;
-
- /// Whether the stream doesn't return any more data.
- bool m_eos;
-
- /// The loop count of the source.
- int m_loopcount;
-
- /// The stop callback.
- stopCallback m_stop;
-
- /// Stop callback data.
- void* m_stop_data;
-
- /// Orientation.
- AUD_Quaternion m_orientation;
-
- /// Current status of the handle
- AUD_Status m_status;
-
- /// Own device.
- AUD_OpenALDevice* m_device;
-
- bool pause(bool keep);
-
- public:
-
- /**
- * Creates a new OpenAL handle.
- * \param device The OpenAL device the handle belongs to.
- * \param format The AL format.
- * \param reader The reader this handle plays.
- * \param keep Whether to keep the handle alive when the reader ends.
- */
- AUD_OpenALHandle(AUD_OpenALDevice* device, ALenum format, boost::shared_ptr<AUD_IReader> reader, bool keep);
-
- virtual ~AUD_OpenALHandle() {}
- virtual bool pause();
- virtual bool resume();
- virtual bool stop();
- virtual bool getKeep();
- virtual bool setKeep(bool keep);
- virtual bool seek(float position);
- virtual float getPosition();
- virtual AUD_Status getStatus();
- virtual float getVolume();
- virtual bool setVolume(float volume);
- virtual float getPitch();
- virtual bool setPitch(float pitch);
- virtual int getLoopCount();
- virtual bool setLoopCount(int count);
- virtual bool setStopCallback(stopCallback callback = 0, void* data = 0);
-
- virtual AUD_Vector3 getSourceLocation();
- virtual bool setSourceLocation(const AUD_Vector3& location);
- virtual AUD_Vector3 getSourceVelocity();
- virtual bool setSourceVelocity(const AUD_Vector3& velocity);
- virtual AUD_Quaternion getSourceOrientation();
- virtual bool setSourceOrientation(const AUD_Quaternion& orientation);
- virtual bool isRelative();
- virtual bool setRelative(bool relative);
- virtual float getVolumeMaximum();
- virtual bool setVolumeMaximum(float volume);
- virtual float getVolumeMinimum();
- virtual bool setVolumeMinimum(float volume);
- virtual float getDistanceMaximum();
- virtual bool setDistanceMaximum(float distance);
- virtual float getDistanceReference();
- virtual bool setDistanceReference(float distance);
- virtual float getAttenuation();
- virtual bool setAttenuation(float factor);
- virtual float getConeAngleOuter();
- virtual bool setConeAngleOuter(float angle);
- virtual float getConeAngleInner();
- virtual bool setConeAngleInner(float angle);
- virtual float getConeVolumeOuter();
- virtual bool setConeVolumeOuter(float volume);
- };
-
- typedef std::list<boost::shared_ptr<AUD_OpenALHandle> >::iterator AUD_HandleIterator;
-
- /**
- * The OpenAL device handle.
- */
- ALCdevice* m_device;
-
- /**
- * The OpenAL context.
- */
- ALCcontext* m_context;
-
- /**
- * The specification of the device.
- */
- AUD_DeviceSpecs m_specs;
-
- /**
- * Whether the device has the AL_EXT_MCFORMATS extension.
- */
- bool m_useMC;
-
- /**
- * The list of sounds that are currently playing.
- */
- std::list<boost::shared_ptr<AUD_OpenALHandle> > m_playingSounds;
-
- /**
- * The list of sounds that are currently paused.
- */
- std::list<boost::shared_ptr<AUD_OpenALHandle> > m_pausedSounds;
-
- /**
- * The list of buffered factories.
- */
- //std::list<AUD_OpenALBufferedFactory*>* m_bufferedFactories;
-
- /**
- * The mutex for locking.
- */
- pthread_mutex_t m_mutex;
-
- /**
- * The streaming thread.
- */
- pthread_t m_thread;
-
- /**
- * The condition for streaming thread wakeup.
- */
- bool m_playing;
-
- /**
- * Buffer size.
- */
- int m_buffersize;
-
- /**
- * Device buffer.
- */
- AUD_Buffer m_buffer;
-
- /**
- * Orientation.
- */
- AUD_Quaternion m_orientation;
-
- /**
- * Starts the streaming thread.
- * \param Whether the previous thread should be joined.
- */
- void start(bool join = true);
-
- /**
- * Gets the format according to the specs.
- * \param format The variable to put the format into.
- * \param specs The specs to read the channel count from.
- * \return Whether the format is valid or not.
- */
- bool getFormat(ALenum &format, AUD_Specs specs);
-
- // hide copy constructor and operator=
- AUD_OpenALDevice(const AUD_OpenALDevice&);
- AUD_OpenALDevice& operator=(const AUD_OpenALDevice&);
-
-public:
- /**
- * Opens the OpenAL audio device for playback.
- * \param specs The wanted audio specification.
- * \param buffersize The size of the internal buffer.
- * \note The specification really used for opening the device may differ.
- * \note The buffersize will be multiplicated by three for this device.
- * \exception AUD_Exception Thrown if the audio device cannot be opened.
- */
- AUD_OpenALDevice(AUD_DeviceSpecs specs,
- int buffersize = AUD_DEFAULT_BUFFER_SIZE);
-
- /**
- * Streaming thread main function.
- */
- void updateStreams();
-
- virtual ~AUD_OpenALDevice();
-
- virtual AUD_DeviceSpecs getSpecs() const;
- virtual boost::shared_ptr<AUD_IHandle> play(boost::shared_ptr<AUD_IReader> reader, bool keep = false);
- virtual boost::shared_ptr<AUD_IHandle> play(boost::shared_ptr<AUD_IFactory> factory, bool keep = false);
- virtual void stopAll();
- virtual void lock();
- virtual void unlock();
- virtual float getVolume() const;
- virtual void setVolume(float volume);
-
- virtual AUD_Vector3 getListenerLocation() const;
- virtual void setListenerLocation(const AUD_Vector3& location);
- virtual AUD_Vector3 getListenerVelocity() const;
- virtual void setListenerVelocity(const AUD_Vector3& velocity);
- virtual AUD_Quaternion getListenerOrientation() const;
- virtual void setListenerOrientation(const AUD_Quaternion& orientation);
- virtual float getSpeedOfSound() const;
- virtual void setSpeedOfSound(float speed);
- virtual float getDopplerFactor() const;
- virtual void setDopplerFactor(float factor);
- virtual AUD_DistanceModel getDistanceModel() const;
- virtual void setDistanceModel(AUD_DistanceModel model);
-};
-
-#endif //__AUD_OPENALDEVICE_H__
diff --git a/intern/audaspace/Python/AUD_PyAPI.cpp b/intern/audaspace/Python/AUD_PyAPI.cpp
deleted file mode 100644
index 6d4939bf96c..00000000000
--- a/intern/audaspace/Python/AUD_PyAPI.cpp
+++ /dev/null
@@ -1,2922 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/Python/AUD_PyAPI.cpp
- * \ingroup audpython
- */
-
-
-#include "AUD_PyAPI.h"
-#include <structmember.h>
-
-#include "AUD_I3DDevice.h"
-#include "AUD_I3DHandle.h"
-#include "AUD_NULLDevice.h"
-#include "AUD_DelayFactory.h"
-#include "AUD_DoubleFactory.h"
-#include "AUD_FaderFactory.h"
-#include "AUD_HighpassFactory.h"
-#include "AUD_LimiterFactory.h"
-#include "AUD_LoopFactory.h"
-#include "AUD_LowpassFactory.h"
-#include "AUD_PingPongFactory.h"
-#include "AUD_PitchFactory.h"
-#include "AUD_ReverseFactory.h"
-#include "AUD_SinusFactory.h"
-#include "AUD_FileFactory.h"
-#include "AUD_SquareFactory.h"
-#include "AUD_StreamBufferFactory.h"
-#include "AUD_SuperposeFactory.h"
-#include "AUD_VolumeFactory.h"
-#include "AUD_IIRFilterFactory.h"
-
-#ifdef WITH_SDL
-#include "AUD_SDLDevice.h"
-#endif
-
-#ifdef WITH_OPENAL
-#include "AUD_OpenALDevice.h"
-#endif
-
-#ifdef WITH_JACK
-#include "AUD_JackDevice.h"
-#endif
-
-// ====================================================================
-
-typedef enum
-{
- AUD_DEVICE_NULL = 0,
- AUD_DEVICE_OPENAL,
- AUD_DEVICE_SDL,
- AUD_DEVICE_JACK,
- AUD_DEVICE_READ,
-} AUD_DeviceTypes;
-
-// ====================================================================
-
-#define PY_MODULE_ADD_CONSTANT(module, name) PyModule_AddIntConstant(module, #name, name)
-
-// ====================================================================
-
-static PyObject *AUDError;
-
-static const char* device_not_3d_error = "Device is not a 3D device!";
-
-// ====================================================================
-
-static void
-Factory_dealloc(Factory* self)
-{
- if(self->factory)
- delete reinterpret_cast<boost::shared_ptr<AUD_IFactory>*>(self->factory);
- Py_XDECREF(self->child_list);
- Py_TYPE(self)->tp_free((PyObject *)self);
-}
-
-static PyObject *
-Factory_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
-{
- Factory *self;
-
- self = (Factory*)type->tp_alloc(type, 0);
- if(self != NULL)
- {
- static const char *kwlist[] = {"filename", NULL};
- const char* filename = NULL;
-
- if(!PyArg_ParseTupleAndKeywords(args, kwds, "s:Factory", const_cast<char**>(kwlist), &filename))
- {
- Py_DECREF(self);
- return NULL;
- }
-
- try
- {
- self->factory = new boost::shared_ptr<AUD_IFactory>(new AUD_FileFactory(filename));
- }
- catch(AUD_Exception& e)
- {
- Py_DECREF(self);
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
- }
-
- return (PyObject *)self;
-}
-
-PyDoc_STRVAR(M_aud_Factory_sine_doc,
- "sine(frequency, rate=48000)\n\n"
- "Creates a sine factory which plays a sine wave.\n\n"
- ":arg frequency: The frequency of the sine wave in Hz.\n"
- ":type frequency: float\n"
- ":arg rate: The sampling rate in Hz. It's recommended to set this "
- "value to the playback device's samling rate to avoid resamping.\n"
- ":type rate: int\n"
- ":return: The created :class:`Factory` object.\n"
- ":rtype: :class:`Factory`");
-
-static PyObject *
-Factory_sine(PyTypeObject* type, PyObject *args)
-{
- float frequency;
- double rate = 48000;
-
- if(!PyArg_ParseTuple(args, "f|d:sine", &frequency, &rate))
- return NULL;
-
- Factory *self;
-
- self = (Factory*)type->tp_alloc(type, 0);
- if(self != NULL)
- {
- try
- {
- self->factory = new boost::shared_ptr<AUD_IFactory>(new AUD_SinusFactory(frequency, (AUD_SampleRate)rate));
- }
- catch(AUD_Exception& e)
- {
- Py_DECREF(self);
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
- }
-
- return (PyObject *)self;
-}
-
-PyDoc_STRVAR(M_aud_Factory_file_doc,
- "file(filename)\n\n"
- "Creates a factory object of a sound file.\n\n"
- ":arg filename: Path of the file.\n"
- ":type filename: string\n"
- ":return: The created :class:`Factory` object.\n"
- ":rtype: :class:`Factory`\n\n"
- ".. warning:: If the file doesn't exist or can't be read you will "
- "not get an exception immediately, but when you try to start "
- "playback of that factory.");
-
-static PyObject *
-Factory_file(PyTypeObject* type, PyObject *args)
-{
- const char* filename = NULL;
-
- if(!PyArg_ParseTuple(args, "s:file", &filename))
- return NULL;
-
- Factory *self;
-
- self = (Factory*)type->tp_alloc(type, 0);
- if(self != NULL)
- {
- try
- {
- self->factory = new boost::shared_ptr<AUD_IFactory>(new AUD_FileFactory(filename));
- }
- catch(AUD_Exception& e)
- {
- Py_DECREF(self);
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
- }
-
- return (PyObject *)self;
-}
-
-PyDoc_STRVAR(M_aud_Factory_lowpass_doc,
- "lowpass(frequency, Q=0.5)\n\n"
- "Creates a second order lowpass filter based on the transfer "
- "function H(s) = 1 / (s^2 + s/Q + 1)\n\n"
- ":arg frequency: The cut off trequency of the lowpass.\n"
- ":type frequency: float\n"
- ":arg Q: Q factor of the lowpass.\n"
- ":type Q: float\n"
- ":return: The created :class:`Factory` object.\n"
- ":rtype: :class:`Factory`");
-
-static PyObject *
-Factory_lowpass(Factory* self, PyObject *args)
-{
- float frequency;
- float Q = 0.5;
-
- if(!PyArg_ParseTuple(args, "f|f:lowpass", &frequency, &Q))
- return NULL;
-
- PyTypeObject* type = Py_TYPE(self);
- Factory *parent = (Factory*)type->tp_alloc(type, 0);
-
- if(parent != NULL)
- {
- Py_INCREF(self);
- parent->child_list = (PyObject *)self;
-
- try
- {
- parent->factory = new boost::shared_ptr<AUD_IFactory>(new AUD_LowpassFactory(*reinterpret_cast<boost::shared_ptr<AUD_IFactory>*>(self->factory), frequency, Q));
- }
- catch(AUD_Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Factory_delay_doc,
- "delay(time)\n\n"
- "Delays by playing adding silence in front of the other factory's "
- "data.\n\n"
- ":arg time: How many seconds of silence should be added before "
- "the factory.\n"
- ":type time: float\n"
- ":return: The created :class:`Factory` object.\n"
- ":rtype: :class:`Factory`");
-
-static PyObject *
-Factory_delay(Factory* self, PyObject *args)
-{
- float delay;
-
- if(!PyArg_ParseTuple(args, "f:delay", &delay))
- return NULL;
-
- PyTypeObject* type = Py_TYPE(self);
- Factory *parent = (Factory*)type->tp_alloc(type, 0);
-
- if(parent != NULL)
- {
- Py_INCREF(self);
- parent->child_list = (PyObject *)self;
-
- try
- {
- parent->factory = new boost::shared_ptr<AUD_IFactory>(new AUD_DelayFactory(*reinterpret_cast<boost::shared_ptr<AUD_IFactory>*>(self->factory), delay));
- }
- catch(AUD_Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Factory_join_doc,
- "join(factory)\n\n"
- "Plays two factories in sequence.\n\n"
- ":arg factory: The factory to play second.\n"
- ":type factory: :class:`Factory`\n"
- ":return: The created :class:`Factory` object.\n"
- ":rtype: :class:`Factory`\n\n"
- ".. note:: The two factories have to have the same specifications "
- "(channels and samplerate).");
-
-static PyObject *
-Factory_join(Factory* self, PyObject *object)
-{
- PyTypeObject* type = Py_TYPE(self);
-
- if(!PyObject_TypeCheck(object, type))
- {
- PyErr_SetString(PyExc_TypeError, "Object has to be of type Factory!");
- return NULL;
- }
-
- Factory *parent;
- Factory *child = (Factory*)object;
-
- parent = (Factory*)type->tp_alloc(type, 0);
- if(parent != NULL)
- {
- parent->child_list = Py_BuildValue("(OO)", self, object);
-
- try
- {
- parent->factory = new boost::shared_ptr<AUD_IFactory>(new AUD_DoubleFactory(*reinterpret_cast<boost::shared_ptr<AUD_IFactory>*>(self->factory), *reinterpret_cast<boost::shared_ptr<AUD_IFactory>*>(child->factory)));
- }
- catch(AUD_Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Factory_highpass_doc,
- "highpass(frequency, Q=0.5)\n\n"
- "Creates a second order highpass filter based on the transfer "
- "function H(s) = s^2 / (s^2 + s/Q + 1)\n\n"
- ":arg frequency: The cut off trequency of the highpass.\n"
- ":type frequency: float\n"
- ":arg Q: Q factor of the lowpass.\n"
- ":type Q: float\n"
- ":return: The created :class:`Factory` object.\n"
- ":rtype: :class:`Factory`");
-
-static PyObject *
-Factory_highpass(Factory* self, PyObject *args)
-{
- float frequency;
- float Q = 0.5;
-
- if(!PyArg_ParseTuple(args, "f|f:highpass", &frequency, &Q))
- return NULL;
-
- PyTypeObject* type = Py_TYPE(self);
- Factory *parent = (Factory*)type->tp_alloc(type, 0);
-
- if(parent != NULL)
- {
- Py_INCREF(self);
- parent->child_list = (PyObject *)self;
-
- try
- {
- parent->factory = new boost::shared_ptr<AUD_IFactory>(new AUD_HighpassFactory(*reinterpret_cast<boost::shared_ptr<AUD_IFactory>*>(self->factory), frequency, Q));
- }
- catch(AUD_Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Factory_limit_doc,
- "limit(start, end)\n\n"
- "Limits a factory within a specific start and end time.\n\n"
- ":arg start: Start time in seconds.\n"
- ":type start: float\n"
- ":arg end: End time in seconds.\n"
- ":type end: float\n"
- ":return: The created :class:`Factory` object.\n"
- ":rtype: :class:`Factory`");
-
-static PyObject *
-Factory_limit(Factory* self, PyObject *args)
-{
- float start, end;
-
- if(!PyArg_ParseTuple(args, "ff:limit", &start, &end))
- return NULL;
-
- PyTypeObject* type = Py_TYPE(self);
- Factory *parent = (Factory*)type->tp_alloc(type, 0);
-
- if(parent != NULL)
- {
- Py_INCREF(self);
- parent->child_list = (PyObject *)self;
-
- try
- {
- parent->factory = new boost::shared_ptr<AUD_IFactory>(new AUD_LimiterFactory(*reinterpret_cast<boost::shared_ptr<AUD_IFactory>*>(self->factory), start, end));
- }
- catch(AUD_Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Factory_pitch_doc,
- "pitch(factor)\n\n"
- "Changes the pitch of a factory with a specific factor.\n\n"
- ":arg factor: The factor to change the pitch with.\n"
- ":type factor: float\n"
- ":return: The created :class:`Factory` object.\n"
- ":rtype: :class:`Factory`\n\n"
- ".. note:: This is done by changing the sample rate of the "
- "underlying factory, which has to be an integer, so the factor "
- "value rounded and the factor may not be 100 % accurate.\n\n"
- ".. note:: This is a filter function, you might consider using "
- ":attr:`Handle.pitch` instead.");
-
-static PyObject *
-Factory_pitch(Factory* self, PyObject *args)
-{
- float factor;
-
- if(!PyArg_ParseTuple(args, "f:pitch", &factor))
- return NULL;
-
- PyTypeObject* type = Py_TYPE(self);
- Factory *parent = (Factory*)type->tp_alloc(type, 0);
-
- if(parent != NULL)
- {
- Py_INCREF(self);
- parent->child_list = (PyObject *)self;
-
- try
- {
- parent->factory = new boost::shared_ptr<AUD_IFactory>(new AUD_PitchFactory(*reinterpret_cast<boost::shared_ptr<AUD_IFactory>*>(self->factory), factor));
- }
- catch(AUD_Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Factory_volume_doc,
- "volume(volume)\n\n"
- "Changes the volume of a factory.\n\n"
- ":arg volume: The new volume..\n"
- ":type volume: float\n"
- ":return: The created :class:`Factory` object.\n"
- ":rtype: :class:`Factory`\n\n"
- ".. note:: Should be in the range [0, 1] to avoid clipping.\n\n"
- ".. note:: This is a filter function, you might consider using "
- ":attr:`Handle.volume` instead.");
-
-static PyObject *
-Factory_volume(Factory* self, PyObject *args)
-{
- float volume;
-
- if(!PyArg_ParseTuple(args, "f:volume", &volume))
- return NULL;
-
- PyTypeObject* type = Py_TYPE(self);
- Factory *parent = (Factory*)type->tp_alloc(type, 0);
-
- if(parent != NULL)
- {
- Py_INCREF(self);
- parent->child_list = (PyObject *)self;
-
- try
- {
- parent->factory = new boost::shared_ptr<AUD_IFactory>(new AUD_VolumeFactory(*reinterpret_cast<boost::shared_ptr<AUD_IFactory>*>(self->factory), volume));
- }
- catch(AUD_Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Factory_fadein_doc,
- "fadein(start, length)\n\n"
- "Fades a factory in by raising the volume linearly in the given "
- "time interval.\n\n"
- ":arg start: Time in seconds when the fading should start.\n"
- ":type start: float\n"
- ":arg length: Time in seconds how long the fading should last.\n"
- ":type length: float\n"
- ":return: The created :class:`Factory` object.\n"
- ":rtype: :class:`Factory`\n\n"
- ".. note:: Before the fade starts it plays silence.");
-
-static PyObject *
-Factory_fadein(Factory* self, PyObject *args)
-{
- float start, length;
-
- if(!PyArg_ParseTuple(args, "ff:fadein", &start, &length))
- return NULL;
-
- PyTypeObject* type = Py_TYPE(self);
- Factory *parent = (Factory*)type->tp_alloc(type, 0);
-
- if(parent != NULL)
- {
- Py_INCREF(self);
- parent->child_list = (PyObject *)self;
-
- try
- {
- parent->factory = new boost::shared_ptr<AUD_IFactory>(new AUD_FaderFactory(*reinterpret_cast<boost::shared_ptr<AUD_IFactory>*>(self->factory), AUD_FADE_IN, start, length));
- }
- catch(AUD_Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Factory_fadeout_doc,
- "fadeout(start, length)\n\n"
- "Fades a factory in by lowering the volume linearly in the given "
- "time interval.\n\n"
- ":arg start: Time in seconds when the fading should start.\n"
- ":type start: float\n"
- ":arg length: Time in seconds how long the fading should last.\n"
- ":type length: float\n"
- ":return: The created :class:`Factory` object.\n"
- ":rtype: :class:`Factory`\n\n"
- ".. note:: After the fade this factory plays silence, so that "
- "the length of the factory is not altered.");
-
-static PyObject *
-Factory_fadeout(Factory* self, PyObject *args)
-{
- float start, length;
-
- if(!PyArg_ParseTuple(args, "ff:fadeout", &start, &length))
- return NULL;
-
- PyTypeObject* type = Py_TYPE(self);
- Factory *parent = (Factory*)type->tp_alloc(type, 0);
-
- if(parent != NULL)
- {
- Py_INCREF(self);
- parent->child_list = (PyObject *)self;
-
- try
- {
- parent->factory = new boost::shared_ptr<AUD_IFactory>(new AUD_FaderFactory(*reinterpret_cast<boost::shared_ptr<AUD_IFactory>*>(self->factory), AUD_FADE_OUT, start, length));
- }
- catch(AUD_Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Factory_loop_doc,
- "loop(count)\n\n"
- "Loops a factory.\n\n"
- ":arg count: How often the factory should be looped. "
- "Negative values mean endlessly.\n"
- ":type count: integer\n"
- ":return: The created :class:`Factory` object.\n"
- ":rtype: :class:`Factory`\n\n"
- ".. note:: This is a filter function, you might consider using "
- ":attr:`Handle.loop_count` instead.");
-
-static PyObject *
-Factory_loop(Factory* self, PyObject *args)
-{
- int loop;
-
- if(!PyArg_ParseTuple(args, "i:loop", &loop))
- return NULL;
-
- PyTypeObject* type = Py_TYPE(self);
- Factory *parent = (Factory*)type->tp_alloc(type, 0);
-
- if(parent != NULL)
- {
- Py_INCREF(self);
- parent->child_list = (PyObject *)self;
-
- try
- {
- parent->factory = new boost::shared_ptr<AUD_IFactory>(new AUD_LoopFactory(*reinterpret_cast<boost::shared_ptr<AUD_IFactory>*>(self->factory), loop));
- }
- catch(AUD_Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Factory_mix_doc,
- "mix(factory)\n\n"
- "Mixes two factories.\n\n"
- ":arg factory: The factory to mix over the other.\n"
- ":type factory: :class:`Factory`\n"
- ":return: The created :class:`Factory` object.\n"
- ":rtype: :class:`Factory`\n\n"
- ".. note:: The two factories have to have the same specifications "
- "(channels and samplerate).");
-
-static PyObject *
-Factory_mix(Factory* self, PyObject *object)
-{
- PyTypeObject* type = Py_TYPE(self);
-
- if(!PyObject_TypeCheck(object, type))
- {
- PyErr_SetString(PyExc_TypeError, "Object is not of type Factory!");
- return NULL;
- }
-
- Factory *parent = (Factory*)type->tp_alloc(type, 0);
- Factory *child = (Factory*)object;
-
- if(parent != NULL)
- {
- parent->child_list = Py_BuildValue("(OO)", self, object);
-
- try
- {
- parent->factory = new boost::shared_ptr<AUD_IFactory>(new AUD_SuperposeFactory(*reinterpret_cast<boost::shared_ptr<AUD_IFactory>*>(self->factory), *reinterpret_cast<boost::shared_ptr<AUD_IFactory>*>(child->factory)));
- }
- catch(AUD_Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Factory_pingpong_doc,
- "pingpong()\n\n"
- "Plays a factory forward and then backward.\n"
- "This is like joining a factory with its reverse.\n\n"
- ":return: The created :class:`Factory` object.\n"
- ":rtype: :class:`Factory`");
-
-static PyObject *
-Factory_pingpong(Factory* self)
-{
- PyTypeObject* type = Py_TYPE(self);
- Factory *parent = (Factory*)type->tp_alloc(type, 0);
-
- if(parent != NULL)
- {
- Py_INCREF(self);
- parent->child_list = (PyObject *)self;
-
- try
- {
- parent->factory = new boost::shared_ptr<AUD_IFactory>(new AUD_PingPongFactory(*reinterpret_cast<boost::shared_ptr<AUD_IFactory>*>(self->factory)));
- }
- catch(AUD_Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Factory_reverse_doc,
- "reverse()\n\n"
- "Plays a factory reversed.\n\n"
- ":return: The created :class:`Factory` object.\n"
- ":rtype: :class:`Factory`\n\n"
- ".. note:: The factory has to have a finite length and has to be "
- "seekable. It's recommended to use this only with factories with "
- "fast and accurate seeking, which is not true for encoded audio "
- "files, such ones should be buffered using :meth:`buffer` before "
- "being played reversed.\n\n"
- ".. warning:: If seeking is not accurate in the underlying factory "
- "you'll likely hear skips/jumps/cracks.");
-
-static PyObject *
-Factory_reverse(Factory* self)
-{
- PyTypeObject* type = Py_TYPE(self);
- Factory *parent = (Factory*)type->tp_alloc(type, 0);
-
- if(parent != NULL)
- {
- Py_INCREF(self);
- parent->child_list = (PyObject *)self;
-
- try
- {
- parent->factory = new boost::shared_ptr<AUD_IFactory>(new AUD_ReverseFactory(*reinterpret_cast<boost::shared_ptr<AUD_IFactory>*>(self->factory)));
- }
- catch(AUD_Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Factory_buffer_doc,
- "buffer()\n\n"
- "Buffers a factory into RAM.\n"
- "This saves CPU usage needed for decoding and file access if the "
- "underlying factory reads from a file on the harddisk, but it "
- "consumes a lot of memory.\n\n"
- ":return: The created :class:`Factory` object.\n"
- ":rtype: :class:`Factory`\n\n"
- ".. note:: Only known-length factories can be buffered.\n\n"
- ".. warning:: Raw PCM data needs a lot of space, only buffer "
- "short factories.");
-
-static PyObject *
-Factory_buffer(Factory* self)
-{
- PyTypeObject* type = Py_TYPE(self);
- Factory *parent = (Factory*)type->tp_alloc(type, 0);
-
- if(parent != NULL)
- {
- try
- {
- parent->factory = new boost::shared_ptr<AUD_IFactory>(new AUD_StreamBufferFactory(*reinterpret_cast<boost::shared_ptr<AUD_IFactory>*>(self->factory)));
- }
- catch(AUD_Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Factory_square_doc,
- "square(threshold = 0)\n\n"
- "Makes a square wave out of an audio wave by setting all samples "
- "with a amplitude >= threshold to 1, all <= -threshold to -1 and "
- "all between to 0.\n\n"
- ":arg threshold: Threshold value over which an amplitude counts "
- "non-zero.\n"
- ":type threshold: float\n"
- ":return: The created :class:`Factory` object.\n"
- ":rtype: :class:`Factory`");
-
-static PyObject *
-Factory_square(Factory* self, PyObject *args)
-{
- float threshold = 0;
-
- if(!PyArg_ParseTuple(args, "|f:square", &threshold))
- return NULL;
-
- PyTypeObject* type = Py_TYPE(self);
- Factory *parent = (Factory*)type->tp_alloc(type, 0);
-
- if(parent != NULL)
- {
- Py_INCREF(self);
- parent->child_list = (PyObject *)self;
-
- try
- {
- parent->factory = new boost::shared_ptr<AUD_IFactory>(new AUD_SquareFactory(*reinterpret_cast<boost::shared_ptr<AUD_IFactory>*>(self->factory), threshold));
- }
- catch(AUD_Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
- }
-
- return (PyObject *)parent;
-}
-
-PyDoc_STRVAR(M_aud_Factory_filter_doc,
- "filter(b, a = (1))\n\n"
- "Filters a factory with the supplied IIR filter coefficients.\n"
- "Without the second parameter you'll get a FIR filter.\n"
- "If the first value of the a sequence is 0 it will be set to 1 "
- "automatically.\n"
- "If the first value of the a sequence is neither 0 nor 1, all "
- "filter coefficients will be scaled by this value so that it is 1 "
- "in the end, you don't have to scale yourself.\n\n"
- ":arg b: The nominator filter coefficients.\n"
- ":type b: sequence of float\n"
- ":arg a: The denominator filter coefficients.\n"
- ":type a: sequence of float\n"
- ":return: The created :class:`Factory` object.\n"
- ":rtype: :class:`Factory`");
-
-static PyObject *
-Factory_filter(Factory* self, PyObject *args)
-{
- PyObject *py_b;
- PyObject *py_a = NULL;
- Py_ssize_t py_a_len;
- Py_ssize_t py_b_len;
-
- if(!PyArg_ParseTuple(args, "O|O:filter", &py_b, &py_a))
- return NULL;
-
- if(!PySequence_Check(py_b) || (py_a != NULL && !PySequence_Check(py_a)))
- {
- PyErr_SetString(PyExc_TypeError, "Parameter is not a sequence!");
- return NULL;
- }
-
- py_a_len= py_a ? PySequence_Size(py_a) : 0;
- py_b_len= PySequence_Size(py_b);
-
- if(!py_b_len || ((py_a != NULL) && !py_a_len))
- {
- PyErr_SetString(PyExc_ValueError, "The sequence has to contain at least one value!");
- return NULL;
- }
-
- std::vector<float> a, b;
- PyObject *py_value;
- float value;
-
- for(Py_ssize_t i = 0; i < py_b_len; i++)
- {
- py_value = PySequence_GetItem(py_b, i);
- value= (float)PyFloat_AsDouble(py_value);
- Py_DECREF(py_value);
-
- if (value==-1.0f && PyErr_Occurred()) {
- return NULL;
- }
-
- b.push_back(value);
- }
-
- if(py_a)
- {
- for(Py_ssize_t i = 0; i < py_a_len; i++)
- {
- py_value = PySequence_GetItem(py_a, i);
- value= (float)PyFloat_AsDouble(py_value);
- Py_DECREF(py_value);
-
- if (value==-1.0f && PyErr_Occurred()) {
- return NULL;
- }
-
- a.push_back(value);
- }
-
- if(a[0] == 0)
- a[0] = 1;
- }
- else
- a.push_back(1);
-
- PyTypeObject* type = Py_TYPE(self);
- Factory *parent = (Factory*)type->tp_alloc(type, 0);
-
- if(parent != NULL)
- {
- Py_INCREF(self);
- parent->child_list = (PyObject *)self;
-
- try
- {
- parent->factory = new boost::shared_ptr<AUD_IFactory>(new AUD_IIRFilterFactory(*reinterpret_cast<boost::shared_ptr<AUD_IFactory>*>(self->factory), b, a));
- }
- catch(AUD_Exception& e)
- {
- Py_DECREF(parent);
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
- }
-
- return (PyObject *)parent;
-}
-
-static PyMethodDef Factory_methods[] = {
- {"sine", (PyCFunction)Factory_sine, METH_VARARGS | METH_CLASS,
- M_aud_Factory_sine_doc
- },
- {"file", (PyCFunction)Factory_file, METH_VARARGS | METH_CLASS,
- M_aud_Factory_file_doc
- },
- {"lowpass", (PyCFunction)Factory_lowpass, METH_VARARGS,
- M_aud_Factory_lowpass_doc
- },
- {"delay", (PyCFunction)Factory_delay, METH_VARARGS,
- M_aud_Factory_delay_doc
- },
- {"join", (PyCFunction)Factory_join, METH_O,
- M_aud_Factory_join_doc
- },
- {"highpass", (PyCFunction)Factory_highpass, METH_VARARGS,
- M_aud_Factory_highpass_doc
- },
- {"limit", (PyCFunction)Factory_limit, METH_VARARGS,
- M_aud_Factory_limit_doc
- },
- {"pitch", (PyCFunction)Factory_pitch, METH_VARARGS,
- M_aud_Factory_pitch_doc
- },
- {"volume", (PyCFunction)Factory_volume, METH_VARARGS,
- M_aud_Factory_volume_doc
- },
- {"fadein", (PyCFunction)Factory_fadein, METH_VARARGS,
- M_aud_Factory_fadein_doc
- },
- {"fadeout", (PyCFunction)Factory_fadeout, METH_VARARGS,
- M_aud_Factory_fadeout_doc
- },
- {"loop", (PyCFunction)Factory_loop, METH_VARARGS,
- M_aud_Factory_loop_doc
- },
- {"mix", (PyCFunction)Factory_mix, METH_O,
- M_aud_Factory_mix_doc
- },
- {"pingpong", (PyCFunction)Factory_pingpong, METH_NOARGS,
- M_aud_Factory_pingpong_doc
- },
- {"reverse", (PyCFunction)Factory_reverse, METH_NOARGS,
- M_aud_Factory_reverse_doc
- },
- {"buffer", (PyCFunction)Factory_buffer, METH_NOARGS,
- M_aud_Factory_buffer_doc
- },
- {"square", (PyCFunction)Factory_square, METH_VARARGS,
- M_aud_Factory_square_doc
- },
- {"filter", (PyCFunction)Factory_filter, METH_VARARGS,
- M_aud_Factory_filter_doc
- },
- {NULL} /* Sentinel */
-};
-
-PyDoc_STRVAR(M_aud_Factory_doc,
- "Factory objects are immutable and represent a sound that can be "
- "played simultaneously multiple times. They are called factories "
- "because they create reader objects internally that are used for "
- "playback.");
-
-static PyTypeObject FactoryType = {
- PyVarObject_HEAD_INIT(NULL, 0)
- "aud.Factory", /* tp_name */
- sizeof(Factory), /* tp_basicsize */
- 0, /* tp_itemsize */
- (destructor)Factory_dealloc, /* tp_dealloc */
- 0, /* tp_print */
- 0, /* tp_getattr */
- 0, /* tp_setattr */
- 0, /* tp_reserved */
- 0, /* tp_repr */
- 0, /* tp_as_number */
- 0, /* tp_as_sequence */
- 0, /* tp_as_mapping */
- 0, /* tp_hash */
- 0, /* tp_call */
- 0, /* tp_str */
- 0, /* tp_getattro */
- 0, /* tp_setattro */
- 0, /* tp_as_buffer */
- Py_TPFLAGS_DEFAULT, /* tp_flags */
- M_aud_Factory_doc, /* tp_doc */
- 0, /* tp_traverse */
- 0, /* tp_clear */
- 0, /* tp_richcompare */
- 0, /* tp_weaklistoffset */
- 0, /* tp_iter */
- 0, /* tp_iternext */
- Factory_methods, /* tp_methods */
- 0, /* tp_members */
- 0, /* tp_getset */
- 0, /* tp_base */
- 0, /* tp_dict */
- 0, /* tp_descr_get */
- 0, /* tp_descr_set */
- 0, /* tp_dictoffset */
- 0, /* tp_init */
- 0, /* tp_alloc */
- Factory_new, /* tp_new */
-};
-
-// ========== Handle ==================================================
-
-static void
-Handle_dealloc(Handle* self)
-{
- if(self->handle)
- delete reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle);
- Py_TYPE(self)->tp_free((PyObject *)self);
-}
-
-PyDoc_STRVAR(M_aud_Handle_pause_doc,
- "pause()\n\n"
- "Pauses playback.\n\n"
- ":return: Whether the action succeeded.\n"
- ":rtype: bool");
-
-static PyObject *
-Handle_pause(Handle *self)
-{
- try
- {
- return PyBool_FromLong((long)(*reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle))->pause());
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
-}
-
-PyDoc_STRVAR(M_aud_Handle_resume_doc,
- "resume()\n\n"
- "Resumes playback.\n\n"
- ":return: Whether the action succeeded.\n"
- ":rtype: bool");
-
-static PyObject *
-Handle_resume(Handle *self)
-{
- try
- {
- return PyBool_FromLong((long)(*reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle))->resume());
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
-}
-
-PyDoc_STRVAR(M_aud_Handle_stop_doc,
- "stop()\n\n"
- "Stops playback.\n\n"
- ":return: Whether the action succeeded.\n"
- ":rtype: bool\n\n"
- ".. note:: This makes the handle invalid.");
-
-static PyObject *
-Handle_stop(Handle *self)
-{
- try
- {
- return PyBool_FromLong((long)(*reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle))->stop());
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
-}
-
-static PyMethodDef Handle_methods[] = {
- {"pause", (PyCFunction)Handle_pause, METH_NOARGS,
- M_aud_Handle_pause_doc
- },
- {"resume", (PyCFunction)Handle_resume, METH_NOARGS,
- M_aud_Handle_resume_doc
- },
- {"stop", (PyCFunction)Handle_stop, METH_NOARGS,
- M_aud_Handle_stop_doc
- },
- {NULL} /* Sentinel */
-};
-
-PyDoc_STRVAR(M_aud_Handle_position_doc,
- "The playback position of the sound in seconds.");
-
-static PyObject *
-Handle_get_position(Handle *self, void* nothing)
-{
- try
- {
- return Py_BuildValue("f", (*reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle))->getPosition());
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
-}
-
-static int
-Handle_set_position(Handle *self, PyObject *args, void* nothing)
-{
- float position;
-
- if(!PyArg_Parse(args, "f:position", &position))
- return -1;
-
- try
- {
- if((*reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle))->seek(position))
- return 0;
- PyErr_SetString(AUDError, "Couldn't seek the sound!");
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Handle_keep_doc,
- "Whether the sound should be kept paused in the device when its "
- "end is reached.\n"
- "This can be used to seek the sound to some position and start "
- "playback again.\n\n"
- ".. warning:: If this is set to true and you forget stopping this "
- "equals a memory leak as the handle exists until the device is "
- "destroyed.");
-
-static PyObject *
-Handle_get_keep(Handle *self, void* nothing)
-{
- try
- {
- return PyBool_FromLong((long)(*reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle))->getKeep());
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
-}
-
-static int
-Handle_set_keep(Handle *self, PyObject *args, void* nothing)
-{
- if(!PyBool_Check(args))
- {
- PyErr_SetString(PyExc_TypeError, "keep is not a boolean!");
- return -1;
- }
-
- bool keep = args == Py_True;
-
- try
- {
- if((*reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle))->setKeep(keep))
- return 0;
- PyErr_SetString(AUDError, "Couldn't set keep of the sound!");
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Handle_status_doc,
- "Whether the sound is playing, paused or stopped (=invalid).");
-
-static PyObject *
-Handle_get_status(Handle *self, void* nothing)
-{
- try
- {
- return PyBool_FromLong((long)(*reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle))->getStatus());
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
-}
-
-PyDoc_STRVAR(M_aud_Handle_volume_doc,
- "The volume of the sound.");
-
-static PyObject *
-Handle_get_volume(Handle *self, void* nothing)
-{
- try
- {
- return Py_BuildValue("f", (*reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle))->getVolume());
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
-}
-
-static int
-Handle_set_volume(Handle *self, PyObject *args, void* nothing)
-{
- float volume;
-
- if(!PyArg_Parse(args, "f:volume", &volume))
- return -1;
-
- try
- {
- if((*reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle))->setVolume(volume))
- return 0;
- PyErr_SetString(AUDError, "Couldn't set the sound volume!");
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Handle_pitch_doc,
- "The pitch of the sound.");
-
-static PyObject *
-Handle_get_pitch(Handle *self, void* nothing)
-{
- try
- {
- return Py_BuildValue("f", (*reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle))->getPitch());
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
-}
-
-static int
-Handle_set_pitch(Handle *self, PyObject *args, void* nothing)
-{
- float pitch;
-
- if(!PyArg_Parse(args, "f:pitch", &pitch))
- return -1;
-
- try
- {
- if((*reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle))->setPitch(pitch))
- return 0;
- PyErr_SetString(AUDError, "Couldn't set the sound pitch!");
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Handle_loop_count_doc,
- "The (remaining) loop count of the sound. A negative value indicates infinity.");
-
-static PyObject *
-Handle_get_loop_count(Handle *self, void* nothing)
-{
- try
- {
- return Py_BuildValue("i", (*reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle))->getLoopCount());
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
-}
-
-static int
-Handle_set_loop_count(Handle *self, PyObject *args, void* nothing)
-{
- int loops;
-
- if(!PyArg_Parse(args, "i:loop_count", &loops))
- return -1;
-
- try
- {
- if((*reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle))->setLoopCount(loops))
- return 0;
- PyErr_SetString(AUDError, "Couldn't set the loop count!");
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Handle_location_doc,
- "The source's location in 3D space, a 3D tuple of floats.");
-
-static PyObject *
-Handle_get_location(Handle *self, void* nothing)
-{
- try
- {
- AUD_I3DHandle* handle = dynamic_cast<AUD_I3DHandle*>(reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle)->get());
- if(handle)
- {
- AUD_Vector3 v = handle->getSourceLocation();
- return Py_BuildValue("(fff)", v.x(), v.y(), v.z());
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- }
-
- return NULL;
-}
-
-static int
-Handle_set_location(Handle *self, PyObject *args, void* nothing)
-{
- float x, y, z;
-
- if(!PyArg_Parse(args, "(fff):location", &x, &y, &z))
- return -1;
-
- try
- {
- AUD_I3DHandle* handle = dynamic_cast<AUD_I3DHandle*>(reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle)->get());
- if(handle)
- {
- AUD_Vector3 location(x, y, z);
- if(handle->setSourceLocation(location))
- return 0;
- PyErr_SetString(AUDError, "Location couldn't be set!");
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Handle_velocity_doc,
- "The source's velocity in 3D space, a 3D tuple of floats.");
-
-static PyObject *
-Handle_get_velocity(Handle *self, void* nothing)
-{
- try
- {
- AUD_I3DHandle* handle = dynamic_cast<AUD_I3DHandle*>(reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle)->get());
- if(handle)
- {
- AUD_Vector3 v = handle->getSourceVelocity();
- return Py_BuildValue("(fff)", v.x(), v.y(), v.z());
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- }
-
- return NULL;
-}
-
-static int
-Handle_set_velocity(Handle *self, PyObject *args, void* nothing)
-{
- float x, y, z;
-
- if(!PyArg_Parse(args, "(fff):velocity", &x, &y, &z))
- return -1;
-
- try
- {
- AUD_I3DHandle* handle = dynamic_cast<AUD_I3DHandle*>(reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle)->get());
- if(handle)
- {
- AUD_Vector3 velocity(x, y, z);
- if(handle->setSourceVelocity(velocity))
- return 0;
- PyErr_SetString(AUDError, "Couldn't set the velocity!");
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Handle_orientation_doc,
- "The source's orientation in 3D space as quaternion, a 4 float tuple.");
-
-static PyObject *
-Handle_get_orientation(Handle *self, void* nothing)
-{
- try
- {
- AUD_I3DHandle* handle = dynamic_cast<AUD_I3DHandle*>(reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle)->get());
- if(handle)
- {
- AUD_Quaternion o = handle->getSourceOrientation();
- return Py_BuildValue("(ffff)", o.w(), o.x(), o.y(), o.z());
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- }
-
- return NULL;
-}
-
-static int
-Handle_set_orientation(Handle *self, PyObject *args, void* nothing)
-{
- float w, x, y, z;
-
- if(!PyArg_Parse(args, "(ffff):orientation", &w, &x, &y, &z))
- return -1;
-
- try
- {
- AUD_I3DHandle* handle = dynamic_cast<AUD_I3DHandle*>(reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle)->get());
- if(handle)
- {
- AUD_Quaternion orientation(w, x, y, z);
- if(handle->setSourceOrientation(orientation))
- return 0;
- PyErr_SetString(AUDError, "Couldn't set the orientation!");
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Handle_relative_doc,
- "Whether the source's location, velocity and orientation is relative or absolute to the listener.");
-
-static PyObject *
-Handle_get_relative(Handle *self, void* nothing)
-{
- try
- {
- AUD_I3DHandle* handle = dynamic_cast<AUD_I3DHandle*>(reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle)->get());
- if(handle)
- {
- return PyBool_FromLong((long)handle->isRelative());
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- }
-
- return NULL;
-}
-
-static int
-Handle_set_relative(Handle *self, PyObject *args, void* nothing)
-{
- if(!PyBool_Check(args))
- {
- PyErr_SetString(PyExc_TypeError, "Value is not a boolean!");
- return -1;
- }
-
- bool relative = (args == Py_True);
-
- try
- {
- AUD_I3DHandle* handle = dynamic_cast<AUD_I3DHandle*>(reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle)->get());
- if(handle)
- {
- if(handle->setRelative(relative))
- return 0;
- PyErr_SetString(AUDError, "Couldn't set the relativeness!");
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Handle_volume_minimum_doc,
- "The minimum volume of the source.\n\n"
- ".. seealso:: :attr:`Device.distance_model`");
-
-static PyObject *
-Handle_get_volume_minimum(Handle *self, void* nothing)
-{
- try
- {
- AUD_I3DHandle* handle = dynamic_cast<AUD_I3DHandle*>(reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle)->get());
- if(handle)
- {
- return Py_BuildValue("f", handle->getVolumeMinimum());
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- return NULL;
- }
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
-}
-
-static int
-Handle_set_volume_minimum(Handle *self, PyObject *args, void* nothing)
-{
- float volume;
-
- if(!PyArg_Parse(args, "f:volume_minimum", &volume))
- return -1;
-
- try
- {
- AUD_I3DHandle* handle = dynamic_cast<AUD_I3DHandle*>(reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle)->get());
- if(handle)
- {
- if(handle->setVolumeMinimum(volume))
- return 0;
- PyErr_SetString(AUDError, "Couldn't set the minimum volume!");
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Handle_volume_maximum_doc,
- "The maximum volume of the source.\n\n"
- ".. seealso:: :attr:`Device.distance_model`");
-
-static PyObject *
-Handle_get_volume_maximum(Handle *self, void* nothing)
-{
- try
- {
- AUD_I3DHandle* handle = dynamic_cast<AUD_I3DHandle*>(reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle)->get());
- if(handle)
- {
- return Py_BuildValue("f", handle->getVolumeMaximum());
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- return NULL;
- }
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
-}
-
-static int
-Handle_set_volume_maximum(Handle *self, PyObject *args, void* nothing)
-{
- float volume;
-
- if(!PyArg_Parse(args, "f:volume_maximum", &volume))
- return -1;
-
- try
- {
- AUD_I3DHandle* handle = dynamic_cast<AUD_I3DHandle*>(reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle)->get());
- if(handle)
- {
- if(handle->setVolumeMaximum(volume))
- return 0;
- PyErr_SetString(AUDError, "Couldn't set the maximum volume!");
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Handle_distance_reference_doc,
- "The reference distance of the source.\n"
- "At this distance the volume will be exactly :attr:`volume`.\n\n"
- ".. seealso:: :attr:`Device.distance_model`");
-
-static PyObject *
-Handle_get_distance_reference(Handle *self, void* nothing)
-{
- try
- {
- AUD_I3DHandle* handle = dynamic_cast<AUD_I3DHandle*>(reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle)->get());
- if(handle)
- {
- return Py_BuildValue("f", handle->getDistanceReference());
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- return NULL;
- }
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
-}
-
-static int
-Handle_set_distance_reference(Handle *self, PyObject *args, void* nothing)
-{
- float distance;
-
- if(!PyArg_Parse(args, "f:distance_reference", &distance))
- return -1;
-
- try
- {
- AUD_I3DHandle* handle = dynamic_cast<AUD_I3DHandle*>(reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle)->get());
- if(handle)
- {
- if(handle->setDistanceReference(distance))
- return 0;
- PyErr_SetString(AUDError, "Couldn't set the reference distance!");
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Handle_distance_maximum_doc,
- "The maximum distance of the source.\n"
- "If the listener is further away the source volume will be 0.\n\n"
- ".. seealso:: :attr:`Device.distance_model`");
-
-static PyObject *
-Handle_get_distance_maximum(Handle *self, void* nothing)
-{
- try
- {
- AUD_I3DHandle* handle = dynamic_cast<AUD_I3DHandle*>(reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle)->get());
- if(handle)
- {
- return Py_BuildValue("f", handle->getDistanceMaximum());
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- return NULL;
- }
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
-}
-
-static int
-Handle_set_distance_maximum(Handle *self, PyObject *args, void* nothing)
-{
- float distance;
-
- if(!PyArg_Parse(args, "f:distance_maximum", &distance))
- return -1;
-
- try
- {
- AUD_I3DHandle* handle = dynamic_cast<AUD_I3DHandle*>(reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle)->get());
- if(handle)
- {
- if(handle->setDistanceMaximum(distance))
- return 0;
- PyErr_SetString(AUDError, "Couldn't set the maximum distance!");
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Handle_attenuation_doc,
- "This factor is used for distance based attenuation of the "
- "source.\n\n"
- ".. seealso:: :attr:`Device.distance_model`");
-
-static PyObject *
-Handle_get_attenuation(Handle *self, void* nothing)
-{
- try
- {
- AUD_I3DHandle* handle = dynamic_cast<AUD_I3DHandle*>(reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle)->get());
- if(handle)
- {
- return Py_BuildValue("f", handle->getAttenuation());
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- return NULL;
- }
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
-}
-
-static int
-Handle_set_attenuation(Handle *self, PyObject *args, void* nothing)
-{
- float factor;
-
- if(!PyArg_Parse(args, "f:attenuation", &factor))
- return -1;
-
- try
- {
- AUD_I3DHandle* handle = dynamic_cast<AUD_I3DHandle*>(reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle)->get());
- if(handle)
- {
- if(handle->setAttenuation(factor))
- return 0;
- PyErr_SetString(AUDError, "Couldn't set the attenuation!");
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Handle_cone_angle_inner_doc,
- "The opening angle of the inner cone of the source. If the cone "
- "values of a source are set there are two (audible) cones with "
- "the apex at the :attr:`location` of the source and with infinite "
- "height, heading in the direction of the source's "
- ":attr:`orientation`.\n"
- "In the inner cone the volume is normal. Outside the outer cone "
- "the volume will be :attr:`cone_volume_outer` and in the area "
- "between the volume will be interpolated linearly.");
-
-static PyObject *
-Handle_get_cone_angle_inner(Handle *self, void* nothing)
-{
- try
- {
- AUD_I3DHandle* handle = dynamic_cast<AUD_I3DHandle*>(reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle)->get());
- if(handle)
- {
- return Py_BuildValue("f", handle->getConeAngleInner());
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- return NULL;
- }
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
-}
-
-static int
-Handle_set_cone_angle_inner(Handle *self, PyObject *args, void* nothing)
-{
- float angle;
-
- if(!PyArg_Parse(args, "f:cone_angle_inner", &angle))
- return -1;
-
- try
- {
- AUD_I3DHandle* handle = dynamic_cast<AUD_I3DHandle*>(reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle)->get());
- if(handle)
- {
- if(handle->setConeAngleInner(angle))
- return 0;
- PyErr_SetString(AUDError, "Couldn't set the cone inner angle!");
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Handle_cone_angle_outer_doc,
- "The opening angle of the outer cone of the source.\n\n"
- ".. seealso:: :attr:`cone_angle_inner`");
-
-static PyObject *
-Handle_get_cone_angle_outer(Handle *self, void* nothing)
-{
- try
- {
- AUD_I3DHandle* handle = dynamic_cast<AUD_I3DHandle*>(reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle)->get());
- if(handle)
- {
- return Py_BuildValue("f", handle->getConeAngleOuter());
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- return NULL;
- }
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
-}
-
-static int
-Handle_set_cone_angle_outer(Handle *self, PyObject *args, void* nothing)
-{
- float angle;
-
- if(!PyArg_Parse(args, "f:cone_angle_outer", &angle))
- return -1;
-
- try
- {
- AUD_I3DHandle* handle = dynamic_cast<AUD_I3DHandle*>(reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle)->get());
- if(handle)
- {
- if(handle->setConeAngleOuter(angle))
- return 0;
- PyErr_SetString(AUDError, "Couldn't set the cone outer angle!");
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Handle_cone_volume_outer_doc,
- "The volume outside the outer cone of the source.\n\n"
- ".. seealso:: :attr:`cone_angle_inner`");
-
-static PyObject *
-Handle_get_cone_volume_outer(Handle *self, void* nothing)
-{
- try
- {
- AUD_I3DHandle* handle = dynamic_cast<AUD_I3DHandle*>(reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle)->get());
- if(handle)
- {
- return Py_BuildValue("f", handle->getConeVolumeOuter());
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- return NULL;
- }
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
-}
-
-static int
-Handle_set_cone_volume_outer(Handle *self, PyObject *args, void* nothing)
-{
- float volume;
-
- if(!PyArg_Parse(args, "f:cone_volume_outer", &volume))
- return -1;
-
- try
- {
- AUD_I3DHandle* handle = dynamic_cast<AUD_I3DHandle*>(reinterpret_cast<boost::shared_ptr<AUD_IHandle>*>(self->handle)->get());
- if(handle)
- {
- if(handle->setConeVolumeOuter(volume))
- return 0;
- PyErr_SetString(AUDError, "Couldn't set the cone outer volume!");
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- }
-
- return -1;
-}
-
-static PyGetSetDef Handle_properties[] = {
- {(char*)"position", (getter)Handle_get_position, (setter)Handle_set_position,
- M_aud_Handle_position_doc, NULL },
- {(char*)"keep", (getter)Handle_get_keep, (setter)Handle_set_keep,
- M_aud_Handle_keep_doc, NULL },
- {(char*)"status", (getter)Handle_get_status, NULL,
- M_aud_Handle_status_doc, NULL },
- {(char*)"volume", (getter)Handle_get_volume, (setter)Handle_set_volume,
- M_aud_Handle_volume_doc, NULL },
- {(char*)"pitch", (getter)Handle_get_pitch, (setter)Handle_set_pitch,
- M_aud_Handle_pitch_doc, NULL },
- {(char*)"loop_count", (getter)Handle_get_loop_count, (setter)Handle_set_loop_count,
- M_aud_Handle_loop_count_doc, NULL },
- {(char*)"location", (getter)Handle_get_location, (setter)Handle_set_location,
- M_aud_Handle_location_doc, NULL },
- {(char*)"velocity", (getter)Handle_get_velocity, (setter)Handle_set_velocity,
- M_aud_Handle_velocity_doc, NULL },
- {(char*)"orientation", (getter)Handle_get_orientation, (setter)Handle_set_orientation,
- M_aud_Handle_orientation_doc, NULL },
- {(char*)"relative", (getter)Handle_get_relative, (setter)Handle_set_relative,
- M_aud_Handle_relative_doc, NULL },
- {(char*)"volume_minimum", (getter)Handle_get_volume_minimum, (setter)Handle_set_volume_minimum,
- M_aud_Handle_volume_minimum_doc, NULL },
- {(char*)"volume_maximum", (getter)Handle_get_volume_maximum, (setter)Handle_set_volume_maximum,
- M_aud_Handle_volume_maximum_doc, NULL },
- {(char*)"distance_reference", (getter)Handle_get_distance_reference, (setter)Handle_set_distance_reference,
- M_aud_Handle_distance_reference_doc, NULL },
- {(char*)"distance_maximum", (getter)Handle_get_distance_maximum, (setter)Handle_set_distance_maximum,
- M_aud_Handle_distance_maximum_doc, NULL },
- {(char*)"attenuation", (getter)Handle_get_attenuation, (setter)Handle_set_attenuation,
- M_aud_Handle_attenuation_doc, NULL },
- {(char*)"cone_angle_inner", (getter)Handle_get_cone_angle_inner, (setter)Handle_set_cone_angle_inner,
- M_aud_Handle_cone_angle_inner_doc, NULL },
- {(char*)"cone_angle_outer", (getter)Handle_get_cone_angle_outer, (setter)Handle_set_cone_angle_outer,
- M_aud_Handle_cone_angle_outer_doc, NULL },
- {(char*)"cone_volume_outer", (getter)Handle_get_cone_volume_outer, (setter)Handle_set_cone_volume_outer,
- M_aud_Handle_cone_volume_outer_doc, NULL },
- {NULL} /* Sentinel */
-};
-
-PyDoc_STRVAR(M_aud_Handle_doc,
- "Handle objects are playback handles that can be used to control "
- "playback of a sound. If a sound is played back multiple times "
- "then there are as many handles.");
-
-static PyTypeObject HandleType = {
- PyVarObject_HEAD_INIT(NULL, 0)
- "aud.Handle", /* tp_name */
- sizeof(Handle), /* tp_basicsize */
- 0, /* tp_itemsize */
- (destructor)Handle_dealloc,/* tp_dealloc */
- 0, /* tp_print */
- 0, /* tp_getattr */
- 0, /* tp_setattr */
- 0, /* tp_reserved */
- 0, /* tp_repr */
- 0, /* tp_as_number */
- 0, /* tp_as_sequence */
- 0, /* tp_as_mapping */
- 0, /* tp_hash */
- 0, /* tp_call */
- 0, /* tp_str */
- 0, /* tp_getattro */
- 0, /* tp_setattro */
- 0, /* tp_as_buffer */
- Py_TPFLAGS_DEFAULT, /* tp_flags */
- M_aud_Handle_doc, /* tp_doc */
- 0, /* tp_traverse */
- 0, /* tp_clear */
- 0, /* tp_richcompare */
- 0, /* tp_weaklistoffset */
- 0, /* tp_iter */
- 0, /* tp_iternext */
- Handle_methods, /* tp_methods */
- 0, /* tp_members */
- Handle_properties, /* tp_getset */
- 0, /* tp_base */
- 0, /* tp_dict */
- 0, /* tp_descr_get */
- 0, /* tp_descr_set */
- 0, /* tp_dictoffset */
- 0, /* tp_init */
- 0, /* tp_alloc */
- 0, /* tp_new */
-};
-
-// ========== Device ==================================================
-
-static void
-Device_dealloc(Device* self)
-{
- if(self->device)
- delete reinterpret_cast<boost::shared_ptr<AUD_IDevice>*>(self->device);
- Py_TYPE(self)->tp_free((PyObject *)self);
-}
-
-static PyObject *
-Device_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
-{
- Device *self;
-
- static const char *kwlist[] = {"type", "rate", "channels", "format", "buffer_size", "name", NULL};
- int device;
- double rate = AUD_RATE_48000;
- int channels = AUD_CHANNELS_STEREO;
- int format = AUD_FORMAT_FLOAT32;
- int buffersize = AUD_DEFAULT_BUFFER_SIZE;
- const char* name = "Audaspace";
-
- if(!PyArg_ParseTupleAndKeywords(args, kwds, "i|diiis:Device", const_cast<char**>(kwlist),
- &device, &rate, &channels, &format, &buffersize, &name))
- return NULL;
-
- if(buffersize < 128)
- {
- PyErr_SetString(PyExc_ValueError, "buffer_size must be greater than 127!");
- return NULL;
- }
-
- self = (Device*)type->tp_alloc(type, 0);
- if(self != NULL)
- {
- AUD_DeviceSpecs specs;
- specs.channels = (AUD_Channels)channels;
- specs.format = (AUD_SampleFormat)format;
- specs.rate = (AUD_SampleRate)rate;
-
- self->device = NULL;
-
- try
- {
- switch(device)
- {
- case AUD_DEVICE_NULL:
- (void)specs; /* quiet warning when others disabled */
- self->device = new boost::shared_ptr<AUD_IDevice>(new AUD_NULLDevice());
- break;
- case AUD_DEVICE_OPENAL:
-#ifdef WITH_OPENAL
- self->device = new boost::shared_ptr<AUD_IDevice>(new AUD_OpenALDevice(specs, buffersize));
-#endif
- break;
- case AUD_DEVICE_SDL:
-#ifdef WITH_SDL
- self->device = new boost::shared_ptr<AUD_IDevice>(new AUD_SDLDevice(specs, buffersize));
-#endif
- break;
- case AUD_DEVICE_JACK:
-#ifdef WITH_JACK
- self->device = new boost::shared_ptr<AUD_IDevice>(new AUD_JackDevice(name, specs, buffersize));
-#endif
- break;
- case AUD_DEVICE_READ:
- break;
- }
-
- }
- catch(AUD_Exception& e)
- {
- Py_DECREF(self);
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
-
- if(!self->device)
- {
- Py_DECREF(self);
- PyErr_SetString(AUDError, "Unsupported device type!");
- return NULL;
- }
- }
-
- return (PyObject *)self;
-}
-
-PyDoc_STRVAR(M_aud_Device_play_doc,
- "play(factory, keep=False)\n\n"
- "Plays a factory.\n\n"
- ":arg factory: The factory to play.\n"
- ":type factory: :class:`Factory`\n"
- ":arg keep: See :attr:`Handle.keep`.\n"
- ":type keep: bool\n"
- ":return: The playback handle with which playback can be "
- "controlled with.\n"
- ":rtype: :class:`Handle`");
-
-static PyObject *
-Device_play(Device *self, PyObject *args, PyObject *kwds)
-{
- PyObject *object;
- PyObject *keepo = NULL;
-
- bool keep = false;
-
- static const char *kwlist[] = {"factory", "keep", NULL};
-
- if(!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:play", const_cast<char**>(kwlist), &object, &keepo))
- return NULL;
-
- if(!PyObject_TypeCheck(object, &FactoryType))
- {
- PyErr_SetString(PyExc_TypeError, "Object is not of type Factory!");
- return NULL;
- }
-
- if(keepo != NULL)
- {
- if(!PyBool_Check(keepo))
- {
- PyErr_SetString(PyExc_TypeError, "keep is not a boolean!");
- return NULL;
- }
-
- keep = keepo == Py_True;
- }
-
- Factory* sound = (Factory*)object;
- Handle *handle;
-
- handle = (Handle*)HandleType.tp_alloc(&HandleType, 0);
- if(handle != NULL)
- {
- try
- {
- handle->handle = new boost::shared_ptr<AUD_IHandle>((*reinterpret_cast<boost::shared_ptr<AUD_IDevice>*>(self->device))->play(*reinterpret_cast<boost::shared_ptr<AUD_IFactory>*>(sound->factory), keep));
- }
- catch(AUD_Exception& e)
- {
- Py_DECREF(handle);
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
- }
-
- return (PyObject *)handle;
-}
-
-PyDoc_STRVAR(M_aud_Device_stopAll_doc,
- "stopAll()\n\n"
- "Stops all playing and paused sounds.");
-
-static PyObject *
-Device_stopAll(Device *self)
-{
- try
- {
- (*reinterpret_cast<boost::shared_ptr<AUD_IDevice>*>(self->device))->stopAll();
- Py_RETURN_NONE;
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
-}
-
-PyDoc_STRVAR(M_aud_Device_lock_doc,
- "lock()\n\n"
- "Locks the device so that it's guaranteed, that no samples are "
- "read from the streams until :meth:`unlock` is called.\n"
- "This is useful if you want to do start/stop/pause/resume some "
- "sounds at the same time.\n\n"
- ".. note:: The device has to be unlocked as often as locked to be "
- "able to continue playback.\n\n"
- ".. warning:: Make sure the time between locking and unlocking is "
- "as short as possible to avoid clicks.");
-
-static PyObject *
-Device_lock(Device *self)
-{
- try
- {
- (*reinterpret_cast<boost::shared_ptr<AUD_IDevice>*>(self->device))->lock();
- Py_RETURN_NONE;
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
-}
-
-PyDoc_STRVAR(M_aud_Device_unlock_doc,
- "unlock()\n\n"
- "Unlocks the device after a lock call, see :meth:`lock` for "
- "details.");
-
-static PyObject *
-Device_unlock(Device *self)
-{
- try
- {
- (*reinterpret_cast<boost::shared_ptr<AUD_IDevice>*>(self->device))->unlock();
- Py_RETURN_NONE;
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
-}
-
-static PyMethodDef Device_methods[] = {
- {"play", (PyCFunction)Device_play, METH_VARARGS | METH_KEYWORDS,
- M_aud_Device_play_doc
- },
- {"stopAll", (PyCFunction)Device_stopAll, METH_NOARGS,
- M_aud_Device_stopAll_doc
- },
- {"lock", (PyCFunction)Device_lock, METH_NOARGS,
- M_aud_Device_lock_doc
- },
- {"unlock", (PyCFunction)Device_unlock, METH_NOARGS,
- M_aud_Device_unlock_doc
- },
- {NULL} /* Sentinel */
-};
-
-PyDoc_STRVAR(M_aud_Device_rate_doc,
- "The sampling rate of the device in Hz.");
-
-static PyObject *
-Device_get_rate(Device *self, void* nothing)
-{
- try
- {
- AUD_DeviceSpecs specs = (*reinterpret_cast<boost::shared_ptr<AUD_IDevice>*>(self->device))->getSpecs();
- return Py_BuildValue("d", specs.rate);
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
-}
-
-PyDoc_STRVAR(M_aud_Device_format_doc,
- "The native sample format of the device.");
-
-static PyObject *
-Device_get_format(Device *self, void* nothing)
-{
- try
- {
- AUD_DeviceSpecs specs = (*reinterpret_cast<boost::shared_ptr<AUD_IDevice>*>(self->device))->getSpecs();
- return Py_BuildValue("i", specs.format);
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
-}
-
-PyDoc_STRVAR(M_aud_Device_channels_doc,
- "The channel count of the device.");
-
-static PyObject *
-Device_get_channels(Device *self, void* nothing)
-{
- try
- {
- AUD_DeviceSpecs specs = (*reinterpret_cast<boost::shared_ptr<AUD_IDevice>*>(self->device))->getSpecs();
- return Py_BuildValue("i", specs.channels);
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
-}
-
-PyDoc_STRVAR(M_aud_Device_volume_doc,
- "The overall volume of the device.");
-
-static PyObject *
-Device_get_volume(Device *self, void* nothing)
-{
- try
- {
- return Py_BuildValue("f", (*reinterpret_cast<boost::shared_ptr<AUD_IDevice>*>(self->device))->getVolume());
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
-}
-
-static int
-Device_set_volume(Device *self, PyObject *args, void* nothing)
-{
- float volume;
-
- if(!PyArg_Parse(args, "f:volume", &volume))
- return -1;
-
- try
- {
- (*reinterpret_cast<boost::shared_ptr<AUD_IDevice>*>(self->device))->setVolume(volume);
- return 0;
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- return -1;
- }
-}
-
-PyDoc_STRVAR(M_aud_Device_listener_location_doc,
- "The listeners's location in 3D space, a 3D tuple of floats.");
-
-static PyObject *
-Device_get_listener_location(Device *self, void* nothing)
-{
- try
- {
- AUD_I3DDevice* device = dynamic_cast<AUD_I3DDevice*>(reinterpret_cast<boost::shared_ptr<AUD_IDevice>*>(self->device)->get());
- if(device)
- {
- AUD_Vector3 v = device->getListenerLocation();
- return Py_BuildValue("(fff)", v.x(), v.y(), v.z());
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- }
-
- return NULL;
-}
-
-static int
-Device_set_listener_location(Device *self, PyObject *args, void* nothing)
-{
- float x, y, z;
-
- if(!PyArg_Parse(args, "(fff):listener_location", &x, &y, &z))
- return -1;
-
- try
- {
- AUD_I3DDevice* device = dynamic_cast<AUD_I3DDevice*>(reinterpret_cast<boost::shared_ptr<AUD_IDevice>*>(self->device)->get());
- if(device)
- {
- AUD_Vector3 location(x, y, z);
- device->setListenerLocation(location);
- return 0;
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Device_listener_velocity_doc,
- "The listener's velocity in 3D space, a 3D tuple of floats.");
-
-static PyObject *
-Device_get_listener_velocity(Device *self, void* nothing)
-{
- try
- {
- AUD_I3DDevice* device = dynamic_cast<AUD_I3DDevice*>(reinterpret_cast<boost::shared_ptr<AUD_IDevice>*>(self->device)->get());
- if(device)
- {
- AUD_Vector3 v = device->getListenerVelocity();
- return Py_BuildValue("(fff)", v.x(), v.y(), v.z());
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- }
-
- return NULL;
-}
-
-static int
-Device_set_listener_velocity(Device *self, PyObject *args, void* nothing)
-{
- float x, y, z;
-
- if(!PyArg_Parse(args, "(fff):listener_velocity", &x, &y, &z))
- return -1;
-
- try
- {
- AUD_I3DDevice* device = dynamic_cast<AUD_I3DDevice*>(reinterpret_cast<boost::shared_ptr<AUD_IDevice>*>(self->device)->get());
- if(device)
- {
- AUD_Vector3 velocity(x, y, z);
- device->setListenerVelocity(velocity);
- return 0;
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Device_listener_orientation_doc,
- "The listener's orientation in 3D space as quaternion, a 4 float tuple.");
-
-static PyObject *
-Device_get_listener_orientation(Device *self, void* nothing)
-{
- try
- {
- AUD_I3DDevice* device = dynamic_cast<AUD_I3DDevice*>(reinterpret_cast<boost::shared_ptr<AUD_IDevice>*>(self->device)->get());
- if(device)
- {
- AUD_Quaternion o = device->getListenerOrientation();
- return Py_BuildValue("(ffff)", o.w(), o.x(), o.y(), o.z());
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- }
-
- return NULL;
-}
-
-static int
-Device_set_listener_orientation(Device *self, PyObject *args, void* nothing)
-{
- float w, x, y, z;
-
- if(!PyArg_Parse(args, "(ffff):listener_orientation", &w, &x, &y, &z))
- return -1;
-
- try
- {
- AUD_I3DDevice* device = dynamic_cast<AUD_I3DDevice*>(reinterpret_cast<boost::shared_ptr<AUD_IDevice>*>(self->device)->get());
- if(device)
- {
- AUD_Quaternion orientation(w, x, y, z);
- device->setListenerOrientation(orientation);
- return 0;
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Device_speed_of_sound_doc,
- "The speed of sound of the device.\n"
- "The speed of sound in air is typically 343.3 m/s.");
-
-static PyObject *
-Device_get_speed_of_sound(Device *self, void* nothing)
-{
- try
- {
- AUD_I3DDevice* device = dynamic_cast<AUD_I3DDevice*>(reinterpret_cast<boost::shared_ptr<AUD_IDevice>*>(self->device)->get());
- if(device)
- {
- return Py_BuildValue("f", device->getSpeedOfSound());
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- return NULL;
- }
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
-}
-
-static int
-Device_set_speed_of_sound(Device *self, PyObject *args, void* nothing)
-{
- float speed;
-
- if(!PyArg_Parse(args, "f:speed_of_sound", &speed))
- return -1;
-
- try
- {
- AUD_I3DDevice* device = dynamic_cast<AUD_I3DDevice*>(reinterpret_cast<boost::shared_ptr<AUD_IDevice>*>(self->device)->get());
- if(device)
- {
- device->setSpeedOfSound(speed);
- return 0;
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Device_doppler_factor_doc,
- "The doppler factor of the device.\n"
- "This factor is a scaling factor for the velocity vectors in "
- "doppler calculation. So a value bigger than 1 will exaggerate "
- "the effect as it raises the velocity.");
-
-static PyObject *
-Device_get_doppler_factor(Device *self, void* nothing)
-{
- try
- {
- AUD_I3DDevice* device = dynamic_cast<AUD_I3DDevice*>(reinterpret_cast<boost::shared_ptr<AUD_IDevice>*>(self->device)->get());
- if(device)
- {
- return Py_BuildValue("f", device->getDopplerFactor());
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- return NULL;
- }
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
-}
-
-static int
-Device_set_doppler_factor(Device *self, PyObject *args, void* nothing)
-{
- float factor;
-
- if(!PyArg_Parse(args, "f:doppler_factor", &factor))
- return -1;
-
- try
- {
- AUD_I3DDevice* device = dynamic_cast<AUD_I3DDevice*>(reinterpret_cast<boost::shared_ptr<AUD_IDevice>*>(self->device)->get());
- if(device)
- {
- device->setDopplerFactor(factor);
- return 0;
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- }
-
- return -1;
-}
-
-PyDoc_STRVAR(M_aud_Device_distance_model_doc,
- "The distance model of the device.\n\n"
- ".. seealso:: `OpenAL documentation <https://www.openal.org/documentation>`");
-
-static PyObject *
-Device_get_distance_model(Device *self, void* nothing)
-{
- try
- {
- AUD_I3DDevice* device = dynamic_cast<AUD_I3DDevice*>(reinterpret_cast<boost::shared_ptr<AUD_IDevice>*>(self->device)->get());
- if(device)
- {
- return Py_BuildValue("i", int(device->getDistanceModel()));
- }
- else
- {
- PyErr_SetString(AUDError, device_not_3d_error);
- return NULL;
- }
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- return NULL;
- }
-}
-
-static int
-Device_set_distance_model(Device *self, PyObject *args, void* nothing)
-{
- int model;
-
- if(!PyArg_Parse(args, "i:distance_model", &model))
- return -1;
-
- try
- {
- AUD_I3DDevice* device = dynamic_cast<AUD_I3DDevice*>(reinterpret_cast<boost::shared_ptr<AUD_IDevice>*>(self->device)->get());
- if(device)
- {
- device->setDistanceModel(AUD_DistanceModel(model));
- return 0;
- }
- else
- PyErr_SetString(AUDError, device_not_3d_error);
- }
- catch(AUD_Exception& e)
- {
- PyErr_SetString(AUDError, e.str);
- }
-
- return -1;
-}
-
-static PyGetSetDef Device_properties[] = {
- {(char*)"rate", (getter)Device_get_rate, NULL,
- M_aud_Device_rate_doc, NULL },
- {(char*)"format", (getter)Device_get_format, NULL,
- M_aud_Device_format_doc, NULL },
- {(char*)"channels", (getter)Device_get_channels, NULL,
- M_aud_Device_channels_doc, NULL },
- {(char*)"volume", (getter)Device_get_volume, (setter)Device_set_volume,
- M_aud_Device_volume_doc, NULL },
- {(char*)"listener_location", (getter)Device_get_listener_location, (setter)Device_set_listener_location,
- M_aud_Device_listener_location_doc, NULL },
- {(char*)"listener_velocity", (getter)Device_get_listener_velocity, (setter)Device_set_listener_velocity,
- M_aud_Device_listener_velocity_doc, NULL },
- {(char*)"listener_orientation", (getter)Device_get_listener_orientation, (setter)Device_set_listener_orientation,
- M_aud_Device_listener_orientation_doc, NULL },
- {(char*)"speed_of_sound", (getter)Device_get_speed_of_sound, (setter)Device_set_speed_of_sound,
- M_aud_Device_speed_of_sound_doc, NULL },
- {(char*)"doppler_factor", (getter)Device_get_doppler_factor, (setter)Device_set_doppler_factor,
- M_aud_Device_doppler_factor_doc, NULL },
- {(char*)"distance_model", (getter)Device_get_distance_model, (setter)Device_set_distance_model,
- M_aud_Device_distance_model_doc, NULL },
- {NULL} /* Sentinel */
-};
-
-PyDoc_STRVAR(M_aud_Device_doc,
- "Device objects represent an audio output backend like OpenAL or "
- "SDL, but might also represent a file output or RAM buffer "
- "output.");
-
-static PyTypeObject DeviceType = {
- PyVarObject_HEAD_INIT(NULL, 0)
- "aud.Device", /* tp_name */
- sizeof(Device), /* tp_basicsize */
- 0, /* tp_itemsize */
- (destructor)Device_dealloc,/* tp_dealloc */
- 0, /* tp_print */
- 0, /* tp_getattr */
- 0, /* tp_setattr */
- 0, /* tp_reserved */
- 0, /* tp_repr */
- 0, /* tp_as_number */
- 0, /* tp_as_sequence */
- 0, /* tp_as_mapping */
- 0, /* tp_hash */
- 0, /* tp_call */
- 0, /* tp_str */
- 0, /* tp_getattro */
- 0, /* tp_setattro */
- 0, /* tp_as_buffer */
- Py_TPFLAGS_DEFAULT, /* tp_flags */
- M_aud_Device_doc, /* tp_doc */
- 0, /* tp_traverse */
- 0, /* tp_clear */
- 0, /* tp_richcompare */
- 0, /* tp_weaklistoffset */
- 0, /* tp_iter */
- 0, /* tp_iternext */
- Device_methods, /* tp_methods */
- 0, /* tp_members */
- Device_properties, /* tp_getset */
- 0, /* tp_base */
- 0, /* tp_dict */
- 0, /* tp_descr_get */
- 0, /* tp_descr_set */
- 0, /* tp_dictoffset */
- 0, /* tp_init */
- 0, /* tp_alloc */
- Device_new, /* tp_new */
-};
-
-PyObject *
-Device_empty()
-{
- return DeviceType.tp_alloc(&DeviceType, 0);
-}
-
-PyObject *
-Factory_empty()
-{
- return FactoryType.tp_alloc(&FactoryType, 0);
-}
-
-Factory*
-checkFactory(PyObject *factory)
-{
- if(!PyObject_TypeCheck(factory, &FactoryType))
- {
- PyErr_SetString(PyExc_TypeError, "Object is not of type Factory!");
- return NULL;
- }
-
- return (Factory*)factory;
-}
-
-
-// ====================================================================
-
-PyDoc_STRVAR(M_aud_doc,
- "This module provides access to the audaspace audio library.");
-
-static struct PyModuleDef audmodule = {
- PyModuleDef_HEAD_INIT,
- "aud", /* name of module */
- M_aud_doc, /* module documentation */
- -1, /* size of per-interpreter state of the module,
- or -1 if the module keeps state in global variables. */
- NULL, NULL, NULL, NULL, NULL
-};
-
-PyMODINIT_FUNC
-PyInit_aud(void)
-{
- PyObject *m;
-
- if(PyType_Ready(&FactoryType) < 0)
- return NULL;
-
- if(PyType_Ready(&DeviceType) < 0)
- return NULL;
-
- if(PyType_Ready(&HandleType) < 0)
- return NULL;
-
- m = PyModule_Create(&audmodule);
- if(m == NULL)
- return NULL;
-
- Py_INCREF(&FactoryType);
- PyModule_AddObject(m, "Factory", (PyObject *)&FactoryType);
-
- Py_INCREF(&DeviceType);
- PyModule_AddObject(m, "Device", (PyObject *)&DeviceType);
-
- Py_INCREF(&HandleType);
- PyModule_AddObject(m, "Handle", (PyObject *)&HandleType);
-
- AUDError = PyErr_NewException("aud.error", NULL, NULL);
- Py_INCREF(AUDError);
- PyModule_AddObject(m, "error", AUDError);
-
- // device constants
- PY_MODULE_ADD_CONSTANT(m, AUD_DEVICE_NULL);
- PY_MODULE_ADD_CONSTANT(m, AUD_DEVICE_OPENAL);
- PY_MODULE_ADD_CONSTANT(m, AUD_DEVICE_SDL);
- PY_MODULE_ADD_CONSTANT(m, AUD_DEVICE_JACK);
- //PY_MODULE_ADD_CONSTANT(m, AUD_DEVICE_READ);
- // format constants
- PY_MODULE_ADD_CONSTANT(m, AUD_FORMAT_FLOAT32);
- PY_MODULE_ADD_CONSTANT(m, AUD_FORMAT_FLOAT64);
- PY_MODULE_ADD_CONSTANT(m, AUD_FORMAT_INVALID);
- PY_MODULE_ADD_CONSTANT(m, AUD_FORMAT_S16);
- PY_MODULE_ADD_CONSTANT(m, AUD_FORMAT_S24);
- PY_MODULE_ADD_CONSTANT(m, AUD_FORMAT_S32);
- PY_MODULE_ADD_CONSTANT(m, AUD_FORMAT_U8);
- // status constants
- PY_MODULE_ADD_CONSTANT(m, AUD_STATUS_INVALID);
- PY_MODULE_ADD_CONSTANT(m, AUD_STATUS_PAUSED);
- PY_MODULE_ADD_CONSTANT(m, AUD_STATUS_PLAYING);
- PY_MODULE_ADD_CONSTANT(m, AUD_STATUS_STOPPED);
- // distance model constants
- PY_MODULE_ADD_CONSTANT(m, AUD_DISTANCE_MODEL_EXPONENT);
- PY_MODULE_ADD_CONSTANT(m, AUD_DISTANCE_MODEL_EXPONENT_CLAMPED);
- PY_MODULE_ADD_CONSTANT(m, AUD_DISTANCE_MODEL_INVERSE);
- PY_MODULE_ADD_CONSTANT(m, AUD_DISTANCE_MODEL_INVERSE_CLAMPED);
- PY_MODULE_ADD_CONSTANT(m, AUD_DISTANCE_MODEL_LINEAR);
- PY_MODULE_ADD_CONSTANT(m, AUD_DISTANCE_MODEL_LINEAR_CLAMPED);
- PY_MODULE_ADD_CONSTANT(m, AUD_DISTANCE_MODEL_INVALID);
-
- return m;
-}
diff --git a/intern/audaspace/Python/AUD_PyAPI.h b/intern/audaspace/Python/AUD_PyAPI.h
deleted file mode 100644
index 0183a2df6b2..00000000000
--- a/intern/audaspace/Python/AUD_PyAPI.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/Python/AUD_PyAPI.h
- * \ingroup audpython
- */
-
-
-#ifndef __AUD_PYAPI_H__
-#define __AUD_PYAPI_H__
-
-#include "Python.h"
-
-#ifdef __cplusplus
-extern "C" {
-#else
-typedef void AUD_IFactory;
-typedef void AUD_IDevice;
-typedef void AUD_IHandle;
-#endif
-
-typedef void AUD_Reference_AUD_IFactory;
-typedef void AUD_Reference_AUD_IDevice;
-typedef void AUD_Reference_AUD_IHandle;
-
-typedef struct {
- PyObject_HEAD
- PyObject *child_list;
- AUD_Reference_AUD_IFactory* factory;
-} Factory;
-
-typedef struct {
- PyObject_HEAD
- AUD_Reference_AUD_IHandle* handle;
-} Handle;
-
-typedef struct {
- PyObject_HEAD
- AUD_Reference_AUD_IDevice* device;
-} Device;
-
-PyMODINIT_FUNC
-PyInit_aud(void);
-
-extern PyObject *Device_empty();
-extern PyObject *Factory_empty();
-extern Factory *checkFactory(PyObject *factory);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif //__AUD_PYAPI_H__
diff --git a/intern/audaspace/SDL/AUD_SDLDevice.cpp b/intern/audaspace/SDL/AUD_SDLDevice.cpp
deleted file mode 100644
index 23729a7a171..00000000000
--- a/intern/audaspace/SDL/AUD_SDLDevice.cpp
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/SDL/AUD_SDLDevice.cpp
- * \ingroup audsdl
- */
-
-
-#include "AUD_SDLDevice.h"
-#include "AUD_IReader.h"
-
-void AUD_SDLDevice::SDL_mix(void *data, Uint8* buffer, int length)
-{
- AUD_SDLDevice* device = (AUD_SDLDevice*)data;
-
- device->mix((data_t*)buffer,length/AUD_DEVICE_SAMPLE_SIZE(device->m_specs));
-}
-
-static const char* open_error = "AUD_SDLDevice: Device couldn't be opened.";
-static const char* format_error = "AUD_SDLDevice: Obtained unsupported sample "
- "format.";
-
-AUD_SDLDevice::AUD_SDLDevice(AUD_DeviceSpecs specs, int buffersize)
-{
- if(specs.channels == AUD_CHANNELS_INVALID)
- specs.channels = AUD_CHANNELS_STEREO;
- if(specs.format == AUD_FORMAT_INVALID)
- specs.format = AUD_FORMAT_S16;
- if(specs.rate == AUD_RATE_INVALID)
- specs.rate = AUD_RATE_48000;
-
- m_specs = specs;
-
- SDL_AudioSpec format, obtained;
-
- format.freq = m_specs.rate;
- if(m_specs.format == AUD_FORMAT_U8)
- format.format = AUDIO_U8;
- else
- format.format = AUDIO_S16SYS;
- format.channels = m_specs.channels;
- format.samples = buffersize;
- format.callback = AUD_SDLDevice::SDL_mix;
- format.userdata = this;
-
- if(SDL_OpenAudio(&format, &obtained) != 0)
- AUD_THROW(AUD_ERROR_SDL, open_error);
-
- m_specs.rate = (AUD_SampleRate)obtained.freq;
- m_specs.channels = (AUD_Channels)obtained.channels;
- if(obtained.format == AUDIO_U8)
- m_specs.format = AUD_FORMAT_U8;
- else if(obtained.format == AUDIO_S16LSB || obtained.format == AUDIO_S16MSB)
- m_specs.format = AUD_FORMAT_S16;
- else
- {
- SDL_CloseAudio();
- AUD_THROW(AUD_ERROR_SDL, format_error);
- }
-
- create();
-}
-
-AUD_SDLDevice::~AUD_SDLDevice()
-{
- lock();
- SDL_CloseAudio();
- unlock();
-
- destroy();
-}
-
-void AUD_SDLDevice::playing(bool playing)
-{
- SDL_PauseAudio(playing ? 0 : 1);
-}
diff --git a/intern/audaspace/SDL/AUD_SDLDevice.h b/intern/audaspace/SDL/AUD_SDLDevice.h
deleted file mode 100644
index c4ff9e80aa9..00000000000
--- a/intern/audaspace/SDL/AUD_SDLDevice.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/SDL/AUD_SDLDevice.h
- * \ingroup audsdl
- */
-
-
-#ifndef __AUD_SDLDEVICE_H__
-#define __AUD_SDLDEVICE_H__
-
-#include "AUD_SoftwareDevice.h"
-
-/* SDL force defines __SSE__ and __SSE2__ flags, which generates warnings
- * because we pass those defines via command line as well. For until there's
- * proper ifndef added to SDL headers we ignore the redefinition warning.
- */
-#ifdef _MSC_VER
-# pragma warning(push)
-# pragma warning(disable : 4005)
-#endif
-#include <SDL.h>
-#ifdef _MSC_VER
-# pragma warning(pop)
-#endif
-
-/**
- * This device plays back through SDL, the simple direct media layer.
- */
-class AUD_SDLDevice : public AUD_SoftwareDevice
-{
-private:
- /**
- * Mixes the next bytes into the buffer.
- * \param data The SDL device.
- * \param buffer The target buffer.
- * \param length The length in bytes to be filled.
- */
- static void SDL_mix(void *data, Uint8* buffer, int length);
-
- // hide copy constructor and operator=
- AUD_SDLDevice(const AUD_SDLDevice&);
- AUD_SDLDevice& operator=(const AUD_SDLDevice&);
-
-protected:
- virtual void playing(bool playing);
-
-public:
- /**
- * Opens the SDL audio device for playback.
- * \param specs The wanted audio specification.
- * \param buffersize The size of the internal buffer.
- * \note The specification really used for opening the device may differ.
- * \exception AUD_Exception Thrown if the audio device cannot be opened.
- */
- AUD_SDLDevice(AUD_DeviceSpecs specs,
- int buffersize = AUD_DEFAULT_BUFFER_SIZE);
-
- /**
- * Closes the SDL audio device.
- */
- virtual ~AUD_SDLDevice();
-};
-
-#endif //__AUD_SDLDEVICE_H__
diff --git a/intern/audaspace/SRC/AUD_SRCResampleFactory.cpp b/intern/audaspace/SRC/AUD_SRCResampleFactory.cpp
deleted file mode 100644
index 6861e878abc..00000000000
--- a/intern/audaspace/SRC/AUD_SRCResampleFactory.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/SRC/AUD_SRCResampleFactory.cpp
- * \ingroup audsrc
- */
-
-
-#include "AUD_SRCResampleFactory.h"
-#include "AUD_SRCResampleReader.h"
-
-AUD_SRCResampleFactory::AUD_SRCResampleFactory(AUD_Reference<AUD_IFactory> factory,
- AUD_DeviceSpecs specs) :
- AUD_MixerFactory(factory, specs)
-{
-}
-
-AUD_Reference<AUD_IReader> AUD_SRCResampleFactory::createReader()
-{
- return new AUD_SRCResampleReader(getReader(), m_specs.specs);
-}
diff --git a/intern/audaspace/SRC/AUD_SRCResampleFactory.h b/intern/audaspace/SRC/AUD_SRCResampleFactory.h
deleted file mode 100644
index 858bb0c130a..00000000000
--- a/intern/audaspace/SRC/AUD_SRCResampleFactory.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/SRC/AUD_SRCResampleFactory.h
- * \ingroup audsrc
- */
-
-
-#ifndef __AUD_SRCRESAMPLEFACTORY_H__
-#define __AUD_SRCRESAMPLEFACTORY_H__
-
-#include "AUD_MixerFactory.h"
-
-/**
- * This factory creates a resampling reader that uses libsamplerate for
- * resampling.
- */
-class AUD_SRCResampleFactory : public AUD_MixerFactory
-{
-private:
- // hide copy constructor and operator=
- AUD_SRCResampleFactory(const AUD_SRCResampleFactory&);
- AUD_SRCResampleFactory& operator=(const AUD_SRCResampleFactory&);
-
-public:
- /**
- * Creates a new factory.
- * \param factory The input factory.
- * \param specs The target specifications.
- */
- AUD_SRCResampleFactory(AUD_Reference<AUD_IFactory> factory, AUD_DeviceSpecs specs);
-
- virtual AUD_Reference<AUD_IReader> createReader();
-};
-
-#endif //__AUD_SRCRESAMPLEFACTORY_H__
diff --git a/intern/audaspace/SRC/AUD_SRCResampleReader.cpp b/intern/audaspace/SRC/AUD_SRCResampleReader.cpp
deleted file mode 100644
index 242a7135aff..00000000000
--- a/intern/audaspace/SRC/AUD_SRCResampleReader.cpp
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/SRC/AUD_SRCResampleReader.cpp
- * \ingroup audsrc
- */
-
-
-#include "AUD_SRCResampleReader.h"
-
-#include <cmath>
-#include <cstring>
-#include <cstdio>
-
-static long src_callback(void *cb_data, float **data)
-{
- return ((AUD_SRCResampleReader*)cb_data)->doCallback(data);
-}
-
-static const char* state_error = "AUD_SRCResampleReader: SRC State couldn't be "
- "created.";
-
-AUD_SRCResampleReader::AUD_SRCResampleReader(AUD_Reference<AUD_IReader> reader,
- AUD_Specs specs) :
- AUD_ResampleReader(reader, specs.rate),
- m_channels(reader->getSpecs().channels),
- m_position(0)
-{
- int error;
- m_src = src_callback_new(src_callback,
- SRC_SINC_MEDIUM_QUALITY,
- m_channels,
- &error,
- this);
-
- if(!m_src)
- {
- // XXX printf("%s\n", src_strerror(error));
- AUD_THROW(AUD_ERROR_SRC, state_error);
- }
-}
-
-AUD_SRCResampleReader::~AUD_SRCResampleReader()
-{
- src_delete(m_src);
-}
-
-long AUD_SRCResampleReader::doCallback(float** data)
-{
- AUD_Specs specs;
- specs.channels = m_channels;
- specs.rate = m_rate;
-
- int length = m_buffer.getSize() / AUD_SAMPLE_SIZE(specs);
-
- *data = m_buffer.getBuffer();
- m_reader->read(length, m_eos, *data);
-
- return length;
-}
-
-void AUD_SRCResampleReader::seek(int position)
-{
- AUD_Specs specs = m_reader->getSpecs();
- double factor = double(m_rate) / double(specs.rate);
- m_reader->seek(position / factor);
- src_reset(m_src);
- m_position = position;
-}
-
-int AUD_SRCResampleReader::getLength() const
-{
- AUD_Specs specs = m_reader->getSpecs();
- double factor = double(m_rate) / double(specs.rate);
- return m_reader->getLength() * factor;
-}
-
-int AUD_SRCResampleReader::getPosition() const
-{
- return m_position;
-}
-
-AUD_Specs AUD_SRCResampleReader::getSpecs() const
-{
- AUD_Specs specs = m_reader->getSpecs();
- specs.rate = m_rate;
- return specs;
-}
-
-void AUD_SRCResampleReader::read(int& length, bool& eos, sample_t* buffer)
-{
- AUD_Specs specs = m_reader->getSpecs();
-
- double factor = double(m_rate) / double(specs.rate);
-
- specs.rate = m_rate;
-
- int size = length;
-
- m_buffer.assureSize(length * AUD_SAMPLE_SIZE(specs));
-
- if(specs.channels != m_channels)
- {
- src_delete(m_src);
-
- m_channels = specs.channels;
-
- int error;
- m_src = src_callback_new(src_callback,
- SRC_SINC_MEDIUM_QUALITY,
- m_channels,
- &error,
- this);
-
- if(!m_src)
- {
- // XXX printf("%s\n", src_strerror(error));
- AUD_THROW(AUD_ERROR_SRC, state_error);
- }
- }
-
- m_eos = false;
-
- length = src_callback_read(m_src, factor, length, buffer);
-
- m_position += length;
-
- eos = m_eos && (length < size);
-}
diff --git a/intern/audaspace/SRC/AUD_SRCResampleReader.h b/intern/audaspace/SRC/AUD_SRCResampleReader.h
deleted file mode 100644
index 891b28b0993..00000000000
--- a/intern/audaspace/SRC/AUD_SRCResampleReader.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/SRC/AUD_SRCResampleReader.h
- * \ingroup audsrc
- */
-
-
-#ifndef __AUD_SRCRESAMPLEREADER_H__
-#define __AUD_SRCRESAMPLEREADER_H__
-
-#include "AUD_ResampleReader.h"
-#include "AUD_Buffer.h"
-
-#include <samplerate.h>
-
-/**
- * This resampling reader uses libsamplerate for resampling.
- */
-class AUD_SRCResampleReader : public AUD_ResampleReader
-{
-private:
- /**
- * The sound output buffer.
- */
- AUD_Buffer m_buffer;
-
- /**
- * The reader channels.
- */
- AUD_Channels m_channels;
-
- /**
- * The src state structure.
- */
- SRC_STATE* m_src;
-
- /**
- * The current playback position;
- */
- int m_position;
-
- /**
- * Whether reader reached end of stream.
- */
- bool m_eos;
-
- // hide copy constructor and operator=
- AUD_SRCResampleReader(const AUD_SRCResampleReader&);
- AUD_SRCResampleReader& operator=(const AUD_SRCResampleReader&);
-
-public:
- /**
- * Creates a resampling reader.
- * \param reader The reader to mix.
- * \param specs The target specification.
- * \exception AUD_Exception Thrown if the source specification cannot be
- * resampled to the target specification.
- */
- AUD_SRCResampleReader(AUD_Reference<AUD_IReader> reader, AUD_Specs specs);
-
- /**
- * Destroys the reader.
- */
- ~AUD_SRCResampleReader();
-
- /**
- * The callback function for SRC.
- * \warning Do not call!
- * \param data The pointer to the float data.
- * \return The count of samples in the float data.
- */
- long doCallback(float** data);
-
- virtual void seek(int position);
- virtual int getLength() const;
- virtual int getPosition() const;
- virtual AUD_Specs getSpecs() const;
- virtual void read(int& length, bool& eos, sample_t* buffer);
-};
-
-#endif //__AUD_SRCRESAMPLEREADER_H__
diff --git a/intern/audaspace/ffmpeg/AUD_FFMPEGFactory.cpp b/intern/audaspace/ffmpeg/AUD_FFMPEGFactory.cpp
deleted file mode 100644
index 403c367fccc..00000000000
--- a/intern/audaspace/ffmpeg/AUD_FFMPEGFactory.cpp
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/ffmpeg/AUD_FFMPEGFactory.cpp
- * \ingroup audffmpeg
- */
-
-
-// needed for INT64_C
-#ifndef __STDC_CONSTANT_MACROS
-#define __STDC_CONSTANT_MACROS
-#endif
-
-#include "AUD_FFMPEGFactory.h"
-#include "AUD_FFMPEGReader.h"
-
-AUD_FFMPEGFactory::AUD_FFMPEGFactory(std::string filename) :
- m_filename(filename)
-{
-}
-
-AUD_FFMPEGFactory::AUD_FFMPEGFactory(const data_t* buffer, int size) :
- m_buffer(new AUD_Buffer(size))
-{
- memcpy(m_buffer->getBuffer(), buffer, size);
-}
-
-boost::shared_ptr<AUD_IReader> AUD_FFMPEGFactory::createReader()
-{
- if(m_buffer.get())
- return boost::shared_ptr<AUD_IReader>(new AUD_FFMPEGReader(m_buffer));
- else
- return boost::shared_ptr<AUD_IReader>(new AUD_FFMPEGReader(m_filename));
-}
diff --git a/intern/audaspace/ffmpeg/AUD_FFMPEGFactory.h b/intern/audaspace/ffmpeg/AUD_FFMPEGFactory.h
deleted file mode 100644
index 23d0f07ed0b..00000000000
--- a/intern/audaspace/ffmpeg/AUD_FFMPEGFactory.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/ffmpeg/AUD_FFMPEGFactory.h
- * \ingroup audffmpeg
- */
-
-
-#ifndef __AUD_FFMPEGFACTORY_H__
-#define __AUD_FFMPEGFACTORY_H__
-
-#include "AUD_IFactory.h"
-#include "AUD_Buffer.h"
-
-#include <string>
-#include <boost/shared_ptr.hpp>
-
-/**
- * This factory reads a sound file via ffmpeg.
- * \warning Notice that the needed formats and codecs have to be registered
- * for ffmpeg before this class can be used.
- */
-class AUD_FFMPEGFactory : public AUD_IFactory
-{
-private:
- /**
- * The filename of the sound source file.
- */
- const std::string m_filename;
-
- /**
- * The buffer to read from.
- */
- boost::shared_ptr<AUD_Buffer> m_buffer;
-
- // hide copy constructor and operator=
- AUD_FFMPEGFactory(const AUD_FFMPEGFactory&);
- AUD_FFMPEGFactory& operator=(const AUD_FFMPEGFactory&);
-
-public:
- /**
- * Creates a new factory.
- * \param filename The sound file path.
- */
- AUD_FFMPEGFactory(std::string filename);
-
- /**
- * Creates a new factory.
- * \param buffer The buffer to read from.
- * \param size The size of the buffer.
- */
- AUD_FFMPEGFactory(const data_t* buffer, int size);
-
- virtual boost::shared_ptr<AUD_IReader> createReader();
-};
-
-#endif //__AUD_FFMPEGFACTORY_H__
diff --git a/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp b/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp
deleted file mode 100644
index e9eea195208..00000000000
--- a/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp
+++ /dev/null
@@ -1,483 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/ffmpeg/AUD_FFMPEGReader.cpp
- * \ingroup audffmpeg
- */
-
-
-// needed for INT64_C
-#ifndef __STDC_CONSTANT_MACROS
-#define __STDC_CONSTANT_MACROS
-#endif
-
-#include "AUD_FFMPEGReader.h"
-
-extern "C" {
-#include <libavcodec/avcodec.h>
-#include <libavformat/avformat.h>
-#include <libavformat/avio.h>
-#include "ffmpeg_compat.h"
-}
-
-int AUD_FFMPEGReader::decode(AVPacket& packet, AUD_Buffer& buffer)
-{
-#ifdef FFMPEG_HAVE_DECODE_AUDIO4
- AVFrame* frame = NULL;
- int got_frame;
- int read_length;
- uint8_t* orig_data = packet.data;
- int orig_size = packet.size;
-
- int buf_size = buffer.getSize();
- int buf_pos = 0;
-
- while(packet.size > 0)
- {
- got_frame = 0;
-
- if(!frame)
- frame = av_frame_alloc();
- else
- av_frame_unref(frame);
-
- read_length = avcodec_decode_audio4(m_codecCtx, frame, &got_frame, &packet);
- if(read_length < 0)
- break;
-
- if(got_frame)
- {
- int data_size = av_samples_get_buffer_size(NULL, m_codecCtx->channels, frame->nb_samples, m_codecCtx->sample_fmt, 1);
-
- if(buf_size - buf_pos < data_size)
- {
- buffer.resize(buf_size + data_size, true);
- buf_size += data_size;
- }
-
- if(m_tointerleave)
- {
- int single_size = data_size / m_codecCtx->channels / frame->nb_samples;
- for(int channel = 0; channel < m_codecCtx->channels; channel++)
- {
- for(int i = 0; i < frame->nb_samples; i++)
- {
- memcpy(((data_t*)buffer.getBuffer()) + buf_pos + ((m_codecCtx->channels * i) + channel) * single_size,
- frame->data[channel] + i * single_size, single_size);
- }
- }
- }
- else
- memcpy(((data_t*)buffer.getBuffer()) + buf_pos, frame->data[0], data_size);
-
- buf_pos += data_size;
- }
- packet.size -= read_length;
- packet.data += read_length;
- }
-
- packet.data = orig_data;
- packet.size = orig_size;
- av_free(frame);
-
- return buf_pos;
-#else
- // save packet parameters
- uint8_t *audio_pkg_data = packet.data;
- int audio_pkg_size = packet.size;
-
- int buf_size = buffer.getSize();
- int buf_pos = 0;
-
- int read_length, data_size;
-
- AVPacket tmp_pkt;
-
- av_init_packet(&tmp_pkt);
-
- // as long as there is still data in the package
- while(audio_pkg_size > 0)
- {
- // resize buffer if needed
- if(buf_size - buf_pos < AVCODEC_MAX_AUDIO_FRAME_SIZE)
- {
- buffer.resize(buf_size + AVCODEC_MAX_AUDIO_FRAME_SIZE, true);
- buf_size += AVCODEC_MAX_AUDIO_FRAME_SIZE;
- }
-
- // read samples from the packet
- data_size = buf_size - buf_pos;
-
- tmp_pkt.data = audio_pkg_data;
- tmp_pkt.size = audio_pkg_size;
-
- read_length = avcodec_decode_audio3(
- m_codecCtx,
- (int16_t*)(((data_t*)buffer.getBuffer()) + buf_pos),
- &data_size, &tmp_pkt);
-
- // read error, next packet!
- if(read_length < 0)
- break;
-
- buf_pos += data_size;
-
- // move packet parameters
- audio_pkg_data += read_length;
- audio_pkg_size -= read_length;
- }
-
- return buf_pos;
-#endif
-}
-
-static const char* streaminfo_error = "AUD_FFMPEGReader: Stream info couldn't "
- "be found.";
-static const char* noaudio_error = "AUD_FFMPEGReader: File doesn't include an "
- "audio stream.";
-static const char* nodecoder_error = "AUD_FFMPEGReader: No decoder found for "
- "the audio stream.";
-static const char* codecopen_error = "AUD_FFMPEGReader: Codec couldn't be "
- "opened.";
-static const char* format_error = "AUD_FFMPEGReader: Unsupported sample "
- "format.";
-
-void AUD_FFMPEGReader::init()
-{
- m_position = 0;
- m_pkgbuf_left = 0;
-
- if(avformat_find_stream_info(m_formatCtx, NULL) < 0)
- AUD_THROW(AUD_ERROR_FFMPEG, streaminfo_error);
-
- // find audio stream and codec
- m_stream = -1;
-
- for(unsigned int i = 0; i < m_formatCtx->nb_streams; i++)
- {
- if((m_formatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO)
- && (m_stream < 0))
- {
- m_stream=i;
- break;
- }
- }
-
- if(m_stream == -1)
- AUD_THROW(AUD_ERROR_FFMPEG, noaudio_error);
-
- m_codecCtx = m_formatCtx->streams[m_stream]->codec;
-
- // get a decoder and open it
- AVCodec *aCodec = avcodec_find_decoder(m_codecCtx->codec_id);
- if(!aCodec)
- AUD_THROW(AUD_ERROR_FFMPEG, nodecoder_error);
-
- if(avcodec_open2(m_codecCtx, aCodec, NULL) < 0)
- AUD_THROW(AUD_ERROR_FFMPEG, codecopen_error);
-
- // XXX this prints file information to stdout:
- //dump_format(m_formatCtx, 0, NULL, 0);
-
- m_specs.channels = (AUD_Channels) m_codecCtx->channels;
- m_tointerleave = av_sample_fmt_is_planar(m_codecCtx->sample_fmt);
-
- switch(av_get_packed_sample_fmt(m_codecCtx->sample_fmt))
- {
- case AV_SAMPLE_FMT_U8:
- m_convert = AUD_convert_u8_float;
- m_specs.format = AUD_FORMAT_U8;
- break;
- case AV_SAMPLE_FMT_S16:
- m_convert = AUD_convert_s16_float;
- m_specs.format = AUD_FORMAT_S16;
- break;
- case AV_SAMPLE_FMT_S32:
- m_convert = AUD_convert_s32_float;
- m_specs.format = AUD_FORMAT_S32;
- break;
- case AV_SAMPLE_FMT_FLT:
- m_convert = AUD_convert_copy<float>;
- m_specs.format = AUD_FORMAT_FLOAT32;
- break;
- case AV_SAMPLE_FMT_DBL:
- m_convert = AUD_convert_double_float;
- m_specs.format = AUD_FORMAT_FLOAT64;
- break;
- default:
- AUD_THROW(AUD_ERROR_FFMPEG, format_error);
- }
-
- m_specs.rate = (AUD_SampleRate) m_codecCtx->sample_rate;
-}
-
-static const char* fileopen_error = "AUD_FFMPEGReader: File couldn't be "
- "opened.";
-
-AUD_FFMPEGReader::AUD_FFMPEGReader(std::string filename) :
- m_pkgbuf(AVCODEC_MAX_AUDIO_FRAME_SIZE<<1),
- m_formatCtx(NULL),
- m_aviocontext(NULL),
- m_membuf(NULL)
-{
- // open file
- if(avformat_open_input(&m_formatCtx, filename.c_str(), NULL, NULL)!=0)
- AUD_THROW(AUD_ERROR_FILE, fileopen_error);
-
- try
- {
- init();
- }
- catch(AUD_Exception&)
- {
- avformat_close_input(&m_formatCtx);
- throw;
- }
-}
-
-static const char* streamopen_error = "AUD_FFMPEGReader: Stream couldn't be "
- "opened.";
-
-AUD_FFMPEGReader::AUD_FFMPEGReader(boost::shared_ptr<AUD_Buffer> buffer) :
- m_pkgbuf(AVCODEC_MAX_AUDIO_FRAME_SIZE<<1),
- m_membuffer(buffer),
- m_membufferpos(0)
-{
- m_membuf = reinterpret_cast<data_t*>(av_malloc(FF_MIN_BUFFER_SIZE + FF_INPUT_BUFFER_PADDING_SIZE));
-
- m_aviocontext = avio_alloc_context(m_membuf, FF_MIN_BUFFER_SIZE, 0, this,
- read_packet, NULL, seek_packet);
-
- if(!m_aviocontext)
- {
- av_free(m_aviocontext);
- AUD_THROW(AUD_ERROR_FILE, fileopen_error);
- }
-
- m_formatCtx = avformat_alloc_context();
- m_formatCtx->pb = m_aviocontext;
- if(avformat_open_input(&m_formatCtx, "", NULL, NULL)!=0)
- {
- av_free(m_aviocontext);
- AUD_THROW(AUD_ERROR_FILE, streamopen_error);
- }
-
- try
- {
- init();
- }
- catch(AUD_Exception&)
- {
- avformat_close_input(&m_formatCtx);
- av_free(m_aviocontext);
- throw;
- }
-}
-
-AUD_FFMPEGReader::~AUD_FFMPEGReader()
-{
- avcodec_close(m_codecCtx);
- avformat_close_input(&m_formatCtx);
-}
-
-int AUD_FFMPEGReader::read_packet(void* opaque, uint8_t* buf, int buf_size)
-{
- AUD_FFMPEGReader* reader = reinterpret_cast<AUD_FFMPEGReader*>(opaque);
-
- int size = AUD_MIN(buf_size, reader->m_membuffer->getSize() - reader->m_membufferpos);
-
- if(size < 0)
- return -1;
-
- memcpy(buf, ((data_t*)reader->m_membuffer->getBuffer()) + reader->m_membufferpos, size);
- reader->m_membufferpos += size;
-
- return size;
-}
-
-int64_t AUD_FFMPEGReader::seek_packet(void* opaque, int64_t offset, int whence)
-{
- AUD_FFMPEGReader* reader = reinterpret_cast<AUD_FFMPEGReader*>(opaque);
-
- switch(whence)
- {
- case SEEK_SET:
- reader->m_membufferpos = 0;
- break;
- case SEEK_END:
- reader->m_membufferpos = reader->m_membuffer->getSize();
- break;
- case AVSEEK_SIZE:
- return reader->m_membuffer->getSize();
- }
-
- return (reader->m_membufferpos += offset);
-}
-
-bool AUD_FFMPEGReader::isSeekable() const
-{
- return true;
-}
-
-void AUD_FFMPEGReader::seek(int position)
-{
- if(position >= 0)
- {
- uint64_t st_time = m_formatCtx->start_time;
- uint64_t seek_pos = ((uint64_t)position) * ((uint64_t)AV_TIME_BASE) / ((uint64_t)m_specs.rate);
-
- if (st_time != AV_NOPTS_VALUE) {
- seek_pos += st_time;
- }
-
- double pts_time_base =
- av_q2d(m_formatCtx->streams[m_stream]->time_base);
- uint64_t pts_st_time =
- ((st_time != AV_NOPTS_VALUE) ? st_time : 0)
- / pts_time_base / (uint64_t) AV_TIME_BASE;
-
- // a value < 0 tells us that seeking failed
- if(av_seek_frame(m_formatCtx, -1, seek_pos,
- AVSEEK_FLAG_BACKWARD | AVSEEK_FLAG_ANY) >= 0)
- {
- avcodec_flush_buffers(m_codecCtx);
- m_position = position;
-
- AVPacket packet;
- bool search = true;
-
- while(search && av_read_frame(m_formatCtx, &packet) >= 0)
- {
- // is it a frame from the audio stream?
- if(packet.stream_index == m_stream)
- {
- // decode the package
- m_pkgbuf_left = decode(packet, m_pkgbuf);
- search = false;
-
- // check position
- if(packet.pts != AV_NOPTS_VALUE)
- {
- // calculate real position, and read to frame!
- m_position = (packet.pts -
- pts_st_time) * pts_time_base * m_specs.rate;
-
- if(m_position < position)
- {
- // read until we're at the right position
- int length = AUD_DEFAULT_BUFFER_SIZE;
- AUD_Buffer buffer(length * AUD_SAMPLE_SIZE(m_specs));
- bool eos;
- for(int len = position - m_position; len > 0; len -= AUD_DEFAULT_BUFFER_SIZE)
- {
- if(len < AUD_DEFAULT_BUFFER_SIZE)
- length = len;
- read(length, eos, buffer.getBuffer());
- }
- }
- }
- }
- av_free_packet(&packet);
- }
- }
- else
- {
- fprintf(stderr, "seeking failed!\n");
- // Seeking failed, do nothing.
- }
- }
-}
-
-int AUD_FFMPEGReader::getLength() const
-{
- // return approximated remaning size
- return (int)((m_formatCtx->duration * m_codecCtx->sample_rate)
- / AV_TIME_BASE)-m_position;
-}
-
-int AUD_FFMPEGReader::getPosition() const
-{
- return m_position;
-}
-
-AUD_Specs AUD_FFMPEGReader::getSpecs() const
-{
- return m_specs.specs;
-}
-
-void AUD_FFMPEGReader::read(int& length, bool& eos, sample_t* buffer)
-{
- // read packages and decode them
- AVPacket packet;
- int data_size = 0;
- int pkgbuf_pos;
- int left = length;
- int sample_size = AUD_DEVICE_SAMPLE_SIZE(m_specs);
-
- sample_t* buf = buffer;
- pkgbuf_pos = m_pkgbuf_left;
- m_pkgbuf_left = 0;
-
- // there may still be data in the buffer from the last call
- if(pkgbuf_pos > 0)
- {
- data_size = AUD_MIN(pkgbuf_pos, left * sample_size);
- m_convert((data_t*) buf, (data_t*) m_pkgbuf.getBuffer(),
- data_size / AUD_FORMAT_SIZE(m_specs.format));
- buf += data_size / AUD_FORMAT_SIZE(m_specs.format);
- left -= data_size/sample_size;
- }
-
- // for each frame read as long as there isn't enough data already
- while((left > 0) && (av_read_frame(m_formatCtx, &packet) >= 0))
- {
- // is it a frame from the audio stream?
- if(packet.stream_index == m_stream)
- {
- // decode the package
- pkgbuf_pos = decode(packet, m_pkgbuf);
-
- // copy to output buffer
- data_size = AUD_MIN(pkgbuf_pos, left * sample_size);
- m_convert((data_t*) buf, (data_t*) m_pkgbuf.getBuffer(),
- data_size / AUD_FORMAT_SIZE(m_specs.format));
- buf += data_size / AUD_FORMAT_SIZE(m_specs.format);
- left -= data_size/sample_size;
- }
- av_free_packet(&packet);
- }
- // read more data than necessary?
- if(pkgbuf_pos > data_size)
- {
- m_pkgbuf_left = pkgbuf_pos-data_size;
- memmove(m_pkgbuf.getBuffer(),
- ((data_t*)m_pkgbuf.getBuffer())+data_size,
- pkgbuf_pos-data_size);
- }
-
- if((eos = (left > 0)))
- length -= left;
-
- m_position += length;
-}
diff --git a/intern/audaspace/ffmpeg/AUD_FFMPEGReader.h b/intern/audaspace/ffmpeg/AUD_FFMPEGReader.h
deleted file mode 100644
index 377086e2625..00000000000
--- a/intern/audaspace/ffmpeg/AUD_FFMPEGReader.h
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/ffmpeg/AUD_FFMPEGReader.h
- * \ingroup audffmpeg
- */
-
-
-#ifndef __AUD_FFMPEGREADER_H__
-#define __AUD_FFMPEGREADER_H__
-
-#include "AUD_ConverterFunctions.h"
-#include "AUD_IReader.h"
-#include "AUD_Buffer.h"
-
-#include <string>
-#include <boost/shared_ptr.hpp>
-
-struct AVCodecContext;
-extern "C" {
-#include <libavformat/avformat.h>
-}
-
-/**
- * This class reads a sound file via ffmpeg.
- * \warning Seeking may not be accurate! Moreover the position is updated after
- * a buffer reading call. So calling getPosition right after seek
- * normally results in a wrong value.
- */
-class AUD_FFMPEGReader : public AUD_IReader
-{
-private:
- /**
- * The current position in samples.
- */
- int m_position;
-
- /**
- * The specification of the audio data.
- */
- AUD_DeviceSpecs m_specs;
-
- /**
- * The buffer for package reading.
- */
- AUD_Buffer m_pkgbuf;
-
- /**
- * The count of samples still available from the last read package.
- */
- int m_pkgbuf_left;
-
- /**
- * The AVFormatContext structure for using ffmpeg.
- */
- AVFormatContext* m_formatCtx;
-
- /**
- * The AVCodecContext structure for using ffmpeg.
- */
- AVCodecContext* m_codecCtx;
-
- /**
- * The AVIOContext to read the data from.
- */
- AVIOContext* m_aviocontext;
-
- /**
- * The stream ID in the file.
- */
- int m_stream;
-
- /**
- * Converter function.
- */
- AUD_convert_f m_convert;
-
- /**
- * The memory file to read from.
- */
- boost::shared_ptr<AUD_Buffer> m_membuffer;
-
- /**
- * The buffer to read with.
- */
- data_t* m_membuf;
-
- /**
- * Reading position of the buffer.
- */
- int64_t m_membufferpos;
-
- /**
- * Whether the audio data has to be interleaved after reading.
- */
- bool m_tointerleave;
-
- /**
- * Decodes a packet into the given buffer.
- * \param packet The AVPacket to decode.
- * \param buffer The target buffer.
- * \return The count of read bytes.
- */
- int decode(AVPacket& packet, AUD_Buffer& buffer);
-
- /**
- * Initializes the object.
- */
- void init();
-
- // hide copy constructor and operator=
- AUD_FFMPEGReader(const AUD_FFMPEGReader&);
- AUD_FFMPEGReader& operator=(const AUD_FFMPEGReader&);
-
-public:
- /**
- * Creates a new reader.
- * \param filename The path to the file to be read.
- * \exception AUD_Exception Thrown if the file specified does not exist or
- * cannot be read with ffmpeg.
- */
- AUD_FFMPEGReader(std::string filename);
-
- /**
- * Creates a new reader.
- * \param buffer The buffer to read from.
- * \exception AUD_Exception Thrown if the buffer specified cannot be read
- * with ffmpeg.
- */
- AUD_FFMPEGReader(boost::shared_ptr<AUD_Buffer> buffer);
-
- /**
- * Destroys the reader and closes the file.
- */
- virtual ~AUD_FFMPEGReader();
-
- static int read_packet(void* opaque, uint8_t* buf, int buf_size);
- static int64_t seek_packet(void* opaque, int64_t offset, int whence);
-
- virtual bool isSeekable() const;
- virtual void seek(int position);
- virtual int getLength() const;
- virtual int getPosition() const;
- virtual AUD_Specs getSpecs() const;
- virtual void read(int& length, bool& eos, sample_t* buffer);
-};
-
-#endif //__AUD_FFMPEGREADER_H__
diff --git a/intern/audaspace/ffmpeg/AUD_FFMPEGWriter.cpp b/intern/audaspace/ffmpeg/AUD_FFMPEGWriter.cpp
deleted file mode 100644
index 3f95ac7a4da..00000000000
--- a/intern/audaspace/ffmpeg/AUD_FFMPEGWriter.cpp
+++ /dev/null
@@ -1,395 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/ffmpeg/AUD_FFMPEGWriter.cpp
- * \ingroup audffmpeg
- */
-
-
-// needed for INT64_C
-#ifndef __STDC_CONSTANT_MACROS
-#define __STDC_CONSTANT_MACROS
-#endif
-
-#include "AUD_FFMPEGWriter.h"
-
-extern "C" {
-#include <libavcodec/avcodec.h>
-#include <libavformat/avformat.h>
-#include <libavformat/avio.h>
-#include "ffmpeg_compat.h"
-}
-
-static const char* context_error = "AUD_FFMPEGWriter: Couldn't allocate context.";
-static const char* codec_error = "AUD_FFMPEGWriter: Invalid codec or codec not found.";
-static const char* stream_error = "AUD_FFMPEGWriter: Couldn't allocate stream.";
-static const char* format_error = "AUD_FFMPEGWriter: Unsupported sample format.";
-static const char* file_error = "AUD_FFMPEGWriter: File couldn't be written.";
-static const char* write_error = "AUD_FFMPEGWriter: Error writing packet.";
-
-AUD_FFMPEGWriter::AUD_FFMPEGWriter(std::string filename, AUD_DeviceSpecs specs, AUD_Container format, AUD_Codec codec, unsigned int bitrate) :
- m_position(0),
- m_specs(specs),
- m_input_samples(0)
-{
- static const char* formats[] = { NULL, "ac3", "flac", "matroska", "mp2", "mp3", "ogg", "wav" };
-
- m_formatCtx = avformat_alloc_context();
- if (!m_formatCtx) AUD_THROW(AUD_ERROR_FFMPEG, context_error);
-
- strcpy(m_formatCtx->filename, filename.c_str());
- m_outputFmt = m_formatCtx->oformat = av_guess_format(formats[format], filename.c_str(), NULL);
- if (!m_outputFmt) {
- avformat_free_context(m_formatCtx);
- AUD_THROW(AUD_ERROR_FFMPEG, context_error);
- }
-
- switch(codec)
- {
- case AUD_CODEC_AAC:
- m_outputFmt->audio_codec = AV_CODEC_ID_AAC;
- break;
- case AUD_CODEC_AC3:
- m_outputFmt->audio_codec = AV_CODEC_ID_AC3;
- break;
- case AUD_CODEC_FLAC:
- m_outputFmt->audio_codec = AV_CODEC_ID_FLAC;
- break;
- case AUD_CODEC_MP2:
- m_outputFmt->audio_codec = AV_CODEC_ID_MP2;
- break;
- case AUD_CODEC_MP3:
- m_outputFmt->audio_codec = AV_CODEC_ID_MP3;
- break;
- case AUD_CODEC_PCM:
- switch(specs.format)
- {
- case AUD_FORMAT_U8:
- m_outputFmt->audio_codec = AV_CODEC_ID_PCM_U8;
- break;
- case AUD_FORMAT_S16:
- m_outputFmt->audio_codec = AV_CODEC_ID_PCM_S16LE;
- break;
- case AUD_FORMAT_S24:
- m_outputFmt->audio_codec = AV_CODEC_ID_PCM_S24LE;
- break;
- case AUD_FORMAT_S32:
- m_outputFmt->audio_codec = AV_CODEC_ID_PCM_S32LE;
- break;
- case AUD_FORMAT_FLOAT32:
- m_outputFmt->audio_codec = AV_CODEC_ID_PCM_F32LE;
- break;
- case AUD_FORMAT_FLOAT64:
- m_outputFmt->audio_codec = AV_CODEC_ID_PCM_F64LE;
- break;
- default:
- m_outputFmt->audio_codec = AV_CODEC_ID_NONE;
- break;
- }
- break;
- case AUD_CODEC_VORBIS:
- m_outputFmt->audio_codec = AV_CODEC_ID_VORBIS;
- break;
- default:
- m_outputFmt->audio_codec = AV_CODEC_ID_NONE;
- break;
- }
-
- try
- {
- if(m_outputFmt->audio_codec == AV_CODEC_ID_NONE)
- AUD_THROW(AUD_ERROR_SPECS, codec_error);
-
- m_stream = avformat_new_stream(m_formatCtx, NULL);
- if(!m_stream)
- AUD_THROW(AUD_ERROR_FFMPEG, stream_error);
-
- m_codecCtx = m_stream->codec;
- m_codecCtx->codec_id = m_outputFmt->audio_codec;
- m_codecCtx->codec_type = AVMEDIA_TYPE_AUDIO;
- m_codecCtx->bit_rate = bitrate;
- m_codecCtx->sample_rate = int(m_specs.rate);
- m_codecCtx->channels = m_specs.channels;
- m_codecCtx->time_base.num = 1;
- m_codecCtx->time_base.den = m_codecCtx->sample_rate;
-
- switch(m_specs.format)
- {
- case AUD_FORMAT_U8:
- m_convert = AUD_convert_float_u8;
- m_codecCtx->sample_fmt = AV_SAMPLE_FMT_U8;
- break;
- case AUD_FORMAT_S16:
- m_convert = AUD_convert_float_s16;
- m_codecCtx->sample_fmt = AV_SAMPLE_FMT_S16;
- break;
- case AUD_FORMAT_S32:
- m_convert = AUD_convert_float_s32;
- m_codecCtx->sample_fmt = AV_SAMPLE_FMT_S32;
- break;
- case AUD_FORMAT_FLOAT32:
- m_convert = AUD_convert_copy<float>;
- m_codecCtx->sample_fmt = AV_SAMPLE_FMT_FLT;
- break;
- case AUD_FORMAT_FLOAT64:
- m_convert = AUD_convert_float_double;
- m_codecCtx->sample_fmt = AV_SAMPLE_FMT_DBL;
- break;
- default:
- AUD_THROW(AUD_ERROR_FFMPEG, format_error);
- }
-
- try
- {
- if(m_formatCtx->oformat->flags & AVFMT_GLOBALHEADER)
- m_codecCtx->flags |= CODEC_FLAG_GLOBAL_HEADER;
-
- AVCodec* codec = avcodec_find_encoder(m_codecCtx->codec_id);
- if(!codec)
- AUD_THROW(AUD_ERROR_FFMPEG, codec_error);
-
- if(codec->sample_fmts) {
- // Check if the preferred sample format for this codec is supported.
- const enum AVSampleFormat *p = codec->sample_fmts;
- for(; *p != -1; p++) {
- if(*p == m_stream->codec->sample_fmt)
- break;
- }
- if(*p == -1) {
- // Sample format incompatible with codec. Defaulting to a format known to work.
- m_stream->codec->sample_fmt = codec->sample_fmts[0];
- }
- }
-
- if(avcodec_open2(m_codecCtx, codec, NULL))
- AUD_THROW(AUD_ERROR_FFMPEG, codec_error);
-
- m_output_buffer.resize(FF_MIN_BUFFER_SIZE);
- int samplesize = AUD_MAX(AUD_SAMPLE_SIZE(m_specs), AUD_DEVICE_SAMPLE_SIZE(m_specs));
-
- if(m_codecCtx->frame_size <= 1) {
- m_input_size = FF_MIN_BUFFER_SIZE * 8 / m_codecCtx->bits_per_coded_sample / m_codecCtx->channels;
- m_input_buffer.resize(m_input_size * samplesize);
- }
- else
- {
- m_input_buffer.resize(m_codecCtx->frame_size * samplesize);
- m_input_size = m_codecCtx->frame_size;
- }
-
-#ifdef FFMPEG_HAVE_ENCODE_AUDIO2
- m_frame = av_frame_alloc();
- if (!m_frame)
- AUD_THROW(AUD_ERROR_FFMPEG, codec_error);
- av_frame_unref(m_frame);
- m_frame->linesize[0] = m_input_size * samplesize;
- m_frame->format = m_codecCtx->sample_fmt;
- m_frame->nb_samples = m_input_size;
-# ifdef FFMPEG_HAVE_AVFRAME_SAMPLE_RATE
- m_frame->sample_rate = m_codecCtx->sample_rate;
-# endif
-# ifdef FFMPEG_HAVE_FRAME_CHANNEL_LAYOUT
- m_frame->channel_layout = m_codecCtx->channel_layout;
-# endif
- m_sample_size = av_get_bytes_per_sample(m_codecCtx->sample_fmt);
- m_frame_pts = 0;
- m_deinterleave = av_sample_fmt_is_planar(m_codecCtx->sample_fmt);
- if(m_deinterleave)
- m_deinterleave_buffer.resize(m_input_size * m_codecCtx->channels * m_sample_size);
-#endif
-
- try
- {
- if(avio_open(&m_formatCtx->pb, filename.c_str(), AVIO_FLAG_WRITE))
- AUD_THROW(AUD_ERROR_FILE, file_error);
-
- if(avformat_write_header(m_formatCtx, NULL) < 0) {
- throw;
- }
- }
- catch(AUD_Exception&)
- {
- avcodec_close(m_codecCtx);
- av_freep(&m_formatCtx->streams[0]->codec);
- throw;
- }
- }
- catch(AUD_Exception&)
- {
- av_freep(&m_formatCtx->streams[0]);
- throw;
- }
- }
- catch(AUD_Exception&)
- {
- av_free(m_formatCtx);
- throw;
- }
-}
-
-AUD_FFMPEGWriter::~AUD_FFMPEGWriter()
-{
- // writte missing data
- if(m_input_samples)
- {
- sample_t* buf = m_input_buffer.getBuffer();
- memset(buf + m_specs.channels * m_input_samples, 0,
- (m_input_size - m_input_samples) * AUD_DEVICE_SAMPLE_SIZE(m_specs));
-
- encode(buf);
- }
-
- av_write_trailer(m_formatCtx);
-
- avcodec_close(m_codecCtx);
-
- av_freep(&m_formatCtx->streams[0]->codec);
- av_freep(&m_formatCtx->streams[0]);
-
-#ifdef FFMPEG_HAVE_ENCODE_AUDIO2
- av_frame_free(&m_frame);
-#endif
-
- avio_close(m_formatCtx->pb);
- av_free(m_formatCtx);
-}
-
-int AUD_FFMPEGWriter::getPosition() const
-{
- return m_position;
-}
-
-AUD_DeviceSpecs AUD_FFMPEGWriter::getSpecs() const
-{
- return m_specs;
-}
-
-void AUD_FFMPEGWriter::encode(sample_t* data)
-{
- // convert first
- if(m_input_size)
- m_convert(reinterpret_cast<data_t*>(data), reinterpret_cast<data_t*>(data), m_input_size * m_specs.channels);
-
- AVPacket packet = { 0 };
- av_init_packet(&packet);
-
-#ifdef FFMPEG_HAVE_ENCODE_AUDIO2
- int got_output, ret;
- m_frame->pts = m_frame_pts / av_q2d(m_codecCtx->time_base);
- m_frame_pts++;
-#ifdef FFMPEG_HAVE_FRAME_CHANNEL_LAYOUT
- m_frame->channel_layout = m_codecCtx->channel_layout;
-#endif
-
- if(m_deinterleave) {
- for(int channel = 0; channel < m_codecCtx->channels; channel++) {
- for(int i = 0; i < m_frame->nb_samples; i++) {
- memcpy(reinterpret_cast<uint8_t*>(m_deinterleave_buffer.getBuffer()) + (i + channel * m_frame->nb_samples) * m_sample_size,
- reinterpret_cast<uint8_t*>(data) + (m_codecCtx->channels * i + channel) * m_sample_size, m_sample_size);
- }
- }
-
- data = m_deinterleave_buffer.getBuffer();
- }
-
- avcodec_fill_audio_frame(m_frame, m_codecCtx->channels, m_codecCtx->sample_fmt, reinterpret_cast<uint8_t*>(data),
- m_frame->nb_samples * av_get_bytes_per_sample(m_codecCtx->sample_fmt) * m_codecCtx->channels, 1);
-
- ret = avcodec_encode_audio2(m_codecCtx, &packet, m_frame, &got_output);
- if(ret < 0)
- AUD_THROW(AUD_ERROR_FFMPEG, codec_error);
-
- if(!got_output)
- return;
-#else
- sample_t* outbuf = m_output_buffer.getBuffer();
-
- packet.size = avcodec_encode_audio(m_codecCtx, reinterpret_cast<uint8_t*>(outbuf), m_output_buffer.getSize(), reinterpret_cast<short*>(data));
- if(m_codecCtx->coded_frame && m_codecCtx->coded_frame->pts != AV_NOPTS_VALUE)
- packet.pts = av_rescale_q(m_codecCtx->coded_frame->pts, m_codecCtx->time_base, m_stream->time_base);
- packet.flags |= AV_PKT_FLAG_KEY;
- packet.data = reinterpret_cast<uint8_t*>(outbuf);
-#endif
-
- if(packet.pts != AV_NOPTS_VALUE)
- packet.pts = av_rescale_q(packet.pts, m_codecCtx->time_base, m_stream->time_base);
- if(packet.dts != AV_NOPTS_VALUE)
- packet.dts = av_rescale_q(packet.dts, m_codecCtx->time_base, m_stream->time_base);
- if(packet.duration > 0)
- packet.duration = av_rescale_q(packet.duration, m_codecCtx->time_base, m_stream->time_base);
-
- packet.stream_index = m_stream->index;
-
- packet.flags |= AV_PKT_FLAG_KEY;
-
- if(av_interleaved_write_frame(m_formatCtx, &packet)) {
- av_free_packet(&packet);
- AUD_THROW(AUD_ERROR_FFMPEG, write_error);
- }
-
- av_free_packet(&packet);
-}
-
-void AUD_FFMPEGWriter::write(unsigned int length, sample_t* buffer)
-{
- unsigned int samplesize = AUD_SAMPLE_SIZE(m_specs);
-
- if(m_input_size)
- {
- sample_t* inbuf = m_input_buffer.getBuffer();
-
- while(length)
- {
- unsigned int len = AUD_MIN(m_input_size - m_input_samples, length);
-
- memcpy(inbuf + m_input_samples * m_specs.channels, buffer, len * samplesize);
-
- buffer += len * m_specs.channels;
- m_input_samples += len;
- m_position += len;
- length -= len;
-
- if(m_input_samples == m_input_size)
- {
- encode(inbuf);
-
- m_input_samples = 0;
- }
- }
- }
- else // PCM data, can write directly!
- {
- int samplesize = AUD_SAMPLE_SIZE(m_specs);
- if(m_output_buffer.getSize() != length * m_specs.channels * m_codecCtx->bits_per_coded_sample / 8)
- m_output_buffer.resize(length * m_specs.channels * m_codecCtx->bits_per_coded_sample / 8);
- m_input_buffer.assureSize(length * AUD_MAX(AUD_DEVICE_SAMPLE_SIZE(m_specs), samplesize));
-
- sample_t* buf = m_input_buffer.getBuffer();
- m_convert(reinterpret_cast<data_t*>(buf), reinterpret_cast<data_t*>(buffer), length * m_specs.channels);
-
- encode(buf);
-
- m_position += length;
- }
-}
diff --git a/intern/audaspace/ffmpeg/AUD_FFMPEGWriter.h b/intern/audaspace/ffmpeg/AUD_FFMPEGWriter.h
deleted file mode 100644
index 492aa35ff12..00000000000
--- a/intern/audaspace/ffmpeg/AUD_FFMPEGWriter.h
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/ffmpeg/AUD_FFMPEGWriter.h
- * \ingroup audffmpeg
- */
-
-
-#ifndef __AUD_FFMPEGWRITER_H__
-#define __AUD_FFMPEGWRITER_H__
-
-#include "AUD_ConverterFunctions.h"
-#include "AUD_Buffer.h"
-#include "AUD_IWriter.h"
-
-#include <string>
-
-struct AVCodecContext;
-extern "C" {
-#include <libavformat/avformat.h>
-}
-
-/**
- * This class writes a sound file via ffmpeg.
- */
-class AUD_FFMPEGWriter : public AUD_IWriter
-{
-private:
- /**
- * The current position in samples.
- */
- int m_position;
-
- /**
- * The specification of the audio data.
- */
- AUD_DeviceSpecs m_specs;
-
- /**
- * The AVFormatContext structure for using ffmpeg.
- */
- AVFormatContext* m_formatCtx;
-
- /**
- * The AVCodecContext structure for using ffmpeg.
- */
- AVCodecContext* m_codecCtx;
-
- /**
- * The AVOutputFormat structure for using ffmpeg.
- */
- AVOutputFormat* m_outputFmt;
-
- /**
- * The AVStream structure for using ffmpeg.
- */
- AVStream* m_stream;
-
- /**
- * Frame sent to the encoder.
- */
- AVFrame *m_frame;
-
- /**
- * PTS of next frame to write.
- */
- int m_frame_pts;
-
- /**
- * Number of bytes per sample.
- */
- int m_sample_size;
-
- /**
- * Need to de-interleave audio for planar sample formats.
- */
- bool m_deinterleave;
-
- AUD_Buffer m_deinterleave_buffer;
-
- /**
- * The input buffer for the format converted data before encoding.
- */
- AUD_Buffer m_input_buffer;
-
- /**
- * The output buffer for the encoded audio data.
- */
- AUD_Buffer m_output_buffer;
-
- /**
- * The count of input samples we have so far.
- */
- unsigned int m_input_samples;
-
- /**
- * The count of input samples necessary to encode a packet.
- */
- unsigned int m_input_size;
-
- /**
- * Converter function.
- */
- AUD_convert_f m_convert;
-
- // hide copy constructor and operator=
- AUD_FFMPEGWriter(const AUD_FFMPEGWriter&);
- AUD_FFMPEGWriter& operator=(const AUD_FFMPEGWriter&);
-
- /**
- * Encodes to the output buffer.
- * \param data Pointer to the data to encode.
- */
- void encode(sample_t* data);
-
-public:
- /**
- * Creates a new writer.
- * \param filename The path to the file to be read.
- * \param specs The file's audio specification.
- * \param format The file's container format.
- * \param codec The codec used for encoding the audio data.
- * \param bitrate The bitrate for encoding.
- * \exception AUD_Exception Thrown if the file specified does not exist or
- * cannot be read with ffmpeg.
- */
- AUD_FFMPEGWriter(std::string filename, AUD_DeviceSpecs specs, AUD_Container format, AUD_Codec codec, unsigned int bitrate);
-
- /**
- * Destroys the writer and closes the file.
- */
- virtual ~AUD_FFMPEGWriter();
-
- virtual int getPosition() const;
- virtual AUD_DeviceSpecs getSpecs() const;
- virtual void write(unsigned int length, sample_t* buffer);
-};
-
-#endif //__AUD_FFMPEGWRITER_H__
diff --git a/intern/audaspace/fftw/AUD_BandPassFactory.cpp b/intern/audaspace/fftw/AUD_BandPassFactory.cpp
deleted file mode 100644
index 1e6538d80de..00000000000
--- a/intern/audaspace/fftw/AUD_BandPassFactory.cpp
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/fftw/AUD_BandPassFactory.cpp
- * \ingroup audfftw
- */
-
-
-#include "AUD_BandPassFactory.h"
-#include "AUD_BandPassReader.h"
-
-AUD_BandPassFactory::AUD_BandPassFactory(AUD_IFactory* factory, float low,
- float high) :
- AUD_EffectFactory(factory),
- m_low(low),
- m_high(high) {}
-
-AUD_BandPassFactory::AUD_BandPassFactory(float low, float high) :
- AUD_EffectFactory(0),
- m_low(low),
- m_high(high) {}
-
-float AUD_BandPassFactory::getLow()
-{
- return m_low;
-}
-
-float AUD_BandPassFactory::getHigh()
-{
- return m_high;
-}
-
-void AUD_BandPassFactory::setLow(float low)
-{
- m_low = low;
-}
-
-void AUD_BandPassFactory::setHigh(float high)
-{
- m_high = high;
-}
-
-AUD_IReader* AUD_BandPassFactory::createReader()
-{
- AUD_IReader* reader = getReader();
-
- if(reader != 0)
- {
- reader = new AUD_BandPassReader(reader, m_low, m_high);
- AUD_NEW("reader")
- }
-
- return reader;
-}
diff --git a/intern/audaspace/fftw/AUD_BandPassFactory.h b/intern/audaspace/fftw/AUD_BandPassFactory.h
deleted file mode 100644
index 90b090dce16..00000000000
--- a/intern/audaspace/fftw/AUD_BandPassFactory.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/fftw/AUD_BandPassFactory.h
- * \ingroup audfftw
- */
-
-
-#ifndef __AUD_BANDPASSFACTORY_H__
-#define __AUD_BANDPASSFACTORY_H__
-
-#include "AUD_EffectFactory.h"
-
-/**
- * This factory creates a band pass filter for a sound wave.
- */
-class AUD_BandPassFactory : public AUD_EffectFactory
-{
-private:
- /**
- * The lowest frequency to be passed.
- */
- float m_low;
-
- /**
- * The highest frequency to be passed.
- */
- float m_high;
-
-public:
- /**
- * Creates a new band pass factory.
- * \param factory The input factory.
- * \param low The lowest passed frequency.
- * \param high The highest passed frequency.
- */
- AUD_BandPassFactory(AUD_IFactory* factory, float low, float high);
-
- /**
- * Creates a new band pass factory.
- * \param low The lowest passed frequency.
- * \param high The highest passed frequency.
- */
- AUD_BandPassFactory(float low, float high);
-
- /**
- * Returns the lowest passed frequency.
- */
- float getLow();
-
- /**
- * Returns the highest passed frequency.
- */
- float getHigh();
-
- /**
- * Sets the lowest passed frequency.
- * \param low The lowest passed frequency.
- */
- void setLow(float low);
-
- /**
- * Sets the highest passed frequency.
- * \param high The highest passed frequency.
- */
- void setHigh(float high);
-
- virtual AUD_IReader* createReader();
-};
-
-#endif //__AUD_BANDPASSFACTORY_H__
diff --git a/intern/audaspace/fftw/AUD_BandPassReader.cpp b/intern/audaspace/fftw/AUD_BandPassReader.cpp
deleted file mode 100644
index 7e181fb499d..00000000000
--- a/intern/audaspace/fftw/AUD_BandPassReader.cpp
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/fftw/AUD_BandPassReader.cpp
- * \ingroup audfftw
- */
-
-
-#include "AUD_BandPassReader.h"
-#include "AUD_Buffer.h"
-
-#include <cstring>
-#include <stdio.h>
-
-AUD_BandPassReader::AUD_BandPassReader(AUD_IReader* reader, float low,
- float high) :
- AUD_EffectReader(reader), m_low(low), m_high(high)
-{
- m_buffer = new AUD_Buffer(); AUD_NEW("buffer")
- m_in = new AUD_Buffer(); AUD_NEW("buffer")
- m_out = new AUD_Buffer(); AUD_NEW("buffer")
- m_length = 0;
-}
-
-AUD_BandPassReader::~AUD_BandPassReader()
-{
- if(m_length != 0)
- {
- fftw_destroy_plan(m_forward);
- fftw_destroy_plan(m_backward);
- }
-
- delete m_buffer; AUD_DELETE("buffer")
- delete m_in; AUD_DELETE("buffer")
- delete m_out; AUD_DELETE("buffer")
-}
-
-AUD_ReaderType AUD_BandPassReader::getType()
-{
- return m_reader->getType();
-}
-
-void AUD_BandPassReader::read(int & length, sample_t* & buffer)
-{
- AUD_Specs specs = m_reader->getSpecs();
-
- m_reader->read(length, buffer);
-
- if(length > 0)
- {
- m_buffer->assureSize(length * AUD_SAMPLE_SIZE(specs));
-
- if(length != m_length)
- {
- if(m_length != 0)
- {
- fftw_destroy_plan(m_forward);
- fftw_destroy_plan(m_backward);
- }
-
- m_length = length;
-
- if(m_length * sizeof(double) > m_in->getSize())
- {
- m_in->resize(m_length * sizeof(double));
- m_out->resize((m_length / 2 + 1) * sizeof(fftw_complex));
- }
-
- m_forward = fftw_plan_dft_r2c_1d(m_length,
- (double*)m_in->getBuffer(),
- (fftw_complex*)m_out->getBuffer(),
- FFTW_ESTIMATE);
- m_backward = fftw_plan_dft_c2r_1d(m_length,
- (fftw_complex*)m_out->getBuffer(),
- (double*)m_in->getBuffer(),
- FFTW_ESTIMATE);
- }
-
- double* target = (double*) m_in->getBuffer();
- sample_t* target2 = m_buffer->getBuffer();
- fftw_complex* complex = (fftw_complex*) m_out->getBuffer();
- float frequency;
-
- for(int channel = 0; channel < specs.channels; channel++)
- {
- for(int i = 0; i < m_length; i++)
- target[i] = buffer[i * specs.channels + channel];
-
- fftw_execute(m_forward);
-
- for(int i = 0; i < m_length / 2 + 1; i++)
- {
- frequency = i * specs.rate / (m_length / 2.0f + 1.0f);
- if((frequency < m_low) || (frequency > m_high))
- complex[i][0] = complex[i][1] = 0.0;
- }
-
- fftw_execute(m_backward);
-
- for(int i = 0; i < m_length; i++)
- target2[i * specs.channels + channel] = target[i] / m_length;
- }
- }
-
- buffer = m_buffer->getBuffer();
-}
diff --git a/intern/audaspace/fftw/AUD_BandPassReader.h b/intern/audaspace/fftw/AUD_BandPassReader.h
deleted file mode 100644
index 55a950818e0..00000000000
--- a/intern/audaspace/fftw/AUD_BandPassReader.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/fftw/AUD_BandPassReader.h
- * \ingroup audfftw
- */
-
-
-#ifndef __AUD_BANDPASSREADER_H__
-#define __AUD_BANDPASSREADER_H__
-
-#include <fftw3.h>
-
-#include "AUD_EffectReader.h"
-class AUD_Buffer;
-
-/**
- * This class only passes a specific frequency band of another reader.
- */
-class AUD_BandPassReader : public AUD_EffectReader
-{
-private:
- /**
- * The playback buffer.
- */
- AUD_Buffer *m_buffer;
-
- /**
- * The input buffer for fourier transformations.
- */
- AUD_Buffer *m_in;
-
- /**
- * The output buffer for fourier transformations.
- */
- AUD_Buffer *m_out;
-
- /**
- * The lowest passed frequency.
- */
- float m_low;
-
- /**
- * The highest passed frequency.
- */
- float m_high;
-
- /**
- * The fftw plan for forward transformation.
- */
- fftw_plan m_forward;
-
- /**
- * The fftw plan for backward transformation.
- */
- fftw_plan m_backward;
-
- /**
- * The length of the plans.
- */
- int m_length;
-
-public:
- /**
- * Creates a new band pass reader.
- * \param reader The reader to read from.
- * \param low The lowest passed frequency.
- * \param high The highest passed frequency.
- */
- AUD_BandPassReader(AUD_IReader* reader, float low, float high);
-
- /**
- * Destroys the reader.
- */
- virtual ~AUD_BandPassReader();
-
- virtual AUD_ReaderType getType();
- virtual void read(int & length, sample_t* & buffer);
-};
-
-#endif //__AUD_BANDPASSREADER_H__
diff --git a/intern/audaspace/intern/AUD_3DMath.h b/intern/audaspace/intern/AUD_3DMath.h
deleted file mode 100644
index 1b109ebee1e..00000000000
--- a/intern/audaspace/intern/AUD_3DMath.h
+++ /dev/null
@@ -1,328 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_3DMath.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_3DMATH_H__
-#define __AUD_3DMATH_H__
-
-#include <cmath>
-#include <cstring>
-
-/**
- * This class represents a 3 dimensional vector.
- */
-class AUD_Vector3
-{
-private:
- /**
- * The vector components.
- */
- union
- {
- float m_v[3];
- struct
- {
- float m_x;
- float m_y;
- float m_z;
- };
- };
-
-public:
- /**
- * Creates a new 3 dimensional vector.
- * \param x The x component.
- * \param y The y component.
- * \param z The z component.
- */
- inline AUD_Vector3(float x = 0, float y = 0, float z = 0) :
- m_x(x), m_y(y), m_z(z)
- {
- }
-
- /**
- * Retrieves the x component of the vector.
- * \return The x component.
- */
- inline const float& x() const
- {
- return m_x;
- }
-
- /**
- * Retrieves the y component of the vector.
- * \return The y component.
- */
- inline const float& y() const
- {
- return m_y;
- }
-
- /**
- * Retrieves the z component of the vector.
- * \return The z component.
- */
- inline const float& z() const
- {
- return m_z;
- }
-
- /**
- * Retrieves the components of the vector.
- * \param destination Where the 3 float values should be saved to.
- */
- inline void get(float* destination) const
- {
- memcpy(destination, m_v, sizeof(m_v));
- }
-
- /**
- * Retrieves the components of the vector.
- * \return The components as float[3].
- */
- inline float* get()
- {
- return m_v;
- }
-
- /**
- * Retrieves the components of the vector.
- * \return The components as float[3].
- */
- inline const float* get() const
- {
- return m_v;
- }
-
- /**
- * Retrieves the length of the vector.
- * \return The length of the vector.
- */
- inline float length() const
- {
- return sqrt(m_x*m_x + m_y*m_y + m_z*m_z);
- }
-
- /**
- * Retrieves the cross product.
- * \param op The second operand.
- * \return The cross product of the two vectors.
- */
- inline AUD_Vector3 cross(const AUD_Vector3& op) const
- {
- return AUD_Vector3(m_y * op.m_z - m_z * op.m_y,
- m_z * op.m_x - m_x * op.m_z,
- m_x * op.m_y - m_y * op.m_x);
- }
-
- /**
- * Retrieves the dot product.
- * \param op The second operand.
- * \return The dot product of the two vectors.
- */
- inline float operator*(const AUD_Vector3& op) const
- {
- return m_x * op.m_x + m_y * op.m_y + m_z * op.m_z;
- }
-
- /**
- * Retrieves the product with a scalar.
- * \param op The second operand.
- * \return The scaled vector.
- */
- inline AUD_Vector3 operator*(const float& op) const
- {
- return AUD_Vector3(m_x * op, m_y * op, m_z * op);
- }
-
- /**
- * Adds two vectors.
- * \param op The second operand.
- * \return The sum vector.
- */
- inline AUD_Vector3 operator+(const AUD_Vector3& op) const
- {
- return AUD_Vector3(m_x + op.m_x, m_y + op.m_y, m_z + op.m_z);
- }
-
- /**
- * Subtracts two vectors.
- * \param op The second operand.
- * \return The difference vector.
- */
- inline AUD_Vector3 operator-(const AUD_Vector3& op) const
- {
- return AUD_Vector3(m_x - op.m_x, m_y - op.m_y, m_z - op.m_z);
- }
-
- /**
- * Negates the vector.
- * \return The vector facing in the opposite direction.
- */
- inline AUD_Vector3 operator-() const
- {
- return AUD_Vector3(-m_x, -m_y, -m_z);
- }
-
- /**
- * Subtracts the second vector.
- * \param op The second operand.
- * \return The difference vector.
- */
- inline AUD_Vector3& operator-=(const AUD_Vector3& op)
- {
- m_x -= op.m_x;
- m_y -= op.m_y;
- m_z -= op.m_z;
- return *this;
- }
-};
-
-/**
- * This class represents a quaternion used for 3D rotations.
- */
-class AUD_Quaternion
-{
-private:
- /**
- * The quaternion components.
- */
- union
- {
- float m_v[4];
- struct
- {
- float m_w;
- float m_x;
- float m_y;
- float m_z;
- };
- };
-
-public:
- /**
- * Creates a new quaternion.
- * \param w The w component.
- * \param x The x component.
- * \param y The y component.
- * \param z The z component.
- */
- inline AUD_Quaternion(float w = 1, float x = 0, float y = 0, float z = 0) :
- m_w(w), m_x(x), m_y(y), m_z(z)
- {
- }
-
- /**
- * Retrieves the w component of the quarternion.
- * \return The w component.
- */
- inline const float& w() const
- {
- return m_w;
- }
-
- /**
- * Retrieves the x component of the quarternion.
- * \return The x component.
- */
- inline const float& x() const
- {
- return m_x;
- }
-
- /**
- * Retrieves the y component of the quarternion.
- * \return The y component.
- */
- inline const float& y() const
- {
- return m_y;
- }
-
- /**
- * Retrieves the z component of the quarternion.
- * \return The z component.
- */
- inline const float& z() const
- {
- return m_z;
- }
-
- /**
- * Retrieves the components of the vector.
- * \param destination Where the 4 float values should be saved to.
- */
- inline void get(float* destination) const
- {
- memcpy(destination, m_v, sizeof(m_v));
- }
-
- /**
- * Retrieves the components of the vector.
- * \return The components as float[4].
- */
- inline float* get()
- {
- return m_v;
- }
-
- /**
- * Retrieves the components of the vector.
- * \return The components as float[4].
- */
- inline const float* get() const
- {
- return m_v;
- }
-
- /**
- * When the quaternion represents an orientation, this returns the negative
- * z axis vector.
- * \return The negative z axis vector.
- */
- inline AUD_Vector3 getLookAt() const
- {
- return AUD_Vector3(-2 * (m_w * m_y + m_x * m_z),
- 2 * (m_x * m_w - m_z * m_y),
- 2 * (m_x * m_x + m_y * m_y) - 1);
- }
-
- /**
- * When the quaternion represents an orientation, this returns the y axis
- * vector.
- * \return The y axis vector.
- */
- inline AUD_Vector3 getUp() const
- {
- return AUD_Vector3(2 * (m_x * m_y - m_w * m_z),
- 1 - 2 * (m_x * m_x + m_z * m_z),
- 2 * (m_w * m_x + m_y * m_z));
- }
-};
-
-#endif //__AUD_3DMATH_H__
diff --git a/intern/audaspace/intern/AUD_AnimateableProperty.cpp b/intern/audaspace/intern/AUD_AnimateableProperty.cpp
deleted file mode 100644
index e0bc18ea520..00000000000
--- a/intern/audaspace/intern/AUD_AnimateableProperty.cpp
+++ /dev/null
@@ -1,247 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_AnimateableProperty.cpp
- * \ingroup audaspaceintern
- */
-
-
-#include "AUD_AnimateableProperty.h"
-#include "AUD_MutexLock.h"
-
-#include <cstring>
-#include <cmath>
-
-AUD_AnimateableProperty::AUD_AnimateableProperty(int count) :
- AUD_Buffer(count * sizeof(float)), m_count(count), m_isAnimated(false)
-{
- memset(getBuffer(), 0, count * sizeof(float));
-
- pthread_mutexattr_t attr;
- pthread_mutexattr_init(&attr);
- pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
-
- pthread_mutex_init(&m_mutex, &attr);
-
- pthread_mutexattr_destroy(&attr);
-}
-
-AUD_AnimateableProperty::AUD_AnimateableProperty(int count, float value) :
- AUD_Buffer(count * sizeof(float)), m_count(count), m_isAnimated(false)
-{
- sample_t* buf = getBuffer();
-
- for(int i = 0; i < count; i++)
- buf[i] = value;
-
- pthread_mutexattr_t attr;
- pthread_mutexattr_init(&attr);
- pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
-
- pthread_mutex_init(&m_mutex, &attr);
-
- pthread_mutexattr_destroy(&attr);
-}
-
-void AUD_AnimateableProperty::updateUnknownCache(int start, int end)
-{
- float* buf = getBuffer();
-
- for(int i = start; i <= end; i++)
- // TODO: maybe first instead of zero order interpolation?
- memcpy(buf + i * m_count, buf + (start - 1) * m_count, m_count * sizeof(float));
-}
-
-AUD_AnimateableProperty::~AUD_AnimateableProperty()
-{
- pthread_mutex_destroy(&m_mutex);
-}
-
-void AUD_AnimateableProperty::lock()
-{
- pthread_mutex_lock(&m_mutex);
-}
-
-void AUD_AnimateableProperty::unlock()
-{
- pthread_mutex_unlock(&m_mutex);
-}
-
-void AUD_AnimateableProperty::write(const float* data)
-{
- AUD_MutexLock lock(*this);
-
- m_isAnimated = false;
- m_unknown.clear();
- memcpy(getBuffer(), data, m_count * sizeof(float));
-}
-
-void AUD_AnimateableProperty::write(const float* data, int position, int count)
-{
- AUD_MutexLock lock(*this);
-
- int pos = getSize() / (sizeof(float) * m_count);
-
- if(!m_isAnimated)
- pos = 0;
-
- m_isAnimated = true;
-
- assureSize((count + position) * m_count * sizeof(float), true);
-
- float* buf = getBuffer();
-
- memcpy(buf + position * m_count, data, count * m_count * sizeof(float));
-
- // have to fill up space between?
- if(pos < position)
- {
- m_unknown.push_back(Unknown(pos, position - 1));
-
- // if the buffer was not animated before, we copy the previous static value
- if(pos == 0)
- pos = 1;
-
- updateUnknownCache(pos, position - 1);
- }
- // otherwise it's not at the end, let's check if some unknown part got filled
- else
- {
- bool erased = false;
-
- for(std::list<Unknown>::iterator it = m_unknown.begin(); it != m_unknown.end(); erased ? it : it++)
- {
- erased = false;
-
- // unknown area before position
- if(it->end < position)
- continue;
-
- // we're after the new area, let's stop
- if(it->start >= position + count)
- break;
-
- // we have an intersection, now 4 cases:
- // the start is included
- if(position <= it->start)
- {
- // the end is included
- if(position + count > it->end)
- {
- // simply delete
- it = m_unknown.erase(it);
- erased = true;
- }
- // the end is excluded, a second part remains
- else
- {
- // update second part
- it->start = position + count;
- updateUnknownCache(it->start, it->end);
- break;
- }
- }
- // start is excluded, a first part remains
- else
- {
- // the end is included
- if(position + count > it->end)
- {
- // update first part
- it->end = position - 1;
- }
- // the end is excluded, a second part remains
- else
- {
- // add another item and update both parts
- m_unknown.insert(it, Unknown(it->start, position - 1));
- it->start = position + count;
- updateUnknownCache(it->start, it->end);
- }
- }
- }
- }
-}
-
-void AUD_AnimateableProperty::read(float position, float* out)
-{
- AUD_MutexLock lock(*this);
-
- if(!m_isAnimated)
- {
- memcpy(out, getBuffer(), m_count * sizeof(float));
- return;
- }
-
- int last = getSize() / (sizeof(float) * m_count) - 1;
- float t = position - floor(position);
-
- if(position >= last)
- {
- position = last;
- t = 0;
- }
-
- if(t == 0)
- {
- memcpy(out, getBuffer() + int(floor(position)) * m_count, m_count * sizeof(float));
- }
- else
- {
- int pos = int(floor(position)) * m_count;
- float t2 = t * t;
- float t3 = t2 * t;
- float m0, m1;
- float* p0;
- float* p1 = getBuffer() + pos;
- float* p2;
- float* p3;
- last *= m_count;
-
- if(pos == 0)
- p0 = p1;
- else
- p0 = p1 - m_count;
-
- p2 = p1 + m_count;
- if(pos + m_count == last)
- p3 = p2;
- else
- p3 = p2 + m_count;
-
- for(int i = 0; i < m_count; i++)
- {
- m0 = (p2[i] - p0[i]) / 2.0f;
- m1 = (p3[i] - p1[i]) / 2.0f;
-
- out[i] = (2 * t3 - 3 * t2 + 1) * p0[i] + (-2 * t3 + 3 * t2) * p1[i] +
- (t3 - 2 * t2 + t) * m0 + (t3 - t2) * m1;
- }
- }
-}
-
-bool AUD_AnimateableProperty::isAnimated() const
-{
- return m_isAnimated;
-}
diff --git a/intern/audaspace/intern/AUD_AnimateableProperty.h b/intern/audaspace/intern/AUD_AnimateableProperty.h
deleted file mode 100644
index f07e5916b25..00000000000
--- a/intern/audaspace/intern/AUD_AnimateableProperty.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_AnimateableProperty.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_ANIMATEABLEPROPERTY_H__
-#define __AUD_ANIMATEABLEPROPERTY_H__
-
-#include "AUD_Buffer.h"
-#include "AUD_ILockable.h"
-
-#include <pthread.h>
-#include <list>
-
-/**
- * This class saves animation data for float properties.
- */
-class AUD_AnimateableProperty : private AUD_Buffer, public AUD_ILockable
-{
-private:
- struct Unknown {
- int start;
- int end;
-
- Unknown(int start, int end) :
- start(start), end(end) {}
- };
-
- /// The count of floats for a single property.
- const int m_count;
-
- /// Whether the property is animated or not.
- bool m_isAnimated;
-
- /// The mutex for locking.
- pthread_mutex_t m_mutex;
-
- /// The list of unknown buffer areas.
- std::list<Unknown> m_unknown;
-
- // hide copy constructor and operator=
- AUD_AnimateableProperty(const AUD_AnimateableProperty&);
- AUD_AnimateableProperty& operator=(const AUD_AnimateableProperty&);
-
- void updateUnknownCache(int start, int end);
-
-public:
- /**
- * Creates a new animateable property.
- * \param count The count of floats for a single property.
- */
- AUD_AnimateableProperty(int count = 1);
-
- /**
- * Creates a new animateable property.
- * \param count The count of floats for a single property.
- * \param count The value that the property should get initialized with. All count floats will be initialized to the same value.
- */
- AUD_AnimateableProperty(int count, float value);
-
- /**
- * Destroys the animateable property.
- */
- ~AUD_AnimateableProperty();
-
- /**
- * Locks the property.
- */
- virtual void lock();
-
- /**
- * Unlocks the previously locked property.
- */
- virtual void unlock();
-
- /**
- * Writes the properties value and marks it non-animated.
- * \param data The new value.
- */
- void write(const float* data);
-
- /**
- * Writes the properties value and marks it animated.
- * \param data The new value.
- * \param position The position in the animation in frames.
- * \param count The count of frames to write.
- */
- void write(const float* data, int position, int count);
-
- /**
- * Reads the properties value.
- * \param position The position in the animation in frames.
- * \param[out] out Where to write the value to.
- */
- void read(float position, float* out);
-
- /**
- * Returns whether the property is animated.
- * \return Whether the property is animated.
- */
- bool isAnimated() const;
-};
-
-#endif //__AUD_ANIMATEABLEPROPERTY_H__
diff --git a/intern/audaspace/intern/AUD_Buffer.cpp b/intern/audaspace/intern/AUD_Buffer.cpp
deleted file mode 100644
index b7157f672b4..00000000000
--- a/intern/audaspace/intern/AUD_Buffer.cpp
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_Buffer.cpp
- * \ingroup audaspaceintern
- */
-
-
-#include "AUD_Buffer.h"
-#include "AUD_Space.h"
-
-#include <cstring>
-#include <cstdlib>
-
-#define AUD_ALIGN(a) (a + 16 - ((long)a & 15))
-
-AUD_Buffer::AUD_Buffer(int size)
-{
- m_size = size;
- m_buffer = (data_t*) malloc(size+16);
-}
-
-AUD_Buffer::~AUD_Buffer()
-{
- free(m_buffer);
-}
-
-sample_t* AUD_Buffer::getBuffer() const
-{
- return (sample_t*) AUD_ALIGN(m_buffer);
-}
-
-int AUD_Buffer::getSize() const
-{
- return m_size;
-}
-
-void AUD_Buffer::resize(int size, bool keep)
-{
- if(keep)
- {
- data_t* buffer = (data_t*) malloc(size + 16);
-
- memcpy(AUD_ALIGN(buffer), AUD_ALIGN(m_buffer), AUD_MIN(size, m_size));
-
- free(m_buffer);
- m_buffer = buffer;
- }
- else
- m_buffer = (data_t*) realloc(m_buffer, size + 16);
-
- m_size = size;
-}
-
-void AUD_Buffer::assureSize(int size, bool keep)
-{
- if(m_size < size)
- resize(size, keep);
-}
diff --git a/intern/audaspace/intern/AUD_Buffer.h b/intern/audaspace/intern/AUD_Buffer.h
deleted file mode 100644
index d3207f04f83..00000000000
--- a/intern/audaspace/intern/AUD_Buffer.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_Buffer.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_BUFFER_H__
-#define __AUD_BUFFER_H__
-
-#include "AUD_Space.h"
-
-/**
- * This class is a simple buffer in RAM which is 16 Byte aligned and provides
- * resize functionality.
- */
-class AUD_Buffer
-{
-private:
- /// The size of the buffer in bytes.
- int m_size;
-
- /// The pointer to the buffer memory.
- data_t* m_buffer;
-
- // hide copy constructor and operator=
- AUD_Buffer(const AUD_Buffer&);
- AUD_Buffer& operator=(const AUD_Buffer&);
-
-public:
- /**
- * Creates a new buffer.
- * \param size The size of the buffer in bytes.
- */
- AUD_Buffer(int size = 0);
-
- /**
- * Destroys the buffer.
- */
- ~AUD_Buffer();
-
- /**
- * Returns the pointer to the buffer in memory.
- */
- sample_t* getBuffer() const;
-
- /**
- * Returns the size of the buffer in bytes.
- */
- int getSize() const;
-
- /**
- * Resizes the buffer.
- * \param size The new size of the buffer, measured in bytes.
- * \param keep Whether to keep the old data. If the new buffer is smaller,
- * the data at the end will be lost.
- */
- void resize(int size, bool keep = false);
-
- /**
- * Makes sure the buffer has a minimum size.
- * If size is >= current size, nothing will happen.
- * Otherwise the buffer is resized with keep as parameter.
- * \param size The new minimum size of the buffer, measured in bytes.
- * \param keep Whether to keep the old data. If the new buffer is smaller,
- * the data at the end will be lost.
- */
- void assureSize(int size, bool keep = false);
-};
-
-#endif //__AUD_BUFFER_H__
diff --git a/intern/audaspace/intern/AUD_BufferReader.cpp b/intern/audaspace/intern/AUD_BufferReader.cpp
deleted file mode 100644
index b9d819ff774..00000000000
--- a/intern/audaspace/intern/AUD_BufferReader.cpp
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_BufferReader.cpp
- * \ingroup audaspaceintern
- */
-
-
-#include "AUD_BufferReader.h"
-#include "AUD_Buffer.h"
-#include "AUD_Space.h"
-
-#include <cstring>
-
-AUD_BufferReader::AUD_BufferReader(boost::shared_ptr<AUD_Buffer> buffer,
- AUD_Specs specs) :
- m_position(0), m_buffer(buffer), m_specs(specs)
-{
-}
-
-bool AUD_BufferReader::isSeekable() const
-{
- return true;
-}
-
-void AUD_BufferReader::seek(int position)
-{
- m_position = position;
-}
-
-int AUD_BufferReader::getLength() const
-{
- return m_buffer->getSize() / AUD_SAMPLE_SIZE(m_specs);
-}
-
-int AUD_BufferReader::getPosition() const
-{
- return m_position;
-}
-
-AUD_Specs AUD_BufferReader::getSpecs() const
-{
- return m_specs;
-}
-
-void AUD_BufferReader::read(int& length, bool& eos, sample_t* buffer)
-{
- eos = false;
-
- int sample_size = AUD_SAMPLE_SIZE(m_specs);
-
- sample_t* buf = m_buffer->getBuffer() + m_position * m_specs.channels;
-
- // in case the end of the buffer is reached
- if(m_buffer->getSize() < (m_position + length) * sample_size)
- {
- length = m_buffer->getSize() / sample_size - m_position;
- eos = true;
- }
-
- if(length < 0)
- {
- length = 0;
- return;
- }
-
- m_position += length;
- memcpy(buffer, buf, length * sample_size);
-}
diff --git a/intern/audaspace/intern/AUD_BufferReader.h b/intern/audaspace/intern/AUD_BufferReader.h
deleted file mode 100644
index d0c90ce7e61..00000000000
--- a/intern/audaspace/intern/AUD_BufferReader.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_BufferReader.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_BUFFERREADER_H__
-#define __AUD_BUFFERREADER_H__
-
-#include "AUD_IReader.h"
-class AUD_Buffer;
-
-#include <boost/shared_ptr.hpp>
-
-/**
- * This class represents a simple reader from a buffer that exists in memory.
- * \warning Notice that the buffer used for creating the reader must exist as
- * long as the reader exists.
- */
-class AUD_BufferReader : public AUD_IReader
-{
-private:
- /**
- * The current position in the buffer.
- */
- int m_position;
-
- /**
- * The buffer that is read.
- */
- boost::shared_ptr<AUD_Buffer> m_buffer;
-
- /**
- * The specification of the sample data in the buffer.
- */
- AUD_Specs m_specs;
-
- // hide copy constructor and operator=
- AUD_BufferReader(const AUD_BufferReader&);
- AUD_BufferReader& operator=(const AUD_BufferReader&);
-
-public:
- /**
- * Creates a new buffer reader.
- * \param buffer The buffer to read from.
- * \param specs The specification of the sample data in the buffer.
- */
- AUD_BufferReader(boost::shared_ptr<AUD_Buffer> buffer, AUD_Specs specs);
-
- virtual bool isSeekable() const;
- virtual void seek(int position);
- virtual int getLength() const;
- virtual int getPosition() const;
- virtual AUD_Specs getSpecs() const;
- virtual void read(int& length, bool& eos, sample_t* buffer);
-};
-
-#endif //__AUD_BUFFERREADER_H__
diff --git a/intern/audaspace/intern/AUD_C-API.cpp b/intern/audaspace/intern/AUD_C-API.cpp
deleted file mode 100644
index 52cf256147f..00000000000
--- a/intern/audaspace/intern/AUD_C-API.cpp
+++ /dev/null
@@ -1,1323 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_C-API.cpp
- * \ingroup audaspaceintern
- */
-
-// needed for INT64_C
-#ifndef __STDC_CONSTANT_MACROS
-#define __STDC_CONSTANT_MACROS
-#endif
-
-// quiet unudef define warning
-#ifdef __STDC_CONSTANT_MACROS
-// pass
-#endif
-
-#ifdef WITH_PYTHON
-# include "AUD_PyInit.h"
-# include "AUD_PyAPI.h"
-#endif
-
-#include <cstdlib>
-#include <cstring>
-#include <cmath>
-#include <sstream>
-#include <iostream>
-
-#include "AUD_NULLDevice.h"
-#include "AUD_I3DDevice.h"
-#include "AUD_I3DHandle.h"
-#include "AUD_FileFactory.h"
-#include "AUD_FileWriter.h"
-#include "AUD_StreamBufferFactory.h"
-#include "AUD_DelayFactory.h"
-#include "AUD_LimiterFactory.h"
-#include "AUD_PingPongFactory.h"
-#include "AUD_LoopFactory.h"
-#include "AUD_RectifyFactory.h"
-#include "AUD_EnvelopeFactory.h"
-#include "AUD_LinearResampleFactory.h"
-#include "AUD_LowpassFactory.h"
-#include "AUD_HighpassFactory.h"
-#include "AUD_AccumulatorFactory.h"
-#include "AUD_SumFactory.h"
-#include "AUD_SquareFactory.h"
-#include "AUD_ChannelMapperFactory.h"
-#include "AUD_Buffer.h"
-#include "AUD_ReadDevice.h"
-#include "AUD_IReader.h"
-#include "AUD_SequencerFactory.h"
-#include "AUD_SequencerEntry.h"
-#include "AUD_SilenceFactory.h"
-#include "AUD_MutexLock.h"
-
-#ifdef WITH_SDL
-#include "AUD_SDLDevice.h"
-#endif
-
-#ifdef WITH_OPENAL
-#include "AUD_OpenALDevice.h"
-#endif
-
-#ifdef WITH_JACK
-#include "AUD_JackDevice.h"
-#include "AUD_JackLibrary.h"
-#endif
-
-
-#ifdef WITH_FFMPEG
-extern "C" {
-#include <libavformat/avformat.h>
-}
-#endif
-
-#include <cassert>
-
-typedef boost::shared_ptr<AUD_IFactory> AUD_Sound;
-typedef boost::shared_ptr<AUD_IDevice> AUD_Device;
-typedef boost::shared_ptr<AUD_IHandle> AUD_Handle;
-typedef boost::shared_ptr<AUD_SequencerEntry> AUD_SEntry;
-
-#define AUD_CAPI_IMPLEMENTATION
-#include "AUD_C-API.h"
-
-#ifndef NULL
-# define NULL (void *)0
-#endif
-
-static boost::shared_ptr<AUD_IDevice> AUD_device;
-static AUD_I3DDevice *AUD_3ddevice;
-
-void AUD_initOnce()
-{
-#ifdef WITH_FFMPEG
- av_register_all();
-#endif
-#ifdef WITH_JACK
- AUD_jack_init();
-#endif
-}
-
-void AUD_exitOnce()
-{
-#ifdef WITH_JACK
- AUD_jack_exit();
-#endif
-}
-
-AUD_Device* AUD_init(const char* device, AUD_DeviceSpecs specs, int buffersize, const char* name)
-{
- boost::shared_ptr<AUD_IDevice> dev;
-
- if (AUD_device.get()) {
- AUD_exit(NULL);
- }
-
- std::string dname = device;
-
- try {
- if(dname == "Null") {
- dev = boost::shared_ptr<AUD_IDevice>(new AUD_NULLDevice());
- }
-#ifdef WITH_SDL
- else if(dname == "SDL")
- {
- dev = boost::shared_ptr<AUD_IDevice>(new AUD_SDLDevice(specs, buffersize));
- }
-#endif
-#ifdef WITH_OPENAL
- else if(dname == "OpenAL")
- {
- dev = boost::shared_ptr<AUD_IDevice>(new AUD_OpenALDevice(specs, buffersize));
- }
-#endif
-#ifdef WITH_JACK
- else if(dname == "JACK")
- {
-#ifdef __APPLE__
- struct stat st;
- if (stat("/Library/Frameworks/Jackmp.framework", &st) != 0) {
- printf("Warning: JACK Framework not installed\n");
- return NULL;
- }
- else
-#endif
- if (!AUD_jack_supported()) {
- printf("Warning: JACK cllient not installed\n");
- return NULL;
- }
- else {
- dev = boost::shared_ptr<AUD_IDevice>(new AUD_JackDevice(name, specs, buffersize));
- }
- }
-#endif
- else
- {
- return NULL;
- }
-
- AUD_device = dev;
- AUD_3ddevice = dynamic_cast<AUD_I3DDevice *>(AUD_device.get());
-
- return (AUD_Device*)1;
- }
- catch(AUD_Exception&)
- {
- return NULL;
- }
-}
-
-void AUD_exit(AUD_Device* device)
-{
- AUD_device = boost::shared_ptr<AUD_IDevice>();
- AUD_3ddevice = NULL;
-}
-
-#ifdef WITH_PYTHON
-static PyObject *AUD_getCDevice(PyObject *self)
-{
- if (AUD_device.get()) {
- Device *device = (Device *)Device_empty();
- if (device != NULL) {
- device->device = new boost::shared_ptr<AUD_IDevice>(AUD_device);
- return (PyObject *)device;
- }
- }
-
- Py_RETURN_NONE;
-}
-
-static PyMethodDef meth_getcdevice[] = {
- {"device", (PyCFunction)AUD_getCDevice, METH_NOARGS,
- "device()\n\n"
- "Returns the application's :class:`Device`.\n\n"
- ":return: The application's :class:`Device`.\n"
- ":rtype: :class:`Device`"}
-};
-
-extern "C" {
-extern void *BKE_sound_get_factory(void *sound);
-}
-
-static PyObject *AUD_getSoundFromPointer(PyObject *self, PyObject *args)
-{
- long int lptr;
-
- if (PyArg_Parse(args, "l:_sound_from_pointer", &lptr)) {
- if (lptr) {
- boost::shared_ptr<AUD_IFactory>* factory = (boost::shared_ptr<AUD_IFactory>*) BKE_sound_get_factory((void *) lptr);
-
- if (factory) {
- Factory *obj = (Factory *)Factory_empty();
- if (obj) {
- obj->factory = new boost::shared_ptr<AUD_IFactory>(*factory);
- return (PyObject *) obj;
- }
- }
- }
- }
-
- Py_RETURN_NONE;
-}
-
-static PyMethodDef meth_sound_from_pointer[] = {
- {"_sound_from_pointer", (PyCFunction)AUD_getSoundFromPointer, METH_O,
- "_sound_from_pointer(pointer)\n\n"
- "Returns the corresponding :class:`Factory` object.\n\n"
- ":arg pointer: The pointer to the bSound object as long.\n"
- ":type pointer: long\n"
- ":return: The corresponding :class:`Factory` object.\n"
- ":rtype: :class:`Factory`"}
-};
-
-PyObject *AUD_initPython()
-{
- PyObject *module = PyInit_aud();
- PyModule_AddObject(module, "device", (PyObject *)PyCFunction_New(meth_getcdevice, NULL));
- PyModule_AddObject(module, "_sound_from_pointer", (PyObject *)PyCFunction_New(meth_sound_from_pointer, NULL));
- PyDict_SetItemString(PyImport_GetModuleDict(), "aud", module);
-
- return module;
-}
-
-void *AUD_getPythonSound(AUD_Sound *sound)
-{
- if (sound) {
- Factory *obj = (Factory *) Factory_empty();
- if (obj) {
- obj->factory = new boost::shared_ptr<AUD_IFactory>(*sound);
- return (PyObject *) obj;
- }
- }
-
- return NULL;
-}
-
-AUD_Sound *AUD_getSoundFromPython(void *sound)
-{
- Factory *factory = checkFactory((PyObject *)sound);
-
- if (!factory)
- return NULL;
-
- return new boost::shared_ptr<AUD_IFactory>(*reinterpret_cast<boost::shared_ptr<AUD_IFactory>*>(factory->factory));
-}
-
-#endif
-
-void AUD_Device_lock(AUD_Device* device)
-{
- AUD_device->lock();
-}
-
-void AUD_Device_unlock(AUD_Device* device)
-{
- AUD_device->unlock();
-}
-
-AUD_Channels AUD_Device_getChannels(AUD_Device* device)
-{
- return AUD_device->getSpecs().channels;
-}
-
-AUD_SampleRate AUD_Device_getRate(AUD_Device* device)
-{
- return AUD_device->getSpecs().rate;
-}
-
-AUD_SoundInfo AUD_getInfo(AUD_Sound *sound)
-{
- assert(sound);
-
- AUD_SoundInfo info;
- info.specs.channels = AUD_CHANNELS_INVALID;
- info.specs.rate = AUD_RATE_INVALID;
- info.length = 0.0f;
-
- try {
- boost::shared_ptr<AUD_IReader> reader = (*sound)->createReader();
-
- if (reader.get()) {
- info.specs = reader->getSpecs();
- info.length = reader->getLength() / (float) info.specs.rate;
- }
- }
- catch(AUD_Exception &ae)
- {
- std::cout << ae.str << std::endl;
- }
-
- return info;
-}
-
-AUD_Sound *AUD_Sound_file(const char *filename)
-{
- assert(filename);
- return new AUD_Sound(new AUD_FileFactory(filename));
-}
-
-AUD_Sound *AUD_Sound_bufferFile(unsigned char *buffer, int size)
-{
- assert(buffer);
- return new AUD_Sound(new AUD_FileFactory(buffer, size));
-}
-
-AUD_Sound *AUD_Sound_cache(AUD_Sound *sound)
-{
- assert(sound);
-
- try {
- return new AUD_Sound(new AUD_StreamBufferFactory(*sound));
- }
- catch(AUD_Exception&)
- {
- return NULL;
- }
-}
-
-AUD_Sound *AUD_Sound_rechannel(AUD_Sound *sound, AUD_Channels channels)
-{
- assert(sound);
-
- try {
- AUD_DeviceSpecs specs;
- specs.channels = channels;
- specs.rate = AUD_RATE_INVALID;
- specs.format = AUD_FORMAT_INVALID;
- return new AUD_Sound(new AUD_ChannelMapperFactory(*sound, specs));
- }
- catch(AUD_Exception&)
- {
- return NULL;
- }
-}
-
-AUD_Sound *AUD_Sound_delay(AUD_Sound *sound, float delay)
-{
- assert(sound);
-
- try {
- return new AUD_Sound(new AUD_DelayFactory(*sound, delay));
- }
- catch(AUD_Exception&)
- {
- return NULL;
- }
-}
-
-AUD_Sound *AUD_Sound_limit(AUD_Sound *sound, float start, float end)
-{
- assert(sound);
-
- try {
- return new AUD_Sound(new AUD_LimiterFactory(*sound, start, end));
- }
- catch(AUD_Exception&)
- {
- return NULL;
- }
-}
-
-AUD_Sound *AUD_Sound_pingpong(AUD_Sound *sound)
-{
- assert(sound);
-
- try {
- return new AUD_Sound(new AUD_PingPongFactory(*sound));
- }
- catch(AUD_Exception&)
- {
- return NULL;
- }
-}
-
-AUD_Sound *AUD_Sound_loop(AUD_Sound *sound)
-{
- assert(sound);
-
- try {
- return new AUD_Sound(new AUD_LoopFactory(*sound));
- }
- catch(AUD_Exception&)
- {
- return NULL;
- }
-}
-
-int AUD_Handle_setLoopCount(AUD_Handle *handle, int loops)
-{
- assert(handle);
-
- try {
- return (*handle)->setLoopCount(loops);
- }
- catch(AUD_Exception&)
- {
- }
-
- return false;
-}
-
-AUD_Sound *AUD_rectifySound(AUD_Sound *sound)
-{
- assert(sound);
-
- try {
- return new AUD_Sound(new AUD_RectifyFactory(*sound));
- }
- catch(AUD_Exception&)
- {
- return NULL;
- }
-}
-
-void AUD_Sound_free(AUD_Sound *sound)
-{
- assert(sound);
- delete sound;
-}
-
-AUD_Handle *AUD_Device_play(AUD_Device* device, AUD_Sound *sound, int keep)
-{
- assert(sound);
- try {
- AUD_Handle handle = AUD_device->play(*sound, keep);
- if (handle.get()) {
- return new AUD_Handle(handle);
- }
- }
- catch(AUD_Exception&)
- {
- }
- return NULL;
-}
-
-int AUD_Handle_pause(AUD_Handle *handle)
-{
- assert(handle);
- return (*handle)->pause();
-}
-
-int AUD_Handle_resume(AUD_Handle *handle)
-{
- assert(handle);
- return (*handle)->resume();
-}
-
-int AUD_Handle_stop(AUD_Handle *handle)
-{
- assert(handle);
- int result = (*handle)->stop();
- delete handle;
- return result;
-}
-
-void AUD_Device_stopAll(void* device)
-{
- AUD_device->stopAll();
-}
-
-int AUD_Handle_setKeep(AUD_Handle *handle, int keep)
-{
- assert(handle);
- return (*handle)->setKeep(keep);
-}
-
-int AUD_Handle_setPosition(AUD_Handle *handle, float seekTo)
-{
- assert(handle);
- return (*handle)->seek(seekTo);
-}
-
-float AUD_Handle_getPosition(AUD_Handle *handle)
-{
- assert(handle);
- return (*handle)->getPosition();
-}
-
-AUD_Status AUD_Handle_getStatus(AUD_Handle *handle)
-{
- assert(handle);
- return (*handle)->getStatus();
-}
-
-int AUD_Device_setListenerLocation(const float location[3])
-{
- if (AUD_3ddevice) {
- AUD_Vector3 v(location[0], location[1], location[2]);
- AUD_3ddevice->setListenerLocation(v);
- return true;
- }
-
- return false;
-}
-
-int AUD_Device_setListenerVelocity(const float velocity[3])
-{
- if (AUD_3ddevice) {
- AUD_Vector3 v(velocity[0], velocity[1], velocity[2]);
- AUD_3ddevice->setListenerVelocity(v);
- return true;
- }
-
- return false;
-}
-
-int AUD_Device_setListenerOrientation(const float orientation[4])
-{
- if (AUD_3ddevice) {
- AUD_Quaternion q(orientation[3], orientation[0], orientation[1], orientation[2]);
- AUD_3ddevice->setListenerOrientation(q);
- return true;
- }
-
- return false;
-}
-
-int AUD_Device_setSpeedOfSound(void* device, float speed)
-{
- if (AUD_3ddevice) {
- AUD_3ddevice->setSpeedOfSound(speed);
- return true;
- }
-
- return false;
-}
-
-int AUD_Device_setDopplerFactor(void* device, float factor)
-{
- if (AUD_3ddevice) {
- AUD_3ddevice->setDopplerFactor(factor);
- return true;
- }
-
- return false;
-}
-
-int AUD_Device_setDistanceModel(void* device, AUD_DistanceModel model)
-{
- if (AUD_3ddevice) {
- AUD_3ddevice->setDistanceModel(model);
- return true;
- }
-
- return false;
-}
-
-int AUD_Handle_setLocation(AUD_Handle *handle, const float location[3])
-{
- assert(handle);
- boost::shared_ptr<AUD_I3DHandle> h = boost::dynamic_pointer_cast<AUD_I3DHandle>(*handle);
-
- if (h.get()) {
- AUD_Vector3 v(location[0], location[1], location[2]);
- return h->setSourceLocation(v);
- }
-
- return false;
-}
-
-int AUD_Handle_setVelocity(AUD_Handle *handle, const float velocity[3])
-{
- assert(handle);
- boost::shared_ptr<AUD_I3DHandle> h = boost::dynamic_pointer_cast<AUD_I3DHandle>(*handle);
-
- if (h.get()) {
- AUD_Vector3 v(velocity[0], velocity[1], velocity[2]);
- return h->setSourceVelocity(v);
- }
-
- return false;
-}
-
-int AUD_Handle_setOrientation(AUD_Handle *handle, const float orientation[4])
-{
- assert(handle);
- boost::shared_ptr<AUD_I3DHandle> h = boost::dynamic_pointer_cast<AUD_I3DHandle>(*handle);
-
- if (h.get()) {
- AUD_Quaternion q(orientation[3], orientation[0], orientation[1], orientation[2]);
- return h->setSourceOrientation(q);
- }
-
- return false;
-}
-
-int AUD_Handle_setRelative(AUD_Handle *handle, int relative)
-{
- assert(handle);
- boost::shared_ptr<AUD_I3DHandle> h = boost::dynamic_pointer_cast<AUD_I3DHandle>(*handle);
-
- if (h.get()) {
- return h->setRelative(relative);
- }
-
- return false;
-}
-
-int AUD_Handle_setVolumeMaximum(AUD_Handle *handle, float volume)
-{
- assert(handle);
- boost::shared_ptr<AUD_I3DHandle> h = boost::dynamic_pointer_cast<AUD_I3DHandle>(*handle);
-
- if (h.get()) {
- return h->setVolumeMaximum(volume);
- }
-
- return false;
-}
-
-int AUD_Handle_setVolumeMinimum(AUD_Handle *handle, float volume)
-{
- assert(handle);
- boost::shared_ptr<AUD_I3DHandle> h = boost::dynamic_pointer_cast<AUD_I3DHandle>(*handle);
-
- if (h.get()) {
- return h->setVolumeMinimum(volume);
- }
-
- return false;
-}
-
-int AUD_Handle_setDistanceMaximum(AUD_Handle *handle, float distance)
-{
- assert(handle);
- boost::shared_ptr<AUD_I3DHandle> h = boost::dynamic_pointer_cast<AUD_I3DHandle>(*handle);
-
- if (h.get()) {
- return h->setDistanceMaximum(distance);
- }
-
- return false;
-}
-
-int AUD_Handle_setDistanceReference(AUD_Handle *handle, float distance)
-{
- assert(handle);
- boost::shared_ptr<AUD_I3DHandle> h = boost::dynamic_pointer_cast<AUD_I3DHandle>(*handle);
-
- if (h.get()) {
- return h->setDistanceReference(distance);
- }
-
- return false;
-}
-
-int AUD_Handle_setAttenuation(AUD_Handle *handle, float factor)
-{
- assert(handle);
- boost::shared_ptr<AUD_I3DHandle> h = boost::dynamic_pointer_cast<AUD_I3DHandle>(*handle);
-
- if (h.get()) {
- return h->setAttenuation(factor);
- }
-
- return false;
-}
-
-int AUD_Handle_setConeAngleOuter(AUD_Handle *handle, float angle)
-{
- assert(handle);
- boost::shared_ptr<AUD_I3DHandle> h = boost::dynamic_pointer_cast<AUD_I3DHandle>(*handle);
-
- if (h.get()) {
- return h->setConeAngleOuter(angle);
- }
-
- return false;
-}
-
-int AUD_Handle_setConeAngleInner(AUD_Handle *handle, float angle)
-{
- assert(handle);
- boost::shared_ptr<AUD_I3DHandle> h = boost::dynamic_pointer_cast<AUD_I3DHandle>(*handle);
-
- if (h.get()) {
- return h->setConeAngleInner(angle);
- }
-
- return false;
-}
-
-int AUD_Handle_setConeVolumeOuter(AUD_Handle *handle, float volume)
-{
- assert(handle);
- boost::shared_ptr<AUD_I3DHandle> h = boost::dynamic_pointer_cast<AUD_I3DHandle>(*handle);
-
- if (h.get()) {
- return h->setConeVolumeOuter(volume);
- }
-
- return false;
-}
-
-int AUD_Handle_setVolume(AUD_Handle *handle, float volume)
-{
- assert(handle);
- try {
- return (*handle)->setVolume(volume);
- }
- catch(AUD_Exception&) {}
- return false;
-}
-
-int AUD_Handle_setPitch(AUD_Handle *handle, float pitch)
-{
- assert(handle);
- try {
- return (*handle)->setPitch(pitch);
- }
- catch(AUD_Exception&) {}
- return false;
-}
-
-AUD_Device *AUD_openReadDevice(AUD_DeviceSpecs specs)
-{
- try {
- return new AUD_Device(new AUD_ReadDevice(specs));
- }
- catch(AUD_Exception&)
- {
- return NULL;
- }
-}
-
-AUD_Handle *AUD_playDevice(AUD_Device *device, AUD_Sound *sound, float seek)
-{
- assert(device);
- assert(sound);
-
- try {
- AUD_Handle handle = (*device)->play(*sound);
- if (handle.get()) {
- handle->seek(seek);
- return new AUD_Handle(handle);
- }
- }
- catch(AUD_Exception&)
- {
- }
- return NULL;
-}
-
-int AUD_setDeviceVolume(AUD_Device *device, float volume)
-{
- assert(device);
-
- try {
- (*device)->setVolume(volume);
- return true;
- }
- catch(AUD_Exception&) {}
-
- return false;
-}
-
-int AUD_Device_read(AUD_Device *device, data_t *buffer, int length)
-{
- assert(device);
- assert(buffer);
-
- try {
- return boost::dynamic_pointer_cast<AUD_ReadDevice>(*device)->read(buffer, length);
- }
- catch(AUD_Exception&)
- {
- return false;
- }
-}
-
-void AUD_Device_free(AUD_Device *device)
-{
- try {
- if(device != &AUD_device)
- delete device;
- }
- catch(AUD_Exception&)
- {
- }
-}
-
-float *AUD_readSoundBuffer(const char *filename, float low, float high,
- float attack, float release, float threshold,
- int accumulate, int additive, int square,
- float sthreshold, double samplerate, int *length)
-{
- AUD_Buffer buffer;
- AUD_DeviceSpecs specs;
- specs.channels = AUD_CHANNELS_MONO;
- specs.rate = (AUD_SampleRate)samplerate;
- boost::shared_ptr<AUD_IFactory> sound;
-
- boost::shared_ptr<AUD_IFactory> file = boost::shared_ptr<AUD_IFactory>(new AUD_FileFactory(filename));
-
- int position = 0;
-
- try {
- boost::shared_ptr<AUD_IReader> reader = file->createReader();
-
- AUD_SampleRate rate = reader->getSpecs().rate;
-
- sound = boost::shared_ptr<AUD_IFactory>(new AUD_ChannelMapperFactory(file, specs));
-
- if (high < rate)
- sound = boost::shared_ptr<AUD_IFactory>(new AUD_LowpassFactory(sound, high));
- if (low > 0)
- sound = boost::shared_ptr<AUD_IFactory>(new AUD_HighpassFactory(sound, low));
-
- sound = boost::shared_ptr<AUD_IFactory>(new AUD_EnvelopeFactory(sound, attack, release, threshold, 0.1f));
- sound = boost::shared_ptr<AUD_IFactory>(new AUD_LinearResampleFactory(sound, specs));
-
- if (square)
- sound = boost::shared_ptr<AUD_IFactory>(new AUD_SquareFactory(sound, sthreshold));
-
- if (accumulate)
- sound = boost::shared_ptr<AUD_IFactory>(new AUD_AccumulatorFactory(sound, additive));
- else if (additive)
- sound = boost::shared_ptr<AUD_IFactory>(new AUD_SumFactory(sound));
-
- reader = sound->createReader();
-
- if (!reader.get())
- return NULL;
-
- int len;
- bool eos;
- do
- {
- len = samplerate;
- buffer.resize((position + len) * sizeof(float), true);
- reader->read(len, eos, buffer.getBuffer() + position);
- position += len;
- } while(!eos);
- }
- catch(AUD_Exception&)
- {
- return NULL;
- }
-
- float * result = (float *)malloc(position * sizeof(float));
- memcpy(result, buffer.getBuffer(), position * sizeof(float));
- *length = position;
- return result;
-}
-
-static void pauseSound(AUD_Handle *handle)
-{
- assert(handle);
- (*handle)->pause();
-}
-
-AUD_Handle *AUD_pauseAfter(AUD_Handle *handle, float seconds)
-{
- boost::shared_ptr<AUD_IFactory> silence = boost::shared_ptr<AUD_IFactory>(new AUD_SilenceFactory);
- boost::shared_ptr<AUD_IFactory> limiter = boost::shared_ptr<AUD_IFactory>(new AUD_LimiterFactory(silence, 0, seconds));
-
- AUD_MutexLock lock(*AUD_device);
-
- try {
- AUD_Handle handle2 = AUD_device->play(limiter);
- if (handle2.get()) {
- handle2->setStopCallback((stopCallback)pauseSound, handle);
- return new AUD_Handle(handle2);
- }
- }
- catch(AUD_Exception&)
- {
- }
-
- return NULL;
-}
-
-AUD_Sound *AUD_Sequence_create(float fps, int muted)
-{
- // specs are changed at a later point!
- AUD_Specs specs;
- specs.channels = AUD_CHANNELS_STEREO;
- specs.rate = AUD_RATE_48000;
- AUD_Sound *sequencer = new AUD_Sound(boost::shared_ptr<AUD_SequencerFactory>(new AUD_SequencerFactory(specs, fps, muted)));
- return sequencer;
-}
-
-void AUD_Sequence_free(AUD_Sound *sequencer)
-{
- delete sequencer;
-}
-
-void AUD_Sequence_setMuted(AUD_Sound *sequencer, int muted)
-{
- dynamic_cast<AUD_SequencerFactory *>(sequencer->get())->mute(muted);
-}
-
-void AUD_Sequence_setFPS(AUD_Sound *sequencer, float fps)
-{
- dynamic_cast<AUD_SequencerFactory *>(sequencer->get())->setFPS(fps);
-}
-
-AUD_SEntry *AUD_Sequence_add(AUD_Sound *sequencer, AUD_Sound *sound,
- float begin, float end, float skip)
-{
- if (!sound)
- return new AUD_SEntry(((AUD_SequencerFactory *)sequencer->get())->add(AUD_Sound(), begin, end, skip));
- return new AUD_SEntry(((AUD_SequencerFactory *)sequencer->get())->add(*sound, begin, end, skip));
-}
-
-void AUD_Sequence_remove(AUD_Sound *sequencer, AUD_SEntry *entry)
-{
- dynamic_cast<AUD_SequencerFactory *>(sequencer->get())->remove(*entry);
- delete entry;
-}
-
-void AUD_SequenceEntry_move(AUD_SEntry *entry, float begin, float end, float skip)
-{
- (*entry)->move(begin, end, skip);
-}
-
-void AUD_SequenceEntry_setMuted(AUD_SEntry *entry, char mute)
-{
- (*entry)->mute(mute);
-}
-
-void AUD_SequenceEntry_setSound(AUD_SEntry *entry, AUD_Sound *sound)
-{
- if (sound)
- (*entry)->setSound(*sound);
- else
- (*entry)->setSound(AUD_Sound());
-}
-
-void AUD_SequenceEntry_setAnimationData(AUD_SEntry *entry, AUD_AnimateablePropertyType type, int frame, float *data, char animated)
-{
- AUD_AnimateableProperty *prop = (*entry)->getAnimProperty(type);
- if (animated) {
- if (frame >= 0)
- prop->write(data, frame, 1);
- }
- else {
- prop->write(data);
- }
-}
-
-void AUD_Sequence_setAnimationData(AUD_Sound *sequencer, AUD_AnimateablePropertyType type, int frame, float *data, char animated)
-{
- AUD_AnimateableProperty *prop = dynamic_cast<AUD_SequencerFactory *>(sequencer->get())->getAnimProperty(type);
- if (animated) {
- if (frame >= 0) {
- prop->write(data, frame, 1);
- }
- }
- else {
- prop->write(data);
- }
-}
-
-void AUD_Sequence_setDistanceModel(AUD_Sound* sequence, AUD_DistanceModel value)
-{
- assert(sequence);
- dynamic_cast<AUD_SequencerFactory *>(sequence->get())->setDistanceModel(static_cast<AUD_DistanceModel>(value));
-}
-
-void AUD_Sequence_setDopplerFactor(AUD_Sound* sequence, float value)
-{
- assert(sequence);
- dynamic_cast<AUD_SequencerFactory *>(sequence->get())->setDopplerFactor(value);
-}
-
-void AUD_Sequence_setSpeedOfSound(AUD_Sound* sequence, float value)
-{
- assert(sequence);
- dynamic_cast<AUD_SequencerFactory *>(sequence->get())->setSpeedOfSound(value);
-}
-
-void AUD_SequenceEntry_setAttenuation(AUD_SEntry* sequence_entry, float value)
-{
- assert(sequence_entry);
- (*sequence_entry)->setAttenuation(value);
-}
-
-void AUD_SequenceEntry_setConeAngleInner(AUD_SEntry* sequence_entry, float value)
-{
- assert(sequence_entry);
- (*sequence_entry)->setConeAngleInner(value);
-}
-
-void AUD_SequenceEntry_setConeAngleOuter(AUD_SEntry* sequence_entry, float value)
-{
- assert(sequence_entry);
- (*sequence_entry)->setConeAngleOuter(value);
-}
-
-void AUD_SequenceEntry_setConeVolumeOuter(AUD_SEntry* sequence_entry, float value)
-{
- assert(sequence_entry);
- (*sequence_entry)->setConeVolumeOuter(value);
-}
-
-void AUD_SequenceEntry_setDistanceMaximum(AUD_SEntry* sequence_entry, float value)
-{
- assert(sequence_entry);
- (*sequence_entry)->setDistanceMaximum(value);
-}
-
-void AUD_SequenceEntry_setDistanceReference(AUD_SEntry* sequence_entry, float value)
-{
- assert(sequence_entry);
- (*sequence_entry)->setDistanceReference(value);
-}
-
-void AUD_SequenceEntry_setRelative(AUD_SEntry* sequence_entry, int value)
-{
- assert(sequence_entry);
- (*sequence_entry)->setRelative(value);
-}
-
-void AUD_SequenceEntry_setVolumeMaximum(AUD_SEntry* sequence_entry, float value)
-{
- assert(sequence_entry);
- (*sequence_entry)->setVolumeMaximum(value);
-}
-
-void AUD_SequenceEntry_setVolumeMinimum(AUD_SEntry* sequence_entry, float value)
-{
- assert(sequence_entry);
- (*sequence_entry)->setVolumeMinimum(value);
-}
-
-void AUD_setSequencerDeviceSpecs(AUD_Sound *sequencer)
-{
- dynamic_cast<AUD_SequencerFactory *>(sequencer->get())->setSpecs(AUD_device->getSpecs().specs);
-}
-
-void AUD_Sequence_setSpecs(AUD_Sound *sequencer, AUD_Specs specs)
-{
- dynamic_cast<AUD_SequencerFactory *>(sequencer->get())->setSpecs(specs);
-}
-
-void AUD_seekSynchronizer(AUD_Handle *handle, float time)
-{
-#ifdef WITH_JACK
- AUD_JackDevice *device = dynamic_cast<AUD_JackDevice *>(AUD_device.get());
- if (device) {
- device->seekPlayback(time);
- }
- else
-#endif
- {
- assert(handle);
- (*handle)->seek(time);
- }
-}
-
-float AUD_getSynchronizerPosition(AUD_Handle *handle)
-{
-#ifdef WITH_JACK
- AUD_JackDevice *device = dynamic_cast<AUD_JackDevice *>(AUD_device.get());
- if (device) {
- return device->getPlaybackPosition();
- }
- else
-#endif
- {
- assert(handle);
- return (*handle)->getPosition();
- }
-}
-
-void AUD_playSynchronizer()
-{
-#ifdef WITH_JACK
- AUD_JackDevice *device = dynamic_cast<AUD_JackDevice *>(AUD_device.get());
- if (device) {
- device->startPlayback();
- }
-#endif
-}
-
-void AUD_stopSynchronizer()
-{
-#ifdef WITH_JACK
- AUD_JackDevice *device = dynamic_cast<AUD_JackDevice *>(AUD_device.get());
- if (device) {
- device->stopPlayback();
- }
-#endif
-}
-
-#ifdef WITH_JACK
-void AUD_setSynchronizerCallback(AUD_syncFunction function, void *data)
-{
- AUD_JackDevice *device = dynamic_cast<AUD_JackDevice *>(AUD_device.get());
- if (device) {
- device->setSyncCallback(function, data);
- }
-}
-#endif
-
-int AUD_isSynchronizerPlaying()
-{
-#ifdef WITH_JACK
- AUD_JackDevice *device = dynamic_cast<AUD_JackDevice *>(AUD_device.get());
- if (device) {
- return device->doesPlayback();
- }
-#endif
- return -1;
-}
-
-int AUD_readSound(AUD_Sound *sound, sample_t *buffer, int length, int samples_per_second, short *interrupt)
-{
- AUD_DeviceSpecs specs;
- sample_t *buf;
- AUD_Buffer aBuffer;
-
- specs.rate = AUD_RATE_INVALID;
- specs.channels = AUD_CHANNELS_MONO;
- specs.format = AUD_FORMAT_INVALID;
-
- boost::shared_ptr<AUD_IReader> reader = AUD_ChannelMapperFactory(*sound, specs).createReader();
-
- specs.specs = reader->getSpecs();
- int len;
- float samplejump = specs.rate / samples_per_second;
- float min, max, power, overallmax;
- bool eos;
-
- overallmax = 0;
-
- for (int i = 0; i < length; i++) {
- len = floor(samplejump * (i+1)) - floor(samplejump * i);
-
- if (*interrupt) {
- return 0;
- }
- aBuffer.assureSize(len * AUD_SAMPLE_SIZE(specs));
- buf = aBuffer.getBuffer();
-
- reader->read(len, eos, buf);
-
- max = min = *buf;
- power = *buf * *buf;
- for (int j = 1; j < len; j++) {
- if (buf[j] < min)
- min = buf[j];
- if (buf[j] > max)
- max = buf[j];
- power += buf[j] * buf[j];
- }
-
- buffer[i * 3] = min;
- buffer[i * 3 + 1] = max;
- buffer[i * 3 + 2] = sqrt(power) / len;
-
- if (overallmax < max)
- overallmax = max;
- if (overallmax < -min)
- overallmax = -min;
-
- if (eos) {
- length = i;
- break;
- }
- }
-
- if (overallmax > 1.0f) {
- for (int i = 0; i < length * 3; i++) {
- buffer[i] /= overallmax;
- }
- }
-
- return length;
-}
-
-AUD_Sound *AUD_Sound_copy(AUD_Sound *sound)
-{
- return new boost::shared_ptr<AUD_IFactory>(*sound);
-}
-
-void AUD_Handle_free(AUD_Handle *handle)
-{
- delete handle;
-}
-
-const char *AUD_mixdown(AUD_Sound *sound, unsigned int start, unsigned int length, unsigned int buffersize, const char *filename, AUD_DeviceSpecs specs, AUD_Container format, AUD_Codec codec, unsigned int bitrate)
-{
- try {
- AUD_SequencerFactory *f = dynamic_cast<AUD_SequencerFactory *>(sound->get());
-
- f->setSpecs(specs.specs);
- boost::shared_ptr<AUD_IReader> reader = f->createQualityReader();
- reader->seek(start);
- boost::shared_ptr<AUD_IWriter> writer = AUD_FileWriter::createWriter(filename, specs, format, codec, bitrate);
- AUD_FileWriter::writeReader(reader, writer, length, buffersize);
-
- return NULL;
- }
- catch(AUD_Exception& e)
- {
- return e.str;
- }
-}
-
-const char *AUD_mixdown_per_channel(AUD_Sound *sound, unsigned int start, unsigned int length, unsigned int buffersize, const char *filename, AUD_DeviceSpecs specs, AUD_Container format, AUD_Codec codec, unsigned int bitrate)
-{
- try {
- AUD_SequencerFactory *f = dynamic_cast<AUD_SequencerFactory *>(sound->get());
-
- f->setSpecs(specs.specs);
-
- std::vector<boost::shared_ptr<AUD_IWriter> > writers;
-
- int channels = specs.channels;
- specs.channels = AUD_CHANNELS_MONO;
-
- for (int i = 0; i < channels; i++) {
- std::stringstream stream;
- std::string fn = filename;
- size_t index = fn.find_last_of('.');
- size_t index_slash = fn.find_last_of('/');
- size_t index_backslash = fn.find_last_of('\\');
-
- if ((index == std::string::npos) ||
- ((index < index_slash) && (index_slash != std::string::npos)) ||
- ((index < index_backslash) && (index_backslash != std::string::npos)))
- {
- stream << filename << "_" << (i + 1);
- }
- else {
- stream << fn.substr(0, index) << "_" << (i + 1) << fn.substr(index);
- }
- writers.push_back(AUD_FileWriter::createWriter(stream.str(), specs, format, codec, bitrate));
- }
-
- boost::shared_ptr<AUD_IReader> reader = f->createQualityReader();
- reader->seek(start);
- AUD_FileWriter::writeReader(reader, writers, length, buffersize);
-
- return NULL;
- }
- catch(AUD_Exception& e)
- {
- return e.str;
- }
-}
-
-AUD_Device *AUD_openMixdownDevice(AUD_DeviceSpecs specs, AUD_Sound *sequencer, float volume, float start)
-{
- try {
- AUD_ReadDevice *device = new AUD_ReadDevice(specs);
- device->setQuality(true);
- device->setVolume(volume);
-
- AUD_SequencerFactory *f = dynamic_cast<AUD_SequencerFactory *>(sequencer->get());
-
- f->setSpecs(specs.specs);
-
- AUD_Handle handle = device->play(f->createQualityReader());
- if (handle.get()) {
- handle->seek(start);
- }
-
- return new AUD_Device(device);
- }
- catch(AUD_Exception&)
- {
- return NULL;
- }
-}
-
-AUD_Device *AUD_Device_getCurrent(void)
-{
- return &AUD_device;
-}
-
-int AUD_isJackSupported(void)
-{
-#ifdef WITH_JACK
- return AUD_jack_supported();
-#else
- return 0;
-#endif
-}
diff --git a/intern/audaspace/intern/AUD_C-API.h b/intern/audaspace/intern/AUD_C-API.h
deleted file mode 100644
index cc9059a8e09..00000000000
--- a/intern/audaspace/intern/AUD_C-API.h
+++ /dev/null
@@ -1,822 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file AUD_C-API.h
- * \ingroup audaspace
- */
-
-#ifndef __AUD_C_API_H__
-#define __AUD_C_API_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "AUD_Space.h"
-
-/// Supported output devices.
-typedef enum
-{
- AUD_NULL_DEVICE = 0,
- AUD_SDL_DEVICE,
- AUD_OPENAL_DEVICE,
- AUD_JACK_DEVICE
-} AUD_DeviceType;
-
-/// Sound information structure.
-typedef struct
-{
- AUD_Specs specs;
- float length;
-} AUD_SoundInfo;
-
-#ifndef AUD_CAPI_IMPLEMENTATION
- typedef void AUD_Sound;
- typedef void AUD_Handle;
- typedef void AUD_Device;
- typedef void AUD_SEntry;
- typedef float (*AUD_volumeFunction)(void *, void *, float);
- typedef void (*AUD_syncFunction)(void *, int, float);
-#endif
-
-/**
- * Initializes audio routines (FFMPEG/JACK if it is enabled).
- */
-extern void AUD_initOnce(void);
-
-/**
- * Unitinitializes an audio routines.
- */
-extern void AUD_exitOnce(void);
-
-/**
- * Initializes an audio device.
- * \param device The device type that should be used.
- * \param specs The audio specification to be used.
- * \param buffersize The buffersize for the device.
- * \return Whether the device has been initialized.
- */
-extern AUD_Device* AUD_init(const char* device, AUD_DeviceSpecs specs, int buffersize, const char* name);
-
-/**
- * Unitinitializes an audio device.
- */
-extern void AUD_exit(AUD_Device* device);
-
-/**
- * Locks the playback device.
- */
-extern void AUD_Device_lock(AUD_Device* device);
-
-/**
- * Unlocks the device.
- */
-extern void AUD_Device_unlock(AUD_Device* device);
-
-extern AUD_Channels AUD_Device_getChannels(AUD_Device* device);
-
-extern AUD_SampleRate AUD_Device_getRate(AUD_Device* device);
-
-/**
- * Returns information about a sound.
- * \param sound The sound to get the info about.
- * \return The AUD_SoundInfo structure with filled in data.
- */
-extern AUD_SoundInfo AUD_getInfo(AUD_Sound *sound);
-
-/**
- * Loads a sound file.
- * \param filename The filename of the sound file.
- * \return A handle of the sound file.
- */
-extern AUD_Sound *AUD_Sound_file(const char *filename);
-
-/**
- * Loads a sound file.
- * \param buffer The buffer which contains the sound file.
- * \param size The size of the buffer.
- * \return A handle of the sound file.
- */
-extern AUD_Sound *AUD_Sound_bufferFile(unsigned char *buffer, int size);
-
-/**
- * Buffers a sound.
- * \param sound The sound to buffer.
- * \return A handle of the sound buffer.
- */
-extern AUD_Sound *AUD_Sound_cache(AUD_Sound *sound);
-
-/**
- * Rechannels the sound to be mono.
- * \param sound The sound to rechannel.
- * \return The mono sound.
- */
-extern AUD_Sound *AUD_Sound_rechannel(AUD_Sound *sound, AUD_Channels channels);
-
-/**
- * Delays a sound.
- * \param sound The sound to dealy.
- * \param delay The delay in seconds.
- * \return A handle of the delayed sound.
- */
-extern AUD_Sound *AUD_Sound_delay(AUD_Sound *sound, float delay);
-
-/**
- * Limits a sound.
- * \param sound The sound to limit.
- * \param start The start time in seconds.
- * \param end The stop time in seconds.
- * \return A handle of the limited sound.
- */
-extern AUD_Sound *AUD_Sound_limit(AUD_Sound *sound, float start, float end);
-
-/**
- * Ping pongs a sound.
- * \param sound The sound to ping pong.
- * \return A handle of the ping pong sound.
- */
-extern AUD_Sound *AUD_Sound_pingpong(AUD_Sound *sound);
-
-/**
- * Loops a sound.
- * \param sound The sound to loop.
- * \return A handle of the looped sound.
- */
-extern AUD_Sound *AUD_Sound_loop(AUD_Sound *sound);
-
-/**
- * Sets a remaining loop count of a looping sound that currently plays.
- * \param handle The playback handle.
- * \param loops The count of remaining loops, -1 for infinity.
- * \return Whether the handle is valid.
- */
-extern int AUD_Handle_setLoopCount(AUD_Handle *handle, int loops);
-
-/**
- * Rectifies a sound.
- * \param sound The sound to rectify.
- * \return A handle of the rectified sound.
- */
-extern AUD_Sound *AUD_rectifySound(AUD_Sound *sound);
-
-/**
- * Unloads a sound of any type.
- * \param sound The handle of the sound.
- */
-extern void AUD_Sound_free(AUD_Sound *sound);
-
-/**
- * Plays back a sound file.
- * \param sound The handle of the sound file.
- * \param keep When keep is true the sound source will not be deleted but set to
- * paused when its end has been reached.
- * \return A handle to the played back sound.
- */
-extern AUD_Handle *AUD_Device_play(AUD_Device* device, AUD_Sound *sound, int keep);
-
-/**
- * Pauses a played back sound.
- * \param handle The handle to the sound.
- * \return Whether the handle has been playing or not.
- */
-extern int AUD_Handle_pause(AUD_Handle *handle);
-
-/**
- * Resumes a paused sound.
- * \param handle The handle to the sound.
- * \return Whether the handle has been paused or not.
- */
-extern int AUD_Handle_resume(AUD_Handle *handle);
-
-/**
- * Stops a playing or paused sound.
- * \param handle The handle to the sound.
- * \return Whether the handle has been valid or not.
- */
-extern int AUD_Handle_stop(AUD_Handle *handle);
-
-extern void AUD_Device_stopAll(void* device);
-
-/**
- * Sets the end behaviour of a playing or paused sound.
- * \param handle The handle to the sound.
- * \param keep When keep is true the sound source will not be deleted but set to
- * paused when its end has been reached.
- * \return Whether the handle has been valid or not.
- */
-extern int AUD_Handle_setKeep(AUD_Handle *handle, int keep);
-
-/**
- * Seeks a playing or paused sound.
- * \param handle The handle to the sound.
- * \param seekTo From where the sound file should be played back in seconds.
- * \return Whether the handle has been valid or not.
- */
-extern int AUD_Handle_setPosition(AUD_Handle *handle, float seekTo);
-
-/**
- * Retrieves the playback position of a handle.
- * \param handle The handle to the sound.
- * \return The current playback position in seconds or 0.0 if the handle is
- * invalid.
- */
-extern float AUD_Handle_getPosition(AUD_Handle *handle);
-
-/**
- * Returns the status of a playing, paused or stopped sound.
- * \param handle The handle to the sound.
- * \return The status of the sound behind the handle.
- */
-extern AUD_Status AUD_Handle_getStatus(AUD_Handle *handle);
-
-/**
- * Sets the listener location.
- * \param location The new location.
- */
-extern int AUD_Device_setListenerLocation(const float location[3]);
-
-/**
- * Sets the listener velocity.
- * \param velocity The new velocity.
- */
-extern int AUD_Device_setListenerVelocity(const float velocity[3]);
-
-/**
- * Sets the listener orientation.
- * \param orientation The new orientation as quaternion.
- */
-extern int AUD_Device_setListenerOrientation(const float orientation[4]);
-
-/**
- * Sets the speed of sound.
- * This value is needed for doppler effect calculation.
- * \param speed The new speed of sound.
- */
-extern int AUD_Device_setSpeedOfSound(void* device, float speed);
-
-/**
- * Sets the doppler factor.
- * This value is a scaling factor for the velocity vectors of sources and
- * listener which is used while calculating the doppler effect.
- * \param factor The new doppler factor.
- */
-extern int AUD_Device_setDopplerFactor(void* device, float factor);
-
-/**
- * Sets the distance model.
- * \param model distance model.
- */
-extern int AUD_Device_setDistanceModel(void* device, AUD_DistanceModel model);
-
-/**
- * Sets the location of a source.
- * \param handle The handle of the source.
- * \param location The new location.
- * \return Whether the action succeeded.
- */
-extern int AUD_Handle_setLocation(AUD_Handle *handle, const float location[3]);
-
-/**
- * Sets the velocity of a source.
- * \param handle The handle of the source.
- * \param velocity The new velocity.
- * \return Whether the action succeeded.
- */
-extern int AUD_Handle_setVelocity(AUD_Handle *handle, const float velocity[3]);
-
-/**
- * Sets the orientation of a source.
- * \param handle The handle of the source.
- * \param orientation The new orientation as quaternion.
- * \return Whether the action succeeded.
- */
-extern int AUD_Handle_setOrientation(AUD_Handle *handle, const float orientation[4]);
-
-/**
- * Sets whether the source location, velocity and orientation are relative
- * to the listener.
- * \param handle The handle of the source.
- * \param relative Whether the source is relative.
- * \return Whether the action succeeded.
- */
-extern int AUD_Handle_setRelative(AUD_Handle *handle, int relative);
-
-/**
- * Sets the maximum volume of a source.
- * \param handle The handle of the source.
- * \param volume The new maximum volume.
- * \return Whether the action succeeded.
- */
-extern int AUD_Handle_setVolumeMaximum(AUD_Handle *handle, float volume);
-
-/**
- * Sets the minimum volume of a source.
- * \param handle The handle of the source.
- * \param volume The new minimum volume.
- * \return Whether the action succeeded.
- */
-extern int AUD_Handle_setVolumeMinimum(AUD_Handle *handle, float volume);
-
-/**
- * Sets the maximum distance of a source.
- * If a source is further away from the reader than this distance, the
- * volume will automatically be set to 0.
- * \param handle The handle of the source.
- * \param distance The new maximum distance.
- * \return Whether the action succeeded.
- */
-extern int AUD_Handle_setDistanceMaximum(AUD_Handle *handle, float distance);
-
-/**
- * Sets the reference distance of a source.
- * \param handle The handle of the source.
- * \param distance The new reference distance.
- * \return Whether the action succeeded.
- */
-extern int AUD_Handle_setDistanceReference(AUD_Handle *handle, float distance);
-
-/**
- * Sets the attenuation of a source.
- * This value is used for distance calculation.
- * \param handle The handle of the source.
- * \param factor The new attenuation.
- * \return Whether the action succeeded.
- */
-extern int AUD_Handle_setAttenuation(AUD_Handle *handle, float factor);
-
-/**
- * Sets the outer angle of the cone of a source.
- * \param handle The handle of the source.
- * \param angle The new outer angle of the cone.
- * \return Whether the action succeeded.
- */
-extern int AUD_Handle_setConeAngleOuter(AUD_Handle *handle, float angle);
-
-/**
- * Sets the inner angle of the cone of a source.
- * \param handle The handle of the source.
- * \param angle The new inner angle of the cone.
- * \return Whether the action succeeded.
- */
-extern int AUD_Handle_setConeAngleInner(AUD_Handle *handle, float angle);
-
-/**
- * Sets the outer volume of the cone of a source.
- * The volume between inner and outer angle is interpolated between inner
- * volume and this value.
- * \param handle The handle of the source.
- * \param volume The new outer volume of the cone.
- * \return Whether the action succeeded.
- */
-extern int AUD_Handle_setConeVolumeOuter(AUD_Handle *handle, float volume);
-
-/**
- * Sets the volume of a played back sound.
- * \param handle The handle to the sound.
- * \param volume The new volume, must be between 0.0 and 1.0.
- * \return Whether the action succeeded.
- */
-extern int AUD_Handle_setVolume(AUD_Handle *handle, float volume);
-
-/**
- * Sets the pitch of a played back sound.
- * \param handle The handle to the sound.
- * \param pitch The new pitch.
- * \return Whether the action succeeded.
- */
-extern int AUD_Handle_setPitch(AUD_Handle *handle, float pitch);
-
-/**
- * Opens a read device, with which audio data can be read.
- * \param specs The specification of the audio data.
- * \return A device handle.
- */
-extern AUD_Device *AUD_openReadDevice(AUD_DeviceSpecs specs);
-
-/**
- * Sets the main volume of a device.
- * \param device The device.
- * \param volume The new volume, must be between 0.0 and 1.0.
- * \return Whether the action succeeded.
- */
-extern int AUD_setDeviceVolume(AUD_Device *device, float volume);
-
-/**
- * Plays back a sound file through a read device.
- * \param device The read device.
- * \param sound The handle of the sound file.
- * \param seek The position where the sound should be seeked to.
- * \return A handle to the played back sound.
- */
-extern AUD_Handle *AUD_playDevice(AUD_Device *device, AUD_Sound *sound, float seek);
-
-/**
- * Reads the next samples into the supplied buffer.
- * \param device The read device.
- * \param buffer The target buffer.
- * \param length The length in samples to be filled.
- * \return True if the reading succeeded, false if there are no sounds
- * played back currently, in that case the buffer is filled with
- * silence.
- */
-extern int AUD_Device_read(AUD_Device *device, data_t *buffer, int length);
-
-/**
- * Closes a read device.
- * \param device The read device.
- */
-extern void AUD_Device_free(AUD_Device *device);
-
-/**
- * Reads a sound file into a newly created float buffer.
- * The sound is therefore bandpassed, rectified and resampled.
- */
-extern float *AUD_readSoundBuffer(const char *filename, float low, float high,
- float attack, float release, float threshold,
- int accumulate, int additive, int square,
- float sthreshold, double samplerate,
- int *length);
-
-/**
- * Pauses a playing sound after a specific amount of time.
- * \param handle The handle to the sound.
- * \param seconds The time in seconds.
- * \return The silence handle.
- */
-extern AUD_Handle *AUD_pauseAfter(AUD_Handle *handle, float seconds);
-
-/**
- * Creates a new sequenced sound scene.
- * \param fps The FPS of the scene.
- * \param muted Whether the scene is muted.
- * \return The new sound scene.
- */
-extern AUD_Sound *AUD_Sequence_create(float fps, int muted);
-
-/**
- * Deletes a sound scene.
- * \param sequencer The sound scene.
- */
-extern void AUD_Sequence_free(AUD_Sound *sequencer);
-
-/**
- * Sets the muting state of the scene.
- * \param sequencer The sound scene.
- * \param muted Whether the scene is muted.
- */
-extern void AUD_Sequence_setMuted(AUD_Sound *sequencer, int muted);
-
-/**
- * Sets the scene's FPS.
- * \param sequencer The sound scene.
- * \param fps The new FPS.
- */
-extern void AUD_Sequence_setFPS(AUD_Sound *sequencer, float fps);
-
-/**
- * Adds a new entry to the scene.
- * \param sequencer The sound scene.
- * \param sound The sound this entry should play.
- * \param begin The start time.
- * \param end The end time or a negative value if determined by the sound.
- * \param skip How much seconds should be skipped at the beginning.
- * \return The entry added.
- */
-extern AUD_SEntry *AUD_Sequence_add(AUD_Sound *sequencer, AUD_Sound *sound,
- float begin, float end, float skip);
-
-/**
- * Removes an entry from the scene.
- * \param sequencer The sound scene.
- * \param entry The entry to remove.
- */
-extern void AUD_Sequence_remove(AUD_Sound *sequencer, AUD_SEntry *entry);
-
-/**
- * Moves the entry.
- * \param entry The sequenced entry.
- * \param begin The new start time.
- * \param end The new end time or a negative value if unknown.
- * \param skip How many seconds to skip at the beginning.
- */
-extern void AUD_SequenceEntry_move(AUD_SEntry *entry, float begin, float end, float skip);
-
-/**
- * Sets the muting state of the entry.
- * \param entry The sequenced entry.
- * \param mute Whether the entry should be muted or not.
- */
-extern void AUD_SequenceEntry_setMuted(AUD_SEntry *entry, char mute);
-
-/**
- * Sets the sound of the entry.
- * \param entry The sequenced entry.
- * \param sound The new sound.
- */
-extern void AUD_SequenceEntry_setSound(AUD_SEntry *entry, AUD_Sound *sound);
-
-/**
- * Writes animation data to a sequenced entry.
- * \param entry The sequenced entry.
- * \param type The type of animation data.
- * \param frame The frame this data is for.
- * \param data The data to write.
- * \param animated Whether the attribute is animated.
- */
-extern void AUD_SequenceEntry_setAnimationData(AUD_SEntry *entry, AUD_AnimateablePropertyType type, int frame, float *data, char animated);
-
-/**
- * Writes animation data to a sequenced entry.
- * \param sequencer The sound scene.
- * \param type The type of animation data.
- * \param frame The frame this data is for.
- * \param data The data to write.
- * \param animated Whether the attribute is animated.
- */
-extern void AUD_Sequence_setAnimationData(AUD_Sound *sequencer, AUD_AnimateablePropertyType type, int frame, float *data, char animated);
-
-/**
- * Sets the distance model of a sequence.
- * param sequence The sequence to set the distance model from.
- * param value The new distance model to set.
- */
-extern void AUD_Sequence_setDistanceModel(AUD_Sound* sequence, AUD_DistanceModel value);
-
-/**
- * Sets the doppler factor of a sequence.
- * param sequence The sequence to set the doppler factor from.
- * param value The new doppler factor to set.
- */
-extern void AUD_Sequence_setDopplerFactor(AUD_Sound* sequence, float value);
-
-/**
- * Sets the speed of sound of a sequence.
- * param sequence The sequence to set the speed of sound from.
- * param value The new speed of sound to set.
- */
-extern void AUD_Sequence_setSpeedOfSound(AUD_Sound* sequence, float value);
-/**
- * Sets the attenuation of a sequence_entry.
- * param sequence_entry The sequence_entry to set the attenuation from.
- * param value The new attenuation to set.
- */
-extern void AUD_SequenceEntry_setAttenuation(AUD_SEntry* sequence_entry, float value);
-
-/**
- * Sets the cone angle inner of a sequence_entry.
- * param sequence_entry The sequence_entry to set the cone angle inner from.
- * param value The new cone angle inner to set.
- */
-extern void AUD_SequenceEntry_setConeAngleInner(AUD_SEntry* sequence_entry, float value);
-
-/**
- * Sets the cone angle outer of a sequence_entry.
- * param sequence_entry The sequence_entry to set the cone angle outer from.
- * param value The new cone angle outer to set.
- */
-extern void AUD_SequenceEntry_setConeAngleOuter(AUD_SEntry* sequence_entry, float value);
-
-/**
- * Sets the cone volume outer of a sequence_entry.
- * param sequence_entry The sequence_entry to set the cone volume outer from.
- * param value The new cone volume outer to set.
- */
-extern void AUD_SequenceEntry_setConeVolumeOuter(AUD_SEntry* sequence_entry, float value);
-
-/**
- * Sets the distance maximum of a sequence_entry.
- * param sequence_entry The sequence_entry to set the distance maximum from.
- * param value The new distance maximum to set.
- */
-extern void AUD_SequenceEntry_setDistanceMaximum(AUD_SEntry* sequence_entry, float value);
-
-/**
- * Sets the distance reference of a sequence_entry.
- * param sequence_entry The sequence_entry to set the distance reference from.
- * param value The new distance reference to set.
- */
-extern void AUD_SequenceEntry_setDistanceReference(AUD_SEntry* sequence_entry, float value);
-
-/**
- * Sets the relative of a sequence_entry.
- * param sequence_entry The sequence_entry to set the relative from.
- * param value The new relative to set.
- */
-extern void AUD_SequenceEntry_setRelative(AUD_SEntry* sequence_entry, int value);
-
-/**
- * Sets the volume maximum of a sequence_entry.
- * param sequence_entry The sequence_entry to set the volume maximum from.
- * param value The new volume maximum to set.
- */
-extern void AUD_SequenceEntry_setVolumeMaximum(AUD_SEntry* sequence_entry, float value);
-
-/**
- * Sets the volume minimum of a sequence_entry.
- * param sequence_entry The sequence_entry to set the volume minimum from.
- * param value The new volume minimum to set.
- */
-extern void AUD_SequenceEntry_setVolumeMinimum(AUD_SEntry* sequence_entry, float value);
-
-/**
- * Sets the audio output specification of the sound scene to the specs of the
- * current playback device.
- * \param sequencer The sound scene.
- */
-extern void AUD_setSequencerDeviceSpecs(AUD_Sound *sequencer);
-
-/**
- * Sets the audio output specification of the sound scene.
- * \param sequencer The sound scene.
- * \param specs The new specification.
- */
-extern void AUD_Sequence_setSpecs(AUD_Sound *sequencer, AUD_Specs specs);
-
-/**
- * Seeks sequenced sound scene playback.
- * \param handle Playback handle.
- * \param time Time in seconds to seek to.
- */
-extern void AUD_seekSynchronizer(AUD_Handle *handle, float time);
-
-/**
- * Returns the current sound scene playback time.
- * \param handle Playback handle.
- * \return The playback time in seconds.
- */
-extern float AUD_getSynchronizerPosition(AUD_Handle *handle);
-
-/**
- * Starts the playback of jack transport if possible.
- */
-extern void AUD_playSynchronizer(void);
-
-/**
- * Stops the playback of jack transport if possible.
- */
-extern void AUD_stopSynchronizer(void);
-
-#ifdef WITH_JACK
-/**
- * Sets the sync callback for jack transport.
- * \param function The callback function.
- * \param data The data parameter for the callback.
- */
-extern void AUD_setSynchronizerCallback(AUD_syncFunction function, void *data);
-#endif
-
-/**
- * Returns whether jack transport is currently playing.
- * \return Whether jack transport is currently playing.
- */
-extern int AUD_isSynchronizerPlaying(void);
-
-/**
- * Reads a sound into a buffer for drawing at a specific sampling rate.
- * \param sound The sound to read.
- * \param buffer The buffer to write to. Must have a size of 3*4*length.
- * \param length How many samples to read from the sound.
- * \param samples_per_second How many samples to read per second of the sound.
- * \return How many samples really have been read. Always <= length.
- */
-extern int AUD_readSound(AUD_Sound *sound, sample_t *buffer, int length, int samples_per_second, short *interrupt);
-
-/**
- * Copies a sound.
- * \param sound Sound to copy.
- * \return Copied sound.
- */
-extern AUD_Sound *AUD_Sound_copy(AUD_Sound *sound);
-
-/**
- * Frees a handle.
- * \param channel Handle to free.
- */
-extern void AUD_Handle_free(AUD_Handle *channel);
-
-/**
- * Creates a new set.
- * \return The new set.
- */
-extern void *AUD_createSet(void);
-
-/**
- * Deletes a set.
- * \param set The set to delete.
- */
-extern void AUD_destroySet(void *set);
-
-/**
- * Removes an entry from a set.
- * \param set The set work on.
- * \param entry The entry to remove.
- * \return Whether the entry was in the set or not.
- */
-extern char AUD_removeSet(void *set, void *entry);
-
-/**
- * Adds a new entry to a set.
- * \param set The set work on.
- * \param entry The entry to add.
- */
-extern void AUD_addSet(void *set, void *entry);
-
-/**
- * Removes one entry from a set and returns it.
- * \param set The set work on.
- * \return The entry or NULL if the set is empty.
- */
-extern void *AUD_getSet(void *set);
-
-/**
- * Mixes a sound down into a file.
- * \param sound The sound scene to mix down.
- * \param start The start frame.
- * \param length The count of frames to write.
- * \param buffersize How many samples should be written at once.
- * \param filename The file to write to.
- * \param specs The file's audio specification.
- * \param format The file's container format.
- * \param codec The codec used for encoding the audio data.
- * \param bitrate The bitrate for encoding.
- * \return An error message or NULL in case of success.
- */
-extern const char *AUD_mixdown(AUD_Sound *sound, unsigned int start, unsigned int length,
- unsigned int buffersize, const char *filename,
- AUD_DeviceSpecs specs, AUD_Container format,
- AUD_Codec codec, unsigned int bitrate);
-
-/**
- * Mixes a sound down into multiple files.
- * \param sound The sound scene to mix down.
- * \param start The start frame.
- * \param length The count of frames to write.
- * \param buffersize How many samples should be written at once.
- * \param filename The file to write to, the channel number and an underscore are added at the beginning.
- * \param specs The file's audio specification.
- * \param format The file's container format.
- * \param codec The codec used for encoding the audio data.
- * \param bitrate The bitrate for encoding.
- * \return An error message or NULL in case of success.
- */
-extern const char *AUD_mixdown_per_channel(AUD_Sound *sound, unsigned int start, unsigned int length,
- unsigned int buffersize, const char *filename,
- AUD_DeviceSpecs specs, AUD_Container format,
- AUD_Codec codec, unsigned int bitrate);
-
-/**
- * Opens a read device and prepares it for mixdown of the sound scene.
- * \param specs Output audio specifications.
- * \param sequencer The sound scene to mix down.
- * \param volume The overall mixdown volume.
- * \param start The start time of the mixdown in the sound scene.
- * \return The read device for the mixdown.
- */
-extern AUD_Device *AUD_openMixdownDevice(AUD_DeviceSpecs specs, AUD_Sound *sequencer, float volume, float start);
-
-#ifdef WITH_PYTHON
-/**
- * Retrieves the python factory of a sound.
- * \param sound The sound factory.
- * \return The python factory.
- */
-extern void *AUD_getPythonSound(AUD_Sound *sound);
-
-/**
- * Retrieves the sound factory of a python factory.
- * \param sound The python factory.
- * \return The sound factory.
- */
-extern AUD_Sound *AUD_getSoundFromPython(void *sound);
-#endif
-
-extern AUD_Device *AUD_Device_getCurrent(void);
-
-extern int AUD_isJackSupported(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif //__AUD_C_API_H__
diff --git a/intern/audaspace/intern/AUD_ChannelMapperFactory.cpp b/intern/audaspace/intern/AUD_ChannelMapperFactory.cpp
deleted file mode 100644
index f4ba5d05ff0..00000000000
--- a/intern/audaspace/intern/AUD_ChannelMapperFactory.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_ChannelMapperFactory.cpp
- * \ingroup audaspaceintern
- */
-
-
-#include "AUD_ChannelMapperFactory.h"
-#include "AUD_ChannelMapperReader.h"
-
-#include <cstring>
-
-AUD_ChannelMapperFactory::AUD_ChannelMapperFactory(boost::shared_ptr<AUD_IFactory> factory,
- AUD_DeviceSpecs specs) :
- AUD_MixerFactory(factory, specs)
-{
-}
-
-boost::shared_ptr<AUD_IReader> AUD_ChannelMapperFactory::createReader()
-{
- boost::shared_ptr<AUD_IReader> reader = getReader();
- return boost::shared_ptr<AUD_IReader>(new AUD_ChannelMapperReader(reader, m_specs.channels));
-}
diff --git a/intern/audaspace/intern/AUD_ChannelMapperFactory.h b/intern/audaspace/intern/AUD_ChannelMapperFactory.h
deleted file mode 100644
index 611b5041c39..00000000000
--- a/intern/audaspace/intern/AUD_ChannelMapperFactory.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_ChannelMapperFactory.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_CHANNELMAPPERFACTORY_H__
-#define __AUD_CHANNELMAPPERFACTORY_H__
-
-#include "AUD_MixerFactory.h"
-
-/**
- * This factory creates a reader that maps a sound source's channels to a
- * specific output channel count.
- */
-class AUD_ChannelMapperFactory : public AUD_MixerFactory
-{
-private:
- // hide copy constructor and operator=
- AUD_ChannelMapperFactory(const AUD_ChannelMapperFactory&);
- AUD_ChannelMapperFactory& operator=(const AUD_ChannelMapperFactory&);
-
-public:
- /**
- * Creates a new factory.
- * \param factory The input factory.
- * \param specs The target specifications.
- */
- AUD_ChannelMapperFactory(boost::shared_ptr<AUD_IFactory> factory, AUD_DeviceSpecs specs);
-
- virtual boost::shared_ptr<AUD_IReader> createReader();
-};
-
-#endif //__AUD_CHANNELMAPPERFACTORY_H__
diff --git a/intern/audaspace/intern/AUD_ChannelMapperReader.cpp b/intern/audaspace/intern/AUD_ChannelMapperReader.cpp
deleted file mode 100644
index 8b983d5c43d..00000000000
--- a/intern/audaspace/intern/AUD_ChannelMapperReader.cpp
+++ /dev/null
@@ -1,378 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_ChannelMapperReader.cpp
- * \ingroup audaspaceintern
- */
-
-#include <cmath>
-
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-
-#ifndef M_PI_2
-#define M_PI_2 1.57079632679489661923
-#endif
-
-#include "AUD_ChannelMapperReader.h"
-
-AUD_ChannelMapperReader::AUD_ChannelMapperReader(boost::shared_ptr<AUD_IReader> reader,
- AUD_Channels channels) :
- AUD_EffectReader(reader), m_target_channels(channels),
- m_source_channels(AUD_CHANNELS_INVALID), m_mapping(0), m_map_size(0), m_mono_angle(0)
-{
-}
-
-AUD_ChannelMapperReader::~AUD_ChannelMapperReader()
-{
- delete[] m_mapping;
-}
-
-void AUD_ChannelMapperReader::setChannels(AUD_Channels channels)
-{
- m_target_channels = channels;
- calculateMapping();
-}
-
-void AUD_ChannelMapperReader::setMonoAngle(float angle)
-{
- if(angle != angle)
- angle = 0;
- m_mono_angle = angle;
- if(m_source_channels == AUD_CHANNELS_MONO)
- calculateMapping();
-}
-
-float AUD_ChannelMapperReader::angleDistance(float alpha, float beta)
-{
- alpha = beta - alpha;
-
- if(alpha > M_PI)
- alpha -= 2 * M_PI;
- if(alpha < -M_PI)
- alpha += 2 * M_PI;
-
- return alpha;
-}
-
-void AUD_ChannelMapperReader::calculateMapping()
-{
- if(m_map_size < m_source_channels * m_target_channels)
- {
- delete[] m_mapping;
- m_mapping = new float[m_source_channels * m_target_channels];
- m_map_size = m_source_channels * m_target_channels;
- }
-
- for(int i = 0; i < m_source_channels * m_target_channels; i++)
- m_mapping[i] = 0;
-
- const AUD_Channel* source_channels = CHANNEL_MAPS[m_source_channels - 1];
- const AUD_Channel* target_channels = CHANNEL_MAPS[m_target_channels - 1];
-
- int lfe = -1;
-
- for(int i = 0; i < m_target_channels; i++)
- {
- if(target_channels[i] == AUD_CHANNEL_LFE)
- {
- lfe = i;
- break;
- }
- }
-
- const float* source_angles = CHANNEL_ANGLES[m_source_channels - 1];
- const float* target_angles = CHANNEL_ANGLES[m_target_channels - 1];
-
- if(m_source_channels == AUD_CHANNELS_MONO)
- source_angles = &m_mono_angle;
-
- int channel_left, channel_right;
- float angle_left, angle_right, angle;
-
- for(int i = 0; i < m_source_channels; i++)
- {
- if(source_channels[i] == AUD_CHANNEL_LFE)
- {
- if(lfe != -1)
- m_mapping[lfe * m_source_channels + i] = 1;
-
- continue;
- }
-
- channel_left = channel_right = -1;
- angle_left = -2 * M_PI;
- angle_right = 2 * M_PI;
-
- for(int j = 0; j < m_target_channels; j++)
- {
- if(j == lfe)
- continue;
- angle = angleDistance(source_angles[i], target_angles[j]);
- if(angle < 0)
- {
- if(angle > angle_left)
- {
- angle_left = angle;
- channel_left = j;
- }
- }
- else
- {
- if(angle < angle_right)
- {
- angle_right = angle;
- channel_right = j;
- }
- }
- }
-
- angle = angle_right - angle_left;
- if(channel_right == -1 || angle == 0)
- {
- m_mapping[channel_left * m_source_channels + i] = 1;
- }
- else if(channel_left == -1)
- {
- m_mapping[channel_right * m_source_channels + i] = 1;
- }
- else
- {
- m_mapping[channel_left * m_source_channels + i] = cos(M_PI_2 * angle_left / angle);
- m_mapping[channel_right * m_source_channels + i] = cos(M_PI_2 * angle_right / angle);
- }
- }
-
- /* AUD_XXX for(int i = 0; i < m_source_channels; i++)
- {
- for(int j = 0; j < m_target_channels; j++)
- {
- std::cout << m_mapping[i * m_source_channels + j] << " ";
- }
- std::cout << std::endl;
- }*/
-}
-
-AUD_Specs AUD_ChannelMapperReader::getSpecs() const
-{
- AUD_Specs specs = m_reader->getSpecs();
- specs.channels = m_target_channels;
- return specs;
-}
-
-void AUD_ChannelMapperReader::read(int& length, bool& eos, sample_t* buffer)
-{
- AUD_Channels channels = m_reader->getSpecs().channels;
- if(channels != m_source_channels)
- {
- m_source_channels = channels;
- calculateMapping();
- }
-
- if(m_source_channels == m_target_channels)
- {
- m_reader->read(length, eos, buffer);
- return;
- }
-
- m_buffer.assureSize(length * channels * sizeof(sample_t));
-
- sample_t* in = m_buffer.getBuffer();
-
- m_reader->read(length, eos, in);
-
- sample_t sum;
-
- for(int i = 0; i < length; i++)
- {
- for(int j = 0; j < m_target_channels; j++)
- {
- sum = 0;
- for(int k = 0; k < m_source_channels; k++)
- sum += m_mapping[j * m_source_channels + k] * in[i * m_source_channels + k];
- buffer[i * m_target_channels + j] = sum;
- }
- }
-}
-
-const AUD_Channel AUD_ChannelMapperReader::MONO_MAP[] =
-{
- AUD_CHANNEL_FRONT_CENTER
-};
-
-const AUD_Channel AUD_ChannelMapperReader::STEREO_MAP[] =
-{
- AUD_CHANNEL_FRONT_LEFT,
- AUD_CHANNEL_FRONT_RIGHT
-};
-
-const AUD_Channel AUD_ChannelMapperReader::STEREO_LFE_MAP[] =
-{
- AUD_CHANNEL_FRONT_LEFT,
- AUD_CHANNEL_FRONT_RIGHT,
- AUD_CHANNEL_LFE
-};
-
-const AUD_Channel AUD_ChannelMapperReader::SURROUND4_MAP[] =
-{
- AUD_CHANNEL_FRONT_LEFT,
- AUD_CHANNEL_FRONT_RIGHT,
- AUD_CHANNEL_REAR_LEFT,
- AUD_CHANNEL_REAR_RIGHT
-};
-
-const AUD_Channel AUD_ChannelMapperReader::SURROUND5_MAP[] =
-{
- AUD_CHANNEL_FRONT_LEFT,
- AUD_CHANNEL_FRONT_RIGHT,
- AUD_CHANNEL_FRONT_CENTER,
- AUD_CHANNEL_REAR_LEFT,
- AUD_CHANNEL_REAR_RIGHT
-};
-
-const AUD_Channel AUD_ChannelMapperReader::SURROUND51_MAP[] =
-{
- AUD_CHANNEL_FRONT_LEFT,
- AUD_CHANNEL_FRONT_RIGHT,
- AUD_CHANNEL_FRONT_CENTER,
- AUD_CHANNEL_LFE,
- AUD_CHANNEL_REAR_LEFT,
- AUD_CHANNEL_REAR_RIGHT
-};
-
-const AUD_Channel AUD_ChannelMapperReader::SURROUND61_MAP[] =
-{
- AUD_CHANNEL_FRONT_LEFT,
- AUD_CHANNEL_FRONT_RIGHT,
- AUD_CHANNEL_FRONT_CENTER,
- AUD_CHANNEL_LFE,
- AUD_CHANNEL_REAR_CENTER,
- AUD_CHANNEL_REAR_LEFT,
- AUD_CHANNEL_REAR_RIGHT
-};
-
-const AUD_Channel AUD_ChannelMapperReader::SURROUND71_MAP[] =
-{
- AUD_CHANNEL_FRONT_LEFT,
- AUD_CHANNEL_FRONT_RIGHT,
- AUD_CHANNEL_FRONT_CENTER,
- AUD_CHANNEL_LFE,
- AUD_CHANNEL_REAR_LEFT,
- AUD_CHANNEL_REAR_RIGHT,
- AUD_CHANNEL_SIDE_LEFT,
- AUD_CHANNEL_SIDE_RIGHT
-};
-
-const AUD_Channel* AUD_ChannelMapperReader::CHANNEL_MAPS[] =
-{
- AUD_ChannelMapperReader::MONO_MAP,
- AUD_ChannelMapperReader::STEREO_MAP,
- AUD_ChannelMapperReader::STEREO_LFE_MAP,
- AUD_ChannelMapperReader::SURROUND4_MAP,
- AUD_ChannelMapperReader::SURROUND5_MAP,
- AUD_ChannelMapperReader::SURROUND51_MAP,
- AUD_ChannelMapperReader::SURROUND61_MAP,
- AUD_ChannelMapperReader::SURROUND71_MAP
-};
-
-const float AUD_ChannelMapperReader::MONO_ANGLES[] =
-{
- 0.0f * M_PI / 180.0f
-};
-
-const float AUD_ChannelMapperReader::STEREO_ANGLES[] =
-{
- -90.0f * M_PI / 180.0f,
- 90.0f * M_PI / 180.0f
-};
-
-const float AUD_ChannelMapperReader::STEREO_LFE_ANGLES[] =
-{
- -90.0f * M_PI / 180.0f,
- 90.0f * M_PI / 180.0f,
- 0.0f * M_PI / 180.0f
-};
-
-const float AUD_ChannelMapperReader::SURROUND4_ANGLES[] =
-{
- -45.0f * M_PI / 180.0f,
- 45.0f * M_PI / 180.0f,
- -135.0f * M_PI / 180.0f,
- 135.0f * M_PI / 180.0f
-};
-
-const float AUD_ChannelMapperReader::SURROUND5_ANGLES[] =
-{
- -30.0f * M_PI / 180.0f,
- 30.0f * M_PI / 180.0f,
- 0.0f * M_PI / 180.0f,
- -110.0f * M_PI / 180.0f,
- 110.0f * M_PI / 180.0f
-};
-
-const float AUD_ChannelMapperReader::SURROUND51_ANGLES[] =
-{
- -30.0f * M_PI / 180.0f,
- 30.0f * M_PI / 180.0f,
- 0.0f * M_PI / 180.0f,
- 0.0f * M_PI / 180.0f,
- -110.0f * M_PI / 180.0f,
- 110.0f * M_PI / 180.0f
-};
-
-const float AUD_ChannelMapperReader::SURROUND61_ANGLES[] =
-{
- -30.0f * M_PI / 180.0f,
- 30.0f * M_PI / 180.0f,
- 0.0f * M_PI / 180.0f,
- 0.0f * M_PI / 180.0f,
- 180.0f * M_PI / 180.0f,
- -110.0f * M_PI / 180.0f,
- 110.0f * M_PI / 180.0f
-};
-
-const float AUD_ChannelMapperReader::SURROUND71_ANGLES[] =
-{
- -30.0f * M_PI / 180.0f,
- 30.0f * M_PI / 180.0f,
- 0.0f * M_PI / 180.0f,
- 0.0f * M_PI / 180.0f,
- -110.0f * M_PI / 180.0f,
- 110.0f * M_PI / 180.0f,
- -150.0f * M_PI / 180.0f,
- 150.0f * M_PI / 180.0f
-};
-
-const float* AUD_ChannelMapperReader::CHANNEL_ANGLES[] =
-{
- AUD_ChannelMapperReader::MONO_ANGLES,
- AUD_ChannelMapperReader::STEREO_ANGLES,
- AUD_ChannelMapperReader::STEREO_LFE_ANGLES,
- AUD_ChannelMapperReader::SURROUND4_ANGLES,
- AUD_ChannelMapperReader::SURROUND5_ANGLES,
- AUD_ChannelMapperReader::SURROUND51_ANGLES,
- AUD_ChannelMapperReader::SURROUND61_ANGLES,
- AUD_ChannelMapperReader::SURROUND71_ANGLES
-};
diff --git a/intern/audaspace/intern/AUD_ChannelMapperReader.h b/intern/audaspace/intern/AUD_ChannelMapperReader.h
deleted file mode 100644
index b122b070d29..00000000000
--- a/intern/audaspace/intern/AUD_ChannelMapperReader.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_ChannelMapperReader.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_CHANNELMAPPERREADER_H__
-#define __AUD_CHANNELMAPPERREADER_H__
-
-#include "AUD_EffectReader.h"
-#include "AUD_Buffer.h"
-
-/**
- * This class maps a sound source's channels to a specific output channel count.
- * \note The input sample format must be float.
- */
-class AUD_ChannelMapperReader : public AUD_EffectReader
-{
-private:
- /**
- * The sound reading buffer.
- */
- AUD_Buffer m_buffer;
-
- /**
- * The output specification.
- */
- AUD_Channels m_target_channels;
-
- /**
- * The channel count of the reader.
- */
- AUD_Channels m_source_channels;
-
- /**
- * The mapping specification.
- */
- float* m_mapping;
-
- /**
- * The size of the mapping.
- */
- int m_map_size;
-
- /**
- * The mono source angle.
- */
- float m_mono_angle;
-
- static const AUD_Channel MONO_MAP[];
- static const AUD_Channel STEREO_MAP[];
- static const AUD_Channel STEREO_LFE_MAP[];
- static const AUD_Channel SURROUND4_MAP[];
- static const AUD_Channel SURROUND5_MAP[];
- static const AUD_Channel SURROUND51_MAP[];
- static const AUD_Channel SURROUND61_MAP[];
- static const AUD_Channel SURROUND71_MAP[];
- static const AUD_Channel* CHANNEL_MAPS[];
-
- static const float MONO_ANGLES[];
- static const float STEREO_ANGLES[];
- static const float STEREO_LFE_ANGLES[];
- static const float SURROUND4_ANGLES[];
- static const float SURROUND5_ANGLES[];
- static const float SURROUND51_ANGLES[];
- static const float SURROUND61_ANGLES[];
- static const float SURROUND71_ANGLES[];
- static const float* CHANNEL_ANGLES[];
-
- // hide copy constructor and operator=
- AUD_ChannelMapperReader(const AUD_ChannelMapperReader&);
- AUD_ChannelMapperReader& operator=(const AUD_ChannelMapperReader&);
-
- /**
- * Calculates the mapping matrix.
- */
- void calculateMapping();
-
- /**
- * Calculates the distance between two angles.
- */
- float angleDistance(float alpha, float beta);
-
-public:
- /**
- * Creates a channel mapper reader.
- * \param reader The reader to map.
- * \param mapping The mapping specification as two dimensional float array.
- */
- AUD_ChannelMapperReader(boost::shared_ptr<AUD_IReader> reader, AUD_Channels channels);
-
- /**
- * Destroys the reader.
- */
- ~AUD_ChannelMapperReader();
-
- /**
- * Sets the requested channel output count.
- * \param channels The channel output count.
- */
- void setChannels(AUD_Channels channels);
-
- /**
- * Sets the angle for mono sources.
- * \param angle The angle for mono sources.
- */
- void setMonoAngle(float angle);
-
- virtual AUD_Specs getSpecs() const;
- virtual void read(int& length, bool& eos, sample_t* buffer);
-};
-
-#endif //__AUD_CHANNELMAPPERREADER_H__
diff --git a/intern/audaspace/intern/AUD_ConverterFactory.cpp b/intern/audaspace/intern/AUD_ConverterFactory.cpp
deleted file mode 100644
index 7cbf64f1697..00000000000
--- a/intern/audaspace/intern/AUD_ConverterFactory.cpp
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_ConverterFactory.cpp
- * \ingroup audaspaceintern
- */
-
-
-#include "AUD_ConverterFactory.h"
-#include "AUD_ConverterReader.h"
-
-AUD_ConverterFactory::AUD_ConverterFactory(boost::shared_ptr<AUD_IFactory> factory,
- AUD_DeviceSpecs specs) :
- AUD_MixerFactory(factory, specs)
-{
-}
-
-boost::shared_ptr<AUD_IReader> AUD_ConverterFactory::createReader()
-{
- boost::shared_ptr<AUD_IReader> reader = getReader();
-
- if(m_specs.format != AUD_FORMAT_FLOAT32)
- reader = boost::shared_ptr<AUD_IReader>(new AUD_ConverterReader(reader, m_specs));
-
- return reader;
-}
diff --git a/intern/audaspace/intern/AUD_ConverterFactory.h b/intern/audaspace/intern/AUD_ConverterFactory.h
deleted file mode 100644
index 2c9c82d235b..00000000000
--- a/intern/audaspace/intern/AUD_ConverterFactory.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_ConverterFactory.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_CONVERTERFACTORY_H__
-#define __AUD_CONVERTERFACTORY_H__
-
-#include "AUD_MixerFactory.h"
-
-/**
- * This factory creates a converter reader that is able to convert from one
- * audio format to another.
- */
-class AUD_ConverterFactory : public AUD_MixerFactory
-{
-private:
- // hide copy constructor and operator=
- AUD_ConverterFactory(const AUD_ConverterFactory&);
- AUD_ConverterFactory& operator=(const AUD_ConverterFactory&);
-
-public:
- /**
- * Creates a new factory.
- * \param factory The input factory.
- * \param specs The target specifications.
- */
- AUD_ConverterFactory(boost::shared_ptr<AUD_IFactory> factory, AUD_DeviceSpecs specs);
-
- virtual boost::shared_ptr<AUD_IReader> createReader();
-};
-
-#endif //__AUD_CONVERTERFACTORY_H__
diff --git a/intern/audaspace/intern/AUD_ConverterFunctions.cpp b/intern/audaspace/intern/AUD_ConverterFunctions.cpp
deleted file mode 100644
index c20f19a7e67..00000000000
--- a/intern/audaspace/intern/AUD_ConverterFunctions.cpp
+++ /dev/null
@@ -1,472 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_ConverterFunctions.cpp
- * \ingroup audaspaceintern
- */
-
-
-#include "AUD_ConverterFunctions.h"
-#include "AUD_Buffer.h"
-
-#define AUD_U8_0 0x80
-#define AUD_S16_MAX ((int16_t)0x7FFF)
-#define AUD_S16_MIN ((int16_t)0x8000)
-#define AUD_S16_FLT 32767.0f
-#define AUD_S32_MAX ((int32_t)0x7FFFFFFF)
-#define AUD_S32_MIN ((int32_t)0x80000000)
-#define AUD_S32_FLT 2147483647.0f
-#define AUD_FLT_MAX 1.0f
-#define AUD_FLT_MIN -1.0f
-
-void AUD_convert_u8_s16(data_t* target, data_t* source, int length)
-{
- int16_t* t = (int16_t*) target;
- for(int i = length - 1; i >= 0; i--)
- t[i] = (((int16_t)source[i]) - AUD_U8_0) << 8;
-}
-
-void AUD_convert_u8_s24_be(data_t* target, data_t* source, int length)
-{
- for(int i = length - 1; i >= 0; i--)
- {
- target[i*3] = source[i] - AUD_U8_0;
- target[i*3+1] = 0;
- target[i*3+2] = 0;
- }
-}
-
-void AUD_convert_u8_s24_le(data_t* target, data_t* source, int length)
-{
- for(int i = length - 1; i >= 0; i--)
- {
- target[i*3+2] = source[i] - AUD_U8_0;
- target[i*3+1] = 0;
- target[i*3] = 0;
- }
-}
-
-void AUD_convert_u8_s32(data_t* target, data_t* source, int length)
-{
- int32_t* t = (int32_t*) target;
- for(int i = length - 1; i >= 0; i--)
- t[i] = (((int32_t)source[i]) - AUD_U8_0) << 24;
-}
-
-void AUD_convert_u8_float(data_t* target, data_t* source, int length)
-{
- float* t = (float*) target;
- for(int i = length - 1; i >= 0; i--)
- t[i] = (((int32_t)source[i]) - AUD_U8_0) / ((float)AUD_U8_0);
-}
-
-void AUD_convert_u8_double(data_t* target, data_t* source, int length)
-{
- double* t = (double*) target;
- for(int i = length - 1; i >= 0; i--)
- t[i] = (((int32_t)source[i]) - AUD_U8_0) / ((double)AUD_U8_0);
-}
-
-void AUD_convert_s16_u8(data_t* target, data_t* source, int length)
-{
- int16_t* s = (int16_t*) source;
- for(int i = 0; i < length; i++)
- target[i] = (unsigned char)((s[i] >> 8) + AUD_U8_0);
-}
-
-void AUD_convert_s16_s24_be(data_t* target, data_t* source, int length)
-{
- int16_t* s = (int16_t*) source;
- int16_t t;
- for(int i = length - 1; i >= 0; i--)
- {
- t = s[i];
- target[i*3] = t >> 8 & 0xFF;
- target[i*3+1] = t & 0xFF;
- target[i*3+2] = 0;
- }
-}
-
-void AUD_convert_s16_s24_le(data_t* target, data_t* source, int length)
-{
- int16_t* s = (int16_t*) source;
- int16_t t;
- for(int i = length - 1; i >= 0; i--)
- {
- t = s[i];
- target[i*3+2] = t >> 8 & 0xFF;
- target[i*3+1] = t & 0xFF;
- target[i*3] = 0;
- }
-}
-
-void AUD_convert_s16_s32(data_t* target, data_t* source, int length)
-{
- int16_t* s = (int16_t*) source;
- int32_t* t = (int32_t*) target;
- for(int i = length - 1; i >= 0; i--)
- t[i] = ((int32_t)s[i]) << 16;
-}
-
-void AUD_convert_s16_float(data_t* target, data_t* source, int length)
-{
- int16_t* s = (int16_t*) source;
- float* t = (float*) target;
- for(int i = length - 1; i >= 0; i--)
- t[i] = s[i] / AUD_S16_FLT;
-}
-
-void AUD_convert_s16_double(data_t* target, data_t* source, int length)
-{
- int16_t* s = (int16_t*) source;
- double* t = (double*) target;
- for(int i = length - 1; i >= 0; i--)
- t[i] = s[i] / AUD_S16_FLT;
-}
-
-void AUD_convert_s24_u8_be(data_t* target, data_t* source, int length)
-{
- for(int i = 0; i < length; i++)
- target[i] = source[i*3] ^ AUD_U8_0;
-}
-
-void AUD_convert_s24_u8_le(data_t* target, data_t* source, int length)
-{
- for(int i = 0; i < length; i++)
- target[i] = source[i*3+2] ^ AUD_U8_0;
-}
-
-void AUD_convert_s24_s16_be(data_t* target, data_t* source, int length)
-{
- int16_t* t = (int16_t*) target;
- for(int i = 0; i < length; i++)
- t[i] = source[i*3] << 8 | source[i*3+1];
-}
-
-void AUD_convert_s24_s16_le(data_t* target, data_t* source, int length)
-{
- int16_t* t = (int16_t*) target;
- for(int i = 0; i < length; i++)
- t[i] = source[i*3+2] << 8 | source[i*3+1];
-}
-
-void AUD_convert_s24_s24(data_t* target, data_t* source, int length)
-{
- memcpy(target, source, length * 3);
-}
-
-void AUD_convert_s24_s32_be(data_t* target, data_t* source, int length)
-{
- int32_t* t = (int32_t*) target;
- for(int i = length - 1; i >= 0; i--)
- t[i] = source[i*3] << 24 | source[i*3+1] << 16 | source[i*3+2] << 8;
-}
-
-void AUD_convert_s24_s32_le(data_t* target, data_t* source, int length)
-{
- int32_t* t = (int32_t*) target;
- for(int i = length - 1; i >= 0; i--)
- t[i] = source[i*3+2] << 24 | source[i*3+1] << 16 | source[i*3] << 8;
-}
-
-void AUD_convert_s24_float_be(data_t* target, data_t* source, int length)
-{
- float* t = (float*) target;
- int32_t s;
- for(int i = length - 1; i >= 0; i--)
- {
- s = source[i*3] << 24 | source[i*3+1] << 16 | source[i*3+2] << 8;
- t[i] = s / AUD_S32_FLT;
- }
-}
-
-void AUD_convert_s24_float_le(data_t* target, data_t* source, int length)
-{
- float* t = (float*) target;
- int32_t s;
- for(int i = length - 1; i >= 0; i--)
- {
- s = source[i*3+2] << 24 | source[i*3+1] << 16 | source[i*3] << 8;
- t[i] = s / AUD_S32_FLT;
- }
-}
-
-void AUD_convert_s24_double_be(data_t* target, data_t* source, int length)
-{
- double* t = (double*) target;
- int32_t s;
- for(int i = length - 1; i >= 0; i--)
- {
- s = source[i*3] << 24 | source[i*3+1] << 16 | source[i*3+2] << 8;
- t[i] = s / AUD_S32_FLT;
- }
-}
-
-void AUD_convert_s24_double_le(data_t* target, data_t* source, int length)
-{
- double* t = (double*) target;
- int32_t s;
- for(int i = length - 1; i >= 0; i--)
- {
- s = source[i*3+2] << 24 | source[i*3+1] << 16 | source[i*3] << 8;
- t[i] = s / AUD_S32_FLT;
- }
-}
-
-void AUD_convert_s32_u8(data_t* target, data_t* source, int length)
-{
- int16_t* s = (int16_t*) source;
- for(int i = 0; i < length; i++)
- target[i] = (unsigned char)((s[i] >> 24) + AUD_U8_0);
-}
-
-void AUD_convert_s32_s16(data_t* target, data_t* source, int length)
-{
- int16_t* t = (int16_t*) target;
- int32_t* s = (int32_t*) source;
- for(int i = 0; i < length; i++)
- t[i] = s[i] >> 16;
-}
-
-void AUD_convert_s32_s24_be(data_t* target, data_t* source, int length)
-{
- int32_t* s = (int32_t*) source;
- int32_t t;
- for(int i = 0; i < length; i++)
- {
- t = s[i];
- target[i*3] = t >> 24 & 0xFF;
- target[i*3+1] = t >> 16 & 0xFF;
- target[i*3+2] = t >> 8 & 0xFF;
- }
-}
-
-void AUD_convert_s32_s24_le(data_t* target, data_t* source, int length)
-{
- int32_t* s = (int32_t*) source;
- int32_t t;
- for(int i = 0; i < length; i++)
- {
- t = s[i];
- target[i*3+2] = t >> 24 & 0xFF;
- target[i*3+1] = t >> 16 & 0xFF;
- target[i*3] = t >> 8 & 0xFF;
- }
-}
-
-void AUD_convert_s32_float(data_t* target, data_t* source, int length)
-{
- int32_t* s = (int32_t*) source;
- float* t = (float*) target;
- for(int i = 0; i < length; i++)
- t[i] = s[i] / AUD_S32_FLT;
-}
-
-void AUD_convert_s32_double(data_t* target, data_t* source, int length)
-{
- int32_t* s = (int32_t*) source;
- double* t = (double*) target;
- for(int i = length - 1; i >= 0; i--)
- t[i] = s[i] / AUD_S32_FLT;
-}
-
-void AUD_convert_float_u8(data_t* target, data_t* source, int length)
-{
- float* s = (float*) source;
- float t;
- for(int i = 0; i < length; i++)
- {
- t = s[i] + AUD_FLT_MAX;
- if(t <= 0.0f)
- target[i] = 0;
- else if(t >= 2.0f)
- target[i] = 255;
- else
- target[i] = (unsigned char)(t*127);
- }
-}
-
-void AUD_convert_float_s16(data_t* target, data_t* source, int length)
-{
- int16_t* t = (int16_t*) target;
- float* s = (float*) source;
- for(int i = 0; i < length; i++)
- {
- if(s[i] <= AUD_FLT_MIN)
- t[i] = AUD_S16_MIN;
- else if(s[i] >= AUD_FLT_MAX)
- t[i] = AUD_S16_MAX;
- else
- t[i] = (int16_t)(s[i] * AUD_S16_MAX);
- }
-}
-
-void AUD_convert_float_s24_be(data_t* target, data_t* source, int length)
-{
- int32_t t;
- float* s = (float*) source;
- for(int i = 0; i < length; i++)
- {
- if(s[i] <= AUD_FLT_MIN)
- t = AUD_S32_MIN;
- else if(s[i] >= AUD_FLT_MAX)
- t = AUD_S32_MAX;
- else
- t = (int32_t)(s[i]*AUD_S32_MAX);
- target[i*3] = t >> 24 & 0xFF;
- target[i*3+1] = t >> 16 & 0xFF;
- target[i*3+2] = t >> 8 & 0xFF;
- }
-}
-
-void AUD_convert_float_s24_le(data_t* target, data_t* source, int length)
-{
- int32_t t;
- float* s = (float*) source;
- for(int i = 0; i < length; i++)
- {
- if(s[i] <= AUD_FLT_MIN)
- t = AUD_S32_MIN;
- else if(s[i] >= AUD_FLT_MAX)
- t = AUD_S32_MAX;
- else
- t = (int32_t)(s[i]*AUD_S32_MAX);
- target[i*3+2] = t >> 24 & 0xFF;
- target[i*3+1] = t >> 16 & 0xFF;
- target[i*3] = t >> 8 & 0xFF;
- }
-}
-
-void AUD_convert_float_s32(data_t* target, data_t* source, int length)
-{
- int32_t* t = (int32_t*) target;
- float* s = (float*) source;
- for(int i = 0; i < length; i++)
- {
- if(s[i] <= AUD_FLT_MIN)
- t[i] = AUD_S32_MIN;
- else if(s[i] >= AUD_FLT_MAX)
- t[i] = AUD_S32_MAX;
- else
- t[i] = (int32_t)(s[i]*AUD_S32_MAX);
- }
-}
-
-void AUD_convert_float_double(data_t* target, data_t* source, int length)
-{
- float* s = (float*) source;
- double* t = (double*) target;
- for(int i = length - 1; i >= 0; i--)
- t[i] = s[i];
-}
-
-void AUD_convert_double_u8(data_t* target, data_t* source, int length)
-{
- double* s = (double*) source;
- double t;
- for(int i = 0; i < length; i++)
- {
- t = s[i] + AUD_FLT_MAX;
- if(t <= 0.0)
- target[i] = 0;
- else if(t >= 2.0)
- target[i] = 255;
- else
- target[i] = (unsigned char)(t*127);
- }
-}
-
-void AUD_convert_double_s16(data_t* target, data_t* source, int length)
-{
- int16_t* t = (int16_t*) target;
- double* s = (double*) source;
- for(int i = 0; i < length; i++)
- {
- if(s[i] <= AUD_FLT_MIN)
- t[i] = AUD_S16_MIN;
- else if(s[i] >= AUD_FLT_MAX)
- t[i] = AUD_S16_MAX;
- else
- t[i] = (int16_t)(s[i]*AUD_S16_MAX);
- }
-}
-
-void AUD_convert_double_s24_be(data_t* target, data_t* source, int length)
-{
- int32_t t;
- double* s = (double*) source;
- for(int i = 0; i < length; i++)
- {
- if(s[i] <= AUD_FLT_MIN)
- t = AUD_S32_MIN;
- else if(s[i] >= AUD_FLT_MAX)
- t = AUD_S32_MAX;
- else
- t = (int32_t)(s[i]*AUD_S32_MAX);
- target[i*3] = t >> 24 & 0xFF;
- target[i*3+1] = t >> 16 & 0xFF;
- target[i*3+2] = t >> 8 & 0xFF;
- }
-}
-
-void AUD_convert_double_s24_le(data_t* target, data_t* source, int length)
-{
- int32_t t;
- double* s = (double*) source;
- for(int i = 0; i < length; i++)
- {
- if(s[i] <= AUD_FLT_MIN)
- t = AUD_S32_MIN;
- else if(s[i] >= AUD_FLT_MAX)
- t = AUD_S32_MAX;
- else
- t = (int32_t)(s[i]*AUD_S32_MAX);
- target[i*3+2] = t >> 24 & 0xFF;
- target[i*3+1] = t >> 16 & 0xFF;
- target[i*3] = t >> 8 & 0xFF;
- }
-}
-
-void AUD_convert_double_s32(data_t* target, data_t* source, int length)
-{
- int32_t* t = (int32_t*) target;
- double* s = (double*) source;
- for(int i = 0; i < length; i++)
- {
- if(s[i] <= AUD_FLT_MIN)
- t[i] = AUD_S32_MIN;
- else if(s[i] >= AUD_FLT_MAX)
- t[i] = AUD_S32_MAX;
- else
- t[i] = (int32_t)(s[i]*AUD_S32_MAX);
- }
-}
-
-void AUD_convert_double_float(data_t* target, data_t* source, int length)
-{
- double* s = (double*) source;
- float* t = (float*) target;
- for(int i = 0; i < length; i++)
- t[i] = s[i];
-}
diff --git a/intern/audaspace/intern/AUD_ConverterFunctions.h b/intern/audaspace/intern/AUD_ConverterFunctions.h
deleted file mode 100644
index eca2b327b8c..00000000000
--- a/intern/audaspace/intern/AUD_ConverterFunctions.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_ConverterFunctions.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_CONVERTERFUNCTIONS_H__
-#define __AUD_CONVERTERFUNCTIONS_H__
-
-#include "AUD_Space.h"
-
-#include <cstring>
-#include <stdint.h>
-
-typedef void (*AUD_convert_f)(data_t* target, data_t* source, int length);
-
-template <class T>
-void AUD_convert_copy(data_t* target, data_t* source, int length)
-{
- memcpy(target, source, length*sizeof(T));
-}
-
-void AUD_convert_u8_s16(data_t* target, data_t* source, int length);
-
-void AUD_convert_u8_s24_be(data_t* target, data_t* source, int length);
-
-void AUD_convert_u8_s24_le(data_t* target, data_t* source, int length);
-
-void AUD_convert_u8_s32(data_t* target, data_t* source, int length);
-
-void AUD_convert_u8_float(data_t* target, data_t* source, int length);
-
-void AUD_convert_u8_double(data_t* target, data_t* source, int length);
-
-void AUD_convert_s16_u8(data_t* target, data_t* source, int length);
-
-void AUD_convert_s16_s24_be(data_t* target, data_t* source, int length);
-
-void AUD_convert_s16_s24_le(data_t* target, data_t* source, int length);
-
-void AUD_convert_s16_s32(data_t* target, data_t* source, int length);
-
-void AUD_convert_s16_float(data_t* target, data_t* source, int length);
-
-void AUD_convert_s16_double(data_t* target, data_t* source, int length);
-
-void AUD_convert_s24_u8_be(data_t* target, data_t* source, int length);
-
-void AUD_convert_s24_u8_le(data_t* target, data_t* source, int length);
-
-void AUD_convert_s24_s16_be(data_t* target, data_t* source, int length);
-
-void AUD_convert_s24_s16_le(data_t* target, data_t* source, int length);
-
-void AUD_convert_s24_s24(data_t* target, data_t* source, int length);
-
-void AUD_convert_s24_s32_be(data_t* target, data_t* source, int length);
-
-void AUD_convert_s24_s32_le(data_t* target, data_t* source, int length);
-
-void AUD_convert_s24_float_be(data_t* target, data_t* source, int length);
-
-void AUD_convert_s24_float_le(data_t* target, data_t* source, int length);
-
-void AUD_convert_s24_double_be(data_t* target, data_t* source, int length);
-
-void AUD_convert_s24_double_le(data_t* target, data_t* source, int length);
-
-void AUD_convert_s32_u8(data_t* target, data_t* source, int length);
-
-void AUD_convert_s32_s16(data_t* target, data_t* source, int length);
-
-void AUD_convert_s32_s24_be(data_t* target, data_t* source, int length);
-
-void AUD_convert_s32_s24_le(data_t* target, data_t* source, int length);
-
-void AUD_convert_s32_float(data_t* target, data_t* source, int length);
-
-void AUD_convert_s32_double(data_t* target, data_t* source, int length);
-
-void AUD_convert_float_u8(data_t* target, data_t* source, int length);
-
-void AUD_convert_float_s16(data_t* target, data_t* source, int length);
-
-void AUD_convert_float_s24_be(data_t* target, data_t* source, int length);
-
-void AUD_convert_float_s24_le(data_t* target, data_t* source, int length);
-
-void AUD_convert_float_s32(data_t* target, data_t* source, int length);
-
-void AUD_convert_float_double(data_t* target, data_t* source, int length);
-
-void AUD_convert_double_u8(data_t* target, data_t* source, int length);
-
-void AUD_convert_double_s16(data_t* target, data_t* source, int length);
-
-void AUD_convert_double_s24_be(data_t* target, data_t* source, int length);
-
-void AUD_convert_double_s24_le(data_t* target, data_t* source, int length);
-
-void AUD_convert_double_s32(data_t* target, data_t* source, int length);
-
-void AUD_convert_double_float(data_t* target, data_t* source, int length);
-
-#endif //__AUD_CONVERTERFUNCTIONS_H__
diff --git a/intern/audaspace/intern/AUD_ConverterReader.cpp b/intern/audaspace/intern/AUD_ConverterReader.cpp
deleted file mode 100644
index a90a54670e8..00000000000
--- a/intern/audaspace/intern/AUD_ConverterReader.cpp
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_ConverterReader.cpp
- * \ingroup audaspaceintern
- */
-
-
-#include "AUD_ConverterReader.h"
-
-AUD_ConverterReader::AUD_ConverterReader(boost::shared_ptr<AUD_IReader> reader,
- AUD_DeviceSpecs specs) :
- AUD_EffectReader(reader),
- m_format(specs.format)
-{
- switch(m_format)
- {
- case AUD_FORMAT_U8:
- m_convert = AUD_convert_float_u8;
- break;
- case AUD_FORMAT_S16:
- m_convert = AUD_convert_float_s16;
- break;
- case AUD_FORMAT_S24:
-#ifdef __BIG_ENDIAN__
- m_convert = AUD_convert_float_s24_be;
-#else
- m_convert = AUD_convert_float_s24_le;
-#endif
- break;
- case AUD_FORMAT_S32:
- m_convert = AUD_convert_float_s32;
- break;
- case AUD_FORMAT_FLOAT32:
- m_convert = AUD_convert_copy<float>;
- break;
- case AUD_FORMAT_FLOAT64:
- m_convert = AUD_convert_float_double;
- break;
- default:
- break;
- }
-}
-
-void AUD_ConverterReader::read(int& length, bool& eos, sample_t* buffer)
-{
- AUD_Specs specs = m_reader->getSpecs();
- int samplesize = AUD_SAMPLE_SIZE(specs);
-
- m_buffer.assureSize(length * samplesize);
-
- m_reader->read(length, eos, m_buffer.getBuffer());
-
- m_convert((data_t*)buffer, (data_t*)m_buffer.getBuffer(),
- length * specs.channels);
-}
diff --git a/intern/audaspace/intern/AUD_ConverterReader.h b/intern/audaspace/intern/AUD_ConverterReader.h
deleted file mode 100644
index 987b7c70279..00000000000
--- a/intern/audaspace/intern/AUD_ConverterReader.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_ConverterReader.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_CONVERTERREADER_H__
-#define __AUD_CONVERTERREADER_H__
-
-#include "AUD_EffectReader.h"
-#include "AUD_ConverterFunctions.h"
-#include "AUD_Buffer.h"
-
-/**
- * This class converts a sound source from one to another format.
- */
-class AUD_ConverterReader : public AUD_EffectReader
-{
-private:
- /**
- * The sound output buffer.
- */
- AUD_Buffer m_buffer;
-
- /**
- * The target specification.
- */
- AUD_SampleFormat m_format;
-
- /**
- * Converter function.
- */
- AUD_convert_f m_convert;
-
- // hide copy constructor and operator=
- AUD_ConverterReader(const AUD_ConverterReader&);
- AUD_ConverterReader& operator=(const AUD_ConverterReader&);
-
-public:
- /**
- * Creates a converter reader.
- * \param reader The reader to convert.
- * \param specs The target specification.
- */
- AUD_ConverterReader(boost::shared_ptr<AUD_IReader> reader, AUD_DeviceSpecs specs);
-
- virtual void read(int& length, bool& eos, sample_t* buffer);
-};
-
-#endif //__AUD_CONVERTERREADER_H__
diff --git a/intern/audaspace/intern/AUD_FileFactory.cpp b/intern/audaspace/intern/AUD_FileFactory.cpp
deleted file mode 100644
index f9353db6677..00000000000
--- a/intern/audaspace/intern/AUD_FileFactory.cpp
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_FileFactory.cpp
- * \ingroup audaspaceintern
- */
-
-
-#ifdef WITH_FFMPEG
-// needed for INT64_C
-#ifndef __STDC_CONSTANT_MACROS
-#define __STDC_CONSTANT_MACROS
-#endif
-#include "AUD_FFMPEGReader.h"
-#endif
-
-#include "AUD_FileFactory.h"
-
-#include <cstring>
-
-#ifdef WITH_SNDFILE
-#include "AUD_SndFileReader.h"
-#endif
-
-AUD_FileFactory::AUD_FileFactory(std::string filename) :
- m_filename(filename)
-{
-}
-
-AUD_FileFactory::AUD_FileFactory(const data_t* buffer, int size) :
- m_buffer(new AUD_Buffer(size))
-{
- memcpy(m_buffer->getBuffer(), buffer, size);
-}
-
-static const char* read_error = "AUD_FileFactory: File couldn't be read.";
-
-boost::shared_ptr<AUD_IReader> AUD_FileFactory::createReader()
-{
-#ifdef WITH_SNDFILE
- try
- {
- if(m_buffer.get())
- return boost::shared_ptr<AUD_IReader>(new AUD_SndFileReader(m_buffer));
- else
- return boost::shared_ptr<AUD_IReader>(new AUD_SndFileReader(m_filename));
- }
- catch(AUD_Exception&) {}
-#endif
-
-#ifdef WITH_FFMPEG
- try
- {
- if(m_buffer.get())
- return boost::shared_ptr<AUD_IReader>(new AUD_FFMPEGReader(m_buffer));
- else
- return boost::shared_ptr<AUD_IReader>(new AUD_FFMPEGReader(m_filename));
- }
- catch(AUD_Exception&) {}
-#endif
-
- AUD_THROW(AUD_ERROR_FILE, read_error);
-}
diff --git a/intern/audaspace/intern/AUD_FileFactory.h b/intern/audaspace/intern/AUD_FileFactory.h
deleted file mode 100644
index 35c8db731b4..00000000000
--- a/intern/audaspace/intern/AUD_FileFactory.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_FileFactory.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_FILEFACTORY_H__
-#define __AUD_FILEFACTORY_H__
-
-#include "AUD_IFactory.h"
-#include "AUD_Buffer.h"
-
-#include <string>
-#include <boost/shared_ptr.hpp>
-
-/**
- * This factory tries to read a sound file via all available file readers.
- */
-class AUD_FileFactory : public AUD_IFactory
-{
-private:
- /**
- * The filename of the sound source file.
- */
- std::string m_filename;
-
- /**
- * The buffer to read from.
- */
- boost::shared_ptr<AUD_Buffer> m_buffer;
-
- // hide copy constructor and operator=
- AUD_FileFactory(const AUD_FileFactory&);
- AUD_FileFactory& operator=(const AUD_FileFactory&);
-
-public:
- /**
- * Creates a new factory.
- * \param filename The sound file path.
- */
- AUD_FileFactory(std::string filename);
-
- /**
- * Creates a new factory.
- * \param buffer The buffer to read from.
- * \param size The size of the buffer.
- */
- AUD_FileFactory(const data_t* buffer, int size);
-
- virtual boost::shared_ptr<AUD_IReader> createReader();
-};
-
-#endif //__AUD_FILEFACTORY_H__
diff --git a/intern/audaspace/intern/AUD_FileWriter.cpp b/intern/audaspace/intern/AUD_FileWriter.cpp
deleted file mode 100644
index e3072fa82e0..00000000000
--- a/intern/audaspace/intern/AUD_FileWriter.cpp
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_FileWriter.cpp
- * \ingroup audaspaceintern
- */
-
-#ifdef WITH_FFMPEG
-// needed for INT64_C
-#ifndef __STDC_CONSTANT_MACROS
-#define __STDC_CONSTANT_MACROS
-#endif
-#include "AUD_FFMPEGWriter.h"
-#endif
-
-#ifdef WITH_SNDFILE
-#include "AUD_SndFileWriter.h"
-#endif
-
-#include "AUD_FileWriter.h"
-#include "AUD_Buffer.h"
-
-static const char* write_error = "AUD_FileWriter: File couldn't be written.";
-
-boost::shared_ptr<AUD_IWriter> AUD_FileWriter::createWriter(std::string filename,AUD_DeviceSpecs specs,
- AUD_Container format, AUD_Codec codec, unsigned int bitrate)
-{
-#ifdef WITH_SNDFILE
- try
- {
- return boost::shared_ptr<AUD_IWriter>(new AUD_SndFileWriter(filename, specs, format, codec, bitrate));
- }
- catch(AUD_Exception&) {}
-#endif
-
-#ifdef WITH_FFMPEG
- try
- {
- return boost::shared_ptr<AUD_IWriter>(new AUD_FFMPEGWriter(filename, specs, format, codec, bitrate));
- }
- catch(AUD_Exception&) {}
-#endif
-
- AUD_THROW(AUD_ERROR_SPECS, write_error);
-}
-
-void AUD_FileWriter::writeReader(boost::shared_ptr<AUD_IReader> reader, boost::shared_ptr<AUD_IWriter> writer, unsigned int length, unsigned int buffersize)
-{
- AUD_Buffer buffer(buffersize * AUD_SAMPLE_SIZE(writer->getSpecs()));
- sample_t* buf = buffer.getBuffer();
-
- int len;
- bool eos = false;
- int channels = writer->getSpecs().channels;
-
- for(unsigned int pos = 0; ((pos < length) || (length <= 0)) && !eos; pos += len)
- {
- len = buffersize;
- if((len > length - pos) && (length > 0))
- len = length - pos;
- reader->read(len, eos, buf);
-
- for(int i = 0; i < len * channels; i++)
- {
- // clamping!
- if(buf[i] > 1)
- buf[i] = 1;
- else if(buf[i] < -1)
- buf[i] = -1;
- }
-
- writer->write(len, buf);
- }
-}
-
-void AUD_FileWriter::writeReader(boost::shared_ptr<AUD_IReader> reader, std::vector<boost::shared_ptr<AUD_IWriter> >& writers, unsigned int length, unsigned int buffersize)
-{
- AUD_Buffer buffer(buffersize * AUD_SAMPLE_SIZE(reader->getSpecs()));
- AUD_Buffer buffer2(buffersize * sizeof(sample_t));
- sample_t* buf = buffer.getBuffer();
- sample_t* buf2 = buffer2.getBuffer();
-
- int len;
- bool eos = false;
- int channels = reader->getSpecs().channels;
-
- for(unsigned int pos = 0; ((pos < length) || (length <= 0)) && !eos; pos += len)
- {
- len = buffersize;
- if((len > length - pos) && (length > 0))
- len = length - pos;
- reader->read(len, eos, buf);
-
- for(int channel = 0; channel < channels; channel++)
- {
- for(int i = 0; i < len; i++)
- {
- // clamping!
- if(buf[i * channels + channel] > 1)
- buf2[i] = 1;
- else if(buf[i * channels + channel] < -1)
- buf2[i] = -1;
- else
- buf2[i] = buf[i * channels + channel];
- }
-
- writers[channel]->write(len, buf2);
- }
- }
-}
diff --git a/intern/audaspace/intern/AUD_FileWriter.h b/intern/audaspace/intern/AUD_FileWriter.h
deleted file mode 100644
index 3291c1ad03a..00000000000
--- a/intern/audaspace/intern/AUD_FileWriter.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_FileWriter.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_FILEWRITER_H__
-#define __AUD_FILEWRITER_H__
-
-#include <string>
-#include <vector>
-#include <boost/shared_ptr.hpp>
-
-#include "AUD_IWriter.h"
-#include "AUD_IReader.h"
-
-/**
- * This class is able to create IWriter classes as well as write reads to them.
- */
-class AUD_FileWriter
-{
-private:
- // hide default constructor, copy constructor and operator=
- AUD_FileWriter();
- AUD_FileWriter(const AUD_FileWriter&);
- AUD_FileWriter& operator=(const AUD_FileWriter&);
-
-public:
- /**
- * Creates a new IWriter.
- * \param filename The file to write to.
- * \param specs The file's audio specification.
- * \param format The file's container format.
- * \param codec The codec used for encoding the audio data.
- * \param bitrate The bitrate for encoding.
- * \return The writer to write data to.
- */
- static boost::shared_ptr<AUD_IWriter> createWriter(std::string filename, AUD_DeviceSpecs specs, AUD_Container format, AUD_Codec codec, unsigned int bitrate);
-
- /**
- * Writes a reader to a writer.
- * \param reader The reader to read from.
- * \param writer The writer to write to.
- * \param length How many samples should be transferred.
- * \param buffersize How many samples should be transferred at once.
- */
- static void writeReader(boost::shared_ptr<AUD_IReader> reader, boost::shared_ptr<AUD_IWriter> writer, unsigned int length, unsigned int buffersize);
-
- /**
- * Writes a reader to several writers.
- * \param reader The reader to read from.
- * \param writers The writers to write to.
- * \param length How many samples should be transferred.
- * \param buffersize How many samples should be transferred at once.
- */
- static void writeReader(boost::shared_ptr<AUD_IReader> reader, std::vector<boost::shared_ptr<AUD_IWriter> >& writers, unsigned int length, unsigned int buffersize);
-};
-
-#endif //__AUD_FILEWRITER_H__
diff --git a/intern/audaspace/intern/AUD_I3DDevice.h b/intern/audaspace/intern/AUD_I3DDevice.h
deleted file mode 100644
index 1df710b7e5b..00000000000
--- a/intern/audaspace/intern/AUD_I3DDevice.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_I3DDevice.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_I3DDEVICE_H__
-#define __AUD_I3DDEVICE_H__
-
-#include "AUD_Space.h"
-#include "AUD_3DMath.h"
-
-/**
- * This class represents an output device for 3D sound.
- */
-class AUD_I3DDevice
-{
-public:
- /**
- * Retrieves the listener location.
- * \return The listener location.
- */
- virtual AUD_Vector3 getListenerLocation() const=0;
-
- /**
- * Sets the listener location.
- * \param location The new location.
- */
- virtual void setListenerLocation(const AUD_Vector3& location)=0;
-
- /**
- * Retrieves the listener velocity.
- * \return The listener velocity.
- */
- virtual AUD_Vector3 getListenerVelocity() const=0;
-
- /**
- * Sets the listener velocity.
- * \param velocity The new velocity.
- */
- virtual void setListenerVelocity(const AUD_Vector3& velocity)=0;
-
- /**
- * Retrieves the listener orientation.
- * \return The listener orientation as quaternion.
- */
- virtual AUD_Quaternion getListenerOrientation() const=0;
-
- /**
- * Sets the listener orientation.
- * \param orientation The new orientation as quaternion.
- */
- virtual void setListenerOrientation(const AUD_Quaternion& orientation)=0;
-
-
- /**
- * Retrieves the speed of sound.
- * This value is needed for doppler effect calculation.
- * \return The speed of sound.
- */
- virtual float getSpeedOfSound() const=0;
-
- /**
- * Sets the speed of sound.
- * This value is needed for doppler effect calculation.
- * \param speed The new speed of sound.
- */
- virtual void setSpeedOfSound(float speed)=0;
-
- /**
- * Retrieves the doppler factor.
- * This value is a scaling factor for the velocity vectors of sources and
- * listener which is used while calculating the doppler effect.
- * \return The doppler factor.
- */
- virtual float getDopplerFactor() const=0;
-
- /**
- * Sets the doppler factor.
- * This value is a scaling factor for the velocity vectors of sources and
- * listener which is used while calculating the doppler effect.
- * \param factor The new doppler factor.
- */
- virtual void setDopplerFactor(float factor)=0;
-
- /**
- * Retrieves the distance model.
- * \return The distance model.
- */
- virtual AUD_DistanceModel getDistanceModel() const=0;
-
- /**
- * Sets the distance model.
- * \param model distance model.
- */
- virtual void setDistanceModel(AUD_DistanceModel model)=0;
-};
-
-#endif //__AUD_I3DDEVICE_H__
diff --git a/intern/audaspace/intern/AUD_I3DHandle.h b/intern/audaspace/intern/AUD_I3DHandle.h
deleted file mode 100644
index 69ca985630a..00000000000
--- a/intern/audaspace/intern/AUD_I3DHandle.h
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_I3DHandle.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_I3DHANDLE_H__
-#define __AUD_I3DHANDLE_H__
-
-#include "AUD_Space.h"
-#include "AUD_3DMath.h"
-
-/**
- * This class represents a playback handle for 3D sources.
- */
-class AUD_I3DHandle
-{
-public:
- /**
- * Destroys the handle.
- */
- virtual ~AUD_I3DHandle() {}
-
- /**
- * Retrieves the location of a source.
- * \return The location.
- */
- virtual AUD_Vector3 getSourceLocation()=0;
-
- /**
- * Sets the location of a source.
- * \param location The new location.
- * \return Whether the action succeeded.
- */
- virtual bool setSourceLocation(const AUD_Vector3& location)=0;
-
- /**
- * Retrieves the velocity of a source.
- * \return The velocity.
- */
- virtual AUD_Vector3 getSourceVelocity()=0;
-
- /**
- * Sets the velocity of a source.
- * \param velocity The new velocity.
- * \return Whether the action succeeded.
- */
- virtual bool setSourceVelocity(const AUD_Vector3& velocity)=0;
-
- /**
- * Retrieves the orientation of a source.
- * \return The orientation as quaternion.
- */
- virtual AUD_Quaternion getSourceOrientation()=0;
-
- /**
- * Sets the orientation of a source.
- * \param orientation The new orientation as quaternion.
- * \return Whether the action succeeded.
- */
- virtual bool setSourceOrientation(const AUD_Quaternion& orientation)=0;
-
-
- /**
- * Checks whether the source location, velocity and orientation are relative
- * to the listener.
- * \return Whether the source is relative.
- */
- virtual bool isRelative()=0;
-
- /**
- * Sets whether the source location, velocity and orientation are relative
- * to the listener.
- * \param relative Whether the source is relative.
- * \return Whether the action succeeded.
- */
- virtual bool setRelative(bool relative)=0;
-
- /**
- * Retrieves the maximum volume of a source.
- * \return The maximum volume.
- */
- virtual float getVolumeMaximum()=0;
-
- /**
- * Sets the maximum volume of a source.
- * \param volume The new maximum volume.
- * \return Whether the action succeeded.
- */
- virtual bool setVolumeMaximum(float volume)=0;
-
- /**
- * Retrieves the minimum volume of a source.
- * \return The minimum volume.
- */
- virtual float getVolumeMinimum()=0;
-
- /**
- * Sets the minimum volume of a source.
- * \param volume The new minimum volume.
- * \return Whether the action succeeded.
- */
- virtual bool setVolumeMinimum(float volume)=0;
-
- /**
- * Retrieves the maximum distance of a source.
- * If a source is further away from the reader than this distance, the
- * volume will automatically be set to 0.
- * \return The maximum distance.
- */
- virtual float getDistanceMaximum()=0;
-
- /**
- * Sets the maximum distance of a source.
- * If a source is further away from the reader than this distance, the
- * volume will automatically be set to 0.
- * \param distance The new maximum distance.
- * \return Whether the action succeeded.
- */
- virtual bool setDistanceMaximum(float distance)=0;
-
- /**
- * Retrieves the reference distance of a source.
- * \return The reference distance.
- */
- virtual float getDistanceReference()=0;
-
- /**
- * Sets the reference distance of a source.
- * \param distance The new reference distance.
- * \return Whether the action succeeded.
- */
- virtual bool setDistanceReference(float distance)=0;
-
- /**
- * Retrieves the attenuation of a source.
- * \return The attenuation.
- */
- virtual float getAttenuation()=0;
-
- /**
- * Sets the attenuation of a source.
- * This value is used for distance calculation.
- * \param factor The new attenuation.
- * \return Whether the action succeeded.
- */
- virtual bool setAttenuation(float factor)=0;
-
- /**
- * Retrieves the outer angle of the cone of a source.
- * \return The outer angle of the cone.
- */
- virtual float getConeAngleOuter()=0;
-
- /**
- * Sets the outer angle of the cone of a source.
- * \param angle The new outer angle of the cone.
- * \return Whether the action succeeded.
- */
- virtual bool setConeAngleOuter(float angle)=0;
-
- /**
- * Retrieves the inner angle of the cone of a source.
- * \return The inner angle of the cone.
- */
- virtual float getConeAngleInner()=0;
-
- /**
- * Sets the inner angle of the cone of a source.
- * \param angle The new inner angle of the cone.
- * \return Whether the action succeeded.
- */
- virtual bool setConeAngleInner(float angle)=0;
-
- /**
- * Retrieves the outer volume of the cone of a source.
- * The volume between inner and outer angle is interpolated between inner
- * volume and this value.
- * \return The outer volume of the cone.
- */
- virtual float getConeVolumeOuter()=0;
-
- /**
- * Sets the outer volume of the cone of a source.
- * The volume between inner and outer angle is interpolated between inner
- * volume and this value.
- * \param volume The new outer volume of the cone.
- * \return Whether the action succeeded.
- */
- virtual bool setConeVolumeOuter(float volume)=0;
-};
-
-#endif //__AUD_I3DHANDLE_H__
diff --git a/intern/audaspace/intern/AUD_IDevice.h b/intern/audaspace/intern/AUD_IDevice.h
deleted file mode 100644
index a7f9a985ce4..00000000000
--- a/intern/audaspace/intern/AUD_IDevice.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_IDevice.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_IDEVICE_H__
-#define __AUD_IDEVICE_H__
-
-#include "AUD_Space.h"
-#include "AUD_IFactory.h"
-#include "AUD_IReader.h"
-#include "AUD_IHandle.h"
-#include "AUD_ILockable.h"
-
-#include <boost/shared_ptr.hpp>
-
-/**
- * This class represents an output device for sound sources.
- * Output devices may be several backends such as plattform independand like
- * SDL or OpenAL or plattform specific like DirectSound, but they may also be
- * files, RAM buffers or other types of streams.
- * \warning Thread safety must be insured so that no reader is beeing called
- * twice at the same time.
- */
-class AUD_IDevice : public AUD_ILockable
-{
-public:
- /**
- * Destroys the device.
- */
- virtual ~AUD_IDevice() {}
-
- /**
- * Returns the specification of the device.
- */
- virtual AUD_DeviceSpecs getSpecs() const=0;
-
- /**
- * Plays a sound source.
- * \param reader The reader to play.
- * \param keep When keep is true the sound source will not be deleted but
- * set to paused when its end has been reached.
- * \return Returns a handle with which the playback can be controlled.
- * This is NULL if the sound couldn't be played back.
- * \exception AUD_Exception Thrown if there's an unexpected (from the
- * device side) error during creation of the reader.
- */
- virtual boost::shared_ptr<AUD_IHandle> play(boost::shared_ptr<AUD_IReader> reader, bool keep = false)=0;
-
- /**
- * Plays a sound source.
- * \param factory The factory to create the reader for the sound source.
- * \param keep When keep is true the sound source will not be deleted but
- * set to paused when its end has been reached.
- * \return Returns a handle with which the playback can be controlled.
- * This is NULL if the sound couldn't be played back.
- * \exception AUD_Exception Thrown if there's an unexpected (from the
- * device side) error during creation of the reader.
- */
- virtual boost::shared_ptr<AUD_IHandle> play(boost::shared_ptr<AUD_IFactory> factory, bool keep = false)=0;
-
- /**
- * Stops all playing sounds.
- */
- virtual void stopAll()=0;
-
- /**
- * Locks the device.
- * Used to make sure that between lock and unlock, no buffers are read, so
- * that it is possible to start, resume, pause, stop or seek several
- * playback handles simultaneously.
- * \warning Make sure the locking time is as small as possible to avoid
- * playback delays that result in unexpected noise and cracks.
- */
- virtual void lock()=0;
-
- /**
- * Unlocks the previously locked device.
- */
- virtual void unlock()=0;
-
- /**
- * Retrieves the overall device volume.
- * \return The overall device volume.
- */
- virtual float getVolume() const=0;
-
- /**
- * Sets the overall device volume.
- * \param handle The sound handle.
- * \param volume The overall device volume.
- */
- virtual void setVolume(float volume)=0;
-};
-
-#endif //AUD_IDevice
diff --git a/intern/audaspace/intern/AUD_IFactory.h b/intern/audaspace/intern/AUD_IFactory.h
deleted file mode 100644
index 75103963c68..00000000000
--- a/intern/audaspace/intern/AUD_IFactory.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_IFactory.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_IFACTORY_H__
-#define __AUD_IFACTORY_H__
-
-#include "AUD_Space.h"
-#include "AUD_IReader.h"
-
-#include <boost/shared_ptr.hpp>
-
-/**
- * This class represents a type of sound source and saves the necessary values
- * for it. It is able to create a reader that is actually usable for playback
- * of the respective sound source through the factory method createReader.
- */
-class AUD_IFactory
-{
-public:
- /**
- * Destroys the factory.
- */
- virtual ~AUD_IFactory() {}
-
- /**
- * Creates a reader for playback of the sound source.
- * \return A pointer to an AUD_IReader object or NULL if there has been an
- * error.
- * \exception AUD_Exception An exception may be thrown if there has been
- * a more unexpected error during reader creation.
- */
- virtual boost::shared_ptr<AUD_IReader> createReader()=0;
-};
-
-#endif //__AUD_IFACTORY_H__
diff --git a/intern/audaspace/intern/AUD_IHandle.h b/intern/audaspace/intern/AUD_IHandle.h
deleted file mode 100644
index c80fb4027b8..00000000000
--- a/intern/audaspace/intern/AUD_IHandle.h
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_IHandle.h
- * \ingroup audaspaceintern
- */
-
-#ifndef __AUD_IHANDLE_H__
-#define __AUD_IHANDLE_H__
-
-//#include "AUD_Space.h"
-//#include "AUD_Reference.h"
-
-typedef void (*stopCallback)(void*);
-
-/**
- * This class represents a playback handles for specific devices.
- */
-class AUD_IHandle
-{
-public:
- /**
- * Destroys the handle.
- */
- virtual ~AUD_IHandle() {}
-
- /**
- * Pauses a played back sound.
- * \return
- * - true if the sound has been paused.
- * - false if the sound isn't playing back or the handle is invalid.
- */
- virtual bool pause()=0;
-
- /**
- * Resumes a paused sound.
- * \return
- * - true if the sound has been resumed.
- * - false if the sound isn't paused or the handle is invalid.
- */
- virtual bool resume()=0;
-
- /**
- * Stops a played back or paused sound. The handle is definitely invalid
- * afterwards.
- * \return
- * - true if the sound has been stopped.
- * - false if the handle is invalid.
- */
- virtual bool stop()=0;
-
- /**
- * Gets the behaviour of the device for a played back sound when the sound
- * doesn't return any more samples.
- * \return
- * - true if the source will be paused when it's end is reached
- * - false if the handle won't kept or is invalid.
- */
- virtual bool getKeep()=0;
-
- /**
- * Sets the behaviour of the device for a played back sound when the sound
- * doesn't return any more samples.
- * \param keep True when the source should be paused and not deleted.
- * \return
- * - true if the behaviour has been changed.
- * - false if the handle is invalid.
- */
- virtual bool setKeep(bool keep)=0;
-
- /**
- * Seeks in a played back sound.
- * \param position The new position from where to play back, in seconds.
- * \return
- * - true if the handle is valid.
- * - false if the handle is invalid.
- * \warning Whether the seek works or not depends on the sound source.
- */
- virtual bool seek(float position)=0;
-
- /**
- * Retrieves the current playback position of a sound.
- * \return The playback position in seconds, or 0.0 if the handle is
- * invalid.
- */
- virtual float getPosition()=0;
-
- /**
- * Returns the status of a played back sound.
- * \return
- * - AUD_STATUS_INVALID if the sound has stopped or the handle is
- *. invalid
- * - AUD_STATUS_PLAYING if the sound is currently played back.
- * - AUD_STATUS_PAUSED if the sound is currently paused.
- * - AUD_STATUS_STOPPED if the sound finished playing and is still
- * kept in the device.
- * \see AUD_Status
- */
- virtual AUD_Status getStatus()=0;
-
- /**
- * Retrieves the volume of a playing sound.
- * \return The volume.
- */
- virtual float getVolume()=0;
-
- /**
- * Sets the volume of a playing sound.
- * \param volume The volume.
- * \return
- * - true if the handle is valid.
- * - false if the handle is invalid.
- */
- virtual bool setVolume(float volume)=0;
-
- /**
- * Retrieves the pitch of a playing sound.
- * \return The pitch.
- */
- virtual float getPitch()=0;
-
- /**
- * Sets the pitch of a playing sound.
- * \param pitch The pitch.
- * \return
- * - true if the handle is valid.
- * - false if the handle is invalid.
- */
- virtual bool setPitch(float pitch)=0;
-
- /**
- * Retrieves the loop count of a playing sound.
- * A negative value indicates infinity.
- * \return The remaining loop count.
- */
- virtual int getLoopCount()=0;
-
- /**
- * Sets the loop count of a playing sound.
- * A negative value indicates infinity.
- * \param count The new loop count.
- * \return
- * - true if the handle is valid.
- * - false if the handle is invalid.
- */
- virtual bool setLoopCount(int count)=0;
-
- /**
- * Sets the callback function that's called when the end of a playing sound
- * is reached.
- * \param callback The callback function.
- * \param data The data that should be passed to the callback function.
- * \return
- * - true if the handle is valid.
- * - false if the handle is invalid.
- */
- virtual bool setStopCallback(stopCallback callback = 0, void* data = 0)=0;
-};
-
-#endif //AUD_IHandle
diff --git a/intern/audaspace/intern/AUD_ILockable.h b/intern/audaspace/intern/AUD_ILockable.h
deleted file mode 100644
index 9bc417504fe..00000000000
--- a/intern/audaspace/intern/AUD_ILockable.h
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef AUD_ILOCKABLE_H
-#define AUD_ILOCKABLE_H
-
-/**
- * This class provides an interface for lockable objects.
- * The main reason for this interface is to be used with AUD_MutexLock.
- */
-class AUD_ILockable
-{
-public:
- /**
- * Locks the object.
- */
- virtual void lock()=0;
- /**
- * Unlocks the previously locked object.
- */
- virtual void unlock()=0;
-};
-
-#endif // AUD_ILOCKABLE_H
diff --git a/intern/audaspace/intern/AUD_IReader.h b/intern/audaspace/intern/AUD_IReader.h
deleted file mode 100644
index c2c9e607b55..00000000000
--- a/intern/audaspace/intern/AUD_IReader.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_IReader.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_IREADER_H__
-#define __AUD_IREADER_H__
-
-#include "AUD_Space.h"
-
-/**
- * This class represents a sound source as stream or as buffer which can be read
- * for example by another reader, a device or whatever.
- */
-class AUD_IReader
-{
-public:
- /**
- * Destroys the reader.
- */
- virtual ~AUD_IReader() {}
-
- /**
- * Tells whether the source provides seeking functionality or not.
- * \warning This doesn't mean that the seeking always has to succeed.
- * \return Always returns true for readers of buffering types.
- */
- virtual bool isSeekable() const=0;
-
- /**
- * Seeks to a specific position in the source.
- * \param position The position to seek for measured in samples. To get
- * from a given time to the samples you simply have to multiply the
- * time value in seconds with the sample rate of the reader.
- * \warning This may work or not, depending on the actual reader.
- */
- virtual void seek(int position)=0;
-
- /**
- * Returns an approximated length of the source in samples.
- * \return The length as sample count. May be negative if unknown.
- */
- virtual int getLength() const=0;
-
- /**
- * Returns the position of the source as a sample count value.
- * \return The current position in the source. A negative value indicates
- * that the position is unknown.
- * \warning The value returned doesn't always have to be correct for readers,
- * especially after seeking.
- */
- virtual int getPosition() const=0;
-
- /**
- * Returns the specification of the reader.
- * \return The AUD_Specs structure.
- */
- virtual AUD_Specs getSpecs() const=0;
-
- /**
- * Request to read the next length samples out of the source.
- * The buffer supplied has the needed size.
- * \param[in,out] length The count of samples that should be read. Shall
- * contain the real count of samples after reading, in case
- * there were only fewer samples available.
- * A smaller value also indicates the end of the reader.
- * \param[out] eos End of stream, whether the end is reached or not.
- * \param[in] buffer The pointer to the buffer to read into.
- */
- virtual void read(int& length, bool& eos, sample_t* buffer)=0;
-};
-
-#endif //__AUD_IREADER_H__
diff --git a/intern/audaspace/intern/AUD_IWriter.h b/intern/audaspace/intern/AUD_IWriter.h
deleted file mode 100644
index 5406577dd50..00000000000
--- a/intern/audaspace/intern/AUD_IWriter.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_IWriter.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_IWRITER_H__
-#define __AUD_IWRITER_H__
-
-#include "AUD_Space.h"
-
-/**
- * This class represents a sound sink where audio data can be written to.
- */
-class AUD_IWriter
-{
-public:
- /**
- * Destroys the writer.
- */
- virtual ~AUD_IWriter() {}
-
- /**
- * Returns how many samples have been written so far.
- * \return The writing position as sample count. May be negative if unknown.
- */
- virtual int getPosition() const=0;
-
- /**
- * Returns the specification of the audio data being written into the sink.
- * \return The AUD_DeviceSpecs structure.
- * \note Regardless of the format the input still has to be float!
- */
- virtual AUD_DeviceSpecs getSpecs() const=0;
-
- /**
- * Request to write the next length samples out into the sink.
- * \param length The count of samples to write.
- * \param buffer The pointer to the buffer containing the data.
- */
- virtual void write(unsigned int length, sample_t* buffer)=0;
-};
-
-#endif //__AUD_IWRITER_H__
diff --git a/intern/audaspace/intern/AUD_JOSResampleFactory.cpp b/intern/audaspace/intern/AUD_JOSResampleFactory.cpp
deleted file mode 100644
index 188960f986f..00000000000
--- a/intern/audaspace/intern/AUD_JOSResampleFactory.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_JOSResampleFactory.cpp
- * \ingroup audaspaceintern
- */
-
-
-#include "AUD_JOSResampleFactory.h"
-#include "AUD_JOSResampleReader.h"
-
-AUD_JOSResampleFactory::AUD_JOSResampleFactory(boost::shared_ptr<AUD_IFactory> factory,
- AUD_DeviceSpecs specs) :
- AUD_MixerFactory(factory, specs)
-{
-}
-
-boost::shared_ptr<AUD_IReader> AUD_JOSResampleFactory::createReader()
-{
- return boost::shared_ptr<AUD_IReader>(new AUD_JOSResampleReader(getReader(), m_specs.specs));
-}
diff --git a/intern/audaspace/intern/AUD_JOSResampleFactory.h b/intern/audaspace/intern/AUD_JOSResampleFactory.h
deleted file mode 100644
index b6c2961c88a..00000000000
--- a/intern/audaspace/intern/AUD_JOSResampleFactory.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_JOSResampleFactory.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_JOSRESAMPLEFACTORY_H__
-#define __AUD_JOSRESAMPLEFACTORY_H__
-
-#include "AUD_MixerFactory.h"
-
-/**
- * This factory creates a resampling reader that does Julius O. Smith's resampling algorithm.
- */
-class AUD_JOSResampleFactory : public AUD_MixerFactory
-{
-private:
- // hide copy constructor and operator=
- AUD_JOSResampleFactory(const AUD_JOSResampleFactory&);
- AUD_JOSResampleFactory& operator=(const AUD_JOSResampleFactory&);
-
-public:
- /**
- * Creates a new factory.
- * \param factory The input factory.
- * \param specs The target specifications.
- */
- AUD_JOSResampleFactory(boost::shared_ptr<AUD_IFactory> factory, AUD_DeviceSpecs specs);
-
- virtual boost::shared_ptr<AUD_IReader> createReader();
-};
-
-#endif //__AUD_JOSRESAMPLEFACTORY_H__
diff --git a/intern/audaspace/intern/AUD_JOSResampleReader.cpp b/intern/audaspace/intern/AUD_JOSResampleReader.cpp
deleted file mode 100644
index 0448c75d777..00000000000
--- a/intern/audaspace/intern/AUD_JOSResampleReader.cpp
+++ /dev/null
@@ -1,422 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_JOSResampleReader.cpp
- * \ingroup audaspaceintern
- */
-
-#include "AUD_JOSResampleReader.h"
-
-#include "AUD_JOSResampleReaderCoeff.cpp"
-
-#include <cmath>
-#include <cstring>
-#include <iostream>
-
-/* MSVC does not have lrint */
-#ifdef _MSC_VER
-#if _MSC_VER < 1800
-#ifdef _M_X64
-#include <emmintrin.h>
-static inline int lrint(double d)
-{
- return _mm_cvtsd_si32(_mm_load_sd(&d));
-}
-#else
-static inline int lrint(double d)
-{
- int i;
-
- _asm{
- fld d
- fistp i
- };
-
- return i;
-}
-#endif
-#endif
-#endif
-
-// UNUSED
-// #define CC m_channels + channel
-
-#define AUD_RATE_MAX 256
-#define SHIFT_BITS 12
-#define double_to_fp(x) (lrint(x * double(1 << SHIFT_BITS)))
-#define int_to_fp(x) (x << SHIFT_BITS)
-#define fp_to_int(x) (x >> SHIFT_BITS)
-#define fp_to_double(x) (x * 1.0/(1 << SHIFT_BITS))
-#define fp_rest(x) (x & ((1 << SHIFT_BITS) - 1))
-#define fp_rest_to_double(x) fp_to_double(fp_rest(x))
-
-AUD_JOSResampleReader::AUD_JOSResampleReader(boost::shared_ptr<AUD_IReader> reader, AUD_Specs specs) :
- AUD_ResampleReader(reader, specs.rate),
- m_channels(AUD_CHANNELS_INVALID),
- m_n(0),
- m_P(0),
- m_cache_valid(0),
- m_last_factor(0)
-{
-}
-
-void AUD_JOSResampleReader::reset()
-{
- m_cache_valid = 0;
- m_n = 0;
- m_P = 0;
- m_last_factor = 0;
-}
-
-void AUD_JOSResampleReader::updateBuffer(int size, double factor, int samplesize)
-{
- unsigned int len;
- double num_samples = double(m_len) / double(m_L);
- // first calculate what length we need right now
- if(factor >= 1)
- len = ceil(num_samples);
- else
- len = (unsigned int)(ceil(num_samples / factor));
-
- // then check if afterwards the length is enough for the maximum rate
- if(len + size < num_samples * AUD_RATE_MAX)
- len = num_samples * AUD_RATE_MAX - size;
-
- if(m_n > len)
- {
- sample_t* buf = m_buffer.getBuffer();
- len = m_n - len;
- memmove(buf, buf + len * m_channels, (m_cache_valid - len) * samplesize);
- m_n -= len;
- m_cache_valid -= len;
- }
-
- m_buffer.assureSize((m_cache_valid + size) * samplesize, true);
-}
-
-#define RESAMPLE_METHOD(name, left, right) void AUD_JOSResampleReader::name(double target_factor, int length, sample_t* buffer)\
-{\
- sample_t* buf = m_buffer.getBuffer();\
-\
- unsigned int P, l;\
- int end, channel, i;\
- double eta, v, f_increment, factor;\
-\
- m_sums.assureSize(m_channels * sizeof(double));\
- double* sums = reinterpret_cast<double*>(m_sums.getBuffer());\
- sample_t* data;\
- const float* coeff = m_coeff;\
-\
- unsigned int P_increment;\
-\
- for(unsigned int t = 0; t < length; t++)\
- {\
- factor = (m_last_factor * (length - t - 1) + target_factor * (t + 1)) / length;\
-\
- memset(sums, 0, sizeof(double) * m_channels);\
-\
- if(factor >= 1)\
- {\
- P = double_to_fp(m_P * m_L);\
-\
- end = floor(m_len / double(m_L) - m_P) - 1;\
- if(m_n < end)\
- end = m_n;\
-\
- data = buf + (m_n - end) * m_channels;\
- l = fp_to_int(P);\
- eta = fp_rest_to_double(P);\
- l += m_L * end;\
-\
- for(i = 0; i <= end; i++)\
- {\
- v = coeff[l] + eta * (coeff[l+1] - coeff[l]);\
- l -= m_L;\
- left\
- }\
-\
- P = int_to_fp(m_L) - P;\
-\
- end = floor((m_len - 1) / double(m_L) + m_P) - 1;\
- if(m_cache_valid - m_n - 2 < end)\
- end = m_cache_valid - m_n - 2;\
-\
- data = buf + (m_n + 2 + end) * m_channels - 1;\
- l = fp_to_int(P);\
- eta = fp_rest_to_double(P);\
- l += m_L * end;\
-\
- for(i = 0; i <= end; i++)\
- {\
- v = coeff[l] + eta * (coeff[l+1] - coeff[l]);\
- l -= m_L;\
- right\
- }\
-\
- for(channel = 0; channel < m_channels; channel++)\
- {\
- *buffer = sums[channel];\
- buffer++;\
- }\
- }\
- else\
- {\
- f_increment = factor * m_L;\
- P_increment = double_to_fp(f_increment);\
- P = double_to_fp(m_P * f_increment);\
-\
- end = (int_to_fp(m_len) - P) / P_increment - 1;\
- if(m_n < end)\
- end = m_n;\
-\
- P += P_increment * end;\
- data = buf + (m_n - end) * m_channels;\
- l = fp_to_int(P);\
-\
- for(i = 0; i <= end; i++)\
- {\
- eta = fp_rest_to_double(P);\
- v = coeff[l] + eta * (coeff[l+1] - coeff[l]);\
- P -= P_increment;\
- l = fp_to_int(P);\
- left\
- }\
-\
- P = 0 - P;\
-\
- end = (int_to_fp(m_len) - P) / P_increment - 1;\
- if(m_cache_valid - m_n - 2 < end)\
- end = m_cache_valid - m_n - 2;\
-\
- P += P_increment * end;\
- data = buf + (m_n + 2 + end) * m_channels - 1;\
- l = fp_to_int(P);\
-\
- for(i = 0; i <= end; i++)\
- {\
- eta = fp_rest_to_double(P);\
- v = coeff[l] + eta * (coeff[l+1] - coeff[l]);\
- P -= P_increment;\
- l = fp_to_int(P);\
- right\
- }\
-\
- for(channel = 0; channel < m_channels; channel++)\
- {\
- *buffer = factor * sums[channel];\
- buffer++;\
- }\
- }\
-\
- m_P += fmod(1.0 / factor, 1.0);\
- m_n += floor(1.0 / factor);\
-\
- while(m_P >= 1.0)\
- {\
- m_P -= 1.0;\
- m_n++;\
- }\
- }\
-}
-
-RESAMPLE_METHOD(resample, {
- channel = 0;
- do
- {
- sums[channel] += *data * v;
- channel++;
- data++;
- }
- while(channel < m_channels);
-}, {
- channel = m_channels;
- do
- {
- channel--;
- sums[channel] += *data * v;
- data--;
- }
- while(channel);
-})
-
-RESAMPLE_METHOD(resample_mono, {
- *sums += *data * v;
- data++;
-}, {
- *sums += *data * v;
- data--;
-})
-
-RESAMPLE_METHOD(resample_stereo, {
- sums[0] += data[0] * v;
- sums[1] += data[1] * v;
- data+=2;
-}, {
- data-=2;
- sums[0] += data[1] * v;
- sums[1] += data[2] * v;
-})
-
-void AUD_JOSResampleReader::seek(int position)
-{
- position = floor(position * double(m_reader->getSpecs().rate) / double(m_rate));
- m_reader->seek(position);
- reset();
-}
-
-int AUD_JOSResampleReader::getLength() const
-{
- return floor(m_reader->getLength() * double(m_rate) / double(m_reader->getSpecs().rate));
-}
-
-int AUD_JOSResampleReader::getPosition() const
-{
- return floor((m_reader->getPosition() + double(m_P))
- * m_rate / m_reader->getSpecs().rate);
-}
-
-AUD_Specs AUD_JOSResampleReader::getSpecs() const
-{
- AUD_Specs specs = m_reader->getSpecs();
- specs.rate = m_rate;
- return specs;
-}
-
-void AUD_JOSResampleReader::read(int& length, bool& eos, sample_t* buffer)
-{
- if(length == 0)
- return;
-
- AUD_Specs specs = m_reader->getSpecs();
-
- int samplesize = AUD_SAMPLE_SIZE(specs);
- double target_factor = double(m_rate) / double(specs.rate);
- eos = false;
- int len;
- double num_samples = double(m_len) / double(m_L);
-
- // check for channels changed
- if(specs.channels != m_channels)
- {
- m_channels = specs.channels;
- reset();
-
- switch(m_channels)
- {
- case AUD_CHANNELS_MONO:
- m_resample = &AUD_JOSResampleReader::resample_mono;
- break;
- case AUD_CHANNELS_STEREO:
- m_resample = &AUD_JOSResampleReader::resample_stereo;
- break;
- default:
- m_resample = &AUD_JOSResampleReader::resample;
- break;
- }
- }
-
- if(m_last_factor == 0)
- m_last_factor = target_factor;
-
- if(target_factor == 1 && m_last_factor == 1 && (m_P == 0))
- {
- // can read directly!
-
- len = length - (m_cache_valid - m_n);
-
- updateBuffer(len, target_factor, samplesize);
- sample_t* buf = m_buffer.getBuffer();
-
- m_reader->read(len, eos, buf + m_cache_valid * m_channels);
- m_cache_valid += len;
-
- length = m_cache_valid - m_n;
-
- if(length > 0)
- {
- memcpy(buffer, buf + m_n * m_channels, length * samplesize);
- m_n += length;
- }
-
- return;
- }
-
- // use minimum for the following calculations
- double factor = AUD_MIN(target_factor, m_last_factor);
-
- if(factor >= 1)
- len = (int(m_n) - m_cache_valid) + int(ceil(length / factor)) + ceil(num_samples);
- else
- len = (int(m_n) - m_cache_valid) + int(ceil(length / factor) + ceil(num_samples / factor));
-
- if(len > 0)
- {
- int should = len;
-
- updateBuffer(len, factor, samplesize);
-
- m_reader->read(len, eos, m_buffer.getBuffer() + m_cache_valid * m_channels);
- m_cache_valid += len;
-
- if(len < should)
- {
- if(len == 0 && eos)
- length = 0;
- else
- {
- // use maximum for the following calculations
- factor = AUD_MAX(target_factor, m_last_factor);
-
- if(eos)
- {
- // end of stream, let's check how many more samples we can produce
- len = floor((m_cache_valid - m_n) * factor);
- if(len < length)
- length = len;
- }
- else
- {
- // not enough data available yet, so we recalculate how many samples we can calculate
- if(factor >= 1)
- len = floor((num_samples + m_cache_valid - m_n) * factor);
- else
- len = floor((num_samples * factor + m_cache_valid - m_n) * factor);
- if(len < length)
- length = len;
- }
- }
- }
- }
-
- (this->*m_resample)(target_factor, length, buffer);
-
- m_last_factor = target_factor;
-
- if(m_n > m_cache_valid)
- {
- m_n = m_cache_valid;
- }
-
- eos = eos && ((m_n == m_cache_valid) || (length == 0));
-}
diff --git a/intern/audaspace/intern/AUD_JOSResampleReader.h b/intern/audaspace/intern/AUD_JOSResampleReader.h
deleted file mode 100644
index fb68e4dc9f5..00000000000
--- a/intern/audaspace/intern/AUD_JOSResampleReader.h
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_JOSResampleReader.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_JOSRESAMPLEREADER_H__
-#define __AUD_JOSRESAMPLEREADER_H__
-
-#include "AUD_ResampleReader.h"
-#include "AUD_Buffer.h"
-
-/**
- * This resampling reader uses Julius O. Smith's resampling algorithm.
- */
-class AUD_JOSResampleReader : public AUD_ResampleReader
-{
-private:
- typedef void (AUD_JOSResampleReader::*AUD_resample_f)(double target_factor, int length, sample_t* buffer);
-
- /**
- * The half filter length.
- */
- static const int m_len;
-
- /**
- * The sample step size for the filter.
- */
- static const int m_L;
-
- /**
- * The filter coefficients.
- */
- static const float m_coeff[];
-
- /**
- * The reader channels.
- */
- AUD_Channels m_channels;
-
- /**
- * The sample position in the cache.
- */
- unsigned int m_n;
-
- /**
- * The subsample position in the cache.
- */
- double m_P;
-
- /**
- * The input data buffer.
- */
- AUD_Buffer m_buffer;
-
- /**
- * Double buffer for the sums.
- */
- AUD_Buffer m_sums;
-
- /**
- * How many samples in the cache are valid.
- */
- int m_cache_valid;
-
- /**
- * Resample function.
- */
- AUD_resample_f m_resample;
-
- /**
- * Last resampling factor.
- */
- double m_last_factor;
-
- // hide copy constructor and operator=
- AUD_JOSResampleReader(const AUD_JOSResampleReader&);
- AUD_JOSResampleReader& operator=(const AUD_JOSResampleReader&);
-
- /**
- * Resets the resampler to its initial state.
- */
- void reset();
-
- /**
- * Updates the buffer to be as small as possible for the coming reading.
- * \param size The size of samples to be read.
- * \param factor The next resampling factor.
- * \param samplesize The size of a sample.
- */
- void updateBuffer(int size, double factor, int samplesize);
-
- void resample(double target_factor, int length, sample_t* buffer);
- void resample_mono(double target_factor, int length, sample_t* buffer);
- void resample_stereo(double target_factor, int length, sample_t* buffer);
-
-public:
- /**
- * Creates a resampling reader.
- * \param reader The reader to mix.
- * \param specs The target specification.
- */
- AUD_JOSResampleReader(boost::shared_ptr<AUD_IReader> reader, AUD_Specs specs);
-
- virtual void seek(int position);
- virtual int getLength() const;
- virtual int getPosition() const;
- virtual AUD_Specs getSpecs() const;
- virtual void read(int& length, bool& eos, sample_t* buffer);
-};
-
-#endif //__AUD_JOSRESAMPLEREADER_H__
diff --git a/intern/audaspace/intern/AUD_JOSResampleReaderCoeff.cpp b/intern/audaspace/intern/AUD_JOSResampleReaderCoeff.cpp
deleted file mode 100644
index f8fefd5b88f..00000000000
--- a/intern/audaspace/intern/AUD_JOSResampleReaderCoeff.cpp
+++ /dev/null
@@ -1,32545 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_JOSResampleReaderCoeff.cpp
- * \ingroup audaspaceintern
- */
-
-#include "AUD_JOSResampleReader.h"
-
-// sinc filter coefficients, Nz = 136, L = 2304, freq = 0.963904, Kaiser Window B = 16
-
-const int AUD_JOSResampleReader::m_len = 325078;
-const int AUD_JOSResampleReader::m_L = 2304;
-
-const float AUD_JOSResampleReader::m_coeff[] = {
-9.639035268e-01f, 9.639032492e-01f, 9.639024165e-01f, 9.639010286e-01f, 9.638990855e-01f, 9.638965872e-01f, 9.638935338e-01f, 9.638899253e-01f, 9.638857615e-01f, 9.638810427e-01f,
-9.638757686e-01f, 9.638699395e-01f, 9.638635552e-01f, 9.638566158e-01f, 9.638491212e-01f, 9.638410716e-01f, 9.638324668e-01f, 9.638233070e-01f, 9.638135921e-01f, 9.638033220e-01f,
-9.637924970e-01f, 9.637811168e-01f, 9.637691817e-01f, 9.637566915e-01f, 9.637436463e-01f, 9.637300461e-01f, 9.637158908e-01f, 9.637011807e-01f, 9.636859155e-01f, 9.636700955e-01f,
-9.636537204e-01f, 9.636367905e-01f, 9.636193057e-01f, 9.636012660e-01f, 9.635826715e-01f, 9.635635221e-01f, 9.635438179e-01f, 9.635235590e-01f, 9.635027452e-01f, 9.634813767e-01f,
-9.634594535e-01f, 9.634369755e-01f, 9.634139429e-01f, 9.633903556e-01f, 9.633662137e-01f, 9.633415171e-01f, 9.633162660e-01f, 9.632904603e-01f, 9.632641001e-01f, 9.632371854e-01f,
-9.632097162e-01f, 9.631816925e-01f, 9.631531144e-01f, 9.631239820e-01f, 9.630942951e-01f, 9.630640540e-01f, 9.630332585e-01f, 9.630019088e-01f, 9.629700049e-01f, 9.629375467e-01f,
-9.629045344e-01f, 9.628709680e-01f, 9.628368474e-01f, 9.628021728e-01f, 9.627669442e-01f, 9.627311616e-01f, 9.626948250e-01f, 9.626579345e-01f, 9.626204901e-01f, 9.625824919e-01f,
-9.625439399e-01f, 9.625048342e-01f, 9.624651747e-01f, 9.624249615e-01f, 9.623841947e-01f, 9.623428743e-01f, 9.623010004e-01f, 9.622585730e-01f, 9.622155921e-01f, 9.621720577e-01f,
-9.621279700e-01f, 9.620833290e-01f, 9.620381347e-01f, 9.619923872e-01f, 9.619460865e-01f, 9.618992326e-01f, 9.618518256e-01f, 9.618038656e-01f, 9.617553527e-01f, 9.617062867e-01f,
-9.616566679e-01f, 9.616064963e-01f, 9.615557718e-01f, 9.615044946e-01f, 9.614526648e-01f, 9.614002823e-01f, 9.613473472e-01f, 9.612938597e-01f, 9.612398196e-01f, 9.611852272e-01f,
-9.611300824e-01f, 9.610743853e-01f, 9.610181360e-01f, 9.609613345e-01f, 9.609039809e-01f, 9.608460752e-01f, 9.607876175e-01f, 9.607286079e-01f, 9.606690464e-01f, 9.606089331e-01f,
-9.605482681e-01f, 9.604870514e-01f, 9.604252830e-01f, 9.603629631e-01f, 9.603000916e-01f, 9.602366688e-01f, 9.601726945e-01f, 9.601081690e-01f, 9.600430923e-01f, 9.599774643e-01f,
-9.599112853e-01f, 9.598445553e-01f, 9.597772742e-01f, 9.597094423e-01f, 9.596410596e-01f, 9.595721262e-01f, 9.595026420e-01f, 9.594326073e-01f, 9.593620220e-01f, 9.592908862e-01f,
-9.592192001e-01f, 9.591469636e-01f, 9.590741770e-01f, 9.590008401e-01f, 9.589269532e-01f, 9.588525163e-01f, 9.587775294e-01f, 9.587019927e-01f, 9.586259062e-01f, 9.585492700e-01f,
-9.584720842e-01f, 9.583943488e-01f, 9.583160640e-01f, 9.582372298e-01f, 9.581578463e-01f, 9.580779136e-01f, 9.579974318e-01f, 9.579164010e-01f, 9.578348211e-01f, 9.577526924e-01f,
-9.576700149e-01f, 9.575867887e-01f, 9.575030139e-01f, 9.574186906e-01f, 9.573338188e-01f, 9.572483986e-01f, 9.571624302e-01f, 9.570759136e-01f, 9.569888489e-01f, 9.569012362e-01f,
-9.568130756e-01f, 9.567243672e-01f, 9.566351110e-01f, 9.565453072e-01f, 9.564549559e-01f, 9.563640571e-01f, 9.562726110e-01f, 9.561806176e-01f, 9.560880771e-01f, 9.559949895e-01f,
-9.559013549e-01f, 9.558071734e-01f, 9.557124452e-01f, 9.556171703e-01f, 9.555213488e-01f, 9.554249808e-01f, 9.553280665e-01f, 9.552306058e-01f, 9.551325990e-01f, 9.550340461e-01f,
-9.549349473e-01f, 9.548353025e-01f, 9.547351120e-01f, 9.546343759e-01f, 9.545330941e-01f, 9.544312670e-01f, 9.543288944e-01f, 9.542259766e-01f, 9.541225137e-01f, 9.540185058e-01f,
-9.539139529e-01f, 9.538088552e-01f, 9.537032128e-01f, 9.535970258e-01f, 9.534902944e-01f, 9.533830185e-01f, 9.532751984e-01f, 9.531668341e-01f, 9.530579258e-01f, 9.529484736e-01f,
-9.528384775e-01f, 9.527279378e-01f, 9.526168545e-01f, 9.525052276e-01f, 9.523930575e-01f, 9.522803441e-01f, 9.521670875e-01f, 9.520532880e-01f, 9.519389456e-01f, 9.518240604e-01f,
-9.517086326e-01f, 9.515926622e-01f, 9.514761494e-01f, 9.513590944e-01f, 9.512414971e-01f, 9.511233578e-01f, 9.510046766e-01f, 9.508854536e-01f, 9.507656889e-01f, 9.506453827e-01f,
-9.505245350e-01f, 9.504031460e-01f, 9.502812159e-01f, 9.501587447e-01f, 9.500357325e-01f, 9.499121796e-01f, 9.497880860e-01f, 9.496634518e-01f, 9.495382773e-01f, 9.494125624e-01f,
-9.492863074e-01f, 9.491595124e-01f, 9.490321775e-01f, 9.489043028e-01f, 9.487758886e-01f, 9.486469348e-01f, 9.485174416e-01f, 9.483874092e-01f, 9.482568378e-01f, 9.481257273e-01f,
-9.479940781e-01f, 9.478618902e-01f, 9.477291637e-01f, 9.475958988e-01f, 9.474620956e-01f, 9.473277543e-01f, 9.471928750e-01f, 9.470574579e-01f, 9.469215030e-01f, 9.467850106e-01f,
-9.466479807e-01f, 9.465104136e-01f, 9.463723093e-01f, 9.462336679e-01f, 9.460944898e-01f, 9.459547749e-01f, 9.458145234e-01f, 9.456737355e-01f, 9.455324113e-01f, 9.453905510e-01f,
-9.452481547e-01f, 9.451052225e-01f, 9.449617546e-01f, 9.448177513e-01f, 9.446732125e-01f, 9.445281384e-01f, 9.443825293e-01f, 9.442363852e-01f, 9.440897063e-01f, 9.439424928e-01f,
-9.437947447e-01f, 9.436464624e-01f, 9.434976458e-01f, 9.433482953e-01f, 9.431984108e-01f, 9.430479926e-01f, 9.428970409e-01f, 9.427455557e-01f, 9.425935373e-01f, 9.424409858e-01f,
-9.422879014e-01f, 9.421342841e-01f, 9.419801343e-01f, 9.418254520e-01f, 9.416702374e-01f, 9.415144906e-01f, 9.413582119e-01f, 9.412014013e-01f, 9.410440591e-01f, 9.408861854e-01f,
-9.407277804e-01f, 9.405688442e-01f, 9.404093770e-01f, 9.402493790e-01f, 9.400888502e-01f, 9.399277910e-01f, 9.397662015e-01f, 9.396040817e-01f, 9.394414320e-01f, 9.392782524e-01f,
-9.391145432e-01f, 9.389503045e-01f, 9.387855364e-01f, 9.386202392e-01f, 9.384544130e-01f, 9.382880579e-01f, 9.381211743e-01f, 9.379537621e-01f, 9.377858217e-01f, 9.376173531e-01f,
-9.374483566e-01f, 9.372788323e-01f, 9.371087804e-01f, 9.369382011e-01f, 9.367670945e-01f, 9.365954609e-01f, 9.364233003e-01f, 9.362506131e-01f, 9.360773993e-01f, 9.359036592e-01f,
-9.357293928e-01f, 9.355546005e-01f, 9.353792824e-01f, 9.352034386e-01f, 9.350270693e-01f, 9.348501748e-01f, 9.346727552e-01f, 9.344948107e-01f, 9.343163415e-01f, 9.341373477e-01f,
-9.339578296e-01f, 9.337777873e-01f, 9.335972210e-01f, 9.334161310e-01f, 9.332345173e-01f, 9.330523802e-01f, 9.328697199e-01f, 9.326865365e-01f, 9.325028302e-01f, 9.323186014e-01f,
-9.321338500e-01f, 9.319485763e-01f, 9.317627806e-01f, 9.315764629e-01f, 9.313896236e-01f, 9.312022627e-01f, 9.310143805e-01f, 9.308259772e-01f, 9.306370529e-01f, 9.304476080e-01f,
-9.302576424e-01f, 9.300671565e-01f, 9.298761505e-01f, 9.296846245e-01f, 9.294925788e-01f, 9.293000135e-01f, 9.291069289e-01f, 9.289133251e-01f, 9.287192023e-01f, 9.285245608e-01f,
-9.283294007e-01f, 9.281337223e-01f, 9.279375257e-01f, 9.277408112e-01f, 9.275435789e-01f, 9.273458291e-01f, 9.271475619e-01f, 9.269487776e-01f, 9.267494764e-01f, 9.265496585e-01f,
-9.263493240e-01f, 9.261484732e-01f, 9.259471064e-01f, 9.257452236e-01f, 9.255428251e-01f, 9.253399112e-01f, 9.251364820e-01f, 9.249325378e-01f, 9.247280787e-01f, 9.245231049e-01f,
-9.243176167e-01f, 9.241116144e-01f, 9.239050980e-01f, 9.236980678e-01f, 9.234905241e-01f, 9.232824670e-01f, 9.230738967e-01f, 9.228648135e-01f, 9.226552177e-01f, 9.224451093e-01f,
-9.222344886e-01f, 9.220233559e-01f, 9.218117113e-01f, 9.215995551e-01f, 9.213868875e-01f, 9.211737087e-01f, 9.209600189e-01f, 9.207458184e-01f, 9.205311074e-01f, 9.203158860e-01f,
-9.201001546e-01f, 9.198839133e-01f, 9.196671624e-01f, 9.194499020e-01f, 9.192321325e-01f, 9.190138540e-01f, 9.187950667e-01f, 9.185757710e-01f, 9.183559669e-01f, 9.181356548e-01f,
-9.179148349e-01f, 9.176935073e-01f, 9.174716724e-01f, 9.172493303e-01f, 9.170264813e-01f, 9.168031256e-01f, 9.165792634e-01f, 9.163548950e-01f, 9.161300207e-01f, 9.159046405e-01f,
-9.156787548e-01f, 9.154523638e-01f, 9.152254678e-01f, 9.149980669e-01f, 9.147701614e-01f, 9.145417515e-01f, 9.143128376e-01f, 9.140834197e-01f, 9.138534981e-01f, 9.136230732e-01f,
-9.133921450e-01f, 9.131607140e-01f, 9.129287802e-01f, 9.126963439e-01f, 9.124634054e-01f, 9.122299649e-01f, 9.119960227e-01f, 9.117615790e-01f, 9.115266340e-01f, 9.112911880e-01f,
-9.110552412e-01f, 9.108187939e-01f, 9.105818463e-01f, 9.103443986e-01f, 9.101064511e-01f, 9.098680041e-01f, 9.096290577e-01f, 9.093896123e-01f, 9.091496681e-01f, 9.089092253e-01f,
-9.086682841e-01f, 9.084268449e-01f, 9.081849079e-01f, 9.079424733e-01f, 9.076995413e-01f, 9.074561123e-01f, 9.072121864e-01f, 9.069677640e-01f, 9.067228453e-01f, 9.064774304e-01f,
-9.062315198e-01f, 9.059851135e-01f, 9.057382120e-01f, 9.054908154e-01f, 9.052429240e-01f, 9.049945380e-01f, 9.047456578e-01f, 9.044962835e-01f, 9.042464154e-01f, 9.039960539e-01f,
-9.037451990e-01f, 9.034938511e-01f, 9.032420105e-01f, 9.029896774e-01f, 9.027368521e-01f, 9.024835348e-01f, 9.022297258e-01f, 9.019754253e-01f, 9.017206336e-01f, 9.014653511e-01f,
-9.012095778e-01f, 9.009533142e-01f, 9.006965604e-01f, 9.004393168e-01f, 9.001815836e-01f, 8.999233610e-01f, 8.996646493e-01f, 8.994054488e-01f, 8.991457598e-01f, 8.988855825e-01f,
-8.986249173e-01f, 8.983637642e-01f, 8.981021237e-01f, 8.978399960e-01f, 8.975773814e-01f, 8.973142801e-01f, 8.970506924e-01f, 8.967866186e-01f, 8.965220589e-01f, 8.962570137e-01f,
-8.959914832e-01f, 8.957254676e-01f, 8.954589673e-01f, 8.951919825e-01f, 8.949245135e-01f, 8.946565605e-01f, 8.943881239e-01f, 8.941192039e-01f, 8.938498008e-01f, 8.935799149e-01f,
-8.933095464e-01f, 8.930386957e-01f, 8.927673629e-01f, 8.924955485e-01f, 8.922232526e-01f, 8.919504756e-01f, 8.916772176e-01f, 8.914034791e-01f, 8.911292603e-01f, 8.908545614e-01f,
-8.905793828e-01f, 8.903037247e-01f, 8.900275875e-01f, 8.897509713e-01f, 8.894738765e-01f, 8.891963034e-01f, 8.889182522e-01f, 8.886397233e-01f, 8.883607169e-01f, 8.880812334e-01f,
-8.878012729e-01f, 8.875208358e-01f, 8.872399224e-01f, 8.869585329e-01f, 8.866766677e-01f, 8.863943271e-01f, 8.861115112e-01f, 8.858282205e-01f, 8.855444553e-01f, 8.852602157e-01f,
-8.849755021e-01f, 8.846903148e-01f, 8.844046541e-01f, 8.841185202e-01f, 8.838319136e-01f, 8.835448344e-01f, 8.832572829e-01f, 8.829692595e-01f, 8.826807645e-01f, 8.823917981e-01f,
-8.821023607e-01f, 8.818124525e-01f, 8.815220738e-01f, 8.812312249e-01f, 8.809399062e-01f, 8.806481180e-01f, 8.803558604e-01f, 8.800631339e-01f, 8.797699387e-01f, 8.794762752e-01f,
-8.791821436e-01f, 8.788875442e-01f, 8.785924774e-01f, 8.782969434e-01f, 8.780009425e-01f, 8.777044751e-01f, 8.774075415e-01f, 8.771101419e-01f, 8.768122767e-01f, 8.765139461e-01f,
-8.762151505e-01f, 8.759158902e-01f, 8.756161655e-01f, 8.753159767e-01f, 8.750153240e-01f, 8.747142079e-01f, 8.744126286e-01f, 8.741105865e-01f, 8.738080818e-01f, 8.735051148e-01f,
-8.732016859e-01f, 8.728977953e-01f, 8.725934435e-01f, 8.722886306e-01f, 8.719833570e-01f, 8.716776231e-01f, 8.713714291e-01f, 8.710647753e-01f, 8.707576621e-01f, 8.704500898e-01f,
-8.701420586e-01f, 8.698335690e-01f, 8.695246212e-01f, 8.692152155e-01f, 8.689053523e-01f, 8.685950319e-01f, 8.682842545e-01f, 8.679730206e-01f, 8.676613304e-01f, 8.673491842e-01f,
-8.670365825e-01f, 8.667235254e-01f, 8.664100133e-01f, 8.660960465e-01f, 8.657816254e-01f, 8.654667503e-01f, 8.651514214e-01f, 8.648356392e-01f, 8.645194039e-01f, 8.642027159e-01f,
-8.638855755e-01f, 8.635679830e-01f, 8.632499387e-01f, 8.629314431e-01f, 8.626124962e-01f, 8.622930987e-01f, 8.619732506e-01f, 8.616529525e-01f, 8.613322045e-01f, 8.610110071e-01f,
-8.606893605e-01f, 8.603672651e-01f, 8.600447213e-01f, 8.597217293e-01f, 8.593982894e-01f, 8.590744021e-01f, 8.587500676e-01f, 8.584252863e-01f, 8.581000585e-01f, 8.577743845e-01f,
-8.574482647e-01f, 8.571216994e-01f, 8.567946889e-01f, 8.564672336e-01f, 8.561393339e-01f, 8.558109899e-01f, 8.554822022e-01f, 8.551529709e-01f, 8.548232966e-01f, 8.544931794e-01f,
-8.541626197e-01f, 8.538316179e-01f, 8.535001743e-01f, 8.531682892e-01f, 8.528359631e-01f, 8.525031961e-01f, 8.521699887e-01f, 8.518363412e-01f, 8.515022540e-01f, 8.511677273e-01f,
-8.508327616e-01f, 8.504973571e-01f, 8.501615143e-01f, 8.498252334e-01f, 8.494885148e-01f, 8.491513588e-01f, 8.488137659e-01f, 8.484757362e-01f, 8.481372703e-01f, 8.477983683e-01f,
-8.474590308e-01f, 8.471192579e-01f, 8.467790502e-01f, 8.464384078e-01f, 8.460973312e-01f, 8.457558207e-01f, 8.454138767e-01f, 8.450714994e-01f, 8.447286893e-01f, 8.443854468e-01f,
-8.440417721e-01f, 8.436976656e-01f, 8.433531276e-01f, 8.430081586e-01f, 8.426627588e-01f, 8.423169286e-01f, 8.419706685e-01f, 8.416239786e-01f, 8.412768594e-01f, 8.409293112e-01f,
-8.405813345e-01f, 8.402329294e-01f, 8.398840965e-01f, 8.395348360e-01f, 8.391851483e-01f, 8.388350338e-01f, 8.384844928e-01f, 8.381335257e-01f, 8.377821328e-01f, 8.374303146e-01f,
-8.370780713e-01f, 8.367254032e-01f, 8.363723109e-01f, 8.360187946e-01f, 8.356648547e-01f, 8.353104916e-01f, 8.349557056e-01f, 8.346004970e-01f, 8.342448663e-01f, 8.338888138e-01f,
-8.335323399e-01f, 8.331754449e-01f, 8.328181292e-01f, 8.324603932e-01f, 8.321022372e-01f, 8.317436615e-01f, 8.313846667e-01f, 8.310252529e-01f, 8.306654207e-01f, 8.303051703e-01f,
-8.299445021e-01f, 8.295834165e-01f, 8.292219138e-01f, 8.288599945e-01f, 8.284976589e-01f, 8.281349074e-01f, 8.277717402e-01f, 8.274081579e-01f, 8.270441608e-01f, 8.266797492e-01f,
-8.263149235e-01f, 8.259496841e-01f, 8.255840313e-01f, 8.252179656e-01f, 8.248514873e-01f, 8.244845968e-01f, 8.241172944e-01f, 8.237495806e-01f, 8.233814556e-01f, 8.230129199e-01f,
-8.226439739e-01f, 8.222746179e-01f, 8.219048523e-01f, 8.215346775e-01f, 8.211640938e-01f, 8.207931017e-01f, 8.204217015e-01f, 8.200498935e-01f, 8.196776783e-01f, 8.193050560e-01f,
-8.189320272e-01f, 8.185585922e-01f, 8.181847514e-01f, 8.178105051e-01f, 8.174358538e-01f, 8.170607978e-01f, 8.166853376e-01f, 8.163094734e-01f, 8.159332057e-01f, 8.155565348e-01f,
-8.151794612e-01f, 8.148019852e-01f, 8.144241072e-01f, 8.140458276e-01f, 8.136671467e-01f, 8.132880650e-01f, 8.129085829e-01f, 8.125287007e-01f, 8.121484188e-01f, 8.117677376e-01f,
-8.113866575e-01f, 8.110051789e-01f, 8.106233021e-01f, 8.102410276e-01f, 8.098583558e-01f, 8.094752869e-01f, 8.090918215e-01f, 8.087079599e-01f, 8.083237025e-01f, 8.079390497e-01f,
-8.075540018e-01f, 8.071685594e-01f, 8.067827227e-01f, 8.063964921e-01f, 8.060098681e-01f, 8.056228510e-01f, 8.052354413e-01f, 8.048476393e-01f, 8.044594454e-01f, 8.040708600e-01f,
-8.036818836e-01f, 8.032925164e-01f, 8.029027589e-01f, 8.025126116e-01f, 8.021220747e-01f, 8.017311487e-01f, 8.013398340e-01f, 8.009481310e-01f, 8.005560400e-01f, 8.001635615e-01f,
-7.997706959e-01f, 7.993774436e-01f, 7.989838049e-01f, 7.985897804e-01f, 7.981953702e-01f, 7.978005750e-01f, 7.974053950e-01f, 7.970098307e-01f, 7.966138825e-01f, 7.962175508e-01f,
-7.958208359e-01f, 7.954237383e-01f, 7.950262584e-01f, 7.946283966e-01f, 7.942301532e-01f, 7.938315288e-01f, 7.934325236e-01f, 7.930331382e-01f, 7.926333728e-01f, 7.922332280e-01f,
-7.918327041e-01f, 7.914318015e-01f, 7.910305206e-01f, 7.906288619e-01f, 7.902268257e-01f, 7.898244125e-01f, 7.894216226e-01f, 7.890184565e-01f, 7.886149145e-01f, 7.882109972e-01f,
-7.878067048e-01f, 7.874020378e-01f, 7.869969967e-01f, 7.865915818e-01f, 7.861857935e-01f, 7.857796322e-01f, 7.853730984e-01f, 7.849661925e-01f, 7.845589148e-01f, 7.841512658e-01f,
-7.837432459e-01f, 7.833348556e-01f, 7.829260952e-01f, 7.825169651e-01f, 7.821074658e-01f, 7.816975976e-01f, 7.812873610e-01f, 7.808767565e-01f, 7.804657843e-01f, 7.800544450e-01f,
-7.796427389e-01f, 7.792306665e-01f, 7.788182282e-01f, 7.784054244e-01f, 7.779922554e-01f, 7.775787219e-01f, 7.771648240e-01f, 7.767505624e-01f, 7.763359373e-01f, 7.759209493e-01f,
-7.755055986e-01f, 7.750898858e-01f, 7.746738113e-01f, 7.742573755e-01f, 7.738405788e-01f, 7.734234216e-01f, 7.730059044e-01f, 7.725880275e-01f, 7.721697915e-01f, 7.717511966e-01f,
-7.713322434e-01f, 7.709129323e-01f, 7.704932637e-01f, 7.700732379e-01f, 7.696528555e-01f, 7.692321169e-01f, 7.688110225e-01f, 7.683895726e-01f, 7.679677678e-01f, 7.675456085e-01f,
-7.671230951e-01f, 7.667002279e-01f, 7.662770076e-01f, 7.658534344e-01f, 7.654295087e-01f, 7.650052312e-01f, 7.645806020e-01f, 7.641556218e-01f, 7.637302908e-01f, 7.633046096e-01f,
-7.628785786e-01f, 7.624521982e-01f, 7.620254688e-01f, 7.615983909e-01f, 7.611709648e-01f, 7.607431911e-01f, 7.603150701e-01f, 7.598866024e-01f, 7.594577882e-01f, 7.590286281e-01f,
-7.585991225e-01f, 7.581692718e-01f, 7.577390764e-01f, 7.573085368e-01f, 7.568776535e-01f, 7.564464267e-01f, 7.560148571e-01f, 7.555829450e-01f, 7.551506909e-01f, 7.547180951e-01f,
-7.542851582e-01f, 7.538518805e-01f, 7.534182626e-01f, 7.529843047e-01f, 7.525500075e-01f, 7.521153713e-01f, 7.516803965e-01f, 7.512450836e-01f, 7.508094330e-01f, 7.503734452e-01f,
-7.499371206e-01f, 7.495004596e-01f, 7.490634628e-01f, 7.486261304e-01f, 7.481884630e-01f, 7.477504610e-01f, 7.473121249e-01f, 7.468734550e-01f, 7.464344519e-01f, 7.459951159e-01f,
-7.455554476e-01f, 7.451154473e-01f, 7.446751155e-01f, 7.442344526e-01f, 7.437934591e-01f, 7.433521355e-01f, 7.429104821e-01f, 7.424684994e-01f, 7.420261879e-01f, 7.415835480e-01f,
-7.411405801e-01f, 7.406972848e-01f, 7.402536623e-01f, 7.398097133e-01f, 7.393654381e-01f, 7.389208372e-01f, 7.384759109e-01f, 7.380306599e-01f, 7.375850845e-01f, 7.371391851e-01f,
-7.366929623e-01f, 7.362464164e-01f, 7.357995480e-01f, 7.353523574e-01f, 7.349048451e-01f, 7.344570115e-01f, 7.340088572e-01f, 7.335603826e-01f, 7.331115880e-01f, 7.326624740e-01f,
-7.322130410e-01f, 7.317632895e-01f, 7.313132199e-01f, 7.308628327e-01f, 7.304121282e-01f, 7.299611071e-01f, 7.295097696e-01f, 7.290581164e-01f, 7.286061478e-01f, 7.281538642e-01f,
-7.277012662e-01f, 7.272483542e-01f, 7.267951286e-01f, 7.263415899e-01f, 7.258877386e-01f, 7.254335751e-01f, 7.249790999e-01f, 7.245243133e-01f, 7.240692160e-01f, 7.236138083e-01f,
-7.231580906e-01f, 7.227020635e-01f, 7.222457275e-01f, 7.217890828e-01f, 7.213321301e-01f, 7.208748698e-01f, 7.204173023e-01f, 7.199594281e-01f, 7.195012476e-01f, 7.190427614e-01f,
-7.185839698e-01f, 7.181248734e-01f, 7.176654725e-01f, 7.172057677e-01f, 7.167457594e-01f, 7.162854481e-01f, 7.158248342e-01f, 7.153639182e-01f, 7.149027005e-01f, 7.144411817e-01f,
-7.139793621e-01f, 7.135172423e-01f, 7.130548227e-01f, 7.125921037e-01f, 7.121290859e-01f, 7.116657696e-01f, 7.112021554e-01f, 7.107382438e-01f, 7.102740351e-01f, 7.098095298e-01f,
-7.093447285e-01f, 7.088796315e-01f, 7.084142394e-01f, 7.079485526e-01f, 7.074825716e-01f, 7.070162968e-01f, 7.065497287e-01f, 7.060828677e-01f, 7.056157144e-01f, 7.051482692e-01f,
-7.046805326e-01f, 7.042125050e-01f, 7.037441869e-01f, 7.032755788e-01f, 7.028066812e-01f, 7.023374944e-01f, 7.018680190e-01f, 7.013982555e-01f, 7.009282043e-01f, 7.004578659e-01f,
-6.999872407e-01f, 6.995163293e-01f, 6.990451320e-01f, 6.985736494e-01f, 6.981018820e-01f, 6.976298301e-01f, 6.971574944e-01f, 6.966848751e-01f, 6.962119729e-01f, 6.957387882e-01f,
-6.952653215e-01f, 6.947915732e-01f, 6.943175438e-01f, 6.938432338e-01f, 6.933686437e-01f, 6.928937738e-01f, 6.924186248e-01f, 6.919431971e-01f, 6.914674911e-01f, 6.909915073e-01f,
-6.905152463e-01f, 6.900387084e-01f, 6.895618941e-01f, 6.890848040e-01f, 6.886074385e-01f, 6.881297980e-01f, 6.876518831e-01f, 6.871736943e-01f, 6.866952319e-01f, 6.862164965e-01f,
-6.857374886e-01f, 6.852582086e-01f, 6.847786570e-01f, 6.842988343e-01f, 6.838187410e-01f, 6.833383775e-01f, 6.828577443e-01f, 6.823768420e-01f, 6.818956709e-01f, 6.814142315e-01f,
-6.809325245e-01f, 6.804505501e-01f, 6.799683089e-01f, 6.794858014e-01f, 6.790030281e-01f, 6.785199894e-01f, 6.780366858e-01f, 6.775531178e-01f, 6.770692859e-01f, 6.765851905e-01f,
-6.761008322e-01f, 6.756162114e-01f, 6.751313286e-01f, 6.746461843e-01f, 6.741607790e-01f, 6.736751131e-01f, 6.731891871e-01f, 6.727030016e-01f, 6.722165569e-01f, 6.717298537e-01f,
-6.712428923e-01f, 6.707556732e-01f, 6.702681970e-01f, 6.697804641e-01f, 6.692924750e-01f, 6.688042302e-01f, 6.683157302e-01f, 6.678269754e-01f, 6.673379664e-01f, 6.668487036e-01f,
-6.663591875e-01f, 6.658694186e-01f, 6.653793973e-01f, 6.648891243e-01f, 6.643985999e-01f, 6.639078246e-01f, 6.634167990e-01f, 6.629255235e-01f, 6.624339986e-01f, 6.619422248e-01f,
-6.614502026e-01f, 6.609579324e-01f, 6.604654148e-01f, 6.599726502e-01f, 6.594796392e-01f, 6.589863821e-01f, 6.584928796e-01f, 6.579991321e-01f, 6.575051401e-01f, 6.570109040e-01f,
-6.565164245e-01f, 6.560217018e-01f, 6.555267366e-01f, 6.550315294e-01f, 6.545360806e-01f, 6.540403907e-01f, 6.535444602e-01f, 6.530482896e-01f, 6.525518794e-01f, 6.520552300e-01f,
-6.515583421e-01f, 6.510612160e-01f, 6.505638522e-01f, 6.500662513e-01f, 6.495684138e-01f, 6.490703401e-01f, 6.485720307e-01f, 6.480734861e-01f, 6.475747069e-01f, 6.470756934e-01f,
-6.465764462e-01f, 6.460769659e-01f, 6.455772528e-01f, 6.450773075e-01f, 6.445771305e-01f, 6.440767222e-01f, 6.435760832e-01f, 6.430752140e-01f, 6.425741150e-01f, 6.420727867e-01f,
-6.415712297e-01f, 6.410694445e-01f, 6.405674314e-01f, 6.400651911e-01f, 6.395627240e-01f, 6.390600307e-01f, 6.385571115e-01f, 6.380539671e-01f, 6.375505979e-01f, 6.370470044e-01f,
-6.365431871e-01f, 6.360391465e-01f, 6.355348831e-01f, 6.350303974e-01f, 6.345256898e-01f, 6.340207610e-01f, 6.335156114e-01f, 6.330102414e-01f, 6.325046516e-01f, 6.319988426e-01f,
-6.314928147e-01f, 6.309865684e-01f, 6.304801044e-01f, 6.299734230e-01f, 6.294665249e-01f, 6.289594104e-01f, 6.284520800e-01f, 6.279445344e-01f, 6.274367739e-01f, 6.269287991e-01f,
-6.264206105e-01f, 6.259122086e-01f, 6.254035938e-01f, 6.248947667e-01f, 6.243857278e-01f, 6.238764776e-01f, 6.233670166e-01f, 6.228573452e-01f, 6.223474641e-01f, 6.218373736e-01f,
-6.213270743e-01f, 6.208165667e-01f, 6.203058513e-01f, 6.197949286e-01f, 6.192837991e-01f, 6.187724633e-01f, 6.182609217e-01f, 6.177491748e-01f, 6.172372231e-01f, 6.167250671e-01f,
-6.162127074e-01f, 6.157001444e-01f, 6.151873785e-01f, 6.146744105e-01f, 6.141612406e-01f, 6.136478695e-01f, 6.131342976e-01f, 6.126205255e-01f, 6.121065536e-01f, 6.115923824e-01f,
-6.110780126e-01f, 6.105634444e-01f, 6.100486786e-01f, 6.095337155e-01f, 6.090185557e-01f, 6.085031997e-01f, 6.079876480e-01f, 6.074719010e-01f, 6.069559594e-01f, 6.064398236e-01f,
-6.059234941e-01f, 6.054069714e-01f, 6.048902560e-01f, 6.043733485e-01f, 6.038562493e-01f, 6.033389590e-01f, 6.028214780e-01f, 6.023038069e-01f, 6.017859461e-01f, 6.012678962e-01f,
-6.007496577e-01f, 6.002312311e-01f, 5.997126169e-01f, 5.991938156e-01f, 5.986748277e-01f, 5.981556537e-01f, 5.976362942e-01f, 5.971167496e-01f, 5.965970204e-01f, 5.960771072e-01f,
-5.955570105e-01f, 5.950367307e-01f, 5.945162684e-01f, 5.939956242e-01f, 5.934747984e-01f, 5.929537916e-01f, 5.924326044e-01f, 5.919112371e-01f, 5.913896904e-01f, 5.908679648e-01f,
-5.903460607e-01f, 5.898239787e-01f, 5.893017193e-01f, 5.887792830e-01f, 5.882566702e-01f, 5.877338816e-01f, 5.872109176e-01f, 5.866877787e-01f, 5.861644655e-01f, 5.856409784e-01f,
-5.851173180e-01f, 5.845934848e-01f, 5.840694793e-01f, 5.835453019e-01f, 5.830209533e-01f, 5.824964339e-01f, 5.819717442e-01f, 5.814468848e-01f, 5.809218561e-01f, 5.803966587e-01f,
-5.798712931e-01f, 5.793457598e-01f, 5.788200593e-01f, 5.782941921e-01f, 5.777681588e-01f, 5.772419598e-01f, 5.767155956e-01f, 5.761890668e-01f, 5.756623739e-01f, 5.751355174e-01f,
-5.746084979e-01f, 5.740813157e-01f, 5.735539715e-01f, 5.730264657e-01f, 5.724987989e-01f, 5.719709716e-01f, 5.714429842e-01f, 5.709148374e-01f, 5.703865316e-01f, 5.698580673e-01f,
-5.693294451e-01f, 5.688006655e-01f, 5.682717289e-01f, 5.677426359e-01f, 5.672133870e-01f, 5.666839827e-01f, 5.661544236e-01f, 5.656247101e-01f, 5.650948428e-01f, 5.645648222e-01f,
-5.640346488e-01f, 5.635043230e-01f, 5.629738456e-01f, 5.624432168e-01f, 5.619124373e-01f, 5.613815076e-01f, 5.608504282e-01f, 5.603191995e-01f, 5.597878222e-01f, 5.592562967e-01f,
-5.587246236e-01f, 5.581928034e-01f, 5.576608365e-01f, 5.571287235e-01f, 5.565964650e-01f, 5.560640614e-01f, 5.555315132e-01f, 5.549988210e-01f, 5.544659853e-01f, 5.539330066e-01f,
-5.533998853e-01f, 5.528666222e-01f, 5.523332175e-01f, 5.517996720e-01f, 5.512659860e-01f, 5.507321601e-01f, 5.501981949e-01f, 5.496640908e-01f, 5.491298483e-01f, 5.485954680e-01f,
-5.480609504e-01f, 5.475262960e-01f, 5.469915053e-01f, 5.464565788e-01f, 5.459215172e-01f, 5.453863207e-01f, 5.448509901e-01f, 5.443155258e-01f, 5.437799283e-01f, 5.432441982e-01f,
-5.427083359e-01f, 5.421723421e-01f, 5.416362171e-01f, 5.410999615e-01f, 5.405635759e-01f, 5.400270607e-01f, 5.394904165e-01f, 5.389536438e-01f, 5.384167432e-01f, 5.378797150e-01f,
-5.373425599e-01f, 5.368052784e-01f, 5.362678709e-01f, 5.357303381e-01f, 5.351926804e-01f, 5.346548983e-01f, 5.341169924e-01f, 5.335789631e-01f, 5.330408111e-01f, 5.325025368e-01f,
-5.319641407e-01f, 5.314256234e-01f, 5.308869854e-01f, 5.303482272e-01f, 5.298093493e-01f, 5.292703522e-01f, 5.287312365e-01f, 5.281920026e-01f, 5.276526512e-01f, 5.271131826e-01f,
-5.265735975e-01f, 5.260338964e-01f, 5.254940797e-01f, 5.249541480e-01f, 5.244141019e-01f, 5.238739417e-01f, 5.233336681e-01f, 5.227932816e-01f, 5.222527827e-01f, 5.217121719e-01f,
-5.211714498e-01f, 5.206306168e-01f, 5.200896734e-01f, 5.195486203e-01f, 5.190074579e-01f, 5.184661867e-01f, 5.179248072e-01f, 5.173833201e-01f, 5.168417257e-01f, 5.163000247e-01f,
-5.157582175e-01f, 5.152163046e-01f, 5.146742867e-01f, 5.141321641e-01f, 5.135899374e-01f, 5.130476072e-01f, 5.125051740e-01f, 5.119626382e-01f, 5.114200004e-01f, 5.108772612e-01f,
-5.103344210e-01f, 5.097914803e-01f, 5.092484398e-01f, 5.087052998e-01f, 5.081620610e-01f, 5.076187238e-01f, 5.070752888e-01f, 5.065317565e-01f, 5.059881274e-01f, 5.054444020e-01f,
-5.049005809e-01f, 5.043566646e-01f, 5.038126535e-01f, 5.032685483e-01f, 5.027243494e-01f, 5.021800573e-01f, 5.016356727e-01f, 5.010911959e-01f, 5.005466275e-01f, 5.000019681e-01f,
-4.994572182e-01f, 4.989123782e-01f, 4.983674488e-01f, 4.978224304e-01f, 4.972773235e-01f, 4.967321287e-01f, 4.961868464e-01f, 4.956414773e-01f, 4.950960219e-01f, 4.945504805e-01f,
-4.940048539e-01f, 4.934591424e-01f, 4.929133467e-01f, 4.923674672e-01f, 4.918215045e-01f, 4.912754590e-01f, 4.907293314e-01f, 4.901831221e-01f, 4.896368316e-01f, 4.890904605e-01f,
-4.885440092e-01f, 4.879974784e-01f, 4.874508685e-01f, 4.869041801e-01f, 4.863574136e-01f, 4.858105697e-01f, 4.852636487e-01f, 4.847166513e-01f, 4.841695779e-01f, 4.836224291e-01f,
-4.830752055e-01f, 4.825279074e-01f, 4.819805355e-01f, 4.814330902e-01f, 4.808855722e-01f, 4.803379818e-01f, 4.797903197e-01f, 4.792425863e-01f, 4.786947822e-01f, 4.781469079e-01f,
-4.775989639e-01f, 4.770509507e-01f, 4.765028689e-01f, 4.759547190e-01f, 4.754065014e-01f, 4.748582168e-01f, 4.743098656e-01f, 4.737614484e-01f, 4.732129656e-01f, 4.726644179e-01f,
-4.721158057e-01f, 4.715671295e-01f, 4.710183899e-01f, 4.704695874e-01f, 4.699207225e-01f, 4.693717957e-01f, 4.688228076e-01f, 4.682737586e-01f, 4.677246493e-01f, 4.671754803e-01f,
-4.666262520e-01f, 4.660769649e-01f, 4.655276196e-01f, 4.649782166e-01f, 4.644287564e-01f, 4.638792396e-01f, 4.633296666e-01f, 4.627800380e-01f, 4.622303543e-01f, 4.616806160e-01f,
-4.611308236e-01f, 4.605809777e-01f, 4.600310788e-01f, 4.594811274e-01f, 4.589311240e-01f, 4.583810692e-01f, 4.578309634e-01f, 4.572808072e-01f, 4.567306011e-01f, 4.561803457e-01f,
-4.556300413e-01f, 4.550796887e-01f, 4.545292882e-01f, 4.539788404e-01f, 4.534283459e-01f, 4.528778051e-01f, 4.523272186e-01f, 4.517765868e-01f, 4.512259104e-01f, 4.506751897e-01f,
-4.501244255e-01f, 4.495736181e-01f, 4.490227680e-01f, 4.484718759e-01f, 4.479209422e-01f, 4.473699674e-01f, 4.468189522e-01f, 4.462678968e-01f, 4.457168020e-01f, 4.451656682e-01f,
-4.446144960e-01f, 4.440632858e-01f, 4.435120382e-01f, 4.429607537e-01f, 4.424094328e-01f, 4.418580760e-01f, 4.413066839e-01f, 4.407552570e-01f, 4.402037958e-01f, 4.396523008e-01f,
-4.391007725e-01f, 4.385492115e-01f, 4.379976182e-01f, 4.374459932e-01f, 4.368943371e-01f, 4.363426502e-01f, 4.357909332e-01f, 4.352391866e-01f, 4.346874108e-01f, 4.341356065e-01f,
-4.335837741e-01f, 4.330319141e-01f, 4.324800270e-01f, 4.319281134e-01f, 4.313761739e-01f, 4.308242088e-01f, 4.302722188e-01f, 4.297202043e-01f, 4.291681658e-01f, 4.286161040e-01f,
-4.280640192e-01f, 4.275119121e-01f, 4.269597831e-01f, 4.264076327e-01f, 4.258554615e-01f, 4.253032700e-01f, 4.247510587e-01f, 4.241988281e-01f, 4.236465788e-01f, 4.230943112e-01f,
-4.225420259e-01f, 4.219897233e-01f, 4.214374041e-01f, 4.208850687e-01f, 4.203327176e-01f, 4.197803514e-01f, 4.192279706e-01f, 4.186755757e-01f, 4.181231671e-01f, 4.175707455e-01f,
-4.170183113e-01f, 4.164658651e-01f, 4.159134073e-01f, 4.153609385e-01f, 4.148084593e-01f, 4.142559700e-01f, 4.137034713e-01f, 4.131509636e-01f, 4.125984475e-01f, 4.120459235e-01f,
-4.114933920e-01f, 4.109408537e-01f, 4.103883090e-01f, 4.098357585e-01f, 4.092832026e-01f, 4.087306418e-01f, 4.081780768e-01f, 4.076255080e-01f, 4.070729358e-01f, 4.065203609e-01f,
-4.059677838e-01f, 4.054152049e-01f, 4.048626248e-01f, 4.043100440e-01f, 4.037574630e-01f, 4.032048823e-01f, 4.026523024e-01f, 4.020997239e-01f, 4.015471472e-01f, 4.009945729e-01f,
-4.004420015e-01f, 3.998894335e-01f, 3.993368694e-01f, 3.987843097e-01f, 3.982317550e-01f, 3.976792057e-01f, 3.971266624e-01f, 3.965741256e-01f, 3.960215958e-01f, 3.954690734e-01f,
-3.949165591e-01f, 3.943640533e-01f, 3.938115566e-01f, 3.932590694e-01f, 3.927065923e-01f, 3.921541257e-01f, 3.916016703e-01f, 3.910492264e-01f, 3.904967947e-01f, 3.899443756e-01f,
-3.893919697e-01f, 3.888395773e-01f, 3.882871992e-01f, 3.877348357e-01f, 3.871824874e-01f, 3.866301548e-01f, 3.860778384e-01f, 3.855255387e-01f, 3.849732563e-01f, 3.844209916e-01f,
-3.838687451e-01f, 3.833165174e-01f, 3.827643090e-01f, 3.822121203e-01f, 3.816599519e-01f, 3.811078044e-01f, 3.805556781e-01f, 3.800035737e-01f, 3.794514916e-01f, 3.788994323e-01f,
-3.783473964e-01f, 3.777953843e-01f, 3.772433966e-01f, 3.766914338e-01f, 3.761394963e-01f, 3.755875848e-01f, 3.750356996e-01f, 3.744838414e-01f, 3.739320106e-01f, 3.733802077e-01f,
-3.728284332e-01f, 3.722766877e-01f, 3.717249716e-01f, 3.711732855e-01f, 3.706216299e-01f, 3.700700052e-01f, 3.695184120e-01f, 3.689668508e-01f, 3.684153221e-01f, 3.678638264e-01f,
-3.673123642e-01f, 3.667609360e-01f, 3.662095423e-01f, 3.656581837e-01f, 3.651068606e-01f, 3.645555735e-01f, 3.640043230e-01f, 3.634531095e-01f, 3.629019336e-01f, 3.623507958e-01f,
-3.617996965e-01f, 3.612486363e-01f, 3.606976157e-01f, 3.601466352e-01f, 3.595956952e-01f, 3.590447964e-01f, 3.584939392e-01f, 3.579431240e-01f, 3.573923515e-01f, 3.568416221e-01f,
-3.562909363e-01f, 3.557402946e-01f, 3.551896975e-01f, 3.546391456e-01f, 3.540886393e-01f, 3.535381791e-01f, 3.529877656e-01f, 3.524373992e-01f, 3.518870805e-01f, 3.513368099e-01f,
-3.507865880e-01f, 3.502364152e-01f, 3.496862920e-01f, 3.491362191e-01f, 3.485861967e-01f, 3.480362256e-01f, 3.474863061e-01f, 3.469364388e-01f, 3.463866241e-01f, 3.458368626e-01f,
-3.452871548e-01f, 3.447375011e-01f, 3.441879021e-01f, 3.436383583e-01f, 3.430888701e-01f, 3.425394382e-01f, 3.419900628e-01f, 3.414407447e-01f, 3.408914842e-01f, 3.403422820e-01f,
-3.397931383e-01f, 3.392440539e-01f, 3.386950291e-01f, 3.381460645e-01f, 3.375971605e-01f, 3.370483177e-01f, 3.364995366e-01f, 3.359508177e-01f, 3.354021614e-01f, 3.348535682e-01f,
-3.343050388e-01f, 3.337565734e-01f, 3.332081728e-01f, 3.326598372e-01f, 3.321115674e-01f, 3.315633636e-01f, 3.310152266e-01f, 3.304671566e-01f, 3.299191543e-01f, 3.293712201e-01f,
-3.288233546e-01f, 3.282755581e-01f, 3.277278313e-01f, 3.271801746e-01f, 3.266325885e-01f, 3.260850735e-01f, 3.255376301e-01f, 3.249902589e-01f, 3.244429602e-01f, 3.238957346e-01f,
-3.233485825e-01f, 3.228015046e-01f, 3.222545012e-01f, 3.217075729e-01f, 3.211607201e-01f, 3.206139434e-01f, 3.200672432e-01f, 3.195206201e-01f, 3.189740744e-01f, 3.184276069e-01f,
-3.178812178e-01f, 3.173349077e-01f, 3.167886772e-01f, 3.162425266e-01f, 3.156964565e-01f, 3.151504674e-01f, 3.146045597e-01f, 3.140587340e-01f, 3.135129908e-01f, 3.129673305e-01f,
-3.124217536e-01f, 3.118762607e-01f, 3.113308522e-01f, 3.107855285e-01f, 3.102402903e-01f, 3.096951380e-01f, 3.091500720e-01f, 3.086050929e-01f, 3.080602011e-01f, 3.075153972e-01f,
-3.069706816e-01f, 3.064260548e-01f, 3.058815174e-01f, 3.053370697e-01f, 3.047927123e-01f, 3.042484457e-01f, 3.037042703e-01f, 3.031601867e-01f, 3.026161953e-01f, 3.020722967e-01f,
-3.015284912e-01f, 3.009847795e-01f, 3.004411619e-01f, 2.998976390e-01f, 2.993542113e-01f, 2.988108792e-01f, 2.982676432e-01f, 2.977245038e-01f, 2.971814615e-01f, 2.966385168e-01f,
-2.960956702e-01f, 2.955529221e-01f, 2.950102731e-01f, 2.944677236e-01f, 2.939252741e-01f, 2.933829251e-01f, 2.928406770e-01f, 2.922985304e-01f, 2.917564857e-01f, 2.912145435e-01f,
-2.906727042e-01f, 2.901309682e-01f, 2.895893362e-01f, 2.890478084e-01f, 2.885063855e-01f, 2.879650680e-01f, 2.874238562e-01f, 2.868827507e-01f, 2.863417520e-01f, 2.858008605e-01f,
-2.852600767e-01f, 2.847194011e-01f, 2.841788342e-01f, 2.836383765e-01f, 2.830980284e-01f, 2.825577905e-01f, 2.820176631e-01f, 2.814776468e-01f, 2.809377421e-01f, 2.803979494e-01f,
-2.798582693e-01f, 2.793187021e-01f, 2.787792484e-01f, 2.782399087e-01f, 2.777006833e-01f, 2.771615729e-01f, 2.766225779e-01f, 2.760836987e-01f, 2.755449359e-01f, 2.750062899e-01f,
-2.744677612e-01f, 2.739293502e-01f, 2.733910575e-01f, 2.728528835e-01f, 2.723148287e-01f, 2.717768936e-01f, 2.712390786e-01f, 2.707013842e-01f, 2.701638109e-01f, 2.696263592e-01f,
-2.690890295e-01f, 2.685518224e-01f, 2.680147382e-01f, 2.674777775e-01f, 2.669409407e-01f, 2.664042284e-01f, 2.658676409e-01f, 2.653311787e-01f, 2.647948424e-01f, 2.642586324e-01f,
-2.637225492e-01f, 2.631865932e-01f, 2.626507649e-01f, 2.621150648e-01f, 2.615794933e-01f, 2.610440510e-01f, 2.605087382e-01f, 2.599735555e-01f, 2.594385034e-01f, 2.589035822e-01f,
-2.583687926e-01f, 2.578341348e-01f, 2.572996095e-01f, 2.567652170e-01f, 2.562309579e-01f, 2.556968326e-01f, 2.551628416e-01f, 2.546289854e-01f, 2.540952643e-01f, 2.535616790e-01f,
-2.530282298e-01f, 2.524949172e-01f, 2.519617417e-01f, 2.514287037e-01f, 2.508958038e-01f, 2.503630424e-01f, 2.498304198e-01f, 2.492979367e-01f, 2.487655935e-01f, 2.482333906e-01f,
-2.477013286e-01f, 2.471694078e-01f, 2.466376287e-01f, 2.461059918e-01f, 2.455744976e-01f, 2.450431465e-01f, 2.445119390e-01f, 2.439808755e-01f, 2.434499566e-01f, 2.429191826e-01f,
-2.423885541e-01f, 2.418580714e-01f, 2.413277351e-01f, 2.407975457e-01f, 2.402675035e-01f, 2.397376090e-01f, 2.392078628e-01f, 2.386782652e-01f, 2.381488167e-01f, 2.376195178e-01f,
-2.370903690e-01f, 2.365613706e-01f, 2.360325232e-01f, 2.355038272e-01f, 2.349752831e-01f, 2.344468913e-01f, 2.339186523e-01f, 2.333905666e-01f, 2.328626345e-01f, 2.323348566e-01f,
-2.318072333e-01f, 2.312797651e-01f, 2.307524524e-01f, 2.302252958e-01f, 2.296982955e-01f, 2.291714521e-01f, 2.286447661e-01f, 2.281182379e-01f, 2.275918679e-01f, 2.270656567e-01f,
-2.265396046e-01f, 2.260137121e-01f, 2.254879797e-01f, 2.249624079e-01f, 2.244369970e-01f, 2.239117475e-01f, 2.233866599e-01f, 2.228617347e-01f, 2.223369722e-01f, 2.218123730e-01f,
-2.212879375e-01f, 2.207636661e-01f, 2.202395593e-01f, 2.197156175e-01f, 2.191918412e-01f, 2.186682309e-01f, 2.181447870e-01f, 2.176215098e-01f, 2.170984000e-01f, 2.165754579e-01f,
-2.160526840e-01f, 2.155300787e-01f, 2.150076425e-01f, 2.144853759e-01f, 2.139632792e-01f, 2.134413529e-01f, 2.129195975e-01f, 2.123980134e-01f, 2.118766010e-01f, 2.113553609e-01f,
-2.108342934e-01f, 2.103133990e-01f, 2.097926782e-01f, 2.092721313e-01f, 2.087517588e-01f, 2.082315613e-01f, 2.077115390e-01f, 2.071916925e-01f, 2.066720222e-01f, 2.061525286e-01f,
-2.056332120e-01f, 2.051140730e-01f, 2.045951119e-01f, 2.040763293e-01f, 2.035577255e-01f, 2.030393010e-01f, 2.025210562e-01f, 2.020029917e-01f, 2.014851077e-01f, 2.009674048e-01f,
-2.004498834e-01f, 1.999325439e-01f, 1.994153868e-01f, 1.988984125e-01f, 1.983816214e-01f, 1.978650141e-01f, 1.973485909e-01f, 1.968323522e-01f, 1.963162985e-01f, 1.958004303e-01f,
-1.952847480e-01f, 1.947692519e-01f, 1.942539426e-01f, 1.937388205e-01f, 1.932238860e-01f, 1.927091396e-01f, 1.921945816e-01f, 1.916802126e-01f, 1.911660329e-01f, 1.906520431e-01f,
-1.901382434e-01f, 1.896246344e-01f, 1.891112165e-01f, 1.885979901e-01f, 1.880849557e-01f, 1.875721136e-01f, 1.870594644e-01f, 1.865470084e-01f, 1.860347461e-01f, 1.855226779e-01f,
-1.850108042e-01f, 1.844991255e-01f, 1.839876422e-01f, 1.834763548e-01f, 1.829652636e-01f, 1.824543691e-01f, 1.819436717e-01f, 1.814331719e-01f, 1.809228700e-01f, 1.804127665e-01f,
-1.799028619e-01f, 1.793931565e-01f, 1.788836508e-01f, 1.783743452e-01f, 1.778652401e-01f, 1.773563360e-01f, 1.768476332e-01f, 1.763391323e-01f, 1.758308336e-01f, 1.753227376e-01f,
-1.748148447e-01f, 1.743071552e-01f, 1.737996697e-01f, 1.732923886e-01f, 1.727853122e-01f, 1.722784410e-01f, 1.717717754e-01f, 1.712653159e-01f, 1.707590628e-01f, 1.702530167e-01f,
-1.697471778e-01f, 1.692415466e-01f, 1.687361236e-01f, 1.682309092e-01f, 1.677259038e-01f, 1.672211077e-01f, 1.667165215e-01f, 1.662121455e-01f, 1.657079802e-01f, 1.652040259e-01f,
-1.647002832e-01f, 1.641967523e-01f, 1.636934338e-01f, 1.631903281e-01f, 1.626874354e-01f, 1.621847564e-01f, 1.616822914e-01f, 1.611800408e-01f, 1.606780050e-01f, 1.601761844e-01f,
-1.596745795e-01f, 1.591731906e-01f, 1.586720183e-01f, 1.581710628e-01f, 1.576703246e-01f, 1.571698042e-01f, 1.566695019e-01f, 1.561694181e-01f, 1.556695532e-01f, 1.551699078e-01f,
-1.546704821e-01f, 1.541712766e-01f, 1.536722917e-01f, 1.531735278e-01f, 1.526749853e-01f, 1.521766647e-01f, 1.516785662e-01f, 1.511806904e-01f, 1.506830377e-01f, 1.501856084e-01f,
-1.496884030e-01f, 1.491914219e-01f, 1.486946654e-01f, 1.481981341e-01f, 1.477018282e-01f, 1.472057482e-01f, 1.467098945e-01f, 1.462142675e-01f, 1.457188677e-01f, 1.452236953e-01f,
-1.447287509e-01f, 1.442340348e-01f, 1.437395474e-01f, 1.432452892e-01f, 1.427512604e-01f, 1.422574617e-01f, 1.417638932e-01f, 1.412705555e-01f, 1.407774490e-01f, 1.402845739e-01f,
-1.397919308e-01f, 1.392995201e-01f, 1.388073421e-01f, 1.383153972e-01f, 1.378236859e-01f, 1.373322085e-01f, 1.368409655e-01f, 1.363499572e-01f, 1.358591840e-01f, 1.353686463e-01f,
-1.348783446e-01f, 1.343882792e-01f, 1.338984505e-01f, 1.334088589e-01f, 1.329195049e-01f, 1.324303887e-01f, 1.319415109e-01f, 1.314528717e-01f, 1.309644716e-01f, 1.304763110e-01f,
-1.299883903e-01f, 1.295007099e-01f, 1.290132701e-01f, 1.285260714e-01f, 1.280391141e-01f, 1.275523986e-01f, 1.270659254e-01f, 1.265796948e-01f, 1.260937072e-01f, 1.256079630e-01f,
-1.251224626e-01f, 1.246372064e-01f, 1.241521947e-01f, 1.236674280e-01f, 1.231829067e-01f, 1.226986310e-01f, 1.222146015e-01f, 1.217308185e-01f, 1.212472824e-01f, 1.207639936e-01f,
-1.202809524e-01f, 1.197981593e-01f, 1.193156147e-01f, 1.188333188e-01f, 1.183512722e-01f, 1.178694751e-01f, 1.173879280e-01f, 1.169066313e-01f, 1.164255854e-01f, 1.159447905e-01f,
-1.154642472e-01f, 1.149839557e-01f, 1.145039165e-01f, 1.140241300e-01f, 1.135445965e-01f, 1.130653164e-01f, 1.125862901e-01f, 1.121075179e-01f, 1.116290004e-01f, 1.111507377e-01f,
-1.106727304e-01f, 1.101949787e-01f, 1.097174832e-01f, 1.092402440e-01f, 1.087632617e-01f, 1.082865366e-01f, 1.078100690e-01f, 1.073338594e-01f, 1.068579081e-01f, 1.063822156e-01f,
-1.059067821e-01f, 1.054316080e-01f, 1.049566938e-01f, 1.044820397e-01f, 1.040076463e-01f, 1.035335138e-01f, 1.030596425e-01f, 1.025860330e-01f, 1.021126856e-01f, 1.016396005e-01f,
-1.011667783e-01f, 1.006942193e-01f, 1.002219237e-01f, 9.974989215e-02f, 9.927812483e-02f, 9.880662216e-02f, 9.833538451e-02f, 9.786441225e-02f, 9.739370575e-02f, 9.692326537e-02f,
-9.645309148e-02f, 9.598318444e-02f, 9.551354463e-02f, 9.504417241e-02f, 9.457506815e-02f, 9.410623220e-02f, 9.363766494e-02f, 9.316936673e-02f, 9.270133793e-02f, 9.223357891e-02f,
-9.176609003e-02f, 9.129887166e-02f, 9.083192415e-02f, 9.036524786e-02f, 8.989884317e-02f, 8.943271042e-02f, 8.896684999e-02f, 8.850126223e-02f, 8.803594750e-02f, 8.757090617e-02f,
-8.710613858e-02f, 8.664164511e-02f, 8.617742610e-02f, 8.571348192e-02f, 8.524981292e-02f, 8.478641947e-02f, 8.432330191e-02f, 8.386046061e-02f, 8.339789592e-02f, 8.293560819e-02f,
-8.247359779e-02f, 8.201186507e-02f, 8.155041037e-02f, 8.108923407e-02f, 8.062833650e-02f, 8.016771802e-02f, 7.970737899e-02f, 7.924731976e-02f, 7.878754068e-02f, 7.832804210e-02f,
-7.786882438e-02f, 7.740988785e-02f, 7.695123289e-02f, 7.649285983e-02f, 7.603476902e-02f, 7.557696082e-02f, 7.511943556e-02f, 7.466219362e-02f, 7.420523532e-02f, 7.374856101e-02f,
-7.329217105e-02f, 7.283606579e-02f, 7.238024556e-02f, 7.192471071e-02f, 7.146946159e-02f, 7.101449855e-02f, 7.055982192e-02f, 7.010543206e-02f, 6.965132931e-02f, 6.919751401e-02f,
-6.874398651e-02f, 6.829074714e-02f, 6.783779625e-02f, 6.738513418e-02f, 6.693276128e-02f, 6.648067787e-02f, 6.602888432e-02f, 6.557738095e-02f, 6.512616811e-02f, 6.467524613e-02f,
-6.422461535e-02f, 6.377427612e-02f, 6.332422876e-02f, 6.287447363e-02f, 6.242501105e-02f, 6.197584137e-02f, 6.152696491e-02f, 6.107838202e-02f, 6.063009303e-02f, 6.018209828e-02f,
-5.973439810e-02f, 5.928699283e-02f, 5.883988279e-02f, 5.839306833e-02f, 5.794654978e-02f, 5.750032747e-02f, 5.705440173e-02f, 5.660877290e-02f, 5.616344130e-02f, 5.571840727e-02f,
-5.527367114e-02f, 5.482923323e-02f, 5.438509389e-02f, 5.394125343e-02f, 5.349771219e-02f, 5.305447049e-02f, 5.261152867e-02f, 5.216888705e-02f, 5.172654596e-02f, 5.128450572e-02f,
-5.084276667e-02f, 5.040132912e-02f, 4.996019341e-02f, 4.951935986e-02f, 4.907882879e-02f, 4.863860054e-02f, 4.819867541e-02f, 4.775905374e-02f, 4.731973585e-02f, 4.688072206e-02f,
-4.644201270e-02f, 4.600360808e-02f, 4.556550853e-02f, 4.512771437e-02f, 4.469022592e-02f, 4.425304350e-02f, 4.381616743e-02f, 4.337959802e-02f, 4.294333561e-02f, 4.250738049e-02f,
-4.207173301e-02f, 4.163639346e-02f, 4.120136217e-02f, 4.076663946e-02f, 4.033222564e-02f, 3.989812103e-02f, 3.946432594e-02f, 3.903084069e-02f, 3.859766558e-02f, 3.816480095e-02f,
-3.773224710e-02f, 3.730000434e-02f, 3.686807298e-02f, 3.643645335e-02f, 3.600514574e-02f, 3.557415048e-02f, 3.514346787e-02f, 3.471309823e-02f, 3.428304186e-02f, 3.385329907e-02f,
-3.342387018e-02f, 3.299475549e-02f, 3.256595531e-02f, 3.213746995e-02f, 3.170929971e-02f, 3.128144491e-02f, 3.085390585e-02f, 3.042668284e-02f, 2.999977618e-02f, 2.957318618e-02f,
-2.914691314e-02f, 2.872095737e-02f, 2.829531916e-02f, 2.786999884e-02f, 2.744499669e-02f, 2.702031303e-02f, 2.659594815e-02f, 2.617190235e-02f, 2.574817595e-02f, 2.532476923e-02f,
-2.490168249e-02f, 2.447891605e-02f, 2.405647020e-02f, 2.363434523e-02f, 2.321254146e-02f, 2.279105916e-02f, 2.236989865e-02f, 2.194906023e-02f, 2.152854417e-02f, 2.110835080e-02f,
-2.068848039e-02f, 2.026893325e-02f, 1.984970967e-02f, 1.943080995e-02f, 1.901223438e-02f, 1.859398325e-02f, 1.817605686e-02f, 1.775845551e-02f, 1.734117947e-02f, 1.692422906e-02f,
-1.650760455e-02f, 1.609130624e-02f, 1.567533442e-02f, 1.525968938e-02f, 1.484437141e-02f, 1.442938080e-02f, 1.401471784e-02f, 1.360038282e-02f, 1.318637602e-02f, 1.277269773e-02f,
-1.235934825e-02f, 1.194632785e-02f, 1.153363683e-02f, 1.112127546e-02f, 1.070924405e-02f, 1.029754286e-02f, 9.886172181e-03f, 9.475132304e-03f, 9.064423510e-03f, 8.654046081e-03f,
-8.244000300e-03f, 7.834286450e-03f, 7.424904811e-03f, 7.015855667e-03f, 6.607139296e-03f, 6.198755981e-03f, 5.790706001e-03f, 5.382989635e-03f, 4.975607163e-03f, 4.568558863e-03f,
-4.161845013e-03f, 3.755465892e-03f, 3.349421777e-03f, 2.943712943e-03f, 2.538339669e-03f, 2.133302229e-03f, 1.728600899e-03f, 1.324235955e-03f, 9.202076702e-04f, 5.165163192e-04f,
-1.131621758e-04f, -2.898544871e-04f, -6.925333965e-04f, -1.094874280e-03f, -1.496876867e-03f, -1.898540884e-03f, -2.299866062e-03f, -2.700852130e-03f, -3.101498817e-03f, -3.501805855e-03f,
--3.901772975e-03f, -4.301399907e-03f, -4.700686383e-03f, -5.099632136e-03f, -5.498236900e-03f, -5.896500405e-03f, -6.294422388e-03f, -6.692002581e-03f, -7.089240720e-03f, -7.486136539e-03f,
--7.882689775e-03f, -8.278900162e-03f, -8.674767438e-03f, -9.070291339e-03f, -9.465471603e-03f, -9.860307968e-03f, -1.025480017e-02f, -1.064894795e-02f, -1.104275105e-02f, -1.143620921e-02f,
--1.182932216e-02f, -1.222208965e-02f, -1.261451142e-02f, -1.300658721e-02f, -1.339831676e-02f, -1.378969982e-02f, -1.418073612e-02f, -1.457142542e-02f, -1.496176745e-02f, -1.535176196e-02f,
--1.574140869e-02f, -1.613070739e-02f, -1.651965781e-02f, -1.690825969e-02f, -1.729651278e-02f, -1.768441683e-02f, -1.807197158e-02f, -1.845917678e-02f, -1.884603217e-02f, -1.923253752e-02f,
--1.961869257e-02f, -2.000449706e-02f, -2.038995076e-02f, -2.077505340e-02f, -2.115980474e-02f, -2.154420454e-02f, -2.192825254e-02f, -2.231194850e-02f, -2.269529218e-02f, -2.307828331e-02f,
--2.346092167e-02f, -2.384320700e-02f, -2.422513906e-02f, -2.460671760e-02f, -2.498794239e-02f, -2.536881317e-02f, -2.574932971e-02f, -2.612949175e-02f, -2.650929907e-02f, -2.688875142e-02f,
--2.726784855e-02f, -2.764659023e-02f, -2.802497622e-02f, -2.840300628e-02f, -2.878068016e-02f, -2.915799763e-02f, -2.953495845e-02f, -2.991156238e-02f, -3.028780919e-02f, -3.066369864e-02f,
--3.103923050e-02f, -3.141440451e-02f, -3.178922046e-02f, -3.216367811e-02f, -3.253777722e-02f, -3.291151756e-02f, -3.328489889e-02f, -3.365792098e-02f, -3.403058360e-02f, -3.440288652e-02f,
--3.477482951e-02f, -3.514641232e-02f, -3.551763475e-02f, -3.588849654e-02f, -3.625899748e-02f, -3.662913734e-02f, -3.699891588e-02f, -3.736833287e-02f, -3.773738810e-02f, -3.810608133e-02f,
--3.847441234e-02f, -3.884238089e-02f, -3.920998677e-02f, -3.957722975e-02f, -3.994410960e-02f, -4.031062611e-02f, -4.067677903e-02f, -4.104256816e-02f, -4.140799327e-02f, -4.177305413e-02f,
--4.213775053e-02f, -4.250208224e-02f, -4.286604904e-02f, -4.322965071e-02f, -4.359288703e-02f, -4.395575779e-02f, -4.431826276e-02f, -4.468040172e-02f, -4.504217446e-02f, -4.540358075e-02f,
--4.576462039e-02f, -4.612529315e-02f, -4.648559882e-02f, -4.684553718e-02f, -4.720510801e-02f, -4.756431111e-02f, -4.792314626e-02f, -4.828161324e-02f, -4.863971184e-02f, -4.899744185e-02f,
--4.935480305e-02f, -4.971179524e-02f, -5.006841820e-02f, -5.042467172e-02f, -5.078055559e-02f, -5.113606961e-02f, -5.149121355e-02f, -5.184598722e-02f, -5.220039040e-02f, -5.255442289e-02f,
--5.290808447e-02f, -5.326137495e-02f, -5.361429411e-02f, -5.396684175e-02f, -5.431901767e-02f, -5.467082165e-02f, -5.502225350e-02f, -5.537331300e-02f, -5.572399996e-02f, -5.607431418e-02f,
--5.642425544e-02f, -5.677382356e-02f, -5.712301832e-02f, -5.747183952e-02f, -5.782028697e-02f, -5.816836046e-02f, -5.851605980e-02f, -5.886338479e-02f, -5.921033522e-02f, -5.955691089e-02f,
--5.990311162e-02f, -6.024893720e-02f, -6.059438744e-02f, -6.093946214e-02f, -6.128416111e-02f, -6.162848414e-02f, -6.197243105e-02f, -6.231600163e-02f, -6.265919570e-02f, -6.300201307e-02f,
--6.334445354e-02f, -6.368651691e-02f, -6.402820300e-02f, -6.436951161e-02f, -6.471044255e-02f, -6.505099564e-02f, -6.539117068e-02f, -6.573096749e-02f, -6.607038587e-02f, -6.640942563e-02f,
--6.674808660e-02f, -6.708636857e-02f, -6.742427137e-02f, -6.776179481e-02f, -6.809893869e-02f, -6.843570284e-02f, -6.877208708e-02f, -6.910809121e-02f, -6.944371505e-02f, -6.977895842e-02f,
--7.011382113e-02f, -7.044830301e-02f, -7.078240387e-02f, -7.111612353e-02f, -7.144946180e-02f, -7.178241852e-02f, -7.211499349e-02f, -7.244718654e-02f, -7.277899749e-02f, -7.311042616e-02f,
--7.344147237e-02f, -7.377213594e-02f, -7.410241671e-02f, -7.443231448e-02f, -7.476182909e-02f, -7.509096036e-02f, -7.541970811e-02f, -7.574807217e-02f, -7.607605237e-02f, -7.640364853e-02f,
--7.673086048e-02f, -7.705768804e-02f, -7.738413104e-02f, -7.771018932e-02f, -7.803586270e-02f, -7.836115101e-02f, -7.868605407e-02f, -7.901057173e-02f, -7.933470381e-02f, -7.965845014e-02f,
--7.998181056e-02f, -8.030478489e-02f, -8.062737297e-02f, -8.094957463e-02f, -8.127138971e-02f, -8.159281804e-02f, -8.191385945e-02f, -8.223451379e-02f, -8.255478088e-02f, -8.287466056e-02f,
--8.319415267e-02f, -8.351325705e-02f, -8.383197354e-02f, -8.415030196e-02f, -8.446824217e-02f, -8.478579399e-02f, -8.510295728e-02f, -8.541973187e-02f, -8.573611760e-02f, -8.605211431e-02f,
--8.636772185e-02f, -8.668294005e-02f, -8.699776876e-02f, -8.731220782e-02f, -8.762625708e-02f, -8.793991638e-02f, -8.825318557e-02f, -8.856606448e-02f, -8.887855297e-02f, -8.919065089e-02f,
--8.950235807e-02f, -8.981367437e-02f, -9.012459963e-02f, -9.043513370e-02f, -9.074527644e-02f, -9.105502769e-02f, -9.136438729e-02f, -9.167335511e-02f, -9.198193098e-02f, -9.229011477e-02f,
--9.259790632e-02f, -9.290530549e-02f, -9.321231213e-02f, -9.351892608e-02f, -9.382514722e-02f, -9.413097538e-02f, -9.443641043e-02f, -9.474145222e-02f, -9.504610060e-02f, -9.535035544e-02f,
--9.565421658e-02f, -9.595768389e-02f, -9.626075722e-02f, -9.656343643e-02f, -9.686572139e-02f, -9.716761194e-02f, -9.746910795e-02f, -9.777020929e-02f, -9.807091580e-02f, -9.837122735e-02f,
--9.867114381e-02f, -9.897066503e-02f, -9.926979088e-02f, -9.956852123e-02f, -9.986685592e-02f, -1.001647948e-01f, -1.004623378e-01f, -1.007594848e-01f, -1.010562356e-01f, -1.013525900e-01f,
--1.016485480e-01f, -1.019441094e-01f, -1.022392741e-01f, -1.025340419e-01f, -1.028284128e-01f, -1.031223866e-01f, -1.034159631e-01f, -1.037091422e-01f, -1.040019239e-01f, -1.042943079e-01f,
--1.045862941e-01f, -1.048778825e-01f, -1.051690729e-01f, -1.054598651e-01f, -1.057502590e-01f, -1.060402546e-01f, -1.063298517e-01f, -1.066190501e-01f, -1.069078497e-01f, -1.071962505e-01f,
--1.074842522e-01f, -1.077718548e-01f, -1.080590582e-01f, -1.083458622e-01f, -1.086322667e-01f, -1.089182715e-01f, -1.092038766e-01f, -1.094890819e-01f, -1.097738872e-01f, -1.100582924e-01f,
--1.103422973e-01f, -1.106259020e-01f, -1.109091062e-01f, -1.111919098e-01f, -1.114743127e-01f, -1.117563149e-01f, -1.120379161e-01f, -1.123191163e-01f, -1.125999153e-01f, -1.128803131e-01f,
--1.131603095e-01f, -1.134399045e-01f, -1.137190978e-01f, -1.139978895e-01f, -1.142762793e-01f, -1.145542672e-01f, -1.148318531e-01f, -1.151090368e-01f, -1.153858182e-01f, -1.156621973e-01f,
--1.159381739e-01f, -1.162137480e-01f, -1.164889193e-01f, -1.167636879e-01f, -1.170380535e-01f, -1.173120162e-01f, -1.175855757e-01f, -1.178587320e-01f, -1.181314850e-01f, -1.184038346e-01f,
--1.186757807e-01f, -1.189473231e-01f, -1.192184618e-01f, -1.194891966e-01f, -1.197595276e-01f, -1.200294545e-01f, -1.202989772e-01f, -1.205680958e-01f, -1.208368100e-01f, -1.211051197e-01f,
--1.213730249e-01f, -1.216405256e-01f, -1.219076214e-01f, -1.221743125e-01f, -1.224405987e-01f, -1.227064798e-01f, -1.229719558e-01f, -1.232370267e-01f, -1.235016922e-01f, -1.237659523e-01f,
--1.240298070e-01f, -1.242932561e-01f, -1.245562995e-01f, -1.248189372e-01f, -1.250811690e-01f, -1.253429949e-01f, -1.256044148e-01f, -1.258654285e-01f, -1.261260360e-01f, -1.263862373e-01f,
--1.266460321e-01f, -1.269054205e-01f, -1.271644023e-01f, -1.274229775e-01f, -1.276811460e-01f, -1.279389076e-01f, -1.281962624e-01f, -1.284532101e-01f, -1.287097508e-01f, -1.289658843e-01f,
--1.292216106e-01f, -1.294769296e-01f, -1.297318412e-01f, -1.299863453e-01f, -1.302404419e-01f, -1.304941308e-01f, -1.307474120e-01f, -1.310002854e-01f, -1.312527509e-01f, -1.315048084e-01f,
--1.317564579e-01f, -1.320076993e-01f, -1.322585326e-01f, -1.325089575e-01f, -1.327589741e-01f, -1.330085823e-01f, -1.332577820e-01f, -1.335065732e-01f, -1.337549557e-01f, -1.340029294e-01f,
--1.342504944e-01f, -1.344976506e-01f, -1.347443978e-01f, -1.349907360e-01f, -1.352366652e-01f, -1.354821852e-01f, -1.357272960e-01f, -1.359719975e-01f, -1.362162896e-01f, -1.364601724e-01f,
--1.367036456e-01f, -1.369467093e-01f, -1.371893634e-01f, -1.374316078e-01f, -1.376734425e-01f, -1.379148673e-01f, -1.381558823e-01f, -1.383964873e-01f, -1.386366823e-01f, -1.388764672e-01f,
--1.391158420e-01f, -1.393548066e-01f, -1.395933610e-01f, -1.398315050e-01f, -1.400692386e-01f, -1.403065618e-01f, -1.405434745e-01f, -1.407799767e-01f, -1.410160682e-01f, -1.412517490e-01f,
--1.414870192e-01f, -1.417218785e-01f, -1.419563270e-01f, -1.421903645e-01f, -1.424239912e-01f, -1.426572068e-01f, -1.428900113e-01f, -1.431224047e-01f, -1.433543869e-01f, -1.435859579e-01f,
--1.438171177e-01f, -1.440478661e-01f, -1.442782031e-01f, -1.445081286e-01f, -1.447376427e-01f, -1.449667453e-01f, -1.451954362e-01f, -1.454237155e-01f, -1.456515832e-01f, -1.458790391e-01f,
--1.461060832e-01f, -1.463327155e-01f, -1.465589359e-01f, -1.467847444e-01f, -1.470101409e-01f, -1.472351255e-01f, -1.474596979e-01f, -1.476838583e-01f, -1.479076065e-01f, -1.481309426e-01f,
--1.483538664e-01f, -1.485763779e-01f, -1.487984772e-01f, -1.490201640e-01f, -1.492414385e-01f, -1.494623006e-01f, -1.496827501e-01f, -1.499027872e-01f, -1.501224117e-01f, -1.503416236e-01f,
--1.505604229e-01f, -1.507788096e-01f, -1.509967835e-01f, -1.512143447e-01f, -1.514314931e-01f, -1.516482288e-01f, -1.518645516e-01f, -1.520804615e-01f, -1.522959585e-01f, -1.525110425e-01f,
--1.527257136e-01f, -1.529399717e-01f, -1.531538167e-01f, -1.533672487e-01f, -1.535802676e-01f, -1.537928733e-01f, -1.540050659e-01f, -1.542168453e-01f, -1.544282115e-01f, -1.546391644e-01f,
--1.548497041e-01f, -1.550598304e-01f, -1.552695435e-01f, -1.554788432e-01f, -1.556877295e-01f, -1.558962024e-01f, -1.561042619e-01f, -1.563119079e-01f, -1.565191405e-01f, -1.567259596e-01f,
--1.569323651e-01f, -1.571383571e-01f, -1.573439356e-01f, -1.575491004e-01f, -1.577538517e-01f, -1.579581893e-01f, -1.581621133e-01f, -1.583656237e-01f, -1.585687203e-01f, -1.587714033e-01f,
--1.589736725e-01f, -1.591755280e-01f, -1.593769697e-01f, -1.595779977e-01f, -1.597786119e-01f, -1.599788123e-01f, -1.601785989e-01f, -1.603779717e-01f, -1.605769306e-01f, -1.607754757e-01f,
--1.609736069e-01f, -1.611713242e-01f, -1.613686277e-01f, -1.615655172e-01f, -1.617619929e-01f, -1.619580546e-01f, -1.621537024e-01f, -1.623489362e-01f, -1.625437561e-01f, -1.627381621e-01f,
--1.629321541e-01f, -1.631257321e-01f, -1.633188962e-01f, -1.635116462e-01f, -1.637039823e-01f, -1.638959044e-01f, -1.640874124e-01f, -1.642785065e-01f, -1.644691866e-01f, -1.646594527e-01f,
--1.648493047e-01f, -1.650387428e-01f, -1.652277668e-01f, -1.654163768e-01f, -1.656045728e-01f, -1.657923548e-01f, -1.659797228e-01f, -1.661666767e-01f, -1.663532167e-01f, -1.665393426e-01f,
--1.667250545e-01f, -1.669103524e-01f, -1.670952363e-01f, -1.672797062e-01f, -1.674637622e-01f, -1.676474041e-01f, -1.678306320e-01f, -1.680134460e-01f, -1.681958460e-01f, -1.683778320e-01f,
--1.685594040e-01f, -1.687405621e-01f, -1.689213063e-01f, -1.691016365e-01f, -1.692815528e-01f, -1.694610552e-01f, -1.696401437e-01f, -1.698188183e-01f, -1.699970790e-01f, -1.701749259e-01f,
--1.703523588e-01f, -1.705293780e-01f, -1.707059833e-01f, -1.708821748e-01f, -1.710579524e-01f, -1.712333163e-01f, -1.714082664e-01f, -1.715828028e-01f, -1.717569254e-01f, -1.719306343e-01f,
--1.721039295e-01f, -1.722768109e-01f, -1.724492787e-01f, -1.726213329e-01f, -1.727929734e-01f, -1.729642003e-01f, -1.731350136e-01f, -1.733054133e-01f, -1.734753995e-01f, -1.736449721e-01f,
--1.738141313e-01f, -1.739828769e-01f, -1.741512091e-01f, -1.743191278e-01f, -1.744866331e-01f, -1.746537250e-01f, -1.748204036e-01f, -1.749866688e-01f, -1.751525207e-01f, -1.753179592e-01f,
--1.754829846e-01f, -1.756475967e-01f, -1.758117955e-01f, -1.759755813e-01f, -1.761389538e-01f, -1.763019132e-01f, -1.764644596e-01f, -1.766265928e-01f, -1.767883131e-01f, -1.769496203e-01f,
--1.771105146e-01f, -1.772709959e-01f, -1.774310644e-01f, -1.775907199e-01f, -1.777499627e-01f, -1.779087926e-01f, -1.780672097e-01f, -1.782252142e-01f, -1.783828059e-01f, -1.785399850e-01f,
--1.786967514e-01f, -1.788531053e-01f, -1.790090466e-01f, -1.791645754e-01f, -1.793196917e-01f, -1.794743956e-01f, -1.796286871e-01f, -1.797825663e-01f, -1.799360331e-01f, -1.800890876e-01f,
--1.802417300e-01f, -1.803939601e-01f, -1.805457781e-01f, -1.806971840e-01f, -1.808481778e-01f, -1.809987597e-01f, -1.811489295e-01f, -1.812986874e-01f, -1.814480335e-01f, -1.815969677e-01f,
--1.817454901e-01f, -1.818936007e-01f, -1.820412997e-01f, -1.821885870e-01f, -1.823354628e-01f, -1.824819269e-01f, -1.826279796e-01f, -1.827736208e-01f, -1.829188507e-01f, -1.830636691e-01f,
--1.832080763e-01f, -1.833520722e-01f, -1.834956570e-01f, -1.836388305e-01f, -1.837815930e-01f, -1.839239445e-01f, -1.840658850e-01f, -1.842074145e-01f, -1.843485332e-01f, -1.844892410e-01f,
--1.846295381e-01f, -1.847694245e-01f, -1.849089002e-01f, -1.850479654e-01f, -1.851866200e-01f, -1.853248641e-01f, -1.854626979e-01f, -1.856001212e-01f, -1.857371343e-01f, -1.858737371e-01f,
--1.860099298e-01f, -1.861457123e-01f, -1.862810848e-01f, -1.864160473e-01f, -1.865505998e-01f, -1.866847425e-01f, -1.868184754e-01f, -1.869517985e-01f, -1.870847120e-01f, -1.872172159e-01f,
--1.873493102e-01f, -1.874809951e-01f, -1.876122705e-01f, -1.877431366e-01f, -1.878735934e-01f, -1.880036410e-01f, -1.881332794e-01f, -1.882625088e-01f, -1.883913292e-01f, -1.885197407e-01f,
--1.886477433e-01f, -1.887753371e-01f, -1.889025221e-01f, -1.890292985e-01f, -1.891556664e-01f, -1.892816257e-01f, -1.894071766e-01f, -1.895323192e-01f, -1.896570534e-01f, -1.897813795e-01f,
--1.899052974e-01f, -1.900288073e-01f, -1.901519091e-01f, -1.902746031e-01f, -1.903968892e-01f, -1.905187676e-01f, -1.906402383e-01f, -1.907613014e-01f, -1.908819570e-01f, -1.910022051e-01f,
--1.911220459e-01f, -1.912414794e-01f, -1.913605057e-01f, -1.914791248e-01f, -1.915973370e-01f, -1.917151422e-01f, -1.918325405e-01f, -1.919495320e-01f, -1.920661168e-01f, -1.921822950e-01f,
--1.922980666e-01f, -1.924134318e-01f, -1.925283906e-01f, -1.926429431e-01f, -1.927570895e-01f, -1.928708297e-01f, -1.929841639e-01f, -1.930970922e-01f, -1.932096146e-01f, -1.933217312e-01f,
--1.934334422e-01f, -1.935447476e-01f, -1.936556475e-01f, -1.937661420e-01f, -1.938762312e-01f, -1.939859152e-01f, -1.940951940e-01f, -1.942040678e-01f, -1.943125367e-01f, -1.944206007e-01f,
--1.945282599e-01f, -1.946355145e-01f, -1.947423645e-01f, -1.948488101e-01f, -1.949548513e-01f, -1.950604881e-01f, -1.951657208e-01f, -1.952705494e-01f, -1.953749741e-01f, -1.954789948e-01f,
--1.955826117e-01f, -1.956858249e-01f, -1.957886345e-01f, -1.958910407e-01f, -1.959930434e-01f, -1.960946428e-01f, -1.961958390e-01f, -1.962966322e-01f, -1.963970223e-01f, -1.964970096e-01f,
--1.965965940e-01f, -1.966957758e-01f, -1.967945549e-01f, -1.968929316e-01f, -1.969909060e-01f, -1.970884780e-01f, -1.971856479e-01f, -1.972824158e-01f, -1.973787816e-01f, -1.974747457e-01f,
--1.975703080e-01f, -1.976654686e-01f, -1.977602278e-01f, -1.978545855e-01f, -1.979485419e-01f, -1.980420972e-01f, -1.981352513e-01f, -1.982280045e-01f, -1.983203568e-01f, -1.984123083e-01f,
--1.985038592e-01f, -1.985950096e-01f, -1.986857596e-01f, -1.987761093e-01f, -1.988660587e-01f, -1.989556081e-01f, -1.990447576e-01f, -1.991335072e-01f, -1.992218570e-01f, -1.993098073e-01f,
--1.993973581e-01f, -1.994845094e-01f, -1.995712615e-01f, -1.996576145e-01f, -1.997435684e-01f, -1.998291235e-01f, -1.999142797e-01f, -1.999990373e-01f, -2.000833963e-01f, -2.001673569e-01f,
--2.002509191e-01f, -2.003340832e-01f, -2.004168492e-01f, -2.004992173e-01f, -2.005811875e-01f, -2.006627601e-01f, -2.007439351e-01f, -2.008247126e-01f, -2.009050928e-01f, -2.009850758e-01f,
--2.010646617e-01f, -2.011438506e-01f, -2.012226428e-01f, -2.013010382e-01f, -2.013790371e-01f, -2.014566395e-01f, -2.015338456e-01f, -2.016106555e-01f, -2.016870694e-01f, -2.017630873e-01f,
--2.018387094e-01f, -2.019139358e-01f, -2.019887668e-01f, -2.020632023e-01f, -2.021372425e-01f, -2.022108876e-01f, -2.022841376e-01f, -2.023569928e-01f, -2.024294532e-01f, -2.025015191e-01f,
--2.025731904e-01f, -2.026444674e-01f, -2.027153502e-01f, -2.027858389e-01f, -2.028559337e-01f, -2.029256346e-01f, -2.029949419e-01f, -2.030638557e-01f, -2.031323761e-01f, -2.032005032e-01f,
--2.032682372e-01f, -2.033355783e-01f, -2.034025265e-01f, -2.034690820e-01f, -2.035352449e-01f, -2.036010154e-01f, -2.036663937e-01f, -2.037313798e-01f, -2.037959739e-01f, -2.038601762e-01f,
--2.039239868e-01f, -2.039874058e-01f, -2.040504334e-01f, -2.041130697e-01f, -2.041753149e-01f, -2.042371691e-01f, -2.042986324e-01f, -2.043597051e-01f, -2.044203872e-01f, -2.044806789e-01f,
--2.045405803e-01f, -2.046000917e-01f, -2.046592131e-01f, -2.047179446e-01f, -2.047762866e-01f, -2.048342390e-01f, -2.048918020e-01f, -2.049489758e-01f, -2.050057606e-01f, -2.050621564e-01f,
--2.051181635e-01f, -2.051737820e-01f, -2.052290120e-01f, -2.052838537e-01f, -2.053383073e-01f, -2.053923729e-01f, -2.054460506e-01f, -2.054993406e-01f, -2.055522432e-01f, -2.056047583e-01f,
--2.056568862e-01f, -2.057086270e-01f, -2.057599810e-01f, -2.058109481e-01f, -2.058615287e-01f, -2.059117229e-01f, -2.059615307e-01f, -2.060109525e-01f, -2.060599882e-01f, -2.061086382e-01f,
--2.061569025e-01f, -2.062047814e-01f, -2.062522749e-01f, -2.062993833e-01f, -2.063461066e-01f, -2.063924452e-01f, -2.064383990e-01f, -2.064839684e-01f, -2.065291534e-01f, -2.065739542e-01f,
--2.066183710e-01f, -2.066624039e-01f, -2.067060531e-01f, -2.067493188e-01f, -2.067922012e-01f, -2.068347004e-01f, -2.068768165e-01f, -2.069185498e-01f, -2.069599003e-01f, -2.070008684e-01f,
--2.070414541e-01f, -2.070816576e-01f, -2.071214791e-01f, -2.071609187e-01f, -2.071999767e-01f, -2.072386531e-01f, -2.072769482e-01f, -2.073148621e-01f, -2.073523951e-01f, -2.073895472e-01f,
--2.074263187e-01f, -2.074627096e-01f, -2.074987203e-01f, -2.075343509e-01f, -2.075696014e-01f, -2.076044723e-01f, -2.076389634e-01f, -2.076730752e-01f, -2.077068077e-01f, -2.077401611e-01f,
--2.077731356e-01f, -2.078057314e-01f, -2.078379487e-01f, -2.078697875e-01f, -2.079012482e-01f, -2.079323308e-01f, -2.079630356e-01f, -2.079933628e-01f, -2.080233124e-01f, -2.080528848e-01f,
--2.080820801e-01f, -2.081108984e-01f, -2.081393399e-01f, -2.081674049e-01f, -2.081950935e-01f, -2.082224059e-01f, -2.082493422e-01f, -2.082759027e-01f, -2.083020876e-01f, -2.083278970e-01f,
--2.083533310e-01f, -2.083783900e-01f, -2.084030741e-01f, -2.084273834e-01f, -2.084513182e-01f, -2.084748786e-01f, -2.084980648e-01f, -2.085208771e-01f, -2.085433155e-01f, -2.085653804e-01f,
--2.085870718e-01f, -2.086083899e-01f, -2.086293351e-01f, -2.086499074e-01f, -2.086701070e-01f, -2.086899341e-01f, -2.087093890e-01f, -2.087284717e-01f, -2.087471826e-01f, -2.087655218e-01f,
--2.087834894e-01f, -2.088010857e-01f, -2.088183109e-01f, -2.088351652e-01f, -2.088516487e-01f, -2.088677616e-01f, -2.088835042e-01f, -2.088988767e-01f, -2.089138792e-01f, -2.089285119e-01f,
--2.089427751e-01f, -2.089566689e-01f, -2.089701935e-01f, -2.089833491e-01f, -2.089961360e-01f, -2.090085543e-01f, -2.090206042e-01f, -2.090322859e-01f, -2.090435996e-01f, -2.090545456e-01f,
--2.090651239e-01f, -2.090753349e-01f, -2.090851787e-01f, -2.090946556e-01f, -2.091037656e-01f, -2.091125091e-01f, -2.091208862e-01f, -2.091288971e-01f, -2.091365421e-01f, -2.091438213e-01f,
--2.091507350e-01f, -2.091572833e-01f, -2.091634664e-01f, -2.091692846e-01f, -2.091747381e-01f, -2.091798271e-01f, -2.091845517e-01f, -2.091889122e-01f, -2.091929088e-01f, -2.091965417e-01f,
--2.091998111e-01f, -2.092027172e-01f, -2.092052602e-01f, -2.092074404e-01f, -2.092092579e-01f, -2.092107130e-01f, -2.092118058e-01f, -2.092125366e-01f, -2.092129056e-01f, -2.092129130e-01f,
--2.092125589e-01f, -2.092118438e-01f, -2.092107676e-01f, -2.092093307e-01f, -2.092075332e-01f, -2.092053754e-01f, -2.092028575e-01f, -2.091999797e-01f, -2.091967423e-01f, -2.091931453e-01f,
--2.091891891e-01f, -2.091848739e-01f, -2.091801998e-01f, -2.091751672e-01f, -2.091697761e-01f, -2.091640269e-01f, -2.091579197e-01f, -2.091514548e-01f, -2.091446324e-01f, -2.091374527e-01f,
--2.091299159e-01f, -2.091220222e-01f, -2.091137719e-01f, -2.091051652e-01f, -2.090962023e-01f, -2.090868834e-01f, -2.090772088e-01f, -2.090671787e-01f, -2.090567932e-01f, -2.090460526e-01f,
--2.090349572e-01f, -2.090235072e-01f, -2.090117027e-01f, -2.089995440e-01f, -2.089870314e-01f, -2.089741650e-01f, -2.089609451e-01f, -2.089473719e-01f, -2.089334457e-01f, -2.089191666e-01f,
--2.089045348e-01f, -2.088895507e-01f, -2.088742145e-01f, -2.088585263e-01f, -2.088424864e-01f, -2.088260951e-01f, -2.088093524e-01f, -2.087922588e-01f, -2.087748144e-01f, -2.087570194e-01f,
--2.087388741e-01f, -2.087203787e-01f, -2.087015335e-01f, -2.086823386e-01f, -2.086627943e-01f, -2.086429008e-01f, -2.086226584e-01f, -2.086020673e-01f, -2.085811277e-01f, -2.085598398e-01f,
--2.085382040e-01f, -2.085162204e-01f, -2.084938892e-01f, -2.084712108e-01f, -2.084481853e-01f, -2.084248129e-01f, -2.084010940e-01f, -2.083770287e-01f, -2.083526173e-01f, -2.083278600e-01f,
--2.083027570e-01f, -2.082773086e-01f, -2.082515151e-01f, -2.082253766e-01f, -2.081988935e-01f, -2.081720658e-01f, -2.081448940e-01f, -2.081173782e-01f, -2.080895186e-01f, -2.080613156e-01f,
--2.080327692e-01f, -2.080038799e-01f, -2.079746478e-01f, -2.079450732e-01f, -2.079151563e-01f, -2.078848973e-01f, -2.078542965e-01f, -2.078233542e-01f, -2.077920705e-01f, -2.077604458e-01f,
--2.077284802e-01f, -2.076961741e-01f, -2.076635276e-01f, -2.076305410e-01f, -2.075972146e-01f, -2.075635486e-01f, -2.075295432e-01f, -2.074951987e-01f, -2.074605154e-01f, -2.074254934e-01f,
--2.073901330e-01f, -2.073544346e-01f, -2.073183982e-01f, -2.072820243e-01f, -2.072453129e-01f, -2.072082645e-01f, -2.071708791e-01f, -2.071331572e-01f, -2.070950988e-01f, -2.070567044e-01f,
--2.070179741e-01f, -2.069789081e-01f, -2.069395068e-01f, -2.068997703e-01f, -2.068596990e-01f, -2.068192931e-01f, -2.067785528e-01f, -2.067374784e-01f, -2.066960701e-01f, -2.066543283e-01f,
--2.066122531e-01f, -2.065698448e-01f, -2.065271037e-01f, -2.064840300e-01f, -2.064406240e-01f, -2.063968859e-01f, -2.063528159e-01f, -2.063084145e-01f, -2.062636817e-01f, -2.062186179e-01f,
--2.061732233e-01f, -2.061274982e-01f, -2.060814428e-01f, -2.060350574e-01f, -2.059883422e-01f, -2.059412976e-01f, -2.058939237e-01f, -2.058462209e-01f, -2.057981893e-01f, -2.057498293e-01f,
--2.057011411e-01f, -2.056521250e-01f, -2.056027812e-01f, -2.055531100e-01f, -2.055031116e-01f, -2.054527864e-01f, -2.054021345e-01f, -2.053511563e-01f, -2.052998520e-01f, -2.052482219e-01f,
--2.051962662e-01f, -2.051439852e-01f, -2.050913791e-01f, -2.050384483e-01f, -2.049851930e-01f, -2.049316135e-01f, -2.048777099e-01f, -2.048234827e-01f, -2.047689320e-01f, -2.047140582e-01f,
--2.046588614e-01f, -2.046033420e-01f, -2.045475002e-01f, -2.044913363e-01f, -2.044348506e-01f, -2.043780433e-01f, -2.043209147e-01f, -2.042634651e-01f, -2.042056947e-01f, -2.041476039e-01f,
--2.040891928e-01f, -2.040304618e-01f, -2.039714111e-01f, -2.039120409e-01f, -2.038523517e-01f, -2.037923436e-01f, -2.037320169e-01f, -2.036713718e-01f, -2.036104088e-01f, -2.035491279e-01f,
--2.034875296e-01f, -2.034256140e-01f, -2.033633815e-01f, -2.033008323e-01f, -2.032379666e-01f, -2.031747849e-01f, -2.031112873e-01f, -2.030474741e-01f, -2.029833457e-01f, -2.029189022e-01f,
--2.028541439e-01f, -2.027890712e-01f, -2.027236843e-01f, -2.026579834e-01f, -2.025919689e-01f, -2.025256411e-01f, -2.024590002e-01f, -2.023920464e-01f, -2.023247802e-01f, -2.022572016e-01f,
--2.021893111e-01f, -2.021211090e-01f, -2.020525954e-01f, -2.019837706e-01f, -2.019146351e-01f, -2.018451889e-01f, -2.017754325e-01f, -2.017053660e-01f, -2.016349899e-01f, -2.015643043e-01f,
--2.014933095e-01f, -2.014220058e-01f, -2.013503936e-01f, -2.012784730e-01f, -2.012062444e-01f, -2.011337081e-01f, -2.010608643e-01f, -2.009877133e-01f, -2.009142555e-01f, -2.008404910e-01f,
--2.007664202e-01f, -2.006920433e-01f, -2.006173608e-01f, -2.005423727e-01f, -2.004670795e-01f, -2.003914813e-01f, -2.003155786e-01f, -2.002393715e-01f, -2.001628605e-01f, -2.000860456e-01f,
--2.000089273e-01f, -1.999315059e-01f, -1.998537815e-01f, -1.997757546e-01f, -1.996974254e-01f, -1.996187941e-01f, -1.995398612e-01f, -1.994606268e-01f, -1.993810912e-01f, -1.993012548e-01f,
--1.992211179e-01f, -1.991406807e-01f, -1.990599434e-01f, -1.989789066e-01f, -1.988975703e-01f, -1.988159349e-01f, -1.987340007e-01f, -1.986517680e-01f, -1.985692370e-01f, -1.984864081e-01f,
--1.984032816e-01f, -1.983198577e-01f, -1.982361368e-01f, -1.981521192e-01f, -1.980678050e-01f, -1.979831947e-01f, -1.978982886e-01f, -1.978130868e-01f, -1.977275898e-01f, -1.976417978e-01f,
--1.975557111e-01f, -1.974693300e-01f, -1.973826548e-01f, -1.972956858e-01f, -1.972084233e-01f, -1.971208676e-01f, -1.970330190e-01f, -1.969448778e-01f, -1.968564443e-01f, -1.967677187e-01f,
--1.966787015e-01f, -1.965893928e-01f, -1.964997931e-01f, -1.964099025e-01f, -1.963197214e-01f, -1.962292501e-01f, -1.961384889e-01f, -1.960474380e-01f, -1.959560979e-01f, -1.958644687e-01f,
--1.957725508e-01f, -1.956803446e-01f, -1.955878502e-01f, -1.954950680e-01f, -1.954019983e-01f, -1.953086414e-01f, -1.952149976e-01f, -1.951210673e-01f, -1.950268506e-01f, -1.949323480e-01f,
--1.948375596e-01f, -1.947424859e-01f, -1.946471272e-01f, -1.945514836e-01f, -1.944555556e-01f, -1.943593435e-01f, -1.942628475e-01f, -1.941660679e-01f, -1.940690051e-01f, -1.939716594e-01f,
--1.938740310e-01f, -1.937761204e-01f, -1.936779277e-01f, -1.935794533e-01f, -1.934806975e-01f, -1.933816606e-01f, -1.932823430e-01f, -1.931827449e-01f, -1.930828666e-01f, -1.929827084e-01f,
--1.928822707e-01f, -1.927815538e-01f, -1.926805579e-01f, -1.925792834e-01f, -1.924777307e-01f, -1.923758999e-01f, -1.922737914e-01f, -1.921714055e-01f, -1.920687426e-01f, -1.919658029e-01f,
--1.918625868e-01f, -1.917590946e-01f, -1.916553265e-01f, -1.915512829e-01f, -1.914469642e-01f, -1.913423705e-01f, -1.912375023e-01f, -1.911323598e-01f, -1.910269434e-01f, -1.909212533e-01f,
--1.908152899e-01f, -1.907090536e-01f, -1.906025445e-01f, -1.904957631e-01f, -1.903887096e-01f, -1.902813844e-01f, -1.901737877e-01f, -1.900659199e-01f, -1.899577813e-01f, -1.898493723e-01f,
--1.897406931e-01f, -1.896317440e-01f, -1.895225254e-01f, -1.894130376e-01f, -1.893032809e-01f, -1.891932556e-01f, -1.890829620e-01f, -1.889724005e-01f, -1.888615714e-01f, -1.887504750e-01f,
--1.886391115e-01f, -1.885274814e-01f, -1.884155850e-01f, -1.883034225e-01f, -1.881909943e-01f, -1.880783007e-01f, -1.879653420e-01f, -1.878521186e-01f, -1.877386307e-01f, -1.876248788e-01f,
--1.875108630e-01f, -1.873965837e-01f, -1.872820413e-01f, -1.871672361e-01f, -1.870521684e-01f, -1.869368384e-01f, -1.868212466e-01f, -1.867053933e-01f, -1.865892787e-01f, -1.864729033e-01f,
--1.863562673e-01f, -1.862393710e-01f, -1.861222147e-01f, -1.860047989e-01f, -1.858871238e-01f, -1.857691898e-01f, -1.856509971e-01f, -1.855325461e-01f, -1.854138371e-01f, -1.852948704e-01f,
--1.851756464e-01f, -1.850561654e-01f, -1.849364277e-01f, -1.848164337e-01f, -1.846961836e-01f, -1.845756778e-01f, -1.844549167e-01f, -1.843339005e-01f, -1.842126295e-01f, -1.840911042e-01f,
--1.839693247e-01f, -1.838472916e-01f, -1.837250050e-01f, -1.836024653e-01f, -1.834796728e-01f, -1.833566280e-01f, -1.832333310e-01f, -1.831097822e-01f, -1.829859820e-01f, -1.828619306e-01f,
--1.827376285e-01f, -1.826130759e-01f, -1.824882732e-01f, -1.823632206e-01f, -1.822379186e-01f, -1.821123675e-01f, -1.819865675e-01f, -1.818605190e-01f, -1.817342224e-01f, -1.816076780e-01f,
--1.814808861e-01f, -1.813538470e-01f, -1.812265611e-01f, -1.810990287e-01f, -1.809712501e-01f, -1.808432257e-01f, -1.807149558e-01f, -1.805864408e-01f, -1.804576809e-01f, -1.803286765e-01f,
--1.801994279e-01f, -1.800699355e-01f, -1.799401996e-01f, -1.798102205e-01f, -1.796799986e-01f, -1.795495342e-01f, -1.794188276e-01f, -1.792878792e-01f, -1.791566892e-01f, -1.790252582e-01f,
--1.788935862e-01f, -1.787616738e-01f, -1.786295213e-01f, -1.784971289e-01f, -1.783644970e-01f, -1.782316260e-01f, -1.780985162e-01f, -1.779651679e-01f, -1.778315814e-01f, -1.776977571e-01f,
--1.775636954e-01f, -1.774293965e-01f, -1.772948609e-01f, -1.771600887e-01f, -1.770250805e-01f, -1.768898365e-01f, -1.767543570e-01f, -1.766186424e-01f, -1.764826931e-01f, -1.763465093e-01f,
--1.762100914e-01f, -1.760734398e-01f, -1.759365547e-01f, -1.757994366e-01f, -1.756620858e-01f, -1.755245025e-01f, -1.753866872e-01f, -1.752486402e-01f, -1.751103618e-01f, -1.749718524e-01f,
--1.748331122e-01f, -1.746941417e-01f, -1.745549412e-01f, -1.744155110e-01f, -1.742758515e-01f, -1.741359630e-01f, -1.739958458e-01f, -1.738555003e-01f, -1.737149269e-01f, -1.735741258e-01f,
--1.734330975e-01f, -1.732918422e-01f, -1.731503603e-01f, -1.730086521e-01f, -1.728667180e-01f, -1.727245584e-01f, -1.725821735e-01f, -1.724395637e-01f, -1.722967294e-01f, -1.721536709e-01f,
--1.720103885e-01f, -1.718668826e-01f, -1.717231536e-01f, -1.715792017e-01f, -1.714350273e-01f, -1.712906308e-01f, -1.711460125e-01f, -1.710011728e-01f, -1.708561120e-01f, -1.707108304e-01f,
--1.705653284e-01f, -1.704196063e-01f, -1.702736645e-01f, -1.701275033e-01f, -1.699811231e-01f, -1.698345242e-01f, -1.696877070e-01f, -1.695406718e-01f, -1.693934189e-01f, -1.692459488e-01f,
--1.690982617e-01f, -1.689503579e-01f, -1.688022380e-01f, -1.686539021e-01f, -1.685053506e-01f, -1.683565840e-01f, -1.682076024e-01f, -1.680584064e-01f, -1.679089961e-01f, -1.677593721e-01f,
--1.676095346e-01f, -1.674594839e-01f, -1.673092205e-01f, -1.671587446e-01f, -1.670080567e-01f, -1.668571570e-01f, -1.667060459e-01f, -1.665547238e-01f, -1.664031910e-01f, -1.662514479e-01f,
--1.660994948e-01f, -1.659473320e-01f, -1.657949600e-01f, -1.656423790e-01f, -1.654895895e-01f, -1.653365917e-01f, -1.651833860e-01f, -1.650299728e-01f, -1.648763524e-01f, -1.647225251e-01f,
--1.645684914e-01f, -1.644142516e-01f, -1.642598059e-01f, -1.641051549e-01f, -1.639502987e-01f, -1.637952379e-01f, -1.636399726e-01f, -1.634845034e-01f, -1.633288305e-01f, -1.631729542e-01f,
--1.630168750e-01f, -1.628605932e-01f, -1.627041091e-01f, -1.625474231e-01f, -1.623905356e-01f, -1.622334468e-01f, -1.620761573e-01f, -1.619186672e-01f, -1.617609769e-01f, -1.616030869e-01f,
--1.614449975e-01f, -1.612867089e-01f, -1.611282217e-01f, -1.609695361e-01f, -1.608106524e-01f, -1.606515711e-01f, -1.604922925e-01f, -1.603328169e-01f, -1.601731447e-01f, -1.600132763e-01f,
--1.598532120e-01f, -1.596929521e-01f, -1.595324971e-01f, -1.593718472e-01f, -1.592110029e-01f, -1.590499645e-01f, -1.588887323e-01f, -1.587273066e-01f, -1.585656880e-01f, -1.584038766e-01f,
--1.582418730e-01f, -1.580796773e-01f, -1.579172900e-01f, -1.577547115e-01f, -1.575919420e-01f, -1.574289820e-01f, -1.572658318e-01f, -1.571024917e-01f, -1.569389622e-01f, -1.567752435e-01f,
--1.566113361e-01f, -1.564472402e-01f, -1.562829563e-01f, -1.561184847e-01f, -1.559538258e-01f, -1.557889799e-01f, -1.556239473e-01f, -1.554587285e-01f, -1.552933238e-01f, -1.551277336e-01f,
--1.549619581e-01f, -1.547959978e-01f, -1.546298531e-01f, -1.544635242e-01f, -1.542970115e-01f, -1.541303155e-01f, -1.539634364e-01f, -1.537963747e-01f, -1.536291306e-01f, -1.534617046e-01f,
--1.532940969e-01f, -1.531263081e-01f, -1.529583383e-01f, -1.527901880e-01f, -1.526218575e-01f, -1.524533473e-01f, -1.522846576e-01f, -1.521157888e-01f, -1.519467413e-01f, -1.517775154e-01f,
--1.516081115e-01f, -1.514385300e-01f, -1.512687711e-01f, -1.510988354e-01f, -1.509287231e-01f, -1.507584346e-01f, -1.505879703e-01f, -1.504173304e-01f, -1.502465155e-01f, -1.500755258e-01f,
--1.499043617e-01f, -1.497330236e-01f, -1.495615118e-01f, -1.493898266e-01f, -1.492179686e-01f, -1.490459379e-01f, -1.488737350e-01f, -1.487013603e-01f, -1.485288140e-01f, -1.483560966e-01f,
--1.481832084e-01f, -1.480101498e-01f, -1.478369212e-01f, -1.476635228e-01f, -1.474899552e-01f, -1.473162185e-01f, -1.471423133e-01f, -1.469682398e-01f, -1.467939984e-01f, -1.466195895e-01f,
--1.464450135e-01f, -1.462702706e-01f, -1.460953614e-01f, -1.459202860e-01f, -1.457450450e-01f, -1.455696386e-01f, -1.453940673e-01f, -1.452183313e-01f, -1.450424311e-01f, -1.448663670e-01f,
--1.446901394e-01f, -1.445137486e-01f, -1.443371950e-01f, -1.441604790e-01f, -1.439836010e-01f, -1.438065612e-01f, -1.436293601e-01f, -1.434519980e-01f, -1.432744753e-01f, -1.430967924e-01f,
--1.429189496e-01f, -1.427409473e-01f, -1.425627858e-01f, -1.423844655e-01f, -1.422059868e-01f, -1.420273501e-01f, -1.418485556e-01f, -1.416696038e-01f, -1.414904951e-01f, -1.413112298e-01f,
--1.411318082e-01f, -1.409522308e-01f, -1.407724978e-01f, -1.405926098e-01f, -1.404125669e-01f, -1.402323697e-01f, -1.400520184e-01f, -1.398715134e-01f, -1.396908551e-01f, -1.395100439e-01f,
--1.393290801e-01f, -1.391479640e-01f, -1.389666962e-01f, -1.387852768e-01f, -1.386037064e-01f, -1.384219851e-01f, -1.382401135e-01f, -1.380580919e-01f, -1.378759206e-01f, -1.376936001e-01f,
--1.375111306e-01f, -1.373285126e-01f, -1.371457464e-01f, -1.369628323e-01f, -1.367797708e-01f, -1.365965623e-01f, -1.364132070e-01f, -1.362297053e-01f, -1.360460577e-01f, -1.358622644e-01f,
--1.356783259e-01f, -1.354942425e-01f, -1.353100146e-01f, -1.351256425e-01f, -1.349411266e-01f, -1.347564673e-01f, -1.345716650e-01f, -1.343867200e-01f, -1.342016327e-01f, -1.340164034e-01f,
--1.338310325e-01f, -1.336455204e-01f, -1.334598675e-01f, -1.332740740e-01f, -1.330881405e-01f, -1.329020672e-01f, -1.327158546e-01f, -1.325295029e-01f, -1.323430126e-01f, -1.321563840e-01f,
--1.319696175e-01f, -1.317827134e-01f, -1.315956722e-01f, -1.314084942e-01f, -1.312211797e-01f, -1.310337291e-01f, -1.308461429e-01f, -1.306584213e-01f, -1.304705648e-01f, -1.302825736e-01f,
--1.300944483e-01f, -1.299061890e-01f, -1.297177963e-01f, -1.295292704e-01f, -1.293406118e-01f, -1.291518208e-01f, -1.289628978e-01f, -1.287738431e-01f, -1.285846571e-01f, -1.283953403e-01f,
--1.282058928e-01f, -1.280163152e-01f, -1.278266078e-01f, -1.276367709e-01f, -1.274468050e-01f, -1.272567103e-01f, -1.270664873e-01f, -1.268761363e-01f, -1.266856578e-01f, -1.264950520e-01f,
--1.263043193e-01f, -1.261134601e-01f, -1.259224749e-01f, -1.257313638e-01f, -1.255401274e-01f, -1.253487659e-01f, -1.251572798e-01f, -1.249656694e-01f, -1.247739351e-01f, -1.245820772e-01f,
--1.243900962e-01f, -1.241979924e-01f, -1.240057661e-01f, -1.238134177e-01f, -1.236209477e-01f, -1.234283563e-01f, -1.232356439e-01f, -1.230428110e-01f, -1.228498578e-01f, -1.226567847e-01f,
--1.224635922e-01f, -1.222702806e-01f, -1.220768502e-01f, -1.218833014e-01f, -1.216896346e-01f, -1.214958502e-01f, -1.213019485e-01f, -1.211079298e-01f, -1.209137947e-01f, -1.207195434e-01f,
--1.205251762e-01f, -1.203306937e-01f, -1.201360961e-01f, -1.199413838e-01f, -1.197465572e-01f, -1.195516166e-01f, -1.193565624e-01f, -1.191613950e-01f, -1.189661148e-01f, -1.187707221e-01f,
--1.185752173e-01f, -1.183796007e-01f, -1.181838728e-01f, -1.179880339e-01f, -1.177920844e-01f, -1.175960245e-01f, -1.173998548e-01f, -1.172035756e-01f, -1.170071872e-01f, -1.168106900e-01f,
--1.166140845e-01f, -1.164173708e-01f, -1.162205495e-01f, -1.160236209e-01f, -1.158265853e-01f, -1.156294432e-01f, -1.154321948e-01f, -1.152348407e-01f, -1.150373810e-01f, -1.148398163e-01f,
--1.146421468e-01f, -1.144443730e-01f, -1.142464952e-01f, -1.140485138e-01f, -1.138504291e-01f, -1.136522416e-01f, -1.134539515e-01f, -1.132555593e-01f, -1.130570653e-01f, -1.128584700e-01f,
--1.126597735e-01f, -1.124609765e-01f, -1.122620791e-01f, -1.120630818e-01f, -1.118639849e-01f, -1.116647888e-01f, -1.114654940e-01f, -1.112661006e-01f, -1.110666092e-01f, -1.108670201e-01f,
--1.106673336e-01f, -1.104675501e-01f, -1.102676701e-01f, -1.100676937e-01f, -1.098676216e-01f, -1.096674539e-01f, -1.094671911e-01f, -1.092668335e-01f, -1.090663815e-01f, -1.088658355e-01f,
--1.086651958e-01f, -1.084644629e-01f, -1.082636370e-01f, -1.080627186e-01f, -1.078617080e-01f, -1.076606055e-01f, -1.074594117e-01f, -1.072581267e-01f, -1.070567510e-01f, -1.068552850e-01f,
--1.066537291e-01f, -1.064520835e-01f, -1.062503486e-01f, -1.060485249e-01f, -1.058466128e-01f, -1.056446124e-01f, -1.054425243e-01f, -1.052403489e-01f, -1.050380863e-01f, -1.048357372e-01f,
--1.046333017e-01f, -1.044307803e-01f, -1.042281734e-01f, -1.040254812e-01f, -1.038227043e-01f, -1.036198429e-01f, -1.034168974e-01f, -1.032138682e-01f, -1.030107557e-01f, -1.028075601e-01f,
--1.026042820e-01f, -1.024009216e-01f, -1.021974794e-01f, -1.019939556e-01f, -1.017903507e-01f, -1.015866650e-01f, -1.013828989e-01f, -1.011790528e-01f, -1.009751270e-01f, -1.007711219e-01f,
--1.005670379e-01f, -1.003628753e-01f, -1.001586345e-01f, -9.995431581e-02f, -9.974991970e-02f, -9.954544649e-02f, -9.934089655e-02f, -9.913627025e-02f, -9.893156794e-02f, -9.872679000e-02f,
--9.852193680e-02f, -9.831700870e-02f, -9.811200607e-02f, -9.790692927e-02f, -9.770177868e-02f, -9.749655465e-02f, -9.729125757e-02f, -9.708588778e-02f, -9.688044566e-02f, -9.667493158e-02f,
--9.646934590e-02f, -9.626368899e-02f, -9.605796122e-02f, -9.585216294e-02f, -9.564629454e-02f, -9.544035636e-02f, -9.523434879e-02f, -9.502827218e-02f, -9.482212690e-02f, -9.461591333e-02f,
--9.440963181e-02f, -9.420328273e-02f, -9.399686644e-02f, -9.379038331e-02f, -9.358383371e-02f, -9.337721800e-02f, -9.317053654e-02f, -9.296378972e-02f, -9.275697788e-02f, -9.255010139e-02f,
--9.234316063e-02f, -9.213615595e-02f, -9.192908772e-02f, -9.172195630e-02f, -9.151476207e-02f, -9.130750538e-02f, -9.110018660e-02f, -9.089280610e-02f, -9.068536424e-02f, -9.047786138e-02f,
--9.027029789e-02f, -9.006267414e-02f, -8.985499049e-02f, -8.964724729e-02f, -8.943944493e-02f, -8.923158376e-02f, -8.902366414e-02f, -8.881568645e-02f, -8.860765104e-02f, -8.839955828e-02f,
--8.819140853e-02f, -8.798320216e-02f, -8.777493953e-02f, -8.756662100e-02f, -8.735824695e-02f, -8.714981772e-02f, -8.694133369e-02f, -8.673279522e-02f, -8.652420267e-02f, -8.631555641e-02f,
--8.610685680e-02f, -8.589810419e-02f, -8.568929897e-02f, -8.548044148e-02f, -8.527153210e-02f, -8.506257117e-02f, -8.485355908e-02f, -8.464449618e-02f, -8.443538282e-02f, -8.422621939e-02f,
--8.401700623e-02f, -8.380774371e-02f, -8.359843219e-02f, -8.338907204e-02f, -8.317966362e-02f, -8.297020728e-02f, -8.276070340e-02f, -8.255115233e-02f, -8.234155443e-02f, -8.213191007e-02f,
--8.192221961e-02f, -8.171248341e-02f, -8.150270183e-02f, -8.129287523e-02f, -8.108300398e-02f, -8.087308843e-02f, -8.066312895e-02f, -8.045312590e-02f, -8.024307963e-02f, -8.003299052e-02f,
--7.982285891e-02f, -7.961268518e-02f, -7.940246968e-02f, -7.919221277e-02f, -7.898191481e-02f, -7.877157617e-02f, -7.856119719e-02f, -7.835077826e-02f, -7.814031971e-02f, -7.792982192e-02f,
--7.771928525e-02f, -7.750871004e-02f, -7.729809667e-02f, -7.708744549e-02f, -7.687675687e-02f, -7.666603115e-02f, -7.645526871e-02f, -7.624446990e-02f, -7.603363507e-02f, -7.582276459e-02f,
--7.561185882e-02f, -7.540091812e-02f, -7.518994284e-02f, -7.497893334e-02f, -7.476788999e-02f, -7.455681314e-02f, -7.434570314e-02f, -7.413456036e-02f, -7.392338516e-02f, -7.371217788e-02f,
--7.350093890e-02f, -7.328966857e-02f, -7.307836724e-02f, -7.286703528e-02f, -7.265567304e-02f, -7.244428088e-02f, -7.223285915e-02f, -7.202140822e-02f, -7.180992843e-02f, -7.159842015e-02f,
--7.138688374e-02f, -7.117531955e-02f, -7.096372794e-02f, -7.075210925e-02f, -7.054046386e-02f, -7.032879212e-02f, -7.011709438e-02f, -6.990537099e-02f, -6.969362233e-02f, -6.948184873e-02f,
--6.927005056e-02f, -6.905822817e-02f, -6.884638192e-02f, -6.863451216e-02f, -6.842261925e-02f, -6.821070354e-02f, -6.799876539e-02f, -6.778680516e-02f, -6.757482319e-02f, -6.736281984e-02f,
--6.715079548e-02f, -6.693875044e-02f, -6.672668509e-02f, -6.651459978e-02f, -6.630249487e-02f, -6.609037070e-02f, -6.587822764e-02f, -6.566606603e-02f, -6.545388624e-02f, -6.524168860e-02f,
--6.502947349e-02f, -6.481724124e-02f, -6.460499221e-02f, -6.439272677e-02f, -6.418044525e-02f, -6.396814801e-02f, -6.375583541e-02f, -6.354350779e-02f, -6.333116552e-02f, -6.311880893e-02f,
--6.290643839e-02f, -6.269405424e-02f, -6.248165685e-02f, -6.226924655e-02f, -6.205682370e-02f, -6.184438866e-02f, -6.163194177e-02f, -6.141948338e-02f, -6.120701385e-02f, -6.099453353e-02f,
--6.078204277e-02f, -6.056954191e-02f, -6.035703132e-02f, -6.014451133e-02f, -5.993198231e-02f, -5.971944459e-02f, -5.950689854e-02f, -5.929434449e-02f, -5.908178281e-02f, -5.886921383e-02f,
--5.865663792e-02f, -5.844405541e-02f, -5.823146667e-02f, -5.801887203e-02f, -5.780627184e-02f, -5.759366646e-02f, -5.738105624e-02f, -5.716844151e-02f, -5.695582264e-02f, -5.674319996e-02f,
--5.653057384e-02f, -5.631794460e-02f, -5.610531261e-02f, -5.589267822e-02f, -5.568004176e-02f, -5.546740358e-02f, -5.525476404e-02f, -5.504212348e-02f, -5.482948224e-02f, -5.461684068e-02f,
--5.440419914e-02f, -5.419155797e-02f, -5.397891751e-02f, -5.376627811e-02f, -5.355364011e-02f, -5.334100387e-02f, -5.312836973e-02f, -5.291573803e-02f, -5.270310912e-02f, -5.249048334e-02f,
--5.227786104e-02f, -5.206524257e-02f, -5.185262827e-02f, -5.164001848e-02f, -5.142741356e-02f, -5.121481383e-02f, -5.100221966e-02f, -5.078963137e-02f, -5.057704932e-02f, -5.036447386e-02f,
--5.015190532e-02f, -4.993934404e-02f, -4.972679038e-02f, -4.951424467e-02f, -4.930170725e-02f, -4.908917848e-02f, -4.887665869e-02f, -4.866414823e-02f, -4.845164744e-02f, -4.823915665e-02f,
--4.802667622e-02f, -4.781420649e-02f, -4.760174779e-02f, -4.738930047e-02f, -4.717686487e-02f, -4.696444133e-02f, -4.675203019e-02f, -4.653963180e-02f, -4.632724649e-02f, -4.611487461e-02f,
--4.590251650e-02f, -4.569017249e-02f, -4.547784293e-02f, -4.526552815e-02f, -4.505322850e-02f, -4.484094432e-02f, -4.462867594e-02f, -4.441642371e-02f, -4.420418797e-02f, -4.399196905e-02f,
--4.377976729e-02f, -4.356758303e-02f, -4.335541662e-02f, -4.314326838e-02f, -4.293113866e-02f, -4.271902780e-02f, -4.250693612e-02f, -4.229486398e-02f, -4.208281171e-02f, -4.187077965e-02f,
--4.165876812e-02f, -4.144677748e-02f, -4.123480806e-02f, -4.102286019e-02f, -4.081093421e-02f, -4.059903045e-02f, -4.038714926e-02f, -4.017529097e-02f, -3.996345592e-02f, -3.975164444e-02f,
--3.953985686e-02f, -3.932809352e-02f, -3.911635477e-02f, -3.890464092e-02f, -3.869295232e-02f, -3.848128930e-02f, -3.826965220e-02f, -3.805804135e-02f, -3.784645709e-02f, -3.763489974e-02f,
--3.742336964e-02f, -3.721186713e-02f, -3.700039254e-02f, -3.678894621e-02f, -3.657752846e-02f, -3.636613962e-02f, -3.615478004e-02f, -3.594345004e-02f, -3.573214996e-02f, -3.552088013e-02f,
--3.530964088e-02f, -3.509843254e-02f, -3.488725544e-02f, -3.467610992e-02f, -3.446499630e-02f, -3.425391492e-02f, -3.404286611e-02f, -3.383185020e-02f, -3.362086752e-02f, -3.340991840e-02f,
--3.319900317e-02f, -3.298812215e-02f, -3.277727569e-02f, -3.256646411e-02f, -3.235568773e-02f, -3.214494690e-02f, -3.193424193e-02f, -3.172357315e-02f, -3.151294090e-02f, -3.130234550e-02f,
--3.109178728e-02f, -3.088126658e-02f, -3.067078370e-02f, -3.046033900e-02f, -3.024993278e-02f, -3.003956538e-02f, -2.982923713e-02f, -2.961894836e-02f, -2.940869938e-02f, -2.919849053e-02f,
--2.898832213e-02f, -2.877819451e-02f, -2.856810799e-02f, -2.835806291e-02f, -2.814805958e-02f, -2.793809833e-02f, -2.772817949e-02f, -2.751830338e-02f, -2.730847033e-02f, -2.709868065e-02f,
--2.688893469e-02f, -2.667923275e-02f, -2.646957516e-02f, -2.625996225e-02f, -2.605039434e-02f, -2.584087176e-02f, -2.563139482e-02f, -2.542196385e-02f, -2.521257917e-02f, -2.500324111e-02f,
--2.479394998e-02f, -2.458470612e-02f, -2.437550984e-02f, -2.416636146e-02f, -2.395726130e-02f, -2.374820969e-02f, -2.353920695e-02f, -2.333025339e-02f, -2.312134935e-02f, -2.291249513e-02f,
--2.270369106e-02f, -2.249493746e-02f, -2.228623465e-02f, -2.207758295e-02f, -2.186898268e-02f, -2.166043416e-02f, -2.145193770e-02f, -2.124349363e-02f, -2.103510226e-02f, -2.082676392e-02f,
--2.061847892e-02f, -2.041024757e-02f, -2.020207020e-02f, -1.999394713e-02f, -1.978587867e-02f, -1.957786513e-02f, -1.936990685e-02f, -1.916200412e-02f, -1.895415727e-02f, -1.874636662e-02f,
--1.853863248e-02f, -1.833095517e-02f, -1.812333500e-02f, -1.791577229e-02f, -1.770826735e-02f, -1.750082050e-02f, -1.729343205e-02f, -1.708610232e-02f, -1.687883162e-02f, -1.667162027e-02f,
--1.646446858e-02f, -1.625737686e-02f, -1.605034543e-02f, -1.584337460e-02f, -1.563646468e-02f, -1.542961599e-02f, -1.522282884e-02f, -1.501610354e-02f, -1.480944040e-02f, -1.460283974e-02f,
--1.439630187e-02f, -1.418982709e-02f, -1.398341573e-02f, -1.377706808e-02f, -1.357078447e-02f, -1.336456520e-02f, -1.315841058e-02f, -1.295232093e-02f, -1.274629654e-02f, -1.254033775e-02f,
--1.233444484e-02f, -1.212861813e-02f, -1.192285794e-02f, -1.171716456e-02f, -1.151153831e-02f, -1.130597950e-02f, -1.110048843e-02f, -1.089506541e-02f, -1.068971075e-02f, -1.048442476e-02f,
--1.027920775e-02f, -1.007406001e-02f, -9.868981867e-03f, -9.663973615e-03f, -9.459035564e-03f, -9.254168019e-03f, -9.049371287e-03f, -8.844645674e-03f, -8.639991484e-03f, -8.435409022e-03f,
--8.230898595e-03f, -8.026460505e-03f, -7.822095059e-03f, -7.617802559e-03f, -7.413583310e-03f, -7.209437616e-03f, -7.005365780e-03f, -6.801368105e-03f, -6.597444894e-03f, -6.393596451e-03f,
--6.189823077e-03f, -5.986125075e-03f, -5.782502747e-03f, -5.578956395e-03f, -5.375486321e-03f, -5.172092825e-03f, -4.968776209e-03f, -4.765536774e-03f, -4.562374821e-03f, -4.359290649e-03f,
--4.156284560e-03f, -3.953356852e-03f, -3.750507827e-03f, -3.547737782e-03f, -3.345047017e-03f, -3.142435832e-03f, -2.939904524e-03f, -2.737453394e-03f, -2.535082737e-03f, -2.332792854e-03f,
--2.130584040e-03f, -1.928456595e-03f, -1.726410815e-03f, -1.524446997e-03f, -1.322565438e-03f, -1.120766434e-03f, -9.190502822e-04f, -7.174172781e-04f, -5.158677175e-04f, -3.144018961e-04f,
--1.130201090e-04f, 8.827734866e-05f, 2.894901821e-04f, 4.906180967e-04f, 6.916607982e-04f, 8.926179926e-04f, 1.093489386e-03f, 1.294274685e-03f, 1.494973596e-03f, 1.695585826e-03f,
-1.896111083e-03f, 2.096549073e-03f, 2.296899505e-03f, 2.497162086e-03f, 2.697336525e-03f, 2.897422530e-03f, 3.097419810e-03f, 3.297328073e-03f, 3.497147029e-03f, 3.696876388e-03f,
-3.896515859e-03f, 4.096065151e-03f, 4.295523976e-03f, 4.494892044e-03f, 4.694169066e-03f, 4.893354751e-03f, 5.092448813e-03f, 5.291450961e-03f, 5.490360909e-03f, 5.689178368e-03f,
-5.887903049e-03f, 6.086534667e-03f, 6.285072933e-03f, 6.483517561e-03f, 6.681868263e-03f, 6.880124754e-03f, 7.078286747e-03f, 7.276353957e-03f, 7.474326097e-03f, 7.672202883e-03f,
-7.869984028e-03f, 8.067669249e-03f, 8.265258260e-03f, 8.462750778e-03f, 8.660146518e-03f, 8.857445196e-03f, 9.054646528e-03f, 9.251750232e-03f, 9.448756025e-03f, 9.645663623e-03f,
-9.842472744e-03f, 1.003918311e-02f, 1.023579443e-02f, 1.043230642e-02f, 1.062871882e-02f, 1.082503132e-02f, 1.102124366e-02f, 1.121735556e-02f, 1.141336672e-02f, 1.160927688e-02f,
-1.180508575e-02f, 1.200079305e-02f, 1.219639851e-02f, 1.239190184e-02f, 1.258730277e-02f, 1.278260101e-02f, 1.297779629e-02f, 1.317288833e-02f, 1.336787686e-02f, 1.356276159e-02f,
-1.375754225e-02f, 1.395221856e-02f, 1.414679024e-02f, 1.434125703e-02f, 1.453561863e-02f, 1.472987478e-02f, 1.492402521e-02f, 1.511806962e-02f, 1.531200776e-02f, 1.550583935e-02f,
-1.569956410e-02f, 1.589318175e-02f, 1.608669203e-02f, 1.628009465e-02f, 1.647338936e-02f, 1.666657586e-02f, 1.685965389e-02f, 1.705262318e-02f, 1.724548346e-02f, 1.743823445e-02f,
-1.763087588e-02f, 1.782340748e-02f, 1.801582898e-02f, 1.820814011e-02f, 1.840034060e-02f, 1.859243017e-02f, 1.878440856e-02f, 1.897627550e-02f, 1.916803071e-02f, 1.935967393e-02f,
-1.955120490e-02f, 1.974262333e-02f, 1.993392896e-02f, 2.012512153e-02f, 2.031620077e-02f, 2.050716640e-02f, 2.069801817e-02f, 2.088875580e-02f, 2.107937903e-02f, 2.126988759e-02f,
-2.146028121e-02f, 2.165055964e-02f, 2.184072259e-02f, 2.203076982e-02f, 2.222070105e-02f, 2.241051602e-02f, 2.260021446e-02f, 2.278979611e-02f, 2.297926071e-02f, 2.316860799e-02f,
-2.335783769e-02f, 2.354694955e-02f, 2.373594330e-02f, 2.392481868e-02f, 2.411357543e-02f, 2.430221329e-02f, 2.449073199e-02f, 2.467913128e-02f, 2.486741089e-02f, 2.505557056e-02f,
-2.524361003e-02f, 2.543152904e-02f, 2.561932734e-02f, 2.580700466e-02f, 2.599456074e-02f, 2.618199533e-02f, 2.636930816e-02f, 2.655649897e-02f, 2.674356752e-02f, 2.693051353e-02f,
-2.711733676e-02f, 2.730403695e-02f, 2.749061383e-02f, 2.767706715e-02f, 2.786339667e-02f, 2.804960211e-02f, 2.823568322e-02f, 2.842163975e-02f, 2.860747145e-02f, 2.879317805e-02f,
-2.897875931e-02f, 2.916421497e-02f, 2.934954477e-02f, 2.953474846e-02f, 2.971982579e-02f, 2.990477651e-02f, 3.008960035e-02f, 3.027429708e-02f, 3.045886643e-02f, 3.064330816e-02f,
-3.082762201e-02f, 3.101180773e-02f, 3.119586507e-02f, 3.137979379e-02f, 3.156359362e-02f, 3.174726432e-02f, 3.193080564e-02f, 3.211421733e-02f, 3.229749914e-02f, 3.248065082e-02f,
-3.266367213e-02f, 3.284656280e-02f, 3.302932261e-02f, 3.321195129e-02f, 3.339444860e-02f, 3.357681430e-02f, 3.375904813e-02f, 3.394114985e-02f, 3.412311922e-02f, 3.430495598e-02f,
-3.448665989e-02f, 3.466823072e-02f, 3.484966820e-02f, 3.503097210e-02f, 3.521214217e-02f, 3.539317816e-02f, 3.557407985e-02f, 3.575484697e-02f, 3.593547929e-02f, 3.611597656e-02f,
-3.629633854e-02f, 3.647656499e-02f, 3.665665567e-02f, 3.683661033e-02f, 3.701642874e-02f, 3.719611065e-02f, 3.737565582e-02f, 3.755506401e-02f, 3.773433498e-02f, 3.791346849e-02f,
-3.809246431e-02f, 3.827132218e-02f, 3.845004188e-02f, 3.862862316e-02f, 3.880706578e-02f, 3.898536951e-02f, 3.916353412e-02f, 3.934155935e-02f, 3.951944498e-02f, 3.969719076e-02f,
-3.987479647e-02f, 4.005226186e-02f, 4.022958671e-02f, 4.040677076e-02f, 4.058381379e-02f, 4.076071557e-02f, 4.093747585e-02f, 4.111409441e-02f, 4.129057101e-02f, 4.146690542e-02f,
-4.164309739e-02f, 4.181914671e-02f, 4.199505313e-02f, 4.217081643e-02f, 4.234643637e-02f, 4.252191272e-02f, 4.269724524e-02f, 4.287243372e-02f, 4.304747791e-02f, 4.322237758e-02f,
-4.339713251e-02f, 4.357174247e-02f, 4.374620722e-02f, 4.392052653e-02f, 4.409470019e-02f, 4.426872795e-02f, 4.444260959e-02f, 4.461634488e-02f, 4.478993360e-02f, 4.496337551e-02f,
-4.513667039e-02f, 4.530981801e-02f, 4.548281815e-02f, 4.565567058e-02f, 4.582837507e-02f, 4.600093140e-02f, 4.617333934e-02f, 4.634559867e-02f, 4.651770916e-02f, 4.668967059e-02f,
-4.686148273e-02f, 4.703314536e-02f, 4.720465827e-02f, 4.737602121e-02f, 4.754723398e-02f, 4.771829634e-02f, 4.788920809e-02f, 4.805996898e-02f, 4.823057882e-02f, 4.840103736e-02f,
-4.857134439e-02f, 4.874149970e-02f, 4.891150306e-02f, 4.908135425e-02f, 4.925105305e-02f, 4.942059924e-02f, 4.958999261e-02f, 4.975923293e-02f, 4.992831998e-02f, 5.009725356e-02f,
-5.026603343e-02f, 5.043465939e-02f, 5.060313122e-02f, 5.077144870e-02f, 5.093961161e-02f, 5.110761974e-02f, 5.127547287e-02f, 5.144317078e-02f, 5.161071327e-02f, 5.177810012e-02f,
-5.194533111e-02f, 5.211240602e-02f, 5.227932466e-02f, 5.244608679e-02f, 5.261269221e-02f, 5.277914071e-02f, 5.294543207e-02f, 5.311156608e-02f, 5.327754253e-02f, 5.344336121e-02f,
-5.360902190e-02f, 5.377452440e-02f, 5.393986850e-02f, 5.410505398e-02f, 5.427008064e-02f, 5.443494826e-02f, 5.459965664e-02f, 5.476420557e-02f, 5.492859484e-02f, 5.509282424e-02f,
-5.525689356e-02f, 5.542080260e-02f, 5.558455114e-02f, 5.574813899e-02f, 5.591156594e-02f, 5.607483177e-02f, 5.623793629e-02f, 5.640087928e-02f, 5.656366055e-02f, 5.672627989e-02f,
-5.688873708e-02f, 5.705103194e-02f, 5.721316425e-02f, 5.737513382e-02f, 5.753694043e-02f, 5.769858389e-02f, 5.786006399e-02f, 5.802138053e-02f, 5.818253331e-02f, 5.834352213e-02f,
-5.850434678e-02f, 5.866500707e-02f, 5.882550279e-02f, 5.898583375e-02f, 5.914599974e-02f, 5.930600057e-02f, 5.946583603e-02f, 5.962550593e-02f, 5.978501007e-02f, 5.994434824e-02f,
-6.010352026e-02f, 6.026252593e-02f, 6.042136504e-02f, 6.058003740e-02f, 6.073854281e-02f, 6.089688109e-02f, 6.105505202e-02f, 6.121305542e-02f, 6.137089109e-02f, 6.152855884e-02f,
-6.168605847e-02f, 6.184338979e-02f, 6.200055260e-02f, 6.215754671e-02f, 6.231437192e-02f, 6.247102806e-02f, 6.262751491e-02f, 6.278383229e-02f, 6.293998001e-02f, 6.309595787e-02f,
-6.325176569e-02f, 6.340740328e-02f, 6.356287043e-02f, 6.371816697e-02f, 6.387329271e-02f, 6.402824745e-02f, 6.418303100e-02f, 6.433764318e-02f, 6.449208380e-02f, 6.464635266e-02f,
-6.480044959e-02f, 6.495437439e-02f, 6.510812688e-02f, 6.526170687e-02f, 6.541511417e-02f, 6.556834861e-02f, 6.572140998e-02f, 6.587429811e-02f, 6.602701281e-02f, 6.617955391e-02f,
-6.633192120e-02f, 6.648411451e-02f, 6.663613366e-02f, 6.678797845e-02f, 6.693964872e-02f, 6.709114427e-02f, 6.724246493e-02f, 6.739361051e-02f, 6.754458083e-02f, 6.769537570e-02f,
-6.784599496e-02f, 6.799643841e-02f, 6.814670588e-02f, 6.829679719e-02f, 6.844671215e-02f, 6.859645060e-02f, 6.874601234e-02f, 6.889539720e-02f, 6.904460501e-02f, 6.919363558e-02f,
-6.934248873e-02f, 6.949116430e-02f, 6.963966210e-02f, 6.978798196e-02f, 6.993612370e-02f, 7.008408714e-02f, 7.023187212e-02f, 7.037947844e-02f, 7.052690595e-02f, 7.067415446e-02f,
-7.082122381e-02f, 7.096811381e-02f, 7.111482429e-02f, 7.126135509e-02f, 7.140770603e-02f, 7.155387693e-02f, 7.169986762e-02f, 7.184567794e-02f, 7.199130771e-02f, 7.213675676e-02f,
-7.228202492e-02f, 7.242711202e-02f, 7.257201789e-02f, 7.271674236e-02f, 7.286128526e-02f, 7.300564642e-02f, 7.314982568e-02f, 7.329382286e-02f, 7.343763780e-02f, 7.358127033e-02f,
-7.372472028e-02f, 7.386798749e-02f, 7.401107178e-02f, 7.415397301e-02f, 7.429669099e-02f, 7.443922556e-02f, 7.458157656e-02f, 7.472374382e-02f, 7.486572719e-02f, 7.500752648e-02f,
-7.514914155e-02f, 7.529057223e-02f, 7.543181835e-02f, 7.557287975e-02f, 7.571375628e-02f, 7.585444776e-02f, 7.599495404e-02f, 7.613527496e-02f, 7.627541035e-02f, 7.641536005e-02f,
-7.655512391e-02f, 7.669470177e-02f, 7.683409346e-02f, 7.697329882e-02f, 7.711231771e-02f, 7.725114995e-02f, 7.738979539e-02f, 7.752825388e-02f, 7.766652526e-02f, 7.780460936e-02f,
-7.794250604e-02f, 7.808021513e-02f, 7.821773648e-02f, 7.835506994e-02f, 7.849221535e-02f, 7.862917255e-02f, 7.876594140e-02f, 7.890252173e-02f, 7.903891339e-02f, 7.917511624e-02f,
-7.931113011e-02f, 7.944695485e-02f, 7.958259032e-02f, 7.971803635e-02f, 7.985329281e-02f, 7.998835952e-02f, 8.012323636e-02f, 8.025792316e-02f, 8.039241977e-02f, 8.052672605e-02f,
-8.066084185e-02f, 8.079476701e-02f, 8.092850139e-02f, 8.106204484e-02f, 8.119539721e-02f, 8.132855835e-02f, 8.146152812e-02f, 8.159430636e-02f, 8.172689294e-02f, 8.185928771e-02f,
-8.199149051e-02f, 8.212350121e-02f, 8.225531966e-02f, 8.238694571e-02f, 8.251837923e-02f, 8.264962006e-02f, 8.278066806e-02f, 8.291152308e-02f, 8.304218500e-02f, 8.317265365e-02f,
-8.330292891e-02f, 8.343301063e-02f, 8.356289866e-02f, 8.369259286e-02f, 8.382209310e-02f, 8.395139924e-02f, 8.408051112e-02f, 8.420942862e-02f, 8.433815160e-02f, 8.446667991e-02f,
-8.459501341e-02f, 8.472315198e-02f, 8.485109546e-02f, 8.497884372e-02f, 8.510639663e-02f, 8.523375404e-02f, 8.536091583e-02f, 8.548788185e-02f, 8.561465197e-02f, 8.574122605e-02f,
-8.586760396e-02f, 8.599378556e-02f, 8.611977072e-02f, 8.624555931e-02f, 8.637115118e-02f, 8.649654621e-02f, 8.662174427e-02f, 8.674674521e-02f, 8.687154892e-02f, 8.699615525e-02f,
-8.712056407e-02f, 8.724477526e-02f, 8.736878869e-02f, 8.749260421e-02f, 8.761622171e-02f, 8.773964105e-02f, 8.786286210e-02f, 8.798588474e-02f, 8.810870883e-02f, 8.823133425e-02f,
-8.835376087e-02f, 8.847598856e-02f, 8.859801719e-02f, 8.871984664e-02f, 8.884147677e-02f, 8.896290748e-02f, 8.908413862e-02f, 8.920517007e-02f, 8.932600171e-02f, 8.944663341e-02f,
-8.956706505e-02f, 8.968729651e-02f, 8.980732765e-02f, 8.992715836e-02f, 9.004678852e-02f, 9.016621800e-02f, 9.028544667e-02f, 9.040447443e-02f, 9.052330114e-02f, 9.064192668e-02f,
-9.076035094e-02f, 9.087857379e-02f, 9.099659512e-02f, 9.111441480e-02f, 9.123203271e-02f, 9.134944874e-02f, 9.146666276e-02f, 9.158367466e-02f, 9.170048433e-02f, 9.181709163e-02f,
-9.193349646e-02f, 9.204969870e-02f, 9.216569824e-02f, 9.228149494e-02f, 9.239708871e-02f, 9.251247943e-02f, 9.262766697e-02f, 9.274265123e-02f, 9.285743209e-02f, 9.297200944e-02f,
-9.308638316e-02f, 9.320055315e-02f, 9.331451928e-02f, 9.342828144e-02f, 9.354183953e-02f, 9.365519343e-02f, 9.376834303e-02f, 9.388128822e-02f, 9.399402889e-02f, 9.410656493e-02f,
-9.421889622e-02f, 9.433102266e-02f, 9.444294414e-02f, 9.455466056e-02f, 9.466617179e-02f, 9.477747774e-02f, 9.488857830e-02f, 9.499947335e-02f, 9.511016279e-02f, 9.522064652e-02f,
-9.533092443e-02f, 9.544099642e-02f, 9.555086237e-02f, 9.566052218e-02f, 9.576997575e-02f, 9.587922297e-02f, 9.598826374e-02f, 9.609709796e-02f, 9.620572552e-02f, 9.631414631e-02f,
-9.642236025e-02f, 9.653036721e-02f, 9.663816711e-02f, 9.674575984e-02f, 9.685314530e-02f, 9.696032339e-02f, 9.706729400e-02f, 9.717405704e-02f, 9.728061241e-02f, 9.738696001e-02f,
-9.749309974e-02f, 9.759903150e-02f, 9.770475519e-02f, 9.781027072e-02f, 9.791557798e-02f, 9.802067689e-02f, 9.812556734e-02f, 9.823024923e-02f, 9.833472248e-02f, 9.843898698e-02f,
-9.854304264e-02f, 9.864688936e-02f, 9.875052706e-02f, 9.885395563e-02f, 9.895717498e-02f, 9.906018503e-02f, 9.916298566e-02f, 9.926557680e-02f, 9.936795835e-02f, 9.947013022e-02f,
-9.957209232e-02f, 9.967384455e-02f, 9.977538682e-02f, 9.987671905e-02f, 9.997784114e-02f, 1.000787530e-01f, 1.001794545e-01f, 1.002799457e-01f, 1.003802263e-01f, 1.004802964e-01f,
-1.005801558e-01f, 1.006798044e-01f, 1.007792422e-01f, 1.008784691e-01f, 1.009774849e-01f, 1.010762897e-01f, 1.011748832e-01f, 1.012732655e-01f, 1.013714364e-01f, 1.014693958e-01f,
-1.015671438e-01f, 1.016646801e-01f, 1.017620047e-01f, 1.018591175e-01f, 1.019560185e-01f, 1.020527075e-01f, 1.021491845e-01f, 1.022454494e-01f, 1.023415021e-01f, 1.024373425e-01f,
-1.025329705e-01f, 1.026283862e-01f, 1.027235893e-01f, 1.028185798e-01f, 1.029133576e-01f, 1.030079227e-01f, 1.031022750e-01f, 1.031964143e-01f, 1.032903407e-01f, 1.033840540e-01f,
-1.034775541e-01f, 1.035708411e-01f, 1.036639147e-01f, 1.037567750e-01f, 1.038494218e-01f, 1.039418551e-01f, 1.040340748e-01f, 1.041260808e-01f, 1.042178731e-01f, 1.043094516e-01f,
-1.044008162e-01f, 1.044919668e-01f, 1.045829033e-01f, 1.046736258e-01f, 1.047641341e-01f, 1.048544281e-01f, 1.049445078e-01f, 1.050343731e-01f, 1.051240240e-01f, 1.052134603e-01f,
-1.053026819e-01f, 1.053916890e-01f, 1.054804812e-01f, 1.055690587e-01f, 1.056574213e-01f, 1.057455689e-01f, 1.058335015e-01f, 1.059212190e-01f, 1.060087214e-01f, 1.060960086e-01f,
-1.061830804e-01f, 1.062699370e-01f, 1.063565781e-01f, 1.064430037e-01f, 1.065292138e-01f, 1.066152083e-01f, 1.067009871e-01f, 1.067865501e-01f, 1.068718974e-01f, 1.069570288e-01f,
-1.070419443e-01f, 1.071266438e-01f, 1.072111272e-01f, 1.072953945e-01f, 1.073794457e-01f, 1.074632806e-01f, 1.075468993e-01f, 1.076303016e-01f, 1.077134874e-01f, 1.077964568e-01f,
-1.078792097e-01f, 1.079617460e-01f, 1.080440656e-01f, 1.081261686e-01f, 1.082080548e-01f, 1.082897241e-01f, 1.083711766e-01f, 1.084524121e-01f, 1.085334307e-01f, 1.086142322e-01f,
-1.086948167e-01f, 1.087751839e-01f, 1.088553340e-01f, 1.089352668e-01f, 1.090149823e-01f, 1.090944804e-01f, 1.091737611e-01f, 1.092528244e-01f, 1.093316701e-01f, 1.094102982e-01f,
-1.094887087e-01f, 1.095669015e-01f, 1.096448766e-01f, 1.097226339e-01f, 1.098001734e-01f, 1.098774950e-01f, 1.099545987e-01f, 1.100314844e-01f, 1.101081520e-01f, 1.101846016e-01f,
-1.102608331e-01f, 1.103368464e-01f, 1.104126415e-01f, 1.104882183e-01f, 1.105635768e-01f, 1.106387169e-01f, 1.107136386e-01f, 1.107883419e-01f, 1.108628267e-01f, 1.109370930e-01f,
-1.110111406e-01f, 1.110849697e-01f, 1.111585801e-01f, 1.112319717e-01f, 1.113051446e-01f, 1.113780987e-01f, 1.114508340e-01f, 1.115233504e-01f, 1.115956479e-01f, 1.116677264e-01f,
-1.117395859e-01f, 1.118112263e-01f, 1.118826477e-01f, 1.119538499e-01f, 1.120248330e-01f, 1.120955969e-01f, 1.121661415e-01f, 1.122364669e-01f, 1.123065729e-01f, 1.123764596e-01f,
-1.124461269e-01f, 1.125155748e-01f, 1.125848032e-01f, 1.126538121e-01f, 1.127226015e-01f, 1.127911713e-01f, 1.128595215e-01f, 1.129276520e-01f, 1.129955629e-01f, 1.130632541e-01f,
-1.131307256e-01f, 1.131979772e-01f, 1.132650091e-01f, 1.133318211e-01f, 1.133984133e-01f, 1.134647855e-01f, 1.135309378e-01f, 1.135968702e-01f, 1.136625826e-01f, 1.137280749e-01f,
-1.137933472e-01f, 1.138583994e-01f, 1.139232315e-01f, 1.139878434e-01f, 1.140522352e-01f, 1.141164068e-01f, 1.141803581e-01f, 1.142440892e-01f, 1.143076001e-01f, 1.143708906e-01f,
-1.144339608e-01f, 1.144968106e-01f, 1.145594401e-01f, 1.146218491e-01f, 1.146840377e-01f, 1.147460059e-01f, 1.148077536e-01f, 1.148692807e-01f, 1.149305874e-01f, 1.149916735e-01f,
-1.150525390e-01f, 1.151131839e-01f, 1.151736083e-01f, 1.152338119e-01f, 1.152937949e-01f, 1.153535573e-01f, 1.154130989e-01f, 1.154724198e-01f, 1.155315200e-01f, 1.155903994e-01f,
-1.156490581e-01f, 1.157074959e-01f, 1.157657129e-01f, 1.158237091e-01f, 1.158814845e-01f, 1.159390390e-01f, 1.159963726e-01f, 1.160534853e-01f, 1.161103770e-01f, 1.161670479e-01f,
-1.162234978e-01f, 1.162797267e-01f, 1.163357347e-01f, 1.163915217e-01f, 1.164470876e-01f, 1.165024326e-01f, 1.165575565e-01f, 1.166124593e-01f, 1.166671412e-01f, 1.167216019e-01f,
-1.167758416e-01f, 1.168298601e-01f, 1.168836576e-01f, 1.169372340e-01f, 1.169905892e-01f, 1.170437233e-01f, 1.170966362e-01f, 1.171493280e-01f, 1.172017987e-01f, 1.172540481e-01f,
-1.173060764e-01f, 1.173578835e-01f, 1.174094694e-01f, 1.174608341e-01f, 1.175119776e-01f, 1.175628999e-01f, 1.176136009e-01f, 1.176640808e-01f, 1.177143394e-01f, 1.177643767e-01f,
-1.178141929e-01f, 1.178637877e-01f, 1.179131614e-01f, 1.179623137e-01f, 1.180112449e-01f, 1.180599547e-01f, 1.181084433e-01f, 1.181567107e-01f, 1.182047567e-01f, 1.182525815e-01f,
-1.183001851e-01f, 1.183475673e-01f, 1.183947283e-01f, 1.184416680e-01f, 1.184883865e-01f, 1.185348837e-01f, 1.185811596e-01f, 1.186272143e-01f, 1.186730477e-01f, 1.187186598e-01f,
-1.187640507e-01f, 1.188092203e-01f, 1.188541686e-01f, 1.188988957e-01f, 1.189434016e-01f, 1.189876862e-01f, 1.190317496e-01f, 1.190755918e-01f, 1.191192127e-01f, 1.191626124e-01f,
-1.192057909e-01f, 1.192487482e-01f, 1.192914842e-01f, 1.193339991e-01f, 1.193762928e-01f, 1.194183653e-01f, 1.194602166e-01f, 1.195018468e-01f, 1.195432558e-01f, 1.195844437e-01f,
-1.196254105e-01f, 1.196661561e-01f, 1.197066806e-01f, 1.197469839e-01f, 1.197870662e-01f, 1.198269274e-01f, 1.198665676e-01f, 1.199059867e-01f, 1.199451847e-01f, 1.199841617e-01f,
-1.200229176e-01f, 1.200614526e-01f, 1.200997666e-01f, 1.201378595e-01f, 1.201757316e-01f, 1.202133826e-01f, 1.202508128e-01f, 1.202880220e-01f, 1.203250103e-01f, 1.203617777e-01f,
-1.203983242e-01f, 1.204346499e-01f, 1.204707547e-01f, 1.205066387e-01f, 1.205423019e-01f, 1.205777444e-01f, 1.206129660e-01f, 1.206479669e-01f, 1.206827471e-01f, 1.207173066e-01f,
-1.207516454e-01f, 1.207857635e-01f, 1.208196610e-01f, 1.208533378e-01f, 1.208867940e-01f, 1.209200297e-01f, 1.209530448e-01f, 1.209858393e-01f, 1.210184133e-01f, 1.210507669e-01f,
-1.210828999e-01f, 1.211148125e-01f, 1.211465047e-01f, 1.211779765e-01f, 1.212092279e-01f, 1.212402590e-01f, 1.212710698e-01f, 1.213016602e-01f, 1.213320304e-01f, 1.213621803e-01f,
-1.213921100e-01f, 1.214218195e-01f, 1.214513089e-01f, 1.214805781e-01f, 1.215096272e-01f, 1.215384563e-01f, 1.215670653e-01f, 1.215954542e-01f, 1.216236232e-01f, 1.216515722e-01f,
-1.216793013e-01f, 1.217068105e-01f, 1.217340998e-01f, 1.217611693e-01f, 1.217880190e-01f, 1.218146489e-01f, 1.218410590e-01f, 1.218672495e-01f, 1.218932202e-01f, 1.219189714e-01f,
-1.219445029e-01f, 1.219698148e-01f, 1.219949072e-01f, 1.220197801e-01f, 1.220444336e-01f, 1.220688676e-01f, 1.220930822e-01f, 1.221170774e-01f, 1.221408533e-01f, 1.221644099e-01f,
-1.221877473e-01f, 1.222108654e-01f, 1.222337644e-01f, 1.222564442e-01f, 1.222789049e-01f, 1.223011466e-01f, 1.223231692e-01f, 1.223449729e-01f, 1.223665576e-01f, 1.223879234e-01f,
-1.224090703e-01f, 1.224299984e-01f, 1.224507078e-01f, 1.224711984e-01f, 1.224914703e-01f, 1.225115235e-01f, 1.225313581e-01f, 1.225509742e-01f, 1.225703717e-01f, 1.225895508e-01f,
-1.226085114e-01f, 1.226272536e-01f, 1.226457774e-01f, 1.226640830e-01f, 1.226821703e-01f, 1.227000394e-01f, 1.227176903e-01f, 1.227351230e-01f, 1.227523377e-01f, 1.227693344e-01f,
-1.227861131e-01f, 1.228026739e-01f, 1.228190167e-01f, 1.228351418e-01f, 1.228510490e-01f, 1.228667385e-01f, 1.228822103e-01f, 1.228974644e-01f, 1.229125010e-01f, 1.229273200e-01f,
-1.229419215e-01f, 1.229563056e-01f, 1.229704723e-01f, 1.229844217e-01f, 1.229981537e-01f, 1.230116686e-01f, 1.230249662e-01f, 1.230380467e-01f, 1.230509102e-01f, 1.230635566e-01f,
-1.230759860e-01f, 1.230881986e-01f, 1.231001942e-01f, 1.231119731e-01f, 1.231235352e-01f, 1.231348807e-01f, 1.231460094e-01f, 1.231569216e-01f, 1.231676173e-01f, 1.231780965e-01f,
-1.231883593e-01f, 1.231984057e-01f, 1.232082359e-01f, 1.232178498e-01f, 1.232272475e-01f, 1.232364291e-01f, 1.232453946e-01f, 1.232541442e-01f, 1.232626777e-01f, 1.232709954e-01f,
-1.232790973e-01f, 1.232869834e-01f, 1.232946539e-01f, 1.233021086e-01f, 1.233093478e-01f, 1.233163715e-01f, 1.233231797e-01f, 1.233297726e-01f, 1.233361501e-01f, 1.233423123e-01f,
-1.233482594e-01f, 1.233539913e-01f, 1.233595081e-01f, 1.233648099e-01f, 1.233698968e-01f, 1.233747688e-01f, 1.233794260e-01f, 1.233838685e-01f, 1.233880962e-01f, 1.233921094e-01f,
-1.233959080e-01f, 1.233994921e-01f, 1.234028618e-01f, 1.234060172e-01f, 1.234089583e-01f, 1.234116852e-01f, 1.234141979e-01f, 1.234164966e-01f, 1.234185813e-01f, 1.234204521e-01f,
-1.234221090e-01f, 1.234235521e-01f, 1.234247815e-01f, 1.234257972e-01f, 1.234265994e-01f, 1.234271880e-01f, 1.234275633e-01f, 1.234277251e-01f, 1.234276737e-01f, 1.234274091e-01f,
-1.234269313e-01f, 1.234262405e-01f, 1.234253367e-01f, 1.234242199e-01f, 1.234228903e-01f, 1.234213480e-01f, 1.234195929e-01f, 1.234176252e-01f, 1.234154450e-01f, 1.234130523e-01f,
-1.234104473e-01f, 1.234076299e-01f, 1.234046003e-01f, 1.234013585e-01f, 1.233979046e-01f, 1.233942388e-01f, 1.233903610e-01f, 1.233862714e-01f, 1.233819700e-01f, 1.233774569e-01f,
-1.233727322e-01f, 1.233677960e-01f, 1.233626483e-01f, 1.233572893e-01f, 1.233517190e-01f, 1.233459375e-01f, 1.233399448e-01f, 1.233337412e-01f, 1.233273265e-01f, 1.233207010e-01f,
-1.233138647e-01f, 1.233068177e-01f, 1.232995600e-01f, 1.232920919e-01f, 1.232844132e-01f, 1.232765242e-01f, 1.232684249e-01f, 1.232601154e-01f, 1.232515957e-01f, 1.232428661e-01f,
-1.232339265e-01f, 1.232247770e-01f, 1.232154177e-01f, 1.232058488e-01f, 1.231960702e-01f, 1.231860822e-01f, 1.231758847e-01f, 1.231654779e-01f, 1.231548618e-01f, 1.231440366e-01f,
-1.231330023e-01f, 1.231217590e-01f, 1.231103068e-01f, 1.230986459e-01f, 1.230867762e-01f, 1.230746979e-01f, 1.230624110e-01f, 1.230499157e-01f, 1.230372121e-01f, 1.230243002e-01f,
-1.230111801e-01f, 1.229978520e-01f, 1.229843159e-01f, 1.229705719e-01f, 1.229566201e-01f, 1.229424606e-01f, 1.229280935e-01f, 1.229135189e-01f, 1.228987369e-01f, 1.228837476e-01f,
-1.228685510e-01f, 1.228531473e-01f, 1.228375366e-01f, 1.228217189e-01f, 1.228056943e-01f, 1.227894631e-01f, 1.227730251e-01f, 1.227563807e-01f, 1.227395297e-01f, 1.227224724e-01f,
-1.227052089e-01f, 1.226877392e-01f, 1.226700634e-01f, 1.226521817e-01f, 1.226340941e-01f, 1.226158007e-01f, 1.225973017e-01f, 1.225785971e-01f, 1.225596870e-01f, 1.225405716e-01f,
-1.225212509e-01f, 1.225017251e-01f, 1.224819941e-01f, 1.224620583e-01f, 1.224419176e-01f, 1.224215721e-01f, 1.224010220e-01f, 1.223802673e-01f, 1.223593082e-01f, 1.223381448e-01f,
-1.223167771e-01f, 1.222952053e-01f, 1.222734295e-01f, 1.222514497e-01f, 1.222292661e-01f, 1.222068788e-01f, 1.221842880e-01f, 1.221614936e-01f, 1.221384958e-01f, 1.221152948e-01f,
-1.220918905e-01f, 1.220682832e-01f, 1.220444730e-01f, 1.220204598e-01f, 1.219962440e-01f, 1.219718255e-01f, 1.219472044e-01f, 1.219223810e-01f, 1.218973552e-01f, 1.218721272e-01f,
-1.218466972e-01f, 1.218210651e-01f, 1.217952312e-01f, 1.217691956e-01f, 1.217429583e-01f, 1.217165194e-01f, 1.216898791e-01f, 1.216630375e-01f, 1.216359947e-01f, 1.216087509e-01f,
-1.215813060e-01f, 1.215536603e-01f, 1.215258138e-01f, 1.214977667e-01f, 1.214695191e-01f, 1.214410711e-01f, 1.214124227e-01f, 1.213835742e-01f, 1.213545257e-01f, 1.213252772e-01f,
-1.212958288e-01f, 1.212661808e-01f, 1.212363331e-01f, 1.212062860e-01f, 1.211760395e-01f, 1.211455937e-01f, 1.211149488e-01f, 1.210841049e-01f, 1.210530622e-01f, 1.210218206e-01f,
-1.209903804e-01f, 1.209587416e-01f, 1.209269044e-01f, 1.208948689e-01f, 1.208626352e-01f, 1.208302035e-01f, 1.207975738e-01f, 1.207647463e-01f, 1.207317211e-01f, 1.206984984e-01f,
-1.206650781e-01f, 1.206314606e-01f, 1.205976458e-01f, 1.205636339e-01f, 1.205294251e-01f, 1.204950194e-01f, 1.204604170e-01f, 1.204256179e-01f, 1.203906225e-01f, 1.203554306e-01f,
-1.203200425e-01f, 1.202844584e-01f, 1.202486782e-01f, 1.202127022e-01f, 1.201765305e-01f, 1.201401631e-01f, 1.201036003e-01f, 1.200668421e-01f, 1.200298887e-01f, 1.199927402e-01f,
-1.199553968e-01f, 1.199178584e-01f, 1.198801254e-01f, 1.198421978e-01f, 1.198040757e-01f, 1.197657593e-01f, 1.197272487e-01f, 1.196885440e-01f, 1.196496453e-01f, 1.196105529e-01f,
-1.195712667e-01f, 1.195317870e-01f, 1.194921139e-01f, 1.194522474e-01f, 1.194121878e-01f, 1.193719352e-01f, 1.193314897e-01f, 1.192908513e-01f, 1.192500204e-01f, 1.192089969e-01f,
-1.191677811e-01f, 1.191263730e-01f, 1.190847728e-01f, 1.190429806e-01f, 1.190009966e-01f, 1.189588209e-01f, 1.189164536e-01f, 1.188738948e-01f, 1.188311448e-01f, 1.187882035e-01f,
-1.187450713e-01f, 1.187017481e-01f, 1.186582342e-01f, 1.186145296e-01f, 1.185706345e-01f, 1.185265491e-01f, 1.184822734e-01f, 1.184378077e-01f, 1.183931520e-01f, 1.183483065e-01f,
-1.183032714e-01f, 1.182580466e-01f, 1.182126325e-01f, 1.181670292e-01f, 1.181212367e-01f, 1.180752552e-01f, 1.180290849e-01f, 1.179827259e-01f, 1.179361783e-01f, 1.178894423e-01f,
-1.178425181e-01f, 1.177954056e-01f, 1.177481052e-01f, 1.177006169e-01f, 1.176529409e-01f, 1.176050773e-01f, 1.175570263e-01f, 1.175087880e-01f, 1.174603625e-01f, 1.174117501e-01f,
-1.173629507e-01f, 1.173139647e-01f, 1.172647920e-01f, 1.172154329e-01f, 1.171658876e-01f, 1.171161561e-01f, 1.170662385e-01f, 1.170161352e-01f, 1.169658461e-01f, 1.169153714e-01f,
-1.168647113e-01f, 1.168138659e-01f, 1.167628355e-01f, 1.167116200e-01f, 1.166602197e-01f, 1.166086346e-01f, 1.165568651e-01f, 1.165049111e-01f, 1.164527729e-01f, 1.164004506e-01f,
-1.163479443e-01f, 1.162952543e-01f, 1.162423805e-01f, 1.161893233e-01f, 1.161360827e-01f, 1.160826589e-01f, 1.160290520e-01f, 1.159752622e-01f, 1.159212896e-01f, 1.158671345e-01f,
-1.158127968e-01f, 1.157582769e-01f, 1.157035748e-01f, 1.156486907e-01f, 1.155936247e-01f, 1.155383770e-01f, 1.154829478e-01f, 1.154273372e-01f, 1.153715453e-01f, 1.153155723e-01f,
-1.152594184e-01f, 1.152030837e-01f, 1.151465683e-01f, 1.150898725e-01f, 1.150329963e-01f, 1.149759400e-01f, 1.149187036e-01f, 1.148612874e-01f, 1.148036914e-01f, 1.147459159e-01f,
-1.146879610e-01f, 1.146298269e-01f, 1.145715136e-01f, 1.145130215e-01f, 1.144543505e-01f, 1.143955009e-01f, 1.143364729e-01f, 1.142772665e-01f, 1.142178820e-01f, 1.141583195e-01f,
-1.140985792e-01f, 1.140386612e-01f, 1.139785657e-01f, 1.139182928e-01f, 1.138578427e-01f, 1.137972156e-01f, 1.137364115e-01f, 1.136754308e-01f, 1.136142735e-01f, 1.135529398e-01f,
-1.134914298e-01f, 1.134297438e-01f, 1.133678818e-01f, 1.133058441e-01f, 1.132436307e-01f, 1.131812420e-01f, 1.131186779e-01f, 1.130559387e-01f, 1.129930246e-01f, 1.129299357e-01f,
-1.128666721e-01f, 1.128032341e-01f, 1.127396218e-01f, 1.126758353e-01f, 1.126118748e-01f, 1.125477406e-01f, 1.124834327e-01f, 1.124189513e-01f, 1.123542965e-01f, 1.122894686e-01f,
-1.122244677e-01f, 1.121592940e-01f, 1.120939477e-01f, 1.120284288e-01f, 1.119627376e-01f, 1.118968742e-01f, 1.118308388e-01f, 1.117646316e-01f, 1.116982527e-01f, 1.116317023e-01f,
-1.115649806e-01f, 1.114980877e-01f, 1.114310239e-01f, 1.113637891e-01f, 1.112963838e-01f, 1.112288079e-01f, 1.111610617e-01f, 1.110931453e-01f, 1.110250590e-01f, 1.109568028e-01f,
-1.108883770e-01f, 1.108197817e-01f, 1.107510170e-01f, 1.106820833e-01f, 1.106129805e-01f, 1.105437090e-01f, 1.104742688e-01f, 1.104046602e-01f, 1.103348833e-01f, 1.102649382e-01f,
-1.101948252e-01f, 1.101245445e-01f, 1.100540961e-01f, 1.099834803e-01f, 1.099126973e-01f, 1.098417471e-01f, 1.097706301e-01f, 1.096993463e-01f, 1.096278959e-01f, 1.095562791e-01f,
-1.094844961e-01f, 1.094125471e-01f, 1.093404322e-01f, 1.092681516e-01f, 1.091957055e-01f, 1.091230940e-01f, 1.090503174e-01f, 1.089773757e-01f, 1.089042693e-01f, 1.088309981e-01f,
-1.087575625e-01f, 1.086839627e-01f, 1.086101986e-01f, 1.085362707e-01f, 1.084621790e-01f, 1.083879237e-01f, 1.083135049e-01f, 1.082389230e-01f, 1.081641780e-01f, 1.080892701e-01f,
-1.080141995e-01f, 1.079389663e-01f, 1.078635708e-01f, 1.077880132e-01f, 1.077122936e-01f, 1.076364121e-01f, 1.075603690e-01f, 1.074841645e-01f, 1.074077987e-01f, 1.073312718e-01f,
-1.072545840e-01f, 1.071777355e-01f, 1.071007264e-01f, 1.070235569e-01f, 1.069462273e-01f, 1.068687376e-01f, 1.067910881e-01f, 1.067132790e-01f, 1.066353104e-01f, 1.065571825e-01f,
-1.064788955e-01f, 1.064004496e-01f, 1.063218449e-01f, 1.062430817e-01f, 1.061641601e-01f, 1.060850804e-01f, 1.060058426e-01f, 1.059264470e-01f, 1.058468938e-01f, 1.057671831e-01f,
-1.056873151e-01f, 1.056072901e-01f, 1.055271081e-01f, 1.054467694e-01f, 1.053662742e-01f, 1.052856227e-01f, 1.052048150e-01f, 1.051238513e-01f, 1.050427318e-01f, 1.049614567e-01f,
-1.048800262e-01f, 1.047984404e-01f, 1.047166996e-01f, 1.046348040e-01f, 1.045527537e-01f, 1.044705488e-01f, 1.043881897e-01f, 1.043056765e-01f, 1.042230093e-01f, 1.041401884e-01f,
-1.040572140e-01f, 1.039740862e-01f, 1.038908052e-01f, 1.038073712e-01f, 1.037237845e-01f, 1.036400451e-01f, 1.035561533e-01f, 1.034721093e-01f, 1.033879132e-01f, 1.033035653e-01f,
-1.032190657e-01f, 1.031344147e-01f, 1.030496124e-01f, 1.029646590e-01f, 1.028795547e-01f, 1.027942996e-01f, 1.027088941e-01f, 1.026233382e-01f, 1.025376322e-01f, 1.024517763e-01f,
-1.023657706e-01f, 1.022796153e-01f, 1.021933107e-01f, 1.021068569e-01f, 1.020202541e-01f, 1.019335025e-01f, 1.018466023e-01f, 1.017595538e-01f, 1.016723570e-01f, 1.015850121e-01f,
-1.014975195e-01f, 1.014098792e-01f, 1.013220915e-01f, 1.012341566e-01f, 1.011460746e-01f, 1.010578457e-01f, 1.009694702e-01f, 1.008809482e-01f, 1.007922799e-01f, 1.007034656e-01f,
-1.006145054e-01f, 1.005253995e-01f, 1.004361481e-01f, 1.003467514e-01f, 1.002572096e-01f, 1.001675229e-01f, 1.000776915e-01f, 9.998771561e-02f, 9.989759539e-02f, 9.980733106e-02f,
-9.971692281e-02f, 9.962637084e-02f, 9.953567535e-02f, 9.944483653e-02f, 9.935385458e-02f, 9.926272970e-02f, 9.917146209e-02f, 9.908005194e-02f, 9.898849946e-02f, 9.889680484e-02f,
-9.880496828e-02f, 9.871298998e-02f, 9.862087014e-02f, 9.852860896e-02f, 9.843620664e-02f, 9.834366337e-02f, 9.825097936e-02f, 9.815815481e-02f, 9.806518992e-02f, 9.797208489e-02f,
-9.787883991e-02f, 9.778545519e-02f, 9.769193093e-02f, 9.759826734e-02f, 9.750446460e-02f, 9.741052293e-02f, 9.731644252e-02f, 9.722222358e-02f, 9.712786630e-02f, 9.703337090e-02f,
-9.693873756e-02f, 9.684396650e-02f, 9.674905792e-02f, 9.665401202e-02f, 9.655882900e-02f, 9.646350906e-02f, 9.636805241e-02f, 9.627245925e-02f, 9.617672978e-02f, 9.608086422e-02f,
-9.598486275e-02f, 9.588872559e-02f, 9.579245294e-02f, 9.569604501e-02f, 9.559950199e-02f, 9.550282409e-02f, 9.540601152e-02f, 9.530906448e-02f, 9.521198318e-02f, 9.511476783e-02f,
-9.501741861e-02f, 9.491993576e-02f, 9.482231946e-02f, 9.472456992e-02f, 9.462668735e-02f, 9.452867196e-02f, 9.443052396e-02f, 9.433224354e-02f, 9.423383091e-02f, 9.413528629e-02f,
-9.403660988e-02f, 9.393780188e-02f, 9.383886250e-02f, 9.373979196e-02f, 9.364059045e-02f, 9.354125818e-02f, 9.344179537e-02f, 9.334220222e-02f, 9.324247894e-02f, 9.314262573e-02f,
-9.304264281e-02f, 9.294253039e-02f, 9.284228866e-02f, 9.274191785e-02f, 9.264141815e-02f, 9.254078979e-02f, 9.244003296e-02f, 9.233914788e-02f, 9.223813476e-02f, 9.213699380e-02f,
-9.203572522e-02f, 9.193432923e-02f, 9.183280603e-02f, 9.173115584e-02f, 9.162937886e-02f, 9.152747531e-02f, 9.142544540e-02f, 9.132328934e-02f, 9.122100734e-02f, 9.111859961e-02f,
-9.101606636e-02f, 9.091340781e-02f, 9.081062416e-02f, 9.070771562e-02f, 9.060468242e-02f, 9.050152475e-02f, 9.039824284e-02f, 9.029483689e-02f, 9.019130711e-02f, 9.008765373e-02f,
-8.998387695e-02f, 8.987997698e-02f, 8.977595404e-02f, 8.967180834e-02f, 8.956754009e-02f, 8.946314951e-02f, 8.935863681e-02f, 8.925400220e-02f, 8.914924591e-02f, 8.904436813e-02f,
-8.893936909e-02f, 8.883424899e-02f, 8.872900806e-02f, 8.862364651e-02f, 8.851816455e-02f, 8.841256240e-02f, 8.830684026e-02f, 8.820099837e-02f, 8.809503692e-02f, 8.798895615e-02f,
-8.788275625e-02f, 8.777643745e-02f, 8.766999997e-02f, 8.756344401e-02f, 8.745676980e-02f, 8.734997755e-02f, 8.724306747e-02f, 8.713603979e-02f, 8.702889471e-02f, 8.692163246e-02f,
-8.681425325e-02f, 8.670675730e-02f, 8.659914482e-02f, 8.649141604e-02f, 8.638357116e-02f, 8.627561042e-02f, 8.616753401e-02f, 8.605934217e-02f, 8.595103510e-02f, 8.584261303e-02f,
-8.573407617e-02f, 8.562542475e-02f, 8.551665897e-02f, 8.540777906e-02f, 8.529878524e-02f, 8.518967773e-02f, 8.508045673e-02f, 8.497112248e-02f, 8.486167519e-02f, 8.475211508e-02f,
-8.464244236e-02f, 8.453265726e-02f, 8.442276000e-02f, 8.431275080e-02f, 8.420262987e-02f, 8.409239743e-02f, 8.398205371e-02f, 8.387159893e-02f, 8.376103330e-02f, 8.365035704e-02f,
-8.353957038e-02f, 8.342867353e-02f, 8.331766672e-02f, 8.320655016e-02f, 8.309532408e-02f, 8.298398869e-02f, 8.287254422e-02f, 8.276099090e-02f, 8.264932893e-02f, 8.253755854e-02f,
-8.242567995e-02f, 8.231369339e-02f, 8.220159907e-02f, 8.208939722e-02f, 8.197708806e-02f, 8.186467181e-02f, 8.175214868e-02f, 8.163951892e-02f, 8.152678273e-02f, 8.141394033e-02f,
-8.130099196e-02f, 8.118793783e-02f, 8.107477817e-02f, 8.096151320e-02f, 8.084814313e-02f, 8.073466820e-02f, 8.062108863e-02f, 8.050740464e-02f, 8.039361645e-02f, 8.027972429e-02f,
-8.016572838e-02f, 8.005162894e-02f, 7.993742620e-02f, 7.982312038e-02f, 7.970871170e-02f, 7.959420039e-02f, 7.947958668e-02f, 7.936487078e-02f, 7.925005292e-02f, 7.913513333e-02f,
-7.902011223e-02f, 7.890498984e-02f, 7.878976639e-02f, 7.867444211e-02f, 7.855901721e-02f, 7.844349193e-02f, 7.832786648e-02f, 7.821214110e-02f, 7.809631600e-02f, 7.798039142e-02f,
-7.786436758e-02f, 7.774824471e-02f, 7.763202302e-02f, 7.751570275e-02f, 7.739928412e-02f, 7.728276736e-02f, 7.716615269e-02f, 7.704944034e-02f, 7.693263054e-02f, 7.681572351e-02f,
-7.669871947e-02f, 7.658161867e-02f, 7.646442131e-02f, 7.634712763e-02f, 7.622973785e-02f, 7.611225221e-02f, 7.599467092e-02f, 7.587699422e-02f, 7.575922233e-02f, 7.564135548e-02f,
-7.552339390e-02f, 7.540533780e-02f, 7.528718743e-02f, 7.516894301e-02f, 7.505060477e-02f, 7.493217293e-02f, 7.481364772e-02f, 7.469502936e-02f, 7.457631810e-02f, 7.445751415e-02f,
-7.433861774e-02f, 7.421962911e-02f, 7.410054847e-02f, 7.398137607e-02f, 7.386211212e-02f, 7.374275685e-02f, 7.362331050e-02f, 7.350377328e-02f, 7.338414544e-02f, 7.326442720e-02f,
-7.314461879e-02f, 7.302472043e-02f, 7.290473236e-02f, 7.278465481e-02f, 7.266448800e-02f, 7.254423216e-02f, 7.242388753e-02f, 7.230345433e-02f, 7.218293280e-02f, 7.206232315e-02f,
-7.194162563e-02f, 7.182084045e-02f, 7.169996786e-02f, 7.157900808e-02f, 7.145796134e-02f, 7.133682787e-02f, 7.121560791e-02f, 7.109430167e-02f, 7.097290940e-02f, 7.085143131e-02f,
-7.072986765e-02f, 7.060821864e-02f, 7.048648452e-02f, 7.036466551e-02f, 7.024276184e-02f, 7.012077375e-02f, 6.999870147e-02f, 6.987654522e-02f, 6.975430524e-02f, 6.963198176e-02f,
-6.950957501e-02f, 6.938708522e-02f, 6.926451262e-02f, 6.914185745e-02f, 6.901911993e-02f, 6.889630030e-02f, 6.877339879e-02f, 6.865041563e-02f, 6.852735105e-02f, 6.840420528e-02f,
-6.828097856e-02f, 6.815767111e-02f, 6.803428318e-02f, 6.791081498e-02f, 6.778726676e-02f, 6.766363874e-02f, 6.753993115e-02f, 6.741614424e-02f, 6.729227823e-02f, 6.716833335e-02f,
-6.704430984e-02f, 6.692020793e-02f, 6.679602785e-02f, 6.667176983e-02f, 6.654743410e-02f, 6.642302091e-02f, 6.629853048e-02f, 6.617396304e-02f, 6.604931883e-02f, 6.592459809e-02f,
-6.579980103e-02f, 6.567492790e-02f, 6.554997893e-02f, 6.542495436e-02f, 6.529985440e-02f, 6.517467931e-02f, 6.504942931e-02f, 6.492410464e-02f, 6.479870552e-02f, 6.467323220e-02f,
-6.454768491e-02f, 6.442206387e-02f, 6.429636933e-02f, 6.417060151e-02f, 6.404476066e-02f, 6.391884700e-02f, 6.379286077e-02f, 6.366680220e-02f, 6.354067153e-02f, 6.341446898e-02f,
-6.328819480e-02f, 6.316184922e-02f, 6.303543248e-02f, 6.290894480e-02f, 6.278238642e-02f, 6.265575757e-02f, 6.252905850e-02f, 6.240228943e-02f, 6.227545060e-02f, 6.214854224e-02f,
-6.202156459e-02f, 6.189451788e-02f, 6.176740234e-02f, 6.164021822e-02f, 6.151296574e-02f, 6.138564515e-02f, 6.125825667e-02f, 6.113080054e-02f, 6.100327699e-02f, 6.087568626e-02f,
-6.074802859e-02f, 6.062030421e-02f, 6.049251336e-02f, 6.036465626e-02f, 6.023673316e-02f, 6.010874429e-02f, 5.998068988e-02f, 5.985257018e-02f, 5.972438541e-02f, 5.959613581e-02f,
-5.946782162e-02f, 5.933944307e-02f, 5.921100039e-02f, 5.908249383e-02f, 5.895392362e-02f, 5.882528999e-02f, 5.869659319e-02f, 5.856783343e-02f, 5.843901097e-02f, 5.831012603e-02f,
-5.818117885e-02f, 5.805216968e-02f, 5.792309873e-02f, 5.779396625e-02f, 5.766477248e-02f, 5.753551765e-02f, 5.740620200e-02f, 5.727682576e-02f, 5.714738916e-02f, 5.701789245e-02f,
-5.688833587e-02f, 5.675871963e-02f, 5.662904400e-02f, 5.649930918e-02f, 5.636951544e-02f, 5.623966299e-02f, 5.610975209e-02f, 5.597978295e-02f, 5.584975583e-02f, 5.571967095e-02f,
-5.558952855e-02f, 5.545932887e-02f, 5.532907215e-02f, 5.519875861e-02f, 5.506838851e-02f, 5.493796206e-02f, 5.480747952e-02f, 5.467694112e-02f, 5.454634709e-02f, 5.441569766e-02f,
-5.428499309e-02f, 5.415423360e-02f, 5.402341942e-02f, 5.389255080e-02f, 5.376162798e-02f, 5.363065118e-02f, 5.349962065e-02f, 5.336853662e-02f, 5.323739933e-02f, 5.310620902e-02f,
-5.297496592e-02f, 5.284367027e-02f, 5.271232231e-02f, 5.258092226e-02f, 5.244947038e-02f, 5.231796690e-02f, 5.218641204e-02f, 5.205480606e-02f, 5.192314918e-02f, 5.179144165e-02f,
-5.165968370e-02f, 5.152787557e-02f, 5.139601749e-02f, 5.126410970e-02f, 5.113215244e-02f, 5.100014595e-02f, 5.086809046e-02f, 5.073598621e-02f, 5.060383343e-02f, 5.047163237e-02f,
-5.033938326e-02f, 5.020708633e-02f, 5.007474183e-02f, 4.994235000e-02f, 4.980991106e-02f, 4.967742525e-02f, 4.954489282e-02f, 4.941231400e-02f, 4.927968902e-02f, 4.914701813e-02f,
-4.901430156e-02f, 4.888153955e-02f, 4.874873233e-02f, 4.861588015e-02f, 4.848298323e-02f, 4.835004182e-02f, 4.821705616e-02f, 4.808402647e-02f, 4.795095300e-02f, 4.781783599e-02f,
-4.768467567e-02f, 4.755147228e-02f, 4.741822606e-02f, 4.728493724e-02f, 4.715160606e-02f, 4.701823276e-02f, 4.688481758e-02f, 4.675136074e-02f, 4.661786250e-02f, 4.648432308e-02f,
-4.635074273e-02f, 4.621712168e-02f, 4.608346016e-02f, 4.594975842e-02f, 4.581601670e-02f, 4.568223522e-02f, 4.554841423e-02f, 4.541455396e-02f, 4.528065466e-02f, 4.514671655e-02f,
-4.501273988e-02f, 4.487872488e-02f, 4.474467179e-02f, 4.461058084e-02f, 4.447645228e-02f, 4.434228634e-02f, 4.420808326e-02f, 4.407384328e-02f, 4.393956662e-02f, 4.380525354e-02f,
-4.367090426e-02f, 4.353651903e-02f, 4.340209807e-02f, 4.326764163e-02f, 4.313314995e-02f, 4.299862326e-02f, 4.286406180e-02f, 4.272946580e-02f, 4.259483550e-02f, 4.246017115e-02f,
-4.232547297e-02f, 4.219074120e-02f, 4.205597609e-02f, 4.192117786e-02f, 4.178634675e-02f, 4.165148301e-02f, 4.151658686e-02f, 4.138165855e-02f, 4.124669831e-02f, 4.111170638e-02f,
-4.097668300e-02f, 4.084162839e-02f, 4.070654281e-02f, 4.057142648e-02f, 4.043627964e-02f, 4.030110253e-02f, 4.016589539e-02f, 4.003065845e-02f, 3.989539195e-02f, 3.976009613e-02f,
-3.962477122e-02f, 3.948941745e-02f, 3.935403508e-02f, 3.921862432e-02f, 3.908318543e-02f, 3.894771863e-02f, 3.881222416e-02f, 3.867670226e-02f, 3.854115317e-02f, 3.840557711e-02f,
-3.826997434e-02f, 3.813434508e-02f, 3.799868957e-02f, 3.786300805e-02f, 3.772730075e-02f, 3.759156791e-02f, 3.745580976e-02f, 3.732002655e-02f, 3.718421851e-02f, 3.704838587e-02f,
-3.691252887e-02f, 3.677664775e-02f, 3.664074274e-02f, 3.650481408e-02f, 3.636886201e-02f, 3.623288676e-02f, 3.609688856e-02f, 3.596086766e-02f, 3.582482429e-02f, 3.568875868e-02f,
-3.555267107e-02f, 3.541656170e-02f, 3.528043081e-02f, 3.514427862e-02f, 3.500810538e-02f, 3.487191131e-02f, 3.473569666e-02f, 3.459946167e-02f, 3.446320656e-02f, 3.432693157e-02f,
-3.419063694e-02f, 3.405432291e-02f, 3.391798970e-02f, 3.378163756e-02f, 3.364526672e-02f, 3.350887742e-02f, 3.337246988e-02f, 3.323604435e-02f, 3.309960107e-02f, 3.296314025e-02f,
-3.282666216e-02f, 3.269016700e-02f, 3.255365504e-02f, 3.241712648e-02f, 3.228058158e-02f, 3.214402057e-02f, 3.200744368e-02f, 3.187085115e-02f, 3.173424321e-02f, 3.159762009e-02f,
-3.146098204e-02f, 3.132432929e-02f, 3.118766206e-02f, 3.105098060e-02f, 3.091428514e-02f, 3.077757592e-02f, 3.064085317e-02f, 3.050411712e-02f, 3.036736801e-02f, 3.023060607e-02f,
-3.009383154e-02f, 2.995704465e-02f, 2.982024564e-02f, 2.968343474e-02f, 2.954661218e-02f, 2.940977820e-02f, 2.927293303e-02f, 2.913607691e-02f, 2.899921007e-02f, 2.886233275e-02f,
-2.872544517e-02f, 2.858854758e-02f, 2.845164020e-02f, 2.831472327e-02f, 2.817779703e-02f, 2.804086170e-02f, 2.790391752e-02f, 2.776696473e-02f, 2.763000356e-02f, 2.749303423e-02f,
-2.735605699e-02f, 2.721907207e-02f, 2.708207970e-02f, 2.694508012e-02f, 2.680807355e-02f, 2.667106024e-02f, 2.653404040e-02f, 2.639701429e-02f, 2.625998212e-02f, 2.612294414e-02f,
-2.598590057e-02f, 2.584885166e-02f, 2.571179762e-02f, 2.557473869e-02f, 2.543767512e-02f, 2.530060712e-02f, 2.516353493e-02f, 2.502645879e-02f, 2.488937892e-02f, 2.475229556e-02f,
-2.461520894e-02f, 2.447811930e-02f, 2.434102686e-02f, 2.420393186e-02f, 2.406683452e-02f, 2.392973509e-02f, 2.379263379e-02f, 2.365553086e-02f, 2.351842652e-02f, 2.338132102e-02f,
-2.324421457e-02f, 2.310710741e-02f, 2.296999978e-02f, 2.283289190e-02f, 2.269578401e-02f, 2.255867633e-02f, 2.242156911e-02f, 2.228446256e-02f, 2.214735692e-02f, 2.201025243e-02f,
-2.187314931e-02f, 2.173604779e-02f, 2.159894811e-02f, 2.146185049e-02f, 2.132475517e-02f, 2.118766238e-02f, 2.105057235e-02f, 2.091348530e-02f, 2.077640147e-02f, 2.063932109e-02f,
-2.050224439e-02f, 2.036517160e-02f, 2.022810295e-02f, 2.009103866e-02f, 1.995397898e-02f, 1.981692413e-02f, 1.967987434e-02f, 1.954282984e-02f, 1.940579085e-02f, 1.926875762e-02f,
-1.913173036e-02f, 1.899470931e-02f, 1.885769470e-02f, 1.872068675e-02f, 1.858368570e-02f, 1.844669178e-02f, 1.830970521e-02f, 1.817272623e-02f, 1.803575505e-02f, 1.789879192e-02f,
-1.776183706e-02f, 1.762489070e-02f, 1.748795306e-02f, 1.735102438e-02f, 1.721410489e-02f, 1.707719480e-02f, 1.694029436e-02f, 1.680340379e-02f, 1.666652332e-02f, 1.652965318e-02f,
-1.639279358e-02f, 1.625594477e-02f, 1.611910697e-02f, 1.598228041e-02f, 1.584546532e-02f, 1.570866191e-02f, 1.557187043e-02f, 1.543509109e-02f, 1.529832414e-02f, 1.516156978e-02f,
-1.502482825e-02f, 1.488809978e-02f, 1.475138460e-02f, 1.461468293e-02f, 1.447799499e-02f, 1.434132102e-02f, 1.420466124e-02f, 1.406801588e-02f, 1.393138516e-02f, 1.379476932e-02f,
-1.365816857e-02f, 1.352158315e-02f, 1.338501327e-02f, 1.324845917e-02f, 1.311192108e-02f, 1.297539921e-02f, 1.283889380e-02f, 1.270240506e-02f, 1.256593323e-02f, 1.242947853e-02f,
-1.229304119e-02f, 1.215662143e-02f, 1.202021948e-02f, 1.188383555e-02f, 1.174746989e-02f, 1.161112271e-02f, 1.147479423e-02f, 1.133848469e-02f, 1.120219430e-02f, 1.106592329e-02f,
-1.092967189e-02f, 1.079344032e-02f, 1.065722880e-02f, 1.052103757e-02f, 1.038486683e-02f, 1.024871683e-02f, 1.011258777e-02f, 9.976479888e-03f, 9.840393405e-03f, 9.704328544e-03f,
-9.568285529e-03f, 9.432264583e-03f, 9.296265930e-03f, 9.160289793e-03f, 9.024336395e-03f, 8.888405959e-03f, 8.752498709e-03f, 8.616614866e-03f, 8.480754655e-03f, 8.344918297e-03f,
-8.209106015e-03f, 8.073318031e-03f, 7.937554569e-03f, 7.801815850e-03f, 7.666102096e-03f, 7.530413530e-03f, 7.394750373e-03f, 7.259112847e-03f, 7.123501175e-03f, 6.987915577e-03f,
-6.852356276e-03f, 6.716823492e-03f, 6.581317447e-03f, 6.445838363e-03f, 6.310386460e-03f, 6.174961960e-03f, 6.039565083e-03f, 5.904196050e-03f, 5.768855082e-03f, 5.633542399e-03f,
-5.498258223e-03f, 5.363002773e-03f, 5.227776270e-03f, 5.092578933e-03f, 4.957410983e-03f, 4.822272640e-03f, 4.687164124e-03f, 4.552085654e-03f, 4.417037451e-03f, 4.282019732e-03f,
-4.147032719e-03f, 4.012076630e-03f, 3.877151684e-03f, 3.742258101e-03f, 3.607396099e-03f, 3.472565897e-03f, 3.337767714e-03f, 3.203001769e-03f, 3.068268280e-03f, 2.933567466e-03f,
-2.798899544e-03f, 2.664264733e-03f, 2.529663251e-03f, 2.395095316e-03f, 2.260561146e-03f, 2.126060958e-03f, 1.991594970e-03f, 1.857163399e-03f, 1.722766463e-03f, 1.588404380e-03f,
-1.454077365e-03f, 1.319785637e-03f, 1.185529411e-03f, 1.051308906e-03f, 9.171243363e-04f, 7.829759199e-04f, 6.488638730e-04f, 5.147884117e-04f, 3.807497521e-04f, 2.467481105e-04f,
-1.127837026e-04f, -2.114325572e-05f, -1.550325488e-04f, -2.888839610e-04f, -4.226972769e-04f, -5.564722813e-04f, -6.902087588e-04f, -8.239064945e-04f, -9.575652734e-04f, -1.091184881e-03f,
--1.224765101e-03f, -1.358305721e-03f, -1.491806526e-03f, -1.625267301e-03f, -1.758687832e-03f, -1.892067905e-03f, -2.025407306e-03f, -2.158705821e-03f, -2.291963236e-03f, -2.425179339e-03f,
--2.558353915e-03f, -2.691486751e-03f, -2.824577634e-03f, -2.957626351e-03f, -3.090632689e-03f, -3.223596435e-03f, -3.356517376e-03f, -3.489395300e-03f, -3.622229995e-03f, -3.755021248e-03f,
--3.887768846e-03f, -4.020472579e-03f, -4.153132234e-03f, -4.285747599e-03f, -4.418318462e-03f, -4.550844613e-03f, -4.683325839e-03f, -4.815761930e-03f, -4.948152674e-03f, -5.080497860e-03f,
--5.212797278e-03f, -5.345050717e-03f, -5.477257965e-03f, -5.609418814e-03f, -5.741533052e-03f, -5.873600469e-03f, -6.005620855e-03f, -6.137594000e-03f, -6.269519695e-03f, -6.401397730e-03f,
--6.533227895e-03f, -6.665009981e-03f, -6.796743778e-03f, -6.928429078e-03f, -7.060065672e-03f, -7.191653350e-03f, -7.323191905e-03f, -7.454681127e-03f, -7.586120808e-03f, -7.717510741e-03f,
--7.848850715e-03f, -7.980140525e-03f, -8.111379961e-03f, -8.242568817e-03f, -8.373706884e-03f, -8.504793955e-03f, -8.635829823e-03f, -8.766814281e-03f, -8.897747122e-03f, -9.028628138e-03f,
--9.159457123e-03f, -9.290233871e-03f, -9.420958175e-03f, -9.551629828e-03f, -9.682248625e-03f, -9.812814360e-03f, -9.943326826e-03f, -1.007378582e-02f, -1.020419113e-02f, -1.033454256e-02f,
--1.046483990e-02f, -1.059508294e-02f, -1.072527148e-02f, -1.085540531e-02f, -1.098548424e-02f, -1.111550805e-02f, -1.124547654e-02f, -1.137538951e-02f, -1.150524675e-02f, -1.163504806e-02f,
--1.176479324e-02f, -1.189448207e-02f, -1.202411436e-02f, -1.215368991e-02f, -1.228320851e-02f, -1.241266995e-02f, -1.254207404e-02f, -1.267142057e-02f, -1.280070935e-02f, -1.292994015e-02f,
--1.305911280e-02f, -1.318822707e-02f, -1.331728278e-02f, -1.344627971e-02f, -1.357521767e-02f, -1.370409646e-02f, -1.383291587e-02f, -1.396167570e-02f, -1.409037575e-02f, -1.421901582e-02f,
--1.434759572e-02f, -1.447611523e-02f, -1.460457416e-02f, -1.473297231e-02f, -1.486130947e-02f, -1.498958546e-02f, -1.511780006e-02f, -1.524595308e-02f, -1.537404431e-02f, -1.550207357e-02f,
--1.563004065e-02f, -1.575794534e-02f, -1.588578746e-02f, -1.601356681e-02f, -1.614128317e-02f, -1.626893636e-02f, -1.639652618e-02f, -1.652405243e-02f, -1.665151491e-02f, -1.677891343e-02f,
--1.690624778e-02f, -1.703351776e-02f, -1.716072319e-02f, -1.728786386e-02f, -1.741493958e-02f, -1.754195015e-02f, -1.766889537e-02f, -1.779577505e-02f, -1.792258899e-02f, -1.804933699e-02f,
--1.817601886e-02f, -1.830263440e-02f, -1.842918342e-02f, -1.855566572e-02f, -1.868208110e-02f, -1.880842937e-02f, -1.893471034e-02f, -1.906092381e-02f, -1.918706958e-02f, -1.931314746e-02f,
--1.943915726e-02f, -1.956509878e-02f, -1.969097182e-02f, -1.981677620e-02f, -1.994251172e-02f, -2.006817819e-02f, -2.019377541e-02f, -2.031930318e-02f, -2.044476133e-02f, -2.057014964e-02f,
--2.069546794e-02f, -2.082071603e-02f, -2.094589371e-02f, -2.107100079e-02f, -2.119603708e-02f, -2.132100240e-02f, -2.144589654e-02f, -2.157071931e-02f, -2.169547053e-02f, -2.182015001e-02f,
--2.194475754e-02f, -2.206929295e-02f, -2.219375603e-02f, -2.231814661e-02f, -2.244246448e-02f, -2.256670947e-02f, -2.269088137e-02f, -2.281498000e-02f, -2.293900517e-02f, -2.306295669e-02f,
--2.318683437e-02f, -2.331063802e-02f, -2.343436745e-02f, -2.355802247e-02f, -2.368160290e-02f, -2.380510855e-02f, -2.392853922e-02f, -2.405189473e-02f, -2.417517490e-02f, -2.429837952e-02f,
--2.442150843e-02f, -2.454456142e-02f, -2.466753831e-02f, -2.479043892e-02f, -2.491326305e-02f, -2.503601052e-02f, -2.515868115e-02f, -2.528127474e-02f, -2.540379112e-02f, -2.552623009e-02f,
--2.564859147e-02f, -2.577087507e-02f, -2.589308071e-02f, -2.601520820e-02f, -2.613725736e-02f, -2.625922800e-02f, -2.638111994e-02f, -2.650293299e-02f, -2.662466697e-02f, -2.674632170e-02f,
--2.686789698e-02f, -2.698939264e-02f, -2.711080850e-02f, -2.723214436e-02f, -2.735340005e-02f, -2.747457538e-02f, -2.759567016e-02f, -2.771668423e-02f, -2.783761739e-02f, -2.795846946e-02f,
--2.807924026e-02f, -2.819992960e-02f, -2.832053732e-02f, -2.844106321e-02f, -2.856150711e-02f, -2.868186883e-02f, -2.880214818e-02f, -2.892234500e-02f, -2.904245909e-02f, -2.916249028e-02f,
--2.928243838e-02f, -2.940230322e-02f, -2.952208462e-02f, -2.964178240e-02f, -2.976139637e-02f, -2.988092635e-02f, -3.000037218e-02f, -3.011973366e-02f, -3.023901063e-02f, -3.035820289e-02f,
--3.047731028e-02f, -3.059633261e-02f, -3.071526971e-02f, -3.083412139e-02f, -3.095288749e-02f, -3.107156781e-02f, -3.119016219e-02f, -3.130867045e-02f, -3.142709241e-02f, -3.154542790e-02f,
--3.166367673e-02f, -3.178183873e-02f, -3.189991372e-02f, -3.201790154e-02f, -3.213580199e-02f, -3.225361491e-02f, -3.237134013e-02f, -3.248897746e-02f, -3.260652672e-02f, -3.272398776e-02f,
--3.284136039e-02f, -3.295864443e-02f, -3.307583971e-02f, -3.319294606e-02f, -3.330996331e-02f, -3.342689127e-02f, -3.354372978e-02f, -3.366047867e-02f, -3.377713775e-02f, -3.389370686e-02f,
--3.401018582e-02f, -3.412657447e-02f, -3.424287262e-02f, -3.435908011e-02f, -3.447519677e-02f, -3.459122241e-02f, -3.470715688e-02f, -3.482300000e-02f, -3.493875159e-02f, -3.505441150e-02f,
--3.516997954e-02f, -3.528545554e-02f, -3.540083934e-02f, -3.551613076e-02f, -3.563132964e-02f, -3.574643581e-02f, -3.586144909e-02f, -3.597636931e-02f, -3.609119631e-02f, -3.620592992e-02f,
--3.632056997e-02f, -3.643511629e-02f, -3.654956870e-02f, -3.666392706e-02f, -3.677819117e-02f, -3.689236089e-02f, -3.700643603e-02f, -3.712041643e-02f, -3.723430193e-02f, -3.734809236e-02f,
--3.746178755e-02f, -3.757538733e-02f, -3.768889154e-02f, -3.780230001e-02f, -3.791561257e-02f, -3.802882907e-02f, -3.814194932e-02f, -3.825497318e-02f, -3.836790047e-02f, -3.848073103e-02f,
--3.859346469e-02f, -3.870610129e-02f, -3.881864066e-02f, -3.893108264e-02f, -3.904342707e-02f, -3.915567378e-02f, -3.926782260e-02f, -3.937987339e-02f, -3.949182596e-02f, -3.960368016e-02f,
--3.971543583e-02f, -3.982709280e-02f, -3.993865091e-02f, -4.005011000e-02f, -4.016146991e-02f, -4.027273047e-02f, -4.038389153e-02f, -4.049495292e-02f, -4.060591447e-02f, -4.071677604e-02f,
--4.082753746e-02f, -4.093819856e-02f, -4.104875920e-02f, -4.115921920e-02f, -4.126957841e-02f, -4.137983667e-02f, -4.148999381e-02f, -4.160004969e-02f, -4.171000414e-02f, -4.181985700e-02f,
--4.192960811e-02f, -4.203925732e-02f, -4.214880446e-02f, -4.225824938e-02f, -4.236759193e-02f, -4.247683193e-02f, -4.258596924e-02f, -4.269500371e-02f, -4.280393516e-02f, -4.291276344e-02f,
--4.302148841e-02f, -4.313010990e-02f, -4.323862775e-02f, -4.334704182e-02f, -4.345535193e-02f, -4.356355795e-02f, -4.367165971e-02f, -4.377965706e-02f, -4.388754984e-02f, -4.399533791e-02f,
--4.410302109e-02f, -4.421059925e-02f, -4.431807222e-02f, -4.442543986e-02f, -4.453270201e-02f, -4.463985851e-02f, -4.474690921e-02f, -4.485385397e-02f, -4.496069262e-02f, -4.506742502e-02f,
--4.517405101e-02f, -4.528057044e-02f, -4.538698316e-02f, -4.549328901e-02f, -4.559948785e-02f, -4.570557953e-02f, -4.581156389e-02f, -4.591744078e-02f, -4.602321006e-02f, -4.612887156e-02f,
--4.623442515e-02f, -4.633987067e-02f, -4.644520798e-02f, -4.655043691e-02f, -4.665555733e-02f, -4.676056909e-02f, -4.686547203e-02f, -4.697026601e-02f, -4.707495088e-02f, -4.717952649e-02f,
--4.728399269e-02f, -4.738834934e-02f, -4.749259628e-02f, -4.759673338e-02f, -4.770076048e-02f, -4.780467744e-02f, -4.790848411e-02f, -4.801218034e-02f, -4.811576599e-02f, -4.821924091e-02f,
--4.832260496e-02f, -4.842585799e-02f, -4.852899985e-02f, -4.863203041e-02f, -4.873494951e-02f, -4.883775702e-02f, -4.894045278e-02f, -4.904303665e-02f, -4.914550849e-02f, -4.924786816e-02f,
--4.935011551e-02f, -4.945225039e-02f, -4.955427268e-02f, -4.965618221e-02f, -4.975797886e-02f, -4.985966247e-02f, -4.996123291e-02f, -5.006269004e-02f, -5.016403370e-02f, -5.026526377e-02f,
--5.036638009e-02f, -5.046738254e-02f, -5.056827096e-02f, -5.066904522e-02f, -5.076970518e-02f, -5.087025069e-02f, -5.097068162e-02f, -5.107099783e-02f, -5.117119917e-02f, -5.127128552e-02f,
--5.137125672e-02f, -5.147111264e-02f, -5.157085315e-02f, -5.167047810e-02f, -5.176998736e-02f, -5.186938079e-02f, -5.196865825e-02f, -5.206781960e-02f, -5.216686470e-02f, -5.226579343e-02f,
--5.236460564e-02f, -5.246330119e-02f, -5.256187996e-02f, -5.266034180e-02f, -5.275868658e-02f, -5.285691416e-02f, -5.295502441e-02f, -5.305301719e-02f, -5.315089237e-02f, -5.324864981e-02f,
--5.334628938e-02f, -5.344381094e-02f, -5.354121437e-02f, -5.363849952e-02f, -5.373566626e-02f, -5.383271447e-02f, -5.392964400e-02f, -5.402645473e-02f, -5.412314651e-02f, -5.421971923e-02f,
--5.431617275e-02f, -5.441250693e-02f, -5.450872164e-02f, -5.460481676e-02f, -5.470079215e-02f, -5.479664768e-02f, -5.489238322e-02f, -5.498799864e-02f, -5.508349380e-02f, -5.517886859e-02f,
--5.527412287e-02f, -5.536925650e-02f, -5.546426937e-02f, -5.555916134e-02f, -5.565393228e-02f, -5.574858207e-02f, -5.584311057e-02f, -5.593751766e-02f, -5.603180321e-02f, -5.612596709e-02f,
--5.622000917e-02f, -5.631392934e-02f, -5.640772745e-02f, -5.650140339e-02f, -5.659495703e-02f, -5.668838823e-02f, -5.678169689e-02f, -5.687488286e-02f, -5.696794603e-02f, -5.706088626e-02f,
--5.715370344e-02f, -5.724639744e-02f, -5.733896813e-02f, -5.743141539e-02f, -5.752373910e-02f, -5.761593913e-02f, -5.770801536e-02f, -5.779996766e-02f, -5.789179592e-02f, -5.798350000e-02f,
--5.807507979e-02f, -5.816653517e-02f, -5.825786600e-02f, -5.834907218e-02f, -5.844015357e-02f, -5.853111006e-02f, -5.862194153e-02f, -5.871264784e-02f, -5.880322890e-02f, -5.889368456e-02f,
--5.898401472e-02f, -5.907421925e-02f, -5.916429803e-02f, -5.925425095e-02f, -5.934407788e-02f, -5.943377870e-02f, -5.952335330e-02f, -5.961280156e-02f, -5.970212335e-02f, -5.979131857e-02f,
--5.988038709e-02f, -5.996932879e-02f, -6.005814356e-02f, -6.014683128e-02f, -6.023539184e-02f, -6.032382511e-02f, -6.041213099e-02f, -6.050030934e-02f, -6.058836007e-02f, -6.067628305e-02f,
--6.076407816e-02f, -6.085174530e-02f, -6.093928434e-02f, -6.102669517e-02f, -6.111397769e-02f, -6.120113176e-02f, -6.128815729e-02f, -6.137505415e-02f, -6.146182223e-02f, -6.154846142e-02f,
--6.163497161e-02f, -6.172135267e-02f, -6.180760451e-02f, -6.189372701e-02f, -6.197972005e-02f, -6.206558353e-02f, -6.215131732e-02f, -6.223692133e-02f, -6.232239544e-02f, -6.240773954e-02f,
--6.249295351e-02f, -6.257803726e-02f, -6.266299066e-02f, -6.274781361e-02f, -6.283250599e-02f, -6.291706771e-02f, -6.300149864e-02f, -6.308579869e-02f, -6.316996773e-02f, -6.325400568e-02f,
--6.333791240e-02f, -6.342168781e-02f, -6.350533178e-02f, -6.358884421e-02f, -6.367222501e-02f, -6.375547404e-02f, -6.383859122e-02f, -6.392157644e-02f, -6.400442958e-02f, -6.408715055e-02f,
--6.416973924e-02f, -6.425219553e-02f, -6.433451933e-02f, -6.441671054e-02f, -6.449876904e-02f, -6.458069473e-02f, -6.466248751e-02f, -6.474414727e-02f, -6.482567392e-02f, -6.490706734e-02f,
--6.498832744e-02f, -6.506945410e-02f, -6.515044723e-02f, -6.523130673e-02f, -6.531203249e-02f, -6.539262442e-02f, -6.547308240e-02f, -6.555340634e-02f, -6.563359613e-02f, -6.571365168e-02f,
--6.579357289e-02f, -6.587335965e-02f, -6.595301186e-02f, -6.603252943e-02f, -6.611191225e-02f, -6.619116023e-02f, -6.627027326e-02f, -6.634925125e-02f, -6.642809410e-02f, -6.650680170e-02f,
--6.658537397e-02f, -6.666381079e-02f, -6.674211209e-02f, -6.682027775e-02f, -6.689830768e-02f, -6.697620178e-02f, -6.705395996e-02f, -6.713158212e-02f, -6.720906816e-02f, -6.728641799e-02f,
--6.736363151e-02f, -6.744070863e-02f, -6.751764925e-02f, -6.759445328e-02f, -6.767112061e-02f, -6.774765117e-02f, -6.782404484e-02f, -6.790030155e-02f, -6.797642119e-02f, -6.805240367e-02f,
--6.812824889e-02f, -6.820395677e-02f, -6.827952722e-02f, -6.835496013e-02f, -6.843025542e-02f, -6.850541300e-02f, -6.858043277e-02f, -6.865531464e-02f, -6.873005853e-02f, -6.880466433e-02f,
--6.887913196e-02f, -6.895346133e-02f, -6.902765235e-02f, -6.910170493e-02f, -6.917561897e-02f, -6.924939440e-02f, -6.932303111e-02f, -6.939652903e-02f, -6.946988806e-02f, -6.954310811e-02f,
--6.961618910e-02f, -6.968913093e-02f, -6.976193353e-02f, -6.983459680e-02f, -6.990712065e-02f, -6.997950500e-02f, -7.005174976e-02f, -7.012385485e-02f, -7.019582018e-02f, -7.026764566e-02f,
--7.033933121e-02f, -7.041087674e-02f, -7.048228217e-02f, -7.055354741e-02f, -7.062467237e-02f, -7.069565698e-02f, -7.076650115e-02f, -7.083720479e-02f, -7.090776783e-02f, -7.097819017e-02f,
--7.104847174e-02f, -7.111861244e-02f, -7.118861221e-02f, -7.125847096e-02f, -7.132818860e-02f, -7.139776505e-02f, -7.146720023e-02f, -7.153649407e-02f, -7.160564647e-02f, -7.167465736e-02f,
--7.174352666e-02f, -7.181225429e-02f, -7.188084016e-02f, -7.194928420e-02f, -7.201758633e-02f, -7.208574646e-02f, -7.215376453e-02f, -7.222164045e-02f, -7.228937413e-02f, -7.235696552e-02f,
--7.242441452e-02f, -7.249172105e-02f, -7.255888505e-02f, -7.262590643e-02f, -7.269278512e-02f, -7.275952103e-02f, -7.282611410e-02f, -7.289256425e-02f, -7.295887140e-02f, -7.302503547e-02f,
--7.309105639e-02f, -7.315693409e-02f, -7.322266849e-02f, -7.328825951e-02f, -7.335370708e-02f, -7.341901113e-02f, -7.348417158e-02f, -7.354918836e-02f, -7.361406140e-02f, -7.367879062e-02f,
--7.374337594e-02f, -7.380781731e-02f, -7.387211464e-02f, -7.393626786e-02f, -7.400027690e-02f, -7.406414169e-02f, -7.412786216e-02f, -7.419143824e-02f, -7.425486985e-02f, -7.431815692e-02f,
--7.438129939e-02f, -7.444429719e-02f, -7.450715024e-02f, -7.456985848e-02f, -7.463242183e-02f, -7.469484023e-02f, -7.475711361e-02f, -7.481924190e-02f, -7.488122503e-02f, -7.494306293e-02f,
--7.500475554e-02f, -7.506630279e-02f, -7.512770461e-02f, -7.518896094e-02f, -7.525007170e-02f, -7.531103684e-02f, -7.537185628e-02f, -7.543252996e-02f, -7.549305781e-02f, -7.555343977e-02f,
--7.561367577e-02f, -7.567376576e-02f, -7.573370965e-02f, -7.579350740e-02f, -7.585315893e-02f, -7.591266418e-02f, -7.597202309e-02f, -7.603123560e-02f, -7.609030164e-02f, -7.614922114e-02f,
--7.620799405e-02f, -7.626662031e-02f, -7.632509985e-02f, -7.638343260e-02f, -7.644161852e-02f, -7.649965753e-02f, -7.655754958e-02f, -7.661529461e-02f, -7.667289255e-02f, -7.673034335e-02f,
--7.678764694e-02f, -7.684480326e-02f, -7.690181227e-02f, -7.695867389e-02f, -7.701538806e-02f, -7.707195474e-02f, -7.712837386e-02f, -7.718464536e-02f, -7.724076919e-02f, -7.729674528e-02f,
--7.735257358e-02f, -7.740825404e-02f, -7.746378659e-02f, -7.751917118e-02f, -7.757440776e-02f, -7.762949626e-02f, -7.768443663e-02f, -7.773922882e-02f, -7.779387277e-02f, -7.784836843e-02f,
--7.790271574e-02f, -7.795691464e-02f, -7.801096509e-02f, -7.806486702e-02f, -7.811862039e-02f, -7.817222514e-02f, -7.822568122e-02f, -7.827898857e-02f, -7.833214715e-02f, -7.838515689e-02f,
--7.843801776e-02f, -7.849072969e-02f, -7.854329263e-02f, -7.859570654e-02f, -7.864797136e-02f, -7.870008704e-02f, -7.875205353e-02f, -7.880387078e-02f, -7.885553874e-02f, -7.890705737e-02f,
--7.895842660e-02f, -7.900964640e-02f, -7.906071670e-02f, -7.911163748e-02f, -7.916240866e-02f, -7.921303022e-02f, -7.926350209e-02f, -7.931382424e-02f, -7.936399661e-02f, -7.941401916e-02f,
--7.946389183e-02f, -7.951361459e-02f, -7.956318739e-02f, -7.961261018e-02f, -7.966188292e-02f, -7.971100555e-02f, -7.975997804e-02f, -7.980880033e-02f, -7.985747239e-02f, -7.990599417e-02f,
--7.995436563e-02f, -8.000258672e-02f, -8.005065739e-02f, -8.009857761e-02f, -8.014634733e-02f, -8.019396651e-02f, -8.024143510e-02f, -8.028875306e-02f, -8.033592036e-02f, -8.038293694e-02f,
--8.042980277e-02f, -8.047651781e-02f, -8.052308201e-02f, -8.056949533e-02f, -8.061575774e-02f, -8.066186919e-02f, -8.070782964e-02f, -8.075363905e-02f, -8.079929738e-02f, -8.084480460e-02f,
--8.089016066e-02f, -8.093536553e-02f, -8.098041917e-02f, -8.102532153e-02f, -8.107007258e-02f, -8.111467229e-02f, -8.115912061e-02f, -8.120341751e-02f, -8.124756295e-02f, -8.129155690e-02f,
--8.133539931e-02f, -8.137909015e-02f, -8.142262939e-02f, -8.146601699e-02f, -8.150925292e-02f, -8.155233713e-02f, -8.159526960e-02f, -8.163805029e-02f, -8.168067916e-02f, -8.172315619e-02f,
--8.176548133e-02f, -8.180765456e-02f, -8.184967584e-02f, -8.189154513e-02f, -8.193326241e-02f, -8.197482764e-02f, -8.201624080e-02f, -8.205750184e-02f, -8.209861073e-02f, -8.213956745e-02f,
--8.218037197e-02f, -8.222102424e-02f, -8.226152425e-02f, -8.230187196e-02f, -8.234206734e-02f, -8.238211037e-02f, -8.242200100e-02f, -8.246173922e-02f, -8.250132498e-02f, -8.254075828e-02f,
--8.258003906e-02f, -8.261916732e-02f, -8.265814301e-02f, -8.269696612e-02f, -8.273563661e-02f, -8.277415445e-02f, -8.281251962e-02f, -8.285073210e-02f, -8.288879185e-02f, -8.292669885e-02f,
--8.296445308e-02f, -8.300205450e-02f, -8.303950310e-02f, -8.307679884e-02f, -8.311394170e-02f, -8.315093166e-02f, -8.318776870e-02f, -8.322445278e-02f, -8.326098389e-02f, -8.329736200e-02f,
--8.333358708e-02f, -8.336965912e-02f, -8.340557809e-02f, -8.344134398e-02f, -8.347695674e-02f, -8.351241638e-02f, -8.354772285e-02f, -8.358287615e-02f, -8.361787624e-02f, -8.365272312e-02f,
--8.368741675e-02f, -8.372195712e-02f, -8.375634420e-02f, -8.379057799e-02f, -8.382465845e-02f, -8.385858557e-02f, -8.389235932e-02f, -8.392597970e-02f, -8.395944668e-02f, -8.399276024e-02f,
--8.402592036e-02f, -8.405892703e-02f, -8.409178023e-02f, -8.412447994e-02f, -8.415702614e-02f, -8.418941882e-02f, -8.422165796e-02f, -8.425374355e-02f, -8.428567556e-02f, -8.431745399e-02f,
--8.434907881e-02f, -8.438055001e-02f, -8.441186758e-02f, -8.444303150e-02f, -8.447404175e-02f, -8.450489833e-02f, -8.453560122e-02f, -8.456615040e-02f, -8.459654586e-02f, -8.462678759e-02f,
--8.465687557e-02f, -8.468680980e-02f, -8.471659025e-02f, -8.474621693e-02f, -8.477568980e-02f, -8.480500888e-02f, -8.483417413e-02f, -8.486318555e-02f, -8.489204314e-02f, -8.492074687e-02f,
--8.494929674e-02f, -8.497769274e-02f, -8.500593486e-02f, -8.503402309e-02f, -8.506195742e-02f, -8.508973784e-02f, -8.511736434e-02f, -8.514483691e-02f, -8.517215555e-02f, -8.519932024e-02f,
--8.522633099e-02f, -8.525318777e-02f, -8.527989059e-02f, -8.530643944e-02f, -8.533283431e-02f, -8.535907519e-02f, -8.538516207e-02f, -8.541109496e-02f, -8.543687385e-02f, -8.546249872e-02f,
--8.548796958e-02f, -8.551328642e-02f, -8.553844923e-02f, -8.556345802e-02f, -8.558831277e-02f, -8.561301348e-02f, -8.563756015e-02f, -8.566195278e-02f, -8.568619136e-02f, -8.571027589e-02f,
--8.573420636e-02f, -8.575798278e-02f, -8.578160514e-02f, -8.580507344e-02f, -8.582838768e-02f, -8.585154786e-02f, -8.587455397e-02f, -8.589740602e-02f, -8.592010400e-02f, -8.594264792e-02f,
--8.596503777e-02f, -8.598727355e-02f, -8.600935527e-02f, -8.603128292e-02f, -8.605305651e-02f, -8.607467604e-02f, -8.609614150e-02f, -8.611745291e-02f, -8.613861026e-02f, -8.615961355e-02f,
--8.618046279e-02f, -8.620115798e-02f, -8.622169913e-02f, -8.624208623e-02f, -8.626231928e-02f, -8.628239831e-02f, -8.630232330e-02f, -8.632209426e-02f, -8.634171119e-02f, -8.636117411e-02f,
--8.638048301e-02f, -8.639963791e-02f, -8.641863880e-02f, -8.643748569e-02f, -8.645617859e-02f, -8.647471751e-02f, -8.649310245e-02f, -8.651133342e-02f, -8.652941042e-02f, -8.654733346e-02f,
--8.656510256e-02f, -8.658271771e-02f, -8.660017893e-02f, -8.661748622e-02f, -8.663463960e-02f, -8.665163907e-02f, -8.666848463e-02f, -8.668517631e-02f, -8.670171411e-02f, -8.671809804e-02f,
--8.673432811e-02f, -8.675040433e-02f, -8.676632671e-02f, -8.678209526e-02f, -8.679771000e-02f, -8.681317093e-02f, -8.682847806e-02f, -8.684363142e-02f, -8.685863100e-02f, -8.687347683e-02f,
--8.688816891e-02f, -8.690270726e-02f, -8.691709189e-02f, -8.693132281e-02f, -8.694540005e-02f, -8.695932360e-02f, -8.697309350e-02f, -8.698670974e-02f, -8.700017235e-02f, -8.701348134e-02f,
--8.702663672e-02f, -8.703963852e-02f, -8.705248674e-02f, -8.706518141e-02f, -8.707772253e-02f, -8.709011013e-02f, -8.710234423e-02f, -8.711442483e-02f, -8.712635196e-02f, -8.713812563e-02f,
--8.714974586e-02f, -8.716121267e-02f, -8.717252609e-02f, -8.718368611e-02f, -8.719469277e-02f, -8.720554609e-02f, -8.721624608e-02f, -8.722679276e-02f, -8.723718615e-02f, -8.724742628e-02f,
--8.725751316e-02f, -8.726744681e-02f, -8.727722725e-02f, -8.728685451e-02f, -8.729632861e-02f, -8.730564956e-02f, -8.731481739e-02f, -8.732383212e-02f, -8.733269378e-02f, -8.734140238e-02f,
--8.734995795e-02f, -8.735836052e-02f, -8.736661009e-02f, -8.737470671e-02f, -8.738265038e-02f, -8.739044115e-02f, -8.739807902e-02f, -8.740556403e-02f, -8.741289619e-02f, -8.742007554e-02f,
--8.742710211e-02f, -8.743397590e-02f, -8.744069696e-02f, -8.744726530e-02f, -8.745368096e-02f, -8.745994395e-02f, -8.746605431e-02f, -8.747201207e-02f, -8.747781724e-02f, -8.748346986e-02f,
--8.748896996e-02f, -8.749431756e-02f, -8.749951270e-02f, -8.750455539e-02f, -8.750944567e-02f, -8.751418357e-02f, -8.751876912e-02f, -8.752320234e-02f, -8.752748327e-02f, -8.753161193e-02f,
--8.753558836e-02f, -8.753941259e-02f, -8.754308464e-02f, -8.754660456e-02f, -8.754997236e-02f, -8.755318808e-02f, -8.755625176e-02f, -8.755916342e-02f, -8.756192309e-02f, -8.756453082e-02f,
--8.756698662e-02f, -8.756929054e-02f, -8.757144261e-02f, -8.757344286e-02f, -8.757529132e-02f, -8.757698804e-02f, -8.757853303e-02f, -8.757992634e-02f, -8.758116800e-02f, -8.758225805e-02f,
--8.758319652e-02f, -8.758398345e-02f, -8.758461887e-02f, -8.758510282e-02f, -8.758543533e-02f, -8.758561644e-02f, -8.758564619e-02f, -8.758552462e-02f, -8.758525175e-02f, -8.758482763e-02f,
--8.758425230e-02f, -8.758352579e-02f, -8.758264815e-02f, -8.758161940e-02f, -8.758043959e-02f, -8.757910876e-02f, -8.757762695e-02f, -8.757599419e-02f, -8.757421053e-02f, -8.757227600e-02f,
--8.757019064e-02f, -8.756795450e-02f, -8.756556762e-02f, -8.756303003e-02f, -8.756034178e-02f, -8.755750290e-02f, -8.755451345e-02f, -8.755137345e-02f, -8.754808296e-02f, -8.754464202e-02f,
--8.754105066e-02f, -8.753730893e-02f, -8.753341688e-02f, -8.752937454e-02f, -8.752518196e-02f, -8.752083918e-02f, -8.751634625e-02f, -8.751170322e-02f, -8.750691011e-02f, -8.750196699e-02f,
--8.749687389e-02f, -8.749163086e-02f, -8.748623795e-02f, -8.748069519e-02f, -8.747500265e-02f, -8.746916035e-02f, -8.746316835e-02f, -8.745702670e-02f, -8.745073544e-02f, -8.744429462e-02f,
--8.743770428e-02f, -8.743096448e-02f, -8.742407525e-02f, -8.741703666e-02f, -8.740984874e-02f, -8.740251155e-02f, -8.739502513e-02f, -8.738738953e-02f, -8.737960481e-02f, -8.737167100e-02f,
--8.736358817e-02f, -8.735535636e-02f, -8.734697561e-02f, -8.733844599e-02f, -8.732976754e-02f, -8.732094031e-02f, -8.731196435e-02f, -8.730283972e-02f, -8.729356646e-02f, -8.728414463e-02f,
--8.727457428e-02f, -8.726485546e-02f, -8.725498822e-02f, -8.724497262e-02f, -8.723480871e-02f, -8.722449655e-02f, -8.721403617e-02f, -8.720342765e-02f, -8.719267103e-02f, -8.718176636e-02f,
--8.717071371e-02f, -8.715951312e-02f, -8.714816466e-02f, -8.713666836e-02f, -8.712502430e-02f, -8.711323253e-02f, -8.710129310e-02f, -8.708920606e-02f, -8.707697148e-02f, -8.706458941e-02f,
--8.705205990e-02f, -8.703938302e-02f, -8.702655882e-02f, -8.701358736e-02f, -8.700046869e-02f, -8.698720288e-02f, -8.697378998e-02f, -8.696023005e-02f, -8.694652314e-02f, -8.693266932e-02f,
--8.691866865e-02f, -8.690452119e-02f, -8.689022698e-02f, -8.687578610e-02f, -8.686119861e-02f, -8.684646456e-02f, -8.683158401e-02f, -8.681655703e-02f, -8.680138367e-02f, -8.678606400e-02f,
--8.677059807e-02f, -8.675498596e-02f, -8.673922772e-02f, -8.672332341e-02f, -8.670727309e-02f, -8.669107683e-02f, -8.667473469e-02f, -8.665824674e-02f, -8.664161303e-02f, -8.662483362e-02f,
--8.660790860e-02f, -8.659083800e-02f, -8.657362191e-02f, -8.655626038e-02f, -8.653875349e-02f, -8.652110128e-02f, -8.650330384e-02f, -8.648536121e-02f, -8.646727348e-02f, -8.644904070e-02f,
--8.643066294e-02f, -8.641214027e-02f, -8.639347275e-02f, -8.637466045e-02f, -8.635570344e-02f, -8.633660178e-02f, -8.631735554e-02f, -8.629796478e-02f, -8.627842959e-02f, -8.625875001e-02f,
--8.623892613e-02f, -8.621895800e-02f, -8.619884570e-02f, -8.617858930e-02f, -8.615818887e-02f, -8.613764446e-02f, -8.611695617e-02f, -8.609612404e-02f, -8.607514816e-02f, -8.605402860e-02f,
--8.603276541e-02f, -8.601135869e-02f, -8.598980848e-02f, -8.596811488e-02f, -8.594627794e-02f, -8.592429774e-02f, -8.590217435e-02f, -8.587990784e-02f, -8.585749828e-02f, -8.583494576e-02f,
--8.581225033e-02f, -8.578941207e-02f, -8.576643106e-02f, -8.574330737e-02f, -8.572004107e-02f, -8.569663223e-02f, -8.567308094e-02f, -8.564938725e-02f, -8.562555126e-02f, -8.560157302e-02f,
--8.557745263e-02f, -8.555319014e-02f, -8.552878564e-02f, -8.550423921e-02f, -8.547955091e-02f, -8.545472082e-02f, -8.542974903e-02f, -8.540463560e-02f, -8.537938062e-02f, -8.535398415e-02f,
--8.532844628e-02f, -8.530276708e-02f, -8.527694663e-02f, -8.525098502e-02f, -8.522488231e-02f, -8.519863858e-02f, -8.517225391e-02f, -8.514572839e-02f, -8.511906208e-02f, -8.509225508e-02f,
--8.506530745e-02f, -8.503821928e-02f, -8.501099064e-02f, -8.498362163e-02f, -8.495611230e-02f, -8.492846276e-02f, -8.490067307e-02f, -8.487274332e-02f, -8.484467358e-02f, -8.481646395e-02f,
--8.478811449e-02f, -8.475962530e-02f, -8.473099646e-02f, -8.470222803e-02f, -8.467332012e-02f, -8.464427280e-02f, -8.461508614e-02f, -8.458576025e-02f, -8.455629519e-02f, -8.452669106e-02f,
--8.449694793e-02f, -8.446706588e-02f, -8.443704501e-02f, -8.440688540e-02f, -8.437658713e-02f, -8.434615028e-02f, -8.431557495e-02f, -8.428486121e-02f, -8.425400914e-02f, -8.422301885e-02f,
--8.419189040e-02f, -8.416062389e-02f, -8.412921941e-02f, -8.409767703e-02f, -8.406599685e-02f, -8.403417894e-02f, -8.400222341e-02f, -8.397013033e-02f, -8.393789980e-02f, -8.390553190e-02f,
--8.387302671e-02f, -8.384038433e-02f, -8.380760484e-02f, -8.377468833e-02f, -8.374163490e-02f, -8.370844462e-02f, -8.367511759e-02f, -8.364165390e-02f, -8.360805364e-02f, -8.357431689e-02f,
--8.354044374e-02f, -8.350643429e-02f, -8.347228863e-02f, -8.343800684e-02f, -8.340358902e-02f, -8.336903526e-02f, -8.333434564e-02f, -8.329952026e-02f, -8.326455922e-02f, -8.322946259e-02f,
--8.319423048e-02f, -8.315886298e-02f, -8.312336017e-02f, -8.308772216e-02f, -8.305194903e-02f, -8.301604087e-02f, -8.297999778e-02f, -8.294381986e-02f, -8.290750719e-02f, -8.287105987e-02f,
--8.283447799e-02f, -8.279776165e-02f, -8.276091094e-02f, -8.272392595e-02f, -8.268680679e-02f, -8.264955354e-02f, -8.261216630e-02f, -8.257464517e-02f, -8.253699024e-02f, -8.249920160e-02f,
--8.246127936e-02f, -8.242322360e-02f, -8.238503443e-02f, -8.234671194e-02f, -8.230825623e-02f, -8.226966739e-02f, -8.223094553e-02f, -8.219209073e-02f, -8.215310310e-02f, -8.211398273e-02f,
--8.207472973e-02f, -8.203534418e-02f, -8.199582620e-02f, -8.195617586e-02f, -8.191639329e-02f, -8.187647857e-02f, -8.183643180e-02f, -8.179625308e-02f, -8.175594252e-02f, -8.171550020e-02f,
--8.167492624e-02f, -8.163422073e-02f, -8.159338377e-02f, -8.155241546e-02f, -8.151131591e-02f, -8.147008521e-02f, -8.142872346e-02f, -8.138723077e-02f, -8.134560723e-02f, -8.130385295e-02f,
--8.126196803e-02f, -8.121995258e-02f, -8.117780669e-02f, -8.113553047e-02f, -8.109312401e-02f, -8.105058743e-02f, -8.100792082e-02f, -8.096512429e-02f, -8.092219794e-02f, -8.087914188e-02f,
--8.083595621e-02f, -8.079264103e-02f, -8.074919644e-02f, -8.070562256e-02f, -8.066191948e-02f, -8.061808731e-02f, -8.057412616e-02f, -8.053003613e-02f, -8.048581732e-02f, -8.044146985e-02f,
--8.039699381e-02f, -8.035238931e-02f, -8.030765647e-02f, -8.026279537e-02f, -8.021780614e-02f, -8.017268888e-02f, -8.012744369e-02f, -8.008207068e-02f, -8.003656996e-02f, -7.999094164e-02f,
--7.994518582e-02f, -7.989930261e-02f, -7.985329213e-02f, -7.980715446e-02f, -7.976088974e-02f, -7.971449806e-02f, -7.966797953e-02f, -7.962133426e-02f, -7.957456237e-02f, -7.952766395e-02f,
--7.948063912e-02f, -7.943348800e-02f, -7.938621068e-02f, -7.933880728e-02f, -7.929127791e-02f, -7.924362268e-02f, -7.919584169e-02f, -7.914793507e-02f, -7.909990292e-02f, -7.905174536e-02f,
--7.900346248e-02f, -7.895505441e-02f, -7.890652126e-02f, -7.885786314e-02f, -7.880908016e-02f, -7.876017243e-02f, -7.871114007e-02f, -7.866198318e-02f, -7.861270189e-02f, -7.856329630e-02f,
--7.851376652e-02f, -7.846411268e-02f, -7.841433488e-02f, -7.836443323e-02f, -7.831440786e-02f, -7.826425887e-02f, -7.821398638e-02f, -7.816359051e-02f, -7.811307136e-02f, -7.806242906e-02f,
--7.801166371e-02f, -7.796077543e-02f, -7.790976435e-02f, -7.785863057e-02f, -7.780737420e-02f, -7.775599538e-02f, -7.770449420e-02f, -7.765287079e-02f, -7.760112526e-02f, -7.754925773e-02f,
--7.749726832e-02f, -7.744515715e-02f, -7.739292432e-02f, -7.734056996e-02f, -7.728809419e-02f, -7.723549712e-02f, -7.718277887e-02f, -7.712993956e-02f, -7.707697931e-02f, -7.702389823e-02f,
--7.697069644e-02f, -7.691737407e-02f, -7.686393123e-02f, -7.681036804e-02f, -7.675668461e-02f, -7.670288108e-02f, -7.664895755e-02f, -7.659491415e-02f, -7.654075100e-02f, -7.648646821e-02f,
--7.643206591e-02f, -7.637754422e-02f, -7.632290326e-02f, -7.626814315e-02f, -7.621326401e-02f, -7.615826596e-02f, -7.610314912e-02f, -7.604791361e-02f, -7.599255957e-02f, -7.593708709e-02f,
--7.588149632e-02f, -7.582578737e-02f, -7.576996036e-02f, -7.571401542e-02f, -7.565795267e-02f, -7.560177222e-02f, -7.554547421e-02f, -7.548905876e-02f, -7.543252599e-02f, -7.537587603e-02f,
--7.531910899e-02f, -7.526222500e-02f, -7.520522419e-02f, -7.514810667e-02f, -7.509087258e-02f, -7.503352204e-02f, -7.497605517e-02f, -7.491847210e-02f, -7.486077295e-02f, -7.480295785e-02f,
--7.474502692e-02f, -7.468698029e-02f, -7.462881808e-02f, -7.457054043e-02f, -7.451214745e-02f, -7.445363927e-02f, -7.439501602e-02f, -7.433627782e-02f, -7.427742480e-02f, -7.421845709e-02f,
--7.415937482e-02f, -7.410017811e-02f, -7.404086708e-02f, -7.398144188e-02f, -7.392190261e-02f, -7.386224942e-02f, -7.380248243e-02f, -7.374260176e-02f, -7.368260756e-02f, -7.362249993e-02f,
--7.356227902e-02f, -7.350194495e-02f, -7.344149785e-02f, -7.338093785e-02f, -7.332026507e-02f, -7.325947966e-02f, -7.319858173e-02f, -7.313757142e-02f, -7.307644886e-02f, -7.301521417e-02f,
--7.295386749e-02f, -7.289240895e-02f, -7.283083867e-02f, -7.276915680e-02f, -7.270736345e-02f, -7.264545876e-02f, -7.258344286e-02f, -7.252131589e-02f, -7.245907796e-02f, -7.239672923e-02f,
--7.233426981e-02f, -7.227169984e-02f, -7.220901944e-02f, -7.214622877e-02f, -7.208332793e-02f, -7.202031708e-02f, -7.195719633e-02f, -7.189396583e-02f, -7.183062571e-02f, -7.176717609e-02f,
--7.170361711e-02f, -7.163994891e-02f, -7.157617162e-02f, -7.151228538e-02f, -7.144829031e-02f, -7.138418655e-02f, -7.131997423e-02f, -7.125565350e-02f, -7.119122448e-02f, -7.112668730e-02f,
--7.106204211e-02f, -7.099728904e-02f, -7.093242822e-02f, -7.086745979e-02f, -7.080238388e-02f, -7.073720063e-02f, -7.067191018e-02f, -7.060651266e-02f, -7.054100820e-02f, -7.047539695e-02f,
--7.040967903e-02f, -7.034385459e-02f, -7.027792376e-02f, -7.021188668e-02f, -7.014574349e-02f, -7.007949432e-02f, -7.001313931e-02f, -6.994667859e-02f, -6.988011231e-02f, -6.981344060e-02f,
--6.974666360e-02f, -6.967978145e-02f, -6.961279428e-02f, -6.954570224e-02f, -6.947850545e-02f, -6.941120407e-02f, -6.934379823e-02f, -6.927628806e-02f, -6.920867372e-02f, -6.914095532e-02f,
--6.907313302e-02f, -6.900520696e-02f, -6.893717727e-02f, -6.886904409e-02f, -6.880080756e-02f, -6.873246783e-02f, -6.866402503e-02f, -6.859547930e-02f, -6.852683079e-02f, -6.845807962e-02f,
--6.838922596e-02f, -6.832026992e-02f, -6.825121167e-02f, -6.818205133e-02f, -6.811278904e-02f, -6.804342496e-02f, -6.797395922e-02f, -6.790439195e-02f, -6.783472332e-02f, -6.776495344e-02f,
--6.769508248e-02f, -6.762511056e-02f, -6.755503784e-02f, -6.748486445e-02f, -6.741459054e-02f, -6.734421624e-02f, -6.727374171e-02f, -6.720316709e-02f, -6.713249251e-02f, -6.706171812e-02f,
--6.699084407e-02f, -6.691987049e-02f, -6.684879754e-02f, -6.677762535e-02f, -6.670635407e-02f, -6.663498385e-02f, -6.656351482e-02f, -6.649194713e-02f, -6.642028093e-02f, -6.634851636e-02f,
--6.627665357e-02f, -6.620469270e-02f, -6.613263389e-02f, -6.606047729e-02f, -6.598822304e-02f, -6.591587130e-02f, -6.584342220e-02f, -6.577087589e-02f, -6.569823252e-02f, -6.562549224e-02f,
--6.555265518e-02f, -6.547972150e-02f, -6.540669134e-02f, -6.533356485e-02f, -6.526034217e-02f, -6.518702345e-02f, -6.511360884e-02f, -6.504009848e-02f, -6.496649253e-02f, -6.489279112e-02f,
--6.481899441e-02f, -6.474510254e-02f, -6.467111567e-02f, -6.459703393e-02f, -6.452285748e-02f, -6.444858646e-02f, -6.437422102e-02f, -6.429976132e-02f, -6.422520749e-02f, -6.415055969e-02f,
--6.407581806e-02f, -6.400098276e-02f, -6.392605393e-02f, -6.385103173e-02f, -6.377591629e-02f, -6.370070777e-02f, -6.362540632e-02f, -6.355001209e-02f, -6.347452523e-02f, -6.339894589e-02f,
--6.332327421e-02f, -6.324751035e-02f, -6.317165445e-02f, -6.309570668e-02f, -6.301966717e-02f, -6.294353607e-02f, -6.286731355e-02f, -6.279099974e-02f, -6.271459481e-02f, -6.263809889e-02f,
--6.256151215e-02f, -6.248483472e-02f, -6.240806677e-02f, -6.233120845e-02f, -6.225425990e-02f, -6.217722128e-02f, -6.210009273e-02f, -6.202287442e-02f, -6.194556649e-02f, -6.186816910e-02f,
--6.179068239e-02f, -6.171310652e-02f, -6.163544165e-02f, -6.155768791e-02f, -6.147984548e-02f, -6.140191449e-02f, -6.132389511e-02f, -6.124578747e-02f, -6.116759175e-02f, -6.108930809e-02f,
--6.101093664e-02f, -6.093247756e-02f, -6.085393101e-02f, -6.077529712e-02f, -6.069657607e-02f, -6.061776799e-02f, -6.053887306e-02f, -6.045989141e-02f, -6.038082321e-02f, -6.030166860e-02f,
--6.022242775e-02f, -6.014310081e-02f, -6.006368793e-02f, -5.998418926e-02f, -5.990460497e-02f, -5.982493520e-02f, -5.974518012e-02f, -5.966533987e-02f, -5.958541461e-02f, -5.950540450e-02f,
--5.942530969e-02f, -5.934513034e-02f, -5.926486661e-02f, -5.918451864e-02f, -5.910408660e-02f, -5.902357065e-02f, -5.894297093e-02f, -5.886228760e-02f, -5.878152082e-02f, -5.870067075e-02f,
--5.861973755e-02f, -5.853872136e-02f, -5.845762235e-02f, -5.837644067e-02f, -5.829517649e-02f, -5.821382995e-02f, -5.813240121e-02f, -5.805089044e-02f, -5.796929778e-02f, -5.788762341e-02f,
--5.780586746e-02f, -5.772403011e-02f, -5.764211151e-02f, -5.756011181e-02f, -5.747803118e-02f, -5.739586977e-02f, -5.731362775e-02f, -5.723130526e-02f, -5.714890248e-02f, -5.706641954e-02f,
--5.698385663e-02f, -5.690121389e-02f, -5.681849148e-02f, -5.673568956e-02f, -5.665280829e-02f, -5.656984783e-02f, -5.648680834e-02f, -5.640368998e-02f, -5.632049291e-02f, -5.623721728e-02f,
--5.615386326e-02f, -5.607043100e-02f, -5.598692067e-02f, -5.590333242e-02f, -5.581966642e-02f, -5.573592283e-02f, -5.565210180e-02f, -5.556820349e-02f, -5.548422807e-02f, -5.540017570e-02f,
--5.531604653e-02f, -5.523184074e-02f, -5.514755847e-02f, -5.506319988e-02f, -5.497876515e-02f, -5.489425443e-02f, -5.480966788e-02f, -5.472500566e-02f, -5.464026794e-02f, -5.455545487e-02f,
--5.447056662e-02f, -5.438560334e-02f, -5.430056521e-02f, -5.421545238e-02f, -5.413026501e-02f, -5.404500326e-02f, -5.395966731e-02f, -5.387425730e-02f, -5.378877340e-02f, -5.370321577e-02f,
--5.361758459e-02f, -5.353188000e-02f, -5.344610216e-02f, -5.336025126e-02f, -5.327432744e-02f, -5.318833086e-02f, -5.310226170e-02f, -5.301612011e-02f, -5.292990626e-02f, -5.284362031e-02f,
--5.275726242e-02f, -5.267083276e-02f, -5.258433149e-02f, -5.249775877e-02f, -5.241111477e-02f, -5.232439965e-02f, -5.223761357e-02f, -5.215075670e-02f, -5.206382921e-02f, -5.197683124e-02f,
--5.188976298e-02f, -5.180262458e-02f, -5.171541621e-02f, -5.162813803e-02f, -5.154079021e-02f, -5.145337290e-02f, -5.136588629e-02f, -5.127833052e-02f, -5.119070576e-02f, -5.110301219e-02f,
--5.101524996e-02f, -5.092741924e-02f, -5.083952019e-02f, -5.075155298e-02f, -5.066351777e-02f, -5.057541474e-02f, -5.048724403e-02f, -5.039900583e-02f, -5.031070029e-02f, -5.022232758e-02f,
--5.013388787e-02f, -5.004538132e-02f, -4.995680810e-02f, -4.986816837e-02f, -4.977946230e-02f, -4.969069005e-02f, -4.960185180e-02f, -4.951294770e-02f, -4.942397793e-02f, -4.933494265e-02f,
--4.924584202e-02f, -4.915667621e-02f, -4.906744539e-02f, -4.897814973e-02f, -4.888878939e-02f, -4.879936454e-02f, -4.870987534e-02f, -4.862032197e-02f, -4.853070459e-02f, -4.844102336e-02f,
--4.835127845e-02f, -4.826147004e-02f, -4.817159828e-02f, -4.808166334e-02f, -4.799166540e-02f, -4.790160462e-02f, -4.781148116e-02f, -4.772129520e-02f, -4.763104690e-02f, -4.754073643e-02f,
--4.745036396e-02f, -4.735992965e-02f, -4.726943367e-02f, -4.717887620e-02f, -4.708825739e-02f, -4.699757742e-02f, -4.690683646e-02f, -4.681603467e-02f, -4.672517222e-02f, -4.663424928e-02f,
--4.654326602e-02f, -4.645222260e-02f, -4.636111920e-02f, -4.626995598e-02f, -4.617873312e-02f, -4.608745078e-02f, -4.599610912e-02f, -4.590470833e-02f, -4.581324856e-02f, -4.572172999e-02f,
--4.563015278e-02f, -4.553851711e-02f, -4.544682314e-02f, -4.535507105e-02f, -4.526326099e-02f, -4.517139315e-02f, -4.507946769e-02f, -4.498748478e-02f, -4.489544459e-02f, -4.480334729e-02f,
--4.471119305e-02f, -4.461898203e-02f, -4.452671442e-02f, -4.443439037e-02f, -4.434201006e-02f, -4.424957365e-02f, -4.415708133e-02f, -4.406453325e-02f, -4.397192959e-02f, -4.387927052e-02f,
--4.378655621e-02f, -4.369378683e-02f, -4.360096254e-02f, -4.350808352e-02f, -4.341514995e-02f, -4.332216198e-02f, -4.322911979e-02f, -4.313602356e-02f, -4.304287344e-02f, -4.294966962e-02f,
--4.285641226e-02f, -4.276310153e-02f, -4.266973761e-02f, -4.257632067e-02f, -4.248285087e-02f, -4.238932839e-02f, -4.229575340e-02f, -4.220212606e-02f, -4.210844656e-02f, -4.201471506e-02f,
--4.192093173e-02f, -4.182709675e-02f, -4.173321028e-02f, -4.163927250e-02f, -4.154528358e-02f, -4.145124369e-02f, -4.135715300e-02f, -4.126301168e-02f, -4.116881991e-02f, -4.107457785e-02f,
--4.098028569e-02f, -4.088594358e-02f, -4.079155170e-02f, -4.069711023e-02f, -4.060261934e-02f, -4.050807919e-02f, -4.041348996e-02f, -4.031885182e-02f, -4.022416495e-02f, -4.012942951e-02f,
--4.003464568e-02f, -3.993981363e-02f, -3.984493353e-02f, -3.975000556e-02f, -3.965502988e-02f, -3.956000668e-02f, -3.946493611e-02f, -3.936981836e-02f, -3.927465360e-02f, -3.917944199e-02f,
--3.908418372e-02f, -3.898887896e-02f, -3.889352787e-02f, -3.879813063e-02f, -3.870268741e-02f, -3.860719839e-02f, -3.851166374e-02f, -3.841608363e-02f, -3.832045823e-02f, -3.822478772e-02f,
--3.812907227e-02f, -3.803331206e-02f, -3.793750725e-02f, -3.784165802e-02f, -3.774576454e-02f, -3.764982699e-02f, -3.755384554e-02f, -3.745782036e-02f, -3.736175163e-02f, -3.726563951e-02f,
--3.716948419e-02f, -3.707328583e-02f, -3.697704461e-02f, -3.688076071e-02f, -3.678443429e-02f, -3.668806553e-02f, -3.659165460e-02f, -3.649520168e-02f, -3.639870694e-02f, -3.630217056e-02f,
--3.620559270e-02f, -3.610897355e-02f, -3.601231326e-02f, -3.591561203e-02f, -3.581887002e-02f, -3.572208741e-02f, -3.562526437e-02f, -3.552840107e-02f, -3.543149770e-02f, -3.533455441e-02f,
--3.523757139e-02f, -3.514054881e-02f, -3.504348685e-02f, -3.494638567e-02f, -3.484924546e-02f, -3.475206638e-02f, -3.465484862e-02f, -3.455759234e-02f, -3.446029772e-02f, -3.436296493e-02f,
--3.426559415e-02f, -3.416818556e-02f, -3.407073932e-02f, -3.397325561e-02f, -3.387573461e-02f, -3.377817649e-02f, -3.368058142e-02f, -3.358294958e-02f, -3.348528114e-02f, -3.338757628e-02f,
--3.328983518e-02f, -3.319205800e-02f, -3.309424492e-02f, -3.299639611e-02f, -3.289851176e-02f, -3.280059204e-02f, -3.270263711e-02f, -3.260464716e-02f, -3.250662236e-02f, -3.240856288e-02f,
--3.231046890e-02f, -3.221234059e-02f, -3.211417813e-02f, -3.201598170e-02f, -3.191775146e-02f, -3.181948760e-02f, -3.172119028e-02f, -3.162285969e-02f, -3.152449599e-02f, -3.142609937e-02f,
--3.132766999e-02f, -3.122920803e-02f, -3.113071368e-02f, -3.103218709e-02f, -3.093362845e-02f, -3.083503794e-02f, -3.073641572e-02f, -3.063776197e-02f, -3.053907688e-02f, -3.044036060e-02f,
--3.034161332e-02f, -3.024283521e-02f, -3.014402646e-02f, -3.004518722e-02f, -2.994631768e-02f, -2.984741802e-02f, -2.974848841e-02f, -2.964952901e-02f, -2.955054002e-02f, -2.945152160e-02f,
--2.935247393e-02f, -2.925339719e-02f, -2.915429154e-02f, -2.905515717e-02f, -2.895599425e-02f, -2.885680296e-02f, -2.875758347e-02f, -2.865833595e-02f, -2.855906058e-02f, -2.845975754e-02f,
--2.836042701e-02f, -2.826106915e-02f, -2.816168414e-02f, -2.806227216e-02f, -2.796283339e-02f, -2.786336799e-02f, -2.776387615e-02f, -2.766435804e-02f, -2.756481383e-02f, -2.746524370e-02f,
--2.736564783e-02f, -2.726602639e-02f, -2.716637956e-02f, -2.706670751e-02f, -2.696701041e-02f, -2.686728845e-02f, -2.676754180e-02f, -2.666777063e-02f, -2.656797512e-02f, -2.646815545e-02f,
--2.636831178e-02f, -2.626844430e-02f, -2.616855318e-02f, -2.606863860e-02f, -2.596870073e-02f, -2.586873975e-02f, -2.576875583e-02f, -2.566874914e-02f, -2.556871987e-02f, -2.546866819e-02f,
--2.536859428e-02f, -2.526849831e-02f, -2.516838045e-02f, -2.506824088e-02f, -2.496807977e-02f, -2.486789731e-02f, -2.476769367e-02f, -2.466746902e-02f, -2.456722354e-02f, -2.446695740e-02f,
--2.436667078e-02f, -2.426636385e-02f, -2.416603680e-02f, -2.406568979e-02f, -2.396532300e-02f, -2.386493661e-02f, -2.376453079e-02f, -2.366410571e-02f, -2.356366156e-02f, -2.346319850e-02f,
--2.336271672e-02f, -2.326221639e-02f, -2.316169768e-02f, -2.306116077e-02f, -2.296060584e-02f, -2.286003305e-02f, -2.275944259e-02f, -2.265883464e-02f, -2.255820935e-02f, -2.245756692e-02f,
--2.235690752e-02f, -2.225623132e-02f, -2.215553849e-02f, -2.205482922e-02f, -2.195410368e-02f, -2.185336204e-02f, -2.175260447e-02f, -2.165183116e-02f, -2.155104229e-02f, -2.145023801e-02f,
--2.134941851e-02f, -2.124858397e-02f, -2.114773456e-02f, -2.104687045e-02f, -2.094599183e-02f, -2.084509886e-02f, -2.074419172e-02f, -2.064327058e-02f, -2.054233563e-02f, -2.044138703e-02f,
--2.034042496e-02f, -2.023944960e-02f, -2.013846112e-02f, -2.003745969e-02f, -1.993644550e-02f, -1.983541871e-02f, -1.973437950e-02f, -1.963332805e-02f, -1.953226453e-02f, -1.943118912e-02f,
--1.933010199e-02f, -1.922900331e-02f, -1.912789326e-02f, -1.902677202e-02f, -1.892563976e-02f, -1.882449666e-02f, -1.872334288e-02f, -1.862217861e-02f, -1.852100402e-02f, -1.841981928e-02f,
--1.831862458e-02f, -1.821742007e-02f, -1.811620595e-02f, -1.801498238e-02f, -1.791374953e-02f, -1.781250759e-02f, -1.771125673e-02f, -1.760999712e-02f, -1.750872893e-02f, -1.740745234e-02f,
--1.730616753e-02f, -1.720487467e-02f, -1.710357394e-02f, -1.700226550e-02f, -1.690094953e-02f, -1.679962622e-02f, -1.669829572e-02f, -1.659695822e-02f, -1.649561390e-02f, -1.639426291e-02f,
--1.629290545e-02f, -1.619154168e-02f, -1.609017178e-02f, -1.598879592e-02f, -1.588741427e-02f, -1.578602702e-02f, -1.568463432e-02f, -1.558323637e-02f, -1.548183333e-02f, -1.538042538e-02f,
--1.527901269e-02f, -1.517759543e-02f, -1.507617378e-02f, -1.497474791e-02f, -1.487331800e-02f, -1.477188421e-02f, -1.467044673e-02f, -1.456900573e-02f, -1.446756138e-02f, -1.436611386e-02f,
--1.426466333e-02f, -1.416320998e-02f, -1.406175397e-02f, -1.396029549e-02f, -1.385883469e-02f, -1.375737176e-02f, -1.365590688e-02f, -1.355444020e-02f, -1.345297192e-02f, -1.335150219e-02f,
--1.325003120e-02f, -1.314855911e-02f, -1.304708611e-02f, -1.294561236e-02f, -1.284413803e-02f, -1.274266331e-02f, -1.264118836e-02f, -1.253971336e-02f, -1.243823847e-02f, -1.233676388e-02f,
--1.223528976e-02f, -1.213381627e-02f, -1.203234359e-02f, -1.193087190e-02f, -1.182940137e-02f, -1.172793216e-02f, -1.162646446e-02f, -1.152499844e-02f, -1.142353426e-02f, -1.132207210e-02f,
--1.122061214e-02f, -1.111915454e-02f, -1.101769948e-02f, -1.091624714e-02f, -1.081479767e-02f, -1.071335127e-02f, -1.061190809e-02f, -1.051046831e-02f, -1.040903211e-02f, -1.030759965e-02f,
--1.020617110e-02f, -1.010474665e-02f, -1.000332646e-02f, -9.901910704e-03f, -9.800499553e-03f, -9.699093180e-03f, -9.597691756e-03f, -9.496295454e-03f, -9.394904446e-03f, -9.293518904e-03f,
--9.192138998e-03f, -9.090764901e-03f, -8.989396785e-03f, -8.888034821e-03f, -8.786679180e-03f, -8.685330035e-03f, -8.583987557e-03f, -8.482651916e-03f, -8.381323286e-03f, -8.280001836e-03f,
--8.178687738e-03f, -8.077381164e-03f, -7.976082284e-03f, -7.874791270e-03f, -7.773508293e-03f, -7.672233524e-03f, -7.570967134e-03f, -7.469709294e-03f, -7.368460174e-03f, -7.267219946e-03f,
--7.165988780e-03f, -7.064766848e-03f, -6.963554319e-03f, -6.862351365e-03f, -6.761158156e-03f, -6.659974862e-03f, -6.558801654e-03f, -6.457638703e-03f, -6.356486179e-03f, -6.255344252e-03f,
--6.154213092e-03f, -6.053092871e-03f, -5.951983757e-03f, -5.850885920e-03f, -5.749799532e-03f, -5.648724762e-03f, -5.547661780e-03f, -5.446610756e-03f, -5.345571859e-03f, -5.244545260e-03f,
--5.143531128e-03f, -5.042529632e-03f, -4.941540944e-03f, -4.840565231e-03f, -4.739602663e-03f, -4.638653410e-03f, -4.537717642e-03f, -4.436795527e-03f, -4.335887235e-03f, -4.234992935e-03f,
--4.134112796e-03f, -4.033246988e-03f, -3.932395679e-03f, -3.831559037e-03f, -3.730737233e-03f, -3.629930435e-03f, -3.529138812e-03f, -3.428362532e-03f, -3.327601764e-03f, -3.226856677e-03f,
--3.126127439e-03f, -3.025414219e-03f, -2.924717185e-03f, -2.824036505e-03f, -2.723372349e-03f, -2.622724883e-03f, -2.522094276e-03f, -2.421480696e-03f, -2.320884312e-03f, -2.220305291e-03f,
--2.119743801e-03f, -2.019200009e-03f, -1.918674085e-03f, -1.818166195e-03f, -1.717676507e-03f, -1.617205189e-03f, -1.516752407e-03f, -1.416318331e-03f, -1.315903126e-03f, -1.215506960e-03f,
--1.115130001e-03f, -1.014772416e-03f, -9.144343714e-04f, -8.141160346e-04f, -7.138175726e-04f, -6.135391523e-04f, -5.132809405e-04f, -4.130431039e-04f, -3.128258093e-04f, -2.126292233e-04f,
--1.124535124e-04f, -1.229884321e-05f, 8.783461798e-05f, 1.879467048e-04f, 2.880372509e-04f, 3.881060902e-04f, 4.881530565e-04f, 5.881779837e-04f, 6.881807059e-04f, 7.881610572e-04f,
-8.881188716e-04f, 9.880539835e-04f, 1.087966227e-03f, 1.187855437e-03f, 1.287721447e-03f, 1.387564092e-03f, 1.487383207e-03f, 1.587178627e-03f, 1.686950185e-03f, 1.786697718e-03f,
-1.886421059e-03f, 1.986120044e-03f, 2.085794508e-03f, 2.185444286e-03f, 2.285069213e-03f, 2.384669124e-03f, 2.484243855e-03f, 2.583793241e-03f, 2.683317118e-03f, 2.782815322e-03f,
-2.882287687e-03f, 2.981734050e-03f, 3.081154246e-03f, 3.180548112e-03f, 3.279915483e-03f, 3.379256196e-03f, 3.478570086e-03f, 3.577856990e-03f, 3.677116744e-03f, 3.776349184e-03f,
-3.875554147e-03f, 3.974731470e-03f, 4.073880989e-03f, 4.173002540e-03f, 4.272095961e-03f, 4.371161088e-03f, 4.470197758e-03f, 4.569205808e-03f, 4.668185076e-03f, 4.767135399e-03f,
-4.866056613e-03f, 4.964948557e-03f, 5.063811067e-03f, 5.162643981e-03f, 5.261447136e-03f, 5.360220372e-03f, 5.458963524e-03f, 5.557676431e-03f, 5.656358932e-03f, 5.755010863e-03f,
-5.853632063e-03f, 5.952222371e-03f, 6.050781624e-03f, 6.149309661e-03f, 6.247806320e-03f, 6.346271440e-03f, 6.444704860e-03f, 6.543106417e-03f, 6.641475952e-03f, 6.739813303e-03f,
-6.838118308e-03f, 6.936390808e-03f, 7.034630640e-03f, 7.132837645e-03f, 7.231011661e-03f, 7.329152529e-03f, 7.427260087e-03f, 7.525334175e-03f, 7.623374633e-03f, 7.721381300e-03f,
-7.819354017e-03f, 7.917292623e-03f, 8.015196959e-03f, 8.113066864e-03f, 8.210902179e-03f, 8.308702744e-03f, 8.406468400e-03f, 8.504198986e-03f, 8.601894344e-03f, 8.699554315e-03f,
-8.797178738e-03f, 8.894767456e-03f, 8.992320308e-03f, 9.089837136e-03f, 9.187317782e-03f, 9.284762086e-03f, 9.382169889e-03f, 9.479541034e-03f, 9.576875361e-03f, 9.674172712e-03f,
-9.771432930e-03f, 9.868655855e-03f, 9.965841330e-03f, 1.006298920e-02f, 1.016009930e-02f, 1.025717147e-02f, 1.035420557e-02f, 1.045120142e-02f, 1.054815888e-02f, 1.064507779e-02f,
-1.074195798e-02f, 1.083879930e-02f, 1.093560160e-02f, 1.103236472e-02f, 1.112908849e-02f, 1.122577277e-02f, 1.132241740e-02f, 1.141902221e-02f, 1.151558706e-02f, 1.161211179e-02f,
-1.170859623e-02f, 1.180504024e-02f, 1.190144366e-02f, 1.199780634e-02f, 1.209412810e-02f, 1.219040881e-02f, 1.228664830e-02f, 1.238284643e-02f, 1.247900302e-02f, 1.257511794e-02f,
-1.267119102e-02f, 1.276722210e-02f, 1.286321104e-02f, 1.295915767e-02f, 1.305506185e-02f, 1.315092342e-02f, 1.324674222e-02f, 1.334251810e-02f, 1.343825090e-02f, 1.353394047e-02f,
-1.362958666e-02f, 1.372518930e-02f, 1.382074826e-02f, 1.391626337e-02f, 1.401173448e-02f, 1.410716143e-02f, 1.420254408e-02f, 1.429788226e-02f, 1.439317583e-02f, 1.448842463e-02f,
-1.458362851e-02f, 1.467878732e-02f, 1.477390090e-02f, 1.486896909e-02f, 1.496399176e-02f, 1.505896873e-02f, 1.515389987e-02f, 1.524878502e-02f, 1.534362403e-02f, 1.543841673e-02f,
-1.553316300e-02f, 1.562786266e-02f, 1.572251557e-02f, 1.581712157e-02f, 1.591168052e-02f, 1.600619227e-02f, 1.610065665e-02f, 1.619507353e-02f, 1.628944275e-02f, 1.638376415e-02f,
-1.647803759e-02f, 1.657226292e-02f, 1.666643998e-02f, 1.676056862e-02f, 1.685464870e-02f, 1.694868007e-02f, 1.704266256e-02f, 1.713659604e-02f, 1.723048036e-02f, 1.732431535e-02f,
-1.741810088e-02f, 1.751183679e-02f, 1.760552294e-02f, 1.769915916e-02f, 1.779274533e-02f, 1.788628127e-02f, 1.797976686e-02f, 1.807320193e-02f, 1.816658634e-02f, 1.825991993e-02f,
-1.835320257e-02f, 1.844643410e-02f, 1.853961437e-02f, 1.863274324e-02f, 1.872582055e-02f, 1.881884616e-02f, 1.891181992e-02f, 1.900474169e-02f, 1.909761130e-02f, 1.919042863e-02f,
-1.928319351e-02f, 1.937590581e-02f, 1.946856537e-02f, 1.956117204e-02f, 1.965372569e-02f, 1.974622616e-02f, 1.983867331e-02f, 1.993106698e-02f, 2.002340704e-02f, 2.011569334e-02f,
-2.020792572e-02f, 2.030010405e-02f, 2.039222818e-02f, 2.048429795e-02f, 2.057631324e-02f, 2.066827388e-02f, 2.076017974e-02f, 2.085203067e-02f, 2.094382652e-02f, 2.103556714e-02f,
-2.112725240e-02f, 2.121888215e-02f, 2.131045625e-02f, 2.140197454e-02f, 2.149343688e-02f, 2.158484313e-02f, 2.167619315e-02f, 2.176748679e-02f, 2.185872390e-02f, 2.194990434e-02f,
-2.204102798e-02f, 2.213209466e-02f, 2.222310423e-02f, 2.231405657e-02f, 2.240495152e-02f, 2.249578894e-02f, 2.258656869e-02f, 2.267729062e-02f, 2.276795459e-02f, 2.285856046e-02f,
-2.294910809e-02f, 2.303959733e-02f, 2.313002804e-02f, 2.322040009e-02f, 2.331071331e-02f, 2.340096758e-02f, 2.349116276e-02f, 2.358129869e-02f, 2.367137525e-02f, 2.376139228e-02f,
-2.385134965e-02f, 2.394124721e-02f, 2.403108483e-02f, 2.412086236e-02f, 2.421057967e-02f, 2.430023660e-02f, 2.438983303e-02f, 2.447936880e-02f, 2.456884379e-02f, 2.465825785e-02f,
-2.474761083e-02f, 2.483690261e-02f, 2.492613304e-02f, 2.501530197e-02f, 2.510440928e-02f, 2.519345482e-02f, 2.528243845e-02f, 2.537136004e-02f, 2.546021943e-02f, 2.554901651e-02f,
-2.563775112e-02f, 2.572642313e-02f, 2.581503239e-02f, 2.590357878e-02f, 2.599206215e-02f, 2.608048237e-02f, 2.616883929e-02f, 2.625713279e-02f, 2.634536271e-02f, 2.643352893e-02f,
-2.652163130e-02f, 2.660966969e-02f, 2.669764397e-02f, 2.678555399e-02f, 2.687339962e-02f, 2.696118072e-02f, 2.704889715e-02f, 2.713654878e-02f, 2.722413548e-02f, 2.731165710e-02f,
-2.739911351e-02f, 2.748650458e-02f, 2.757383016e-02f, 2.766109013e-02f, 2.774828434e-02f, 2.783541267e-02f, 2.792247497e-02f, 2.800947111e-02f, 2.809640096e-02f, 2.818326439e-02f,
-2.827006125e-02f, 2.835679141e-02f, 2.844345474e-02f, 2.853005111e-02f, 2.861658037e-02f, 2.870304240e-02f, 2.878943707e-02f, 2.887576423e-02f, 2.896202376e-02f, 2.904821551e-02f,
-2.913433937e-02f, 2.922039520e-02f, 2.930638285e-02f, 2.939230221e-02f, 2.947815313e-02f, 2.956393549e-02f, 2.964964914e-02f, 2.973529397e-02f, 2.982086984e-02f, 2.990637661e-02f,
-2.999181416e-02f, 3.007718235e-02f, 3.016248105e-02f, 3.024771012e-02f, 3.033286945e-02f, 3.041795889e-02f, 3.050297832e-02f, 3.058792761e-02f, 3.067280662e-02f, 3.075761522e-02f,
-3.084235329e-02f, 3.092702069e-02f, 3.101161729e-02f, 3.109614297e-02f, 3.118059759e-02f, 3.126498103e-02f, 3.134929315e-02f, 3.143353382e-02f, 3.151770293e-02f, 3.160180032e-02f,
-3.168582589e-02f, 3.176977950e-02f, 3.185366101e-02f, 3.193747031e-02f, 3.202120726e-02f, 3.210487174e-02f, 3.218846362e-02f, 3.227198276e-02f, 3.235542905e-02f, 3.243880235e-02f,
-3.252210254e-02f, 3.260532949e-02f, 3.268848307e-02f, 3.277156316e-02f, 3.285456962e-02f, 3.293750234e-02f, 3.302036119e-02f, 3.310314603e-02f, 3.318585675e-02f, 3.326849321e-02f,
-3.335105529e-02f, 3.343354287e-02f, 3.351595582e-02f, 3.359829402e-02f, 3.368055733e-02f, 3.376274563e-02f, 3.384485881e-02f, 3.392689673e-02f, 3.400885926e-02f, 3.409074629e-02f,
-3.417255770e-02f, 3.425429334e-02f, 3.433595311e-02f, 3.441753688e-02f, 3.449904452e-02f, 3.458047591e-02f, 3.466183093e-02f, 3.474310945e-02f, 3.482431135e-02f, 3.490543651e-02f,
-3.498648481e-02f, 3.506745611e-02f, 3.514835030e-02f, 3.522916727e-02f, 3.530990687e-02f, 3.539056900e-02f, 3.547115353e-02f, 3.555166033e-02f, 3.563208930e-02f, 3.571244030e-02f,
-3.579271321e-02f, 3.587290792e-02f, 3.595302429e-02f, 3.603306222e-02f, 3.611302158e-02f, 3.619290225e-02f, 3.627270411e-02f, 3.635242704e-02f, 3.643207092e-02f, 3.651163563e-02f,
-3.659112104e-02f, 3.667052705e-02f, 3.674985353e-02f, 3.682910035e-02f, 3.690826742e-02f, 3.698735459e-02f, 3.706636176e-02f, 3.714528880e-02f, 3.722413560e-02f, 3.730290204e-02f,
-3.738158800e-02f, 3.746019336e-02f, 3.753871801e-02f, 3.761716183e-02f, 3.769552469e-02f, 3.777380649e-02f, 3.785200710e-02f, 3.793012641e-02f, 3.800816430e-02f, 3.808612066e-02f,
-3.816399536e-02f, 3.824178830e-02f, 3.831949935e-02f, 3.839712840e-02f, 3.847467533e-02f, 3.855214003e-02f, 3.862952238e-02f, 3.870682227e-02f, 3.878403958e-02f, 3.886117420e-02f,
-3.893822601e-02f, 3.901519489e-02f, 3.909208073e-02f, 3.916888343e-02f, 3.924560285e-02f, 3.932223890e-02f, 3.939879145e-02f, 3.947526039e-02f, 3.955164560e-02f, 3.962794699e-02f,
-3.970416442e-02f, 3.978029779e-02f, 3.985634698e-02f, 3.993231189e-02f, 4.000819239e-02f, 4.008398838e-02f, 4.015969975e-02f, 4.023532638e-02f, 4.031086816e-02f, 4.038632497e-02f,
-4.046169672e-02f, 4.053698328e-02f, 4.061218454e-02f, 4.068730039e-02f, 4.076233073e-02f, 4.083727544e-02f, 4.091213441e-02f, 4.098690752e-02f, 4.106159468e-02f, 4.113619577e-02f,
-4.121071067e-02f, 4.128513929e-02f, 4.135948150e-02f, 4.143373720e-02f, 4.150790629e-02f, 4.158198865e-02f, 4.165598417e-02f, 4.172989274e-02f, 4.180371426e-02f, 4.187744862e-02f,
-4.195109570e-02f, 4.202465541e-02f, 4.209812763e-02f, 4.217151225e-02f, 4.224480917e-02f, 4.231801828e-02f, 4.239113947e-02f, 4.246417264e-02f, 4.253711767e-02f, 4.260997447e-02f,
-4.268274292e-02f, 4.275542292e-02f, 4.282801436e-02f, 4.290051714e-02f, 4.297293115e-02f, 4.304525628e-02f, 4.311749243e-02f, 4.318963949e-02f, 4.326169737e-02f, 4.333366594e-02f,
-4.340554511e-02f, 4.347733478e-02f, 4.354903483e-02f, 4.362064517e-02f, 4.369216569e-02f, 4.376359629e-02f, 4.383493686e-02f, 4.390618729e-02f, 4.397734750e-02f, 4.404841736e-02f,
-4.411939678e-02f, 4.419028566e-02f, 4.426108389e-02f, 4.433179137e-02f, 4.440240800e-02f, 4.447293367e-02f, 4.454336829e-02f, 4.461371175e-02f, 4.468396394e-02f, 4.475412478e-02f,
-4.482419415e-02f, 4.489417195e-02f, 4.496405809e-02f, 4.503385247e-02f, 4.510355497e-02f, 4.517316551e-02f, 4.524268398e-02f, 4.531211028e-02f, 4.538144431e-02f, 4.545068597e-02f,
-4.551983516e-02f, 4.558889179e-02f, 4.565785575e-02f, 4.572672694e-02f, 4.579550527e-02f, 4.586419063e-02f, 4.593278293e-02f, 4.600128207e-02f, 4.606968794e-02f, 4.613800047e-02f,
-4.620621953e-02f, 4.627434504e-02f, 4.634237690e-02f, 4.641031502e-02f, 4.647815928e-02f, 4.654590961e-02f, 4.661356589e-02f, 4.668112804e-02f, 4.674859596e-02f, 4.681596955e-02f,
-4.688324871e-02f, 4.695043335e-02f, 4.701752338e-02f, 4.708451869e-02f, 4.715141920e-02f, 4.721822480e-02f, 4.728493540e-02f, 4.735155092e-02f, 4.741807124e-02f, 4.748449628e-02f,
-4.755082594e-02f, 4.761706014e-02f, 4.768319877e-02f, 4.774924174e-02f, 4.781518896e-02f, 4.788104033e-02f, 4.794679576e-02f, 4.801245517e-02f, 4.807801844e-02f, 4.814348550e-02f,
-4.820885625e-02f, 4.827413060e-02f, 4.833930845e-02f, 4.840438972e-02f, 4.846937430e-02f, 4.853426212e-02f, 4.859905307e-02f, 4.866374708e-02f, 4.872834403e-02f, 4.879284386e-02f,
-4.885724646e-02f, 4.892155174e-02f, 4.898575961e-02f, 4.904986999e-02f, 4.911388278e-02f, 4.917779790e-02f, 4.924161524e-02f, 4.930533474e-02f, 4.936895629e-02f, 4.943247980e-02f,
-4.949590519e-02f, 4.955923237e-02f, 4.962246125e-02f, 4.968559174e-02f, 4.974862375e-02f, 4.981155720e-02f, 4.987439200e-02f, 4.993712806e-02f, 4.999976528e-02f, 5.006230360e-02f,
-5.012474291e-02f, 5.018708314e-02f, 5.024932418e-02f, 5.031146597e-02f, 5.037350841e-02f, 5.043545141e-02f, 5.049729489e-02f, 5.055903877e-02f, 5.062068296e-02f, 5.068222736e-02f,
-5.074367191e-02f, 5.080501651e-02f, 5.086626108e-02f, 5.092740552e-02f, 5.098844977e-02f, 5.104939373e-02f, 5.111023733e-02f, 5.117098047e-02f, 5.123162307e-02f, 5.129216505e-02f,
-5.135260632e-02f, 5.141294681e-02f, 5.147318643e-02f, 5.153332510e-02f, 5.159336272e-02f, 5.165329924e-02f, 5.171313455e-02f, 5.177286857e-02f, 5.183250124e-02f, 5.189203245e-02f,
-5.195146214e-02f, 5.201079022e-02f, 5.207001661e-02f, 5.212914123e-02f, 5.218816400e-02f, 5.224708484e-02f, 5.230590366e-02f, 5.236462039e-02f, 5.242323495e-02f, 5.248174726e-02f,
-5.254015723e-02f, 5.259846479e-02f, 5.265666986e-02f, 5.271477236e-02f, 5.277277221e-02f, 5.283066934e-02f, 5.288846366e-02f, 5.294615509e-02f, 5.300374357e-02f, 5.306122900e-02f,
-5.311861132e-02f, 5.317589043e-02f, 5.323306628e-02f, 5.329013878e-02f, 5.334710785e-02f, 5.340397342e-02f, 5.346073540e-02f, 5.351739373e-02f, 5.357394833e-02f, 5.363039912e-02f,
-5.368674602e-02f, 5.374298897e-02f, 5.379912788e-02f, 5.385516268e-02f, 5.391109329e-02f, 5.396691964e-02f, 5.402264165e-02f, 5.407825926e-02f, 5.413377238e-02f, 5.418918094e-02f,
-5.424448488e-02f, 5.429968410e-02f, 5.435477855e-02f, 5.440976814e-02f, 5.446465281e-02f, 5.451943247e-02f, 5.457410707e-02f, 5.462867652e-02f, 5.468314076e-02f, 5.473749971e-02f,
-5.479175329e-02f, 5.484590145e-02f, 5.489994409e-02f, 5.495388117e-02f, 5.500771259e-02f, 5.506143830e-02f, 5.511505822e-02f, 5.516857229e-02f, 5.522198042e-02f, 5.527528255e-02f,
-5.532847861e-02f, 5.538156853e-02f, 5.543455224e-02f, 5.548742967e-02f, 5.554020076e-02f, 5.559286542e-02f, 5.564542360e-02f, 5.569787523e-02f, 5.575022023e-02f, 5.580245854e-02f,
-5.585459009e-02f, 5.590661481e-02f, 5.595853263e-02f, 5.601034350e-02f, 5.606204733e-02f, 5.611364406e-02f, 5.616513363e-02f, 5.621651596e-02f, 5.626779100e-02f, 5.631895867e-02f,
-5.637001892e-02f, 5.642097166e-02f, 5.647181685e-02f, 5.652255440e-02f, 5.657318426e-02f, 5.662370637e-02f, 5.667412064e-02f, 5.672442703e-02f, 5.677462547e-02f, 5.682471589e-02f,
-5.687469823e-02f, 5.692457242e-02f, 5.697433840e-02f, 5.702399611e-02f, 5.707354548e-02f, 5.712298645e-02f, 5.717231895e-02f, 5.722154293e-02f, 5.727065832e-02f, 5.731966506e-02f,
-5.736856309e-02f, 5.741735234e-02f, 5.746603275e-02f, 5.751460426e-02f, 5.756306682e-02f, 5.761142035e-02f, 5.765966479e-02f, 5.770780009e-02f, 5.775582619e-02f, 5.780374302e-02f,
-5.785155053e-02f, 5.789924865e-02f, 5.794683732e-02f, 5.799431649e-02f, 5.804168610e-02f, 5.808894607e-02f, 5.813609637e-02f, 5.818313692e-02f, 5.823006767e-02f, 5.827688856e-02f,
-5.832359954e-02f, 5.837020053e-02f, 5.841669150e-02f, 5.846307237e-02f, 5.850934309e-02f, 5.855550360e-02f, 5.860155385e-02f, 5.864749377e-02f, 5.869332332e-02f, 5.873904244e-02f,
-5.878465106e-02f, 5.883014914e-02f, 5.887553661e-02f, 5.892081343e-02f, 5.896597953e-02f, 5.901103486e-02f, 5.905597936e-02f, 5.910081298e-02f, 5.914553567e-02f, 5.919014737e-02f,
-5.923464803e-02f, 5.927903759e-02f, 5.932331599e-02f, 5.936748319e-02f, 5.941153913e-02f, 5.945548376e-02f, 5.949931702e-02f, 5.954303886e-02f, 5.958664923e-02f, 5.963014807e-02f,
-5.967353534e-02f, 5.971681098e-02f, 5.975997494e-02f, 5.980302716e-02f, 5.984596760e-02f, 5.988879620e-02f, 5.993151292e-02f, 5.997411769e-02f, 6.001661048e-02f, 6.005899123e-02f,
-6.010125989e-02f, 6.014341640e-02f, 6.018546073e-02f, 6.022739281e-02f, 6.026921261e-02f, 6.031092006e-02f, 6.035251513e-02f, 6.039399776e-02f, 6.043536790e-02f, 6.047662551e-02f,
-6.051777053e-02f, 6.055880292e-02f, 6.059972264e-02f, 6.064052962e-02f, 6.068122383e-02f, 6.072180521e-02f, 6.076227373e-02f, 6.080262933e-02f, 6.084287196e-02f, 6.088300159e-02f,
-6.092301815e-02f, 6.096292162e-02f, 6.100271193e-02f, 6.104238905e-02f, 6.108195293e-02f, 6.112140352e-02f, 6.116074078e-02f, 6.119996467e-02f, 6.123907513e-02f, 6.127807213e-02f,
-6.131695561e-02f, 6.135572554e-02f, 6.139438188e-02f, 6.143292457e-02f, 6.147135357e-02f, 6.150966885e-02f, 6.154787035e-02f, 6.158595804e-02f, 6.162393186e-02f, 6.166179179e-02f,
-6.169953777e-02f, 6.173716977e-02f, 6.177468774e-02f, 6.181209164e-02f, 6.184938143e-02f, 6.188655706e-02f, 6.192361851e-02f, 6.196056571e-02f, 6.199739864e-02f, 6.203411726e-02f,
-6.207072152e-02f, 6.210721138e-02f, 6.214358680e-02f, 6.217984774e-02f, 6.221599417e-02f, 6.225202605e-02f, 6.228794333e-02f, 6.232374597e-02f, 6.235943394e-02f, 6.239500720e-02f,
-6.243046571e-02f, 6.246580944e-02f, 6.250103833e-02f, 6.253615236e-02f, 6.257115149e-02f, 6.260603569e-02f, 6.264080490e-02f, 6.267545910e-02f, 6.270999826e-02f, 6.274442232e-02f,
-6.277873126e-02f, 6.281292505e-02f, 6.284700364e-02f, 6.288096700e-02f, 6.291481509e-02f, 6.294854788e-02f, 6.298216533e-02f, 6.301566741e-02f, 6.304905409e-02f, 6.308232532e-02f,
-6.311548108e-02f, 6.314852132e-02f, 6.318144603e-02f, 6.321425515e-02f, 6.324694867e-02f, 6.327952654e-02f, 6.331198873e-02f, 6.334433522e-02f, 6.337656595e-02f, 6.340868092e-02f,
-6.344068007e-02f, 6.347256339e-02f, 6.350433083e-02f, 6.353598237e-02f, 6.356751797e-02f, 6.359893761e-02f, 6.363024125e-02f, 6.366142885e-02f, 6.369250040e-02f, 6.372345586e-02f,
-6.375429520e-02f, 6.378501839e-02f, 6.381562539e-02f, 6.384611619e-02f, 6.387649075e-02f, 6.390674904e-02f, 6.393689102e-02f, 6.396691669e-02f, 6.399682599e-02f, 6.402661891e-02f,
-6.405629542e-02f, 6.408585549e-02f, 6.411529909e-02f, 6.414462619e-02f, 6.417383677e-02f, 6.420293080e-02f, 6.423190825e-02f, 6.426076909e-02f, 6.428951331e-02f, 6.431814086e-02f,
-6.434665173e-02f, 6.437504589e-02f, 6.440332331e-02f, 6.443148397e-02f, 6.445952784e-02f, 6.448745490e-02f, 6.451526512e-02f, 6.454295848e-02f, 6.457053495e-02f, 6.459799451e-02f,
-6.462533713e-02f, 6.465256279e-02f, 6.467967147e-02f, 6.470666314e-02f, 6.473353778e-02f, 6.476029536e-02f, 6.478693587e-02f, 6.481345927e-02f, 6.483986555e-02f, 6.486615469e-02f,
-6.489232666e-02f, 6.491838144e-02f, 6.494431901e-02f, 6.497013934e-02f, 6.499584242e-02f, 6.502142822e-02f, 6.504689673e-02f, 6.507224792e-02f, 6.509748177e-02f, 6.512259826e-02f,
-6.514759738e-02f, 6.517247909e-02f, 6.519724339e-02f, 6.522189025e-02f, 6.524641965e-02f, 6.527083157e-02f, 6.529512600e-02f, 6.531930291e-02f, 6.534336229e-02f, 6.536730411e-02f,
-6.539112837e-02f, 6.541483504e-02f, 6.543842410e-02f, 6.546189554e-02f, 6.548524934e-02f, 6.550848549e-02f, 6.553160395e-02f, 6.555460473e-02f, 6.557748780e-02f, 6.560025314e-02f,
-6.562290074e-02f, 6.564543059e-02f, 6.566784266e-02f, 6.569013695e-02f, 6.571231343e-02f, 6.573437210e-02f, 6.575631293e-02f, 6.577813591e-02f, 6.579984103e-02f, 6.582142828e-02f,
-6.584289763e-02f, 6.586424908e-02f, 6.588548261e-02f, 6.590659820e-02f, 6.592759585e-02f, 6.594847555e-02f, 6.596923727e-02f, 6.598988100e-02f, 6.601040674e-02f, 6.603081447e-02f,
-6.605110418e-02f, 6.607127586e-02f, 6.609132949e-02f, 6.611126506e-02f, 6.613108257e-02f, 6.615078200e-02f, 6.617036334e-02f, 6.618982657e-02f, 6.620917170e-02f, 6.622839871e-02f,
-6.624750758e-02f, 6.626649831e-02f, 6.628537089e-02f, 6.630412531e-02f, 6.632276157e-02f, 6.634127964e-02f, 6.635967952e-02f, 6.637796121e-02f, 6.639612469e-02f, 6.641416996e-02f,
-6.643209701e-02f, 6.644990583e-02f, 6.646759642e-02f, 6.648516875e-02f, 6.650262284e-02f, 6.651995867e-02f, 6.653717623e-02f, 6.655427552e-02f, 6.657125654e-02f, 6.658811926e-02f,
-6.660486370e-02f, 6.662148984e-02f, 6.663799767e-02f, 6.665438720e-02f, 6.667065842e-02f, 6.668681132e-02f, 6.670284589e-02f, 6.671876214e-02f, 6.673456005e-02f, 6.675023963e-02f,
-6.676580086e-02f, 6.678124375e-02f, 6.679656830e-02f, 6.681177449e-02f, 6.682686233e-02f, 6.684183181e-02f, 6.685668293e-02f, 6.687141568e-02f, 6.688603007e-02f, 6.690052609e-02f,
-6.691490375e-02f, 6.692916303e-02f, 6.694330393e-02f, 6.695732646e-02f, 6.697123062e-02f, 6.698501640e-02f, 6.699868380e-02f, 6.701223282e-02f, 6.702566346e-02f, 6.703897572e-02f,
-6.705216960e-02f, 6.706524510e-02f, 6.707820223e-02f, 6.709104097e-02f, 6.710376134e-02f, 6.711636333e-02f, 6.712884695e-02f, 6.714121219e-02f, 6.715345906e-02f, 6.716558756e-02f,
-6.717759769e-02f, 6.718948945e-02f, 6.720126284e-02f, 6.721291788e-02f, 6.722445456e-02f, 6.723587288e-02f, 6.724717285e-02f, 6.725835446e-02f, 6.726941774e-02f, 6.728036267e-02f,
-6.729118926e-02f, 6.730189751e-02f, 6.731248744e-02f, 6.732295904e-02f, 6.733331233e-02f, 6.734354729e-02f, 6.735366395e-02f, 6.736366230e-02f, 6.737354235e-02f, 6.738330411e-02f,
-6.739294758e-02f, 6.740247276e-02f, 6.741187968e-02f, 6.742116832e-02f, 6.743033870e-02f, 6.743939083e-02f, 6.744832471e-02f, 6.745714035e-02f, 6.746583775e-02f, 6.747441694e-02f,
-6.748287790e-02f, 6.749122065e-02f, 6.749944521e-02f, 6.750755157e-02f, 6.751553974e-02f, 6.752340975e-02f, 6.753116158e-02f, 6.753879526e-02f, 6.754631080e-02f, 6.755370820e-02f,
-6.756098747e-02f, 6.756814862e-02f, 6.757519167e-02f, 6.758211662e-02f, 6.758892348e-02f, 6.759561227e-02f, 6.760218300e-02f, 6.760863568e-02f, 6.761497031e-02f, 6.762118692e-02f,
-6.762728551e-02f, 6.763326609e-02f, 6.763912869e-02f, 6.764487330e-02f, 6.765049994e-02f, 6.765600864e-02f, 6.766139938e-02f, 6.766667221e-02f, 6.767182711e-02f, 6.767686412e-02f,
-6.768178324e-02f, 6.768658448e-02f, 6.769126787e-02f, 6.769583341e-02f, 6.770028113e-02f, 6.770461103e-02f, 6.770882313e-02f, 6.771291744e-02f, 6.771689399e-02f, 6.772075278e-02f,
-6.772449384e-02f, 6.772811717e-02f, 6.773162280e-02f, 6.773501074e-02f, 6.773828101e-02f, 6.774143362e-02f, 6.774446859e-02f, 6.774738595e-02f, 6.775018570e-02f, 6.775286786e-02f,
-6.775543245e-02f, 6.775787950e-02f, 6.776020901e-02f, 6.776242101e-02f, 6.776451552e-02f, 6.776649254e-02f, 6.776835211e-02f, 6.777009425e-02f, 6.777171896e-02f, 6.777322628e-02f,
-6.777461621e-02f, 6.777588879e-02f, 6.777704402e-02f, 6.777808194e-02f, 6.777900256e-02f, 6.777980590e-02f, 6.778049198e-02f, 6.778106083e-02f, 6.778151246e-02f, 6.778184691e-02f,
-6.778206418e-02f, 6.778216430e-02f, 6.778214729e-02f, 6.778201318e-02f, 6.778176198e-02f, 6.778139373e-02f, 6.778090844e-02f, 6.778030613e-02f, 6.777958684e-02f, 6.777875057e-02f,
-6.777779737e-02f, 6.777672724e-02f, 6.777554022e-02f, 6.777423633e-02f, 6.777281559e-02f, 6.777127803e-02f, 6.776962367e-02f, 6.776785253e-02f, 6.776596465e-02f, 6.776396005e-02f,
-6.776183875e-02f, 6.775960078e-02f, 6.775724617e-02f, 6.775477494e-02f, 6.775218711e-02f, 6.774948272e-02f, 6.774666179e-02f, 6.774372435e-02f, 6.774067042e-02f, 6.773750004e-02f,
-6.773421323e-02f, 6.773081001e-02f, 6.772729042e-02f, 6.772365448e-02f, 6.771990222e-02f, 6.771603368e-02f, 6.771204887e-02f, 6.770794783e-02f, 6.770373059e-02f, 6.769939717e-02f,
-6.769494761e-02f, 6.769038193e-02f, 6.768570017e-02f, 6.768090236e-02f, 6.767598851e-02f, 6.767095868e-02f, 6.766581288e-02f, 6.766055114e-02f, 6.765517351e-02f, 6.764968000e-02f,
-6.764407065e-02f, 6.763834549e-02f, 6.763250456e-02f, 6.762654788e-02f, 6.762047549e-02f, 6.761428742e-02f, 6.760798370e-02f, 6.760156437e-02f, 6.759502945e-02f, 6.758837898e-02f,
-6.758161300e-02f, 6.757473153e-02f, 6.756773462e-02f, 6.756062229e-02f, 6.755339458e-02f, 6.754605152e-02f, 6.753859314e-02f, 6.753101949e-02f, 6.752333060e-02f, 6.751552649e-02f,
-6.750760722e-02f, 6.749957280e-02f, 6.749142328e-02f, 6.748315869e-02f, 6.747477908e-02f, 6.746628446e-02f, 6.745767489e-02f, 6.744895040e-02f, 6.744011102e-02f, 6.743115679e-02f,
-6.742208774e-02f, 6.741290393e-02f, 6.740360537e-02f, 6.739419212e-02f, 6.738466420e-02f, 6.737502166e-02f, 6.736526453e-02f, 6.735539285e-02f, 6.734540666e-02f, 6.733530601e-02f,
-6.732509092e-02f, 6.731476144e-02f, 6.730431760e-02f, 6.729375945e-02f, 6.728308702e-02f, 6.727230036e-02f, 6.726139951e-02f, 6.725038450e-02f, 6.723925537e-02f, 6.722801218e-02f,
-6.721665494e-02f, 6.720518372e-02f, 6.719359855e-02f, 6.718189946e-02f, 6.717008651e-02f, 6.715815973e-02f, 6.714611916e-02f, 6.713396485e-02f, 6.712169685e-02f, 6.710931518e-02f,
-6.709681990e-02f, 6.708421104e-02f, 6.707148865e-02f, 6.705865278e-02f, 6.704570346e-02f, 6.703264075e-02f, 6.701946467e-02f, 6.700617529e-02f, 6.699277263e-02f, 6.697925675e-02f,
-6.696562769e-02f, 6.695188550e-02f, 6.693803022e-02f, 6.692406189e-02f, 6.690998056e-02f, 6.689578627e-02f, 6.688147907e-02f, 6.686705901e-02f, 6.685252614e-02f, 6.683788049e-02f,
-6.682312211e-02f, 6.680825106e-02f, 6.679326737e-02f, 6.677817110e-02f, 6.676296229e-02f, 6.674764098e-02f, 6.673220724e-02f, 6.671666109e-02f, 6.670100260e-02f, 6.668523180e-02f,
-6.666934875e-02f, 6.665335350e-02f, 6.663724609e-02f, 6.662102657e-02f, 6.660469499e-02f, 6.658825140e-02f, 6.657169586e-02f, 6.655502839e-02f, 6.653824907e-02f, 6.652135794e-02f,
-6.650435504e-02f, 6.648724043e-02f, 6.647001415e-02f, 6.645267627e-02f, 6.643522682e-02f, 6.641766586e-02f, 6.639999345e-02f, 6.638220962e-02f, 6.636431444e-02f, 6.634630795e-02f,
-6.632819020e-02f, 6.630996126e-02f, 6.629162116e-02f, 6.627316997e-02f, 6.625460773e-02f, 6.623593450e-02f, 6.621715032e-02f, 6.619825526e-02f, 6.617924937e-02f, 6.616013269e-02f,
-6.614090529e-02f, 6.612156721e-02f, 6.610211851e-02f, 6.608255925e-02f, 6.606288947e-02f, 6.604310924e-02f, 6.602321860e-02f, 6.600321761e-02f, 6.598310633e-02f, 6.596288481e-02f,
-6.594255311e-02f, 6.592211128e-02f, 6.590155938e-02f, 6.588089746e-02f, 6.586012558e-02f, 6.583924379e-02f, 6.581825216e-02f, 6.579715073e-02f, 6.577593957e-02f, 6.575461873e-02f,
-6.573318827e-02f, 6.571164825e-02f, 6.568999871e-02f, 6.566823973e-02f, 6.564637136e-02f, 6.562439365e-02f, 6.560230666e-02f, 6.558011046e-02f, 6.555780510e-02f, 6.553539064e-02f,
-6.551286713e-02f, 6.549023464e-02f, 6.546749323e-02f, 6.544464295e-02f, 6.542168387e-02f, 6.539861604e-02f, 6.537543953e-02f, 6.535215439e-02f, 6.532876068e-02f, 6.530525846e-02f,
-6.528164780e-02f, 6.525792876e-02f, 6.523410139e-02f, 6.521016576e-02f, 6.518612193e-02f, 6.516196996e-02f, 6.513770990e-02f, 6.511334183e-02f, 6.508886581e-02f, 6.506428189e-02f,
-6.503959014e-02f, 6.501479062e-02f, 6.498988339e-02f, 6.496486852e-02f, 6.493974607e-02f, 6.491451610e-02f, 6.488917868e-02f, 6.486373386e-02f, 6.483818172e-02f, 6.481252231e-02f,
-6.478675571e-02f, 6.476088196e-02f, 6.473490115e-02f, 6.470881332e-02f, 6.468261856e-02f, 6.465631691e-02f, 6.462990845e-02f, 6.460339325e-02f, 6.457677136e-02f, 6.455004285e-02f,
-6.452320779e-02f, 6.449626625e-02f, 6.446921828e-02f, 6.444206396e-02f, 6.441480335e-02f, 6.438743652e-02f, 6.435996354e-02f, 6.433238446e-02f, 6.430469937e-02f, 6.427690832e-02f,
-6.424901138e-02f, 6.422100863e-02f, 6.419290012e-02f, 6.416468592e-02f, 6.413636611e-02f, 6.410794076e-02f, 6.407940992e-02f, 6.405077367e-02f, 6.402203208e-02f, 6.399318521e-02f,
-6.396423314e-02f, 6.393517593e-02f, 6.390601365e-02f, 6.387674638e-02f, 6.384737418e-02f, 6.381789712e-02f, 6.378831527e-02f, 6.375862870e-02f, 6.372883749e-02f, 6.369894170e-02f,
-6.366894140e-02f, 6.363883666e-02f, 6.360862756e-02f, 6.357831416e-02f, 6.354789654e-02f, 6.351737477e-02f, 6.348674892e-02f, 6.345601906e-02f, 6.342518526e-02f, 6.339424760e-02f,
-6.336320615e-02f, 6.333206097e-02f, 6.330081215e-02f, 6.326945975e-02f, 6.323800386e-02f, 6.320644453e-02f, 6.317478184e-02f, 6.314301588e-02f, 6.311114670e-02f, 6.307917439e-02f,
-6.304709902e-02f, 6.301492066e-02f, 6.298263938e-02f, 6.295025527e-02f, 6.291776839e-02f, 6.288517883e-02f, 6.285248664e-02f, 6.281969192e-02f, 6.278679473e-02f, 6.275379516e-02f,
-6.272069326e-02f, 6.268748913e-02f, 6.265418284e-02f, 6.262077446e-02f, 6.258726406e-02f, 6.255365173e-02f, 6.251993755e-02f, 6.248612158e-02f, 6.245220390e-02f, 6.241818460e-02f,
-6.238406375e-02f, 6.234984142e-02f, 6.231551769e-02f, 6.228109265e-02f, 6.224656636e-02f, 6.221193891e-02f, 6.217721037e-02f, 6.214238083e-02f, 6.210745035e-02f, 6.207241903e-02f,
-6.203728693e-02f, 6.200205413e-02f, 6.196672073e-02f, 6.193128678e-02f, 6.189575238e-02f, 6.186011760e-02f, 6.182438253e-02f, 6.178854723e-02f, 6.175261180e-02f, 6.171657631e-02f,
-6.168044084e-02f, 6.164420547e-02f, 6.160787029e-02f, 6.157143537e-02f, 6.153490079e-02f, 6.149826664e-02f, 6.146153299e-02f, 6.142469993e-02f, 6.138776754e-02f, 6.135073590e-02f,
-6.131360509e-02f, 6.127637519e-02f, 6.123904629e-02f, 6.120161847e-02f, 6.116409181e-02f, 6.112646638e-02f, 6.108874229e-02f, 6.105091960e-02f, 6.101299840e-02f, 6.097497878e-02f,
-6.093686081e-02f, 6.089864459e-02f, 6.086033019e-02f, 6.082191769e-02f, 6.078340719e-02f, 6.074479876e-02f, 6.070609249e-02f, 6.066728847e-02f, 6.062838677e-02f, 6.058938748e-02f,
-6.055029070e-02f, 6.051109649e-02f, 6.047180495e-02f, 6.043241617e-02f, 6.039293022e-02f, 6.035334720e-02f, 6.031366718e-02f, 6.027389026e-02f, 6.023401652e-02f, 6.019404604e-02f,
-6.015397892e-02f, 6.011381524e-02f, 6.007355508e-02f, 6.003319854e-02f, 5.999274569e-02f, 5.995219664e-02f, 5.991155145e-02f, 5.987081022e-02f, 5.982997304e-02f, 5.978904000e-02f,
-5.974801118e-02f, 5.970688667e-02f, 5.966566656e-02f, 5.962435094e-02f, 5.958293989e-02f, 5.954143351e-02f, 5.949983187e-02f, 5.945813508e-02f, 5.941634322e-02f, 5.937445637e-02f,
-5.933247464e-02f, 5.929039810e-02f, 5.924822685e-02f, 5.920596097e-02f, 5.916360056e-02f, 5.912114571e-02f, 5.907859650e-02f, 5.903595302e-02f, 5.899321538e-02f, 5.895038365e-02f,
-5.890745792e-02f, 5.886443830e-02f, 5.882132486e-02f, 5.877811770e-02f, 5.873481692e-02f, 5.869142259e-02f, 5.864793482e-02f, 5.860435369e-02f, 5.856067931e-02f, 5.851691175e-02f,
-5.847305111e-02f, 5.842909748e-02f, 5.838505096e-02f, 5.834091163e-02f, 5.829667960e-02f, 5.825235495e-02f, 5.820793777e-02f, 5.816342817e-02f, 5.811882622e-02f, 5.807413203e-02f,
-5.802934569e-02f, 5.798446729e-02f, 5.793949693e-02f, 5.789443469e-02f, 5.784928068e-02f, 5.780403499e-02f, 5.775869771e-02f, 5.771326893e-02f, 5.766774876e-02f, 5.762213728e-02f,
-5.757643459e-02f, 5.753064078e-02f, 5.748475596e-02f, 5.743878021e-02f, 5.739271363e-02f, 5.734655632e-02f, 5.730030837e-02f, 5.725396987e-02f, 5.720754093e-02f, 5.716102164e-02f,
-5.711441210e-02f, 5.706771240e-02f, 5.702092263e-02f, 5.697404290e-02f, 5.692707330e-02f, 5.688001393e-02f, 5.683286488e-02f, 5.678562626e-02f, 5.673829816e-02f, 5.669088067e-02f,
-5.664337390e-02f, 5.659577794e-02f, 5.654809289e-02f, 5.650031884e-02f, 5.645245591e-02f, 5.640450417e-02f, 5.635646374e-02f, 5.630833471e-02f, 5.626011718e-02f, 5.621181125e-02f,
-5.616341701e-02f, 5.611493457e-02f, 5.606636402e-02f, 5.601770547e-02f, 5.596895901e-02f, 5.592012475e-02f, 5.587120278e-02f, 5.582219320e-02f, 5.577309611e-02f, 5.572391161e-02f,
-5.567463981e-02f, 5.562528079e-02f, 5.557583468e-02f, 5.552630155e-02f, 5.547668152e-02f, 5.542697468e-02f, 5.537718114e-02f, 5.532730100e-02f, 5.527733436e-02f, 5.522728131e-02f,
-5.517714197e-02f, 5.512691642e-02f, 5.507660478e-02f, 5.502620715e-02f, 5.497572363e-02f, 5.492515431e-02f, 5.487449931e-02f, 5.482375872e-02f, 5.477293265e-02f, 5.472202120e-02f,
-5.467102447e-02f, 5.461994256e-02f, 5.456877558e-02f, 5.451752364e-02f, 5.446618683e-02f, 5.441476525e-02f, 5.436325902e-02f, 5.431166823e-02f, 5.425999299e-02f, 5.420823340e-02f,
-5.415638957e-02f, 5.410446160e-02f, 5.405244959e-02f, 5.400035365e-02f, 5.394817388e-02f, 5.389591039e-02f, 5.384356329e-02f, 5.379113267e-02f, 5.373861864e-02f, 5.368602131e-02f,
-5.363334079e-02f, 5.358057717e-02f, 5.352773056e-02f, 5.347480108e-02f, 5.342178881e-02f, 5.336869388e-02f, 5.331551638e-02f, 5.326225643e-02f, 5.320891412e-02f, 5.315548957e-02f,
-5.310198288e-02f, 5.304839416e-02f, 5.299472351e-02f, 5.294097104e-02f, 5.288713686e-02f, 5.283322108e-02f, 5.277922379e-02f, 5.272514512e-02f, 5.267098516e-02f, 5.261674403e-02f,
-5.256242183e-02f, 5.250801866e-02f, 5.245353465e-02f, 5.239896989e-02f, 5.234432449e-02f, 5.228959857e-02f, 5.223479222e-02f, 5.217990556e-02f, 5.212493870e-02f, 5.206989174e-02f,
-5.201476480e-02f, 5.195955798e-02f, 5.190427139e-02f, 5.184890515e-02f, 5.179345935e-02f, 5.173793411e-02f, 5.168232955e-02f, 5.162664576e-02f, 5.157088286e-02f, 5.151504095e-02f,
-5.145912016e-02f, 5.140312058e-02f, 5.134704233e-02f, 5.129088552e-02f, 5.123465026e-02f, 5.117833666e-02f, 5.112194483e-02f, 5.106547488e-02f, 5.100892692e-02f, 5.095230106e-02f,
-5.089559741e-02f, 5.083881609e-02f, 5.078195721e-02f, 5.072502088e-02f, 5.066800720e-02f, 5.061091629e-02f, 5.055374827e-02f, 5.049650323e-02f, 5.043918131e-02f, 5.038178260e-02f,
-5.032430722e-02f, 5.026675529e-02f, 5.020912691e-02f, 5.015142220e-02f, 5.009364126e-02f, 5.003578422e-02f, 4.997785119e-02f, 4.991984227e-02f, 4.986175759e-02f, 4.980359725e-02f,
-4.974536136e-02f, 4.968705005e-02f, 4.962866342e-02f, 4.957020159e-02f, 4.951166468e-02f, 4.945305278e-02f, 4.939436603e-02f, 4.933560453e-02f, 4.927676840e-02f, 4.921785775e-02f,
-4.915887270e-02f, 4.909981336e-02f, 4.904067984e-02f, 4.898147226e-02f, 4.892219074e-02f, 4.886283538e-02f, 4.880340631e-02f, 4.874390364e-02f, 4.868432749e-02f, 4.862467796e-02f,
-4.856495518e-02f, 4.850515926e-02f, 4.844529031e-02f, 4.838534846e-02f, 4.832533382e-02f, 4.826524650e-02f, 4.820508662e-02f, 4.814485429e-02f, 4.808454964e-02f, 4.802417277e-02f,
-4.796372381e-02f, 4.790320287e-02f, 4.784261007e-02f, 4.778194552e-02f, 4.772120934e-02f, 4.766040165e-02f, 4.759952257e-02f, 4.753857221e-02f, 4.747755068e-02f, 4.741645812e-02f,
-4.735529462e-02f, 4.729406032e-02f, 4.723275533e-02f, 4.717137977e-02f, 4.710993375e-02f, 4.704841739e-02f, 4.698683082e-02f, 4.692517414e-02f, 4.686344748e-02f, 4.680165095e-02f,
-4.673978468e-02f, 4.667784878e-02f, 4.661584337e-02f, 4.655376857e-02f, 4.649162450e-02f, 4.642941127e-02f, 4.636712901e-02f, 4.630477784e-02f, 4.624235787e-02f, 4.617986922e-02f,
-4.611731201e-02f, 4.605468637e-02f, 4.599199241e-02f, 4.592923025e-02f, 4.586640001e-02f, 4.580350182e-02f, 4.574053578e-02f, 4.567750202e-02f, 4.561440067e-02f, 4.555123184e-02f,
-4.548799564e-02f, 4.542469221e-02f, 4.536132167e-02f, 4.529788412e-02f, 4.523437970e-02f, 4.517080852e-02f, 4.510717071e-02f, 4.504346638e-02f, 4.497969566e-02f, 4.491585867e-02f,
-4.485195553e-02f, 4.478798636e-02f, 4.472395128e-02f, 4.465985042e-02f, 4.459568389e-02f, 4.453145181e-02f, 4.446715432e-02f, 4.440279152e-02f, 4.433836355e-02f, 4.427387052e-02f,
-4.420931256e-02f, 4.414468979e-02f, 4.408000233e-02f, 4.401525030e-02f, 4.395043383e-02f, 4.388555303e-02f, 4.382060804e-02f, 4.375559897e-02f, 4.369052595e-02f, 4.362538909e-02f,
-4.356018853e-02f, 4.349492439e-02f, 4.342959678e-02f, 4.336420583e-02f, 4.329875167e-02f, 4.323323442e-02f, 4.316765420e-02f, 4.310201114e-02f, 4.303630536e-02f, 4.297053697e-02f,
-4.290470612e-02f, 4.283881292e-02f, 4.277285749e-02f, 4.270683996e-02f, 4.264076045e-02f, 4.257461909e-02f, 4.250841600e-02f, 4.244215131e-02f, 4.237582514e-02f, 4.230943761e-02f,
-4.224298886e-02f, 4.217647900e-02f, 4.210990816e-02f, 4.204327646e-02f, 4.197658403e-02f, 4.190983100e-02f, 4.184301748e-02f, 4.177614361e-02f, 4.170920951e-02f, 4.164221531e-02f,
-4.157516113e-02f, 4.150804709e-02f, 4.144087333e-02f, 4.137363996e-02f, 4.130634712e-02f, 4.123899492e-02f, 4.117158351e-02f, 4.110411299e-02f, 4.103658350e-02f, 4.096899517e-02f,
-4.090134811e-02f, 4.083364247e-02f, 4.076587835e-02f, 4.069805590e-02f, 4.063017523e-02f, 4.056223647e-02f, 4.049423975e-02f, 4.042618520e-02f, 4.035807294e-02f, 4.028990310e-02f,
-4.022167581e-02f, 4.015339119e-02f, 4.008504937e-02f, 4.001665048e-02f, 3.994819465e-02f, 3.987968200e-02f, 3.981111266e-02f, 3.974248676e-02f, 3.967380443e-02f, 3.960506578e-02f,
-3.953627096e-02f, 3.946742009e-02f, 3.939851330e-02f, 3.932955071e-02f, 3.926053245e-02f, 3.919145866e-02f, 3.912232945e-02f, 3.905314496e-02f, 3.898390532e-02f, 3.891461065e-02f,
-3.884526108e-02f, 3.877585675e-02f, 3.870639778e-02f, 3.863688429e-02f, 3.856731642e-02f, 3.849769430e-02f, 3.842801806e-02f, 3.835828781e-02f, 3.828850370e-02f, 3.821866586e-02f,
-3.814877440e-02f, 3.807882947e-02f, 3.800883118e-02f, 3.793877968e-02f, 3.786867508e-02f, 3.779851753e-02f, 3.772830714e-02f, 3.765804404e-02f, 3.758772838e-02f, 3.751736027e-02f,
-3.744693985e-02f, 3.737646725e-02f, 3.730594259e-02f, 3.723536601e-02f, 3.716473764e-02f, 3.709405760e-02f, 3.702332603e-02f, 3.695254306e-02f, 3.688170882e-02f, 3.681082344e-02f,
-3.673988704e-02f, 3.666889977e-02f, 3.659786174e-02f, 3.652677310e-02f, 3.645563397e-02f, 3.638444448e-02f, 3.631320476e-02f, 3.624191495e-02f, 3.617057517e-02f, 3.609918556e-02f,
-3.602774625e-02f, 3.595625737e-02f, 3.588471904e-02f, 3.581313141e-02f, 3.574149460e-02f, 3.566980874e-02f, 3.559807397e-02f, 3.552629042e-02f, 3.545445821e-02f, 3.538257749e-02f,
-3.531064837e-02f, 3.523867100e-02f, 3.516664551e-02f, 3.509457202e-02f, 3.502245068e-02f, 3.495028160e-02f, 3.487806493e-02f, 3.480580080e-02f, 3.473348933e-02f, 3.466113066e-02f,
-3.458872493e-02f, 3.451627226e-02f, 3.444377279e-02f, 3.437122664e-02f, 3.429863396e-02f, 3.422599488e-02f, 3.415330952e-02f, 3.408057802e-02f, 3.400780052e-02f, 3.393497714e-02f,
-3.386210802e-02f, 3.378919329e-02f, 3.371623309e-02f, 3.364322754e-02f, 3.357017679e-02f, 3.349708095e-02f, 3.342394018e-02f, 3.335075460e-02f, 3.327752433e-02f, 3.320424953e-02f,
-3.313093032e-02f, 3.305756683e-02f, 3.298415919e-02f, 3.291070755e-02f, 3.283721203e-02f, 3.276367277e-02f, 3.269008990e-02f, 3.261646356e-02f, 3.254279388e-02f, 3.246908099e-02f,
-3.239532502e-02f, 3.232152612e-02f, 3.224768441e-02f, 3.217380003e-02f, 3.209987312e-02f, 3.202590380e-02f, 3.195189221e-02f, 3.187783849e-02f, 3.180374277e-02f, 3.172960518e-02f,
-3.165542586e-02f, 3.158120495e-02f, 3.150694257e-02f, 3.143263887e-02f, 3.135829397e-02f, 3.128390801e-02f, 3.120948113e-02f, 3.113501346e-02f, 3.106050514e-02f, 3.098595629e-02f,
-3.091136707e-02f, 3.083673759e-02f, 3.076206799e-02f, 3.068735842e-02f, 3.061260900e-02f, 3.053781987e-02f, 3.046299117e-02f, 3.038812303e-02f, 3.031321558e-02f, 3.023826897e-02f,
-3.016328332e-02f, 3.008825877e-02f, 3.001319546e-02f, 2.993809352e-02f, 2.986295309e-02f, 2.978777430e-02f, 2.971255729e-02f, 2.963730220e-02f, 2.956200915e-02f, 2.948667829e-02f,
-2.941130976e-02f, 2.933590368e-02f, 2.926046019e-02f, 2.918497943e-02f, 2.910946154e-02f, 2.903390665e-02f, 2.895831489e-02f, 2.888268641e-02f, 2.880702133e-02f, 2.873131980e-02f,
-2.865558195e-02f, 2.857980792e-02f, 2.850399784e-02f, 2.842815185e-02f, 2.835227008e-02f, 2.827635268e-02f, 2.820039977e-02f, 2.812441150e-02f, 2.804838800e-02f, 2.797232941e-02f,
-2.789623586e-02f, 2.782010749e-02f, 2.774394444e-02f, 2.766774684e-02f, 2.759151483e-02f, 2.751524855e-02f, 2.743894813e-02f, 2.736261371e-02f, 2.728624543e-02f, 2.720984342e-02f,
-2.713340782e-02f, 2.705693877e-02f, 2.698043641e-02f, 2.690390086e-02f, 2.682733228e-02f, 2.675073078e-02f, 2.667409652e-02f, 2.659742963e-02f, 2.652073025e-02f, 2.644399850e-02f,
-2.636723454e-02f, 2.629043850e-02f, 2.621361051e-02f, 2.613675071e-02f, 2.605985924e-02f, 2.598293624e-02f, 2.590598184e-02f, 2.582899619e-02f, 2.575197941e-02f, 2.567493165e-02f,
-2.559785304e-02f, 2.552074372e-02f, 2.544360383e-02f, 2.536643350e-02f, 2.528923288e-02f, 2.521200210e-02f, 2.513474130e-02f, 2.505745062e-02f, 2.498013019e-02f, 2.490278015e-02f,
-2.482540064e-02f, 2.474799179e-02f, 2.467055376e-02f, 2.459308666e-02f, 2.451559064e-02f, 2.443806585e-02f, 2.436051240e-02f, 2.428293046e-02f, 2.420532014e-02f, 2.412768159e-02f,
-2.405001496e-02f, 2.397232036e-02f, 2.389459796e-02f, 2.381684787e-02f, 2.373907024e-02f, 2.366126521e-02f, 2.358343292e-02f, 2.350557350e-02f, 2.342768709e-02f, 2.334977384e-02f,
-2.327183387e-02f, 2.319386733e-02f, 2.311587435e-02f, 2.303785508e-02f, 2.295980965e-02f, 2.288173819e-02f, 2.280364086e-02f, 2.272551778e-02f, 2.264736910e-02f, 2.256919495e-02f,
-2.249099548e-02f, 2.241277081e-02f, 2.233452109e-02f, 2.225624646e-02f, 2.217794705e-02f, 2.209962301e-02f, 2.202127447e-02f, 2.194290157e-02f, 2.186450445e-02f, 2.178608325e-02f,
-2.170763810e-02f, 2.162916915e-02f, 2.155067653e-02f, 2.147216039e-02f, 2.139362086e-02f, 2.131505807e-02f, 2.123647218e-02f, 2.115786331e-02f, 2.107923161e-02f, 2.100057721e-02f,
-2.092190025e-02f, 2.084320088e-02f, 2.076447922e-02f, 2.068573543e-02f, 2.060696963e-02f, 2.052818198e-02f, 2.044937259e-02f, 2.037054162e-02f, 2.029168921e-02f, 2.021281549e-02f,
-2.013392060e-02f, 2.005500467e-02f, 1.997606786e-02f, 1.989711030e-02f, 1.981813212e-02f, 1.973913346e-02f, 1.966011448e-02f, 1.958107529e-02f, 1.950201605e-02f, 1.942293689e-02f,
-1.934383795e-02f, 1.926471937e-02f, 1.918558128e-02f, 1.910642384e-02f, 1.902724717e-02f, 1.894805141e-02f, 1.886883671e-02f, 1.878960320e-02f, 1.871035103e-02f, 1.863108033e-02f,
-1.855179123e-02f, 1.847248389e-02f, 1.839315844e-02f, 1.831381501e-02f, 1.823445375e-02f, 1.815507480e-02f, 1.807567829e-02f, 1.799626436e-02f, 1.791683316e-02f, 1.783738482e-02f,
-1.775791948e-02f, 1.767843728e-02f, 1.759893836e-02f, 1.751942286e-02f, 1.743989092e-02f, 1.736034268e-02f, 1.728077827e-02f, 1.720119784e-02f, 1.712160152e-02f, 1.704198945e-02f,
-1.696236178e-02f, 1.688271864e-02f, 1.680306017e-02f, 1.672338651e-02f, 1.664369780e-02f, 1.656399418e-02f, 1.648427578e-02f, 1.640454276e-02f, 1.632479524e-02f, 1.624503336e-02f,
-1.616525727e-02f, 1.608546710e-02f, 1.600566299e-02f, 1.592584509e-02f, 1.584601353e-02f, 1.576616845e-02f, 1.568630998e-02f, 1.560643828e-02f, 1.552655347e-02f, 1.544665570e-02f,
-1.536674511e-02f, 1.528682183e-02f, 1.520688601e-02f, 1.512693778e-02f, 1.504697728e-02f, 1.496700465e-02f, 1.488702004e-02f, 1.480702357e-02f, 1.472701539e-02f, 1.464699565e-02f,
-1.456696447e-02f, 1.448692199e-02f, 1.440686836e-02f, 1.432680372e-02f, 1.424672820e-02f, 1.416664194e-02f, 1.408654509e-02f, 1.400643778e-02f, 1.392632014e-02f, 1.384619233e-02f,
-1.376605447e-02f, 1.368590672e-02f, 1.360574920e-02f, 1.352558205e-02f, 1.344540542e-02f, 1.336521944e-02f, 1.328502426e-02f, 1.320482000e-02f, 1.312460682e-02f, 1.304438485e-02f,
-1.296415423e-02f, 1.288391509e-02f, 1.280366758e-02f, 1.272341184e-02f, 1.264314800e-02f, 1.256287620e-02f, 1.248259659e-02f, 1.240230930e-02f, 1.232201447e-02f, 1.224171224e-02f,
-1.216140274e-02f, 1.208108612e-02f, 1.200076252e-02f, 1.192043208e-02f, 1.184009492e-02f, 1.175975120e-02f, 1.167940105e-02f, 1.159904462e-02f, 1.151868202e-02f, 1.143831342e-02f,
-1.135793895e-02f, 1.127755873e-02f, 1.119717293e-02f, 1.111678166e-02f, 1.103638508e-02f, 1.095598331e-02f, 1.087557651e-02f, 1.079516480e-02f, 1.071474833e-02f, 1.063432723e-02f,
-1.055390165e-02f, 1.047347171e-02f, 1.039303757e-02f, 1.031259936e-02f, 1.023215721e-02f, 1.015171127e-02f, 1.007126168e-02f, 9.990808568e-03f, 9.910352077e-03f, 9.829892347e-03f,
-9.749429515e-03f, 9.668963720e-03f, 9.588495100e-03f, 9.508023794e-03f, 9.427549940e-03f, 9.347073677e-03f, 9.266595142e-03f, 9.186114474e-03f, 9.105631811e-03f, 9.025147292e-03f,
-8.944661055e-03f, 8.864173238e-03f, 8.783683979e-03f, 8.703193417e-03f, 8.622701689e-03f, 8.542208934e-03f, 8.461715290e-03f, 8.381220895e-03f, 8.300725887e-03f, 8.220230404e-03f,
-8.139734585e-03f, 8.059238566e-03f, 7.978742487e-03f, 7.898246485e-03f, 7.817750698e-03f, 7.737255264e-03f, 7.656760320e-03f, 7.576266006e-03f, 7.495772458e-03f, 7.415279815e-03f,
-7.334788214e-03f, 7.254297792e-03f, 7.173808689e-03f, 7.093321041e-03f, 7.012834986e-03f, 6.932350661e-03f, 6.851868206e-03f, 6.771387756e-03f, 6.690909450e-03f, 6.610433425e-03f,
-6.529959818e-03f, 6.449488768e-03f, 6.369020412e-03f, 6.288554887e-03f, 6.208092330e-03f, 6.127632879e-03f, 6.047176672e-03f, 5.966723845e-03f, 5.886274536e-03f, 5.805828882e-03f,
-5.725387021e-03f, 5.644949089e-03f, 5.564515225e-03f, 5.484085564e-03f, 5.403660244e-03f, 5.323239403e-03f, 5.242823176e-03f, 5.162411703e-03f, 5.082005118e-03f, 5.001603560e-03f,
-4.921207165e-03f, 4.840816070e-03f, 4.760430412e-03f, 4.680050327e-03f, 4.599675954e-03f, 4.519307428e-03f, 4.438944886e-03f, 4.358588464e-03f, 4.278238301e-03f, 4.197894531e-03f,
-4.117557292e-03f, 4.037226721e-03f, 3.956902953e-03f, 3.876586126e-03f, 3.796276376e-03f, 3.715973838e-03f, 3.635678651e-03f, 3.555390949e-03f, 3.475110870e-03f, 3.394838550e-03f,
-3.314574124e-03f, 3.234317729e-03f, 3.154069502e-03f, 3.073829578e-03f, 2.993598093e-03f, 2.913375185e-03f, 2.833160987e-03f, 2.752955638e-03f, 2.672759271e-03f, 2.592572025e-03f,
-2.512394033e-03f, 2.432225433e-03f, 2.352066360e-03f, 2.271916949e-03f, 2.191777337e-03f, 2.111647659e-03f, 2.031528051e-03f, 1.951418648e-03f, 1.871319586e-03f, 1.791231000e-03f,
-1.711153027e-03f, 1.631085800e-03f, 1.551029456e-03f, 1.470984131e-03f, 1.390949959e-03f, 1.310927075e-03f, 1.230915616e-03f, 1.150915715e-03f, 1.070927509e-03f, 9.909511317e-04f,
-9.109867191e-04f, 8.310344058e-04f, 7.510943269e-04f, 6.711666172e-04f, 5.912514117e-04f, 5.113488453e-04f, 4.314590526e-04f, 3.515821684e-04f, 2.717183275e-04f, 1.918676644e-04f,
-1.120303139e-04f, 3.220641052e-05f, -4.760391130e-05f, -1.274005170e-04f, -2.071832723e-04f, -2.869520426e-04f, -3.667066937e-04f, -4.464470913e-04f, -5.261731011e-04f, -6.058845889e-04f,
--6.855814206e-04f, -7.652634621e-04f, -8.449305794e-04f, -9.245826383e-04f, -1.004219505e-03f, -1.083841046e-03f, -1.163447126e-03f, -1.243037613e-03f, -1.322612372e-03f, -1.402171270e-03f,
--1.481714173e-03f, -1.561240947e-03f, -1.640751460e-03f, -1.720245576e-03f, -1.799723164e-03f, -1.879184089e-03f, -1.958628218e-03f, -2.038055418e-03f, -2.117465555e-03f, -2.196858497e-03f,
--2.276234110e-03f, -2.355592261e-03f, -2.434932817e-03f, -2.514255646e-03f, -2.593560613e-03f, -2.672847586e-03f, -2.752116433e-03f, -2.831367021e-03f, -2.910599216e-03f, -2.989812886e-03f,
--3.069007899e-03f, -3.148184122e-03f, -3.227341423e-03f, -3.306479668e-03f, -3.385598726e-03f, -3.464698464e-03f, -3.543778750e-03f, -3.622839452e-03f, -3.701880437e-03f, -3.780901574e-03f,
--3.859902730e-03f, -3.938883773e-03f, -4.017844572e-03f, -4.096784993e-03f, -4.175704907e-03f, -4.254604180e-03f, -4.333482681e-03f, -4.412340279e-03f, -4.491176841e-03f, -4.569992237e-03f,
--4.648786334e-03f, -4.727559001e-03f, -4.806310108e-03f, -4.885039522e-03f, -4.963747112e-03f, -5.042432747e-03f, -5.121096296e-03f, -5.199737627e-03f, -5.278356611e-03f, -5.356953115e-03f,
--5.435527010e-03f, -5.514078163e-03f, -5.592606444e-03f, -5.671111723e-03f, -5.749593869e-03f, -5.828052752e-03f, -5.906488240e-03f, -5.984900203e-03f, -6.063288511e-03f, -6.141653033e-03f,
--6.219993640e-03f, -6.298310200e-03f, -6.376602585e-03f, -6.454870663e-03f, -6.533114304e-03f, -6.611333380e-03f, -6.689527759e-03f, -6.767697311e-03f, -6.845841908e-03f, -6.923961420e-03f,
--7.002055716e-03f, -7.080124667e-03f, -7.158168143e-03f, -7.236186016e-03f, -7.314178156e-03f, -7.392144433e-03f, -7.470084718e-03f, -7.547998882e-03f, -7.625886795e-03f, -7.703748330e-03f,
--7.781583356e-03f, -7.859391745e-03f, -7.937173368e-03f, -8.014928096e-03f, -8.092655800e-03f, -8.170356352e-03f, -8.248029623e-03f, -8.325675485e-03f, -8.403293809e-03f, -8.480884466e-03f,
--8.558447329e-03f, -8.635982269e-03f, -8.713489158e-03f, -8.790967868e-03f, -8.868418271e-03f, -8.945840238e-03f, -9.023233642e-03f, -9.100598356e-03f, -9.177934250e-03f, -9.255241198e-03f,
--9.332519073e-03f, -9.409767745e-03f, -9.486987089e-03f, -9.564176976e-03f, -9.641337279e-03f, -9.718467871e-03f, -9.795568624e-03f, -9.872639413e-03f, -9.949680108e-03f, -1.002669058e-02f,
--1.010367071e-02f, -1.018062037e-02f, -1.025753943e-02f, -1.033442776e-02f, -1.041128523e-02f, -1.048811173e-02f, -1.056490712e-02f, -1.064167128e-02f, -1.071840408e-02f, -1.079510539e-02f,
--1.087177509e-02f, -1.094841306e-02f, -1.102501916e-02f, -1.110159327e-02f, -1.117813527e-02f, -1.125464502e-02f, -1.133112241e-02f, -1.140756731e-02f, -1.148397958e-02f, -1.156035912e-02f,
--1.163670578e-02f, -1.171301945e-02f, -1.178930000e-02f, -1.186554731e-02f, -1.194176124e-02f, -1.201794169e-02f, -1.209408851e-02f, -1.217020158e-02f, -1.224628079e-02f, -1.232232600e-02f,
--1.239833710e-02f, -1.247431395e-02f, -1.255025643e-02f, -1.262616442e-02f, -1.270203779e-02f, -1.277787643e-02f, -1.285368019e-02f, -1.292944897e-02f, -1.300518264e-02f, -1.308088107e-02f,
--1.315654413e-02f, -1.323217172e-02f, -1.330776369e-02f, -1.338331993e-02f, -1.345884032e-02f, -1.353432473e-02f, -1.360977303e-02f, -1.368518512e-02f, -1.376056085e-02f, -1.383590011e-02f,
--1.391120277e-02f, -1.398646872e-02f, -1.406169783e-02f, -1.413688997e-02f, -1.421204503e-02f, -1.428716288e-02f, -1.436224340e-02f, -1.443728646e-02f, -1.451229195e-02f, -1.458725974e-02f,
--1.466218971e-02f, -1.473708174e-02f, -1.481193570e-02f, -1.488675148e-02f, -1.496152895e-02f, -1.503626798e-02f, -1.511096847e-02f, -1.518563028e-02f, -1.526025330e-02f, -1.533483740e-02f,
--1.540938247e-02f, -1.548388837e-02f, -1.555835500e-02f, -1.563278222e-02f, -1.570716993e-02f, -1.578151799e-02f, -1.585582628e-02f, -1.593009470e-02f, -1.600432310e-02f, -1.607851138e-02f,
--1.615265942e-02f, -1.622676709e-02f, -1.630083427e-02f, -1.637486085e-02f, -1.644884669e-02f, -1.652279170e-02f, -1.659669573e-02f, -1.667055868e-02f, -1.674438042e-02f, -1.681816084e-02f,
--1.689189981e-02f, -1.696559721e-02f, -1.703925293e-02f, -1.711286685e-02f, -1.718643884e-02f, -1.725996879e-02f, -1.733345658e-02f, -1.740690209e-02f, -1.748030520e-02f, -1.755366580e-02f,
--1.762698375e-02f, -1.770025896e-02f, -1.777349129e-02f, -1.784668063e-02f, -1.791982685e-02f, -1.799292985e-02f, -1.806598951e-02f, -1.813900570e-02f, -1.821197830e-02f, -1.828490721e-02f,
--1.835779230e-02f, -1.843063346e-02f, -1.850343056e-02f, -1.857618349e-02f, -1.864889213e-02f, -1.872155637e-02f, -1.879417609e-02f, -1.886675117e-02f, -1.893928149e-02f, -1.901176694e-02f,
--1.908420740e-02f, -1.915660276e-02f, -1.922895289e-02f, -1.930125768e-02f, -1.937351702e-02f, -1.944573078e-02f, -1.951789886e-02f, -1.959002113e-02f, -1.966209749e-02f, -1.973412780e-02f,
--1.980611197e-02f, -1.987804986e-02f, -1.994994138e-02f, -2.002178639e-02f, -2.009358479e-02f, -2.016533646e-02f, -2.023704129e-02f, -2.030869916e-02f, -2.038030995e-02f, -2.045187355e-02f,
--2.052338985e-02f, -2.059485873e-02f, -2.066628008e-02f, -2.073765377e-02f, -2.080897971e-02f, -2.088025776e-02f, -2.095148783e-02f, -2.102266979e-02f, -2.109380353e-02f, -2.116488894e-02f,
--2.123592590e-02f, -2.130691430e-02f, -2.137785403e-02f, -2.144874496e-02f, -2.151958700e-02f, -2.159038002e-02f, -2.166112392e-02f, -2.173181857e-02f, -2.180246387e-02f, -2.187305970e-02f,
--2.194360596e-02f, -2.201410252e-02f, -2.208454927e-02f, -2.215494611e-02f, -2.222529292e-02f, -2.229558959e-02f, -2.236583600e-02f, -2.243603205e-02f, -2.250617761e-02f, -2.257627259e-02f,
--2.264631687e-02f, -2.271631033e-02f, -2.278625287e-02f, -2.285614437e-02f, -2.292598473e-02f, -2.299577382e-02f, -2.306551155e-02f, -2.313519779e-02f, -2.320483244e-02f, -2.327441539e-02f,
--2.334394653e-02f, -2.341342574e-02f, -2.348285292e-02f, -2.355222795e-02f, -2.362155073e-02f, -2.369082114e-02f, -2.376003908e-02f, -2.382920443e-02f, -2.389831708e-02f, -2.396737693e-02f,
--2.403638387e-02f, -2.410533778e-02f, -2.417423856e-02f, -2.424308610e-02f, -2.431188028e-02f, -2.438062101e-02f, -2.444930816e-02f, -2.451794163e-02f, -2.458652132e-02f, -2.465504711e-02f,
--2.472351890e-02f, -2.479193657e-02f, -2.486030002e-02f, -2.492860914e-02f, -2.499686383e-02f, -2.506506396e-02f, -2.513320945e-02f, -2.520130017e-02f, -2.526933602e-02f, -2.533731690e-02f,
--2.540524269e-02f, -2.547311330e-02f, -2.554092860e-02f, -2.560868850e-02f, -2.567639288e-02f, -2.574404165e-02f, -2.581163468e-02f, -2.587917189e-02f, -2.594665316e-02f, -2.601407838e-02f,
--2.608144745e-02f, -2.614876026e-02f, -2.621601670e-02f, -2.628321668e-02f, -2.635036008e-02f, -2.641744679e-02f, -2.648447672e-02f, -2.655144976e-02f, -2.661836580e-02f, -2.668522473e-02f,
--2.675202646e-02f, -2.681877087e-02f, -2.688545786e-02f, -2.695208733e-02f, -2.701865917e-02f, -2.708517328e-02f, -2.715162955e-02f, -2.721802787e-02f, -2.728436815e-02f, -2.735065028e-02f,
--2.741687416e-02f, -2.748303968e-02f, -2.754914674e-02f, -2.761519523e-02f, -2.768118505e-02f, -2.774711610e-02f, -2.781298827e-02f, -2.787880146e-02f, -2.794455557e-02f, -2.801025050e-02f,
--2.807588614e-02f, -2.814146239e-02f, -2.820697914e-02f, -2.827243630e-02f, -2.833783376e-02f, -2.840317142e-02f, -2.846844918e-02f, -2.853366693e-02f, -2.859882457e-02f, -2.866392201e-02f,
--2.872895914e-02f, -2.879393586e-02f, -2.885885206e-02f, -2.892370765e-02f, -2.898850252e-02f, -2.905323658e-02f, -2.911790972e-02f, -2.918252184e-02f, -2.924707284e-02f, -2.931156262e-02f,
--2.937599109e-02f, -2.944035813e-02f, -2.950466365e-02f, -2.956890755e-02f, -2.963308974e-02f, -2.969721010e-02f, -2.976126854e-02f, -2.982526496e-02f, -2.988919926e-02f, -2.995307134e-02f,
--3.001688111e-02f, -3.008062846e-02f, -3.014431329e-02f, -3.020793550e-02f, -3.027149501e-02f, -3.033499170e-02f, -3.039842548e-02f, -3.046179625e-02f, -3.052510392e-02f, -3.058834837e-02f,
--3.065152953e-02f, -3.071464728e-02f, -3.077770154e-02f, -3.084069219e-02f, -3.090361916e-02f, -3.096648233e-02f, -3.102928161e-02f, -3.109201691e-02f, -3.115468812e-02f, -3.121729515e-02f,
--3.127983791e-02f, -3.134231629e-02f, -3.140473021e-02f, -3.146707955e-02f, -3.152936424e-02f, -3.159158416e-02f, -3.165373923e-02f, -3.171582935e-02f, -3.177785442e-02f, -3.183981435e-02f,
--3.190170905e-02f, -3.196353841e-02f, -3.202530234e-02f, -3.208700075e-02f, -3.214863354e-02f, -3.221020061e-02f, -3.227170188e-02f, -3.233313725e-02f, -3.239450662e-02f, -3.245580990e-02f,
--3.251704699e-02f, -3.257821780e-02f, -3.263932224e-02f, -3.270036021e-02f, -3.276133162e-02f, -3.282223638e-02f, -3.288307438e-02f, -3.294384555e-02f, -3.300454978e-02f, -3.306518698e-02f,
--3.312575706e-02f, -3.318625992e-02f, -3.324669548e-02f, -3.330706365e-02f, -3.336736432e-02f, -3.342759740e-02f, -3.348776281e-02f, -3.354786045e-02f, -3.360789024e-02f, -3.366785207e-02f,
--3.372774585e-02f, -3.378757150e-02f, -3.384732893e-02f, -3.390701804e-02f, -3.396663874e-02f, -3.402619094e-02f, -3.408567455e-02f, -3.414508948e-02f, -3.420443563e-02f, -3.426371293e-02f,
--3.432292127e-02f, -3.438206057e-02f, -3.444113074e-02f, -3.450013168e-02f, -3.455906331e-02f, -3.461792554e-02f, -3.467671827e-02f, -3.473544143e-02f, -3.479409491e-02f, -3.485267864e-02f,
--3.491119252e-02f, -3.496963646e-02f, -3.502801037e-02f, -3.508631417e-02f, -3.514454776e-02f, -3.520271106e-02f, -3.526080399e-02f, -3.531882644e-02f, -3.537677834e-02f, -3.543465960e-02f,
--3.549247012e-02f, -3.555020983e-02f, -3.560787863e-02f, -3.566547643e-02f, -3.572300316e-02f, -3.578045871e-02f, -3.583784302e-02f, -3.589515598e-02f, -3.595239751e-02f, -3.600956753e-02f,
--3.606666595e-02f, -3.612369268e-02f, -3.618064764e-02f, -3.623753074e-02f, -3.629434190e-02f, -3.635108102e-02f, -3.640774803e-02f, -3.646434284e-02f, -3.652086536e-02f, -3.657731551e-02f,
--3.663369321e-02f, -3.668999836e-02f, -3.674623089e-02f, -3.680239071e-02f, -3.685847773e-02f, -3.691449188e-02f, -3.697043306e-02f, -3.702630120e-02f, -3.708209620e-02f, -3.713781799e-02f,
--3.719346648e-02f, -3.724904159e-02f, -3.730454323e-02f, -3.735997133e-02f, -3.741532579e-02f, -3.747060655e-02f, -3.752581350e-02f, -3.758094658e-02f, -3.763600569e-02f, -3.769099076e-02f,
--3.774590170e-02f, -3.780073844e-02f, -3.785550088e-02f, -3.791018896e-02f, -3.796480258e-02f, -3.801934166e-02f, -3.807380613e-02f, -3.812819590e-02f, -3.818251089e-02f, -3.823675102e-02f,
--3.829091621e-02f, -3.834500638e-02f, -3.839902145e-02f, -3.845296134e-02f, -3.850682596e-02f, -3.856061525e-02f, -3.861432911e-02f, -3.866796747e-02f, -3.872153024e-02f, -3.877501736e-02f,
--3.882842874e-02f, -3.888176429e-02f, -3.893502395e-02f, -3.898820763e-02f, -3.904131525e-02f, -3.909434674e-02f, -3.914730201e-02f, -3.920018100e-02f, -3.925298361e-02f, -3.930570977e-02f,
--3.935835941e-02f, -3.941093244e-02f, -3.946342879e-02f, -3.951584838e-02f, -3.956819114e-02f, -3.962045698e-02f, -3.967264583e-02f, -3.972475761e-02f, -3.977679225e-02f, -3.982874967e-02f,
--3.988062979e-02f, -3.993243253e-02f, -3.998415782e-02f, -4.003580559e-02f, -4.008737576e-02f, -4.013886824e-02f, -4.019028297e-02f, -4.024161988e-02f, -4.029287887e-02f, -4.034405989e-02f,
--4.039516286e-02f, -4.044618769e-02f, -4.049713432e-02f, -4.054800267e-02f, -4.059879266e-02f, -4.064950423e-02f, -4.070013729e-02f, -4.075069178e-02f, -4.080116762e-02f, -4.085156473e-02f,
--4.090188304e-02f, -4.095212249e-02f, -4.100228299e-02f, -4.105236447e-02f, -4.110236686e-02f, -4.115229009e-02f, -4.120213408e-02f, -4.125189876e-02f, -4.130158406e-02f, -4.135118991e-02f,
--4.140071623e-02f, -4.145016295e-02f, -4.149953001e-02f, -4.154881732e-02f, -4.159802482e-02f, -4.164715243e-02f, -4.169620009e-02f, -4.174516773e-02f, -4.179405526e-02f, -4.184286263e-02f,
--4.189158976e-02f, -4.194023657e-02f, -4.198880301e-02f, -4.203728900e-02f, -4.208569447e-02f, -4.213401934e-02f, -4.218226356e-02f, -4.223042704e-02f, -4.227850973e-02f, -4.232651155e-02f,
--4.237443243e-02f, -4.242227231e-02f, -4.247003111e-02f, -4.251770876e-02f, -4.256530520e-02f, -4.261282036e-02f, -4.266025417e-02f, -4.270760656e-02f, -4.275487747e-02f, -4.280206682e-02f,
--4.284917455e-02f, -4.289620060e-02f, -4.294314488e-02f, -4.299000734e-02f, -4.303678792e-02f, -4.308348653e-02f, -4.313010312e-02f, -4.317663762e-02f, -4.322308996e-02f, -4.326946008e-02f,
--4.331574790e-02f, -4.336195338e-02f, -4.340807643e-02f, -4.345411699e-02f, -4.350007499e-02f, -4.354595038e-02f, -4.359174309e-02f, -4.363745305e-02f, -4.368308019e-02f, -4.372862445e-02f,
--4.377408577e-02f, -4.381946408e-02f, -4.386475932e-02f, -4.390997142e-02f, -4.395510032e-02f, -4.400014596e-02f, -4.404510827e-02f, -4.408998719e-02f, -4.413478265e-02f, -4.417949459e-02f,
--4.422412295e-02f, -4.426866766e-02f, -4.431312867e-02f, -4.435750590e-02f, -4.440179931e-02f, -4.444600881e-02f, -4.449013436e-02f, -4.453417589e-02f, -4.457813334e-02f, -4.462200664e-02f,
--4.466579574e-02f, -4.470950057e-02f, -4.475312108e-02f, -4.479665719e-02f, -4.484010886e-02f, -4.488347601e-02f, -4.492675859e-02f, -4.496995654e-02f, -4.501306980e-02f, -4.505609830e-02f,
--4.509904199e-02f, -4.514190081e-02f, -4.518467470e-02f, -4.522736359e-02f, -4.526996743e-02f, -4.531248616e-02f, -4.535491972e-02f, -4.539726805e-02f, -4.543953109e-02f, -4.548170879e-02f,
--4.552380108e-02f, -4.556580790e-02f, -4.560772920e-02f, -4.564956493e-02f, -4.569131501e-02f, -4.573297940e-02f, -4.577455804e-02f, -4.581605086e-02f, -4.585745782e-02f, -4.589877885e-02f,
--4.594001390e-02f, -4.598116291e-02f, -4.602222582e-02f, -4.606320258e-02f, -4.610409313e-02f, -4.614489742e-02f, -4.618561539e-02f, -4.622624698e-02f, -4.626679213e-02f, -4.630725080e-02f,
--4.634762293e-02f, -4.638790845e-02f, -4.642810732e-02f, -4.646821948e-02f, -4.650824488e-02f, -4.654818346e-02f, -4.658803517e-02f, -4.662779994e-02f, -4.666747774e-02f, -4.670706850e-02f,
--4.674657218e-02f, -4.678598870e-02f, -4.682531804e-02f, -4.686456012e-02f, -4.690371490e-02f, -4.694278232e-02f, -4.698176233e-02f, -4.702065488e-02f, -4.705945991e-02f, -4.709817738e-02f,
--4.713680723e-02f, -4.717534941e-02f, -4.721380386e-02f, -4.725217054e-02f, -4.729044939e-02f, -4.732864036e-02f, -4.736674340e-02f, -4.740475846e-02f, -4.744268549e-02f, -4.748052443e-02f,
--4.751827524e-02f, -4.755593787e-02f, -4.759351226e-02f, -4.763099837e-02f, -4.766839614e-02f, -4.770570553e-02f, -4.774292648e-02f, -4.778005895e-02f, -4.781710288e-02f, -4.785405823e-02f,
--4.789092495e-02f, -4.792770298e-02f, -4.796439229e-02f, -4.800099282e-02f, -4.803750452e-02f, -4.807392734e-02f, -4.811026124e-02f, -4.814650617e-02f, -4.818266208e-02f, -4.821872892e-02f,
--4.825470665e-02f, -4.829059522e-02f, -4.832639457e-02f, -4.836210467e-02f, -4.839772546e-02f, -4.843325691e-02f, -4.846869896e-02f, -4.850405156e-02f, -4.853931468e-02f, -4.857448826e-02f,
--4.860957226e-02f, -4.864456663e-02f, -4.867947133e-02f, -4.871428631e-02f, -4.874901152e-02f, -4.878364693e-02f, -4.881819248e-02f, -4.885264814e-02f, -4.888701385e-02f, -4.892128957e-02f,
--4.895547526e-02f, -4.898957088e-02f, -4.902357637e-02f, -4.905749170e-02f, -4.909131682e-02f, -4.912505169e-02f, -4.915869627e-02f, -4.919225051e-02f, -4.922571436e-02f, -4.925908779e-02f,
--4.929237076e-02f, -4.932556322e-02f, -4.935866512e-02f, -4.939167643e-02f, -4.942459710e-02f, -4.945742710e-02f, -4.949016638e-02f, -4.952281489e-02f, -4.955537260e-02f, -4.958783947e-02f,
--4.962021545e-02f, -4.965250051e-02f, -4.968469460e-02f, -4.971679768e-02f, -4.974880971e-02f, -4.978073066e-02f, -4.981256047e-02f, -4.984429912e-02f, -4.987594656e-02f, -4.990750275e-02f,
--4.993896765e-02f, -4.997034123e-02f, -5.000162344e-02f, -5.003281424e-02f, -5.006391360e-02f, -5.009492148e-02f, -5.012583784e-02f, -5.015666263e-02f, -5.018739583e-02f, -5.021803740e-02f,
--5.024858728e-02f, -5.027904546e-02f, -5.030941189e-02f, -5.033968653e-02f, -5.036986935e-02f, -5.039996030e-02f, -5.042995936e-02f, -5.045986649e-02f, -5.048968164e-02f, -5.051940479e-02f,
--5.054903589e-02f, -5.057857491e-02f, -5.060802182e-02f, -5.063737657e-02f, -5.066663914e-02f, -5.069580948e-02f, -5.072488757e-02f, -5.075387336e-02f, -5.078276682e-02f, -5.081156793e-02f,
--5.084027663e-02f, -5.086889290e-02f, -5.089741671e-02f, -5.092584802e-02f, -5.095418679e-02f, -5.098243299e-02f, -5.101058659e-02f, -5.103864756e-02f, -5.106661585e-02f, -5.109449145e-02f,
--5.112227431e-02f, -5.114996440e-02f, -5.117756169e-02f, -5.120506615e-02f, -5.123247774e-02f, -5.125979643e-02f, -5.128702220e-02f, -5.131415500e-02f, -5.134119482e-02f, -5.136814160e-02f,
--5.139499533e-02f, -5.142175598e-02f, -5.144842350e-02f, -5.147499788e-02f, -5.150147907e-02f, -5.152786706e-02f, -5.155416180e-02f, -5.158036327e-02f, -5.160647145e-02f, -5.163248629e-02f,
--5.165840777e-02f, -5.168423586e-02f, -5.170997053e-02f, -5.173561175e-02f, -5.176115949e-02f, -5.178661372e-02f, -5.181197442e-02f, -5.183724156e-02f, -5.186241510e-02f, -5.188749502e-02f,
--5.191248130e-02f, -5.193737389e-02f, -5.196217278e-02f, -5.198687794e-02f, -5.201148934e-02f, -5.203600695e-02f, -5.206043074e-02f, -5.208476070e-02f, -5.210899678e-02f, -5.213313898e-02f,
--5.215718725e-02f, -5.218114157e-02f, -5.220500192e-02f, -5.222876827e-02f, -5.225244060e-02f, -5.227601887e-02f, -5.229950307e-02f, -5.232289317e-02f, -5.234618913e-02f, -5.236939095e-02f,
--5.239249859e-02f, -5.241551203e-02f, -5.243843124e-02f, -5.246125621e-02f, -5.248398690e-02f, -5.250662329e-02f, -5.252916536e-02f, -5.255161308e-02f, -5.257396643e-02f, -5.259622539e-02f,
--5.261838994e-02f, -5.264046004e-02f, -5.266243569e-02f, -5.268431685e-02f, -5.270610350e-02f, -5.272779563e-02f, -5.274939320e-02f, -5.277089620e-02f, -5.279230460e-02f, -5.281361839e-02f,
--5.283483754e-02f, -5.285596203e-02f, -5.287699184e-02f, -5.289792694e-02f, -5.291876733e-02f, -5.293951297e-02f, -5.296016384e-02f, -5.298071993e-02f, -5.300118122e-02f, -5.302154768e-02f,
--5.304181930e-02f, -5.306199605e-02f, -5.308207792e-02f, -5.310206489e-02f, -5.312195693e-02f, -5.314175403e-02f, -5.316145617e-02f, -5.318106333e-02f, -5.320057550e-02f, -5.321999265e-02f,
--5.323931476e-02f, -5.325854182e-02f, -5.327767381e-02f, -5.329671072e-02f, -5.331565251e-02f, -5.333449919e-02f, -5.335325072e-02f, -5.337190710e-02f, -5.339046830e-02f, -5.340893431e-02f,
--5.342730512e-02f, -5.344558070e-02f, -5.346376104e-02f, -5.348184612e-02f, -5.349983593e-02f, -5.351773046e-02f, -5.353552968e-02f, -5.355323358e-02f, -5.357084215e-02f, -5.358835536e-02f,
--5.360577322e-02f, -5.362309569e-02f, -5.364032277e-02f, -5.365745444e-02f, -5.367449069e-02f, -5.369143151e-02f, -5.370827687e-02f, -5.372502677e-02f, -5.374168119e-02f, -5.375824012e-02f,
--5.377470355e-02f, -5.379107145e-02f, -5.380734383e-02f, -5.382352066e-02f, -5.383960194e-02f, -5.385558765e-02f, -5.387147778e-02f, -5.388727232e-02f, -5.390297125e-02f, -5.391857456e-02f,
--5.393408225e-02f, -5.394949429e-02f, -5.396481069e-02f, -5.398003142e-02f, -5.399515648e-02f, -5.401018585e-02f, -5.402511954e-02f, -5.403995751e-02f, -5.405469977e-02f, -5.406934631e-02f,
--5.408389711e-02f, -5.409835216e-02f, -5.411271146e-02f, -5.412697499e-02f, -5.414114275e-02f, -5.415521473e-02f, -5.416919091e-02f, -5.418307130e-02f, -5.419685587e-02f, -5.421054463e-02f,
--5.422413756e-02f, -5.423763466e-02f, -5.425103591e-02f, -5.426434131e-02f, -5.427755086e-02f, -5.429066453e-02f, -5.430368234e-02f, -5.431660427e-02f, -5.432943031e-02f, -5.434216045e-02f,
--5.435479469e-02f, -5.436733303e-02f, -5.437977545e-02f, -5.439212196e-02f, -5.440437253e-02f, -5.441652718e-02f, -5.442858589e-02f, -5.444054865e-02f, -5.445241547e-02f, -5.446418633e-02f,
--5.447586124e-02f, -5.448744018e-02f, -5.449892315e-02f, -5.451031015e-02f, -5.452160117e-02f, -5.453279621e-02f, -5.454389527e-02f, -5.455489834e-02f, -5.456580541e-02f, -5.457661649e-02f,
--5.458733156e-02f, -5.459795063e-02f, -5.460847370e-02f, -5.461890076e-02f, -5.462923180e-02f, -5.463946683e-02f, -5.464960585e-02f, -5.465964884e-02f, -5.466959581e-02f, -5.467944676e-02f,
--5.468920169e-02f, -5.469886058e-02f, -5.470842345e-02f, -5.471789029e-02f, -5.472726110e-02f, -5.473653588e-02f, -5.474571463e-02f, -5.475479734e-02f, -5.476378402e-02f, -5.477267466e-02f,
--5.478146927e-02f, -5.479016785e-02f, -5.479877040e-02f, -5.480727691e-02f, -5.481568738e-02f, -5.482400183e-02f, -5.483222025e-02f, -5.484034263e-02f, -5.484836899e-02f, -5.485629932e-02f,
--5.486413362e-02f, -5.487187190e-02f, -5.487951415e-02f, -5.488706039e-02f, -5.489451060e-02f, -5.490186480e-02f, -5.490912299e-02f, -5.491628516e-02f, -5.492335133e-02f, -5.493032149e-02f,
--5.493719565e-02f, -5.494397382e-02f, -5.495065598e-02f, -5.495724216e-02f, -5.496373234e-02f, -5.497012655e-02f, -5.497642477e-02f, -5.498262702e-02f, -5.498873330e-02f, -5.499474361e-02f,
--5.500065795e-02f, -5.500647635e-02f, -5.501219879e-02f, -5.501782528e-02f, -5.502335583e-02f, -5.502879045e-02f, -5.503412914e-02f, -5.503937190e-02f, -5.504451875e-02f, -5.504956969e-02f,
--5.505452472e-02f, -5.505938385e-02f, -5.506414709e-02f, -5.506881444e-02f, -5.507338592e-02f, -5.507786153e-02f, -5.508224127e-02f, -5.508652516e-02f, -5.509071320e-02f, -5.509480540e-02f,
--5.509880177e-02f, -5.510270232e-02f, -5.510650704e-02f, -5.511021597e-02f, -5.511382909e-02f, -5.511734642e-02f, -5.512076798e-02f, -5.512409376e-02f, -5.512732378e-02f, -5.513045804e-02f,
--5.513349657e-02f, -5.513643936e-02f, -5.513928643e-02f, -5.514203778e-02f, -5.514469344e-02f, -5.514725339e-02f, -5.514971767e-02f, -5.515208628e-02f, -5.515435923e-02f, -5.515653653e-02f,
--5.515861819e-02f, -5.516060422e-02f, -5.516249464e-02f, -5.516428946e-02f, -5.516598868e-02f, -5.516759233e-02f, -5.516910041e-02f, -5.517051293e-02f, -5.517182992e-02f, -5.517305137e-02f,
--5.517417731e-02f, -5.517520775e-02f, -5.517614269e-02f, -5.517698216e-02f, -5.517772616e-02f, -5.517837472e-02f, -5.517892784e-02f, -5.517938554e-02f, -5.517974783e-02f, -5.518001473e-02f,
--5.518018625e-02f, -5.518026240e-02f, -5.518024321e-02f, -5.518012868e-02f, -5.517991883e-02f, -5.517961368e-02f, -5.517921324e-02f, -5.517871752e-02f, -5.517812655e-02f, -5.517744034e-02f,
--5.517665890e-02f, -5.517578226e-02f, -5.517481042e-02f, -5.517374340e-02f, -5.517258123e-02f, -5.517132391e-02f, -5.516997147e-02f, -5.516852392e-02f, -5.516698128e-02f, -5.516534357e-02f,
--5.516361080e-02f, -5.516178299e-02f, -5.515986016e-02f, -5.515784233e-02f, -5.515572952e-02f, -5.515352174e-02f, -5.515121902e-02f, -5.514882137e-02f, -5.514632881e-02f, -5.514374136e-02f,
--5.514105904e-02f, -5.513828187e-02f, -5.513540986e-02f, -5.513244305e-02f, -5.512938145e-02f, -5.512622507e-02f, -5.512297394e-02f, -5.511962808e-02f, -5.511618751e-02f, -5.511265225e-02f,
--5.510902233e-02f, -5.510529775e-02f, -5.510147855e-02f, -5.509756474e-02f, -5.509355635e-02f, -5.508945340e-02f, -5.508525590e-02f, -5.508096389e-02f, -5.507657738e-02f, -5.507209640e-02f,
--5.506752096e-02f, -5.506285110e-02f, -5.505808683e-02f, -5.505322817e-02f, -5.504827516e-02f, -5.504322780e-02f, -5.503808614e-02f, -5.503285018e-02f, -5.502751996e-02f, -5.502209549e-02f,
--5.501657681e-02f, -5.501096393e-02f, -5.500525688e-02f, -5.499945568e-02f, -5.499356037e-02f, -5.498757095e-02f, -5.498148747e-02f, -5.497530994e-02f, -5.496903839e-02f, -5.496267284e-02f,
--5.495621332e-02f, -5.494965986e-02f, -5.494301247e-02f, -5.493627120e-02f, -5.492943606e-02f, -5.492250708e-02f, -5.491548429e-02f, -5.490836770e-02f, -5.490115736e-02f, -5.489385329e-02f,
--5.488645551e-02f, -5.487896405e-02f, -5.487137894e-02f, -5.486370020e-02f, -5.485592787e-02f, -5.484806198e-02f, -5.484010254e-02f, -5.483204959e-02f, -5.482390316e-02f, -5.481566327e-02f,
--5.480732995e-02f, -5.479890324e-02f, -5.479038316e-02f, -5.478176974e-02f, -5.477306301e-02f, -5.476426300e-02f, -5.475536974e-02f, -5.474638326e-02f, -5.473730359e-02f, -5.472813075e-02f,
--5.471886479e-02f, -5.470950572e-02f, -5.470005359e-02f, -5.469050841e-02f, -5.468087023e-02f, -5.467113907e-02f, -5.466131496e-02f, -5.465139794e-02f, -5.464138803e-02f, -5.463128527e-02f,
--5.462108969e-02f, -5.461080133e-02f, -5.460042020e-02f, -5.458994636e-02f, -5.457937982e-02f, -5.456872062e-02f, -5.455796880e-02f, -5.454712438e-02f, -5.453618740e-02f, -5.452515789e-02f,
--5.451403589e-02f, -5.450282143e-02f, -5.449151454e-02f, -5.448011526e-02f, -5.446862362e-02f, -5.445703965e-02f, -5.444536340e-02f, -5.443359488e-02f, -5.442173414e-02f, -5.440978122e-02f,
--5.439773614e-02f, -5.438559894e-02f, -5.437336966e-02f, -5.436104834e-02f, -5.434863500e-02f, -5.433612968e-02f, -5.432353243e-02f, -5.431084327e-02f, -5.429806224e-02f, -5.428518937e-02f,
--5.427222471e-02f, -5.425916829e-02f, -5.424602015e-02f, -5.423278032e-02f, -5.421944884e-02f, -5.420602575e-02f, -5.419251108e-02f, -5.417890488e-02f, -5.416520717e-02f, -5.415141801e-02f,
--5.413753741e-02f, -5.412356543e-02f, -5.410950210e-02f, -5.409534746e-02f, -5.408110155e-02f, -5.406676441e-02f, -5.405233607e-02f, -5.403781657e-02f, -5.402320596e-02f, -5.400850427e-02f,
--5.399371154e-02f, -5.397882782e-02f, -5.396385313e-02f, -5.394878752e-02f, -5.393363104e-02f, -5.391838371e-02f, -5.390304559e-02f, -5.388761671e-02f, -5.387209710e-02f, -5.385648683e-02f,
--5.384078591e-02f, -5.382499440e-02f, -5.380911233e-02f, -5.379313975e-02f, -5.377707670e-02f, -5.376092322e-02f, -5.374467934e-02f, -5.372834513e-02f, -5.371192060e-02f, -5.369540582e-02f,
--5.367880081e-02f, -5.366210562e-02f, -5.364532030e-02f, -5.362844489e-02f, -5.361147943e-02f, -5.359442396e-02f, -5.357727852e-02f, -5.356004317e-02f, -5.354271794e-02f, -5.352530287e-02f,
--5.350779802e-02f, -5.349020342e-02f, -5.347251912e-02f, -5.345474516e-02f, -5.343688159e-02f, -5.341892845e-02f, -5.340088579e-02f, -5.338275365e-02f, -5.336453207e-02f, -5.334622111e-02f,
--5.332782080e-02f, -5.330933119e-02f, -5.329075233e-02f, -5.327208426e-02f, -5.325332703e-02f, -5.323448069e-02f, -5.321554528e-02f, -5.319652084e-02f, -5.317740743e-02f, -5.315820508e-02f,
--5.313891385e-02f, -5.311953379e-02f, -5.310006494e-02f, -5.308050734e-02f, -5.306086105e-02f, -5.304112611e-02f, -5.302130257e-02f, -5.300139048e-02f, -5.298138988e-02f, -5.296130082e-02f,
--5.294112336e-02f, -5.292085753e-02f, -5.290050340e-02f, -5.288006100e-02f, -5.285953038e-02f, -5.283891160e-02f, -5.281820470e-02f, -5.279740974e-02f, -5.277652675e-02f, -5.275555580e-02f,
--5.273449692e-02f, -5.271335018e-02f, -5.269211561e-02f, -5.267079328e-02f, -5.264938322e-02f, -5.262788550e-02f, -5.260630015e-02f, -5.258462724e-02f, -5.256286681e-02f, -5.254101891e-02f,
--5.251908359e-02f, -5.249706091e-02f, -5.247495092e-02f, -5.245275366e-02f, -5.243046919e-02f, -5.240809756e-02f, -5.238563882e-02f, -5.236309303e-02f, -5.234046023e-02f, -5.231774049e-02f,
--5.229493384e-02f, -5.227204034e-02f, -5.224906006e-02f, -5.222599303e-02f, -5.220283931e-02f, -5.217959896e-02f, -5.215627202e-02f, -5.213285856e-02f, -5.210935862e-02f, -5.208577226e-02f,
--5.206209954e-02f, -5.203834049e-02f, -5.201449519e-02f, -5.199056369e-02f, -5.196654603e-02f, -5.194244228e-02f, -5.191825248e-02f, -5.189397669e-02f, -5.186961498e-02f, -5.184516738e-02f,
--5.182063397e-02f, -5.179601478e-02f, -5.177130989e-02f, -5.174651934e-02f, -5.172164319e-02f, -5.169668149e-02f, -5.167163431e-02f, -5.164650169e-02f, -5.162128370e-02f, -5.159598038e-02f,
--5.157059181e-02f, -5.154511802e-02f, -5.151955909e-02f, -5.149391507e-02f, -5.146818600e-02f, -5.144237196e-02f, -5.141647300e-02f, -5.139048918e-02f, -5.136442055e-02f, -5.133826717e-02f,
--5.131202910e-02f, -5.128570640e-02f, -5.125929912e-02f, -5.123280733e-02f, -5.120623108e-02f, -5.117957043e-02f, -5.115282544e-02f, -5.112599618e-02f, -5.109908268e-02f, -5.107208503e-02f,
--5.104500327e-02f, -5.101783746e-02f, -5.099058767e-02f, -5.096325396e-02f, -5.093583638e-02f, -5.090833499e-02f, -5.088074986e-02f, -5.085308104e-02f, -5.082532860e-02f, -5.079749259e-02f,
--5.076957308e-02f, -5.074157012e-02f, -5.071348379e-02f, -5.068531413e-02f, -5.065706121e-02f, -5.062872509e-02f, -5.060030583e-02f, -5.057180350e-02f, -5.054321815e-02f, -5.051454985e-02f,
--5.048579865e-02f, -5.045696463e-02f, -5.042804784e-02f, -5.039904835e-02f, -5.036996621e-02f, -5.034080150e-02f, -5.031155427e-02f, -5.028222458e-02f, -5.025281251e-02f, -5.022331810e-02f,
--5.019374143e-02f, -5.016408256e-02f, -5.013434155e-02f, -5.010451847e-02f, -5.007461338e-02f, -5.004462634e-02f, -5.001455742e-02f, -4.998440668e-02f, -4.995417418e-02f, -4.992386000e-02f,
--4.989346419e-02f, -4.986298682e-02f, -4.983242795e-02f, -4.980178765e-02f, -4.977106599e-02f, -4.974026302e-02f, -4.970937882e-02f, -4.967841346e-02f, -4.964736698e-02f, -4.961623947e-02f,
--4.958503098e-02f, -4.955374159e-02f, -4.952237136e-02f, -4.949092035e-02f, -4.945938863e-02f, -4.942777628e-02f, -4.939608334e-02f, -4.936430990e-02f, -4.933245602e-02f, -4.930052176e-02f,
--4.926850719e-02f, -4.923641238e-02f, -4.920423740e-02f, -4.917198232e-02f, -4.913964719e-02f, -4.910723210e-02f, -4.907473710e-02f, -4.904216227e-02f, -4.900950767e-02f, -4.897677338e-02f,
--4.894395945e-02f, -4.891106596e-02f, -4.887809298e-02f, -4.884504058e-02f, -4.881190882e-02f, -4.877869777e-02f, -4.874540751e-02f, -4.871203810e-02f, -4.867858961e-02f, -4.864506211e-02f,
--4.861145568e-02f, -4.857777037e-02f, -4.854400626e-02f, -4.851016343e-02f, -4.847624193e-02f, -4.844224184e-02f, -4.840816324e-02f, -4.837400618e-02f, -4.833977075e-02f, -4.830545701e-02f,
--4.827106504e-02f, -4.823659489e-02f, -4.820204666e-02f, -4.816742040e-02f, -4.813271619e-02f, -4.809793409e-02f, -4.806307419e-02f, -4.802813655e-02f, -4.799312125e-02f, -4.795802835e-02f,
--4.792285793e-02f, -4.788761006e-02f, -4.785228482e-02f, -4.781688227e-02f, -4.778140249e-02f, -4.774584555e-02f, -4.771021152e-02f, -4.767450048e-02f, -4.763871249e-02f, -4.760284764e-02f,
--4.756690600e-02f, -4.753088764e-02f, -4.749479262e-02f, -4.745862104e-02f, -4.742237295e-02f, -4.738604844e-02f, -4.734964758e-02f, -4.731317043e-02f, -4.727661709e-02f, -4.723998761e-02f,
--4.720328208e-02f, -4.716650057e-02f, -4.712964315e-02f, -4.709270991e-02f, -4.705570090e-02f, -4.701861622e-02f, -4.698145593e-02f, -4.694422011e-02f, -4.690690883e-02f, -4.686952218e-02f,
--4.683206022e-02f, -4.679452303e-02f, -4.675691070e-02f, -4.671922328e-02f, -4.668146086e-02f, -4.664362353e-02f, -4.660571134e-02f, -4.656772438e-02f, -4.652966273e-02f, -4.649152646e-02f,
--4.645331565e-02f, -4.641503037e-02f, -4.637667071e-02f, -4.633823673e-02f, -4.629972853e-02f, -4.626114617e-02f, -4.622248973e-02f, -4.618375929e-02f, -4.614495493e-02f, -4.610607672e-02f,
--4.606712475e-02f, -4.602809909e-02f, -4.598899982e-02f, -4.594982701e-02f, -4.591058075e-02f, -4.587126112e-02f, -4.583186819e-02f, -4.579240204e-02f, -4.575286276e-02f, -4.571325041e-02f,
--4.567356508e-02f, -4.563380685e-02f, -4.559397580e-02f, -4.555407201e-02f, -4.551409555e-02f, -4.547404651e-02f, -4.543392496e-02f, -4.539373099e-02f, -4.535346468e-02f, -4.531312610e-02f,
--4.527271534e-02f, -4.523223247e-02f, -4.519167759e-02f, -4.515105075e-02f, -4.511035206e-02f, -4.506958159e-02f, -4.502873941e-02f, -4.498782562e-02f, -4.494684029e-02f, -4.490578350e-02f,
--4.486465533e-02f, -4.482345587e-02f, -4.478218520e-02f, -4.474084340e-02f, -4.469943055e-02f, -4.465794673e-02f, -4.461639202e-02f, -4.457476651e-02f, -4.453307028e-02f, -4.449130341e-02f,
--4.444946599e-02f, -4.440755809e-02f, -4.436557980e-02f, -4.432353120e-02f, -4.428141237e-02f, -4.423922340e-02f, -4.419696437e-02f, -4.415463537e-02f, -4.411223647e-02f, -4.406976776e-02f,
--4.402722932e-02f, -4.398462124e-02f, -4.394194360e-02f, -4.389919649e-02f, -4.385637998e-02f, -4.381349417e-02f, -4.377053913e-02f, -4.372751496e-02f, -4.368442172e-02f, -4.364125952e-02f,
--4.359802843e-02f, -4.355472854e-02f, -4.351135994e-02f, -4.346792270e-02f, -4.342441691e-02f, -4.338084267e-02f, -4.333720004e-02f, -4.329348913e-02f, -4.324971001e-02f, -4.320586276e-02f,
--4.316194749e-02f, -4.311796426e-02f, -4.307391317e-02f, -4.302979430e-02f, -4.298560774e-02f, -4.294135358e-02f, -4.289703189e-02f, -4.285264277e-02f, -4.280818631e-02f, -4.276366258e-02f,
--4.271907168e-02f, -4.267441370e-02f, -4.262968871e-02f, -4.258489681e-02f, -4.254003809e-02f, -4.249511262e-02f, -4.245012051e-02f, -4.240506183e-02f, -4.235993667e-02f, -4.231474512e-02f,
--4.226948727e-02f, -4.222416321e-02f, -4.217877301e-02f, -4.213331678e-02f, -4.208779460e-02f, -4.204220656e-02f, -4.199655274e-02f, -4.195083324e-02f, -4.190504814e-02f, -4.185919753e-02f,
--4.181328150e-02f, -4.176730013e-02f, -4.172125353e-02f, -4.167514177e-02f, -4.162896494e-02f, -4.158272314e-02f, -4.153641645e-02f, -4.149004496e-02f, -4.144360877e-02f, -4.139710796e-02f,
--4.135054261e-02f, -4.130391283e-02f, -4.125721870e-02f, -4.121046031e-02f, -4.116363775e-02f, -4.111675111e-02f, -4.106980048e-02f, -4.102278594e-02f, -4.097570761e-02f, -4.092856555e-02f,
--4.088135986e-02f, -4.083409064e-02f, -4.078675797e-02f, -4.073936194e-02f, -4.069190265e-02f, -4.064438018e-02f, -4.059679464e-02f, -4.054914609e-02f, -4.050143465e-02f, -4.045366040e-02f,
--4.040582344e-02f, -4.035792384e-02f, -4.030996172e-02f, -4.026193715e-02f, -4.021385023e-02f, -4.016570105e-02f, -4.011748970e-02f, -4.006921628e-02f, -4.002088088e-02f, -3.997248359e-02f,
--3.992402449e-02f, -3.987550370e-02f, -3.982692129e-02f, -3.977827736e-02f, -3.972957201e-02f, -3.968080532e-02f, -3.963197739e-02f, -3.958308831e-02f, -3.953413817e-02f, -3.948512708e-02f,
--3.943605511e-02f, -3.938692237e-02f, -3.933772895e-02f, -3.928847494e-02f, -3.923916044e-02f, -3.918978553e-02f, -3.914035032e-02f, -3.909085490e-02f, -3.904129936e-02f, -3.899168379e-02f,
--3.894200829e-02f, -3.889227296e-02f, -3.884247788e-02f, -3.879262316e-02f, -3.874270888e-02f, -3.869273515e-02f, -3.864270205e-02f, -3.859260968e-02f, -3.854245815e-02f, -3.849224753e-02f,
--3.844197792e-02f, -3.839164943e-02f, -3.834126215e-02f, -3.829081617e-02f, -3.824031159e-02f, -3.818974850e-02f, -3.813912699e-02f, -3.808844718e-02f, -3.803770914e-02f, -3.798691298e-02f,
--3.793605879e-02f, -3.788514667e-02f, -3.783417671e-02f, -3.778314902e-02f, -3.773206368e-02f, -3.768092079e-02f, -3.762972045e-02f, -3.757846276e-02f, -3.752714781e-02f, -3.747577570e-02f,
--3.742434653e-02f, -3.737286038e-02f, -3.732131737e-02f, -3.726971759e-02f, -3.721806113e-02f, -3.716634809e-02f, -3.711457857e-02f, -3.706275266e-02f, -3.701087047e-02f, -3.695893209e-02f,
--3.690693762e-02f, -3.685488715e-02f, -3.680278079e-02f, -3.675061863e-02f, -3.669840077e-02f, -3.664612730e-02f, -3.659379834e-02f, -3.654141396e-02f, -3.648897428e-02f, -3.643647939e-02f,
--3.638392938e-02f, -3.633132437e-02f, -3.627866444e-02f, -3.622594969e-02f, -3.617318023e-02f, -3.612035615e-02f, -3.606747755e-02f, -3.601454453e-02f, -3.596155719e-02f, -3.590851563e-02f,
--3.585541995e-02f, -3.580227024e-02f, -3.574906660e-02f, -3.569580915e-02f, -3.564249796e-02f, -3.558913316e-02f, -3.553571482e-02f, -3.548224306e-02f, -3.542871797e-02f, -3.537513966e-02f,
--3.532150822e-02f, -3.526782375e-02f, -3.521408636e-02f, -3.516029614e-02f, -3.510645320e-02f, -3.505255763e-02f, -3.499860953e-02f, -3.494460901e-02f, -3.489055616e-02f, -3.483645110e-02f,
--3.478229390e-02f, -3.472808469e-02f, -3.467382356e-02f, -3.461951060e-02f, -3.456514593e-02f, -3.451072963e-02f, -3.445626183e-02f, -3.440174260e-02f, -3.434717206e-02f, -3.429255031e-02f,
--3.423787744e-02f, -3.418315357e-02f, -3.412837879e-02f, -3.407355320e-02f, -3.401867690e-02f, -3.396375000e-02f, -3.390877260e-02f, -3.385374480e-02f, -3.379866671e-02f, -3.374353841e-02f,
--3.368836003e-02f, -3.363313165e-02f, -3.357785339e-02f, -3.352252534e-02f, -3.346714760e-02f, -3.341172028e-02f, -3.335624349e-02f, -3.330071731e-02f, -3.324514187e-02f, -3.318951725e-02f,
--3.313384357e-02f, -3.307812092e-02f, -3.302234941e-02f, -3.296652914e-02f, -3.291066021e-02f, -3.285474273e-02f, -3.279877681e-02f, -3.274276253e-02f, -3.268670002e-02f, -3.263058936e-02f,
--3.257443067e-02f, -3.251822405e-02f, -3.246196960e-02f, -3.240566742e-02f, -3.234931763e-02f, -3.229292031e-02f, -3.223647559e-02f, -3.217998355e-02f, -3.212344431e-02f, -3.206685797e-02f,
--3.201022464e-02f, -3.195354441e-02f, -3.189681739e-02f, -3.184004369e-02f, -3.178322341e-02f, -3.172635665e-02f, -3.166944353e-02f, -3.161248414e-02f, -3.155547859e-02f, -3.149842698e-02f,
--3.144132942e-02f, -3.138418602e-02f, -3.132699687e-02f, -3.126976209e-02f, -3.121248178e-02f, -3.115515604e-02f, -3.109778498e-02f, -3.104036870e-02f, -3.098290731e-02f, -3.092540092e-02f,
--3.086784963e-02f, -3.081025355e-02f, -3.075261278e-02f, -3.069492742e-02f, -3.063719759e-02f, -3.057942338e-02f, -3.052160492e-02f, -3.046374229e-02f, -3.040583561e-02f, -3.034788498e-02f,
--3.028989050e-02f, -3.023185230e-02f, -3.017377046e-02f, -3.011564510e-02f, -3.005747633e-02f, -2.999926424e-02f, -2.994100895e-02f, -2.988271056e-02f, -2.982436919e-02f, -2.976598492e-02f,
--2.970755788e-02f, -2.964908817e-02f, -2.959057589e-02f, -2.953202116e-02f, -2.947342408e-02f, -2.941478475e-02f, -2.935610328e-02f, -2.929737979e-02f, -2.923861437e-02f, -2.917980714e-02f,
--2.912095820e-02f, -2.906206766e-02f, -2.900313562e-02f, -2.894416220e-02f, -2.888514750e-02f, -2.882609163e-02f, -2.876699469e-02f, -2.870785680e-02f, -2.864867806e-02f, -2.858945858e-02f,
--2.853019846e-02f, -2.847089782e-02f, -2.841155676e-02f, -2.835217540e-02f, -2.829275383e-02f, -2.823329216e-02f, -2.817379051e-02f, -2.811424899e-02f, -2.805466769e-02f, -2.799504674e-02f,
--2.793538623e-02f, -2.787568627e-02f, -2.781594698e-02f, -2.775616847e-02f, -2.769635083e-02f, -2.763649418e-02f, -2.757659863e-02f, -2.751666429e-02f, -2.745669126e-02f, -2.739667966e-02f,
--2.733662959e-02f, -2.727654116e-02f, -2.721641448e-02f, -2.715624966e-02f, -2.709604681e-02f, -2.703580603e-02f, -2.697552745e-02f, -2.691521116e-02f, -2.685485727e-02f, -2.679446590e-02f,
--2.673403715e-02f, -2.667357113e-02f, -2.661306795e-02f, -2.655252773e-02f, -2.649195057e-02f, -2.643133658e-02f, -2.637068586e-02f, -2.630999854e-02f, -2.624927472e-02f, -2.618851450e-02f,
--2.612771801e-02f, -2.606688534e-02f, -2.600601661e-02f, -2.594511193e-02f, -2.588417141e-02f, -2.582319515e-02f, -2.576218327e-02f, -2.570113588e-02f, -2.564005309e-02f, -2.557893501e-02f,
--2.551778175e-02f, -2.545659341e-02f, -2.539537011e-02f, -2.533411197e-02f, -2.527281908e-02f, -2.521149156e-02f, -2.515012953e-02f, -2.508873308e-02f, -2.502730234e-02f, -2.496583740e-02f,
--2.490433840e-02f, -2.484280542e-02f, -2.478123859e-02f, -2.471963801e-02f, -2.465800380e-02f, -2.459633607e-02f, -2.453463492e-02f, -2.447290047e-02f, -2.441113283e-02f, -2.434933211e-02f,
--2.428749843e-02f, -2.422563188e-02f, -2.416373259e-02f, -2.410180066e-02f, -2.403983621e-02f, -2.397783935e-02f, -2.391581018e-02f, -2.385374883e-02f, -2.379165539e-02f, -2.372952999e-02f,
--2.366737273e-02f, -2.360518373e-02f, -2.354296309e-02f, -2.348071093e-02f, -2.341842736e-02f, -2.335611249e-02f, -2.329376644e-02f, -2.323138931e-02f, -2.316898122e-02f, -2.310654227e-02f,
--2.304407259e-02f, -2.298157228e-02f, -2.291904145e-02f, -2.285648021e-02f, -2.279388869e-02f, -2.273126698e-02f, -2.266861521e-02f, -2.260593348e-02f, -2.254322190e-02f, -2.248048060e-02f,
--2.241770967e-02f, -2.235490924e-02f, -2.229207941e-02f, -2.222922029e-02f, -2.216633201e-02f, -2.210341467e-02f, -2.204046838e-02f, -2.197749325e-02f, -2.191448941e-02f, -2.185145695e-02f,
--2.178839600e-02f, -2.172530667e-02f, -2.166218906e-02f, -2.159904330e-02f, -2.153586949e-02f, -2.147266774e-02f, -2.140943817e-02f, -2.134618090e-02f, -2.128289603e-02f, -2.121958367e-02f,
--2.115624395e-02f, -2.109287697e-02f, -2.102948285e-02f, -2.096606169e-02f, -2.090261361e-02f, -2.083913873e-02f, -2.077563716e-02f, -2.071210901e-02f, -2.064855439e-02f, -2.058497341e-02f,
--2.052136620e-02f, -2.045773286e-02f, -2.039407350e-02f, -2.033038825e-02f, -2.026667720e-02f, -2.020294048e-02f, -2.013917820e-02f, -2.007539048e-02f, -2.001157741e-02f, -1.994773913e-02f,
--1.988387574e-02f, -1.981998735e-02f, -1.975607408e-02f, -1.969213605e-02f, -1.962817336e-02f, -1.956418612e-02f, -1.950017447e-02f, -1.943613849e-02f, -1.937207832e-02f, -1.930799406e-02f,
--1.924388583e-02f, -1.917975374e-02f, -1.911559790e-02f, -1.905141843e-02f, -1.898721545e-02f, -1.892298905e-02f, -1.885873937e-02f, -1.879446651e-02f, -1.873017059e-02f, -1.866585172e-02f,
--1.860151001e-02f, -1.853714558e-02f, -1.847275855e-02f, -1.840834901e-02f, -1.834391710e-02f, -1.827946293e-02f, -1.821498660e-02f, -1.815048823e-02f, -1.808596794e-02f, -1.802142585e-02f,
--1.795686205e-02f, -1.789227667e-02f, -1.782766983e-02f, -1.776304163e-02f, -1.769839219e-02f, -1.763372163e-02f, -1.756903006e-02f, -1.750431759e-02f, -1.743958434e-02f, -1.737483042e-02f,
--1.731005594e-02f, -1.724526103e-02f, -1.718044579e-02f, -1.711561034e-02f, -1.705075479e-02f, -1.698587926e-02f, -1.692098387e-02f, -1.685606871e-02f, -1.679113392e-02f, -1.672617961e-02f,
--1.666120588e-02f, -1.659621286e-02f, -1.653120066e-02f, -1.646616939e-02f, -1.640111917e-02f, -1.633605011e-02f, -1.627096233e-02f, -1.620585594e-02f, -1.614073105e-02f, -1.607558779e-02f,
--1.601042626e-02f, -1.594524658e-02f, -1.588004886e-02f, -1.581483322e-02f, -1.574959978e-02f, -1.568434864e-02f, -1.561907993e-02f, -1.555379376e-02f, -1.548849023e-02f, -1.542316948e-02f,
--1.535783160e-02f, -1.529247673e-02f, -1.522710496e-02f, -1.516171642e-02f, -1.509631122e-02f, -1.503088948e-02f, -1.496545130e-02f, -1.489999682e-02f, -1.483452613e-02f, -1.476903935e-02f,
--1.470353661e-02f, -1.463801801e-02f, -1.457248367e-02f, -1.450693371e-02f, -1.444136823e-02f, -1.437578736e-02f, -1.431019121e-02f, -1.424457989e-02f, -1.417895352e-02f, -1.411331222e-02f,
--1.404765609e-02f, -1.398198526e-02f, -1.391629983e-02f, -1.385059993e-02f, -1.378488567e-02f, -1.371915716e-02f, -1.365341453e-02f, -1.358765787e-02f, -1.352188731e-02f, -1.345610297e-02f,
--1.339030496e-02f, -1.332449339e-02f, -1.325866838e-02f, -1.319283004e-02f, -1.312697849e-02f, -1.306111385e-02f, -1.299523622e-02f, -1.292934573e-02f, -1.286344249e-02f, -1.279752661e-02f,
--1.273159821e-02f, -1.266565741e-02f, -1.259970431e-02f, -1.253373904e-02f, -1.246776172e-02f, -1.240177244e-02f, -1.233577134e-02f, -1.226975852e-02f, -1.220373410e-02f, -1.213769819e-02f,
--1.207165092e-02f, -1.200559239e-02f, -1.193952272e-02f, -1.187344203e-02f, -1.180735043e-02f, -1.174124804e-02f, -1.167513497e-02f, -1.160901133e-02f, -1.154287725e-02f, -1.147673283e-02f,
--1.141057819e-02f, -1.134441345e-02f, -1.127823872e-02f, -1.121205413e-02f, -1.114585977e-02f, -1.107965577e-02f, -1.101344224e-02f, -1.094721930e-02f, -1.088098707e-02f, -1.081474565e-02f,
--1.074849516e-02f, -1.068223573e-02f, -1.061596745e-02f, -1.054969046e-02f, -1.048340486e-02f, -1.041711077e-02f, -1.035080830e-02f, -1.028449757e-02f, -1.021817870e-02f, -1.015185180e-02f,
--1.008551698e-02f, -1.001917436e-02f, -9.952824053e-03f, -9.886466179e-03f, -9.820100849e-03f, -9.753728180e-03f, -9.687348286e-03f, -9.620961282e-03f, -9.554567284e-03f, -9.488166406e-03f,
--9.421758764e-03f, -9.355344473e-03f, -9.288923648e-03f, -9.222496403e-03f, -9.156062854e-03f, -9.089623117e-03f, -9.023177305e-03f, -8.956725535e-03f, -8.890267920e-03f, -8.823804577e-03f,
--8.757335620e-03f, -8.690861164e-03f, -8.624381324e-03f, -8.557896216e-03f, -8.491405954e-03f, -8.424910653e-03f, -8.358410428e-03f, -8.291905394e-03f, -8.225395666e-03f, -8.158881359e-03f,
--8.092362589e-03f, -8.025839469e-03f, -7.959312115e-03f, -7.892780642e-03f, -7.826245165e-03f, -7.759705798e-03f, -7.693162657e-03f, -7.626615856e-03f, -7.560065510e-03f, -7.493511734e-03f,
--7.426954643e-03f, -7.360394352e-03f, -7.293830976e-03f, -7.227264629e-03f, -7.160695426e-03f, -7.094123482e-03f, -7.027548912e-03f, -6.960971831e-03f, -6.894392353e-03f, -6.827810592e-03f,
--6.761226665e-03f, -6.694640685e-03f, -6.628052767e-03f, -6.561463026e-03f, -6.494871577e-03f, -6.428278534e-03f, -6.361684012e-03f, -6.295088125e-03f, -6.228490989e-03f, -6.161892717e-03f,
--6.095293424e-03f, -6.028693226e-03f, -5.962092235e-03f, -5.895490568e-03f, -5.828888339e-03f, -5.762285661e-03f, -5.695682650e-03f, -5.629079420e-03f, -5.562476086e-03f, -5.495872762e-03f,
--5.429269562e-03f, -5.362666601e-03f, -5.296063993e-03f, -5.229461853e-03f, -5.162860294e-03f, -5.096259433e-03f, -5.029659381e-03f, -4.963060255e-03f, -4.896462168e-03f, -4.829865235e-03f,
--4.763269570e-03f, -4.696675286e-03f, -4.630082499e-03f, -4.563491323e-03f, -4.496901871e-03f, -4.430314258e-03f, -4.363728598e-03f, -4.297145005e-03f, -4.230563594e-03f, -4.163984477e-03f,
--4.097407771e-03f, -4.030833587e-03f, -3.964262041e-03f, -3.897693247e-03f, -3.831127318e-03f, -3.764564369e-03f, -3.698004513e-03f, -3.631447864e-03f, -3.564894537e-03f, -3.498344644e-03f,
--3.431798301e-03f, -3.365255620e-03f, -3.298716716e-03f, -3.232181702e-03f, -3.165650692e-03f, -3.099123800e-03f, -3.032601140e-03f, -2.966082825e-03f, -2.899568969e-03f, -2.833059686e-03f,
--2.766555088e-03f, -2.700055291e-03f, -2.633560407e-03f, -2.567070550e-03f, -2.500585833e-03f, -2.434106371e-03f, -2.367632276e-03f, -2.301163661e-03f, -2.234700641e-03f, -2.168243329e-03f,
--2.101791838e-03f, -2.035346281e-03f, -1.968906772e-03f, -1.902473423e-03f, -1.836046350e-03f, -1.769625663e-03f, -1.703211478e-03f, -1.636803906e-03f, -1.570403062e-03f, -1.504009057e-03f,
--1.437622006e-03f, -1.371242022e-03f, -1.304869216e-03f, -1.238503703e-03f, -1.172145596e-03f, -1.105795007e-03f, -1.039452049e-03f, -9.731168359e-04f, -9.067894795e-04f, -8.404700930e-04f,
--7.741587893e-04f, -7.078556810e-04f, -6.415608811e-04f, -5.752745021e-04f, -5.089966568e-04f, -4.427274579e-04f, -3.764670179e-04f, -3.102154495e-04f, -2.439728652e-04f, -1.777393776e-04f,
--1.115150991e-04f, -4.530014231e-05f, 2.090538041e-05f, 8.710135665e-05f, 1.532876740e-04f, 2.194642202e-04f, 2.856308828e-04f, 3.517875497e-04f, 4.179341085e-04f, 4.840704471e-04f,
-5.501964532e-04f, 6.163120148e-04f, 6.824170197e-04f, 7.485113558e-04f, 8.145949112e-04f, 8.806675737e-04f, 9.467292315e-04f, 1.012779773e-03f, 1.078819085e-03f, 1.144847057e-03f,
-1.210863577e-03f, 1.276868532e-03f, 1.342861812e-03f, 1.408843304e-03f, 1.474812897e-03f, 1.540770479e-03f, 1.606715938e-03f, 1.672649163e-03f, 1.738570043e-03f, 1.804478465e-03f,
-1.870374319e-03f, 1.936257492e-03f, 2.002127874e-03f, 2.067985354e-03f, 2.133829819e-03f, 2.199661159e-03f, 2.265479262e-03f, 2.331284017e-03f, 2.397075313e-03f, 2.462853039e-03f,
-2.528617084e-03f, 2.594367336e-03f, 2.660103685e-03f, 2.725826020e-03f, 2.791534230e-03f, 2.857228204e-03f, 2.922907830e-03f, 2.988572999e-03f, 3.054223600e-03f, 3.119859521e-03f,
-3.185480652e-03f, 3.251086883e-03f, 3.316678103e-03f, 3.382254200e-03f, 3.447815066e-03f, 3.513360589e-03f, 3.578890659e-03f, 3.644405165e-03f, 3.709903997e-03f, 3.775387045e-03f,
-3.840854198e-03f, 3.906305347e-03f, 3.971740381e-03f, 4.037159190e-03f, 4.102561664e-03f, 4.167947692e-03f, 4.233317165e-03f, 4.298669974e-03f, 4.364006007e-03f, 4.429325155e-03f,
-4.494627308e-03f, 4.559912357e-03f, 4.625180192e-03f, 4.690430702e-03f, 4.755663779e-03f, 4.820879313e-03f, 4.886077193e-03f, 4.951257312e-03f, 5.016419558e-03f, 5.081563824e-03f,
-5.146689999e-03f, 5.211797974e-03f, 5.276887639e-03f, 5.341958887e-03f, 5.407011606e-03f, 5.472045689e-03f, 5.537061026e-03f, 5.602057508e-03f, 5.667035026e-03f, 5.731993471e-03f,
-5.796932735e-03f, 5.861852708e-03f, 5.926753281e-03f, 5.991634346e-03f, 6.056495795e-03f, 6.121337517e-03f, 6.186159406e-03f, 6.250961352e-03f, 6.315743247e-03f, 6.380504981e-03f,
-6.445246448e-03f, 6.509967539e-03f, 6.574668144e-03f, 6.639348156e-03f, 6.704007468e-03f, 6.768645969e-03f, 6.833263554e-03f, 6.897860112e-03f, 6.962435537e-03f, 7.026989721e-03f,
-7.091522555e-03f, 7.156033931e-03f, 7.220523743e-03f, 7.284991882e-03f, 7.349438240e-03f, 7.413862710e-03f, 7.478265184e-03f, 7.542645554e-03f, 7.607003714e-03f, 7.671339556e-03f,
-7.735652972e-03f, 7.799943855e-03f, 7.864212098e-03f, 7.928457594e-03f, 7.992680234e-03f, 8.056879913e-03f, 8.121056524e-03f, 8.185209958e-03f, 8.249340110e-03f, 8.313446872e-03f,
-8.377530138e-03f, 8.441589801e-03f, 8.505625753e-03f, 8.569637889e-03f, 8.633626102e-03f, 8.697590285e-03f, 8.761530332e-03f, 8.825446136e-03f, 8.889337591e-03f, 8.953204590e-03f,
-9.017047028e-03f, 9.080864798e-03f, 9.144657793e-03f, 9.208425909e-03f, 9.272169038e-03f, 9.335887075e-03f, 9.399579914e-03f, 9.463247448e-03f, 9.526889573e-03f, 9.590506182e-03f,
-9.654097170e-03f, 9.717662432e-03f, 9.781201860e-03f, 9.844715351e-03f, 9.908202798e-03f, 9.971664096e-03f, 1.003509914e-02f, 1.009850782e-02f, 1.016189004e-02f, 1.022524569e-02f,
-1.028857467e-02f, 1.035187686e-02f, 1.041515217e-02f, 1.047840049e-02f, 1.054162172e-02f, 1.060481574e-02f, 1.066798246e-02f, 1.073112177e-02f, 1.079423357e-02f, 1.085731775e-02f,
-1.092037421e-02f, 1.098340284e-02f, 1.104640354e-02f, 1.110937620e-02f, 1.117232073e-02f, 1.123523700e-02f, 1.129812494e-02f, 1.136098441e-02f, 1.142381534e-02f, 1.148661760e-02f,
-1.154939110e-02f, 1.161213573e-02f, 1.167485138e-02f, 1.173753797e-02f, 1.180019537e-02f, 1.186282349e-02f, 1.192542223e-02f, 1.198799147e-02f, 1.205053113e-02f, 1.211304108e-02f,
-1.217552124e-02f, 1.223797150e-02f, 1.230039175e-02f, 1.236278189e-02f, 1.242514182e-02f, 1.248747144e-02f, 1.254977064e-02f, 1.261203932e-02f, 1.267427738e-02f, 1.273648471e-02f,
-1.279866121e-02f, 1.286080679e-02f, 1.292292133e-02f, 1.298500474e-02f, 1.304705691e-02f, 1.310907774e-02f, 1.317106712e-02f, 1.323302497e-02f, 1.329495117e-02f, 1.335684562e-02f,
-1.341870822e-02f, 1.348053887e-02f, 1.354233747e-02f, 1.360410391e-02f, 1.366583810e-02f, 1.372753993e-02f, 1.378920930e-02f, 1.385084611e-02f, 1.391245026e-02f, 1.397402164e-02f,
-1.403556016e-02f, 1.409706572e-02f, 1.415853820e-02f, 1.421997752e-02f, 1.428138358e-02f, 1.434275626e-02f, 1.440409547e-02f, 1.446540111e-02f, 1.452667308e-02f, 1.458791128e-02f,
-1.464911561e-02f, 1.471028596e-02f, 1.477142225e-02f, 1.483252435e-02f, 1.489359219e-02f, 1.495462565e-02f, 1.501562464e-02f, 1.507658905e-02f, 1.513751879e-02f, 1.519841376e-02f,
-1.525927385e-02f, 1.532009898e-02f, 1.538088903e-02f, 1.544164390e-02f, 1.550236351e-02f, 1.556304775e-02f, 1.562369651e-02f, 1.568430971e-02f, 1.574488724e-02f, 1.580542900e-02f,
-1.586593490e-02f, 1.592640483e-02f, 1.598683870e-02f, 1.604723640e-02f, 1.610759784e-02f, 1.616792293e-02f, 1.622821155e-02f, 1.628846362e-02f, 1.634867903e-02f, 1.640885769e-02f,
-1.646899949e-02f, 1.652910435e-02f, 1.658917216e-02f, 1.664920282e-02f, 1.670919624e-02f, 1.676915231e-02f, 1.682907095e-02f, 1.688895204e-02f, 1.694879551e-02f, 1.700860124e-02f,
-1.706836914e-02f, 1.712809911e-02f, 1.718779106e-02f, 1.724744488e-02f, 1.730706049e-02f, 1.736663778e-02f, 1.742617666e-02f, 1.748567702e-02f, 1.754513878e-02f, 1.760456184e-02f,
-1.766394610e-02f, 1.772329145e-02f, 1.778259782e-02f, 1.784186510e-02f, 1.790109318e-02f, 1.796028199e-02f, 1.801943142e-02f, 1.807854137e-02f, 1.813761176e-02f, 1.819664247e-02f,
-1.825563343e-02f, 1.831458452e-02f, 1.837349566e-02f, 1.843236675e-02f, 1.849119770e-02f, 1.854998840e-02f, 1.860873877e-02f, 1.866744871e-02f, 1.872611812e-02f, 1.878474691e-02f,
-1.884333498e-02f, 1.890188224e-02f, 1.896038860e-02f, 1.901885395e-02f, 1.907727821e-02f, 1.913566127e-02f, 1.919400305e-02f, 1.925230345e-02f, 1.931056238e-02f, 1.936877974e-02f,
-1.942695543e-02f, 1.948508937e-02f, 1.954318146e-02f, 1.960123160e-02f, 1.965923971e-02f, 1.971720568e-02f, 1.977512943e-02f, 1.983301086e-02f, 1.989084987e-02f, 1.994864638e-02f,
-2.000640028e-02f, 2.006411150e-02f, 2.012177992e-02f, 2.017940547e-02f, 2.023698805e-02f, 2.029452756e-02f, 2.035202391e-02f, 2.040947701e-02f, 2.046688677e-02f, 2.052425309e-02f,
-2.058157588e-02f, 2.063885505e-02f, 2.069609050e-02f, 2.075328215e-02f, 2.081042991e-02f, 2.086753367e-02f, 2.092459335e-02f, 2.098160886e-02f, 2.103858010e-02f, 2.109550699e-02f,
-2.115238942e-02f, 2.120922732e-02f, 2.126602058e-02f, 2.132276912e-02f, 2.137947285e-02f, 2.143613167e-02f, 2.149274549e-02f, 2.154931423e-02f, 2.160583778e-02f, 2.166231607e-02f,
-2.171874900e-02f, 2.177513648e-02f, 2.183147841e-02f, 2.188777472e-02f, 2.194402530e-02f, 2.200023007e-02f, 2.205638894e-02f, 2.211250181e-02f, 2.216856861e-02f, 2.222458923e-02f,
-2.228056359e-02f, 2.233649159e-02f, 2.239237316e-02f, 2.244820819e-02f, 2.250399660e-02f, 2.255973831e-02f, 2.261543321e-02f, 2.267108122e-02f, 2.272668226e-02f, 2.278223623e-02f,
-2.283774305e-02f, 2.289320262e-02f, 2.294861486e-02f, 2.300397968e-02f, 2.305929699e-02f, 2.311456670e-02f, 2.316978872e-02f, 2.322496297e-02f, 2.328008936e-02f, 2.333516779e-02f,
-2.339019819e-02f, 2.344518046e-02f, 2.350011451e-02f, 2.355500027e-02f, 2.360983763e-02f, 2.366462651e-02f, 2.371936684e-02f, 2.377405850e-02f, 2.382870143e-02f, 2.388329554e-02f,
-2.393784073e-02f, 2.399233692e-02f, 2.404678402e-02f, 2.410118195e-02f, 2.415553062e-02f, 2.420982994e-02f, 2.426407983e-02f, 2.431828020e-02f, 2.437243097e-02f, 2.442653204e-02f,
-2.448058333e-02f, 2.453458476e-02f, 2.458853625e-02f, 2.464243769e-02f, 2.469628902e-02f, 2.475009013e-02f, 2.480384096e-02f, 2.485754141e-02f, 2.491119139e-02f, 2.496479083e-02f,
-2.501833964e-02f, 2.507183773e-02f, 2.512528501e-02f, 2.517868141e-02f, 2.523202683e-02f, 2.528532120e-02f, 2.533856443e-02f, 2.539175643e-02f, 2.544489712e-02f, 2.549798642e-02f,
-2.555102424e-02f, 2.560401050e-02f, 2.565694511e-02f, 2.570982799e-02f, 2.576265906e-02f, 2.581543824e-02f, 2.586816543e-02f, 2.592084056e-02f, 2.597346354e-02f, 2.602603429e-02f,
-2.607855273e-02f, 2.613101877e-02f, 2.618343233e-02f, 2.623579334e-02f, 2.628810169e-02f, 2.634035732e-02f, 2.639256014e-02f, 2.644471007e-02f, 2.649680703e-02f, 2.654885093e-02f,
-2.660084169e-02f, 2.665277923e-02f, 2.670466347e-02f, 2.675649432e-02f, 2.680827171e-02f, 2.685999555e-02f, 2.691166577e-02f, 2.696328227e-02f, 2.701484498e-02f, 2.706635383e-02f,
-2.711780871e-02f, 2.716920957e-02f, 2.722055631e-02f, 2.727184885e-02f, 2.732308712e-02f, 2.737427103e-02f, 2.742540050e-02f, 2.747647546e-02f, 2.752749582e-02f, 2.757846150e-02f,
-2.762937243e-02f, 2.768022851e-02f, 2.773102968e-02f, 2.778177585e-02f, 2.783246695e-02f, 2.788310289e-02f, 2.793368360e-02f, 2.798420899e-02f, 2.803467898e-02f, 2.808509351e-02f,
-2.813545248e-02f, 2.818575582e-02f, 2.823600346e-02f, 2.828619530e-02f, 2.833633128e-02f, 2.838641132e-02f, 2.843643533e-02f, 2.848640324e-02f, 2.853631497e-02f, 2.858617045e-02f,
-2.863596959e-02f, 2.868571231e-02f, 2.873539855e-02f, 2.878502822e-02f, 2.883460124e-02f, 2.888411754e-02f, 2.893357704e-02f, 2.898297966e-02f, 2.903232533e-02f, 2.908161397e-02f,
-2.913084550e-02f, 2.918001985e-02f, 2.922913693e-02f, 2.927819668e-02f, 2.932719902e-02f, 2.937614386e-02f, 2.942503114e-02f, 2.947386078e-02f, 2.952263269e-02f, 2.957134682e-02f,
-2.962000307e-02f, 2.966860138e-02f, 2.971714167e-02f, 2.976562386e-02f, 2.981404788e-02f, 2.986241366e-02f, 2.991072111e-02f, 2.995897017e-02f, 3.000716076e-02f, 3.005529280e-02f,
-3.010336621e-02f, 3.015138094e-02f, 3.019933689e-02f, 3.024723401e-02f, 3.029507220e-02f, 3.034285140e-02f, 3.039057154e-02f, 3.043823253e-02f, 3.048583432e-02f, 3.053337681e-02f,
-3.058085995e-02f, 3.062828365e-02f, 3.067564784e-02f, 3.072295246e-02f, 3.077019742e-02f, 3.081738266e-02f, 3.086450809e-02f, 3.091157366e-02f, 3.095857928e-02f, 3.100552488e-02f,
-3.105241040e-02f, 3.109923575e-02f, 3.114600087e-02f, 3.119270568e-02f, 3.123935012e-02f, 3.128593411e-02f, 3.133245757e-02f, 3.137892045e-02f, 3.142532266e-02f, 3.147166413e-02f,
-3.151794480e-02f, 3.156416459e-02f, 3.161032343e-02f, 3.165642126e-02f, 3.170245799e-02f, 3.174843356e-02f, 3.179434790e-02f, 3.184020093e-02f, 3.188599260e-02f, 3.193172282e-02f,
-3.197739153e-02f, 3.202299866e-02f, 3.206854413e-02f, 3.211402789e-02f, 3.215944985e-02f, 3.220480995e-02f, 3.225010812e-02f, 3.229534429e-02f, 3.234051839e-02f, 3.238563035e-02f,
-3.243068010e-02f, 3.247566758e-02f, 3.252059271e-02f, 3.256545543e-02f, 3.261025567e-02f, 3.265499336e-02f, 3.269966843e-02f, 3.274428082e-02f, 3.278883044e-02f, 3.283331725e-02f,
-3.287774117e-02f, 3.292210213e-02f, 3.296640006e-02f, 3.301063490e-02f, 3.305480658e-02f, 3.309891504e-02f, 3.314296019e-02f, 3.318694199e-02f, 3.323086036e-02f, 3.327471524e-02f,
-3.331850655e-02f, 3.336223424e-02f, 3.340589823e-02f, 3.344949846e-02f, 3.349303486e-02f, 3.353650737e-02f, 3.357991593e-02f, 3.362326046e-02f, 3.366654089e-02f, 3.370975718e-02f,
-3.375290924e-02f, 3.379599701e-02f, 3.383902044e-02f, 3.388197945e-02f, 3.392487397e-02f, 3.396770395e-02f, 3.401046932e-02f, 3.405317002e-02f, 3.409580597e-02f, 3.413837712e-02f,
-3.418088340e-02f, 3.422332475e-02f, 3.426570110e-02f, 3.430801239e-02f, 3.435025856e-02f, 3.439243954e-02f, 3.443455527e-02f, 3.447660568e-02f, 3.451859071e-02f, 3.456051031e-02f,
-3.460236440e-02f, 3.464415292e-02f, 3.468587581e-02f, 3.472753301e-02f, 3.476912446e-02f, 3.481065009e-02f, 3.485210983e-02f, 3.489350364e-02f, 3.493483144e-02f, 3.497609318e-02f,
-3.501728878e-02f, 3.505841820e-02f, 3.509948137e-02f, 3.514047823e-02f, 3.518140871e-02f, 3.522227275e-02f, 3.526307030e-02f, 3.530380130e-02f, 3.534446567e-02f, 3.538506337e-02f,
-3.542559433e-02f, 3.546605848e-02f, 3.550645578e-02f, 3.554678616e-02f, 3.558704956e-02f, 3.562724592e-02f, 3.566737517e-02f, 3.570743727e-02f, 3.574743215e-02f, 3.578735975e-02f,
-3.582722001e-02f, 3.586701287e-02f, 3.590673828e-02f, 3.594639617e-02f, 3.598598648e-02f, 3.602550916e-02f, 3.606496415e-02f, 3.610435140e-02f, 3.614367083e-02f, 3.618292239e-02f,
-3.622210603e-02f, 3.626122169e-02f, 3.630026930e-02f, 3.633924882e-02f, 3.637816018e-02f, 3.641700332e-02f, 3.645577820e-02f, 3.649448474e-02f, 3.653312291e-02f, 3.657169262e-02f,
-3.661019384e-02f, 3.664862650e-02f, 3.668699055e-02f, 3.672528593e-02f, 3.676351258e-02f, 3.680167046e-02f, 3.683975949e-02f, 3.687777963e-02f, 3.691573082e-02f, 3.695361300e-02f,
-3.699142612e-02f, 3.702917013e-02f, 3.706684496e-02f, 3.710445056e-02f, 3.714198688e-02f, 3.717945387e-02f, 3.721685146e-02f, 3.725417960e-02f, 3.729143825e-02f, 3.732862733e-02f,
-3.736574681e-02f, 3.740279662e-02f, 3.743977671e-02f, 3.747668702e-02f, 3.751352751e-02f, 3.755029812e-02f, 3.758699880e-02f, 3.762362948e-02f, 3.766019013e-02f, 3.769668068e-02f,
-3.773310109e-02f, 3.776945129e-02f, 3.780573124e-02f, 3.784194088e-02f, 3.787808017e-02f, 3.791414904e-02f, 3.795014745e-02f, 3.798607535e-02f, 3.802193268e-02f, 3.805771939e-02f,
-3.809343542e-02f, 3.812908073e-02f, 3.816465527e-02f, 3.820015898e-02f, 3.823559182e-02f, 3.827095373e-02f, 3.830624465e-02f, 3.834146455e-02f, 3.837661336e-02f, 3.841169104e-02f,
-3.844669754e-02f, 3.848163281e-02f, 3.851649679e-02f, 3.855128944e-02f, 3.858601071e-02f, 3.862066054e-02f, 3.865523889e-02f, 3.868974570e-02f, 3.872418094e-02f, 3.875854454e-02f,
-3.879283646e-02f, 3.882705665e-02f, 3.886120506e-02f, 3.889528165e-02f, 3.892928636e-02f, 3.896321914e-02f, 3.899707995e-02f, 3.903086873e-02f, 3.906458545e-02f, 3.909823005e-02f,
-3.913180248e-02f, 3.916530269e-02f, 3.919873065e-02f, 3.923208629e-02f, 3.926536958e-02f, 3.929858047e-02f, 3.933171890e-02f, 3.936478484e-02f, 3.939777823e-02f, 3.943069902e-02f,
-3.946354718e-02f, 3.949632266e-02f, 3.952902540e-02f, 3.956165536e-02f, 3.959421250e-02f, 3.962669677e-02f, 3.965910813e-02f, 3.969144652e-02f, 3.972371190e-02f, 3.975590424e-02f,
-3.978802347e-02f, 3.982006956e-02f, 3.985204247e-02f, 3.988394214e-02f, 3.991576853e-02f, 3.994752160e-02f, 3.997920130e-02f, 4.001080759e-02f, 4.004234042e-02f, 4.007379976e-02f,
-4.010518555e-02f, 4.013649775e-02f, 4.016773632e-02f, 4.019890121e-02f, 4.022999238e-02f, 4.026100980e-02f, 4.029195340e-02f, 4.032282316e-02f, 4.035361903e-02f, 4.038434096e-02f,
-4.041498892e-02f, 4.044556285e-02f, 4.047606272e-02f, 4.050648849e-02f, 4.053684011e-02f, 4.056711755e-02f, 4.059732075e-02f, 4.062744968e-02f, 4.065750429e-02f, 4.068748455e-02f,
-4.071739042e-02f, 4.074722184e-02f, 4.077697879e-02f, 4.080666121e-02f, 4.083626908e-02f, 4.086580234e-02f, 4.089526096e-02f, 4.092464489e-02f, 4.095395411e-02f, 4.098318856e-02f,
-4.101234820e-02f, 4.104143301e-02f, 4.107044293e-02f, 4.109937792e-02f, 4.112823796e-02f, 4.115702299e-02f, 4.118573298e-02f, 4.121436790e-02f, 4.124292769e-02f, 4.127141232e-02f,
-4.129982176e-02f, 4.132815597e-02f, 4.135641490e-02f, 4.138459851e-02f, 4.141270678e-02f, 4.144073966e-02f, 4.146869711e-02f, 4.149657910e-02f, 4.152438559e-02f, 4.155211654e-02f,
-4.157977191e-02f, 4.160735167e-02f, 4.163485578e-02f, 4.166228420e-02f, 4.168963690e-02f, 4.171691383e-02f, 4.174411497e-02f, 4.177124027e-02f, 4.179828971e-02f, 4.182526323e-02f,
-4.185216082e-02f, 4.187898242e-02f, 4.190572801e-02f, 4.193239755e-02f, 4.195899101e-02f, 4.198550834e-02f, 4.201194952e-02f, 4.203831451e-02f, 4.206460327e-02f, 4.209081577e-02f,
-4.211695198e-02f, 4.214301185e-02f, 4.216899536e-02f, 4.219490247e-02f, 4.222073315e-02f, 4.224648736e-02f, 4.227216508e-02f, 4.229776625e-02f, 4.232329086e-02f, 4.234873887e-02f,
-4.237411024e-02f, 4.239940495e-02f, 4.242462295e-02f, 4.244976422e-02f, 4.247482872e-02f, 4.249981643e-02f, 4.252472730e-02f, 4.254956131e-02f, 4.257431842e-02f, 4.259899860e-02f,
-4.262360182e-02f, 4.264812805e-02f, 4.267257726e-02f, 4.269694941e-02f, 4.272124447e-02f, 4.274546242e-02f, 4.276960321e-02f, 4.279366683e-02f, 4.281765323e-02f, 4.284156239e-02f,
-4.286539428e-02f, 4.288914887e-02f, 4.291282612e-02f, 4.293642601e-02f, 4.295994850e-02f, 4.298339357e-02f, 4.300676119e-02f, 4.303005132e-02f, 4.305326395e-02f, 4.307639903e-02f,
-4.309945653e-02f, 4.312243644e-02f, 4.314533872e-02f, 4.316816334e-02f, 4.319091028e-02f, 4.321357950e-02f, 4.323617097e-02f, 4.325868468e-02f, 4.328112058e-02f, 4.330347865e-02f,
-4.332575887e-02f, 4.334796121e-02f, 4.337008563e-02f, 4.339213212e-02f, 4.341410064e-02f, 4.343599116e-02f, 4.345780367e-02f, 4.347953813e-02f, 4.350119451e-02f, 4.352277279e-02f,
-4.354427295e-02f, 4.356569495e-02f, 4.358703878e-02f, 4.360830439e-02f, 4.362949178e-02f, 4.365060091e-02f, 4.367163175e-02f, 4.369258429e-02f, 4.371345849e-02f, 4.373425433e-02f,
-4.375497179e-02f, 4.377561083e-02f, 4.379617145e-02f, 4.381665360e-02f, 4.383705727e-02f, 4.385738244e-02f, 4.387762907e-02f, 4.389779714e-02f, 4.391788663e-02f, 4.393789752e-02f,
-4.395782978e-02f, 4.397768339e-02f, 4.399745832e-02f, 4.401715456e-02f, 4.403677207e-02f, 4.405631084e-02f, 4.407577084e-02f, 4.409515204e-02f, 4.411445444e-02f, 4.413367800e-02f,
-4.415282270e-02f, 4.417188852e-02f, 4.419087544e-02f, 4.420978344e-02f, 4.422861248e-02f, 4.424736257e-02f, 4.426603366e-02f, 4.428462574e-02f, 4.430313878e-02f, 4.432157278e-02f,
-4.433992770e-02f, 4.435820353e-02f, 4.437640023e-02f, 4.439451781e-02f, 4.441255622e-02f, 4.443051546e-02f, 4.444839551e-02f, 4.446619633e-02f, 4.448391792e-02f, 4.450156025e-02f,
-4.451912330e-02f, 4.453660706e-02f, 4.455401150e-02f, 4.457133661e-02f, 4.458858237e-02f, 4.460574875e-02f, 4.462283574e-02f, 4.463984332e-02f, 4.465677148e-02f, 4.467362018e-02f,
-4.469038942e-02f, 4.470707918e-02f, 4.472368944e-02f, 4.474022018e-02f, 4.475667138e-02f, 4.477304303e-02f, 4.478933510e-02f, 4.480554759e-02f, 4.482168047e-02f, 4.483773373e-02f,
-4.485370735e-02f, 4.486960131e-02f, 4.488541560e-02f, 4.490115021e-02f, 4.491680510e-02f, 4.493238027e-02f, 4.494787571e-02f, 4.496329139e-02f, 4.497862731e-02f, 4.499388344e-02f,
-4.500905976e-02f, 4.502415628e-02f, 4.503917296e-02f, 4.505410979e-02f, 4.506896677e-02f, 4.508374387e-02f, 4.509844108e-02f, 4.511305838e-02f, 4.512759577e-02f, 4.514205322e-02f,
-4.515643073e-02f, 4.517072827e-02f, 4.518494584e-02f, 4.519908342e-02f, 4.521314100e-02f, 4.522711856e-02f, 4.524101610e-02f, 4.525483359e-02f, 4.526857103e-02f, 4.528222840e-02f,
-4.529580569e-02f, 4.530930289e-02f, 4.532271998e-02f, 4.533605695e-02f, 4.534931380e-02f, 4.536249050e-02f, 4.537558705e-02f, 4.538860344e-02f, 4.540153964e-02f, 4.541439566e-02f,
-4.542717148e-02f, 4.543986709e-02f, 4.545248248e-02f, 4.546501764e-02f, 4.547747255e-02f, 4.548984721e-02f, 4.550214161e-02f, 4.551435573e-02f, 4.552648956e-02f, 4.553854310e-02f,
-4.555051634e-02f, 4.556240926e-02f, 4.557422186e-02f, 4.558595412e-02f, 4.559760604e-02f, 4.560917761e-02f, 4.562066882e-02f, 4.563207966e-02f, 4.564341012e-02f, 4.565466019e-02f,
-4.566582986e-02f, 4.567691914e-02f, 4.568792799e-02f, 4.569885643e-02f, 4.570970444e-02f, 4.572047201e-02f, 4.573115914e-02f, 4.574176581e-02f, 4.575229203e-02f, 4.576273778e-02f,
-4.577310306e-02f, 4.578338785e-02f, 4.579359216e-02f, 4.580371598e-02f, 4.581375929e-02f, 4.582372210e-02f, 4.583360439e-02f, 4.584340616e-02f, 4.585312741e-02f, 4.586276813e-02f,
-4.587232831e-02f, 4.588180794e-02f, 4.589120703e-02f, 4.590052556e-02f, 4.590976354e-02f, 4.591892095e-02f, 4.592799779e-02f, 4.593699406e-02f, 4.594590975e-02f, 4.595474486e-02f,
-4.596349938e-02f, 4.597217331e-02f, 4.598076664e-02f, 4.598927938e-02f, 4.599771151e-02f, 4.600606304e-02f, 4.601433395e-02f, 4.602252425e-02f, 4.603063394e-02f, 4.603866300e-02f,
-4.604661144e-02f, 4.605447926e-02f, 4.606226644e-02f, 4.606997300e-02f, 4.607759892e-02f, 4.608514421e-02f, 4.609260885e-02f, 4.609999286e-02f, 4.610729623e-02f, 4.611451895e-02f,
-4.612166103e-02f, 4.612872246e-02f, 4.613570324e-02f, 4.614260338e-02f, 4.614942286e-02f, 4.615616170e-02f, 4.616281988e-02f, 4.616939741e-02f, 4.617589428e-02f, 4.618231050e-02f,
-4.618864607e-02f, 4.619490099e-02f, 4.620107525e-02f, 4.620716886e-02f, 4.621318182e-02f, 4.621911412e-02f, 4.622496577e-02f, 4.623073678e-02f, 4.623642713e-02f, 4.624203683e-02f,
-4.624756588e-02f, 4.625301429e-02f, 4.625838205e-02f, 4.626366917e-02f, 4.626887565e-02f, 4.627400149e-02f, 4.627904668e-02f, 4.628401125e-02f, 4.628889518e-02f, 4.629369848e-02f,
-4.629842115e-02f, 4.630306319e-02f, 4.630762461e-02f, 4.631210541e-02f, 4.631650559e-02f, 4.632082516e-02f, 4.632506412e-02f, 4.632922248e-02f, 4.633330023e-02f, 4.633729738e-02f,
-4.634121393e-02f, 4.634504989e-02f, 4.634880527e-02f, 4.635248006e-02f, 4.635607427e-02f, 4.635958791e-02f, 4.636302099e-02f, 4.636637349e-02f, 4.636964544e-02f, 4.637283683e-02f,
-4.637594768e-02f, 4.637897798e-02f, 4.638192774e-02f, 4.638479698e-02f, 4.638758568e-02f, 4.639029387e-02f, 4.639292154e-02f, 4.639546870e-02f, 4.639793536e-02f, 4.640032153e-02f,
-4.640262721e-02f, 4.640485241e-02f, 4.640699713e-02f, 4.640906139e-02f, 4.641104518e-02f, 4.641294853e-02f, 4.641477142e-02f, 4.641651388e-02f, 4.641817591e-02f, 4.641975752e-02f,
-4.642125872e-02f, 4.642267950e-02f, 4.642401990e-02f, 4.642527990e-02f, 4.642645952e-02f, 4.642755877e-02f, 4.642857765e-02f, 4.642951619e-02f, 4.643037437e-02f, 4.643115223e-02f,
-4.643184975e-02f, 4.643246696e-02f, 4.643300386e-02f, 4.643346047e-02f, 4.643383679e-02f, 4.643413283e-02f, 4.643434860e-02f, 4.643448412e-02f, 4.643453939e-02f, 4.643451443e-02f,
-4.643440924e-02f, 4.643422384e-02f, 4.643395823e-02f, 4.643361244e-02f, 4.643318646e-02f, 4.643268032e-02f, 4.643209401e-02f, 4.643142756e-02f, 4.643068098e-02f, 4.642985428e-02f,
-4.642894747e-02f, 4.642796056e-02f, 4.642689356e-02f, 4.642574649e-02f, 4.642451937e-02f, 4.642321219e-02f, 4.642182498e-02f, 4.642035775e-02f, 4.641881052e-02f, 4.641718329e-02f,
-4.641547607e-02f, 4.641368889e-02f, 4.641182176e-02f, 4.640987469e-02f, 4.640784769e-02f, 4.640574078e-02f, 4.640355397e-02f, 4.640128728e-02f, 4.639894072e-02f, 4.639651431e-02f,
-4.639400806e-02f, 4.639142198e-02f, 4.638875610e-02f, 4.638601042e-02f, 4.638318497e-02f, 4.638027975e-02f, 4.637729479e-02f, 4.637423009e-02f, 4.637108568e-02f, 4.636786157e-02f,
-4.636455777e-02f, 4.636117431e-02f, 4.635771120e-02f, 4.635416846e-02f, 4.635054609e-02f, 4.634684413e-02f, 4.634306258e-02f, 4.633920147e-02f, 4.633526081e-02f, 4.633124062e-02f,
-4.632714091e-02f, 4.632296171e-02f, 4.631870302e-02f, 4.631436488e-02f, 4.630994729e-02f, 4.630545028e-02f, 4.630087387e-02f, 4.629621806e-02f, 4.629148289e-02f, 4.628666836e-02f,
-4.628177450e-02f, 4.627680134e-02f, 4.627174887e-02f, 4.626661714e-02f, 4.626140614e-02f, 4.625611591e-02f, 4.625074647e-02f, 4.624529783e-02f, 4.623977002e-02f, 4.623416304e-02f,
-4.622847693e-02f, 4.622271171e-02f, 4.621686739e-02f, 4.621094400e-02f, 4.620494155e-02f, 4.619886007e-02f, 4.619269958e-02f, 4.618646009e-02f, 4.618014164e-02f, 4.617374423e-02f,
-4.616726790e-02f, 4.616071267e-02f, 4.615407855e-02f, 4.614736557e-02f, 4.614057375e-02f, 4.613370311e-02f, 4.612675368e-02f, 4.611972548e-02f, 4.611261852e-02f, 4.610543284e-02f,
-4.609816845e-02f, 4.609082538e-02f, 4.608340365e-02f, 4.607590329e-02f, 4.606832431e-02f, 4.606066675e-02f, 4.605293062e-02f, 4.604511595e-02f, 4.603722276e-02f, 4.602925108e-02f,
-4.602120093e-02f, 4.601307233e-02f, 4.600486531e-02f, 4.599657990e-02f, 4.598821612e-02f, 4.597977399e-02f, 4.597125353e-02f, 4.596265478e-02f, 4.595397776e-02f, 4.594522250e-02f,
-4.593638901e-02f, 4.592747732e-02f, 4.591848747e-02f, 4.590941948e-02f, 4.590027336e-02f, 4.589104916e-02f, 4.588174689e-02f, 4.587236658e-02f, 4.586290825e-02f, 4.585337194e-02f,
-4.584375768e-02f, 4.583406548e-02f, 4.582429537e-02f, 4.581444739e-02f, 4.580452155e-02f, 4.579451790e-02f, 4.578443644e-02f, 4.577427722e-02f, 4.576404026e-02f, 4.575372558e-02f,
-4.574333322e-02f, 4.573286320e-02f, 4.572231556e-02f, 4.571169032e-02f, 4.570098750e-02f, 4.569020714e-02f, 4.567934927e-02f, 4.566841391e-02f, 4.565740110e-02f, 4.564631086e-02f,
-4.563514323e-02f, 4.562389822e-02f, 4.561257588e-02f, 4.560117623e-02f, 4.558969931e-02f, 4.557814513e-02f, 4.556651373e-02f, 4.555480515e-02f, 4.554301941e-02f, 4.553115654e-02f,
-4.551921658e-02f, 4.550719955e-02f, 4.549510548e-02f, 4.548293441e-02f, 4.547068637e-02f, 4.545836138e-02f, 4.544595949e-02f, 4.543348071e-02f, 4.542092509e-02f, 4.540829265e-02f,
-4.539558343e-02f, 4.538279746e-02f, 4.536993477e-02f, 4.535699539e-02f, 4.534397936e-02f, 4.533088670e-02f, 4.531771746e-02f, 4.530447165e-02f, 4.529114933e-02f, 4.527775051e-02f,
-4.526427524e-02f, 4.525072354e-02f, 4.523709545e-02f, 4.522339100e-02f, 4.520961023e-02f, 4.519575317e-02f, 4.518181985e-02f, 4.516781031e-02f, 4.515372459e-02f, 4.513956271e-02f,
-4.512532471e-02f, 4.511101062e-02f, 4.509662049e-02f, 4.508215434e-02f, 4.506761221e-02f, 4.505299414e-02f, 4.503830015e-02f, 4.502353029e-02f, 4.500868460e-02f, 4.499376309e-02f,
-4.497876582e-02f, 4.496369282e-02f, 4.494854412e-02f, 4.493331976e-02f, 4.491801978e-02f, 4.490264421e-02f, 4.488719309e-02f, 4.487166645e-02f, 4.485606434e-02f, 4.484038678e-02f,
-4.482463382e-02f, 4.480880549e-02f, 4.479290184e-02f, 4.477692289e-02f, 4.476086868e-02f, 4.474473925e-02f, 4.472853465e-02f, 4.471225490e-02f, 4.469590005e-02f, 4.467947013e-02f,
-4.466296519e-02f, 4.464638525e-02f, 4.462973036e-02f, 4.461300056e-02f, 4.459619589e-02f, 4.457931638e-02f, 4.456236207e-02f, 4.454533300e-02f, 4.452822922e-02f, 4.451105075e-02f,
-4.449379765e-02f, 4.447646995e-02f, 4.445906768e-02f, 4.444159089e-02f, 4.442403963e-02f, 4.440641392e-02f, 4.438871381e-02f, 4.437093934e-02f, 4.435309055e-02f, 4.433516748e-02f,
-4.431717017e-02f, 4.429909866e-02f, 4.428095299e-02f, 4.426273321e-02f, 4.424443935e-02f, 4.422607146e-02f, 4.420762958e-02f, 4.418911374e-02f, 4.417052399e-02f, 4.415186038e-02f,
-4.413312293e-02f, 4.411431171e-02f, 4.409542674e-02f, 4.407646807e-02f, 4.405743574e-02f, 4.403832980e-02f, 4.401915028e-02f, 4.399989724e-02f, 4.398057070e-02f, 4.396117073e-02f,
-4.394169735e-02f, 4.392215061e-02f, 4.390253055e-02f, 4.388283723e-02f, 4.386307068e-02f, 4.384323094e-02f, 4.382331806e-02f, 4.380333209e-02f, 4.378327306e-02f, 4.376314102e-02f,
-4.374293602e-02f, 4.372265810e-02f, 4.370230730e-02f, 4.368188367e-02f, 4.366138725e-02f, 4.364081810e-02f, 4.362017624e-02f, 4.359946174e-02f, 4.357867463e-02f, 4.355781495e-02f,
-4.353688276e-02f, 4.351587810e-02f, 4.349480102e-02f, 4.347365156e-02f, 4.345242976e-02f, 4.343113568e-02f, 4.340976936e-02f, 4.338833084e-02f, 4.336682017e-02f, 4.334523740e-02f,
-4.332358258e-02f, 4.330185575e-02f, 4.328005696e-02f, 4.325818625e-02f, 4.323624368e-02f, 4.321422928e-02f, 4.319214311e-02f, 4.316998522e-02f, 4.314775565e-02f, 4.312545444e-02f,
-4.310308166e-02f, 4.308063734e-02f, 4.305812153e-02f, 4.303553428e-02f, 4.301287565e-02f, 4.299014567e-02f, 4.296734440e-02f, 4.294447188e-02f, 4.292152817e-02f, 4.289851330e-02f,
-4.287542734e-02f, 4.285227033e-02f, 4.282904232e-02f, 4.280574336e-02f, 4.278237350e-02f, 4.275893278e-02f, 4.273542127e-02f, 4.271183899e-02f, 4.268818602e-02f, 4.266446239e-02f,
-4.264066816e-02f, 4.261680338e-02f, 4.259286809e-02f, 4.256886235e-02f, 4.254478621e-02f, 4.252063972e-02f, 4.249642293e-02f, 4.247213589e-02f, 4.244777865e-02f, 4.242335126e-02f,
-4.239885377e-02f, 4.237428625e-02f, 4.234964872e-02f, 4.232494126e-02f, 4.230016391e-02f, 4.227531672e-02f, 4.225039974e-02f, 4.222541302e-02f, 4.220035663e-02f, 4.217523060e-02f,
-4.215003500e-02f, 4.212476987e-02f, 4.209943527e-02f, 4.207403125e-02f, 4.204855786e-02f, 4.202301516e-02f, 4.199740319e-02f, 4.197172202e-02f, 4.194597169e-02f, 4.192015226e-02f,
-4.189426378e-02f, 4.186830631e-02f, 4.184227989e-02f, 4.181618459e-02f, 4.179002046e-02f, 4.176378754e-02f, 4.173748591e-02f, 4.171111560e-02f, 4.168467667e-02f, 4.165816918e-02f,
-4.163159318e-02f, 4.160494873e-02f, 4.157823589e-02f, 4.155145470e-02f, 4.152460522e-02f, 4.149768751e-02f, 4.147070162e-02f, 4.144364760e-02f, 4.141652552e-02f, 4.138933543e-02f,
-4.136207739e-02f, 4.133475144e-02f, 4.130735765e-02f, 4.127989607e-02f, 4.125236676e-02f, 4.122476977e-02f, 4.119710516e-02f, 4.116937299e-02f, 4.114157332e-02f, 4.111370619e-02f,
-4.108577167e-02f, 4.105776981e-02f, 4.102970068e-02f, 4.100156432e-02f, 4.097336079e-02f, 4.094509016e-02f, 4.091675248e-02f, 4.088834781e-02f, 4.085987619e-02f, 4.083133771e-02f,
-4.080273240e-02f, 4.077406033e-02f, 4.074532156e-02f, 4.071651614e-02f, 4.068764413e-02f, 4.065870559e-02f, 4.062970059e-02f, 4.060062917e-02f, 4.057149140e-02f, 4.054228733e-02f,
-4.051301703e-02f, 4.048368055e-02f, 4.045427795e-02f, 4.042480929e-02f, 4.039527464e-02f, 4.036567405e-02f, 4.033600757e-02f, 4.030627528e-02f, 4.027647722e-02f, 4.024661346e-02f,
-4.021668407e-02f, 4.018668909e-02f, 4.015662859e-02f, 4.012650263e-02f, 4.009631127e-02f, 4.006605457e-02f, 4.003573259e-02f, 4.000534539e-02f, 3.997489303e-02f, 3.994437558e-02f,
-3.991379309e-02f, 3.988314563e-02f, 3.985243325e-02f, 3.982165602e-02f, 3.979081400e-02f, 3.975990725e-02f, 3.972893584e-02f, 3.969789981e-02f, 3.966679924e-02f, 3.963563419e-02f,
-3.960440472e-02f, 3.957311089e-02f, 3.954175277e-02f, 3.951033041e-02f, 3.947884388e-02f, 3.944729324e-02f, 3.941567855e-02f, 3.938399988e-02f, 3.935225730e-02f, 3.932045085e-02f,
-3.928858061e-02f, 3.925664663e-02f, 3.922464899e-02f, 3.919258774e-02f, 3.916046296e-02f, 3.912827469e-02f, 3.909602301e-02f, 3.906370798e-02f, 3.903132966e-02f, 3.899888812e-02f,
-3.896638342e-02f, 3.893381562e-02f, 3.890118480e-02f, 3.886849101e-02f, 3.883573431e-02f, 3.880291478e-02f, 3.877003248e-02f, 3.873708747e-02f, 3.870407982e-02f, 3.867100958e-02f,
-3.863787684e-02f, 3.860468165e-02f, 3.857142407e-02f, 3.853810418e-02f, 3.850472203e-02f, 3.847127770e-02f, 3.843777125e-02f, 3.840420274e-02f, 3.837057225e-02f, 3.833687983e-02f,
-3.830312555e-02f, 3.826930948e-02f, 3.823543169e-02f, 3.820149223e-02f, 3.816749119e-02f, 3.813342862e-02f, 3.809930459e-02f, 3.806511917e-02f, 3.803087242e-02f, 3.799656441e-02f,
-3.796219521e-02f, 3.792776489e-02f, 3.789327351e-02f, 3.785872114e-02f, 3.782410784e-02f, 3.778943369e-02f, 3.775469875e-02f, 3.771990309e-02f, 3.768504678e-02f, 3.765012988e-02f,
-3.761515247e-02f, 3.758011461e-02f, 3.754501636e-02f, 3.750985781e-02f, 3.747463901e-02f, 3.743936003e-02f, 3.740402095e-02f, 3.736862182e-02f, 3.733316273e-02f, 3.729764374e-02f,
-3.726206491e-02f, 3.722642632e-02f, 3.719072804e-02f, 3.715497013e-02f, 3.711915267e-02f, 3.708327571e-02f, 3.704733935e-02f, 3.701134363e-02f, 3.697528864e-02f, 3.693917443e-02f,
-3.690300109e-02f, 3.686676868e-02f, 3.683047727e-02f, 3.679412694e-02f, 3.675771774e-02f, 3.672124976e-02f, 3.668472305e-02f, 3.664813771e-02f, 3.661149378e-02f, 3.657479135e-02f,
-3.653803048e-02f, 3.650121125e-02f, 3.646433372e-02f, 3.642739798e-02f, 3.639040408e-02f, 3.635335210e-02f, 3.631624211e-02f, 3.627907418e-02f, 3.624184839e-02f, 3.620456480e-02f,
-3.616722349e-02f, 3.612982452e-02f, 3.609236798e-02f, 3.605485393e-02f, 3.601728244e-02f, 3.597965359e-02f, 3.594196745e-02f, 3.590422409e-02f, 3.586642358e-02f, 3.582856600e-02f,
-3.579065141e-02f, 3.575267990e-02f, 3.571465152e-02f, 3.567656637e-02f, 3.563842450e-02f, 3.560022600e-02f, 3.556197093e-02f, 3.552365937e-02f, 3.548529139e-02f, 3.544686706e-02f,
-3.540838646e-02f, 3.536984966e-02f, 3.533125674e-02f, 3.529260777e-02f, 3.525390282e-02f, 3.521514196e-02f, 3.517632528e-02f, 3.513745284e-02f, 3.509852472e-02f, 3.505954099e-02f,
-3.502050172e-02f, 3.498140700e-02f, 3.494225689e-02f, 3.490305148e-02f, 3.486379082e-02f, 3.482447501e-02f, 3.478510411e-02f, 3.474567820e-02f, 3.470619735e-02f, 3.466666164e-02f,
-3.462707115e-02f, 3.458742594e-02f, 3.454772610e-02f, 3.450797170e-02f, 3.446816281e-02f, 3.442829952e-02f, 3.438838189e-02f, 3.434841000e-02f, 3.430838393e-02f, 3.426830375e-02f,
-3.422816954e-02f, 3.418798138e-02f, 3.414773934e-02f, 3.410744350e-02f, 3.406709393e-02f, 3.402669071e-02f, 3.398623392e-02f, 3.394572363e-02f, 3.390515993e-02f, 3.386454287e-02f,
-3.382387256e-02f, 3.378314905e-02f, 3.374237243e-02f, 3.370154277e-02f, 3.366066016e-02f, 3.361972466e-02f, 3.357873636e-02f, 3.353769533e-02f, 3.349660166e-02f, 3.345545541e-02f,
-3.341425666e-02f, 3.337300550e-02f, 3.333170200e-02f, 3.329034624e-02f, 3.324893829e-02f, 3.320747824e-02f, 3.316596617e-02f, 3.312440214e-02f, 3.308278624e-02f, 3.304111855e-02f,
-3.299939914e-02f, 3.295762810e-02f, 3.291580550e-02f, 3.287393142e-02f, 3.283200595e-02f, 3.279002915e-02f, 3.274800110e-02f, 3.270592190e-02f, 3.266379161e-02f, 3.262161031e-02f,
-3.257937809e-02f, 3.253709502e-02f, 3.249476118e-02f, 3.245237665e-02f, 3.240994151e-02f, 3.236745585e-02f, 3.232491973e-02f, 3.228233325e-02f, 3.223969647e-02f, 3.219700948e-02f,
-3.215427236e-02f, 3.211148519e-02f, 3.206864805e-02f, 3.202576102e-02f, 3.198282417e-02f, 3.193983760e-02f, 3.189680138e-02f, 3.185371559e-02f, 3.181058031e-02f, 3.176739562e-02f,
-3.172416160e-02f, 3.168087833e-02f, 3.163754590e-02f, 3.159416439e-02f, 3.155073387e-02f, 3.150725442e-02f, 3.146372614e-02f, 3.142014909e-02f, 3.137652336e-02f, 3.133284904e-02f,
-3.128912620e-02f, 3.124535492e-02f, 3.120153528e-02f, 3.115766738e-02f, 3.111375128e-02f, 3.106978708e-02f, 3.102577485e-02f, 3.098171467e-02f, 3.093760663e-02f, 3.089345080e-02f,
-3.084924728e-02f, 3.080499614e-02f, 3.076069747e-02f, 3.071635134e-02f, 3.067195785e-02f, 3.062751706e-02f, 3.058302907e-02f, 3.053849396e-02f, 3.049391181e-02f, 3.044928270e-02f,
-3.040460672e-02f, 3.035988394e-02f, 3.031511446e-02f, 3.027029835e-02f, 3.022543570e-02f, 3.018052659e-02f, 3.013557110e-02f, 3.009056932e-02f, 3.004552133e-02f, 3.000042722e-02f,
-2.995528706e-02f, 2.991010095e-02f, 2.986486896e-02f, 2.981959118e-02f, 2.977426769e-02f, 2.972889857e-02f, 2.968348392e-02f, 2.963802381e-02f, 2.959251833e-02f, 2.954696756e-02f,
-2.950137159e-02f, 2.945573050e-02f, 2.941004437e-02f, 2.936431329e-02f, 2.931853735e-02f, 2.927271662e-02f, 2.922685120e-02f, 2.918094117e-02f, 2.913498660e-02f, 2.908898760e-02f,
-2.904294424e-02f, 2.899685660e-02f, 2.895072477e-02f, 2.890454884e-02f, 2.885832890e-02f, 2.881206502e-02f, 2.876575729e-02f, 2.871940580e-02f, 2.867301063e-02f, 2.862657188e-02f,
-2.858008961e-02f, 2.853356393e-02f, 2.848699491e-02f, 2.844038264e-02f, 2.839372720e-02f, 2.834702869e-02f, 2.830028719e-02f, 2.825350278e-02f, 2.820667555e-02f, 2.815980559e-02f,
-2.811289298e-02f, 2.806593780e-02f, 2.801894015e-02f, 2.797190012e-02f, 2.792481778e-02f, 2.787769322e-02f, 2.783052653e-02f, 2.778331780e-02f, 2.773606712e-02f, 2.768877456e-02f,
-2.764144022e-02f, 2.759406418e-02f, 2.754664654e-02f, 2.749918737e-02f, 2.745168676e-02f, 2.740414481e-02f, 2.735656159e-02f, 2.730893720e-02f, 2.726127173e-02f, 2.721356525e-02f,
-2.716581786e-02f, 2.711802964e-02f, 2.707020069e-02f, 2.702233109e-02f, 2.697442092e-02f, 2.692647028e-02f, 2.687847925e-02f, 2.683044792e-02f, 2.678237638e-02f, 2.673426471e-02f,
-2.668611301e-02f, 2.663792136e-02f, 2.658968985e-02f, 2.654141856e-02f, 2.649310760e-02f, 2.644475703e-02f, 2.639636696e-02f, 2.634793747e-02f, 2.629946865e-02f, 2.625096059e-02f,
-2.620241337e-02f, 2.615382709e-02f, 2.610520183e-02f, 2.605653768e-02f, 2.600783473e-02f, 2.595909307e-02f, 2.591031279e-02f, 2.586149398e-02f, 2.581263672e-02f, 2.576374110e-02f,
-2.571480722e-02f, 2.566583517e-02f, 2.561682502e-02f, 2.556777688e-02f, 2.551869082e-02f, 2.546956695e-02f, 2.542040534e-02f, 2.537120609e-02f, 2.532196929e-02f, 2.527269503e-02f,
-2.522338340e-02f, 2.517403448e-02f, 2.512464837e-02f, 2.507522515e-02f, 2.502576492e-02f, 2.497626776e-02f, 2.492673377e-02f, 2.487716304e-02f, 2.482755565e-02f, 2.477791170e-02f,
-2.472823127e-02f, 2.467851446e-02f, 2.462876135e-02f, 2.457897204e-02f, 2.452914661e-02f, 2.447928516e-02f, 2.442938778e-02f, 2.437945456e-02f, 2.432948558e-02f, 2.427948094e-02f,
-2.422944073e-02f, 2.417936504e-02f, 2.412925397e-02f, 2.407910759e-02f, 2.402892600e-02f, 2.397870930e-02f, 2.392845757e-02f, 2.387817090e-02f, 2.382784939e-02f, 2.377749313e-02f,
-2.372710220e-02f, 2.367667670e-02f, 2.362621673e-02f, 2.357572236e-02f, 2.352519369e-02f, 2.347463082e-02f, 2.342403384e-02f, 2.337340283e-02f, 2.332273788e-02f, 2.327203910e-02f,
-2.322130657e-02f, 2.317054038e-02f, 2.311974062e-02f, 2.306890739e-02f, 2.301804078e-02f, 2.296714088e-02f, 2.291620778e-02f, 2.286524157e-02f, 2.281424234e-02f, 2.276321019e-02f,
-2.271214522e-02f, 2.266104750e-02f, 2.260991713e-02f, 2.255875421e-02f, 2.250755883e-02f, 2.245633107e-02f, 2.240507104e-02f, 2.235377882e-02f, 2.230245451e-02f, 2.225109820e-02f,
-2.219970998e-02f, 2.214828994e-02f, 2.209683818e-02f, 2.204535478e-02f, 2.199383985e-02f, 2.194229347e-02f, 2.189071574e-02f, 2.183910675e-02f, 2.178746659e-02f, 2.173579535e-02f,
-2.168409313e-02f, 2.163236003e-02f, 2.158059612e-02f, 2.152880152e-02f, 2.147697630e-02f, 2.142512056e-02f, 2.137323441e-02f, 2.132131792e-02f, 2.126937119e-02f, 2.121739432e-02f,
-2.116538739e-02f, 2.111335051e-02f, 2.106128377e-02f, 2.100918725e-02f, 2.095706105e-02f, 2.090490527e-02f, 2.085272000e-02f, 2.080050533e-02f, 2.074826136e-02f, 2.069598818e-02f,
-2.064368588e-02f, 2.059135456e-02f, 2.053899431e-02f, 2.048660522e-02f, 2.043418739e-02f, 2.038174092e-02f, 2.032926589e-02f, 2.027676240e-02f, 2.022423054e-02f, 2.017167041e-02f,
-2.011908211e-02f, 2.006646572e-02f, 2.001382134e-02f, 1.996114906e-02f, 1.990844899e-02f, 1.985572120e-02f, 1.980296580e-02f, 1.975018289e-02f, 1.969737255e-02f, 1.964453488e-02f,
-1.959166997e-02f, 1.953877792e-02f, 1.948585883e-02f, 1.943291278e-02f, 1.937993987e-02f, 1.932694021e-02f, 1.927391387e-02f, 1.922086096e-02f, 1.916778157e-02f, 1.911467579e-02f,
-1.906154372e-02f, 1.900838546e-02f, 1.895520110e-02f, 1.890199073e-02f, 1.884875446e-02f, 1.879549236e-02f, 1.874220455e-02f, 1.868889110e-02f, 1.863555213e-02f, 1.858218772e-02f,
-1.852879797e-02f, 1.847538298e-02f, 1.842194283e-02f, 1.836847763e-02f, 1.831498747e-02f, 1.826147244e-02f, 1.820793264e-02f, 1.815436816e-02f, 1.810077911e-02f, 1.804716557e-02f,
-1.799352765e-02f, 1.793986543e-02f, 1.788617901e-02f, 1.783246849e-02f, 1.777873396e-02f, 1.772497552e-02f, 1.767119327e-02f, 1.761738729e-02f, 1.756355769e-02f, 1.750970456e-02f,
-1.745582799e-02f, 1.740192809e-02f, 1.734800494e-02f, 1.729405865e-02f, 1.724008931e-02f, 1.718609701e-02f, 1.713208185e-02f, 1.707804393e-02f, 1.702398334e-02f, 1.696990018e-02f,
-1.691579455e-02f, 1.686166653e-02f, 1.680751623e-02f, 1.675334374e-02f, 1.669914916e-02f, 1.664493259e-02f, 1.659069411e-02f, 1.653643383e-02f, 1.648215184e-02f, 1.642784825e-02f,
-1.637352313e-02f, 1.631917660e-02f, 1.626480874e-02f, 1.621041966e-02f, 1.615600945e-02f, 1.610157820e-02f, 1.604712602e-02f, 1.599265299e-02f, 1.593815922e-02f, 1.588364480e-02f,
-1.582910983e-02f, 1.577455440e-02f, 1.571997861e-02f, 1.566538256e-02f, 1.561076635e-02f, 1.555613006e-02f, 1.550147380e-02f, 1.544679766e-02f, 1.539210175e-02f, 1.533738615e-02f,
-1.528265096e-02f, 1.522789628e-02f, 1.517312221e-02f, 1.511832885e-02f, 1.506351628e-02f, 1.500868461e-02f, 1.495383393e-02f, 1.489896434e-02f, 1.484407594e-02f, 1.478916883e-02f,
-1.473424309e-02f, 1.467929883e-02f, 1.462433615e-02f, 1.456935514e-02f, 1.451435589e-02f, 1.445933851e-02f, 1.440430309e-02f, 1.434924974e-02f, 1.429417853e-02f, 1.423908958e-02f,
-1.418398298e-02f, 1.412885883e-02f, 1.407371723e-02f, 1.401855826e-02f, 1.396338203e-02f, 1.390818864e-02f, 1.385297818e-02f, 1.379775075e-02f, 1.374250645e-02f, 1.368724537e-02f,
-1.363196761e-02f, 1.357667327e-02f, 1.352136245e-02f, 1.346603524e-02f, 1.341069174e-02f, 1.335533204e-02f, 1.329995626e-02f, 1.324456447e-02f, 1.318915679e-02f, 1.313373330e-02f,
-1.307829411e-02f, 1.302283930e-02f, 1.296736899e-02f, 1.291188326e-02f, 1.285638222e-02f, 1.280086596e-02f, 1.274533458e-02f, 1.268978817e-02f, 1.263422684e-02f, 1.257865067e-02f,
-1.252305978e-02f, 1.246745425e-02f, 1.241183419e-02f, 1.235619969e-02f, 1.230055085e-02f, 1.224488776e-02f, 1.218921053e-02f, 1.213351925e-02f, 1.207781401e-02f, 1.202209493e-02f,
-1.196636209e-02f, 1.191061559e-02f, 1.185485553e-02f, 1.179908201e-02f, 1.174329512e-02f, 1.168749496e-02f, 1.163168164e-02f, 1.157585524e-02f, 1.152001587e-02f, 1.146416363e-02f,
-1.140829860e-02f, 1.135242089e-02f, 1.129653060e-02f, 1.124062783e-02f, 1.118471266e-02f, 1.112878521e-02f, 1.107284556e-02f, 1.101689382e-02f, 1.096093009e-02f, 1.090495445e-02f,
-1.084896701e-02f, 1.079296787e-02f, 1.073695713e-02f, 1.068093488e-02f, 1.062490121e-02f, 1.056885624e-02f, 1.051280005e-02f, 1.045673274e-02f, 1.040065442e-02f, 1.034456518e-02f,
-1.028846511e-02f, 1.023235432e-02f, 1.017623291e-02f, 1.012010096e-02f, 1.006395858e-02f, 1.000780587e-02f, 9.951642930e-03f, 9.895469849e-03f, 9.839286728e-03f, 9.783093667e-03f,
-9.726890762e-03f, 9.670678111e-03f, 9.614455814e-03f, 9.558223967e-03f, 9.501982668e-03f, 9.445732016e-03f, 9.389472109e-03f, 9.333203044e-03f, 9.276924920e-03f, 9.220637834e-03f,
-9.164341884e-03f, 9.108037169e-03f, 9.051723786e-03f, 8.995401834e-03f, 8.939071410e-03f, 8.882732612e-03f, 8.826385539e-03f, 8.770030288e-03f, 8.713666958e-03f, 8.657295646e-03f,
-8.600916450e-03f, 8.544529469e-03f, 8.488134800e-03f, 8.431732542e-03f, 8.375322792e-03f, 8.318905648e-03f, 8.262481209e-03f, 8.206049572e-03f, 8.149610836e-03f, 8.093165099e-03f,
-8.036712457e-03f, 7.980253011e-03f, 7.923786856e-03f, 7.867314093e-03f, 7.810834817e-03f, 7.754349129e-03f, 7.697857124e-03f, 7.641358903e-03f, 7.584854562e-03f, 7.528344199e-03f,
-7.471827913e-03f, 7.415305802e-03f, 7.358777963e-03f, 7.302244494e-03f, 7.245705494e-03f, 7.189161061e-03f, 7.132611292e-03f, 7.076056285e-03f, 7.019496139e-03f, 6.962930951e-03f,
-6.906360820e-03f, 6.849785843e-03f, 6.793206119e-03f, 6.736621744e-03f, 6.680032818e-03f, 6.623439438e-03f, 6.566841702e-03f, 6.510239708e-03f, 6.453633554e-03f, 6.397023338e-03f,
-6.340409158e-03f, 6.283791112e-03f, 6.227169297e-03f, 6.170543812e-03f, 6.113914754e-03f, 6.057282222e-03f, 6.000646313e-03f, 5.944007126e-03f, 5.887364757e-03f, 5.830719305e-03f,
-5.774070868e-03f, 5.717419543e-03f, 5.660765429e-03f, 5.604108624e-03f, 5.547449224e-03f, 5.490787329e-03f, 5.434123035e-03f, 5.377456441e-03f, 5.320787644e-03f, 5.264116742e-03f,
-5.207443834e-03f, 5.150769016e-03f, 5.094092387e-03f, 5.037414044e-03f, 4.980734085e-03f, 4.924052608e-03f, 4.867369710e-03f, 4.810685490e-03f, 4.754000044e-03f, 4.697313471e-03f,
-4.640625869e-03f, 4.583937334e-03f, 4.527247965e-03f, 4.470557860e-03f, 4.413867115e-03f, 4.357175829e-03f, 4.300484099e-03f, 4.243792024e-03f, 4.187099699e-03f, 4.130407224e-03f,
-4.073714695e-03f, 4.017022211e-03f, 3.960329868e-03f, 3.903637765e-03f, 3.846945998e-03f, 3.790254666e-03f, 3.733563865e-03f, 3.676873694e-03f, 3.620184250e-03f, 3.563495630e-03f,
-3.506807932e-03f, 3.450121252e-03f, 3.393435690e-03f, 3.336751341e-03f, 3.280068304e-03f, 3.223386676e-03f, 3.166706554e-03f, 3.110028035e-03f, 3.053351217e-03f, 2.996676197e-03f,
-2.940003073e-03f, 2.883331941e-03f, 2.826662900e-03f, 2.769996045e-03f, 2.713331476e-03f, 2.656669288e-03f, 2.600009579e-03f, 2.543352446e-03f, 2.486697986e-03f, 2.430046297e-03f,
-2.373397476e-03f, 2.316751619e-03f, 2.260108825e-03f, 2.203469189e-03f, 2.146832809e-03f, 2.090199783e-03f, 2.033570207e-03f, 1.976944177e-03f, 1.920321792e-03f, 1.863703149e-03f,
-1.807088343e-03f, 1.750477472e-03f, 1.693870634e-03f, 1.637267924e-03f, 1.580669440e-03f, 1.524075279e-03f, 1.467485538e-03f, 1.410900313e-03f, 1.354319701e-03f, 1.297743799e-03f,
-1.241172704e-03f, 1.184606512e-03f, 1.128045321e-03f, 1.071489226e-03f, 1.014938326e-03f, 9.583927154e-04f, 9.018524920e-04f, 8.453177523e-04f, 7.887885928e-04f, 7.322651102e-04f,
-6.757474009e-04f, 6.192355616e-04f, 5.627296887e-04f, 5.062298788e-04f, 4.497362282e-04f, 3.932488336e-04f, 3.367677913e-04f, 2.802931977e-04f, 2.238251492e-04f, 1.673637422e-04f,
-1.109090730e-04f, 5.446123792e-05f, -1.979666749e-06f, -5.841354473e-05f, -1.148402998e-04f, -1.712598357e-04f, -2.276720563e-04f, -2.840768653e-04f, -3.404741667e-04f, -3.968638643e-04f,
--4.532458620e-04f, -5.096200638e-04f, -5.659863735e-04f, -6.223446953e-04f, -6.786949330e-04f, -7.350369907e-04f, -7.913707726e-04f, -8.476961825e-04f, -9.040131247e-04f, -9.603215034e-04f,
--1.016621223e-03f, -1.072912186e-03f, -1.129194299e-03f, -1.185467465e-03f, -1.241731589e-03f, -1.297986574e-03f, -1.354232326e-03f, -1.410468748e-03f, -1.466695744e-03f, -1.522913220e-03f,
--1.579121080e-03f, -1.635319227e-03f, -1.691507568e-03f, -1.747686005e-03f, -1.803854444e-03f, -1.860012790e-03f, -1.916160946e-03f, -1.972298818e-03f, -2.028426310e-03f, -2.084543327e-03f,
--2.140649773e-03f, -2.196745554e-03f, -2.252830574e-03f, -2.308904738e-03f, -2.364967951e-03f, -2.421020117e-03f, -2.477061142e-03f, -2.533090931e-03f, -2.589109388e-03f, -2.645116418e-03f,
--2.701111928e-03f, -2.757095820e-03f, -2.813068002e-03f, -2.869028377e-03f, -2.924976851e-03f, -2.980913329e-03f, -3.036837717e-03f, -3.092749920e-03f, -3.148649842e-03f, -3.204537390e-03f,
--3.260412468e-03f, -3.316274982e-03f, -3.372124838e-03f, -3.427961940e-03f, -3.483786195e-03f, -3.539597508e-03f, -3.595395784e-03f, -3.651180929e-03f, -3.706952849e-03f, -3.762711449e-03f,
--3.818456636e-03f, -3.874188313e-03f, -3.929906389e-03f, -3.985610767e-03f, -4.041301355e-03f, -4.096978058e-03f, -4.152640782e-03f, -4.208289432e-03f, -4.263923915e-03f, -4.319544137e-03f,
--4.375150004e-03f, -4.430741422e-03f, -4.486318297e-03f, -4.541880535e-03f, -4.597428043e-03f, -4.652960726e-03f, -4.708478491e-03f, -4.763981244e-03f, -4.819468892e-03f, -4.874941340e-03f,
--4.930398496e-03f, -4.985840266e-03f, -5.041266556e-03f, -5.096677272e-03f, -5.152072322e-03f, -5.207451612e-03f, -5.262815049e-03f, -5.318162539e-03f, -5.373493989e-03f, -5.428809306e-03f,
--5.484108396e-03f, -5.539391167e-03f, -5.594657524e-03f, -5.649907377e-03f, -5.705140630e-03f, -5.760357191e-03f, -5.815556968e-03f, -5.870739867e-03f, -5.925905795e-03f, -5.981054660e-03f,
--6.036186368e-03f, -6.091300828e-03f, -6.146397946e-03f, -6.201477629e-03f, -6.256539785e-03f, -6.311584322e-03f, -6.366611146e-03f, -6.421620166e-03f, -6.476611288e-03f, -6.531584421e-03f,
--6.586539472e-03f, -6.641476349e-03f, -6.696394959e-03f, -6.751295210e-03f, -6.806177010e-03f, -6.861040266e-03f, -6.915884887e-03f, -6.970710781e-03f, -7.025517855e-03f, -7.080306018e-03f,
--7.135075177e-03f, -7.189825240e-03f, -7.244556117e-03f, -7.299267714e-03f, -7.353959940e-03f, -7.408632704e-03f, -7.463285913e-03f, -7.517919477e-03f, -7.572533303e-03f, -7.627127300e-03f,
--7.681701376e-03f, -7.736255440e-03f, -7.790789400e-03f, -7.845303166e-03f, -7.899796646e-03f, -7.954269748e-03f, -8.008722381e-03f, -8.063154455e-03f, -8.117565877e-03f, -8.171956557e-03f,
--8.226326404e-03f, -8.280675327e-03f, -8.335003235e-03f, -8.389310036e-03f, -8.443595641e-03f, -8.497859958e-03f, -8.552102897e-03f, -8.606324366e-03f, -8.660524275e-03f, -8.714702534e-03f,
--8.768859052e-03f, -8.822993738e-03f, -8.877106503e-03f, -8.931197254e-03f, -8.985265903e-03f, -9.039312359e-03f, -9.093336531e-03f, -9.147338329e-03f, -9.201317664e-03f, -9.255274444e-03f,
--9.309208580e-03f, -9.363119983e-03f, -9.417008561e-03f, -9.470874225e-03f, -9.524716885e-03f, -9.578536451e-03f, -9.632332834e-03f, -9.686105943e-03f, -9.739855690e-03f, -9.793581983e-03f,
--9.847284735e-03f, -9.900963855e-03f, -9.954619254e-03f, -1.000825084e-02f, -1.006185853e-02f, -1.011544223e-02f, -1.016900185e-02f, -1.022253730e-02f, -1.027604850e-02f, -1.032953535e-02f,
--1.038299776e-02f, -1.043643565e-02f, -1.048984893e-02f, -1.054323751e-02f, -1.059660129e-02f, -1.064994020e-02f, -1.070325413e-02f, -1.075654301e-02f, -1.080980675e-02f, -1.086304525e-02f,
--1.091625843e-02f, -1.096944619e-02f, -1.102260846e-02f, -1.107574514e-02f, -1.112885614e-02f, -1.118194138e-02f, -1.123500076e-02f, -1.128803421e-02f, -1.134104162e-02f, -1.139402292e-02f,
--1.144697801e-02f, -1.149990681e-02f, -1.155280923e-02f, -1.160568519e-02f, -1.165853458e-02f, -1.171135733e-02f, -1.176415335e-02f, -1.181692255e-02f, -1.186966484e-02f, -1.192238014e-02f,
--1.197506836e-02f, -1.202772941e-02f, -1.208036320e-02f, -1.213296965e-02f, -1.218554867e-02f, -1.223810017e-02f, -1.229062407e-02f, -1.234312027e-02f, -1.239558870e-02f, -1.244802926e-02f,
--1.250044187e-02f, -1.255282643e-02f, -1.260518288e-02f, -1.265751111e-02f, -1.270981104e-02f, -1.276208258e-02f, -1.281432565e-02f, -1.286654017e-02f, -1.291872603e-02f, -1.297088317e-02f,
--1.302301149e-02f, -1.307511091e-02f, -1.312718133e-02f, -1.317922268e-02f, -1.323123487e-02f, -1.328321781e-02f, -1.333517142e-02f, -1.338709560e-02f, -1.343899029e-02f, -1.349085538e-02f,
--1.354269079e-02f, -1.359449644e-02f, -1.364627225e-02f, -1.369801812e-02f, -1.374973397e-02f, -1.380141972e-02f, -1.385307528e-02f, -1.390470056e-02f, -1.395629549e-02f, -1.400785997e-02f,
--1.405939392e-02f, -1.411089725e-02f, -1.416236989e-02f, -1.421381174e-02f, -1.426522273e-02f, -1.431660276e-02f, -1.436795175e-02f, -1.441926962e-02f, -1.447055628e-02f, -1.452181165e-02f,
--1.457303564e-02f, -1.462422818e-02f, -1.467538916e-02f, -1.472651852e-02f, -1.477761617e-02f, -1.482868202e-02f, -1.487971598e-02f, -1.493071799e-02f, -1.498168794e-02f, -1.503262576e-02f,
--1.508353136e-02f, -1.513440467e-02f, -1.518524559e-02f, -1.523605404e-02f, -1.528682994e-02f, -1.533757321e-02f, -1.538828376e-02f, -1.543896151e-02f, -1.548960638e-02f, -1.554021827e-02f,
--1.559079712e-02f, -1.564134284e-02f, -1.569185534e-02f, -1.574233454e-02f, -1.579278035e-02f, -1.584319271e-02f, -1.589357151e-02f, -1.594391669e-02f, -1.599422815e-02f, -1.604450582e-02f,
--1.609474961e-02f, -1.614495944e-02f, -1.619513523e-02f, -1.624527690e-02f, -1.629538436e-02f, -1.634545753e-02f, -1.639549633e-02f, -1.644550068e-02f, -1.649547050e-02f, -1.654540570e-02f,
--1.659530620e-02f, -1.664517192e-02f, -1.669500279e-02f, -1.674479871e-02f, -1.679455960e-02f, -1.684428539e-02f, -1.689397600e-02f, -1.694363134e-02f, -1.699325133e-02f, -1.704283588e-02f,
--1.709238493e-02f, -1.714189839e-02f, -1.719137617e-02f, -1.724081821e-02f, -1.729022440e-02f, -1.733959468e-02f, -1.738892897e-02f, -1.743822718e-02f, -1.748748924e-02f, -1.753671506e-02f,
--1.758590456e-02f, -1.763505766e-02f, -1.768417429e-02f, -1.773325436e-02f, -1.778229779e-02f, -1.783130450e-02f, -1.788027442e-02f, -1.792920746e-02f, -1.797810354e-02f, -1.802696259e-02f,
--1.807578452e-02f, -1.812456926e-02f, -1.817331672e-02f, -1.822202683e-02f, -1.827069950e-02f, -1.831933466e-02f, -1.836793223e-02f, -1.841649213e-02f, -1.846501427e-02f, -1.851349859e-02f,
--1.856194500e-02f, -1.861035343e-02f, -1.865872379e-02f, -1.870705601e-02f, -1.875535000e-02f, -1.880360569e-02f, -1.885182301e-02f, -1.890000187e-02f, -1.894814219e-02f, -1.899624390e-02f,
--1.904430691e-02f, -1.909233116e-02f, -1.914031656e-02f, -1.918826303e-02f, -1.923617050e-02f, -1.928403889e-02f, -1.933186812e-02f, -1.937965811e-02f, -1.942740879e-02f, -1.947512008e-02f,
--1.952279190e-02f, -1.957042418e-02f, -1.961801683e-02f, -1.966556978e-02f, -1.971308296e-02f, -1.976055628e-02f, -1.980798967e-02f, -1.985538305e-02f, -1.990273635e-02f, -1.995004949e-02f,
--1.999732239e-02f, -2.004455498e-02f, -2.009174717e-02f, -2.013889891e-02f, -2.018601009e-02f, -2.023308066e-02f, -2.028011054e-02f, -2.032709964e-02f, -2.037404789e-02f, -2.042095523e-02f,
--2.046782156e-02f, -2.051464682e-02f, -2.056143094e-02f, -2.060817382e-02f, -2.065487541e-02f, -2.070153562e-02f, -2.074815437e-02f, -2.079473161e-02f, -2.084126724e-02f, -2.088776119e-02f,
--2.093421339e-02f, -2.098062377e-02f, -2.102699224e-02f, -2.107331874e-02f, -2.111960319e-02f, -2.116584551e-02f, -2.121204563e-02f, -2.125820348e-02f, -2.130431898e-02f, -2.135039206e-02f,
--2.139642264e-02f, -2.144241066e-02f, -2.148835602e-02f, -2.153425867e-02f, -2.158011853e-02f, -2.162593552e-02f, -2.167170957e-02f, -2.171744060e-02f, -2.176312855e-02f, -2.180877334e-02f,
--2.185437490e-02f, -2.189993315e-02f, -2.194544802e-02f, -2.199091943e-02f, -2.203634732e-02f, -2.208173162e-02f, -2.212707224e-02f, -2.217236911e-02f, -2.221762217e-02f, -2.226283134e-02f,
--2.230799655e-02f, -2.235311772e-02f, -2.239819478e-02f, -2.244322767e-02f, -2.248821631e-02f, -2.253316062e-02f, -2.257806054e-02f, -2.262291599e-02f, -2.266772690e-02f, -2.271249320e-02f,
--2.275721481e-02f, -2.280189168e-02f, -2.284652372e-02f, -2.289111086e-02f, -2.293565304e-02f, -2.298015017e-02f, -2.302460220e-02f, -2.306900904e-02f, -2.311337063e-02f, -2.315768690e-02f,
--2.320195778e-02f, -2.324618319e-02f, -2.329036306e-02f, -2.333449733e-02f, -2.337858592e-02f, -2.342262877e-02f, -2.346662580e-02f, -2.351057694e-02f, -2.355448213e-02f, -2.359834129e-02f,
--2.364215435e-02f, -2.368592125e-02f, -2.372964191e-02f, -2.377331626e-02f, -2.381694424e-02f, -2.386052577e-02f, -2.390406079e-02f, -2.394754922e-02f, -2.399099100e-02f, -2.403438606e-02f,
--2.407773433e-02f, -2.412103574e-02f, -2.416429022e-02f, -2.420749770e-02f, -2.425065811e-02f, -2.429377139e-02f, -2.433683747e-02f, -2.437985627e-02f, -2.442282774e-02f, -2.446575180e-02f,
--2.450862838e-02f, -2.455145741e-02f, -2.459423883e-02f, -2.463697258e-02f, -2.467965857e-02f, -2.472229675e-02f, -2.476488704e-02f, -2.480742939e-02f, -2.484992371e-02f, -2.489236995e-02f,
--2.493476804e-02f, -2.497711791e-02f, -2.501941949e-02f, -2.506167271e-02f, -2.510387752e-02f, -2.514603383e-02f, -2.518814160e-02f, -2.523020074e-02f, -2.527221119e-02f, -2.531417289e-02f,
--2.535608577e-02f, -2.539794977e-02f, -2.543976481e-02f, -2.548153083e-02f, -2.552324777e-02f, -2.556491555e-02f, -2.560653412e-02f, -2.564810341e-02f, -2.568962335e-02f, -2.573109388e-02f,
--2.577251493e-02f, -2.581388644e-02f, -2.585520833e-02f, -2.589648056e-02f, -2.593770304e-02f, -2.597887572e-02f, -2.601999853e-02f, -2.606107141e-02f, -2.610209428e-02f, -2.614306710e-02f,
--2.618398979e-02f, -2.622486229e-02f, -2.626568453e-02f, -2.630645645e-02f, -2.634717798e-02f, -2.638784907e-02f, -2.642846964e-02f, -2.646903964e-02f, -2.650955900e-02f, -2.655002766e-02f,
--2.659044555e-02f, -2.663081261e-02f, -2.667112877e-02f, -2.671139398e-02f, -2.675160817e-02f, -2.679177128e-02f, -2.683188324e-02f, -2.687194399e-02f, -2.691195346e-02f, -2.695191161e-02f,
--2.699181836e-02f, -2.703167364e-02f, -2.707147741e-02f, -2.711122959e-02f, -2.715093013e-02f, -2.719057895e-02f, -2.723017601e-02f, -2.726972123e-02f, -2.730921456e-02f, -2.734865594e-02f,
--2.738804530e-02f, -2.742738257e-02f, -2.746666771e-02f, -2.750590065e-02f, -2.754508132e-02f, -2.758420967e-02f, -2.762328563e-02f, -2.766230915e-02f, -2.770128016e-02f, -2.774019860e-02f,
--2.777906442e-02f, -2.781787754e-02f, -2.785663792e-02f, -2.789534549e-02f, -2.793400019e-02f, -2.797260195e-02f, -2.801115073e-02f, -2.804964646e-02f, -2.808808907e-02f, -2.812647852e-02f,
--2.816481474e-02f, -2.820309767e-02f, -2.824132725e-02f, -2.827950342e-02f, -2.831762613e-02f, -2.835569531e-02f, -2.839371090e-02f, -2.843167285e-02f, -2.846958110e-02f, -2.850743558e-02f,
--2.854523625e-02f, -2.858298303e-02f, -2.862067588e-02f, -2.865831473e-02f, -2.869589953e-02f, -2.873343021e-02f, -2.877090672e-02f, -2.880832901e-02f, -2.884569701e-02f, -2.888301066e-02f,
--2.892026992e-02f, -2.895747471e-02f, -2.899462499e-02f, -2.903172069e-02f, -2.906876176e-02f, -2.910574814e-02f, -2.914267978e-02f, -2.917955661e-02f, -2.921637858e-02f, -2.925314564e-02f,
--2.928985772e-02f, -2.932651478e-02f, -2.936311674e-02f, -2.939966357e-02f, -2.943615520e-02f, -2.947259157e-02f, -2.950897263e-02f, -2.954529832e-02f, -2.958156859e-02f, -2.961778338e-02f,
--2.965394264e-02f, -2.969004630e-02f, -2.972609433e-02f, -2.976208665e-02f, -2.979802321e-02f, -2.983390397e-02f, -2.986972885e-02f, -2.990549782e-02f, -2.994121081e-02f, -2.997686777e-02f,
--3.001246865e-02f, -3.004801338e-02f, -3.008350192e-02f, -3.011893422e-02f, -3.015431020e-02f, -3.018962984e-02f, -3.022489306e-02f, -3.026009981e-02f, -3.029525005e-02f, -3.033034372e-02f,
--3.036538076e-02f, -3.040036112e-02f, -3.043528474e-02f, -3.047015158e-02f, -3.050496159e-02f, -3.053971469e-02f, -3.057441086e-02f, -3.060905002e-02f, -3.064363214e-02f, -3.067815715e-02f,
--3.071262500e-02f, -3.074703564e-02f, -3.078138903e-02f, -3.081568510e-02f, -3.084992380e-02f, -3.088410509e-02f, -3.091822891e-02f, -3.095229520e-02f, -3.098630393e-02f, -3.102025502e-02f,
--3.105414845e-02f, -3.108798414e-02f, -3.112176206e-02f, -3.115548214e-02f, -3.118914434e-02f, -3.122274862e-02f, -3.125629490e-02f, -3.128978316e-02f, -3.132321333e-02f, -3.135658536e-02f,
--3.138989921e-02f, -3.142315482e-02f, -3.145635215e-02f, -3.148949114e-02f, -3.152257174e-02f, -3.155559391e-02f, -3.158855759e-02f, -3.162146274e-02f, -3.165430929e-02f, -3.168709722e-02f,
--3.171982646e-02f, -3.175249696e-02f, -3.178510869e-02f, -3.181766158e-02f, -3.185015559e-02f, -3.188259067e-02f, -3.191496677e-02f, -3.194728384e-02f, -3.197954184e-02f, -3.201174071e-02f,
--3.204388041e-02f, -3.207596089e-02f, -3.210798210e-02f, -3.213994400e-02f, -3.217184652e-02f, -3.220368964e-02f, -3.223547330e-02f, -3.226719744e-02f, -3.229886204e-02f, -3.233046703e-02f,
--3.236201236e-02f, -3.239349801e-02f, -3.242492390e-02f, -3.245629001e-02f, -3.248759628e-02f, -3.251884266e-02f, -3.255002911e-02f, -3.258115559e-02f, -3.261222204e-02f, -3.264322842e-02f,
--3.267417468e-02f, -3.270506078e-02f, -3.273588667e-02f, -3.276665231e-02f, -3.279735764e-02f, -3.282800263e-02f, -3.285858723e-02f, -3.288911139e-02f, -3.291957507e-02f, -3.294997822e-02f,
--3.298032080e-02f, -3.301060276e-02f, -3.304082406e-02f, -3.307098465e-02f, -3.310108449e-02f, -3.313112354e-02f, -3.316110174e-02f, -3.319101906e-02f, -3.322087545e-02f, -3.325067086e-02f,
--3.328040526e-02f, -3.331007860e-02f, -3.333969083e-02f, -3.336924191e-02f, -3.339873180e-02f, -3.342816046e-02f, -3.345752783e-02f, -3.348683388e-02f, -3.351607857e-02f, -3.354526185e-02f,
--3.357438368e-02f, -3.360344401e-02f, -3.363244281e-02f, -3.366138003e-02f, -3.369025563e-02f, -3.371906956e-02f, -3.374782179e-02f, -3.377651226e-02f, -3.380514095e-02f, -3.383370781e-02f,
--3.386221279e-02f, -3.389065585e-02f, -3.391903696e-02f, -3.394735607e-02f, -3.397561314e-02f, -3.400380813e-02f, -3.403194099e-02f, -3.406001170e-02f, -3.408802019e-02f, -3.411596645e-02f,
--3.414385041e-02f, -3.417167205e-02f, -3.419943133e-02f, -3.422712819e-02f, -3.425476261e-02f, -3.428233454e-02f, -3.430984395e-02f, -3.433729078e-02f, -3.436467501e-02f, -3.439199660e-02f,
--3.441925549e-02f, -3.444645166e-02f, -3.447358507e-02f, -3.450065567e-02f, -3.452766343e-02f, -3.455460830e-02f, -3.458149026e-02f, -3.460830925e-02f, -3.463506525e-02f, -3.466175821e-02f,
--3.468838809e-02f, -3.471495486e-02f, -3.474145848e-02f, -3.476789890e-02f, -3.479427610e-02f, -3.482059003e-02f, -3.484684066e-02f, -3.487302795e-02f, -3.489915186e-02f, -3.492521235e-02f,
--3.495120939e-02f, -3.497714293e-02f, -3.500301295e-02f, -3.502881941e-02f, -3.505456226e-02f, -3.508024147e-02f, -3.510585701e-02f, -3.513140884e-02f, -3.515689692e-02f, -3.518232121e-02f,
--3.520768169e-02f, -3.523297831e-02f, -3.525821103e-02f, -3.528337983e-02f, -3.530848467e-02f, -3.533352550e-02f, -3.535850230e-02f, -3.538341503e-02f, -3.540826365e-02f, -3.543304814e-02f,
--3.545776844e-02f, -3.548242454e-02f, -3.550701639e-02f, -3.553154396e-02f, -3.555600722e-02f, -3.558040613e-02f, -3.560474065e-02f, -3.562901076e-02f, -3.565321641e-02f, -3.567735758e-02f,
--3.570143423e-02f, -3.572544632e-02f, -3.574939383e-02f, -3.577327672e-02f, -3.579709496e-02f, -3.582084850e-02f, -3.584453733e-02f, -3.586816140e-02f, -3.589172069e-02f, -3.591521515e-02f,
--3.593864477e-02f, -3.596200950e-02f, -3.598530931e-02f, -3.600854418e-02f, -3.603171406e-02f, -3.605481893e-02f, -3.607785875e-02f, -3.610083349e-02f, -3.612374313e-02f, -3.614658762e-02f,
--3.616936694e-02f, -3.619208105e-02f, -3.621472993e-02f, -3.623731354e-02f, -3.625983186e-02f, -3.628228484e-02f, -3.630467247e-02f, -3.632699470e-02f, -3.634925152e-02f, -3.637144288e-02f,
--3.639356876e-02f, -3.641562912e-02f, -3.643762394e-02f, -3.645955319e-02f, -3.648141684e-02f, -3.650321486e-02f, -3.652494721e-02f, -3.654661387e-02f, -3.656821481e-02f, -3.658974999e-02f,
--3.661121940e-02f, -3.663262300e-02f, -3.665396076e-02f, -3.667523265e-02f, -3.669643865e-02f, -3.671757872e-02f, -3.673865284e-02f, -3.675966098e-02f, -3.678060310e-02f, -3.680147919e-02f,
--3.682228921e-02f, -3.684303314e-02f, -3.686371095e-02f, -3.688432260e-02f, -3.690486808e-02f, -3.692534736e-02f, -3.694576040e-02f, -3.696610718e-02f, -3.698638767e-02f, -3.700660185e-02f,
--3.702674969e-02f, -3.704683117e-02f, -3.706684624e-02f, -3.708679490e-02f, -3.710667711e-02f, -3.712649285e-02f, -3.714624208e-02f, -3.716592480e-02f, -3.718554095e-02f, -3.720509053e-02f,
--3.722457351e-02f, -3.724398986e-02f, -3.726333955e-02f, -3.728262257e-02f, -3.730183887e-02f, -3.732098845e-02f, -3.734007127e-02f, -3.735908731e-02f, -3.737803655e-02f, -3.739691895e-02f,
--3.741573451e-02f, -3.743448318e-02f, -3.745316495e-02f, -3.747177979e-02f, -3.749032768e-02f, -3.750880859e-02f, -3.752722250e-02f, -3.754556939e-02f, -3.756384924e-02f, -3.758206201e-02f,
--3.760020769e-02f, -3.761828625e-02f, -3.763629767e-02f, -3.765424193e-02f, -3.767211900e-02f, -3.768992886e-02f, -3.770767149e-02f, -3.772534687e-02f, -3.774295497e-02f, -3.776049577e-02f,
--3.777796924e-02f, -3.779537538e-02f, -3.781271415e-02f, -3.782998553e-02f, -3.784718950e-02f, -3.786432604e-02f, -3.788139513e-02f, -3.789839675e-02f, -3.791533087e-02f, -3.793219748e-02f,
--3.794899654e-02f, -3.796572805e-02f, -3.798239198e-02f, -3.799898832e-02f, -3.801551703e-02f, -3.803197810e-02f, -3.804837151e-02f, -3.806469724e-02f, -3.808095526e-02f, -3.809714557e-02f,
--3.811326813e-02f, -3.812932294e-02f, -3.814530996e-02f, -3.816122919e-02f, -3.817708059e-02f, -3.819286416e-02f, -3.820857987e-02f, -3.822422770e-02f, -3.823980764e-02f, -3.825531966e-02f,
--3.827076375e-02f, -3.828613989e-02f, -3.830144805e-02f, -3.831668823e-02f, -3.833186041e-02f, -3.834696456e-02f, -3.836200066e-02f, -3.837696871e-02f, -3.839186867e-02f, -3.840670055e-02f,
--3.842146430e-02f, -3.843615993e-02f, -3.845078741e-02f, -3.846534673e-02f, -3.847983786e-02f, -3.849426080e-02f, -3.850861551e-02f, -3.852290200e-02f, -3.853712024e-02f, -3.855127021e-02f,
--3.856535191e-02f, -3.857936530e-02f, -3.859331038e-02f, -3.860718713e-02f, -3.862099554e-02f, -3.863473558e-02f, -3.864840725e-02f, -3.866201052e-02f, -3.867554539e-02f, -3.868901184e-02f,
--3.870240985e-02f, -3.871573940e-02f, -3.872900049e-02f, -3.874219309e-02f, -3.875531720e-02f, -3.876837280e-02f, -3.878135987e-02f, -3.879427840e-02f, -3.880712838e-02f, -3.881990979e-02f,
--3.883262261e-02f, -3.884526684e-02f, -3.885784246e-02f, -3.887034946e-02f, -3.888278782e-02f, -3.889515753e-02f, -3.890745858e-02f, -3.891969095e-02f, -3.893185464e-02f, -3.894394962e-02f,
--3.895597588e-02f, -3.896793342e-02f, -3.897982222e-02f, -3.899164227e-02f, -3.900339355e-02f, -3.901507606e-02f, -3.902668977e-02f, -3.903823469e-02f, -3.904971080e-02f, -3.906111808e-02f,
--3.907245653e-02f, -3.908372613e-02f, -3.909492687e-02f, -3.910605874e-02f, -3.911712173e-02f, -3.912811584e-02f, -3.913904104e-02f, -3.914989732e-02f, -3.916068469e-02f, -3.917140312e-02f,
--3.918205261e-02f, -3.919263314e-02f, -3.920314471e-02f, -3.921358730e-02f, -3.922396091e-02f, -3.923426553e-02f, -3.924450114e-02f, -3.925466775e-02f, -3.926476532e-02f, -3.927479387e-02f,
--3.928475338e-02f, -3.929464384e-02f, -3.930446524e-02f, -3.931421757e-02f, -3.932390082e-02f, -3.933351500e-02f, -3.934306008e-02f, -3.935253605e-02f, -3.936194292e-02f, -3.937128068e-02f,
--3.938054930e-02f, -3.938974880e-02f, -3.939887915e-02f, -3.940794035e-02f, -3.941693240e-02f, -3.942585529e-02f, -3.943470900e-02f, -3.944349354e-02f, -3.945220889e-02f, -3.946085506e-02f,
--3.946943202e-02f, -3.947793978e-02f, -3.948637833e-02f, -3.949474766e-02f, -3.950304777e-02f, -3.951127865e-02f, -3.951944029e-02f, -3.952753269e-02f, -3.953555584e-02f, -3.954350974e-02f,
--3.955139438e-02f, -3.955920976e-02f, -3.956695586e-02f, -3.957463270e-02f, -3.958224025e-02f, -3.958977852e-02f, -3.959724750e-02f, -3.960464718e-02f, -3.961197756e-02f, -3.961923865e-02f,
--3.962643042e-02f, -3.963355288e-02f, -3.964060603e-02f, -3.964758986e-02f, -3.965450436e-02f, -3.966134953e-02f, -3.966812538e-02f, -3.967483189e-02f, -3.968146906e-02f, -3.968803689e-02f,
--3.969453537e-02f, -3.970096451e-02f, -3.970732430e-02f, -3.971361473e-02f, -3.971983581e-02f, -3.972598753e-02f, -3.973206989e-02f, -3.973808288e-02f, -3.974402651e-02f, -3.974990077e-02f,
--3.975570567e-02f, -3.976144119e-02f, -3.976710734e-02f, -3.977270411e-02f, -3.977823151e-02f, -3.978368953e-02f, -3.978907817e-02f, -3.979439743e-02f, -3.979964731e-02f, -3.980482781e-02f,
--3.980993892e-02f, -3.981498065e-02f, -3.981995300e-02f, -3.982485597e-02f, -3.982968955e-02f, -3.983445374e-02f, -3.983914855e-02f, -3.984377398e-02f, -3.984833002e-02f, -3.985281668e-02f,
--3.985723395e-02f, -3.986158184e-02f, -3.986586035e-02f, -3.987006948e-02f, -3.987420922e-02f, -3.987827959e-02f, -3.988228057e-02f, -3.988621218e-02f, -3.989007442e-02f, -3.989386727e-02f,
--3.989759076e-02f, -3.990124487e-02f, -3.990482962e-02f, -3.990834500e-02f, -3.991179101e-02f, -3.991516766e-02f, -3.991847495e-02f, -3.992171288e-02f, -3.992488145e-02f, -3.992798067e-02f,
--3.993101054e-02f, -3.993397106e-02f, -3.993686224e-02f, -3.993968408e-02f, -3.994243658e-02f, -3.994511975e-02f, -3.994773358e-02f, -3.995027809e-02f, -3.995275327e-02f, -3.995515913e-02f,
--3.995749568e-02f, -3.995976291e-02f, -3.996196084e-02f, -3.996408947e-02f, -3.996614879e-02f, -3.996813882e-02f, -3.997005957e-02f, -3.997191102e-02f, -3.997369320e-02f, -3.997540611e-02f,
--3.997704974e-02f, -3.997862411e-02f, -3.998012922e-02f, -3.998156508e-02f, -3.998293169e-02f, -3.998422906e-02f, -3.998545719e-02f, -3.998661609e-02f, -3.998770577e-02f, -3.998872623e-02f,
--3.998967748e-02f, -3.999055952e-02f, -3.999137237e-02f, -3.999211602e-02f, -3.999279049e-02f, -3.999339579e-02f, -3.999393191e-02f, -3.999439887e-02f, -3.999479667e-02f, -3.999512532e-02f,
--3.999538483e-02f, -3.999557521e-02f, -3.999569646e-02f, -3.999574859e-02f, -3.999573162e-02f, -3.999564554e-02f, -3.999549037e-02f, -3.999526611e-02f, -3.999497278e-02f, -3.999461037e-02f,
--3.999417891e-02f, -3.999367840e-02f, -3.999310884e-02f, -3.999247026e-02f, -3.999176265e-02f, -3.999098602e-02f, -3.999014039e-02f, -3.998922576e-02f, -3.998824215e-02f, -3.998718957e-02f,
--3.998606801e-02f, -3.998487750e-02f, -3.998361805e-02f, -3.998228966e-02f, -3.998089234e-02f, -3.997942611e-02f, -3.997789097e-02f, -3.997628694e-02f, -3.997461403e-02f, -3.997287225e-02f,
--3.997106160e-02f, -3.996918211e-02f, -3.996723377e-02f, -3.996521661e-02f, -3.996313064e-02f, -3.996097586e-02f, -3.995875228e-02f, -3.995645993e-02f, -3.995409881e-02f, -3.995166894e-02f,
--3.994917031e-02f, -3.994660296e-02f, -3.994396689e-02f, -3.994126211e-02f, -3.993848864e-02f, -3.993564649e-02f, -3.993273567e-02f, -3.992975619e-02f, -3.992670807e-02f, -3.992359132e-02f,
--3.992040596e-02f, -3.991715200e-02f, -3.991382944e-02f, -3.991043832e-02f, -3.990697863e-02f, -3.990345039e-02f, -3.989985363e-02f, -3.989618834e-02f, -3.989245455e-02f, -3.988865227e-02f,
--3.988478151e-02f, -3.988084230e-02f, -3.987683464e-02f, -3.987275854e-02f, -3.986861403e-02f, -3.986440113e-02f, -3.986011983e-02f, -3.985577017e-02f, -3.985135215e-02f, -3.984686579e-02f,
--3.984231110e-02f, -3.983768811e-02f, -3.983299683e-02f, -3.982823727e-02f, -3.982340946e-02f, -3.981851340e-02f, -3.981354911e-02f, -3.980851661e-02f, -3.980341592e-02f, -3.979824705e-02f,
--3.979301002e-02f, -3.978770485e-02f, -3.978233155e-02f, -3.977689015e-02f, -3.977138065e-02f, -3.976580307e-02f, -3.976015744e-02f, -3.975444378e-02f, -3.974866209e-02f, -3.974281239e-02f,
--3.973689471e-02f, -3.973090907e-02f, -3.972485547e-02f, -3.971873395e-02f, -3.971254451e-02f, -3.970628718e-02f, -3.969996197e-02f, -3.969356891e-02f, -3.968710801e-02f, -3.968057929e-02f,
--3.967398277e-02f, -3.966731848e-02f, -3.966058642e-02f, -3.965378662e-02f, -3.964691910e-02f, -3.963998388e-02f, -3.963298097e-02f, -3.962591041e-02f, -3.961877220e-02f, -3.961156637e-02f,
--3.960429294e-02f, -3.959695193e-02f, -3.958954335e-02f, -3.958206724e-02f, -3.957452361e-02f, -3.956691248e-02f, -3.955923387e-02f, -3.955148781e-02f, -3.954367431e-02f, -3.953579340e-02f,
--3.952784509e-02f, -3.951982942e-02f, -3.951174639e-02f, -3.950359604e-02f, -3.949537838e-02f, -3.948709344e-02f, -3.947874123e-02f, -3.947032179e-02f, -3.946183513e-02f, -3.945328127e-02f,
--3.944466025e-02f, -3.943597207e-02f, -3.942721677e-02f, -3.941839436e-02f, -3.940950487e-02f, -3.940054833e-02f, -3.939152475e-02f, -3.938243416e-02f, -3.937327658e-02f, -3.936405204e-02f,
--3.935476055e-02f, -3.934540215e-02f, -3.933597686e-02f, -3.932648470e-02f, -3.931692569e-02f, -3.930729987e-02f, -3.929760724e-02f, -3.928784785e-02f, -3.927802171e-02f, -3.926812884e-02f,
--3.925816928e-02f, -3.924814305e-02f, -3.923805017e-02f, -3.922789066e-02f, -3.921766456e-02f, -3.920737188e-02f, -3.919701266e-02f, -3.918658692e-02f, -3.917609468e-02f, -3.916553598e-02f,
--3.915491083e-02f, -3.914421926e-02f, -3.913346130e-02f, -3.912263697e-02f, -3.911174631e-02f, -3.910078933e-02f, -3.908976607e-02f, -3.907867655e-02f, -3.906752080e-02f, -3.905629884e-02f,
--3.904501070e-02f, -3.903365641e-02f, -3.902223600e-02f, -3.901074948e-02f, -3.899919690e-02f, -3.898757828e-02f, -3.897589365e-02f, -3.896414302e-02f, -3.895232644e-02f, -3.894044393e-02f,
--3.892849552e-02f, -3.891648123e-02f, -3.890440109e-02f, -3.889225514e-02f, -3.888004340e-02f, -3.886776590e-02f, -3.885542267e-02f, -3.884301373e-02f, -3.883053912e-02f, -3.881799887e-02f,
--3.880539300e-02f, -3.879272155e-02f, -3.877998453e-02f, -3.876718200e-02f, -3.875431396e-02f, -3.874138046e-02f, -3.872838151e-02f, -3.871531717e-02f, -3.870218744e-02f, -3.868899236e-02f,
--3.867573197e-02f, -3.866240629e-02f, -3.864901536e-02f, -3.863555920e-02f, -3.862203784e-02f, -3.860845132e-02f, -3.859479967e-02f, -3.858108291e-02f, -3.856730109e-02f, -3.855345422e-02f,
--3.853954234e-02f, -3.852556549e-02f, -3.851152370e-02f, -3.849741698e-02f, -3.848324539e-02f, -3.846900895e-02f, -3.845470769e-02f, -3.844034164e-02f, -3.842591084e-02f, -3.841141532e-02f,
--3.839685511e-02f, -3.838223025e-02f, -3.836754076e-02f, -3.835278668e-02f, -3.833796804e-02f, -3.832308488e-02f, -3.830813722e-02f, -3.829312511e-02f, -3.827804857e-02f, -3.826290764e-02f,
--3.824770236e-02f, -3.823243274e-02f, -3.821709884e-02f, -3.820170068e-02f, -3.818623829e-02f, -3.817071172e-02f, -3.815512099e-02f, -3.813946615e-02f, -3.812374721e-02f, -3.810796422e-02f,
--3.809211722e-02f, -3.807620623e-02f, -3.806023130e-02f, -3.804419245e-02f, -3.802808973e-02f, -3.801192316e-02f, -3.799569278e-02f, -3.797939864e-02f, -3.796304075e-02f, -3.794661917e-02f,
--3.793013392e-02f, -3.791358504e-02f, -3.789697256e-02f, -3.788029653e-02f, -3.786355698e-02f, -3.784675394e-02f, -3.782988745e-02f, -3.781295754e-02f, -3.779596426e-02f, -3.777890764e-02f,
--3.776178772e-02f, -3.774460453e-02f, -3.772735811e-02f, -3.771004850e-02f, -3.769267573e-02f, -3.767523985e-02f, -3.765774088e-02f, -3.764017887e-02f, -3.762255385e-02f, -3.760486587e-02f,
--3.758711495e-02f, -3.756930114e-02f, -3.755142448e-02f, -3.753348500e-02f, -3.751548274e-02f, -3.749741774e-02f, -3.747929004e-02f, -3.746109967e-02f, -3.744284668e-02f, -3.742453110e-02f,
--3.740615298e-02f, -3.738771234e-02f, -3.736920924e-02f, -3.735064370e-02f, -3.733201578e-02f, -3.731332550e-02f, -3.729457290e-02f, -3.727575804e-02f, -3.725688094e-02f, -3.723794164e-02f,
--3.721894019e-02f, -3.719987663e-02f, -3.718075099e-02f, -3.716156332e-02f, -3.714231365e-02f, -3.712300203e-02f, -3.710362850e-02f, -3.708419309e-02f, -3.706469585e-02f, -3.704513682e-02f,
--3.702551603e-02f, -3.700583354e-02f, -3.698608938e-02f, -3.696628359e-02f, -3.694641621e-02f, -3.692648729e-02f, -3.690649686e-02f, -3.688644497e-02f, -3.686633166e-02f, -3.684615697e-02f,
--3.682592095e-02f, -3.680562363e-02f, -3.678526505e-02f, -3.676484526e-02f, -3.674436431e-02f, -3.672382222e-02f, -3.670321906e-02f, -3.668255485e-02f, -3.666182964e-02f, -3.664104347e-02f,
--3.662019639e-02f, -3.659928844e-02f, -3.657831967e-02f, -3.655729011e-02f, -3.653619980e-02f, -3.651504880e-02f, -3.649383714e-02f, -3.647256488e-02f, -3.645123204e-02f, -3.642983868e-02f,
--3.640838484e-02f, -3.638687056e-02f, -3.636529590e-02f, -3.634366088e-02f, -3.632196556e-02f, -3.630020998e-02f, -3.627839419e-02f, -3.625651822e-02f, -3.623458213e-02f, -3.621258596e-02f,
--3.619052975e-02f, -3.616841354e-02f, -3.614623740e-02f, -3.612400135e-02f, -3.610170544e-02f, -3.607934972e-02f, -3.605693424e-02f, -3.603445904e-02f, -3.601192416e-02f, -3.598932965e-02f,
--3.596667556e-02f, -3.594396193e-02f, -3.592118881e-02f, -3.589835624e-02f, -3.587546428e-02f, -3.585251296e-02f, -3.582950234e-02f, -3.580643245e-02f, -3.578330335e-02f, -3.576011509e-02f,
--3.573686770e-02f, -3.571356124e-02f, -3.569019576e-02f, -3.566677129e-02f, -3.564328789e-02f, -3.561974561e-02f, -3.559614449e-02f, -3.557248458e-02f, -3.554876592e-02f, -3.552498857e-02f,
--3.550115258e-02f, -3.547725798e-02f, -3.545330483e-02f, -3.542929317e-02f, -3.540522306e-02f, -3.538109455e-02f, -3.535690767e-02f, -3.533266248e-02f, -3.530835903e-02f, -3.528399736e-02f,
--3.525957753e-02f, -3.523509958e-02f, -3.521056357e-02f, -3.518596953e-02f, -3.516131753e-02f, -3.513660760e-02f, -3.511183980e-02f, -3.508701418e-02f, -3.506213079e-02f, -3.503718967e-02f,
--3.501219088e-02f, -3.498713446e-02f, -3.496202047e-02f, -3.493684895e-02f, -3.491161996e-02f, -3.488633355e-02f, -3.486098976e-02f, -3.483558864e-02f, -3.481013026e-02f, -3.478461464e-02f,
--3.475904186e-02f, -3.473341195e-02f, -3.470772497e-02f, -3.468198097e-02f, -3.465618000e-02f, -3.463032211e-02f, -3.460440735e-02f, -3.457843577e-02f, -3.455240743e-02f, -3.452632237e-02f,
--3.450018066e-02f, -3.447398232e-02f, -3.444772743e-02f, -3.442141603e-02f, -3.439504818e-02f, -3.436862392e-02f, -3.434214331e-02f, -3.431560639e-02f, -3.428901323e-02f, -3.426236387e-02f,
--3.423565837e-02f, -3.420889678e-02f, -3.418207915e-02f, -3.415520553e-02f, -3.412827598e-02f, -3.410129054e-02f, -3.407424928e-02f, -3.404715225e-02f, -3.401999949e-02f, -3.399279107e-02f,
--3.396552702e-02f, -3.393820742e-02f, -3.391083231e-02f, -3.388340174e-02f, -3.385591577e-02f, -3.382837445e-02f, -3.380077784e-02f, -3.377312599e-02f, -3.374541895e-02f, -3.371765678e-02f,
--3.368983953e-02f, -3.366196725e-02f, -3.363404001e-02f, -3.360605785e-02f, -3.357802083e-02f, -3.354992901e-02f, -3.352178243e-02f, -3.349358115e-02f, -3.346532524e-02f, -3.343701473e-02f,
--3.340864970e-02f, -3.338023018e-02f, -3.335175625e-02f, -3.332322795e-02f, -3.329464533e-02f, -3.326600846e-02f, -3.323731739e-02f, -3.320857218e-02f, -3.317977287e-02f, -3.315091954e-02f,
--3.312201222e-02f, -3.309305099e-02f, -3.306403589e-02f, -3.303496697e-02f, -3.300584431e-02f, -3.297666795e-02f, -3.294743795e-02f, -3.291815436e-02f, -3.288881725e-02f, -3.285942667e-02f,
--3.282998267e-02f, -3.280048532e-02f, -3.277093466e-02f, -3.274133076e-02f, -3.271167368e-02f, -3.268196347e-02f, -3.265220018e-02f, -3.262238388e-02f, -3.259251463e-02f, -3.256259247e-02f,
--3.253261747e-02f, -3.250258969e-02f, -3.247250918e-02f, -3.244237600e-02f, -3.241219021e-02f, -3.238195187e-02f, -3.235166103e-02f, -3.232131776e-02f, -3.229092211e-02f, -3.226047413e-02f,
--3.222997390e-02f, -3.219942146e-02f, -3.216881688e-02f, -3.213816021e-02f, -3.210745152e-02f, -3.207669085e-02f, -3.204587828e-02f, -3.201501386e-02f, -3.198409764e-02f, -3.195312970e-02f,
--3.192211008e-02f, -3.189103884e-02f, -3.185991605e-02f, -3.182874177e-02f, -3.179751605e-02f, -3.176623896e-02f, -3.173491055e-02f, -3.170353088e-02f, -3.167210002e-02f, -3.164061802e-02f,
--3.160908495e-02f, -3.157750086e-02f, -3.154586581e-02f, -3.151417987e-02f, -3.148244310e-02f, -3.145065554e-02f, -3.141881728e-02f, -3.138692836e-02f, -3.135498885e-02f, -3.132299880e-02f,
--3.129095829e-02f, -3.125886736e-02f, -3.122672609e-02f, -3.119453452e-02f, -3.116229273e-02f, -3.113000078e-02f, -3.109765872e-02f, -3.106526661e-02f, -3.103282453e-02f, -3.100033253e-02f,
--3.096779066e-02f, -3.093519900e-02f, -3.090255761e-02f, -3.086986654e-02f, -3.083712586e-02f, -3.080433564e-02f, -3.077149592e-02f, -3.073860678e-02f, -3.070566828e-02f, -3.067268048e-02f,
--3.063964344e-02f, -3.060655723e-02f, -3.057342191e-02f, -3.054023753e-02f, -3.050700417e-02f, -3.047372188e-02f, -3.044039073e-02f, -3.040701079e-02f, -3.037358211e-02f, -3.034010475e-02f,
--3.030657879e-02f, -3.027300428e-02f, -3.023938129e-02f, -3.020570988e-02f, -3.017199012e-02f, -3.013822206e-02f, -3.010440577e-02f, -3.007054132e-02f, -3.003662877e-02f, -3.000266819e-02f,
--2.996865963e-02f, -2.993460316e-02f, -2.990049884e-02f, -2.986634675e-02f, -2.983214694e-02f, -2.979789948e-02f, -2.976360443e-02f, -2.972926185e-02f, -2.969487182e-02f, -2.966043440e-02f,
--2.962594964e-02f, -2.959141762e-02f, -2.955683840e-02f, -2.952221205e-02f, -2.948753863e-02f, -2.945281820e-02f, -2.941805083e-02f, -2.938323659e-02f, -2.934837554e-02f, -2.931346775e-02f,
--2.927851328e-02f, -2.924351219e-02f, -2.920846456e-02f, -2.917337045e-02f, -2.913822992e-02f, -2.910304304e-02f, -2.906780988e-02f, -2.903253050e-02f, -2.899720496e-02f, -2.896183335e-02f,
--2.892641571e-02f, -2.889095211e-02f, -2.885544264e-02f, -2.881988733e-02f, -2.878428628e-02f, -2.874863954e-02f, -2.871294717e-02f, -2.867720925e-02f, -2.864142585e-02f, -2.860559702e-02f,
--2.856972284e-02f, -2.853380337e-02f, -2.849783868e-02f, -2.846182883e-02f, -2.842577390e-02f, -2.838967395e-02f, -2.835352905e-02f, -2.831733927e-02f, -2.828110467e-02f, -2.824482532e-02f,
--2.820850128e-02f, -2.817213263e-02f, -2.813571944e-02f, -2.809926177e-02f, -2.806275968e-02f, -2.802621326e-02f, -2.798962256e-02f, -2.795298765e-02f, -2.791630860e-02f, -2.787958548e-02f,
--2.784281836e-02f, -2.780600731e-02f, -2.776915239e-02f, -2.773225367e-02f, -2.769531122e-02f, -2.765832512e-02f, -2.762129542e-02f, -2.758422220e-02f, -2.754710552e-02f, -2.750994546e-02f,
--2.747274208e-02f, -2.743549546e-02f, -2.739820566e-02f, -2.736087275e-02f, -2.732349679e-02f, -2.728607787e-02f, -2.724861605e-02f, -2.721111139e-02f, -2.717356398e-02f, -2.713597387e-02f,
--2.709834113e-02f, -2.706066584e-02f, -2.702294807e-02f, -2.698518788e-02f, -2.694738535e-02f, -2.690954055e-02f, -2.687165354e-02f, -2.683372439e-02f, -2.679575319e-02f, -2.675773998e-02f,
--2.671968485e-02f, -2.668158787e-02f, -2.664344911e-02f, -2.660526863e-02f, -2.656704651e-02f, -2.652878282e-02f, -2.649047763e-02f, -2.645213100e-02f, -2.641374302e-02f, -2.637531375e-02f,
--2.633684325e-02f, -2.629833162e-02f, -2.625977890e-02f, -2.622118518e-02f, -2.618255053e-02f, -2.614387501e-02f, -2.610515870e-02f, -2.606640167e-02f, -2.602760399e-02f, -2.598876573e-02f,
--2.594988697e-02f, -2.591096777e-02f, -2.587200821e-02f, -2.583300836e-02f, -2.579396829e-02f, -2.575488807e-02f, -2.571576777e-02f, -2.567660747e-02f, -2.563740724e-02f, -2.559816715e-02f,
--2.555888727e-02f, -2.551956767e-02f, -2.548020843e-02f, -2.544080962e-02f, -2.540137131e-02f, -2.536189357e-02f, -2.532237648e-02f, -2.528282011e-02f, -2.524322453e-02f, -2.520358981e-02f,
--2.516391603e-02f, -2.512420325e-02f, -2.508445156e-02f, -2.504466102e-02f, -2.500483172e-02f, -2.496496371e-02f, -2.492505707e-02f, -2.488511188e-02f, -2.484512821e-02f, -2.480510614e-02f,
--2.476504573e-02f, -2.472494706e-02f, -2.468481020e-02f, -2.464463523e-02f, -2.460442222e-02f, -2.456417124e-02f, -2.452388237e-02f, -2.448355568e-02f, -2.444319125e-02f, -2.440278914e-02f,
--2.436234944e-02f, -2.432187221e-02f, -2.428135753e-02f, -2.424080548e-02f, -2.420021612e-02f, -2.415958954e-02f, -2.411892580e-02f, -2.407822498e-02f, -2.403748716e-02f, -2.399671241e-02f,
--2.395590080e-02f, -2.391505241e-02f, -2.387416731e-02f, -2.383324558e-02f, -2.379228729e-02f, -2.375129252e-02f, -2.371026133e-02f, -2.366919382e-02f, -2.362809004e-02f, -2.358695008e-02f,
--2.354577401e-02f, -2.350456191e-02f, -2.346331385e-02f, -2.342202990e-02f, -2.338071014e-02f, -2.333935465e-02f, -2.329796351e-02f, -2.325653677e-02f, -2.321507453e-02f, -2.317357686e-02f,
--2.313204383e-02f, -2.309047552e-02f, -2.304887200e-02f, -2.300723336e-02f, -2.296555965e-02f, -2.292385097e-02f, -2.288210739e-02f, -2.284032898e-02f, -2.279851581e-02f, -2.275666798e-02f,
--2.271478554e-02f, -2.267286858e-02f, -2.263091717e-02f, -2.258893139e-02f, -2.254691131e-02f, -2.250485702e-02f, -2.246276858e-02f, -2.242064608e-02f, -2.237848959e-02f, -2.233629918e-02f,
--2.229407494e-02f, -2.225181693e-02f, -2.220952525e-02f, -2.216719995e-02f, -2.212484113e-02f, -2.208244885e-02f, -2.204002319e-02f, -2.199756424e-02f, -2.195507206e-02f, -2.191254673e-02f,
--2.186998834e-02f, -2.182739695e-02f, -2.178477265e-02f, -2.174211551e-02f, -2.169942561e-02f, -2.165670303e-02f, -2.161394784e-02f, -2.157116012e-02f, -2.152833995e-02f, -2.148548740e-02f,
--2.144260256e-02f, -2.139968549e-02f, -2.135673629e-02f, -2.131375502e-02f, -2.127074177e-02f, -2.122769660e-02f, -2.118461961e-02f, -2.114151086e-02f, -2.109837043e-02f, -2.105519841e-02f,
--2.101199487e-02f, -2.096875989e-02f, -2.092549354e-02f, -2.088219590e-02f, -2.083886706e-02f, -2.079550709e-02f, -2.075211607e-02f, -2.070869407e-02f, -2.066524118e-02f, -2.062175748e-02f,
--2.057824303e-02f, -2.053469793e-02f, -2.049112224e-02f, -2.044751605e-02f, -2.040387944e-02f, -2.036021248e-02f, -2.031651525e-02f, -2.027278784e-02f, -2.022903031e-02f, -2.018524276e-02f,
--2.014142525e-02f, -2.009757787e-02f, -2.005370069e-02f, -2.000979380e-02f, -1.996585727e-02f, -1.992189119e-02f, -1.987789562e-02f, -1.983387066e-02f, -1.978981637e-02f, -1.974573285e-02f,
--1.970162016e-02f, -1.965747839e-02f, -1.961330762e-02f, -1.956910792e-02f, -1.952487938e-02f, -1.948062207e-02f, -1.943633608e-02f, -1.939202148e-02f, -1.934767835e-02f, -1.930330678e-02f,
--1.925890684e-02f, -1.921447861e-02f, -1.917002218e-02f, -1.912553761e-02f, -1.908102500e-02f, -1.903648441e-02f, -1.899191594e-02f, -1.894731966e-02f, -1.890269565e-02f, -1.885804399e-02f,
--1.881336476e-02f, -1.876865804e-02f, -1.872392392e-02f, -1.867916246e-02f, -1.863437376e-02f, -1.858955788e-02f, -1.854471492e-02f, -1.849984495e-02f, -1.845494806e-02f, -1.841002431e-02f,
--1.836507380e-02f, -1.832009660e-02f, -1.827509280e-02f, -1.823006247e-02f, -1.818500569e-02f, -1.813992255e-02f, -1.809481313e-02f, -1.804967750e-02f, -1.800451575e-02f, -1.795932796e-02f,
--1.791411421e-02f, -1.786887458e-02f, -1.782360915e-02f, -1.777831800e-02f, -1.773300121e-02f, -1.768765886e-02f, -1.764229104e-02f, -1.759689783e-02f, -1.755147930e-02f, -1.750603553e-02f,
--1.746056662e-02f, -1.741507264e-02f, -1.736955366e-02f, -1.732400978e-02f, -1.727844107e-02f, -1.723284762e-02f, -1.718722950e-02f, -1.714158680e-02f, -1.709591959e-02f, -1.705022797e-02f,
--1.700451201e-02f, -1.695877179e-02f, -1.691300739e-02f, -1.686721890e-02f, -1.682140640e-02f, -1.677556997e-02f, -1.672970968e-02f, -1.668382563e-02f, -1.663791790e-02f, -1.659198656e-02f,
--1.654603169e-02f, -1.650005339e-02f, -1.645405172e-02f, -1.640802678e-02f, -1.636197865e-02f, -1.631590740e-02f, -1.626981312e-02f, -1.622369589e-02f, -1.617755579e-02f, -1.613139290e-02f,
--1.608520732e-02f, -1.603899911e-02f, -1.599276836e-02f, -1.594651516e-02f, -1.590023958e-02f, -1.585394171e-02f, -1.580762163e-02f, -1.576127942e-02f, -1.571491516e-02f, -1.566852894e-02f,
--1.562212084e-02f, -1.557569094e-02f, -1.552923932e-02f, -1.548276607e-02f, -1.543627127e-02f, -1.538975500e-02f, -1.534321735e-02f, -1.529665839e-02f, -1.525007821e-02f, -1.520347689e-02f,
--1.515685451e-02f, -1.511021116e-02f, -1.506354692e-02f, -1.501686187e-02f, -1.497015610e-02f, -1.492342968e-02f, -1.487668271e-02f, -1.482991525e-02f, -1.478312741e-02f, -1.473631925e-02f,
--1.468949086e-02f, -1.464264233e-02f, -1.459577374e-02f, -1.454888516e-02f, -1.450197670e-02f, -1.445504841e-02f, -1.440810040e-02f, -1.436113274e-02f, -1.431414551e-02f, -1.426713881e-02f,
--1.422011270e-02f, -1.417306728e-02f, -1.412600263e-02f, -1.407891883e-02f, -1.403181597e-02f, -1.398469413e-02f, -1.393755338e-02f, -1.389039382e-02f, -1.384321553e-02f, -1.379601859e-02f,
--1.374880308e-02f, -1.370156910e-02f, -1.365431671e-02f, -1.360704601e-02f, -1.355975708e-02f, -1.351245000e-02f, -1.346512485e-02f, -1.341778173e-02f, -1.337042071e-02f, -1.332304187e-02f,
--1.327564530e-02f, -1.322823109e-02f, -1.318079931e-02f, -1.313335006e-02f, -1.308588341e-02f, -1.303839944e-02f, -1.299089825e-02f, -1.294337992e-02f, -1.289584452e-02f, -1.284829214e-02f,
--1.280072288e-02f, -1.275313680e-02f, -1.270553400e-02f, -1.265791456e-02f, -1.261027856e-02f, -1.256262608e-02f, -1.251495722e-02f, -1.246727205e-02f, -1.241957065e-02f, -1.237185312e-02f,
--1.232411954e-02f, -1.227636999e-02f, -1.222860454e-02f, -1.218082330e-02f, -1.213302634e-02f, -1.208521375e-02f, -1.203738560e-02f, -1.198954199e-02f, -1.194168300e-02f, -1.189380871e-02f,
--1.184591921e-02f, -1.179801458e-02f, -1.175009491e-02f, -1.170216027e-02f, -1.165421076e-02f, -1.160624645e-02f, -1.155826744e-02f, -1.151027381e-02f, -1.146226563e-02f, -1.141424300e-02f,
--1.136620600e-02f, -1.131815472e-02f, -1.127008923e-02f, -1.122200962e-02f, -1.117391598e-02f, -1.112580839e-02f, -1.107768694e-02f, -1.102955171e-02f, -1.098140278e-02f, -1.093324024e-02f,
--1.088506418e-02f, -1.083687467e-02f, -1.078867181e-02f, -1.074045567e-02f, -1.069222635e-02f, -1.064398392e-02f, -1.059572847e-02f, -1.054746008e-02f, -1.049917885e-02f, -1.045088485e-02f,
--1.040257817e-02f, -1.035425889e-02f, -1.030592711e-02f, -1.025758289e-02f, -1.020922633e-02f, -1.016085752e-02f, -1.011247653e-02f, -1.006408345e-02f, -1.001567837e-02f, -9.967261369e-03f,
--9.918832535e-03f, -9.870391951e-03f, -9.821939702e-03f, -9.773475874e-03f, -9.725000550e-03f, -9.676513816e-03f, -9.628015755e-03f, -9.579506455e-03f, -9.530985998e-03f, -9.482454469e-03f,
--9.433911955e-03f, -9.385358538e-03f, -9.336794305e-03f, -9.288219340e-03f, -9.239633728e-03f, -9.191037554e-03f, -9.142430902e-03f, -9.093813858e-03f, -9.045186507e-03f, -8.996548933e-03f,
--8.947901221e-03f, -8.899243457e-03f, -8.850575725e-03f, -8.801898110e-03f, -8.753210696e-03f, -8.704513570e-03f, -8.655806816e-03f, -8.607090519e-03f, -8.558364764e-03f, -8.509629636e-03f,
--8.460885219e-03f, -8.412131600e-03f, -8.363368862e-03f, -8.314597091e-03f, -8.265816372e-03f, -8.217026790e-03f, -8.168228430e-03f, -8.119421377e-03f, -8.070605716e-03f, -8.021781532e-03f,
--7.972948910e-03f, -7.924107935e-03f, -7.875258693e-03f, -7.826401268e-03f, -7.777535745e-03f, -7.728662209e-03f, -7.679780746e-03f, -7.630891441e-03f, -7.581994378e-03f, -7.533089643e-03f,
--7.484177321e-03f, -7.435257497e-03f, -7.386330255e-03f, -7.337395682e-03f, -7.288453862e-03f, -7.239504881e-03f, -7.190548823e-03f, -7.141585773e-03f, -7.092615817e-03f, -7.043639040e-03f,
--6.994655527e-03f, -6.945665363e-03f, -6.896668633e-03f, -6.847665422e-03f, -6.798655816e-03f, -6.749639899e-03f, -6.700617757e-03f, -6.651589475e-03f, -6.602555138e-03f, -6.553514831e-03f,
--6.504468639e-03f, -6.455416647e-03f, -6.406358941e-03f, -6.357295605e-03f, -6.308226726e-03f, -6.259152387e-03f, -6.210072674e-03f, -6.160987673e-03f, -6.111897467e-03f, -6.062802144e-03f,
--6.013701786e-03f, -5.964596481e-03f, -5.915486312e-03f, -5.866371366e-03f, -5.817251726e-03f, -5.768127479e-03f, -5.718998709e-03f, -5.669865502e-03f, -5.620727942e-03f, -5.571586115e-03f,
--5.522440106e-03f, -5.473290000e-03f, -5.424135882e-03f, -5.374977837e-03f, -5.325815951e-03f, -5.276650308e-03f, -5.227480994e-03f, -5.178308093e-03f, -5.129131691e-03f, -5.079951873e-03f,
--5.030768724e-03f, -4.981582329e-03f, -4.932392774e-03f, -4.883200142e-03f, -4.834004520e-03f, -4.784805992e-03f, -4.735604643e-03f, -4.686400559e-03f, -4.637193825e-03f, -4.587984525e-03f,
--4.538772745e-03f, -4.489558569e-03f, -4.440342083e-03f, -4.391123372e-03f, -4.341902521e-03f, -4.292679615e-03f, -4.243454739e-03f, -4.194227977e-03f, -4.144999415e-03f, -4.095769139e-03f,
--4.046537232e-03f, -3.997303779e-03f, -3.948068867e-03f, -3.898832580e-03f, -3.849595002e-03f, -3.800356219e-03f, -3.751116315e-03f, -3.701875377e-03f, -3.652633487e-03f, -3.603390733e-03f,
--3.554147197e-03f, -3.504902966e-03f, -3.455658125e-03f, -3.406412757e-03f, -3.357166948e-03f, -3.307920783e-03f, -3.258674347e-03f, -3.209427725e-03f, -3.160181001e-03f, -3.110934260e-03f,
--3.061687587e-03f, -3.012441068e-03f, -2.963194786e-03f, -2.913948826e-03f, -2.864703274e-03f, -2.815458215e-03f, -2.766213732e-03f, -2.716969911e-03f, -2.667726836e-03f, -2.618484592e-03f,
--2.569243265e-03f, -2.520002938e-03f, -2.470763696e-03f, -2.421525624e-03f, -2.372288807e-03f, -2.323053330e-03f, -2.273819277e-03f, -2.224586732e-03f, -2.175355781e-03f, -2.126126507e-03f,
--2.076898997e-03f, -2.027673333e-03f, -1.978449602e-03f, -1.929227886e-03f, -1.880008272e-03f, -1.830790843e-03f, -1.781575684e-03f, -1.732362880e-03f, -1.683152515e-03f, -1.633944674e-03f,
--1.584739440e-03f, -1.535536899e-03f, -1.486337135e-03f, -1.437140233e-03f, -1.387946276e-03f, -1.338755350e-03f, -1.289567539e-03f, -1.240382926e-03f, -1.191201597e-03f, -1.142023636e-03f,
--1.092849127e-03f, -1.043678155e-03f, -9.945108030e-04f, -9.453471563e-04f, -8.961872991e-04f, -8.470313155e-04f, -7.978792898e-04f, -7.487313063e-04f, -6.995874491e-04f, -6.504478024e-04f,
--6.013124504e-04f, -5.521814774e-04f, -5.030549673e-04f, -4.539330045e-04f, -4.048156730e-04f, -3.557030568e-04f, -3.065952401e-04f, -2.574923070e-04f, -2.083943415e-04f, -1.593014275e-04f,
--1.102136492e-04f, -6.113109056e-05f, -1.205383548e-05f, 3.701803204e-05f, 8.608442808e-05f, 1.351452687e-04f, 1.842004700e-04f, 2.332499481e-04f, 2.822936192e-04f, 3.313313994e-04f,
-3.803632048e-04f, 4.293889517e-04f, 4.784085563e-04f, 5.274219348e-04f, 5.764290035e-04f, 6.254296786e-04f, 6.744238765e-04f, 7.234115134e-04f, 7.723925057e-04f, 8.213667698e-04f,
-8.703342220e-04f, 9.192947787e-04f, 9.682483564e-04f, 1.017194871e-03f, 1.066134240e-03f, 1.115066380e-03f, 1.163991206e-03f, 1.212908635e-03f, 1.261818584e-03f, 1.310720970e-03f,
-1.359615709e-03f, 1.408502717e-03f, 1.457381912e-03f, 1.506253210e-03f, 1.555116527e-03f, 1.603971781e-03f, 1.652818888e-03f, 1.701657765e-03f, 1.750488328e-03f, 1.799310495e-03f,
-1.848124182e-03f, 1.896929306e-03f, 1.945725784e-03f, 1.994513533e-03f, 2.043292469e-03f, 2.092062511e-03f, 2.140823573e-03f, 2.189575575e-03f, 2.238318432e-03f, 2.287052062e-03f,
-2.335776382e-03f, 2.384491308e-03f, 2.433196759e-03f, 2.481892651e-03f, 2.530578901e-03f, 2.579255426e-03f, 2.627922144e-03f, 2.676578972e-03f, 2.725225827e-03f, 2.773862627e-03f,
-2.822489288e-03f, 2.871105729e-03f, 2.919711866e-03f, 2.968307617e-03f, 3.016892900e-03f, 3.065467631e-03f, 3.114031728e-03f, 3.162585110e-03f, 3.211127692e-03f, 3.259659394e-03f,
-3.308180132e-03f, 3.356689824e-03f, 3.405188388e-03f, 3.453675742e-03f, 3.502151802e-03f, 3.550616488e-03f, 3.599069716e-03f, 3.647511404e-03f, 3.695941471e-03f, 3.744359834e-03f,
-3.792766411e-03f, 3.841161119e-03f, 3.889543878e-03f, 3.937914604e-03f, 3.986273216e-03f, 4.034619632e-03f, 4.082953770e-03f, 4.131275548e-03f, 4.179584883e-03f, 4.227881695e-03f,
-4.276165902e-03f, 4.324437421e-03f, 4.372696170e-03f, 4.420942069e-03f, 4.469175035e-03f, 4.517394987e-03f, 4.565601843e-03f, 4.613795522e-03f, 4.661975941e-03f, 4.710143019e-03f,
-4.758296676e-03f, 4.806436829e-03f, 4.854563397e-03f, 4.902676298e-03f, 4.950775451e-03f, 4.998860775e-03f, 5.046932189e-03f, 5.094989610e-03f, 5.143032959e-03f, 5.191062153e-03f,
-5.239077112e-03f, 5.287077754e-03f, 5.335063998e-03f, 5.383035764e-03f, 5.430992969e-03f, 5.478935534e-03f, 5.526863376e-03f, 5.574776416e-03f, 5.622674572e-03f, 5.670557763e-03f,
-5.718425909e-03f, 5.766278928e-03f, 5.814116741e-03f, 5.861939265e-03f, 5.909746421e-03f, 5.957538128e-03f, 6.005314304e-03f, 6.053074871e-03f, 6.100819746e-03f, 6.148548850e-03f,
-6.196262101e-03f, 6.243959420e-03f, 6.291640727e-03f, 6.339305939e-03f, 6.386954979e-03f, 6.434587764e-03f, 6.482204215e-03f, 6.529804251e-03f, 6.577387793e-03f, 6.624954759e-03f,
-6.672505071e-03f, 6.720038648e-03f, 6.767555409e-03f, 6.815055275e-03f, 6.862538167e-03f, 6.910004003e-03f, 6.957452704e-03f, 7.004884190e-03f, 7.052298382e-03f, 7.099695199e-03f,
-7.147074562e-03f, 7.194436391e-03f, 7.241780606e-03f, 7.289107128e-03f, 7.336415877e-03f, 7.383706774e-03f, 7.430979739e-03f, 7.478234693e-03f, 7.525471556e-03f, 7.572690249e-03f,
-7.619890692e-03f, 7.667072806e-03f, 7.714236512e-03f, 7.761381731e-03f, 7.808508383e-03f, 7.855616390e-03f, 7.902705671e-03f, 7.949776149e-03f, 7.996827743e-03f, 8.043860376e-03f,
-8.090873968e-03f, 8.137868440e-03f, 8.184843714e-03f, 8.231799709e-03f, 8.278736349e-03f, 8.325653554e-03f, 8.372551245e-03f, 8.419429343e-03f, 8.466287771e-03f, 8.513126449e-03f,
-8.559945298e-03f, 8.606744242e-03f, 8.653523200e-03f, 8.700282095e-03f, 8.747020848e-03f, 8.793739381e-03f, 8.840437615e-03f, 8.887115473e-03f, 8.933772876e-03f, 8.980409746e-03f,
-9.027026005e-03f, 9.073621575e-03f, 9.120196378e-03f, 9.166750336e-03f, 9.213283371e-03f, 9.259795404e-03f, 9.306286360e-03f, 9.352756158e-03f, 9.399204723e-03f, 9.445631975e-03f,
-9.492037838e-03f, 9.538422234e-03f, 9.584785085e-03f, 9.631126313e-03f, 9.677445842e-03f, 9.723743594e-03f, 9.770019491e-03f, 9.816273456e-03f, 9.862505412e-03f, 9.908715281e-03f,
-9.954902987e-03f, 1.000106845e-02f, 1.004721160e-02f, 1.009333235e-02f, 1.013943063e-02f, 1.018550636e-02f, 1.023155947e-02f, 1.027758987e-02f, 1.032359750e-02f, 1.036958226e-02f,
-1.041554410e-02f, 1.046148292e-02f, 1.050739866e-02f, 1.055329123e-02f, 1.059916057e-02f, 1.064500659e-02f, 1.069082922e-02f, 1.073662837e-02f, 1.078240399e-02f, 1.082815598e-02f,
-1.087388427e-02f, 1.091958879e-02f, 1.096526946e-02f, 1.101092621e-02f, 1.105655895e-02f, 1.110216762e-02f, 1.114775213e-02f, 1.119331241e-02f, 1.123884838e-02f, 1.128435997e-02f,
-1.132984711e-02f, 1.137530971e-02f, 1.142074770e-02f, 1.146616101e-02f, 1.151154956e-02f, 1.155691328e-02f, 1.160225208e-02f, 1.164756590e-02f, 1.169285465e-02f, 1.173811827e-02f,
-1.178335668e-02f, 1.182856980e-02f, 1.187375756e-02f, 1.191891988e-02f, 1.196405668e-02f, 1.200916790e-02f, 1.205425346e-02f, 1.209931328e-02f, 1.214434729e-02f, 1.218935541e-02f,
-1.223433757e-02f, 1.227929369e-02f, 1.232422370e-02f, 1.236912753e-02f, 1.241400510e-02f, 1.245885633e-02f, 1.250368115e-02f, 1.254847949e-02f, 1.259325128e-02f, 1.263799643e-02f,
-1.268271487e-02f, 1.272740654e-02f, 1.277207135e-02f, 1.281670923e-02f, 1.286132012e-02f, 1.290590392e-02f, 1.295046058e-02f, 1.299499001e-02f, 1.303949214e-02f, 1.308396691e-02f,
-1.312841422e-02f, 1.317283402e-02f, 1.321722623e-02f, 1.326159078e-02f, 1.330592758e-02f, 1.335023657e-02f, 1.339451768e-02f, 1.343877083e-02f, 1.348299594e-02f, 1.352719295e-02f,
-1.357136179e-02f, 1.361550237e-02f, 1.365961463e-02f, 1.370369849e-02f, 1.374775388e-02f, 1.379178073e-02f, 1.383577896e-02f, 1.387974850e-02f, 1.392368929e-02f, 1.396760124e-02f,
-1.401148428e-02f, 1.405533835e-02f, 1.409916336e-02f, 1.414295925e-02f, 1.418672595e-02f, 1.423046338e-02f, 1.427417147e-02f, 1.431785015e-02f, 1.436149934e-02f, 1.440511898e-02f,
-1.444870899e-02f, 1.449226930e-02f, 1.453579984e-02f, 1.457930053e-02f, 1.462277132e-02f, 1.466621211e-02f, 1.470962284e-02f, 1.475300345e-02f, 1.479635386e-02f, 1.483967399e-02f,
-1.488296378e-02f, 1.492622315e-02f, 1.496945204e-02f, 1.501265036e-02f, 1.505581806e-02f, 1.509895506e-02f, 1.514206129e-02f, 1.518513668e-02f, 1.522818116e-02f, 1.527119465e-02f,
-1.531417709e-02f, 1.535712840e-02f, 1.540004852e-02f, 1.544293737e-02f, 1.548579488e-02f, 1.552862099e-02f, 1.557141562e-02f, 1.561417871e-02f, 1.565691017e-02f, 1.569960995e-02f,
-1.574227797e-02f, 1.578491416e-02f, 1.582751846e-02f, 1.587009078e-02f, 1.591263107e-02f, 1.595513925e-02f, 1.599761525e-02f, 1.604005900e-02f, 1.608247044e-02f, 1.612484949e-02f,
-1.616719609e-02f, 1.620951016e-02f, 1.625179163e-02f, 1.629404044e-02f, 1.633625652e-02f, 1.637843980e-02f, 1.642059020e-02f, 1.646270766e-02f, 1.650479212e-02f, 1.654684349e-02f,
-1.658886172e-02f, 1.663084673e-02f, 1.667279846e-02f, 1.671471683e-02f, 1.675660178e-02f, 1.679845324e-02f, 1.684027114e-02f, 1.688205541e-02f, 1.692380599e-02f, 1.696552280e-02f,
-1.700720578e-02f, 1.704885486e-02f, 1.709046997e-02f, 1.713205105e-02f, 1.717359801e-02f, 1.721511081e-02f, 1.725658937e-02f, 1.729803362e-02f, 1.733944349e-02f, 1.738081892e-02f,
-1.742215983e-02f, 1.746346617e-02f, 1.750473787e-02f, 1.754597485e-02f, 1.758717705e-02f, 1.762834440e-02f, 1.766947684e-02f, 1.771057429e-02f, 1.775163670e-02f, 1.779266399e-02f,
-1.783365609e-02f, 1.787461295e-02f, 1.791553449e-02f, 1.795642065e-02f, 1.799727136e-02f, 1.803808655e-02f, 1.807886616e-02f, 1.811961012e-02f, 1.816031837e-02f, 1.820099083e-02f,
-1.824162744e-02f, 1.828222814e-02f, 1.832279287e-02f, 1.836332154e-02f, 1.840381410e-02f, 1.844427049e-02f, 1.848469063e-02f, 1.852507446e-02f, 1.856542192e-02f, 1.860573294e-02f,
-1.864600745e-02f, 1.868624538e-02f, 1.872644669e-02f, 1.876661128e-02f, 1.880673912e-02f, 1.884683012e-02f, 1.888688422e-02f, 1.892690136e-02f, 1.896688147e-02f, 1.900682449e-02f,
-1.904673035e-02f, 1.908659899e-02f, 1.912643034e-02f, 1.916622434e-02f, 1.920598093e-02f, 1.924570003e-02f, 1.928538159e-02f, 1.932502554e-02f, 1.936463182e-02f, 1.940420036e-02f,
-1.944373110e-02f, 1.948322397e-02f, 1.952267892e-02f, 1.956209587e-02f, 1.960147476e-02f, 1.964081553e-02f, 1.968011812e-02f, 1.971938246e-02f, 1.975860849e-02f, 1.979779614e-02f,
-1.983694535e-02f, 1.987605607e-02f, 1.991512822e-02f, 1.995416173e-02f, 1.999315656e-02f, 2.003211264e-02f, 2.007102989e-02f, 2.010990827e-02f, 2.014874771e-02f, 2.018754813e-02f,
-2.022630949e-02f, 2.026503172e-02f, 2.030371476e-02f, 2.034235854e-02f, 2.038096300e-02f, 2.041952809e-02f, 2.045805373e-02f, 2.049653986e-02f, 2.053498643e-02f, 2.057339337e-02f,
-2.061176062e-02f, 2.065008812e-02f, 2.068837580e-02f, 2.072662361e-02f, 2.076483148e-02f, 2.080299935e-02f, 2.084112717e-02f, 2.087921486e-02f, 2.091726236e-02f, 2.095526963e-02f,
-2.099323658e-02f, 2.103116318e-02f, 2.106904934e-02f, 2.110689502e-02f, 2.114470014e-02f, 2.118246466e-02f, 2.122018851e-02f, 2.125787162e-02f, 2.129551394e-02f, 2.133311542e-02f,
-2.137067598e-02f, 2.140819556e-02f, 2.144567411e-02f, 2.148311157e-02f, 2.152050788e-02f, 2.155786298e-02f, 2.159517680e-02f, 2.163244928e-02f, 2.166968038e-02f, 2.170687002e-02f,
-2.174401815e-02f, 2.178112471e-02f, 2.181818964e-02f, 2.185521287e-02f, 2.189219436e-02f, 2.192913404e-02f, 2.196603185e-02f, 2.200288773e-02f, 2.203970163e-02f, 2.207647348e-02f,
-2.211320323e-02f, 2.214989082e-02f, 2.218653618e-02f, 2.222313927e-02f, 2.225970001e-02f, 2.229621836e-02f, 2.233269426e-02f, 2.236912764e-02f, 2.240551845e-02f, 2.244186663e-02f,
-2.247817212e-02f, 2.251443487e-02f, 2.255065481e-02f, 2.258683189e-02f, 2.262296605e-02f, 2.265905724e-02f, 2.269510539e-02f, 2.273111045e-02f, 2.276707236e-02f, 2.280299107e-02f,
-2.283886651e-02f, 2.287469863e-02f, 2.291048737e-02f, 2.294623267e-02f, 2.298193449e-02f, 2.301759275e-02f, 2.305320742e-02f, 2.308877841e-02f, 2.312430569e-02f, 2.315978920e-02f,
-2.319522887e-02f, 2.323062466e-02f, 2.326597650e-02f, 2.330128434e-02f, 2.333654812e-02f, 2.337176779e-02f, 2.340694330e-02f, 2.344207458e-02f, 2.347716157e-02f, 2.351220424e-02f,
-2.354720251e-02f, 2.358215633e-02f, 2.361706566e-02f, 2.365193042e-02f, 2.368675057e-02f, 2.372152606e-02f, 2.375625682e-02f, 2.379094280e-02f, 2.382558395e-02f, 2.386018021e-02f,
-2.389473152e-02f, 2.392923784e-02f, 2.396369911e-02f, 2.399811527e-02f, 2.403248627e-02f, 2.406681205e-02f, 2.410109257e-02f, 2.413532776e-02f, 2.416951757e-02f, 2.420366195e-02f,
-2.423776084e-02f, 2.427181419e-02f, 2.430582195e-02f, 2.433978406e-02f, 2.437370047e-02f, 2.440757113e-02f, 2.444139598e-02f, 2.447517496e-02f, 2.450890804e-02f, 2.454259514e-02f,
-2.457623622e-02f, 2.460983123e-02f, 2.464338011e-02f, 2.467688281e-02f, 2.471033928e-02f, 2.474374946e-02f, 2.477711331e-02f, 2.481043077e-02f, 2.484370178e-02f, 2.487692630e-02f,
-2.491010427e-02f, 2.494323564e-02f, 2.497632035e-02f, 2.500935837e-02f, 2.504234963e-02f, 2.507529408e-02f, 2.510819167e-02f, 2.514104236e-02f, 2.517384607e-02f, 2.520660278e-02f,
-2.523931242e-02f, 2.527197495e-02f, 2.530459030e-02f, 2.533715844e-02f, 2.536967931e-02f, 2.540215285e-02f, 2.543457903e-02f, 2.546695778e-02f, 2.549928906e-02f, 2.553157281e-02f,
-2.556380899e-02f, 2.559599755e-02f, 2.562813843e-02f, 2.566023158e-02f, 2.569227696e-02f, 2.572427452e-02f, 2.575622419e-02f, 2.578812594e-02f, 2.581997972e-02f, 2.585178547e-02f,
-2.588354315e-02f, 2.591525270e-02f, 2.594691408e-02f, 2.597852723e-02f, 2.601009211e-02f, 2.604160867e-02f, 2.607307686e-02f, 2.610449663e-02f, 2.613586793e-02f, 2.616719071e-02f,
-2.619846493e-02f, 2.622969053e-02f, 2.626086747e-02f, 2.629199569e-02f, 2.632307515e-02f, 2.635410581e-02f, 2.638508760e-02f, 2.641602049e-02f, 2.644690443e-02f, 2.647773937e-02f,
-2.650852526e-02f, 2.653926204e-02f, 2.656994969e-02f, 2.660058814e-02f, 2.663117735e-02f, 2.666171728e-02f, 2.669220787e-02f, 2.672264908e-02f, 2.675304085e-02f, 2.678338316e-02f,
-2.681367593e-02f, 2.684391914e-02f, 2.687411274e-02f, 2.690425666e-02f, 2.693435088e-02f, 2.696439534e-02f, 2.699439000e-02f, 2.702433481e-02f, 2.705422972e-02f, 2.708407469e-02f,
-2.711386967e-02f, 2.714361462e-02f, 2.717330949e-02f, 2.720295423e-02f, 2.723254880e-02f, 2.726209315e-02f, 2.729158724e-02f, 2.732103102e-02f, 2.735042445e-02f, 2.737976748e-02f,
-2.740906007e-02f, 2.743830216e-02f, 2.746749372e-02f, 2.749663471e-02f, 2.752572507e-02f, 2.755476476e-02f, 2.758375374e-02f, 2.761269196e-02f, 2.764157938e-02f, 2.767041595e-02f,
-2.769920163e-02f, 2.772793638e-02f, 2.775662015e-02f, 2.778525289e-02f, 2.781383457e-02f, 2.784236514e-02f, 2.787084456e-02f, 2.789927277e-02f, 2.792764975e-02f, 2.795597544e-02f,
-2.798424980e-02f, 2.801247279e-02f, 2.804064437e-02f, 2.806876449e-02f, 2.809683311e-02f, 2.812485018e-02f, 2.815281567e-02f, 2.818072953e-02f, 2.820859172e-02f, 2.823640220e-02f,
-2.826416092e-02f, 2.829186784e-02f, 2.831952292e-02f, 2.834712612e-02f, 2.837467739e-02f, 2.840217670e-02f, 2.842962400e-02f, 2.845701924e-02f, 2.848436240e-02f, 2.851165342e-02f,
-2.853889227e-02f, 2.856607890e-02f, 2.859321327e-02f, 2.862029535e-02f, 2.864732508e-02f, 2.867430243e-02f, 2.870122737e-02f, 2.872809984e-02f, 2.875491980e-02f, 2.878168722e-02f,
-2.880840206e-02f, 2.883506427e-02f, 2.886167382e-02f, 2.888823066e-02f, 2.891473476e-02f, 2.894118607e-02f, 2.896758456e-02f, 2.899393018e-02f, 2.902022290e-02f, 2.904646267e-02f,
-2.907264945e-02f, 2.909878322e-02f, 2.912486392e-02f, 2.915089151e-02f, 2.917686597e-02f, 2.920278724e-02f, 2.922865530e-02f, 2.925447010e-02f, 2.928023159e-02f, 2.930593976e-02f,
-2.933159455e-02f, 2.935719592e-02f, 2.938274384e-02f, 2.940823828e-02f, 2.943367918e-02f, 2.945906652e-02f, 2.948440026e-02f, 2.950968035e-02f, 2.953490676e-02f, 2.956007946e-02f,
-2.958519839e-02f, 2.961026354e-02f, 2.963527486e-02f, 2.966023230e-02f, 2.968513585e-02f, 2.970998544e-02f, 2.973478107e-02f, 2.975952267e-02f, 2.978421022e-02f, 2.980884368e-02f,
-2.983342301e-02f, 2.985794819e-02f, 2.988241916e-02f, 2.990683589e-02f, 2.993119835e-02f, 2.995550651e-02f, 2.997976031e-02f, 3.000395974e-02f, 3.002810475e-02f, 3.005219531e-02f,
-3.007623138e-02f, 3.010021293e-02f, 3.012413992e-02f, 3.014801231e-02f, 3.017183007e-02f, 3.019559317e-02f, 3.021930156e-02f, 3.024295523e-02f, 3.026655412e-02f, 3.029009820e-02f,
-3.031358745e-02f, 3.033702182e-02f, 3.036040128e-02f, 3.038372580e-02f, 3.040699534e-02f, 3.043020986e-02f, 3.045336935e-02f, 3.047647375e-02f, 3.049952303e-02f, 3.052251717e-02f,
-3.054545613e-02f, 3.056833987e-02f, 3.059116836e-02f, 3.061394157e-02f, 3.063665946e-02f, 3.065932201e-02f, 3.068192917e-02f, 3.070448091e-02f, 3.072697721e-02f, 3.074941803e-02f,
-3.077180333e-02f, 3.079413309e-02f, 3.081640726e-02f, 3.083862583e-02f, 3.086078875e-02f, 3.088289599e-02f, 3.090494753e-02f, 3.092694332e-02f, 3.094888334e-02f, 3.097076756e-02f,
-3.099259594e-02f, 3.101436845e-02f, 3.103608507e-02f, 3.105774575e-02f, 3.107935047e-02f, 3.110089919e-02f, 3.112239189e-02f, 3.114382854e-02f, 3.116520910e-02f, 3.118653354e-02f,
-3.120780183e-02f, 3.122901394e-02f, 3.125016984e-02f, 3.127126951e-02f, 3.129231290e-02f, 3.131329999e-02f, 3.133423075e-02f, 3.135510514e-02f, 3.137592315e-02f, 3.139668473e-02f,
-3.141738987e-02f, 3.143803852e-02f, 3.145863066e-02f, 3.147916627e-02f, 3.149964530e-02f, 3.152006774e-02f, 3.154043355e-02f, 3.156074270e-02f, 3.158099516e-02f, 3.160119092e-02f,
-3.162132992e-02f, 3.164141216e-02f, 3.166143760e-02f, 3.168140620e-02f, 3.170131795e-02f, 3.172117282e-02f, 3.174097077e-02f, 3.176071177e-02f, 3.178039581e-02f, 3.180002285e-02f,
-3.181959287e-02f, 3.183910583e-02f, 3.185856171e-02f, 3.187796048e-02f, 3.189730212e-02f, 3.191658659e-02f, 3.193581387e-02f, 3.195498394e-02f, 3.197409676e-02f, 3.199315231e-02f,
-3.201215057e-02f, 3.203109149e-02f, 3.204997507e-02f, 3.206880127e-02f, 3.208757007e-02f, 3.210628144e-02f, 3.212493535e-02f, 3.214353178e-02f, 3.216207070e-02f, 3.218055208e-02f,
-3.219897591e-02f, 3.221734215e-02f, 3.223565078e-02f, 3.225390177e-02f, 3.227209510e-02f, 3.229023075e-02f, 3.230830868e-02f, 3.232632888e-02f, 3.234429131e-02f, 3.236219596e-02f,
-3.238004279e-02f, 3.239783179e-02f, 3.241556293e-02f, 3.243323618e-02f, 3.245085152e-02f, 3.246840893e-02f, 3.248590838e-02f, 3.250334985e-02f, 3.252073331e-02f, 3.253805875e-02f,
-3.255532613e-02f, 3.257253543e-02f, 3.258968663e-02f, 3.260677971e-02f, 3.262381464e-02f, 3.264079140e-02f, 3.265770997e-02f, 3.267457032e-02f, 3.269137244e-02f, 3.270811629e-02f,
-3.272480185e-02f, 3.274142911e-02f, 3.275799804e-02f, 3.277450861e-02f, 3.279096081e-02f, 3.280735462e-02f, 3.282369000e-02f, 3.283996695e-02f, 3.285618543e-02f, 3.287234542e-02f,
-3.288844692e-02f, 3.290448988e-02f, 3.292047430e-02f, 3.293640014e-02f, 3.295226739e-02f, 3.296807603e-02f, 3.298382604e-02f, 3.299951739e-02f, 3.301515007e-02f, 3.303072405e-02f,
-3.304623931e-02f, 3.306169583e-02f, 3.307709360e-02f, 3.309243259e-02f, 3.310771278e-02f, 3.312293415e-02f, 3.313809668e-02f, 3.315320036e-02f, 3.316824515e-02f, 3.318323105e-02f,
-3.319815803e-02f, 3.321302608e-02f, 3.322783517e-02f, 3.324258528e-02f, 3.325727639e-02f, 3.327190850e-02f, 3.328648157e-02f, 3.330099558e-02f, 3.331545053e-02f, 3.332984639e-02f,
-3.334418314e-02f, 3.335846076e-02f, 3.337267924e-02f, 3.338683856e-02f, 3.340093869e-02f, 3.341497963e-02f, 3.342896134e-02f, 3.344288383e-02f, 3.345674706e-02f, 3.347055102e-02f,
-3.348429569e-02f, 3.349798106e-02f, 3.351160711e-02f, 3.352517381e-02f, 3.353868116e-02f, 3.355212913e-02f, 3.356551772e-02f, 3.357884689e-02f, 3.359211664e-02f, 3.360532696e-02f,
-3.361847781e-02f, 3.363156919e-02f, 3.364460108e-02f, 3.365757346e-02f, 3.367048632e-02f, 3.368333965e-02f, 3.369613341e-02f, 3.370886761e-02f, 3.372154223e-02f, 3.373415724e-02f,
-3.374671263e-02f, 3.375920840e-02f, 3.377164451e-02f, 3.378402097e-02f, 3.379633775e-02f, 3.380859483e-02f, 3.382079221e-02f, 3.383292986e-02f, 3.384500778e-02f, 3.385702595e-02f,
-3.386898436e-02f, 3.388088298e-02f, 3.389272181e-02f, 3.390450083e-02f, 3.391622003e-02f, 3.392787940e-02f, 3.393947891e-02f, 3.395101856e-02f, 3.396249834e-02f, 3.397391822e-02f,
-3.398527820e-02f, 3.399657826e-02f, 3.400781840e-02f, 3.401899859e-02f, 3.403011882e-02f, 3.404117909e-02f, 3.405217937e-02f, 3.406311966e-02f, 3.407399994e-02f, 3.408482021e-02f,
-3.409558044e-02f, 3.410628063e-02f, 3.411692076e-02f, 3.412750082e-02f, 3.413802081e-02f, 3.414848070e-02f, 3.415888049e-02f, 3.416922016e-02f, 3.417949971e-02f, 3.418971912e-02f,
-3.419987838e-02f, 3.420997748e-02f, 3.422001641e-02f, 3.422999516e-02f, 3.423991372e-02f, 3.424977207e-02f, 3.425957020e-02f, 3.426930811e-02f, 3.427898579e-02f, 3.428860322e-02f,
-3.429816039e-02f, 3.430765730e-02f, 3.431709393e-02f, 3.432647028e-02f, 3.433578633e-02f, 3.434504207e-02f, 3.435423750e-02f, 3.436337260e-02f, 3.437244737e-02f, 3.438146180e-02f,
-3.439041587e-02f, 3.439930958e-02f, 3.440814292e-02f, 3.441691588e-02f, 3.442562846e-02f, 3.443428063e-02f, 3.444287241e-02f, 3.445140376e-02f, 3.445987470e-02f, 3.446828520e-02f,
-3.447663527e-02f, 3.448492489e-02f, 3.449315405e-02f, 3.450132275e-02f, 3.450943098e-02f, 3.451747874e-02f, 3.452546600e-02f, 3.453339278e-02f, 3.454125906e-02f, 3.454906482e-02f,
-3.455681008e-02f, 3.456449481e-02f, 3.457211902e-02f, 3.457968268e-02f, 3.458718581e-02f, 3.459462839e-02f, 3.460201042e-02f, 3.460933188e-02f, 3.461659278e-02f, 3.462379310e-02f,
-3.463093285e-02f, 3.463801201e-02f, 3.464503057e-02f, 3.465198854e-02f, 3.465888591e-02f, 3.466572267e-02f, 3.467249882e-02f, 3.467921435e-02f, 3.468586925e-02f, 3.469246353e-02f,
-3.469899717e-02f, 3.470547017e-02f, 3.471188253e-02f, 3.471823424e-02f, 3.472452529e-02f, 3.473075569e-02f, 3.473692543e-02f, 3.474303450e-02f, 3.474908290e-02f, 3.475507063e-02f,
-3.476099768e-02f, 3.476686404e-02f, 3.477266972e-02f, 3.477841471e-02f, 3.478409901e-02f, 3.478972261e-02f, 3.479528551e-02f, 3.480078771e-02f, 3.480622920e-02f, 3.481160999e-02f,
-3.481693006e-02f, 3.482218942e-02f, 3.482738805e-02f, 3.483252597e-02f, 3.483760317e-02f, 3.484261964e-02f, 3.484757539e-02f, 3.485247040e-02f, 3.485730468e-02f, 3.486207823e-02f,
-3.486679105e-02f, 3.487144313e-02f, 3.487603447e-02f, 3.488056506e-02f, 3.488503492e-02f, 3.488944404e-02f, 3.489379241e-02f, 3.489808003e-02f, 3.490230691e-02f, 3.490647304e-02f,
-3.491057842e-02f, 3.491462306e-02f, 3.491860694e-02f, 3.492253008e-02f, 3.492639247e-02f, 3.493019410e-02f, 3.493393498e-02f, 3.493761512e-02f, 3.494123450e-02f, 3.494479313e-02f,
-3.494829101e-02f, 3.495172814e-02f, 3.495510452e-02f, 3.495842016e-02f, 3.496167504e-02f, 3.496486918e-02f, 3.496800257e-02f, 3.497107521e-02f, 3.497408711e-02f, 3.497703826e-02f,
-3.497992868e-02f, 3.498275835e-02f, 3.498552728e-02f, 3.498823548e-02f, 3.499088294e-02f, 3.499346966e-02f, 3.499599565e-02f, 3.499846091e-02f, 3.500086545e-02f, 3.500320925e-02f,
-3.500549234e-02f, 3.500771470e-02f, 3.500987634e-02f, 3.501197727e-02f, 3.501401748e-02f, 3.501599698e-02f, 3.501791578e-02f, 3.501977387e-02f, 3.502157126e-02f, 3.502330795e-02f,
-3.502498394e-02f, 3.502659925e-02f, 3.502815386e-02f, 3.502964780e-02f, 3.503108105e-02f, 3.503245362e-02f, 3.503376553e-02f, 3.503501676e-02f, 3.503620733e-02f, 3.503733724e-02f,
-3.503840649e-02f, 3.503941510e-02f, 3.504036306e-02f, 3.504125037e-02f, 3.504207705e-02f, 3.504284310e-02f, 3.504354851e-02f, 3.504419331e-02f, 3.504477749e-02f, 3.504530106e-02f,
-3.504576403e-02f, 3.504616639e-02f, 3.504650816e-02f, 3.504678934e-02f, 3.504700993e-02f, 3.504716995e-02f, 3.504726940e-02f, 3.504730829e-02f, 3.504728661e-02f, 3.504720438e-02f,
-3.504706161e-02f, 3.504685830e-02f, 3.504659445e-02f, 3.504627008e-02f, 3.504588519e-02f, 3.504543979e-02f, 3.504493389e-02f, 3.504436748e-02f, 3.504374059e-02f, 3.504305321e-02f,
-3.504230536e-02f, 3.504149704e-02f, 3.504062826e-02f, 3.503969903e-02f, 3.503870935e-02f, 3.503765923e-02f, 3.503654869e-02f, 3.503537773e-02f, 3.503414636e-02f, 3.503285458e-02f,
-3.503150241e-02f, 3.503008985e-02f, 3.502861692e-02f, 3.502708362e-02f, 3.502548995e-02f, 3.502383594e-02f, 3.502212159e-02f, 3.502034690e-02f, 3.501851189e-02f, 3.501661657e-02f,
-3.501466094e-02f, 3.501264502e-02f, 3.501056882e-02f, 3.500843234e-02f, 3.500623560e-02f, 3.500397860e-02f, 3.500166136e-02f, 3.499928388e-02f, 3.499684618e-02f, 3.499434827e-02f,
-3.499179016e-02f, 3.498917185e-02f, 3.498649336e-02f, 3.498375471e-02f, 3.498095589e-02f, 3.497809692e-02f, 3.497517782e-02f, 3.497219860e-02f, 3.496915926e-02f, 3.496605981e-02f,
-3.496290028e-02f, 3.495968067e-02f, 3.495640099e-02f, 3.495306125e-02f, 3.494966147e-02f, 3.494620166e-02f, 3.494268183e-02f, 3.493910199e-02f, 3.493546216e-02f, 3.493176235e-02f,
-3.492800257e-02f, 3.492418283e-02f, 3.492030315e-02f, 3.491636353e-02f, 3.491236400e-02f, 3.490830457e-02f, 3.490418524e-02f, 3.490000603e-02f, 3.489576697e-02f, 3.489146805e-02f,
-3.488710929e-02f, 3.488269071e-02f, 3.487821232e-02f, 3.487367413e-02f, 3.486907616e-02f, 3.486441843e-02f, 3.485970094e-02f, 3.485492371e-02f, 3.485008676e-02f, 3.484519009e-02f,
-3.484023374e-02f, 3.483521770e-02f, 3.483014199e-02f, 3.482500664e-02f, 3.481981165e-02f, 3.481455704e-02f, 3.480924282e-02f, 3.480386901e-02f, 3.479843563e-02f, 3.479294269e-02f,
-3.478739021e-02f, 3.478177820e-02f, 3.477610668e-02f, 3.477037566e-02f, 3.476458517e-02f, 3.475873521e-02f, 3.475282580e-02f, 3.474685696e-02f, 3.474082871e-02f, 3.473474106e-02f,
-3.472859403e-02f, 3.472238764e-02f, 3.471612189e-02f, 3.470979682e-02f, 3.470341244e-02f, 3.469696875e-02f, 3.469046579e-02f, 3.468390357e-02f, 3.467728211e-02f, 3.467060141e-02f,
-3.466386151e-02f, 3.465706242e-02f, 3.465020416e-02f, 3.464328674e-02f, 3.463631018e-02f, 3.462927450e-02f, 3.462217973e-02f, 3.461502587e-02f, 3.460781295e-02f, 3.460054098e-02f,
-3.459320998e-02f, 3.458581998e-02f, 3.457837099e-02f, 3.457086303e-02f, 3.456329612e-02f, 3.455567028e-02f, 3.454798552e-02f, 3.454024187e-02f, 3.453243935e-02f, 3.452457797e-02f,
-3.451665776e-02f, 3.450867874e-02f, 3.450064092e-02f, 3.449254432e-02f, 3.448438898e-02f, 3.447617489e-02f, 3.446790209e-02f, 3.445957060e-02f, 3.445118044e-02f, 3.444273162e-02f,
-3.443422417e-02f, 3.442565811e-02f, 3.441703346e-02f, 3.440835023e-02f, 3.439960846e-02f, 3.439080817e-02f, 3.438194936e-02f, 3.437303207e-02f, 3.436405632e-02f, 3.435502213e-02f,
-3.434592951e-02f, 3.433677850e-02f, 3.432756911e-02f, 3.431830136e-02f, 3.430897529e-02f, 3.429959090e-02f, 3.429014822e-02f, 3.428064728e-02f, 3.427108809e-02f, 3.426147069e-02f,
-3.425179508e-02f, 3.424206130e-02f, 3.423226937e-02f, 3.422241930e-02f, 3.421251113e-02f, 3.420254487e-02f, 3.419252056e-02f, 3.418243820e-02f, 3.417229784e-02f, 3.416209948e-02f,
-3.415184315e-02f, 3.414152888e-02f, 3.413115670e-02f, 3.412072661e-02f, 3.411023866e-02f, 3.409969286e-02f, 3.408908923e-02f, 3.407842780e-02f, 3.406770861e-02f, 3.405693166e-02f,
-3.404609698e-02f, 3.403520460e-02f, 3.402425455e-02f, 3.401324685e-02f, 3.400218151e-02f, 3.399105858e-02f, 3.397987807e-02f, 3.396864001e-02f, 3.395734443e-02f, 3.394599134e-02f,
-3.393458078e-02f, 3.392311277e-02f, 3.391158734e-02f, 3.390000451e-02f, 3.388836431e-02f, 3.387666676e-02f, 3.386491189e-02f, 3.385309973e-02f, 3.384123030e-02f, 3.382930363e-02f,
-3.381731975e-02f, 3.380527868e-02f, 3.379318045e-02f, 3.378102508e-02f, 3.376881261e-02f, 3.375654305e-02f, 3.374421645e-02f, 3.373183281e-02f, 3.371939218e-02f, 3.370689458e-02f,
-3.369434003e-02f, 3.368172857e-02f, 3.366906021e-02f, 3.365633500e-02f, 3.364355295e-02f, 3.363071410e-02f, 3.361781847e-02f, 3.360486609e-02f, 3.359185698e-02f, 3.357879119e-02f,
-3.356566873e-02f, 3.355248964e-02f, 3.353925393e-02f, 3.352596165e-02f, 3.351261282e-02f, 3.349920747e-02f, 3.348574562e-02f, 3.347222732e-02f, 3.345865257e-02f, 3.344502143e-02f,
-3.343133391e-02f, 3.341759004e-02f, 3.340378985e-02f, 3.338993338e-02f, 3.337602065e-02f, 3.336205170e-02f, 3.334802654e-02f, 3.333394522e-02f, 3.331980776e-02f, 3.330561420e-02f,
-3.329136455e-02f, 3.327705886e-02f, 3.326269716e-02f, 3.324827947e-02f, 3.323380582e-02f, 3.321927625e-02f, 3.320469079e-02f, 3.319004946e-02f, 3.317535230e-02f, 3.316059934e-02f,
-3.314579061e-02f, 3.313092615e-02f, 3.311600597e-02f, 3.310103013e-02f, 3.308599863e-02f, 3.307091153e-02f, 3.305576885e-02f, 3.304057062e-02f, 3.302531687e-02f, 3.301000764e-02f,
-3.299464295e-02f, 3.297922285e-02f, 3.296374735e-02f, 3.294821651e-02f, 3.293263034e-02f, 3.291698888e-02f, 3.290129216e-02f, 3.288554021e-02f, 3.286973308e-02f, 3.285387078e-02f,
-3.283795336e-02f, 3.282198085e-02f, 3.280595328e-02f, 3.278987068e-02f, 3.277373309e-02f, 3.275754054e-02f, 3.274129306e-02f, 3.272499069e-02f, 3.270863346e-02f, 3.269222141e-02f,
-3.267575456e-02f, 3.265923297e-02f, 3.264265664e-02f, 3.262602563e-02f, 3.260933997e-02f, 3.259259968e-02f, 3.257580481e-02f, 3.255895540e-02f, 3.254205146e-02f, 3.252509304e-02f,
-3.250808018e-02f, 3.249101291e-02f, 3.247389126e-02f, 3.245671527e-02f, 3.243948497e-02f, 3.242220040e-02f, 3.240486160e-02f, 3.238746860e-02f, 3.237002143e-02f, 3.235252013e-02f,
-3.233496475e-02f, 3.231735530e-02f, 3.229969184e-02f, 3.228197439e-02f, 3.226420299e-02f, 3.224637767e-02f, 3.222849848e-02f, 3.221056546e-02f, 3.219257862e-02f, 3.217453802e-02f,
-3.215644369e-02f, 3.213829567e-02f, 3.212009399e-02f, 3.210183869e-02f, 3.208352981e-02f, 3.206516738e-02f, 3.204675144e-02f, 3.202828203e-02f, 3.200975919e-02f, 3.199118295e-02f,
-3.197255335e-02f, 3.195387043e-02f, 3.193513422e-02f, 3.191634477e-02f, 3.189750211e-02f, 3.187860628e-02f, 3.185965732e-02f, 3.184065526e-02f, 3.182160015e-02f, 3.180249202e-02f,
-3.178333091e-02f, 3.176411687e-02f, 3.174484991e-02f, 3.172553010e-02f, 3.170615746e-02f, 3.168673204e-02f, 3.166725386e-02f, 3.164772298e-02f, 3.162813943e-02f, 3.160850326e-02f,
-3.158881449e-02f, 3.156907317e-02f, 3.154927933e-02f, 3.152943303e-02f, 3.150953429e-02f, 3.148958317e-02f, 3.146957968e-02f, 3.144952389e-02f, 3.142941582e-02f, 3.140925552e-02f,
-3.138904302e-02f, 3.136877837e-02f, 3.134846161e-02f, 3.132809278e-02f, 3.130767192e-02f, 3.128719906e-02f, 3.126667425e-02f, 3.124609754e-02f, 3.122546895e-02f, 3.120478854e-02f,
-3.118405634e-02f, 3.116327239e-02f, 3.114243674e-02f, 3.112154943e-02f, 3.110061049e-02f, 3.107961997e-02f, 3.105857791e-02f, 3.103748436e-02f, 3.101633934e-02f, 3.099514292e-02f,
-3.097389512e-02f, 3.095259599e-02f, 3.093124557e-02f, 3.090984390e-02f, 3.088839103e-02f, 3.086688699e-02f, 3.084533184e-02f, 3.082372561e-02f, 3.080206834e-02f, 3.078036008e-02f,
-3.075860088e-02f, 3.073679076e-02f, 3.071492978e-02f, 3.069301798e-02f, 3.067105540e-02f, 3.064904208e-02f, 3.062697807e-02f, 3.060486341e-02f, 3.058269815e-02f, 3.056048233e-02f,
-3.053821598e-02f, 3.051589916e-02f, 3.049353191e-02f, 3.047111427e-02f, 3.044864629e-02f, 3.042612801e-02f, 3.040355947e-02f, 3.038094072e-02f, 3.035827180e-02f, 3.033555275e-02f,
-3.031278363e-02f, 3.028996447e-02f, 3.026709532e-02f, 3.024417623e-02f, 3.022120723e-02f, 3.019818838e-02f, 3.017511971e-02f, 3.015200128e-02f, 3.012883313e-02f, 3.010561530e-02f,
-3.008234783e-02f, 3.005903078e-02f, 3.003566419e-02f, 3.001224810e-02f, 2.998878257e-02f, 2.996526762e-02f, 2.994170332e-02f, 2.991808970e-02f, 2.989442682e-02f, 2.987071471e-02f,
-2.984695343e-02f, 2.982314301e-02f, 2.979928351e-02f, 2.977537498e-02f, 2.975141745e-02f, 2.972741098e-02f, 2.970335560e-02f, 2.967925138e-02f, 2.965509834e-02f, 2.963089655e-02f,
-2.960664605e-02f, 2.958234688e-02f, 2.955799909e-02f, 2.953360273e-02f, 2.950915784e-02f, 2.948466447e-02f, 2.946012268e-02f, 2.943553250e-02f, 2.941089398e-02f, 2.938620718e-02f,
-2.936147213e-02f, 2.933668889e-02f, 2.931185751e-02f, 2.928697802e-02f, 2.926205049e-02f, 2.923707495e-02f, 2.921205146e-02f, 2.918698006e-02f, 2.916186080e-02f, 2.913669373e-02f,
-2.911147890e-02f, 2.908621636e-02f, 2.906090615e-02f, 2.903554833e-02f, 2.901014293e-02f, 2.898469002e-02f, 2.895918963e-02f, 2.893364183e-02f, 2.890804665e-02f, 2.888240414e-02f,
-2.885671437e-02f, 2.883097736e-02f, 2.880519318e-02f, 2.877936187e-02f, 2.875348348e-02f, 2.872755807e-02f, 2.870158567e-02f, 2.867556635e-02f, 2.864950014e-02f, 2.862338711e-02f,
-2.859722729e-02f, 2.857102075e-02f, 2.854476752e-02f, 2.851846766e-02f, 2.849212122e-02f, 2.846572826e-02f, 2.843928881e-02f, 2.841280293e-02f, 2.838627067e-02f, 2.835969209e-02f,
-2.833306722e-02f, 2.830639613e-02f, 2.827967886e-02f, 2.825291546e-02f, 2.822610599e-02f, 2.819925050e-02f, 2.817234903e-02f, 2.814540164e-02f, 2.811840838e-02f, 2.809136929e-02f,
-2.806428444e-02f, 2.803715387e-02f, 2.800997764e-02f, 2.798275579e-02f, 2.795548838e-02f, 2.792817545e-02f, 2.790081707e-02f, 2.787341328e-02f, 2.784596413e-02f, 2.781846968e-02f,
-2.779092998e-02f, 2.776334508e-02f, 2.773571503e-02f, 2.770803989e-02f, 2.768031970e-02f, 2.765255452e-02f, 2.762474440e-02f, 2.759688940e-02f, 2.756898957e-02f, 2.754104495e-02f,
-2.751305561e-02f, 2.748502159e-02f, 2.745694295e-02f, 2.742881974e-02f, 2.740065202e-02f, 2.737243983e-02f, 2.734418323e-02f, 2.731588228e-02f, 2.728753702e-02f, 2.725914752e-02f,
-2.723071381e-02f, 2.720223597e-02f, 2.717371403e-02f, 2.714514806e-02f, 2.711653811e-02f, 2.708788423e-02f, 2.705918647e-02f, 2.703044490e-02f, 2.700165956e-02f, 2.697283051e-02f,
-2.694395779e-02f, 2.691504148e-02f, 2.688608162e-02f, 2.685707826e-02f, 2.682803146e-02f, 2.679894127e-02f, 2.676980775e-02f, 2.674063096e-02f, 2.671141094e-02f, 2.668214776e-02f,
-2.665284146e-02f, 2.662349211e-02f, 2.659409975e-02f, 2.656466445e-02f, 2.653518625e-02f, 2.650566522e-02f, 2.647610140e-02f, 2.644649486e-02f, 2.641684564e-02f, 2.638715381e-02f,
-2.635741942e-02f, 2.632764252e-02f, 2.629782318e-02f, 2.626796144e-02f, 2.623805736e-02f, 2.620811100e-02f, 2.617812242e-02f, 2.614809167e-02f, 2.611801880e-02f, 2.608790387e-02f,
-2.605774695e-02f, 2.602754808e-02f, 2.599730732e-02f, 2.596702472e-02f, 2.593670035e-02f, 2.590633426e-02f, 2.587592651e-02f, 2.584547715e-02f, 2.581498625e-02f, 2.578445385e-02f,
-2.575388001e-02f, 2.572326480e-02f, 2.569260826e-02f, 2.566191046e-02f, 2.563117145e-02f, 2.560039129e-02f, 2.556957003e-02f, 2.553870774e-02f, 2.550780447e-02f, 2.547686028e-02f,
-2.544587523e-02f, 2.541484937e-02f, 2.538378276e-02f, 2.535267546e-02f, 2.532152753e-02f, 2.529033902e-02f, 2.525911000e-02f, 2.522784051e-02f, 2.519653063e-02f, 2.516518040e-02f,
-2.513378989e-02f, 2.510235914e-02f, 2.507088823e-02f, 2.503937721e-02f, 2.500782614e-02f, 2.497623508e-02f, 2.494460408e-02f, 2.491293320e-02f, 2.488122250e-02f, 2.484947205e-02f,
-2.481768190e-02f, 2.478585210e-02f, 2.475398272e-02f, 2.472207382e-02f, 2.469012545e-02f, 2.465813768e-02f, 2.462611056e-02f, 2.459404416e-02f, 2.456193853e-02f, 2.452979372e-02f,
-2.449760981e-02f, 2.446538685e-02f, 2.443312490e-02f, 2.440082402e-02f, 2.436848427e-02f, 2.433610570e-02f, 2.430368839e-02f, 2.427123238e-02f, 2.423873774e-02f, 2.420620453e-02f,
-2.417363281e-02f, 2.414102264e-02f, 2.410837407e-02f, 2.407568717e-02f, 2.404296201e-02f, 2.401019863e-02f, 2.397739710e-02f, 2.394455748e-02f, 2.391167983e-02f, 2.387876421e-02f,
-2.384581068e-02f, 2.381281930e-02f, 2.377979014e-02f, 2.374672325e-02f, 2.371361869e-02f, 2.368047653e-02f, 2.364729683e-02f, 2.361407964e-02f, 2.358082503e-02f, 2.354753307e-02f,
-2.351420380e-02f, 2.348083729e-02f, 2.344743361e-02f, 2.341399281e-02f, 2.338051495e-02f, 2.334700011e-02f, 2.331344833e-02f, 2.327985968e-02f, 2.324623423e-02f, 2.321257203e-02f,
-2.317887314e-02f, 2.314513763e-02f, 2.311136556e-02f, 2.307755700e-02f, 2.304371199e-02f, 2.300983061e-02f, 2.297591292e-02f, 2.294195898e-02f, 2.290796885e-02f, 2.287394259e-02f,
-2.283988027e-02f, 2.280578194e-02f, 2.277164768e-02f, 2.273747754e-02f, 2.270327159e-02f, 2.266902989e-02f, 2.263475249e-02f, 2.260043948e-02f, 2.256609089e-02f, 2.253170681e-02f,
-2.249728729e-02f, 2.246283240e-02f, 2.242834219e-02f, 2.239381673e-02f, 2.235925609e-02f, 2.232466033e-02f, 2.229002951e-02f, 2.225536369e-02f, 2.222066294e-02f, 2.218592732e-02f,
-2.215115689e-02f, 2.211635172e-02f, 2.208151187e-02f, 2.204663741e-02f, 2.201172839e-02f, 2.197678489e-02f, 2.194180696e-02f, 2.190679467e-02f, 2.187174809e-02f, 2.183666727e-02f,
-2.180155228e-02f, 2.176640319e-02f, 2.173122005e-02f, 2.169600294e-02f, 2.166075192e-02f, 2.162546705e-02f, 2.159014839e-02f, 2.155479602e-02f, 2.151940999e-02f, 2.148399037e-02f,
-2.144853722e-02f, 2.141305061e-02f, 2.137753060e-02f, 2.134197726e-02f, 2.130639065e-02f, 2.127077083e-02f, 2.123511788e-02f, 2.119943185e-02f, 2.116371282e-02f, 2.112796084e-02f,
-2.109217598e-02f, 2.105635830e-02f, 2.102050788e-02f, 2.098462477e-02f, 2.094870904e-02f, 2.091276076e-02f, 2.087677999e-02f, 2.084076680e-02f, 2.080472125e-02f, 2.076864341e-02f,
-2.073253334e-02f, 2.069639111e-02f, 2.066021678e-02f, 2.062401042e-02f, 2.058777210e-02f, 2.055150188e-02f, 2.051519983e-02f, 2.047886600e-02f, 2.044250048e-02f, 2.040610332e-02f,
-2.036967459e-02f, 2.033321436e-02f, 2.029672269e-02f, 2.026019964e-02f, 2.022364530e-02f, 2.018705971e-02f, 2.015044295e-02f, 2.011379508e-02f, 2.007711617e-02f, 2.004040629e-02f,
-2.000366550e-02f, 1.996689387e-02f, 1.993009146e-02f, 1.989325834e-02f, 1.985639459e-02f, 1.981950026e-02f, 1.978257542e-02f, 1.974562013e-02f, 1.970863448e-02f, 1.967161851e-02f,
-1.963457231e-02f, 1.959749593e-02f, 1.956038944e-02f, 1.952325291e-02f, 1.948608641e-02f, 1.944889000e-02f, 1.941166376e-02f, 1.937440774e-02f, 1.933712201e-02f, 1.929980665e-02f,
-1.926246172e-02f, 1.922508729e-02f, 1.918768342e-02f, 1.915025019e-02f, 1.911278765e-02f, 1.907529588e-02f, 1.903777495e-02f, 1.900022491e-02f, 1.896264585e-02f, 1.892503783e-02f,
-1.888740091e-02f, 1.884973516e-02f, 1.881204066e-02f, 1.877431746e-02f, 1.873656564e-02f, 1.869878527e-02f, 1.866097641e-02f, 1.862313913e-02f, 1.858527350e-02f, 1.854737959e-02f,
-1.850945746e-02f, 1.847150718e-02f, 1.843352883e-02f, 1.839552247e-02f, 1.835748816e-02f, 1.831942599e-02f, 1.828133600e-02f, 1.824321829e-02f, 1.820507290e-02f, 1.816689991e-02f,
-1.812869940e-02f, 1.809047142e-02f, 1.805221605e-02f, 1.801393335e-02f, 1.797562340e-02f, 1.793728626e-02f, 1.789892200e-02f, 1.786053070e-02f, 1.782211241e-02f, 1.778366721e-02f,
-1.774519517e-02f, 1.770669635e-02f, 1.766817083e-02f, 1.762961868e-02f, 1.759103996e-02f, 1.755243474e-02f, 1.751380309e-02f, 1.747514509e-02f, 1.743646079e-02f, 1.739775028e-02f,
-1.735901361e-02f, 1.732025086e-02f, 1.728146211e-02f, 1.724264741e-02f, 1.720380683e-02f, 1.716494046e-02f, 1.712604835e-02f, 1.708713057e-02f, 1.704818720e-02f, 1.700921831e-02f,
-1.697022396e-02f, 1.693120423e-02f, 1.689215918e-02f, 1.685308889e-02f, 1.681399342e-02f, 1.677487284e-02f, 1.673572723e-02f, 1.669655666e-02f, 1.665736118e-02f, 1.661814089e-02f,
-1.657889583e-02f, 1.653962609e-02f, 1.650033174e-02f, 1.646101284e-02f, 1.642166947e-02f, 1.638230169e-02f, 1.634290958e-02f, 1.630349321e-02f, 1.626405264e-02f, 1.622458795e-02f,
-1.618509920e-02f, 1.614558648e-02f, 1.610604984e-02f, 1.606648936e-02f, 1.602690511e-02f, 1.598729716e-02f, 1.594766559e-02f, 1.590801045e-02f, 1.586833183e-02f, 1.582862979e-02f,
-1.578890440e-02f, 1.574915574e-02f, 1.570938388e-02f, 1.566958888e-02f, 1.562977082e-02f, 1.558992976e-02f, 1.555006579e-02f, 1.551017897e-02f, 1.547026936e-02f, 1.543033705e-02f,
-1.539038211e-02f, 1.535040460e-02f, 1.531040459e-02f, 1.527038217e-02f, 1.523033739e-02f, 1.519027033e-02f, 1.515018106e-02f, 1.511006965e-02f, 1.506993618e-02f, 1.502978071e-02f,
-1.498960332e-02f, 1.494940408e-02f, 1.490918306e-02f, 1.486894033e-02f, 1.482867596e-02f, 1.478839002e-02f, 1.474808259e-02f, 1.470775374e-02f, 1.466740354e-02f, 1.462703205e-02f,
-1.458663936e-02f, 1.454622554e-02f, 1.450579065e-02f, 1.446533477e-02f, 1.442485797e-02f, 1.438436032e-02f, 1.434384189e-02f, 1.430330276e-02f, 1.426274299e-02f, 1.422216267e-02f,
-1.418156186e-02f, 1.414094063e-02f, 1.410029905e-02f, 1.405963721e-02f, 1.401895516e-02f, 1.397825298e-02f, 1.393753075e-02f, 1.389678854e-02f, 1.385602641e-02f, 1.381524445e-02f,
-1.377444271e-02f, 1.373362129e-02f, 1.369278024e-02f, 1.365191964e-02f, 1.361103956e-02f, 1.357014008e-02f, 1.352922126e-02f, 1.348828319e-02f, 1.344732593e-02f, 1.340634955e-02f,
-1.336535413e-02f, 1.332433974e-02f, 1.328330645e-02f, 1.324225434e-02f, 1.320118347e-02f, 1.316009393e-02f, 1.311898578e-02f, 1.307785909e-02f, 1.303671395e-02f, 1.299555041e-02f,
-1.295436856e-02f, 1.291316847e-02f, 1.287195021e-02f, 1.283071385e-02f, 1.278945946e-02f, 1.274818712e-02f, 1.270689691e-02f, 1.266558889e-02f, 1.262426314e-02f, 1.258291973e-02f,
-1.254155873e-02f, 1.250018022e-02f, 1.245878426e-02f, 1.241737094e-02f, 1.237594033e-02f, 1.233449250e-02f, 1.229302752e-02f, 1.225154546e-02f, 1.221004640e-02f, 1.216853042e-02f,
-1.212699758e-02f, 1.208544795e-02f, 1.204388162e-02f, 1.200229866e-02f, 1.196069913e-02f, 1.191908312e-02f, 1.187745069e-02f, 1.183580192e-02f, 1.179413688e-02f, 1.175245564e-02f,
-1.171075829e-02f, 1.166904489e-02f, 1.162731551e-02f, 1.158557024e-02f, 1.154380913e-02f, 1.150203227e-02f, 1.146023974e-02f, 1.141843160e-02f, 1.137660792e-02f, 1.133476879e-02f,
-1.129291427e-02f, 1.125104443e-02f, 1.120915937e-02f, 1.116725913e-02f, 1.112534381e-02f, 1.108341347e-02f, 1.104146819e-02f, 1.099950803e-02f, 1.095753309e-02f, 1.091554342e-02f,
-1.087353910e-02f, 1.083152021e-02f, 1.078948682e-02f, 1.074743901e-02f, 1.070537684e-02f, 1.066330040e-02f, 1.062120975e-02f, 1.057910497e-02f, 1.053698613e-02f, 1.049485331e-02f,
-1.045270659e-02f, 1.041054603e-02f, 1.036837171e-02f, 1.032618370e-02f, 1.028398209e-02f, 1.024176693e-02f, 1.019953831e-02f, 1.015729631e-02f, 1.011504098e-02f, 1.007277242e-02f,
-1.003049069e-02f, 9.988195864e-03f, 9.945888022e-03f, 9.903567236e-03f, 9.861233579e-03f, 9.818887127e-03f, 9.776527954e-03f, 9.734156133e-03f, 9.691771739e-03f, 9.649374847e-03f,
-9.606965530e-03f, 9.564543864e-03f, 9.522109922e-03f, 9.479663779e-03f, 9.437205509e-03f, 9.394735187e-03f, 9.352252887e-03f, 9.309758683e-03f, 9.267252650e-03f, 9.224734863e-03f,
-9.182205395e-03f, 9.139664322e-03f, 9.097111717e-03f, 9.054547656e-03f, 9.011972212e-03f, 8.969385461e-03f, 8.926787477e-03f, 8.884178334e-03f, 8.841558107e-03f, 8.798926871e-03f,
-8.756284700e-03f, 8.713631669e-03f, 8.670967851e-03f, 8.628293323e-03f, 8.585608159e-03f, 8.542912433e-03f, 8.500206219e-03f, 8.457489593e-03f, 8.414762630e-03f, 8.372025403e-03f,
-8.329277988e-03f, 8.286520459e-03f, 8.243752891e-03f, 8.200975359e-03f, 8.158187938e-03f, 8.115390701e-03f, 8.072583725e-03f, 8.029767083e-03f, 7.986940851e-03f, 7.944105103e-03f,
-7.901259914e-03f, 7.858405359e-03f, 7.815541513e-03f, 7.772668450e-03f, 7.729786245e-03f, 7.686894974e-03f, 7.643994710e-03f, 7.601085529e-03f, 7.558167506e-03f, 7.515240716e-03f,
-7.472305233e-03f, 7.429361132e-03f, 7.386408488e-03f, 7.343447377e-03f, 7.300477872e-03f, 7.257500049e-03f, 7.214513983e-03f, 7.171519749e-03f, 7.128517421e-03f, 7.085507075e-03f,
-7.042488785e-03f, 6.999462627e-03f, 6.956428675e-03f, 6.913387005e-03f, 6.870337690e-03f, 6.827280807e-03f, 6.784216431e-03f, 6.741144635e-03f, 6.698065496e-03f, 6.654979088e-03f,
-6.611885486e-03f, 6.568784765e-03f, 6.525677001e-03f, 6.482562267e-03f, 6.439440640e-03f, 6.396312194e-03f, 6.353177005e-03f, 6.310035146e-03f, 6.266886694e-03f, 6.223731724e-03f,
-6.180570309e-03f, 6.137402527e-03f, 6.094228450e-03f, 6.051048155e-03f, 6.007861717e-03f, 5.964669211e-03f, 5.921470711e-03f, 5.878266292e-03f, 5.835056031e-03f, 5.791840001e-03f,
-5.748618279e-03f, 5.705390938e-03f, 5.662158055e-03f, 5.618919703e-03f, 5.575675959e-03f, 5.532426898e-03f, 5.489172593e-03f, 5.445913121e-03f, 5.402648557e-03f, 5.359378975e-03f,
-5.316104451e-03f, 5.272825060e-03f, 5.229540877e-03f, 5.186251977e-03f, 5.142958435e-03f, 5.099660326e-03f, 5.056357725e-03f, 5.013050708e-03f, 4.969739349e-03f, 4.926423723e-03f,
-4.883103906e-03f, 4.839779973e-03f, 4.796451999e-03f, 4.753120059e-03f, 4.709784227e-03f, 4.666444580e-03f, 4.623101192e-03f, 4.579754138e-03f, 4.536403493e-03f, 4.493049333e-03f,
-4.449691732e-03f, 4.406330766e-03f, 4.362966509e-03f, 4.319599037e-03f, 4.276228425e-03f, 4.232854748e-03f, 4.189478081e-03f, 4.146098499e-03f, 4.102716077e-03f, 4.059330890e-03f,
-4.015943013e-03f, 3.972552521e-03f, 3.929159490e-03f, 3.885763994e-03f, 3.842366108e-03f, 3.798965908e-03f, 3.755563469e-03f, 3.712158865e-03f, 3.668752171e-03f, 3.625343463e-03f,
-3.581932816e-03f, 3.538520304e-03f, 3.495106003e-03f, 3.451689988e-03f, 3.408272333e-03f, 3.364853114e-03f, 3.321432406e-03f, 3.278010283e-03f, 3.234586821e-03f, 3.191162095e-03f,
-3.147736179e-03f, 3.104309149e-03f, 3.060881080e-03f, 3.017452046e-03f, 2.974022122e-03f, 2.930591384e-03f, 2.887159907e-03f, 2.843727764e-03f, 2.800295032e-03f, 2.756861785e-03f,
-2.713428099e-03f, 2.669994047e-03f, 2.626559705e-03f, 2.583125148e-03f, 2.539690451e-03f, 2.496255688e-03f, 2.452820935e-03f, 2.409386266e-03f, 2.365951756e-03f, 2.322517480e-03f,
-2.279083514e-03f, 2.235649931e-03f, 2.192216806e-03f, 2.148784215e-03f, 2.105352232e-03f, 2.061920933e-03f, 2.018490391e-03f, 1.975060681e-03f, 1.931631879e-03f, 1.888204059e-03f,
-1.844777296e-03f, 1.801351665e-03f, 1.757927240e-03f, 1.714504097e-03f, 1.671082309e-03f, 1.627661951e-03f, 1.584243099e-03f, 1.540825827e-03f, 1.497410210e-03f, 1.453996322e-03f,
-1.410584238e-03f, 1.367174033e-03f, 1.323765780e-03f, 1.280359556e-03f, 1.236955435e-03f, 1.193553490e-03f, 1.150153797e-03f, 1.106756431e-03f, 1.063361466e-03f, 1.019968976e-03f,
-9.765790356e-04f, 9.331917202e-04f, 8.898071039e-04f, 8.464252612e-04f, 8.030462667e-04f, 7.596701947e-04f, 7.162971199e-04f, 6.729271166e-04f, 6.295602593e-04f, 5.861966225e-04f,
-5.428362806e-04f, 4.994793080e-04f, 4.561257790e-04f, 4.127757682e-04f, 3.694293498e-04f, 3.260865983e-04f, 2.827475880e-04f, 2.394123931e-04f, 1.960810882e-04f, 1.527537473e-04f,
-1.094304449e-04f, 6.611125521e-05f, 2.279625250e-05f, -2.051448898e-05f, -6.382089500e-05f, -1.071228913e-04f, -1.504204038e-04f, -1.937133581e-04f, -2.370016802e-04f, -2.802852959e-04f,
--3.235641311e-04f, -3.668381115e-04f, -4.101071631e-04f, -4.533712119e-04f, -4.966301837e-04f, -5.398840044e-04f, -5.831326000e-04f, -6.263758965e-04f, -6.696138199e-04f, -7.128462961e-04f,
--7.560732512e-04f, -7.992946112e-04f, -8.425103022e-04f, -8.857202502e-04f, -9.289243813e-04f, -9.721226217e-04f, -1.015314897e-03f, -1.058501134e-03f, -1.101681259e-03f, -1.144855198e-03f,
--1.188022876e-03f, -1.231184221e-03f, -1.274339158e-03f, -1.317487614e-03f, -1.360629515e-03f, -1.403764787e-03f, -1.446893357e-03f, -1.490015150e-03f, -1.533130094e-03f, -1.576238114e-03f,
--1.619339137e-03f, -1.662433089e-03f, -1.705519897e-03f, -1.748599488e-03f, -1.791671786e-03f, -1.834736720e-03f, -1.877794216e-03f, -1.920844200e-03f, -1.963886598e-03f, -2.006921337e-03f,
--2.049948345e-03f, -2.092967546e-03f, -2.135978869e-03f, -2.178982239e-03f, -2.221977584e-03f, -2.264964829e-03f, -2.307943902e-03f, -2.350914730e-03f, -2.393877239e-03f, -2.436831355e-03f,
--2.479777006e-03f, -2.522714119e-03f, -2.565642620e-03f, -2.608562437e-03f, -2.651473495e-03f, -2.694375722e-03f, -2.737269045e-03f, -2.780153391e-03f, -2.823028687e-03f, -2.865894859e-03f,
--2.908751836e-03f, -2.951599543e-03f, -2.994437908e-03f, -3.037266857e-03f, -3.080086319e-03f, -3.122896220e-03f, -3.165696488e-03f, -3.208487049e-03f, -3.251267830e-03f, -3.294038760e-03f,
--3.336799764e-03f, -3.379550772e-03f, -3.422291708e-03f, -3.465022502e-03f, -3.507743081e-03f, -3.550453371e-03f, -3.593153300e-03f, -3.635842796e-03f, -3.678521786e-03f, -3.721190197e-03f,
--3.763847957e-03f, -3.806494994e-03f, -3.849131235e-03f, -3.891756607e-03f, -3.934371039e-03f, -3.976974458e-03f, -4.019566791e-03f, -4.062147966e-03f, -4.104717911e-03f, -4.147276553e-03f,
--4.189823821e-03f, -4.232359643e-03f, -4.274883945e-03f, -4.317396656e-03f, -4.359897703e-03f, -4.402387015e-03f, -4.444864519e-03f, -4.487330144e-03f, -4.529783817e-03f, -4.572225467e-03f,
--4.614655021e-03f, -4.657072407e-03f, -4.699477554e-03f, -4.741870390e-03f, -4.784250842e-03f, -4.826618839e-03f, -4.868974310e-03f, -4.911317181e-03f, -4.953647383e-03f, -4.995964842e-03f,
--5.038269487e-03f, -5.080561247e-03f, -5.122840050e-03f, -5.165105825e-03f, -5.207358499e-03f, -5.249598001e-03f, -5.291824260e-03f, -5.334037204e-03f, -5.376236762e-03f, -5.418422862e-03f,
--5.460595433e-03f, -5.502754404e-03f, -5.544899703e-03f, -5.587031259e-03f, -5.629149000e-03f, -5.671252856e-03f, -5.713342755e-03f, -5.755418627e-03f, -5.797480399e-03f, -5.839528001e-03f,
--5.881561362e-03f, -5.923580410e-03f, -5.965585075e-03f, -6.007575286e-03f, -6.049550971e-03f, -6.091512060e-03f, -6.133458482e-03f, -6.175390166e-03f, -6.217307041e-03f, -6.259209037e-03f,
--6.301096082e-03f, -6.342968106e-03f, -6.384825039e-03f, -6.426666808e-03f, -6.468493345e-03f, -6.510304578e-03f, -6.552100437e-03f, -6.593880851e-03f, -6.635645749e-03f, -6.677395062e-03f,
--6.719128719e-03f, -6.760846649e-03f, -6.802548782e-03f, -6.844235048e-03f, -6.885905376e-03f, -6.927559697e-03f, -6.969197939e-03f, -7.010820033e-03f, -7.052425909e-03f, -7.094015496e-03f,
--7.135588725e-03f, -7.177145524e-03f, -7.218685826e-03f, -7.260209558e-03f, -7.301716652e-03f, -7.343207037e-03f, -7.384680644e-03f, -7.426137403e-03f, -7.467577243e-03f, -7.509000096e-03f,
--7.550405891e-03f, -7.591794559e-03f, -7.633166030e-03f, -7.674520235e-03f, -7.715857103e-03f, -7.757176566e-03f, -7.798478554e-03f, -7.839762997e-03f, -7.881029825e-03f, -7.922278971e-03f,
--7.963510363e-03f, -8.004723933e-03f, -8.045919612e-03f, -8.087097330e-03f, -8.128257018e-03f, -8.169398607e-03f, -8.210522028e-03f, -8.251627211e-03f, -8.292714088e-03f, -8.333782590e-03f,
--8.374832647e-03f, -8.415864190e-03f, -8.456877151e-03f, -8.497871462e-03f, -8.538847052e-03f, -8.579803853e-03f, -8.620741797e-03f, -8.661660815e-03f, -8.702560837e-03f, -8.743441796e-03f,
--8.784303623e-03f, -8.825146250e-03f, -8.865969606e-03f, -8.906773626e-03f, -8.947558239e-03f, -8.988323377e-03f, -9.029068973e-03f, -9.069794958e-03f, -9.110501263e-03f, -9.151187820e-03f,
--9.191854561e-03f, -9.232501418e-03f, -9.273128323e-03f, -9.313735208e-03f, -9.354322005e-03f, -9.394888645e-03f, -9.435435061e-03f, -9.475961185e-03f, -9.516466949e-03f, -9.556952285e-03f,
--9.597417125e-03f, -9.637861402e-03f, -9.678285048e-03f, -9.718687996e-03f, -9.759070177e-03f, -9.799431524e-03f, -9.839771970e-03f, -9.880091446e-03f, -9.920389887e-03f, -9.960667224e-03f,
--1.000092339e-02f, -1.004115832e-02f, -1.008137194e-02f, -1.012156419e-02f, -1.016173500e-02f, -1.020188430e-02f, -1.024201202e-02f, -1.028211811e-02f, -1.032220249e-02f, -1.036226509e-02f,
--1.040230585e-02f, -1.044232470e-02f, -1.048232157e-02f, -1.052229641e-02f, -1.056224913e-02f, -1.060217967e-02f, -1.064208798e-02f, -1.068197397e-02f, -1.072183759e-02f, -1.076167876e-02f,
--1.080149743e-02f, -1.084129352e-02f, -1.088106697e-02f, -1.092081771e-02f, -1.096054567e-02f, -1.100025080e-02f, -1.103993302e-02f, -1.107959226e-02f, -1.111922847e-02f, -1.115884157e-02f,
--1.119843150e-02f, -1.123799819e-02f, -1.127754158e-02f, -1.131706160e-02f, -1.135655818e-02f, -1.139603126e-02f, -1.143548078e-02f, -1.147490667e-02f, -1.151430885e-02f, -1.155368728e-02f,
--1.159304187e-02f, -1.163237257e-02f, -1.167167931e-02f, -1.171096203e-02f, -1.175022065e-02f, -1.178945512e-02f, -1.182866537e-02f, -1.186785133e-02f, -1.190701294e-02f, -1.194615013e-02f,
--1.198526284e-02f, -1.202435101e-02f, -1.206341456e-02f, -1.210245344e-02f, -1.214146757e-02f, -1.218045690e-02f, -1.221942135e-02f, -1.225836087e-02f, -1.229727539e-02f, -1.233616485e-02f,
--1.237502917e-02f, -1.241386830e-02f, -1.245268218e-02f, -1.249147072e-02f, -1.253023388e-02f, -1.256897159e-02f, -1.260768378e-02f, -1.264637040e-02f, -1.268503136e-02f, -1.272366662e-02f,
--1.276227610e-02f, -1.280085975e-02f, -1.283941750e-02f, -1.287794928e-02f, -1.291645504e-02f, -1.295493470e-02f, -1.299338820e-02f, -1.303181549e-02f, -1.307021649e-02f, -1.310859114e-02f,
--1.314693938e-02f, -1.318526115e-02f, -1.322355638e-02f, -1.326182501e-02f, -1.330006697e-02f, -1.333828221e-02f, -1.337647065e-02f, -1.341463224e-02f, -1.345276692e-02f, -1.349087461e-02f,
--1.352895526e-02f, -1.356700880e-02f, -1.360503517e-02f, -1.364303431e-02f, -1.368100615e-02f, -1.371895064e-02f, -1.375686770e-02f, -1.379475728e-02f, -1.383261931e-02f, -1.387045374e-02f,
--1.390826049e-02f, -1.394603951e-02f, -1.398379074e-02f, -1.402151410e-02f, -1.405920955e-02f, -1.409687701e-02f, -1.413451642e-02f, -1.417212773e-02f, -1.420971087e-02f, -1.424726578e-02f,
--1.428479239e-02f, -1.432229065e-02f, -1.435976049e-02f, -1.439720185e-02f, -1.443461467e-02f, -1.447199889e-02f, -1.450935444e-02f, -1.454668127e-02f, -1.458397931e-02f, -1.462124850e-02f,
--1.465848878e-02f, -1.469570009e-02f, -1.473288236e-02f, -1.477003554e-02f, -1.480715957e-02f, -1.484425438e-02f, -1.488131991e-02f, -1.491835610e-02f, -1.495536290e-02f, -1.499234023e-02f,
--1.502928804e-02f, -1.506620627e-02f, -1.510309485e-02f, -1.513995374e-02f, -1.517678285e-02f, -1.521358215e-02f, -1.525035155e-02f, -1.528709101e-02f, -1.532380047e-02f, -1.536047986e-02f,
--1.539712912e-02f, -1.543374819e-02f, -1.547033702e-02f, -1.550689554e-02f, -1.554342369e-02f, -1.557992141e-02f, -1.561638865e-02f, -1.565282533e-02f, -1.568923142e-02f, -1.572560683e-02f,
--1.576195152e-02f, -1.579826542e-02f, -1.583454847e-02f, -1.587080062e-02f, -1.590702181e-02f, -1.594321197e-02f, -1.597937104e-02f, -1.601549898e-02f, -1.605159571e-02f, -1.608766118e-02f,
--1.612369532e-02f, -1.615969809e-02f, -1.619566942e-02f, -1.623160926e-02f, -1.626751753e-02f, -1.630339419e-02f, -1.633923918e-02f, -1.637505243e-02f, -1.641083390e-02f, -1.644658351e-02f,
--1.648230121e-02f, -1.651798695e-02f, -1.655364066e-02f, -1.658926229e-02f, -1.662485178e-02f, -1.666040906e-02f, -1.669593409e-02f, -1.673142680e-02f, -1.676688714e-02f, -1.680231504e-02f,
--1.683771046e-02f, -1.687307332e-02f, -1.690840358e-02f, -1.694370118e-02f, -1.697896605e-02f, -1.701419815e-02f, -1.704939741e-02f, -1.708456377e-02f, -1.711969719e-02f, -1.715479759e-02f,
--1.718986493e-02f, -1.722489914e-02f, -1.725990018e-02f, -1.729486798e-02f, -1.732980248e-02f, -1.736470363e-02f, -1.739957138e-02f, -1.743440565e-02f, -1.746920641e-02f, -1.750397359e-02f,
--1.753870713e-02f, -1.757340698e-02f, -1.760807308e-02f, -1.764270537e-02f, -1.767730381e-02f, -1.771186832e-02f, -1.774639887e-02f, -1.778089538e-02f, -1.781535780e-02f, -1.784978608e-02f,
--1.788418017e-02f, -1.791854000e-02f, -1.795286552e-02f, -1.798715667e-02f, -1.802141340e-02f, -1.805563565e-02f, -1.808982337e-02f, -1.812397651e-02f, -1.815809499e-02f, -1.819217878e-02f,
--1.822622781e-02f, -1.826024203e-02f, -1.829422139e-02f, -1.832816582e-02f, -1.836207528e-02f, -1.839594970e-02f, -1.842978904e-02f, -1.846359324e-02f, -1.849736225e-02f, -1.853109600e-02f,
--1.856479445e-02f, -1.859845753e-02f, -1.863208521e-02f, -1.866567741e-02f, -1.869923409e-02f, -1.873275519e-02f, -1.876624066e-02f, -1.879969044e-02f, -1.883310448e-02f, -1.886648273e-02f,
--1.889982513e-02f, -1.893313162e-02f, -1.896640216e-02f, -1.899963669e-02f, -1.903283515e-02f, -1.906599750e-02f, -1.909912367e-02f, -1.913221362e-02f, -1.916526728e-02f, -1.919828462e-02f,
--1.923126557e-02f, -1.926421008e-02f, -1.929711810e-02f, -1.932998957e-02f, -1.936282444e-02f, -1.939562267e-02f, -1.942838418e-02f, -1.946110894e-02f, -1.949379689e-02f, -1.952644798e-02f,
--1.955906215e-02f, -1.959163935e-02f, -1.962417953e-02f, -1.965668264e-02f, -1.968914862e-02f, -1.972157742e-02f, -1.975396899e-02f, -1.978632328e-02f, -1.981864023e-02f, -1.985091980e-02f,
--1.988316193e-02f, -1.991536656e-02f, -1.994753366e-02f, -1.997966316e-02f, -2.001175501e-02f, -2.004380916e-02f, -2.007582557e-02f, -2.010780417e-02f, -2.013974492e-02f, -2.017164776e-02f,
--2.020351265e-02f, -2.023533954e-02f, -2.026712836e-02f, -2.029887908e-02f, -2.033059164e-02f, -2.036226598e-02f, -2.039390207e-02f, -2.042549984e-02f, -2.045705925e-02f, -2.048858024e-02f,
--2.052006277e-02f, -2.055150678e-02f, -2.058291223e-02f, -2.061427906e-02f, -2.064560723e-02f, -2.067689668e-02f, -2.070814736e-02f, -2.073935923e-02f, -2.077053222e-02f, -2.080166631e-02f,
--2.083276142e-02f, -2.086381752e-02f, -2.089483455e-02f, -2.092581247e-02f, -2.095675121e-02f, -2.098765075e-02f, -2.101851102e-02f, -2.104933197e-02f, -2.108011357e-02f, -2.111085575e-02f,
--2.114155846e-02f, -2.117222167e-02f, -2.120284532e-02f, -2.123342936e-02f, -2.126397374e-02f, -2.129447841e-02f, -2.132494333e-02f, -2.135536844e-02f, -2.138575370e-02f, -2.141609907e-02f,
--2.144640448e-02f, -2.147666989e-02f, -2.150689526e-02f, -2.153708053e-02f, -2.156722566e-02f, -2.159733060e-02f, -2.162739530e-02f, -2.165741972e-02f, -2.168740380e-02f, -2.171734749e-02f,
--2.174725076e-02f, -2.177711355e-02f, -2.180693582e-02f, -2.183671751e-02f, -2.186645859e-02f, -2.189615899e-02f, -2.192581868e-02f, -2.195543761e-02f, -2.198501573e-02f, -2.201455300e-02f,
--2.204404936e-02f, -2.207350477e-02f, -2.210291919e-02f, -2.213229256e-02f, -2.216162485e-02f, -2.219091599e-02f, -2.222016596e-02f, -2.224937469e-02f, -2.227854215e-02f, -2.230766828e-02f,
--2.233675305e-02f, -2.236579641e-02f, -2.239479830e-02f, -2.242375869e-02f, -2.245267752e-02f, -2.248155476e-02f, -2.251039035e-02f, -2.253918425e-02f, -2.256793642e-02f, -2.259664681e-02f,
--2.262531537e-02f, -2.265394206e-02f, -2.268252683e-02f, -2.271106964e-02f, -2.273957045e-02f, -2.276802920e-02f, -2.279644585e-02f, -2.282482036e-02f, -2.285315269e-02f, -2.288144278e-02f,
--2.290969060e-02f, -2.293789610e-02f, -2.296605923e-02f, -2.299417995e-02f, -2.302225821e-02f, -2.305029398e-02f, -2.307828721e-02f, -2.310623784e-02f, -2.313414585e-02f, -2.316201118e-02f,
--2.318983380e-02f, -2.321761365e-02f, -2.324535069e-02f, -2.327304488e-02f, -2.330069618e-02f, -2.332830455e-02f, -2.335586993e-02f, -2.338339228e-02f, -2.341087157e-02f, -2.343830775e-02f,
--2.346570078e-02f, -2.349305061e-02f, -2.352035720e-02f, -2.354762051e-02f, -2.357484049e-02f, -2.360201710e-02f, -2.362915030e-02f, -2.365624005e-02f, -2.368328630e-02f, -2.371028902e-02f,
--2.373724815e-02f, -2.376416367e-02f, -2.379103551e-02f, -2.381786365e-02f, -2.384464804e-02f, -2.387138864e-02f, -2.389808541e-02f, -2.392473830e-02f, -2.395134727e-02f, -2.397791229e-02f,
--2.400443330e-02f, -2.403091028e-02f, -2.405734317e-02f, -2.408373194e-02f, -2.411007655e-02f, -2.413637694e-02f, -2.416263309e-02f, -2.418884496e-02f, -2.421501249e-02f, -2.424113565e-02f,
--2.426721441e-02f, -2.429324871e-02f, -2.431923852e-02f, -2.434518379e-02f, -2.437108450e-02f, -2.439694059e-02f, -2.442275203e-02f, -2.444851877e-02f, -2.447424078e-02f, -2.449991802e-02f,
--2.452555044e-02f, -2.455113801e-02f, -2.457668068e-02f, -2.460217842e-02f, -2.462763119e-02f, -2.465303895e-02f, -2.467840166e-02f, -2.470371927e-02f, -2.472899175e-02f, -2.475421907e-02f,
--2.477940118e-02f, -2.480453803e-02f, -2.482962961e-02f, -2.485467585e-02f, -2.487967673e-02f, -2.490463221e-02f, -2.492954225e-02f, -2.495440680e-02f, -2.497922584e-02f, -2.500399932e-02f,
--2.502872721e-02f, -2.505340946e-02f, -2.507804604e-02f, -2.510263691e-02f, -2.512718203e-02f, -2.515168137e-02f, -2.517613488e-02f, -2.520054253e-02f, -2.522490428e-02f, -2.524922010e-02f,
--2.527348994e-02f, -2.529771377e-02f, -2.532189155e-02f, -2.534602325e-02f, -2.537010882e-02f, -2.539414823e-02f, -2.541814145e-02f, -2.544208843e-02f, -2.546598914e-02f, -2.548984354e-02f,
--2.551365160e-02f, -2.553741328e-02f, -2.556112854e-02f, -2.558479734e-02f, -2.560841966e-02f, -2.563199545e-02f, -2.565552468e-02f, -2.567900730e-02f, -2.570244330e-02f, -2.572583262e-02f,
--2.574917524e-02f, -2.577247111e-02f, -2.579572021e-02f, -2.581892250e-02f, -2.584207793e-02f, -2.586518648e-02f, -2.588824812e-02f, -2.591126279e-02f, -2.593423048e-02f, -2.595715114e-02f,
--2.598002475e-02f, -2.600285125e-02f, -2.602563063e-02f, -2.604836285e-02f, -2.607104786e-02f, -2.609368564e-02f, -2.611627616e-02f, -2.613881937e-02f, -2.616131524e-02f, -2.618376375e-02f,
--2.620616485e-02f, -2.622851851e-02f, -2.625082469e-02f, -2.627308337e-02f, -2.629529451e-02f, -2.631745808e-02f, -2.633957403e-02f, -2.636164235e-02f, -2.638366299e-02f, -2.640563592e-02f,
--2.642756111e-02f, -2.644943853e-02f, -2.647126813e-02f, -2.649304990e-02f, -2.651478379e-02f, -2.653646978e-02f, -2.655810782e-02f, -2.657969789e-02f, -2.660123996e-02f, -2.662273399e-02f,
--2.664417995e-02f, -2.666557781e-02f, -2.668692754e-02f, -2.670822910e-02f, -2.672948245e-02f, -2.675068758e-02f, -2.677184445e-02f, -2.679295302e-02f, -2.681401327e-02f, -2.683502515e-02f,
--2.685598865e-02f, -2.687690373e-02f, -2.689777035e-02f, -2.691858849e-02f, -2.693935812e-02f, -2.696007920e-02f, -2.698075171e-02f, -2.700137560e-02f, -2.702195086e-02f, -2.704247745e-02f,
--2.706295533e-02f, -2.708338449e-02f, -2.710376488e-02f, -2.712409648e-02f, -2.714437926e-02f, -2.716461319e-02f, -2.718479824e-02f, -2.720493437e-02f, -2.722502156e-02f, -2.724505978e-02f,
--2.726504899e-02f, -2.728498917e-02f, -2.730488029e-02f, -2.732472232e-02f, -2.734451523e-02f, -2.736425898e-02f, -2.738395356e-02f, -2.740359893e-02f, -2.742319506e-02f, -2.744274192e-02f,
--2.746223949e-02f, -2.748168773e-02f, -2.750108661e-02f, -2.752043612e-02f, -2.753973621e-02f, -2.755898687e-02f, -2.757818805e-02f, -2.759733974e-02f, -2.761644191e-02f, -2.763549452e-02f,
--2.765449755e-02f, -2.767345098e-02f, -2.769235476e-02f, -2.771120888e-02f, -2.773001331e-02f, -2.774876802e-02f, -2.776747298e-02f, -2.778612817e-02f, -2.780473355e-02f, -2.782328911e-02f,
--2.784179480e-02f, -2.786025062e-02f, -2.787865652e-02f, -2.789701248e-02f, -2.791531848e-02f, -2.793357449e-02f, -2.795178048e-02f, -2.796993642e-02f, -2.798804230e-02f, -2.800609807e-02f,
--2.802410373e-02f, -2.804205923e-02f, -2.805996455e-02f, -2.807781967e-02f, -2.809562457e-02f, -2.811337921e-02f, -2.813108357e-02f, -2.814873762e-02f, -2.816634134e-02f, -2.818389471e-02f,
--2.820139769e-02f, -2.821885027e-02f, -2.823625241e-02f, -2.825360410e-02f, -2.827090530e-02f, -2.828815599e-02f, -2.830535615e-02f, -2.832250575e-02f, -2.833960478e-02f, -2.835665319e-02f,
--2.837365097e-02f, -2.839059809e-02f, -2.840749454e-02f, -2.842434028e-02f, -2.844113529e-02f, -2.845787955e-02f, -2.847457303e-02f, -2.849121571e-02f, -2.850780757e-02f, -2.852434857e-02f,
--2.854083871e-02f, -2.855727795e-02f, -2.857366627e-02f, -2.859000364e-02f, -2.860629006e-02f, -2.862252548e-02f, -2.863870989e-02f, -2.865484327e-02f, -2.867092559e-02f, -2.868695682e-02f,
--2.870293696e-02f, -2.871886596e-02f, -2.873474382e-02f, -2.875057051e-02f, -2.876634600e-02f, -2.878207028e-02f, -2.879774332e-02f, -2.881336510e-02f, -2.882893560e-02f, -2.884445479e-02f,
--2.885992266e-02f, -2.887533918e-02f, -2.889070433e-02f, -2.890601809e-02f, -2.892128044e-02f, -2.893649135e-02f, -2.895165081e-02f, -2.896675879e-02f, -2.898181528e-02f, -2.899682024e-02f,
--2.901177367e-02f, -2.902667554e-02f, -2.904152582e-02f, -2.905632451e-02f, -2.907107157e-02f, -2.908576699e-02f, -2.910041075e-02f, -2.911500282e-02f, -2.912954319e-02f, -2.914403183e-02f,
--2.915846874e-02f, -2.917285388e-02f, -2.918718723e-02f, -2.920146878e-02f, -2.921569851e-02f, -2.922987640e-02f, -2.924400242e-02f, -2.925807657e-02f, -2.927209881e-02f, -2.928606913e-02f,
--2.929998752e-02f, -2.931385395e-02f, -2.932766839e-02f, -2.934143085e-02f, -2.935514129e-02f, -2.936879969e-02f, -2.938240605e-02f, -2.939596033e-02f, -2.940946253e-02f, -2.942291262e-02f,
--2.943631058e-02f, -2.944965641e-02f, -2.946295007e-02f, -2.947619155e-02f, -2.948938083e-02f, -2.950251790e-02f, -2.951560274e-02f, -2.952863533e-02f, -2.954161565e-02f, -2.955454368e-02f,
--2.956741941e-02f, -2.958024283e-02f, -2.959301391e-02f, -2.960573263e-02f, -2.961839899e-02f, -2.963101295e-02f, -2.964357452e-02f, -2.965608366e-02f, -2.966854037e-02f, -2.968094462e-02f,
--2.969329640e-02f, -2.970559570e-02f, -2.971784250e-02f, -2.973003677e-02f, -2.974217851e-02f, -2.975426771e-02f, -2.976630433e-02f, -2.977828838e-02f, -2.979021982e-02f, -2.980209866e-02f,
--2.981392486e-02f, -2.982569842e-02f, -2.983741933e-02f, -2.984908756e-02f, -2.986070310e-02f, -2.987226593e-02f, -2.988377605e-02f, -2.989523343e-02f, -2.990663806e-02f, -2.991798993e-02f,
--2.992928902e-02f, -2.994053532e-02f, -2.995172882e-02f, -2.996286949e-02f, -2.997395733e-02f, -2.998499231e-02f, -2.999597444e-02f, -3.000690369e-02f, -3.001778005e-02f, -3.002860350e-02f,
--3.003937403e-02f, -3.005009164e-02f, -3.006075630e-02f, -3.007136800e-02f, -3.008192673e-02f, -3.009243247e-02f, -3.010288522e-02f, -3.011328495e-02f, -3.012363167e-02f, -3.013392534e-02f,
--3.014416597e-02f, -3.015435353e-02f, -3.016448803e-02f, -3.017456943e-02f, -3.018459774e-02f, -3.019457293e-02f, -3.020449500e-02f, -3.021436394e-02f, -3.022417973e-02f, -3.023394236e-02f,
--3.024365182e-02f, -3.025330810e-02f, -3.026291118e-02f, -3.027246106e-02f, -3.028195772e-02f, -3.029140116e-02f, -3.030079135e-02f, -3.031012830e-02f, -3.031941198e-02f, -3.032864239e-02f,
--3.033781951e-02f, -3.034694335e-02f, -3.035601388e-02f, -3.036503109e-02f, -3.037399498e-02f, -3.038290553e-02f, -3.039176274e-02f, -3.040056658e-02f, -3.040931707e-02f, -3.041801417e-02f,
--3.042665789e-02f, -3.043524822e-02f, -3.044378514e-02f, -3.045226864e-02f, -3.046069872e-02f, -3.046907536e-02f, -3.047739856e-02f, -3.048566830e-02f, -3.049388459e-02f, -3.050204740e-02f,
--3.051015673e-02f, -3.051821258e-02f, -3.052621492e-02f, -3.053416376e-02f, -3.054205908e-02f, -3.054990088e-02f, -3.055768915e-02f, -3.056542388e-02f, -3.057310506e-02f, -3.058073268e-02f,
--3.058830673e-02f, -3.059582722e-02f, -3.060329412e-02f, -3.061070743e-02f, -3.061806715e-02f, -3.062537327e-02f, -3.063262577e-02f, -3.063982466e-02f, -3.064696992e-02f, -3.065406154e-02f,
--3.066109953e-02f, -3.066808387e-02f, -3.067501455e-02f, -3.068189157e-02f, -3.068871493e-02f, -3.069548461e-02f, -3.070220061e-02f, -3.070886292e-02f, -3.071547154e-02f, -3.072202646e-02f,
--3.072852767e-02f, -3.073497517e-02f, -3.074136895e-02f, -3.074770901e-02f, -3.075399534e-02f, -3.076022793e-02f, -3.076640678e-02f, -3.077253189e-02f, -3.077860324e-02f, -3.078462083e-02f,
--3.079058466e-02f, -3.079649472e-02f, -3.080235101e-02f, -3.080815352e-02f, -3.081390225e-02f, -3.081959719e-02f, -3.082523834e-02f, -3.083082569e-02f, -3.083635923e-02f, -3.084183898e-02f,
--3.084726491e-02f, -3.085263703e-02f, -3.085795532e-02f, -3.086321980e-02f, -3.086843045e-02f, -3.087358727e-02f, -3.087869025e-02f, -3.088373939e-02f, -3.088873470e-02f, -3.089367616e-02f,
--3.089856377e-02f, -3.090339753e-02f, -3.090817743e-02f, -3.091290347e-02f, -3.091757566e-02f, -3.092219398e-02f, -3.092675843e-02f, -3.093126901e-02f, -3.093572572e-02f, -3.094012856e-02f,
--3.094447752e-02f, -3.094877259e-02f, -3.095301379e-02f, -3.095720110e-02f, -3.096133453e-02f, -3.096541406e-02f, -3.096943971e-02f, -3.097341147e-02f, -3.097732933e-02f, -3.098119329e-02f,
--3.098500336e-02f, -3.098875953e-02f, -3.099246180e-02f, -3.099611017e-02f, -3.099970464e-02f, -3.100324520e-02f, -3.100673186e-02f, -3.101016462e-02f, -3.101354347e-02f, -3.101686841e-02f,
--3.102013945e-02f, -3.102335657e-02f, -3.102651979e-02f, -3.102962910e-02f, -3.103268451e-02f, -3.103568600e-02f, -3.103863358e-02f, -3.104152726e-02f, -3.104436702e-02f, -3.104715288e-02f,
--3.104988483e-02f, -3.105256287e-02f, -3.105518701e-02f, -3.105775724e-02f, -3.106027356e-02f, -3.106273598e-02f, -3.106514449e-02f, -3.106749910e-02f, -3.106979981e-02f, -3.107204661e-02f,
--3.107423952e-02f, -3.107637853e-02f, -3.107846364e-02f, -3.108049485e-02f, -3.108247217e-02f, -3.108439560e-02f, -3.108626514e-02f, -3.108808079e-02f, -3.108984255e-02f, -3.109155043e-02f,
--3.109320442e-02f, -3.109480454e-02f, -3.109635078e-02f, -3.109784314e-02f, -3.109928163e-02f, -3.110066625e-02f, -3.110199700e-02f, -3.110327389e-02f, -3.110449692e-02f, -3.110566608e-02f,
--3.110678140e-02f, -3.110784286e-02f, -3.110885047e-02f, -3.110980423e-02f, -3.111070416e-02f, -3.111155024e-02f, -3.111234249e-02f, -3.111308091e-02f, -3.111376550e-02f, -3.111439626e-02f,
--3.111497321e-02f, -3.111549634e-02f, -3.111596566e-02f, -3.111638118e-02f, -3.111674289e-02f, -3.111705080e-02f, -3.111730492e-02f, -3.111750525e-02f, -3.111765180e-02f, -3.111774457e-02f,
--3.111778356e-02f, -3.111776879e-02f, -3.111770025e-02f, -3.111757795e-02f, -3.111740190e-02f, -3.111717210e-02f, -3.111688856e-02f, -3.111655128e-02f, -3.111616026e-02f, -3.111571553e-02f,
--3.111521707e-02f, -3.111466490e-02f, -3.111405902e-02f, -3.111339944e-02f, -3.111268617e-02f, -3.111191920e-02f, -3.111109856e-02f, -3.111022423e-02f, -3.110929624e-02f, -3.110831459e-02f,
--3.110727927e-02f, -3.110619031e-02f, -3.110504771e-02f, -3.110385147e-02f, -3.110260160e-02f, -3.110129812e-02f, -3.109994102e-02f, -3.109853031e-02f, -3.109706600e-02f, -3.109554811e-02f,
--3.109397663e-02f, -3.109235157e-02f, -3.109067295e-02f, -3.108894077e-02f, -3.108715503e-02f, -3.108531576e-02f, -3.108342294e-02f, -3.108147660e-02f, -3.107947675e-02f, -3.107742338e-02f,
--3.107531651e-02f, -3.107315615e-02f, -3.107094230e-02f, -3.106867498e-02f, -3.106635419e-02f, -3.106397995e-02f, -3.106155226e-02f, -3.105907113e-02f, -3.105653657e-02f, -3.105394859e-02f,
--3.105130720e-02f, -3.104861241e-02f, -3.104586423e-02f, -3.104306267e-02f, -3.104020774e-02f, -3.103729944e-02f, -3.103433780e-02f, -3.103132281e-02f, -3.102825450e-02f, -3.102513286e-02f,
--3.102195791e-02f, -3.101872966e-02f, -3.101544813e-02f, -3.101211331e-02f, -3.100872523e-02f, -3.100528389e-02f, -3.100178931e-02f, -3.099824149e-02f, -3.099464045e-02f, -3.099098620e-02f,
--3.098727874e-02f, -3.098351810e-02f, -3.097970428e-02f, -3.097583729e-02f, -3.097191715e-02f, -3.096794387e-02f, -3.096391745e-02f, -3.095983792e-02f, -3.095570527e-02f, -3.095151954e-02f,
--3.094728072e-02f, -3.094298883e-02f, -3.093864389e-02f, -3.093424589e-02f, -3.092979487e-02f, -3.092529083e-02f, -3.092073378e-02f, -3.091612373e-02f, -3.091146071e-02f, -3.090674471e-02f,
--3.090197576e-02f, -3.089715387e-02f, -3.089227905e-02f, -3.088735131e-02f, -3.088237068e-02f, -3.087733715e-02f, -3.087225075e-02f, -3.086711149e-02f, -3.086191939e-02f, -3.085667445e-02f,
--3.085137669e-02f, -3.084602613e-02f, -3.084062277e-02f, -3.083516664e-02f, -3.082965775e-02f, -3.082409611e-02f, -3.081848174e-02f, -3.081281465e-02f, -3.080709486e-02f, -3.080132238e-02f,
--3.079549722e-02f, -3.078961941e-02f, -3.078368896e-02f, -3.077770587e-02f, -3.077167017e-02f, -3.076558188e-02f, -3.075944100e-02f, -3.075324756e-02f, -3.074700156e-02f, -3.074070304e-02f,
--3.073435199e-02f, -3.072794843e-02f, -3.072149240e-02f, -3.071498388e-02f, -3.070842292e-02f, -3.070180951e-02f, -3.069514369e-02f, -3.068842545e-02f, -3.068165483e-02f, -3.067483184e-02f,
--3.066795648e-02f, -3.066102879e-02f, -3.065404878e-02f, -3.064701646e-02f, -3.063993185e-02f, -3.063279497e-02f, -3.062560584e-02f, -3.061836447e-02f, -3.061107088e-02f, -3.060372509e-02f,
--3.059632711e-02f, -3.058887697e-02f, -3.058137468e-02f, -3.057382026e-02f, -3.056621372e-02f, -3.055855509e-02f, -3.055084439e-02f, -3.054308162e-02f, -3.053526681e-02f, -3.052739999e-02f,
--3.051948116e-02f, -3.051151034e-02f, -3.050348756e-02f, -3.049541283e-02f, -3.048728617e-02f, -3.047910760e-02f, -3.047087714e-02f, -3.046259481e-02f, -3.045426062e-02f, -3.044587461e-02f,
--3.043743678e-02f, -3.042894715e-02f, -3.042040575e-02f, -3.041181259e-02f, -3.040316770e-02f, -3.039447109e-02f, -3.038572279e-02f, -3.037692281e-02f, -3.036807117e-02f, -3.035916790e-02f,
--3.035021301e-02f, -3.034120653e-02f, -3.033214847e-02f, -3.032303886e-02f, -3.031387771e-02f, -3.030466505e-02f, -3.029540090e-02f, -3.028608528e-02f, -3.027671820e-02f, -3.026729969e-02f,
--3.025782978e-02f, -3.024830848e-02f, -3.023873581e-02f, -3.022911180e-02f, -3.021943646e-02f, -3.020970982e-02f, -3.019993190e-02f, -3.019010273e-02f, -3.018022231e-02f, -3.017029068e-02f,
--3.016030786e-02f, -3.015027387e-02f, -3.014018872e-02f, -3.013005245e-02f, -3.011986508e-02f, -3.010962662e-02f, -3.009933711e-02f, -3.008899655e-02f, -3.007860498e-02f, -3.006816242e-02f,
--3.005766890e-02f, -3.004712442e-02f, -3.003652902e-02f, -3.002588273e-02f, -3.001518555e-02f, -3.000443752e-02f, -2.999363866e-02f, -2.998278900e-02f, -2.997188855e-02f, -2.996093734e-02f,
--2.994993540e-02f, -2.993888274e-02f, -2.992777939e-02f, -2.991662538e-02f, -2.990542073e-02f, -2.989416546e-02f, -2.988285960e-02f, -2.987150317e-02f, -2.986009620e-02f, -2.984863871e-02f,
--2.983713072e-02f, -2.982557226e-02f, -2.981396336e-02f, -2.980230403e-02f, -2.979059431e-02f, -2.977883422e-02f, -2.976702379e-02f, -2.975516303e-02f, -2.974325197e-02f, -2.973129065e-02f,
--2.971927908e-02f, -2.970721729e-02f, -2.969510530e-02f, -2.968294315e-02f, -2.967073086e-02f, -2.965846844e-02f, -2.964615594e-02f, -2.963379337e-02f, -2.962138076e-02f, -2.960891814e-02f,
--2.959640553e-02f, -2.958384296e-02f, -2.957123045e-02f, -2.955856804e-02f, -2.954585575e-02f, -2.953309360e-02f, -2.952028162e-02f, -2.950741984e-02f, -2.949450829e-02f, -2.948154699e-02f,
--2.946853597e-02f, -2.945547525e-02f, -2.944236487e-02f, -2.942920485e-02f, -2.941599522e-02f, -2.940273601e-02f, -2.938942723e-02f, -2.937606893e-02f, -2.936266113e-02f, -2.934920385e-02f,
--2.933569713e-02f, -2.932214099e-02f, -2.930853546e-02f, -2.929488057e-02f, -2.928117634e-02f, -2.926742281e-02f, -2.925362000e-02f, -2.923976795e-02f, -2.922586667e-02f, -2.921191620e-02f,
--2.919791657e-02f, -2.918386781e-02f, -2.916976994e-02f, -2.915562299e-02f, -2.914142700e-02f, -2.912718199e-02f, -2.911288798e-02f, -2.909854502e-02f, -2.908415313e-02f, -2.906971234e-02f,
--2.905522268e-02f, -2.904068417e-02f, -2.902609686e-02f, -2.901146076e-02f, -2.899677590e-02f, -2.898204233e-02f, -2.896726006e-02f, -2.895242913e-02f, -2.893754957e-02f, -2.892262140e-02f,
--2.890764466e-02f, -2.889261938e-02f, -2.887754559e-02f, -2.886242332e-02f, -2.884725259e-02f, -2.883203345e-02f, -2.881676592e-02f, -2.880145003e-02f, -2.878608582e-02f, -2.877067331e-02f,
--2.875521253e-02f, -2.873970352e-02f, -2.872414631e-02f, -2.870854093e-02f, -2.869288740e-02f, -2.867718577e-02f, -2.866143607e-02f, -2.864563832e-02f, -2.862979255e-02f, -2.861389881e-02f,
--2.859795711e-02f, -2.858196750e-02f, -2.856593000e-02f, -2.854984465e-02f, -2.853371148e-02f, -2.851753052e-02f, -2.850130181e-02f, -2.848502537e-02f, -2.846870124e-02f, -2.845232945e-02f,
--2.843591003e-02f, -2.841944302e-02f, -2.840292846e-02f, -2.838636636e-02f, -2.836975677e-02f, -2.835309972e-02f, -2.833639524e-02f, -2.831964336e-02f, -2.830284413e-02f, -2.828599757e-02f,
--2.826910371e-02f, -2.825216259e-02f, -2.823517424e-02f, -2.821813870e-02f, -2.820105600e-02f, -2.818392618e-02f, -2.816674926e-02f, -2.814952528e-02f, -2.813225428e-02f, -2.811493629e-02f,
--2.809757135e-02f, -2.808015948e-02f, -2.806270073e-02f, -2.804519512e-02f, -2.802764270e-02f, -2.801004349e-02f, -2.799239754e-02f, -2.797470487e-02f, -2.795696553e-02f, -2.793917954e-02f,
--2.792134694e-02f, -2.790346777e-02f, -2.788554206e-02f, -2.786756985e-02f, -2.784955116e-02f, -2.783148605e-02f, -2.781337454e-02f, -2.779521667e-02f, -2.777701248e-02f, -2.775876199e-02f,
--2.774046525e-02f, -2.772212229e-02f, -2.770373315e-02f, -2.768529787e-02f, -2.766681647e-02f, -2.764828900e-02f, -2.762971549e-02f, -2.761109598e-02f, -2.759243051e-02f, -2.757371911e-02f,
--2.755496181e-02f, -2.753615866e-02f, -2.751730970e-02f, -2.749841495e-02f, -2.747947445e-02f, -2.746048825e-02f, -2.744145638e-02f, -2.742237887e-02f, -2.740325577e-02f, -2.738408710e-02f,
--2.736487292e-02f, -2.734561325e-02f, -2.732630813e-02f, -2.730695761e-02f, -2.728756171e-02f, -2.726812048e-02f, -2.724863395e-02f, -2.722910216e-02f, -2.720952515e-02f, -2.718990296e-02f,
--2.717023563e-02f, -2.715052318e-02f, -2.713076567e-02f, -2.711096313e-02f, -2.709111560e-02f, -2.707122311e-02f, -2.705128571e-02f, -2.703130343e-02f, -2.701127631e-02f, -2.699120440e-02f,
--2.697108772e-02f, -2.695092633e-02f, -2.693072025e-02f, -2.691046953e-02f, -2.689017420e-02f, -2.686983431e-02f, -2.684944990e-02f, -2.682902099e-02f, -2.680854764e-02f, -2.678802988e-02f,
--2.676746776e-02f, -2.674686130e-02f, -2.672621056e-02f, -2.670551557e-02f, -2.668477636e-02f, -2.666399299e-02f, -2.664316549e-02f, -2.662229390e-02f, -2.660137826e-02f, -2.658041861e-02f,
--2.655941499e-02f, -2.653836745e-02f, -2.651727601e-02f, -2.649614073e-02f, -2.647496164e-02f, -2.645373879e-02f, -2.643247220e-02f, -2.641116194e-02f, -2.638980803e-02f, -2.636841051e-02f,
--2.634696943e-02f, -2.632548484e-02f, -2.630395676e-02f, -2.628238524e-02f, -2.626077032e-02f, -2.623911205e-02f, -2.621741046e-02f, -2.619566560e-02f, -2.617387751e-02f, -2.615204623e-02f,
--2.613017179e-02f, -2.610825425e-02f, -2.608629365e-02f, -2.606429002e-02f, -2.604224341e-02f, -2.602015386e-02f, -2.599802141e-02f, -2.597584611e-02f, -2.595362800e-02f, -2.593136711e-02f,
--2.590906350e-02f, -2.588671720e-02f, -2.586432825e-02f, -2.584189671e-02f, -2.581942261e-02f, -2.579690599e-02f, -2.577434690e-02f, -2.575174538e-02f, -2.572910148e-02f, -2.570641523e-02f,
--2.568368668e-02f, -2.566091587e-02f, -2.563810285e-02f, -2.561524765e-02f, -2.559235033e-02f, -2.556941092e-02f, -2.554642948e-02f, -2.552340603e-02f, -2.550034064e-02f, -2.547723333e-02f,
--2.545408416e-02f, -2.543089316e-02f, -2.540766038e-02f, -2.538438588e-02f, -2.536106968e-02f, -2.533771183e-02f, -2.531431238e-02f, -2.529087137e-02f, -2.526738885e-02f, -2.524386486e-02f,
--2.522029945e-02f, -2.519669265e-02f, -2.517304452e-02f, -2.514935510e-02f, -2.512562443e-02f, -2.510185256e-02f, -2.507803953e-02f, -2.505418539e-02f, -2.503029018e-02f, -2.500635395e-02f,
--2.498237674e-02f, -2.495835860e-02f, -2.493429958e-02f, -2.491019971e-02f, -2.488605905e-02f, -2.486187763e-02f, -2.483765551e-02f, -2.481339274e-02f, -2.478908934e-02f, -2.476474538e-02f,
--2.474036090e-02f, -2.471593594e-02f, -2.469147055e-02f, -2.466696478e-02f, -2.464241866e-02f, -2.461783226e-02f, -2.459320560e-02f, -2.456853875e-02f, -2.454383174e-02f, -2.451908463e-02f,
--2.449429745e-02f, -2.446947026e-02f, -2.444460310e-02f, -2.441969602e-02f, -2.439474906e-02f, -2.436976227e-02f, -2.434473571e-02f, -2.431966941e-02f, -2.429456342e-02f, -2.426941779e-02f,
--2.424423256e-02f, -2.421900779e-02f, -2.419374352e-02f, -2.416843980e-02f, -2.414309667e-02f, -2.411771419e-02f, -2.409229240e-02f, -2.406683134e-02f, -2.404133107e-02f, -2.401579163e-02f,
--2.399021307e-02f, -2.396459544e-02f, -2.393893878e-02f, -2.391324315e-02f, -2.388750859e-02f, -2.386173515e-02f, -2.383592288e-02f, -2.381007182e-02f, -2.378418202e-02f, -2.375825354e-02f,
--2.373228642e-02f, -2.370628071e-02f, -2.368023646e-02f, -2.365415371e-02f, -2.362803251e-02f, -2.360187292e-02f, -2.357567498e-02f, -2.354943874e-02f, -2.352316425e-02f, -2.349685156e-02f,
--2.347050072e-02f, -2.344411177e-02f, -2.341768476e-02f, -2.339121975e-02f, -2.336471679e-02f, -2.333817591e-02f, -2.331159718e-02f, -2.328498064e-02f, -2.325832634e-02f, -2.323163433e-02f,
--2.320490466e-02f, -2.317813738e-02f, -2.315133253e-02f, -2.312449018e-02f, -2.309761036e-02f, -2.307069313e-02f, -2.304373854e-02f, -2.301674664e-02f, -2.298971748e-02f, -2.296265110e-02f,
--2.293554756e-02f, -2.290840691e-02f, -2.288122920e-02f, -2.285401448e-02f, -2.282676280e-02f, -2.279947420e-02f, -2.277214875e-02f, -2.274478649e-02f, -2.271738747e-02f, -2.268995174e-02f,
--2.266247935e-02f, -2.263497036e-02f, -2.260742481e-02f, -2.257984276e-02f, -2.255222425e-02f, -2.252456934e-02f, -2.249687808e-02f, -2.246915051e-02f, -2.244138670e-02f, -2.241358669e-02f,
--2.238575053e-02f, -2.235787828e-02f, -2.232996998e-02f, -2.230202570e-02f, -2.227404546e-02f, -2.224602934e-02f, -2.221797739e-02f, -2.218988964e-02f, -2.216176616e-02f, -2.213360700e-02f,
--2.210541221e-02f, -2.207718184e-02f, -2.204891594e-02f, -2.202061456e-02f, -2.199227777e-02f, -2.196390560e-02f, -2.193549812e-02f, -2.190705537e-02f, -2.187857740e-02f, -2.185006427e-02f,
--2.182151604e-02f, -2.179293275e-02f, -2.176431445e-02f, -2.173566120e-02f, -2.170697306e-02f, -2.167825006e-02f, -2.164949228e-02f, -2.162069975e-02f, -2.159187254e-02f, -2.156301069e-02f,
--2.153411426e-02f, -2.150518330e-02f, -2.147621787e-02f, -2.144721801e-02f, -2.141818378e-02f, -2.138911524e-02f, -2.136001243e-02f, -2.133087542e-02f, -2.130170425e-02f, -2.127249898e-02f,
--2.124325966e-02f, -2.121398634e-02f, -2.118467908e-02f, -2.115533793e-02f, -2.112596295e-02f, -2.109655419e-02f, -2.106711170e-02f, -2.103763554e-02f, -2.100812576e-02f, -2.097858242e-02f,
--2.094900556e-02f, -2.091939525e-02f, -2.088975154e-02f, -2.086007447e-02f, -2.083036412e-02f, -2.080062052e-02f, -2.077084374e-02f, -2.074103382e-02f, -2.071119083e-02f, -2.068131482e-02f,
--2.065140584e-02f, -2.062146395e-02f, -2.059148920e-02f, -2.056148165e-02f, -2.053144135e-02f, -2.050136835e-02f, -2.047126272e-02f, -2.044112450e-02f, -2.041095376e-02f, -2.038075054e-02f,
--2.035051490e-02f, -2.032024689e-02f, -2.028994658e-02f, -2.025961402e-02f, -2.022924926e-02f, -2.019885235e-02f, -2.016842336e-02f, -2.013796234e-02f, -2.010746934e-02f, -2.007694441e-02f,
--2.004638763e-02f, -2.001579903e-02f, -1.998517868e-02f, -1.995452664e-02f, -1.992384295e-02f, -1.989312767e-02f, -1.986238087e-02f, -1.983160259e-02f, -1.980079289e-02f, -1.976995182e-02f,
--1.973907946e-02f, -1.970817584e-02f, -1.967724102e-02f, -1.964627507e-02f, -1.961527804e-02f, -1.958424998e-02f, -1.955319096e-02f, -1.952210102e-02f, -1.949098022e-02f, -1.945982863e-02f,
--1.942864629e-02f, -1.939743327e-02f, -1.936618961e-02f, -1.933491538e-02f, -1.930361064e-02f, -1.927227544e-02f, -1.924090983e-02f, -1.920951388e-02f, -1.917808764e-02f, -1.914663117e-02f,
--1.911514453e-02f, -1.908362776e-02f, -1.905208094e-02f, -1.902050411e-02f, -1.898889734e-02f, -1.895726068e-02f, -1.892559418e-02f, -1.889389792e-02f, -1.886217193e-02f, -1.883041629e-02f,
--1.879863104e-02f, -1.876681625e-02f, -1.873497198e-02f, -1.870309827e-02f, -1.867119519e-02f, -1.863926280e-02f, -1.860730116e-02f, -1.857531031e-02f, -1.854329033e-02f, -1.851124126e-02f,
--1.847916317e-02f, -1.844705612e-02f, -1.841492015e-02f, -1.838275534e-02f, -1.835056173e-02f, -1.831833939e-02f, -1.828608837e-02f, -1.825380874e-02f, -1.822150054e-02f, -1.818916385e-02f,
--1.815679871e-02f, -1.812440519e-02f, -1.809198335e-02f, -1.805953324e-02f, -1.802705492e-02f, -1.799454845e-02f, -1.796201389e-02f, -1.792945129e-02f, -1.789686073e-02f, -1.786424224e-02f,
--1.783159591e-02f, -1.779892177e-02f, -1.776621990e-02f, -1.773349035e-02f, -1.770073318e-02f, -1.766794844e-02f, -1.763513621e-02f, -1.760229653e-02f, -1.756942946e-02f, -1.753653508e-02f,
--1.750361342e-02f, -1.747066457e-02f, -1.743768856e-02f, -1.740468547e-02f, -1.737165535e-02f, -1.733859826e-02f, -1.730551426e-02f, -1.727240341e-02f, -1.723926577e-02f, -1.720610140e-02f,
--1.717291037e-02f, -1.713969272e-02f, -1.710644851e-02f, -1.707317782e-02f, -1.703988070e-02f, -1.700655720e-02f, -1.697320739e-02f, -1.693983133e-02f, -1.690642908e-02f, -1.687300070e-02f,
--1.683954624e-02f, -1.680606577e-02f, -1.677255936e-02f, -1.673902704e-02f, -1.670546890e-02f, -1.667188499e-02f, -1.663827537e-02f, -1.660464009e-02f, -1.657097923e-02f, -1.653729283e-02f,
--1.650358097e-02f, -1.646984370e-02f, -1.643608108e-02f, -1.640229317e-02f, -1.636848003e-02f, -1.633464173e-02f, -1.630077833e-02f, -1.626688987e-02f, -1.623297644e-02f, -1.619903808e-02f,
--1.616507485e-02f, -1.613108683e-02f, -1.609707406e-02f, -1.606303662e-02f, -1.602897455e-02f, -1.599488793e-02f, -1.596077681e-02f, -1.592664126e-02f, -1.589248133e-02f, -1.585829708e-02f,
--1.582408859e-02f, -1.578985590e-02f, -1.575559908e-02f, -1.572131819e-02f, -1.568701330e-02f, -1.565268446e-02f, -1.561833174e-02f, -1.558395519e-02f, -1.554955488e-02f, -1.551513087e-02f,
--1.548068323e-02f, -1.544621200e-02f, -1.541171726e-02f, -1.537719907e-02f, -1.534265748e-02f, -1.530809257e-02f, -1.527350438e-02f, -1.523889299e-02f, -1.520425845e-02f, -1.516960083e-02f,
--1.513492019e-02f, -1.510021659e-02f, -1.506549010e-02f, -1.503074076e-02f, -1.499596866e-02f, -1.496117384e-02f, -1.492635637e-02f, -1.489151632e-02f, -1.485665374e-02f, -1.482176870e-02f,
--1.478686126e-02f, -1.475193148e-02f, -1.471697942e-02f, -1.468200515e-02f, -1.464700873e-02f, -1.461199022e-02f, -1.457694969e-02f, -1.454188719e-02f, -1.450680278e-02f, -1.447169654e-02f,
--1.443656853e-02f, -1.440141880e-02f, -1.436624741e-02f, -1.433105444e-02f, -1.429583995e-02f, -1.426060399e-02f, -1.422534663e-02f, -1.419006793e-02f, -1.415476796e-02f, -1.411944677e-02f,
--1.408410444e-02f, -1.404874102e-02f, -1.401335657e-02f, -1.397795117e-02f, -1.394252487e-02f, -1.390707773e-02f, -1.387160982e-02f, -1.383612120e-02f, -1.380061194e-02f, -1.376508210e-02f,
--1.372953174e-02f, -1.369396092e-02f, -1.365836971e-02f, -1.362275817e-02f, -1.358712636e-02f, -1.355147435e-02f, -1.351580220e-02f, -1.348010998e-02f, -1.344439774e-02f, -1.340866556e-02f,
--1.337291349e-02f, -1.333714159e-02f, -1.330134994e-02f, -1.326553859e-02f, -1.322970761e-02f, -1.319385706e-02f, -1.315798701e-02f, -1.312209752e-02f, -1.308618865e-02f, -1.305026047e-02f,
--1.301431303e-02f, -1.297834641e-02f, -1.294236067e-02f, -1.290635587e-02f, -1.287033208e-02f, -1.283428936e-02f, -1.279822776e-02f, -1.276214737e-02f, -1.272604824e-02f, -1.268993043e-02f,
--1.265379401e-02f, -1.261763905e-02f, -1.258146560e-02f, -1.254527373e-02f, -1.250906351e-02f, -1.247283500e-02f, -1.243658826e-02f, -1.240032336e-02f, -1.236404036e-02f, -1.232773933e-02f,
--1.229142033e-02f, -1.225508342e-02f, -1.221872868e-02f, -1.218235615e-02f, -1.214596592e-02f, -1.210955803e-02f, -1.207313256e-02f, -1.203668958e-02f, -1.200022914e-02f, -1.196375131e-02f,
--1.192725615e-02f, -1.189074373e-02f, -1.185421412e-02f, -1.181766737e-02f, -1.178110356e-02f, -1.174452275e-02f, -1.170792499e-02f, -1.167131036e-02f, -1.163467893e-02f, -1.159803075e-02f,
--1.156136589e-02f, -1.152468442e-02f, -1.148798639e-02f, -1.145127189e-02f, -1.141454096e-02f, -1.137779368e-02f, -1.134103010e-02f, -1.130425030e-02f, -1.126745434e-02f, -1.123064229e-02f,
--1.119381420e-02f, -1.115697015e-02f, -1.112011020e-02f, -1.108323441e-02f, -1.104634285e-02f, -1.100943559e-02f, -1.097251269e-02f, -1.093557421e-02f, -1.089862022e-02f, -1.086165078e-02f,
--1.082466597e-02f, -1.078766584e-02f, -1.075065046e-02f, -1.071361990e-02f, -1.067657422e-02f, -1.063951348e-02f, -1.060243776e-02f, -1.056534711e-02f, -1.052824160e-02f, -1.049112131e-02f,
--1.045398628e-02f, -1.041683660e-02f, -1.037967231e-02f, -1.034249350e-02f, -1.030530022e-02f, -1.026809254e-02f, -1.023087053e-02f, -1.019363425e-02f, -1.015638376e-02f, -1.011911914e-02f,
--1.008184044e-02f, -1.004454774e-02f, -1.000724110e-02f, -9.969920579e-03f, -9.932586250e-03f, -9.895238177e-03f, -9.857876425e-03f, -9.820501060e-03f, -9.783112148e-03f, -9.745709755e-03f,
--9.708293946e-03f, -9.670864786e-03f, -9.633422343e-03f, -9.595966681e-03f, -9.558497866e-03f, -9.521015965e-03f, -9.483521042e-03f, -9.446013165e-03f, -9.408492398e-03f, -9.370958807e-03f,
--9.333412460e-03f, -9.295853420e-03f, -9.258281755e-03f, -9.220697531e-03f, -9.183100812e-03f, -9.145491666e-03f, -9.107870158e-03f, -9.070236355e-03f, -9.032590321e-03f, -8.994932124e-03f,
--8.957261830e-03f, -8.919579504e-03f, -8.881885212e-03f, -8.844179021e-03f, -8.806460997e-03f, -8.768731205e-03f, -8.730989713e-03f, -8.693236586e-03f, -8.655471890e-03f, -8.617695691e-03f,
--8.579908057e-03f, -8.542109052e-03f, -8.504298744e-03f, -8.466477198e-03f, -8.428644480e-03f, -8.390800658e-03f, -8.352945796e-03f, -8.315079962e-03f, -8.277203222e-03f, -8.239315642e-03f,
--8.201417289e-03f, -8.163508228e-03f, -8.125588527e-03f, -8.087658251e-03f, -8.049717466e-03f, -8.011766241e-03f, -7.973804639e-03f, -7.935832729e-03f, -7.897850577e-03f, -7.859858248e-03f,
--7.821855810e-03f, -7.783843328e-03f, -7.745820870e-03f, -7.707788502e-03f, -7.669746290e-03f, -7.631694301e-03f, -7.593632601e-03f, -7.555561257e-03f, -7.517480335e-03f, -7.479389903e-03f,
--7.441290026e-03f, -7.403180770e-03f, -7.365062204e-03f, -7.326934393e-03f, -7.288797404e-03f, -7.250651303e-03f, -7.212496157e-03f, -7.174332032e-03f, -7.136158997e-03f, -7.097977116e-03f,
--7.059786456e-03f, -7.021587085e-03f, -6.983379069e-03f, -6.945162475e-03f, -6.906937369e-03f, -6.868703817e-03f, -6.830461888e-03f, -6.792211647e-03f, -6.753953161e-03f, -6.715686497e-03f,
--6.677411722e-03f, -6.639128902e-03f, -6.600838104e-03f, -6.562539396e-03f, -6.524232842e-03f, -6.485918512e-03f, -6.447596470e-03f, -6.409266784e-03f, -6.370929522e-03f, -6.332584749e-03f,
--6.294232532e-03f, -6.255872939e-03f, -6.217506035e-03f, -6.179131889e-03f, -6.140750566e-03f, -6.102362134e-03f, -6.063966660e-03f, -6.025564209e-03f, -5.987154850e-03f, -5.948738649e-03f,
--5.910315673e-03f, -5.871885989e-03f, -5.833449663e-03f, -5.795006763e-03f, -5.756557355e-03f, -5.718101507e-03f, -5.679639285e-03f, -5.641170757e-03f, -5.602695988e-03f, -5.564215046e-03f,
--5.525727999e-03f, -5.487234912e-03f, -5.448735853e-03f, -5.410230889e-03f, -5.371720086e-03f, -5.333203512e-03f, -5.294681234e-03f, -5.256153318e-03f, -5.217619832e-03f, -5.179080842e-03f,
--5.140536416e-03f, -5.101986620e-03f, -5.063431522e-03f, -5.024871188e-03f, -4.986305685e-03f, -4.947735080e-03f, -4.909159441e-03f, -4.870578834e-03f, -4.831993326e-03f, -4.793402985e-03f,
--4.754807877e-03f, -4.716208069e-03f, -4.677603628e-03f, -4.638994621e-03f, -4.600381116e-03f, -4.561763179e-03f, -4.523140877e-03f, -4.484514277e-03f, -4.445883447e-03f, -4.407248453e-03f,
--4.368609362e-03f, -4.329966242e-03f, -4.291319158e-03f, -4.252668179e-03f, -4.214013371e-03f, -4.175354802e-03f, -4.136692538e-03f, -4.098026646e-03f, -4.059357194e-03f, -4.020684248e-03f,
--3.982007875e-03f, -3.943328143e-03f, -3.904645118e-03f, -3.865958867e-03f, -3.827269458e-03f, -3.788576958e-03f, -3.749881433e-03f, -3.711182950e-03f, -3.672481577e-03f, -3.633777380e-03f,
--3.595070426e-03f, -3.556360783e-03f, -3.517648518e-03f, -3.478933697e-03f, -3.440216388e-03f, -3.401496657e-03f, -3.362774571e-03f, -3.324050198e-03f, -3.285323604e-03f, -3.246594857e-03f,
--3.207864023e-03f, -3.169131170e-03f, -3.130396364e-03f, -3.091659673e-03f, -3.052921162e-03f, -3.014180900e-03f, -2.975438954e-03f, -2.936695390e-03f, -2.897950274e-03f, -2.859203675e-03f,
--2.820455660e-03f, -2.781706294e-03f, -2.742955645e-03f, -2.704203781e-03f, -2.665450767e-03f, -2.626696671e-03f, -2.587941560e-03f, -2.549185501e-03f, -2.510428560e-03f, -2.471670805e-03f,
--2.432912302e-03f, -2.394153119e-03f, -2.355393322e-03f, -2.316632978e-03f, -2.277872155e-03f, -2.239110918e-03f, -2.200349335e-03f, -2.161587473e-03f, -2.122825399e-03f, -2.084063179e-03f,
--2.045300880e-03f, -2.006538570e-03f, -1.967776315e-03f, -1.929014181e-03f, -1.890252237e-03f, -1.851490548e-03f, -1.812729181e-03f, -1.773968204e-03f, -1.735207682e-03f, -1.696447684e-03f,
--1.657688275e-03f, -1.618929522e-03f, -1.580171493e-03f, -1.541414254e-03f, -1.502657871e-03f, -1.463902412e-03f, -1.425147944e-03f, -1.386394532e-03f, -1.347642244e-03f, -1.308891146e-03f,
--1.270141306e-03f, -1.231392790e-03f, -1.192645664e-03f, -1.153899996e-03f, -1.115155851e-03f, -1.076413297e-03f, -1.037672401e-03f, -9.989332286e-04f, -9.601958469e-04f, -9.214603226e-04f,
--8.827267222e-04f, -8.439951123e-04f, -8.052655597e-04f, -7.665381308e-04f, -7.278128924e-04f, -6.890899109e-04f, -6.503692530e-04f, -6.116509852e-04f, -5.729351741e-04f, -5.342218863e-04f,
--4.955111882e-04f, -4.568031464e-04f, -4.180978274e-04f, -3.793952977e-04f, -3.406956238e-04f, -3.019988722e-04f, -2.633051094e-04f, -2.246144017e-04f, -1.859268158e-04f, -1.472424179e-04f,
--1.085612746e-04f, -6.988345225e-05f, -3.120901722e-05f, 7.461964059e-06f, 4.612942522e-05f, 8.479329990e-05f, 1.234535217e-04f, 1.621100244e-04f, 2.007627415e-04f, 2.394116069e-04f,
-2.780565540e-04f, 3.166975168e-04f, 3.553344288e-04f, 3.939672239e-04f, 4.325958357e-04f, 4.712201981e-04f, 5.098402448e-04f, 5.484559096e-04f, 5.870671263e-04f, 6.256738286e-04f,
-6.642759506e-04f, 7.028734259e-04f, 7.414661884e-04f, 7.800541720e-04f, 8.186373106e-04f, 8.572155381e-04f, 8.957887884e-04f, 9.343569954e-04f, 9.729200931e-04f, 1.011478015e-03f,
-1.050030696e-03f, 1.088578070e-03f, 1.127120070e-03f, 1.165656631e-03f, 1.204187686e-03f, 1.242713170e-03f, 1.281233017e-03f, 1.319747160e-03f, 1.358255535e-03f, 1.396758074e-03f,
-1.435254713e-03f, 1.473745385e-03f, 1.512230024e-03f, 1.550708565e-03f, 1.589180942e-03f, 1.627647089e-03f, 1.666106940e-03f, 1.704560429e-03f, 1.743007492e-03f, 1.781448061e-03f,
-1.819882072e-03f, 1.858309458e-03f, 1.896730154e-03f, 1.935144095e-03f, 1.973551214e-03f, 2.011951446e-03f, 2.050344726e-03f, 2.088730988e-03f, 2.127110165e-03f, 2.165482194e-03f,
-2.203847008e-03f, 2.242204541e-03f, 2.280554729e-03f, 2.318897505e-03f, 2.357232805e-03f, 2.395560563e-03f, 2.433880713e-03f, 2.472193190e-03f, 2.510497928e-03f, 2.548794863e-03f,
-2.587083929e-03f, 2.625365061e-03f, 2.663638192e-03f, 2.701903259e-03f, 2.740160196e-03f, 2.778408937e-03f, 2.816649417e-03f, 2.854881572e-03f, 2.893105335e-03f, 2.931320642e-03f,
-2.969527428e-03f, 3.007725627e-03f, 3.045915175e-03f, 3.084096006e-03f, 3.122268055e-03f, 3.160431257e-03f, 3.198585548e-03f, 3.236730862e-03f, 3.274867134e-03f, 3.312994299e-03f,
-3.351112293e-03f, 3.389221050e-03f, 3.427320505e-03f, 3.465410594e-03f, 3.503491252e-03f, 3.541562414e-03f, 3.579624015e-03f, 3.617675991e-03f, 3.655718276e-03f, 3.693750807e-03f,
-3.731773517e-03f, 3.769786343e-03f, 3.807789220e-03f, 3.845782083e-03f, 3.883764868e-03f, 3.921737509e-03f, 3.959699943e-03f, 3.997652106e-03f, 4.035593931e-03f, 4.073525355e-03f,
-4.111446314e-03f, 4.149356742e-03f, 4.187256576e-03f, 4.225145752e-03f, 4.263024204e-03f, 4.300891868e-03f, 4.338748680e-03f, 4.376594576e-03f, 4.414429491e-03f, 4.452253362e-03f,
-4.490066123e-03f, 4.527867712e-03f, 4.565658062e-03f, 4.603437112e-03f, 4.641204795e-03f, 4.678961048e-03f, 4.716705808e-03f, 4.754439010e-03f, 4.792160589e-03f, 4.829870483e-03f,
-4.867568626e-03f, 4.905254955e-03f, 4.942929407e-03f, 4.980591917e-03f, 5.018242421e-03f, 5.055880855e-03f, 5.093507156e-03f, 5.131121260e-03f, 5.168723103e-03f, 5.206312622e-03f,
-5.243889752e-03f, 5.281454430e-03f, 5.319006592e-03f, 5.356546174e-03f, 5.394073114e-03f, 5.431587347e-03f, 5.469088811e-03f, 5.506577440e-03f, 5.544053172e-03f, 5.581515944e-03f,
-5.618965692e-03f, 5.656402352e-03f, 5.693825861e-03f, 5.731236157e-03f, 5.768633174e-03f, 5.806016851e-03f, 5.843387124e-03f, 5.880743929e-03f, 5.918087204e-03f, 5.955416885e-03f,
-5.992732909e-03f, 6.030035214e-03f, 6.067323735e-03f, 6.104598410e-03f, 6.141859175e-03f, 6.179105969e-03f, 6.216338727e-03f, 6.253557387e-03f, 6.290761886e-03f, 6.327952161e-03f,
-6.365128150e-03f, 6.402289788e-03f, 6.439437015e-03f, 6.476569766e-03f, 6.513687979e-03f, 6.550791591e-03f, 6.587880540e-03f, 6.624954763e-03f, 6.662014198e-03f, 6.699058781e-03f,
-6.736088451e-03f, 6.773103145e-03f, 6.810102799e-03f, 6.847087353e-03f, 6.884056743e-03f, 6.921010907e-03f, 6.957949783e-03f, 6.994873308e-03f, 7.031781420e-03f, 7.068674057e-03f,
-7.105551156e-03f, 7.142412655e-03f, 7.179258493e-03f, 7.216088607e-03f, 7.252902935e-03f, 7.289701414e-03f, 7.326483984e-03f, 7.363250581e-03f, 7.400001144e-03f, 7.436735611e-03f,
-7.473453920e-03f, 7.510156009e-03f, 7.546841816e-03f, 7.583511280e-03f, 7.620164338e-03f, 7.656800930e-03f, 7.693420992e-03f, 7.730024465e-03f, 7.766611285e-03f, 7.803181392e-03f,
-7.839734723e-03f, 7.876271218e-03f, 7.912790814e-03f, 7.949293451e-03f, 7.985779067e-03f, 8.022247600e-03f, 8.058698989e-03f, 8.095133173e-03f, 8.131550090e-03f, 8.167949680e-03f,
-8.204331881e-03f, 8.240696632e-03f, 8.277043871e-03f, 8.313373538e-03f, 8.349685572e-03f, 8.385979911e-03f, 8.422256495e-03f, 8.458515262e-03f, 8.494756151e-03f, 8.530979103e-03f,
-8.567184055e-03f, 8.603370947e-03f, 8.639539718e-03f, 8.675690308e-03f, 8.711822656e-03f, 8.747936701e-03f, 8.784032382e-03f, 8.820109639e-03f, 8.856168411e-03f, 8.892208638e-03f,
-8.928230259e-03f, 8.964233215e-03f, 9.000217443e-03f, 9.036182885e-03f, 9.072129479e-03f, 9.108057166e-03f, 9.143965884e-03f, 9.179855575e-03f, 9.215726177e-03f, 9.251577631e-03f,
-9.287409877e-03f, 9.323222853e-03f, 9.359016501e-03f, 9.394790761e-03f, 9.430545572e-03f, 9.466280874e-03f, 9.501996608e-03f, 9.537692713e-03f, 9.573369131e-03f, 9.609025801e-03f,
-9.644662663e-03f, 9.680279658e-03f, 9.715876726e-03f, 9.751453808e-03f, 9.787010844e-03f, 9.822547774e-03f, 9.858064539e-03f, 9.893561080e-03f, 9.929037337e-03f, 9.964493250e-03f,
-9.999928761e-03f, 1.003534381e-02f, 1.007073834e-02f, 1.010611229e-02f, 1.014146560e-02f, 1.017679821e-02f, 1.021211006e-02f, 1.024740109e-02f, 1.028267125e-02f, 1.031792048e-02f,
-1.035314871e-02f, 1.038835589e-02f, 1.042354196e-02f, 1.045870686e-02f, 1.049385052e-02f, 1.052897291e-02f, 1.056407394e-02f, 1.059915357e-02f, 1.063421174e-02f, 1.066924839e-02f,
-1.070426345e-02f, 1.073925688e-02f, 1.077422861e-02f, 1.080917858e-02f, 1.084410674e-02f, 1.087901303e-02f, 1.091389739e-02f, 1.094875975e-02f, 1.098360008e-02f, 1.101841829e-02f,
-1.105321435e-02f, 1.108798818e-02f, 1.112273973e-02f, 1.115746895e-02f, 1.119217577e-02f, 1.122686014e-02f, 1.126152200e-02f, 1.129616129e-02f, 1.133077795e-02f, 1.136537194e-02f,
-1.139994318e-02f, 1.143449162e-02f, 1.146901720e-02f, 1.150351987e-02f, 1.153799957e-02f, 1.157245624e-02f, 1.160688983e-02f, 1.164130027e-02f, 1.167568751e-02f, 1.171005149e-02f,
-1.174439216e-02f, 1.177870945e-02f, 1.181300332e-02f, 1.184727370e-02f, 1.188152054e-02f, 1.191574377e-02f, 1.194994335e-02f, 1.198411922e-02f, 1.201827131e-02f, 1.205239958e-02f,
-1.208650396e-02f, 1.212058440e-02f, 1.215464084e-02f, 1.218867323e-02f, 1.222268151e-02f, 1.225666562e-02f, 1.229062551e-02f, 1.232456111e-02f, 1.235847238e-02f, 1.239235926e-02f,
-1.242622169e-02f, 1.246005961e-02f, 1.249387298e-02f, 1.252766172e-02f, 1.256142579e-02f, 1.259516513e-02f, 1.262887969e-02f, 1.266256940e-02f, 1.269623422e-02f, 1.272987408e-02f,
-1.276348893e-02f, 1.279707872e-02f, 1.283064339e-02f, 1.286418288e-02f, 1.289769714e-02f, 1.293118612e-02f, 1.296464975e-02f, 1.299808798e-02f, 1.303150076e-02f, 1.306488803e-02f,
-1.309824973e-02f, 1.313158582e-02f, 1.316489623e-02f, 1.319818091e-02f, 1.323143981e-02f, 1.326467287e-02f, 1.329788003e-02f, 1.333106124e-02f, 1.336421645e-02f, 1.339734560e-02f,
-1.343044863e-02f, 1.346352549e-02f, 1.349657613e-02f, 1.352960049e-02f, 1.356259852e-02f, 1.359557016e-02f, 1.362851536e-02f, 1.366143406e-02f, 1.369432621e-02f, 1.372719176e-02f,
-1.376003064e-02f, 1.379284281e-02f, 1.382562821e-02f, 1.385838679e-02f, 1.389111850e-02f, 1.392382327e-02f, 1.395650106e-02f, 1.398915181e-02f, 1.402177547e-02f, 1.405437198e-02f,
-1.408694129e-02f, 1.411948335e-02f, 1.415199810e-02f, 1.418448549e-02f, 1.421694546e-02f, 1.424937797e-02f, 1.428178295e-02f, 1.431416036e-02f, 1.434651014e-02f, 1.437883224e-02f,
-1.441112661e-02f, 1.444339318e-02f, 1.447563192e-02f, 1.450784276e-02f, 1.454002565e-02f, 1.457218054e-02f, 1.460430738e-02f, 1.463640611e-02f, 1.466847668e-02f, 1.470051904e-02f,
-1.473253314e-02f, 1.476451891e-02f, 1.479647632e-02f, 1.482840531e-02f, 1.486030582e-02f, 1.489217780e-02f, 1.492402120e-02f, 1.495583597e-02f, 1.498762205e-02f, 1.501937940e-02f,
-1.505110796e-02f, 1.508280767e-02f, 1.511447849e-02f, 1.514612037e-02f, 1.517773325e-02f, 1.520931708e-02f, 1.524087181e-02f, 1.527239738e-02f, 1.530389375e-02f, 1.533536087e-02f,
-1.536679867e-02f, 1.539820712e-02f, 1.542958615e-02f, 1.546093572e-02f, 1.549225578e-02f, 1.552354627e-02f, 1.555480714e-02f, 1.558603835e-02f, 1.561723983e-02f, 1.564841154e-02f,
-1.567955344e-02f, 1.571066546e-02f, 1.574174755e-02f, 1.577279967e-02f, 1.580382177e-02f, 1.583481378e-02f, 1.586577567e-02f, 1.589670739e-02f, 1.592760887e-02f, 1.595848008e-02f,
-1.598932095e-02f, 1.602013144e-02f, 1.605091151e-02f, 1.608166109e-02f, 1.611238014e-02f, 1.614306861e-02f, 1.617372645e-02f, 1.620435360e-02f, 1.623495003e-02f, 1.626551567e-02f,
-1.629605048e-02f, 1.632655440e-02f, 1.635702740e-02f, 1.638746941e-02f, 1.641788039e-02f, 1.644826029e-02f, 1.647860906e-02f, 1.650892665e-02f, 1.653921301e-02f, 1.656946809e-02f,
-1.659969184e-02f, 1.662988422e-02f, 1.666004516e-02f, 1.669017463e-02f, 1.672027258e-02f, 1.675033895e-02f, 1.678037369e-02f, 1.681037677e-02f, 1.684034812e-02f, 1.687028770e-02f,
-1.690019546e-02f, 1.693007135e-02f, 1.695991533e-02f, 1.698972734e-02f, 1.701950734e-02f, 1.704925527e-02f, 1.707897110e-02f, 1.710865476e-02f, 1.713830622e-02f, 1.716792542e-02f,
-1.719751232e-02f, 1.722706686e-02f, 1.725658901e-02f, 1.728607870e-02f, 1.731553590e-02f, 1.734496056e-02f, 1.737435262e-02f, 1.740371204e-02f, 1.743303878e-02f, 1.746233278e-02f,
-1.749159399e-02f, 1.752082238e-02f, 1.755001789e-02f, 1.757918047e-02f, 1.760831008e-02f, 1.763740668e-02f, 1.766647020e-02f, 1.769550061e-02f, 1.772449786e-02f, 1.775346189e-02f,
-1.778239268e-02f, 1.781129016e-02f, 1.784015429e-02f, 1.786898502e-02f, 1.789778232e-02f, 1.792654612e-02f, 1.795527638e-02f, 1.798397307e-02f, 1.801263612e-02f, 1.804126550e-02f,
-1.806986115e-02f, 1.809842304e-02f, 1.812695111e-02f, 1.815544532e-02f, 1.818390563e-02f, 1.821233198e-02f, 1.824072433e-02f, 1.826908264e-02f, 1.829740685e-02f, 1.832569693e-02f,
-1.835395283e-02f, 1.838217450e-02f, 1.841036189e-02f, 1.843851497e-02f, 1.846663368e-02f, 1.849471798e-02f, 1.852276782e-02f, 1.855078316e-02f, 1.857876396e-02f, 1.860671016e-02f,
-1.863462173e-02f, 1.866249862e-02f, 1.869034078e-02f, 1.871814817e-02f, 1.874592074e-02f, 1.877365845e-02f, 1.880136125e-02f, 1.882902911e-02f, 1.885666197e-02f, 1.888425979e-02f,
-1.891182252e-02f, 1.893935013e-02f, 1.896684256e-02f, 1.899429977e-02f, 1.902172173e-02f, 1.904910838e-02f, 1.907645967e-02f, 1.910377558e-02f, 1.913105604e-02f, 1.915830103e-02f,
-1.918551049e-02f, 1.921268438e-02f, 1.923982265e-02f, 1.926692527e-02f, 1.929399219e-02f, 1.932102337e-02f, 1.934801876e-02f, 1.937497831e-02f, 1.940190200e-02f, 1.942878976e-02f,
-1.945564157e-02f, 1.948245737e-02f, 1.950923713e-02f, 1.953598080e-02f, 1.956268833e-02f, 1.958935969e-02f, 1.961599483e-02f, 1.964259371e-02f, 1.966915629e-02f, 1.969568252e-02f,
-1.972217236e-02f, 1.974862577e-02f, 1.977504271e-02f, 1.980142314e-02f, 1.982776700e-02f, 1.985407426e-02f, 1.988034489e-02f, 1.990657882e-02f, 1.993277604e-02f, 1.995893648e-02f,
-1.998506011e-02f, 2.001114689e-02f, 2.003719678e-02f, 2.006320973e-02f, 2.008918571e-02f, 2.011512467e-02f, 2.014102656e-02f, 2.016689136e-02f, 2.019271901e-02f, 2.021850948e-02f,
-2.024426273e-02f, 2.026997871e-02f, 2.029565738e-02f, 2.032129870e-02f, 2.034690264e-02f, 2.037246915e-02f, 2.039799818e-02f, 2.042348970e-02f, 2.044894368e-02f, 2.047436005e-02f,
-2.049973880e-02f, 2.052507987e-02f, 2.055038323e-02f, 2.057564884e-02f, 2.060087665e-02f, 2.062606662e-02f, 2.065121873e-02f, 2.067633291e-02f, 2.070140915e-02f, 2.072644738e-02f,
-2.075144759e-02f, 2.077640972e-02f, 2.080133374e-02f, 2.082621960e-02f, 2.085106727e-02f, 2.087587671e-02f, 2.090064788e-02f, 2.092538073e-02f, 2.095007524e-02f, 2.097473135e-02f,
-2.099934904e-02f, 2.102392826e-02f, 2.104846898e-02f, 2.107297114e-02f, 2.109743473e-02f, 2.112185969e-02f, 2.114624599e-02f, 2.117059359e-02f, 2.119490245e-02f, 2.121917253e-02f,
-2.124340379e-02f, 2.126759621e-02f, 2.129174973e-02f, 2.131586432e-02f, 2.133993994e-02f, 2.136397655e-02f, 2.138797412e-02f, 2.141193260e-02f, 2.143585197e-02f, 2.145973218e-02f,
-2.148357319e-02f, 2.150737496e-02f, 2.153113747e-02f, 2.155486066e-02f, 2.157854451e-02f, 2.160218898e-02f, 2.162579402e-02f, 2.164935961e-02f, 2.167288570e-02f, 2.169637226e-02f,
-2.171981925e-02f, 2.174322663e-02f, 2.176659437e-02f, 2.178992243e-02f, 2.181321078e-02f, 2.183645937e-02f, 2.185966816e-02f, 2.188283714e-02f, 2.190596625e-02f, 2.192905546e-02f,
-2.195210473e-02f, 2.197511404e-02f, 2.199808333e-02f, 2.202101259e-02f, 2.204390176e-02f, 2.206675081e-02f, 2.208955972e-02f, 2.211232843e-02f, 2.213505693e-02f, 2.215774516e-02f,
-2.218039310e-02f, 2.220300071e-02f, 2.222556796e-02f, 2.224809480e-02f, 2.227058121e-02f, 2.229302714e-02f, 2.231543257e-02f, 2.233779746e-02f, 2.236012178e-02f, 2.238240548e-02f,
-2.240464853e-02f, 2.242685091e-02f, 2.244901256e-02f, 2.247113347e-02f, 2.249321360e-02f, 2.251525290e-02f, 2.253725135e-02f, 2.255920891e-02f, 2.258112555e-02f, 2.260300124e-02f,
-2.262483593e-02f, 2.264662960e-02f, 2.266838221e-02f, 2.269009373e-02f, 2.271176412e-02f, 2.273339335e-02f, 2.275498139e-02f, 2.277652820e-02f, 2.279803375e-02f, 2.281949801e-02f,
-2.284092094e-02f, 2.286230251e-02f, 2.288364268e-02f, 2.290494143e-02f, 2.292619872e-02f, 2.294741451e-02f, 2.296858878e-02f, 2.298972149e-02f, 2.301081260e-02f, 2.303186210e-02f,
-2.305286993e-02f, 2.307383608e-02f, 2.309476050e-02f, 2.311564317e-02f, 2.313648405e-02f, 2.315728311e-02f, 2.317804033e-02f, 2.319875566e-02f, 2.321942907e-02f, 2.324006053e-02f,
-2.326065002e-02f, 2.328119750e-02f, 2.330170293e-02f, 2.332216629e-02f, 2.334258754e-02f, 2.336296666e-02f, 2.338330360e-02f, 2.340359835e-02f, 2.342385086e-02f, 2.344406111e-02f,
-2.346422907e-02f, 2.348435471e-02f, 2.350443798e-02f, 2.352447887e-02f, 2.354447735e-02f, 2.356443337e-02f, 2.358434692e-02f, 2.360421795e-02f, 2.362404645e-02f, 2.364383238e-02f,
-2.366357570e-02f, 2.368327639e-02f, 2.370293443e-02f, 2.372254977e-02f, 2.374212239e-02f, 2.376165225e-02f, 2.378113934e-02f, 2.380058362e-02f, 2.381998505e-02f, 2.383934361e-02f,
-2.385865928e-02f, 2.387793201e-02f, 2.389716178e-02f, 2.391634857e-02f, 2.393549233e-02f, 2.395459305e-02f, 2.397365070e-02f, 2.399266523e-02f, 2.401163664e-02f, 2.403056488e-02f,
-2.404944993e-02f, 2.406829175e-02f, 2.408709033e-02f, 2.410584563e-02f, 2.412455762e-02f, 2.414322628e-02f, 2.416185158e-02f, 2.418043348e-02f, 2.419897196e-02f, 2.421746699e-02f,
-2.423591855e-02f, 2.425432660e-02f, 2.427269113e-02f, 2.429101209e-02f, 2.430928946e-02f, 2.432752322e-02f, 2.434571333e-02f, 2.436385978e-02f, 2.438196252e-02f, 2.440002155e-02f,
-2.441803681e-02f, 2.443600830e-02f, 2.445393598e-02f, 2.447181983e-02f, 2.448965982e-02f, 2.450745592e-02f, 2.452520810e-02f, 2.454291634e-02f, 2.456058062e-02f, 2.457820090e-02f,
-2.459577716e-02f, 2.461330937e-02f, 2.463079750e-02f, 2.464824154e-02f, 2.466564145e-02f, 2.468299721e-02f, 2.470030878e-02f, 2.471757616e-02f, 2.473479930e-02f, 2.475197819e-02f,
-2.476911279e-02f, 2.478620309e-02f, 2.480324905e-02f, 2.482025066e-02f, 2.483720788e-02f, 2.485412069e-02f, 2.487098907e-02f, 2.488781298e-02f, 2.490459242e-02f, 2.492132734e-02f,
-2.493801772e-02f, 2.495466355e-02f, 2.497126479e-02f, 2.498782143e-02f, 2.500433342e-02f, 2.502080076e-02f, 2.503722342e-02f, 2.505360137e-02f, 2.506993459e-02f, 2.508622305e-02f,
-2.510246673e-02f, 2.511866561e-02f, 2.513481966e-02f, 2.515092886e-02f, 2.516699318e-02f, 2.518301260e-02f, 2.519898710e-02f, 2.521491666e-02f, 2.523080124e-02f, 2.524664082e-02f,
-2.526243540e-02f, 2.527818493e-02f, 2.529388939e-02f, 2.530954877e-02f, 2.532516304e-02f, 2.534073218e-02f, 2.535625616e-02f, 2.537173496e-02f, 2.538716857e-02f, 2.540255694e-02f,
-2.541790008e-02f, 2.543319794e-02f, 2.544845051e-02f, 2.546365777e-02f, 2.547881969e-02f, 2.549393625e-02f, 2.550900744e-02f, 2.552403322e-02f, 2.553901358e-02f, 2.555394849e-02f,
-2.556883793e-02f, 2.558368189e-02f, 2.559848033e-02f, 2.561323325e-02f, 2.562794061e-02f, 2.564260239e-02f, 2.565721858e-02f, 2.567178914e-02f, 2.568631407e-02f, 2.570079335e-02f,
-2.571522694e-02f, 2.572961482e-02f, 2.574395699e-02f, 2.575825341e-02f, 2.577250407e-02f, 2.578670895e-02f, 2.580086802e-02f, 2.581498126e-02f, 2.582904866e-02f, 2.584307019e-02f,
-2.585704584e-02f, 2.587097558e-02f, 2.588485940e-02f, 2.589869727e-02f, 2.591248917e-02f, 2.592623509e-02f, 2.593993500e-02f, 2.595358889e-02f, 2.596719674e-02f, 2.598075852e-02f,
-2.599427422e-02f, 2.600774381e-02f, 2.602116729e-02f, 2.603454462e-02f, 2.604787580e-02f, 2.606116080e-02f, 2.607439960e-02f, 2.608759218e-02f, 2.610073853e-02f, 2.611383862e-02f,
-2.612689245e-02f, 2.613989998e-02f, 2.615286121e-02f, 2.616577610e-02f, 2.617864466e-02f, 2.619146684e-02f, 2.620424265e-02f, 2.621697206e-02f, 2.622965505e-02f, 2.624229161e-02f,
-2.625488171e-02f, 2.626742535e-02f, 2.627992249e-02f, 2.629237313e-02f, 2.630477725e-02f, 2.631713483e-02f, 2.632944585e-02f, 2.634171030e-02f, 2.635392815e-02f, 2.636609940e-02f,
-2.637822402e-02f, 2.639030200e-02f, 2.640233332e-02f, 2.641431796e-02f, 2.642625591e-02f, 2.643814716e-02f, 2.644999168e-02f, 2.646178945e-02f, 2.647354047e-02f, 2.648524472e-02f,
-2.649690218e-02f, 2.650851283e-02f, 2.652007666e-02f, 2.653159365e-02f, 2.654306379e-02f, 2.655448706e-02f, 2.656586344e-02f, 2.657719293e-02f, 2.658847550e-02f, 2.659971113e-02f,
-2.661089983e-02f, 2.662204156e-02f, 2.663313631e-02f, 2.664418408e-02f, 2.665518483e-02f, 2.666613857e-02f, 2.667704527e-02f, 2.668790492e-02f, 2.669871750e-02f, 2.670948301e-02f,
-2.672020142e-02f, 2.673087272e-02f, 2.674149690e-02f, 2.675207394e-02f, 2.676260383e-02f, 2.677308656e-02f, 2.678352211e-02f, 2.679391046e-02f, 2.680425161e-02f, 2.681454554e-02f,
-2.682479223e-02f, 2.683499167e-02f, 2.684514386e-02f, 2.685524877e-02f, 2.686530639e-02f, 2.687531672e-02f, 2.688527972e-02f, 2.689519541e-02f, 2.690506375e-02f, 2.691488474e-02f,
-2.692465836e-02f, 2.693438460e-02f, 2.694406346e-02f, 2.695369491e-02f, 2.696327894e-02f, 2.697281555e-02f, 2.698230472e-02f, 2.699174643e-02f, 2.700114068e-02f, 2.701048745e-02f,
-2.701978673e-02f, 2.702903852e-02f, 2.703824278e-02f, 2.704739953e-02f, 2.705650874e-02f, 2.706557040e-02f, 2.707458451e-02f, 2.708355104e-02f, 2.709246999e-02f, 2.710134135e-02f,
-2.711016510e-02f, 2.711894124e-02f, 2.712766976e-02f, 2.713635064e-02f, 2.714498387e-02f, 2.715356944e-02f, 2.716210734e-02f, 2.717059756e-02f, 2.717904010e-02f, 2.718743493e-02f,
-2.719578205e-02f, 2.720408145e-02f, 2.721233312e-02f, 2.722053705e-02f, 2.722869323e-02f, 2.723680165e-02f, 2.724486230e-02f, 2.725287516e-02f, 2.726084024e-02f, 2.726875752e-02f,
-2.727662699e-02f, 2.728444864e-02f, 2.729222246e-02f, 2.729994844e-02f, 2.730762658e-02f, 2.731525687e-02f, 2.732283929e-02f, 2.733037383e-02f, 2.733786050e-02f, 2.734529927e-02f,
-2.735269015e-02f, 2.736003312e-02f, 2.736732817e-02f, 2.737457529e-02f, 2.738177449e-02f, 2.738892574e-02f, 2.739602905e-02f, 2.740308439e-02f, 2.741009177e-02f, 2.741705118e-02f,
-2.742396261e-02f, 2.743082605e-02f, 2.743764149e-02f, 2.744440893e-02f, 2.745112836e-02f, 2.745779977e-02f, 2.746442315e-02f, 2.747099850e-02f, 2.747752581e-02f, 2.748400507e-02f,
-2.749043628e-02f, 2.749681942e-02f, 2.750315450e-02f, 2.750944150e-02f, 2.751568042e-02f, 2.752187126e-02f, 2.752801400e-02f, 2.753410864e-02f, 2.754015517e-02f, 2.754615358e-02f,
-2.755210388e-02f, 2.755800606e-02f, 2.756386010e-02f, 2.756966600e-02f, 2.757542376e-02f, 2.758113337e-02f, 2.758679483e-02f, 2.759240813e-02f, 2.759797326e-02f, 2.760349022e-02f,
-2.760895900e-02f, 2.761437961e-02f, 2.761975202e-02f, 2.762507625e-02f, 2.763035227e-02f, 2.763558010e-02f, 2.764075972e-02f, 2.764589113e-02f, 2.765097432e-02f, 2.765600930e-02f,
-2.766099604e-02f, 2.766593456e-02f, 2.767082485e-02f, 2.767566690e-02f, 2.768046070e-02f, 2.768520626e-02f, 2.768990357e-02f, 2.769455263e-02f, 2.769915343e-02f, 2.770370597e-02f,
-2.770821024e-02f, 2.771266625e-02f, 2.771707398e-02f, 2.772143344e-02f, 2.772574462e-02f, 2.773000751e-02f, 2.773422213e-02f, 2.773838845e-02f, 2.774250649e-02f, 2.774657623e-02f,
-2.775059767e-02f, 2.775457081e-02f, 2.775849566e-02f, 2.776237219e-02f, 2.776620043e-02f, 2.776998035e-02f, 2.777371196e-02f, 2.777739525e-02f, 2.778103023e-02f, 2.778461690e-02f,
-2.778815524e-02f, 2.779164526e-02f, 2.779508696e-02f, 2.779848033e-02f, 2.780182537e-02f, 2.780512209e-02f, 2.780837047e-02f, 2.781157053e-02f, 2.781472225e-02f, 2.781782564e-02f,
-2.782088069e-02f, 2.782388741e-02f, 2.782684578e-02f, 2.782975583e-02f, 2.783261753e-02f, 2.783543089e-02f, 2.783819591e-02f, 2.784091260e-02f, 2.784358094e-02f, 2.784620094e-02f,
-2.784877260e-02f, 2.785129591e-02f, 2.785377089e-02f, 2.785619752e-02f, 2.785857581e-02f, 2.786090575e-02f, 2.786318736e-02f, 2.786542062e-02f, 2.786760555e-02f, 2.786974213e-02f,
-2.787183037e-02f, 2.787387027e-02f, 2.787586184e-02f, 2.787780506e-02f, 2.787969995e-02f, 2.788154650e-02f, 2.788334472e-02f, 2.788509460e-02f, 2.788679615e-02f, 2.788844937e-02f,
-2.789005425e-02f, 2.789161081e-02f, 2.789311904e-02f, 2.789457895e-02f, 2.789599053e-02f, 2.789735379e-02f, 2.789866873e-02f, 2.789993535e-02f, 2.790115365e-02f, 2.790232364e-02f,
-2.790344532e-02f, 2.790451868e-02f, 2.790554374e-02f, 2.790652050e-02f, 2.790744895e-02f, 2.790832910e-02f, 2.790916096e-02f, 2.790994452e-02f, 2.791067979e-02f, 2.791136677e-02f,
-2.791200547e-02f, 2.791259588e-02f, 2.791313801e-02f, 2.791363187e-02f, 2.791407745e-02f, 2.791447477e-02f, 2.791482382e-02f, 2.791512461e-02f, 2.791537714e-02f, 2.791558141e-02f,
-2.791573744e-02f, 2.791584521e-02f, 2.791590475e-02f, 2.791591604e-02f, 2.791587910e-02f, 2.791579393e-02f, 2.791566054e-02f, 2.791547892e-02f, 2.791524909e-02f, 2.791497104e-02f,
-2.791464479e-02f, 2.791427033e-02f, 2.791384768e-02f, 2.791337683e-02f, 2.791285779e-02f, 2.791229057e-02f, 2.791167518e-02f, 2.791101161e-02f, 2.791029987e-02f, 2.790953997e-02f,
-2.790873192e-02f, 2.790787571e-02f, 2.790697136e-02f, 2.790601887e-02f, 2.790501824e-02f, 2.790396949e-02f, 2.790287262e-02f, 2.790172763e-02f, 2.790053453e-02f, 2.789929333e-02f,
-2.789800403e-02f, 2.789666664e-02f, 2.789528117e-02f, 2.789384762e-02f, 2.789236600e-02f, 2.789083632e-02f, 2.788925858e-02f, 2.788763279e-02f, 2.788595895e-02f, 2.788423708e-02f,
-2.788246718e-02f, 2.788064926e-02f, 2.787878332e-02f, 2.787686938e-02f, 2.787490744e-02f, 2.787289750e-02f, 2.787083958e-02f, 2.786873369e-02f, 2.786657982e-02f, 2.786437800e-02f,
-2.786212822e-02f, 2.785983050e-02f, 2.785748484e-02f, 2.785509125e-02f, 2.785264974e-02f, 2.785016032e-02f, 2.784762300e-02f, 2.784503778e-02f, 2.784240467e-02f, 2.783972369e-02f,
-2.783699484e-02f, 2.783421813e-02f, 2.783139357e-02f, 2.782852116e-02f, 2.782560093e-02f, 2.782263287e-02f, 2.781961699e-02f, 2.781655331e-02f, 2.781344184e-02f, 2.781028258e-02f,
-2.780707554e-02f, 2.780382074e-02f, 2.780051817e-02f, 2.779716787e-02f, 2.779376982e-02f, 2.779032405e-02f, 2.778683056e-02f, 2.778328936e-02f, 2.777970047e-02f, 2.777606389e-02f,
-2.777237964e-02f, 2.776864772e-02f, 2.776486814e-02f, 2.776104092e-02f, 2.775716607e-02f, 2.775324360e-02f, 2.774927351e-02f, 2.774525582e-02f, 2.774119054e-02f, 2.773707769e-02f,
-2.773291727e-02f, 2.772870929e-02f, 2.772445377e-02f, 2.772015071e-02f, 2.771580013e-02f, 2.771140204e-02f, 2.770695646e-02f, 2.770246339e-02f, 2.769792284e-02f, 2.769333483e-02f,
-2.768869937e-02f, 2.768401647e-02f, 2.767928615e-02f, 2.767450841e-02f, 2.766968327e-02f, 2.766481075e-02f, 2.765989084e-02f, 2.765492357e-02f, 2.764990895e-02f, 2.764484699e-02f,
-2.763973771e-02f, 2.763458111e-02f, 2.762937722e-02f, 2.762412603e-02f, 2.761882757e-02f, 2.761348186e-02f, 2.760808889e-02f, 2.760264870e-02f, 2.759716128e-02f, 2.759162665e-02f,
-2.758604484e-02f, 2.758041584e-02f, 2.757473968e-02f, 2.756901637e-02f, 2.756324591e-02f, 2.755742834e-02f, 2.755156366e-02f, 2.754565188e-02f, 2.753969302e-02f, 2.753368710e-02f,
-2.752763412e-02f, 2.752153410e-02f, 2.751538706e-02f, 2.750919302e-02f, 2.750295198e-02f, 2.749666396e-02f, 2.749032898e-02f, 2.748394705e-02f, 2.747751819e-02f, 2.747104240e-02f,
-2.746451972e-02f, 2.745795014e-02f, 2.745133370e-02f, 2.744467040e-02f, 2.743796025e-02f, 2.743120328e-02f, 2.742439950e-02f, 2.741754893e-02f, 2.741065158e-02f, 2.740370746e-02f,
-2.739671660e-02f, 2.738967901e-02f, 2.738259470e-02f, 2.737546370e-02f, 2.736828601e-02f, 2.736106166e-02f, 2.735379066e-02f, 2.734647303e-02f, 2.733910879e-02f, 2.733169794e-02f,
-2.732424052e-02f, 2.731673652e-02f, 2.730918599e-02f, 2.730158892e-02f, 2.729394533e-02f, 2.728625525e-02f, 2.727851869e-02f, 2.727073567e-02f, 2.726290621e-02f, 2.725503032e-02f,
-2.724710802e-02f, 2.723913932e-02f, 2.723112426e-02f, 2.722306284e-02f, 2.721495508e-02f, 2.720680100e-02f, 2.719860061e-02f, 2.719035395e-02f, 2.718206102e-02f, 2.717372184e-02f,
-2.716533643e-02f, 2.715690482e-02f, 2.714842701e-02f, 2.713990303e-02f, 2.713133289e-02f, 2.712271662e-02f, 2.711405423e-02f, 2.710534574e-02f, 2.709659118e-02f, 2.708779055e-02f,
-2.707894389e-02f, 2.707005120e-02f, 2.706111251e-02f, 2.705212784e-02f, 2.704309720e-02f, 2.703402062e-02f, 2.702489812e-02f, 2.701572972e-02f, 2.700651543e-02f, 2.699725527e-02f,
-2.698794927e-02f, 2.697859745e-02f, 2.696919982e-02f, 2.695975640e-02f, 2.695026723e-02f, 2.694073230e-02f, 2.693115166e-02f, 2.692152531e-02f, 2.691185328e-02f, 2.690213559e-02f,
-2.689237226e-02f, 2.688256331e-02f, 2.687270876e-02f, 2.686280863e-02f, 2.685286294e-02f, 2.684287171e-02f, 2.683283498e-02f, 2.682275274e-02f, 2.681262504e-02f, 2.680245188e-02f,
-2.679223330e-02f, 2.678196931e-02f, 2.677165993e-02f, 2.676130518e-02f, 2.675090509e-02f, 2.674045969e-02f, 2.672996898e-02f, 2.671943299e-02f, 2.670885176e-02f, 2.669822528e-02f,
-2.668755360e-02f, 2.667683673e-02f, 2.666607469e-02f, 2.665526751e-02f, 2.664441521e-02f, 2.663351781e-02f, 2.662257534e-02f, 2.661158781e-02f, 2.660055525e-02f, 2.658947769e-02f,
-2.657835514e-02f, 2.656718763e-02f, 2.655597519e-02f, 2.654471783e-02f, 2.653341557e-02f, 2.652206845e-02f, 2.651067649e-02f, 2.649923970e-02f, 2.648775812e-02f, 2.647623176e-02f,
-2.646466066e-02f, 2.645304483e-02f, 2.644138429e-02f, 2.642967908e-02f, 2.641792921e-02f, 2.640613472e-02f, 2.639429561e-02f, 2.638241193e-02f, 2.637048369e-02f, 2.635851092e-02f,
-2.634649364e-02f, 2.633443187e-02f, 2.632232565e-02f, 2.631017499e-02f, 2.629797992e-02f, 2.628574047e-02f, 2.627345666e-02f, 2.626112851e-02f, 2.624875606e-02f, 2.623633932e-02f,
-2.622387832e-02f, 2.621137308e-02f, 2.619882364e-02f, 2.618623002e-02f, 2.617359224e-02f, 2.616091032e-02f, 2.614818431e-02f, 2.613541421e-02f, 2.612260005e-02f, 2.610974187e-02f,
-2.609683968e-02f, 2.608389352e-02f, 2.607090341e-02f, 2.605786937e-02f, 2.604479144e-02f, 2.603166964e-02f, 2.601850398e-02f, 2.600529452e-02f, 2.599204125e-02f, 2.597874423e-02f,
-2.596540346e-02f, 2.595201898e-02f, 2.593859082e-02f, 2.592511900e-02f, 2.591160355e-02f, 2.589804449e-02f, 2.588444186e-02f, 2.587079568e-02f, 2.585710597e-02f, 2.584337277e-02f,
-2.582959611e-02f, 2.581577600e-02f, 2.580191248e-02f, 2.578800558e-02f, 2.577405531e-02f, 2.576006172e-02f, 2.574602483e-02f, 2.573194467e-02f, 2.571782126e-02f, 2.570365463e-02f,
-2.568944481e-02f, 2.567519183e-02f, 2.566089572e-02f, 2.564655651e-02f, 2.563217422e-02f, 2.561774888e-02f, 2.560328052e-02f, 2.558876917e-02f, 2.557421487e-02f, 2.555961763e-02f,
-2.554497748e-02f, 2.553029446e-02f, 2.551556860e-02f, 2.550079992e-02f, 2.548598845e-02f, 2.547113423e-02f, 2.545623727e-02f, 2.544129762e-02f, 2.542631530e-02f, 2.541129033e-02f,
-2.539622276e-02f, 2.538111260e-02f, 2.536595989e-02f, 2.535076467e-02f, 2.533552695e-02f, 2.532024676e-02f, 2.530492415e-02f, 2.528955913e-02f, 2.527415175e-02f, 2.525870202e-02f,
-2.524320998e-02f, 2.522767566e-02f, 2.521209909e-02f, 2.519648030e-02f, 2.518081932e-02f, 2.516511618e-02f, 2.514937092e-02f, 2.513358356e-02f, 2.511775413e-02f, 2.510188267e-02f,
-2.508596920e-02f, 2.507001376e-02f, 2.505401638e-02f, 2.503797708e-02f, 2.502189591e-02f, 2.500577289e-02f, 2.498960806e-02f, 2.497340143e-02f, 2.495715306e-02f, 2.494086296e-02f,
-2.492453117e-02f, 2.490815773e-02f, 2.489174266e-02f, 2.487528599e-02f, 2.485878776e-02f, 2.484224800e-02f, 2.482566674e-02f, 2.480904401e-02f, 2.479237985e-02f, 2.477567429e-02f,
-2.475892736e-02f, 2.474213909e-02f, 2.472530951e-02f, 2.470843867e-02f, 2.469152658e-02f, 2.467457329e-02f, 2.465757882e-02f, 2.464054322e-02f, 2.462346650e-02f, 2.460634871e-02f,
-2.458918988e-02f, 2.457199004e-02f, 2.455474923e-02f, 2.453746747e-02f, 2.452014480e-02f, 2.450278126e-02f, 2.448537687e-02f, 2.446793168e-02f, 2.445044571e-02f, 2.443291900e-02f,
-2.441535158e-02f, 2.439774349e-02f, 2.438009476e-02f, 2.436240542e-02f, 2.434467551e-02f, 2.432690507e-02f, 2.430909411e-02f, 2.429124269e-02f, 2.427335084e-02f, 2.425541858e-02f,
-2.423744596e-02f, 2.421943300e-02f, 2.420137975e-02f, 2.418328623e-02f, 2.416515249e-02f, 2.414697855e-02f, 2.412876446e-02f, 2.411051023e-02f, 2.409221593e-02f, 2.407388156e-02f,
-2.405550718e-02f, 2.403709282e-02f, 2.401863850e-02f, 2.400014428e-02f, 2.398161017e-02f, 2.396303622e-02f, 2.394442247e-02f, 2.392576894e-02f, 2.390707568e-02f, 2.388834272e-02f,
-2.386957009e-02f, 2.385075784e-02f, 2.383190599e-02f, 2.381301459e-02f, 2.379408366e-02f, 2.377511325e-02f, 2.375610339e-02f, 2.373705412e-02f, 2.371796547e-02f, 2.369883749e-02f,
-2.367967019e-02f, 2.366046364e-02f, 2.364121785e-02f, 2.362193286e-02f, 2.360260872e-02f, 2.358324546e-02f, 2.356384312e-02f, 2.354440172e-02f, 2.352492132e-02f, 2.350540194e-02f,
-2.348584363e-02f, 2.346624642e-02f, 2.344661034e-02f, 2.342693545e-02f, 2.340722176e-02f, 2.338746932e-02f, 2.336767817e-02f, 2.334784835e-02f, 2.332797989e-02f, 2.330807282e-02f,
-2.328812720e-02f, 2.326814305e-02f, 2.324812041e-02f, 2.322805932e-02f, 2.320795982e-02f, 2.318782195e-02f, 2.316764575e-02f, 2.314743124e-02f, 2.312717848e-02f, 2.310688749e-02f,
-2.308655833e-02f, 2.306619102e-02f, 2.304578560e-02f, 2.302534212e-02f, 2.300486060e-02f, 2.298434110e-02f, 2.296378364e-02f, 2.294318828e-02f, 2.292255504e-02f, 2.290188396e-02f,
-2.288117509e-02f, 2.286042845e-02f, 2.283964411e-02f, 2.281882208e-02f, 2.279796241e-02f, 2.277706514e-02f, 2.275613031e-02f, 2.273515796e-02f, 2.271414812e-02f, 2.269310084e-02f,
-2.267201616e-02f, 2.265089411e-02f, 2.262973474e-02f, 2.260853808e-02f, 2.258730418e-02f, 2.256603307e-02f, 2.254472480e-02f, 2.252337940e-02f, 2.250199692e-02f, 2.248057739e-02f,
-2.245912085e-02f, 2.243762735e-02f, 2.241609693e-02f, 2.239452962e-02f, 2.237292546e-02f, 2.235128451e-02f, 2.232960679e-02f, 2.230789234e-02f, 2.228614122e-02f, 2.226435345e-02f,
-2.224252908e-02f, 2.222066815e-02f, 2.219877071e-02f, 2.217683678e-02f, 2.215486642e-02f, 2.213285966e-02f, 2.211081654e-02f, 2.208873712e-02f, 2.206662142e-02f, 2.204446948e-02f,
-2.202228136e-02f, 2.200005709e-02f, 2.197779671e-02f, 2.195550026e-02f, 2.193316780e-02f, 2.191079934e-02f, 2.188839495e-02f, 2.186595466e-02f, 2.184347851e-02f, 2.182096654e-02f,
-2.179841880e-02f, 2.177583533e-02f, 2.175321617e-02f, 2.173056136e-02f, 2.170787095e-02f, 2.168514497e-02f, 2.166238347e-02f, 2.163958649e-02f, 2.161675407e-02f, 2.159388627e-02f,
-2.157098311e-02f, 2.154804464e-02f, 2.152507090e-02f, 2.150206194e-02f, 2.147901780e-02f, 2.145593852e-02f, 2.143282414e-02f, 2.140967472e-02f, 2.138649028e-02f, 2.136327088e-02f,
-2.134001655e-02f, 2.131672734e-02f, 2.129340329e-02f, 2.127004445e-02f, 2.124665086e-02f, 2.122322256e-02f, 2.119975960e-02f, 2.117626202e-02f, 2.115272986e-02f, 2.112916316e-02f,
-2.110556198e-02f, 2.108192635e-02f, 2.105825631e-02f, 2.103455192e-02f, 2.101081321e-02f, 2.098704024e-02f, 2.096323303e-02f, 2.093939164e-02f, 2.091551611e-02f, 2.089160649e-02f,
-2.086766281e-02f, 2.084368513e-02f, 2.081967349e-02f, 2.079562793e-02f, 2.077154849e-02f, 2.074743522e-02f, 2.072328817e-02f, 2.069910738e-02f, 2.067489290e-02f, 2.065064476e-02f,
-2.062636302e-02f, 2.060204771e-02f, 2.057769889e-02f, 2.055331660e-02f, 2.052890088e-02f, 2.050445178e-02f, 2.047996934e-02f, 2.045545361e-02f, 2.043090463e-02f, 2.040632245e-02f,
-2.038170711e-02f, 2.035705867e-02f, 2.033237716e-02f, 2.030766262e-02f, 2.028291512e-02f, 2.025813468e-02f, 2.023332136e-02f, 2.020847520e-02f, 2.018359625e-02f, 2.015868456e-02f,
-2.013374016e-02f, 2.010876310e-02f, 2.008375344e-02f, 2.005871122e-02f, 2.003363647e-02f, 2.000852926e-02f, 1.998338962e-02f, 1.995821760e-02f, 1.993301325e-02f, 1.990777661e-02f,
-1.988250774e-02f, 1.985720666e-02f, 1.983187345e-02f, 1.980650812e-02f, 1.978111075e-02f, 1.975568137e-02f, 1.973022002e-02f, 1.970472676e-02f, 1.967920164e-02f, 1.965364469e-02f,
-1.962805596e-02f, 1.960243551e-02f, 1.957678338e-02f, 1.955109962e-02f, 1.952538426e-02f, 1.949963737e-02f, 1.947385899e-02f, 1.944804916e-02f, 1.942220793e-02f, 1.939633535e-02f,
-1.937043147e-02f, 1.934449633e-02f, 1.931852998e-02f, 1.929253247e-02f, 1.926650384e-02f, 1.924044415e-02f, 1.921435345e-02f, 1.918823177e-02f, 1.916207916e-02f, 1.913589568e-02f,
-1.910968138e-02f, 1.908343629e-02f, 1.905716047e-02f, 1.903085397e-02f, 1.900451683e-02f, 1.897814910e-02f, 1.895175083e-02f, 1.892532207e-02f, 1.889886287e-02f, 1.887237327e-02f,
-1.884585333e-02f, 1.881930308e-02f, 1.879272259e-02f, 1.876611189e-02f, 1.873947104e-02f, 1.871280009e-02f, 1.868609908e-02f, 1.865936806e-02f, 1.863260708e-02f, 1.860581619e-02f,
-1.857899544e-02f, 1.855214488e-02f, 1.852526455e-02f, 1.849835451e-02f, 1.847141480e-02f, 1.844444548e-02f, 1.841744658e-02f, 1.839041817e-02f, 1.836336029e-02f, 1.833627299e-02f,
-1.830915632e-02f, 1.828201032e-02f, 1.825483505e-02f, 1.822763056e-02f, 1.820039690e-02f, 1.817313411e-02f, 1.814584224e-02f, 1.811852135e-02f, 1.809117149e-02f, 1.806379270e-02f,
-1.803638503e-02f, 1.800894853e-02f, 1.798148326e-02f, 1.795398926e-02f, 1.792646659e-02f, 1.789891528e-02f, 1.787133540e-02f, 1.784372700e-02f, 1.781609011e-02f, 1.778842480e-02f,
-1.776073111e-02f, 1.773300910e-02f, 1.770525881e-02f, 1.767748029e-02f, 1.764967359e-02f, 1.762183877e-02f, 1.759397588e-02f, 1.756608496e-02f, 1.753816607e-02f, 1.751021925e-02f,
-1.748224456e-02f, 1.745424205e-02f, 1.742621176e-02f, 1.739815376e-02f, 1.737006808e-02f, 1.734195479e-02f, 1.731381393e-02f, 1.728564555e-02f, 1.725744970e-02f, 1.722922643e-02f,
-1.720097581e-02f, 1.717269787e-02f, 1.714439266e-02f, 1.711606025e-02f, 1.708770067e-02f, 1.705931399e-02f, 1.703090024e-02f, 1.700245949e-02f, 1.697399179e-02f, 1.694549718e-02f,
-1.691697572e-02f, 1.688842746e-02f, 1.685985246e-02f, 1.683125075e-02f, 1.680262240e-02f, 1.677396745e-02f, 1.674528596e-02f, 1.671657798e-02f, 1.668784356e-02f, 1.665908275e-02f,
-1.663029561e-02f, 1.660148219e-02f, 1.657264253e-02f, 1.654377669e-02f, 1.651488473e-02f, 1.648596669e-02f, 1.645702263e-02f, 1.642805259e-02f, 1.639905664e-02f, 1.637003482e-02f,
-1.634098719e-02f, 1.631191379e-02f, 1.628281468e-02f, 1.625368992e-02f, 1.622453955e-02f, 1.619536363e-02f, 1.616616221e-02f, 1.613693534e-02f, 1.610768307e-02f, 1.607840547e-02f,
-1.604910257e-02f, 1.601977444e-02f, 1.599042112e-02f, 1.596104267e-02f, 1.593163915e-02f, 1.590221059e-02f, 1.587275707e-02f, 1.584327862e-02f, 1.581377531e-02f, 1.578424718e-02f,
-1.575469429e-02f, 1.572511670e-02f, 1.569551445e-02f, 1.566588760e-02f, 1.563623620e-02f, 1.560656030e-02f, 1.557685997e-02f, 1.554713524e-02f, 1.551738618e-02f, 1.548761284e-02f,
-1.545781527e-02f, 1.542799352e-02f, 1.539814766e-02f, 1.536827772e-02f, 1.533838377e-02f, 1.530846586e-02f, 1.527852405e-02f, 1.524855838e-02f, 1.521856891e-02f, 1.518855569e-02f,
-1.515851879e-02f, 1.512845824e-02f, 1.509837411e-02f, 1.506826645e-02f, 1.503813532e-02f, 1.500798076e-02f, 1.497780283e-02f, 1.494760159e-02f, 1.491737709e-02f, 1.488712938e-02f,
-1.485685852e-02f, 1.482656456e-02f, 1.479624756e-02f, 1.476590757e-02f, 1.473554464e-02f, 1.470515883e-02f, 1.467475020e-02f, 1.464431879e-02f, 1.461386467e-02f, 1.458338788e-02f,
-1.455288849e-02f, 1.452236654e-02f, 1.449182209e-02f, 1.446125520e-02f, 1.443066591e-02f, 1.440005429e-02f, 1.436942039e-02f, 1.433876426e-02f, 1.430808597e-02f, 1.427738555e-02f,
-1.424666308e-02f, 1.421591859e-02f, 1.418515216e-02f, 1.415436382e-02f, 1.412355365e-02f, 1.409272169e-02f, 1.406186800e-02f, 1.403099263e-02f, 1.400009563e-02f, 1.396917707e-02f,
-1.393823700e-02f, 1.390727548e-02f, 1.387629255e-02f, 1.384528828e-02f, 1.381426271e-02f, 1.378321591e-02f, 1.375214793e-02f, 1.372105883e-02f, 1.368994866e-02f, 1.365881747e-02f,
-1.362766533e-02f, 1.359649228e-02f, 1.356529839e-02f, 1.353408370e-02f, 1.350284828e-02f, 1.347159218e-02f, 1.344031545e-02f, 1.340901816e-02f, 1.337770035e-02f, 1.334636208e-02f,
-1.331500342e-02f, 1.328362441e-02f, 1.325222510e-02f, 1.322080557e-02f, 1.318936586e-02f, 1.315790602e-02f, 1.312642612e-02f, 1.309492621e-02f, 1.306340634e-02f, 1.303186658e-02f,
-1.300030697e-02f, 1.296872758e-02f, 1.293712846e-02f, 1.290550967e-02f, 1.287387125e-02f, 1.284221328e-02f, 1.281053581e-02f, 1.277883888e-02f, 1.274712256e-02f, 1.271538691e-02f,
-1.268363198e-02f, 1.265185782e-02f, 1.262006450e-02f, 1.258825207e-02f, 1.255642059e-02f, 1.252457011e-02f, 1.249270068e-02f, 1.246081238e-02f, 1.242890524e-02f, 1.239697934e-02f,
-1.236503472e-02f, 1.233307145e-02f, 1.230108958e-02f, 1.226908916e-02f, 1.223707025e-02f, 1.220503292e-02f, 1.217297721e-02f, 1.214090318e-02f, 1.210881090e-02f, 1.207670041e-02f,
-1.204457178e-02f, 1.201242506e-02f, 1.198026031e-02f, 1.194807758e-02f, 1.191587693e-02f, 1.188365843e-02f, 1.185142212e-02f, 1.181916806e-02f, 1.178689632e-02f, 1.175460694e-02f,
-1.172229999e-02f, 1.168997552e-02f, 1.165763359e-02f, 1.162527425e-02f, 1.159289758e-02f, 1.156050361e-02f, 1.152809241e-02f, 1.149566404e-02f, 1.146321855e-02f, 1.143075600e-02f,
-1.139827645e-02f, 1.136577996e-02f, 1.133326658e-02f, 1.130073637e-02f, 1.126818939e-02f, 1.123562570e-02f, 1.120304535e-02f, 1.117044840e-02f, 1.113783491e-02f, 1.110520493e-02f,
-1.107255854e-02f, 1.103989577e-02f, 1.100721669e-02f, 1.097452136e-02f, 1.094180984e-02f, 1.090908218e-02f, 1.087633844e-02f, 1.084357867e-02f, 1.081080295e-02f, 1.077801132e-02f,
-1.074520384e-02f, 1.071238057e-02f, 1.067954157e-02f, 1.064668690e-02f, 1.061381661e-02f, 1.058093076e-02f, 1.054802942e-02f, 1.051511263e-02f, 1.048218046e-02f, 1.044923296e-02f,
-1.041627020e-02f, 1.038329223e-02f, 1.035029910e-02f, 1.031729089e-02f, 1.028426764e-02f, 1.025122941e-02f, 1.021817627e-02f, 1.018510826e-02f, 1.015202546e-02f, 1.011892791e-02f,
-1.008581568e-02f, 1.005268882e-02f, 1.001954739e-02f, 9.986391454e-03f, 9.953221066e-03f, 9.920036285e-03f, 9.886837171e-03f, 9.853623781e-03f, 9.820396173e-03f, 9.787154407e-03f,
-9.753898541e-03f, 9.720628633e-03f, 9.687344743e-03f, 9.654046928e-03f, 9.620735247e-03f, 9.587409759e-03f, 9.554070523e-03f, 9.520717597e-03f, 9.487351040e-03f, 9.453970911e-03f,
-9.420577268e-03f, 9.387170170e-03f, 9.353749676e-03f, 9.320315845e-03f, 9.286868735e-03f, 9.253408405e-03f, 9.219934915e-03f, 9.186448323e-03f, 9.152948688e-03f, 9.119436068e-03f,
-9.085910523e-03f, 9.052372112e-03f, 9.018820894e-03f, 8.985256927e-03f, 8.951680270e-03f, 8.918090983e-03f, 8.884489125e-03f, 8.850874754e-03f, 8.817247930e-03f, 8.783608711e-03f,
-8.749957158e-03f, 8.716293328e-03f, 8.682617281e-03f, 8.648929076e-03f, 8.615228772e-03f, 8.581516429e-03f, 8.547792106e-03f, 8.514055861e-03f, 8.480307754e-03f, 8.446547844e-03f,
-8.412776191e-03f, 8.378992854e-03f, 8.345197891e-03f, 8.311391363e-03f, 8.277573328e-03f, 8.243743846e-03f, 8.209902977e-03f, 8.176050779e-03f, 8.142187311e-03f, 8.108312634e-03f,
-8.074426807e-03f, 8.040529889e-03f, 8.006621939e-03f, 7.972703017e-03f, 7.938773182e-03f, 7.904832495e-03f, 7.870881013e-03f, 7.836918797e-03f, 7.802945907e-03f, 7.768962401e-03f,
-7.734968339e-03f, 7.700963781e-03f, 7.666948787e-03f, 7.632923415e-03f, 7.598887726e-03f, 7.564841779e-03f, 7.530785634e-03f, 7.496719350e-03f, 7.462642987e-03f, 7.428556604e-03f,
-7.394460262e-03f, 7.360354020e-03f, 7.326237937e-03f, 7.292112073e-03f, 7.257976488e-03f, 7.223831242e-03f, 7.189676395e-03f, 7.155512005e-03f, 7.121338133e-03f, 7.087154839e-03f,
-7.052962182e-03f, 7.018760222e-03f, 6.984549020e-03f, 6.950328633e-03f, 6.916099124e-03f, 6.881860551e-03f, 6.847612974e-03f, 6.813356453e-03f, 6.779091048e-03f, 6.744816818e-03f,
-6.710533825e-03f, 6.676242126e-03f, 6.641941784e-03f, 6.607632856e-03f, 6.573315404e-03f, 6.538989487e-03f, 6.504655164e-03f, 6.470312497e-03f, 6.435961545e-03f, 6.401602368e-03f,
-6.367235026e-03f, 6.332859578e-03f, 6.298476086e-03f, 6.264084608e-03f, 6.229685205e-03f, 6.195277937e-03f, 6.160862864e-03f, 6.126440045e-03f, 6.092009542e-03f, 6.057571414e-03f,
-6.023125721e-03f, 5.988672522e-03f, 5.954211879e-03f, 5.919743852e-03f, 5.885268499e-03f, 5.850785883e-03f, 5.816296061e-03f, 5.781799096e-03f, 5.747295046e-03f, 5.712783972e-03f,
-5.678265934e-03f, 5.643740992e-03f, 5.609209206e-03f, 5.574670637e-03f, 5.540125345e-03f, 5.505573389e-03f, 5.471014830e-03f, 5.436449729e-03f, 5.401878144e-03f, 5.367300138e-03f,
-5.332715768e-03f, 5.298125097e-03f, 5.263528184e-03f, 5.228925089e-03f, 5.194315873e-03f, 5.159700595e-03f, 5.125079316e-03f, 5.090452097e-03f, 5.055818997e-03f, 5.021180077e-03f,
-4.986535396e-03f, 4.951885016e-03f, 4.917228996e-03f, 4.882567397e-03f, 4.847900279e-03f, 4.813227702e-03f, 4.778549727e-03f, 4.743866414e-03f, 4.709177822e-03f, 4.674484013e-03f,
-4.639785047e-03f, 4.605080983e-03f, 4.570371883e-03f, 4.535657807e-03f, 4.500938814e-03f, 4.466214966e-03f, 4.431486322e-03f, 4.396752943e-03f, 4.362014888e-03f, 4.327272220e-03f,
-4.292524997e-03f, 4.257773281e-03f, 4.223017130e-03f, 4.188256607e-03f, 4.153491771e-03f, 4.118722682e-03f, 4.083949401e-03f, 4.049171988e-03f, 4.014390503e-03f, 3.979605008e-03f,
-3.944815562e-03f, 3.910022225e-03f, 3.875225058e-03f, 3.840424121e-03f, 3.805619475e-03f, 3.770811180e-03f, 3.735999296e-03f, 3.701183884e-03f, 3.666365004e-03f, 3.631542716e-03f,
-3.596717081e-03f, 3.561888159e-03f, 3.527056011e-03f, 3.492220696e-03f, 3.457382276e-03f, 3.422540810e-03f, 3.387696359e-03f, 3.352848984e-03f, 3.317998744e-03f, 3.283145700e-03f,
-3.248289912e-03f, 3.213431442e-03f, 3.178570348e-03f, 3.143706692e-03f, 3.108840534e-03f, 3.073971934e-03f, 3.039100953e-03f, 3.004227650e-03f, 2.969352087e-03f, 2.934474323e-03f,
-2.899594420e-03f, 2.864712437e-03f, 2.829828434e-03f, 2.794942473e-03f, 2.760054613e-03f, 2.725164914e-03f, 2.690273438e-03f, 2.655380244e-03f, 2.620485393e-03f, 2.585588946e-03f,
-2.550690961e-03f, 2.515791501e-03f, 2.480890625e-03f, 2.445988393e-03f, 2.411084865e-03f, 2.376180104e-03f, 2.341274167e-03f, 2.306367116e-03f, 2.271459011e-03f, 2.236549913e-03f,
-2.201639882e-03f, 2.166728977e-03f, 2.131817260e-03f, 2.096904790e-03f, 2.061991628e-03f, 2.027077834e-03f, 1.992163469e-03f, 1.957248593e-03f, 1.922333266e-03f, 1.887417548e-03f,
-1.852501499e-03f, 1.817585180e-03f, 1.782668652e-03f, 1.747751974e-03f, 1.712835206e-03f, 1.677918410e-03f, 1.643001644e-03f, 1.608084970e-03f, 1.573168447e-03f, 1.538252136e-03f,
-1.503336097e-03f, 1.468420391e-03f, 1.433505076e-03f, 1.398590215e-03f, 1.363675866e-03f, 1.328762091e-03f, 1.293848948e-03f, 1.258936499e-03f, 1.224024803e-03f, 1.189113922e-03f,
-1.154203914e-03f, 1.119294840e-03f, 1.084386760e-03f, 1.049479735e-03f, 1.014573824e-03f, 9.796690881e-04f, 9.447655866e-04f, 9.098633800e-04f, 8.749625282e-04f, 8.400630916e-04f,
-8.051651300e-04f, 7.702687037e-04f, 7.353738726e-04f, 7.004806969e-04f, 6.655892366e-04f, 6.306995517e-04f, 5.958117024e-04f, 5.609257486e-04f, 5.260417504e-04f, 4.911597677e-04f,
-4.562798607e-04f, 4.214020892e-04f, 3.865265134e-04f, 3.516531931e-04f, 3.167821884e-04f, 2.819135591e-04f, 2.470473654e-04f, 2.121836671e-04f, 1.773225241e-04f, 1.424639964e-04f,
-1.076081440e-04f, 7.275502664e-05f, 3.790470432e-05f, 3.057236898e-06f, -3.178731573e-05f, -6.662889370e-05f, -1.014674371e-04f, -1.363028862e-04f, -1.711351811e-04f, -2.059642619e-04f,
--2.407900689e-04f, -2.756125422e-04f, -3.104316221e-04f, -3.452472487e-04f, -3.800593622e-04f, -4.148679030e-04f, -4.496728112e-04f, -4.844740272e-04f, -5.192714911e-04f, -5.540651433e-04f,
--5.888549241e-04f, -6.236407737e-04f, -6.584226325e-04f, -6.932004408e-04f, -7.279741390e-04f, -7.627436673e-04f, -7.975089662e-04f, -8.322699761e-04f, -8.670266372e-04f, -9.017788901e-04f,
--9.365266752e-04f, -9.712699328e-04f, -1.006008603e-03f, -1.040742627e-03f, -1.075471945e-03f, -1.110196498e-03f, -1.144916225e-03f, -1.179631068e-03f, -1.214340966e-03f, -1.249045861e-03f,
--1.283745693e-03f, -1.318440403e-03f, -1.353129930e-03f, -1.387814217e-03f, -1.422493203e-03f, -1.457166828e-03f, -1.491835034e-03f, -1.526497762e-03f, -1.561154951e-03f, -1.595806543e-03f,
--1.630452477e-03f, -1.665092696e-03f, -1.699727140e-03f, -1.734355748e-03f, -1.768978463e-03f, -1.803595225e-03f, -1.838205975e-03f, -1.872810652e-03f, -1.907409199e-03f, -1.942001556e-03f,
--1.976587664e-03f, -2.011167464e-03f, -2.045740897e-03f, -2.080307902e-03f, -2.114868423e-03f, -2.149422398e-03f, -2.183969770e-03f, -2.218510479e-03f, -2.253044466e-03f, -2.287571673e-03f,
--2.322092039e-03f, -2.356605507e-03f, -2.391112017e-03f, -2.425611510e-03f, -2.460103928e-03f, -2.494589210e-03f, -2.529067300e-03f, -2.563538137e-03f, -2.598001663e-03f, -2.632457818e-03f,
--2.666906545e-03f, -2.701347784e-03f, -2.735781476e-03f, -2.770207564e-03f, -2.804625987e-03f, -2.839036687e-03f, -2.873439606e-03f, -2.907834685e-03f, -2.942221864e-03f, -2.976601086e-03f,
--3.010972292e-03f, -3.045335423e-03f, -3.079690421e-03f, -3.114037227e-03f, -3.148375782e-03f, -3.182706027e-03f, -3.217027905e-03f, -3.251341357e-03f, -3.285646324e-03f, -3.319942748e-03f,
--3.354230571e-03f, -3.388509733e-03f, -3.422780177e-03f, -3.457041843e-03f, -3.491294675e-03f, -3.525538613e-03f, -3.559773599e-03f, -3.593999575e-03f, -3.628216482e-03f, -3.662424262e-03f,
--3.696622857e-03f, -3.730812209e-03f, -3.764992259e-03f, -3.799162950e-03f, -3.833324222e-03f, -3.867476019e-03f, -3.901618281e-03f, -3.935750951e-03f, -3.969873971e-03f, -4.003987282e-03f,
--4.038090826e-03f, -4.072184547e-03f, -4.106268384e-03f, -4.140342281e-03f, -4.174406180e-03f, -4.208460022e-03f, -4.242503750e-03f, -4.276537306e-03f, -4.310560632e-03f, -4.344573670e-03f,
--4.378576362e-03f, -4.412568650e-03f, -4.446550478e-03f, -4.480521786e-03f, -4.514482517e-03f, -4.548432614e-03f, -4.582372019e-03f, -4.616300674e-03f, -4.650218521e-03f, -4.684125504e-03f,
--4.718021563e-03f, -4.751906643e-03f, -4.785780684e-03f, -4.819643631e-03f, -4.853495424e-03f, -4.887336007e-03f, -4.921165323e-03f, -4.954983313e-03f, -4.988789921e-03f, -5.022585089e-03f,
--5.056368759e-03f, -5.090140875e-03f, -5.123901379e-03f, -5.157650214e-03f, -5.191387322e-03f, -5.225112647e-03f, -5.258826131e-03f, -5.292527716e-03f, -5.326217347e-03f, -5.359894965e-03f,
--5.393560514e-03f, -5.427213936e-03f, -5.460855175e-03f, -5.494484173e-03f, -5.528100874e-03f, -5.561705220e-03f, -5.595297154e-03f, -5.628876620e-03f, -5.662443561e-03f, -5.695997920e-03f,
--5.729539640e-03f, -5.763068663e-03f, -5.796584935e-03f, -5.830088396e-03f, -5.863578992e-03f, -5.897056665e-03f, -5.930521358e-03f, -5.963973016e-03f, -5.997411580e-03f, -6.030836995e-03f,
--6.064249204e-03f, -6.097648151e-03f, -6.131033778e-03f, -6.164406030e-03f, -6.197764851e-03f, -6.231110182e-03f, -6.264441969e-03f, -6.297760155e-03f, -6.331064683e-03f, -6.364355498e-03f,
--6.397632542e-03f, -6.430895760e-03f, -6.464145095e-03f, -6.497380491e-03f, -6.530601892e-03f, -6.563809242e-03f, -6.597002485e-03f, -6.630181565e-03f, -6.663346425e-03f, -6.696497009e-03f,
--6.729633262e-03f, -6.762755128e-03f, -6.795862550e-03f, -6.828955472e-03f, -6.862033840e-03f, -6.895097596e-03f, -6.928146686e-03f, -6.961181053e-03f, -6.994200641e-03f, -7.027205395e-03f,
--7.060195260e-03f, -7.093170178e-03f, -7.126130096e-03f, -7.159074957e-03f, -7.192004705e-03f, -7.224919285e-03f, -7.257818642e-03f, -7.290702719e-03f, -7.323571462e-03f, -7.356424816e-03f,
--7.389262724e-03f, -7.422085131e-03f, -7.454891982e-03f, -7.487683222e-03f, -7.520458796e-03f, -7.553218647e-03f, -7.585962722e-03f, -7.618690964e-03f, -7.651403319e-03f, -7.684099732e-03f,
--7.716780147e-03f, -7.749444509e-03f, -7.782092764e-03f, -7.814724856e-03f, -7.847340730e-03f, -7.879940332e-03f, -7.912523607e-03f, -7.945090499e-03f, -7.977640955e-03f, -8.010174918e-03f,
--8.042692335e-03f, -8.075193150e-03f, -8.107677310e-03f, -8.140144758e-03f, -8.172595442e-03f, -8.205029305e-03f, -8.237446294e-03f, -8.269846354e-03f, -8.302229431e-03f, -8.334595470e-03f,
--8.366944416e-03f, -8.399276215e-03f, -8.431590814e-03f, -8.463888157e-03f, -8.496168190e-03f, -8.528430859e-03f, -8.560676110e-03f, -8.592903889e-03f, -8.625114141e-03f, -8.657306812e-03f,
--8.689481849e-03f, -8.721639197e-03f, -8.753778802e-03f, -8.785900611e-03f, -8.818004569e-03f, -8.850090622e-03f, -8.882158717e-03f, -8.914208799e-03f, -8.946240816e-03f, -8.978254712e-03f,
--9.010250435e-03f, -9.042227931e-03f, -9.074187146e-03f, -9.106128026e-03f, -9.138050518e-03f, -9.169954568e-03f, -9.201840123e-03f, -9.233707130e-03f, -9.265555534e-03f, -9.297385283e-03f,
--9.329196323e-03f, -9.360988601e-03f, -9.392762064e-03f, -9.424516657e-03f, -9.456252329e-03f, -9.487969025e-03f, -9.519666693e-03f, -9.551345280e-03f, -9.583004733e-03f, -9.614644997e-03f,
--9.646266022e-03f, -9.677867753e-03f, -9.709450137e-03f, -9.741013123e-03f, -9.772556656e-03f, -9.804080684e-03f, -9.835585155e-03f, -9.867070015e-03f, -9.898535212e-03f, -9.929980693e-03f,
--9.961406406e-03f, -9.992812298e-03f, -1.002419832e-02f, -1.005556441e-02f, -1.008691052e-02f, -1.011823661e-02f, -1.014954261e-02f, -1.018082847e-02f, -1.021209415e-02f, -1.024333958e-02f,
--1.027456473e-02f, -1.030576953e-02f, -1.033695393e-02f, -1.036811788e-02f, -1.039926134e-02f, -1.043038424e-02f, -1.046148653e-02f, -1.049256817e-02f, -1.052362910e-02f, -1.055466927e-02f,
--1.058568863e-02f, -1.061668712e-02f, -1.064766469e-02f, -1.067862130e-02f, -1.070955689e-02f, -1.074047141e-02f, -1.077136480e-02f, -1.080223703e-02f, -1.083308802e-02f, -1.086391774e-02f,
--1.089472613e-02f, -1.092551314e-02f, -1.095627872e-02f, -1.098702281e-02f, -1.101774537e-02f, -1.104844635e-02f, -1.107912569e-02f, -1.110978335e-02f, -1.114041926e-02f, -1.117103339e-02f,
--1.120162567e-02f, -1.123219606e-02f, -1.126274451e-02f, -1.129327097e-02f, -1.132377538e-02f, -1.135425770e-02f, -1.138471788e-02f, -1.141515585e-02f, -1.144557158e-02f, -1.147596501e-02f,
--1.150633609e-02f, -1.153668478e-02f, -1.156701101e-02f, -1.159731475e-02f, -1.162759593e-02f, -1.165785452e-02f, -1.168809045e-02f, -1.171830368e-02f, -1.174849416e-02f, -1.177866184e-02f,
--1.180880666e-02f, -1.183892859e-02f, -1.186902756e-02f, -1.189910353e-02f, -1.192915645e-02f, -1.195918627e-02f, -1.198919293e-02f, -1.201917639e-02f, -1.204913660e-02f, -1.207907351e-02f,
--1.210898707e-02f, -1.213887723e-02f, -1.216874394e-02f, -1.219858714e-02f, -1.222840680e-02f, -1.225820286e-02f, -1.228797527e-02f, -1.231772398e-02f, -1.234744895e-02f, -1.237715012e-02f,
--1.240682744e-02f, -1.243648087e-02f, -1.246611035e-02f, -1.249571584e-02f, -1.252529729e-02f, -1.255485465e-02f, -1.258438786e-02f, -1.261389689e-02f, -1.264338168e-02f, -1.267284218e-02f,
--1.270227835e-02f, -1.273169013e-02f, -1.276107747e-02f, -1.279044034e-02f, -1.281977867e-02f, -1.284909243e-02f, -1.287838155e-02f, -1.290764600e-02f, -1.293688573e-02f, -1.296610068e-02f,
--1.299529081e-02f, -1.302445607e-02f, -1.305359641e-02f, -1.308271179e-02f, -1.311180215e-02f, -1.314086745e-02f, -1.316990763e-02f, -1.319892266e-02f, -1.322791248e-02f, -1.325687705e-02f,
--1.328581632e-02f, -1.331473023e-02f, -1.334361875e-02f, -1.337248182e-02f, -1.340131939e-02f, -1.343013143e-02f, -1.345891787e-02f, -1.348767868e-02f, -1.351641381e-02f, -1.354512320e-02f,
--1.357380682e-02f, -1.360246461e-02f, -1.363109652e-02f, -1.365970252e-02f, -1.368828254e-02f, -1.371683656e-02f, -1.374536451e-02f, -1.377386635e-02f, -1.380234203e-02f, -1.383079151e-02f,
--1.385921474e-02f, -1.388761167e-02f, -1.391598226e-02f, -1.394432646e-02f, -1.397264423e-02f, -1.400093550e-02f, -1.402920025e-02f, -1.405743842e-02f, -1.408564997e-02f, -1.411383484e-02f,
--1.414199300e-02f, -1.417012440e-02f, -1.419822898e-02f, -1.422630672e-02f, -1.425435755e-02f, -1.428238143e-02f, -1.431037831e-02f, -1.433834816e-02f, -1.436629092e-02f, -1.439420655e-02f,
--1.442209500e-02f, -1.444995623e-02f, -1.447779019e-02f, -1.450559683e-02f, -1.453337611e-02f, -1.456112798e-02f, -1.458885240e-02f, -1.461654932e-02f, -1.464421870e-02f, -1.467186049e-02f,
--1.469947465e-02f, -1.472706112e-02f, -1.475461987e-02f, -1.478215085e-02f, -1.480965402e-02f, -1.483712932e-02f, -1.486457672e-02f, -1.489199616e-02f, -1.491938761e-02f, -1.494675102e-02f,
--1.497408635e-02f, -1.500139354e-02f, -1.502867256e-02f, -1.505592335e-02f, -1.508314589e-02f, -1.511034011e-02f, -1.513750598e-02f, -1.516464345e-02f, -1.519175248e-02f, -1.521883302e-02f,
--1.524588502e-02f, -1.527290846e-02f, -1.529990327e-02f, -1.532686941e-02f, -1.535380685e-02f, -1.538071554e-02f, -1.540759543e-02f, -1.543444647e-02f, -1.546126863e-02f, -1.548806187e-02f,
--1.551482613e-02f, -1.554156137e-02f, -1.556826756e-02f, -1.559494464e-02f, -1.562159257e-02f, -1.564821131e-02f, -1.567480082e-02f, -1.570136105e-02f, -1.572789196e-02f, -1.575439350e-02f,
--1.578086563e-02f, -1.580730832e-02f, -1.583372151e-02f, -1.586010516e-02f, -1.588645923e-02f, -1.591278368e-02f, -1.593907846e-02f, -1.596534353e-02f, -1.599157884e-02f, -1.601778437e-02f,
--1.604396005e-02f, -1.607010586e-02f, -1.609622174e-02f, -1.612230765e-02f, -1.614836356e-02f, -1.617438941e-02f, -1.620038517e-02f, -1.622635080e-02f, -1.625228625e-02f, -1.627819147e-02f,
--1.630406644e-02f, -1.632991110e-02f, -1.635572541e-02f, -1.638150933e-02f, -1.640726283e-02f, -1.643298585e-02f, -1.645867835e-02f, -1.648434030e-02f, -1.650997165e-02f, -1.653557236e-02f,
--1.656114239e-02f, -1.658668170e-02f, -1.661219024e-02f, -1.663766798e-02f, -1.666311486e-02f, -1.668853086e-02f, -1.671391593e-02f, -1.673927003e-02f, -1.676459311e-02f, -1.678988515e-02f,
--1.681514608e-02f, -1.684037588e-02f, -1.686557450e-02f, -1.689074191e-02f, -1.691587806e-02f, -1.694098290e-02f, -1.696605641e-02f, -1.699109854e-02f, -1.701610924e-02f, -1.704108849e-02f,
--1.706603623e-02f, -1.709095242e-02f, -1.711583704e-02f, -1.714069003e-02f, -1.716551135e-02f, -1.719030098e-02f, -1.721505885e-02f, -1.723978495e-02f, -1.726447922e-02f, -1.728914162e-02f,
--1.731377212e-02f, -1.733837068e-02f, -1.736293725e-02f, -1.738747180e-02f, -1.741197428e-02f, -1.743644466e-02f, -1.746088290e-02f, -1.748528896e-02f, -1.750966279e-02f, -1.753400437e-02f,
--1.755831364e-02f, -1.758259057e-02f, -1.760683513e-02f, -1.763104727e-02f, -1.765522695e-02f, -1.767937413e-02f, -1.770348878e-02f, -1.772757085e-02f, -1.775162031e-02f, -1.777563712e-02f,
--1.779962124e-02f, -1.782357263e-02f, -1.784749125e-02f, -1.787137706e-02f, -1.789523003e-02f, -1.791905012e-02f, -1.794283728e-02f, -1.796659149e-02f, -1.799031269e-02f, -1.801400086e-02f,
--1.803765596e-02f, -1.806127794e-02f, -1.808486677e-02f, -1.810842241e-02f, -1.813194482e-02f, -1.815543397e-02f, -1.817888982e-02f, -1.820231233e-02f, -1.822570146e-02f, -1.824905717e-02f,
--1.827237944e-02f, -1.829566821e-02f, -1.831892345e-02f, -1.834214513e-02f, -1.836533320e-02f, -1.838848764e-02f, -1.841160840e-02f, -1.843469544e-02f, -1.845774873e-02f, -1.848076824e-02f,
--1.850375392e-02f, -1.852670574e-02f, -1.854962365e-02f, -1.857250764e-02f, -1.859535765e-02f, -1.861817365e-02f, -1.864095561e-02f, -1.866370348e-02f, -1.868641724e-02f, -1.870909684e-02f,
--1.873174225e-02f, -1.875435344e-02f, -1.877693036e-02f, -1.879947298e-02f, -1.882198126e-02f, -1.884445517e-02f, -1.886689468e-02f, -1.888929974e-02f, -1.891167032e-02f, -1.893400639e-02f,
--1.895630790e-02f, -1.897857483e-02f, -1.900080714e-02f, -1.902300479e-02f, -1.904516774e-02f, -1.906729597e-02f, -1.908938944e-02f, -1.911144810e-02f, -1.913347193e-02f, -1.915546089e-02f,
--1.917741495e-02f, -1.919933407e-02f, -1.922121821e-02f, -1.924306734e-02f, -1.926488143e-02f, -1.928666044e-02f, -1.930840434e-02f, -1.933011309e-02f, -1.935178665e-02f, -1.937342500e-02f,
--1.939502810e-02f, -1.941659591e-02f, -1.943812840e-02f, -1.945962554e-02f, -1.948108729e-02f, -1.950251361e-02f, -1.952390448e-02f, -1.954525985e-02f, -1.956657970e-02f, -1.958786400e-02f,
--1.960911270e-02f, -1.963032577e-02f, -1.965150318e-02f, -1.967264490e-02f, -1.969375090e-02f, -1.971482113e-02f, -1.973585556e-02f, -1.975685418e-02f, -1.977781692e-02f, -1.979874378e-02f,
--1.981963471e-02f, -1.984048968e-02f, -1.986130865e-02f, -1.988209160e-02f, -1.990283849e-02f, -1.992354929e-02f, -1.994422396e-02f, -1.996486248e-02f, -1.998546480e-02f, -2.000603091e-02f,
--2.002656076e-02f, -2.004705432e-02f, -2.006751156e-02f, -2.008793244e-02f, -2.010831695e-02f, -2.012866503e-02f, -2.014897667e-02f, -2.016925183e-02f, -2.018949047e-02f, -2.020969257e-02f,
--2.022985810e-02f, -2.024998701e-02f, -2.027007929e-02f, -2.029013489e-02f, -2.031015379e-02f, -2.033013595e-02f, -2.035008135e-02f, -2.036998995e-02f, -2.038986172e-02f, -2.040969663e-02f,
--2.042949465e-02f, -2.044925575e-02f, -2.046897989e-02f, -2.048866705e-02f, -2.050831719e-02f, -2.052793028e-02f, -2.054750630e-02f, -2.056704521e-02f, -2.058654698e-02f, -2.060601158e-02f,
--2.062543898e-02f, -2.064482915e-02f, -2.066418206e-02f, -2.068349768e-02f, -2.070277598e-02f, -2.072201693e-02f, -2.074122049e-02f, -2.076038664e-02f, -2.077951535e-02f, -2.079860659e-02f,
--2.081766033e-02f, -2.083667654e-02f, -2.085565518e-02f, -2.087459623e-02f, -2.089349967e-02f, -2.091236545e-02f, -2.093119355e-02f, -2.094998395e-02f, -2.096873661e-02f, -2.098745150e-02f,
--2.100612859e-02f, -2.102476786e-02f, -2.104336927e-02f, -2.106193280e-02f, -2.108045841e-02f, -2.109894609e-02f, -2.111739579e-02f, -2.113580750e-02f, -2.115418117e-02f, -2.117251680e-02f,
--2.119081433e-02f, -2.120907375e-02f, -2.122729504e-02f, -2.124547815e-02f, -2.126362306e-02f, -2.128172975e-02f, -2.129979818e-02f, -2.131782833e-02f, -2.133582017e-02f, -2.135377367e-02f,
--2.137168880e-02f, -2.138956554e-02f, -2.140740386e-02f, -2.142520373e-02f, -2.144296512e-02f, -2.146068801e-02f, -2.147837237e-02f, -2.149601816e-02f, -2.151362538e-02f, -2.153119397e-02f,
--2.154872393e-02f, -2.156621522e-02f, -2.158366781e-02f, -2.160108168e-02f, -2.161845680e-02f, -2.163579315e-02f, -2.165309069e-02f, -2.167034941e-02f, -2.168756927e-02f, -2.170475025e-02f,
--2.172189232e-02f, -2.173899545e-02f, -2.175605962e-02f, -2.177308481e-02f, -2.179007098e-02f, -2.180701811e-02f, -2.182392618e-02f, -2.184079515e-02f, -2.185762501e-02f, -2.187441572e-02f,
--2.189116727e-02f, -2.190787961e-02f, -2.192455274e-02f, -2.194118662e-02f, -2.195778123e-02f, -2.197433655e-02f, -2.199085254e-02f, -2.200732918e-02f, -2.202376645e-02f, -2.204016432e-02f,
--2.205652277e-02f, -2.207284177e-02f, -2.208912129e-02f, -2.210536132e-02f, -2.212156183e-02f, -2.213772279e-02f, -2.215384417e-02f, -2.216992596e-02f, -2.218596813e-02f, -2.220197066e-02f,
--2.221793351e-02f, -2.223385667e-02f, -2.224974011e-02f, -2.226558380e-02f, -2.228138774e-02f, -2.229715187e-02f, -2.231287620e-02f, -2.232856069e-02f, -2.234420531e-02f, -2.235981005e-02f,
--2.237537488e-02f, -2.239089977e-02f, -2.240638471e-02f, -2.242182966e-02f, -2.243723462e-02f, -2.245259954e-02f, -2.246792442e-02f, -2.248320922e-02f, -2.249845393e-02f, -2.251365851e-02f,
--2.252882296e-02f, -2.254394724e-02f, -2.255903133e-02f, -2.257407520e-02f, -2.258907885e-02f, -2.260404224e-02f, -2.261896535e-02f, -2.263384816e-02f, -2.264869064e-02f, -2.266349278e-02f,
--2.267825455e-02f, -2.269297593e-02f, -2.270765690e-02f, -2.272229744e-02f, -2.273689751e-02f, -2.275145711e-02f, -2.276597621e-02f, -2.278045479e-02f, -2.279489282e-02f, -2.280929029e-02f,
--2.282364717e-02f, -2.283796345e-02f, -2.285223909e-02f, -2.286647408e-02f, -2.288066840e-02f, -2.289482203e-02f, -2.290893494e-02f, -2.292300712e-02f, -2.293703854e-02f, -2.295102919e-02f,
--2.296497904e-02f, -2.297888806e-02f, -2.299275625e-02f, -2.300658358e-02f, -2.302037003e-02f, -2.303411557e-02f, -2.304782020e-02f, -2.306148388e-02f, -2.307510661e-02f, -2.308868835e-02f,
--2.310222908e-02f, -2.311572880e-02f, -2.312918747e-02f, -2.314260508e-02f, -2.315598161e-02f, -2.316931704e-02f, -2.318261135e-02f, -2.319586452e-02f, -2.320907652e-02f, -2.322224735e-02f,
--2.323537698e-02f, -2.324846538e-02f, -2.326151256e-02f, -2.327451847e-02f, -2.328748311e-02f, -2.330040645e-02f, -2.331328849e-02f, -2.332612918e-02f, -2.333892853e-02f, -2.335168651e-02f,
--2.336440310e-02f, -2.337707828e-02f, -2.338971203e-02f, -2.340230434e-02f, -2.341485519e-02f, -2.342736456e-02f, -2.343983243e-02f, -2.345225878e-02f, -2.346464360e-02f, -2.347698686e-02f,
--2.348928855e-02f, -2.350154865e-02f, -2.351376715e-02f, -2.352594402e-02f, -2.353807925e-02f, -2.355017283e-02f, -2.356222472e-02f, -2.357423492e-02f, -2.358620341e-02f, -2.359813017e-02f,
--2.361001518e-02f, -2.362185843e-02f, -2.363365990e-02f, -2.364541957e-02f, -2.365713743e-02f, -2.366881346e-02f, -2.368044764e-02f, -2.369203995e-02f, -2.370359039e-02f, -2.371509893e-02f,
--2.372656555e-02f, -2.373799024e-02f, -2.374937299e-02f, -2.376071378e-02f, -2.377201258e-02f, -2.378326939e-02f, -2.379448419e-02f, -2.380565697e-02f, -2.381678770e-02f, -2.382787637e-02f,
--2.383892297e-02f, -2.384992747e-02f, -2.386088988e-02f, -2.387181016e-02f, -2.388268830e-02f, -2.389352430e-02f, -2.390431812e-02f, -2.391506977e-02f, -2.392577922e-02f, -2.393644645e-02f,
--2.394707146e-02f, -2.395765423e-02f, -2.396819474e-02f, -2.397869298e-02f, -2.398914893e-02f, -2.399956258e-02f, -2.400993391e-02f, -2.402026292e-02f, -2.403054958e-02f, -2.404079388e-02f,
--2.405099581e-02f, -2.406115536e-02f, -2.407127250e-02f, -2.408134723e-02f, -2.409137953e-02f, -2.410136938e-02f, -2.411131678e-02f, -2.412122171e-02f, -2.413108416e-02f, -2.414090410e-02f,
--2.415068154e-02f, -2.416041645e-02f, -2.417010883e-02f, -2.417975865e-02f, -2.418936591e-02f, -2.419893059e-02f, -2.420845269e-02f, -2.421793218e-02f, -2.422736905e-02f, -2.423676329e-02f,
--2.424611490e-02f, -2.425542384e-02f, -2.426469013e-02f, -2.427391373e-02f, -2.428309464e-02f, -2.429223284e-02f, -2.430132833e-02f, -2.431038109e-02f, -2.431939111e-02f, -2.432835838e-02f,
--2.433728288e-02f, -2.434616461e-02f, -2.435500354e-02f, -2.436379968e-02f, -2.437255300e-02f, -2.438126350e-02f, -2.438993117e-02f, -2.439855599e-02f, -2.440713795e-02f, -2.441567704e-02f,
--2.442417325e-02f, -2.443262656e-02f, -2.444103698e-02f, -2.444940448e-02f, -2.445772905e-02f, -2.446601069e-02f, -2.447424939e-02f, -2.448244512e-02f, -2.449059789e-02f, -2.449870768e-02f,
--2.450677448e-02f, -2.451479828e-02f, -2.452277907e-02f, -2.453071684e-02f, -2.453861158e-02f, -2.454646328e-02f, -2.455427193e-02f, -2.456203752e-02f, -2.456976004e-02f, -2.457743948e-02f,
--2.458507582e-02f, -2.459266907e-02f, -2.460021921e-02f, -2.460772623e-02f, -2.461519013e-02f, -2.462261088e-02f, -2.462998849e-02f, -2.463732294e-02f, -2.464461423e-02f, -2.465186234e-02f,
--2.465906727e-02f, -2.466622901e-02f, -2.467334754e-02f, -2.468042287e-02f, -2.468745498e-02f, -2.469444386e-02f, -2.470138950e-02f, -2.470829190e-02f, -2.471515105e-02f, -2.472196694e-02f,
--2.472873956e-02f, -2.473546890e-02f, -2.474215495e-02f, -2.474879772e-02f, -2.475539718e-02f, -2.476195333e-02f, -2.476846616e-02f, -2.477493567e-02f, -2.478136185e-02f, -2.478774469e-02f,
--2.479408418e-02f, -2.480038031e-02f, -2.480663309e-02f, -2.481284249e-02f, -2.481900852e-02f, -2.482513116e-02f, -2.483121041e-02f, -2.483724627e-02f, -2.484323872e-02f, -2.484918776e-02f,
--2.485509338e-02f, -2.486095557e-02f, -2.486677434e-02f, -2.487254966e-02f, -2.487828155e-02f, -2.488396998e-02f, -2.488961495e-02f, -2.489521646e-02f, -2.490077450e-02f, -2.490628907e-02f,
--2.491176015e-02f, -2.491718775e-02f, -2.492257185e-02f, -2.492791246e-02f, -2.493320956e-02f, -2.493846315e-02f, -2.494367323e-02f, -2.494883978e-02f, -2.495396280e-02f, -2.495904230e-02f,
--2.496407826e-02f, -2.496907067e-02f, -2.497401954e-02f, -2.497892486e-02f, -2.498378661e-02f, -2.498860481e-02f, -2.499337944e-02f, -2.499811050e-02f, -2.500279798e-02f, -2.500744188e-02f,
--2.501204219e-02f, -2.501659892e-02f, -2.502111205e-02f, -2.502558158e-02f, -2.503000751e-02f, -2.503438984e-02f, -2.503872855e-02f, -2.504302365e-02f, -2.504727513e-02f, -2.505148299e-02f,
--2.505564722e-02f, -2.505976782e-02f, -2.506384479e-02f, -2.506787813e-02f, -2.507186782e-02f, -2.507581387e-02f, -2.507971627e-02f, -2.508357502e-02f, -2.508739012e-02f, -2.509116157e-02f,
--2.509488935e-02f, -2.509857348e-02f, -2.510221394e-02f, -2.510581073e-02f, -2.510936385e-02f, -2.511287330e-02f, -2.511633907e-02f, -2.511976117e-02f, -2.512313958e-02f, -2.512647431e-02f,
--2.512976536e-02f, -2.513301272e-02f, -2.513621640e-02f, -2.513937638e-02f, -2.514249267e-02f, -2.514556527e-02f, -2.514859417e-02f, -2.515157937e-02f, -2.515452087e-02f, -2.515741867e-02f,
--2.516027277e-02f, -2.516308317e-02f, -2.516584985e-02f, -2.516857284e-02f, -2.517125211e-02f, -2.517388768e-02f, -2.517647954e-02f, -2.517902769e-02f, -2.518153212e-02f, -2.518399284e-02f,
--2.518640985e-02f, -2.518878315e-02f, -2.519111273e-02f, -2.519339860e-02f, -2.519564076e-02f, -2.519783919e-02f, -2.519999392e-02f, -2.520210492e-02f, -2.520417221e-02f, -2.520619579e-02f,
--2.520817565e-02f, -2.521011179e-02f, -2.521200422e-02f, -2.521385293e-02f, -2.521565793e-02f, -2.521741921e-02f, -2.521913678e-02f, -2.522081064e-02f, -2.522244078e-02f, -2.522402722e-02f,
--2.522556994e-02f, -2.522706895e-02f, -2.522852425e-02f, -2.522993584e-02f, -2.523130373e-02f, -2.523262791e-02f, -2.523390838e-02f, -2.523514515e-02f, -2.523633822e-02f, -2.523748759e-02f,
--2.523859326e-02f, -2.523965523e-02f, -2.524067351e-02f, -2.524164809e-02f, -2.524257898e-02f, -2.524346618e-02f, -2.524430969e-02f, -2.524510952e-02f, -2.524586566e-02f, -2.524657813e-02f,
--2.524724691e-02f, -2.524787201e-02f, -2.524845344e-02f, -2.524899120e-02f, -2.524948529e-02f, -2.524993571e-02f, -2.525034247e-02f, -2.525070557e-02f, -2.525102501e-02f, -2.525130079e-02f,
--2.525153292e-02f, -2.525172141e-02f, -2.525186624e-02f, -2.525196744e-02f, -2.525202499e-02f, -2.525203891e-02f, -2.525200920e-02f, -2.525193586e-02f, -2.525181889e-02f, -2.525165831e-02f,
--2.525145410e-02f, -2.525120628e-02f, -2.525091486e-02f, -2.525057982e-02f, -2.525020119e-02f, -2.524977896e-02f, -2.524931313e-02f, -2.524880372e-02f, -2.524825072e-02f, -2.524765414e-02f,
--2.524701399e-02f, -2.524633026e-02f, -2.524560297e-02f, -2.524483212e-02f, -2.524401771e-02f, -2.524315975e-02f, -2.524225825e-02f, -2.524131320e-02f, -2.524032462e-02f, -2.523929251e-02f,
--2.523821687e-02f, -2.523709771e-02f, -2.523593503e-02f, -2.523472885e-02f, -2.523347916e-02f, -2.523218598e-02f, -2.523084930e-02f, -2.522946914e-02f, -2.522804549e-02f, -2.522657837e-02f,
--2.522506778e-02f, -2.522351373e-02f, -2.522191623e-02f, -2.522027527e-02f, -2.521859087e-02f, -2.521686304e-02f, -2.521509177e-02f, -2.521327708e-02f, -2.521141897e-02f, -2.520951745e-02f,
--2.520757252e-02f, -2.520558420e-02f, -2.520355249e-02f, -2.520147739e-02f, -2.519935892e-02f, -2.519719708e-02f, -2.519499188e-02f, -2.519274333e-02f, -2.519045142e-02f, -2.518811618e-02f,
--2.518573761e-02f, -2.518331571e-02f, -2.518085049e-02f, -2.517834197e-02f, -2.517579014e-02f, -2.517319502e-02f, -2.517055662e-02f, -2.516787494e-02f, -2.516514999e-02f, -2.516238178e-02f,
--2.515957031e-02f, -2.515671560e-02f, -2.515381766e-02f, -2.515087649e-02f, -2.514789210e-02f, -2.514486450e-02f, -2.514179369e-02f, -2.513867970e-02f, -2.513552252e-02f, -2.513232217e-02f,
--2.512907865e-02f, -2.512579197e-02f, -2.512246215e-02f, -2.511908918e-02f, -2.511567309e-02f, -2.511221388e-02f, -2.510871156e-02f, -2.510516613e-02f, -2.510157762e-02f, -2.509794603e-02f,
--2.509427136e-02f, -2.509055363e-02f, -2.508679285e-02f, -2.508298903e-02f, -2.507914217e-02f, -2.507525229e-02f, -2.507131940e-02f, -2.506734351e-02f, -2.506332463e-02f, -2.505926277e-02f,
--2.505515794e-02f, -2.505101014e-02f, -2.504681940e-02f, -2.504258572e-02f, -2.503830911e-02f, -2.503398959e-02f, -2.502962716e-02f, -2.502522183e-02f, -2.502077362e-02f, -2.501628254e-02f,
--2.501174860e-02f, -2.500717180e-02f, -2.500255217e-02f, -2.499788971e-02f, -2.499318443e-02f, -2.498843635e-02f, -2.498364548e-02f, -2.497881182e-02f, -2.497393540e-02f, -2.496901622e-02f,
--2.496405429e-02f, -2.495904963e-02f, -2.495400225e-02f, -2.494891216e-02f, -2.494377937e-02f, -2.493860390e-02f, -2.493338575e-02f, -2.492812495e-02f, -2.492282150e-02f, -2.491747541e-02f,
--2.491208670e-02f, -2.490665538e-02f, -2.490118147e-02f, -2.489566497e-02f, -2.489010590e-02f, -2.488450427e-02f, -2.487886010e-02f, -2.487317340e-02f, -2.486744418e-02f, -2.486167245e-02f,
--2.485585824e-02f, -2.485000154e-02f, -2.484410238e-02f, -2.483816077e-02f, -2.483217672e-02f, -2.482615025e-02f, -2.482008137e-02f, -2.481397009e-02f, -2.480781643e-02f, -2.480162040e-02f,
--2.479538202e-02f, -2.478910130e-02f, -2.478277826e-02f, -2.477641290e-02f, -2.477000525e-02f, -2.476355531e-02f, -2.475706311e-02f, -2.475052866e-02f, -2.474395196e-02f, -2.473733304e-02f,
--2.473067192e-02f, -2.472396860e-02f, -2.471722310e-02f, -2.471043544e-02f, -2.470360563e-02f, -2.469673368e-02f, -2.468981962e-02f, -2.468286345e-02f, -2.467586520e-02f, -2.466882487e-02f,
--2.466174249e-02f, -2.465461807e-02f, -2.464745162e-02f, -2.464024316e-02f, -2.463299271e-02f, -2.462570028e-02f, -2.461836589e-02f, -2.461098955e-02f, -2.460357128e-02f, -2.459611110e-02f,
--2.458860902e-02f, -2.458106506e-02f, -2.457347924e-02f, -2.456585157e-02f, -2.455818207e-02f, -2.455047075e-02f, -2.454271763e-02f, -2.453492273e-02f, -2.452708607e-02f, -2.451920766e-02f,
--2.451128752e-02f, -2.450332566e-02f, -2.449532211e-02f, -2.448727688e-02f, -2.447918998e-02f, -2.447106144e-02f, -2.446289127e-02f, -2.445467950e-02f, -2.444642612e-02f, -2.443813118e-02f,
--2.442979468e-02f, -2.442141663e-02f, -2.441299707e-02f, -2.440453600e-02f, -2.439603344e-02f, -2.438748942e-02f, -2.437890394e-02f, -2.437027704e-02f, -2.436160872e-02f, -2.435289900e-02f,
--2.434414791e-02f, -2.433535546e-02f, -2.432652167e-02f, -2.431764656e-02f, -2.430873014e-02f, -2.429977244e-02f, -2.429077348e-02f, -2.428173326e-02f, -2.427265182e-02f, -2.426352918e-02f,
--2.425436534e-02f, -2.424516033e-02f, -2.423591417e-02f, -2.422662688e-02f, -2.421729847e-02f, -2.420792897e-02f, -2.419851840e-02f, -2.418906677e-02f, -2.417957411e-02f, -2.417004044e-02f,
--2.416046576e-02f, -2.415085012e-02f, -2.414119351e-02f, -2.413149597e-02f, -2.412175752e-02f, -2.411197817e-02f, -2.410215794e-02f, -2.409229686e-02f, -2.408239495e-02f, -2.407245222e-02f,
--2.406246869e-02f, -2.405244440e-02f, -2.404237935e-02f, -2.403227356e-02f, -2.402212707e-02f, -2.401193988e-02f, -2.400171203e-02f, -2.399144352e-02f, -2.398113439e-02f, -2.397078465e-02f,
--2.396039432e-02f, -2.394996343e-02f, -2.393949200e-02f, -2.392898004e-02f, -2.391842759e-02f, -2.390783465e-02f, -2.389720126e-02f, -2.388652742e-02f, -2.387581318e-02f, -2.386505854e-02f,
--2.385426353e-02f, -2.384342818e-02f, -2.383255249e-02f, -2.382163650e-02f, -2.381068023e-02f, -2.379968369e-02f, -2.378864692e-02f, -2.377756993e-02f, -2.376645275e-02f, -2.375529539e-02f,
--2.374409789e-02f, -2.373286026e-02f, -2.372158252e-02f, -2.371026470e-02f, -2.369890683e-02f, -2.368750892e-02f, -2.367607099e-02f, -2.366459308e-02f, -2.365307519e-02f, -2.364151737e-02f,
--2.362991962e-02f, -2.361828198e-02f, -2.360660446e-02f, -2.359488709e-02f, -2.358312990e-02f, -2.357133289e-02f, -2.355949611e-02f, -2.354761958e-02f, -2.353570330e-02f, -2.352374732e-02f,
--2.351175166e-02f, -2.349971633e-02f, -2.348764136e-02f, -2.347552678e-02f, -2.346337261e-02f, -2.345117888e-02f, -2.343894560e-02f, -2.342667281e-02f, -2.341436052e-02f, -2.340200877e-02f,
--2.338961757e-02f, -2.337718695e-02f, -2.336471694e-02f, -2.335220756e-02f, -2.333965883e-02f, -2.332707079e-02f, -2.331444344e-02f, -2.330177683e-02f, -2.328907097e-02f, -2.327632589e-02f,
--2.326354161e-02f, -2.325071817e-02f, -2.323785558e-02f, -2.322495387e-02f, -2.321201306e-02f, -2.319903319e-02f, -2.318601428e-02f, -2.317295634e-02f, -2.315985942e-02f, -2.314672352e-02f,
--2.313354869e-02f, -2.312033494e-02f, -2.310708231e-02f, -2.309379081e-02f, -2.308046048e-02f, -2.306709133e-02f, -2.305368340e-02f, -2.304023671e-02f, -2.302675129e-02f, -2.301322717e-02f,
--2.299966436e-02f, -2.298606291e-02f, -2.297242283e-02f, -2.295874414e-02f, -2.294502689e-02f, -2.293127109e-02f, -2.291747677e-02f, -2.290364396e-02f, -2.288977268e-02f, -2.287586297e-02f,
--2.286191484e-02f, -2.284792834e-02f, -2.283390347e-02f, -2.281984027e-02f, -2.280573878e-02f, -2.279159900e-02f, -2.277742099e-02f, -2.276320475e-02f, -2.274895032e-02f, -2.273465772e-02f,
--2.272032699e-02f, -2.270595815e-02f, -2.269155123e-02f, -2.267710625e-02f, -2.266262325e-02f, -2.264810225e-02f, -2.263354329e-02f, -2.261894638e-02f, -2.260431156e-02f, -2.258963885e-02f,
--2.257492829e-02f, -2.256017990e-02f, -2.254539372e-02f, -2.253056976e-02f, -2.251570806e-02f, -2.250080865e-02f, -2.248587155e-02f, -2.247089679e-02f, -2.245588441e-02f, -2.244083443e-02f,
--2.242574689e-02f, -2.241062180e-02f, -2.239545920e-02f, -2.238025912e-02f, -2.236502159e-02f, -2.234974663e-02f, -2.233443428e-02f, -2.231908457e-02f, -2.230369752e-02f, -2.228827316e-02f,
--2.227281153e-02f, -2.225731265e-02f, -2.224177656e-02f, -2.222620328e-02f, -2.221059284e-02f, -2.219494528e-02f, -2.217926062e-02f, -2.216353889e-02f, -2.214778013e-02f, -2.213198435e-02f,
--2.211615161e-02f, -2.210028191e-02f, -2.208437530e-02f, -2.206843181e-02f, -2.205245146e-02f, -2.203643428e-02f, -2.202038032e-02f, -2.200428958e-02f, -2.198816212e-02f, -2.197199795e-02f,
--2.195579712e-02f, -2.193955964e-02f, -2.192328556e-02f, -2.190697489e-02f, -2.189062768e-02f, -2.187424395e-02f, -2.185782374e-02f, -2.184136708e-02f, -2.182487399e-02f, -2.180834451e-02f,
--2.179177868e-02f, -2.177517651e-02f, -2.175853805e-02f, -2.174186333e-02f, -2.172515237e-02f, -2.170840521e-02f, -2.169162188e-02f, -2.167480241e-02f, -2.165794684e-02f, -2.164105519e-02f,
--2.162412750e-02f, -2.160716381e-02f, -2.159016413e-02f, -2.157312851e-02f, -2.155605698e-02f, -2.153894957e-02f, -2.152180630e-02f, -2.150462723e-02f, -2.148741236e-02f, -2.147016175e-02f,
--2.145287542e-02f, -2.143555341e-02f, -2.141819574e-02f, -2.140080245e-02f, -2.138337358e-02f, -2.136590915e-02f, -2.134840920e-02f, -2.133087376e-02f, -2.131330287e-02f, -2.129569655e-02f,
--2.127805485e-02f, -2.126037779e-02f, -2.124266541e-02f, -2.122491774e-02f, -2.120713481e-02f, -2.118931667e-02f, -2.117146333e-02f, -2.115357484e-02f, -2.113565123e-02f, -2.111769253e-02f,
--2.109969878e-02f, -2.108167001e-02f, -2.106360626e-02f, -2.104550755e-02f, -2.102737393e-02f, -2.100920542e-02f, -2.099100206e-02f, -2.097276389e-02f, -2.095449093e-02f, -2.093618323e-02f,
--2.091784082e-02f, -2.089946373e-02f, -2.088105200e-02f, -2.086260565e-02f, -2.084412474e-02f, -2.082560928e-02f, -2.080705932e-02f, -2.078847489e-02f, -2.076985602e-02f, -2.075120275e-02f,
--2.073251512e-02f, -2.071379316e-02f, -2.069503690e-02f, -2.067624638e-02f, -2.065742163e-02f, -2.063856270e-02f, -2.061966961e-02f, -2.060074240e-02f, -2.058178111e-02f, -2.056278577e-02f,
--2.054375642e-02f, -2.052469309e-02f, -2.050559581e-02f, -2.048646463e-02f, -2.046729958e-02f, -2.044810070e-02f, -2.042886802e-02f, -2.040960157e-02f, -2.039030140e-02f, -2.037096753e-02f,
--2.035160001e-02f, -2.033219887e-02f, -2.031276415e-02f, -2.029329588e-02f, -2.027379411e-02f, -2.025425885e-02f, -2.023469016e-02f, -2.021508807e-02f, -2.019545262e-02f, -2.017578383e-02f,
--2.015608176e-02f, -2.013634643e-02f, -2.011657788e-02f, -2.009677615e-02f, -2.007694128e-02f, -2.005707329e-02f, -2.003717224e-02f, -2.001723816e-02f, -1.999727107e-02f, -1.997727103e-02f,
--1.995723806e-02f, -1.993717221e-02f, -1.991707351e-02f, -1.989694200e-02f, -1.987677772e-02f, -1.985658070e-02f, -1.983635098e-02f, -1.981608860e-02f, -1.979579360e-02f, -1.977546601e-02f,
--1.975510588e-02f, -1.973471323e-02f, -1.971428811e-02f, -1.969383055e-02f, -1.967334060e-02f, -1.965281829e-02f, -1.963226366e-02f, -1.961167674e-02f, -1.959105758e-02f, -1.957040622e-02f,
--1.954972268e-02f, -1.952900702e-02f, -1.950825926e-02f, -1.948747945e-02f, -1.946666762e-02f, -1.944582382e-02f, -1.942494808e-02f, -1.940404044e-02f, -1.938310093e-02f, -1.936212961e-02f,
--1.934112650e-02f, -1.932009165e-02f, -1.929902509e-02f, -1.927792686e-02f, -1.925679701e-02f, -1.923563556e-02f, -1.921444257e-02f, -1.919321806e-02f, -1.917196209e-02f, -1.915067468e-02f,
--1.912935587e-02f, -1.910800571e-02f, -1.908662424e-02f, -1.906521149e-02f, -1.904376751e-02f, -1.902229233e-02f, -1.900078599e-02f, -1.897924853e-02f, -1.895768000e-02f, -1.893608042e-02f,
--1.891444985e-02f, -1.889278832e-02f, -1.887109587e-02f, -1.884937255e-02f, -1.882761838e-02f, -1.880583341e-02f, -1.878401769e-02f, -1.876217125e-02f, -1.874029413e-02f, -1.871838637e-02f,
--1.869644801e-02f, -1.867447909e-02f, -1.865247966e-02f, -1.863044974e-02f, -1.860838940e-02f, -1.858629865e-02f, -1.856417755e-02f, -1.854202613e-02f, -1.851984444e-02f, -1.849763252e-02f,
--1.847539040e-02f, -1.845311813e-02f, -1.843081575e-02f, -1.840848330e-02f, -1.838612082e-02f, -1.836372835e-02f, -1.834130593e-02f, -1.831885360e-02f, -1.829637141e-02f, -1.827385940e-02f,
--1.825131760e-02f, -1.822874606e-02f, -1.820614482e-02f, -1.818351392e-02f, -1.816085341e-02f, -1.813816331e-02f, -1.811544368e-02f, -1.809269456e-02f, -1.806991599e-02f, -1.804710801e-02f,
--1.802427065e-02f, -1.800140398e-02f, -1.797850801e-02f, -1.795558281e-02f, -1.793262840e-02f, -1.790964483e-02f, -1.788663215e-02f, -1.786359039e-02f, -1.784051960e-02f, -1.781741982e-02f,
--1.779429109e-02f, -1.777113345e-02f, -1.774794695e-02f, -1.772473163e-02f, -1.770148752e-02f, -1.767821468e-02f, -1.765491315e-02f, -1.763158296e-02f, -1.760822416e-02f, -1.758483680e-02f,
--1.756142091e-02f, -1.753797654e-02f, -1.751450373e-02f, -1.749100252e-02f, -1.746747296e-02f, -1.744391509e-02f, -1.742032895e-02f, -1.739671459e-02f, -1.737307204e-02f, -1.734940136e-02f,
--1.732570257e-02f, -1.730197574e-02f, -1.727822090e-02f, -1.725443809e-02f, -1.723062736e-02f, -1.720678875e-02f, -1.718292230e-02f, -1.715902806e-02f, -1.713510607e-02f, -1.711115637e-02f,
--1.708717901e-02f, -1.706317404e-02f, -1.703914148e-02f, -1.701508140e-02f, -1.699099383e-02f, -1.696687881e-02f, -1.694273639e-02f, -1.691856662e-02f, -1.689436953e-02f, -1.687014518e-02f,
--1.684589360e-02f, -1.682161484e-02f, -1.679730894e-02f, -1.677297595e-02f, -1.674861591e-02f, -1.672422887e-02f, -1.669981487e-02f, -1.667537395e-02f, -1.665090616e-02f, -1.662641154e-02f,
--1.660189014e-02f, -1.657734200e-02f, -1.655276717e-02f, -1.652816569e-02f, -1.650353760e-02f, -1.647888295e-02f, -1.645420179e-02f, -1.642949416e-02f, -1.640476010e-02f, -1.637999966e-02f,
--1.635521289e-02f, -1.633039982e-02f, -1.630556050e-02f, -1.628069499e-02f, -1.625580331e-02f, -1.623088553e-02f, -1.620594168e-02f, -1.618097180e-02f, -1.615597596e-02f, -1.613095417e-02f,
--1.610590651e-02f, -1.608083300e-02f, -1.605573370e-02f, -1.603060865e-02f, -1.600545789e-02f, -1.598028147e-02f, -1.595507944e-02f, -1.592985185e-02f, -1.590459872e-02f, -1.587932013e-02f,
--1.585401610e-02f, -1.582868668e-02f, -1.580333193e-02f, -1.577795188e-02f, -1.575254658e-02f, -1.572711608e-02f, -1.570166043e-02f, -1.567617966e-02f, -1.565067383e-02f, -1.562514298e-02f,
--1.559958715e-02f, -1.557400640e-02f, -1.554840077e-02f, -1.552277031e-02f, -1.549711506e-02f, -1.547143506e-02f, -1.544573037e-02f, -1.542000103e-02f, -1.539424709e-02f, -1.536846859e-02f,
--1.534266558e-02f, -1.531683810e-02f, -1.529098621e-02f, -1.526510995e-02f, -1.523920937e-02f, -1.521328450e-02f, -1.518733541e-02f, -1.516136213e-02f, -1.513536472e-02f, -1.510934321e-02f,
--1.508329766e-02f, -1.505722812e-02f, -1.503113462e-02f, -1.500501722e-02f, -1.497887596e-02f, -1.495271090e-02f, -1.492652207e-02f, -1.490030953e-02f, -1.487407332e-02f, -1.484781349e-02f,
--1.482153009e-02f, -1.479522315e-02f, -1.476889275e-02f, -1.474253890e-02f, -1.471616168e-02f, -1.468976111e-02f, -1.466333726e-02f, -1.463689017e-02f, -1.461041988e-02f, -1.458392644e-02f,
--1.455740990e-02f, -1.453087031e-02f, -1.450430772e-02f, -1.447772217e-02f, -1.445111371e-02f, -1.442448239e-02f, -1.439782826e-02f, -1.437115136e-02f, -1.434445174e-02f, -1.431772945e-02f,
--1.429098454e-02f, -1.426421705e-02f, -1.423742704e-02f, -1.421061455e-02f, -1.418377963e-02f, -1.415692233e-02f, -1.413004270e-02f, -1.410314078e-02f, -1.407621662e-02f, -1.404927027e-02f,
--1.402230178e-02f, -1.399531119e-02f, -1.396829857e-02f, -1.394126394e-02f, -1.391420737e-02f, -1.388712890e-02f, -1.386002858e-02f, -1.383290645e-02f, -1.380576257e-02f, -1.377859699e-02f,
--1.375140975e-02f, -1.372420090e-02f, -1.369697049e-02f, -1.366971857e-02f, -1.364244519e-02f, -1.361515039e-02f, -1.358783423e-02f, -1.356049676e-02f, -1.353313802e-02f, -1.350575806e-02f,
--1.347835693e-02f, -1.345093468e-02f, -1.342349136e-02f, -1.339602702e-02f, -1.336854170e-02f, -1.334103546e-02f, -1.331350835e-02f, -1.328596041e-02f, -1.325839170e-02f, -1.323080225e-02f,
--1.320319213e-02f, -1.317556138e-02f, -1.314791005e-02f, -1.312023819e-02f, -1.309254585e-02f, -1.306483308e-02f, -1.303709993e-02f, -1.300934645e-02f, -1.298157268e-02f, -1.295377868e-02f,
--1.292596449e-02f, -1.289813017e-02f, -1.287027577e-02f, -1.284240133e-02f, -1.281450691e-02f, -1.278659255e-02f, -1.275865830e-02f, -1.273070422e-02f, -1.270273035e-02f, -1.267473675e-02f,
--1.264672346e-02f, -1.261869053e-02f, -1.259063802e-02f, -1.256256597e-02f, -1.253447443e-02f, -1.250636346e-02f, -1.247823310e-02f, -1.245008340e-02f, -1.242191442e-02f, -1.239372620e-02f,
--1.236551880e-02f, -1.233729226e-02f, -1.230904663e-02f, -1.228078197e-02f, -1.225249832e-02f, -1.222419574e-02f, -1.219587427e-02f, -1.216753397e-02f, -1.213917488e-02f, -1.211079706e-02f,
--1.208240056e-02f, -1.205398543e-02f, -1.202555171e-02f, -1.199709947e-02f, -1.196862874e-02f, -1.194013958e-02f, -1.191163204e-02f, -1.188310617e-02f, -1.185456203e-02f, -1.182599966e-02f,
--1.179741911e-02f, -1.176882043e-02f, -1.174020368e-02f, -1.171156890e-02f, -1.168291615e-02f, -1.165424548e-02f, -1.162555694e-02f, -1.159685057e-02f, -1.156812643e-02f, -1.153938458e-02f,
--1.151062506e-02f, -1.148184792e-02f, -1.145305321e-02f, -1.142424099e-02f, -1.139541130e-02f, -1.136656421e-02f, -1.133769975e-02f, -1.130881798e-02f, -1.127991895e-02f, -1.125100271e-02f,
--1.122206932e-02f, -1.119311882e-02f, -1.116415127e-02f, -1.113516671e-02f, -1.110616520e-02f, -1.107714679e-02f, -1.104811154e-02f, -1.101905948e-02f, -1.098999069e-02f, -1.096090519e-02f,
--1.093180306e-02f, -1.090268433e-02f, -1.087354906e-02f, -1.084439731e-02f, -1.081522911e-02f, -1.078604454e-02f, -1.075684363e-02f, -1.072762644e-02f, -1.069839302e-02f, -1.066914342e-02f,
--1.063987769e-02f, -1.061059589e-02f, -1.058129807e-02f, -1.055198427e-02f, -1.052265456e-02f, -1.049330898e-02f, -1.046394759e-02f, -1.043457043e-02f, -1.040517756e-02f, -1.037576903e-02f,
--1.034634489e-02f, -1.031690520e-02f, -1.028745000e-02f, -1.025797935e-02f, -1.022849331e-02f, -1.019899191e-02f, -1.016947522e-02f, -1.013994329e-02f, -1.011039617e-02f, -1.008083390e-02f,
--1.005125655e-02f, -1.002166417e-02f, -9.992056807e-03f, -9.962434512e-03f, -9.932797340e-03f, -9.903145343e-03f, -9.873478573e-03f, -9.843797083e-03f, -9.814100924e-03f, -9.784390150e-03f,
--9.754664813e-03f, -9.724924965e-03f, -9.695170659e-03f, -9.665401947e-03f, -9.635618882e-03f, -9.605821516e-03f, -9.576009902e-03f, -9.546184092e-03f, -9.516344139e-03f, -9.486490095e-03f,
--9.456622014e-03f, -9.426739947e-03f, -9.396843948e-03f, -9.366934069e-03f, -9.337010364e-03f, -9.307072883e-03f, -9.277121681e-03f, -9.247156810e-03f, -9.217178323e-03f, -9.187186273e-03f,
--9.157180712e-03f, -9.127161694e-03f, -9.097129271e-03f, -9.067083496e-03f, -9.037024422e-03f, -9.006952101e-03f, -8.976866588e-03f, -8.946767935e-03f, -8.916656194e-03f, -8.886531420e-03f,
--8.856393664e-03f, -8.826242980e-03f, -8.796079420e-03f, -8.765903039e-03f, -8.735713889e-03f, -8.705512023e-03f, -8.675297494e-03f, -8.645070356e-03f, -8.614830661e-03f, -8.584578462e-03f,
--8.554313814e-03f, -8.524036769e-03f, -8.493747380e-03f, -8.463445701e-03f, -8.433131785e-03f, -8.402805685e-03f, -8.372467454e-03f, -8.342117146e-03f, -8.311754814e-03f, -8.281380511e-03f,
--8.250994291e-03f, -8.220596207e-03f, -8.190186313e-03f, -8.159764661e-03f, -8.129331306e-03f, -8.098886301e-03f, -8.068429699e-03f, -8.037961554e-03f, -8.007481918e-03f, -7.976990847e-03f,
--7.946488393e-03f, -7.915974609e-03f, -7.885449550e-03f, -7.854913268e-03f, -7.824365818e-03f, -7.793807253e-03f, -7.763237627e-03f, -7.732656993e-03f, -7.702065405e-03f, -7.671462916e-03f,
--7.640849580e-03f, -7.610225452e-03f, -7.579590584e-03f, -7.548945030e-03f, -7.518288844e-03f, -7.487622080e-03f, -7.456944792e-03f, -7.426257033e-03f, -7.395558857e-03f, -7.364850317e-03f,
--7.334131469e-03f, -7.303402365e-03f, -7.272663059e-03f, -7.241913605e-03f, -7.211154058e-03f, -7.180384470e-03f, -7.149604896e-03f, -7.118815390e-03f, -7.088016005e-03f, -7.057206796e-03f,
--7.026387816e-03f, -6.995559120e-03f, -6.964720761e-03f, -6.933872793e-03f, -6.903015271e-03f, -6.872148248e-03f, -6.841271779e-03f, -6.810385917e-03f, -6.779490716e-03f, -6.748586231e-03f,
--6.717672515e-03f, -6.686749623e-03f, -6.655817608e-03f, -6.624876526e-03f, -6.593926429e-03f, -6.562967372e-03f, -6.531999409e-03f, -6.501022595e-03f, -6.470036983e-03f, -6.439042628e-03f,
--6.408039583e-03f, -6.377027904e-03f, -6.346007643e-03f, -6.314978856e-03f, -6.283941596e-03f, -6.252895918e-03f, -6.221841876e-03f, -6.190779525e-03f, -6.159708918e-03f, -6.128630110e-03f,
--6.097543154e-03f, -6.066448107e-03f, -6.035345020e-03f, -6.004233950e-03f, -5.973114950e-03f, -5.941988075e-03f, -5.910853378e-03f, -5.879710915e-03f, -5.848560739e-03f, -5.817402906e-03f,
--5.786237468e-03f, -5.755064482e-03f, -5.723884000e-03f, -5.692696078e-03f, -5.661500770e-03f, -5.630298130e-03f, -5.599088213e-03f, -5.567871074e-03f, -5.536646765e-03f, -5.505415343e-03f,
--5.474176862e-03f, -5.442931375e-03f, -5.411678938e-03f, -5.380419604e-03f, -5.349153429e-03f, -5.317880467e-03f, -5.286600773e-03f, -5.255314400e-03f, -5.224021404e-03f, -5.192721838e-03f,
--5.161415758e-03f, -5.130103219e-03f, -5.098784273e-03f, -5.067458977e-03f, -5.036127384e-03f, -5.004789550e-03f, -4.973445528e-03f, -4.942095374e-03f, -4.910739141e-03f, -4.879376886e-03f,
--4.848008661e-03f, -4.816634522e-03f, -4.785254523e-03f, -4.753868719e-03f, -4.722477165e-03f, -4.691079915e-03f, -4.659677024e-03f, -4.628268546e-03f, -4.596854536e-03f, -4.565435049e-03f,
--4.534010140e-03f, -4.502579862e-03f, -4.471144271e-03f, -4.439703422e-03f, -4.408257368e-03f, -4.376806165e-03f, -4.345349867e-03f, -4.313888530e-03f, -4.282422207e-03f, -4.250950954e-03f,
--4.219474825e-03f, -4.187993874e-03f, -4.156508157e-03f, -4.125017729e-03f, -4.093522643e-03f, -4.062022955e-03f, -4.030518720e-03f, -3.999009991e-03f, -3.967496824e-03f, -3.935979274e-03f,
--3.904457395e-03f, -3.872931243e-03f, -3.841400871e-03f, -3.809866334e-03f, -3.778327688e-03f, -3.746784986e-03f, -3.715238285e-03f, -3.683687638e-03f, -3.652133100e-03f, -3.620574726e-03f,
--3.589012571e-03f, -3.557446690e-03f, -3.525877137e-03f, -3.494303967e-03f, -3.462727235e-03f, -3.431146995e-03f, -3.399563303e-03f, -3.367976213e-03f, -3.336385780e-03f, -3.304792058e-03f,
--3.273195104e-03f, -3.241594970e-03f, -3.209991712e-03f, -3.178385386e-03f, -3.146776044e-03f, -3.115163744e-03f, -3.083548538e-03f, -3.051930483e-03f, -3.020309632e-03f, -2.988686040e-03f,
--2.957059763e-03f, -2.925430856e-03f, -2.893799372e-03f, -2.862165366e-03f, -2.830528895e-03f, -2.798890011e-03f, -2.767248771e-03f, -2.735605228e-03f, -2.703959438e-03f, -2.672311455e-03f,
--2.640661335e-03f, -2.609009132e-03f, -2.577354900e-03f, -2.545698695e-03f, -2.514040571e-03f, -2.482380583e-03f, -2.450718787e-03f, -2.419055236e-03f, -2.387389985e-03f, -2.355723090e-03f,
--2.324054604e-03f, -2.292384584e-03f, -2.260713083e-03f, -2.229040156e-03f, -2.197365859e-03f, -2.165690245e-03f, -2.134013370e-03f, -2.102335288e-03f, -2.070656055e-03f, -2.038975724e-03f,
--2.007294351e-03f, -1.975611990e-03f, -1.943928697e-03f, -1.912244526e-03f, -1.880559531e-03f, -1.848873768e-03f, -1.817187290e-03f, -1.785500154e-03f, -1.753812413e-03f, -1.722124123e-03f,
--1.690435338e-03f, -1.658746112e-03f, -1.627056501e-03f, -1.595366560e-03f, -1.563676342e-03f, -1.531985903e-03f, -1.500295297e-03f, -1.468604579e-03f, -1.436913804e-03f, -1.405223027e-03f,
--1.373532302e-03f, -1.341841683e-03f, -1.310151226e-03f, -1.278460985e-03f, -1.246771015e-03f, -1.215081371e-03f, -1.183392107e-03f, -1.151703277e-03f, -1.120014937e-03f, -1.088327142e-03f,
--1.056639945e-03f, -1.024953401e-03f, -9.932675654e-04f, -9.615824925e-04f, -9.298982368e-04f, -8.982148531e-04f, -8.665323959e-04f, -8.348509198e-04f, -8.031704793e-04f, -7.714911292e-04f,
--7.398129239e-04f, -7.081359181e-04f, -6.764601664e-04f, -6.447857232e-04f, -6.131126431e-04f, -5.814409807e-04f, -5.497707906e-04f, -5.181021273e-04f, -4.864350452e-04f, -4.547695990e-04f,
--4.231058432e-04f, -3.914438322e-04f, -3.597836205e-04f, -3.281252628e-04f, -2.964688133e-04f, -2.648143267e-04f, -2.331618574e-04f, -2.015114599e-04f, -1.698631885e-04f, -1.382170979e-04f,
--1.065732423e-04f, -7.493167631e-05f, -4.329245426e-05f, -1.165563059e-05f, 1.997874028e-05f, 5.161060397e-05f, 8.323990608e-05f, 1.148665922e-04f, 1.464906080e-04f, 1.781118991e-04f,
-2.097304112e-04f, 2.413460898e-04f, 2.729588807e-04f, 3.045687296e-04f, 3.361755820e-04f, 3.677793837e-04f, 3.993800805e-04f, 4.309776179e-04f, 4.625719418e-04f, 4.941629979e-04f,
-5.257507318e-04f, 5.573350894e-04f, 5.889160164e-04f, 6.204934586e-04f, 6.520673617e-04f, 6.836376716e-04f, 7.152043340e-04f, 7.467672947e-04f, 7.783264997e-04f, 8.098818946e-04f,
-8.414334254e-04f, 8.729810379e-04f, 9.045246779e-04f, 9.360642914e-04f, 9.675998242e-04f, 9.991312223e-04f, 1.030658431e-03f, 1.062181398e-03f, 1.093700067e-03f, 1.125214385e-03f,
-1.156724298e-03f, 1.188229752e-03f, 1.219730693e-03f, 1.251227066e-03f, 1.282718819e-03f, 1.314205896e-03f, 1.345688244e-03f, 1.377165809e-03f, 1.408638537e-03f, 1.440106374e-03f,
-1.471569266e-03f, 1.503027159e-03f, 1.534480000e-03f, 1.565927734e-03f, 1.597370308e-03f, 1.628807667e-03f, 1.660239758e-03f, 1.691666527e-03f, 1.723087920e-03f, 1.754503884e-03f,
-1.785914364e-03f, 1.817319308e-03f, 1.848718660e-03f, 1.880112367e-03f, 1.911500376e-03f, 1.942882633e-03f, 1.974259084e-03f, 2.005629676e-03f, 2.036994354e-03f, 2.068353065e-03f,
-2.099705756e-03f, 2.131052373e-03f, 2.162392862e-03f, 2.193727169e-03f, 2.225055242e-03f, 2.256377025e-03f, 2.287692467e-03f, 2.319001513e-03f, 2.350304110e-03f, 2.381600204e-03f,
-2.412889742e-03f, 2.444172670e-03f, 2.475448935e-03f, 2.506718483e-03f, 2.537981262e-03f, 2.569237216e-03f, 2.600486294e-03f, 2.631728442e-03f, 2.662963606e-03f, 2.694191733e-03f,
-2.725412769e-03f, 2.756626662e-03f, 2.787833358e-03f, 2.819032803e-03f, 2.850224945e-03f, 2.881409730e-03f, 2.912587105e-03f, 2.943757017e-03f, 2.974919412e-03f, 3.006074237e-03f,
-3.037221440e-03f, 3.068360966e-03f, 3.099492764e-03f, 3.130616779e-03f, 3.161732958e-03f, 3.192841250e-03f, 3.223941599e-03f, 3.255033954e-03f, 3.286118262e-03f, 3.317194469e-03f,
-3.348262522e-03f, 3.379322368e-03f, 3.410373955e-03f, 3.441417229e-03f, 3.472452138e-03f, 3.503478629e-03f, 3.534496648e-03f, 3.565506143e-03f, 3.596507061e-03f, 3.627499350e-03f,
-3.658482956e-03f, 3.689457826e-03f, 3.720423908e-03f, 3.751381149e-03f, 3.782329497e-03f, 3.813268898e-03f, 3.844199300e-03f, 3.875120651e-03f, 3.906032897e-03f, 3.936935986e-03f,
-3.967829865e-03f, 3.998714482e-03f, 4.029589784e-03f, 4.060455719e-03f, 4.091312234e-03f, 4.122159277e-03f, 4.152996794e-03f, 4.183824734e-03f, 4.214643045e-03f, 4.245451672e-03f,
-4.276250566e-03f, 4.307039672e-03f, 4.337818939e-03f, 4.368588313e-03f, 4.399347744e-03f, 4.430097178e-03f, 4.460836564e-03f, 4.491565848e-03f, 4.522284979e-03f, 4.552993905e-03f,
-4.583692573e-03f, 4.614380931e-03f, 4.645058928e-03f, 4.675726510e-03f, 4.706383625e-03f, 4.737030223e-03f, 4.767666250e-03f, 4.798291654e-03f, 4.828906384e-03f, 4.859510388e-03f,
-4.890103613e-03f, 4.920686007e-03f, 4.951257520e-03f, 4.981818098e-03f, 5.012367689e-03f, 5.042906243e-03f, 5.073433707e-03f, 5.103950029e-03f, 5.134455158e-03f, 5.164949042e-03f,
-5.195431628e-03f, 5.225902866e-03f, 5.256362703e-03f, 5.286811088e-03f, 5.317247970e-03f, 5.347673296e-03f, 5.378087015e-03f, 5.408489075e-03f, 5.438879426e-03f, 5.469258014e-03f,
-5.499624790e-03f, 5.529979700e-03f, 5.560322695e-03f, 5.590653722e-03f, 5.620972730e-03f, 5.651279668e-03f, 5.681574484e-03f, 5.711857127e-03f, 5.742127545e-03f, 5.772385688e-03f,
-5.802631504e-03f, 5.832864942e-03f, 5.863085950e-03f, 5.893294478e-03f, 5.923490474e-03f, 5.953673887e-03f, 5.983844666e-03f, 6.014002760e-03f, 6.044148118e-03f, 6.074280689e-03f,
-6.104400422e-03f, 6.134507266e-03f, 6.164601169e-03f, 6.194682081e-03f, 6.224749952e-03f, 6.254804730e-03f, 6.284846364e-03f, 6.314874803e-03f, 6.344889998e-03f, 6.374891896e-03f,
-6.404880448e-03f, 6.434855602e-03f, 6.464817308e-03f, 6.494765515e-03f, 6.524700172e-03f, 6.554621230e-03f, 6.584528636e-03f, 6.614422342e-03f, 6.644302296e-03f, 6.674168448e-03f,
-6.704020747e-03f, 6.733859142e-03f, 6.763683585e-03f, 6.793494023e-03f, 6.823290407e-03f, 6.853072687e-03f, 6.882840811e-03f, 6.912594731e-03f, 6.942334394e-03f, 6.972059753e-03f,
-7.001770755e-03f, 7.031467352e-03f, 7.061149492e-03f, 7.090817126e-03f, 7.120470204e-03f, 7.150108675e-03f, 7.179732490e-03f, 7.209341599e-03f, 7.238935952e-03f, 7.268515498e-03f,
-7.298080188e-03f, 7.327629972e-03f, 7.357164800e-03f, 7.386684623e-03f, 7.416189390e-03f, 7.445679053e-03f, 7.475153560e-03f, 7.504612863e-03f, 7.534056911e-03f, 7.563485656e-03f,
-7.592899047e-03f, 7.622297035e-03f, 7.651679571e-03f, 7.681046605e-03f, 7.710398087e-03f, 7.739733968e-03f, 7.769054199e-03f, 7.798358730e-03f, 7.827647511e-03f, 7.856920495e-03f,
-7.886177630e-03f, 7.915418869e-03f, 7.944644161e-03f, 7.973853458e-03f, 8.003046711e-03f, 8.032223869e-03f, 8.061384885e-03f, 8.090529709e-03f, 8.119658292e-03f, 8.148770585e-03f,
-8.177866539e-03f, 8.206946105e-03f, 8.236009235e-03f, 8.265055879e-03f, 8.294085988e-03f, 8.323099514e-03f, 8.352096408e-03f, 8.381076620e-03f, 8.410040104e-03f, 8.438986809e-03f,
-8.467916687e-03f, 8.496829690e-03f, 8.525725768e-03f, 8.554604874e-03f, 8.583466959e-03f, 8.612311974e-03f, 8.641139871e-03f, 8.669950601e-03f, 8.698744116e-03f, 8.727520368e-03f,
-8.756279309e-03f, 8.785020889e-03f, 8.813745062e-03f, 8.842451777e-03f, 8.871140989e-03f, 8.899812647e-03f, 8.928466705e-03f, 8.957103114e-03f, 8.985721826e-03f, 9.014322793e-03f,
-9.042905967e-03f, 9.071471299e-03f, 9.100018744e-03f, 9.128548251e-03f, 9.157059774e-03f, 9.185553264e-03f, 9.214028674e-03f, 9.242485957e-03f, 9.270925064e-03f, 9.299345947e-03f,
-9.327748560e-03f, 9.356132854e-03f, 9.384498782e-03f, 9.412846296e-03f, 9.441175350e-03f, 9.469485895e-03f, 9.497777884e-03f, 9.526051269e-03f, 9.554306004e-03f, 9.582542041e-03f,
-9.610759332e-03f, 9.638957831e-03f, 9.667137490e-03f, 9.695298263e-03f, 9.723440101e-03f, 9.751562958e-03f, 9.779666787e-03f, 9.807751541e-03f, 9.835817172e-03f, 9.863863635e-03f,
-9.891890881e-03f, 9.919898864e-03f, 9.947887537e-03f, 9.975856854e-03f, 1.000380677e-02f, 1.003173723e-02f, 1.005964820e-02f, 1.008753962e-02f, 1.011541145e-02f, 1.014326365e-02f,
-1.017109616e-02f, 1.019890895e-02f, 1.022670195e-02f, 1.025447514e-02f, 1.028222845e-02f, 1.030996185e-02f, 1.033767529e-02f, 1.036536872e-02f, 1.039304210e-02f, 1.042069537e-02f,
-1.044832850e-02f, 1.047594144e-02f, 1.050353414e-02f, 1.053110655e-02f, 1.055865863e-02f, 1.058619034e-02f, 1.061370162e-02f, 1.064119243e-02f, 1.066866273e-02f, 1.069611247e-02f,
-1.072354160e-02f, 1.075095008e-02f, 1.077833786e-02f, 1.080570490e-02f, 1.083305116e-02f, 1.086037657e-02f, 1.088768111e-02f, 1.091496472e-02f, 1.094222736e-02f, 1.096946898e-02f,
-1.099668954e-02f, 1.102388900e-02f, 1.105106730e-02f, 1.107822441e-02f, 1.110536027e-02f, 1.113247484e-02f, 1.115956808e-02f, 1.118663994e-02f, 1.121369038e-02f, 1.124071935e-02f,
-1.126772681e-02f, 1.129471271e-02f, 1.132167700e-02f, 1.134861965e-02f, 1.137554060e-02f, 1.140243982e-02f, 1.142931725e-02f, 1.145617286e-02f, 1.148300659e-02f, 1.150981841e-02f,
-1.153660827e-02f, 1.156337612e-02f, 1.159012192e-02f, 1.161684563e-02f, 1.164354720e-02f, 1.167022658e-02f, 1.169688374e-02f, 1.172351863e-02f, 1.175013120e-02f, 1.177672140e-02f,
-1.180328921e-02f, 1.182983456e-02f, 1.185635743e-02f, 1.188285775e-02f, 1.190933550e-02f, 1.193579062e-02f, 1.196222307e-02f, 1.198863281e-02f, 1.201501980e-02f, 1.204138398e-02f,
-1.206772532e-02f, 1.209404377e-02f, 1.212033929e-02f, 1.214661184e-02f, 1.217286137e-02f, 1.219908784e-02f, 1.222529120e-02f, 1.225147141e-02f, 1.227762843e-02f, 1.230376221e-02f,
-1.232987272e-02f, 1.235595991e-02f, 1.238202372e-02f, 1.240806413e-02f, 1.243408109e-02f, 1.246007456e-02f, 1.248604448e-02f, 1.251199083e-02f, 1.253791355e-02f, 1.256381261e-02f,
-1.258968796e-02f, 1.261553955e-02f, 1.264136735e-02f, 1.266717131e-02f, 1.269295139e-02f, 1.271870755e-02f, 1.274443974e-02f, 1.277014793e-02f, 1.279583206e-02f, 1.282149210e-02f,
-1.284712800e-02f, 1.287273973e-02f, 1.289832724e-02f, 1.292389048e-02f, 1.294942942e-02f, 1.297494401e-02f, 1.300043421e-02f, 1.302589998e-02f, 1.305134128e-02f, 1.307675806e-02f,
-1.310215029e-02f, 1.312751791e-02f, 1.315286090e-02f, 1.317817920e-02f, 1.320347278e-02f, 1.322874159e-02f, 1.325398559e-02f, 1.327920474e-02f, 1.330439900e-02f, 1.332956833e-02f,
-1.335471268e-02f, 1.337983202e-02f, 1.340492630e-02f, 1.342999548e-02f, 1.345503952e-02f, 1.348005838e-02f, 1.350505201e-02f, 1.353002038e-02f, 1.355496345e-02f, 1.357988117e-02f,
-1.360477351e-02f, 1.362964041e-02f, 1.365448185e-02f, 1.367929778e-02f, 1.370408815e-02f, 1.372885294e-02f, 1.375359209e-02f, 1.377830557e-02f, 1.380299334e-02f, 1.382765535e-02f,
-1.385229156e-02f, 1.387690194e-02f, 1.390148645e-02f, 1.392604503e-02f, 1.395057767e-02f, 1.397508430e-02f, 1.399956490e-02f, 1.402401942e-02f, 1.404844782e-02f, 1.407285006e-02f,
-1.409722610e-02f, 1.412157591e-02f, 1.414589944e-02f, 1.417019665e-02f, 1.419446750e-02f, 1.421871196e-02f, 1.424292998e-02f, 1.426712152e-02f, 1.429128654e-02f, 1.431542500e-02f,
-1.433953687e-02f, 1.436362211e-02f, 1.438768067e-02f, 1.441171251e-02f, 1.443571760e-02f, 1.445969589e-02f, 1.448364736e-02f, 1.450757195e-02f, 1.453146962e-02f, 1.455534035e-02f,
-1.457918409e-02f, 1.460300080e-02f, 1.462679044e-02f, 1.465055297e-02f, 1.467428836e-02f, 1.469799657e-02f, 1.472167755e-02f, 1.474533127e-02f, 1.476895768e-02f, 1.479255676e-02f,
-1.481612846e-02f, 1.483967275e-02f, 1.486318957e-02f, 1.488667891e-02f, 1.491014071e-02f, 1.493357494e-02f, 1.495698156e-02f, 1.498036054e-02f, 1.500371183e-02f, 1.502703539e-02f,
-1.505033120e-02f, 1.507359920e-02f, 1.509683937e-02f, 1.512005166e-02f, 1.514323604e-02f, 1.516639247e-02f, 1.518952090e-02f, 1.521262131e-02f, 1.523569366e-02f, 1.525873790e-02f,
-1.528175401e-02f, 1.530474193e-02f, 1.532770164e-02f, 1.535063310e-02f, 1.537353627e-02f, 1.539641111e-02f, 1.541925759e-02f, 1.544207566e-02f, 1.546486530e-02f, 1.548762646e-02f,
-1.551035910e-02f, 1.553306320e-02f, 1.555573871e-02f, 1.557838560e-02f, 1.560100382e-02f, 1.562359335e-02f, 1.564615414e-02f, 1.566868616e-02f, 1.569118937e-02f, 1.571366374e-02f,
-1.573610922e-02f, 1.575852579e-02f, 1.578091341e-02f, 1.580327203e-02f, 1.582560163e-02f, 1.584790216e-02f, 1.587017360e-02f, 1.589241589e-02f, 1.591462902e-02f, 1.593681294e-02f,
-1.595896762e-02f, 1.598109301e-02f, 1.600318909e-02f, 1.602525582e-02f, 1.604729316e-02f, 1.606930107e-02f, 1.609127953e-02f, 1.611322850e-02f, 1.613514793e-02f, 1.615703779e-02f,
-1.617889806e-02f, 1.620072869e-02f, 1.622252965e-02f, 1.624430089e-02f, 1.626604240e-02f, 1.628775413e-02f, 1.630943604e-02f, 1.633108811e-02f, 1.635271029e-02f, 1.637430256e-02f,
-1.639586487e-02f, 1.641739719e-02f, 1.643889949e-02f, 1.646037173e-02f, 1.648181388e-02f, 1.650322590e-02f, 1.652460776e-02f, 1.654595942e-02f, 1.656728086e-02f, 1.658857202e-02f,
-1.660983289e-02f, 1.663106342e-02f, 1.665226358e-02f, 1.667343334e-02f, 1.669457267e-02f, 1.671568152e-02f, 1.673675986e-02f, 1.675780767e-02f, 1.677882490e-02f, 1.679981153e-02f,
-1.682076752e-02f, 1.684169283e-02f, 1.686258743e-02f, 1.688345129e-02f, 1.690428437e-02f, 1.692508664e-02f, 1.694585807e-02f, 1.696659862e-02f, 1.698730827e-02f, 1.700798697e-02f,
-1.702863469e-02f, 1.704925140e-02f, 1.706983707e-02f, 1.709039167e-02f, 1.711091515e-02f, 1.713140749e-02f, 1.715186866e-02f, 1.717229861e-02f, 1.719269733e-02f, 1.721306477e-02f,
-1.723340091e-02f, 1.725370571e-02f, 1.727397913e-02f, 1.729422115e-02f, 1.731443173e-02f, 1.733461084e-02f, 1.735475846e-02f, 1.737487453e-02f, 1.739495904e-02f, 1.741501195e-02f,
-1.743503323e-02f, 1.745502285e-02f, 1.747498077e-02f, 1.749490696e-02f, 1.751480140e-02f, 1.753466404e-02f, 1.755449486e-02f, 1.757429383e-02f, 1.759406091e-02f, 1.761379607e-02f,
-1.763349928e-02f, 1.765317051e-02f, 1.767280973e-02f, 1.769241690e-02f, 1.771199200e-02f, 1.773153499e-02f, 1.775104584e-02f, 1.777052452e-02f, 1.778997100e-02f, 1.780938525e-02f,
-1.782876724e-02f, 1.784811694e-02f, 1.786743431e-02f, 1.788671932e-02f, 1.790597195e-02f, 1.792519216e-02f, 1.794437992e-02f, 1.796353521e-02f, 1.798265799e-02f, 1.800174822e-02f,
-1.802080589e-02f, 1.803983096e-02f, 1.805882340e-02f, 1.807778317e-02f, 1.809671026e-02f, 1.811560462e-02f, 1.813446624e-02f, 1.815329507e-02f, 1.817209109e-02f, 1.819085427e-02f,
-1.820958458e-02f, 1.822828198e-02f, 1.824694646e-02f, 1.826557798e-02f, 1.828417650e-02f, 1.830274201e-02f, 1.832127447e-02f, 1.833977385e-02f, 1.835824012e-02f, 1.837667326e-02f,
-1.839507323e-02f, 1.841344000e-02f, 1.843177355e-02f, 1.845007385e-02f, 1.846834086e-02f, 1.848657456e-02f, 1.850477492e-02f, 1.852294191e-02f, 1.854107550e-02f, 1.855917566e-02f,
-1.857724237e-02f, 1.859527560e-02f, 1.861327531e-02f, 1.863124148e-02f, 1.864917408e-02f, 1.866707308e-02f, 1.868493846e-02f, 1.870277018e-02f, 1.872056821e-02f, 1.873833254e-02f,
-1.875606313e-02f, 1.877375995e-02f, 1.879142297e-02f, 1.880905217e-02f, 1.882664753e-02f, 1.884420900e-02f, 1.886173656e-02f, 1.887923020e-02f, 1.889668987e-02f, 1.891411555e-02f,
-1.893150721e-02f, 1.894886483e-02f, 1.896618838e-02f, 1.898347783e-02f, 1.900073316e-02f, 1.901795433e-02f, 1.903514132e-02f, 1.905229410e-02f, 1.906941265e-02f, 1.908649694e-02f,
-1.910354694e-02f, 1.912056263e-02f, 1.913754398e-02f, 1.915449095e-02f, 1.917140353e-02f, 1.918828170e-02f, 1.920512541e-02f, 1.922193465e-02f, 1.923870939e-02f, 1.925544960e-02f,
-1.927215526e-02f, 1.928882633e-02f, 1.930546281e-02f, 1.932206465e-02f, 1.933863183e-02f, 1.935516434e-02f, 1.937166213e-02f, 1.938812518e-02f, 1.940455348e-02f, 1.942094699e-02f,
-1.943730569e-02f, 1.945362954e-02f, 1.946991854e-02f, 1.948617265e-02f, 1.950239184e-02f, 1.951857610e-02f, 1.953472538e-02f, 1.955083968e-02f, 1.956691897e-02f, 1.958296321e-02f,
-1.959897239e-02f, 1.961494648e-02f, 1.963088546e-02f, 1.964678929e-02f, 1.966265796e-02f, 1.967849144e-02f, 1.969428971e-02f, 1.971005274e-02f, 1.972578051e-02f, 1.974147299e-02f,
-1.975713015e-02f, 1.977275198e-02f, 1.978833846e-02f, 1.980388954e-02f, 1.981940522e-02f, 1.983488547e-02f, 1.985033026e-02f, 1.986573956e-02f, 1.988111337e-02f, 1.989645164e-02f,
-1.991175437e-02f, 1.992702152e-02f, 1.994225306e-02f, 1.995744899e-02f, 1.997260927e-02f, 1.998773388e-02f, 2.000282280e-02f, 2.001787600e-02f, 2.003289346e-02f, 2.004787515e-02f,
-2.006282107e-02f, 2.007773117e-02f, 2.009260544e-02f, 2.010744385e-02f, 2.012224639e-02f, 2.013701303e-02f, 2.015174374e-02f, 2.016643851e-02f, 2.018109731e-02f, 2.019572011e-02f,
-2.021030691e-02f, 2.022485766e-02f, 2.023937236e-02f, 2.025385098e-02f, 2.026829350e-02f, 2.028269989e-02f, 2.029707013e-02f, 2.031140420e-02f, 2.032570208e-02f, 2.033996375e-02f,
-2.035418919e-02f, 2.036837836e-02f, 2.038253126e-02f, 2.039664786e-02f, 2.041072814e-02f, 2.042477207e-02f, 2.043877964e-02f, 2.045275082e-02f, 2.046668560e-02f, 2.048058394e-02f,
-2.049444584e-02f, 2.050827126e-02f, 2.052206020e-02f, 2.053581262e-02f, 2.054952850e-02f, 2.056320783e-02f, 2.057685059e-02f, 2.059045675e-02f, 2.060402629e-02f, 2.061755919e-02f,
-2.063105544e-02f, 2.064451500e-02f, 2.065793787e-02f, 2.067132402e-02f, 2.068467342e-02f, 2.069798607e-02f, 2.071126194e-02f, 2.072450100e-02f, 2.073770325e-02f, 2.075086866e-02f,
-2.076399720e-02f, 2.077708887e-02f, 2.079014363e-02f, 2.080316148e-02f, 2.081614238e-02f, 2.082908633e-02f, 2.084199330e-02f, 2.085486327e-02f, 2.086769622e-02f, 2.088049214e-02f,
-2.089325100e-02f, 2.090597278e-02f, 2.091865748e-02f, 2.093130506e-02f, 2.094391550e-02f, 2.095648880e-02f, 2.096902492e-02f, 2.098152386e-02f, 2.099398559e-02f, 2.100641009e-02f,
-2.101879735e-02f, 2.103114735e-02f, 2.104346006e-02f, 2.105573547e-02f, 2.106797357e-02f, 2.108017432e-02f, 2.109233773e-02f, 2.110446376e-02f, 2.111655239e-02f, 2.112860362e-02f,
-2.114061743e-02f, 2.115259378e-02f, 2.116453268e-02f, 2.117643409e-02f, 2.118829801e-02f, 2.120012441e-02f, 2.121191327e-02f, 2.122366459e-02f, 2.123537834e-02f, 2.124705450e-02f,
-2.125869306e-02f, 2.127029399e-02f, 2.128185730e-02f, 2.129338294e-02f, 2.130487092e-02f, 2.131632121e-02f, 2.132773379e-02f, 2.133910865e-02f, 2.135044577e-02f, 2.136174513e-02f,
-2.137300673e-02f, 2.138423053e-02f, 2.139541653e-02f, 2.140656471e-02f, 2.141767505e-02f, 2.142874754e-02f, 2.143978215e-02f, 2.145077888e-02f, 2.146173771e-02f, 2.147265862e-02f,
-2.148354159e-02f, 2.149438661e-02f, 2.150519367e-02f, 2.151596274e-02f, 2.152669382e-02f, 2.153738688e-02f, 2.154804192e-02f, 2.155865891e-02f, 2.156923784e-02f, 2.157977869e-02f,
-2.159028146e-02f, 2.160074612e-02f, 2.161117265e-02f, 2.162156106e-02f, 2.163191131e-02f, 2.164222339e-02f, 2.165249730e-02f, 2.166273300e-02f, 2.167293050e-02f, 2.168308978e-02f,
-2.169321081e-02f, 2.170329359e-02f, 2.171333810e-02f, 2.172334433e-02f, 2.173331226e-02f, 2.174324187e-02f, 2.175313317e-02f, 2.176298612e-02f, 2.177280072e-02f, 2.178257695e-02f,
-2.179231479e-02f, 2.180201424e-02f, 2.181167529e-02f, 2.182129790e-02f, 2.183088209e-02f, 2.184042781e-02f, 2.184993508e-02f, 2.185940387e-02f, 2.186883416e-02f, 2.187822596e-02f,
-2.188757923e-02f, 2.189689397e-02f, 2.190617017e-02f, 2.191540781e-02f, 2.192460688e-02f, 2.193376737e-02f, 2.194288926e-02f, 2.195197254e-02f, 2.196101720e-02f, 2.197002323e-02f,
-2.197899061e-02f, 2.198791933e-02f, 2.199680938e-02f, 2.200566074e-02f, 2.201447341e-02f, 2.202324736e-02f, 2.203198260e-02f, 2.204067910e-02f, 2.204933686e-02f, 2.205795586e-02f,
-2.206653609e-02f, 2.207507755e-02f, 2.208358020e-02f, 2.209204406e-02f, 2.210046909e-02f, 2.210885530e-02f, 2.211720267e-02f, 2.212551119e-02f, 2.213378085e-02f, 2.214201163e-02f,
-2.215020353e-02f, 2.215835653e-02f, 2.216647063e-02f, 2.217454581e-02f, 2.218258206e-02f, 2.219057937e-02f, 2.219853772e-02f, 2.220645712e-02f, 2.221433755e-02f, 2.222217899e-02f,
-2.222998144e-02f, 2.223774488e-02f, 2.224546931e-02f, 2.225315472e-02f, 2.226080109e-02f, 2.226840841e-02f, 2.227597668e-02f, 2.228350589e-02f, 2.229099602e-02f, 2.229844706e-02f,
-2.230585901e-02f, 2.231323185e-02f, 2.232056558e-02f, 2.232786018e-02f, 2.233511565e-02f, 2.234233198e-02f, 2.234950915e-02f, 2.235664716e-02f, 2.236374600e-02f, 2.237080566e-02f,
-2.237782612e-02f, 2.238480739e-02f, 2.239174945e-02f, 2.239865229e-02f, 2.240551591e-02f, 2.241234029e-02f, 2.241912542e-02f, 2.242587130e-02f, 2.243257792e-02f, 2.243924527e-02f,
-2.244587335e-02f, 2.245246213e-02f, 2.245901162e-02f, 2.246552181e-02f, 2.247199268e-02f, 2.247842423e-02f, 2.248481646e-02f, 2.249116935e-02f, 2.249748289e-02f, 2.250375708e-02f,
-2.250999192e-02f, 2.251618738e-02f, 2.252234347e-02f, 2.252846017e-02f, 2.253453749e-02f, 2.254057541e-02f, 2.254657392e-02f, 2.255253301e-02f, 2.255845269e-02f, 2.256433294e-02f,
-2.257017376e-02f, 2.257597513e-02f, 2.258173706e-02f, 2.258745953e-02f, 2.259314253e-02f, 2.259878607e-02f, 2.260439013e-02f, 2.260995471e-02f, 2.261547980e-02f, 2.262096539e-02f,
-2.262641149e-02f, 2.263181807e-02f, 2.263718514e-02f, 2.264251268e-02f, 2.264780070e-02f, 2.265304918e-02f, 2.265825813e-02f, 2.266342753e-02f, 2.266855738e-02f, 2.267364767e-02f,
-2.267869839e-02f, 2.268370955e-02f, 2.268868113e-02f, 2.269361314e-02f, 2.269850556e-02f, 2.270335838e-02f, 2.270817161e-02f, 2.271294524e-02f, 2.271767926e-02f, 2.272237367e-02f,
-2.272702846e-02f, 2.273164363e-02f, 2.273621918e-02f, 2.274075509e-02f, 2.274525136e-02f, 2.274970799e-02f, 2.275412498e-02f, 2.275850231e-02f, 2.276283999e-02f, 2.276713801e-02f,
-2.277139636e-02f, 2.277561505e-02f, 2.277979406e-02f, 2.278393340e-02f, 2.278803305e-02f, 2.279209302e-02f, 2.279611330e-02f, 2.280009389e-02f, 2.280403478e-02f, 2.280793597e-02f,
-2.281179745e-02f, 2.281561923e-02f, 2.281940129e-02f, 2.282314364e-02f, 2.282684627e-02f, 2.283050918e-02f, 2.283413236e-02f, 2.283771581e-02f, 2.284125953e-02f, 2.284476352e-02f,
-2.284822777e-02f, 2.285165228e-02f, 2.285503704e-02f, 2.285838206e-02f, 2.286168732e-02f, 2.286495284e-02f, 2.286817860e-02f, 2.287136460e-02f, 2.287451085e-02f, 2.287761733e-02f,
-2.288068404e-02f, 2.288371099e-02f, 2.288669817e-02f, 2.288964558e-02f, 2.289255322e-02f, 2.289542108e-02f, 2.289824916e-02f, 2.290103747e-02f, 2.290378599e-02f, 2.290649474e-02f,
-2.290916369e-02f, 2.291179286e-02f, 2.291438225e-02f, 2.291693184e-02f, 2.291944165e-02f, 2.292191166e-02f, 2.292434189e-02f, 2.292673231e-02f, 2.292908295e-02f, 2.293139378e-02f,
-2.293366482e-02f, 2.293589606e-02f, 2.293808751e-02f, 2.294023915e-02f, 2.294235099e-02f, 2.294442304e-02f, 2.294645528e-02f, 2.294844772e-02f, 2.295040036e-02f, 2.295231319e-02f,
-2.295418622e-02f, 2.295601945e-02f, 2.295781288e-02f, 2.295956650e-02f, 2.296128032e-02f, 2.296295433e-02f, 2.296458855e-02f, 2.296618296e-02f, 2.296773756e-02f, 2.296925237e-02f,
-2.297072737e-02f, 2.297216257e-02f, 2.297355797e-02f, 2.297491357e-02f, 2.297622937e-02f, 2.297750538e-02f, 2.297874158e-02f, 2.297993799e-02f, 2.298109460e-02f, 2.298221141e-02f,
-2.298328843e-02f, 2.298432566e-02f, 2.298532310e-02f, 2.298628074e-02f, 2.298719860e-02f, 2.298807667e-02f, 2.298891495e-02f, 2.298971345e-02f, 2.299047217e-02f, 2.299119110e-02f,
-2.299187026e-02f, 2.299250964e-02f, 2.299310924e-02f, 2.299366907e-02f, 2.299418912e-02f, 2.299466941e-02f, 2.299510993e-02f, 2.299551069e-02f, 2.299587168e-02f, 2.299619291e-02f,
-2.299647438e-02f, 2.299671610e-02f, 2.299691807e-02f, 2.299708028e-02f, 2.299720275e-02f, 2.299728548e-02f, 2.299732846e-02f, 2.299733170e-02f, 2.299729521e-02f, 2.299721898e-02f,
-2.299710303e-02f, 2.299694735e-02f, 2.299675194e-02f, 2.299651682e-02f, 2.299624198e-02f, 2.299592742e-02f, 2.299557316e-02f, 2.299517919e-02f, 2.299474552e-02f, 2.299427215e-02f,
-2.299375909e-02f, 2.299320634e-02f, 2.299261390e-02f, 2.299198177e-02f, 2.299130997e-02f, 2.299059850e-02f, 2.298984735e-02f, 2.298905654e-02f, 2.298822607e-02f, 2.298735594e-02f,
-2.298644616e-02f, 2.298549673e-02f, 2.298450766e-02f, 2.298347895e-02f, 2.298241060e-02f, 2.298130263e-02f, 2.298015503e-02f, 2.297896782e-02f, 2.297774099e-02f, 2.297647455e-02f,
-2.297516850e-02f, 2.297382286e-02f, 2.297243763e-02f, 2.297101281e-02f, 2.296954840e-02f, 2.296804442e-02f, 2.296650087e-02f, 2.296491775e-02f, 2.296329508e-02f, 2.296163285e-02f,
-2.295993107e-02f, 2.295818975e-02f, 2.295640889e-02f, 2.295458850e-02f, 2.295272859e-02f, 2.295082916e-02f, 2.294889022e-02f, 2.294691178e-02f, 2.294489383e-02f, 2.294283640e-02f,
-2.294073948e-02f, 2.293860307e-02f, 2.293642720e-02f, 2.293421186e-02f, 2.293195706e-02f, 2.292966281e-02f, 2.292732912e-02f, 2.292495599e-02f, 2.292254342e-02f, 2.292009144e-02f,
-2.291760003e-02f, 2.291506922e-02f, 2.291249900e-02f, 2.290988939e-02f, 2.290724040e-02f, 2.290455202e-02f, 2.290182427e-02f, 2.289905716e-02f, 2.289625069e-02f, 2.289340487e-02f,
-2.289051971e-02f, 2.288759522e-02f, 2.288463141e-02f, 2.288162827e-02f, 2.287858583e-02f, 2.287550409e-02f, 2.287238306e-02f, 2.286922274e-02f, 2.286602315e-02f, 2.286278429e-02f,
-2.285950617e-02f, 2.285618881e-02f, 2.285283220e-02f, 2.284943636e-02f, 2.284600130e-02f, 2.284252702e-02f, 2.283901354e-02f, 2.283546086e-02f, 2.283186899e-02f, 2.282823795e-02f,
-2.282456773e-02f, 2.282085836e-02f, 2.281710984e-02f, 2.281332218e-02f, 2.280949538e-02f, 2.280562946e-02f, 2.280172443e-02f, 2.279778030e-02f, 2.279379708e-02f, 2.278977477e-02f,
-2.278571339e-02f, 2.278161295e-02f, 2.277747345e-02f, 2.277329492e-02f, 2.276907734e-02f, 2.276482075e-02f, 2.276052514e-02f, 2.275619054e-02f, 2.275181694e-02f, 2.274740436e-02f,
-2.274295281e-02f, 2.273846230e-02f, 2.273393284e-02f, 2.272936444e-02f, 2.272475712e-02f, 2.272011088e-02f, 2.271542573e-02f, 2.271070169e-02f, 2.270593876e-02f, 2.270113697e-02f,
-2.269629631e-02f, 2.269141680e-02f, 2.268649846e-02f, 2.268154128e-02f, 2.267654530e-02f, 2.267151050e-02f, 2.266643692e-02f, 2.266132455e-02f, 2.265617342e-02f, 2.265098353e-02f,
-2.264575489e-02f, 2.264048752e-02f, 2.263518143e-02f, 2.262983663e-02f, 2.262445313e-02f, 2.261903095e-02f, 2.261357010e-02f, 2.260807058e-02f, 2.260253242e-02f, 2.259695562e-02f,
-2.259134020e-02f, 2.258568617e-02f, 2.257999354e-02f, 2.257426233e-02f, 2.256849255e-02f, 2.256268420e-02f, 2.255683731e-02f, 2.255095189e-02f, 2.254502795e-02f, 2.253906550e-02f,
-2.253306456e-02f, 2.252702513e-02f, 2.252094724e-02f, 2.251483090e-02f, 2.250867611e-02f, 2.250248290e-02f, 2.249625128e-02f, 2.248998125e-02f, 2.248367284e-02f, 2.247732606e-02f,
-2.247094092e-02f, 2.246451744e-02f, 2.245805562e-02f, 2.245155549e-02f, 2.244501706e-02f, 2.243844034e-02f, 2.243182534e-02f, 2.242517209e-02f, 2.241848059e-02f, 2.241175086e-02f,
-2.240498292e-02f, 2.239817677e-02f, 2.239133243e-02f, 2.238444993e-02f, 2.237752927e-02f, 2.237057046e-02f, 2.236357353e-02f, 2.235653848e-02f, 2.234946534e-02f, 2.234235411e-02f,
-2.233520481e-02f, 2.232801747e-02f, 2.232079208e-02f, 2.231352868e-02f, 2.230622727e-02f, 2.229888786e-02f, 2.229151049e-02f, 2.228409515e-02f, 2.227664187e-02f, 2.226915066e-02f,
-2.226162154e-02f, 2.225405452e-02f, 2.224644962e-02f, 2.223880685e-02f, 2.223112624e-02f, 2.222340779e-02f, 2.221565153e-02f, 2.220785747e-02f, 2.220002562e-02f, 2.219215601e-02f,
-2.218424864e-02f, 2.217630354e-02f, 2.216832073e-02f, 2.216030021e-02f, 2.215224200e-02f, 2.214414613e-02f, 2.213601261e-02f, 2.212784145e-02f, 2.211963268e-02f, 2.211138630e-02f,
-2.210310234e-02f, 2.209478082e-02f, 2.208642174e-02f, 2.207802514e-02f, 2.206959102e-02f, 2.206111940e-02f, 2.205261031e-02f, 2.204406375e-02f, 2.203547975e-02f, 2.202685832e-02f,
-2.201819948e-02f, 2.200950325e-02f, 2.200076964e-02f, 2.199199868e-02f, 2.198319039e-02f, 2.197434477e-02f, 2.196546185e-02f, 2.195654165e-02f, 2.194758418e-02f, 2.193858947e-02f,
-2.192955752e-02f, 2.192048837e-02f, 2.191138202e-02f, 2.190223851e-02f, 2.189305783e-02f, 2.188384002e-02f, 2.187458510e-02f, 2.186529307e-02f, 2.185596397e-02f, 2.184659780e-02f,
-2.183719459e-02f, 2.182775436e-02f, 2.181827713e-02f, 2.180876291e-02f, 2.179921172e-02f, 2.178962359e-02f, 2.177999853e-02f, 2.177033657e-02f, 2.176063771e-02f, 2.175090199e-02f,
-2.174112942e-02f, 2.173132002e-02f, 2.172147381e-02f, 2.171159081e-02f, 2.170167104e-02f, 2.169171452e-02f, 2.168172127e-02f, 2.167169131e-02f, 2.166162466e-02f, 2.165152134e-02f,
-2.164138137e-02f, 2.163120477e-02f, 2.162099156e-02f, 2.161074176e-02f, 2.160045540e-02f, 2.159013248e-02f, 2.157977304e-02f, 2.156937709e-02f, 2.155894466e-02f, 2.154847576e-02f,
-2.153797042e-02f, 2.152742865e-02f, 2.151685048e-02f, 2.150623593e-02f, 2.149558502e-02f, 2.148489777e-02f, 2.147417420e-02f, 2.146341433e-02f, 2.145261819e-02f, 2.144178579e-02f,
-2.143091716e-02f, 2.142001232e-02f, 2.140907129e-02f, 2.139809409e-02f, 2.138708075e-02f, 2.137603128e-02f, 2.136494570e-02f, 2.135382405e-02f, 2.134266634e-02f, 2.133147258e-02f,
-2.132024282e-02f, 2.130897706e-02f, 2.129767533e-02f, 2.128633765e-02f, 2.127496404e-02f, 2.126355453e-02f, 2.125210914e-02f, 2.124062788e-02f, 2.122911080e-02f, 2.121755789e-02f,
-2.120596920e-02f, 2.119434473e-02f, 2.118268452e-02f, 2.117098859e-02f, 2.115925695e-02f, 2.114748964e-02f, 2.113568668e-02f, 2.112384808e-02f, 2.111197387e-02f, 2.110006408e-02f,
-2.108811872e-02f, 2.107613783e-02f, 2.106412142e-02f, 2.105206952e-02f, 2.103998215e-02f, 2.102785934e-02f, 2.101570110e-02f, 2.100350747e-02f, 2.099127846e-02f, 2.097901410e-02f,
-2.096671442e-02f, 2.095437943e-02f, 2.094200917e-02f, 2.092960365e-02f, 2.091716289e-02f, 2.090468694e-02f, 2.089217580e-02f, 2.087962950e-02f, 2.086704807e-02f, 2.085443152e-02f,
-2.084177990e-02f, 2.082909321e-02f, 2.081637149e-02f, 2.080361475e-02f, 2.079082303e-02f, 2.077799635e-02f, 2.076513473e-02f, 2.075223819e-02f, 2.073930677e-02f, 2.072634049e-02f,
-2.071333937e-02f, 2.070030343e-02f, 2.068723271e-02f, 2.067412723e-02f, 2.066098701e-02f, 2.064781208e-02f, 2.063460246e-02f, 2.062135818e-02f, 2.060807926e-02f, 2.059476573e-02f,
-2.058141762e-02f, 2.056803495e-02f, 2.055461775e-02f, 2.054116604e-02f, 2.052767985e-02f, 2.051415920e-02f, 2.050060413e-02f, 2.048701464e-02f, 2.047339079e-02f, 2.045973258e-02f,
-2.044604004e-02f, 2.043231320e-02f, 2.041855209e-02f, 2.040475674e-02f, 2.039092716e-02f, 2.037706339e-02f, 2.036316546e-02f, 2.034923338e-02f, 2.033526719e-02f, 2.032126690e-02f,
-2.030723256e-02f, 2.029316419e-02f, 2.027906181e-02f, 2.026492544e-02f, 2.025075513e-02f, 2.023655088e-02f, 2.022231274e-02f, 2.020804073e-02f, 2.019373487e-02f, 2.017939519e-02f,
-2.016502172e-02f, 2.015061449e-02f, 2.013617352e-02f, 2.012169885e-02f, 2.010719049e-02f, 2.009264848e-02f, 2.007807285e-02f, 2.006346361e-02f, 2.004882081e-02f, 2.003414446e-02f,
-2.001943460e-02f, 2.000469125e-02f, 1.998991445e-02f, 1.997510421e-02f, 1.996026057e-02f, 1.994538356e-02f, 1.993047320e-02f, 1.991552952e-02f, 1.990055255e-02f, 1.988554232e-02f,
-1.987049885e-02f, 1.985542219e-02f, 1.984031234e-02f, 1.982516935e-02f, 1.980999324e-02f, 1.979478404e-02f, 1.977954178e-02f, 1.976426648e-02f, 1.974895818e-02f, 1.973361691e-02f,
-1.971824269e-02f, 1.970283555e-02f, 1.968739553e-02f, 1.967192264e-02f, 1.965641693e-02f, 1.964087841e-02f, 1.962530713e-02f, 1.960970310e-02f, 1.959406636e-02f, 1.957839694e-02f,
-1.956269486e-02f, 1.954696016e-02f, 1.953119287e-02f, 1.951539301e-02f, 1.949956061e-02f, 1.948369571e-02f, 1.946779834e-02f, 1.945186852e-02f, 1.943590628e-02f, 1.941991166e-02f,
-1.940388468e-02f, 1.938782538e-02f, 1.937173378e-02f, 1.935560991e-02f, 1.933945381e-02f, 1.932326551e-02f, 1.930704503e-02f, 1.929079241e-02f, 1.927450767e-02f, 1.925819085e-02f,
-1.924184198e-02f, 1.922546109e-02f, 1.920904821e-02f, 1.919260336e-02f, 1.917612659e-02f, 1.915961792e-02f, 1.914307738e-02f, 1.912650500e-02f, 1.910990082e-02f, 1.909326486e-02f,
-1.907659716e-02f, 1.905989774e-02f, 1.904316665e-02f, 1.902640390e-02f, 1.900960953e-02f, 1.899278358e-02f, 1.897592607e-02f, 1.895903704e-02f, 1.894211651e-02f, 1.892516452e-02f,
-1.890818110e-02f, 1.889116629e-02f, 1.887412010e-02f, 1.885704259e-02f, 1.883993376e-02f, 1.882279367e-02f, 1.880562234e-02f, 1.878841980e-02f, 1.877118609e-02f, 1.875392123e-02f,
-1.873662526e-02f, 1.871929821e-02f, 1.870194012e-02f, 1.868455101e-02f, 1.866713092e-02f, 1.864967988e-02f, 1.863219792e-02f, 1.861468508e-02f, 1.859714139e-02f, 1.857956687e-02f,
-1.856196157e-02f, 1.854432552e-02f, 1.852665874e-02f, 1.850896128e-02f, 1.849123316e-02f, 1.847347441e-02f, 1.845568508e-02f, 1.843786519e-02f, 1.842001478e-02f, 1.840213387e-02f,
-1.838422251e-02f, 1.836628072e-02f, 1.834830854e-02f, 1.833030600e-02f, 1.831227314e-02f, 1.829420999e-02f, 1.827611658e-02f, 1.825799294e-02f, 1.823983912e-02f, 1.822165513e-02f,
-1.820344103e-02f, 1.818519683e-02f, 1.816692258e-02f, 1.814861830e-02f, 1.813028404e-02f, 1.811191982e-02f, 1.809352568e-02f, 1.807510165e-02f, 1.805664778e-02f, 1.803816408e-02f,
-1.801965060e-02f, 1.800110737e-02f, 1.798253442e-02f, 1.796393179e-02f, 1.794529951e-02f, 1.792663762e-02f, 1.790794615e-02f, 1.788922514e-02f, 1.787047462e-02f, 1.785169462e-02f,
-1.783288518e-02f, 1.781404634e-02f, 1.779517812e-02f, 1.777628057e-02f, 1.775735372e-02f, 1.773839760e-02f, 1.771941225e-02f, 1.770039770e-02f, 1.768135399e-02f, 1.766228116e-02f,
-1.764317923e-02f, 1.762404824e-02f, 1.760488824e-02f, 1.758569925e-02f, 1.756648130e-02f, 1.754723444e-02f, 1.752795871e-02f, 1.750865412e-02f, 1.748932073e-02f, 1.746995857e-02f,
-1.745056766e-02f, 1.743114806e-02f, 1.741169978e-02f, 1.739222288e-02f, 1.737271738e-02f, 1.735318332e-02f, 1.733362074e-02f, 1.731402967e-02f, 1.729441015e-02f, 1.727476221e-02f,
-1.725508589e-02f, 1.723538123e-02f, 1.721564826e-02f, 1.719588702e-02f, 1.717609754e-02f, 1.715627987e-02f, 1.713643403e-02f, 1.711656007e-02f, 1.709665802e-02f, 1.707672791e-02f,
-1.705676979e-02f, 1.703678368e-02f, 1.701676963e-02f, 1.699672768e-02f, 1.697665785e-02f, 1.695656019e-02f, 1.693643474e-02f, 1.691628152e-02f, 1.689610058e-02f, 1.687589195e-02f,
-1.685565568e-02f, 1.683539179e-02f, 1.681510033e-02f, 1.679478132e-02f, 1.677443482e-02f, 1.675406085e-02f, 1.673365946e-02f, 1.671323067e-02f, 1.669277454e-02f, 1.667229109e-02f,
-1.665178036e-02f, 1.663124239e-02f, 1.661067722e-02f, 1.659008488e-02f, 1.656946542e-02f, 1.654881886e-02f, 1.652814526e-02f, 1.650744464e-02f, 1.648671704e-02f, 1.646596250e-02f,
-1.644518106e-02f, 1.642437276e-02f, 1.640353763e-02f, 1.638267572e-02f, 1.636178706e-02f, 1.634087168e-02f, 1.631992963e-02f, 1.629896095e-02f, 1.627796567e-02f, 1.625694383e-02f,
-1.623589547e-02f, 1.621482063e-02f, 1.619371934e-02f, 1.617259165e-02f, 1.615143759e-02f, 1.613025721e-02f, 1.610905053e-02f, 1.608781760e-02f, 1.606655846e-02f, 1.604527315e-02f,
-1.602396170e-02f, 1.600262415e-02f, 1.598126054e-02f, 1.595987092e-02f, 1.593845531e-02f, 1.591701377e-02f, 1.589554632e-02f, 1.587405301e-02f, 1.585253387e-02f, 1.583098895e-02f,
-1.580941828e-02f, 1.578782190e-02f, 1.576619986e-02f, 1.574455219e-02f, 1.572287893e-02f, 1.570118012e-02f, 1.567945579e-02f, 1.565770600e-02f, 1.563593077e-02f, 1.561413016e-02f,
-1.559230418e-02f, 1.557045290e-02f, 1.554857634e-02f, 1.552667455e-02f, 1.550474756e-02f, 1.548279542e-02f, 1.546081817e-02f, 1.543881583e-02f, 1.541678847e-02f, 1.539473611e-02f,
-1.537265879e-02f, 1.535055656e-02f, 1.532842945e-02f, 1.530627750e-02f, 1.528410076e-02f, 1.526189927e-02f, 1.523967306e-02f, 1.521742218e-02f, 1.519514666e-02f, 1.517284654e-02f,
-1.515052188e-02f, 1.512817269e-02f, 1.510579904e-02f, 1.508340095e-02f, 1.506097847e-02f, 1.503853164e-02f, 1.501606050e-02f, 1.499356509e-02f, 1.497104544e-02f, 1.494850161e-02f,
-1.492593363e-02f, 1.490334154e-02f, 1.488072538e-02f, 1.485808520e-02f, 1.483542103e-02f, 1.481273292e-02f, 1.479002090e-02f, 1.476728502e-02f, 1.474452532e-02f, 1.472174184e-02f,
-1.469893462e-02f, 1.467610370e-02f, 1.465324913e-02f, 1.463037094e-02f, 1.460746917e-02f, 1.458454387e-02f, 1.456159508e-02f, 1.453862284e-02f, 1.451562719e-02f, 1.449260817e-02f,
-1.446956582e-02f, 1.444650019e-02f, 1.442341132e-02f, 1.440029924e-02f, 1.437716401e-02f, 1.435400565e-02f, 1.433082422e-02f, 1.430761975e-02f, 1.428439229e-02f, 1.426114188e-02f,
-1.423786856e-02f, 1.421457237e-02f, 1.419125336e-02f, 1.416791156e-02f, 1.414454702e-02f, 1.412115978e-02f, 1.409774988e-02f, 1.407431737e-02f, 1.405086228e-02f, 1.402738467e-02f,
-1.400388456e-02f, 1.398036200e-02f, 1.395681704e-02f, 1.393324972e-02f, 1.390966008e-02f, 1.388604816e-02f, 1.386241400e-02f, 1.383875766e-02f, 1.381507916e-02f, 1.379137855e-02f,
-1.376765588e-02f, 1.374391119e-02f, 1.372014451e-02f, 1.369635590e-02f, 1.367254539e-02f, 1.364871303e-02f, 1.362485886e-02f, 1.360098293e-02f, 1.357708527e-02f, 1.355316593e-02f,
-1.352922496e-02f, 1.350526238e-02f, 1.348127826e-02f, 1.345727263e-02f, 1.343324553e-02f, 1.340919701e-02f, 1.338512711e-02f, 1.336103587e-02f, 1.333692334e-02f, 1.331278955e-02f,
-1.328863457e-02f, 1.326445841e-02f, 1.324026114e-02f, 1.321604279e-02f, 1.319180340e-02f, 1.316754303e-02f, 1.314326171e-02f, 1.311895948e-02f, 1.309463640e-02f, 1.307029250e-02f,
-1.304592782e-02f, 1.302154242e-02f, 1.299713633e-02f, 1.297270960e-02f, 1.294826227e-02f, 1.292379439e-02f, 1.289930599e-02f, 1.287479713e-02f, 1.285026784e-02f, 1.282571818e-02f,
-1.280114818e-02f, 1.277655789e-02f, 1.275194735e-02f, 1.272731661e-02f, 1.270266571e-02f, 1.267799469e-02f, 1.265330360e-02f, 1.262859248e-02f, 1.260386138e-02f, 1.257911035e-02f,
-1.255433941e-02f, 1.252954863e-02f, 1.250473804e-02f, 1.247990769e-02f, 1.245505762e-02f, 1.243018787e-02f, 1.240529850e-02f, 1.238038954e-02f, 1.235546105e-02f, 1.233051305e-02f,
-1.230554561e-02f, 1.228055876e-02f, 1.225555255e-02f, 1.223052702e-02f, 1.220548222e-02f, 1.218041819e-02f, 1.215533497e-02f, 1.213023262e-02f, 1.210511117e-02f, 1.207997068e-02f,
-1.205481118e-02f, 1.202963272e-02f, 1.200443534e-02f, 1.197921910e-02f, 1.195398403e-02f, 1.192873018e-02f, 1.190345760e-02f, 1.187816632e-02f, 1.185285641e-02f, 1.182752789e-02f,
-1.180218081e-02f, 1.177681523e-02f, 1.175143119e-02f, 1.172602872e-02f, 1.170060788e-02f, 1.167516871e-02f, 1.164971126e-02f, 1.162423557e-02f, 1.159874168e-02f, 1.157322965e-02f,
-1.154769952e-02f, 1.152215133e-02f, 1.149658513e-02f, 1.147100096e-02f, 1.144539888e-02f, 1.141977891e-02f, 1.139414112e-02f, 1.136848555e-02f, 1.134281223e-02f, 1.131712123e-02f,
-1.129141258e-02f, 1.126568632e-02f, 1.123994251e-02f, 1.121418120e-02f, 1.118840241e-02f, 1.116260621e-02f, 1.113679264e-02f, 1.111096174e-02f, 1.108511356e-02f, 1.105924815e-02f,
-1.103336554e-02f, 1.100746580e-02f, 1.098154895e-02f, 1.095561506e-02f, 1.092966416e-02f, 1.090369630e-02f, 1.087771153e-02f, 1.085170990e-02f, 1.082569144e-02f, 1.079965621e-02f,
-1.077360425e-02f, 1.074753561e-02f, 1.072145033e-02f, 1.069534846e-02f, 1.066923005e-02f, 1.064309515e-02f, 1.061694379e-02f, 1.059077603e-02f, 1.056459191e-02f, 1.053839148e-02f,
-1.051217479e-02f, 1.048594187e-02f, 1.045969279e-02f, 1.043342758e-02f, 1.040714629e-02f, 1.038084897e-02f, 1.035453566e-02f, 1.032820641e-02f, 1.030186127e-02f, 1.027550028e-02f,
-1.024912350e-02f, 1.022273096e-02f, 1.019632272e-02f, 1.016989882e-02f, 1.014345930e-02f, 1.011700422e-02f, 1.009053362e-02f, 1.006404755e-02f, 1.003754606e-02f, 1.001102918e-02f,
-9.984496979e-03f, 9.957949490e-03f, 9.931386763e-03f, 9.904808846e-03f, 9.878215786e-03f, 9.851607629e-03f, 9.824984424e-03f, 9.798346216e-03f, 9.771693053e-03f, 9.745024982e-03f,
-9.718342050e-03f, 9.691644304e-03f, 9.664931792e-03f, 9.638204560e-03f, 9.611462657e-03f, 9.584706128e-03f, 9.557935022e-03f, 9.531149386e-03f, 9.504349266e-03f, 9.477534711e-03f,
-9.450705768e-03f, 9.423862484e-03f, 9.397004906e-03f, 9.370133082e-03f, 9.343247059e-03f, 9.316346885e-03f, 9.289432608e-03f, 9.262504274e-03f, 9.235561931e-03f, 9.208605627e-03f,
-9.181635410e-03f, 9.154651327e-03f, 9.127653425e-03f, 9.100641752e-03f, 9.073616356e-03f, 9.046577284e-03f, 9.019524585e-03f, 8.992458306e-03f, 8.965378494e-03f, 8.938285197e-03f,
-8.911178464e-03f, 8.884058341e-03f, 8.856924877e-03f, 8.829778120e-03f, 8.802618117e-03f, 8.775444916e-03f, 8.748258565e-03f, 8.721059112e-03f, 8.693846605e-03f, 8.666621092e-03f,
-8.639382621e-03f, 8.612131240e-03f, 8.584866996e-03f, 8.557589938e-03f, 8.530300113e-03f, 8.502997571e-03f, 8.475682359e-03f, 8.448354524e-03f, 8.421014116e-03f, 8.393661181e-03f,
-8.366295770e-03f, 8.338917928e-03f, 8.311527706e-03f, 8.284125150e-03f, 8.256710309e-03f, 8.229283232e-03f, 8.201843966e-03f, 8.174392560e-03f, 8.146929062e-03f, 8.119453521e-03f,
-8.091965984e-03f, 8.064466500e-03f, 8.036955118e-03f, 8.009431886e-03f, 7.981896851e-03f, 7.954350063e-03f, 7.926791570e-03f, 7.899221421e-03f, 7.871639663e-03f, 7.844046346e-03f,
-7.816441518e-03f, 7.788825226e-03f, 7.761197521e-03f, 7.733558450e-03f, 7.705908062e-03f, 7.678246405e-03f, 7.650573528e-03f, 7.622889480e-03f, 7.595194309e-03f, 7.567488064e-03f,
-7.539770794e-03f, 7.512042546e-03f, 7.484303371e-03f, 7.456553316e-03f, 7.428792430e-03f, 7.401020762e-03f, 7.373238361e-03f, 7.345445275e-03f, 7.317641553e-03f, 7.289827245e-03f,
-7.262002398e-03f, 7.234167061e-03f, 7.206321284e-03f, 7.178465116e-03f, 7.150598604e-03f, 7.122721798e-03f, 7.094834747e-03f, 7.066937500e-03f, 7.039030105e-03f, 7.011112611e-03f,
-6.983185069e-03f, 6.955247525e-03f, 6.927300030e-03f, 6.899342632e-03f, 6.871375381e-03f, 6.843398325e-03f, 6.815411513e-03f, 6.787414994e-03f, 6.759408818e-03f, 6.731393034e-03f,
-6.703367690e-03f, 6.675332835e-03f, 6.647288519e-03f, 6.619234791e-03f, 6.591171700e-03f, 6.563099295e-03f, 6.535017625e-03f, 6.506926739e-03f, 6.478826687e-03f, 6.450717518e-03f,
-6.422599280e-03f, 6.394472024e-03f, 6.366335797e-03f, 6.338190651e-03f, 6.310036633e-03f, 6.281873793e-03f, 6.253702180e-03f, 6.225521844e-03f, 6.197332834e-03f, 6.169135199e-03f,
-6.140928988e-03f, 6.112714251e-03f, 6.084491037e-03f, 6.056259396e-03f, 6.028019376e-03f, 5.999771027e-03f, 5.971514399e-03f, 5.943249541e-03f, 5.914976502e-03f, 5.886695332e-03f,
-5.858406080e-03f, 5.830108795e-03f, 5.801803527e-03f, 5.773490326e-03f, 5.745169241e-03f, 5.716840321e-03f, 5.688503615e-03f, 5.660159175e-03f, 5.631807047e-03f, 5.603447283e-03f,
-5.575079932e-03f, 5.546705044e-03f, 5.518322667e-03f, 5.489932851e-03f, 5.461535647e-03f, 5.433131103e-03f, 5.404719269e-03f, 5.376300194e-03f, 5.347873929e-03f, 5.319440523e-03f,
-5.291000025e-03f, 5.262552486e-03f, 5.234097954e-03f, 5.205636479e-03f, 5.177168111e-03f, 5.148692900e-03f, 5.120210895e-03f, 5.091722146e-03f, 5.063226703e-03f, 5.034724615e-03f,
-5.006215931e-03f, 4.977700703e-03f, 4.949178979e-03f, 4.920650809e-03f, 4.892116242e-03f, 4.863575329e-03f, 4.835028120e-03f, 4.806474663e-03f, 4.777915009e-03f, 4.749349207e-03f,
-4.720777308e-03f, 4.692199361e-03f, 4.663615415e-03f, 4.635025521e-03f, 4.606429728e-03f, 4.577828087e-03f, 4.549220646e-03f, 4.520607456e-03f, 4.491988567e-03f, 4.463364028e-03f,
-4.434733889e-03f, 4.406098200e-03f, 4.377457011e-03f, 4.348810371e-03f, 4.320158331e-03f, 4.291500941e-03f, 4.262838250e-03f, 4.234170308e-03f, 4.205497165e-03f, 4.176818870e-03f,
-4.148135475e-03f, 4.119447028e-03f, 4.090753579e-03f, 4.062055179e-03f, 4.033351878e-03f, 4.004643724e-03f, 3.975930769e-03f, 3.947213061e-03f, 3.918490652e-03f, 3.889763590e-03f,
-3.861031927e-03f, 3.832295711e-03f, 3.803554992e-03f, 3.774809822e-03f, 3.746060248e-03f, 3.717306323e-03f, 3.688548094e-03f, 3.659785614e-03f, 3.631018930e-03f, 3.602248094e-03f,
-3.573473155e-03f, 3.544694163e-03f, 3.515911169e-03f, 3.487124222e-03f, 3.458333372e-03f, 3.429538669e-03f, 3.400740163e-03f, 3.371937905e-03f, 3.343131943e-03f, 3.314322329e-03f,
-3.285509112e-03f, 3.256692342e-03f, 3.227872069e-03f, 3.199048343e-03f, 3.170221215e-03f, 3.141390733e-03f, 3.112556949e-03f, 3.083719911e-03f, 3.054879671e-03f, 3.026036279e-03f,
-2.997189783e-03f, 2.968340235e-03f, 2.939487683e-03f, 2.910632180e-03f, 2.881773773e-03f, 2.852912514e-03f, 2.824048452e-03f, 2.795181637e-03f, 2.766312120e-03f, 2.737439950e-03f,
-2.708565178e-03f, 2.679687853e-03f, 2.650808026e-03f, 2.621925746e-03f, 2.593041064e-03f, 2.564154029e-03f, 2.535264693e-03f, 2.506373103e-03f, 2.477479312e-03f, 2.448583368e-03f,
-2.419685322e-03f, 2.390785224e-03f, 2.361883124e-03f, 2.332979072e-03f, 2.304073117e-03f, 2.275165311e-03f, 2.246255703e-03f, 2.217344342e-03f, 2.188431280e-03f, 2.159516565e-03f,
-2.130600249e-03f, 2.101682381e-03f, 2.072763011e-03f, 2.043842190e-03f, 2.014919966e-03f, 1.985996391e-03f, 1.957071514e-03f, 1.928145386e-03f, 1.899218056e-03f, 1.870289574e-03f,
-1.841359990e-03f, 1.812429355e-03f, 1.783497718e-03f, 1.754565130e-03f, 1.725631640e-03f, 1.696697298e-03f, 1.667762155e-03f, 1.638826260e-03f, 1.609889663e-03f, 1.580952416e-03f,
-1.552014566e-03f, 1.523076165e-03f, 1.494137262e-03f, 1.465197908e-03f, 1.436258152e-03f, 1.407318044e-03f, 1.378377635e-03f, 1.349436973e-03f, 1.320496111e-03f, 1.291555096e-03f,
-1.262613980e-03f, 1.233672812e-03f, 1.204731642e-03f, 1.175790520e-03f, 1.146849496e-03f, 1.117908620e-03f, 1.088967941e-03f, 1.060027511e-03f, 1.031087379e-03f, 1.002147594e-03f,
-9.732082070e-04f, 9.442692675e-04f, 9.153308254e-04f, 8.863929308e-04f, 8.574556335e-04f, 8.285189834e-04f, 7.995830304e-04f, 7.706478244e-04f, 7.417134152e-04f, 7.127798529e-04f,
-6.838471872e-04f, 6.549154681e-04f, 6.259847453e-04f, 5.970550688e-04f, 5.681264884e-04f, 5.391990540e-04f, 5.102728153e-04f, 4.813478224e-04f, 4.524241249e-04f, 4.235017727e-04f,
-3.945808157e-04f, 3.656613037e-04f, 3.367432864e-04f, 3.078268136e-04f, 2.789119353e-04f, 2.499987011e-04f, 2.210871608e-04f, 1.921773643e-04f, 1.632693613e-04f, 1.343632015e-04f,
-1.054589348e-04f, 7.655661079e-05f, 4.765627933e-05f, 1.875799012e-05f, -1.013820710e-05f, -3.903226262e-05f, -6.792412672e-05f, -9.681374969e-05f, -1.257010818e-04f, -1.545860734e-04f,
--1.834686749e-04f, -2.123488364e-04f, -2.412265084e-04f, -2.701016411e-04f, -2.989741850e-04f, -3.278440904e-04f, -3.567113076e-04f, -3.855757870e-04f, -4.144374790e-04f, -4.432963340e-04f,
--4.721523024e-04f, -5.010053346e-04f, -5.298553810e-04f, -5.587023920e-04f, -5.875463180e-04f, -6.163871096e-04f, -6.452247171e-04f, -6.740590909e-04f, -7.028901817e-04f, -7.317179398e-04f,
--7.605423157e-04f, -7.893632600e-04f, -8.181807231e-04f, -8.469946555e-04f, -8.758050078e-04f, -9.046117305e-04f, -9.334147742e-04f, -9.622140894e-04f, -9.910096266e-04f, -1.019801336e-03f,
--1.048589170e-03f, -1.077373077e-03f, -1.106153008e-03f, -1.134928914e-03f, -1.163700746e-03f, -1.192468455e-03f, -1.221231990e-03f, -1.249991303e-03f, -1.278746344e-03f, -1.307497065e-03f,
--1.336243414e-03f, -1.364985345e-03f, -1.393722806e-03f, -1.422455749e-03f, -1.451184125e-03f, -1.479907884e-03f, -1.508626976e-03f, -1.537341354e-03f, -1.566050968e-03f, -1.594755767e-03f,
--1.623455704e-03f, -1.652150729e-03f, -1.680840793e-03f, -1.709525847e-03f, -1.738205841e-03f, -1.766880726e-03f, -1.795550454e-03f, -1.824214975e-03f, -1.852874240e-03f, -1.881528200e-03f,
--1.910176806e-03f, -1.938820009e-03f, -1.967457760e-03f, -1.996090009e-03f, -2.024716709e-03f, -2.053337809e-03f, -2.081953261e-03f, -2.110563015e-03f, -2.139167024e-03f, -2.167765238e-03f,
--2.196357607e-03f, -2.224944084e-03f, -2.253524618e-03f, -2.282099162e-03f, -2.310667666e-03f, -2.339230082e-03f, -2.367786360e-03f, -2.396336453e-03f, -2.424880310e-03f, -2.453417883e-03f,
--2.481949124e-03f, -2.510473983e-03f, -2.538992412e-03f, -2.567504362e-03f, -2.596009784e-03f, -2.624508630e-03f, -2.653000851e-03f, -2.681486398e-03f, -2.709965223e-03f, -2.738437276e-03f,
--2.766902510e-03f, -2.795360875e-03f, -2.823812323e-03f, -2.852256806e-03f, -2.880694274e-03f, -2.909124680e-03f, -2.937547974e-03f, -2.965964108e-03f, -2.994373034e-03f, -3.022774702e-03f,
--3.051169066e-03f, -3.079556075e-03f, -3.107935682e-03f, -3.136307839e-03f, -3.164672496e-03f, -3.193029605e-03f, -3.221379119e-03f, -3.249720988e-03f, -3.278055164e-03f, -3.306381599e-03f,
--3.334700245e-03f, -3.363011053e-03f, -3.391313975e-03f, -3.419608962e-03f, -3.447895967e-03f, -3.476174942e-03f, -3.504445837e-03f, -3.532708605e-03f, -3.560963197e-03f, -3.589209566e-03f,
--3.617447663e-03f, -3.645677441e-03f, -3.673898850e-03f, -3.702111843e-03f, -3.730316372e-03f, -3.758512389e-03f, -3.786699845e-03f, -3.814878694e-03f, -3.843048885e-03f, -3.871210373e-03f,
--3.899363108e-03f, -3.927507043e-03f, -3.955642130e-03f, -3.983768321e-03f, -4.011885567e-03f, -4.039993822e-03f, -4.068093037e-03f, -4.096183165e-03f, -4.124264157e-03f, -4.152335966e-03f,
--4.180398544e-03f, -4.208451843e-03f, -4.236495816e-03f, -4.264530415e-03f, -4.292555592e-03f, -4.320571299e-03f, -4.348577489e-03f, -4.376574114e-03f, -4.404561126e-03f, -4.432538479e-03f,
--4.460506124e-03f, -4.488464013e-03f, -4.516412100e-03f, -4.544350336e-03f, -4.572278675e-03f, -4.600197068e-03f, -4.628105468e-03f, -4.656003829e-03f, -4.683892101e-03f, -4.711770239e-03f,
--4.739638194e-03f, -4.767495919e-03f, -4.795343368e-03f, -4.823180491e-03f, -4.851007244e-03f, -4.878823577e-03f, -4.906629444e-03f, -4.934424797e-03f, -4.962209590e-03f, -4.989983775e-03f,
--5.017747305e-03f, -5.045500133e-03f, -5.073242211e-03f, -5.100973493e-03f, -5.128693932e-03f, -5.156403480e-03f, -5.184102091e-03f, -5.211789717e-03f, -5.239466311e-03f, -5.267131827e-03f,
--5.294786218e-03f, -5.322429436e-03f, -5.350061435e-03f, -5.377682168e-03f, -5.405291588e-03f, -5.432889648e-03f, -5.460476301e-03f, -5.488051501e-03f, -5.515615201e-03f, -5.543167354e-03f,
--5.570707913e-03f, -5.598236832e-03f, -5.625754064e-03f, -5.653259563e-03f, -5.680753281e-03f, -5.708235172e-03f, -5.735705190e-03f, -5.763163288e-03f, -5.790609420e-03f, -5.818043538e-03f,
--5.845465597e-03f, -5.872875551e-03f, -5.900273352e-03f, -5.927658954e-03f, -5.955032311e-03f, -5.982393377e-03f, -6.009742105e-03f, -6.037078448e-03f, -6.064402362e-03f, -6.091713799e-03f,
--6.119012713e-03f, -6.146299058e-03f, -6.173572787e-03f, -6.200833856e-03f, -6.228082217e-03f, -6.255317824e-03f, -6.282540631e-03f, -6.309750593e-03f, -6.336947663e-03f, -6.364131795e-03f,
--6.391302944e-03f, -6.418461063e-03f, -6.445606106e-03f, -6.472738027e-03f, -6.499856782e-03f, -6.526962322e-03f, -6.554054604e-03f, -6.581133581e-03f, -6.608199208e-03f, -6.635251438e-03f,
--6.662290226e-03f, -6.689315526e-03f, -6.716327293e-03f, -6.743325480e-03f, -6.770310043e-03f, -6.797280936e-03f, -6.824238113e-03f, -6.851181528e-03f, -6.878111137e-03f, -6.905026893e-03f,
--6.931928752e-03f, -6.958816667e-03f, -6.985690594e-03f, -7.012550487e-03f, -7.039396300e-03f, -7.066227989e-03f, -7.093045508e-03f, -7.119848812e-03f, -7.146637856e-03f, -7.173412594e-03f,
--7.200172981e-03f, -7.226918972e-03f, -7.253650523e-03f, -7.280367587e-03f, -7.307070120e-03f, -7.333758077e-03f, -7.360431413e-03f, -7.387090083e-03f, -7.413734042e-03f, -7.440363245e-03f,
--7.466977646e-03f, -7.493577202e-03f, -7.520161868e-03f, -7.546731598e-03f, -7.573286348e-03f, -7.599826073e-03f, -7.626350729e-03f, -7.652860270e-03f, -7.679354653e-03f, -7.705833831e-03f,
--7.732297762e-03f, -7.758746400e-03f, -7.785179701e-03f, -7.811597620e-03f, -7.838000112e-03f, -7.864387134e-03f, -7.890758641e-03f, -7.917114589e-03f, -7.943454932e-03f, -7.969779627e-03f,
--7.996088630e-03f, -8.022381897e-03f, -8.048659382e-03f, -8.074921042e-03f, -8.101166833e-03f, -8.127396710e-03f, -8.153610629e-03f, -8.179808547e-03f, -8.205990420e-03f, -8.232156202e-03f,
--8.258305851e-03f, -8.284439322e-03f, -8.310556571e-03f, -8.336657555e-03f, -8.362742229e-03f, -8.388810550e-03f, -8.414862474e-03f, -8.440897957e-03f, -8.466916956e-03f, -8.492919427e-03f,
--8.518905325e-03f, -8.544874608e-03f, -8.570827232e-03f, -8.596763153e-03f, -8.622682327e-03f, -8.648584712e-03f, -8.674470263e-03f, -8.700338938e-03f, -8.726190693e-03f, -8.752025483e-03f,
--8.777843267e-03f, -8.803644001e-03f, -8.829427641e-03f, -8.855194144e-03f, -8.880943468e-03f, -8.906675568e-03f, -8.932390401e-03f, -8.958087925e-03f, -8.983768097e-03f, -9.009430872e-03f,
--9.035076209e-03f, -9.060704065e-03f, -9.086314395e-03f, -9.111907158e-03f, -9.137482311e-03f, -9.163039810e-03f, -9.188579613e-03f, -9.214101677e-03f, -9.239605960e-03f, -9.265092418e-03f,
--9.290561009e-03f, -9.316011690e-03f, -9.341444418e-03f, -9.366859152e-03f, -9.392255847e-03f, -9.417634463e-03f, -9.442994957e-03f, -9.468337285e-03f, -9.493661405e-03f, -9.518967276e-03f,
--9.544254855e-03f, -9.569524099e-03f, -9.594774967e-03f, -9.620007415e-03f, -9.645221402e-03f, -9.670416886e-03f, -9.695593824e-03f, -9.720752174e-03f, -9.745891895e-03f, -9.771012944e-03f,
--9.796115279e-03f, -9.821198858e-03f, -9.846263640e-03f, -9.871309582e-03f, -9.896336643e-03f, -9.921344780e-03f, -9.946333953e-03f, -9.971304118e-03f, -9.996255235e-03f, -1.002118726e-02f,
--1.004610016e-02f, -1.007099388e-02f, -1.009586839e-02f, -1.012072364e-02f, -1.014555959e-02f, -1.017037620e-02f, -1.019517343e-02f, -1.021995124e-02f, -1.024470959e-02f, -1.026944843e-02f,
--1.029416772e-02f, -1.031886743e-02f, -1.034354751e-02f, -1.036820791e-02f, -1.039284861e-02f, -1.041746956e-02f, -1.044207071e-02f, -1.046665203e-02f, -1.049121347e-02f, -1.051575499e-02f,
--1.054027656e-02f, -1.056477813e-02f, -1.058925967e-02f, -1.061372112e-02f, -1.063816245e-02f, -1.066258362e-02f, -1.068698459e-02f, -1.071136532e-02f, -1.073572576e-02f, -1.076006588e-02f,
--1.078438564e-02f, -1.080868499e-02f, -1.083296390e-02f, -1.085722232e-02f, -1.088146022e-02f, -1.090567755e-02f, -1.092987427e-02f, -1.095405035e-02f, -1.097820573e-02f, -1.100234040e-02f,
--1.102645429e-02f, -1.105054738e-02f, -1.107461962e-02f, -1.109867097e-02f, -1.112270139e-02f, -1.114671085e-02f, -1.117069930e-02f, -1.119466670e-02f, -1.121861302e-02f, -1.124253821e-02f,
--1.126644223e-02f, -1.129032504e-02f, -1.131418661e-02f, -1.133802690e-02f, -1.136184585e-02f, -1.138564345e-02f, -1.140941963e-02f, -1.143317438e-02f, -1.145690764e-02f, -1.148061938e-02f,
--1.150430956e-02f, -1.152797813e-02f, -1.155162506e-02f, -1.157525032e-02f, -1.159885385e-02f, -1.162243563e-02f, -1.164599561e-02f, -1.166953375e-02f, -1.169305002e-02f, -1.171654437e-02f,
--1.174001677e-02f, -1.176346718e-02f, -1.178689555e-02f, -1.181030186e-02f, -1.183368605e-02f, -1.185704810e-02f, -1.188038797e-02f, -1.190370560e-02f, -1.192700097e-02f, -1.195027405e-02f,
--1.197352478e-02f, -1.199675313e-02f, -1.201995906e-02f, -1.204314253e-02f, -1.206630352e-02f, -1.208944197e-02f, -1.211255784e-02f, -1.213565111e-02f, -1.215872173e-02f, -1.218176966e-02f,
--1.220479487e-02f, -1.222779732e-02f, -1.225077697e-02f, -1.227373378e-02f, -1.229666771e-02f, -1.231957873e-02f, -1.234246680e-02f, -1.236533187e-02f, -1.238817392e-02f, -1.241099291e-02f,
--1.243378879e-02f, -1.245656153e-02f, -1.247931109e-02f, -1.250203743e-02f, -1.252474053e-02f, -1.254742033e-02f, -1.257007680e-02f, -1.259270990e-02f, -1.261531961e-02f, -1.263790587e-02f,
--1.266046866e-02f, -1.268300792e-02f, -1.270552364e-02f, -1.272801577e-02f, -1.275048427e-02f, -1.277292911e-02f, -1.279535025e-02f, -1.281774764e-02f, -1.284012127e-02f, -1.286247108e-02f,
--1.288479705e-02f, -1.290709913e-02f, -1.292937728e-02f, -1.295163148e-02f, -1.297386169e-02f, -1.299606786e-02f, -1.301824996e-02f, -1.304040796e-02f, -1.306254182e-02f, -1.308465150e-02f,
--1.310673696e-02f, -1.312879817e-02f, -1.315083510e-02f, -1.317284770e-02f, -1.319483595e-02f, -1.321679980e-02f, -1.323873921e-02f, -1.326065416e-02f, -1.328254460e-02f, -1.330441051e-02f,
--1.332625183e-02f, -1.334806855e-02f, -1.336986062e-02f, -1.339162800e-02f, -1.341337067e-02f, -1.343508858e-02f, -1.345678170e-02f, -1.347844999e-02f, -1.350009342e-02f, -1.352171195e-02f,
--1.354330555e-02f, -1.356487418e-02f, -1.358641781e-02f, -1.360793640e-02f, -1.362942991e-02f, -1.365089831e-02f, -1.367234157e-02f, -1.369375965e-02f, -1.371515251e-02f, -1.373652012e-02f,
--1.375786245e-02f, -1.377917945e-02f, -1.380047110e-02f, -1.382173736e-02f, -1.384297819e-02f, -1.386419356e-02f, -1.388538344e-02f, -1.390654779e-02f, -1.392768657e-02f, -1.394879975e-02f,
--1.396988731e-02f, -1.399094919e-02f, -1.401198537e-02f, -1.403299581e-02f, -1.405398048e-02f, -1.407493934e-02f, -1.409587237e-02f, -1.411677952e-02f, -1.413766076e-02f, -1.415851606e-02f,
--1.417934538e-02f, -1.420014869e-02f, -1.422092596e-02f, -1.424167715e-02f, -1.426240222e-02f, -1.428310115e-02f, -1.430377389e-02f, -1.432442042e-02f, -1.434504071e-02f, -1.436563471e-02f,
--1.438620240e-02f, -1.440674373e-02f, -1.442725869e-02f, -1.444774723e-02f, -1.446820931e-02f, -1.448864492e-02f, -1.450905401e-02f, -1.452943655e-02f, -1.454979251e-02f, -1.457012185e-02f,
--1.459042454e-02f, -1.461070055e-02f, -1.463094984e-02f, -1.465117239e-02f, -1.467136815e-02f, -1.469153710e-02f, -1.471167920e-02f, -1.473179442e-02f, -1.475188273e-02f, -1.477194410e-02f,
--1.479197848e-02f, -1.481198585e-02f, -1.483196619e-02f, -1.485191944e-02f, -1.487184559e-02f, -1.489174459e-02f, -1.491161643e-02f, -1.493146105e-02f, -1.495127844e-02f, -1.497106856e-02f,
--1.499083138e-02f, -1.501056686e-02f, -1.503027498e-02f, -1.504995569e-02f, -1.506960898e-02f, -1.508923480e-02f, -1.510883313e-02f, -1.512840394e-02f, -1.514794718e-02f, -1.516746284e-02f,
--1.518695088e-02f, -1.520641126e-02f, -1.522584395e-02f, -1.524524893e-02f, -1.526462617e-02f, -1.528397562e-02f, -1.530329727e-02f, -1.532259107e-02f, -1.534185700e-02f, -1.536109502e-02f,
--1.538030511e-02f, -1.539948723e-02f, -1.541864136e-02f, -1.543776745e-02f, -1.545686549e-02f, -1.547593544e-02f, -1.549497726e-02f, -1.551399093e-02f, -1.553297642e-02f, -1.555193369e-02f,
--1.557086272e-02f, -1.558976348e-02f, -1.560863593e-02f, -1.562748004e-02f, -1.564629579e-02f, -1.566508314e-02f, -1.568384206e-02f, -1.570257252e-02f, -1.572127450e-02f, -1.573994795e-02f,
--1.575859286e-02f, -1.577720919e-02f, -1.579579691e-02f, -1.581435599e-02f, -1.583288641e-02f, -1.585138812e-02f, -1.586986111e-02f, -1.588830533e-02f, -1.590672077e-02f, -1.592510740e-02f,
--1.594346517e-02f, -1.596179407e-02f, -1.598009406e-02f, -1.599836511e-02f, -1.601660720e-02f, -1.603482030e-02f, -1.605300437e-02f, -1.607115939e-02f, -1.608928532e-02f, -1.610738214e-02f,
--1.612544982e-02f, -1.614348834e-02f, -1.616149765e-02f, -1.617947773e-02f, -1.619742856e-02f, -1.621535010e-02f, -1.623324232e-02f, -1.625110521e-02f, -1.626893872e-02f, -1.628674283e-02f,
--1.630451751e-02f, -1.632226273e-02f, -1.633997847e-02f, -1.635766469e-02f, -1.637532136e-02f, -1.639294847e-02f, -1.641054597e-02f, -1.642811385e-02f, -1.644565207e-02f, -1.646316061e-02f,
--1.648063943e-02f, -1.649808852e-02f, -1.651550783e-02f, -1.653289735e-02f, -1.655025704e-02f, -1.656758689e-02f, -1.658488685e-02f, -1.660215690e-02f, -1.661939702e-02f, -1.663660718e-02f,
--1.665378734e-02f, -1.667093749e-02f, -1.668805759e-02f, -1.670514762e-02f, -1.672220755e-02f, -1.673923735e-02f, -1.675623700e-02f, -1.677320647e-02f, -1.679014572e-02f, -1.680705475e-02f,
--1.682393350e-02f, -1.684078197e-02f, -1.685760013e-02f, -1.687438793e-02f, -1.689114537e-02f, -1.690787241e-02f, -1.692456903e-02f, -1.694123520e-02f, -1.695787089e-02f, -1.697447608e-02f,
--1.699105073e-02f, -1.700759483e-02f, -1.702410835e-02f, -1.704059126e-02f, -1.705704354e-02f, -1.707346515e-02f, -1.708985607e-02f, -1.710621629e-02f, -1.712254576e-02f, -1.713884447e-02f,
--1.715511238e-02f, -1.717134948e-02f, -1.718755573e-02f, -1.720373112e-02f, -1.721987561e-02f, -1.723598918e-02f, -1.725207181e-02f, -1.726812346e-02f, -1.728414412e-02f, -1.730013376e-02f,
--1.731609235e-02f, -1.733201986e-02f, -1.734791628e-02f, -1.736378157e-02f, -1.737961572e-02f, -1.739541869e-02f, -1.741119046e-02f, -1.742693101e-02f, -1.744264032e-02f, -1.745831834e-02f,
--1.747396507e-02f, -1.748958048e-02f, -1.750516454e-02f, -1.752071723e-02f, -1.753623852e-02f, -1.755172839e-02f, -1.756718682e-02f, -1.758261377e-02f, -1.759800923e-02f, -1.761337317e-02f,
--1.762870557e-02f, -1.764400640e-02f, -1.765927564e-02f, -1.767451327e-02f, -1.768971925e-02f, -1.770489358e-02f, -1.772003621e-02f, -1.773514713e-02f, -1.775022632e-02f, -1.776527375e-02f,
--1.778028940e-02f, -1.779527324e-02f, -1.781022525e-02f, -1.782514541e-02f, -1.784003369e-02f, -1.785489008e-02f, -1.786971454e-02f, -1.788450705e-02f, -1.789926759e-02f, -1.791399614e-02f,
--1.792869268e-02f, -1.794335717e-02f, -1.795798960e-02f, -1.797258995e-02f, -1.798715819e-02f, -1.800169430e-02f, -1.801619826e-02f, -1.803067004e-02f, -1.804510962e-02f, -1.805951698e-02f,
--1.807389209e-02f, -1.808823494e-02f, -1.810254550e-02f, -1.811682375e-02f, -1.813106966e-02f, -1.814528322e-02f, -1.815946440e-02f, -1.817361319e-02f, -1.818772954e-02f, -1.820181346e-02f,
--1.821586491e-02f, -1.822988387e-02f, -1.824387031e-02f, -1.825782423e-02f, -1.827174560e-02f, -1.828563438e-02f, -1.829949058e-02f, -1.831331415e-02f, -1.832710508e-02f, -1.834086336e-02f,
--1.835458894e-02f, -1.836828183e-02f, -1.838194199e-02f, -1.839556940e-02f, -1.840916405e-02f, -1.842272590e-02f, -1.843625495e-02f, -1.844975116e-02f, -1.846321453e-02f, -1.847664502e-02f,
--1.849004261e-02f, -1.850340730e-02f, -1.851673904e-02f, -1.853003784e-02f, -1.854330365e-02f, -1.855653647e-02f, -1.856973627e-02f, -1.858290304e-02f, -1.859603674e-02f, -1.860913737e-02f,
--1.862220490e-02f, -1.863523931e-02f, -1.864824058e-02f, -1.866120870e-02f, -1.867414363e-02f, -1.868704537e-02f, -1.869991389e-02f, -1.871274916e-02f, -1.872555118e-02f, -1.873831993e-02f,
--1.875105537e-02f, -1.876375750e-02f, -1.877642629e-02f, -1.878906173e-02f, -1.880166379e-02f, -1.881423245e-02f, -1.882676770e-02f, -1.883926952e-02f, -1.885173789e-02f, -1.886417278e-02f,
--1.887657418e-02f, -1.888894207e-02f, -1.890127644e-02f, -1.891357726e-02f, -1.892584451e-02f, -1.893807817e-02f, -1.895027823e-02f, -1.896244467e-02f, -1.897457747e-02f, -1.898667661e-02f,
--1.899874207e-02f, -1.901077383e-02f, -1.902277188e-02f, -1.903473620e-02f, -1.904666677e-02f, -1.905856356e-02f, -1.907042657e-02f, -1.908225578e-02f, -1.909405115e-02f, -1.910581269e-02f,
--1.911754037e-02f, -1.912923417e-02f, -1.914089408e-02f, -1.915252008e-02f, -1.916411214e-02f, -1.917567026e-02f, -1.918719441e-02f, -1.919868458e-02f, -1.921014075e-02f, -1.922156290e-02f,
--1.923295101e-02f, -1.924430508e-02f, -1.925562508e-02f, -1.926691099e-02f, -1.927816279e-02f, -1.928938048e-02f, -1.930056403e-02f, -1.931171343e-02f, -1.932282865e-02f, -1.933390969e-02f,
--1.934495652e-02f, -1.935596914e-02f, -1.936694751e-02f, -1.937789164e-02f, -1.938880149e-02f, -1.939967705e-02f, -1.941051832e-02f, -1.942132526e-02f, -1.943209787e-02f, -1.944283613e-02f,
--1.945354002e-02f, -1.946420953e-02f, -1.947484464e-02f, -1.948544533e-02f, -1.949601159e-02f, -1.950654341e-02f, -1.951704076e-02f, -1.952750363e-02f, -1.953793202e-02f, -1.954832589e-02f,
--1.955868524e-02f, -1.956901004e-02f, -1.957930029e-02f, -1.958955598e-02f, -1.959977707e-02f, -1.960996357e-02f, -1.962011544e-02f, -1.963023269e-02f, -1.964031529e-02f, -1.965036323e-02f,
--1.966037650e-02f, -1.967035507e-02f, -1.968029894e-02f, -1.969020809e-02f, -1.970008250e-02f, -1.970992216e-02f, -1.971972707e-02f, -1.972949719e-02f, -1.973923252e-02f, -1.974893304e-02f,
--1.975859874e-02f, -1.976822961e-02f, -1.977782563e-02f, -1.978738678e-02f, -1.979691306e-02f, -1.980640445e-02f, -1.981586093e-02f, -1.982528249e-02f, -1.983466912e-02f, -1.984402080e-02f,
--1.985333752e-02f, -1.986261927e-02f, -1.987186603e-02f, -1.988107779e-02f, -1.989025454e-02f, -1.989939626e-02f, -1.990850294e-02f, -1.991757456e-02f, -1.992661112e-02f, -1.993561260e-02f,
--1.994457899e-02f, -1.995351027e-02f, -1.996240643e-02f, -1.997126746e-02f, -1.998009334e-02f, -1.998888407e-02f, -1.999763963e-02f, -2.000636001e-02f, -2.001504519e-02f, -2.002369516e-02f,
--2.003230991e-02f, -2.004088944e-02f, -2.004943371e-02f, -2.005794273e-02f, -2.006641649e-02f, -2.007485496e-02f, -2.008325814e-02f, -2.009162601e-02f, -2.009995857e-02f, -2.010825580e-02f,
--2.011651768e-02f, -2.012474422e-02f, -2.013293539e-02f, -2.014109119e-02f, -2.014921160e-02f, -2.015729661e-02f, -2.016534621e-02f, -2.017336039e-02f, -2.018133914e-02f, -2.018928245e-02f,
--2.019719030e-02f, -2.020506268e-02f, -2.021289959e-02f, -2.022070101e-02f, -2.022846693e-02f, -2.023619734e-02f, -2.024389223e-02f, -2.025155159e-02f, -2.025917541e-02f, -2.026676368e-02f,
--2.027431638e-02f, -2.028183351e-02f, -2.028931505e-02f, -2.029676100e-02f, -2.030417135e-02f, -2.031154608e-02f, -2.031888519e-02f, -2.032618866e-02f, -2.033345648e-02f, -2.034068865e-02f,
--2.034788516e-02f, -2.035504599e-02f, -2.036217114e-02f, -2.036926059e-02f, -2.037631434e-02f, -2.038333237e-02f, -2.039031468e-02f, -2.039726126e-02f, -2.040417210e-02f, -2.041104718e-02f,
--2.041788651e-02f, -2.042469006e-02f, -2.043145784e-02f, -2.043818982e-02f, -2.044488601e-02f, -2.045154639e-02f, -2.045817096e-02f, -2.046475970e-02f, -2.047131261e-02f, -2.047782968e-02f,
--2.048431090e-02f, -2.049075626e-02f, -2.049716575e-02f, -2.050353936e-02f, -2.050987710e-02f, -2.051617893e-02f, -2.052244487e-02f, -2.052867490e-02f, -2.053486901e-02f, -2.054102719e-02f,
--2.054714944e-02f, -2.055323575e-02f, -2.055928611e-02f, -2.056530051e-02f, -2.057127895e-02f, -2.057722141e-02f, -2.058312790e-02f, -2.058899839e-02f, -2.059483289e-02f, -2.060063138e-02f,
--2.060639387e-02f, -2.061212034e-02f, -2.061781078e-02f, -2.062346518e-02f, -2.062908355e-02f, -2.063466587e-02f, -2.064021214e-02f, -2.064572235e-02f, -2.065119649e-02f, -2.065663455e-02f,
--2.066203653e-02f, -2.066740243e-02f, -2.067273222e-02f, -2.067802592e-02f, -2.068328351e-02f, -2.068850499e-02f, -2.069369034e-02f, -2.069883956e-02f, -2.070395266e-02f, -2.070902961e-02f,
--2.071407042e-02f, -2.071907507e-02f, -2.072404356e-02f, -2.072897590e-02f, -2.073387206e-02f, -2.073873204e-02f, -2.074355585e-02f, -2.074834346e-02f, -2.075309488e-02f, -2.075781011e-02f,
--2.076248913e-02f, -2.076713194e-02f, -2.077173853e-02f, -2.077630891e-02f, -2.078084305e-02f, -2.078534097e-02f, -2.078980265e-02f, -2.079422809e-02f, -2.079861728e-02f, -2.080297022e-02f,
--2.080728691e-02f, -2.081156733e-02f, -2.081581149e-02f, -2.082001937e-02f, -2.082419099e-02f, -2.082832632e-02f, -2.083242536e-02f, -2.083648812e-02f, -2.084051459e-02f, -2.084450475e-02f,
--2.084845862e-02f, -2.085237618e-02f, -2.085625742e-02f, -2.086010236e-02f, -2.086391097e-02f, -2.086768327e-02f, -2.087141923e-02f, -2.087511887e-02f, -2.087878217e-02f, -2.088240913e-02f,
--2.088599976e-02f, -2.088955403e-02f, -2.089307196e-02f, -2.089655354e-02f, -2.089999876e-02f, -2.090340762e-02f, -2.090678012e-02f, -2.091011626e-02f, -2.091341603e-02f, -2.091667942e-02f,
--2.091990644e-02f, -2.092309709e-02f, -2.092625135e-02f, -2.092936923e-02f, -2.093245072e-02f, -2.093549583e-02f, -2.093850454e-02f, -2.094147686e-02f, -2.094441279e-02f, -2.094731231e-02f,
--2.095017543e-02f, -2.095300215e-02f, -2.095579247e-02f, -2.095854637e-02f, -2.096126387e-02f, -2.096394495e-02f, -2.096658962e-02f, -2.096919787e-02f, -2.097176971e-02f, -2.097430512e-02f,
--2.097680411e-02f, -2.097926668e-02f, -2.098169282e-02f, -2.098408254e-02f, -2.098643583e-02f, -2.098875269e-02f, -2.099103311e-02f, -2.099327711e-02f, -2.099548467e-02f, -2.099765579e-02f,
--2.099979048e-02f, -2.100188874e-02f, -2.100395055e-02f, -2.100597593e-02f, -2.100796486e-02f, -2.100991736e-02f, -2.101183341e-02f, -2.101371302e-02f, -2.101555619e-02f, -2.101736292e-02f,
--2.101913320e-02f, -2.102086703e-02f, -2.102256442e-02f, -2.102422537e-02f, -2.102584987e-02f, -2.102743793e-02f, -2.102898954e-02f, -2.103050470e-02f, -2.103198342e-02f, -2.103342569e-02f,
--2.103483152e-02f, -2.103620090e-02f, -2.103753383e-02f, -2.103883032e-02f, -2.104009037e-02f, -2.104131397e-02f, -2.104250113e-02f, -2.104365185e-02f, -2.104476612e-02f, -2.104584395e-02f,
--2.104688534e-02f, -2.104789029e-02f, -2.104885881e-02f, -2.104979088e-02f, -2.105068651e-02f, -2.105154571e-02f, -2.105236848e-02f, -2.105315481e-02f, -2.105390470e-02f, -2.105461817e-02f,
--2.105529521e-02f, -2.105593581e-02f, -2.105653999e-02f, -2.105710775e-02f, -2.105763908e-02f, -2.105813399e-02f, -2.105859248e-02f, -2.105901454e-02f, -2.105940020e-02f, -2.105974943e-02f,
--2.106006226e-02f, -2.106033867e-02f, -2.106057868e-02f, -2.106078228e-02f, -2.106094947e-02f, -2.106108026e-02f, -2.106117466e-02f, -2.106123265e-02f, -2.106125426e-02f, -2.106123947e-02f,
--2.106118829e-02f, -2.106110072e-02f, -2.106097677e-02f, -2.106081644e-02f, -2.106061973e-02f, -2.106038664e-02f, -2.106011718e-02f, -2.105981136e-02f, -2.105946916e-02f, -2.105909061e-02f,
--2.105867569e-02f, -2.105822442e-02f, -2.105773680e-02f, -2.105721282e-02f, -2.105665250e-02f, -2.105605584e-02f, -2.105542284e-02f, -2.105475350e-02f, -2.105404783e-02f, -2.105330584e-02f,
--2.105252752e-02f, -2.105171288e-02f, -2.105086192e-02f, -2.104997466e-02f, -2.104905108e-02f, -2.104809121e-02f, -2.104709503e-02f, -2.104606256e-02f, -2.104499379e-02f, -2.104388875e-02f,
--2.104274742e-02f, -2.104156981e-02f, -2.104035593e-02f, -2.103910579e-02f, -2.103781938e-02f, -2.103649671e-02f, -2.103513779e-02f, -2.103374262e-02f, -2.103231121e-02f, -2.103084356e-02f,
--2.102933968e-02f, -2.102779956e-02f, -2.102622323e-02f, -2.102461068e-02f, -2.102296192e-02f, -2.102127695e-02f, -2.101955578e-02f, -2.101779841e-02f, -2.101600485e-02f, -2.101417511e-02f,
--2.101230920e-02f, -2.101040711e-02f, -2.100846885e-02f, -2.100649443e-02f, -2.100448386e-02f, -2.100243713e-02f, -2.100035427e-02f, -2.099823527e-02f, -2.099608014e-02f, -2.099388888e-02f,
--2.099166151e-02f, -2.098939802e-02f, -2.098709843e-02f, -2.098476275e-02f, -2.098239097e-02f, -2.097998310e-02f, -2.097753916e-02f, -2.097505915e-02f, -2.097254307e-02f, -2.096999094e-02f,
--2.096740275e-02f, -2.096477852e-02f, -2.096211826e-02f, -2.095942196e-02f, -2.095668965e-02f, -2.095392132e-02f, -2.095111698e-02f, -2.094827664e-02f, -2.094540031e-02f, -2.094248799e-02f,
--2.093953970e-02f, -2.093655543e-02f, -2.093353521e-02f, -2.093047903e-02f, -2.092738690e-02f, -2.092425884e-02f, -2.092109484e-02f, -2.091789493e-02f, -2.091465910e-02f, -2.091138736e-02f,
--2.090807972e-02f, -2.090473620e-02f, -2.090135679e-02f, -2.089794151e-02f, -2.089449036e-02f, -2.089100336e-02f, -2.088748051e-02f, -2.088392183e-02f, -2.088032731e-02f, -2.087669697e-02f,
--2.087303082e-02f, -2.086932887e-02f, -2.086559112e-02f, -2.086181758e-02f, -2.085800827e-02f, -2.085416319e-02f, -2.085028235e-02f, -2.084636576e-02f, -2.084241344e-02f, -2.083842538e-02f,
--2.083440160e-02f, -2.083034211e-02f, -2.082624692e-02f, -2.082211604e-02f, -2.081794947e-02f, -2.081374723e-02f, -2.080950933e-02f, -2.080523577e-02f, -2.080092658e-02f, -2.079658174e-02f,
--2.079220129e-02f, -2.078778522e-02f, -2.078333355e-02f, -2.077884628e-02f, -2.077432344e-02f, -2.076976502e-02f, -2.076517104e-02f, -2.076054150e-02f, -2.075587643e-02f, -2.075117583e-02f,
--2.074643970e-02f, -2.074166807e-02f, -2.073686094e-02f, -2.073201833e-02f, -2.072714023e-02f, -2.072222667e-02f, -2.071727766e-02f, -2.071229320e-02f, -2.070727332e-02f, -2.070221801e-02f,
--2.069712729e-02f, -2.069200117e-02f, -2.068683966e-02f, -2.068164278e-02f, -2.067641054e-02f, -2.067114294e-02f, -2.066584001e-02f, -2.066050174e-02f, -2.065512815e-02f, -2.064971926e-02f,
--2.064427508e-02f, -2.063879561e-02f, -2.063328087e-02f, -2.062773088e-02f, -2.062214564e-02f, -2.061652517e-02f, -2.061086947e-02f, -2.060517857e-02f, -2.059945246e-02f, -2.059369118e-02f,
--2.058789472e-02f, -2.058206310e-02f, -2.057619634e-02f, -2.057029444e-02f, -2.056435742e-02f, -2.055838529e-02f, -2.055237806e-02f, -2.054633575e-02f, -2.054025837e-02f, -2.053414593e-02f,
--2.052799845e-02f, -2.052181594e-02f, -2.051559841e-02f, -2.050934587e-02f, -2.050305835e-02f, -2.049673584e-02f, -2.049037837e-02f, -2.048398595e-02f, -2.047755859e-02f, -2.047109631e-02f,
--2.046459912e-02f, -2.045806703e-02f, -2.045150006e-02f, -2.044489821e-02f, -2.043826152e-02f, -2.043158998e-02f, -2.042488361e-02f, -2.041814243e-02f, -2.041136645e-02f, -2.040455569e-02f,
--2.039771015e-02f, -2.039082986e-02f, -2.038391483e-02f, -2.037696507e-02f, -2.036998059e-02f, -2.036296142e-02f, -2.035590756e-02f, -2.034881904e-02f, -2.034169585e-02f, -2.033453803e-02f,
--2.032734558e-02f, -2.032011853e-02f, -2.031285687e-02f, -2.030556064e-02f, -2.029822984e-02f, -2.029086449e-02f, -2.028346461e-02f, -2.027603020e-02f, -2.026856129e-02f, -2.026105790e-02f,
--2.025352003e-02f, -2.024594770e-02f, -2.023834092e-02f, -2.023069972e-02f, -2.022302411e-02f, -2.021531410e-02f, -2.020756972e-02f, -2.019979096e-02f, -2.019197786e-02f, -2.018413043e-02f,
--2.017624868e-02f, -2.016833263e-02f, -2.016038230e-02f, -2.015239769e-02f, -2.014437884e-02f, -2.013632575e-02f, -2.012823844e-02f, -2.012011693e-02f, -2.011196123e-02f, -2.010377136e-02f,
--2.009554734e-02f, -2.008728918e-02f, -2.007899690e-02f, -2.007067051e-02f, -2.006231004e-02f, -2.005391551e-02f, -2.004548691e-02f, -2.003702429e-02f, -2.002852764e-02f, -2.001999699e-02f,
--2.001143236e-02f, -2.000283376e-02f, -1.999420121e-02f, -1.998553472e-02f, -1.997683432e-02f, -1.996810003e-02f, -1.995933185e-02f, -1.995052981e-02f, -1.994169392e-02f, -1.993282421e-02f,
--1.992392069e-02f, -1.991498337e-02f, -1.990601228e-02f, -1.989700744e-02f, -1.988796885e-02f, -1.987889654e-02f, -1.986979054e-02f, -1.986065084e-02f, -1.985147749e-02f, -1.984227048e-02f,
--1.983302984e-02f, -1.982375559e-02f, -1.981444775e-02f, -1.980510634e-02f, -1.979573137e-02f, -1.978632286e-02f, -1.977688083e-02f, -1.976740530e-02f, -1.975789630e-02f, -1.974835382e-02f,
--1.973877791e-02f, -1.972916857e-02f, -1.971952582e-02f, -1.970984969e-02f, -1.970014019e-02f, -1.969039734e-02f, -1.968062116e-02f, -1.967081168e-02f, -1.966096890e-02f, -1.965109285e-02f,
--1.964118354e-02f, -1.963124101e-02f, -1.962126526e-02f, -1.961125632e-02f, -1.960121420e-02f, -1.959113893e-02f, -1.958103052e-02f, -1.957088900e-02f, -1.956071439e-02f, -1.955050670e-02f,
--1.954026596e-02f, -1.952999218e-02f, -1.951968538e-02f, -1.950934559e-02f, -1.949897283e-02f, -1.948856711e-02f, -1.947812846e-02f, -1.946765690e-02f, -1.945715244e-02f, -1.944661511e-02f,
--1.943604493e-02f, -1.942544191e-02f, -1.941480609e-02f, -1.940413747e-02f, -1.939343609e-02f, -1.938270195e-02f, -1.937193509e-02f, -1.936113552e-02f, -1.935030327e-02f, -1.933943835e-02f,
--1.932854079e-02f, -1.931761060e-02f, -1.930664781e-02f, -1.929565245e-02f, -1.928462452e-02f, -1.927356405e-02f, -1.926247107e-02f, -1.925134560e-02f, -1.924018765e-02f, -1.922899725e-02f,
--1.921777442e-02f, -1.920651918e-02f, -1.919523155e-02f, -1.918391156e-02f, -1.917255923e-02f, -1.916117457e-02f, -1.914975762e-02f, -1.913830839e-02f, -1.912682690e-02f, -1.911531318e-02f,
--1.910376725e-02f, -1.909218913e-02f, -1.908057884e-02f, -1.906893641e-02f, -1.905726186e-02f, -1.904555521e-02f, -1.903381648e-02f, -1.902204570e-02f, -1.901024289e-02f, -1.899840806e-02f,
--1.898654126e-02f, -1.897464248e-02f, -1.896271177e-02f, -1.895074914e-02f, -1.893875461e-02f, -1.892672821e-02f, -1.891466997e-02f, -1.890257989e-02f, -1.889045802e-02f, -1.887830436e-02f,
--1.886611895e-02f, -1.885390181e-02f, -1.884165295e-02f, -1.882937241e-02f, -1.881706021e-02f, -1.880471636e-02f, -1.879234090e-02f, -1.877993385e-02f, -1.876749523e-02f, -1.875502507e-02f,
--1.874252338e-02f, -1.872999020e-02f, -1.871742554e-02f, -1.870482944e-02f, -1.869220191e-02f, -1.867954297e-02f, -1.866685266e-02f, -1.865413100e-02f, -1.864137801e-02f, -1.862859371e-02f,
--1.861577813e-02f, -1.860293130e-02f, -1.859005323e-02f, -1.857714396e-02f, -1.856420350e-02f, -1.855123189e-02f, -1.853822914e-02f, -1.852519528e-02f, -1.851213034e-02f, -1.849903434e-02f,
--1.848590730e-02f, -1.847274926e-02f, -1.845956022e-02f, -1.844634023e-02f, -1.843308931e-02f, -1.841980747e-02f, -1.840649475e-02f, -1.839315117e-02f, -1.837977675e-02f, -1.836637153e-02f,
--1.835293552e-02f, -1.833946875e-02f, -1.832597125e-02f, -1.831244305e-02f, -1.829888416e-02f, -1.828529461e-02f, -1.827167443e-02f, -1.825802365e-02f, -1.824434229e-02f, -1.823063037e-02f,
--1.821688793e-02f, -1.820311499e-02f, -1.818931157e-02f, -1.817547770e-02f, -1.816161340e-02f, -1.814771871e-02f, -1.813379364e-02f, -1.811983823e-02f, -1.810585251e-02f, -1.809183648e-02f,
--1.807779019e-02f, -1.806371367e-02f, -1.804960692e-02f, -1.803546999e-02f, -1.802130290e-02f, -1.800710568e-02f, -1.799287834e-02f, -1.797862093e-02f, -1.796433346e-02f, -1.795001597e-02f,
--1.793566847e-02f, -1.792129100e-02f, -1.790688359e-02f, -1.789244625e-02f, -1.787797902e-02f, -1.786348193e-02f, -1.784895500e-02f, -1.783439825e-02f, -1.781981173e-02f, -1.780519544e-02f,
--1.779054943e-02f, -1.777587372e-02f, -1.776116833e-02f, -1.774643329e-02f, -1.773166863e-02f, -1.771687439e-02f, -1.770205058e-02f, -1.768719723e-02f, -1.767231437e-02f, -1.765740203e-02f,
--1.764246024e-02f, -1.762748902e-02f, -1.761248841e-02f, -1.759745842e-02f, -1.758239910e-02f, -1.756731046e-02f, -1.755219254e-02f, -1.753704536e-02f, -1.752186895e-02f, -1.750666334e-02f,
--1.749142855e-02f, -1.747616463e-02f, -1.746087159e-02f, -1.744554946e-02f, -1.743019827e-02f, -1.741481805e-02f, -1.739940883e-02f, -1.738397064e-02f, -1.736850351e-02f, -1.735300746e-02f,
--1.733748252e-02f, -1.732192873e-02f, -1.730634610e-02f, -1.729073468e-02f, -1.727509449e-02f, -1.725942555e-02f, -1.724372790e-02f, -1.722800157e-02f, -1.721224659e-02f, -1.719646297e-02f,
--1.718065077e-02f, -1.716480999e-02f, -1.714894068e-02f, -1.713304287e-02f, -1.711711657e-02f, -1.710116182e-02f, -1.708517866e-02f, -1.706916711e-02f, -1.705312719e-02f, -1.703705895e-02f,
--1.702096240e-02f, -1.700483759e-02f, -1.698868453e-02f, -1.697250326e-02f, -1.695629381e-02f, -1.694005621e-02f, -1.692379049e-02f, -1.690749668e-02f, -1.689117481e-02f, -1.687482491e-02f,
--1.685844700e-02f, -1.684204113e-02f, -1.682560731e-02f, -1.680914559e-02f, -1.679265599e-02f, -1.677613853e-02f, -1.675959326e-02f, -1.674302021e-02f, -1.672641939e-02f, -1.670979085e-02f,
--1.669313461e-02f, -1.667645071e-02f, -1.665973917e-02f, -1.664300003e-02f, -1.662623331e-02f, -1.660943906e-02f, -1.659261729e-02f, -1.657576804e-02f, -1.655889135e-02f, -1.654198724e-02f,
--1.652505573e-02f, -1.650809688e-02f, -1.649111070e-02f, -1.647409722e-02f, -1.645705649e-02f, -1.643998852e-02f, -1.642289336e-02f, -1.640577102e-02f, -1.638862155e-02f, -1.637144498e-02f,
--1.635424133e-02f, -1.633701065e-02f, -1.631975295e-02f, -1.630246827e-02f, -1.628515665e-02f, -1.626781811e-02f, -1.625045269e-02f, -1.623306042e-02f, -1.621564133e-02f, -1.619819545e-02f,
--1.618072282e-02f, -1.616322346e-02f, -1.614569742e-02f, -1.612814471e-02f, -1.611056538e-02f, -1.609295946e-02f, -1.607532697e-02f, -1.605766795e-02f, -1.603998244e-02f, -1.602227046e-02f,
--1.600453205e-02f, -1.598676723e-02f, -1.596897605e-02f, -1.595115854e-02f, -1.593331472e-02f, -1.591544464e-02f, -1.589754831e-02f, -1.587962579e-02f, -1.586167709e-02f, -1.584370225e-02f,
--1.582570131e-02f, -1.580767429e-02f, -1.578962124e-02f, -1.577154217e-02f, -1.575343714e-02f, -1.573530616e-02f, -1.571714928e-02f, -1.569896652e-02f, -1.568075792e-02f, -1.566252351e-02f,
--1.564426333e-02f, -1.562597740e-02f, -1.560766577e-02f, -1.558932847e-02f, -1.557096552e-02f, -1.555257697e-02f, -1.553416284e-02f, -1.551572317e-02f, -1.549725799e-02f, -1.547876735e-02f,
--1.546025126e-02f, -1.544170977e-02f, -1.542314290e-02f, -1.540455070e-02f, -1.538593319e-02f, -1.536729042e-02f, -1.534862240e-02f, -1.532992919e-02f, -1.531121081e-02f, -1.529246729e-02f,
--1.527369867e-02f, -1.525490499e-02f, -1.523608628e-02f, -1.521724257e-02f, -1.519837389e-02f, -1.517948029e-02f, -1.516056179e-02f, -1.514161844e-02f, -1.512265026e-02f, -1.510365728e-02f,
--1.508463956e-02f, -1.506559711e-02f, -1.504652997e-02f, -1.502743818e-02f, -1.500832177e-02f, -1.498918078e-02f, -1.497001524e-02f, -1.495082519e-02f, -1.493161066e-02f, -1.491237169e-02f,
--1.489310830e-02f, -1.487382055e-02f, -1.485450845e-02f, -1.483517205e-02f, -1.481581139e-02f, -1.479642649e-02f, -1.477701739e-02f, -1.475758413e-02f, -1.473812674e-02f, -1.471864525e-02f,
--1.469913971e-02f, -1.467961015e-02f, -1.466005661e-02f, -1.464047911e-02f, -1.462087769e-02f, -1.460125240e-02f, -1.458160326e-02f, -1.456193031e-02f, -1.454223359e-02f, -1.452251314e-02f,
--1.450276898e-02f, -1.448300115e-02f, -1.446320970e-02f, -1.444339465e-02f, -1.442355604e-02f, -1.440369391e-02f, -1.438380829e-02f, -1.436389922e-02f, -1.434396674e-02f, -1.432401088e-02f,
--1.430403168e-02f, -1.428402917e-02f, -1.426400339e-02f, -1.424395437e-02f, -1.422388216e-02f, -1.420378679e-02f, -1.418366829e-02f, -1.416352670e-02f, -1.414336207e-02f, -1.412317441e-02f,
--1.410296378e-02f, -1.408273020e-02f, -1.406247372e-02f, -1.404219436e-02f, -1.402189218e-02f, -1.400156719e-02f, -1.398121945e-02f, -1.396084898e-02f, -1.394045583e-02f, -1.392004003e-02f,
--1.389960162e-02f, -1.387914063e-02f, -1.385865710e-02f, -1.383815107e-02f, -1.381762257e-02f, -1.379707165e-02f, -1.377649833e-02f, -1.375590267e-02f, -1.373528468e-02f, -1.371464442e-02f,
--1.369398191e-02f, -1.367329720e-02f, -1.365259032e-02f, -1.363186131e-02f, -1.361111021e-02f, -1.359033705e-02f, -1.356954187e-02f, -1.354872471e-02f, -1.352788561e-02f, -1.350702461e-02f,
--1.348614173e-02f, -1.346523703e-02f, -1.344431053e-02f, -1.342336227e-02f, -1.340239230e-02f, -1.338140065e-02f, -1.336038735e-02f, -1.333935246e-02f, -1.331829599e-02f, -1.329721800e-02f,
--1.327611851e-02f, -1.325499757e-02f, -1.323385522e-02f, -1.321269149e-02f, -1.319150642e-02f, -1.317030006e-02f, -1.314907242e-02f, -1.312782357e-02f, -1.310655352e-02f, -1.308526233e-02f,
--1.306395003e-02f, -1.304261666e-02f, -1.302126225e-02f, -1.299988685e-02f, -1.297849050e-02f, -1.295707322e-02f, -1.293563507e-02f, -1.291417607e-02f, -1.289269627e-02f, -1.287119571e-02f,
--1.284967442e-02f, -1.282813244e-02f, -1.280656982e-02f, -1.278498658e-02f, -1.276338278e-02f, -1.274175844e-02f, -1.272011361e-02f, -1.269844833e-02f, -1.267676263e-02f, -1.265505655e-02f,
--1.263333013e-02f, -1.261158342e-02f, -1.258981644e-02f, -1.256802924e-02f, -1.254622187e-02f, -1.252439434e-02f, -1.250254672e-02f, -1.248067903e-02f, -1.245879131e-02f, -1.243688361e-02f,
--1.241495596e-02f, -1.239300840e-02f, -1.237104098e-02f, -1.234905372e-02f, -1.232704668e-02f, -1.230501988e-02f, -1.228297337e-02f, -1.226090719e-02f, -1.223882138e-02f, -1.221671598e-02f,
--1.219459102e-02f, -1.217244655e-02f, -1.215028261e-02f, -1.212809923e-02f, -1.210589645e-02f, -1.208367432e-02f, -1.206143288e-02f, -1.203917216e-02f, -1.201689220e-02f, -1.199459305e-02f,
--1.197227474e-02f, -1.194993732e-02f, -1.192758082e-02f, -1.190520528e-02f, -1.188281075e-02f, -1.186039726e-02f, -1.183796485e-02f, -1.181551357e-02f, -1.179304345e-02f, -1.177055453e-02f,
--1.174804686e-02f, -1.172552048e-02f, -1.170297541e-02f, -1.168041172e-02f, -1.165782942e-02f, -1.163522857e-02f, -1.161260921e-02f, -1.158997137e-02f, -1.156731510e-02f, -1.154464044e-02f,
--1.152194742e-02f, -1.149923609e-02f, -1.147650649e-02f, -1.145375866e-02f, -1.143099263e-02f, -1.140820846e-02f, -1.138540617e-02f, -1.136258582e-02f, -1.133974744e-02f, -1.131689107e-02f,
--1.129401675e-02f, -1.127112453e-02f, -1.124821444e-02f, -1.122528653e-02f, -1.120234083e-02f, -1.117937739e-02f, -1.115639625e-02f, -1.113339745e-02f, -1.111038102e-02f, -1.108734702e-02f,
--1.106429548e-02f, -1.104122644e-02f, -1.101813995e-02f, -1.099503604e-02f, -1.097191475e-02f, -1.094877614e-02f, -1.092562023e-02f, -1.090244707e-02f, -1.087925670e-02f, -1.085604916e-02f,
--1.083282450e-02f, -1.080958275e-02f, -1.078632396e-02f, -1.076304816e-02f, -1.073975541e-02f, -1.071644573e-02f, -1.069311917e-02f, -1.066977578e-02f, -1.064641559e-02f, -1.062303865e-02f,
--1.059964499e-02f, -1.057623467e-02f, -1.055280771e-02f, -1.052936417e-02f, -1.050590408e-02f, -1.048242748e-02f, -1.045893442e-02f, -1.043542495e-02f, -1.041189909e-02f, -1.038835689e-02f,
--1.036479840e-02f, -1.034122365e-02f, -1.031763270e-02f, -1.029402557e-02f, -1.027040231e-02f, -1.024676297e-02f, -1.022310758e-02f, -1.019943619e-02f, -1.017574883e-02f, -1.015204556e-02f,
--1.012832642e-02f, -1.010459143e-02f, -1.008084066e-02f, -1.005707414e-02f, -1.003329190e-02f, -1.000949400e-02f, -9.985680481e-03f, -9.961851376e-03f, -9.938006732e-03f, -9.914146591e-03f,
--9.890270995e-03f, -9.866379986e-03f, -9.842473607e-03f, -9.818551899e-03f, -9.794614906e-03f, -9.770662670e-03f, -9.746695234e-03f, -9.722712638e-03f, -9.698714927e-03f, -9.674702143e-03f,
--9.650674328e-03f, -9.626631524e-03f, -9.602573775e-03f, -9.578501122e-03f, -9.554413609e-03f, -9.530311277e-03f, -9.506194171e-03f, -9.482062332e-03f, -9.457915803e-03f, -9.433754626e-03f,
--9.409578845e-03f, -9.385388503e-03f, -9.361183641e-03f, -9.336964303e-03f, -9.312730532e-03f, -9.288482370e-03f, -9.264219861e-03f, -9.239943047e-03f, -9.215651971e-03f, -9.191346677e-03f,
--9.167027206e-03f, -9.142693602e-03f, -9.118345909e-03f, -9.093984168e-03f, -9.069608424e-03f, -9.045218719e-03f, -9.020815096e-03f, -8.996397598e-03f, -8.971966269e-03f, -8.947521152e-03f,
--8.923062289e-03f, -8.898589725e-03f, -8.874103501e-03f, -8.849603662e-03f, -8.825090251e-03f, -8.800563310e-03f, -8.776022884e-03f, -8.751469016e-03f, -8.726901748e-03f, -8.702321125e-03f,
--8.677727189e-03f, -8.653119984e-03f, -8.628499553e-03f, -8.603865941e-03f, -8.579219189e-03f, -8.554559342e-03f, -8.529886444e-03f, -8.505200537e-03f, -8.480501666e-03f, -8.455789873e-03f,
--8.431065203e-03f, -8.406327699e-03f, -8.381577404e-03f, -8.356814363e-03f, -8.332038618e-03f, -8.307250214e-03f, -8.282449195e-03f, -8.257635603e-03f, -8.232809482e-03f, -8.207970877e-03f,
--8.183119831e-03f, -8.158256388e-03f, -8.133380592e-03f, -8.108492486e-03f, -8.083592114e-03f, -8.058679520e-03f, -8.033754749e-03f, -8.008817843e-03f, -7.983868847e-03f, -7.958907805e-03f,
--7.933934761e-03f, -7.908949758e-03f, -7.883952840e-03f, -7.858944053e-03f, -7.833923438e-03f, -7.808891042e-03f, -7.783846906e-03f, -7.758791077e-03f, -7.733723597e-03f, -7.708644512e-03f,
--7.683553864e-03f, -7.658451698e-03f, -7.633338058e-03f, -7.608212989e-03f, -7.583076534e-03f, -7.557928738e-03f, -7.532769645e-03f, -7.507599300e-03f, -7.482417745e-03f, -7.457225026e-03f,
--7.432021188e-03f, -7.406806273e-03f, -7.381580327e-03f, -7.356343394e-03f, -7.331095518e-03f, -7.305836743e-03f, -7.280567115e-03f, -7.255286676e-03f, -7.229995473e-03f, -7.204693548e-03f,
--7.179380947e-03f, -7.154057714e-03f, -7.128723894e-03f, -7.103379530e-03f, -7.078024668e-03f, -7.052659352e-03f, -7.027283626e-03f, -7.001897535e-03f, -6.976501124e-03f, -6.951094436e-03f,
--6.925677518e-03f, -6.900250412e-03f, -6.874813165e-03f, -6.849365820e-03f, -6.823908422e-03f, -6.798441016e-03f, -6.772963646e-03f, -6.747476358e-03f, -6.721979195e-03f, -6.696472203e-03f,
--6.670955426e-03f, -6.645428910e-03f, -6.619892697e-03f, -6.594346835e-03f, -6.568791366e-03f, -6.543226337e-03f, -6.517651792e-03f, -6.492067775e-03f, -6.466474332e-03f, -6.440871507e-03f,
--6.415259345e-03f, -6.389637892e-03f, -6.364007191e-03f, -6.338367288e-03f, -6.312718228e-03f, -6.287060056e-03f, -6.261392816e-03f, -6.235716554e-03f, -6.210031314e-03f, -6.184337142e-03f,
--6.158634083e-03f, -6.132922180e-03f, -6.107201481e-03f, -6.081472028e-03f, -6.055733869e-03f, -6.029987046e-03f, -6.004231607e-03f, -5.978467595e-03f, -5.952695056e-03f, -5.926914034e-03f,
--5.901124576e-03f, -5.875326726e-03f, -5.849520529e-03f, -5.823706030e-03f, -5.797883274e-03f, -5.772052308e-03f, -5.746213175e-03f, -5.720365920e-03f, -5.694510591e-03f, -5.668647230e-03f,
--5.642775884e-03f, -5.616896598e-03f, -5.591009417e-03f, -5.565114386e-03f, -5.539211550e-03f, -5.513300955e-03f, -5.487382647e-03f, -5.461456669e-03f, -5.435523069e-03f, -5.409581890e-03f,
--5.383633178e-03f, -5.357676979e-03f, -5.331713338e-03f, -5.305742300e-03f, -5.279763911e-03f, -5.253778215e-03f, -5.227785259e-03f, -5.201785088e-03f, -5.175777747e-03f, -5.149763281e-03f,
--5.123741736e-03f, -5.097713157e-03f, -5.071677590e-03f, -5.045635081e-03f, -5.019585673e-03f, -4.993529414e-03f, -4.967466349e-03f, -4.941396522e-03f, -4.915319980e-03f, -4.889236768e-03f,
--4.863146931e-03f, -4.837050515e-03f, -4.810947566e-03f, -4.784838129e-03f, -4.758722249e-03f, -4.732599972e-03f, -4.706471344e-03f, -4.680336410e-03f, -4.654195216e-03f, -4.628047807e-03f,
--4.601894229e-03f, -4.575734527e-03f, -4.549568747e-03f, -4.523396935e-03f, -4.497219136e-03f, -4.471035396e-03f, -4.444845760e-03f, -4.418650274e-03f, -4.392448984e-03f, -4.366241936e-03f,
--4.340029174e-03f, -4.313810745e-03f, -4.287586694e-03f, -4.261357067e-03f, -4.235121910e-03f, -4.208881268e-03f, -4.182635187e-03f, -4.156383713e-03f, -4.130126891e-03f, -4.103864767e-03f,
--4.077597387e-03f, -4.051324796e-03f, -4.025047040e-03f, -3.998764166e-03f, -3.972476218e-03f, -3.946183243e-03f, -3.919885285e-03f, -3.893582392e-03f, -3.867274608e-03f, -3.840961979e-03f,
--3.814644552e-03f, -3.788322372e-03f, -3.761995484e-03f, -3.735663935e-03f, -3.709327770e-03f, -3.682987035e-03f, -3.656641776e-03f, -3.630292039e-03f, -3.603937869e-03f, -3.577579312e-03f,
--3.551216414e-03f, -3.524849221e-03f, -3.498477779e-03f, -3.472102134e-03f, -3.445722330e-03f, -3.419338415e-03f, -3.392950434e-03f, -3.366558433e-03f, -3.340162457e-03f, -3.313762553e-03f,
--3.287358766e-03f, -3.260951143e-03f, -3.234539728e-03f, -3.208124569e-03f, -3.181705710e-03f, -3.155283198e-03f, -3.128857079e-03f, -3.102427398e-03f, -3.075994201e-03f, -3.049557534e-03f,
--3.023117444e-03f, -2.996673975e-03f, -2.970227175e-03f, -2.943777088e-03f, -2.917323760e-03f, -2.890867238e-03f, -2.864407567e-03f, -2.837944794e-03f, -2.811478964e-03f, -2.785010123e-03f,
--2.758538317e-03f, -2.732063592e-03f, -2.705585994e-03f, -2.679105568e-03f, -2.652622361e-03f, -2.626136419e-03f, -2.599647787e-03f, -2.573156511e-03f, -2.546662638e-03f, -2.520166213e-03f,
--2.493667282e-03f, -2.467165891e-03f, -2.440662086e-03f, -2.414155913e-03f, -2.387647418e-03f, -2.361136646e-03f, -2.334623644e-03f, -2.308108458e-03f, -2.281591133e-03f, -2.255071716e-03f,
--2.228550252e-03f, -2.202026788e-03f, -2.175501368e-03f, -2.148974040e-03f, -2.122444849e-03f, -2.095913841e-03f, -2.069381062e-03f, -2.042846558e-03f, -2.016310375e-03f, -1.989772558e-03f,
--1.963233154e-03f, -1.936692208e-03f, -1.910149768e-03f, -1.883605877e-03f, -1.857060583e-03f, -1.830513931e-03f, -1.803965968e-03f, -1.777416738e-03f, -1.750866289e-03f, -1.724314665e-03f,
--1.697761914e-03f, -1.671208080e-03f, -1.644653210e-03f, -1.618097350e-03f, -1.591540545e-03f, -1.564982842e-03f, -1.538424286e-03f, -1.511864923e-03f, -1.485304800e-03f, -1.458743961e-03f,
--1.432182454e-03f, -1.405620324e-03f, -1.379057616e-03f, -1.352494377e-03f, -1.325930653e-03f, -1.299366489e-03f, -1.272801931e-03f, -1.246237026e-03f, -1.219671819e-03f, -1.193106356e-03f,
--1.166540683e-03f, -1.139974846e-03f, -1.113408890e-03f, -1.086842862e-03f, -1.060276807e-03f, -1.033710772e-03f, -1.007144801e-03f, -9.805789422e-04f, -9.540132396e-04f, -9.274477398e-04f,
--9.008824885e-04f, -8.743175316e-04f, -8.477529149e-04f, -8.211886843e-04f, -7.946248855e-04f, -7.680615645e-04f, -7.414987670e-04f, -7.149365389e-04f, -6.883749259e-04f, -6.618139739e-04f,
--6.352537287e-04f, -6.086942361e-04f, -5.821355420e-04f, -5.555776920e-04f, -5.290207319e-04f, -5.024647077e-04f, -4.759096650e-04f, -4.493556496e-04f, -4.228027073e-04f, -3.962508838e-04f,
--3.697002250e-04f, -3.431507765e-04f, -3.166025842e-04f, -2.900556937e-04f, -2.635101508e-04f, -2.369660013e-04f, -2.104232908e-04f, -1.838820651e-04f, -1.573423699e-04f, -1.308042509e-04f,
--1.042677538e-04f, -7.773292437e-05f, -5.119980821e-05f, -2.466845105e-05f, 1.861101446e-06f, 2.838880359e-05f, 5.491460973e-05f, 8.143847418e-05f, 1.079603513e-04f, 1.344801955e-04f,
-1.609979610e-04f, 1.875136023e-04f, 2.140270737e-04f, 2.405383296e-04f, 2.670473244e-04f, 2.935540125e-04f, 3.200583482e-04f, 3.465602860e-04f, 3.730597804e-04f, 3.995567857e-04f,
-4.260512563e-04f, 4.525431467e-04f, 4.790324113e-04f, 5.055190047e-04f, 5.320028812e-04f, 5.584839953e-04f, 5.849623015e-04f, 6.114377543e-04f, 6.379103082e-04f, 6.643799176e-04f,
-6.908465371e-04f, 7.173101213e-04f, 7.437706245e-04f, 7.702280014e-04f, 7.966822065e-04f, 8.231331944e-04f, 8.495809196e-04f, 8.760253366e-04f, 9.024664001e-04f, 9.289040647e-04f,
-9.553382849e-04f, 9.817690154e-04f, 1.008196211e-03f, 1.034619825e-03f, 1.061039814e-03f, 1.087456132e-03f, 1.113868733e-03f, 1.140277572e-03f, 1.166682604e-03f, 1.193083783e-03f,
-1.219481065e-03f, 1.245874403e-03f, 1.272263753e-03f, 1.298649069e-03f, 1.325030306e-03f, 1.351407419e-03f, 1.377780362e-03f, 1.404149090e-03f, 1.430513558e-03f, 1.456873722e-03f,
-1.483229534e-03f, 1.509580951e-03f, 1.535927928e-03f, 1.562270418e-03f, 1.588608377e-03f, 1.614941760e-03f, 1.641270521e-03f, 1.667594616e-03f, 1.693913999e-03f, 1.720228625e-03f,
-1.746538449e-03f, 1.772843427e-03f, 1.799143512e-03f, 1.825438660e-03f, 1.851728826e-03f, 1.878013965e-03f, 1.904294031e-03f, 1.930568980e-03f, 1.956838767e-03f, 1.983103347e-03f,
-2.009362674e-03f, 2.035616704e-03f, 2.061865392e-03f, 2.088108693e-03f, 2.114346562e-03f, 2.140578954e-03f, 2.166805824e-03f, 2.193027127e-03f, 2.219242818e-03f, 2.245452853e-03f,
-2.271657187e-03f, 2.297855775e-03f, 2.324048571e-03f, 2.350235531e-03f, 2.376416611e-03f, 2.402591766e-03f, 2.428760950e-03f, 2.454924119e-03f, 2.481081229e-03f, 2.507232234e-03f,
-2.533377090e-03f, 2.559515752e-03f, 2.585648175e-03f, 2.611774315e-03f, 2.637894127e-03f, 2.664007567e-03f, 2.690114589e-03f, 2.716215149e-03f, 2.742309203e-03f, 2.768396706e-03f,
-2.794477613e-03f, 2.820551880e-03f, 2.846619463e-03f, 2.872680315e-03f, 2.898734395e-03f, 2.924781655e-03f, 2.950822053e-03f, 2.976855544e-03f, 3.002882083e-03f, 3.028901625e-03f,
-3.054914127e-03f, 3.080919544e-03f, 3.106917832e-03f, 3.132908945e-03f, 3.158892841e-03f, 3.184869473e-03f, 3.210838799e-03f, 3.236800774e-03f, 3.262755353e-03f, 3.288702492e-03f,
-3.314642147e-03f, 3.340574273e-03f, 3.366498827e-03f, 3.392415764e-03f, 3.418325040e-03f, 3.444226611e-03f, 3.470120432e-03f, 3.496006460e-03f, 3.521884650e-03f, 3.547754958e-03f,
-3.573617340e-03f, 3.599471751e-03f, 3.625318149e-03f, 3.651156488e-03f, 3.676986725e-03f, 3.702808816e-03f, 3.728622716e-03f, 3.754428382e-03f, 3.780225769e-03f, 3.806014835e-03f,
-3.831795534e-03f, 3.857567823e-03f, 3.883331658e-03f, 3.909086994e-03f, 3.934833789e-03f, 3.960571999e-03f, 3.986301579e-03f, 4.012022485e-03f, 4.037734674e-03f, 4.063438103e-03f,
-4.089132726e-03f, 4.114818502e-03f, 4.140495385e-03f, 4.166163332e-03f, 4.191822299e-03f, 4.217472244e-03f, 4.243113121e-03f, 4.268744888e-03f, 4.294367501e-03f, 4.319980915e-03f,
-4.345585089e-03f, 4.371179978e-03f, 4.396765538e-03f, 4.422341726e-03f, 4.447908499e-03f, 4.473465813e-03f, 4.499013624e-03f, 4.524551890e-03f, 4.550080566e-03f, 4.575599609e-03f,
-4.601108977e-03f, 4.626608625e-03f, 4.652098510e-03f, 4.677578589e-03f, 4.703048819e-03f, 4.728509155e-03f, 4.753959556e-03f, 4.779399978e-03f, 4.804830377e-03f, 4.830250711e-03f,
-4.855660935e-03f, 4.881061008e-03f, 4.906450885e-03f, 4.931830524e-03f, 4.957199882e-03f, 4.982558915e-03f, 5.007907581e-03f, 5.033245836e-03f, 5.058573637e-03f, 5.083890942e-03f,
-5.109197707e-03f, 5.134493889e-03f, 5.159779447e-03f, 5.185054335e-03f, 5.210318513e-03f, 5.235571936e-03f, 5.260814562e-03f, 5.286046348e-03f, 5.311267252e-03f, 5.336477230e-03f,
-5.361676240e-03f, 5.386864239e-03f, 5.412041184e-03f, 5.437207033e-03f, 5.462361743e-03f, 5.487505271e-03f, 5.512637575e-03f, 5.537758612e-03f, 5.562868339e-03f, 5.587966715e-03f,
-5.613053695e-03f, 5.638129239e-03f, 5.663193302e-03f, 5.688245844e-03f, 5.713286821e-03f, 5.738316191e-03f, 5.763333911e-03f, 5.788339940e-03f, 5.813334235e-03f, 5.838316753e-03f,
-5.863287452e-03f, 5.888246290e-03f, 5.913193225e-03f, 5.938128214e-03f, 5.963051215e-03f, 5.987962187e-03f, 6.012861086e-03f, 6.037747870e-03f, 6.062622498e-03f, 6.087484928e-03f,
-6.112335117e-03f, 6.137173023e-03f, 6.161998605e-03f, 6.186811820e-03f, 6.211612626e-03f, 6.236400981e-03f, 6.261176844e-03f, 6.285940172e-03f, 6.310690924e-03f, 6.335429057e-03f,
-6.360154531e-03f, 6.384867302e-03f, 6.409567330e-03f, 6.434254573e-03f, 6.458928988e-03f, 6.483590534e-03f, 6.508239170e-03f, 6.532874853e-03f, 6.557497543e-03f, 6.582107197e-03f,
-6.606703774e-03f, 6.631287233e-03f, 6.655857531e-03f, 6.680414628e-03f, 6.704958482e-03f, 6.729489051e-03f, 6.754006294e-03f, 6.778510169e-03f, 6.803000636e-03f, 6.827477652e-03f,
-6.851941178e-03f, 6.876391170e-03f, 6.900827588e-03f, 6.925250391e-03f, 6.949659538e-03f, 6.974054986e-03f, 6.998436696e-03f, 7.022804626e-03f, 7.047158735e-03f, 7.071498981e-03f,
-7.095825325e-03f, 7.120137724e-03f, 7.144436137e-03f, 7.168720524e-03f, 7.192990844e-03f, 7.217247056e-03f, 7.241489119e-03f, 7.265716992e-03f, 7.289930634e-03f, 7.314130004e-03f,
-7.338315062e-03f, 7.362485767e-03f, 7.386642078e-03f, 7.410783954e-03f, 7.434911355e-03f, 7.459024240e-03f, 7.483122569e-03f, 7.507206300e-03f, 7.531275393e-03f, 7.555329809e-03f,
-7.579369505e-03f, 7.603394442e-03f, 7.627404580e-03f, 7.651399877e-03f, 7.675380294e-03f, 7.699345790e-03f, 7.723296325e-03f, 7.747231858e-03f, 7.771152349e-03f, 7.795057758e-03f,
-7.818948045e-03f, 7.842823169e-03f, 7.866683091e-03f, 7.890527769e-03f, 7.914357165e-03f, 7.938171238e-03f, 7.961969948e-03f, 7.985753254e-03f, 8.009521117e-03f, 8.033273498e-03f,
-8.057010355e-03f, 8.080731650e-03f, 8.104437341e-03f, 8.128127390e-03f, 8.151801757e-03f, 8.175460401e-03f, 8.199103283e-03f, 8.222730364e-03f, 8.246341603e-03f, 8.269936961e-03f,
-8.293516399e-03f, 8.317079876e-03f, 8.340627353e-03f, 8.364158791e-03f, 8.387674149e-03f, 8.411173390e-03f, 8.434656472e-03f, 8.458123357e-03f, 8.481574005e-03f, 8.505008378e-03f,
-8.528426435e-03f, 8.551828137e-03f, 8.575213445e-03f, 8.598582320e-03f, 8.621934722e-03f, 8.645270613e-03f, 8.668589953e-03f, 8.691892703e-03f, 8.715178825e-03f, 8.738448278e-03f,
-8.761701024e-03f, 8.784937025e-03f, 8.808156240e-03f, 8.831358631e-03f, 8.854544160e-03f, 8.877712787e-03f, 8.900864473e-03f, 8.923999180e-03f, 8.947116870e-03f, 8.970217502e-03f,
-8.993301039e-03f, 9.016367442e-03f, 9.039416672e-03f, 9.062448690e-03f, 9.085463459e-03f, 9.108460939e-03f, 9.131441092e-03f, 9.154403879e-03f, 9.177349263e-03f, 9.200277204e-03f,
-9.223187665e-03f, 9.246080606e-03f, 9.268955991e-03f, 9.291813779e-03f, 9.314653934e-03f, 9.337476416e-03f, 9.360281188e-03f, 9.383068212e-03f, 9.405837449e-03f, 9.428588862e-03f,
-9.451322411e-03f, 9.474038061e-03f, 9.496735771e-03f, 9.519415505e-03f, 9.542077224e-03f, 9.564720891e-03f, 9.587346468e-03f, 9.609953916e-03f, 9.632543199e-03f, 9.655114278e-03f,
-9.677667116e-03f, 9.700201675e-03f, 9.722717917e-03f, 9.745215805e-03f, 9.767695301e-03f, 9.790156368e-03f, 9.812598968e-03f, 9.835023063e-03f, 9.857428617e-03f, 9.879815592e-03f,
-9.902183951e-03f, 9.924533655e-03f, 9.946864668e-03f, 9.969176953e-03f, 9.991470472e-03f, 1.001374519e-02f, 1.003600107e-02f, 1.005823806e-02f, 1.008045615e-02f, 1.010265528e-02f,
-1.012483543e-02f, 1.014699655e-02f, 1.016913861e-02f, 1.019126157e-02f, 1.021336539e-02f, 1.023545004e-02f, 1.025751548e-02f, 1.027956168e-02f, 1.030158859e-02f, 1.032359618e-02f,
-1.034558441e-02f, 1.036755326e-02f, 1.038950267e-02f, 1.041143261e-02f, 1.043334306e-02f, 1.045523396e-02f, 1.047710529e-02f, 1.049895701e-02f, 1.052078907e-02f, 1.054260146e-02f,
-1.056439412e-02f, 1.058616702e-02f, 1.060792014e-02f, 1.062965342e-02f, 1.065136683e-02f, 1.067306035e-02f, 1.069473392e-02f, 1.071638752e-02f, 1.073802111e-02f, 1.075963466e-02f,
-1.078122812e-02f, 1.080280146e-02f, 1.082435466e-02f, 1.084588766e-02f, 1.086740043e-02f, 1.088889295e-02f, 1.091036517e-02f, 1.093181705e-02f, 1.095324857e-02f, 1.097465968e-02f,
-1.099605036e-02f, 1.101742056e-02f, 1.103877025e-02f, 1.106009939e-02f, 1.108140795e-02f, 1.110269590e-02f, 1.112396319e-02f, 1.114520980e-02f, 1.116643568e-02f, 1.118764081e-02f,
-1.120882514e-02f, 1.122998865e-02f, 1.125113129e-02f, 1.127225303e-02f, 1.129335385e-02f, 1.131443369e-02f, 1.133549253e-02f, 1.135653033e-02f, 1.137754706e-02f, 1.139854268e-02f,
-1.141951716e-02f, 1.144047047e-02f, 1.146140256e-02f, 1.148231340e-02f, 1.150320296e-02f, 1.152407121e-02f, 1.154491811e-02f, 1.156574362e-02f, 1.158654771e-02f, 1.160733035e-02f,
-1.162809150e-02f, 1.164883113e-02f, 1.166954920e-02f, 1.169024568e-02f, 1.171092053e-02f, 1.173157373e-02f, 1.175220523e-02f, 1.177281500e-02f, 1.179340301e-02f, 1.181396922e-02f,
-1.183451361e-02f, 1.185503613e-02f, 1.187553675e-02f, 1.189601544e-02f, 1.191647217e-02f, 1.193690689e-02f, 1.195731959e-02f, 1.197771021e-02f, 1.199807874e-02f, 1.201842513e-02f,
-1.203874935e-02f, 1.205905137e-02f, 1.207933116e-02f, 1.209958867e-02f, 1.211982389e-02f, 1.214003677e-02f, 1.216022728e-02f, 1.218039539e-02f, 1.220054107e-02f, 1.222066428e-02f,
-1.224076498e-02f, 1.226084315e-02f, 1.228089875e-02f, 1.230093175e-02f, 1.232094212e-02f, 1.234092982e-02f, 1.236089482e-02f, 1.238083709e-02f, 1.240075659e-02f, 1.242065329e-02f,
-1.244052717e-02f, 1.246037817e-02f, 1.248020628e-02f, 1.250001147e-02f, 1.251979369e-02f, 1.253955291e-02f, 1.255928911e-02f, 1.257900225e-02f, 1.259869229e-02f, 1.261835922e-02f,
-1.263800298e-02f, 1.265762356e-02f, 1.267722091e-02f, 1.269679501e-02f, 1.271634583e-02f, 1.273587332e-02f, 1.275537747e-02f, 1.277485824e-02f, 1.279431559e-02f, 1.281374949e-02f,
-1.283315992e-02f, 1.285254683e-02f, 1.287191021e-02f, 1.289125001e-02f, 1.291056621e-02f, 1.292985876e-02f, 1.294912765e-02f, 1.296837284e-02f, 1.298759430e-02f, 1.300679199e-02f,
-1.302596589e-02f, 1.304511596e-02f, 1.306424218e-02f, 1.308334450e-02f, 1.310242291e-02f, 1.312147736e-02f, 1.314050783e-02f, 1.315951428e-02f, 1.317849669e-02f, 1.319745502e-02f,
-1.321638925e-02f, 1.323529933e-02f, 1.325418525e-02f, 1.327304696e-02f, 1.329188444e-02f, 1.331069767e-02f, 1.332948659e-02f, 1.334825120e-02f, 1.336699144e-02f, 1.338570731e-02f,
-1.340439875e-02f, 1.342306575e-02f, 1.344170828e-02f, 1.346032629e-02f, 1.347891977e-02f, 1.349748868e-02f, 1.351603299e-02f, 1.353455267e-02f, 1.355304769e-02f, 1.357151802e-02f,
-1.358996363e-02f, 1.360838449e-02f, 1.362678057e-02f, 1.364515184e-02f, 1.366349827e-02f, 1.368181983e-02f, 1.370011649e-02f, 1.371838822e-02f, 1.373663499e-02f, 1.375485677e-02f,
-1.377305353e-02f, 1.379122524e-02f, 1.380937187e-02f, 1.382749340e-02f, 1.384558978e-02f, 1.386366100e-02f, 1.388170702e-02f, 1.389972782e-02f, 1.391772336e-02f, 1.393569361e-02f,
-1.395363855e-02f, 1.397155815e-02f, 1.398945237e-02f, 1.400732119e-02f, 1.402516458e-02f, 1.404298252e-02f, 1.406077496e-02f, 1.407854188e-02f, 1.409628326e-02f, 1.411399906e-02f,
-1.413168925e-02f, 1.414935382e-02f, 1.416699272e-02f, 1.418460593e-02f, 1.420219342e-02f, 1.421975516e-02f, 1.423729113e-02f, 1.425480129e-02f, 1.427228561e-02f, 1.428974408e-02f,
-1.430717665e-02f, 1.432458331e-02f, 1.434196402e-02f, 1.435931875e-02f, 1.437664748e-02f, 1.439395018e-02f, 1.441122682e-02f, 1.442847737e-02f, 1.444570180e-02f, 1.446290010e-02f,
-1.448007222e-02f, 1.449721814e-02f, 1.451433783e-02f, 1.453143127e-02f, 1.454849843e-02f, 1.456553928e-02f, 1.458255379e-02f, 1.459954193e-02f, 1.461650368e-02f, 1.463343901e-02f,
-1.465034789e-02f, 1.466723030e-02f, 1.468408620e-02f, 1.470091558e-02f, 1.471771840e-02f, 1.473449463e-02f, 1.475124425e-02f, 1.476796724e-02f, 1.478466356e-02f, 1.480133318e-02f,
-1.481797609e-02f, 1.483459225e-02f, 1.485118164e-02f, 1.486774422e-02f, 1.488427998e-02f, 1.490078889e-02f, 1.491727092e-02f, 1.493372604e-02f, 1.495015423e-02f, 1.496655545e-02f,
-1.498292969e-02f, 1.499927692e-02f, 1.501559711e-02f, 1.503189024e-02f, 1.504815627e-02f, 1.506439518e-02f, 1.508060695e-02f, 1.509679156e-02f, 1.511294896e-02f, 1.512907914e-02f,
-1.514518208e-02f, 1.516125774e-02f, 1.517730610e-02f, 1.519332713e-02f, 1.520932081e-02f, 1.522528712e-02f, 1.524122602e-02f, 1.525713749e-02f, 1.527302151e-02f, 1.528887805e-02f,
-1.530470709e-02f, 1.532050859e-02f, 1.533628254e-02f, 1.535202890e-02f, 1.536774766e-02f, 1.538343879e-02f, 1.539910226e-02f, 1.541473805e-02f, 1.543034613e-02f, 1.544592647e-02f,
-1.546147906e-02f, 1.547700387e-02f, 1.549250087e-02f, 1.550797004e-02f, 1.552341135e-02f, 1.553882478e-02f, 1.555421031e-02f, 1.556956790e-02f, 1.558489754e-02f, 1.560019919e-02f,
-1.561547284e-02f, 1.563071847e-02f, 1.564593604e-02f, 1.566112553e-02f, 1.567628692e-02f, 1.569142018e-02f, 1.570652529e-02f, 1.572160223e-02f, 1.573665097e-02f, 1.575167148e-02f,
-1.576666375e-02f, 1.578162775e-02f, 1.579656345e-02f, 1.581147084e-02f, 1.582634988e-02f, 1.584120055e-02f, 1.585602284e-02f, 1.587081671e-02f, 1.588558215e-02f, 1.590031912e-02f,
-1.591502762e-02f, 1.592970760e-02f, 1.594435905e-02f, 1.595898195e-02f, 1.597357627e-02f, 1.598814199e-02f, 1.600267909e-02f, 1.601718754e-02f, 1.603166731e-02f, 1.604611840e-02f,
-1.606054077e-02f, 1.607493440e-02f, 1.608929927e-02f, 1.610363535e-02f, 1.611794263e-02f, 1.613222107e-02f, 1.614647067e-02f, 1.616069138e-02f, 1.617488320e-02f, 1.618904610e-02f,
-1.620318006e-02f, 1.621728505e-02f, 1.623136105e-02f, 1.624540804e-02f, 1.625942600e-02f, 1.627341490e-02f, 1.628737473e-02f, 1.630130545e-02f, 1.631520706e-02f, 1.632907953e-02f,
-1.634292282e-02f, 1.635673694e-02f, 1.637052184e-02f, 1.638427751e-02f, 1.639800393e-02f, 1.641170108e-02f, 1.642536893e-02f, 1.643900746e-02f, 1.645261666e-02f, 1.646619649e-02f,
-1.647974694e-02f, 1.649326799e-02f, 1.650675962e-02f, 1.652022180e-02f, 1.653365451e-02f, 1.654705773e-02f, 1.656043145e-02f, 1.657377563e-02f, 1.658709027e-02f, 1.660037533e-02f,
-1.661363080e-02f, 1.662685665e-02f, 1.664005287e-02f, 1.665321943e-02f, 1.666635632e-02f, 1.667946351e-02f, 1.669254099e-02f, 1.670558872e-02f, 1.671860670e-02f, 1.673159490e-02f,
-1.674455329e-02f, 1.675748187e-02f, 1.677038061e-02f, 1.678324949e-02f, 1.679608849e-02f, 1.680889759e-02f, 1.682167676e-02f, 1.683442600e-02f, 1.684714528e-02f, 1.685983457e-02f,
-1.687249387e-02f, 1.688512314e-02f, 1.689772238e-02f, 1.691029155e-02f, 1.692283065e-02f, 1.693533965e-02f, 1.694781853e-02f, 1.696026727e-02f, 1.697268586e-02f, 1.698507426e-02f,
-1.699743248e-02f, 1.700976047e-02f, 1.702205824e-02f, 1.703432575e-02f, 1.704656298e-02f, 1.705876993e-02f, 1.707094656e-02f, 1.708309287e-02f, 1.709520882e-02f, 1.710729441e-02f,
-1.711934961e-02f, 1.713137441e-02f, 1.714336878e-02f, 1.715533272e-02f, 1.716726619e-02f, 1.717916918e-02f, 1.719104167e-02f, 1.720288365e-02f, 1.721469510e-02f, 1.722647599e-02f,
-1.723822631e-02f, 1.724994604e-02f, 1.726163516e-02f, 1.727329366e-02f, 1.728492151e-02f, 1.729651870e-02f, 1.730808522e-02f, 1.731962103e-02f, 1.733112613e-02f, 1.734260050e-02f,
-1.735404412e-02f, 1.736545697e-02f, 1.737683903e-02f, 1.738819029e-02f, 1.739951073e-02f, 1.741080033e-02f, 1.742205907e-02f, 1.743328694e-02f, 1.744448393e-02f, 1.745565000e-02f,
-1.746678515e-02f, 1.747788936e-02f, 1.748896261e-02f, 1.750000488e-02f, 1.751101616e-02f, 1.752199643e-02f, 1.753294568e-02f, 1.754386388e-02f, 1.755475102e-02f, 1.756560708e-02f,
-1.757643205e-02f, 1.758722591e-02f, 1.759798865e-02f, 1.760872024e-02f, 1.761942067e-02f, 1.763008993e-02f, 1.764072800e-02f, 1.765133486e-02f, 1.766191049e-02f, 1.767245488e-02f,
-1.768296802e-02f, 1.769344988e-02f, 1.770390046e-02f, 1.771431973e-02f, 1.772470768e-02f, 1.773506430e-02f, 1.774538956e-02f, 1.775568346e-02f, 1.776594597e-02f, 1.777617708e-02f,
-1.778637679e-02f, 1.779654506e-02f, 1.780668188e-02f, 1.781678725e-02f, 1.782686114e-02f, 1.783690354e-02f, 1.784691443e-02f, 1.785689380e-02f, 1.786684164e-02f, 1.787675793e-02f,
-1.788664264e-02f, 1.789649578e-02f, 1.790631732e-02f, 1.791610725e-02f, 1.792586556e-02f, 1.793559223e-02f, 1.794528724e-02f, 1.795495058e-02f, 1.796458223e-02f, 1.797418219e-02f,
-1.798375044e-02f, 1.799328696e-02f, 1.800279174e-02f, 1.801226476e-02f, 1.802170601e-02f, 1.803111548e-02f, 1.804049315e-02f, 1.804983901e-02f, 1.805915304e-02f, 1.806843523e-02f,
-1.807768557e-02f, 1.808690404e-02f, 1.809609063e-02f, 1.810524532e-02f, 1.811436811e-02f, 1.812345897e-02f, 1.813251790e-02f, 1.814154488e-02f, 1.815053990e-02f, 1.815950294e-02f,
-1.816843399e-02f, 1.817733304e-02f, 1.818620007e-02f, 1.819503507e-02f, 1.820383804e-02f, 1.821260894e-02f, 1.822134778e-02f, 1.823005454e-02f, 1.823872921e-02f, 1.824737177e-02f,
-1.825598221e-02f, 1.826456052e-02f, 1.827310668e-02f, 1.828162069e-02f, 1.829010253e-02f, 1.829855219e-02f, 1.830696965e-02f, 1.831535490e-02f, 1.832370794e-02f, 1.833202875e-02f,
-1.834031731e-02f, 1.834857362e-02f, 1.835679766e-02f, 1.836498942e-02f, 1.837314889e-02f, 1.838127606e-02f, 1.838937091e-02f, 1.839743343e-02f, 1.840546362e-02f, 1.841346145e-02f,
-1.842142693e-02f, 1.842936003e-02f, 1.843726075e-02f, 1.844512907e-02f, 1.845296498e-02f, 1.846076847e-02f, 1.846853954e-02f, 1.847627816e-02f, 1.848398433e-02f, 1.849165804e-02f,
-1.849929927e-02f, 1.850690801e-02f, 1.851448426e-02f, 1.852202801e-02f, 1.852953923e-02f, 1.853701793e-02f, 1.854446408e-02f, 1.855187769e-02f, 1.855925873e-02f, 1.856660721e-02f,
-1.857392310e-02f, 1.858120640e-02f, 1.858845709e-02f, 1.859567518e-02f, 1.860286064e-02f, 1.861001347e-02f, 1.861713365e-02f, 1.862422118e-02f, 1.863127605e-02f, 1.863829824e-02f,
-1.864528776e-02f, 1.865224457e-02f, 1.865916869e-02f, 1.866606009e-02f, 1.867291877e-02f, 1.867974472e-02f, 1.868653792e-02f, 1.869329838e-02f, 1.870002608e-02f, 1.870672100e-02f,
-1.871338315e-02f, 1.872001251e-02f, 1.872660907e-02f, 1.873317282e-02f, 1.873970376e-02f, 1.874620187e-02f, 1.875266715e-02f, 1.875909959e-02f, 1.876549917e-02f, 1.877186590e-02f,
-1.877819975e-02f, 1.878450073e-02f, 1.879076882e-02f, 1.879700401e-02f, 1.880320631e-02f, 1.880937569e-02f, 1.881551215e-02f, 1.882161568e-02f, 1.882768627e-02f, 1.883372392e-02f,
-1.883972861e-02f, 1.884570035e-02f, 1.885163911e-02f, 1.885754490e-02f, 1.886341770e-02f, 1.886925750e-02f, 1.887506431e-02f, 1.888083810e-02f, 1.888657888e-02f, 1.889228664e-02f,
-1.889796136e-02f, 1.890360304e-02f, 1.890921168e-02f, 1.891478726e-02f, 1.892032978e-02f, 1.892583923e-02f, 1.893131560e-02f, 1.893675889e-02f, 1.894216909e-02f, 1.894754619e-02f,
-1.895289019e-02f, 1.895820107e-02f, 1.896347883e-02f, 1.896872347e-02f, 1.897393498e-02f, 1.897911335e-02f, 1.898425857e-02f, 1.898937064e-02f, 1.899444955e-02f, 1.899949529e-02f,
-1.900450786e-02f, 1.900948726e-02f, 1.901443346e-02f, 1.901934648e-02f, 1.902422630e-02f, 1.902907292e-02f, 1.903388633e-02f, 1.903866652e-02f, 1.904341349e-02f, 1.904812723e-02f,
-1.905280774e-02f, 1.905745501e-02f, 1.906206903e-02f, 1.906664981e-02f, 1.907119732e-02f, 1.907571158e-02f, 1.908019257e-02f, 1.908464028e-02f, 1.908905472e-02f, 1.909343587e-02f,
-1.909778373e-02f, 1.910209830e-02f, 1.910637957e-02f, 1.911062754e-02f, 1.911484220e-02f, 1.911902354e-02f, 1.912317156e-02f, 1.912728626e-02f, 1.913136763e-02f, 1.913541566e-02f,
-1.913943036e-02f, 1.914341171e-02f, 1.914735971e-02f, 1.915127436e-02f, 1.915515566e-02f, 1.915900359e-02f, 1.916281816e-02f, 1.916659935e-02f, 1.917034718e-02f, 1.917406162e-02f,
-1.917774268e-02f, 1.918139035e-02f, 1.918500464e-02f, 1.918858552e-02f, 1.919213301e-02f, 1.919564710e-02f, 1.919912778e-02f, 1.920257505e-02f, 1.920598891e-02f, 1.920936935e-02f,
-1.921271636e-02f, 1.921602996e-02f, 1.921931012e-02f, 1.922255686e-02f, 1.922577016e-02f, 1.922895002e-02f, 1.923209644e-02f, 1.923520942e-02f, 1.923828894e-02f, 1.924133502e-02f,
-1.924434765e-02f, 1.924732682e-02f, 1.925027252e-02f, 1.925318477e-02f, 1.925606355e-02f, 1.925890887e-02f, 1.926172071e-02f, 1.926449909e-02f, 1.926724398e-02f, 1.926995540e-02f,
-1.927263334e-02f, 1.927527780e-02f, 1.927788877e-02f, 1.928046626e-02f, 1.928301025e-02f, 1.928552076e-02f, 1.928799777e-02f, 1.929044128e-02f, 1.929285130e-02f, 1.929522782e-02f,
-1.929757084e-02f, 1.929988036e-02f, 1.930215637e-02f, 1.930439888e-02f, 1.930660788e-02f, 1.930878337e-02f, 1.931092535e-02f, 1.931303381e-02f, 1.931510877e-02f, 1.931715020e-02f,
-1.931915813e-02f, 1.932113253e-02f, 1.932307342e-02f, 1.932498079e-02f, 1.932685463e-02f, 1.932869496e-02f, 1.933050176e-02f, 1.933227505e-02f, 1.933401480e-02f, 1.933572104e-02f,
-1.933739374e-02f, 1.933903292e-02f, 1.934063858e-02f, 1.934221071e-02f, 1.934374931e-02f, 1.934525438e-02f, 1.934672593e-02f, 1.934816395e-02f, 1.934956843e-02f, 1.935093939e-02f,
-1.935227683e-02f, 1.935358073e-02f, 1.935485110e-02f, 1.935608795e-02f, 1.935729126e-02f, 1.935846105e-02f, 1.935959731e-02f, 1.936070005e-02f, 1.936176925e-02f, 1.936280493e-02f,
-1.936380708e-02f, 1.936477571e-02f, 1.936571081e-02f, 1.936661239e-02f, 1.936748044e-02f, 1.936831497e-02f, 1.936911598e-02f, 1.936988347e-02f, 1.937061743e-02f, 1.937131788e-02f,
-1.937198481e-02f, 1.937261822e-02f, 1.937321811e-02f, 1.937378449e-02f, 1.937431736e-02f, 1.937481672e-02f, 1.937528256e-02f, 1.937571490e-02f, 1.937611372e-02f, 1.937647905e-02f,
-1.937681086e-02f, 1.937710918e-02f, 1.937737399e-02f, 1.937760530e-02f, 1.937780312e-02f, 1.937796744e-02f, 1.937809827e-02f, 1.937819561e-02f, 1.937825946e-02f, 1.937828982e-02f,
-1.937828669e-02f, 1.937825009e-02f, 1.937818000e-02f, 1.937807644e-02f, 1.937793940e-02f, 1.937776889e-02f, 1.937756490e-02f, 1.937732745e-02f, 1.937705654e-02f, 1.937675216e-02f,
-1.937641432e-02f, 1.937604303e-02f, 1.937563828e-02f, 1.937520009e-02f, 1.937472844e-02f, 1.937422335e-02f, 1.937368482e-02f, 1.937311285e-02f, 1.937250745e-02f, 1.937186861e-02f,
-1.937119635e-02f, 1.937049066e-02f, 1.936975155e-02f, 1.936897902e-02f, 1.936817308e-02f, 1.936733373e-02f, 1.936646097e-02f, 1.936555481e-02f, 1.936461524e-02f, 1.936364229e-02f,
-1.936263594e-02f, 1.936159620e-02f, 1.936052308e-02f, 1.935941659e-02f, 1.935827671e-02f, 1.935710347e-02f, 1.935589686e-02f, 1.935465689e-02f, 1.935338356e-02f, 1.935207688e-02f,
-1.935073684e-02f, 1.934936347e-02f, 1.934795675e-02f, 1.934651670e-02f, 1.934504332e-02f, 1.934353662e-02f, 1.934199659e-02f, 1.934042325e-02f, 1.933881660e-02f, 1.933717664e-02f,
-1.933550338e-02f, 1.933379683e-02f, 1.933205699e-02f, 1.933028386e-02f, 1.932847745e-02f, 1.932663777e-02f, 1.932476482e-02f, 1.932285861e-02f, 1.932091914e-02f, 1.931894642e-02f,
-1.931694045e-02f, 1.931490124e-02f, 1.931282879e-02f, 1.931072312e-02f, 1.930858423e-02f, 1.930641211e-02f, 1.930420679e-02f, 1.930196826e-02f, 1.929969653e-02f, 1.929739161e-02f,
-1.929505350e-02f, 1.929268221e-02f, 1.929027775e-02f, 1.928784012e-02f, 1.928536933e-02f, 1.928286539e-02f, 1.928032829e-02f, 1.927775806e-02f, 1.927515469e-02f, 1.927251819e-02f,
-1.926984858e-02f, 1.926714584e-02f, 1.926441000e-02f, 1.926164106e-02f, 1.925883903e-02f, 1.925600391e-02f, 1.925313571e-02f, 1.925023444e-02f, 1.924730011e-02f, 1.924433271e-02f,
-1.924133227e-02f, 1.923829879e-02f, 1.923523227e-02f, 1.923213272e-02f, 1.922900015e-02f, 1.922583457e-02f, 1.922263599e-02f, 1.921940440e-02f, 1.921613983e-02f, 1.921284228e-02f,
-1.920951176e-02f, 1.920614827e-02f, 1.920275182e-02f, 1.919932242e-02f, 1.919586008e-02f, 1.919236481e-02f, 1.918883662e-02f, 1.918527551e-02f, 1.918168149e-02f, 1.917805457e-02f,
-1.917439476e-02f, 1.917070207e-02f, 1.916697651e-02f, 1.916321808e-02f, 1.915942679e-02f, 1.915560266e-02f, 1.915174568e-02f, 1.914785588e-02f, 1.914393326e-02f, 1.913997782e-02f,
-1.913598958e-02f, 1.913196855e-02f, 1.912791474e-02f, 1.912382814e-02f, 1.911970879e-02f, 1.911555667e-02f, 1.911137181e-02f, 1.910715421e-02f, 1.910290388e-02f, 1.909862084e-02f,
-1.909430508e-02f, 1.908995662e-02f, 1.908557548e-02f, 1.908116165e-02f, 1.907671516e-02f, 1.907223600e-02f, 1.906772419e-02f, 1.906317975e-02f, 1.905860267e-02f, 1.905399297e-02f,
-1.904935066e-02f, 1.904467576e-02f, 1.903996826e-02f, 1.903522818e-02f, 1.903045554e-02f, 1.902565034e-02f, 1.902081258e-02f, 1.901594230e-02f, 1.901103948e-02f, 1.900610415e-02f,
-1.900113631e-02f, 1.899613598e-02f, 1.899110317e-02f, 1.898603788e-02f, 1.898094013e-02f, 1.897580993e-02f, 1.897064729e-02f, 1.896545222e-02f, 1.896022473e-02f, 1.895496484e-02f,
-1.894967255e-02f, 1.894434788e-02f, 1.893899084e-02f, 1.893360143e-02f, 1.892817968e-02f, 1.892272559e-02f, 1.891723917e-02f, 1.891172044e-02f, 1.890616940e-02f, 1.890058608e-02f,
-1.889497047e-02f, 1.888932260e-02f, 1.888364247e-02f, 1.887793010e-02f, 1.887218549e-02f, 1.886640867e-02f, 1.886059964e-02f, 1.885475842e-02f, 1.884888501e-02f, 1.884297943e-02f,
-1.883704170e-02f, 1.883107182e-02f, 1.882506980e-02f, 1.881903567e-02f, 1.881296942e-02f, 1.880687109e-02f, 1.880074067e-02f, 1.879457818e-02f, 1.878838363e-02f, 1.878215704e-02f,
-1.877589841e-02f, 1.876960777e-02f, 1.876328513e-02f, 1.875693049e-02f, 1.875054387e-02f, 1.874412529e-02f, 1.873767475e-02f, 1.873119228e-02f, 1.872467788e-02f, 1.871813156e-02f,
-1.871155335e-02f, 1.870494325e-02f, 1.869830128e-02f, 1.869162745e-02f, 1.868492178e-02f, 1.867818428e-02f, 1.867141496e-02f, 1.866461383e-02f, 1.865778092e-02f, 1.865091623e-02f,
-1.864401978e-02f, 1.863709158e-02f, 1.863013165e-02f, 1.862314000e-02f, 1.861611664e-02f, 1.860906160e-02f, 1.860197488e-02f, 1.859485649e-02f, 1.858770646e-02f, 1.858052480e-02f,
-1.857331151e-02f, 1.856606663e-02f, 1.855879015e-02f, 1.855148210e-02f, 1.854414249e-02f, 1.853677133e-02f, 1.852936865e-02f, 1.852193445e-02f, 1.851446875e-02f, 1.850697156e-02f,
-1.849944290e-02f, 1.849188279e-02f, 1.848429124e-02f, 1.847666826e-02f, 1.846901388e-02f, 1.846132810e-02f, 1.845361094e-02f, 1.844586242e-02f, 1.843808255e-02f, 1.843027135e-02f,
-1.842242883e-02f, 1.841455502e-02f, 1.840664991e-02f, 1.839871354e-02f, 1.839074591e-02f, 1.838274705e-02f, 1.837471696e-02f, 1.836665567e-02f, 1.835856319e-02f, 1.835043954e-02f,
-1.834228473e-02f, 1.833409877e-02f, 1.832588169e-02f, 1.831763351e-02f, 1.830935423e-02f, 1.830104387e-02f, 1.829270245e-02f, 1.828433000e-02f, 1.827592651e-02f, 1.826749201e-02f,
-1.825902653e-02f, 1.825053006e-02f, 1.824200264e-02f, 1.823344427e-02f, 1.822485497e-02f, 1.821623477e-02f, 1.820758367e-02f, 1.819890170e-02f, 1.819018887e-02f, 1.818144520e-02f,
-1.817267071e-02f, 1.816386541e-02f, 1.815502932e-02f, 1.814616246e-02f, 1.813726484e-02f, 1.812833649e-02f, 1.811937741e-02f, 1.811038764e-02f, 1.810136718e-02f, 1.809231605e-02f,
-1.808323428e-02f, 1.807412187e-02f, 1.806497885e-02f, 1.805580523e-02f, 1.804660104e-02f, 1.803736628e-02f, 1.802810098e-02f, 1.801880516e-02f, 1.800947884e-02f, 1.800012202e-02f,
-1.799073474e-02f, 1.798131701e-02f, 1.797186884e-02f, 1.796239026e-02f, 1.795288128e-02f, 1.794334192e-02f, 1.793377221e-02f, 1.792417216e-02f, 1.791454178e-02f, 1.790488110e-02f,
-1.789519014e-02f, 1.788546891e-02f, 1.787571743e-02f, 1.786593573e-02f, 1.785612381e-02f, 1.784628171e-02f, 1.783640944e-02f, 1.782650701e-02f, 1.781657445e-02f, 1.780661178e-02f,
-1.779661901e-02f, 1.778659617e-02f, 1.777654327e-02f, 1.776646034e-02f, 1.775634739e-02f, 1.774620444e-02f, 1.773603151e-02f, 1.772582863e-02f, 1.771559580e-02f, 1.770533306e-02f,
-1.769504042e-02f, 1.768471790e-02f, 1.767436552e-02f, 1.766398330e-02f, 1.765357126e-02f, 1.764312942e-02f, 1.763265780e-02f, 1.762215642e-02f, 1.761162530e-02f, 1.760106447e-02f,
-1.759047393e-02f, 1.757985371e-02f, 1.756920384e-02f, 1.755852433e-02f, 1.754781520e-02f, 1.753707647e-02f, 1.752630817e-02f, 1.751551031e-02f, 1.750468291e-02f, 1.749382600e-02f,
-1.748293960e-02f, 1.747202372e-02f, 1.746107839e-02f, 1.745010363e-02f, 1.743909946e-02f, 1.742806590e-02f, 1.741700297e-02f, 1.740591069e-02f, 1.739478909e-02f, 1.738363818e-02f,
-1.737245799e-02f, 1.736124854e-02f, 1.735000984e-02f, 1.733874192e-02f, 1.732744481e-02f, 1.731611852e-02f, 1.730476307e-02f, 1.729337849e-02f, 1.728196480e-02f, 1.727052202e-02f,
-1.725905016e-02f, 1.724754926e-02f, 1.723601934e-02f, 1.722446041e-02f, 1.721287250e-02f, 1.720125563e-02f, 1.718960983e-02f, 1.717793510e-02f, 1.716623149e-02f, 1.715449900e-02f,
-1.714273767e-02f, 1.713094750e-02f, 1.711912854e-02f, 1.710728079e-02f, 1.709540428e-02f, 1.708349903e-02f, 1.707156507e-02f, 1.705960242e-02f, 1.704761109e-02f, 1.703559112e-02f,
-1.702354253e-02f, 1.701146533e-02f, 1.699935956e-02f, 1.698722523e-02f, 1.697506236e-02f, 1.696287099e-02f, 1.695065113e-02f, 1.693840280e-02f, 1.692612604e-02f, 1.691382085e-02f,
-1.690148727e-02f, 1.688912532e-02f, 1.687673502e-02f, 1.686431640e-02f, 1.685186947e-02f, 1.683939427e-02f, 1.682689081e-02f, 1.681435911e-02f, 1.680179922e-02f, 1.678921113e-02f,
-1.677659489e-02f, 1.676395051e-02f, 1.675127801e-02f, 1.673857743e-02f, 1.672584878e-02f, 1.671309209e-02f, 1.670030738e-02f, 1.668749468e-02f, 1.667465400e-02f, 1.666178538e-02f,
-1.664888884e-02f, 1.663596440e-02f, 1.662301209e-02f, 1.661003193e-02f, 1.659702395e-02f, 1.658398816e-02f, 1.657092460e-02f, 1.655783328e-02f, 1.654471424e-02f, 1.653156750e-02f,
-1.651839308e-02f, 1.650519100e-02f, 1.649196130e-02f, 1.647870399e-02f, 1.646541910e-02f, 1.645210665e-02f, 1.643876668e-02f, 1.642539920e-02f, 1.641200425e-02f, 1.639858183e-02f,
-1.638513199e-02f, 1.637165474e-02f, 1.635815011e-02f, 1.634461813e-02f, 1.633105882e-02f, 1.631747220e-02f, 1.630385831e-02f, 1.629021716e-02f, 1.627654878e-02f, 1.626285320e-02f,
-1.624913045e-02f, 1.623538054e-02f, 1.622160350e-02f, 1.620779937e-02f, 1.619396816e-02f, 1.618010990e-02f, 1.616622462e-02f, 1.615231234e-02f, 1.613837308e-02f, 1.612440688e-02f,
-1.611041377e-02f, 1.609639375e-02f, 1.608234687e-02f, 1.606827315e-02f, 1.605417261e-02f, 1.604004529e-02f, 1.602589119e-02f, 1.601171037e-02f, 1.599750283e-02f, 1.598326860e-02f,
-1.596900772e-02f, 1.595472020e-02f, 1.594040608e-02f, 1.592606539e-02f, 1.591169813e-02f, 1.589730436e-02f, 1.588288408e-02f, 1.586843733e-02f, 1.585396414e-02f, 1.583946452e-02f,
-1.582493852e-02f, 1.581038615e-02f, 1.579580744e-02f, 1.578120242e-02f, 1.576657111e-02f, 1.575191355e-02f, 1.573722976e-02f, 1.572251976e-02f, 1.570778359e-02f, 1.569302127e-02f,
-1.567823283e-02f, 1.566341829e-02f, 1.564857769e-02f, 1.563371104e-02f, 1.561881839e-02f, 1.560389975e-02f, 1.558895515e-02f, 1.557398462e-02f, 1.555898819e-02f, 1.554396589e-02f,
-1.552891774e-02f, 1.551384377e-02f, 1.549874401e-02f, 1.548361848e-02f, 1.546846722e-02f, 1.545329026e-02f, 1.543808761e-02f, 1.542285931e-02f, 1.540760538e-02f, 1.539232587e-02f,
-1.537702078e-02f, 1.536169015e-02f, 1.534633402e-02f, 1.533095239e-02f, 1.531554532e-02f, 1.530011282e-02f, 1.528465492e-02f, 1.526917165e-02f, 1.525366303e-02f, 1.523812911e-02f,
-1.522256990e-02f, 1.520698544e-02f, 1.519137575e-02f, 1.517574086e-02f, 1.516008080e-02f, 1.514439560e-02f, 1.512868528e-02f, 1.511294989e-02f, 1.509718943e-02f, 1.508140396e-02f,
-1.506559348e-02f, 1.504975804e-02f, 1.503389766e-02f, 1.501801237e-02f, 1.500210220e-02f, 1.498616718e-02f, 1.497020733e-02f, 1.495422269e-02f, 1.493821329e-02f, 1.492217916e-02f,
-1.490612032e-02f, 1.489003680e-02f, 1.487392863e-02f, 1.485779585e-02f, 1.484163849e-02f, 1.482545656e-02f, 1.480925011e-02f, 1.479301915e-02f, 1.477676373e-02f, 1.476048387e-02f,
-1.474417960e-02f, 1.472785095e-02f, 1.471149795e-02f, 1.469512063e-02f, 1.467871902e-02f, 1.466229315e-02f, 1.464584305e-02f, 1.462936875e-02f, 1.461287028e-02f, 1.459634767e-02f,
-1.457980095e-02f, 1.456323015e-02f, 1.454663530e-02f, 1.453001643e-02f, 1.451337357e-02f, 1.449670676e-02f, 1.448001601e-02f, 1.446330137e-02f, 1.444656286e-02f, 1.442980052e-02f,
-1.441301437e-02f, 1.439620444e-02f, 1.437937077e-02f, 1.436251338e-02f, 1.434563231e-02f, 1.432872759e-02f, 1.431179924e-02f, 1.429484731e-02f, 1.427787181e-02f, 1.426087279e-02f,
-1.424385026e-02f, 1.422680427e-02f, 1.420973484e-02f, 1.419264201e-02f, 1.417552580e-02f, 1.415838625e-02f, 1.414122338e-02f, 1.412403724e-02f, 1.410682784e-02f, 1.408959523e-02f,
-1.407233943e-02f, 1.405506047e-02f, 1.403775839e-02f, 1.402043322e-02f, 1.400308498e-02f, 1.398571372e-02f, 1.396831945e-02f, 1.395090222e-02f, 1.393346206e-02f, 1.391599899e-02f,
-1.389851305e-02f, 1.388100426e-02f, 1.386347267e-02f, 1.384591831e-02f, 1.382834120e-02f, 1.381074137e-02f, 1.379311886e-02f, 1.377547371e-02f, 1.375780594e-02f, 1.374011558e-02f,
-1.372240267e-02f, 1.370466724e-02f, 1.368690932e-02f, 1.366912894e-02f, 1.365132614e-02f, 1.363350095e-02f, 1.361565339e-02f, 1.359778351e-02f, 1.357989134e-02f, 1.356197690e-02f,
-1.354404023e-02f, 1.352608136e-02f, 1.350810033e-02f, 1.349009716e-02f, 1.347207190e-02f, 1.345402456e-02f, 1.343595519e-02f, 1.341786382e-02f, 1.339975048e-02f, 1.338161520e-02f,
-1.336345802e-02f, 1.334527897e-02f, 1.332707808e-02f, 1.330885538e-02f, 1.329061091e-02f, 1.327234470e-02f, 1.325405678e-02f, 1.323574719e-02f, 1.321741596e-02f, 1.319906312e-02f,
-1.318068870e-02f, 1.316229275e-02f, 1.314387529e-02f, 1.312543635e-02f, 1.310697597e-02f, 1.308849418e-02f, 1.306999102e-02f, 1.305146652e-02f, 1.303292071e-02f, 1.301435362e-02f,
-1.299576529e-02f, 1.297715576e-02f, 1.295852505e-02f, 1.293987320e-02f, 1.292120024e-02f, 1.290250621e-02f, 1.288379114e-02f, 1.286505507e-02f, 1.284629802e-02f, 1.282752003e-02f,
-1.280872115e-02f, 1.278990138e-02f, 1.277106079e-02f, 1.275219939e-02f, 1.273331722e-02f, 1.271441432e-02f, 1.269549071e-02f, 1.267654644e-02f, 1.265758154e-02f, 1.263859604e-02f,
-1.261958997e-02f, 1.260056337e-02f, 1.258151628e-02f, 1.256244873e-02f, 1.254336075e-02f, 1.252425237e-02f, 1.250512364e-02f, 1.248597458e-02f, 1.246680524e-02f, 1.244761564e-02f,
-1.242840581e-02f, 1.240917580e-02f, 1.238992564e-02f, 1.237065536e-02f, 1.235136500e-02f, 1.233205459e-02f, 1.231272417e-02f, 1.229337377e-02f, 1.227400343e-02f, 1.225461317e-02f,
-1.223520304e-02f, 1.221577308e-02f, 1.219632331e-02f, 1.217685376e-02f, 1.215736449e-02f, 1.213785551e-02f, 1.211832687e-02f, 1.209877860e-02f, 1.207921074e-02f, 1.205962331e-02f,
-1.204001637e-02f, 1.202038993e-02f, 1.200074404e-02f, 1.198107873e-02f, 1.196139403e-02f, 1.194168999e-02f, 1.192196664e-02f, 1.190222401e-02f, 1.188246213e-02f, 1.186268105e-02f,
-1.184288080e-02f, 1.182306141e-02f, 1.180322292e-02f, 1.178336537e-02f, 1.176348878e-02f, 1.174359321e-02f, 1.172367867e-02f, 1.170374522e-02f, 1.168379287e-02f, 1.166382168e-02f,
-1.164383167e-02f, 1.162382288e-02f, 1.160379534e-02f, 1.158374910e-02f, 1.156368419e-02f, 1.154360064e-02f, 1.152349849e-02f, 1.150337778e-02f, 1.148323854e-02f, 1.146308081e-02f,
-1.144290462e-02f, 1.142271001e-02f, 1.140249701e-02f, 1.138226567e-02f, 1.136201602e-02f, 1.134174809e-02f, 1.132146192e-02f, 1.130115755e-02f, 1.128083501e-02f, 1.126049434e-02f,
-1.124013558e-02f, 1.121975876e-02f, 1.119936392e-02f, 1.117895109e-02f, 1.115852031e-02f, 1.113807163e-02f, 1.111760506e-02f, 1.109712066e-02f, 1.107661846e-02f, 1.105609849e-02f,
-1.103556079e-02f, 1.101500540e-02f, 1.099443235e-02f, 1.097384168e-02f, 1.095323343e-02f, 1.093260764e-02f, 1.091196433e-02f, 1.089130356e-02f, 1.087062535e-02f, 1.084992974e-02f,
-1.082921676e-02f, 1.080848647e-02f, 1.078773888e-02f, 1.076697405e-02f, 1.074619200e-02f, 1.072539278e-02f, 1.070457641e-02f, 1.068374295e-02f, 1.066289241e-02f, 1.064202485e-02f,
-1.062114030e-02f, 1.060023880e-02f, 1.057932038e-02f, 1.055838508e-02f, 1.053743293e-02f, 1.051646399e-02f, 1.049547827e-02f, 1.047447582e-02f, 1.045345669e-02f, 1.043242089e-02f,
-1.041136848e-02f, 1.039029949e-02f, 1.036921395e-02f, 1.034811191e-02f, 1.032699341e-02f, 1.030585847e-02f, 1.028470714e-02f, 1.026353945e-02f, 1.024235545e-02f, 1.022115516e-02f,
-1.019993864e-02f, 1.017870591e-02f, 1.015745701e-02f, 1.013619199e-02f, 1.011491087e-02f, 1.009361370e-02f, 1.007230051e-02f, 1.005097135e-02f, 1.002962625e-02f, 1.000826524e-02f,
-9.986888376e-03f, 9.965495682e-03f, 9.944087201e-03f, 9.922662969e-03f, 9.901223026e-03f, 9.879767409e-03f, 9.858296156e-03f, 9.836809306e-03f, 9.815306896e-03f, 9.793788966e-03f,
-9.772255552e-03f, 9.750706693e-03f, 9.729142428e-03f, 9.707562795e-03f, 9.685967832e-03f, 9.664357577e-03f, 9.642732068e-03f, 9.621091345e-03f, 9.599435445e-03f, 9.577764407e-03f,
-9.556078269e-03f, 9.534377070e-03f, 9.512660848e-03f, 9.490929641e-03f, 9.469183489e-03f, 9.447422429e-03f, 9.425646501e-03f, 9.403855743e-03f, 9.382050193e-03f, 9.360229890e-03f,
-9.338394873e-03f, 9.316545180e-03f, 9.294680851e-03f, 9.272801923e-03f, 9.250908437e-03f, 9.229000429e-03f, 9.207077940e-03f, 9.185141008e-03f, 9.163189672e-03f, 9.141223970e-03f,
-9.119243942e-03f, 9.097249627e-03f, 9.075241063e-03f, 9.053218290e-03f, 9.031181346e-03f, 9.009130270e-03f, 8.987065102e-03f, 8.964985880e-03f, 8.942892644e-03f, 8.920785432e-03f,
-8.898664284e-03f, 8.876529239e-03f, 8.854380336e-03f, 8.832217614e-03f, 8.810041112e-03f, 8.787850870e-03f, 8.765646926e-03f, 8.743429321e-03f, 8.721198093e-03f, 8.698953281e-03f,
-8.676694925e-03f, 8.654423065e-03f, 8.632137739e-03f, 8.609838987e-03f, 8.587526849e-03f, 8.565201363e-03f, 8.542862569e-03f, 8.520510507e-03f, 8.498145216e-03f, 8.475766736e-03f,
-8.453375106e-03f, 8.430970366e-03f, 8.408552555e-03f, 8.386121713e-03f, 8.363677879e-03f, 8.341221094e-03f, 8.318751396e-03f, 8.296268825e-03f, 8.273773422e-03f, 8.251265225e-03f,
-8.228744275e-03f, 8.206210610e-03f, 8.183664272e-03f, 8.161105300e-03f, 8.138533733e-03f, 8.115949611e-03f, 8.093352974e-03f, 8.070743863e-03f, 8.048122316e-03f, 8.025488374e-03f,
-8.002842077e-03f, 7.980183464e-03f, 7.957512576e-03f, 7.934829453e-03f, 7.912134134e-03f, 7.889426659e-03f, 7.866707069e-03f, 7.843975403e-03f, 7.821231702e-03f, 7.798476006e-03f,
-7.775708354e-03f, 7.752928787e-03f, 7.730137345e-03f, 7.707334069e-03f, 7.684518997e-03f, 7.661692171e-03f, 7.638853631e-03f, 7.616003417e-03f, 7.593141568e-03f, 7.570268126e-03f,
-7.547383131e-03f, 7.524486622e-03f, 7.501578641e-03f, 7.478659228e-03f, 7.455728422e-03f, 7.432786264e-03f, 7.409832795e-03f, 7.386868055e-03f, 7.363892084e-03f, 7.340904923e-03f,
-7.317906613e-03f, 7.294897193e-03f, 7.271876704e-03f, 7.248845186e-03f, 7.225802681e-03f, 7.202749229e-03f, 7.179684869e-03f, 7.156609644e-03f, 7.133523593e-03f, 7.110426756e-03f,
-7.087319175e-03f, 7.064200890e-03f, 7.041071942e-03f, 7.017932372e-03f, 6.994782219e-03f, 6.971621525e-03f, 6.948450330e-03f, 6.925268676e-03f, 6.902076602e-03f, 6.878874150e-03f,
-6.855661360e-03f, 6.832438273e-03f, 6.809204930e-03f, 6.785961372e-03f, 6.762707640e-03f, 6.739443773e-03f, 6.716169814e-03f, 6.692885803e-03f, 6.669591780e-03f, 6.646287788e-03f,
-6.622973866e-03f, 6.599650055e-03f, 6.576316397e-03f, 6.552972933e-03f, 6.529619703e-03f, 6.506256748e-03f, 6.482884110e-03f, 6.459501829e-03f, 6.436109947e-03f, 6.412708504e-03f,
-6.389297541e-03f, 6.365877100e-03f, 6.342447221e-03f, 6.319007946e-03f, 6.295559316e-03f, 6.272101372e-03f, 6.248634155e-03f, 6.225157706e-03f, 6.201672066e-03f, 6.178177276e-03f,
-6.154673379e-03f, 6.131160414e-03f, 6.107638423e-03f, 6.084107447e-03f, 6.060567528e-03f, 6.037018706e-03f, 6.013461023e-03f, 5.989894521e-03f, 5.966319240e-03f, 5.942735221e-03f,
-5.919142507e-03f, 5.895541138e-03f, 5.871931156e-03f, 5.848312602e-03f, 5.824685518e-03f, 5.801049944e-03f, 5.777405922e-03f, 5.753753494e-03f, 5.730092700e-03f, 5.706423583e-03f,
-5.682746184e-03f, 5.659060544e-03f, 5.635366705e-03f, 5.611664707e-03f, 5.587954594e-03f, 5.564236405e-03f, 5.540510183e-03f, 5.516775968e-03f, 5.493033804e-03f, 5.469283730e-03f,
-5.445525789e-03f, 5.421760022e-03f, 5.397986471e-03f, 5.374205177e-03f, 5.350416182e-03f, 5.326619527e-03f, 5.302815254e-03f, 5.279003405e-03f, 5.255184021e-03f, 5.231357144e-03f,
-5.207522816e-03f, 5.183681077e-03f, 5.159831971e-03f, 5.135975538e-03f, 5.112111820e-03f, 5.088240859e-03f, 5.064362696e-03f, 5.040477374e-03f, 5.016584934e-03f, 4.992685417e-03f,
-4.968778866e-03f, 4.944865322e-03f, 4.920944827e-03f, 4.897017422e-03f, 4.873083150e-03f, 4.849142052e-03f, 4.825194171e-03f, 4.801239547e-03f, 4.777278223e-03f, 4.753310240e-03f,
-4.729335640e-03f, 4.705354466e-03f, 4.681366759e-03f, 4.657372560e-03f, 4.633371912e-03f, 4.609364857e-03f, 4.585351436e-03f, 4.561331691e-03f, 4.537305665e-03f, 4.513273398e-03f,
-4.489234934e-03f, 4.465190313e-03f, 4.441139579e-03f, 4.417082772e-03f, 4.393019935e-03f, 4.368951109e-03f, 4.344876338e-03f, 4.320795661e-03f, 4.296709123e-03f, 4.272616764e-03f,
-4.248518626e-03f, 4.224414752e-03f, 4.200305183e-03f, 4.176189962e-03f, 4.152069131e-03f, 4.127942731e-03f, 4.103810805e-03f, 4.079673394e-03f, 4.055530541e-03f, 4.031382287e-03f,
-4.007228676e-03f, 3.983069748e-03f, 3.958905546e-03f, 3.934736112e-03f, 3.910561488e-03f, 3.886381716e-03f, 3.862196838e-03f, 3.838006897e-03f, 3.813811934e-03f, 3.789611991e-03f,
-3.765407111e-03f, 3.741197336e-03f, 3.716982708e-03f, 3.692763269e-03f, 3.668539061e-03f, 3.644310126e-03f, 3.620076506e-03f, 3.595838245e-03f, 3.571595382e-03f, 3.547347962e-03f,
-3.523096026e-03f, 3.498839616e-03f, 3.474578775e-03f, 3.450313544e-03f, 3.426043966e-03f, 3.401770083e-03f, 3.377491937e-03f, 3.353209571e-03f, 3.328923026e-03f, 3.304632345e-03f,
-3.280337570e-03f, 3.256038743e-03f, 3.231735907e-03f, 3.207429103e-03f, 3.183118375e-03f, 3.158803763e-03f, 3.134485311e-03f, 3.110163060e-03f, 3.085837054e-03f, 3.061507333e-03f,
-3.037173941e-03f, 3.012836920e-03f, 2.988496311e-03f, 2.964152158e-03f, 2.939804502e-03f, 2.915453386e-03f, 2.891098851e-03f, 2.866740941e-03f, 2.842379698e-03f, 2.818015163e-03f,
-2.793647380e-03f, 2.769276390e-03f, 2.744902236e-03f, 2.720524959e-03f, 2.696144603e-03f, 2.671761210e-03f, 2.647374821e-03f, 2.622985480e-03f, 2.598593228e-03f, 2.574198108e-03f,
-2.549800162e-03f, 2.525399432e-03f, 2.500995961e-03f, 2.476589792e-03f, 2.452180965e-03f, 2.427769525e-03f, 2.403355512e-03f, 2.378938970e-03f, 2.354519940e-03f, 2.330098466e-03f,
-2.305674588e-03f, 2.281248351e-03f, 2.256819795e-03f, 2.232388964e-03f, 2.207955899e-03f, 2.183520644e-03f, 2.159083239e-03f, 2.134643729e-03f, 2.110202154e-03f, 2.085758558e-03f,
-2.061312982e-03f, 2.036865470e-03f, 2.012416062e-03f, 1.987964803e-03f, 1.963511733e-03f, 1.939056896e-03f, 1.914600334e-03f, 1.890142088e-03f, 1.865682202e-03f, 1.841220718e-03f,
-1.816757678e-03f, 1.792293124e-03f, 1.767827099e-03f, 1.743359645e-03f, 1.718890805e-03f, 1.694420620e-03f, 1.669949134e-03f, 1.645476387e-03f, 1.621002424e-03f, 1.596527286e-03f,
-1.572051015e-03f, 1.547573654e-03f, 1.523095246e-03f, 1.498615831e-03f, 1.474135454e-03f, 1.449654156e-03f, 1.425171979e-03f, 1.400688966e-03f, 1.376205159e-03f, 1.351720600e-03f,
-1.327235333e-03f, 1.302749398e-03f, 1.278262839e-03f, 1.253775697e-03f, 1.229288016e-03f, 1.204799837e-03f, 1.180311203e-03f, 1.155822156e-03f, 1.131332738e-03f, 1.106842991e-03f,
-1.082352959e-03f, 1.057862682e-03f, 1.033372205e-03f, 1.008881568e-03f, 9.843908141e-04f, 9.598999858e-04f, 9.354091252e-04f, 9.109182745e-04f, 8.864274762e-04f, 8.619367724e-04f,
-8.374462054e-04f, 8.129558176e-04f, 7.884656511e-04f, 7.639757484e-04f, 7.394861515e-04f, 7.149969028e-04f, 6.905080446e-04f, 6.660196191e-04f, 6.415316685e-04f, 6.170442352e-04f,
-5.925573612e-04f, 5.680710890e-04f, 5.435854608e-04f, 5.191005186e-04f, 4.946163049e-04f, 4.701328618e-04f, 4.456502316e-04f, 4.211684564e-04f, 3.966875785e-04f, 3.722076400e-04f,
-3.477286833e-04f, 3.232507504e-04f, 2.987738837e-04f, 2.742981252e-04f, 2.498235171e-04f, 2.253501017e-04f, 2.008779211e-04f, 1.764070175e-04f, 1.519374331e-04f, 1.274692100e-04f,
-1.030023903e-04f, 7.853701630e-05f, 5.407313005e-05f, 2.961077371e-05f, 5.149989409e-06f, -1.930918071e-05f, -4.376669453e-05f, -6.822250994e-05f, -9.267658481e-05f, -1.171288771e-04f,
--1.415793446e-04f, -1.660279452e-04f, -1.904746370e-04f, -2.149193777e-04f, -2.393621254e-04f, -2.638028379e-04f, -2.882414732e-04f, -3.126779892e-04f, -3.371123439e-04f, -3.615444952e-04f,
--3.859744011e-04f, -4.104020196e-04f, -4.348273086e-04f, -4.592502261e-04f, -4.836707302e-04f, -5.080887787e-04f, -5.325043298e-04f, -5.569173413e-04f, -5.813277714e-04f, -6.057355780e-04f,
--6.301407193e-04f, -6.545431531e-04f, -6.789428377e-04f, -7.033397309e-04f, -7.277337910e-04f, -7.521249759e-04f, -7.765132437e-04f, -8.008985526e-04f, -8.252808605e-04f, -8.496601257e-04f,
--8.740363062e-04f, -8.984093602e-04f, -9.227792457e-04f, -9.471459209e-04f, -9.715093439e-04f, -9.958694729e-04f, -1.020226266e-03f, -1.044579682e-03f, -1.068929678e-03f, -1.093276212e-03f,
--1.117619244e-03f, -1.141958730e-03f, -1.166294630e-03f, -1.190626901e-03f, -1.214955503e-03f, -1.239280392e-03f, -1.263601527e-03f, -1.287918867e-03f, -1.312232369e-03f, -1.336541992e-03f,
--1.360847695e-03f, -1.385149435e-03f, -1.409447172e-03f, -1.433740862e-03f, -1.458030465e-03f, -1.482315939e-03f, -1.506597242e-03f, -1.530874332e-03f, -1.555147169e-03f, -1.579415709e-03f,
--1.603679913e-03f, -1.627939737e-03f, -1.652195141e-03f, -1.676446083e-03f, -1.700692521e-03f, -1.724934414e-03f, -1.749171720e-03f, -1.773404398e-03f, -1.797632405e-03f, -1.821855702e-03f,
--1.846074245e-03f, -1.870287994e-03f, -1.894496907e-03f, -1.918700943e-03f, -1.942900059e-03f, -1.967094216e-03f, -1.991283371e-03f, -2.015467482e-03f, -2.039646509e-03f, -2.063820410e-03f,
--2.087989143e-03f, -2.112152668e-03f, -2.136310942e-03f, -2.160463925e-03f, -2.184611575e-03f, -2.208753850e-03f, -2.232890710e-03f, -2.257022113e-03f, -2.281148018e-03f, -2.305268384e-03f,
--2.329383168e-03f, -2.353492331e-03f, -2.377595830e-03f, -2.401693625e-03f, -2.425785674e-03f, -2.449871936e-03f, -2.473952370e-03f, -2.498026935e-03f, -2.522095588e-03f, -2.546158291e-03f,
--2.570215000e-03f, -2.594265675e-03f, -2.618310275e-03f, -2.642348759e-03f, -2.666381086e-03f, -2.690407214e-03f, -2.714427103e-03f, -2.738440711e-03f, -2.762447997e-03f, -2.786448921e-03f,
--2.810443441e-03f, -2.834431516e-03f, -2.858413106e-03f, -2.882388169e-03f, -2.906356665e-03f, -2.930318552e-03f, -2.954273789e-03f, -2.978222336e-03f, -3.002164152e-03f, -3.026099195e-03f,
--3.050027426e-03f, -3.073948802e-03f, -3.097863284e-03f, -3.121770830e-03f, -3.145671399e-03f, -3.169564951e-03f, -3.193451446e-03f, -3.217330841e-03f, -3.241203097e-03f, -3.265068172e-03f,
--3.288926027e-03f, -3.312776619e-03f, -3.336619909e-03f, -3.360455856e-03f, -3.384284420e-03f, -3.408105558e-03f, -3.431919232e-03f, -3.455725400e-03f, -3.479524021e-03f, -3.503315055e-03f,
--3.527098462e-03f, -3.550874201e-03f, -3.574642232e-03f, -3.598402513e-03f, -3.622155004e-03f, -3.645899665e-03f, -3.669636456e-03f, -3.693365335e-03f, -3.717086263e-03f, -3.740799199e-03f,
--3.764504103e-03f, -3.788200934e-03f, -3.811889651e-03f, -3.835570215e-03f, -3.859242586e-03f, -3.882906722e-03f, -3.906562583e-03f, -3.930210130e-03f, -3.953849321e-03f, -3.977480117e-03f,
--4.001102478e-03f, -4.024716362e-03f, -4.048321731e-03f, -4.071918543e-03f, -4.095506759e-03f, -4.119086339e-03f, -4.142657241e-03f, -4.166219427e-03f, -4.189772856e-03f, -4.213317487e-03f,
--4.236853282e-03f, -4.260380199e-03f, -4.283898200e-03f, -4.307407243e-03f, -4.330907288e-03f, -4.354398297e-03f, -4.377880228e-03f, -4.401353043e-03f, -4.424816700e-03f, -4.448271160e-03f,
--4.471716384e-03f, -4.495152331e-03f, -4.518578961e-03f, -4.541996235e-03f, -4.565404113e-03f, -4.588802554e-03f, -4.612191520e-03f, -4.635570971e-03f, -4.658940866e-03f, -4.682301166e-03f,
--4.705651831e-03f, -4.728992822e-03f, -4.752324099e-03f, -4.775645623e-03f, -4.798957353e-03f, -4.822259250e-03f, -4.845551275e-03f, -4.868833388e-03f, -4.892105549e-03f, -4.915367719e-03f,
--4.938619858e-03f, -4.961861928e-03f, -4.985093887e-03f, -5.008315698e-03f, -5.031527321e-03f, -5.054728715e-03f, -5.077919842e-03f, -5.101100663e-03f, -5.124271138e-03f, -5.147431227e-03f,
--5.170580892e-03f, -5.193720094e-03f, -5.216848792e-03f, -5.239966947e-03f, -5.263074522e-03f, -5.286171475e-03f, -5.309257769e-03f, -5.332333363e-03f, -5.355398219e-03f, -5.378452298e-03f,
--5.401495561e-03f, -5.424527968e-03f, -5.447549480e-03f, -5.470560059e-03f, -5.493559665e-03f, -5.516548260e-03f, -5.539525804e-03f, -5.562492259e-03f, -5.585447585e-03f, -5.608391744e-03f,
--5.631324697e-03f, -5.654246404e-03f, -5.677156828e-03f, -5.700055929e-03f, -5.722943669e-03f, -5.745820009e-03f, -5.768684909e-03f, -5.791538332e-03f, -5.814380238e-03f, -5.837210589e-03f,
--5.860029347e-03f, -5.882836472e-03f, -5.905631926e-03f, -5.928415671e-03f, -5.951187667e-03f, -5.973947877e-03f, -5.996696262e-03f, -6.019432782e-03f, -6.042157401e-03f, -6.064870079e-03f,
--6.087570778e-03f, -6.110259460e-03f, -6.132936085e-03f, -6.155600617e-03f, -6.178253016e-03f, -6.200893244e-03f, -6.223521263e-03f, -6.246137035e-03f, -6.268740520e-03f, -6.291331683e-03f,
--6.313910483e-03f, -6.336476882e-03f, -6.359030844e-03f, -6.381572329e-03f, -6.404101299e-03f, -6.426617717e-03f, -6.449121544e-03f, -6.471612743e-03f, -6.494091274e-03f, -6.516557101e-03f,
--6.539010186e-03f, -6.561450489e-03f, -6.583877975e-03f, -6.606292604e-03f, -6.628694338e-03f, -6.651083141e-03f, -6.673458974e-03f, -6.695821799e-03f, -6.718171579e-03f, -6.740508276e-03f,
--6.762831852e-03f, -6.785142269e-03f, -6.807439490e-03f, -6.829723478e-03f, -6.851994194e-03f, -6.874251601e-03f, -6.896495662e-03f, -6.918726339e-03f, -6.940943594e-03f, -6.963147390e-03f,
--6.985337690e-03f, -7.007514456e-03f, -7.029677651e-03f, -7.051827237e-03f, -7.073963177e-03f, -7.096085434e-03f, -7.118193970e-03f, -7.140288748e-03f, -7.162369731e-03f, -7.184436882e-03f,
--7.206490163e-03f, -7.228529538e-03f, -7.250554969e-03f, -7.272566419e-03f, -7.294563851e-03f, -7.316547228e-03f, -7.338516512e-03f, -7.360471668e-03f, -7.382412658e-03f, -7.404339444e-03f,
--7.426251991e-03f, -7.448150261e-03f, -7.470034217e-03f, -7.491903822e-03f, -7.513759041e-03f, -7.535599835e-03f, -7.557426168e-03f, -7.579238003e-03f, -7.601035304e-03f, -7.622818035e-03f,
--7.644586157e-03f, -7.666339635e-03f, -7.688078433e-03f, -7.709802513e-03f, -7.731511838e-03f, -7.753206374e-03f, -7.774886082e-03f, -7.796550927e-03f, -7.818200872e-03f, -7.839835881e-03f,
--7.861455917e-03f, -7.883060944e-03f, -7.904650926e-03f, -7.926225827e-03f, -7.947785609e-03f, -7.969330238e-03f, -7.990859676e-03f, -8.012373888e-03f, -8.033872837e-03f, -8.055356487e-03f,
--8.076824803e-03f, -8.098277748e-03f, -8.119715286e-03f, -8.141137381e-03f, -8.162543997e-03f, -8.183935099e-03f, -8.205310649e-03f, -8.226670614e-03f, -8.248014956e-03f, -8.269343639e-03f,
--8.290656629e-03f, -8.311953888e-03f, -8.333235383e-03f, -8.354501076e-03f, -8.375750932e-03f, -8.396984915e-03f, -8.418202990e-03f, -8.439405122e-03f, -8.460591274e-03f, -8.481761411e-03f,
--8.502915498e-03f, -8.524053500e-03f, -8.545175379e-03f, -8.566281103e-03f, -8.587370634e-03f, -8.608443938e-03f, -8.629500979e-03f, -8.650541722e-03f, -8.671566132e-03f, -8.692574173e-03f,
--8.713565811e-03f, -8.734541009e-03f, -8.755499734e-03f, -8.776441950e-03f, -8.797367622e-03f, -8.818276714e-03f, -8.839169193e-03f, -8.860045022e-03f, -8.880904167e-03f, -8.901746593e-03f,
--8.922572265e-03f, -8.943381148e-03f, -8.964173208e-03f, -8.984948409e-03f, -9.005706717e-03f, -9.026448097e-03f, -9.047172515e-03f, -9.067879935e-03f, -9.088570324e-03f, -9.109243646e-03f,
--9.129899867e-03f, -9.150538952e-03f, -9.171160868e-03f, -9.191765579e-03f, -9.212353050e-03f, -9.232923249e-03f, -9.253476139e-03f, -9.274011687e-03f, -9.294529859e-03f, -9.315030620e-03f,
--9.335513936e-03f, -9.355979773e-03f, -9.376428097e-03f, -9.396858873e-03f, -9.417272067e-03f, -9.437667645e-03f, -9.458045574e-03f, -9.478405819e-03f, -9.498748346e-03f, -9.519073121e-03f,
--9.539380110e-03f, -9.559669280e-03f, -9.579940596e-03f, -9.600194025e-03f, -9.620429533e-03f, -9.640647086e-03f, -9.660846651e-03f, -9.681028193e-03f, -9.701191679e-03f, -9.721337076e-03f,
--9.741464349e-03f, -9.761573466e-03f, -9.781664393e-03f, -9.801737096e-03f, -9.821791541e-03f, -9.841827697e-03f, -9.861845528e-03f, -9.881845001e-03f, -9.901826084e-03f, -9.921788744e-03f,
--9.941732945e-03f, -9.961658657e-03f, -9.981565845e-03f, -1.000145448e-02f, -1.002132452e-02f, -1.004117593e-02f, -1.006100870e-02f, -1.008082277e-02f, -1.010061812e-02f, -1.012039472e-02f,
--1.014015252e-02f, -1.015989151e-02f, -1.017961165e-02f, -1.019931289e-02f, -1.021899522e-02f, -1.023865860e-02f, -1.025830299e-02f, -1.027792836e-02f, -1.029753469e-02f, -1.031712193e-02f,
--1.033669005e-02f, -1.035623903e-02f, -1.037576883e-02f, -1.039527942e-02f, -1.041477076e-02f, -1.043424282e-02f, -1.045369558e-02f, -1.047312899e-02f, -1.049254302e-02f, -1.051193766e-02f,
--1.053131285e-02f, -1.055066857e-02f, -1.057000479e-02f, -1.058932147e-02f, -1.060861858e-02f, -1.062789610e-02f, -1.064715398e-02f, -1.066639221e-02f, -1.068561073e-02f, -1.070480953e-02f,
--1.072398857e-02f, -1.074314782e-02f, -1.076228725e-02f, -1.078140682e-02f, -1.080050650e-02f, -1.081958627e-02f, -1.083864609e-02f, -1.085768593e-02f, -1.087670576e-02f, -1.089570554e-02f,
--1.091468525e-02f, -1.093364484e-02f, -1.095258431e-02f, -1.097150360e-02f, -1.099040269e-02f, -1.100928155e-02f, -1.102814014e-02f, -1.104697844e-02f, -1.106579641e-02f, -1.108459403e-02f,
--1.110337126e-02f, -1.112212807e-02f, -1.114086442e-02f, -1.115958030e-02f, -1.117827566e-02f, -1.119695048e-02f, -1.121560473e-02f, -1.123423837e-02f, -1.125285138e-02f, -1.127144372e-02f,
--1.129001536e-02f, -1.130856627e-02f, -1.132709643e-02f, -1.134560579e-02f, -1.136409433e-02f, -1.138256203e-02f, -1.140100884e-02f, -1.141943474e-02f, -1.143783970e-02f, -1.145622369e-02f,
--1.147458667e-02f, -1.149292862e-02f, -1.151124951e-02f, -1.152954931e-02f, -1.154782798e-02f, -1.156608549e-02f, -1.158432182e-02f, -1.160253694e-02f, -1.162073081e-02f, -1.163890341e-02f,
--1.165705471e-02f, -1.167518467e-02f, -1.169329326e-02f, -1.171138046e-02f, -1.172944624e-02f, -1.174749057e-02f, -1.176551341e-02f, -1.178351473e-02f, -1.180149452e-02f, -1.181945273e-02f,
--1.183738934e-02f, -1.185530432e-02f, -1.187319764e-02f, -1.189106927e-02f, -1.190891917e-02f, -1.192674733e-02f, -1.194455371e-02f, -1.196233828e-02f, -1.198010101e-02f, -1.199784188e-02f,
--1.201556085e-02f, -1.203325790e-02f, -1.205093299e-02f, -1.206858610e-02f, -1.208621720e-02f, -1.210382626e-02f, -1.212141324e-02f, -1.213897813e-02f, -1.215652089e-02f, -1.217404149e-02f,
--1.219153991e-02f, -1.220901611e-02f, -1.222647007e-02f, -1.224390176e-02f, -1.226131115e-02f, -1.227869821e-02f, -1.229606291e-02f, -1.231340522e-02f, -1.233072512e-02f, -1.234802258e-02f,
--1.236529757e-02f, -1.238255006e-02f, -1.239978002e-02f, -1.241698742e-02f, -1.243417224e-02f, -1.245133444e-02f, -1.246847401e-02f, -1.248559091e-02f, -1.250268511e-02f, -1.251975658e-02f,
--1.253680530e-02f, -1.255383124e-02f, -1.257083438e-02f, -1.258781467e-02f, -1.260477210e-02f, -1.262170664e-02f, -1.263861826e-02f, -1.265550693e-02f, -1.267237263e-02f, -1.268921532e-02f,
--1.270603498e-02f, -1.272283158e-02f, -1.273960510e-02f, -1.275635551e-02f, -1.277308277e-02f, -1.278978687e-02f, -1.280646777e-02f, -1.282312545e-02f, -1.283975988e-02f, -1.285637104e-02f,
--1.287295889e-02f, -1.288952341e-02f, -1.290606457e-02f, -1.292258234e-02f, -1.293907670e-02f, -1.295554763e-02f, -1.297199509e-02f, -1.298841905e-02f, -1.300481950e-02f, -1.302119640e-02f,
--1.303754972e-02f, -1.305387945e-02f, -1.307018555e-02f, -1.308646799e-02f, -1.310272676e-02f, -1.311896182e-02f, -1.313517315e-02f, -1.315136072e-02f, -1.316752450e-02f, -1.318366447e-02f,
--1.319978060e-02f, -1.321587287e-02f, -1.323194125e-02f, -1.324798571e-02f, -1.326400623e-02f, -1.328000278e-02f, -1.329597533e-02f, -1.331192387e-02f, -1.332784835e-02f, -1.334374877e-02f,
--1.335962508e-02f, -1.337547727e-02f, -1.339130531e-02f, -1.340710917e-02f, -1.342288883e-02f, -1.343864427e-02f, -1.345437545e-02f, -1.347008235e-02f, -1.348576494e-02f, -1.350142321e-02f,
--1.351705712e-02f, -1.353266665e-02f, -1.354825178e-02f, -1.356381247e-02f, -1.357934871e-02f, -1.359486047e-02f, -1.361034772e-02f, -1.362581043e-02f, -1.364124859e-02f, -1.365666217e-02f,
--1.367205114e-02f, -1.368741548e-02f, -1.370275516e-02f, -1.371807016e-02f, -1.373336045e-02f, -1.374862601e-02f, -1.376386682e-02f, -1.377908284e-02f, -1.379427406e-02f, -1.380944044e-02f,
--1.382458198e-02f, -1.383969863e-02f, -1.385479038e-02f, -1.386985720e-02f, -1.388489907e-02f, -1.389991596e-02f, -1.391490785e-02f, -1.392987472e-02f, -1.394481653e-02f, -1.395973327e-02f,
--1.397462492e-02f, -1.398949144e-02f, -1.400433281e-02f, -1.401914902e-02f, -1.403394003e-02f, -1.404870582e-02f, -1.406344637e-02f, -1.407816166e-02f, -1.409285166e-02f, -1.410751634e-02f,
--1.412215569e-02f, -1.413676968e-02f, -1.415135828e-02f, -1.416592148e-02f, -1.418045924e-02f, -1.419497155e-02f, -1.420945839e-02f, -1.422391972e-02f, -1.423835553e-02f, -1.425276579e-02f,
--1.426715048e-02f, -1.428150957e-02f, -1.429584305e-02f, -1.431015089e-02f, -1.432443307e-02f, -1.433868956e-02f, -1.435292034e-02f, -1.436712539e-02f, -1.438130468e-02f, -1.439545820e-02f,
--1.440958591e-02f, -1.442368781e-02f, -1.443776386e-02f, -1.445181403e-02f, -1.446583832e-02f, -1.447983670e-02f, -1.449380914e-02f, -1.450775562e-02f, -1.452167612e-02f, -1.453557062e-02f,
--1.454943909e-02f, -1.456328151e-02f, -1.457709787e-02f, -1.459088813e-02f, -1.460465228e-02f, -1.461839029e-02f, -1.463210215e-02f, -1.464578783e-02f, -1.465944730e-02f, -1.467308055e-02f,
--1.468668755e-02f, -1.470026829e-02f, -1.471382274e-02f, -1.472735087e-02f, -1.474085268e-02f, -1.475432813e-02f, -1.476777720e-02f, -1.478119988e-02f, -1.479459614e-02f, -1.480796596e-02f,
--1.482130932e-02f, -1.483462619e-02f, -1.484791657e-02f, -1.486118041e-02f, -1.487441771e-02f, -1.488762845e-02f, -1.490081259e-02f, -1.491397013e-02f, -1.492710103e-02f, -1.494020529e-02f,
--1.495328287e-02f, -1.496633376e-02f, -1.497935793e-02f, -1.499235537e-02f, -1.500532606e-02f, -1.501826997e-02f, -1.503118708e-02f, -1.504407738e-02f, -1.505694083e-02f, -1.506977743e-02f,
--1.508258716e-02f, -1.509536998e-02f, -1.510812588e-02f, -1.512085485e-02f, -1.513355685e-02f, -1.514623188e-02f, -1.515887990e-02f, -1.517150091e-02f, -1.518409488e-02f, -1.519666178e-02f,
--1.520920161e-02f, -1.522171433e-02f, -1.523419994e-02f, -1.524665841e-02f, -1.525908972e-02f, -1.527149385e-02f, -1.528387078e-02f, -1.529622049e-02f, -1.530854297e-02f, -1.532083818e-02f,
--1.533310613e-02f, -1.534534677e-02f, -1.535756010e-02f, -1.536974610e-02f, -1.538190474e-02f, -1.539403601e-02f, -1.540613989e-02f, -1.541821636e-02f, -1.543026539e-02f, -1.544228698e-02f,
--1.545428110e-02f, -1.546624773e-02f, -1.547818686e-02f, -1.549009846e-02f, -1.550198251e-02f, -1.551383901e-02f, -1.552566792e-02f, -1.553746924e-02f, -1.554924293e-02f, -1.556098899e-02f,
--1.557270739e-02f, -1.558439812e-02f, -1.559606116e-02f, -1.560769649e-02f, -1.561930409e-02f, -1.563088394e-02f, -1.564243603e-02f, -1.565396033e-02f, -1.566545684e-02f, -1.567692552e-02f,
--1.568836636e-02f, -1.569977936e-02f, -1.571116447e-02f, -1.572252170e-02f, -1.573385102e-02f, -1.574515241e-02f, -1.575642586e-02f, -1.576767135e-02f, -1.577888885e-02f, -1.579007836e-02f,
--1.580123986e-02f, -1.581237332e-02f, -1.582347874e-02f, -1.583455608e-02f, -1.584560535e-02f, -1.585662651e-02f, -1.586761955e-02f, -1.587858446e-02f, -1.588952122e-02f, -1.590042981e-02f,
--1.591131021e-02f, -1.592216240e-02f, -1.593298638e-02f, -1.594378212e-02f, -1.595454961e-02f, -1.596528882e-02f, -1.597599975e-02f, -1.598668237e-02f, -1.599733667e-02f, -1.600796264e-02f,
--1.601856025e-02f, -1.602912949e-02f, -1.603967034e-02f, -1.605018280e-02f, -1.606066683e-02f, -1.607112242e-02f, -1.608154957e-02f, -1.609194825e-02f, -1.610231844e-02f, -1.611266013e-02f,
--1.612297331e-02f, -1.613325796e-02f, -1.614351405e-02f, -1.615374159e-02f, -1.616394054e-02f, -1.617411090e-02f, -1.618425265e-02f, -1.619436577e-02f, -1.620445025e-02f, -1.621450607e-02f,
--1.622453322e-02f, -1.623453168e-02f, -1.624450144e-02f, -1.625444248e-02f, -1.626435478e-02f, -1.627423833e-02f, -1.628409312e-02f, -1.629391913e-02f, -1.630371634e-02f, -1.631348474e-02f,
--1.632322432e-02f, -1.633293505e-02f, -1.634261693e-02f, -1.635226994e-02f, -1.636189407e-02f, -1.637148930e-02f, -1.638105561e-02f, -1.639059300e-02f, -1.640010144e-02f, -1.640958092e-02f,
--1.641903143e-02f, -1.642845295e-02f, -1.643784548e-02f, -1.644720898e-02f, -1.645654346e-02f, -1.646584890e-02f, -1.647512527e-02f, -1.648437257e-02f, -1.649359079e-02f, -1.650277991e-02f,
--1.651193991e-02f, -1.652107078e-02f, -1.653017252e-02f, -1.653924509e-02f, -1.654828850e-02f, -1.655730272e-02f, -1.656628775e-02f, -1.657524356e-02f, -1.658417016e-02f, -1.659306751e-02f,
--1.660193561e-02f, -1.661077445e-02f, -1.661958401e-02f, -1.662836428e-02f, -1.663711524e-02f, -1.664583689e-02f, -1.665452920e-02f, -1.666319218e-02f, -1.667182579e-02f, -1.668043004e-02f,
--1.668900490e-02f, -1.669755037e-02f, -1.670606642e-02f, -1.671455306e-02f, -1.672301026e-02f, -1.673143802e-02f, -1.673983631e-02f, -1.674820514e-02f, -1.675654448e-02f, -1.676485432e-02f,
--1.677313465e-02f, -1.678138546e-02f, -1.678960674e-02f, -1.679779847e-02f, -1.680596065e-02f, -1.681409325e-02f, -1.682219627e-02f, -1.683026969e-02f, -1.683831351e-02f, -1.684632770e-02f,
--1.685431227e-02f, -1.686226719e-02f, -1.687019246e-02f, -1.687808807e-02f, -1.688595399e-02f, -1.689379023e-02f, -1.690159676e-02f, -1.690937359e-02f, -1.691712068e-02f, -1.692483805e-02f,
--1.693252566e-02f, -1.694018352e-02f, -1.694781161e-02f, -1.695540991e-02f, -1.696297843e-02f, -1.697051714e-02f, -1.697802604e-02f, -1.698550511e-02f, -1.699295434e-02f, -1.700037373e-02f,
--1.700776326e-02f, -1.701512292e-02f, -1.702245271e-02f, -1.702975260e-02f, -1.703702259e-02f, -1.704426267e-02f, -1.705147283e-02f, -1.705865305e-02f, -1.706580333e-02f, -1.707292366e-02f,
--1.708001402e-02f, -1.708707441e-02f, -1.709410482e-02f, -1.710110523e-02f, -1.710807564e-02f, -1.711501603e-02f, -1.712192640e-02f, -1.712880673e-02f, -1.713565702e-02f, -1.714247725e-02f,
--1.714926742e-02f, -1.715602752e-02f, -1.716275753e-02f, -1.716945745e-02f, -1.717612726e-02f, -1.718276696e-02f, -1.718937654e-02f, -1.719595599e-02f, -1.720250530e-02f, -1.720902446e-02f,
--1.721551346e-02f, -1.722197228e-02f, -1.722840094e-02f, -1.723479940e-02f, -1.724116767e-02f, -1.724750573e-02f, -1.725381358e-02f, -1.726009120e-02f, -1.726633860e-02f, -1.727255575e-02f,
--1.727874265e-02f, -1.728489929e-02f, -1.729102567e-02f, -1.729712177e-02f, -1.730318759e-02f, -1.730922312e-02f, -1.731522834e-02f, -1.732120325e-02f, -1.732714785e-02f, -1.733306212e-02f,
--1.733894606e-02f, -1.734479965e-02f, -1.735062289e-02f, -1.735641578e-02f, -1.736217829e-02f, -1.736791044e-02f, -1.737361220e-02f, -1.737928357e-02f, -1.738492454e-02f, -1.739053510e-02f,
--1.739611525e-02f, -1.740166498e-02f, -1.740718428e-02f, -1.741267315e-02f, -1.741813157e-02f, -1.742355954e-02f, -1.742895705e-02f, -1.743432409e-02f, -1.743966066e-02f, -1.744496675e-02f,
--1.745024235e-02f, -1.745548746e-02f, -1.746070206e-02f, -1.746588615e-02f, -1.747103973e-02f, -1.747616279e-02f, -1.748125531e-02f, -1.748631730e-02f, -1.749134875e-02f, -1.749634964e-02f,
--1.750131998e-02f, -1.750625976e-02f, -1.751116896e-02f, -1.751604759e-02f, -1.752089564e-02f, -1.752571309e-02f, -1.753049996e-02f, -1.753525622e-02f, -1.753998187e-02f, -1.754467690e-02f,
--1.754934132e-02f, -1.755397511e-02f, -1.755857827e-02f, -1.756315079e-02f, -1.756769266e-02f, -1.757220389e-02f, -1.757668446e-02f, -1.758113437e-02f, -1.758555361e-02f, -1.758994218e-02f,
--1.759430006e-02f, -1.759862727e-02f, -1.760292379e-02f, -1.760718961e-02f, -1.761142473e-02f, -1.761562914e-02f, -1.761980284e-02f, -1.762394583e-02f, -1.762805810e-02f, -1.763213964e-02f,
--1.763619045e-02f, -1.764021052e-02f, -1.764419985e-02f, -1.764815843e-02f, -1.765208627e-02f, -1.765598335e-02f, -1.765984966e-02f, -1.766368522e-02f, -1.766749000e-02f, -1.767126400e-02f,
--1.767500723e-02f, -1.767871968e-02f, -1.768240134e-02f, -1.768605220e-02f, -1.768967227e-02f, -1.769326154e-02f, -1.769682000e-02f, -1.770034766e-02f, -1.770384450e-02f, -1.770731052e-02f,
--1.771074572e-02f, -1.771415010e-02f, -1.771752365e-02f, -1.772086636e-02f, -1.772417824e-02f, -1.772745928e-02f, -1.773070948e-02f, -1.773392883e-02f, -1.773711732e-02f, -1.774027496e-02f,
--1.774340175e-02f, -1.774649767e-02f, -1.774956273e-02f, -1.775259692e-02f, -1.775560024e-02f, -1.775857268e-02f, -1.776151425e-02f, -1.776442493e-02f, -1.776730474e-02f, -1.777015365e-02f,
--1.777297168e-02f, -1.777575881e-02f, -1.777851505e-02f, -1.778124039e-02f, -1.778393483e-02f, -1.778659837e-02f, -1.778923100e-02f, -1.779183272e-02f, -1.779440354e-02f, -1.779694343e-02f,
--1.779945242e-02f, -1.780193048e-02f, -1.780437763e-02f, -1.780679385e-02f, -1.780917915e-02f, -1.781153352e-02f, -1.781385696e-02f, -1.781614947e-02f, -1.781841105e-02f, -1.782064169e-02f,
--1.782284140e-02f, -1.782501017e-02f, -1.782714800e-02f, -1.782925488e-02f, -1.783133083e-02f, -1.783337583e-02f, -1.783538988e-02f, -1.783737298e-02f, -1.783932514e-02f, -1.784124634e-02f,
--1.784313660e-02f, -1.784499590e-02f, -1.784682424e-02f, -1.784862163e-02f, -1.785038806e-02f, -1.785212354e-02f, -1.785382806e-02f, -1.785550161e-02f, -1.785714421e-02f, -1.785875585e-02f,
--1.786033652e-02f, -1.786188623e-02f, -1.786340498e-02f, -1.786489276e-02f, -1.786634958e-02f, -1.786777543e-02f, -1.786917032e-02f, -1.787053424e-02f, -1.787186720e-02f, -1.787316918e-02f,
--1.787444021e-02f, -1.787568026e-02f, -1.787688935e-02f, -1.787806747e-02f, -1.787921462e-02f, -1.788033081e-02f, -1.788141603e-02f, -1.788247028e-02f, -1.788349357e-02f, -1.788448589e-02f,
--1.788544724e-02f, -1.788637762e-02f, -1.788727705e-02f, -1.788814550e-02f, -1.788898299e-02f, -1.788978952e-02f, -1.789056509e-02f, -1.789130969e-02f, -1.789202333e-02f, -1.789270601e-02f,
--1.789335772e-02f, -1.789397848e-02f, -1.789456828e-02f, -1.789512713e-02f, -1.789565501e-02f, -1.789615194e-02f, -1.789661792e-02f, -1.789705294e-02f, -1.789745702e-02f, -1.789783014e-02f,
--1.789817231e-02f, -1.789848354e-02f, -1.789876381e-02f, -1.789901315e-02f, -1.789923154e-02f, -1.789941899e-02f, -1.789957550e-02f, -1.789970107e-02f, -1.789979571e-02f, -1.789985941e-02f,
--1.789989218e-02f, -1.789989401e-02f, -1.789986492e-02f, -1.789980491e-02f, -1.789971397e-02f, -1.789959210e-02f, -1.789943932e-02f, -1.789925562e-02f, -1.789904100e-02f, -1.789879547e-02f,
--1.789851903e-02f, -1.789821168e-02f, -1.789787343e-02f, -1.789750428e-02f, -1.789710422e-02f, -1.789667326e-02f, -1.789621141e-02f, -1.789571867e-02f, -1.789519504e-02f, -1.789464053e-02f,
--1.789405513e-02f, -1.789343885e-02f, -1.789279169e-02f, -1.789211366e-02f, -1.789140475e-02f, -1.789066498e-02f, -1.788989435e-02f, -1.788909285e-02f, -1.788826050e-02f, -1.788739729e-02f,
--1.788650323e-02f, -1.788557833e-02f, -1.788462258e-02f, -1.788363599e-02f, -1.788261856e-02f, -1.788157030e-02f, -1.788049121e-02f, -1.787938130e-02f, -1.787824057e-02f, -1.787706902e-02f,
--1.787586666e-02f, -1.787463348e-02f, -1.787336951e-02f, -1.787207473e-02f, -1.787074916e-02f, -1.786939279e-02f, -1.786800564e-02f, -1.786658770e-02f, -1.786513899e-02f, -1.786365950e-02f,
--1.786214924e-02f, -1.786060821e-02f, -1.785903643e-02f, -1.785743389e-02f, -1.785580060e-02f, -1.785413656e-02f, -1.785244178e-02f, -1.785071626e-02f, -1.784896001e-02f, -1.784717304e-02f,
--1.784535534e-02f, -1.784350693e-02f, -1.784162781e-02f, -1.783971798e-02f, -1.783777745e-02f, -1.783580623e-02f, -1.783380431e-02f, -1.783177171e-02f, -1.782970843e-02f, -1.782761448e-02f,
--1.782548986e-02f, -1.782333458e-02f, -1.782114865e-02f, -1.781893206e-02f, -1.781668483e-02f, -1.781440696e-02f, -1.781209845e-02f, -1.780975932e-02f, -1.780738957e-02f, -1.780498920e-02f,
--1.780255822e-02f, -1.780009665e-02f, -1.779760447e-02f, -1.779508171e-02f, -1.779252836e-02f, -1.778994443e-02f, -1.778732993e-02f, -1.778468487e-02f, -1.778200925e-02f, -1.777930308e-02f,
--1.777656637e-02f, -1.777379911e-02f, -1.777100133e-02f, -1.776817302e-02f, -1.776531420e-02f, -1.776242486e-02f, -1.775950502e-02f, -1.775655468e-02f, -1.775357386e-02f, -1.775056255e-02f,
--1.774752076e-02f, -1.774444851e-02f, -1.774134580e-02f, -1.773821264e-02f, -1.773504902e-02f, -1.773185497e-02f, -1.772863049e-02f, -1.772537559e-02f, -1.772209027e-02f, -1.771877454e-02f,
--1.771542841e-02f, -1.771205189e-02f, -1.770864498e-02f, -1.770520769e-02f, -1.770174004e-02f, -1.769824203e-02f, -1.769471366e-02f, -1.769115494e-02f, -1.768756589e-02f, -1.768394651e-02f,
--1.768029681e-02f, -1.767661680e-02f, -1.767290648e-02f, -1.766916587e-02f, -1.766539497e-02f, -1.766159379e-02f, -1.765776234e-02f, -1.765390063e-02f, -1.765000866e-02f, -1.764608646e-02f,
--1.764213401e-02f, -1.763815134e-02f, -1.763413845e-02f, -1.763009535e-02f, -1.762602205e-02f, -1.762191856e-02f, -1.761778489e-02f, -1.761362104e-02f, -1.760942703e-02f, -1.760520286e-02f,
--1.760094855e-02f, -1.759666411e-02f, -1.759234953e-02f, -1.758800484e-02f, -1.758363004e-02f, -1.757922514e-02f, -1.757479015e-02f, -1.757032509e-02f, -1.756582995e-02f, -1.756130475e-02f,
--1.755674951e-02f, -1.755216422e-02f, -1.754754890e-02f, -1.754290356e-02f, -1.753822821e-02f, -1.753352286e-02f, -1.752878752e-02f, -1.752402220e-02f, -1.751922691e-02f, -1.751440165e-02f,
--1.750954645e-02f, -1.750466131e-02f, -1.749974624e-02f, -1.749480125e-02f, -1.748982635e-02f, -1.748482156e-02f, -1.747978687e-02f, -1.747472231e-02f, -1.746962789e-02f, -1.746450361e-02f,
--1.745934948e-02f, -1.745416552e-02f, -1.744895174e-02f, -1.744370815e-02f, -1.743843476e-02f, -1.743313157e-02f, -1.742779861e-02f, -1.742243588e-02f, -1.741704340e-02f, -1.741162116e-02f,
--1.740616920e-02f, -1.740068751e-02f, -1.739517611e-02f, -1.738963502e-02f, -1.738406423e-02f, -1.737846377e-02f, -1.737283364e-02f, -1.736717386e-02f, -1.736148444e-02f, -1.735576539e-02f,
--1.735001672e-02f, -1.734423844e-02f, -1.733843057e-02f, -1.733259311e-02f, -1.732672609e-02f, -1.732082951e-02f, -1.731490338e-02f, -1.730894772e-02f, -1.730296253e-02f, -1.729694784e-02f,
--1.729090364e-02f, -1.728482997e-02f, -1.727872682e-02f, -1.727259421e-02f, -1.726643215e-02f, -1.726024066e-02f, -1.725401974e-02f, -1.724776942e-02f, -1.724148969e-02f, -1.723518059e-02f,
--1.722884211e-02f, -1.722247427e-02f, -1.721607708e-02f, -1.720965057e-02f, -1.720319473e-02f, -1.719670959e-02f, -1.719019515e-02f, -1.718365143e-02f, -1.717707844e-02f, -1.717047620e-02f,
--1.716384472e-02f, -1.715718401e-02f, -1.715049409e-02f, -1.714377496e-02f, -1.713702665e-02f, -1.713024917e-02f, -1.712344252e-02f, -1.711660673e-02f, -1.710974180e-02f, -1.710284776e-02f,
--1.709592461e-02f, -1.708897237e-02f, -1.708199105e-02f, -1.707498066e-02f, -1.706794123e-02f, -1.706087276e-02f, -1.705377527e-02f, -1.704664878e-02f, -1.703949328e-02f, -1.703230881e-02f,
--1.702509538e-02f, -1.701785299e-02f, -1.701058167e-02f, -1.700328143e-02f, -1.699595228e-02f, -1.698859424e-02f, -1.698120732e-02f, -1.697379153e-02f, -1.696634690e-02f, -1.695887343e-02f,
--1.695137114e-02f, -1.694384005e-02f, -1.693628017e-02f, -1.692869152e-02f, -1.692107410e-02f, -1.691342794e-02f, -1.690575305e-02f, -1.689804945e-02f, -1.689031714e-02f, -1.688255615e-02f,
--1.687476650e-02f, -1.686694819e-02f, -1.685910124e-02f, -1.685122566e-02f, -1.684332149e-02f, -1.683538871e-02f, -1.682742737e-02f, -1.681943746e-02f, -1.681141900e-02f, -1.680337202e-02f,
--1.679529652e-02f, -1.678719253e-02f, -1.677906005e-02f, -1.677089911e-02f, -1.676270971e-02f, -1.675449189e-02f, -1.674624564e-02f, -1.673797099e-02f, -1.672966796e-02f, -1.672133655e-02f,
--1.671297679e-02f, -1.670458870e-02f, -1.669617228e-02f, -1.668772756e-02f, -1.667925455e-02f, -1.667075327e-02f, -1.666222373e-02f, -1.665366595e-02f, -1.664507996e-02f, -1.663646575e-02f,
--1.662782336e-02f, -1.661915279e-02f, -1.661045407e-02f, -1.660172721e-02f, -1.659297223e-02f, -1.658418915e-02f, -1.657537798e-02f, -1.656653873e-02f, -1.655767143e-02f, -1.654877610e-02f,
--1.653985275e-02f, -1.653090139e-02f, -1.652192205e-02f, -1.651291474e-02f, -1.650387949e-02f, -1.649481630e-02f, -1.648572519e-02f, -1.647660619e-02f, -1.646745930e-02f, -1.645828456e-02f,
--1.644908196e-02f, -1.643985155e-02f, -1.643059332e-02f, -1.642130730e-02f, -1.641199350e-02f, -1.640265195e-02f, -1.639328266e-02f, -1.638388565e-02f, -1.637446094e-02f, -1.636500855e-02f,
--1.635552849e-02f, -1.634602078e-02f, -1.633648544e-02f, -1.632692249e-02f, -1.631733194e-02f, -1.630771383e-02f, -1.629806815e-02f, -1.628839494e-02f, -1.627869421e-02f, -1.626896597e-02f,
--1.625921026e-02f, -1.624942708e-02f, -1.623961645e-02f, -1.622977840e-02f, -1.621991295e-02f, -1.621002010e-02f, -1.620009988e-02f, -1.619015231e-02f, -1.618017741e-02f, -1.617017520e-02f,
--1.616014569e-02f, -1.615008891e-02f, -1.614000487e-02f, -1.612989359e-02f, -1.611975510e-02f, -1.610958941e-02f, -1.609939654e-02f, -1.608917651e-02f, -1.607892934e-02f, -1.606865505e-02f,
--1.605835366e-02f, -1.604802519e-02f, -1.603766965e-02f, -1.602728707e-02f, -1.601687747e-02f, -1.600644087e-02f, -1.599597728e-02f, -1.598548673e-02f, -1.597496923e-02f, -1.596442481e-02f,
--1.595385349e-02f, -1.594325528e-02f, -1.593263021e-02f, -1.592197830e-02f, -1.591129956e-02f, -1.590059402e-02f, -1.588986170e-02f, -1.587910261e-02f, -1.586831678e-02f, -1.585750423e-02f,
--1.584666497e-02f, -1.583579904e-02f, -1.582490644e-02f, -1.581398720e-02f, -1.580304135e-02f, -1.579206889e-02f, -1.578106985e-02f, -1.577004426e-02f, -1.575899213e-02f, -1.574791349e-02f,
--1.573680834e-02f, -1.572567673e-02f, -1.571451866e-02f, -1.570333415e-02f, -1.569212324e-02f, -1.568088593e-02f, -1.566962226e-02f, -1.565833223e-02f, -1.564701588e-02f, -1.563567323e-02f,
--1.562430428e-02f, -1.561290908e-02f, -1.560148763e-02f, -1.559003997e-02f, -1.557856610e-02f, -1.556706605e-02f, -1.555553985e-02f, -1.554398752e-02f, -1.553240907e-02f, -1.552080453e-02f,
--1.550917392e-02f, -1.549751727e-02f, -1.548583459e-02f, -1.547412590e-02f, -1.546239123e-02f, -1.545063060e-02f, -1.543884404e-02f, -1.542703155e-02f, -1.541519318e-02f, -1.540332893e-02f,
--1.539143883e-02f, -1.537952290e-02f, -1.536758117e-02f, -1.535561366e-02f, -1.534362038e-02f, -1.533160137e-02f, -1.531955663e-02f, -1.530748621e-02f, -1.529539012e-02f, -1.528326837e-02f,
--1.527112100e-02f, -1.525894803e-02f, -1.524674948e-02f, -1.523452536e-02f, -1.522227572e-02f, -1.521000056e-02f, -1.519769991e-02f, -1.518537379e-02f, -1.517302223e-02f, -1.516064525e-02f,
--1.514824288e-02f, -1.513581512e-02f, -1.512336202e-02f, -1.511088359e-02f, -1.509837985e-02f, -1.508585083e-02f, -1.507329655e-02f, -1.506071704e-02f, -1.504811231e-02f, -1.503548239e-02f,
--1.502282731e-02f, -1.501014709e-02f, -1.499744175e-02f, -1.498471131e-02f, -1.497195581e-02f, -1.495917525e-02f, -1.494636967e-02f, -1.493353909e-02f, -1.492068354e-02f, -1.490780303e-02f,
--1.489489759e-02f, -1.488196725e-02f, -1.486901203e-02f, -1.485603195e-02f, -1.484302704e-02f, -1.482999732e-02f, -1.481694281e-02f, -1.480386355e-02f, -1.479075954e-02f, -1.477763083e-02f,
--1.476447742e-02f, -1.475129936e-02f, -1.473809665e-02f, -1.472486933e-02f, -1.471161742e-02f, -1.469834094e-02f, -1.468503992e-02f, -1.467171439e-02f, -1.465836436e-02f, -1.464498986e-02f,
--1.463159092e-02f, -1.461816756e-02f, -1.460471981e-02f, -1.459124769e-02f, -1.457775123e-02f, -1.456423044e-02f, -1.455068536e-02f, -1.453711602e-02f, -1.452352242e-02f, -1.450990461e-02f,
--1.449626261e-02f, -1.448259643e-02f, -1.446890612e-02f, -1.445519168e-02f, -1.444145315e-02f, -1.442769055e-02f, -1.441390391e-02f, -1.440009325e-02f, -1.438625860e-02f, -1.437239998e-02f,
--1.435851742e-02f, -1.434461095e-02f, -1.433068058e-02f, -1.431672635e-02f, -1.430274828e-02f, -1.428874640e-02f, -1.427472073e-02f, -1.426067130e-02f, -1.424659813e-02f, -1.423250125e-02f,
--1.421838069e-02f, -1.420423647e-02f, -1.419006862e-02f, -1.417587716e-02f, -1.416166212e-02f, -1.414742352e-02f, -1.413316140e-02f, -1.411887577e-02f, -1.410456667e-02f, -1.409023412e-02f,
--1.407587815e-02f, -1.406149878e-02f, -1.404709603e-02f, -1.403266995e-02f, -1.401822054e-02f, -1.400374784e-02f, -1.398925188e-02f, -1.397473268e-02f, -1.396019027e-02f, -1.394562467e-02f,
--1.393103591e-02f, -1.391642402e-02f, -1.390178903e-02f, -1.388713096e-02f, -1.387244983e-02f, -1.385774568e-02f, -1.384301853e-02f, -1.382826841e-02f, -1.381349535e-02f, -1.379869937e-02f,
--1.378388050e-02f, -1.376903876e-02f, -1.375417419e-02f, -1.373928681e-02f, -1.372437665e-02f, -1.370944373e-02f, -1.369448809e-02f, -1.367950974e-02f, -1.366450873e-02f, -1.364948506e-02f,
--1.363443878e-02f, -1.361936991e-02f, -1.360427848e-02f, -1.358916451e-02f, -1.357402803e-02f, -1.355886907e-02f, -1.354368766e-02f, -1.352848383e-02f, -1.351325759e-02f, -1.349800899e-02f,
--1.348273804e-02f, -1.346744478e-02f, -1.345212924e-02f, -1.343679143e-02f, -1.342143140e-02f, -1.340604916e-02f, -1.339064475e-02f, -1.337521819e-02f, -1.335976951e-02f, -1.334429875e-02f,
--1.332880592e-02f, -1.331329105e-02f, -1.329775418e-02f, -1.328219534e-02f, -1.326661454e-02f, -1.325101182e-02f, -1.323538721e-02f, -1.321974074e-02f, -1.320407242e-02f, -1.318838231e-02f,
--1.317267041e-02f, -1.315693676e-02f, -1.314118139e-02f, -1.312540433e-02f, -1.310960560e-02f, -1.309378524e-02f, -1.307794327e-02f, -1.306207972e-02f, -1.304619462e-02f, -1.303028800e-02f,
--1.301435989e-02f, -1.299841031e-02f, -1.298243930e-02f, -1.296644689e-02f, -1.295043310e-02f, -1.293439796e-02f, -1.291834150e-02f, -1.290226376e-02f, -1.288616475e-02f, -1.287004452e-02f,
--1.285390308e-02f, -1.283774047e-02f, -1.282155672e-02f, -1.280535185e-02f, -1.278912590e-02f, -1.277287889e-02f, -1.275661086e-02f, -1.274032183e-02f, -1.272401183e-02f, -1.270768090e-02f,
--1.269132906e-02f, -1.267495634e-02f, -1.265856277e-02f, -1.264214839e-02f, -1.262571321e-02f, -1.260925728e-02f, -1.259278061e-02f, -1.257628325e-02f, -1.255976521e-02f, -1.254322654e-02f,
--1.252666725e-02f, -1.251008739e-02f, -1.249348697e-02f, -1.247686604e-02f, -1.246022461e-02f, -1.244356272e-02f, -1.242688040e-02f, -1.241017768e-02f, -1.239345460e-02f, -1.237671117e-02f,
--1.235994743e-02f, -1.234316341e-02f, -1.232635914e-02f, -1.230953466e-02f, -1.229268998e-02f, -1.227582515e-02f, -1.225894019e-02f, -1.224203513e-02f, -1.222511001e-02f, -1.220816485e-02f,
--1.219119968e-02f, -1.217421454e-02f, -1.215720946e-02f, -1.214018446e-02f, -1.212313957e-02f, -1.210607484e-02f, -1.208899028e-02f, -1.207188593e-02f, -1.205476182e-02f, -1.203761798e-02f,
--1.202045445e-02f, -1.200327124e-02f, -1.198606840e-02f, -1.196884596e-02f, -1.195160394e-02f, -1.193434237e-02f, -1.191706129e-02f, -1.189976074e-02f, -1.188244073e-02f, -1.186510130e-02f,
--1.184774248e-02f, -1.183036431e-02f, -1.181296681e-02f, -1.179555002e-02f, -1.177811396e-02f, -1.176065867e-02f, -1.174318419e-02f, -1.172569053e-02f, -1.170817774e-02f, -1.169064584e-02f,
--1.167309486e-02f, -1.165552484e-02f, -1.163793581e-02f, -1.162032781e-02f, -1.160270085e-02f, -1.158505498e-02f, -1.156739022e-02f, -1.154970661e-02f, -1.153200418e-02f, -1.151428295e-02f,
--1.149654297e-02f, -1.147878427e-02f, -1.146100687e-02f, -1.144321081e-02f, -1.142539611e-02f, -1.140756282e-02f, -1.138971097e-02f, -1.137184058e-02f, -1.135395168e-02f, -1.133604432e-02f,
--1.131811852e-02f, -1.130017431e-02f, -1.128221173e-02f, -1.126423081e-02f, -1.124623158e-02f, -1.122821407e-02f, -1.121017832e-02f, -1.119212435e-02f, -1.117405220e-02f, -1.115596191e-02f,
--1.113785350e-02f, -1.111972701e-02f, -1.110158247e-02f, -1.108341991e-02f, -1.106523936e-02f, -1.104704086e-02f, -1.102882444e-02f, -1.101059014e-02f, -1.099233797e-02f, -1.097406799e-02f,
--1.095578021e-02f, -1.093747468e-02f, -1.091915143e-02f, -1.090081048e-02f, -1.088245188e-02f, -1.086407564e-02f, -1.084568182e-02f, -1.082727044e-02f, -1.080884152e-02f, -1.079039512e-02f,
--1.077193125e-02f, -1.075344996e-02f, -1.073495127e-02f, -1.071643521e-02f, -1.069790183e-02f, -1.067935115e-02f, -1.066078321e-02f, -1.064219804e-02f, -1.062359567e-02f, -1.060497614e-02f,
--1.058633948e-02f, -1.056768573e-02f, -1.054901491e-02f, -1.053032706e-02f, -1.051162221e-02f, -1.049290040e-02f, -1.047416166e-02f, -1.045540602e-02f, -1.043663352e-02f, -1.041784420e-02f,
--1.039903807e-02f, -1.038021518e-02f, -1.036137557e-02f, -1.034251926e-02f, -1.032364628e-02f, -1.030475668e-02f, -1.028585049e-02f, -1.026692773e-02f, -1.024798845e-02f, -1.022903267e-02f,
--1.021006044e-02f, -1.019107178e-02f, -1.017206672e-02f, -1.015304531e-02f, -1.013400758e-02f, -1.011495356e-02f, -1.009588328e-02f, -1.007679678e-02f, -1.005769409e-02f, -1.003857524e-02f,
--1.001944028e-02f, -1.000028923e-02f, -9.981122129e-03f, -9.961939010e-03f, -9.942739908e-03f, -9.923524857e-03f, -9.904293890e-03f, -9.885047042e-03f, -9.865784348e-03f, -9.846505841e-03f,
--9.827211557e-03f, -9.807901528e-03f, -9.788575791e-03f, -9.769234378e-03f, -9.749877325e-03f, -9.730504665e-03f, -9.711116434e-03f, -9.691712665e-03f, -9.672293394e-03f, -9.652858655e-03f,
--9.633408482e-03f, -9.613942909e-03f, -9.594461973e-03f, -9.574965706e-03f, -9.555454144e-03f, -9.535927322e-03f, -9.516385274e-03f, -9.496828035e-03f, -9.477255639e-03f, -9.457668122e-03f,
--9.438065518e-03f, -9.418447861e-03f, -9.398815188e-03f, -9.379167533e-03f, -9.359504929e-03f, -9.339827414e-03f, -9.320135021e-03f, -9.300427785e-03f, -9.280705741e-03f, -9.260968925e-03f,
--9.241217372e-03f, -9.221451115e-03f, -9.201670192e-03f, -9.181874635e-03f, -9.162064482e-03f, -9.142239766e-03f, -9.122400524e-03f, -9.102546790e-03f, -9.082678599e-03f, -9.062795986e-03f,
--9.042898988e-03f, -9.022987639e-03f, -9.003061974e-03f, -8.983122029e-03f, -8.963167840e-03f, -8.943199441e-03f, -8.923216867e-03f, -8.903220156e-03f, -8.883209340e-03f, -8.863184458e-03f,
--8.843145542e-03f, -8.823092630e-03f, -8.803025757e-03f, -8.782944958e-03f, -8.762850269e-03f, -8.742741725e-03f, -8.722619363e-03f, -8.702483217e-03f, -8.682333323e-03f, -8.662169717e-03f,
--8.641992436e-03f, -8.621801513e-03f, -8.601596986e-03f, -8.581378889e-03f, -8.561147259e-03f, -8.540902132e-03f, -8.520643543e-03f, -8.500371528e-03f, -8.480086123e-03f, -8.459787364e-03f,
--8.439475287e-03f, -8.419149927e-03f, -8.398811322e-03f, -8.378459505e-03f, -8.358094515e-03f, -8.337716386e-03f, -8.317325155e-03f, -8.296920857e-03f, -8.276503530e-03f, -8.256073208e-03f,
--8.235629928e-03f, -8.215173727e-03f, -8.194704639e-03f, -8.174222702e-03f, -8.153727952e-03f, -8.133220424e-03f, -8.112700156e-03f, -8.092167183e-03f, -8.071621541e-03f, -8.051063268e-03f,
--8.030492398e-03f, -8.009908969e-03f, -7.989313017e-03f, -7.968704578e-03f, -7.948083689e-03f, -7.927450386e-03f, -7.906804705e-03f, -7.886146683e-03f, -7.865476356e-03f, -7.844793761e-03f,
--7.824098935e-03f, -7.803391913e-03f, -7.782672733e-03f, -7.761941430e-03f, -7.741198042e-03f, -7.720442606e-03f, -7.699675156e-03f, -7.678895732e-03f, -7.658104368e-03f, -7.637301102e-03f,
--7.616485970e-03f, -7.595659009e-03f, -7.574820256e-03f, -7.553969747e-03f, -7.533107520e-03f, -7.512233610e-03f, -7.491348056e-03f, -7.470450893e-03f, -7.449542158e-03f, -7.428621889e-03f,
--7.407690122e-03f, -7.386746893e-03f, -7.365792241e-03f, -7.344826202e-03f, -7.323848812e-03f, -7.302860109e-03f, -7.281860130e-03f, -7.260848912e-03f, -7.239826491e-03f, -7.218792904e-03f,
--7.197748190e-03f, -7.176692384e-03f, -7.155625524e-03f, -7.134547647e-03f, -7.113458790e-03f, -7.092358990e-03f, -7.071248285e-03f, -7.050126711e-03f, -7.028994305e-03f, -7.007851105e-03f,
--6.986697148e-03f, -6.965532472e-03f, -6.944357113e-03f, -6.923171108e-03f, -6.901974495e-03f, -6.880767312e-03f, -6.859549595e-03f, -6.838321382e-03f, -6.817082710e-03f, -6.795833616e-03f,
--6.774574138e-03f, -6.753304314e-03f, -6.732024180e-03f, -6.710733774e-03f, -6.689433134e-03f, -6.668122296e-03f, -6.646801299e-03f, -6.625470179e-03f, -6.604128975e-03f, -6.582777724e-03f,
--6.561416462e-03f, -6.540045229e-03f, -6.518664061e-03f, -6.497272996e-03f, -6.475872071e-03f, -6.454461324e-03f, -6.433040793e-03f, -6.411610515e-03f, -6.390170528e-03f, -6.368720870e-03f,
--6.347261578e-03f, -6.325792689e-03f, -6.304314242e-03f, -6.282826275e-03f, -6.261328824e-03f, -6.239821928e-03f, -6.218305625e-03f, -6.196779951e-03f, -6.175244946e-03f, -6.153700646e-03f,
--6.132147090e-03f, -6.110584315e-03f, -6.089012359e-03f, -6.067431260e-03f, -6.045841056e-03f, -6.024241785e-03f, -6.002633484e-03f, -5.981016192e-03f, -5.959389946e-03f, -5.937754784e-03f,
--5.916110745e-03f, -5.894457866e-03f, -5.872796185e-03f, -5.851125740e-03f, -5.829446569e-03f, -5.807758710e-03f, -5.786062201e-03f, -5.764357080e-03f, -5.742643385e-03f, -5.720921154e-03f,
--5.699190426e-03f, -5.677451238e-03f, -5.655703628e-03f, -5.633947634e-03f, -5.612183296e-03f, -5.590410649e-03f, -5.568629734e-03f, -5.546840587e-03f, -5.525043248e-03f, -5.503237753e-03f,
--5.481424142e-03f, -5.459602453e-03f, -5.437772724e-03f, -5.415934992e-03f, -5.394089297e-03f, -5.372235676e-03f, -5.350374168e-03f, -5.328504810e-03f, -5.306627642e-03f, -5.284742701e-03f,
--5.262850027e-03f, -5.240949656e-03f, -5.219041627e-03f, -5.197125979e-03f, -5.175202751e-03f, -5.153271979e-03f, -5.131333703e-03f, -5.109387962e-03f, -5.087434793e-03f, -5.065474234e-03f,
--5.043506325e-03f, -5.021531103e-03f, -4.999548608e-03f, -4.977558877e-03f, -4.955561949e-03f, -4.933557862e-03f, -4.911546655e-03f, -4.889528366e-03f, -4.867503033e-03f, -4.845470697e-03f,
--4.823431393e-03f, -4.801385162e-03f, -4.779332042e-03f, -4.757272071e-03f, -4.735205287e-03f, -4.713131730e-03f, -4.691051438e-03f, -4.668964449e-03f, -4.646870802e-03f, -4.624770535e-03f,
--4.602663688e-03f, -4.580550299e-03f, -4.558430405e-03f, -4.536304047e-03f, -4.514171262e-03f, -4.492032090e-03f, -4.469886568e-03f, -4.447734736e-03f, -4.425576631e-03f, -4.403412294e-03f,
--4.381241762e-03f, -4.359065074e-03f, -4.336882269e-03f, -4.314693385e-03f, -4.292498462e-03f, -4.270297538e-03f, -4.248090651e-03f, -4.225877840e-03f, -4.203659145e-03f, -4.181434603e-03f,
--4.159204255e-03f, -4.136968137e-03f, -4.114726290e-03f, -4.092478751e-03f, -4.070225560e-03f, -4.047966756e-03f, -4.025702376e-03f, -4.003432461e-03f, -3.981157049e-03f, -3.958876178e-03f,
--3.936589888e-03f, -3.914298217e-03f, -3.892001205e-03f, -3.869698889e-03f, -3.847391309e-03f, -3.825078504e-03f, -3.802760512e-03f, -3.780437373e-03f, -3.758109126e-03f, -3.735775808e-03f,
--3.713437459e-03f, -3.691094119e-03f, -3.668745825e-03f, -3.646392617e-03f, -3.624034534e-03f, -3.601671614e-03f, -3.579303897e-03f, -3.556931422e-03f, -3.534554226e-03f, -3.512172351e-03f,
--3.489785833e-03f, -3.467394713e-03f, -3.444999028e-03f, -3.422598819e-03f, -3.400194125e-03f, -3.377784983e-03f, -3.355371433e-03f, -3.332953515e-03f, -3.310531266e-03f, -3.288104727e-03f,
--3.265673935e-03f, -3.243238931e-03f, -3.220799752e-03f, -3.198356439e-03f, -3.175909030e-03f, -3.153457564e-03f, -3.131002080e-03f, -3.108542617e-03f, -3.086079215e-03f, -3.063611912e-03f,
--3.041140747e-03f, -3.018665759e-03f, -2.996186988e-03f, -2.973704472e-03f, -2.951218251e-03f, -2.928728363e-03f, -2.906234848e-03f, -2.883737745e-03f, -2.861237093e-03f, -2.838732930e-03f,
--2.816225296e-03f, -2.793714231e-03f, -2.771199772e-03f, -2.748681960e-03f, -2.726160833e-03f, -2.703636431e-03f, -2.681108792e-03f, -2.658577956e-03f, -2.636043961e-03f, -2.613506847e-03f,
--2.590966654e-03f, -2.568423419e-03f, -2.545877183e-03f, -2.523327984e-03f, -2.500775861e-03f, -2.478220854e-03f, -2.455663002e-03f, -2.433102344e-03f, -2.410538918e-03f, -2.387972765e-03f,
--2.365403923e-03f, -2.342832432e-03f, -2.320258330e-03f, -2.297681656e-03f, -2.275102451e-03f, -2.252520752e-03f, -2.229936600e-03f, -2.207350033e-03f, -2.184761091e-03f, -2.162169812e-03f,
--2.139576236e-03f, -2.116980402e-03f, -2.094382349e-03f, -2.071782116e-03f, -2.049179743e-03f, -2.026575268e-03f, -2.003968731e-03f, -1.981360171e-03f, -1.958749628e-03f, -1.936137139e-03f,
--1.913522745e-03f, -1.890906484e-03f, -1.868288397e-03f, -1.845668521e-03f, -1.823046896e-03f, -1.800423562e-03f, -1.777798557e-03f, -1.755171921e-03f, -1.732543693e-03f, -1.709913911e-03f,
--1.687282616e-03f, -1.664649847e-03f, -1.642015641e-03f, -1.619380040e-03f, -1.596743081e-03f, -1.574104805e-03f, -1.551465249e-03f, -1.528824455e-03f, -1.506182459e-03f, -1.483539303e-03f,
--1.460895024e-03f, -1.438249663e-03f, -1.415603258e-03f, -1.392955848e-03f, -1.370307473e-03f, -1.347658171e-03f, -1.325007983e-03f, -1.302356947e-03f, -1.279705102e-03f, -1.257052488e-03f,
--1.234399143e-03f, -1.211745107e-03f, -1.189090419e-03f, -1.166435118e-03f, -1.143779243e-03f, -1.121122834e-03f, -1.098465929e-03f, -1.075808569e-03f, -1.053150791e-03f, -1.030492635e-03f,
--1.007834140e-03f, -9.851753458e-04f, -9.625162910e-04f, -9.398570148e-04f, -9.171975564e-04f, -8.945379550e-04f, -8.718782496e-04f, -8.492184794e-04f, -8.265586835e-04f, -8.038989011e-04f,
--7.812391713e-04f, -7.585795333e-04f, -7.359200260e-04f, -7.132606887e-04f, -6.906015605e-04f, -6.679426805e-04f, -6.452840878e-04f, -6.226258214e-04f, -5.999679206e-04f, -5.773104244e-04f,
--5.546533720e-04f, -5.319968023e-04f, -5.093407545e-04f, -4.866852678e-04f, -4.640303811e-04f, -4.413761335e-04f, -4.187225642e-04f, -3.960697123e-04f, -3.734176167e-04f, -3.507663165e-04f,
--3.281158509e-04f, -3.054662588e-04f, -2.828175794e-04f, -2.601698516e-04f, -2.375231146e-04f, -2.148774074e-04f, -1.922327689e-04f, -1.695892383e-04f, -1.469468546e-04f, -1.243056568e-04f,
--1.016656839e-04f, -7.902697489e-05f, -5.638956888e-05f, -3.375350482e-05f, -1.111882172e-05f, 1.151444143e-05f, 3.414624562e-05f, 5.677655188e-05f, 7.940532121e-05f, 1.020325147e-04f,
-1.246580932e-04f, 1.472820180e-04f, 1.699042499e-04f, 1.925247501e-04f, 2.151434796e-04f, 2.377603994e-04f, 2.603754706e-04f, 2.829886543e-04f, 3.055999116e-04f, 3.282092035e-04f,
-3.508164911e-04f, 3.734217355e-04f, 3.960248978e-04f, 4.186259391e-04f, 4.412248205e-04f, 4.638215031e-04f, 4.864159480e-04f, 5.090081164e-04f, 5.315979694e-04f, 5.541854682e-04f,
-5.767705738e-04f, 5.993532474e-04f, 6.219334503e-04f, 6.445111435e-04f, 6.670862882e-04f, 6.896588456e-04f, 7.122287770e-04f, 7.347960434e-04f, 7.573606061e-04f, 7.799224263e-04f,
-8.024814653e-04f, 8.250376841e-04f, 8.475910441e-04f, 8.701415066e-04f, 8.926890326e-04f, 9.152335836e-04f, 9.377751207e-04f, 9.603136053e-04f, 9.828489985e-04f, 1.005381262e-03f,
-1.027910356e-03f, 1.050436243e-03f, 1.072958884e-03f, 1.095478240e-03f, 1.117994273e-03f, 1.140506943e-03f, 1.163016213e-03f, 1.185522043e-03f, 1.208024395e-03f, 1.230523231e-03f,
-1.253018510e-03f, 1.275510196e-03f, 1.297998250e-03f, 1.320482632e-03f, 1.342963304e-03f, 1.365440228e-03f, 1.387913365e-03f, 1.410382676e-03f, 1.432848124e-03f, 1.455309668e-03f,
-1.477767272e-03f, 1.500220896e-03f, 1.522670501e-03f, 1.545116050e-03f, 1.567557504e-03f, 1.589994824e-03f, 1.612427972e-03f, 1.634856909e-03f, 1.657281597e-03f, 1.679701997e-03f,
-1.702118071e-03f, 1.724529781e-03f, 1.746937088e-03f, 1.769339953e-03f, 1.791738339e-03f, 1.814132207e-03f, 1.836521518e-03f, 1.858906235e-03f, 1.881286318e-03f, 1.903661730e-03f,
-1.926032431e-03f, 1.948398385e-03f, 1.970759552e-03f, 1.993115894e-03f, 2.015467373e-03f, 2.037813950e-03f, 2.060155588e-03f, 2.082492247e-03f, 2.104823891e-03f, 2.127150480e-03f,
-2.149471976e-03f, 2.171788341e-03f, 2.194099537e-03f, 2.216405526e-03f, 2.238706269e-03f, 2.261001728e-03f, 2.283291866e-03f, 2.305576643e-03f, 2.327856023e-03f, 2.350129966e-03f,
-2.372398434e-03f, 2.394661390e-03f, 2.416918796e-03f, 2.439170612e-03f, 2.461416802e-03f, 2.483657327e-03f, 2.505892149e-03f, 2.528121230e-03f, 2.550344533e-03f, 2.572562018e-03f,
-2.594773648e-03f, 2.616979386e-03f, 2.639179193e-03f, 2.661373030e-03f, 2.683560861e-03f, 2.705742647e-03f, 2.727918351e-03f, 2.750087934e-03f, 2.772251358e-03f, 2.794408586e-03f,
-2.816559580e-03f, 2.838704302e-03f, 2.860842714e-03f, 2.882974779e-03f, 2.905100457e-03f, 2.927219713e-03f, 2.949332507e-03f, 2.971438802e-03f, 2.993538561e-03f, 3.015631745e-03f,
-3.037718317e-03f, 3.059798239e-03f, 3.081871474e-03f, 3.103937984e-03f, 3.125997730e-03f, 3.148050676e-03f, 3.170096783e-03f, 3.192136015e-03f, 3.214168333e-03f, 3.236193700e-03f,
-3.258212079e-03f, 3.280223431e-03f, 3.302227719e-03f, 3.324224906e-03f, 3.346214953e-03f, 3.368197825e-03f, 3.390173482e-03f, 3.412141888e-03f, 3.434103005e-03f, 3.456056796e-03f,
-3.478003223e-03f, 3.499942248e-03f, 3.521873835e-03f, 3.543797946e-03f, 3.565714543e-03f, 3.587623590e-03f, 3.609525048e-03f, 3.631418881e-03f, 3.653305051e-03f, 3.675183521e-03f,
-3.697054253e-03f, 3.718917210e-03f, 3.740772356e-03f, 3.762619653e-03f, 3.784459062e-03f, 3.806290549e-03f, 3.828114074e-03f, 3.849929602e-03f, 3.871737094e-03f, 3.893536514e-03f,
-3.915327824e-03f, 3.937110988e-03f, 3.958885968e-03f, 3.980652727e-03f, 4.002411228e-03f, 4.024161435e-03f, 4.045903309e-03f, 4.067636815e-03f, 4.089361915e-03f, 4.111078571e-03f,
-4.132786748e-03f, 4.154486408e-03f, 4.176177514e-03f, 4.197860030e-03f, 4.219533918e-03f, 4.241199141e-03f, 4.262855664e-03f, 4.284503448e-03f, 4.306142457e-03f, 4.327772654e-03f,
-4.349394002e-03f, 4.371006466e-03f, 4.392610007e-03f, 4.414204589e-03f, 4.435790176e-03f, 4.457366730e-03f, 4.478934215e-03f, 4.500492595e-03f, 4.522041832e-03f, 4.543581891e-03f,
-4.565112734e-03f, 4.586634324e-03f, 4.608146626e-03f, 4.629649603e-03f, 4.651143218e-03f, 4.672627435e-03f, 4.694102216e-03f, 4.715567527e-03f, 4.737023329e-03f, 4.758469588e-03f,
-4.779906265e-03f, 4.801333326e-03f, 4.822750733e-03f, 4.844158450e-03f, 4.865556442e-03f, 4.886944670e-03f, 4.908323100e-03f, 4.929691694e-03f, 4.951050417e-03f, 4.972399233e-03f,
-4.993738104e-03f, 5.015066996e-03f, 5.036385871e-03f, 5.057694693e-03f, 5.078993427e-03f, 5.100282036e-03f, 5.121560484e-03f, 5.142828736e-03f, 5.164086753e-03f, 5.185334502e-03f,
-5.206571946e-03f, 5.227799048e-03f, 5.249015773e-03f, 5.270222085e-03f, 5.291417948e-03f, 5.312603326e-03f, 5.333778182e-03f, 5.354942482e-03f, 5.376096189e-03f, 5.397239267e-03f,
-5.418371681e-03f, 5.439493394e-03f, 5.460604371e-03f, 5.481704577e-03f, 5.502793974e-03f, 5.523872529e-03f, 5.544940204e-03f, 5.565996964e-03f, 5.587042774e-03f, 5.608077598e-03f,
-5.629101400e-03f, 5.650114145e-03f, 5.671115797e-03f, 5.692106321e-03f, 5.713085680e-03f, 5.734053840e-03f, 5.755010765e-03f, 5.775956419e-03f, 5.796890767e-03f, 5.817813774e-03f,
-5.838725404e-03f, 5.859625622e-03f, 5.880514393e-03f, 5.901391680e-03f, 5.922257449e-03f, 5.943111665e-03f, 5.963954291e-03f, 5.984785294e-03f, 6.005604637e-03f, 6.026412286e-03f,
-6.047208205e-03f, 6.067992359e-03f, 6.088764714e-03f, 6.109525233e-03f, 6.130273881e-03f, 6.151010625e-03f, 6.171735428e-03f, 6.192448255e-03f, 6.213149072e-03f, 6.233837844e-03f,
-6.254514535e-03f, 6.275179111e-03f, 6.295831537e-03f, 6.316471777e-03f, 6.337099798e-03f, 6.357715563e-03f, 6.378319039e-03f, 6.398910191e-03f, 6.419488983e-03f, 6.440055381e-03f,
-6.460609350e-03f, 6.481150856e-03f, 6.501679864e-03f, 6.522196339e-03f, 6.542700247e-03f, 6.563191553e-03f, 6.583670221e-03f, 6.604136219e-03f, 6.624589511e-03f, 6.645030063e-03f,
-6.665457840e-03f, 6.685872808e-03f, 6.706274932e-03f, 6.726664178e-03f, 6.747040512e-03f, 6.767403899e-03f, 6.787754304e-03f, 6.808091695e-03f, 6.828416035e-03f, 6.848727291e-03f,
-6.869025429e-03f, 6.889310415e-03f, 6.909582214e-03f, 6.929840791e-03f, 6.950086114e-03f, 6.970318148e-03f, 6.990536858e-03f, 7.010742211e-03f, 7.030934173e-03f, 7.051112709e-03f,
-7.071277786e-03f, 7.091429370e-03f, 7.111567426e-03f, 7.131691921e-03f, 7.151802821e-03f, 7.171900092e-03f, 7.191983700e-03f, 7.212053611e-03f, 7.232109792e-03f, 7.252152209e-03f,
-7.272180828e-03f, 7.292195615e-03f, 7.312196537e-03f, 7.332183559e-03f, 7.352156649e-03f, 7.372115773e-03f, 7.392060897e-03f, 7.411991988e-03f, 7.431909012e-03f, 7.451811935e-03f,
-7.471700725e-03f, 7.491575347e-03f, 7.511435768e-03f, 7.531281955e-03f, 7.551113875e-03f, 7.570931493e-03f, 7.590734778e-03f, 7.610523695e-03f, 7.630298211e-03f, 7.650058293e-03f,
-7.669803908e-03f, 7.689535023e-03f, 7.709251604e-03f, 7.728953618e-03f, 7.748641033e-03f, 7.768313815e-03f, 7.787971931e-03f, 7.807615348e-03f, 7.827244033e-03f, 7.846857953e-03f,
-7.866457075e-03f, 7.886041367e-03f, 7.905610795e-03f, 7.925165327e-03f, 7.944704929e-03f, 7.964229569e-03f, 7.983739215e-03f, 8.003233833e-03f, 8.022713390e-03f, 8.042177855e-03f,
-8.061627194e-03f, 8.081061374e-03f, 8.100480364e-03f, 8.119884131e-03f, 8.139272641e-03f, 8.158645863e-03f, 8.178003764e-03f, 8.197346311e-03f, 8.216673472e-03f, 8.235985216e-03f,
-8.255281508e-03f, 8.274562318e-03f, 8.293827612e-03f, 8.313077359e-03f, 8.332311525e-03f, 8.351530080e-03f, 8.370732990e-03f, 8.389920224e-03f, 8.409091749e-03f, 8.428247534e-03f,
-8.447387545e-03f, 8.466511752e-03f, 8.485620122e-03f, 8.504712623e-03f, 8.523789223e-03f, 8.542849891e-03f, 8.561894593e-03f, 8.580923299e-03f, 8.599935977e-03f, 8.618932595e-03f,
-8.637913120e-03f, 8.656877521e-03f, 8.675825768e-03f, 8.694757826e-03f, 8.713673666e-03f, 8.732573256e-03f, 8.751456563e-03f, 8.770323556e-03f, 8.789174205e-03f, 8.808008476e-03f,
-8.826826339e-03f, 8.845627762e-03f, 8.864412715e-03f, 8.883181164e-03f, 8.901933080e-03f, 8.920668430e-03f, 8.939387184e-03f, 8.958089310e-03f, 8.976774777e-03f, 8.995443554e-03f,
-9.014095609e-03f, 9.032730911e-03f, 9.051349430e-03f, 9.069951133e-03f, 9.088535991e-03f, 9.107103972e-03f, 9.125655045e-03f, 9.144189179e-03f, 9.162706343e-03f, 9.181206506e-03f,
-9.199689638e-03f, 9.218155707e-03f, 9.236604683e-03f, 9.255036535e-03f, 9.273451232e-03f, 9.291848743e-03f, 9.310229038e-03f, 9.328592087e-03f, 9.346937858e-03f, 9.365266320e-03f,
-9.383577445e-03f, 9.401871200e-03f, 9.420147555e-03f, 9.438406480e-03f, 9.456647945e-03f, 9.474871919e-03f, 9.493078371e-03f, 9.511267272e-03f, 9.529438590e-03f, 9.547592297e-03f,
-9.565728361e-03f, 9.583846753e-03f, 9.601947441e-03f, 9.620030397e-03f, 9.638095589e-03f, 9.656142989e-03f, 9.674172565e-03f, 9.692184288e-03f, 9.710178128e-03f, 9.728154055e-03f,
-9.746112038e-03f, 9.764052049e-03f, 9.781974057e-03f, 9.799878032e-03f, 9.817763945e-03f, 9.835631766e-03f, 9.853481466e-03f, 9.871313013e-03f, 9.889126380e-03f, 9.906921535e-03f,
-9.924698451e-03f, 9.942457096e-03f, 9.960197443e-03f, 9.977919460e-03f, 9.995623119e-03f, 1.001330839e-02f, 1.003097524e-02f, 1.004862365e-02f, 1.006625358e-02f, 1.008386501e-02f,
-1.010145790e-02f, 1.011903223e-02f, 1.013658797e-02f, 1.015412508e-02f, 1.017164355e-02f, 1.018914333e-02f, 1.020662440e-02f, 1.022408674e-02f, 1.024153031e-02f, 1.025895508e-02f,
-1.027636103e-02f, 1.029374813e-02f, 1.031111634e-02f, 1.032846564e-02f, 1.034579600e-02f, 1.036310739e-02f, 1.038039979e-02f, 1.039767316e-02f, 1.041492747e-02f, 1.043216270e-02f,
-1.044937882e-02f, 1.046657579e-02f, 1.048375360e-02f, 1.050091221e-02f, 1.051805160e-02f, 1.053517173e-02f, 1.055227258e-02f, 1.056935411e-02f, 1.058641631e-02f, 1.060345914e-02f,
-1.062048257e-02f, 1.063748658e-02f, 1.065447114e-02f, 1.067143622e-02f, 1.068838179e-02f, 1.070530783e-02f, 1.072221430e-02f, 1.073910117e-02f, 1.075596843e-02f, 1.077281604e-02f,
-1.078964397e-02f, 1.080645220e-02f, 1.082324070e-02f, 1.084000944e-02f, 1.085675840e-02f, 1.087348753e-02f, 1.089019683e-02f, 1.090688626e-02f, 1.092355578e-02f, 1.094020539e-02f,
-1.095683504e-02f, 1.097344471e-02f, 1.099003438e-02f, 1.100660400e-02f, 1.102315357e-02f, 1.103968305e-02f, 1.105619241e-02f, 1.107268163e-02f, 1.108915068e-02f, 1.110559952e-02f,
-1.112202815e-02f, 1.113843652e-02f, 1.115482461e-02f, 1.117119239e-02f, 1.118753984e-02f, 1.120386694e-02f, 1.122017364e-02f, 1.123645993e-02f, 1.125272577e-02f, 1.126897115e-02f,
-1.128519604e-02f, 1.130140040e-02f, 1.131758422e-02f, 1.133374746e-02f, 1.134989010e-02f, 1.136601211e-02f, 1.138211347e-02f, 1.139819415e-02f, 1.141425411e-02f, 1.143029335e-02f,
-1.144631182e-02f, 1.146230951e-02f, 1.147828639e-02f, 1.149424242e-02f, 1.151017759e-02f, 1.152609187e-02f, 1.154198523e-02f, 1.155785765e-02f, 1.157370910e-02f, 1.158953955e-02f,
-1.160534898e-02f, 1.162113736e-02f, 1.163690467e-02f, 1.165265087e-02f, 1.166837596e-02f, 1.168407989e-02f, 1.169976264e-02f, 1.171542419e-02f, 1.173106451e-02f, 1.174668357e-02f,
-1.176228136e-02f, 1.177785784e-02f, 1.179341299e-02f, 1.180894678e-02f, 1.182445919e-02f, 1.183995019e-02f, 1.185541976e-02f, 1.187086787e-02f, 1.188629450e-02f, 1.190169961e-02f,
-1.191708320e-02f, 1.193244522e-02f, 1.194778566e-02f, 1.196310449e-02f, 1.197840168e-02f, 1.199367722e-02f, 1.200893106e-02f, 1.202416320e-02f, 1.203937361e-02f, 1.205456225e-02f,
-1.206972911e-02f, 1.208487416e-02f, 1.209999738e-02f, 1.211509873e-02f, 1.213017820e-02f, 1.214523577e-02f, 1.216027140e-02f, 1.217528507e-02f, 1.219027677e-02f, 1.220524645e-02f,
-1.222019410e-02f, 1.223511970e-02f, 1.225002322e-02f, 1.226490463e-02f, 1.227976392e-02f, 1.229460105e-02f, 1.230941601e-02f, 1.232420876e-02f, 1.233897929e-02f, 1.235372757e-02f,
-1.236845358e-02f, 1.238315728e-02f, 1.239783867e-02f, 1.241249771e-02f, 1.242713438e-02f, 1.244174866e-02f, 1.245634052e-02f, 1.247090994e-02f, 1.248545690e-02f, 1.249998136e-02f,
-1.251448332e-02f, 1.252896274e-02f, 1.254341960e-02f, 1.255785388e-02f, 1.257226555e-02f, 1.258665459e-02f, 1.260102098e-02f, 1.261536469e-02f, 1.262968570e-02f, 1.264398399e-02f,
-1.265825953e-02f, 1.267251230e-02f, 1.268674228e-02f, 1.270094944e-02f, 1.271513376e-02f, 1.272929523e-02f, 1.274343380e-02f, 1.275754947e-02f, 1.277164221e-02f, 1.278571199e-02f,
-1.279975880e-02f, 1.281378260e-02f, 1.282778339e-02f, 1.284176113e-02f, 1.285571580e-02f, 1.286964738e-02f, 1.288355584e-02f, 1.289744118e-02f, 1.291130335e-02f, 1.292514234e-02f,
-1.293895813e-02f, 1.295275070e-02f, 1.296652001e-02f, 1.298026606e-02f, 1.299398881e-02f, 1.300768825e-02f, 1.302136435e-02f, 1.303501709e-02f, 1.304864646e-02f, 1.306225241e-02f,
-1.307583495e-02f, 1.308939403e-02f, 1.310292965e-02f, 1.311644178e-02f, 1.312993039e-02f, 1.314339547e-02f, 1.315683699e-02f, 1.317025493e-02f, 1.318364928e-02f, 1.319702000e-02f,
-1.321036708e-02f, 1.322369049e-02f, 1.323699022e-02f, 1.325026624e-02f, 1.326351853e-02f, 1.327674707e-02f, 1.328995184e-02f, 1.330313281e-02f, 1.331628997e-02f, 1.332942330e-02f,
-1.334253276e-02f, 1.335561835e-02f, 1.336868005e-02f, 1.338171782e-02f, 1.339473165e-02f, 1.340772151e-02f, 1.342068740e-02f, 1.343362928e-02f, 1.344654713e-02f, 1.345944094e-02f,
-1.347231069e-02f, 1.348515634e-02f, 1.349797789e-02f, 1.351077531e-02f, 1.352354858e-02f, 1.353629769e-02f, 1.354902260e-02f, 1.356172330e-02f, 1.357439977e-02f, 1.358705199e-02f,
-1.359967994e-02f, 1.361228359e-02f, 1.362486294e-02f, 1.363741795e-02f, 1.364994861e-02f, 1.366245489e-02f, 1.367493679e-02f, 1.368739427e-02f, 1.369982732e-02f, 1.371223592e-02f,
-1.372462004e-02f, 1.373697967e-02f, 1.374931479e-02f, 1.376162538e-02f, 1.377391142e-02f, 1.378617288e-02f, 1.379840976e-02f, 1.381062202e-02f, 1.382280965e-02f, 1.383497264e-02f,
-1.384711095e-02f, 1.385922458e-02f, 1.387131350e-02f, 1.388337769e-02f, 1.389541714e-02f, 1.390743182e-02f, 1.391942172e-02f, 1.393138681e-02f, 1.394332708e-02f, 1.395524251e-02f,
-1.396713307e-02f, 1.397899876e-02f, 1.399083954e-02f, 1.400265541e-02f, 1.401444635e-02f, 1.402621232e-02f, 1.403795333e-02f, 1.404966934e-02f, 1.406136033e-02f, 1.407302630e-02f,
-1.408466722e-02f, 1.409628307e-02f, 1.410787384e-02f, 1.411943950e-02f, 1.413098004e-02f, 1.414249544e-02f, 1.415398568e-02f, 1.416545074e-02f, 1.417689061e-02f, 1.418830526e-02f,
-1.419969468e-02f, 1.421105885e-02f, 1.422239775e-02f, 1.423371136e-02f, 1.424499967e-02f, 1.425626266e-02f, 1.426750031e-02f, 1.427871260e-02f, 1.428989952e-02f, 1.430106104e-02f,
-1.431219715e-02f, 1.432330784e-02f, 1.433439307e-02f, 1.434545285e-02f, 1.435648714e-02f, 1.436749593e-02f, 1.437847921e-02f, 1.438943695e-02f, 1.440036915e-02f, 1.441127577e-02f,
-1.442215681e-02f, 1.443301225e-02f, 1.444384207e-02f, 1.445464625e-02f, 1.446542478e-02f, 1.447617764e-02f, 1.448690480e-02f, 1.449760627e-02f, 1.450828201e-02f, 1.451893202e-02f,
-1.452955627e-02f, 1.454015475e-02f, 1.455072744e-02f, 1.456127432e-02f, 1.457179539e-02f, 1.458229061e-02f, 1.459275998e-02f, 1.460320348e-02f, 1.461362109e-02f, 1.462401280e-02f,
-1.463437859e-02f, 1.464471844e-02f, 1.465503234e-02f, 1.466532027e-02f, 1.467558221e-02f, 1.468581815e-02f, 1.469602808e-02f, 1.470621197e-02f, 1.471636981e-02f, 1.472650159e-02f,
-1.473660729e-02f, 1.474668689e-02f, 1.475674038e-02f, 1.476676774e-02f, 1.477676895e-02f, 1.478674401e-02f, 1.479669289e-02f, 1.480661558e-02f, 1.481651207e-02f, 1.482638233e-02f,
-1.483622635e-02f, 1.484604413e-02f, 1.485583563e-02f, 1.486560085e-02f, 1.487533978e-02f, 1.488505239e-02f, 1.489473867e-02f, 1.490439861e-02f, 1.491403219e-02f, 1.492363940e-02f,
-1.493322022e-02f, 1.494277463e-02f, 1.495230263e-02f, 1.496180419e-02f, 1.497127931e-02f, 1.498072796e-02f, 1.499015014e-02f, 1.499954582e-02f, 1.500891500e-02f, 1.501825766e-02f,
-1.502757378e-02f, 1.503686336e-02f, 1.504612637e-02f, 1.505536280e-02f, 1.506457263e-02f, 1.507375586e-02f, 1.508291247e-02f, 1.509204245e-02f, 1.510114577e-02f, 1.511022244e-02f,
-1.511927242e-02f, 1.512829571e-02f, 1.513729230e-02f, 1.514626217e-02f, 1.515520530e-02f, 1.516412169e-02f, 1.517301132e-02f, 1.518187418e-02f, 1.519071024e-02f, 1.519951951e-02f,
-1.520830196e-02f, 1.521705758e-02f, 1.522578636e-02f, 1.523448828e-02f, 1.524316334e-02f, 1.525181152e-02f, 1.526043280e-02f, 1.526902717e-02f, 1.527759462e-02f, 1.528613513e-02f,
-1.529464870e-02f, 1.530313531e-02f, 1.531159494e-02f, 1.532002759e-02f, 1.532843324e-02f, 1.533681187e-02f, 1.534516348e-02f, 1.535348806e-02f, 1.536178558e-02f, 1.537005604e-02f,
-1.537829943e-02f, 1.538651572e-02f, 1.539470492e-02f, 1.540286700e-02f, 1.541100196e-02f, 1.541910978e-02f, 1.542719045e-02f, 1.543524395e-02f, 1.544327029e-02f, 1.545126943e-02f,
-1.545924138e-02f, 1.546718611e-02f, 1.547510363e-02f, 1.548299391e-02f, 1.549085694e-02f, 1.549869271e-02f, 1.550650121e-02f, 1.551428243e-02f, 1.552203636e-02f, 1.552976298e-02f,
-1.553746228e-02f, 1.554513426e-02f, 1.555277889e-02f, 1.556039617e-02f, 1.556798609e-02f, 1.557554864e-02f, 1.558308379e-02f, 1.559059156e-02f, 1.559807191e-02f, 1.560552484e-02f,
-1.561295034e-02f, 1.562034840e-02f, 1.562771901e-02f, 1.563506215e-02f, 1.564237781e-02f, 1.564966600e-02f, 1.565692668e-02f, 1.566415986e-02f, 1.567136551e-02f, 1.567854364e-02f,
-1.568569423e-02f, 1.569281727e-02f, 1.569991275e-02f, 1.570698065e-02f, 1.571402097e-02f, 1.572103371e-02f, 1.572801883e-02f, 1.573497635e-02f, 1.574190624e-02f, 1.574880850e-02f,
-1.575568311e-02f, 1.576253007e-02f, 1.576934937e-02f, 1.577614099e-02f, 1.578290493e-02f, 1.578964117e-02f, 1.579634971e-02f, 1.580303053e-02f, 1.580968363e-02f, 1.581630900e-02f,
-1.582290663e-02f, 1.582947650e-02f, 1.583601861e-02f, 1.584253295e-02f, 1.584901950e-02f, 1.585547827e-02f, 1.586190923e-02f, 1.586831239e-02f, 1.587468772e-02f, 1.588103523e-02f,
-1.588735490e-02f, 1.589364673e-02f, 1.589991069e-02f, 1.590614680e-02f, 1.591235503e-02f, 1.591853537e-02f, 1.592468783e-02f, 1.593081238e-02f, 1.593690902e-02f, 1.594297775e-02f,
-1.594901855e-02f, 1.595503141e-02f, 1.596101633e-02f, 1.596697330e-02f, 1.597290230e-02f, 1.597880333e-02f, 1.598467639e-02f, 1.599052146e-02f, 1.599633853e-02f, 1.600212760e-02f,
-1.600788866e-02f, 1.601362170e-02f, 1.601932671e-02f, 1.602500369e-02f, 1.603065262e-02f, 1.603627350e-02f, 1.604186631e-02f, 1.604743106e-02f, 1.605296774e-02f, 1.605847633e-02f,
-1.606395683e-02f, 1.606940923e-02f, 1.607483352e-02f, 1.608022970e-02f, 1.608559776e-02f, 1.609093769e-02f, 1.609624948e-02f, 1.610153312e-02f, 1.610678862e-02f, 1.611201595e-02f,
-1.611721512e-02f, 1.612238612e-02f, 1.612752893e-02f, 1.613264356e-02f, 1.613772999e-02f, 1.614278822e-02f, 1.614781824e-02f, 1.615282005e-02f, 1.615779363e-02f, 1.616273898e-02f,
-1.616765610e-02f, 1.617254497e-02f, 1.617740560e-02f, 1.618223797e-02f, 1.618704207e-02f, 1.619181791e-02f, 1.619656547e-02f, 1.620128475e-02f, 1.620597574e-02f, 1.621063843e-02f,
-1.621527282e-02f, 1.621987891e-02f, 1.622445668e-02f, 1.622900613e-02f, 1.623352726e-02f, 1.623802005e-02f, 1.624248451e-02f, 1.624692062e-02f, 1.625132838e-02f, 1.625570779e-02f,
-1.626005883e-02f, 1.626438151e-02f, 1.626867582e-02f, 1.627294174e-02f, 1.627717929e-02f, 1.628138844e-02f, 1.628556920e-02f, 1.628972155e-02f, 1.629384551e-02f, 1.629794105e-02f,
-1.630200817e-02f, 1.630604687e-02f, 1.631005715e-02f, 1.631403899e-02f, 1.631799239e-02f, 1.632191736e-02f, 1.632581387e-02f, 1.632968193e-02f, 1.633352154e-02f, 1.633733268e-02f,
-1.634111536e-02f, 1.634486957e-02f, 1.634859530e-02f, 1.635229254e-02f, 1.635596131e-02f, 1.635960158e-02f, 1.636321336e-02f, 1.636679664e-02f, 1.637035141e-02f, 1.637387768e-02f,
-1.637737544e-02f, 1.638084467e-02f, 1.638428539e-02f, 1.638769759e-02f, 1.639108125e-02f, 1.639443638e-02f, 1.639776298e-02f, 1.640106103e-02f, 1.640433054e-02f, 1.640757150e-02f,
-1.641078391e-02f, 1.641396776e-02f, 1.641712305e-02f, 1.642024978e-02f, 1.642334794e-02f, 1.642641753e-02f, 1.642945855e-02f, 1.643247099e-02f, 1.643545484e-02f, 1.643841011e-02f,
-1.644133680e-02f, 1.644423489e-02f, 1.644710439e-02f, 1.644994529e-02f, 1.645275759e-02f, 1.645554129e-02f, 1.645829638e-02f, 1.646102286e-02f, 1.646372072e-02f, 1.646638998e-02f,
-1.646903061e-02f, 1.647164262e-02f, 1.647422601e-02f, 1.647678077e-02f, 1.647930690e-02f, 1.648180441e-02f, 1.648427327e-02f, 1.648671350e-02f, 1.648912509e-02f, 1.649150804e-02f,
-1.649386235e-02f, 1.649618801e-02f, 1.649848502e-02f, 1.650075338e-02f, 1.650299309e-02f, 1.650520414e-02f, 1.650738654e-02f, 1.650954028e-02f, 1.651166535e-02f, 1.651376177e-02f,
-1.651582952e-02f, 1.651786860e-02f, 1.651987902e-02f, 1.652186076e-02f, 1.652381384e-02f, 1.652573824e-02f, 1.652763397e-02f, 1.652950102e-02f, 1.653133940e-02f, 1.653314909e-02f,
-1.653493011e-02f, 1.653668244e-02f, 1.653840610e-02f, 1.654010107e-02f, 1.654176735e-02f, 1.654340495e-02f, 1.654501386e-02f, 1.654659408e-02f, 1.654814562e-02f, 1.654966846e-02f,
-1.655116262e-02f, 1.655262808e-02f, 1.655406485e-02f, 1.655547293e-02f, 1.655685231e-02f, 1.655820300e-02f, 1.655952500e-02f, 1.656081830e-02f, 1.656208291e-02f, 1.656331881e-02f,
-1.656452603e-02f, 1.656570454e-02f, 1.656685436e-02f, 1.656797549e-02f, 1.656906791e-02f, 1.657013164e-02f, 1.657116667e-02f, 1.657217301e-02f, 1.657315064e-02f, 1.657409958e-02f,
-1.657501983e-02f, 1.657591137e-02f, 1.657677422e-02f, 1.657760838e-02f, 1.657841383e-02f, 1.657919060e-02f, 1.657993866e-02f, 1.658065803e-02f, 1.658134871e-02f, 1.658201070e-02f,
-1.658264399e-02f, 1.658324859e-02f, 1.658382450e-02f, 1.658437172e-02f, 1.658489025e-02f, 1.658538009e-02f, 1.658584124e-02f, 1.658627371e-02f, 1.658667749e-02f, 1.658705258e-02f,
-1.658739900e-02f, 1.658771672e-02f, 1.658800577e-02f, 1.658826614e-02f, 1.658849783e-02f, 1.658870085e-02f, 1.658887518e-02f, 1.658902085e-02f, 1.658913784e-02f, 1.658922616e-02f,
-1.658928581e-02f, 1.658931679e-02f, 1.658931911e-02f, 1.658929276e-02f, 1.658923775e-02f, 1.658915408e-02f, 1.658904175e-02f, 1.658890077e-02f, 1.658873113e-02f, 1.658853283e-02f,
-1.658830589e-02f, 1.658805030e-02f, 1.658776606e-02f, 1.658745318e-02f, 1.658711166e-02f, 1.658674150e-02f, 1.658634270e-02f, 1.658591527e-02f, 1.658545921e-02f, 1.658497452e-02f,
-1.658446120e-02f, 1.658391926e-02f, 1.658334870e-02f, 1.658274952e-02f, 1.658212172e-02f, 1.658146531e-02f, 1.658078030e-02f, 1.658006667e-02f, 1.657932445e-02f, 1.657855362e-02f,
-1.657775419e-02f, 1.657692617e-02f, 1.657606956e-02f, 1.657518436e-02f, 1.657427058e-02f, 1.657332821e-02f, 1.657235727e-02f, 1.657135776e-02f, 1.657032967e-02f, 1.656927302e-02f,
-1.656818780e-02f, 1.656707402e-02f, 1.656593169e-02f, 1.656476080e-02f, 1.656356137e-02f, 1.656233339e-02f, 1.656107687e-02f, 1.655979181e-02f, 1.655847822e-02f, 1.655713610e-02f,
-1.655576546e-02f, 1.655436630e-02f, 1.655293862e-02f, 1.655148242e-02f, 1.654999772e-02f, 1.654848452e-02f, 1.654694281e-02f, 1.654537262e-02f, 1.654377393e-02f, 1.654214675e-02f,
-1.654049110e-02f, 1.653880697e-02f, 1.653709436e-02f, 1.653535329e-02f, 1.653358376e-02f, 1.653178577e-02f, 1.652995933e-02f, 1.652810444e-02f, 1.652622110e-02f, 1.652430933e-02f,
-1.652236913e-02f, 1.652040050e-02f, 1.651840344e-02f, 1.651637797e-02f, 1.651432409e-02f, 1.651224180e-02f, 1.651013111e-02f, 1.650799203e-02f, 1.650582455e-02f, 1.650362869e-02f,
-1.650140445e-02f, 1.649915184e-02f, 1.649687086e-02f, 1.649456151e-02f, 1.649222381e-02f, 1.648985776e-02f, 1.648746337e-02f, 1.648504063e-02f, 1.648258956e-02f, 1.648011017e-02f,
-1.647760246e-02f, 1.647506643e-02f, 1.647250209e-02f, 1.646990945e-02f, 1.646728851e-02f, 1.646463928e-02f, 1.646196177e-02f, 1.645925598e-02f, 1.645652192e-02f, 1.645375960e-02f,
-1.645096902e-02f, 1.644815019e-02f, 1.644530311e-02f, 1.644242780e-02f, 1.643952425e-02f, 1.643659248e-02f, 1.643363249e-02f, 1.643064429e-02f, 1.642762789e-02f, 1.642458329e-02f,
-1.642151050e-02f, 1.641840953e-02f, 1.641528038e-02f, 1.641212307e-02f, 1.640893759e-02f, 1.640572396e-02f, 1.640248218e-02f, 1.639921227e-02f, 1.639591422e-02f, 1.639258804e-02f,
-1.638923375e-02f, 1.638585135e-02f, 1.638244085e-02f, 1.637900225e-02f, 1.637553557e-02f, 1.637204081e-02f, 1.636851798e-02f, 1.636496708e-02f, 1.636138813e-02f, 1.635778113e-02f,
-1.635414609e-02f, 1.635048302e-02f, 1.634679193e-02f, 1.634307282e-02f, 1.633932570e-02f, 1.633555059e-02f, 1.633174748e-02f, 1.632791640e-02f, 1.632405734e-02f, 1.632017031e-02f,
-1.631625533e-02f, 1.631231239e-02f, 1.630834152e-02f, 1.630434272e-02f, 1.630031599e-02f, 1.629626135e-02f, 1.629217880e-02f, 1.628806836e-02f, 1.628393003e-02f, 1.627976382e-02f,
-1.627556974e-02f, 1.627134780e-02f, 1.626709801e-02f, 1.626282038e-02f, 1.625851491e-02f, 1.625418162e-02f, 1.624982051e-02f, 1.624543159e-02f, 1.624101488e-02f, 1.623657038e-02f,
-1.623209811e-02f, 1.622759806e-02f, 1.622307026e-02f, 1.621851471e-02f, 1.621393141e-02f, 1.620932039e-02f, 1.620468164e-02f, 1.620001519e-02f, 1.619532103e-02f, 1.619059918e-02f,
-1.618584965e-02f, 1.618107245e-02f, 1.617626759e-02f, 1.617143508e-02f, 1.616657492e-02f, 1.616168714e-02f, 1.615677173e-02f, 1.615182871e-02f, 1.614685809e-02f, 1.614185989e-02f,
-1.613683410e-02f, 1.613178074e-02f, 1.612669982e-02f, 1.612159135e-02f, 1.611645535e-02f, 1.611129182e-02f, 1.610610077e-02f, 1.610088221e-02f, 1.609563616e-02f, 1.609036262e-02f,
-1.608506161e-02f, 1.607973314e-02f, 1.607437722e-02f, 1.606899385e-02f, 1.606358305e-02f, 1.605814484e-02f, 1.605267921e-02f, 1.604718619e-02f, 1.604166579e-02f, 1.603611801e-02f,
-1.603054286e-02f, 1.602494037e-02f, 1.601931053e-02f, 1.601365336e-02f, 1.600796888e-02f, 1.600225709e-02f, 1.599651801e-02f, 1.599075164e-02f, 1.598495800e-02f, 1.597913710e-02f,
-1.597328896e-02f, 1.596741358e-02f, 1.596151097e-02f, 1.595558115e-02f, 1.594962413e-02f, 1.594363993e-02f, 1.593762854e-02f, 1.593158999e-02f, 1.592552429e-02f, 1.591943145e-02f,
-1.591331149e-02f, 1.590716440e-02f, 1.590099021e-02f, 1.589478894e-02f, 1.588856058e-02f, 1.588230516e-02f, 1.587602268e-02f, 1.586971316e-02f, 1.586337662e-02f, 1.585701306e-02f,
-1.585062249e-02f, 1.584420494e-02f, 1.583776040e-02f, 1.583128891e-02f, 1.582479046e-02f, 1.581826507e-02f, 1.581171275e-02f, 1.580513352e-02f, 1.579852739e-02f, 1.579189438e-02f,
-1.578523449e-02f, 1.577854774e-02f, 1.577183414e-02f, 1.576509370e-02f, 1.575832645e-02f, 1.575153239e-02f, 1.574471153e-02f, 1.573786389e-02f, 1.573098949e-02f, 1.572408833e-02f,
-1.571716043e-02f, 1.571020581e-02f, 1.570322447e-02f, 1.569621643e-02f, 1.568918171e-02f, 1.568212031e-02f, 1.567503226e-02f, 1.566791757e-02f, 1.566077624e-02f, 1.565360830e-02f,
-1.564641375e-02f, 1.563919262e-02f, 1.563194491e-02f, 1.562467065e-02f, 1.561736984e-02f, 1.561004249e-02f, 1.560268863e-02f, 1.559530827e-02f, 1.558790142e-02f, 1.558046810e-02f,
-1.557300832e-02f, 1.556552209e-02f, 1.555800943e-02f, 1.555047036e-02f, 1.554290489e-02f, 1.553531303e-02f, 1.552769479e-02f, 1.552005021e-02f, 1.551237928e-02f, 1.550468202e-02f,
-1.549695845e-02f, 1.548920859e-02f, 1.548143244e-02f, 1.547363002e-02f, 1.546580136e-02f, 1.545794646e-02f, 1.545006533e-02f, 1.544215800e-02f, 1.543422448e-02f, 1.542626478e-02f,
-1.541827893e-02f, 1.541026693e-02f, 1.540222879e-02f, 1.539416455e-02f, 1.538607421e-02f, 1.537795778e-02f, 1.536981529e-02f, 1.536164674e-02f, 1.535345216e-02f, 1.534523156e-02f,
-1.533698496e-02f, 1.532871237e-02f, 1.532041380e-02f, 1.531208928e-02f, 1.530373882e-02f, 1.529536243e-02f, 1.528696014e-02f, 1.527853195e-02f, 1.527007789e-02f, 1.526159797e-02f,
-1.525309220e-02f, 1.524456061e-02f, 1.523600321e-02f, 1.522742001e-02f, 1.521881103e-02f, 1.521017629e-02f, 1.520151581e-02f, 1.519282960e-02f, 1.518411768e-02f, 1.517538006e-02f,
-1.516661676e-02f, 1.515782780e-02f, 1.514901319e-02f, 1.514017296e-02f, 1.513130711e-02f, 1.512241568e-02f, 1.511349866e-02f, 1.510455608e-02f, 1.509558796e-02f, 1.508659431e-02f,
-1.507757515e-02f, 1.506853050e-02f, 1.505946038e-02f, 1.505036480e-02f, 1.504124377e-02f, 1.503209733e-02f, 1.502292547e-02f, 1.501372823e-02f, 1.500450562e-02f, 1.499525765e-02f,
-1.498598435e-02f, 1.497668573e-02f, 1.496736181e-02f, 1.495801261e-02f, 1.494863814e-02f, 1.493923842e-02f, 1.492981348e-02f, 1.492036332e-02f, 1.491088797e-02f, 1.490138744e-02f,
-1.489186175e-02f, 1.488231092e-02f, 1.487273498e-02f, 1.486313392e-02f, 1.485350778e-02f, 1.484385658e-02f, 1.483418032e-02f, 1.482447903e-02f, 1.481475273e-02f, 1.480500144e-02f,
-1.479522517e-02f, 1.478542394e-02f, 1.477559777e-02f, 1.476574668e-02f, 1.475587069e-02f, 1.474596982e-02f, 1.473604408e-02f, 1.472609349e-02f, 1.471611808e-02f, 1.470611785e-02f,
-1.469609284e-02f, 1.468604306e-02f, 1.467596852e-02f, 1.466586925e-02f, 1.465574527e-02f, 1.464559659e-02f, 1.463542324e-02f, 1.462522523e-02f, 1.461500258e-02f, 1.460475531e-02f,
-1.459448344e-02f, 1.458418699e-02f, 1.457386598e-02f, 1.456352043e-02f, 1.455315036e-02f, 1.454275578e-02f, 1.453233672e-02f, 1.452189319e-02f, 1.451142523e-02f, 1.450093283e-02f,
-1.449041604e-02f, 1.447987485e-02f, 1.446930930e-02f, 1.445871941e-02f, 1.444810518e-02f, 1.443746666e-02f, 1.442680384e-02f, 1.441611676e-02f, 1.440540543e-02f, 1.439466988e-02f,
-1.438391012e-02f, 1.437312617e-02f, 1.436231806e-02f, 1.435148580e-02f, 1.434062941e-02f, 1.432974892e-02f, 1.431884434e-02f, 1.430791570e-02f, 1.429696302e-02f, 1.428598630e-02f,
-1.427498559e-02f, 1.426396089e-02f, 1.425291223e-02f, 1.424183963e-02f, 1.423074310e-02f, 1.421962267e-02f, 1.420847837e-02f, 1.419731020e-02f, 1.418611819e-02f, 1.417490237e-02f,
-1.416366275e-02f, 1.415239935e-02f, 1.414111220e-02f, 1.412980131e-02f, 1.411846671e-02f, 1.410710842e-02f, 1.409572645e-02f, 1.408432084e-02f, 1.407289159e-02f, 1.406143874e-02f,
-1.404996230e-02f, 1.403846230e-02f, 1.402693875e-02f, 1.401539168e-02f, 1.400382111e-02f, 1.399222706e-02f, 1.398060955e-02f, 1.396896860e-02f, 1.395730424e-02f, 1.394561648e-02f,
-1.393390535e-02f, 1.392217088e-02f, 1.391041307e-02f, 1.389863195e-02f, 1.388682756e-02f, 1.387499989e-02f, 1.386314899e-02f, 1.385127487e-02f, 1.383937754e-02f, 1.382745705e-02f,
-1.381551340e-02f, 1.380354661e-02f, 1.379155672e-02f, 1.377954374e-02f, 1.376750770e-02f, 1.375544861e-02f, 1.374336651e-02f, 1.373126140e-02f, 1.371913332e-02f, 1.370698228e-02f,
-1.369480832e-02f, 1.368261144e-02f, 1.367039168e-02f, 1.365814905e-02f, 1.364588358e-02f, 1.363359530e-02f, 1.362128422e-02f, 1.360895036e-02f, 1.359659376e-02f, 1.358421442e-02f,
-1.357181238e-02f, 1.355938766e-02f, 1.354694028e-02f, 1.353447026e-02f, 1.352197763e-02f, 1.350946241e-02f, 1.349692462e-02f, 1.348436429e-02f, 1.347178143e-02f, 1.345917608e-02f,
-1.344654825e-02f, 1.343389797e-02f, 1.342122526e-02f, 1.340853014e-02f, 1.339581264e-02f, 1.338307279e-02f, 1.337031060e-02f, 1.335752609e-02f, 1.334471930e-02f, 1.333189024e-02f,
-1.331903894e-02f, 1.330616543e-02f, 1.329326972e-02f, 1.328035183e-02f, 1.326741180e-02f, 1.325444965e-02f, 1.324146540e-02f, 1.322845907e-02f, 1.321543069e-02f, 1.320238028e-02f,
-1.318930787e-02f, 1.317621348e-02f, 1.316309713e-02f, 1.314995885e-02f, 1.313679866e-02f, 1.312361659e-02f, 1.311041265e-02f, 1.309718688e-02f, 1.308393930e-02f, 1.307066993e-02f,
-1.305737880e-02f, 1.304406593e-02f, 1.303073134e-02f, 1.301737507e-02f, 1.300399713e-02f, 1.299059755e-02f, 1.297717635e-02f, 1.296373355e-02f, 1.295026919e-02f, 1.293678329e-02f,
-1.292327587e-02f, 1.290974695e-02f, 1.289619657e-02f, 1.288262474e-02f, 1.286903149e-02f, 1.285541685e-02f, 1.284178083e-02f, 1.282812347e-02f, 1.281444479e-02f, 1.280074482e-02f,
-1.278702357e-02f, 1.277328108e-02f, 1.275951737e-02f, 1.274573247e-02f, 1.273192639e-02f, 1.271809917e-02f, 1.270425083e-02f, 1.269038139e-02f, 1.267649088e-02f, 1.266257933e-02f,
-1.264864677e-02f, 1.263469321e-02f, 1.262071868e-02f, 1.260672320e-02f, 1.259270681e-02f, 1.257866953e-02f, 1.256461139e-02f, 1.255053240e-02f, 1.253643260e-02f, 1.252231200e-02f,
-1.250817065e-02f, 1.249400856e-02f, 1.247982575e-02f, 1.246562226e-02f, 1.245139811e-02f, 1.243715332e-02f, 1.242288792e-02f, 1.240860195e-02f, 1.239429541e-02f, 1.237996834e-02f,
-1.236562077e-02f, 1.235125272e-02f, 1.233686422e-02f, 1.232245529e-02f, 1.230802596e-02f, 1.229357625e-02f, 1.227910620e-02f, 1.226461582e-02f, 1.225010515e-02f, 1.223557421e-02f,
-1.222102303e-02f, 1.220645163e-02f, 1.219186004e-02f, 1.217724828e-02f, 1.216261639e-02f, 1.214796439e-02f, 1.213329230e-02f, 1.211860016e-02f, 1.210388798e-02f, 1.208915580e-02f,
-1.207440364e-02f, 1.205963154e-02f, 1.204483950e-02f, 1.203002757e-02f, 1.201519577e-02f, 1.200034413e-02f, 1.198547266e-02f, 1.197058141e-02f, 1.195567040e-02f, 1.194073965e-02f,
-1.192578918e-02f, 1.191081904e-02f, 1.189582924e-02f, 1.188081982e-02f, 1.186579079e-02f, 1.185074219e-02f, 1.183567404e-02f, 1.182058638e-02f, 1.180547922e-02f, 1.179035260e-02f,
-1.177520654e-02f, 1.176004107e-02f, 1.174485621e-02f, 1.172965201e-02f, 1.171442847e-02f, 1.169918564e-02f, 1.168392353e-02f, 1.166864217e-02f, 1.165334160e-02f, 1.163802184e-02f,
-1.162268292e-02f, 1.160732486e-02f, 1.159194769e-02f, 1.157655145e-02f, 1.156113615e-02f, 1.154570183e-02f, 1.153024852e-02f, 1.151477623e-02f, 1.149928501e-02f, 1.148377487e-02f,
-1.146824585e-02f, 1.145269797e-02f, 1.143713127e-02f, 1.142154576e-02f, 1.140594149e-02f, 1.139031847e-02f, 1.137467673e-02f, 1.135901630e-02f, 1.134333722e-02f, 1.132763950e-02f,
-1.131192319e-02f, 1.129618829e-02f, 1.128043485e-02f, 1.126466290e-02f, 1.124887245e-02f, 1.123306354e-02f, 1.121723620e-02f, 1.120139045e-02f, 1.118552633e-02f, 1.116964386e-02f,
-1.115374307e-02f, 1.113782400e-02f, 1.112188666e-02f, 1.110593108e-02f, 1.108995731e-02f, 1.107396536e-02f, 1.105795526e-02f, 1.104192704e-02f, 1.102588073e-02f, 1.100981637e-02f,
-1.099373397e-02f, 1.097763357e-02f, 1.096151519e-02f, 1.094537887e-02f, 1.092922464e-02f, 1.091305252e-02f, 1.089686254e-02f, 1.088065473e-02f, 1.086442912e-02f, 1.084818574e-02f,
-1.083192462e-02f, 1.081564579e-02f, 1.079934928e-02f, 1.078303511e-02f, 1.076670332e-02f, 1.075035393e-02f, 1.073398697e-02f, 1.071760248e-02f, 1.070120049e-02f, 1.068478101e-02f,
-1.066834409e-02f, 1.065188975e-02f, 1.063541801e-02f, 1.061892892e-02f, 1.060242250e-02f, 1.058589878e-02f, 1.056935778e-02f, 1.055279955e-02f, 1.053622410e-02f, 1.051963147e-02f,
-1.050302169e-02f, 1.048639479e-02f, 1.046975079e-02f, 1.045308973e-02f, 1.043641164e-02f, 1.041971654e-02f, 1.040300447e-02f, 1.038627546e-02f, 1.036952953e-02f, 1.035276672e-02f,
-1.033598705e-02f, 1.031919056e-02f, 1.030237728e-02f, 1.028554724e-02f, 1.026870046e-02f, 1.025183697e-02f, 1.023495682e-02f, 1.021806002e-02f, 1.020114661e-02f, 1.018421661e-02f,
-1.016727006e-02f, 1.015030699e-02f, 1.013332743e-02f, 1.011633141e-02f, 1.009931896e-02f, 1.008229010e-02f, 1.006524488e-02f, 1.004818332e-02f, 1.003110544e-02f, 1.001401129e-02f,
-9.996900891e-03f, 9.979774273e-03f, 9.962631468e-03f, 9.945472506e-03f, 9.928297418e-03f, 9.911106235e-03f, 9.893898988e-03f, 9.876675706e-03f, 9.859436422e-03f, 9.842181165e-03f,
-9.824909966e-03f, 9.807622857e-03f, 9.790319867e-03f, 9.773001029e-03f, 9.755666372e-03f, 9.738315928e-03f, 9.720949728e-03f, 9.703567802e-03f, 9.686170182e-03f, 9.668756898e-03f,
-9.651327982e-03f, 9.633883465e-03f, 9.616423377e-03f, 9.598947750e-03f, 9.581456616e-03f, 9.563950004e-03f, 9.546427947e-03f, 9.528890475e-03f, 9.511337621e-03f, 9.493769414e-03f,
-9.476185887e-03f, 9.458587070e-03f, 9.440972996e-03f, 9.423343694e-03f, 9.405699198e-03f, 9.388039538e-03f, 9.370364745e-03f, 9.352674851e-03f, 9.334969888e-03f, 9.317249887e-03f,
-9.299514879e-03f, 9.281764897e-03f, 9.263999971e-03f, 9.246220134e-03f, 9.228425416e-03f, 9.210615850e-03f, 9.192791467e-03f, 9.174952300e-03f, 9.157098378e-03f, 9.139229736e-03f,
-9.121346403e-03f, 9.103448412e-03f, 9.085535795e-03f, 9.067608584e-03f, 9.049666810e-03f, 9.031710505e-03f, 9.013739702e-03f, 8.995754432e-03f, 8.977754727e-03f, 8.959740619e-03f,
-8.941712140e-03f, 8.923669322e-03f, 8.905612197e-03f, 8.887540798e-03f, 8.869455155e-03f, 8.851355303e-03f, 8.833241271e-03f, 8.815113094e-03f, 8.796970802e-03f, 8.778814429e-03f,
-8.760644005e-03f, 8.742459564e-03f, 8.724261138e-03f, 8.706048760e-03f, 8.687822460e-03f, 8.669582272e-03f, 8.651328229e-03f, 8.633060362e-03f, 8.614778703e-03f, 8.596483286e-03f,
-8.578174143e-03f, 8.559851306e-03f, 8.541514808e-03f, 8.523164680e-03f, 8.504800957e-03f, 8.486423670e-03f, 8.468032851e-03f, 8.449628535e-03f, 8.431210752e-03f, 8.412779535e-03f,
-8.394334919e-03f, 8.375876934e-03f, 8.357405614e-03f, 8.338920991e-03f, 8.320423099e-03f, 8.301911969e-03f, 8.283387635e-03f, 8.264850130e-03f, 8.246299486e-03f, 8.227735736e-03f,
-8.209158914e-03f, 8.190569051e-03f, 8.171966181e-03f, 8.153350337e-03f, 8.134721552e-03f, 8.116079858e-03f, 8.097425289e-03f, 8.078757878e-03f, 8.060077658e-03f, 8.041384661e-03f,
-8.022678921e-03f, 8.003960471e-03f, 7.985229344e-03f, 7.966485573e-03f, 7.947729192e-03f, 7.928960233e-03f, 7.910178729e-03f, 7.891384715e-03f, 7.872578223e-03f, 7.853759286e-03f,
-7.834927937e-03f, 7.816084211e-03f, 7.797228140e-03f, 7.778359757e-03f, 7.759479096e-03f, 7.740586190e-03f, 7.721681073e-03f, 7.702763778e-03f, 7.683834338e-03f, 7.664892788e-03f,
-7.645939159e-03f, 7.626973487e-03f, 7.607995803e-03f, 7.589006143e-03f, 7.570004538e-03f, 7.550991024e-03f, 7.531965633e-03f, 7.512928399e-03f, 7.493879356e-03f, 7.474818537e-03f,
-7.455745976e-03f, 7.436661707e-03f, 7.417565762e-03f, 7.398458177e-03f, 7.379338985e-03f, 7.360208218e-03f, 7.341065912e-03f, 7.321912100e-03f, 7.302746815e-03f, 7.283570092e-03f,
-7.264381965e-03f, 7.245182466e-03f, 7.225971631e-03f, 7.206749492e-03f, 7.187516084e-03f, 7.168271441e-03f, 7.149015596e-03f, 7.129748584e-03f, 7.110470439e-03f, 7.091181194e-03f,
-7.071880883e-03f, 7.052569541e-03f, 7.033247201e-03f, 7.013913898e-03f, 6.994569666e-03f, 6.975214538e-03f, 6.955848549e-03f, 6.936471733e-03f, 6.917084125e-03f, 6.897685757e-03f,
-6.878276664e-03f, 6.858856882e-03f, 6.839426442e-03f, 6.819985381e-03f, 6.800533732e-03f, 6.781071530e-03f, 6.761598808e-03f, 6.742115601e-03f, 6.722621943e-03f, 6.703117869e-03f,
-6.683603412e-03f, 6.664078608e-03f, 6.644543490e-03f, 6.624998094e-03f, 6.605442452e-03f, 6.585876600e-03f, 6.566300573e-03f, 6.546714404e-03f, 6.527118128e-03f, 6.507511779e-03f,
-6.487895393e-03f, 6.468269003e-03f, 6.448632643e-03f, 6.428986350e-03f, 6.409330156e-03f, 6.389664097e-03f, 6.369988207e-03f, 6.350302520e-03f, 6.330607072e-03f, 6.310901897e-03f,
-6.291187030e-03f, 6.271462505e-03f, 6.251728356e-03f, 6.231984619e-03f, 6.212231329e-03f, 6.192468519e-03f, 6.172696225e-03f, 6.152914481e-03f, 6.133123322e-03f, 6.113322783e-03f,
-6.093512899e-03f, 6.073693705e-03f, 6.053865234e-03f, 6.034027522e-03f, 6.014180605e-03f, 5.994324516e-03f, 5.974459290e-03f, 5.954584963e-03f, 5.934701570e-03f, 5.914809144e-03f,
-5.894907722e-03f, 5.874997337e-03f, 5.855078026e-03f, 5.835149822e-03f, 5.815212762e-03f, 5.795266879e-03f, 5.775312209e-03f, 5.755348787e-03f, 5.735376647e-03f, 5.715395826e-03f,
-5.695406357e-03f, 5.675408277e-03f, 5.655401619e-03f, 5.635386420e-03f, 5.615362713e-03f, 5.595330535e-03f, 5.575289921e-03f, 5.555240905e-03f, 5.535183522e-03f, 5.515117809e-03f,
-5.495043799e-03f, 5.474961529e-03f, 5.454871033e-03f, 5.434772346e-03f, 5.414665505e-03f, 5.394550543e-03f, 5.374427497e-03f, 5.354296401e-03f, 5.334157290e-03f, 5.314010201e-03f,
-5.293855168e-03f, 5.273692227e-03f, 5.253521413e-03f, 5.233342760e-03f, 5.213156306e-03f, 5.192962084e-03f, 5.172760130e-03f, 5.152550480e-03f, 5.132333169e-03f, 5.112108233e-03f,
-5.091875706e-03f, 5.071635624e-03f, 5.051388023e-03f, 5.031132938e-03f, 5.010870404e-03f, 4.990600457e-03f, 4.970323133e-03f, 4.950038466e-03f, 4.929746493e-03f, 4.909447248e-03f,
-4.889140768e-03f, 4.868827088e-03f, 4.848506243e-03f, 4.828178268e-03f, 4.807843201e-03f, 4.787501075e-03f, 4.767151926e-03f, 4.746795791e-03f, 4.726432705e-03f, 4.706062702e-03f,
-4.685685820e-03f, 4.665302093e-03f, 4.644911557e-03f, 4.624514248e-03f, 4.604110202e-03f, 4.583699453e-03f, 4.563282038e-03f, 4.542857993e-03f, 4.522427352e-03f, 4.501990152e-03f,
-4.481546429e-03f, 4.461096218e-03f, 4.440639554e-03f, 4.420176475e-03f, 4.399707014e-03f, 4.379231209e-03f, 4.358749094e-03f, 4.338260706e-03f, 4.317766080e-03f, 4.297265253e-03f,
-4.276758259e-03f, 4.256245135e-03f, 4.235725916e-03f, 4.215200639e-03f, 4.194669338e-03f, 4.174132051e-03f, 4.153588812e-03f, 4.133039659e-03f, 4.112484625e-03f, 4.091923748e-03f,
-4.071357063e-03f, 4.050784606e-03f, 4.030206413e-03f, 4.009622520e-03f, 3.989032962e-03f, 3.968437777e-03f, 3.947836998e-03f, 3.927230663e-03f, 3.906618808e-03f, 3.886001468e-03f,
-3.865378679e-03f, 3.844750477e-03f, 3.824116899e-03f, 3.803477980e-03f, 3.782833755e-03f, 3.762184262e-03f, 3.741529536e-03f, 3.720869613e-03f, 3.700204529e-03f, 3.679534320e-03f,
-3.658859023e-03f, 3.638178672e-03f, 3.617493304e-03f, 3.596802956e-03f, 3.576107662e-03f, 3.555407460e-03f, 3.534702385e-03f, 3.513992474e-03f, 3.493277762e-03f, 3.472558285e-03f,
-3.451834080e-03f, 3.431105182e-03f, 3.410371628e-03f, 3.389633454e-03f, 3.368890696e-03f, 3.348143390e-03f, 3.327391572e-03f, 3.306635278e-03f, 3.285874544e-03f, 3.265109407e-03f,
-3.244339902e-03f, 3.223566066e-03f, 3.202787935e-03f, 3.182005545e-03f, 3.161218933e-03f, 3.140428133e-03f, 3.119633183e-03f, 3.098834119e-03f, 3.078030976e-03f, 3.057223791e-03f,
-3.036412601e-03f, 3.015597441e-03f, 2.994778347e-03f, 2.973955356e-03f, 2.953128505e-03f, 2.932297828e-03f, 2.911463362e-03f, 2.890625145e-03f, 2.869783210e-03f, 2.848937596e-03f,
-2.828088339e-03f, 2.807235473e-03f, 2.786379037e-03f, 2.765519065e-03f, 2.744655594e-03f, 2.723788661e-03f, 2.702918301e-03f, 2.682044552e-03f, 2.661167448e-03f, 2.640287027e-03f,
-2.619403325e-03f, 2.598516377e-03f, 2.577626221e-03f, 2.556732892e-03f, 2.535836428e-03f, 2.514936863e-03f, 2.494034234e-03f, 2.473128578e-03f, 2.452219931e-03f, 2.431308329e-03f,
-2.410393809e-03f, 2.389476407e-03f, 2.368556158e-03f, 2.347633100e-03f, 2.326707269e-03f, 2.305778700e-03f, 2.284847431e-03f, 2.263913498e-03f, 2.242976936e-03f, 2.222037783e-03f,
-2.201096075e-03f, 2.180151847e-03f, 2.159205137e-03f, 2.138255980e-03f, 2.117304413e-03f, 2.096350472e-03f, 2.075394193e-03f, 2.054435614e-03f, 2.033474770e-03f, 2.012511697e-03f,
-1.991546432e-03f, 1.970579012e-03f, 1.949609472e-03f, 1.928637849e-03f, 1.907664179e-03f, 1.886688499e-03f, 1.865710845e-03f, 1.844731253e-03f, 1.823749760e-03f, 1.802766401e-03f,
-1.781781214e-03f, 1.760794235e-03f, 1.739805500e-03f, 1.718815045e-03f, 1.697822907e-03f, 1.676829122e-03f, 1.655833727e-03f, 1.634836757e-03f, 1.613838250e-03f, 1.592838241e-03f,
-1.571836767e-03f, 1.550833865e-03f, 1.529829570e-03f, 1.508823919e-03f, 1.487816948e-03f, 1.466808694e-03f, 1.445799193e-03f, 1.424788481e-03f, 1.403776596e-03f, 1.382763572e-03f,
-1.361749447e-03f, 1.340734257e-03f, 1.319718038e-03f, 1.298700826e-03f, 1.277682659e-03f, 1.256663571e-03f, 1.235643601e-03f, 1.214622783e-03f, 1.193601155e-03f, 1.172578752e-03f,
-1.151555611e-03f, 1.130531769e-03f, 1.109507262e-03f, 1.088482126e-03f, 1.067456397e-03f, 1.046430111e-03f, 1.025403307e-03f, 1.004376018e-03f, 9.833482823e-04f, 9.623201358e-04f,
-9.412916148e-04f, 9.202627557e-04f, 8.992335947e-04f, 8.782041682e-04f, 8.571745126e-04f, 8.361446641e-04f, 8.151146592e-04f, 7.940845341e-04f, 7.730543251e-04f, 7.520240687e-04f,
-7.309938010e-04f, 7.099635585e-04f, 6.889333774e-04f, 6.679032940e-04f, 6.468733447e-04f, 6.258435658e-04f, 6.048139936e-04f, 5.837846644e-04f, 5.627556144e-04f, 5.417268801e-04f,
-5.206984976e-04f, 4.996705033e-04f, 4.786429335e-04f, 4.576158244e-04f, 4.365892124e-04f, 4.155631337e-04f, 3.945376245e-04f, 3.735127213e-04f, 3.524884602e-04f, 3.314648775e-04f,
-3.104420095e-04f, 2.894198925e-04f, 2.683985626e-04f, 2.473780562e-04f, 2.263584095e-04f, 2.053396588e-04f, 1.843218403e-04f, 1.633049901e-04f, 1.422891447e-04f, 1.212743402e-04f,
-1.002606128e-04f, 7.924799875e-05f, 5.823653428e-05f, 3.722625560e-05f, 1.621719893e-05f, -4.790599534e-06f, -2.579710359e-05f, -4.680227703e-05f, -6.780608367e-05f, -8.880848732e-05f,
--1.098094518e-04f, -1.308089409e-04f, -1.518069185e-04f, -1.728033484e-04f, -1.937981944e-04f, -2.147914204e-04f, -2.357829902e-04f, -2.567728677e-04f, -2.777610167e-04f, -2.987474011e-04f,
--3.197319847e-04f, -3.407147315e-04f, -3.616956053e-04f, -3.826745699e-04f, -4.036515893e-04f, -4.246266274e-04f, -4.455996480e-04f, -4.665706151e-04f, -4.875394925e-04f, -5.085062443e-04f,
--5.294708342e-04f, -5.504332263e-04f, -5.713933844e-04f, -5.923512726e-04f, -6.133068547e-04f, -6.342600947e-04f, -6.552109566e-04f, -6.761594043e-04f, -6.971054018e-04f, -7.180489131e-04f,
--7.389899021e-04f, -7.599283329e-04f, -7.808641694e-04f, -8.017973757e-04f, -8.227279158e-04f, -8.436557536e-04f, -8.645808532e-04f, -8.855031787e-04f, -9.064226940e-04f, -9.273393632e-04f,
--9.482531504e-04f, -9.691640196e-04f, -9.900719350e-04f, -1.010976860e-03f, -1.031878760e-03f, -1.052777598e-03f, -1.073673339e-03f, -1.094565946e-03f, -1.115455383e-03f, -1.136341616e-03f,
--1.157224607e-03f, -1.178104322e-03f, -1.198980723e-03f, -1.219853776e-03f, -1.240723444e-03f, -1.261589692e-03f, -1.282452484e-03f, -1.303311784e-03f, -1.324167556e-03f, -1.345019764e-03f,
--1.365868373e-03f, -1.386713347e-03f, -1.407554649e-03f, -1.428392246e-03f, -1.449226099e-03f, -1.470056174e-03f, -1.490882436e-03f, -1.511704847e-03f, -1.532523373e-03f, -1.553337978e-03f,
--1.574148627e-03f, -1.594955282e-03f, -1.615757909e-03f, -1.636556473e-03f, -1.657350937e-03f, -1.678141265e-03f, -1.698927423e-03f, -1.719709374e-03f, -1.740487083e-03f, -1.761260514e-03f,
--1.782029632e-03f, -1.802794400e-03f, -1.823554784e-03f, -1.844310748e-03f, -1.865062256e-03f, -1.885809273e-03f, -1.906551763e-03f, -1.927289690e-03f, -1.948023020e-03f, -1.968751715e-03f,
--1.989475742e-03f, -2.010195065e-03f, -2.030909647e-03f, -2.051619454e-03f, -2.072324450e-03f, -2.093024599e-03f, -2.113719867e-03f, -2.134410217e-03f, -2.155095615e-03f, -2.175776024e-03f,
--2.196451410e-03f, -2.217121737e-03f, -2.237786969e-03f, -2.258447072e-03f, -2.279102009e-03f, -2.299751746e-03f, -2.320396248e-03f, -2.341035478e-03f, -2.361669402e-03f, -2.382297984e-03f,
--2.402921188e-03f, -2.423538981e-03f, -2.444151326e-03f, -2.464758188e-03f, -2.485359531e-03f, -2.505955322e-03f, -2.526545524e-03f, -2.547130102e-03f, -2.567709020e-03f, -2.588282245e-03f,
--2.608849740e-03f, -2.629411471e-03f, -2.649967402e-03f, -2.670517498e-03f, -2.691061724e-03f, -2.711600045e-03f, -2.732132426e-03f, -2.752658831e-03f, -2.773179226e-03f, -2.793693575e-03f,
--2.814201844e-03f, -2.834703997e-03f, -2.855200000e-03f, -2.875689817e-03f, -2.896173413e-03f, -2.916650754e-03f, -2.937121804e-03f, -2.957586528e-03f, -2.978044892e-03f, -2.998496860e-03f,
--3.018942398e-03f, -3.039381471e-03f, -3.059814043e-03f, -3.080240080e-03f, -3.100659548e-03f, -3.121072410e-03f, -3.141478632e-03f, -3.161878180e-03f, -3.182271019e-03f, -3.202657114e-03f,
--3.223036429e-03f, -3.243408931e-03f, -3.263774584e-03f, -3.284133354e-03f, -3.304485206e-03f, -3.324830105e-03f, -3.345168016e-03f, -3.365498906e-03f, -3.385822738e-03f, -3.406139480e-03f,
--3.426449095e-03f, -3.446751549e-03f, -3.467046808e-03f, -3.487334836e-03f, -3.507615601e-03f, -3.527889065e-03f, -3.548155197e-03f, -3.568413959e-03f, -3.588665319e-03f, -3.608909242e-03f,
--3.629145693e-03f, -3.649374637e-03f, -3.669596041e-03f, -3.689809869e-03f, -3.710016087e-03f, -3.730214662e-03f, -3.750405557e-03f, -3.770588740e-03f, -3.790764175e-03f, -3.810931829e-03f,
--3.831091666e-03f, -3.851243653e-03f, -3.871387755e-03f, -3.891523938e-03f, -3.911652168e-03f, -3.931772410e-03f, -3.951884630e-03f, -3.971988794e-03f, -3.992084868e-03f, -4.012172817e-03f,
--4.032252607e-03f, -4.052324204e-03f, -4.072387575e-03f, -4.092442684e-03f, -4.112489497e-03f, -4.132527981e-03f, -4.152558101e-03f, -4.172579824e-03f, -4.192593115e-03f, -4.212597940e-03f,
--4.232594266e-03f, -4.252582057e-03f, -4.272561281e-03f, -4.292531902e-03f, -4.312493888e-03f, -4.332447205e-03f, -4.352391817e-03f, -4.372327692e-03f, -4.392254796e-03f, -4.412173094e-03f,
--4.432082553e-03f, -4.451983139e-03f, -4.471874818e-03f, -4.491757556e-03f, -4.511631320e-03f, -4.531496075e-03f, -4.551351789e-03f, -4.571198427e-03f, -4.591035955e-03f, -4.610864340e-03f,
--4.630683548e-03f, -4.650493546e-03f, -4.670294300e-03f, -4.690085776e-03f, -4.709867940e-03f, -4.729640759e-03f, -4.749404200e-03f, -4.769158229e-03f, -4.788902812e-03f, -4.808637915e-03f,
--4.828363506e-03f, -4.848079551e-03f, -4.867786016e-03f, -4.887482868e-03f, -4.907170074e-03f, -4.926847599e-03f, -4.946515411e-03f, -4.966173477e-03f, -4.985821762e-03f, -5.005460234e-03f,
--5.025088859e-03f, -5.044707604e-03f, -5.064316436e-03f, -5.083915321e-03f, -5.103504227e-03f, -5.123083119e-03f, -5.142651966e-03f, -5.162210732e-03f, -5.181759387e-03f, -5.201297895e-03f,
--5.220826225e-03f, -5.240344343e-03f, -5.259852215e-03f, -5.279349810e-03f, -5.298837094e-03f, -5.318314033e-03f, -5.337780595e-03f, -5.357236747e-03f, -5.376682456e-03f, -5.396117689e-03f,
--5.415542413e-03f, -5.434956595e-03f, -5.454360202e-03f, -5.473753202e-03f, -5.493135561e-03f, -5.512507247e-03f, -5.531868226e-03f, -5.551218467e-03f, -5.570557936e-03f, -5.589886601e-03f,
--5.609204429e-03f, -5.628511386e-03f, -5.647807442e-03f, -5.667092562e-03f, -5.686366714e-03f, -5.705629866e-03f, -5.724881985e-03f, -5.744123038e-03f, -5.763352993e-03f, -5.782571818e-03f,
--5.801779479e-03f, -5.820975945e-03f, -5.840161182e-03f, -5.859335159e-03f, -5.878497843e-03f, -5.897649201e-03f, -5.916789202e-03f, -5.935917813e-03f, -5.955035000e-03f, -5.974140734e-03f,
--5.993234980e-03f, -6.012317706e-03f, -6.031388881e-03f, -6.050448472e-03f, -6.069496447e-03f, -6.088532774e-03f, -6.107557420e-03f, -6.126570354e-03f, -6.145571543e-03f, -6.164560955e-03f,
--6.183538558e-03f, -6.202504320e-03f, -6.221458210e-03f, -6.240400194e-03f, -6.259330241e-03f, -6.278248320e-03f, -6.297154397e-03f, -6.316048442e-03f, -6.334930422e-03f, -6.353800306e-03f,
--6.372658061e-03f, -6.391503656e-03f, -6.410337059e-03f, -6.429158238e-03f, -6.447967161e-03f, -6.466763797e-03f, -6.485548114e-03f, -6.504320081e-03f, -6.523079665e-03f, -6.541826835e-03f,
--6.560561559e-03f, -6.579283806e-03f, -6.597993544e-03f, -6.616690742e-03f, -6.635375368e-03f, -6.654047390e-03f, -6.672706778e-03f, -6.691353499e-03f, -6.709987523e-03f, -6.728608817e-03f,
--6.747217351e-03f, -6.765813093e-03f, -6.784396012e-03f, -6.802966076e-03f, -6.821523254e-03f, -6.840067515e-03f, -6.858598828e-03f, -6.877117162e-03f, -6.895622484e-03f, -6.914114765e-03f,
--6.932593972e-03f, -6.951060076e-03f, -6.969513044e-03f, -6.987952846e-03f, -7.006379450e-03f, -7.024792826e-03f, -7.043192943e-03f, -7.061579769e-03f, -7.079953274e-03f, -7.098313427e-03f,
--7.116660196e-03f, -7.134993552e-03f, -7.153313463e-03f, -7.171619898e-03f, -7.189912827e-03f, -7.208192218e-03f, -7.226458042e-03f, -7.244710267e-03f, -7.262948862e-03f, -7.281173798e-03f,
--7.299385043e-03f, -7.317582566e-03f, -7.335766338e-03f, -7.353936327e-03f, -7.372092503e-03f, -7.390234836e-03f, -7.408363295e-03f, -7.426477849e-03f, -7.444578468e-03f, -7.462665122e-03f,
--7.480737781e-03f, -7.498796413e-03f, -7.516840989e-03f, -7.534871478e-03f, -7.552887851e-03f, -7.570890076e-03f, -7.588878123e-03f, -7.606851963e-03f, -7.624811565e-03f, -7.642756900e-03f,
--7.660687936e-03f, -7.678604643e-03f, -7.696506993e-03f, -7.714394954e-03f, -7.732268497e-03f, -7.750127592e-03f, -7.767972209e-03f, -7.785802317e-03f, -7.803617887e-03f, -7.821418889e-03f,
--7.839205293e-03f, -7.856977070e-03f, -7.874734189e-03f, -7.892476620e-03f, -7.910204335e-03f, -7.927917303e-03f, -7.945615495e-03f, -7.963298880e-03f, -7.980967430e-03f, -7.998621115e-03f,
--8.016259904e-03f, -8.033883769e-03f, -8.051492680e-03f, -8.069086608e-03f, -8.086665523e-03f, -8.104229395e-03f, -8.121778195e-03f, -8.139311894e-03f, -8.156830463e-03f, -8.174333872e-03f,
--8.191822091e-03f, -8.209295092e-03f, -8.226752845e-03f, -8.244195321e-03f, -8.261622491e-03f, -8.279034326e-03f, -8.296430796e-03f, -8.313811873e-03f, -8.331177527e-03f, -8.348527729e-03f,
--8.365862451e-03f, -8.383181663e-03f, -8.400485336e-03f, -8.417773441e-03f, -8.435045950e-03f, -8.452302834e-03f, -8.469544063e-03f, -8.486769610e-03f, -8.503979444e-03f, -8.521173537e-03f,
--8.538351862e-03f, -8.555514388e-03f, -8.572661087e-03f, -8.589791931e-03f, -8.606906891e-03f, -8.624005939e-03f, -8.641089045e-03f, -8.658156181e-03f, -8.675207319e-03f, -8.692242431e-03f,
--8.709261487e-03f, -8.726264460e-03f, -8.743251320e-03f, -8.760222041e-03f, -8.777176593e-03f, -8.794114947e-03f, -8.811037077e-03f, -8.827942953e-03f, -8.844832548e-03f, -8.861705833e-03f,
--8.878562780e-03f, -8.895403360e-03f, -8.912227547e-03f, -8.929035311e-03f, -8.945826625e-03f, -8.962601461e-03f, -8.979359790e-03f, -8.996101586e-03f, -9.012826819e-03f, -9.029535463e-03f,
--9.046227488e-03f, -9.062902868e-03f, -9.079561575e-03f, -9.096203580e-03f, -9.112828857e-03f, -9.129437377e-03f, -9.146029112e-03f, -9.162604036e-03f, -9.179162120e-03f, -9.195703338e-03f,
--9.212227660e-03f, -9.228735061e-03f, -9.245225512e-03f, -9.261698986e-03f, -9.278155456e-03f, -9.294594894e-03f, -9.311017272e-03f, -9.327422564e-03f, -9.343810742e-03f, -9.360181780e-03f,
--9.376535649e-03f, -9.392872322e-03f, -9.409191773e-03f, -9.425493974e-03f, -9.441778898e-03f, -9.458046518e-03f, -9.474296807e-03f, -9.490529738e-03f, -9.506745284e-03f, -9.522943418e-03f,
--9.539124113e-03f, -9.555287343e-03f, -9.571433080e-03f, -9.587561297e-03f, -9.603671968e-03f, -9.619765067e-03f, -9.635840565e-03f, -9.651898437e-03f, -9.667938657e-03f, -9.683961196e-03f,
--9.699966029e-03f, -9.715953129e-03f, -9.731922470e-03f, -9.747874026e-03f, -9.763807768e-03f, -9.779723672e-03f, -9.795621711e-03f, -9.811501858e-03f, -9.827364088e-03f, -9.843208373e-03f,
--9.859034688e-03f, -9.874843006e-03f, -9.890633301e-03f, -9.906405547e-03f, -9.922159718e-03f, -9.937895787e-03f, -9.953613729e-03f, -9.969313518e-03f, -9.984995127e-03f, -1.000065853e-02f,
--1.001630370e-02f, -1.003193062e-02f, -1.004753925e-02f, -1.006312957e-02f, -1.007870156e-02f, -1.009425519e-02f, -1.010979043e-02f, -1.012530726e-02f, -1.014080565e-02f, -1.015628558e-02f,
--1.017174702e-02f, -1.018718994e-02f, -1.020261432e-02f, -1.021802014e-02f, -1.023340737e-02f, -1.024877598e-02f, -1.026412595e-02f, -1.027945725e-02f, -1.029476986e-02f, -1.031006375e-02f,
--1.032533890e-02f, -1.034059528e-02f, -1.035583286e-02f, -1.037105163e-02f, -1.038625155e-02f, -1.040143261e-02f, -1.041659476e-02f, -1.043173800e-02f, -1.044686230e-02f, -1.046196763e-02f,
--1.047705396e-02f, -1.049212127e-02f, -1.050716954e-02f, -1.052219874e-02f, -1.053720885e-02f, -1.055219984e-02f, -1.056717168e-02f, -1.058212436e-02f, -1.059705784e-02f, -1.061197211e-02f,
--1.062686714e-02f, -1.064174290e-02f, -1.065659937e-02f, -1.067143652e-02f, -1.068625434e-02f, -1.070105279e-02f, -1.071583185e-02f, -1.073059150e-02f, -1.074533171e-02f, -1.076005247e-02f,
--1.077475373e-02f, -1.078943549e-02f, -1.080409771e-02f, -1.081874037e-02f, -1.083336345e-02f, -1.084796693e-02f, -1.086255077e-02f, -1.087711497e-02f, -1.089165948e-02f, -1.090618429e-02f,
--1.092068937e-02f, -1.093517471e-02f, -1.094964027e-02f, -1.096408603e-02f, -1.097851197e-02f, -1.099291807e-02f, -1.100730430e-02f, -1.102167063e-02f, -1.103601705e-02f, -1.105034353e-02f,
--1.106465005e-02f, -1.107893658e-02f, -1.109320310e-02f, -1.110744959e-02f, -1.112167602e-02f, -1.113588237e-02f, -1.115006862e-02f, -1.116423474e-02f, -1.117838071e-02f, -1.119250651e-02f,
--1.120661211e-02f, -1.122069749e-02f, -1.123476263e-02f, -1.124880750e-02f, -1.126283209e-02f, -1.127683636e-02f, -1.129082030e-02f, -1.130478388e-02f, -1.131872708e-02f, -1.133264988e-02f,
--1.134655225e-02f, -1.136043417e-02f, -1.137429562e-02f, -1.138813658e-02f, -1.140195702e-02f, -1.141575692e-02f, -1.142953626e-02f, -1.144329501e-02f, -1.145703316e-02f, -1.147075067e-02f,
--1.148444754e-02f, -1.149812373e-02f, -1.151177922e-02f, -1.152541400e-02f, -1.153902803e-02f, -1.155262130e-02f, -1.156619378e-02f, -1.157974545e-02f, -1.159327630e-02f, -1.160678629e-02f,
--1.162027541e-02f, -1.163374363e-02f, -1.164719093e-02f, -1.166061730e-02f, -1.167402270e-02f, -1.168740711e-02f, -1.170077052e-02f, -1.171411290e-02f, -1.172743424e-02f, -1.174073450e-02f,
--1.175401367e-02f, -1.176727172e-02f, -1.178050864e-02f, -1.179372439e-02f, -1.180691897e-02f, -1.182009235e-02f, -1.183324451e-02f, -1.184637542e-02f, -1.185948507e-02f, -1.187257343e-02f,
--1.188564048e-02f, -1.189868621e-02f, -1.191171058e-02f, -1.192471358e-02f, -1.193769519e-02f, -1.195065539e-02f, -1.196359415e-02f, -1.197651145e-02f, -1.198940728e-02f, -1.200228161e-02f,
--1.201513442e-02f, -1.202796569e-02f, -1.204077540e-02f, -1.205356353e-02f, -1.206633005e-02f, -1.207907496e-02f, -1.209179822e-02f, -1.210449981e-02f, -1.211717972e-02f, -1.212983793e-02f,
--1.214247440e-02f, -1.215508914e-02f, -1.216768210e-02f, -1.218025328e-02f, -1.219280265e-02f, -1.220533019e-02f, -1.221783588e-02f, -1.223031971e-02f, -1.224278164e-02f, -1.225522167e-02f,
--1.226763976e-02f, -1.228003591e-02f, -1.229241009e-02f, -1.230476227e-02f, -1.231709245e-02f, -1.232940060e-02f, -1.234168670e-02f, -1.235395073e-02f, -1.236619267e-02f, -1.237841250e-02f,
--1.239061020e-02f, -1.240278576e-02f, -1.241493914e-02f, -1.242707034e-02f, -1.243917933e-02f, -1.245126609e-02f, -1.246333061e-02f, -1.247537286e-02f, -1.248739283e-02f, -1.249939049e-02f,
--1.251136582e-02f, -1.252331881e-02f, -1.253524944e-02f, -1.254715769e-02f, -1.255904354e-02f, -1.257090696e-02f, -1.258274795e-02f, -1.259456648e-02f, -1.260636253e-02f, -1.261813608e-02f,
--1.262988711e-02f, -1.264161562e-02f, -1.265332157e-02f, -1.266500494e-02f, -1.267666573e-02f, -1.268830390e-02f, -1.269991945e-02f, -1.271151235e-02f, -1.272308258e-02f, -1.273463013e-02f,
--1.274615497e-02f, -1.275765709e-02f, -1.276913648e-02f, -1.278059310e-02f, -1.279202695e-02f, -1.280343800e-02f, -1.281482623e-02f, -1.282619164e-02f, -1.283753419e-02f, -1.284885388e-02f,
--1.286015068e-02f, -1.287142458e-02f, -1.288267555e-02f, -1.289390358e-02f, -1.290510865e-02f, -1.291629075e-02f, -1.292744985e-02f, -1.293858593e-02f, -1.294969899e-02f, -1.296078900e-02f,
--1.297185594e-02f, -1.298289980e-02f, -1.299392056e-02f, -1.300491819e-02f, -1.301589269e-02f, -1.302684404e-02f, -1.303777222e-02f, -1.304867720e-02f, -1.305955898e-02f, -1.307041754e-02f,
--1.308125285e-02f, -1.309206490e-02f, -1.310285368e-02f, -1.311361917e-02f, -1.312436134e-02f, -1.313508019e-02f, -1.314577569e-02f, -1.315644784e-02f, -1.316709660e-02f, -1.317772196e-02f,
--1.318832392e-02f, -1.319890244e-02f, -1.320945752e-02f, -1.321998914e-02f, -1.323049727e-02f, -1.324098191e-02f, -1.325144304e-02f, -1.326188063e-02f, -1.327229468e-02f, -1.328268516e-02f,
--1.329305207e-02f, -1.330339538e-02f, -1.331371508e-02f, -1.332401114e-02f, -1.333428357e-02f, -1.334453233e-02f, -1.335475741e-02f, -1.336495880e-02f, -1.337513648e-02f, -1.338529043e-02f,
--1.339542064e-02f, -1.340552709e-02f, -1.341560977e-02f, -1.342566865e-02f, -1.343570373e-02f, -1.344571499e-02f, -1.345570241e-02f, -1.346566597e-02f, -1.347560567e-02f, -1.348552147e-02f,
--1.349541338e-02f, -1.350528137e-02f, -1.351512543e-02f, -1.352494554e-02f, -1.353474169e-02f, -1.354451385e-02f, -1.355426203e-02f, -1.356398619e-02f, -1.357368633e-02f, -1.358336243e-02f,
--1.359301447e-02f, -1.360264244e-02f, -1.361224633e-02f, -1.362182611e-02f, -1.363138178e-02f, -1.364091331e-02f, -1.365042070e-02f, -1.365990393e-02f, -1.366936298e-02f, -1.367879784e-02f,
--1.368820850e-02f, -1.369759493e-02f, -1.370695713e-02f, -1.371629508e-02f, -1.372560876e-02f, -1.373489817e-02f, -1.374416328e-02f, -1.375340408e-02f, -1.376262056e-02f, -1.377181270e-02f,
--1.378098049e-02f, -1.379012391e-02f, -1.379924296e-02f, -1.380833760e-02f, -1.381740784e-02f, -1.382645366e-02f, -1.383547504e-02f, -1.384447196e-02f, -1.385344442e-02f, -1.386239240e-02f,
--1.387131589e-02f, -1.388021487e-02f, -1.388908933e-02f, -1.389793926e-02f, -1.390676463e-02f, -1.391556544e-02f, -1.392434168e-02f, -1.393309332e-02f, -1.394182036e-02f, -1.395052279e-02f,
--1.395920058e-02f, -1.396785373e-02f, -1.397648222e-02f, -1.398508604e-02f, -1.399366518e-02f, -1.400221961e-02f, -1.401074934e-02f, -1.401925434e-02f, -1.402773460e-02f, -1.403619012e-02f,
--1.404462086e-02f, -1.405302684e-02f, -1.406140802e-02f, -1.406976440e-02f, -1.407809596e-02f, -1.408640269e-02f, -1.409468459e-02f, -1.410294163e-02f, -1.411117380e-02f, -1.411938109e-02f,
--1.412756349e-02f, -1.413572098e-02f, -1.414385355e-02f, -1.415196120e-02f, -1.416004390e-02f, -1.416810165e-02f, -1.417613443e-02f, -1.418414223e-02f, -1.419212503e-02f, -1.420008284e-02f,
--1.420801562e-02f, -1.421592338e-02f, -1.422380609e-02f, -1.423166375e-02f, -1.423949635e-02f, -1.424730387e-02f, -1.425508630e-02f, -1.426284363e-02f, -1.427057584e-02f, -1.427828293e-02f,
--1.428596488e-02f, -1.429362169e-02f, -1.430125333e-02f, -1.430885981e-02f, -1.431644110e-02f, -1.432399719e-02f, -1.433152808e-02f, -1.433903375e-02f, -1.434651419e-02f, -1.435396939e-02f,
--1.436139933e-02f, -1.436880402e-02f, -1.437618342e-02f, -1.438353755e-02f, -1.439086637e-02f, -1.439816989e-02f, -1.440544809e-02f, -1.441270095e-02f, -1.441992848e-02f, -1.442713065e-02f,
--1.443430746e-02f, -1.444145890e-02f, -1.444858495e-02f, -1.445568560e-02f, -1.446276085e-02f, -1.446981068e-02f, -1.447683508e-02f, -1.448383405e-02f, -1.449080756e-02f, -1.449775562e-02f,
--1.450467821e-02f, -1.451157531e-02f, -1.451844693e-02f, -1.452529304e-02f, -1.453211364e-02f, -1.453890872e-02f, -1.454567827e-02f, -1.455242228e-02f, -1.455914074e-02f, -1.456583363e-02f,
--1.457250095e-02f, -1.457914269e-02f, -1.458575884e-02f, -1.459234938e-02f, -1.459891432e-02f, -1.460545363e-02f, -1.461196731e-02f, -1.461845535e-02f, -1.462491774e-02f, -1.463135447e-02f,
--1.463776553e-02f, -1.464415091e-02f, -1.465051060e-02f, -1.465684459e-02f, -1.466315287e-02f, -1.466943544e-02f, -1.467569229e-02f, -1.468192339e-02f, -1.468812875e-02f, -1.469430836e-02f,
--1.470046221e-02f, -1.470659028e-02f, -1.471269257e-02f, -1.471876907e-02f, -1.472481978e-02f, -1.473084467e-02f, -1.473684375e-02f, -1.474281700e-02f, -1.474876442e-02f, -1.475468600e-02f,
--1.476058172e-02f, -1.476645158e-02f, -1.477229558e-02f, -1.477811369e-02f, -1.478390593e-02f, -1.478967226e-02f, -1.479541270e-02f, -1.480112722e-02f, -1.480681582e-02f, -1.481247850e-02f,
--1.481811524e-02f, -1.482372604e-02f, -1.482931088e-02f, -1.483486976e-02f, -1.484040268e-02f, -1.484590962e-02f, -1.485139058e-02f, -1.485684554e-02f, -1.486227450e-02f, -1.486767746e-02f,
--1.487305440e-02f, -1.487840531e-02f, -1.488373020e-02f, -1.488902905e-02f, -1.489430185e-02f, -1.489954860e-02f, -1.490476928e-02f, -1.490996390e-02f, -1.491513244e-02f, -1.492027490e-02f,
--1.492539127e-02f, -1.493048154e-02f, -1.493554570e-02f, -1.494058376e-02f, -1.494559569e-02f, -1.495058150e-02f, -1.495554117e-02f, -1.496047470e-02f, -1.496538209e-02f, -1.497026332e-02f,
--1.497511839e-02f, -1.497994729e-02f, -1.498475002e-02f, -1.498952657e-02f, -1.499427692e-02f, -1.499900109e-02f, -1.500369905e-02f, -1.500837080e-02f, -1.501301634e-02f, -1.501763566e-02f,
--1.502222875e-02f, -1.502679561e-02f, -1.503133623e-02f, -1.503585060e-02f, -1.504033872e-02f, -1.504480058e-02f, -1.504923618e-02f, -1.505364550e-02f, -1.505802855e-02f, -1.506238532e-02f,
--1.506671580e-02f, -1.507101998e-02f, -1.507529786e-02f, -1.507954944e-02f, -1.508377470e-02f, -1.508797365e-02f, -1.509214627e-02f, -1.509629257e-02f, -1.510041253e-02f, -1.510450615e-02f,
--1.510857342e-02f, -1.511261435e-02f, -1.511662892e-02f, -1.512061712e-02f, -1.512457896e-02f, -1.512851443e-02f, -1.513242352e-02f, -1.513630622e-02f, -1.514016254e-02f, -1.514399247e-02f,
--1.514779600e-02f, -1.515157312e-02f, -1.515532384e-02f, -1.515904815e-02f, -1.516274603e-02f, -1.516641750e-02f, -1.517006254e-02f, -1.517368115e-02f, -1.517727332e-02f, -1.518083905e-02f,
--1.518437833e-02f, -1.518789117e-02f, -1.519137755e-02f, -1.519483747e-02f, -1.519827092e-02f, -1.520167791e-02f, -1.520505843e-02f, -1.520841247e-02f, -1.521174004e-02f, -1.521504111e-02f,
--1.521831570e-02f, -1.522156380e-02f, -1.522478540e-02f, -1.522798050e-02f, -1.523114909e-02f, -1.523429118e-02f, -1.523740675e-02f, -1.524049581e-02f, -1.524355834e-02f, -1.524659436e-02f,
--1.524960384e-02f, -1.525258680e-02f, -1.525554322e-02f, -1.525847311e-02f, -1.526137645e-02f, -1.526425325e-02f, -1.526710350e-02f, -1.526992720e-02f, -1.527272434e-02f, -1.527549493e-02f,
--1.527823895e-02f, -1.528095641e-02f, -1.528364731e-02f, -1.528631163e-02f, -1.528894938e-02f, -1.529156056e-02f, -1.529414515e-02f, -1.529670316e-02f, -1.529923459e-02f, -1.530173943e-02f,
--1.530421768e-02f, -1.530666934e-02f, -1.530909440e-02f, -1.531149286e-02f, -1.531386473e-02f, -1.531620999e-02f, -1.531852864e-02f, -1.532082068e-02f, -1.532308612e-02f, -1.532532494e-02f,
--1.532753715e-02f, -1.532972274e-02f, -1.533188171e-02f, -1.533401406e-02f, -1.533611978e-02f, -1.533819888e-02f, -1.534025135e-02f, -1.534227720e-02f, -1.534427641e-02f, -1.534624898e-02f,
--1.534819493e-02f, -1.535011423e-02f, -1.535200690e-02f, -1.535387293e-02f, -1.535571231e-02f, -1.535752505e-02f, -1.535931115e-02f, -1.536107060e-02f, -1.536280340e-02f, -1.536450955e-02f,
--1.536618906e-02f, -1.536784191e-02f, -1.536946810e-02f, -1.537106764e-02f, -1.537264053e-02f, -1.537418676e-02f, -1.537570634e-02f, -1.537719925e-02f, -1.537866550e-02f, -1.538010510e-02f,
--1.538151803e-02f, -1.538290430e-02f, -1.538426391e-02f, -1.538559685e-02f, -1.538690313e-02f, -1.538818274e-02f, -1.538943569e-02f, -1.539066197e-02f, -1.539186158e-02f, -1.539303453e-02f,
--1.539418081e-02f, -1.539530042e-02f, -1.539639336e-02f, -1.539745964e-02f, -1.539849924e-02f, -1.539951218e-02f, -1.540049844e-02f, -1.540145804e-02f, -1.540239097e-02f, -1.540329722e-02f,
--1.540417681e-02f, -1.540502973e-02f, -1.540585598e-02f, -1.540665556e-02f, -1.540742847e-02f, -1.540817472e-02f, -1.540889429e-02f, -1.540958720e-02f, -1.541025344e-02f, -1.541089301e-02f,
--1.541150592e-02f, -1.541209216e-02f, -1.541265174e-02f, -1.541318465e-02f, -1.541369089e-02f, -1.541417048e-02f, -1.541462340e-02f, -1.541504966e-02f, -1.541544925e-02f, -1.541582219e-02f,
--1.541616847e-02f, -1.541648809e-02f, -1.541678106e-02f, -1.541704737e-02f, -1.541728702e-02f, -1.541750002e-02f, -1.541768637e-02f, -1.541784607e-02f, -1.541797911e-02f, -1.541808551e-02f,
--1.541816527e-02f, -1.541821837e-02f, -1.541824484e-02f, -1.541824466e-02f, -1.541821784e-02f, -1.541816438e-02f, -1.541808429e-02f, -1.541797755e-02f, -1.541784419e-02f, -1.541768419e-02f,
--1.541749756e-02f, -1.541728431e-02f, -1.541704443e-02f, -1.541677792e-02f, -1.541648479e-02f, -1.541616505e-02f, -1.541581868e-02f, -1.541544570e-02f, -1.541504610e-02f, -1.541461990e-02f,
--1.541416708e-02f, -1.541368766e-02f, -1.541318164e-02f, -1.541264901e-02f, -1.541208979e-02f, -1.541150396e-02f, -1.541089155e-02f, -1.541025254e-02f, -1.540958695e-02f, -1.540889477e-02f,
--1.540817600e-02f, -1.540743066e-02f, -1.540665874e-02f, -1.540586024e-02f, -1.540503518e-02f, -1.540418354e-02f, -1.540330534e-02f, -1.540240058e-02f, -1.540146926e-02f, -1.540051138e-02f,
--1.539952695e-02f, -1.539851598e-02f, -1.539747845e-02f, -1.539641439e-02f, -1.539532378e-02f, -1.539420664e-02f, -1.539306297e-02f, -1.539189277e-02f, -1.539069604e-02f, -1.538947279e-02f,
--1.538822303e-02f, -1.538694675e-02f, -1.538564396e-02f, -1.538431467e-02f, -1.538295888e-02f, -1.538157658e-02f, -1.538016779e-02f, -1.537873252e-02f, -1.537727075e-02f, -1.537578250e-02f,
--1.537426778e-02f, -1.537272658e-02f, -1.537115892e-02f, -1.536956478e-02f, -1.536794419e-02f, -1.536629714e-02f, -1.536462364e-02f, -1.536292369e-02f, -1.536119730e-02f, -1.535944447e-02f,
--1.535766521e-02f, -1.535585952e-02f, -1.535402740e-02f, -1.535216886e-02f, -1.535028391e-02f, -1.534837255e-02f, -1.534643478e-02f, -1.534447062e-02f, -1.534248006e-02f, -1.534046311e-02f,
--1.533841977e-02f, -1.533635005e-02f, -1.533425396e-02f, -1.533213150e-02f, -1.532998268e-02f, -1.532780749e-02f, -1.532560596e-02f, -1.532337807e-02f, -1.532112384e-02f, -1.531884328e-02f,
--1.531653638e-02f, -1.531420315e-02f, -1.531184361e-02f, -1.530945775e-02f, -1.530704558e-02f, -1.530460711e-02f, -1.530214234e-02f, -1.529965128e-02f, -1.529713393e-02f, -1.529459030e-02f,
--1.529202040e-02f, -1.528942423e-02f, -1.528680179e-02f, -1.528415311e-02f, -1.528147817e-02f, -1.527877699e-02f, -1.527604957e-02f, -1.527329592e-02f, -1.527051604e-02f, -1.526770995e-02f,
--1.526487764e-02f, -1.526201913e-02f, -1.525913442e-02f, -1.525622352e-02f, -1.525328643e-02f, -1.525032316e-02f, -1.524733372e-02f, -1.524431812e-02f, -1.524127635e-02f, -1.523820844e-02f,
--1.523511438e-02f, -1.523199418e-02f, -1.522884784e-02f, -1.522567539e-02f, -1.522247681e-02f, -1.521925213e-02f, -1.521600134e-02f, -1.521272446e-02f, -1.520942149e-02f, -1.520609244e-02f,
--1.520273731e-02f, -1.519935612e-02f, -1.519594887e-02f, -1.519251556e-02f, -1.518905621e-02f, -1.518557083e-02f, -1.518205941e-02f, -1.517852197e-02f, -1.517495852e-02f, -1.517136907e-02f,
--1.516775361e-02f, -1.516411217e-02f, -1.516044474e-02f, -1.515675133e-02f, -1.515303196e-02f, -1.514928663e-02f, -1.514551535e-02f, -1.514171813e-02f, -1.513789497e-02f, -1.513404588e-02f,
--1.513017088e-02f, -1.512626997e-02f, -1.512234315e-02f, -1.511839044e-02f, -1.511441185e-02f, -1.511040737e-02f, -1.510637703e-02f, -1.510232084e-02f, -1.509823878e-02f, -1.509413089e-02f,
--1.508999716e-02f, -1.508583761e-02f, -1.508165224e-02f, -1.507744107e-02f, -1.507320409e-02f, -1.506894133e-02f, -1.506465278e-02f, -1.506033846e-02f, -1.505599838e-02f, -1.505163254e-02f,
--1.504724096e-02f, -1.504282364e-02f, -1.503838060e-02f, -1.503391184e-02f, -1.502941737e-02f, -1.502489720e-02f, -1.502035134e-02f, -1.501577980e-02f, -1.501118259e-02f, -1.500655972e-02f,
--1.500191120e-02f, -1.499723703e-02f, -1.499253724e-02f, -1.498781182e-02f, -1.498306078e-02f, -1.497828415e-02f, -1.497348191e-02f, -1.496865410e-02f, -1.496380071e-02f, -1.495892176e-02f,
--1.495401725e-02f, -1.494908720e-02f, -1.494413161e-02f, -1.493915050e-02f, -1.493414388e-02f, -1.492911175e-02f, -1.492405413e-02f, -1.491897103e-02f, -1.491386245e-02f, -1.490872841e-02f,
--1.490356892e-02f, -1.489838399e-02f, -1.489317363e-02f, -1.488793784e-02f, -1.488267665e-02f, -1.487739005e-02f, -1.487207807e-02f, -1.486674071e-02f, -1.486137798e-02f, -1.485598989e-02f,
--1.485057646e-02f, -1.484513770e-02f, -1.483967361e-02f, -1.483418420e-02f, -1.482866950e-02f, -1.482312950e-02f, -1.481756422e-02f, -1.481197368e-02f, -1.480635787e-02f, -1.480071683e-02f,
--1.479505054e-02f, -1.478935903e-02f, -1.478364231e-02f, -1.477790039e-02f, -1.477213328e-02f, -1.476634099e-02f, -1.476052353e-02f, -1.475468092e-02f, -1.474881316e-02f, -1.474292027e-02f,
--1.473700227e-02f, -1.473105915e-02f, -1.472509094e-02f, -1.471909764e-02f, -1.471307927e-02f, -1.470703584e-02f, -1.470096735e-02f, -1.469487383e-02f, -1.468875529e-02f, -1.468261173e-02f,
--1.467644318e-02f, -1.467024963e-02f, -1.466403110e-02f, -1.465778762e-02f, -1.465151917e-02f, -1.464522579e-02f, -1.463890749e-02f, -1.463256426e-02f, -1.462619614e-02f, -1.461980312e-02f,
--1.461338523e-02f, -1.460694247e-02f, -1.460047486e-02f, -1.459398241e-02f, -1.458746513e-02f, -1.458092304e-02f, -1.457435614e-02f, -1.456776446e-02f, -1.456114800e-02f, -1.455450678e-02f,
--1.454784081e-02f, -1.454115010e-02f, -1.453443467e-02f, -1.452769453e-02f, -1.452092969e-02f, -1.451414016e-02f, -1.450732597e-02f, -1.450048711e-02f, -1.449362361e-02f, -1.448673548e-02f,
--1.447982273e-02f, -1.447288538e-02f, -1.446592343e-02f, -1.445893691e-02f, -1.445192582e-02f, -1.444489019e-02f, -1.443783001e-02f, -1.443074531e-02f, -1.442363611e-02f, -1.441650240e-02f,
--1.440934422e-02f, -1.440216156e-02f, -1.439495446e-02f, -1.438772291e-02f, -1.438046693e-02f, -1.437318654e-02f, -1.436588176e-02f, -1.435855259e-02f, -1.435119905e-02f, -1.434382115e-02f,
--1.433641891e-02f, -1.432899234e-02f, -1.432154146e-02f, -1.431406628e-02f, -1.430656682e-02f, -1.429904309e-02f, -1.429149510e-02f, -1.428392286e-02f, -1.427632641e-02f, -1.426870574e-02f,
--1.426106087e-02f, -1.425339182e-02f, -1.424569860e-02f, -1.423798122e-02f, -1.423023971e-02f, -1.422247408e-02f, -1.421468433e-02f, -1.420687049e-02f, -1.419903257e-02f, -1.419117059e-02f,
--1.418328456e-02f, -1.417537449e-02f, -1.416744041e-02f, -1.415948232e-02f, -1.415150024e-02f, -1.414349419e-02f, -1.413546418e-02f, -1.412741023e-02f, -1.411933235e-02f, -1.411123055e-02f,
--1.410310486e-02f, -1.409495529e-02f, -1.408678185e-02f, -1.407858457e-02f, -1.407036345e-02f, -1.406211850e-02f, -1.405384976e-02f, -1.404555723e-02f, -1.403724092e-02f, -1.402890086e-02f,
--1.402053706e-02f, -1.401214953e-02f, -1.400373830e-02f, -1.399530337e-02f, -1.398684477e-02f, -1.397836251e-02f, -1.396985660e-02f, -1.396132706e-02f, -1.395277391e-02f, -1.394419716e-02f,
--1.393559684e-02f, -1.392697295e-02f, -1.391832551e-02f, -1.390965455e-02f, -1.390096006e-02f, -1.389224208e-02f, -1.388350062e-02f, -1.387473569e-02f, -1.386594732e-02f, -1.385713551e-02f,
--1.384830029e-02f, -1.383944166e-02f, -1.383055966e-02f, -1.382165429e-02f, -1.381272557e-02f, -1.380377352e-02f, -1.379479815e-02f, -1.378579949e-02f, -1.377677755e-02f, -1.376773234e-02f,
--1.375866388e-02f, -1.374957220e-02f, -1.374045730e-02f, -1.373131920e-02f, -1.372215793e-02f, -1.371297350e-02f, -1.370376592e-02f, -1.369453521e-02f, -1.368528140e-02f, -1.367600449e-02f,
--1.366670451e-02f, -1.365738147e-02f, -1.364803539e-02f, -1.363866629e-02f, -1.362927418e-02f, -1.361985909e-02f, -1.361042102e-02f, -1.360096001e-02f, -1.359147606e-02f, -1.358196919e-02f,
--1.357243943e-02f, -1.356288678e-02f, -1.355331127e-02f, -1.354371292e-02f, -1.353409174e-02f, -1.352444775e-02f, -1.351478097e-02f, -1.350509142e-02f, -1.349537911e-02f, -1.348564406e-02f,
--1.347588630e-02f, -1.346610583e-02f, -1.345630269e-02f, -1.344647688e-02f, -1.343662842e-02f, -1.342675734e-02f, -1.341686365e-02f, -1.340694737e-02f, -1.339700851e-02f, -1.338704710e-02f,
--1.337706316e-02f, -1.336705670e-02f, -1.335702775e-02f, -1.334697631e-02f, -1.333690242e-02f, -1.332680608e-02f, -1.331668732e-02f, -1.330654616e-02f, -1.329638261e-02f, -1.328619670e-02f,
--1.327598844e-02f, -1.326575785e-02f, -1.325550495e-02f, -1.324522976e-02f, -1.323493230e-02f, -1.322461259e-02f, -1.321427065e-02f, -1.320390649e-02f, -1.319352014e-02f, -1.318311161e-02f,
--1.317268092e-02f, -1.316222811e-02f, -1.315175317e-02f, -1.314125613e-02f, -1.313073702e-02f, -1.312019585e-02f, -1.310963264e-02f, -1.309904741e-02f, -1.308844018e-02f, -1.307781097e-02f,
--1.306715979e-02f, -1.305648668e-02f, -1.304579165e-02f, -1.303507471e-02f, -1.302433590e-02f, -1.301357522e-02f, -1.300279270e-02f, -1.299198835e-02f, -1.298116221e-02f, -1.297031428e-02f,
--1.295944459e-02f, -1.294855316e-02f, -1.293764001e-02f, -1.292670515e-02f, -1.291574862e-02f, -1.290477042e-02f, -1.289377058e-02f, -1.288274912e-02f, -1.287170606e-02f, -1.286064142e-02f,
--1.284955522e-02f, -1.283844748e-02f, -1.282731823e-02f, -1.281616747e-02f, -1.280499524e-02f, -1.279380155e-02f, -1.278258642e-02f, -1.277134988e-02f, -1.276009194e-02f, -1.274881263e-02f,
--1.273751196e-02f, -1.272618997e-02f, -1.271484666e-02f, -1.270348205e-02f, -1.269209618e-02f, -1.268068906e-02f, -1.266926071e-02f, -1.265781115e-02f, -1.264634041e-02f, -1.263484850e-02f,
--1.262333545e-02f, -1.261180127e-02f, -1.260024600e-02f, -1.258866964e-02f, -1.257707222e-02f, -1.256545376e-02f, -1.255381429e-02f, -1.254215382e-02f, -1.253047238e-02f, -1.251876999e-02f,
--1.250704666e-02f, -1.249530243e-02f, -1.248353731e-02f, -1.247175132e-02f, -1.245994448e-02f, -1.244811683e-02f, -1.243626837e-02f, -1.242439913e-02f, -1.241250913e-02f, -1.240059840e-02f,
--1.238866695e-02f, -1.237671481e-02f, -1.236474200e-02f, -1.235274854e-02f, -1.234073445e-02f, -1.232869976e-02f, -1.231664449e-02f, -1.230456865e-02f, -1.229247228e-02f, -1.228035538e-02f,
--1.226821800e-02f, -1.225606014e-02f, -1.224388183e-02f, -1.223168310e-02f, -1.221946395e-02f, -1.220722443e-02f, -1.219496454e-02f, -1.218268432e-02f, -1.217038378e-02f, -1.215806294e-02f,
--1.214572184e-02f, -1.213336049e-02f, -1.212097891e-02f, -1.210857712e-02f, -1.209615516e-02f, -1.208371304e-02f, -1.207125078e-02f, -1.205876841e-02f, -1.204626595e-02f, -1.203374342e-02f,
--1.202120085e-02f, -1.200863825e-02f, -1.199605566e-02f, -1.198345309e-02f, -1.197083057e-02f, -1.195818812e-02f, -1.194552576e-02f, -1.193284352e-02f, -1.192014142e-02f, -1.190741948e-02f,
--1.189467773e-02f, -1.188191619e-02f, -1.186913487e-02f, -1.185633382e-02f, -1.184351304e-02f, -1.183067256e-02f, -1.181781241e-02f, -1.180493261e-02f, -1.179203318e-02f, -1.177911415e-02f,
--1.176617553e-02f, -1.175321736e-02f, -1.174023965e-02f, -1.172724243e-02f, -1.171422573e-02f, -1.170118956e-02f, -1.168813396e-02f, -1.167505894e-02f, -1.166196452e-02f, -1.164885074e-02f,
--1.163571762e-02f, -1.162256517e-02f, -1.160939343e-02f, -1.159620241e-02f, -1.158299215e-02f, -1.156976266e-02f, -1.155651397e-02f, -1.154324610e-02f, -1.152995908e-02f, -1.151665293e-02f,
--1.150332768e-02f, -1.148998335e-02f, -1.147661996e-02f, -1.146323753e-02f, -1.144983611e-02f, -1.143641569e-02f, -1.142297632e-02f, -1.140951802e-02f, -1.139604080e-02f, -1.138254470e-02f,
--1.136902973e-02f, -1.135549593e-02f, -1.134194332e-02f, -1.132837191e-02f, -1.131478175e-02f, -1.130117284e-02f, -1.128754523e-02f, -1.127389892e-02f, -1.126023394e-02f, -1.124655033e-02f,
--1.123284810e-02f, -1.121912728e-02f, -1.120538790e-02f, -1.119162997e-02f, -1.117785353e-02f, -1.116405859e-02f, -1.115024519e-02f, -1.113641335e-02f, -1.112256309e-02f, -1.110869444e-02f,
--1.109480742e-02f, -1.108090207e-02f, -1.106697839e-02f, -1.105303643e-02f, -1.103907620e-02f, -1.102509773e-02f, -1.101110104e-02f, -1.099708616e-02f, -1.098305312e-02f, -1.096900194e-02f,
--1.095493264e-02f, -1.094084526e-02f, -1.092673981e-02f, -1.091261633e-02f, -1.089847483e-02f, -1.088431534e-02f, -1.087013789e-02f, -1.085594251e-02f, -1.084172922e-02f, -1.082749804e-02f,
--1.081324900e-02f, -1.079898213e-02f, -1.078469746e-02f, -1.077039500e-02f, -1.075607478e-02f, -1.074173683e-02f, -1.072738118e-02f, -1.071300785e-02f, -1.069861687e-02f, -1.068420826e-02f,
--1.066978205e-02f, -1.065533826e-02f, -1.064087693e-02f, -1.062639807e-02f, -1.061190172e-02f, -1.059738789e-02f, -1.058285662e-02f, -1.056830793e-02f, -1.055374185e-02f, -1.053915840e-02f,
--1.052455761e-02f, -1.050993951e-02f, -1.049530412e-02f, -1.048065147e-02f, -1.046598159e-02f, -1.045129449e-02f, -1.043659022e-02f, -1.042186878e-02f, -1.040713022e-02f, -1.039237456e-02f,
--1.037760182e-02f, -1.036281203e-02f, -1.034800521e-02f, -1.033318140e-02f, -1.031834062e-02f, -1.030348290e-02f, -1.028860826e-02f, -1.027371673e-02f, -1.025880834e-02f, -1.024388311e-02f,
--1.022894107e-02f, -1.021398225e-02f, -1.019900667e-02f, -1.018401436e-02f, -1.016900535e-02f, -1.015397967e-02f, -1.013893733e-02f, -1.012387838e-02f, -1.010880283e-02f, -1.009371071e-02f,
--1.007860205e-02f, -1.006347688e-02f, -1.004833522e-02f, -1.003317711e-02f, -1.001800256e-02f, -1.000281161e-02f, -9.987604275e-03f, -9.972380594e-03f, -9.957140590e-03f, -9.941884290e-03f,
--9.926611722e-03f, -9.911322913e-03f, -9.896017890e-03f, -9.880696681e-03f, -9.865359313e-03f, -9.850005814e-03f, -9.834636211e-03f, -9.819250531e-03f, -9.803848803e-03f, -9.788431053e-03f,
--9.772997309e-03f, -9.757547599e-03f, -9.742081951e-03f, -9.726600392e-03f, -9.711102949e-03f, -9.695589651e-03f, -9.680060526e-03f, -9.664515600e-03f, -9.648954903e-03f, -9.633378461e-03f,
--9.617786302e-03f, -9.602178455e-03f, -9.586554947e-03f, -9.570915806e-03f, -9.555261061e-03f, -9.539590738e-03f, -9.523904867e-03f, -9.508203474e-03f, -9.492486589e-03f, -9.476754239e-03f,
--9.461006452e-03f, -9.445243257e-03f, -9.429464681e-03f, -9.413670752e-03f, -9.397861500e-03f, -9.382036952e-03f, -9.366197136e-03f, -9.350342081e-03f, -9.334471815e-03f, -9.318586366e-03f,
--9.302685763e-03f, -9.286770033e-03f, -9.270839206e-03f, -9.254893310e-03f, -9.238932372e-03f, -9.222956423e-03f, -9.206965489e-03f, -9.190959601e-03f, -9.174938785e-03f, -9.158903071e-03f,
--9.142852488e-03f, -9.126787063e-03f, -9.110706826e-03f, -9.094611805e-03f, -9.078502029e-03f, -9.062377527e-03f, -9.046238326e-03f, -9.030084457e-03f, -9.013915948e-03f, -8.997732828e-03f,
--8.981535125e-03f, -8.965322868e-03f, -8.949096086e-03f, -8.932854809e-03f, -8.916599064e-03f, -8.900328881e-03f, -8.884044289e-03f, -8.867745317e-03f, -8.851431994e-03f, -8.835104349e-03f,
--8.818762411e-03f, -8.802406208e-03f, -8.786035771e-03f, -8.769651128e-03f, -8.753252308e-03f, -8.736839341e-03f, -8.720412256e-03f, -8.703971082e-03f, -8.687515847e-03f, -8.671046582e-03f,
--8.654563316e-03f, -8.638066078e-03f, -8.621554898e-03f, -8.605029803e-03f, -8.588490825e-03f, -8.571937993e-03f, -8.555371335e-03f, -8.538790882e-03f, -8.522196662e-03f, -8.505588706e-03f,
--8.488967042e-03f, -8.472331700e-03f, -8.455682711e-03f, -8.439020102e-03f, -8.422343905e-03f, -8.405654148e-03f, -8.388950862e-03f, -8.372234075e-03f, -8.355503818e-03f, -8.338760120e-03f,
--8.322003010e-03f, -8.305232520e-03f, -8.288448678e-03f, -8.271651514e-03f, -8.254841059e-03f, -8.238017341e-03f, -8.221180391e-03f, -8.204330238e-03f, -8.187466913e-03f, -8.170590445e-03f,
--8.153700864e-03f, -8.136798201e-03f, -8.119882485e-03f, -8.102953746e-03f, -8.086012014e-03f, -8.069057320e-03f, -8.052089693e-03f, -8.035109163e-03f, -8.018115761e-03f, -8.001109516e-03f,
--7.984090459e-03f, -7.967058620e-03f, -7.950014029e-03f, -7.932956716e-03f, -7.915886712e-03f, -7.898804046e-03f, -7.881708749e-03f, -7.864600852e-03f, -7.847480384e-03f, -7.830347376e-03f,
--7.813201858e-03f, -7.796043860e-03f, -7.778873414e-03f, -7.761690549e-03f, -7.744495295e-03f, -7.727287684e-03f, -7.710067745e-03f, -7.692835510e-03f, -7.675591008e-03f, -7.658334270e-03f,
--7.641065326e-03f, -7.623784208e-03f, -7.606490946e-03f, -7.589185570e-03f, -7.571868111e-03f, -7.554538599e-03f, -7.537197066e-03f, -7.519843542e-03f, -7.502478057e-03f, -7.485100642e-03f,
--7.467711329e-03f, -7.450310147e-03f, -7.432897128e-03f, -7.415472302e-03f, -7.398035700e-03f, -7.380587353e-03f, -7.363127291e-03f, -7.345655547e-03f, -7.328172149e-03f, -7.310677130e-03f,
--7.293170520e-03f, -7.275652351e-03f, -7.258122652e-03f, -7.240581456e-03f, -7.223028793e-03f, -7.205464693e-03f, -7.187889189e-03f, -7.170302311e-03f, -7.152704090e-03f, -7.135094557e-03f,
--7.117473743e-03f, -7.099841680e-03f, -7.082198398e-03f, -7.064543929e-03f, -7.046878304e-03f, -7.029201554e-03f, -7.011513710e-03f, -6.993814803e-03f, -6.976104865e-03f, -6.958383927e-03f,
--6.940652020e-03f, -6.922909175e-03f, -6.905155424e-03f, -6.887390798e-03f, -6.869615329e-03f, -6.851829047e-03f, -6.834031984e-03f, -6.816224171e-03f, -6.798405641e-03f, -6.780576423e-03f,
--6.762736550e-03f, -6.744886053e-03f, -6.727024964e-03f, -6.709153314e-03f, -6.691271134e-03f, -6.673378457e-03f, -6.655475312e-03f, -6.637561733e-03f, -6.619637751e-03f, -6.601703397e-03f,
--6.583758703e-03f, -6.565803700e-03f, -6.547838420e-03f, -6.529862895e-03f, -6.511877156e-03f, -6.493881235e-03f, -6.475875164e-03f, -6.457858974e-03f, -6.439832698e-03f, -6.421796366e-03f,
--6.403750011e-03f, -6.385693664e-03f, -6.367627358e-03f, -6.349551123e-03f, -6.331464992e-03f, -6.313368997e-03f, -6.295263169e-03f, -6.277147540e-03f, -6.259022143e-03f, -6.240887008e-03f,
--6.222742169e-03f, -6.204587656e-03f, -6.186423502e-03f, -6.168249739e-03f, -6.150066398e-03f, -6.131873512e-03f, -6.113671113e-03f, -6.095459232e-03f, -6.077237902e-03f, -6.059007154e-03f,
--6.040767022e-03f, -6.022517536e-03f, -6.004258729e-03f, -5.985990633e-03f, -5.967713280e-03f, -5.949426702e-03f, -5.931130931e-03f, -5.912826000e-03f, -5.894511941e-03f, -5.876188785e-03f,
--5.857856565e-03f, -5.839515313e-03f, -5.821165062e-03f, -5.802805843e-03f, -5.784437690e-03f, -5.766060633e-03f, -5.747674705e-03f, -5.729279940e-03f, -5.710876368e-03f, -5.692464022e-03f,
--5.674042935e-03f, -5.655613139e-03f, -5.637174666e-03f, -5.618727549e-03f, -5.600271820e-03f, -5.581807511e-03f, -5.563334655e-03f, -5.544853284e-03f, -5.526363431e-03f, -5.507865127e-03f,
--5.489358407e-03f, -5.470843301e-03f, -5.452319842e-03f, -5.433788064e-03f, -5.415247998e-03f, -5.396699677e-03f, -5.378143133e-03f, -5.359578399e-03f, -5.341005508e-03f, -5.322424492e-03f,
--5.303835384e-03f, -5.285238216e-03f, -5.266633020e-03f, -5.248019831e-03f, -5.229398679e-03f, -5.210769598e-03f, -5.192132620e-03f, -5.173487779e-03f, -5.154835106e-03f, -5.136174635e-03f,
--5.117506397e-03f, -5.098830426e-03f, -5.080146755e-03f, -5.061455416e-03f, -5.042756442e-03f, -5.024049866e-03f, -5.005335720e-03f, -4.986614037e-03f, -4.967884851e-03f, -4.949148193e-03f,
--4.930404097e-03f, -4.911652595e-03f, -4.892893720e-03f, -4.874127506e-03f, -4.855353984e-03f, -4.836573188e-03f, -4.817785151e-03f, -4.798989906e-03f, -4.780187484e-03f, -4.761377920e-03f,
--4.742561247e-03f, -4.723737496e-03f, -4.704906702e-03f, -4.686068896e-03f, -4.667224113e-03f, -4.648372384e-03f, -4.629513744e-03f, -4.610648224e-03f, -4.591775858e-03f, -4.572896679e-03f,
--4.554010720e-03f, -4.535118014e-03f, -4.516218593e-03f, -4.497312492e-03f, -4.478399743e-03f, -4.459480379e-03f, -4.440554433e-03f, -4.421621938e-03f, -4.402682927e-03f, -4.383737434e-03f,
--4.364785491e-03f, -4.345827132e-03f, -4.326862390e-03f, -4.307891298e-03f, -4.288913889e-03f, -4.269930195e-03f, -4.250940252e-03f, -4.231944090e-03f, -4.212941745e-03f, -4.193933248e-03f,
--4.174918633e-03f, -4.155897934e-03f, -4.136871183e-03f, -4.117838414e-03f, -4.098799659e-03f, -4.079754953e-03f, -4.060704328e-03f, -4.041647818e-03f, -4.022585456e-03f, -4.003517275e-03f,
--3.984443308e-03f, -3.965363590e-03f, -3.946278152e-03f, -3.927187029e-03f, -3.908090253e-03f, -3.888987858e-03f, -3.869879878e-03f, -3.850766345e-03f, -3.831647293e-03f, -3.812522756e-03f,
--3.793392766e-03f, -3.774257357e-03f, -3.755116563e-03f, -3.735970416e-03f, -3.716818951e-03f, -3.697662200e-03f, -3.678500197e-03f, -3.659332975e-03f, -3.640160568e-03f, -3.620983010e-03f,
--3.601800333e-03f, -3.582612571e-03f, -3.563419758e-03f, -3.544221926e-03f, -3.525019110e-03f, -3.505811343e-03f, -3.486598658e-03f, -3.467381090e-03f, -3.448158670e-03f, -3.428931433e-03f,
--3.409699412e-03f, -3.390462641e-03f, -3.371221154e-03f, -3.351974983e-03f, -3.332724162e-03f, -3.313468726e-03f, -3.294208706e-03f, -3.274944138e-03f, -3.255675054e-03f, -3.236401488e-03f,
--3.217123473e-03f, -3.197841044e-03f, -3.178554233e-03f, -3.159263074e-03f, -3.139967601e-03f, -3.120667848e-03f, -3.101363847e-03f, -3.082055634e-03f, -3.062743240e-03f, -3.043426700e-03f,
--3.024106047e-03f, -3.004781316e-03f, -2.985452539e-03f, -2.966119750e-03f, -2.946782983e-03f, -2.927442271e-03f, -2.908097649e-03f, -2.888749149e-03f, -2.869396806e-03f, -2.850040653e-03f,
--2.830680723e-03f, -2.811317051e-03f, -2.791949670e-03f, -2.772578614e-03f, -2.753203916e-03f, -2.733825610e-03f, -2.714443729e-03f, -2.695058309e-03f, -2.675669381e-03f, -2.656276980e-03f,
--2.636881140e-03f, -2.617481893e-03f, -2.598079275e-03f, -2.578673318e-03f, -2.559264057e-03f, -2.539851525e-03f, -2.520435755e-03f, -2.501016782e-03f, -2.481594640e-03f, -2.462169361e-03f,
--2.442740980e-03f, -2.423309530e-03f, -2.403875045e-03f, -2.384437560e-03f, -2.364997107e-03f, -2.345553720e-03f, -2.326107434e-03f, -2.306658282e-03f, -2.287206297e-03f, -2.267751514e-03f,
--2.248293966e-03f, -2.228833687e-03f, -2.209370710e-03f, -2.189905070e-03f, -2.170436801e-03f, -2.150965936e-03f, -2.131492508e-03f, -2.112016552e-03f, -2.092538102e-03f, -2.073057191e-03f,
--2.053573853e-03f, -2.034088121e-03f, -2.014600030e-03f, -1.995109614e-03f, -1.975616906e-03f, -1.956121940e-03f, -1.936624750e-03f, -1.917125369e-03f, -1.897623832e-03f, -1.878120172e-03f,
--1.858614423e-03f, -1.839106619e-03f, -1.819596793e-03f, -1.800084980e-03f, -1.780571213e-03f, -1.761055527e-03f, -1.741537954e-03f, -1.722018529e-03f, -1.702497286e-03f, -1.682974258e-03f,
--1.663449480e-03f, -1.643922984e-03f, -1.624394805e-03f, -1.604864977e-03f, -1.585333534e-03f, -1.565800509e-03f, -1.546265936e-03f, -1.526729849e-03f, -1.507192282e-03f, -1.487653268e-03f,
--1.468112842e-03f, -1.448571038e-03f, -1.429027888e-03f, -1.409483428e-03f, -1.389937690e-03f, -1.370390710e-03f, -1.350842519e-03f, -1.331293153e-03f, -1.311742645e-03f, -1.292191030e-03f,
--1.272638339e-03f, -1.253084609e-03f, -1.233529872e-03f, -1.213974163e-03f, -1.194417514e-03f, -1.174859961e-03f, -1.155301537e-03f, -1.135742275e-03f, -1.116182209e-03f, -1.096621374e-03f,
--1.077059803e-03f, -1.057497530e-03f, -1.037934589e-03f, -1.018371014e-03f, -9.988068377e-04f, -9.792420950e-04f, -9.596768193e-04f, -9.401110446e-04f, -9.205448046e-04f, -9.009781332e-04f,
--8.814110642e-04f, -8.618436313e-04f, -8.422758685e-04f, -8.227078096e-04f, -8.031394883e-04f, -7.835709384e-04f, -7.640021938e-04f, -7.444332883e-04f, -7.248642557e-04f, -7.052951298e-04f,
--6.857259444e-04f, -6.661567332e-04f, -6.465875302e-04f, -6.270183691e-04f, -6.074492836e-04f, -5.878803076e-04f, -5.683114749e-04f, -5.487428193e-04f, -5.291743745e-04f, -5.096061743e-04f,
--4.900382526e-04f, -4.704706430e-04f, -4.509033794e-04f, -4.313364956e-04f, -4.117700252e-04f, -3.922040022e-04f, -3.726384602e-04f, -3.530734330e-04f, -3.335089543e-04f, -3.139450580e-04f,
--2.943817778e-04f, -2.748191474e-04f, -2.552572006e-04f, -2.356959712e-04f, -2.161354928e-04f, -1.965757991e-04f, -1.770169241e-04f, -1.574589013e-04f, -1.379017645e-04f, -1.183455474e-04f,
--9.879028381e-05f, -7.923600735e-05f, -5.968275176e-05f, -4.013055077e-05f, -2.057943806e-05f, -1.029447347e-06f, 1.851938767e-05f, 3.806703331e-05f, 5.761345586e-05f, 7.715862166e-05f,
-9.670249700e-05f, 1.162450482e-04f, 1.357862417e-04f, 1.553260436e-04f, 1.748644205e-04f, 1.944013385e-04f, 2.139367641e-04f, 2.334706636e-04f, 2.530030034e-04f, 2.725337498e-04f,
-2.920628691e-04f, 3.115903278e-04f, 3.311160922e-04f, 3.506401288e-04f, 3.701624038e-04f, 3.896828836e-04f, 4.092015347e-04f, 4.287183235e-04f, 4.482332163e-04f, 4.677461797e-04f,
-4.872571798e-04f, 5.067661833e-04f, 5.262731565e-04f, 5.457780659e-04f, 5.652808778e-04f, 5.847815588e-04f, 6.042800753e-04f, 6.237763937e-04f, 6.432704804e-04f, 6.627623021e-04f,
-6.822518250e-04f, 7.017390157e-04f, 7.212238408e-04f, 7.407062666e-04f, 7.601862596e-04f, 7.796637864e-04f, 7.991388135e-04f, 8.186113074e-04f, 8.380812345e-04f, 8.575485615e-04f,
-8.770132548e-04f, 8.964752811e-04f, 9.159346067e-04f, 9.353911984e-04f, 9.548450226e-04f, 9.742960459e-04f, 9.937442350e-04f, 1.013189556e-03f, 1.032631976e-03f, 1.052071462e-03f,
-1.071507980e-03f, 1.090941496e-03f, 1.110371977e-03f, 1.129799391e-03f, 1.149223703e-03f, 1.168644880e-03f, 1.188062889e-03f, 1.207477696e-03f, 1.226889269e-03f, 1.246297573e-03f,
-1.265702575e-03f, 1.285104243e-03f, 1.304502543e-03f, 1.323897441e-03f, 1.343288904e-03f, 1.362676899e-03f, 1.382061393e-03f, 1.401442352e-03f, 1.420819744e-03f, 1.440193534e-03f,
-1.459563690e-03f, 1.478930178e-03f, 1.498292965e-03f, 1.517652019e-03f, 1.537007305e-03f, 1.556358790e-03f, 1.575706442e-03f, 1.595050227e-03f, 1.614390111e-03f, 1.633726063e-03f,
-1.653058048e-03f, 1.672386033e-03f, 1.691709986e-03f, 1.711029873e-03f, 1.730345661e-03f, 1.749657317e-03f, 1.768964808e-03f, 1.788268101e-03f, 1.807567162e-03f, 1.826861958e-03f,
-1.846152458e-03f, 1.865438626e-03f, 1.884720431e-03f, 1.903997839e-03f, 1.923270818e-03f, 1.942539333e-03f, 1.961803353e-03f, 1.981062844e-03f, 2.000317774e-03f, 2.019568108e-03f,
-2.038813815e-03f, 2.058054861e-03f, 2.077291214e-03f, 2.096522840e-03f, 2.115749706e-03f, 2.134971780e-03f, 2.154189029e-03f, 2.173401419e-03f, 2.192608918e-03f, 2.211811494e-03f,
-2.231009112e-03f, 2.250201740e-03f, 2.269389346e-03f, 2.288571896e-03f, 2.307749358e-03f, 2.326921699e-03f, 2.346088886e-03f, 2.365250886e-03f, 2.384407666e-03f, 2.403559195e-03f,
-2.422705438e-03f, 2.441846363e-03f, 2.460981938e-03f, 2.480112130e-03f, 2.499236905e-03f, 2.518356232e-03f, 2.537470077e-03f, 2.556578408e-03f, 2.575681192e-03f, 2.594778397e-03f,
-2.613869990e-03f, 2.632955938e-03f, 2.652036209e-03f, 2.671110769e-03f, 2.690179587e-03f, 2.709242630e-03f, 2.728299865e-03f, 2.747351259e-03f, 2.766396781e-03f, 2.785436397e-03f,
-2.804470076e-03f, 2.823497783e-03f, 2.842519488e-03f, 2.861535157e-03f, 2.880544758e-03f, 2.899548259e-03f, 2.918545626e-03f, 2.937536829e-03f, 2.956521833e-03f, 2.975500607e-03f,
-2.994473119e-03f, 3.013439335e-03f, 3.032399224e-03f, 3.051352753e-03f, 3.070299890e-03f, 3.089240603e-03f, 3.108174858e-03f, 3.127102625e-03f, 3.146023870e-03f, 3.164938561e-03f,
-3.183846666e-03f, 3.202748153e-03f, 3.221642989e-03f, 3.240531142e-03f, 3.259412581e-03f, 3.278287272e-03f, 3.297155183e-03f, 3.316016283e-03f, 3.334870539e-03f, 3.353717919e-03f,
-3.372558392e-03f, 3.391391923e-03f, 3.410218483e-03f, 3.429038038e-03f, 3.447850556e-03f, 3.466656006e-03f, 3.485454355e-03f, 3.504245571e-03f, 3.523029622e-03f, 3.541806477e-03f,
-3.560576103e-03f, 3.579338468e-03f, 3.598093540e-03f, 3.616841288e-03f, 3.635581679e-03f, 3.654314681e-03f, 3.673040263e-03f, 3.691758392e-03f, 3.710469037e-03f, 3.729172166e-03f,
-3.747867747e-03f, 3.766555748e-03f, 3.785236137e-03f, 3.803908882e-03f, 3.822573953e-03f, 3.841231316e-03f, 3.859880940e-03f, 3.878522794e-03f, 3.897156845e-03f, 3.915783062e-03f,
-3.934401413e-03f, 3.953011867e-03f, 3.971614392e-03f, 3.990208956e-03f, 4.008795527e-03f, 4.027374074e-03f, 4.045944566e-03f, 4.064506970e-03f, 4.083061255e-03f, 4.101607390e-03f,
-4.120145343e-03f, 4.138675082e-03f, 4.157196576e-03f, 4.175709794e-03f, 4.194214703e-03f, 4.212711273e-03f, 4.231199473e-03f, 4.249679269e-03f, 4.268150632e-03f, 4.286613530e-03f,
-4.305067931e-03f, 4.323513804e-03f, 4.341951117e-03f, 4.360379840e-03f, 4.378799941e-03f, 4.397211389e-03f, 4.415614152e-03f, 4.434008199e-03f, 4.452393499e-03f, 4.470770020e-03f,
-4.489137732e-03f, 4.507496604e-03f, 4.525846603e-03f, 4.544187699e-03f, 4.562519861e-03f, 4.580843057e-03f, 4.599157257e-03f, 4.617462429e-03f, 4.635758543e-03f, 4.654045567e-03f,
-4.672323469e-03f, 4.690592220e-03f, 4.708851788e-03f, 4.727102143e-03f, 4.745343252e-03f, 4.763575086e-03f, 4.781797612e-03f, 4.800010802e-03f, 4.818214622e-03f, 4.836409043e-03f,
-4.854594034e-03f, 4.872769564e-03f, 4.890935601e-03f, 4.909092116e-03f, 4.927239077e-03f, 4.945376454e-03f, 4.963504215e-03f, 4.981622331e-03f, 4.999730770e-03f, 5.017829502e-03f,
-5.035918495e-03f, 5.053997720e-03f, 5.072067146e-03f, 5.090126741e-03f, 5.108176476e-03f, 5.126216320e-03f, 5.144246242e-03f, 5.162266212e-03f, 5.180276199e-03f, 5.198276173e-03f,
-5.216266103e-03f, 5.234245958e-03f, 5.252215709e-03f, 5.270175325e-03f, 5.288124774e-03f, 5.306064028e-03f, 5.323993056e-03f, 5.341911826e-03f, 5.359820310e-03f, 5.377718476e-03f,
-5.395606294e-03f, 5.413483734e-03f, 5.431350766e-03f, 5.449207360e-03f, 5.467053484e-03f, 5.484889110e-03f, 5.502714206e-03f, 5.520528743e-03f, 5.538332691e-03f, 5.556126019e-03f,
-5.573908697e-03f, 5.591680696e-03f, 5.609441985e-03f, 5.627192534e-03f, 5.644932313e-03f, 5.662661292e-03f, 5.680379441e-03f, 5.698086730e-03f, 5.715783129e-03f, 5.733468609e-03f,
-5.751143139e-03f, 5.768806690e-03f, 5.786459231e-03f, 5.804100733e-03f, 5.821731166e-03f, 5.839350500e-03f, 5.856958705e-03f, 5.874555752e-03f, 5.892141611e-03f, 5.909716253e-03f,
-5.927279647e-03f, 5.944831763e-03f, 5.962372573e-03f, 5.979902046e-03f, 5.997420154e-03f, 6.014926865e-03f, 6.032422152e-03f, 6.049905984e-03f, 6.067378331e-03f, 6.084839165e-03f,
-6.102288455e-03f, 6.119726173e-03f, 6.137152289e-03f, 6.154566773e-03f, 6.171969596e-03f, 6.189360729e-03f, 6.206740142e-03f, 6.224107806e-03f, 6.241463692e-03f, 6.258807771e-03f,
-6.276140012e-03f, 6.293460388e-03f, 6.310768868e-03f, 6.328065424e-03f, 6.345350026e-03f, 6.362622645e-03f, 6.379883253e-03f, 6.397131819e-03f, 6.414368315e-03f, 6.431592713e-03f,
-6.448804982e-03f, 6.466005093e-03f, 6.483193019e-03f, 6.500368730e-03f, 6.517532196e-03f, 6.534683389e-03f, 6.551822281e-03f, 6.568948841e-03f, 6.586063043e-03f, 6.603164855e-03f,
-6.620254250e-03f, 6.637331199e-03f, 6.654395674e-03f, 6.671447645e-03f, 6.688487083e-03f, 6.705513961e-03f, 6.722528249e-03f, 6.739529918e-03f, 6.756518941e-03f, 6.773495288e-03f,
-6.790458931e-03f, 6.807409842e-03f, 6.824347991e-03f, 6.841273351e-03f, 6.858185893e-03f, 6.875085588e-03f, 6.891972408e-03f, 6.908846324e-03f, 6.925707309e-03f, 6.942555334e-03f,
-6.959390370e-03f, 6.976212389e-03f, 6.993021364e-03f, 7.009817265e-03f, 7.026600064e-03f, 7.043369733e-03f, 7.060126245e-03f, 7.076869570e-03f, 7.093599681e-03f, 7.110316550e-03f,
-7.127020148e-03f, 7.143710448e-03f, 7.160387421e-03f, 7.177051039e-03f, 7.193701275e-03f, 7.210338100e-03f, 7.226961486e-03f, 7.243571406e-03f, 7.260167832e-03f, 7.276750735e-03f,
-7.293320089e-03f, 7.309875864e-03f, 7.326418034e-03f, 7.342946571e-03f, 7.359461446e-03f, 7.375962632e-03f, 7.392450102e-03f, 7.408923827e-03f, 7.425383781e-03f, 7.441829935e-03f,
-7.458262262e-03f, 7.474680734e-03f, 7.491085324e-03f, 7.507476004e-03f, 7.523852747e-03f, 7.540215525e-03f, 7.556564311e-03f, 7.572899078e-03f, 7.589219797e-03f, 7.605526442e-03f,
-7.621818986e-03f, 7.638097401e-03f, 7.654361659e-03f, 7.670611734e-03f, 7.686847599e-03f, 7.703069225e-03f, 7.719276586e-03f, 7.735469655e-03f, 7.751648405e-03f, 7.767812808e-03f,
-7.783962838e-03f, 7.800098467e-03f, 7.816219669e-03f, 7.832326416e-03f, 7.848418681e-03f, 7.864496438e-03f, 7.880559659e-03f, 7.896608318e-03f, 7.912642388e-03f, 7.928661842e-03f,
-7.944666653e-03f, 7.960656794e-03f, 7.976632239e-03f, 7.992592962e-03f, 8.008538934e-03f, 8.024470130e-03f, 8.040386522e-03f, 8.056288085e-03f, 8.072174792e-03f, 8.088046616e-03f,
-8.103903531e-03f, 8.119745509e-03f, 8.135572525e-03f, 8.151384553e-03f, 8.167181565e-03f, 8.182963535e-03f, 8.198730437e-03f, 8.214482245e-03f, 8.230218933e-03f, 8.245940473e-03f,
-8.261646840e-03f, 8.277338007e-03f, 8.293013949e-03f, 8.308674639e-03f, 8.324320051e-03f, 8.339950159e-03f, 8.355564936e-03f, 8.371164358e-03f, 8.386748396e-03f, 8.402317027e-03f,
-8.417870223e-03f, 8.433407959e-03f, 8.448930209e-03f, 8.464436946e-03f, 8.479928146e-03f, 8.495403782e-03f, 8.510863828e-03f, 8.526308259e-03f, 8.541737048e-03f, 8.557150171e-03f,
-8.572547601e-03f, 8.587929313e-03f, 8.603295281e-03f, 8.618645479e-03f, 8.633979882e-03f, 8.649298465e-03f, 8.664601201e-03f, 8.679888066e-03f, 8.695159033e-03f, 8.710414078e-03f,
-8.725653175e-03f, 8.740876299e-03f, 8.756083424e-03f, 8.771274525e-03f, 8.786449576e-03f, 8.801608553e-03f, 8.816751430e-03f, 8.831878182e-03f, 8.846988783e-03f, 8.862083209e-03f,
-8.877161435e-03f, 8.892223435e-03f, 8.907269185e-03f, 8.922298659e-03f, 8.937311832e-03f, 8.952308679e-03f, 8.967289176e-03f, 8.982253298e-03f, 8.997201019e-03f, 9.012132314e-03f,
-9.027047160e-03f, 9.041945531e-03f, 9.056827402e-03f, 9.071692749e-03f, 9.086541547e-03f, 9.101373771e-03f, 9.116189397e-03f, 9.130988399e-03f, 9.145770754e-03f, 9.160536438e-03f,
-9.175285424e-03f, 9.190017689e-03f, 9.204733209e-03f, 9.219431959e-03f, 9.234113914e-03f, 9.248779051e-03f, 9.263427344e-03f, 9.278058770e-03f, 9.292673304e-03f, 9.307270922e-03f,
-9.321851601e-03f, 9.336415314e-03f, 9.350962040e-03f, 9.365491752e-03f, 9.380004428e-03f, 9.394500043e-03f, 9.408978573e-03f, 9.423439995e-03f, 9.437884283e-03f, 9.452311415e-03f,
-9.466721366e-03f, 9.481114113e-03f, 9.495489631e-03f, 9.509847897e-03f, 9.524188887e-03f, 9.538512577e-03f, 9.552818944e-03f, 9.567107964e-03f, 9.581379613e-03f, 9.595633867e-03f,
-9.609870704e-03f, 9.624090099e-03f, 9.638292029e-03f, 9.652476470e-03f, 9.666643399e-03f, 9.680792792e-03f, 9.694924627e-03f, 9.709038879e-03f, 9.723135526e-03f, 9.737214543e-03f,
-9.751275909e-03f, 9.765319599e-03f, 9.779345590e-03f, 9.793353859e-03f, 9.807344383e-03f, 9.821317139e-03f, 9.835272104e-03f, 9.849209254e-03f, 9.863128567e-03f, 9.877030020e-03f,
-9.890913590e-03f, 9.904779253e-03f, 9.918626987e-03f, 9.932456769e-03f, 9.946268577e-03f, 9.960062386e-03f, 9.973838176e-03f, 9.987595922e-03f, 1.000133560e-02f, 1.001505719e-02f,
-1.002876068e-02f, 1.004244602e-02f, 1.005611321e-02f, 1.006976223e-02f, 1.008339304e-02f, 1.009700562e-02f, 1.011059996e-02f, 1.012417604e-02f, 1.013773382e-02f, 1.015127328e-02f,
-1.016479442e-02f, 1.017829719e-02f, 1.019178158e-02f, 1.020524757e-02f, 1.021869514e-02f, 1.023212426e-02f, 1.024553491e-02f, 1.025892707e-02f, 1.027230072e-02f, 1.028565583e-02f,
-1.029899239e-02f, 1.031231037e-02f, 1.032560974e-02f, 1.033889049e-02f, 1.035215260e-02f, 1.036539605e-02f, 1.037862080e-02f, 1.039182684e-02f, 1.040501416e-02f, 1.041818272e-02f,
-1.043133250e-02f, 1.044446349e-02f, 1.045757566e-02f, 1.047066899e-02f, 1.048374346e-02f, 1.049679905e-02f, 1.050983573e-02f, 1.052285349e-02f, 1.053585230e-02f, 1.054883214e-02f,
-1.056179299e-02f, 1.057473484e-02f, 1.058765765e-02f, 1.060056140e-02f, 1.061344609e-02f, 1.062631168e-02f, 1.063915815e-02f, 1.065198548e-02f, 1.066479365e-02f, 1.067758265e-02f,
-1.069035244e-02f, 1.070310302e-02f, 1.071583435e-02f, 1.072854642e-02f, 1.074123920e-02f, 1.075391268e-02f, 1.076656683e-02f, 1.077920164e-02f, 1.079181708e-02f, 1.080441313e-02f,
-1.081698977e-02f, 1.082954699e-02f, 1.084208475e-02f, 1.085460305e-02f, 1.086710185e-02f, 1.087958115e-02f, 1.089204091e-02f, 1.090448112e-02f, 1.091690176e-02f, 1.092930281e-02f,
-1.094168424e-02f, 1.095404604e-02f, 1.096638819e-02f, 1.097871066e-02f, 1.099101345e-02f, 1.100329651e-02f, 1.101555985e-02f, 1.102780343e-02f, 1.104002724e-02f, 1.105223125e-02f,
-1.106441546e-02f, 1.107657982e-02f, 1.108872434e-02f, 1.110084898e-02f, 1.111295373e-02f, 1.112503857e-02f, 1.113710347e-02f, 1.114914843e-02f, 1.116117341e-02f, 1.117317840e-02f,
-1.118516338e-02f, 1.119712833e-02f, 1.120907323e-02f, 1.122099807e-02f, 1.123290281e-02f, 1.124478745e-02f, 1.125665196e-02f, 1.126849632e-02f, 1.128032052e-02f, 1.129212453e-02f,
-1.130390833e-02f, 1.131567192e-02f, 1.132741526e-02f, 1.133913834e-02f, 1.135084114e-02f, 1.136252364e-02f, 1.137418582e-02f, 1.138582767e-02f, 1.139744915e-02f, 1.140905027e-02f,
-1.142063098e-02f, 1.143219129e-02f, 1.144373116e-02f, 1.145525059e-02f, 1.146674954e-02f, 1.147822801e-02f, 1.148968596e-02f, 1.150112340e-02f, 1.151254029e-02f, 1.152393662e-02f,
-1.153531237e-02f, 1.154666751e-02f, 1.155800205e-02f, 1.156931594e-02f, 1.158060918e-02f, 1.159188175e-02f, 1.160313363e-02f, 1.161436480e-02f, 1.162557524e-02f, 1.163676494e-02f,
-1.164793387e-02f, 1.165908202e-02f, 1.167020938e-02f, 1.168131591e-02f, 1.169240161e-02f, 1.170346646e-02f, 1.171451043e-02f, 1.172553352e-02f, 1.173653570e-02f, 1.174751696e-02f,
-1.175847727e-02f, 1.176941662e-02f, 1.178033499e-02f, 1.179123237e-02f, 1.180210874e-02f, 1.181296408e-02f, 1.182379836e-02f, 1.183461159e-02f, 1.184540372e-02f, 1.185617476e-02f,
-1.186692468e-02f, 1.187765347e-02f, 1.188836110e-02f, 1.189904757e-02f, 1.190971285e-02f, 1.192035692e-02f, 1.193097977e-02f, 1.194158138e-02f, 1.195216174e-02f, 1.196272083e-02f,
-1.197325863e-02f, 1.198377512e-02f, 1.199427028e-02f, 1.200474411e-02f, 1.201519658e-02f, 1.202562768e-02f, 1.203603738e-02f, 1.204642568e-02f, 1.205679256e-02f, 1.206713799e-02f,
-1.207746197e-02f, 1.208776447e-02f, 1.209804549e-02f, 1.210830499e-02f, 1.211854298e-02f, 1.212875942e-02f, 1.213895431e-02f, 1.214912763e-02f, 1.215927935e-02f, 1.216940948e-02f,
-1.217951798e-02f, 1.218960484e-02f, 1.219967005e-02f, 1.220971359e-02f, 1.221973545e-02f, 1.222973560e-02f, 1.223971403e-02f, 1.224967074e-02f, 1.225960569e-02f, 1.226951887e-02f,
-1.227941028e-02f, 1.228927989e-02f, 1.229912768e-02f, 1.230895365e-02f, 1.231875777e-02f, 1.232854003e-02f, 1.233830042e-02f, 1.234803892e-02f, 1.235775551e-02f, 1.236745017e-02f,
-1.237712290e-02f, 1.238677368e-02f, 1.239640248e-02f, 1.240600931e-02f, 1.241559413e-02f, 1.242515694e-02f, 1.243469772e-02f, 1.244421646e-02f, 1.245371313e-02f, 1.246318774e-02f,
-1.247264025e-02f, 1.248207065e-02f, 1.249147894e-02f, 1.250086509e-02f, 1.251022909e-02f, 1.251957092e-02f, 1.252889058e-02f, 1.253818804e-02f, 1.254746329e-02f, 1.255671632e-02f,
-1.256594711e-02f, 1.257515565e-02f, 1.258434191e-02f, 1.259350590e-02f, 1.260264759e-02f, 1.261176696e-02f, 1.262086402e-02f, 1.262993873e-02f, 1.263899108e-02f, 1.264802107e-02f,
-1.265702867e-02f, 1.266601388e-02f, 1.267497668e-02f, 1.268391704e-02f, 1.269283497e-02f, 1.270173045e-02f, 1.271060345e-02f, 1.271945398e-02f, 1.272828201e-02f, 1.273708752e-02f,
-1.274587052e-02f, 1.275463097e-02f, 1.276336888e-02f, 1.277208422e-02f, 1.278077698e-02f, 1.278944715e-02f, 1.279809471e-02f, 1.280671965e-02f, 1.281532195e-02f, 1.282390161e-02f,
-1.283245861e-02f, 1.284099294e-02f, 1.284950458e-02f, 1.285799351e-02f, 1.286645973e-02f, 1.287490323e-02f, 1.288332398e-02f, 1.289172198e-02f, 1.290009722e-02f, 1.290844967e-02f,
-1.291677933e-02f, 1.292508618e-02f, 1.293337021e-02f, 1.294163141e-02f, 1.294986977e-02f, 1.295808527e-02f, 1.296627789e-02f, 1.297444764e-02f, 1.298259448e-02f, 1.299071842e-02f,
-1.299881943e-02f, 1.300689751e-02f, 1.301495264e-02f, 1.302298481e-02f, 1.303099401e-02f, 1.303898023e-02f, 1.304694345e-02f, 1.305488365e-02f, 1.306280084e-02f, 1.307069499e-02f,
-1.307856609e-02f, 1.308641414e-02f, 1.309423911e-02f, 1.310204100e-02f, 1.310981980e-02f, 1.311757548e-02f, 1.312530805e-02f, 1.313301749e-02f, 1.314070378e-02f, 1.314836692e-02f,
-1.315600689e-02f, 1.316362368e-02f, 1.317121728e-02f, 1.317878767e-02f, 1.318633485e-02f, 1.319385881e-02f, 1.320135953e-02f, 1.320883700e-02f, 1.321629120e-02f, 1.322372214e-02f,
-1.323112979e-02f, 1.323851415e-02f, 1.324587519e-02f, 1.325321293e-02f, 1.326052733e-02f, 1.326781839e-02f, 1.327508610e-02f, 1.328233044e-02f, 1.328955141e-02f, 1.329674900e-02f,
-1.330392319e-02f, 1.331107397e-02f, 1.331820133e-02f, 1.332530527e-02f, 1.333238576e-02f, 1.333944281e-02f, 1.334647639e-02f, 1.335348650e-02f, 1.336047312e-02f, 1.336743625e-02f,
-1.337437588e-02f, 1.338129199e-02f, 1.338818457e-02f, 1.339505362e-02f, 1.340189912e-02f, 1.340872107e-02f, 1.341551944e-02f, 1.342229424e-02f, 1.342904545e-02f, 1.343577306e-02f,
-1.344247706e-02f, 1.344915744e-02f, 1.345581420e-02f, 1.346244731e-02f, 1.346905677e-02f, 1.347564258e-02f, 1.348220471e-02f, 1.348874317e-02f, 1.349525793e-02f, 1.350174900e-02f,
-1.350821636e-02f, 1.351465999e-02f, 1.352107990e-02f, 1.352747607e-02f, 1.353384850e-02f, 1.354019716e-02f, 1.354652206e-02f, 1.355282318e-02f, 1.355910052e-02f, 1.356535406e-02f,
-1.357158379e-02f, 1.357778971e-02f, 1.358397181e-02f, 1.359013007e-02f, 1.359626449e-02f, 1.360237506e-02f, 1.360846177e-02f, 1.361452461e-02f, 1.362056357e-02f, 1.362657864e-02f,
-1.363256982e-02f, 1.363853709e-02f, 1.364448044e-02f, 1.365039987e-02f, 1.365629537e-02f, 1.366216693e-02f, 1.366801454e-02f, 1.367383819e-02f, 1.367963787e-02f, 1.368541358e-02f,
-1.369116530e-02f, 1.369689302e-02f, 1.370259675e-02f, 1.370827647e-02f, 1.371393217e-02f, 1.371956384e-02f, 1.372517147e-02f, 1.373075507e-02f, 1.373631461e-02f, 1.374185009e-02f,
-1.374736151e-02f, 1.375284884e-02f, 1.375831210e-02f, 1.376375126e-02f, 1.376916632e-02f, 1.377455727e-02f, 1.377992411e-02f, 1.378526682e-02f, 1.379058541e-02f, 1.379587985e-02f,
-1.380115015e-02f, 1.380639629e-02f, 1.381161826e-02f, 1.381681607e-02f, 1.382198970e-02f, 1.382713915e-02f, 1.383226440e-02f, 1.383736545e-02f, 1.384244230e-02f, 1.384749493e-02f,
-1.385252334e-02f, 1.385752752e-02f, 1.386250746e-02f, 1.386746316e-02f, 1.387239460e-02f, 1.387730179e-02f, 1.388218472e-02f, 1.388704337e-02f, 1.389187774e-02f, 1.389668783e-02f,
-1.390147362e-02f, 1.390623511e-02f, 1.391097230e-02f, 1.391568518e-02f, 1.392037373e-02f, 1.392503796e-02f, 1.392967785e-02f, 1.393429341e-02f, 1.393888461e-02f, 1.394345147e-02f,
-1.394799396e-02f, 1.395251209e-02f, 1.395700585e-02f, 1.396147523e-02f, 1.396592022e-02f, 1.397034082e-02f, 1.397473703e-02f, 1.397910883e-02f, 1.398345622e-02f, 1.398777919e-02f,
-1.399207775e-02f, 1.399635187e-02f, 1.400060157e-02f, 1.400482682e-02f, 1.400902763e-02f, 1.401320398e-02f, 1.401735588e-02f, 1.402148332e-02f, 1.402558628e-02f, 1.402966478e-02f,
-1.403371879e-02f, 1.403774832e-02f, 1.404175335e-02f, 1.404573389e-02f, 1.404968993e-02f, 1.405362146e-02f, 1.405752848e-02f, 1.406141098e-02f, 1.406526896e-02f, 1.406910241e-02f,
-1.407291133e-02f, 1.407669570e-02f, 1.408045554e-02f, 1.408419082e-02f, 1.408790155e-02f, 1.409158772e-02f, 1.409524933e-02f, 1.409888636e-02f, 1.410249883e-02f, 1.410608672e-02f,
-1.410965002e-02f, 1.411318873e-02f, 1.411670286e-02f, 1.412019238e-02f, 1.412365731e-02f, 1.412709762e-02f, 1.413051333e-02f, 1.413390442e-02f, 1.413727089e-02f, 1.414061274e-02f,
-1.414392996e-02f, 1.414722254e-02f, 1.415049049e-02f, 1.415373380e-02f, 1.415695246e-02f, 1.416014648e-02f, 1.416331584e-02f, 1.416646054e-02f, 1.416958058e-02f, 1.417267596e-02f,
-1.417574666e-02f, 1.417879269e-02f, 1.418181405e-02f, 1.418481072e-02f, 1.418778271e-02f, 1.419073002e-02f, 1.419365263e-02f, 1.419655054e-02f, 1.419942376e-02f, 1.420227227e-02f,
-1.420509607e-02f, 1.420789517e-02f, 1.421066955e-02f, 1.421341922e-02f, 1.421614417e-02f, 1.421884440e-02f, 1.422151989e-02f, 1.422417066e-02f, 1.422679670e-02f, 1.422939800e-02f,
-1.423197457e-02f, 1.423452639e-02f, 1.423705347e-02f, 1.423955580e-02f, 1.424203338e-02f, 1.424448620e-02f, 1.424691427e-02f, 1.424931759e-02f, 1.425169614e-02f, 1.425404992e-02f,
-1.425637894e-02f, 1.425868319e-02f, 1.426096267e-02f, 1.426321738e-02f, 1.426544731e-02f, 1.426765246e-02f, 1.426983282e-02f, 1.427198841e-02f, 1.427411921e-02f, 1.427622522e-02f,
-1.427830643e-02f, 1.428036286e-02f, 1.428239449e-02f, 1.428440133e-02f, 1.428638336e-02f, 1.428834060e-02f, 1.429027303e-02f, 1.429218066e-02f, 1.429406348e-02f, 1.429592149e-02f,
-1.429775470e-02f, 1.429956309e-02f, 1.430134667e-02f, 1.430310543e-02f, 1.430483938e-02f, 1.430654851e-02f, 1.430823281e-02f, 1.430989230e-02f, 1.431152697e-02f, 1.431313681e-02f,
-1.431472182e-02f, 1.431628201e-02f, 1.431781737e-02f, 1.431932791e-02f, 1.432081361e-02f, 1.432227448e-02f, 1.432371052e-02f, 1.432512172e-02f, 1.432650809e-02f, 1.432786963e-02f,
-1.432920633e-02f, 1.433051819e-02f, 1.433180522e-02f, 1.433306740e-02f, 1.433430475e-02f, 1.433551725e-02f, 1.433670492e-02f, 1.433786774e-02f, 1.433900573e-02f, 1.434011886e-02f,
-1.434120716e-02f, 1.434227062e-02f, 1.434330923e-02f, 1.434432299e-02f, 1.434531191e-02f, 1.434627599e-02f, 1.434721522e-02f, 1.434812961e-02f, 1.434901915e-02f, 1.434988385e-02f,
-1.435072370e-02f, 1.435153871e-02f, 1.435232887e-02f, 1.435309418e-02f, 1.435383465e-02f, 1.435455028e-02f, 1.435524106e-02f, 1.435590700e-02f, 1.435654809e-02f, 1.435716434e-02f,
-1.435775575e-02f, 1.435832231e-02f, 1.435886403e-02f, 1.435938091e-02f, 1.435987295e-02f, 1.436034015e-02f, 1.436078250e-02f, 1.436120002e-02f, 1.436159270e-02f, 1.436196054e-02f,
-1.436230354e-02f, 1.436262171e-02f, 1.436291504e-02f, 1.436318354e-02f, 1.436342720e-02f, 1.436364603e-02f, 1.436384003e-02f, 1.436400920e-02f, 1.436415354e-02f, 1.436427306e-02f,
-1.436436774e-02f, 1.436443760e-02f, 1.436448264e-02f, 1.436450286e-02f, 1.436449825e-02f, 1.436446882e-02f, 1.436441458e-02f, 1.436433552e-02f, 1.436423164e-02f, 1.436410295e-02f,
-1.436394945e-02f, 1.436377113e-02f, 1.436356801e-02f, 1.436334009e-02f, 1.436308735e-02f, 1.436280982e-02f, 1.436250748e-02f, 1.436218035e-02f, 1.436182842e-02f, 1.436145169e-02f,
-1.436105017e-02f, 1.436062386e-02f, 1.436017276e-02f, 1.435969688e-02f, 1.435919621e-02f, 1.435867076e-02f, 1.435812053e-02f, 1.435754552e-02f, 1.435694574e-02f, 1.435632118e-02f,
-1.435567186e-02f, 1.435499777e-02f, 1.435429892e-02f, 1.435357530e-02f, 1.435282693e-02f, 1.435205379e-02f, 1.435125591e-02f, 1.435043327e-02f, 1.434958589e-02f, 1.434871376e-02f,
-1.434781689e-02f, 1.434689528e-02f, 1.434594894e-02f, 1.434497786e-02f, 1.434398205e-02f, 1.434296152e-02f, 1.434191626e-02f, 1.434084628e-02f, 1.433975159e-02f, 1.433863218e-02f,
-1.433748806e-02f, 1.433631924e-02f, 1.433512571e-02f, 1.433390748e-02f, 1.433266456e-02f, 1.433139694e-02f, 1.433010464e-02f, 1.432878765e-02f, 1.432744598e-02f, 1.432607963e-02f,
-1.432468860e-02f, 1.432327291e-02f, 1.432183255e-02f, 1.432036752e-02f, 1.431887784e-02f, 1.431736351e-02f, 1.431582452e-02f, 1.431426089e-02f, 1.431267261e-02f, 1.431105970e-02f,
-1.430942216e-02f, 1.430775998e-02f, 1.430607318e-02f, 1.430436176e-02f, 1.430262572e-02f, 1.430086507e-02f, 1.429907981e-02f, 1.429726995e-02f, 1.429543549e-02f, 1.429357644e-02f,
-1.429169280e-02f, 1.428978457e-02f, 1.428785176e-02f, 1.428589438e-02f, 1.428391243e-02f, 1.428190591e-02f, 1.427987484e-02f, 1.427781920e-02f, 1.427573902e-02f, 1.427363429e-02f,
-1.427150502e-02f, 1.426935122e-02f, 1.426717288e-02f, 1.426497002e-02f, 1.426274264e-02f, 1.426049075e-02f, 1.425821435e-02f, 1.425591344e-02f, 1.425358804e-02f, 1.425123814e-02f,
-1.424886375e-02f, 1.424646488e-02f, 1.424404154e-02f, 1.424159372e-02f, 1.423912145e-02f, 1.423662471e-02f, 1.423410351e-02f, 1.423155787e-02f, 1.422898779e-02f, 1.422639327e-02f,
-1.422377432e-02f, 1.422113095e-02f, 1.421846315e-02f, 1.421577095e-02f, 1.421305434e-02f, 1.421031333e-02f, 1.420754792e-02f, 1.420475813e-02f, 1.420194396e-02f, 1.419910541e-02f,
-1.419624249e-02f, 1.419335521e-02f, 1.419044357e-02f, 1.418750758e-02f, 1.418454725e-02f, 1.418156258e-02f, 1.417855359e-02f, 1.417552027e-02f, 1.417246263e-02f, 1.416938068e-02f,
-1.416627443e-02f, 1.416314388e-02f, 1.415998904e-02f, 1.415680992e-02f, 1.415360653e-02f, 1.415037886e-02f, 1.414712693e-02f, 1.414385075e-02f, 1.414055032e-02f, 1.413722565e-02f,
-1.413387674e-02f, 1.413050361e-02f, 1.412710625e-02f, 1.412368469e-02f, 1.412023892e-02f, 1.411676896e-02f, 1.411327480e-02f, 1.410975646e-02f, 1.410621395e-02f, 1.410264726e-02f,
-1.409905642e-02f, 1.409544143e-02f, 1.409180229e-02f, 1.408813902e-02f, 1.408445161e-02f, 1.408074008e-02f, 1.407700444e-02f, 1.407324470e-02f, 1.406946086e-02f, 1.406565292e-02f,
-1.406182091e-02f, 1.405796482e-02f, 1.405408466e-02f, 1.405018045e-02f, 1.404625218e-02f, 1.404229988e-02f, 1.403832354e-02f, 1.403432318e-02f, 1.403029880e-02f, 1.402625041e-02f,
-1.402217802e-02f, 1.401808164e-02f, 1.401396128e-02f, 1.400981694e-02f, 1.400564864e-02f, 1.400145638e-02f, 1.399724017e-02f, 1.399300002e-02f, 1.398873594e-02f, 1.398444793e-02f,
-1.398013601e-02f, 1.397580019e-02f, 1.397144047e-02f, 1.396705687e-02f, 1.396264938e-02f, 1.395821803e-02f, 1.395376282e-02f, 1.394928375e-02f, 1.394478085e-02f, 1.394025411e-02f,
-1.393570354e-02f, 1.393112917e-02f, 1.392653098e-02f, 1.392190900e-02f, 1.391726324e-02f, 1.391259370e-02f, 1.390790039e-02f, 1.390318332e-02f, 1.389844251e-02f, 1.389367795e-02f,
-1.388888967e-02f, 1.388407766e-02f, 1.387924195e-02f, 1.387438254e-02f, 1.386949943e-02f, 1.386459265e-02f, 1.385966219e-02f, 1.385470807e-02f, 1.384973031e-02f, 1.384472890e-02f,
-1.383970386e-02f, 1.383465520e-02f, 1.382958292e-02f, 1.382448705e-02f, 1.381936759e-02f, 1.381422454e-02f, 1.380905793e-02f, 1.380386776e-02f, 1.379865404e-02f, 1.379341677e-02f,
-1.378815598e-02f, 1.378287167e-02f, 1.377756386e-02f, 1.377223254e-02f, 1.376687774e-02f, 1.376149947e-02f, 1.375609773e-02f, 1.375067253e-02f, 1.374522389e-02f, 1.373975182e-02f,
-1.373425632e-02f, 1.372873741e-02f, 1.372319511e-02f, 1.371762941e-02f, 1.371204033e-02f, 1.370642789e-02f, 1.370079209e-02f, 1.369513294e-02f, 1.368945046e-02f, 1.368374466e-02f,
-1.367801555e-02f, 1.367226313e-02f, 1.366648742e-02f, 1.366068844e-02f, 1.365486619e-02f, 1.364902069e-02f, 1.364315194e-02f, 1.363725995e-02f, 1.363134475e-02f, 1.362540634e-02f,
-1.361944473e-02f, 1.361345993e-02f, 1.360745196e-02f, 1.360142083e-02f, 1.359536655e-02f, 1.358928912e-02f, 1.358318857e-02f, 1.357706491e-02f, 1.357091814e-02f, 1.356474828e-02f,
-1.355855534e-02f, 1.355233933e-02f, 1.354610027e-02f, 1.353983816e-02f, 1.353355302e-02f, 1.352724487e-02f, 1.352091371e-02f, 1.351455955e-02f, 1.350818241e-02f, 1.350178230e-02f,
-1.349535923e-02f, 1.348891322e-02f, 1.348244428e-02f, 1.347595241e-02f, 1.346943764e-02f, 1.346289998e-02f, 1.345633943e-02f, 1.344975601e-02f, 1.344314974e-02f, 1.343652062e-02f,
-1.342986867e-02f, 1.342319390e-02f, 1.341649633e-02f, 1.340977596e-02f, 1.340303281e-02f, 1.339626690e-02f, 1.338947823e-02f, 1.338266682e-02f, 1.337583269e-02f, 1.336897584e-02f,
-1.336209629e-02f, 1.335519405e-02f, 1.334826913e-02f, 1.334132155e-02f, 1.333435133e-02f, 1.332735847e-02f, 1.332034299e-02f, 1.331330490e-02f, 1.330624421e-02f, 1.329916095e-02f,
-1.329205511e-02f, 1.328492673e-02f, 1.327777580e-02f, 1.327060234e-02f, 1.326340637e-02f, 1.325618791e-02f, 1.324894695e-02f, 1.324168353e-02f, 1.323439764e-02f, 1.322708932e-02f,
-1.321975856e-02f, 1.321240539e-02f, 1.320502981e-02f, 1.319763185e-02f, 1.319021151e-02f, 1.318276881e-02f, 1.317530377e-02f, 1.316781640e-02f, 1.316030670e-02f, 1.315277471e-02f,
-1.314522042e-02f, 1.313764387e-02f, 1.313004505e-02f, 1.312242398e-02f, 1.311478069e-02f, 1.310711517e-02f, 1.309942746e-02f, 1.309171756e-02f, 1.308398548e-02f, 1.307623125e-02f,
-1.306845487e-02f, 1.306065637e-02f, 1.305283575e-02f, 1.304499303e-02f, 1.303712822e-02f, 1.302924135e-02f, 1.302133242e-02f, 1.301340145e-02f, 1.300544846e-02f, 1.299747346e-02f,
-1.298947646e-02f, 1.298145748e-02f, 1.297341654e-02f, 1.296535365e-02f, 1.295726882e-02f, 1.294916208e-02f, 1.294103343e-02f, 1.293288289e-02f, 1.292471048e-02f, 1.291651621e-02f,
-1.290830010e-02f, 1.290006217e-02f, 1.289180242e-02f, 1.288352088e-02f, 1.287521755e-02f, 1.286689246e-02f, 1.285854562e-02f, 1.285017705e-02f, 1.284178677e-02f, 1.283337478e-02f,
-1.282494110e-02f, 1.281648575e-02f, 1.280800875e-02f, 1.279951011e-02f, 1.279098985e-02f, 1.278244798e-02f, 1.277388452e-02f, 1.276529949e-02f, 1.275669290e-02f, 1.274806477e-02f,
-1.273941511e-02f, 1.273074394e-02f, 1.272205127e-02f, 1.271333713e-02f, 1.270460153e-02f, 1.269584448e-02f, 1.268706601e-02f, 1.267826612e-02f, 1.266944484e-02f, 1.266060217e-02f,
-1.265173815e-02f, 1.264285278e-02f, 1.263394608e-02f, 1.262501806e-02f, 1.261606876e-02f, 1.260709817e-02f, 1.259810632e-02f, 1.258909322e-02f, 1.258005889e-02f, 1.257100335e-02f,
-1.256192662e-02f, 1.255282870e-02f, 1.254370963e-02f, 1.253456941e-02f, 1.252540806e-02f, 1.251622560e-02f, 1.250702205e-02f, 1.249779743e-02f, 1.248855174e-02f, 1.247928501e-02f,
-1.246999726e-02f, 1.246068850e-02f, 1.245135874e-02f, 1.244200802e-02f, 1.243263634e-02f, 1.242324372e-02f, 1.241383018e-02f, 1.240439574e-02f, 1.239494041e-02f, 1.238546422e-02f,
-1.237596717e-02f, 1.236644929e-02f, 1.235691059e-02f, 1.234735110e-02f, 1.233777083e-02f, 1.232816979e-02f, 1.231854801e-02f, 1.230890551e-02f, 1.229924229e-02f, 1.228955839e-02f,
-1.227985381e-02f, 1.227012858e-02f, 1.226038271e-02f, 1.225061622e-02f, 1.224082913e-02f, 1.223102145e-02f, 1.222119322e-02f, 1.221134443e-02f, 1.220147512e-02f, 1.219158530e-02f,
-1.218167498e-02f, 1.217174420e-02f, 1.216179295e-02f, 1.215182127e-02f, 1.214182918e-02f, 1.213181668e-02f, 1.212178380e-02f, 1.211173056e-02f, 1.210165697e-02f, 1.209156306e-02f,
-1.208144884e-02f, 1.207131433e-02f, 1.206115956e-02f, 1.205098453e-02f, 1.204078927e-02f, 1.203057379e-02f, 1.202033812e-02f, 1.201008228e-02f, 1.199980627e-02f, 1.198951013e-02f,
-1.197919387e-02f, 1.196885751e-02f, 1.195850107e-02f, 1.194812457e-02f, 1.193772802e-02f, 1.192731145e-02f, 1.191687488e-02f, 1.190641832e-02f, 1.189594179e-02f, 1.188544532e-02f,
-1.187492892e-02f, 1.186439261e-02f, 1.185383641e-02f, 1.184326034e-02f, 1.183266442e-02f, 1.182204867e-02f, 1.181141311e-02f, 1.180075775e-02f, 1.179008263e-02f, 1.177938775e-02f,
-1.176867314e-02f, 1.175793881e-02f, 1.174718479e-02f, 1.173641110e-02f, 1.172561775e-02f, 1.171480477e-02f, 1.170397218e-02f, 1.169311998e-02f, 1.168224822e-02f, 1.167135690e-02f,
-1.166044604e-02f, 1.164951567e-02f, 1.163856580e-02f, 1.162759646e-02f, 1.161660766e-02f, 1.160559943e-02f, 1.159457178e-02f, 1.158352474e-02f, 1.157245833e-02f, 1.156137256e-02f,
-1.155026745e-02f, 1.153914303e-02f, 1.152799932e-02f, 1.151683634e-02f, 1.150565410e-02f, 1.149445263e-02f, 1.148323195e-02f, 1.147199208e-02f, 1.146073304e-02f, 1.144945485e-02f,
-1.143815753e-02f, 1.142684110e-02f, 1.141550558e-02f, 1.140415099e-02f, 1.139277736e-02f, 1.138138470e-02f, 1.136997304e-02f, 1.135854239e-02f, 1.134709278e-02f, 1.133562423e-02f,
-1.132413675e-02f, 1.131263037e-02f, 1.130110511e-02f, 1.128956100e-02f, 1.127799805e-02f, 1.126641627e-02f, 1.125481571e-02f, 1.124319637e-02f, 1.123155827e-02f, 1.121990145e-02f,
-1.120822591e-02f, 1.119653168e-02f, 1.118481878e-02f, 1.117308724e-02f, 1.116133707e-02f, 1.114956830e-02f, 1.113778094e-02f, 1.112597502e-02f, 1.111415057e-02f, 1.110230759e-02f,
-1.109044612e-02f, 1.107856617e-02f, 1.106666776e-02f, 1.105475093e-02f, 1.104281568e-02f, 1.103086204e-02f, 1.101889004e-02f, 1.100689969e-02f, 1.099489102e-02f, 1.098286404e-02f,
-1.097081879e-02f, 1.095875528e-02f, 1.094667353e-02f, 1.093457356e-02f, 1.092245541e-02f, 1.091031908e-02f, 1.089816460e-02f, 1.088599200e-02f, 1.087380130e-02f, 1.086159251e-02f,
-1.084936566e-02f, 1.083712077e-02f, 1.082485787e-02f, 1.081257697e-02f, 1.080027810e-02f, 1.078796129e-02f, 1.077562654e-02f, 1.076327390e-02f, 1.075090337e-02f, 1.073851498e-02f,
-1.072610875e-02f, 1.071368471e-02f, 1.070124288e-02f, 1.068878327e-02f, 1.067630592e-02f, 1.066381085e-02f, 1.065129807e-02f, 1.063876761e-02f, 1.062621950e-02f, 1.061365375e-02f,
-1.060107039e-02f, 1.058846945e-02f, 1.057585093e-02f, 1.056321488e-02f, 1.055056130e-02f, 1.053789023e-02f, 1.052520168e-02f, 1.051249568e-02f, 1.049977225e-02f, 1.048703142e-02f,
-1.047427321e-02f, 1.046149763e-02f, 1.044870472e-02f, 1.043589450e-02f, 1.042306698e-02f, 1.041022220e-02f, 1.039736018e-02f, 1.038448093e-02f, 1.037158449e-02f, 1.035867087e-02f,
-1.034574011e-02f, 1.033279221e-02f, 1.031982721e-02f, 1.030684513e-02f, 1.029384600e-02f, 1.028082983e-02f, 1.026779665e-02f, 1.025474648e-02f, 1.024167935e-02f, 1.022859528e-02f,
-1.021549429e-02f, 1.020237641e-02f, 1.018924166e-02f, 1.017609007e-02f, 1.016292165e-02f, 1.014973644e-02f, 1.013653445e-02f, 1.012331571e-02f, 1.011008025e-02f, 1.009682808e-02f,
-1.008355924e-02f, 1.007027374e-02f, 1.005697160e-02f, 1.004365287e-02f, 1.003031754e-02f, 1.001696566e-02f, 1.000359725e-02f, 9.990212318e-03f, 9.976810903e-03f, 9.963393026e-03f,
-9.949958709e-03f, 9.936507978e-03f, 9.923040857e-03f, 9.909557369e-03f, 9.896057539e-03f, 9.882541391e-03f, 9.869008950e-03f, 9.855460240e-03f, 9.841895285e-03f, 9.828314109e-03f,
-9.814716738e-03f, 9.801103195e-03f, 9.787473504e-03f, 9.773827691e-03f, 9.760165780e-03f, 9.746487795e-03f, 9.732793761e-03f, 9.719083702e-03f, 9.705357643e-03f, 9.691615609e-03f,
-9.677857625e-03f, 9.664083714e-03f, 9.650293903e-03f, 9.636488214e-03f, 9.622666674e-03f, 9.608829308e-03f, 9.594976138e-03f, 9.581107192e-03f, 9.567222493e-03f, 9.553322067e-03f,
-9.539405938e-03f, 9.525474131e-03f, 9.511526672e-03f, 9.497563585e-03f, 9.483584895e-03f, 9.469590628e-03f, 9.455580808e-03f, 9.441555461e-03f, 9.427514611e-03f, 9.413458284e-03f,
-9.399386505e-03f, 9.385299299e-03f, 9.371196692e-03f, 9.357078708e-03f, 9.342945373e-03f, 9.328796712e-03f, 9.314632751e-03f, 9.300453515e-03f, 9.286259029e-03f, 9.272049319e-03f,
-9.257824410e-03f, 9.243584327e-03f, 9.229329096e-03f, 9.215058743e-03f, 9.200773293e-03f, 9.186472772e-03f, 9.172157204e-03f, 9.157826617e-03f, 9.143481034e-03f, 9.129120483e-03f,
-9.114744988e-03f, 9.100354576e-03f, 9.085949272e-03f, 9.071529102e-03f, 9.057094091e-03f, 9.042644266e-03f, 9.028179652e-03f, 9.013700274e-03f, 8.999206160e-03f, 8.984697335e-03f,
-8.970173824e-03f, 8.955635654e-03f, 8.941082851e-03f, 8.926515440e-03f, 8.911933447e-03f, 8.897336900e-03f, 8.882725823e-03f, 8.868100242e-03f, 8.853460185e-03f, 8.838805676e-03f,
-8.824136743e-03f, 8.809453411e-03f, 8.794755706e-03f, 8.780043655e-03f, 8.765317284e-03f, 8.750576619e-03f, 8.735821687e-03f, 8.721052513e-03f, 8.706269124e-03f, 8.691471547e-03f,
-8.676659808e-03f, 8.661833933e-03f, 8.646993949e-03f, 8.632139882e-03f, 8.617271758e-03f, 8.602389605e-03f, 8.587493448e-03f, 8.572583314e-03f, 8.557659230e-03f, 8.542721223e-03f,
-8.527769318e-03f, 8.512803542e-03f, 8.497823923e-03f, 8.482830487e-03f, 8.467823260e-03f, 8.452802270e-03f, 8.437767542e-03f, 8.422719104e-03f, 8.407656983e-03f, 8.392581205e-03f,
-8.377491798e-03f, 8.362388787e-03f, 8.347272200e-03f, 8.332142064e-03f, 8.316998406e-03f, 8.301841252e-03f, 8.286670630e-03f, 8.271486567e-03f, 8.256289089e-03f, 8.241078224e-03f,
-8.225853998e-03f, 8.210616439e-03f, 8.195365574e-03f, 8.180101430e-03f, 8.164824034e-03f, 8.149533413e-03f, 8.134229595e-03f, 8.118912606e-03f, 8.103582474e-03f, 8.088239226e-03f,
-8.072882889e-03f, 8.057513491e-03f, 8.042131058e-03f, 8.026735619e-03f, 8.011327201e-03f, 7.995905830e-03f, 7.980471535e-03f, 7.965024342e-03f, 7.949564279e-03f, 7.934091374e-03f,
-7.918605654e-03f, 7.903107147e-03f, 7.887595879e-03f, 7.872071879e-03f, 7.856535174e-03f, 7.840985792e-03f, 7.825423760e-03f, 7.809849106e-03f, 7.794261858e-03f, 7.778662042e-03f,
-7.763049688e-03f, 7.747424821e-03f, 7.731787472e-03f, 7.716137666e-03f, 7.700475431e-03f, 7.684800797e-03f, 7.669113789e-03f, 7.653414437e-03f, 7.637702767e-03f, 7.621978808e-03f,
-7.606242588e-03f, 7.590494134e-03f, 7.574733475e-03f, 7.558960638e-03f, 7.543175651e-03f, 7.527378543e-03f, 7.511569341e-03f, 7.495748073e-03f, 7.479914767e-03f, 7.464069451e-03f,
-7.448212154e-03f, 7.432342904e-03f, 7.416461728e-03f, 7.400568654e-03f, 7.384663712e-03f, 7.368746928e-03f, 7.352818331e-03f, 7.336877950e-03f, 7.320925812e-03f, 7.304961946e-03f,
-7.288986380e-03f, 7.272999143e-03f, 7.257000262e-03f, 7.240989766e-03f, 7.224967683e-03f, 7.208934041e-03f, 7.192888870e-03f, 7.176832196e-03f, 7.160764050e-03f, 7.144684458e-03f,
-7.128593450e-03f, 7.112491054e-03f, 7.096377299e-03f, 7.080252212e-03f, 7.064115823e-03f, 7.047968160e-03f, 7.031809251e-03f, 7.015639126e-03f, 6.999457812e-03f, 6.983265338e-03f,
-6.967061733e-03f, 6.950847026e-03f, 6.934621245e-03f, 6.918384418e-03f, 6.902136575e-03f, 6.885877744e-03f, 6.869607955e-03f, 6.853327234e-03f, 6.837035612e-03f, 6.820733118e-03f,
-6.804419779e-03f, 6.788095625e-03f, 6.771760684e-03f, 6.755414986e-03f, 6.739058559e-03f, 6.722691432e-03f, 6.706313634e-03f, 6.689925194e-03f, 6.673526141e-03f, 6.657116504e-03f,
-6.640696311e-03f, 6.624265592e-03f, 6.607824376e-03f, 6.591372691e-03f, 6.574910567e-03f, 6.558438033e-03f, 6.541955118e-03f, 6.525461850e-03f, 6.508958260e-03f, 6.492444375e-03f,
-6.475920226e-03f, 6.459385840e-03f, 6.442841249e-03f, 6.426286480e-03f, 6.409721562e-03f, 6.393146526e-03f, 6.376561400e-03f, 6.359966213e-03f, 6.343360995e-03f, 6.326745774e-03f,
-6.310120581e-03f, 6.293485445e-03f, 6.276840394e-03f, 6.260185459e-03f, 6.243520667e-03f, 6.226846050e-03f, 6.210161636e-03f, 6.193467454e-03f, 6.176763534e-03f, 6.160049906e-03f,
-6.143326598e-03f, 6.126593641e-03f, 6.109851063e-03f, 6.093098895e-03f, 6.076337165e-03f, 6.059565903e-03f, 6.042785139e-03f, 6.025994903e-03f, 6.009195223e-03f, 5.992386129e-03f,
-5.975567651e-03f, 5.958739818e-03f, 5.941902661e-03f, 5.925056209e-03f, 5.908200490e-03f, 5.891335536e-03f, 5.874461375e-03f, 5.857578038e-03f, 5.840685554e-03f, 5.823783952e-03f,
-5.806873263e-03f, 5.789953516e-03f, 5.773024741e-03f, 5.756086967e-03f, 5.739140225e-03f, 5.722184545e-03f, 5.705219955e-03f, 5.688246486e-03f, 5.671264168e-03f, 5.654273030e-03f,
-5.637273103e-03f, 5.620264416e-03f, 5.603246999e-03f, 5.586220882e-03f, 5.569186095e-03f, 5.552142668e-03f, 5.535090631e-03f, 5.518030013e-03f, 5.500960845e-03f, 5.483883157e-03f,
-5.466796978e-03f, 5.449702339e-03f, 5.432599270e-03f, 5.415487801e-03f, 5.398367961e-03f, 5.381239781e-03f, 5.364103291e-03f, 5.346958521e-03f, 5.329805501e-03f, 5.312644261e-03f,
-5.295474831e-03f, 5.278297242e-03f, 5.261111523e-03f, 5.243917705e-03f, 5.226715818e-03f, 5.209505891e-03f, 5.192287956e-03f, 5.175062042e-03f, 5.157828180e-03f, 5.140586400e-03f,
-5.123336732e-03f, 5.106079206e-03f, 5.088813853e-03f, 5.071540702e-03f, 5.054259785e-03f, 5.036971131e-03f, 5.019674771e-03f, 5.002370735e-03f, 4.985059053e-03f, 4.967739756e-03f,
-4.950412874e-03f, 4.933078438e-03f, 4.915736477e-03f, 4.898387023e-03f, 4.881030105e-03f, 4.863665754e-03f, 4.846294001e-03f, 4.828914875e-03f, 4.811528408e-03f, 4.794134630e-03f,
-4.776733571e-03f, 4.759325261e-03f, 4.741909732e-03f, 4.724487013e-03f, 4.707057136e-03f, 4.689620130e-03f, 4.672176027e-03f, 4.654724856e-03f, 4.637266648e-03f, 4.619801435e-03f,
-4.602329246e-03f, 4.584850112e-03f, 4.567364063e-03f, 4.549871131e-03f, 4.532371346e-03f, 4.514864738e-03f, 4.497351338e-03f, 4.479831177e-03f, 4.462304286e-03f, 4.444770694e-03f,
-4.427230433e-03f, 4.409683533e-03f, 4.392130026e-03f, 4.374569941e-03f, 4.357003310e-03f, 4.339430163e-03f, 4.321850531e-03f, 4.304264445e-03f, 4.286671935e-03f, 4.269073032e-03f,
-4.251467767e-03f, 4.233856171e-03f, 4.216238274e-03f, 4.198614108e-03f, 4.180983702e-03f, 4.163347089e-03f, 4.145704298e-03f, 4.128055361e-03f, 4.110400308e-03f, 4.092739171e-03f,
-4.075071979e-03f, 4.057398765e-03f, 4.039719558e-03f, 4.022034390e-03f, 4.004343292e-03f, 3.986646294e-03f, 3.968943428e-03f, 3.951234724e-03f, 3.933520213e-03f, 3.915799926e-03f,
-3.898073894e-03f, 3.880342149e-03f, 3.862604720e-03f, 3.844861639e-03f, 3.827112938e-03f, 3.809358646e-03f, 3.791598795e-03f, 3.773833416e-03f, 3.756062540e-03f, 3.738286198e-03f,
-3.720504421e-03f, 3.702717240e-03f, 3.684924686e-03f, 3.667126789e-03f, 3.649323582e-03f, 3.631515095e-03f, 3.613701360e-03f, 3.595882406e-03f, 3.578058266e-03f, 3.560228971e-03f,
-3.542394550e-03f, 3.524555037e-03f, 3.506710461e-03f, 3.488860854e-03f, 3.471006247e-03f, 3.453146671e-03f, 3.435282158e-03f, 3.417412737e-03f, 3.399538442e-03f, 3.381659302e-03f,
-3.363775348e-03f, 3.345886613e-03f, 3.327993127e-03f, 3.310094921e-03f, 3.292192027e-03f, 3.274284475e-03f, 3.256372298e-03f, 3.238455525e-03f, 3.220534189e-03f, 3.202608320e-03f,
-3.184677951e-03f, 3.166743111e-03f, 3.148803832e-03f, 3.130860146e-03f, 3.112912084e-03f, 3.094959676e-03f, 3.077002955e-03f, 3.059041952e-03f, 3.041076697e-03f, 3.023107222e-03f,
-3.005133558e-03f, 2.987155737e-03f, 2.969173790e-03f, 2.951187748e-03f, 2.933197643e-03f, 2.915203505e-03f, 2.897205367e-03f, 2.879203259e-03f, 2.861197213e-03f, 2.843187260e-03f,
-2.825173431e-03f, 2.807155758e-03f, 2.789134272e-03f, 2.771109004e-03f, 2.753079987e-03f, 2.735047250e-03f, 2.717010826e-03f, 2.698970746e-03f, 2.680927041e-03f, 2.662879742e-03f,
-2.644828882e-03f, 2.626774491e-03f, 2.608716601e-03f, 2.590655243e-03f, 2.572590448e-03f, 2.554522249e-03f, 2.536450675e-03f, 2.518375760e-03f, 2.500297533e-03f, 2.482216028e-03f,
-2.464131274e-03f, 2.446043304e-03f, 2.427952148e-03f, 2.409857839e-03f, 2.391760407e-03f, 2.373659885e-03f, 2.355556303e-03f, 2.337449694e-03f, 2.319340087e-03f, 2.301227516e-03f,
-2.283112011e-03f, 2.264993604e-03f, 2.246872326e-03f, 2.228748209e-03f, 2.210621285e-03f, 2.192491584e-03f, 2.174359138e-03f, 2.156223979e-03f, 2.138086138e-03f, 2.119945646e-03f,
-2.101802536e-03f, 2.083656838e-03f, 2.065508585e-03f, 2.047357807e-03f, 2.029204536e-03f, 2.011048803e-03f, 1.992890641e-03f, 1.974730080e-03f, 1.956567153e-03f, 1.938401890e-03f,
-1.920234323e-03f, 1.902064484e-03f, 1.883892403e-03f, 1.865718114e-03f, 1.847541646e-03f, 1.829363033e-03f, 1.811182304e-03f, 1.792999492e-03f, 1.774814629e-03f, 1.756627745e-03f,
-1.738438873e-03f, 1.720248043e-03f, 1.702055288e-03f, 1.683860638e-03f, 1.665664126e-03f, 1.647465784e-03f, 1.629265641e-03f, 1.611063731e-03f, 1.592860084e-03f, 1.574654732e-03f,
-1.556447707e-03f, 1.538239040e-03f, 1.520028763e-03f, 1.501816908e-03f, 1.483603505e-03f, 1.465388586e-03f, 1.447172184e-03f, 1.428954329e-03f, 1.410735053e-03f, 1.392514387e-03f,
-1.374292364e-03f, 1.356069015e-03f, 1.337844370e-03f, 1.319618463e-03f, 1.301391324e-03f, 1.283162984e-03f, 1.264933477e-03f, 1.246702832e-03f, 1.228471082e-03f, 1.210238258e-03f,
-1.192004391e-03f, 1.173769514e-03f, 1.155533658e-03f, 1.137296854e-03f, 1.119059134e-03f, 1.100820529e-03f, 1.082581071e-03f, 1.064340792e-03f, 1.046099723e-03f, 1.027857896e-03f,
-1.009615341e-03f, 9.913720919e-04f, 9.731281788e-04f, 9.548836335e-04f, 9.366384876e-04f, 9.183927726e-04f, 9.001465201e-04f, 8.818997617e-04f, 8.636525289e-04f, 8.454048532e-04f,
-8.271567661e-04f, 8.089082993e-04f, 7.906594842e-04f, 7.724103525e-04f, 7.541609355e-04f, 7.359112650e-04f, 7.176613723e-04f, 6.994112891e-04f, 6.811610468e-04f, 6.629106771e-04f,
-6.446602113e-04f, 6.264096812e-04f, 6.081591181e-04f, 5.899085537e-04f, 5.716580193e-04f, 5.534075467e-04f, 5.351571672e-04f, 5.169069123e-04f, 4.986568137e-04f, 4.804069029e-04f,
-4.621572112e-04f, 4.439077703e-04f, 4.256586116e-04f, 4.074097667e-04f, 3.891612670e-04f, 3.709131441e-04f, 3.526654294e-04f, 3.344181544e-04f, 3.161713507e-04f, 2.979250497e-04f,
-2.796792829e-04f, 2.614340818e-04f, 2.431894778e-04f, 2.249455025e-04f, 2.067021874e-04f, 1.884595638e-04f, 1.702176633e-04f, 1.519765173e-04f, 1.337361573e-04f, 1.154966148e-04f,
-9.725792114e-05f, 7.902010787e-05f, 6.078320641e-05f, 4.254724821e-05f, 2.431226472e-05f, 6.078287362e-06f, -1.215465242e-05f, -3.038652318e-05f, -4.861729351e-05f, -6.684693198e-05f,
--8.507540716e-05f, -1.033026876e-04f, -1.215287420e-04f, -1.397535388e-04f, -1.579770467e-04f, -1.761992343e-04f, -1.944200702e-04f, -2.126395229e-04f, -2.308575611e-04f, -2.490741534e-04f,
--2.672892684e-04f, -2.855028748e-04f, -3.037149411e-04f, -3.219254360e-04f, -3.401343282e-04f, -3.583415863e-04f, -3.765471789e-04f, -3.947510746e-04f, -4.129532423e-04f, -4.311536504e-04f,
--4.493522676e-04f, -4.675490627e-04f, -4.857440043e-04f, -5.039370611e-04f, -5.221282017e-04f, -5.403173950e-04f, -5.585046094e-04f, -5.766898139e-04f, -5.948729770e-04f, -6.130540674e-04f,
--6.312330540e-04f, -6.494099053e-04f, -6.675845902e-04f, -6.857570774e-04f, -7.039273356e-04f, -7.220953335e-04f, -7.402610400e-04f, -7.584244237e-04f, -7.765854534e-04f, -7.947440979e-04f,
--8.129003260e-04f, -8.310541064e-04f, -8.492054080e-04f, -8.673541995e-04f, -8.855004496e-04f, -9.036441273e-04f, -9.217852014e-04f, -9.399236405e-04f, -9.580594137e-04f, -9.761924896e-04f,
--9.943228372e-04f, -1.012450425e-03f, -1.030575223e-03f, -1.048697198e-03f, -1.066816321e-03f, -1.084932559e-03f, -1.103045882e-03f, -1.121156259e-03f, -1.139263659e-03f, -1.157368050e-03f,
--1.175469401e-03f, -1.193567682e-03f, -1.211662860e-03f, -1.229754906e-03f, -1.247843788e-03f, -1.265929475e-03f, -1.284011936e-03f, -1.302091139e-03f, -1.320167055e-03f, -1.338239651e-03f,
--1.356308897e-03f, -1.374374762e-03f, -1.392437214e-03f, -1.410496223e-03f, -1.428551758e-03f, -1.446603788e-03f, -1.464652282e-03f, -1.482697208e-03f, -1.500738536e-03f, -1.518776235e-03f,
--1.536810274e-03f, -1.554840622e-03f, -1.572867249e-03f, -1.590890122e-03f, -1.608909211e-03f, -1.626924486e-03f, -1.644935916e-03f, -1.662943469e-03f, -1.680947114e-03f, -1.698946822e-03f,
--1.716942560e-03f, -1.734934298e-03f, -1.752922006e-03f, -1.770905652e-03f, -1.788885206e-03f, -1.806860636e-03f, -1.824831912e-03f, -1.842799004e-03f, -1.860761879e-03f, -1.878720509e-03f,
--1.896674861e-03f, -1.914624905e-03f, -1.932570611e-03f, -1.950511947e-03f, -1.968448882e-03f, -1.986381387e-03f, -2.004309430e-03f, -2.022232981e-03f, -2.040152009e-03f, -2.058066483e-03f,
--2.075976372e-03f, -2.093881647e-03f, -2.111782275e-03f, -2.129678227e-03f, -2.147569472e-03f, -2.165455980e-03f, -2.183337719e-03f, -2.201214659e-03f, -2.219086770e-03f, -2.236954020e-03f,
--2.254816380e-03f, -2.272673818e-03f, -2.290526305e-03f, -2.308373809e-03f, -2.326216301e-03f, -2.344053748e-03f, -2.361886122e-03f, -2.379713392e-03f, -2.397535526e-03f, -2.415352495e-03f,
--2.433164268e-03f, -2.450970814e-03f, -2.468772104e-03f, -2.486568106e-03f, -2.504358791e-03f, -2.522144127e-03f, -2.539924085e-03f, -2.557698634e-03f, -2.575467743e-03f, -2.593231383e-03f,
--2.610989522e-03f, -2.628742131e-03f, -2.646489179e-03f, -2.664230636e-03f, -2.681966472e-03f, -2.699696656e-03f, -2.717421157e-03f, -2.735139946e-03f, -2.752852993e-03f, -2.770560266e-03f,
--2.788261737e-03f, -2.805957374e-03f, -2.823647147e-03f, -2.841331027e-03f, -2.859008982e-03f, -2.876680983e-03f, -2.894347000e-03f, -2.912007002e-03f, -2.929660959e-03f, -2.947308842e-03f,
--2.964950619e-03f, -2.982586261e-03f, -3.000215738e-03f, -3.017839019e-03f, -3.035456075e-03f, -3.053066876e-03f, -3.070671390e-03f, -3.088269590e-03f, -3.105861443e-03f, -3.123446921e-03f,
--3.141025993e-03f, -3.158598629e-03f, -3.176164800e-03f, -3.193724475e-03f, -3.211277624e-03f, -3.228824218e-03f, -3.246364227e-03f, -3.263897620e-03f, -3.281424367e-03f, -3.298944440e-03f,
--3.316457807e-03f, -3.333964440e-03f, -3.351464307e-03f, -3.368957380e-03f, -3.386443629e-03f, -3.403923023e-03f, -3.421395533e-03f, -3.438861130e-03f, -3.456319782e-03f, -3.473771462e-03f,
--3.491216138e-03f, -3.508653781e-03f, -3.526084362e-03f, -3.543507851e-03f, -3.560924217e-03f, -3.578333432e-03f, -3.595735466e-03f, -3.613130289e-03f, -3.630517871e-03f, -3.647898183e-03f,
--3.665271195e-03f, -3.682636878e-03f, -3.699995202e-03f, -3.717346137e-03f, -3.734689655e-03f, -3.752025724e-03f, -3.769354317e-03f, -3.786675403e-03f, -3.803988953e-03f, -3.821294937e-03f,
--3.838593327e-03f, -3.855884092e-03f, -3.873167203e-03f, -3.890442631e-03f, -3.907710346e-03f, -3.924970319e-03f, -3.942222520e-03f, -3.959466921e-03f, -3.976703491e-03f, -3.993932203e-03f,
--4.011153025e-03f, -4.028365929e-03f, -4.045570886e-03f, -4.062767866e-03f, -4.079956841e-03f, -4.097137780e-03f, -4.114310656e-03f, -4.131475437e-03f, -4.148632096e-03f, -4.165780603e-03f,
--4.182920930e-03f, -4.200053046e-03f, -4.217176922e-03f, -4.234292531e-03f, -4.251399842e-03f, -4.268498826e-03f, -4.285589455e-03f, -4.302671700e-03f, -4.319745530e-03f, -4.336810918e-03f,
--4.353867835e-03f, -4.370916251e-03f, -4.387956137e-03f, -4.404987464e-03f, -4.422010205e-03f, -4.439024329e-03f, -4.456029807e-03f, -4.473026612e-03f, -4.490014714e-03f, -4.506994083e-03f,
--4.523964692e-03f, -4.540926512e-03f, -4.557879513e-03f, -4.574823668e-03f, -4.591758946e-03f, -4.608685321e-03f, -4.625602761e-03f, -4.642511240e-03f, -4.659410728e-03f, -4.676301197e-03f,
--4.693182618e-03f, -4.710054963e-03f, -4.726918202e-03f, -4.743772307e-03f, -4.760617249e-03f, -4.777453001e-03f, -4.794279533e-03f, -4.811096817e-03f, -4.827904825e-03f, -4.844703527e-03f,
--4.861492896e-03f, -4.878272903e-03f, -4.895043519e-03f, -4.911804716e-03f, -4.928556466e-03f, -4.945298740e-03f, -4.962031510e-03f, -4.978754748e-03f, -4.995468425e-03f, -5.012172512e-03f,
--5.028866983e-03f, -5.045551807e-03f, -5.062226958e-03f, -5.078892406e-03f, -5.095548124e-03f, -5.112194083e-03f, -5.128830255e-03f, -5.145456613e-03f, -5.162073127e-03f, -5.178679770e-03f,
--5.195276513e-03f, -5.211863329e-03f, -5.228440189e-03f, -5.245007066e-03f, -5.261563930e-03f, -5.278110755e-03f, -5.294647513e-03f, -5.311174174e-03f, -5.327690712e-03f, -5.344197098e-03f,
--5.360693305e-03f, -5.377179304e-03f, -5.393655068e-03f, -5.410120568e-03f, -5.426575777e-03f, -5.443020668e-03f, -5.459455211e-03f, -5.475879380e-03f, -5.492293147e-03f, -5.508696484e-03f,
--5.525089363e-03f, -5.541471756e-03f, -5.557843636e-03f, -5.574204976e-03f, -5.590555746e-03f, -5.606895921e-03f, -5.623225472e-03f, -5.639544371e-03f, -5.655852591e-03f, -5.672150105e-03f,
--5.688436885e-03f, -5.704712903e-03f, -5.720978132e-03f, -5.737232544e-03f, -5.753476113e-03f, -5.769708810e-03f, -5.785930608e-03f, -5.802141480e-03f, -5.818341398e-03f, -5.834530335e-03f,
--5.850708264e-03f, -5.866875158e-03f, -5.883030988e-03f, -5.899175728e-03f, -5.915309351e-03f, -5.931431829e-03f, -5.947543135e-03f, -5.963643242e-03f, -5.979732123e-03f, -5.995809751e-03f,
--6.011876098e-03f, -6.027931137e-03f, -6.043974842e-03f, -6.060007185e-03f, -6.076028139e-03f, -6.092037677e-03f, -6.108035772e-03f, -6.124022398e-03f, -6.139997527e-03f, -6.155961132e-03f,
--6.171913187e-03f, -6.187853664e-03f, -6.203782537e-03f, -6.219699778e-03f, -6.235605361e-03f, -6.251499260e-03f, -6.267381447e-03f, -6.283251896e-03f, -6.299110579e-03f, -6.314957471e-03f,
--6.330792544e-03f, -6.346615772e-03f, -6.362427128e-03f, -6.378226585e-03f, -6.394014117e-03f, -6.409789698e-03f, -6.425553301e-03f, -6.441304898e-03f, -6.457044464e-03f, -6.472771973e-03f,
--6.488487397e-03f, -6.504190710e-03f, -6.519881887e-03f, -6.535560899e-03f, -6.551227722e-03f, -6.566882328e-03f, -6.582524692e-03f, -6.598154787e-03f, -6.613772586e-03f, -6.629378064e-03f,
--6.644971194e-03f, -6.660551950e-03f, -6.676120306e-03f, -6.691676235e-03f, -6.707219712e-03f, -6.722750710e-03f, -6.738269203e-03f, -6.753775166e-03f, -6.769268571e-03f, -6.784749393e-03f,
--6.800217607e-03f, -6.815673185e-03f, -6.831116102e-03f, -6.846546333e-03f, -6.861963850e-03f, -6.877368629e-03f, -6.892760643e-03f, -6.908139866e-03f, -6.923506274e-03f, -6.938859839e-03f,
--6.954200536e-03f, -6.969528339e-03f, -6.984843223e-03f, -7.000145162e-03f, -7.015434130e-03f, -7.030710101e-03f, -7.045973051e-03f, -7.061222952e-03f, -7.076459780e-03f, -7.091683510e-03f,
--7.106894115e-03f, -7.122091569e-03f, -7.137275849e-03f, -7.152446927e-03f, -7.167604779e-03f, -7.182749379e-03f, -7.197880702e-03f, -7.212998722e-03f, -7.228103415e-03f, -7.243194754e-03f,
--7.258272714e-03f, -7.273337271e-03f, -7.288388398e-03f, -7.303426071e-03f, -7.318450265e-03f, -7.333460953e-03f, -7.348458112e-03f, -7.363441716e-03f, -7.378411740e-03f, -7.393368159e-03f,
--7.408310947e-03f, -7.423240080e-03f, -7.438155533e-03f, -7.453057280e-03f, -7.467945297e-03f, -7.482819559e-03f, -7.497680041e-03f, -7.512526718e-03f, -7.527359566e-03f, -7.542178558e-03f,
--7.556983671e-03f, -7.571774880e-03f, -7.586552160e-03f, -7.601315487e-03f, -7.616064835e-03f, -7.630800180e-03f, -7.645521497e-03f, -7.660228762e-03f, -7.674921949e-03f, -7.689601036e-03f,
--7.704265996e-03f, -7.718916806e-03f, -7.733553441e-03f, -7.748175876e-03f, -7.762784087e-03f, -7.777378049e-03f, -7.791957739e-03f, -7.806523132e-03f, -7.821074203e-03f, -7.835610929e-03f,
--7.850133284e-03f, -7.864641245e-03f, -7.879134787e-03f, -7.893613886e-03f, -7.908078519e-03f, -7.922528660e-03f, -7.936964286e-03f, -7.951385373e-03f, -7.965791896e-03f, -7.980183831e-03f,
--7.994561155e-03f, -8.008923844e-03f, -8.023271873e-03f, -8.037605218e-03f, -8.051923856e-03f, -8.066227763e-03f, -8.080516915e-03f, -8.094791288e-03f, -8.109050858e-03f, -8.123295601e-03f,
--8.137525494e-03f, -8.151740513e-03f, -8.165940635e-03f, -8.180125834e-03f, -8.194296089e-03f, -8.208451375e-03f, -8.222591669e-03f, -8.236716947e-03f, -8.250827185e-03f, -8.264922361e-03f,
--8.279002450e-03f, -8.293067430e-03f, -8.307117276e-03f, -8.321151965e-03f, -8.335171475e-03f, -8.349175780e-03f, -8.363164860e-03f, -8.377138689e-03f, -8.391097245e-03f, -8.405040504e-03f,
--8.418968444e-03f, -8.432881041e-03f, -8.446778271e-03f, -8.460660113e-03f, -8.474526542e-03f, -8.488377536e-03f, -8.502213071e-03f, -8.516033125e-03f, -8.529837675e-03f, -8.543626697e-03f,
--8.557400169e-03f, -8.571158068e-03f, -8.584900371e-03f, -8.598627054e-03f, -8.612338097e-03f, -8.626033474e-03f, -8.639713164e-03f, -8.653377145e-03f, -8.667025392e-03f, -8.680657885e-03f,
--8.694274599e-03f, -8.707875512e-03f, -8.721460603e-03f, -8.735029847e-03f, -8.748583223e-03f, -8.762120709e-03f, -8.775642281e-03f, -8.789147917e-03f, -8.802637595e-03f, -8.816111293e-03f,
--8.829568988e-03f, -8.843010657e-03f, -8.856436279e-03f, -8.869845831e-03f, -8.883239291e-03f, -8.896616637e-03f, -8.909977846e-03f, -8.923322896e-03f, -8.936651766e-03f, -8.949964433e-03f,
--8.963260876e-03f, -8.976541071e-03f, -8.989804997e-03f, -9.003052632e-03f, -9.016283955e-03f, -9.029498942e-03f, -9.042697573e-03f, -9.055879825e-03f, -9.069045677e-03f, -9.082195107e-03f,
--9.095328093e-03f, -9.108444612e-03f, -9.121544645e-03f, -9.134628168e-03f, -9.147695161e-03f, -9.160745601e-03f, -9.173779467e-03f, -9.186796738e-03f, -9.199797392e-03f, -9.212781406e-03f,
--9.225748761e-03f, -9.238699435e-03f, -9.251633405e-03f, -9.264550651e-03f, -9.277451151e-03f, -9.290334885e-03f, -9.303201829e-03f, -9.316051965e-03f, -9.328885269e-03f, -9.341701722e-03f,
--9.354501301e-03f, -9.367283986e-03f, -9.380049756e-03f, -9.392798589e-03f, -9.405530464e-03f, -9.418245361e-03f, -9.430943258e-03f, -9.443624135e-03f, -9.456287970e-03f, -9.468934743e-03f,
--9.481564432e-03f, -9.494177018e-03f, -9.506772478e-03f, -9.519350793e-03f, -9.531911941e-03f, -9.544455903e-03f, -9.556982656e-03f, -9.569492181e-03f, -9.581984456e-03f, -9.594459462e-03f,
--9.606917178e-03f, -9.619357583e-03f, -9.631780657e-03f, -9.644186379e-03f, -9.656574728e-03f, -9.668945685e-03f, -9.681299229e-03f, -9.693635340e-03f, -9.705953997e-03f, -9.718255180e-03f,
--9.730538869e-03f, -9.742805044e-03f, -9.755053684e-03f, -9.767284769e-03f, -9.779498279e-03f, -9.791694195e-03f, -9.803872495e-03f, -9.816033161e-03f, -9.828176171e-03f, -9.840301506e-03f,
--9.852409147e-03f, -9.864499072e-03f, -9.876571263e-03f, -9.888625700e-03f, -9.900662361e-03f, -9.912681229e-03f, -9.924682283e-03f, -9.936665503e-03f, -9.948630871e-03f, -9.960578365e-03f,
--9.972507966e-03f, -9.984419656e-03f, -9.996313414e-03f, -1.000818922e-02f, -1.002004706e-02f, -1.003188690e-02f, -1.004370874e-02f, -1.005551255e-02f, -1.006729830e-02f, -1.007906600e-02f,
--1.009081560e-02f, -1.010254710e-02f, -1.011426047e-02f, -1.012595570e-02f, -1.013763276e-02f, -1.014929164e-02f, -1.016093232e-02f, -1.017255478e-02f, -1.018415900e-02f, -1.019574496e-02f,
--1.020731264e-02f, -1.021886202e-02f, -1.023039309e-02f, -1.024190583e-02f, -1.025340021e-02f, -1.026487621e-02f, -1.027633383e-02f, -1.028777303e-02f, -1.029919381e-02f, -1.031059614e-02f,
--1.032198001e-02f, -1.033334538e-02f, -1.034469226e-02f, -1.035602062e-02f, -1.036733043e-02f, -1.037862168e-02f, -1.038989436e-02f, -1.040114845e-02f, -1.041238391e-02f, -1.042360075e-02f,
--1.043479894e-02f, -1.044597845e-02f, -1.045713928e-02f, -1.046828141e-02f, -1.047940481e-02f, -1.049050947e-02f, -1.050159537e-02f, -1.051266249e-02f, -1.052371082e-02f, -1.053474033e-02f,
--1.054575101e-02f, -1.055674284e-02f, -1.056771580e-02f, -1.057866988e-02f, -1.058960505e-02f, -1.060052130e-02f, -1.061141862e-02f, -1.062229697e-02f, -1.063315635e-02f, -1.064399674e-02f,
--1.065481812e-02f, -1.066562048e-02f, -1.067640378e-02f, -1.068716803e-02f, -1.069791319e-02f, -1.070863926e-02f, -1.071934621e-02f, -1.073003403e-02f, -1.074070271e-02f, -1.075135221e-02f,
--1.076198253e-02f, -1.077259365e-02f, -1.078318554e-02f, -1.079375821e-02f, -1.080431162e-02f, -1.081484576e-02f, -1.082536061e-02f, -1.083585615e-02f, -1.084633238e-02f, -1.085678927e-02f,
--1.086722680e-02f, -1.087764496e-02f, -1.088804373e-02f, -1.089842309e-02f, -1.090878303e-02f, -1.091912353e-02f, -1.092944458e-02f, -1.093974615e-02f, -1.095002823e-02f, -1.096029080e-02f,
--1.097053386e-02f, -1.098075737e-02f, -1.099096132e-02f, -1.100114571e-02f, -1.101131050e-02f, -1.102145569e-02f, -1.103158125e-02f, -1.104168718e-02f, -1.105177345e-02f, -1.106184005e-02f,
--1.107188697e-02f, -1.108191418e-02f, -1.109192167e-02f, -1.110190942e-02f, -1.111187743e-02f, -1.112182566e-02f, -1.113175411e-02f, -1.114166276e-02f, -1.115155159e-02f, -1.116142059e-02f,
--1.117126975e-02f, -1.118109903e-02f, -1.119090844e-02f, -1.120069796e-02f, -1.121046756e-02f, -1.122021723e-02f, -1.122994697e-02f, -1.123965674e-02f, -1.124934654e-02f, -1.125901635e-02f,
--1.126866615e-02f, -1.127829593e-02f, -1.128790568e-02f, -1.129749537e-02f, -1.130706500e-02f, -1.131661455e-02f, -1.132614399e-02f, -1.133565333e-02f, -1.134514253e-02f, -1.135461159e-02f,
--1.136406050e-02f, -1.137348922e-02f, -1.138289776e-02f, -1.139228610e-02f, -1.140165421e-02f, -1.141100209e-02f, -1.142032972e-02f, -1.142963709e-02f, -1.143892418e-02f, -1.144819097e-02f,
--1.145743745e-02f, -1.146666361e-02f, -1.147586943e-02f, -1.148505490e-02f, -1.149422000e-02f, -1.150336471e-02f, -1.151248903e-02f, -1.152159294e-02f, -1.153067642e-02f, -1.153973946e-02f,
--1.154878204e-02f, -1.155780415e-02f, -1.156680578e-02f, -1.157578691e-02f, -1.158474753e-02f, -1.159368762e-02f, -1.160260716e-02f, -1.161150615e-02f, -1.162038458e-02f, -1.162924241e-02f,
--1.163807965e-02f, -1.164689627e-02f, -1.165569227e-02f, -1.166446763e-02f, -1.167322233e-02f, -1.168195637e-02f, -1.169066972e-02f, -1.169936237e-02f, -1.170803432e-02f, -1.171668554e-02f,
--1.172531602e-02f, -1.173392575e-02f, -1.174251472e-02f, -1.175108291e-02f, -1.175963030e-02f, -1.176815689e-02f, -1.177666266e-02f, -1.178514760e-02f, -1.179361169e-02f, -1.180205491e-02f,
--1.181047727e-02f, -1.181887874e-02f, -1.182725931e-02f, -1.183561896e-02f, -1.184395769e-02f, -1.185227548e-02f, -1.186057232e-02f, -1.186884819e-02f, -1.187710308e-02f, -1.188533698e-02f,
--1.189354987e-02f, -1.190174174e-02f, -1.190991259e-02f, -1.191806239e-02f, -1.192619113e-02f, -1.193429880e-02f, -1.194238539e-02f, -1.195045088e-02f, -1.195849527e-02f, -1.196651853e-02f,
--1.197452067e-02f, -1.198250165e-02f, -1.199046148e-02f, -1.199840013e-02f, -1.200631760e-02f, -1.201421388e-02f, -1.202208894e-02f, -1.202994279e-02f, -1.203777540e-02f, -1.204558676e-02f,
--1.205337687e-02f, -1.206114571e-02f, -1.206889326e-02f, -1.207661952e-02f, -1.208432448e-02f, -1.209200811e-02f, -1.209967041e-02f, -1.210731137e-02f, -1.211493098e-02f, -1.212252922e-02f,
--1.213010607e-02f, -1.213766154e-02f, -1.214519561e-02f, -1.215270826e-02f, -1.216019949e-02f, -1.216766927e-02f, -1.217511761e-02f, -1.218254449e-02f, -1.218994989e-02f, -1.219733381e-02f,
--1.220469624e-02f, -1.221203715e-02f, -1.221935655e-02f, -1.222665442e-02f, -1.223393074e-02f, -1.224118552e-02f, -1.224841873e-02f, -1.225563036e-02f, -1.226282041e-02f, -1.226998885e-02f,
--1.227713569e-02f, -1.228426091e-02f, -1.229136450e-02f, -1.229844645e-02f, -1.230550674e-02f, -1.231254537e-02f, -1.231956232e-02f, -1.232655759e-02f, -1.233353116e-02f, -1.234048302e-02f,
--1.234741316e-02f, -1.235432158e-02f, -1.236120825e-02f, -1.236807317e-02f, -1.237491634e-02f, -1.238173773e-02f, -1.238853734e-02f, -1.239531515e-02f, -1.240207116e-02f, -1.240880536e-02f,
--1.241551774e-02f, -1.242220827e-02f, -1.242887697e-02f, -1.243552381e-02f, -1.244214878e-02f, -1.244875188e-02f, -1.245533310e-02f, -1.246189241e-02f, -1.246842983e-02f, -1.247494532e-02f,
--1.248143889e-02f, -1.248791052e-02f, -1.249436021e-02f, -1.250078794e-02f, -1.250719371e-02f, -1.251357750e-02f, -1.251993931e-02f, -1.252627912e-02f, -1.253259693e-02f, -1.253889272e-02f,
--1.254516649e-02f, -1.255141822e-02f, -1.255764791e-02f, -1.256385555e-02f, -1.257004113e-02f, -1.257620464e-02f, -1.258234606e-02f, -1.258846540e-02f, -1.259456263e-02f, -1.260063776e-02f,
--1.260669077e-02f, -1.261272165e-02f, -1.261873039e-02f, -1.262471699e-02f, -1.263068144e-02f, -1.263662372e-02f, -1.264254383e-02f, -1.264844176e-02f, -1.265431749e-02f, -1.266017103e-02f,
--1.266600236e-02f, -1.267181147e-02f, -1.267759836e-02f, -1.268336301e-02f, -1.268910542e-02f, -1.269482558e-02f, -1.270052347e-02f, -1.270619910e-02f, -1.271185245e-02f, -1.271748351e-02f,
--1.272309228e-02f, -1.272867875e-02f, -1.273424290e-02f, -1.273978474e-02f, -1.274530425e-02f, -1.275080142e-02f, -1.275627624e-02f, -1.276172872e-02f, -1.276715883e-02f, -1.277256657e-02f,
--1.277795194e-02f, -1.278331492e-02f, -1.278865551e-02f, -1.279397370e-02f, -1.279926948e-02f, -1.280454284e-02f, -1.280979378e-02f, -1.281502228e-02f, -1.282022835e-02f, -1.282541196e-02f,
--1.283057313e-02f, -1.283571182e-02f, -1.284082805e-02f, -1.284592180e-02f, -1.285099307e-02f, -1.285604184e-02f, -1.286106811e-02f, -1.286607187e-02f, -1.287105311e-02f, -1.287601184e-02f,
--1.288094803e-02f, -1.288586168e-02f, -1.289075279e-02f, -1.289562135e-02f, -1.290046735e-02f, -1.290529079e-02f, -1.291009165e-02f, -1.291486993e-02f, -1.291962562e-02f, -1.292435872e-02f,
--1.292906922e-02f, -1.293375712e-02f, -1.293842239e-02f, -1.294306505e-02f, -1.294768508e-02f, -1.295228247e-02f, -1.295685722e-02f, -1.296140933e-02f, -1.296593878e-02f, -1.297044556e-02f,
--1.297492969e-02f, -1.297939113e-02f, -1.298382990e-02f, -1.298824598e-02f, -1.299263936e-02f, -1.299701005e-02f, -1.300135803e-02f, -1.300568330e-02f, -1.300998585e-02f, -1.301426568e-02f,
--1.301852278e-02f, -1.302275714e-02f, -1.302696875e-02f, -1.303115762e-02f, -1.303532374e-02f, -1.303946709e-02f, -1.304358768e-02f, -1.304768550e-02f, -1.305176054e-02f, -1.305581279e-02f,
--1.305984226e-02f, -1.306384893e-02f, -1.306783280e-02f, -1.307179387e-02f, -1.307573212e-02f, -1.307964756e-02f, -1.308354017e-02f, -1.308740996e-02f, -1.309125691e-02f, -1.309508102e-02f,
--1.309888229e-02f, -1.310266071e-02f, -1.310641628e-02f, -1.311014898e-02f, -1.311385882e-02f, -1.311754579e-02f, -1.312120989e-02f, -1.312485111e-02f, -1.312846944e-02f, -1.313206488e-02f,
--1.313563742e-02f, -1.313918707e-02f, -1.314271381e-02f, -1.314621764e-02f, -1.314969856e-02f, -1.315315656e-02f, -1.315659164e-02f, -1.316000378e-02f, -1.316339300e-02f, -1.316675927e-02f,
--1.317010261e-02f, -1.317342300e-02f, -1.317672044e-02f, -1.317999492e-02f, -1.318324644e-02f, -1.318647500e-02f, -1.318968060e-02f, -1.319286321e-02f, -1.319602286e-02f, -1.319915952e-02f,
--1.320227320e-02f, -1.320536389e-02f, -1.320843158e-02f, -1.321147628e-02f, -1.321449798e-02f, -1.321749667e-02f, -1.322047236e-02f, -1.322342503e-02f, -1.322635469e-02f, -1.322926132e-02f,
--1.323214494e-02f, -1.323500552e-02f, -1.323784308e-02f, -1.324065760e-02f, -1.324344908e-02f, -1.324621752e-02f, -1.324896291e-02f, -1.325168526e-02f, -1.325438455e-02f, -1.325706079e-02f,
--1.325971397e-02f, -1.326234409e-02f, -1.326495114e-02f, -1.326753513e-02f, -1.327009604e-02f, -1.327263388e-02f, -1.327514864e-02f, -1.327764032e-02f, -1.328010892e-02f, -1.328255443e-02f,
--1.328497685e-02f, -1.328737618e-02f, -1.328975241e-02f, -1.329210555e-02f, -1.329443558e-02f, -1.329674251e-02f, -1.329902634e-02f, -1.330128705e-02f, -1.330352466e-02f, -1.330573915e-02f,
--1.330793052e-02f, -1.331009878e-02f, -1.331224391e-02f, -1.331436592e-02f, -1.331646480e-02f, -1.331854056e-02f, -1.332059318e-02f, -1.332262267e-02f, -1.332462903e-02f, -1.332661225e-02f,
--1.332857233e-02f, -1.333050927e-02f, -1.333242306e-02f, -1.333431371e-02f, -1.333618121e-02f, -1.333802557e-02f, -1.333984677e-02f, -1.334164482e-02f, -1.334341971e-02f, -1.334517145e-02f,
--1.334690003e-02f, -1.334860544e-02f, -1.335028770e-02f, -1.335194679e-02f, -1.335358272e-02f, -1.335519549e-02f, -1.335678508e-02f, -1.335835151e-02f, -1.335989476e-02f, -1.336141484e-02f,
--1.336291175e-02f, -1.336438549e-02f, -1.336583605e-02f, -1.336726343e-02f, -1.336866764e-02f, -1.337004866e-02f, -1.337140651e-02f, -1.337274117e-02f, -1.337405265e-02f, -1.337534095e-02f,
--1.337660607e-02f, -1.337784800e-02f, -1.337906674e-02f, -1.338026230e-02f, -1.338143467e-02f, -1.338258385e-02f, -1.338370984e-02f, -1.338481265e-02f, -1.338589226e-02f, -1.338694868e-02f,
--1.338798192e-02f, -1.338899196e-02f, -1.338997881e-02f, -1.339094246e-02f, -1.339188293e-02f, -1.339280020e-02f, -1.339369427e-02f, -1.339456516e-02f, -1.339541285e-02f, -1.339623735e-02f,
--1.339703865e-02f, -1.339781676e-02f, -1.339857167e-02f, -1.339930339e-02f, -1.340001192e-02f, -1.340069725e-02f, -1.340135939e-02f, -1.340199834e-02f, -1.340261409e-02f, -1.340320665e-02f,
--1.340377602e-02f, -1.340432219e-02f, -1.340484518e-02f, -1.340534497e-02f, -1.340582157e-02f, -1.340627497e-02f, -1.340670519e-02f, -1.340711222e-02f, -1.340749606e-02f, -1.340785671e-02f,
--1.340819418e-02f, -1.340850846e-02f, -1.340879955e-02f, -1.340906745e-02f, -1.340931217e-02f, -1.340953371e-02f, -1.340973207e-02f, -1.340990724e-02f, -1.341005923e-02f, -1.341018804e-02f,
--1.341029368e-02f, -1.341037614e-02f, -1.341043542e-02f, -1.341047152e-02f, -1.341048445e-02f, -1.341047421e-02f, -1.341044080e-02f, -1.341038422e-02f, -1.341030447e-02f, -1.341020156e-02f,
--1.341007547e-02f, -1.340992623e-02f, -1.340975382e-02f, -1.340955825e-02f, -1.340933952e-02f, -1.340909764e-02f, -1.340883260e-02f, -1.340854440e-02f, -1.340823306e-02f, -1.340789856e-02f,
--1.340754091e-02f, -1.340716012e-02f, -1.340675619e-02f, -1.340632911e-02f, -1.340587889e-02f, -1.340540553e-02f, -1.340490904e-02f, -1.340438941e-02f, -1.340384666e-02f, -1.340328077e-02f,
--1.340269175e-02f, -1.340207961e-02f, -1.340144435e-02f, -1.340078597e-02f, -1.340010447e-02f, -1.339939985e-02f, -1.339867212e-02f, -1.339792128e-02f, -1.339714734e-02f, -1.339635029e-02f,
--1.339553014e-02f, -1.339468688e-02f, -1.339382054e-02f, -1.339293109e-02f, -1.339201856e-02f, -1.339108294e-02f, -1.339012423e-02f, -1.338914244e-02f, -1.338813758e-02f, -1.338710963e-02f,
--1.338605861e-02f, -1.338498453e-02f, -1.338388737e-02f, -1.338276716e-02f, -1.338162388e-02f, -1.338045754e-02f, -1.337926815e-02f, -1.337805572e-02f, -1.337682023e-02f, -1.337556170e-02f,
--1.337428013e-02f, -1.337297553e-02f, -1.337164789e-02f, -1.337029722e-02f, -1.336892352e-02f, -1.336752681e-02f, -1.336610707e-02f, -1.336466432e-02f, -1.336319856e-02f, -1.336170980e-02f,
--1.336019803e-02f, -1.335866326e-02f, -1.335710550e-02f, -1.335552474e-02f, -1.335392100e-02f, -1.335229427e-02f, -1.335064457e-02f, -1.334897189e-02f, -1.334727624e-02f, -1.334555762e-02f,
--1.334381604e-02f, -1.334205151e-02f, -1.334026402e-02f, -1.333845358e-02f, -1.333662019e-02f, -1.333476387e-02f, -1.333288461e-02f, -1.333098242e-02f, -1.332905730e-02f, -1.332710926e-02f,
--1.332513831e-02f, -1.332314444e-02f, -1.332112766e-02f, -1.331908798e-02f, -1.331702540e-02f, -1.331493993e-02f, -1.331283157e-02f, -1.331070033e-02f, -1.330854620e-02f, -1.330636921e-02f,
--1.330416935e-02f, -1.330194662e-02f, -1.329970103e-02f, -1.329743259e-02f, -1.329514131e-02f, -1.329282718e-02f, -1.329049021e-02f, -1.328813041e-02f, -1.328574779e-02f, -1.328334234e-02f,
--1.328091408e-02f, -1.327846301e-02f, -1.327598913e-02f, -1.327349245e-02f, -1.327097298e-02f, -1.326843072e-02f, -1.326586568e-02f, -1.326327787e-02f, -1.326066728e-02f, -1.325803393e-02f,
--1.325537782e-02f, -1.325269895e-02f, -1.324999734e-02f, -1.324727299e-02f, -1.324452590e-02f, -1.324175608e-02f, -1.323896354e-02f, -1.323614828e-02f, -1.323331031e-02f, -1.323044963e-02f,
--1.322756626e-02f, -1.322466019e-02f, -1.322173144e-02f, -1.321878001e-02f, -1.321580591e-02f, -1.321280913e-02f, -1.320978970e-02f, -1.320674762e-02f, -1.320368288e-02f, -1.320059551e-02f,
--1.319748550e-02f, -1.319435287e-02f, -1.319119761e-02f, -1.318801974e-02f, -1.318481926e-02f, -1.318159618e-02f, -1.317835051e-02f, -1.317508225e-02f, -1.317179141e-02f, -1.316847800e-02f,
--1.316514202e-02f, -1.316178348e-02f, -1.315840239e-02f, -1.315499876e-02f, -1.315157259e-02f, -1.314812389e-02f, -1.314465266e-02f, -1.314115892e-02f, -1.313764267e-02f, -1.313410392e-02f,
--1.313054268e-02f, -1.312695895e-02f, -1.312335274e-02f, -1.311972406e-02f, -1.311607292e-02f, -1.311239931e-02f, -1.310870327e-02f, -1.310498478e-02f, -1.310124385e-02f, -1.309748050e-02f,
--1.309369474e-02f, -1.308988656e-02f, -1.308605598e-02f, -1.308220301e-02f, -1.307832765e-02f, -1.307442991e-02f, -1.307050980e-02f, -1.306656733e-02f, -1.306260250e-02f, -1.305861533e-02f,
--1.305460582e-02f, -1.305057398e-02f, -1.304651982e-02f, -1.304244335e-02f, -1.303834457e-02f, -1.303422349e-02f, -1.303008013e-02f, -1.302591448e-02f, -1.302172657e-02f, -1.301751639e-02f,
--1.301328396e-02f, -1.300902928e-02f, -1.300475236e-02f, -1.300045322e-02f, -1.299613185e-02f, -1.299178828e-02f, -1.298742250e-02f, -1.298303453e-02f, -1.297862437e-02f, -1.297419204e-02f,
--1.296973754e-02f, -1.296526088e-02f, -1.296076207e-02f, -1.295624113e-02f, -1.295169805e-02f, -1.294713285e-02f, -1.294254554e-02f, -1.293793612e-02f, -1.293330461e-02f, -1.292865102e-02f,
--1.292397535e-02f, -1.291927761e-02f, -1.291455781e-02f, -1.290981597e-02f, -1.290505209e-02f, -1.290026618e-02f, -1.289545825e-02f, -1.289062831e-02f, -1.288577638e-02f, -1.288090245e-02f,
--1.287600654e-02f, -1.287108865e-02f, -1.286614881e-02f, -1.286118702e-02f, -1.285620328e-02f, -1.285119761e-02f, -1.284617002e-02f, -1.284112052e-02f, -1.283604912e-02f, -1.283095582e-02f,
--1.282584064e-02f, -1.282070359e-02f, -1.281554468e-02f, -1.281036391e-02f, -1.280516130e-02f, -1.279993687e-02f, -1.279469061e-02f, -1.278942254e-02f, -1.278413267e-02f, -1.277882101e-02f,
--1.277348756e-02f, -1.276813235e-02f, -1.276275539e-02f, -1.275735667e-02f, -1.275193621e-02f, -1.274649403e-02f, -1.274103013e-02f, -1.273554453e-02f, -1.273003723e-02f, -1.272450824e-02f,
--1.271895759e-02f, -1.271338526e-02f, -1.270779129e-02f, -1.270217568e-02f, -1.269653843e-02f, -1.269087957e-02f, -1.268519910e-02f, -1.267949703e-02f, -1.267377337e-02f, -1.266802814e-02f,
--1.266226135e-02f, -1.265647300e-02f, -1.265066312e-02f, -1.264483170e-02f, -1.263897876e-02f, -1.263310432e-02f, -1.262720837e-02f, -1.262129095e-02f, -1.261535205e-02f, -1.260939169e-02f,
--1.260340988e-02f, -1.259740663e-02f, -1.259138195e-02f, -1.258533585e-02f, -1.257926836e-02f, -1.257317947e-02f, -1.256706920e-02f, -1.256093756e-02f, -1.255478456e-02f, -1.254861022e-02f,
--1.254241454e-02f, -1.253619755e-02f, -1.252995924e-02f, -1.252369964e-02f, -1.251741875e-02f, -1.251111658e-02f, -1.250479316e-02f, -1.249844849e-02f, -1.249208258e-02f, -1.248569544e-02f,
--1.247928709e-02f, -1.247285755e-02f, -1.246640681e-02f, -1.245993490e-02f, -1.245344182e-02f, -1.244692760e-02f, -1.244039223e-02f, -1.243383574e-02f, -1.242725814e-02f, -1.242065943e-02f,
--1.241403964e-02f, -1.240739877e-02f, -1.240073684e-02f, -1.239405385e-02f, -1.238734983e-02f, -1.238062479e-02f, -1.237387873e-02f, -1.236711168e-02f, -1.236032363e-02f, -1.235351462e-02f,
--1.234668464e-02f, -1.233983372e-02f, -1.233296186e-02f, -1.232606908e-02f, -1.231915539e-02f, -1.231222081e-02f, -1.230526534e-02f, -1.229828901e-02f, -1.229129182e-02f, -1.228427378e-02f,
--1.227723492e-02f, -1.227017525e-02f, -1.226309477e-02f, -1.225599350e-02f, -1.224887145e-02f, -1.224172865e-02f, -1.223456509e-02f, -1.222738080e-02f, -1.222017579e-02f, -1.221295007e-02f,
--1.220570366e-02f, -1.219843657e-02f, -1.219114881e-02f, -1.218384039e-02f, -1.217651134e-02f, -1.216916166e-02f, -1.216179138e-02f, -1.215440049e-02f, -1.214698902e-02f, -1.213955698e-02f,
--1.213210438e-02f, -1.212463125e-02f, -1.211713758e-02f, -1.210962340e-02f, -1.210208872e-02f, -1.209453356e-02f, -1.208695793e-02f, -1.207936184e-02f, -1.207174530e-02f, -1.206410834e-02f,
--1.205645097e-02f, -1.204877319e-02f, -1.204107503e-02f, -1.203335650e-02f, -1.202561762e-02f, -1.201785839e-02f, -1.201007884e-02f, -1.200227897e-02f, -1.199445880e-02f, -1.198661836e-02f,
--1.197875764e-02f, -1.197087667e-02f, -1.196297546e-02f, -1.195505403e-02f, -1.194711238e-02f, -1.193915055e-02f, -1.193116853e-02f, -1.192316635e-02f, -1.191514402e-02f, -1.190710155e-02f,
--1.189903897e-02f, -1.189095628e-02f, -1.188285350e-02f, -1.187473064e-02f, -1.186658773e-02f, -1.185842477e-02f, -1.185024178e-02f, -1.184203878e-02f, -1.183381579e-02f, -1.182557281e-02f,
--1.181730986e-02f, -1.180902696e-02f, -1.180072412e-02f, -1.179240136e-02f, -1.178405870e-02f, -1.177569614e-02f, -1.176731371e-02f, -1.175891142e-02f, -1.175048929e-02f, -1.174204733e-02f,
--1.173358556e-02f, -1.172510400e-02f, -1.171660265e-02f, -1.170808153e-02f, -1.169954067e-02f, -1.169098008e-02f, -1.168239977e-02f, -1.167379975e-02f, -1.166518005e-02f, -1.165654069e-02f,
--1.164788167e-02f, -1.163920301e-02f, -1.163050473e-02f, -1.162178685e-02f, -1.161304937e-02f, -1.160429233e-02f, -1.159551573e-02f, -1.158671959e-02f, -1.157790392e-02f, -1.156906875e-02f,
--1.156021409e-02f, -1.155133995e-02f, -1.154244635e-02f, -1.153353331e-02f, -1.152460085e-02f, -1.151564898e-02f, -1.150667771e-02f, -1.149768707e-02f, -1.148867707e-02f, -1.147964773e-02f,
--1.147059907e-02f, -1.146153109e-02f, -1.145244382e-02f, -1.144333728e-02f, -1.143421148e-02f, -1.142506644e-02f, -1.141590217e-02f, -1.140671869e-02f, -1.139751602e-02f, -1.138829418e-02f,
--1.137905319e-02f, -1.136979305e-02f, -1.136051379e-02f, -1.135121542e-02f, -1.134189797e-02f, -1.133256144e-02f, -1.132320586e-02f, -1.131383124e-02f, -1.130443760e-02f, -1.129502496e-02f,
--1.128559334e-02f, -1.127614275e-02f, -1.126667320e-02f, -1.125718473e-02f, -1.124767734e-02f, -1.123815105e-02f, -1.122860588e-02f, -1.121904185e-02f, -1.120945897e-02f, -1.119985726e-02f,
--1.119023675e-02f, -1.118059744e-02f, -1.117093936e-02f, -1.116126252e-02f, -1.115156694e-02f, -1.114185264e-02f, -1.113211964e-02f, -1.112236795e-02f, -1.111259759e-02f, -1.110280859e-02f,
--1.109300095e-02f, -1.108317469e-02f, -1.107332985e-02f, -1.106346642e-02f, -1.105358444e-02f, -1.104368391e-02f, -1.103376486e-02f, -1.102382730e-02f, -1.101387126e-02f, -1.100389675e-02f,
--1.099390379e-02f, -1.098389239e-02f, -1.097386259e-02f, -1.096381438e-02f, -1.095374780e-02f, -1.094366286e-02f, -1.093355958e-02f, -1.092343798e-02f, -1.091329808e-02f, -1.090313989e-02f,
--1.089296344e-02f, -1.088276873e-02f, -1.087255580e-02f, -1.086232466e-02f, -1.085207533e-02f, -1.084180782e-02f, -1.083152216e-02f, -1.082121837e-02f, -1.081089645e-02f, -1.080055644e-02f,
--1.079019836e-02f, -1.077982221e-02f, -1.076942802e-02f, -1.075901581e-02f, -1.074858560e-02f, -1.073813740e-02f, -1.072767124e-02f, -1.071718713e-02f, -1.070668510e-02f, -1.069616516e-02f,
--1.068562733e-02f, -1.067507163e-02f, -1.066449808e-02f, -1.065390671e-02f, -1.064329752e-02f, -1.063267053e-02f, -1.062202578e-02f, -1.061136327e-02f, -1.060068303e-02f, -1.058998508e-02f,
--1.057926943e-02f, -1.056853610e-02f, -1.055778512e-02f, -1.054701651e-02f, -1.053623027e-02f, -1.052542644e-02f, -1.051460504e-02f, -1.050376607e-02f, -1.049290957e-02f, -1.048203555e-02f,
--1.047114403e-02f, -1.046023503e-02f, -1.044930857e-02f, -1.043836468e-02f, -1.042740336e-02f, -1.041642465e-02f, -1.040542856e-02f, -1.039441511e-02f, -1.038338432e-02f, -1.037233621e-02f,
--1.036127080e-02f, -1.035018811e-02f, -1.033908816e-02f, -1.032797098e-02f, -1.031683657e-02f, -1.030568497e-02f, -1.029451619e-02f, -1.028333025e-02f, -1.027212717e-02f, -1.026090698e-02f,
--1.024966969e-02f, -1.023841533e-02f, -1.022714390e-02f, -1.021585544e-02f, -1.020454997e-02f, -1.019322750e-02f, -1.018188806e-02f, -1.017053166e-02f, -1.015915834e-02f, -1.014776809e-02f,
--1.013636096e-02f, -1.012493696e-02f, -1.011349610e-02f, -1.010203842e-02f, -1.009056392e-02f, -1.007907264e-02f, -1.006756459e-02f, -1.005603979e-02f, -1.004449827e-02f, -1.003294004e-02f,
--1.002136513e-02f, -1.000977356e-02f, -9.998165340e-03f, -9.986540502e-03f, -9.974899064e-03f, -9.963241047e-03f, -9.951566471e-03f, -9.939875359e-03f, -9.928167731e-03f, -9.916443609e-03f,
--9.904703013e-03f, -9.892945964e-03f, -9.881172485e-03f, -9.869382596e-03f, -9.857576318e-03f, -9.845753673e-03f, -9.833914683e-03f, -9.822059368e-03f, -9.810187750e-03f, -9.798299850e-03f,
--9.786395690e-03f, -9.774475291e-03f, -9.762538676e-03f, -9.750585864e-03f, -9.738616879e-03f, -9.726631740e-03f, -9.714630471e-03f, -9.702613093e-03f, -9.690579627e-03f, -9.678530096e-03f,
--9.666464520e-03f, -9.654382921e-03f, -9.642285322e-03f, -9.630171744e-03f, -9.618042209e-03f, -9.605896739e-03f, -9.593735356e-03f, -9.581558081e-03f, -9.569364936e-03f, -9.557155944e-03f,
--9.544931127e-03f, -9.532690506e-03f, -9.520434103e-03f, -9.508161941e-03f, -9.495874042e-03f, -9.483570427e-03f, -9.471251120e-03f, -9.458916141e-03f, -9.446565514e-03f, -9.434199260e-03f,
--9.421817401e-03f, -9.409419961e-03f, -9.397006961e-03f, -9.384578423e-03f, -9.372134371e-03f, -9.359674825e-03f, -9.347199810e-03f, -9.334709346e-03f, -9.322203457e-03f, -9.309682165e-03f,
--9.297145492e-03f, -9.284593462e-03f, -9.272026096e-03f, -9.259443417e-03f, -9.246845448e-03f, -9.234232212e-03f, -9.221603730e-03f, -9.208960026e-03f, -9.196301122e-03f, -9.183627042e-03f,
--9.170937807e-03f, -9.158233441e-03f, -9.145513966e-03f, -9.132779406e-03f, -9.120029783e-03f, -9.107265119e-03f, -9.094485439e-03f, -9.081690764e-03f, -9.068881118e-03f, -9.056056524e-03f,
--9.043217004e-03f, -9.030362582e-03f, -9.017493281e-03f, -9.004609123e-03f, -8.991710133e-03f, -8.978796332e-03f, -8.965867745e-03f, -8.952924394e-03f, -8.939966302e-03f, -8.926993494e-03f,
--8.914005991e-03f, -8.901003817e-03f, -8.887986996e-03f, -8.874955551e-03f, -8.861909504e-03f, -8.848848881e-03f, -8.835773703e-03f, -8.822683994e-03f, -8.809579779e-03f, -8.796461079e-03f,
--8.783327919e-03f, -8.770180322e-03f, -8.757018312e-03f, -8.743841912e-03f, -8.730651146e-03f, -8.717446037e-03f, -8.704226609e-03f, -8.690992886e-03f, -8.677744891e-03f, -8.664482648e-03f,
--8.651206181e-03f, -8.637915513e-03f, -8.624610668e-03f, -8.611291670e-03f, -8.597958543e-03f, -8.584611311e-03f, -8.571249997e-03f, -8.557874626e-03f, -8.544485220e-03f, -8.531081805e-03f,
--8.517664404e-03f, -8.504233041e-03f, -8.490787739e-03f, -8.477328524e-03f, -8.463855419e-03f, -8.450368448e-03f, -8.436867635e-03f, -8.423353005e-03f, -8.409824581e-03f, -8.396282387e-03f,
--8.382726448e-03f, -8.369156788e-03f, -8.355573431e-03f, -8.341976402e-03f, -8.328365724e-03f, -8.314741422e-03f, -8.301103520e-03f, -8.287452043e-03f, -8.273787014e-03f, -8.260108459e-03f,
--8.246416401e-03f, -8.232710866e-03f, -8.218991876e-03f, -8.205259458e-03f, -8.191513635e-03f, -8.177754432e-03f, -8.163981873e-03f, -8.150195984e-03f, -8.136396788e-03f, -8.122584309e-03f,
--8.108758574e-03f, -8.094919606e-03f, -8.081067430e-03f, -8.067202070e-03f, -8.053323552e-03f, -8.039431900e-03f, -8.025527138e-03f, -8.011609292e-03f, -7.997678387e-03f, -7.983734446e-03f,
--7.969777496e-03f, -7.955807560e-03f, -7.941824664e-03f, -7.927828832e-03f, -7.913820090e-03f, -7.899798462e-03f, -7.885763973e-03f, -7.871716649e-03f, -7.857656514e-03f, -7.843583593e-03f,
--7.829497911e-03f, -7.815399494e-03f, -7.801288366e-03f, -7.787164552e-03f, -7.773028078e-03f, -7.758878969e-03f, -7.744717249e-03f, -7.730542945e-03f, -7.716356081e-03f, -7.702156682e-03f,
--7.687944774e-03f, -7.673720382e-03f, -7.659483531e-03f, -7.645234247e-03f, -7.630972554e-03f, -7.616698479e-03f, -7.602412046e-03f, -7.588113280e-03f, -7.573802208e-03f, -7.559478855e-03f,
--7.545143246e-03f, -7.530795406e-03f, -7.516435362e-03f, -7.502063138e-03f, -7.487678759e-03f, -7.473282253e-03f, -7.458873643e-03f, -7.444452957e-03f, -7.430020218e-03f, -7.415575453e-03f,
--7.401118688e-03f, -7.386649948e-03f, -7.372169259e-03f, -7.357676646e-03f, -7.343172135e-03f, -7.328655752e-03f, -7.314127523e-03f, -7.299587473e-03f, -7.285035629e-03f, -7.270472015e-03f,
--7.255896659e-03f, -7.241309585e-03f, -7.226710819e-03f, -7.212100388e-03f, -7.197478317e-03f, -7.182844632e-03f, -7.168199359e-03f, -7.153542525e-03f, -7.138874154e-03f, -7.124194274e-03f,
--7.109502909e-03f, -7.094800087e-03f, -7.080085832e-03f, -7.065360172e-03f, -7.050623132e-03f, -7.035874738e-03f, -7.021115017e-03f, -7.006343994e-03f, -6.991561696e-03f, -6.976768148e-03f,
--6.961963378e-03f, -6.947147411e-03f, -6.932320274e-03f, -6.917481992e-03f, -6.902632592e-03f, -6.887772100e-03f, -6.872900543e-03f, -6.858017947e-03f, -6.843124338e-03f, -6.828219743e-03f,
--6.813304187e-03f, -6.798377698e-03f, -6.783440301e-03f, -6.768492024e-03f, -6.753532892e-03f, -6.738562932e-03f, -6.723582170e-03f, -6.708590633e-03f, -6.693588348e-03f, -6.678575340e-03f,
--6.663551637e-03f, -6.648517265e-03f, -6.633472251e-03f, -6.618416621e-03f, -6.603350402e-03f, -6.588273619e-03f, -6.573186301e-03f, -6.558088474e-03f, -6.542980164e-03f, -6.527861398e-03f,
--6.512732203e-03f, -6.497592605e-03f, -6.482442632e-03f, -6.467282309e-03f, -6.452111664e-03f, -6.436930724e-03f, -6.421739515e-03f, -6.406538064e-03f, -6.391326398e-03f, -6.376104543e-03f,
--6.360872528e-03f, -6.345630378e-03f, -6.330378120e-03f, -6.315115782e-03f, -6.299843390e-03f, -6.284560971e-03f, -6.269268553e-03f, -6.253966161e-03f, -6.238653824e-03f, -6.223331568e-03f,
--6.207999420e-03f, -6.192657407e-03f, -6.177305557e-03f, -6.161943896e-03f, -6.146572452e-03f, -6.131191251e-03f, -6.115800320e-03f, -6.100399688e-03f, -6.084989380e-03f, -6.069569425e-03f,
--6.054139848e-03f, -6.038700679e-03f, -6.023251942e-03f, -6.007793667e-03f, -5.992325880e-03f, -5.976848608e-03f, -5.961361879e-03f, -5.945865720e-03f, -5.930360159e-03f, -5.914845221e-03f,
--5.899320936e-03f, -5.883787330e-03f, -5.868244430e-03f, -5.852692264e-03f, -5.837130860e-03f, -5.821560244e-03f, -5.805980444e-03f, -5.790391488e-03f, -5.774793403e-03f, -5.759186217e-03f,
--5.743569956e-03f, -5.727944649e-03f, -5.712310323e-03f, -5.696667005e-03f, -5.681014723e-03f, -5.665353504e-03f, -5.649683377e-03f, -5.634004368e-03f, -5.618316505e-03f, -5.602619817e-03f,
--5.586914329e-03f, -5.571200071e-03f, -5.555477069e-03f, -5.539745351e-03f, -5.524004946e-03f, -5.508255880e-03f, -5.492498181e-03f, -5.476731878e-03f, -5.460956997e-03f, -5.445173567e-03f,
--5.429381614e-03f, -5.413581168e-03f, -5.397772256e-03f, -5.381954905e-03f, -5.366129144e-03f, -5.350294999e-03f, -5.334452500e-03f, -5.318601673e-03f, -5.302742547e-03f, -5.286875150e-03f,
--5.270999508e-03f, -5.255115652e-03f, -5.239223607e-03f, -5.223323402e-03f, -5.207415065e-03f, -5.191498625e-03f, -5.175574108e-03f, -5.159641543e-03f, -5.143700957e-03f, -5.127752380e-03f,
--5.111795838e-03f, -5.095831360e-03f, -5.079858974e-03f, -5.063878708e-03f, -5.047890589e-03f, -5.031894647e-03f, -5.015890908e-03f, -4.999879402e-03f, -4.983860156e-03f, -4.967833198e-03f,
--4.951798557e-03f, -4.935756260e-03f, -4.919706336e-03f, -4.903648812e-03f, -4.887583718e-03f, -4.871511081e-03f, -4.855430929e-03f, -4.839343290e-03f, -4.823248194e-03f, -4.807145667e-03f,
--4.791035739e-03f, -4.774918437e-03f, -4.758793790e-03f, -4.742661826e-03f, -4.726522573e-03f, -4.710376059e-03f, -4.694222314e-03f, -4.678061364e-03f, -4.661893239e-03f, -4.645717967e-03f,
--4.629535576e-03f, -4.613346094e-03f, -4.597149551e-03f, -4.580945973e-03f, -4.564735390e-03f, -4.548517830e-03f, -4.532293322e-03f, -4.516061893e-03f, -4.499823573e-03f, -4.483578389e-03f,
--4.467326370e-03f, -4.451067545e-03f, -4.434801942e-03f, -4.418529589e-03f, -4.402250516e-03f, -4.385964750e-03f, -4.369672320e-03f, -4.353373254e-03f, -4.337067582e-03f, -4.320755331e-03f,
--4.304436530e-03f, -4.288111208e-03f, -4.271779394e-03f, -4.255441115e-03f, -4.239096400e-03f, -4.222745279e-03f, -4.206387779e-03f, -4.190023929e-03f, -4.173653758e-03f, -4.157277295e-03f,
--4.140894567e-03f, -4.124505605e-03f, -4.108110436e-03f, -4.091709089e-03f, -4.075301593e-03f, -4.058887976e-03f, -4.042468267e-03f, -4.026042495e-03f, -4.009610689e-03f, -3.993172877e-03f,
--3.976729088e-03f, -3.960279351e-03f, -3.943823695e-03f, -3.927362147e-03f, -3.910894738e-03f, -3.894421495e-03f, -3.877942448e-03f, -3.861457625e-03f, -3.844967056e-03f, -3.828470769e-03f,
--3.811968792e-03f, -3.795461155e-03f, -3.778947886e-03f, -3.762429015e-03f, -3.745904569e-03f, -3.729374579e-03f, -3.712839073e-03f, -3.696298079e-03f, -3.679751627e-03f, -3.663199745e-03f,
--3.646642463e-03f, -3.630079809e-03f, -3.613511812e-03f, -3.596938502e-03f, -3.580359906e-03f, -3.563776055e-03f, -3.547186976e-03f, -3.530592699e-03f, -3.513993253e-03f, -3.497388667e-03f,
--3.480778969e-03f, -3.464164189e-03f, -3.447544356e-03f, -3.430919499e-03f, -3.414289646e-03f, -3.397654827e-03f, -3.381015071e-03f, -3.364370406e-03f, -3.347720863e-03f, -3.331066469e-03f,
--3.314407253e-03f, -3.297743246e-03f, -3.281074476e-03f, -3.264400971e-03f, -3.247722762e-03f, -3.231039877e-03f, -3.214352345e-03f, -3.197660195e-03f, -3.180963457e-03f, -3.164262159e-03f,
--3.147556331e-03f, -3.130846001e-03f, -3.114131199e-03f, -3.097411955e-03f, -3.080688296e-03f, -3.063960252e-03f, -3.047227853e-03f, -3.030491127e-03f, -3.013750104e-03f, -2.997004813e-03f,
--2.980255282e-03f, -2.963501542e-03f, -2.946743621e-03f, -2.929981549e-03f, -2.913215354e-03f, -2.896445066e-03f, -2.879670714e-03f, -2.862892327e-03f, -2.846109935e-03f, -2.829323567e-03f,
--2.812533251e-03f, -2.795739018e-03f, -2.778940896e-03f, -2.762138914e-03f, -2.745333102e-03f, -2.728523490e-03f, -2.711710105e-03f, -2.694892979e-03f, -2.678072139e-03f, -2.661247615e-03f,
--2.644419436e-03f, -2.627587632e-03f, -2.610752233e-03f, -2.593913266e-03f, -2.577070761e-03f, -2.560224749e-03f, -2.543375257e-03f, -2.526522316e-03f, -2.509665955e-03f, -2.492806202e-03f,
--2.475943088e-03f, -2.459076641e-03f, -2.442206892e-03f, -2.425333868e-03f, -2.408457600e-03f, -2.391578117e-03f, -2.374695449e-03f, -2.357809624e-03f, -2.340920671e-03f, -2.324028621e-03f,
--2.307133503e-03f, -2.290235346e-03f, -2.273334179e-03f, -2.256430031e-03f, -2.239522933e-03f, -2.222612913e-03f, -2.205700001e-03f, -2.188784226e-03f, -2.171865618e-03f, -2.154944206e-03f,
--2.138020019e-03f, -2.121093086e-03f, -2.104163438e-03f, -2.087231104e-03f, -2.070296112e-03f, -2.053358492e-03f, -2.036418275e-03f, -2.019475488e-03f, -2.002530162e-03f, -1.985582326e-03f,
--1.968632009e-03f, -1.951679241e-03f, -1.934724051e-03f, -1.917766469e-03f, -1.900806524e-03f, -1.883844245e-03f, -1.866879662e-03f, -1.849912805e-03f, -1.832943702e-03f, -1.815972383e-03f,
--1.798998878e-03f, -1.782023216e-03f, -1.765045427e-03f, -1.748065540e-03f, -1.731083584e-03f, -1.714099589e-03f, -1.697113584e-03f, -1.680125599e-03f, -1.663135663e-03f, -1.646143806e-03f,
--1.629150057e-03f, -1.612154446e-03f, -1.595157001e-03f, -1.578157754e-03f, -1.561156732e-03f, -1.544153966e-03f, -1.527149484e-03f, -1.510143317e-03f, -1.493135494e-03f, -1.476126044e-03f,
--1.459114997e-03f, -1.442102382e-03f, -1.425088229e-03f, -1.408072567e-03f, -1.391055426e-03f, -1.374036835e-03f, -1.357016823e-03f, -1.339995421e-03f, -1.322972657e-03f, -1.305948562e-03f,
--1.288923164e-03f, -1.271896493e-03f, -1.254868579e-03f, -1.237839450e-03f, -1.220809137e-03f, -1.203777669e-03f, -1.186745076e-03f, -1.169711386e-03f, -1.152676630e-03f, -1.135640837e-03f,
--1.118604036e-03f, -1.101566257e-03f, -1.084527530e-03f, -1.067487883e-03f, -1.050447346e-03f, -1.033405950e-03f, -1.016363723e-03f, -9.993206940e-04f, -9.822768938e-04f, -9.652323513e-04f,
--9.481870961e-04f, -9.311411575e-04f, -9.140945652e-04f, -8.970473485e-04f, -8.799995370e-04f, -8.629511601e-04f, -8.459022474e-04f, -8.288528282e-04f, -8.118029321e-04f, -7.947525886e-04f,
--7.777018271e-04f, -7.606506771e-04f, -7.435991681e-04f, -7.265473296e-04f, -7.094951909e-04f, -6.924427817e-04f, -6.753901313e-04f, -6.583372693e-04f, -6.412842250e-04f, -6.242310280e-04f,
--6.071777078e-04f, -5.901242938e-04f, -5.730708154e-04f, -5.560173021e-04f, -5.389637834e-04f, -5.219102887e-04f, -5.048568476e-04f, -4.878034894e-04f, -4.707502435e-04f, -4.536971395e-04f,
--4.366442068e-04f, -4.195914749e-04f, -4.025389731e-04f, -3.854867309e-04f, -3.684347779e-04f, -3.513831433e-04f, -3.343318566e-04f, -3.172809474e-04f, -3.002304449e-04f, -2.831803786e-04f,
--2.661307781e-04f, -2.490816726e-04f, -2.320330916e-04f, -2.149850645e-04f, -1.979376207e-04f, -1.808907898e-04f, -1.638446009e-04f, -1.467990837e-04f, -1.297542674e-04f, -1.127101815e-04f,
--9.566685539e-05f, -7.862431844e-05f, -6.158260006e-05f, -4.454172964e-05f, -2.750173657e-05f, -1.046265023e-05f, 6.575500001e-06f, 2.361268474e-05f, 4.064887462e-05f, 5.768404026e-05f,
-7.471815230e-05f, 9.175118138e-05f, 1.087830981e-04f, 1.258138732e-04f, 1.428434772e-04f, 1.598718808e-04f, 1.768990547e-04f, 1.939249696e-04f, 2.109495960e-04f, 2.279729046e-04f,
-2.449948662e-04f, 2.620154514e-04f, 2.790346308e-04f, 2.960523752e-04f, 3.130686552e-04f, 3.300834416e-04f, 3.470967050e-04f, 3.641084160e-04f, 3.811185456e-04f, 3.981270642e-04f,
-4.151339427e-04f, 4.321391517e-04f, 4.491426620e-04f, 4.661444443e-04f, 4.831444693e-04f, 5.001427078e-04f, 5.171391305e-04f, 5.341337081e-04f, 5.511264114e-04f, 5.681172112e-04f,
-5.851060782e-04f, 6.020929831e-04f, 6.190778968e-04f, 6.360607900e-04f, 6.530416334e-04f, 6.700203980e-04f, 6.869970544e-04f, 7.039715734e-04f, 7.209439259e-04f, 7.379140827e-04f,
-7.548820145e-04f, 7.718476922e-04f, 7.888110866e-04f, 8.057721685e-04f, 8.227309088e-04f, 8.396872783e-04f, 8.566412479e-04f, 8.735927883e-04f, 8.905418705e-04f, 9.074884653e-04f,
-9.244325436e-04f, 9.413740762e-04f, 9.583130340e-04f, 9.752493880e-04f, 9.921831090e-04f, 1.009114168e-03f, 1.026042536e-03f, 1.042968183e-03f, 1.059891081e-03f, 1.076811201e-03f,
-1.093728513e-03f, 1.110642988e-03f, 1.127554598e-03f, 1.144463313e-03f, 1.161369105e-03f, 1.178271943e-03f, 1.195171800e-03f, 1.212068646e-03f, 1.228962452e-03f, 1.245853190e-03f,
-1.262740829e-03f, 1.279625342e-03f, 1.296506698e-03f, 1.313384870e-03f, 1.330259828e-03f, 1.347131544e-03f, 1.363999987e-03f, 1.380865130e-03f, 1.397726944e-03f, 1.414585398e-03f,
-1.431440466e-03f, 1.448292116e-03f, 1.465140322e-03f, 1.481985053e-03f, 1.498826281e-03f, 1.515663977e-03f, 1.532498112e-03f, 1.549328657e-03f, 1.566155584e-03f, 1.582978863e-03f,
-1.599798465e-03f, 1.616614363e-03f, 1.633426526e-03f, 1.650234926e-03f, 1.667039535e-03f, 1.683840323e-03f, 1.700637261e-03f, 1.717430322e-03f, 1.734219475e-03f, 1.751004693e-03f,
-1.767785946e-03f, 1.784563206e-03f, 1.801336444e-03f, 1.818105631e-03f, 1.834870739e-03f, 1.851631738e-03f, 1.868388600e-03f, 1.885141297e-03f, 1.901889799e-03f, 1.918634079e-03f,
-1.935374106e-03f, 1.952109853e-03f, 1.968841291e-03f, 1.985568391e-03f, 2.002291125e-03f, 2.019009463e-03f, 2.035723378e-03f, 2.052432841e-03f, 2.069137822e-03f, 2.085838295e-03f,
-2.102534229e-03f, 2.119225596e-03f, 2.135912368e-03f, 2.152594516e-03f, 2.169272012e-03f, 2.185944826e-03f, 2.202612931e-03f, 2.219276299e-03f, 2.235934899e-03f, 2.252588705e-03f,
-2.269237687e-03f, 2.285881817e-03f, 2.302521066e-03f, 2.319155407e-03f, 2.335784810e-03f, 2.352409247e-03f, 2.369028689e-03f, 2.385643109e-03f, 2.402252478e-03f, 2.418856767e-03f,
-2.435455949e-03f, 2.452049994e-03f, 2.468638874e-03f, 2.485222561e-03f, 2.501801026e-03f, 2.518374242e-03f, 2.534942179e-03f, 2.551504811e-03f, 2.568062107e-03f, 2.584614040e-03f,
-2.601160582e-03f, 2.617701704e-03f, 2.634237378e-03f, 2.650767577e-03f, 2.667292270e-03f, 2.683811431e-03f, 2.700325031e-03f, 2.716833042e-03f, 2.733335436e-03f, 2.749832184e-03f,
-2.766323259e-03f, 2.782808632e-03f, 2.799288274e-03f, 2.815762159e-03f, 2.832230257e-03f, 2.848692541e-03f, 2.865148982e-03f, 2.881599553e-03f, 2.898044225e-03f, 2.914482971e-03f,
-2.930915761e-03f, 2.947342569e-03f, 2.963763365e-03f, 2.980178123e-03f, 2.996586814e-03f, 3.012989409e-03f, 3.029385882e-03f, 3.045776204e-03f, 3.062160347e-03f, 3.078538283e-03f,
-3.094909984e-03f, 3.111275423e-03f, 3.127634571e-03f, 3.143987400e-03f, 3.160333883e-03f, 3.176673991e-03f, 3.193007697e-03f, 3.209334974e-03f, 3.225655792e-03f, 3.241970125e-03f,
-3.258277944e-03f, 3.274579221e-03f, 3.290873930e-03f, 3.307162041e-03f, 3.323443528e-03f, 3.339718362e-03f, 3.355986517e-03f, 3.372247963e-03f, 3.388502674e-03f, 3.404750621e-03f,
-3.420991777e-03f, 3.437226115e-03f, 3.453453606e-03f, 3.469674223e-03f, 3.485887939e-03f, 3.502094725e-03f, 3.518294555e-03f, 3.534487400e-03f, 3.550673233e-03f, 3.566852026e-03f,
-3.583023752e-03f, 3.599188384e-03f, 3.615345893e-03f, 3.631496253e-03f, 3.647639435e-03f, 3.663775413e-03f, 3.679904158e-03f, 3.696025644e-03f, 3.712139843e-03f, 3.728246727e-03f,
-3.744346269e-03f, 3.760438442e-03f, 3.776523219e-03f, 3.792600571e-03f, 3.808670472e-03f, 3.824732894e-03f, 3.840787809e-03f, 3.856835192e-03f, 3.872875014e-03f, 3.888907248e-03f,
-3.904931866e-03f, 3.920948842e-03f, 3.936958148e-03f, 3.952959758e-03f, 3.968953643e-03f, 3.984939776e-03f, 4.000918132e-03f, 4.016888681e-03f, 4.032851398e-03f, 4.048806254e-03f,
-4.064753223e-03f, 4.080692279e-03f, 4.096623392e-03f, 4.112546538e-03f, 4.128461688e-03f, 4.144368815e-03f, 4.160267893e-03f, 4.176158894e-03f, 4.192041792e-03f, 4.207916559e-03f,
-4.223783169e-03f, 4.239641595e-03f, 4.255491808e-03f, 4.271333784e-03f, 4.287167495e-03f, 4.302992913e-03f, 4.318810012e-03f, 4.334618766e-03f, 4.350419147e-03f, 4.366211128e-03f,
-4.381994683e-03f, 4.397769785e-03f, 4.413536407e-03f, 4.429294523e-03f, 4.445044105e-03f, 4.460785127e-03f, 4.476517562e-03f, 4.492241384e-03f, 4.507956565e-03f, 4.523663080e-03f,
-4.539360901e-03f, 4.555050002e-03f, 4.570730356e-03f, 4.586401937e-03f, 4.602064718e-03f, 4.617718673e-03f, 4.633363774e-03f, 4.648999996e-03f, 4.664627312e-03f, 4.680245695e-03f,
-4.695855120e-03f, 4.711455558e-03f, 4.727046985e-03f, 4.742629374e-03f, 4.758202697e-03f, 4.773766930e-03f, 4.789322045e-03f, 4.804868016e-03f, 4.820404816e-03f, 4.835932421e-03f,
-4.851450802e-03f, 4.866959934e-03f, 4.882459790e-03f, 4.897950345e-03f, 4.913431572e-03f, 4.928903445e-03f, 4.944365937e-03f, 4.959819023e-03f, 4.975262676e-03f, 4.990696870e-03f,
-5.006121579e-03f, 5.021536778e-03f, 5.036942438e-03f, 5.052338536e-03f, 5.067725044e-03f, 5.083101937e-03f, 5.098469188e-03f, 5.113826772e-03f, 5.129174663e-03f, 5.144512834e-03f,
-5.159841260e-03f, 5.175159914e-03f, 5.190468771e-03f, 5.205767806e-03f, 5.221056991e-03f, 5.236336301e-03f, 5.251605711e-03f, 5.266865194e-03f, 5.282114725e-03f, 5.297354278e-03f,
-5.312583827e-03f, 5.327803347e-03f, 5.343012811e-03f, 5.358212194e-03f, 5.373401470e-03f, 5.388580614e-03f, 5.403749600e-03f, 5.418908403e-03f, 5.434056996e-03f, 5.449195354e-03f,
-5.464323451e-03f, 5.479441263e-03f, 5.494548763e-03f, 5.509645926e-03f, 5.524732726e-03f, 5.539809139e-03f, 5.554875137e-03f, 5.569930697e-03f, 5.584975792e-03f, 5.600010398e-03f,
-5.615034488e-03f, 5.630048038e-03f, 5.645051022e-03f, 5.660043414e-03f, 5.675025191e-03f, 5.689996325e-03f, 5.704956792e-03f, 5.719906567e-03f, 5.734845624e-03f, 5.749773939e-03f,
-5.764691486e-03f, 5.779598239e-03f, 5.794494174e-03f, 5.809379266e-03f, 5.824253490e-03f, 5.839116819e-03f, 5.853969230e-03f, 5.868810698e-03f, 5.883641197e-03f, 5.898460702e-03f,
-5.913269188e-03f, 5.928066630e-03f, 5.942853004e-03f, 5.957628285e-03f, 5.972392447e-03f, 5.987145466e-03f, 6.001887316e-03f, 6.016617974e-03f, 6.031337413e-03f, 6.046045610e-03f,
-6.060742540e-03f, 6.075428177e-03f, 6.090102497e-03f, 6.104765476e-03f, 6.119417089e-03f, 6.134057310e-03f, 6.148686116e-03f, 6.163303482e-03f, 6.177909382e-03f, 6.192503793e-03f,
-6.207086690e-03f, 6.221658049e-03f, 6.236217844e-03f, 6.250766052e-03f, 6.265302647e-03f, 6.279827606e-03f, 6.294340904e-03f, 6.308842517e-03f, 6.323332419e-03f, 6.337810588e-03f,
-6.352276998e-03f, 6.366731625e-03f, 6.381174444e-03f, 6.395605433e-03f, 6.410024565e-03f, 6.424431818e-03f, 6.438827166e-03f, 6.453210586e-03f, 6.467582053e-03f, 6.481941543e-03f,
-6.496289033e-03f, 6.510624497e-03f, 6.524947913e-03f, 6.539259255e-03f, 6.553558500e-03f, 6.567845623e-03f, 6.582120602e-03f, 6.596383411e-03f, 6.610634027e-03f, 6.624872426e-03f,
-6.639098583e-03f, 6.653312476e-03f, 6.667514080e-03f, 6.681703372e-03f, 6.695880327e-03f, 6.710044921e-03f, 6.724197132e-03f, 6.738336935e-03f, 6.752464306e-03f, 6.766579222e-03f,
-6.780681659e-03f, 6.794771594e-03f, 6.808849002e-03f, 6.822913860e-03f, 6.836966145e-03f, 6.851005833e-03f, 6.865032900e-03f, 6.879047323e-03f, 6.893049079e-03f, 6.907038144e-03f,
-6.921014494e-03f, 6.934978106e-03f, 6.948928956e-03f, 6.962867022e-03f, 6.976792280e-03f, 6.990704706e-03f, 7.004604278e-03f, 7.018490971e-03f, 7.032364763e-03f, 7.046225631e-03f,
-7.060073550e-03f, 7.073908499e-03f, 7.087730453e-03f, 7.101539390e-03f, 7.115335287e-03f, 7.129118120e-03f, 7.142887867e-03f, 7.156644503e-03f, 7.170388007e-03f, 7.184118356e-03f,
-7.197835525e-03f, 7.211539493e-03f, 7.225230236e-03f, 7.238907732e-03f, 7.252571957e-03f, 7.266222889e-03f, 7.279860505e-03f, 7.293484782e-03f, 7.307095698e-03f, 7.320693228e-03f,
-7.334277352e-03f, 7.347848045e-03f, 7.361405286e-03f, 7.374949052e-03f, 7.388479320e-03f, 7.401996067e-03f, 7.415499271e-03f, 7.428988909e-03f, 7.442464959e-03f, 7.455927398e-03f,
-7.469376204e-03f, 7.482811354e-03f, 7.496232826e-03f, 7.509640597e-03f, 7.523034645e-03f, 7.536414948e-03f, 7.549781483e-03f, 7.563134228e-03f, 7.576473161e-03f, 7.589798259e-03f,
-7.603109500e-03f, 7.616406862e-03f, 7.629690322e-03f, 7.642959860e-03f, 7.656215451e-03f, 7.669457075e-03f, 7.682684709e-03f, 7.695898331e-03f, 7.709097920e-03f, 7.722283452e-03f,
-7.735454906e-03f, 7.748612261e-03f, 7.761755493e-03f, 7.774884582e-03f, 7.787999505e-03f, 7.801100241e-03f, 7.814186767e-03f, 7.827259062e-03f, 7.840317104e-03f, 7.853360871e-03f,
-7.866390342e-03f, 7.879405495e-03f, 7.892406308e-03f, 7.905392759e-03f, 7.918364827e-03f, 7.931322491e-03f, 7.944265728e-03f, 7.957194517e-03f, 7.970108837e-03f, 7.983008666e-03f,
-7.995893982e-03f, 8.008764765e-03f, 8.021620992e-03f, 8.034462643e-03f, 8.047289695e-03f, 8.060102129e-03f, 8.072899921e-03f, 8.085683052e-03f, 8.098451499e-03f, 8.111205242e-03f,
-8.123944259e-03f, 8.136668530e-03f, 8.149378032e-03f, 8.162072745e-03f, 8.174752648e-03f, 8.187417720e-03f, 8.200067939e-03f, 8.212703285e-03f, 8.225323736e-03f, 8.237929272e-03f,
-8.250519871e-03f, 8.263095514e-03f, 8.275656178e-03f, 8.288201843e-03f, 8.300732489e-03f, 8.313248093e-03f, 8.325748637e-03f, 8.338234098e-03f, 8.350704456e-03f, 8.363159691e-03f,
-8.375599781e-03f, 8.388024706e-03f, 8.400434446e-03f, 8.412828980e-03f, 8.425208287e-03f, 8.437572347e-03f, 8.449921139e-03f, 8.462254643e-03f, 8.474572838e-03f, 8.486875704e-03f,
-8.499163221e-03f, 8.511435368e-03f, 8.523692124e-03f, 8.535933471e-03f, 8.548159386e-03f, 8.560369850e-03f, 8.572564843e-03f, 8.584744344e-03f, 8.596908334e-03f, 8.609056792e-03f,
-8.621189698e-03f, 8.633307032e-03f, 8.645408774e-03f, 8.657494904e-03f, 8.669565402e-03f, 8.681620247e-03f, 8.693659421e-03f, 8.705682902e-03f, 8.717690672e-03f, 8.729682709e-03f,
-8.741658996e-03f, 8.753619511e-03f, 8.765564234e-03f, 8.777493147e-03f, 8.789406229e-03f, 8.801303461e-03f, 8.813184822e-03f, 8.825050294e-03f, 8.836899857e-03f, 8.848733491e-03f,
-8.860551177e-03f, 8.872352894e-03f, 8.884138624e-03f, 8.895908347e-03f, 8.907662044e-03f, 8.919399695e-03f, 8.931121281e-03f, 8.942826783e-03f, 8.954516181e-03f, 8.966189455e-03f,
-8.977846587e-03f, 8.989487558e-03f, 9.001112348e-03f, 9.012720938e-03f, 9.024313308e-03f, 9.035889441e-03f, 9.047449316e-03f, 9.058992914e-03f, 9.070520217e-03f, 9.082031206e-03f,
-9.093525861e-03f, 9.105004164e-03f, 9.116466096e-03f, 9.127911637e-03f, 9.139340770e-03f, 9.150753474e-03f, 9.162149732e-03f, 9.173529524e-03f, 9.184892832e-03f, 9.196239638e-03f,
-9.207569921e-03f, 9.218883665e-03f, 9.230180850e-03f, 9.241461457e-03f, 9.252725468e-03f, 9.263972865e-03f, 9.275203628e-03f, 9.286417741e-03f, 9.297615183e-03f, 9.308795936e-03f,
-9.319959984e-03f, 9.331107305e-03f, 9.342237884e-03f, 9.353351701e-03f, 9.364448738e-03f, 9.375528976e-03f, 9.386592398e-03f, 9.397638986e-03f, 9.408668720e-03f, 9.419681584e-03f,
-9.430677559e-03f, 9.441656627e-03f, 9.452618770e-03f, 9.463563970e-03f, 9.474492209e-03f, 9.485403469e-03f, 9.496297732e-03f, 9.507174981e-03f, 9.518035197e-03f, 9.528878362e-03f,
-9.539704460e-03f, 9.550513471e-03f, 9.561305379e-03f, 9.572080166e-03f, 9.582837814e-03f, 9.593578305e-03f, 9.604301622e-03f, 9.615007747e-03f, 9.625696663e-03f, 9.636368353e-03f,
-9.647022798e-03f, 9.657659981e-03f, 9.668279885e-03f, 9.678882493e-03f, 9.689467786e-03f, 9.700035749e-03f, 9.710586363e-03f, 9.721119612e-03f, 9.731635477e-03f, 9.742133942e-03f,
-9.752614990e-03f, 9.763078604e-03f, 9.773524766e-03f, 9.783953459e-03f, 9.794364667e-03f, 9.804758372e-03f, 9.815134557e-03f, 9.825493206e-03f, 9.835834301e-03f, 9.846157826e-03f,
-9.856463764e-03f, 9.866752097e-03f, 9.877022810e-03f, 9.887275885e-03f, 9.897511305e-03f, 9.907729055e-03f, 9.917929117e-03f, 9.928111474e-03f, 9.938276110e-03f, 9.948423009e-03f,
-9.958552154e-03f, 9.968663528e-03f, 9.978757115e-03f, 9.988832899e-03f, 9.998890862e-03f, 1.000893099e-02f, 1.001895326e-02f, 1.002895767e-02f, 1.003894419e-02f, 1.004891281e-02f,
-1.005886351e-02f, 1.006879628e-02f, 1.007871109e-02f, 1.008860794e-02f, 1.009848681e-02f, 1.010834768e-02f, 1.011819054e-02f, 1.012801536e-02f, 1.013782214e-02f, 1.014761086e-02f,
-1.015738150e-02f, 1.016713404e-02f, 1.017686848e-02f, 1.018658478e-02f, 1.019628295e-02f, 1.020596296e-02f, 1.021562480e-02f, 1.022526844e-02f, 1.023489389e-02f, 1.024450111e-02f,
-1.025409010e-02f, 1.026366084e-02f, 1.027321331e-02f, 1.028274750e-02f, 1.029226339e-02f, 1.030176097e-02f, 1.031124022e-02f, 1.032070112e-02f, 1.033014367e-02f, 1.033956784e-02f,
-1.034897362e-02f, 1.035836100e-02f, 1.036772996e-02f, 1.037708048e-02f, 1.038641256e-02f, 1.039572617e-02f, 1.040502129e-02f, 1.041429792e-02f, 1.042355605e-02f, 1.043279564e-02f,
-1.044201670e-02f, 1.045121920e-02f, 1.046040313e-02f, 1.046956847e-02f, 1.047871522e-02f, 1.048784335e-02f, 1.049695285e-02f, 1.050604371e-02f, 1.051511591e-02f, 1.052416944e-02f,
-1.053320428e-02f, 1.054222041e-02f, 1.055121783e-02f, 1.056019652e-02f, 1.056915646e-02f, 1.057809764e-02f, 1.058702005e-02f, 1.059592367e-02f, 1.060480848e-02f, 1.061367448e-02f,
-1.062252165e-02f, 1.063134996e-02f, 1.064015942e-02f, 1.064895001e-02f, 1.065772170e-02f, 1.066647449e-02f, 1.067520837e-02f, 1.068392331e-02f, 1.069261931e-02f, 1.070129635e-02f,
-1.070995442e-02f, 1.071859350e-02f, 1.072721358e-02f, 1.073581464e-02f, 1.074439668e-02f, 1.075295968e-02f, 1.076150362e-02f, 1.077002849e-02f, 1.077853427e-02f, 1.078702096e-02f,
-1.079548854e-02f, 1.080393700e-02f, 1.081236632e-02f, 1.082077649e-02f, 1.082916749e-02f, 1.083753932e-02f, 1.084589195e-02f, 1.085422538e-02f, 1.086253959e-02f, 1.087083457e-02f,
-1.087911031e-02f, 1.088736679e-02f, 1.089560399e-02f, 1.090382192e-02f, 1.091202054e-02f, 1.092019986e-02f, 1.092835985e-02f, 1.093650051e-02f, 1.094462182e-02f, 1.095272376e-02f,
-1.096080633e-02f, 1.096886951e-02f, 1.097691329e-02f, 1.098493766e-02f, 1.099294260e-02f, 1.100092810e-02f, 1.100889415e-02f, 1.101684073e-02f, 1.102476784e-02f, 1.103267546e-02f,
-1.104056357e-02f, 1.104843217e-02f, 1.105628124e-02f, 1.106411078e-02f, 1.107192075e-02f, 1.107971117e-02f, 1.108748201e-02f, 1.109523325e-02f, 1.110296490e-02f, 1.111067693e-02f,
-1.111836934e-02f, 1.112604210e-02f, 1.113369522e-02f, 1.114132867e-02f, 1.114894245e-02f, 1.115653654e-02f, 1.116411094e-02f, 1.117166562e-02f, 1.117920058e-02f, 1.118671580e-02f,
-1.119421128e-02f, 1.120168699e-02f, 1.120914294e-02f, 1.121657911e-02f, 1.122399548e-02f, 1.123139204e-02f, 1.123876879e-02f, 1.124612571e-02f, 1.125346279e-02f, 1.126078002e-02f,
-1.126807738e-02f, 1.127535487e-02f, 1.128261247e-02f, 1.128985017e-02f, 1.129706796e-02f, 1.130426583e-02f, 1.131144377e-02f, 1.131860177e-02f, 1.132573981e-02f, 1.133285789e-02f,
-1.133995599e-02f, 1.134703410e-02f, 1.135409221e-02f, 1.136113031e-02f, 1.136814839e-02f, 1.137514643e-02f, 1.138212444e-02f, 1.138908238e-02f, 1.139602027e-02f, 1.140293807e-02f,
-1.140983579e-02f, 1.141671341e-02f, 1.142357093e-02f, 1.143040832e-02f, 1.143722558e-02f, 1.144402271e-02f, 1.145079968e-02f, 1.145755649e-02f, 1.146429312e-02f, 1.147100958e-02f,
-1.147770584e-02f, 1.148438189e-02f, 1.149103774e-02f, 1.149767335e-02f, 1.150428873e-02f, 1.151088387e-02f, 1.151745875e-02f, 1.152401337e-02f, 1.153054771e-02f, 1.153706176e-02f,
-1.154355552e-02f, 1.155002897e-02f, 1.155648210e-02f, 1.156291491e-02f, 1.156932738e-02f, 1.157571950e-02f, 1.158209127e-02f, 1.158844267e-02f, 1.159477370e-02f, 1.160108433e-02f,
-1.160737458e-02f, 1.161364442e-02f, 1.161989384e-02f, 1.162612284e-02f, 1.163233140e-02f, 1.163851952e-02f, 1.164468719e-02f, 1.165083439e-02f, 1.165696112e-02f, 1.166306737e-02f,
-1.166915313e-02f, 1.167521839e-02f, 1.168126313e-02f, 1.168728736e-02f, 1.169329106e-02f, 1.169927422e-02f, 1.170523684e-02f, 1.171117889e-02f, 1.171710039e-02f, 1.172300130e-02f,
-1.172888164e-02f, 1.173474138e-02f, 1.174058052e-02f, 1.174639905e-02f, 1.175219696e-02f, 1.175797424e-02f, 1.176373089e-02f, 1.176946688e-02f, 1.177518223e-02f, 1.178087691e-02f,
-1.178655092e-02f, 1.179220425e-02f, 1.179783689e-02f, 1.180344883e-02f, 1.180904006e-02f, 1.181461058e-02f, 1.182016038e-02f, 1.182568944e-02f, 1.183119777e-02f, 1.183668534e-02f,
-1.184215216e-02f, 1.184759822e-02f, 1.185302350e-02f, 1.185842799e-02f, 1.186381170e-02f, 1.186917461e-02f, 1.187451672e-02f, 1.187983801e-02f, 1.188513848e-02f, 1.189041811e-02f,
-1.189567691e-02f, 1.190091486e-02f, 1.190613196e-02f, 1.191132820e-02f, 1.191650357e-02f, 1.192165806e-02f, 1.192679166e-02f, 1.193190437e-02f, 1.193699619e-02f, 1.194206709e-02f,
-1.194711707e-02f, 1.195214614e-02f, 1.195715427e-02f, 1.196214146e-02f, 1.196710771e-02f, 1.197205301e-02f, 1.197697734e-02f, 1.198188071e-02f, 1.198676310e-02f, 1.199162451e-02f,
-1.199646493e-02f, 1.200128435e-02f, 1.200608276e-02f, 1.201086017e-02f, 1.201561656e-02f, 1.202035192e-02f, 1.202506625e-02f, 1.202975954e-02f, 1.203443178e-02f, 1.203908297e-02f,
-1.204371310e-02f, 1.204832216e-02f, 1.205291015e-02f, 1.205747706e-02f, 1.206202288e-02f, 1.206654761e-02f, 1.207105124e-02f, 1.207553376e-02f, 1.207999516e-02f, 1.208443545e-02f,
-1.208885461e-02f, 1.209325263e-02f, 1.209762952e-02f, 1.210198526e-02f, 1.210631985e-02f, 1.211063328e-02f, 1.211492554e-02f, 1.211919663e-02f, 1.212344655e-02f, 1.212767528e-02f,
-1.213188282e-02f, 1.213606917e-02f, 1.214023431e-02f, 1.214437825e-02f, 1.214850097e-02f, 1.215260247e-02f, 1.215668275e-02f, 1.216074179e-02f, 1.216477960e-02f, 1.216879616e-02f,
-1.217279148e-02f, 1.217676554e-02f, 1.218071834e-02f, 1.218464987e-02f, 1.218856013e-02f, 1.219244912e-02f, 1.219631682e-02f, 1.220016323e-02f, 1.220398835e-02f, 1.220779217e-02f,
-1.221157469e-02f, 1.221533589e-02f, 1.221907578e-02f, 1.222279435e-02f, 1.222649160e-02f, 1.223016751e-02f, 1.223382209e-02f, 1.223745532e-02f, 1.224106721e-02f, 1.224465775e-02f,
-1.224822693e-02f, 1.225177475e-02f, 1.225530121e-02f, 1.225880629e-02f, 1.226229000e-02f, 1.226575232e-02f, 1.226919326e-02f, 1.227261281e-02f, 1.227601096e-02f, 1.227938772e-02f,
-1.228274307e-02f, 1.228607701e-02f, 1.228938953e-02f, 1.229268064e-02f, 1.229595033e-02f, 1.229919858e-02f, 1.230242541e-02f, 1.230563080e-02f, 1.230881475e-02f, 1.231197726e-02f,
-1.231511831e-02f, 1.231823791e-02f, 1.232133606e-02f, 1.232441274e-02f, 1.232746796e-02f, 1.233050171e-02f, 1.233351398e-02f, 1.233650478e-02f, 1.233947409e-02f, 1.234242192e-02f,
-1.234534826e-02f, 1.234825311e-02f, 1.235113646e-02f, 1.235399830e-02f, 1.235683864e-02f, 1.235965748e-02f, 1.236245480e-02f, 1.236523060e-02f, 1.236798489e-02f, 1.237071765e-02f,
-1.237342889e-02f, 1.237611859e-02f, 1.237878676e-02f, 1.238143340e-02f, 1.238405849e-02f, 1.238666204e-02f, 1.238924405e-02f, 1.239180450e-02f, 1.239434340e-02f, 1.239686075e-02f,
-1.239935653e-02f, 1.240183075e-02f, 1.240428340e-02f, 1.240671449e-02f, 1.240912400e-02f, 1.241151194e-02f, 1.241387830e-02f, 1.241622308e-02f, 1.241854627e-02f, 1.242084788e-02f,
-1.242312790e-02f, 1.242538633e-02f, 1.242762316e-02f, 1.242983840e-02f, 1.243203203e-02f, 1.243420406e-02f, 1.243635449e-02f, 1.243848331e-02f, 1.244059052e-02f, 1.244267611e-02f,
-1.244474009e-02f, 1.244678246e-02f, 1.244880320e-02f, 1.245080232e-02f, 1.245277982e-02f, 1.245473569e-02f, 1.245666993e-02f, 1.245858254e-02f, 1.246047352e-02f, 1.246234287e-02f,
-1.246419057e-02f, 1.246601664e-02f, 1.246782106e-02f, 1.246960385e-02f, 1.247136499e-02f, 1.247310448e-02f, 1.247482232e-02f, 1.247651851e-02f, 1.247819305e-02f, 1.247984594e-02f,
-1.248147717e-02f, 1.248308675e-02f, 1.248467466e-02f, 1.248624092e-02f, 1.248778551e-02f, 1.248930844e-02f, 1.249080971e-02f, 1.249228931e-02f, 1.249374725e-02f, 1.249518351e-02f,
-1.249659811e-02f, 1.249799103e-02f, 1.249936228e-02f, 1.250071186e-02f, 1.250203977e-02f, 1.250334600e-02f, 1.250463055e-02f, 1.250589342e-02f, 1.250713462e-02f, 1.250835413e-02f,
-1.250955197e-02f, 1.251072812e-02f, 1.251188259e-02f, 1.251301538e-02f, 1.251412648e-02f, 1.251521590e-02f, 1.251628364e-02f, 1.251732969e-02f, 1.251835405e-02f, 1.251935673e-02f,
-1.252033771e-02f, 1.252129701e-02f, 1.252223462e-02f, 1.252315055e-02f, 1.252404478e-02f, 1.252491732e-02f, 1.252576818e-02f, 1.252659734e-02f, 1.252740481e-02f, 1.252819059e-02f,
-1.252895468e-02f, 1.252969708e-02f, 1.253041779e-02f, 1.253111681e-02f, 1.253179414e-02f, 1.253244977e-02f, 1.253308372e-02f, 1.253369597e-02f, 1.253428654e-02f, 1.253485541e-02f,
-1.253540259e-02f, 1.253592808e-02f, 1.253643189e-02f, 1.253691400e-02f, 1.253737442e-02f, 1.253781316e-02f, 1.253823021e-02f, 1.253862556e-02f, 1.253899924e-02f, 1.253935122e-02f,
-1.253968152e-02f, 1.253999014e-02f, 1.254027706e-02f, 1.254054231e-02f, 1.254078587e-02f, 1.254100775e-02f, 1.254120795e-02f, 1.254138646e-02f, 1.254154330e-02f, 1.254167846e-02f,
-1.254179194e-02f, 1.254188374e-02f, 1.254195387e-02f, 1.254200232e-02f, 1.254202909e-02f, 1.254203420e-02f, 1.254201763e-02f, 1.254197939e-02f, 1.254191949e-02f, 1.254183791e-02f,
-1.254173467e-02f, 1.254160977e-02f, 1.254146320e-02f, 1.254129497e-02f, 1.254110508e-02f, 1.254089353e-02f, 1.254066032e-02f, 1.254040545e-02f, 1.254012893e-02f, 1.253983076e-02f,
-1.253951094e-02f, 1.253916947e-02f, 1.253880635e-02f, 1.253842159e-02f, 1.253801518e-02f, 1.253758713e-02f, 1.253713744e-02f, 1.253666611e-02f, 1.253617315e-02f, 1.253565855e-02f,
-1.253512232e-02f, 1.253456446e-02f, 1.253398498e-02f, 1.253338386e-02f, 1.253276113e-02f, 1.253211677e-02f, 1.253145080e-02f, 1.253076321e-02f, 1.253005401e-02f, 1.252932319e-02f,
-1.252857077e-02f, 1.252779674e-02f, 1.252700111e-02f, 1.252618387e-02f, 1.252534504e-02f, 1.252448461e-02f, 1.252360258e-02f, 1.252269897e-02f, 1.252177377e-02f, 1.252082698e-02f,
-1.251985861e-02f, 1.251886867e-02f, 1.251785714e-02f, 1.251682404e-02f, 1.251576938e-02f, 1.251469314e-02f, 1.251359534e-02f, 1.251247598e-02f, 1.251133506e-02f, 1.251017258e-02f,
-1.250898855e-02f, 1.250778298e-02f, 1.250655586e-02f, 1.250530720e-02f, 1.250403699e-02f, 1.250274526e-02f, 1.250143199e-02f, 1.250009719e-02f, 1.249874087e-02f, 1.249736302e-02f,
-1.249596366e-02f, 1.249454279e-02f, 1.249310040e-02f, 1.249163651e-02f, 1.249015111e-02f, 1.248864421e-02f, 1.248711582e-02f, 1.248556594e-02f, 1.248399457e-02f, 1.248240171e-02f,
-1.248078738e-02f, 1.247915157e-02f, 1.247749428e-02f, 1.247581553e-02f, 1.247411531e-02f, 1.247239364e-02f, 1.247065051e-02f, 1.246888592e-02f, 1.246709989e-02f, 1.246529242e-02f,
-1.246346351e-02f, 1.246161316e-02f, 1.245974139e-02f, 1.245784819e-02f, 1.245593356e-02f, 1.245399752e-02f, 1.245204007e-02f, 1.245006122e-02f, 1.244806095e-02f, 1.244603929e-02f,
-1.244399624e-02f, 1.244193180e-02f, 1.243984597e-02f, 1.243773877e-02f, 1.243561019e-02f, 1.243346024e-02f, 1.243128892e-02f, 1.242909625e-02f, 1.242688222e-02f, 1.242464684e-02f,
-1.242239011e-02f, 1.242011205e-02f, 1.241781265e-02f, 1.241549192e-02f, 1.241314987e-02f, 1.241078650e-02f, 1.240840182e-02f, 1.240599582e-02f, 1.240356853e-02f, 1.240111993e-02f,
-1.239865005e-02f, 1.239615887e-02f, 1.239364642e-02f, 1.239111269e-02f, 1.238855769e-02f, 1.238598142e-02f, 1.238338389e-02f, 1.238076512e-02f, 1.237812509e-02f, 1.237546382e-02f,
-1.237278131e-02f, 1.237007758e-02f, 1.236735262e-02f, 1.236460644e-02f, 1.236183905e-02f, 1.235905045e-02f, 1.235624065e-02f, 1.235340966e-02f, 1.235055747e-02f, 1.234768411e-02f,
-1.234478956e-02f, 1.234187385e-02f, 1.233893697e-02f, 1.233597894e-02f, 1.233299975e-02f, 1.232999942e-02f, 1.232697795e-02f, 1.232393534e-02f, 1.232087161e-02f, 1.231778676e-02f,
-1.231468080e-02f, 1.231155373e-02f, 1.230840556e-02f, 1.230523630e-02f, 1.230204595e-02f, 1.229883452e-02f, 1.229560201e-02f, 1.229234844e-02f, 1.228907381e-02f, 1.228577813e-02f,
-1.228246140e-02f, 1.227912363e-02f, 1.227576482e-02f, 1.227238500e-02f, 1.226898415e-02f, 1.226556229e-02f, 1.226211943e-02f, 1.225865557e-02f, 1.225517072e-02f, 1.225166489e-02f,
-1.224813808e-02f, 1.224459030e-02f, 1.224102156e-02f, 1.223743187e-02f, 1.223382123e-02f, 1.223018965e-02f, 1.222653714e-02f, 1.222286371e-02f, 1.221916936e-02f, 1.221545410e-02f,
-1.221171794e-02f, 1.220796088e-02f, 1.220418294e-02f, 1.220038412e-02f, 1.219656443e-02f, 1.219272387e-02f, 1.218886246e-02f, 1.218498020e-02f, 1.218107710e-02f, 1.217715317e-02f,
-1.217320842e-02f, 1.216924285e-02f, 1.216525647e-02f, 1.216124930e-02f, 1.215722133e-02f, 1.215317257e-02f, 1.214910304e-02f, 1.214501275e-02f, 1.214090169e-02f, 1.213676988e-02f,
-1.213261733e-02f, 1.212844405e-02f, 1.212425004e-02f, 1.212003531e-02f, 1.211579988e-02f, 1.211154374e-02f, 1.210726691e-02f, 1.210296939e-02f, 1.209865121e-02f, 1.209431235e-02f,
-1.208995284e-02f, 1.208557267e-02f, 1.208117187e-02f, 1.207675044e-02f, 1.207230838e-02f, 1.206784571e-02f, 1.206336243e-02f, 1.205885855e-02f, 1.205433409e-02f, 1.204978905e-02f,
-1.204522344e-02f, 1.204063727e-02f, 1.203603055e-02f, 1.203140328e-02f, 1.202675549e-02f, 1.202208716e-02f, 1.201739833e-02f, 1.201268898e-02f, 1.200795914e-02f, 1.200320882e-02f,
-1.199843801e-02f, 1.199364674e-02f, 1.198883501e-02f, 1.198400283e-02f, 1.197915020e-02f, 1.197427715e-02f, 1.196938368e-02f, 1.196446979e-02f, 1.195953551e-02f, 1.195458083e-02f,
-1.194960576e-02f, 1.194461033e-02f, 1.193959453e-02f, 1.193455838e-02f, 1.192950189e-02f, 1.192442506e-02f, 1.191932791e-02f, 1.191421044e-02f, 1.190907267e-02f, 1.190391461e-02f,
-1.189873626e-02f, 1.189353764e-02f, 1.188831876e-02f, 1.188307962e-02f, 1.187782024e-02f, 1.187254062e-02f, 1.186724078e-02f, 1.186192073e-02f, 1.185658048e-02f, 1.185122004e-02f,
-1.184583941e-02f, 1.184043861e-02f, 1.183501766e-02f, 1.182957655e-02f, 1.182411530e-02f, 1.181863392e-02f, 1.181313243e-02f, 1.180761082e-02f, 1.180206912e-02f, 1.179650733e-02f,
-1.179092547e-02f, 1.178532354e-02f, 1.177970156e-02f, 1.177405953e-02f, 1.176839747e-02f, 1.176271539e-02f, 1.175701329e-02f, 1.175129120e-02f, 1.174554912e-02f, 1.173978706e-02f,
-1.173400503e-02f, 1.172820305e-02f, 1.172238112e-02f, 1.171653926e-02f, 1.171067748e-02f, 1.170479578e-02f, 1.169889419e-02f, 1.169297270e-02f, 1.168703134e-02f, 1.168107012e-02f,
-1.167508904e-02f, 1.166908811e-02f, 1.166306736e-02f, 1.165702678e-02f, 1.165096640e-02f, 1.164488621e-02f, 1.163878625e-02f, 1.163266651e-02f, 1.162652700e-02f, 1.162036775e-02f,
-1.161418876e-02f, 1.160799004e-02f, 1.160177160e-02f, 1.159553347e-02f, 1.158927564e-02f, 1.158299813e-02f, 1.157670095e-02f, 1.157038412e-02f, 1.156404764e-02f, 1.155769153e-02f,
-1.155131581e-02f, 1.154492047e-02f, 1.153850554e-02f, 1.153207103e-02f, 1.152561694e-02f, 1.151914330e-02f, 1.151265011e-02f, 1.150613739e-02f, 1.149960514e-02f, 1.149305338e-02f,
-1.148648213e-02f, 1.147989139e-02f, 1.147328118e-02f, 1.146665151e-02f, 1.146000240e-02f, 1.145333385e-02f, 1.144664587e-02f, 1.143993849e-02f, 1.143321171e-02f, 1.142646555e-02f,
-1.141970001e-02f, 1.141291512e-02f, 1.140611088e-02f, 1.139928730e-02f, 1.139244441e-02f, 1.138558221e-02f, 1.137870071e-02f, 1.137179994e-02f, 1.136487989e-02f, 1.135794059e-02f,
-1.135098205e-02f, 1.134400428e-02f, 1.133700729e-02f, 1.132999110e-02f, 1.132295571e-02f, 1.131590116e-02f, 1.130882744e-02f, 1.130173456e-02f, 1.129462256e-02f, 1.128749142e-02f,
-1.128034118e-02f, 1.127317184e-02f, 1.126598342e-02f, 1.125877593e-02f, 1.125154938e-02f, 1.124430379e-02f, 1.123703917e-02f, 1.122975553e-02f, 1.122245290e-02f, 1.121513127e-02f,
-1.120779067e-02f, 1.120043111e-02f, 1.119305260e-02f, 1.118565516e-02f, 1.117823880e-02f, 1.117080353e-02f, 1.116334937e-02f, 1.115587633e-02f, 1.114838443e-02f, 1.114087368e-02f,
-1.113334410e-02f, 1.112579569e-02f, 1.111822847e-02f, 1.111064246e-02f, 1.110303767e-02f, 1.109541412e-02f, 1.108777181e-02f, 1.108011077e-02f, 1.107243100e-02f, 1.106473253e-02f,
-1.105701536e-02f, 1.104927951e-02f, 1.104152500e-02f, 1.103375184e-02f, 1.102596004e-02f, 1.101814962e-02f, 1.101032059e-02f, 1.100247296e-02f, 1.099460676e-02f, 1.098672200e-02f,
-1.097881869e-02f, 1.097089684e-02f, 1.096295647e-02f, 1.095499760e-02f, 1.094702024e-02f, 1.093902440e-02f, 1.093101010e-02f, 1.092297736e-02f, 1.091492618e-02f, 1.090685659e-02f,
-1.089876860e-02f, 1.089066223e-02f, 1.088253748e-02f, 1.087439437e-02f, 1.086623293e-02f, 1.085805316e-02f, 1.084985508e-02f, 1.084163870e-02f, 1.083340405e-02f, 1.082515113e-02f,
-1.081687996e-02f, 1.080859055e-02f, 1.080028293e-02f, 1.079195710e-02f, 1.078361308e-02f, 1.077525090e-02f, 1.076687055e-02f, 1.075847206e-02f, 1.075005545e-02f, 1.074162072e-02f,
-1.073316790e-02f, 1.072469700e-02f, 1.071620804e-02f, 1.070770103e-02f, 1.069917598e-02f, 1.069063292e-02f, 1.068207186e-02f, 1.067349281e-02f, 1.066489579e-02f, 1.065628081e-02f,
-1.064764790e-02f, 1.063899707e-02f, 1.063032833e-02f, 1.062164170e-02f, 1.061293720e-02f, 1.060421484e-02f, 1.059547464e-02f, 1.058671661e-02f, 1.057794077e-02f, 1.056914714e-02f,
-1.056033573e-02f, 1.055150655e-02f, 1.054265964e-02f, 1.053379499e-02f, 1.052491263e-02f, 1.051601258e-02f, 1.050709484e-02f, 1.049815944e-02f, 1.048920640e-02f, 1.048023572e-02f,
-1.047124743e-02f, 1.046224154e-02f, 1.045321807e-02f, 1.044417704e-02f, 1.043511846e-02f, 1.042604234e-02f, 1.041694872e-02f, 1.040783759e-02f, 1.039870898e-02f, 1.038956291e-02f,
-1.038039939e-02f, 1.037121843e-02f, 1.036202007e-02f, 1.035280430e-02f, 1.034357116e-02f, 1.033432065e-02f, 1.032505280e-02f, 1.031576761e-02f, 1.030646511e-02f, 1.029714532e-02f,
-1.028780825e-02f, 1.027845391e-02f, 1.026908234e-02f, 1.025969353e-02f, 1.025028751e-02f, 1.024086431e-02f, 1.023142392e-02f, 1.022196638e-02f, 1.021249169e-02f, 1.020299988e-02f,
-1.019349097e-02f, 1.018396496e-02f, 1.017442189e-02f, 1.016486176e-02f, 1.015528459e-02f, 1.014569040e-02f, 1.013607921e-02f, 1.012645104e-02f, 1.011680590e-02f, 1.010714381e-02f,
-1.009746478e-02f, 1.008776885e-02f, 1.007805602e-02f, 1.006832631e-02f, 1.005857973e-02f, 1.004881632e-02f, 1.003903608e-02f, 1.002923903e-02f, 1.001942519e-02f, 1.000959458e-02f,
-9.999747220e-03f, 9.989883121e-03f, 9.980002304e-03f, 9.970104787e-03f, 9.960190588e-03f, 9.950259725e-03f, 9.940312216e-03f, 9.930348079e-03f, 9.920367333e-03f, 9.910369995e-03f,
-9.900356084e-03f, 9.890325617e-03f, 9.880278614e-03f, 9.870215092e-03f, 9.860135070e-03f, 9.850038566e-03f, 9.839925599e-03f, 9.829796186e-03f, 9.819650346e-03f, 9.809488098e-03f,
-9.799309460e-03f, 9.789114450e-03f, 9.778903087e-03f, 9.768675390e-03f, 9.758431378e-03f, 9.748171067e-03f, 9.737894479e-03f, 9.727601630e-03f, 9.717292540e-03f, 9.706967227e-03f,
-9.696625710e-03f, 9.686268009e-03f, 9.675894140e-03f, 9.665504125e-03f, 9.655097980e-03f, 9.644675726e-03f, 9.634237381e-03f, 9.623782964e-03f, 9.613312494e-03f, 9.602825989e-03f,
-9.592323470e-03f, 9.581804954e-03f, 9.571270461e-03f, 9.560720011e-03f, 9.550153621e-03f, 9.539571312e-03f, 9.528973102e-03f, 9.518359011e-03f, 9.507729058e-03f, 9.497083261e-03f,
-9.486421641e-03f, 9.475744217e-03f, 9.465051007e-03f, 9.454342032e-03f, 9.443617310e-03f, 9.432876861e-03f, 9.422120705e-03f, 9.411348861e-03f, 9.400561348e-03f, 9.389758186e-03f,
-9.378939394e-03f, 9.368104992e-03f, 9.357254999e-03f, 9.346389436e-03f, 9.335508321e-03f, 9.324611675e-03f, 9.313699517e-03f, 9.302771866e-03f, 9.291828743e-03f, 9.280870167e-03f,
-9.269896159e-03f, 9.258906737e-03f, 9.247901921e-03f, 9.236881733e-03f, 9.225846190e-03f, 9.214795314e-03f, 9.203729124e-03f, 9.192647640e-03f, 9.181550883e-03f, 9.170438871e-03f,
-9.159311626e-03f, 9.148169167e-03f, 9.137011515e-03f, 9.125838689e-03f, 9.114650709e-03f, 9.103447597e-03f, 9.092229371e-03f, 9.080996052e-03f, 9.069747661e-03f, 9.058484218e-03f,
-9.047205742e-03f, 9.035912255e-03f, 9.024603776e-03f, 9.013280326e-03f, 9.001941926e-03f, 8.990588595e-03f, 8.979220354e-03f, 8.967837224e-03f, 8.956439225e-03f, 8.945026378e-03f,
-8.933598703e-03f, 8.922156221e-03f, 8.910698952e-03f, 8.899226916e-03f, 8.887740136e-03f, 8.876238630e-03f, 8.864722420e-03f, 8.853191527e-03f, 8.841645971e-03f, 8.830085773e-03f,
-8.818510954e-03f, 8.806921535e-03f, 8.795317536e-03f, 8.783698978e-03f, 8.772065883e-03f, 8.760418270e-03f, 8.748756161e-03f, 8.737079578e-03f, 8.725388540e-03f, 8.713683069e-03f,
-8.701963186e-03f, 8.690228911e-03f, 8.678480267e-03f, 8.666717274e-03f, 8.654939953e-03f, 8.643148325e-03f, 8.631342412e-03f, 8.619522234e-03f, 8.607687813e-03f, 8.595839170e-03f,
-8.583976327e-03f, 8.572099304e-03f, 8.560208123e-03f, 8.548302805e-03f, 8.536383372e-03f, 8.524449845e-03f, 8.512502244e-03f, 8.500540593e-03f, 8.488564912e-03f, 8.476575222e-03f,
-8.464571546e-03f, 8.452553904e-03f, 8.440522318e-03f, 8.428476810e-03f, 8.416417401e-03f, 8.404344113e-03f, 8.392256967e-03f, 8.380155985e-03f, 8.368041190e-03f, 8.355912601e-03f,
-8.343770242e-03f, 8.331614134e-03f, 8.319444298e-03f, 8.307260757e-03f, 8.295063532e-03f, 8.282852645e-03f, 8.270628117e-03f, 8.258389972e-03f, 8.246138230e-03f, 8.233872914e-03f,
-8.221594045e-03f, 8.209301646e-03f, 8.196995738e-03f, 8.184676344e-03f, 8.172343485e-03f, 8.159997184e-03f, 8.147637462e-03f, 8.135264341e-03f, 8.122877845e-03f, 8.110477994e-03f,
-8.098064811e-03f, 8.085638319e-03f, 8.073198539e-03f, 8.060745494e-03f, 8.048279205e-03f, 8.035799696e-03f, 8.023306988e-03f, 8.010801104e-03f, 7.998282065e-03f, 7.985749896e-03f,
-7.973204617e-03f, 7.960646251e-03f, 7.948074820e-03f, 7.935490348e-03f, 7.922892856e-03f, 7.910282367e-03f, 7.897658904e-03f, 7.885022488e-03f, 7.872373143e-03f, 7.859710891e-03f,
-7.847035755e-03f, 7.834347757e-03f, 7.821646920e-03f, 7.808933266e-03f, 7.796206818e-03f, 7.783467600e-03f, 7.770715633e-03f, 7.757950940e-03f, 7.745173544e-03f, 7.732383468e-03f,
-7.719580735e-03f, 7.706765367e-03f, 7.693937387e-03f, 7.681096819e-03f, 7.668243684e-03f, 7.655378007e-03f, 7.642499809e-03f, 7.629609114e-03f, 7.616705944e-03f, 7.603790323e-03f,
-7.590862274e-03f, 7.577921820e-03f, 7.564968983e-03f, 7.552003787e-03f, 7.539026254e-03f, 7.526036409e-03f, 7.513034274e-03f, 7.500019872e-03f, 7.486993226e-03f, 7.473954359e-03f,
-7.460903296e-03f, 7.447840058e-03f, 7.434764669e-03f, 7.421677153e-03f, 7.408577533e-03f, 7.395465831e-03f, 7.382342072e-03f, 7.369206278e-03f, 7.356058474e-03f, 7.342898681e-03f,
-7.329726925e-03f, 7.316543227e-03f, 7.303347612e-03f, 7.290140103e-03f, 7.276920724e-03f, 7.263689498e-03f, 7.250446448e-03f, 7.237191598e-03f, 7.223924971e-03f, 7.210646592e-03f,
-7.197356484e-03f, 7.184054669e-03f, 7.170741173e-03f, 7.157416018e-03f, 7.144079229e-03f, 7.130730828e-03f, 7.117370840e-03f, 7.103999288e-03f, 7.090616196e-03f, 7.077221588e-03f,
-7.063815488e-03f, 7.050397919e-03f, 7.036968905e-03f, 7.023528470e-03f, 7.010076638e-03f, 6.996613433e-03f, 6.983138878e-03f, 6.969652997e-03f, 6.956155815e-03f, 6.942647356e-03f,
-6.929127642e-03f, 6.915596699e-03f, 6.902054551e-03f, 6.888501220e-03f, 6.874936732e-03f, 6.861361110e-03f, 6.847774378e-03f, 6.834176561e-03f, 6.820567682e-03f, 6.806947766e-03f,
-6.793316837e-03f, 6.779674919e-03f, 6.766022036e-03f, 6.752358212e-03f, 6.738683472e-03f, 6.724997840e-03f, 6.711301339e-03f, 6.697593995e-03f, 6.683875832e-03f, 6.670146873e-03f,
-6.656407143e-03f, 6.642656667e-03f, 6.628895468e-03f, 6.615123572e-03f, 6.601341002e-03f, 6.587547783e-03f, 6.573743939e-03f, 6.559929495e-03f, 6.546104476e-03f, 6.532268904e-03f,
-6.518422807e-03f, 6.504566206e-03f, 6.490699128e-03f, 6.476821597e-03f, 6.462933636e-03f, 6.449035272e-03f, 6.435126528e-03f, 6.421207429e-03f, 6.407277999e-03f, 6.393338264e-03f,
-6.379388247e-03f, 6.365427974e-03f, 6.351457470e-03f, 6.337476758e-03f, 6.323485863e-03f, 6.309484811e-03f, 6.295473626e-03f, 6.281452333e-03f, 6.267420957e-03f, 6.253379522e-03f,
-6.239328053e-03f, 6.225266575e-03f, 6.211195113e-03f, 6.197113691e-03f, 6.183022336e-03f, 6.168921070e-03f, 6.154809920e-03f, 6.140688911e-03f, 6.126558066e-03f, 6.112417412e-03f,
-6.098266973e-03f, 6.084106774e-03f, 6.069936840e-03f, 6.055757197e-03f, 6.041567868e-03f, 6.027368880e-03f, 6.013160257e-03f, 5.998942024e-03f, 5.984714207e-03f, 5.970476830e-03f,
-5.956229919e-03f, 5.941973499e-03f, 5.927707594e-03f, 5.913432231e-03f, 5.899147434e-03f, 5.884853228e-03f, 5.870549639e-03f, 5.856236692e-03f, 5.841914412e-03f, 5.827582825e-03f,
-5.813241955e-03f, 5.798891828e-03f, 5.784532469e-03f, 5.770163904e-03f, 5.755786157e-03f, 5.741399255e-03f, 5.727003223e-03f, 5.712598085e-03f, 5.698183868e-03f, 5.683760596e-03f,
-5.669328296e-03f, 5.654886992e-03f, 5.640436710e-03f, 5.625977475e-03f, 5.611509314e-03f, 5.597032251e-03f, 5.582546311e-03f, 5.568051521e-03f, 5.553547906e-03f, 5.539035492e-03f,
-5.524514303e-03f, 5.509984366e-03f, 5.495445707e-03f, 5.480898350e-03f, 5.466342321e-03f, 5.451777646e-03f, 5.437204351e-03f, 5.422622461e-03f, 5.408032002e-03f, 5.393433000e-03f,
-5.378825480e-03f, 5.364209468e-03f, 5.349584990e-03f, 5.334952071e-03f, 5.320310737e-03f, 5.305661014e-03f, 5.291002928e-03f, 5.276336504e-03f, 5.261661769e-03f, 5.246978747e-03f,
-5.232287466e-03f, 5.217587950e-03f, 5.202880226e-03f, 5.188164319e-03f, 5.173440255e-03f, 5.158708061e-03f, 5.143967762e-03f, 5.129219383e-03f, 5.114462952e-03f, 5.099698493e-03f,
-5.084926033e-03f, 5.070145598e-03f, 5.055357213e-03f, 5.040560905e-03f, 5.025756700e-03f, 5.010944623e-03f, 4.996124701e-03f, 4.981296960e-03f, 4.966461426e-03f, 4.951618124e-03f,
-4.936767082e-03f, 4.921908324e-03f, 4.907041877e-03f, 4.892167767e-03f, 4.877286021e-03f, 4.862396664e-03f, 4.847499723e-03f, 4.832595223e-03f, 4.817683191e-03f, 4.802763653e-03f,
-4.787836636e-03f, 4.772902164e-03f, 4.757960266e-03f, 4.743010966e-03f, 4.728054291e-03f, 4.713090267e-03f, 4.698118921e-03f, 4.683140279e-03f, 4.668154367e-03f, 4.653161211e-03f,
-4.638160838e-03f, 4.623153274e-03f, 4.608138545e-03f, 4.593116677e-03f, 4.578087698e-03f, 4.563051633e-03f, 4.548008508e-03f, 4.532958351e-03f, 4.517901187e-03f, 4.502837043e-03f,
-4.487765945e-03f, 4.472687920e-03f, 4.457602994e-03f, 4.442511193e-03f, 4.427412544e-03f, 4.412307074e-03f, 4.397194808e-03f, 4.382075774e-03f, 4.366949998e-03f, 4.351817506e-03f,
-4.336678324e-03f, 4.321532481e-03f, 4.306380001e-03f, 4.291220911e-03f, 4.276055239e-03f, 4.260883010e-03f, 4.245704251e-03f, 4.230518988e-03f, 4.215327249e-03f, 4.200129060e-03f,
-4.184924448e-03f, 4.169713438e-03f, 4.154496058e-03f, 4.139272335e-03f, 4.124042294e-03f, 4.108805963e-03f, 4.093563369e-03f, 4.078314537e-03f, 4.063059495e-03f, 4.047798270e-03f,
-4.032530887e-03f, 4.017257375e-03f, 4.001977758e-03f, 3.986692065e-03f, 3.971400322e-03f, 3.956102556e-03f, 3.940798793e-03f, 3.925489061e-03f, 3.910173385e-03f, 3.894851793e-03f,
-3.879524312e-03f, 3.864190968e-03f, 3.848851788e-03f, 3.833506799e-03f, 3.818156028e-03f, 3.802799502e-03f, 3.787437247e-03f, 3.772069291e-03f, 3.756695660e-03f, 3.741316380e-03f,
-3.725931480e-03f, 3.710540986e-03f, 3.695144924e-03f, 3.679743322e-03f, 3.664336207e-03f, 3.648923605e-03f, 3.633505543e-03f, 3.618082049e-03f, 3.602653149e-03f, 3.587218870e-03f,
-3.571779239e-03f, 3.556334284e-03f, 3.540884030e-03f, 3.525428506e-03f, 3.509967737e-03f, 3.494501752e-03f, 3.479030577e-03f, 3.463554239e-03f, 3.448072764e-03f, 3.432586181e-03f,
-3.417094516e-03f, 3.401597797e-03f, 3.386096049e-03f, 3.370589301e-03f, 3.355077579e-03f, 3.339560911e-03f, 3.324039323e-03f, 3.308512842e-03f, 3.292981496e-03f, 3.277445312e-03f,
-3.261904317e-03f, 3.246358538e-03f, 3.230808002e-03f, 3.215252736e-03f, 3.199692767e-03f, 3.184128123e-03f, 3.168558830e-03f, 3.152984916e-03f, 3.137406408e-03f, 3.121823333e-03f,
-3.106235719e-03f, 3.090643591e-03f, 3.075046979e-03f, 3.059445908e-03f, 3.043840406e-03f, 3.028230500e-03f, 3.012616218e-03f, 2.996997586e-03f, 2.981374632e-03f, 2.965747383e-03f,
-2.950115867e-03f, 2.934480109e-03f, 2.918840139e-03f, 2.903195983e-03f, 2.887547667e-03f, 2.871895221e-03f, 2.856238670e-03f, 2.840578042e-03f, 2.824913364e-03f, 2.809244664e-03f,
-2.793571969e-03f, 2.777895306e-03f, 2.762214703e-03f, 2.746530186e-03f, 2.730841783e-03f, 2.715149522e-03f, 2.699453430e-03f, 2.683753533e-03f, 2.668049860e-03f, 2.652342437e-03f,
-2.636631293e-03f, 2.620916454e-03f, 2.605197948e-03f, 2.589475801e-03f, 2.573750043e-03f, 2.558020699e-03f, 2.542287797e-03f, 2.526551364e-03f, 2.510811429e-03f, 2.495068018e-03f,
-2.479321159e-03f, 2.463570878e-03f, 2.447817204e-03f, 2.432060164e-03f, 2.416299786e-03f, 2.400536095e-03f, 2.384769121e-03f, 2.368998891e-03f, 2.353225431e-03f, 2.337448770e-03f,
-2.321668935e-03f, 2.305885952e-03f, 2.290099851e-03f, 2.274310657e-03f, 2.258518399e-03f, 2.242723104e-03f, 2.226924800e-03f, 2.211123513e-03f, 2.195319272e-03f, 2.179512103e-03f,
-2.163702035e-03f, 2.147889094e-03f, 2.132073309e-03f, 2.116254706e-03f, 2.100433313e-03f, 2.084609158e-03f, 2.068782269e-03f, 2.052952672e-03f, 2.037120395e-03f, 2.021285465e-03f,
-2.005447911e-03f, 1.989607759e-03f, 1.973765037e-03f, 1.957919773e-03f, 1.942071995e-03f, 1.926221728e-03f, 1.910369002e-03f, 1.894513844e-03f, 1.878656281e-03f, 1.862796340e-03f,
-1.846934050e-03f, 1.831069438e-03f, 1.815202531e-03f, 1.799333356e-03f, 1.783461942e-03f, 1.767588316e-03f, 1.751712506e-03f, 1.735834538e-03f, 1.719954442e-03f, 1.704072243e-03f,
-1.688187969e-03f, 1.672301649e-03f, 1.656413310e-03f, 1.640522979e-03f, 1.624630684e-03f, 1.608736453e-03f, 1.592840312e-03f, 1.576942290e-03f, 1.561042414e-03f, 1.545140712e-03f,
-1.529237211e-03f, 1.513331938e-03f, 1.497424923e-03f, 1.481516191e-03f, 1.465605771e-03f, 1.449693689e-03f, 1.433779975e-03f, 1.417864655e-03f, 1.401947756e-03f, 1.386029307e-03f,
-1.370109336e-03f, 1.354187868e-03f, 1.338264933e-03f, 1.322340558e-03f, 1.306414770e-03f, 1.290487597e-03f, 1.274559067e-03f, 1.258629206e-03f, 1.242698044e-03f, 1.226765606e-03f,
-1.210831922e-03f, 1.194897018e-03f, 1.178960922e-03f, 1.163023662e-03f, 1.147085265e-03f, 1.131145759e-03f, 1.115205172e-03f, 1.099263530e-03f, 1.083320863e-03f, 1.067377196e-03f,
-1.051432558e-03f, 1.035486977e-03f, 1.019540480e-03f, 1.003593094e-03f, 9.876448476e-04f, 9.716957680e-04f, 9.557458828e-04f, 9.397952197e-04f, 9.238438061e-04f, 9.078916698e-04f,
-8.919388382e-04f, 8.759853391e-04f, 8.600312000e-04f, 8.440764484e-04f, 8.281211120e-04f, 8.121652184e-04f, 7.962087952e-04f, 7.802518699e-04f, 7.642944701e-04f, 7.483366235e-04f,
-7.323783577e-04f, 7.164197001e-04f, 7.004606785e-04f, 6.845013203e-04f, 6.685416532e-04f, 6.525817048e-04f, 6.366215027e-04f, 6.206610744e-04f, 6.047004475e-04f, 5.887396496e-04f,
-5.727787083e-04f, 5.568176511e-04f, 5.408565057e-04f, 5.248952996e-04f, 5.089340603e-04f, 4.929728156e-04f, 4.770115928e-04f, 4.610504197e-04f, 4.450893237e-04f, 4.291283325e-04f,
-4.131674736e-04f, 3.972067745e-04f, 3.812462629e-04f, 3.652859663e-04f, 3.493259122e-04f, 3.333661282e-04f, 3.174066418e-04f, 3.014474807e-04f, 2.854886723e-04f, 2.695302442e-04f,
-2.535722240e-04f, 2.376146392e-04f, 2.216575173e-04f, 2.057008859e-04f, 1.897447725e-04f, 1.737892047e-04f, 1.578342099e-04f, 1.418798157e-04f, 1.259260497e-04f, 1.099729394e-04f,
-9.402051216e-05f, 7.806879568e-05f, 6.211781740e-05f, 4.616760486e-05f, 3.021818556e-05f, 1.426958700e-05f, -1.678163308e-06f, -1.762503786e-05f, -3.357100916e-05f, -4.951604971e-05f,
--6.546013202e-05f, -8.140322861e-05f, -9.734531197e-05f, -1.132863546e-04f, -1.292263291e-04f, -1.451652080e-04f, -1.611029637e-04f, -1.770395688e-04f, -1.929749958e-04f, -2.089092173e-04f,
--2.248422059e-04f, -2.407739340e-04f, -2.567043742e-04f, -2.726334990e-04f, -2.885612811e-04f, -3.044876930e-04f, -3.204127072e-04f, -3.363362963e-04f, -3.522584329e-04f, -3.681790895e-04f,
--3.840982388e-04f, -4.000158533e-04f, -4.159319056e-04f, -4.318463683e-04f, -4.477592140e-04f, -4.636704153e-04f, -4.795799448e-04f, -4.954877751e-04f, -5.113938788e-04f, -5.272982286e-04f,
--5.432007970e-04f, -5.591015567e-04f, -5.750004803e-04f, -5.908975406e-04f, -6.067927100e-04f, -6.226859612e-04f, -6.385772670e-04f, -6.544665999e-04f, -6.703539326e-04f, -6.862392378e-04f,
--7.021224881e-04f, -7.180036563e-04f, -7.338827150e-04f, -7.497596369e-04f, -7.656343946e-04f, -7.815069610e-04f, -7.973773086e-04f, -8.132454102e-04f, -8.291112385e-04f, -8.449747662e-04f,
--8.608359661e-04f, -8.766948108e-04f, -8.925512732e-04f, -9.084053259e-04f, -9.242569417e-04f, -9.401060933e-04f, -9.559527535e-04f, -9.717968951e-04f, -9.876384908e-04f, -1.003477513e-03f,
--1.019313936e-03f, -1.035147730e-03f, -1.050978871e-03f, -1.066807329e-03f, -1.082633078e-03f, -1.098456090e-03f, -1.114276339e-03f, -1.130093798e-03f, -1.145908438e-03f, -1.161720234e-03f,
--1.177529157e-03f, -1.193335181e-03f, -1.209138279e-03f, -1.224938423e-03f, -1.240735586e-03f, -1.256529742e-03f, -1.272320862e-03f, -1.288108920e-03f, -1.303893889e-03f, -1.319675742e-03f,
--1.335454452e-03f, -1.351229990e-03f, -1.367002332e-03f, -1.382771449e-03f, -1.398537314e-03f, -1.414299900e-03f, -1.430059181e-03f, -1.445815128e-03f, -1.461567716e-03f, -1.477316917e-03f,
--1.493062704e-03f, -1.508805050e-03f, -1.524543928e-03f, -1.540279311e-03f, -1.556011173e-03f, -1.571739485e-03f, -1.587464222e-03f, -1.603185355e-03f, -1.618902859e-03f, -1.634616706e-03f,
--1.650326870e-03f, -1.666033322e-03f, -1.681736038e-03f, -1.697434988e-03f, -1.713130148e-03f, -1.728821489e-03f, -1.744508984e-03f, -1.760192608e-03f, -1.775872333e-03f, -1.791548132e-03f,
--1.807219978e-03f, -1.822887845e-03f, -1.838551705e-03f, -1.854211532e-03f, -1.869867299e-03f, -1.885518979e-03f, -1.901166545e-03f, -1.916809971e-03f, -1.932449229e-03f, -1.948084293e-03f,
--1.963715137e-03f, -1.979341733e-03f, -1.994964054e-03f, -2.010582074e-03f, -2.026195766e-03f, -2.041805104e-03f, -2.057410060e-03f, -2.073010609e-03f, -2.088606722e-03f, -2.104198374e-03f,
--2.119785538e-03f, -2.135368187e-03f, -2.150946294e-03f, -2.166519833e-03f, -2.182088777e-03f, -2.197653100e-03f, -2.213212775e-03f, -2.228767775e-03f, -2.244318074e-03f, -2.259863644e-03f,
--2.275404460e-03f, -2.290940495e-03f, -2.306471722e-03f, -2.321998115e-03f, -2.337519647e-03f, -2.353036292e-03f, -2.368548023e-03f, -2.384054813e-03f, -2.399556637e-03f, -2.415053466e-03f,
--2.430545276e-03f, -2.446032040e-03f, -2.461513730e-03f, -2.476990321e-03f, -2.492461787e-03f, -2.507928100e-03f, -2.523389234e-03f, -2.538845163e-03f, -2.554295860e-03f, -2.569741300e-03f,
--2.585181455e-03f, -2.600616300e-03f, -2.616045807e-03f, -2.631469951e-03f, -2.646888705e-03f, -2.662302042e-03f, -2.677709938e-03f, -2.693112364e-03f, -2.708509295e-03f, -2.723900705e-03f,
--2.739286567e-03f, -2.754666855e-03f, -2.770041543e-03f, -2.785410605e-03f, -2.800774013e-03f, -2.816131743e-03f, -2.831483768e-03f, -2.846830061e-03f, -2.862170596e-03f, -2.877505348e-03f,
--2.892834290e-03f, -2.908157395e-03f, -2.923474639e-03f, -2.938785994e-03f, -2.954091434e-03f, -2.969390934e-03f, -2.984684467e-03f, -2.999972007e-03f, -3.015253528e-03f, -3.030529004e-03f,
--3.045798410e-03f, -3.061061718e-03f, -3.076318903e-03f, -3.091569939e-03f, -3.106814799e-03f, -3.122053459e-03f, -3.137285891e-03f, -3.152512070e-03f, -3.167731970e-03f, -3.182945566e-03f,
--3.198152830e-03f, -3.213353737e-03f, -3.228548262e-03f, -3.243736377e-03f, -3.258918059e-03f, -3.274093280e-03f, -3.289262014e-03f, -3.304424236e-03f, -3.319579921e-03f, -3.334729041e-03f,
--3.349871572e-03f, -3.365007488e-03f, -3.380136762e-03f, -3.395259369e-03f, -3.410375284e-03f, -3.425484480e-03f, -3.440586932e-03f, -3.455682614e-03f, -3.470771500e-03f, -3.485853565e-03f,
--3.500928783e-03f, -3.515997128e-03f, -3.531058575e-03f, -3.546113098e-03f, -3.561160671e-03f, -3.576201269e-03f, -3.591234866e-03f, -3.606261437e-03f, -3.621280956e-03f, -3.636293397e-03f,
--3.651298736e-03f, -3.666296945e-03f, -3.681288001e-03f, -3.696271876e-03f, -3.711248547e-03f, -3.726217987e-03f, -3.741180171e-03f, -3.756135074e-03f, -3.771082669e-03f, -3.786022932e-03f,
--3.800955838e-03f, -3.815881360e-03f, -3.830799474e-03f, -3.845710153e-03f, -3.860613374e-03f, -3.875509110e-03f, -3.890397335e-03f, -3.905278026e-03f, -3.920151156e-03f, -3.935016700e-03f,
--3.949874634e-03f, -3.964724930e-03f, -3.979567566e-03f, -3.994402514e-03f, -4.009229751e-03f, -4.024049250e-03f, -4.038860987e-03f, -4.053664936e-03f, -4.068461073e-03f, -4.083249372e-03f,
--4.098029808e-03f, -4.112802356e-03f, -4.127566991e-03f, -4.142323688e-03f, -4.157072421e-03f, -4.171813166e-03f, -4.186545898e-03f, -4.201270592e-03f, -4.215987222e-03f, -4.230695764e-03f,
--4.245396192e-03f, -4.260088483e-03f, -4.274772610e-03f, -4.289448549e-03f, -4.304116276e-03f, -4.318775764e-03f, -4.333426990e-03f, -4.348069928e-03f, -4.362704553e-03f, -4.377330841e-03f,
--4.391948768e-03f, -4.406558307e-03f, -4.421159435e-03f, -4.435752126e-03f, -4.450336356e-03f, -4.464912100e-03f, -4.479479334e-03f, -4.494038032e-03f, -4.508588171e-03f, -4.523129724e-03f,
--4.537662669e-03f, -4.552186979e-03f, -4.566702631e-03f, -4.581209600e-03f, -4.595707861e-03f, -4.610197389e-03f, -4.624678161e-03f, -4.639150152e-03f, -4.653613336e-03f, -4.668067690e-03f,
--4.682513189e-03f, -4.696949809e-03f, -4.711377525e-03f, -4.725796312e-03f, -4.740206147e-03f, -4.754607005e-03f, -4.768998862e-03f, -4.783381692e-03f, -4.797755472e-03f, -4.812120178e-03f,
--4.826475785e-03f, -4.840822269e-03f, -4.855159605e-03f, -4.869487770e-03f, -4.883806738e-03f, -4.898116487e-03f, -4.912416991e-03f, -4.926708226e-03f, -4.940990169e-03f, -4.955262794e-03f,
--4.969526079e-03f, -4.983779998e-03f, -4.998024528e-03f, -5.012259645e-03f, -5.026485324e-03f, -5.040701541e-03f, -5.054908273e-03f, -5.069105495e-03f, -5.083293184e-03f, -5.097471315e-03f,
--5.111639864e-03f, -5.125798808e-03f, -5.139948122e-03f, -5.154087783e-03f, -5.168217767e-03f, -5.182338049e-03f, -5.196448607e-03f, -5.210549415e-03f, -5.224640451e-03f, -5.238721691e-03f,
--5.252793110e-03f, -5.266854685e-03f, -5.280906392e-03f, -5.294948207e-03f, -5.308980107e-03f, -5.323002069e-03f, -5.337014067e-03f, -5.351016080e-03f, -5.365008082e-03f, -5.378990051e-03f,
--5.392961962e-03f, -5.406923793e-03f, -5.420875519e-03f, -5.434817118e-03f, -5.448748565e-03f, -5.462669837e-03f, -5.476580911e-03f, -5.490481763e-03f, -5.504372369e-03f, -5.518252707e-03f,
--5.532122752e-03f, -5.545982482e-03f, -5.559831873e-03f, -5.573670902e-03f, -5.587499545e-03f, -5.601317778e-03f, -5.615125580e-03f, -5.628922926e-03f, -5.642709793e-03f, -5.656486158e-03f,
--5.670251998e-03f, -5.684007289e-03f, -5.697752008e-03f, -5.711486133e-03f, -5.725209639e-03f, -5.738922504e-03f, -5.752624705e-03f, -5.766316219e-03f, -5.779997022e-03f, -5.793667092e-03f,
--5.807326405e-03f, -5.820974939e-03f, -5.834612671e-03f, -5.848239576e-03f, -5.861855634e-03f, -5.875460820e-03f, -5.889055112e-03f, -5.902638487e-03f, -5.916210921e-03f, -5.929772393e-03f,
--5.943322879e-03f, -5.956862357e-03f, -5.970390803e-03f, -5.983908196e-03f, -5.997414511e-03f, -6.010909727e-03f, -6.024393821e-03f, -6.037866770e-03f, -6.051328551e-03f, -6.064779143e-03f,
--6.078218521e-03f, -6.091646664e-03f, -6.105063548e-03f, -6.118469152e-03f, -6.131863453e-03f, -6.145246429e-03f, -6.158618056e-03f, -6.171978313e-03f, -6.185327176e-03f, -6.198664624e-03f,
--6.211990634e-03f, -6.225305183e-03f, -6.238608250e-03f, -6.251899812e-03f, -6.265179847e-03f, -6.278448331e-03f, -6.291705244e-03f, -6.304950562e-03f, -6.318184264e-03f, -6.331406327e-03f,
--6.344616729e-03f, -6.357815448e-03f, -6.371002462e-03f, -6.384177748e-03f, -6.397341285e-03f, -6.410493050e-03f, -6.423633021e-03f, -6.436761176e-03f, -6.449877494e-03f, -6.462981952e-03f,
--6.476074527e-03f, -6.489155200e-03f, -6.502223946e-03f, -6.515280745e-03f, -6.528325574e-03f, -6.541358411e-03f, -6.554379236e-03f, -6.567388025e-03f, -6.580384757e-03f, -6.593369410e-03f,
--6.606341963e-03f, -6.619302394e-03f, -6.632250680e-03f, -6.645186801e-03f, -6.658110734e-03f, -6.671022459e-03f, -6.683921952e-03f, -6.696809194e-03f, -6.709684161e-03f, -6.722546833e-03f,
--6.735397188e-03f, -6.748235204e-03f, -6.761060861e-03f, -6.773874136e-03f, -6.786675007e-03f, -6.799463455e-03f, -6.812239456e-03f, -6.825002990e-03f, -6.837754036e-03f, -6.850492571e-03f,
--6.863218576e-03f, -6.875932028e-03f, -6.888632905e-03f, -6.901321188e-03f, -6.913996855e-03f, -6.926659884e-03f, -6.939310254e-03f, -6.951947944e-03f, -6.964572933e-03f, -6.977185200e-03f,
--6.989784724e-03f, -7.002371484e-03f, -7.014945458e-03f, -7.027506625e-03f, -7.040054966e-03f, -7.052590458e-03f, -7.065113080e-03f, -7.077622813e-03f, -7.090119634e-03f, -7.102603523e-03f,
--7.115074459e-03f, -7.127532422e-03f, -7.139977390e-03f, -7.152409343e-03f, -7.164828259e-03f, -7.177234119e-03f, -7.189626901e-03f, -7.202006585e-03f, -7.214373150e-03f, -7.226726575e-03f,
--7.239066840e-03f, -7.251393924e-03f, -7.263707807e-03f, -7.276008468e-03f, -7.288295887e-03f, -7.300570042e-03f, -7.312830914e-03f, -7.325078483e-03f, -7.337312727e-03f, -7.349533626e-03f,
--7.361741160e-03f, -7.373935308e-03f, -7.386116051e-03f, -7.398283368e-03f, -7.410437238e-03f, -7.422577641e-03f, -7.434704558e-03f, -7.446817967e-03f, -7.458917849e-03f, -7.471004184e-03f,
--7.483076951e-03f, -7.495136130e-03f, -7.507181702e-03f, -7.519213645e-03f, -7.531231941e-03f, -7.543236569e-03f, -7.555227508e-03f, -7.567204740e-03f, -7.579168244e-03f, -7.591118000e-03f,
--7.603053989e-03f, -7.614976190e-03f, -7.626884583e-03f, -7.638779149e-03f, -7.650659869e-03f, -7.662526721e-03f, -7.674379688e-03f, -7.686218747e-03f, -7.698043881e-03f, -7.709855070e-03f,
--7.721652293e-03f, -7.733435531e-03f, -7.745204765e-03f, -7.756959975e-03f, -7.768701141e-03f, -7.780428244e-03f, -7.792141265e-03f, -7.803840184e-03f, -7.815524981e-03f, -7.827195637e-03f,
--7.838852133e-03f, -7.850494450e-03f, -7.862122567e-03f, -7.873736466e-03f, -7.885336128e-03f, -7.896921532e-03f, -7.908492661e-03f, -7.920049494e-03f, -7.931592013e-03f, -7.943120199e-03f,
--7.954634031e-03f, -7.966133492e-03f, -7.977618561e-03f, -7.989089221e-03f, -8.000545452e-03f, -8.011987234e-03f, -8.023414550e-03f, -8.034827379e-03f, -8.046225704e-03f, -8.057609505e-03f,
--8.068978763e-03f, -8.080333460e-03f, -8.091673576e-03f, -8.102999094e-03f, -8.114309993e-03f, -8.125606256e-03f, -8.136887863e-03f, -8.148154796e-03f, -8.159407037e-03f, -8.170644566e-03f,
--8.181867365e-03f, -8.193075416e-03f, -8.204268700e-03f, -8.215447198e-03f, -8.226610891e-03f, -8.237759763e-03f, -8.248893793e-03f, -8.260012963e-03f, -8.271117256e-03f, -8.282206652e-03f,
--8.293281134e-03f, -8.304340683e-03f, -8.315385281e-03f, -8.326414909e-03f, -8.337429550e-03f, -8.348429184e-03f, -8.359413795e-03f, -8.370383363e-03f, -8.381337871e-03f, -8.392277300e-03f,
--8.403201633e-03f, -8.414110851e-03f, -8.425004936e-03f, -8.435883871e-03f, -8.446747637e-03f, -8.457596216e-03f, -8.468429591e-03f, -8.479247744e-03f, -8.490050657e-03f, -8.500838311e-03f,
--8.511610690e-03f, -8.522367775e-03f, -8.533109548e-03f, -8.543835993e-03f, -8.554547090e-03f, -8.565242824e-03f, -8.575923175e-03f, -8.586588126e-03f, -8.597237660e-03f, -8.607871759e-03f,
--8.618490406e-03f, -8.629093583e-03f, -8.639681273e-03f, -8.650253458e-03f, -8.660810120e-03f, -8.671351243e-03f, -8.681876809e-03f, -8.692386801e-03f, -8.702881201e-03f, -8.713359992e-03f,
--8.723823157e-03f, -8.734270679e-03f, -8.744702540e-03f, -8.755118723e-03f, -8.765519211e-03f, -8.775903988e-03f, -8.786273035e-03f, -8.796626336e-03f, -8.806963874e-03f, -8.817285632e-03f,
--8.827591593e-03f, -8.837881740e-03f, -8.848156055e-03f, -8.858414523e-03f, -8.868657126e-03f, -8.878883848e-03f, -8.889094671e-03f, -8.899289579e-03f, -8.909468555e-03f, -8.919631583e-03f,
--8.929778645e-03f, -8.939909725e-03f, -8.950024807e-03f, -8.960123874e-03f, -8.970206908e-03f, -8.980273895e-03f, -8.990324817e-03f, -9.000359657e-03f, -9.010378400e-03f, -9.020381028e-03f,
--9.030367526e-03f, -9.040337877e-03f, -9.050292064e-03f, -9.060230072e-03f, -9.070151884e-03f, -9.080057484e-03f, -9.089946855e-03f, -9.099819982e-03f, -9.109676848e-03f, -9.119517437e-03f,
--9.129341734e-03f, -9.139149721e-03f, -9.148941382e-03f, -9.158716703e-03f, -9.168475666e-03f, -9.178218257e-03f, -9.187944458e-03f, -9.197654254e-03f, -9.207347629e-03f, -9.217024568e-03f,
--9.226685054e-03f, -9.236329072e-03f, -9.245956605e-03f, -9.255567639e-03f, -9.265162157e-03f, -9.274740144e-03f, -9.284301584e-03f, -9.293846461e-03f, -9.303374761e-03f, -9.312886467e-03f,
--9.322381563e-03f, -9.331860035e-03f, -9.341321867e-03f, -9.350767043e-03f, -9.360195549e-03f, -9.369607368e-03f, -9.379002485e-03f, -9.388380885e-03f, -9.397742553e-03f, -9.407087473e-03f,
--9.416415631e-03f, -9.425727010e-03f, -9.435021596e-03f, -9.444299374e-03f, -9.453560329e-03f, -9.462804445e-03f, -9.472031707e-03f, -9.481242101e-03f, -9.490435611e-03f, -9.499612222e-03f,
--9.508771921e-03f, -9.517914690e-03f, -9.527040517e-03f, -9.536149385e-03f, -9.545241280e-03f, -9.554316188e-03f, -9.563374093e-03f, -9.572414982e-03f, -9.581438838e-03f, -9.590445647e-03f,
--9.599435396e-03f, -9.608408069e-03f, -9.617363651e-03f, -9.626302129e-03f, -9.635223487e-03f, -9.644127711e-03f, -9.653014787e-03f, -9.661884700e-03f, -9.670737436e-03f, -9.679572981e-03f,
--9.688391320e-03f, -9.697192438e-03f, -9.705976323e-03f, -9.714742958e-03f, -9.723492331e-03f, -9.732224427e-03f, -9.740939232e-03f, -9.749636732e-03f, -9.758316912e-03f, -9.766979759e-03f,
--9.775625258e-03f, -9.784253396e-03f, -9.792864159e-03f, -9.801457532e-03f, -9.810033502e-03f, -9.818592055e-03f, -9.827133178e-03f, -9.835656855e-03f, -9.844163074e-03f, -9.852651821e-03f,
--9.861123082e-03f, -9.869576843e-03f, -9.878013091e-03f, -9.886431812e-03f, -9.894832993e-03f, -9.903216619e-03f, -9.911582679e-03f, -9.919931157e-03f, -9.928262040e-03f, -9.936575315e-03f,
--9.944870970e-03f, -9.953148989e-03f, -9.961409360e-03f, -9.969652070e-03f, -9.977877106e-03f, -9.986084453e-03f, -9.994274099e-03f, -1.000244603e-02f, -1.001060024e-02f, -1.001873670e-02f,
--1.002685541e-02f, -1.003495635e-02f, -1.004303952e-02f, -1.005110489e-02f, -1.005915245e-02f, -1.006718220e-02f, -1.007519411e-02f, -1.008318818e-02f, -1.009116440e-02f, -1.009912274e-02f,
--1.010706320e-02f, -1.011498577e-02f, -1.012289042e-02f, -1.013077716e-02f, -1.013864596e-02f, -1.014649682e-02f, -1.015432971e-02f, -1.016214464e-02f, -1.016994158e-02f, -1.017772052e-02f,
--1.018548146e-02f, -1.019322437e-02f, -1.020094926e-02f, -1.020865609e-02f, -1.021634487e-02f, -1.022401557e-02f, -1.023166820e-02f, -1.023930272e-02f, -1.024691914e-02f, -1.025451744e-02f,
--1.026209761e-02f, -1.026965964e-02f, -1.027720351e-02f, -1.028472921e-02f, -1.029223673e-02f, -1.029972606e-02f, -1.030719719e-02f, -1.031465010e-02f, -1.032208478e-02f, -1.032950122e-02f,
--1.033689941e-02f, -1.034427934e-02f, -1.035164099e-02f, -1.035898436e-02f, -1.036630943e-02f, -1.037361619e-02f, -1.038090462e-02f, -1.038817473e-02f, -1.039542648e-02f, -1.040265989e-02f,
--1.040987492e-02f, -1.041707158e-02f, -1.042424984e-02f, -1.043140970e-02f, -1.043855115e-02f, -1.044567418e-02f, -1.045277876e-02f, -1.045986490e-02f, -1.046693259e-02f, -1.047398180e-02f,
--1.048101253e-02f, -1.048802477e-02f, -1.049501851e-02f, -1.050199373e-02f, -1.050895042e-02f, -1.051588858e-02f, -1.052280820e-02f, -1.052970925e-02f, -1.053659174e-02f, -1.054345564e-02f,
--1.055030095e-02f, -1.055712767e-02f, -1.056393577e-02f, -1.057072524e-02f, -1.057749609e-02f, -1.058424828e-02f, -1.059098183e-02f, -1.059769670e-02f, -1.060439290e-02f, -1.061107042e-02f,
--1.061772923e-02f, -1.062436934e-02f, -1.063099073e-02f, -1.063759339e-02f, -1.064417731e-02f, -1.065074248e-02f, -1.065728889e-02f, -1.066381653e-02f, -1.067032539e-02f, -1.067681546e-02f,
--1.068328672e-02f, -1.068973918e-02f, -1.069617282e-02f, -1.070258762e-02f, -1.070898358e-02f, -1.071536070e-02f, -1.072171895e-02f, -1.072805832e-02f, -1.073437882e-02f, -1.074068043e-02f,
--1.074696313e-02f, -1.075322693e-02f, -1.075947180e-02f, -1.076569774e-02f, -1.077190474e-02f, -1.077809280e-02f, -1.078426189e-02f, -1.079041201e-02f, -1.079654316e-02f, -1.080265532e-02f,
--1.080874848e-02f, -1.081482263e-02f, -1.082087776e-02f, -1.082691387e-02f, -1.083293094e-02f, -1.083892897e-02f, -1.084490795e-02f, -1.085086786e-02f, -1.085680869e-02f, -1.086273045e-02f,
--1.086863311e-02f, -1.087451668e-02f, -1.088038113e-02f, -1.088622647e-02f, -1.089205267e-02f, -1.089785975e-02f, -1.090364767e-02f, -1.090941644e-02f, -1.091516605e-02f, -1.092089648e-02f,
--1.092660774e-02f, -1.093229980e-02f, -1.093797266e-02f, -1.094362632e-02f, -1.094926076e-02f, -1.095487597e-02f, -1.096047195e-02f, -1.096604869e-02f, -1.097160618e-02f, -1.097714441e-02f,
--1.098266337e-02f, -1.098816305e-02f, -1.099364345e-02f, -1.099910455e-02f, -1.100454635e-02f, -1.100996885e-02f, -1.101537202e-02f, -1.102075587e-02f, -1.102612038e-02f, -1.103146555e-02f,
--1.103679137e-02f, -1.104209783e-02f, -1.104738492e-02f, -1.105265263e-02f, -1.105790096e-02f, -1.106312990e-02f, -1.106833944e-02f, -1.107352957e-02f, -1.107870028e-02f, -1.108385158e-02f,
--1.108898344e-02f, -1.109409586e-02f, -1.109918883e-02f, -1.110426235e-02f, -1.110931641e-02f, -1.111435100e-02f, -1.111936610e-02f, -1.112436173e-02f, -1.112933786e-02f, -1.113429449e-02f,
--1.113923161e-02f, -1.114414922e-02f, -1.114904730e-02f, -1.115392586e-02f, -1.115878487e-02f, -1.116362434e-02f, -1.116844426e-02f, -1.117324462e-02f, -1.117802541e-02f, -1.118278663e-02f,
--1.118752827e-02f, -1.119225032e-02f, -1.119695277e-02f, -1.120163562e-02f, -1.120629887e-02f, -1.121094249e-02f, -1.121556649e-02f, -1.122017087e-02f, -1.122475560e-02f, -1.122932069e-02f,
--1.123386613e-02f, -1.123839191e-02f, -1.124289803e-02f, -1.124738448e-02f, -1.125185124e-02f, -1.125629833e-02f, -1.126072572e-02f, -1.126513342e-02f, -1.126952141e-02f, -1.127388969e-02f,
--1.127823825e-02f, -1.128256709e-02f, -1.128687620e-02f, -1.129116557e-02f, -1.129543520e-02f, -1.129968509e-02f, -1.130391521e-02f, -1.130812558e-02f, -1.131231617e-02f, -1.131648700e-02f,
--1.132063804e-02f, -1.132476930e-02f, -1.132888076e-02f, -1.133297243e-02f, -1.133704429e-02f, -1.134109634e-02f, -1.134512858e-02f, -1.134914099e-02f, -1.135313357e-02f, -1.135710633e-02f,
--1.136105924e-02f, -1.136499231e-02f, -1.136890552e-02f, -1.137279888e-02f, -1.137667238e-02f, -1.138052601e-02f, -1.138435977e-02f, -1.138817364e-02f, -1.139196764e-02f, -1.139574174e-02f,
--1.139949595e-02f, -1.140323025e-02f, -1.140694465e-02f, -1.141063914e-02f, -1.141431371e-02f, -1.141796836e-02f, -1.142160309e-02f, -1.142521787e-02f, -1.142881273e-02f, -1.143238764e-02f,
--1.143594260e-02f, -1.143947761e-02f, -1.144299266e-02f, -1.144648774e-02f, -1.144996286e-02f, -1.145341801e-02f, -1.145685318e-02f, -1.146026836e-02f, -1.146366356e-02f, -1.146703877e-02f,
--1.147039398e-02f, -1.147372919e-02f, -1.147704439e-02f, -1.148033958e-02f, -1.148361475e-02f, -1.148686991e-02f, -1.149010504e-02f, -1.149332014e-02f, -1.149651521e-02f, -1.149969024e-02f,
--1.150284522e-02f, -1.150598016e-02f, -1.150909505e-02f, -1.151218988e-02f, -1.151526466e-02f, -1.151831937e-02f, -1.152135401e-02f, -1.152436858e-02f, -1.152736307e-02f, -1.153033748e-02f,
--1.153329181e-02f, -1.153622605e-02f, -1.153914019e-02f, -1.154203424e-02f, -1.154490819e-02f, -1.154776204e-02f, -1.155059577e-02f, -1.155340940e-02f, -1.155620291e-02f, -1.155897630e-02f,
--1.156172957e-02f, -1.156446271e-02f, -1.156717572e-02f, -1.156986859e-02f, -1.157254133e-02f, -1.157519393e-02f, -1.157782638e-02f, -1.158043868e-02f, -1.158303084e-02f, -1.158560283e-02f,
--1.158815467e-02f, -1.159068635e-02f, -1.159319787e-02f, -1.159568921e-02f, -1.159816038e-02f, -1.160061138e-02f, -1.160304221e-02f, -1.160545285e-02f, -1.160784331e-02f, -1.161021358e-02f,
--1.161256366e-02f, -1.161489355e-02f, -1.161720324e-02f, -1.161949273e-02f, -1.162176203e-02f, -1.162401112e-02f, -1.162624000e-02f, -1.162844867e-02f, -1.163063713e-02f, -1.163280537e-02f,
--1.163495340e-02f, -1.163708120e-02f, -1.163918879e-02f, -1.164127614e-02f, -1.164334327e-02f, -1.164539017e-02f, -1.164741684e-02f, -1.164942327e-02f, -1.165140946e-02f, -1.165337541e-02f,
--1.165532112e-02f, -1.165724659e-02f, -1.165915181e-02f, -1.166103677e-02f, -1.166290149e-02f, -1.166474596e-02f, -1.166657017e-02f, -1.166837412e-02f, -1.167015781e-02f, -1.167192124e-02f,
--1.167366441e-02f, -1.167538731e-02f, -1.167708994e-02f, -1.167877231e-02f, -1.168043440e-02f, -1.168207623e-02f, -1.168369777e-02f, -1.168529904e-02f, -1.168688004e-02f, -1.168844075e-02f,
--1.168998118e-02f, -1.169150133e-02f, -1.169300120e-02f, -1.169448078e-02f, -1.169594008e-02f, -1.169737908e-02f, -1.169879780e-02f, -1.170019622e-02f, -1.170157435e-02f, -1.170293219e-02f,
--1.170426973e-02f, -1.170558698e-02f, -1.170688393e-02f, -1.170816058e-02f, -1.170941693e-02f, -1.171065298e-02f, -1.171186873e-02f, -1.171306417e-02f, -1.171423931e-02f, -1.171539415e-02f,
--1.171652868e-02f, -1.171764291e-02f, -1.171873683e-02f, -1.171981044e-02f, -1.172086374e-02f, -1.172189673e-02f, -1.172290941e-02f, -1.172390178e-02f, -1.172487384e-02f, -1.172582559e-02f,
--1.172675702e-02f, -1.172766814e-02f, -1.172855895e-02f, -1.172942944e-02f, -1.173027962e-02f, -1.173110949e-02f, -1.173191904e-02f, -1.173270827e-02f, -1.173347719e-02f, -1.173422579e-02f,
--1.173495408e-02f, -1.173566205e-02f, -1.173634970e-02f, -1.173701704e-02f, -1.173766406e-02f, -1.173829076e-02f, -1.173889715e-02f, -1.173948322e-02f, -1.174004898e-02f, -1.174059441e-02f,
--1.174111954e-02f, -1.174162434e-02f, -1.174210884e-02f, -1.174257301e-02f, -1.174301687e-02f, -1.174344042e-02f, -1.174384365e-02f, -1.174422657e-02f, -1.174458917e-02f, -1.174493146e-02f,
--1.174525344e-02f, -1.174555511e-02f, -1.174583646e-02f, -1.174609750e-02f, -1.174633824e-02f, -1.174655866e-02f, -1.174675878e-02f, -1.174693858e-02f, -1.174709809e-02f, -1.174723728e-02f,
--1.174735617e-02f, -1.174745475e-02f, -1.174753303e-02f, -1.174759101e-02f, -1.174762868e-02f, -1.174764606e-02f, -1.174764313e-02f, -1.174761991e-02f, -1.174757639e-02f, -1.174751257e-02f,
--1.174742846e-02f, -1.174732405e-02f, -1.174719936e-02f, -1.174705437e-02f, -1.174688909e-02f, -1.174670352e-02f, -1.174649766e-02f, -1.174627152e-02f, -1.174602510e-02f, -1.174575839e-02f,
--1.174547140e-02f, -1.174516414e-02f, -1.174483659e-02f, -1.174448877e-02f, -1.174412067e-02f, -1.174373230e-02f, -1.174332367e-02f, -1.174289476e-02f, -1.174244558e-02f, -1.174197614e-02f,
--1.174148644e-02f, -1.174097647e-02f, -1.174044624e-02f, -1.173989576e-02f, -1.173932502e-02f, -1.173873403e-02f, -1.173812279e-02f, -1.173749129e-02f, -1.173683955e-02f, -1.173616757e-02f,
--1.173547534e-02f, -1.173476287e-02f, -1.173403017e-02f, -1.173327723e-02f, -1.173250406e-02f, -1.173171065e-02f, -1.173089702e-02f, -1.173006316e-02f, -1.172920908e-02f, -1.172833478e-02f,
--1.172744026e-02f, -1.172652552e-02f, -1.172559058e-02f, -1.172463542e-02f, -1.172366005e-02f, -1.172266448e-02f, -1.172164871e-02f, -1.172061274e-02f, -1.171955658e-02f, -1.171848022e-02f,
--1.171738367e-02f, -1.171626693e-02f, -1.171513001e-02f, -1.171397291e-02f, -1.171279563e-02f, -1.171159818e-02f, -1.171038055e-02f, -1.170914276e-02f, -1.170788480e-02f, -1.170660668e-02f,
--1.170530840e-02f, -1.170398997e-02f, -1.170265138e-02f, -1.170129265e-02f, -1.169991377e-02f, -1.169851475e-02f, -1.169709559e-02f, -1.169565629e-02f, -1.169419687e-02f, -1.169271732e-02f,
--1.169121764e-02f, -1.168969784e-02f, -1.168815793e-02f, -1.168659791e-02f, -1.168501777e-02f, -1.168341753e-02f, -1.168179720e-02f, -1.168015676e-02f, -1.167849623e-02f, -1.167681561e-02f,
--1.167511490e-02f, -1.167339412e-02f, -1.167165325e-02f, -1.166989232e-02f, -1.166811131e-02f, -1.166631024e-02f, -1.166448911e-02f, -1.166264792e-02f, -1.166078668e-02f, -1.165890540e-02f,
--1.165700407e-02f, -1.165508270e-02f, -1.165314129e-02f, -1.165117985e-02f, -1.164919839e-02f, -1.164719691e-02f, -1.164517541e-02f, -1.164313390e-02f, -1.164107238e-02f, -1.163899086e-02f,
--1.163688934e-02f, -1.163476782e-02f, -1.163262632e-02f, -1.163046483e-02f, -1.162828337e-02f, -1.162608193e-02f, -1.162386052e-02f, -1.162161914e-02f, -1.161935781e-02f, -1.161707652e-02f,
--1.161477528e-02f, -1.161245410e-02f, -1.161011298e-02f, -1.160775192e-02f, -1.160537093e-02f, -1.160297002e-02f, -1.160054919e-02f, -1.159810845e-02f, -1.159564780e-02f, -1.159316725e-02f,
--1.159066680e-02f, -1.158814645e-02f, -1.158560622e-02f, -1.158304611e-02f, -1.158046612e-02f, -1.157786627e-02f, -1.157524654e-02f, -1.157260696e-02f, -1.156994753e-02f, -1.156726825e-02f,
--1.156456912e-02f, -1.156185016e-02f, -1.155911137e-02f, -1.155635276e-02f, -1.155357432e-02f, -1.155077607e-02f, -1.154795802e-02f, -1.154512016e-02f, -1.154226251e-02f, -1.153938507e-02f,
--1.153648785e-02f, -1.153357085e-02f, -1.153063407e-02f, -1.152767754e-02f, -1.152470124e-02f, -1.152170520e-02f, -1.151868940e-02f, -1.151565387e-02f, -1.151259860e-02f, -1.150952361e-02f,
--1.150642889e-02f, -1.150331446e-02f, -1.150018032e-02f, -1.149702648e-02f, -1.149385295e-02f, -1.149065973e-02f, -1.148744682e-02f, -1.148421424e-02f, -1.148096199e-02f, -1.147769008e-02f,
--1.147439851e-02f, -1.147108730e-02f, -1.146775644e-02f, -1.146440595e-02f, -1.146103583e-02f, -1.145764609e-02f, -1.145423674e-02f, -1.145080778e-02f, -1.144735921e-02f, -1.144389106e-02f,
--1.144040332e-02f, -1.143689600e-02f, -1.143336910e-02f, -1.142982265e-02f, -1.142625663e-02f, -1.142267106e-02f, -1.141906595e-02f, -1.141544131e-02f, -1.141179714e-02f, -1.140813344e-02f,
--1.140445023e-02f, -1.140074752e-02f, -1.139702530e-02f, -1.139328360e-02f, -1.138952241e-02f, -1.138574174e-02f, -1.138194160e-02f, -1.137812201e-02f, -1.137428296e-02f, -1.137042446e-02f,
--1.136654653e-02f, -1.136264916e-02f, -1.135873237e-02f, -1.135479617e-02f, -1.135084056e-02f, -1.134686555e-02f, -1.134287115e-02f, -1.133885737e-02f, -1.133482421e-02f, -1.133077169e-02f,
--1.132669980e-02f, -1.132260857e-02f, -1.131849799e-02f, -1.131436807e-02f, -1.131021883e-02f, -1.130605027e-02f, -1.130186240e-02f, -1.129765523e-02f, -1.129342877e-02f, -1.128918302e-02f,
--1.128491799e-02f, -1.128063370e-02f, -1.127633014e-02f, -1.127200733e-02f, -1.126766528e-02f, -1.126330400e-02f, -1.125892349e-02f, -1.125452376e-02f, -1.125010482e-02f, -1.124566668e-02f,
--1.124120936e-02f, -1.123673284e-02f, -1.123223716e-02f, -1.122772231e-02f, -1.122318830e-02f, -1.121863515e-02f, -1.121406286e-02f, -1.120947144e-02f, -1.120486089e-02f, -1.120023124e-02f,
--1.119558248e-02f, -1.119091463e-02f, -1.118622770e-02f, -1.118152169e-02f, -1.117679662e-02f, -1.117205248e-02f, -1.116728930e-02f, -1.116250709e-02f, -1.115770584e-02f, -1.115288557e-02f,
--1.114804629e-02f, -1.114318802e-02f, -1.113831075e-02f, -1.113341449e-02f, -1.112849927e-02f, -1.112356508e-02f, -1.111861194e-02f, -1.111363985e-02f, -1.110864883e-02f, -1.110363889e-02f,
--1.109861003e-02f, -1.109356226e-02f, -1.108849560e-02f, -1.108341006e-02f, -1.107830563e-02f, -1.107318234e-02f, -1.106804020e-02f, -1.106287921e-02f, -1.105769938e-02f, -1.105250072e-02f,
--1.104728325e-02f, -1.104204697e-02f, -1.103679190e-02f, -1.103151804e-02f, -1.102622540e-02f, -1.102091400e-02f, -1.101558384e-02f, -1.101023493e-02f, -1.100486729e-02f, -1.099948093e-02f,
--1.099407585e-02f, -1.098865206e-02f, -1.098320958e-02f, -1.097774842e-02f, -1.097226859e-02f, -1.096677009e-02f, -1.096125294e-02f, -1.095571715e-02f, -1.095016272e-02f, -1.094458968e-02f,
--1.093899802e-02f, -1.093338777e-02f, -1.092775893e-02f, -1.092211151e-02f, -1.091644552e-02f, -1.091076098e-02f, -1.090505789e-02f, -1.089933627e-02f, -1.089359612e-02f, -1.088783746e-02f,
--1.088206030e-02f, -1.087626465e-02f, -1.087045052e-02f, -1.086461792e-02f, -1.085876686e-02f, -1.085289735e-02f, -1.084700941e-02f, -1.084110305e-02f, -1.083517827e-02f, -1.082923509e-02f,
--1.082327352e-02f, -1.081729357e-02f, -1.081129525e-02f, -1.080527858e-02f, -1.079924356e-02f, -1.079319020e-02f, -1.078711853e-02f, -1.078102854e-02f, -1.077492025e-02f, -1.076879368e-02f,
--1.076264883e-02f, -1.075648571e-02f, -1.075030434e-02f, -1.074410474e-02f, -1.073788690e-02f, -1.073165084e-02f, -1.072539657e-02f, -1.071912412e-02f, -1.071283347e-02f, -1.070652466e-02f,
--1.070019769e-02f, -1.069385257e-02f, -1.068748932e-02f, -1.068110795e-02f, -1.067470846e-02f, -1.066829087e-02f, -1.066185520e-02f, -1.065540145e-02f, -1.064892964e-02f, -1.064243978e-02f,
--1.063593188e-02f, -1.062940596e-02f, -1.062286202e-02f, -1.061630008e-02f, -1.060972015e-02f, -1.060312224e-02f, -1.059650637e-02f, -1.058987254e-02f, -1.058322078e-02f, -1.057655108e-02f,
--1.056986348e-02f, -1.056315797e-02f, -1.055643457e-02f, -1.054969329e-02f, -1.054293415e-02f, -1.053615716e-02f, -1.052936233e-02f, -1.052254967e-02f, -1.051571920e-02f, -1.050887092e-02f,
--1.050200486e-02f, -1.049512102e-02f, -1.048821942e-02f, -1.048130007e-02f, -1.047436299e-02f, -1.046740818e-02f, -1.046043566e-02f, -1.045344544e-02f, -1.044643753e-02f, -1.043941196e-02f,
--1.043236872e-02f, -1.042530784e-02f, -1.041822933e-02f, -1.041113319e-02f, -1.040401946e-02f, -1.039688812e-02f, -1.038973921e-02f, -1.038257274e-02f, -1.037538871e-02f, -1.036818714e-02f,
--1.036096804e-02f, -1.035373143e-02f, -1.034647732e-02f, -1.033920573e-02f, -1.033191666e-02f, -1.032461014e-02f, -1.031728617e-02f, -1.030994477e-02f, -1.030258595e-02f, -1.029520972e-02f,
--1.028781611e-02f, -1.028040511e-02f, -1.027297676e-02f, -1.026553105e-02f, -1.025806801e-02f, -1.025058765e-02f, -1.024308998e-02f, -1.023557501e-02f, -1.022804277e-02f, -1.022049326e-02f,
--1.021292649e-02f, -1.020534249e-02f, -1.019774127e-02f, -1.019012283e-02f, -1.018248720e-02f, -1.017483438e-02f, -1.016716440e-02f, -1.015947726e-02f, -1.015177299e-02f, -1.014405159e-02f,
--1.013631308e-02f, -1.012855747e-02f, -1.012078478e-02f, -1.011299502e-02f, -1.010518821e-02f, -1.009736436e-02f, -1.008952348e-02f, -1.008166559e-02f, -1.007379071e-02f, -1.006589885e-02f,
--1.005799002e-02f, -1.005006424e-02f, -1.004212152e-02f, -1.003416187e-02f, -1.002618532e-02f, -1.001819188e-02f, -1.001018155e-02f, -1.000215437e-02f, -9.994110328e-03f, -9.986049457e-03f,
--9.977971765e-03f, -9.969877269e-03f, -9.961765983e-03f, -9.953637922e-03f, -9.945493101e-03f, -9.937331535e-03f, -9.929153239e-03f, -9.920958227e-03f, -9.912746516e-03f, -9.904518119e-03f,
--9.896273053e-03f, -9.888011332e-03f, -9.879732972e-03f, -9.871437988e-03f, -9.863126394e-03f, -9.854798207e-03f, -9.846453441e-03f, -9.838092111e-03f, -9.829714234e-03f, -9.821319825e-03f,
--9.812908898e-03f, -9.804481470e-03f, -9.796037555e-03f, -9.787577169e-03f, -9.779100329e-03f, -9.770607048e-03f, -9.762097344e-03f, -9.753571231e-03f, -9.745028724e-03f, -9.736469841e-03f,
--9.727894596e-03f, -9.719303004e-03f, -9.710695083e-03f, -9.702070847e-03f, -9.693430312e-03f, -9.684773495e-03f, -9.676100410e-03f, -9.667411074e-03f, -9.658705503e-03f, -9.649983713e-03f,
--9.641245718e-03f, -9.632491537e-03f, -9.623721184e-03f, -9.614934675e-03f, -9.606132027e-03f, -9.597313256e-03f, -9.588478377e-03f, -9.579627407e-03f, -9.570760363e-03f, -9.561877259e-03f,
--9.552978113e-03f, -9.544062941e-03f, -9.535131758e-03f, -9.526184582e-03f, -9.517221428e-03f, -9.508242313e-03f, -9.499247254e-03f, -9.490236266e-03f, -9.481209366e-03f, -9.472166571e-03f,
--9.463107896e-03f, -9.454033360e-03f, -9.444942977e-03f, -9.435836765e-03f, -9.426714740e-03f, -9.417576919e-03f, -9.408423318e-03f, -9.399253955e-03f, -9.390068845e-03f, -9.380868006e-03f,
--9.371651454e-03f, -9.362419206e-03f, -9.353171279e-03f, -9.343907690e-03f, -9.334628455e-03f, -9.325333591e-03f, -9.316023116e-03f, -9.306697046e-03f, -9.297355398e-03f, -9.287998189e-03f,
--9.278625436e-03f, -9.269237157e-03f, -9.259833367e-03f, -9.250414085e-03f, -9.240979328e-03f, -9.231529111e-03f, -9.222063454e-03f, -9.212582372e-03f, -9.203085884e-03f, -9.193574006e-03f,
--9.184046755e-03f, -9.174504150e-03f, -9.164946206e-03f, -9.155372942e-03f, -9.145784375e-03f, -9.136180522e-03f, -9.126561401e-03f, -9.116927029e-03f, -9.107277423e-03f, -9.097612602e-03f,
--9.087932582e-03f, -9.078237382e-03f, -9.068527018e-03f, -9.058801508e-03f, -9.049060871e-03f, -9.039305122e-03f, -9.029534282e-03f, -9.019748366e-03f, -9.009947392e-03f, -9.000131379e-03f,
--8.990300345e-03f, -8.980454306e-03f, -8.970593281e-03f, -8.960717287e-03f, -8.950826343e-03f, -8.940920467e-03f, -8.930999675e-03f, -8.921063987e-03f, -8.911113420e-03f, -8.901147993e-03f,
--8.891167722e-03f, -8.881172627e-03f, -8.871162725e-03f, -8.861138034e-03f, -8.851098573e-03f, -8.841044360e-03f, -8.830975412e-03f, -8.820891749e-03f, -8.810793387e-03f, -8.800680346e-03f,
--8.790552644e-03f, -8.780410299e-03f, -8.770253329e-03f, -8.760081753e-03f, -8.749895588e-03f, -8.739694855e-03f, -8.729479570e-03f, -8.719249752e-03f, -8.709005420e-03f, -8.698746592e-03f,
--8.688473286e-03f, -8.678185522e-03f, -8.667883318e-03f, -8.657566692e-03f, -8.647235662e-03f, -8.636890249e-03f, -8.626530469e-03f, -8.616156343e-03f, -8.605767888e-03f, -8.595365123e-03f,
--8.584948067e-03f, -8.574516739e-03f, -8.564071158e-03f, -8.553611342e-03f, -8.543137310e-03f, -8.532649081e-03f, -8.522146674e-03f, -8.511630109e-03f, -8.501099402e-03f, -8.490554575e-03f,
--8.479995645e-03f, -8.469422633e-03f, -8.458835555e-03f, -8.448234433e-03f, -8.437619285e-03f, -8.426990129e-03f, -8.416346986e-03f, -8.405689873e-03f, -8.395018812e-03f, -8.384333819e-03f,
--8.373634916e-03f, -8.362922120e-03f, -8.352195452e-03f, -8.341454930e-03f, -8.330700575e-03f, -8.319932404e-03f, -8.309150438e-03f, -8.298354696e-03f, -8.287545197e-03f, -8.276721960e-03f,
--8.265885006e-03f, -8.255034353e-03f, -8.244170022e-03f, -8.233292031e-03f, -8.222400400e-03f, -8.211495149e-03f, -8.200576297e-03f, -8.189643864e-03f, -8.178697869e-03f, -8.167738332e-03f,
--8.156765273e-03f, -8.145778712e-03f, -8.134778667e-03f, -8.123765160e-03f, -8.112738209e-03f, -8.101697834e-03f, -8.090644056e-03f, -8.079576894e-03f, -8.068496367e-03f, -8.057402496e-03f,
--8.046295301e-03f, -8.035174801e-03f, -8.024041017e-03f, -8.012893968e-03f, -8.001733674e-03f, -7.990560156e-03f, -7.979373433e-03f, -7.968173525e-03f, -7.956960453e-03f, -7.945734236e-03f,
--7.934494895e-03f, -7.923242450e-03f, -7.911976920e-03f, -7.900698327e-03f, -7.889406690e-03f, -7.878102029e-03f, -7.866784365e-03f, -7.855453718e-03f, -7.844110108e-03f, -7.832753555e-03f,
--7.821384081e-03f, -7.810001704e-03f, -7.798606446e-03f, -7.787198327e-03f, -7.775777367e-03f, -7.764343587e-03f, -7.752897007e-03f, -7.741437648e-03f, -7.729965530e-03f, -7.718480673e-03f,
--7.706983098e-03f, -7.695472827e-03f, -7.683949878e-03f, -7.672414273e-03f, -7.660866033e-03f, -7.649305177e-03f, -7.637731728e-03f, -7.626145705e-03f, -7.614547128e-03f, -7.602936020e-03f,
--7.591312400e-03f, -7.579676290e-03f, -7.568027709e-03f, -7.556366680e-03f, -7.544693222e-03f, -7.533007356e-03f, -7.521309104e-03f, -7.509598486e-03f, -7.497875523e-03f, -7.486140237e-03f,
--7.474392647e-03f, -7.462632775e-03f, -7.450860642e-03f, -7.439076269e-03f, -7.427279677e-03f, -7.415470887e-03f, -7.403649920e-03f, -7.391816797e-03f, -7.379971539e-03f, -7.368114167e-03f,
--7.356244703e-03f, -7.344363168e-03f, -7.332469582e-03f, -7.320563967e-03f, -7.308646345e-03f, -7.296716735e-03f, -7.284775161e-03f, -7.272821642e-03f, -7.260856201e-03f, -7.248878858e-03f,
--7.236889635e-03f, -7.224888554e-03f, -7.212875635e-03f, -7.200850900e-03f, -7.188814370e-03f, -7.176766067e-03f, -7.164706012e-03f, -7.152634228e-03f, -7.140550734e-03f, -7.128455553e-03f,
--7.116348706e-03f, -7.104230215e-03f, -7.092100102e-03f, -7.079958387e-03f, -7.067805093e-03f, -7.055640241e-03f, -7.043463853e-03f, -7.031275951e-03f, -7.019076555e-03f, -7.006865688e-03f,
--6.994643372e-03f, -6.982409628e-03f, -6.970164478e-03f, -6.957907944e-03f, -6.945640048e-03f, -6.933360810e-03f, -6.921070254e-03f, -6.908768401e-03f, -6.896455273e-03f, -6.884130892e-03f,
--6.871795279e-03f, -6.859448457e-03f, -6.847090447e-03f, -6.834721272e-03f, -6.822340953e-03f, -6.809949513e-03f, -6.797546973e-03f, -6.785133355e-03f, -6.772708682e-03f, -6.760272976e-03f,
--6.747826258e-03f, -6.735368551e-03f, -6.722899876e-03f, -6.710420257e-03f, -6.697929715e-03f, -6.685428271e-03f, -6.672915950e-03f, -6.660392772e-03f, -6.647858760e-03f, -6.635313936e-03f,
--6.622758322e-03f, -6.610191941e-03f, -6.597614815e-03f, -6.585026966e-03f, -6.572428417e-03f, -6.559819189e-03f, -6.547199306e-03f, -6.534568789e-03f, -6.521927662e-03f, -6.509275945e-03f,
--6.496613663e-03f, -6.483940837e-03f, -6.471257489e-03f, -6.458563643e-03f, -6.445859321e-03f, -6.433144545e-03f, -6.420419337e-03f, -6.407683721e-03f, -6.394937718e-03f, -6.382181352e-03f,
--6.369414645e-03f, -6.356637620e-03f, -6.343850299e-03f, -6.331052705e-03f, -6.318244860e-03f, -6.305426788e-03f, -6.292598511e-03f, -6.279760051e-03f, -6.266911431e-03f, -6.254052675e-03f,
--6.241183805e-03f, -6.228304843e-03f, -6.215415812e-03f, -6.202516736e-03f, -6.189607637e-03f, -6.176688538e-03f, -6.163759462e-03f, -6.150820431e-03f, -6.137871469e-03f, -6.124912598e-03f,
--6.111943842e-03f, -6.098965222e-03f, -6.085976763e-03f, -6.072978488e-03f, -6.059970418e-03f, -6.046952578e-03f, -6.033924990e-03f, -6.020887677e-03f, -6.007840662e-03f, -5.994783968e-03f,
--5.981717619e-03f, -5.968641638e-03f, -5.955556047e-03f, -5.942460870e-03f, -5.929356130e-03f, -5.916241849e-03f, -5.903118052e-03f, -5.889984761e-03f, -5.876842000e-03f, -5.863689792e-03f,
--5.850528159e-03f, -5.837357126e-03f, -5.824176716e-03f, -5.810986951e-03f, -5.797787855e-03f, -5.784579451e-03f, -5.771361764e-03f, -5.758134815e-03f, -5.744898629e-03f, -5.731653228e-03f,
--5.718398636e-03f, -5.705134877e-03f, -5.691861974e-03f, -5.678579951e-03f, -5.665288830e-03f, -5.651988635e-03f, -5.638679390e-03f, -5.625361118e-03f, -5.612033842e-03f, -5.598697587e-03f,
--5.585352375e-03f, -5.571998231e-03f, -5.558635178e-03f, -5.545263238e-03f, -5.531882437e-03f, -5.518492797e-03f, -5.505094343e-03f, -5.491687097e-03f, -5.478271083e-03f, -5.464846325e-03f,
--5.451412847e-03f, -5.437970672e-03f, -5.424519825e-03f, -5.411060328e-03f, -5.397592205e-03f, -5.384115481e-03f, -5.370630179e-03f, -5.357136322e-03f, -5.343633935e-03f, -5.330123041e-03f,
--5.316603664e-03f, -5.303075828e-03f, -5.289539556e-03f, -5.275994873e-03f, -5.262441802e-03f, -5.248880368e-03f, -5.235310593e-03f, -5.221732503e-03f, -5.208146121e-03f, -5.194551470e-03f,
--5.180948575e-03f, -5.167337459e-03f, -5.153718148e-03f, -5.140090664e-03f, -5.126455031e-03f, -5.112811274e-03f, -5.099159417e-03f, -5.085499483e-03f, -5.071831497e-03f, -5.058155482e-03f,
--5.044471463e-03f, -5.030779464e-03f, -5.017079509e-03f, -5.003371622e-03f, -4.989655827e-03f, -4.975932148e-03f, -4.962200610e-03f, -4.948461236e-03f, -4.934714050e-03f, -4.920959077e-03f,
--4.907196342e-03f, -4.893425867e-03f, -4.879647678e-03f, -4.865861798e-03f, -4.852068253e-03f, -4.838267065e-03f, -4.824458260e-03f, -4.810641861e-03f, -4.796817893e-03f, -4.782986380e-03f,
--4.769147347e-03f, -4.755300817e-03f, -4.741446815e-03f, -4.727585366e-03f, -4.713716494e-03f, -4.699840222e-03f, -4.685956576e-03f, -4.672065580e-03f, -4.658167259e-03f, -4.644261636e-03f,
--4.630348736e-03f, -4.616428583e-03f, -4.602501202e-03f, -4.588566618e-03f, -4.574624855e-03f, -4.560675936e-03f, -4.546719888e-03f, -4.532756734e-03f, -4.518786499e-03f, -4.504809207e-03f,
--4.490824883e-03f, -4.476833551e-03f, -4.462835236e-03f, -4.448829962e-03f, -4.434817755e-03f, -4.420798638e-03f, -4.406772636e-03f, -4.392739775e-03f, -4.378700077e-03f, -4.364653569e-03f,
--4.350600274e-03f, -4.336540217e-03f, -4.322473424e-03f, -4.308399918e-03f, -4.294319724e-03f, -4.280232868e-03f, -4.266139373e-03f, -4.252039264e-03f, -4.237932566e-03f, -4.223819305e-03f,
--4.209699503e-03f, -4.195573187e-03f, -4.181440381e-03f, -4.167301110e-03f, -4.153155399e-03f, -4.139003271e-03f, -4.124844753e-03f, -4.110679869e-03f, -4.096508644e-03f, -4.082331102e-03f,
--4.068147268e-03f, -4.053957168e-03f, -4.039760826e-03f, -4.025558267e-03f, -4.011349516e-03f, -3.997134597e-03f, -3.982913536e-03f, -3.968686357e-03f, -3.954453086e-03f, -3.940213747e-03f,
--3.925968366e-03f, -3.911716966e-03f, -3.897459574e-03f, -3.883196214e-03f, -3.868926910e-03f, -3.854651689e-03f, -3.840370575e-03f, -3.826083592e-03f, -3.811790767e-03f, -3.797492124e-03f,
--3.783187687e-03f, -3.768877482e-03f, -3.754561535e-03f, -3.740239870e-03f, -3.725912511e-03f, -3.711579485e-03f, -3.697240816e-03f, -3.682896529e-03f, -3.668546650e-03f, -3.654191203e-03f,
--3.639830214e-03f, -3.625463707e-03f, -3.611091709e-03f, -3.596714243e-03f, -3.582331335e-03f, -3.567943010e-03f, -3.553549294e-03f, -3.539150211e-03f, -3.524745787e-03f, -3.510336047e-03f,
--3.495921015e-03f, -3.481500718e-03f, -3.467075180e-03f, -3.452644427e-03f, -3.438208483e-03f, -3.423767375e-03f, -3.409321127e-03f, -3.394869764e-03f, -3.380413312e-03f, -3.365951796e-03f,
--3.351485241e-03f, -3.337013672e-03f, -3.322537115e-03f, -3.308055596e-03f, -3.293569138e-03f, -3.279077768e-03f, -3.264581511e-03f, -3.250080392e-03f, -3.235574437e-03f, -3.221063670e-03f,
--3.206548118e-03f, -3.192027805e-03f, -3.177502756e-03f, -3.162972998e-03f, -3.148438556e-03f, -3.133899454e-03f, -3.119355719e-03f, -3.104807375e-03f, -3.090254448e-03f, -3.075696963e-03f,
--3.061134947e-03f, -3.046568423e-03f, -3.031997418e-03f, -3.017421957e-03f, -3.002842065e-03f, -2.988257769e-03f, -2.973669092e-03f, -2.959076061e-03f, -2.944478701e-03f, -2.929877038e-03f,
--2.915271097e-03f, -2.900660903e-03f, -2.886046483e-03f, -2.871427860e-03f, -2.856805062e-03f, -2.842178113e-03f, -2.827547039e-03f, -2.812911865e-03f, -2.798272617e-03f, -2.783629321e-03f,
--2.768982002e-03f, -2.754330684e-03f, -2.739675395e-03f, -2.725016160e-03f, -2.710353003e-03f, -2.695685951e-03f, -2.681015029e-03f, -2.666340263e-03f, -2.651661678e-03f, -2.636979300e-03f,
--2.622293154e-03f, -2.607603266e-03f, -2.592909661e-03f, -2.578212366e-03f, -2.563511405e-03f, -2.548806804e-03f, -2.534098590e-03f, -2.519386786e-03f, -2.504671420e-03f, -2.489952517e-03f,
--2.475230101e-03f, -2.460504200e-03f, -2.445774838e-03f, -2.431042042e-03f, -2.416305836e-03f, -2.401566247e-03f, -2.386823299e-03f, -2.372077020e-03f, -2.357327434e-03f, -2.342574567e-03f,
--2.327818444e-03f, -2.313059092e-03f, -2.298296536e-03f, -2.283530802e-03f, -2.268761915e-03f, -2.253989901e-03f, -2.239214786e-03f, -2.224436596e-03f, -2.209655355e-03f, -2.194871091e-03f,
--2.180083828e-03f, -2.165293592e-03f, -2.150500409e-03f, -2.135704305e-03f, -2.120905305e-03f, -2.106103436e-03f, -2.091298722e-03f, -2.076491190e-03f, -2.061680865e-03f, -2.046867773e-03f,
--2.032051940e-03f, -2.017233391e-03f, -2.002412153e-03f, -1.987588250e-03f, -1.972761710e-03f, -1.957932557e-03f, -1.943100817e-03f, -1.928266516e-03f, -1.913429680e-03f, -1.898590335e-03f,
--1.883748505e-03f, -1.868904218e-03f, -1.854057499e-03f, -1.839208374e-03f, -1.824356868e-03f, -1.809503007e-03f, -1.794646817e-03f, -1.779788324e-03f, -1.764927553e-03f, -1.750064531e-03f,
--1.735199283e-03f, -1.720331835e-03f, -1.705462213e-03f, -1.690590442e-03f, -1.675716549e-03f, -1.660840559e-03f, -1.645962498e-03f, -1.631082391e-03f, -1.616200266e-03f, -1.601316147e-03f,
--1.586430060e-03f, -1.571542031e-03f, -1.556652086e-03f, -1.541760251e-03f, -1.526866551e-03f, -1.511971013e-03f, -1.497073661e-03f, -1.482174523e-03f, -1.467273624e-03f, -1.452370990e-03f,
--1.437466646e-03f, -1.422560619e-03f, -1.407652933e-03f, -1.392743616e-03f, -1.377832693e-03f, -1.362920189e-03f, -1.348006132e-03f, -1.333090545e-03f, -1.318173456e-03f, -1.303254890e-03f,
--1.288334873e-03f, -1.273413431e-03f, -1.258490590e-03f, -1.243566375e-03f, -1.228640813e-03f, -1.213713928e-03f, -1.198785748e-03f, -1.183856298e-03f, -1.168925604e-03f, -1.153993692e-03f,
--1.139060587e-03f, -1.124126316e-03f, -1.109190903e-03f, -1.094254376e-03f, -1.079316760e-03f, -1.064378081e-03f, -1.049438365e-03f, -1.034497637e-03f, -1.019555924e-03f, -1.004613251e-03f,
--9.896696442e-04f, -9.747251295e-04f, -9.597797327e-04f, -9.448334798e-04f, -9.298863964e-04f, -9.149385086e-04f, -8.999898422e-04f, -8.850404231e-04f, -8.700902770e-04f, -8.551394300e-04f,
--8.401879077e-04f, -8.252357362e-04f, -8.102829413e-04f, -7.953295488e-04f, -7.803755847e-04f, -7.654210747e-04f, -7.504660447e-04f, -7.355105206e-04f, -7.205545283e-04f, -7.055980936e-04f,
--6.906412424e-04f, -6.756840005e-04f, -6.607263938e-04f, -6.457684481e-04f, -6.308101894e-04f, -6.158516435e-04f, -6.008928362e-04f, -5.859337933e-04f, -5.709745408e-04f, -5.560151045e-04f,
--5.410555102e-04f, -5.260957838e-04f, -5.111359512e-04f, -4.961760381e-04f, -4.812160705e-04f, -4.662560742e-04f, -4.512960749e-04f, -4.363360987e-04f, -4.213761713e-04f, -4.064163185e-04f,
--3.914565662e-04f, -3.764969403e-04f, -3.615374665e-04f, -3.465781707e-04f, -3.316190788e-04f, -3.166602165e-04f, -3.017016097e-04f, -2.867432842e-04f, -2.717852658e-04f, -2.568275805e-04f,
--2.418702539e-04f, -2.269133119e-04f, -2.119567803e-04f, -1.970006850e-04f, -1.820450517e-04f, -1.670899063e-04f, -1.521352746e-04f, -1.371811823e-04f, -1.222276554e-04f, -1.072747195e-04f,
--9.232240045e-05f, -7.737072411e-05f, -6.241971625e-05f, -4.746940266e-05f, -3.251980912e-05f, -1.757096141e-05f, -2.622885336e-06f, 1.232439334e-05f, 2.727084882e-05f, 4.221645535e-05f,
-5.716118715e-05f, 7.210501844e-05f, 8.704792347e-05f, 1.019898765e-04f, 1.169308517e-04f, 1.318708233e-04f, 1.468097657e-04f, 1.617476529e-04f, 1.766844594e-04f, 1.916201594e-04f,
-2.065547270e-04f, 2.214881366e-04f, 2.364203624e-04f, 2.513513788e-04f, 2.662811599e-04f, 2.812096801e-04f, 2.961369136e-04f, 3.110628347e-04f, 3.259874177e-04f, 3.409106368e-04f,
-3.558324665e-04f, 3.707528810e-04f, 3.856718545e-04f, 4.005893614e-04f, 4.155053760e-04f, 4.304198726e-04f, 4.453328255e-04f, 4.602442091e-04f, 4.751539976e-04f, 4.900621655e-04f,
-5.049686869e-04f, 5.198735364e-04f, 5.347766881e-04f, 5.496781165e-04f, 5.645777959e-04f, 5.794757007e-04f, 5.943718052e-04f, 6.092660838e-04f, 6.241585108e-04f, 6.390490607e-04f,
-6.539377078e-04f, 6.688244264e-04f, 6.837091910e-04f, 6.985919760e-04f, 7.134727558e-04f, 7.283515047e-04f, 7.432281971e-04f, 7.581028076e-04f, 7.729753105e-04f, 7.878456801e-04f,
-8.027138910e-04f, 8.175799176e-04f, 8.324437343e-04f, 8.473053155e-04f, 8.621646358e-04f, 8.770216695e-04f, 8.918763911e-04f, 9.067287751e-04f, 9.215787959e-04f, 9.364264280e-04f,
-9.512716459e-04f, 9.661144241e-04f, 9.809547370e-04f, 9.957925592e-04f, 1.010627865e-03f, 1.025460629e-03f, 1.040290827e-03f, 1.055118431e-03f, 1.069943417e-03f, 1.084765760e-03f,
-1.099585433e-03f, 1.114402412e-03f, 1.129216671e-03f, 1.144028184e-03f, 1.158836926e-03f, 1.173642873e-03f, 1.188445997e-03f, 1.203246274e-03f, 1.218043679e-03f, 1.232838185e-03f,
-1.247629768e-03f, 1.262418403e-03f, 1.277204063e-03f, 1.291986724e-03f, 1.306766359e-03f, 1.321542945e-03f, 1.336316454e-03f, 1.351086863e-03f, 1.365854145e-03f, 1.380618276e-03f,
-1.395379229e-03f, 1.410136980e-03f, 1.424891503e-03f, 1.439642774e-03f, 1.454390766e-03f, 1.469135454e-03f, 1.483876813e-03f, 1.498614818e-03f, 1.513349444e-03f, 1.528080665e-03f,
-1.542808456e-03f, 1.557532791e-03f, 1.572253646e-03f, 1.586970996e-03f, 1.601684814e-03f, 1.616395076e-03f, 1.631101756e-03f, 1.645804830e-03f, 1.660504272e-03f, 1.675200056e-03f,
-1.689892159e-03f, 1.704580554e-03f, 1.719265216e-03f, 1.733946121e-03f, 1.748623242e-03f, 1.763296555e-03f, 1.777966036e-03f, 1.792631657e-03f, 1.807293396e-03f, 1.821951225e-03f,
-1.836605121e-03f, 1.851255058e-03f, 1.865901011e-03f, 1.880542955e-03f, 1.895180864e-03f, 1.909814715e-03f, 1.924444481e-03f, 1.939070138e-03f, 1.953691661e-03f, 1.968309024e-03f,
-1.982922203e-03f, 1.997531172e-03f, 2.012135907e-03f, 2.026736383e-03f, 2.041332574e-03f, 2.055924455e-03f, 2.070512002e-03f, 2.085095190e-03f, 2.099673994e-03f, 2.114248388e-03f,
-2.128818348e-03f, 2.143383848e-03f, 2.157944865e-03f, 2.172501373e-03f, 2.187053346e-03f, 2.201600761e-03f, 2.216143593e-03f, 2.230681815e-03f, 2.245215405e-03f, 2.259744336e-03f,
-2.274268583e-03f, 2.288788123e-03f, 2.303302930e-03f, 2.317812980e-03f, 2.332318247e-03f, 2.346818707e-03f, 2.361314334e-03f, 2.375805105e-03f, 2.390290994e-03f, 2.404771977e-03f,
-2.419248029e-03f, 2.433719125e-03f, 2.448185241e-03f, 2.462646351e-03f, 2.477102431e-03f, 2.491553456e-03f, 2.505999402e-03f, 2.520440244e-03f, 2.534875957e-03f, 2.549306517e-03f,
-2.563731899e-03f, 2.578152078e-03f, 2.592567029e-03f, 2.606976729e-03f, 2.621381152e-03f, 2.635780274e-03f, 2.650174070e-03f, 2.664562515e-03f, 2.678945586e-03f, 2.693323257e-03f,
-2.707695504e-03f, 2.722062303e-03f, 2.736423629e-03f, 2.750779456e-03f, 2.765129762e-03f, 2.779474521e-03f, 2.793813710e-03f, 2.808147302e-03f, 2.822475275e-03f, 2.836797603e-03f,
-2.851114262e-03f, 2.865425227e-03f, 2.879730475e-03f, 2.894029981e-03f, 2.908323720e-03f, 2.922611669e-03f, 2.936893802e-03f, 2.951170095e-03f, 2.965440524e-03f, 2.979705065e-03f,
-2.993963693e-03f, 3.008216384e-03f, 3.022463114e-03f, 3.036703858e-03f, 3.050938593e-03f, 3.065167293e-03f, 3.079389935e-03f, 3.093606494e-03f, 3.107816946e-03f, 3.122021267e-03f,
-3.136219433e-03f, 3.150411419e-03f, 3.164597202e-03f, 3.178776757e-03f, 3.192950059e-03f, 3.207117086e-03f, 3.221277812e-03f, 3.235432214e-03f, 3.249580267e-03f, 3.263721947e-03f,
-3.277857231e-03f, 3.291986094e-03f, 3.306108512e-03f, 3.320224461e-03f, 3.334333917e-03f, 3.348436856e-03f, 3.362533254e-03f, 3.376623087e-03f, 3.390706331e-03f, 3.404782962e-03f,
-3.418852957e-03f, 3.432916290e-03f, 3.446972938e-03f, 3.461022878e-03f, 3.475066085e-03f, 3.489102535e-03f, 3.503132205e-03f, 3.517155070e-03f, 3.531171108e-03f, 3.545180293e-03f,
-3.559182603e-03f, 3.573178012e-03f, 3.587166499e-03f, 3.601148038e-03f, 3.615122606e-03f, 3.629090179e-03f, 3.643050733e-03f, 3.657004245e-03f, 3.670950691e-03f, 3.684890047e-03f,
-3.698822290e-03f, 3.712747396e-03f, 3.726665341e-03f, 3.740576101e-03f, 3.754479653e-03f, 3.768375973e-03f, 3.782265038e-03f, 3.796146824e-03f, 3.810021308e-03f, 3.823888465e-03f,
-3.837748272e-03f, 3.851600707e-03f, 3.865445744e-03f, 3.879283361e-03f, 3.893113534e-03f, 3.906936240e-03f, 3.920751455e-03f, 3.934559156e-03f, 3.948359319e-03f, 3.962151921e-03f,
-3.975936938e-03f, 3.989714347e-03f, 4.003484125e-03f, 4.017246248e-03f, 4.031000693e-03f, 4.044747436e-03f, 4.058486455e-03f, 4.072217726e-03f, 4.085941225e-03f, 4.099656929e-03f,
-4.113364815e-03f, 4.127064860e-03f, 4.140757041e-03f, 4.154441334e-03f, 4.168117715e-03f, 4.181786163e-03f, 4.195446653e-03f, 4.209099163e-03f, 4.222743669e-03f, 4.236380148e-03f,
-4.250008577e-03f, 4.263628934e-03f, 4.277241194e-03f, 4.290845334e-03f, 4.304441333e-03f, 4.318029166e-03f, 4.331608811e-03f, 4.345180244e-03f, 4.358743443e-03f, 4.372298384e-03f,
-4.385845045e-03f, 4.399383403e-03f, 4.412913434e-03f, 4.426435116e-03f, 4.439948426e-03f, 4.453453341e-03f, 4.466949838e-03f, 4.480437895e-03f, 4.493917487e-03f, 4.507388593e-03f,
-4.520851190e-03f, 4.534305255e-03f, 4.547750765e-03f, 4.561187698e-03f, 4.574616030e-03f, 4.588035738e-03f, 4.601446801e-03f, 4.614849196e-03f, 4.628242899e-03f, 4.641627888e-03f,
-4.655004141e-03f, 4.668371635e-03f, 4.681730347e-03f, 4.695080254e-03f, 4.708421334e-03f, 4.721753565e-03f, 4.735076923e-03f, 4.748391387e-03f, 4.761696934e-03f, 4.774993541e-03f,
-4.788281186e-03f, 4.801559845e-03f, 4.814829498e-03f, 4.828090122e-03f, 4.841341693e-03f, 4.854584190e-03f, 4.867817590e-03f, 4.881041870e-03f, 4.894257010e-03f, 4.907462985e-03f,
-4.920659774e-03f, 4.933847355e-03f, 4.947025704e-03f, 4.960194801e-03f, 4.973354623e-03f, 4.986505146e-03f, 4.999646350e-03f, 5.012778213e-03f, 5.025900710e-03f, 5.039013822e-03f,
-5.052117525e-03f, 5.065211797e-03f, 5.078296617e-03f, 5.091371962e-03f, 5.104437810e-03f, 5.117494139e-03f, 5.130540927e-03f, 5.143578151e-03f, 5.156605791e-03f, 5.169623824e-03f,
-5.182632227e-03f, 5.195630980e-03f, 5.208620060e-03f, 5.221599445e-03f, 5.234569113e-03f, 5.247529042e-03f, 5.260479211e-03f, 5.273419598e-03f, 5.286350180e-03f, 5.299270937e-03f,
-5.312181845e-03f, 5.325082884e-03f, 5.337974032e-03f, 5.350855267e-03f, 5.363726567e-03f, 5.376587910e-03f, 5.389439275e-03f, 5.402280640e-03f, 5.415111984e-03f, 5.427933285e-03f,
-5.440744521e-03f, 5.453545670e-03f, 5.466336712e-03f, 5.479117624e-03f, 5.491888386e-03f, 5.504648974e-03f, 5.517399369e-03f, 5.530139548e-03f, 5.542869490e-03f, 5.555589174e-03f,
-5.568298578e-03f, 5.580997681e-03f, 5.593686461e-03f, 5.606364897e-03f, 5.619032968e-03f, 5.631690652e-03f, 5.644337928e-03f, 5.656974775e-03f, 5.669601172e-03f, 5.682217096e-03f,
-5.694822528e-03f, 5.707417445e-03f, 5.720001827e-03f, 5.732575652e-03f, 5.745138900e-03f, 5.757691548e-03f, 5.770233577e-03f, 5.782764964e-03f, 5.795285689e-03f, 5.807795731e-03f,
-5.820295069e-03f, 5.832783681e-03f, 5.845261547e-03f, 5.857728646e-03f, 5.870184956e-03f, 5.882630457e-03f, 5.895065128e-03f, 5.907488948e-03f, 5.919901897e-03f, 5.932303952e-03f,
-5.944695094e-03f, 5.957075301e-03f, 5.969444553e-03f, 5.981802829e-03f, 5.994150108e-03f, 6.006486370e-03f, 6.018811593e-03f, 6.031125758e-03f, 6.043428843e-03f, 6.055720827e-03f,
-6.068001691e-03f, 6.080271413e-03f, 6.092529973e-03f, 6.104777350e-03f, 6.117013524e-03f, 6.129238474e-03f, 6.141452180e-03f, 6.153654621e-03f, 6.165845777e-03f, 6.178025626e-03f,
-6.190194150e-03f, 6.202351327e-03f, 6.214497137e-03f, 6.226631559e-03f, 6.238754574e-03f, 6.250866161e-03f, 6.262966299e-03f, 6.275054969e-03f, 6.287132149e-03f, 6.299197821e-03f,
-6.311251963e-03f, 6.323294555e-03f, 6.335325577e-03f, 6.347345010e-03f, 6.359352832e-03f, 6.371349024e-03f, 6.383333566e-03f, 6.395306437e-03f, 6.407267618e-03f, 6.419217088e-03f,
-6.431154828e-03f, 6.443080817e-03f, 6.454995036e-03f, 6.466897464e-03f, 6.478788082e-03f, 6.490666869e-03f, 6.502533806e-03f, 6.514388873e-03f, 6.526232050e-03f, 6.538063318e-03f,
-6.549882656e-03f, 6.561690044e-03f, 6.573485464e-03f, 6.585268894e-03f, 6.597040317e-03f, 6.608799710e-03f, 6.620547056e-03f, 6.632282335e-03f, 6.644005526e-03f, 6.655716610e-03f,
-6.667415569e-03f, 6.679102381e-03f, 6.690777027e-03f, 6.702439489e-03f, 6.714089746e-03f, 6.725727780e-03f, 6.737353569e-03f, 6.748967096e-03f, 6.760568341e-03f, 6.772157284e-03f,
-6.783733906e-03f, 6.795298188e-03f, 6.806850110e-03f, 6.818389654e-03f, 6.829916799e-03f, 6.841431526e-03f, 6.852933817e-03f, 6.864423652e-03f, 6.875901012e-03f, 6.887365877e-03f,
-6.898818230e-03f, 6.910258049e-03f, 6.921685317e-03f, 6.933100015e-03f, 6.944502123e-03f, 6.955891622e-03f, 6.967268493e-03f, 6.978632718e-03f, 6.989984277e-03f, 7.001323151e-03f,
-7.012649322e-03f, 7.023962770e-03f, 7.035263477e-03f, 7.046551424e-03f, 7.057826592e-03f, 7.069088963e-03f, 7.080338517e-03f, 7.091575235e-03f, 7.102799100e-03f, 7.114010092e-03f,
-7.125208193e-03f, 7.136393383e-03f, 7.147565646e-03f, 7.158724960e-03f, 7.169871309e-03f, 7.181004674e-03f, 7.192125036e-03f, 7.203232376e-03f, 7.214326676e-03f, 7.225407918e-03f,
-7.236476083e-03f, 7.247531153e-03f, 7.258573109e-03f, 7.269601933e-03f, 7.280617607e-03f, 7.291620112e-03f, 7.302609429e-03f, 7.313585542e-03f, 7.324548431e-03f, 7.335498078e-03f,
-7.346434466e-03f, 7.357357575e-03f, 7.368267387e-03f, 7.379163886e-03f, 7.390047051e-03f, 7.400916866e-03f, 7.411773312e-03f, 7.422616372e-03f, 7.433446026e-03f, 7.444262258e-03f,
-7.455065049e-03f, 7.465854382e-03f, 7.476630237e-03f, 7.487392598e-03f, 7.498141447e-03f, 7.508876766e-03f, 7.519598536e-03f, 7.530306741e-03f, 7.541001362e-03f, 7.551682382e-03f,
-7.562349782e-03f, 7.573003546e-03f, 7.583643655e-03f, 7.594270092e-03f, 7.604882839e-03f, 7.615481879e-03f, 7.626067194e-03f, 7.636638767e-03f, 7.647196579e-03f, 7.657740614e-03f,
-7.668270854e-03f, 7.678787282e-03f, 7.689289879e-03f, 7.699778629e-03f, 7.710253515e-03f, 7.720714519e-03f, 7.731161623e-03f, 7.741594810e-03f, 7.752014064e-03f, 7.762419366e-03f,
-7.772810700e-03f, 7.783188049e-03f, 7.793551394e-03f, 7.803900720e-03f, 7.814236008e-03f, 7.824557242e-03f, 7.834864405e-03f, 7.845157480e-03f, 7.855436449e-03f, 7.865701296e-03f,
-7.875952004e-03f, 7.886188555e-03f, 7.896410933e-03f, 7.906619121e-03f, 7.916813102e-03f, 7.926992859e-03f, 7.937158375e-03f, 7.947309634e-03f, 7.957446618e-03f, 7.967569312e-03f,
-7.977677698e-03f, 7.987771759e-03f, 7.997851479e-03f, 8.007916842e-03f, 8.017967830e-03f, 8.028004427e-03f, 8.038026617e-03f, 8.048034383e-03f, 8.058027708e-03f, 8.068006575e-03f,
-8.077970970e-03f, 8.087920874e-03f, 8.097856272e-03f, 8.107777147e-03f, 8.117683483e-03f, 8.127575263e-03f, 8.137452472e-03f, 8.147315092e-03f, 8.157163109e-03f, 8.166996504e-03f,
-8.176815263e-03f, 8.186619369e-03f, 8.196408805e-03f, 8.206183557e-03f, 8.215943607e-03f, 8.225688939e-03f, 8.235419538e-03f, 8.245135388e-03f, 8.254836472e-03f, 8.264522775e-03f,
-8.274194280e-03f, 8.283850972e-03f, 8.293492834e-03f, 8.303119852e-03f, 8.312732008e-03f, 8.322329288e-03f, 8.331911675e-03f, 8.341479154e-03f, 8.351031709e-03f, 8.360569325e-03f,
-8.370091985e-03f, 8.379599673e-03f, 8.389092375e-03f, 8.398570075e-03f, 8.408032757e-03f, 8.417480406e-03f, 8.426913006e-03f, 8.436330541e-03f, 8.445732996e-03f, 8.455120356e-03f,
-8.464492606e-03f, 8.473849729e-03f, 8.483191711e-03f, 8.492518536e-03f, 8.501830189e-03f, 8.511126654e-03f, 8.520407917e-03f, 8.529673962e-03f, 8.538924774e-03f, 8.548160338e-03f,
-8.557380639e-03f, 8.566585661e-03f, 8.575775389e-03f, 8.584949809e-03f, 8.594108905e-03f, 8.603252663e-03f, 8.612381067e-03f, 8.621494102e-03f, 8.630591754e-03f, 8.639674008e-03f,
-8.648740848e-03f, 8.657792260e-03f, 8.666828230e-03f, 8.675848741e-03f, 8.684853780e-03f, 8.693843332e-03f, 8.702817383e-03f, 8.711775916e-03f, 8.720718918e-03f, 8.729646375e-03f,
-8.738558271e-03f, 8.747454592e-03f, 8.756335324e-03f, 8.765200451e-03f, 8.774049960e-03f, 8.782883836e-03f, 8.791702065e-03f, 8.800504632e-03f, 8.809291523e-03f, 8.818062723e-03f,
-8.826818218e-03f, 8.835557995e-03f, 8.844282038e-03f, 8.852990333e-03f, 8.861682867e-03f, 8.870359624e-03f, 8.879020592e-03f, 8.887665755e-03f, 8.896295100e-03f, 8.904908612e-03f,
-8.913506278e-03f, 8.922088084e-03f, 8.930654015e-03f, 8.939204058e-03f, 8.947738199e-03f, 8.956256423e-03f, 8.964758717e-03f, 8.973245068e-03f, 8.981715460e-03f, 8.990169882e-03f,
-8.998608318e-03f, 9.007030755e-03f, 9.015437179e-03f, 9.023827577e-03f, 9.032201935e-03f, 9.040560240e-03f, 9.048902477e-03f, 9.057228634e-03f, 9.065538696e-03f, 9.073832651e-03f,
-9.082110485e-03f, 9.090372184e-03f, 9.098617734e-03f, 9.106847124e-03f, 9.115060338e-03f, 9.123257365e-03f, 9.131438190e-03f, 9.139602801e-03f, 9.147751183e-03f, 9.155883324e-03f,
-9.163999212e-03f, 9.172098831e-03f, 9.180182170e-03f, 9.188249216e-03f, 9.196299954e-03f, 9.204334373e-03f, 9.212352459e-03f, 9.220354199e-03f, 9.228339581e-03f, 9.236308591e-03f,
-9.244261216e-03f, 9.252197444e-03f, 9.260117262e-03f, 9.268020656e-03f, 9.275907615e-03f, 9.283778125e-03f, 9.291632174e-03f, 9.299469749e-03f, 9.307290838e-03f, 9.315095427e-03f,
-9.322883504e-03f, 9.330655057e-03f, 9.338410073e-03f, 9.346148539e-03f, 9.353870443e-03f, 9.361575773e-03f, 9.369264516e-03f, 9.376936660e-03f, 9.384592192e-03f, 9.392231100e-03f,
-9.399853371e-03f, 9.407458995e-03f, 9.415047957e-03f, 9.422620246e-03f, 9.430175850e-03f, 9.437714757e-03f, 9.445236954e-03f, 9.452742430e-03f, 9.460231172e-03f, 9.467703168e-03f,
-9.475158406e-03f, 9.482596875e-03f, 9.490018561e-03f, 9.497423455e-03f, 9.504811542e-03f, 9.512182813e-03f, 9.519537254e-03f, 9.526874854e-03f, 9.534195601e-03f, 9.541499483e-03f,
-9.548786490e-03f, 9.556056608e-03f, 9.563309827e-03f, 9.570546134e-03f, 9.577765519e-03f, 9.584967969e-03f, 9.592153473e-03f, 9.599322020e-03f, 9.606473598e-03f, 9.613608195e-03f,
-9.620725801e-03f, 9.627826403e-03f, 9.634909991e-03f, 9.641976553e-03f, 9.649026078e-03f, 9.656058554e-03f, 9.663073970e-03f, 9.670072316e-03f, 9.677053579e-03f, 9.684017749e-03f,
-9.690964815e-03f, 9.697894766e-03f, 9.704807589e-03f, 9.711703276e-03f, 9.718581814e-03f, 9.725443192e-03f, 9.732287400e-03f, 9.739114426e-03f, 9.745924260e-03f, 9.752716891e-03f,
-9.759492309e-03f, 9.766250501e-03f, 9.772991458e-03f, 9.779715169e-03f, 9.786421623e-03f, 9.793110810e-03f, 9.799782718e-03f, 9.806437337e-03f, 9.813074658e-03f, 9.819694668e-03f,
-9.826297358e-03f, 9.832882717e-03f, 9.839450734e-03f, 9.846001400e-03f, 9.852534704e-03f, 9.859050635e-03f, 9.865549184e-03f, 9.872030339e-03f, 9.878494091e-03f, 9.884940429e-03f,
-9.891369344e-03f, 9.897780824e-03f, 9.904174860e-03f, 9.910551442e-03f, 9.916910559e-03f, 9.923252202e-03f, 9.929576361e-03f, 9.935883025e-03f, 9.942172185e-03f, 9.948443830e-03f,
-9.954697951e-03f, 9.960934538e-03f, 9.967153581e-03f, 9.973355070e-03f, 9.979538996e-03f, 9.985705348e-03f, 9.991854118e-03f, 9.997985294e-03f, 1.000409887e-02f, 1.001019483e-02f,
-1.001627317e-02f, 1.002233388e-02f, 1.002837695e-02f, 1.003440237e-02f, 1.004041013e-02f, 1.004640022e-02f, 1.005237263e-02f, 1.005832735e-02f, 1.006426438e-02f, 1.007018370e-02f,
-1.007608531e-02f, 1.008196919e-02f, 1.008783533e-02f, 1.009368373e-02f, 1.009951438e-02f, 1.010532727e-02f, 1.011112239e-02f, 1.011689972e-02f, 1.012265927e-02f, 1.012840102e-02f,
-1.013412496e-02f, 1.013983109e-02f, 1.014551939e-02f, 1.015118986e-02f, 1.015684249e-02f, 1.016247726e-02f, 1.016809418e-02f, 1.017369323e-02f, 1.017927439e-02f, 1.018483768e-02f,
-1.019038306e-02f, 1.019591055e-02f, 1.020142012e-02f, 1.020691177e-02f, 1.021238549e-02f, 1.021784128e-02f, 1.022327912e-02f, 1.022869900e-02f, 1.023410092e-02f, 1.023948487e-02f,
-1.024485084e-02f, 1.025019882e-02f, 1.025552881e-02f, 1.026084079e-02f, 1.026613476e-02f, 1.027141070e-02f, 1.027666862e-02f, 1.028190850e-02f, 1.028713034e-02f, 1.029233412e-02f,
-1.029751984e-02f, 1.030268749e-02f, 1.030783707e-02f, 1.031296856e-02f, 1.031808195e-02f, 1.032317725e-02f, 1.032825443e-02f, 1.033331350e-02f, 1.033835444e-02f, 1.034337726e-02f,
-1.034838193e-02f, 1.035336845e-02f, 1.035833682e-02f, 1.036328703e-02f, 1.036821906e-02f, 1.037313292e-02f, 1.037802859e-02f, 1.038290607e-02f, 1.038776535e-02f, 1.039260642e-02f,
-1.039742928e-02f, 1.040223391e-02f, 1.040702031e-02f, 1.041178848e-02f, 1.041653840e-02f, 1.042127007e-02f, 1.042598348e-02f, 1.043067862e-02f, 1.043535549e-02f, 1.044001408e-02f,
-1.044465438e-02f, 1.044927639e-02f, 1.045388010e-02f, 1.045846550e-02f, 1.046303258e-02f, 1.046758134e-02f, 1.047211177e-02f, 1.047662387e-02f, 1.048111762e-02f, 1.048559302e-02f,
-1.049005007e-02f, 1.049448875e-02f, 1.049890906e-02f, 1.050331100e-02f, 1.050769455e-02f, 1.051205971e-02f, 1.051640648e-02f, 1.052073484e-02f, 1.052504480e-02f, 1.052933634e-02f,
-1.053360945e-02f, 1.053786414e-02f, 1.054210040e-02f, 1.054631821e-02f, 1.055051757e-02f, 1.055469848e-02f, 1.055886093e-02f, 1.056300491e-02f, 1.056713043e-02f, 1.057123746e-02f,
-1.057532601e-02f, 1.057939606e-02f, 1.058344762e-02f, 1.058748068e-02f, 1.059149523e-02f, 1.059549126e-02f, 1.059946877e-02f, 1.060342776e-02f, 1.060736821e-02f, 1.061129012e-02f,
-1.061519349e-02f, 1.061907832e-02f, 1.062294458e-02f, 1.062679228e-02f, 1.063062142e-02f, 1.063443198e-02f, 1.063822397e-02f, 1.064199737e-02f, 1.064575219e-02f, 1.064948840e-02f,
-1.065320602e-02f, 1.065690503e-02f, 1.066058544e-02f, 1.066424722e-02f, 1.066789038e-02f, 1.067151492e-02f, 1.067512082e-02f, 1.067870809e-02f, 1.068227671e-02f, 1.068582669e-02f,
-1.068935801e-02f, 1.069287067e-02f, 1.069636467e-02f, 1.069984001e-02f, 1.070329667e-02f, 1.070673465e-02f, 1.071015394e-02f, 1.071355455e-02f, 1.071693647e-02f, 1.072029969e-02f,
-1.072364420e-02f, 1.072697001e-02f, 1.073027711e-02f, 1.073356549e-02f, 1.073683515e-02f, 1.074008608e-02f, 1.074331828e-02f, 1.074653174e-02f, 1.074972647e-02f, 1.075290245e-02f,
-1.075605968e-02f, 1.075919816e-02f, 1.076231788e-02f, 1.076541883e-02f, 1.076850102e-02f, 1.077156444e-02f, 1.077460909e-02f, 1.077763495e-02f, 1.078064203e-02f, 1.078363033e-02f,
-1.078659983e-02f, 1.078955053e-02f, 1.079248244e-02f, 1.079539554e-02f, 1.079828983e-02f, 1.080116531e-02f, 1.080402197e-02f, 1.080685981e-02f, 1.080967883e-02f, 1.081247902e-02f,
-1.081526038e-02f, 1.081802290e-02f, 1.082076658e-02f, 1.082349142e-02f, 1.082619741e-02f, 1.082888455e-02f, 1.083155284e-02f, 1.083420227e-02f, 1.083683284e-02f, 1.083944454e-02f,
-1.084203738e-02f, 1.084461134e-02f, 1.084716642e-02f, 1.084970263e-02f, 1.085221996e-02f, 1.085471840e-02f, 1.085719795e-02f, 1.085965861e-02f, 1.086210037e-02f, 1.086452324e-02f,
-1.086692720e-02f, 1.086931226e-02f, 1.087167841e-02f, 1.087402565e-02f, 1.087635398e-02f, 1.087866338e-02f, 1.088095387e-02f, 1.088322544e-02f, 1.088547807e-02f, 1.088771178e-02f,
-1.088992656e-02f, 1.089212241e-02f, 1.089429931e-02f, 1.089645728e-02f, 1.089859630e-02f, 1.090071638e-02f, 1.090281751e-02f, 1.090489968e-02f, 1.090696291e-02f, 1.090900718e-02f,
-1.091103249e-02f, 1.091303884e-02f, 1.091502622e-02f, 1.091699464e-02f, 1.091894410e-02f, 1.092087458e-02f, 1.092278609e-02f, 1.092467862e-02f, 1.092655217e-02f, 1.092840675e-02f,
-1.093024234e-02f, 1.093205895e-02f, 1.093385658e-02f, 1.093563521e-02f, 1.093739486e-02f, 1.093913551e-02f, 1.094085717e-02f, 1.094255983e-02f, 1.094424350e-02f, 1.094590816e-02f,
-1.094755382e-02f, 1.094918048e-02f, 1.095078813e-02f, 1.095237677e-02f, 1.095394641e-02f, 1.095549703e-02f, 1.095702865e-02f, 1.095854124e-02f, 1.096003483e-02f, 1.096150939e-02f,
-1.096296494e-02f, 1.096440146e-02f, 1.096581896e-02f, 1.096721744e-02f, 1.096859690e-02f, 1.096995733e-02f, 1.097129873e-02f, 1.097262111e-02f, 1.097392445e-02f, 1.097520876e-02f,
-1.097647404e-02f, 1.097772029e-02f, 1.097894750e-02f, 1.098015567e-02f, 1.098134481e-02f, 1.098251491e-02f, 1.098366598e-02f, 1.098479800e-02f, 1.098591098e-02f, 1.098700492e-02f,
-1.098807981e-02f, 1.098913567e-02f, 1.099017247e-02f, 1.099119024e-02f, 1.099218896e-02f, 1.099316863e-02f, 1.099412925e-02f, 1.099507083e-02f, 1.099599335e-02f, 1.099689683e-02f,
-1.099778126e-02f, 1.099864664e-02f, 1.099949297e-02f, 1.100032025e-02f, 1.100112847e-02f, 1.100191764e-02f, 1.100268777e-02f, 1.100343883e-02f, 1.100417085e-02f, 1.100488381e-02f,
-1.100557772e-02f, 1.100625258e-02f, 1.100690838e-02f, 1.100754513e-02f, 1.100816282e-02f, 1.100876147e-02f, 1.100934105e-02f, 1.100990159e-02f, 1.101044307e-02f, 1.101096549e-02f,
-1.101146886e-02f, 1.101195318e-02f, 1.101241845e-02f, 1.101286466e-02f, 1.101329182e-02f, 1.101369992e-02f, 1.101408898e-02f, 1.101445898e-02f, 1.101480993e-02f, 1.101514183e-02f,
-1.101545468e-02f, 1.101574848e-02f, 1.101602322e-02f, 1.101627892e-02f, 1.101651557e-02f, 1.101673318e-02f, 1.101693173e-02f, 1.101711124e-02f, 1.101727170e-02f, 1.101741312e-02f,
-1.101753549e-02f, 1.101763882e-02f, 1.101772311e-02f, 1.101778835e-02f, 1.101783455e-02f, 1.101786172e-02f, 1.101786984e-02f, 1.101785892e-02f, 1.101782897e-02f, 1.101777998e-02f,
-1.101771196e-02f, 1.101762490e-02f, 1.101751881e-02f, 1.101739369e-02f, 1.101724954e-02f, 1.101708636e-02f, 1.101690415e-02f, 1.101670291e-02f, 1.101648265e-02f, 1.101624337e-02f,
-1.101598506e-02f, 1.101570773e-02f, 1.101541139e-02f, 1.101509602e-02f, 1.101476164e-02f, 1.101440825e-02f, 1.101403584e-02f, 1.101364442e-02f, 1.101323399e-02f, 1.101280455e-02f,
-1.101235611e-02f, 1.101188866e-02f, 1.101140221e-02f, 1.101089676e-02f, 1.101037231e-02f, 1.100982886e-02f, 1.100926642e-02f, 1.100868498e-02f, 1.100808456e-02f, 1.100746514e-02f,
-1.100682674e-02f, 1.100616935e-02f, 1.100549298e-02f, 1.100479763e-02f, 1.100408330e-02f, 1.100335000e-02f, 1.100259772e-02f, 1.100182647e-02f, 1.100103625e-02f, 1.100022706e-02f,
-1.099939891e-02f, 1.099855180e-02f, 1.099768573e-02f, 1.099680070e-02f, 1.099589672e-02f, 1.099497379e-02f, 1.099403190e-02f, 1.099307107e-02f, 1.099209130e-02f, 1.099109258e-02f,
-1.099007493e-02f, 1.098903834e-02f, 1.098798282e-02f, 1.098690837e-02f, 1.098581499e-02f, 1.098470268e-02f, 1.098357146e-02f, 1.098242131e-02f, 1.098125226e-02f, 1.098006428e-02f,
-1.097885740e-02f, 1.097763162e-02f, 1.097638693e-02f, 1.097512334e-02f, 1.097384085e-02f, 1.097253947e-02f, 1.097121920e-02f, 1.096988004e-02f, 1.096852200e-02f, 1.096714508e-02f,
-1.096574928e-02f, 1.096433460e-02f, 1.096290106e-02f, 1.096144865e-02f, 1.095997738e-02f, 1.095848725e-02f, 1.095697826e-02f, 1.095545042e-02f, 1.095390373e-02f, 1.095233819e-02f,
-1.095075382e-02f, 1.094915061e-02f, 1.094752856e-02f, 1.094588768e-02f, 1.094422798e-02f, 1.094254945e-02f, 1.094085211e-02f, 1.093913595e-02f, 1.093740098e-02f, 1.093564720e-02f,
-1.093387462e-02f, 1.093208325e-02f, 1.093027307e-02f, 1.092844411e-02f, 1.092659636e-02f, 1.092472983e-02f, 1.092284453e-02f, 1.092094045e-02f, 1.091901760e-02f, 1.091707598e-02f,
-1.091511560e-02f, 1.091313647e-02f, 1.091113859e-02f, 1.090912196e-02f, 1.090708659e-02f, 1.090503247e-02f, 1.090295963e-02f, 1.090086805e-02f, 1.089875776e-02f, 1.089662874e-02f,
-1.089448100e-02f, 1.089231456e-02f, 1.089012941e-02f, 1.088792556e-02f, 1.088570301e-02f, 1.088346177e-02f, 1.088120184e-02f, 1.087892324e-02f, 1.087662595e-02f, 1.087431000e-02f,
-1.087197538e-02f, 1.086962209e-02f, 1.086725015e-02f, 1.086485956e-02f, 1.086245032e-02f, 1.086002244e-02f, 1.085757593e-02f, 1.085511078e-02f, 1.085262701e-02f, 1.085012461e-02f,
-1.084760361e-02f, 1.084506399e-02f, 1.084250577e-02f, 1.083992895e-02f, 1.083733353e-02f, 1.083471953e-02f, 1.083208695e-02f, 1.082943578e-02f, 1.082676605e-02f, 1.082407775e-02f,
-1.082137089e-02f, 1.081864548e-02f, 1.081590152e-02f, 1.081313901e-02f, 1.081035797e-02f, 1.080755840e-02f, 1.080474030e-02f, 1.080190368e-02f, 1.079904854e-02f, 1.079617490e-02f,
-1.079328276e-02f, 1.079037212e-02f, 1.078744299e-02f, 1.078449537e-02f, 1.078152928e-02f, 1.077854471e-02f, 1.077554168e-02f, 1.077252020e-02f, 1.076948025e-02f, 1.076642186e-02f,
-1.076334503e-02f, 1.076024977e-02f, 1.075713607e-02f, 1.075400396e-02f, 1.075085342e-02f, 1.074768448e-02f, 1.074449714e-02f, 1.074129140e-02f, 1.073806727e-02f, 1.073482476e-02f,
-1.073156387e-02f, 1.072828461e-02f, 1.072498699e-02f, 1.072167101e-02f, 1.071833668e-02f, 1.071498401e-02f, 1.071161300e-02f, 1.070822367e-02f, 1.070481600e-02f, 1.070139003e-02f,
-1.069794574e-02f, 1.069448315e-02f, 1.069100227e-02f, 1.068750310e-02f, 1.068398565e-02f, 1.068044992e-02f, 1.067689593e-02f, 1.067332368e-02f, 1.066973317e-02f, 1.066612442e-02f,
-1.066249743e-02f, 1.065885221e-02f, 1.065518876e-02f, 1.065150710e-02f, 1.064780723e-02f, 1.064408916e-02f, 1.064035289e-02f, 1.063659843e-02f, 1.063282580e-02f, 1.062903499e-02f,
-1.062522602e-02f, 1.062139889e-02f, 1.061755362e-02f, 1.061369020e-02f, 1.060980864e-02f, 1.060590896e-02f, 1.060199116e-02f, 1.059805525e-02f, 1.059410123e-02f, 1.059012912e-02f,
-1.058613893e-02f, 1.058213065e-02f, 1.057810430e-02f, 1.057405988e-02f, 1.056999741e-02f, 1.056591690e-02f, 1.056181834e-02f, 1.055770175e-02f, 1.055356713e-02f, 1.054941450e-02f,
-1.054524386e-02f, 1.054105522e-02f, 1.053684859e-02f, 1.053262398e-02f, 1.052838139e-02f, 1.052412083e-02f, 1.051984232e-02f, 1.051554585e-02f, 1.051123144e-02f, 1.050689911e-02f,
-1.050254884e-02f, 1.049818066e-02f, 1.049379457e-02f, 1.048939058e-02f, 1.048496870e-02f, 1.048052894e-02f, 1.047607131e-02f, 1.047159580e-02f, 1.046710245e-02f, 1.046259124e-02f,
-1.045806220e-02f, 1.045351533e-02f, 1.044895063e-02f, 1.044436812e-02f, 1.043976781e-02f, 1.043514971e-02f, 1.043051382e-02f, 1.042586015e-02f, 1.042118871e-02f, 1.041649952e-02f,
-1.041179257e-02f, 1.040706789e-02f, 1.040232547e-02f, 1.039756533e-02f, 1.039278748e-02f, 1.038799192e-02f, 1.038317867e-02f, 1.037834773e-02f, 1.037349911e-02f, 1.036863283e-02f,
-1.036374889e-02f, 1.035884731e-02f, 1.035392808e-02f, 1.034899122e-02f, 1.034403675e-02f, 1.033906466e-02f, 1.033407497e-02f, 1.032906769e-02f, 1.032404283e-02f, 1.031900040e-02f,
-1.031394040e-02f, 1.030886286e-02f, 1.030376776e-02f, 1.029865514e-02f, 1.029352499e-02f, 1.028837732e-02f, 1.028321216e-02f, 1.027802949e-02f, 1.027282935e-02f, 1.026761173e-02f,
-1.026237664e-02f, 1.025712410e-02f, 1.025185412e-02f, 1.024656670e-02f, 1.024126185e-02f, 1.023593960e-02f, 1.023059993e-02f, 1.022524288e-02f, 1.021986844e-02f, 1.021447662e-02f,
-1.020906744e-02f, 1.020364091e-02f, 1.019819704e-02f, 1.019273583e-02f, 1.018725730e-02f, 1.018176146e-02f, 1.017624832e-02f, 1.017071788e-02f, 1.016517017e-02f, 1.015960519e-02f,
-1.015402294e-02f, 1.014842345e-02f, 1.014280672e-02f, 1.013717276e-02f, 1.013152158e-02f, 1.012585320e-02f, 1.012016762e-02f, 1.011446486e-02f, 1.010874492e-02f, 1.010300782e-02f,
-1.009725356e-02f, 1.009148217e-02f, 1.008569364e-02f, 1.007988799e-02f, 1.007406524e-02f, 1.006822538e-02f, 1.006236844e-02f, 1.005649443e-02f, 1.005060334e-02f, 1.004469521e-02f,
-1.003877003e-02f, 1.003282782e-02f, 1.002686859e-02f, 1.002089235e-02f, 1.001489911e-02f, 1.000888888e-02f, 1.000286168e-02f, 9.996817515e-03f, 9.990756397e-03f, 9.984678337e-03f,
-9.978583347e-03f, 9.972471438e-03f, 9.966342622e-03f, 9.960196911e-03f, 9.954034315e-03f, 9.947854846e-03f, 9.941658516e-03f, 9.935445336e-03f, 9.929215319e-03f, 9.922968475e-03f,
-9.916704817e-03f, 9.910424356e-03f, 9.904127103e-03f, 9.897813072e-03f, 9.891482272e-03f, 9.885134717e-03f, 9.878770418e-03f, 9.872389388e-03f, 9.865991637e-03f, 9.859577177e-03f,
-9.853146022e-03f, 9.846698182e-03f, 9.840233671e-03f, 9.833752499e-03f, 9.827254679e-03f, 9.820740223e-03f, 9.814209143e-03f, 9.807661452e-03f, 9.801097161e-03f, 9.794516283e-03f,
-9.787918831e-03f, 9.781304815e-03f, 9.774674249e-03f, 9.768027145e-03f, 9.761363515e-03f, 9.754683372e-03f, 9.747986728e-03f, 9.741273596e-03f, 9.734543987e-03f, 9.727797915e-03f,
-9.721035393e-03f, 9.714256431e-03f, 9.707461044e-03f, 9.700649244e-03f, 9.693821043e-03f, 9.686976454e-03f, 9.680115490e-03f, 9.673238164e-03f, 9.666344488e-03f, 9.659434475e-03f,
-9.652508137e-03f, 9.645565489e-03f, 9.638606542e-03f, 9.631631309e-03f, 9.624639804e-03f, 9.617632039e-03f, 9.610608027e-03f, 9.603567781e-03f, 9.596511315e-03f, 9.589438641e-03f,
-9.582349772e-03f, 9.575244722e-03f, 9.568123503e-03f, 9.560986129e-03f, 9.553832614e-03f, 9.546662969e-03f, 9.539477209e-03f, 9.532275346e-03f, 9.525057395e-03f, 9.517823367e-03f,
-9.510573278e-03f, 9.503307139e-03f, 9.496024965e-03f, 9.488726769e-03f, 9.481412564e-03f, 9.474082364e-03f, 9.466736182e-03f, 9.459374032e-03f, 9.451995928e-03f, 9.444601882e-03f,
-9.437191909e-03f, 9.429766023e-03f, 9.422324236e-03f, 9.414866563e-03f, 9.407393017e-03f, 9.399903613e-03f, 9.392398363e-03f, 9.384877282e-03f, 9.377340384e-03f, 9.369787682e-03f,
-9.362219190e-03f, 9.354634923e-03f, 9.347034893e-03f, 9.339419116e-03f, 9.331787605e-03f, 9.324140374e-03f, 9.316477437e-03f, 9.308798809e-03f, 9.301104502e-03f, 9.293394532e-03f,
-9.285668913e-03f, 9.277927658e-03f, 9.270170783e-03f, 9.262398301e-03f, 9.254610226e-03f, 9.246806573e-03f, 9.238987355e-03f, 9.231152589e-03f, 9.223302287e-03f, 9.215436464e-03f,
-9.207555134e-03f, 9.199658313e-03f, 9.191746014e-03f, 9.183818252e-03f, 9.175875041e-03f, 9.167916397e-03f, 9.159942333e-03f, 9.151952864e-03f, 9.143948004e-03f, 9.135927770e-03f,
-9.127892174e-03f, 9.119841232e-03f, 9.111774958e-03f, 9.103693368e-03f, 9.095596476e-03f, 9.087484296e-03f, 9.079356844e-03f, 9.071214135e-03f, 9.063056183e-03f, 9.054883003e-03f,
-9.046694611e-03f, 9.038491020e-03f, 9.030272247e-03f, 9.022038306e-03f, 9.013789212e-03f, 9.005524980e-03f, 8.997245625e-03f, 8.988951163e-03f, 8.980641608e-03f, 8.972316976e-03f,
-8.963977282e-03f, 8.955622541e-03f, 8.947252768e-03f, 8.938867978e-03f, 8.930468188e-03f, 8.922053412e-03f, 8.913623665e-03f, 8.905178962e-03f, 8.896719320e-03f, 8.888244754e-03f,
-8.879755279e-03f, 8.871250910e-03f, 8.862731663e-03f, 8.854197553e-03f, 8.845648597e-03f, 8.837084809e-03f, 8.828506205e-03f, 8.819912801e-03f, 8.811304612e-03f, 8.802681655e-03f,
-8.794043944e-03f, 8.785391495e-03f, 8.776724325e-03f, 8.768042448e-03f, 8.759345881e-03f, 8.750634640e-03f, 8.741908740e-03f, 8.733168197e-03f, 8.724413027e-03f, 8.715643246e-03f,
-8.706858869e-03f, 8.698059914e-03f, 8.689246395e-03f, 8.680418329e-03f, 8.671575732e-03f, 8.662718620e-03f, 8.653847009e-03f, 8.644960914e-03f, 8.636060353e-03f, 8.627145341e-03f,
-8.618215894e-03f, 8.609272029e-03f, 8.600313762e-03f, 8.591341109e-03f, 8.582354086e-03f, 8.573352710e-03f, 8.564336996e-03f, 8.555306962e-03f, 8.546262624e-03f, 8.537203997e-03f,
-8.528131099e-03f, 8.519043946e-03f, 8.509942554e-03f, 8.500826940e-03f, 8.491697120e-03f, 8.482553111e-03f, 8.473394929e-03f, 8.464222591e-03f, 8.455036114e-03f, 8.445835514e-03f,
-8.436620807e-03f, 8.427392011e-03f, 8.418149142e-03f, 8.408892217e-03f, 8.399621253e-03f, 8.390336266e-03f, 8.381037272e-03f, 8.371724290e-03f, 8.362397336e-03f, 8.353056426e-03f,
-8.343701578e-03f, 8.334332808e-03f, 8.324950133e-03f, 8.315553571e-03f, 8.306143137e-03f, 8.296718850e-03f, 8.287280726e-03f, 8.277828783e-03f, 8.268363037e-03f, 8.258883505e-03f,
-8.249390204e-03f, 8.239883153e-03f, 8.230362367e-03f, 8.220827864e-03f, 8.211279661e-03f, 8.201717775e-03f, 8.192142225e-03f, 8.182553026e-03f, 8.172950196e-03f, 8.163333753e-03f,
-8.153703713e-03f, 8.144060095e-03f, 8.134402915e-03f, 8.124732191e-03f, 8.115047941e-03f, 8.105350182e-03f, 8.095638930e-03f, 8.085914205e-03f, 8.076176023e-03f, 8.066424401e-03f,
-8.056659358e-03f, 8.046880911e-03f, 8.037089078e-03f, 8.027283876e-03f, 8.017465322e-03f, 8.007633435e-03f, 7.997788233e-03f, 7.987929732e-03f, 7.978057951e-03f, 7.968172907e-03f,
-7.958274619e-03f, 7.948363103e-03f, 7.938438379e-03f, 7.928500463e-03f, 7.918549373e-03f, 7.908585128e-03f, 7.898607745e-03f, 7.888617243e-03f, 7.878613639e-03f, 7.868596951e-03f,
-7.858567197e-03f, 7.848524395e-03f, 7.838468563e-03f, 7.828399720e-03f, 7.818317884e-03f, 7.808223071e-03f, 7.798115302e-03f, 7.787994593e-03f, 7.777860963e-03f, 7.767714430e-03f,
-7.757555012e-03f, 7.747382728e-03f, 7.737197596e-03f, 7.726999634e-03f, 7.716788860e-03f, 7.706565293e-03f, 7.696328952e-03f, 7.686079853e-03f, 7.675818016e-03f, 7.665543460e-03f,
-7.655256202e-03f, 7.644956261e-03f, 7.634643656e-03f, 7.624318405e-03f, 7.613980526e-03f, 7.603630038e-03f, 7.593266960e-03f, 7.582891310e-03f, 7.572503107e-03f, 7.562102369e-03f,
-7.551689115e-03f, 7.541263364e-03f, 7.530825134e-03f, 7.520374444e-03f, 7.509911313e-03f, 7.499435759e-03f, 7.488947801e-03f, 7.478447459e-03f, 7.467934750e-03f, 7.457409694e-03f,
-7.446872309e-03f, 7.436322615e-03f, 7.425760630e-03f, 7.415186372e-03f, 7.404599862e-03f, 7.394001118e-03f, 7.383390159e-03f, 7.372767003e-03f, 7.362131670e-03f, 7.351484179e-03f,
-7.340824550e-03f, 7.330152800e-03f, 7.319468949e-03f, 7.308773016e-03f, 7.298065020e-03f, 7.287344981e-03f, 7.276612917e-03f, 7.265868849e-03f, 7.255112794e-03f, 7.244344772e-03f,
-7.233564802e-03f, 7.222772905e-03f, 7.211969098e-03f, 7.201153401e-03f, 7.190325834e-03f, 7.179486415e-03f, 7.168635165e-03f, 7.157772102e-03f, 7.146897247e-03f, 7.136010617e-03f,
-7.125112234e-03f, 7.114202116e-03f, 7.103280282e-03f, 7.092346753e-03f, 7.081401547e-03f, 7.070444685e-03f, 7.059476185e-03f, 7.048496068e-03f, 7.037504353e-03f, 7.026501059e-03f,
-7.015486206e-03f, 7.004459814e-03f, 6.993421903e-03f, 6.982372492e-03f, 6.971311600e-03f, 6.960239249e-03f, 6.949155456e-03f, 6.938060242e-03f, 6.926953628e-03f, 6.915835631e-03f,
-6.904706274e-03f, 6.893565574e-03f, 6.882413553e-03f, 6.871250229e-03f, 6.860075624e-03f, 6.848889756e-03f, 6.837692645e-03f, 6.826484312e-03f, 6.815264777e-03f, 6.804034060e-03f,
-6.792792179e-03f, 6.781539157e-03f, 6.770275012e-03f, 6.758999764e-03f, 6.747713434e-03f, 6.736416042e-03f, 6.725107608e-03f, 6.713788152e-03f, 6.702457694e-03f, 6.691116254e-03f,
-6.679763852e-03f, 6.668400509e-03f, 6.657026245e-03f, 6.645641080e-03f, 6.634245035e-03f, 6.622838129e-03f, 6.611420382e-03f, 6.599991816e-03f, 6.588552451e-03f, 6.577102306e-03f,
-6.565641402e-03f, 6.554169760e-03f, 6.542687400e-03f, 6.531194342e-03f, 6.519690607e-03f, 6.508176215e-03f, 6.496651186e-03f, 6.485115542e-03f, 6.473569302e-03f, 6.462012488e-03f,
-6.450445119e-03f, 6.438867216e-03f, 6.427278800e-03f, 6.415679891e-03f, 6.404070510e-03f, 6.392450678e-03f, 6.380820414e-03f, 6.369179741e-03f, 6.357528677e-03f, 6.345867245e-03f,
-6.334195465e-03f, 6.322513357e-03f, 6.310820943e-03f, 6.299118242e-03f, 6.287405276e-03f, 6.275682066e-03f, 6.263948632e-03f, 6.252204995e-03f, 6.240451176e-03f, 6.228687196e-03f,
-6.216913076e-03f, 6.205128836e-03f, 6.193334497e-03f, 6.181530081e-03f, 6.169715608e-03f, 6.157891099e-03f, 6.146056576e-03f, 6.134212058e-03f, 6.122357568e-03f, 6.110493126e-03f,
-6.098618753e-03f, 6.086734470e-03f, 6.074840298e-03f, 6.062936259e-03f, 6.051022373e-03f, 6.039098661e-03f, 6.027165146e-03f, 6.015221847e-03f, 6.003268785e-03f, 5.991305983e-03f,
-5.979333462e-03f, 5.967351241e-03f, 5.955359344e-03f, 5.943357790e-03f, 5.931346601e-03f, 5.919325799e-03f, 5.907295404e-03f, 5.895255438e-03f, 5.883205923e-03f, 5.871146879e-03f,
-5.859078328e-03f, 5.847000292e-03f, 5.834912791e-03f, 5.822815847e-03f, 5.810709481e-03f, 5.798593716e-03f, 5.786468571e-03f, 5.774334069e-03f, 5.762190232e-03f, 5.750037080e-03f,
-5.737874635e-03f, 5.725702919e-03f, 5.713521953e-03f, 5.701331758e-03f, 5.689132357e-03f, 5.676923771e-03f, 5.664706021e-03f, 5.652479129e-03f, 5.640243116e-03f, 5.627998005e-03f,
-5.615743816e-03f, 5.603480572e-03f, 5.591208294e-03f, 5.578927004e-03f, 5.566636723e-03f, 5.554337474e-03f, 5.542029277e-03f, 5.529712155e-03f, 5.517386130e-03f, 5.505051222e-03f,
-5.492707455e-03f, 5.480354849e-03f, 5.467993427e-03f, 5.455623210e-03f, 5.443244221e-03f, 5.430856481e-03f, 5.418460011e-03f, 5.406054834e-03f, 5.393640972e-03f, 5.381218447e-03f,
-5.368787280e-03f, 5.356347493e-03f, 5.343899109e-03f, 5.331442149e-03f, 5.318976636e-03f, 5.306502591e-03f, 5.294020036e-03f, 5.281528994e-03f, 5.269029485e-03f, 5.256521534e-03f,
-5.244005160e-03f, 5.231480388e-03f, 5.218947237e-03f, 5.206405732e-03f, 5.193855893e-03f, 5.181297743e-03f, 5.168731305e-03f, 5.156156599e-03f, 5.143573649e-03f, 5.130982476e-03f,
-5.118383103e-03f, 5.105775552e-03f, 5.093159845e-03f, 5.080536005e-03f, 5.067904053e-03f, 5.055264012e-03f, 5.042615904e-03f, 5.029959751e-03f, 5.017295576e-03f, 5.004623401e-03f,
-4.991943248e-03f, 4.979255140e-03f, 4.966559099e-03f, 4.953855147e-03f, 4.941143307e-03f, 4.928423601e-03f, 4.915696052e-03f, 4.902960681e-03f, 4.890217511e-03f, 4.877466565e-03f,
-4.864707866e-03f, 4.851941435e-03f, 4.839167294e-03f, 4.826385468e-03f, 4.813595977e-03f, 4.800798845e-03f, 4.787994094e-03f, 4.775181746e-03f, 4.762361825e-03f, 4.749534352e-03f,
-4.736699350e-03f, 4.723856842e-03f, 4.711006851e-03f, 4.698149398e-03f, 4.685284507e-03f, 4.672412200e-03f, 4.659532500e-03f, 4.646645429e-03f, 4.633751010e-03f, 4.620849266e-03f,
-4.607940219e-03f, 4.595023893e-03f, 4.582100309e-03f, 4.569169491e-03f, 4.556231461e-03f, 4.543286242e-03f, 4.530333856e-03f, 4.517374327e-03f, 4.504407678e-03f, 4.491433930e-03f,
-4.478453107e-03f, 4.465465232e-03f, 4.452470327e-03f, 4.439468415e-03f, 4.426459519e-03f, 4.413443662e-03f, 4.400420867e-03f, 4.387391157e-03f, 4.374354554e-03f, 4.361311081e-03f,
-4.348260762e-03f, 4.335203619e-03f, 4.322139675e-03f, 4.309068953e-03f, 4.295991475e-03f, 4.282907266e-03f, 4.269816348e-03f, 4.256718743e-03f, 4.243614476e-03f, 4.230503568e-03f,
-4.217386042e-03f, 4.204261923e-03f, 4.191131233e-03f, 4.177993994e-03f, 4.164850230e-03f, 4.151699964e-03f, 4.138543220e-03f, 4.125380019e-03f, 4.112210385e-03f, 4.099034342e-03f,
-4.085851912e-03f, 4.072663119e-03f, 4.059467985e-03f, 4.046266534e-03f, 4.033058789e-03f, 4.019844772e-03f, 4.006624508e-03f, 3.993398019e-03f, 3.980165329e-03f, 3.966926461e-03f,
-3.953681437e-03f, 3.940430281e-03f, 3.927173017e-03f, 3.913909668e-03f, 3.900640256e-03f, 3.887364805e-03f, 3.874083338e-03f, 3.860795879e-03f, 3.847502451e-03f, 3.834203077e-03f,
-3.820897780e-03f, 3.807586584e-03f, 3.794269512e-03f, 3.780946587e-03f, 3.767617833e-03f, 3.754283273e-03f, 3.740942930e-03f, 3.727596828e-03f, 3.714244989e-03f, 3.700887439e-03f,
-3.687524199e-03f, 3.674155293e-03f, 3.660780744e-03f, 3.647400577e-03f, 3.634014814e-03f, 3.620623478e-03f, 3.607226594e-03f, 3.593824185e-03f, 3.580416274e-03f, 3.567002884e-03f,
-3.553584039e-03f, 3.540159763e-03f, 3.526730078e-03f, 3.513295009e-03f, 3.499854579e-03f, 3.486408812e-03f, 3.472957730e-03f, 3.459501358e-03f, 3.446039719e-03f, 3.432572836e-03f,
-3.419100733e-03f, 3.405623434e-03f, 3.392140962e-03f, 3.378653341e-03f, 3.365160595e-03f, 3.351662746e-03f, 3.338159818e-03f, 3.324651836e-03f, 3.311138822e-03f, 3.297620801e-03f,
-3.284097795e-03f, 3.270569829e-03f, 3.257036926e-03f, 3.243499110e-03f, 3.229956405e-03f, 3.216408833e-03f, 3.202856419e-03f, 3.189299187e-03f, 3.175737160e-03f, 3.162170361e-03f,
-3.148598815e-03f, 3.135022546e-03f, 3.121441576e-03f, 3.107855929e-03f, 3.094265630e-03f, 3.080670702e-03f, 3.067071169e-03f, 3.053467054e-03f, 3.039858382e-03f, 3.026245175e-03f,
-3.012627458e-03f, 2.999005255e-03f, 2.985378589e-03f, 2.971747484e-03f, 2.958111963e-03f, 2.944472052e-03f, 2.930827773e-03f, 2.917179150e-03f, 2.903526207e-03f, 2.889868968e-03f,
-2.876207456e-03f, 2.862541696e-03f, 2.848871712e-03f, 2.835197526e-03f, 2.821519164e-03f, 2.807836648e-03f, 2.794150003e-03f, 2.780459253e-03f, 2.766764421e-03f, 2.753065531e-03f,
-2.739362608e-03f, 2.725655675e-03f, 2.711944755e-03f, 2.698229874e-03f, 2.684511054e-03f, 2.670788320e-03f, 2.657061696e-03f, 2.643331205e-03f, 2.629596871e-03f, 2.615858719e-03f,
-2.602116772e-03f, 2.588371055e-03f, 2.574621590e-03f, 2.560868403e-03f, 2.547111517e-03f, 2.533350955e-03f, 2.519586743e-03f, 2.505818904e-03f, 2.492047462e-03f, 2.478272441e-03f,
-2.464493864e-03f, 2.450711757e-03f, 2.436926142e-03f, 2.423137045e-03f, 2.409344488e-03f, 2.395548496e-03f, 2.381749094e-03f, 2.367946304e-03f, 2.354140151e-03f, 2.340330659e-03f,
-2.326517852e-03f, 2.312701755e-03f, 2.298882390e-03f, 2.285059783e-03f, 2.271233957e-03f, 2.257404936e-03f, 2.243572744e-03f, 2.229737406e-03f, 2.215898945e-03f, 2.202057386e-03f,
-2.188212753e-03f, 2.174365069e-03f, 2.160514359e-03f, 2.146660647e-03f, 2.132803956e-03f, 2.118944312e-03f, 2.105081738e-03f, 2.091216259e-03f, 2.077347897e-03f, 2.063476678e-03f,
-2.049602626e-03f, 2.035725764e-03f, 2.021846117e-03f, 2.007963710e-03f, 1.994078565e-03f, 1.980190707e-03f, 1.966300161e-03f, 1.952406950e-03f, 1.938511099e-03f, 1.924612632e-03f,
-1.910711572e-03f, 1.896807945e-03f, 1.882901774e-03f, 1.868993083e-03f, 1.855081897e-03f, 1.841168239e-03f, 1.827252134e-03f, 1.813333607e-03f, 1.799412680e-03f, 1.785489379e-03f,
-1.771563728e-03f, 1.757635750e-03f, 1.743705471e-03f, 1.729772913e-03f, 1.715838102e-03f, 1.701901061e-03f, 1.687961815e-03f, 1.674020387e-03f, 1.660076803e-03f, 1.646131087e-03f,
-1.632183261e-03f, 1.618233352e-03f, 1.604281382e-03f, 1.590327376e-03f, 1.576371359e-03f, 1.562413354e-03f, 1.548453387e-03f, 1.534491480e-03f, 1.520527658e-03f, 1.506561946e-03f,
-1.492594367e-03f, 1.478624946e-03f, 1.464653708e-03f, 1.450680676e-03f, 1.436705874e-03f, 1.422729327e-03f, 1.408751060e-03f, 1.394771095e-03f, 1.380789458e-03f, 1.366806173e-03f,
-1.352821264e-03f, 1.338834755e-03f, 1.324846671e-03f, 1.310857036e-03f, 1.296865873e-03f, 1.282873208e-03f, 1.268879064e-03f, 1.254883466e-03f, 1.240886439e-03f, 1.226888005e-03f,
-1.212888190e-03f, 1.198887018e-03f, 1.184884513e-03f, 1.170880699e-03f, 1.156875601e-03f, 1.142869242e-03f, 1.128861648e-03f, 1.114852842e-03f, 1.100842849e-03f, 1.086831692e-03f,
-1.072819397e-03f, 1.058805987e-03f, 1.044791487e-03f, 1.030775921e-03f, 1.016759313e-03f, 1.002741688e-03f, 9.887230693e-04f, 9.747034818e-04f, 9.606829496e-04f, 9.466614970e-04f,
-9.326391483e-04f, 9.186159277e-04f, 9.045918595e-04f, 8.905669680e-04f, 8.765412774e-04f, 8.625148121e-04f, 8.484875962e-04f, 8.344596542e-04f, 8.204310101e-04f, 8.064016884e-04f,
-7.923717133e-04f, 7.783411090e-04f, 7.643098998e-04f, 7.502781101e-04f, 7.362457640e-04f, 7.222128859e-04f, 7.081794999e-04f, 6.941456305e-04f, 6.801113018e-04f, 6.660765381e-04f,
-6.520413638e-04f, 6.380058030e-04f, 6.239698800e-04f, 6.099336191e-04f, 5.958970445e-04f, 5.818601806e-04f, 5.678230516e-04f, 5.537856817e-04f, 5.397480952e-04f, 5.257103165e-04f,
-5.116723696e-04f, 4.976342790e-04f, 4.835960688e-04f, 4.695577633e-04f, 4.555193868e-04f, 4.414809636e-04f, 4.274425178e-04f, 4.134040737e-04f, 3.993656557e-04f, 3.853272879e-04f,
-3.712889946e-04f, 3.572508000e-04f, 3.432127284e-04f, 3.291748040e-04f, 3.151370511e-04f, 3.010994939e-04f, 2.870621566e-04f, 2.730250636e-04f, 2.589882390e-04f, 2.449517070e-04f,
-2.309154920e-04f, 2.168796180e-04f, 2.028441095e-04f, 1.888089905e-04f, 1.747742853e-04f, 1.607400182e-04f, 1.467062133e-04f, 1.326728949e-04f, 1.186400872e-04f, 1.046078145e-04f,
-9.057610080e-05f, 7.654497047e-05f, 6.251444769e-05f, 4.848455666e-05f, 3.445532159e-05f, 2.042676667e-05f, 6.398916109e-06f, -7.628205901e-06f, -2.165457516e-05f, -3.568016749e-05f,
--4.970495869e-05f, -6.372892457e-05f, -7.775204096e-05f, -9.177428367e-05f, -1.057956285e-04f, -1.198160513e-04f, -1.338355280e-04f, -1.478540342e-04f, -1.618715459e-04f, -1.758880389e-04f,
--1.899034891e-04f, -2.039178722e-04f, -2.179311641e-04f, -2.319433407e-04f, -2.459543779e-04f, -2.599642514e-04f, -2.739729372e-04f, -2.879804110e-04f, -3.019866489e-04f, -3.159916265e-04f,
--3.299953199e-04f, -3.439977049e-04f, -3.579987573e-04f, -3.719984530e-04f, -3.859967680e-04f, -3.999936781e-04f, -4.139891593e-04f, -4.279831873e-04f, -4.419757382e-04f, -4.559667877e-04f,
--4.699563119e-04f, -4.839442867e-04f, -4.979306879e-04f, -5.119154915e-04f, -5.258986733e-04f, -5.398802094e-04f, -5.538600757e-04f, -5.678382481e-04f, -5.818147025e-04f, -5.957894149e-04f,
--6.097623612e-04f, -6.237335174e-04f, -6.377028595e-04f, -6.516703634e-04f, -6.656360051e-04f, -6.795997605e-04f, -6.935616057e-04f, -7.075215165e-04f, -7.214794691e-04f, -7.354354393e-04f,
--7.493894032e-04f, -7.633413368e-04f, -7.772912161e-04f, -7.912390171e-04f, -8.051847158e-04f, -8.191282882e-04f, -8.330697103e-04f, -8.470089582e-04f, -8.609460080e-04f, -8.748808356e-04f,
--8.888134171e-04f, -9.027437285e-04f, -9.166717459e-04f, -9.305974454e-04f, -9.445208030e-04f, -9.584417948e-04f, -9.723603969e-04f, -9.862765853e-04f, -1.000190336e-03f, -1.014101626e-03f,
--1.028010430e-03f, -1.041916724e-03f, -1.055820486e-03f, -1.069721690e-03f, -1.083620314e-03f, -1.097516333e-03f, -1.111409723e-03f, -1.125300460e-03f, -1.139188521e-03f, -1.153073882e-03f,
--1.166956519e-03f, -1.180836408e-03f, -1.194713525e-03f, -1.208587847e-03f, -1.222459349e-03f, -1.236328008e-03f, -1.250193800e-03f, -1.264056701e-03f, -1.277916687e-03f, -1.291773735e-03f,
--1.305627821e-03f, -1.319478920e-03f, -1.333327010e-03f, -1.347172067e-03f, -1.361014066e-03f, -1.374852984e-03f, -1.388688798e-03f, -1.402521482e-03f, -1.416351015e-03f, -1.430177372e-03f,
--1.444000528e-03f, -1.457820462e-03f, -1.471637148e-03f, -1.485450564e-03f, -1.499260685e-03f, -1.513067488e-03f, -1.526870949e-03f, -1.540671045e-03f, -1.554467751e-03f, -1.568261044e-03f,
--1.582050901e-03f, -1.595837298e-03f, -1.609620211e-03f, -1.623399617e-03f, -1.637175491e-03f, -1.650947811e-03f, -1.664716553e-03f, -1.678481693e-03f, -1.692243208e-03f, -1.706001073e-03f,
--1.719755266e-03f, -1.733505763e-03f, -1.747252540e-03f, -1.760995573e-03f, -1.774734840e-03f, -1.788470317e-03f, -1.802201980e-03f, -1.815929805e-03f, -1.829653769e-03f, -1.843373849e-03f,
--1.857090021e-03f, -1.870802262e-03f, -1.884510548e-03f, -1.898214855e-03f, -1.911915161e-03f, -1.925611441e-03f, -1.939303673e-03f, -1.952991832e-03f, -1.966675896e-03f, -1.980355841e-03f,
--1.994031643e-03f, -2.007703280e-03f, -2.021370727e-03f, -2.035033961e-03f, -2.048692960e-03f, -2.062347699e-03f, -2.075998156e-03f, -2.089644306e-03f, -2.103286127e-03f, -2.116923595e-03f,
--2.130556686e-03f, -2.144185379e-03f, -2.157809649e-03f, -2.171429472e-03f, -2.185044826e-03f, -2.198655688e-03f, -2.212262033e-03f, -2.225863840e-03f, -2.239461084e-03f, -2.253053742e-03f,
--2.266641791e-03f, -2.280225209e-03f, -2.293803970e-03f, -2.307378053e-03f, -2.320947435e-03f, -2.334512091e-03f, -2.348071999e-03f, -2.361627136e-03f, -2.375177478e-03f, -2.388723002e-03f,
--2.402263686e-03f, -2.415799506e-03f, -2.429330438e-03f, -2.442856460e-03f, -2.456377549e-03f, -2.469893682e-03f, -2.483404835e-03f, -2.496910985e-03f, -2.510412110e-03f, -2.523908186e-03f,
--2.537399190e-03f, -2.550885100e-03f, -2.564365891e-03f, -2.577841542e-03f, -2.591312029e-03f, -2.604777329e-03f, -2.618237419e-03f, -2.631692276e-03f, -2.645141878e-03f, -2.658586200e-03f,
--2.672025221e-03f, -2.685458918e-03f, -2.698887266e-03f, -2.712310245e-03f, -2.725727829e-03f, -2.739139998e-03f, -2.752546727e-03f, -2.765947995e-03f, -2.779343777e-03f, -2.792734052e-03f,
--2.806118795e-03f, -2.819497986e-03f, -2.832871600e-03f, -2.846239615e-03f, -2.859602009e-03f, -2.872958757e-03f, -2.886309838e-03f, -2.899655229e-03f, -2.912994907e-03f, -2.926328850e-03f,
--2.939657033e-03f, -2.952979436e-03f, -2.966296035e-03f, -2.979606807e-03f, -2.992911730e-03f, -3.006210781e-03f, -3.019503937e-03f, -3.032791176e-03f, -3.046072475e-03f, -3.059347812e-03f,
--3.072617164e-03f, -3.085880507e-03f, -3.099137821e-03f, -3.112389081e-03f, -3.125634266e-03f, -3.138873353e-03f, -3.152106319e-03f, -3.165333142e-03f, -3.178553799e-03f, -3.191768268e-03f,
--3.204976527e-03f, -3.218178552e-03f, -3.231374321e-03f, -3.244563813e-03f, -3.257747003e-03f, -3.270923871e-03f, -3.284094393e-03f, -3.297258547e-03f, -3.310416311e-03f, -3.323567663e-03f,
--3.336712579e-03f, -3.349851037e-03f, -3.362983016e-03f, -3.376108493e-03f, -3.389227445e-03f, -3.402339851e-03f, -3.415445687e-03f, -3.428544932e-03f, -3.441637563e-03f, -3.454723558e-03f,
--3.467802895e-03f, -3.480875552e-03f, -3.493941506e-03f, -3.507000734e-03f, -3.520053216e-03f, -3.533098929e-03f, -3.546137850e-03f, -3.559169957e-03f, -3.572195228e-03f, -3.585213642e-03f,
--3.598225175e-03f, -3.611229806e-03f, -3.624227513e-03f, -3.637218274e-03f, -3.650202065e-03f, -3.663178867e-03f, -3.676148656e-03f, -3.689111410e-03f, -3.702067107e-03f, -3.715015726e-03f,
--3.727957244e-03f, -3.740891640e-03f, -3.753818891e-03f, -3.766738975e-03f, -3.779651871e-03f, -3.792557556e-03f, -3.805456009e-03f, -3.818347208e-03f, -3.831231130e-03f, -3.844107755e-03f,
--3.856977060e-03f, -3.869839022e-03f, -3.882693622e-03f, -3.895540836e-03f, -3.908380642e-03f, -3.921213020e-03f, -3.934037947e-03f, -3.946855402e-03f, -3.959665362e-03f, -3.972467806e-03f,
--3.985262712e-03f, -3.998050059e-03f, -4.010829825e-03f, -4.023601988e-03f, -4.036366527e-03f, -4.049123419e-03f, -4.061872644e-03f, -4.074614179e-03f, -4.087348003e-03f, -4.100074095e-03f,
--4.112792432e-03f, -4.125502994e-03f, -4.138205759e-03f, -4.150900704e-03f, -4.163587810e-03f, -4.176267053e-03f, -4.188938413e-03f, -4.201601869e-03f, -4.214257398e-03f, -4.226904979e-03f,
--4.239544591e-03f, -4.252176213e-03f, -4.264799823e-03f, -4.277415399e-03f, -4.290022921e-03f, -4.302622366e-03f, -4.315213714e-03f, -4.327796944e-03f, -4.340372033e-03f, -4.352938961e-03f,
--4.365497706e-03f, -4.378048248e-03f, -4.390590564e-03f, -4.403124634e-03f, -4.415650436e-03f, -4.428167950e-03f, -4.440677153e-03f, -4.453178026e-03f, -4.465670546e-03f, -4.478154692e-03f,
--4.490630444e-03f, -4.503097781e-03f, -4.515556680e-03f, -4.528007122e-03f, -4.540449084e-03f, -4.552882547e-03f, -4.565307488e-03f, -4.577723888e-03f, -4.590131724e-03f, -4.602530977e-03f,
--4.614921624e-03f, -4.627303646e-03f, -4.639677021e-03f, -4.652041727e-03f, -4.664397746e-03f, -4.676745054e-03f, -4.689083632e-03f, -4.701413459e-03f, -4.713734513e-03f, -4.726046775e-03f,
--4.738350223e-03f, -4.750644836e-03f, -4.762930594e-03f, -4.775207475e-03f, -4.787475460e-03f, -4.799734527e-03f, -4.811984656e-03f, -4.824225826e-03f, -4.836458016e-03f, -4.848681206e-03f,
--4.860895375e-03f, -4.873100502e-03f, -4.885296568e-03f, -4.897483550e-03f, -4.909661429e-03f, -4.921830184e-03f, -4.933989794e-03f, -4.946140240e-03f, -4.958281500e-03f, -4.970413554e-03f,
--4.982536381e-03f, -4.994649962e-03f, -5.006754275e-03f, -5.018849300e-03f, -5.030935017e-03f, -5.043011406e-03f, -5.055078445e-03f, -5.067136115e-03f, -5.079184396e-03f, -5.091223267e-03f,
--5.103252707e-03f, -5.115272697e-03f, -5.127283215e-03f, -5.139284243e-03f, -5.151275760e-03f, -5.163257745e-03f, -5.175230178e-03f, -5.187193039e-03f, -5.199146308e-03f, -5.211089965e-03f,
--5.223023990e-03f, -5.234948362e-03f, -5.246863061e-03f, -5.258768068e-03f, -5.270663362e-03f, -5.282548924e-03f, -5.294424733e-03f, -5.306290769e-03f, -5.318147012e-03f, -5.329993442e-03f,
--5.341830040e-03f, -5.353656785e-03f, -5.365473658e-03f, -5.377280638e-03f, -5.389077707e-03f, -5.400864842e-03f, -5.412642026e-03f, -5.424409239e-03f, -5.436166459e-03f, -5.447913668e-03f,
--5.459650846e-03f, -5.471377973e-03f, -5.483095030e-03f, -5.494801996e-03f, -5.506498852e-03f, -5.518185578e-03f, -5.529862155e-03f, -5.541528563e-03f, -5.553184783e-03f, -5.564830794e-03f,
--5.576466577e-03f, -5.588092113e-03f, -5.599707382e-03f, -5.611312364e-03f, -5.622907041e-03f, -5.634491392e-03f, -5.646065398e-03f, -5.657629040e-03f, -5.669182298e-03f, -5.680725153e-03f,
--5.692257585e-03f, -5.703779575e-03f, -5.715291104e-03f, -5.726792152e-03f, -5.738282700e-03f, -5.749762729e-03f, -5.761232220e-03f, -5.772691152e-03f, -5.784139508e-03f, -5.795577267e-03f,
--5.807004410e-03f, -5.818420919e-03f, -5.829826774e-03f, -5.841221956e-03f, -5.852606446e-03f, -5.863980225e-03f, -5.875343273e-03f, -5.886695573e-03f, -5.898037103e-03f, -5.909367846e-03f,
--5.920687783e-03f, -5.931996894e-03f, -5.943295161e-03f, -5.954582565e-03f, -5.965859086e-03f, -5.977124706e-03f, -5.988379406e-03f, -5.999623167e-03f, -6.010855970e-03f, -6.022077797e-03f,
--6.033288628e-03f, -6.044488445e-03f, -6.055677229e-03f, -6.066854961e-03f, -6.078021623e-03f, -6.089177195e-03f, -6.100321660e-03f, -6.111454998e-03f, -6.122577191e-03f, -6.133688220e-03f,
--6.144788066e-03f, -6.155876712e-03f, -6.166954138e-03f, -6.178020326e-03f, -6.189075257e-03f, -6.200118913e-03f, -6.211151275e-03f, -6.222172325e-03f, -6.233182045e-03f, -6.244180416e-03f,
--6.255167419e-03f, -6.266143036e-03f, -6.277107250e-03f, -6.288060041e-03f, -6.299001391e-03f, -6.309931282e-03f, -6.320849695e-03f, -6.331756613e-03f, -6.342652017e-03f, -6.353535889e-03f,
--6.364408211e-03f, -6.375268964e-03f, -6.386118130e-03f, -6.396955692e-03f, -6.407781631e-03f, -6.418595929e-03f, -6.429398568e-03f, -6.440189530e-03f, -6.450968797e-03f, -6.461736350e-03f,
--6.472492173e-03f, -6.483236246e-03f, -6.493968552e-03f, -6.504689074e-03f, -6.515397792e-03f, -6.526094690e-03f, -6.536779750e-03f, -6.547452953e-03f, -6.558114281e-03f, -6.568763718e-03f,
--6.579401245e-03f, -6.590026844e-03f, -6.600640498e-03f, -6.611242189e-03f, -6.621831899e-03f, -6.632409611e-03f, -6.642975307e-03f, -6.653528970e-03f, -6.664070581e-03f, -6.674600123e-03f,
--6.685117579e-03f, -6.695622932e-03f, -6.706116163e-03f, -6.716597255e-03f, -6.727066190e-03f, -6.737522952e-03f, -6.747967523e-03f, -6.758399885e-03f, -6.768820021e-03f, -6.779227913e-03f,
--6.789623545e-03f, -6.800006899e-03f, -6.810377958e-03f, -6.820736704e-03f, -6.831083120e-03f, -6.841417189e-03f, -6.851738894e-03f, -6.862048217e-03f, -6.872345142e-03f, -6.882629651e-03f,
--6.892901728e-03f, -6.903161354e-03f, -6.913408513e-03f, -6.923643188e-03f, -6.933865363e-03f, -6.944075019e-03f, -6.954272140e-03f, -6.964456709e-03f, -6.974628709e-03f, -6.984788123e-03f,
--6.994934934e-03f, -7.005069126e-03f, -7.015190681e-03f, -7.025299583e-03f, -7.035395815e-03f, -7.045479360e-03f, -7.055550202e-03f, -7.065608323e-03f, -7.075653707e-03f, -7.085686337e-03f,
--7.095706197e-03f, -7.105713269e-03f, -7.115707538e-03f, -7.125688987e-03f, -7.135657599e-03f, -7.145613358e-03f, -7.155556247e-03f, -7.165486249e-03f, -7.175403348e-03f, -7.185307528e-03f,
--7.195198773e-03f, -7.205077065e-03f, -7.214942388e-03f, -7.224794727e-03f, -7.234634065e-03f, -7.244460384e-03f, -7.254273670e-03f, -7.264073906e-03f, -7.273861076e-03f, -7.283635162e-03f,
--7.293396150e-03f, -7.303144023e-03f, -7.312878765e-03f, -7.322600360e-03f, -7.332308791e-03f, -7.342004043e-03f, -7.351686100e-03f, -7.361354944e-03f, -7.371010562e-03f, -7.380652935e-03f,
--7.390282050e-03f, -7.399897888e-03f, -7.409500436e-03f, -7.419089676e-03f, -7.428665593e-03f, -7.438228172e-03f, -7.447777395e-03f, -7.457313248e-03f, -7.466835714e-03f, -7.476344779e-03f,
--7.485840426e-03f, -7.495322639e-03f, -7.504791403e-03f, -7.514246702e-03f, -7.523688521e-03f, -7.533116843e-03f, -7.542531654e-03f, -7.551932938e-03f, -7.561320679e-03f, -7.570694862e-03f,
--7.580055471e-03f, -7.589402491e-03f, -7.598735906e-03f, -7.608055702e-03f, -7.617361861e-03f, -7.626654371e-03f, -7.635933214e-03f, -7.645198375e-03f, -7.654449840e-03f, -7.663687593e-03f,
--7.672911619e-03f, -7.682121902e-03f, -7.691318428e-03f, -7.700501181e-03f, -7.709670146e-03f, -7.718825308e-03f, -7.727966652e-03f, -7.737094162e-03f, -7.746207825e-03f, -7.755307624e-03f,
--7.764393545e-03f, -7.773465573e-03f, -7.782523692e-03f, -7.791567889e-03f, -7.800598147e-03f, -7.809614453e-03f, -7.818616791e-03f, -7.827605147e-03f, -7.836579505e-03f, -7.845539851e-03f,
--7.854486171e-03f, -7.863418449e-03f, -7.872336670e-03f, -7.881240821e-03f, -7.890130886e-03f, -7.899006851e-03f, -7.907868702e-03f, -7.916716423e-03f, -7.925550000e-03f, -7.934369419e-03f,
--7.943174665e-03f, -7.951965723e-03f, -7.960742580e-03f, -7.969505221e-03f, -7.978253631e-03f, -7.986987796e-03f, -7.995707702e-03f, -8.004413334e-03f, -8.013104679e-03f, -8.021781721e-03f,
--8.030444447e-03f, -8.039092842e-03f, -8.047726892e-03f, -8.056346584e-03f, -8.064951902e-03f, -8.073542833e-03f, -8.082119363e-03f, -8.090681477e-03f, -8.099229162e-03f, -8.107762404e-03f,
--8.116281188e-03f, -8.124785501e-03f, -8.133275328e-03f, -8.141750657e-03f, -8.150211472e-03f, -8.158657761e-03f, -8.167089508e-03f, -8.175506701e-03f, -8.183909326e-03f, -8.192297369e-03f,
--8.200670816e-03f, -8.209029653e-03f, -8.217373867e-03f, -8.225703445e-03f, -8.234018372e-03f, -8.242318635e-03f, -8.250604220e-03f, -8.258875114e-03f, -8.267131303e-03f, -8.275372775e-03f,
--8.283599514e-03f, -8.291811509e-03f, -8.300008745e-03f, -8.308191209e-03f, -8.316358888e-03f, -8.324511768e-03f, -8.332649837e-03f, -8.340773080e-03f, -8.348881485e-03f, -8.356975038e-03f,
--8.365053727e-03f, -8.373117537e-03f, -8.381166456e-03f, -8.389200471e-03f, -8.397219569e-03f, -8.405223736e-03f, -8.413212959e-03f, -8.421187226e-03f, -8.429146524e-03f, -8.437090839e-03f,
--8.445020159e-03f, -8.452934470e-03f, -8.460833760e-03f, -8.468718016e-03f, -8.476587225e-03f, -8.484441375e-03f, -8.492280451e-03f, -8.500104443e-03f, -8.507913337e-03f, -8.515707120e-03f,
--8.523485780e-03f, -8.531249303e-03f, -8.538997678e-03f, -8.546730892e-03f, -8.554448932e-03f, -8.562151786e-03f, -8.569839441e-03f, -8.577511885e-03f, -8.585169105e-03f, -8.592811089e-03f,
--8.600437824e-03f, -8.608049299e-03f, -8.615645500e-03f, -8.623226415e-03f, -8.630792033e-03f, -8.638342340e-03f, -8.645877325e-03f, -8.653396975e-03f, -8.660901279e-03f, -8.668390223e-03f,
--8.675863797e-03f, -8.683321987e-03f, -8.690764781e-03f, -8.698192169e-03f, -8.705604137e-03f, -8.713000674e-03f, -8.720381767e-03f, -8.727747405e-03f, -8.735097576e-03f, -8.742432268e-03f,
--8.749751469e-03f, -8.757055168e-03f, -8.764343351e-03f, -8.771616008e-03f, -8.778873128e-03f, -8.786114697e-03f, -8.793340705e-03f, -8.800551140e-03f, -8.807745989e-03f, -8.814925243e-03f,
--8.822088888e-03f, -8.829236914e-03f, -8.836369309e-03f, -8.843486061e-03f, -8.850587159e-03f, -8.857672592e-03f, -8.864742347e-03f, -8.871796414e-03f, -8.878834782e-03f, -8.885857438e-03f,
--8.892864373e-03f, -8.899855573e-03f, -8.906831029e-03f, -8.913790729e-03f, -8.920734661e-03f, -8.927662815e-03f, -8.934575179e-03f, -8.941471742e-03f, -8.948352494e-03f, -8.955217423e-03f,
--8.962066518e-03f, -8.968899768e-03f, -8.975717162e-03f, -8.982518689e-03f, -8.989304339e-03f, -8.996074100e-03f, -9.002827962e-03f, -9.009565913e-03f, -9.016287943e-03f, -9.022994041e-03f,
--9.029684196e-03f, -9.036358399e-03f, -9.043016637e-03f, -9.049658900e-03f, -9.056285178e-03f, -9.062895460e-03f, -9.069489736e-03f, -9.076067994e-03f, -9.082630225e-03f, -9.089176417e-03f,
--9.095706561e-03f, -9.102220646e-03f, -9.108718661e-03f, -9.115200597e-03f, -9.121666443e-03f, -9.128116188e-03f, -9.134549822e-03f, -9.140967335e-03f, -9.147368716e-03f, -9.153753957e-03f,
--9.160123045e-03f, -9.166475972e-03f, -9.172812726e-03f, -9.179133299e-03f, -9.185437679e-03f, -9.191725857e-03f, -9.197997823e-03f, -9.204253567e-03f, -9.210493078e-03f, -9.216716347e-03f,
--9.222923365e-03f, -9.229114120e-03f, -9.235288604e-03f, -9.241446806e-03f, -9.247588717e-03f, -9.253714327e-03f, -9.259823626e-03f, -9.265916605e-03f, -9.271993253e-03f, -9.278053562e-03f,
--9.284097521e-03f, -9.290125121e-03f, -9.296136353e-03f, -9.302131206e-03f, -9.308109672e-03f, -9.314071741e-03f, -9.320017404e-03f, -9.325946650e-03f, -9.331859472e-03f, -9.337755858e-03f,
--9.343635801e-03f, -9.349499290e-03f, -9.355346317e-03f, -9.361176872e-03f, -9.366990946e-03f, -9.372788530e-03f, -9.378569615e-03f, -9.384334191e-03f, -9.390082250e-03f, -9.395813782e-03f,
--9.401528778e-03f, -9.407227230e-03f, -9.412909128e-03f, -9.418574464e-03f, -9.424223228e-03f, -9.429855412e-03f, -9.435471007e-03f, -9.441070003e-03f, -9.446652393e-03f, -9.452218167e-03f,
--9.457767317e-03f, -9.463299834e-03f, -9.468815709e-03f, -9.474314933e-03f, -9.479797498e-03f, -9.485263396e-03f, -9.490712618e-03f, -9.496145154e-03f, -9.501560998e-03f, -9.506960139e-03f,
--9.512342571e-03f, -9.517708284e-03f, -9.523057270e-03f, -9.528389520e-03f, -9.533705027e-03f, -9.539003782e-03f, -9.544285776e-03f, -9.549551002e-03f, -9.554799451e-03f, -9.560031115e-03f,
--9.565245986e-03f, -9.570444056e-03f, -9.575625316e-03f, -9.580789759e-03f, -9.585937377e-03f, -9.591068161e-03f, -9.596182104e-03f, -9.601279197e-03f, -9.606359433e-03f, -9.611422803e-03f,
--9.616469301e-03f, -9.621498918e-03f, -9.626511646e-03f, -9.631507477e-03f, -9.636486405e-03f, -9.641448420e-03f, -9.646393516e-03f, -9.651321684e-03f, -9.656232918e-03f, -9.661127209e-03f,
--9.666004550e-03f, -9.670864933e-03f, -9.675708351e-03f, -9.680534797e-03f, -9.685344262e-03f, -9.690136740e-03f, -9.694912223e-03f, -9.699670704e-03f, -9.704412176e-03f, -9.709136630e-03f,
--9.713844061e-03f, -9.718534460e-03f, -9.723207820e-03f, -9.727864135e-03f, -9.732503397e-03f, -9.737125599e-03f, -9.741730733e-03f, -9.746318794e-03f, -9.750889773e-03f, -9.755443664e-03f,
--9.759980460e-03f, -9.764500154e-03f, -9.769002739e-03f, -9.773488208e-03f, -9.777956554e-03f, -9.782407770e-03f, -9.786841850e-03f, -9.791258787e-03f, -9.795658574e-03f, -9.800041205e-03f,
--9.804406672e-03f, -9.808754970e-03f, -9.813086090e-03f, -9.817400028e-03f, -9.821696776e-03f, -9.825976328e-03f, -9.830238678e-03f, -9.834483818e-03f, -9.838711742e-03f, -9.842922445e-03f,
--9.847115919e-03f, -9.851292159e-03f, -9.855451158e-03f, -9.859592909e-03f, -9.863717407e-03f, -9.867824645e-03f, -9.871914618e-03f, -9.875987318e-03f, -9.880042740e-03f, -9.884080878e-03f,
--9.888101725e-03f, -9.892105276e-03f, -9.896091524e-03f, -9.900060464e-03f, -9.904012090e-03f, -9.907946395e-03f, -9.911863374e-03f, -9.915763022e-03f, -9.919645331e-03f, -9.923510296e-03f,
--9.927357913e-03f, -9.931188174e-03f, -9.935001074e-03f, -9.938796607e-03f, -9.942574769e-03f, -9.946335552e-03f, -9.950078952e-03f, -9.953804964e-03f, -9.957513580e-03f, -9.961204797e-03f,
--9.964878608e-03f, -9.968535009e-03f, -9.972173993e-03f, -9.975795555e-03f, -9.979399691e-03f, -9.982986394e-03f, -9.986555659e-03f, -9.990107482e-03f, -9.993641857e-03f, -9.997158778e-03f,
--1.000065824e-02f, -1.000414024e-02f, -1.000760477e-02f, -1.001105183e-02f, -1.001448141e-02f, -1.001789350e-02f, -1.002128811e-02f, -1.002466522e-02f, -1.002802483e-02f, -1.003136694e-02f,
--1.003469154e-02f, -1.003799863e-02f, -1.004128820e-02f, -1.004456025e-02f, -1.004781477e-02f, -1.005105176e-02f, -1.005427121e-02f, -1.005747312e-02f, -1.006065748e-02f, -1.006382429e-02f,
--1.006697355e-02f, -1.007010525e-02f, -1.007321938e-02f, -1.007631594e-02f, -1.007939494e-02f, -1.008245635e-02f, -1.008550018e-02f, -1.008852643e-02f, -1.009153508e-02f, -1.009452614e-02f,
--1.009749960e-02f, -1.010045546e-02f, -1.010339371e-02f, -1.010631435e-02f, -1.010921737e-02f, -1.011210278e-02f, -1.011497055e-02f, -1.011782071e-02f, -1.012065322e-02f, -1.012346811e-02f,
--1.012626535e-02f, -1.012904495e-02f, -1.013180690e-02f, -1.013455120e-02f, -1.013727785e-02f, -1.013998683e-02f, -1.014267816e-02f, -1.014535181e-02f, -1.014800780e-02f, -1.015064611e-02f,
--1.015326675e-02f, -1.015586970e-02f, -1.015845497e-02f, -1.016102255e-02f, -1.016357244e-02f, -1.016610463e-02f, -1.016861913e-02f, -1.017111592e-02f, -1.017359501e-02f, -1.017605638e-02f,
--1.017850005e-02f, -1.018092600e-02f, -1.018333423e-02f, -1.018572474e-02f, -1.018809753e-02f, -1.019045258e-02f, -1.019278991e-02f, -1.019510950e-02f, -1.019741135e-02f, -1.019969546e-02f,
--1.020196183e-02f, -1.020421045e-02f, -1.020644132e-02f, -1.020865444e-02f, -1.021084980e-02f, -1.021302741e-02f, -1.021518725e-02f, -1.021732933e-02f, -1.021945364e-02f, -1.022156019e-02f,
--1.022364896e-02f, -1.022571995e-02f, -1.022777317e-02f, -1.022980861e-02f, -1.023182626e-02f, -1.023382613e-02f, -1.023580822e-02f, -1.023777251e-02f, -1.023971901e-02f, -1.024164771e-02f,
--1.024355862e-02f, -1.024545173e-02f, -1.024732703e-02f, -1.024918453e-02f, -1.025102422e-02f, -1.025284610e-02f, -1.025465018e-02f, -1.025643643e-02f, -1.025820488e-02f, -1.025995550e-02f,
--1.026168831e-02f, -1.026340329e-02f, -1.026510045e-02f, -1.026677978e-02f, -1.026844129e-02f, -1.027008496e-02f, -1.027171080e-02f, -1.027331881e-02f, -1.027490899e-02f, -1.027648132e-02f,
--1.027803582e-02f, -1.027957248e-02f, -1.028109129e-02f, -1.028259226e-02f, -1.028407538e-02f, -1.028554066e-02f, -1.028698809e-02f, -1.028841766e-02f, -1.028982938e-02f, -1.029122325e-02f,
--1.029259927e-02f, -1.029395743e-02f, -1.029529773e-02f, -1.029662017e-02f, -1.029792475e-02f, -1.029921146e-02f, -1.030048032e-02f, -1.030173131e-02f, -1.030296443e-02f, -1.030417968e-02f,
--1.030537707e-02f, -1.030655659e-02f, -1.030771824e-02f, -1.030886201e-02f, -1.030998792e-02f, -1.031109595e-02f, -1.031218610e-02f, -1.031325838e-02f, -1.031431278e-02f, -1.031534931e-02f,
--1.031636795e-02f, -1.031736872e-02f, -1.031835161e-02f, -1.031931662e-02f, -1.032026374e-02f, -1.032119299e-02f, -1.032210435e-02f, -1.032299783e-02f, -1.032387342e-02f, -1.032473113e-02f,
--1.032557096e-02f, -1.032639289e-02f, -1.032719695e-02f, -1.032798311e-02f, -1.032875139e-02f, -1.032950178e-02f, -1.033023429e-02f, -1.033094890e-02f, -1.033164563e-02f, -1.033232447e-02f,
--1.033298542e-02f, -1.033362848e-02f, -1.033425365e-02f, -1.033486093e-02f, -1.033545033e-02f, -1.033602183e-02f, -1.033657544e-02f, -1.033711117e-02f, -1.033762900e-02f, -1.033812895e-02f,
--1.033861100e-02f, -1.033907517e-02f, -1.033952145e-02f, -1.033994983e-02f, -1.034036033e-02f, -1.034075294e-02f, -1.034112766e-02f, -1.034148450e-02f, -1.034182344e-02f, -1.034214450e-02f,
--1.034244767e-02f, -1.034273295e-02f, -1.034300035e-02f, -1.034324986e-02f, -1.034348149e-02f, -1.034369523e-02f, -1.034389109e-02f, -1.034406906e-02f, -1.034422916e-02f, -1.034437137e-02f,
--1.034449569e-02f, -1.034460214e-02f, -1.034469071e-02f, -1.034476139e-02f, -1.034481420e-02f, -1.034484913e-02f, -1.034486619e-02f, -1.034486536e-02f, -1.034484667e-02f, -1.034481010e-02f,
--1.034475565e-02f, -1.034468334e-02f, -1.034459315e-02f, -1.034448510e-02f, -1.034435917e-02f, -1.034421538e-02f, -1.034405372e-02f, -1.034387419e-02f, -1.034367681e-02f, -1.034346156e-02f,
--1.034322844e-02f, -1.034297747e-02f, -1.034270864e-02f, -1.034242195e-02f, -1.034211741e-02f, -1.034179501e-02f, -1.034145476e-02f, -1.034109666e-02f, -1.034072071e-02f, -1.034032691e-02f,
--1.033991526e-02f, -1.033948577e-02f, -1.033903843e-02f, -1.033857326e-02f, -1.033809024e-02f, -1.033758939e-02f, -1.033707070e-02f, -1.033653417e-02f, -1.033597982e-02f, -1.033540763e-02f,
--1.033481761e-02f, -1.033420977e-02f, -1.033358410e-02f, -1.033294061e-02f, -1.033227930e-02f, -1.033160017e-02f, -1.033090322e-02f, -1.033018846e-02f, -1.032945588e-02f, -1.032870550e-02f,
--1.032793731e-02f, -1.032715131e-02f, -1.032634751e-02f, -1.032552591e-02f, -1.032468651e-02f, -1.032382931e-02f, -1.032295432e-02f, -1.032206154e-02f, -1.032115097e-02f, -1.032022261e-02f,
--1.031927647e-02f, -1.031831255e-02f, -1.031733085e-02f, -1.031633137e-02f, -1.031531412e-02f, -1.031427910e-02f, -1.031322631e-02f, -1.031215576e-02f, -1.031106744e-02f, -1.030996137e-02f,
--1.030883753e-02f, -1.030769595e-02f, -1.030653661e-02f, -1.030535952e-02f, -1.030416469e-02f, -1.030295212e-02f, -1.030172180e-02f, -1.030047375e-02f, -1.029920797e-02f, -1.029792446e-02f,
--1.029662322e-02f, -1.029530426e-02f, -1.029396758e-02f, -1.029261318e-02f, -1.029124106e-02f, -1.028985124e-02f, -1.028844371e-02f, -1.028701847e-02f, -1.028557553e-02f, -1.028411490e-02f,
--1.028263657e-02f, -1.028114056e-02f, -1.027962685e-02f, -1.027809547e-02f, -1.027654640e-02f, -1.027497966e-02f, -1.027339524e-02f, -1.027179316e-02f, -1.027017341e-02f, -1.026853600e-02f,
--1.026688093e-02f, -1.026520821e-02f, -1.026351784e-02f, -1.026180983e-02f, -1.026008417e-02f, -1.025834087e-02f, -1.025657994e-02f, -1.025480138e-02f, -1.025300519e-02f, -1.025119138e-02f,
--1.024935995e-02f, -1.024751090e-02f, -1.024564425e-02f, -1.024375999e-02f, -1.024185813e-02f, -1.023993867e-02f, -1.023800162e-02f, -1.023604698e-02f, -1.023407475e-02f, -1.023208495e-02f,
--1.023007756e-02f, -1.022805261e-02f, -1.022601009e-02f, -1.022395000e-02f, -1.022187236e-02f, -1.021977716e-02f, -1.021766442e-02f, -1.021553413e-02f, -1.021338630e-02f, -1.021122093e-02f,
--1.020903803e-02f, -1.020683761e-02f, -1.020461967e-02f, -1.020238420e-02f, -1.020013123e-02f, -1.019786075e-02f, -1.019557277e-02f, -1.019326729e-02f, -1.019094431e-02f, -1.018860385e-02f,
--1.018624591e-02f, -1.018387049e-02f, -1.018147759e-02f, -1.017906723e-02f, -1.017663941e-02f, -1.017419413e-02f, -1.017173140e-02f, -1.016925121e-02f, -1.016675359e-02f, -1.016423853e-02f,
--1.016170604e-02f, -1.015915613e-02f, -1.015658879e-02f, -1.015400404e-02f, -1.015140187e-02f, -1.014878231e-02f, -1.014614534e-02f, -1.014349098e-02f, -1.014081923e-02f, -1.013813010e-02f,
--1.013542359e-02f, -1.013269971e-02f, -1.012995846e-02f, -1.012719985e-02f, -1.012442389e-02f, -1.012163058e-02f, -1.011881993e-02f, -1.011599193e-02f, -1.011314661e-02f, -1.011028396e-02f,
--1.010740399e-02f, -1.010450671e-02f, -1.010159212e-02f, -1.009866022e-02f, -1.009571103e-02f, -1.009274455e-02f, -1.008976079e-02f, -1.008675974e-02f, -1.008374143e-02f, -1.008070585e-02f,
--1.007765300e-02f, -1.007458291e-02f, -1.007149557e-02f, -1.006839098e-02f, -1.006526916e-02f, -1.006213011e-02f, -1.005897384e-02f, -1.005580036e-02f, -1.005260966e-02f, -1.004940176e-02f,
--1.004617667e-02f, -1.004293438e-02f, -1.003967491e-02f, -1.003639826e-02f, -1.003310444e-02f, -1.002979346e-02f, -1.002646532e-02f, -1.002312003e-02f, -1.001975759e-02f, -1.001637802e-02f,
--1.001298132e-02f, -1.000956749e-02f, -1.000613654e-02f, -1.000268849e-02f, -9.999223330e-03f, -9.995741074e-03f, -9.992241729e-03f, -9.988725301e-03f, -9.985191796e-03f, -9.981641223e-03f,
--9.978073588e-03f, -9.974488899e-03f, -9.970887161e-03f, -9.967268383e-03f, -9.963632571e-03f, -9.959979734e-03f, -9.956309877e-03f, -9.952623008e-03f, -9.948919135e-03f, -9.945198264e-03f,
--9.941460403e-03f, -9.937705560e-03f, -9.933933741e-03f, -9.930144955e-03f, -9.926339208e-03f, -9.922516508e-03f, -9.918676862e-03f, -9.914820279e-03f, -9.910946765e-03f, -9.907056328e-03f,
--9.903148976e-03f, -9.899224717e-03f, -9.895283557e-03f, -9.891325505e-03f, -9.887350569e-03f, -9.883358756e-03f, -9.879350074e-03f, -9.875324530e-03f, -9.871282134e-03f, -9.867222891e-03f,
--9.863146811e-03f, -9.859053902e-03f, -9.854944171e-03f, -9.850817626e-03f, -9.846674275e-03f, -9.842514126e-03f, -9.838337188e-03f, -9.834143469e-03f, -9.829932975e-03f, -9.825705717e-03f,
--9.821461701e-03f, -9.817200937e-03f, -9.812923432e-03f, -9.808629194e-03f, -9.804318233e-03f, -9.799990555e-03f, -9.795646170e-03f, -9.791285086e-03f, -9.786907312e-03f, -9.782512855e-03f,
--9.778101724e-03f, -9.773673929e-03f, -9.769229476e-03f, -9.764768375e-03f, -9.760290635e-03f, -9.755796263e-03f, -9.751285270e-03f, -9.746757662e-03f, -9.742213449e-03f, -9.737652641e-03f,
--9.733075244e-03f, -9.728481269e-03f, -9.723870724e-03f, -9.719243617e-03f, -9.714599959e-03f, -9.709939757e-03f, -9.705263020e-03f, -9.700569758e-03f, -9.695859979e-03f, -9.691133693e-03f,
--9.686390908e-03f, -9.681631634e-03f, -9.676855879e-03f, -9.672063653e-03f, -9.667254964e-03f, -9.662429823e-03f, -9.657588238e-03f, -9.652730218e-03f, -9.647855773e-03f, -9.642964912e-03f,
--9.638057644e-03f, -9.633133979e-03f, -9.628193926e-03f, -9.623237494e-03f, -9.618264693e-03f, -9.613275532e-03f, -9.608270021e-03f, -9.603248168e-03f, -9.598209985e-03f, -9.593155480e-03f,
--9.588084663e-03f, -9.582997543e-03f, -9.577894130e-03f, -9.572774434e-03f, -9.567638465e-03f, -9.562486231e-03f, -9.557317744e-03f, -9.552133012e-03f, -9.546932046e-03f, -9.541714855e-03f,
--9.536481450e-03f, -9.531231839e-03f, -9.525966034e-03f, -9.520684043e-03f, -9.515385878e-03f, -9.510071547e-03f, -9.504741062e-03f, -9.499394431e-03f, -9.494031665e-03f, -9.488652775e-03f,
--9.483257770e-03f, -9.477846660e-03f, -9.472419456e-03f, -9.466976168e-03f, -9.461516807e-03f, -9.456041381e-03f, -9.450549902e-03f, -9.445042381e-03f, -9.439518826e-03f, -9.433979250e-03f,
--9.428423661e-03f, -9.422852072e-03f, -9.417264491e-03f, -9.411660930e-03f, -9.406041399e-03f, -9.400405908e-03f, -9.394754469e-03f, -9.389087091e-03f, -9.383403786e-03f, -9.377704564e-03f,
--9.371989436e-03f, -9.366258412e-03f, -9.360511503e-03f, -9.354748720e-03f, -9.348970074e-03f, -9.343175575e-03f, -9.337365235e-03f, -9.331539064e-03f, -9.325697073e-03f, -9.319839273e-03f,
--9.313965675e-03f, -9.308076290e-03f, -9.302171129e-03f, -9.296250203e-03f, -9.290313523e-03f, -9.284361100e-03f, -9.278392945e-03f, -9.272409070e-03f, -9.266409485e-03f, -9.260394202e-03f,
--9.254363231e-03f, -9.248316585e-03f, -9.242254274e-03f, -9.236176310e-03f, -9.230082704e-03f, -9.223973467e-03f, -9.217848611e-03f, -9.211708147e-03f, -9.205552087e-03f, -9.199380441e-03f,
--9.193193222e-03f, -9.186990441e-03f, -9.180772110e-03f, -9.174538239e-03f, -9.168288841e-03f, -9.162023928e-03f, -9.155743510e-03f, -9.149447600e-03f, -9.143136209e-03f, -9.136809349e-03f,
--9.130467031e-03f, -9.124109268e-03f, -9.117736072e-03f, -9.111347453e-03f, -9.104943424e-03f, -9.098523997e-03f, -9.092089183e-03f, -9.085638995e-03f, -9.079173445e-03f, -9.072692544e-03f,
--9.066196304e-03f, -9.059684738e-03f, -9.053157858e-03f, -9.046615675e-03f, -9.040058202e-03f, -9.033485450e-03f, -9.026897433e-03f, -9.020294162e-03f, -9.013675649e-03f, -9.007041907e-03f,
--9.000392948e-03f, -8.993728784e-03f, -8.987049427e-03f, -8.980354890e-03f, -8.973645185e-03f, -8.966920325e-03f, -8.960180322e-03f, -8.953425188e-03f, -8.946654936e-03f, -8.939869578e-03f,
--8.933069127e-03f, -8.926253595e-03f, -8.919422996e-03f, -8.912577341e-03f, -8.905716642e-03f, -8.898840914e-03f, -8.891950168e-03f, -8.885044418e-03f, -8.878123675e-03f, -8.871187952e-03f,
--8.864237263e-03f, -8.857271620e-03f, -8.850291036e-03f, -8.843295524e-03f, -8.836285096e-03f, -8.829259766e-03f, -8.822219547e-03f, -8.815164450e-03f, -8.808094490e-03f, -8.801009680e-03f,
--8.793910031e-03f, -8.786795558e-03f, -8.779666274e-03f, -8.772522191e-03f, -8.765363323e-03f, -8.758189682e-03f, -8.751001283e-03f, -8.743798138e-03f, -8.736580260e-03f, -8.729347662e-03f,
--8.722100359e-03f, -8.714838362e-03f, -8.707561686e-03f, -8.700270344e-03f, -8.692964349e-03f, -8.685643715e-03f, -8.678308454e-03f, -8.670958581e-03f, -8.663594109e-03f, -8.656215051e-03f,
--8.648821421e-03f, -8.641413232e-03f, -8.633990498e-03f, -8.626553233e-03f, -8.619101450e-03f, -8.611635163e-03f, -8.604154385e-03f, -8.596659130e-03f, -8.589149412e-03f, -8.581625244e-03f,
--8.574086641e-03f, -8.566533616e-03f, -8.558966182e-03f, -8.551384355e-03f, -8.543788147e-03f, -8.536177572e-03f, -8.528552644e-03f, -8.520913378e-03f, -8.513259787e-03f, -8.505591885e-03f,
--8.497909686e-03f, -8.490213205e-03f, -8.482502454e-03f, -8.474777449e-03f, -8.467038203e-03f, -8.459284731e-03f, -8.451517046e-03f, -8.443735163e-03f, -8.435939096e-03f, -8.428128859e-03f,
--8.420304466e-03f, -8.412465933e-03f, -8.404613271e-03f, -8.396746498e-03f, -8.388865625e-03f, -8.380970669e-03f, -8.373061643e-03f, -8.365138562e-03f, -8.357201439e-03f, -8.349250290e-03f,
--8.341285130e-03f, -8.333305971e-03f, -8.325312830e-03f, -8.317305720e-03f, -8.309284657e-03f, -8.301249654e-03f, -8.293200726e-03f, -8.285137888e-03f, -8.277061155e-03f, -8.268970541e-03f,
--8.260866061e-03f, -8.252747730e-03f, -8.244615562e-03f, -8.236469573e-03f, -8.228309776e-03f, -8.220136187e-03f, -8.211948821e-03f, -8.203747693e-03f, -8.195532817e-03f, -8.187304208e-03f,
--8.179061881e-03f, -8.170805852e-03f, -8.162536135e-03f, -8.154252745e-03f, -8.145955697e-03f, -8.137645006e-03f, -8.129320688e-03f, -8.120982757e-03f, -8.112631229e-03f, -8.104266118e-03f,
--8.095887441e-03f, -8.087495211e-03f, -8.079089444e-03f, -8.070670156e-03f, -8.062237362e-03f, -8.053791076e-03f, -8.045331315e-03f, -8.036858094e-03f, -8.028371427e-03f, -8.019871330e-03f,
--8.011357820e-03f, -8.002830910e-03f, -7.994290617e-03f, -7.985736956e-03f, -7.977169942e-03f, -7.968589591e-03f, -7.959995919e-03f, -7.951388940e-03f, -7.942768671e-03f, -7.934135128e-03f,
--7.925488325e-03f, -7.916828278e-03f, -7.908155003e-03f, -7.899468516e-03f, -7.890768833e-03f, -7.882055969e-03f, -7.873329939e-03f, -7.864590760e-03f, -7.855838448e-03f, -7.847073017e-03f,
--7.838294485e-03f, -7.829502867e-03f, -7.820698178e-03f, -7.811880435e-03f, -7.803049653e-03f, -7.794205849e-03f, -7.785349039e-03f, -7.776479238e-03f, -7.767596462e-03f, -7.758700728e-03f,
--7.749792051e-03f, -7.740870448e-03f, -7.731935934e-03f, -7.722988527e-03f, -7.714028241e-03f, -7.705055093e-03f, -7.696069099e-03f, -7.687070276e-03f, -7.678058639e-03f, -7.669034206e-03f,
--7.659996991e-03f, -7.650947012e-03f, -7.641884284e-03f, -7.632808825e-03f, -7.623720649e-03f, -7.614619775e-03f, -7.605506218e-03f, -7.596379994e-03f, -7.587241120e-03f, -7.578089612e-03f,
--7.568925488e-03f, -7.559748762e-03f, -7.550559453e-03f, -7.541357576e-03f, -7.532143148e-03f, -7.522916185e-03f, -7.513676704e-03f, -7.504424723e-03f, -7.495160256e-03f, -7.485883322e-03f,
--7.476593936e-03f, -7.467292116e-03f, -7.457977877e-03f, -7.448651238e-03f, -7.439312214e-03f, -7.429960823e-03f, -7.420597080e-03f, -7.411221004e-03f, -7.401832611e-03f, -7.392431917e-03f,
--7.383018940e-03f, -7.373593696e-03f, -7.364156203e-03f, -7.354706477e-03f, -7.345244536e-03f, -7.335770395e-03f, -7.326284073e-03f, -7.316785587e-03f, -7.307274953e-03f, -7.297752188e-03f,
--7.288217309e-03f, -7.278670335e-03f, -7.269111281e-03f, -7.259540165e-03f, -7.249957004e-03f, -7.240361815e-03f, -7.230754616e-03f, -7.221135423e-03f, -7.211504254e-03f, -7.201861127e-03f,
--7.192206058e-03f, -7.182539064e-03f, -7.172860164e-03f, -7.163169374e-03f, -7.153466712e-03f, -7.143752195e-03f, -7.134025841e-03f, -7.124287667e-03f, -7.114537690e-03f, -7.104775928e-03f,
--7.095002398e-03f, -7.085217118e-03f, -7.075420106e-03f, -7.065611378e-03f, -7.055790953e-03f, -7.045958848e-03f, -7.036115081e-03f, -7.026259668e-03f, -7.016392629e-03f, -7.006513980e-03f,
--6.996623740e-03f, -6.986721925e-03f, -6.976808554e-03f, -6.966883645e-03f, -6.956947214e-03f, -6.946999280e-03f, -6.937039861e-03f, -6.927068975e-03f, -6.917086638e-03f, -6.907092870e-03f,
--6.897087688e-03f, -6.887071109e-03f, -6.877043153e-03f, -6.867003836e-03f, -6.856953176e-03f, -6.846891192e-03f, -6.836817902e-03f, -6.826733323e-03f, -6.816637474e-03f, -6.806530372e-03f,
--6.796412036e-03f, -6.786282484e-03f, -6.776141733e-03f, -6.765989802e-03f, -6.755826709e-03f, -6.745652473e-03f, -6.735467110e-03f, -6.725270640e-03f, -6.715063081e-03f, -6.704844450e-03f,
--6.694614767e-03f, -6.684374049e-03f, -6.674122314e-03f, -6.663859582e-03f, -6.653585869e-03f, -6.643301196e-03f, -6.633005579e-03f, -6.622699037e-03f, -6.612381589e-03f, -6.602053253e-03f,
--6.591714047e-03f, -6.581363990e-03f, -6.571003100e-03f, -6.560631396e-03f, -6.550248896e-03f, -6.539855619e-03f, -6.529451583e-03f, -6.519036807e-03f, -6.508611309e-03f, -6.498175108e-03f,
--6.487728223e-03f, -6.477270672e-03f, -6.466802473e-03f, -6.456323646e-03f, -6.445834208e-03f, -6.435334180e-03f, -6.424823578e-03f, -6.414302423e-03f, -6.403770733e-03f, -6.393228526e-03f,
--6.382675821e-03f, -6.372112638e-03f, -6.361538994e-03f, -6.350954909e-03f, -6.340360402e-03f, -6.329755490e-03f, -6.319140195e-03f, -6.308514533e-03f, -6.297878524e-03f, -6.287232187e-03f,
--6.276575541e-03f, -6.265908605e-03f, -6.255231397e-03f, -6.244543938e-03f, -6.233846245e-03f, -6.223138337e-03f, -6.212420235e-03f, -6.201691956e-03f, -6.190953520e-03f, -6.180204947e-03f,
--6.169446254e-03f, -6.158677461e-03f, -6.147898588e-03f, -6.137109653e-03f, -6.126310676e-03f, -6.115501676e-03f, -6.104682672e-03f, -6.093853682e-03f, -6.083014728e-03f, -6.072165827e-03f,
--6.061306999e-03f, -6.050438263e-03f, -6.039559638e-03f, -6.028671145e-03f, -6.017772802e-03f, -6.006864628e-03f, -5.995946643e-03f, -5.985018866e-03f, -5.974081317e-03f, -5.963134014e-03f,
--5.952176979e-03f, -5.941210229e-03f, -5.930233784e-03f, -5.919247664e-03f, -5.908251889e-03f, -5.897246477e-03f, -5.886231449e-03f, -5.875206823e-03f, -5.864172620e-03f, -5.853128858e-03f,
--5.842075559e-03f, -5.831012740e-03f, -5.819940422e-03f, -5.808858624e-03f, -5.797767366e-03f, -5.786666668e-03f, -5.775556549e-03f, -5.764437029e-03f, -5.753308128e-03f, -5.742169865e-03f,
--5.731022261e-03f, -5.719865334e-03f, -5.708699104e-03f, -5.697523593e-03f, -5.686338818e-03f, -5.675144800e-03f, -5.663941559e-03f, -5.652729115e-03f, -5.641507488e-03f, -5.630276696e-03f,
--5.619036761e-03f, -5.607787702e-03f, -5.596529539e-03f, -5.585262292e-03f, -5.573985981e-03f, -5.562700626e-03f, -5.551406247e-03f, -5.540102863e-03f, -5.528790495e-03f, -5.517469164e-03f,
--5.506138887e-03f, -5.494799687e-03f, -5.483451583e-03f, -5.472094595e-03f, -5.460728743e-03f, -5.449354047e-03f, -5.437970527e-03f, -5.426578204e-03f, -5.415177097e-03f, -5.403767227e-03f,
--5.392348614e-03f, -5.380921278e-03f, -5.369485239e-03f, -5.358040518e-03f, -5.346587134e-03f, -5.335125109e-03f, -5.323654461e-03f, -5.312175212e-03f, -5.300687382e-03f, -5.289190991e-03f,
--5.277686059e-03f, -5.266172607e-03f, -5.254650654e-03f, -5.243120222e-03f, -5.231581331e-03f, -5.220034001e-03f, -5.208478252e-03f, -5.196914105e-03f, -5.185341581e-03f, -5.173760699e-03f,
--5.162171480e-03f, -5.150573945e-03f, -5.138968114e-03f, -5.127354008e-03f, -5.115731646e-03f, -5.104101050e-03f, -5.092462241e-03f, -5.080815237e-03f, -5.069160061e-03f, -5.057496733e-03f,
--5.045825273e-03f, -5.034145702e-03f, -5.022458041e-03f, -5.010762309e-03f, -4.999058528e-03f, -4.987346719e-03f, -4.975626901e-03f, -4.963899097e-03f, -4.952163325e-03f, -4.940419608e-03f,
--4.928667965e-03f, -4.916908418e-03f, -4.905140987e-03f, -4.893365693e-03f, -4.881582557e-03f, -4.869791599e-03f, -4.857992841e-03f, -4.846186302e-03f, -4.834372004e-03f, -4.822549968e-03f,
--4.810720214e-03f, -4.798882764e-03f, -4.787037638e-03f, -4.775184856e-03f, -4.763324441e-03f, -4.751456412e-03f, -4.739580792e-03f, -4.727697599e-03f, -4.715806856e-03f, -4.703908584e-03f,
--4.692002803e-03f, -4.680089534e-03f, -4.668168799e-03f, -4.656240618e-03f, -4.644305012e-03f, -4.632362003e-03f, -4.620411611e-03f, -4.608453857e-03f, -4.596488763e-03f, -4.584516349e-03f,
--4.572536636e-03f, -4.560549646e-03f, -4.548555400e-03f, -4.536553919e-03f, -4.524545223e-03f, -4.512529335e-03f, -4.500506275e-03f, -4.488476064e-03f, -4.476438723e-03f, -4.464394274e-03f,
--4.452342738e-03f, -4.440284136e-03f, -4.428218489e-03f, -4.416145818e-03f, -4.404066145e-03f, -4.391979491e-03f, -4.379885876e-03f, -4.367785324e-03f, -4.355677853e-03f, -4.343563487e-03f,
--4.331442246e-03f, -4.319314151e-03f, -4.307179224e-03f, -4.295037487e-03f, -4.282888959e-03f, -4.270733664e-03f, -4.258571621e-03f, -4.246402853e-03f, -4.234227381e-03f, -4.222045226e-03f,
--4.209856410e-03f, -4.197660954e-03f, -4.185458879e-03f, -4.173250207e-03f, -4.161034960e-03f, -4.148813158e-03f, -4.136584823e-03f, -4.124349977e-03f, -4.112108641e-03f, -4.099860837e-03f,
--4.087606586e-03f, -4.075345910e-03f, -4.063078830e-03f, -4.050805367e-03f, -4.038525544e-03f, -4.026239382e-03f, -4.013946901e-03f, -4.001648125e-03f, -3.989343074e-03f, -3.977031770e-03f,
--3.964714235e-03f, -3.952390490e-03f, -3.940060557e-03f, -3.927724458e-03f, -3.915382213e-03f, -3.903033846e-03f, -3.890679376e-03f, -3.878318827e-03f, -3.865952220e-03f, -3.853579576e-03f,
--3.841200917e-03f, -3.828816265e-03f, -3.816425641e-03f, -3.804029068e-03f, -3.791626566e-03f, -3.779218159e-03f, -3.766803866e-03f, -3.754383711e-03f, -3.741957715e-03f, -3.729525900e-03f,
--3.717088287e-03f, -3.704644898e-03f, -3.692195756e-03f, -3.679740881e-03f, -3.667280296e-03f, -3.654814023e-03f, -3.642342083e-03f, -3.629864498e-03f, -3.617381290e-03f, -3.604892482e-03f,
--3.592398093e-03f, -3.579898148e-03f, -3.567392667e-03f, -3.554881673e-03f, -3.542365187e-03f, -3.529843231e-03f, -3.517315828e-03f, -3.504782998e-03f, -3.492244765e-03f, -3.479701149e-03f,
--3.467152173e-03f, -3.454597860e-03f, -3.442038230e-03f, -3.429473306e-03f, -3.416903110e-03f, -3.404327663e-03f, -3.391746988e-03f, -3.379161108e-03f, -3.366570042e-03f, -3.353973815e-03f,
--3.341372448e-03f, -3.328765962e-03f, -3.316154381e-03f, -3.303537725e-03f, -3.290916018e-03f, -3.278289281e-03f, -3.265657536e-03f, -3.253020805e-03f, -3.240379110e-03f, -3.227732474e-03f,
--3.215080919e-03f, -3.202424466e-03f, -3.189763138e-03f, -3.177096957e-03f, -3.164425946e-03f, -3.151750125e-03f, -3.139069518e-03f, -3.126384146e-03f, -3.113694032e-03f, -3.100999198e-03f,
--3.088299665e-03f, -3.075595457e-03f, -3.062886596e-03f, -3.050173103e-03f, -3.037455001e-03f, -3.024732312e-03f, -3.012005058e-03f, -2.999273261e-03f, -2.986536945e-03f, -2.973796130e-03f,
--2.961050839e-03f, -2.948301095e-03f, -2.935546920e-03f, -2.922788335e-03f, -2.910025364e-03f, -2.897258028e-03f, -2.884486350e-03f, -2.871710352e-03f, -2.858930057e-03f, -2.846145486e-03f,
--2.833356662e-03f, -2.820563608e-03f, -2.807766345e-03f, -2.794964896e-03f, -2.782159283e-03f, -2.769349529e-03f, -2.756535656e-03f, -2.743717686e-03f, -2.730895642e-03f, -2.718069546e-03f,
--2.705239421e-03f, -2.692405288e-03f, -2.679567170e-03f, -2.666725090e-03f, -2.653879070e-03f, -2.641029132e-03f, -2.628175299e-03f, -2.615317593e-03f, -2.602456037e-03f, -2.589590652e-03f,
--2.576721462e-03f, -2.563848489e-03f, -2.550971756e-03f, -2.538091284e-03f, -2.525207096e-03f, -2.512319214e-03f, -2.499427662e-03f, -2.486532462e-03f, -2.473633635e-03f, -2.460731205e-03f,
--2.447825194e-03f, -2.434915624e-03f, -2.422002518e-03f, -2.409085899e-03f, -2.396165788e-03f, -2.383242209e-03f, -2.370315184e-03f, -2.357384735e-03f, -2.344450886e-03f, -2.331513658e-03f,
--2.318573073e-03f, -2.305629156e-03f, -2.292681927e-03f, -2.279731410e-03f, -2.266777627e-03f, -2.253820601e-03f, -2.240860354e-03f, -2.227896909e-03f, -2.214930289e-03f, -2.201960515e-03f,
--2.188987611e-03f, -2.176011599e-03f, -2.163032501e-03f, -2.150050341e-03f, -2.137065141e-03f, -2.124076923e-03f, -2.111085710e-03f, -2.098091525e-03f, -2.085094390e-03f, -2.072094328e-03f,
--2.059091361e-03f, -2.046085513e-03f, -2.033076805e-03f, -2.020065260e-03f, -2.007050901e-03f, -1.994033751e-03f, -1.981013832e-03f, -1.967991167e-03f, -1.954965779e-03f, -1.941937689e-03f,
--1.928906921e-03f, -1.915873498e-03f, -1.902837442e-03f, -1.889798775e-03f, -1.876757521e-03f, -1.863713702e-03f, -1.850667341e-03f, -1.837618460e-03f, -1.824567082e-03f, -1.811513230e-03f,
--1.798456926e-03f, -1.785398194e-03f, -1.772337055e-03f, -1.759273533e-03f, -1.746207649e-03f, -1.733139428e-03f, -1.720068892e-03f, -1.706996062e-03f, -1.693920963e-03f, -1.680843616e-03f,
--1.667764045e-03f, -1.654682272e-03f, -1.641598319e-03f, -1.628512211e-03f, -1.615423968e-03f, -1.602333614e-03f, -1.589241173e-03f, -1.576146665e-03f, -1.563050115e-03f, -1.549951545e-03f,
--1.536850977e-03f, -1.523748434e-03f, -1.510643940e-03f, -1.497537517e-03f, -1.484429187e-03f, -1.471318973e-03f, -1.458206899e-03f, -1.445092986e-03f, -1.431977258e-03f, -1.418859738e-03f,
--1.405740447e-03f, -1.392619410e-03f, -1.379496647e-03f, -1.366372184e-03f, -1.353246041e-03f, -1.340118242e-03f, -1.326988810e-03f, -1.313857768e-03f, -1.300725137e-03f, -1.287590942e-03f,
--1.274455204e-03f, -1.261317947e-03f, -1.248179193e-03f, -1.235038965e-03f, -1.221897286e-03f, -1.208754179e-03f, -1.195609666e-03f, -1.182463770e-03f, -1.169316514e-03f, -1.156167921e-03f,
--1.143018014e-03f, -1.129866814e-03f, -1.116714346e-03f, -1.103560632e-03f, -1.090405694e-03f, -1.077249556e-03f, -1.064092241e-03f, -1.050933770e-03f, -1.037774167e-03f, -1.024613455e-03f,
--1.011451656e-03f, -9.982887935e-04f, -9.851248900e-04f, -9.719599683e-04f, -9.587940513e-04f, -9.456271616e-04f, -9.324593222e-04f, -9.192905558e-04f, -9.061208852e-04f, -8.929503332e-04f,
--8.797789227e-04f, -8.666066764e-04f, -8.534336170e-04f, -8.402597675e-04f, -8.270851506e-04f, -8.139097891e-04f, -8.007337059e-04f, -7.875569236e-04f, -7.743794652e-04f, -7.612013534e-04f,
--7.480226110e-04f, -7.348432608e-04f, -7.216633257e-04f, -7.084828283e-04f, -6.953017916e-04f, -6.821202383e-04f, -6.689381913e-04f, -6.557556732e-04f, -6.425727070e-04f, -6.293893154e-04f,
--6.162055211e-04f, -6.030213471e-04f, -5.898368162e-04f, -5.766519510e-04f, -5.634667744e-04f, -5.502813092e-04f, -5.370955782e-04f, -5.239096042e-04f, -5.107234099e-04f, -4.975370182e-04f,
--4.843504519e-04f, -4.711637338e-04f, -4.579768865e-04f, -4.447899330e-04f, -4.316028960e-04f, -4.184157984e-04f, -4.052286628e-04f, -3.920415120e-04f, -3.788543690e-04f, -3.656672563e-04f,
--3.524801969e-04f, -3.392932135e-04f, -3.261063288e-04f, -3.129195657e-04f, -2.997329469e-04f, -2.865464953e-04f, -2.733602334e-04f, -2.601741843e-04f, -2.469883705e-04f, -2.338028150e-04f,
--2.206175403e-04f, -2.074325694e-04f, -1.942479250e-04f, -1.810636298e-04f, -1.678797066e-04f, -1.546961781e-04f, -1.415130672e-04f, -1.283303965e-04f, -1.151481888e-04f, -1.019664669e-04f,
--8.878525346e-05f, -7.560457130e-05f, -6.242444314e-05f, -4.924489173e-05f, -3.606593979e-05f, -2.288761007e-05f, -9.709925301e-06f, 3.467091786e-06f, 1.664341846e-05f, 2.981903199e-05f,
-4.299390966e-05f, 5.616802873e-05f, 6.934136650e-05f, 8.251390023e-05f, 9.568560723e-05f, 1.088564648e-04f, 1.220264501e-04f, 1.351955406e-04f, 1.483637136e-04f, 1.615309462e-04f,
-1.746972159e-04f, 1.878624999e-04f, 2.010267755e-04f, 2.141900200e-04f, 2.273522109e-04f, 2.405133252e-04f, 2.536733405e-04f, 2.668322340e-04f, 2.799899830e-04f, 2.931465649e-04f,
-3.063019570e-04f, 3.194561366e-04f, 3.326090810e-04f, 3.457607677e-04f, 3.589111739e-04f, 3.720602771e-04f, 3.852080544e-04f, 3.983544834e-04f, 4.114995413e-04f, 4.246432056e-04f,
-4.377854535e-04f, 4.509262625e-04f, 4.640656100e-04f, 4.772034732e-04f, 4.903398296e-04f, 5.034746566e-04f, 5.166079316e-04f, 5.297396319e-04f, 5.428697349e-04f, 5.559982181e-04f,
-5.691250589e-04f, 5.822502346e-04f, 5.953737226e-04f, 6.084955005e-04f, 6.216155455e-04f, 6.347338351e-04f, 6.478503468e-04f, 6.609650580e-04f, 6.740779461e-04f, 6.871889886e-04f,
-7.002981629e-04f, 7.134054464e-04f, 7.265108166e-04f, 7.396142510e-04f, 7.527157271e-04f, 7.658152222e-04f, 7.789127139e-04f, 7.920081796e-04f, 8.051015969e-04f, 8.181929432e-04f,
-8.312821959e-04f, 8.443693327e-04f, 8.574543310e-04f, 8.705371683e-04f, 8.836178221e-04f, 8.966962699e-04f, 9.097724893e-04f, 9.228464577e-04f, 9.359181527e-04f, 9.489875519e-04f,
-9.620546328e-04f, 9.751193729e-04f, 9.881817498e-04f, 1.001241741e-03f, 1.014299324e-03f, 1.027354477e-03f, 1.040407176e-03f, 1.053457400e-03f, 1.066505127e-03f, 1.079550333e-03f,
-1.092592996e-03f, 1.105633095e-03f, 1.118670606e-03f, 1.131705507e-03f, 1.144737776e-03f, 1.157767391e-03f, 1.170794328e-03f, 1.183818567e-03f, 1.196840083e-03f, 1.209858856e-03f,
-1.222874862e-03f, 1.235888079e-03f, 1.248898486e-03f, 1.261906059e-03f, 1.274910776e-03f, 1.287912615e-03f, 1.300911554e-03f, 1.313907570e-03f, 1.326900642e-03f, 1.339890746e-03f,
-1.352877860e-03f, 1.365861963e-03f, 1.378843032e-03f, 1.391821044e-03f, 1.404795977e-03f, 1.417767810e-03f, 1.430736520e-03f, 1.443702084e-03f, 1.456664481e-03f, 1.469623687e-03f,
-1.482579682e-03f, 1.495532443e-03f, 1.508481947e-03f, 1.521428172e-03f, 1.534371096e-03f, 1.547310698e-03f, 1.560246954e-03f, 1.573179842e-03f, 1.586109341e-03f, 1.599035429e-03f,
-1.611958082e-03f, 1.624877279e-03f, 1.637792999e-03f, 1.650705217e-03f, 1.663613914e-03f, 1.676519065e-03f, 1.689420650e-03f, 1.702318647e-03f, 1.715213032e-03f, 1.728103784e-03f,
-1.740990882e-03f, 1.753874302e-03f, 1.766754023e-03f, 1.779630023e-03f, 1.792502279e-03f, 1.805370770e-03f, 1.818235474e-03f, 1.831096368e-03f, 1.843953431e-03f, 1.856806640e-03f,
-1.869655974e-03f, 1.882501410e-03f, 1.895342927e-03f, 1.908180503e-03f, 1.921014115e-03f, 1.933843742e-03f, 1.946669361e-03f, 1.959490951e-03f, 1.972308490e-03f, 1.985121956e-03f,
-1.997931327e-03f, 2.010736580e-03f, 2.023537695e-03f, 2.036334649e-03f, 2.049127420e-03f, 2.061915987e-03f, 2.074700327e-03f, 2.087480419e-03f, 2.100256241e-03f, 2.113027771e-03f,
-2.125794986e-03f, 2.138557866e-03f, 2.151316389e-03f, 2.164070532e-03f, 2.176820274e-03f, 2.189565593e-03f, 2.202306468e-03f, 2.215042876e-03f, 2.227774795e-03f, 2.240502205e-03f,
-2.253225082e-03f, 2.265943406e-03f, 2.278657155e-03f, 2.291366307e-03f, 2.304070840e-03f, 2.316770733e-03f, 2.329465963e-03f, 2.342156510e-03f, 2.354842351e-03f, 2.367523465e-03f,
-2.380199830e-03f, 2.392871424e-03f, 2.405538227e-03f, 2.418200215e-03f, 2.430857369e-03f, 2.443509665e-03f, 2.456157082e-03f, 2.468799599e-03f, 2.481437195e-03f, 2.494069847e-03f,
-2.506697534e-03f, 2.519320235e-03f, 2.531937927e-03f, 2.544550590e-03f, 2.557158202e-03f, 2.569760741e-03f, 2.582358186e-03f, 2.594950515e-03f, 2.607537707e-03f, 2.620119741e-03f,
-2.632696594e-03f, 2.645268246e-03f, 2.657834675e-03f, 2.670395859e-03f, 2.682951777e-03f, 2.695502409e-03f, 2.708047731e-03f, 2.720587723e-03f, 2.733122364e-03f, 2.745651632e-03f,
-2.758175506e-03f, 2.770693964e-03f, 2.783206985e-03f, 2.795714548e-03f, 2.808216631e-03f, 2.820713214e-03f, 2.833204274e-03f, 2.845689791e-03f, 2.858169742e-03f, 2.870644108e-03f,
-2.883112867e-03f, 2.895575996e-03f, 2.908033477e-03f, 2.920485286e-03f, 2.932931402e-03f, 2.945371806e-03f, 2.957806474e-03f, 2.970235387e-03f, 2.982658523e-03f, 2.995075860e-03f,
-3.007487378e-03f, 3.019893056e-03f, 3.032292872e-03f, 3.044686805e-03f, 3.057074835e-03f, 3.069456939e-03f, 3.081833098e-03f, 3.094203289e-03f, 3.106567493e-03f, 3.118925687e-03f,
-3.131277851e-03f, 3.143623963e-03f, 3.155964003e-03f, 3.168297950e-03f, 3.180625783e-03f, 3.192947481e-03f, 3.205263022e-03f, 3.217572386e-03f, 3.229875552e-03f, 3.242172499e-03f,
-3.254463206e-03f, 3.266747652e-03f, 3.279025816e-03f, 3.291297677e-03f, 3.303563215e-03f, 3.315822409e-03f, 3.328075237e-03f, 3.340321679e-03f, 3.352561714e-03f, 3.364795322e-03f,
-3.377022481e-03f, 3.389243170e-03f, 3.401457370e-03f, 3.413665058e-03f, 3.425866215e-03f, 3.438060820e-03f, 3.450248851e-03f, 3.462430289e-03f, 3.474605112e-03f, 3.486773300e-03f,
-3.498934832e-03f, 3.511089687e-03f, 3.523237846e-03f, 3.535379286e-03f, 3.547513988e-03f, 3.559641931e-03f, 3.571763094e-03f, 3.583877457e-03f, 3.595984999e-03f, 3.608085700e-03f,
-3.620179538e-03f, 3.632266494e-03f, 3.644346548e-03f, 3.656419677e-03f, 3.668485863e-03f, 3.680545084e-03f, 3.692597320e-03f, 3.704642550e-03f, 3.716680755e-03f, 3.728711913e-03f,
-3.740736004e-03f, 3.752753009e-03f, 3.764762906e-03f, 3.776765674e-03f, 3.788761295e-03f, 3.800749747e-03f, 3.812731010e-03f, 3.824705063e-03f, 3.836671887e-03f, 3.848631461e-03f,
-3.860583765e-03f, 3.872528778e-03f, 3.884466481e-03f, 3.896396852e-03f, 3.908319872e-03f, 3.920235521e-03f, 3.932143778e-03f, 3.944044624e-03f, 3.955938037e-03f, 3.967823998e-03f,
-3.979702487e-03f, 3.991573483e-03f, 4.003436967e-03f, 4.015292918e-03f, 4.027141316e-03f, 4.038982142e-03f, 4.050815374e-03f, 4.062640994e-03f, 4.074458980e-03f, 4.086269314e-03f,
-4.098071974e-03f, 4.109866942e-03f, 4.121654196e-03f, 4.133433717e-03f, 4.145205486e-03f, 4.156969482e-03f, 4.168725685e-03f, 4.180474075e-03f, 4.192214632e-03f, 4.203947338e-03f,
-4.215672170e-03f, 4.227389111e-03f, 4.239098140e-03f, 4.250799237e-03f, 4.262492382e-03f, 4.274177556e-03f, 4.285854739e-03f, 4.297523910e-03f, 4.309185051e-03f, 4.320838142e-03f,
-4.332483163e-03f, 4.344120093e-03f, 4.355748914e-03f, 4.367369606e-03f, 4.378982150e-03f, 4.390586524e-03f, 4.402182711e-03f, 4.413770690e-03f, 4.425350441e-03f, 4.436921946e-03f,
-4.448485184e-03f, 4.460040136e-03f, 4.471586783e-03f, 4.483125105e-03f, 4.494655082e-03f, 4.506176695e-03f, 4.517689924e-03f, 4.529194751e-03f, 4.540691155e-03f, 4.552179117e-03f,
-4.563658618e-03f, 4.575129639e-03f, 4.586592159e-03f, 4.598046160e-03f, 4.609491623e-03f, 4.620928527e-03f, 4.632356854e-03f, 4.643776584e-03f, 4.655187698e-03f, 4.666590178e-03f,
-4.677984002e-03f, 4.689369153e-03f, 4.700745611e-03f, 4.712113357e-03f, 4.723472371e-03f, 4.734822636e-03f, 4.746164130e-03f, 4.757496836e-03f, 4.768820733e-03f, 4.780135804e-03f,
-4.791442029e-03f, 4.802739388e-03f, 4.814027863e-03f, 4.825307435e-03f, 4.836578085e-03f, 4.847839793e-03f, 4.859092541e-03f, 4.870336310e-03f, 4.881571080e-03f, 4.892796833e-03f,
-4.904013551e-03f, 4.915221213e-03f, 4.926419801e-03f, 4.937609296e-03f, 4.948789680e-03f, 4.959960934e-03f, 4.971123038e-03f, 4.982275973e-03f, 4.993419722e-03f, 5.004554266e-03f,
-5.015679584e-03f, 5.026795660e-03f, 5.037902474e-03f, 5.049000007e-03f, 5.060088240e-03f, 5.071167156e-03f, 5.082236735e-03f, 5.093296959e-03f, 5.104347808e-03f, 5.115389266e-03f,
-5.126421312e-03f, 5.137443928e-03f, 5.148457097e-03f, 5.159460798e-03f, 5.170455014e-03f, 5.181439727e-03f, 5.192414917e-03f, 5.203380566e-03f, 5.214336656e-03f, 5.225283168e-03f,
-5.236220085e-03f, 5.247147387e-03f, 5.258065056e-03f, 5.268973074e-03f, 5.279871422e-03f, 5.290760083e-03f, 5.301639037e-03f, 5.312508267e-03f, 5.323367754e-03f, 5.334217480e-03f,
-5.345057427e-03f, 5.355887577e-03f, 5.366707911e-03f, 5.377518411e-03f, 5.388319059e-03f, 5.399109836e-03f, 5.409890726e-03f, 5.420661709e-03f, 5.431422768e-03f, 5.442173884e-03f,
-5.452915039e-03f, 5.463646216e-03f, 5.474367396e-03f, 5.485078561e-03f, 5.495779694e-03f, 5.506470776e-03f, 5.517151789e-03f, 5.527822716e-03f, 5.538483538e-03f, 5.549134238e-03f,
-5.559774798e-03f, 5.570405200e-03f, 5.581025426e-03f, 5.591635458e-03f, 5.602235278e-03f, 5.612824870e-03f, 5.623404214e-03f, 5.633973293e-03f, 5.644532090e-03f, 5.655080586e-03f,
-5.665618765e-03f, 5.676146608e-03f, 5.686664097e-03f, 5.697171216e-03f, 5.707667946e-03f, 5.718154270e-03f, 5.728630171e-03f, 5.739095630e-03f, 5.749550630e-03f, 5.759995154e-03f,
-5.770429184e-03f, 5.780852703e-03f, 5.791265693e-03f, 5.801668136e-03f, 5.812060017e-03f, 5.822441316e-03f, 5.832812016e-03f, 5.843172101e-03f, 5.853521553e-03f, 5.863860354e-03f,
-5.874188487e-03f, 5.884505936e-03f, 5.894812682e-03f, 5.905108708e-03f, 5.915393998e-03f, 5.925668533e-03f, 5.935932297e-03f, 5.946185273e-03f, 5.956427444e-03f, 5.966658791e-03f,
-5.976879299e-03f, 5.987088950e-03f, 5.997287726e-03f, 6.007475612e-03f, 6.017652590e-03f, 6.027818642e-03f, 6.037973753e-03f, 6.048117904e-03f, 6.058251080e-03f, 6.068373262e-03f,
-6.078484434e-03f, 6.088584580e-03f, 6.098673682e-03f, 6.108751724e-03f, 6.118818688e-03f, 6.128874558e-03f, 6.138919317e-03f, 6.148952948e-03f, 6.158975434e-03f, 6.168986760e-03f,
-6.178986907e-03f, 6.188975860e-03f, 6.198953601e-03f, 6.208920115e-03f, 6.218875384e-03f, 6.228819391e-03f, 6.238752121e-03f, 6.248673556e-03f, 6.258583680e-03f, 6.268482477e-03f,
-6.278369929e-03f, 6.288246022e-03f, 6.298110737e-03f, 6.307964058e-03f, 6.317805970e-03f, 6.327636456e-03f, 6.337455498e-03f, 6.347263082e-03f, 6.357059190e-03f, 6.366843807e-03f,
-6.376616915e-03f, 6.386378499e-03f, 6.396128543e-03f, 6.405867029e-03f, 6.415593943e-03f, 6.425309267e-03f, 6.435012986e-03f, 6.444705083e-03f, 6.454385542e-03f, 6.464054348e-03f,
-6.473711483e-03f, 6.483356933e-03f, 6.492990680e-03f, 6.502612709e-03f, 6.512223004e-03f, 6.521821548e-03f, 6.531408327e-03f, 6.540983323e-03f, 6.550546521e-03f, 6.560097906e-03f,
-6.569637460e-03f, 6.579165169e-03f, 6.588681016e-03f, 6.598184986e-03f, 6.607677062e-03f, 6.617157230e-03f, 6.626625473e-03f, 6.636081775e-03f, 6.645526122e-03f, 6.654958496e-03f,
-6.664378883e-03f, 6.673787266e-03f, 6.683183631e-03f, 6.692567961e-03f, 6.701940241e-03f, 6.711300455e-03f, 6.720648589e-03f, 6.729984625e-03f, 6.739308549e-03f, 6.748620346e-03f,
-6.757920000e-03f, 6.767207495e-03f, 6.776482816e-03f, 6.785745947e-03f, 6.794996874e-03f, 6.804235581e-03f, 6.813462052e-03f, 6.822676272e-03f, 6.831878227e-03f, 6.841067900e-03f,
-6.850245276e-03f, 6.859410341e-03f, 6.868563079e-03f, 6.877703475e-03f, 6.886831513e-03f, 6.895947180e-03f, 6.905050458e-03f, 6.914141334e-03f, 6.923219792e-03f, 6.932285818e-03f,
-6.941339396e-03f, 6.950380511e-03f, 6.959409148e-03f, 6.968425293e-03f, 6.977428930e-03f, 6.986420045e-03f, 6.995398622e-03f, 7.004364647e-03f, 7.013318105e-03f, 7.022258982e-03f,
-7.031187261e-03f, 7.040102929e-03f, 7.049005971e-03f, 7.057896371e-03f, 7.066774117e-03f, 7.075639191e-03f, 7.084491581e-03f, 7.093331272e-03f, 7.102158248e-03f, 7.110972495e-03f,
-7.119773998e-03f, 7.128562744e-03f, 7.137338718e-03f, 7.146101904e-03f, 7.154852289e-03f, 7.163589858e-03f, 7.172314597e-03f, 7.181026490e-03f, 7.189725525e-03f, 7.198411687e-03f,
-7.207084960e-03f, 7.215745331e-03f, 7.224392786e-03f, 7.233027310e-03f, 7.241648890e-03f, 7.250257510e-03f, 7.258853156e-03f, 7.267435815e-03f, 7.276005473e-03f, 7.284562114e-03f,
-7.293105726e-03f, 7.301636293e-03f, 7.310153803e-03f, 7.318658240e-03f, 7.327149591e-03f, 7.335627842e-03f, 7.344092978e-03f, 7.352544987e-03f, 7.360983854e-03f, 7.369409564e-03f,
-7.377822105e-03f, 7.386221463e-03f, 7.394607623e-03f, 7.402980571e-03f, 7.411340295e-03f, 7.419686780e-03f, 7.428020012e-03f, 7.436339978e-03f, 7.444646664e-03f, 7.452940056e-03f,
-7.461220142e-03f, 7.469486906e-03f, 7.477740336e-03f, 7.485980418e-03f, 7.494207138e-03f, 7.502420483e-03f, 7.510620440e-03f, 7.518806995e-03f, 7.526980134e-03f, 7.535139844e-03f,
-7.543286112e-03f, 7.551418924e-03f, 7.559538267e-03f, 7.567644128e-03f, 7.575736493e-03f, 7.583815349e-03f, 7.591880683e-03f, 7.599932481e-03f, 7.607970731e-03f, 7.615995419e-03f,
-7.624006531e-03f, 7.632004056e-03f, 7.639987979e-03f, 7.647958288e-03f, 7.655914969e-03f, 7.663858010e-03f, 7.671787398e-03f, 7.679703119e-03f, 7.687605160e-03f, 7.695493510e-03f,
-7.703368153e-03f, 7.711229079e-03f, 7.719076273e-03f, 7.726909724e-03f, 7.734729418e-03f, 7.742535342e-03f, 7.750327484e-03f, 7.758105831e-03f, 7.765870370e-03f, 7.773621088e-03f,
-7.781357974e-03f, 7.789081013e-03f, 7.796790194e-03f, 7.804485505e-03f, 7.812166931e-03f, 7.819834461e-03f, 7.827488083e-03f, 7.835127783e-03f, 7.842753549e-03f, 7.850365370e-03f,
-7.857963232e-03f, 7.865547123e-03f, 7.873117030e-03f, 7.880672942e-03f, 7.888214846e-03f, 7.895742729e-03f, 7.903256580e-03f, 7.910756386e-03f, 7.918242135e-03f, 7.925713814e-03f,
-7.933171412e-03f, 7.940614916e-03f, 7.948044315e-03f, 7.955459595e-03f, 7.962860746e-03f, 7.970247755e-03f, 7.977620609e-03f, 7.984979298e-03f, 7.992323808e-03f, 7.999654129e-03f,
-8.006970247e-03f, 8.014272152e-03f, 8.021559831e-03f, 8.028833272e-03f, 8.036092464e-03f, 8.043337395e-03f, 8.050568053e-03f, 8.057784426e-03f, 8.064986502e-03f, 8.072174271e-03f,
-8.079347719e-03f, 8.086506837e-03f, 8.093651610e-03f, 8.100782030e-03f, 8.107898083e-03f, 8.114999758e-03f, 8.122087043e-03f, 8.129159928e-03f, 8.136218401e-03f, 8.143262449e-03f,
-8.150292063e-03f, 8.157307230e-03f, 8.164307938e-03f, 8.171294178e-03f, 8.178265937e-03f, 8.185223204e-03f, 8.192165967e-03f, 8.199094216e-03f, 8.206007940e-03f, 8.212907126e-03f,
-8.219791765e-03f, 8.226661844e-03f, 8.233517353e-03f, 8.240358281e-03f, 8.247184616e-03f, 8.253996348e-03f, 8.260793465e-03f, 8.267575956e-03f, 8.274343811e-03f, 8.281097019e-03f,
-8.287835569e-03f, 8.294559449e-03f, 8.301268649e-03f, 8.307963158e-03f, 8.314642966e-03f, 8.321308061e-03f, 8.327958433e-03f, 8.334594071e-03f, 8.341214964e-03f, 8.347821102e-03f,
-8.354412474e-03f, 8.360989070e-03f, 8.367550878e-03f, 8.374097888e-03f, 8.380630090e-03f, 8.387147473e-03f, 8.393650027e-03f, 8.400137741e-03f, 8.406610605e-03f, 8.413068609e-03f,
-8.419511741e-03f, 8.425939991e-03f, 8.432353351e-03f, 8.438751807e-03f, 8.445135352e-03f, 8.451503974e-03f, 8.457857663e-03f, 8.464196410e-03f, 8.470520203e-03f, 8.476829032e-03f,
-8.483122888e-03f, 8.489401761e-03f, 8.495665640e-03f, 8.501914515e-03f, 8.508148376e-03f, 8.514367214e-03f, 8.520571018e-03f, 8.526759779e-03f, 8.532933486e-03f, 8.539092129e-03f,
-8.545235699e-03f, 8.551364186e-03f, 8.557477580e-03f, 8.563575872e-03f, 8.569659051e-03f, 8.575727108e-03f, 8.581780032e-03f, 8.587817816e-03f, 8.593840448e-03f, 8.599847919e-03f,
-8.605840220e-03f, 8.611817341e-03f, 8.617779272e-03f, 8.623726004e-03f, 8.629657528e-03f, 8.635573833e-03f, 8.641474912e-03f, 8.647360753e-03f, 8.653231348e-03f, 8.659086687e-03f,
-8.664926762e-03f, 8.670751562e-03f, 8.676561079e-03f, 8.682355304e-03f, 8.688134226e-03f, 8.693897837e-03f, 8.699646128e-03f, 8.705379089e-03f, 8.711096712e-03f, 8.716798987e-03f,
-8.722485905e-03f, 8.728157458e-03f, 8.733813636e-03f, 8.739454430e-03f, 8.745079832e-03f, 8.750689832e-03f, 8.756284421e-03f, 8.761863591e-03f, 8.767427333e-03f, 8.772975638e-03f,
-8.778508497e-03f, 8.784025902e-03f, 8.789527843e-03f, 8.795014312e-03f, 8.800485301e-03f, 8.805940800e-03f, 8.811380801e-03f, 8.816805296e-03f, 8.822214275e-03f, 8.827607731e-03f,
-8.832985655e-03f, 8.838348038e-03f, 8.843694872e-03f, 8.849026149e-03f, 8.854341859e-03f, 8.859641995e-03f, 8.864926549e-03f, 8.870195511e-03f, 8.875448874e-03f, 8.880686630e-03f,
-8.885908769e-03f, 8.891115285e-03f, 8.896306168e-03f, 8.901481411e-03f, 8.906641006e-03f, 8.911784943e-03f, 8.916913216e-03f, 8.922025817e-03f, 8.927122736e-03f, 8.932203967e-03f,
-8.937269501e-03f, 8.942319331e-03f, 8.947353447e-03f, 8.952371844e-03f, 8.957374512e-03f, 8.962361443e-03f, 8.967332631e-03f, 8.972288067e-03f, 8.977227744e-03f, 8.982151653e-03f,
-8.987059787e-03f, 8.991952139e-03f, 8.996828701e-03f, 9.001689465e-03f, 9.006534423e-03f, 9.011363569e-03f, 9.016176894e-03f, 9.020974391e-03f, 9.025756052e-03f, 9.030521871e-03f,
-9.035271839e-03f, 9.040005950e-03f, 9.044724196e-03f, 9.049426569e-03f, 9.054113063e-03f, 9.058783669e-03f, 9.063438382e-03f, 9.068077193e-03f, 9.072700095e-03f, 9.077307082e-03f,
-9.081898146e-03f, 9.086473279e-03f, 9.091032476e-03f, 9.095575728e-03f, 9.100103029e-03f, 9.104614372e-03f, 9.109109750e-03f, 9.113589156e-03f, 9.118052583e-03f, 9.122500024e-03f,
-9.126931472e-03f, 9.131346920e-03f, 9.135746362e-03f, 9.140129791e-03f, 9.144497201e-03f, 9.148848583e-03f, 9.153183932e-03f, 9.157503241e-03f, 9.161806504e-03f, 9.166093713e-03f,
-9.170364863e-03f, 9.174619946e-03f, 9.178858956e-03f, 9.183081887e-03f, 9.187288733e-03f, 9.191479486e-03f, 9.195654140e-03f, 9.199812689e-03f, 9.203955127e-03f, 9.208081447e-03f,
-9.212191643e-03f, 9.216285709e-03f, 9.220363638e-03f, 9.224425425e-03f, 9.228471063e-03f, 9.232500545e-03f, 9.236513867e-03f, 9.240511021e-03f, 9.244492001e-03f, 9.248456803e-03f,
-9.252405419e-03f, 9.256337843e-03f, 9.260254070e-03f, 9.264154094e-03f, 9.268037909e-03f, 9.271905508e-03f, 9.275756887e-03f, 9.279592039e-03f, 9.283410958e-03f, 9.287213639e-03f,
-9.291000077e-03f, 9.294770264e-03f, 9.298524196e-03f, 9.302261867e-03f, 9.305983271e-03f, 9.309688404e-03f, 9.313377258e-03f, 9.317049829e-03f, 9.320706111e-03f, 9.324346099e-03f,
-9.327969787e-03f, 9.331577170e-03f, 9.335168242e-03f, 9.338742999e-03f, 9.342301434e-03f, 9.345843543e-03f, 9.349369320e-03f, 9.352878759e-03f, 9.356371857e-03f, 9.359848607e-03f,
-9.363309004e-03f, 9.366753044e-03f, 9.370180720e-03f, 9.373592029e-03f, 9.376986964e-03f, 9.380365522e-03f, 9.383727697e-03f, 9.387073483e-03f, 9.390402877e-03f, 9.393715873e-03f,
-9.397012466e-03f, 9.400292651e-03f, 9.403556424e-03f, 9.406803780e-03f, 9.410034714e-03f, 9.413249222e-03f, 9.416447298e-03f, 9.419628938e-03f, 9.422794137e-03f, 9.425942891e-03f,
-9.429075195e-03f, 9.432191045e-03f, 9.435290436e-03f, 9.438373363e-03f, 9.441439822e-03f, 9.444489809e-03f, 9.447523319e-03f, 9.450540347e-03f, 9.453540891e-03f, 9.456524944e-03f,
-9.459492503e-03f, 9.462443563e-03f, 9.465378121e-03f, 9.468296172e-03f, 9.471197711e-03f, 9.474082735e-03f, 9.476951240e-03f, 9.479803221e-03f, 9.482638675e-03f, 9.485457597e-03f,
-9.488259983e-03f, 9.491045830e-03f, 9.493815133e-03f, 9.496567888e-03f, 9.499304092e-03f, 9.502023741e-03f, 9.504726830e-03f, 9.507413357e-03f, 9.510083317e-03f, 9.512736706e-03f,
-9.515373521e-03f, 9.517993758e-03f, 9.520597413e-03f, 9.523184483e-03f, 9.525754964e-03f, 9.528308853e-03f, 9.530846145e-03f, 9.533366838e-03f, 9.535870928e-03f, 9.538358412e-03f,
-9.540829285e-03f, 9.543283545e-03f, 9.545721189e-03f, 9.548142212e-03f, 9.550546612e-03f, 9.552934385e-03f, 9.555305528e-03f, 9.557660038e-03f, 9.559997912e-03f, 9.562319145e-03f,
-9.564623737e-03f, 9.566911682e-03f, 9.569182978e-03f, 9.571437622e-03f, 9.573675611e-03f, 9.575896942e-03f, 9.578101612e-03f, 9.580289618e-03f, 9.582460957e-03f, 9.584615626e-03f,
-9.586753622e-03f, 9.588874943e-03f, 9.590979586e-03f, 9.593067547e-03f, 9.595138825e-03f, 9.597193416e-03f, 9.599231317e-03f, 9.601252527e-03f, 9.603257043e-03f, 9.605244861e-03f,
-9.607215979e-03f, 9.609170395e-03f, 9.611108107e-03f, 9.613029111e-03f, 9.614933406e-03f, 9.616820988e-03f, 9.618691856e-03f, 9.620546006e-03f, 9.622383438e-03f, 9.624204148e-03f,
-9.626008134e-03f, 9.627795394e-03f, 9.629565926e-03f, 9.631319727e-03f, 9.633056796e-03f, 9.634777130e-03f, 9.636480727e-03f, 9.638167584e-03f, 9.639837701e-03f, 9.641491075e-03f,
-9.643127704e-03f, 9.644747585e-03f, 9.646350718e-03f, 9.647937100e-03f, 9.649506729e-03f, 9.651059603e-03f, 9.652595721e-03f, 9.654115081e-03f, 9.655617681e-03f, 9.657103519e-03f,
-9.658572593e-03f, 9.660024903e-03f, 9.661460446e-03f, 9.662879221e-03f, 9.664281226e-03f, 9.665666459e-03f, 9.667034919e-03f, 9.668386605e-03f, 9.669721515e-03f, 9.671039647e-03f,
-9.672341001e-03f, 9.673625574e-03f, 9.674893366e-03f, 9.676144375e-03f, 9.677378600e-03f, 9.678596039e-03f, 9.679796692e-03f, 9.680980557e-03f, 9.682147633e-03f, 9.683297918e-03f,
-9.684431412e-03f, 9.685548114e-03f, 9.686648023e-03f, 9.687731136e-03f, 9.688797455e-03f, 9.689846977e-03f, 9.690879701e-03f, 9.691895627e-03f, 9.692894754e-03f, 9.693877080e-03f,
-9.694842606e-03f, 9.695791330e-03f, 9.696723252e-03f, 9.697638370e-03f, 9.698536684e-03f, 9.699418194e-03f, 9.700282898e-03f, 9.701130797e-03f, 9.701961888e-03f, 9.702776173e-03f,
-9.703573650e-03f, 9.704354319e-03f, 9.705118180e-03f, 9.705865231e-03f, 9.706595473e-03f, 9.707308905e-03f, 9.708005526e-03f, 9.708685337e-03f, 9.709348337e-03f, 9.709994526e-03f,
-9.710623904e-03f, 9.711236470e-03f, 9.711832224e-03f, 9.712411166e-03f, 9.712973296e-03f, 9.713518613e-03f, 9.714047119e-03f, 9.714558812e-03f, 9.715053692e-03f, 9.715531760e-03f,
-9.715993016e-03f, 9.716437460e-03f, 9.716865091e-03f, 9.717275911e-03f, 9.717669919e-03f, 9.718047115e-03f, 9.718407499e-03f, 9.718751072e-03f, 9.719077835e-03f, 9.719387786e-03f,
-9.719680928e-03f, 9.719957259e-03f, 9.720216781e-03f, 9.720459494e-03f, 9.720685398e-03f, 9.720894494e-03f, 9.721086782e-03f, 9.721262263e-03f, 9.721420937e-03f, 9.721562805e-03f,
-9.721687868e-03f, 9.721796127e-03f, 9.721887581e-03f, 9.721962232e-03f, 9.722020080e-03f, 9.722061126e-03f, 9.722085371e-03f, 9.722092816e-03f, 9.722083462e-03f, 9.722057309e-03f,
-9.722014359e-03f, 9.721954612e-03f, 9.721878069e-03f, 9.721784732e-03f, 9.721674601e-03f, 9.721547677e-03f, 9.721403962e-03f, 9.721243457e-03f, 9.721066162e-03f, 9.720872080e-03f,
-9.720661210e-03f, 9.720433555e-03f, 9.720189115e-03f, 9.719927892e-03f, 9.719649888e-03f, 9.719355103e-03f, 9.719043539e-03f, 9.718715198e-03f, 9.718370080e-03f, 9.718008187e-03f,
-9.717629521e-03f, 9.717234084e-03f, 9.716821876e-03f, 9.716392900e-03f, 9.715947157e-03f, 9.715484648e-03f, 9.715005375e-03f, 9.714509341e-03f, 9.713996546e-03f, 9.713466993e-03f,
-9.712920683e-03f, 9.712357618e-03f, 9.711777800e-03f, 9.711181231e-03f, 9.710567912e-03f, 9.709937846e-03f, 9.709291034e-03f, 9.708627479e-03f, 9.707947182e-03f, 9.707250146e-03f,
-9.706536373e-03f, 9.705805864e-03f, 9.705058622e-03f, 9.704294649e-03f, 9.703513948e-03f, 9.702716519e-03f, 9.701902367e-03f, 9.701071492e-03f, 9.700223897e-03f, 9.699359585e-03f,
-9.698478558e-03f, 9.697580818e-03f, 9.696666368e-03f, 9.695735210e-03f, 9.694787346e-03f, 9.693822780e-03f, 9.692841513e-03f, 9.691843548e-03f, 9.690828888e-03f, 9.689797536e-03f,
-9.688749493e-03f, 9.687684764e-03f, 9.686603349e-03f, 9.685505253e-03f, 9.684390477e-03f, 9.683259026e-03f, 9.682110900e-03f, 9.680946104e-03f, 9.679764640e-03f, 9.678566512e-03f,
-9.677351721e-03f, 9.676120271e-03f, 9.674872166e-03f, 9.673607407e-03f, 9.672325998e-03f, 9.671027942e-03f, 9.669713243e-03f, 9.668381903e-03f, 9.667033925e-03f, 9.665669313e-03f,
-9.664288070e-03f, 9.662890199e-03f, 9.661475704e-03f, 9.660044587e-03f, 9.658596852e-03f, 9.657132503e-03f, 9.655651542e-03f, 9.654153974e-03f, 9.652639801e-03f, 9.651109027e-03f,
-9.649561656e-03f, 9.647997692e-03f, 9.646417136e-03f, 9.644819994e-03f, 9.643206269e-03f, 9.641575965e-03f, 9.639929085e-03f, 9.638265633e-03f, 9.636585612e-03f, 9.634889027e-03f,
-9.633175881e-03f, 9.631446177e-03f, 9.629699921e-03f, 9.627937116e-03f, 9.626157765e-03f, 9.624361872e-03f, 9.622549443e-03f, 9.620720479e-03f, 9.618874986e-03f, 9.617012968e-03f,
-9.615134428e-03f, 9.613239371e-03f, 9.611327801e-03f, 9.609399722e-03f, 9.607455138e-03f, 9.605494053e-03f, 9.603516472e-03f, 9.601522399e-03f, 9.599511838e-03f, 9.597484793e-03f,
-9.595441269e-03f, 9.593381271e-03f, 9.591304802e-03f, 9.589211867e-03f, 9.587102471e-03f, 9.584976618e-03f, 9.582834312e-03f, 9.580675559e-03f, 9.578500362e-03f, 9.576308726e-03f,
-9.574100657e-03f, 9.571876158e-03f, 9.569635234e-03f, 9.567377890e-03f, 9.565104131e-03f, 9.562813962e-03f, 9.560507387e-03f, 9.558184410e-03f, 9.555845038e-03f, 9.553489275e-03f,
-9.551117126e-03f, 9.548728595e-03f, 9.546323689e-03f, 9.543902410e-03f, 9.541464766e-03f, 9.539010760e-03f, 9.536540399e-03f, 9.534053686e-03f, 9.531550627e-03f, 9.529031228e-03f,
-9.526495493e-03f, 9.523943428e-03f, 9.521375038e-03f, 9.518790329e-03f, 9.516189304e-03f, 9.513571971e-03f, 9.510938334e-03f, 9.508288398e-03f, 9.505622170e-03f, 9.502939654e-03f,
-9.500240856e-03f, 9.497525782e-03f, 9.494794437e-03f, 9.492046826e-03f, 9.489282955e-03f, 9.486502830e-03f, 9.483706457e-03f, 9.480893841e-03f, 9.478064987e-03f, 9.475219902e-03f,
-9.472358591e-03f, 9.469481060e-03f, 9.466587315e-03f, 9.463677362e-03f, 9.460751206e-03f, 9.457808854e-03f, 9.454850311e-03f, 9.451875584e-03f, 9.448884677e-03f, 9.445877598e-03f,
-9.442854353e-03f, 9.439814946e-03f, 9.436759385e-03f, 9.433687676e-03f, 9.430599824e-03f, 9.427495836e-03f, 9.424375718e-03f, 9.421239477e-03f, 9.418087118e-03f, 9.414918648e-03f,
-9.411734073e-03f, 9.408533399e-03f, 9.405316633e-03f, 9.402083781e-03f, 9.398834850e-03f, 9.395569846e-03f, 9.392288776e-03f, 9.388991645e-03f, 9.385678461e-03f, 9.382349230e-03f,
-9.379003959e-03f, 9.375642654e-03f, 9.372265322e-03f, 9.368871970e-03f, 9.365462604e-03f, 9.362037230e-03f, 9.358595857e-03f, 9.355138490e-03f, 9.351665136e-03f, 9.348175802e-03f,
-9.344670495e-03f, 9.341149222e-03f, 9.337611990e-03f, 9.334058806e-03f, 9.330489676e-03f, 9.326904608e-03f, 9.323303608e-03f, 9.319686684e-03f, 9.316053843e-03f, 9.312405092e-03f,
-9.308740437e-03f, 9.305059887e-03f, 9.301363448e-03f, 9.297651128e-03f, 9.293922933e-03f, 9.290178871e-03f, 9.286418950e-03f, 9.282643176e-03f, 9.278851557e-03f, 9.275044100e-03f,
-9.271220813e-03f, 9.267381704e-03f, 9.263526778e-03f, 9.259656045e-03f, 9.255769512e-03f, 9.251867185e-03f, 9.247949073e-03f, 9.244015183e-03f, 9.240065523e-03f, 9.236100101e-03f,
-9.232118924e-03f, 9.228121999e-03f, 9.224109335e-03f, 9.220080939e-03f, 9.216036820e-03f, 9.211976984e-03f, 9.207901439e-03f, 9.203810195e-03f, 9.199703257e-03f, 9.195580635e-03f,
-9.191442337e-03f, 9.187288369e-03f, 9.183118740e-03f, 9.178933459e-03f, 9.174732533e-03f, 9.170515970e-03f, 9.166283779e-03f, 9.162035967e-03f, 9.157772542e-03f, 9.153493514e-03f,
-9.149198889e-03f, 9.144888677e-03f, 9.140562885e-03f, 9.136221522e-03f, 9.131864596e-03f, 9.127492115e-03f, 9.123104088e-03f, 9.118700523e-03f, 9.114281429e-03f, 9.109846814e-03f,
-9.105396686e-03f, 9.100931054e-03f, 9.096449926e-03f, 9.091953311e-03f, 9.087441218e-03f, 9.082913655e-03f, 9.078370631e-03f, 9.073812154e-03f, 9.069238233e-03f, 9.064648877e-03f,
-9.060044094e-03f, 9.055423893e-03f, 9.050788284e-03f, 9.046137274e-03f, 9.041470873e-03f, 9.036789090e-03f, 9.032091933e-03f, 9.027379411e-03f, 9.022651533e-03f, 9.017908309e-03f,
-9.013149746e-03f, 9.008375855e-03f, 9.003586644e-03f, 8.998782122e-03f, 8.993962299e-03f, 8.989127183e-03f, 8.984276784e-03f, 8.979411110e-03f, 8.974530172e-03f, 8.969633978e-03f,
-8.964722537e-03f, 8.959795858e-03f, 8.954853952e-03f, 8.949896827e-03f, 8.944924493e-03f, 8.939936959e-03f, 8.934934234e-03f, 8.929916328e-03f, 8.924883251e-03f, 8.919835011e-03f,
-8.914771619e-03f, 8.909693083e-03f, 8.904599414e-03f, 8.899490621e-03f, 8.894366713e-03f, 8.889227701e-03f, 8.884073593e-03f, 8.878904400e-03f, 8.873720131e-03f, 8.868520796e-03f,
-8.863306405e-03f, 8.858076968e-03f, 8.852832493e-03f, 8.847572992e-03f, 8.842298474e-03f, 8.837008949e-03f, 8.831704427e-03f, 8.826384917e-03f, 8.821050431e-03f, 8.815700976e-03f,
-8.810336565e-03f, 8.804957206e-03f, 8.799562911e-03f, 8.794153688e-03f, 8.788729548e-03f, 8.783290501e-03f, 8.777836558e-03f, 8.772367728e-03f, 8.766884022e-03f, 8.761385450e-03f,
-8.755872022e-03f, 8.750343749e-03f, 8.744800640e-03f, 8.739242707e-03f, 8.733669959e-03f, 8.728082408e-03f, 8.722480062e-03f, 8.716862934e-03f, 8.711231032e-03f, 8.705584369e-03f,
-8.699922953e-03f, 8.694246797e-03f, 8.688555910e-03f, 8.682850303e-03f, 8.677129986e-03f, 8.671394971e-03f, 8.665645268e-03f, 8.659880887e-03f, 8.654101839e-03f, 8.648308136e-03f,
-8.642499787e-03f, 8.636676804e-03f, 8.630839197e-03f, 8.624986978e-03f, 8.619120157e-03f, 8.613238744e-03f, 8.607342752e-03f, 8.601432190e-03f, 8.595507070e-03f, 8.589567403e-03f,
-8.583613200e-03f, 8.577644472e-03f, 8.571661230e-03f, 8.565663484e-03f, 8.559651247e-03f, 8.553624529e-03f, 8.547583341e-03f, 8.541527695e-03f, 8.535457601e-03f, 8.529373072e-03f,
-8.523274118e-03f, 8.517160750e-03f, 8.511032980e-03f, 8.504890820e-03f, 8.498734280e-03f, 8.492563371e-03f, 8.486378106e-03f, 8.480178496e-03f, 8.473964552e-03f, 8.467736286e-03f,
-8.461493709e-03f, 8.455236832e-03f, 8.448965668e-03f, 8.442680227e-03f, 8.436380522e-03f, 8.430066564e-03f, 8.423738365e-03f, 8.417395935e-03f, 8.411039288e-03f, 8.404668435e-03f,
-8.398283387e-03f, 8.391884156e-03f, 8.385470754e-03f, 8.379043193e-03f, 8.372601485e-03f, 8.366145641e-03f, 8.359675673e-03f, 8.353191594e-03f, 8.346693415e-03f, 8.340181148e-03f,
-8.333654805e-03f, 8.327114399e-03f, 8.320559940e-03f, 8.313991442e-03f, 8.307408916e-03f, 8.300812374e-03f, 8.294201829e-03f, 8.287577293e-03f, 8.280938777e-03f, 8.274286295e-03f,
-8.267619857e-03f, 8.260939477e-03f, 8.254245167e-03f, 8.247536939e-03f, 8.240814805e-03f, 8.234078777e-03f, 8.227328869e-03f, 8.220565092e-03f, 8.213787458e-03f, 8.206995981e-03f,
-8.200190673e-03f, 8.193371545e-03f, 8.186538611e-03f, 8.179691883e-03f, 8.172831374e-03f, 8.165957096e-03f, 8.159069062e-03f, 8.152167284e-03f, 8.145251775e-03f, 8.138322548e-03f,
-8.131379615e-03f, 8.124422990e-03f, 8.117452684e-03f, 8.110468710e-03f, 8.103471082e-03f, 8.096459812e-03f, 8.089434913e-03f, 8.082396397e-03f, 8.075344278e-03f, 8.068278569e-03f,
-8.061199282e-03f, 8.054106430e-03f, 8.047000027e-03f, 8.039880085e-03f, 8.032746617e-03f, 8.025599636e-03f, 8.018439156e-03f, 8.011265189e-03f, 8.004077748e-03f, 7.996876847e-03f,
-7.989662499e-03f, 7.982434717e-03f, 7.975193513e-03f, 7.967938902e-03f, 7.960670896e-03f, 7.953389509e-03f, 7.946094754e-03f, 7.938786645e-03f, 7.931465194e-03f, 7.924130414e-03f,
-7.916782320e-03f, 7.909420925e-03f, 7.902046242e-03f, 7.894658284e-03f, 7.887257065e-03f, 7.879842599e-03f, 7.872414898e-03f, 7.864973977e-03f, 7.857519849e-03f, 7.850052527e-03f,
-7.842572025e-03f, 7.835078357e-03f, 7.827571537e-03f, 7.820051577e-03f, 7.812518492e-03f, 7.804972295e-03f, 7.797413000e-03f, 7.789840621e-03f, 7.782255172e-03f, 7.774656666e-03f,
-7.767045117e-03f, 7.759420538e-03f, 7.751782945e-03f, 7.744132350e-03f, 7.736468768e-03f, 7.728792212e-03f, 7.721102696e-03f, 7.713400235e-03f, 7.705684842e-03f, 7.697956531e-03f,
-7.690215317e-03f, 7.682461212e-03f, 7.674694233e-03f, 7.666914391e-03f, 7.659121702e-03f, 7.651316180e-03f, 7.643497839e-03f, 7.635666693e-03f, 7.627822756e-03f, 7.619966042e-03f,
-7.612096566e-03f, 7.604214342e-03f, 7.596319384e-03f, 7.588411706e-03f, 7.580491323e-03f, 7.572558250e-03f, 7.564612499e-03f, 7.556654087e-03f, 7.548683027e-03f, 7.540699333e-03f,
-7.532703021e-03f, 7.524694104e-03f, 7.516672597e-03f, 7.508638515e-03f, 7.500591872e-03f, 7.492532682e-03f, 7.484460961e-03f, 7.476376722e-03f, 7.468279981e-03f, 7.460170752e-03f,
-7.452049050e-03f, 7.443914889e-03f, 7.435768284e-03f, 7.427609250e-03f, 7.419437801e-03f, 7.411253953e-03f, 7.403057719e-03f, 7.394849116e-03f, 7.386628157e-03f, 7.378394858e-03f,
-7.370149233e-03f, 7.361891297e-03f, 7.353621065e-03f, 7.345338553e-03f, 7.337043774e-03f, 7.328736744e-03f, 7.320417479e-03f, 7.312085992e-03f, 7.303742299e-03f, 7.295386415e-03f,
-7.287018356e-03f, 7.278638135e-03f, 7.270245769e-03f, 7.261841272e-03f, 7.253424660e-03f, 7.244995947e-03f, 7.236555149e-03f, 7.228102282e-03f, 7.219637359e-03f, 7.211160397e-03f,
-7.202671411e-03f, 7.194170416e-03f, 7.185657428e-03f, 7.177132461e-03f, 7.168595531e-03f, 7.160046654e-03f, 7.151485845e-03f, 7.142913118e-03f, 7.134328491e-03f, 7.125731977e-03f,
-7.117123593e-03f, 7.108503354e-03f, 7.099871276e-03f, 7.091227374e-03f, 7.082571663e-03f, 7.073904160e-03f, 7.065224879e-03f, 7.056533836e-03f, 7.047831048e-03f, 7.039116529e-03f,
-7.030390296e-03f, 7.021652363e-03f, 7.012902747e-03f, 7.004141463e-03f, 6.995368528e-03f, 6.986583956e-03f, 6.977787764e-03f, 6.968979968e-03f, 6.960160582e-03f, 6.951329624e-03f,
-6.942487109e-03f, 6.933633052e-03f, 6.924767470e-03f, 6.915890379e-03f, 6.907001794e-03f, 6.898101732e-03f, 6.889190208e-03f, 6.880267239e-03f, 6.871332840e-03f, 6.862387027e-03f,
-6.853429817e-03f, 6.844461225e-03f, 6.835481269e-03f, 6.826489962e-03f, 6.817487323e-03f, 6.808473367e-03f, 6.799448110e-03f, 6.790411568e-03f, 6.781363758e-03f, 6.772304695e-03f,
-6.763234396e-03f, 6.754152878e-03f, 6.745060156e-03f, 6.735956247e-03f, 6.726841167e-03f, 6.717714932e-03f, 6.708577559e-03f, 6.699429064e-03f, 6.690269463e-03f, 6.681098774e-03f,
-6.671917011e-03f, 6.662724192e-03f, 6.653520334e-03f, 6.644305452e-03f, 6.635079563e-03f, 6.625842684e-03f, 6.616594831e-03f, 6.607336020e-03f, 6.598066269e-03f, 6.588785594e-03f,
-6.579494011e-03f, 6.570191537e-03f, 6.560878188e-03f, 6.551553982e-03f, 6.542218935e-03f, 6.532873064e-03f, 6.523516385e-03f, 6.514148915e-03f, 6.504770671e-03f, 6.495381669e-03f,
-6.485981927e-03f, 6.476571461e-03f, 6.467150288e-03f, 6.457718425e-03f, 6.448275888e-03f, 6.438822695e-03f, 6.429358862e-03f, 6.419884406e-03f, 6.410399345e-03f, 6.400903694e-03f,
-6.391397472e-03f, 6.381880695e-03f, 6.372353379e-03f, 6.362815543e-03f, 6.353267203e-03f, 6.343708376e-03f, 6.334139079e-03f, 6.324559329e-03f, 6.314969144e-03f, 6.305368539e-03f,
-6.295757534e-03f, 6.286136144e-03f, 6.276504386e-03f, 6.266862279e-03f, 6.257209839e-03f, 6.247547084e-03f, 6.237874029e-03f, 6.228190694e-03f, 6.218497095e-03f, 6.208793249e-03f,
-6.199079174e-03f, 6.189354887e-03f, 6.179620405e-03f, 6.169875746e-03f, 6.160120927e-03f, 6.150355965e-03f, 6.140580878e-03f, 6.130795683e-03f, 6.121000398e-03f, 6.111195039e-03f,
-6.101379626e-03f, 6.091554174e-03f, 6.081718702e-03f, 6.071873226e-03f, 6.062017765e-03f, 6.052152337e-03f, 6.042276957e-03f, 6.032391645e-03f, 6.022496418e-03f, 6.012591293e-03f,
-6.002676288e-03f, 5.992751421e-03f, 5.982816709e-03f, 5.972872170e-03f, 5.962917821e-03f, 5.952953681e-03f, 5.942979767e-03f, 5.932996097e-03f, 5.923002688e-03f, 5.912999559e-03f,
-5.902986726e-03f, 5.892964209e-03f, 5.882932024e-03f, 5.872890190e-03f, 5.862838724e-03f, 5.852777644e-03f, 5.842706969e-03f, 5.832626715e-03f, 5.822536901e-03f, 5.812437546e-03f,
-5.802328665e-03f, 5.792210279e-03f, 5.782082404e-03f, 5.771945059e-03f, 5.761798262e-03f, 5.751642030e-03f, 5.741476383e-03f, 5.731301336e-03f, 5.721116910e-03f, 5.710923122e-03f,
-5.700719989e-03f, 5.690507531e-03f, 5.680285765e-03f, 5.670054709e-03f, 5.659814382e-03f, 5.649564802e-03f, 5.639305986e-03f, 5.629037954e-03f, 5.618760723e-03f, 5.608474311e-03f,
-5.598178737e-03f, 5.587874019e-03f, 5.577560175e-03f, 5.567237224e-03f, 5.556905184e-03f, 5.546564073e-03f, 5.536213910e-03f, 5.525854712e-03f, 5.515486499e-03f, 5.505109288e-03f,
-5.494723099e-03f, 5.484327948e-03f, 5.473923856e-03f, 5.463510840e-03f, 5.453088918e-03f, 5.442658110e-03f, 5.432218433e-03f, 5.421769907e-03f, 5.411312549e-03f, 5.400846379e-03f,
-5.390371414e-03f, 5.379887673e-03f, 5.369395175e-03f, 5.358893939e-03f, 5.348383982e-03f, 5.337865324e-03f, 5.327337984e-03f, 5.316801979e-03f, 5.306257329e-03f, 5.295704052e-03f,
-5.285142166e-03f, 5.274571692e-03f, 5.263992646e-03f, 5.253405049e-03f, 5.242808918e-03f, 5.232204272e-03f, 5.221591131e-03f, 5.210969513e-03f, 5.200339436e-03f, 5.189700920e-03f,
-5.179053983e-03f, 5.168398645e-03f, 5.157734923e-03f, 5.147062838e-03f, 5.136382407e-03f, 5.125693650e-03f, 5.114996585e-03f, 5.104291232e-03f, 5.093577609e-03f, 5.082855735e-03f,
-5.072125630e-03f, 5.061387312e-03f, 5.050640800e-03f, 5.039886113e-03f, 5.029123270e-03f, 5.018352290e-03f, 5.007573193e-03f, 4.996785997e-03f, 4.985990721e-03f, 4.975187385e-03f,
-4.964376006e-03f, 4.953556606e-03f, 4.942729202e-03f, 4.931893814e-03f, 4.921050461e-03f, 4.910199161e-03f, 4.899339935e-03f, 4.888472801e-03f, 4.877597779e-03f, 4.866714888e-03f,
-4.855824146e-03f, 4.844925574e-03f, 4.834019190e-03f, 4.823105013e-03f, 4.812183064e-03f, 4.801253360e-03f, 4.790315922e-03f, 4.779370769e-03f, 4.768417920e-03f, 4.757457394e-03f,
-4.746489211e-03f, 4.735513389e-03f, 4.724529950e-03f, 4.713538910e-03f, 4.702540292e-03f, 4.691534112e-03f, 4.680520391e-03f, 4.669499149e-03f, 4.658470405e-03f, 4.647434177e-03f,
-4.636390487e-03f, 4.625339352e-03f, 4.614280793e-03f, 4.603214829e-03f, 4.592141480e-03f, 4.581060765e-03f, 4.569972703e-03f, 4.558877315e-03f, 4.547774619e-03f, 4.536664635e-03f,
-4.525547384e-03f, 4.514422883e-03f, 4.503291154e-03f, 4.492152215e-03f, 4.481006086e-03f, 4.469852788e-03f, 4.458692338e-03f, 4.447524758e-03f, 4.436350067e-03f, 4.425168284e-03f,
-4.413979429e-03f, 4.402783522e-03f, 4.391580582e-03f, 4.380370630e-03f, 4.369153685e-03f, 4.357929766e-03f, 4.346698894e-03f, 4.335461088e-03f, 4.324216368e-03f, 4.312964754e-03f,
-4.301706265e-03f, 4.290440922e-03f, 4.279168744e-03f, 4.267889751e-03f, 4.256603962e-03f, 4.245311399e-03f, 4.234012080e-03f, 4.222706025e-03f, 4.211393255e-03f, 4.200073789e-03f,
-4.188747647e-03f, 4.177414849e-03f, 4.166075415e-03f, 4.154729364e-03f, 4.143376718e-03f, 4.132017495e-03f, 4.120651716e-03f, 4.109279401e-03f, 4.097900569e-03f, 4.086515241e-03f,
-4.075123437e-03f, 4.063725176e-03f, 4.052320479e-03f, 4.040909366e-03f, 4.029491856e-03f, 4.018067971e-03f, 4.006637729e-03f, 3.995201151e-03f, 3.983758257e-03f, 3.972309068e-03f,
-3.960853602e-03f, 3.949391881e-03f, 3.937923925e-03f, 3.926449753e-03f, 3.914969386e-03f, 3.903482844e-03f, 3.891990146e-03f, 3.880491315e-03f, 3.868986368e-03f, 3.857475327e-03f,
-3.845958212e-03f, 3.834435043e-03f, 3.822905840e-03f, 3.811370624e-03f, 3.799829415e-03f, 3.788282232e-03f, 3.776729097e-03f, 3.765170029e-03f, 3.753605049e-03f, 3.742034176e-03f,
-3.730457433e-03f, 3.718874838e-03f, 3.707286411e-03f, 3.695692175e-03f, 3.684092147e-03f, 3.672486350e-03f, 3.660874803e-03f, 3.649257526e-03f, 3.637634541e-03f, 3.626005867e-03f,
-3.614371525e-03f, 3.602731535e-03f, 3.591085917e-03f, 3.579434692e-03f, 3.567777881e-03f, 3.556115504e-03f, 3.544447580e-03f, 3.532774132e-03f, 3.521095179e-03f, 3.509410741e-03f,
-3.497720839e-03f, 3.486025494e-03f, 3.474324726e-03f, 3.462618555e-03f, 3.450907003e-03f, 3.439190088e-03f, 3.427467833e-03f, 3.415740258e-03f, 3.404007383e-03f, 3.392269228e-03f,
-3.380525815e-03f, 3.368777163e-03f, 3.357023293e-03f, 3.345264227e-03f, 3.333499984e-03f, 3.321730585e-03f, 3.309956051e-03f, 3.298176402e-03f, 3.286391659e-03f, 3.274601842e-03f,
-3.262806973e-03f, 3.251007071e-03f, 3.239202158e-03f, 3.227392254e-03f, 3.215577379e-03f, 3.203757555e-03f, 3.191932802e-03f, 3.180103141e-03f, 3.168268593e-03f, 3.156429177e-03f,
-3.144584915e-03f, 3.132735828e-03f, 3.120881937e-03f, 3.109023261e-03f, 3.097159822e-03f, 3.085291640e-03f, 3.073418737e-03f, 3.061541132e-03f, 3.049658848e-03f, 3.037771904e-03f,
-3.025880321e-03f, 3.013984120e-03f, 3.002083322e-03f, 2.990177948e-03f, 2.978268018e-03f, 2.966353554e-03f, 2.954434576e-03f, 2.942511104e-03f, 2.930583161e-03f, 2.918650766e-03f,
-2.906713940e-03f, 2.894772705e-03f, 2.882827080e-03f, 2.870877088e-03f, 2.858922749e-03f, 2.846964083e-03f, 2.835001112e-03f, 2.823033857e-03f, 2.811062338e-03f, 2.799086576e-03f,
-2.787106592e-03f, 2.775122408e-03f, 2.763134044e-03f, 2.751141520e-03f, 2.739144859e-03f, 2.727144080e-03f, 2.715139206e-03f, 2.703130256e-03f, 2.691117251e-03f, 2.679100214e-03f,
-2.667079164e-03f, 2.655054122e-03f, 2.643025111e-03f, 2.630992149e-03f, 2.618955260e-03f, 2.606914463e-03f, 2.594869779e-03f, 2.582821230e-03f, 2.570768837e-03f, 2.558712620e-03f,
-2.546652601e-03f, 2.534588801e-03f, 2.522521240e-03f, 2.510449940e-03f, 2.498374922e-03f, 2.486296207e-03f, 2.474213816e-03f, 2.462127769e-03f, 2.450038089e-03f, 2.437944796e-03f,
-2.425847910e-03f, 2.413747455e-03f, 2.401643449e-03f, 2.389535915e-03f, 2.377424874e-03f, 2.365310346e-03f, 2.353192353e-03f, 2.341070916e-03f, 2.328946056e-03f, 2.316817794e-03f,
-2.304686151e-03f, 2.292551149e-03f, 2.280412808e-03f, 2.268271150e-03f, 2.256126195e-03f, 2.243977966e-03f, 2.231826483e-03f, 2.219671767e-03f, 2.207513839e-03f, 2.195352721e-03f,
-2.183188434e-03f, 2.171020999e-03f, 2.158850437e-03f, 2.146676769e-03f, 2.134500017e-03f, 2.122320202e-03f, 2.110137344e-03f, 2.097951466e-03f, 2.085762588e-03f, 2.073570731e-03f,
-2.061375917e-03f, 2.049178168e-03f, 2.036977503e-03f, 2.024773945e-03f, 2.012567515e-03f, 2.000358233e-03f, 1.988146122e-03f, 1.975931202e-03f, 1.963713494e-03f, 1.951493021e-03f,
-1.939269803e-03f, 1.927043861e-03f, 1.914815216e-03f, 1.902583891e-03f, 1.890349906e-03f, 1.878113282e-03f, 1.865874041e-03f, 1.853632205e-03f, 1.841387793e-03f, 1.829140828e-03f,
-1.816891331e-03f, 1.804639323e-03f, 1.792384826e-03f, 1.780127860e-03f, 1.767868447e-03f, 1.755606609e-03f, 1.743342367e-03f, 1.731075741e-03f, 1.718806754e-03f, 1.706535427e-03f,
-1.694261780e-03f, 1.681985836e-03f, 1.669707615e-03f, 1.657427139e-03f, 1.645144430e-03f, 1.632859508e-03f, 1.620572395e-03f, 1.608283112e-03f, 1.595991681e-03f, 1.583698123e-03f,
-1.571402460e-03f, 1.559104712e-03f, 1.546804901e-03f, 1.534503048e-03f, 1.522199175e-03f, 1.509893303e-03f, 1.497585454e-03f, 1.485275649e-03f, 1.472963908e-03f, 1.460650254e-03f,
-1.448334709e-03f, 1.436017292e-03f, 1.423698026e-03f, 1.411376933e-03f, 1.399054032e-03f, 1.386729347e-03f, 1.374402898e-03f, 1.362074706e-03f, 1.349744793e-03f, 1.337413181e-03f,
-1.325079891e-03f, 1.312744943e-03f, 1.300408361e-03f, 1.288070164e-03f, 1.275730374e-03f, 1.263389014e-03f, 1.251046103e-03f, 1.238701664e-03f, 1.226355718e-03f, 1.214008287e-03f,
-1.201659391e-03f, 1.189309052e-03f, 1.176957292e-03f, 1.164604132e-03f, 1.152249594e-03f, 1.139893698e-03f, 1.127536466e-03f, 1.115177921e-03f, 1.102818082e-03f, 1.090456972e-03f,
-1.078094612e-03f, 1.065731023e-03f, 1.053366227e-03f, 1.041000245e-03f, 1.028633099e-03f, 1.016264810e-03f, 1.003895399e-03f, 9.915248885e-04f, 9.791532991e-04f, 9.667806526e-04f,
-9.544069702e-04f, 9.420322735e-04f, 9.296565838e-04f, 9.172799227e-04f, 9.049023115e-04f, 8.925237716e-04f, 8.801443246e-04f, 8.677639918e-04f, 8.553827946e-04f, 8.430007546e-04f,
-8.306178931e-04f, 8.182342316e-04f, 8.058497915e-04f, 7.934645942e-04f, 7.810786612e-04f, 7.686920140e-04f, 7.563046739e-04f, 7.439166624e-04f, 7.315280009e-04f, 7.191387109e-04f,
-7.067488138e-04f, 6.943583311e-04f, 6.819672841e-04f, 6.695756944e-04f, 6.571835832e-04f, 6.447909722e-04f, 6.323978827e-04f, 6.200043362e-04f, 6.076103541e-04f, 5.952159577e-04f,
-5.828211687e-04f, 5.704260084e-04f, 5.580304981e-04f, 5.456346595e-04f, 5.332385138e-04f, 5.208420826e-04f, 5.084453873e-04f, 4.960484492e-04f, 4.836512899e-04f, 4.712539307e-04f,
-4.588563931e-04f, 4.464586985e-04f, 4.340608683e-04f, 4.216629240e-04f, 4.092648870e-04f, 3.968667787e-04f, 3.844686206e-04f, 3.720704340e-04f, 3.596722404e-04f, 3.472740612e-04f,
-3.348759178e-04f, 3.224778316e-04f, 3.100798241e-04f, 2.976819167e-04f, 2.852841308e-04f, 2.728864877e-04f, 2.604890090e-04f, 2.480917160e-04f, 2.356946301e-04f, 2.232977728e-04f,
-2.109011654e-04f, 1.985048293e-04f, 1.861087860e-04f, 1.737130568e-04f, 1.613176632e-04f, 1.489226266e-04f, 1.365279683e-04f, 1.241337097e-04f, 1.117398723e-04f, 9.934647736e-05f,
-8.695354636e-05f, 7.456110066e-05f, 6.216916165e-05f, 4.977775070e-05f, 3.738688920e-05f, 2.499659852e-05f, 1.260690006e-05f, 2.178151723e-07f, -1.217063476e-05f, -2.455842837e-05f,
--3.694554429e-05f, -4.933196115e-05f, -6.171765759e-05f, -7.410261224e-05f, -8.648680375e-05f, -9.887021077e-05f, -1.112528119e-04f, -1.236345859e-04f, -1.360155113e-04f, -1.483955668e-04f,
--1.607747310e-04f, -1.731529827e-04f, -1.855303004e-04f, -1.979066629e-04f, -2.102820488e-04f, -2.226564368e-04f, -2.350298055e-04f, -2.474021336e-04f, -2.597733999e-04f, -2.721435829e-04f,
--2.845126613e-04f, -2.968806140e-04f, -3.092474195e-04f, -3.216130565e-04f, -3.339775037e-04f, -3.463407399e-04f, -3.587027437e-04f, -3.710634938e-04f, -3.834229690e-04f, -3.957811480e-04f,
--4.081380094e-04f, -4.204935320e-04f, -4.328476946e-04f, -4.452004757e-04f, -4.575518543e-04f, -4.699018090e-04f, -4.822503185e-04f, -4.945973615e-04f, -5.069429169e-04f, -5.192869634e-04f,
--5.316294797e-04f, -5.439704446e-04f, -5.563098368e-04f, -5.686476351e-04f, -5.809838183e-04f, -5.933183651e-04f, -6.056512543e-04f, -6.179824647e-04f, -6.303119751e-04f, -6.426397642e-04f,
--6.549658109e-04f, -6.672900939e-04f, -6.796125921e-04f, -6.919332841e-04f, -7.042521490e-04f, -7.165691653e-04f, -7.288843121e-04f, -7.411975680e-04f, -7.535089120e-04f, -7.658183227e-04f,
--7.781257792e-04f, -7.904312602e-04f, -8.027347445e-04f, -8.150362110e-04f, -8.273356386e-04f, -8.396330061e-04f, -8.519282923e-04f, -8.642214762e-04f, -8.765125365e-04f, -8.888014522e-04f,
--9.010882022e-04f, -9.133727653e-04f, -9.256551205e-04f, -9.379352465e-04f, -9.502131224e-04f, -9.624887270e-04f, -9.747620392e-04f, -9.870330379e-04f, -9.993017021e-04f, -1.011568011e-03f,
--1.023831943e-03f, -1.036093477e-03f, -1.048352592e-03f, -1.060609267e-03f, -1.072863482e-03f, -1.085115214e-03f, -1.097364444e-03f, -1.109611149e-03f, -1.121855310e-03f, -1.134096904e-03f,
--1.146335911e-03f, -1.158572310e-03f, -1.170806080e-03f, -1.183037200e-03f, -1.195265649e-03f, -1.207491405e-03f, -1.219714449e-03f, -1.231934758e-03f, -1.244152312e-03f, -1.256367091e-03f,
--1.268579072e-03f, -1.280788235e-03f, -1.292994560e-03f, -1.305198024e-03f, -1.317398608e-03f, -1.329596290e-03f, -1.341791050e-03f, -1.353982866e-03f, -1.366171717e-03f, -1.378357584e-03f,
--1.390540443e-03f, -1.402720276e-03f, -1.414897061e-03f, -1.427070777e-03f, -1.439241403e-03f, -1.451408918e-03f, -1.463573302e-03f, -1.475734533e-03f, -1.487892591e-03f, -1.500047456e-03f,
--1.512199105e-03f, -1.524347518e-03f, -1.536492675e-03f, -1.548634554e-03f, -1.560773136e-03f, -1.572908398e-03f, -1.585040321e-03f, -1.597168883e-03f, -1.609294063e-03f, -1.621415842e-03f,
--1.633534197e-03f, -1.645649109e-03f, -1.657760557e-03f, -1.669868519e-03f, -1.681972975e-03f, -1.694073905e-03f, -1.706171287e-03f, -1.718265102e-03f, -1.730355327e-03f, -1.742441943e-03f,
--1.754524929e-03f, -1.766604264e-03f, -1.778679927e-03f, -1.790751898e-03f, -1.802820157e-03f, -1.814884681e-03f, -1.826945452e-03f, -1.839002447e-03f, -1.851055647e-03f, -1.863105031e-03f,
--1.875150579e-03f, -1.887192268e-03f, -1.899230080e-03f, -1.911263994e-03f, -1.923293988e-03f, -1.935320042e-03f, -1.947342136e-03f, -1.959360249e-03f, -1.971374361e-03f, -1.983384451e-03f,
--1.995390498e-03f, -2.007392482e-03f, -2.019390382e-03f, -2.031384179e-03f, -2.043373850e-03f, -2.055359377e-03f, -2.067340738e-03f, -2.079317913e-03f, -2.091290881e-03f, -2.103259622e-03f,
--2.115224116e-03f, -2.127184341e-03f, -2.139140279e-03f, -2.151091907e-03f, -2.163039206e-03f, -2.174982155e-03f, -2.186920735e-03f, -2.198854923e-03f, -2.210784701e-03f, -2.222710048e-03f,
--2.234630942e-03f, -2.246547365e-03f, -2.258459296e-03f, -2.270366713e-03f, -2.282269598e-03f, -2.294167929e-03f, -2.306061686e-03f, -2.317950849e-03f, -2.329835398e-03f, -2.341715313e-03f,
--2.353590572e-03f, -2.365461156e-03f, -2.377327044e-03f, -2.389188217e-03f, -2.401044654e-03f, -2.412896335e-03f, -2.424743239e-03f, -2.436585346e-03f, -2.448422636e-03f, -2.460255090e-03f,
--2.472082686e-03f, -2.483905404e-03f, -2.495723225e-03f, -2.507536128e-03f, -2.519344093e-03f, -2.531147099e-03f, -2.542945128e-03f, -2.554738158e-03f, -2.566526170e-03f, -2.578309142e-03f,
--2.590087057e-03f, -2.601859892e-03f, -2.613627628e-03f, -2.625390246e-03f, -2.637147724e-03f, -2.648900043e-03f, -2.660647184e-03f, -2.672389125e-03f, -2.684125846e-03f, -2.695857329e-03f,
--2.707583552e-03f, -2.719304497e-03f, -2.731020142e-03f, -2.742730468e-03f, -2.754435455e-03f, -2.766135082e-03f, -2.777829331e-03f, -2.789518181e-03f, -2.801201612e-03f, -2.812879605e-03f,
--2.824552138e-03f, -2.836219194e-03f, -2.847880751e-03f, -2.859536789e-03f, -2.871187290e-03f, -2.882832232e-03f, -2.894471597e-03f, -2.906105364e-03f, -2.917733514e-03f, -2.929356026e-03f,
--2.940972882e-03f, -2.952584060e-03f, -2.964189542e-03f, -2.975789308e-03f, -2.987383338e-03f, -2.998971612e-03f, -3.010554110e-03f, -3.022130813e-03f, -3.033701701e-03f, -3.045266755e-03f,
--3.056825954e-03f, -3.068379279e-03f, -3.079926710e-03f, -3.091468228e-03f, -3.103003814e-03f, -3.114533446e-03f, -3.126057107e-03f, -3.137574775e-03f, -3.149086433e-03f, -3.160592059e-03f,
--3.172091635e-03f, -3.183585140e-03f, -3.195072556e-03f, -3.206553863e-03f, -3.218029041e-03f, -3.229498071e-03f, -3.240960933e-03f, -3.252417609e-03f, -3.263868077e-03f, -3.275312319e-03f,
--3.286750316e-03f, -3.298182047e-03f, -3.309607494e-03f, -3.321026638e-03f, -3.332439458e-03f, -3.343845935e-03f, -3.355246050e-03f, -3.366639784e-03f, -3.378027117e-03f, -3.389408030e-03f,
--3.400782503e-03f, -3.412150518e-03f, -3.423512055e-03f, -3.434867094e-03f, -3.446215616e-03f, -3.457557603e-03f, -3.468893034e-03f, -3.480221891e-03f, -3.491544154e-03f, -3.502859804e-03f,
--3.514168822e-03f, -3.525471189e-03f, -3.536766885e-03f, -3.548055892e-03f, -3.559338189e-03f, -3.570613759e-03f, -3.581882581e-03f, -3.593144638e-03f, -3.604399909e-03f, -3.615648375e-03f,
--3.626890018e-03f, -3.638124818e-03f, -3.649352757e-03f, -3.660573815e-03f, -3.671787973e-03f, -3.682995212e-03f, -3.694195513e-03f, -3.705388858e-03f, -3.716575227e-03f, -3.727754601e-03f,
--3.738926961e-03f, -3.750092289e-03f, -3.761250565e-03f, -3.772401771e-03f, -3.783545887e-03f, -3.794682895e-03f, -3.805812776e-03f, -3.816935511e-03f, -3.828051081e-03f, -3.839159467e-03f,
--3.850260651e-03f, -3.861354614e-03f, -3.872441336e-03f, -3.883520799e-03f, -3.894592985e-03f, -3.905657874e-03f, -3.916715448e-03f, -3.927765688e-03f, -3.938808575e-03f, -3.949844091e-03f,
--3.960872217e-03f, -3.971892934e-03f, -3.982906224e-03f, -3.993912068e-03f, -4.004910447e-03f, -4.015901343e-03f, -4.026884737e-03f, -4.037860611e-03f, -4.048828946e-03f, -4.059789723e-03f,
--4.070742923e-03f, -4.081688529e-03f, -4.092626522e-03f, -4.103556884e-03f, -4.114479594e-03f, -4.125394637e-03f, -4.136301992e-03f, -4.147201641e-03f, -4.158093567e-03f, -4.168977750e-03f,
--4.179854172e-03f, -4.190722814e-03f, -4.201583660e-03f, -4.212436689e-03f, -4.223281883e-03f, -4.234119226e-03f, -4.244948697e-03f, -4.255770278e-03f, -4.266583952e-03f, -4.277389700e-03f,
--4.288187504e-03f, -4.298977346e-03f, -4.309759207e-03f, -4.320533069e-03f, -4.331298914e-03f, -4.342056724e-03f, -4.352806480e-03f, -4.363548165e-03f, -4.374281760e-03f, -4.385007247e-03f,
--4.395724608e-03f, -4.406433825e-03f, -4.417134880e-03f, -4.427827754e-03f, -4.438512430e-03f, -4.449188890e-03f, -4.459857116e-03f, -4.470517089e-03f, -4.481168792e-03f, -4.491812207e-03f,
--4.502447315e-03f, -4.513074099e-03f, -4.523692540e-03f, -4.534302622e-03f, -4.544904326e-03f, -4.555497633e-03f, -4.566082527e-03f, -4.576658990e-03f, -4.587227003e-03f, -4.597786548e-03f,
--4.608337609e-03f, -4.618880166e-03f, -4.629414203e-03f, -4.639939701e-03f, -4.650456644e-03f, -4.660965012e-03f, -4.671464789e-03f, -4.681955956e-03f, -4.692438496e-03f, -4.702912392e-03f,
--4.713377625e-03f, -4.723834178e-03f, -4.734282034e-03f, -4.744721174e-03f, -4.755151582e-03f, -4.765573239e-03f, -4.775986129e-03f, -4.786390232e-03f, -4.796785533e-03f, -4.807172014e-03f,
--4.817549656e-03f, -4.827918443e-03f, -4.838278357e-03f, -4.848629380e-03f, -4.858971496e-03f, -4.869304687e-03f, -4.879628935e-03f, -4.889944222e-03f, -4.900250533e-03f, -4.910547849e-03f,
--4.920836153e-03f, -4.931115427e-03f, -4.941385655e-03f, -4.951646819e-03f, -4.961898901e-03f, -4.972141886e-03f, -4.982375754e-03f, -4.992600490e-03f, -5.002816075e-03f, -5.013022494e-03f,
--5.023219728e-03f, -5.033407760e-03f, -5.043586573e-03f, -5.053756151e-03f, -5.063916476e-03f, -5.074067531e-03f, -5.084209299e-03f, -5.094341762e-03f, -5.104464905e-03f, -5.114578709e-03f,
--5.124683159e-03f, -5.134778236e-03f, -5.144863924e-03f, -5.154940206e-03f, -5.165007065e-03f, -5.175064484e-03f, -5.185112446e-03f, -5.195150935e-03f, -5.205179933e-03f, -5.215199424e-03f,
--5.225209391e-03f, -5.235209817e-03f, -5.245200685e-03f, -5.255181979e-03f, -5.265153681e-03f, -5.275115775e-03f, -5.285068244e-03f, -5.295011072e-03f, -5.304944242e-03f, -5.314867737e-03f,
--5.324781541e-03f, -5.334685637e-03f, -5.344580008e-03f, -5.354464637e-03f, -5.364339509e-03f, -5.374204606e-03f, -5.384059912e-03f, -5.393905411e-03f, -5.403741086e-03f, -5.413566920e-03f,
--5.423382898e-03f, -5.433189002e-03f, -5.442985216e-03f, -5.452771524e-03f, -5.462547909e-03f, -5.472314355e-03f, -5.482070845e-03f, -5.491817364e-03f, -5.501553895e-03f, -5.511280421e-03f,
--5.520996927e-03f, -5.530703395e-03f, -5.540399811e-03f, -5.550086157e-03f, -5.559762417e-03f, -5.569428575e-03f, -5.579084616e-03f, -5.588730522e-03f, -5.598366277e-03f, -5.607991866e-03f,
--5.617607273e-03f, -5.627212480e-03f, -5.636807473e-03f, -5.646392235e-03f, -5.655966751e-03f, -5.665531003e-03f, -5.675084976e-03f, -5.684628655e-03f, -5.694162023e-03f, -5.703685064e-03f,
--5.713197762e-03f, -5.722700101e-03f, -5.732192066e-03f, -5.741673641e-03f, -5.751144810e-03f, -5.760605556e-03f, -5.770055865e-03f, -5.779495719e-03f, -5.788925105e-03f, -5.798344005e-03f,
--5.807752405e-03f, -5.817150287e-03f, -5.826537638e-03f, -5.835914440e-03f, -5.845280679e-03f, -5.854636338e-03f, -5.863981402e-03f, -5.873315856e-03f, -5.882639684e-03f, -5.891952870e-03f,
--5.901255399e-03f, -5.910547255e-03f, -5.919828423e-03f, -5.929098887e-03f, -5.938358631e-03f, -5.947607641e-03f, -5.956845901e-03f, -5.966073396e-03f, -5.975290109e-03f, -5.984496026e-03f,
--5.993691132e-03f, -6.002875411e-03f, -6.012048847e-03f, -6.021211426e-03f, -6.030363131e-03f, -6.039503949e-03f, -6.048633864e-03f, -6.057752859e-03f, -6.066860922e-03f, -6.075958035e-03f,
--6.085044184e-03f, -6.094119354e-03f, -6.103183529e-03f, -6.112236695e-03f, -6.121278837e-03f, -6.130309938e-03f, -6.139329986e-03f, -6.148338963e-03f, -6.157336856e-03f, -6.166323650e-03f,
--6.175299329e-03f, -6.184263878e-03f, -6.193217283e-03f, -6.202159528e-03f, -6.211090600e-03f, -6.220010482e-03f, -6.228919160e-03f, -6.237816620e-03f, -6.246702846e-03f, -6.255577824e-03f,
--6.264441539e-03f, -6.273293976e-03f, -6.282135120e-03f, -6.290964957e-03f, -6.299783473e-03f, -6.308590652e-03f, -6.317386479e-03f, -6.326170941e-03f, -6.334944022e-03f, -6.343705709e-03f,
--6.352455986e-03f, -6.361194839e-03f, -6.369922253e-03f, -6.378638214e-03f, -6.387342708e-03f, -6.396035720e-03f, -6.404717235e-03f, -6.413387240e-03f, -6.422045719e-03f, -6.430692658e-03f,
--6.439328044e-03f, -6.447951862e-03f, -6.456564096e-03f, -6.465164734e-03f, -6.473753761e-03f, -6.482331163e-03f, -6.490896925e-03f, -6.499451033e-03f, -6.507993473e-03f, -6.516524231e-03f,
--6.525043293e-03f, -6.533550644e-03f, -6.542046271e-03f, -6.550530159e-03f, -6.559002294e-03f, -6.567462663e-03f, -6.575911251e-03f, -6.584348045e-03f, -6.592773030e-03f, -6.601186192e-03f,
--6.609587517e-03f, -6.617976993e-03f, -6.626354603e-03f, -6.634720336e-03f, -6.643074177e-03f, -6.651416111e-03f, -6.659746126e-03f, -6.668064208e-03f, -6.676370342e-03f, -6.684664515e-03f,
--6.692946714e-03f, -6.701216924e-03f, -6.709475133e-03f, -6.717721325e-03f, -6.725955488e-03f, -6.734177608e-03f, -6.742387672e-03f, -6.750585666e-03f, -6.758771576e-03f, -6.766945388e-03f,
--6.775107090e-03f, -6.783256668e-03f, -6.791394108e-03f, -6.799519397e-03f, -6.807632522e-03f, -6.815733469e-03f, -6.823822224e-03f, -6.831898775e-03f, -6.839963108e-03f, -6.848015210e-03f,
--6.856055067e-03f, -6.864082667e-03f, -6.872097995e-03f, -6.880101039e-03f, -6.888091786e-03f, -6.896070222e-03f, -6.904036334e-03f, -6.911990109e-03f, -6.919931535e-03f, -6.927860597e-03f,
--6.935777283e-03f, -6.943681580e-03f, -6.951573474e-03f, -6.959452954e-03f, -6.967320005e-03f, -6.975174614e-03f, -6.983016770e-03f, -6.990846459e-03f, -6.998663668e-03f, -7.006468384e-03f,
--7.014260594e-03f, -7.022040286e-03f, -7.029807446e-03f, -7.037562063e-03f, -7.045304123e-03f, -7.053033613e-03f, -7.060750521e-03f, -7.068454834e-03f, -7.076146539e-03f, -7.083825625e-03f,
--7.091492077e-03f, -7.099145884e-03f, -7.106787033e-03f, -7.114415511e-03f, -7.122031306e-03f, -7.129634405e-03f, -7.137224797e-03f, -7.144802468e-03f, -7.152367405e-03f, -7.159919598e-03f,
--7.167459032e-03f, -7.174985696e-03f, -7.182499578e-03f, -7.190000665e-03f, -7.197488944e-03f, -7.204964404e-03f, -7.212427033e-03f, -7.219876817e-03f, -7.227313745e-03f, -7.234737805e-03f,
--7.242148984e-03f, -7.249547270e-03f, -7.256932652e-03f, -7.264305117e-03f, -7.271664652e-03f, -7.279011247e-03f, -7.286344889e-03f, -7.293665565e-03f, -7.300973265e-03f, -7.308267975e-03f,
--7.315549684e-03f, -7.322818381e-03f, -7.330074052e-03f, -7.337316687e-03f, -7.344546274e-03f, -7.351762800e-03f, -7.358966254e-03f, -7.366156624e-03f, -7.373333898e-03f, -7.380498066e-03f,
--7.387649113e-03f, -7.394787031e-03f, -7.401911805e-03f, -7.409023426e-03f, -7.416121881e-03f, -7.423207158e-03f, -7.430279247e-03f, -7.437338136e-03f, -7.444383812e-03f, -7.451416265e-03f,
--7.458435483e-03f, -7.465441455e-03f, -7.472434169e-03f, -7.479413614e-03f, -7.486379778e-03f, -7.493332650e-03f, -7.500272219e-03f, -7.507198474e-03f, -7.514111402e-03f, -7.521010994e-03f,
--7.527897237e-03f, -7.534770121e-03f, -7.541629634e-03f, -7.548475765e-03f, -7.555308503e-03f, -7.562127837e-03f, -7.568933755e-03f, -7.575726247e-03f, -7.582505302e-03f, -7.589270908e-03f,
--7.596023055e-03f, -7.602761731e-03f, -7.609486926e-03f, -7.616198629e-03f, -7.622896829e-03f, -7.629581514e-03f, -7.636252675e-03f, -7.642910300e-03f, -7.649554378e-03f, -7.656184899e-03f,
--7.662801852e-03f, -7.669405225e-03f, -7.675995010e-03f, -7.682571194e-03f, -7.689133767e-03f, -7.695682718e-03f, -7.702218037e-03f, -7.708739714e-03f, -7.715247737e-03f, -7.721742096e-03f,
--7.728222781e-03f, -7.734689780e-03f, -7.741143085e-03f, -7.747582683e-03f, -7.754008565e-03f, -7.760420721e-03f, -7.766819139e-03f, -7.773203810e-03f, -7.779574724e-03f, -7.785931869e-03f,
--7.792275236e-03f, -7.798604814e-03f, -7.804920594e-03f, -7.811222564e-03f, -7.817510716e-03f, -7.823785038e-03f, -7.830045520e-03f, -7.836292153e-03f, -7.842524926e-03f, -7.848743829e-03f,
--7.854948853e-03f, -7.861139987e-03f, -7.867317221e-03f, -7.873480545e-03f, -7.879629950e-03f, -7.885765425e-03f, -7.891886960e-03f, -7.897994547e-03f, -7.904088174e-03f, -7.910167832e-03f,
--7.916233511e-03f, -7.922285202e-03f, -7.928322894e-03f, -7.934346578e-03f, -7.940356245e-03f, -7.946351884e-03f, -7.952333486e-03f, -7.958301042e-03f, -7.964254541e-03f, -7.970193975e-03f,
--7.976119333e-03f, -7.982030607e-03f, -7.987927786e-03f, -7.993810861e-03f, -7.999679823e-03f, -8.005534662e-03f, -8.011375370e-03f, -8.017201935e-03f, -8.023014351e-03f, -8.028812605e-03f,
--8.034596691e-03f, -8.040366598e-03f, -8.046122317e-03f, -8.051863839e-03f, -8.057591154e-03f, -8.063304254e-03f, -8.069003129e-03f, -8.074687771e-03f, -8.080358170e-03f, -8.086014317e-03f,
--8.091656203e-03f, -8.097283818e-03f, -8.102897155e-03f, -8.108496204e-03f, -8.114080956e-03f, -8.119651403e-03f, -8.125207534e-03f, -8.130749342e-03f, -8.136276818e-03f, -8.141789952e-03f,
--8.147288736e-03f, -8.152773162e-03f, -8.158243220e-03f, -8.163698902e-03f, -8.169140199e-03f, -8.174567102e-03f, -8.179979603e-03f, -8.185377693e-03f, -8.190761364e-03f, -8.196130606e-03f,
--8.201485412e-03f, -8.206825773e-03f, -8.212151681e-03f, -8.217463126e-03f, -8.222760101e-03f, -8.228042597e-03f, -8.233310606e-03f, -8.238564119e-03f, -8.243803128e-03f, -8.249027625e-03f,
--8.254237602e-03f, -8.259433049e-03f, -8.264613960e-03f, -8.269780325e-03f, -8.274932137e-03f, -8.280069387e-03f, -8.285192068e-03f, -8.290300171e-03f, -8.295393688e-03f, -8.300472610e-03f,
--8.305536931e-03f, -8.310586642e-03f, -8.315621735e-03f, -8.320642202e-03f, -8.325648035e-03f, -8.330639226e-03f, -8.335615768e-03f, -8.340577652e-03f, -8.345524871e-03f, -8.350457417e-03f,
--8.355375281e-03f, -8.360278458e-03f, -8.365166938e-03f, -8.370040713e-03f, -8.374899777e-03f, -8.379744122e-03f, -8.384573740e-03f, -8.389388623e-03f, -8.394188764e-03f, -8.398974156e-03f,
--8.403744790e-03f, -8.408500659e-03f, -8.413241757e-03f, -8.417968075e-03f, -8.422679606e-03f, -8.427376342e-03f, -8.432058277e-03f, -8.436725402e-03f, -8.441377712e-03f, -8.446015197e-03f,
--8.450637852e-03f, -8.455245669e-03f, -8.459838640e-03f, -8.464416759e-03f, -8.468980018e-03f, -8.473528410e-03f, -8.478061928e-03f, -8.482580566e-03f, -8.487084315e-03f, -8.491573170e-03f,
--8.496047122e-03f, -8.500506165e-03f, -8.504950293e-03f, -8.509379497e-03f, -8.513793772e-03f, -8.518193110e-03f, -8.522577505e-03f, -8.526946949e-03f, -8.531301437e-03f, -8.535640960e-03f,
--8.539965513e-03f, -8.544275089e-03f, -8.548569681e-03f, -8.552849282e-03f, -8.557113887e-03f, -8.561363487e-03f, -8.565598077e-03f, -8.569817650e-03f, -8.574022199e-03f, -8.578211719e-03f,
--8.582386202e-03f, -8.586545642e-03f, -8.590690033e-03f, -8.594819368e-03f, -8.598933642e-03f, -8.603032846e-03f, -8.607116977e-03f, -8.611186026e-03f, -8.615239988e-03f, -8.619278856e-03f,
--8.623302625e-03f, -8.627311288e-03f, -8.631304838e-03f, -8.635283271e-03f, -8.639246580e-03f, -8.643194758e-03f, -8.647127799e-03f, -8.651045699e-03f, -8.654948450e-03f, -8.658836046e-03f,
--8.662708482e-03f, -8.666565752e-03f, -8.670407850e-03f, -8.674234770e-03f, -8.678046506e-03f, -8.681843053e-03f, -8.685624404e-03f, -8.689390554e-03f, -8.693141497e-03f, -8.696877227e-03f,
--8.700597739e-03f, -8.704303028e-03f, -8.707993086e-03f, -8.711667910e-03f, -8.715327492e-03f, -8.718971829e-03f, -8.722600914e-03f, -8.726214741e-03f, -8.729813306e-03f, -8.733396602e-03f,
--8.736964625e-03f, -8.740517369e-03f, -8.744054829e-03f, -8.747576999e-03f, -8.751083874e-03f, -8.754575448e-03f, -8.758051718e-03f, -8.761512676e-03f, -8.764958319e-03f, -8.768388640e-03f,
--8.771803635e-03f, -8.775203299e-03f, -8.778587627e-03f, -8.781956613e-03f, -8.785310252e-03f, -8.788648540e-03f, -8.791971471e-03f, -8.795279041e-03f, -8.798571244e-03f, -8.801848076e-03f,
--8.805109532e-03f, -8.808355607e-03f, -8.811586296e-03f, -8.814801594e-03f, -8.818001497e-03f, -8.821185999e-03f, -8.824355097e-03f, -8.827508785e-03f, -8.830647059e-03f, -8.833769913e-03f,
--8.836877345e-03f, -8.839969348e-03f, -8.843045919e-03f, -8.846107052e-03f, -8.849152744e-03f, -8.852182990e-03f, -8.855197785e-03f, -8.858197125e-03f, -8.861181005e-03f, -8.864149422e-03f,
--8.867102371e-03f, -8.870039848e-03f, -8.872961847e-03f, -8.875868366e-03f, -8.878759399e-03f, -8.881634944e-03f, -8.884494994e-03f, -8.887339547e-03f, -8.890168598e-03f, -8.892982143e-03f,
--8.895780178e-03f, -8.898562699e-03f, -8.901329702e-03f, -8.904081183e-03f, -8.906817137e-03f, -8.909537562e-03f, -8.912242453e-03f, -8.914931806e-03f, -8.917605618e-03f, -8.920263884e-03f,
--8.922906601e-03f, -8.925533765e-03f, -8.928145372e-03f, -8.930741419e-03f, -8.933321902e-03f, -8.935886816e-03f, -8.938436160e-03f, -8.940969928e-03f, -8.943488118e-03f, -8.945990725e-03f,
--8.948477747e-03f, -8.950949179e-03f, -8.953405019e-03f, -8.955845262e-03f, -8.958269907e-03f, -8.960678948e-03f, -8.963072382e-03f, -8.965450207e-03f, -8.967812419e-03f, -8.970159015e-03f,
--8.972489991e-03f, -8.974805345e-03f, -8.977105073e-03f, -8.979389171e-03f, -8.981657637e-03f, -8.983910468e-03f, -8.986147660e-03f, -8.988369211e-03f, -8.990575117e-03f, -8.992765375e-03f,
--8.994939983e-03f, -8.997098937e-03f, -8.999242235e-03f, -9.001369874e-03f, -9.003481850e-03f, -9.005578161e-03f, -9.007658804e-03f, -9.009723776e-03f, -9.011773075e-03f, -9.013806697e-03f,
--9.015824641e-03f, -9.017826903e-03f, -9.019813481e-03f, -9.021784371e-03f, -9.023739572e-03f, -9.025679081e-03f, -9.027602896e-03f, -9.029511013e-03f, -9.031403430e-03f, -9.033280146e-03f,
--9.035141156e-03f, -9.036986460e-03f, -9.038816054e-03f, -9.040629937e-03f, -9.042428105e-03f, -9.044210557e-03f, -9.045977291e-03f, -9.047728303e-03f, -9.049463592e-03f, -9.051183156e-03f,
--9.052886992e-03f, -9.054575099e-03f, -9.056247474e-03f, -9.057904115e-03f, -9.059545020e-03f, -9.061170188e-03f, -9.062779615e-03f, -9.064373300e-03f, -9.065951242e-03f, -9.067513438e-03f,
--9.069059885e-03f, -9.070590584e-03f, -9.072105531e-03f, -9.073604725e-03f, -9.075088163e-03f, -9.076555845e-03f, -9.078007769e-03f, -9.079443932e-03f, -9.080864334e-03f, -9.082268971e-03f,
--9.083657844e-03f, -9.085030950e-03f, -9.086388288e-03f, -9.087729856e-03f, -9.089055652e-03f, -9.090365675e-03f, -9.091659925e-03f, -9.092938398e-03f, -9.094201095e-03f, -9.095448012e-03f,
--9.096679150e-03f, -9.097894507e-03f, -9.099094081e-03f, -9.100277872e-03f, -9.101445877e-03f, -9.102598096e-03f, -9.103734528e-03f, -9.104855172e-03f, -9.105960025e-03f, -9.107049088e-03f,
--9.108122359e-03f, -9.109179837e-03f, -9.110221521e-03f, -9.111247410e-03f, -9.112257503e-03f, -9.113251800e-03f, -9.114230299e-03f, -9.115192999e-03f, -9.116139899e-03f, -9.117070999e-03f,
--9.117986298e-03f, -9.118885796e-03f, -9.119769490e-03f, -9.120637381e-03f, -9.121489468e-03f, -9.122325751e-03f, -9.123146228e-03f, -9.123950899e-03f, -9.124739763e-03f, -9.125512820e-03f,
--9.126270070e-03f, -9.127011512e-03f, -9.127737145e-03f, -9.128446968e-03f, -9.129140983e-03f, -9.129819187e-03f, -9.130481581e-03f, -9.131128165e-03f, -9.131758938e-03f, -9.132373899e-03f,
--9.132973049e-03f, -9.133556388e-03f, -9.134123914e-03f, -9.134675629e-03f, -9.135211531e-03f, -9.135731621e-03f, -9.136235899e-03f, -9.136724364e-03f, -9.137197016e-03f, -9.137653857e-03f,
--9.138094884e-03f, -9.138520099e-03f, -9.138929502e-03f, -9.139323093e-03f, -9.139700871e-03f, -9.140062837e-03f, -9.140408992e-03f, -9.140739335e-03f, -9.141053866e-03f, -9.141352587e-03f,
--9.141635496e-03f, -9.141902595e-03f, -9.142153884e-03f, -9.142389363e-03f, -9.142609033e-03f, -9.142812894e-03f, -9.143000946e-03f, -9.143173191e-03f, -9.143329627e-03f, -9.143470257e-03f,
--9.143595080e-03f, -9.143704098e-03f, -9.143797310e-03f, -9.143874718e-03f, -9.143936322e-03f, -9.143982122e-03f, -9.144012120e-03f, -9.144026317e-03f, -9.144024712e-03f, -9.144007308e-03f,
--9.143974104e-03f, -9.143925102e-03f, -9.143860302e-03f, -9.143779705e-03f, -9.143683313e-03f, -9.143571126e-03f, -9.143443146e-03f, -9.143299373e-03f, -9.143139808e-03f, -9.142964452e-03f,
--9.142773307e-03f, -9.142566374e-03f, -9.142343654e-03f, -9.142105148e-03f, -9.141850857e-03f, -9.141580783e-03f, -9.141294926e-03f, -9.140993288e-03f, -9.140675871e-03f, -9.140342676e-03f,
--9.139993704e-03f, -9.139628956e-03f, -9.139248435e-03f, -9.138852140e-03f, -9.138440075e-03f, -9.138012240e-03f, -9.137568637e-03f, -9.137109268e-03f, -9.136634134e-03f, -9.136143237e-03f,
--9.135636578e-03f, -9.135114159e-03f, -9.134575982e-03f, -9.134022049e-03f, -9.133452361e-03f, -9.132866920e-03f, -9.132265728e-03f, -9.131648787e-03f, -9.131016098e-03f, -9.130367664e-03f,
--9.129703486e-03f, -9.129023567e-03f, -9.128327908e-03f, -9.127616512e-03f, -9.126889380e-03f, -9.126146514e-03f, -9.125387917e-03f, -9.124613591e-03f, -9.123823538e-03f, -9.123017759e-03f,
--9.122196258e-03f, -9.121359036e-03f, -9.120506095e-03f, -9.119637439e-03f, -9.118753069e-03f, -9.117852987e-03f, -9.116937197e-03f, -9.116005699e-03f, -9.115058497e-03f, -9.114095594e-03f,
--9.113116991e-03f, -9.112122691e-03f, -9.111112697e-03f, -9.110087010e-03f, -9.109045635e-03f, -9.107988573e-03f, -9.106915827e-03f, -9.105827399e-03f, -9.104723293e-03f, -9.103603511e-03f,
--9.102468055e-03f, -9.101316929e-03f, -9.100150135e-03f, -9.098967677e-03f, -9.097769556e-03f, -9.096555776e-03f, -9.095326340e-03f, -9.094081250e-03f, -9.092820510e-03f, -9.091544122e-03f,
--9.090252090e-03f, -9.088944417e-03f, -9.087621105e-03f, -9.086282158e-03f, -9.084927578e-03f, -9.083557370e-03f, -9.082171536e-03f, -9.080770079e-03f, -9.079353003e-03f, -9.077920310e-03f,
--9.076472005e-03f, -9.075008089e-03f, -9.073528568e-03f, -9.072033443e-03f, -9.070522719e-03f, -9.068996399e-03f, -9.067454486e-03f, -9.065896984e-03f, -9.064323895e-03f, -9.062735225e-03f,
--9.061130976e-03f, -9.059511151e-03f, -9.057875755e-03f, -9.056224791e-03f, -9.054558263e-03f, -9.052876174e-03f, -9.051178528e-03f, -9.049465328e-03f, -9.047736580e-03f, -9.045992285e-03f,
--9.044232449e-03f, -9.042457074e-03f, -9.040666166e-03f, -9.038859727e-03f, -9.037037761e-03f, -9.035200273e-03f, -9.033347267e-03f, -9.031478746e-03f, -9.029594715e-03f, -9.027695177e-03f,
--9.025780136e-03f, -9.023849598e-03f, -9.021903565e-03f, -9.019942042e-03f, -9.017965034e-03f, -9.015972544e-03f, -9.013964576e-03f, -9.011941136e-03f, -9.009902226e-03f, -9.007847852e-03f,
--9.005778018e-03f, -9.003692727e-03f, -9.001591986e-03f, -8.999475797e-03f, -8.997344166e-03f, -8.995197097e-03f, -8.993034594e-03f, -8.990856662e-03f, -8.988663305e-03f, -8.986454529e-03f,
--8.984230337e-03f, -8.981990734e-03f, -8.979735726e-03f, -8.977465315e-03f, -8.975179509e-03f, -8.972878310e-03f, -8.970561724e-03f, -8.968229755e-03f, -8.965882409e-03f, -8.963519690e-03f,
--8.961141604e-03f, -8.958748154e-03f, -8.956339346e-03f, -8.953915185e-03f, -8.951475676e-03f, -8.949020824e-03f, -8.946550633e-03f, -8.944065110e-03f, -8.941564258e-03f, -8.939048084e-03f,
--8.936516591e-03f, -8.933969786e-03f, -8.931407674e-03f, -8.928830259e-03f, -8.926237548e-03f, -8.923629544e-03f, -8.921006254e-03f, -8.918367683e-03f, -8.915713836e-03f, -8.913044718e-03f,
--8.910360336e-03f, -8.907660694e-03f, -8.904945797e-03f, -8.902215652e-03f, -8.899470264e-03f, -8.896709637e-03f, -8.893933779e-03f, -8.891142694e-03f, -8.888336388e-03f, -8.885514867e-03f,
--8.882678135e-03f, -8.879826200e-03f, -8.876959066e-03f, -8.874076740e-03f, -8.871179227e-03f, -8.868266533e-03f, -8.865338663e-03f, -8.862395624e-03f, -8.859437421e-03f, -8.856464061e-03f,
--8.853475548e-03f, -8.850471890e-03f, -8.847453092e-03f, -8.844419160e-03f, -8.841370100e-03f, -8.838305918e-03f, -8.835226621e-03f, -8.832132213e-03f, -8.829022702e-03f, -8.825898094e-03f,
--8.822758394e-03f, -8.819603609e-03f, -8.816433745e-03f, -8.813248809e-03f, -8.810048806e-03f, -8.806833743e-03f, -8.803603626e-03f, -8.800358462e-03f, -8.797098257e-03f, -8.793823017e-03f,
--8.790532749e-03f, -8.787227459e-03f, -8.783907154e-03f, -8.780571840e-03f, -8.777221524e-03f, -8.773856212e-03f, -8.770475911e-03f, -8.767080628e-03f, -8.763670368e-03f, -8.760245140e-03f,
--8.756804948e-03f, -8.753349801e-03f, -8.749879705e-03f, -8.746394667e-03f, -8.742894692e-03f, -8.739379789e-03f, -8.735849964e-03f, -8.732305224e-03f, -8.728745576e-03f, -8.725171027e-03f,
--8.721581583e-03f, -8.717977252e-03f, -8.714358040e-03f, -8.710723955e-03f, -8.707075003e-03f, -8.703411193e-03f, -8.699732530e-03f, -8.696039022e-03f, -8.692330676e-03f, -8.688607499e-03f,
--8.684869498e-03f, -8.681116681e-03f, -8.677349055e-03f, -8.673566627e-03f, -8.669769405e-03f, -8.665957395e-03f, -8.662130605e-03f, -8.658289043e-03f, -8.654432715e-03f, -8.650561629e-03f,
--8.646675794e-03f, -8.642775215e-03f, -8.638859901e-03f, -8.634929859e-03f, -8.630985097e-03f, -8.627025622e-03f, -8.623051441e-03f, -8.619062564e-03f, -8.615058996e-03f, -8.611040746e-03f,
--8.607007821e-03f, -8.602960230e-03f, -8.598897979e-03f, -8.594821077e-03f, -8.590729532e-03f, -8.586623350e-03f, -8.582502541e-03f, -8.578367112e-03f, -8.574217071e-03f, -8.570052425e-03f,
--8.565873183e-03f, -8.561679353e-03f, -8.557470942e-03f, -8.553247959e-03f, -8.549010412e-03f, -8.544758309e-03f, -8.540491657e-03f, -8.536210465e-03f, -8.531914742e-03f, -8.527604494e-03f,
--8.523279732e-03f, -8.518940461e-03f, -8.514586692e-03f, -8.510218432e-03f, -8.505835689e-03f, -8.501438472e-03f, -8.497026789e-03f, -8.492600649e-03f, -8.488160059e-03f, -8.483705029e-03f,
--8.479235566e-03f, -8.474751680e-03f, -8.470253378e-03f, -8.465740669e-03f, -8.461213562e-03f, -8.456672065e-03f, -8.452116187e-03f, -8.447545936e-03f, -8.442961321e-03f, -8.438362351e-03f,
--8.433749034e-03f, -8.429121379e-03f, -8.424479395e-03f, -8.419823091e-03f, -8.415152474e-03f, -8.410467555e-03f, -8.405768342e-03f, -8.401054844e-03f, -8.396327069e-03f, -8.391585026e-03f,
--8.386828725e-03f, -8.382058175e-03f, -8.377273384e-03f, -8.372474361e-03f, -8.367661116e-03f, -8.362833657e-03f, -8.357991993e-03f, -8.353136134e-03f, -8.348266089e-03f, -8.343381866e-03f,
--8.338483475e-03f, -8.333570926e-03f, -8.328644227e-03f, -8.323703387e-03f, -8.318748417e-03f, -8.313779324e-03f, -8.308796119e-03f, -8.303798811e-03f, -8.298787408e-03f, -8.293761922e-03f,
--8.288722360e-03f, -8.283668732e-03f, -8.278601048e-03f, -8.273519318e-03f, -8.268423550e-03f, -8.263313754e-03f, -8.258189941e-03f, -8.253052118e-03f, -8.247900296e-03f, -8.242734485e-03f,
--8.237554695e-03f, -8.232360934e-03f, -8.227153212e-03f, -8.221931540e-03f, -8.216695927e-03f, -8.211446382e-03f, -8.206182916e-03f, -8.200905539e-03f, -8.195614259e-03f, -8.190309088e-03f,
--8.184990034e-03f, -8.179657108e-03f, -8.174310320e-03f, -8.168949679e-03f, -8.163575196e-03f, -8.158186881e-03f, -8.152784743e-03f, -8.147368793e-03f, -8.141939040e-03f, -8.136495496e-03f,
--8.131038169e-03f, -8.125567070e-03f, -8.120082209e-03f, -8.114583597e-03f, -8.109071243e-03f, -8.103545158e-03f, -8.098005352e-03f, -8.092451835e-03f, -8.086884618e-03f, -8.081303711e-03f,
--8.075709123e-03f, -8.070100867e-03f, -8.064478951e-03f, -8.058843387e-03f, -8.053194185e-03f, -8.047531355e-03f, -8.041854908e-03f, -8.036164854e-03f, -8.030461203e-03f, -8.024743967e-03f,
--8.019013156e-03f, -8.013268781e-03f, -8.007510851e-03f, -8.001739379e-03f, -7.995954373e-03f, -7.990155846e-03f, -7.984343808e-03f, -7.978518269e-03f, -7.972679240e-03f, -7.966826732e-03f,
--7.960960756e-03f, -7.955081323e-03f, -7.949188443e-03f, -7.943282128e-03f, -7.937362388e-03f, -7.931429234e-03f, -7.925482677e-03f, -7.919522729e-03f, -7.913549399e-03f, -7.907562699e-03f,
--7.901562641e-03f, -7.895549234e-03f, -7.889522491e-03f, -7.883482422e-03f, -7.877429038e-03f, -7.871362351e-03f, -7.865282372e-03f, -7.859189111e-03f, -7.853082580e-03f, -7.846962791e-03f,
--7.840829754e-03f, -7.834683481e-03f, -7.828523984e-03f, -7.822351272e-03f, -7.816165359e-03f, -7.809966254e-03f, -7.803753970e-03f, -7.797528518e-03f, -7.791289909e-03f, -7.785038155e-03f,
--7.778773267e-03f, -7.772495257e-03f, -7.766204136e-03f, -7.759899916e-03f, -7.753582608e-03f, -7.747252224e-03f, -7.740908776e-03f, -7.734552275e-03f, -7.728182732e-03f, -7.721800160e-03f,
--7.715404571e-03f, -7.708995975e-03f, -7.702574384e-03f, -7.696139812e-03f, -7.689692268e-03f, -7.683231765e-03f, -7.676758315e-03f, -7.670271929e-03f, -7.663772620e-03f, -7.657260400e-03f,
--7.650735279e-03f, -7.644197271e-03f, -7.637646387e-03f, -7.631082639e-03f, -7.624506039e-03f, -7.617916599e-03f, -7.611314331e-03f, -7.604699248e-03f, -7.598071361e-03f, -7.591430682e-03f,
--7.584777224e-03f, -7.578110999e-03f, -7.571432018e-03f, -7.564740294e-03f, -7.558035840e-03f, -7.551318667e-03f, -7.544588788e-03f, -7.537846215e-03f, -7.531090960e-03f, -7.524323036e-03f,
--7.517542454e-03f, -7.510749228e-03f, -7.503943370e-03f, -7.497124892e-03f, -7.490293806e-03f, -7.483450125e-03f, -7.476593862e-03f, -7.469725029e-03f, -7.462843638e-03f, -7.455949702e-03f,
--7.449043233e-03f, -7.442124245e-03f, -7.435192749e-03f, -7.428248758e-03f, -7.421292285e-03f, -7.414323343e-03f, -7.407341944e-03f, -7.400348101e-03f, -7.393341827e-03f, -7.386323134e-03f,
--7.379292035e-03f, -7.372248543e-03f, -7.365192671e-03f, -7.358124431e-03f, -7.351043837e-03f, -7.343950901e-03f, -7.336845636e-03f, -7.329728055e-03f, -7.322598171e-03f, -7.315455997e-03f,
--7.308301545e-03f, -7.301134830e-03f, -7.293955863e-03f, -7.286764659e-03f, -7.279561229e-03f, -7.272345587e-03f, -7.265117746e-03f, -7.257877720e-03f, -7.250625520e-03f, -7.243361162e-03f,
--7.236084656e-03f, -7.228796018e-03f, -7.221495260e-03f, -7.214182395e-03f, -7.206857436e-03f, -7.199520398e-03f, -7.192171292e-03f, -7.184810133e-03f, -7.177436933e-03f, -7.170051706e-03f,
--7.162654466e-03f, -7.155245226e-03f, -7.147823999e-03f, -7.140390799e-03f, -7.132945639e-03f, -7.125488532e-03f, -7.118019492e-03f, -7.110538534e-03f, -7.103045669e-03f, -7.095540912e-03f,
--7.088024276e-03f, -7.080495775e-03f, -7.072955422e-03f, -7.065403232e-03f, -7.057839217e-03f, -7.050263392e-03f, -7.042675769e-03f, -7.035076364e-03f, -7.027465189e-03f, -7.019842258e-03f,
--7.012207586e-03f, -7.004561185e-03f, -6.996903070e-03f, -6.989233254e-03f, -6.981551752e-03f, -6.973858577e-03f, -6.966153743e-03f, -6.958437264e-03f, -6.950709153e-03f, -6.942969426e-03f,
--6.935218096e-03f, -6.927455176e-03f, -6.919680681e-03f, -6.911894625e-03f, -6.904097021e-03f, -6.896287885e-03f, -6.888467230e-03f, -6.880635069e-03f, -6.872791418e-03f, -6.864936290e-03f,
--6.857069700e-03f, -6.849191662e-03f, -6.841302189e-03f, -6.833401296e-03f, -6.825488998e-03f, -6.817565308e-03f, -6.809630241e-03f, -6.801683811e-03f, -6.793726033e-03f, -6.785756920e-03f,
--6.777776487e-03f, -6.769784749e-03f, -6.761781720e-03f, -6.753767414e-03f, -6.745741845e-03f, -6.737705029e-03f, -6.729656979e-03f, -6.721597711e-03f, -6.713527237e-03f, -6.705445574e-03f,
--6.697352736e-03f, -6.689248736e-03f, -6.681133590e-03f, -6.673007313e-03f, -6.664869918e-03f, -6.656721421e-03f, -6.648561836e-03f, -6.640391178e-03f, -6.632209461e-03f, -6.624016701e-03f,
--6.615812911e-03f, -6.607598107e-03f, -6.599372304e-03f, -6.591135516e-03f, -6.582887757e-03f, -6.574629044e-03f, -6.566359390e-03f, -6.558078810e-03f, -6.549787320e-03f, -6.541484934e-03f,
--6.533171666e-03f, -6.524847533e-03f, -6.516512549e-03f, -6.508166729e-03f, -6.499810088e-03f, -6.491442640e-03f, -6.483064401e-03f, -6.474675386e-03f, -6.466275611e-03f, -6.457865089e-03f,
--6.449443836e-03f, -6.441011867e-03f, -6.432569197e-03f, -6.424115842e-03f, -6.415651816e-03f, -6.407177136e-03f, -6.398691815e-03f, -6.390195869e-03f, -6.381689313e-03f, -6.373172163e-03f,
--6.364644433e-03f, -6.356106140e-03f, -6.347557298e-03f, -6.338997923e-03f, -6.330428030e-03f, -6.321847634e-03f, -6.313256751e-03f, -6.304655395e-03f, -6.296043584e-03f, -6.287421331e-03f,
--6.278788652e-03f, -6.270145563e-03f, -6.261492080e-03f, -6.252828217e-03f, -6.244153990e-03f, -6.235469415e-03f, -6.226774507e-03f, -6.218069282e-03f, -6.209353755e-03f, -6.200627942e-03f,
--6.191891859e-03f, -6.183145521e-03f, -6.174388943e-03f, -6.165622142e-03f, -6.156845133e-03f, -6.148057932e-03f, -6.139260554e-03f, -6.130453016e-03f, -6.121635332e-03f, -6.112807519e-03f,
--6.103969592e-03f, -6.095121568e-03f, -6.086263462e-03f, -6.077395289e-03f, -6.068517066e-03f, -6.059628809e-03f, -6.050730533e-03f, -6.041822254e-03f, -6.032903988e-03f, -6.023975752e-03f,
--6.015037561e-03f, -6.006089430e-03f, -5.997131376e-03f, -5.988163416e-03f, -5.979185564e-03f, -5.970197837e-03f, -5.961200251e-03f, -5.952192822e-03f, -5.943175566e-03f, -5.934148500e-03f,
--5.925111638e-03f, -5.916064998e-03f, -5.907008595e-03f, -5.897942446e-03f, -5.888866567e-03f, -5.879780973e-03f, -5.870685682e-03f, -5.861580709e-03f, -5.852466071e-03f, -5.843341783e-03f,
--5.834207863e-03f, -5.825064326e-03f, -5.815911188e-03f, -5.806748467e-03f, -5.797576177e-03f, -5.788394337e-03f, -5.779202961e-03f, -5.770002066e-03f, -5.760791669e-03f, -5.751571786e-03f,
--5.742342434e-03f, -5.733103629e-03f, -5.723855386e-03f, -5.714597724e-03f, -5.705330658e-03f, -5.696054205e-03f, -5.686768381e-03f, -5.677473203e-03f, -5.668168687e-03f, -5.658854850e-03f,
--5.649531708e-03f, -5.640199278e-03f, -5.630857577e-03f, -5.621506622e-03f, -5.612146428e-03f, -5.602777012e-03f, -5.593398392e-03f, -5.584010584e-03f, -5.574613604e-03f, -5.565207469e-03f,
--5.555792196e-03f, -5.546367802e-03f, -5.536934304e-03f, -5.527491717e-03f, -5.518040060e-03f, -5.508579348e-03f, -5.499109598e-03f, -5.489630828e-03f, -5.480143055e-03f, -5.470646294e-03f,
--5.461140563e-03f, -5.451625879e-03f, -5.442102259e-03f, -5.432569719e-03f, -5.423028277e-03f, -5.413477949e-03f, -5.403918752e-03f, -5.394350704e-03f, -5.384773822e-03f, -5.375188121e-03f,
--5.365593620e-03f, -5.355990336e-03f, -5.346378285e-03f, -5.336757484e-03f, -5.327127951e-03f, -5.317489702e-03f, -5.307842755e-03f, -5.298187127e-03f, -5.288522835e-03f, -5.278849896e-03f,
--5.269168327e-03f, -5.259478146e-03f, -5.249779369e-03f, -5.240072014e-03f, -5.230356098e-03f, -5.220631638e-03f, -5.210898652e-03f, -5.201157156e-03f, -5.191407169e-03f, -5.181648706e-03f,
--5.171881786e-03f, -5.162106426e-03f, -5.152322643e-03f, -5.142530454e-03f, -5.132729877e-03f, -5.122920930e-03f, -5.113103629e-03f, -5.103277992e-03f, -5.093444036e-03f, -5.083601779e-03f,
--5.073751238e-03f, -5.063892431e-03f, -5.054025374e-03f, -5.044150087e-03f, -5.034266585e-03f, -5.024374887e-03f, -5.014475010e-03f, -5.004566971e-03f, -4.994650789e-03f, -4.984726480e-03f,
--4.974794062e-03f, -4.964853553e-03f, -4.954904970e-03f, -4.944948332e-03f, -4.934983654e-03f, -4.925010956e-03f, -4.915030255e-03f, -4.905041568e-03f, -4.895044914e-03f, -4.885040309e-03f,
--4.875027771e-03f, -4.865007319e-03f, -4.854978970e-03f, -4.844942741e-03f, -4.834898651e-03f, -4.824846716e-03f, -4.814786956e-03f, -4.804719387e-03f, -4.794644028e-03f, -4.784560896e-03f,
--4.774470009e-03f, -4.764371385e-03f, -4.754265042e-03f, -4.744150998e-03f, -4.734029269e-03f, -4.723899875e-03f, -4.713762834e-03f, -4.703618162e-03f, -4.693465879e-03f, -4.683306001e-03f,
--4.673138548e-03f, -4.662963536e-03f, -4.652780984e-03f, -4.642590910e-03f, -4.632393332e-03f, -4.622188267e-03f, -4.611975735e-03f, -4.601755752e-03f, -4.591528337e-03f, -4.581293508e-03f,
--4.571051283e-03f, -4.560801680e-03f, -4.550544717e-03f, -4.540280412e-03f, -4.530008783e-03f, -4.519729849e-03f, -4.509443628e-03f, -4.499150137e-03f, -4.488849396e-03f, -4.478541421e-03f,
--4.468226231e-03f, -4.457903845e-03f, -4.447574280e-03f, -4.437237556e-03f, -4.426893689e-03f, -4.416542698e-03f, -4.406184603e-03f, -4.395819419e-03f, -4.385447167e-03f, -4.375067864e-03f,
--4.364681529e-03f, -4.354288180e-03f, -4.343887835e-03f, -4.333480512e-03f, -4.323066231e-03f, -4.312645008e-03f, -4.302216863e-03f, -4.291781815e-03f, -4.281339880e-03f, -4.270891078e-03f,
--4.260435428e-03f, -4.249972946e-03f, -4.239503653e-03f, -4.229027567e-03f, -4.218544705e-03f, -4.208055086e-03f, -4.197558729e-03f, -4.187055653e-03f, -4.176545875e-03f, -4.166029414e-03f,
--4.155506289e-03f, -4.144976518e-03f, -4.134440120e-03f, -4.123897114e-03f, -4.113347517e-03f, -4.102791349e-03f, -4.092228628e-03f, -4.081659372e-03f, -4.071083601e-03f, -4.060501332e-03f,
--4.049912585e-03f, -4.039317378e-03f, -4.028715729e-03f, -4.018107658e-03f, -4.007493182e-03f, -3.996872322e-03f, -3.986245094e-03f, -3.975611519e-03f, -3.964971614e-03f, -3.954325399e-03f,
--3.943672892e-03f, -3.933014111e-03f, -3.922349076e-03f, -3.911677806e-03f, -3.901000318e-03f, -3.890316632e-03f, -3.879626767e-03f, -3.868930742e-03f, -3.858228574e-03f, -3.847520283e-03f,
--3.836805888e-03f, -3.826085408e-03f, -3.815358861e-03f, -3.804626267e-03f, -3.793887643e-03f, -3.783143010e-03f, -3.772392385e-03f, -3.761635788e-03f, -3.750873238e-03f, -3.740104753e-03f,
--3.729330353e-03f, -3.718550056e-03f, -3.707763881e-03f, -3.696971847e-03f, -3.686173974e-03f, -3.675370280e-03f, -3.664560783e-03f, -3.653745504e-03f, -3.642924461e-03f, -3.632097673e-03f,
--3.621265158e-03f, -3.610426937e-03f, -3.599583028e-03f, -3.588733449e-03f, -3.577878221e-03f, -3.567017362e-03f, -3.556150891e-03f, -3.545278827e-03f, -3.534401190e-03f, -3.523517998e-03f,
--3.512629270e-03f, -3.501735026e-03f, -3.490835284e-03f, -3.479930065e-03f, -3.469019386e-03f, -3.458103267e-03f, -3.447181727e-03f, -3.436254786e-03f, -3.425322462e-03f, -3.414384774e-03f,
--3.403441743e-03f, -3.392493386e-03f, -3.381539723e-03f, -3.370580774e-03f, -3.359616557e-03f, -3.348647092e-03f, -3.337672398e-03f, -3.326692494e-03f, -3.315707400e-03f, -3.304717134e-03f,
--3.293721716e-03f, -3.282721166e-03f, -3.271715501e-03f, -3.260704743e-03f, -3.249688909e-03f, -3.238668020e-03f, -3.227642094e-03f, -3.216611151e-03f, -3.205575211e-03f, -3.194534292e-03f,
--3.183488413e-03f, -3.172437595e-03f, -3.161381857e-03f, -3.150321217e-03f, -3.139255696e-03f, -3.128185312e-03f, -3.117110085e-03f, -3.106030034e-03f, -3.094945180e-03f, -3.083855540e-03f,
--3.072761135e-03f, -3.061661984e-03f, -3.050558106e-03f, -3.039449521e-03f, -3.028336248e-03f, -3.017218307e-03f, -3.006095717e-03f, -2.994968498e-03f, -2.983836668e-03f, -2.972700248e-03f,
--2.961559257e-03f, -2.950413715e-03f, -2.939263640e-03f, -2.928109053e-03f, -2.916949973e-03f, -2.905786419e-03f, -2.894618411e-03f, -2.883445969e-03f, -2.872269112e-03f, -2.861087859e-03f,
--2.849902230e-03f, -2.838712245e-03f, -2.827517923e-03f, -2.816319284e-03f, -2.805116347e-03f, -2.793909132e-03f, -2.782697658e-03f, -2.771481946e-03f, -2.760262014e-03f, -2.749037882e-03f,
--2.737809571e-03f, -2.726577098e-03f, -2.715340485e-03f, -2.704099750e-03f, -2.692854914e-03f, -2.681605996e-03f, -2.670353015e-03f, -2.659095992e-03f, -2.647834945e-03f, -2.636569895e-03f,
--2.625300862e-03f, -2.614027864e-03f, -2.602750921e-03f, -2.591470054e-03f, -2.580185282e-03f, -2.568896625e-03f, -2.557604102e-03f, -2.546307733e-03f, -2.535007538e-03f, -2.523703536e-03f,
--2.512395748e-03f, -2.501084192e-03f, -2.489768889e-03f, -2.478449859e-03f, -2.467127121e-03f, -2.455800694e-03f, -2.444470600e-03f, -2.433136856e-03f, -2.421799484e-03f, -2.410458503e-03f,
--2.399113933e-03f, -2.387765793e-03f, -2.376414103e-03f, -2.365058884e-03f, -2.353700155e-03f, -2.342337935e-03f, -2.330972245e-03f, -2.319603104e-03f, -2.308230532e-03f, -2.296854549e-03f,
--2.285475175e-03f, -2.274092430e-03f, -2.262706333e-03f, -2.251316904e-03f, -2.239924164e-03f, -2.228528131e-03f, -2.217128827e-03f, -2.205726270e-03f, -2.194320480e-03f, -2.182911479e-03f,
--2.171499284e-03f, -2.160083917e-03f, -2.148665397e-03f, -2.137243744e-03f, -2.125818977e-03f, -2.114391118e-03f, -2.102960185e-03f, -2.091526199e-03f, -2.080089179e-03f, -2.068649146e-03f,
--2.057206119e-03f, -2.045760118e-03f, -2.034311163e-03f, -2.022859275e-03f, -2.011404472e-03f, -1.999946776e-03f, -1.988486205e-03f, -1.977022781e-03f, -1.965556522e-03f, -1.954087449e-03f,
--1.942615581e-03f, -1.931140940e-03f, -1.919663544e-03f, -1.908183413e-03f, -1.896700568e-03f, -1.885215029e-03f, -1.873726815e-03f, -1.862235947e-03f, -1.850742445e-03f, -1.839246328e-03f,
--1.827747616e-03f, -1.816246330e-03f, -1.804742490e-03f, -1.793236115e-03f, -1.781727225e-03f, -1.770215841e-03f, -1.758701983e-03f, -1.747185670e-03f, -1.735666923e-03f, -1.724145761e-03f,
--1.712622205e-03f, -1.701096275e-03f, -1.689567991e-03f, -1.678037372e-03f, -1.666504439e-03f, -1.654969212e-03f, -1.643431710e-03f, -1.631891955e-03f, -1.620349966e-03f, -1.608805762e-03f,
--1.597259365e-03f, -1.585710794e-03f, -1.574160069e-03f, -1.562607211e-03f, -1.551052238e-03f, -1.539495173e-03f, -1.527936033e-03f, -1.516374840e-03f, -1.504811614e-03f, -1.493246375e-03f,
--1.481679142e-03f, -1.470109937e-03f, -1.458538778e-03f, -1.446965687e-03f, -1.435390682e-03f, -1.423813785e-03f, -1.412235015e-03f, -1.400654393e-03f, -1.389071938e-03f, -1.377487671e-03f,
--1.365901612e-03f, -1.354313781e-03f, -1.342724197e-03f, -1.331132882e-03f, -1.319539855e-03f, -1.307945136e-03f, -1.296348746e-03f, -1.284750704e-03f, -1.273151031e-03f, -1.261549747e-03f,
--1.249946872e-03f, -1.238342426e-03f, -1.226736429e-03f, -1.215128901e-03f, -1.203519863e-03f, -1.191909335e-03f, -1.180297336e-03f, -1.168683887e-03f, -1.157069008e-03f, -1.145452720e-03f,
--1.133835041e-03f, -1.122215993e-03f, -1.110595596e-03f, -1.098973869e-03f, -1.087350834e-03f, -1.075726509e-03f, -1.064100915e-03f, -1.052474073e-03f, -1.040846002e-03f, -1.029216723e-03f,
--1.017586256e-03f, -1.005954620e-03f, -9.943218369e-04f, -9.826879258e-04f, -9.710529071e-04f, -9.594168010e-04f, -9.477796276e-04f, -9.361414070e-04f, -9.245021595e-04f, -9.128619052e-04f,
--9.012206643e-04f, -8.895784569e-04f, -8.779353032e-04f, -8.662912233e-04f, -8.546462375e-04f, -8.430003658e-04f, -8.313536286e-04f, -8.197060458e-04f, -8.080576377e-04f, -7.964084244e-04f,
--7.847584262e-04f, -7.731076632e-04f, -7.614561555e-04f, -7.498039233e-04f, -7.381509868e-04f, -7.264973662e-04f, -7.148430817e-04f, -7.031881533e-04f, -6.915326013e-04f, -6.798764458e-04f,
--6.682197070e-04f, -6.565624051e-04f, -6.449045602e-04f, -6.332461926e-04f, -6.215873223e-04f, -6.099279696e-04f, -5.982681546e-04f, -5.866078975e-04f, -5.749472185e-04f, -5.632861377e-04f,
--5.516246752e-04f, -5.399628514e-04f, -5.283006862e-04f, -5.166382000e-04f, -5.049754128e-04f, -4.933123448e-04f, -4.816490162e-04f, -4.699854472e-04f, -4.583216578e-04f, -4.466576684e-04f,
--4.349934990e-04f, -4.233291698e-04f, -4.116647010e-04f, -4.000001126e-04f, -3.883354250e-04f, -3.766706582e-04f, -3.650058324e-04f, -3.533409678e-04f, -3.416760844e-04f, -3.300112026e-04f,
--3.183463423e-04f, -3.066815239e-04f, -2.950167673e-04f, -2.833520928e-04f, -2.716875206e-04f, -2.600230707e-04f, -2.483587633e-04f, -2.366946186e-04f, -2.250306567e-04f, -2.133668977e-04f,
--2.017033618e-04f, -1.900400692e-04f, -1.783770399e-04f, -1.667142942e-04f, -1.550518521e-04f, -1.433897337e-04f, -1.317279593e-04f, -1.200665489e-04f, -1.084055226e-04f, -9.674490071e-05f,
--8.508470319e-05f, -7.342495023e-05f, -6.176566193e-05f, -5.010685842e-05f, -3.844855981e-05f, -2.679078623e-05f, -1.513355779e-05f, -3.476894598e-06f, 8.179183231e-06f, 1.983465559e-05f,
-3.148950237e-05f, 4.314370347e-05f, 5.479723878e-05f, 6.645008821e-05f, 7.810223166e-05f, 8.975364903e-05f, 1.014043202e-04f, 1.130542252e-04f, 1.247033437e-04f, 1.363516559e-04f,
-1.479991415e-04f, 1.596457805e-04f, 1.712915528e-04f, 1.829364384e-04f, 1.945804171e-04f, 2.062234690e-04f, 2.178655738e-04f, 2.295067116e-04f, 2.411468623e-04f, 2.527860058e-04f,
-2.644241222e-04f, 2.760611912e-04f, 2.876971929e-04f, 2.993321072e-04f, 3.109659141e-04f, 3.225985935e-04f, 3.342301254e-04f, 3.458604898e-04f, 3.574896665e-04f, 3.691176357e-04f,
-3.807443772e-04f, 3.923698710e-04f, 4.039940971e-04f, 4.156170356e-04f, 4.272386663e-04f, 4.388589692e-04f, 4.504779244e-04f, 4.620955118e-04f, 4.737117115e-04f, 4.853265034e-04f,
-4.969398676e-04f, 5.085517840e-04f, 5.201622327e-04f, 5.317711937e-04f, 5.433786469e-04f, 5.549845725e-04f, 5.665889504e-04f, 5.781917607e-04f, 5.897929834e-04f, 6.013925986e-04f,
-6.129905862e-04f, 6.245869264e-04f, 6.361815991e-04f, 6.477745845e-04f, 6.593658626e-04f, 6.709554134e-04f, 6.825432170e-04f, 6.941292535e-04f, 7.057135029e-04f, 7.172959454e-04f,
-7.288765609e-04f, 7.404553297e-04f, 7.520322318e-04f, 7.636072472e-04f, 7.751803561e-04f, 7.867515385e-04f, 7.983207747e-04f, 8.098880446e-04f, 8.214533284e-04f, 8.330166063e-04f,
-8.445778583e-04f, 8.561370645e-04f, 8.676942052e-04f, 8.792492604e-04f, 8.908022103e-04f, 9.023530351e-04f, 9.139017148e-04f, 9.254482296e-04f, 9.369925598e-04f, 9.485346854e-04f,
-9.600745867e-04f, 9.716122437e-04f, 9.831476368e-04f, 9.946807460e-04f, 1.006211552e-03f, 1.017740034e-03f, 1.029266173e-03f, 1.040789949e-03f, 1.052311342e-03f, 1.063830332e-03f,
-1.075346900e-03f, 1.086861026e-03f, 1.098372690e-03f, 1.109881872e-03f, 1.121388553e-03f, 1.132892712e-03f, 1.144394331e-03f, 1.155893389e-03f, 1.167389866e-03f, 1.178883744e-03f,
-1.190375001e-03f, 1.201863619e-03f, 1.213349577e-03f, 1.224832857e-03f, 1.236313437e-03f, 1.247791300e-03f, 1.259266424e-03f, 1.270738790e-03f, 1.282208379e-03f, 1.293675170e-03f,
-1.305139145e-03f, 1.316600283e-03f, 1.328058565e-03f, 1.339513971e-03f, 1.350966482e-03f, 1.362416078e-03f, 1.373862738e-03f, 1.385306445e-03f, 1.396747177e-03f, 1.408184916e-03f,
-1.419619642e-03f, 1.431051335e-03f, 1.442479975e-03f, 1.453905544e-03f, 1.465328020e-03f, 1.476747386e-03f, 1.488163621e-03f, 1.499576705e-03f, 1.510986620e-03f, 1.522393345e-03f,
-1.533796862e-03f, 1.545197149e-03f, 1.556594189e-03f, 1.567987961e-03f, 1.579378446e-03f, 1.590765625e-03f, 1.602149477e-03f, 1.613529984e-03f, 1.624907126e-03f, 1.636280883e-03f,
-1.647651236e-03f, 1.659018165e-03f, 1.670381652e-03f, 1.681741676e-03f, 1.693098218e-03f, 1.704451259e-03f, 1.715800779e-03f, 1.727146759e-03f, 1.738489179e-03f, 1.749828020e-03f,
-1.761163262e-03f, 1.772494887e-03f, 1.783822874e-03f, 1.795147205e-03f, 1.806467860e-03f, 1.817784819e-03f, 1.829098064e-03f, 1.840407574e-03f, 1.851713331e-03f, 1.863015315e-03f,
-1.874313507e-03f, 1.885607888e-03f, 1.896898437e-03f, 1.908185137e-03f, 1.919467967e-03f, 1.930746908e-03f, 1.942021942e-03f, 1.953293048e-03f, 1.964560207e-03f, 1.975823401e-03f,
-1.987082609e-03f, 1.998337814e-03f, 2.009588994e-03f, 2.020836132e-03f, 2.032079208e-03f, 2.043318202e-03f, 2.054553096e-03f, 2.065783871e-03f, 2.077010506e-03f, 2.088232984e-03f,
-2.099451284e-03f, 2.110665387e-03f, 2.121875276e-03f, 2.133080929e-03f, 2.144282328e-03f, 2.155479455e-03f, 2.166672289e-03f, 2.177860813e-03f, 2.189045005e-03f, 2.200224849e-03f,
-2.211400323e-03f, 2.222571410e-03f, 2.233738091e-03f, 2.244900345e-03f, 2.256058155e-03f, 2.267211500e-03f, 2.278360363e-03f, 2.289504724e-03f, 2.300644563e-03f, 2.311779863e-03f,
-2.322910604e-03f, 2.334036766e-03f, 2.345158332e-03f, 2.356275281e-03f, 2.367387596e-03f, 2.378495256e-03f, 2.389598244e-03f, 2.400696540e-03f, 2.411790124e-03f, 2.422878980e-03f,
-2.433963086e-03f, 2.445042425e-03f, 2.456116978e-03f, 2.467186725e-03f, 2.478251648e-03f, 2.489311728e-03f, 2.500366946e-03f, 2.511417283e-03f, 2.522462720e-03f, 2.533503239e-03f,
-2.544538821e-03f, 2.555569446e-03f, 2.566595097e-03f, 2.577615753e-03f, 2.588631398e-03f, 2.599642010e-03f, 2.610647573e-03f, 2.621648067e-03f, 2.632643474e-03f, 2.643633774e-03f,
-2.654618949e-03f, 2.665598980e-03f, 2.676573849e-03f, 2.687543536e-03f, 2.698508024e-03f, 2.709467293e-03f, 2.720421325e-03f, 2.731370101e-03f, 2.742313602e-03f, 2.753251811e-03f,
-2.764184707e-03f, 2.775112273e-03f, 2.786034490e-03f, 2.796951340e-03f, 2.807862803e-03f, 2.818768861e-03f, 2.829669496e-03f, 2.840564689e-03f, 2.851454422e-03f, 2.862338675e-03f,
-2.873217431e-03f, 2.884090671e-03f, 2.894958377e-03f, 2.905820529e-03f, 2.916677110e-03f, 2.927528101e-03f, 2.938373483e-03f, 2.949213238e-03f, 2.960047348e-03f, 2.970875794e-03f,
-2.981698558e-03f, 2.992515621e-03f, 3.003326966e-03f, 3.014132572e-03f, 3.024932423e-03f, 3.035726500e-03f, 3.046514784e-03f, 3.057297257e-03f, 3.068073902e-03f, 3.078844698e-03f,
-3.089609629e-03f, 3.100368675e-03f, 3.111121819e-03f, 3.121869043e-03f, 3.132610327e-03f, 3.143345654e-03f, 3.154075006e-03f, 3.164798364e-03f, 3.175515709e-03f, 3.186227025e-03f,
-3.196932293e-03f, 3.207631493e-03f, 3.218324609e-03f, 3.229011623e-03f, 3.239692515e-03f, 3.250367268e-03f, 3.261035863e-03f, 3.271698283e-03f, 3.282354510e-03f, 3.293004525e-03f,
-3.303648310e-03f, 3.314285847e-03f, 3.324917118e-03f, 3.335542106e-03f, 3.346160791e-03f, 3.356773157e-03f, 3.367379184e-03f, 3.377978856e-03f, 3.388572153e-03f, 3.399159059e-03f,
-3.409739554e-03f, 3.420313622e-03f, 3.430881244e-03f, 3.441442401e-03f, 3.451997078e-03f, 3.462545254e-03f, 3.473086913e-03f, 3.483622037e-03f, 3.494150608e-03f, 3.504672607e-03f,
-3.515188017e-03f, 3.525696821e-03f, 3.536199000e-03f, 3.546694536e-03f, 3.557183413e-03f, 3.567665611e-03f, 3.578141114e-03f, 3.588609903e-03f, 3.599071960e-03f, 3.609527269e-03f,
-3.619975811e-03f, 3.630417568e-03f, 3.640852523e-03f, 3.651280659e-03f, 3.661701957e-03f, 3.672116400e-03f, 3.682523969e-03f, 3.692924649e-03f, 3.703318420e-03f, 3.713705266e-03f,
-3.724085169e-03f, 3.734458110e-03f, 3.744824073e-03f, 3.755183041e-03f, 3.765534994e-03f, 3.775879917e-03f, 3.786217791e-03f, 3.796548599e-03f, 3.806872324e-03f, 3.817188947e-03f,
-3.827498452e-03f, 3.837800821e-03f, 3.848096036e-03f, 3.858384081e-03f, 3.868664938e-03f, 3.878938588e-03f, 3.889205016e-03f, 3.899464204e-03f, 3.909716133e-03f, 3.919960788e-03f,
-3.930198150e-03f, 3.940428203e-03f, 3.950650928e-03f, 3.960866309e-03f, 3.971074329e-03f, 3.981274969e-03f, 3.991468214e-03f, 4.001654045e-03f, 4.011832445e-03f, 4.022003398e-03f,
-4.032166886e-03f, 4.042322892e-03f, 4.052471398e-03f, 4.062612387e-03f, 4.072745844e-03f, 4.082871749e-03f, 4.092990086e-03f, 4.103100839e-03f, 4.113203989e-03f, 4.123299521e-03f,
-4.133387416e-03f, 4.143467658e-03f, 4.153540229e-03f, 4.163605114e-03f, 4.173662294e-03f, 4.183711753e-03f, 4.193753473e-03f, 4.203787439e-03f, 4.213813632e-03f, 4.223832036e-03f,
-4.233842635e-03f, 4.243845410e-03f, 4.253840346e-03f, 4.263827425e-03f, 4.273806631e-03f, 4.283777946e-03f, 4.293741354e-03f, 4.303696838e-03f, 4.313644381e-03f, 4.323583967e-03f,
-4.333515579e-03f, 4.343439199e-03f, 4.353354812e-03f, 4.363262400e-03f, 4.373161947e-03f, 4.383053436e-03f, 4.392936850e-03f, 4.402812173e-03f, 4.412679388e-03f, 4.422538478e-03f,
-4.432389427e-03f, 4.442232219e-03f, 4.452066836e-03f, 4.461893262e-03f, 4.471711480e-03f, 4.481521474e-03f, 4.491323228e-03f, 4.501116724e-03f, 4.510901947e-03f, 4.520678880e-03f,
-4.530447506e-03f, 4.540207809e-03f, 4.549959773e-03f, 4.559703381e-03f, 4.569438616e-03f, 4.579165462e-03f, 4.588883904e-03f, 4.598593924e-03f, 4.608295506e-03f, 4.617988634e-03f,
-4.627673291e-03f, 4.637349462e-03f, 4.647017129e-03f, 4.656676278e-03f, 4.666326890e-03f, 4.675968951e-03f, 4.685602444e-03f, 4.695227352e-03f, 4.704843660e-03f, 4.714451351e-03f,
-4.724050409e-03f, 4.733640819e-03f, 4.743222563e-03f, 4.752795626e-03f, 4.762359992e-03f, 4.771915644e-03f, 4.781462567e-03f, 4.791000745e-03f, 4.800530161e-03f, 4.810050799e-03f,
-4.819562643e-03f, 4.829065679e-03f, 4.838559888e-03f, 4.848045256e-03f, 4.857521767e-03f, 4.866989404e-03f, 4.876448152e-03f, 4.885897995e-03f, 4.895338916e-03f, 4.904770901e-03f,
-4.914193933e-03f, 4.923607997e-03f, 4.933013076e-03f, 4.942409155e-03f, 4.951796218e-03f, 4.961174249e-03f, 4.970543233e-03f, 4.979903153e-03f, 4.989253995e-03f, 4.998595742e-03f,
-5.007928379e-03f, 5.017251890e-03f, 5.026566259e-03f, 5.035871471e-03f, 5.045167510e-03f, 5.054454361e-03f, 5.063732007e-03f, 5.073000435e-03f, 5.082259627e-03f, 5.091509568e-03f,
-5.100750243e-03f, 5.109981637e-03f, 5.119203733e-03f, 5.128416517e-03f, 5.137619973e-03f, 5.146814085e-03f, 5.155998839e-03f, 5.165174218e-03f, 5.174340207e-03f, 5.183496792e-03f,
-5.192643956e-03f, 5.201781684e-03f, 5.210909961e-03f, 5.220028772e-03f, 5.229138102e-03f, 5.238237935e-03f, 5.247328255e-03f, 5.256409048e-03f, 5.265480299e-03f, 5.274541992e-03f,
-5.283594113e-03f, 5.292636645e-03f, 5.301669574e-03f, 5.310692885e-03f, 5.319706562e-03f, 5.328710591e-03f, 5.337704956e-03f, 5.346689643e-03f, 5.355664636e-03f, 5.364629921e-03f,
-5.373585482e-03f, 5.382531304e-03f, 5.391467373e-03f, 5.400393673e-03f, 5.409310190e-03f, 5.418216908e-03f, 5.427113814e-03f, 5.436000891e-03f, 5.444878125e-03f, 5.453745501e-03f,
-5.462603004e-03f, 5.471450621e-03f, 5.480288335e-03f, 5.489116131e-03f, 5.497933997e-03f, 5.506741915e-03f, 5.515539873e-03f, 5.524327854e-03f, 5.533105845e-03f, 5.541873831e-03f,
-5.550631797e-03f, 5.559379729e-03f, 5.568117611e-03f, 5.576845429e-03f, 5.585563170e-03f, 5.594270817e-03f, 5.602968358e-03f, 5.611655776e-03f, 5.620333058e-03f, 5.629000189e-03f,
-5.637657155e-03f, 5.646303941e-03f, 5.654940533e-03f, 5.663566916e-03f, 5.672183077e-03f, 5.680789000e-03f, 5.689384671e-03f, 5.697970077e-03f, 5.706545202e-03f, 5.715110032e-03f,
-5.723664554e-03f, 5.732208752e-03f, 5.740742613e-03f, 5.749266123e-03f, 5.757779266e-03f, 5.766282030e-03f, 5.774774399e-03f, 5.783256360e-03f, 5.791727899e-03f, 5.800189001e-03f,
-5.808639653e-03f, 5.817079839e-03f, 5.825509547e-03f, 5.833928762e-03f, 5.842337471e-03f, 5.850735658e-03f, 5.859123311e-03f, 5.867500415e-03f, 5.875866957e-03f, 5.884222922e-03f,
-5.892568296e-03f, 5.900903066e-03f, 5.909227217e-03f, 5.917540737e-03f, 5.925843610e-03f, 5.934135824e-03f, 5.942417365e-03f, 5.950688218e-03f, 5.958948370e-03f, 5.967197807e-03f,
-5.975436516e-03f, 5.983664483e-03f, 5.991881694e-03f, 6.000088135e-03f, 6.008283793e-03f, 6.016468655e-03f, 6.024642706e-03f, 6.032805933e-03f, 6.040958323e-03f, 6.049099862e-03f,
-6.057230536e-03f, 6.065350332e-03f, 6.073459237e-03f, 6.081557237e-03f, 6.089644318e-03f, 6.097720468e-03f, 6.105785672e-03f, 6.113839918e-03f, 6.121883192e-03f, 6.129915480e-03f,
-6.137936770e-03f, 6.145947049e-03f, 6.153946301e-03f, 6.161934516e-03f, 6.169911678e-03f, 6.177877776e-03f, 6.185832796e-03f, 6.193776724e-03f, 6.201709548e-03f, 6.209631254e-03f,
-6.217541830e-03f, 6.225441261e-03f, 6.233329536e-03f, 6.241206641e-03f, 6.249072562e-03f, 6.256927288e-03f, 6.264770804e-03f, 6.272603099e-03f, 6.280424158e-03f, 6.288233970e-03f,
-6.296032520e-03f, 6.303819797e-03f, 6.311595787e-03f, 6.319360478e-03f, 6.327113856e-03f, 6.334855909e-03f, 6.342586624e-03f, 6.350305988e-03f, 6.358013989e-03f, 6.365710613e-03f,
-6.373395848e-03f, 6.381069682e-03f, 6.388732101e-03f, 6.396383093e-03f, 6.404022646e-03f, 6.411650746e-03f, 6.419267381e-03f, 6.426872539e-03f, 6.434466206e-03f, 6.442048371e-03f,
-6.449619021e-03f, 6.457178144e-03f, 6.464725726e-03f, 6.472261755e-03f, 6.479786220e-03f, 6.487299107e-03f, 6.494800405e-03f, 6.502290100e-03f, 6.509768181e-03f, 6.517234635e-03f,
-6.524689450e-03f, 6.532132613e-03f, 6.539564112e-03f, 6.546983936e-03f, 6.554392071e-03f, 6.561788506e-03f, 6.569173229e-03f, 6.576546226e-03f, 6.583907487e-03f, 6.591256999e-03f,
-6.598594749e-03f, 6.605920727e-03f, 6.613234919e-03f, 6.620537313e-03f, 6.627827899e-03f, 6.635106663e-03f, 6.642373594e-03f, 6.649628679e-03f, 6.656871907e-03f, 6.664103266e-03f,
-6.671322744e-03f, 6.678530329e-03f, 6.685726010e-03f, 6.692909774e-03f, 6.700081609e-03f, 6.707241505e-03f, 6.714389448e-03f, 6.721525428e-03f, 6.728649432e-03f, 6.735761449e-03f,
-6.742861467e-03f, 6.749949475e-03f, 6.757025461e-03f, 6.764089413e-03f, 6.771141320e-03f, 6.778181170e-03f, 6.785208952e-03f, 6.792224653e-03f, 6.799228263e-03f, 6.806219771e-03f,
-6.813199163e-03f, 6.820166430e-03f, 6.827121560e-03f, 6.834064541e-03f, 6.840995361e-03f, 6.847914011e-03f, 6.854820477e-03f, 6.861714750e-03f, 6.868596817e-03f, 6.875466667e-03f,
-6.882324290e-03f, 6.889169673e-03f, 6.896002806e-03f, 6.902823678e-03f, 6.909632277e-03f, 6.916428592e-03f, 6.923212612e-03f, 6.929984326e-03f, 6.936743723e-03f, 6.943490791e-03f,
-6.950225521e-03f, 6.956947900e-03f, 6.963657918e-03f, 6.970355563e-03f, 6.977040826e-03f, 6.983713695e-03f, 6.990374158e-03f, 6.997022206e-03f, 7.003657827e-03f, 7.010281010e-03f,
-7.016891745e-03f, 7.023490021e-03f, 7.030075827e-03f, 7.036649153e-03f, 7.043209987e-03f, 7.049758319e-03f, 7.056294138e-03f, 7.062817434e-03f, 7.069328195e-03f, 7.075826412e-03f,
-7.082312074e-03f, 7.088785169e-03f, 7.095245689e-03f, 7.101693621e-03f, 7.108128956e-03f, 7.114551684e-03f, 7.120961792e-03f, 7.127359272e-03f, 7.133744113e-03f, 7.140116304e-03f,
-7.146475835e-03f, 7.152822696e-03f, 7.159156876e-03f, 7.165478366e-03f, 7.171787154e-03f, 7.178083230e-03f, 7.184366585e-03f, 7.190637208e-03f, 7.196895088e-03f, 7.203140217e-03f,
-7.209372583e-03f, 7.215592176e-03f, 7.221798987e-03f, 7.227993005e-03f, 7.234174220e-03f, 7.240342622e-03f, 7.246498202e-03f, 7.252640949e-03f, 7.258770853e-03f, 7.264887904e-03f,
-7.270992092e-03f, 7.277083408e-03f, 7.283161842e-03f, 7.289227383e-03f, 7.295280022e-03f, 7.301319750e-03f, 7.307346555e-03f, 7.313360429e-03f, 7.319361362e-03f, 7.325349345e-03f,
-7.331324366e-03f, 7.337286417e-03f, 7.343235489e-03f, 7.349171571e-03f, 7.355094653e-03f, 7.361004728e-03f, 7.366901783e-03f, 7.372785811e-03f, 7.378656802e-03f, 7.384514746e-03f,
-7.390359634e-03f, 7.396191456e-03f, 7.402010203e-03f, 7.407815866e-03f, 7.413608434e-03f, 7.419387900e-03f, 7.425154253e-03f, 7.430907484e-03f, 7.436647584e-03f, 7.442374544e-03f,
-7.448088354e-03f, 7.453789006e-03f, 7.459476489e-03f, 7.465150796e-03f, 7.470811916e-03f, 7.476459840e-03f, 7.482094561e-03f, 7.487716067e-03f, 7.493324352e-03f, 7.498919404e-03f,
-7.504501216e-03f, 7.510069779e-03f, 7.515625082e-03f, 7.521167119e-03f, 7.526695879e-03f, 7.532211354e-03f, 7.537713535e-03f, 7.543202412e-03f, 7.548677979e-03f, 7.554140224e-03f,
-7.559589140e-03f, 7.565024719e-03f, 7.570446950e-03f, 7.575855826e-03f, 7.581251338e-03f, 7.586633478e-03f, 7.592002236e-03f, 7.597357603e-03f, 7.602699573e-03f, 7.608028135e-03f,
-7.613343282e-03f, 7.618645004e-03f, 7.623933294e-03f, 7.629208143e-03f, 7.634469542e-03f, 7.639717484e-03f, 7.644951959e-03f, 7.650172959e-03f, 7.655380476e-03f, 7.660574503e-03f,
-7.665755029e-03f, 7.670922048e-03f, 7.676075550e-03f, 7.681215528e-03f, 7.686341974e-03f, 7.691454879e-03f, 7.696554235e-03f, 7.701640034e-03f, 7.706712268e-03f, 7.711770928e-03f,
-7.716816008e-03f, 7.721847498e-03f, 7.726865391e-03f, 7.731869679e-03f, 7.736860354e-03f, 7.741837407e-03f, 7.746800832e-03f, 7.751750619e-03f, 7.756686762e-03f, 7.761609252e-03f,
-7.766518081e-03f, 7.771413243e-03f, 7.776294728e-03f, 7.781162530e-03f, 7.786016640e-03f, 7.790857051e-03f, 7.795683755e-03f, 7.800496745e-03f, 7.805296013e-03f, 7.810081551e-03f,
-7.814853351e-03f, 7.819611407e-03f, 7.824355711e-03f, 7.829086254e-03f, 7.833803031e-03f, 7.838506032e-03f, 7.843195251e-03f, 7.847870681e-03f, 7.852532314e-03f, 7.857180142e-03f,
-7.861814159e-03f, 7.866434357e-03f, 7.871040728e-03f, 7.875633266e-03f, 7.880211963e-03f, 7.884776813e-03f, 7.889327807e-03f, 7.893864938e-03f, 7.898388201e-03f, 7.902897586e-03f,
-7.907393088e-03f, 7.911874700e-03f, 7.916342413e-03f, 7.920796222e-03f, 7.925236119e-03f, 7.929662097e-03f, 7.934074149e-03f, 7.938472269e-03f, 7.942856450e-03f, 7.947226684e-03f,
-7.951582964e-03f, 7.955925285e-03f, 7.960253639e-03f, 7.964568019e-03f, 7.968868419e-03f, 7.973154832e-03f, 7.977427251e-03f, 7.981685669e-03f, 7.985930081e-03f, 7.990160479e-03f,
-7.994376856e-03f, 7.998579207e-03f, 8.002767524e-03f, 8.006941801e-03f, 8.011102031e-03f, 8.015248209e-03f, 8.019380327e-03f, 8.023498379e-03f, 8.027602359e-03f, 8.031692261e-03f,
-8.035768077e-03f, 8.039829802e-03f, 8.043877430e-03f, 8.047910954e-03f, 8.051930367e-03f, 8.055935664e-03f, 8.059926839e-03f, 8.063903884e-03f, 8.067866795e-03f, 8.071815565e-03f,
-8.075750187e-03f, 8.079670657e-03f, 8.083576967e-03f, 8.087469111e-03f, 8.091347084e-03f, 8.095210880e-03f, 8.099060493e-03f, 8.102895916e-03f, 8.106717145e-03f, 8.110524172e-03f,
-8.114316992e-03f, 8.118095600e-03f, 8.121859989e-03f, 8.125610153e-03f, 8.129346088e-03f, 8.133067787e-03f, 8.136775244e-03f, 8.140468454e-03f, 8.144147411e-03f, 8.147812110e-03f,
-8.151462545e-03f, 8.155098710e-03f, 8.158720599e-03f, 8.162328208e-03f, 8.165921531e-03f, 8.169500561e-03f, 8.173065295e-03f, 8.176615726e-03f, 8.180151848e-03f, 8.183673657e-03f,
-8.187181148e-03f, 8.190674314e-03f, 8.194153150e-03f, 8.197617652e-03f, 8.201067814e-03f, 8.204503630e-03f, 8.207925096e-03f, 8.211332207e-03f, 8.214724956e-03f, 8.218103340e-03f,
-8.221467352e-03f, 8.224816988e-03f, 8.228152243e-03f, 8.231473112e-03f, 8.234779589e-03f, 8.238071670e-03f, 8.241349350e-03f, 8.244612624e-03f, 8.247861487e-03f, 8.251095933e-03f,
-8.254315959e-03f, 8.257521559e-03f, 8.260712729e-03f, 8.263889464e-03f, 8.267051758e-03f, 8.270199608e-03f, 8.273333008e-03f, 8.276451954e-03f, 8.279556442e-03f, 8.282646466e-03f,
-8.285722022e-03f, 8.288783105e-03f, 8.291829711e-03f, 8.294861835e-03f, 8.297879474e-03f, 8.300882621e-03f, 8.303871273e-03f, 8.306845426e-03f, 8.309805075e-03f, 8.312750215e-03f,
-8.315680843e-03f, 8.318596954e-03f, 8.321498543e-03f, 8.324385607e-03f, 8.327258140e-03f, 8.330116140e-03f, 8.332959601e-03f, 8.335788520e-03f, 8.338602892e-03f, 8.341402714e-03f,
-8.344187980e-03f, 8.346958688e-03f, 8.349714832e-03f, 8.352456410e-03f, 8.355183416e-03f, 8.357895847e-03f, 8.360593700e-03f, 8.363276969e-03f, 8.365945652e-03f, 8.368599744e-03f,
-8.371239242e-03f, 8.373864141e-03f, 8.376474438e-03f, 8.379070130e-03f, 8.381651211e-03f, 8.384217679e-03f, 8.386769531e-03f, 8.389306761e-03f, 8.391829367e-03f, 8.394337345e-03f,
-8.396830692e-03f, 8.399309403e-03f, 8.401773475e-03f, 8.404222906e-03f, 8.406657690e-03f, 8.409077826e-03f, 8.411483309e-03f, 8.413874135e-03f, 8.416250303e-03f, 8.418611807e-03f,
-8.420958646e-03f, 8.423290815e-03f, 8.425608311e-03f, 8.427911131e-03f, 8.430199272e-03f, 8.432472731e-03f, 8.434731504e-03f, 8.436975588e-03f, 8.439204980e-03f, 8.441419677e-03f,
-8.443619676e-03f, 8.445804974e-03f, 8.447975568e-03f, 8.450131454e-03f, 8.452272630e-03f, 8.454399093e-03f, 8.456510840e-03f, 8.458607868e-03f, 8.460690175e-03f, 8.462757756e-03f,
-8.464810610e-03f, 8.466848733e-03f, 8.468872123e-03f, 8.470880778e-03f, 8.472874694e-03f, 8.474853868e-03f, 8.476818299e-03f, 8.478767983e-03f, 8.480702917e-03f, 8.482623100e-03f,
-8.484528528e-03f, 8.486419200e-03f, 8.488295112e-03f, 8.490156261e-03f, 8.492002647e-03f, 8.493834265e-03f, 8.495651114e-03f, 8.497453192e-03f, 8.499240495e-03f, 8.501013022e-03f,
-8.502770770e-03f, 8.504513737e-03f, 8.506241921e-03f, 8.507955320e-03f, 8.509653930e-03f, 8.511337751e-03f, 8.513006779e-03f, 8.514661013e-03f, 8.516300451e-03f, 8.517925091e-03f,
-8.519534930e-03f, 8.521129966e-03f, 8.522710198e-03f, 8.524275624e-03f, 8.525826240e-03f, 8.527362047e-03f, 8.528883041e-03f, 8.530389221e-03f, 8.531880585e-03f, 8.533357131e-03f,
-8.534818858e-03f, 8.536265763e-03f, 8.537697844e-03f, 8.539115101e-03f, 8.540517531e-03f, 8.541905133e-03f, 8.543277905e-03f, 8.544635846e-03f, 8.545978953e-03f, 8.547307225e-03f,
-8.548620661e-03f, 8.549919260e-03f, 8.551203019e-03f, 8.552471937e-03f, 8.553726013e-03f, 8.554965246e-03f, 8.556189633e-03f, 8.557399174e-03f, 8.558593867e-03f, 8.559773712e-03f,
-8.560938706e-03f, 8.562088848e-03f, 8.563224137e-03f, 8.564344573e-03f, 8.565450153e-03f, 8.566540877e-03f, 8.567616743e-03f, 8.568677751e-03f, 8.569723899e-03f, 8.570755186e-03f,
-8.571771612e-03f, 8.572773174e-03f, 8.573759873e-03f, 8.574731707e-03f, 8.575688676e-03f, 8.576630778e-03f, 8.577558012e-03f, 8.578470378e-03f, 8.579367875e-03f, 8.580250502e-03f,
-8.581118259e-03f, 8.581971144e-03f, 8.582809156e-03f, 8.583632296e-03f, 8.584440563e-03f, 8.585233955e-03f, 8.586012472e-03f, 8.586776114e-03f, 8.587524880e-03f, 8.588258770e-03f,
-8.588977782e-03f, 8.589681917e-03f, 8.590371174e-03f, 8.591045553e-03f, 8.591705053e-03f, 8.592349673e-03f, 8.592979414e-03f, 8.593594275e-03f, 8.594194256e-03f, 8.594779357e-03f,
-8.595349576e-03f, 8.595904915e-03f, 8.596445372e-03f, 8.596970948e-03f, 8.597481642e-03f, 8.597977455e-03f, 8.598458386e-03f, 8.598924435e-03f, 8.599375602e-03f, 8.599811887e-03f,
-8.600233291e-03f, 8.600639812e-03f, 8.601031451e-03f, 8.601408209e-03f, 8.601770085e-03f, 8.602117079e-03f, 8.602449192e-03f, 8.602766424e-03f, 8.603068775e-03f, 8.603356244e-03f,
-8.603628834e-03f, 8.603886543e-03f, 8.604129372e-03f, 8.604357321e-03f, 8.604570391e-03f, 8.604768582e-03f, 8.604951895e-03f, 8.605120330e-03f, 8.605273887e-03f, 8.605412566e-03f,
-8.605536370e-03f, 8.605645297e-03f, 8.605739349e-03f, 8.605818526e-03f, 8.605882828e-03f, 8.605932257e-03f, 8.605966813e-03f, 8.605986497e-03f, 8.605991309e-03f, 8.605981250e-03f,
-8.605956321e-03f, 8.605916523e-03f, 8.605861856e-03f, 8.605792322e-03f, 8.605707921e-03f, 8.605608654e-03f, 8.605494523e-03f, 8.605365527e-03f, 8.605221668e-03f, 8.605062947e-03f,
-8.604889366e-03f, 8.604700924e-03f, 8.604497624e-03f, 8.604279466e-03f, 8.604046451e-03f, 8.603798580e-03f, 8.603535856e-03f, 8.603258278e-03f, 8.602965849e-03f, 8.602658568e-03f,
-8.602336439e-03f, 8.601999462e-03f, 8.601647637e-03f, 8.601280968e-03f, 8.600899454e-03f, 8.600503099e-03f, 8.600091901e-03f, 8.599665865e-03f, 8.599224990e-03f, 8.598769278e-03f,
-8.598298732e-03f, 8.597813352e-03f, 8.597313140e-03f, 8.596798097e-03f, 8.596268226e-03f, 8.595723528e-03f, 8.595164004e-03f, 8.594589657e-03f, 8.594000488e-03f, 8.593396499e-03f,
-8.592777691e-03f, 8.592144067e-03f, 8.591495628e-03f, 8.590832377e-03f, 8.590154314e-03f, 8.589461443e-03f, 8.588753764e-03f, 8.588031281e-03f, 8.587293994e-03f, 8.586541906e-03f,
-8.585775019e-03f, 8.584993336e-03f, 8.584196857e-03f, 8.583385586e-03f, 8.582559524e-03f, 8.581718674e-03f, 8.580863037e-03f, 8.579992617e-03f, 8.579107414e-03f, 8.578207433e-03f,
-8.577292674e-03f, 8.576363140e-03f, 8.575418834e-03f, 8.574459758e-03f, 8.573485914e-03f, 8.572497305e-03f, 8.571493933e-03f, 8.570475801e-03f, 8.569442911e-03f, 8.568395265e-03f,
-8.567332867e-03f, 8.566255719e-03f, 8.565163823e-03f, 8.564057182e-03f, 8.562935799e-03f, 8.561799676e-03f, 8.560648817e-03f, 8.559483223e-03f, 8.558302898e-03f, 8.557107844e-03f,
-8.555898065e-03f, 8.554673562e-03f, 8.553434340e-03f, 8.552180400e-03f, 8.550911746e-03f, 8.549628380e-03f, 8.548330306e-03f, 8.547017527e-03f, 8.545690045e-03f, 8.544347864e-03f,
-8.542990986e-03f, 8.541619416e-03f, 8.540233155e-03f, 8.538832207e-03f, 8.537416575e-03f, 8.535986263e-03f, 8.534541273e-03f, 8.533081609e-03f, 8.531607274e-03f, 8.530118272e-03f,
-8.528614605e-03f, 8.527096277e-03f, 8.525563291e-03f, 8.524015652e-03f, 8.522453361e-03f, 8.520876423e-03f, 8.519284841e-03f, 8.517678619e-03f, 8.516057759e-03f, 8.514422267e-03f,
-8.512772144e-03f, 8.511107396e-03f, 8.509428024e-03f, 8.507734034e-03f, 8.506025429e-03f, 8.504302211e-03f, 8.502564386e-03f, 8.500811957e-03f, 8.499044927e-03f, 8.497263301e-03f,
-8.495467082e-03f, 8.493656274e-03f, 8.491830881e-03f, 8.489990906e-03f, 8.488136355e-03f, 8.486267230e-03f, 8.484383535e-03f, 8.482485276e-03f, 8.480572455e-03f, 8.478645076e-03f,
-8.476703144e-03f, 8.474746664e-03f, 8.472775638e-03f, 8.470790071e-03f, 8.468789967e-03f, 8.466775331e-03f, 8.464746166e-03f, 8.462702477e-03f, 8.460644269e-03f, 8.458571545e-03f,
-8.456484309e-03f, 8.454382567e-03f, 8.452266322e-03f, 8.450135579e-03f, 8.447990342e-03f, 8.445830616e-03f, 8.443656405e-03f, 8.441467714e-03f, 8.439264547e-03f, 8.437046908e-03f,
-8.434814803e-03f, 8.432568236e-03f, 8.430307211e-03f, 8.428031733e-03f, 8.425741807e-03f, 8.423437437e-03f, 8.421118629e-03f, 8.418785386e-03f, 8.416437714e-03f, 8.414075617e-03f,
-8.411699101e-03f, 8.409308169e-03f, 8.406902828e-03f, 8.404483081e-03f, 8.402048935e-03f, 8.399600392e-03f, 8.397137460e-03f, 8.394660142e-03f, 8.392168443e-03f, 8.389662369e-03f,
-8.387141925e-03f, 8.384607115e-03f, 8.382057946e-03f, 8.379494421e-03f, 8.376916547e-03f, 8.374324328e-03f, 8.371717769e-03f, 8.369096876e-03f, 8.366461654e-03f, 8.363812109e-03f,
-8.361148245e-03f, 8.358470068e-03f, 8.355777583e-03f, 8.353070795e-03f, 8.350349711e-03f, 8.347614335e-03f, 8.344864673e-03f, 8.342100731e-03f, 8.339322513e-03f, 8.336530026e-03f,
-8.333723275e-03f, 8.330902265e-03f, 8.328067002e-03f, 8.325217492e-03f, 8.322353740e-03f, 8.319475753e-03f, 8.316583535e-03f, 8.313677092e-03f, 8.310756431e-03f, 8.307821556e-03f,
-8.304872474e-03f, 8.301909191e-03f, 8.298931712e-03f, 8.295940043e-03f, 8.292934191e-03f, 8.289914160e-03f, 8.286879958e-03f, 8.283831589e-03f, 8.280769060e-03f, 8.277692377e-03f,
-8.274601546e-03f, 8.271496573e-03f, 8.268377464e-03f, 8.265244225e-03f, 8.262096863e-03f, 8.258935383e-03f, 8.255759791e-03f, 8.252570095e-03f, 8.249366299e-03f, 8.246148411e-03f,
-8.242916436e-03f, 8.239670381e-03f, 8.236410252e-03f, 8.233136056e-03f, 8.229847798e-03f, 8.226545486e-03f, 8.223229125e-03f, 8.219898723e-03f, 8.216554285e-03f, 8.213195818e-03f,
-8.209823329e-03f, 8.206436824e-03f, 8.203036310e-03f, 8.199621793e-03f, 8.196193279e-03f, 8.192750776e-03f, 8.189294291e-03f, 8.185823829e-03f, 8.182339397e-03f, 8.178841003e-03f,
-8.175328653e-03f, 8.171802354e-03f, 8.168262112e-03f, 8.164707935e-03f, 8.161139828e-03f, 8.157557800e-03f, 8.153961857e-03f, 8.150352006e-03f, 8.146728254e-03f, 8.143090607e-03f,
-8.139439073e-03f, 8.135773659e-03f, 8.132094372e-03f, 8.128401219e-03f, 8.124694206e-03f, 8.120973342e-03f, 8.117238633e-03f, 8.113490086e-03f, 8.109727709e-03f, 8.105951508e-03f,
-8.102161492e-03f, 8.098357666e-03f, 8.094540039e-03f, 8.090708618e-03f, 8.086863410e-03f, 8.083004422e-03f, 8.079131663e-03f, 8.075245138e-03f, 8.071344855e-03f, 8.067430823e-03f,
-8.063503048e-03f, 8.059561538e-03f, 8.055606301e-03f, 8.051637344e-03f, 8.047654674e-03f, 8.043658299e-03f, 8.039648226e-03f, 8.035624464e-03f, 8.031587020e-03f, 8.027535902e-03f,
-8.023471117e-03f, 8.019392673e-03f, 8.015300577e-03f, 8.011194839e-03f, 8.007075464e-03f, 8.002942461e-03f, 7.998795839e-03f, 7.994635604e-03f, 7.990461765e-03f, 7.986274329e-03f,
-7.982073305e-03f, 7.977858700e-03f, 7.973630523e-03f, 7.969388781e-03f, 7.965133482e-03f, 7.960864635e-03f, 7.956582247e-03f, 7.952286326e-03f, 7.947976882e-03f, 7.943653921e-03f,
-7.939317452e-03f, 7.934967483e-03f, 7.930604023e-03f, 7.926227079e-03f, 7.921836660e-03f, 7.917432773e-03f, 7.913015428e-03f, 7.908584633e-03f, 7.904140396e-03f, 7.899682725e-03f,
-7.895211629e-03f, 7.890727115e-03f, 7.886229194e-03f, 7.881717872e-03f, 7.877193159e-03f, 7.872655062e-03f, 7.868103592e-03f, 7.863538755e-03f, 7.858960560e-03f, 7.854369017e-03f,
-7.849764134e-03f, 7.845145919e-03f, 7.840514381e-03f, 7.835869528e-03f, 7.831211370e-03f, 7.826539915e-03f, 7.821855172e-03f, 7.817157150e-03f, 7.812445857e-03f, 7.807721302e-03f,
-7.802983494e-03f, 7.798232443e-03f, 7.793468156e-03f, 7.788690642e-03f, 7.783899911e-03f, 7.779095972e-03f, 7.774278833e-03f, 7.769448504e-03f, 7.764604993e-03f, 7.759748310e-03f,
-7.754878463e-03f, 7.749995462e-03f, 7.745099316e-03f, 7.740190034e-03f, 7.735267625e-03f, 7.730332098e-03f, 7.725383462e-03f, 7.720421727e-03f, 7.715446902e-03f, 7.710458996e-03f,
-7.705458018e-03f, 7.700443978e-03f, 7.695416885e-03f, 7.690376748e-03f, 7.685323577e-03f, 7.680257381e-03f, 7.675178170e-03f, 7.670085952e-03f, 7.664980738e-03f, 7.659862537e-03f,
-7.654731358e-03f, 7.649587211e-03f, 7.644430105e-03f, 7.639260050e-03f, 7.634077056e-03f, 7.628881132e-03f, 7.623672288e-03f, 7.618450534e-03f, 7.613215878e-03f, 7.607968332e-03f,
-7.602707903e-03f, 7.597434604e-03f, 7.592148442e-03f, 7.586849428e-03f, 7.581537572e-03f, 7.576212883e-03f, 7.570875371e-03f, 7.565525047e-03f, 7.560161919e-03f, 7.554785999e-03f,
-7.549397295e-03f, 7.543995819e-03f, 7.538581579e-03f, 7.533154586e-03f, 7.527714850e-03f, 7.522262381e-03f, 7.516797188e-03f, 7.511319283e-03f, 7.505828675e-03f, 7.500325374e-03f,
-7.494809391e-03f, 7.489280735e-03f, 7.483739417e-03f, 7.478185447e-03f, 7.472618835e-03f, 7.467039592e-03f, 7.461447727e-03f, 7.455843252e-03f, 7.450226175e-03f, 7.444596509e-03f,
-7.438954263e-03f, 7.433299447e-03f, 7.427632072e-03f, 7.421952148e-03f, 7.416259686e-03f, 7.410554696e-03f, 7.404837189e-03f, 7.399107175e-03f, 7.393364665e-03f, 7.387609669e-03f,
-7.381842198e-03f, 7.376062263e-03f, 7.370269873e-03f, 7.364465040e-03f, 7.358647775e-03f, 7.352818087e-03f, 7.346975989e-03f, 7.341121489e-03f, 7.335254600e-03f, 7.329375332e-03f,
-7.323483696e-03f, 7.317579702e-03f, 7.311663362e-03f, 7.305734685e-03f, 7.299793684e-03f, 7.293840369e-03f, 7.287874751e-03f, 7.281896840e-03f, 7.275906648e-03f, 7.269904186e-03f,
-7.263889465e-03f, 7.257862495e-03f, 7.251823288e-03f, 7.245771855e-03f, 7.239708207e-03f, 7.233632354e-03f, 7.227544309e-03f, 7.221444082e-03f, 7.215331684e-03f, 7.209207127e-03f,
-7.203070422e-03f, 7.196921579e-03f, 7.190760611e-03f, 7.184587528e-03f, 7.178402342e-03f, 7.172205063e-03f, 7.165995704e-03f, 7.159774276e-03f, 7.153540790e-03f, 7.147295257e-03f,
-7.141037689e-03f, 7.134768097e-03f, 7.128486493e-03f, 7.122192888e-03f, 7.115887293e-03f, 7.109569721e-03f, 7.103240182e-03f, 7.096898689e-03f, 7.090545252e-03f, 7.084179883e-03f,
-7.077802594e-03f, 7.071413397e-03f, 7.065012303e-03f, 7.058599323e-03f, 7.052174471e-03f, 7.045737756e-03f, 7.039289191e-03f, 7.032828788e-03f, 7.026356558e-03f, 7.019872513e-03f,
-7.013376666e-03f, 7.006869027e-03f, 7.000349609e-03f, 6.993818423e-03f, 6.987275482e-03f, 6.980720797e-03f, 6.974154380e-03f, 6.967576243e-03f, 6.960986398e-03f, 6.954384857e-03f,
-6.947771633e-03f, 6.941146736e-03f, 6.934510179e-03f, 6.927861975e-03f, 6.921202135e-03f, 6.914530671e-03f, 6.907847596e-03f, 6.901152921e-03f, 6.894446659e-03f, 6.887728821e-03f,
-6.880999421e-03f, 6.874258470e-03f, 6.867505981e-03f, 6.860741965e-03f, 6.853966435e-03f, 6.847179404e-03f, 6.840380883e-03f, 6.833570885e-03f, 6.826749423e-03f, 6.819916508e-03f,
-6.813072153e-03f, 6.806216371e-03f, 6.799349173e-03f, 6.792470573e-03f, 6.785580582e-03f, 6.778679214e-03f, 6.771766480e-03f, 6.764842394e-03f, 6.757906968e-03f, 6.750960213e-03f,
-6.744002144e-03f, 6.737032772e-03f, 6.730052111e-03f, 6.723060172e-03f, 6.716056968e-03f, 6.709042513e-03f, 6.702016818e-03f, 6.694979897e-03f, 6.687931762e-03f, 6.680872425e-03f,
-6.673801901e-03f, 6.666720201e-03f, 6.659627338e-03f, 6.652523325e-03f, 6.645408175e-03f, 6.638281901e-03f, 6.631144516e-03f, 6.623996032e-03f, 6.616836463e-03f, 6.609665820e-03f,
-6.602484119e-03f, 6.595291370e-03f, 6.588087588e-03f, 6.580872785e-03f, 6.573646974e-03f, 6.566410169e-03f, 6.559162382e-03f, 6.551903627e-03f, 6.544633916e-03f, 6.537353262e-03f,
-6.530061680e-03f, 6.522759181e-03f, 6.515445780e-03f, 6.508121489e-03f, 6.500786321e-03f, 6.493440290e-03f, 6.486083409e-03f, 6.478715691e-03f, 6.471337150e-03f, 6.463947799e-03f,
-6.456547651e-03f, 6.449136719e-03f, 6.441715017e-03f, 6.434282558e-03f, 6.426839355e-03f, 6.419385423e-03f, 6.411920773e-03f, 6.404445421e-03f, 6.396959379e-03f, 6.389462660e-03f,
-6.381955279e-03f, 6.374437249e-03f, 6.366908582e-03f, 6.359369294e-03f, 6.351819397e-03f, 6.344258905e-03f, 6.336687831e-03f, 6.329106189e-03f, 6.321513994e-03f, 6.313911257e-03f,
-6.306297994e-03f, 6.298674217e-03f, 6.291039941e-03f, 6.283395179e-03f, 6.275739946e-03f, 6.268074253e-03f, 6.260398116e-03f, 6.252711549e-03f, 6.245014564e-03f, 6.237307177e-03f,
-6.229589400e-03f, 6.221861247e-03f, 6.214122733e-03f, 6.206373872e-03f, 6.198614676e-03f, 6.190845161e-03f, 6.183065340e-03f, 6.175275227e-03f, 6.167474836e-03f, 6.159664181e-03f,
-6.151843276e-03f, 6.144012136e-03f, 6.136170773e-03f, 6.128319203e-03f, 6.120457438e-03f, 6.112585495e-03f, 6.104703385e-03f, 6.096811125e-03f, 6.088908727e-03f, 6.080996206e-03f,
-6.073073576e-03f, 6.065140851e-03f, 6.057198046e-03f, 6.049245175e-03f, 6.041282252e-03f, 6.033309291e-03f, 6.025326306e-03f, 6.017333313e-03f, 6.009330324e-03f, 6.001317355e-03f,
-5.993294420e-03f, 5.985261533e-03f, 5.977218709e-03f, 5.969165962e-03f, 5.961103306e-03f, 5.953030756e-03f, 5.944948326e-03f, 5.936856031e-03f, 5.928753885e-03f, 5.920641903e-03f,
-5.912520099e-03f, 5.904388487e-03f, 5.896247083e-03f, 5.888095901e-03f, 5.879934956e-03f, 5.871764261e-03f, 5.863583832e-03f, 5.855393683e-03f, 5.847193829e-03f, 5.838984285e-03f,
-5.830765065e-03f, 5.822536183e-03f, 5.814297656e-03f, 5.806049496e-03f, 5.797791720e-03f, 5.789524342e-03f, 5.781247376e-03f, 5.772960837e-03f, 5.764664741e-03f, 5.756359102e-03f,
-5.748043934e-03f, 5.739719253e-03f, 5.731385074e-03f, 5.723041411e-03f, 5.714688279e-03f, 5.706325694e-03f, 5.697953670e-03f, 5.689572221e-03f, 5.681181364e-03f, 5.672781113e-03f,
-5.664371483e-03f, 5.655952488e-03f, 5.647524145e-03f, 5.639086468e-03f, 5.630639472e-03f, 5.622183172e-03f, 5.613717583e-03f, 5.605242720e-03f, 5.596758599e-03f, 5.588265235e-03f,
-5.579762642e-03f, 5.571250836e-03f, 5.562729832e-03f, 5.554199646e-03f, 5.545660291e-03f, 5.537111785e-03f, 5.528554141e-03f, 5.519987375e-03f, 5.511411503e-03f, 5.502826539e-03f,
-5.494232499e-03f, 5.485629399e-03f, 5.477017253e-03f, 5.468396077e-03f, 5.459765886e-03f, 5.451126696e-03f, 5.442478521e-03f, 5.433821378e-03f, 5.425155282e-03f, 5.416480248e-03f,
-5.407796292e-03f, 5.399103429e-03f, 5.390401675e-03f, 5.381691044e-03f, 5.372971553e-03f, 5.364243217e-03f, 5.355506052e-03f, 5.346760073e-03f, 5.338005295e-03f, 5.329241735e-03f,
-5.320469407e-03f, 5.311688329e-03f, 5.302898514e-03f, 5.294099978e-03f, 5.285292738e-03f, 5.276476809e-03f, 5.267652207e-03f, 5.258818947e-03f, 5.249977045e-03f, 5.241126517e-03f,
-5.232267378e-03f, 5.223399644e-03f, 5.214523332e-03f, 5.205638456e-03f, 5.196745032e-03f, 5.187843077e-03f, 5.178932606e-03f, 5.170013635e-03f, 5.161086180e-03f, 5.152150256e-03f,
-5.143205880e-03f, 5.134253067e-03f, 5.125291834e-03f, 5.116322195e-03f, 5.107344168e-03f, 5.098357768e-03f, 5.089363010e-03f, 5.080359912e-03f, 5.071348489e-03f, 5.062328756e-03f,
-5.053300730e-03f, 5.044264428e-03f, 5.035219864e-03f, 5.026167055e-03f, 5.017106017e-03f, 5.008036767e-03f, 4.998959319e-03f, 4.989873691e-03f, 4.980779898e-03f, 4.971677957e-03f,
-4.962567884e-03f, 4.953449694e-03f, 4.944323404e-03f, 4.935189031e-03f, 4.926046589e-03f, 4.916896097e-03f, 4.907737569e-03f, 4.898571022e-03f, 4.889396472e-03f, 4.880213936e-03f,
-4.871023429e-03f, 4.861824969e-03f, 4.852618570e-03f, 4.843404251e-03f, 4.834182026e-03f, 4.824951913e-03f, 4.815713927e-03f, 4.806468086e-03f, 4.797214404e-03f, 4.787952900e-03f,
-4.778683588e-03f, 4.769406486e-03f, 4.760121611e-03f, 4.750828977e-03f, 4.741528602e-03f, 4.732220503e-03f, 4.722904695e-03f, 4.713581196e-03f, 4.704250021e-03f, 4.694911188e-03f,
-4.685564712e-03f, 4.676210611e-03f, 4.666848900e-03f, 4.657479597e-03f, 4.648102718e-03f, 4.638718280e-03f, 4.629326299e-03f, 4.619926791e-03f, 4.610519774e-03f, 4.601105264e-03f,
-4.591683278e-03f, 4.582253831e-03f, 4.572816942e-03f, 4.563372627e-03f, 4.553920902e-03f, 4.544461784e-03f, 4.534995290e-03f, 4.525521436e-03f, 4.516040239e-03f, 4.506551717e-03f,
-4.497055885e-03f, 4.487552761e-03f, 4.478042361e-03f, 4.468524702e-03f, 4.458999801e-03f, 4.449467675e-03f, 4.439928341e-03f, 4.430381815e-03f, 4.420828114e-03f, 4.411267255e-03f,
-4.401699256e-03f, 4.392124132e-03f, 4.382541901e-03f, 4.372952580e-03f, 4.363356185e-03f, 4.353752735e-03f, 4.344142244e-03f, 4.334524731e-03f, 4.324900213e-03f, 4.315268706e-03f,
-4.305630228e-03f, 4.295984795e-03f, 4.286332424e-03f, 4.276673133e-03f, 4.267006939e-03f, 4.257333858e-03f, 4.247653908e-03f, 4.237967105e-03f, 4.228273467e-03f, 4.218573011e-03f,
-4.208865754e-03f, 4.199151714e-03f, 4.189430906e-03f, 4.179703349e-03f, 4.169969059e-03f, 4.160228054e-03f, 4.150480351e-03f, 4.140725967e-03f, 4.130964919e-03f, 4.121197224e-03f,
-4.111422900e-03f, 4.101641964e-03f, 4.091854433e-03f, 4.082060324e-03f, 4.072259655e-03f, 4.062452443e-03f, 4.052638705e-03f, 4.042818458e-03f, 4.032991720e-03f, 4.023158508e-03f,
-4.013318839e-03f, 4.003472730e-03f, 3.993620200e-03f, 3.983761265e-03f, 3.973895943e-03f, 3.964024251e-03f, 3.954146206e-03f, 3.944261826e-03f, 3.934371128e-03f, 3.924474130e-03f,
-3.914570848e-03f, 3.904661302e-03f, 3.894745507e-03f, 3.884823481e-03f, 3.874895242e-03f, 3.864960808e-03f, 3.855020195e-03f, 3.845073421e-03f, 3.835120504e-03f, 3.825161462e-03f,
-3.815196311e-03f, 3.805225069e-03f, 3.795247754e-03f, 3.785264383e-03f, 3.775274975e-03f, 3.765279545e-03f, 3.755278113e-03f, 3.745270696e-03f, 3.735257310e-03f, 3.725237974e-03f,
-3.715212706e-03f, 3.705181523e-03f, 3.695144442e-03f, 3.685101482e-03f, 3.675052660e-03f, 3.664997993e-03f, 3.654937500e-03f, 3.644871197e-03f, 3.634799103e-03f, 3.624721236e-03f,
-3.614637612e-03f, 3.604548251e-03f, 3.594453168e-03f, 3.584352383e-03f, 3.574245913e-03f, 3.564133775e-03f, 3.554015988e-03f, 3.543892569e-03f, 3.533763536e-03f, 3.523628907e-03f,
-3.513488699e-03f, 3.503342931e-03f, 3.493191620e-03f, 3.483034784e-03f, 3.472872440e-03f, 3.462704608e-03f, 3.452531303e-03f, 3.442352546e-03f, 3.432168352e-03f, 3.421978740e-03f,
-3.411783728e-03f, 3.401583334e-03f, 3.391377576e-03f, 3.381166472e-03f, 3.370950039e-03f, 3.360728295e-03f, 3.350501259e-03f, 3.340268948e-03f, 3.330031380e-03f, 3.319788574e-03f,
-3.309540547e-03f, 3.299287317e-03f, 3.289028902e-03f, 3.278765320e-03f, 3.268496589e-03f, 3.258222728e-03f, 3.247943753e-03f, 3.237659684e-03f, 3.227370537e-03f, 3.217076332e-03f,
-3.206777087e-03f, 3.196472818e-03f, 3.186163545e-03f, 3.175849285e-03f, 3.165530057e-03f, 3.155205878e-03f, 3.144876767e-03f, 3.134542741e-03f, 3.124203820e-03f, 3.113860020e-03f,
-3.103511360e-03f, 3.093157859e-03f, 3.082799534e-03f, 3.072436403e-03f, 3.062068485e-03f, 3.051695798e-03f, 3.041318359e-03f, 3.030936188e-03f, 3.020549302e-03f, 3.010157719e-03f,
-2.999761458e-03f, 2.989360537e-03f, 2.978954974e-03f, 2.968544787e-03f, 2.958129995e-03f, 2.947710615e-03f, 2.937286667e-03f, 2.926858167e-03f, 2.916425135e-03f, 2.905987588e-03f,
-2.895545546e-03f, 2.885099025e-03f, 2.874648045e-03f, 2.864192624e-03f, 2.853732780e-03f, 2.843268531e-03f, 2.832799896e-03f, 2.822326893e-03f, 2.811849540e-03f, 2.801367856e-03f,
-2.790881858e-03f, 2.780391566e-03f, 2.769896997e-03f, 2.759398171e-03f, 2.748895104e-03f, 2.738387817e-03f, 2.727876326e-03f, 2.717360650e-03f, 2.706840809e-03f, 2.696316819e-03f,
-2.685788701e-03f, 2.675256471e-03f, 2.664720148e-03f, 2.654179751e-03f, 2.643635298e-03f, 2.633086808e-03f, 2.622534299e-03f, 2.611977790e-03f, 2.601417298e-03f, 2.590852842e-03f,
-2.580284442e-03f, 2.569712115e-03f, 2.559135879e-03f, 2.548555753e-03f, 2.537971757e-03f, 2.527383907e-03f, 2.516792223e-03f, 2.506196723e-03f, 2.495597426e-03f, 2.484994350e-03f,
-2.474387513e-03f, 2.463776935e-03f, 2.453162633e-03f, 2.442544627e-03f, 2.431922934e-03f, 2.421297574e-03f, 2.410668564e-03f, 2.400035924e-03f, 2.389399671e-03f, 2.378759826e-03f,
-2.368116405e-03f, 2.357469427e-03f, 2.346818912e-03f, 2.336164878e-03f, 2.325507343e-03f, 2.314846326e-03f, 2.304181846e-03f, 2.293513920e-03f, 2.282842568e-03f, 2.272167809e-03f,
-2.261489661e-03f, 2.250808142e-03f, 2.240123271e-03f, 2.229435068e-03f, 2.218743549e-03f, 2.208048735e-03f, 2.197350644e-03f, 2.186649294e-03f, 2.175944704e-03f, 2.165236893e-03f,
-2.154525879e-03f, 2.143811681e-03f, 2.133094318e-03f, 2.122373808e-03f, 2.111650170e-03f, 2.100923423e-03f, 2.090193586e-03f, 2.079460677e-03f, 2.068724714e-03f, 2.057985717e-03f,
-2.047243704e-03f, 2.036498695e-03f, 2.025750707e-03f, 2.014999759e-03f, 2.004245870e-03f, 1.993489060e-03f, 1.982729346e-03f, 1.971966747e-03f, 1.961201282e-03f, 1.950432970e-03f,
-1.939661830e-03f, 1.928887879e-03f, 1.918111138e-03f, 1.907331625e-03f, 1.896549358e-03f, 1.885764357e-03f, 1.874976640e-03f, 1.864186226e-03f, 1.853393133e-03f, 1.842597381e-03f,
-1.831798988e-03f, 1.820997973e-03f, 1.810194355e-03f, 1.799388152e-03f, 1.788579384e-03f, 1.777768070e-03f, 1.766954227e-03f, 1.756137875e-03f, 1.745319033e-03f, 1.734497719e-03f,
-1.723673952e-03f, 1.712847752e-03f, 1.702019137e-03f, 1.691188125e-03f, 1.680354736e-03f, 1.669518988e-03f, 1.658680901e-03f, 1.647840493e-03f, 1.636997783e-03f, 1.626152790e-03f,
-1.615305532e-03f, 1.604456029e-03f, 1.593604299e-03f, 1.582750362e-03f, 1.571894236e-03f, 1.561035939e-03f, 1.550175492e-03f, 1.539312912e-03f, 1.528448219e-03f, 1.517581432e-03f,
-1.506712568e-03f, 1.495841648e-03f, 1.484968691e-03f, 1.474093714e-03f, 1.463216737e-03f, 1.452337779e-03f, 1.441456858e-03f, 1.430573995e-03f, 1.419689206e-03f, 1.408802513e-03f,
-1.397913932e-03f, 1.387023484e-03f, 1.376131186e-03f, 1.365237059e-03f, 1.354341121e-03f, 1.343443391e-03f, 1.332543887e-03f, 1.321642630e-03f, 1.310739636e-03f, 1.299834927e-03f,
-1.288928520e-03f, 1.278020434e-03f, 1.267110689e-03f, 1.256199303e-03f, 1.245286295e-03f, 1.234371684e-03f, 1.223455490e-03f, 1.212537730e-03f, 1.201618425e-03f, 1.190697592e-03f,
-1.179775251e-03f, 1.168851421e-03f, 1.157926121e-03f, 1.146999369e-03f, 1.136071186e-03f, 1.125141588e-03f, 1.114210597e-03f, 1.103278230e-03f, 1.092344506e-03f, 1.081409445e-03f,
-1.070473065e-03f, 1.059535386e-03f, 1.048596426e-03f, 1.037656204e-03f, 1.026714739e-03f, 1.015772051e-03f, 1.004828158e-03f, 9.938830792e-04f, 9.829368334e-04f, 9.719894398e-04f,
-9.610409172e-04f, 9.500912846e-04f, 9.391405611e-04f, 9.281887656e-04f, 9.172359171e-04f, 9.062820345e-04f, 8.953271369e-04f, 8.843712432e-04f, 8.734143723e-04f, 8.624565433e-04f,
-8.514977752e-04f, 8.405380869e-04f, 8.295774975e-04f, 8.186160258e-04f, 8.076536909e-04f, 7.966905118e-04f, 7.857265074e-04f, 7.747616968e-04f, 7.637960989e-04f, 7.528297326e-04f,
-7.418626171e-04f, 7.308947713e-04f, 7.199262141e-04f, 7.089569645e-04f, 6.979870416e-04f, 6.870164644e-04f, 6.760452517e-04f, 6.650734226e-04f, 6.541009962e-04f, 6.431279913e-04f,
-6.321544269e-04f, 6.211803222e-04f, 6.102056959e-04f, 5.992305672e-04f, 5.882549550e-04f, 5.772788783e-04f, 5.663023561e-04f, 5.553254074e-04f, 5.443480511e-04f, 5.333703063e-04f,
-5.223921919e-04f, 5.114137270e-04f, 5.004349305e-04f, 4.894558213e-04f, 4.784764186e-04f, 4.674967412e-04f, 4.565168081e-04f, 4.455366384e-04f, 4.345562510e-04f, 4.235756649e-04f,
-4.125948991e-04f, 4.016139726e-04f, 3.906329042e-04f, 3.796517132e-04f, 3.686704183e-04f, 3.576890386e-04f, 3.467075930e-04f, 3.357261006e-04f, 3.247445803e-04f, 3.137630511e-04f,
-3.027815319e-04f, 2.918000418e-04f, 2.808185997e-04f, 2.698372245e-04f, 2.588559353e-04f, 2.478747510e-04f, 2.368936906e-04f, 2.259127731e-04f, 2.149320173e-04f, 2.039514423e-04f,
-1.929710671e-04f, 1.819909106e-04f, 1.710109917e-04f, 1.600313295e-04f, 1.490519428e-04f, 1.380728507e-04f, 1.270940720e-04f, 1.161156258e-04f, 1.051375310e-04f, 9.415980658e-05f,
-8.318247141e-05f, 7.220554448e-05f, 6.122904473e-05f, 5.025299110e-05f, 3.927740255e-05f, 2.830229801e-05f, 1.732769641e-05f, 6.353616691e-06f, -4.619922207e-06f, -1.559290136e-05f,
--2.656530182e-05f, -3.753710468e-05f, -4.850829101e-05f, -5.947884187e-05f, -7.044873835e-05f, -8.141796152e-05f, -9.238649247e-05f, -1.033543123e-04f, -1.143214020e-04f, -1.252877428e-04f,
--1.362533158e-04f, -1.472181019e-04f, -1.581820824e-04f, -1.691452382e-04f, -1.801075506e-04f, -1.910690006e-04f, -2.020295693e-04f, -2.129892378e-04f, -2.239479873e-04f, -2.349057988e-04f,
--2.458626535e-04f, -2.568185324e-04f, -2.677734167e-04f, -2.787272876e-04f, -2.896801261e-04f, -3.006319134e-04f, -3.115826306e-04f, -3.225322588e-04f, -3.334807792e-04f, -3.444281729e-04f,
--3.553744210e-04f, -3.663195048e-04f, -3.772634053e-04f, -3.882061037e-04f, -3.991475811e-04f, -4.100878188e-04f, -4.210267978e-04f, -4.319644993e-04f, -4.429009046e-04f, -4.538359947e-04f,
--4.647697509e-04f, -4.757021543e-04f, -4.866331861e-04f, -4.975628274e-04f, -5.084910595e-04f, -5.194178636e-04f, -5.303432208e-04f, -5.412671124e-04f, -5.521895195e-04f, -5.631104234e-04f,
--5.740298052e-04f, -5.849476462e-04f, -5.958639275e-04f, -6.067786304e-04f, -6.176917362e-04f, -6.286032260e-04f, -6.395130811e-04f, -6.504212826e-04f, -6.613278120e-04f, -6.722326502e-04f,
--6.831357788e-04f, -6.940371787e-04f, -7.049368314e-04f, -7.158347181e-04f, -7.267308200e-04f, -7.376251185e-04f, -7.485175946e-04f, -7.594082299e-04f, -7.702970054e-04f, -7.811839026e-04f,
--7.920689026e-04f, -8.029519868e-04f, -8.138331364e-04f, -8.247123328e-04f, -8.355895573e-04f, -8.464647912e-04f, -8.573380157e-04f, -8.682092122e-04f, -8.790783620e-04f, -8.899454465e-04f,
--9.008104469e-04f, -9.116733446e-04f, -9.225341209e-04f, -9.333927573e-04f, -9.442492349e-04f, -9.551035352e-04f, -9.659556395e-04f, -9.768055293e-04f, -9.876531857e-04f, -9.984985903e-04f,
--1.009341724e-03f, -1.020182569e-03f, -1.031021107e-03f, -1.041857317e-03f, -1.052691183e-03f, -1.063522686e-03f, -1.074351806e-03f, -1.085178525e-03f, -1.096002826e-03f, -1.106824688e-03f,
--1.117644094e-03f, -1.128461024e-03f, -1.139275461e-03f, -1.150087386e-03f, -1.160896781e-03f, -1.171703625e-03f, -1.182507902e-03f, -1.193309593e-03f, -1.204108679e-03f, -1.214905141e-03f,
--1.225698962e-03f, -1.236490122e-03f, -1.247278603e-03f, -1.258064386e-03f, -1.268847454e-03f, -1.279627787e-03f, -1.290405367e-03f, -1.301180176e-03f, -1.311952195e-03f, -1.322721405e-03f,
--1.333487789e-03f, -1.344251327e-03f, -1.355012001e-03f, -1.365769793e-03f, -1.376524685e-03f, -1.387276657e-03f, -1.398025692e-03f, -1.408771771e-03f, -1.419514876e-03f, -1.430254988e-03f,
--1.440992088e-03f, -1.451726159e-03f, -1.462457183e-03f, -1.473185139e-03f, -1.483910011e-03f, -1.494631780e-03f, -1.505350427e-03f, -1.516065935e-03f, -1.526778284e-03f, -1.537487457e-03f,
--1.548193435e-03f, -1.558896199e-03f, -1.569595732e-03f, -1.580292015e-03f, -1.590985030e-03f, -1.601674758e-03f, -1.612361182e-03f, -1.623044282e-03f, -1.633724041e-03f, -1.644400440e-03f,
--1.655073462e-03f, -1.665743087e-03f, -1.676409297e-03f, -1.687072075e-03f, -1.697731402e-03f, -1.708387259e-03f, -1.719039629e-03f, -1.729688493e-03f, -1.740333834e-03f, -1.750975632e-03f,
--1.761613869e-03f, -1.772248529e-03f, -1.782879591e-03f, -1.793507038e-03f, -1.804130853e-03f, -1.814751015e-03f, -1.825367509e-03f, -1.835980315e-03f, -1.846589415e-03f, -1.857194791e-03f,
--1.867796425e-03f, -1.878394299e-03f, -1.888988394e-03f, -1.899578693e-03f, -1.910165178e-03f, -1.920747829e-03f, -1.931326631e-03f, -1.941901563e-03f, -1.952472608e-03f, -1.963039749e-03f,
--1.973602966e-03f, -1.984162242e-03f, -1.994717560e-03f, -2.005268900e-03f, -2.015816245e-03f, -2.026359576e-03f, -2.036898877e-03f, -2.047434128e-03f, -2.057965312e-03f, -2.068492410e-03f,
--2.079015406e-03f, -2.089534280e-03f, -2.100049015e-03f, -2.110559593e-03f, -2.121065996e-03f, -2.131568206e-03f, -2.142066205e-03f, -2.152559975e-03f, -2.163049499e-03f, -2.173534757e-03f,
--2.184015733e-03f, -2.194492409e-03f, -2.204964766e-03f, -2.215432787e-03f, -2.225896454e-03f, -2.236355749e-03f, -2.246810654e-03f, -2.257261151e-03f, -2.267707223e-03f, -2.278148851e-03f,
--2.288586018e-03f, -2.299018707e-03f, -2.309446898e-03f, -2.319870575e-03f, -2.330289720e-03f, -2.340704314e-03f, -2.351114341e-03f, -2.361519782e-03f, -2.371920620e-03f, -2.382316836e-03f,
--2.392708414e-03f, -2.403095335e-03f, -2.413477582e-03f, -2.423855137e-03f, -2.434227982e-03f, -2.444596099e-03f, -2.454959472e-03f, -2.465318082e-03f, -2.475671912e-03f, -2.486020943e-03f,
--2.496365159e-03f, -2.506704542e-03f, -2.517039074e-03f, -2.527368737e-03f, -2.537693514e-03f, -2.548013387e-03f, -2.558328339e-03f, -2.568638352e-03f, -2.578943409e-03f, -2.589243492e-03f,
--2.599538583e-03f, -2.609828665e-03f, -2.620113720e-03f, -2.630393732e-03f, -2.640668682e-03f, -2.650938552e-03f, -2.661203326e-03f, -2.671462986e-03f, -2.681717514e-03f, -2.691966893e-03f,
--2.702211106e-03f, -2.712450135e-03f, -2.722683962e-03f, -2.732912571e-03f, -2.743135944e-03f, -2.753354063e-03f, -2.763566911e-03f, -2.773774470e-03f, -2.783976724e-03f, -2.794173655e-03f,
--2.804365245e-03f, -2.814551478e-03f, -2.824732335e-03f, -2.834907800e-03f, -2.845077855e-03f, -2.855242484e-03f, -2.865401668e-03f, -2.875555390e-03f, -2.885703633e-03f, -2.895846381e-03f,
--2.905983615e-03f, -2.916115318e-03f, -2.926241473e-03f, -2.936362064e-03f, -2.946477072e-03f, -2.956586480e-03f, -2.966690272e-03f, -2.976788431e-03f, -2.986880938e-03f, -2.996967777e-03f,
--3.007048931e-03f, -3.017124382e-03f, -3.027194114e-03f, -3.037258109e-03f, -3.047316350e-03f, -3.057368821e-03f, -3.067415503e-03f, -3.077456381e-03f, -3.087491436e-03f, -3.097520653e-03f,
--3.107544013e-03f, -3.117561500e-03f, -3.127573097e-03f, -3.137578787e-03f, -3.147578553e-03f, -3.157572377e-03f, -3.167560244e-03f, -3.177542135e-03f, -3.187518034e-03f, -3.197487925e-03f,
--3.207451789e-03f, -3.217409611e-03f, -3.227361373e-03f, -3.237307058e-03f, -3.247246650e-03f, -3.257180132e-03f, -3.267107487e-03f, -3.277028697e-03f, -3.286943747e-03f, -3.296852619e-03f,
--3.306755296e-03f, -3.316651763e-03f, -3.326542001e-03f, -3.336425994e-03f, -3.346303726e-03f, -3.356175179e-03f, -3.366040337e-03f, -3.375899184e-03f, -3.385751702e-03f, -3.395597874e-03f,
--3.405437685e-03f, -3.415271117e-03f, -3.425098154e-03f, -3.434918778e-03f, -3.444732975e-03f, -3.454540725e-03f, -3.464342015e-03f, -3.474136825e-03f, -3.483925141e-03f, -3.493706945e-03f,
--3.503482220e-03f, -3.513250951e-03f, -3.523013121e-03f, -3.532768713e-03f, -3.542517710e-03f, -3.552260096e-03f, -3.561995855e-03f, -3.571724970e-03f, -3.581447425e-03f, -3.591163203e-03f,
--3.600872287e-03f, -3.610574662e-03f, -3.620270311e-03f, -3.629959217e-03f, -3.639641364e-03f, -3.649316736e-03f, -3.658985316e-03f, -3.668647088e-03f, -3.678302036e-03f, -3.687950142e-03f,
--3.697591392e-03f, -3.707225768e-03f, -3.716853254e-03f, -3.726473835e-03f, -3.736087493e-03f, -3.745694213e-03f, -3.755293977e-03f, -3.764886771e-03f, -3.774472577e-03f, -3.784051380e-03f,
--3.793623164e-03f, -3.803187911e-03f, -3.812745606e-03f, -3.822296234e-03f, -3.831839776e-03f, -3.841376219e-03f, -3.850905545e-03f, -3.860427738e-03f, -3.869942782e-03f, -3.879450661e-03f,
--3.888951360e-03f, -3.898444861e-03f, -3.907931150e-03f, -3.917410209e-03f, -3.926882023e-03f, -3.936346576e-03f, -3.945803852e-03f, -3.955253835e-03f, -3.964696510e-03f, -3.974131859e-03f,
--3.983559867e-03f, -3.992980518e-03f, -4.002393797e-03f, -4.011799687e-03f, -4.021198172e-03f, -4.030589238e-03f, -4.039972867e-03f, -4.049349044e-03f, -4.058717753e-03f, -4.068078978e-03f,
--4.077432704e-03f, -4.086778914e-03f, -4.096117594e-03f, -4.105448727e-03f, -4.114772297e-03f, -4.124088289e-03f, -4.133396687e-03f, -4.142697475e-03f, -4.151990638e-03f, -4.161276160e-03f,
--4.170554025e-03f, -4.179824218e-03f, -4.189086722e-03f, -4.198341523e-03f, -4.207588605e-03f, -4.216827953e-03f, -4.226059549e-03f, -4.235283380e-03f, -4.244499430e-03f, -4.253707682e-03f,
--4.262908122e-03f, -4.272100733e-03f, -4.281285502e-03f, -4.290462411e-03f, -4.299631446e-03f, -4.308792591e-03f, -4.317945830e-03f, -4.327091149e-03f, -4.336228532e-03f, -4.345357963e-03f,
--4.354479427e-03f, -4.363592909e-03f, -4.372698393e-03f, -4.381795864e-03f, -4.390885307e-03f, -4.399966706e-03f, -4.409040047e-03f, -4.418105313e-03f, -4.427162490e-03f, -4.436211563e-03f,
--4.445252515e-03f, -4.454285333e-03f, -4.463310000e-03f, -4.472326501e-03f, -4.481334822e-03f, -4.490334948e-03f, -4.499326862e-03f, -4.508310550e-03f, -4.517285997e-03f, -4.526253188e-03f,
--4.535212108e-03f, -4.544162741e-03f, -4.553105073e-03f, -4.562039088e-03f, -4.570964772e-03f, -4.579882109e-03f, -4.588791085e-03f, -4.597691684e-03f, -4.606583892e-03f, -4.615467693e-03f,
--4.624343074e-03f, -4.633210018e-03f, -4.642068511e-03f, -4.650918538e-03f, -4.659760084e-03f, -4.668593134e-03f, -4.677417674e-03f, -4.686233689e-03f, -4.695041163e-03f, -4.703840083e-03f,
--4.712630433e-03f, -4.721412198e-03f, -4.730185364e-03f, -4.738949916e-03f, -4.747705840e-03f, -4.756453120e-03f, -4.765191742e-03f, -4.773921692e-03f, -4.782642954e-03f, -4.791355514e-03f,
--4.800059358e-03f, -4.808754470e-03f, -4.817440837e-03f, -4.826118443e-03f, -4.834787275e-03f, -4.843447317e-03f, -4.852098555e-03f, -4.860740974e-03f, -4.869374561e-03f, -4.877999300e-03f,
--4.886615178e-03f, -4.895222179e-03f, -4.903820289e-03f, -4.912409494e-03f, -4.920989780e-03f, -4.929561132e-03f, -4.938123535e-03f, -4.946676976e-03f, -4.955221440e-03f, -4.963756912e-03f,
--4.972283379e-03f, -4.980800826e-03f, -4.989309239e-03f, -4.997808604e-03f, -5.006298906e-03f, -5.014780132e-03f, -5.023252266e-03f, -5.031715295e-03f, -5.040169205e-03f, -5.048613981e-03f,
--5.057049610e-03f, -5.065476077e-03f, -5.073893368e-03f, -5.082301469e-03f, -5.090700366e-03f, -5.099090045e-03f, -5.107470492e-03f, -5.115841693e-03f, -5.124203634e-03f, -5.132556301e-03f,
--5.140899680e-03f, -5.149233757e-03f, -5.157558518e-03f, -5.165873949e-03f, -5.174180036e-03f, -5.182476766e-03f, -5.190764124e-03f, -5.199042097e-03f, -5.207310671e-03f, -5.215569831e-03f,
--5.223819565e-03f, -5.232059859e-03f, -5.240290698e-03f, -5.248512069e-03f, -5.256723958e-03f, -5.264926352e-03f, -5.273119237e-03f, -5.281302598e-03f, -5.289476423e-03f, -5.297640698e-03f,
--5.305795409e-03f, -5.313940543e-03f, -5.322076086e-03f, -5.330202024e-03f, -5.338318344e-03f, -5.346425032e-03f, -5.354522076e-03f, -5.362609460e-03f, -5.370687172e-03f, -5.378755199e-03f,
--5.386813526e-03f, -5.394862141e-03f, -5.402901030e-03f, -5.410930179e-03f, -5.418949576e-03f, -5.426959206e-03f, -5.434959058e-03f, -5.442949116e-03f, -5.450929368e-03f, -5.458899801e-03f,
--5.466860401e-03f, -5.474811155e-03f, -5.482752050e-03f, -5.490683072e-03f, -5.498604209e-03f, -5.506515447e-03f, -5.514416773e-03f, -5.522308174e-03f, -5.530189636e-03f, -5.538061147e-03f,
--5.545922694e-03f, -5.553774263e-03f, -5.561615841e-03f, -5.569447416e-03f, -5.577268974e-03f, -5.585080502e-03f, -5.592881987e-03f, -5.600673417e-03f, -5.608454778e-03f, -5.616226058e-03f,
--5.623987242e-03f, -5.631738320e-03f, -5.639479277e-03f, -5.647210101e-03f, -5.654930779e-03f, -5.662641298e-03f, -5.670341645e-03f, -5.678031808e-03f, -5.685711774e-03f, -5.693381530e-03f,
--5.701041063e-03f, -5.708690360e-03f, -5.716329409e-03f, -5.723958198e-03f, -5.731576713e-03f, -5.739184941e-03f, -5.746782871e-03f, -5.754370490e-03f, -5.761947785e-03f, -5.769514742e-03f,
--5.777071351e-03f, -5.784617599e-03f, -5.792153472e-03f, -5.799678958e-03f, -5.807194045e-03f, -5.814698721e-03f, -5.822192972e-03f, -5.829676787e-03f, -5.837150153e-03f, -5.844613058e-03f,
--5.852065489e-03f, -5.859507434e-03f, -5.866938881e-03f, -5.874359817e-03f, -5.881770230e-03f, -5.889170108e-03f, -5.896559439e-03f, -5.903938209e-03f, -5.911306408e-03f, -5.918664023e-03f,
--5.926011041e-03f, -5.933347451e-03f, -5.940673240e-03f, -5.947988397e-03f, -5.955292909e-03f, -5.962586763e-03f, -5.969869949e-03f, -5.977142454e-03f, -5.984404265e-03f, -5.991655372e-03f,
--5.998895761e-03f, -6.006125421e-03f, -6.013344341e-03f, -6.020552507e-03f, -6.027749908e-03f, -6.034936533e-03f, -6.042112369e-03f, -6.049277405e-03f, -6.056431628e-03f, -6.063575027e-03f,
--6.070707591e-03f, -6.077829306e-03f, -6.084940162e-03f, -6.092040147e-03f, -6.099129249e-03f, -6.106207456e-03f, -6.113274757e-03f, -6.120331139e-03f, -6.127376593e-03f, -6.134411104e-03f,
--6.141434664e-03f, -6.148447258e-03f, -6.155448877e-03f, -6.162439508e-03f, -6.169419140e-03f, -6.176387761e-03f, -6.183345360e-03f, -6.190291926e-03f, -6.197227446e-03f, -6.204151911e-03f,
--6.211065307e-03f, -6.217967624e-03f, -6.224858851e-03f, -6.231738975e-03f, -6.238607986e-03f, -6.245465873e-03f, -6.252312624e-03f, -6.259148228e-03f, -6.265972673e-03f, -6.272785948e-03f,
--6.279588043e-03f, -6.286378946e-03f, -6.293158645e-03f, -6.299927130e-03f, -6.306684390e-03f, -6.313430413e-03f, -6.320165188e-03f, -6.326888705e-03f, -6.333600951e-03f, -6.340301917e-03f,
--6.346991591e-03f, -6.353669962e-03f, -6.360337020e-03f, -6.366992752e-03f, -6.373637149e-03f, -6.380270199e-03f, -6.386891892e-03f, -6.393502216e-03f, -6.400101161e-03f, -6.406688716e-03f,
--6.413264870e-03f, -6.419829612e-03f, -6.426382932e-03f, -6.432924819e-03f, -6.439455261e-03f, -6.445974250e-03f, -6.452481772e-03f, -6.458977819e-03f, -6.465462379e-03f, -6.471935442e-03f,
--6.478396997e-03f, -6.484847034e-03f, -6.491285542e-03f, -6.497712510e-03f, -6.504127928e-03f, -6.510531785e-03f, -6.516924071e-03f, -6.523304776e-03f, -6.529673889e-03f, -6.536031399e-03f,
--6.542377296e-03f, -6.548711571e-03f, -6.555034211e-03f, -6.561345208e-03f, -6.567644551e-03f, -6.573932229e-03f, -6.580208232e-03f, -6.586472550e-03f, -6.592725173e-03f, -6.598966090e-03f,
--6.605195292e-03f, -6.611412768e-03f, -6.617618508e-03f, -6.623812501e-03f, -6.629994738e-03f, -6.636165209e-03f, -6.642323904e-03f, -6.648470812e-03f, -6.654605923e-03f, -6.660729228e-03f,
--6.666840717e-03f, -6.672940379e-03f, -6.679028204e-03f, -6.685104183e-03f, -6.691168306e-03f, -6.697220563e-03f, -6.703260943e-03f, -6.709289438e-03f, -6.715306038e-03f, -6.721310731e-03f,
--6.727303510e-03f, -6.733284363e-03f, -6.739253282e-03f, -6.745210256e-03f, -6.751155276e-03f, -6.757088333e-03f, -6.763009416e-03f, -6.768918515e-03f, -6.774815623e-03f, -6.780700727e-03f,
--6.786573820e-03f, -6.792434892e-03f, -6.798283932e-03f, -6.804120933e-03f, -6.809945883e-03f, -6.815758774e-03f, -6.821559596e-03f, -6.827348340e-03f, -6.833124996e-03f, -6.838889555e-03f,
--6.844642008e-03f, -6.850382345e-03f, -6.856110557e-03f, -6.861826635e-03f, -6.867530570e-03f, -6.873222351e-03f, -6.878901971e-03f, -6.884569419e-03f, -6.890224687e-03f, -6.895867766e-03f,
--6.901498645e-03f, -6.907117317e-03f, -6.912723772e-03f, -6.918318001e-03f, -6.923899995e-03f, -6.929469745e-03f, -6.935027242e-03f, -6.940572476e-03f, -6.946105440e-03f, -6.951626124e-03f,
--6.957134518e-03f, -6.962630615e-03f, -6.968114406e-03f, -6.973585880e-03f, -6.979045031e-03f, -6.984491848e-03f, -6.989926323e-03f, -6.995348448e-03f, -7.000758213e-03f, -7.006155609e-03f,
--7.011540629e-03f, -7.016913263e-03f, -7.022273503e-03f, -7.027621340e-03f, -7.032956766e-03f, -7.038279771e-03f, -7.043590347e-03f, -7.048888487e-03f, -7.054174180e-03f, -7.059447420e-03f,
--7.064708196e-03f, -7.069956501e-03f, -7.075192327e-03f, -7.080415664e-03f, -7.085626505e-03f, -7.090824841e-03f, -7.096010664e-03f, -7.101183965e-03f, -7.106344736e-03f, -7.111492969e-03f,
--7.116628656e-03f, -7.121751788e-03f, -7.126862357e-03f, -7.131960355e-03f, -7.137045774e-03f, -7.142118605e-03f, -7.147178841e-03f, -7.152226473e-03f, -7.157261493e-03f, -7.162283894e-03f,
--7.167293666e-03f, -7.172290803e-03f, -7.177275296e-03f, -7.182247136e-03f, -7.187206317e-03f, -7.192152831e-03f, -7.197086668e-03f, -7.202007822e-03f, -7.206916285e-03f, -7.211812048e-03f,
--7.216695104e-03f, -7.221565445e-03f, -7.226423064e-03f, -7.231267952e-03f, -7.236100102e-03f, -7.240919506e-03f, -7.245726156e-03f, -7.250520045e-03f, -7.255301166e-03f, -7.260069510e-03f,
--7.264825069e-03f, -7.269567837e-03f, -7.274297806e-03f, -7.279014968e-03f, -7.283719316e-03f, -7.288410842e-03f, -7.293089539e-03f, -7.297755399e-03f, -7.302408415e-03f, -7.307048580e-03f,
--7.311675886e-03f, -7.316290326e-03f, -7.320891892e-03f, -7.325480577e-03f, -7.330056374e-03f, -7.334619276e-03f, -7.339169275e-03f, -7.343706365e-03f, -7.348230537e-03f, -7.352741785e-03f,
--7.357240102e-03f, -7.361725481e-03f, -7.366197913e-03f, -7.370657394e-03f, -7.375103914e-03f, -7.379537468e-03f, -7.383958048e-03f, -7.388365648e-03f, -7.392760260e-03f, -7.397141877e-03f,
--7.401510492e-03f, -7.405866100e-03f, -7.410208691e-03f, -7.414538261e-03f, -7.418854802e-03f, -7.423158307e-03f, -7.427448769e-03f, -7.431726182e-03f, -7.435990539e-03f, -7.440241833e-03f,
--7.444480058e-03f, -7.448705207e-03f, -7.452917272e-03f, -7.457116249e-03f, -7.461302129e-03f, -7.465474907e-03f, -7.469634576e-03f, -7.473781129e-03f, -7.477914559e-03f, -7.482034862e-03f,
--7.486142029e-03f, -7.490236054e-03f, -7.494316932e-03f, -7.498384655e-03f, -7.502439218e-03f, -7.506480613e-03f, -7.510508835e-03f, -7.514523877e-03f, -7.518525734e-03f, -7.522514398e-03f,
--7.526489863e-03f, -7.530452124e-03f, -7.534401175e-03f, -7.538337008e-03f, -7.542259618e-03f, -7.546168998e-03f, -7.550065144e-03f, -7.553948048e-03f, -7.557817704e-03f, -7.561674107e-03f,
--7.565517251e-03f, -7.569347129e-03f, -7.573163736e-03f, -7.576967065e-03f, -7.580757111e-03f, -7.584533868e-03f, -7.588297330e-03f, -7.592047491e-03f, -7.595784346e-03f, -7.599507888e-03f,
--7.603218112e-03f, -7.606915012e-03f, -7.610598582e-03f, -7.614268817e-03f, -7.617925711e-03f, -7.621569259e-03f, -7.625199454e-03f, -7.628816291e-03f, -7.632419764e-03f, -7.636009869e-03f,
--7.639586599e-03f, -7.643149949e-03f, -7.646699913e-03f, -7.650236487e-03f, -7.653759664e-03f, -7.657269439e-03f, -7.660765806e-03f, -7.664248761e-03f, -7.667718299e-03f, -7.671174412e-03f,
--7.674617098e-03f, -7.678046349e-03f, -7.681462161e-03f, -7.684864529e-03f, -7.688253447e-03f, -7.691628910e-03f, -7.694990914e-03f, -7.698339453e-03f, -7.701674521e-03f, -7.704996114e-03f,
--7.708304227e-03f, -7.711598854e-03f, -7.714879992e-03f, -7.718147633e-03f, -7.721401775e-03f, -7.724642411e-03f, -7.727869537e-03f, -7.731083148e-03f, -7.734283239e-03f, -7.737469805e-03f,
--7.740642842e-03f, -7.743802344e-03f, -7.746948307e-03f, -7.750080725e-03f, -7.753199596e-03f, -7.756304912e-03f, -7.759396671e-03f, -7.762474867e-03f, -7.765539495e-03f, -7.768590551e-03f,
--7.771628031e-03f, -7.774651930e-03f, -7.777662243e-03f, -7.780658965e-03f, -7.783642093e-03f, -7.786611622e-03f, -7.789567547e-03f, -7.792509864e-03f, -7.795438568e-03f, -7.798353655e-03f,
--7.801255122e-03f, -7.804142962e-03f, -7.807017173e-03f, -7.809877750e-03f, -7.812724688e-03f, -7.815557984e-03f, -7.818377633e-03f, -7.821183630e-03f, -7.823975973e-03f, -7.826754656e-03f,
--7.829519676e-03f, -7.832271028e-03f, -7.835008709e-03f, -7.837732714e-03f, -7.840443039e-03f, -7.843139680e-03f, -7.845822634e-03f, -7.848491896e-03f, -7.851147463e-03f, -7.853789330e-03f,
--7.856417494e-03f, -7.859031951e-03f, -7.861632697e-03f, -7.864219728e-03f, -7.866793040e-03f, -7.869352630e-03f, -7.871898494e-03f, -7.874430628e-03f, -7.876949029e-03f, -7.879453693e-03f,
--7.881944615e-03f, -7.884421794e-03f, -7.886885224e-03f, -7.889334903e-03f, -7.891770827e-03f, -7.894192992e-03f, -7.896601395e-03f, -7.898996032e-03f, -7.901376901e-03f, -7.903743997e-03f,
--7.906097317e-03f, -7.908436857e-03f, -7.910762616e-03f, -7.913074588e-03f, -7.915372771e-03f, -7.917657162e-03f, -7.919927757e-03f, -7.922184553e-03f, -7.924427546e-03f, -7.926656735e-03f,
--7.928872114e-03f, -7.931073683e-03f, -7.933261436e-03f, -7.935435371e-03f, -7.937595486e-03f, -7.939741777e-03f, -7.941874240e-03f, -7.943992874e-03f, -7.946097675e-03f, -7.948188639e-03f,
--7.950265765e-03f, -7.952329050e-03f, -7.954378489e-03f, -7.956414082e-03f, -7.958435824e-03f, -7.960443713e-03f, -7.962437746e-03f, -7.964417920e-03f, -7.966384234e-03f, -7.968336683e-03f,
--7.970275266e-03f, -7.972199979e-03f, -7.974110820e-03f, -7.976007787e-03f, -7.977890877e-03f, -7.979760086e-03f, -7.981615414e-03f, -7.983456857e-03f, -7.985284413e-03f, -7.987098079e-03f,
--7.988897852e-03f, -7.990683732e-03f, -7.992455714e-03f, -7.994213797e-03f, -7.995957978e-03f, -7.997688256e-03f, -7.999404627e-03f, -8.001107089e-03f, -8.002795641e-03f, -8.004470280e-03f,
--8.006131004e-03f, -8.007777810e-03f, -8.009410697e-03f, -8.011029662e-03f, -8.012634703e-03f, -8.014225819e-03f, -8.015803007e-03f, -8.017366265e-03f, -8.018915591e-03f, -8.020450983e-03f,
--8.021972439e-03f, -8.023479958e-03f, -8.024973536e-03f, -8.026453174e-03f, -8.027918868e-03f, -8.029370616e-03f, -8.030808418e-03f, -8.032232271e-03f, -8.033642173e-03f, -8.035038123e-03f,
--8.036420119e-03f, -8.037788159e-03f, -8.039142242e-03f, -8.040482366e-03f, -8.041808529e-03f, -8.043120729e-03f, -8.044418966e-03f, -8.045703238e-03f, -8.046973543e-03f, -8.048229879e-03f,
--8.049472246e-03f, -8.050700641e-03f, -8.051915064e-03f, -8.053115512e-03f, -8.054301985e-03f, -8.055474482e-03f, -8.056633000e-03f, -8.057777538e-03f, -8.058908096e-03f, -8.060024672e-03f,
--8.061127265e-03f, -8.062215873e-03f, -8.063290495e-03f, -8.064351131e-03f, -8.065397779e-03f, -8.066430438e-03f, -8.067449107e-03f, -8.068453785e-03f, -8.069444471e-03f, -8.070421163e-03f,
--8.071383861e-03f, -8.072332565e-03f, -8.073267272e-03f, -8.074187982e-03f, -8.075094694e-03f, -8.075987407e-03f, -8.076866121e-03f, -8.077730835e-03f, -8.078581547e-03f, -8.079418258e-03f,
--8.080240965e-03f, -8.081049669e-03f, -8.081844370e-03f, -8.082625065e-03f, -8.083391755e-03f, -8.084144439e-03f, -8.084883116e-03f, -8.085607786e-03f, -8.086318448e-03f, -8.087015102e-03f,
--8.087697747e-03f, -8.088366383e-03f, -8.089021009e-03f, -8.089661625e-03f, -8.090288230e-03f, -8.090900824e-03f, -8.091499407e-03f, -8.092083979e-03f, -8.092654538e-03f, -8.093211086e-03f,
--8.093753620e-03f, -8.094282142e-03f, -8.094796651e-03f, -8.095297147e-03f, -8.095783630e-03f, -8.096256099e-03f, -8.096714555e-03f, -8.097158997e-03f, -8.097589425e-03f, -8.098005839e-03f,
--8.098408240e-03f, -8.098796627e-03f, -8.099171001e-03f, -8.099531360e-03f, -8.099877706e-03f, -8.100210039e-03f, -8.100528358e-03f, -8.100832664e-03f, -8.101122957e-03f, -8.101399237e-03f,
--8.101661505e-03f, -8.101909760e-03f, -8.102144003e-03f, -8.102364235e-03f, -8.102570455e-03f, -8.102762663e-03f, -8.102940861e-03f, -8.103105049e-03f, -8.103255227e-03f, -8.103391395e-03f,
--8.103513554e-03f, -8.103621705e-03f, -8.103715848e-03f, -8.103795983e-03f, -8.103862111e-03f, -8.103914233e-03f, -8.103952349e-03f, -8.103976460e-03f, -8.103986567e-03f, -8.103982670e-03f,
--8.103964770e-03f, -8.103932867e-03f, -8.103886964e-03f, -8.103827059e-03f, -8.103753154e-03f, -8.103665251e-03f, -8.103563348e-03f, -8.103447449e-03f, -8.103317553e-03f, -8.103173662e-03f,
--8.103015775e-03f, -8.102843896e-03f, -8.102658023e-03f, -8.102458159e-03f, -8.102244305e-03f, -8.102016460e-03f, -8.101774628e-03f, -8.101518808e-03f, -8.101249002e-03f, -8.100965211e-03f,
--8.100667436e-03f, -8.100355679e-03f, -8.100029940e-03f, -8.099690221e-03f, -8.099336524e-03f, -8.098968848e-03f, -8.098587197e-03f, -8.098191571e-03f, -8.097781972e-03f, -8.097358400e-03f,
--8.096920858e-03f, -8.096469347e-03f, -8.096003868e-03f, -8.095524423e-03f, -8.095031014e-03f, -8.094523641e-03f, -8.094002307e-03f, -8.093467014e-03f, -8.092917761e-03f, -8.092354553e-03f,
--8.091777389e-03f, -8.091186272e-03f, -8.090581204e-03f, -8.089962186e-03f, -8.089329220e-03f, -8.088682307e-03f, -8.088021450e-03f, -8.087346651e-03f, -8.086657911e-03f, -8.085955232e-03f,
--8.085238617e-03f, -8.084508066e-03f, -8.083763583e-03f, -8.083005168e-03f, -8.082232824e-03f, -8.081446554e-03f, -8.080646358e-03f, -8.079832240e-03f, -8.079004201e-03f, -8.078162243e-03f,
--8.077306369e-03f, -8.076436581e-03f, -8.075552881e-03f, -8.074655270e-03f, -8.073743753e-03f, -8.072818329e-03f, -8.071879003e-03f, -8.070925776e-03f, -8.069958651e-03f, -8.068977630e-03f,
--8.067982715e-03f, -8.066973909e-03f, -8.065951214e-03f, -8.064914633e-03f, -8.063864168e-03f, -8.062799821e-03f, -8.061721596e-03f, -8.060629495e-03f, -8.059523520e-03f, -8.058403674e-03f,
--8.057269960e-03f, -8.056122380e-03f, -8.054960937e-03f, -8.053785634e-03f, -8.052596473e-03f, -8.051393457e-03f, -8.050176589e-03f, -8.048945871e-03f, -8.047701307e-03f, -8.046442900e-03f,
--8.045170652e-03f, -8.043884565e-03f, -8.042584644e-03f, -8.041270891e-03f, -8.039943309e-03f, -8.038601900e-03f, -8.037246669e-03f, -8.035877617e-03f, -8.034494749e-03f, -8.033098066e-03f,
--8.031687573e-03f, -8.030263272e-03f, -8.028825167e-03f, -8.027373260e-03f, -8.025907555e-03f, -8.024428055e-03f, -8.022934764e-03f, -8.021427684e-03f, -8.019906819e-03f, -8.018372172e-03f,
--8.016823747e-03f, -8.015261546e-03f, -8.013685574e-03f, -8.012095834e-03f, -8.010492329e-03f, -8.008875062e-03f, -8.007244038e-03f, -8.005599259e-03f, -8.003940729e-03f, -8.002268452e-03f,
--8.000582431e-03f, -7.998882670e-03f, -7.997169173e-03f, -7.995441943e-03f, -7.993700983e-03f, -7.991946298e-03f, -7.990177891e-03f, -7.988395766e-03f, -7.986599927e-03f, -7.984790378e-03f,
--7.982967122e-03f, -7.981130163e-03f, -7.979279505e-03f, -7.977415151e-03f, -7.975537107e-03f, -7.973645376e-03f, -7.971739961e-03f, -7.969820867e-03f, -7.967888097e-03f, -7.965941657e-03f,
--7.963981549e-03f, -7.962007777e-03f, -7.960020347e-03f, -7.958019262e-03f, -7.956004526e-03f, -7.953976143e-03f, -7.951934118e-03f, -7.949878455e-03f, -7.947809157e-03f, -7.945726230e-03f,
--7.943629677e-03f, -7.941519504e-03f, -7.939395713e-03f, -7.937258310e-03f, -7.935107298e-03f, -7.932942683e-03f, -7.930764469e-03f, -7.928572660e-03f, -7.926367260e-03f, -7.924148275e-03f,
--7.921915708e-03f, -7.919669564e-03f, -7.917409848e-03f, -7.915136564e-03f, -7.912849717e-03f, -7.910549312e-03f, -7.908235353e-03f, -7.905907845e-03f, -7.903566792e-03f, -7.901212200e-03f,
--7.898844072e-03f, -7.896462415e-03f, -7.894067232e-03f, -7.891658528e-03f, -7.889236309e-03f, -7.886800579e-03f, -7.884351342e-03f, -7.881888605e-03f, -7.879412372e-03f, -7.876922647e-03f,
--7.874419436e-03f, -7.871902744e-03f, -7.869372575e-03f, -7.866828936e-03f, -7.864271830e-03f, -7.861701263e-03f, -7.859117241e-03f, -7.856519767e-03f, -7.853908849e-03f, -7.851284489e-03f,
--7.848646695e-03f, -7.845995470e-03f, -7.843330821e-03f, -7.840652752e-03f, -7.837961270e-03f, -7.835256378e-03f, -7.832538083e-03f, -7.829806390e-03f, -7.827061304e-03f, -7.824302831e-03f,
--7.821530976e-03f, -7.818745744e-03f, -7.815947142e-03f, -7.813135174e-03f, -7.810309846e-03f, -7.807471164e-03f, -7.804619133e-03f, -7.801753759e-03f, -7.798875048e-03f, -7.795983004e-03f,
--7.793077634e-03f, -7.790158944e-03f, -7.787226939e-03f, -7.784281625e-03f, -7.781323007e-03f, -7.778351092e-03f, -7.775365885e-03f, -7.772367392e-03f, -7.769355619e-03f, -7.766330571e-03f,
--7.763292256e-03f, -7.760240678e-03f, -7.757175843e-03f, -7.754097758e-03f, -7.751006428e-03f, -7.747901860e-03f, -7.744784059e-03f, -7.741653031e-03f, -7.738508784e-03f, -7.735351322e-03f,
--7.732180651e-03f, -7.728996779e-03f, -7.725799711e-03f, -7.722589453e-03f, -7.719366011e-03f, -7.716129392e-03f, -7.712879603e-03f, -7.709616648e-03f, -7.706340535e-03f, -7.703051270e-03f,
--7.699748859e-03f, -7.696433309e-03f, -7.693104625e-03f, -7.689762815e-03f, -7.686407885e-03f, -7.683039841e-03f, -7.679658689e-03f, -7.676264437e-03f, -7.672857091e-03f, -7.669436657e-03f,
--7.666003142e-03f, -7.662556552e-03f, -7.659096894e-03f, -7.655624175e-03f, -7.652138401e-03f, -7.648639579e-03f, -7.645127716e-03f, -7.641602819e-03f, -7.638064893e-03f, -7.634513947e-03f,
--7.630949986e-03f, -7.627373017e-03f, -7.623783049e-03f, -7.620180086e-03f, -7.616564136e-03f, -7.612935206e-03f, -7.609293304e-03f, -7.605638435e-03f, -7.601970607e-03f, -7.598289826e-03f,
--7.594596101e-03f, -7.590889437e-03f, -7.587169842e-03f, -7.583437324e-03f, -7.579691888e-03f, -7.575933542e-03f, -7.572162294e-03f, -7.568378150e-03f, -7.564581118e-03f, -7.560771205e-03f,
--7.556948418e-03f, -7.553112764e-03f, -7.549264250e-03f, -7.545402885e-03f, -7.541528675e-03f, -7.537641627e-03f, -7.533741750e-03f, -7.529829049e-03f, -7.525903534e-03f, -7.521965210e-03f,
--7.518014086e-03f, -7.514050169e-03f, -7.510073467e-03f, -7.506083986e-03f, -7.502081736e-03f, -7.498066722e-03f, -7.494038953e-03f, -7.489998436e-03f, -7.485945180e-03f, -7.481879190e-03f,
--7.477800476e-03f, -7.473709045e-03f, -7.469604905e-03f, -7.465488062e-03f, -7.461358526e-03f, -7.457216304e-03f, -7.453061403e-03f, -7.448893832e-03f, -7.444713598e-03f, -7.440520710e-03f,
--7.436315174e-03f, -7.432096999e-03f, -7.427866193e-03f, -7.423622764e-03f, -7.419366720e-03f, -7.415098068e-03f, -7.410816817e-03f, -7.406522975e-03f, -7.402216550e-03f, -7.397897550e-03f,
--7.393565982e-03f, -7.389221856e-03f, -7.384865179e-03f, -7.380495959e-03f, -7.376114205e-03f, -7.371719924e-03f, -7.367313126e-03f, -7.362893818e-03f, -7.358462008e-03f, -7.354017705e-03f,
--7.349560917e-03f, -7.345091653e-03f, -7.340609920e-03f, -7.336115727e-03f, -7.331609083e-03f, -7.327089996e-03f, -7.322558474e-03f, -7.318014526e-03f, -7.313458160e-03f, -7.308889385e-03f,
--7.304308209e-03f, -7.299714641e-03f, -7.295108689e-03f, -7.290490362e-03f, -7.285859669e-03f, -7.281216618e-03f, -7.276561218e-03f, -7.271893477e-03f, -7.267213404e-03f, -7.262521009e-03f,
--7.257816298e-03f, -7.253099282e-03f, -7.248369970e-03f, -7.243628369e-03f, -7.238874488e-03f, -7.234108337e-03f, -7.229329925e-03f, -7.224539260e-03f, -7.219736351e-03f, -7.214921207e-03f,
--7.210093836e-03f, -7.205254249e-03f, -7.200402454e-03f, -7.195538459e-03f, -7.190662275e-03f, -7.185773909e-03f, -7.180873371e-03f, -7.175960671e-03f, -7.171035816e-03f, -7.166098817e-03f,
--7.161149682e-03f, -7.156188421e-03f, -7.151215042e-03f, -7.146229556e-03f, -7.141231970e-03f, -7.136222295e-03f, -7.131200540e-03f, -7.126166714e-03f, -7.121120826e-03f, -7.116062885e-03f,
--7.110992901e-03f, -7.105910884e-03f, -7.100816842e-03f, -7.095710785e-03f, -7.090592723e-03f, -7.085462665e-03f, -7.080320620e-03f, -7.075166598e-03f, -7.070000608e-03f, -7.064822661e-03f,
--7.059632764e-03f, -7.054430929e-03f, -7.049217164e-03f, -7.043991480e-03f, -7.038753885e-03f, -7.033504390e-03f, -7.028243004e-03f, -7.022969737e-03f, -7.017684598e-03f, -7.012387598e-03f,
--7.007078745e-03f, -7.001758051e-03f, -6.996425524e-03f, -6.991081174e-03f, -6.985725011e-03f, -6.980357046e-03f, -6.974977287e-03f, -6.969585745e-03f, -6.964182430e-03f, -6.958767351e-03f,
--6.953340519e-03f, -6.947901944e-03f, -6.942451635e-03f, -6.936989602e-03f, -6.931515856e-03f, -6.926030407e-03f, -6.920533264e-03f, -6.915024438e-03f, -6.909503939e-03f, -6.903971777e-03f,
--6.898427961e-03f, -6.892872503e-03f, -6.887305413e-03f, -6.881726700e-03f, -6.876136375e-03f, -6.870534448e-03f, -6.864920930e-03f, -6.859295830e-03f, -6.853659159e-03f, -6.848010927e-03f,
--6.842351144e-03f, -6.836679822e-03f, -6.830996970e-03f, -6.825302599e-03f, -6.819596719e-03f, -6.813879340e-03f, -6.808150474e-03f, -6.802410130e-03f, -6.796658319e-03f, -6.790895051e-03f,
--6.785120337e-03f, -6.779334188e-03f, -6.773536615e-03f, -6.767727626e-03f, -6.761907235e-03f, -6.756075450e-03f, -6.750232283e-03f, -6.744377744e-03f, -6.738511844e-03f, -6.732634593e-03f,
--6.726746003e-03f, -6.720846085e-03f, -6.714934848e-03f, -6.709012304e-03f, -6.703078463e-03f, -6.697133336e-03f, -6.691176935e-03f, -6.685209269e-03f, -6.679230351e-03f, -6.673240190e-03f,
--6.667238798e-03f, -6.661226185e-03f, -6.655202363e-03f, -6.649167343e-03f, -6.643121135e-03f, -6.637063750e-03f, -6.630995200e-03f, -6.624915496e-03f, -6.618824648e-03f, -6.612722668e-03f,
--6.606609567e-03f, -6.600485355e-03f, -6.594350045e-03f, -6.588203647e-03f, -6.582046172e-03f, -6.575877632e-03f, -6.569698038e-03f, -6.563507401e-03f, -6.557305732e-03f, -6.551093042e-03f,
--6.544869344e-03f, -6.538634647e-03f, -6.532388964e-03f, -6.526132306e-03f, -6.519864684e-03f, -6.513586109e-03f, -6.507296594e-03f, -6.500996149e-03f, -6.494684785e-03f, -6.488362515e-03f,
--6.482029350e-03f, -6.475685300e-03f, -6.469330379e-03f, -6.462964596e-03f, -6.456587965e-03f, -6.450200495e-03f, -6.443802200e-03f, -6.437393090e-03f, -6.430973177e-03f, -6.424542473e-03f,
--6.418100989e-03f, -6.411648738e-03f, -6.405185730e-03f, -6.398711977e-03f, -6.392227492e-03f, -6.385732286e-03f, -6.379226370e-03f, -6.372709757e-03f, -6.366182458e-03f, -6.359644485e-03f,
--6.353095850e-03f, -6.346536564e-03f, -6.339966641e-03f, -6.333386090e-03f, -6.326794926e-03f, -6.320193158e-03f, -6.313580800e-03f, -6.306957863e-03f, -6.300324359e-03f, -6.293680300e-03f,
--6.287025698e-03f, -6.280360566e-03f, -6.273684915e-03f, -6.266998757e-03f, -6.260302104e-03f, -6.253594969e-03f, -6.246877364e-03f, -6.240149300e-03f, -6.233410790e-03f, -6.226661846e-03f,
--6.219902481e-03f, -6.213132706e-03f, -6.206352533e-03f, -6.199561975e-03f, -6.192761044e-03f, -6.185949753e-03f, -6.179128114e-03f, -6.172296138e-03f, -6.165453839e-03f, -6.158601228e-03f,
--6.151738318e-03f, -6.144865122e-03f, -6.137981651e-03f, -6.131087919e-03f, -6.124183937e-03f, -6.117269718e-03f, -6.110345274e-03f, -6.103410619e-03f, -6.096465764e-03f, -6.089510722e-03f,
--6.082545505e-03f, -6.075570127e-03f, -6.068584599e-03f, -6.061588934e-03f, -6.054583145e-03f, -6.047567245e-03f, -6.040541245e-03f, -6.033505159e-03f, -6.026458999e-03f, -6.019402778e-03f,
--6.012336509e-03f, -6.005260205e-03f, -5.998173877e-03f, -5.991077540e-03f, -5.983971205e-03f, -5.976854885e-03f, -5.969728593e-03f, -5.962592343e-03f, -5.955446146e-03f, -5.948290016e-03f,
--5.941123966e-03f, -5.933948008e-03f, -5.926762155e-03f, -5.919566421e-03f, -5.912360818e-03f, -5.905145358e-03f, -5.897920056e-03f, -5.890684924e-03f, -5.883439975e-03f, -5.876185222e-03f,
--5.868920678e-03f, -5.861646356e-03f, -5.854362269e-03f, -5.847068431e-03f, -5.839764853e-03f, -5.832451551e-03f, -5.825128535e-03f, -5.817795821e-03f, -5.810453420e-03f, -5.803101346e-03f,
--5.795739613e-03f, -5.788368233e-03f, -5.780987219e-03f, -5.773596586e-03f, -5.766196345e-03f, -5.758786511e-03f, -5.751367096e-03f, -5.743938115e-03f, -5.736499579e-03f, -5.729051504e-03f,
--5.721593901e-03f, -5.714126784e-03f, -5.706650168e-03f, -5.699164064e-03f, -5.691668487e-03f, -5.684163449e-03f, -5.676648965e-03f, -5.669125048e-03f, -5.661591711e-03f, -5.654048968e-03f,
--5.646496832e-03f, -5.638935317e-03f, -5.631364436e-03f, -5.623784203e-03f, -5.616194632e-03f, -5.608595735e-03f, -5.600987527e-03f, -5.593370022e-03f, -5.585743232e-03f, -5.578107172e-03f,
--5.570461854e-03f, -5.562807294e-03f, -5.555143504e-03f, -5.547470498e-03f, -5.539788291e-03f, -5.532096895e-03f, -5.524396324e-03f, -5.516686592e-03f, -5.508967714e-03f, -5.501239702e-03f,
--5.493502571e-03f, -5.485756334e-03f, -5.478001005e-03f, -5.470236598e-03f, -5.462463128e-03f, -5.454680607e-03f, -5.446889050e-03f, -5.439088470e-03f, -5.431278882e-03f, -5.423460300e-03f,
--5.415632737e-03f, -5.407796207e-03f, -5.399950725e-03f, -5.392096304e-03f, -5.384232959e-03f, -5.376360703e-03f, -5.368479551e-03f, -5.360589516e-03f, -5.352690613e-03f, -5.344782856e-03f,
--5.336866259e-03f, -5.328940836e-03f, -5.321006600e-03f, -5.313063567e-03f, -5.305111751e-03f, -5.297151165e-03f, -5.289181824e-03f, -5.281203742e-03f, -5.273216933e-03f, -5.265221411e-03f,
--5.257217192e-03f, -5.249204288e-03f, -5.241182714e-03f, -5.233152486e-03f, -5.225113616e-03f, -5.217066119e-03f, -5.209010009e-03f, -5.200945302e-03f, -5.192872011e-03f, -5.184790150e-03f,
--5.176699734e-03f, -5.168600778e-03f, -5.160493296e-03f, -5.152377302e-03f, -5.144252810e-03f, -5.136119836e-03f, -5.127978394e-03f, -5.119828497e-03f, -5.111670161e-03f, -5.103503401e-03f,
--5.095328230e-03f, -5.087144663e-03f, -5.078952715e-03f, -5.070752401e-03f, -5.062543734e-03f, -5.054326730e-03f, -5.046101403e-03f, -5.037867768e-03f, -5.029625840e-03f, -5.021375632e-03f,
--5.013117161e-03f, -5.004850440e-03f, -4.996575483e-03f, -4.988292307e-03f, -4.980000926e-03f, -4.971701353e-03f, -4.963393605e-03f, -4.955077695e-03f, -4.946753640e-03f, -4.938421452e-03f,
--4.930081148e-03f, -4.921732742e-03f, -4.913376248e-03f, -4.905011682e-03f, -4.896639059e-03f, -4.888258394e-03f, -4.879869700e-03f, -4.871472994e-03f, -4.863068289e-03f, -4.854655602e-03f,
--4.846234947e-03f, -4.837806339e-03f, -4.829369792e-03f, -4.820925323e-03f, -4.812472945e-03f, -4.804012674e-03f, -4.795544524e-03f, -4.787068512e-03f, -4.778584652e-03f, -4.770092958e-03f,
--4.761593447e-03f, -4.753086132e-03f, -4.744571030e-03f, -4.736048155e-03f, -4.727517522e-03f, -4.718979147e-03f, -4.710433045e-03f, -4.701879230e-03f, -4.693317719e-03f, -4.684748525e-03f,
--4.676171665e-03f, -4.667587153e-03f, -4.658995006e-03f, -4.650395237e-03f, -4.641787862e-03f, -4.633172897e-03f, -4.624550356e-03f, -4.615920256e-03f, -4.607282611e-03f, -4.598637436e-03f,
--4.589984748e-03f, -4.581324561e-03f, -4.572656890e-03f, -4.563981751e-03f, -4.555299159e-03f, -4.546609131e-03f, -4.537911680e-03f, -4.529206822e-03f, -4.520494574e-03f, -4.511774950e-03f,
--4.503047965e-03f, -4.494313636e-03f, -4.485571977e-03f, -4.476823005e-03f, -4.468066734e-03f, -4.459303180e-03f, -4.450532359e-03f, -4.441754285e-03f, -4.432968976e-03f, -4.424176445e-03f,
--4.415376709e-03f, -4.406569784e-03f, -4.397755684e-03f, -4.388934426e-03f, -4.380106025e-03f, -4.371270497e-03f, -4.362427857e-03f, -4.353578120e-03f, -4.344721304e-03f, -4.335857422e-03f,
--4.326986492e-03f, -4.318108528e-03f, -4.309223546e-03f, -4.300331562e-03f, -4.291432592e-03f, -4.282526651e-03f, -4.273613756e-03f, -4.264693921e-03f, -4.255767163e-03f, -4.246833497e-03f,
--4.237892940e-03f, -4.228945506e-03f, -4.219991212e-03f, -4.211030074e-03f, -4.202062107e-03f, -4.193087328e-03f, -4.184105752e-03f, -4.175117394e-03f, -4.166122272e-03f, -4.157120400e-03f,
--4.148111795e-03f, -4.139096472e-03f, -4.130074447e-03f, -4.121045737e-03f, -4.112010358e-03f, -4.102968324e-03f, -4.093919653e-03f, -4.084864360e-03f, -4.075802461e-03f, -4.066733972e-03f,
--4.057658909e-03f, -4.048577288e-03f, -4.039489126e-03f, -4.030394437e-03f, -4.021293239e-03f, -4.012185547e-03f, -4.003071377e-03f, -3.993950746e-03f, -3.984823669e-03f, -3.975690163e-03f,
--3.966550243e-03f, -3.957403926e-03f, -3.948251228e-03f, -3.939092165e-03f, -3.929926753e-03f, -3.920755009e-03f, -3.911576948e-03f, -3.902392587e-03f, -3.893201941e-03f, -3.884005028e-03f,
--3.874801863e-03f, -3.865592462e-03f, -3.856376842e-03f, -3.847155019e-03f, -3.837927009e-03f, -3.828692828e-03f, -3.819452493e-03f, -3.810206020e-03f, -3.800953425e-03f, -3.791694725e-03f,
--3.782429936e-03f, -3.773159074e-03f, -3.763882155e-03f, -3.754599196e-03f, -3.745310213e-03f, -3.736015222e-03f, -3.726714241e-03f, -3.717407285e-03f, -3.708094370e-03f, -3.698775513e-03f,
--3.689450730e-03f, -3.680120039e-03f, -3.670783454e-03f, -3.661440994e-03f, -3.652092673e-03f, -3.642738509e-03f, -3.633378517e-03f, -3.624012715e-03f, -3.614641119e-03f, -3.605263746e-03f,
--3.595880611e-03f, -3.586491732e-03f, -3.577097124e-03f, -3.567696805e-03f, -3.558290791e-03f, -3.548879098e-03f, -3.539461744e-03f, -3.530038743e-03f, -3.520610114e-03f, -3.511175873e-03f,
--3.501736036e-03f, -3.492290620e-03f, -3.482839641e-03f, -3.473383117e-03f, -3.463921063e-03f, -3.454453496e-03f, -3.444980433e-03f, -3.435501891e-03f, -3.426017886e-03f, -3.416528435e-03f,
--3.407033555e-03f, -3.397533262e-03f, -3.388027573e-03f, -3.378516504e-03f, -3.369000073e-03f, -3.359478295e-03f, -3.349951189e-03f, -3.340418770e-03f, -3.330881055e-03f, -3.321338061e-03f,
--3.311789805e-03f, -3.302236304e-03f, -3.292677573e-03f, -3.283113631e-03f, -3.273544493e-03f, -3.263970177e-03f, -3.254390700e-03f, -3.244806077e-03f, -3.235216327e-03f, -3.225621465e-03f,
--3.216021510e-03f, -3.206416476e-03f, -3.196806382e-03f, -3.187191245e-03f, -3.177571080e-03f, -3.167945906e-03f, -3.158315738e-03f, -3.148680594e-03f, -3.139040490e-03f, -3.129395445e-03f,
--3.119745473e-03f, -3.110090593e-03f, -3.100430821e-03f, -3.090766175e-03f, -3.081096671e-03f, -3.071422325e-03f, -3.061743156e-03f, -3.052059180e-03f, -3.042370414e-03f, -3.032676875e-03f,
--3.022978580e-03f, -3.013275546e-03f, -3.003567790e-03f, -2.993855329e-03f, -2.984138180e-03f, -2.974416360e-03f, -2.964689886e-03f, -2.954958775e-03f, -2.945223044e-03f, -2.935482710e-03f,
--2.925737791e-03f, -2.915988303e-03f, -2.906234264e-03f, -2.896475689e-03f, -2.886712598e-03f, -2.876945006e-03f, -2.867172931e-03f, -2.857396390e-03f, -2.847615399e-03f, -2.837829977e-03f,
--2.828040140e-03f, -2.818245906e-03f, -2.808447291e-03f, -2.798644312e-03f, -2.788836988e-03f, -2.779025334e-03f, -2.769209369e-03f, -2.759389108e-03f, -2.749564571e-03f, -2.739735773e-03f,
--2.729902732e-03f, -2.720065465e-03f, -2.710223989e-03f, -2.700378322e-03f, -2.690528481e-03f, -2.680674482e-03f, -2.670816344e-03f, -2.660954083e-03f, -2.651087717e-03f, -2.641217263e-03f,
--2.631342738e-03f, -2.621464159e-03f, -2.611581544e-03f, -2.601694910e-03f, -2.591804275e-03f, -2.581909655e-03f, -2.572011068e-03f, -2.562108531e-03f, -2.552202061e-03f, -2.542291677e-03f,
--2.532377394e-03f, -2.522459231e-03f, -2.512537205e-03f, -2.502611333e-03f, -2.492681632e-03f, -2.482748120e-03f, -2.472810814e-03f, -2.462869731e-03f, -2.452924890e-03f, -2.442976307e-03f,
--2.433023999e-03f, -2.423067984e-03f, -2.413108280e-03f, -2.403144904e-03f, -2.393177872e-03f, -2.383207204e-03f, -2.373232915e-03f, -2.363255024e-03f, -2.353273547e-03f, -2.343288503e-03f,
--2.333299908e-03f, -2.323307781e-03f, -2.313312138e-03f, -2.303312997e-03f, -2.293310376e-03f, -2.283304291e-03f, -2.273294761e-03f, -2.263281802e-03f, -2.253265433e-03f, -2.243245671e-03f,
--2.233222533e-03f, -2.223196037e-03f, -2.213166200e-03f, -2.203133040e-03f, -2.193096574e-03f, -2.183056820e-03f, -2.173013795e-03f, -2.162967516e-03f, -2.152918003e-03f, -2.142865270e-03f,
--2.132809338e-03f, -2.122750222e-03f, -2.112687940e-03f, -2.102622511e-03f, -2.092553951e-03f, -2.082482278e-03f, -2.072407510e-03f, -2.062329664e-03f, -2.052248758e-03f, -2.042164809e-03f,
--2.032077835e-03f, -2.021987853e-03f, -2.011894882e-03f, -2.001798938e-03f, -1.991700039e-03f, -1.981598204e-03f, -1.971493448e-03f, -1.961385791e-03f, -1.951275249e-03f, -1.941161841e-03f,
--1.931045584e-03f, -1.920926495e-03f, -1.910804592e-03f, -1.900679893e-03f, -1.890552415e-03f, -1.880422177e-03f, -1.870289195e-03f, -1.860153487e-03f, -1.850015072e-03f, -1.839873966e-03f,
--1.829730187e-03f, -1.819583753e-03f, -1.809434682e-03f, -1.799282991e-03f, -1.789128698e-03f, -1.778971821e-03f, -1.768812377e-03f, -1.758650384e-03f, -1.748485859e-03f, -1.738318821e-03f,
--1.728149287e-03f, -1.717977275e-03f, -1.707802802e-03f, -1.697625886e-03f, -1.687446545e-03f, -1.677264797e-03f, -1.667080659e-03f, -1.656894149e-03f, -1.646705284e-03f, -1.636514083e-03f,
--1.626320564e-03f, -1.616124743e-03f, -1.605926638e-03f, -1.595726268e-03f, -1.585523651e-03f, -1.575318802e-03f, -1.565111742e-03f, -1.554902487e-03f, -1.544691055e-03f, -1.534477463e-03f,
--1.524261730e-03f, -1.514043874e-03f, -1.503823912e-03f, -1.493601861e-03f, -1.483377740e-03f, -1.473151567e-03f, -1.462923358e-03f, -1.452693133e-03f, -1.442460908e-03f, -1.432226702e-03f,
--1.421990532e-03f, -1.411752416e-03f, -1.401512372e-03f, -1.391270417e-03f, -1.381026570e-03f, -1.370780848e-03f, -1.360533270e-03f, -1.350283851e-03f, -1.340032612e-03f, -1.329779569e-03f,
--1.319524740e-03f, -1.309268143e-03f, -1.299009796e-03f, -1.288749717e-03f, -1.278487923e-03f, -1.268224433e-03f, -1.257959263e-03f, -1.247692433e-03f, -1.237423959e-03f, -1.227153859e-03f,
--1.216882153e-03f, -1.206608856e-03f, -1.196333987e-03f, -1.186057564e-03f, -1.175779605e-03f, -1.165500128e-03f, -1.155219150e-03f, -1.144936689e-03f, -1.134652763e-03f, -1.124367390e-03f,
--1.114080588e-03f, -1.103792374e-03f, -1.093502767e-03f, -1.083211784e-03f, -1.072919443e-03f, -1.062625762e-03f, -1.052330759e-03f, -1.042034452e-03f, -1.031736858e-03f, -1.021437996e-03f,
--1.011137883e-03f, -1.000836537e-03f, -9.905339761e-04f, -9.802302180e-04f, -9.699252806e-04f, -9.596191817e-04f, -9.493119393e-04f, -9.390035711e-04f, -9.286940952e-04f, -9.183835292e-04f,
--9.080718912e-04f, -8.977591989e-04f, -8.874454703e-04f, -8.771307232e-04f, -8.668149755e-04f, -8.564982450e-04f, -8.461805497e-04f, -8.358619074e-04f, -8.255423360e-04f, -8.152218533e-04f,
--8.049004773e-04f, -7.945782258e-04f, -7.842551167e-04f, -7.739311679e-04f, -7.636063972e-04f, -7.532808226e-04f, -7.429544619e-04f, -7.326273330e-04f, -7.222994538e-04f, -7.119708421e-04f,
--7.016415159e-04f, -6.913114930e-04f, -6.809807914e-04f, -6.706494288e-04f, -6.603174232e-04f, -6.499847924e-04f, -6.396515544e-04f, -6.293177271e-04f, -6.189833282e-04f, -6.086483758e-04f,
--5.983128876e-04f, -5.879768816e-04f, -5.776403757e-04f, -5.673033877e-04f, -5.569659355e-04f, -5.466280370e-04f, -5.362897102e-04f, -5.259509727e-04f, -5.156118427e-04f, -5.052723379e-04f,
--4.949324762e-04f, -4.845922755e-04f, -4.742517538e-04f, -4.639109288e-04f, -4.535698184e-04f, -4.432284406e-04f, -4.328868132e-04f, -4.225449541e-04f, -4.122028812e-04f, -4.018606124e-04f,
--3.915181655e-04f, -3.811755584e-04f, -3.708328090e-04f, -3.604899352e-04f, -3.501469548e-04f, -3.398038858e-04f, -3.294607459e-04f, -3.191175532e-04f, -3.087743253e-04f, -2.984310804e-04f,
--2.880878361e-04f, -2.777446104e-04f, -2.674014211e-04f, -2.570582861e-04f, -2.467152233e-04f, -2.363722505e-04f, -2.260293857e-04f, -2.156866466e-04f, -2.053440511e-04f, -1.950016172e-04f,
--1.846593626e-04f, -1.743173053e-04f, -1.639754630e-04f, -1.536338536e-04f, -1.432924951e-04f, -1.329514052e-04f, -1.226106018e-04f, -1.122701028e-04f, -1.019299260e-04f, -9.159008925e-05f,
--8.125061041e-05f, -7.091150732e-05f, -6.057279783e-05f, -5.023449979e-05f, -3.989663103e-05f, -2.955920940e-05f, -1.922225273e-05f, -8.885778869e-06f, 1.450194356e-06f, 1.178564911e-05f,
-2.212056756e-05f, 3.245493188e-05f, 4.278872423e-05f, 5.312192680e-05f, 6.345452175e-05f, 7.378649127e-05f, 8.411781753e-05f, 9.444848272e-05f, 1.047784690e-04f, 1.151077586e-04f,
-1.254363337e-04f, 1.357641764e-04f, 1.460912691e-04f, 1.564175937e-04f, 1.667431327e-04f, 1.770678680e-04f, 1.873917821e-04f, 1.977148570e-04f, 2.080370749e-04f, 2.183584181e-04f,
-2.286788689e-04f, 2.389984093e-04f, 2.493170216e-04f, 2.596346880e-04f, 2.699513908e-04f, 2.802671122e-04f, 2.905818343e-04f, 3.008955395e-04f, 3.112082099e-04f, 3.215198278e-04f,
-3.318303755e-04f, 3.421398351e-04f, 3.524481889e-04f, 3.627554191e-04f, 3.730615081e-04f, 3.833664380e-04f, 3.936701910e-04f, 4.039727496e-04f, 4.142740958e-04f, 4.245742121e-04f,
-4.348730805e-04f, 4.451706835e-04f, 4.554670033e-04f, 4.657620221e-04f, 4.760557222e-04f, 4.863480859e-04f, 4.966390955e-04f, 5.069287334e-04f, 5.172169816e-04f, 5.275038227e-04f,
-5.377892388e-04f, 5.480732122e-04f, 5.583557253e-04f, 5.686367604e-04f, 5.789162997e-04f, 5.891943257e-04f, 5.994708205e-04f, 6.097457666e-04f, 6.200191463e-04f, 6.302909418e-04f,
-6.405611355e-04f, 6.508297098e-04f, 6.610966469e-04f, 6.713619293e-04f, 6.816255393e-04f, 6.918874591e-04f, 7.021476713e-04f, 7.124061581e-04f, 7.226629019e-04f, 7.329178850e-04f,
-7.431710899e-04f, 7.534224989e-04f, 7.636720943e-04f, 7.739198587e-04f, 7.841657742e-04f, 7.944098234e-04f, 8.046519887e-04f, 8.148922523e-04f, 8.251305968e-04f, 8.353670045e-04f,
-8.456014579e-04f, 8.558339393e-04f, 8.660644312e-04f, 8.762929160e-04f, 8.865193762e-04f, 8.967437941e-04f, 9.069661521e-04f, 9.171864329e-04f, 9.274046186e-04f, 9.376206920e-04f,
-9.478346353e-04f, 9.580464310e-04f, 9.682560617e-04f, 9.784635097e-04f, 9.886687576e-04f, 9.988717878e-04f, 1.009072583e-03f, 1.019271125e-03f, 1.029467397e-03f, 1.039661381e-03f,
-1.049853061e-03f, 1.060042417e-03f, 1.070229433e-03f, 1.080414092e-03f, 1.090596375e-03f, 1.100776266e-03f, 1.110953746e-03f, 1.121128799e-03f, 1.131301407e-03f, 1.141471553e-03f,
-1.151639218e-03f, 1.161804387e-03f, 1.171967040e-03f, 1.182127161e-03f, 1.192284732e-03f, 1.202439737e-03f, 1.212592156e-03f, 1.222741974e-03f, 1.232889173e-03f, 1.243033734e-03f,
-1.253175642e-03f, 1.263314878e-03f, 1.273451425e-03f, 1.283585266e-03f, 1.293716383e-03f, 1.303844759e-03f, 1.313970377e-03f, 1.324093219e-03f, 1.334213267e-03f, 1.344330506e-03f,
-1.354444916e-03f, 1.364556482e-03f, 1.374665184e-03f, 1.384771008e-03f, 1.394873934e-03f, 1.404973945e-03f, 1.415071025e-03f, 1.425165156e-03f, 1.435256320e-03f, 1.445344501e-03f,
-1.455429681e-03f, 1.465511843e-03f, 1.475590970e-03f, 1.485667043e-03f, 1.495740047e-03f, 1.505809964e-03f, 1.515876776e-03f, 1.525940466e-03f, 1.536001018e-03f, 1.546058413e-03f,
-1.556112635e-03f, 1.566163667e-03f, 1.576211490e-03f, 1.586256089e-03f, 1.596297445e-03f, 1.606335542e-03f, 1.616370363e-03f, 1.626401890e-03f, 1.636430106e-03f, 1.646454994e-03f,
-1.656476536e-03f, 1.666494717e-03f, 1.676509517e-03f, 1.686520921e-03f, 1.696528912e-03f, 1.706533471e-03f, 1.716534583e-03f, 1.726532229e-03f, 1.736526393e-03f, 1.746517058e-03f,
-1.756504207e-03f, 1.766487822e-03f, 1.776467886e-03f, 1.786444383e-03f, 1.796417295e-03f, 1.806386606e-03f, 1.816352297e-03f, 1.826314353e-03f, 1.836272756e-03f, 1.846227489e-03f,
-1.856178536e-03f, 1.866125878e-03f, 1.876069500e-03f, 1.886009383e-03f, 1.895945512e-03f, 1.905877869e-03f, 1.915806437e-03f, 1.925731199e-03f, 1.935652138e-03f, 1.945569238e-03f,
-1.955482481e-03f, 1.965391851e-03f, 1.975297330e-03f, 1.985198902e-03f, 1.995096549e-03f, 2.004990255e-03f, 2.014880003e-03f, 2.024765775e-03f, 2.034647556e-03f, 2.044525328e-03f,
-2.054399075e-03f, 2.064268779e-03f, 2.074134423e-03f, 2.083995992e-03f, 2.093853467e-03f, 2.103706832e-03f, 2.113556071e-03f, 2.123401166e-03f, 2.133242101e-03f, 2.143078859e-03f,
-2.152911422e-03f, 2.162739775e-03f, 2.172563901e-03f, 2.182383783e-03f, 2.192199403e-03f, 2.202010746e-03f, 2.211817794e-03f, 2.221620531e-03f, 2.231418941e-03f, 2.241213005e-03f,
-2.251002709e-03f, 2.260788034e-03f, 2.270568964e-03f, 2.280345483e-03f, 2.290117575e-03f, 2.299885221e-03f, 2.309648406e-03f, 2.319407113e-03f, 2.329161325e-03f, 2.338911026e-03f,
-2.348656199e-03f, 2.358396828e-03f, 2.368132895e-03f, 2.377864385e-03f, 2.387591280e-03f, 2.397313564e-03f, 2.407031221e-03f, 2.416744234e-03f, 2.426452587e-03f, 2.436156262e-03f,
-2.445855243e-03f, 2.455549515e-03f, 2.465239060e-03f, 2.474923861e-03f, 2.484603903e-03f, 2.494279169e-03f, 2.503949642e-03f, 2.513615306e-03f, 2.523276144e-03f, 2.532932140e-03f,
-2.542583278e-03f, 2.552229541e-03f, 2.561870913e-03f, 2.571507377e-03f, 2.581138916e-03f, 2.590765515e-03f, 2.600387158e-03f, 2.610003826e-03f, 2.619615506e-03f, 2.629222179e-03f,
-2.638823830e-03f, 2.648420442e-03f, 2.658011998e-03f, 2.667598484e-03f, 2.677179882e-03f, 2.686756176e-03f, 2.696327349e-03f, 2.705893387e-03f, 2.715454271e-03f, 2.725009986e-03f,
-2.734560516e-03f, 2.744105844e-03f, 2.753645954e-03f, 2.763180830e-03f, 2.772710456e-03f, 2.782234816e-03f, 2.791753893e-03f, 2.801267671e-03f, 2.810776134e-03f, 2.820279266e-03f,
-2.829777050e-03f, 2.839269471e-03f, 2.848756513e-03f, 2.858238158e-03f, 2.867714392e-03f, 2.877185198e-03f, 2.886650560e-03f, 2.896110462e-03f, 2.905564887e-03f, 2.915013820e-03f,
-2.924457245e-03f, 2.933895146e-03f, 2.943327506e-03f, 2.952754310e-03f, 2.962175541e-03f, 2.971591184e-03f, 2.981001222e-03f, 2.990405640e-03f, 2.999804422e-03f, 3.009197552e-03f,
-3.018585013e-03f, 3.027966790e-03f, 3.037342866e-03f, 3.046713227e-03f, 3.056077856e-03f, 3.065436737e-03f, 3.074789854e-03f, 3.084137192e-03f, 3.093478734e-03f, 3.102814465e-03f,
-3.112144368e-03f, 3.121468429e-03f, 3.130786631e-03f, 3.140098958e-03f, 3.149405395e-03f, 3.158705926e-03f, 3.168000535e-03f, 3.177289206e-03f, 3.186571923e-03f, 3.195848671e-03f,
-3.205119434e-03f, 3.214384197e-03f, 3.223642943e-03f, 3.232895657e-03f, 3.242142324e-03f, 3.251382927e-03f, 3.260617450e-03f, 3.269845879e-03f, 3.279068198e-03f, 3.288284391e-03f,
-3.297494442e-03f, 3.306698335e-03f, 3.315896056e-03f, 3.325087588e-03f, 3.334272917e-03f, 3.343452025e-03f, 3.352624899e-03f, 3.361791522e-03f, 3.370951879e-03f, 3.380105954e-03f,
-3.389253732e-03f, 3.398395197e-03f, 3.407530334e-03f, 3.416659127e-03f, 3.425781562e-03f, 3.434897621e-03f, 3.444007291e-03f, 3.453110555e-03f, 3.462207399e-03f, 3.471297806e-03f,
-3.480381762e-03f, 3.489459251e-03f, 3.498530257e-03f, 3.507594766e-03f, 3.516652762e-03f, 3.525704229e-03f, 3.534749153e-03f, 3.543787517e-03f, 3.552819308e-03f, 3.561844509e-03f,
-3.570863105e-03f, 3.579875081e-03f, 3.588880422e-03f, 3.597879112e-03f, 3.606871137e-03f, 3.615856481e-03f, 3.624835128e-03f, 3.633807064e-03f, 3.642772274e-03f, 3.651730742e-03f,
-3.660682454e-03f, 3.669627393e-03f, 3.678565546e-03f, 3.687496896e-03f, 3.696421429e-03f, 3.705339130e-03f, 3.714249983e-03f, 3.723153974e-03f, 3.732051088e-03f, 3.740941309e-03f,
-3.749824623e-03f, 3.758701014e-03f, 3.767570467e-03f, 3.776432968e-03f, 3.785288502e-03f, 3.794137053e-03f, 3.802978607e-03f, 3.811813149e-03f, 3.820640663e-03f, 3.829461135e-03f,
-3.838274551e-03f, 3.847080894e-03f, 3.855880151e-03f, 3.864672306e-03f, 3.873457345e-03f, 3.882235253e-03f, 3.891006014e-03f, 3.899769615e-03f, 3.908526040e-03f, 3.917275275e-03f,
-3.926017304e-03f, 3.934752114e-03f, 3.943479689e-03f, 3.952200015e-03f, 3.960913076e-03f, 3.969618859e-03f, 3.978317349e-03f, 3.987008530e-03f, 3.995692389e-03f, 4.004368910e-03f,
-4.013038079e-03f, 4.021699882e-03f, 4.030354303e-03f, 4.039001329e-03f, 4.047640944e-03f, 4.056273134e-03f, 4.064897885e-03f, 4.073515182e-03f, 4.082125010e-03f, 4.090727356e-03f,
-4.099322203e-03f, 4.107909539e-03f, 4.116489348e-03f, 4.125061617e-03f, 4.133626330e-03f, 4.142183473e-03f, 4.150733032e-03f, 4.159274993e-03f, 4.167809340e-03f, 4.176336060e-03f,
-4.184855139e-03f, 4.193366562e-03f, 4.201870314e-03f, 4.210366381e-03f, 4.218854750e-03f, 4.227335406e-03f, 4.235808334e-03f, 4.244273520e-03f, 4.252730950e-03f, 4.261180610e-03f,
-4.269622486e-03f, 4.278056563e-03f, 4.286482827e-03f, 4.294901264e-03f, 4.303311860e-03f, 4.311714601e-03f, 4.320109473e-03f, 4.328496460e-03f, 4.336875551e-03f, 4.345246729e-03f,
-4.353609982e-03f, 4.361965295e-03f, 4.370312655e-03f, 4.378652046e-03f, 4.386983455e-03f, 4.395306869e-03f, 4.403622273e-03f, 4.411929652e-03f, 4.420228994e-03f, 4.428520285e-03f,
-4.436803509e-03f, 4.445078655e-03f, 4.453345706e-03f, 4.461604650e-03f, 4.469855474e-03f, 4.478098162e-03f, 4.486332701e-03f, 4.494559077e-03f, 4.502777277e-03f, 4.510987286e-03f,
-4.519189092e-03f, 4.527382680e-03f, 4.535568036e-03f, 4.543745146e-03f, 4.551913998e-03f, 4.560074577e-03f, 4.568226869e-03f, 4.576370861e-03f, 4.584506540e-03f, 4.592633891e-03f,
-4.600752901e-03f, 4.608863557e-03f, 4.616965844e-03f, 4.625059749e-03f, 4.633145259e-03f, 4.641222360e-03f, 4.649291038e-03f, 4.657351281e-03f, 4.665403074e-03f, 4.673446404e-03f,
-4.681481257e-03f, 4.689507621e-03f, 4.697525481e-03f, 4.705534824e-03f, 4.713535637e-03f, 4.721527907e-03f, 4.729511619e-03f, 4.737486761e-03f, 4.745453320e-03f, 4.753411281e-03f,
-4.761360632e-03f, 4.769301359e-03f, 4.777233449e-03f, 4.785156889e-03f, 4.793071665e-03f, 4.800977765e-03f, 4.808875174e-03f, 4.816763881e-03f, 4.824643871e-03f, 4.832515131e-03f,
-4.840377649e-03f, 4.848231411e-03f, 4.856076403e-03f, 4.863912614e-03f, 4.871740029e-03f, 4.879558636e-03f, 4.887368422e-03f, 4.895169373e-03f, 4.902961477e-03f, 4.910744720e-03f,
-4.918519089e-03f, 4.926284573e-03f, 4.934041156e-03f, 4.941788827e-03f, 4.949527573e-03f, 4.957257380e-03f, 4.964978237e-03f, 4.972690129e-03f, 4.980393044e-03f, 4.988086969e-03f,
-4.995771891e-03f, 5.003447798e-03f, 5.011114677e-03f, 5.018772514e-03f, 5.026421298e-03f, 5.034061015e-03f, 5.041691652e-03f, 5.049313197e-03f, 5.056925637e-03f, 5.064528960e-03f,
-5.072123153e-03f, 5.079708202e-03f, 5.087284096e-03f, 5.094850822e-03f, 5.102408367e-03f, 5.109956718e-03f, 5.117495863e-03f, 5.125025790e-03f, 5.132546486e-03f, 5.140057938e-03f,
-5.147560134e-03f, 5.155053061e-03f, 5.162536707e-03f, 5.170011059e-03f, 5.177476105e-03f, 5.184931833e-03f, 5.192378230e-03f, 5.199815283e-03f, 5.207242981e-03f, 5.214661310e-03f,
-5.222070259e-03f, 5.229469816e-03f, 5.236859967e-03f, 5.244240701e-03f, 5.251612005e-03f, 5.258973867e-03f, 5.266326275e-03f, 5.273669216e-03f, 5.281002679e-03f, 5.288326651e-03f,
-5.295641120e-03f, 5.302946074e-03f, 5.310241500e-03f, 5.317527387e-03f, 5.324803723e-03f, 5.332070494e-03f, 5.339327690e-03f, 5.346575298e-03f, 5.353813307e-03f, 5.361041703e-03f,
-5.368260475e-03f, 5.375469612e-03f, 5.382669101e-03f, 5.389858929e-03f, 5.397039087e-03f, 5.404209560e-03f, 5.411370338e-03f, 5.418521408e-03f, 5.425662759e-03f, 5.432794379e-03f,
-5.439916255e-03f, 5.447028377e-03f, 5.454130732e-03f, 5.461223309e-03f, 5.468306095e-03f, 5.475379079e-03f, 5.482442250e-03f, 5.489495595e-03f, 5.496539103e-03f, 5.503572763e-03f,
-5.510596562e-03f, 5.517610488e-03f, 5.524614531e-03f, 5.531608679e-03f, 5.538592920e-03f, 5.545567242e-03f, 5.552531634e-03f, 5.559486085e-03f, 5.566430582e-03f, 5.573365115e-03f,
-5.580289671e-03f, 5.587204240e-03f, 5.594108810e-03f, 5.601003370e-03f, 5.607887908e-03f, 5.614762412e-03f, 5.621626872e-03f, 5.628481276e-03f, 5.635325612e-03f, 5.642159870e-03f,
-5.648984037e-03f, 5.655798104e-03f, 5.662602058e-03f, 5.669395888e-03f, 5.676179583e-03f, 5.682953132e-03f, 5.689716523e-03f, 5.696469746e-03f, 5.703212789e-03f, 5.709945641e-03f,
-5.716668291e-03f, 5.723380728e-03f, 5.730082940e-03f, 5.736774918e-03f, 5.743456649e-03f, 5.750128122e-03f, 5.756789327e-03f, 5.763440253e-03f, 5.770080888e-03f, 5.776711222e-03f,
-5.783331244e-03f, 5.789940942e-03f, 5.796540306e-03f, 5.803129325e-03f, 5.809707989e-03f, 5.816276285e-03f, 5.822834204e-03f, 5.829381735e-03f, 5.835918866e-03f, 5.842445588e-03f,
-5.848961889e-03f, 5.855467758e-03f, 5.861963185e-03f, 5.868448159e-03f, 5.874922670e-03f, 5.881386706e-03f, 5.887840258e-03f, 5.894283314e-03f, 5.900715864e-03f, 5.907137897e-03f,
-5.913549403e-03f, 5.919950371e-03f, 5.926340791e-03f, 5.932720652e-03f, 5.939089944e-03f, 5.945448655e-03f, 5.951796777e-03f, 5.958134297e-03f, 5.964461207e-03f, 5.970777494e-03f,
-5.977083150e-03f, 5.983378164e-03f, 5.989662525e-03f, 5.995936223e-03f, 6.002199247e-03f, 6.008451588e-03f, 6.014693235e-03f, 6.020924178e-03f, 6.027144407e-03f, 6.033353911e-03f,
-6.039552680e-03f, 6.045740704e-03f, 6.051917973e-03f, 6.058084477e-03f, 6.064240206e-03f, 6.070385149e-03f, 6.076519297e-03f, 6.082642639e-03f, 6.088755165e-03f, 6.094856866e-03f,
-6.100947731e-03f, 6.107027750e-03f, 6.113096914e-03f, 6.119155212e-03f, 6.125202635e-03f, 6.131239172e-03f, 6.137264815e-03f, 6.143279552e-03f, 6.149283374e-03f, 6.155276271e-03f,
-6.161258233e-03f, 6.167229251e-03f, 6.173189315e-03f, 6.179138415e-03f, 6.185076541e-03f, 6.191003684e-03f, 6.196919834e-03f, 6.202824981e-03f, 6.208719116e-03f, 6.214602228e-03f,
-6.220474309e-03f, 6.226335349e-03f, 6.232185337e-03f, 6.238024266e-03f, 6.243852124e-03f, 6.249668903e-03f, 6.255474593e-03f, 6.261269185e-03f, 6.267052669e-03f, 6.272825035e-03f,
-6.278586275e-03f, 6.284336378e-03f, 6.290075336e-03f, 6.295803139e-03f, 6.301519778e-03f, 6.307225243e-03f, 6.312919526e-03f, 6.318602616e-03f, 6.324274505e-03f, 6.329935183e-03f,
-6.335584641e-03f, 6.341222871e-03f, 6.346849862e-03f, 6.352465606e-03f, 6.358070093e-03f, 6.363663314e-03f, 6.369245261e-03f, 6.374815924e-03f, 6.380375293e-03f, 6.385923361e-03f,
-6.391460118e-03f, 6.396985555e-03f, 6.402499663e-03f, 6.408002433e-03f, 6.413493856e-03f, 6.418973924e-03f, 6.424442626e-03f, 6.429899955e-03f, 6.435345902e-03f, 6.440780457e-03f,
-6.446203612e-03f, 6.451615359e-03f, 6.457015687e-03f, 6.462404589e-03f, 6.467782056e-03f, 6.473148079e-03f, 6.478502650e-03f, 6.483845759e-03f, 6.489177398e-03f, 6.494497558e-03f,
-6.499806231e-03f, 6.505103409e-03f, 6.510389082e-03f, 6.515663242e-03f, 6.520925880e-03f, 6.526176988e-03f, 6.531416558e-03f, 6.536644581e-03f, 6.541861049e-03f, 6.547065952e-03f,
-6.552259284e-03f, 6.557441034e-03f, 6.562611196e-03f, 6.567769759e-03f, 6.572916718e-03f, 6.578052062e-03f, 6.583175783e-03f, 6.588287875e-03f, 6.593388327e-03f, 6.598477132e-03f,
-6.603554281e-03f, 6.608619767e-03f, 6.613673582e-03f, 6.618715716e-03f, 6.623746162e-03f, 6.628764913e-03f, 6.633771959e-03f, 6.638767293e-03f, 6.643750906e-03f, 6.648722791e-03f,
-6.653682940e-03f, 6.658631345e-03f, 6.663567997e-03f, 6.668492889e-03f, 6.673406012e-03f, 6.678307360e-03f, 6.683196924e-03f, 6.688074696e-03f, 6.692940668e-03f, 6.697794832e-03f,
-6.702637182e-03f, 6.707467708e-03f, 6.712286404e-03f, 6.717093261e-03f, 6.721888272e-03f, 6.726671428e-03f, 6.731442724e-03f, 6.736202149e-03f, 6.740949698e-03f, 6.745685363e-03f,
-6.750409135e-03f, 6.755121008e-03f, 6.759820973e-03f, 6.764509023e-03f, 6.769185152e-03f, 6.773849350e-03f, 6.778501612e-03f, 6.783141928e-03f, 6.787770293e-03f, 6.792386698e-03f,
-6.796991136e-03f, 6.801583600e-03f, 6.806164082e-03f, 6.810732576e-03f, 6.815289073e-03f, 6.819833567e-03f, 6.824366050e-03f, 6.828886515e-03f, 6.833394955e-03f, 6.837891363e-03f,
-6.842375731e-03f, 6.846848052e-03f, 6.851308320e-03f, 6.855756527e-03f, 6.860192666e-03f, 6.864616729e-03f, 6.869028711e-03f, 6.873428603e-03f, 6.877816400e-03f, 6.882192093e-03f,
-6.886555676e-03f, 6.890907143e-03f, 6.895246485e-03f, 6.899573696e-03f, 6.903888770e-03f, 6.908191700e-03f, 6.912482478e-03f, 6.916761097e-03f, 6.921027552e-03f, 6.925281835e-03f,
-6.929523940e-03f, 6.933753860e-03f, 6.937971587e-03f, 6.942177116e-03f, 6.946370440e-03f, 6.950551552e-03f, 6.954720446e-03f, 6.958877114e-03f, 6.963021551e-03f, 6.967153750e-03f,
-6.971273704e-03f, 6.975381406e-03f, 6.979476851e-03f, 6.983560032e-03f, 6.987630942e-03f, 6.991689575e-03f, 6.995735925e-03f, 6.999769985e-03f, 7.003791748e-03f, 7.007801209e-03f,
-7.011798361e-03f, 7.015783198e-03f, 7.019755714e-03f, 7.023715902e-03f, 7.027663756e-03f, 7.031599270e-03f, 7.035522438e-03f, 7.039433253e-03f, 7.043331710e-03f, 7.047217802e-03f,
-7.051091523e-03f, 7.054952868e-03f, 7.058801829e-03f, 7.062638402e-03f, 7.066462579e-03f, 7.070274355e-03f, 7.074073725e-03f, 7.077860682e-03f, 7.081635219e-03f, 7.085397333e-03f,
-7.089147015e-03f, 7.092884261e-03f, 7.096609065e-03f, 7.100321421e-03f, 7.104021322e-03f, 7.107708764e-03f, 7.111383741e-03f, 7.115046246e-03f, 7.118696275e-03f, 7.122333821e-03f,
-7.125958879e-03f, 7.129571443e-03f, 7.133171508e-03f, 7.136759067e-03f, 7.140334116e-03f, 7.143896648e-03f, 7.147446659e-03f, 7.150984143e-03f, 7.154509094e-03f, 7.158021506e-03f,
-7.161521375e-03f, 7.165008695e-03f, 7.168483461e-03f, 7.171945667e-03f, 7.175395307e-03f, 7.178832377e-03f, 7.182256871e-03f, 7.185668784e-03f, 7.189068111e-03f, 7.192454845e-03f,
-7.195828983e-03f, 7.199190519e-03f, 7.202539448e-03f, 7.205875764e-03f, 7.209199463e-03f, 7.212510539e-03f, 7.215808987e-03f, 7.219094802e-03f, 7.222367980e-03f, 7.225628515e-03f,
-7.228876401e-03f, 7.232111635e-03f, 7.235334211e-03f, 7.238544124e-03f, 7.241741370e-03f, 7.244925942e-03f, 7.248097838e-03f, 7.251257051e-03f, 7.254403577e-03f, 7.257537411e-03f,
-7.260658548e-03f, 7.263766983e-03f, 7.266862713e-03f, 7.269945731e-03f, 7.273016034e-03f, 7.276073617e-03f, 7.279118474e-03f, 7.282150602e-03f, 7.285169996e-03f, 7.288176651e-03f,
-7.291170563e-03f, 7.294151726e-03f, 7.297120138e-03f, 7.300075792e-03f, 7.303018685e-03f, 7.305948813e-03f, 7.308866170e-03f, 7.311770752e-03f, 7.314662555e-03f, 7.317541575e-03f,
-7.320407808e-03f, 7.323261248e-03f, 7.326101892e-03f, 7.328929735e-03f, 7.331744774e-03f, 7.334547003e-03f, 7.337336419e-03f, 7.340113017e-03f, 7.342876794e-03f, 7.345627746e-03f,
-7.348365867e-03f, 7.351091154e-03f, 7.353803604e-03f, 7.356503211e-03f, 7.359189972e-03f, 7.361863883e-03f, 7.364524940e-03f, 7.367173139e-03f, 7.369808476e-03f, 7.372430947e-03f,
-7.375040548e-03f, 7.377637275e-03f, 7.380221125e-03f, 7.382792094e-03f, 7.385350178e-03f, 7.387895372e-03f, 7.390427674e-03f, 7.392947080e-03f, 7.395453585e-03f, 7.397947187e-03f,
-7.400427881e-03f, 7.402895664e-03f, 7.405350533e-03f, 7.407792483e-03f, 7.410221511e-03f, 7.412637614e-03f, 7.415040787e-03f, 7.417431028e-03f, 7.419808334e-03f, 7.422172699e-03f,
-7.424524122e-03f, 7.426862599e-03f, 7.429188126e-03f, 7.431500700e-03f, 7.433800317e-03f, 7.436086975e-03f, 7.438360669e-03f, 7.440621398e-03f, 7.442869156e-03f, 7.445103942e-03f,
-7.447325752e-03f, 7.449534582e-03f, 7.451730431e-03f, 7.453913293e-03f, 7.456083167e-03f, 7.458240049e-03f, 7.460383936e-03f, 7.462514825e-03f, 7.464632714e-03f, 7.466737598e-03f,
-7.468829475e-03f, 7.470908343e-03f, 7.472974197e-03f, 7.475027036e-03f, 7.477066856e-03f, 7.479093654e-03f, 7.481107428e-03f, 7.483108175e-03f, 7.485095892e-03f, 7.487070576e-03f,
-7.489032224e-03f, 7.490980834e-03f, 7.492916403e-03f, 7.494838928e-03f, 7.496748406e-03f, 7.498644836e-03f, 7.500528213e-03f, 7.502398537e-03f, 7.504255803e-03f, 7.506100011e-03f,
-7.507931156e-03f, 7.509749236e-03f, 7.511554250e-03f, 7.513346194e-03f, 7.515125066e-03f, 7.516890864e-03f, 7.518643585e-03f, 7.520383227e-03f, 7.522109787e-03f, 7.523823264e-03f,
-7.525523655e-03f, 7.527210957e-03f, 7.528885168e-03f, 7.530546287e-03f, 7.532194310e-03f, 7.533829237e-03f, 7.535451063e-03f, 7.537059788e-03f, 7.538655409e-03f, 7.540237925e-03f,
-7.541807332e-03f, 7.543363630e-03f, 7.544906815e-03f, 7.546436886e-03f, 7.547953842e-03f, 7.549457679e-03f, 7.550948396e-03f, 7.552425991e-03f, 7.553890463e-03f, 7.555341809e-03f,
-7.556780027e-03f, 7.558205116e-03f, 7.559617074e-03f, 7.561015899e-03f, 7.562401589e-03f, 7.563774143e-03f, 7.565133558e-03f, 7.566479834e-03f, 7.567812968e-03f, 7.569132959e-03f,
-7.570439805e-03f, 7.571733505e-03f, 7.573014057e-03f, 7.574281459e-03f, 7.575535710e-03f, 7.576776808e-03f, 7.578004753e-03f, 7.579219541e-03f, 7.580421173e-03f, 7.581609647e-03f,
-7.582784960e-03f, 7.583947113e-03f, 7.585096102e-03f, 7.586231928e-03f, 7.587354589e-03f, 7.588464083e-03f, 7.589560410e-03f, 7.590643567e-03f, 7.591713555e-03f, 7.592770371e-03f,
-7.593814014e-03f, 7.594844484e-03f, 7.595861779e-03f, 7.596865898e-03f, 7.597856840e-03f, 7.598834603e-03f, 7.599799188e-03f, 7.600750593e-03f, 7.601688817e-03f, 7.602613858e-03f,
-7.603525717e-03f, 7.604424391e-03f, 7.605309881e-03f, 7.606182185e-03f, 7.607041303e-03f, 7.607887233e-03f, 7.608719975e-03f, 7.609539528e-03f, 7.610345891e-03f, 7.611139064e-03f,
-7.611919046e-03f, 7.612685835e-03f, 7.613439433e-03f, 7.614179837e-03f, 7.614907047e-03f, 7.615621063e-03f, 7.616321884e-03f, 7.617009509e-03f, 7.617683939e-03f, 7.618345172e-03f,
-7.618993207e-03f, 7.619628046e-03f, 7.620249686e-03f, 7.620858128e-03f, 7.621453371e-03f, 7.622035415e-03f, 7.622604259e-03f, 7.623159904e-03f, 7.623702349e-03f, 7.624231593e-03f,
-7.624747636e-03f, 7.625250479e-03f, 7.625740121e-03f, 7.626216561e-03f, 7.626679800e-03f, 7.627129837e-03f, 7.627566672e-03f, 7.627990306e-03f, 7.628400738e-03f, 7.628797968e-03f,
-7.629181995e-03f, 7.629552821e-03f, 7.629910445e-03f, 7.630254867e-03f, 7.630586087e-03f, 7.630904106e-03f, 7.631208922e-03f, 7.631500537e-03f, 7.631778951e-03f, 7.632044164e-03f,
-7.632296175e-03f, 7.632534986e-03f, 7.632760596e-03f, 7.632973006e-03f, 7.633172216e-03f, 7.633358226e-03f, 7.633531037e-03f, 7.633690649e-03f, 7.633837062e-03f, 7.633970277e-03f,
-7.634090295e-03f, 7.634197115e-03f, 7.634290738e-03f, 7.634371165e-03f, 7.634438396e-03f, 7.634492431e-03f, 7.634533272e-03f, 7.634560919e-03f, 7.634575372e-03f, 7.634576633e-03f,
-7.634564701e-03f, 7.634539577e-03f, 7.634501263e-03f, 7.634449759e-03f, 7.634385065e-03f, 7.634307182e-03f, 7.634216112e-03f, 7.634111854e-03f, 7.633994411e-03f, 7.633863782e-03f,
-7.633719968e-03f, 7.633562972e-03f, 7.633392792e-03f, 7.633209431e-03f, 7.633012889e-03f, 7.632803167e-03f, 7.632580267e-03f, 7.632344189e-03f, 7.632094934e-03f, 7.631832504e-03f,
-7.631556900e-03f, 7.631268122e-03f, 7.630966172e-03f, 7.630651052e-03f, 7.630322761e-03f, 7.629981302e-03f, 7.629626676e-03f, 7.629258884e-03f, 7.628877927e-03f, 7.628483807e-03f,
-7.628076524e-03f, 7.627656081e-03f, 7.627222479e-03f, 7.626775719e-03f, 7.626315802e-03f, 7.625842730e-03f, 7.625356505e-03f, 7.624857128e-03f, 7.624344600e-03f, 7.623818923e-03f,
-7.623280099e-03f, 7.622728129e-03f, 7.622163014e-03f, 7.621584757e-03f, 7.620993359e-03f, 7.620388822e-03f, 7.619771147e-03f, 7.619140336e-03f, 7.618496392e-03f, 7.617839314e-03f,
-7.617169107e-03f, 7.616485770e-03f, 7.615789307e-03f, 7.615079718e-03f, 7.614357006e-03f, 7.613621173e-03f, 7.612872221e-03f, 7.612110151e-03f, 7.611334966e-03f, 7.610546667e-03f,
-7.609745257e-03f, 7.608930738e-03f, 7.608103111e-03f, 7.607262379e-03f, 7.606408543e-03f, 7.605541607e-03f, 7.604661572e-03f, 7.603768440e-03f, 7.602862214e-03f, 7.601942895e-03f,
-7.601010486e-03f, 7.600064990e-03f, 7.599106407e-03f, 7.598134742e-03f, 7.597149996e-03f, 7.596152171e-03f, 7.595141271e-03f, 7.594117296e-03f, 7.593080250e-03f, 7.592030136e-03f,
-7.590966955e-03f, 7.589890709e-03f, 7.588801403e-03f, 7.587699038e-03f, 7.586583616e-03f, 7.585455140e-03f, 7.584313614e-03f, 7.583159039e-03f, 7.581991418e-03f, 7.580810753e-03f,
-7.579617048e-03f, 7.578410306e-03f, 7.577190528e-03f, 7.575957718e-03f, 7.574711878e-03f, 7.573453012e-03f, 7.572181122e-03f, 7.570896210e-03f, 7.569598281e-03f, 7.568287336e-03f,
-7.566963378e-03f, 7.565626412e-03f, 7.564276438e-03f, 7.562913461e-03f, 7.561537484e-03f, 7.560148509e-03f, 7.558746539e-03f, 7.557331579e-03f, 7.555903629e-03f, 7.554462695e-03f,
-7.553008779e-03f, 7.551541883e-03f, 7.550062012e-03f, 7.548569169e-03f, 7.547063356e-03f, 7.545544577e-03f, 7.544012835e-03f, 7.542468134e-03f, 7.540910477e-03f, 7.539339867e-03f,
-7.537756307e-03f, 7.536159801e-03f, 7.534550353e-03f, 7.532927965e-03f, 7.531292642e-03f, 7.529644386e-03f, 7.527983201e-03f, 7.526309091e-03f, 7.524622059e-03f, 7.522922109e-03f,
-7.521209244e-03f, 7.519483468e-03f, 7.517744785e-03f, 7.515993198e-03f, 7.514228710e-03f, 7.512451326e-03f, 7.510661050e-03f, 7.508857884e-03f, 7.507041834e-03f, 7.505212901e-03f,
-7.503371092e-03f, 7.501516408e-03f, 7.499648854e-03f, 7.497768434e-03f, 7.495875152e-03f, 7.493969012e-03f, 7.492050017e-03f, 7.490118172e-03f, 7.488173480e-03f, 7.486215946e-03f,
-7.484245574e-03f, 7.482262367e-03f, 7.480266329e-03f, 7.478257466e-03f, 7.476235780e-03f, 7.474201276e-03f, 7.472153959e-03f, 7.470093832e-03f, 7.468020899e-03f, 7.465935165e-03f,
-7.463836634e-03f, 7.461725310e-03f, 7.459601198e-03f, 7.457464302e-03f, 7.455314626e-03f, 7.453152174e-03f, 7.450976951e-03f, 7.448788962e-03f, 7.446588210e-03f, 7.444374700e-03f,
-7.442148437e-03f, 7.439909425e-03f, 7.437657669e-03f, 7.435393172e-03f, 7.433115940e-03f, 7.430825978e-03f, 7.428523289e-03f, 7.426207879e-03f, 7.423879752e-03f, 7.421538912e-03f,
-7.419185365e-03f, 7.416819115e-03f, 7.414440167e-03f, 7.412048525e-03f, 7.409644195e-03f, 7.407227180e-03f, 7.404797487e-03f, 7.402355119e-03f, 7.399900082e-03f, 7.397432380e-03f,
-7.394952019e-03f, 7.392459003e-03f, 7.389953337e-03f, 7.387435026e-03f, 7.384904076e-03f, 7.382360490e-03f, 7.379804275e-03f, 7.377235435e-03f, 7.374653975e-03f, 7.372059901e-03f,
-7.369453217e-03f, 7.366833928e-03f, 7.364202041e-03f, 7.361557559e-03f, 7.358900488e-03f, 7.356230834e-03f, 7.353548602e-03f, 7.350853796e-03f, 7.348146422e-03f, 7.345426486e-03f,
-7.342693992e-03f, 7.339948947e-03f, 7.337191355e-03f, 7.334421222e-03f, 7.331638553e-03f, 7.328843354e-03f, 7.326035630e-03f, 7.323215386e-03f, 7.320382629e-03f, 7.317537364e-03f,
-7.314679595e-03f, 7.311809329e-03f, 7.308926572e-03f, 7.306031328e-03f, 7.303123604e-03f, 7.300203406e-03f, 7.297270738e-03f, 7.294325606e-03f, 7.291368017e-03f, 7.288397976e-03f,
-7.285415489e-03f, 7.282420561e-03f, 7.279413198e-03f, 7.276393406e-03f, 7.273361192e-03f, 7.270316560e-03f, 7.267259517e-03f, 7.264190068e-03f, 7.261108220e-03f, 7.258013979e-03f,
-7.254907349e-03f, 7.251788339e-03f, 7.248656952e-03f, 7.245513196e-03f, 7.242357077e-03f, 7.239188600e-03f, 7.236007771e-03f, 7.232814598e-03f, 7.229609085e-03f, 7.226391239e-03f,
-7.223161066e-03f, 7.219918573e-03f, 7.216663766e-03f, 7.213396650e-03f, 7.210117232e-03f, 7.206825519e-03f, 7.203521516e-03f, 7.200205230e-03f, 7.196876668e-03f, 7.193535836e-03f,
-7.190182739e-03f, 7.186817385e-03f, 7.183439780e-03f, 7.180049930e-03f, 7.176647842e-03f, 7.173233522e-03f, 7.169806977e-03f, 7.166368214e-03f, 7.162917238e-03f, 7.159454057e-03f,
-7.155978677e-03f, 7.152491104e-03f, 7.148991346e-03f, 7.145479409e-03f, 7.141955299e-03f, 7.138419024e-03f, 7.134870590e-03f, 7.131310003e-03f, 7.127737271e-03f, 7.124152400e-03f,
-7.120555398e-03f, 7.116946270e-03f, 7.113325024e-03f, 7.109691667e-03f, 7.106046205e-03f, 7.102388646e-03f, 7.098718995e-03f, 7.095037262e-03f, 7.091343451e-03f, 7.087637570e-03f,
-7.083919627e-03f, 7.080189628e-03f, 7.076447580e-03f, 7.072693491e-03f, 7.068927367e-03f, 7.065149216e-03f, 7.061359044e-03f, 7.057556859e-03f, 7.053742668e-03f, 7.049916478e-03f,
-7.046078297e-03f, 7.042228131e-03f, 7.038365988e-03f, 7.034491875e-03f, 7.030605799e-03f, 7.026707769e-03f, 7.022797790e-03f, 7.018875870e-03f, 7.014942018e-03f, 7.010996239e-03f,
-7.007038542e-03f, 7.003068935e-03f, 6.999087423e-03f, 6.995094015e-03f, 6.991088719e-03f, 6.987071542e-03f, 6.983042491e-03f, 6.979001575e-03f, 6.974948799e-03f, 6.970884173e-03f,
-6.966807704e-03f, 6.962719399e-03f, 6.958619266e-03f, 6.954507313e-03f, 6.950383548e-03f, 6.946247977e-03f, 6.942100610e-03f, 6.937941453e-03f, 6.933770514e-03f, 6.929587802e-03f,
-6.925393324e-03f, 6.921187087e-03f, 6.916969100e-03f, 6.912739371e-03f, 6.908497907e-03f, 6.904244717e-03f, 6.899979808e-03f, 6.895703188e-03f, 6.891414865e-03f, 6.887114847e-03f,
-6.882803143e-03f, 6.878479760e-03f, 6.874144707e-03f, 6.869797990e-03f, 6.865439619e-03f, 6.861069602e-03f, 6.856687947e-03f, 6.852294661e-03f, 6.847889753e-03f, 6.843473232e-03f,
-6.839045105e-03f, 6.834605381e-03f, 6.830154067e-03f, 6.825691173e-03f, 6.821216706e-03f, 6.816730675e-03f, 6.812233088e-03f, 6.807723953e-03f, 6.803203280e-03f, 6.798671075e-03f,
-6.794127348e-03f, 6.789572107e-03f, 6.785005361e-03f, 6.780427117e-03f, 6.775837385e-03f, 6.771236173e-03f, 6.766623489e-03f, 6.761999342e-03f, 6.757363740e-03f, 6.752716693e-03f,
-6.748058209e-03f, 6.743388295e-03f, 6.738706962e-03f, 6.734014217e-03f, 6.729310070e-03f, 6.724594529e-03f, 6.719867602e-03f, 6.715129299e-03f, 6.710379627e-03f, 6.705618597e-03f,
-6.700846217e-03f, 6.696062495e-03f, 6.691267441e-03f, 6.686461062e-03f, 6.681643369e-03f, 6.676814370e-03f, 6.671974074e-03f, 6.667122490e-03f, 6.662259626e-03f, 6.657385492e-03f,
-6.652500097e-03f, 6.647603449e-03f, 6.642695559e-03f, 6.637776434e-03f, 6.632846083e-03f, 6.627904517e-03f, 6.622951744e-03f, 6.617987773e-03f, 6.613012613e-03f, 6.608026273e-03f,
-6.603028763e-03f, 6.598020092e-03f, 6.593000269e-03f, 6.587969303e-03f, 6.582927204e-03f, 6.577873980e-03f, 6.572809641e-03f, 6.567734196e-03f, 6.562647655e-03f, 6.557550028e-03f,
-6.552441322e-03f, 6.547321548e-03f, 6.542190715e-03f, 6.537048833e-03f, 6.531895911e-03f, 6.526731958e-03f, 6.521556983e-03f, 6.516370998e-03f, 6.511174010e-03f, 6.505966029e-03f,
-6.500747066e-03f, 6.495517129e-03f, 6.490276228e-03f, 6.485024373e-03f, 6.479761573e-03f, 6.474487838e-03f, 6.469203177e-03f, 6.463907601e-03f, 6.458601119e-03f, 6.453283740e-03f,
-6.447955475e-03f, 6.442616333e-03f, 6.437266324e-03f, 6.431905458e-03f, 6.426533744e-03f, 6.421151192e-03f, 6.415757813e-03f, 6.410353616e-03f, 6.404938610e-03f, 6.399512807e-03f,
-6.394076215e-03f, 6.388628844e-03f, 6.383170706e-03f, 6.377701809e-03f, 6.372222163e-03f, 6.366731779e-03f, 6.361230666e-03f, 6.355718835e-03f, 6.350196296e-03f, 6.344663058e-03f,
-6.339119133e-03f, 6.333564529e-03f, 6.327999257e-03f, 6.322423327e-03f, 6.316836750e-03f, 6.311239535e-03f, 6.305631693e-03f, 6.300013234e-03f, 6.294384169e-03f, 6.288744506e-03f,
-6.283094258e-03f, 6.277433433e-03f, 6.271762043e-03f, 6.266080097e-03f, 6.260387607e-03f, 6.254684581e-03f, 6.248971032e-03f, 6.243246968e-03f, 6.237512401e-03f, 6.231767341e-03f,
-6.226011799e-03f, 6.220245784e-03f, 6.214469308e-03f, 6.208682380e-03f, 6.202885012e-03f, 6.197077214e-03f, 6.191258997e-03f, 6.185430370e-03f, 6.179591345e-03f, 6.173741932e-03f,
-6.167882142e-03f, 6.162011986e-03f, 6.156131474e-03f, 6.150240616e-03f, 6.144339424e-03f, 6.138427909e-03f, 6.132506080e-03f, 6.126573949e-03f, 6.120631526e-03f, 6.114678823e-03f,
-6.108715850e-03f, 6.102742618e-03f, 6.096759137e-03f, 6.090765419e-03f, 6.084761474e-03f, 6.078747314e-03f, 6.072722948e-03f, 6.066688389e-03f, 6.060643647e-03f, 6.054588733e-03f,
-6.048523658e-03f, 6.042448432e-03f, 6.036363068e-03f, 6.030267576e-03f, 6.024161966e-03f, 6.018046251e-03f, 6.011920441e-03f, 6.005784547e-03f, 5.999638580e-03f, 5.993482552e-03f,
-5.987316473e-03f, 5.981140355e-03f, 5.974954209e-03f, 5.968758046e-03f, 5.962551877e-03f, 5.956335714e-03f, 5.950109567e-03f, 5.943873449e-03f, 5.937627370e-03f, 5.931371341e-03f,
-5.925105374e-03f, 5.918829480e-03f, 5.912543671e-03f, 5.906247958e-03f, 5.899942351e-03f, 5.893626864e-03f, 5.887301506e-03f, 5.880966290e-03f, 5.874621227e-03f, 5.868266328e-03f,
-5.861901605e-03f, 5.855527070e-03f, 5.849142733e-03f, 5.842748606e-03f, 5.836344701e-03f, 5.829931030e-03f, 5.823507603e-03f, 5.817074433e-03f, 5.810631532e-03f, 5.804178910e-03f,
-5.797716579e-03f, 5.791244551e-03f, 5.784762838e-03f, 5.778271452e-03f, 5.771770403e-03f, 5.765259705e-03f, 5.758739368e-03f, 5.752209404e-03f, 5.745669825e-03f, 5.739120643e-03f,
-5.732561870e-03f, 5.725993517e-03f, 5.719415596e-03f, 5.712828119e-03f, 5.706231099e-03f, 5.699624546e-03f, 5.693008472e-03f, 5.686382891e-03f, 5.679747813e-03f, 5.673103250e-03f,
-5.666449215e-03f, 5.659785719e-03f, 5.653112774e-03f, 5.646430393e-03f, 5.639738587e-03f, 5.633037369e-03f, 5.626326750e-03f, 5.619606743e-03f, 5.612877359e-03f, 5.606138611e-03f,
-5.599390510e-03f, 5.592633070e-03f, 5.585866302e-03f, 5.579090218e-03f, 5.572304830e-03f, 5.565510151e-03f, 5.558706192e-03f, 5.551892967e-03f, 5.545070487e-03f, 5.538238764e-03f,
-5.531397811e-03f, 5.524547640e-03f, 5.517688263e-03f, 5.510819693e-03f, 5.503941942e-03f, 5.497055023e-03f, 5.490158946e-03f, 5.483253726e-03f, 5.476339374e-03f, 5.469415904e-03f,
-5.462483326e-03f, 5.455541654e-03f, 5.448590900e-03f, 5.441631076e-03f, 5.434662196e-03f, 5.427684271e-03f, 5.420697314e-03f, 5.413701338e-03f, 5.406696354e-03f, 5.399682377e-03f,
-5.392659417e-03f, 5.385627489e-03f, 5.378586603e-03f, 5.371536774e-03f, 5.364478013e-03f, 5.357410334e-03f, 5.350333748e-03f, 5.343248269e-03f, 5.336153910e-03f, 5.329050682e-03f,
-5.321938599e-03f, 5.314817673e-03f, 5.307687918e-03f, 5.300549345e-03f, 5.293401968e-03f, 5.286245800e-03f, 5.279080853e-03f, 5.271907140e-03f, 5.264724673e-03f, 5.257533467e-03f,
-5.250333533e-03f, 5.243124885e-03f, 5.235907535e-03f, 5.228681496e-03f, 5.221446782e-03f, 5.214203404e-03f, 5.206951377e-03f, 5.199690713e-03f, 5.192421425e-03f, 5.185143526e-03f,
-5.177857028e-03f, 5.170561946e-03f, 5.163258292e-03f, 5.155946079e-03f, 5.148625320e-03f, 5.141296029e-03f, 5.133958217e-03f, 5.126611900e-03f, 5.119257088e-03f, 5.111893797e-03f,
-5.104522038e-03f, 5.097141825e-03f, 5.089753171e-03f, 5.082356090e-03f, 5.074950594e-03f, 5.067536697e-03f, 5.060114411e-03f, 5.052683751e-03f, 5.045244730e-03f, 5.037797360e-03f,
-5.030341655e-03f, 5.022877629e-03f, 5.015405294e-03f, 5.007924664e-03f, 5.000435753e-03f, 4.992938573e-03f, 4.985433138e-03f, 4.977919461e-03f, 4.970397557e-03f, 4.962867437e-03f,
-4.955329116e-03f, 4.947782607e-03f, 4.940227924e-03f, 4.932665079e-03f, 4.925094087e-03f, 4.917514961e-03f, 4.909927714e-03f, 4.902332360e-03f, 4.894728912e-03f, 4.887117385e-03f,
-4.879497791e-03f, 4.871870144e-03f, 4.864234458e-03f, 4.856590746e-03f, 4.848939022e-03f, 4.841279299e-03f, 4.833611592e-03f, 4.825935913e-03f, 4.818252277e-03f, 4.810560696e-03f,
-4.802861186e-03f, 4.795153759e-03f, 4.787438429e-03f, 4.779715210e-03f, 4.771984116e-03f, 4.764245161e-03f, 4.756498357e-03f, 4.748743719e-03f, 4.740981261e-03f, 4.733210997e-03f,
-4.725432940e-03f, 4.717647104e-03f, 4.709853503e-03f, 4.702052151e-03f, 4.694243062e-03f, 4.686426249e-03f, 4.678601727e-03f, 4.670769509e-03f, 4.662929609e-03f, 4.655082042e-03f,
-4.647226821e-03f, 4.639363960e-03f, 4.631493473e-03f, 4.623615375e-03f, 4.615729678e-03f, 4.607836397e-03f, 4.599935547e-03f, 4.592027140e-03f, 4.584111192e-03f, 4.576187716e-03f,
-4.568256726e-03f, 4.560318236e-03f, 4.552372261e-03f, 4.544418815e-03f, 4.536457911e-03f, 4.528489564e-03f, 4.520513787e-03f, 4.512530596e-03f, 4.504540004e-03f, 4.496542026e-03f,
-4.488536675e-03f, 4.480523966e-03f, 4.472503913e-03f, 4.464476530e-03f, 4.456441831e-03f, 4.448399831e-03f, 4.440350545e-03f, 4.432293985e-03f, 4.424230167e-03f, 4.416159104e-03f,
-4.408080812e-03f, 4.399995304e-03f, 4.391902595e-03f, 4.383802699e-03f, 4.375695631e-03f, 4.367581404e-03f, 4.359460034e-03f, 4.351331534e-03f, 4.343195919e-03f, 4.335053203e-03f,
-4.326903401e-03f, 4.318746528e-03f, 4.310582597e-03f, 4.302411623e-03f, 4.294233621e-03f, 4.286048605e-03f, 4.277856590e-03f, 4.269657589e-03f, 4.261451619e-03f, 4.253238692e-03f,
-4.245018824e-03f, 4.236792029e-03f, 4.228558322e-03f, 4.220317717e-03f, 4.212070229e-03f, 4.203815873e-03f, 4.195554663e-03f, 4.187286614e-03f, 4.179011739e-03f, 4.170730055e-03f,
-4.162441576e-03f, 4.154146316e-03f, 4.145844289e-03f, 4.137535512e-03f, 4.129219997e-03f, 4.120897761e-03f, 4.112568818e-03f, 4.104233182e-03f, 4.095890868e-03f, 4.087541891e-03f,
-4.079186266e-03f, 4.070824007e-03f, 4.062455130e-03f, 4.054079649e-03f, 4.045697578e-03f, 4.037308933e-03f, 4.028913729e-03f, 4.020511980e-03f, 4.012103701e-03f, 4.003688907e-03f,
-3.995267613e-03f, 3.986839834e-03f, 3.978405584e-03f, 3.969964879e-03f, 3.961517733e-03f, 3.953064162e-03f, 3.944604180e-03f, 3.936137802e-03f, 3.927665043e-03f, 3.919185918e-03f,
-3.910700443e-03f, 3.902208631e-03f, 3.893710499e-03f, 3.885206060e-03f, 3.876695331e-03f, 3.868178326e-03f, 3.859655059e-03f, 3.851125547e-03f, 3.842589804e-03f, 3.834047845e-03f,
-3.825499686e-03f, 3.816945341e-03f, 3.808384825e-03f, 3.799818154e-03f, 3.791245343e-03f, 3.782666406e-03f, 3.774081360e-03f, 3.765490218e-03f, 3.756892997e-03f, 3.748289711e-03f,
-3.739680375e-03f, 3.731065005e-03f, 3.722443616e-03f, 3.713816223e-03f, 3.705182842e-03f, 3.696543487e-03f, 3.687898173e-03f, 3.679246917e-03f, 3.670589733e-03f, 3.661926636e-03f,
-3.653257642e-03f, 3.644582766e-03f, 3.635902023e-03f, 3.627215429e-03f, 3.618522999e-03f, 3.609824747e-03f, 3.601120691e-03f, 3.592410844e-03f, 3.583695222e-03f, 3.574973841e-03f,
-3.566246715e-03f, 3.557513861e-03f, 3.548775294e-03f, 3.540031028e-03f, 3.531281080e-03f, 3.522525464e-03f, 3.513764197e-03f, 3.504997293e-03f, 3.496224769e-03f, 3.487446638e-03f,
-3.478662918e-03f, 3.469873623e-03f, 3.461078769e-03f, 3.452278371e-03f, 3.443472445e-03f, 3.434661006e-03f, 3.425844070e-03f, 3.417021653e-03f, 3.408193769e-03f, 3.399360434e-03f,
-3.390521664e-03f, 3.381677475e-03f, 3.372827881e-03f, 3.363972899e-03f, 3.355112544e-03f, 3.346246832e-03f, 3.337375778e-03f, 3.328499398e-03f, 3.319617707e-03f, 3.310730721e-03f,
-3.301838456e-03f, 3.292940927e-03f, 3.284038150e-03f, 3.275130141e-03f, 3.266216915e-03f, 3.257298488e-03f, 3.248374875e-03f, 3.239446092e-03f, 3.230512156e-03f, 3.221573081e-03f,
-3.212628883e-03f, 3.203679578e-03f, 3.194725182e-03f, 3.185765710e-03f, 3.176801179e-03f, 3.167831603e-03f, 3.158857000e-03f, 3.149877383e-03f, 3.140892770e-03f, 3.131903176e-03f,
-3.122908616e-03f, 3.113909107e-03f, 3.104904664e-03f, 3.095895304e-03f, 3.086881041e-03f, 3.077861892e-03f, 3.068837873e-03f, 3.059808999e-03f, 3.050775286e-03f, 3.041736750e-03f,
-3.032693408e-03f, 3.023645274e-03f, 3.014592365e-03f, 3.005534696e-03f, 2.996472284e-03f, 2.987405144e-03f, 2.978333293e-03f, 2.969256746e-03f, 2.960175518e-03f, 2.951089627e-03f,
-2.941999088e-03f, 2.932903917e-03f, 2.923804129e-03f, 2.914699741e-03f, 2.905590769e-03f, 2.896477229e-03f, 2.887359136e-03f, 2.878236507e-03f, 2.869109358e-03f, 2.859977704e-03f,
-2.850841562e-03f, 2.841700947e-03f, 2.832555876e-03f, 2.823406365e-03f, 2.814252430e-03f, 2.805094086e-03f, 2.795931350e-03f, 2.786764238e-03f, 2.777592766e-03f, 2.768416950e-03f,
-2.759236806e-03f, 2.750052350e-03f, 2.740863598e-03f, 2.731670566e-03f, 2.722473271e-03f, 2.713271728e-03f, 2.704065954e-03f, 2.694855965e-03f, 2.685641776e-03f, 2.676423404e-03f,
-2.667200866e-03f, 2.657974177e-03f, 2.648743353e-03f, 2.639508410e-03f, 2.630269366e-03f, 2.621026235e-03f, 2.611779034e-03f, 2.602527780e-03f, 2.593272488e-03f, 2.584013174e-03f,
-2.574749856e-03f, 2.565482548e-03f, 2.556211268e-03f, 2.546936030e-03f, 2.537656853e-03f, 2.528373752e-03f, 2.519086742e-03f, 2.509795841e-03f, 2.500501065e-03f, 2.491202429e-03f,
-2.481899951e-03f, 2.472593646e-03f, 2.463283531e-03f, 2.453969621e-03f, 2.444651934e-03f, 2.435330485e-03f, 2.426005291e-03f, 2.416676368e-03f, 2.407343733e-03f, 2.398007401e-03f,
-2.388667389e-03f, 2.379323714e-03f, 2.369976391e-03f, 2.360625437e-03f, 2.351270869e-03f, 2.341912702e-03f, 2.332550953e-03f, 2.323185639e-03f, 2.313816776e-03f, 2.304444379e-03f,
-2.295068466e-03f, 2.285689053e-03f, 2.276306156e-03f, 2.266919791e-03f, 2.257529976e-03f, 2.248136726e-03f, 2.238740058e-03f, 2.229339988e-03f, 2.219936533e-03f, 2.210529708e-03f,
-2.201119532e-03f, 2.191706019e-03f, 2.182289186e-03f, 2.172869050e-03f, 2.163445627e-03f, 2.154018934e-03f, 2.144588987e-03f, 2.135155803e-03f, 2.125719397e-03f, 2.116279787e-03f,
-2.106836989e-03f, 2.097391019e-03f, 2.087941894e-03f, 2.078489631e-03f, 2.069034245e-03f, 2.059575754e-03f, 2.050114174e-03f, 2.040649521e-03f, 2.031181811e-03f, 2.021711063e-03f,
-2.012237291e-03f, 2.002760512e-03f, 1.993280743e-03f, 1.983798001e-03f, 1.974312302e-03f, 1.964823662e-03f, 1.955332098e-03f, 1.945837627e-03f, 1.936340265e-03f, 1.926840029e-03f,
-1.917336935e-03f, 1.907831000e-03f, 1.898322240e-03f, 1.888810673e-03f, 1.879296313e-03f, 1.869779179e-03f, 1.860259287e-03f, 1.850736653e-03f, 1.841211293e-03f, 1.831683226e-03f,
-1.822152466e-03f, 1.812619031e-03f, 1.803082937e-03f, 1.793544201e-03f, 1.784002840e-03f, 1.774458869e-03f, 1.764912307e-03f, 1.755363168e-03f, 1.745811471e-03f, 1.736257231e-03f,
-1.726700466e-03f, 1.717141191e-03f, 1.707579424e-03f, 1.698015182e-03f, 1.688448479e-03f, 1.678879335e-03f, 1.669307764e-03f, 1.659733785e-03f, 1.650157413e-03f, 1.640578664e-03f,
-1.630997557e-03f, 1.621414107e-03f, 1.611828332e-03f, 1.602240247e-03f, 1.592649869e-03f, 1.583057216e-03f, 1.573462303e-03f, 1.563865148e-03f, 1.554265768e-03f, 1.544664178e-03f,
-1.535060396e-03f, 1.525454438e-03f, 1.515846322e-03f, 1.506236063e-03f, 1.496623678e-03f, 1.487009185e-03f, 1.477392600e-03f, 1.467773939e-03f, 1.458153219e-03f, 1.448530458e-03f,
-1.438905672e-03f, 1.429278877e-03f, 1.419650090e-03f, 1.410019328e-03f, 1.400386608e-03f, 1.390751946e-03f, 1.381115360e-03f, 1.371476866e-03f, 1.361836480e-03f, 1.352194220e-03f,
-1.342550102e-03f, 1.332904143e-03f, 1.323256360e-03f, 1.313606769e-03f, 1.303955387e-03f, 1.294302232e-03f, 1.284647319e-03f, 1.274990666e-03f, 1.265332289e-03f, 1.255672205e-03f,
-1.246010432e-03f, 1.236346984e-03f, 1.226681881e-03f, 1.217015137e-03f, 1.207346771e-03f, 1.197676798e-03f, 1.188005236e-03f, 1.178332101e-03f, 1.168657410e-03f, 1.158981180e-03f,
-1.149303429e-03f, 1.139624171e-03f, 1.129943425e-03f, 1.120261207e-03f, 1.110577534e-03f, 1.100892423e-03f, 1.091205890e-03f, 1.081517953e-03f, 1.071828628e-03f, 1.062137932e-03f,
-1.052445882e-03f, 1.042752494e-03f, 1.033057786e-03f, 1.023361774e-03f, 1.013664475e-03f, 1.003965905e-03f, 9.942660831e-04f, 9.845650242e-04f, 9.748627457e-04f, 9.651592643e-04f,
-9.554545970e-04f, 9.457487604e-04f, 9.360417715e-04f, 9.263336471e-04f, 9.166244041e-04f, 9.069140591e-04f, 8.972026291e-04f, 8.874901310e-04f, 8.777765815e-04f, 8.680619974e-04f,
-8.583463957e-04f, 8.486297932e-04f, 8.389122066e-04f, 8.291936529e-04f, 8.194741488e-04f, 8.097537113e-04f, 8.000323571e-04f, 7.903101031e-04f, 7.805869662e-04f, 7.708629631e-04f,
-7.611381108e-04f, 7.514124260e-04f, 7.416859257e-04f, 7.319586267e-04f, 7.222305457e-04f, 7.125016997e-04f, 7.027721056e-04f, 6.930417801e-04f, 6.833107401e-04f, 6.735790024e-04f,
-6.638465840e-04f, 6.541135016e-04f, 6.443797722e-04f, 6.346454125e-04f, 6.249104394e-04f, 6.151748697e-04f, 6.054387204e-04f, 5.957020082e-04f, 5.859647501e-04f, 5.762269628e-04f,
-5.664886632e-04f, 5.567498682e-04f, 5.470105947e-04f, 5.372708594e-04f, 5.275306792e-04f, 5.177900710e-04f, 5.080490516e-04f, 4.983076380e-04f, 4.885658468e-04f, 4.788236950e-04f,
-4.690811995e-04f, 4.593383770e-04f, 4.495952445e-04f, 4.398518188e-04f, 4.301081167e-04f, 4.203641550e-04f, 4.106199508e-04f, 4.008755207e-04f, 3.911308816e-04f, 3.813860504e-04f,
-3.716410439e-04f, 3.618958790e-04f, 3.521505725e-04f, 3.424051413e-04f, 3.326596022e-04f, 3.229139720e-04f, 3.131682676e-04f, 3.034225059e-04f, 2.936767037e-04f, 2.839308777e-04f,
-2.741850450e-04f, 2.644392222e-04f, 2.546934263e-04f, 2.449476740e-04f, 2.352019823e-04f, 2.254563679e-04f, 2.157108477e-04f, 2.059654386e-04f, 1.962201572e-04f, 1.864750206e-04f,
-1.767300455e-04f, 1.669852487e-04f, 1.572406471e-04f, 1.474962576e-04f, 1.377520968e-04f, 1.280081817e-04f, 1.182645291e-04f, 1.085211558e-04f, 9.877807857e-05f, 8.903531432e-05f,
-7.929287983e-05f, 6.955079191e-05f, 5.980906739e-05f, 5.006772308e-05f, 4.032677579e-05f, 3.058624233e-05f, 2.084613952e-05f, 1.110648415e-05f, 1.367293040e-06f, -8.371417008e-06f,
--1.810962919e-05f, -2.784732671e-05f, -3.758449276e-05f, -4.732111054e-05f, -5.705716327e-05f, -6.679263414e-05f, -7.652750637e-05f, -8.626176315e-05f, -9.599538771e-05f, -1.057283633e-04f,
--1.154606730e-04f, -1.251923002e-04f, -1.349232280e-04f, -1.446534396e-04f, -1.543829184e-04f, -1.641116474e-04f, -1.738396100e-04f, -1.835667894e-04f, -1.932931687e-04f, -2.030187313e-04f,
--2.127434603e-04f, -2.224673390e-04f, -2.321903507e-04f, -2.419124786e-04f, -2.516337059e-04f, -2.613540159e-04f, -2.710733918e-04f, -2.807918169e-04f, -2.905092745e-04f, -3.002257477e-04f,
--3.099412199e-04f, -3.196556743e-04f, -3.293690942e-04f, -3.390814629e-04f, -3.487927635e-04f, -3.585029795e-04f, -3.682120941e-04f, -3.779200905e-04f, -3.876269520e-04f, -3.973326619e-04f,
--4.070372036e-04f, -4.167405602e-04f, -4.264427152e-04f, -4.361436517e-04f, -4.458433531e-04f, -4.555418027e-04f, -4.652389838e-04f, -4.749348796e-04f, -4.846294736e-04f, -4.943227490e-04f,
--5.040146891e-04f, -5.137052773e-04f, -5.233944969e-04f, -5.330823311e-04f, -5.427687634e-04f, -5.524537771e-04f, -5.621373555e-04f, -5.718194819e-04f, -5.815001397e-04f, -5.911793123e-04f,
--6.008569829e-04f, -6.105331350e-04f, -6.202077518e-04f, -6.298808168e-04f, -6.395523134e-04f, -6.492222248e-04f, -6.588905344e-04f, -6.685572257e-04f, -6.782222820e-04f, -6.878856867e-04f,
--6.975474231e-04f, -7.072074747e-04f, -7.168658249e-04f, -7.265224570e-04f, -7.361773544e-04f, -7.458305006e-04f, -7.554818790e-04f, -7.651314729e-04f, -7.747792658e-04f, -7.844252411e-04f,
--7.940693823e-04f, -8.037116727e-04f, -8.133520958e-04f, -8.229906350e-04f, -8.326272738e-04f, -8.422619956e-04f, -8.518947838e-04f, -8.615256219e-04f, -8.711544934e-04f, -8.807813818e-04f,
--8.904062704e-04f, -9.000291428e-04f, -9.096499824e-04f, -9.192687727e-04f, -9.288854971e-04f, -9.385001393e-04f, -9.481126826e-04f, -9.577231106e-04f, -9.673314068e-04f, -9.769375546e-04f,
--9.865415376e-04f, -9.961433392e-04f, -1.005742943e-03f, -1.015340333e-03f, -1.024935492e-03f, -1.034528403e-03f, -1.044119051e-03f, -1.053707419e-03f, -1.063293490e-03f, -1.072877248e-03f,
--1.082458677e-03f, -1.092037760e-03f, -1.101614480e-03f, -1.111188822e-03f, -1.120760768e-03f, -1.130330303e-03f, -1.139897410e-03f, -1.149462072e-03f, -1.159024273e-03f, -1.168583997e-03f,
--1.178141228e-03f, -1.187695948e-03f, -1.197248142e-03f, -1.206797793e-03f, -1.216344885e-03f, -1.225889402e-03f, -1.235431326e-03f, -1.244970642e-03f, -1.254507334e-03f, -1.264041384e-03f,
--1.273572778e-03f, -1.283101497e-03f, -1.292627527e-03f, -1.302150850e-03f, -1.311671451e-03f, -1.321189312e-03f, -1.330704419e-03f, -1.340216754e-03f, -1.349726301e-03f, -1.359233043e-03f,
--1.368736966e-03f, -1.378238051e-03f, -1.387736284e-03f, -1.397231647e-03f, -1.406724125e-03f, -1.416213701e-03f, -1.425700359e-03f, -1.435184083e-03f, -1.444664856e-03f, -1.454142662e-03f,
--1.463617486e-03f, -1.473089310e-03f, -1.482558119e-03f, -1.492023896e-03f, -1.501486625e-03f, -1.510946290e-03f, -1.520402875e-03f, -1.529856363e-03f, -1.539306739e-03f, -1.548753986e-03f,
--1.558198088e-03f, -1.567639029e-03f, -1.577076793e-03f, -1.586511363e-03f, -1.595942724e-03f, -1.605370859e-03f, -1.614795752e-03f, -1.624217387e-03f, -1.633635748e-03f, -1.643050819e-03f,
--1.652462583e-03f, -1.661871026e-03f, -1.671276129e-03f, -1.680677879e-03f, -1.690076257e-03f, -1.699471249e-03f, -1.708862838e-03f, -1.718251008e-03f, -1.727635743e-03f, -1.737017027e-03f,
--1.746394845e-03f, -1.755769179e-03f, -1.765140014e-03f, -1.774507335e-03f, -1.783871124e-03f, -1.793231366e-03f, -1.802588045e-03f, -1.811941145e-03f, -1.821290650e-03f, -1.830636544e-03f,
--1.839978811e-03f, -1.849317435e-03f, -1.858652400e-03f, -1.867983690e-03f, -1.877311290e-03f, -1.886635182e-03f, -1.895955352e-03f, -1.905271784e-03f, -1.914584461e-03f, -1.923893367e-03f,
--1.933198488e-03f, -1.942499806e-03f, -1.951797306e-03f, -1.961090972e-03f, -1.970380789e-03f, -1.979666739e-03f, -1.988948809e-03f, -1.998226981e-03f, -2.007501239e-03f, -2.016771569e-03f,
--2.026037954e-03f, -2.035300378e-03f, -2.044558825e-03f, -2.053813281e-03f, -2.063063728e-03f, -2.072310151e-03f, -2.081552535e-03f, -2.090790864e-03f, -2.100025121e-03f, -2.109255291e-03f,
--2.118481359e-03f, -2.127703308e-03f, -2.136921124e-03f, -2.146134789e-03f, -2.155344289e-03f, -2.164549607e-03f, -2.173750729e-03f, -2.182947638e-03f, -2.192140318e-03f, -2.201328755e-03f,
--2.210512932e-03f, -2.219692833e-03f, -2.228868444e-03f, -2.238039748e-03f, -2.247206729e-03f, -2.256369373e-03f, -2.265527663e-03f, -2.274681585e-03f, -2.283831121e-03f, -2.292976257e-03f,
--2.302116978e-03f, -2.311253266e-03f, -2.320385108e-03f, -2.329512487e-03f, -2.338635389e-03f, -2.347753796e-03f, -2.356867694e-03f, -2.365977068e-03f, -2.375081901e-03f, -2.384182179e-03f,
--2.393277885e-03f, -2.402369004e-03f, -2.411455522e-03f, -2.420537421e-03f, -2.429614688e-03f, -2.438687306e-03f, -2.447755259e-03f, -2.456818534e-03f, -2.465877113e-03f, -2.474930982e-03f,
--2.483980126e-03f, -2.493024528e-03f, -2.502064173e-03f, -2.511099047e-03f, -2.520129133e-03f, -2.529154417e-03f, -2.538174883e-03f, -2.547190515e-03f, -2.556201299e-03f, -2.565207219e-03f,
--2.574208259e-03f, -2.583204405e-03f, -2.592195640e-03f, -2.601181951e-03f, -2.610163320e-03f, -2.619139734e-03f, -2.628111177e-03f, -2.637077634e-03f, -2.646039089e-03f, -2.654995527e-03f,
--2.663946934e-03f, -2.672893293e-03f, -2.681834589e-03f, -2.690770808e-03f, -2.699701934e-03f, -2.708627952e-03f, -2.717548847e-03f, -2.726464603e-03f, -2.735375206e-03f, -2.744280640e-03f,
--2.753180890e-03f, -2.762075942e-03f, -2.770965780e-03f, -2.779850388e-03f, -2.788729752e-03f, -2.797603857e-03f, -2.806472688e-03f, -2.815336229e-03f, -2.824194465e-03f, -2.833047383e-03f,
--2.841894965e-03f, -2.850737198e-03f, -2.859574067e-03f, -2.868405555e-03f, -2.877231650e-03f, -2.886052334e-03f, -2.894867595e-03f, -2.903677415e-03f, -2.912481781e-03f, -2.921280678e-03f,
--2.930074091e-03f, -2.938862004e-03f, -2.947644403e-03f, -2.956421273e-03f, -2.965192599e-03f, -2.973958366e-03f, -2.982718560e-03f, -2.991473165e-03f, -3.000222166e-03f, -3.008965549e-03f,
--3.017703300e-03f, -3.026435402e-03f, -3.035161841e-03f, -3.043882603e-03f, -3.052597673e-03f, -3.061307036e-03f, -3.070010677e-03f, -3.078708581e-03f, -3.087400734e-03f, -3.096087121e-03f,
--3.104767727e-03f, -3.113442538e-03f, -3.122111538e-03f, -3.130774714e-03f, -3.139432050e-03f, -3.148083531e-03f, -3.156729144e-03f, -3.165368873e-03f, -3.174002705e-03f, -3.182630623e-03f,
--3.191252614e-03f, -3.199868662e-03f, -3.208478755e-03f, -3.217082876e-03f, -3.225681011e-03f, -3.234273146e-03f, -3.242859266e-03f, -3.251439356e-03f, -3.260013403e-03f, -3.268581391e-03f,
--3.277143307e-03f, -3.285699134e-03f, -3.294248860e-03f, -3.302792470e-03f, -3.311329948e-03f, -3.319861282e-03f, -3.328386455e-03f, -3.336905454e-03f, -3.345418265e-03f, -3.353924873e-03f,
--3.362425263e-03f, -3.370919422e-03f, -3.379407335e-03f, -3.387888987e-03f, -3.396364364e-03f, -3.404833452e-03f, -3.413296236e-03f, -3.421752703e-03f, -3.430202838e-03f, -3.438646626e-03f,
--3.447084054e-03f, -3.455515107e-03f, -3.463939770e-03f, -3.472358030e-03f, -3.480769873e-03f, -3.489175284e-03f, -3.497574248e-03f, -3.505966753e-03f, -3.514352783e-03f, -3.522732324e-03f,
--3.531105363e-03f, -3.539471884e-03f, -3.547831875e-03f, -3.556185321e-03f, -3.564532207e-03f, -3.572872520e-03f, -3.581206245e-03f, -3.589533369e-03f, -3.597853878e-03f, -3.606167757e-03f,
--3.614474992e-03f, -3.622775569e-03f, -3.631069475e-03f, -3.639356695e-03f, -3.647637215e-03f, -3.655911022e-03f, -3.664178101e-03f, -3.672438439e-03f, -3.680692021e-03f, -3.688938833e-03f,
--3.697178862e-03f, -3.705412094e-03f, -3.713638515e-03f, -3.721858111e-03f, -3.730070868e-03f, -3.738276772e-03f, -3.746475810e-03f, -3.754667967e-03f, -3.762853230e-03f, -3.771031585e-03f,
--3.779203018e-03f, -3.787367516e-03f, -3.795525064e-03f, -3.803675649e-03f, -3.811819257e-03f, -3.819955875e-03f, -3.828085489e-03f, -3.836208084e-03f, -3.844323648e-03f, -3.852432167e-03f,
--3.860533626e-03f, -3.868628013e-03f, -3.876715314e-03f, -3.884795515e-03f, -3.892868602e-03f, -3.900934562e-03f, -3.908993382e-03f, -3.917045047e-03f, -3.925089545e-03f, -3.933126861e-03f,
--3.941156982e-03f, -3.949179895e-03f, -3.957195586e-03f, -3.965204041e-03f, -3.973205248e-03f, -3.981199192e-03f, -3.989185861e-03f, -3.997165240e-03f, -4.005137316e-03f, -4.013102077e-03f,
--4.021059508e-03f, -4.029009596e-03f, -4.036952328e-03f, -4.044887691e-03f, -4.052815670e-03f, -4.060736253e-03f, -4.068649427e-03f, -4.076555177e-03f, -4.084453492e-03f, -4.092344357e-03f,
--4.100227759e-03f, -4.108103686e-03f, -4.115972123e-03f, -4.123833057e-03f, -4.131686477e-03f, -4.139532367e-03f, -4.147370715e-03f, -4.155201508e-03f, -4.163024732e-03f, -4.170840375e-03f,
--4.178648424e-03f, -4.186448865e-03f, -4.194241685e-03f, -4.202026870e-03f, -4.209804409e-03f, -4.217574288e-03f, -4.225336494e-03f, -4.233091014e-03f, -4.240837834e-03f, -4.248576942e-03f,
--4.256308326e-03f, -4.264031971e-03f, -4.271747865e-03f, -4.279455995e-03f, -4.287156347e-03f, -4.294848911e-03f, -4.302533671e-03f, -4.310210615e-03f, -4.317879731e-03f, -4.325541006e-03f,
--4.333194426e-03f, -4.340839979e-03f, -4.348477653e-03f, -4.356107433e-03f, -4.363729308e-03f, -4.371343265e-03f, -4.378949291e-03f, -4.386547372e-03f, -4.394137498e-03f, -4.401719654e-03f,
--4.409293828e-03f, -4.416860007e-03f, -4.424418179e-03f, -4.431968331e-03f, -4.439510450e-03f, -4.447044524e-03f, -4.454570541e-03f, -4.462088486e-03f, -4.469598349e-03f, -4.477100116e-03f,
--4.484593774e-03f, -4.492079312e-03f, -4.499556716e-03f, -4.507025975e-03f, -4.514487075e-03f, -4.521940005e-03f, -4.529384751e-03f, -4.536821302e-03f, -4.544249644e-03f, -4.551669766e-03f,
--4.559081654e-03f, -4.566485297e-03f, -4.573880683e-03f, -4.581267798e-03f, -4.588646631e-03f, -4.596017168e-03f, -4.603379399e-03f, -4.610733310e-03f, -4.618078889e-03f, -4.625416124e-03f,
--4.632745003e-03f, -4.640065513e-03f, -4.647377643e-03f, -4.654681379e-03f, -4.661976710e-03f, -4.669263624e-03f, -4.676542108e-03f, -4.683812150e-03f, -4.691073738e-03f, -4.698326860e-03f,
--4.705571504e-03f, -4.712807658e-03f, -4.720035310e-03f, -4.727254447e-03f, -4.734465058e-03f, -4.741667130e-03f, -4.748860651e-03f, -4.756045610e-03f, -4.763221995e-03f, -4.770389793e-03f,
--4.777548993e-03f, -4.784699582e-03f, -4.791841549e-03f, -4.798974882e-03f, -4.806099568e-03f, -4.813215597e-03f, -4.820322956e-03f, -4.827421633e-03f, -4.834511616e-03f, -4.841592894e-03f,
--4.848665455e-03f, -4.855729287e-03f, -4.862784378e-03f, -4.869830717e-03f, -4.876868291e-03f, -4.883897090e-03f, -4.890917100e-03f, -4.897928312e-03f, -4.904930712e-03f, -4.911924290e-03f,
--4.918909033e-03f, -4.925884930e-03f, -4.932851970e-03f, -4.939810141e-03f, -4.946759430e-03f, -4.953699828e-03f, -4.960631321e-03f, -4.967553899e-03f, -4.974467550e-03f, -4.981372263e-03f,
--4.988268025e-03f, -4.995154827e-03f, -5.002032655e-03f, -5.008901499e-03f, -5.015761347e-03f, -5.022612188e-03f, -5.029454011e-03f, -5.036286804e-03f, -5.043110555e-03f, -5.049925254e-03f,
--5.056730889e-03f, -5.063527448e-03f, -5.070314921e-03f, -5.077093297e-03f, -5.083862563e-03f, -5.090622709e-03f, -5.097373723e-03f, -5.104115595e-03f, -5.110848312e-03f, -5.117571865e-03f,
--5.124286241e-03f, -5.130991430e-03f, -5.137687420e-03f, -5.144374200e-03f, -5.151051760e-03f, -5.157720088e-03f, -5.164379172e-03f, -5.171029003e-03f, -5.177669569e-03f, -5.184300859e-03f,
--5.190922862e-03f, -5.197535567e-03f, -5.204138962e-03f, -5.210733038e-03f, -5.217317783e-03f, -5.223893187e-03f, -5.230459237e-03f, -5.237015924e-03f, -5.243563237e-03f, -5.250101164e-03f,
--5.256629696e-03f, -5.263148820e-03f, -5.269658527e-03f, -5.276158805e-03f, -5.282649644e-03f, -5.289131033e-03f, -5.295602961e-03f, -5.302065418e-03f, -5.308518392e-03f, -5.314961874e-03f,
--5.321395852e-03f, -5.327820317e-03f, -5.334235256e-03f, -5.340640660e-03f, -5.347036518e-03f, -5.353422820e-03f, -5.359799554e-03f, -5.366166711e-03f, -5.372524280e-03f, -5.378872250e-03f,
--5.385210611e-03f, -5.391539352e-03f, -5.397858463e-03f, -5.404167933e-03f, -5.410467753e-03f, -5.416757911e-03f, -5.423038397e-03f, -5.429309202e-03f, -5.435570313e-03f, -5.441821722e-03f,
--5.448063418e-03f, -5.454295390e-03f, -5.460517629e-03f, -5.466730123e-03f, -5.472932864e-03f, -5.479125839e-03f, -5.485309040e-03f, -5.491482456e-03f, -5.497646077e-03f, -5.503799893e-03f,
--5.509943894e-03f, -5.516078068e-03f, -5.522202408e-03f, -5.528316901e-03f, -5.534421539e-03f, -5.540516310e-03f, -5.546601206e-03f, -5.552676216e-03f, -5.558741330e-03f, -5.564796538e-03f,
--5.570841830e-03f, -5.576877196e-03f, -5.582902626e-03f, -5.588918111e-03f, -5.594923640e-03f, -5.600919204e-03f, -5.606904792e-03f, -5.612880395e-03f, -5.618846003e-03f, -5.624801606e-03f,
--5.630747194e-03f, -5.636682758e-03f, -5.642608288e-03f, -5.648523773e-03f, -5.654429206e-03f, -5.660324574e-03f, -5.666209870e-03f, -5.672085083e-03f, -5.677950204e-03f, -5.683805222e-03f,
--5.689650129e-03f, -5.695484915e-03f, -5.701309570e-03f, -5.707124085e-03f, -5.712928449e-03f, -5.718722655e-03f, -5.724506691e-03f, -5.730280549e-03f, -5.736044219e-03f, -5.741797692e-03f,
--5.747540958e-03f, -5.753274007e-03f, -5.758996831e-03f, -5.764709420e-03f, -5.770411765e-03f, -5.776103856e-03f, -5.781785684e-03f, -5.787457240e-03f, -5.793118514e-03f, -5.798769497e-03f,
--5.804410180e-03f, -5.810040553e-03f, -5.815660608e-03f, -5.821270335e-03f, -5.826869726e-03f, -5.832458770e-03f, -5.838037458e-03f, -5.843605783e-03f, -5.849163733e-03f, -5.854711302e-03f,
--5.860248478e-03f, -5.865775254e-03f, -5.871291620e-03f, -5.876797567e-03f, -5.882293087e-03f, -5.887778169e-03f, -5.893252806e-03f, -5.898716988e-03f, -5.904170707e-03f, -5.909613953e-03f,
--5.915046718e-03f, -5.920468993e-03f, -5.925880768e-03f, -5.931282036e-03f, -5.936672786e-03f, -5.942053012e-03f, -5.947422703e-03f, -5.952781851e-03f, -5.958130447e-03f, -5.963468482e-03f,
--5.968795949e-03f, -5.974112837e-03f, -5.979419139e-03f, -5.984714846e-03f, -5.989999948e-03f, -5.995274439e-03f, -6.000538308e-03f, -6.005791548e-03f, -6.011034150e-03f, -6.016266105e-03f,
--6.021487405e-03f, -6.026698041e-03f, -6.031898005e-03f, -6.037087288e-03f, -6.042265882e-03f, -6.047433779e-03f, -6.052590970e-03f, -6.057737447e-03f, -6.062873201e-03f, -6.067998224e-03f,
--6.073112508e-03f, -6.078216044e-03f, -6.083308825e-03f, -6.088390841e-03f, -6.093462085e-03f, -6.098522548e-03f, -6.103572223e-03f, -6.108611100e-03f, -6.113639173e-03f, -6.118656432e-03f,
--6.123662869e-03f, -6.128658477e-03f, -6.133643247e-03f, -6.138617172e-03f, -6.143580242e-03f, -6.148532451e-03f, -6.153473790e-03f, -6.158404252e-03f, -6.163323827e-03f, -6.168232508e-03f,
--6.173130288e-03f, -6.178017158e-03f, -6.182893111e-03f, -6.187758138e-03f, -6.192612232e-03f, -6.197455384e-03f, -6.202287588e-03f, -6.207108835e-03f, -6.211919117e-03f, -6.216718427e-03f,
--6.221506756e-03f, -6.226284098e-03f, -6.231050445e-03f, -6.235805788e-03f, -6.240550120e-03f, -6.245283434e-03f, -6.250005721e-03f, -6.254716975e-03f, -6.259417188e-03f, -6.264106351e-03f,
--6.268784458e-03f, -6.273451500e-03f, -6.278107472e-03f, -6.282752364e-03f, -6.287386169e-03f, -6.292008881e-03f, -6.296620491e-03f, -6.301220992e-03f, -6.305810378e-03f, -6.310388639e-03f,
--6.314955769e-03f, -6.319511761e-03f, -6.324056608e-03f, -6.328590301e-03f, -6.333112834e-03f, -6.337624200e-03f, -6.342124391e-03f, -6.346613400e-03f, -6.351091220e-03f, -6.355557844e-03f,
--6.360013264e-03f, -6.364457473e-03f, -6.368890464e-03f, -6.373312231e-03f, -6.377722766e-03f, -6.382122062e-03f, -6.386510111e-03f, -6.390886908e-03f, -6.395252444e-03f, -6.399606713e-03f,
--6.403949709e-03f, -6.408281423e-03f, -6.412601849e-03f, -6.416910981e-03f, -6.421208811e-03f, -6.425495332e-03f, -6.429770538e-03f, -6.434034421e-03f, -6.438286976e-03f, -6.442528194e-03f,
--6.446758070e-03f, -6.450976597e-03f, -6.455183768e-03f, -6.459379575e-03f, -6.463564014e-03f, -6.467737076e-03f, -6.471898755e-03f, -6.476049045e-03f, -6.480187939e-03f, -6.484315430e-03f,
--6.488431513e-03f, -6.492536179e-03f, -6.496629423e-03f, -6.500711238e-03f, -6.504781619e-03f, -6.508840557e-03f, -6.512888047e-03f, -6.516924083e-03f, -6.520948658e-03f, -6.524961765e-03f,
--6.528963399e-03f, -6.532953552e-03f, -6.536932219e-03f, -6.540899393e-03f, -6.544855069e-03f, -6.548799239e-03f, -6.552731897e-03f, -6.556653038e-03f, -6.560562655e-03f, -6.564460742e-03f,
--6.568347292e-03f, -6.572222300e-03f, -6.576085760e-03f, -6.579937664e-03f, -6.583778008e-03f, -6.587606785e-03f, -6.591423990e-03f, -6.595229615e-03f, -6.599023656e-03f, -6.602806106e-03f,
--6.606576959e-03f, -6.610336209e-03f, -6.614083850e-03f, -6.617819877e-03f, -6.621544284e-03f, -6.625257064e-03f, -6.628958212e-03f, -6.632647722e-03f, -6.636325588e-03f, -6.639991805e-03f,
--6.643646366e-03f, -6.647289266e-03f, -6.650920500e-03f, -6.654540061e-03f, -6.658147944e-03f, -6.661744143e-03f, -6.665328652e-03f, -6.668901467e-03f, -6.672462581e-03f, -6.676011989e-03f,
--6.679549685e-03f, -6.683075664e-03f, -6.686589920e-03f, -6.690092447e-03f, -6.693583241e-03f, -6.697062296e-03f, -6.700529606e-03f, -6.703985166e-03f, -6.707428970e-03f, -6.710861014e-03f,
--6.714281292e-03f, -6.717689798e-03f, -6.721086527e-03f, -6.724471474e-03f, -6.727844634e-03f, -6.731206001e-03f, -6.734555570e-03f, -6.737893337e-03f, -6.741219295e-03f, -6.744533440e-03f,
--6.747835766e-03f, -6.751126269e-03f, -6.754404943e-03f, -6.757671783e-03f, -6.760926784e-03f, -6.764169942e-03f, -6.767401250e-03f, -6.770620705e-03f, -6.773828301e-03f, -6.777024033e-03f,
--6.780207896e-03f, -6.783379885e-03f, -6.786539996e-03f, -6.789688223e-03f, -6.792824562e-03f, -6.795949008e-03f, -6.799061556e-03f, -6.802162202e-03f, -6.805250939e-03f, -6.808327765e-03f,
--6.811392673e-03f, -6.814445660e-03f, -6.817486721e-03f, -6.820515850e-03f, -6.823533044e-03f, -6.826538298e-03f, -6.829531606e-03f, -6.832512966e-03f, -6.835482371e-03f, -6.838439817e-03f,
--6.841385301e-03f, -6.844318817e-03f, -6.847240360e-03f, -6.850149928e-03f, -6.853047514e-03f, -6.855933115e-03f, -6.858806726e-03f, -6.861668343e-03f, -6.864517962e-03f, -6.867355578e-03f,
--6.870181187e-03f, -6.872994784e-03f, -6.875796366e-03f, -6.878585927e-03f, -6.881363465e-03f, -6.884128974e-03f, -6.886882451e-03f, -6.889623891e-03f, -6.892353290e-03f, -6.895070645e-03f,
--6.897775950e-03f, -6.900469202e-03f, -6.903150397e-03f, -6.905819531e-03f, -6.908476599e-03f, -6.911121599e-03f, -6.913754525e-03f, -6.916375374e-03f, -6.918984141e-03f, -6.921580824e-03f,
--6.924165418e-03f, -6.926737920e-03f, -6.929298324e-03f, -6.931846629e-03f, -6.934382829e-03f, -6.936906921e-03f, -6.939418901e-03f, -6.941918766e-03f, -6.944406512e-03f, -6.946882134e-03f,
--6.949345630e-03f, -6.951796996e-03f, -6.954236228e-03f, -6.956663323e-03f, -6.959078276e-03f, -6.961481085e-03f, -6.963871745e-03f, -6.966250254e-03f, -6.968616608e-03f, -6.970970803e-03f,
--6.973312835e-03f, -6.975642702e-03f, -6.977960400e-03f, -6.980265925e-03f, -6.982559275e-03f, -6.984840445e-03f, -6.987109433e-03f, -6.989366235e-03f, -6.991610848e-03f, -6.993843268e-03f,
--6.996063493e-03f, -6.998271519e-03f, -7.000467343e-03f, -7.002650961e-03f, -7.004822371e-03f, -7.006981569e-03f, -7.009128552e-03f, -7.011263318e-03f, -7.013385863e-03f, -7.015496183e-03f,
--7.017594277e-03f, -7.019680140e-03f, -7.021753771e-03f, -7.023815165e-03f, -7.025864321e-03f, -7.027901234e-03f, -7.029925903e-03f, -7.031938324e-03f, -7.033938494e-03f, -7.035926411e-03f,
--7.037902071e-03f, -7.039865473e-03f, -7.041816612e-03f, -7.043755487e-03f, -7.045682094e-03f, -7.047596432e-03f, -7.049498496e-03f, -7.051388286e-03f, -7.053265796e-03f, -7.055131027e-03f,
--7.056983973e-03f, -7.058824634e-03f, -7.060653006e-03f, -7.062469088e-03f, -7.064272875e-03f, -7.066064366e-03f, -7.067843559e-03f, -7.069610451e-03f, -7.071365039e-03f, -7.073107321e-03f,
--7.074837295e-03f, -7.076554958e-03f, -7.078260308e-03f, -7.079953342e-03f, -7.081634059e-03f, -7.083302455e-03f, -7.084958530e-03f, -7.086602280e-03f, -7.088233703e-03f, -7.089852796e-03f,
--7.091459559e-03f, -7.093053989e-03f, -7.094636083e-03f, -7.096205839e-03f, -7.097763255e-03f, -7.099308330e-03f, -7.100841061e-03f, -7.102361446e-03f, -7.103869483e-03f, -7.105365170e-03f,
--7.106848505e-03f, -7.108319487e-03f, -7.109778112e-03f, -7.111224380e-03f, -7.112658289e-03f, -7.114079836e-03f, -7.115489019e-03f, -7.116885838e-03f, -7.118270289e-03f, -7.119642372e-03f,
--7.121002085e-03f, -7.122349425e-03f, -7.123684392e-03f, -7.125006983e-03f, -7.126317197e-03f, -7.127615031e-03f, -7.128900486e-03f, -7.130173558e-03f, -7.131434246e-03f, -7.132682549e-03f,
--7.133918466e-03f, -7.135141993e-03f, -7.136353132e-03f, -7.137551878e-03f, -7.138738232e-03f, -7.139912192e-03f, -7.141073756e-03f, -7.142222923e-03f, -7.143359692e-03f, -7.144484060e-03f,
--7.145596028e-03f, -7.146695594e-03f, -7.147782755e-03f, -7.148857512e-03f, -7.149919863e-03f, -7.150969806e-03f, -7.152007340e-03f, -7.153032465e-03f, -7.154045179e-03f, -7.155045480e-03f,
--7.156033369e-03f, -7.157008843e-03f, -7.157971902e-03f, -7.158922545e-03f, -7.159860770e-03f, -7.160786576e-03f, -7.161699964e-03f, -7.162600930e-03f, -7.163489476e-03f, -7.164365599e-03f,
--7.165229299e-03f, -7.166080575e-03f, -7.166919427e-03f, -7.167745852e-03f, -7.168559851e-03f, -7.169361423e-03f, -7.170150566e-03f, -7.170927281e-03f, -7.171691566e-03f, -7.172443421e-03f,
--7.173182845e-03f, -7.173909837e-03f, -7.174624398e-03f, -7.175326525e-03f, -7.176016219e-03f, -7.176693478e-03f, -7.177358303e-03f, -7.178010694e-03f, -7.178650648e-03f, -7.179278166e-03f,
--7.179893248e-03f, -7.180495892e-03f, -7.181086099e-03f, -7.181663869e-03f, -7.182229200e-03f, -7.182782092e-03f, -7.183322545e-03f, -7.183850560e-03f, -7.184366134e-03f, -7.184869269e-03f,
--7.185359964e-03f, -7.185838218e-03f, -7.186304032e-03f, -7.186757405e-03f, -7.187198337e-03f, -7.187626828e-03f, -7.188042878e-03f, -7.188446486e-03f, -7.188837654e-03f, -7.189216380e-03f,
--7.189582664e-03f, -7.189936507e-03f, -7.190277908e-03f, -7.190606868e-03f, -7.190923387e-03f, -7.191227465e-03f, -7.191519101e-03f, -7.191798296e-03f, -7.192065050e-03f, -7.192319363e-03f,
--7.192561235e-03f, -7.192790668e-03f, -7.193007659e-03f, -7.193212211e-03f, -7.193404324e-03f, -7.193583996e-03f, -7.193751230e-03f, -7.193906025e-03f, -7.194048381e-03f, -7.194178299e-03f,
--7.194295780e-03f, -7.194400823e-03f, -7.194493429e-03f, -7.194573599e-03f, -7.194641333e-03f, -7.194696632e-03f, -7.194739496e-03f, -7.194769925e-03f, -7.194787921e-03f, -7.194793483e-03f,
--7.194786613e-03f, -7.194767310e-03f, -7.194735577e-03f, -7.194691413e-03f, -7.194634819e-03f, -7.194565795e-03f, -7.194484343e-03f, -7.194390463e-03f, -7.194284157e-03f, -7.194165424e-03f,
--7.194034266e-03f, -7.193890683e-03f, -7.193734676e-03f, -7.193566247e-03f, -7.193385396e-03f, -7.193192124e-03f, -7.192986432e-03f, -7.192768321e-03f, -7.192537792e-03f, -7.192294846e-03f,
--7.192039484e-03f, -7.191771707e-03f, -7.191491516e-03f, -7.191198913e-03f, -7.190893897e-03f, -7.190576472e-03f, -7.190246637e-03f, -7.189904394e-03f, -7.189549743e-03f, -7.189182688e-03f,
--7.188803227e-03f, -7.188411364e-03f, -7.188007099e-03f, -7.187590433e-03f, -7.187161368e-03f, -7.186719904e-03f, -7.186266045e-03f, -7.185799790e-03f, -7.185321142e-03f, -7.184830101e-03f,
--7.184326670e-03f, -7.183810849e-03f, -7.183282640e-03f, -7.182742045e-03f, -7.182189066e-03f, -7.181623703e-03f, -7.181045959e-03f, -7.180455834e-03f, -7.179853332e-03f, -7.179238452e-03f,
--7.178611198e-03f, -7.177971570e-03f, -7.177319571e-03f, -7.176655202e-03f, -7.175978465e-03f, -7.175289361e-03f, -7.174587893e-03f, -7.173874063e-03f, -7.173147871e-03f, -7.172409321e-03f,
--7.171658413e-03f, -7.170895151e-03f, -7.170119535e-03f, -7.169331567e-03f, -7.168531251e-03f, -7.167718587e-03f, -7.166893578e-03f, -7.166056225e-03f, -7.165206532e-03f, -7.164344499e-03f,
--7.163470129e-03f, -7.162583424e-03f, -7.161684387e-03f, -7.160773019e-03f, -7.159849322e-03f, -7.158913299e-03f, -7.157964953e-03f, -7.157004284e-03f, -7.156031296e-03f, -7.155045991e-03f,
--7.154048371e-03f, -7.153038439e-03f, -7.152016196e-03f, -7.150981646e-03f, -7.149934790e-03f, -7.148875631e-03f, -7.147804172e-03f, -7.146720414e-03f, -7.145624361e-03f, -7.144516015e-03f,
--7.143395378e-03f, -7.142262453e-03f, -7.141117243e-03f, -7.139959750e-03f, -7.138789977e-03f, -7.137607926e-03f, -7.136413600e-03f, -7.135207002e-03f, -7.133988134e-03f, -7.132756999e-03f,
--7.131513600e-03f, -7.130257939e-03f, -7.128990020e-03f, -7.127709845e-03f, -7.126417417e-03f, -7.125112739e-03f, -7.123795814e-03f, -7.122466644e-03f, -7.121125233e-03f, -7.119771583e-03f,
--7.118405697e-03f, -7.117027578e-03f, -7.115637230e-03f, -7.114234655e-03f, -7.112819857e-03f, -7.111392838e-03f, -7.109953601e-03f, -7.108502150e-03f, -7.107038487e-03f, -7.105562616e-03f,
--7.104074540e-03f, -7.102574263e-03f, -7.101061786e-03f, -7.099537114e-03f, -7.098000250e-03f, -7.096451197e-03f, -7.094889958e-03f, -7.093316537e-03f, -7.091730937e-03f, -7.090133160e-03f,
--7.088523212e-03f, -7.086901095e-03f, -7.085266812e-03f, -7.083620366e-03f, -7.081961762e-03f, -7.080291003e-03f, -7.078608092e-03f, -7.076913033e-03f, -7.075205829e-03f, -7.073486484e-03f,
--7.071755002e-03f, -7.070011385e-03f, -7.068255638e-03f, -7.066487765e-03f, -7.064707768e-03f, -7.062915651e-03f, -7.061111419e-03f, -7.059295076e-03f, -7.057466623e-03f, -7.055626067e-03f,
--7.053773409e-03f, -7.051908655e-03f, -7.050031807e-03f, -7.048142870e-03f, -7.046241848e-03f, -7.044328744e-03f, -7.042403563e-03f, -7.040466308e-03f, -7.038516983e-03f, -7.036555593e-03f,
--7.034582140e-03f, -7.032596630e-03f, -7.030599066e-03f, -7.028589453e-03f, -7.026567793e-03f, -7.024534093e-03f, -7.022488354e-03f, -7.020430583e-03f, -7.018360782e-03f, -7.016278956e-03f,
--7.014185110e-03f, -7.012079247e-03f, -7.009961371e-03f, -7.007831488e-03f, -7.005689600e-03f, -7.003535713e-03f, -7.001369831e-03f, -6.999191958e-03f, -6.997002099e-03f, -6.994800257e-03f,
--6.992586438e-03f, -6.990360645e-03f, -6.988122883e-03f, -6.985873157e-03f, -6.983611471e-03f, -6.981337830e-03f, -6.979052238e-03f, -6.976754699e-03f, -6.974445218e-03f, -6.972123801e-03f,
--6.969790450e-03f, -6.967445172e-03f, -6.965087970e-03f, -6.962718849e-03f, -6.960337815e-03f, -6.957944871e-03f, -6.955540022e-03f, -6.953123274e-03f, -6.950694630e-03f, -6.948254097e-03f,
--6.945801677e-03f, -6.943337377e-03f, -6.940861202e-03f, -6.938373155e-03f, -6.935873242e-03f, -6.933361468e-03f, -6.930837838e-03f, -6.928302356e-03f, -6.925755028e-03f, -6.923195859e-03f,
--6.920624854e-03f, -6.918042017e-03f, -6.915447354e-03f, -6.912840870e-03f, -6.910222569e-03f, -6.907592458e-03f, -6.904950541e-03f, -6.902296823e-03f, -6.899631309e-03f, -6.896954006e-03f,
--6.894264917e-03f, -6.891564048e-03f, -6.888851404e-03f, -6.886126991e-03f, -6.883390814e-03f, -6.880642879e-03f, -6.877883189e-03f, -6.875111752e-03f, -6.872328572e-03f, -6.869533655e-03f,
--6.866727005e-03f, -6.863908629e-03f, -6.861078532e-03f, -6.858236720e-03f, -6.855383197e-03f, -6.852517970e-03f, -6.849641044e-03f, -6.846752424e-03f, -6.843852116e-03f, -6.840940126e-03f,
--6.838016459e-03f, -6.835081122e-03f, -6.832134118e-03f, -6.829175455e-03f, -6.826205138e-03f, -6.823223172e-03f, -6.820229564e-03f, -6.817224319e-03f, -6.814207442e-03f, -6.811178941e-03f,
--6.808138819e-03f, -6.805087084e-03f, -6.802023742e-03f, -6.798948797e-03f, -6.795862256e-03f, -6.792764125e-03f, -6.789654409e-03f, -6.786533115e-03f, -6.783400249e-03f, -6.780255817e-03f,
--6.777099824e-03f, -6.773932277e-03f, -6.770753181e-03f, -6.767562543e-03f, -6.764360369e-03f, -6.761146665e-03f, -6.757921437e-03f, -6.754684692e-03f, -6.751436434e-03f, -6.748176672e-03f,
--6.744905410e-03f, -6.741622654e-03f, -6.738328413e-03f, -6.735022690e-03f, -6.731705494e-03f, -6.728376829e-03f, -6.725036703e-03f, -6.721685122e-03f, -6.718322091e-03f, -6.714947619e-03f,
--6.711561710e-03f, -6.708164371e-03f, -6.704755609e-03f, -6.701335430e-03f, -6.697903841e-03f, -6.694460848e-03f, -6.691006457e-03f, -6.687540676e-03f, -6.684063511e-03f, -6.680574967e-03f,
--6.677075053e-03f, -6.673563774e-03f, -6.670041138e-03f, -6.666507150e-03f, -6.662961817e-03f, -6.659405147e-03f, -6.655837145e-03f, -6.652257820e-03f, -6.648667176e-03f, -6.645065221e-03f,
--6.641451963e-03f, -6.637827407e-03f, -6.634191560e-03f, -6.630544430e-03f, -6.626886023e-03f, -6.623216346e-03f, -6.619535406e-03f, -6.615843210e-03f, -6.612139765e-03f, -6.608425078e-03f,
--6.604699155e-03f, -6.600962004e-03f, -6.597213632e-03f, -6.593454045e-03f, -6.589683252e-03f, -6.585901258e-03f, -6.582108072e-03f, -6.578303699e-03f, -6.574488148e-03f, -6.570661425e-03f,
--6.566823538e-03f, -6.562974493e-03f, -6.559114298e-03f, -6.555242961e-03f, -6.551360488e-03f, -6.547466886e-03f, -6.543562164e-03f, -6.539646327e-03f, -6.535719385e-03f, -6.531781343e-03f,
--6.527832209e-03f, -6.523871991e-03f, -6.519900696e-03f, -6.515918332e-03f, -6.511924905e-03f, -6.507920423e-03f, -6.503904895e-03f, -6.499878326e-03f, -6.495840726e-03f, -6.491792100e-03f,
--6.487732458e-03f, -6.483661805e-03f, -6.479580151e-03f, -6.475487502e-03f, -6.471383867e-03f, -6.467269252e-03f, -6.463143665e-03f, -6.459007115e-03f, -6.454859609e-03f, -6.450701154e-03f,
--6.446531758e-03f, -6.442351429e-03f, -6.438160175e-03f, -6.433958004e-03f, -6.429744923e-03f, -6.425520940e-03f, -6.421286063e-03f, -6.417040300e-03f, -6.412783659e-03f, -6.408516147e-03f,
--6.404237773e-03f, -6.399948544e-03f, -6.395648469e-03f, -6.391337555e-03f, -6.387015810e-03f, -6.382683243e-03f, -6.378339862e-03f, -6.373985673e-03f, -6.369620686e-03f, -6.365244909e-03f,
--6.360858349e-03f, -6.356461015e-03f, -6.352052915e-03f, -6.347634057e-03f, -6.343204450e-03f, -6.338764100e-03f, -6.334313018e-03f, -6.329851210e-03f, -6.325378685e-03f, -6.320895452e-03f,
--6.316401518e-03f, -6.311896892e-03f, -6.307381582e-03f, -6.302855597e-03f, -6.298318945e-03f, -6.293771634e-03f, -6.289213672e-03f, -6.284645069e-03f, -6.280065832e-03f, -6.275475970e-03f,
--6.270875491e-03f, -6.266264405e-03f, -6.261642718e-03f, -6.257010441e-03f, -6.252367580e-03f, -6.247714146e-03f, -6.243050146e-03f, -6.238375589e-03f, -6.233690484e-03f, -6.228994840e-03f,
--6.224288664e-03f, -6.219571965e-03f, -6.214844753e-03f, -6.210107036e-03f, -6.205358822e-03f, -6.200600121e-03f, -6.195830941e-03f, -6.191051291e-03f, -6.186261179e-03f, -6.181460615e-03f,
--6.176649607e-03f, -6.171828164e-03f, -6.166996295e-03f, -6.162154009e-03f, -6.157301314e-03f, -6.152438220e-03f, -6.147564736e-03f, -6.142680870e-03f, -6.137786631e-03f, -6.132882029e-03f,
--6.127967072e-03f, -6.123041769e-03f, -6.118106130e-03f, -6.113160163e-03f, -6.108203877e-03f, -6.103237282e-03f, -6.098260387e-03f, -6.093273200e-03f, -6.088275731e-03f, -6.083267989e-03f,
--6.078249984e-03f, -6.073221723e-03f, -6.068183217e-03f, -6.063134475e-03f, -6.058075506e-03f, -6.053006319e-03f, -6.047926924e-03f, -6.042837329e-03f, -6.037737545e-03f, -6.032627580e-03f,
--6.027507443e-03f, -6.022377145e-03f, -6.017236694e-03f, -6.012086100e-03f, -6.006925372e-03f, -6.001754519e-03f, -5.996573552e-03f, -5.991382480e-03f, -5.986181311e-03f, -5.980970056e-03f,
--5.975748723e-03f, -5.970517324e-03f, -5.965275866e-03f, -5.960024360e-03f, -5.954762815e-03f, -5.949491241e-03f, -5.944209647e-03f, -5.938918043e-03f, -5.933616439e-03f, -5.928304844e-03f,
--5.922983268e-03f, -5.917651721e-03f, -5.912310212e-03f, -5.906958751e-03f, -5.901597348e-03f, -5.896226012e-03f, -5.890844754e-03f, -5.885453583e-03f, -5.880052509e-03f, -5.874641541e-03f,
--5.869220691e-03f, -5.863789966e-03f, -5.858349378e-03f, -5.852898936e-03f, -5.847438651e-03f, -5.841968531e-03f, -5.836488587e-03f, -5.830998829e-03f, -5.825499267e-03f, -5.819989911e-03f,
--5.814470771e-03f, -5.808941857e-03f, -5.803403179e-03f, -5.797854747e-03f, -5.792296570e-03f, -5.786728660e-03f, -5.781151027e-03f, -5.775563679e-03f, -5.769966628e-03f, -5.764359884e-03f,
--5.758743457e-03f, -5.753117356e-03f, -5.747481593e-03f, -5.741836177e-03f, -5.736181119e-03f, -5.730516429e-03f, -5.724842117e-03f, -5.719158194e-03f, -5.713464669e-03f, -5.707761553e-03f,
--5.702048857e-03f, -5.696326590e-03f, -5.690594764e-03f, -5.684853388e-03f, -5.679102473e-03f, -5.673342029e-03f, -5.667572067e-03f, -5.661792597e-03f, -5.656003629e-03f, -5.650205175e-03f,
--5.644397244e-03f, -5.638579848e-03f, -5.632752996e-03f, -5.626916699e-03f, -5.621070967e-03f, -5.615215812e-03f, -5.609351244e-03f, -5.603477273e-03f, -5.597593910e-03f, -5.591701166e-03f,
--5.585799052e-03f, -5.579887577e-03f, -5.573966753e-03f, -5.568036590e-03f, -5.562097099e-03f, -5.556148291e-03f, -5.550190177e-03f, -5.544222767e-03f, -5.538246072e-03f, -5.532260102e-03f,
--5.526264870e-03f, -5.520260384e-03f, -5.514246658e-03f, -5.508223700e-03f, -5.502191522e-03f, -5.496150135e-03f, -5.490099550e-03f, -5.484039778e-03f, -5.477970829e-03f, -5.471892714e-03f,
--5.465805446e-03f, -5.459709033e-03f, -5.453603489e-03f, -5.447488822e-03f, -5.441365045e-03f, -5.435232169e-03f, -5.429090204e-03f, -5.422939162e-03f, -5.416779053e-03f, -5.410609890e-03f,
--5.404431682e-03f, -5.398244441e-03f, -5.392048178e-03f, -5.385842905e-03f, -5.379628632e-03f, -5.373405371e-03f, -5.367173133e-03f, -5.360931928e-03f, -5.354681769e-03f, -5.348422667e-03f,
--5.342154632e-03f, -5.335877677e-03f, -5.329591812e-03f, -5.323297048e-03f, -5.316993397e-03f, -5.310680871e-03f, -5.304359481e-03f, -5.298029237e-03f, -5.291690152e-03f, -5.285342236e-03f,
--5.278985502e-03f, -5.272619961e-03f, -5.266245623e-03f, -5.259862501e-03f, -5.253470606e-03f, -5.247069949e-03f, -5.240660542e-03f, -5.234242397e-03f, -5.227815525e-03f, -5.221379937e-03f,
--5.214935645e-03f, -5.208482661e-03f, -5.202020996e-03f, -5.195550662e-03f, -5.189071670e-03f, -5.182584032e-03f, -5.176087760e-03f, -5.169582865e-03f, -5.163069359e-03f, -5.156547254e-03f,
--5.150016561e-03f, -5.143477292e-03f, -5.136929459e-03f, -5.130373074e-03f, -5.123808147e-03f, -5.117234692e-03f, -5.110652720e-03f, -5.104062242e-03f, -5.097463271e-03f, -5.090855818e-03f,
--5.084239895e-03f, -5.077615514e-03f, -5.070982686e-03f, -5.064341425e-03f, -5.057691740e-03f, -5.051033646e-03f, -5.044367153e-03f, -5.037692273e-03f, -5.031009018e-03f, -5.024317401e-03f,
--5.017617433e-03f, -5.010909126e-03f, -5.004192492e-03f, -4.997467543e-03f, -4.990734292e-03f, -4.983992750e-03f, -4.977242930e-03f, -4.970484842e-03f, -4.963718501e-03f, -4.956943917e-03f,
--4.950161102e-03f, -4.943370070e-03f, -4.936570831e-03f, -4.929763399e-03f, -4.922947785e-03f, -4.916124002e-03f, -4.909292061e-03f, -4.902451975e-03f, -4.895603756e-03f, -4.888747417e-03f,
--4.881882969e-03f, -4.875010425e-03f, -4.868129797e-03f, -4.861241098e-03f, -4.854344340e-03f, -4.847439534e-03f, -4.840526694e-03f, -4.833605831e-03f, -4.826676959e-03f, -4.819740089e-03f,
--4.812795234e-03f, -4.805842406e-03f, -4.798881618e-03f, -4.791912882e-03f, -4.784936210e-03f, -4.777951616e-03f, -4.770959110e-03f, -4.763958707e-03f, -4.756950418e-03f, -4.749934256e-03f,
--4.742910233e-03f, -4.735878362e-03f, -4.728838655e-03f, -4.721791126e-03f, -4.714735786e-03f, -4.707672648e-03f, -4.700601725e-03f, -4.693523029e-03f, -4.686436573e-03f, -4.679342370e-03f,
--4.672240432e-03f, -4.665130771e-03f, -4.658013402e-03f, -4.650888335e-03f, -4.643755585e-03f, -4.636615163e-03f, -4.629467082e-03f, -4.622311355e-03f, -4.615147995e-03f, -4.607977015e-03f,
--4.600798427e-03f, -4.593612244e-03f, -4.586418479e-03f, -4.579217145e-03f, -4.572008254e-03f, -4.564791819e-03f, -4.557567854e-03f, -4.550336371e-03f, -4.543097382e-03f, -4.535850902e-03f,
--4.528596942e-03f, -4.521335516e-03f, -4.514066636e-03f, -4.506790315e-03f, -4.499506567e-03f, -4.492215405e-03f, -4.484916840e-03f, -4.477610887e-03f, -4.470297558e-03f, -4.462976866e-03f,
--4.455648825e-03f, -4.448313447e-03f, -4.440970745e-03f, -4.433620733e-03f, -4.426263423e-03f, -4.418898828e-03f, -4.411526962e-03f, -4.404147838e-03f, -4.396761469e-03f, -4.389367867e-03f,
--4.381967047e-03f, -4.374559021e-03f, -4.367143802e-03f, -4.359721403e-03f, -4.352291839e-03f, -4.344855121e-03f, -4.337411263e-03f, -4.329960279e-03f, -4.322502181e-03f, -4.315036983e-03f,
--4.307564699e-03f, -4.300085340e-03f, -4.292598921e-03f, -4.285105455e-03f, -4.277604955e-03f, -4.270097434e-03f, -4.262582906e-03f, -4.255061384e-03f, -4.247532882e-03f, -4.239997413e-03f,
--4.232454990e-03f, -4.224905626e-03f, -4.217349335e-03f, -4.209786130e-03f, -4.202216026e-03f, -4.194639034e-03f, -4.187055169e-03f, -4.179464444e-03f, -4.171866873e-03f, -4.164262468e-03f,
--4.156651244e-03f, -4.149033214e-03f, -4.141408392e-03f, -4.133776790e-03f, -4.126138423e-03f, -4.118493303e-03f, -4.110841446e-03f, -4.103182863e-03f, -4.095517569e-03f, -4.087845577e-03f,
--4.080166901e-03f, -4.072481555e-03f, -4.064789551e-03f, -4.057090905e-03f, -4.049385628e-03f, -4.041673736e-03f, -4.033955240e-03f, -4.026230157e-03f, -4.018498498e-03f, -4.010760278e-03f,
--4.003015510e-03f, -3.995264208e-03f, -3.987506385e-03f, -3.979742056e-03f, -3.971971235e-03f, -3.964193934e-03f, -3.956410168e-03f, -3.948619951e-03f, -3.940823295e-03f, -3.933020216e-03f,
--3.925210726e-03f, -3.917394841e-03f, -3.909572572e-03f, -3.901743935e-03f, -3.893908943e-03f, -3.886067610e-03f, -3.878219950e-03f, -3.870365977e-03f, -3.862505704e-03f, -3.854639146e-03f,
--3.846766316e-03f, -3.838887228e-03f, -3.831001897e-03f, -3.823110336e-03f, -3.815212558e-03f, -3.807308579e-03f, -3.799398412e-03f, -3.791482072e-03f, -3.783559571e-03f, -3.775630924e-03f,
--3.767696145e-03f, -3.759755248e-03f, -3.751808247e-03f, -3.743855156e-03f, -3.735895989e-03f, -3.727930760e-03f, -3.719959484e-03f, -3.711982174e-03f, -3.703998844e-03f, -3.696009509e-03f,
--3.688014182e-03f, -3.680012878e-03f, -3.672005611e-03f, -3.663992394e-03f, -3.655973243e-03f, -3.647948171e-03f, -3.639917192e-03f, -3.631880321e-03f, -3.623837572e-03f, -3.615788958e-03f,
--3.607734495e-03f, -3.599674196e-03f, -3.591608076e-03f, -3.583536148e-03f, -3.575458427e-03f, -3.567374928e-03f, -3.559285663e-03f, -3.551190649e-03f, -3.543089899e-03f, -3.534983427e-03f,
--3.526871248e-03f, -3.518753375e-03f, -3.510629824e-03f, -3.502500608e-03f, -3.494365742e-03f, -3.486225241e-03f, -3.478079117e-03f, -3.469927387e-03f, -3.461770064e-03f, -3.453607163e-03f,
--3.445438697e-03f, -3.437264682e-03f, -3.429085132e-03f, -3.420900061e-03f, -3.412709483e-03f, -3.404513414e-03f, -3.396311867e-03f, -3.388104857e-03f, -3.379892398e-03f, -3.371674505e-03f,
--3.363451192e-03f, -3.355222474e-03f, -3.346988366e-03f, -3.338748881e-03f, -3.330504034e-03f, -3.322253840e-03f, -3.313998314e-03f, -3.305737469e-03f, -3.297471320e-03f, -3.289199883e-03f,
--3.280923171e-03f, -3.272641198e-03f, -3.264353981e-03f, -3.256061532e-03f, -3.247763868e-03f, -3.239461001e-03f, -3.231152948e-03f, -3.222839722e-03f, -3.214521338e-03f, -3.206197811e-03f,
--3.197869156e-03f, -3.189535387e-03f, -3.181196518e-03f, -3.172852565e-03f, -3.164503541e-03f, -3.156149463e-03f, -3.147790344e-03f, -3.139426199e-03f, -3.131057043e-03f, -3.122682890e-03f,
--3.114303756e-03f, -3.105919654e-03f, -3.097530601e-03f, -3.089136609e-03f, -3.080737695e-03f, -3.072333873e-03f, -3.063925158e-03f, -3.055511564e-03f, -3.047093106e-03f, -3.038669799e-03f,
--3.030241659e-03f, -3.021808698e-03f, -3.013370934e-03f, -3.004928379e-03f, -2.996481050e-03f, -2.988028960e-03f, -2.979572126e-03f, -2.971110561e-03f, -2.962644280e-03f, -2.954173299e-03f,
--2.945697632e-03f, -2.937217294e-03f, -2.928732300e-03f, -2.920242664e-03f, -2.911748403e-03f, -2.903249530e-03f, -2.894746061e-03f, -2.886238010e-03f, -2.877725393e-03f, -2.869208224e-03f,
--2.860686518e-03f, -2.852160290e-03f, -2.843629556e-03f, -2.835094330e-03f, -2.826554627e-03f, -2.818010462e-03f, -2.809461850e-03f, -2.800908806e-03f, -2.792351346e-03f, -2.783789483e-03f,
--2.775223234e-03f, -2.766652612e-03f, -2.758077634e-03f, -2.749498314e-03f, -2.740914667e-03f, -2.732326709e-03f, -2.723734453e-03f, -2.715137916e-03f, -2.706537113e-03f, -2.697932058e-03f,
--2.689322766e-03f, -2.680709254e-03f, -2.672091535e-03f, -2.663469624e-03f, -2.654843538e-03f, -2.646213291e-03f, -2.637578898e-03f, -2.628940375e-03f, -2.620297735e-03f, -2.611650996e-03f,
--2.603000171e-03f, -2.594345276e-03f, -2.585686326e-03f, -2.577023336e-03f, -2.568356322e-03f, -2.559685298e-03f, -2.551010280e-03f, -2.542331283e-03f, -2.533648322e-03f, -2.524961412e-03f,
--2.516270568e-03f, -2.507575807e-03f, -2.498877142e-03f, -2.490174589e-03f, -2.481468164e-03f, -2.472757882e-03f, -2.464043757e-03f, -2.455325806e-03f, -2.446604042e-03f, -2.437878483e-03f,
--2.429149142e-03f, -2.420416035e-03f, -2.411679178e-03f, -2.402938586e-03f, -2.394194273e-03f, -2.385446256e-03f, -2.376694550e-03f, -2.367939169e-03f, -2.359180130e-03f, -2.350417447e-03f,
--2.341651136e-03f, -2.332881212e-03f, -2.324107690e-03f, -2.315330587e-03f, -2.306549916e-03f, -2.297765695e-03f, -2.288977937e-03f, -2.280186658e-03f, -2.271391874e-03f, -2.262593600e-03f,
--2.253791851e-03f, -2.244986643e-03f, -2.236177991e-03f, -2.227365910e-03f, -2.218550417e-03f, -2.209731525e-03f, -2.200909252e-03f, -2.192083612e-03f, -2.183254620e-03f, -2.174422292e-03f,
--2.165586643e-03f, -2.156747690e-03f, -2.147905446e-03f, -2.139059928e-03f, -2.130211152e-03f, -2.121359132e-03f, -2.112503884e-03f, -2.103645423e-03f, -2.094783766e-03f, -2.085918927e-03f,
--2.077050921e-03f, -2.068179766e-03f, -2.059305475e-03f, -2.050428064e-03f, -2.041547550e-03f, -2.032663946e-03f, -2.023777270e-03f, -2.014887536e-03f, -2.005994760e-03f, -1.997098957e-03f,
--1.988200143e-03f, -1.979298334e-03f, -1.970393544e-03f, -1.961485790e-03f, -1.952575087e-03f, -1.943661451e-03f, -1.934744897e-03f, -1.925825440e-03f, -1.916903097e-03f, -1.907977883e-03f,
--1.899049812e-03f, -1.890118902e-03f, -1.881185168e-03f, -1.872248624e-03f, -1.863309287e-03f, -1.854367173e-03f, -1.845422296e-03f, -1.836474672e-03f, -1.827524318e-03f, -1.818571248e-03f,
--1.809615479e-03f, -1.800657025e-03f, -1.791695903e-03f, -1.782732127e-03f, -1.773765715e-03f, -1.764796681e-03f, -1.755825040e-03f, -1.746850810e-03f, -1.737874004e-03f, -1.728894640e-03f,
--1.719912731e-03f, -1.710928295e-03f, -1.701941347e-03f, -1.692951902e-03f, -1.683959976e-03f, -1.674965585e-03f, -1.665968745e-03f, -1.656969470e-03f, -1.647967777e-03f, -1.638963682e-03f,
--1.629957199e-03f, -1.620948346e-03f, -1.611937137e-03f, -1.602923588e-03f, -1.593907714e-03f, -1.584889533e-03f, -1.575869058e-03f, -1.566846307e-03f, -1.557821294e-03f, -1.548794036e-03f,
--1.539764547e-03f, -1.530732844e-03f, -1.521698943e-03f, -1.512662859e-03f, -1.503624608e-03f, -1.494584205e-03f, -1.485541667e-03f, -1.476497009e-03f, -1.467450247e-03f, -1.458401396e-03f,
--1.449350472e-03f, -1.440297492e-03f, -1.431242470e-03f, -1.422185423e-03f, -1.413126366e-03f, -1.404065316e-03f, -1.395002287e-03f, -1.385937295e-03f, -1.376870357e-03f, -1.367801488e-03f,
--1.358730704e-03f, -1.349658020e-03f, -1.340583453e-03f, -1.331507018e-03f, -1.322428730e-03f, -1.313348607e-03f, -1.304266663e-03f, -1.295182914e-03f, -1.286097376e-03f, -1.277010065e-03f,
--1.267920997e-03f, -1.258830187e-03f, -1.249737651e-03f, -1.240643406e-03f, -1.231547466e-03f, -1.222449848e-03f, -1.213350567e-03f, -1.204249639e-03f, -1.195147080e-03f, -1.186042907e-03f,
--1.176937133e-03f, -1.167829777e-03f, -1.158720852e-03f, -1.149610376e-03f, -1.140498363e-03f, -1.131384830e-03f, -1.122269793e-03f, -1.113153267e-03f, -1.104035269e-03f, -1.094915813e-03f,
--1.085794916e-03f, -1.076672594e-03f, -1.067548862e-03f, -1.058423737e-03f, -1.049297234e-03f, -1.040169369e-03f, -1.031040158e-03f, -1.021909616e-03f, -1.012777760e-03f, -1.003644606e-03f,
--9.945101684e-04f, -9.853744641e-04f, -9.762375088e-04f, -9.670993182e-04f, -9.579599083e-04f, -9.488192948e-04f, -9.396774937e-04f, -9.305345208e-04f, -9.213903919e-04f, -9.122451229e-04f,
--9.030987297e-04f, -8.939512281e-04f, -8.848026339e-04f, -8.756529631e-04f, -8.665022316e-04f, -8.573504550e-04f, -8.481976495e-04f, -8.390438307e-04f, -8.298890146e-04f, -8.207332170e-04f,
--8.115764538e-04f, -8.024187409e-04f, -7.932600941e-04f, -7.841005294e-04f, -7.749400625e-04f, -7.657787094e-04f, -7.566164860e-04f, -7.474534080e-04f, -7.382894914e-04f, -7.291247521e-04f,
--7.199592059e-04f, -7.107928687e-04f, -7.016257565e-04f, -6.924578849e-04f, -6.832892701e-04f, -6.741199277e-04f, -6.649498738e-04f, -6.557791241e-04f, -6.466076946e-04f, -6.374356012e-04f,
--6.282628596e-04f, -6.190894859e-04f, -6.099154959e-04f, -6.007409054e-04f, -5.915657304e-04f, -5.823899868e-04f, -5.732136903e-04f, -5.640368570e-04f, -5.548595026e-04f, -5.456816432e-04f,
--5.365032944e-04f, -5.273244723e-04f, -5.181451928e-04f, -5.089654716e-04f, -4.997853247e-04f, -4.906047680e-04f, -4.814238173e-04f, -4.722424886e-04f, -4.630607977e-04f, -4.538787605e-04f,
--4.446963929e-04f, -4.355137107e-04f, -4.263307299e-04f, -4.171474664e-04f, -4.079639359e-04f, -3.987801544e-04f, -3.895961378e-04f, -3.804119020e-04f, -3.712274628e-04f, -3.620428361e-04f,
--3.528580378e-04f, -3.436730838e-04f, -3.344879900e-04f, -3.253027721e-04f, -3.161174462e-04f, -3.069320281e-04f, -2.977465336e-04f, -2.885609787e-04f, -2.793753791e-04f, -2.701897509e-04f,
--2.610041098e-04f, -2.518184717e-04f, -2.426328526e-04f, -2.334472682e-04f, -2.242617344e-04f, -2.150762672e-04f, -2.058908823e-04f, -1.967055957e-04f, -1.875204232e-04f, -1.783353807e-04f,
--1.691504840e-04f, -1.599657491e-04f, -1.507811917e-04f, -1.415968277e-04f, -1.324126730e-04f, -1.232287435e-04f, -1.140450549e-04f, -1.048616233e-04f, -9.567846433e-05f, -8.649559396e-05f,
--7.731302800e-05f, -6.813078233e-05f, -5.894887277e-05f, -4.976731520e-05f, -4.058612544e-05f, -3.140531936e-05f, -2.222491279e-05f, -1.304492157e-05f, -3.865361547e-06f, 5.313751436e-06f,
-1.449240154e-05f, 2.367057294e-05f, 3.284824979e-05f, 4.202541625e-05f, 5.120205651e-05f, 6.037815472e-05f, 6.955369506e-05f, 7.872866170e-05f, 8.790303881e-05f, 9.707681058e-05f,
-1.062499612e-04f, 1.154224748e-04f, 1.245943356e-04f, 1.337655278e-04f, 1.429360355e-04f, 1.521058430e-04f, 1.612749345e-04f, 1.704432941e-04f, 1.796109060e-04f, 1.887777544e-04f,
-1.979438236e-04f, 2.071090977e-04f, 2.162735609e-04f, 2.254371974e-04f, 2.345999915e-04f, 2.437619274e-04f, 2.529229892e-04f, 2.620831611e-04f, 2.712424275e-04f, 2.804007725e-04f,
-2.895581803e-04f, 2.987146351e-04f, 3.078701213e-04f, 3.170246229e-04f, 3.261781243e-04f, 3.353306096e-04f, 3.444820632e-04f, 3.536324692e-04f, 3.627818119e-04f, 3.719300755e-04f,
-3.810772443e-04f, 3.902233025e-04f, 3.993682344e-04f, 4.085120242e-04f, 4.176546562e-04f, 4.267961147e-04f, 4.359363838e-04f, 4.450754480e-04f, 4.542132913e-04f, 4.633498982e-04f,
-4.724852529e-04f, 4.816193397e-04f, 4.907521427e-04f, 4.998836465e-04f, 5.090138351e-04f, 5.181426929e-04f, 5.272702042e-04f, 5.363963534e-04f, 5.455211246e-04f, 5.546445022e-04f,
-5.637664705e-04f, 5.728870137e-04f, 5.820061163e-04f, 5.911237626e-04f, 6.002399367e-04f, 6.093546232e-04f, 6.184678062e-04f, 6.275794702e-04f, 6.366895994e-04f, 6.457981781e-04f,
-6.549051909e-04f, 6.640106218e-04f, 6.731144554e-04f, 6.822166759e-04f, 6.913172678e-04f, 7.004162153e-04f, 7.095135028e-04f, 7.186091147e-04f, 7.277030354e-04f, 7.367952492e-04f,
-7.458857404e-04f, 7.549744936e-04f, 7.640614930e-04f, 7.731467231e-04f, 7.822301682e-04f, 7.913118127e-04f, 8.003916410e-04f, 8.094696376e-04f, 8.185457867e-04f, 8.276200729e-04f,
-8.366924806e-04f, 8.457629941e-04f, 8.548315979e-04f, 8.638982765e-04f, 8.729630141e-04f, 8.820257953e-04f, 8.910866046e-04f, 9.001454263e-04f, 9.092022448e-04f, 9.182570448e-04f,
-9.273098105e-04f, 9.363605265e-04f, 9.454091772e-04f, 9.544557471e-04f, 9.635002206e-04f, 9.725425823e-04f, 9.815828166e-04f, 9.906209080e-04f, 9.996568410e-04f, 1.008690600e-03f,
-1.017722170e-03f, 1.026751534e-03f, 1.035778679e-03f, 1.044803587e-03f, 1.053826244e-03f, 1.062846634e-03f, 1.071864742e-03f, 1.080880552e-03f, 1.089894049e-03f, 1.098905217e-03f,
-1.107914041e-03f, 1.116920505e-03f, 1.125924594e-03f, 1.134926293e-03f, 1.143925585e-03f, 1.152922457e-03f, 1.161916891e-03f, 1.170908873e-03f, 1.179898388e-03f, 1.188885419e-03f,
-1.197869952e-03f, 1.206851971e-03f, 1.215831461e-03f, 1.224808407e-03f, 1.233782792e-03f, 1.242754601e-03f, 1.251723820e-03f, 1.260690433e-03f, 1.269654424e-03f, 1.278615779e-03f,
-1.287574481e-03f, 1.296530515e-03f, 1.305483867e-03f, 1.314434520e-03f, 1.323382460e-03f, 1.332327671e-03f, 1.341270137e-03f, 1.350209844e-03f, 1.359146776e-03f, 1.368080918e-03f,
-1.377012255e-03f, 1.385940770e-03f, 1.394866450e-03f, 1.403789278e-03f, 1.412709240e-03f, 1.421626319e-03f, 1.430540502e-03f, 1.439451772e-03f, 1.448360114e-03f, 1.457265514e-03f,
-1.466167955e-03f, 1.475067423e-03f, 1.483963902e-03f, 1.492857377e-03f, 1.501747834e-03f, 1.510635256e-03f, 1.519519628e-03f, 1.528400936e-03f, 1.537279164e-03f, 1.546154297e-03f,
-1.555026320e-03f, 1.563895217e-03f, 1.572760973e-03f, 1.581623574e-03f, 1.590483004e-03f, 1.599339248e-03f, 1.608192290e-03f, 1.617042116e-03f, 1.625888711e-03f, 1.634732059e-03f,
-1.643572145e-03f, 1.652408955e-03f, 1.661242472e-03f, 1.670072683e-03f, 1.678899571e-03f, 1.687723122e-03f, 1.696543321e-03f, 1.705360152e-03f, 1.714173601e-03f, 1.722983652e-03f,
-1.731790290e-03f, 1.740593501e-03f, 1.749393270e-03f, 1.758189580e-03f, 1.766982418e-03f, 1.775771768e-03f, 1.784557616e-03f, 1.793339945e-03f, 1.802118742e-03f, 1.810893991e-03f,
-1.819665677e-03f, 1.828433786e-03f, 1.837198301e-03f, 1.845959209e-03f, 1.854716495e-03f, 1.863470143e-03f, 1.872220138e-03f, 1.880966466e-03f, 1.889709111e-03f, 1.898448059e-03f,
-1.907183295e-03f, 1.915914803e-03f, 1.924642570e-03f, 1.933366579e-03f, 1.942086817e-03f, 1.950803268e-03f, 1.959515917e-03f, 1.968224750e-03f, 1.976929751e-03f, 1.985630906e-03f,
-1.994328201e-03f, 2.003021619e-03f, 2.011711147e-03f, 2.020396769e-03f, 2.029078471e-03f, 2.037756237e-03f, 2.046430054e-03f, 2.055099906e-03f, 2.063765778e-03f, 2.072427656e-03f,
-2.081085526e-03f, 2.089739371e-03f, 2.098389177e-03f, 2.107034931e-03f, 2.115676616e-03f, 2.124314218e-03f, 2.132947723e-03f, 2.141577116e-03f, 2.150202382e-03f, 2.158823506e-03f,
-2.167440473e-03f, 2.176053270e-03f, 2.184661881e-03f, 2.193266292e-03f, 2.201866487e-03f, 2.210462453e-03f, 2.219054175e-03f, 2.227641637e-03f, 2.236224826e-03f, 2.244803727e-03f,
-2.253378325e-03f, 2.261948606e-03f, 2.270514554e-03f, 2.279076156e-03f, 2.287633397e-03f, 2.296186262e-03f, 2.304734737e-03f, 2.313278806e-03f, 2.321818457e-03f, 2.330353673e-03f,
-2.338884441e-03f, 2.347410746e-03f, 2.355932574e-03f, 2.364449909e-03f, 2.372962738e-03f, 2.381471046e-03f, 2.389974818e-03f, 2.398474041e-03f, 2.406968699e-03f, 2.415458778e-03f,
-2.423944264e-03f, 2.432425142e-03f, 2.440901398e-03f, 2.449373017e-03f, 2.457839986e-03f, 2.466302289e-03f, 2.474759912e-03f, 2.483212841e-03f, 2.491661061e-03f, 2.500104559e-03f,
-2.508543319e-03f, 2.516977328e-03f, 2.525406571e-03f, 2.533831033e-03f, 2.542250701e-03f, 2.550665560e-03f, 2.559075596e-03f, 2.567480794e-03f, 2.575881141e-03f, 2.584276621e-03f,
-2.592667221e-03f, 2.601052927e-03f, 2.609433723e-03f, 2.617809597e-03f, 2.626180533e-03f, 2.634546518e-03f, 2.642907537e-03f, 2.651263576e-03f, 2.659614621e-03f, 2.667960657e-03f,
-2.676301672e-03f, 2.684637649e-03f, 2.692968576e-03f, 2.701294437e-03f, 2.709615220e-03f, 2.717930909e-03f, 2.726241492e-03f, 2.734546952e-03f, 2.742847277e-03f, 2.751142453e-03f,
-2.759432465e-03f, 2.767717299e-03f, 2.775996941e-03f, 2.784271377e-03f, 2.792540593e-03f, 2.800804576e-03f, 2.809063310e-03f, 2.817316783e-03f, 2.825564979e-03f, 2.833807886e-03f,
-2.842045488e-03f, 2.850277773e-03f, 2.858504725e-03f, 2.866726332e-03f, 2.874942579e-03f, 2.883153453e-03f, 2.891358938e-03f, 2.899559022e-03f, 2.907753691e-03f, 2.915942931e-03f,
-2.924126727e-03f, 2.932305066e-03f, 2.940477934e-03f, 2.948645317e-03f, 2.956807201e-03f, 2.964963574e-03f, 2.973114419e-03f, 2.981259725e-03f, 2.989399477e-03f, 2.997533661e-03f,
-3.005662263e-03f, 3.013785271e-03f, 3.021902669e-03f, 3.030014444e-03f, 3.038120583e-03f, 3.046221072e-03f, 3.054315897e-03f, 3.062405044e-03f, 3.070488500e-03f, 3.078566251e-03f,
-3.086638283e-03f, 3.094704582e-03f, 3.102765136e-03f, 3.110819930e-03f, 3.118868950e-03f, 3.126912184e-03f, 3.134949617e-03f, 3.142981236e-03f, 3.151007027e-03f, 3.159026977e-03f,
-3.167041072e-03f, 3.175049299e-03f, 3.183051643e-03f, 3.191048092e-03f, 3.199038632e-03f, 3.207023250e-03f, 3.215001931e-03f, 3.222974663e-03f, 3.230941431e-03f, 3.238902224e-03f,
-3.246857026e-03f, 3.254805825e-03f, 3.262748606e-03f, 3.270685358e-03f, 3.278616066e-03f, 3.286540717e-03f, 3.294459297e-03f, 3.302371793e-03f, 3.310278192e-03f, 3.318178481e-03f,
-3.326072645e-03f, 3.333960672e-03f, 3.341842549e-03f, 3.349718261e-03f, 3.357587796e-03f, 3.365451141e-03f, 3.373308282e-03f, 3.381159206e-03f, 3.389003899e-03f, 3.396842349e-03f,
-3.404674542e-03f, 3.412500465e-03f, 3.420320104e-03f, 3.428133448e-03f, 3.435940481e-03f, 3.443741192e-03f, 3.451535566e-03f, 3.459323592e-03f, 3.467105255e-03f, 3.474880542e-03f,
-3.482649441e-03f, 3.490411939e-03f, 3.498168021e-03f, 3.505917676e-03f, 3.513660890e-03f, 3.521397650e-03f, 3.529127943e-03f, 3.536851755e-03f, 3.544569075e-03f, 3.552279888e-03f,
-3.559984183e-03f, 3.567681945e-03f, 3.575373162e-03f, 3.583057821e-03f, 3.590735909e-03f, 3.598407413e-03f, 3.606072321e-03f, 3.613730618e-03f, 3.621382293e-03f, 3.629027332e-03f,
-3.636665723e-03f, 3.644297452e-03f, 3.651922507e-03f, 3.659540875e-03f, 3.667152543e-03f, 3.674757499e-03f, 3.682355728e-03f, 3.689947220e-03f, 3.697531961e-03f, 3.705109937e-03f,
-3.712681137e-03f, 3.720245548e-03f, 3.727803156e-03f, 3.735353950e-03f, 3.742897916e-03f, 3.750435042e-03f, 3.757965314e-03f, 3.765488722e-03f, 3.773005251e-03f, 3.780514889e-03f,
-3.788017623e-03f, 3.795513442e-03f, 3.803002331e-03f, 3.810484280e-03f, 3.817959274e-03f, 3.825427301e-03f, 3.832888350e-03f, 3.840342407e-03f, 3.847789460e-03f, 3.855229496e-03f,
-3.862662503e-03f, 3.870088468e-03f, 3.877507379e-03f, 3.884919223e-03f, 3.892323988e-03f, 3.899721662e-03f, 3.907112231e-03f, 3.914495684e-03f, 3.921872009e-03f, 3.929241192e-03f,
-3.936603221e-03f, 3.943958085e-03f, 3.951305770e-03f, 3.958646265e-03f, 3.965979556e-03f, 3.973305632e-03f, 3.980624481e-03f, 3.987936090e-03f, 3.995240446e-03f, 4.002537538e-03f,
-4.009827354e-03f, 4.017109880e-03f, 4.024385106e-03f, 4.031653018e-03f, 4.038913604e-03f, 4.046166853e-03f, 4.053412752e-03f, 4.060651289e-03f, 4.067882451e-03f, 4.075106227e-03f,
-4.082322605e-03f, 4.089531572e-03f, 4.096733117e-03f, 4.103927227e-03f, 4.111113890e-03f, 4.118293094e-03f, 4.125464827e-03f, 4.132629078e-03f, 4.139785833e-03f, 4.146935082e-03f,
-4.154076811e-03f, 4.161211010e-03f, 4.168337666e-03f, 4.175456767e-03f, 4.182568302e-03f, 4.189672258e-03f, 4.196768623e-03f, 4.203857387e-03f, 4.210938535e-03f, 4.218012058e-03f,
-4.225077943e-03f, 4.232136178e-03f, 4.239186751e-03f, 4.246229651e-03f, 4.253264866e-03f, 4.260292383e-03f, 4.267312192e-03f, 4.274324281e-03f, 4.281328637e-03f, 4.288325250e-03f,
-4.295314106e-03f, 4.302295195e-03f, 4.309268506e-03f, 4.316234025e-03f, 4.323191742e-03f, 4.330141646e-03f, 4.337083723e-03f, 4.344017964e-03f, 4.350944355e-03f, 4.357862887e-03f,
-4.364773546e-03f, 4.371676322e-03f, 4.378571202e-03f, 4.385458176e-03f, 4.392337232e-03f, 4.399208359e-03f, 4.406071544e-03f, 4.412926777e-03f, 4.419774046e-03f, 4.426613340e-03f,
-4.433444646e-03f, 4.440267955e-03f, 4.447083253e-03f, 4.453890531e-03f, 4.460689776e-03f, 4.467480978e-03f, 4.474264125e-03f, 4.481039205e-03f, 4.487806207e-03f, 4.494565121e-03f,
-4.501315934e-03f, 4.508058635e-03f, 4.514793214e-03f, 4.521519659e-03f, 4.528237958e-03f, 4.534948101e-03f, 4.541650077e-03f, 4.548343873e-03f, 4.555029480e-03f, 4.561706885e-03f,
-4.568376079e-03f, 4.575037048e-03f, 4.581689784e-03f, 4.588334273e-03f, 4.594970506e-03f, 4.601598472e-03f, 4.608218158e-03f, 4.614829555e-03f, 4.621432651e-03f, 4.628027435e-03f,
-4.634613897e-03f, 4.641192024e-03f, 4.647761807e-03f, 4.654323235e-03f, 4.660876295e-03f, 4.667420979e-03f, 4.673957273e-03f, 4.680485169e-03f, 4.687004654e-03f, 4.693515719e-03f,
-4.700018352e-03f, 4.706512542e-03f, 4.712998278e-03f, 4.719475551e-03f, 4.725944348e-03f, 4.732404660e-03f, 4.738856475e-03f, 4.745299783e-03f, 4.751734573e-03f, 4.758160834e-03f,
-4.764578556e-03f, 4.770987728e-03f, 4.777388339e-03f, 4.783780380e-03f, 4.790163838e-03f, 4.796538703e-03f, 4.802904966e-03f, 4.809262615e-03f, 4.815611640e-03f, 4.821952030e-03f,
-4.828283774e-03f, 4.834606863e-03f, 4.840921285e-03f, 4.847227031e-03f, 4.853524090e-03f, 4.859812450e-03f, 4.866092103e-03f, 4.872363037e-03f, 4.878625242e-03f, 4.884878707e-03f,
-4.891123423e-03f, 4.897359379e-03f, 4.903586564e-03f, 4.909804969e-03f, 4.916014582e-03f, 4.922215394e-03f, 4.928407395e-03f, 4.934590573e-03f, 4.940764920e-03f, 4.946930423e-03f,
-4.953087075e-03f, 4.959234863e-03f, 4.965373779e-03f, 4.971503811e-03f, 4.977624950e-03f, 4.983737186e-03f, 4.989840507e-03f, 4.995934906e-03f, 5.002020370e-03f, 5.008096891e-03f,
-5.014164457e-03f, 5.020223060e-03f, 5.026272689e-03f, 5.032313333e-03f, 5.038344984e-03f, 5.044367631e-03f, 5.050381264e-03f, 5.056385873e-03f, 5.062381448e-03f, 5.068367979e-03f,
-5.074345457e-03f, 5.080313872e-03f, 5.086273213e-03f, 5.092223470e-03f, 5.098164635e-03f, 5.104096697e-03f, 5.110019646e-03f, 5.115933473e-03f, 5.121838168e-03f, 5.127733720e-03f,
-5.133620121e-03f, 5.139497360e-03f, 5.145365429e-03f, 5.151224316e-03f, 5.157074013e-03f, 5.162914510e-03f, 5.168745797e-03f, 5.174567865e-03f, 5.180380704e-03f, 5.186184304e-03f,
-5.191978656e-03f, 5.197763750e-03f, 5.203539578e-03f, 5.209306128e-03f, 5.215063392e-03f, 5.220811360e-03f, 5.226550023e-03f, 5.232279371e-03f, 5.237999396e-03f, 5.243710086e-03f,
-5.249411434e-03f, 5.255103429e-03f, 5.260786063e-03f, 5.266459325e-03f, 5.272123207e-03f, 5.277777699e-03f, 5.283422793e-03f, 5.289058477e-03f, 5.294684745e-03f, 5.300301585e-03f,
-5.305908989e-03f, 5.311506948e-03f, 5.317095453e-03f, 5.322674493e-03f, 5.328244061e-03f, 5.333804146e-03f, 5.339354741e-03f, 5.344895835e-03f, 5.350427420e-03f, 5.355949486e-03f,
-5.361462024e-03f, 5.366965026e-03f, 5.372458483e-03f, 5.377942384e-03f, 5.383416722e-03f, 5.388881487e-03f, 5.394336670e-03f, 5.399782263e-03f, 5.405218257e-03f, 5.410644641e-03f,
-5.416061409e-03f, 5.421468550e-03f, 5.426866056e-03f, 5.432253918e-03f, 5.437632127e-03f, 5.443000675e-03f, 5.448359552e-03f, 5.453708750e-03f, 5.459048260e-03f, 5.464378073e-03f,
-5.469698181e-03f, 5.475008575e-03f, 5.480309246e-03f, 5.485600185e-03f, 5.490881384e-03f, 5.496152834e-03f, 5.501414527e-03f, 5.506666453e-03f, 5.511908605e-03f, 5.517140974e-03f,
-5.522363551e-03f, 5.527576327e-03f, 5.532779295e-03f, 5.537972445e-03f, 5.543155770e-03f, 5.548329260e-03f, 5.553492907e-03f, 5.558646703e-03f, 5.563790640e-03f, 5.568924708e-03f,
-5.574048900e-03f, 5.579163207e-03f, 5.584267621e-03f, 5.589362133e-03f, 5.594446736e-03f, 5.599521421e-03f, 5.604586179e-03f, 5.609641002e-03f, 5.614685883e-03f, 5.619720813e-03f,
-5.624745783e-03f, 5.629760786e-03f, 5.634765813e-03f, 5.639760856e-03f, 5.644745907e-03f, 5.649720958e-03f, 5.654686001e-03f, 5.659641028e-03f, 5.664586031e-03f, 5.669521001e-03f,
-5.674445930e-03f, 5.679360811e-03f, 5.684265636e-03f, 5.689160396e-03f, 5.694045084e-03f, 5.698919692e-03f, 5.703784211e-03f, 5.708638634e-03f, 5.713482953e-03f, 5.718317160e-03f,
-5.723141248e-03f, 5.727955208e-03f, 5.732759032e-03f, 5.737552713e-03f, 5.742336244e-03f, 5.747109615e-03f, 5.751872820e-03f, 5.756625851e-03f, 5.761368699e-03f, 5.766101359e-03f,
-5.770823820e-03f, 5.775536077e-03f, 5.780238121e-03f, 5.784929945e-03f, 5.789611541e-03f, 5.794282902e-03f, 5.798944020e-03f, 5.803594887e-03f, 5.808235496e-03f, 5.812865839e-03f,
-5.817485910e-03f, 5.822095700e-03f, 5.826695202e-03f, 5.831284408e-03f, 5.835863312e-03f, 5.840431905e-03f, 5.844990181e-03f, 5.849538131e-03f, 5.854075750e-03f, 5.858603028e-03f,
-5.863119960e-03f, 5.867626537e-03f, 5.872122753e-03f, 5.876608599e-03f, 5.881084070e-03f, 5.885549157e-03f, 5.890003854e-03f, 5.894448154e-03f, 5.898882048e-03f, 5.903305530e-03f,
-5.907718594e-03f, 5.912121231e-03f, 5.916513434e-03f, 5.920895198e-03f, 5.925266513e-03f, 5.929627375e-03f, 5.933977774e-03f, 5.938317706e-03f, 5.942647161e-03f, 5.946966135e-03f,
-5.951274619e-03f, 5.955572606e-03f, 5.959860090e-03f, 5.964137065e-03f, 5.968403522e-03f, 5.972659455e-03f, 5.976904858e-03f, 5.981139723e-03f, 5.985364043e-03f, 5.989577813e-03f,
-5.993781025e-03f, 5.997973672e-03f, 6.002155748e-03f, 6.006327246e-03f, 6.010488159e-03f, 6.014638481e-03f, 6.018778205e-03f, 6.022907324e-03f, 6.027025832e-03f, 6.031133722e-03f,
-6.035230987e-03f, 6.039317622e-03f, 6.043393619e-03f, 6.047458972e-03f, 6.051513675e-03f, 6.055557720e-03f, 6.059591102e-03f, 6.063613815e-03f, 6.067625850e-03f, 6.071627203e-03f,
-6.075617867e-03f, 6.079597836e-03f, 6.083567102e-03f, 6.087525661e-03f, 6.091473505e-03f, 6.095410628e-03f, 6.099337024e-03f, 6.103252687e-03f, 6.107157610e-03f, 6.111051787e-03f,
-6.114935213e-03f, 6.118807880e-03f, 6.122669783e-03f, 6.126520915e-03f, 6.130361271e-03f, 6.134190845e-03f, 6.138009629e-03f, 6.141817619e-03f, 6.145614808e-03f, 6.149401190e-03f,
-6.153176759e-03f, 6.156941509e-03f, 6.160695434e-03f, 6.164438529e-03f, 6.168170786e-03f, 6.171892201e-03f, 6.175602768e-03f, 6.179302480e-03f, 6.182991331e-03f, 6.186669317e-03f,
-6.190336431e-03f, 6.193992667e-03f, 6.197638019e-03f, 6.201272482e-03f, 6.204896050e-03f, 6.208508717e-03f, 6.212110478e-03f, 6.215701327e-03f, 6.219281257e-03f, 6.222850265e-03f,
-6.226408343e-03f, 6.229955487e-03f, 6.233491690e-03f, 6.237016947e-03f, 6.240531253e-03f, 6.244034602e-03f, 6.247526989e-03f, 6.251008408e-03f, 6.254478853e-03f, 6.257938319e-03f,
-6.261386801e-03f, 6.264824294e-03f, 6.268250791e-03f, 6.271666287e-03f, 6.275070778e-03f, 6.278464258e-03f, 6.281846721e-03f, 6.285218162e-03f, 6.288578576e-03f, 6.291927958e-03f,
-6.295266302e-03f, 6.298593604e-03f, 6.301909857e-03f, 6.305215057e-03f, 6.308509199e-03f, 6.311792277e-03f, 6.315064287e-03f, 6.318325222e-03f, 6.321575079e-03f, 6.324813852e-03f,
-6.328041536e-03f, 6.331258126e-03f, 6.334463617e-03f, 6.337658004e-03f, 6.340841282e-03f, 6.344013446e-03f, 6.347174492e-03f, 6.350324413e-03f, 6.353463206e-03f, 6.356590865e-03f,
-6.359707386e-03f, 6.362812763e-03f, 6.365906993e-03f, 6.368990070e-03f, 6.372061989e-03f, 6.375122746e-03f, 6.378172335e-03f, 6.381210753e-03f, 6.384237994e-03f, 6.387254054e-03f,
-6.390258928e-03f, 6.393252612e-03f, 6.396235101e-03f, 6.399206389e-03f, 6.402166474e-03f, 6.405115349e-03f, 6.408053012e-03f, 6.410979456e-03f, 6.413894678e-03f, 6.416798672e-03f,
-6.419691436e-03f, 6.422572964e-03f, 6.425443251e-03f, 6.428302294e-03f, 6.431150087e-03f, 6.433986628e-03f, 6.436811910e-03f, 6.439625931e-03f, 6.442428685e-03f, 6.445220168e-03f,
-6.448000376e-03f, 6.450769306e-03f, 6.453526951e-03f, 6.456273310e-03f, 6.459008376e-03f, 6.461732146e-03f, 6.464444617e-03f, 6.467145783e-03f, 6.469835640e-03f, 6.472514185e-03f,
-6.475181414e-03f, 6.477837322e-03f, 6.480481905e-03f, 6.483115160e-03f, 6.485737082e-03f, 6.488347668e-03f, 6.490946913e-03f, 6.493534813e-03f, 6.496111366e-03f, 6.498676566e-03f,
-6.501230409e-03f, 6.503772893e-03f, 6.506304013e-03f, 6.508823765e-03f, 6.511332146e-03f, 6.513829152e-03f, 6.516314779e-03f, 6.518789023e-03f, 6.521251880e-03f, 6.523703348e-03f,
-6.526143422e-03f, 6.528572098e-03f, 6.530989373e-03f, 6.533395244e-03f, 6.535789706e-03f, 6.538172757e-03f, 6.540544392e-03f, 6.542904608e-03f, 6.545253401e-03f, 6.547590769e-03f,
-6.549916707e-03f, 6.552231213e-03f, 6.554534282e-03f, 6.556825911e-03f, 6.559106098e-03f, 6.561374838e-03f, 6.563632128e-03f, 6.565877964e-03f, 6.568112345e-03f, 6.570335265e-03f,
-6.572546723e-03f, 6.574746714e-03f, 6.576935235e-03f, 6.579112284e-03f, 6.581277857e-03f, 6.583431950e-03f, 6.585574562e-03f, 6.587705688e-03f, 6.589825325e-03f, 6.591933471e-03f,
-6.594030122e-03f, 6.596115275e-03f, 6.598188927e-03f, 6.600251076e-03f, 6.602301717e-03f, 6.604340849e-03f, 6.606368469e-03f, 6.608384572e-03f, 6.610389157e-03f, 6.612382220e-03f,
-6.614363759e-03f, 6.616333771e-03f, 6.618292253e-03f, 6.620239201e-03f, 6.622174615e-03f, 6.624098489e-03f, 6.626010823e-03f, 6.627911612e-03f, 6.629800855e-03f, 6.631678549e-03f,
-6.633544690e-03f, 6.635399277e-03f, 6.637242306e-03f, 6.639073776e-03f, 6.640893683e-03f, 6.642702025e-03f, 6.644498799e-03f, 6.646284003e-03f, 6.648057635e-03f, 6.649819691e-03f,
-6.651570170e-03f, 6.653309068e-03f, 6.655036384e-03f, 6.656752115e-03f, 6.658456258e-03f, 6.660148812e-03f, 6.661829774e-03f, 6.663499141e-03f, 6.665156912e-03f, 6.666803084e-03f,
-6.668437654e-03f, 6.670060621e-03f, 6.671671982e-03f, 6.673271735e-03f, 6.674859877e-03f, 6.676436408e-03f, 6.678001324e-03f, 6.679554623e-03f, 6.681096304e-03f, 6.682626364e-03f,
-6.684144800e-03f, 6.685651612e-03f, 6.687146797e-03f, 6.688630353e-03f, 6.690102278e-03f, 6.691562570e-03f, 6.693011227e-03f, 6.694448248e-03f, 6.695873629e-03f, 6.697287370e-03f,
-6.698689468e-03f, 6.700079923e-03f, 6.701458730e-03f, 6.702825890e-03f, 6.704181401e-03f, 6.705525259e-03f, 6.706857465e-03f, 6.708178015e-03f, 6.709486909e-03f, 6.710784144e-03f,
-6.712069719e-03f, 6.713343632e-03f, 6.714605883e-03f, 6.715856468e-03f, 6.717095386e-03f, 6.718322637e-03f, 6.719538218e-03f, 6.720742128e-03f, 6.721934365e-03f, 6.723114928e-03f,
-6.724283815e-03f, 6.725441025e-03f, 6.726586557e-03f, 6.727720409e-03f, 6.728842580e-03f, 6.729953068e-03f, 6.731051872e-03f, 6.732138991e-03f, 6.733214423e-03f, 6.734278167e-03f,
-6.735330222e-03f, 6.736370587e-03f, 6.737399260e-03f, 6.738416240e-03f, 6.739421527e-03f, 6.740415118e-03f, 6.741397013e-03f, 6.742367211e-03f, 6.743325710e-03f, 6.744272509e-03f,
-6.745207608e-03f, 6.746131005e-03f, 6.747042700e-03f, 6.747942691e-03f, 6.748830977e-03f, 6.749707557e-03f, 6.750572431e-03f, 6.751425598e-03f, 6.752267056e-03f, 6.753096805e-03f,
-6.753914843e-03f, 6.754721171e-03f, 6.755515787e-03f, 6.756298691e-03f, 6.757069881e-03f, 6.757829357e-03f, 6.758577118e-03f, 6.759313164e-03f, 6.760037493e-03f, 6.760750106e-03f,
-6.761451001e-03f, 6.762140178e-03f, 6.762817636e-03f, 6.763483375e-03f, 6.764137393e-03f, 6.764779692e-03f, 6.765410269e-03f, 6.766029124e-03f, 6.766636258e-03f, 6.767231669e-03f,
-6.767815357e-03f, 6.768387322e-03f, 6.768947563e-03f, 6.769496079e-03f, 6.770032871e-03f, 6.770557939e-03f, 6.771071281e-03f, 6.771572897e-03f, 6.772062788e-03f, 6.772540952e-03f,
-6.773007390e-03f, 6.773462102e-03f, 6.773905086e-03f, 6.774336344e-03f, 6.774755875e-03f, 6.775163678e-03f, 6.775559754e-03f, 6.775944102e-03f, 6.776316723e-03f, 6.776677616e-03f,
-6.777026782e-03f, 6.777364219e-03f, 6.777689929e-03f, 6.778003912e-03f, 6.778306166e-03f, 6.778596693e-03f, 6.778875492e-03f, 6.779142564e-03f, 6.779397909e-03f, 6.779641526e-03f,
-6.779873416e-03f, 6.780093580e-03f, 6.780302016e-03f, 6.780498727e-03f, 6.780683711e-03f, 6.780856969e-03f, 6.781018501e-03f, 6.781168308e-03f, 6.781306390e-03f, 6.781432747e-03f,
-6.781547380e-03f, 6.781650289e-03f, 6.781741474e-03f, 6.781820937e-03f, 6.781888676e-03f, 6.781944693e-03f, 6.781988989e-03f, 6.782021563e-03f, 6.782042416e-03f, 6.782051549e-03f,
-6.782048963e-03f, 6.782034658e-03f, 6.782008634e-03f, 6.781970892e-03f, 6.781921433e-03f, 6.781860257e-03f, 6.781787366e-03f, 6.781702760e-03f, 6.781606439e-03f, 6.781498404e-03f,
-6.781378657e-03f, 6.781247197e-03f, 6.781104026e-03f, 6.780949145e-03f, 6.780782554e-03f, 6.780604254e-03f, 6.780414246e-03f, 6.780212531e-03f, 6.779999111e-03f, 6.779773985e-03f,
-6.779537155e-03f, 6.779288622e-03f, 6.779028386e-03f, 6.778756450e-03f, 6.778472813e-03f, 6.778177478e-03f, 6.777870444e-03f, 6.777551714e-03f, 6.777221288e-03f, 6.776879167e-03f,
-6.776525353e-03f, 6.776159847e-03f, 6.775782650e-03f, 6.775393763e-03f, 6.774993188e-03f, 6.774580926e-03f, 6.774156977e-03f, 6.773721344e-03f, 6.773274028e-03f, 6.772815029e-03f,
-6.772344350e-03f, 6.771861992e-03f, 6.771367956e-03f, 6.770862244e-03f, 6.770344857e-03f, 6.769815796e-03f, 6.769275063e-03f, 6.768722660e-03f, 6.768158589e-03f, 6.767582849e-03f,
-6.766995444e-03f, 6.766396375e-03f, 6.765785643e-03f, 6.765163250e-03f, 6.764529198e-03f, 6.763883489e-03f, 6.763226123e-03f, 6.762557103e-03f, 6.761876431e-03f, 6.761184108e-03f,
-6.760480136e-03f, 6.759764516e-03f, 6.759037252e-03f, 6.758298344e-03f, 6.757547794e-03f, 6.756785604e-03f, 6.756011776e-03f, 6.755226313e-03f, 6.754429215e-03f, 6.753620485e-03f,
-6.752800125e-03f, 6.751968137e-03f, 6.751124523e-03f, 6.750269284e-03f, 6.749402424e-03f, 6.748523943e-03f, 6.747633845e-03f, 6.746732131e-03f, 6.745818803e-03f, 6.744893863e-03f,
-6.743957314e-03f, 6.743009159e-03f, 6.742049398e-03f, 6.741078034e-03f, 6.740095070e-03f, 6.739100508e-03f, 6.738094350e-03f, 6.737076598e-03f, 6.736047255e-03f, 6.735006323e-03f,
-6.733953804e-03f, 6.732889702e-03f, 6.731814017e-03f, 6.730726754e-03f, 6.729627913e-03f, 6.728517498e-03f, 6.727395512e-03f, 6.726261955e-03f, 6.725116832e-03f, 6.723960145e-03f,
-6.722791896e-03f, 6.721612088e-03f, 6.720420723e-03f, 6.719217804e-03f, 6.718003334e-03f, 6.716777316e-03f, 6.715539751e-03f, 6.714290643e-03f, 6.713029995e-03f, 6.711757809e-03f,
-6.710474088e-03f, 6.709178835e-03f, 6.707872053e-03f, 6.706553744e-03f, 6.705223911e-03f, 6.703882558e-03f, 6.702529687e-03f, 6.701165300e-03f, 6.699789402e-03f, 6.698401994e-03f,
-6.697003080e-03f, 6.695592663e-03f, 6.694170746e-03f, 6.692737331e-03f, 6.691292423e-03f, 6.689836023e-03f, 6.688368135e-03f, 6.686888763e-03f, 6.685397908e-03f, 6.683895575e-03f,
-6.682381767e-03f, 6.680856486e-03f, 6.679319737e-03f, 6.677771521e-03f, 6.676211843e-03f, 6.674640705e-03f, 6.673058111e-03f, 6.671464065e-03f, 6.669858569e-03f, 6.668241627e-03f,
-6.666613242e-03f, 6.664973418e-03f, 6.663322158e-03f, 6.661659465e-03f, 6.659985343e-03f, 6.658299796e-03f, 6.656602826e-03f, 6.654894438e-03f, 6.653174634e-03f, 6.651443419e-03f,
-6.649700796e-03f, 6.647946768e-03f, 6.646181339e-03f, 6.644404513e-03f, 6.642616293e-03f, 6.640816684e-03f, 6.639005687e-03f, 6.637183309e-03f, 6.635349551e-03f, 6.633504418e-03f,
-6.631647913e-03f, 6.629780041e-03f, 6.627900805e-03f, 6.626010209e-03f, 6.624108257e-03f, 6.622194952e-03f, 6.620270298e-03f, 6.618334300e-03f, 6.616386961e-03f, 6.614428285e-03f,
-6.612458276e-03f, 6.610476939e-03f, 6.608484276e-03f, 6.606480293e-03f, 6.604464992e-03f, 6.602438379e-03f, 6.600400456e-03f, 6.598351229e-03f, 6.596290701e-03f, 6.594218877e-03f,
-6.592135761e-03f, 6.590041356e-03f, 6.587935667e-03f, 6.585818698e-03f, 6.583690453e-03f, 6.581550937e-03f, 6.579400154e-03f, 6.577238108e-03f, 6.575064803e-03f, 6.572880244e-03f,
-6.570684435e-03f, 6.568477381e-03f, 6.566259085e-03f, 6.564029552e-03f, 6.561788787e-03f, 6.559536793e-03f, 6.557273577e-03f, 6.554999141e-03f, 6.552713490e-03f, 6.550416629e-03f,
-6.548108563e-03f, 6.545789295e-03f, 6.543458831e-03f, 6.541117175e-03f, 6.538764332e-03f, 6.536400306e-03f, 6.534025102e-03f, 6.531638725e-03f, 6.529241178e-03f, 6.526832468e-03f,
-6.524412598e-03f, 6.521981574e-03f, 6.519539400e-03f, 6.517086080e-03f, 6.514621621e-03f, 6.512146026e-03f, 6.509659300e-03f, 6.507161448e-03f, 6.504652476e-03f, 6.502132387e-03f,
-6.499601187e-03f, 6.497058881e-03f, 6.494505474e-03f, 6.491940970e-03f, 6.489365375e-03f, 6.486778693e-03f, 6.484180930e-03f, 6.481572091e-03f, 6.478952181e-03f, 6.476321204e-03f,
-6.473679166e-03f, 6.471026072e-03f, 6.468361928e-03f, 6.465686737e-03f, 6.463000507e-03f, 6.460303240e-03f, 6.457594944e-03f, 6.454875622e-03f, 6.452145281e-03f, 6.449403926e-03f,
-6.446651561e-03f, 6.443888193e-03f, 6.441113825e-03f, 6.438328465e-03f, 6.435532117e-03f, 6.432724787e-03f, 6.429906479e-03f, 6.427077200e-03f, 6.424236954e-03f, 6.421385748e-03f,
-6.418523586e-03f, 6.415650474e-03f, 6.412766419e-03f, 6.409871424e-03f, 6.406965496e-03f, 6.404048641e-03f, 6.401120863e-03f, 6.398182169e-03f, 6.395232563e-03f, 6.392272053e-03f,
-6.389300643e-03f, 6.386318339e-03f, 6.383325147e-03f, 6.380321072e-03f, 6.377306120e-03f, 6.374280297e-03f, 6.371243609e-03f, 6.368196062e-03f, 6.365137660e-03f, 6.362068411e-03f,
-6.358988320e-03f, 6.355897392e-03f, 6.352795635e-03f, 6.349683052e-03f, 6.346559652e-03f, 6.343425438e-03f, 6.340280418e-03f, 6.337124597e-03f, 6.333957982e-03f, 6.330780578e-03f,
-6.327592391e-03f, 6.324393428e-03f, 6.321183694e-03f, 6.317963195e-03f, 6.314731938e-03f, 6.311489929e-03f, 6.308237174e-03f, 6.304973678e-03f, 6.301699449e-03f, 6.298414492e-03f,
-6.295118814e-03f, 6.291812421e-03f, 6.288495318e-03f, 6.285167513e-03f, 6.281829012e-03f, 6.278479820e-03f, 6.275119944e-03f, 6.271749391e-03f, 6.268368167e-03f, 6.264976278e-03f,
-6.261573731e-03f, 6.258160531e-03f, 6.254736686e-03f, 6.251302202e-03f, 6.247857086e-03f, 6.244401343e-03f, 6.240934980e-03f, 6.237458005e-03f, 6.233970422e-03f, 6.230472240e-03f,
-6.226963464e-03f, 6.223444101e-03f, 6.219914158e-03f, 6.216373641e-03f, 6.212822557e-03f, 6.209260912e-03f, 6.205688714e-03f, 6.202105969e-03f, 6.198512683e-03f, 6.194908864e-03f,
-6.191294518e-03f, 6.187669652e-03f, 6.184034273e-03f, 6.180388387e-03f, 6.176732001e-03f, 6.173065122e-03f, 6.169387758e-03f, 6.165699914e-03f, 6.162001598e-03f, 6.158292817e-03f,
-6.154573577e-03f, 6.150843886e-03f, 6.147103751e-03f, 6.143353177e-03f, 6.139592174e-03f, 6.135820746e-03f, 6.132038903e-03f, 6.128246649e-03f, 6.124443994e-03f, 6.120630943e-03f,
-6.116807504e-03f, 6.112973684e-03f, 6.109129490e-03f, 6.105274929e-03f, 6.101410008e-03f, 6.097534735e-03f, 6.093649117e-03f, 6.089753161e-03f, 6.085846874e-03f, 6.081930264e-03f,
-6.078003337e-03f, 6.074066102e-03f, 6.070118565e-03f, 6.066160733e-03f, 6.062192615e-03f, 6.058214217e-03f, 6.054225547e-03f, 6.050226612e-03f, 6.046217420e-03f, 6.042197977e-03f,
-6.038168293e-03f, 6.034128373e-03f, 6.030078226e-03f, 6.026017858e-03f, 6.021947279e-03f, 6.017866494e-03f, 6.013775512e-03f, 6.009674340e-03f, 6.005562985e-03f, 6.001441456e-03f,
-5.997309760e-03f, 5.993167905e-03f, 5.989015898e-03f, 5.984853747e-03f, 5.980681459e-03f, 5.976499043e-03f, 5.972306506e-03f, 5.968103855e-03f, 5.963891100e-03f, 5.959668246e-03f,
-5.955435303e-03f, 5.951192278e-03f, 5.946939178e-03f, 5.942676012e-03f, 5.938402788e-03f, 5.934119513e-03f, 5.929826195e-03f, 5.925522843e-03f, 5.921209463e-03f, 5.916886065e-03f,
-5.912552656e-03f, 5.908209243e-03f, 5.903855836e-03f, 5.899492442e-03f, 5.895119069e-03f, 5.890735725e-03f, 5.886342418e-03f, 5.881939156e-03f, 5.877525948e-03f, 5.873102801e-03f,
-5.868669724e-03f, 5.864226724e-03f, 5.859773811e-03f, 5.855310991e-03f, 5.850838274e-03f, 5.846355667e-03f, 5.841863179e-03f, 5.837360819e-03f, 5.832848593e-03f, 5.828326511e-03f,
-5.823794581e-03f, 5.819252811e-03f, 5.814701209e-03f, 5.810139785e-03f, 5.805568545e-03f, 5.800987499e-03f, 5.796396655e-03f, 5.791796022e-03f, 5.787185607e-03f, 5.782565420e-03f,
-5.777935469e-03f, 5.773295761e-03f, 5.768646307e-03f, 5.763987113e-03f, 5.759318190e-03f, 5.754639545e-03f, 5.749951187e-03f, 5.745253124e-03f, 5.740545365e-03f, 5.735827919e-03f,
-5.731100794e-03f, 5.726364000e-03f, 5.721617544e-03f, 5.716861435e-03f, 5.712095682e-03f, 5.707320294e-03f, 5.702535279e-03f, 5.697740647e-03f, 5.692936405e-03f, 5.688122564e-03f,
-5.683299130e-03f, 5.678466114e-03f, 5.673623524e-03f, 5.668771369e-03f, 5.663909658e-03f, 5.659038400e-03f, 5.654157603e-03f, 5.649267277e-03f, 5.644367430e-03f, 5.639458072e-03f,
-5.634539210e-03f, 5.629610856e-03f, 5.624673016e-03f, 5.619725700e-03f, 5.614768918e-03f, 5.609802678e-03f, 5.604826990e-03f, 5.599841862e-03f, 5.594847303e-03f, 5.589843323e-03f,
-5.584829931e-03f, 5.579807136e-03f, 5.574774946e-03f, 5.569733372e-03f, 5.564682422e-03f, 5.559622105e-03f, 5.554552431e-03f, 5.549473409e-03f, 5.544385048e-03f, 5.539287358e-03f,
-5.534180347e-03f, 5.529064026e-03f, 5.523938402e-03f, 5.518803486e-03f, 5.513659287e-03f, 5.508505814e-03f, 5.503343077e-03f, 5.498171085e-03f, 5.492989847e-03f, 5.487799373e-03f,
-5.482599673e-03f, 5.477390755e-03f, 5.472172629e-03f, 5.466945304e-03f, 5.461708791e-03f, 5.456463098e-03f, 5.451208236e-03f, 5.445944213e-03f, 5.440671039e-03f, 5.435388724e-03f,
-5.430097277e-03f, 5.424796708e-03f, 5.419487027e-03f, 5.414168242e-03f, 5.408840365e-03f, 5.403503404e-03f, 5.398157369e-03f, 5.392802270e-03f, 5.387438116e-03f, 5.382064918e-03f,
-5.376682684e-03f, 5.371291426e-03f, 5.365891151e-03f, 5.360481871e-03f, 5.355063595e-03f, 5.349636332e-03f, 5.344200094e-03f, 5.338754888e-03f, 5.333300727e-03f, 5.327837618e-03f,
-5.322365572e-03f, 5.316884599e-03f, 5.311394710e-03f, 5.305895913e-03f, 5.300388218e-03f, 5.294871637e-03f, 5.289346178e-03f, 5.283811851e-03f, 5.278268668e-03f, 5.272716637e-03f,
-5.267155769e-03f, 5.261586073e-03f, 5.256007560e-03f, 5.250420240e-03f, 5.244824124e-03f, 5.239219220e-03f, 5.233605539e-03f, 5.227983092e-03f, 5.222351888e-03f, 5.216711938e-03f,
-5.211063251e-03f, 5.205405839e-03f, 5.199739711e-03f, 5.194064877e-03f, 5.188381348e-03f, 5.182689133e-03f, 5.176988244e-03f, 5.171278691e-03f, 5.165560483e-03f, 5.159833631e-03f,
-5.154098146e-03f, 5.148354037e-03f, 5.142601315e-03f, 5.136839991e-03f, 5.131070075e-03f, 5.125291576e-03f, 5.119504507e-03f, 5.113708876e-03f, 5.107904695e-03f, 5.102091974e-03f,
-5.096270723e-03f, 5.090440953e-03f, 5.084602674e-03f, 5.078755897e-03f, 5.072900633e-03f, 5.067036891e-03f, 5.061164683e-03f, 5.055284019e-03f, 5.049394910e-03f, 5.043497366e-03f,
-5.037591397e-03f, 5.031677015e-03f, 5.025754230e-03f, 5.019823053e-03f, 5.013883494e-03f, 5.007935565e-03f, 5.001979275e-03f, 4.996014635e-03f, 4.990041657e-03f, 4.984060350e-03f,
-4.978070726e-03f, 4.972072796e-03f, 4.966066569e-03f, 4.960052058e-03f, 4.954029272e-03f, 4.947998223e-03f, 4.941958922e-03f, 4.935911379e-03f, 4.929855604e-03f, 4.923791610e-03f,
-4.917719407e-03f, 4.911639005e-03f, 4.905550416e-03f, 4.899453651e-03f, 4.893348720e-03f, 4.887235634e-03f, 4.881114405e-03f, 4.874985044e-03f, 4.868847561e-03f, 4.862701967e-03f,
-4.856548274e-03f, 4.850386492e-03f, 4.844216633e-03f, 4.838038707e-03f, 4.831852726e-03f, 4.825658701e-03f, 4.819456642e-03f, 4.813246562e-03f, 4.807028470e-03f, 4.800802379e-03f,
-4.794568299e-03f, 4.788326242e-03f, 4.782076219e-03f, 4.775818240e-03f, 4.769552317e-03f, 4.763278462e-03f, 4.756996685e-03f, 4.750706998e-03f, 4.744409413e-03f, 4.738103939e-03f,
-4.731790589e-03f, 4.725469374e-03f, 4.719140306e-03f, 4.712803394e-03f, 4.706458652e-03f, 4.700106090e-03f, 4.693745720e-03f, 4.687377552e-03f, 4.681001599e-03f, 4.674617872e-03f,
-4.668226381e-03f, 4.661827140e-03f, 4.655420158e-03f, 4.649005448e-03f, 4.642583021e-03f, 4.636152889e-03f, 4.629715062e-03f, 4.623269553e-03f, 4.616816372e-03f, 4.610355532e-03f,
-4.603887045e-03f, 4.597410920e-03f, 4.590927171e-03f, 4.584435809e-03f, 4.577936845e-03f, 4.571430291e-03f, 4.564916158e-03f, 4.558394458e-03f, 4.551865204e-03f, 4.545328406e-03f,
-4.538784076e-03f, 4.532232225e-03f, 4.525672867e-03f, 4.519106011e-03f, 4.512531670e-03f, 4.505949856e-03f, 4.499360581e-03f, 4.492763855e-03f, 4.486159692e-03f, 4.479548102e-03f,
-4.472929097e-03f, 4.466302690e-03f, 4.459668892e-03f, 4.453027715e-03f, 4.446379171e-03f, 4.439723271e-03f, 4.433060028e-03f, 4.426389453e-03f, 4.419711558e-03f, 4.413026356e-03f,
-4.406333857e-03f, 4.399634075e-03f, 4.392927020e-03f, 4.386212705e-03f, 4.379491143e-03f, 4.372762343e-03f, 4.366026320e-03f, 4.359283085e-03f, 4.352532649e-03f, 4.345775025e-03f,
-4.339010225e-03f, 4.332238260e-03f, 4.325459144e-03f, 4.318672888e-03f, 4.311879503e-03f, 4.305079003e-03f, 4.298271399e-03f, 4.291456704e-03f, 4.284634929e-03f, 4.277806086e-03f,
-4.270970189e-03f, 4.264127248e-03f, 4.257277277e-03f, 4.250420286e-03f, 4.243556290e-03f, 4.236685299e-03f, 4.229807325e-03f, 4.222922382e-03f, 4.216030482e-03f, 4.209131636e-03f,
-4.202225857e-03f, 4.195313157e-03f, 4.188393549e-03f, 4.181467044e-03f, 4.174533655e-03f, 4.167593395e-03f, 4.160646276e-03f, 4.153692309e-03f, 4.146731508e-03f, 4.139763885e-03f,
-4.132789452e-03f, 4.125808221e-03f, 4.118820205e-03f, 4.111825417e-03f, 4.104823869e-03f, 4.097815572e-03f, 4.090800541e-03f, 4.083778786e-03f, 4.076750321e-03f, 4.069715158e-03f,
-4.062673310e-03f, 4.055624788e-03f, 4.048569606e-03f, 4.041507776e-03f, 4.034439311e-03f, 4.027364223e-03f, 4.020282525e-03f, 4.013194228e-03f, 4.006099347e-03f, 3.998997893e-03f,
-3.991889879e-03f, 3.984775317e-03f, 3.977654221e-03f, 3.970526602e-03f, 3.963392474e-03f, 3.956251849e-03f, 3.949104740e-03f, 3.941951160e-03f, 3.934791120e-03f, 3.927624634e-03f,
-3.920451715e-03f, 3.913272375e-03f, 3.906086627e-03f, 3.898894484e-03f, 3.891695958e-03f, 3.884491062e-03f, 3.877279810e-03f, 3.870062213e-03f, 3.862838284e-03f, 3.855608037e-03f,
-3.848371484e-03f, 3.841128637e-03f, 3.833879511e-03f, 3.826624117e-03f, 3.819362468e-03f, 3.812094578e-03f, 3.804820459e-03f, 3.797540124e-03f, 3.790253586e-03f, 3.782960857e-03f,
-3.775661952e-03f, 3.768356882e-03f, 3.761045660e-03f, 3.753728300e-03f, 3.746404815e-03f, 3.739075217e-03f, 3.731739519e-03f, 3.724397734e-03f, 3.717049876e-03f, 3.709695957e-03f,
-3.702335991e-03f, 3.694969990e-03f, 3.687597967e-03f, 3.680219936e-03f, 3.672835909e-03f, 3.665445899e-03f, 3.658049920e-03f, 3.650647985e-03f, 3.643240106e-03f, 3.635826298e-03f,
-3.628406572e-03f, 3.620980942e-03f, 3.613549422e-03f, 3.606112023e-03f, 3.598668760e-03f, 3.591219646e-03f, 3.583764693e-03f, 3.576303916e-03f, 3.568837326e-03f, 3.561364938e-03f,
-3.553886764e-03f, 3.546402817e-03f, 3.538913112e-03f, 3.531417661e-03f, 3.523916477e-03f, 3.516409574e-03f, 3.508896964e-03f, 3.501378662e-03f, 3.493854680e-03f, 3.486325032e-03f,
-3.478789731e-03f, 3.471248790e-03f, 3.463702222e-03f, 3.456150041e-03f, 3.448592261e-03f, 3.441028894e-03f, 3.433459954e-03f, 3.425885455e-03f, 3.418305408e-03f, 3.410719829e-03f,
-3.403128730e-03f, 3.395532125e-03f, 3.387930027e-03f, 3.380322450e-03f, 3.372709407e-03f, 3.365090910e-03f, 3.357466975e-03f, 3.349837614e-03f, 3.342202841e-03f, 3.334562669e-03f,
-3.326917111e-03f, 3.319266182e-03f, 3.311609894e-03f, 3.303948262e-03f, 3.296281298e-03f, 3.288609016e-03f, 3.280931429e-03f, 3.273248552e-03f, 3.265560398e-03f, 3.257866979e-03f,
-3.250168311e-03f, 3.242464406e-03f, 3.234755278e-03f, 3.227040940e-03f, 3.219321406e-03f, 3.211596690e-03f, 3.203866806e-03f, 3.196131766e-03f, 3.188391585e-03f, 3.180646275e-03f,
-3.172895852e-03f, 3.165140328e-03f, 3.157379717e-03f, 3.149614033e-03f, 3.141843289e-03f, 3.134067500e-03f, 3.126286678e-03f, 3.118500837e-03f, 3.110709992e-03f, 3.102914156e-03f,
-3.095113342e-03f, 3.087307564e-03f, 3.079496837e-03f, 3.071681173e-03f, 3.063860587e-03f, 3.056035092e-03f, 3.048204702e-03f, 3.040369431e-03f, 3.032529293e-03f, 3.024684301e-03f,
-3.016834469e-03f, 3.008979811e-03f, 3.001120341e-03f, 2.993256072e-03f, 2.985387019e-03f, 2.977513195e-03f, 2.969634615e-03f, 2.961751291e-03f, 2.953863238e-03f, 2.945970470e-03f,
-2.938073000e-03f, 2.930170843e-03f, 2.922264012e-03f, 2.914352521e-03f, 2.906436385e-03f, 2.898515616e-03f, 2.890590229e-03f, 2.882660238e-03f, 2.874725657e-03f, 2.866786500e-03f,
-2.858842780e-03f, 2.850894512e-03f, 2.842941710e-03f, 2.834984387e-03f, 2.827022557e-03f, 2.819056235e-03f, 2.811085435e-03f, 2.803110170e-03f, 2.795130454e-03f, 2.787146302e-03f,
-2.779157727e-03f, 2.771164744e-03f, 2.763167366e-03f, 2.755165608e-03f, 2.747159484e-03f, 2.739149007e-03f, 2.731134192e-03f, 2.723115053e-03f, 2.715091604e-03f, 2.707063858e-03f,
-2.699031831e-03f, 2.690995535e-03f, 2.682954986e-03f, 2.674910197e-03f, 2.666861183e-03f, 2.658807957e-03f, 2.650750534e-03f, 2.642688927e-03f, 2.634623152e-03f, 2.626553221e-03f,
-2.618479150e-03f, 2.610400952e-03f, 2.602318642e-03f, 2.594232233e-03f, 2.586141740e-03f, 2.578047177e-03f, 2.569948559e-03f, 2.561845899e-03f, 2.553739211e-03f, 2.545628510e-03f,
-2.537513811e-03f, 2.529395127e-03f, 2.521272472e-03f, 2.513145861e-03f, 2.505015307e-03f, 2.496880827e-03f, 2.488742432e-03f, 2.480600138e-03f, 2.472453959e-03f, 2.464303910e-03f,
-2.456150004e-03f, 2.447992256e-03f, 2.439830679e-03f, 2.431665290e-03f, 2.423496100e-03f, 2.415323126e-03f, 2.407146381e-03f, 2.398965880e-03f, 2.390781637e-03f, 2.382593666e-03f,
-2.374401981e-03f, 2.366206597e-03f, 2.358007529e-03f, 2.349804790e-03f, 2.341598395e-03f, 2.333388359e-03f, 2.325174695e-03f, 2.316957418e-03f, 2.308736543e-03f, 2.300512083e-03f,
-2.292284054e-03f, 2.284052469e-03f, 2.275817343e-03f, 2.267578691e-03f, 2.259336526e-03f, 2.251090864e-03f, 2.242841718e-03f, 2.234589104e-03f, 2.226333034e-03f, 2.218073525e-03f,
-2.209810590e-03f, 2.201544244e-03f, 2.193274502e-03f, 2.185001377e-03f, 2.176724884e-03f, 2.168445038e-03f, 2.160161853e-03f, 2.151875343e-03f, 2.143585524e-03f, 2.135292409e-03f,
-2.126996014e-03f, 2.118696351e-03f, 2.110393437e-03f, 2.102087286e-03f, 2.093777912e-03f, 2.085465329e-03f, 2.077149552e-03f, 2.068830596e-03f, 2.060508476e-03f, 2.052183205e-03f,
-2.043854798e-03f, 2.035523270e-03f, 2.027188635e-03f, 2.018850908e-03f, 2.010510104e-03f, 2.002166237e-03f, 1.993819321e-03f, 1.985469372e-03f, 1.977116403e-03f, 1.968760430e-03f,
-1.960401467e-03f, 1.952039528e-03f, 1.943674628e-03f, 1.935306782e-03f, 1.926936004e-03f, 1.918562309e-03f, 1.910185712e-03f, 1.901806227e-03f, 1.893423869e-03f, 1.885038652e-03f,
-1.876650591e-03f, 1.868259701e-03f, 1.859865996e-03f, 1.851469491e-03f, 1.843070200e-03f, 1.834668139e-03f, 1.826263322e-03f, 1.817855763e-03f, 1.809445478e-03f, 1.801032480e-03f,
-1.792616785e-03f, 1.784198407e-03f, 1.775777362e-03f, 1.767353662e-03f, 1.758927324e-03f, 1.750498362e-03f, 1.742066791e-03f, 1.733632625e-03f, 1.725195879e-03f, 1.716756568e-03f,
-1.708314706e-03f, 1.699870308e-03f, 1.691423390e-03f, 1.682973965e-03f, 1.674522048e-03f, 1.666067655e-03f, 1.657610799e-03f, 1.649151496e-03f, 1.640689760e-03f, 1.632225606e-03f,
-1.623759049e-03f, 1.615290103e-03f, 1.606818784e-03f, 1.598345105e-03f, 1.589869083e-03f, 1.581390731e-03f, 1.572910064e-03f, 1.564427097e-03f, 1.555941846e-03f, 1.547454323e-03f,
-1.538964546e-03f, 1.530472527e-03f, 1.521978282e-03f, 1.513481826e-03f, 1.504983174e-03f, 1.496482340e-03f, 1.487979339e-03f, 1.479474186e-03f, 1.470966896e-03f, 1.462457483e-03f,
-1.453945963e-03f, 1.445432349e-03f, 1.436916658e-03f, 1.428398904e-03f, 1.419879101e-03f, 1.411357264e-03f, 1.402833409e-03f, 1.394307550e-03f, 1.385779702e-03f, 1.377249879e-03f,
-1.368718097e-03f, 1.360184371e-03f, 1.351648715e-03f, 1.343111144e-03f, 1.334571672e-03f, 1.326030316e-03f, 1.317487089e-03f, 1.308942007e-03f, 1.300395084e-03f, 1.291846336e-03f,
-1.283295776e-03f, 1.274743421e-03f, 1.266189284e-03f, 1.257633381e-03f, 1.249075726e-03f, 1.240516335e-03f, 1.231955223e-03f, 1.223392403e-03f, 1.214827891e-03f, 1.206261703e-03f,
-1.197693852e-03f, 1.189124354e-03f, 1.180553224e-03f, 1.171980476e-03f, 1.163406125e-03f, 1.154830187e-03f, 1.146252676e-03f, 1.137673607e-03f, 1.129092995e-03f, 1.120510854e-03f,
-1.111927201e-03f, 1.103342049e-03f, 1.094755414e-03f, 1.086167311e-03f, 1.077577754e-03f, 1.068986758e-03f, 1.060394338e-03f, 1.051800510e-03f, 1.043205287e-03f, 1.034608686e-03f,
-1.026010721e-03f, 1.017411406e-03f, 1.008810757e-03f, 1.000208789e-03f, 9.916055171e-04f, 9.830009553e-04f, 9.743951189e-04f, 9.657880230e-04f, 9.571796825e-04f, 9.485701123e-04f,
-9.399593273e-04f, 9.313473425e-04f, 9.227341728e-04f, 9.141198331e-04f, 9.055043385e-04f, 8.968877038e-04f, 8.882699440e-04f, 8.796510740e-04f, 8.710311089e-04f, 8.624100634e-04f,
-8.537879527e-04f, 8.451647915e-04f, 8.365405950e-04f, 8.279153780e-04f, 8.192891555e-04f, 8.106619424e-04f, 8.020337537e-04f, 7.934046044e-04f, 7.847745094e-04f, 7.761434837e-04f,
-7.675115423e-04f, 7.588787000e-04f, 7.502449719e-04f, 7.416103729e-04f, 7.329749180e-04f, 7.243386221e-04f, 7.157015003e-04f, 7.070635674e-04f, 6.984248385e-04f, 6.897853284e-04f,
-6.811450523e-04f, 6.725040250e-04f, 6.638622615e-04f, 6.552197768e-04f, 6.465765858e-04f, 6.379327036e-04f, 6.292881450e-04f, 6.206429251e-04f, 6.119970588e-04f, 6.033505612e-04f,
-5.947034471e-04f, 5.860557315e-04f, 5.774074295e-04f, 5.687585560e-04f, 5.601091259e-04f, 5.514591542e-04f, 5.428086560e-04f, 5.341576462e-04f, 5.255061397e-04f, 5.168541515e-04f,
-5.082016966e-04f, 4.995487900e-04f, 4.908954467e-04f, 4.822416816e-04f, 4.735875097e-04f, 4.649329459e-04f, 4.562780053e-04f, 4.476227029e-04f, 4.389670535e-04f, 4.303110722e-04f,
-4.216547739e-04f, 4.129981736e-04f, 4.043412864e-04f, 3.956841270e-04f, 3.870267107e-04f, 3.783690522e-04f, 3.697111666e-04f, 3.610530688e-04f, 3.523947739e-04f, 3.437362967e-04f,
-3.350776523e-04f, 3.264188557e-04f, 3.177599217e-04f, 3.091008654e-04f, 3.004417017e-04f, 2.917824456e-04f, 2.831231121e-04f, 2.744637162e-04f, 2.658042727e-04f, 2.571447967e-04f,
-2.484853031e-04f, 2.398258070e-04f, 2.311663232e-04f, 2.225068667e-04f, 2.138474525e-04f, 2.051880955e-04f, 1.965288107e-04f, 1.878696131e-04f, 1.792105177e-04f, 1.705515393e-04f,
-1.618926929e-04f, 1.532339935e-04f, 1.445754561e-04f, 1.359170955e-04f, 1.272589268e-04f, 1.186009649e-04f, 1.099432248e-04f, 1.012857214e-04f, 9.262846957e-05f, 8.397148437e-05f,
-7.531478072e-05f, 6.665837354e-05f, 5.800227779e-05f, 4.934650841e-05f, 4.069108034e-05f, 3.203600852e-05f, 2.338130789e-05f, 1.472699338e-05f, 6.073079921e-06f, -2.580417543e-06f,
--1.123348408e-05f, -1.988610477e-05f, -2.853826467e-05f, -3.718994886e-05f, -4.584114242e-05f, -5.449183041e-05f, -6.314199792e-05f, -7.179163003e-05f, -8.044071181e-05f, -8.908922835e-05f,
--9.773716472e-05f, -1.063845060e-04f, -1.150312373e-04f, -1.236773438e-04f, -1.323228104e-04f, -1.409676223e-04f, -1.496117646e-04f, -1.582552223e-04f, -1.668979807e-04f, -1.755400247e-04f,
--1.841813395e-04f, -1.928219102e-04f, -2.014617218e-04f, -2.101007596e-04f, -2.187390086e-04f, -2.273764539e-04f, -2.360130806e-04f, -2.446488739e-04f, -2.532838188e-04f, -2.619179006e-04f,
--2.705511043e-04f, -2.791834150e-04f, -2.878148178e-04f, -2.964452980e-04f, -3.050748406e-04f, -3.137034308e-04f, -3.223310537e-04f, -3.309576944e-04f, -3.395833382e-04f, -3.482079700e-04f,
--3.568315751e-04f, -3.654541387e-04f, -3.740756458e-04f, -3.826960817e-04f, -3.913154315e-04f, -3.999336803e-04f, -4.085508133e-04f, -4.171668158e-04f, -4.257816727e-04f, -4.343953694e-04f,
--4.430078910e-04f, -4.516192226e-04f, -4.602293495e-04f, -4.688382568e-04f, -4.774459298e-04f, -4.860523535e-04f, -4.946575132e-04f, -5.032613942e-04f, -5.118639815e-04f, -5.204652603e-04f,
--5.290652160e-04f, -5.376638336e-04f, -5.462610984e-04f, -5.548569957e-04f, -5.634515105e-04f, -5.720446282e-04f, -5.806363340e-04f, -5.892266130e-04f, -5.978154506e-04f, -6.064028319e-04f,
--6.149887421e-04f, -6.235731666e-04f, -6.321560905e-04f, -6.407374991e-04f, -6.493173777e-04f, -6.578957114e-04f, -6.664724856e-04f, -6.750476854e-04f, -6.836212963e-04f, -6.921933033e-04f,
--7.007636919e-04f, -7.093324472e-04f, -7.178995545e-04f, -7.264649992e-04f, -7.350287664e-04f, -7.435908416e-04f, -7.521512098e-04f, -7.607098566e-04f, -7.692667671e-04f, -7.778219267e-04f,
--7.863753206e-04f, -7.949269342e-04f, -8.034767528e-04f, -8.120247616e-04f, -8.205709461e-04f, -8.291152915e-04f, -8.376577832e-04f, -8.461984065e-04f, -8.547371467e-04f, -8.632739891e-04f,
--8.718089192e-04f, -8.803419222e-04f, -8.888729835e-04f, -8.974020885e-04f, -9.059292225e-04f, -9.144543709e-04f, -9.229775190e-04f, -9.314986523e-04f, -9.400177560e-04f, -9.485348156e-04f,
--9.570498165e-04f, -9.655627440e-04f, -9.740735835e-04f, -9.825823205e-04f, -9.910889403e-04f, -9.995934284e-04f, -1.008095770e-03f, -1.016595951e-03f, -1.025093956e-03f, -1.033589771e-03f,
--1.042083382e-03f, -1.050574773e-03f, -1.059063931e-03f, -1.067550840e-03f, -1.076035486e-03f, -1.084517855e-03f, -1.092997931e-03f, -1.101475702e-03f, -1.109951151e-03f, -1.118424264e-03f,
--1.126895028e-03f, -1.135363426e-03f, -1.143829446e-03f, -1.152293072e-03f, -1.160754290e-03f, -1.169213085e-03f, -1.177669442e-03f, -1.186123348e-03f, -1.194574788e-03f, -1.203023748e-03f,
--1.211470212e-03f, -1.219914166e-03f, -1.228355597e-03f, -1.236794489e-03f, -1.245230828e-03f, -1.253664600e-03f, -1.262095789e-03f, -1.270524383e-03f, -1.278950365e-03f, -1.287373723e-03f,
--1.295794440e-03f, -1.304212504e-03f, -1.312627899e-03f, -1.321040612e-03f, -1.329450627e-03f, -1.337857931e-03f, -1.346262508e-03f, -1.354664345e-03f, -1.363063427e-03f, -1.371459740e-03f,
--1.379853270e-03f, -1.388244001e-03f, -1.396631920e-03f, -1.405017013e-03f, -1.413399264e-03f, -1.421778660e-03f, -1.430155187e-03f, -1.438528829e-03f, -1.446899573e-03f, -1.455267405e-03f,
--1.463632309e-03f, -1.471994272e-03f, -1.480353280e-03f, -1.488709317e-03f, -1.497062371e-03f, -1.505412426e-03f, -1.513759468e-03f, -1.522103483e-03f, -1.530444457e-03f, -1.538782375e-03f,
--1.547117223e-03f, -1.555448988e-03f, -1.563777654e-03f, -1.572103207e-03f, -1.580425634e-03f, -1.588744920e-03f, -1.597061050e-03f, -1.605374011e-03f, -1.613683788e-03f, -1.621990368e-03f,
--1.630293735e-03f, -1.638593876e-03f, -1.646890777e-03f, -1.655184423e-03f, -1.663474801e-03f, -1.671761895e-03f, -1.680045692e-03f, -1.688326178e-03f, -1.696603339e-03f, -1.704877160e-03f,
--1.713147628e-03f, -1.721414727e-03f, -1.729678445e-03f, -1.737938767e-03f, -1.746195679e-03f, -1.754449166e-03f, -1.762699215e-03f, -1.770945812e-03f, -1.779188942e-03f, -1.787428591e-03f,
--1.795664746e-03f, -1.803897393e-03f, -1.812126516e-03f, -1.820352103e-03f, -1.828574139e-03f, -1.836792610e-03f, -1.845007502e-03f, -1.853218802e-03f, -1.861426494e-03f, -1.869630566e-03f,
--1.877831002e-03f, -1.886027790e-03f, -1.894220915e-03f, -1.902410363e-03f, -1.910596120e-03f, -1.918778172e-03f, -1.926956506e-03f, -1.935131107e-03f, -1.943301961e-03f, -1.951469055e-03f,
--1.959632374e-03f, -1.967791905e-03f, -1.975947633e-03f, -1.984099545e-03f, -1.992247627e-03f, -2.000391865e-03f, -2.008532245e-03f, -2.016668754e-03f, -2.024801376e-03f, -2.032930099e-03f,
--2.041054909e-03f, -2.049175792e-03f, -2.057292733e-03f, -2.065405720e-03f, -2.073514738e-03f, -2.081619773e-03f, -2.089720812e-03f, -2.097817841e-03f, -2.105910846e-03f, -2.113999813e-03f,
--2.122084729e-03f, -2.130165580e-03f, -2.138242351e-03f, -2.146315030e-03f, -2.154383602e-03f, -2.162448054e-03f, -2.170508372e-03f, -2.178564542e-03f, -2.186616551e-03f, -2.194664384e-03f,
--2.202708029e-03f, -2.210747471e-03f, -2.218782697e-03f, -2.226813693e-03f, -2.234840445e-03f, -2.242862941e-03f, -2.250881165e-03f, -2.258895105e-03f, -2.266904747e-03f, -2.274910076e-03f,
--2.282911081e-03f, -2.290907746e-03f, -2.298900059e-03f, -2.306888006e-03f, -2.314871572e-03f, -2.322850746e-03f, -2.330825512e-03f, -2.338795858e-03f, -2.346761770e-03f, -2.354723234e-03f,
--2.362680237e-03f, -2.370632765e-03f, -2.378580805e-03f, -2.386524344e-03f, -2.394463367e-03f, -2.402397861e-03f, -2.410327813e-03f, -2.418253210e-03f, -2.426174037e-03f, -2.434090282e-03f,
--2.442001930e-03f, -2.449908969e-03f, -2.457811386e-03f, -2.465709165e-03f, -2.473602295e-03f, -2.481490762e-03f, -2.489374552e-03f, -2.497253652e-03f, -2.505128049e-03f, -2.512997729e-03f,
--2.520862679e-03f, -2.528722885e-03f, -2.536578334e-03f, -2.544429014e-03f, -2.552274909e-03f, -2.560116008e-03f, -2.567952297e-03f, -2.575783763e-03f, -2.583610391e-03f, -2.591432170e-03f,
--2.599249085e-03f, -2.607061124e-03f, -2.614868273e-03f, -2.622670519e-03f, -2.630467848e-03f, -2.638260248e-03f, -2.646047705e-03f, -2.653830207e-03f, -2.661607739e-03f, -2.669380288e-03f,
--2.677147842e-03f, -2.684910388e-03f, -2.692667911e-03f, -2.700420400e-03f, -2.708167840e-03f, -2.715910219e-03f, -2.723647523e-03f, -2.731379740e-03f, -2.739106856e-03f, -2.746828858e-03f,
--2.754545733e-03f, -2.762257468e-03f, -2.769964051e-03f, -2.777665467e-03f, -2.785361704e-03f, -2.793052749e-03f, -2.800738588e-03f, -2.808419209e-03f, -2.816094599e-03f, -2.823764745e-03f,
--2.831429634e-03f, -2.839089252e-03f, -2.846743586e-03f, -2.854392625e-03f, -2.862036355e-03f, -2.869674762e-03f, -2.877307834e-03f, -2.884935559e-03f, -2.892557922e-03f, -2.900174912e-03f,
--2.907786515e-03f, -2.915392718e-03f, -2.922993509e-03f, -2.930588874e-03f, -2.938178802e-03f, -2.945763278e-03f, -2.953342291e-03f, -2.960915826e-03f, -2.968483873e-03f, -2.976046417e-03f,
--2.983603445e-03f, -2.991154946e-03f, -2.998700907e-03f, -3.006241313e-03f, -3.013776154e-03f, -3.021305416e-03f, -3.028829086e-03f, -3.036347151e-03f, -3.043859599e-03f, -3.051366418e-03f,
--3.058867594e-03f, -3.066363115e-03f, -3.073852968e-03f, -3.081337140e-03f, -3.088815620e-03f, -3.096288393e-03f, -3.103755448e-03f, -3.111216772e-03f, -3.118672352e-03f, -3.126122176e-03f,
--3.133566231e-03f, -3.141004504e-03f, -3.148436984e-03f, -3.155863657e-03f, -3.163284511e-03f, -3.170699533e-03f, -3.178108711e-03f, -3.185512032e-03f, -3.192909484e-03f, -3.200301054e-03f,
--3.207686730e-03f, -3.215066499e-03f, -3.222440350e-03f, -3.229808268e-03f, -3.237170243e-03f, -3.244526261e-03f, -3.251876311e-03f, -3.259220379e-03f, -3.266558453e-03f, -3.273890521e-03f,
--3.281216571e-03f, -3.288536591e-03f, -3.295850567e-03f, -3.303158487e-03f, -3.310460340e-03f, -3.317756113e-03f, -3.325045793e-03f, -3.332329368e-03f, -3.339606827e-03f, -3.346878156e-03f,
--3.354143344e-03f, -3.361402378e-03f, -3.368655246e-03f, -3.375901935e-03f, -3.383142434e-03f, -3.390376731e-03f, -3.397604812e-03f, -3.404826667e-03f, -3.412042282e-03f, -3.419251646e-03f,
--3.426454746e-03f, -3.433651570e-03f, -3.440842107e-03f, -3.448026344e-03f, -3.455204269e-03f, -3.462375869e-03f, -3.469541134e-03f, -3.476700050e-03f, -3.483852606e-03f, -3.490998789e-03f,
--3.498138589e-03f, -3.505271991e-03f, -3.512398985e-03f, -3.519519559e-03f, -3.526633700e-03f, -3.533741397e-03f, -3.540842638e-03f, -3.547937410e-03f, -3.555025702e-03f, -3.562107502e-03f,
--3.569182797e-03f, -3.576251577e-03f, -3.583313829e-03f, -3.590369541e-03f, -3.597418701e-03f, -3.604461298e-03f, -3.611497319e-03f, -3.618526753e-03f, -3.625549588e-03f, -3.632565813e-03f,
--3.639575414e-03f, -3.646578382e-03f, -3.653574703e-03f, -3.660564366e-03f, -3.667547359e-03f, -3.674523671e-03f, -3.681493290e-03f, -3.688456204e-03f, -3.695412402e-03f, -3.702361871e-03f,
--3.709304600e-03f, -3.716240577e-03f, -3.723169792e-03f, -3.730092231e-03f, -3.737007884e-03f, -3.743916739e-03f, -3.750818784e-03f, -3.757714007e-03f, -3.764602398e-03f, -3.771483944e-03f,
--3.778358635e-03f, -3.785226457e-03f, -3.792087401e-03f, -3.798941454e-03f, -3.805788605e-03f, -3.812628842e-03f, -3.819462154e-03f, -3.826288529e-03f, -3.833107957e-03f, -3.839920425e-03f,
--3.846725922e-03f, -3.853524437e-03f, -3.860315958e-03f, -3.867100474e-03f, -3.873877974e-03f, -3.880648445e-03f, -3.887411878e-03f, -3.894168260e-03f, -3.900917580e-03f, -3.907659827e-03f,
--3.914394989e-03f, -3.921123056e-03f, -3.927844016e-03f, -3.934557857e-03f, -3.941264569e-03f, -3.947964140e-03f, -3.954656559e-03f, -3.961341815e-03f, -3.968019896e-03f, -3.974690792e-03f,
--3.981354491e-03f, -3.988010982e-03f, -3.994660254e-03f, -4.001302295e-03f, -4.007937096e-03f, -4.014564643e-03f, -4.021184928e-03f, -4.027797937e-03f, -4.034403661e-03f, -4.041002089e-03f,
--4.047593208e-03f, -4.054177009e-03f, -4.060753479e-03f, -4.067322609e-03f, -4.073884387e-03f, -4.080438802e-03f, -4.086985844e-03f, -4.093525501e-03f, -4.100057762e-03f, -4.106582616e-03f,
--4.113100053e-03f, -4.119610062e-03f, -4.126112631e-03f, -4.132607750e-03f, -4.139095408e-03f, -4.145575595e-03f, -4.152048298e-03f, -4.158513509e-03f, -4.164971215e-03f, -4.171421405e-03f,
--4.177864070e-03f, -4.184299199e-03f, -4.190726780e-03f, -4.197146802e-03f, -4.203559256e-03f, -4.209964131e-03f, -4.216361415e-03f, -4.222751099e-03f, -4.229133170e-03f, -4.235507620e-03f,
--4.241874437e-03f, -4.248233610e-03f, -4.254585129e-03f, -4.260928984e-03f, -4.267265163e-03f, -4.273593656e-03f, -4.279914453e-03f, -4.286227543e-03f, -4.292532916e-03f, -4.298830560e-03f,
--4.305120466e-03f, -4.311402623e-03f, -4.317677021e-03f, -4.323943648e-03f, -4.330202496e-03f, -4.336453552e-03f, -4.342696807e-03f, -4.348932251e-03f, -4.355159873e-03f, -4.361379662e-03f,
--4.367591608e-03f, -4.373795702e-03f, -4.379991932e-03f, -4.386180288e-03f, -4.392360760e-03f, -4.398533338e-03f, -4.404698012e-03f, -4.410854770e-03f, -4.417003603e-03f, -4.423144501e-03f,
--4.429277453e-03f, -4.435402450e-03f, -4.441519481e-03f, -4.447628535e-03f, -4.453729603e-03f, -4.459822675e-03f, -4.465907740e-03f, -4.471984788e-03f, -4.478053809e-03f, -4.484114794e-03f,
--4.490167731e-03f, -4.496212612e-03f, -4.502249425e-03f, -4.508278161e-03f, -4.514298810e-03f, -4.520311362e-03f, -4.526315807e-03f, -4.532312135e-03f, -4.538300335e-03f, -4.544280399e-03f,
--4.550252315e-03f, -4.556216075e-03f, -4.562171667e-03f, -4.568119083e-03f, -4.574058313e-03f, -4.579989346e-03f, -4.585912173e-03f, -4.591826784e-03f, -4.597733169e-03f, -4.603631318e-03f,
--4.609521221e-03f, -4.615402870e-03f, -4.621276253e-03f, -4.627141362e-03f, -4.632998186e-03f, -4.638846716e-03f, -4.644686942e-03f, -4.650518854e-03f, -4.656342443e-03f, -4.662157699e-03f,
--4.667964613e-03f, -4.673763175e-03f, -4.679553374e-03f, -4.685335203e-03f, -4.691108650e-03f, -4.696873707e-03f, -4.702630364e-03f, -4.708378611e-03f, -4.714118440e-03f, -4.719849839e-03f,
--4.725572801e-03f, -4.731287315e-03f, -4.736993371e-03f, -4.742690962e-03f, -4.748380076e-03f, -4.754060705e-03f, -4.759732840e-03f, -4.765396470e-03f, -4.771051587e-03f, -4.776698181e-03f,
--4.782336243e-03f, -4.787965764e-03f, -4.793586733e-03f, -4.799199143e-03f, -4.804802983e-03f, -4.810398245e-03f, -4.815984918e-03f, -4.821562995e-03f, -4.827132465e-03f, -4.832693320e-03f,
--4.838245550e-03f, -4.843789147e-03f, -4.849324100e-03f, -4.854850401e-03f, -4.860368041e-03f, -4.865877011e-03f, -4.871377301e-03f, -4.876868902e-03f, -4.882351806e-03f, -4.887826003e-03f,
--4.893291485e-03f, -4.898748242e-03f, -4.904196265e-03f, -4.909635545e-03f, -4.915066074e-03f, -4.920487842e-03f, -4.925900841e-03f, -4.931305061e-03f, -4.936700494e-03f, -4.942087130e-03f,
--4.947464962e-03f, -4.952833979e-03f, -4.958194174e-03f, -4.963545537e-03f, -4.968888059e-03f, -4.974221732e-03f, -4.979546547e-03f, -4.984862496e-03f, -4.990169569e-03f, -4.995467757e-03f,
--5.000757052e-03f, -5.006037446e-03f, -5.011308929e-03f, -5.016571494e-03f, -5.021825130e-03f, -5.027069830e-03f, -5.032305586e-03f, -5.037532387e-03f, -5.042750227e-03f, -5.047959095e-03f,
--5.053158984e-03f, -5.058349886e-03f, -5.063531791e-03f, -5.068704691e-03f, -5.073868578e-03f, -5.079023443e-03f, -5.084169277e-03f, -5.089306073e-03f, -5.094433822e-03f, -5.099552515e-03f,
--5.104662143e-03f, -5.109762700e-03f, -5.114854176e-03f, -5.119936562e-03f, -5.125009851e-03f, -5.130074035e-03f, -5.135129104e-03f, -5.140175051e-03f, -5.145211867e-03f, -5.150239545e-03f,
--5.155258075e-03f, -5.160267450e-03f, -5.165267661e-03f, -5.170258701e-03f, -5.175240560e-03f, -5.180213232e-03f, -5.185176707e-03f, -5.190130978e-03f, -5.195076037e-03f, -5.200011875e-03f,
--5.204938484e-03f, -5.209855857e-03f, -5.214763985e-03f, -5.219662861e-03f, -5.224552475e-03f, -5.229432821e-03f, -5.234303890e-03f, -5.239165675e-03f, -5.244018166e-03f, -5.248861358e-03f,
--5.253695241e-03f, -5.258519807e-03f, -5.263335049e-03f, -5.268140960e-03f, -5.272937530e-03f, -5.277724752e-03f, -5.282502619e-03f, -5.287271123e-03f, -5.292030255e-03f, -5.296780009e-03f,
--5.301520375e-03f, -5.306251348e-03f, -5.310972918e-03f, -5.315685079e-03f, -5.320387822e-03f, -5.325081140e-03f, -5.329765025e-03f, -5.334439470e-03f, -5.339104467e-03f, -5.343760008e-03f,
--5.348406086e-03f, -5.353042693e-03f, -5.357669822e-03f, -5.362287465e-03f, -5.366895614e-03f, -5.371494263e-03f, -5.376083404e-03f, -5.380663029e-03f, -5.385233130e-03f, -5.389793701e-03f,
--5.394344734e-03f, -5.398886221e-03f, -5.403418156e-03f, -5.407940530e-03f, -5.412453337e-03f, -5.416956569e-03f, -5.421450219e-03f, -5.425934279e-03f, -5.430408743e-03f, -5.434873603e-03f,
--5.439328851e-03f, -5.443774481e-03f, -5.448210485e-03f, -5.452636856e-03f, -5.457053588e-03f, -5.461460672e-03f, -5.465858102e-03f, -5.470245870e-03f, -5.474623970e-03f, -5.478992394e-03f,
--5.483351135e-03f, -5.487700187e-03f, -5.492039541e-03f, -5.496369192e-03f, -5.500689132e-03f, -5.504999355e-03f, -5.509299852e-03f, -5.513590618e-03f, -5.517871645e-03f, -5.522142926e-03f,
--5.526404455e-03f, -5.530656225e-03f, -5.534898228e-03f, -5.539130458e-03f, -5.543352908e-03f, -5.547565572e-03f, -5.551768442e-03f, -5.555961511e-03f, -5.560144774e-03f, -5.564318222e-03f,
--5.568481850e-03f, -5.572635651e-03f, -5.576779618e-03f, -5.580913744e-03f, -5.585038023e-03f, -5.589152448e-03f, -5.593257013e-03f, -5.597351710e-03f, -5.601436533e-03f, -5.605511476e-03f,
--5.609576533e-03f, -5.613631695e-03f, -5.617676958e-03f, -5.621712315e-03f, -5.625737758e-03f, -5.629753282e-03f, -5.633758880e-03f, -5.637754546e-03f, -5.641740273e-03f, -5.645716056e-03f,
--5.649681886e-03f, -5.653637759e-03f, -5.657583668e-03f, -5.661519606e-03f, -5.665445567e-03f, -5.669361545e-03f, -5.673267534e-03f, -5.677163527e-03f, -5.681049518e-03f, -5.684925501e-03f,
--5.688791470e-03f, -5.692647418e-03f, -5.696493340e-03f, -5.700329229e-03f, -5.704155078e-03f, -5.707970883e-03f, -5.711776637e-03f, -5.715572333e-03f, -5.719357966e-03f, -5.723133530e-03f,
--5.726899018e-03f, -5.730654425e-03f, -5.734399744e-03f, -5.738134970e-03f, -5.741860097e-03f, -5.745575118e-03f, -5.749280029e-03f, -5.752974822e-03f, -5.756659492e-03f, -5.760334033e-03f,
--5.763998440e-03f, -5.767652706e-03f, -5.771296826e-03f, -5.774930793e-03f, -5.778554603e-03f, -5.782168249e-03f, -5.785771726e-03f, -5.789365027e-03f, -5.792948148e-03f, -5.796521082e-03f,
--5.800083824e-03f, -5.803636367e-03f, -5.807178708e-03f, -5.810710839e-03f, -5.814232756e-03f, -5.817744452e-03f, -5.821245922e-03f, -5.824737161e-03f, -5.828218163e-03f, -5.831688923e-03f,
--5.835149434e-03f, -5.838599692e-03f, -5.842039691e-03f, -5.845469426e-03f, -5.848888891e-03f, -5.852298081e-03f, -5.855696991e-03f, -5.859085614e-03f, -5.862463946e-03f, -5.865831982e-03f,
--5.869189716e-03f, -5.872537142e-03f, -5.875874256e-03f, -5.879201053e-03f, -5.882517526e-03f, -5.885823671e-03f, -5.889119483e-03f, -5.892404956e-03f, -5.895680086e-03f, -5.898944866e-03f,
--5.902199293e-03f, -5.905443360e-03f, -5.908677064e-03f, -5.911900397e-03f, -5.915113357e-03f, -5.918315937e-03f, -5.921508132e-03f, -5.924689939e-03f, -5.927861350e-03f, -5.931022363e-03f,
--5.934172971e-03f, -5.937313169e-03f, -5.940442954e-03f, -5.943562319e-03f, -5.946671261e-03f, -5.949769773e-03f, -5.952857852e-03f, -5.955935493e-03f, -5.959002690e-03f, -5.962059439e-03f,
--5.965105735e-03f, -5.968141574e-03f, -5.971166950e-03f, -5.974181859e-03f, -5.977186297e-03f, -5.980180258e-03f, -5.983163738e-03f, -5.986136732e-03f, -5.989099236e-03f, -5.992051245e-03f,
--5.994992755e-03f, -5.997923760e-03f, -6.000844257e-03f, -6.003754241e-03f, -6.006653707e-03f, -6.009542651e-03f, -6.012421068e-03f, -6.015288954e-03f, -6.018146305e-03f, -6.020993116e-03f,
--6.023829382e-03f, -6.026655100e-03f, -6.029470264e-03f, -6.032274871e-03f, -6.035068917e-03f, -6.037852396e-03f, -6.040625305e-03f, -6.043387639e-03f, -6.046139394e-03f, -6.048880567e-03f,
--6.051611152e-03f, -6.054331145e-03f, -6.057040543e-03f, -6.059739341e-03f, -6.062427535e-03f, -6.065105120e-03f, -6.067772094e-03f, -6.070428451e-03f, -6.073074188e-03f, -6.075709300e-03f,
--6.078333784e-03f, -6.080947636e-03f, -6.083550850e-03f, -6.086143425e-03f, -6.088725355e-03f, -6.091296637e-03f, -6.093857266e-03f, -6.096407240e-03f, -6.098946553e-03f, -6.101475202e-03f,
--6.103993184e-03f, -6.106500494e-03f, -6.108997129e-03f, -6.111483085e-03f, -6.113958357e-03f, -6.116422943e-03f, -6.118876839e-03f, -6.121320040e-03f, -6.123752543e-03f, -6.126174346e-03f,
--6.128585442e-03f, -6.130985830e-03f, -6.133375506e-03f, -6.135754466e-03f, -6.138122706e-03f, -6.140480223e-03f, -6.142827013e-03f, -6.145163073e-03f, -6.147488399e-03f, -6.149802988e-03f,
--6.152106836e-03f, -6.154399940e-03f, -6.156682296e-03f, -6.158953902e-03f, -6.161214753e-03f, -6.163464846e-03f, -6.165704178e-03f, -6.167932746e-03f, -6.170150545e-03f, -6.172357574e-03f,
--6.174553828e-03f, -6.176739305e-03f, -6.178914001e-03f, -6.181077912e-03f, -6.183231036e-03f, -6.185373370e-03f, -6.187504910e-03f, -6.189625653e-03f, -6.191735597e-03f, -6.193834737e-03f,
--6.195923071e-03f, -6.198000595e-03f, -6.200067308e-03f, -6.202123205e-03f, -6.204168283e-03f, -6.206202541e-03f, -6.208225973e-03f, -6.210238579e-03f, -6.212240354e-03f, -6.214231296e-03f,
--6.216211402e-03f, -6.218180669e-03f, -6.220139094e-03f, -6.222086675e-03f, -6.224023407e-03f, -6.225949290e-03f, -6.227864319e-03f, -6.229768493e-03f, -6.231661807e-03f, -6.233544261e-03f,
--6.235415850e-03f, -6.237276572e-03f, -6.239126425e-03f, -6.240965406e-03f, -6.242793512e-03f, -6.244610740e-03f, -6.246417088e-03f, -6.248212554e-03f, -6.249997134e-03f, -6.251770827e-03f,
--6.253533630e-03f, -6.255285539e-03f, -6.257026554e-03f, -6.258756670e-03f, -6.260475887e-03f, -6.262184201e-03f, -6.263881610e-03f, -6.265568111e-03f, -6.267243702e-03f, -6.268908382e-03f,
--6.270562147e-03f, -6.272204995e-03f, -6.273836923e-03f, -6.275457931e-03f, -6.277068015e-03f, -6.278667172e-03f, -6.280255402e-03f, -6.281832701e-03f, -6.283399068e-03f, -6.284954500e-03f,
--6.286498995e-03f, -6.288032551e-03f, -6.289555166e-03f, -6.291066838e-03f, -6.292567565e-03f, -6.294057344e-03f, -6.295536174e-03f, -6.297004052e-03f, -6.298460977e-03f, -6.299906947e-03f,
--6.301341960e-03f, -6.302766013e-03f, -6.304179105e-03f, -6.305581234e-03f, -6.306972398e-03f, -6.308352595e-03f, -6.309721823e-03f, -6.311080081e-03f, -6.312427367e-03f, -6.313763678e-03f,
--6.315089014e-03f, -6.316403372e-03f, -6.317706751e-03f, -6.318999149e-03f, -6.320280564e-03f, -6.321550994e-03f, -6.322810439e-03f, -6.324058895e-03f, -6.325296363e-03f, -6.326522839e-03f,
--6.327738323e-03f, -6.328942813e-03f, -6.330136308e-03f, -6.331318805e-03f, -6.332490303e-03f, -6.333650802e-03f, -6.334800299e-03f, -6.335938793e-03f, -6.337066282e-03f, -6.338182766e-03f,
--6.339288242e-03f, -6.340382710e-03f, -6.341466168e-03f, -6.342538615e-03f, -6.343600049e-03f, -6.344650469e-03f, -6.345689874e-03f, -6.346718262e-03f, -6.347735633e-03f, -6.348741985e-03f,
--6.349737317e-03f, -6.350721628e-03f, -6.351694916e-03f, -6.352657181e-03f, -6.353608421e-03f, -6.354548636e-03f, -6.355477823e-03f, -6.356395983e-03f, -6.357303114e-03f, -6.358199215e-03f,
--6.359084284e-03f, -6.359958322e-03f, -6.360821327e-03f, -6.361673298e-03f, -6.362514235e-03f, -6.363344135e-03f, -6.364162999e-03f, -6.364970826e-03f, -6.365767614e-03f, -6.366553363e-03f,
--6.367328072e-03f, -6.368091740e-03f, -6.368844367e-03f, -6.369585952e-03f, -6.370316493e-03f, -6.371035991e-03f, -6.371744444e-03f, -6.372441852e-03f, -6.373128214e-03f, -6.373803530e-03f,
--6.374467799e-03f, -6.375121020e-03f, -6.375763193e-03f, -6.376394317e-03f, -6.377014391e-03f, -6.377623416e-03f, -6.378221391e-03f, -6.378808314e-03f, -6.379384186e-03f, -6.379949007e-03f,
--6.380502775e-03f, -6.381045490e-03f, -6.381577152e-03f, -6.382097761e-03f, -6.382607317e-03f, -6.383105818e-03f, -6.383593264e-03f, -6.384069656e-03f, -6.384534993e-03f, -6.384989275e-03f,
--6.385432501e-03f, -6.385864671e-03f, -6.386285786e-03f, -6.386695844e-03f, -6.387094846e-03f, -6.387482792e-03f, -6.387859681e-03f, -6.388225513e-03f, -6.388580289e-03f, -6.388924008e-03f,
--6.389256670e-03f, -6.389578275e-03f, -6.389888823e-03f, -6.390188315e-03f, -6.390476749e-03f, -6.390754127e-03f, -6.391020447e-03f, -6.391275712e-03f, -6.391519919e-03f, -6.391753070e-03f,
--6.391975165e-03f, -6.392186204e-03f, -6.392386187e-03f, -6.392575114e-03f, -6.392752985e-03f, -6.392919801e-03f, -6.393075562e-03f, -6.393220268e-03f, -6.393353920e-03f, -6.393476518e-03f,
--6.393588061e-03f, -6.393688552e-03f, -6.393777989e-03f, -6.393856373e-03f, -6.393923705e-03f, -6.393979985e-03f, -6.394025214e-03f, -6.394059392e-03f, -6.394082519e-03f, -6.394094596e-03f,
--6.394095624e-03f, -6.394085603e-03f, -6.394064533e-03f, -6.394032416e-03f, -6.393989252e-03f, -6.393935041e-03f, -6.393869784e-03f, -6.393793481e-03f, -6.393706134e-03f, -6.393607744e-03f,
--6.393498310e-03f, -6.393377833e-03f, -6.393246315e-03f, -6.393103756e-03f, -6.392950157e-03f, -6.392785518e-03f, -6.392609841e-03f, -6.392423126e-03f, -6.392225375e-03f, -6.392016587e-03f,
--6.391796765e-03f, -6.391565908e-03f, -6.391324019e-03f, -6.391071097e-03f, -6.390807144e-03f, -6.390532161e-03f, -6.390246148e-03f, -6.389949108e-03f, -6.389641040e-03f, -6.389321946e-03f,
--6.388991828e-03f, -6.388650685e-03f, -6.388298520e-03f, -6.387935333e-03f, -6.387561126e-03f, -6.387175900e-03f, -6.386779656e-03f, -6.386372395e-03f, -6.385954119e-03f, -6.385524829e-03f,
--6.385084525e-03f, -6.384633210e-03f, -6.384170885e-03f, -6.383697550e-03f, -6.383213208e-03f, -6.382717860e-03f, -6.382211507e-03f, -6.381694151e-03f, -6.381165792e-03f, -6.380626433e-03f,
--6.380076075e-03f, -6.379514720e-03f, -6.378942368e-03f, -6.378359022e-03f, -6.377764683e-03f, -6.377159352e-03f, -6.376543032e-03f, -6.375915723e-03f, -6.375277428e-03f, -6.374628148e-03f,
--6.373967885e-03f, -6.373296640e-03f, -6.372614415e-03f, -6.371921212e-03f, -6.371217033e-03f, -6.370501879e-03f, -6.369775752e-03f, -6.369038653e-03f, -6.368290586e-03f, -6.367531551e-03f,
--6.366761551e-03f, -6.365980586e-03f, -6.365188660e-03f, -6.364385774e-03f, -6.363571930e-03f, -6.362747130e-03f, -6.361911376e-03f, -6.361064670e-03f, -6.360207013e-03f, -6.359338409e-03f,
--6.358458858e-03f, -6.357568364e-03f, -6.356666927e-03f, -6.355754551e-03f, -6.354831237e-03f, -6.353896987e-03f, -6.352951804e-03f, -6.351995690e-03f, -6.351028646e-03f, -6.350050676e-03f,
--6.349061781e-03f, -6.348061964e-03f, -6.347051227e-03f, -6.346029571e-03f, -6.344997001e-03f, -6.343953517e-03f, -6.342899122e-03f, -6.341833819e-03f, -6.340757609e-03f, -6.339670496e-03f,
--6.338572482e-03f, -6.337463568e-03f, -6.336343758e-03f, -6.335213055e-03f, -6.334071460e-03f, -6.332918975e-03f, -6.331755605e-03f, -6.330581350e-03f, -6.329396214e-03f, -6.328200200e-03f,
--6.326993309e-03f, -6.325775545e-03f, -6.324546910e-03f, -6.323307407e-03f, -6.322057038e-03f, -6.320795806e-03f, -6.319523714e-03f, -6.318240765e-03f, -6.316946961e-03f, -6.315642306e-03f,
--6.314326801e-03f, -6.313000450e-03f, -6.311663255e-03f, -6.310315220e-03f, -6.308956347e-03f, -6.307586639e-03f, -6.306206099e-03f, -6.304814731e-03f, -6.303412536e-03f, -6.301999518e-03f,
--6.300575679e-03f, -6.299141024e-03f, -6.297695554e-03f, -6.296239274e-03f, -6.294772185e-03f, -6.293294291e-03f, -6.291805595e-03f, -6.290306100e-03f, -6.288795810e-03f, -6.287274727e-03f,
--6.285742855e-03f, -6.284200196e-03f, -6.282646754e-03f, -6.281082533e-03f, -6.279507535e-03f, -6.277921764e-03f, -6.276325222e-03f, -6.274717914e-03f, -6.273099842e-03f, -6.271471010e-03f,
--6.269831421e-03f, -6.268181079e-03f, -6.266519987e-03f, -6.264848148e-03f, -6.263165566e-03f, -6.261472244e-03f, -6.259768186e-03f, -6.258053395e-03f, -6.256327874e-03f, -6.254591628e-03f,
--6.252844659e-03f, -6.251086972e-03f, -6.249318569e-03f, -6.247539454e-03f, -6.245749632e-03f, -6.243949105e-03f, -6.242137877e-03f, -6.240315952e-03f, -6.238483334e-03f, -6.236640026e-03f,
--6.234786032e-03f, -6.232921355e-03f, -6.231046000e-03f, -6.229159970e-03f, -6.227263269e-03f, -6.225355901e-03f, -6.223437869e-03f, -6.221509178e-03f, -6.219569831e-03f, -6.217619833e-03f,
--6.215659186e-03f, -6.213687895e-03f, -6.211705964e-03f, -6.209713397e-03f, -6.207710198e-03f, -6.205696371e-03f, -6.203671920e-03f, -6.201636848e-03f, -6.199591160e-03f, -6.197534860e-03f,
--6.195467952e-03f, -6.193390440e-03f, -6.191302329e-03f, -6.189203621e-03f, -6.187094323e-03f, -6.184974436e-03f, -6.182843967e-03f, -6.180702919e-03f, -6.178551296e-03f, -6.176389102e-03f,
--6.174216342e-03f, -6.172033020e-03f, -6.169839141e-03f, -6.167634708e-03f, -6.165419726e-03f, -6.163194200e-03f, -6.160958133e-03f, -6.158711530e-03f, -6.156454395e-03f, -6.154186734e-03f,
--6.151908549e-03f, -6.149619847e-03f, -6.147320631e-03f, -6.145010905e-03f, -6.142690675e-03f, -6.140359944e-03f, -6.138018718e-03f, -6.135667000e-03f, -6.133304796e-03f, -6.130932110e-03f,
--6.128548947e-03f, -6.126155311e-03f, -6.123751207e-03f, -6.121336640e-03f, -6.118911613e-03f, -6.116476133e-03f, -6.114030204e-03f, -6.111573830e-03f, -6.109107016e-03f, -6.106629767e-03f,
--6.104142088e-03f, -6.101643984e-03f, -6.099135459e-03f, -6.096616519e-03f, -6.094087167e-03f, -6.091547410e-03f, -6.088997251e-03f, -6.086436696e-03f, -6.083865751e-03f, -6.081284418e-03f,
--6.078692705e-03f, -6.076090615e-03f, -6.073478154e-03f, -6.070855327e-03f, -6.068222139e-03f, -6.065578594e-03f, -6.062924698e-03f, -6.060260457e-03f, -6.057585874e-03f, -6.054900956e-03f,
--6.052205707e-03f, -6.049500132e-03f, -6.046784238e-03f, -6.044058028e-03f, -6.041321509e-03f, -6.038574685e-03f, -6.035817561e-03f, -6.033050144e-03f, -6.030272437e-03f, -6.027484448e-03f,
--6.024686180e-03f, -6.021877639e-03f, -6.019058831e-03f, -6.016229761e-03f, -6.013390434e-03f, -6.010540856e-03f, -6.007681032e-03f, -6.004810967e-03f, -6.001930668e-03f, -5.999040139e-03f,
--5.996139386e-03f, -5.993228415e-03f, -5.990307231e-03f, -5.987375840e-03f, -5.984434246e-03f, -5.981482457e-03f, -5.978520477e-03f, -5.975548312e-03f, -5.972565968e-03f, -5.969573449e-03f,
--5.966570763e-03f, -5.963557915e-03f, -5.960534910e-03f, -5.957501754e-03f, -5.954458453e-03f, -5.951405013e-03f, -5.948341439e-03f, -5.945267737e-03f, -5.942183913e-03f, -5.939089973e-03f,
--5.935985922e-03f, -5.932871767e-03f, -5.929747514e-03f, -5.926613167e-03f, -5.923468734e-03f, -5.920314220e-03f, -5.917149632e-03f, -5.913974974e-03f, -5.910790253e-03f, -5.907595475e-03f,
--5.904390646e-03f, -5.901175773e-03f, -5.897950860e-03f, -5.894715915e-03f, -5.891470943e-03f, -5.888215950e-03f, -5.884950943e-03f, -5.881675927e-03f, -5.878390909e-03f, -5.875095895e-03f,
--5.871790891e-03f, -5.868475904e-03f, -5.865150939e-03f, -5.861816003e-03f, -5.858471102e-03f, -5.855116242e-03f, -5.851751430e-03f, -5.848376671e-03f, -5.844991973e-03f, -5.841597342e-03f,
--5.838192783e-03f, -5.834778304e-03f, -5.831353910e-03f, -5.827919609e-03f, -5.824475406e-03f, -5.821021308e-03f, -5.817557321e-03f, -5.814083452e-03f, -5.810599707e-03f, -5.807106094e-03f,
--5.803602618e-03f, -5.800089285e-03f, -5.796566103e-03f, -5.793033078e-03f, -5.789490217e-03f, -5.785937526e-03f, -5.782375012e-03f, -5.778802682e-03f, -5.775220541e-03f, -5.771628598e-03f,
--5.768026858e-03f, -5.764415328e-03f, -5.760794015e-03f, -5.757162926e-03f, -5.753522068e-03f, -5.749871446e-03f, -5.746211069e-03f, -5.742540942e-03f, -5.738861073e-03f, -5.735171468e-03f,
--5.731472135e-03f, -5.727763080e-03f, -5.724044310e-03f, -5.720315833e-03f, -5.716577654e-03f, -5.712829780e-03f, -5.709072220e-03f, -5.705304980e-03f, -5.701528066e-03f, -5.697741486e-03f,
--5.693945246e-03f, -5.690139355e-03f, -5.686323818e-03f, -5.682498644e-03f, -5.678663838e-03f, -5.674819409e-03f, -5.670965362e-03f, -5.667101707e-03f, -5.663228448e-03f, -5.659345595e-03f,
--5.655453153e-03f, -5.651551130e-03f, -5.647639533e-03f, -5.643718371e-03f, -5.639787648e-03f, -5.635847374e-03f, -5.631897555e-03f, -5.627938199e-03f, -5.623969312e-03f, -5.619990903e-03f,
--5.616002979e-03f, -5.612005546e-03f, -5.607998613e-03f, -5.603982186e-03f, -5.599956273e-03f, -5.595920882e-03f, -5.591876020e-03f, -5.587821695e-03f, -5.583757913e-03f, -5.579684682e-03f,
--5.575602011e-03f, -5.571509906e-03f, -5.567408375e-03f, -5.563297425e-03f, -5.559177064e-03f, -5.555047300e-03f, -5.550908141e-03f, -5.546759593e-03f, -5.542601665e-03f, -5.538434363e-03f,
--5.534257697e-03f, -5.530071673e-03f, -5.525876299e-03f, -5.521671583e-03f, -5.517457533e-03f, -5.513234156e-03f, -5.509001460e-03f, -5.504759453e-03f, -5.500508143e-03f, -5.496247537e-03f,
--5.491977643e-03f, -5.487698470e-03f, -5.483410024e-03f, -5.479112314e-03f, -5.474805348e-03f, -5.470489134e-03f, -5.466163679e-03f, -5.461828992e-03f, -5.457485080e-03f, -5.453131951e-03f,
--5.448769614e-03f, -5.444398076e-03f, -5.440017345e-03f, -5.435627430e-03f, -5.431228338e-03f, -5.426820078e-03f, -5.422402657e-03f, -5.417976084e-03f, -5.413540366e-03f, -5.409095512e-03f,
--5.404641531e-03f, -5.400178429e-03f, -5.395706215e-03f, -5.391224898e-03f, -5.386734486e-03f, -5.382234986e-03f, -5.377726408e-03f, -5.373208759e-03f, -5.368682047e-03f, -5.364146281e-03f,
--5.359601469e-03f, -5.355047620e-03f, -5.350484741e-03f, -5.345912841e-03f, -5.341331929e-03f, -5.336742012e-03f, -5.332143100e-03f, -5.327535200e-03f, -5.322918321e-03f, -5.318292471e-03f,
--5.313657659e-03f, -5.309013893e-03f, -5.304361182e-03f, -5.299699534e-03f, -5.295028958e-03f, -5.290349462e-03f, -5.285661054e-03f, -5.280963744e-03f, -5.276257540e-03f, -5.271542449e-03f,
--5.266818482e-03f, -5.262085647e-03f, -5.257343951e-03f, -5.252593404e-03f, -5.247834015e-03f, -5.243065792e-03f, -5.238288743e-03f, -5.233502878e-03f, -5.228708205e-03f, -5.223904733e-03f,
--5.219092471e-03f, -5.214271427e-03f, -5.209441610e-03f, -5.204603028e-03f, -5.199755692e-03f, -5.194899609e-03f, -5.190034788e-03f, -5.185161239e-03f, -5.180278969e-03f, -5.175387989e-03f,
--5.170488306e-03f, -5.165579929e-03f, -5.160662869e-03f, -5.155737132e-03f, -5.150802730e-03f, -5.145859669e-03f, -5.140907960e-03f, -5.135947611e-03f, -5.130978631e-03f, -5.126001030e-03f,
--5.121014816e-03f, -5.116019999e-03f, -5.111016586e-03f, -5.106004589e-03f, -5.100984015e-03f, -5.095954873e-03f, -5.090917174e-03f, -5.085870925e-03f, -5.080816137e-03f, -5.075752817e-03f,
--5.070680976e-03f, -5.065600623e-03f, -5.060511766e-03f, -5.055414416e-03f, -5.050308580e-03f, -5.045194269e-03f, -5.040071492e-03f, -5.034940257e-03f, -5.029800575e-03f, -5.024652455e-03f,
--5.019495905e-03f, -5.014330936e-03f, -5.009157556e-03f, -5.003975774e-03f, -4.998785602e-03f, -4.993587046e-03f, -4.988380118e-03f, -4.983164826e-03f, -4.977941180e-03f, -4.972709190e-03f,
--4.967468864e-03f, -4.962220212e-03f, -4.956963244e-03f, -4.951697969e-03f, -4.946424397e-03f, -4.941142537e-03f, -4.935852399e-03f, -4.930553992e-03f, -4.925247326e-03f, -4.919932410e-03f,
--4.914609254e-03f, -4.909277868e-03f, -4.903938261e-03f, -4.898590443e-03f, -4.893234424e-03f, -4.887870213e-03f, -4.882497819e-03f, -4.877117254e-03f, -4.871728525e-03f, -4.866331643e-03f,
--4.860926618e-03f, -4.855513460e-03f, -4.850092177e-03f, -4.844662781e-03f, -4.839225280e-03f, -4.833779685e-03f, -4.828326005e-03f, -4.822864250e-03f, -4.817394430e-03f, -4.811916555e-03f,
--4.806430635e-03f, -4.800936679e-03f, -4.795434697e-03f, -4.789924700e-03f, -4.784406698e-03f, -4.778880699e-03f, -4.773346715e-03f, -4.767804754e-03f, -4.762254828e-03f, -4.756696946e-03f,
--4.751131118e-03f, -4.745557354e-03f, -4.739975664e-03f, -4.734386058e-03f, -4.728788546e-03f, -4.723183138e-03f, -4.717569845e-03f, -4.711948676e-03f, -4.706319642e-03f, -4.700682752e-03f,
--4.695038017e-03f, -4.689385446e-03f, -4.683725051e-03f, -4.678056841e-03f, -4.672380826e-03f, -4.666697017e-03f, -4.661005423e-03f, -4.655306056e-03f, -4.649598925e-03f, -4.643884040e-03f,
--4.638161412e-03f, -4.632431050e-03f, -4.626692966e-03f, -4.620947170e-03f, -4.615193672e-03f, -4.609432481e-03f, -4.603663609e-03f, -4.597887066e-03f, -4.592102863e-03f, -4.586311008e-03f,
--4.580511514e-03f, -4.574704390e-03f, -4.568889647e-03f, -4.563067295e-03f, -4.557237345e-03f, -4.551399807e-03f, -4.545554691e-03f, -4.539702009e-03f, -4.533841770e-03f, -4.527973985e-03f,
--4.522098664e-03f, -4.516215818e-03f, -4.510325458e-03f, -4.504427595e-03f, -4.498522237e-03f, -4.492609397e-03f, -4.486689085e-03f, -4.480761312e-03f, -4.474826087e-03f, -4.468883422e-03f,
--4.462933328e-03f, -4.456975814e-03f, -4.451010892e-03f, -4.445038572e-03f, -4.439058865e-03f, -4.433071782e-03f, -4.427077333e-03f, -4.421075529e-03f, -4.415066382e-03f, -4.409049900e-03f,
--4.403026096e-03f, -4.396994980e-03f, -4.390956563e-03f, -4.384910856e-03f, -4.378857869e-03f, -4.372797613e-03f, -4.366730100e-03f, -4.360655339e-03f, -4.354573343e-03f, -4.348484121e-03f,
--4.342387684e-03f, -4.336284044e-03f, -4.330173211e-03f, -4.324055197e-03f, -4.317930012e-03f, -4.311797667e-03f, -4.305658173e-03f, -4.299511541e-03f, -4.293357782e-03f, -4.287196907e-03f,
--4.281028927e-03f, -4.274853853e-03f, -4.268671696e-03f, -4.262482467e-03f, -4.256286177e-03f, -4.250082837e-03f, -4.243872459e-03f, -4.237655053e-03f, -4.231430630e-03f, -4.225199201e-03f,
--4.218960779e-03f, -4.212715372e-03f, -4.206462994e-03f, -4.200203655e-03f, -4.193937366e-03f, -4.187664138e-03f, -4.181383983e-03f, -4.175096911e-03f, -4.168802935e-03f, -4.162502064e-03f,
--4.156194311e-03f, -4.149879686e-03f, -4.143558202e-03f, -4.137229868e-03f, -4.130894697e-03f, -4.124552699e-03f, -4.118203886e-03f, -4.111848270e-03f, -4.105485861e-03f, -4.099116671e-03f,
--4.092740711e-03f, -4.086357993e-03f, -4.079968527e-03f, -4.073572326e-03f, -4.067169401e-03f, -4.060759763e-03f, -4.054343423e-03f, -4.047920393e-03f, -4.041490685e-03f, -4.035054309e-03f,
--4.028611278e-03f, -4.022161602e-03f, -4.015705294e-03f, -4.009242364e-03f, -4.002772824e-03f, -3.996296686e-03f, -3.989813961e-03f, -3.983324661e-03f, -3.976828797e-03f, -3.970326381e-03f,
--3.963817424e-03f, -3.957301938e-03f, -3.950779934e-03f, -3.944251425e-03f, -3.937716421e-03f, -3.931174935e-03f, -3.924626977e-03f, -3.918072560e-03f, -3.911511695e-03f, -3.904944394e-03f,
--3.898370669e-03f, -3.891790530e-03f, -3.885203991e-03f, -3.878611062e-03f, -3.872011755e-03f, -3.865406083e-03f, -3.858794056e-03f, -3.852175686e-03f, -3.845550986e-03f, -3.838919966e-03f,
--3.832282640e-03f, -3.825639018e-03f, -3.818989112e-03f, -3.812332934e-03f, -3.805670496e-03f, -3.799001810e-03f, -3.792326888e-03f, -3.785645740e-03f, -3.778958381e-03f, -3.772264820e-03f,
--3.765565070e-03f, -3.758859143e-03f, -3.752147051e-03f, -3.745428805e-03f, -3.738704418e-03f, -3.731973902e-03f, -3.725237268e-03f, -3.718494528e-03f, -3.711745694e-03f, -3.704990779e-03f,
--3.698229794e-03f, -3.691462752e-03f, -3.684689663e-03f, -3.677910541e-03f, -3.671125397e-03f, -3.664334243e-03f, -3.657537092e-03f, -3.650733955e-03f, -3.643924844e-03f, -3.637109772e-03f,
--3.630288750e-03f, -3.623461790e-03f, -3.616628906e-03f, -3.609790108e-03f, -3.602945409e-03f, -3.596094821e-03f, -3.589238356e-03f, -3.582376027e-03f, -3.575507844e-03f, -3.568633822e-03f,
--3.561753971e-03f, -3.554868304e-03f, -3.547976833e-03f, -3.541079570e-03f, -3.534176528e-03f, -3.527267719e-03f, -3.520353154e-03f, -3.513432847e-03f, -3.506506809e-03f, -3.499575052e-03f,
--3.492637590e-03f, -3.485694434e-03f, -3.478745596e-03f, -3.471791089e-03f, -3.464830925e-03f, -3.457865116e-03f, -3.450893675e-03f, -3.443916613e-03f, -3.436933945e-03f, -3.429945680e-03f,
--3.422951833e-03f, -3.415952415e-03f, -3.408947439e-03f, -3.401936917e-03f, -3.394920862e-03f, -3.387899285e-03f, -3.380872199e-03f, -3.373839618e-03f, -3.366801552e-03f, -3.359758015e-03f,
--3.352709019e-03f, -3.345654577e-03f, -3.338594700e-03f, -3.331529402e-03f, -3.324458694e-03f, -3.317382590e-03f, -3.310301102e-03f, -3.303214242e-03f, -3.296122022e-03f, -3.289024457e-03f,
--3.281921557e-03f, -3.274813335e-03f, -3.267699805e-03f, -3.260580978e-03f, -3.253456867e-03f, -3.246327484e-03f, -3.239192843e-03f, -3.232052956e-03f, -3.224907835e-03f, -3.217757493e-03f,
--3.210601943e-03f, -3.203441197e-03f, -3.196275268e-03f, -3.189104168e-03f, -3.181927910e-03f, -3.174746508e-03f, -3.167559972e-03f, -3.160368317e-03f, -3.153171555e-03f, -3.145969698e-03f,
--3.138762760e-03f, -3.131550752e-03f, -3.124333688e-03f, -3.117111580e-03f, -3.109884442e-03f, -3.102652285e-03f, -3.095415123e-03f, -3.088172968e-03f, -3.080925833e-03f, -3.073673731e-03f,
--3.066416674e-03f, -3.059154676e-03f, -3.051887749e-03f, -3.044615906e-03f, -3.037339160e-03f, -3.030057523e-03f, -3.022771009e-03f, -3.015479630e-03f, -3.008183399e-03f, -3.000882329e-03f,
--2.993576433e-03f, -2.986265724e-03f, -2.978950214e-03f, -2.971629916e-03f, -2.964304844e-03f, -2.956975010e-03f, -2.949640427e-03f, -2.942301108e-03f, -2.934957066e-03f, -2.927608313e-03f,
--2.920254864e-03f, -2.912896730e-03f, -2.905533925e-03f, -2.898166461e-03f, -2.890794352e-03f, -2.883417610e-03f, -2.876036249e-03f, -2.868650281e-03f, -2.861259720e-03f, -2.853864579e-03f,
--2.846464869e-03f, -2.839060605e-03f, -2.831651800e-03f, -2.824238466e-03f, -2.816820617e-03f, -2.809398265e-03f, -2.801971424e-03f, -2.794540107e-03f, -2.787104326e-03f, -2.779664095e-03f,
--2.772219427e-03f, -2.764770336e-03f, -2.757316833e-03f, -2.749858932e-03f, -2.742396646e-03f, -2.734929989e-03f, -2.727458974e-03f, -2.719983613e-03f, -2.712503920e-03f, -2.705019907e-03f,
--2.697531589e-03f, -2.690038978e-03f, -2.682542087e-03f, -2.675040930e-03f, -2.667535519e-03f, -2.660025868e-03f, -2.652511991e-03f, -2.644993899e-03f, -2.637471607e-03f, -2.629945127e-03f,
--2.622414474e-03f, -2.614879659e-03f, -2.607340697e-03f, -2.599797600e-03f, -2.592250382e-03f, -2.584699056e-03f, -2.577143636e-03f, -2.569584133e-03f, -2.562020563e-03f, -2.554452938e-03f,
--2.546881270e-03f, -2.539305575e-03f, -2.531725864e-03f, -2.524142152e-03f, -2.516554451e-03f, -2.508962775e-03f, -2.501367137e-03f, -2.493767550e-03f, -2.486164028e-03f, -2.478556584e-03f,
--2.470945232e-03f, -2.463329984e-03f, -2.455710855e-03f, -2.448087857e-03f, -2.440461004e-03f, -2.432830309e-03f, -2.425195785e-03f, -2.417557447e-03f, -2.409915307e-03f, -2.402269378e-03f,
--2.394619675e-03f, -2.386966210e-03f, -2.379308998e-03f, -2.371648050e-03f, -2.363983382e-03f, -2.356315005e-03f, -2.348642935e-03f, -2.340967183e-03f, -2.333287764e-03f, -2.325604691e-03f,
--2.317917977e-03f, -2.310227636e-03f, -2.302533682e-03f, -2.294836127e-03f, -2.287134986e-03f, -2.279430271e-03f, -2.271721997e-03f, -2.264010177e-03f, -2.256294824e-03f, -2.248575951e-03f,
--2.240853573e-03f, -2.233127703e-03f, -2.225398354e-03f, -2.217665540e-03f, -2.209929275e-03f, -2.202189571e-03f, -2.194446443e-03f, -2.186699904e-03f, -2.178949967e-03f, -2.171196646e-03f,
--2.163439956e-03f, -2.155679908e-03f, -2.147916518e-03f, -2.140149797e-03f, -2.132379761e-03f, -2.124606423e-03f, -2.116829795e-03f, -2.109049893e-03f, -2.101266728e-03f, -2.093480316e-03f,
--2.085690670e-03f, -2.077897802e-03f, -2.070101728e-03f, -2.062302460e-03f, -2.054500012e-03f, -2.046694398e-03f, -2.038885631e-03f, -2.031073726e-03f, -2.023258695e-03f, -2.015440552e-03f,
--2.007619312e-03f, -1.999794987e-03f, -1.991967591e-03f, -1.984137139e-03f, -1.976303643e-03f, -1.968467118e-03f, -1.960627577e-03f, -1.952785034e-03f, -1.944939502e-03f, -1.937090995e-03f,
--1.929239528e-03f, -1.921385113e-03f, -1.913527764e-03f, -1.905667495e-03f, -1.897804320e-03f, -1.889938253e-03f, -1.882069307e-03f, -1.874197496e-03f, -1.866322833e-03f, -1.858445333e-03f,
--1.850565010e-03f, -1.842681876e-03f, -1.834795946e-03f, -1.826907234e-03f, -1.819015753e-03f, -1.811121517e-03f, -1.803224539e-03f, -1.795324835e-03f, -1.787422417e-03f, -1.779517298e-03f,
--1.771609494e-03f, -1.763699018e-03f, -1.755785883e-03f, -1.747870104e-03f, -1.739951694e-03f, -1.732030667e-03f, -1.724107036e-03f, -1.716180817e-03f, -1.708252022e-03f, -1.700320665e-03f,
--1.692386760e-03f, -1.684450321e-03f, -1.676511362e-03f, -1.668569896e-03f, -1.660625938e-03f, -1.652679502e-03f, -1.644730600e-03f, -1.636779248e-03f, -1.628825458e-03f, -1.620869246e-03f,
--1.612910623e-03f, -1.604949606e-03f, -1.596986207e-03f, -1.589020440e-03f, -1.581052319e-03f, -1.573081858e-03f, -1.565109071e-03f, -1.557133972e-03f, -1.549156574e-03f, -1.541176892e-03f,
--1.533194940e-03f, -1.525210731e-03f, -1.517224279e-03f, -1.509235599e-03f, -1.501244704e-03f, -1.493251607e-03f, -1.485256324e-03f, -1.477258867e-03f, -1.469259252e-03f, -1.461257491e-03f,
--1.453253599e-03f, -1.445247589e-03f, -1.437239476e-03f, -1.429229273e-03f, -1.421216995e-03f, -1.413202656e-03f, -1.405186268e-03f, -1.397167847e-03f, -1.389147406e-03f, -1.381124959e-03f,
--1.373100521e-03f, -1.365074104e-03f, -1.357045724e-03f, -1.349015394e-03f, -1.340983127e-03f, -1.332948939e-03f, -1.324912843e-03f, -1.316874852e-03f, -1.308834982e-03f, -1.300793246e-03f,
--1.292749657e-03f, -1.284704230e-03f, -1.276656980e-03f, -1.268607919e-03f, -1.260557062e-03f, -1.252504423e-03f, -1.244450016e-03f, -1.236393854e-03f, -1.228335953e-03f, -1.220276326e-03f,
--1.212214986e-03f, -1.204151948e-03f, -1.196087227e-03f, -1.188020835e-03f, -1.179952787e-03f, -1.171883098e-03f, -1.163811780e-03f, -1.155738849e-03f, -1.147664317e-03f, -1.139588200e-03f,
--1.131510511e-03f, -1.123431264e-03f, -1.115350473e-03f, -1.107268153e-03f, -1.099184317e-03f, -1.091098979e-03f, -1.083012154e-03f, -1.074923855e-03f, -1.066834096e-03f, -1.058742893e-03f,
--1.050650257e-03f, -1.042556205e-03f, -1.034460749e-03f, -1.026363904e-03f, -1.018265684e-03f, -1.010166102e-03f, -1.002065174e-03f, -9.939629124e-04f, -9.858593321e-04f, -9.777544469e-04f,
--9.696482710e-04f, -9.615408184e-04f, -9.534321031e-04f, -9.453221392e-04f, -9.372109409e-04f, -9.290985222e-04f, -9.209848971e-04f, -9.128700798e-04f, -9.047540843e-04f, -8.966369247e-04f,
--8.885186151e-04f, -8.803991696e-04f, -8.722786023e-04f, -8.641569272e-04f, -8.560341584e-04f, -8.479103101e-04f, -8.397853963e-04f, -8.316594311e-04f, -8.235324286e-04f, -8.154044029e-04f,
--8.072753681e-04f, -7.991453383e-04f, -7.910143276e-04f, -7.828823501e-04f, -7.747494198e-04f, -7.666155510e-04f, -7.584807576e-04f, -7.503450538e-04f, -7.422084537e-04f, -7.340709714e-04f,
--7.259326210e-04f, -7.177934166e-04f, -7.096533724e-04f, -7.015125023e-04f, -6.933708206e-04f, -6.852283413e-04f, -6.770850786e-04f, -6.689410465e-04f, -6.607962591e-04f, -6.526507307e-04f,
--6.445044752e-04f, -6.363575069e-04f, -6.282098397e-04f, -6.200614879e-04f, -6.119124655e-04f, -6.037627867e-04f, -5.956124655e-04f, -5.874615162e-04f, -5.793099527e-04f, -5.711577892e-04f,
--5.630050399e-04f, -5.548517188e-04f, -5.466978401e-04f, -5.385434178e-04f, -5.303884662e-04f, -5.222329993e-04f, -5.140770312e-04f, -5.059205760e-04f, -4.977636480e-04f, -4.896062611e-04f,
--4.814484295e-04f, -4.732901674e-04f, -4.651314887e-04f, -4.569724078e-04f, -4.488129386e-04f, -4.406530954e-04f, -4.324928921e-04f, -4.243323430e-04f, -4.161714621e-04f, -4.080102636e-04f,
--3.998487616e-04f, -3.916869702e-04f, -3.835249035e-04f, -3.753625757e-04f, -3.672000008e-04f, -3.590371930e-04f, -3.508741664e-04f, -3.427109350e-04f, -3.345475132e-04f, -3.263839148e-04f,
--3.182201541e-04f, -3.100562452e-04f, -3.018922021e-04f, -2.937280391e-04f, -2.855637701e-04f, -2.773994094e-04f, -2.692349710e-04f, -2.610704691e-04f, -2.529059177e-04f, -2.447413310e-04f,
--2.365767231e-04f, -2.284121080e-04f, -2.202475000e-04f, -2.120829130e-04f, -2.039183613e-04f, -1.957538589e-04f, -1.875894199e-04f, -1.794250584e-04f, -1.712607885e-04f, -1.630966244e-04f,
--1.549325802e-04f, -1.467686698e-04f, -1.386049075e-04f, -1.304413074e-04f, -1.222778834e-04f, -1.141146498e-04f, -1.059516207e-04f, -9.778881002e-05f, -8.962623199e-05f, -8.146390068e-05f,
--7.330183017e-05f, -6.514003455e-05f, -5.697852792e-05f, -4.881732437e-05f, -4.065643797e-05f, -3.249588282e-05f, -2.433567300e-05f, -1.617582260e-05f, -8.016345689e-06f, 1.427436401e-07f,
-8.301431311e-06f, 1.645970325e-05f, 2.461754537e-05f, 3.277494361e-05f, 4.093188388e-05f, 4.908835212e-05f, 5.724433425e-05f, 6.539981621e-05f, 7.355478393e-05f, 8.170922334e-05f,
-8.986312038e-05f, 9.801646098e-05f, 1.061692311e-04f, 1.143214166e-04f, 1.224730036e-04f, 1.306239778e-04f, 1.387743254e-04f, 1.469240321e-04f, 1.550730841e-04f, 1.632214671e-04f,
-1.713691672e-04f, 1.795161704e-04f, 1.876624626e-04f, 1.958080296e-04f, 2.039528576e-04f, 2.120969325e-04f, 2.202402402e-04f, 2.283827667e-04f, 2.365244980e-04f, 2.446654199e-04f,
-2.528055187e-04f, 2.609447800e-04f, 2.690831901e-04f, 2.772207348e-04f, 2.853574001e-04f, 2.934931720e-04f, 3.016280365e-04f, 3.097619796e-04f, 3.178949873e-04f, 3.260270455e-04f,
-3.341581403e-04f, 3.422882576e-04f, 3.504173835e-04f, 3.585455039e-04f, 3.666726049e-04f, 3.747986725e-04f, 3.829236926e-04f, 3.910476514e-04f, 3.991705347e-04f, 4.072923286e-04f,
-4.154130192e-04f, 4.235325925e-04f, 4.316510344e-04f, 4.397683310e-04f, 4.478844684e-04f, 4.559994325e-04f, 4.641132095e-04f, 4.722257853e-04f, 4.803371460e-04f, 4.884472776e-04f,
-4.965561663e-04f, 5.046637979e-04f, 5.127701586e-04f, 5.208752345e-04f, 5.289790115e-04f, 5.370814758e-04f, 5.451826134e-04f, 5.532824104e-04f, 5.613808529e-04f, 5.694779269e-04f,
-5.775736184e-04f, 5.856679137e-04f, 5.937607987e-04f, 6.018522596e-04f, 6.099422824e-04f, 6.180308533e-04f, 6.261179582e-04f, 6.342035834e-04f, 6.422877149e-04f, 6.503703389e-04f,
-6.584514413e-04f, 6.665310085e-04f, 6.746090263e-04f, 6.826854811e-04f, 6.907603588e-04f, 6.988336457e-04f, 7.069053279e-04f, 7.149753914e-04f, 7.230438224e-04f, 7.311106071e-04f,
-7.391757316e-04f, 7.472391820e-04f, 7.553009445e-04f, 7.633610053e-04f, 7.714193504e-04f, 7.794759661e-04f, 7.875308386e-04f, 7.955839539e-04f, 8.036352983e-04f, 8.116848579e-04f,
-8.197326190e-04f, 8.277785676e-04f, 8.358226901e-04f, 8.438649725e-04f, 8.519054010e-04f, 8.599439620e-04f, 8.679806415e-04f, 8.760154258e-04f, 8.840483010e-04f, 8.920792535e-04f,
-9.001082693e-04f, 9.081353348e-04f, 9.161604362e-04f, 9.241835596e-04f, 9.322046914e-04f, 9.402238177e-04f, 9.482409248e-04f, 9.562559990e-04f, 9.642690265e-04f, 9.722799935e-04f,
-9.802888863e-04f, 9.882956913e-04f, 9.963003945e-04f, 1.004302982e-03f, 1.012303441e-03f, 1.020301757e-03f, 1.028297916e-03f, 1.036291906e-03f, 1.044283711e-03f, 1.052273318e-03f,
-1.060260714e-03f, 1.068245885e-03f, 1.076228818e-03f, 1.084209498e-03f, 1.092187911e-03f, 1.100164045e-03f, 1.108137886e-03f, 1.116109419e-03f, 1.124078632e-03f, 1.132045510e-03f,
-1.140010040e-03f, 1.147972209e-03f, 1.155932002e-03f, 1.163889406e-03f, 1.171844407e-03f, 1.179796992e-03f, 1.187747147e-03f, 1.195694859e-03f, 1.203640113e-03f, 1.211582897e-03f,
-1.219523197e-03f, 1.227460998e-03f, 1.235396288e-03f, 1.243329053e-03f, 1.251259279e-03f, 1.259186953e-03f, 1.267112061e-03f, 1.275034589e-03f, 1.282954525e-03f, 1.290871854e-03f,
-1.298786563e-03f, 1.306698638e-03f, 1.314608066e-03f, 1.322514834e-03f, 1.330418927e-03f, 1.338320332e-03f, 1.346219036e-03f, 1.354115025e-03f, 1.362008286e-03f, 1.369898805e-03f,
-1.377786569e-03f, 1.385671564e-03f, 1.393553777e-03f, 1.401433193e-03f, 1.409309801e-03f, 1.417183586e-03f, 1.425054534e-03f, 1.432922633e-03f, 1.440787869e-03f, 1.448650228e-03f,
-1.456509697e-03f, 1.464366262e-03f, 1.472219911e-03f, 1.480070629e-03f, 1.487918404e-03f, 1.495763222e-03f, 1.503605068e-03f, 1.511443931e-03f, 1.519279797e-03f, 1.527112652e-03f,
-1.534942482e-03f, 1.542769275e-03f, 1.550593017e-03f, 1.558413695e-03f, 1.566231296e-03f, 1.574045805e-03f, 1.581857210e-03f, 1.589665497e-03f, 1.597470653e-03f, 1.605272665e-03f,
-1.613071519e-03f, 1.620867202e-03f, 1.628659700e-03f, 1.636449001e-03f, 1.644235092e-03f, 1.652017957e-03f, 1.659797586e-03f, 1.667573963e-03f, 1.675347077e-03f, 1.683116913e-03f,
-1.690883458e-03f, 1.698646700e-03f, 1.706406624e-03f, 1.714163218e-03f, 1.721916469e-03f, 1.729666362e-03f, 1.737412886e-03f, 1.745156026e-03f, 1.752895769e-03f, 1.760632103e-03f,
-1.768365014e-03f, 1.776094489e-03f, 1.783820515e-03f, 1.791543078e-03f, 1.799262165e-03f, 1.806977764e-03f, 1.814689860e-03f, 1.822398442e-03f, 1.830103495e-03f, 1.837805007e-03f,
-1.845502964e-03f, 1.853197353e-03f, 1.860888162e-03f, 1.868575377e-03f, 1.876258984e-03f, 1.883938972e-03f, 1.891615326e-03f, 1.899288034e-03f, 1.906957083e-03f, 1.914622459e-03f,
-1.922284150e-03f, 1.929942142e-03f, 1.937596423e-03f, 1.945246978e-03f, 1.952893796e-03f, 1.960536864e-03f, 1.968176167e-03f, 1.975811694e-03f, 1.983443431e-03f, 1.991071365e-03f,
-1.998695484e-03f, 2.006315773e-03f, 2.013932221e-03f, 2.021544814e-03f, 2.029153540e-03f, 2.036758385e-03f, 2.044359336e-03f, 2.051956381e-03f, 2.059549506e-03f, 2.067138699e-03f,
-2.074723946e-03f, 2.082305236e-03f, 2.089882554e-03f, 2.097455888e-03f, 2.105025225e-03f, 2.112590553e-03f, 2.120151857e-03f, 2.127709127e-03f, 2.135262347e-03f, 2.142811507e-03f,
-2.150356592e-03f, 2.157897591e-03f, 2.165434489e-03f, 2.172967275e-03f, 2.180495936e-03f, 2.188020458e-03f, 2.195540830e-03f, 2.203057037e-03f, 2.210569068e-03f, 2.218076910e-03f,
-2.225580549e-03f, 2.233079974e-03f, 2.240575171e-03f, 2.248066128e-03f, 2.255552831e-03f, 2.263035269e-03f, 2.270513428e-03f, 2.277987295e-03f, 2.285456859e-03f, 2.292922106e-03f,
-2.300383024e-03f, 2.307839599e-03f, 2.315291820e-03f, 2.322739674e-03f, 2.330183147e-03f, 2.337622228e-03f, 2.345056904e-03f, 2.352487161e-03f, 2.359912988e-03f, 2.367334372e-03f,
-2.374751300e-03f, 2.382163760e-03f, 2.389571738e-03f, 2.396975223e-03f, 2.404374202e-03f, 2.411768663e-03f, 2.419158592e-03f, 2.426543977e-03f, 2.433924806e-03f, 2.441301066e-03f,
-2.448672744e-03f, 2.456039829e-03f, 2.463402307e-03f, 2.470760167e-03f, 2.478113395e-03f, 2.485461979e-03f, 2.492805907e-03f, 2.500145166e-03f, 2.507479744e-03f, 2.514809628e-03f,
-2.522134806e-03f, 2.529455265e-03f, 2.536770993e-03f, 2.544081979e-03f, 2.551388208e-03f, 2.558689669e-03f, 2.565986350e-03f, 2.573278237e-03f, 2.580565320e-03f, 2.587847584e-03f,
-2.595125019e-03f, 2.602397611e-03f, 2.609665349e-03f, 2.616928220e-03f, 2.624186212e-03f, 2.631439311e-03f, 2.638687507e-03f, 2.645930787e-03f, 2.653169139e-03f, 2.660402549e-03f,
-2.667631007e-03f, 2.674854500e-03f, 2.682073015e-03f, 2.689286540e-03f, 2.696495064e-03f, 2.703698573e-03f, 2.710897056e-03f, 2.718090501e-03f, 2.725278895e-03f, 2.732462226e-03f,
-2.739640482e-03f, 2.746813651e-03f, 2.753981721e-03f, 2.761144679e-03f, 2.768302514e-03f, 2.775455213e-03f, 2.782602764e-03f, 2.789745155e-03f, 2.796882374e-03f, 2.804014409e-03f,
-2.811141248e-03f, 2.818262879e-03f, 2.825379290e-03f, 2.832490468e-03f, 2.839596402e-03f, 2.846697080e-03f, 2.853792489e-03f, 2.860882618e-03f, 2.867967455e-03f, 2.875046987e-03f,
-2.882121203e-03f, 2.889190091e-03f, 2.896253639e-03f, 2.903311834e-03f, 2.910364666e-03f, 2.917412121e-03f, 2.924454189e-03f, 2.931490856e-03f, 2.938522112e-03f, 2.945547945e-03f,
-2.952568341e-03f, 2.959583291e-03f, 2.966592781e-03f, 2.973596801e-03f, 2.980595337e-03f, 2.987588379e-03f, 2.994575914e-03f, 3.001557931e-03f, 3.008534418e-03f, 3.015505363e-03f,
-3.022470754e-03f, 3.029430580e-03f, 3.036384829e-03f, 3.043333489e-03f, 3.050276548e-03f, 3.057213995e-03f, 3.064145817e-03f, 3.071072004e-03f, 3.077992544e-03f, 3.084907424e-03f,
-3.091816633e-03f, 3.098720160e-03f, 3.105617993e-03f, 3.112510120e-03f, 3.119396530e-03f, 3.126277211e-03f, 3.133152151e-03f, 3.140021339e-03f, 3.146884763e-03f, 3.153742411e-03f,
-3.160594273e-03f, 3.167440336e-03f, 3.174280589e-03f, 3.181115021e-03f, 3.187943619e-03f, 3.194766373e-03f, 3.201583271e-03f, 3.208394301e-03f, 3.215199452e-03f, 3.221998712e-03f,
-3.228792071e-03f, 3.235579516e-03f, 3.242361036e-03f, 3.249136619e-03f, 3.255906255e-03f, 3.262669932e-03f, 3.269427638e-03f, 3.276179362e-03f, 3.282925093e-03f, 3.289664819e-03f,
-3.296398530e-03f, 3.303126213e-03f, 3.309847857e-03f, 3.316563451e-03f, 3.323272984e-03f, 3.329976444e-03f, 3.336673821e-03f, 3.343365102e-03f, 3.350050277e-03f, 3.356729334e-03f,
-3.363402262e-03f, 3.370069050e-03f, 3.376729686e-03f, 3.383384160e-03f, 3.390032461e-03f, 3.396674576e-03f, 3.403310495e-03f, 3.409940207e-03f, 3.416563701e-03f, 3.423180965e-03f,
-3.429791988e-03f, 3.436396759e-03f, 3.442995268e-03f, 3.449587502e-03f, 3.456173451e-03f, 3.462753104e-03f, 3.469326450e-03f, 3.475893478e-03f, 3.482454176e-03f, 3.489008534e-03f,
-3.495556540e-03f, 3.502098185e-03f, 3.508633455e-03f, 3.515162342e-03f, 3.521684833e-03f, 3.528200918e-03f, 3.534710586e-03f, 3.541213825e-03f, 3.547710626e-03f, 3.554200976e-03f,
-3.560684866e-03f, 3.567162284e-03f, 3.573633219e-03f, 3.580097661e-03f, 3.586555598e-03f, 3.593007021e-03f, 3.599451917e-03f, 3.605890277e-03f, 3.612322088e-03f, 3.618747342e-03f,
-3.625166026e-03f, 3.631578130e-03f, 3.637983644e-03f, 3.644382556e-03f, 3.650774856e-03f, 3.657160533e-03f, 3.663539576e-03f, 3.669911975e-03f, 3.676277719e-03f, 3.682636797e-03f,
-3.688989199e-03f, 3.695334914e-03f, 3.701673931e-03f, 3.708006240e-03f, 3.714331831e-03f, 3.720650691e-03f, 3.726962812e-03f, 3.733268182e-03f, 3.739566791e-03f, 3.745858628e-03f,
-3.752143683e-03f, 3.758421945e-03f, 3.764693404e-03f, 3.770958049e-03f, 3.777215869e-03f, 3.783466855e-03f, 3.789710996e-03f, 3.795948280e-03f, 3.802178699e-03f, 3.808402241e-03f,
-3.814618896e-03f, 3.820828654e-03f, 3.827031504e-03f, 3.833227436e-03f, 3.839416439e-03f, 3.845598503e-03f, 3.851773618e-03f, 3.857941774e-03f, 3.864102959e-03f, 3.870257165e-03f,
-3.876404380e-03f, 3.882544594e-03f, 3.888677797e-03f, 3.894803979e-03f, 3.900923130e-03f, 3.907035239e-03f, 3.913140295e-03f, 3.919238290e-03f, 3.925329212e-03f, 3.931413052e-03f,
-3.937489799e-03f, 3.943559443e-03f, 3.949621975e-03f, 3.955677383e-03f, 3.961725658e-03f, 3.967766790e-03f, 3.973800768e-03f, 3.979827583e-03f, 3.985847224e-03f, 3.991859682e-03f,
-3.997864946e-03f, 4.003863006e-03f, 4.009853853e-03f, 4.015837476e-03f, 4.021813865e-03f, 4.027783011e-03f, 4.033744903e-03f, 4.039699532e-03f, 4.045646887e-03f, 4.051586959e-03f,
-4.057519738e-03f, 4.063445214e-03f, 4.069363376e-03f, 4.075274216e-03f, 4.081177722e-03f, 4.087073887e-03f, 4.092962698e-03f, 4.098844148e-03f, 4.104718225e-03f, 4.110584921e-03f,
-4.116444225e-03f, 4.122296128e-03f, 4.128140619e-03f, 4.133977690e-03f, 4.139807330e-03f, 4.145629530e-03f, 4.151444280e-03f, 4.157251570e-03f, 4.163051391e-03f, 4.168843733e-03f,
-4.174628586e-03f, 4.180405941e-03f, 4.186175789e-03f, 4.191938118e-03f, 4.197692921e-03f, 4.203440187e-03f, 4.209179907e-03f, 4.214912071e-03f, 4.220636670e-03f, 4.226353694e-03f,
-4.232063134e-03f, 4.237764980e-03f, 4.243459223e-03f, 4.249145853e-03f, 4.254824861e-03f, 4.260496237e-03f, 4.266159972e-03f, 4.271816057e-03f, 4.277464482e-03f, 4.283105237e-03f,
-4.288738314e-03f, 4.294363704e-03f, 4.299981395e-03f, 4.305591381e-03f, 4.311193650e-03f, 4.316788194e-03f, 4.322375003e-03f, 4.327954069e-03f, 4.333525381e-03f, 4.339088932e-03f,
-4.344644710e-03f, 4.350192708e-03f, 4.355732916e-03f, 4.361265325e-03f, 4.366789925e-03f, 4.372306708e-03f, 4.377815665e-03f, 4.383316785e-03f, 4.388810061e-03f, 4.394295483e-03f,
-4.399773041e-03f, 4.405242728e-03f, 4.410704533e-03f, 4.416158447e-03f, 4.421604463e-03f, 4.427042570e-03f, 4.432472760e-03f, 4.437895023e-03f, 4.443309352e-03f, 4.448715735e-03f,
-4.454114166e-03f, 4.459504634e-03f, 4.464887132e-03f, 4.470261649e-03f, 4.475628177e-03f, 4.480986708e-03f, 4.486337232e-03f, 4.491679740e-03f, 4.497014224e-03f, 4.502340675e-03f,
-4.507659084e-03f, 4.512969442e-03f, 4.518271741e-03f, 4.523565971e-03f, 4.528852124e-03f, 4.534130192e-03f, 4.539400164e-03f, 4.544662034e-03f, 4.549915792e-03f, 4.555161429e-03f,
-4.560398937e-03f, 4.565628306e-03f, 4.570849530e-03f, 4.576062598e-03f, 4.581267502e-03f, 4.586464234e-03f, 4.591652785e-03f, 4.596833147e-03f, 4.602005310e-03f, 4.607169267e-03f,
-4.612325008e-03f, 4.617472526e-03f, 4.622611812e-03f, 4.627742858e-03f, 4.632865654e-03f, 4.637980193e-03f, 4.643086465e-03f, 4.648184464e-03f, 4.653274179e-03f, 4.658355604e-03f,
-4.663428729e-03f, 4.668493546e-03f, 4.673550047e-03f, 4.678598224e-03f, 4.683638067e-03f, 4.688669569e-03f, 4.693692722e-03f, 4.698707518e-03f, 4.703713947e-03f, 4.708712002e-03f,
-4.713701674e-03f, 4.718682956e-03f, 4.723655839e-03f, 4.728620316e-03f, 4.733576376e-03f, 4.738524014e-03f, 4.743463220e-03f, 4.748393987e-03f, 4.753316306e-03f, 4.758230169e-03f,
-4.763135568e-03f, 4.768032495e-03f, 4.772920943e-03f, 4.777800902e-03f, 4.782672365e-03f, 4.787535325e-03f, 4.792389772e-03f, 4.797235699e-03f, 4.802073099e-03f, 4.806901962e-03f,
-4.811722282e-03f, 4.816534050e-03f, 4.821337259e-03f, 4.826131900e-03f, 4.830917966e-03f, 4.835695448e-03f, 4.840464340e-03f, 4.845224633e-03f, 4.849976319e-03f, 4.854719391e-03f,
-4.859453840e-03f, 4.864179660e-03f, 4.868896842e-03f, 4.873605378e-03f, 4.878305261e-03f, 4.882996484e-03f, 4.887679038e-03f, 4.892352916e-03f, 4.897018110e-03f, 4.901674613e-03f,
-4.906322416e-03f, 4.910961513e-03f, 4.915591896e-03f, 4.920213556e-03f, 4.924826488e-03f, 4.929430682e-03f, 4.934026132e-03f, 4.938612830e-03f, 4.943190769e-03f, 4.947759941e-03f,
-4.952320338e-03f, 4.956871953e-03f, 4.961414779e-03f, 4.965948809e-03f, 4.970474034e-03f, 4.974990448e-03f, 4.979498043e-03f, 4.983996811e-03f, 4.988486747e-03f, 4.992967841e-03f,
-4.997440087e-03f, 5.001903477e-03f, 5.006358005e-03f, 5.010803663e-03f, 5.015240444e-03f, 5.019668340e-03f, 5.024087344e-03f, 5.028497449e-03f, 5.032898649e-03f, 5.037290935e-03f,
-5.041674300e-03f, 5.046048738e-03f, 5.050414242e-03f, 5.054770803e-03f, 5.059118416e-03f, 5.063457073e-03f, 5.067786767e-03f, 5.072107491e-03f, 5.076419237e-03f, 5.080722000e-03f,
-5.085015772e-03f, 5.089300545e-03f, 5.093576314e-03f, 5.097843071e-03f, 5.102100808e-03f, 5.106349520e-03f, 5.110589200e-03f, 5.114819840e-03f, 5.119041433e-03f, 5.123253973e-03f,
-5.127457453e-03f, 5.131651866e-03f, 5.135837205e-03f, 5.140013464e-03f, 5.144180635e-03f, 5.148338713e-03f, 5.152487689e-03f, 5.156627558e-03f, 5.160758313e-03f, 5.164879947e-03f,
-5.168992454e-03f, 5.173095826e-03f, 5.177190057e-03f, 5.181275141e-03f, 5.185351071e-03f, 5.189417840e-03f, 5.193475441e-03f, 5.197523869e-03f, 5.201563117e-03f, 5.205593177e-03f,
-5.209614045e-03f, 5.213625712e-03f, 5.217628173e-03f, 5.221621421e-03f, 5.225605449e-03f, 5.229580252e-03f, 5.233545823e-03f, 5.237502155e-03f, 5.241449243e-03f, 5.245387079e-03f,
-5.249315657e-03f, 5.253234972e-03f, 5.257145016e-03f, 5.261045783e-03f, 5.264937268e-03f, 5.268819463e-03f, 5.272692363e-03f, 5.276555962e-03f, 5.280410252e-03f, 5.284255229e-03f,
-5.288090885e-03f, 5.291917215e-03f, 5.295734212e-03f, 5.299541871e-03f, 5.303340185e-03f, 5.307129147e-03f, 5.310908753e-03f, 5.314678996e-03f, 5.318439869e-03f, 5.322191368e-03f,
-5.325933485e-03f, 5.329666215e-03f, 5.333389552e-03f, 5.337103489e-03f, 5.340808022e-03f, 5.344503143e-03f, 5.348188848e-03f, 5.351865129e-03f, 5.355531982e-03f, 5.359189400e-03f,
-5.362837378e-03f, 5.366475909e-03f, 5.370104989e-03f, 5.373724610e-03f, 5.377334767e-03f, 5.380935455e-03f, 5.384526668e-03f, 5.388108399e-03f, 5.391680644e-03f, 5.395243396e-03f,
-5.398796650e-03f, 5.402340401e-03f, 5.405874642e-03f, 5.409399367e-03f, 5.412914572e-03f, 5.416420251e-03f, 5.419916398e-03f, 5.423403007e-03f, 5.426880073e-03f, 5.430347591e-03f,
-5.433805554e-03f, 5.437253958e-03f, 5.440692797e-03f, 5.444122065e-03f, 5.447541757e-03f, 5.450951867e-03f, 5.454352391e-03f, 5.457743322e-03f, 5.461124656e-03f, 5.464496387e-03f,
-5.467858509e-03f, 5.471211017e-03f, 5.474553907e-03f, 5.477887171e-03f, 5.481210807e-03f, 5.484524807e-03f, 5.487829167e-03f, 5.491123882e-03f, 5.494408946e-03f, 5.497684354e-03f,
-5.500950101e-03f, 5.504206182e-03f, 5.507452592e-03f, 5.510689325e-03f, 5.513916377e-03f, 5.517133741e-03f, 5.520341414e-03f, 5.523539391e-03f, 5.526727665e-03f, 5.529906232e-03f,
-5.533075088e-03f, 5.536234226e-03f, 5.539383642e-03f, 5.542523332e-03f, 5.545653290e-03f, 5.548773511e-03f, 5.551883990e-03f, 5.554984723e-03f, 5.558075704e-03f, 5.561156929e-03f,
-5.564228393e-03f, 5.567290091e-03f, 5.570342018e-03f, 5.573384169e-03f, 5.576416540e-03f, 5.579439126e-03f, 5.582451922e-03f, 5.585454924e-03f, 5.588448126e-03f, 5.591431524e-03f,
-5.594405114e-03f, 5.597368890e-03f, 5.600322848e-03f, 5.603266984e-03f, 5.606201292e-03f, 5.609125769e-03f, 5.612040409e-03f, 5.614945208e-03f, 5.617840162e-03f, 5.620725266e-03f,
-5.623600516e-03f, 5.626465907e-03f, 5.629321434e-03f, 5.632167093e-03f, 5.635002880e-03f, 5.637828791e-03f, 5.640644820e-03f, 5.643450964e-03f, 5.646247218e-03f, 5.649033578e-03f,
-5.651810039e-03f, 5.654576598e-03f, 5.657333249e-03f, 5.660079989e-03f, 5.662816814e-03f, 5.665543718e-03f, 5.668260698e-03f, 5.670967750e-03f, 5.673664870e-03f, 5.676352053e-03f,
-5.679029295e-03f, 5.681696592e-03f, 5.684353940e-03f, 5.687001334e-03f, 5.689638772e-03f, 5.692266248e-03f, 5.694883758e-03f, 5.697491300e-03f, 5.700088867e-03f, 5.702676458e-03f,
-5.705254067e-03f, 5.707821690e-03f, 5.710379324e-03f, 5.712926965e-03f, 5.715464609e-03f, 5.717992252e-03f, 5.720509889e-03f, 5.723017518e-03f, 5.725515134e-03f, 5.728002734e-03f,
-5.730480314e-03f, 5.732947869e-03f, 5.735405397e-03f, 5.737852893e-03f, 5.740290354e-03f, 5.742717775e-03f, 5.745135154e-03f, 5.747542487e-03f, 5.749939769e-03f, 5.752326998e-03f,
-5.754704169e-03f, 5.757071279e-03f, 5.759428325e-03f, 5.761775303e-03f, 5.764112208e-03f, 5.766439039e-03f, 5.768755791e-03f, 5.771062460e-03f, 5.773359044e-03f, 5.775645538e-03f,
-5.777921940e-03f, 5.780188246e-03f, 5.782444452e-03f, 5.784690555e-03f, 5.786926552e-03f, 5.789152439e-03f, 5.791368213e-03f, 5.793573870e-03f, 5.795769408e-03f, 5.797954823e-03f,
-5.800130111e-03f, 5.802295270e-03f, 5.804450296e-03f, 5.806595186e-03f, 5.808729937e-03f, 5.810854546e-03f, 5.812969009e-03f, 5.815073323e-03f, 5.817167485e-03f, 5.819251492e-03f,
-5.821325342e-03f, 5.823389029e-03f, 5.825442553e-03f, 5.827485910e-03f, 5.829519096e-03f, 5.831542108e-03f, 5.833554945e-03f, 5.835557602e-03f, 5.837550077e-03f, 5.839532366e-03f,
-5.841504468e-03f, 5.843466378e-03f, 5.845418095e-03f, 5.847359614e-03f, 5.849290934e-03f, 5.851212052e-03f, 5.853122964e-03f, 5.855023668e-03f, 5.856914161e-03f, 5.858794440e-03f,
-5.860664503e-03f, 5.862524347e-03f, 5.864373969e-03f, 5.866213367e-03f, 5.868042537e-03f, 5.869861477e-03f, 5.871670185e-03f, 5.873468658e-03f, 5.875256893e-03f, 5.877034888e-03f,
-5.878802639e-03f, 5.880560146e-03f, 5.882307404e-03f, 5.884044412e-03f, 5.885771166e-03f, 5.887487666e-03f, 5.889193907e-03f, 5.890889888e-03f, 5.892575606e-03f, 5.894251059e-03f,
-5.895916245e-03f, 5.897571160e-03f, 5.899215803e-03f, 5.900850171e-03f, 5.902474263e-03f, 5.904088075e-03f, 5.905691605e-03f, 5.907284852e-03f, 5.908867812e-03f, 5.910440485e-03f,
-5.912002866e-03f, 5.913554955e-03f, 5.915096749e-03f, 5.916628246e-03f, 5.918149444e-03f, 5.919660341e-03f, 5.921160934e-03f, 5.922651221e-03f, 5.924131201e-03f, 5.925600872e-03f,
-5.927060231e-03f, 5.928509276e-03f, 5.929948005e-03f, 5.931376417e-03f, 5.932794509e-03f, 5.934202279e-03f, 5.935599726e-03f, 5.936986848e-03f, 5.938363642e-03f, 5.939730108e-03f,
-5.941086242e-03f, 5.942432043e-03f, 5.943767510e-03f, 5.945092640e-03f, 5.946407432e-03f, 5.947711884e-03f, 5.949005995e-03f, 5.950289762e-03f, 5.951563183e-03f, 5.952826258e-03f,
-5.954078984e-03f, 5.955321360e-03f, 5.956553385e-03f, 5.957775055e-03f, 5.958986371e-03f, 5.960187330e-03f, 5.961377931e-03f, 5.962558172e-03f, 5.963728052e-03f, 5.964887569e-03f,
-5.966036721e-03f, 5.967175508e-03f, 5.968303928e-03f, 5.969421979e-03f, 5.970529660e-03f, 5.971626969e-03f, 5.972713906e-03f, 5.973790468e-03f, 5.974856655e-03f, 5.975912464e-03f,
-5.976957896e-03f, 5.977992948e-03f, 5.979017619e-03f, 5.980031908e-03f, 5.981035814e-03f, 5.982029335e-03f, 5.983012470e-03f, 5.983985219e-03f, 5.984947579e-03f, 5.985899550e-03f,
-5.986841131e-03f, 5.987772320e-03f, 5.988693117e-03f, 5.989603520e-03f, 5.990503528e-03f, 5.991393140e-03f, 5.992272356e-03f, 5.993141173e-03f, 5.993999592e-03f, 5.994847611e-03f,
-5.995685230e-03f, 5.996512446e-03f, 5.997329260e-03f, 5.998135671e-03f, 5.998931677e-03f, 5.999717278e-03f, 6.000492473e-03f, 6.001257261e-03f, 6.002011641e-03f, 6.002755612e-03f,
-6.003489175e-03f, 6.004212327e-03f, 6.004925068e-03f, 6.005627398e-03f, 6.006319316e-03f, 6.007000821e-03f, 6.007671912e-03f, 6.008332589e-03f, 6.008982852e-03f, 6.009622699e-03f,
-6.010252129e-03f, 6.010871143e-03f, 6.011479740e-03f, 6.012077920e-03f, 6.012665681e-03f, 6.013243023e-03f, 6.013809946e-03f, 6.014366450e-03f, 6.014912533e-03f, 6.015448195e-03f,
-6.015973437e-03f, 6.016488257e-03f, 6.016992656e-03f, 6.017486632e-03f, 6.017970186e-03f, 6.018443318e-03f, 6.018906026e-03f, 6.019358310e-03f, 6.019800171e-03f, 6.020231609e-03f,
-6.020652622e-03f, 6.021063210e-03f, 6.021463375e-03f, 6.021853114e-03f, 6.022232429e-03f, 6.022601318e-03f, 6.022959783e-03f, 6.023307822e-03f, 6.023645436e-03f, 6.023972624e-03f,
-6.024289387e-03f, 6.024595725e-03f, 6.024891637e-03f, 6.025177123e-03f, 6.025452184e-03f, 6.025716819e-03f, 6.025971029e-03f, 6.026214814e-03f, 6.026448174e-03f, 6.026671108e-03f,
-6.026883618e-03f, 6.027085702e-03f, 6.027277362e-03f, 6.027458597e-03f, 6.027629408e-03f, 6.027789795e-03f, 6.027939758e-03f, 6.028079298e-03f, 6.028208414e-03f, 6.028327107e-03f,
-6.028435377e-03f, 6.028533225e-03f, 6.028620651e-03f, 6.028697655e-03f, 6.028764238e-03f, 6.028820400e-03f, 6.028866142e-03f, 6.028901463e-03f, 6.028926365e-03f, 6.028940847e-03f,
-6.028944911e-03f, 6.028938557e-03f, 6.028921785e-03f, 6.028894596e-03f, 6.028856990e-03f, 6.028808969e-03f, 6.028750532e-03f, 6.028681680e-03f, 6.028602414e-03f, 6.028512735e-03f,
-6.028412643e-03f, 6.028302139e-03f, 6.028181223e-03f, 6.028049897e-03f, 6.027908160e-03f, 6.027756015e-03f, 6.027593461e-03f, 6.027420499e-03f, 6.027237131e-03f, 6.027043357e-03f,
-6.026839177e-03f, 6.026624593e-03f, 6.026399606e-03f, 6.026164216e-03f, 6.025918425e-03f, 6.025662233e-03f, 6.025395641e-03f, 6.025118651e-03f, 6.024831263e-03f, 6.024533478e-03f,
-6.024225297e-03f, 6.023906722e-03f, 6.023577753e-03f, 6.023238392e-03f, 6.022888639e-03f, 6.022528496e-03f, 6.022157964e-03f, 6.021777044e-03f, 6.021385737e-03f, 6.020984044e-03f,
-6.020571967e-03f, 6.020149506e-03f, 6.019716664e-03f, 6.019273441e-03f, 6.018819838e-03f, 6.018355857e-03f, 6.017881500e-03f, 6.017396767e-03f, 6.016901659e-03f, 6.016396179e-03f,
-6.015880328e-03f, 6.015354106e-03f, 6.014817516e-03f, 6.014270558e-03f, 6.013713235e-03f, 6.013145548e-03f, 6.012567498e-03f, 6.011979087e-03f, 6.011380316e-03f, 6.010771186e-03f,
-6.010151701e-03f, 6.009521860e-03f, 6.008881665e-03f, 6.008231119e-03f, 6.007570223e-03f, 6.006898978e-03f, 6.006217387e-03f, 6.005525450e-03f, 6.004823169e-03f, 6.004110547e-03f,
-6.003387585e-03f, 6.002654285e-03f, 6.001910648e-03f, 6.001156677e-03f, 6.000392372e-03f, 5.999617737e-03f, 5.998832772e-03f, 5.998037480e-03f, 5.997231863e-03f, 5.996415922e-03f,
-5.995589659e-03f, 5.994753077e-03f, 5.993906177e-03f, 5.993048961e-03f, 5.992181432e-03f, 5.991303590e-03f, 5.990415439e-03f, 5.989516980e-03f, 5.988608216e-03f, 5.987689148e-03f,
-5.986759778e-03f, 5.985820109e-03f, 5.984870143e-03f, 5.983909882e-03f, 5.982939328e-03f, 5.981958483e-03f, 5.980967349e-03f, 5.979965930e-03f, 5.978954226e-03f, 5.977932240e-03f,
-5.976899975e-03f, 5.975857432e-03f, 5.974804615e-03f, 5.973741525e-03f, 5.972668164e-03f, 5.971584536e-03f, 5.970490642e-03f, 5.969386485e-03f, 5.968272067e-03f, 5.967147391e-03f,
-5.966012459e-03f, 5.964867273e-03f, 5.963711837e-03f, 5.962546152e-03f, 5.961370221e-03f, 5.960184047e-03f, 5.958987632e-03f, 5.957780979e-03f, 5.956564090e-03f, 5.955336968e-03f,
-5.954099616e-03f, 5.952852036e-03f, 5.951594230e-03f, 5.950326203e-03f, 5.949047955e-03f, 5.947759491e-03f, 5.946460812e-03f, 5.945151921e-03f, 5.943832822e-03f, 5.942503517e-03f,
-5.941164008e-03f, 5.939814299e-03f, 5.938454393e-03f, 5.937084292e-03f, 5.935703999e-03f, 5.934313516e-03f, 5.932912848e-03f, 5.931501997e-03f, 5.930080966e-03f, 5.928649757e-03f,
-5.927208374e-03f, 5.925756820e-03f, 5.924295097e-03f, 5.922823209e-03f, 5.921341159e-03f, 5.919848950e-03f, 5.918346585e-03f, 5.916834066e-03f, 5.915311398e-03f, 5.913778583e-03f,
-5.912235625e-03f, 5.910682526e-03f, 5.909119290e-03f, 5.907545920e-03f, 5.905962419e-03f, 5.904368790e-03f, 5.902765037e-03f, 5.901151163e-03f, 5.899527172e-03f, 5.897893065e-03f,
-5.896248848e-03f, 5.894594523e-03f, 5.892930093e-03f, 5.891255562e-03f, 5.889570934e-03f, 5.887876211e-03f, 5.886171398e-03f, 5.884456497e-03f, 5.882731512e-03f, 5.880996446e-03f,
-5.879251304e-03f, 5.877496088e-03f, 5.875730802e-03f, 5.873955449e-03f, 5.872170034e-03f, 5.870374560e-03f, 5.868569030e-03f, 5.866753447e-03f, 5.864927817e-03f, 5.863092142e-03f,
-5.861246425e-03f, 5.859390671e-03f, 5.857524883e-03f, 5.855649066e-03f, 5.853763222e-03f, 5.851867355e-03f, 5.849961470e-03f, 5.848045570e-03f, 5.846119659e-03f, 5.844183740e-03f,
-5.842237818e-03f, 5.840281896e-03f, 5.838315979e-03f, 5.836340069e-03f, 5.834354172e-03f, 5.832358290e-03f, 5.830352428e-03f, 5.828336590e-03f, 5.826310780e-03f, 5.824275002e-03f,
-5.822229260e-03f, 5.820173557e-03f, 5.818107898e-03f, 5.816032288e-03f, 5.813946729e-03f, 5.811851226e-03f, 5.809745784e-03f, 5.807630406e-03f, 5.805505096e-03f, 5.803369859e-03f,
-5.801224699e-03f, 5.799069619e-03f, 5.796904625e-03f, 5.794729721e-03f, 5.792544910e-03f, 5.790350197e-03f, 5.788145587e-03f, 5.785931083e-03f, 5.783706689e-03f, 5.781472411e-03f,
-5.779228253e-03f, 5.776974218e-03f, 5.774710312e-03f, 5.772436538e-03f, 5.770152902e-03f, 5.767859407e-03f, 5.765556058e-03f, 5.763242859e-03f, 5.760919815e-03f, 5.758586931e-03f,
-5.756244210e-03f, 5.753891658e-03f, 5.751529279e-03f, 5.749157078e-03f, 5.746775059e-03f, 5.744383226e-03f, 5.741981585e-03f, 5.739570140e-03f, 5.737148895e-03f, 5.734717856e-03f,
-5.732277027e-03f, 5.729826412e-03f, 5.727366017e-03f, 5.724895846e-03f, 5.722415904e-03f, 5.719926196e-03f, 5.717426726e-03f, 5.714917499e-03f, 5.712398520e-03f, 5.709869795e-03f,
-5.707331327e-03f, 5.704783121e-03f, 5.702225183e-03f, 5.699657518e-03f, 5.697080129e-03f, 5.694493023e-03f, 5.691896204e-03f, 5.689289678e-03f, 5.686673448e-03f, 5.684047520e-03f,
-5.681411900e-03f, 5.678766592e-03f, 5.676111601e-03f, 5.673446932e-03f, 5.670772591e-03f, 5.668088582e-03f, 5.665394910e-03f, 5.662691582e-03f, 5.659978601e-03f, 5.657255973e-03f,
-5.654523704e-03f, 5.651781797e-03f, 5.649030260e-03f, 5.646269096e-03f, 5.643498311e-03f, 5.640717911e-03f, 5.637927900e-03f, 5.635128284e-03f, 5.632319068e-03f, 5.629500258e-03f,
-5.626671859e-03f, 5.623833876e-03f, 5.620986314e-03f, 5.618129180e-03f, 5.615262478e-03f, 5.612386214e-03f, 5.609500393e-03f, 5.606605020e-03f, 5.603700102e-03f, 5.600785644e-03f,
-5.597861651e-03f, 5.594928128e-03f, 5.591985082e-03f, 5.589032518e-03f, 5.586070441e-03f, 5.583098857e-03f, 5.580117772e-03f, 5.577127190e-03f, 5.574127119e-03f, 5.571117563e-03f,
-5.568098528e-03f, 5.565070020e-03f, 5.562032045e-03f, 5.558984608e-03f, 5.555927714e-03f, 5.552861371e-03f, 5.549785583e-03f, 5.546700356e-03f, 5.543605696e-03f, 5.540501609e-03f,
-5.537388101e-03f, 5.534265177e-03f, 5.531132844e-03f, 5.527991107e-03f, 5.524839972e-03f, 5.521679445e-03f, 5.518509533e-03f, 5.515330240e-03f, 5.512141573e-03f, 5.508943538e-03f,
-5.505736141e-03f, 5.502519387e-03f, 5.499293284e-03f, 5.496057836e-03f, 5.492813050e-03f, 5.489558932e-03f, 5.486295489e-03f, 5.483022725e-03f, 5.479740648e-03f, 5.476449264e-03f,
-5.473148578e-03f, 5.469838596e-03f, 5.466519326e-03f, 5.463190773e-03f, 5.459852943e-03f, 5.456505842e-03f, 5.453149478e-03f, 5.449783855e-03f, 5.446408981e-03f, 5.443024861e-03f,
-5.439631502e-03f, 5.436228910e-03f, 5.432817092e-03f, 5.429396054e-03f, 5.425965802e-03f, 5.422526343e-03f, 5.419077683e-03f, 5.415619828e-03f, 5.412152785e-03f, 5.408676561e-03f,
-5.405191161e-03f, 5.401696593e-03f, 5.398192862e-03f, 5.394679975e-03f, 5.391157940e-03f, 5.387626761e-03f, 5.384086447e-03f, 5.380537003e-03f, 5.376978435e-03f, 5.373410752e-03f,
-5.369833959e-03f, 5.366248062e-03f, 5.362653069e-03f, 5.359048986e-03f, 5.355435820e-03f, 5.351813578e-03f, 5.348182265e-03f, 5.344541890e-03f, 5.340892458e-03f, 5.337233977e-03f,
-5.333566453e-03f, 5.329889893e-03f, 5.326204304e-03f, 5.322509692e-03f, 5.318806065e-03f, 5.315093429e-03f, 5.311371791e-03f, 5.307641158e-03f, 5.303901537e-03f, 5.300152935e-03f,
-5.296395358e-03f, 5.292628814e-03f, 5.288853310e-03f, 5.285068852e-03f, 5.281275448e-03f, 5.277473104e-03f, 5.273661828e-03f, 5.269841626e-03f, 5.266012506e-03f, 5.262174475e-03f,
-5.258327539e-03f, 5.254471706e-03f, 5.250606983e-03f, 5.246733377e-03f, 5.242850896e-03f, 5.238959545e-03f, 5.235059333e-03f, 5.231150267e-03f, 5.227232353e-03f, 5.223305600e-03f,
-5.219370014e-03f, 5.215425602e-03f, 5.211472372e-03f, 5.207510331e-03f, 5.203539486e-03f, 5.199559845e-03f, 5.195571415e-03f, 5.191574203e-03f, 5.187568216e-03f, 5.183553462e-03f,
-5.179529949e-03f, 5.175497683e-03f, 5.171456673e-03f, 5.167406924e-03f, 5.163348446e-03f, 5.159281245e-03f, 5.155205329e-03f, 5.151120705e-03f, 5.147027381e-03f, 5.142925364e-03f,
-5.138814662e-03f, 5.134695282e-03f, 5.130567232e-03f, 5.126430520e-03f, 5.122285152e-03f, 5.118131137e-03f, 5.113968482e-03f, 5.109797195e-03f, 5.105617283e-03f, 5.101428754e-03f,
-5.097231617e-03f, 5.093025877e-03f, 5.088811544e-03f, 5.084588624e-03f, 5.080357126e-03f, 5.076117057e-03f, 5.071868425e-03f, 5.067611238e-03f, 5.063345504e-03f, 5.059071229e-03f,
-5.054788423e-03f, 5.050497093e-03f, 5.046197247e-03f, 5.041888892e-03f, 5.037572037e-03f, 5.033246689e-03f, 5.028912856e-03f, 5.024570547e-03f, 5.020219769e-03f, 5.015860529e-03f,
-5.011492837e-03f, 5.007116700e-03f, 5.002732125e-03f, 4.998339122e-03f, 4.993937697e-03f, 4.989527860e-03f, 4.985109617e-03f, 4.980682977e-03f, 4.976247949e-03f, 4.971804539e-03f,
-4.967352757e-03f, 4.962892610e-03f, 4.958424107e-03f, 4.953947255e-03f, 4.949462063e-03f, 4.944968539e-03f, 4.940466691e-03f, 4.935956527e-03f, 4.931438056e-03f, 4.926911285e-03f,
-4.922376224e-03f, 4.917832879e-03f, 4.913281260e-03f, 4.908721375e-03f, 4.904153231e-03f, 4.899576838e-03f, 4.894992204e-03f, 4.890399336e-03f, 4.885798244e-03f, 4.881188935e-03f,
-4.876571418e-03f, 4.871945702e-03f, 4.867311794e-03f, 4.862669704e-03f, 4.858019439e-03f, 4.853361008e-03f, 4.848694420e-03f, 4.844019682e-03f, 4.839336804e-03f, 4.834645794e-03f,
-4.829946661e-03f, 4.825239412e-03f, 4.820524057e-03f, 4.815800604e-03f, 4.811069061e-03f, 4.806329438e-03f, 4.801581742e-03f, 4.796825983e-03f, 4.792062169e-03f, 4.787290308e-03f,
-4.782510409e-03f, 4.777722482e-03f, 4.772926534e-03f, 4.768122574e-03f, 4.763310611e-03f, 4.758490654e-03f, 4.753662711e-03f, 4.748826791e-03f, 4.743982903e-03f, 4.739131056e-03f,
-4.734271258e-03f, 4.729403518e-03f, 4.724527846e-03f, 4.719644249e-03f, 4.714752736e-03f, 4.709853317e-03f, 4.704946001e-03f, 4.700030795e-03f, 4.695107710e-03f, 4.690176754e-03f,
-4.685237935e-03f, 4.680291263e-03f, 4.675336747e-03f, 4.670374396e-03f, 4.665404218e-03f, 4.660426223e-03f, 4.655440420e-03f, 4.650446817e-03f, 4.645445424e-03f, 4.640436249e-03f,
-4.635419302e-03f, 4.630394591e-03f, 4.625362127e-03f, 4.620321917e-03f, 4.615273972e-03f, 4.610218299e-03f, 4.605154908e-03f, 4.600083809e-03f, 4.595005010e-03f, 4.589918521e-03f,
-4.584824351e-03f, 4.579722508e-03f, 4.574613003e-03f, 4.569495844e-03f, 4.564371041e-03f, 4.559238602e-03f, 4.554098537e-03f, 4.548950856e-03f, 4.543795567e-03f, 4.538632680e-03f,
-4.533462204e-03f, 4.528284149e-03f, 4.523098523e-03f, 4.517905337e-03f, 4.512704599e-03f, 4.507496319e-03f, 4.502280506e-03f, 4.497057169e-03f, 4.491826319e-03f, 4.486587963e-03f,
-4.481342113e-03f, 4.476088777e-03f, 4.470827964e-03f, 4.465559685e-03f, 4.460283948e-03f, 4.455000763e-03f, 4.449710140e-03f, 4.444412088e-03f, 4.439106616e-03f, 4.433793735e-03f,
-4.428473453e-03f, 4.423145781e-03f, 4.417810727e-03f, 4.412468302e-03f, 4.407118514e-03f, 4.401761374e-03f, 4.396396892e-03f, 4.391025076e-03f, 4.385645937e-03f, 4.380259484e-03f,
-4.374865726e-03f, 4.369464675e-03f, 4.364056338e-03f, 4.358640726e-03f, 4.353217849e-03f, 4.347787716e-03f, 4.342350337e-03f, 4.336905722e-03f, 4.331453881e-03f, 4.325994822e-03f,
-4.320528557e-03f, 4.315055095e-03f, 4.309574446e-03f, 4.304086619e-03f, 4.298591625e-03f, 4.293089473e-03f, 4.287580173e-03f, 4.282063735e-03f, 4.276540169e-03f, 4.271009485e-03f,
-4.265471692e-03f, 4.259926801e-03f, 4.254374821e-03f, 4.248815763e-03f, 4.243249636e-03f, 4.237676451e-03f, 4.232096217e-03f, 4.226508945e-03f, 4.220914643e-03f, 4.215313323e-03f,
-4.209704995e-03f, 4.204089668e-03f, 4.198467352e-03f, 4.192838058e-03f, 4.187201796e-03f, 4.181558575e-03f, 4.175908406e-03f, 4.170251299e-03f, 4.164587264e-03f, 4.158916311e-03f,
-4.153238450e-03f, 4.147553692e-03f, 4.141862046e-03f, 4.136163523e-03f, 4.130458133e-03f, 4.124745886e-03f, 4.119026792e-03f, 4.113300862e-03f, 4.107568106e-03f, 4.101828534e-03f,
-4.096082156e-03f, 4.090328982e-03f, 4.084569024e-03f, 4.078802290e-03f, 4.073028792e-03f, 4.067248540e-03f, 4.061461544e-03f, 4.055667814e-03f, 4.049867360e-03f, 4.044060194e-03f,
-4.038246326e-03f, 4.032425765e-03f, 4.026598522e-03f, 4.020764608e-03f, 4.014924033e-03f, 4.009076807e-03f, 4.003222941e-03f, 3.997362446e-03f, 3.991495331e-03f, 3.985621607e-03f,
-3.979741285e-03f, 3.973854375e-03f, 3.967960888e-03f, 3.962060835e-03f, 3.956154224e-03f, 3.950241068e-03f, 3.944321377e-03f, 3.938395161e-03f, 3.932462431e-03f, 3.926523197e-03f,
-3.920577471e-03f, 3.914625262e-03f, 3.908666581e-03f, 3.902701439e-03f, 3.896729847e-03f, 3.890751815e-03f, 3.884767353e-03f, 3.878776473e-03f, 3.872779185e-03f, 3.866775499e-03f,
-3.860765427e-03f, 3.854748980e-03f, 3.848726167e-03f, 3.842696999e-03f, 3.836661488e-03f, 3.830619644e-03f, 3.824571478e-03f, 3.818517000e-03f, 3.812456222e-03f, 3.806389154e-03f,
-3.800315806e-03f, 3.794236191e-03f, 3.788150318e-03f, 3.782058198e-03f, 3.775959842e-03f, 3.769855262e-03f, 3.763744467e-03f, 3.757627469e-03f, 3.751504279e-03f, 3.745374907e-03f,
-3.739239365e-03f, 3.733097663e-03f, 3.726949812e-03f, 3.720795823e-03f, 3.714635707e-03f, 3.708469476e-03f, 3.702297139e-03f, 3.696118708e-03f, 3.689934194e-03f, 3.683743608e-03f,
-3.677546961e-03f, 3.671344264e-03f, 3.665135528e-03f, 3.658920764e-03f, 3.652699983e-03f, 3.646473196e-03f, 3.640240414e-03f, 3.634001648e-03f, 3.627756909e-03f, 3.621506209e-03f,
-3.615249558e-03f, 3.608986967e-03f, 3.602718448e-03f, 3.596444012e-03f, 3.590163670e-03f, 3.583877433e-03f, 3.577585312e-03f, 3.571287318e-03f, 3.564983463e-03f, 3.558673757e-03f,
-3.552358213e-03f, 3.546036840e-03f, 3.539709651e-03f, 3.533376656e-03f, 3.527037868e-03f, 3.520693296e-03f, 3.514342952e-03f, 3.507986847e-03f, 3.501624994e-03f, 3.495257402e-03f,
-3.488884084e-03f, 3.482505051e-03f, 3.476120313e-03f, 3.469729883e-03f, 3.463333771e-03f, 3.456931989e-03f, 3.450524548e-03f, 3.444111460e-03f, 3.437692735e-03f, 3.431268386e-03f,
-3.424838424e-03f, 3.418402860e-03f, 3.411961705e-03f, 3.405514971e-03f, 3.399062669e-03f, 3.392604811e-03f, 3.386141408e-03f, 3.379672472e-03f, 3.373198014e-03f, 3.366718045e-03f,
-3.360232577e-03f, 3.353741622e-03f, 3.347245190e-03f, 3.340743294e-03f, 3.334235945e-03f, 3.327723154e-03f, 3.321204933e-03f, 3.314681294e-03f, 3.308152248e-03f, 3.301617806e-03f,
-3.295077981e-03f, 3.288532783e-03f, 3.281982224e-03f, 3.275426316e-03f, 3.268865071e-03f, 3.262298499e-03f, 3.255726614e-03f, 3.249149425e-03f, 3.242566946e-03f, 3.235979187e-03f,
-3.229386160e-03f, 3.222787877e-03f, 3.216184349e-03f, 3.209575589e-03f, 3.202961607e-03f, 3.196342416e-03f, 3.189718027e-03f, 3.183088452e-03f, 3.176453703e-03f, 3.169813791e-03f,
-3.163168728e-03f, 3.156518526e-03f, 3.149863196e-03f, 3.143202751e-03f, 3.136537202e-03f, 3.129866560e-03f, 3.123190838e-03f, 3.116510048e-03f, 3.109824201e-03f, 3.103133308e-03f,
-3.096437383e-03f, 3.089736436e-03f, 3.083030479e-03f, 3.076319525e-03f, 3.069603585e-03f, 3.062882671e-03f, 3.056156795e-03f, 3.049425968e-03f, 3.042690203e-03f, 3.035949512e-03f,
-3.029203905e-03f, 3.022453396e-03f, 3.015697997e-03f, 3.008937718e-03f, 3.002172572e-03f, 2.995402571e-03f, 2.988627727e-03f, 2.981848052e-03f, 2.975063557e-03f, 2.968274255e-03f,
-2.961480158e-03f, 2.954681277e-03f, 2.947877625e-03f, 2.941069214e-03f, 2.934256055e-03f, 2.927438161e-03f, 2.920615544e-03f, 2.913788215e-03f, 2.906956187e-03f, 2.900119472e-03f,
-2.893278081e-03f, 2.886432027e-03f, 2.879581322e-03f, 2.872725978e-03f, 2.865866007e-03f, 2.859001422e-03f, 2.852132233e-03f, 2.845258454e-03f, 2.838380096e-03f, 2.831497171e-03f,
-2.824609692e-03f, 2.817717671e-03f, 2.810821120e-03f, 2.803920051e-03f, 2.797014476e-03f, 2.790104407e-03f, 2.783189857e-03f, 2.776270837e-03f, 2.769347360e-03f, 2.762419439e-03f,
-2.755487084e-03f, 2.748550309e-03f, 2.741609125e-03f, 2.734663546e-03f, 2.727713582e-03f, 2.720759246e-03f, 2.713800551e-03f, 2.706837509e-03f, 2.699870132e-03f, 2.692898432e-03f,
-2.685922421e-03f, 2.678942112e-03f, 2.671957517e-03f, 2.664968649e-03f, 2.657975519e-03f, 2.650978140e-03f, 2.643976524e-03f, 2.636970684e-03f, 2.629960631e-03f, 2.622946379e-03f,
-2.615927939e-03f, 2.608905323e-03f, 2.601878545e-03f, 2.594847617e-03f, 2.587812550e-03f, 2.580773357e-03f, 2.573730051e-03f, 2.566682644e-03f, 2.559631148e-03f, 2.552575576e-03f,
-2.545515940e-03f, 2.538452252e-03f, 2.531384526e-03f, 2.524312772e-03f, 2.517237005e-03f, 2.510157235e-03f, 2.503073476e-03f, 2.495985740e-03f, 2.488894040e-03f, 2.481798387e-03f,
-2.474698795e-03f, 2.467595275e-03f, 2.460487841e-03f, 2.453376505e-03f, 2.446261278e-03f, 2.439142175e-03f, 2.432019207e-03f, 2.424892386e-03f, 2.417761726e-03f, 2.410627238e-03f,
-2.403488936e-03f, 2.396346832e-03f, 2.389200937e-03f, 2.382051266e-03f, 2.374897830e-03f, 2.367740642e-03f, 2.360579714e-03f, 2.353415060e-03f, 2.346246691e-03f, 2.339074620e-03f,
-2.331898860e-03f, 2.324719423e-03f, 2.317536322e-03f, 2.310349569e-03f, 2.303159178e-03f, 2.295965161e-03f, 2.288767529e-03f, 2.281566297e-03f, 2.274361476e-03f, 2.267153079e-03f,
-2.259941120e-03f, 2.252725609e-03f, 2.245506561e-03f, 2.238283987e-03f, 2.231057901e-03f, 2.223828315e-03f, 2.216595241e-03f, 2.209358693e-03f, 2.202118683e-03f, 2.194875224e-03f,
-2.187628328e-03f, 2.180378008e-03f, 2.173124278e-03f, 2.165867148e-03f, 2.158606633e-03f, 2.151342745e-03f, 2.144075496e-03f, 2.136804900e-03f, 2.129530969e-03f, 2.122253715e-03f,
-2.114973153e-03f, 2.107689293e-03f, 2.100402150e-03f, 2.093111735e-03f, 2.085818063e-03f, 2.078521144e-03f, 2.071220992e-03f, 2.063917621e-03f, 2.056611042e-03f, 2.049301268e-03f,
-2.041988313e-03f, 2.034672189e-03f, 2.027352909e-03f, 2.020030485e-03f, 2.012704930e-03f, 2.005376258e-03f, 1.998044481e-03f, 1.990709612e-03f, 1.983371664e-03f, 1.976030649e-03f,
-1.968686580e-03f, 1.961339471e-03f, 1.953989334e-03f, 1.946636182e-03f, 1.939280027e-03f, 1.931920883e-03f, 1.924558763e-03f, 1.917193679e-03f, 1.909825644e-03f, 1.902454671e-03f,
-1.895080773e-03f, 1.887703964e-03f, 1.880324255e-03f, 1.872941659e-03f, 1.865556190e-03f, 1.858167861e-03f, 1.850776684e-03f, 1.843382672e-03f, 1.835985839e-03f, 1.828586196e-03f,
-1.821183758e-03f, 1.813778537e-03f, 1.806370545e-03f, 1.798959797e-03f, 1.791546304e-03f, 1.784130080e-03f, 1.776711137e-03f, 1.769289490e-03f, 1.761865150e-03f, 1.754438130e-03f,
-1.747008444e-03f, 1.739576104e-03f, 1.732141124e-03f, 1.724703516e-03f, 1.717263294e-03f, 1.709820470e-03f, 1.702375058e-03f, 1.694927070e-03f, 1.687476519e-03f, 1.680023419e-03f,
-1.672567782e-03f, 1.665109621e-03f, 1.657648950e-03f, 1.650185781e-03f, 1.642720128e-03f, 1.635252003e-03f, 1.627781420e-03f, 1.620308391e-03f, 1.612832930e-03f, 1.605355049e-03f,
-1.597874762e-03f, 1.590392082e-03f, 1.582907022e-03f, 1.575419594e-03f, 1.567929812e-03f, 1.560437689e-03f, 1.552943238e-03f, 1.545446472e-03f, 1.537947404e-03f, 1.530446047e-03f,
-1.522942414e-03f, 1.515436519e-03f, 1.507928374e-03f, 1.500417992e-03f, 1.492905387e-03f, 1.485390572e-03f, 1.477873560e-03f, 1.470354363e-03f, 1.462832995e-03f, 1.455309470e-03f,
-1.447783799e-03f, 1.440255997e-03f, 1.432726076e-03f, 1.425194050e-03f, 1.417659931e-03f, 1.410123733e-03f, 1.402585469e-03f, 1.395045152e-03f, 1.387502795e-03f, 1.379958411e-03f,
-1.372412014e-03f, 1.364863616e-03f, 1.357313231e-03f, 1.349760871e-03f, 1.342206551e-03f, 1.334650283e-03f, 1.327092080e-03f, 1.319531955e-03f, 1.311969922e-03f, 1.304405994e-03f,
-1.296840183e-03f, 1.289272504e-03f, 1.281702969e-03f, 1.274131591e-03f, 1.266558384e-03f, 1.258983361e-03f, 1.251406534e-03f, 1.243827918e-03f, 1.236247525e-03f, 1.228665369e-03f,
-1.221081462e-03f, 1.213495818e-03f, 1.205908450e-03f, 1.198319371e-03f, 1.190728595e-03f, 1.183136135e-03f, 1.175542003e-03f, 1.167946214e-03f, 1.160348779e-03f, 1.152749714e-03f,
-1.145149029e-03f, 1.137546740e-03f, 1.129942859e-03f, 1.122337399e-03f, 1.114730374e-03f, 1.107121797e-03f, 1.099511680e-03f, 1.091900038e-03f, 1.084286883e-03f, 1.076672229e-03f,
-1.069056089e-03f, 1.061438476e-03f, 1.053819404e-03f, 1.046198885e-03f, 1.038576933e-03f, 1.030953561e-03f, 1.023328782e-03f, 1.015702610e-03f, 1.008075058e-03f, 1.000446139e-03f,
-9.928158662e-04f, 9.851842531e-04f, 9.775513128e-04f, 9.699170585e-04f, 9.622815037e-04f, 9.546446614e-04f, 9.470065451e-04f, 9.393671678e-04f, 9.317265430e-04f, 9.240846838e-04f,
-9.164416036e-04f, 9.087973155e-04f, 9.011518329e-04f, 8.935051691e-04f, 8.858573373e-04f, 8.782083507e-04f, 8.705582227e-04f, 8.629069665e-04f, 8.552545954e-04f, 8.476011227e-04f,
-8.399465617e-04f, 8.322909256e-04f, 8.246342277e-04f, 8.169764813e-04f, 8.093176998e-04f, 8.016578963e-04f, 7.939970841e-04f, 7.863352766e-04f, 7.786724871e-04f, 7.710087288e-04f,
-7.633440150e-04f, 7.556783590e-04f, 7.480117741e-04f, 7.403442736e-04f, 7.326758708e-04f, 7.250065790e-04f, 7.173364115e-04f, 7.096653816e-04f, 7.019935025e-04f, 6.943207876e-04f,
-6.866472502e-04f, 6.789729035e-04f, 6.712977610e-04f, 6.636218358e-04f, 6.559451413e-04f, 6.482676908e-04f, 6.405894975e-04f, 6.329105749e-04f, 6.252309362e-04f, 6.175505946e-04f,
-6.098695636e-04f, 6.021878564e-04f, 5.945054863e-04f, 5.868224666e-04f, 5.791388107e-04f, 5.714545318e-04f, 5.637696433e-04f, 5.560841585e-04f, 5.483980906e-04f, 5.407114530e-04f,
-5.330242590e-04f, 5.253365219e-04f, 5.176482551e-04f, 5.099594717e-04f, 5.022701852e-04f, 4.945804089e-04f, 4.868901560e-04f, 4.791994399e-04f, 4.715082739e-04f, 4.638166713e-04f,
-4.561246454e-04f, 4.484322095e-04f, 4.407393770e-04f, 4.330461611e-04f, 4.253525752e-04f, 4.176586326e-04f, 4.099643465e-04f, 4.022697304e-04f, 3.945747974e-04f, 3.868795610e-04f,
-3.791840345e-04f, 3.714882311e-04f, 3.637921641e-04f, 3.560958470e-04f, 3.483992929e-04f, 3.407025152e-04f, 3.330055272e-04f, 3.253083423e-04f, 3.176109736e-04f, 3.099134347e-04f,
-3.022157386e-04f, 2.945178989e-04f, 2.868199286e-04f, 2.791218413e-04f, 2.714236502e-04f, 2.637253685e-04f, 2.560270097e-04f, 2.483285869e-04f, 2.406301136e-04f, 2.329316030e-04f,
-2.252330684e-04f, 2.175345231e-04f, 2.098359805e-04f, 2.021374538e-04f, 1.944389563e-04f, 1.867405013e-04f, 1.790421022e-04f, 1.713437723e-04f, 1.636455248e-04f, 1.559473730e-04f,
-1.482493302e-04f, 1.405514098e-04f, 1.328536250e-04f, 1.251559891e-04f, 1.174585154e-04f, 1.097612173e-04f, 1.020641079e-04f, 9.436720066e-05f, 8.667050878e-05f, 7.897404557e-05f,
-7.127782432e-05f, 6.358185831e-05f, 5.588616083e-05f, 4.819074518e-05f, 4.049562462e-05f, 3.280081245e-05f, 2.510632194e-05f, 1.741216638e-05f, 9.718359047e-06f, 2.024913214e-06f,
--5.668157842e-06f, -1.336084084e-05f, -2.105312252e-05f, -2.874498959e-05f, -3.643642879e-05f, -4.412742685e-05f, -5.181797050e-05f, -5.950804648e-05f, -6.719764151e-05f, -7.488674234e-05f,
--8.257533570e-05f, -9.026340833e-05f, -9.795094697e-05f, -1.056379384e-04f, -1.133243693e-04f, -1.210102264e-04f, -1.286954965e-04f, -1.363801664e-04f, -1.440642227e-04f, -1.517476523e-04f,
--1.594304419e-04f, -1.671125783e-04f, -1.747940481e-04f, -1.824748383e-04f, -1.901549354e-04f, -1.978343263e-04f, -2.055129978e-04f, -2.131909367e-04f, -2.208681296e-04f, -2.285445633e-04f,
--2.362202247e-04f, -2.438951006e-04f, -2.515691776e-04f, -2.592424425e-04f, -2.669148822e-04f, -2.745864835e-04f, -2.822572330e-04f, -2.899271177e-04f, -2.975961242e-04f, -3.052642394e-04f,
--3.129314501e-04f, -3.205977431e-04f, -3.282631051e-04f, -3.359275230e-04f, -3.435909835e-04f, -3.512534736e-04f, -3.589149799e-04f, -3.665754893e-04f, -3.742349886e-04f, -3.818934646e-04f,
--3.895509041e-04f, -3.972072940e-04f, -4.048626211e-04f, -4.125168721e-04f, -4.201700340e-04f, -4.278220936e-04f, -4.354730376e-04f, -4.431228529e-04f, -4.507715264e-04f, -4.584190449e-04f,
--4.660653952e-04f, -4.737105642e-04f, -4.813545387e-04f, -4.889973056e-04f, -4.966388517e-04f, -5.042791639e-04f, -5.119182290e-04f, -5.195560340e-04f, -5.271925656e-04f, -5.348278108e-04f,
--5.424617563e-04f, -5.500943891e-04f, -5.577256961e-04f, -5.653556641e-04f, -5.729842800e-04f, -5.806115308e-04f, -5.882374032e-04f, -5.958618841e-04f, -6.034849606e-04f, -6.111066194e-04f,
--6.187268474e-04f, -6.263456317e-04f, -6.339629590e-04f, -6.415788162e-04f, -6.491931904e-04f, -6.568060684e-04f, -6.644174371e-04f, -6.720272834e-04f, -6.796355943e-04f, -6.872423568e-04f,
--6.948475576e-04f, -7.024511838e-04f, -7.100532223e-04f, -7.176536601e-04f, -7.252524841e-04f, -7.328496812e-04f, -7.404452384e-04f, -7.480391426e-04f, -7.556313809e-04f, -7.632219401e-04f,
--7.708108072e-04f, -7.783979693e-04f, -7.859834133e-04f, -7.935671261e-04f, -8.011490947e-04f, -8.087293061e-04f, -8.163077474e-04f, -8.238844055e-04f, -8.314592673e-04f, -8.390323200e-04f,
--8.466035504e-04f, -8.541729457e-04f, -8.617404928e-04f, -8.693061786e-04f, -8.768699904e-04f, -8.844319150e-04f, -8.919919395e-04f, -8.995500509e-04f, -9.071062363e-04f, -9.146604827e-04f,
--9.222127771e-04f, -9.297631066e-04f, -9.373114582e-04f, -9.448578190e-04f, -9.524021761e-04f, -9.599445164e-04f, -9.674848272e-04f, -9.750230953e-04f, -9.825593080e-04f, -9.900934523e-04f,
--9.976255153e-04f, -1.005155484e-03f, -1.012683346e-03f, -1.020209087e-03f, -1.027732696e-03f, -1.035254158e-03f, -1.042773462e-03f, -1.050290595e-03f, -1.057805543e-03f, -1.065318293e-03f,
--1.072828833e-03f, -1.080337150e-03f, -1.087843231e-03f, -1.095347064e-03f, -1.102848634e-03f, -1.110347930e-03f, -1.117844939e-03f, -1.125339647e-03f, -1.132832042e-03f, -1.140322112e-03f,
--1.147809842e-03f, -1.155295221e-03f, -1.162778236e-03f, -1.170258873e-03f, -1.177737120e-03f, -1.185212965e-03f, -1.192686394e-03f, -1.200157394e-03f, -1.207625953e-03f, -1.215092059e-03f,
--1.222555697e-03f, -1.230016856e-03f, -1.237475523e-03f, -1.244931684e-03f, -1.252385328e-03f, -1.259836441e-03f, -1.267285011e-03f, -1.274731024e-03f, -1.282174469e-03f, -1.289615332e-03f,
--1.297053601e-03f, -1.304489263e-03f, -1.311922305e-03f, -1.319352715e-03f, -1.326780479e-03f, -1.334205586e-03f, -1.341628022e-03f, -1.349047775e-03f, -1.356464831e-03f, -1.363879179e-03f,
--1.371290806e-03f, -1.378699699e-03f, -1.386105845e-03f, -1.393509232e-03f, -1.400909846e-03f, -1.408307676e-03f, -1.415702709e-03f, -1.423094932e-03f, -1.430484332e-03f, -1.437870897e-03f,
--1.445254614e-03f, -1.452635471e-03f, -1.460013455e-03f, -1.467388553e-03f, -1.474760753e-03f, -1.482130042e-03f, -1.489496407e-03f, -1.496859837e-03f, -1.504220318e-03f, -1.511577837e-03f,
--1.518932383e-03f, -1.526283943e-03f, -1.533632503e-03f, -1.540978052e-03f, -1.548320578e-03f, -1.555660066e-03f, -1.562996506e-03f, -1.570329884e-03f, -1.577660188e-03f, -1.584987405e-03f,
--1.592311524e-03f, -1.599632530e-03f, -1.606950413e-03f, -1.614265159e-03f, -1.621576755e-03f, -1.628885191e-03f, -1.636190452e-03f, -1.643492526e-03f, -1.650791402e-03f, -1.658087066e-03f,
--1.665379506e-03f, -1.672668710e-03f, -1.679954666e-03f, -1.687237360e-03f, -1.694516780e-03f, -1.701792914e-03f, -1.709065750e-03f, -1.716335275e-03f, -1.723601477e-03f, -1.730864343e-03f,
--1.738123861e-03f, -1.745380019e-03f, -1.752632804e-03f, -1.759882203e-03f, -1.767128205e-03f, -1.774370798e-03f, -1.781609968e-03f, -1.788845703e-03f, -1.796077992e-03f, -1.803306821e-03f,
--1.810532179e-03f, -1.817754053e-03f, -1.824972431e-03f, -1.832187301e-03f, -1.839398649e-03f, -1.846606465e-03f, -1.853810735e-03f, -1.861011448e-03f, -1.868208590e-03f, -1.875402151e-03f,
--1.882592117e-03f, -1.889778477e-03f, -1.896961218e-03f, -1.904140327e-03f, -1.911315793e-03f, -1.918487604e-03f, -1.925655747e-03f, -1.932820210e-03f, -1.939980981e-03f, -1.947138047e-03f,
--1.954291397e-03f, -1.961441018e-03f, -1.968586898e-03f, -1.975729026e-03f, -1.982867388e-03f, -1.990001972e-03f, -1.997132767e-03f, -2.004259761e-03f, -2.011382940e-03f, -2.018502294e-03f,
--2.025617809e-03f, -2.032729475e-03f, -2.039837278e-03f, -2.046941207e-03f, -2.054041250e-03f, -2.061137394e-03f, -2.068229628e-03f, -2.075317939e-03f, -2.082402315e-03f, -2.089482744e-03f,
--2.096559215e-03f, -2.103631715e-03f, -2.110700232e-03f, -2.117764755e-03f, -2.124825270e-03f, -2.131881767e-03f, -2.138934233e-03f, -2.145982656e-03f, -2.153027024e-03f, -2.160067325e-03f,
--2.167103548e-03f, -2.174135680e-03f, -2.181163709e-03f, -2.188187624e-03f, -2.195207412e-03f, -2.202223061e-03f, -2.209234561e-03f, -2.216241898e-03f, -2.223245060e-03f, -2.230244037e-03f,
--2.237238816e-03f, -2.244229384e-03f, -2.251215731e-03f, -2.258197845e-03f, -2.265175713e-03f, -2.272149323e-03f, -2.279118665e-03f, -2.286083725e-03f, -2.293044493e-03f, -2.300000956e-03f,
--2.306953103e-03f, -2.313900921e-03f, -2.320844399e-03f, -2.327783526e-03f, -2.334718289e-03f, -2.341648676e-03f, -2.348574677e-03f, -2.355496278e-03f, -2.362413469e-03f, -2.369326238e-03f,
--2.376234572e-03f, -2.383138461e-03f, -2.390037892e-03f, -2.396932854e-03f, -2.403823335e-03f, -2.410709324e-03f, -2.417590808e-03f, -2.424467776e-03f, -2.431340217e-03f, -2.438208118e-03f,
--2.445071469e-03f, -2.451930257e-03f, -2.458784470e-03f, -2.465634098e-03f, -2.472479129e-03f, -2.479319550e-03f, -2.486155351e-03f, -2.492986520e-03f, -2.499813045e-03f, -2.506634915e-03f,
--2.513452117e-03f, -2.520264642e-03f, -2.527072476e-03f, -2.533875609e-03f, -2.540674029e-03f, -2.547467724e-03f, -2.554256683e-03f, -2.561040895e-03f, -2.567820348e-03f, -2.574595030e-03f,
--2.581364930e-03f, -2.588130036e-03f, -2.594890338e-03f, -2.601645823e-03f, -2.608396481e-03f, -2.615142299e-03f, -2.621883267e-03f, -2.628619373e-03f, -2.635350605e-03f, -2.642076952e-03f,
--2.648798403e-03f, -2.655514947e-03f, -2.662226571e-03f, -2.668933265e-03f, -2.675635018e-03f, -2.682331817e-03f, -2.689023652e-03f, -2.695710512e-03f, -2.702392384e-03f, -2.709069259e-03f,
--2.715741123e-03f, -2.722407967e-03f, -2.729069779e-03f, -2.735726547e-03f, -2.742378261e-03f, -2.749024909e-03f, -2.755666479e-03f, -2.762302962e-03f, -2.768934344e-03f, -2.775560616e-03f,
--2.782181767e-03f, -2.788797783e-03f, -2.795408656e-03f, -2.802014373e-03f, -2.808614923e-03f, -2.815210296e-03f, -2.821800479e-03f, -2.828385463e-03f, -2.834965235e-03f, -2.841539785e-03f,
--2.848109101e-03f, -2.854673173e-03f, -2.861231990e-03f, -2.867785539e-03f, -2.874333811e-03f, -2.880876794e-03f, -2.887414477e-03f, -2.893946849e-03f, -2.900473900e-03f, -2.906995617e-03f,
--2.913511991e-03f, -2.920023009e-03f, -2.926528662e-03f, -2.933028937e-03f, -2.939523825e-03f, -2.946013314e-03f, -2.952497393e-03f, -2.958976051e-03f, -2.965449278e-03f, -2.971917062e-03f,
--2.978379393e-03f, -2.984836259e-03f, -2.991287650e-03f, -2.997733555e-03f, -3.004173963e-03f, -3.010608863e-03f, -3.017038244e-03f, -3.023462096e-03f, -3.029880407e-03f, -3.036293167e-03f,
--3.042700366e-03f, -3.049101991e-03f, -3.055498032e-03f, -3.061888480e-03f, -3.068273322e-03f, -3.074652548e-03f, -3.081026147e-03f, -3.087394110e-03f, -3.093756424e-03f, -3.100113079e-03f,
--3.106464064e-03f, -3.112809370e-03f, -3.119148984e-03f, -3.125482897e-03f, -3.131811098e-03f, -3.138133576e-03f, -3.144450320e-03f, -3.150761320e-03f, -3.157066565e-03f, -3.163366044e-03f,
--3.169659748e-03f, -3.175947665e-03f, -3.182229785e-03f, -3.188506097e-03f, -3.194776591e-03f, -3.201041256e-03f, -3.207300081e-03f, -3.213553056e-03f, -3.219800171e-03f, -3.226041415e-03f,
--3.232276778e-03f, -3.238506249e-03f, -3.244729817e-03f, -3.250947472e-03f, -3.257159204e-03f, -3.263365002e-03f, -3.269564856e-03f, -3.275758755e-03f, -3.281946689e-03f, -3.288128648e-03f,
--3.294304621e-03f, -3.300474598e-03f, -3.306638568e-03f, -3.312796521e-03f, -3.318948447e-03f, -3.325094335e-03f, -3.331234175e-03f, -3.337367957e-03f, -3.343495670e-03f, -3.349617305e-03f,
--3.355732850e-03f, -3.361842297e-03f, -3.367945633e-03f, -3.374042849e-03f, -3.380133936e-03f, -3.386218882e-03f, -3.392297677e-03f, -3.398370312e-03f, -3.404436776e-03f, -3.410497058e-03f,
--3.416551149e-03f, -3.422599039e-03f, -3.428640717e-03f, -3.434676173e-03f, -3.440705398e-03f, -3.446728380e-03f, -3.452745111e-03f, -3.458755579e-03f, -3.464759775e-03f, -3.470757689e-03f,
--3.476749310e-03f, -3.482734629e-03f, -3.488713635e-03f, -3.494686319e-03f, -3.500652671e-03f, -3.506612680e-03f, -3.512566336e-03f, -3.518513630e-03f, -3.524454552e-03f, -3.530389091e-03f,
--3.536317238e-03f, -3.542238983e-03f, -3.548154315e-03f, -3.554063226e-03f, -3.559965704e-03f, -3.565861741e-03f, -3.571751326e-03f, -3.577634449e-03f, -3.583511101e-03f, -3.589381272e-03f,
--3.595244952e-03f, -3.601102130e-03f, -3.606952799e-03f, -3.612796946e-03f, -3.618634563e-03f, -3.624465641e-03f, -3.630290168e-03f, -3.636108136e-03f, -3.641919535e-03f, -3.647724355e-03f,
--3.653522586e-03f, -3.659314218e-03f, -3.665099243e-03f, -3.670877650e-03f, -3.676649430e-03f, -3.682414572e-03f, -3.688173068e-03f, -3.693924907e-03f, -3.699670081e-03f, -3.705408579e-03f,
--3.711140392e-03f, -3.716865510e-03f, -3.722583924e-03f, -3.728295624e-03f, -3.734000601e-03f, -3.739698845e-03f, -3.745390347e-03f, -3.751075097e-03f, -3.756753085e-03f, -3.762424303e-03f,
--3.768088740e-03f, -3.773746387e-03f, -3.779397236e-03f, -3.785041275e-03f, -3.790678497e-03f, -3.796308891e-03f, -3.801932448e-03f, -3.807549159e-03f, -3.813159014e-03f, -3.818762005e-03f,
--3.824358121e-03f, -3.829947353e-03f, -3.835529693e-03f, -3.841105130e-03f, -3.846673656e-03f, -3.852235260e-03f, -3.857789935e-03f, -3.863337670e-03f, -3.868878457e-03f, -3.874412286e-03f,
--3.879939147e-03f, -3.885459033e-03f, -3.890971933e-03f, -3.896477838e-03f, -3.901976740e-03f, -3.907468628e-03f, -3.912953494e-03f, -3.918431329e-03f, -3.923902124e-03f, -3.929365869e-03f,
--3.934822556e-03f, -3.940272175e-03f, -3.945714717e-03f, -3.951150173e-03f, -3.956578535e-03f, -3.961999792e-03f, -3.967413937e-03f, -3.972820960e-03f, -3.978220852e-03f, -3.983613604e-03f,
--3.988999207e-03f, -3.994377652e-03f, -3.999748931e-03f, -4.005113034e-03f, -4.010469953e-03f, -4.015819678e-03f, -4.021162200e-03f, -4.026497512e-03f, -4.031825603e-03f, -4.037146465e-03f,
--4.042460089e-03f, -4.047766467e-03f, -4.053065589e-03f, -4.058357448e-03f, -4.063642033e-03f, -4.068919336e-03f, -4.074189348e-03f, -4.079452062e-03f, -4.084707467e-03f, -4.089955556e-03f,
--4.095196319e-03f, -4.100429747e-03f, -4.105655833e-03f, -4.110874568e-03f, -4.116085942e-03f, -4.121289947e-03f, -4.126486575e-03f, -4.131675817e-03f, -4.136857664e-03f, -4.142032108e-03f,
--4.147199140e-03f, -4.152358752e-03f, -4.157510934e-03f, -4.162655679e-03f, -4.167792978e-03f, -4.172922823e-03f, -4.178045205e-03f, -4.183160114e-03f, -4.188267544e-03f, -4.193367486e-03f,
--4.198459931e-03f, -4.203544870e-03f, -4.208622295e-03f, -4.213692199e-03f, -4.218754572e-03f, -4.223809406e-03f, -4.228856692e-03f, -4.233896423e-03f, -4.238928590e-03f, -4.243953185e-03f,
--4.248970199e-03f, -4.253979624e-03f, -4.258981452e-03f, -4.263975675e-03f, -4.268962284e-03f, -4.273941270e-03f, -4.278912627e-03f, -4.283876345e-03f, -4.288832417e-03f, -4.293780834e-03f,
--4.298721588e-03f, -4.303654671e-03f, -4.308580074e-03f, -4.313497791e-03f, -4.318407811e-03f, -4.323310128e-03f, -4.328204733e-03f, -4.333091619e-03f, -4.337970776e-03f, -4.342842198e-03f,
--4.347705876e-03f, -4.352561802e-03f, -4.357409967e-03f, -4.362250365e-03f, -4.367082987e-03f, -4.371907825e-03f, -4.376724871e-03f, -4.381534117e-03f, -4.386335555e-03f, -4.391129178e-03f,
--4.395914977e-03f, -4.400692944e-03f, -4.405463073e-03f, -4.410225354e-03f, -4.414979780e-03f, -4.419726343e-03f, -4.424465036e-03f, -4.429195850e-03f, -4.433918778e-03f, -4.438633811e-03f,
--4.443340943e-03f, -4.448040166e-03f, -4.452731471e-03f, -4.457414851e-03f, -4.462090299e-03f, -4.466757806e-03f, -4.471417365e-03f, -4.476068968e-03f, -4.480712608e-03f, -4.485348277e-03f,
--4.489975968e-03f, -4.494595672e-03f, -4.499207382e-03f, -4.503811091e-03f, -4.508406791e-03f, -4.512994474e-03f, -4.517574134e-03f, -4.522145762e-03f, -4.526709351e-03f, -4.531264893e-03f,
--4.535812381e-03f, -4.540351808e-03f, -4.544883166e-03f, -4.549406447e-03f, -4.553921645e-03f, -4.558428752e-03f, -4.562927760e-03f, -4.567418662e-03f, -4.571901450e-03f, -4.576376118e-03f,
--4.580842658e-03f, -4.585301063e-03f, -4.589751325e-03f, -4.594193437e-03f, -4.598627392e-03f, -4.603053183e-03f, -4.607470801e-03f, -4.611880241e-03f, -4.616281495e-03f, -4.620674556e-03f,
--4.625059415e-03f, -4.629436068e-03f, -4.633804505e-03f, -4.638164720e-03f, -4.642516706e-03f, -4.646860456e-03f, -4.651195963e-03f, -4.655523219e-03f, -4.659842218e-03f, -4.664152952e-03f,
--4.668455414e-03f, -4.672749598e-03f, -4.677035496e-03f, -4.681313101e-03f, -4.685582407e-03f, -4.689843406e-03f, -4.694096092e-03f, -4.698340457e-03f, -4.702576495e-03f, -4.706804198e-03f,
--4.711023560e-03f, -4.715234574e-03f, -4.719437233e-03f, -4.723631530e-03f, -4.727817459e-03f, -4.731995012e-03f, -4.736164183e-03f, -4.740324964e-03f, -4.744477350e-03f, -4.748621333e-03f,
--4.752756907e-03f, -4.756884064e-03f, -4.761002799e-03f, -4.765113105e-03f, -4.769214974e-03f, -4.773308400e-03f, -4.777393376e-03f, -4.781469897e-03f, -4.785537954e-03f, -4.789597543e-03f,
--4.793648655e-03f, -4.797691284e-03f, -4.801725424e-03f, -4.805751069e-03f, -4.809768211e-03f, -4.813776845e-03f, -4.817776963e-03f, -4.821768559e-03f, -4.825751627e-03f, -4.829726161e-03f,
--4.833692153e-03f, -4.837649597e-03f, -4.841598488e-03f, -4.845538818e-03f, -4.849470581e-03f, -4.853393771e-03f, -4.857308381e-03f, -4.861214405e-03f, -4.865111838e-03f, -4.869000671e-03f,
--4.872880900e-03f, -4.876752518e-03f, -4.880615518e-03f, -4.884469895e-03f, -4.888315641e-03f, -4.892152752e-03f, -4.895981220e-03f, -4.899801040e-03f, -4.903612205e-03f, -4.907414709e-03f,
--4.911208547e-03f, -4.914993711e-03f, -4.918770196e-03f, -4.922537995e-03f, -4.926297104e-03f, -4.930047514e-03f, -4.933789222e-03f, -4.937522219e-03f, -4.941246501e-03f, -4.944962062e-03f,
--4.948668894e-03f, -4.952366994e-03f, -4.956056353e-03f, -4.959736968e-03f, -4.963408831e-03f, -4.967071936e-03f, -4.970726278e-03f, -4.974371852e-03f, -4.978008650e-03f, -4.981636667e-03f,
--4.985255898e-03f, -4.988866336e-03f, -4.992467976e-03f, -4.996060812e-03f, -4.999644838e-03f, -5.003220049e-03f, -5.006786438e-03f, -5.010344000e-03f, -5.013892729e-03f, -5.017432619e-03f,
--5.020963666e-03f, -5.024485863e-03f, -5.027999204e-03f, -5.031503684e-03f, -5.034999297e-03f, -5.038486038e-03f, -5.041963901e-03f, -5.045432880e-03f, -5.048892970e-03f, -5.052344166e-03f,
--5.055786461e-03f, -5.059219851e-03f, -5.062644330e-03f, -5.066059892e-03f, -5.069466532e-03f, -5.072864244e-03f, -5.076253024e-03f, -5.079632865e-03f, -5.083003762e-03f, -5.086365710e-03f,
--5.089718704e-03f, -5.093062737e-03f, -5.096397806e-03f, -5.099723904e-03f, -5.103041025e-03f, -5.106349166e-03f, -5.109648320e-03f, -5.112938483e-03f, -5.116219649e-03f, -5.119491812e-03f,
--5.122754968e-03f, -5.126009112e-03f, -5.129254238e-03f, -5.132490341e-03f, -5.135717415e-03f, -5.138935457e-03f, -5.142144460e-03f, -5.145344420e-03f, -5.148535332e-03f, -5.151717189e-03f,
--5.154889988e-03f, -5.158053724e-03f, -5.161208391e-03f, -5.164353984e-03f, -5.167490498e-03f, -5.170617929e-03f, -5.173736271e-03f, -5.176845520e-03f, -5.179945670e-03f, -5.183036717e-03f,
--5.186118655e-03f, -5.189191481e-03f, -5.192255188e-03f, -5.195309772e-03f, -5.198355229e-03f, -5.201391553e-03f, -5.204418740e-03f, -5.207436785e-03f, -5.210445683e-03f, -5.213445430e-03f,
--5.216436020e-03f, -5.219417449e-03f, -5.222389712e-03f, -5.225352805e-03f, -5.228306722e-03f, -5.231251460e-03f, -5.234187014e-03f, -5.237113378e-03f, -5.240030549e-03f, -5.242938522e-03f,
--5.245837291e-03f, -5.248726854e-03f, -5.251607205e-03f, -5.254478339e-03f, -5.257340252e-03f, -5.260192940e-03f, -5.263036398e-03f, -5.265870621e-03f, -5.268695606e-03f, -5.271511348e-03f,
--5.274317842e-03f, -5.277115084e-03f, -5.279903069e-03f, -5.282681794e-03f, -5.285451254e-03f, -5.288211444e-03f, -5.290962361e-03f, -5.293703999e-03f, -5.296436355e-03f, -5.299159425e-03f,
--5.301873203e-03f, -5.304577687e-03f, -5.307272871e-03f, -5.309958752e-03f, -5.312635325e-03f, -5.315302586e-03f, -5.317960531e-03f, -5.320609157e-03f, -5.323248457e-03f, -5.325878430e-03f,
--5.328499070e-03f, -5.331110373e-03f, -5.333712336e-03f, -5.336304955e-03f, -5.338888225e-03f, -5.341462142e-03f, -5.344026702e-03f, -5.346581902e-03f, -5.349127738e-03f, -5.351664204e-03f,
--5.354191299e-03f, -5.356709017e-03f, -5.359217355e-03f, -5.361716309e-03f, -5.364205875e-03f, -5.366686049e-03f, -5.369156828e-03f, -5.371618207e-03f, -5.374070183e-03f, -5.376512752e-03f,
--5.378945911e-03f, -5.381369654e-03f, -5.383783980e-03f, -5.386188884e-03f, -5.388584362e-03f, -5.390970411e-03f, -5.393347027e-03f, -5.395714206e-03f, -5.398071946e-03f, -5.400420241e-03f,
--5.402759089e-03f, -5.405088486e-03f, -5.407408429e-03f, -5.409718913e-03f, -5.412019936e-03f, -5.414311494e-03f, -5.416593583e-03f, -5.418866200e-03f, -5.421129341e-03f, -5.423383003e-03f,
--5.425627183e-03f, -5.427861878e-03f, -5.430087083e-03f, -5.432302795e-03f, -5.434509011e-03f, -5.436705728e-03f, -5.438892943e-03f, -5.441070651e-03f, -5.443238850e-03f, -5.445397537e-03f,
--5.447546707e-03f, -5.449686359e-03f, -5.451816489e-03f, -5.453937093e-03f, -5.456048168e-03f, -5.458149711e-03f, -5.460241720e-03f, -5.462324190e-03f, -5.464397119e-03f, -5.466460504e-03f,
--5.468514341e-03f, -5.470558627e-03f, -5.472593360e-03f, -5.474618536e-03f, -5.476634152e-03f, -5.478640206e-03f, -5.480636694e-03f, -5.482623613e-03f, -5.484600960e-03f, -5.486568733e-03f,
--5.488526929e-03f, -5.490475543e-03f, -5.492414575e-03f, -5.494344020e-03f, -5.496263876e-03f, -5.498174140e-03f, -5.500074810e-03f, -5.501965881e-03f, -5.503847353e-03f, -5.505719221e-03f,
--5.507581483e-03f, -5.509434137e-03f, -5.511277179e-03f, -5.513110607e-03f, -5.514934418e-03f, -5.516748610e-03f, -5.518553180e-03f, -5.520348125e-03f, -5.522133442e-03f, -5.523909129e-03f,
--5.525675184e-03f, -5.527431603e-03f, -5.529178385e-03f, -5.530915526e-03f, -5.532643025e-03f, -5.534360878e-03f, -5.536069083e-03f, -5.537767638e-03f, -5.539456541e-03f, -5.541135788e-03f,
--5.542805377e-03f, -5.544465306e-03f, -5.546115573e-03f, -5.547756175e-03f, -5.549387110e-03f, -5.551008375e-03f, -5.552619968e-03f, -5.554221887e-03f, -5.555814130e-03f, -5.557396694e-03f,
--5.558969577e-03f, -5.560532776e-03f, -5.562086290e-03f, -5.563630117e-03f, -5.565164253e-03f, -5.566688698e-03f, -5.568203448e-03f, -5.569708502e-03f, -5.571203858e-03f, -5.572689513e-03f,
--5.574165465e-03f, -5.575631713e-03f, -5.577088253e-03f, -5.578535085e-03f, -5.579972206e-03f, -5.581399615e-03f, -5.582817308e-03f, -5.584225284e-03f, -5.585623542e-03f, -5.587012079e-03f,
--5.588390893e-03f, -5.589759983e-03f, -5.591119347e-03f, -5.592468982e-03f, -5.593808887e-03f, -5.595139059e-03f, -5.596459499e-03f, -5.597770202e-03f, -5.599071168e-03f, -5.600362395e-03f,
--5.601643881e-03f, -5.602915624e-03f, -5.604177623e-03f, -5.605429876e-03f, -5.606672381e-03f, -5.607905137e-03f, -5.609128141e-03f, -5.610341393e-03f, -5.611544890e-03f, -5.612738632e-03f,
--5.613922616e-03f, -5.615096841e-03f, -5.616261305e-03f, -5.617416007e-03f, -5.618560946e-03f, -5.619696119e-03f, -5.620821526e-03f, -5.621937164e-03f, -5.623043033e-03f, -5.624139131e-03f,
--5.625225456e-03f, -5.626302008e-03f, -5.627368785e-03f, -5.628425784e-03f, -5.629473006e-03f, -5.630510449e-03f, -5.631538111e-03f, -5.632555992e-03f, -5.633564089e-03f, -5.634562402e-03f,
--5.635550929e-03f, -5.636529670e-03f, -5.637498622e-03f, -5.638457785e-03f, -5.639407158e-03f, -5.640346739e-03f, -5.641276527e-03f, -5.642196522e-03f, -5.643106721e-03f, -5.644007125e-03f,
--5.644897731e-03f, -5.645778539e-03f, -5.646649548e-03f, -5.647510757e-03f, -5.648362164e-03f, -5.649203769e-03f, -5.650035571e-03f, -5.650857569e-03f, -5.651669762e-03f, -5.652472148e-03f,
--5.653264728e-03f, -5.654047500e-03f, -5.654820463e-03f, -5.655583617e-03f, -5.656336960e-03f, -5.657080492e-03f, -5.657814212e-03f, -5.658538119e-03f, -5.659252213e-03f, -5.659956492e-03f,
--5.660650957e-03f, -5.661335605e-03f, -5.662010437e-03f, -5.662675452e-03f, -5.663330649e-03f, -5.663976028e-03f, -5.664611588e-03f, -5.665237327e-03f, -5.665853247e-03f, -5.666459346e-03f,
--5.667055623e-03f, -5.667642078e-03f, -5.668218711e-03f, -5.668785520e-03f, -5.669342506e-03f, -5.669889668e-03f, -5.670427006e-03f, -5.670954519e-03f, -5.671472206e-03f, -5.671980067e-03f,
--5.672478103e-03f, -5.672966312e-03f, -5.673444693e-03f, -5.673913248e-03f, -5.674371975e-03f, -5.674820874e-03f, -5.675259945e-03f, -5.675689188e-03f, -5.676108602e-03f, -5.676518187e-03f,
--5.676917942e-03f, -5.677307869e-03f, -5.677687965e-03f, -5.678058232e-03f, -5.678418670e-03f, -5.678769277e-03f, -5.679110054e-03f, -5.679441000e-03f, -5.679762116e-03f, -5.680073402e-03f,
--5.680374858e-03f, -5.680666483e-03f, -5.680948277e-03f, -5.681220241e-03f, -5.681482374e-03f, -5.681734677e-03f, -5.681977149e-03f, -5.682209791e-03f, -5.682432602e-03f, -5.682645584e-03f,
--5.682848735e-03f, -5.683042056e-03f, -5.683225548e-03f, -5.683399209e-03f, -5.683563042e-03f, -5.683717045e-03f, -5.683861219e-03f, -5.683995564e-03f, -5.684120081e-03f, -5.684234769e-03f,
--5.684339629e-03f, -5.684434662e-03f, -5.684519867e-03f, -5.684595246e-03f, -5.684660797e-03f, -5.684716522e-03f, -5.684762422e-03f, -5.684798495e-03f, -5.684824744e-03f, -5.684841168e-03f,
--5.684847767e-03f, -5.684844543e-03f, -5.684831496e-03f, -5.684808626e-03f, -5.684775934e-03f, -5.684733420e-03f, -5.684681084e-03f, -5.684618929e-03f, -5.684546953e-03f, -5.684465158e-03f,
--5.684373544e-03f, -5.684272112e-03f, -5.684160863e-03f, -5.684039796e-03f, -5.683908914e-03f, -5.683768217e-03f, -5.683617704e-03f, -5.683457378e-03f, -5.683287239e-03f, -5.683107287e-03f,
--5.682917524e-03f, -5.682717950e-03f, -5.682508566e-03f, -5.682289373e-03f, -5.682060372e-03f, -5.681821563e-03f, -5.681572948e-03f, -5.681314527e-03f, -5.681046302e-03f, -5.680768273e-03f,
--5.680480442e-03f, -5.680182808e-03f, -5.679875374e-03f, -5.679558140e-03f, -5.679231108e-03f, -5.678894278e-03f, -5.678547651e-03f, -5.678191229e-03f, -5.677825012e-03f, -5.677449002e-03f,
--5.677063200e-03f, -5.676667607e-03f, -5.676262224e-03f, -5.675847053e-03f, -5.675422094e-03f, -5.674987348e-03f, -5.674542818e-03f, -5.674088504e-03f, -5.673624408e-03f, -5.673150530e-03f,
--5.672666872e-03f, -5.672173436e-03f, -5.671670222e-03f, -5.671157233e-03f, -5.670634469e-03f, -5.670101932e-03f, -5.669559623e-03f, -5.669007543e-03f, -5.668445695e-03f, -5.667874080e-03f,
--5.667292698e-03f, -5.666701552e-03f, -5.666100643e-03f, -5.665489972e-03f, -5.664869541e-03f, -5.664239352e-03f, -5.663599407e-03f, -5.662949706e-03f, -5.662290251e-03f, -5.661621044e-03f,
--5.660942087e-03f, -5.660253381e-03f, -5.659554928e-03f, -5.658846730e-03f, -5.658128788e-03f, -5.657401104e-03f, -5.656663680e-03f, -5.655916517e-03f, -5.655159618e-03f, -5.654392984e-03f,
--5.653616616e-03f, -5.652830518e-03f, -5.652034690e-03f, -5.651229134e-03f, -5.650413853e-03f, -5.649588847e-03f, -5.648754120e-03f, -5.647909673e-03f, -5.647055508e-03f, -5.646191626e-03f,
--5.645318031e-03f, -5.644434723e-03f, -5.643541705e-03f, -5.642638979e-03f, -5.641726547e-03f, -5.640804411e-03f, -5.639872573e-03f, -5.638931035e-03f, -5.637979799e-03f, -5.637018868e-03f,
--5.636048243e-03f, -5.635067926e-03f, -5.634077921e-03f, -5.633078228e-03f, -5.632068851e-03f, -5.631049791e-03f, -5.630021050e-03f, -5.628982632e-03f, -5.627934537e-03f, -5.626876769e-03f,
--5.625809330e-03f, -5.624732222e-03f, -5.623645448e-03f, -5.622549009e-03f, -5.621442908e-03f, -5.620327148e-03f, -5.619201731e-03f, -5.618066659e-03f, -5.616921935e-03f, -5.615767561e-03f,
--5.614603540e-03f, -5.613429874e-03f, -5.612246565e-03f, -5.611053617e-03f, -5.609851032e-03f, -5.608638812e-03f, -5.607416960e-03f, -5.606185478e-03f, -5.604944369e-03f, -5.603693636e-03f,
--5.602433281e-03f, -5.601163308e-03f, -5.599883718e-03f, -5.598594514e-03f, -5.597295699e-03f, -5.595987276e-03f, -5.594669247e-03f, -5.593341616e-03f, -5.592004384e-03f, -5.590657556e-03f,
--5.589301133e-03f, -5.587935118e-03f, -5.586559514e-03f, -5.585174325e-03f, -5.583779552e-03f, -5.582375200e-03f, -5.580961270e-03f, -5.579537765e-03f, -5.578104689e-03f, -5.576662045e-03f,
--5.575209835e-03f, -5.573748062e-03f, -5.572276730e-03f, -5.570795842e-03f, -5.569305399e-03f, -5.567805407e-03f, -5.566295867e-03f, -5.564776782e-03f, -5.563248157e-03f, -5.561709993e-03f,
--5.560162294e-03f, -5.558605063e-03f, -5.557038304e-03f, -5.555462019e-03f, -5.553876212e-03f, -5.552280885e-03f, -5.550676043e-03f, -5.549061688e-03f, -5.547437823e-03f, -5.545804453e-03f,
--5.544161580e-03f, -5.542509207e-03f, -5.540847338e-03f, -5.539175976e-03f, -5.537495124e-03f, -5.535804786e-03f, -5.534104966e-03f, -5.532395666e-03f, -5.530676890e-03f, -5.528948642e-03f,
--5.527210925e-03f, -5.525463742e-03f, -5.523707097e-03f, -5.521940993e-03f, -5.520165435e-03f, -5.518380424e-03f, -5.516585966e-03f, -5.514782063e-03f, -5.512968720e-03f, -5.511145939e-03f,
--5.509313725e-03f, -5.507472080e-03f, -5.505621010e-03f, -5.503760516e-03f, -5.501890604e-03f, -5.500011276e-03f, -5.498122536e-03f, -5.496224389e-03f, -5.494316837e-03f, -5.492399886e-03f,
--5.490473537e-03f, -5.488537796e-03f, -5.486592665e-03f, -5.484638150e-03f, -5.482674253e-03f, -5.480700979e-03f, -5.478718330e-03f, -5.476726313e-03f, -5.474724929e-03f, -5.472714183e-03f,
--5.470694080e-03f, -5.468664622e-03f, -5.466625815e-03f, -5.464577661e-03f, -5.462520165e-03f, -5.460453331e-03f, -5.458377163e-03f, -5.456291665e-03f, -5.454196842e-03f, -5.452092696e-03f,
--5.449979232e-03f, -5.447856455e-03f, -5.445724369e-03f, -5.443582976e-03f, -5.441432283e-03f, -5.439272293e-03f, -5.437103010e-03f, -5.434924438e-03f, -5.432736582e-03f, -5.430539445e-03f,
--5.428333033e-03f, -5.426117349e-03f, -5.423892397e-03f, -5.421658183e-03f, -5.419414709e-03f, -5.417161982e-03f, -5.414900004e-03f, -5.412628780e-03f, -5.410348315e-03f, -5.408058613e-03f,
--5.405759679e-03f, -5.403451516e-03f, -5.401134130e-03f, -5.398807524e-03f, -5.396471704e-03f, -5.394126674e-03f, -5.391772438e-03f, -5.389409000e-03f, -5.387036366e-03f, -5.384654540e-03f,
--5.382263526e-03f, -5.379863329e-03f, -5.377453954e-03f, -5.375035405e-03f, -5.372607687e-03f, -5.370170804e-03f, -5.367724762e-03f, -5.365269564e-03f, -5.362805216e-03f, -5.360331722e-03f,
--5.357849087e-03f, -5.355357316e-03f, -5.352856413e-03f, -5.350346384e-03f, -5.347827232e-03f, -5.345298963e-03f, -5.342761582e-03f, -5.340215094e-03f, -5.337659503e-03f, -5.335094814e-03f,
--5.332521032e-03f, -5.329938161e-03f, -5.327346208e-03f, -5.324745177e-03f, -5.322135072e-03f, -5.319515899e-03f, -5.316887663e-03f, -5.314250368e-03f, -5.311604020e-03f, -5.308948624e-03f,
--5.306284184e-03f, -5.303610706e-03f, -5.300928195e-03f, -5.298236656e-03f, -5.295536094e-03f, -5.292826514e-03f, -5.290107921e-03f, -5.287380320e-03f, -5.284643717e-03f, -5.281898117e-03f,
--5.279143525e-03f, -5.276379945e-03f, -5.273607384e-03f, -5.270825847e-03f, -5.268035338e-03f, -5.265235863e-03f, -5.262427428e-03f, -5.259610037e-03f, -5.256783696e-03f, -5.253948411e-03f,
--5.251104186e-03f, -5.248251027e-03f, -5.245388939e-03f, -5.242517928e-03f, -5.239637999e-03f, -5.236749158e-03f, -5.233851409e-03f, -5.230944759e-03f, -5.228029213e-03f, -5.225104776e-03f,
--5.222171454e-03f, -5.219229252e-03f, -5.216278176e-03f, -5.213318232e-03f, -5.210349424e-03f, -5.207371759e-03f, -5.204385242e-03f, -5.201389878e-03f, -5.198385674e-03f, -5.195372635e-03f,
--5.192350766e-03f, -5.189320074e-03f, -5.186280563e-03f, -5.183232240e-03f, -5.180175110e-03f, -5.177109180e-03f, -5.174034454e-03f, -5.170950938e-03f, -5.167858639e-03f, -5.164757561e-03f,
--5.161647712e-03f, -5.158529095e-03f, -5.155401719e-03f, -5.152265587e-03f, -5.149120707e-03f, -5.145967084e-03f, -5.142804723e-03f, -5.139633631e-03f, -5.136453814e-03f, -5.133265278e-03f,
--5.130068028e-03f, -5.126862070e-03f, -5.123647411e-03f, -5.120424056e-03f, -5.117192012e-03f, -5.113951284e-03f, -5.110701878e-03f, -5.107443801e-03f, -5.104177059e-03f, -5.100901657e-03f,
--5.097617601e-03f, -5.094324899e-03f, -5.091023556e-03f, -5.087713577e-03f, -5.084394970e-03f, -5.081067740e-03f, -5.077731894e-03f, -5.074387437e-03f, -5.071034376e-03f, -5.067672717e-03f,
--5.064302467e-03f, -5.060923631e-03f, -5.057536217e-03f, -5.054140229e-03f, -5.050735675e-03f, -5.047322560e-03f, -5.043900892e-03f, -5.040470676e-03f, -5.037031918e-03f, -5.033584626e-03f,
--5.030128805e-03f, -5.026664462e-03f, -5.023191604e-03f, -5.019710236e-03f, -5.016220365e-03f, -5.012721998e-03f, -5.009215141e-03f, -5.005699800e-03f, -5.002175982e-03f, -4.998643694e-03f,
--4.995102942e-03f, -4.991553733e-03f, -4.987996072e-03f, -4.984429967e-03f, -4.980855425e-03f, -4.977272451e-03f, -4.973681053e-03f, -4.970081237e-03f, -4.966473009e-03f, -4.962856377e-03f,
--4.959231347e-03f, -4.955597926e-03f, -4.951956120e-03f, -4.948305936e-03f, -4.944647381e-03f, -4.940980462e-03f, -4.937305185e-03f, -4.933621557e-03f, -4.929929584e-03f, -4.926229275e-03f,
--4.922520634e-03f, -4.918803670e-03f, -4.915078389e-03f, -4.911344798e-03f, -4.907602904e-03f, -4.903852714e-03f, -4.900094234e-03f, -4.896327471e-03f, -4.892552433e-03f, -4.888769126e-03f,
--4.884977558e-03f, -4.881177734e-03f, -4.877369663e-03f, -4.873553351e-03f, -4.869728805e-03f, -4.865896032e-03f, -4.862055039e-03f, -4.858205834e-03f, -4.854348423e-03f, -4.850482813e-03f,
--4.846609012e-03f, -4.842727027e-03f, -4.838836864e-03f, -4.834938530e-03f, -4.831032034e-03f, -4.827117382e-03f, -4.823194581e-03f, -4.819263638e-03f, -4.815324561e-03f, -4.811377357e-03f,
--4.807422033e-03f, -4.803458596e-03f, -4.799487054e-03f, -4.795507413e-03f, -4.791519682e-03f, -4.787523866e-03f, -4.783519975e-03f, -4.779508014e-03f, -4.775487992e-03f, -4.771459916e-03f,
--4.767423792e-03f, -4.763379629e-03f, -4.759327433e-03f, -4.755267213e-03f, -4.751198975e-03f, -4.747122727e-03f, -4.743038477e-03f, -4.738946231e-03f, -4.734845998e-03f, -4.730737784e-03f,
--4.726621598e-03f, -4.722497447e-03f, -4.718365338e-03f, -4.714225279e-03f, -4.710077277e-03f, -4.705921340e-03f, -4.701757476e-03f, -4.697585692e-03f, -4.693405995e-03f, -4.689218394e-03f,
--4.685022896e-03f, -4.680819508e-03f, -4.676608239e-03f, -4.672389096e-03f, -4.668162086e-03f, -4.663927217e-03f, -4.659684498e-03f, -4.655433935e-03f, -4.651175536e-03f, -4.646909310e-03f,
--4.642635264e-03f, -4.638353405e-03f, -4.634063742e-03f, -4.629766282e-03f, -4.625461033e-03f, -4.621148003e-03f, -4.616827200e-03f, -4.612498631e-03f, -4.608162305e-03f, -4.603818229e-03f,
--4.599466412e-03f, -4.595106860e-03f, -4.590739583e-03f, -4.586364587e-03f, -4.581981882e-03f, -4.577591474e-03f, -4.573193372e-03f, -4.568787584e-03f, -4.564374118e-03f, -4.559952981e-03f,
--4.555524183e-03f, -4.551087730e-03f, -4.546643631e-03f, -4.542191894e-03f, -4.537732527e-03f, -4.533265538e-03f, -4.528790935e-03f, -4.524308726e-03f, -4.519818920e-03f, -4.515321525e-03f,
--4.510816548e-03f, -4.506303998e-03f, -4.501783883e-03f, -4.497256211e-03f, -4.492720990e-03f, -4.488178230e-03f, -4.483627937e-03f, -4.479070120e-03f, -4.474504787e-03f, -4.469931947e-03f,
--4.465351607e-03f, -4.460763777e-03f, -4.456168464e-03f, -4.451565677e-03f, -4.446955424e-03f, -4.442337714e-03f, -4.437712554e-03f, -4.433079953e-03f, -4.428439919e-03f, -4.423792462e-03f,
--4.419137588e-03f, -4.414475307e-03f, -4.409805628e-03f, -4.405128558e-03f, -4.400444105e-03f, -4.395752279e-03f, -4.391053088e-03f, -4.386346541e-03f, -4.381632645e-03f, -4.376911409e-03f,
--4.372182843e-03f, -4.367446953e-03f, -4.362703750e-03f, -4.357953241e-03f, -4.353195436e-03f, -4.348430341e-03f, -4.343657968e-03f, -4.338878323e-03f, -4.334091415e-03f, -4.329297254e-03f,
--4.324495847e-03f, -4.319687203e-03f, -4.314871332e-03f, -4.310048242e-03f, -4.305217940e-03f, -4.300380437e-03f, -4.295535741e-03f, -4.290683860e-03f, -4.285824804e-03f, -4.280958581e-03f,
--4.276085199e-03f, -4.271204668e-03f, -4.266316997e-03f, -4.261422193e-03f, -4.256520267e-03f, -4.251611226e-03f, -4.246695080e-03f, -4.241771837e-03f, -4.236841507e-03f, -4.231904098e-03f,
--4.226959619e-03f, -4.222008079e-03f, -4.217049487e-03f, -4.212083851e-03f, -4.207111182e-03f, -4.202131486e-03f, -4.197144775e-03f, -4.192151056e-03f, -4.187150339e-03f, -4.182142632e-03f,
--4.177127945e-03f, -4.172106286e-03f, -4.167077665e-03f, -4.162042090e-03f, -4.156999571e-03f, -4.151950116e-03f, -4.146893736e-03f, -4.141830438e-03f, -4.136760232e-03f, -4.131683127e-03f,
--4.126599132e-03f, -4.121508257e-03f, -4.116410510e-03f, -4.111305900e-03f, -4.106194437e-03f, -4.101076130e-03f, -4.095950988e-03f, -4.090819020e-03f, -4.085680236e-03f, -4.080534644e-03f,
--4.075382254e-03f, -4.070223076e-03f, -4.065057117e-03f, -4.059884389e-03f, -4.054704899e-03f, -4.049518657e-03f, -4.044325673e-03f, -4.039125956e-03f, -4.033919514e-03f, -4.028706358e-03f,
--4.023486497e-03f, -4.018259940e-03f, -4.013026697e-03f, -4.007786776e-03f, -4.002540188e-03f, -3.997286941e-03f, -3.992027045e-03f, -3.986760510e-03f, -3.981487344e-03f, -3.976207558e-03f,
--3.970921160e-03f, -3.965628161e-03f, -3.960328570e-03f, -3.955022395e-03f, -3.949709648e-03f, -3.944390336e-03f, -3.939064470e-03f, -3.933732060e-03f, -3.928393114e-03f, -3.923047642e-03f,
--3.917695654e-03f, -3.912337160e-03f, -3.906972168e-03f, -3.901600690e-03f, -3.896222733e-03f, -3.890838308e-03f, -3.885447425e-03f, -3.880050093e-03f, -3.874646321e-03f, -3.869236120e-03f,
--3.863819498e-03f, -3.858396467e-03f, -3.852967035e-03f, -3.847531212e-03f, -3.842089007e-03f, -3.836640432e-03f, -3.831185494e-03f, -3.825724204e-03f, -3.820256573e-03f, -3.814782608e-03f,
--3.809302321e-03f, -3.803815721e-03f, -3.798322818e-03f, -3.792823621e-03f, -3.787318141e-03f, -3.781806387e-03f, -3.776288369e-03f, -3.770764097e-03f, -3.765233581e-03f, -3.759696830e-03f,
--3.754153855e-03f, -3.748604666e-03f, -3.743049271e-03f, -3.737487682e-03f, -3.731919908e-03f, -3.726345960e-03f, -3.720765846e-03f, -3.715179577e-03f, -3.709587163e-03f, -3.703988614e-03f,
--3.698383939e-03f, -3.692773150e-03f, -3.687156255e-03f, -3.681533265e-03f, -3.675904190e-03f, -3.670269040e-03f, -3.664627824e-03f, -3.658980554e-03f, -3.653327239e-03f, -3.647667888e-03f,
--3.642002513e-03f, -3.636331123e-03f, -3.630653729e-03f, -3.624970340e-03f, -3.619280966e-03f, -3.613585618e-03f, -3.607884306e-03f, -3.602177040e-03f, -3.596463830e-03f, -3.590744686e-03f,
--3.585019619e-03f, -3.579288638e-03f, -3.573551754e-03f, -3.567808977e-03f, -3.562060318e-03f, -3.556305786e-03f, -3.550545391e-03f, -3.544779145e-03f, -3.539007056e-03f, -3.533229137e-03f,
--3.527445396e-03f, -3.521655843e-03f, -3.515860491e-03f, -3.510059348e-03f, -3.504252424e-03f, -3.498439731e-03f, -3.492621279e-03f, -3.486797077e-03f, -3.480967137e-03f, -3.475131468e-03f,
--3.469290081e-03f, -3.463442987e-03f, -3.457590195e-03f, -3.451731717e-03f, -3.445867561e-03f, -3.439997740e-03f, -3.434122263e-03f, -3.428241141e-03f, -3.422354385e-03f, -3.416462004e-03f,
--3.410564009e-03f, -3.404660410e-03f, -3.398751219e-03f, -3.392836445e-03f, -3.386916099e-03f, -3.380990192e-03f, -3.375058734e-03f, -3.369121736e-03f, -3.363179208e-03f, -3.357231160e-03f,
--3.351277604e-03f, -3.345318549e-03f, -3.339354007e-03f, -3.333383987e-03f, -3.327408502e-03f, -3.321427560e-03f, -3.315441173e-03f, -3.309449351e-03f, -3.303452105e-03f, -3.297449446e-03f,
--3.291441384e-03f, -3.285427930e-03f, -3.279409095e-03f, -3.273384888e-03f, -3.267355322e-03f, -3.261320406e-03f, -3.255280151e-03f, -3.249234568e-03f, -3.243183668e-03f, -3.237127461e-03f,
--3.231065958e-03f, -3.224999170e-03f, -3.218927108e-03f, -3.212849782e-03f, -3.206767203e-03f, -3.200679382e-03f, -3.194586329e-03f, -3.188488056e-03f, -3.182384573e-03f, -3.176275892e-03f,
--3.170162022e-03f, -3.164042974e-03f, -3.157918760e-03f, -3.151789390e-03f, -3.145654876e-03f, -3.139515227e-03f, -3.133370456e-03f, -3.127220572e-03f, -3.121065587e-03f, -3.114905511e-03f,
--3.108740355e-03f, -3.102570131e-03f, -3.096394849e-03f, -3.090214521e-03f, -3.084029156e-03f, -3.077838766e-03f, -3.071643362e-03f, -3.065442956e-03f, -3.059237557e-03f, -3.053027176e-03f,
--3.046811826e-03f, -3.040591516e-03f, -3.034366258e-03f, -3.028136063e-03f, -3.021900942e-03f, -3.015660906e-03f, -3.009415965e-03f, -3.003166131e-03f, -2.996911415e-03f, -2.990651828e-03f,
--2.984387381e-03f, -2.978118085e-03f, -2.971843951e-03f, -2.965564991e-03f, -2.959281215e-03f, -2.952992634e-03f, -2.946699259e-03f, -2.940401103e-03f, -2.934098175e-03f, -2.927790487e-03f,
--2.921478049e-03f, -2.915160874e-03f, -2.908838973e-03f, -2.902512355e-03f, -2.896181034e-03f, -2.889845019e-03f, -2.883504322e-03f, -2.877158954e-03f, -2.870808927e-03f, -2.864454251e-03f,
--2.858094937e-03f, -2.851730998e-03f, -2.845362444e-03f, -2.838989287e-03f, -2.832611537e-03f, -2.826229206e-03f, -2.819842305e-03f, -2.813450845e-03f, -2.807054839e-03f, -2.800654296e-03f,
--2.794249228e-03f, -2.787839647e-03f, -2.781425564e-03f, -2.775006990e-03f, -2.768583937e-03f, -2.762156415e-03f, -2.755724436e-03f, -2.749288012e-03f, -2.742847154e-03f, -2.736401873e-03f,
--2.729952180e-03f, -2.723498087e-03f, -2.717039605e-03f, -2.710576746e-03f, -2.704109521e-03f, -2.697637941e-03f, -2.691162018e-03f, -2.684681763e-03f, -2.678197188e-03f, -2.671708304e-03f,
--2.665215122e-03f, -2.658717654e-03f, -2.652215911e-03f, -2.645709905e-03f, -2.639199647e-03f, -2.632685149e-03f, -2.626166422e-03f, -2.619643477e-03f, -2.613116327e-03f, -2.606584982e-03f,
--2.600049454e-03f, -2.593509755e-03f, -2.586965896e-03f, -2.580417888e-03f, -2.573865744e-03f, -2.567309474e-03f, -2.560749090e-03f, -2.554184604e-03f, -2.547616027e-03f, -2.541043370e-03f,
--2.534466647e-03f, -2.527885867e-03f, -2.521301042e-03f, -2.514712185e-03f, -2.508119306e-03f, -2.501522417e-03f, -2.494921531e-03f, -2.488316657e-03f, -2.481707809e-03f, -2.475094997e-03f,
--2.468478234e-03f, -2.461857531e-03f, -2.455232899e-03f, -2.448604350e-03f, -2.441971896e-03f, -2.435335548e-03f, -2.428695319e-03f, -2.422051219e-03f, -2.415403261e-03f, -2.408751456e-03f,
--2.402095816e-03f, -2.395436352e-03f, -2.388773077e-03f, -2.382106002e-03f, -2.375435138e-03f, -2.368760497e-03f, -2.362082092e-03f, -2.355399933e-03f, -2.348714033e-03f, -2.342024403e-03f,
--2.335331055e-03f, -2.328634001e-03f, -2.321933252e-03f, -2.315228821e-03f, -2.308520718e-03f, -2.301808957e-03f, -2.295093547e-03f, -2.288374503e-03f, -2.281651834e-03f, -2.274925554e-03f,
--2.268195673e-03f, -2.261462204e-03f, -2.254725158e-03f, -2.247984547e-03f, -2.241240383e-03f, -2.234492678e-03f, -2.227741444e-03f, -2.220986692e-03f, -2.214228435e-03f, -2.207466684e-03f,
--2.200701451e-03f, -2.193932747e-03f, -2.187160586e-03f, -2.180384978e-03f, -2.173605936e-03f, -2.166823471e-03f, -2.160037596e-03f, -2.153248322e-03f, -2.146455660e-03f, -2.139659624e-03f,
--2.132860225e-03f, -2.126057475e-03f, -2.119251385e-03f, -2.112441968e-03f, -2.105629236e-03f, -2.098813200e-03f, -2.091993872e-03f, -2.085171266e-03f, -2.078345391e-03f, -2.071516261e-03f,
--2.064683887e-03f, -2.057848281e-03f, -2.051009456e-03f, -2.044167423e-03f, -2.037322194e-03f, -2.030473781e-03f, -2.023622196e-03f, -2.016767452e-03f, -2.009909560e-03f, -2.003048532e-03f,
--1.996184380e-03f, -1.989317116e-03f, -1.982446752e-03f, -1.975573301e-03f, -1.968696774e-03f, -1.961817183e-03f, -1.954934541e-03f, -1.948048859e-03f, -1.941160150e-03f, -1.934268425e-03f,
--1.927373696e-03f, -1.920475976e-03f, -1.913575277e-03f, -1.906671610e-03f, -1.899764989e-03f, -1.892855424e-03f, -1.885942928e-03f, -1.879027514e-03f, -1.872109192e-03f, -1.865187976e-03f,
--1.858263877e-03f, -1.851336908e-03f, -1.844407080e-03f, -1.837474406e-03f, -1.830538897e-03f, -1.823600567e-03f, -1.816659427e-03f, -1.809715489e-03f, -1.802768765e-03f, -1.795819268e-03f,
--1.788867009e-03f, -1.781912001e-03f, -1.774954256e-03f, -1.767993786e-03f, -1.761030604e-03f, -1.754064721e-03f, -1.747096149e-03f, -1.740124901e-03f, -1.733150989e-03f, -1.726174426e-03f,
--1.719195222e-03f, -1.712213391e-03f, -1.705228945e-03f, -1.698241896e-03f, -1.691252256e-03f, -1.684260037e-03f, -1.677265251e-03f, -1.670267911e-03f, -1.663268030e-03f, -1.656265618e-03f,
--1.649260689e-03f, -1.642253254e-03f, -1.635243326e-03f, -1.628230918e-03f, -1.621216040e-03f, -1.614198707e-03f, -1.607178929e-03f, -1.600156719e-03f, -1.593132089e-03f, -1.586105052e-03f,
--1.579075620e-03f, -1.572043805e-03f, -1.565009619e-03f, -1.557973075e-03f, -1.550934185e-03f, -1.543892961e-03f, -1.536849415e-03f, -1.529803560e-03f, -1.522755409e-03f, -1.515704972e-03f,
--1.508652264e-03f, -1.501597295e-03f, -1.494540078e-03f, -1.487480626e-03f, -1.480418951e-03f, -1.473355065e-03f, -1.466288981e-03f, -1.459220710e-03f, -1.452150266e-03f, -1.445077659e-03f,
--1.438002904e-03f, -1.430926012e-03f, -1.423846995e-03f, -1.416765866e-03f, -1.409682637e-03f, -1.402597321e-03f, -1.395509929e-03f, -1.388420475e-03f, -1.381328970e-03f, -1.374235426e-03f,
--1.367139858e-03f, -1.360042275e-03f, -1.352942692e-03f, -1.345841120e-03f, -1.338737572e-03f, -1.331632059e-03f, -1.324524595e-03f, -1.317415192e-03f, -1.310303862e-03f, -1.303190618e-03f,
--1.296075472e-03f, -1.288958436e-03f, -1.281839523e-03f, -1.274718744e-03f, -1.267596114e-03f, -1.260471643e-03f, -1.253345345e-03f, -1.246217231e-03f, -1.239087315e-03f, -1.231955608e-03f,
--1.224822123e-03f, -1.217686872e-03f, -1.210549868e-03f, -1.203411124e-03f, -1.196270651e-03f, -1.189128462e-03f, -1.181984570e-03f, -1.174838986e-03f, -1.167691724e-03f, -1.160542796e-03f,
--1.153392213e-03f, -1.146239990e-03f, -1.139086138e-03f, -1.131930669e-03f, -1.124773596e-03f, -1.117614931e-03f, -1.110454688e-03f, -1.103292877e-03f, -1.096129513e-03f, -1.088964607e-03f,
--1.081798171e-03f, -1.074630218e-03f, -1.067460762e-03f, -1.060289813e-03f, -1.053117385e-03f, -1.045943489e-03f, -1.038768140e-03f, -1.031591348e-03f, -1.024413126e-03f, -1.017233488e-03f,
--1.010052445e-03f, -1.002870009e-03f, -9.956861943e-04f, -9.885010121e-04f, -9.813144752e-04f, -9.741265961e-04f, -9.669373872e-04f, -9.597468611e-04f, -9.525550302e-04f, -9.453619070e-04f,
--9.381675041e-04f, -9.309718339e-04f, -9.237749089e-04f, -9.165767416e-04f, -9.093773445e-04f, -9.021767301e-04f, -8.949749110e-04f, -8.877718996e-04f, -8.805677084e-04f, -8.733623499e-04f,
--8.661558367e-04f, -8.589481812e-04f, -8.517393960e-04f, -8.445294936e-04f, -8.373184865e-04f, -8.301063871e-04f, -8.228932081e-04f, -8.156789619e-04f, -8.084636611e-04f, -8.012473182e-04f,
--7.940299457e-04f, -7.868115560e-04f, -7.795921619e-04f, -7.723717757e-04f, -7.651504100e-04f, -7.579280773e-04f, -7.507047902e-04f, -7.434805611e-04f, -7.362554027e-04f, -7.290293274e-04f,
--7.218023477e-04f, -7.145744763e-04f, -7.073457256e-04f, -7.001161082e-04f, -6.928856366e-04f, -6.856543234e-04f, -6.784221810e-04f, -6.711892221e-04f, -6.639554591e-04f, -6.567209046e-04f,
--6.494855711e-04f, -6.422494713e-04f, -6.350126175e-04f, -6.277750225e-04f, -6.205366986e-04f, -6.132976585e-04f, -6.060579147e-04f, -5.988174797e-04f, -5.915763661e-04f, -5.843345865e-04f,
--5.770921533e-04f, -5.698490791e-04f, -5.626053766e-04f, -5.553610581e-04f, -5.481161364e-04f, -5.408706238e-04f, -5.336245331e-04f, -5.263778766e-04f, -5.191306670e-04f, -5.118829169e-04f,
--5.046346387e-04f, -4.973858450e-04f, -4.901365484e-04f, -4.828867615e-04f, -4.756364967e-04f, -4.683857667e-04f, -4.611345839e-04f, -4.538829610e-04f, -4.466309104e-04f, -4.393784448e-04f,
--4.321255767e-04f, -4.248723187e-04f, -4.176186832e-04f, -4.103646829e-04f, -4.031103304e-04f, -3.958556380e-04f, -3.886006185e-04f, -3.813452844e-04f, -3.740896481e-04f, -3.668337224e-04f,
--3.595775196e-04f, -3.523210525e-04f, -3.450643334e-04f, -3.378073751e-04f, -3.305501900e-04f, -3.232927906e-04f, -3.160351896e-04f, -3.087773995e-04f, -3.015194328e-04f, -2.942613022e-04f,
--2.870030200e-04f, -2.797445990e-04f, -2.724860516e-04f, -2.652273903e-04f, -2.579686279e-04f, -2.507097767e-04f, -2.434508493e-04f, -2.361918583e-04f, -2.289328162e-04f, -2.216737356e-04f,
--2.144146291e-04f, -2.071555091e-04f, -1.998963882e-04f, -1.926372789e-04f, -1.853781939e-04f, -1.781191456e-04f, -1.708601466e-04f, -1.636012094e-04f, -1.563423465e-04f, -1.490835706e-04f,
--1.418248941e-04f, -1.345663296e-04f, -1.273078896e-04f, -1.200495867e-04f, -1.127914333e-04f, -1.055334421e-04f, -9.827562555e-05f, -9.101799618e-05f, -8.376056654e-05f, -7.650334915e-05f,
--6.924635654e-05f, -6.198960126e-05f, -5.473309581e-05f, -4.747685274e-05f, -4.022088456e-05f, -3.296520381e-05f, -2.570982300e-05f, -1.845475466e-05f, -1.120001131e-05f, -3.945605472e-06f,
-3.308450339e-06f, 1.056214360e-05f, 1.781546180e-05f, 2.506839242e-05f, 3.232092294e-05f, 3.957304086e-05f, 4.682473366e-05f, 5.407598883e-05f, 6.132679386e-05f, 6.857713625e-05f,
-7.582700349e-05f, 8.307638307e-05f, 9.032526250e-05f, 9.757362926e-05f, 1.048214709e-04f, 1.120687748e-04f, 1.193155286e-04f, 1.265617197e-04f, 1.338073357e-04f, 1.410523641e-04f,
-1.482967923e-04f, 1.555406079e-04f, 1.627837984e-04f, 1.700263513e-04f, 1.772682541e-04f, 1.845094944e-04f, 1.917500597e-04f, 1.989899374e-04f, 2.062291151e-04f, 2.134675804e-04f,
-2.207053207e-04f, 2.279423236e-04f, 2.351785766e-04f, 2.424140673e-04f, 2.496487832e-04f, 2.568827118e-04f, 2.641158406e-04f, 2.713481572e-04f, 2.785796492e-04f, 2.858103041e-04f,
-2.930401094e-04f, 3.002690527e-04f, 3.074971215e-04f, 3.147243034e-04f, 3.219505859e-04f, 3.291759567e-04f, 3.364004032e-04f, 3.436239130e-04f, 3.508464737e-04f, 3.580680728e-04f,
-3.652886980e-04f, 3.725083367e-04f, 3.797269766e-04f, 3.869446052e-04f, 3.941612102e-04f, 4.013767790e-04f, 4.085912993e-04f, 4.158047586e-04f, 4.230171446e-04f, 4.302284449e-04f,
-4.374386469e-04f, 4.446477384e-04f, 4.518557069e-04f, 4.590625400e-04f, 4.662682254e-04f, 4.734727505e-04f, 4.806761031e-04f, 4.878782708e-04f, 4.950792411e-04f, 5.022790016e-04f,
-5.094775401e-04f, 5.166748441e-04f, 5.238709012e-04f, 5.310656990e-04f, 5.382592252e-04f, 5.454514675e-04f, 5.526424134e-04f, 5.598320506e-04f, 5.670203668e-04f, 5.742073495e-04f,
-5.813929864e-04f, 5.885772653e-04f, 5.957601736e-04f, 6.029416991e-04f, 6.101218295e-04f, 6.173005523e-04f, 6.244778554e-04f, 6.316537262e-04f, 6.388281526e-04f, 6.460011221e-04f,
-6.531726224e-04f, 6.603426414e-04f, 6.675111665e-04f, 6.746781855e-04f, 6.818436861e-04f, 6.890076560e-04f, 6.961700828e-04f, 7.033309544e-04f, 7.104902583e-04f, 7.176479823e-04f,
-7.248041141e-04f, 7.319586414e-04f, 7.391115519e-04f, 7.462628334e-04f, 7.534124735e-04f, 7.605604600e-04f, 7.677067806e-04f, 7.748514231e-04f, 7.819943752e-04f, 7.891356246e-04f,
-7.962751590e-04f, 8.034129663e-04f, 8.105490341e-04f, 8.176833503e-04f, 8.248159026e-04f, 8.319466787e-04f, 8.390756664e-04f, 8.462028534e-04f, 8.533282276e-04f, 8.604517768e-04f,
-8.675734887e-04f, 8.746933510e-04f, 8.818113516e-04f, 8.889274783e-04f, 8.960417188e-04f, 9.031540611e-04f, 9.102644927e-04f, 9.173730017e-04f, 9.244795757e-04f, 9.315842026e-04f,
-9.386868703e-04f, 9.457875665e-04f, 9.528862790e-04f, 9.599829958e-04f, 9.670777046e-04f, 9.741703932e-04f, 9.812610496e-04f, 9.883496615e-04f, 9.954362168e-04f, 1.002520703e-03f,
-1.009603109e-03f, 1.016683422e-03f, 1.023761629e-03f, 1.030837720e-03f, 1.037911681e-03f, 1.044983500e-03f, 1.052053166e-03f, 1.059120666e-03f, 1.066185988e-03f, 1.073249120e-03f,
-1.080310051e-03f, 1.087368767e-03f, 1.094425257e-03f, 1.101479508e-03f, 1.108531509e-03f, 1.115581248e-03f, 1.122628712e-03f, 1.129673890e-03f, 1.136716769e-03f, 1.143757337e-03f,
-1.150795582e-03f, 1.157831493e-03f, 1.164865056e-03f, 1.171896261e-03f, 1.178925095e-03f, 1.185951546e-03f, 1.192975602e-03f, 1.199997251e-03f, 1.207016481e-03f, 1.214033279e-03f,
-1.221047635e-03f, 1.228059536e-03f, 1.235068970e-03f, 1.242075924e-03f, 1.249080388e-03f, 1.256082349e-03f, 1.263081794e-03f, 1.270078713e-03f, 1.277073093e-03f, 1.284064922e-03f,
-1.291054188e-03f, 1.298040879e-03f, 1.305024984e-03f, 1.312006490e-03f, 1.318985385e-03f, 1.325961658e-03f, 1.332935296e-03f, 1.339906288e-03f, 1.346874622e-03f, 1.353840285e-03f,
-1.360803267e-03f, 1.367763554e-03f, 1.374721135e-03f, 1.381675999e-03f, 1.388628133e-03f, 1.395577525e-03f, 1.402524164e-03f, 1.409468038e-03f, 1.416409134e-03f, 1.423347441e-03f,
-1.430282948e-03f, 1.437215642e-03f, 1.444145511e-03f, 1.451072543e-03f, 1.457996728e-03f, 1.464918052e-03f, 1.471836505e-03f, 1.478752074e-03f, 1.485664747e-03f, 1.492574513e-03f,
-1.499481360e-03f, 1.506385276e-03f, 1.513286250e-03f, 1.520184269e-03f, 1.527079321e-03f, 1.533971396e-03f, 1.540860481e-03f, 1.547746564e-03f, 1.554629635e-03f, 1.561509680e-03f,
-1.568386688e-03f, 1.575260648e-03f, 1.582131547e-03f, 1.588999375e-03f, 1.595864119e-03f, 1.602725768e-03f, 1.609584309e-03f, 1.616439732e-03f, 1.623292024e-03f, 1.630141174e-03f,
-1.636987170e-03f, 1.643830001e-03f, 1.650669655e-03f, 1.657506119e-03f, 1.664339384e-03f, 1.671169436e-03f, 1.677996264e-03f, 1.684819857e-03f, 1.691640202e-03f, 1.698457289e-03f,
-1.705271106e-03f, 1.712081641e-03f, 1.718888882e-03f, 1.725692818e-03f, 1.732493438e-03f, 1.739290729e-03f, 1.746084680e-03f, 1.752875279e-03f, 1.759662516e-03f, 1.766446378e-03f,
-1.773226854e-03f, 1.780003932e-03f, 1.786777601e-03f, 1.793547849e-03f, 1.800314665e-03f, 1.807078036e-03f, 1.813837953e-03f, 1.820594402e-03f, 1.827347374e-03f, 1.834096855e-03f,
-1.840842835e-03f, 1.847585302e-03f, 1.854324245e-03f, 1.861059651e-03f, 1.867791511e-03f, 1.874519812e-03f, 1.881244543e-03f, 1.887965692e-03f, 1.894683248e-03f, 1.901397199e-03f,
-1.908107535e-03f, 1.914814243e-03f, 1.921517312e-03f, 1.928216732e-03f, 1.934912489e-03f, 1.941604574e-03f, 1.948292974e-03f, 1.954977679e-03f, 1.961658677e-03f, 1.968335956e-03f,
-1.975009505e-03f, 1.981679314e-03f, 1.988345369e-03f, 1.995007661e-03f, 2.001666178e-03f, 2.008320908e-03f, 2.014971841e-03f, 2.021618964e-03f, 2.028262267e-03f, 2.034901739e-03f,
-2.041537367e-03f, 2.048169141e-03f, 2.054797050e-03f, 2.061421082e-03f, 2.068041225e-03f, 2.074657470e-03f, 2.081269804e-03f, 2.087878216e-03f, 2.094482696e-03f, 2.101083231e-03f,
-2.107679810e-03f, 2.114272423e-03f, 2.120861059e-03f, 2.127445705e-03f, 2.134026351e-03f, 2.140602986e-03f, 2.147175598e-03f, 2.153744176e-03f, 2.160308710e-03f, 2.166869187e-03f,
-2.173425598e-03f, 2.179977930e-03f, 2.186526173e-03f, 2.193070315e-03f, 2.199610346e-03f, 2.206146254e-03f, 2.212678029e-03f, 2.219205658e-03f, 2.225729131e-03f, 2.232248438e-03f,
-2.238763566e-03f, 2.245274506e-03f, 2.251781245e-03f, 2.258283772e-03f, 2.264782078e-03f, 2.271276151e-03f, 2.277765979e-03f, 2.284251551e-03f, 2.290732858e-03f, 2.297209887e-03f,
-2.303682628e-03f, 2.310151070e-03f, 2.316615202e-03f, 2.323075012e-03f, 2.329530490e-03f, 2.335981626e-03f, 2.342428407e-03f, 2.348870823e-03f, 2.355308864e-03f, 2.361742518e-03f,
-2.368171774e-03f, 2.374596622e-03f, 2.381017050e-03f, 2.387433048e-03f, 2.393844605e-03f, 2.400251710e-03f, 2.406654352e-03f, 2.413052520e-03f, 2.419446204e-03f, 2.425835392e-03f,
-2.432220074e-03f, 2.438600239e-03f, 2.444975877e-03f, 2.451346975e-03f, 2.457713525e-03f, 2.464075514e-03f, 2.470432932e-03f, 2.476785769e-03f, 2.483134013e-03f, 2.489477653e-03f,
-2.495816680e-03f, 2.502151083e-03f, 2.508480849e-03f, 2.514805970e-03f, 2.521126434e-03f, 2.527442231e-03f, 2.533753349e-03f, 2.540059778e-03f, 2.546361508e-03f, 2.552658528e-03f,
-2.558950827e-03f, 2.565238395e-03f, 2.571521220e-03f, 2.577799293e-03f, 2.584072602e-03f, 2.590341138e-03f, 2.596604889e-03f, 2.602863844e-03f, 2.609117994e-03f, 2.615367328e-03f,
-2.621611835e-03f, 2.627851505e-03f, 2.634086326e-03f, 2.640316290e-03f, 2.646541384e-03f, 2.652761598e-03f, 2.658976923e-03f, 2.665187347e-03f, 2.671392860e-03f, 2.677593452e-03f,
-2.683789112e-03f, 2.689979829e-03f, 2.696165593e-03f, 2.702346394e-03f, 2.708522221e-03f, 2.714693064e-03f, 2.720858913e-03f, 2.727019756e-03f, 2.733175584e-03f, 2.739326386e-03f,
-2.745472152e-03f, 2.751612872e-03f, 2.757748534e-03f, 2.763879130e-03f, 2.770004647e-03f, 2.776125077e-03f, 2.782240408e-03f, 2.788350631e-03f, 2.794455735e-03f, 2.800555709e-03f,
-2.806650544e-03f, 2.812740230e-03f, 2.818824755e-03f, 2.824904110e-03f, 2.830978284e-03f, 2.837047268e-03f, 2.843111050e-03f, 2.849169622e-03f, 2.855222972e-03f, 2.861271090e-03f,
-2.867313966e-03f, 2.873351590e-03f, 2.879383952e-03f, 2.885411042e-03f, 2.891432849e-03f, 2.897449363e-03f, 2.903460575e-03f, 2.909466474e-03f, 2.915467049e-03f, 2.921462291e-03f,
-2.927452191e-03f, 2.933436736e-03f, 2.939415918e-03f, 2.945389727e-03f, 2.951358152e-03f, 2.957321184e-03f, 2.963278812e-03f, 2.969231026e-03f, 2.975177817e-03f, 2.981119173e-03f,
-2.987055087e-03f, 2.992985546e-03f, 2.998910542e-03f, 3.004830064e-03f, 3.010744102e-03f, 3.016652647e-03f, 3.022555688e-03f, 3.028453216e-03f, 3.034345221e-03f, 3.040231692e-03f,
-3.046112620e-03f, 3.051987995e-03f, 3.057857807e-03f, 3.063722047e-03f, 3.069580703e-03f, 3.075433768e-03f, 3.081281230e-03f, 3.087123079e-03f, 3.092959307e-03f, 3.098789903e-03f,
-3.104614857e-03f, 3.110434160e-03f, 3.116247801e-03f, 3.122055772e-03f, 3.127858062e-03f, 3.133654662e-03f, 3.139445561e-03f, 3.145230751e-03f, 3.151010221e-03f, 3.156783961e-03f,
-3.162551963e-03f, 3.168314215e-03f, 3.174070710e-03f, 3.179821436e-03f, 3.185566385e-03f, 3.191305546e-03f, 3.197038911e-03f, 3.202766469e-03f, 3.208488210e-03f, 3.214204126e-03f,
-3.219914206e-03f, 3.225618442e-03f, 3.231316822e-03f, 3.237009339e-03f, 3.242695982e-03f, 3.248376742e-03f, 3.254051609e-03f, 3.259720574e-03f, 3.265383627e-03f, 3.271040759e-03f,
-3.276691960e-03f, 3.282337221e-03f, 3.287976532e-03f, 3.293609885e-03f, 3.299237268e-03f, 3.304858674e-03f, 3.310474092e-03f, 3.316083513e-03f, 3.321686929e-03f, 3.327284328e-03f,
-3.332875703e-03f, 3.338461043e-03f, 3.344040340e-03f, 3.349613583e-03f, 3.355180764e-03f, 3.360741874e-03f, 3.366296902e-03f, 3.371845841e-03f, 3.377388679e-03f, 3.382925409e-03f,
-3.388456020e-03f, 3.393980504e-03f, 3.399498852e-03f, 3.405011053e-03f, 3.410517100e-03f, 3.416016982e-03f, 3.421510691e-03f, 3.426998217e-03f, 3.432479551e-03f, 3.437954684e-03f,
-3.443423607e-03f, 3.448886310e-03f, 3.454342785e-03f, 3.459793023e-03f, 3.465237013e-03f, 3.470674748e-03f, 3.476106218e-03f, 3.481531414e-03f, 3.486950327e-03f, 3.492362948e-03f,
-3.497769268e-03f, 3.503169277e-03f, 3.508562967e-03f, 3.513950330e-03f, 3.519331354e-03f, 3.524706033e-03f, 3.530074357e-03f, 3.535436316e-03f, 3.540791902e-03f, 3.546141106e-03f,
-3.551483920e-03f, 3.556820333e-03f, 3.562150338e-03f, 3.567473925e-03f, 3.572791085e-03f, 3.578101810e-03f, 3.583406091e-03f, 3.588703918e-03f, 3.593995284e-03f, 3.599280178e-03f,
-3.604558594e-03f, 3.609830520e-03f, 3.615095950e-03f, 3.620354873e-03f, 3.625607282e-03f, 3.630853167e-03f, 3.636092520e-03f, 3.641325332e-03f, 3.646551594e-03f, 3.651771298e-03f,
-3.656984435e-03f, 3.662190995e-03f, 3.667390972e-03f, 3.672584355e-03f, 3.677771137e-03f, 3.682951308e-03f, 3.688124860e-03f, 3.693291784e-03f, 3.698452072e-03f, 3.703605715e-03f,
-3.708752705e-03f, 3.713893033e-03f, 3.719026690e-03f, 3.724153668e-03f, 3.729273958e-03f, 3.734387552e-03f, 3.739494442e-03f, 3.744594618e-03f, 3.749688073e-03f, 3.754774798e-03f,
-3.759854784e-03f, 3.764928023e-03f, 3.769994507e-03f, 3.775054226e-03f, 3.780107174e-03f, 3.785153341e-03f, 3.790192718e-03f, 3.795225299e-03f, 3.800251073e-03f, 3.805270034e-03f,
-3.810282171e-03f, 3.815287478e-03f, 3.820285946e-03f, 3.825277567e-03f, 3.830262331e-03f, 3.835240232e-03f, 3.840211260e-03f, 3.845175408e-03f, 3.850132668e-03f, 3.855083030e-03f,
-3.860026487e-03f, 3.864963030e-03f, 3.869892652e-03f, 3.874815345e-03f, 3.879731099e-03f, 3.884639907e-03f, 3.889541761e-03f, 3.894436653e-03f, 3.899324574e-03f, 3.904205516e-03f,
-3.909079472e-03f, 3.913946433e-03f, 3.918806392e-03f, 3.923659339e-03f, 3.928505268e-03f, 3.933344169e-03f, 3.938176036e-03f, 3.943000860e-03f, 3.947818633e-03f, 3.952629346e-03f,
-3.957432993e-03f, 3.962229565e-03f, 3.967019055e-03f, 3.971801453e-03f, 3.976576753e-03f, 3.981344947e-03f, 3.986106026e-03f, 3.990859983e-03f, 3.995606809e-03f, 4.000346498e-03f,
-4.005079040e-03f, 4.009804430e-03f, 4.014522657e-03f, 4.019233715e-03f, 4.023937596e-03f, 4.028634293e-03f, 4.033323796e-03f, 4.038006100e-03f, 4.042681195e-03f, 4.047349074e-03f,
-4.052009730e-03f, 4.056663155e-03f, 4.061309340e-03f, 4.065948279e-03f, 4.070579964e-03f, 4.075204387e-03f, 4.079821541e-03f, 4.084431417e-03f, 4.089034008e-03f, 4.093629307e-03f,
-4.098217306e-03f, 4.102797998e-03f, 4.107371375e-03f, 4.111937429e-03f, 4.116496152e-03f, 4.121047538e-03f, 4.125591579e-03f, 4.130128268e-03f, 4.134657596e-03f, 4.139179556e-03f,
-4.143694142e-03f, 4.148201345e-03f, 4.152701158e-03f, 4.157193574e-03f, 4.161678585e-03f, 4.166156184e-03f, 4.170626364e-03f, 4.175089116e-03f, 4.179544435e-03f, 4.183992312e-03f,
-4.188432740e-03f, 4.192865712e-03f, 4.197291220e-03f, 4.201709258e-03f, 4.206119818e-03f, 4.210522892e-03f, 4.214918474e-03f, 4.219306557e-03f, 4.223687132e-03f, 4.228060193e-03f,
-4.232425733e-03f, 4.236783745e-03f, 4.241134221e-03f, 4.245477154e-03f, 4.249812537e-03f, 4.254140363e-03f, 4.258460625e-03f, 4.262773316e-03f, 4.267078428e-03f, 4.271375955e-03f,
-4.275665890e-03f, 4.279948225e-03f, 4.284222953e-03f, 4.288490068e-03f, 4.292749563e-03f, 4.297001430e-03f, 4.301245662e-03f, 4.305482253e-03f, 4.309711196e-03f, 4.313932483e-03f,
-4.318146108e-03f, 4.322352064e-03f, 4.326550344e-03f, 4.330740941e-03f, 4.334923849e-03f, 4.339099059e-03f, 4.343266567e-03f, 4.347426364e-03f, 4.351578443e-03f, 4.355722799e-03f,
-4.359859425e-03f, 4.363988312e-03f, 4.368109456e-03f, 4.372222849e-03f, 4.376328484e-03f, 4.380426355e-03f, 4.384516454e-03f, 4.388598776e-03f, 4.392673314e-03f, 4.396740060e-03f,
-4.400799009e-03f, 4.404850153e-03f, 4.408893487e-03f, 4.412929002e-03f, 4.416956694e-03f, 4.420976555e-03f, 4.424988578e-03f, 4.428992758e-03f, 4.432989088e-03f, 4.436977560e-03f,
-4.440958169e-03f, 4.444930908e-03f, 4.448895771e-03f, 4.452852751e-03f, 4.456801842e-03f, 4.460743036e-03f, 4.464676329e-03f, 4.468601713e-03f, 4.472519183e-03f, 4.476428731e-03f,
-4.480330351e-03f, 4.484224037e-03f, 4.488109783e-03f, 4.491987582e-03f, 4.495857428e-03f, 4.499719315e-03f, 4.503573236e-03f, 4.507419185e-03f, 4.511257157e-03f, 4.515087144e-03f,
-4.518909140e-03f, 4.522723139e-03f, 4.526529136e-03f, 4.530327123e-03f, 4.534117095e-03f, 4.537899045e-03f, 4.541672968e-03f, 4.545438857e-03f, 4.549196706e-03f, 4.552946510e-03f,
-4.556688261e-03f, 4.560421954e-03f, 4.564147583e-03f, 4.567865141e-03f, 4.571574624e-03f, 4.575276024e-03f, 4.578969335e-03f, 4.582654553e-03f, 4.586331670e-03f, 4.590000682e-03f,
-4.593661581e-03f, 4.597314362e-03f, 4.600959019e-03f, 4.604595546e-03f, 4.608223937e-03f, 4.611844187e-03f, 4.615456290e-03f, 4.619060239e-03f, 4.622656029e-03f, 4.626243654e-03f,
-4.629823108e-03f, 4.633394386e-03f, 4.636957481e-03f, 4.640512389e-03f, 4.644059102e-03f, 4.647597616e-03f, 4.651127925e-03f, 4.654650023e-03f, 4.658163904e-03f, 4.661669564e-03f,
-4.665166995e-03f, 4.668656192e-03f, 4.672137151e-03f, 4.675609864e-03f, 4.679074328e-03f, 4.682530535e-03f, 4.685978481e-03f, 4.689418159e-03f, 4.692849565e-03f, 4.696272693e-03f,
-4.699687537e-03f, 4.703094092e-03f, 4.706492353e-03f, 4.709882313e-03f, 4.713263968e-03f, 4.716637311e-03f, 4.720002339e-03f, 4.723359044e-03f, 4.726707423e-03f, 4.730047469e-03f,
-4.733379176e-03f, 4.736702541e-03f, 4.740017557e-03f, 4.743324219e-03f, 4.746622522e-03f, 4.749912460e-03f, 4.753194029e-03f, 4.756467222e-03f, 4.759732035e-03f, 4.762988463e-03f,
-4.766236500e-03f, 4.769476141e-03f, 4.772707380e-03f, 4.775930214e-03f, 4.779144636e-03f, 4.782350641e-03f, 4.785548225e-03f, 4.788737382e-03f, 4.791918107e-03f, 4.795090395e-03f,
-4.798254241e-03f, 4.801409639e-03f, 4.804556586e-03f, 4.807695075e-03f, 4.810825103e-03f, 4.813946663e-03f, 4.817059751e-03f, 4.820164361e-03f, 4.823260490e-03f, 4.826348131e-03f,
-4.829427281e-03f, 4.832497934e-03f, 4.835560085e-03f, 4.838613730e-03f, 4.841658863e-03f, 4.844695480e-03f, 4.847723575e-03f, 4.850743145e-03f, 4.853754184e-03f, 4.856756688e-03f,
-4.859750651e-03f, 4.862736069e-03f, 4.865712938e-03f, 4.868681252e-03f, 4.871641006e-03f, 4.874592197e-03f, 4.877534819e-03f, 4.880468868e-03f, 4.883394340e-03f, 4.886311228e-03f,
-4.889219530e-03f, 4.892119239e-03f, 4.895010353e-03f, 4.897892865e-03f, 4.900766772e-03f, 4.903632069e-03f, 4.906488751e-03f, 4.909336815e-03f, 4.912176255e-03f, 4.915007067e-03f,
-4.917829246e-03f, 4.920642788e-03f, 4.923447689e-03f, 4.926243945e-03f, 4.929031550e-03f, 4.931810500e-03f, 4.934580791e-03f, 4.937342419e-03f, 4.940095380e-03f, 4.942839668e-03f,
-4.945575280e-03f, 4.948302212e-03f, 4.951020458e-03f, 4.953730015e-03f, 4.956430879e-03f, 4.959123045e-03f, 4.961806510e-03f, 4.964481268e-03f, 4.967147316e-03f, 4.969804649e-03f,
-4.972453264e-03f, 4.975093156e-03f, 4.977724321e-03f, 4.980346755e-03f, 4.982960453e-03f, 4.985565413e-03f, 4.988161629e-03f, 4.990749098e-03f, 4.993327815e-03f, 4.995897777e-03f,
-4.998458980e-03f, 5.001011419e-03f, 5.003555091e-03f, 5.006089991e-03f, 5.008616116e-03f, 5.011133462e-03f, 5.013642025e-03f, 5.016141800e-03f, 5.018632785e-03f, 5.021114975e-03f,
-5.023588366e-03f, 5.026052954e-03f, 5.028508736e-03f, 5.030955708e-03f, 5.033393866e-03f, 5.035823206e-03f, 5.038243725e-03f, 5.040655418e-03f, 5.043058283e-03f, 5.045452315e-03f,
-5.047837510e-03f, 5.050213865e-03f, 5.052581377e-03f, 5.054940041e-03f, 5.057289853e-03f, 5.059630812e-03f, 5.061962912e-03f, 5.064286150e-03f, 5.066600522e-03f, 5.068906026e-03f,
-5.071202657e-03f, 5.073490411e-03f, 5.075769287e-03f, 5.078039279e-03f, 5.080300384e-03f, 5.082552599e-03f, 5.084795921e-03f, 5.087030346e-03f, 5.089255870e-03f, 5.091472491e-03f,
-5.093680204e-03f, 5.095879007e-03f, 5.098068896e-03f, 5.100249867e-03f, 5.102421918e-03f, 5.104585045e-03f, 5.106739245e-03f, 5.108884514e-03f, 5.111020850e-03f, 5.113148248e-03f,
-5.115266706e-03f, 5.117376221e-03f, 5.119476789e-03f, 5.121568407e-03f, 5.123651072e-03f, 5.125724780e-03f, 5.127789530e-03f, 5.129845317e-03f, 5.131892138e-03f, 5.133929990e-03f,
-5.135958871e-03f, 5.137978777e-03f, 5.139989705e-03f, 5.141991652e-03f, 5.143984615e-03f, 5.145968592e-03f, 5.147943578e-03f, 5.149909571e-03f, 5.151866569e-03f, 5.153814568e-03f,
-5.155753565e-03f, 5.157683557e-03f, 5.159604542e-03f, 5.161516516e-03f, 5.163419478e-03f, 5.165313423e-03f, 5.167198349e-03f, 5.169074253e-03f, 5.170941133e-03f, 5.172798986e-03f,
-5.174647808e-03f, 5.176487598e-03f, 5.178318352e-03f, 5.180140068e-03f, 5.181952742e-03f, 5.183756373e-03f, 5.185550958e-03f, 5.187336494e-03f, 5.189112978e-03f, 5.190880408e-03f,
-5.192638781e-03f, 5.194388094e-03f, 5.196128345e-03f, 5.197859532e-03f, 5.199581652e-03f, 5.201294702e-03f, 5.202998679e-03f, 5.204693582e-03f, 5.206379408e-03f, 5.208056154e-03f,
-5.209723818e-03f, 5.211382398e-03f, 5.213031890e-03f, 5.214672294e-03f, 5.216303605e-03f, 5.217925822e-03f, 5.219538943e-03f, 5.221142965e-03f, 5.222737886e-03f, 5.224323703e-03f,
-5.225900415e-03f, 5.227468019e-03f, 5.229026512e-03f, 5.230575893e-03f, 5.232116159e-03f, 5.233647308e-03f, 5.235169338e-03f, 5.236682247e-03f, 5.238186032e-03f, 5.239680692e-03f,
-5.241166223e-03f, 5.242642625e-03f, 5.244109895e-03f, 5.245568031e-03f, 5.247017030e-03f, 5.248456892e-03f, 5.249887613e-03f, 5.251309191e-03f, 5.252721626e-03f, 5.254124914e-03f,
-5.255519054e-03f, 5.256904044e-03f, 5.258279881e-03f, 5.259646565e-03f, 5.261004092e-03f, 5.262352462e-03f, 5.263691672e-03f, 5.265021720e-03f, 5.266342604e-03f, 5.267654324e-03f,
-5.268956876e-03f, 5.270250259e-03f, 5.271534472e-03f, 5.272809512e-03f, 5.274075378e-03f, 5.275332068e-03f, 5.276579580e-03f, 5.277817913e-03f, 5.279047065e-03f, 5.280267034e-03f,
-5.281477819e-03f, 5.282679417e-03f, 5.283871828e-03f, 5.285055050e-03f, 5.286229081e-03f, 5.287393919e-03f, 5.288549563e-03f, 5.289696012e-03f, 5.290833264e-03f, 5.291961317e-03f,
-5.293080170e-03f, 5.294189821e-03f, 5.295290269e-03f, 5.296381513e-03f, 5.297463551e-03f, 5.298536382e-03f, 5.299600004e-03f, 5.300654415e-03f, 5.301699616e-03f, 5.302735603e-03f,
-5.303762376e-03f, 5.304779934e-03f, 5.305788275e-03f, 5.306787398e-03f, 5.307777301e-03f, 5.308757984e-03f, 5.309729445e-03f, 5.310691683e-03f, 5.311644697e-03f, 5.312588485e-03f,
-5.313523046e-03f, 5.314448380e-03f, 5.315364484e-03f, 5.316271359e-03f, 5.317169002e-03f, 5.318057413e-03f, 5.318936591e-03f, 5.319806534e-03f, 5.320667241e-03f, 5.321518713e-03f,
-5.322360946e-03f, 5.323193941e-03f, 5.324017696e-03f, 5.324832211e-03f, 5.325637485e-03f, 5.326433516e-03f, 5.327220304e-03f, 5.327997847e-03f, 5.328766145e-03f, 5.329525198e-03f,
-5.330275003e-03f, 5.331015561e-03f, 5.331746871e-03f, 5.332468931e-03f, 5.333181741e-03f, 5.333885300e-03f, 5.334579607e-03f, 5.335264662e-03f, 5.335940464e-03f, 5.336607012e-03f,
-5.337264305e-03f, 5.337912344e-03f, 5.338551126e-03f, 5.339180652e-03f, 5.339800921e-03f, 5.340411932e-03f, 5.341013684e-03f, 5.341606178e-03f, 5.342189412e-03f, 5.342763386e-03f,
-5.343328100e-03f, 5.343883552e-03f, 5.344429742e-03f, 5.344966671e-03f, 5.345494337e-03f, 5.346012740e-03f, 5.346521879e-03f, 5.347021755e-03f, 5.347512366e-03f, 5.347993712e-03f,
-5.348465794e-03f, 5.348928609e-03f, 5.349382160e-03f, 5.349826444e-03f, 5.350261461e-03f, 5.350687212e-03f, 5.351103696e-03f, 5.351510912e-03f, 5.351908861e-03f, 5.352297542e-03f,
-5.352676956e-03f, 5.353047101e-03f, 5.353407978e-03f, 5.353759586e-03f, 5.354101925e-03f, 5.354434996e-03f, 5.354758798e-03f, 5.355073331e-03f, 5.355378594e-03f, 5.355674589e-03f,
-5.355961314e-03f, 5.356238770e-03f, 5.356506957e-03f, 5.356765874e-03f, 5.357015522e-03f, 5.357255901e-03f, 5.357487010e-03f, 5.357708851e-03f, 5.357921422e-03f, 5.358124724e-03f,
-5.358318758e-03f, 5.358503522e-03f, 5.358679018e-03f, 5.358845245e-03f, 5.359002204e-03f, 5.359149895e-03f, 5.359288318e-03f, 5.359417473e-03f, 5.359537361e-03f, 5.359647981e-03f,
-5.359749335e-03f, 5.359841421e-03f, 5.359924242e-03f, 5.359997796e-03f, 5.360062085e-03f, 5.360117108e-03f, 5.360162866e-03f, 5.360199359e-03f, 5.360226588e-03f, 5.360244553e-03f,
-5.360253255e-03f, 5.360252693e-03f, 5.360242869e-03f, 5.360223783e-03f, 5.360195436e-03f, 5.360157827e-03f, 5.360110958e-03f, 5.360054829e-03f, 5.359989440e-03f, 5.359914792e-03f,
-5.359830886e-03f, 5.359737722e-03f, 5.359635302e-03f, 5.359523624e-03f, 5.359402691e-03f, 5.359272503e-03f, 5.359133060e-03f, 5.358984363e-03f, 5.358826414e-03f, 5.358659212e-03f,
-5.358482758e-03f, 5.358297053e-03f, 5.358102099e-03f, 5.357897895e-03f, 5.357684443e-03f, 5.357461743e-03f, 5.357229796e-03f, 5.356988603e-03f, 5.356738166e-03f, 5.356478484e-03f,
-5.356209558e-03f, 5.355931391e-03f, 5.355643982e-03f, 5.355347332e-03f, 5.355041443e-03f, 5.354726316e-03f, 5.354401951e-03f, 5.354068349e-03f, 5.353725512e-03f, 5.353373441e-03f,
-5.353012136e-03f, 5.352641599e-03f, 5.352261830e-03f, 5.351872832e-03f, 5.351474604e-03f, 5.351067149e-03f, 5.350650467e-03f, 5.350224560e-03f, 5.349789428e-03f, 5.349345074e-03f,
-5.348891497e-03f, 5.348428700e-03f, 5.347956683e-03f, 5.347475448e-03f, 5.346984997e-03f, 5.346485330e-03f, 5.345976448e-03f, 5.345458354e-03f, 5.344931049e-03f, 5.344394533e-03f,
-5.343848808e-03f, 5.343293876e-03f, 5.342729738e-03f, 5.342156396e-03f, 5.341573850e-03f, 5.340982103e-03f, 5.340381155e-03f, 5.339771009e-03f, 5.339151666e-03f, 5.338523127e-03f,
-5.337885394e-03f, 5.337238469e-03f, 5.336582352e-03f, 5.335917046e-03f, 5.335242553e-03f, 5.334558873e-03f, 5.333866008e-03f, 5.333163961e-03f, 5.332452732e-03f, 5.331732324e-03f,
-5.331002739e-03f, 5.330263977e-03f, 5.329516040e-03f, 5.328758931e-03f, 5.327992651e-03f, 5.327217202e-03f, 5.326432585e-03f, 5.325638803e-03f, 5.324835858e-03f, 5.324023750e-03f,
-5.323202483e-03f, 5.322372057e-03f, 5.321532475e-03f, 5.320683739e-03f, 5.319825850e-03f, 5.318958811e-03f, 5.318082623e-03f, 5.317197288e-03f, 5.316302809e-03f, 5.315399188e-03f,
-5.314486425e-03f, 5.313564525e-03f, 5.312633487e-03f, 5.311693315e-03f, 5.310744011e-03f, 5.309785577e-03f, 5.308818014e-03f, 5.307841325e-03f, 5.306855512e-03f, 5.305860578e-03f,
-5.304856524e-03f, 5.303843352e-03f, 5.302821065e-03f, 5.301789665e-03f, 5.300749154e-03f, 5.299699535e-03f, 5.298640810e-03f, 5.297572980e-03f, 5.296496049e-03f, 5.295410018e-03f,
-5.294314890e-03f, 5.293210668e-03f, 5.292097353e-03f, 5.290974948e-03f, 5.289843455e-03f, 5.288702878e-03f, 5.287553217e-03f, 5.286394476e-03f, 5.285226657e-03f, 5.284049763e-03f,
-5.282863795e-03f, 5.281668758e-03f, 5.280464652e-03f, 5.279251481e-03f, 5.278029247e-03f, 5.276797952e-03f, 5.275557600e-03f, 5.274308192e-03f, 5.273049732e-03f, 5.271782222e-03f,
-5.270505665e-03f, 5.269220063e-03f, 5.267925419e-03f, 5.266621736e-03f, 5.265309016e-03f, 5.263987262e-03f, 5.262656477e-03f, 5.261316664e-03f, 5.259967825e-03f, 5.258609963e-03f,
-5.257243080e-03f, 5.255867181e-03f, 5.254482267e-03f, 5.253088341e-03f, 5.251685407e-03f, 5.250273467e-03f, 5.248852523e-03f, 5.247422580e-03f, 5.245983639e-03f, 5.244535704e-03f,
-5.243078778e-03f, 5.241612863e-03f, 5.240137963e-03f, 5.238654080e-03f, 5.237161218e-03f, 5.235659380e-03f, 5.234148568e-03f, 5.232628786e-03f, 5.231100036e-03f, 5.229562323e-03f,
-5.228015648e-03f, 5.226460016e-03f, 5.224895428e-03f, 5.223321889e-03f, 5.221739402e-03f, 5.220147969e-03f, 5.218547594e-03f, 5.216938280e-03f, 5.215320030e-03f, 5.213692848e-03f,
-5.212056736e-03f, 5.210411699e-03f, 5.208757739e-03f, 5.207094859e-03f, 5.205423064e-03f, 5.203742355e-03f, 5.202052737e-03f, 5.200354214e-03f, 5.198646787e-03f, 5.196930461e-03f,
-5.195205240e-03f, 5.193471126e-03f, 5.191728123e-03f, 5.189976234e-03f, 5.188215463e-03f, 5.186445813e-03f, 5.184667289e-03f, 5.182879893e-03f, 5.181083628e-03f, 5.179278499e-03f,
-5.177464509e-03f, 5.175641662e-03f, 5.173809961e-03f, 5.171969409e-03f, 5.170120011e-03f, 5.168261770e-03f, 5.166394690e-03f, 5.164518774e-03f, 5.162634025e-03f, 5.160740449e-03f,
-5.158838048e-03f, 5.156926826e-03f, 5.155006786e-03f, 5.153077934e-03f, 5.151140272e-03f, 5.149193804e-03f, 5.147238533e-03f, 5.145274465e-03f, 5.143301602e-03f, 5.141319949e-03f,
-5.139329508e-03f, 5.137330285e-03f, 5.135322283e-03f, 5.133305506e-03f, 5.131279958e-03f, 5.129245643e-03f, 5.127202564e-03f, 5.125150726e-03f, 5.123090133e-03f, 5.121020788e-03f,
-5.118942696e-03f, 5.116855861e-03f, 5.114760286e-03f, 5.112655977e-03f, 5.110542936e-03f, 5.108421168e-03f, 5.106290677e-03f, 5.104151467e-03f, 5.102003542e-03f, 5.099846907e-03f,
-5.097681565e-03f, 5.095507521e-03f, 5.093324779e-03f, 5.091133343e-03f, 5.088933218e-03f, 5.086724407e-03f, 5.084506915e-03f, 5.082280745e-03f, 5.080045904e-03f, 5.077802393e-03f,
-5.075550219e-03f, 5.073289385e-03f, 5.071019895e-03f, 5.068741755e-03f, 5.066454968e-03f, 5.064159538e-03f, 5.061855470e-03f, 5.059542769e-03f, 5.057221439e-03f, 5.054891484e-03f,
-5.052552909e-03f, 5.050205718e-03f, 5.047849916e-03f, 5.045485507e-03f, 5.043112496e-03f, 5.040730887e-03f, 5.038340685e-03f, 5.035941894e-03f, 5.033534519e-03f, 5.031118564e-03f,
-5.028694035e-03f, 5.026260935e-03f, 5.023819270e-03f, 5.021369044e-03f, 5.018910261e-03f, 5.016442926e-03f, 5.013967045e-03f, 5.011482621e-03f, 5.008989659e-03f, 5.006488165e-03f,
-5.003978143e-03f, 5.001459597e-03f, 4.998932532e-03f, 4.996396954e-03f, 4.993852867e-03f, 4.991300275e-03f, 4.988739184e-03f, 4.986169599e-03f, 4.983591523e-03f, 4.981004964e-03f,
-4.978409924e-03f, 4.975806409e-03f, 4.973194424e-03f, 4.970573974e-03f, 4.967945063e-03f, 4.965307697e-03f, 4.962661882e-03f, 4.960007620e-03f, 4.957344919e-03f, 4.954673782e-03f,
-4.951994215e-03f, 4.949306222e-03f, 4.946609810e-03f, 4.943904982e-03f, 4.941191745e-03f, 4.938470103e-03f, 4.935740060e-03f, 4.933001624e-03f, 4.930254797e-03f, 4.927499587e-03f,
-4.924735997e-03f, 4.921964033e-03f, 4.919183701e-03f, 4.916395005e-03f, 4.913597950e-03f, 4.910792543e-03f, 4.907978787e-03f, 4.905156690e-03f, 4.902326254e-03f, 4.899487487e-03f,
-4.896640394e-03f, 4.893784979e-03f, 4.890921248e-03f, 4.888049206e-03f, 4.885168859e-03f, 4.882280213e-03f, 4.879383272e-03f, 4.876478042e-03f, 4.873564528e-03f, 4.870642736e-03f,
-4.867712671e-03f, 4.864774340e-03f, 4.861827746e-03f, 4.858872896e-03f, 4.855909796e-03f, 4.852938450e-03f, 4.849958864e-03f, 4.846971045e-03f, 4.843974997e-03f, 4.840970726e-03f,
-4.837958237e-03f, 4.834937537e-03f, 4.831908631e-03f, 4.828871524e-03f, 4.825826222e-03f, 4.822772731e-03f, 4.819711057e-03f, 4.816641204e-03f, 4.813563180e-03f, 4.810476989e-03f,
-4.807382638e-03f, 4.804280132e-03f, 4.801169477e-03f, 4.798050678e-03f, 4.794923742e-03f, 4.791788674e-03f, 4.788645480e-03f, 4.785494165e-03f, 4.782334737e-03f, 4.779167200e-03f,
-4.775991561e-03f, 4.772807825e-03f, 4.769615998e-03f, 4.766416087e-03f, 4.763208096e-03f, 4.759992033e-03f, 4.756767903e-03f, 4.753535711e-03f, 4.750295465e-03f, 4.747047169e-03f,
-4.743790830e-03f, 4.740526455e-03f, 4.737254048e-03f, 4.733973616e-03f, 4.730685166e-03f, 4.727388703e-03f, 4.724084233e-03f, 4.720771762e-03f, 4.717451297e-03f, 4.714122843e-03f,
-4.710786408e-03f, 4.707441996e-03f, 4.704089614e-03f, 4.700729269e-03f, 4.697360966e-03f, 4.693984712e-03f, 4.690600513e-03f, 4.687208375e-03f, 4.683808305e-03f, 4.680400308e-03f,
-4.676984391e-03f, 4.673560560e-03f, 4.670128822e-03f, 4.666689183e-03f, 4.663241649e-03f, 4.659786227e-03f, 4.656322922e-03f, 4.652851742e-03f, 4.649372693e-03f, 4.645885780e-03f,
-4.642391012e-03f, 4.638888393e-03f, 4.635377930e-03f, 4.631859630e-03f, 4.628333500e-03f, 4.624799545e-03f, 4.621257773e-03f, 4.617708189e-03f, 4.614150801e-03f, 4.610585614e-03f,
-4.607012636e-03f, 4.603431873e-03f, 4.599843331e-03f, 4.596247018e-03f, 4.592642939e-03f, 4.589031101e-03f, 4.585411511e-03f, 4.581784176e-03f, 4.578149101e-03f, 4.574506295e-03f,
-4.570855763e-03f, 4.567197513e-03f, 4.563531550e-03f, 4.559857882e-03f, 4.556176515e-03f, 4.552487457e-03f, 4.548790713e-03f, 4.545086291e-03f, 4.541374197e-03f, 4.537654439e-03f,
-4.533927022e-03f, 4.530191955e-03f, 4.526449243e-03f, 4.522698893e-03f, 4.518940913e-03f, 4.515175309e-03f, 4.511402088e-03f, 4.507621257e-03f, 4.503832823e-03f, 4.500036793e-03f,
-4.496233173e-03f, 4.492421972e-03f, 4.488603195e-03f, 4.484776849e-03f, 4.480942942e-03f, 4.477101481e-03f, 4.473252473e-03f, 4.469395924e-03f, 4.465531841e-03f, 4.461660233e-03f,
-4.457781105e-03f, 4.453894465e-03f, 4.450000320e-03f, 4.446098678e-03f, 4.442189544e-03f, 4.438272926e-03f, 4.434348832e-03f, 4.430417269e-03f, 4.426478243e-03f, 4.422531763e-03f,
-4.418577834e-03f, 4.414616464e-03f, 4.410647662e-03f, 4.406671432e-03f, 4.402687784e-03f, 4.398696724e-03f, 4.394698260e-03f, 4.390692398e-03f, 4.386679146e-03f, 4.382658512e-03f,
-4.378630502e-03f, 4.374595124e-03f, 4.370552386e-03f, 4.366502294e-03f, 4.362444856e-03f, 4.358380080e-03f, 4.354307972e-03f, 4.350228541e-03f, 4.346141793e-03f, 4.342047736e-03f,
-4.337946378e-03f, 4.333837725e-03f, 4.329721786e-03f, 4.325598568e-03f, 4.321468077e-03f, 4.317330323e-03f, 4.313185312e-03f, 4.309033052e-03f, 4.304873550e-03f, 4.300706814e-03f,
-4.296532852e-03f, 4.292351670e-03f, 4.288163278e-03f, 4.283967681e-03f, 4.279764888e-03f, 4.275554907e-03f, 4.271337745e-03f, 4.267113409e-03f, 4.262881908e-03f, 4.258643248e-03f,
-4.254397439e-03f, 4.250144486e-03f, 4.245884399e-03f, 4.241617185e-03f, 4.237342851e-03f, 4.233061405e-03f, 4.228772856e-03f, 4.224477210e-03f, 4.220174476e-03f, 4.215864661e-03f,
-4.211547773e-03f, 4.207223820e-03f, 4.202892809e-03f, 4.198554750e-03f, 4.194209648e-03f, 4.189857513e-03f, 4.185498353e-03f, 4.181132174e-03f, 4.176758985e-03f, 4.172378794e-03f,
-4.167991608e-03f, 4.163597437e-03f, 4.159196286e-03f, 4.154788166e-03f, 4.150373083e-03f, 4.145951045e-03f, 4.141522061e-03f, 4.137086138e-03f, 4.132643285e-03f, 4.128193509e-03f,
-4.123736818e-03f, 4.119273222e-03f, 4.114802726e-03f, 4.110325341e-03f, 4.105841073e-03f, 4.101349931e-03f, 4.096851923e-03f, 4.092347057e-03f, 4.087835341e-03f, 4.083316784e-03f,
-4.078791392e-03f, 4.074259176e-03f, 4.069720142e-03f, 4.065174299e-03f, 4.060621656e-03f, 4.056062219e-03f, 4.051495998e-03f, 4.046923001e-03f, 4.042343236e-03f, 4.037756712e-03f,
-4.033163435e-03f, 4.028563416e-03f, 4.023956661e-03f, 4.019343180e-03f, 4.014722981e-03f, 4.010096071e-03f, 4.005462460e-03f, 4.000822156e-03f, 3.996175166e-03f, 3.991521500e-03f,
-3.986861166e-03f, 3.982194171e-03f, 3.977520526e-03f, 3.972840237e-03f, 3.968153313e-03f, 3.963459763e-03f, 3.958759595e-03f, 3.954052818e-03f, 3.949339440e-03f, 3.944619470e-03f,
-3.939892915e-03f, 3.935159785e-03f, 3.930420088e-03f, 3.925673833e-03f, 3.920921027e-03f, 3.916161681e-03f, 3.911395801e-03f, 3.906623397e-03f, 3.901844478e-03f, 3.897059051e-03f,
-3.892267126e-03f, 3.887468710e-03f, 3.882663814e-03f, 3.877852444e-03f, 3.873034611e-03f, 3.868210322e-03f, 3.863379586e-03f, 3.858542412e-03f, 3.853698809e-03f, 3.848848785e-03f,
-3.843992349e-03f, 3.839129509e-03f, 3.834260275e-03f, 3.829384655e-03f, 3.824502658e-03f, 3.819614292e-03f, 3.814719567e-03f, 3.809818491e-03f, 3.804911073e-03f, 3.799997321e-03f,
-3.795077245e-03f, 3.790150853e-03f, 3.785218154e-03f, 3.780279157e-03f, 3.775333871e-03f, 3.770382305e-03f, 3.765424467e-03f, 3.760460367e-03f, 3.755490013e-03f, 3.750513414e-03f,
-3.745530579e-03f, 3.740541517e-03f, 3.735546237e-03f, 3.730544748e-03f, 3.725537059e-03f, 3.720523179e-03f, 3.715503116e-03f, 3.710476880e-03f, 3.705444480e-03f, 3.700405924e-03f,
-3.695361222e-03f, 3.690310383e-03f, 3.685253416e-03f, 3.680190330e-03f, 3.675121133e-03f, 3.670045835e-03f, 3.664964446e-03f, 3.659876973e-03f, 3.654783427e-03f, 3.649683816e-03f,
-3.644578149e-03f, 3.639466436e-03f, 3.634348685e-03f, 3.629224906e-03f, 3.624095108e-03f, 3.618959301e-03f, 3.613817492e-03f, 3.608669692e-03f, 3.603515909e-03f, 3.598356154e-03f,
-3.593190434e-03f, 3.588018760e-03f, 3.582841140e-03f, 3.577657584e-03f, 3.572468101e-03f, 3.567272700e-03f, 3.562071391e-03f, 3.556864182e-03f, 3.551651083e-03f, 3.546432104e-03f,
-3.541207254e-03f, 3.535976541e-03f, 3.530739976e-03f, 3.525497568e-03f, 3.520249325e-03f, 3.514995258e-03f, 3.509735376e-03f, 3.504469688e-03f, 3.499198203e-03f, 3.493920931e-03f,
-3.488637882e-03f, 3.483349064e-03f, 3.478054487e-03f, 3.472754161e-03f, 3.467448095e-03f, 3.462136299e-03f, 3.456818781e-03f, 3.451495552e-03f, 3.446166620e-03f, 3.440831996e-03f,
-3.435491689e-03f, 3.430145708e-03f, 3.424794063e-03f, 3.419436763e-03f, 3.414073819e-03f, 3.408705239e-03f, 3.403331033e-03f, 3.397951210e-03f, 3.392565781e-03f, 3.387174754e-03f,
-3.381778140e-03f, 3.376375948e-03f, 3.370968188e-03f, 3.365554868e-03f, 3.360136000e-03f, 3.354711592e-03f, 3.349281654e-03f, 3.343846195e-03f, 3.338405226e-03f, 3.332958757e-03f,
-3.327506796e-03f, 3.322049353e-03f, 3.316586439e-03f, 3.311118062e-03f, 3.305644234e-03f, 3.300164962e-03f, 3.294680258e-03f, 3.289190130e-03f, 3.283694589e-03f, 3.278193644e-03f,
-3.272687306e-03f, 3.267175583e-03f, 3.261658486e-03f, 3.256136024e-03f, 3.250608208e-03f, 3.245075046e-03f, 3.239536550e-03f, 3.233992728e-03f, 3.228443591e-03f, 3.222889149e-03f,
-3.217329411e-03f, 3.211764386e-03f, 3.206194086e-03f, 3.200618520e-03f, 3.195037698e-03f, 3.189451629e-03f, 3.183860324e-03f, 3.178263793e-03f, 3.172662045e-03f, 3.167055091e-03f,
-3.161442940e-03f, 3.155825602e-03f, 3.150203087e-03f, 3.144575406e-03f, 3.138942568e-03f, 3.133304583e-03f, 3.127661462e-03f, 3.122013214e-03f, 3.116359848e-03f, 3.110701377e-03f,
-3.105037808e-03f, 3.099369153e-03f, 3.093695421e-03f, 3.088016623e-03f, 3.082332768e-03f, 3.076643866e-03f, 3.070949929e-03f, 3.065250965e-03f, 3.059546985e-03f, 3.053837998e-03f,
-3.048124016e-03f, 3.042405048e-03f, 3.036681104e-03f, 3.030952195e-03f, 3.025218330e-03f, 3.019479520e-03f, 3.013735775e-03f, 3.007987105e-03f, 3.002233520e-03f, 2.996475031e-03f,
-2.990711647e-03f, 2.984943379e-03f, 2.979170237e-03f, 2.973392231e-03f, 2.967609372e-03f, 2.961821669e-03f, 2.956029133e-03f, 2.950231775e-03f, 2.944429604e-03f, 2.938622630e-03f,
-2.932810865e-03f, 2.926994317e-03f, 2.921172999e-03f, 2.915346919e-03f, 2.909516088e-03f, 2.903680517e-03f, 2.897840215e-03f, 2.891995194e-03f, 2.886145462e-03f, 2.880291032e-03f,
-2.874431913e-03f, 2.868568115e-03f, 2.862699649e-03f, 2.856826525e-03f, 2.850948754e-03f, 2.845066346e-03f, 2.839179311e-03f, 2.833287660e-03f, 2.827391403e-03f, 2.821490550e-03f,
-2.815585113e-03f, 2.809675101e-03f, 2.803760525e-03f, 2.797841395e-03f, 2.791917722e-03f, 2.785989516e-03f, 2.780056788e-03f, 2.774119548e-03f, 2.768177806e-03f, 2.762231574e-03f,
-2.756280862e-03f, 2.750325679e-03f, 2.744366037e-03f, 2.738401947e-03f, 2.732433418e-03f, 2.726460461e-03f, 2.720483087e-03f, 2.714501306e-03f, 2.708515130e-03f, 2.702524567e-03f,
-2.696529630e-03f, 2.690530328e-03f, 2.684526672e-03f, 2.678518673e-03f, 2.672506342e-03f, 2.666489688e-03f, 2.660468723e-03f, 2.654443457e-03f, 2.648413901e-03f, 2.642380065e-03f,
-2.636341960e-03f, 2.630299598e-03f, 2.624252987e-03f, 2.618202139e-03f, 2.612147065e-03f, 2.606087776e-03f, 2.600024281e-03f, 2.593956592e-03f, 2.587884720e-03f, 2.581808674e-03f,
-2.575728467e-03f, 2.569644108e-03f, 2.563555608e-03f, 2.557462978e-03f, 2.551366229e-03f, 2.545265371e-03f, 2.539160416e-03f, 2.533051373e-03f, 2.526938254e-03f, 2.520821070e-03f,
-2.514699830e-03f, 2.508574547e-03f, 2.502445231e-03f, 2.496311892e-03f, 2.490174541e-03f, 2.484033190e-03f, 2.477887848e-03f, 2.471738528e-03f, 2.465585239e-03f, 2.459427992e-03f,
-2.453266799e-03f, 2.447101670e-03f, 2.440932616e-03f, 2.434759647e-03f, 2.428582776e-03f, 2.422402012e-03f, 2.416217366e-03f, 2.410028850e-03f, 2.403836474e-03f, 2.397640248e-03f,
-2.391440185e-03f, 2.385236295e-03f, 2.379028589e-03f, 2.372817077e-03f, 2.366601771e-03f, 2.360382681e-03f, 2.354159819e-03f, 2.347933195e-03f, 2.341702821e-03f, 2.335468707e-03f,
-2.329230864e-03f, 2.322989304e-03f, 2.316744037e-03f, 2.310495074e-03f, 2.304242426e-03f, 2.297986104e-03f, 2.291726119e-03f, 2.285462483e-03f, 2.279195206e-03f, 2.272924298e-03f,
-2.266649772e-03f, 2.260371639e-03f, 2.254089908e-03f, 2.247804592e-03f, 2.241515700e-03f, 2.235223246e-03f, 2.228927238e-03f, 2.222627689e-03f, 2.216324610e-03f, 2.210018011e-03f,
-2.203707904e-03f, 2.197394299e-03f, 2.191077209e-03f, 2.184756643e-03f, 2.178432613e-03f, 2.172105130e-03f, 2.165774205e-03f, 2.159439850e-03f, 2.153102075e-03f, 2.146760892e-03f,
-2.140416311e-03f, 2.134068344e-03f, 2.127717002e-03f, 2.121362296e-03f, 2.115004237e-03f, 2.108642836e-03f, 2.102278105e-03f, 2.095910055e-03f, 2.089538697e-03f, 2.083164041e-03f,
-2.076786100e-03f, 2.070404884e-03f, 2.064020405e-03f, 2.057632673e-03f, 2.051241701e-03f, 2.044847498e-03f, 2.038450077e-03f, 2.032049449e-03f, 2.025645624e-03f, 2.019238614e-03f,
-2.012828431e-03f, 2.006415085e-03f, 1.999998588e-03f, 1.993578951e-03f, 1.987156185e-03f, 1.980730301e-03f, 1.974301311e-03f, 1.967869226e-03f, 1.961434058e-03f, 1.954995817e-03f,
-1.948554515e-03f, 1.942110162e-03f, 1.935662772e-03f, 1.929212354e-03f, 1.922758919e-03f, 1.916302480e-03f, 1.909843048e-03f, 1.903380634e-03f, 1.896915248e-03f, 1.890446904e-03f,
-1.883975611e-03f, 1.877501381e-03f, 1.871024226e-03f, 1.864544156e-03f, 1.858061184e-03f, 1.851575320e-03f, 1.845086577e-03f, 1.838594964e-03f, 1.832100494e-03f, 1.825603178e-03f,
-1.819103027e-03f, 1.812600053e-03f, 1.806094267e-03f, 1.799585680e-03f, 1.793074304e-03f, 1.786560151e-03f, 1.780043231e-03f, 1.773523556e-03f, 1.767001137e-03f, 1.760475987e-03f,
-1.753948115e-03f, 1.747417534e-03f, 1.740884255e-03f, 1.734348290e-03f, 1.727809650e-03f, 1.721268346e-03f, 1.714724389e-03f, 1.708177792e-03f, 1.701628566e-03f, 1.695076721e-03f,
-1.688522271e-03f, 1.681965225e-03f, 1.675405596e-03f, 1.668843394e-03f, 1.662278632e-03f, 1.655711321e-03f, 1.649141473e-03f, 1.642569098e-03f, 1.635994208e-03f, 1.629416815e-03f,
-1.622836931e-03f, 1.616254566e-03f, 1.609669732e-03f, 1.603082441e-03f, 1.596492705e-03f, 1.589900534e-03f, 1.583305941e-03f, 1.576708936e-03f, 1.570109532e-03f, 1.563507739e-03f,
-1.556903570e-03f, 1.550297036e-03f, 1.543688149e-03f, 1.537076919e-03f, 1.530463359e-03f, 1.523847479e-03f, 1.517229293e-03f, 1.510608810e-03f, 1.503986044e-03f, 1.497361004e-03f,
-1.490733703e-03f, 1.484104153e-03f, 1.477472365e-03f, 1.470838350e-03f, 1.464202120e-03f, 1.457563687e-03f, 1.450923063e-03f, 1.444280258e-03f, 1.437635284e-03f, 1.430988154e-03f,
-1.424338878e-03f, 1.417687468e-03f, 1.411033936e-03f, 1.404378294e-03f, 1.397720552e-03f, 1.391060723e-03f, 1.384398819e-03f, 1.377734850e-03f, 1.371068829e-03f, 1.364400767e-03f,
-1.357730675e-03f, 1.351058566e-03f, 1.344384451e-03f, 1.337708341e-03f, 1.331030249e-03f, 1.324350185e-03f, 1.317668162e-03f, 1.310984191e-03f, 1.304298284e-03f, 1.297610452e-03f,
-1.290920708e-03f, 1.284229062e-03f, 1.277535526e-03f, 1.270840113e-03f, 1.264142833e-03f, 1.257443699e-03f, 1.250742722e-03f, 1.244039914e-03f, 1.237335286e-03f, 1.230628850e-03f,
-1.223920617e-03f, 1.217210601e-03f, 1.210498811e-03f, 1.203785260e-03f, 1.197069960e-03f, 1.190352922e-03f, 1.183634158e-03f, 1.176913679e-03f, 1.170191498e-03f, 1.163467625e-03f,
-1.156742073e-03f, 1.150014854e-03f, 1.143285979e-03f, 1.136555459e-03f, 1.129823307e-03f, 1.123089534e-03f, 1.116354153e-03f, 1.109617173e-03f, 1.102878609e-03f, 1.096138470e-03f,
-1.089396769e-03f, 1.082653518e-03f, 1.075908728e-03f, 1.069162411e-03f, 1.062414579e-03f, 1.055665243e-03f, 1.048914415e-03f, 1.042162108e-03f, 1.035408332e-03f, 1.028653099e-03f,
-1.021896422e-03f, 1.015138312e-03f, 1.008378780e-03f, 1.001617839e-03f, 9.948554997e-04f, 9.880917747e-04f, 9.813266753e-04f, 9.745602133e-04f, 9.677924006e-04f, 9.610232489e-04f,
-9.542527698e-04f, 9.474809753e-04f, 9.407078771e-04f, 9.339334869e-04f, 9.271578166e-04f, 9.203808778e-04f, 9.136026823e-04f, 9.068232420e-04f, 9.000425687e-04f, 8.932606739e-04f,
-8.864775697e-04f, 8.796932677e-04f, 8.729077798e-04f, 8.661211176e-04f, 8.593332931e-04f, 8.525443179e-04f, 8.457542039e-04f, 8.389629629e-04f, 8.321706066e-04f, 8.253771469e-04f,
-8.185825955e-04f, 8.117869643e-04f, 8.049902650e-04f, 7.981925094e-04f, 7.913937094e-04f, 7.845938766e-04f, 7.777930231e-04f, 7.709911604e-04f, 7.641883005e-04f, 7.573844551e-04f,
-7.505796361e-04f, 7.437738553e-04f, 7.369671244e-04f, 7.301594552e-04f, 7.233508597e-04f, 7.165413496e-04f, 7.097309366e-04f, 7.029196327e-04f, 6.961074496e-04f, 6.892943992e-04f,
-6.824804932e-04f, 6.756657435e-04f, 6.688501619e-04f, 6.620337603e-04f, 6.552165503e-04f, 6.483985440e-04f, 6.415797530e-04f, 6.347601892e-04f, 6.279398644e-04f, 6.211187905e-04f,
-6.142969793e-04f, 6.074744425e-04f, 6.006511921e-04f, 5.938272398e-04f, 5.870025975e-04f, 5.801772770e-04f, 5.733512901e-04f, 5.665246487e-04f, 5.596973646e-04f, 5.528694496e-04f,
-5.460409156e-04f, 5.392117743e-04f, 5.323820376e-04f, 5.255517174e-04f, 5.187208254e-04f, 5.118893736e-04f, 5.050573737e-04f, 4.982248375e-04f, 4.913917770e-04f, 4.845582039e-04f,
-4.777241300e-04f, 4.708895673e-04f, 4.640545275e-04f, 4.572190225e-04f, 4.503830641e-04f, 4.435466642e-04f, 4.367098345e-04f, 4.298725870e-04f, 4.230349334e-04f, 4.161968855e-04f,
-4.093584554e-04f, 4.025196546e-04f, 3.956804952e-04f, 3.888409889e-04f, 3.820011476e-04f, 3.751609831e-04f, 3.683205072e-04f, 3.614797318e-04f, 3.546386687e-04f, 3.477973297e-04f,
-3.409557268e-04f, 3.341138716e-04f, 3.272717762e-04f, 3.204294522e-04f, 3.135869115e-04f, 3.067441660e-04f, 2.999012275e-04f, 2.930581078e-04f, 2.862148188e-04f, 2.793713723e-04f,
-2.725277801e-04f, 2.656840541e-04f, 2.588402061e-04f, 2.519962479e-04f, 2.451521914e-04f, 2.383080484e-04f, 2.314638307e-04f, 2.246195501e-04f, 2.177752186e-04f, 2.109308479e-04f,
-2.040864498e-04f, 1.972420362e-04f, 1.903976189e-04f, 1.835532097e-04f, 1.767088205e-04f, 1.698644630e-04f, 1.630201492e-04f, 1.561758908e-04f, 1.493316997e-04f, 1.424875877e-04f,
-1.356435666e-04f, 1.287996482e-04f, 1.219558443e-04f, 1.151121668e-04f, 1.082686276e-04f, 1.014252383e-04f, 9.458201087e-05f, 8.773895708e-05f, 8.089608876e-05f, 7.405341771e-05f,
-6.721095577e-05f, 6.036871473e-05f, 5.352670642e-05f, 4.668494263e-05f, 3.984343520e-05f, 3.300219592e-05f, 2.616123660e-05f, 1.932056905e-05f, 1.248020509e-05f, 5.640156501e-06f,
--1.199564896e-06f, -8.038947301e-06f, -1.487797891e-05f, -2.171664793e-05f, -2.855494255e-05f, -3.539285098e-05f, -4.223036142e-05f, -4.906746207e-05f, -5.590414115e-05f, -6.274038685e-05f,
--6.957618738e-05f, -7.641153095e-05f, -8.324640578e-05f, -9.008080008e-05f, -9.691470205e-05f, -1.037480999e-04f, -1.105809819e-04f, -1.174133362e-04f, -1.242451511e-04f, -1.310764147e-04f,
--1.379071153e-04f, -1.447372411e-04f, -1.515667804e-04f, -1.583957213e-04f, -1.652240521e-04f, -1.720517611e-04f, -1.788788364e-04f, -1.857052663e-04f, -1.925310391e-04f, -1.993561428e-04f,
--2.061805659e-04f, -2.130042966e-04f, -2.198273230e-04f, -2.266496335e-04f, -2.334712162e-04f, -2.402920595e-04f, -2.471121515e-04f, -2.539314805e-04f, -2.607500349e-04f, -2.675678027e-04f,
--2.743847724e-04f, -2.812009321e-04f, -2.880162701e-04f, -2.948307747e-04f, -3.016444341e-04f, -3.084572367e-04f, -3.152691706e-04f, -3.220802241e-04f, -3.288903856e-04f, -3.356996433e-04f,
--3.425079854e-04f, -3.493154003e-04f, -3.561218763e-04f, -3.629274015e-04f, -3.697319644e-04f, -3.765355532e-04f, -3.833381561e-04f, -3.901397615e-04f, -3.969403577e-04f, -4.037399330e-04f,
--4.105384757e-04f, -4.173359740e-04f, -4.241324163e-04f, -4.309277909e-04f, -4.377220861e-04f, -4.445152902e-04f, -4.513073915e-04f, -4.580983784e-04f, -4.648882391e-04f, -4.716769620e-04f,
--4.784645355e-04f, -4.852509477e-04f, -4.920361871e-04f, -4.988202421e-04f, -5.056031008e-04f, -5.123847518e-04f, -5.191651832e-04f, -5.259443835e-04f, -5.327223410e-04f, -5.394990440e-04f,
--5.462744810e-04f, -5.530486402e-04f, -5.598215100e-04f, -5.665930788e-04f, -5.733633349e-04f, -5.801322667e-04f, -5.868998626e-04f, -5.936661109e-04f, -6.004310000e-04f, -6.071945184e-04f,
--6.139566543e-04f, -6.207173961e-04f, -6.274767323e-04f, -6.342346512e-04f, -6.409911412e-04f, -6.477461907e-04f, -6.544997882e-04f, -6.612519219e-04f, -6.680025804e-04f, -6.747517520e-04f,
--6.814994251e-04f, -6.882455881e-04f, -6.949902296e-04f, -7.017333378e-04f, -7.084749012e-04f, -7.152149082e-04f, -7.219533473e-04f, -7.286902069e-04f, -7.354254755e-04f, -7.421591414e-04f,
--7.488911931e-04f, -7.556216191e-04f, -7.623504077e-04f, -7.690775476e-04f, -7.758030270e-04f, -7.825268346e-04f, -7.892489586e-04f, -7.959693877e-04f, -8.026881103e-04f, -8.094051148e-04f,
--8.161203897e-04f, -8.228339236e-04f, -8.295457048e-04f, -8.362557219e-04f, -8.429639634e-04f, -8.496704178e-04f, -8.563750735e-04f, -8.630779191e-04f, -8.697789430e-04f, -8.764781339e-04f,
--8.831754802e-04f, -8.898709703e-04f, -8.965645929e-04f, -9.032563365e-04f, -9.099461896e-04f, -9.166341407e-04f, -9.233201783e-04f, -9.300042911e-04f, -9.366864675e-04f, -9.433666961e-04f,
--9.500449654e-04f, -9.567212640e-04f, -9.633955805e-04f, -9.700679035e-04f, -9.767382214e-04f, -9.834065229e-04f, -9.900727965e-04f, -9.967370309e-04f, -1.003399215e-03f, -1.010059336e-03f,
--1.016717384e-03f, -1.023373347e-03f, -1.030027214e-03f, -1.036678973e-03f, -1.043328613e-03f, -1.049976123e-03f, -1.056621490e-03f, -1.063264705e-03f, -1.069905755e-03f, -1.076544628e-03f,
--1.083181315e-03f, -1.089815802e-03f, -1.096448080e-03f, -1.103078136e-03f, -1.109705960e-03f, -1.116331539e-03f, -1.122954863e-03f, -1.129575920e-03f, -1.136194699e-03f, -1.142811189e-03f,
--1.149425377e-03f, -1.156037254e-03f, -1.162646807e-03f, -1.169254026e-03f, -1.175858898e-03f, -1.182461414e-03f, -1.189061560e-03f, -1.195659327e-03f, -1.202254703e-03f, -1.208847676e-03f,
--1.215438235e-03f, -1.222026370e-03f, -1.228612068e-03f, -1.235195319e-03f, -1.241776111e-03f, -1.248354433e-03f, -1.254930273e-03f, -1.261503621e-03f, -1.268074466e-03f, -1.274642795e-03f,
--1.281208598e-03f, -1.287771864e-03f, -1.294332581e-03f, -1.300890738e-03f, -1.307446324e-03f, -1.313999328e-03f, -1.320549739e-03f, -1.327097545e-03f, -1.333642735e-03f, -1.340185298e-03f,
--1.346725222e-03f, -1.353262498e-03f, -1.359797112e-03f, -1.366329056e-03f, -1.372858316e-03f, -1.379384882e-03f, -1.385908743e-03f, -1.392429888e-03f, -1.398948306e-03f, -1.405463984e-03f,
--1.411976914e-03f, -1.418487082e-03f, -1.424994479e-03f, -1.431499092e-03f, -1.438000911e-03f, -1.444499925e-03f, -1.450996123e-03f, -1.457489494e-03f, -1.463980026e-03f, -1.470467708e-03f,
--1.476952530e-03f, -1.483434480e-03f, -1.489913547e-03f, -1.496389720e-03f, -1.502862989e-03f, -1.509333342e-03f, -1.515800768e-03f, -1.522265255e-03f, -1.528726794e-03f, -1.535185373e-03f,
--1.541640981e-03f, -1.548093606e-03f, -1.554543239e-03f, -1.560989868e-03f, -1.567433481e-03f, -1.573874069e-03f, -1.580311619e-03f, -1.586746122e-03f, -1.593177566e-03f, -1.599605939e-03f,
--1.606031232e-03f, -1.612453433e-03f, -1.618872532e-03f, -1.625288516e-03f, -1.631701376e-03f, -1.638111100e-03f, -1.644517678e-03f, -1.650921099e-03f, -1.657321351e-03f, -1.663718424e-03f,
--1.670112307e-03f, -1.676502989e-03f, -1.682890459e-03f, -1.689274706e-03f, -1.695655719e-03f, -1.702033488e-03f, -1.708408002e-03f, -1.714779249e-03f, -1.721147220e-03f, -1.727511902e-03f,
--1.733873286e-03f, -1.740231360e-03f, -1.746586113e-03f, -1.752937536e-03f, -1.759285616e-03f, -1.765630344e-03f, -1.771971708e-03f, -1.778309697e-03f, -1.784644301e-03f, -1.790975510e-03f,
--1.797303311e-03f, -1.803627695e-03f, -1.809948650e-03f, -1.816266167e-03f, -1.822580234e-03f, -1.828890840e-03f, -1.835197975e-03f, -1.841501628e-03f, -1.847801788e-03f, -1.854098445e-03f,
--1.860391587e-03f, -1.866681205e-03f, -1.872967287e-03f, -1.879249823e-03f, -1.885528802e-03f, -1.891804213e-03f, -1.898076046e-03f, -1.904344290e-03f, -1.910608935e-03f, -1.916869969e-03f,
--1.923127383e-03f, -1.929381165e-03f, -1.935631305e-03f, -1.941877792e-03f, -1.948120615e-03f, -1.954359765e-03f, -1.960595230e-03f, -1.966827000e-03f, -1.973055065e-03f, -1.979279412e-03f,
--1.985500033e-03f, -1.991716917e-03f, -1.997930052e-03f, -2.004139429e-03f, -2.010345037e-03f, -2.016546865e-03f, -2.022744903e-03f, -2.028939140e-03f, -2.035129566e-03f, -2.041316170e-03f,
--2.047498942e-03f, -2.053677871e-03f, -2.059852947e-03f, -2.066024159e-03f, -2.072191497e-03f, -2.078354950e-03f, -2.084514508e-03f, -2.090670161e-03f, -2.096821897e-03f, -2.102969708e-03f,
--2.109113581e-03f, -2.115253507e-03f, -2.121389475e-03f, -2.127521475e-03f, -2.133649497e-03f, -2.139773529e-03f, -2.145893562e-03f, -2.152009586e-03f, -2.158121590e-03f, -2.164229563e-03f,
--2.170333495e-03f, -2.176433376e-03f, -2.182529196e-03f, -2.188620944e-03f, -2.194708609e-03f, -2.200792183e-03f, -2.206871653e-03f, -2.212947011e-03f, -2.219018245e-03f, -2.225085345e-03f,
--2.231148302e-03f, -2.237207104e-03f, -2.243261742e-03f, -2.249312205e-03f, -2.255358483e-03f, -2.261400566e-03f, -2.267438444e-03f, -2.273472105e-03f, -2.279501541e-03f, -2.285526741e-03f,
--2.291547694e-03f, -2.297564391e-03f, -2.303576822e-03f, -2.309584975e-03f, -2.315588841e-03f, -2.321588410e-03f, -2.327583672e-03f, -2.333574616e-03f, -2.339561233e-03f, -2.345543512e-03f,
--2.351521442e-03f, -2.357495015e-03f, -2.363464220e-03f, -2.369429046e-03f, -2.375389484e-03f, -2.381345524e-03f, -2.387297155e-03f, -2.393244368e-03f, -2.399187152e-03f, -2.405125497e-03f,
--2.411059394e-03f, -2.416988832e-03f, -2.422913801e-03f, -2.428834291e-03f, -2.434750293e-03f, -2.440661796e-03f, -2.446568790e-03f, -2.452471265e-03f, -2.458369211e-03f, -2.464262619e-03f,
--2.470151478e-03f, -2.476035778e-03f, -2.481915510e-03f, -2.487790663e-03f, -2.493661228e-03f, -2.499527195e-03f, -2.505388553e-03f, -2.511245293e-03f, -2.517097405e-03f, -2.522944879e-03f,
--2.528787705e-03f, -2.534625873e-03f, -2.540459374e-03f, -2.546288197e-03f, -2.552112334e-03f, -2.557931773e-03f, -2.563746505e-03f, -2.569556520e-03f, -2.575361809e-03f, -2.581162362e-03f,
--2.586958168e-03f, -2.592749219e-03f, -2.598535504e-03f, -2.604317013e-03f, -2.610093738e-03f, -2.615865667e-03f, -2.621632792e-03f, -2.627395102e-03f, -2.633152588e-03f, -2.638905240e-03f,
--2.644653049e-03f, -2.650396004e-03f, -2.656134097e-03f, -2.661867317e-03f, -2.667595654e-03f, -2.673319100e-03f, -2.679037644e-03f, -2.684751277e-03f, -2.690459989e-03f, -2.696163771e-03f,
--2.701862613e-03f, -2.707556504e-03f, -2.713245437e-03f, -2.718929401e-03f, -2.724608386e-03f, -2.730282383e-03f, -2.735951383e-03f, -2.741615375e-03f, -2.747274351e-03f, -2.752928301e-03f,
--2.758577215e-03f, -2.764221084e-03f, -2.769859898e-03f, -2.775493647e-03f, -2.781122323e-03f, -2.786745916e-03f, -2.792364416e-03f, -2.797977814e-03f, -2.803586101e-03f, -2.809189266e-03f,
--2.814787301e-03f, -2.820380196e-03f, -2.825967942e-03f, -2.831550529e-03f, -2.837127948e-03f, -2.842700190e-03f, -2.848267245e-03f, -2.853829104e-03f, -2.859385757e-03f, -2.864937195e-03f,
--2.870483409e-03f, -2.876024389e-03f, -2.881560127e-03f, -2.887090612e-03f, -2.892615836e-03f, -2.898135789e-03f, -2.903650462e-03f, -2.909159846e-03f, -2.914663931e-03f, -2.920162708e-03f,
--2.925656169e-03f, -2.931144303e-03f, -2.936627101e-03f, -2.942104555e-03f, -2.947576655e-03f, -2.953043391e-03f, -2.958504756e-03f, -2.963960739e-03f, -2.969411331e-03f, -2.974856523e-03f,
--2.980296307e-03f, -2.985730672e-03f, -2.991159610e-03f, -2.996583112e-03f, -3.002001169e-03f, -3.007413771e-03f, -3.012820909e-03f, -3.018222575e-03f, -3.023618759e-03f, -3.029009452e-03f,
--3.034394645e-03f, -3.039774330e-03f, -3.045148496e-03f, -3.050517136e-03f, -3.055880240e-03f, -3.061237799e-03f, -3.066589804e-03f, -3.071936246e-03f, -3.077277116e-03f, -3.082612405e-03f,
--3.087942105e-03f, -3.093266206e-03f, -3.098584700e-03f, -3.103897576e-03f, -3.109204828e-03f, -3.114506445e-03f, -3.119802419e-03f, -3.125092741e-03f, -3.130377402e-03f, -3.135656394e-03f,
--3.140929706e-03f, -3.146197331e-03f, -3.151459260e-03f, -3.156715484e-03f, -3.161965994e-03f, -3.167210781e-03f, -3.172449837e-03f, -3.177683153e-03f, -3.182910719e-03f, -3.188132528e-03f,
--3.193348570e-03f, -3.198558837e-03f, -3.203763320e-03f, -3.208962011e-03f, -3.214154900e-03f, -3.219341979e-03f, -3.224523239e-03f, -3.229698673e-03f, -3.234868270e-03f, -3.240032022e-03f,
--3.245189921e-03f, -3.250341958e-03f, -3.255488124e-03f, -3.260628412e-03f, -3.265762811e-03f, -3.270891315e-03f, -3.276013913e-03f, -3.281130598e-03f, -3.286241361e-03f, -3.291346193e-03f,
--3.296445086e-03f, -3.301538032e-03f, -3.306625022e-03f, -3.311706047e-03f, -3.316781098e-03f, -3.321850169e-03f, -3.326913249e-03f, -3.331970331e-03f, -3.337021406e-03f, -3.342066465e-03f,
--3.347105501e-03f, -3.352138504e-03f, -3.357165467e-03f, -3.362186381e-03f, -3.367201238e-03f, -3.372210028e-03f, -3.377212745e-03f, -3.382209379e-03f, -3.387199923e-03f, -3.392184367e-03f,
--3.397162704e-03f, -3.402134926e-03f, -3.407101023e-03f, -3.412060988e-03f, -3.417014812e-03f, -3.421962488e-03f, -3.426904007e-03f, -3.431839360e-03f, -3.436768540e-03f, -3.441691538e-03f,
--3.446608346e-03f, -3.451518956e-03f, -3.456423360e-03f, -3.461321549e-03f, -3.466213516e-03f, -3.471099251e-03f, -3.475978748e-03f, -3.480851998e-03f, -3.485718993e-03f, -3.490579725e-03f,
--3.495434185e-03f, -3.500282365e-03f, -3.505124259e-03f, -3.509959856e-03f, -3.514789151e-03f, -3.519612133e-03f, -3.524428796e-03f, -3.529239131e-03f, -3.534043130e-03f, -3.538840786e-03f,
--3.543632091e-03f, -3.548417035e-03f, -3.553195612e-03f, -3.557967814e-03f, -3.562733632e-03f, -3.567493059e-03f, -3.572246086e-03f, -3.576992706e-03f, -3.581732912e-03f, -3.586466694e-03f,
--3.591194046e-03f, -3.595914959e-03f, -3.600629425e-03f, -3.605337437e-03f, -3.610038987e-03f, -3.614734067e-03f, -3.619422670e-03f, -3.624104787e-03f, -3.628780410e-03f, -3.633449533e-03f,
--3.638112147e-03f, -3.642768244e-03f, -3.647417817e-03f, -3.652060858e-03f, -3.656697359e-03f, -3.661327313e-03f, -3.665950712e-03f, -3.670567548e-03f, -3.675177814e-03f, -3.679781502e-03f,
--3.684378605e-03f, -3.688969114e-03f, -3.693553022e-03f, -3.698130322e-03f, -3.702701005e-03f, -3.707265065e-03f, -3.711822494e-03f, -3.716373284e-03f, -3.720917428e-03f, -3.725454919e-03f,
--3.729985747e-03f, -3.734509908e-03f, -3.739027391e-03f, -3.743538191e-03f, -3.748042300e-03f, -3.752539710e-03f, -3.757030414e-03f, -3.761514405e-03f, -3.765991674e-03f, -3.770462215e-03f,
--3.774926021e-03f, -3.779383083e-03f, -3.783833395e-03f, -3.788276948e-03f, -3.792713737e-03f, -3.797143753e-03f, -3.801566989e-03f, -3.805983438e-03f, -3.810393092e-03f, -3.814795945e-03f,
--3.819191989e-03f, -3.823581216e-03f, -3.827963620e-03f, -3.832339193e-03f, -3.836707928e-03f, -3.841069817e-03f, -3.845424855e-03f, -3.849773032e-03f, -3.854114343e-03f, -3.858448780e-03f,
--3.862776336e-03f, -3.867097004e-03f, -3.871410776e-03f, -3.875717646e-03f, -3.880017606e-03f, -3.884310649e-03f, -3.888596769e-03f, -3.892875958e-03f, -3.897148209e-03f, -3.901413515e-03f,
--3.905671869e-03f, -3.909923264e-03f, -3.914167693e-03f, -3.918405150e-03f, -3.922635626e-03f, -3.926859115e-03f, -3.931075611e-03f, -3.935285106e-03f, -3.939487593e-03f, -3.943683065e-03f,
--3.947871516e-03f, -3.952052938e-03f, -3.956227325e-03f, -3.960394670e-03f, -3.964554966e-03f, -3.968708206e-03f, -3.972854383e-03f, -3.976993491e-03f, -3.981125522e-03f, -3.985250470e-03f,
--3.989368329e-03f, -3.993479090e-03f, -3.997582749e-03f, -4.001679297e-03f, -4.005768728e-03f, -4.009851035e-03f, -4.013926213e-03f, -4.017994253e-03f, -4.022055149e-03f, -4.026108896e-03f,
--4.030155485e-03f, -4.034194910e-03f, -4.038227166e-03f, -4.042252244e-03f, -4.046270139e-03f, -4.050280844e-03f, -4.054284352e-03f, -4.058280657e-03f, -4.062269752e-03f, -4.066251631e-03f,
--4.070226287e-03f, -4.074193714e-03f, -4.078153905e-03f, -4.082106853e-03f, -4.086052553e-03f, -4.089990997e-03f, -4.093922180e-03f, -4.097846095e-03f, -4.101762735e-03f, -4.105672094e-03f,
--4.109574166e-03f, -4.113468944e-03f, -4.117356421e-03f, -4.121236593e-03f, -4.125109451e-03f, -4.128974991e-03f, -4.132833204e-03f, -4.136684086e-03f, -4.140527630e-03f, -4.144363830e-03f,
--4.148192679e-03f, -4.152014171e-03f, -4.155828300e-03f, -4.159635060e-03f, -4.163434444e-03f, -4.167226446e-03f, -4.171011060e-03f, -4.174788280e-03f, -4.178558100e-03f, -4.182320514e-03f,
--4.186075514e-03f, -4.189823096e-03f, -4.193563254e-03f, -4.197295980e-03f, -4.201021269e-03f, -4.204739116e-03f, -4.208449513e-03f, -4.212152455e-03f, -4.215847936e-03f, -4.219535949e-03f,
--4.223216489e-03f, -4.226889550e-03f, -4.230555126e-03f, -4.234213211e-03f, -4.237863799e-03f, -4.241506883e-03f, -4.245142459e-03f, -4.248770519e-03f, -4.252391059e-03f, -4.256004072e-03f,
--4.259609553e-03f, -4.263207495e-03f, -4.266797893e-03f, -4.270380741e-03f, -4.273956033e-03f, -4.277523763e-03f, -4.281083926e-03f, -4.284636515e-03f, -4.288181526e-03f, -4.291718951e-03f,
--4.295248786e-03f, -4.298771025e-03f, -4.302285662e-03f, -4.305792691e-03f, -4.309292107e-03f, -4.312783903e-03f, -4.316268075e-03f, -4.319744617e-03f, -4.323213522e-03f, -4.326674786e-03f,
--4.330128403e-03f, -4.333574367e-03f, -4.337012673e-03f, -4.340443315e-03f, -4.343866287e-03f, -4.347281584e-03f, -4.350689201e-03f, -4.354089132e-03f, -4.357481371e-03f, -4.360865913e-03f,
--4.364242753e-03f, -4.367611884e-03f, -4.370973302e-03f, -4.374327002e-03f, -4.377672977e-03f, -4.381011222e-03f, -4.384341733e-03f, -4.387664503e-03f, -4.390979527e-03f, -4.394286801e-03f,
--4.397586317e-03f, -4.400878072e-03f, -4.404162060e-03f, -4.407438276e-03f, -4.410706714e-03f, -4.413967369e-03f, -4.417220235e-03f, -4.420465309e-03f, -4.423702584e-03f, -4.426932055e-03f,
--4.430153717e-03f, -4.433367564e-03f, -4.436573593e-03f, -4.439771797e-03f, -4.442962171e-03f, -4.446144710e-03f, -4.449319410e-03f, -4.452486264e-03f, -4.455645268e-03f, -4.458796418e-03f,
--4.461939707e-03f, -4.465075130e-03f, -4.468202684e-03f, -4.471322362e-03f, -4.474434159e-03f, -4.477538072e-03f, -4.480634094e-03f, -4.483722221e-03f, -4.486802448e-03f, -4.489874769e-03f,
--4.492939181e-03f, -4.495995677e-03f, -4.499044254e-03f, -4.502084906e-03f, -4.505117628e-03f, -4.508142416e-03f, -4.511159265e-03f, -4.514168170e-03f, -4.517169125e-03f, -4.520162127e-03f,
--4.523147171e-03f, -4.526124251e-03f, -4.529093363e-03f, -4.532054503e-03f, -4.535007665e-03f, -4.537952845e-03f, -4.540890038e-03f, -4.543819239e-03f, -4.546740445e-03f, -4.549653649e-03f,
--4.552558848e-03f, -4.555456037e-03f, -4.558345211e-03f, -4.561226366e-03f, -4.564099496e-03f, -4.566964599e-03f, -4.569821668e-03f, -4.572670700e-03f, -4.575511689e-03f, -4.578344632e-03f,
--4.581169524e-03f, -4.583986360e-03f, -4.586795136e-03f, -4.589595847e-03f, -4.592388490e-03f, -4.595173059e-03f, -4.597949550e-03f, -4.600717959e-03f, -4.603478282e-03f, -4.606230513e-03f,
--4.608974649e-03f, -4.611710686e-03f, -4.614438618e-03f, -4.617158442e-03f, -4.619870154e-03f, -4.622573748e-03f, -4.625269222e-03f, -4.627956570e-03f, -4.630635788e-03f, -4.633306872e-03f,
--4.635969818e-03f, -4.638624622e-03f, -4.641271280e-03f, -4.643909786e-03f, -4.646540138e-03f, -4.649162331e-03f, -4.651776360e-03f, -4.654382223e-03f, -4.656979914e-03f, -4.659569430e-03f,
--4.662150766e-03f, -4.664723919e-03f, -4.667288884e-03f, -4.669845657e-03f, -4.672394235e-03f, -4.674934613e-03f, -4.677466787e-03f, -4.679990754e-03f, -4.682506510e-03f, -4.685014050e-03f,
--4.687513370e-03f, -4.690004467e-03f, -4.692487337e-03f, -4.694961976e-03f, -4.697428380e-03f, -4.699886545e-03f, -4.702336467e-03f, -4.704778143e-03f, -4.707211568e-03f, -4.709636739e-03f,
--4.712053652e-03f, -4.714462304e-03f, -4.716862690e-03f, -4.719254807e-03f, -4.721638652e-03f, -4.724014219e-03f, -4.726381506e-03f, -4.728740509e-03f, -4.731091225e-03f, -4.733433649e-03f,
--4.735767779e-03f, -4.738093609e-03f, -4.740411138e-03f, -4.742720360e-03f, -4.745021274e-03f, -4.747313874e-03f, -4.749598158e-03f, -4.751874122e-03f, -4.754141762e-03f, -4.756401076e-03f,
--4.758652058e-03f, -4.760894707e-03f, -4.763129018e-03f, -4.765354989e-03f, -4.767572615e-03f, -4.769781893e-03f, -4.771982820e-03f, -4.774175392e-03f, -4.776359606e-03f, -4.778535459e-03f,
--4.780702948e-03f, -4.782862068e-03f, -4.785012817e-03f, -4.787155191e-03f, -4.789289188e-03f, -4.791414803e-03f, -4.793532034e-03f, -4.795640877e-03f, -4.797741329e-03f, -4.799833387e-03f,
--4.801917047e-03f, -4.803992307e-03f, -4.806059163e-03f, -4.808117613e-03f, -4.810167652e-03f, -4.812209278e-03f, -4.814242488e-03f, -4.816267279e-03f, -4.818283647e-03f, -4.820291590e-03f,
--4.822291104e-03f, -4.824282187e-03f, -4.826264835e-03f, -4.828239045e-03f, -4.830204814e-03f, -4.832162140e-03f, -4.834111020e-03f, -4.836051450e-03f, -4.837983427e-03f, -4.839906949e-03f,
--4.841822013e-03f, -4.843728615e-03f, -4.845626754e-03f, -4.847516425e-03f, -4.849397627e-03f, -4.851270356e-03f, -4.853134610e-03f, -4.854990385e-03f, -4.856837680e-03f, -4.858676491e-03f,
--4.860506815e-03f, -4.862328649e-03f, -4.864141992e-03f, -4.865946840e-03f, -4.867743191e-03f, -4.869531041e-03f, -4.871310389e-03f, -4.873081231e-03f, -4.874843565e-03f, -4.876597388e-03f,
--4.878342698e-03f, -4.880079492e-03f, -4.881807768e-03f, -4.883527522e-03f, -4.885238753e-03f, -4.886941458e-03f, -4.888635634e-03f, -4.890321278e-03f, -4.891998389e-03f, -4.893666964e-03f,
--4.895327001e-03f, -4.896978496e-03f, -4.898621447e-03f, -4.900255853e-03f, -4.901881711e-03f, -4.903499017e-03f, -4.905107771e-03f, -4.906707969e-03f, -4.908299609e-03f, -4.909882689e-03f,
--4.911457207e-03f, -4.913023160e-03f, -4.914580546e-03f, -4.916129363e-03f, -4.917669608e-03f, -4.919201280e-03f, -4.920724375e-03f, -4.922238892e-03f, -4.923744829e-03f, -4.925242183e-03f,
--4.926730952e-03f, -4.928211135e-03f, -4.929682728e-03f, -4.931145731e-03f, -4.932600140e-03f, -4.934045953e-03f, -4.935483170e-03f, -4.936911786e-03f, -4.938331801e-03f, -4.939743213e-03f,
--4.941146019e-03f, -4.942540218e-03f, -4.943925807e-03f, -4.945302784e-03f, -4.946671148e-03f, -4.948030896e-03f, -4.949382028e-03f, -4.950724540e-03f, -4.952058430e-03f, -4.953383698e-03f,
--4.954700341e-03f, -4.956008357e-03f, -4.957307744e-03f, -4.958598501e-03f, -4.959880626e-03f, -4.961154117e-03f, -4.962418972e-03f, -4.963675189e-03f, -4.964922768e-03f, -4.966161705e-03f,
--4.967391999e-03f, -4.968613649e-03f, -4.969826653e-03f, -4.971031009e-03f, -4.972226716e-03f, -4.973413772e-03f, -4.974592175e-03f, -4.975761923e-03f, -4.976923016e-03f, -4.978075451e-03f,
--4.979219227e-03f, -4.980354343e-03f, -4.981480796e-03f, -4.982598586e-03f, -4.983707711e-03f, -4.984808169e-03f, -4.985899959e-03f, -4.986983079e-03f, -4.988057528e-03f, -4.989123305e-03f,
--4.990180408e-03f, -4.991228836e-03f, -4.992268587e-03f, -4.993299659e-03f, -4.994322053e-03f, -4.995335766e-03f, -4.996340797e-03f, -4.997337144e-03f, -4.998324807e-03f, -4.999303784e-03f,
--5.000274074e-03f, -5.001235675e-03f, -5.002188587e-03f, -5.003132808e-03f, -5.004068336e-03f, -5.004995172e-03f, -5.005913313e-03f, -5.006822758e-03f, -5.007723507e-03f, -5.008615557e-03f,
--5.009498909e-03f, -5.010373561e-03f, -5.011239511e-03f, -5.012096759e-03f, -5.012945304e-03f, -5.013785145e-03f, -5.014616280e-03f, -5.015438709e-03f, -5.016252431e-03f, -5.017057444e-03f,
--5.017853748e-03f, -5.018641342e-03f, -5.019420224e-03f, -5.020190395e-03f, -5.020951852e-03f, -5.021704596e-03f, -5.022448625e-03f, -5.023183938e-03f, -5.023910535e-03f, -5.024628415e-03f,
--5.025337576e-03f, -5.026038019e-03f, -5.026729742e-03f, -5.027412744e-03f, -5.028087026e-03f, -5.028752585e-03f, -5.029409422e-03f, -5.030057536e-03f, -5.030696925e-03f, -5.031327590e-03f,
--5.031949530e-03f, -5.032562743e-03f, -5.033167230e-03f, -5.033762990e-03f, -5.034350022e-03f, -5.034928325e-03f, -5.035497899e-03f, -5.036058744e-03f, -5.036610859e-03f, -5.037154243e-03f,
--5.037688896e-03f, -5.038214818e-03f, -5.038732007e-03f, -5.039240464e-03f, -5.039740188e-03f, -5.040231178e-03f, -5.040713435e-03f, -5.041186957e-03f, -5.041651745e-03f, -5.042107797e-03f,
--5.042555114e-03f, -5.042993696e-03f, -5.043423541e-03f, -5.043844651e-03f, -5.044257023e-03f, -5.044660659e-03f, -5.045055557e-03f, -5.045441718e-03f, -5.045819141e-03f, -5.046187826e-03f,
--5.046547774e-03f, -5.046898983e-03f, -5.047241453e-03f, -5.047575185e-03f, -5.047900178e-03f, -5.048216432e-03f, -5.048523947e-03f, -5.048822723e-03f, -5.049112760e-03f, -5.049394057e-03f,
--5.049666615e-03f, -5.049930434e-03f, -5.050185513e-03f, -5.050431853e-03f, -5.050669453e-03f, -5.050898314e-03f, -5.051118436e-03f, -5.051329818e-03f, -5.051532461e-03f, -5.051726365e-03f,
--5.051911530e-03f, -5.052087956e-03f, -5.052255643e-03f, -5.052414592e-03f, -5.052564802e-03f, -5.052706273e-03f, -5.052839006e-03f, -5.052963002e-03f, -5.053078259e-03f, -5.053184780e-03f,
--5.053282562e-03f, -5.053371608e-03f, -5.053451917e-03f, -5.053523490e-03f, -5.053586326e-03f, -5.053640427e-03f, -5.053685792e-03f, -5.053722422e-03f, -5.053750317e-03f, -5.053769478e-03f,
--5.053779905e-03f, -5.053781599e-03f, -5.053774559e-03f, -5.053758786e-03f, -5.053734282e-03f, -5.053701045e-03f, -5.053659077e-03f, -5.053608379e-03f, -5.053548950e-03f, -5.053480791e-03f,
--5.053403904e-03f, -5.053318287e-03f, -5.053223943e-03f, -5.053120871e-03f, -5.053009073e-03f, -5.052888548e-03f, -5.052759297e-03f, -5.052621322e-03f, -5.052474622e-03f, -5.052319199e-03f,
--5.052155053e-03f, -5.051982185e-03f, -5.051800595e-03f, -5.051610285e-03f, -5.051411255e-03f, -5.051203506e-03f, -5.050987038e-03f, -5.050761853e-03f, -5.050527951e-03f, -5.050285333e-03f,
--5.050034000e-03f, -5.049773953e-03f, -5.049505192e-03f, -5.049227719e-03f, -5.048941535e-03f, -5.048646640e-03f, -5.048343035e-03f, -5.048030722e-03f, -5.047709701e-03f, -5.047379973e-03f,
--5.047041540e-03f, -5.046694402e-03f, -5.046338560e-03f, -5.045974015e-03f, -5.045600769e-03f, -5.045218822e-03f, -5.044828176e-03f, -5.044428832e-03f, -5.044020790e-03f, -5.043604052e-03f,
--5.043178620e-03f, -5.042744493e-03f, -5.042301675e-03f, -5.041850164e-03f, -5.041389964e-03f, -5.040921074e-03f, -5.040443497e-03f, -5.039957233e-03f, -5.039462285e-03f, -5.038958652e-03f,
--5.038446337e-03f, -5.037925340e-03f, -5.037395663e-03f, -5.036857308e-03f, -5.036310276e-03f, -5.035754567e-03f, -5.035190184e-03f, -5.034617128e-03f, -5.034035401e-03f, -5.033445003e-03f,
--5.032845936e-03f, -5.032238202e-03f, -5.031621802e-03f, -5.030996738e-03f, -5.030363010e-03f, -5.029720622e-03f, -5.029069574e-03f, -5.028409867e-03f, -5.027741504e-03f, -5.027064485e-03f,
--5.026378813e-03f, -5.025684490e-03f, -5.024981516e-03f, -5.024269893e-03f, -5.023549623e-03f, -5.022820708e-03f, -5.022083150e-03f, -5.021336950e-03f, -5.020582109e-03f, -5.019818630e-03f,
--5.019046514e-03f, -5.018265763e-03f, -5.017476379e-03f, -5.016678364e-03f, -5.015871719e-03f, -5.015056446e-03f, -5.014232547e-03f, -5.013400025e-03f, -5.012558880e-03f, -5.011709114e-03f,
--5.010850730e-03f, -5.009983730e-03f, -5.009108115e-03f, -5.008223888e-03f, -5.007331049e-03f, -5.006429602e-03f, -5.005519548e-03f, -5.004600889e-03f, -5.003673628e-03f, -5.002737766e-03f,
--5.001793305e-03f, -5.000840247e-03f, -4.999878595e-03f, -4.998908351e-03f, -4.997929516e-03f, -4.996942092e-03f, -4.995946083e-03f, -4.994941489e-03f, -4.993928314e-03f, -4.992906559e-03f,
--4.991876227e-03f, -4.990837319e-03f, -4.989789838e-03f, -4.988733787e-03f, -4.987669166e-03f, -4.986595980e-03f, -4.985514229e-03f, -4.984423917e-03f, -4.983325045e-03f, -4.982217617e-03f,
--4.981101633e-03f, -4.979977097e-03f, -4.978844011e-03f, -4.977702377e-03f, -4.976552198e-03f, -4.975393476e-03f, -4.974226214e-03f, -4.973050413e-03f, -4.971866077e-03f, -4.970673208e-03f,
--4.969471808e-03f, -4.968261880e-03f, -4.967043427e-03f, -4.965816450e-03f, -4.964580953e-03f, -4.963336938e-03f, -4.962084407e-03f, -4.960823364e-03f, -4.959553810e-03f, -4.958275749e-03f,
--4.956989183e-03f, -4.955694114e-03f, -4.954390546e-03f, -4.953078481e-03f, -4.951757921e-03f, -4.950428870e-03f, -4.949091330e-03f, -4.947745303e-03f, -4.946390794e-03f, -4.945027803e-03f,
--4.943656335e-03f, -4.942276391e-03f, -4.940887975e-03f, -4.939491090e-03f, -4.938085738e-03f, -4.936671922e-03f, -4.935249645e-03f, -4.933818910e-03f, -4.932379720e-03f, -4.930932077e-03f,
--4.929475986e-03f, -4.928011447e-03f, -4.926538466e-03f, -4.925057043e-03f, -4.923567183e-03f, -4.922068889e-03f, -4.920562163e-03f, -4.919047008e-03f, -4.917523428e-03f, -4.915991426e-03f,
--4.914451004e-03f, -4.912902165e-03f, -4.911344914e-03f, -4.909779252e-03f, -4.908205184e-03f, -4.906622711e-03f, -4.905031838e-03f, -4.903432567e-03f, -4.901824902e-03f, -4.900208846e-03f,
--4.898584401e-03f, -4.896951572e-03f, -4.895310361e-03f, -4.893660772e-03f, -4.892002809e-03f, -4.890336473e-03f, -4.888661769e-03f, -4.886978699e-03f, -4.885287268e-03f, -4.883587479e-03f,
--4.881879334e-03f, -4.880162838e-03f, -4.878437993e-03f, -4.876704803e-03f, -4.874963272e-03f, -4.873213402e-03f, -4.871455198e-03f, -4.869688662e-03f, -4.867913799e-03f, -4.866130611e-03f,
--4.864339102e-03f, -4.862539276e-03f, -4.860731136e-03f, -4.858914686e-03f, -4.857089930e-03f, -4.855256870e-03f, -4.853415510e-03f, -4.851565854e-03f, -4.849707906e-03f, -4.847841669e-03f,
--4.845967147e-03f, -4.844084344e-03f, -4.842193263e-03f, -4.840293907e-03f, -4.838386281e-03f, -4.836470389e-03f, -4.834546233e-03f, -4.832613818e-03f, -4.830673147e-03f, -4.828724225e-03f,
--4.826767054e-03f, -4.824801639e-03f, -4.822827984e-03f, -4.820846092e-03f, -4.818855968e-03f, -4.816857614e-03f, -4.814851035e-03f, -4.812836235e-03f, -4.810813218e-03f, -4.808781988e-03f,
--4.806742547e-03f, -4.804694902e-03f, -4.802639054e-03f, -4.800575009e-03f, -4.798502770e-03f, -4.796422342e-03f, -4.794333727e-03f, -4.792236931e-03f, -4.790131958e-03f, -4.788018810e-03f,
--4.785897493e-03f, -4.783768011e-03f, -4.781630367e-03f, -4.779484566e-03f, -4.777330611e-03f, -4.775168508e-03f, -4.772998259e-03f, -4.770819870e-03f, -4.768633344e-03f, -4.766438685e-03f,
--4.764235898e-03f, -4.762024988e-03f, -4.759805957e-03f, -4.757578810e-03f, -4.755343553e-03f, -4.753100188e-03f, -4.750848720e-03f, -4.748589154e-03f, -4.746321493e-03f, -4.744045743e-03f,
--4.741761907e-03f, -4.739469990e-03f, -4.737169996e-03f, -4.734861929e-03f, -4.732545794e-03f, -4.730221596e-03f, -4.727889338e-03f, -4.725549026e-03f, -4.723200663e-03f, -4.720844253e-03f,
--4.718479803e-03f, -4.716107315e-03f, -4.713726795e-03f, -4.711338247e-03f, -4.708941675e-03f, -4.706537085e-03f, -4.704124480e-03f, -4.701703865e-03f, -4.699275244e-03f, -4.696838624e-03f,
--4.694394007e-03f, -4.691941398e-03f, -4.689480803e-03f, -4.687012226e-03f, -4.684535671e-03f, -4.682051143e-03f, -4.679558647e-03f, -4.677058188e-03f, -4.674549769e-03f, -4.672033397e-03f,
--4.669509076e-03f, -4.666976810e-03f, -4.664436604e-03f, -4.661888463e-03f, -4.659332393e-03f, -4.656768396e-03f, -4.654196480e-03f, -4.651616647e-03f, -4.649028904e-03f, -4.646433254e-03f,
--4.643829704e-03f, -4.641218257e-03f, -4.638598919e-03f, -4.635971694e-03f, -4.633336588e-03f, -4.630693606e-03f, -4.628042752e-03f, -4.625384031e-03f, -4.622717449e-03f, -4.620043010e-03f,
--4.617360719e-03f, -4.614670582e-03f, -4.611972603e-03f, -4.609266787e-03f, -4.606553140e-03f, -4.603831667e-03f, -4.601102372e-03f, -4.598365262e-03f, -4.595620340e-03f, -4.592867612e-03f,
--4.590107083e-03f, -4.587338759e-03f, -4.584562644e-03f, -4.581778744e-03f, -4.578987064e-03f, -4.576187609e-03f, -4.573380384e-03f, -4.570565395e-03f, -4.567742646e-03f, -4.564912144e-03f,
--4.562073893e-03f, -4.559227898e-03f, -4.556374166e-03f, -4.553512700e-03f, -4.550643508e-03f, -4.547766593e-03f, -4.544881961e-03f, -4.541989618e-03f, -4.539089569e-03f, -4.536181819e-03f,
--4.533266374e-03f, -4.530343240e-03f, -4.527412421e-03f, -4.524473923e-03f, -4.521527751e-03f, -4.518573912e-03f, -4.515612410e-03f, -4.512643251e-03f, -4.509666441e-03f, -4.506681984e-03f,
--4.503689887e-03f, -4.500690156e-03f, -4.497682795e-03f, -4.494667810e-03f, -4.491645207e-03f, -4.488614991e-03f, -4.485577168e-03f, -4.482531744e-03f, -4.479478725e-03f, -4.476418115e-03f,
--4.473349921e-03f, -4.470274148e-03f, -4.467190802e-03f, -4.464099889e-03f, -4.461001414e-03f, -4.457895383e-03f, -4.454781802e-03f, -4.451660677e-03f, -4.448532013e-03f, -4.445395816e-03f,
--4.442252093e-03f, -4.439100848e-03f, -4.435942087e-03f, -4.432775817e-03f, -4.429602043e-03f, -4.426420771e-03f, -4.423232007e-03f, -4.420035757e-03f, -4.416832027e-03f, -4.413620823e-03f,
--4.410402149e-03f, -4.407176014e-03f, -4.403942422e-03f, -4.400701379e-03f, -4.397452891e-03f, -4.394196965e-03f, -4.390933606e-03f, -4.387662821e-03f, -4.384384615e-03f, -4.381098994e-03f,
--4.377805965e-03f, -4.374505533e-03f, -4.371197705e-03f, -4.367882486e-03f, -4.364559883e-03f, -4.361229902e-03f, -4.357892549e-03f, -4.354547829e-03f, -4.351195751e-03f, -4.347836318e-03f,
--4.344469538e-03f, -4.341095417e-03f, -4.337713960e-03f, -4.334325175e-03f, -4.330929067e-03f, -4.327525643e-03f, -4.324114908e-03f, -4.320696870e-03f, -4.317271534e-03f, -4.313838906e-03f,
--4.310398994e-03f, -4.306951802e-03f, -4.303497338e-03f, -4.300035608e-03f, -4.296566619e-03f, -4.293090375e-03f, -4.289606885e-03f, -4.286116154e-03f, -4.282618188e-03f, -4.279112995e-03f,
--4.275600580e-03f, -4.272080950e-03f, -4.268554112e-03f, -4.265020071e-03f, -4.261478834e-03f, -4.257930409e-03f, -4.254374800e-03f, -4.250812015e-03f, -4.247242061e-03f, -4.243664943e-03f,
--4.240080668e-03f, -4.236489244e-03f, -4.232890675e-03f, -4.229284970e-03f, -4.225672134e-03f, -4.222052175e-03f, -4.218425098e-03f, -4.214790911e-03f, -4.211149619e-03f, -4.207501230e-03f,
--4.203845751e-03f, -4.200183187e-03f, -4.196513546e-03f, -4.192836835e-03f, -4.189153059e-03f, -4.185462227e-03f, -4.181764343e-03f, -4.178059416e-03f, -4.174347452e-03f, -4.170628458e-03f,
--4.166902440e-03f, -4.163169406e-03f, -4.159429361e-03f, -4.155682314e-03f, -4.151928270e-03f, -4.148167237e-03f, -4.144399221e-03f, -4.140624229e-03f, -4.136842269e-03f, -4.133053346e-03f,
--4.129257469e-03f, -4.125454643e-03f, -4.121644876e-03f, -4.117828174e-03f, -4.114004545e-03f, -4.110173996e-03f, -4.106336533e-03f, -4.102492164e-03f, -4.098640895e-03f, -4.094782733e-03f,
--4.090917686e-03f, -4.087045760e-03f, -4.083166963e-03f, -4.079281301e-03f, -4.075388782e-03f, -4.071489413e-03f, -4.067583200e-03f, -4.063670151e-03f, -4.059750273e-03f, -4.055823573e-03f,
--4.051890058e-03f, -4.047949736e-03f, -4.044002613e-03f, -4.040048696e-03f, -4.036087993e-03f, -4.032120511e-03f, -4.028146258e-03f, -4.024165239e-03f, -4.020177463e-03f, -4.016182937e-03f,
--4.012181668e-03f, -4.008173663e-03f, -4.004158930e-03f, -4.000137475e-03f, -3.996109307e-03f, -3.992074431e-03f, -3.988032857e-03f, -3.983984590e-03f, -3.979929639e-03f, -3.975868010e-03f,
--3.971799711e-03f, -3.967724750e-03f, -3.963643133e-03f, -3.959554868e-03f, -3.955459963e-03f, -3.951358425e-03f, -3.947250261e-03f, -3.943135479e-03f, -3.939014085e-03f, -3.934886089e-03f,
--3.930751496e-03f, -3.926610315e-03f, -3.922462554e-03f, -3.918308218e-03f, -3.914147317e-03f, -3.909979857e-03f, -3.905805846e-03f, -3.901625292e-03f, -3.897438202e-03f, -3.893244583e-03f,
--3.889044444e-03f, -3.884837792e-03f, -3.880624634e-03f, -3.876404978e-03f, -3.872178832e-03f, -3.867946203e-03f, -3.863707099e-03f, -3.859461528e-03f, -3.855209496e-03f, -3.850951013e-03f,
--3.846686085e-03f, -3.842414720e-03f, -3.838136927e-03f, -3.833852712e-03f, -3.829562083e-03f, -3.825265048e-03f, -3.820961616e-03f, -3.816651793e-03f, -3.812335587e-03f, -3.808013006e-03f,
--3.803684058e-03f, -3.799348751e-03f, -3.795007093e-03f, -3.790659090e-03f, -3.786304752e-03f, -3.781944086e-03f, -3.777577100e-03f, -3.773203802e-03f, -3.768824199e-03f, -3.764438299e-03f,
--3.760046111e-03f, -3.755647642e-03f, -3.751242900e-03f, -3.746831893e-03f, -3.742414629e-03f, -3.737991117e-03f, -3.733561363e-03f, -3.729125376e-03f, -3.724683163e-03f, -3.720234734e-03f,
--3.715780095e-03f, -3.711319256e-03f, -3.706852223e-03f, -3.702379004e-03f, -3.697899609e-03f, -3.693414045e-03f, -3.688922320e-03f, -3.684424441e-03f, -3.679920418e-03f, -3.675410258e-03f,
--3.670893970e-03f, -3.666371560e-03f, -3.661843039e-03f, -3.657308413e-03f, -3.652767691e-03f, -3.648220880e-03f, -3.643667990e-03f, -3.639109028e-03f, -3.634544003e-03f, -3.629972922e-03f,
--3.625395794e-03f, -3.620812627e-03f, -3.616223430e-03f, -3.611628209e-03f, -3.607026975e-03f, -3.602419735e-03f, -3.597806496e-03f, -3.593187269e-03f, -3.588562060e-03f, -3.583930878e-03f,
--3.579293731e-03f, -3.574650628e-03f, -3.570001578e-03f, -3.565346587e-03f, -3.560685665e-03f, -3.556018820e-03f, -3.551346061e-03f, -3.546667395e-03f, -3.541982832e-03f, -3.537292378e-03f,
--3.532596044e-03f, -3.527893837e-03f, -3.523185766e-03f, -3.518471839e-03f, -3.513752064e-03f, -3.509026450e-03f, -3.504295006e-03f, -3.499557740e-03f, -3.494814660e-03f, -3.490065775e-03f,
--3.485311094e-03f, -3.480550624e-03f, -3.475784375e-03f, -3.471012355e-03f, -3.466234572e-03f, -3.461451035e-03f, -3.456661753e-03f, -3.451866733e-03f, -3.447065986e-03f, -3.442259518e-03f,
--3.437447340e-03f, -3.432629459e-03f, -3.427805884e-03f, -3.422976623e-03f, -3.418141686e-03f, -3.413301081e-03f, -3.408454817e-03f, -3.403602901e-03f, -3.398745344e-03f, -3.393882153e-03f,
--3.389013337e-03f, -3.384138905e-03f, -3.379258866e-03f, -3.374373228e-03f, -3.369482000e-03f, -3.364585191e-03f, -3.359682810e-03f, -3.354774864e-03f, -3.349861364e-03f, -3.344942318e-03f,
--3.340017734e-03f, -3.335087621e-03f, -3.330151989e-03f, -3.325210845e-03f, -3.320264199e-03f, -3.315312060e-03f, -3.310354437e-03f, -3.305391337e-03f, -3.300422771e-03f, -3.295448746e-03f,
--3.290469272e-03f, -3.285484358e-03f, -3.280494013e-03f, -3.275498245e-03f, -3.270497063e-03f, -3.265490477e-03f, -3.260478494e-03f, -3.255461125e-03f, -3.250438378e-03f, -3.245410262e-03f,
--3.240376786e-03f, -3.235337959e-03f, -3.230293789e-03f, -3.225244287e-03f, -3.220189460e-03f, -3.215129318e-03f, -3.210063870e-03f, -3.204993125e-03f, -3.199917092e-03f, -3.194835779e-03f,
--3.189749197e-03f, -3.184657354e-03f, -3.179560258e-03f, -3.174457920e-03f, -3.169350348e-03f, -3.164237551e-03f, -3.159119539e-03f, -3.153996320e-03f, -3.148867904e-03f, -3.143734300e-03f,
--3.138595516e-03f, -3.133451563e-03f, -3.128302448e-03f, -3.123148182e-03f, -3.117988773e-03f, -3.112824231e-03f, -3.107654565e-03f, -3.102479783e-03f, -3.097299896e-03f, -3.092114912e-03f,
--3.086924841e-03f, -3.081729692e-03f, -3.076529473e-03f, -3.071324195e-03f, -3.066113867e-03f, -3.060898497e-03f, -3.055678095e-03f, -3.050452670e-03f, -3.045222233e-03f, -3.039986790e-03f,
--3.034746354e-03f, -3.029500931e-03f, -3.024250532e-03f, -3.018995167e-03f, -3.013734844e-03f, -3.008469572e-03f, -3.003199362e-03f, -2.997924222e-03f, -2.992644162e-03f, -2.987359191e-03f,
--2.982069319e-03f, -2.976774554e-03f, -2.971474907e-03f, -2.966170387e-03f, -2.960861002e-03f, -2.955546764e-03f, -2.950227680e-03f, -2.944903761e-03f, -2.939575015e-03f, -2.934241453e-03f,
--2.928903083e-03f, -2.923559916e-03f, -2.918211960e-03f, -2.912859226e-03f, -2.907501722e-03f, -2.902139458e-03f, -2.896772444e-03f, -2.891400689e-03f, -2.886024203e-03f, -2.880642995e-03f,
--2.875257074e-03f, -2.869866451e-03f, -2.864471135e-03f, -2.859071135e-03f, -2.853666461e-03f, -2.848257122e-03f, -2.842843128e-03f, -2.837424489e-03f, -2.832001215e-03f, -2.826573314e-03f,
--2.821140796e-03f, -2.815703672e-03f, -2.810261951e-03f, -2.804815641e-03f, -2.799364754e-03f, -2.793909298e-03f, -2.788449284e-03f, -2.782984720e-03f, -2.777515617e-03f, -2.772041984e-03f,
--2.766563831e-03f, -2.761081168e-03f, -2.755594004e-03f, -2.750102350e-03f, -2.744606213e-03f, -2.739105606e-03f, -2.733600536e-03f, -2.728091015e-03f, -2.722577051e-03f, -2.717058655e-03f,
--2.711535835e-03f, -2.706008603e-03f, -2.700476967e-03f, -2.694940938e-03f, -2.689400525e-03f, -2.683855738e-03f, -2.678306587e-03f, -2.672753082e-03f, -2.667195232e-03f, -2.661633048e-03f,
--2.656066538e-03f, -2.650495713e-03f, -2.644920584e-03f, -2.639341158e-03f, -2.633757448e-03f, -2.628169461e-03f, -2.622577209e-03f, -2.616980701e-03f, -2.611379947e-03f, -2.605774957e-03f,
--2.600165740e-03f, -2.594552307e-03f, -2.588934668e-03f, -2.583312832e-03f, -2.577686810e-03f, -2.572056611e-03f, -2.566422245e-03f, -2.560783722e-03f, -2.555141053e-03f, -2.549494246e-03f,
--2.543843313e-03f, -2.538188263e-03f, -2.532529105e-03f, -2.526865851e-03f, -2.521198510e-03f, -2.515527091e-03f, -2.509851606e-03f, -2.504172063e-03f, -2.498488474e-03f, -2.492800848e-03f,
--2.487109194e-03f, -2.481413524e-03f, -2.475713847e-03f, -2.470010173e-03f, -2.464302513e-03f, -2.458590875e-03f, -2.452875271e-03f, -2.447155710e-03f, -2.441432203e-03f, -2.435704760e-03f,
--2.429973390e-03f, -2.424238104e-03f, -2.418498912e-03f, -2.412755824e-03f, -2.407008850e-03f, -2.401258000e-03f, -2.395503284e-03f, -2.389744713e-03f, -2.383982297e-03f, -2.378216045e-03f,
--2.372445969e-03f, -2.366672077e-03f, -2.360894381e-03f, -2.355112890e-03f, -2.349327615e-03f, -2.343538566e-03f, -2.337745753e-03f, -2.331949185e-03f, -2.326148875e-03f, -2.320344830e-03f,
--2.314537063e-03f, -2.308725583e-03f, -2.302910400e-03f, -2.297091524e-03f, -2.291268966e-03f, -2.285442736e-03f, -2.279612845e-03f, -2.273779302e-03f, -2.267942117e-03f, -2.262101302e-03f,
--2.256256866e-03f, -2.250408819e-03f, -2.244557172e-03f, -2.238701936e-03f, -2.232843119e-03f, -2.226980734e-03f, -2.221114790e-03f, -2.215245297e-03f, -2.209372265e-03f, -2.203495706e-03f,
--2.197615629e-03f, -2.191732044e-03f, -2.185844963e-03f, -2.179954395e-03f, -2.174060350e-03f, -2.168162840e-03f, -2.162261874e-03f, -2.156357463e-03f, -2.150449617e-03f, -2.144538346e-03f,
--2.138623661e-03f, -2.132705573e-03f, -2.126784092e-03f, -2.120859227e-03f, -2.114930990e-03f, -2.108999391e-03f, -2.103064440e-03f, -2.097126148e-03f, -2.091184525e-03f, -2.085239582e-03f,
--2.079291329e-03f, -2.073339776e-03f, -2.067384935e-03f, -2.061426814e-03f, -2.055465426e-03f, -2.049500780e-03f, -2.043532886e-03f, -2.037561756e-03f, -2.031587400e-03f, -2.025609828e-03f,
--2.019629050e-03f, -2.013645078e-03f, -2.007657921e-03f, -2.001667591e-03f, -1.995674097e-03f, -1.989677451e-03f, -1.983677662e-03f, -1.977674742e-03f, -1.971668700e-03f, -1.965659548e-03f,
--1.959647295e-03f, -1.953631953e-03f, -1.947613532e-03f, -1.941592042e-03f, -1.935567495e-03f, -1.929539900e-03f, -1.923509268e-03f, -1.917475610e-03f, -1.911438936e-03f, -1.905399258e-03f,
--1.899356585e-03f, -1.893310927e-03f, -1.887262297e-03f, -1.881210704e-03f, -1.875156159e-03f, -1.869098672e-03f, -1.863038254e-03f, -1.856974916e-03f, -1.850908669e-03f, -1.844839522e-03f,
--1.838767487e-03f, -1.832692574e-03f, -1.826614794e-03f, -1.820534158e-03f, -1.814450676e-03f, -1.808364359e-03f, -1.802275217e-03f, -1.796183261e-03f, -1.790088502e-03f, -1.783990951e-03f,
--1.777890618e-03f, -1.771787513e-03f, -1.765681649e-03f, -1.759573034e-03f, -1.753461680e-03f, -1.747347598e-03f, -1.741230798e-03f, -1.735111291e-03f, -1.728989088e-03f, -1.722864200e-03f,
--1.716736636e-03f, -1.710606409e-03f, -1.704473527e-03f, -1.698338004e-03f, -1.692199848e-03f, -1.686059071e-03f, -1.679915684e-03f, -1.673769697e-03f, -1.667621121e-03f, -1.661469966e-03f,
--1.655316244e-03f, -1.649159966e-03f, -1.643001142e-03f, -1.636839782e-03f, -1.630675898e-03f, -1.624509500e-03f, -1.618340600e-03f, -1.612169207e-03f, -1.605995334e-03f, -1.599818989e-03f,
--1.593640185e-03f, -1.587458933e-03f, -1.581275242e-03f, -1.575089124e-03f, -1.568900589e-03f, -1.562709649e-03f, -1.556516313e-03f, -1.550320594e-03f, -1.544122502e-03f, -1.537922047e-03f,
--1.531719241e-03f, -1.525514094e-03f, -1.519306617e-03f, -1.513096822e-03f, -1.506884718e-03f, -1.500670316e-03f, -1.494453628e-03f, -1.488234665e-03f, -1.482013437e-03f, -1.475789955e-03f,
--1.469564230e-03f, -1.463336273e-03f, -1.457106094e-03f, -1.450873705e-03f, -1.444639117e-03f, -1.438402340e-03f, -1.432163385e-03f, -1.425922263e-03f, -1.419678986e-03f, -1.413433563e-03f,
--1.407186006e-03f, -1.400936326e-03f, -1.394684533e-03f, -1.388430639e-03f, -1.382174654e-03f, -1.375916590e-03f, -1.369656457e-03f, -1.363394266e-03f, -1.357130028e-03f, -1.350863755e-03f,
--1.344595456e-03f, -1.338325143e-03f, -1.332052827e-03f, -1.325778519e-03f, -1.319502230e-03f, -1.313223970e-03f, -1.306943751e-03f, -1.300661583e-03f, -1.294377478e-03f, -1.288091446e-03f,
--1.281803499e-03f, -1.275513647e-03f, -1.269221902e-03f, -1.262928273e-03f, -1.256632773e-03f, -1.250335413e-03f, -1.244036202e-03f, -1.237735153e-03f, -1.231432276e-03f, -1.225127582e-03f,
--1.218821082e-03f, -1.212512788e-03f, -1.206202709e-03f, -1.199890858e-03f, -1.193577244e-03f, -1.187261880e-03f, -1.180944776e-03f, -1.174625943e-03f, -1.168305392e-03f, -1.161983135e-03f,
--1.155659181e-03f, -1.149333543e-03f, -1.143006230e-03f, -1.136677255e-03f, -1.130346628e-03f, -1.124014361e-03f, -1.117680463e-03f, -1.111344947e-03f, -1.105007823e-03f, -1.098669103e-03f,
--1.092328797e-03f, -1.085986916e-03f, -1.079643471e-03f, -1.073298475e-03f, -1.066951936e-03f, -1.060603867e-03f, -1.054254279e-03f, -1.047903183e-03f, -1.041550589e-03f, -1.035196509e-03f,
--1.028840953e-03f, -1.022483934e-03f, -1.016125461e-03f, -1.009765547e-03f, -1.003404201e-03f, -9.970414357e-04f, -9.906772615e-04f, -9.843116894e-04f, -9.779447307e-04f, -9.715763964e-04f,
--9.652066975e-04f, -9.588356451e-04f, -9.524632503e-04f, -9.460895242e-04f, -9.397144779e-04f, -9.333381224e-04f, -9.269604688e-04f, -9.205815282e-04f, -9.142013117e-04f, -9.078198304e-04f,
--9.014370954e-04f, -8.950531177e-04f, -8.886679085e-04f, -8.822814789e-04f, -8.758938399e-04f, -8.695050026e-04f, -8.631149782e-04f, -8.567237777e-04f, -8.503314123e-04f, -8.439378931e-04f,
--8.375432311e-04f, -8.311474375e-04f, -8.247505233e-04f, -8.183524998e-04f, -8.119533779e-04f, -8.055531688e-04f, -7.991518837e-04f, -7.927495336e-04f, -7.863461297e-04f, -7.799416830e-04f,
--7.735362047e-04f, -7.671297060e-04f, -7.607221978e-04f, -7.543136914e-04f, -7.479041979e-04f, -7.414937285e-04f, -7.350822941e-04f, -7.286699060e-04f, -7.222565752e-04f, -7.158423130e-04f,
--7.094271305e-04f, -7.030110387e-04f, -6.965940488e-04f, -6.901761720e-04f, -6.837574193e-04f, -6.773378019e-04f, -6.709173310e-04f, -6.644960177e-04f, -6.580738731e-04f, -6.516509084e-04f,
--6.452271347e-04f, -6.388025631e-04f, -6.323772048e-04f, -6.259510709e-04f, -6.195241726e-04f, -6.130965210e-04f, -6.066681273e-04f, -6.002390025e-04f, -5.938091579e-04f, -5.873786047e-04f,
--5.809473538e-04f, -5.745154166e-04f, -5.680828041e-04f, -5.616495275e-04f, -5.552155979e-04f, -5.487810265e-04f, -5.423458245e-04f, -5.359100030e-04f, -5.294735731e-04f, -5.230365460e-04f,
--5.165989328e-04f, -5.101607448e-04f, -5.037219930e-04f, -4.972826887e-04f, -4.908428429e-04f, -4.844024668e-04f, -4.779615716e-04f, -4.715201685e-04f, -4.650782686e-04f, -4.586358830e-04f,
--4.521930229e-04f, -4.457496994e-04f, -4.393059238e-04f, -4.328617072e-04f, -4.264170607e-04f, -4.199719955e-04f, -4.135265228e-04f, -4.070806537e-04f, -4.006343993e-04f, -3.941877709e-04f,
--3.877407796e-04f, -3.812934365e-04f, -3.748457528e-04f, -3.683977397e-04f, -3.619494083e-04f, -3.555007698e-04f, -3.490518353e-04f, -3.426026160e-04f, -3.361531231e-04f, -3.297033677e-04f,
--3.232533610e-04f, -3.168031142e-04f, -3.103526383e-04f, -3.039019446e-04f, -2.974510441e-04f, -2.909999482e-04f, -2.845486679e-04f, -2.780972143e-04f, -2.716455987e-04f, -2.651938322e-04f,
--2.587419260e-04f, -2.522898912e-04f, -2.458377389e-04f, -2.393854804e-04f, -2.329331267e-04f, -2.264806891e-04f, -2.200281786e-04f, -2.135756065e-04f, -2.071229839e-04f, -2.006703220e-04f,
--1.942176318e-04f, -1.877649246e-04f, -1.813122115e-04f, -1.748595037e-04f, -1.684068122e-04f, -1.619541484e-04f, -1.555015232e-04f, -1.490489479e-04f, -1.425964335e-04f, -1.361439914e-04f,
--1.296916325e-04f, -1.232393681e-04f, -1.167872092e-04f, -1.103351671e-04f, -1.038832529e-04f, -9.743147771e-05f, -9.097985267e-05f, -8.452838893e-05f, -7.807709764e-05f, -7.162598993e-05f,
--6.517507695e-05f, -5.872436983e-05f, -5.227387970e-05f, -4.582361772e-05f, -3.937359500e-05f, -3.292382269e-05f, -2.647431192e-05f, -2.002507382e-05f, -1.357611952e-05f, -7.127460151e-06f,
--6.791068466e-07f, 5.768929267e-06f, 1.221663706e-05f, 1.866400542e-05f, 2.511102320e-05f, 3.155767929e-05f, 3.800396257e-05f, 4.444986192e-05f, 5.089536620e-05f, 5.734046432e-05f,
-6.378514514e-05f, 7.022939755e-05f, 7.667321043e-05f, 8.311657268e-05f, 8.955947318e-05f, 9.600190082e-05f, 1.024438445e-04f, 1.088852931e-04f, 1.153262355e-04f, 1.217666606e-04f,
-1.282065573e-04f, 1.346459145e-04f, 1.410847211e-04f, 1.475229661e-04f, 1.539606382e-04f, 1.603977264e-04f, 1.668342197e-04f, 1.732701068e-04f, 1.797053768e-04f, 1.861400185e-04f,
-1.925740209e-04f, 1.990073728e-04f, 2.054400632e-04f, 2.118720810e-04f, 2.183034151e-04f, 2.247340544e-04f, 2.311639879e-04f, 2.375932045e-04f, 2.440216930e-04f, 2.504494425e-04f,
-2.568764419e-04f, 2.633026800e-04f, 2.697281458e-04f, 2.761528283e-04f, 2.825767164e-04f, 2.889997990e-04f, 2.954220651e-04f, 3.018435036e-04f, 3.082641034e-04f, 3.146838536e-04f,
-3.211027430e-04f, 3.275207605e-04f, 3.339378953e-04f, 3.403541361e-04f, 3.467694720e-04f, 3.531838919e-04f, 3.595973848e-04f, 3.660099397e-04f, 3.724215454e-04f, 3.788321911e-04f,
-3.852418655e-04f, 3.916505578e-04f, 3.980582569e-04f, 4.044649517e-04f, 4.108706313e-04f, 4.172752846e-04f, 4.236789006e-04f, 4.300814683e-04f, 4.364829766e-04f, 4.428834147e-04f,
-4.492827714e-04f, 4.556810358e-04f, 4.620781968e-04f, 4.684742434e-04f, 4.748691648e-04f, 4.812629497e-04f, 4.876555874e-04f, 4.940470667e-04f, 5.004373767e-04f, 5.068265064e-04f,
-5.132144449e-04f, 5.196011810e-04f, 5.259867040e-04f, 5.323710027e-04f, 5.387540662e-04f, 5.451358836e-04f, 5.515164439e-04f, 5.578957361e-04f, 5.642737492e-04f, 5.706504723e-04f,
-5.770258945e-04f, 5.834000048e-04f, 5.897727922e-04f, 5.961442457e-04f, 6.025143546e-04f, 6.088831077e-04f, 6.152504942e-04f, 6.216165031e-04f, 6.279811235e-04f, 6.343443445e-04f,
-6.407061551e-04f, 6.470665444e-04f, 6.534255016e-04f, 6.597830156e-04f, 6.661390755e-04f, 6.724936705e-04f, 6.788467897e-04f, 6.851984220e-04f, 6.915485567e-04f, 6.978971829e-04f,
-7.042442895e-04f, 7.105898658e-04f, 7.169339009e-04f, 7.232763838e-04f, 7.296173037e-04f, 7.359566497e-04f, 7.422944109e-04f, 7.486305765e-04f, 7.549651355e-04f, 7.612980772e-04f,
-7.676293906e-04f, 7.739590649e-04f, 7.802870892e-04f, 7.866134526e-04f, 7.929381445e-04f, 7.992611537e-04f, 8.055824696e-04f, 8.119020814e-04f, 8.182199780e-04f, 8.245361488e-04f,
-8.308505829e-04f, 8.371632694e-04f, 8.434741976e-04f, 8.497833566e-04f, 8.560907356e-04f, 8.623963239e-04f, 8.687001105e-04f, 8.750020847e-04f, 8.813022356e-04f, 8.876005526e-04f,
-8.938970248e-04f, 9.001916413e-04f, 9.064843915e-04f, 9.127752645e-04f, 9.190642496e-04f, 9.253513360e-04f, 9.316365128e-04f, 9.379197694e-04f, 9.442010950e-04f, 9.504804788e-04f,
-9.567579101e-04f, 9.630333781e-04f, 9.693068721e-04f, 9.755783812e-04f, 9.818478949e-04f, 9.881154023e-04f, 9.943808928e-04f, 1.000644355e-03f, 1.006905780e-03f, 1.013165155e-03f,
-1.019422470e-03f, 1.025677715e-03f, 1.031930878e-03f, 1.038181950e-03f, 1.044430918e-03f, 1.050677774e-03f, 1.056922505e-03f, 1.063165101e-03f, 1.069405552e-03f, 1.075643847e-03f,
-1.081879975e-03f, 1.088113926e-03f, 1.094345689e-03f, 1.100575252e-03f, 1.106802607e-03f, 1.113027741e-03f, 1.119250644e-03f, 1.125471306e-03f, 1.131689716e-03f, 1.137905863e-03f,
-1.144119737e-03f, 1.150331328e-03f, 1.156540623e-03f, 1.162747613e-03f, 1.168952288e-03f, 1.175154636e-03f, 1.181354648e-03f, 1.187552311e-03f, 1.193747617e-03f, 1.199940553e-03f,
-1.206131111e-03f, 1.212319278e-03f, 1.218505045e-03f, 1.224688401e-03f, 1.230869335e-03f, 1.237047837e-03f, 1.243223896e-03f, 1.249397502e-03f, 1.255568644e-03f, 1.261737312e-03f,
-1.267903494e-03f, 1.274067181e-03f, 1.280228363e-03f, 1.286387027e-03f, 1.292543165e-03f, 1.298696765e-03f, 1.304847817e-03f, 1.310996310e-03f, 1.317142235e-03f, 1.323285579e-03f,
-1.329426334e-03f, 1.335564488e-03f, 1.341700031e-03f, 1.347832953e-03f, 1.353963243e-03f, 1.360090890e-03f, 1.366215884e-03f, 1.372338215e-03f, 1.378457873e-03f, 1.384574846e-03f,
-1.390689124e-03f, 1.396800697e-03f, 1.402909555e-03f, 1.409015687e-03f, 1.415119082e-03f, 1.421219731e-03f, 1.427317622e-03f, 1.433412746e-03f, 1.439505092e-03f, 1.445594649e-03f,
-1.451681408e-03f, 1.457765358e-03f, 1.463846488e-03f, 1.469924788e-03f, 1.476000248e-03f, 1.482072857e-03f, 1.488142605e-03f, 1.494209483e-03f, 1.500273478e-03f, 1.506334581e-03f,
-1.512392782e-03f, 1.518448071e-03f, 1.524500436e-03f, 1.530549869e-03f, 1.536596357e-03f, 1.542639892e-03f, 1.548680462e-03f, 1.554718058e-03f, 1.560752670e-03f, 1.566784286e-03f,
-1.572812897e-03f, 1.578838492e-03f, 1.584861062e-03f, 1.590880595e-03f, 1.596897082e-03f, 1.602910512e-03f, 1.608920876e-03f, 1.614928162e-03f, 1.620932361e-03f, 1.626933463e-03f,
-1.632931456e-03f, 1.638926332e-03f, 1.644918080e-03f, 1.650906689e-03f, 1.656892150e-03f, 1.662874452e-03f, 1.668853584e-03f, 1.674829538e-03f, 1.680802303e-03f, 1.686771868e-03f,
-1.692738223e-03f, 1.698701359e-03f, 1.704661265e-03f, 1.710617931e-03f, 1.716571346e-03f, 1.722521501e-03f, 1.728468386e-03f, 1.734411991e-03f, 1.740352304e-03f, 1.746289317e-03f,
-1.752223019e-03f, 1.758153400e-03f, 1.764080450e-03f, 1.770004159e-03f, 1.775924517e-03f, 1.781841513e-03f, 1.787755139e-03f, 1.793665382e-03f, 1.799572235e-03f, 1.805475686e-03f,
-1.811375725e-03f, 1.817272343e-03f, 1.823165530e-03f, 1.829055275e-03f, 1.834941568e-03f, 1.840824400e-03f, 1.846703760e-03f, 1.852579639e-03f, 1.858452026e-03f, 1.864320912e-03f,
-1.870186286e-03f, 1.876048139e-03f, 1.881906461e-03f, 1.887761241e-03f, 1.893612470e-03f, 1.899460138e-03f, 1.905304234e-03f, 1.911144750e-03f, 1.916981674e-03f, 1.922814998e-03f,
-1.928644711e-03f, 1.934470803e-03f, 1.940293265e-03f, 1.946112086e-03f, 1.951927257e-03f, 1.957738767e-03f, 1.963546608e-03f, 1.969350768e-03f, 1.975151239e-03f, 1.980948011e-03f,
-1.986741073e-03f, 1.992530415e-03f, 1.998316029e-03f, 2.004097903e-03f, 2.009876029e-03f, 2.015650396e-03f, 2.021420995e-03f, 2.027187816e-03f, 2.032950850e-03f, 2.038710085e-03f,
-2.044465513e-03f, 2.050217124e-03f, 2.055964908e-03f, 2.061708855e-03f, 2.067448956e-03f, 2.073185201e-03f, 2.078917580e-03f, 2.084646083e-03f, 2.090370702e-03f, 2.096091425e-03f,
-2.101808243e-03f, 2.107521147e-03f, 2.113230127e-03f, 2.118935174e-03f, 2.124636277e-03f, 2.130333427e-03f, 2.136026614e-03f, 2.141715829e-03f, 2.147401063e-03f, 2.153082304e-03f,
-2.158759544e-03f, 2.164432774e-03f, 2.170101983e-03f, 2.175767162e-03f, 2.181428302e-03f, 2.187085392e-03f, 2.192738423e-03f, 2.198387387e-03f, 2.204032272e-03f, 2.209673070e-03f,
-2.215309771e-03f, 2.220942365e-03f, 2.226570843e-03f, 2.232195196e-03f, 2.237815413e-03f, 2.243431486e-03f, 2.249043405e-03f, 2.254651160e-03f, 2.260254743e-03f, 2.265854142e-03f,
-2.271449350e-03f, 2.277040356e-03f, 2.282627151e-03f, 2.288209726e-03f, 2.293788070e-03f, 2.299362176e-03f, 2.304932033e-03f, 2.310497632e-03f, 2.316058963e-03f, 2.321616017e-03f,
-2.327168785e-03f, 2.332717258e-03f, 2.338261425e-03f, 2.343801278e-03f, 2.349336807e-03f, 2.354868003e-03f, 2.360394856e-03f, 2.365917358e-03f, 2.371435499e-03f, 2.376949269e-03f,
-2.382458659e-03f, 2.387963660e-03f, 2.393464263e-03f, 2.398960458e-03f, 2.404452236e-03f, 2.409939587e-03f, 2.415422504e-03f, 2.420900975e-03f, 2.426374993e-03f, 2.431844547e-03f,
-2.437309629e-03f, 2.442770229e-03f, 2.448226339e-03f, 2.453677948e-03f, 2.459125048e-03f, 2.464567629e-03f, 2.470005683e-03f, 2.475439200e-03f, 2.480868170e-03f, 2.486292586e-03f,
-2.491712437e-03f, 2.497127715e-03f, 2.502538410e-03f, 2.507944514e-03f, 2.513346016e-03f, 2.518742909e-03f, 2.524135183e-03f, 2.529522828e-03f, 2.534905836e-03f, 2.540284198e-03f,
-2.545657905e-03f, 2.551026947e-03f, 2.556391316e-03f, 2.561751002e-03f, 2.567105997e-03f, 2.572456291e-03f, 2.577801876e-03f, 2.583142742e-03f, 2.588478880e-03f, 2.593810282e-03f,
-2.599136938e-03f, 2.604458840e-03f, 2.609775979e-03f, 2.615088344e-03f, 2.620395929e-03f, 2.625698723e-03f, 2.630996718e-03f, 2.636289905e-03f, 2.641578275e-03f, 2.646861819e-03f,
-2.652140528e-03f, 2.657414393e-03f, 2.662683406e-03f, 2.667947557e-03f, 2.673206838e-03f, 2.678461240e-03f, 2.683710753e-03f, 2.688955370e-03f, 2.694195081e-03f, 2.699429878e-03f,
-2.704659752e-03f, 2.709884693e-03f, 2.715104693e-03f, 2.720319744e-03f, 2.725529836e-03f, 2.730734962e-03f, 2.735935111e-03f, 2.741130276e-03f, 2.746320447e-03f, 2.751505616e-03f,
-2.756685774e-03f, 2.761860913e-03f, 2.767031024e-03f, 2.772196097e-03f, 2.777356125e-03f, 2.782511099e-03f, 2.787661010e-03f, 2.792805850e-03f, 2.797945609e-03f, 2.803080279e-03f,
-2.808209852e-03f, 2.813334319e-03f, 2.818453671e-03f, 2.823567899e-03f, 2.828676996e-03f, 2.833780953e-03f, 2.838879760e-03f, 2.843973410e-03f, 2.849061894e-03f, 2.854145204e-03f,
-2.859223330e-03f, 2.864296264e-03f, 2.869363998e-03f, 2.874426524e-03f, 2.879483832e-03f, 2.884535915e-03f, 2.889582763e-03f, 2.894624369e-03f, 2.899660724e-03f, 2.904691820e-03f,
-2.909717647e-03f, 2.914738198e-03f, 2.919753464e-03f, 2.924763438e-03f, 2.929768109e-03f, 2.934767471e-03f, 2.939761514e-03f, 2.944750230e-03f, 2.949733612e-03f, 2.954711650e-03f,
-2.959684336e-03f, 2.964651662e-03f, 2.969613620e-03f, 2.974570201e-03f, 2.979521397e-03f, 2.984467200e-03f, 2.989407601e-03f, 2.994342593e-03f, 2.999272166e-03f, 3.004196313e-03f,
-3.009115025e-03f, 3.014028295e-03f, 3.018936113e-03f, 3.023838472e-03f, 3.028735364e-03f, 3.033626780e-03f, 3.038512712e-03f, 3.043393152e-03f, 3.048268092e-03f, 3.053137523e-03f,
-3.058001439e-03f, 3.062859829e-03f, 3.067712687e-03f, 3.072560004e-03f, 3.077401772e-03f, 3.082237983e-03f, 3.087068628e-03f, 3.091893701e-03f, 3.096713192e-03f, 3.101527094e-03f,
-3.106335399e-03f, 3.111138098e-03f, 3.115935184e-03f, 3.120726649e-03f, 3.125512484e-03f, 3.130292681e-03f, 3.135067234e-03f, 3.139836132e-03f, 3.144599370e-03f, 3.149356938e-03f,
-3.154108829e-03f, 3.158855035e-03f, 3.163595548e-03f, 3.168330360e-03f, 3.173059462e-03f, 3.177782848e-03f, 3.182500510e-03f, 3.187212439e-03f, 3.191918627e-03f, 3.196619068e-03f,
-3.201313752e-03f, 3.206002672e-03f, 3.210685821e-03f, 3.215363190e-03f, 3.220034771e-03f, 3.224700558e-03f, 3.229360542e-03f, 3.234014715e-03f, 3.238663069e-03f, 3.243305598e-03f,
-3.247942292e-03f, 3.252573145e-03f, 3.257198149e-03f, 3.261817295e-03f, 3.266430577e-03f, 3.271037987e-03f, 3.275639516e-03f, 3.280235158e-03f, 3.284824904e-03f, 3.289408747e-03f,
-3.293986679e-03f, 3.298558694e-03f, 3.303124782e-03f, 3.307684937e-03f, 3.312239150e-03f, 3.316787415e-03f, 3.321329724e-03f, 3.325866069e-03f, 3.330396443e-03f, 3.334920838e-03f,
-3.339439246e-03f, 3.343951661e-03f, 3.348458074e-03f, 3.352958479e-03f, 3.357452867e-03f, 3.361941231e-03f, 3.366423564e-03f, 3.370899858e-03f, 3.375370106e-03f, 3.379834300e-03f,
-3.384292433e-03f, 3.388744498e-03f, 3.393190487e-03f, 3.397630393e-03f, 3.402064208e-03f, 3.406491926e-03f, 3.410913538e-03f, 3.415329037e-03f, 3.419738417e-03f, 3.424141669e-03f,
-3.428538786e-03f, 3.432929762e-03f, 3.437314589e-03f, 3.441693259e-03f, 3.446065765e-03f, 3.450432101e-03f, 3.454792258e-03f, 3.459146230e-03f, 3.463494010e-03f, 3.467835589e-03f,
-3.472170961e-03f, 3.476500120e-03f, 3.480823056e-03f, 3.485139765e-03f, 3.489450237e-03f, 3.493754467e-03f, 3.498052447e-03f, 3.502344169e-03f, 3.506629627e-03f, 3.510908815e-03f,
-3.515181723e-03f, 3.519448346e-03f, 3.523708677e-03f, 3.527962708e-03f, 3.532210433e-03f, 3.536451844e-03f, 3.540686934e-03f, 3.544915696e-03f, 3.549138124e-03f, 3.553354210e-03f,
-3.557563948e-03f, 3.561767330e-03f, 3.565964350e-03f, 3.570155000e-03f, 3.574339273e-03f, 3.578517163e-03f, 3.582688663e-03f, 3.586853766e-03f, 3.591012465e-03f, 3.595164754e-03f,
-3.599310624e-03f, 3.603450070e-03f, 3.607583084e-03f, 3.611709660e-03f, 3.615829791e-03f, 3.619943471e-03f, 3.624050691e-03f, 3.628151447e-03f, 3.632245730e-03f, 3.636333534e-03f,
-3.640414852e-03f, 3.644489678e-03f, 3.648558005e-03f, 3.652619826e-03f, 3.656675135e-03f, 3.660723924e-03f, 3.664766187e-03f, 3.668801918e-03f, 3.672831110e-03f, 3.676853756e-03f,
-3.680869849e-03f, 3.684879383e-03f, 3.688882352e-03f, 3.692878748e-03f, 3.696868565e-03f, 3.700851797e-03f, 3.704828437e-03f, 3.708798478e-03f, 3.712761914e-03f, 3.716718739e-03f,
-3.720668945e-03f, 3.724612527e-03f, 3.728549478e-03f, 3.732479791e-03f, 3.736403460e-03f, 3.740320479e-03f, 3.744230840e-03f, 3.748134539e-03f, 3.752031567e-03f, 3.755921919e-03f,
-3.759805589e-03f, 3.763682570e-03f, 3.767552855e-03f, 3.771416439e-03f, 3.775273315e-03f, 3.779123476e-03f, 3.782966917e-03f, 3.786803630e-03f, 3.790633611e-03f, 3.794456851e-03f,
-3.798273346e-03f, 3.802083089e-03f, 3.805886073e-03f, 3.809682293e-03f, 3.813471742e-03f, 3.817254414e-03f, 3.821030303e-03f, 3.824799402e-03f, 3.828561706e-03f, 3.832317207e-03f,
-3.836065901e-03f, 3.839807781e-03f, 3.843542841e-03f, 3.847271074e-03f, 3.850992475e-03f, 3.854707037e-03f, 3.858414754e-03f, 3.862115621e-03f, 3.865809632e-03f, 3.869496779e-03f,
-3.873177058e-03f, 3.876850462e-03f, 3.880516985e-03f, 3.884176621e-03f, 3.887829364e-03f, 3.891475209e-03f, 3.895114148e-03f, 3.898746178e-03f, 3.902371290e-03f, 3.905989480e-03f,
-3.909600741e-03f, 3.913205068e-03f, 3.916802455e-03f, 3.920392896e-03f, 3.923976385e-03f, 3.927552915e-03f, 3.931122483e-03f, 3.934685080e-03f, 3.938240703e-03f, 3.941789344e-03f,
-3.945330998e-03f, 3.948865660e-03f, 3.952393323e-03f, 3.955913982e-03f, 3.959427631e-03f, 3.962934265e-03f, 3.966433877e-03f, 3.969926462e-03f, 3.973412015e-03f, 3.976890528e-03f,
-3.980361998e-03f, 3.983826418e-03f, 3.987283783e-03f, 3.990734087e-03f, 3.994177324e-03f, 3.997613489e-03f, 4.001042576e-03f, 4.004464579e-03f, 4.007879494e-03f, 4.011287314e-03f,
-4.014688034e-03f, 4.018081649e-03f, 4.021468153e-03f, 4.024847540e-03f, 4.028219804e-03f, 4.031584942e-03f, 4.034942946e-03f, 4.038293812e-03f, 4.041637534e-03f, 4.044974107e-03f,
-4.048303525e-03f, 4.051625782e-03f, 4.054940875e-03f, 4.058248796e-03f, 4.061549541e-03f, 4.064843105e-03f, 4.068129481e-03f, 4.071408666e-03f, 4.074680652e-03f, 4.077945436e-03f,
-4.081203012e-03f, 4.084453374e-03f, 4.087696518e-03f, 4.090932438e-03f, 4.094161128e-03f, 4.097382584e-03f, 4.100596801e-03f, 4.103803772e-03f, 4.107003494e-03f, 4.110195960e-03f,
-4.113381167e-03f, 4.116559107e-03f, 4.119729777e-03f, 4.122893172e-03f, 4.126049285e-03f, 4.129198113e-03f, 4.132339650e-03f, 4.135473890e-03f, 4.138600830e-03f, 4.141720463e-03f,
-4.144832785e-03f, 4.147937791e-03f, 4.151035476e-03f, 4.154125834e-03f, 4.157208861e-03f, 4.160284552e-03f, 4.163352902e-03f, 4.166413906e-03f, 4.169467559e-03f, 4.172513856e-03f,
-4.175552793e-03f, 4.178584363e-03f, 4.181608563e-03f, 4.184625388e-03f, 4.187634832e-03f, 4.190636892e-03f, 4.193631561e-03f, 4.196618836e-03f, 4.199598711e-03f, 4.202571182e-03f,
-4.205536243e-03f, 4.208493891e-03f, 4.211444121e-03f, 4.214386926e-03f, 4.217322304e-03f, 4.220250250e-03f, 4.223170757e-03f, 4.226083823e-03f, 4.228989442e-03f, 4.231887609e-03f,
-4.234778321e-03f, 4.237661571e-03f, 4.240537357e-03f, 4.243405672e-03f, 4.246266513e-03f, 4.249119875e-03f, 4.251965753e-03f, 4.254804143e-03f, 4.257635041e-03f, 4.260458441e-03f,
-4.263274339e-03f, 4.266082731e-03f, 4.268883613e-03f, 4.271676979e-03f, 4.274462825e-03f, 4.277241148e-03f, 4.280011942e-03f, 4.282775203e-03f, 4.285530926e-03f, 4.288279108e-03f,
-4.291019744e-03f, 4.293752829e-03f, 4.296478360e-03f, 4.299196331e-03f, 4.301906739e-03f, 4.304609579e-03f, 4.307304847e-03f, 4.309992538e-03f, 4.312672649e-03f, 4.315345175e-03f,
-4.318010112e-03f, 4.320667456e-03f, 4.323317202e-03f, 4.325959346e-03f, 4.328593884e-03f, 4.331220812e-03f, 4.333840126e-03f, 4.336451821e-03f, 4.339055893e-03f, 4.341652339e-03f,
-4.344241154e-03f, 4.346822334e-03f, 4.349395875e-03f, 4.351961773e-03f, 4.354520024e-03f, 4.357070624e-03f, 4.359613568e-03f, 4.362148853e-03f, 4.364676475e-03f, 4.367196429e-03f,
-4.369708713e-03f, 4.372213321e-03f, 4.374710250e-03f, 4.377199496e-03f, 4.379681056e-03f, 4.382154924e-03f, 4.384621097e-03f, 4.387079572e-03f, 4.389530344e-03f, 4.391973410e-03f,
-4.394408766e-03f, 4.396836407e-03f, 4.399256331e-03f, 4.401668533e-03f, 4.404073010e-03f, 4.406469757e-03f, 4.408858771e-03f, 4.411240049e-03f, 4.413613586e-03f, 4.415979379e-03f,
-4.418337424e-03f, 4.420687718e-03f, 4.423030256e-03f, 4.425365036e-03f, 4.427692052e-03f, 4.430011303e-03f, 4.432322784e-03f, 4.434626491e-03f, 4.436922421e-03f, 4.439210571e-03f,
-4.441490936e-03f, 4.443763514e-03f, 4.446028300e-03f, 4.448285292e-03f, 4.450534485e-03f, 4.452775876e-03f, 4.455009462e-03f, 4.457235239e-03f, 4.459453204e-03f, 4.461663353e-03f,
-4.463865683e-03f, 4.466060191e-03f, 4.468246872e-03f, 4.470425725e-03f, 4.472596744e-03f, 4.474759927e-03f, 4.476915271e-03f, 4.479062772e-03f, 4.481202427e-03f, 4.483334233e-03f,
-4.485458186e-03f, 4.487574282e-03f, 4.489682520e-03f, 4.491782895e-03f, 4.493875404e-03f, 4.495960044e-03f, 4.498036812e-03f, 4.500105705e-03f, 4.502166719e-03f, 4.504219851e-03f,
-4.506265099e-03f, 4.508302458e-03f, 4.510331926e-03f, 4.512353500e-03f, 4.514367176e-03f, 4.516372952e-03f, 4.518370824e-03f, 4.520360789e-03f, 4.522342845e-03f, 4.524316988e-03f,
-4.526283216e-03f, 4.528241524e-03f, 4.530191911e-03f, 4.532134373e-03f, 4.534068908e-03f, 4.535995512e-03f, 4.537914182e-03f, 4.539824915e-03f, 4.541727710e-03f, 4.543622562e-03f,
-4.545509468e-03f, 4.547388427e-03f, 4.549259435e-03f, 4.551122489e-03f, 4.552977586e-03f, 4.554824724e-03f, 4.556663900e-03f, 4.558495111e-03f, 4.560318354e-03f, 4.562133627e-03f,
-4.563940926e-03f, 4.565740250e-03f, 4.567531594e-03f, 4.569314958e-03f, 4.571090337e-03f, 4.572857729e-03f, 4.574617132e-03f, 4.576368543e-03f, 4.578111959e-03f, 4.579847378e-03f,
-4.581574797e-03f, 4.583294214e-03f, 4.585005625e-03f, 4.586709029e-03f, 4.588404423e-03f, 4.590091804e-03f, 4.591771169e-03f, 4.593442517e-03f, 4.595105845e-03f, 4.596761150e-03f,
-4.598408430e-03f, 4.600047682e-03f, 4.601678904e-03f, 4.603302093e-03f, 4.604917248e-03f, 4.606524365e-03f, 4.608123443e-03f, 4.609714479e-03f, 4.611297470e-03f, 4.612872415e-03f,
-4.614439310e-03f, 4.615998154e-03f, 4.617548945e-03f, 4.619091679e-03f, 4.620626355e-03f, 4.622152971e-03f, 4.623671524e-03f, 4.625182012e-03f, 4.626684434e-03f, 4.628178785e-03f,
-4.629665065e-03f, 4.631143272e-03f, 4.632613403e-03f, 4.634075455e-03f, 4.635529428e-03f, 4.636975318e-03f, 4.638413124e-03f, 4.639842844e-03f, 4.641264475e-03f, 4.642678015e-03f,
-4.644083463e-03f, 4.645480817e-03f, 4.646870073e-03f, 4.648251232e-03f, 4.649624289e-03f, 4.650989244e-03f, 4.652346094e-03f, 4.653694838e-03f, 4.655035474e-03f, 4.656367999e-03f,
-4.657692412e-03f, 4.659008710e-03f, 4.660316893e-03f, 4.661616958e-03f, 4.662908903e-03f, 4.664192727e-03f, 4.665468427e-03f, 4.666736002e-03f, 4.667995451e-03f, 4.669246770e-03f,
-4.670489959e-03f, 4.671725016e-03f, 4.672951939e-03f, 4.674170726e-03f, 4.675381376e-03f, 4.676583886e-03f, 4.677778256e-03f, 4.678964484e-03f, 4.680142567e-03f, 4.681312505e-03f,
-4.682474296e-03f, 4.683627937e-03f, 4.684773428e-03f, 4.685910767e-03f, 4.687039953e-03f, 4.688160983e-03f, 4.689273856e-03f, 4.690378572e-03f, 4.691475127e-03f, 4.692563521e-03f,
-4.693643753e-03f, 4.694715820e-03f, 4.695779722e-03f, 4.696835457e-03f, 4.697883023e-03f, 4.698922419e-03f, 4.699953644e-03f, 4.700976696e-03f, 4.701991574e-03f, 4.702998277e-03f,
-4.703996803e-03f, 4.704987152e-03f, 4.705969320e-03f, 4.706943309e-03f, 4.707909115e-03f, 4.708866738e-03f, 4.709816177e-03f, 4.710757430e-03f, 4.711690496e-03f, 4.712615374e-03f,
-4.713532062e-03f, 4.714440561e-03f, 4.715340867e-03f, 4.716232981e-03f, 4.717116901e-03f, 4.717992626e-03f, 4.718860155e-03f, 4.719719486e-03f, 4.720570619e-03f, 4.721413553e-03f,
-4.722248286e-03f, 4.723074818e-03f, 4.723893147e-03f, 4.724703273e-03f, 4.725505195e-03f, 4.726298911e-03f, 4.727084420e-03f, 4.727861722e-03f, 4.728630816e-03f, 4.729391700e-03f,
-4.730144374e-03f, 4.730888837e-03f, 4.731625089e-03f, 4.732353127e-03f, 4.733072952e-03f, 4.733784562e-03f, 4.734487957e-03f, 4.735183135e-03f, 4.735870097e-03f, 4.736548841e-03f,
-4.737219367e-03f, 4.737881673e-03f, 4.738535760e-03f, 4.739181626e-03f, 4.739819270e-03f, 4.740448692e-03f, 4.741069892e-03f, 4.741682868e-03f, 4.742287619e-03f, 4.742884147e-03f,
-4.743472448e-03f, 4.744052524e-03f, 4.744624373e-03f, 4.745187996e-03f, 4.745743390e-03f, 4.746290556e-03f, 4.746829493e-03f, 4.747360201e-03f, 4.747882679e-03f, 4.748396927e-03f,
-4.748902944e-03f, 4.749400730e-03f, 4.749890284e-03f, 4.750371606e-03f, 4.750844695e-03f, 4.751309551e-03f, 4.751766173e-03f, 4.752214562e-03f, 4.752654717e-03f, 4.753086637e-03f,
-4.753510323e-03f, 4.753925773e-03f, 4.754332988e-03f, 4.754731966e-03f, 4.755122709e-03f, 4.755505216e-03f, 4.755879486e-03f, 4.756245519e-03f, 4.756603315e-03f, 4.756952873e-03f,
-4.757294195e-03f, 4.757627278e-03f, 4.757952124e-03f, 4.758268732e-03f, 4.758577102e-03f, 4.758877233e-03f, 4.759169126e-03f, 4.759452781e-03f, 4.759728197e-03f, 4.759995375e-03f,
-4.760254314e-03f, 4.760505014e-03f, 4.760747475e-03f, 4.760981698e-03f, 4.761207682e-03f, 4.761425427e-03f, 4.761634934e-03f, 4.761836202e-03f, 4.762029231e-03f, 4.762214022e-03f,
-4.762390575e-03f, 4.762558889e-03f, 4.762718965e-03f, 4.762870803e-03f, 4.763014403e-03f, 4.763149765e-03f, 4.763276890e-03f, 4.763395777e-03f, 4.763506427e-03f, 4.763608841e-03f,
-4.763703017e-03f, 4.763788957e-03f, 4.763866660e-03f, 4.763936128e-03f, 4.763997360e-03f, 4.764050357e-03f, 4.764095118e-03f, 4.764131645e-03f, 4.764159937e-03f, 4.764179995e-03f,
-4.764191820e-03f, 4.764195411e-03f, 4.764190770e-03f, 4.764177896e-03f, 4.764156790e-03f, 4.764127452e-03f, 4.764089884e-03f, 4.764044084e-03f, 4.763990055e-03f, 4.763927795e-03f,
-4.763857307e-03f, 4.763778590e-03f, 4.763691645e-03f, 4.763596472e-03f, 4.763493073e-03f, 4.763381447e-03f, 4.763261595e-03f, 4.763133518e-03f, 4.762997216e-03f, 4.762852691e-03f,
-4.762699942e-03f, 4.762538971e-03f, 4.762369778e-03f, 4.762192364e-03f, 4.762006729e-03f, 4.761812875e-03f, 4.761610801e-03f, 4.761400510e-03f, 4.761182001e-03f, 4.760955275e-03f,
-4.760720333e-03f, 4.760477176e-03f, 4.760225805e-03f, 4.759966221e-03f, 4.759698424e-03f, 4.759422415e-03f, 4.759138195e-03f, 4.758845766e-03f, 4.758545127e-03f, 4.758236281e-03f,
-4.757919227e-03f, 4.757593967e-03f, 4.757260502e-03f, 4.756918833e-03f, 4.756568961e-03f, 4.756210886e-03f, 4.755844610e-03f, 4.755470134e-03f, 4.755087459e-03f, 4.754696585e-03f,
-4.754297515e-03f, 4.753890249e-03f, 4.753474788e-03f, 4.753051134e-03f, 4.752619287e-03f, 4.752179248e-03f, 4.751731020e-03f, 4.751274602e-03f, 4.750809997e-03f, 4.750337205e-03f,
-4.749856228e-03f, 4.749367067e-03f, 4.748869722e-03f, 4.748364196e-03f, 4.747850490e-03f, 4.747328605e-03f, 4.746798542e-03f, 4.746260302e-03f, 4.745713887e-03f, 4.745159299e-03f,
-4.744596538e-03f, 4.744025607e-03f, 4.743446505e-03f, 4.742859236e-03f, 4.742263799e-03f, 4.741660197e-03f, 4.741048432e-03f, 4.740428504e-03f, 4.739800415e-03f, 4.739164166e-03f,
-4.738519759e-03f, 4.737867196e-03f, 4.737206478e-03f, 4.736537607e-03f, 4.735860584e-03f, 4.735175410e-03f, 4.734482088e-03f, 4.733780619e-03f, 4.733071004e-03f, 4.732353246e-03f,
-4.731627345e-03f, 4.730893304e-03f, 4.730151124e-03f, 4.729400806e-03f, 4.728642353e-03f, 4.727875767e-03f, 4.727101048e-03f, 4.726318200e-03f, 4.725527222e-03f, 4.724728118e-03f,
-4.723920889e-03f, 4.723105537e-03f, 4.722282063e-03f, 4.721450470e-03f, 4.720610759e-03f, 4.719762932e-03f, 4.718906991e-03f, 4.718042938e-03f, 4.717170775e-03f, 4.716290503e-03f,
-4.715402125e-03f, 4.714505643e-03f, 4.713601058e-03f, 4.712688373e-03f, 4.711767589e-03f, 4.710838708e-03f, 4.709901733e-03f, 4.708956665e-03f, 4.708003507e-03f, 4.707042260e-03f,
-4.706072927e-03f, 4.705095510e-03f, 4.704110010e-03f, 4.703116430e-03f, 4.702114773e-03f, 4.701105039e-03f, 4.700087231e-03f, 4.699061352e-03f, 4.698027404e-03f, 4.696985388e-03f,
-4.695935308e-03f, 4.694877164e-03f, 4.693810960e-03f, 4.692736697e-03f, 4.691654379e-03f, 4.690564006e-03f, 4.689465582e-03f, 4.688359109e-03f, 4.687244589e-03f, 4.686122024e-03f,
-4.684991417e-03f, 4.683852770e-03f, 4.682706085e-03f, 4.681551366e-03f, 4.680388613e-03f, 4.679217830e-03f, 4.678039019e-03f, 4.676852183e-03f, 4.675657323e-03f, 4.674454443e-03f,
-4.673243545e-03f, 4.672024631e-03f, 4.670797704e-03f, 4.669562766e-03f, 4.668319820e-03f, 4.667068869e-03f, 4.665809915e-03f, 4.664542960e-03f, 4.663268007e-03f, 4.661985059e-03f,
-4.660694119e-03f, 4.659395188e-03f, 4.658088270e-03f, 4.656773368e-03f, 4.655450483e-03f, 4.654119619e-03f, 4.652780778e-03f, 4.651433963e-03f, 4.650079177e-03f, 4.648716423e-03f,
-4.647345703e-03f, 4.645967020e-03f, 4.644580376e-03f, 4.643185775e-03f, 4.641783220e-03f, 4.640372712e-03f, 4.638954256e-03f, 4.637527854e-03f, 4.636093508e-03f, 4.634651222e-03f,
-4.633200998e-03f, 4.631742840e-03f, 4.630276750e-03f, 4.628802731e-03f, 4.627320786e-03f, 4.625830919e-03f, 4.624333131e-03f, 4.622827427e-03f, 4.621313809e-03f, 4.619792279e-03f,
-4.618262842e-03f, 4.616725500e-03f, 4.615180256e-03f, 4.613627113e-03f, 4.612066075e-03f, 4.610497144e-03f, 4.608920323e-03f, 4.607335616e-03f, 4.605743026e-03f, 4.604142556e-03f,
-4.602534208e-03f, 4.600917987e-03f, 4.599293895e-03f, 4.597661936e-03f, 4.596022113e-03f, 4.594374428e-03f, 4.592718886e-03f, 4.591055489e-03f, 4.589384241e-03f, 4.587705145e-03f,
-4.586018205e-03f, 4.584323423e-03f, 4.582620803e-03f, 4.580910348e-03f, 4.579192062e-03f, 4.577465947e-03f, 4.575732008e-03f, 4.573990248e-03f, 4.572240670e-03f, 4.570483278e-03f,
-4.568718074e-03f, 4.566945063e-03f, 4.565164247e-03f, 4.563375631e-03f, 4.561579218e-03f, 4.559775011e-03f, 4.557963014e-03f, 4.556143230e-03f, 4.554315663e-03f, 4.552480316e-03f,
-4.550637193e-03f, 4.548786297e-03f, 4.546927633e-03f, 4.545061203e-03f, 4.543187012e-03f, 4.541305063e-03f, 4.539415359e-03f, 4.537517904e-03f, 4.535612702e-03f, 4.533699756e-03f,
-4.531779071e-03f, 4.529850650e-03f, 4.527914496e-03f, 4.525970614e-03f, 4.524019007e-03f, 4.522059678e-03f, 4.520092632e-03f, 4.518117873e-03f, 4.516135404e-03f, 4.514145229e-03f,
-4.512147351e-03f, 4.510141776e-03f, 4.508128505e-03f, 4.506107544e-03f, 4.504078897e-03f, 4.502042566e-03f, 4.499998557e-03f, 4.497946872e-03f, 4.495887516e-03f, 4.493820494e-03f,
-4.491745807e-03f, 4.489663462e-03f, 4.487573461e-03f, 4.485475809e-03f, 4.483370510e-03f, 4.481257567e-03f, 4.479136985e-03f, 4.477008768e-03f, 4.474872919e-03f, 4.472729444e-03f,
-4.470578345e-03f, 4.468419627e-03f, 4.466253295e-03f, 4.464079352e-03f, 4.461897803e-03f, 4.459708650e-03f, 4.457511900e-03f, 4.455307556e-03f, 4.453095621e-03f, 4.450876101e-03f,
-4.448649000e-03f, 4.446414321e-03f, 4.444172069e-03f, 4.441922249e-03f, 4.439664863e-03f, 4.437399918e-03f, 4.435127417e-03f, 4.432847363e-03f, 4.430559763e-03f, 4.428264620e-03f,
-4.425961937e-03f, 4.423651721e-03f, 4.421333975e-03f, 4.419008702e-03f, 4.416675909e-03f, 4.414335599e-03f, 4.411987777e-03f, 4.409632446e-03f, 4.407269612e-03f, 4.404899280e-03f,
-4.402521452e-03f, 4.400136134e-03f, 4.397743331e-03f, 4.395343047e-03f, 4.392935286e-03f, 4.390520053e-03f, 4.388097352e-03f, 4.385667189e-03f, 4.383229567e-03f, 4.380784491e-03f,
-4.378331966e-03f, 4.375871996e-03f, 4.373404587e-03f, 4.370929742e-03f, 4.368447466e-03f, 4.365957764e-03f, 4.363460641e-03f, 4.360956101e-03f, 4.358444150e-03f, 4.355924790e-03f,
-4.353398029e-03f, 4.350863869e-03f, 4.348322316e-03f, 4.345773375e-03f, 4.343217051e-03f, 4.340653347e-03f, 4.338082270e-03f, 4.335503823e-03f, 4.332918012e-03f, 4.330324842e-03f,
-4.327724316e-03f, 4.325116441e-03f, 4.322501221e-03f, 4.319878661e-03f, 4.317248766e-03f, 4.314611540e-03f, 4.311966989e-03f, 4.309315118e-03f, 4.306655931e-03f, 4.303989433e-03f,
-4.301315630e-03f, 4.298634527e-03f, 4.295946128e-03f, 4.293250438e-03f, 4.290547462e-03f, 4.287837207e-03f, 4.285119675e-03f, 4.282394874e-03f, 4.279662807e-03f, 4.276923479e-03f,
-4.274176897e-03f, 4.271423064e-03f, 4.268661986e-03f, 4.265893669e-03f, 4.263118117e-03f, 4.260335335e-03f, 4.257545329e-03f, 4.254748104e-03f, 4.251943665e-03f, 4.249132017e-03f,
-4.246313165e-03f, 4.243487115e-03f, 4.240653872e-03f, 4.237813441e-03f, 4.234965827e-03f, 4.232111037e-03f, 4.229249074e-03f, 4.226379944e-03f, 4.223503653e-03f, 4.220620206e-03f,
-4.217729608e-03f, 4.214831865e-03f, 4.211926981e-03f, 4.209014963e-03f, 4.206095816e-03f, 4.203169545e-03f, 4.200236155e-03f, 4.197295652e-03f, 4.194348042e-03f, 4.191393329e-03f,
-4.188431520e-03f, 4.185462619e-03f, 4.182486633e-03f, 4.179503566e-03f, 4.176513425e-03f, 4.173516214e-03f, 4.170511940e-03f, 4.167500607e-03f, 4.164482222e-03f, 4.161456790e-03f,
-4.158424316e-03f, 4.155384806e-03f, 4.152338266e-03f, 4.149284702e-03f, 4.146224118e-03f, 4.143156521e-03f, 4.140081916e-03f, 4.137000309e-03f, 4.133911705e-03f, 4.130816111e-03f,
-4.127713531e-03f, 4.124603973e-03f, 4.121487440e-03f, 4.118363940e-03f, 4.115233477e-03f, 4.112096058e-03f, 4.108951689e-03f, 4.105800374e-03f, 4.102642121e-03f, 4.099476934e-03f,
-4.096304820e-03f, 4.093125784e-03f, 4.089939832e-03f, 4.086746970e-03f, 4.083547204e-03f, 4.080340540e-03f, 4.077126984e-03f, 4.073906541e-03f, 4.070679217e-03f, 4.067445019e-03f,
-4.064203952e-03f, 4.060956023e-03f, 4.057701236e-03f, 4.054439599e-03f, 4.051171117e-03f, 4.047895796e-03f, 4.044613642e-03f, 4.041324661e-03f, 4.038028860e-03f, 4.034726243e-03f,
-4.031416818e-03f, 4.028100590e-03f, 4.024777566e-03f, 4.021447750e-03f, 4.018111151e-03f, 4.014767773e-03f, 4.011417622e-03f, 4.008060706e-03f, 4.004697029e-03f, 4.001326599e-03f,
-3.997949421e-03f, 3.994565501e-03f, 3.991174846e-03f, 3.987777462e-03f, 3.984373355e-03f, 3.980962531e-03f, 3.977544997e-03f, 3.974120758e-03f, 3.970689822e-03f, 3.967252193e-03f,
-3.963807879e-03f, 3.960356886e-03f, 3.956899220e-03f, 3.953434887e-03f, 3.949963894e-03f, 3.946486247e-03f, 3.943001953e-03f, 3.939511017e-03f, 3.936013446e-03f, 3.932509247e-03f,
-3.928998425e-03f, 3.925480988e-03f, 3.921956941e-03f, 3.918426291e-03f, 3.914889045e-03f, 3.911345209e-03f, 3.907794789e-03f, 3.904237792e-03f, 3.900674224e-03f, 3.897104092e-03f,
-3.893527403e-03f, 3.889944162e-03f, 3.886354376e-03f, 3.882758053e-03f, 3.879155197e-03f, 3.875545817e-03f, 3.871929918e-03f, 3.868307507e-03f, 3.864678590e-03f, 3.861043175e-03f,
-3.857401268e-03f, 3.853752875e-03f, 3.850098003e-03f, 3.846436659e-03f, 3.842768850e-03f, 3.839094581e-03f, 3.835413860e-03f, 3.831726693e-03f, 3.828033088e-03f, 3.824333050e-03f,
-3.820626586e-03f, 3.816913704e-03f, 3.813194410e-03f, 3.809468710e-03f, 3.805736612e-03f, 3.801998122e-03f, 3.798253247e-03f, 3.794501993e-03f, 3.790744368e-03f, 3.786980379e-03f,
-3.783210032e-03f, 3.779433333e-03f, 3.775650291e-03f, 3.771860911e-03f, 3.768065201e-03f, 3.764263167e-03f, 3.760454817e-03f, 3.756640157e-03f, 3.752819194e-03f, 3.748991935e-03f,
-3.745158386e-03f, 3.741318556e-03f, 3.737472451e-03f, 3.733620077e-03f, 3.729761442e-03f, 3.725896553e-03f, 3.722025417e-03f, 3.718148040e-03f, 3.714264430e-03f, 3.710374594e-03f,
-3.706478539e-03f, 3.702576271e-03f, 3.698667798e-03f, 3.694753127e-03f, 3.690832266e-03f, 3.686905220e-03f, 3.682971998e-03f, 3.679032605e-03f, 3.675087051e-03f, 3.671135340e-03f,
-3.667177482e-03f, 3.663213482e-03f, 3.659243348e-03f, 3.655267087e-03f, 3.651284707e-03f, 3.647296214e-03f, 3.643301615e-03f, 3.639300919e-03f, 3.635294131e-03f, 3.631281260e-03f,
-3.627262313e-03f, 3.623237296e-03f, 3.619206217e-03f, 3.615169084e-03f, 3.611125903e-03f, 3.607076683e-03f, 3.603021429e-03f, 3.598960150e-03f, 3.594892852e-03f, 3.590819544e-03f,
-3.586740232e-03f, 3.582654924e-03f, 3.578563627e-03f, 3.574466349e-03f, 3.570363097e-03f, 3.566253878e-03f, 3.562138699e-03f, 3.558017569e-03f, 3.553890494e-03f, 3.549757482e-03f,
-3.545618541e-03f, 3.541473677e-03f, 3.537322899e-03f, 3.533166213e-03f, 3.529003628e-03f, 3.524835150e-03f, 3.520660788e-03f, 3.516480548e-03f, 3.512294438e-03f, 3.508102466e-03f,
-3.503904640e-03f, 3.499700966e-03f, 3.495491453e-03f, 3.491276107e-03f, 3.487054938e-03f, 3.482827951e-03f, 3.478595155e-03f, 3.474356557e-03f, 3.470112165e-03f, 3.465861987e-03f,
-3.461606029e-03f, 3.457344301e-03f, 3.453076809e-03f, 3.448803561e-03f, 3.444524565e-03f, 3.440239828e-03f, 3.435949359e-03f, 3.431653164e-03f, 3.427351252e-03f, 3.423043630e-03f,
-3.418730306e-03f, 3.414411288e-03f, 3.410086583e-03f, 3.405756200e-03f, 3.401420145e-03f, 3.397078428e-03f, 3.392731055e-03f, 3.388378034e-03f, 3.384019373e-03f, 3.379655080e-03f,
-3.375285163e-03f, 3.370909630e-03f, 3.366528488e-03f, 3.362141746e-03f, 3.357749410e-03f, 3.353351490e-03f, 3.348947992e-03f, 3.344538926e-03f, 3.340124298e-03f, 3.335704116e-03f,
-3.331278389e-03f, 3.326847124e-03f, 3.322410330e-03f, 3.317968014e-03f, 3.313520185e-03f, 3.309066849e-03f, 3.304608016e-03f, 3.300143693e-03f, 3.295673888e-03f, 3.291198609e-03f,
-3.286717864e-03f, 3.282231661e-03f, 3.277740009e-03f, 3.273242914e-03f, 3.268740386e-03f, 3.264232432e-03f, 3.259719061e-03f, 3.255200280e-03f, 3.250676097e-03f, 3.246146521e-03f,
-3.241611560e-03f, 3.237071222e-03f, 3.232525514e-03f, 3.227974445e-03f, 3.223418024e-03f, 3.218856258e-03f, 3.214289155e-03f, 3.209716724e-03f, 3.205138972e-03f, 3.200555909e-03f,
-3.195967541e-03f, 3.191373878e-03f, 3.186774928e-03f, 3.182170698e-03f, 3.177561197e-03f, 3.172946433e-03f, 3.168326414e-03f, 3.163701149e-03f, 3.159070646e-03f, 3.154434914e-03f,
-3.149793959e-03f, 3.145147791e-03f, 3.140496419e-03f, 3.135839849e-03f, 3.131178091e-03f, 3.126511153e-03f, 3.121839043e-03f, 3.117161770e-03f, 3.112479342e-03f, 3.107791767e-03f,
-3.103099053e-03f, 3.098401209e-03f, 3.093698244e-03f, 3.088990165e-03f, 3.084276982e-03f, 3.079558702e-03f, 3.074835334e-03f, 3.070106886e-03f, 3.065373367e-03f, 3.060634785e-03f,
-3.055891148e-03f, 3.051142466e-03f, 3.046388746e-03f, 3.041629997e-03f, 3.036866228e-03f, 3.032097446e-03f, 3.027323661e-03f, 3.022544881e-03f, 3.017761114e-03f, 3.012972369e-03f,
-3.008178655e-03f, 3.003379979e-03f, 2.998576351e-03f, 2.993767780e-03f, 2.988954272e-03f, 2.984135838e-03f, 2.979312486e-03f, 2.974484224e-03f, 2.969651061e-03f, 2.964813005e-03f,
-2.959970066e-03f, 2.955122251e-03f, 2.950269569e-03f, 2.945412030e-03f, 2.940549641e-03f, 2.935682411e-03f, 2.930810350e-03f, 2.925933465e-03f, 2.921051765e-03f, 2.916165259e-03f,
-2.911273955e-03f, 2.906377863e-03f, 2.901476991e-03f, 2.896571347e-03f, 2.891660941e-03f, 2.886745781e-03f, 2.881825875e-03f, 2.876901234e-03f, 2.871971864e-03f, 2.867037776e-03f,
-2.862098977e-03f, 2.857155478e-03f, 2.852207285e-03f, 2.847254409e-03f, 2.842296857e-03f, 2.837334640e-03f, 2.832367764e-03f, 2.827396241e-03f, 2.822420077e-03f, 2.817439283e-03f,
-2.812453866e-03f, 2.807463836e-03f, 2.802469201e-03f, 2.797469971e-03f, 2.792466155e-03f, 2.787457760e-03f, 2.782444796e-03f, 2.777427273e-03f, 2.772405198e-03f, 2.767378580e-03f,
-2.762347430e-03f, 2.757311755e-03f, 2.752271564e-03f, 2.747226867e-03f, 2.742177673e-03f, 2.737123989e-03f, 2.732065826e-03f, 2.727003192e-03f, 2.721936096e-03f, 2.716864547e-03f,
-2.711788555e-03f, 2.706708127e-03f, 2.701623274e-03f, 2.696534004e-03f, 2.691440326e-03f, 2.686342249e-03f, 2.681239783e-03f, 2.676132936e-03f, 2.671021717e-03f, 2.665906135e-03f,
-2.660786200e-03f, 2.655661920e-03f, 2.650533304e-03f, 2.645400363e-03f, 2.640263103e-03f, 2.635121536e-03f, 2.629975670e-03f, 2.624825513e-03f, 2.619671076e-03f, 2.614512367e-03f,
-2.609349395e-03f, 2.604182170e-03f, 2.599010700e-03f, 2.593834995e-03f, 2.588655064e-03f, 2.583470916e-03f, 2.578282560e-03f, 2.573090006e-03f, 2.567893262e-03f, 2.562692338e-03f,
-2.557487243e-03f, 2.552277986e-03f, 2.547064577e-03f, 2.541847024e-03f, 2.536625337e-03f, 2.531399525e-03f, 2.526169597e-03f, 2.520935563e-03f, 2.515697432e-03f, 2.510455212e-03f,
-2.505208914e-03f, 2.499958547e-03f, 2.494704119e-03f, 2.489445640e-03f, 2.484183120e-03f, 2.478916568e-03f, 2.473645992e-03f, 2.468371403e-03f, 2.463092810e-03f, 2.457810221e-03f,
-2.452523647e-03f, 2.447233096e-03f, 2.441938578e-03f, 2.436640103e-03f, 2.431337679e-03f, 2.426031316e-03f, 2.420721023e-03f, 2.415406810e-03f, 2.410088687e-03f, 2.404766661e-03f,
-2.399440744e-03f, 2.394110944e-03f, 2.388777271e-03f, 2.383439733e-03f, 2.378098342e-03f, 2.372753105e-03f, 2.367404032e-03f, 2.362051133e-03f, 2.356694418e-03f, 2.351333895e-03f,
-2.345969574e-03f, 2.340601465e-03f, 2.335229577e-03f, 2.329853920e-03f, 2.324474502e-03f, 2.319091334e-03f, 2.313704425e-03f, 2.308313784e-03f, 2.302919422e-03f, 2.297521346e-03f,
-2.292119568e-03f, 2.286714096e-03f, 2.281304941e-03f, 2.275892110e-03f, 2.270475615e-03f, 2.265055465e-03f, 2.259631668e-03f, 2.254204236e-03f, 2.248773177e-03f, 2.243338500e-03f,
-2.237900216e-03f, 2.232458334e-03f, 2.227012864e-03f, 2.221563814e-03f, 2.216111196e-03f, 2.210655018e-03f, 2.205195290e-03f, 2.199732021e-03f, 2.194265221e-03f, 2.188794901e-03f,
-2.183321069e-03f, 2.177843735e-03f, 2.172362908e-03f, 2.166878599e-03f, 2.161390817e-03f, 2.155899572e-03f, 2.150404873e-03f, 2.144906730e-03f, 2.139405153e-03f, 2.133900151e-03f,
-2.128391734e-03f, 2.122879911e-03f, 2.117364694e-03f, 2.111846090e-03f, 2.106324110e-03f, 2.100798763e-03f, 2.095270060e-03f, 2.089738010e-03f, 2.084202622e-03f, 2.078663907e-03f,
-2.073121874e-03f, 2.067576533e-03f, 2.062027894e-03f, 2.056475966e-03f, 2.050920759e-03f, 2.045362283e-03f, 2.039800547e-03f, 2.034235562e-03f, 2.028667338e-03f, 2.023095883e-03f,
-2.017521208e-03f, 2.011943323e-03f, 2.006362237e-03f, 2.000777960e-03f, 1.995190502e-03f, 1.989599874e-03f, 1.984006083e-03f, 1.978409141e-03f, 1.972809058e-03f, 1.967205842e-03f,
-1.961599505e-03f, 1.955990055e-03f, 1.950377503e-03f, 1.944761859e-03f, 1.939143131e-03f, 1.933521331e-03f, 1.927896469e-03f, 1.922268553e-03f, 1.916637594e-03f, 1.911003601e-03f,
-1.905366585e-03f, 1.899726556e-03f, 1.894083523e-03f, 1.888437496e-03f, 1.882788486e-03f, 1.877136502e-03f, 1.871481553e-03f, 1.865823651e-03f, 1.860162804e-03f, 1.854499024e-03f,
-1.848832319e-03f, 1.843162699e-03f, 1.837490175e-03f, 1.831814757e-03f, 1.826136454e-03f, 1.820455277e-03f, 1.814771235e-03f, 1.809084339e-03f, 1.803394598e-03f, 1.797702022e-03f,
-1.792006621e-03f, 1.786308406e-03f, 1.780607386e-03f, 1.774903571e-03f, 1.769196972e-03f, 1.763487597e-03f, 1.757775459e-03f, 1.752060565e-03f, 1.746342926e-03f, 1.740622553e-03f,
-1.734899455e-03f, 1.729173643e-03f, 1.723445126e-03f, 1.717713914e-03f, 1.711980018e-03f, 1.706243447e-03f, 1.700504212e-03f, 1.694762322e-03f, 1.689017788e-03f, 1.683270619e-03f,
-1.677520827e-03f, 1.671768420e-03f, 1.666013409e-03f, 1.660255804e-03f, 1.654495615e-03f, 1.648732852e-03f, 1.642967525e-03f, 1.637199645e-03f, 1.631429221e-03f, 1.625656264e-03f,
-1.619880783e-03f, 1.614102789e-03f, 1.608322291e-03f, 1.602539301e-03f, 1.596753827e-03f, 1.590965881e-03f, 1.585175472e-03f, 1.579382610e-03f, 1.573587306e-03f, 1.567789570e-03f,
-1.561989411e-03f, 1.556186841e-03f, 1.550381868e-03f, 1.544574504e-03f, 1.538764758e-03f, 1.532952641e-03f, 1.527138163e-03f, 1.521321333e-03f, 1.515502162e-03f, 1.509680661e-03f,
-1.503856839e-03f, 1.498030707e-03f, 1.492202274e-03f, 1.486371552e-03f, 1.480538549e-03f, 1.474703277e-03f, 1.468865746e-03f, 1.463025965e-03f, 1.457183945e-03f, 1.451339696e-03f,
-1.445493229e-03f, 1.439644553e-03f, 1.433793679e-03f, 1.427940617e-03f, 1.422085377e-03f, 1.416227970e-03f, 1.410368405e-03f, 1.404506693e-03f, 1.398642845e-03f, 1.392776870e-03f,
-1.386908778e-03f, 1.381038580e-03f, 1.375166287e-03f, 1.369291908e-03f, 1.363415453e-03f, 1.357536934e-03f, 1.351656359e-03f, 1.345773740e-03f, 1.339889087e-03f, 1.334002409e-03f,
-1.328113718e-03f, 1.322223023e-03f, 1.316330335e-03f, 1.310435665e-03f, 1.304539021e-03f, 1.298640415e-03f, 1.292739857e-03f, 1.286837358e-03f, 1.280932927e-03f, 1.275026574e-03f,
-1.269118311e-03f, 1.263208147e-03f, 1.257296093e-03f, 1.251382159e-03f, 1.245466355e-03f, 1.239548692e-03f, 1.233629180e-03f, 1.227707830e-03f, 1.221784651e-03f, 1.215859654e-03f,
-1.209932849e-03f, 1.204004247e-03f, 1.198073857e-03f, 1.192141691e-03f, 1.186207759e-03f, 1.180272071e-03f, 1.174334637e-03f, 1.168395467e-03f, 1.162454573e-03f, 1.156511964e-03f,
-1.150567651e-03f, 1.144621644e-03f, 1.138673953e-03f, 1.132724589e-03f, 1.126773562e-03f, 1.120820883e-03f, 1.114866562e-03f, 1.108910608e-03f, 1.102953034e-03f, 1.096993849e-03f,
-1.091033063e-03f, 1.085070686e-03f, 1.079106730e-03f, 1.073141205e-03f, 1.067174120e-03f, 1.061205487e-03f, 1.055235315e-03f, 1.049263616e-03f, 1.043290399e-03f, 1.037315675e-03f,
-1.031339454e-03f, 1.025361747e-03f, 1.019382564e-03f, 1.013401915e-03f, 1.007419812e-03f, 1.001436264e-03f, 9.954512810e-04f, 9.894648747e-04f, 9.834770549e-04f, 9.774878321e-04f,
-9.714972167e-04f, 9.655052191e-04f, 9.595118498e-04f, 9.535171191e-04f, 9.475210376e-04f, 9.415236155e-04f, 9.355248635e-04f, 9.295247918e-04f, 9.235234109e-04f, 9.175207313e-04f,
-9.115167634e-04f, 9.055115177e-04f, 8.995050045e-04f, 8.934972343e-04f, 8.874882177e-04f, 8.814779649e-04f, 8.754664865e-04f, 8.694537929e-04f, 8.634398945e-04f, 8.574248019e-04f,
-8.514085254e-04f, 8.453910756e-04f, 8.393724628e-04f, 8.333526976e-04f, 8.273317903e-04f, 8.213097515e-04f, 8.152865917e-04f, 8.092623212e-04f, 8.032369506e-04f, 7.972104903e-04f,
-7.911829508e-04f, 7.851543425e-04f, 7.791246760e-04f, 7.730939617e-04f, 7.670622100e-04f, 7.610294315e-04f, 7.549956366e-04f, 7.489608358e-04f, 7.429250396e-04f, 7.368882584e-04f,
-7.308505028e-04f, 7.248117833e-04f, 7.187721102e-04f, 7.127314941e-04f, 7.066899455e-04f, 7.006474748e-04f, 6.946040926e-04f, 6.885598094e-04f, 6.825146355e-04f, 6.764685816e-04f,
-6.704216581e-04f, 6.643738755e-04f, 6.583252443e-04f, 6.522757750e-04f, 6.462254781e-04f, 6.401743641e-04f, 6.341224434e-04f, 6.280697267e-04f, 6.220162243e-04f, 6.159619468e-04f,
-6.099069047e-04f, 6.038511084e-04f, 5.977945686e-04f, 5.917372956e-04f, 5.856793000e-04f, 5.796205924e-04f, 5.735611831e-04f, 5.675010827e-04f, 5.614403018e-04f, 5.553788507e-04f,
-5.493167401e-04f, 5.432539805e-04f, 5.371905823e-04f, 5.311265560e-04f, 5.250619123e-04f, 5.189966615e-04f, 5.129308142e-04f, 5.068643808e-04f, 5.007973721e-04f, 4.947297983e-04f,
-4.886616701e-04f, 4.825929979e-04f, 4.765237923e-04f, 4.704540638e-04f, 4.643838229e-04f, 4.583130801e-04f, 4.522418460e-04f, 4.461701310e-04f, 4.400979456e-04f, 4.340253005e-04f,
-4.279522060e-04f, 4.218786728e-04f, 4.158047112e-04f, 4.097303320e-04f, 4.036555455e-04f, 3.975803623e-04f, 3.915047928e-04f, 3.854288478e-04f, 3.793525375e-04f, 3.732758726e-04f,
-3.671988636e-04f, 3.611215210e-04f, 3.550438553e-04f, 3.489658771e-04f, 3.428875968e-04f, 3.368090249e-04f, 3.307301721e-04f, 3.246510488e-04f, 3.185716655e-04f, 3.124920327e-04f,
-3.064121610e-04f, 3.003320610e-04f, 2.942517430e-04f, 2.881712176e-04f, 2.820904954e-04f, 2.760095868e-04f, 2.699285024e-04f, 2.638472527e-04f, 2.577658482e-04f, 2.516842994e-04f,
-2.456026169e-04f, 2.395208112e-04f, 2.334388927e-04f, 2.273568720e-04f, 2.212747596e-04f, 2.151925661e-04f, 2.091103019e-04f, 2.030279775e-04f, 1.969456035e-04f, 1.908631904e-04f,
-1.847807487e-04f, 1.786982889e-04f, 1.726158215e-04f, 1.665333570e-04f, 1.604509060e-04f, 1.543684789e-04f, 1.482860863e-04f, 1.422037386e-04f, 1.361214464e-04f, 1.300392203e-04f,
-1.239570706e-04f, 1.178750079e-04f, 1.117930427e-04f, 1.057111856e-04f, 9.962944691e-05f, 9.354783729e-05f, 8.746636719e-05f, 8.138504712e-05f, 7.530388758e-05f, 6.922289907e-05f,
-6.314209209e-05f, 5.706147714e-05f, 5.098106472e-05f, 4.490086533e-05f, 3.882088946e-05f, 3.274114761e-05f, 2.666165027e-05f, 2.058240794e-05f, 1.450343111e-05f, 8.424730278e-06f,
-2.346315926e-06f, -3.731801452e-06f, -9.809611368e-06f, -1.588710333e-05f, -2.196426686e-05f, -2.804109146e-05f, -3.411756666e-05f, -4.019368196e-05f, -4.626942690e-05f, -5.234479097e-05f,
--5.841976371e-05f, -6.449433464e-05f, -7.056849327e-05f, -7.664222914e-05f, -8.271553176e-05f, -8.878839067e-05f, -9.486079538e-05f, -1.009327354e-04f, -1.070042004e-04f, -1.130751797e-04f,
--1.191456629e-04f, -1.252156397e-04f, -1.312850994e-04f, -1.373540317e-04f, -1.434224260e-04f, -1.494902720e-04f, -1.555575591e-04f, -1.616242769e-04f, -1.676904150e-04f, -1.737559628e-04f,
--1.798209100e-04f, -1.858852461e-04f, -1.919489606e-04f, -1.980120431e-04f, -2.040744832e-04f, -2.101362703e-04f, -2.161973941e-04f, -2.222578442e-04f, -2.283176100e-04f, -2.343766811e-04f,
--2.404350471e-04f, -2.464926976e-04f, -2.525496222e-04f, -2.586058103e-04f, -2.646612516e-04f, -2.707159356e-04f, -2.767698520e-04f, -2.828229903e-04f, -2.888753400e-04f, -2.949268908e-04f,
--3.009776322e-04f, -3.070275538e-04f, -3.130766453e-04f, -3.191248961e-04f, -3.251722959e-04f, -3.312188343e-04f, -3.372645009e-04f, -3.433092852e-04f, -3.493531769e-04f, -3.553961655e-04f,
--3.614382407e-04f, -3.674793920e-04f, -3.735196092e-04f, -3.795588817e-04f, -3.855971992e-04f, -3.916345513e-04f, -3.976709276e-04f, -4.037063177e-04f, -4.097407113e-04f, -4.157740980e-04f,
--4.218064674e-04f, -4.278378091e-04f, -4.338681127e-04f, -4.398973679e-04f, -4.459255643e-04f, -4.519526916e-04f, -4.579787394e-04f, -4.640036973e-04f, -4.700275549e-04f, -4.760503020e-04f,
--4.820719281e-04f, -4.880924230e-04f, -4.941117762e-04f, -5.001299774e-04f, -5.061470163e-04f, -5.121628825e-04f, -5.181775657e-04f, -5.241910556e-04f, -5.302033418e-04f, -5.362144139e-04f,
--5.422242618e-04f, -5.482328750e-04f, -5.542402432e-04f, -5.602463561e-04f, -5.662512034e-04f, -5.722547748e-04f, -5.782570599e-04f, -5.842580485e-04f, -5.902577302e-04f, -5.962560947e-04f,
--6.022531318e-04f, -6.082488311e-04f, -6.142431824e-04f, -6.202361753e-04f, -6.262277996e-04f, -6.322180449e-04f, -6.382069011e-04f, -6.441943578e-04f, -6.501804047e-04f, -6.561650315e-04f,
--6.621482281e-04f, -6.681299840e-04f, -6.741102891e-04f, -6.800891332e-04f, -6.860665058e-04f, -6.920423968e-04f, -6.980167959e-04f, -7.039896929e-04f, -7.099610776e-04f, -7.159309396e-04f,
--7.218992687e-04f, -7.278660548e-04f, -7.338312875e-04f, -7.397949566e-04f, -7.457570519e-04f, -7.517175633e-04f, -7.576764803e-04f, -7.636337930e-04f, -7.695894909e-04f, -7.755435639e-04f,
--7.814960019e-04f, -7.874467945e-04f, -7.933959317e-04f, -7.993434031e-04f, -8.052891986e-04f, -8.112333081e-04f, -8.171757212e-04f, -8.231164279e-04f, -8.290554180e-04f, -8.349926812e-04f,
--8.409282074e-04f, -8.468619865e-04f, -8.527940082e-04f, -8.587242624e-04f, -8.646527389e-04f, -8.705794276e-04f, -8.765043184e-04f, -8.824274010e-04f, -8.883486653e-04f, -8.942681013e-04f,
--9.001856987e-04f, -9.061014473e-04f, -9.120153372e-04f, -9.179273581e-04f, -9.238375000e-04f, -9.297457527e-04f, -9.356521060e-04f, -9.415565500e-04f, -9.474590744e-04f, -9.533596691e-04f,
--9.592583242e-04f, -9.651550294e-04f, -9.710497746e-04f, -9.769425499e-04f, -9.828333450e-04f, -9.887221500e-04f, -9.946089547e-04f, -1.000493749e-03f, -1.006376523e-03f, -1.012257267e-03f,
--1.018135969e-03f, -1.024012622e-03f, -1.029887214e-03f, -1.035759735e-03f, -1.041630175e-03f, -1.047498524e-03f, -1.053364773e-03f, -1.059228911e-03f, -1.065090928e-03f, -1.070950814e-03f,
--1.076808559e-03f, -1.082664153e-03f, -1.088517586e-03f, -1.094368848e-03f, -1.100217930e-03f, -1.106064820e-03f, -1.111909509e-03f, -1.117751987e-03f, -1.123592245e-03f, -1.129430271e-03f,
--1.135266057e-03f, -1.141099591e-03f, -1.146930865e-03f, -1.152759868e-03f, -1.158586590e-03f, -1.164411022e-03f, -1.170233153e-03f, -1.176052973e-03f, -1.181870473e-03f, -1.187685642e-03f,
--1.193498470e-03f, -1.199308949e-03f, -1.205117066e-03f, -1.210922814e-03f, -1.216726182e-03f, -1.222527159e-03f, -1.228325737e-03f, -1.234121905e-03f, -1.239915653e-03f, -1.245706971e-03f,
--1.251495850e-03f, -1.257282279e-03f, -1.263066249e-03f, -1.268847750e-03f, -1.274626772e-03f, -1.280403305e-03f, -1.286177339e-03f, -1.291948865e-03f, -1.297717872e-03f, -1.303484351e-03f,
--1.309248292e-03f, -1.315009684e-03f, -1.320768519e-03f, -1.326524786e-03f, -1.332278476e-03f, -1.338029579e-03f, -1.343778084e-03f, -1.349523983e-03f, -1.355267265e-03f, -1.361007920e-03f,
--1.366745939e-03f, -1.372481312e-03f, -1.378214029e-03f, -1.383944081e-03f, -1.389671457e-03f, -1.395396148e-03f, -1.401118144e-03f, -1.406837436e-03f, -1.412554013e-03f, -1.418267865e-03f,
--1.423978984e-03f, -1.429687360e-03f, -1.435392982e-03f, -1.441095841e-03f, -1.446795927e-03f, -1.452493230e-03f, -1.458187741e-03f, -1.463879451e-03f, -1.469568349e-03f, -1.475254425e-03f,
--1.480937670e-03f, -1.486618075e-03f, -1.492295630e-03f, -1.497970324e-03f, -1.503642149e-03f, -1.509311094e-03f, -1.514977150e-03f, -1.520640308e-03f, -1.526300557e-03f, -1.531957889e-03f,
--1.537612292e-03f, -1.543263759e-03f, -1.548912279e-03f, -1.554557842e-03f, -1.560200440e-03f, -1.565840061e-03f, -1.571476698e-03f, -1.577110339e-03f, -1.582740976e-03f, -1.588368600e-03f,
--1.593993199e-03f, -1.599614766e-03f, -1.605233289e-03f, -1.610848761e-03f, -1.616461170e-03f, -1.622070509e-03f, -1.627676766e-03f, -1.633279933e-03f, -1.638880000e-03f, -1.644476957e-03f,
--1.650070795e-03f, -1.655661505e-03f, -1.661249077e-03f, -1.666833501e-03f, -1.672414768e-03f, -1.677992869e-03f, -1.683567793e-03f, -1.689139533e-03f, -1.694708077e-03f, -1.700273417e-03f,
--1.705835542e-03f, -1.711394445e-03f, -1.716950115e-03f, -1.722502542e-03f, -1.728051718e-03f, -1.733597633e-03f, -1.739140277e-03f, -1.744679641e-03f, -1.750215717e-03f, -1.755748493e-03f,
--1.761277961e-03f, -1.766804112e-03f, -1.772326935e-03f, -1.777846423e-03f, -1.783362564e-03f, -1.788875351e-03f, -1.794384773e-03f, -1.799890822e-03f, -1.805393487e-03f, -1.810892760e-03f,
--1.816388632e-03f, -1.821881092e-03f, -1.827370132e-03f, -1.832855742e-03f, -1.838337913e-03f, -1.843816635e-03f, -1.849291900e-03f, -1.854763698e-03f, -1.860232020e-03f, -1.865696856e-03f,
--1.871158198e-03f, -1.876616035e-03f, -1.882070359e-03f, -1.887521161e-03f, -1.892968431e-03f, -1.898412159e-03f, -1.903852338e-03f, -1.909288957e-03f, -1.914722007e-03f, -1.920151480e-03f,
--1.925577365e-03f, -1.930999654e-03f, -1.936418337e-03f, -1.941833406e-03f, -1.947244851e-03f, -1.952652663e-03f, -1.958056832e-03f, -1.963457350e-03f, -1.968854208e-03f, -1.974247396e-03f,
--1.979636905e-03f, -1.985022727e-03f, -1.990404851e-03f, -1.995783269e-03f, -2.001157971e-03f, -2.006528950e-03f, -2.011896194e-03f, -2.017259697e-03f, -2.022619447e-03f, -2.027975437e-03f,
--2.033327657e-03f, -2.038676098e-03f, -2.044020751e-03f, -2.049361607e-03f, -2.054698657e-03f, -2.060031892e-03f, -2.065361303e-03f, -2.070686881e-03f, -2.076008617e-03f, -2.081326502e-03f,
--2.086640526e-03f, -2.091950681e-03f, -2.097256959e-03f, -2.102559349e-03f, -2.107857843e-03f, -2.113152432e-03f, -2.118443107e-03f, -2.123729859e-03f, -2.129012680e-03f, -2.134291559e-03f,
--2.139566489e-03f, -2.144837460e-03f, -2.150104464e-03f, -2.155367491e-03f, -2.160626533e-03f, -2.165881581e-03f, -2.171132625e-03f, -2.176379657e-03f, -2.181622669e-03f, -2.186861651e-03f,
--2.192096594e-03f, -2.197327490e-03f, -2.202554329e-03f, -2.207777104e-03f, -2.212995804e-03f, -2.218210422e-03f, -2.223420948e-03f, -2.228627374e-03f, -2.233829690e-03f, -2.239027889e-03f,
--2.244221961e-03f, -2.249411897e-03f, -2.254597689e-03f, -2.259779329e-03f, -2.264956806e-03f, -2.270130113e-03f, -2.275299241e-03f, -2.280464180e-03f, -2.285624923e-03f, -2.290781461e-03f,
--2.295933784e-03f, -2.301081885e-03f, -2.306225754e-03f, -2.311365383e-03f, -2.316500764e-03f, -2.321631886e-03f, -2.326758743e-03f, -2.331881325e-03f, -2.336999623e-03f, -2.342113630e-03f,
--2.347223335e-03f, -2.352328732e-03f, -2.357429810e-03f, -2.362526562e-03f, -2.367618978e-03f, -2.372707052e-03f, -2.377790772e-03f, -2.382870132e-03f, -2.387945123e-03f, -2.393015735e-03f,
--2.398081961e-03f, -2.403143792e-03f, -2.408201220e-03f, -2.413254235e-03f, -2.418302830e-03f, -2.423346995e-03f, -2.428386723e-03f, -2.433422005e-03f, -2.438452832e-03f, -2.443479196e-03f,
--2.448501089e-03f, -2.453518502e-03f, -2.458531426e-03f, -2.463539853e-03f, -2.468543775e-03f, -2.473543184e-03f, -2.478538070e-03f, -2.483528426e-03f, -2.488514242e-03f, -2.493495512e-03f,
--2.498472225e-03f, -2.503444375e-03f, -2.508411952e-03f, -2.513374948e-03f, -2.518333355e-03f, -2.523287165e-03f, -2.528236369e-03f, -2.533180958e-03f, -2.538120925e-03f, -2.543056262e-03f,
--2.547986959e-03f, -2.552913009e-03f, -2.557834403e-03f, -2.562751133e-03f, -2.567663191e-03f, -2.572570568e-03f, -2.577473257e-03f, -2.582371249e-03f, -2.587264536e-03f, -2.592153109e-03f,
--2.597036960e-03f, -2.601916082e-03f, -2.606790466e-03f, -2.611660103e-03f, -2.616524987e-03f, -2.621385107e-03f, -2.626240457e-03f, -2.631091028e-03f, -2.635936812e-03f, -2.640777801e-03f,
--2.645613986e-03f, -2.650445360e-03f, -2.655271915e-03f, -2.660093642e-03f, -2.664910533e-03f, -2.669722580e-03f, -2.674529776e-03f, -2.679332111e-03f, -2.684129579e-03f, -2.688922170e-03f,
--2.693709878e-03f, -2.698492693e-03f, -2.703270608e-03f, -2.708043615e-03f, -2.712811706e-03f, -2.717574873e-03f, -2.722333107e-03f, -2.727086401e-03f, -2.731834748e-03f, -2.736578138e-03f,
--2.741316564e-03f, -2.746050018e-03f, -2.750778493e-03f, -2.755501979e-03f, -2.760220470e-03f, -2.764933957e-03f, -2.769642433e-03f, -2.774345889e-03f, -2.779044318e-03f, -2.783737712e-03f,
--2.788426062e-03f, -2.793109362e-03f, -2.797787603e-03f, -2.802460778e-03f, -2.807128878e-03f, -2.811791896e-03f, -2.816449824e-03f, -2.821102654e-03f, -2.825750378e-03f, -2.830392990e-03f,
--2.835030480e-03f, -2.839662841e-03f, -2.844290065e-03f, -2.848912145e-03f, -2.853529073e-03f, -2.858140841e-03f, -2.862747442e-03f, -2.867348867e-03f, -2.871945109e-03f, -2.876536161e-03f,
--2.881122014e-03f, -2.885702662e-03f, -2.890278095e-03f, -2.894848308e-03f, -2.899413291e-03f, -2.903973038e-03f, -2.908527541e-03f, -2.913076792e-03f, -2.917620783e-03f, -2.922159508e-03f,
--2.926692957e-03f, -2.931221125e-03f, -2.935744003e-03f, -2.940261584e-03f, -2.944773860e-03f, -2.949280824e-03f, -2.953782467e-03f, -2.958278784e-03f, -2.962769765e-03f, -2.967255404e-03f,
--2.971735694e-03f, -2.976210625e-03f, -2.980680192e-03f, -2.985144387e-03f, -2.989603202e-03f, -2.994056630e-03f, -2.998504663e-03f, -3.002947295e-03f, -3.007384516e-03f, -3.011816321e-03f,
--3.016242702e-03f, -3.020663651e-03f, -3.025079162e-03f, -3.029489226e-03f, -3.033893836e-03f, -3.038292985e-03f, -3.042686666e-03f, -3.047074871e-03f, -3.051457593e-03f, -3.055834825e-03f,
--3.060206559e-03f, -3.064572789e-03f, -3.068933506e-03f, -3.073288704e-03f, -3.077638375e-03f, -3.081982513e-03f, -3.086321109e-03f, -3.090654157e-03f, -3.094981649e-03f, -3.099303579e-03f,
--3.103619939e-03f, -3.107930721e-03f, -3.112235919e-03f, -3.116535526e-03f, -3.120829534e-03f, -3.125117936e-03f, -3.129400726e-03f, -3.133677895e-03f, -3.137949437e-03f, -3.142215345e-03f,
--3.146475612e-03f, -3.150730230e-03f, -3.154979193e-03f, -3.159222493e-03f, -3.163460124e-03f, -3.167692077e-03f, -3.171918348e-03f, -3.176138927e-03f, -3.180353809e-03f, -3.184562986e-03f,
--3.188766451e-03f, -3.192964198e-03f, -3.197156219e-03f, -3.201342508e-03f, -3.205523056e-03f, -3.209697859e-03f, -3.213866908e-03f, -3.218030196e-03f, -3.222187718e-03f, -3.226339465e-03f,
--3.230485431e-03f, -3.234625609e-03f, -3.238759992e-03f, -3.242888574e-03f, -3.247011347e-03f, -3.251128305e-03f, -3.255239440e-03f, -3.259344747e-03f, -3.263444218e-03f, -3.267537846e-03f,
--3.271625625e-03f, -3.275707548e-03f, -3.279783608e-03f, -3.283853798e-03f, -3.287918112e-03f, -3.291976542e-03f, -3.296029083e-03f, -3.300075727e-03f, -3.304116468e-03f, -3.308151299e-03f,
--3.312180213e-03f, -3.316203204e-03f, -3.320220266e-03f, -3.324231390e-03f, -3.328236571e-03f, -3.332235802e-03f, -3.336229077e-03f, -3.340216389e-03f, -3.344197731e-03f, -3.348173097e-03f,
--3.352142480e-03f, -3.356105873e-03f, -3.360063270e-03f, -3.364014665e-03f, -3.367960051e-03f, -3.371899422e-03f, -3.375832770e-03f, -3.379760090e-03f, -3.383681374e-03f, -3.387596617e-03f,
--3.391505812e-03f, -3.395408953e-03f, -3.399306033e-03f, -3.403197045e-03f, -3.407081984e-03f, -3.410960842e-03f, -3.414833614e-03f, -3.418700293e-03f, -3.422560873e-03f, -3.426415346e-03f,
--3.430263708e-03f, -3.434105951e-03f, -3.437942070e-03f, -3.441772058e-03f, -3.445595908e-03f, -3.449413614e-03f, -3.453225170e-03f, -3.457030571e-03f, -3.460829808e-03f, -3.464622877e-03f,
--3.468409771e-03f, -3.472190483e-03f, -3.475965008e-03f, -3.479733339e-03f, -3.483495470e-03f, -3.487251395e-03f, -3.491001108e-03f, -3.494744602e-03f, -3.498481872e-03f, -3.502212910e-03f,
--3.505937712e-03f, -3.509656271e-03f, -3.513368580e-03f, -3.517074635e-03f, -3.520774428e-03f, -3.524467953e-03f, -3.528155205e-03f, -3.531836177e-03f, -3.535510864e-03f, -3.539179258e-03f,
--3.542841356e-03f, -3.546497149e-03f, -3.550146633e-03f, -3.553789801e-03f, -3.557426647e-03f, -3.561057165e-03f, -3.564681350e-03f, -3.568299196e-03f, -3.571910695e-03f, -3.575515844e-03f,
--3.579114635e-03f, -3.582707062e-03f, -3.586293121e-03f, -3.589872804e-03f, -3.593446106e-03f, -3.597013022e-03f, -3.600573545e-03f, -3.604127670e-03f, -3.607675390e-03f, -3.611216700e-03f,
--3.614751594e-03f, -3.618280067e-03f, -3.621802112e-03f, -3.625317724e-03f, -3.628826896e-03f, -3.632329625e-03f, -3.635825902e-03f, -3.639315723e-03f, -3.642799083e-03f, -3.646275975e-03f,
--3.649746393e-03f, -3.653210333e-03f, -3.656667788e-03f, -3.660118752e-03f, -3.663563221e-03f, -3.667001188e-03f, -3.670432648e-03f, -3.673857595e-03f, -3.677276024e-03f, -3.680687928e-03f,
--3.684093303e-03f, -3.687492143e-03f, -3.690884443e-03f, -3.694270196e-03f, -3.697649398e-03f, -3.701022042e-03f, -3.704388123e-03f, -3.707747636e-03f, -3.711100576e-03f, -3.714446936e-03f,
--3.717786712e-03f, -3.721119898e-03f, -3.724446488e-03f, -3.727766477e-03f, -3.731079860e-03f, -3.734386631e-03f, -3.737686785e-03f, -3.740980316e-03f, -3.744267219e-03f, -3.747547490e-03f,
--3.750821121e-03f, -3.754088109e-03f, -3.757348448e-03f, -3.760602132e-03f, -3.763849156e-03f, -3.767089516e-03f, -3.770323204e-03f, -3.773550218e-03f, -3.776770550e-03f, -3.779984196e-03f,
--3.783191151e-03f, -3.786391410e-03f, -3.789584966e-03f, -3.792771816e-03f, -3.795951954e-03f, -3.799125374e-03f, -3.802292072e-03f, -3.805452043e-03f, -3.808605281e-03f, -3.811751781e-03f,
--3.814891538e-03f, -3.818024547e-03f, -3.821150803e-03f, -3.824270301e-03f, -3.827383036e-03f, -3.830489002e-03f, -3.833588196e-03f, -3.836680611e-03f, -3.839766243e-03f, -3.842845086e-03f,
--3.845917136e-03f, -3.848982388e-03f, -3.852040837e-03f, -3.855092478e-03f, -3.858137305e-03f, -3.861175315e-03f, -3.864206501e-03f, -3.867230860e-03f, -3.870248386e-03f, -3.873259075e-03f,
--3.876262921e-03f, -3.879259919e-03f, -3.882250066e-03f, -3.885233356e-03f, -3.888209784e-03f, -3.891179345e-03f, -3.894142035e-03f, -3.897097849e-03f, -3.900046781e-03f, -3.902988829e-03f,
--3.905923985e-03f, -3.908852247e-03f, -3.911773609e-03f, -3.914688066e-03f, -3.917595614e-03f, -3.920496247e-03f, -3.923389963e-03f, -3.926276755e-03f, -3.929156619e-03f, -3.932029550e-03f,
--3.934895545e-03f, -3.937754597e-03f, -3.940606704e-03f, -3.943451859e-03f, -3.946290058e-03f, -3.949121298e-03f, -3.951945573e-03f, -3.954762879e-03f, -3.957573211e-03f, -3.960376564e-03f,
--3.963172936e-03f, -3.965962319e-03f, -3.968744712e-03f, -3.971520108e-03f, -3.974288503e-03f, -3.977049894e-03f, -3.979804275e-03f, -3.982551642e-03f, -3.985291991e-03f, -3.988025317e-03f,
--3.990751616e-03f, -3.993470884e-03f, -3.996183116e-03f, -3.998888308e-03f, -4.001586456e-03f, -4.004277555e-03f, -4.006961601e-03f, -4.009638589e-03f, -4.012308516e-03f, -4.014971377e-03f,
--4.017627168e-03f, -4.020275885e-03f, -4.022917523e-03f, -4.025552079e-03f, -4.028179547e-03f, -4.030799924e-03f, -4.033413206e-03f, -4.036019388e-03f, -4.038618467e-03f, -4.041210438e-03f,
--4.043795297e-03f, -4.046373040e-03f, -4.048943663e-03f, -4.051507161e-03f, -4.054063532e-03f, -4.056612769e-03f, -4.059154871e-03f, -4.061689832e-03f, -4.064217648e-03f, -4.066738316e-03f,
--4.069251832e-03f, -4.071758191e-03f, -4.074257389e-03f, -4.076749423e-03f, -4.079234289e-03f, -4.081711983e-03f, -4.084182500e-03f, -4.086645837e-03f, -4.089101990e-03f, -4.091550954e-03f,
--4.093992728e-03f, -4.096427305e-03f, -4.098854683e-03f, -4.101274857e-03f, -4.103687825e-03f, -4.106093581e-03f, -4.108492122e-03f, -4.110883445e-03f, -4.113267546e-03f, -4.115644420e-03f,
--4.118014064e-03f, -4.120376475e-03f, -4.122731649e-03f, -4.125079581e-03f, -4.127420269e-03f, -4.129753708e-03f, -4.132079895e-03f, -4.134398826e-03f, -4.136710498e-03f, -4.139014907e-03f,
--4.141312049e-03f, -4.143601921e-03f, -4.145884518e-03f, -4.148159839e-03f, -4.150427878e-03f, -4.152688633e-03f, -4.154942100e-03f, -4.157188275e-03f, -4.159427154e-03f, -4.161658735e-03f,
--4.163883014e-03f, -4.166099987e-03f, -4.168309651e-03f, -4.170512003e-03f, -4.172707038e-03f, -4.174894754e-03f, -4.177075147e-03f, -4.179248213e-03f, -4.181413950e-03f, -4.183572354e-03f,
--4.185723421e-03f, -4.187867149e-03f, -4.190003533e-03f, -4.192132571e-03f, -4.194254259e-03f, -4.196368594e-03f, -4.198475573e-03f, -4.200575192e-03f, -4.202667448e-03f, -4.204752338e-03f,
--4.206829859e-03f, -4.208900007e-03f, -4.210962779e-03f, -4.213018172e-03f, -4.215066183e-03f, -4.217106808e-03f, -4.219140045e-03f, -4.221165890e-03f, -4.223184341e-03f, -4.225195393e-03f,
--4.227199044e-03f, -4.229195292e-03f, -4.231184132e-03f, -4.233165561e-03f, -4.235139577e-03f, -4.237106177e-03f, -4.239065357e-03f, -4.241017115e-03f, -4.242961448e-03f, -4.244898352e-03f,
--4.246827824e-03f, -4.248749862e-03f, -4.250664463e-03f, -4.252571624e-03f, -4.254471341e-03f, -4.256363612e-03f, -4.258248434e-03f, -4.260125804e-03f, -4.261995719e-03f, -4.263858177e-03f,
--4.265713174e-03f, -4.267560708e-03f, -4.269400775e-03f, -4.271233374e-03f, -4.273058501e-03f, -4.274876153e-03f, -4.276686328e-03f, -4.278489023e-03f, -4.280284235e-03f, -4.282071961e-03f,
--4.283852199e-03f, -4.285624947e-03f, -4.287390200e-03f, -4.289147957e-03f, -4.290898215e-03f, -4.292640972e-03f, -4.294376224e-03f, -4.296103969e-03f, -4.297824205e-03f, -4.299536928e-03f,
--4.301242137e-03f, -4.302939828e-03f, -4.304630000e-03f, -4.306312649e-03f, -4.307987773e-03f, -4.309655369e-03f, -4.311315436e-03f, -4.312967970e-03f, -4.314612969e-03f, -4.316250431e-03f,
--4.317880353e-03f, -4.319502732e-03f, -4.321117567e-03f, -4.322724855e-03f, -4.324324592e-03f, -4.325916778e-03f, -4.327501410e-03f, -4.329078485e-03f, -4.330648001e-03f, -4.332209955e-03f,
--4.333764346e-03f, -4.335311170e-03f, -4.336850427e-03f, -4.338382112e-03f, -4.339906225e-03f, -4.341422763e-03f, -4.342931723e-03f, -4.344433104e-03f, -4.345926902e-03f, -4.347413117e-03f,
--4.348891745e-03f, -4.350362785e-03f, -4.351826235e-03f, -4.353282091e-03f, -4.354730353e-03f, -4.356171018e-03f, -4.357604084e-03f, -4.359029548e-03f, -4.360447409e-03f, -4.361857665e-03f,
--4.363260313e-03f, -4.364655352e-03f, -4.366042779e-03f, -4.367422593e-03f, -4.368794791e-03f, -4.370159372e-03f, -4.371516333e-03f, -4.372865672e-03f, -4.374207388e-03f, -4.375541479e-03f,
--4.376867943e-03f, -4.378186777e-03f, -4.379497980e-03f, -4.380801550e-03f, -4.382097485e-03f, -4.383385784e-03f, -4.384666444e-03f, -4.385939463e-03f, -4.387204840e-03f, -4.388462573e-03f,
--4.389712661e-03f, -4.390955100e-03f, -4.392189890e-03f, -4.393417029e-03f, -4.394636516e-03f, -4.395848347e-03f, -4.397052522e-03f, -4.398249039e-03f, -4.399437897e-03f, -4.400619093e-03f,
--4.401792626e-03f, -4.402958494e-03f, -4.404116696e-03f, -4.405267230e-03f, -4.406410094e-03f, -4.407545287e-03f, -4.408672807e-03f, -4.409792654e-03f, -4.410904824e-03f, -4.412009316e-03f,
--4.413106130e-03f, -4.414195264e-03f, -4.415276715e-03f, -4.416350483e-03f, -4.417416566e-03f, -4.418474963e-03f, -4.419525671e-03f, -4.420568691e-03f, -4.421604020e-03f, -4.422631657e-03f,
--4.423651600e-03f, -4.424663848e-03f, -4.425668400e-03f, -4.426665255e-03f, -4.427654411e-03f, -4.428635866e-03f, -4.429609620e-03f, -4.430575671e-03f, -4.431534017e-03f, -4.432484659e-03f,
--4.433427593e-03f, -4.434362820e-03f, -4.435290337e-03f, -4.436210144e-03f, -4.437122240e-03f, -4.438026622e-03f, -4.438923291e-03f, -4.439812245e-03f, -4.440693482e-03f, -4.441567002e-03f,
--4.442432803e-03f, -4.443290884e-03f, -4.444141245e-03f, -4.444983884e-03f, -4.445818800e-03f, -4.446645992e-03f, -4.447465459e-03f, -4.448277200e-03f, -4.449081213e-03f, -4.449877499e-03f,
--4.450666055e-03f, -4.451446882e-03f, -4.452219977e-03f, -4.452985340e-03f, -4.453742971e-03f, -4.454492867e-03f, -4.455235029e-03f, -4.455969455e-03f, -4.456696145e-03f, -4.457415097e-03f,
--4.458126311e-03f, -4.458829786e-03f, -4.459525520e-03f, -4.460213514e-03f, -4.460893767e-03f, -4.461566277e-03f, -4.462231043e-03f, -4.462888066e-03f, -4.463537344e-03f, -4.464178877e-03f,
--4.464812664e-03f, -4.465438704e-03f, -4.466056996e-03f, -4.466667540e-03f, -4.467270335e-03f, -4.467865381e-03f, -4.468452676e-03f, -4.469032221e-03f, -4.469604014e-03f, -4.470168055e-03f,
--4.470724343e-03f, -4.471272878e-03f, -4.471813660e-03f, -4.472346687e-03f, -4.472871959e-03f, -4.473389476e-03f, -4.473899237e-03f, -4.474401241e-03f, -4.474895489e-03f, -4.475381979e-03f,
--4.475860711e-03f, -4.476331685e-03f, -4.476794901e-03f, -4.477250357e-03f, -4.477698054e-03f, -4.478137991e-03f, -4.478570168e-03f, -4.478994584e-03f, -4.479411239e-03f, -4.479820133e-03f,
--4.480221265e-03f, -4.480614636e-03f, -4.481000244e-03f, -4.481378089e-03f, -4.481748172e-03f, -4.482110492e-03f, -4.482465048e-03f, -4.482811841e-03f, -4.483150871e-03f, -4.483482136e-03f,
--4.483805637e-03f, -4.484121374e-03f, -4.484429347e-03f, -4.484729554e-03f, -4.485021998e-03f, -4.485306676e-03f, -4.485583589e-03f, -4.485852738e-03f, -4.486114121e-03f, -4.486367739e-03f,
--4.486613592e-03f, -4.486851679e-03f, -4.487082002e-03f, -4.487304558e-03f, -4.487519350e-03f, -4.487726376e-03f, -4.487925637e-03f, -4.488117133e-03f, -4.488300864e-03f, -4.488476829e-03f,
--4.488645030e-03f, -4.488805465e-03f, -4.488958136e-03f, -4.489103042e-03f, -4.489240183e-03f, -4.489369560e-03f, -4.489491173e-03f, -4.489605021e-03f, -4.489711106e-03f, -4.489809427e-03f,
--4.489899985e-03f, -4.489982779e-03f, -4.490057810e-03f, -4.490125079e-03f, -4.490184584e-03f, -4.490236328e-03f, -4.490280310e-03f, -4.490316530e-03f, -4.490344989e-03f, -4.490365688e-03f,
--4.490378625e-03f, -4.490383802e-03f, -4.490381220e-03f, -4.490370877e-03f, -4.490352776e-03f, -4.490326917e-03f, -4.490293298e-03f, -4.490251923e-03f, -4.490202790e-03f, -4.490145900e-03f,
--4.490081253e-03f, -4.490008851e-03f, -4.489928694e-03f, -4.489840781e-03f, -4.489745114e-03f, -4.489641694e-03f, -4.489530520e-03f, -4.489411594e-03f, -4.489284916e-03f, -4.489150486e-03f,
--4.489008306e-03f, -4.488858375e-03f, -4.488700695e-03f, -4.488535266e-03f, -4.488362089e-03f, -4.488181164e-03f, -4.487992492e-03f, -4.487796075e-03f, -4.487591912e-03f, -4.487380004e-03f,
--4.487160352e-03f, -4.486932958e-03f, -4.486697821e-03f, -4.486454942e-03f, -4.486204323e-03f, -4.485945963e-03f, -4.485679865e-03f, -4.485406028e-03f, -4.485124454e-03f, -4.484835143e-03f,
--4.484538097e-03f, -4.484233316e-03f, -4.483920801e-03f, -4.483600553e-03f, -4.483272573e-03f, -4.482936862e-03f, -4.482593421e-03f, -4.482242251e-03f, -4.481883353e-03f, -4.481516728e-03f,
--4.481142377e-03f, -4.480760300e-03f, -4.480370500e-03f, -4.479972976e-03f, -4.479567731e-03f, -4.479154765e-03f, -4.478734079e-03f, -4.478305675e-03f, -4.477869553e-03f, -4.477425715e-03f,
--4.476974161e-03f, -4.476514894e-03f, -4.476047914e-03f, -4.475573222e-03f, -4.475090820e-03f, -4.474600708e-03f, -4.474102888e-03f, -4.473597362e-03f, -4.473084130e-03f, -4.472563194e-03f,
--4.472034555e-03f, -4.471498214e-03f, -4.470954173e-03f, -4.470402433e-03f, -4.469842995e-03f, -4.469275861e-03f, -4.468701032e-03f, -4.468118509e-03f, -4.467528294e-03f, -4.466930389e-03f,
--4.466324794e-03f, -4.465711510e-03f, -4.465090541e-03f, -4.464461886e-03f, -4.463825548e-03f, -4.463181527e-03f, -4.462529826e-03f, -4.461870446e-03f, -4.461203388e-03f, -4.460528654e-03f,
--4.459846245e-03f, -4.459156164e-03f, -4.458458411e-03f, -4.457752988e-03f, -4.457039897e-03f, -4.456319140e-03f, -4.455590717e-03f, -4.454854632e-03f, -4.454110884e-03f, -4.453359477e-03f,
--4.452600411e-03f, -4.451833689e-03f, -4.451059311e-03f, -4.450277281e-03f, -4.449487598e-03f, -4.448690267e-03f, -4.447885287e-03f, -4.447072661e-03f, -4.446252390e-03f, -4.445424477e-03f,
--4.444588923e-03f, -4.443745730e-03f, -4.442894900e-03f, -4.442036435e-03f, -4.441170336e-03f, -4.440296605e-03f, -4.439415245e-03f, -4.438526257e-03f, -4.437629643e-03f, -4.436725406e-03f,
--4.435813546e-03f, -4.434894066e-03f, -4.433966968e-03f, -4.433032254e-03f, -4.432089926e-03f, -4.431139986e-03f, -4.430182435e-03f, -4.429217277e-03f, -4.428244513e-03f, -4.427264144e-03f,
--4.426276174e-03f, -4.425280604e-03f, -4.424277436e-03f, -4.423266673e-03f, -4.422248316e-03f, -4.421222368e-03f, -4.420188831e-03f, -4.419147707e-03f, -4.418098998e-03f, -4.417042706e-03f,
--4.415978834e-03f, -4.414907383e-03f, -4.413828357e-03f, -4.412741757e-03f, -4.411647585e-03f, -4.410545844e-03f, -4.409436536e-03f, -4.408319664e-03f, -4.407195229e-03f, -4.406063234e-03f,
--4.404923681e-03f, -4.403776573e-03f, -4.402621912e-03f, -4.401459700e-03f, -4.400289940e-03f, -4.399112634e-03f, -4.397927785e-03f, -4.396735394e-03f, -4.395535465e-03f, -4.394328000e-03f,
--4.393113001e-03f, -4.391890471e-03f, -4.390660413e-03f, -4.389422828e-03f, -4.388177719e-03f, -4.386925089e-03f, -4.385664941e-03f, -4.384397276e-03f, -4.383122098e-03f, -4.381839408e-03f,
--4.380549211e-03f, -4.379251508e-03f, -4.377946301e-03f, -4.376633594e-03f, -4.375313389e-03f, -4.373985689e-03f, -4.372650496e-03f, -4.371307814e-03f, -4.369957644e-03f, -4.368599990e-03f,
--4.367234854e-03f, -4.365862238e-03f, -4.364482147e-03f, -4.363094582e-03f, -4.361699546e-03f, -4.360297043e-03f, -4.358887074e-03f, -4.357469642e-03f, -4.356044751e-03f, -4.354612404e-03f,
--4.353172602e-03f, -4.351725350e-03f, -4.350270649e-03f, -4.348808503e-03f, -4.347338914e-03f, -4.345861886e-03f, -4.344377422e-03f, -4.342885524e-03f, -4.341386195e-03f, -4.339879438e-03f,
--4.338365257e-03f, -4.336843654e-03f, -4.335314632e-03f, -4.333778195e-03f, -4.332234345e-03f, -4.330683085e-03f, -4.329124418e-03f, -4.327558348e-03f, -4.325984877e-03f, -4.324404009e-03f,
--4.322815747e-03f, -4.321220093e-03f, -4.319617051e-03f, -4.318006625e-03f, -4.316388816e-03f, -4.314763629e-03f, -4.313131067e-03f, -4.311491132e-03f, -4.309843828e-03f, -4.308189158e-03f,
--4.306527126e-03f, -4.304857734e-03f, -4.303180986e-03f, -4.301496885e-03f, -4.299805435e-03f, -4.298106638e-03f, -4.296400498e-03f, -4.294687018e-03f, -4.292966202e-03f, -4.291238053e-03f,
--4.289502575e-03f, -4.287759770e-03f, -4.286009642e-03f, -4.284252194e-03f, -4.282487430e-03f, -4.280715354e-03f, -4.278935968e-03f, -4.277149276e-03f, -4.275355282e-03f, -4.273553989e-03f,
--4.271745401e-03f, -4.269929520e-03f, -4.268106351e-03f, -4.266275896e-03f, -4.264438161e-03f, -4.262593147e-03f, -4.260740859e-03f, -4.258881300e-03f, -4.257014474e-03f, -4.255140384e-03f,
--4.253259034e-03f, -4.251370428e-03f, -4.249474569e-03f, -4.247571461e-03f, -4.245661107e-03f, -4.243743511e-03f, -4.241818677e-03f, -4.239886608e-03f, -4.237947309e-03f, -4.236000782e-03f,
--4.234047032e-03f, -4.232086063e-03f, -4.230117877e-03f, -4.228142479e-03f, -4.226159873e-03f, -4.224170063e-03f, -4.222173051e-03f, -4.220168843e-03f, -4.218157441e-03f, -4.216138850e-03f,
--4.214113073e-03f, -4.212080115e-03f, -4.210039979e-03f, -4.207992670e-03f, -4.205938190e-03f, -4.203876544e-03f, -4.201807736e-03f, -4.199731769e-03f, -4.197648649e-03f, -4.195558378e-03f,
--4.193460960e-03f, -4.191356400e-03f, -4.189244702e-03f, -4.187125870e-03f, -4.184999907e-03f, -4.182866817e-03f, -4.180726606e-03f, -4.178579276e-03f, -4.176424832e-03f, -4.174263277e-03f,
--4.172094617e-03f, -4.169918855e-03f, -4.167735995e-03f, -4.165546041e-03f, -4.163348997e-03f, -4.161144869e-03f, -4.158933659e-03f, -4.156715372e-03f, -4.154490012e-03f, -4.152257583e-03f,
--4.150018090e-03f, -4.147771536e-03f, -4.145517927e-03f, -4.143257265e-03f, -4.140989556e-03f, -4.138714804e-03f, -4.136433013e-03f, -4.134144187e-03f, -4.131848331e-03f, -4.129545449e-03f,
--4.127235545e-03f, -4.124918623e-03f, -4.122594689e-03f, -4.120263746e-03f, -4.117925798e-03f, -4.115580851e-03f, -4.113228908e-03f, -4.110869974e-03f, -4.108504053e-03f, -4.106131150e-03f,
--4.103751269e-03f, -4.101364415e-03f, -4.098970592e-03f, -4.096569805e-03f, -4.094162057e-03f, -4.091747355e-03f, -4.089325701e-03f, -4.086897101e-03f, -4.084461559e-03f, -4.082019080e-03f,
--4.079569668e-03f, -4.077113329e-03f, -4.074650065e-03f, -4.072179883e-03f, -4.069702786e-03f, -4.067218780e-03f, -4.064727869e-03f, -4.062230057e-03f, -4.059725350e-03f, -4.057213751e-03f,
--4.054695266e-03f, -4.052169900e-03f, -4.049637656e-03f, -4.047098540e-03f, -4.044552557e-03f, -4.041999711e-03f, -4.039440006e-03f, -4.036873449e-03f, -4.034300043e-03f, -4.031719793e-03f,
--4.029132704e-03f, -4.026538782e-03f, -4.023938030e-03f, -4.021330453e-03f, -4.018716057e-03f, -4.016094846e-03f, -4.013466825e-03f, -4.010831999e-03f, -4.008190373e-03f, -4.005541952e-03f,
--4.002886741e-03f, -4.000224744e-03f, -3.997555967e-03f, -3.994880414e-03f, -3.992198091e-03f, -3.989509002e-03f, -3.986813152e-03f, -3.984110547e-03f, -3.981401192e-03f, -3.978685090e-03f,
--3.975962249e-03f, -3.973232672e-03f, -3.970496364e-03f, -3.967753331e-03f, -3.965003578e-03f, -3.962247109e-03f, -3.959483931e-03f, -3.956714047e-03f, -3.953937464e-03f, -3.951154185e-03f,
--3.948364217e-03f, -3.945567565e-03f, -3.942764233e-03f, -3.939954228e-03f, -3.937137553e-03f, -3.934314214e-03f, -3.931484218e-03f, -3.928647567e-03f, -3.925804269e-03f, -3.922954328e-03f,
--3.920097749e-03f, -3.917234538e-03f, -3.914364700e-03f, -3.911488240e-03f, -3.908605164e-03f, -3.905715476e-03f, -3.902819183e-03f, -3.899916289e-03f, -3.897006800e-03f, -3.894090722e-03f,
--3.891168059e-03f, -3.888238817e-03f, -3.885303001e-03f, -3.882360617e-03f, -3.879411670e-03f, -3.876456166e-03f, -3.873494110e-03f, -3.870525507e-03f, -3.867550363e-03f, -3.864568684e-03f,
--3.861580474e-03f, -3.858585740e-03f, -3.855584487e-03f, -3.852576720e-03f, -3.849562445e-03f, -3.846541667e-03f, -3.843514392e-03f, -3.840480626e-03f, -3.837440374e-03f, -3.834393641e-03f,
--3.831340434e-03f, -3.828280758e-03f, -3.825214618e-03f, -3.822142020e-03f, -3.819062969e-03f, -3.815977473e-03f, -3.812885535e-03f, -3.809787161e-03f, -3.806682358e-03f, -3.803571132e-03f,
--3.800453486e-03f, -3.797329429e-03f, -3.794198964e-03f, -3.791062098e-03f, -3.787918837e-03f, -3.784769186e-03f, -3.781613151e-03f, -3.778450738e-03f, -3.775281953e-03f, -3.772106801e-03f,
--3.768925289e-03f, -3.765737421e-03f, -3.762543205e-03f, -3.759342645e-03f, -3.756135748e-03f, -3.752922519e-03f, -3.749702964e-03f, -3.746477090e-03f, -3.743244902e-03f, -3.740006405e-03f,
--3.736761607e-03f, -3.733510512e-03f, -3.730253127e-03f, -3.726989458e-03f, -3.723719510e-03f, -3.720443290e-03f, -3.717160804e-03f, -3.713872057e-03f, -3.710577055e-03f, -3.707275805e-03f,
--3.703968313e-03f, -3.700654584e-03f, -3.697334625e-03f, -3.694008442e-03f, -3.690676040e-03f, -3.687337426e-03f, -3.683992606e-03f, -3.680641585e-03f, -3.677284371e-03f, -3.673920969e-03f,
--3.670551385e-03f, -3.667175626e-03f, -3.663793697e-03f, -3.660405605e-03f, -3.657011356e-03f, -3.653610956e-03f, -3.650204411e-03f, -3.646791727e-03f, -3.643372911e-03f, -3.639947969e-03f,
--3.636516907e-03f, -3.633079731e-03f, -3.629636448e-03f, -3.626187064e-03f, -3.622731584e-03f, -3.619270016e-03f, -3.615802365e-03f, -3.612328639e-03f, -3.608848842e-03f, -3.605362982e-03f,
--3.601871065e-03f, -3.598373097e-03f, -3.594869085e-03f, -3.591359034e-03f, -3.587842952e-03f, -3.584320844e-03f, -3.580792717e-03f, -3.577258578e-03f, -3.573718433e-03f, -3.570172287e-03f,
--3.566620149e-03f, -3.563062023e-03f, -3.559497917e-03f, -3.555927837e-03f, -3.552351789e-03f, -3.548769781e-03f, -3.545181817e-03f, -3.541587906e-03f, -3.537988053e-03f, -3.534382265e-03f,
--3.530770548e-03f, -3.527152910e-03f, -3.523529356e-03f, -3.519899893e-03f, -3.516264527e-03f, -3.512623266e-03f, -3.508976116e-03f, -3.505323083e-03f, -3.501664174e-03f, -3.497999396e-03f,
--3.494328755e-03f, -3.490652258e-03f, -3.486969912e-03f, -3.483281722e-03f, -3.479587697e-03f, -3.475887842e-03f, -3.472182164e-03f, -3.468470670e-03f, -3.464753367e-03f, -3.461030261e-03f,
--3.457301359e-03f, -3.453566668e-03f, -3.449826195e-03f, -3.446079945e-03f, -3.442327927e-03f, -3.438570147e-03f, -3.434806611e-03f, -3.431037326e-03f, -3.427262300e-03f, -3.423481538e-03f,
--3.419695049e-03f, -3.415902838e-03f, -3.412104912e-03f, -3.408301279e-03f, -3.404491945e-03f, -3.400676917e-03f, -3.396856202e-03f, -3.393029807e-03f, -3.389197738e-03f, -3.385360003e-03f,
--3.381516608e-03f, -3.377667561e-03f, -3.373812868e-03f, -3.369952537e-03f, -3.366086574e-03f, -3.362214986e-03f, -3.358337780e-03f, -3.354454963e-03f, -3.350566543e-03f, -3.346672525e-03f,
--3.342772918e-03f, -3.338867728e-03f, -3.334956962e-03f, -3.331040628e-03f, -3.327118731e-03f, -3.323191280e-03f, -3.319258282e-03f, -3.315319742e-03f, -3.311375670e-03f, -3.307426071e-03f,
--3.303470953e-03f, -3.299510322e-03f, -3.295544187e-03f, -3.291572553e-03f, -3.287595429e-03f, -3.283612822e-03f, -3.279624737e-03f, -3.275631184e-03f, -3.271632168e-03f, -3.267627698e-03f,
--3.263617779e-03f, -3.259602420e-03f, -3.255581628e-03f, -3.251555410e-03f, -3.247523772e-03f, -3.243486723e-03f, -3.239444270e-03f, -3.235396419e-03f, -3.231343179e-03f, -3.227284556e-03f,
--3.223220557e-03f, -3.219151191e-03f, -3.215076463e-03f, -3.210996383e-03f, -3.206910956e-03f, -3.202820190e-03f, -3.198724093e-03f, -3.194622672e-03f, -3.190515933e-03f, -3.186403886e-03f,
--3.182286536e-03f, -3.178163892e-03f, -3.174035961e-03f, -3.169902749e-03f, -3.165764265e-03f, -3.161620516e-03f, -3.157471509e-03f, -3.153317253e-03f, -3.149157753e-03f, -3.144993018e-03f,
--3.140823055e-03f, -3.136647872e-03f, -3.132467476e-03f, -3.128281874e-03f, -3.124091074e-03f, -3.119895084e-03f, -3.115693911e-03f, -3.111487563e-03f, -3.107276047e-03f, -3.103059370e-03f,
--3.098837540e-03f, -3.094610565e-03f, -3.090378453e-03f, -3.086141210e-03f, -3.081898845e-03f, -3.077651365e-03f, -3.073398777e-03f, -3.069141090e-03f, -3.064878310e-03f, -3.060610446e-03f,
--3.056337505e-03f, -3.052059495e-03f, -3.047776423e-03f, -3.043488297e-03f, -3.039195124e-03f, -3.034896913e-03f, -3.030593671e-03f, -3.026285406e-03f, -3.021972125e-03f, -3.017653836e-03f,
--3.013330547e-03f, -3.009002266e-03f, -3.004669000e-03f, -3.000330757e-03f, -2.995987544e-03f, -2.991639370e-03f, -2.987286242e-03f, -2.982928169e-03f, -2.978565157e-03f, -2.974197215e-03f,
--2.969824350e-03f, -2.965446570e-03f, -2.961063883e-03f, -2.956676297e-03f, -2.952283820e-03f, -2.947886459e-03f, -2.943484222e-03f, -2.939077118e-03f, -2.934665154e-03f, -2.930248337e-03f,
--2.925826676e-03f, -2.921400179e-03f, -2.916968854e-03f, -2.912532708e-03f, -2.908091749e-03f, -2.903645985e-03f, -2.899195425e-03f, -2.894740075e-03f, -2.890279945e-03f, -2.885815042e-03f,
--2.881345373e-03f, -2.876870948e-03f, -2.872391773e-03f, -2.867907857e-03f, -2.863419208e-03f, -2.858925834e-03f, -2.854427743e-03f, -2.849924942e-03f, -2.845417440e-03f, -2.840905246e-03f,
--2.836388366e-03f, -2.831866809e-03f, -2.827340582e-03f, -2.822809695e-03f, -2.818274155e-03f, -2.813733971e-03f, -2.809189149e-03f, -2.804639699e-03f, -2.800085628e-03f, -2.795526945e-03f,
--2.790963657e-03f, -2.786395773e-03f, -2.781823301e-03f, -2.777246248e-03f, -2.772664624e-03f, -2.768078437e-03f, -2.763487693e-03f, -2.758892402e-03f, -2.754292572e-03f, -2.749688211e-03f,
--2.745079327e-03f, -2.740465928e-03f, -2.735848023e-03f, -2.731225620e-03f, -2.726598726e-03f, -2.721967350e-03f, -2.717331501e-03f, -2.712691187e-03f, -2.708046415e-03f, -2.703397194e-03f,
--2.698743533e-03f, -2.694085439e-03f, -2.689422921e-03f, -2.684755987e-03f, -2.680084646e-03f, -2.675408905e-03f, -2.670728773e-03f, -2.666044259e-03f, -2.661355370e-03f, -2.656662116e-03f,
--2.651964503e-03f, -2.647262541e-03f, -2.642556238e-03f, -2.637845603e-03f, -2.633130643e-03f, -2.628411367e-03f, -2.623687783e-03f, -2.618959900e-03f, -2.614227727e-03f, -2.609491271e-03f,
--2.604750541e-03f, -2.600005545e-03f, -2.595256292e-03f, -2.590502790e-03f, -2.585745048e-03f, -2.580983073e-03f, -2.576216876e-03f, -2.571446463e-03f, -2.566671843e-03f, -2.561893026e-03f,
--2.557110018e-03f, -2.552322830e-03f, -2.547531468e-03f, -2.542735943e-03f, -2.537936261e-03f, -2.533132433e-03f, -2.528324466e-03f, -2.523512368e-03f, -2.518696149e-03f, -2.513875816e-03f,
--2.509051379e-03f, -2.504222846e-03f, -2.499390225e-03f, -2.494553525e-03f, -2.489712755e-03f, -2.484867923e-03f, -2.480019037e-03f, -2.475166107e-03f, -2.470309141e-03f, -2.465448147e-03f,
--2.460583134e-03f, -2.455714111e-03f, -2.450841086e-03f, -2.445964068e-03f, -2.441083065e-03f, -2.436198087e-03f, -2.431309141e-03f, -2.426416237e-03f, -2.421519383e-03f, -2.416618588e-03f,
--2.411713860e-03f, -2.406805208e-03f, -2.401892641e-03f, -2.396976168e-03f, -2.392055796e-03f, -2.387131536e-03f, -2.382203394e-03f, -2.377271382e-03f, -2.372335506e-03f, -2.367395776e-03f,
--2.362452200e-03f, -2.357504787e-03f, -2.352553547e-03f, -2.347598486e-03f, -2.342639616e-03f, -2.337676943e-03f, -2.332710478e-03f, -2.327740228e-03f, -2.322766202e-03f, -2.317788410e-03f,
--2.312806860e-03f, -2.307821560e-03f, -2.302832520e-03f, -2.297839749e-03f, -2.292843255e-03f, -2.287843047e-03f, -2.282839134e-03f, -2.277831524e-03f, -2.272820227e-03f, -2.267805252e-03f,
--2.262786607e-03f, -2.257764301e-03f, -2.252738343e-03f, -2.247708741e-03f, -2.242675506e-03f, -2.237638645e-03f, -2.232598167e-03f, -2.227554082e-03f, -2.222506398e-03f, -2.217455125e-03f,
--2.212400270e-03f, -2.207341843e-03f, -2.202279854e-03f, -2.197214310e-03f, -2.192145221e-03f, -2.187072595e-03f, -2.181996442e-03f, -2.176916771e-03f, -2.171833590e-03f, -2.166746909e-03f,
--2.161656736e-03f, -2.156563081e-03f, -2.151465952e-03f, -2.146365359e-03f, -2.141261310e-03f, -2.136153814e-03f, -2.131042880e-03f, -2.125928518e-03f, -2.120810737e-03f, -2.115689544e-03f,
--2.110564950e-03f, -2.105436964e-03f, -2.100305594e-03f, -2.095170850e-03f, -2.090032740e-03f, -2.084891273e-03f, -2.079746460e-03f, -2.074598308e-03f, -2.069446826e-03f, -2.064292025e-03f,
--2.059133912e-03f, -2.053972498e-03f, -2.048807790e-03f, -2.043639799e-03f, -2.038468533e-03f, -2.033294001e-03f, -2.028116213e-03f, -2.022935177e-03f, -2.017750903e-03f, -2.012563400e-03f,
--2.007372677e-03f, -2.002178742e-03f, -1.996981606e-03f, -1.991781278e-03f, -1.986577765e-03f, -1.981371079e-03f, -1.976161227e-03f, -1.970948219e-03f, -1.965732064e-03f, -1.960512771e-03f,
--1.955290350e-03f, -1.950064810e-03f, -1.944836159e-03f, -1.939604407e-03f, -1.934369564e-03f, -1.929131638e-03f, -1.923890638e-03f, -1.918646574e-03f, -1.913399456e-03f, -1.908149291e-03f,
--1.902896091e-03f, -1.897639862e-03f, -1.892380616e-03f, -1.887118361e-03f, -1.881853106e-03f, -1.876584861e-03f, -1.871313635e-03f, -1.866039437e-03f, -1.860762277e-03f, -1.855482163e-03f,
--1.850199105e-03f, -1.844913113e-03f, -1.839624195e-03f, -1.834332361e-03f, -1.829037620e-03f, -1.823739981e-03f, -1.818439454e-03f, -1.813136048e-03f, -1.807829773e-03f, -1.802520637e-03f,
--1.797208650e-03f, -1.791893821e-03f, -1.786576160e-03f, -1.781255675e-03f, -1.775932377e-03f, -1.770606275e-03f, -1.765277377e-03f, -1.759945694e-03f, -1.754611235e-03f, -1.749274008e-03f,
--1.743934024e-03f, -1.738591292e-03f, -1.733245820e-03f, -1.727897619e-03f, -1.722546698e-03f, -1.717193066e-03f, -1.711836733e-03f, -1.706477708e-03f, -1.701116000e-03f, -1.695751619e-03f,
--1.690384574e-03f, -1.685014875e-03f, -1.679642531e-03f, -1.674267551e-03f, -1.668889945e-03f, -1.663509723e-03f, -1.658126893e-03f, -1.652741465e-03f, -1.647353449e-03f, -1.641962854e-03f,
--1.636569689e-03f, -1.631173964e-03f, -1.625775689e-03f, -1.620374872e-03f, -1.614971524e-03f, -1.609565653e-03f, -1.604157270e-03f, -1.598746383e-03f, -1.593333003e-03f, -1.587917138e-03f,
--1.582498798e-03f, -1.577077993e-03f, -1.571654732e-03f, -1.566229024e-03f, -1.560800879e-03f, -1.555370308e-03f, -1.549937318e-03f, -1.544501920e-03f, -1.539064122e-03f, -1.533623936e-03f,
--1.528181370e-03f, -1.522736433e-03f, -1.517289136e-03f, -1.511839487e-03f, -1.506387496e-03f, -1.500933174e-03f, -1.495476528e-03f, -1.490017570e-03f, -1.484556308e-03f, -1.479092752e-03f,
--1.473626912e-03f, -1.468158796e-03f, -1.462688416e-03f, -1.457215779e-03f, -1.451740896e-03f, -1.446263777e-03f, -1.440784431e-03f, -1.435302867e-03f, -1.429819096e-03f, -1.424333126e-03f,
--1.418844967e-03f, -1.413354629e-03f, -1.407862122e-03f, -1.402367455e-03f, -1.396870637e-03f, -1.391371679e-03f, -1.385870589e-03f, -1.380367379e-03f, -1.374862056e-03f, -1.369354631e-03f,
--1.363845113e-03f, -1.358333513e-03f, -1.352819839e-03f, -1.347304101e-03f, -1.341786309e-03f, -1.336266473e-03f, -1.330744602e-03f, -1.325220706e-03f, -1.319694794e-03f, -1.314166876e-03f,
--1.308636962e-03f, -1.303105061e-03f, -1.297571184e-03f, -1.292035339e-03f, -1.286497537e-03f, -1.280957786e-03f, -1.275416098e-03f, -1.269872481e-03f, -1.264326945e-03f, -1.258779499e-03f,
--1.253230154e-03f, -1.247678920e-03f, -1.242125805e-03f, -1.236570819e-03f, -1.231013973e-03f, -1.225455276e-03f, -1.219894737e-03f, -1.214332367e-03f, -1.208768174e-03f, -1.203202170e-03f,
--1.197634362e-03f, -1.192064762e-03f, -1.186493379e-03f, -1.180920222e-03f, -1.175345301e-03f, -1.169768627e-03f, -1.164190208e-03f, -1.158610055e-03f, -1.153028177e-03f, -1.147444583e-03f,
--1.141859285e-03f, -1.136272291e-03f, -1.130683610e-03f, -1.125093254e-03f, -1.119501232e-03f, -1.113907552e-03f, -1.108312226e-03f, -1.102715263e-03f, -1.097116672e-03f, -1.091516464e-03f,
--1.085914648e-03f, -1.080311233e-03f, -1.074706231e-03f, -1.069099649e-03f, -1.063491499e-03f, -1.057881790e-03f, -1.052270532e-03f, -1.046657734e-03f, -1.041043406e-03f, -1.035427558e-03f,
--1.029810201e-03f, -1.024191342e-03f, -1.018570994e-03f, -1.012949164e-03f, -1.007325863e-03f, -1.001701102e-03f, -9.960748883e-04f, -9.904472333e-04f, -9.848181465e-04f, -9.791876376e-04f,
--9.735557165e-04f, -9.679223930e-04f, -9.622876768e-04f, -9.566515777e-04f, -9.510141056e-04f, -9.453752704e-04f, -9.397350817e-04f, -9.340935494e-04f, -9.284506833e-04f, -9.228064933e-04f,
--9.171609891e-04f, -9.115141807e-04f, -9.058660777e-04f, -9.002166901e-04f, -8.945660276e-04f, -8.889141001e-04f, -8.832609175e-04f, -8.776064894e-04f, -8.719508259e-04f, -8.662939367e-04f,
--8.606358316e-04f, -8.549765206e-04f, -8.493160133e-04f, -8.436543198e-04f, -8.379914498e-04f, -8.323274131e-04f, -8.266622196e-04f, -8.209958792e-04f, -8.153284017e-04f, -8.096597970e-04f,
--8.039900748e-04f, -7.983192452e-04f, -7.926473178e-04f, -7.869743026e-04f, -7.813002095e-04f, -7.756250482e-04f, -7.699488287e-04f, -7.642715608e-04f, -7.585932544e-04f, -7.529139193e-04f,
--7.472335655e-04f, -7.415522027e-04f, -7.358698408e-04f, -7.301864898e-04f, -7.245021595e-04f, -7.188168597e-04f, -7.131306003e-04f, -7.074433912e-04f, -7.017552423e-04f, -6.960661635e-04f,
--6.903761646e-04f, -6.846852555e-04f, -6.789934461e-04f, -6.733007463e-04f, -6.676071659e-04f, -6.619127149e-04f, -6.562174031e-04f, -6.505212404e-04f, -6.448242367e-04f, -6.391264019e-04f,
--6.334277458e-04f, -6.277282784e-04f, -6.220280095e-04f, -6.163269491e-04f, -6.106251070e-04f, -6.049224931e-04f, -5.992191174e-04f, -5.935149896e-04f, -5.878101198e-04f, -5.821045177e-04f,
--5.763981934e-04f, -5.706911566e-04f, -5.649834173e-04f, -5.592749855e-04f, -5.535658709e-04f, -5.478560835e-04f, -5.421456331e-04f, -5.364345298e-04f, -5.307227834e-04f, -5.250104038e-04f,
--5.192974008e-04f, -5.135837845e-04f, -5.078695647e-04f, -5.021547513e-04f, -4.964393542e-04f, -4.907233833e-04f, -4.850068486e-04f, -4.792897599e-04f, -4.735721271e-04f, -4.678539602e-04f,
--4.621352691e-04f, -4.564160636e-04f, -4.506963537e-04f, -4.449761493e-04f, -4.392554603e-04f, -4.335342966e-04f, -4.278126681e-04f, -4.220905847e-04f, -4.163680564e-04f, -4.106450931e-04f,
--4.049217046e-04f, -3.991979009e-04f, -3.934736918e-04f, -3.877490874e-04f, -3.820240975e-04f, -3.762987320e-04f, -3.705730009e-04f, -3.648469140e-04f, -3.591204813e-04f, -3.533937126e-04f,
--3.476666179e-04f, -3.419392072e-04f, -3.362114903e-04f, -3.304834771e-04f, -3.247551775e-04f, -3.190266015e-04f, -3.132977590e-04f, -3.075686598e-04f, -3.018393140e-04f, -2.961097314e-04f,
--2.903799219e-04f, -2.846498954e-04f, -2.789196619e-04f, -2.731892313e-04f, -2.674586134e-04f, -2.617278183e-04f, -2.559968557e-04f, -2.502657357e-04f, -2.445344681e-04f, -2.388030628e-04f,
--2.330715297e-04f, -2.273398789e-04f, -2.216081201e-04f, -2.158762633e-04f, -2.101443184e-04f, -2.044122953e-04f, -1.986802039e-04f, -1.929480541e-04f, -1.872158559e-04f, -1.814836191e-04f,
--1.757513536e-04f, -1.700190694e-04f, -1.642867764e-04f, -1.585544844e-04f, -1.528222034e-04f, -1.470899433e-04f, -1.413577140e-04f, -1.356255254e-04f, -1.298933874e-04f, -1.241613099e-04f,
--1.184293027e-04f, -1.126973759e-04f, -1.069655393e-04f, -1.012338028e-04f, -9.550217628e-05f, -8.977066969e-05f, -8.403929290e-05f, -7.830805581e-05f, -7.257696832e-05f, -6.684604034e-05f,
--6.111528174e-05f, -5.538470244e-05f, -4.965431231e-05f, -4.392412127e-05f, -3.819413919e-05f, -3.246437598e-05f, -2.673484151e-05f, -2.100554569e-05f, -1.527649840e-05f, -9.547709531e-06f,
--3.819188968e-06f, 1.909053402e-06f, 7.637007694e-06f, 1.336466402e-05f, 1.909201250e-05f, 2.481904326e-05f, 3.054574640e-05f, 3.627211205e-05f, 4.199813033e-05f, 4.772379137e-05f,
-5.344908528e-05f, 5.917400219e-05f, 6.489853223e-05f, 7.062266551e-05f, 7.634639218e-05f, 8.206970235e-05f, 8.779258616e-05f, 9.351503374e-05f, 9.923703522e-05f, 1.049585807e-04f,
-1.106796604e-04f, 1.164002644e-04f, 1.221203828e-04f, 1.278400059e-04f, 1.335591236e-04f, 1.392777262e-04f, 1.449958038e-04f, 1.507133466e-04f, 1.564303447e-04f, 1.621467882e-04f,
-1.678626673e-04f, 1.735779721e-04f, 1.792926929e-04f, 1.850068197e-04f, 1.907203427e-04f, 1.964332520e-04f, 2.021455379e-04f, 2.078571905e-04f, 2.135681999e-04f, 2.192785563e-04f,
-2.249882498e-04f, 2.306972707e-04f, 2.364056091e-04f, 2.421132552e-04f, 2.478201990e-04f, 2.535264310e-04f, 2.592319410e-04f, 2.649367195e-04f, 2.706407565e-04f, 2.763440422e-04f,
-2.820465668e-04f, 2.877483205e-04f, 2.934492935e-04f, 2.991494759e-04f, 3.048488579e-04f, 3.105474298e-04f, 3.162451817e-04f, 3.219421039e-04f, 3.276381864e-04f, 3.333334196e-04f,
-3.390277936e-04f, 3.447212986e-04f, 3.504139248e-04f, 3.561056624e-04f, 3.617965017e-04f, 3.674864328e-04f, 3.731754460e-04f, 3.788635314e-04f, 3.845506794e-04f, 3.902368800e-04f,
-3.959221236e-04f, 4.016064003e-04f, 4.072897004e-04f, 4.129720141e-04f, 4.186533316e-04f, 4.243336431e-04f, 4.300129390e-04f, 4.356912094e-04f, 4.413684446e-04f, 4.470446348e-04f,
-4.527197702e-04f, 4.583938411e-04f, 4.640668378e-04f, 4.697387505e-04f, 4.754095694e-04f, 4.810792848e-04f, 4.867478870e-04f, 4.924153661e-04f, 4.980817126e-04f, 5.037469166e-04f,
-5.094109684e-04f, 5.150738583e-04f, 5.207355765e-04f, 5.263961134e-04f, 5.320554592e-04f, 5.377136041e-04f, 5.433705385e-04f, 5.490262526e-04f, 5.546807368e-04f, 5.603339813e-04f,
-5.659859764e-04f, 5.716367124e-04f, 5.772861796e-04f, 5.829343684e-04f, 5.885812689e-04f, 5.942268715e-04f, 5.998711666e-04f, 6.055141444e-04f, 6.111557952e-04f, 6.167961094e-04f,
-6.224350773e-04f, 6.280726892e-04f, 6.337089354e-04f, 6.393438063e-04f, 6.449772921e-04f, 6.506093833e-04f, 6.562400701e-04f, 6.618693429e-04f, 6.674971921e-04f, 6.731236079e-04f,
-6.787485808e-04f, 6.843721010e-04f, 6.899941590e-04f, 6.956147451e-04f, 7.012338496e-04f, 7.068514630e-04f, 7.124675755e-04f, 7.180821776e-04f, 7.236952596e-04f, 7.293068119e-04f,
-7.349168248e-04f, 7.405252889e-04f, 7.461321943e-04f, 7.517375316e-04f, 7.573412911e-04f, 7.629434633e-04f, 7.685440384e-04f, 7.741430070e-04f, 7.797403594e-04f, 7.853360860e-04f,
-7.909301772e-04f, 7.965226235e-04f, 8.021134153e-04f, 8.077025430e-04f, 8.132899969e-04f, 8.188757676e-04f, 8.244598455e-04f, 8.300422210e-04f, 8.356228845e-04f, 8.412018265e-04f,
-8.467790374e-04f, 8.523545077e-04f, 8.579282279e-04f, 8.635001883e-04f, 8.690703794e-04f, 8.746387918e-04f, 8.802054158e-04f, 8.857702420e-04f, 8.913332607e-04f, 8.968944626e-04f,
-9.024538380e-04f, 9.080113775e-04f, 9.135670714e-04f, 9.191209105e-04f, 9.246728850e-04f, 9.302229856e-04f, 9.357712027e-04f, 9.413175268e-04f, 9.468619484e-04f, 9.524044581e-04f,
-9.579450463e-04f, 9.634837037e-04f, 9.690204206e-04f, 9.745551877e-04f, 9.800879955e-04f, 9.856188344e-04f, 9.911476951e-04f, 9.966745681e-04f, 1.002199444e-03f, 1.007722313e-03f,
-1.013243166e-03f, 1.018761994e-03f, 1.024278787e-03f, 1.029793535e-03f, 1.035306230e-03f, 1.040816861e-03f, 1.046325420e-03f, 1.051831896e-03f, 1.057336282e-03f, 1.062838566e-03f,
-1.068338740e-03f, 1.073836794e-03f, 1.079332720e-03f, 1.084826506e-03f, 1.090318145e-03f, 1.095807627e-03f, 1.101294942e-03f, 1.106780081e-03f, 1.112263035e-03f, 1.117743794e-03f,
-1.123222349e-03f, 1.128698690e-03f, 1.134172809e-03f, 1.139644696e-03f, 1.145114340e-03f, 1.150581735e-03f, 1.156046869e-03f, 1.161509733e-03f, 1.166970319e-03f, 1.172428616e-03f,
-1.177884616e-03f, 1.183338309e-03f, 1.188789686e-03f, 1.194238738e-03f, 1.199685455e-03f, 1.205129828e-03f, 1.210571848e-03f, 1.216011505e-03f, 1.221448790e-03f, 1.226883694e-03f,
-1.232316207e-03f, 1.237746321e-03f, 1.243174026e-03f, 1.248599313e-03f, 1.254022172e-03f, 1.259442595e-03f, 1.264860571e-03f, 1.270276093e-03f, 1.275689150e-03f, 1.281099733e-03f,
-1.286507833e-03f, 1.291913441e-03f, 1.297316548e-03f, 1.302717145e-03f, 1.308115221e-03f, 1.313510769e-03f, 1.318903778e-03f, 1.324294240e-03f, 1.329682145e-03f, 1.335067485e-03f,
-1.340450250e-03f, 1.345830431e-03f, 1.351208018e-03f, 1.356583003e-03f, 1.361955377e-03f, 1.367325129e-03f, 1.372692252e-03f, 1.378056736e-03f, 1.383418571e-03f, 1.388777750e-03f,
-1.394134262e-03f, 1.399488098e-03f, 1.404839250e-03f, 1.410187708e-03f, 1.415533462e-03f, 1.420876505e-03f, 1.426216827e-03f, 1.431554419e-03f, 1.436889271e-03f, 1.442221375e-03f,
-1.447550722e-03f, 1.452877302e-03f, 1.458201106e-03f, 1.463522126e-03f, 1.468840352e-03f, 1.474155776e-03f, 1.479468387e-03f, 1.484778178e-03f, 1.490085139e-03f, 1.495389260e-03f,
-1.500690534e-03f, 1.505988951e-03f, 1.511284502e-03f, 1.516577178e-03f, 1.521866971e-03f, 1.527153870e-03f, 1.532437867e-03f, 1.537718953e-03f, 1.542997119e-03f, 1.548272356e-03f,
-1.553544656e-03f, 1.558814008e-03f, 1.564080405e-03f, 1.569343837e-03f, 1.574604295e-03f, 1.579861771e-03f, 1.585116255e-03f, 1.590367738e-03f, 1.595616212e-03f, 1.600861668e-03f,
-1.606104096e-03f, 1.611343489e-03f, 1.616579836e-03f, 1.621813129e-03f, 1.627043359e-03f, 1.632270517e-03f, 1.637494595e-03f, 1.642715583e-03f, 1.647933473e-03f, 1.653148255e-03f,
-1.658359922e-03f, 1.663568463e-03f, 1.668773871e-03f, 1.673976136e-03f, 1.679175249e-03f, 1.684371202e-03f, 1.689563986e-03f, 1.694753592e-03f, 1.699940012e-03f, 1.705123235e-03f,
-1.710303255e-03f, 1.715480061e-03f, 1.720653645e-03f, 1.725823998e-03f, 1.730991112e-03f, 1.736154978e-03f, 1.741315587e-03f, 1.746472930e-03f, 1.751626998e-03f, 1.756777783e-03f,
-1.761925276e-03f, 1.767069468e-03f, 1.772210351e-03f, 1.777347915e-03f, 1.782482153e-03f, 1.787613055e-03f, 1.792740613e-03f, 1.797864817e-03f, 1.802985660e-03f, 1.808103133e-03f,
-1.813217226e-03f, 1.818327932e-03f, 1.823435241e-03f, 1.828539146e-03f, 1.833639636e-03f, 1.838736704e-03f, 1.843830342e-03f, 1.848920539e-03f, 1.854007288e-03f, 1.859090581e-03f,
-1.864170408e-03f, 1.869246761e-03f, 1.874319631e-03f, 1.879389010e-03f, 1.884454889e-03f, 1.889517260e-03f, 1.894576113e-03f, 1.899631441e-03f, 1.904683235e-03f, 1.909731486e-03f,
-1.914776186e-03f, 1.919817327e-03f, 1.924854898e-03f, 1.929888893e-03f, 1.934919303e-03f, 1.939946118e-03f, 1.944969332e-03f, 1.949988934e-03f, 1.955004917e-03f, 1.960017272e-03f,
-1.965025991e-03f, 1.970031065e-03f, 1.975032485e-03f, 1.980030244e-03f, 1.985024333e-03f, 1.990014742e-03f, 1.995001465e-03f, 1.999984492e-03f, 2.004963816e-03f, 2.009939427e-03f,
-2.014911317e-03f, 2.019879477e-03f, 2.024843901e-03f, 2.029804578e-03f, 2.034761500e-03f, 2.039714660e-03f, 2.044664049e-03f, 2.049609659e-03f, 2.054551480e-03f, 2.059489505e-03f,
-2.064423726e-03f, 2.069354134e-03f, 2.074280720e-03f, 2.079203477e-03f, 2.084122396e-03f, 2.089037469e-03f, 2.093948687e-03f, 2.098856043e-03f, 2.103759527e-03f, 2.108659132e-03f,
-2.113554850e-03f, 2.118446671e-03f, 2.123334589e-03f, 2.128218594e-03f, 2.133098678e-03f, 2.137974834e-03f, 2.142847052e-03f, 2.147715325e-03f, 2.152579644e-03f, 2.157440002e-03f,
-2.162296390e-03f, 2.167148799e-03f, 2.171997222e-03f, 2.176841651e-03f, 2.181682077e-03f, 2.186518492e-03f, 2.191350887e-03f, 2.196179256e-03f, 2.201003589e-03f, 2.205823879e-03f,
-2.210640118e-03f, 2.215452296e-03f, 2.220260407e-03f, 2.225064442e-03f, 2.229864392e-03f, 2.234660251e-03f, 2.239452009e-03f, 2.244239660e-03f, 2.249023193e-03f, 2.253802603e-03f,
-2.258577879e-03f, 2.263349016e-03f, 2.268116003e-03f, 2.272878834e-03f, 2.277637501e-03f, 2.282391995e-03f, 2.287142308e-03f, 2.291888432e-03f, 2.296630360e-03f, 2.301368083e-03f,
-2.306101594e-03f, 2.310830884e-03f, 2.315555946e-03f, 2.320276771e-03f, 2.324993351e-03f, 2.329705679e-03f, 2.334413747e-03f, 2.339117547e-03f, 2.343817070e-03f, 2.348512310e-03f,
-2.353203257e-03f, 2.357889905e-03f, 2.362572245e-03f, 2.367250269e-03f, 2.371923969e-03f, 2.376593339e-03f, 2.381258369e-03f, 2.385919052e-03f, 2.390575380e-03f, 2.395227346e-03f,
-2.399874941e-03f, 2.404518157e-03f, 2.409156987e-03f, 2.413791424e-03f, 2.418421459e-03f, 2.423047084e-03f, 2.427668291e-03f, 2.432285074e-03f, 2.436897424e-03f, 2.441505333e-03f,
-2.446108794e-03f, 2.450707799e-03f, 2.455302340e-03f, 2.459892410e-03f, 2.464478000e-03f, 2.469059104e-03f, 2.473635713e-03f, 2.478207819e-03f, 2.482775416e-03f, 2.487338495e-03f,
-2.491897049e-03f, 2.496451069e-03f, 2.501000549e-03f, 2.505545481e-03f, 2.510085857e-03f, 2.514621670e-03f, 2.519152911e-03f, 2.523679574e-03f, 2.528201650e-03f, 2.532719133e-03f,
-2.537232014e-03f, 2.541740286e-03f, 2.546243941e-03f, 2.550742972e-03f, 2.555237372e-03f, 2.559727132e-03f, 2.564212246e-03f, 2.568692705e-03f, 2.573168503e-03f, 2.577639631e-03f,
-2.582106082e-03f, 2.586567850e-03f, 2.591024925e-03f, 2.595477301e-03f, 2.599924971e-03f, 2.604367926e-03f, 2.608806160e-03f, 2.613239665e-03f, 2.617668433e-03f, 2.622092458e-03f,
-2.626511731e-03f, 2.630926246e-03f, 2.635335995e-03f, 2.639740970e-03f, 2.644141164e-03f, 2.648536570e-03f, 2.652927181e-03f, 2.657312989e-03f, 2.661693986e-03f, 2.666070166e-03f,
-2.670441521e-03f, 2.674808044e-03f, 2.679169727e-03f, 2.683526564e-03f, 2.687878546e-03f, 2.692225667e-03f, 2.696567920e-03f, 2.700905296e-03f, 2.705237790e-03f, 2.709565393e-03f,
-2.713888098e-03f, 2.718205899e-03f, 2.722518787e-03f, 2.726826757e-03f, 2.731129799e-03f, 2.735427908e-03f, 2.739721077e-03f, 2.744009297e-03f, 2.748292562e-03f, 2.752570864e-03f,
-2.756844197e-03f, 2.761112554e-03f, 2.765375927e-03f, 2.769634308e-03f, 2.773887692e-03f, 2.778136071e-03f, 2.782379438e-03f, 2.786617785e-03f, 2.790851106e-03f, 2.795079393e-03f,
-2.799302640e-03f, 2.803520840e-03f, 2.807733985e-03f, 2.811942068e-03f, 2.816145083e-03f, 2.820343022e-03f, 2.824535879e-03f, 2.828723646e-03f, 2.832906316e-03f, 2.837083883e-03f,
-2.841256339e-03f, 2.845423678e-03f, 2.849585892e-03f, 2.853742975e-03f, 2.857894920e-03f, 2.862041719e-03f, 2.866183366e-03f, 2.870319855e-03f, 2.874451177e-03f, 2.878577326e-03f,
-2.882698296e-03f, 2.886814080e-03f, 2.890924669e-03f, 2.895030059e-03f, 2.899130242e-03f, 2.903225210e-03f, 2.907314958e-03f, 2.911399479e-03f, 2.915478765e-03f, 2.919552809e-03f,
-2.923621606e-03f, 2.927685149e-03f, 2.931743430e-03f, 2.935796442e-03f, 2.939844180e-03f, 2.943886636e-03f, 2.947923804e-03f, 2.951955677e-03f, 2.955982248e-03f, 2.960003510e-03f,
-2.964019457e-03f, 2.968030082e-03f, 2.972035379e-03f, 2.976035341e-03f, 2.980029961e-03f, 2.984019232e-03f, 2.988003148e-03f, 2.991981703e-03f, 2.995954889e-03f, 2.999922700e-03f,
-3.003885130e-03f, 3.007842172e-03f, 3.011793819e-03f, 3.015740065e-03f, 3.019680903e-03f, 3.023616327e-03f, 3.027546329e-03f, 3.031470905e-03f, 3.035390047e-03f, 3.039303748e-03f,
-3.043212002e-03f, 3.047114803e-03f, 3.051012145e-03f, 3.054904020e-03f, 3.058790422e-03f, 3.062671345e-03f, 3.066546782e-03f, 3.070416728e-03f, 3.074281175e-03f, 3.078140117e-03f,
-3.081993547e-03f, 3.085841461e-03f, 3.089683850e-03f, 3.093520708e-03f, 3.097352030e-03f, 3.101177809e-03f, 3.104998039e-03f, 3.108812712e-03f, 3.112621824e-03f, 3.116425367e-03f,
-3.120223336e-03f, 3.124015724e-03f, 3.127802524e-03f, 3.131583731e-03f, 3.135359338e-03f, 3.139129339e-03f, 3.142893728e-03f, 3.146652499e-03f, 3.150405645e-03f, 3.154153160e-03f,
-3.157895038e-03f, 3.161631272e-03f, 3.165361857e-03f, 3.169086787e-03f, 3.172806055e-03f, 3.176519655e-03f, 3.180227581e-03f, 3.183929826e-03f, 3.187626386e-03f, 3.191317253e-03f,
-3.195002421e-03f, 3.198681885e-03f, 3.202355639e-03f, 3.206023675e-03f, 3.209685989e-03f, 3.213342574e-03f, 3.216993424e-03f, 3.220638534e-03f, 3.224277896e-03f, 3.227911506e-03f,
-3.231539357e-03f, 3.235161443e-03f, 3.238777758e-03f, 3.242388296e-03f, 3.245993051e-03f, 3.249592018e-03f, 3.253185190e-03f, 3.256772562e-03f, 3.260354127e-03f, 3.263929880e-03f,
-3.267499815e-03f, 3.271063925e-03f, 3.274622206e-03f, 3.278174651e-03f, 3.281721254e-03f, 3.285262009e-03f, 3.288796911e-03f, 3.292325954e-03f, 3.295849132e-03f, 3.299366439e-03f,
-3.302877870e-03f, 3.306383418e-03f, 3.309883078e-03f, 3.313376845e-03f, 3.316864711e-03f, 3.320346673e-03f, 3.323822723e-03f, 3.327292856e-03f, 3.330757067e-03f, 3.334215350e-03f,
-3.337667699e-03f, 3.341114108e-03f, 3.344554573e-03f, 3.347989086e-03f, 3.351417643e-03f, 3.354840238e-03f, 3.358256865e-03f, 3.361667519e-03f, 3.365072194e-03f, 3.368470884e-03f,
-3.371863584e-03f, 3.375250289e-03f, 3.378630992e-03f, 3.382005689e-03f, 3.385374373e-03f, 3.388737040e-03f, 3.392093683e-03f, 3.395444297e-03f, 3.398788877e-03f, 3.402127418e-03f,
-3.405459913e-03f, 3.408786357e-03f, 3.412106745e-03f, 3.415421072e-03f, 3.418729331e-03f, 3.422031519e-03f, 3.425327628e-03f, 3.428617654e-03f, 3.431901591e-03f, 3.435179435e-03f,
-3.438451179e-03f, 3.441716818e-03f, 3.444976347e-03f, 3.448229761e-03f, 3.451477054e-03f, 3.454718222e-03f, 3.457953258e-03f, 3.461182157e-03f, 3.464404914e-03f, 3.467621525e-03f,
-3.470831983e-03f, 3.474036283e-03f, 3.477234421e-03f, 3.480426390e-03f, 3.483612186e-03f, 3.486791804e-03f, 3.489965238e-03f, 3.493132484e-03f, 3.496293535e-03f, 3.499448387e-03f,
-3.502597035e-03f, 3.505739473e-03f, 3.508875697e-03f, 3.512005701e-03f, 3.515129480e-03f, 3.518247030e-03f, 3.521358344e-03f, 3.524463419e-03f, 3.527562248e-03f, 3.530654828e-03f,
-3.533741152e-03f, 3.536821216e-03f, 3.539895015e-03f, 3.542962544e-03f, 3.546023798e-03f, 3.549078771e-03f, 3.552127460e-03f, 3.555169858e-03f, 3.558205962e-03f, 3.561235765e-03f,
-3.564259264e-03f, 3.567276453e-03f, 3.570287327e-03f, 3.573291881e-03f, 3.576290112e-03f, 3.579282013e-03f, 3.582267579e-03f, 3.585246807e-03f, 3.588219691e-03f, 3.591186226e-03f,
-3.594146408e-03f, 3.597100232e-03f, 3.600047692e-03f, 3.602988785e-03f, 3.605923505e-03f, 3.608851848e-03f, 3.611773808e-03f, 3.614689382e-03f, 3.617598564e-03f, 3.620501351e-03f,
-3.623397736e-03f, 3.626287715e-03f, 3.629171284e-03f, 3.632048438e-03f, 3.634919173e-03f, 3.637783483e-03f, 3.640641364e-03f, 3.643492812e-03f, 3.646337822e-03f, 3.649176389e-03f,
-3.652008509e-03f, 3.654834177e-03f, 3.657653388e-03f, 3.660466138e-03f, 3.663272423e-03f, 3.666072238e-03f, 3.668865578e-03f, 3.671652439e-03f, 3.674432817e-03f, 3.677206706e-03f,
-3.679974103e-03f, 3.682735003e-03f, 3.685489402e-03f, 3.688237294e-03f, 3.690978677e-03f, 3.693713544e-03f, 3.696441893e-03f, 3.699163718e-03f, 3.701879015e-03f, 3.704587780e-03f,
-3.707290008e-03f, 3.709985696e-03f, 3.712674838e-03f, 3.715357430e-03f, 3.718033469e-03f, 3.720702949e-03f, 3.723365867e-03f, 3.726022218e-03f, 3.728671998e-03f, 3.731315203e-03f,
-3.733951828e-03f, 3.736581869e-03f, 3.739205323e-03f, 3.741822184e-03f, 3.744432449e-03f, 3.747036113e-03f, 3.749633173e-03f, 3.752223624e-03f, 3.754807461e-03f, 3.757384682e-03f,
-3.759955281e-03f, 3.762519255e-03f, 3.765076599e-03f, 3.767627310e-03f, 3.770171383e-03f, 3.772708814e-03f, 3.775239600e-03f, 3.777763735e-03f, 3.780281217e-03f, 3.782792041e-03f,
-3.785296203e-03f, 3.787793699e-03f, 3.790284525e-03f, 3.792768678e-03f, 3.795246152e-03f, 3.797716945e-03f, 3.800181052e-03f, 3.802638469e-03f, 3.805089193e-03f, 3.807533220e-03f,
-3.809970545e-03f, 3.812401165e-03f, 3.814825076e-03f, 3.817242274e-03f, 3.819652755e-03f, 3.822056515e-03f, 3.824453552e-03f, 3.826843859e-03f, 3.829227435e-03f, 3.831604275e-03f,
-3.833974376e-03f, 3.836337733e-03f, 3.838694343e-03f, 3.841044202e-03f, 3.843387307e-03f, 3.845723653e-03f, 3.848053238e-03f, 3.850376057e-03f, 3.852692106e-03f, 3.855001382e-03f,
-3.857303882e-03f, 3.859599602e-03f, 3.861888537e-03f, 3.864170685e-03f, 3.866446042e-03f, 3.868714604e-03f, 3.870976368e-03f, 3.873231330e-03f, 3.875479486e-03f, 3.877720834e-03f,
-3.879955369e-03f, 3.882183088e-03f, 3.884403987e-03f, 3.886618063e-03f, 3.888825313e-03f, 3.891025733e-03f, 3.893219319e-03f, 3.895406068e-03f, 3.897585977e-03f, 3.899759042e-03f,
-3.901925260e-03f, 3.904084627e-03f, 3.906237140e-03f, 3.908382796e-03f, 3.910521591e-03f, 3.912653522e-03f, 3.914778585e-03f, 3.916896778e-03f, 3.919008097e-03f, 3.921112538e-03f,
-3.923210098e-03f, 3.925300775e-03f, 3.927384564e-03f, 3.929461463e-03f, 3.931531468e-03f, 3.933594575e-03f, 3.935650783e-03f, 3.937700088e-03f, 3.939742485e-03f, 3.941777973e-03f,
-3.943806548e-03f, 3.945828207e-03f, 3.947842946e-03f, 3.949850763e-03f, 3.951851655e-03f, 3.953845617e-03f, 3.955832648e-03f, 3.957812745e-03f, 3.959785903e-03f, 3.961752120e-03f,
-3.963711393e-03f, 3.965663719e-03f, 3.967609095e-03f, 3.969547518e-03f, 3.971478985e-03f, 3.973403492e-03f, 3.975321038e-03f, 3.977231618e-03f, 3.979135230e-03f, 3.981031872e-03f,
-3.982921539e-03f, 3.984804230e-03f, 3.986679941e-03f, 3.988548669e-03f, 3.990410412e-03f, 3.992265166e-03f, 3.994112929e-03f, 3.995953698e-03f, 3.997787470e-03f, 3.999614243e-03f,
-4.001434013e-03f, 4.003246777e-03f, 4.005052533e-03f, 4.006851279e-03f, 4.008643011e-03f, 4.010427726e-03f, 4.012205423e-03f, 4.013976097e-03f, 4.015739747e-03f, 4.017496370e-03f,
-4.019245962e-03f, 4.020988522e-03f, 4.022724047e-03f, 4.024452534e-03f, 4.026173980e-03f, 4.027888383e-03f, 4.029595741e-03f, 4.031296049e-03f, 4.032989307e-03f, 4.034675512e-03f,
-4.036354660e-03f, 4.038026749e-03f, 4.039691778e-03f, 4.041349742e-03f, 4.043000640e-03f, 4.044644470e-03f, 4.046281228e-03f, 4.047910913e-03f, 4.049533521e-03f, 4.051149051e-03f,
-4.052757499e-03f, 4.054358864e-03f, 4.055953143e-03f, 4.057540334e-03f, 4.059120434e-03f, 4.060693441e-03f, 4.062259353e-03f, 4.063818167e-03f, 4.065369880e-03f, 4.066914491e-03f,
-4.068451998e-03f, 4.069982397e-03f, 4.071505687e-03f, 4.073021865e-03f, 4.074530929e-03f, 4.076032877e-03f, 4.077527707e-03f, 4.079015416e-03f, 4.080496002e-03f, 4.081969463e-03f,
-4.083435797e-03f, 4.084895001e-03f, 4.086347074e-03f, 4.087792013e-03f, 4.089229816e-03f, 4.090660481e-03f, 4.092084005e-03f, 4.093500388e-03f, 4.094909626e-03f, 4.096311718e-03f,
-4.097706661e-03f, 4.099094454e-03f, 4.100475094e-03f, 4.101848579e-03f, 4.103214908e-03f, 4.104574078e-03f, 4.105926088e-03f, 4.107270935e-03f, 4.108608617e-03f, 4.109939133e-03f,
-4.111262480e-03f, 4.112578657e-03f, 4.113887662e-03f, 4.115189492e-03f, 4.116484146e-03f, 4.117771622e-03f, 4.119051919e-03f, 4.120325033e-03f, 4.121590964e-03f, 4.122849710e-03f,
-4.124101268e-03f, 4.125345637e-03f, 4.126582816e-03f, 4.127812802e-03f, 4.129035593e-03f, 4.130251189e-03f, 4.131459586e-03f, 4.132660784e-03f, 4.133854781e-03f, 4.135041574e-03f,
-4.136221163e-03f, 4.137393546e-03f, 4.138558720e-03f, 4.139716685e-03f, 4.140867439e-03f, 4.142010979e-03f, 4.143147305e-03f, 4.144276414e-03f, 4.145398306e-03f, 4.146512979e-03f,
-4.147620430e-03f, 4.148720659e-03f, 4.149813664e-03f, 4.150899443e-03f, 4.151977996e-03f, 4.153049320e-03f, 4.154113413e-03f, 4.155170275e-03f, 4.156219904e-03f, 4.157262299e-03f,
-4.158297458e-03f, 4.159325379e-03f, 4.160346061e-03f, 4.161359504e-03f, 4.162365705e-03f, 4.163364663e-03f, 4.164356376e-03f, 4.165340844e-03f, 4.166318065e-03f, 4.167288038e-03f,
-4.168250761e-03f, 4.169206233e-03f, 4.170154453e-03f, 4.171095419e-03f, 4.172029131e-03f, 4.172955586e-03f, 4.173874784e-03f, 4.174786724e-03f, 4.175691404e-03f, 4.176588823e-03f,
-4.177478980e-03f, 4.178361874e-03f, 4.179237503e-03f, 4.180105867e-03f, 4.180966964e-03f, 4.181820793e-03f, 4.182667354e-03f, 4.183506644e-03f, 4.184338663e-03f, 4.185163409e-03f,
-4.185980883e-03f, 4.186791082e-03f, 4.187594006e-03f, 4.188389653e-03f, 4.189178023e-03f, 4.189959114e-03f, 4.190732926e-03f, 4.191499458e-03f, 4.192258709e-03f, 4.193010677e-03f,
-4.193755361e-03f, 4.194492762e-03f, 4.195222878e-03f, 4.195945707e-03f, 4.196661250e-03f, 4.197369505e-03f, 4.198070471e-03f, 4.198764148e-03f, 4.199450535e-03f, 4.200129631e-03f,
-4.200801435e-03f, 4.201465946e-03f, 4.202123163e-03f, 4.202773087e-03f, 4.203415715e-03f, 4.204051047e-03f, 4.204679083e-03f, 4.205299822e-03f, 4.205913263e-03f, 4.206519405e-03f,
-4.207118248e-03f, 4.207709791e-03f, 4.208294033e-03f, 4.208870974e-03f, 4.209440613e-03f, 4.210002950e-03f, 4.210557983e-03f, 4.211105713e-03f, 4.211646138e-03f, 4.212179259e-03f,
-4.212705074e-03f, 4.213223583e-03f, 4.213734785e-03f, 4.214238680e-03f, 4.214735268e-03f, 4.215224548e-03f, 4.215706519e-03f, 4.216181181e-03f, 4.216648534e-03f, 4.217108577e-03f,
-4.217561309e-03f, 4.218006731e-03f, 4.218444842e-03f, 4.218875641e-03f, 4.219299128e-03f, 4.219715303e-03f, 4.220124165e-03f, 4.220525714e-03f, 4.220919950e-03f, 4.221306872e-03f,
-4.221686480e-03f, 4.222058774e-03f, 4.222423754e-03f, 4.222781418e-03f, 4.223131768e-03f, 4.223474802e-03f, 4.223810521e-03f, 4.224138924e-03f, 4.224460012e-03f, 4.224773783e-03f,
-4.225080238e-03f, 4.225379376e-03f, 4.225671198e-03f, 4.225955703e-03f, 4.226232891e-03f, 4.226502762e-03f, 4.226765316e-03f, 4.227020553e-03f, 4.227268472e-03f, 4.227509074e-03f,
-4.227742359e-03f, 4.227968327e-03f, 4.228186977e-03f, 4.228398309e-03f, 4.228602324e-03f, 4.228799022e-03f, 4.228988402e-03f, 4.229170465e-03f, 4.229345211e-03f, 4.229512639e-03f,
-4.229672750e-03f, 4.229825544e-03f, 4.229971021e-03f, 4.230109181e-03f, 4.230240024e-03f, 4.230363551e-03f, 4.230479761e-03f, 4.230588655e-03f, 4.230690232e-03f, 4.230784494e-03f,
-4.230871440e-03f, 4.230951071e-03f, 4.231023386e-03f, 4.231088386e-03f, 4.231146071e-03f, 4.231196442e-03f, 4.231239498e-03f, 4.231275241e-03f, 4.231303670e-03f, 4.231324785e-03f,
-4.231338587e-03f, 4.231345077e-03f, 4.231344255e-03f, 4.231336120e-03f, 4.231320674e-03f, 4.231297916e-03f, 4.231267848e-03f, 4.231230469e-03f, 4.231185781e-03f, 4.231133783e-03f,
-4.231074476e-03f, 4.231007860e-03f, 4.230933936e-03f, 4.230852704e-03f, 4.230764166e-03f, 4.230668321e-03f, 4.230565169e-03f, 4.230454712e-03f, 4.230336951e-03f, 4.230211884e-03f,
-4.230079514e-03f, 4.229939841e-03f, 4.229792865e-03f, 4.229638587e-03f, 4.229477008e-03f, 4.229308128e-03f, 4.229131947e-03f, 4.228948468e-03f, 4.228757690e-03f, 4.228559613e-03f,
-4.228354239e-03f, 4.228141569e-03f, 4.227921603e-03f, 4.227694342e-03f, 4.227459786e-03f, 4.227217936e-03f, 4.226968794e-03f, 4.226712360e-03f, 4.226448634e-03f, 4.226177619e-03f,
-4.225899313e-03f, 4.225613719e-03f, 4.225320837e-03f, 4.225020668e-03f, 4.224713212e-03f, 4.224398472e-03f, 4.224076447e-03f, 4.223747139e-03f, 4.223410548e-03f, 4.223066676e-03f,
-4.222715523e-03f, 4.222357090e-03f, 4.221991379e-03f, 4.221618390e-03f, 4.221238125e-03f, 4.220850584e-03f, 4.220455768e-03f, 4.220053679e-03f, 4.219644318e-03f, 4.219227685e-03f,
-4.218803781e-03f, 4.218372609e-03f, 4.217934168e-03f, 4.217488461e-03f, 4.217035487e-03f, 4.216575249e-03f, 4.216107747e-03f, 4.215632983e-03f, 4.215150957e-03f, 4.214661672e-03f,
-4.214165128e-03f, 4.213661326e-03f, 4.213150268e-03f, 4.212631954e-03f, 4.212106387e-03f, 4.211573567e-03f, 4.211033496e-03f, 4.210486175e-03f, 4.209931606e-03f, 4.209369788e-03f,
-4.208800725e-03f, 4.208224417e-03f, 4.207640866e-03f, 4.207050073e-03f, 4.206452039e-03f, 4.205846766e-03f, 4.205234255e-03f, 4.204614508e-03f, 4.203987526e-03f, 4.203353310e-03f,
-4.202711862e-03f, 4.202063184e-03f, 4.201407276e-03f, 4.200744141e-03f, 4.200073780e-03f, 4.199396195e-03f, 4.198711386e-03f, 4.198019356e-03f, 4.197320105e-03f, 4.196613637e-03f,
-4.195899951e-03f, 4.195179051e-03f, 4.194450937e-03f, 4.193715611e-03f, 4.192973074e-03f, 4.192223329e-03f, 4.191466377e-03f, 4.190702219e-03f, 4.189930857e-03f, 4.189152294e-03f,
-4.188366530e-03f, 4.187573568e-03f, 4.186773409e-03f, 4.185966055e-03f, 4.185151507e-03f, 4.184329768e-03f, 4.183500839e-03f, 4.182664721e-03f, 4.181821418e-03f, 4.180970930e-03f,
-4.180113260e-03f, 4.179248409e-03f, 4.178376379e-03f, 4.177497172e-03f, 4.176610789e-03f, 4.175717234e-03f, 4.174816507e-03f, 4.173908611e-03f, 4.172993547e-03f, 4.172071317e-03f,
-4.171141924e-03f, 4.170205370e-03f, 4.169261655e-03f, 4.168310783e-03f, 4.167352755e-03f, 4.166387574e-03f, 4.165415241e-03f, 4.164435758e-03f, 4.163449127e-03f, 4.162455351e-03f,
-4.161454432e-03f, 4.160446371e-03f, 4.159431171e-03f, 4.158408834e-03f, 4.157379362e-03f, 4.156342756e-03f, 4.155299021e-03f, 4.154248156e-03f, 4.153190165e-03f, 4.152125050e-03f,
-4.151052813e-03f, 4.149973456e-03f, 4.148886981e-03f, 4.147793391e-03f, 4.146692688e-03f, 4.145584874e-03f, 4.144469951e-03f, 4.143347922e-03f, 4.142218789e-03f, 4.141082554e-03f,
-4.139939220e-03f, 4.138788789e-03f, 4.137631263e-03f, 4.136466644e-03f, 4.135294936e-03f, 4.134116140e-03f, 4.132930258e-03f, 4.131737294e-03f, 4.130537249e-03f, 4.129330127e-03f,
-4.128115928e-03f, 4.126894657e-03f, 4.125666315e-03f, 4.124430905e-03f, 4.123188429e-03f, 4.121938890e-03f, 4.120682290e-03f, 4.119418632e-03f, 4.118147918e-03f, 4.116870152e-03f,
-4.115585335e-03f, 4.114293469e-03f, 4.112994559e-03f, 4.111688606e-03f, 4.110375612e-03f, 4.109055581e-03f, 4.107728515e-03f, 4.106394417e-03f, 4.105053289e-03f, 4.103705135e-03f,
-4.102349956e-03f, 4.100987755e-03f, 4.099618536e-03f, 4.098242300e-03f, 4.096859051e-03f, 4.095468791e-03f, 4.094071524e-03f, 4.092667251e-03f, 4.091255976e-03f, 4.089837701e-03f,
-4.088412429e-03f, 4.086980164e-03f, 4.085540907e-03f, 4.084094662e-03f, 4.082641432e-03f, 4.081181218e-03f, 4.079714026e-03f, 4.078239856e-03f, 4.076758712e-03f, 4.075270597e-03f,
-4.073775514e-03f, 4.072273466e-03f, 4.070764455e-03f, 4.069248486e-03f, 4.067725560e-03f, 4.066195680e-03f, 4.064658850e-03f, 4.063115073e-03f, 4.061564351e-03f, 4.060006688e-03f,
-4.058442087e-03f, 4.056870550e-03f, 4.055292082e-03f, 4.053706684e-03f, 4.052114360e-03f, 4.050515113e-03f, 4.048908947e-03f, 4.047295863e-03f, 4.045675866e-03f, 4.044048959e-03f,
-4.042415144e-03f, 4.040774426e-03f, 4.039126806e-03f, 4.037472288e-03f, 4.035810877e-03f, 4.034142573e-03f, 4.032467382e-03f, 4.030785306e-03f, 4.029096348e-03f, 4.027400512e-03f,
-4.025697801e-03f, 4.023988218e-03f, 4.022271766e-03f, 4.020548449e-03f, 4.018818271e-03f, 4.017081234e-03f, 4.015337342e-03f, 4.013586598e-03f, 4.011829005e-03f, 4.010064568e-03f,
-4.008293288e-03f, 4.006515171e-03f, 4.004730218e-03f, 4.002938434e-03f, 4.001139823e-03f, 3.999334386e-03f, 3.997522129e-03f, 3.995703053e-03f, 3.993877164e-03f, 3.992044464e-03f,
-3.990204957e-03f, 3.988358646e-03f, 3.986505535e-03f, 3.984645628e-03f, 3.982778928e-03f, 3.980905438e-03f, 3.979025162e-03f, 3.977138104e-03f, 3.975244267e-03f, 3.973343656e-03f,
-3.971436273e-03f, 3.969522122e-03f, 3.967601206e-03f, 3.965673531e-03f, 3.963739098e-03f, 3.961797913e-03f, 3.959849978e-03f, 3.957895297e-03f, 3.955933874e-03f, 3.953965713e-03f,
-3.951990817e-03f, 3.950009190e-03f, 3.948020836e-03f, 3.946025759e-03f, 3.944023963e-03f, 3.942015450e-03f, 3.940000226e-03f, 3.937978294e-03f, 3.935949657e-03f, 3.933914320e-03f,
-3.931872287e-03f, 3.929823560e-03f, 3.927768145e-03f, 3.925706045e-03f, 3.923637264e-03f, 3.921561805e-03f, 3.919479674e-03f, 3.917390873e-03f, 3.915295406e-03f, 3.913193279e-03f,
-3.911084493e-03f, 3.908969055e-03f, 3.906846967e-03f, 3.904718233e-03f, 3.902582858e-03f, 3.900440845e-03f, 3.898292199e-03f, 3.896136924e-03f, 3.893975023e-03f, 3.891806502e-03f,
-3.889631362e-03f, 3.887449610e-03f, 3.885261249e-03f, 3.883066283e-03f, 3.880864716e-03f, 3.878656553e-03f, 3.876441797e-03f, 3.874220453e-03f, 3.871992524e-03f, 3.869758016e-03f,
-3.867516932e-03f, 3.865269276e-03f, 3.863015053e-03f, 3.860754267e-03f, 3.858486921e-03f, 3.856213022e-03f, 3.853932571e-03f, 3.851645575e-03f, 3.849352037e-03f, 3.847051961e-03f,
-3.844745352e-03f, 3.842432214e-03f, 3.840112551e-03f, 3.837786368e-03f, 3.835453669e-03f, 3.833114458e-03f, 3.830768740e-03f, 3.828416520e-03f, 3.826057800e-03f, 3.823692587e-03f,
-3.821320884e-03f, 3.818942696e-03f, 3.816558027e-03f, 3.814166882e-03f, 3.811769264e-03f, 3.809365180e-03f, 3.806954632e-03f, 3.804537626e-03f, 3.802114166e-03f, 3.799684256e-03f,
-3.797247902e-03f, 3.794805107e-03f, 3.792355876e-03f, 3.789900214e-03f, 3.787438125e-03f, 3.784969614e-03f, 3.782494685e-03f, 3.780013344e-03f, 3.777525594e-03f, 3.775031440e-03f,
-3.772530887e-03f, 3.770023940e-03f, 3.767510602e-03f, 3.764990880e-03f, 3.762464777e-03f, 3.759932298e-03f, 3.757393448e-03f, 3.754848232e-03f, 3.752296654e-03f, 3.749738719e-03f,
-3.747174431e-03f, 3.744603796e-03f, 3.742026819e-03f, 3.739443503e-03f, 3.736853854e-03f, 3.734257877e-03f, 3.731655577e-03f, 3.729046957e-03f, 3.726432024e-03f, 3.723810781e-03f,
-3.721183234e-03f, 3.718549388e-03f, 3.715909247e-03f, 3.713262816e-03f, 3.710610101e-03f, 3.707951106e-03f, 3.705285835e-03f, 3.702614295e-03f, 3.699936489e-03f, 3.697252424e-03f,
-3.694562103e-03f, 3.691865531e-03f, 3.689162715e-03f, 3.686453658e-03f, 3.683738365e-03f, 3.681016843e-03f, 3.678289095e-03f, 3.675555127e-03f, 3.672814943e-03f, 3.670068549e-03f,
-3.667315950e-03f, 3.664557151e-03f, 3.661792157e-03f, 3.659020973e-03f, 3.656243604e-03f, 3.653460056e-03f, 3.650670332e-03f, 3.647874440e-03f, 3.645072383e-03f, 3.642264166e-03f,
-3.639449796e-03f, 3.636629277e-03f, 3.633802614e-03f, 3.630969813e-03f, 3.628130878e-03f, 3.625285815e-03f, 3.622434630e-03f, 3.619577327e-03f, 3.616713911e-03f, 3.613844388e-03f,
-3.610968764e-03f, 3.608087043e-03f, 3.605199230e-03f, 3.602305332e-03f, 3.599405352e-03f, 3.596499298e-03f, 3.593587173e-03f, 3.590668984e-03f, 3.587744735e-03f, 3.584814432e-03f,
-3.581878080e-03f, 3.578935686e-03f, 3.575987253e-03f, 3.573032788e-03f, 3.570072295e-03f, 3.567105781e-03f, 3.564133251e-03f, 3.561154710e-03f, 3.558170163e-03f, 3.555179617e-03f,
-3.552183076e-03f, 3.549180546e-03f, 3.546172033e-03f, 3.543157542e-03f, 3.540137078e-03f, 3.537110647e-03f, 3.534078255e-03f, 3.531039907e-03f, 3.527995608e-03f, 3.524945365e-03f,
-3.521889183e-03f, 3.518827067e-03f, 3.515759022e-03f, 3.512685056e-03f, 3.509605172e-03f, 3.506519378e-03f, 3.503427677e-03f, 3.500330077e-03f, 3.497226582e-03f, 3.494117199e-03f,
-3.491001933e-03f, 3.487880789e-03f, 3.484753774e-03f, 3.481620893e-03f, 3.478482151e-03f, 3.475337555e-03f, 3.472187111e-03f, 3.469030823e-03f, 3.465868698e-03f, 3.462700741e-03f,
-3.459526959e-03f, 3.456347356e-03f, 3.453161939e-03f, 3.449970714e-03f, 3.446773687e-03f, 3.443570862e-03f, 3.440362247e-03f, 3.437147846e-03f, 3.433927666e-03f, 3.430701712e-03f,
-3.427469991e-03f, 3.424232509e-03f, 3.420989270e-03f, 3.417740281e-03f, 3.414485549e-03f, 3.411225078e-03f, 3.407958875e-03f, 3.404686946e-03f, 3.401409296e-03f, 3.398125932e-03f,
-3.394836860e-03f, 3.391542085e-03f, 3.388241614e-03f, 3.384935452e-03f, 3.381623605e-03f, 3.378306080e-03f, 3.374982883e-03f, 3.371654019e-03f, 3.368319495e-03f, 3.364979316e-03f,
-3.361633489e-03f, 3.358282020e-03f, 3.354924915e-03f, 3.351562179e-03f, 3.348193820e-03f, 3.344819842e-03f, 3.341440253e-03f, 3.338055058e-03f, 3.334664264e-03f, 3.331267876e-03f,
-3.327865901e-03f, 3.324458345e-03f, 3.321045214e-03f, 3.317626514e-03f, 3.314202251e-03f, 3.310772432e-03f, 3.307337063e-03f, 3.303896150e-03f, 3.300449700e-03f, 3.296997718e-03f,
-3.293540210e-03f, 3.290077184e-03f, 3.286608644e-03f, 3.283134599e-03f, 3.279655053e-03f, 3.276170013e-03f, 3.272679485e-03f, 3.269183477e-03f, 3.265681993e-03f, 3.262175041e-03f,
-3.258662626e-03f, 3.255144755e-03f, 3.251621435e-03f, 3.248092671e-03f, 3.244558470e-03f, 3.241018839e-03f, 3.237473784e-03f, 3.233923311e-03f, 3.230367426e-03f, 3.226806137e-03f,
-3.223239449e-03f, 3.219667369e-03f, 3.216089903e-03f, 3.212507059e-03f, 3.208918841e-03f, 3.205325257e-03f, 3.201726314e-03f, 3.198122017e-03f, 3.194512374e-03f, 3.190897390e-03f,
-3.187277072e-03f, 3.183651427e-03f, 3.180020462e-03f, 3.176384182e-03f, 3.172742594e-03f, 3.169095706e-03f, 3.165443523e-03f, 3.161786052e-03f, 3.158123299e-03f, 3.154455272e-03f,
-3.150781977e-03f, 3.147103420e-03f, 3.143419609e-03f, 3.139730549e-03f, 3.136036247e-03f, 3.132336711e-03f, 3.128631946e-03f, 3.124921959e-03f, 3.121206757e-03f, 3.117486347e-03f,
-3.113760736e-03f, 3.110029929e-03f, 3.106293934e-03f, 3.102552758e-03f, 3.098806406e-03f, 3.095054887e-03f, 3.091298207e-03f, 3.087536371e-03f, 3.083769388e-03f, 3.079997264e-03f,
-3.076220006e-03f, 3.072437620e-03f, 3.068650113e-03f, 3.064857493e-03f, 3.061059765e-03f, 3.057256937e-03f, 3.053449016e-03f, 3.049636008e-03f, 3.045817920e-03f, 3.041994760e-03f,
-3.038166533e-03f, 3.034333247e-03f, 3.030494909e-03f, 3.026651525e-03f, 3.022803103e-03f, 3.018949649e-03f, 3.015091171e-03f, 3.011227674e-03f, 3.007359167e-03f, 3.003485656e-03f,
-2.999607147e-03f, 2.995723649e-03f, 2.991835168e-03f, 2.987941710e-03f, 2.984043284e-03f, 2.980139895e-03f, 2.976231551e-03f, 2.972318259e-03f, 2.968400026e-03f, 2.964476858e-03f,
-2.960548764e-03f, 2.956615749e-03f, 2.952677821e-03f, 2.948734988e-03f, 2.944787255e-03f, 2.940834631e-03f, 2.936877122e-03f, 2.932914735e-03f, 2.928947477e-03f, 2.924975356e-03f,
-2.920998379e-03f, 2.917016552e-03f, 2.913029883e-03f, 2.909038379e-03f, 2.905042047e-03f, 2.901040895e-03f, 2.897034929e-03f, 2.893024156e-03f, 2.889008584e-03f, 2.884988220e-03f,
-2.880963071e-03f, 2.876933145e-03f, 2.872898448e-03f, 2.868858987e-03f, 2.864814771e-03f, 2.860765806e-03f, 2.856712099e-03f, 2.852653658e-03f, 2.848590489e-03f, 2.844522601e-03f,
-2.840450000e-03f, 2.836372694e-03f, 2.832290690e-03f, 2.828203995e-03f, 2.824112617e-03f, 2.820016562e-03f, 2.815915839e-03f, 2.811810454e-03f, 2.807700415e-03f, 2.803585729e-03f,
-2.799466404e-03f, 2.795342446e-03f, 2.791213864e-03f, 2.787080664e-03f, 2.782942854e-03f, 2.778800441e-03f, 2.774653434e-03f, 2.770501838e-03f, 2.766345661e-03f, 2.762184912e-03f,
-2.758019597e-03f, 2.753849724e-03f, 2.749675300e-03f, 2.745496332e-03f, 2.741312829e-03f, 2.737124797e-03f, 2.732932244e-03f, 2.728735178e-03f, 2.724533605e-03f, 2.720327534e-03f,
-2.716116972e-03f, 2.711901927e-03f, 2.707682405e-03f, 2.703458415e-03f, 2.699229963e-03f, 2.694997059e-03f, 2.690759708e-03f, 2.686517919e-03f, 2.682271699e-03f, 2.678021056e-03f,
-2.673765997e-03f, 2.669506529e-03f, 2.665242662e-03f, 2.660974401e-03f, 2.656701755e-03f, 2.652424731e-03f, 2.648143336e-03f, 2.643857580e-03f, 2.639567468e-03f, 2.635273009e-03f,
-2.630974210e-03f, 2.626671080e-03f, 2.622363625e-03f, 2.618051853e-03f, 2.613735772e-03f, 2.609415390e-03f, 2.605090714e-03f, 2.600761752e-03f, 2.596428512e-03f, 2.592091001e-03f,
-2.587749227e-03f, 2.583403199e-03f, 2.579052922e-03f, 2.574698406e-03f, 2.570339658e-03f, 2.565976686e-03f, 2.561609497e-03f, 2.557238099e-03f, 2.552862501e-03f, 2.548482709e-03f,
-2.544098732e-03f, 2.539710577e-03f, 2.535318252e-03f, 2.530921765e-03f, 2.526521124e-03f, 2.522116337e-03f, 2.517707411e-03f, 2.513294354e-03f, 2.508877174e-03f, 2.504455879e-03f,
-2.500030477e-03f, 2.495600975e-03f, 2.491167382e-03f, 2.486729705e-03f, 2.482287953e-03f, 2.477842132e-03f, 2.473392251e-03f, 2.468938318e-03f, 2.464480341e-03f, 2.460018328e-03f,
-2.455552286e-03f, 2.451082223e-03f, 2.446608148e-03f, 2.442130068e-03f, 2.437647992e-03f, 2.433161927e-03f, 2.428671881e-03f, 2.424177862e-03f, 2.419679878e-03f, 2.415177937e-03f,
-2.410672047e-03f, 2.406162216e-03f, 2.401648453e-03f, 2.397130764e-03f, 2.392609158e-03f, 2.388083643e-03f, 2.383554228e-03f, 2.379020919e-03f, 2.374483726e-03f, 2.369942655e-03f,
-2.365397716e-03f, 2.360848916e-03f, 2.356296263e-03f, 2.351739766e-03f, 2.347179432e-03f, 2.342615269e-03f, 2.338047286e-03f, 2.333475490e-03f, 2.328899891e-03f, 2.324320495e-03f,
-2.319737311e-03f, 2.315150347e-03f, 2.310559611e-03f, 2.305965112e-03f, 2.301366856e-03f, 2.296764854e-03f, 2.292159112e-03f, 2.287549639e-03f, 2.282936442e-03f, 2.278319531e-03f,
-2.273698914e-03f, 2.269074597e-03f, 2.264446591e-03f, 2.259814902e-03f, 2.255179539e-03f, 2.250540510e-03f, 2.245897824e-03f, 2.241251488e-03f, 2.236601511e-03f, 2.231947901e-03f,
-2.227290667e-03f, 2.222629816e-03f, 2.217965356e-03f, 2.213297297e-03f, 2.208625646e-03f, 2.203950411e-03f, 2.199271601e-03f, 2.194589224e-03f, 2.189903288e-03f, 2.185213802e-03f,
-2.180520773e-03f, 2.175824211e-03f, 2.171124123e-03f, 2.166420518e-03f, 2.161713404e-03f, 2.157002789e-03f, 2.152288681e-03f, 2.147571090e-03f, 2.142850023e-03f, 2.138125488e-03f,
-2.133397494e-03f, 2.128666050e-03f, 2.123931163e-03f, 2.119192843e-03f, 2.114451096e-03f, 2.109705933e-03f, 2.104957360e-03f, 2.100205387e-03f, 2.095450021e-03f, 2.090691272e-03f,
-2.085929148e-03f, 2.081163656e-03f, 2.076394806e-03f, 2.071622606e-03f, 2.066847064e-03f, 2.062068189e-03f, 2.057285988e-03f, 2.052500472e-03f, 2.047711647e-03f, 2.042919523e-03f,
-2.038124107e-03f, 2.033325409e-03f, 2.028523436e-03f, 2.023718198e-03f, 2.018909702e-03f, 2.014097958e-03f, 2.009282973e-03f, 2.004464756e-03f, 1.999643316e-03f, 1.994818661e-03f,
-1.989990800e-03f, 1.985159740e-03f, 1.980325491e-03f, 1.975488062e-03f, 1.970647460e-03f, 1.965803694e-03f, 1.960956773e-03f, 1.956106705e-03f, 1.951253499e-03f, 1.946397163e-03f,
-1.941537706e-03f, 1.936675136e-03f, 1.931809462e-03f, 1.926940693e-03f, 1.922068837e-03f, 1.917193903e-03f, 1.912315898e-03f, 1.907434833e-03f, 1.902550715e-03f, 1.897663553e-03f,
-1.892773356e-03f, 1.887880132e-03f, 1.882983890e-03f, 1.878084638e-03f, 1.873182385e-03f, 1.868277140e-03f, 1.863368911e-03f, 1.858457707e-03f, 1.853543537e-03f, 1.848626409e-03f,
-1.843706331e-03f, 1.838783313e-03f, 1.833857364e-03f, 1.828928491e-03f, 1.823996704e-03f, 1.819062010e-03f, 1.814124420e-03f, 1.809183941e-03f, 1.804240582e-03f, 1.799294352e-03f,
-1.794345260e-03f, 1.789393314e-03f, 1.784438523e-03f, 1.779480895e-03f, 1.774520440e-03f, 1.769557166e-03f, 1.764591082e-03f, 1.759622196e-03f, 1.754650518e-03f, 1.749676055e-03f,
-1.744698818e-03f, 1.739718813e-03f, 1.734736051e-03f, 1.729750540e-03f, 1.724762288e-03f, 1.719771305e-03f, 1.714777600e-03f, 1.709781180e-03f, 1.704782055e-03f, 1.699780233e-03f,
-1.694775724e-03f, 1.689768536e-03f, 1.684758677e-03f, 1.679746158e-03f, 1.674730985e-03f, 1.669713169e-03f, 1.664692719e-03f, 1.659669642e-03f, 1.654643947e-03f, 1.649615645e-03f,
-1.644584742e-03f, 1.639551249e-03f, 1.634515173e-03f, 1.629476525e-03f, 1.624435312e-03f, 1.619391543e-03f, 1.614345228e-03f, 1.609296375e-03f, 1.604244993e-03f, 1.599191091e-03f,
-1.594134678e-03f, 1.589075762e-03f, 1.584014353e-03f, 1.578950459e-03f, 1.573884089e-03f, 1.568815253e-03f, 1.563743958e-03f, 1.558670214e-03f, 1.553594030e-03f, 1.548515415e-03f,
-1.543434377e-03f, 1.538350926e-03f, 1.533265070e-03f, 1.528176818e-03f, 1.523086180e-03f, 1.517993163e-03f, 1.512897778e-03f, 1.507800032e-03f, 1.502699935e-03f, 1.497597497e-03f,
-1.492492724e-03f, 1.487385628e-03f, 1.482276216e-03f, 1.477164498e-03f, 1.472050482e-03f, 1.466934178e-03f, 1.461815594e-03f, 1.456694739e-03f, 1.451571623e-03f, 1.446446254e-03f,
-1.441318642e-03f, 1.436188794e-03f, 1.431056721e-03f, 1.425922431e-03f, 1.420785933e-03f, 1.415647237e-03f, 1.410506350e-03f, 1.405363283e-03f, 1.400218044e-03f, 1.395070642e-03f,
-1.389921086e-03f, 1.384769386e-03f, 1.379615549e-03f, 1.374459586e-03f, 1.369301505e-03f, 1.364141315e-03f, 1.358979026e-03f, 1.353814645e-03f, 1.348648183e-03f, 1.343479649e-03f,
-1.338309050e-03f, 1.333136397e-03f, 1.327961699e-03f, 1.322784964e-03f, 1.317606202e-03f, 1.312425421e-03f, 1.307242631e-03f, 1.302057840e-03f, 1.296871059e-03f, 1.291682295e-03f,
-1.286491558e-03f, 1.281298857e-03f, 1.276104201e-03f, 1.270907599e-03f, 1.265709060e-03f, 1.260508594e-03f, 1.255306209e-03f, 1.250101914e-03f, 1.244895719e-03f, 1.239687633e-03f,
-1.234477664e-03f, 1.229265822e-03f, 1.224052116e-03f, 1.218836555e-03f, 1.213619148e-03f, 1.208399905e-03f, 1.203178833e-03f, 1.197955944e-03f, 1.192731244e-03f, 1.187504745e-03f,
-1.182276454e-03f, 1.177046381e-03f, 1.171814535e-03f, 1.166580926e-03f, 1.161345562e-03f, 1.156108452e-03f, 1.150869606e-03f, 1.145629032e-03f, 1.140386741e-03f, 1.135142740e-03f,
-1.129897040e-03f, 1.124649649e-03f, 1.119400577e-03f, 1.114149832e-03f, 1.108897424e-03f, 1.103643361e-03f, 1.098387654e-03f, 1.093130312e-03f, 1.087871342e-03f, 1.082610756e-03f,
-1.077348561e-03f, 1.072084767e-03f, 1.066819383e-03f, 1.061552419e-03f, 1.056283883e-03f, 1.051013785e-03f, 1.045742133e-03f, 1.040468938e-03f, 1.035194208e-03f, 1.029917952e-03f,
-1.024640180e-03f, 1.019360901e-03f, 1.014080124e-03f, 1.008797858e-03f, 1.003514113e-03f, 9.982288969e-04f, 9.929422200e-04f, 9.876540910e-04f, 9.823645194e-04f, 9.770735142e-04f,
-9.717810847e-04f, 9.664872402e-04f, 9.611919897e-04f, 9.558953426e-04f, 9.505973081e-04f, 9.452978954e-04f, 9.399971138e-04f, 9.346949723e-04f, 9.293914804e-04f, 9.240866472e-04f,
-9.187804819e-04f, 9.134729939e-04f, 9.081641923e-04f, 9.028540863e-04f, 8.975426852e-04f, 8.922299984e-04f, 8.869160349e-04f, 8.816008040e-04f, 8.762843151e-04f, 8.709665773e-04f,
-8.656475999e-04f, 8.603273921e-04f, 8.550059633e-04f, 8.496833226e-04f, 8.443594794e-04f, 8.390344428e-04f, 8.337082222e-04f, 8.283808268e-04f, 8.230522659e-04f, 8.177225488e-04f,
-8.123916846e-04f, 8.070596827e-04f, 8.017265524e-04f, 7.963923029e-04f, 7.910569435e-04f, 7.857204835e-04f, 7.803829321e-04f, 7.750442987e-04f, 7.697045925e-04f, 7.643638228e-04f,
-7.590219988e-04f, 7.536791300e-04f, 7.483352254e-04f, 7.429902945e-04f, 7.376443465e-04f, 7.322973908e-04f, 7.269494365e-04f, 7.216004930e-04f, 7.162505697e-04f, 7.108996757e-04f,
-7.055478203e-04f, 7.001950130e-04f, 6.948412629e-04f, 6.894865794e-04f, 6.841309718e-04f, 6.787744493e-04f, 6.734170214e-04f, 6.680586972e-04f, 6.626994860e-04f, 6.573393973e-04f,
-6.519784403e-04f, 6.466166243e-04f, 6.412539586e-04f, 6.358904525e-04f, 6.305261153e-04f, 6.251609564e-04f, 6.197949851e-04f, 6.144282107e-04f, 6.090606424e-04f, 6.036922896e-04f,
-5.983231617e-04f, 5.929532679e-04f, 5.875826175e-04f, 5.822112200e-04f, 5.768390845e-04f, 5.714662204e-04f, 5.660926371e-04f, 5.607183439e-04f, 5.553433500e-04f, 5.499676648e-04f,
-5.445912977e-04f, 5.392142579e-04f, 5.338365548e-04f, 5.284581978e-04f, 5.230791960e-04f, 5.176995590e-04f, 5.123192959e-04f, 5.069384161e-04f, 5.015569290e-04f, 4.961748439e-04f,
-4.907921701e-04f, 4.854089170e-04f, 4.800250938e-04f, 4.746407099e-04f, 4.692557747e-04f, 4.638702975e-04f, 4.584842876e-04f, 4.530977543e-04f, 4.477107070e-04f, 4.423231550e-04f,
-4.369351077e-04f, 4.315465744e-04f, 4.261575644e-04f, 4.207680870e-04f, 4.153781517e-04f, 4.099877677e-04f, 4.045969443e-04f, 3.992056910e-04f, 3.938140170e-04f, 3.884219318e-04f,
-3.830294445e-04f, 3.776365647e-04f, 3.722433015e-04f, 3.668496644e-04f, 3.614556626e-04f, 3.560613056e-04f, 3.506666027e-04f, 3.452715632e-04f, 3.398761964e-04f, 3.344805117e-04f,
-3.290845184e-04f, 3.236882260e-04f, 3.182916436e-04f, 3.128947807e-04f, 3.074976465e-04f, 3.021002505e-04f, 2.967026020e-04f, 2.913047103e-04f, 2.859065847e-04f, 2.805082347e-04f,
-2.751096694e-04f, 2.697108984e-04f, 2.643119308e-04f, 2.589127762e-04f, 2.535134437e-04f, 2.481139427e-04f, 2.427142827e-04f, 2.373144728e-04f, 2.319145225e-04f, 2.265144411e-04f,
-2.211142379e-04f, 2.157139223e-04f, 2.103135036e-04f, 2.049129912e-04f, 1.995123943e-04f, 1.941117224e-04f, 1.887109847e-04f, 1.833101906e-04f, 1.779093495e-04f, 1.725084706e-04f,
-1.671075633e-04f, 1.617066370e-04f, 1.563057009e-04f, 1.509047645e-04f, 1.455038369e-04f, 1.401029277e-04f, 1.347020461e-04f, 1.293012014e-04f, 1.239004029e-04f, 1.184996601e-04f,
-1.130989822e-04f, 1.076983786e-04f, 1.022978586e-04f, 9.689743148e-05f, 9.149710662e-05f, 8.609689334e-05f, 8.069680096e-05f, 7.529683882e-05f, 6.989701623e-05f, 6.449734252e-05f,
-5.909782701e-05f, 5.369847904e-05f, 4.829930791e-05f, 4.290032296e-05f, 3.750153350e-05f, 3.210294886e-05f, 2.670457835e-05f, 2.130643129e-05f, 1.590851700e-05f, 1.051084480e-05f,
-5.113424005e-06f, -2.837360749e-07f, -5.680626123e-06f, -1.107723682e-05f, -1.647355887e-05f, -2.186958295e-05f, -2.726529974e-05f, -3.266069995e-05f, -3.805577426e-05f, -4.345051336e-05f,
--4.884490796e-05f, -5.423894874e-05f, -5.963262640e-05f, -6.502593163e-05f, -7.041885514e-05f, -7.581138763e-05f, -8.120351979e-05f, -8.659524232e-05f, -9.198654594e-05f, -9.737742133e-05f,
--1.027678592e-04f, -1.081578503e-04f, -1.135473853e-04f, -1.189364549e-04f, -1.243250498e-04f, -1.297131607e-04f, -1.351007784e-04f, -1.404878935e-04f, -1.458744968e-04f, -1.512605790e-04f,
--1.566461309e-04f, -1.620311430e-04f, -1.674156062e-04f, -1.727995111e-04f, -1.781828486e-04f, -1.835656093e-04f, -1.889477839e-04f, -1.943293632e-04f, -1.997103378e-04f, -2.050906987e-04f,
--2.104704363e-04f, -2.158495416e-04f, -2.212280053e-04f, -2.266058180e-04f, -2.319829705e-04f, -2.373594535e-04f, -2.427352579e-04f, -2.481103743e-04f, -2.534847934e-04f, -2.588585061e-04f,
--2.642315031e-04f, -2.696037751e-04f, -2.749753129e-04f, -2.803461072e-04f, -2.857161488e-04f, -2.910854285e-04f, -2.964539369e-04f, -3.018216650e-04f, -3.071886033e-04f, -3.125547428e-04f,
--3.179200741e-04f, -3.232845880e-04f, -3.286482754e-04f, -3.340111269e-04f, -3.393731333e-04f, -3.447342855e-04f, -3.500945742e-04f, -3.554539901e-04f, -3.608125241e-04f, -3.661701670e-04f,
--3.715269094e-04f, -3.768827423e-04f, -3.822376564e-04f, -3.875916425e-04f, -3.929446914e-04f, -3.982967939e-04f, -4.036479407e-04f, -4.089981228e-04f, -4.143473308e-04f, -4.196955556e-04f,
--4.250427880e-04f, -4.303890188e-04f, -4.357342389e-04f, -4.410784389e-04f, -4.464216098e-04f, -4.517637424e-04f, -4.571048275e-04f, -4.624448558e-04f, -4.677838183e-04f, -4.731217057e-04f,
--4.784585090e-04f, -4.837942188e-04f, -4.891288261e-04f, -4.944623217e-04f, -4.997946964e-04f, -5.051259410e-04f, -5.104560465e-04f, -5.157850036e-04f, -5.211128032e-04f, -5.264394362e-04f,
--5.317648934e-04f, -5.370891656e-04f, -5.424122438e-04f, -5.477341187e-04f, -5.530547813e-04f, -5.583742224e-04f, -5.636924328e-04f, -5.690094035e-04f, -5.743251254e-04f, -5.796395892e-04f,
--5.849527859e-04f, -5.902647063e-04f, -5.955753414e-04f, -6.008846820e-04f, -6.061927190e-04f, -6.114994433e-04f, -6.168048458e-04f, -6.221089175e-04f, -6.274116491e-04f, -6.327130316e-04f,
--6.380130559e-04f, -6.433117130e-04f, -6.486089937e-04f, -6.539048889e-04f, -6.591993895e-04f, -6.644924866e-04f, -6.697841709e-04f, -6.750744335e-04f, -6.803632652e-04f, -6.856506570e-04f,
--6.909365999e-04f, -6.962210846e-04f, -7.015041023e-04f, -7.067856439e-04f, -7.120657002e-04f, -7.173442622e-04f, -7.226213210e-04f, -7.278968674e-04f, -7.331708923e-04f, -7.384433869e-04f,
--7.437143420e-04f, -7.489837486e-04f, -7.542515976e-04f, -7.595178801e-04f, -7.647825870e-04f, -7.700457093e-04f, -7.753072380e-04f, -7.805671641e-04f, -7.858254785e-04f, -7.910821723e-04f,
--7.963372364e-04f, -8.015906619e-04f, -8.068424397e-04f, -8.120925609e-04f, -8.173410165e-04f, -8.225877974e-04f, -8.278328948e-04f, -8.330762995e-04f, -8.383180027e-04f, -8.435579954e-04f,
--8.487962685e-04f, -8.540328132e-04f, -8.592676205e-04f, -8.645006814e-04f, -8.697319869e-04f, -8.749615281e-04f, -8.801892961e-04f, -8.854152818e-04f, -8.906394765e-04f, -8.958618710e-04f,
--9.010824565e-04f, -9.063012241e-04f, -9.115181648e-04f, -9.167332698e-04f, -9.219465300e-04f, -9.271579365e-04f, -9.323674805e-04f, -9.375751531e-04f, -9.427809453e-04f, -9.479848482e-04f,
--9.531868530e-04f, -9.583869506e-04f, -9.635851324e-04f, -9.687813893e-04f, -9.739757124e-04f, -9.791680930e-04f, -9.843585221e-04f, -9.895469908e-04f, -9.947334903e-04f, -9.999180117e-04f,
--1.005100546e-03f, -1.010281085e-03f, -1.015459619e-03f, -1.020636139e-03f, -1.025810638e-03f, -1.030983104e-03f, -1.036153531e-03f, -1.041321909e-03f, -1.046488230e-03f, -1.051652484e-03f,
--1.056814662e-03f, -1.061974756e-03f, -1.067132758e-03f, -1.072288657e-03f, -1.077442446e-03f, -1.082594116e-03f, -1.087743657e-03f, -1.092891062e-03f, -1.098036320e-03f, -1.103179425e-03f,
--1.108320365e-03f, -1.113459134e-03f, -1.118595722e-03f, -1.123730120e-03f, -1.128862320e-03f, -1.133992312e-03f, -1.139120089e-03f, -1.144245641e-03f, -1.149368959e-03f, -1.154490036e-03f,
--1.159608861e-03f, -1.164725427e-03f, -1.169839725e-03f, -1.174951745e-03f, -1.180061479e-03f, -1.185168919e-03f, -1.190274056e-03f, -1.195376881e-03f, -1.200477385e-03f, -1.205575560e-03f,
--1.210671397e-03f, -1.215764887e-03f, -1.220856021e-03f, -1.225944792e-03f, -1.231031190e-03f, -1.236115206e-03f, -1.241196832e-03f, -1.246276059e-03f, -1.251352879e-03f, -1.256427283e-03f,
--1.261499262e-03f, -1.266568808e-03f, -1.271635912e-03f, -1.276700565e-03f, -1.281762759e-03f, -1.286822484e-03f, -1.291879734e-03f, -1.296934498e-03f, -1.301986768e-03f, -1.307036536e-03f,
--1.312083793e-03f, -1.317128531e-03f, -1.322170740e-03f, -1.327210413e-03f, -1.332247540e-03f, -1.337282114e-03f, -1.342314124e-03f, -1.347343564e-03f, -1.352370424e-03f, -1.357394697e-03f,
--1.362416372e-03f, -1.367435442e-03f, -1.372451898e-03f, -1.377465732e-03f, -1.382476935e-03f, -1.387485499e-03f, -1.392491414e-03f, -1.397494673e-03f, -1.402495268e-03f, -1.407493188e-03f,
--1.412488427e-03f, -1.417480975e-03f, -1.422470825e-03f, -1.427457967e-03f, -1.432442392e-03f, -1.437424094e-03f, -1.442403062e-03f, -1.447379290e-03f, -1.452352767e-03f, -1.457323486e-03f,
--1.462291438e-03f, -1.467256615e-03f, -1.472219009e-03f, -1.477178610e-03f, -1.482135411e-03f, -1.487089403e-03f, -1.492040578e-03f, -1.496988927e-03f, -1.501934442e-03f, -1.506877114e-03f,
--1.511816935e-03f, -1.516753897e-03f, -1.521687991e-03f, -1.526619209e-03f, -1.531547542e-03f, -1.536472982e-03f, -1.541395522e-03f, -1.546315151e-03f, -1.551231863e-03f, -1.556145648e-03f,
--1.561056499e-03f, -1.565964406e-03f, -1.570869362e-03f, -1.575771359e-03f, -1.580670387e-03f, -1.585566440e-03f, -1.590459507e-03f, -1.595349582e-03f, -1.600236655e-03f, -1.605120719e-03f,
--1.610001765e-03f, -1.614879785e-03f, -1.619754770e-03f, -1.624626713e-03f, -1.629495605e-03f, -1.634361438e-03f, -1.639224203e-03f, -1.644083893e-03f, -1.648940498e-03f, -1.653794012e-03f,
--1.658644425e-03f, -1.663491729e-03f, -1.668335917e-03f, -1.673176979e-03f, -1.678014908e-03f, -1.682849696e-03f, -1.687681334e-03f, -1.692509814e-03f, -1.697335128e-03f, -1.702157267e-03f,
--1.706976224e-03f, -1.711791991e-03f, -1.716604559e-03f, -1.721413920e-03f, -1.726220066e-03f, -1.731022989e-03f, -1.735822680e-03f, -1.740619132e-03f, -1.745412336e-03f, -1.750202284e-03f,
--1.754988969e-03f, -1.759772382e-03f, -1.764552514e-03f, -1.769329359e-03f, -1.774102907e-03f, -1.778873151e-03f, -1.783640082e-03f, -1.788403693e-03f, -1.793163975e-03f, -1.797920921e-03f,
--1.802674522e-03f, -1.807424771e-03f, -1.812171658e-03f, -1.816915177e-03f, -1.821655319e-03f, -1.826392076e-03f, -1.831125440e-03f, -1.835855404e-03f, -1.840581958e-03f, -1.845305096e-03f,
--1.850024809e-03f, -1.854741089e-03f, -1.859453928e-03f, -1.864163318e-03f, -1.868869252e-03f, -1.873571720e-03f, -1.878270717e-03f, -1.882966232e-03f, -1.887658259e-03f, -1.892346789e-03f,
--1.897031815e-03f, -1.901713329e-03f, -1.906391322e-03f, -1.911065787e-03f, -1.915736716e-03f, -1.920404101e-03f, -1.925067935e-03f, -1.929728208e-03f, -1.934384914e-03f, -1.939038044e-03f,
--1.943687591e-03f, -1.948333547e-03f, -1.952975904e-03f, -1.957614654e-03f, -1.962249789e-03f, -1.966881301e-03f, -1.971509183e-03f, -1.976133427e-03f, -1.980754025e-03f, -1.985370969e-03f,
--1.989984252e-03f, -1.994593865e-03f, -1.999199800e-03f, -2.003802051e-03f, -2.008400609e-03f, -2.012995467e-03f, -2.017586616e-03f, -2.022174050e-03f, -2.026757759e-03f, -2.031337737e-03f,
--2.035913976e-03f, -2.040486468e-03f, -2.045055206e-03f, -2.049620181e-03f, -2.054181386e-03f, -2.058738813e-03f, -2.063292455e-03f, -2.067842303e-03f, -2.072388351e-03f, -2.076930590e-03f,
--2.081469014e-03f, -2.086003613e-03f, -2.090534381e-03f, -2.095061310e-03f, -2.099584393e-03f, -2.104103621e-03f, -2.108618987e-03f, -2.113130483e-03f, -2.117638103e-03f, -2.122141838e-03f,
--2.126641680e-03f, -2.131137622e-03f, -2.135629657e-03f, -2.140117777e-03f, -2.144601975e-03f, -2.149082242e-03f, -2.153558571e-03f, -2.158030955e-03f, -2.162499387e-03f, -2.166963858e-03f,
--2.171424361e-03f, -2.175880889e-03f, -2.180333434e-03f, -2.184781989e-03f, -2.189226546e-03f, -2.193667098e-03f, -2.198103637e-03f, -2.202536155e-03f, -2.206964646e-03f, -2.211389102e-03f,
--2.215809515e-03f, -2.220225879e-03f, -2.224638184e-03f, -2.229046425e-03f, -2.233450594e-03f, -2.237850682e-03f, -2.242246684e-03f, -2.246638591e-03f, -2.251026397e-03f, -2.255410093e-03f,
--2.259789672e-03f, -2.264165127e-03f, -2.268536452e-03f, -2.272903637e-03f, -2.277266676e-03f, -2.281625562e-03f, -2.285980287e-03f, -2.290330845e-03f, -2.294677226e-03f, -2.299019426e-03f,
--2.303357435e-03f, -2.307691247e-03f, -2.312020855e-03f, -2.316346251e-03f, -2.320667428e-03f, -2.324984378e-03f, -2.329297095e-03f, -2.333605571e-03f, -2.337909800e-03f, -2.342209772e-03f,
--2.346505483e-03f, -2.350796924e-03f, -2.355084088e-03f, -2.359366968e-03f, -2.363645556e-03f, -2.367919847e-03f, -2.372189831e-03f, -2.376455503e-03f, -2.380716855e-03f, -2.384973880e-03f,
--2.389226571e-03f, -2.393474920e-03f, -2.397718921e-03f, -2.401958566e-03f, -2.406193849e-03f, -2.410424761e-03f, -2.414651297e-03f, -2.418873449e-03f, -2.423091210e-03f, -2.427304573e-03f,
--2.431513530e-03f, -2.435718076e-03f, -2.439918202e-03f, -2.444113901e-03f, -2.448305168e-03f, -2.452491994e-03f, -2.456674372e-03f, -2.460852296e-03f, -2.465025759e-03f, -2.469194754e-03f,
--2.473359273e-03f, -2.477519309e-03f, -2.481674857e-03f, -2.485825908e-03f, -2.489972456e-03f, -2.494114494e-03f, -2.498252014e-03f, -2.502385011e-03f, -2.506513477e-03f, -2.510637405e-03f,
--2.514756788e-03f, -2.518871620e-03f, -2.522981893e-03f, -2.527087601e-03f, -2.531188736e-03f, -2.535285293e-03f, -2.539377263e-03f, -2.543464641e-03f, -2.547547419e-03f, -2.551625590e-03f,
--2.555699149e-03f, -2.559768087e-03f, -2.563832398e-03f, -2.567892076e-03f, -2.571947113e-03f, -2.575997503e-03f, -2.580043239e-03f, -2.584084314e-03f, -2.588120722e-03f, -2.592152455e-03f,
--2.596179508e-03f, -2.600201872e-03f, -2.604219542e-03f, -2.608232512e-03f, -2.612240773e-03f, -2.616244320e-03f, -2.620243145e-03f, -2.624237243e-03f, -2.628226606e-03f, -2.632211228e-03f,
--2.636191102e-03f, -2.640166221e-03f, -2.644136580e-03f, -2.648102170e-03f, -2.652062986e-03f, -2.656019022e-03f, -2.659970269e-03f, -2.663916723e-03f, -2.667858375e-03f, -2.671795221e-03f,
--2.675727252e-03f, -2.679654463e-03f, -2.683576848e-03f, -2.687494398e-03f, -2.691407109e-03f, -2.695314973e-03f, -2.699217984e-03f, -2.703116135e-03f, -2.707009420e-03f, -2.710897833e-03f,
--2.714781366e-03f, -2.718660015e-03f, -2.722533771e-03f, -2.726402628e-03f, -2.730266581e-03f, -2.734125623e-03f, -2.737979747e-03f, -2.741828947e-03f, -2.745673216e-03f, -2.749512548e-03f,
--2.753346937e-03f, -2.757176376e-03f, -2.761000860e-03f, -2.764820380e-03f, -2.768634932e-03f, -2.772444509e-03f, -2.776249105e-03f, -2.780048712e-03f, -2.783843326e-03f, -2.787632939e-03f,
--2.791417545e-03f, -2.795197139e-03f, -2.798971713e-03f, -2.802741261e-03f, -2.806505778e-03f, -2.810265257e-03f, -2.814019691e-03f, -2.817769075e-03f, -2.821513402e-03f, -2.825252666e-03f,
--2.828986861e-03f, -2.832715980e-03f, -2.836440018e-03f, -2.840158968e-03f, -2.843872824e-03f, -2.847581580e-03f, -2.851285230e-03f, -2.854983767e-03f, -2.858677186e-03f, -2.862365480e-03f,
--2.866048643e-03f, -2.869726670e-03f, -2.873399553e-03f, -2.877067287e-03f, -2.880729866e-03f, -2.884387284e-03f, -2.888039535e-03f, -2.891686612e-03f, -2.895328510e-03f, -2.898965222e-03f,
--2.902596743e-03f, -2.906223066e-03f, -2.909844186e-03f, -2.913460096e-03f, -2.917070791e-03f, -2.920676265e-03f, -2.924276511e-03f, -2.927871523e-03f, -2.931461297e-03f, -2.935045825e-03f,
--2.938625102e-03f, -2.942199121e-03f, -2.945767878e-03f, -2.949331366e-03f, -2.952889578e-03f, -2.956442511e-03f, -2.959990156e-03f, -2.963532509e-03f, -2.967069564e-03f, -2.970601314e-03f,
--2.974127755e-03f, -2.977648879e-03f, -2.981164682e-03f, -2.984675158e-03f, -2.988180300e-03f, -2.991680103e-03f, -2.995174561e-03f, -2.998663669e-03f, -3.002147420e-03f, -3.005625810e-03f,
--3.009098831e-03f, -3.012566479e-03f, -3.016028747e-03f, -3.019485630e-03f, -3.022937123e-03f, -3.026383219e-03f, -3.029823913e-03f, -3.033259199e-03f, -3.036689071e-03f, -3.040113525e-03f,
--3.043532554e-03f, -3.046946152e-03f, -3.050354314e-03f, -3.053757035e-03f, -3.057154308e-03f, -3.060546129e-03f, -3.063932491e-03f, -3.067313388e-03f, -3.070688817e-03f, -3.074058770e-03f,
--3.077423242e-03f, -3.080782229e-03f, -3.084135723e-03f, -3.087483720e-03f, -3.090826214e-03f, -3.094163200e-03f, -3.097494672e-03f, -3.100820625e-03f, -3.104141053e-03f, -3.107455951e-03f,
--3.110765313e-03f, -3.114069134e-03f, -3.117367409e-03f, -3.120660131e-03f, -3.123947296e-03f, -3.127228898e-03f, -3.130504932e-03f, -3.133775393e-03f, -3.137040274e-03f, -3.140299572e-03f,
--3.143553279e-03f, -3.146801392e-03f, -3.150043904e-03f, -3.153280811e-03f, -3.156512106e-03f, -3.159737786e-03f, -3.162957843e-03f, -3.166172274e-03f, -3.169381073e-03f, -3.172584234e-03f,
--3.175781753e-03f, -3.178973624e-03f, -3.182159842e-03f, -3.185340401e-03f, -3.188515297e-03f, -3.191684524e-03f, -3.194848077e-03f, -3.198005951e-03f, -3.201158140e-03f, -3.204304640e-03f,
--3.207445446e-03f, -3.210580551e-03f, -3.213709952e-03f, -3.216833643e-03f, -3.219951619e-03f, -3.223063874e-03f, -3.226170404e-03f, -3.229271204e-03f, -3.232366268e-03f, -3.235455591e-03f,
--3.238539169e-03f, -3.241616996e-03f, -3.244689068e-03f, -3.247755379e-03f, -3.250815924e-03f, -3.253870699e-03f, -3.256919697e-03f, -3.259962915e-03f, -3.263000348e-03f, -3.266031990e-03f,
--3.269057836e-03f, -3.272077882e-03f, -3.275092122e-03f, -3.278100552e-03f, -3.281103167e-03f, -3.284099961e-03f, -3.287090931e-03f, -3.290076070e-03f, -3.293055375e-03f, -3.296028840e-03f,
--3.298996461e-03f, -3.301958232e-03f, -3.304914149e-03f, -3.307864207e-03f, -3.310808401e-03f, -3.313746727e-03f, -3.316679180e-03f, -3.319605754e-03f, -3.322526445e-03f, -3.325441249e-03f,
--3.328350161e-03f, -3.331253175e-03f, -3.334150287e-03f, -3.337041493e-03f, -3.339926788e-03f, -3.342806166e-03f, -3.345679624e-03f, -3.348547157e-03f, -3.351408760e-03f, -3.354264428e-03f,
--3.357114157e-03f, -3.359957942e-03f, -3.362795778e-03f, -3.365627662e-03f, -3.368453588e-03f, -3.371273551e-03f, -3.374087548e-03f, -3.376895573e-03f, -3.379697622e-03f, -3.382493691e-03f,
--3.385283774e-03f, -3.388067868e-03f, -3.390845968e-03f, -3.393618070e-03f, -3.396384168e-03f, -3.399144259e-03f, -3.401898338e-03f, -3.404646400e-03f, -3.407388441e-03f, -3.410124457e-03f,
--3.412854443e-03f, -3.415578395e-03f, -3.418296309e-03f, -3.421008179e-03f, -3.423714002e-03f, -3.426413773e-03f, -3.429107488e-03f, -3.431795143e-03f, -3.434476732e-03f, -3.437152253e-03f,
--3.439821700e-03f, -3.442485069e-03f, -3.445142356e-03f, -3.447793557e-03f, -3.450438667e-03f, -3.453077683e-03f, -3.455710599e-03f, -3.458337411e-03f, -3.460958116e-03f, -3.463572709e-03f,
--3.466181186e-03f, -3.468783543e-03f, -3.471379775e-03f, -3.473969879e-03f, -3.476553850e-03f, -3.479131683e-03f, -3.481703376e-03f, -3.484268923e-03f, -3.486828321e-03f, -3.489381566e-03f,
--3.491928652e-03f, -3.494469577e-03f, -3.497004337e-03f, -3.499532926e-03f, -3.502055341e-03f, -3.504571579e-03f, -3.507081634e-03f, -3.509585504e-03f, -3.512083183e-03f, -3.514574668e-03f,
--3.517059955e-03f, -3.519539041e-03f, -3.522011920e-03f, -3.524478589e-03f, -3.526939044e-03f, -3.529393281e-03f, -3.531841296e-03f, -3.534283086e-03f, -3.536718646e-03f, -3.539147973e-03f,
--3.541571062e-03f, -3.543987909e-03f, -3.546398512e-03f, -3.548802865e-03f, -3.551200966e-03f, -3.553592810e-03f, -3.555978394e-03f, -3.558357713e-03f, -3.560730764e-03f, -3.563097543e-03f,
--3.565458046e-03f, -3.567812270e-03f, -3.570160211e-03f, -3.572501864e-03f, -3.574837228e-03f, -3.577166296e-03f, -3.579489067e-03f, -3.581805536e-03f, -3.584115699e-03f, -3.586419553e-03f,
--3.588717094e-03f, -3.591008319e-03f, -3.593293223e-03f, -3.595571804e-03f, -3.597844057e-03f, -3.600109980e-03f, -3.602369567e-03f, -3.604622817e-03f, -3.606869725e-03f, -3.609110287e-03f,
--3.611344501e-03f, -3.613572362e-03f, -3.615793867e-03f, -3.618009012e-03f, -3.620217795e-03f, -3.622420211e-03f, -3.624616257e-03f, -3.626805930e-03f, -3.628989226e-03f, -3.631166141e-03f,
--3.633336673e-03f, -3.635500817e-03f, -3.637658570e-03f, -3.639809930e-03f, -3.641954892e-03f, -3.644093453e-03f, -3.646225610e-03f, -3.648351359e-03f, -3.650470697e-03f, -3.652583621e-03f,
--3.654690128e-03f, -3.656790213e-03f, -3.658883874e-03f, -3.660971108e-03f, -3.663051911e-03f, -3.665126279e-03f, -3.667194210e-03f, -3.669255701e-03f, -3.671310748e-03f, -3.673359347e-03f,
--3.675401496e-03f, -3.677437192e-03f, -3.679466431e-03f, -3.681489210e-03f, -3.683505526e-03f, -3.685515376e-03f, -3.687518756e-03f, -3.689515664e-03f, -3.691506096e-03f, -3.693490049e-03f,
--3.695467521e-03f, -3.697438507e-03f, -3.699403006e-03f, -3.701361013e-03f, -3.703312526e-03f, -3.705257542e-03f, -3.707196058e-03f, -3.709128070e-03f, -3.711053576e-03f, -3.712972573e-03f,
--3.714885057e-03f, -3.716791027e-03f, -3.718690477e-03f, -3.720583407e-03f, -3.722469813e-03f, -3.724349691e-03f, -3.726223040e-03f, -3.728089855e-03f, -3.729950135e-03f, -3.731803876e-03f,
--3.733651075e-03f, -3.735491730e-03f, -3.737325838e-03f, -3.739153396e-03f, -3.740974400e-03f, -3.742788849e-03f, -3.744596739e-03f, -3.746398068e-03f, -3.748192833e-03f, -3.749981030e-03f,
--3.751762658e-03f, -3.753537714e-03f, -3.755306194e-03f, -3.757068096e-03f, -3.758823418e-03f, -3.760572156e-03f, -3.762314309e-03f, -3.764049872e-03f, -3.765778845e-03f, -3.767501223e-03f,
--3.769217004e-03f, -3.770926186e-03f, -3.772628766e-03f, -3.774324742e-03f, -3.776014110e-03f, -3.777696869e-03f, -3.779373015e-03f, -3.781042547e-03f, -3.782705461e-03f, -3.784361755e-03f,
--3.786011426e-03f, -3.787654473e-03f, -3.789290891e-03f, -3.790920680e-03f, -3.792543836e-03f, -3.794160358e-03f, -3.795770241e-03f, -3.797373485e-03f, -3.798970087e-03f, -3.800560043e-03f,
--3.802143353e-03f, -3.803720013e-03f, -3.805290021e-03f, -3.806853374e-03f, -3.808410071e-03f, -3.809960109e-03f, -3.811503485e-03f, -3.813040197e-03f, -3.814570243e-03f, -3.816093621e-03f,
--3.817610328e-03f, -3.819120363e-03f, -3.820623721e-03f, -3.822120403e-03f, -3.823610404e-03f, -3.825093724e-03f, -3.826570359e-03f, -3.828040308e-03f, -3.829503568e-03f, -3.830960137e-03f,
--3.832410013e-03f, -3.833853194e-03f, -3.835289677e-03f, -3.836719461e-03f, -3.838142543e-03f, -3.839558922e-03f, -3.840968594e-03f, -3.842371559e-03f, -3.843767813e-03f, -3.845157356e-03f,
--3.846540183e-03f, -3.847916295e-03f, -3.849285688e-03f, -3.850648361e-03f, -3.852004312e-03f, -3.853353538e-03f, -3.854696038e-03f, -3.856031809e-03f, -3.857360850e-03f, -3.858683159e-03f,
--3.859998733e-03f, -3.861307572e-03f, -3.862609672e-03f, -3.863905032e-03f, -3.865193650e-03f, -3.866475525e-03f, -3.867750653e-03f, -3.869019034e-03f, -3.870280666e-03f, -3.871535546e-03f,
--3.872783674e-03f, -3.874025046e-03f, -3.875259662e-03f, -3.876487519e-03f, -3.877708616e-03f, -3.878922950e-03f, -3.880130521e-03f, -3.881331327e-03f, -3.882525365e-03f, -3.883712634e-03f,
--3.884893132e-03f, -3.886066858e-03f, -3.887233810e-03f, -3.888393985e-03f, -3.889547384e-03f, -3.890694003e-03f, -3.891833841e-03f, -3.892966897e-03f, -3.894093169e-03f, -3.895212655e-03f,
--3.896325355e-03f, -3.897431265e-03f, -3.898530385e-03f, -3.899622712e-03f, -3.900708247e-03f, -3.901786986e-03f, -3.902858929e-03f, -3.903924074e-03f, -3.904982419e-03f, -3.906033963e-03f,
--3.907078705e-03f, -3.908116642e-03f, -3.909147774e-03f, -3.910172099e-03f, -3.911189616e-03f, -3.912200323e-03f, -3.913204219e-03f, -3.914201303e-03f, -3.915191572e-03f, -3.916175026e-03f,
--3.917151664e-03f, -3.918121483e-03f, -3.919084484e-03f, -3.920040663e-03f, -3.920990021e-03f, -3.921932555e-03f, -3.922868265e-03f, -3.923797149e-03f, -3.924719205e-03f, -3.925634434e-03f,
--3.926542833e-03f, -3.927444401e-03f, -3.928339137e-03f, -3.929227039e-03f, -3.930108108e-03f, -3.930982341e-03f, -3.931849736e-03f, -3.932710294e-03f, -3.933564013e-03f, -3.934410892e-03f,
--3.935250929e-03f, -3.936084124e-03f, -3.936910476e-03f, -3.937729983e-03f, -3.938542644e-03f, -3.939348458e-03f, -3.940147424e-03f, -3.940939542e-03f, -3.941724810e-03f, -3.942503227e-03f,
--3.943274791e-03f, -3.944039504e-03f, -3.944797362e-03f, -3.945548365e-03f, -3.946292513e-03f, -3.947029804e-03f, -3.947760237e-03f, -3.948483811e-03f, -3.949200526e-03f, -3.949910381e-03f,
--3.950613375e-03f, -3.951309506e-03f, -3.951998774e-03f, -3.952681179e-03f, -3.953356719e-03f, -3.954025393e-03f, -3.954687201e-03f, -3.955342142e-03f, -3.955990215e-03f, -3.956631419e-03f,
--3.957265754e-03f, -3.957893219e-03f, -3.958513813e-03f, -3.959127535e-03f, -3.959734384e-03f, -3.960334361e-03f, -3.960927464e-03f, -3.961513692e-03f, -3.962093045e-03f, -3.962665523e-03f,
--3.963231124e-03f, -3.963789848e-03f, -3.964341694e-03f, -3.964886662e-03f, -3.965424751e-03f, -3.965955961e-03f, -3.966480290e-03f, -3.966997739e-03f, -3.967508307e-03f, -3.968011993e-03f,
--3.968508797e-03f, -3.968998718e-03f, -3.969481756e-03f, -3.969957910e-03f, -3.970427180e-03f, -3.970889565e-03f, -3.971345065e-03f, -3.971793680e-03f, -3.972235408e-03f, -3.972670251e-03f,
--3.973098206e-03f, -3.973519274e-03f, -3.973933454e-03f, -3.974340747e-03f, -3.974741151e-03f, -3.975134666e-03f, -3.975521293e-03f, -3.975901030e-03f, -3.976273877e-03f, -3.976639835e-03f,
--3.976998902e-03f, -3.977351078e-03f, -3.977696364e-03f, -3.978034759e-03f, -3.978366263e-03f, -3.978690875e-03f, -3.979008595e-03f, -3.979319424e-03f, -3.979623360e-03f, -3.979920404e-03f,
--3.980210555e-03f, -3.980493814e-03f, -3.980770181e-03f, -3.981039654e-03f, -3.981302234e-03f, -3.981557921e-03f, -3.981806715e-03f, -3.982048616e-03f, -3.982283623e-03f, -3.982511737e-03f,
--3.982732957e-03f, -3.982947284e-03f, -3.983154717e-03f, -3.983355257e-03f, -3.983548903e-03f, -3.983735655e-03f, -3.983915514e-03f, -3.984088480e-03f, -3.984254552e-03f, -3.984413730e-03f,
--3.984566015e-03f, -3.984711407e-03f, -3.984849906e-03f, -3.984981512e-03f, -3.985106225e-03f, -3.985224045e-03f, -3.985334973e-03f, -3.985439008e-03f, -3.985536150e-03f, -3.985626401e-03f,
--3.985709759e-03f, -3.985786226e-03f, -3.985855801e-03f, -3.985918485e-03f, -3.985974278e-03f, -3.986023179e-03f, -3.986065191e-03f, -3.986100312e-03f, -3.986128543e-03f, -3.986149884e-03f,
--3.986164335e-03f, -3.986171898e-03f, -3.986172572e-03f, -3.986166357e-03f, -3.986153255e-03f, -3.986133264e-03f, -3.986106387e-03f, -3.986072622e-03f, -3.986031971e-03f, -3.985984434e-03f,
--3.985930011e-03f, -3.985868703e-03f, -3.985800510e-03f, -3.985725432e-03f, -3.985643471e-03f, -3.985554626e-03f, -3.985458899e-03f, -3.985356289e-03f, -3.985246797e-03f, -3.985130424e-03f,
--3.985007170e-03f, -3.984877036e-03f, -3.984740023e-03f, -3.984596130e-03f, -3.984445359e-03f, -3.984287710e-03f, -3.984123183e-03f, -3.983951780e-03f, -3.983773502e-03f, -3.983588347e-03f,
--3.983396318e-03f, -3.983197416e-03f, -3.982991639e-03f, -3.982778991e-03f, -3.982559470e-03f, -3.982333078e-03f, -3.982099816e-03f, -3.981859684e-03f, -3.981612683e-03f, -3.981358814e-03f,
--3.981098077e-03f, -3.980830474e-03f, -3.980556006e-03f, -3.980274672e-03f, -3.979986474e-03f, -3.979691413e-03f, -3.979389490e-03f, -3.979080704e-03f, -3.978765059e-03f, -3.978442553e-03f,
--3.978113189e-03f, -3.977776966e-03f, -3.977433887e-03f, -3.977083951e-03f, -3.976727160e-03f, -3.976363515e-03f, -3.975993017e-03f, -3.975615667e-03f, -3.975231465e-03f, -3.974840413e-03f,
--3.974442512e-03f, -3.974037762e-03f, -3.973626166e-03f, -3.973207723e-03f, -3.972782435e-03f, -3.972350303e-03f, -3.971911329e-03f, -3.971465512e-03f, -3.971012855e-03f, -3.970553359e-03f,
--3.970087024e-03f, -3.969613851e-03f, -3.969133843e-03f, -3.968647000e-03f, -3.968153323e-03f, -3.967652813e-03f, -3.967145472e-03f, -3.966631301e-03f, -3.966110302e-03f, -3.965582474e-03f,
--3.965047820e-03f, -3.964506341e-03f, -3.963958038e-03f, -3.963402913e-03f, -3.962840966e-03f, -3.962272200e-03f, -3.961696614e-03f, -3.961114212e-03f, -3.960524993e-03f, -3.959928960e-03f,
--3.959326114e-03f, -3.958716456e-03f, -3.958099987e-03f, -3.957476710e-03f, -3.956846625e-03f, -3.956209734e-03f, -3.955566038e-03f, -3.954915538e-03f, -3.954258237e-03f, -3.953594136e-03f,
--3.952923236e-03f, -3.952245538e-03f, -3.951561044e-03f, -3.950869757e-03f, -3.950171676e-03f, -3.949466804e-03f, -3.948755143e-03f, -3.948036693e-03f, -3.947311457e-03f, -3.946579436e-03f,
--3.945840632e-03f, -3.945095046e-03f, -3.944342680e-03f, -3.943583535e-03f, -3.942817614e-03f, -3.942044917e-03f, -3.941265448e-03f, -3.940479206e-03f, -3.939686194e-03f, -3.938886414e-03f,
--3.938079867e-03f, -3.937266556e-03f, -3.936446481e-03f, -3.935619645e-03f, -3.934786049e-03f, -3.933945695e-03f, -3.933098585e-03f, -3.932244721e-03f, -3.931384105e-03f, -3.930516738e-03f,
--3.929642622e-03f, -3.928761759e-03f, -3.927874151e-03f, -3.926979800e-03f, -3.926078708e-03f, -3.925170876e-03f, -3.924256306e-03f, -3.923335001e-03f, -3.922406963e-03f, -3.921472192e-03f,
--3.920530692e-03f, -3.919582464e-03f, -3.918627510e-03f, -3.917665833e-03f, -3.916697433e-03f, -3.915722314e-03f, -3.914740477e-03f, -3.913751924e-03f, -3.912756657e-03f, -3.911754678e-03f,
--3.910745990e-03f, -3.909730595e-03f, -3.908708494e-03f, -3.907679689e-03f, -3.906644184e-03f, -3.905601979e-03f, -3.904553077e-03f, -3.903497481e-03f, -3.902435192e-03f, -3.901366212e-03f,
--3.900290544e-03f, -3.899208190e-03f, -3.898119152e-03f, -3.897023432e-03f, -3.895921033e-03f, -3.894811956e-03f, -3.893696205e-03f, -3.892573781e-03f, -3.891444686e-03f, -3.890308923e-03f,
--3.889166495e-03f, -3.888017403e-03f, -3.886861649e-03f, -3.885699237e-03f, -3.884530168e-03f, -3.883354445e-03f, -3.882172070e-03f, -3.880983046e-03f, -3.879787375e-03f, -3.878585058e-03f,
--3.877376100e-03f, -3.876160502e-03f, -3.874938266e-03f, -3.873709396e-03f, -3.872473893e-03f, -3.871231760e-03f, -3.869982999e-03f, -3.868727613e-03f, -3.867465605e-03f, -3.866196976e-03f,
--3.864921730e-03f, -3.863639869e-03f, -3.862351396e-03f, -3.861056313e-03f, -3.859754622e-03f, -3.858446327e-03f, -3.857131429e-03f, -3.855809932e-03f, -3.854481838e-03f, -3.853147150e-03f,
--3.851805870e-03f, -3.850458001e-03f, -3.849103546e-03f, -3.847742507e-03f, -3.846374887e-03f, -3.845000688e-03f, -3.843619914e-03f, -3.842232567e-03f, -3.840838650e-03f, -3.839438166e-03f,
--3.838031116e-03f, -3.836617505e-03f, -3.835197335e-03f, -3.833770608e-03f, -3.832337328e-03f, -3.830897497e-03f, -3.829451118e-03f, -3.827998194e-03f, -3.826538727e-03f, -3.825072722e-03f,
--3.823600179e-03f, -3.822121103e-03f, -3.820635496e-03f, -3.819143361e-03f, -3.817644701e-03f, -3.816139519e-03f, -3.814627818e-03f, -3.813109601e-03f, -3.811584870e-03f, -3.810053629e-03f,
--3.808515881e-03f, -3.806971628e-03f, -3.805420874e-03f, -3.803863621e-03f, -3.802299873e-03f, -3.800729633e-03f, -3.799152904e-03f, -3.797569688e-03f, -3.795979989e-03f, -3.794383810e-03f,
--3.792781154e-03f, -3.791172024e-03f, -3.789556423e-03f, -3.787934354e-03f, -3.786305821e-03f, -3.784670827e-03f, -3.783029374e-03f, -3.781381466e-03f, -3.779727106e-03f, -3.778066297e-03f,
--3.776399043e-03f, -3.774725346e-03f, -3.773045211e-03f, -3.771358639e-03f, -3.769665634e-03f, -3.767966200e-03f, -3.766260340e-03f, -3.764548057e-03f, -3.762829355e-03f, -3.761104236e-03f,
--3.759372703e-03f, -3.757634762e-03f, -3.755890413e-03f, -3.754139662e-03f, -3.752382511e-03f, -3.750618963e-03f, -3.748849023e-03f, -3.747072693e-03f, -3.745289977e-03f, -3.743500877e-03f,
--3.741705399e-03f, -3.739903544e-03f, -3.738095317e-03f, -3.736280721e-03f, -3.734459759e-03f, -3.732632435e-03f, -3.730798752e-03f, -3.728958714e-03f, -3.727112324e-03f, -3.725259586e-03f,
--3.723400503e-03f, -3.721535079e-03f, -3.719663317e-03f, -3.717785222e-03f, -3.715900795e-03f, -3.714010042e-03f, -3.712112966e-03f, -3.710209569e-03f, -3.708299857e-03f, -3.706383832e-03f,
--3.704461498e-03f, -3.702532859e-03f, -3.700597918e-03f, -3.698656679e-03f, -3.696709146e-03f, -3.694755322e-03f, -3.692795211e-03f, -3.690828817e-03f, -3.688856144e-03f, -3.686877194e-03f,
--3.684891973e-03f, -3.682900484e-03f, -3.680902729e-03f, -3.678898714e-03f, -3.676888442e-03f, -3.674871917e-03f, -3.672849143e-03f, -3.670820122e-03f, -3.668784860e-03f, -3.666743360e-03f,
--3.664695626e-03f, -3.662641662e-03f, -3.660581471e-03f, -3.658515057e-03f, -3.656442425e-03f, -3.654363578e-03f, -3.652278521e-03f, -3.650187256e-03f, -3.648089788e-03f, -3.645986122e-03f,
--3.643876260e-03f, -3.641760207e-03f, -3.639637966e-03f, -3.637509543e-03f, -3.635374940e-03f, -3.633234162e-03f, -3.631087212e-03f, -3.628934096e-03f, -3.626774816e-03f, -3.624609377e-03f,
--3.622437783e-03f, -3.620260038e-03f, -3.618076146e-03f, -3.615886111e-03f, -3.613689938e-03f, -3.611487629e-03f, -3.609279190e-03f, -3.607064625e-03f, -3.604843937e-03f, -3.602617131e-03f,
--3.600384211e-03f, -3.598145181e-03f, -3.595900046e-03f, -3.593648809e-03f, -3.591391474e-03f, -3.589128047e-03f, -3.586858531e-03f, -3.584582930e-03f, -3.582301249e-03f, -3.580013491e-03f,
--3.577719662e-03f, -3.575419765e-03f, -3.573113804e-03f, -3.570801785e-03f, -3.568483710e-03f, -3.566159586e-03f, -3.563829415e-03f, -3.561493202e-03f, -3.559150952e-03f, -3.556802669e-03f,
--3.554448357e-03f, -3.552088020e-03f, -3.549721664e-03f, -3.547349292e-03f, -3.544970908e-03f, -3.542586518e-03f, -3.540196126e-03f, -3.537799735e-03f, -3.535397351e-03f, -3.532988978e-03f,
--3.530574621e-03f, -3.528154283e-03f, -3.525727970e-03f, -3.523295685e-03f, -3.520857434e-03f, -3.518413221e-03f, -3.515963050e-03f, -3.513506926e-03f, -3.511044853e-03f, -3.508576837e-03f,
--3.506102881e-03f, -3.503622990e-03f, -3.501137169e-03f, -3.498645423e-03f, -3.496147755e-03f, -3.493644171e-03f, -3.491134674e-03f, -3.488619271e-03f, -3.486097965e-03f, -3.483570762e-03f,
--3.481037665e-03f, -3.478498679e-03f, -3.475953810e-03f, -3.473403061e-03f, -3.470846438e-03f, -3.468283945e-03f, -3.465715587e-03f, -3.463141369e-03f, -3.460561295e-03f, -3.457975371e-03f,
--3.455383600e-03f, -3.452785988e-03f, -3.450182539e-03f, -3.447573259e-03f, -3.444958152e-03f, -3.442337223e-03f, -3.439710476e-03f, -3.437077917e-03f, -3.434439551e-03f, -3.431795381e-03f,
--3.429145414e-03f, -3.426489654e-03f, -3.423828105e-03f, -3.421160774e-03f, -3.418487664e-03f, -3.415808780e-03f, -3.413124128e-03f, -3.410433712e-03f, -3.407737538e-03f, -3.405035610e-03f,
--3.402327933e-03f, -3.399614513e-03f, -3.396895353e-03f, -3.394170460e-03f, -3.391439838e-03f, -3.388703492e-03f, -3.385961427e-03f, -3.383213649e-03f, -3.380460161e-03f, -3.377700971e-03f,
--3.374936081e-03f, -3.372165498e-03f, -3.369389226e-03f, -3.366607271e-03f, -3.363819637e-03f, -3.361026331e-03f, -3.358227356e-03f, -3.355422718e-03f, -3.352612422e-03f, -3.349796474e-03f,
--3.346974878e-03f, -3.344147639e-03f, -3.341314763e-03f, -3.338476256e-03f, -3.335632121e-03f, -3.332782365e-03f, -3.329926992e-03f, -3.327066008e-03f, -3.324199417e-03f, -3.321327226e-03f,
--3.318449440e-03f, -3.315566063e-03f, -3.312677101e-03f, -3.309782559e-03f, -3.306882443e-03f, -3.303976758e-03f, -3.301065508e-03f, -3.298148700e-03f, -3.295226339e-03f, -3.292298430e-03f,
--3.289364978e-03f, -3.286425989e-03f, -3.283481469e-03f, -3.280531421e-03f, -3.277575853e-03f, -3.274614768e-03f, -3.271648173e-03f, -3.268676074e-03f, -3.265698474e-03f, -3.262715381e-03f,
--3.259726799e-03f, -3.256732733e-03f, -3.253733190e-03f, -3.250728175e-03f, -3.247717692e-03f, -3.244701748e-03f, -3.241680348e-03f, -3.238653498e-03f, -3.235621203e-03f, -3.232583468e-03f,
--3.229540299e-03f, -3.226491702e-03f, -3.223437682e-03f, -3.220378245e-03f, -3.217313397e-03f, -3.214243142e-03f, -3.211167486e-03f, -3.208086435e-03f, -3.204999996e-03f, -3.201908172e-03f,
--3.198810970e-03f, -3.195708395e-03f, -3.192600454e-03f, -3.189487151e-03f, -3.186368493e-03f, -3.183244485e-03f, -3.180115132e-03f, -3.176980441e-03f, -3.173840417e-03f, -3.170695065e-03f,
--3.167544392e-03f, -3.164388403e-03f, -3.161227104e-03f, -3.158060501e-03f, -3.154888599e-03f, -3.151711404e-03f, -3.148528922e-03f, -3.145341158e-03f, -3.142148119e-03f, -3.138949810e-03f,
--3.135746237e-03f, -3.132537406e-03f, -3.129323323e-03f, -3.126103992e-03f, -3.122879421e-03f, -3.119649615e-03f, -3.116414580e-03f, -3.113174322e-03f, -3.109928846e-03f, -3.106678159e-03f,
--3.103422266e-03f, -3.100161173e-03f, -3.096894887e-03f, -3.093623412e-03f, -3.090346756e-03f, -3.087064923e-03f, -3.083777920e-03f, -3.080485753e-03f, -3.077188428e-03f, -3.073885950e-03f,
--3.070578326e-03f, -3.067265561e-03f, -3.063947663e-03f, -3.060624635e-03f, -3.057296485e-03f, -3.053963219e-03f, -3.050624843e-03f, -3.047281362e-03f, -3.043932782e-03f, -3.040579111e-03f,
--3.037220353e-03f, -3.033856515e-03f, -3.030487603e-03f, -3.027113622e-03f, -3.023734580e-03f, -3.020350482e-03f, -3.016961334e-03f, -3.013567143e-03f, -3.010167914e-03f, -3.006763653e-03f,
--3.003354368e-03f, -2.999940063e-03f, -2.996520745e-03f, -2.993096420e-03f, -2.989667095e-03f, -2.986232775e-03f, -2.982793467e-03f, -2.979349177e-03f, -2.975899911e-03f, -2.972445675e-03f,
--2.968986476e-03f, -2.965522320e-03f, -2.962053213e-03f, -2.958579160e-03f, -2.955100170e-03f, -2.951616247e-03f, -2.948127398e-03f, -2.944633629e-03f, -2.941134947e-03f, -2.937631358e-03f,
--2.934122868e-03f, -2.930609484e-03f, -2.927091211e-03f, -2.923568057e-03f, -2.920040027e-03f, -2.916507127e-03f, -2.912969365e-03f, -2.909426747e-03f, -2.905879278e-03f, -2.902326965e-03f,
--2.898769815e-03f, -2.895207835e-03f, -2.891641029e-03f, -2.888069406e-03f, -2.884492970e-03f, -2.880911730e-03f, -2.877325690e-03f, -2.873734858e-03f, -2.870139240e-03f, -2.866538842e-03f,
--2.862933672e-03f, -2.859323734e-03f, -2.855709037e-03f, -2.852089585e-03f, -2.848465387e-03f, -2.844836448e-03f, -2.841202775e-03f, -2.837564374e-03f, -2.833921252e-03f, -2.830273415e-03f,
--2.826620870e-03f, -2.822963624e-03f, -2.819301683e-03f, -2.815635053e-03f, -2.811963742e-03f, -2.808287755e-03f, -2.804607100e-03f, -2.800921783e-03f, -2.797231810e-03f, -2.793537188e-03f,
--2.789837925e-03f, -2.786134025e-03f, -2.782425497e-03f, -2.778712346e-03f, -2.774994580e-03f, -2.771272204e-03f, -2.767545226e-03f, -2.763813653e-03f, -2.760077490e-03f, -2.756336746e-03f,
--2.752591425e-03f, -2.748841536e-03f, -2.745087084e-03f, -2.741328077e-03f, -2.737564521e-03f, -2.733796424e-03f, -2.730023791e-03f, -2.726246629e-03f, -2.722464945e-03f, -2.718678747e-03f,
--2.714888040e-03f, -2.711092832e-03f, -2.707293129e-03f, -2.703488938e-03f, -2.699680266e-03f, -2.695867120e-03f, -2.692049506e-03f, -2.688227431e-03f, -2.684400903e-03f, -2.680569928e-03f,
--2.676734512e-03f, -2.672894663e-03f, -2.669050388e-03f, -2.665201693e-03f, -2.661348586e-03f, -2.657491072e-03f, -2.653629160e-03f, -2.649762856e-03f, -2.645892166e-03f, -2.642017099e-03f,
--2.638137659e-03f, -2.634253856e-03f, -2.630365695e-03f, -2.626473184e-03f, -2.622576328e-03f, -2.618675137e-03f, -2.614769615e-03f, -2.610859771e-03f, -2.606945612e-03f, -2.603027143e-03f,
--2.599104373e-03f, -2.595177308e-03f, -2.591245955e-03f, -2.587310321e-03f, -2.583370414e-03f, -2.579426240e-03f, -2.575477806e-03f, -2.571525119e-03f, -2.567568187e-03f, -2.563607017e-03f,
--2.559641615e-03f, -2.555671988e-03f, -2.551698144e-03f, -2.547720090e-03f, -2.543737833e-03f, -2.539751379e-03f, -2.535760737e-03f, -2.531765912e-03f, -2.527766913e-03f, -2.523763746e-03f,
--2.519756419e-03f, -2.515744938e-03f, -2.511729311e-03f, -2.507709545e-03f, -2.503685647e-03f, -2.499657624e-03f, -2.495625483e-03f, -2.491589232e-03f, -2.487548878e-03f, -2.483504428e-03f,
--2.479455889e-03f, -2.475403268e-03f, -2.471346572e-03f, -2.467285810e-03f, -2.463220987e-03f, -2.459152111e-03f, -2.455079190e-03f, -2.451002231e-03f, -2.446921240e-03f, -2.442836226e-03f,
--2.438747195e-03f, -2.434654154e-03f, -2.430557112e-03f, -2.426456075e-03f, -2.422351051e-03f, -2.418242046e-03f, -2.414129068e-03f, -2.410012125e-03f, -2.405891224e-03f, -2.401766372e-03f,
--2.397637576e-03f, -2.393504843e-03f, -2.389368182e-03f, -2.385227600e-03f, -2.381083103e-03f, -2.376934699e-03f, -2.372782396e-03f, -2.368626200e-03f, -2.364466120e-03f, -2.360302163e-03f,
--2.356134335e-03f, -2.351962645e-03f, -2.347787100e-03f, -2.343607707e-03f, -2.339424473e-03f, -2.335237407e-03f, -2.331046515e-03f, -2.326851805e-03f, -2.322653284e-03f, -2.318450961e-03f,
--2.314244841e-03f, -2.310034933e-03f, -2.305821245e-03f, -2.301603783e-03f, -2.297382555e-03f, -2.293157569e-03f, -2.288928832e-03f, -2.284696352e-03f, -2.280460135e-03f, -2.276220191e-03f,
--2.271976525e-03f, -2.267729146e-03f, -2.263478061e-03f, -2.259223279e-03f, -2.254964805e-03f, -2.250702648e-03f, -2.246436815e-03f, -2.242167315e-03f, -2.237894153e-03f, -2.233617339e-03f,
--2.229336880e-03f, -2.225052782e-03f, -2.220765055e-03f, -2.216473705e-03f, -2.212178739e-03f, -2.207880167e-03f, -2.203577994e-03f, -2.199272230e-03f, -2.194962880e-03f, -2.190649954e-03f,
--2.186333459e-03f, -2.182013401e-03f, -2.177689790e-03f, -2.173362632e-03f, -2.169031936e-03f, -2.164697709e-03f, -2.160359958e-03f, -2.156018691e-03f, -2.151673917e-03f, -2.147325642e-03f,
--2.142973874e-03f, -2.138618621e-03f, -2.134259891e-03f, -2.129897692e-03f, -2.125532030e-03f, -2.121162915e-03f, -2.116790353e-03f, -2.112414352e-03f, -2.108034921e-03f, -2.103652066e-03f,
--2.099265796e-03f, -2.094876118e-03f, -2.090483040e-03f, -2.086086570e-03f, -2.081686715e-03f, -2.077283484e-03f, -2.072876884e-03f, -2.068466923e-03f, -2.064053609e-03f, -2.059636949e-03f,
--2.055216951e-03f, -2.050793624e-03f, -2.046366974e-03f, -2.041937010e-03f, -2.037503740e-03f, -2.033067171e-03f, -2.028627311e-03f, -2.024184168e-03f, -2.019737750e-03f, -2.015288065e-03f,
--2.010835121e-03f, -2.006378925e-03f, -2.001919485e-03f, -1.997456810e-03f, -1.992990906e-03f, -1.988521783e-03f, -1.984049447e-03f, -1.979573907e-03f, -1.975095171e-03f, -1.970613246e-03f,
--1.966128141e-03f, -1.961639862e-03f, -1.957148420e-03f, -1.952653820e-03f, -1.948156071e-03f, -1.943655182e-03f, -1.939151159e-03f, -1.934644012e-03f, -1.930133747e-03f, -1.925620373e-03f,
--1.921103897e-03f, -1.916584329e-03f, -1.912061675e-03f, -1.907535944e-03f, -1.903007143e-03f, -1.898475281e-03f, -1.893940366e-03f, -1.889402405e-03f, -1.884861406e-03f, -1.880317379e-03f,
--1.875770330e-03f, -1.871220267e-03f, -1.866667199e-03f, -1.862111134e-03f, -1.857552079e-03f, -1.852990043e-03f, -1.848425034e-03f, -1.843857060e-03f, -1.839286128e-03f, -1.834712247e-03f,
--1.830135425e-03f, -1.825555670e-03f, -1.820972990e-03f, -1.816387393e-03f, -1.811798887e-03f, -1.807207481e-03f, -1.802613182e-03f, -1.798015998e-03f, -1.793415937e-03f, -1.788813009e-03f,
--1.784207220e-03f, -1.779598578e-03f, -1.774987093e-03f, -1.770372771e-03f, -1.765755622e-03f, -1.761135653e-03f, -1.756512872e-03f, -1.751887288e-03f, -1.747258908e-03f, -1.742627741e-03f,
--1.737993795e-03f, -1.733357079e-03f, -1.728717599e-03f, -1.724075365e-03f, -1.719430384e-03f, -1.714782665e-03f, -1.710132215e-03f, -1.705479044e-03f, -1.700823159e-03f, -1.696164568e-03f,
--1.691503280e-03f, -1.686839303e-03f, -1.682172645e-03f, -1.677503314e-03f, -1.672831318e-03f, -1.668156666e-03f, -1.663479365e-03f, -1.658799425e-03f, -1.654116853e-03f, -1.649431657e-03f,
--1.644743846e-03f, -1.640053428e-03f, -1.635360411e-03f, -1.630664803e-03f, -1.625966613e-03f, -1.621265849e-03f, -1.616562519e-03f, -1.611856632e-03f, -1.607148195e-03f, -1.602437217e-03f,
--1.597723706e-03f, -1.593007671e-03f, -1.588289119e-03f, -1.583568059e-03f, -1.578844500e-03f, -1.574118450e-03f, -1.569389916e-03f, -1.564658907e-03f, -1.559925432e-03f, -1.555189499e-03f,
--1.550451115e-03f, -1.545710290e-03f, -1.540967032e-03f, -1.536221349e-03f, -1.531473249e-03f, -1.526722741e-03f, -1.521969833e-03f, -1.517214534e-03f, -1.512456850e-03f, -1.507696793e-03f,
--1.502934368e-03f, -1.498169585e-03f, -1.493402452e-03f, -1.488632978e-03f, -1.483861170e-03f, -1.479087038e-03f, -1.474310589e-03f, -1.469531832e-03f, -1.464750775e-03f, -1.459967427e-03f,
--1.455181796e-03f, -1.450393891e-03f, -1.445603719e-03f, -1.440811289e-03f, -1.436016610e-03f, -1.431219690e-03f, -1.426420538e-03f, -1.421619161e-03f, -1.416815568e-03f, -1.412009768e-03f,
--1.407201769e-03f, -1.402391580e-03f, -1.397579208e-03f, -1.392764663e-03f, -1.387947952e-03f, -1.383129085e-03f, -1.378308069e-03f, -1.373484913e-03f, -1.368659626e-03f, -1.363832216e-03f,
--1.359002691e-03f, -1.354171060e-03f, -1.349337331e-03f, -1.344501513e-03f, -1.339663614e-03f, -1.334823643e-03f, -1.329981608e-03f, -1.325137517e-03f, -1.320291380e-03f, -1.315443204e-03f,
--1.310592999e-03f, -1.305740771e-03f, -1.300886531e-03f, -1.296030287e-03f, -1.291172046e-03f, -1.286311818e-03f, -1.281449611e-03f, -1.276585433e-03f, -1.271719293e-03f, -1.266851200e-03f,
--1.261981162e-03f, -1.257109188e-03f, -1.252235285e-03f, -1.247359463e-03f, -1.242481730e-03f, -1.237602095e-03f, -1.232720566e-03f, -1.227837152e-03f, -1.222951861e-03f, -1.218064701e-03f,
--1.213175682e-03f, -1.208284812e-03f, -1.203392099e-03f, -1.198497552e-03f, -1.193601180e-03f, -1.188702990e-03f, -1.183802992e-03f, -1.178901195e-03f, -1.173997606e-03f, -1.169092234e-03f,
--1.164185088e-03f, -1.159276177e-03f, -1.154365508e-03f, -1.149453091e-03f, -1.144538935e-03f, -1.139623046e-03f, -1.134705436e-03f, -1.129786111e-03f, -1.124865080e-03f, -1.119942353e-03f,
--1.115017937e-03f, -1.110091842e-03f, -1.105164075e-03f, -1.100234646e-03f, -1.095303563e-03f, -1.090370835e-03f, -1.085436469e-03f, -1.080500476e-03f, -1.075562863e-03f, -1.070623639e-03f,
--1.065682813e-03f, -1.060740394e-03f, -1.055796389e-03f, -1.050850808e-03f, -1.045903659e-03f, -1.040954951e-03f, -1.036004692e-03f, -1.031052891e-03f, -1.026099558e-03f, -1.021144699e-03f,
--1.016188325e-03f, -1.011230443e-03f, -1.006271062e-03f, -1.001310192e-03f, -9.963478397e-04f, -9.913840150e-04f, -9.864187261e-04f, -9.814519818e-04f, -9.764837906e-04f, -9.715141613e-04f,
--9.665431026e-04f, -9.615706230e-04f, -9.565967313e-04f, -9.516214360e-04f, -9.466447460e-04f, -9.416666698e-04f, -9.366872162e-04f, -9.317063937e-04f, -9.267242111e-04f, -9.217406771e-04f,
--9.167558003e-04f, -9.117695894e-04f, -9.067820531e-04f, -9.017932001e-04f, -8.968030391e-04f, -8.918115788e-04f, -8.868188278e-04f, -8.818247948e-04f, -8.768294886e-04f, -8.718329179e-04f,
--8.668350913e-04f, -8.618360175e-04f, -8.568357052e-04f, -8.518341633e-04f, -8.468314002e-04f, -8.418274248e-04f, -8.368222458e-04f, -8.318158719e-04f, -8.268083117e-04f, -8.217995741e-04f,
--8.167896676e-04f, -8.117786011e-04f, -8.067663833e-04f, -8.017530228e-04f, -7.967385284e-04f, -7.917229088e-04f, -7.867061728e-04f, -7.816883291e-04f, -7.766693863e-04f, -7.716493532e-04f,
--7.666282387e-04f, -7.616060513e-04f, -7.565827998e-04f, -7.515584929e-04f, -7.465331395e-04f, -7.415067482e-04f, -7.364793277e-04f, -7.314508869e-04f, -7.264214344e-04f, -7.213909790e-04f,
--7.163595294e-04f, -7.113270944e-04f, -7.062936827e-04f, -7.012593031e-04f, -6.962239643e-04f, -6.911876751e-04f, -6.861504442e-04f, -6.811122804e-04f, -6.760731924e-04f, -6.710331890e-04f,
--6.659922789e-04f, -6.609504709e-04f, -6.559077738e-04f, -6.508641963e-04f, -6.458197472e-04f, -6.407744352e-04f, -6.357282691e-04f, -6.306812577e-04f, -6.256334097e-04f, -6.205847339e-04f,
--6.155352390e-04f, -6.104849339e-04f, -6.054338273e-04f, -6.003819279e-04f, -5.953292446e-04f, -5.902757861e-04f, -5.852215611e-04f, -5.801665786e-04f, -5.751108471e-04f, -5.700543755e-04f,
--5.649971727e-04f, -5.599392472e-04f, -5.548806080e-04f, -5.498212638e-04f, -5.447612234e-04f, -5.397004956e-04f, -5.346390891e-04f, -5.295770128e-04f, -5.245142753e-04f, -5.194508856e-04f,
--5.143868523e-04f, -5.093221843e-04f, -5.042568903e-04f, -4.991909792e-04f, -4.941244597e-04f, -4.890573406e-04f, -4.839896307e-04f, -4.789213387e-04f, -4.738524735e-04f, -4.687830439e-04f,
--4.637130586e-04f, -4.586425265e-04f, -4.535714562e-04f, -4.484998567e-04f, -4.434277367e-04f, -4.383551050e-04f, -4.332819704e-04f, -4.282083417e-04f, -4.231342276e-04f, -4.180596370e-04f,
--4.129845787e-04f, -4.079090614e-04f, -4.028330940e-04f, -3.977566852e-04f, -3.926798439e-04f, -3.876025788e-04f, -3.825248988e-04f, -3.774468125e-04f, -3.723683289e-04f, -3.672894567e-04f,
--3.622102048e-04f, -3.571305818e-04f, -3.520505967e-04f, -3.469702582e-04f, -3.418895750e-04f, -3.368085561e-04f, -3.317272102e-04f, -3.266455461e-04f, -3.215635726e-04f, -3.164812985e-04f,
--3.113987326e-04f, -3.063158836e-04f, -3.012327605e-04f, -2.961493720e-04f, -2.910657268e-04f, -2.859818339e-04f, -2.808977019e-04f, -2.758133397e-04f, -2.707287561e-04f, -2.656439599e-04f,
--2.605589598e-04f, -2.554737647e-04f, -2.503883834e-04f, -2.453028247e-04f, -2.402170973e-04f, -2.351312102e-04f, -2.300451719e-04f, -2.249589915e-04f, -2.198726776e-04f, -2.147862390e-04f,
--2.096996847e-04f, -2.046130232e-04f, -1.995262635e-04f, -1.944394144e-04f, -1.893524846e-04f, -1.842654829e-04f, -1.791784181e-04f, -1.740912991e-04f, -1.690041346e-04f, -1.639169334e-04f,
--1.588297043e-04f, -1.537424561e-04f, -1.486551976e-04f, -1.435679375e-04f, -1.384806848e-04f, -1.333934481e-04f, -1.283062363e-04f, -1.232190581e-04f, -1.181319223e-04f, -1.130448378e-04f,
--1.079578133e-04f, -1.028708576e-04f, -9.778397946e-05f, -9.269718773e-05f, -8.761049115e-05f, -8.252389853e-05f, -7.743741865e-05f, -7.235106028e-05f, -6.726483222e-05f, -6.217874325e-05f,
--5.709280215e-05f, -5.200701771e-05f, -4.692139870e-05f, -4.183595390e-05f, -3.675069210e-05f, -3.166562208e-05f, -2.658075261e-05f, -2.149609247e-05f, -1.641165043e-05f, -1.132743528e-05f,
--6.243455792e-06f, -1.159720732e-06f, 3.923761121e-06f, 9.006980995e-06f, 1.408993012e-05f, 1.917259972e-05f, 2.425498103e-05f, 2.933706529e-05f, 3.441884371e-05f, 3.950030754e-05f,
-4.458144801e-05f, 4.966225635e-05f, 5.474272381e-05f, 5.982284161e-05f, 6.490260100e-05f, 6.998199321e-05f, 7.506100949e-05f, 8.013964107e-05f, 8.521787920e-05f, 9.029571513e-05f,
-9.537314009e-05f, 1.004501453e-04f, 1.055267221e-04f, 1.106028617e-04f, 1.156785552e-04f, 1.207537941e-04f, 1.258285695e-04f, 1.309028727e-04f, 1.359766949e-04f, 1.410500274e-04f,
-1.461228614e-04f, 1.511951883e-04f, 1.562669992e-04f, 1.613382855e-04f, 1.664090383e-04f, 1.714792490e-04f, 1.765489088e-04f, 1.816180090e-04f, 1.866865409e-04f, 1.917544957e-04f,
-1.968218647e-04f, 2.018886391e-04f, 2.069548103e-04f, 2.120203695e-04f, 2.170853079e-04f, 2.221496170e-04f, 2.272132879e-04f, 2.322763119e-04f, 2.373386803e-04f, 2.424003844e-04f,
-2.474614155e-04f, 2.525217649e-04f, 2.575814238e-04f, 2.626403836e-04f, 2.676986355e-04f, 2.727561709e-04f, 2.778129810e-04f, 2.828690571e-04f, 2.879243905e-04f, 2.929789725e-04f,
-2.980327945e-04f, 3.030858477e-04f, 3.081381235e-04f, 3.131896131e-04f, 3.182403078e-04f, 3.232901991e-04f, 3.283392781e-04f, 3.333875362e-04f, 3.384349647e-04f, 3.434815549e-04f,
-3.485272982e-04f, 3.535721859e-04f, 3.586162092e-04f, 3.636593596e-04f, 3.687016283e-04f, 3.737430068e-04f, 3.787834862e-04f, 3.838230580e-04f, 3.888617135e-04f, 3.938994439e-04f,
-3.989362408e-04f, 4.039720954e-04f, 4.090069990e-04f, 4.140409430e-04f, 4.190739188e-04f, 4.241059176e-04f, 4.291369309e-04f, 4.341669500e-04f, 4.391959663e-04f, 4.442239711e-04f,
-4.492509557e-04f, 4.542769116e-04f, 4.593018302e-04f, 4.643257027e-04f, 4.693485205e-04f, 4.743702751e-04f, 4.793909578e-04f, 4.844105599e-04f, 4.894290729e-04f, 4.944464881e-04f,
-4.994627970e-04f, 5.044779908e-04f, 5.094920611e-04f, 5.145049991e-04f, 5.195167963e-04f, 5.245274441e-04f, 5.295369339e-04f, 5.345452570e-04f, 5.395524049e-04f, 5.445583690e-04f,
-5.495631407e-04f, 5.545667114e-04f, 5.595690725e-04f, 5.645702154e-04f, 5.695701316e-04f, 5.745688124e-04f, 5.795662494e-04f, 5.845624338e-04f, 5.895573573e-04f, 5.945510110e-04f,
-5.995433866e-04f, 6.045344755e-04f, 6.095242690e-04f, 6.145127587e-04f, 6.194999359e-04f, 6.244857921e-04f, 6.294703189e-04f, 6.344535075e-04f, 6.394353495e-04f, 6.444158364e-04f,
-6.493949595e-04f, 6.543727104e-04f, 6.593490806e-04f, 6.643240614e-04f, 6.692976444e-04f, 6.742698211e-04f, 6.792405828e-04f, 6.842099212e-04f, 6.891778276e-04f, 6.941442937e-04f,
-6.991093107e-04f, 7.040728704e-04f, 7.090349641e-04f, 7.139955833e-04f, 7.189547196e-04f, 7.239123644e-04f, 7.288685093e-04f, 7.338231457e-04f, 7.387762652e-04f, 7.437278594e-04f,
-7.486779196e-04f, 7.536264375e-04f, 7.585734045e-04f, 7.635188123e-04f, 7.684626522e-04f, 7.734049160e-04f, 7.783455950e-04f, 7.832846808e-04f, 7.882221651e-04f, 7.931580393e-04f,
-7.980922949e-04f, 8.030249236e-04f, 8.079559169e-04f, 8.128852663e-04f, 8.178129635e-04f, 8.227389999e-04f, 8.276633672e-04f, 8.325860569e-04f, 8.375070606e-04f, 8.424263699e-04f,
-8.473439764e-04f, 8.522598716e-04f, 8.571740472e-04f, 8.620864947e-04f, 8.669972057e-04f, 8.719061719e-04f, 8.768133848e-04f, 8.817188361e-04f, 8.866225173e-04f, 8.915244201e-04f,
-8.964245361e-04f, 9.013228568e-04f, 9.062193741e-04f, 9.111140794e-04f, 9.160069644e-04f, 9.208980207e-04f, 9.257872400e-04f, 9.306746139e-04f, 9.355601341e-04f, 9.404437922e-04f,
-9.453255798e-04f, 9.502054887e-04f, 9.550835104e-04f, 9.599596367e-04f, 9.648338592e-04f, 9.697061696e-04f, 9.745765596e-04f, 9.794450208e-04f, 9.843115449e-04f, 9.891761237e-04f,
-9.940387487e-04f, 9.988994118e-04f, 1.003758105e-03f, 1.008614819e-03f, 1.013469546e-03f, 1.018322278e-03f, 1.023173007e-03f, 1.028021723e-03f, 1.032868420e-03f, 1.037713089e-03f,
-1.042555721e-03f, 1.047396308e-03f, 1.052234842e-03f, 1.057071314e-03f, 1.061905717e-03f, 1.066738042e-03f, 1.071568281e-03f, 1.076396426e-03f, 1.081222468e-03f, 1.086046399e-03f,
-1.090868211e-03f, 1.095687896e-03f, 1.100505445e-03f, 1.105320851e-03f, 1.110134105e-03f, 1.114945198e-03f, 1.119754123e-03f, 1.124560872e-03f, 1.129365435e-03f, 1.134167806e-03f,
-1.138967976e-03f, 1.143765936e-03f, 1.148561679e-03f, 1.153355196e-03f, 1.158146479e-03f, 1.162935521e-03f, 1.167722312e-03f, 1.172506844e-03f, 1.177289111e-03f, 1.182069102e-03f,
-1.186846811e-03f, 1.191622229e-03f, 1.196395347e-03f, 1.201166159e-03f, 1.205934655e-03f, 1.210700828e-03f, 1.215464669e-03f, 1.220226170e-03f, 1.224985324e-03f, 1.229742121e-03f,
-1.234496555e-03f, 1.239248616e-03f, 1.243998297e-03f, 1.248745590e-03f, 1.253490487e-03f, 1.258232979e-03f, 1.262973058e-03f, 1.267710717e-03f, 1.272445947e-03f, 1.277178741e-03f,
-1.281909090e-03f, 1.286636985e-03f, 1.291362420e-03f, 1.296085386e-03f, 1.300805875e-03f, 1.305523879e-03f, 1.310239390e-03f, 1.314952400e-03f, 1.319662900e-03f, 1.324370884e-03f,
-1.329076343e-03f, 1.333779268e-03f, 1.338479652e-03f, 1.343177487e-03f, 1.347872766e-03f, 1.352565478e-03f, 1.357255618e-03f, 1.361943177e-03f, 1.366628147e-03f, 1.371310520e-03f,
-1.375990288e-03f, 1.380667443e-03f, 1.385341977e-03f, 1.390013882e-03f, 1.394683151e-03f, 1.399349775e-03f, 1.404013746e-03f, 1.408675057e-03f, 1.413333699e-03f, 1.417989665e-03f,
-1.422642946e-03f, 1.427293536e-03f, 1.431941425e-03f, 1.436586606e-03f, 1.441229072e-03f, 1.445868813e-03f, 1.450505823e-03f, 1.455140094e-03f, 1.459771617e-03f, 1.464400384e-03f,
-1.469026389e-03f, 1.473649623e-03f, 1.478270077e-03f, 1.482887745e-03f, 1.487502619e-03f, 1.492114690e-03f, 1.496723951e-03f, 1.501330394e-03f, 1.505934011e-03f, 1.510534795e-03f,
-1.515132737e-03f, 1.519727830e-03f, 1.524320065e-03f, 1.528909436e-03f, 1.533495935e-03f, 1.538079552e-03f, 1.542660282e-03f, 1.547238116e-03f, 1.551813046e-03f, 1.556385064e-03f,
-1.560954163e-03f, 1.565520335e-03f, 1.570083573e-03f, 1.574643868e-03f, 1.579201212e-03f, 1.583755599e-03f, 1.588307020e-03f, 1.592855468e-03f, 1.597400935e-03f, 1.601943412e-03f,
-1.606482894e-03f, 1.611019371e-03f, 1.615552836e-03f, 1.620083282e-03f, 1.624610700e-03f, 1.629135084e-03f, 1.633656425e-03f, 1.638174715e-03f, 1.642689948e-03f, 1.647202115e-03f,
-1.651711209e-03f, 1.656217223e-03f, 1.660720147e-03f, 1.665219976e-03f, 1.669716701e-03f, 1.674210314e-03f, 1.678700809e-03f, 1.683188177e-03f, 1.687672411e-03f, 1.692153503e-03f,
-1.696631446e-03f, 1.701106232e-03f, 1.705577854e-03f, 1.710046303e-03f, 1.714511573e-03f, 1.718973656e-03f, 1.723432544e-03f, 1.727888230e-03f, 1.732340706e-03f, 1.736789965e-03f,
-1.741235998e-03f, 1.745678800e-03f, 1.750118361e-03f, 1.754554675e-03f, 1.758987734e-03f, 1.763417531e-03f, 1.767844058e-03f, 1.772267308e-03f, 1.776687272e-03f, 1.781103945e-03f,
-1.785517317e-03f, 1.789927382e-03f, 1.794334133e-03f, 1.798737561e-03f, 1.803137660e-03f, 1.807534421e-03f, 1.811927839e-03f, 1.816317904e-03f, 1.820704610e-03f, 1.825087949e-03f,
-1.829467914e-03f, 1.833844498e-03f, 1.838217692e-03f, 1.842587490e-03f, 1.846953885e-03f, 1.851316868e-03f, 1.855676433e-03f, 1.860032573e-03f, 1.864385279e-03f, 1.868734544e-03f,
-1.873080362e-03f, 1.877422724e-03f, 1.881761624e-03f, 1.886097054e-03f, 1.890429007e-03f, 1.894757475e-03f, 1.899082452e-03f, 1.903403930e-03f, 1.907721901e-03f, 1.912036358e-03f,
-1.916347295e-03f, 1.920654703e-03f, 1.924958576e-03f, 1.929258906e-03f, 1.933555686e-03f, 1.937848909e-03f, 1.942138567e-03f, 1.946424654e-03f, 1.950707161e-03f, 1.954986083e-03f,
-1.959261411e-03f, 1.963533138e-03f, 1.967801258e-03f, 1.972065763e-03f, 1.976326645e-03f, 1.980583898e-03f, 1.984837515e-03f, 1.989087488e-03f, 1.993333810e-03f, 1.997576474e-03f,
-2.001815473e-03f, 2.006050799e-03f, 2.010282447e-03f, 2.014510407e-03f, 2.018734674e-03f, 2.022955240e-03f, 2.027172098e-03f, 2.031385241e-03f, 2.035594662e-03f, 2.039800354e-03f,
-2.044002309e-03f, 2.048200521e-03f, 2.052394983e-03f, 2.056585687e-03f, 2.060772627e-03f, 2.064955795e-03f, 2.069135184e-03f, 2.073310788e-03f, 2.077482599e-03f, 2.081650611e-03f,
-2.085814815e-03f, 2.089975206e-03f, 2.094131776e-03f, 2.098284519e-03f, 2.102433427e-03f, 2.106578493e-03f, 2.110719710e-03f, 2.114857072e-03f, 2.118990572e-03f, 2.123120201e-03f,
-2.127245955e-03f, 2.131367825e-03f, 2.135485804e-03f, 2.139599887e-03f, 2.143710065e-03f, 2.147816332e-03f, 2.151918682e-03f, 2.156017106e-03f, 2.160111599e-03f, 2.164202153e-03f,
-2.168288761e-03f, 2.172371417e-03f, 2.176450114e-03f, 2.180524845e-03f, 2.184595603e-03f, 2.188662381e-03f, 2.192725173e-03f, 2.196783971e-03f, 2.200838770e-03f, 2.204889561e-03f,
-2.208936338e-03f, 2.212979095e-03f, 2.217017824e-03f, 2.221052519e-03f, 2.225083173e-03f, 2.229109780e-03f, 2.233132332e-03f, 2.237150823e-03f, 2.241165246e-03f, 2.245175594e-03f,
-2.249181861e-03f, 2.253184039e-03f, 2.257182123e-03f, 2.261176106e-03f, 2.265165980e-03f, 2.269151739e-03f, 2.273133377e-03f, 2.277110886e-03f, 2.281084261e-03f, 2.285053493e-03f,
-2.289018578e-03f, 2.292979508e-03f, 2.296936276e-03f, 2.300888876e-03f, 2.304837301e-03f, 2.308781545e-03f, 2.312721601e-03f, 2.316657462e-03f, 2.320589122e-03f, 2.324516574e-03f,
-2.328439812e-03f, 2.332358829e-03f, 2.336273619e-03f, 2.340184174e-03f, 2.344090489e-03f, 2.347992557e-03f, 2.351890371e-03f, 2.355783925e-03f, 2.359673212e-03f, 2.363558226e-03f,
-2.367438961e-03f, 2.371315409e-03f, 2.375187565e-03f, 2.379055421e-03f, 2.382918972e-03f, 2.386778211e-03f, 2.390633131e-03f, 2.394483726e-03f, 2.398329990e-03f, 2.402171916e-03f,
-2.406009498e-03f, 2.409842729e-03f, 2.413671603e-03f, 2.417496114e-03f, 2.421316255e-03f, 2.425132019e-03f, 2.428943401e-03f, 2.432750394e-03f, 2.436552991e-03f, 2.440351187e-03f,
-2.444144975e-03f, 2.447934348e-03f, 2.451719301e-03f, 2.455499827e-03f, 2.459275919e-03f, 2.463047572e-03f, 2.466814779e-03f, 2.470577533e-03f, 2.474335829e-03f, 2.478089661e-03f,
-2.481839021e-03f, 2.485583904e-03f, 2.489324303e-03f, 2.493060213e-03f, 2.496791627e-03f, 2.500518538e-03f, 2.504240941e-03f, 2.507958830e-03f, 2.511672197e-03f, 2.515381038e-03f,
-2.519085345e-03f, 2.522785113e-03f, 2.526480335e-03f, 2.530171006e-03f, 2.533857119e-03f, 2.537538668e-03f, 2.541215646e-03f, 2.544888049e-03f, 2.548555869e-03f, 2.552219100e-03f,
-2.555877737e-03f, 2.559531774e-03f, 2.563181203e-03f, 2.566826020e-03f, 2.570466218e-03f, 2.574101790e-03f, 2.577732732e-03f, 2.581359037e-03f, 2.584980699e-03f, 2.588597711e-03f,
-2.592210069e-03f, 2.595817765e-03f, 2.599420794e-03f, 2.603019150e-03f, 2.606612827e-03f, 2.610201819e-03f, 2.613786120e-03f, 2.617365723e-03f, 2.620940624e-03f, 2.624510816e-03f,
-2.628076293e-03f, 2.631637049e-03f, 2.635193079e-03f, 2.638744376e-03f, 2.642290934e-03f, 2.645832748e-03f, 2.649369812e-03f, 2.652902120e-03f, 2.656429665e-03f, 2.659952443e-03f,
-2.663470447e-03f, 2.666983672e-03f, 2.670492111e-03f, 2.673995759e-03f, 2.677494610e-03f, 2.680988658e-03f, 2.684477897e-03f, 2.687962323e-03f, 2.691441927e-03f, 2.694916706e-03f,
-2.698386654e-03f, 2.701851763e-03f, 2.705312030e-03f, 2.708767447e-03f, 2.712218010e-03f, 2.715663713e-03f, 2.719104549e-03f, 2.722540514e-03f, 2.725971601e-03f, 2.729397805e-03f,
-2.732819120e-03f, 2.736235540e-03f, 2.739647060e-03f, 2.743053675e-03f, 2.746455377e-03f, 2.749852163e-03f, 2.753244026e-03f, 2.756630961e-03f, 2.760012962e-03f, 2.763390023e-03f,
-2.766762139e-03f, 2.770129304e-03f, 2.773491513e-03f, 2.776848760e-03f, 2.780201040e-03f, 2.783548347e-03f, 2.786890675e-03f, 2.790228019e-03f, 2.793560374e-03f, 2.796887734e-03f,
-2.800210093e-03f, 2.803527446e-03f, 2.806839788e-03f, 2.810147112e-03f, 2.813449414e-03f, 2.816746689e-03f, 2.820038930e-03f, 2.823326132e-03f, 2.826608290e-03f, 2.829885398e-03f,
-2.833157451e-03f, 2.836424444e-03f, 2.839686371e-03f, 2.842943227e-03f, 2.846195006e-03f, 2.849441703e-03f, 2.852683313e-03f, 2.855919831e-03f, 2.859151250e-03f, 2.862377566e-03f,
-2.865598773e-03f, 2.868814867e-03f, 2.872025841e-03f, 2.875231690e-03f, 2.878432410e-03f, 2.881627995e-03f, 2.884818439e-03f, 2.888003738e-03f, 2.891183886e-03f, 2.894358877e-03f,
-2.897528708e-03f, 2.900693372e-03f, 2.903852864e-03f, 2.907007179e-03f, 2.910156312e-03f, 2.913300258e-03f, 2.916439011e-03f, 2.919572566e-03f, 2.922700919e-03f, 2.925824064e-03f,
-2.928941995e-03f, 2.932054709e-03f, 2.935162199e-03f, 2.938264460e-03f, 2.941361488e-03f, 2.944453278e-03f, 2.947539824e-03f, 2.950621121e-03f, 2.953697164e-03f, 2.956767948e-03f,
-2.959833468e-03f, 2.962893719e-03f, 2.965948696e-03f, 2.968998395e-03f, 2.972042809e-03f, 2.975081934e-03f, 2.978115765e-03f, 2.981144297e-03f, 2.984167526e-03f, 2.987185445e-03f,
-2.990198050e-03f, 2.993205337e-03f, 2.996207300e-03f, 2.999203934e-03f, 3.002195235e-03f, 3.005181197e-03f, 3.008161816e-03f, 3.011137087e-03f, 3.014107005e-03f, 3.017071564e-03f,
-3.020030761e-03f, 3.022984590e-03f, 3.025933047e-03f, 3.028876126e-03f, 3.031813824e-03f, 3.034746134e-03f, 3.037673052e-03f, 3.040594574e-03f, 3.043510695e-03f, 3.046421410e-03f,
-3.049326714e-03f, 3.052226602e-03f, 3.055121070e-03f, 3.058010112e-03f, 3.060893725e-03f, 3.063771904e-03f, 3.066644643e-03f, 3.069511939e-03f, 3.072373786e-03f, 3.075230179e-03f,
-3.078081115e-03f, 3.080926588e-03f, 3.083766594e-03f, 3.086601129e-03f, 3.089430187e-03f, 3.092253763e-03f, 3.095071854e-03f, 3.097884455e-03f, 3.100691561e-03f, 3.103493168e-03f,
-3.106289270e-03f, 3.109079864e-03f, 3.111864945e-03f, 3.114644509e-03f, 3.117418550e-03f, 3.120187064e-03f, 3.122950048e-03f, 3.125707496e-03f, 3.128459403e-03f, 3.131205766e-03f,
-3.133946580e-03f, 3.136681840e-03f, 3.139411542e-03f, 3.142135682e-03f, 3.144854255e-03f, 3.147567257e-03f, 3.150274683e-03f, 3.152976529e-03f, 3.155672790e-03f, 3.158363463e-03f,
-3.161048542e-03f, 3.163728024e-03f, 3.166401904e-03f, 3.169070177e-03f, 3.171732840e-03f, 3.174389888e-03f, 3.177041317e-03f, 3.179687122e-03f, 3.182327299e-03f, 3.184961845e-03f,
-3.187590754e-03f, 3.190214022e-03f, 3.192831645e-03f, 3.195443620e-03f, 3.198049940e-03f, 3.200650604e-03f, 3.203245605e-03f, 3.205834941e-03f, 3.208418606e-03f, 3.210996597e-03f,
-3.213568910e-03f, 3.216135540e-03f, 3.218696483e-03f, 3.221251735e-03f, 3.223801292e-03f, 3.226345149e-03f, 3.228883304e-03f, 3.231415751e-03f, 3.233942486e-03f, 3.236463506e-03f,
-3.238978806e-03f, 3.241488382e-03f, 3.243992231e-03f, 3.246490348e-03f, 3.248982729e-03f, 3.251469370e-03f, 3.253950267e-03f, 3.256425416e-03f, 3.258894814e-03f, 3.261358455e-03f,
-3.263816337e-03f, 3.266268455e-03f, 3.268714806e-03f, 3.271155384e-03f, 3.273590187e-03f, 3.276019211e-03f, 3.278442451e-03f, 3.280859904e-03f, 3.283271566e-03f, 3.285677432e-03f,
-3.288077500e-03f, 3.290471765e-03f, 3.292860223e-03f, 3.295242871e-03f, 3.297619705e-03f, 3.299990720e-03f, 3.302355914e-03f, 3.304715281e-03f, 3.307068820e-03f, 3.309416525e-03f,
-3.311758393e-03f, 3.314094420e-03f, 3.316424603e-03f, 3.318748937e-03f, 3.321067419e-03f, 3.323380046e-03f, 3.325686814e-03f, 3.327987718e-03f, 3.330282755e-03f, 3.332571922e-03f,
-3.334855215e-03f, 3.337132630e-03f, 3.339404164e-03f, 3.341669813e-03f, 3.343929573e-03f, 3.346183441e-03f, 3.348431413e-03f, 3.350673485e-03f, 3.352909655e-03f, 3.355139918e-03f,
-3.357364270e-03f, 3.359582710e-03f, 3.361795231e-03f, 3.364001832e-03f, 3.366202509e-03f, 3.368397258e-03f, 3.370586076e-03f, 3.372768959e-03f, 3.374945904e-03f, 3.377116907e-03f,
-3.379281965e-03f, 3.381441074e-03f, 3.383594232e-03f, 3.385741434e-03f, 3.387882677e-03f, 3.390017958e-03f, 3.392147273e-03f, 3.394270619e-03f, 3.396387993e-03f, 3.398499391e-03f,
-3.400604809e-03f, 3.402704246e-03f, 3.404797697e-03f, 3.406885158e-03f, 3.408966627e-03f, 3.411042101e-03f, 3.413111575e-03f, 3.415175048e-03f, 3.417232515e-03f, 3.419283973e-03f,
-3.421329419e-03f, 3.423368849e-03f, 3.425402262e-03f, 3.427429652e-03f, 3.429451018e-03f, 3.431466356e-03f, 3.433475662e-03f, 3.435478934e-03f, 3.437476169e-03f, 3.439467363e-03f,
-3.441452513e-03f, 3.443431616e-03f, 3.445404668e-03f, 3.447371668e-03f, 3.449332611e-03f, 3.451287495e-03f, 3.453236317e-03f, 3.455179073e-03f, 3.457115760e-03f, 3.459046376e-03f,
-3.460970917e-03f, 3.462889381e-03f, 3.464801763e-03f, 3.466708062e-03f, 3.468608275e-03f, 3.470502398e-03f, 3.472390428e-03f, 3.474272363e-03f, 3.476148199e-03f, 3.478017933e-03f,
-3.479881564e-03f, 3.481739087e-03f, 3.483590500e-03f, 3.485435799e-03f, 3.487274983e-03f, 3.489108048e-03f, 3.490934991e-03f, 3.492755810e-03f, 3.494570502e-03f, 3.496379063e-03f,
-3.498181491e-03f, 3.499977783e-03f, 3.501767937e-03f, 3.503551949e-03f, 3.505329817e-03f, 3.507101538e-03f, 3.508867110e-03f, 3.510626529e-03f, 3.512379793e-03f, 3.514126899e-03f,
-3.515867844e-03f, 3.517602626e-03f, 3.519331242e-03f, 3.521053689e-03f, 3.522769965e-03f, 3.524480067e-03f, 3.526183993e-03f, 3.527881739e-03f, 3.529573303e-03f, 3.531258683e-03f,
-3.532937875e-03f, 3.534610878e-03f, 3.536277689e-03f, 3.537938305e-03f, 3.539592723e-03f, 3.541240942e-03f, 3.542882957e-03f, 3.544518768e-03f, 3.546148372e-03f, 3.547771765e-03f,
-3.549388946e-03f, 3.550999912e-03f, 3.552604660e-03f, 3.554203189e-03f, 3.555795495e-03f, 3.557381576e-03f, 3.558961430e-03f, 3.560535054e-03f, 3.562102446e-03f, 3.563663604e-03f,
-3.565218525e-03f, 3.566767206e-03f, 3.568309646e-03f, 3.569845843e-03f, 3.571375792e-03f, 3.572899493e-03f, 3.574416944e-03f, 3.575928141e-03f, 3.577433082e-03f, 3.578931766e-03f,
-3.580424189e-03f, 3.581910350e-03f, 3.583390247e-03f, 3.584863877e-03f, 3.586331237e-03f, 3.587792326e-03f, 3.589247142e-03f, 3.590695682e-03f, 3.592137944e-03f, 3.593573926e-03f,
-3.595003626e-03f, 3.596427041e-03f, 3.597844170e-03f, 3.599255010e-03f, 3.600659559e-03f, 3.602057816e-03f, 3.603449777e-03f, 3.604835441e-03f, 3.606214807e-03f, 3.607587870e-03f,
-3.608954631e-03f, 3.610315086e-03f, 3.611669234e-03f, 3.613017072e-03f, 3.614358599e-03f, 3.615693813e-03f, 3.617022711e-03f, 3.618345291e-03f, 3.619661553e-03f, 3.620971493e-03f,
-3.622275110e-03f, 3.623572401e-03f, 3.624863366e-03f, 3.626148001e-03f, 3.627426306e-03f, 3.628698277e-03f, 3.629963914e-03f, 3.631223215e-03f, 3.632476177e-03f, 3.633722798e-03f,
-3.634963078e-03f, 3.636197014e-03f, 3.637424604e-03f, 3.638645846e-03f, 3.639860739e-03f, 3.641069281e-03f, 3.642271470e-03f, 3.643467304e-03f, 3.644656782e-03f, 3.645839902e-03f,
-3.647016662e-03f, 3.648187060e-03f, 3.649351095e-03f, 3.650508766e-03f, 3.651660069e-03f, 3.652805004e-03f, 3.653943570e-03f, 3.655075763e-03f, 3.656201583e-03f, 3.657321029e-03f,
-3.658434098e-03f, 3.659540789e-03f, 3.660641100e-03f, 3.661735030e-03f, 3.662822577e-03f, 3.663903740e-03f, 3.664978516e-03f, 3.666046906e-03f, 3.667108906e-03f, 3.668164515e-03f,
-3.669213733e-03f, 3.670256557e-03f, 3.671292987e-03f, 3.672323019e-03f, 3.673346654e-03f, 3.674363889e-03f, 3.675374724e-03f, 3.676379156e-03f, 3.677377185e-03f, 3.678368809e-03f,
-3.679354026e-03f, 3.680332836e-03f, 3.681305236e-03f, 3.682271226e-03f, 3.683230803e-03f, 3.684183968e-03f, 3.685130718e-03f, 3.686071052e-03f, 3.687004969e-03f, 3.687932468e-03f,
-3.688853546e-03f, 3.689768204e-03f, 3.690676440e-03f, 3.691578252e-03f, 3.692473639e-03f, 3.693362600e-03f, 3.694245134e-03f, 3.695121240e-03f, 3.695990916e-03f, 3.696854162e-03f,
-3.697710975e-03f, 3.698561356e-03f, 3.699405302e-03f, 3.700242812e-03f, 3.701073887e-03f, 3.701898523e-03f, 3.702716721e-03f, 3.703528480e-03f, 3.704333797e-03f, 3.705132672e-03f,
-3.705925105e-03f, 3.706711093e-03f, 3.707490637e-03f, 3.708263734e-03f, 3.709030384e-03f, 3.709790586e-03f, 3.710544339e-03f, 3.711291642e-03f, 3.712032493e-03f, 3.712766893e-03f,
-3.713494840e-03f, 3.714216333e-03f, 3.714931371e-03f, 3.715639954e-03f, 3.716342079e-03f, 3.717037748e-03f, 3.717726958e-03f, 3.718409709e-03f, 3.719085999e-03f, 3.719755829e-03f,
-3.720419197e-03f, 3.721076102e-03f, 3.721726544e-03f, 3.722370522e-03f, 3.723008035e-03f, 3.723639082e-03f, 3.724263662e-03f, 3.724881775e-03f, 3.725493421e-03f, 3.726098597e-03f,
-3.726697304e-03f, 3.727289541e-03f, 3.727875307e-03f, 3.728454601e-03f, 3.729027423e-03f, 3.729593772e-03f, 3.730153648e-03f, 3.730707049e-03f, 3.731253975e-03f, 3.731794426e-03f,
-3.732328401e-03f, 3.732855900e-03f, 3.733376921e-03f, 3.733891464e-03f, 3.734399529e-03f, 3.734901115e-03f, 3.735396221e-03f, 3.735884848e-03f, 3.736366994e-03f, 3.736842659e-03f,
-3.737311842e-03f, 3.737774544e-03f, 3.738230762e-03f, 3.738680498e-03f, 3.739123751e-03f, 3.739560520e-03f, 3.739990804e-03f, 3.740414604e-03f, 3.740831918e-03f, 3.741242748e-03f,
-3.741647091e-03f, 3.742044948e-03f, 3.742436318e-03f, 3.742821202e-03f, 3.743199598e-03f, 3.743571507e-03f, 3.743936927e-03f, 3.744295860e-03f, 3.744648304e-03f, 3.744994259e-03f,
-3.745333725e-03f, 3.745666701e-03f, 3.745993188e-03f, 3.746313186e-03f, 3.746626693e-03f, 3.746933710e-03f, 3.747234236e-03f, 3.747528272e-03f, 3.747815817e-03f, 3.748096870e-03f,
-3.748371433e-03f, 3.748639504e-03f, 3.748901084e-03f, 3.749156172e-03f, 3.749404769e-03f, 3.749646874e-03f, 3.749882487e-03f, 3.750111607e-03f, 3.750334236e-03f, 3.750550373e-03f,
-3.750760018e-03f, 3.750963170e-03f, 3.751159830e-03f, 3.751349998e-03f, 3.751533674e-03f, 3.751710857e-03f, 3.751881548e-03f, 3.752045748e-03f, 3.752203454e-03f, 3.752354669e-03f,
-3.752499392e-03f, 3.752637623e-03f, 3.752769362e-03f, 3.752894610e-03f, 3.753013366e-03f, 3.753125630e-03f, 3.753231403e-03f, 3.753330684e-03f, 3.753423475e-03f, 3.753509774e-03f,
-3.753589583e-03f, 3.753662902e-03f, 3.753729730e-03f, 3.753790068e-03f, 3.753843916e-03f, 3.753891274e-03f, 3.753932143e-03f, 3.753966522e-03f, 3.753994413e-03f, 3.754015815e-03f,
-3.754030729e-03f, 3.754039155e-03f, 3.754041093e-03f, 3.754036544e-03f, 3.754025507e-03f, 3.754007984e-03f, 3.753983974e-03f, 3.753953479e-03f, 3.753916498e-03f, 3.753873031e-03f,
-3.753823080e-03f, 3.753766644e-03f, 3.753703725e-03f, 3.753634322e-03f, 3.753558435e-03f, 3.753476066e-03f, 3.753387215e-03f, 3.753291882e-03f, 3.753190068e-03f, 3.753081773e-03f,
-3.752966998e-03f, 3.752845744e-03f, 3.752718010e-03f, 3.752583798e-03f, 3.752443107e-03f, 3.752295939e-03f, 3.752142295e-03f, 3.751982173e-03f, 3.751815577e-03f, 3.751642505e-03f,
-3.751462959e-03f, 3.751276939e-03f, 3.751084445e-03f, 3.750885479e-03f, 3.750680042e-03f, 3.750468133e-03f, 3.750249754e-03f, 3.750024905e-03f, 3.749793587e-03f, 3.749555800e-03f,
-3.749311547e-03f, 3.749060826e-03f, 3.748803639e-03f, 3.748539987e-03f, 3.748269870e-03f, 3.747993289e-03f, 3.747710246e-03f, 3.747420741e-03f, 3.747124774e-03f, 3.746822347e-03f,
-3.746513460e-03f, 3.746198114e-03f, 3.745876311e-03f, 3.745548050e-03f, 3.745213334e-03f, 3.744872162e-03f, 3.744524536e-03f, 3.744170456e-03f, 3.743809924e-03f, 3.743442941e-03f,
-3.743069507e-03f, 3.742689624e-03f, 3.742303292e-03f, 3.741910512e-03f, 3.741511286e-03f, 3.741105614e-03f, 3.740693498e-03f, 3.740274938e-03f, 3.739849936e-03f, 3.739418493e-03f,
-3.738980609e-03f, 3.738536286e-03f, 3.738085525e-03f, 3.737628326e-03f, 3.737164692e-03f, 3.736694623e-03f, 3.736218120e-03f, 3.735735185e-03f, 3.735245819e-03f, 3.734750022e-03f,
-3.734247796e-03f, 3.733739143e-03f, 3.733224062e-03f, 3.732702557e-03f, 3.732174627e-03f, 3.731640274e-03f, 3.731099500e-03f, 3.730552305e-03f, 3.729998691e-03f, 3.729438659e-03f,
-3.728872211e-03f, 3.728299347e-03f, 3.727720069e-03f, 3.727134379e-03f, 3.726542277e-03f, 3.725943765e-03f, 3.725338845e-03f, 3.724727517e-03f, 3.724109784e-03f, 3.723485646e-03f,
-3.722855105e-03f, 3.722218162e-03f, 3.721574819e-03f, 3.720925078e-03f, 3.720268938e-03f, 3.719606403e-03f, 3.718937474e-03f, 3.718262152e-03f, 3.717580438e-03f, 3.716892334e-03f,
-3.716197841e-03f, 3.715496962e-03f, 3.714789697e-03f, 3.714076049e-03f, 3.713356018e-03f, 3.712629606e-03f, 3.711896816e-03f, 3.711157647e-03f, 3.710412103e-03f, 3.709660184e-03f,
-3.708901893e-03f, 3.708137230e-03f, 3.707366198e-03f, 3.706588798e-03f, 3.705805032e-03f, 3.705014901e-03f, 3.704218408e-03f, 3.703415553e-03f, 3.702606340e-03f, 3.701790768e-03f,
-3.700968841e-03f, 3.700140559e-03f, 3.699305925e-03f, 3.698464940e-03f, 3.697617606e-03f, 3.696763925e-03f, 3.695903899e-03f, 3.695037529e-03f, 3.694164818e-03f, 3.693285766e-03f,
-3.692400377e-03f, 3.691508651e-03f, 3.690610591e-03f, 3.689706199e-03f, 3.688795476e-03f, 3.687878424e-03f, 3.686955045e-03f, 3.686025342e-03f, 3.685089315e-03f, 3.684146968e-03f,
-3.683198301e-03f, 3.682243318e-03f, 3.681282019e-03f, 3.680314407e-03f, 3.679340484e-03f, 3.678360252e-03f, 3.677373712e-03f, 3.676380868e-03f, 3.675381720e-03f, 3.674376271e-03f,
-3.673364524e-03f, 3.672346479e-03f, 3.671322139e-03f, 3.670291507e-03f, 3.669254584e-03f, 3.668211372e-03f, 3.667161874e-03f, 3.666106092e-03f, 3.665044028e-03f, 3.663975683e-03f,
-3.662901060e-03f, 3.661820162e-03f, 3.660732991e-03f, 3.659639548e-03f, 3.658539836e-03f, 3.657433857e-03f, 3.656321613e-03f, 3.655203107e-03f, 3.654078341e-03f, 3.652947317e-03f,
-3.651810037e-03f, 3.650666504e-03f, 3.649516719e-03f, 3.648360686e-03f, 3.647198407e-03f, 3.646029883e-03f, 3.644855118e-03f, 3.643674113e-03f, 3.642486871e-03f, 3.641293394e-03f,
-3.640093685e-03f, 3.638887746e-03f, 3.637675579e-03f, 3.636457187e-03f, 3.635232572e-03f, 3.634001737e-03f, 3.632764685e-03f, 3.631521416e-03f, 3.630271935e-03f, 3.629016243e-03f,
-3.627754344e-03f, 3.626486238e-03f, 3.625211930e-03f, 3.623931421e-03f, 3.622644715e-03f, 3.621351812e-03f, 3.620052717e-03f, 3.618747432e-03f, 3.617435959e-03f, 3.616118300e-03f,
-3.614794459e-03f, 3.613464438e-03f, 3.612128240e-03f, 3.610785867e-03f, 3.609437321e-03f, 3.608082606e-03f, 3.606721725e-03f, 3.605354679e-03f, 3.603981472e-03f, 3.602602105e-03f,
-3.601216583e-03f, 3.599824907e-03f, 3.598427081e-03f, 3.597023106e-03f, 3.595612986e-03f, 3.594196724e-03f, 3.592774322e-03f, 3.591345783e-03f, 3.589911110e-03f, 3.588470305e-03f,
-3.587023372e-03f, 3.585570313e-03f, 3.584111131e-03f, 3.582645829e-03f, 3.581174409e-03f, 3.579696875e-03f, 3.578213230e-03f, 3.576723475e-03f, 3.575227615e-03f, 3.573725652e-03f,
-3.572217589e-03f, 3.570703429e-03f, 3.569183174e-03f, 3.567656828e-03f, 3.566124394e-03f, 3.564585874e-03f, 3.563041272e-03f, 3.561490591e-03f, 3.559933833e-03f, 3.558371002e-03f,
-3.556802100e-03f, 3.555227130e-03f, 3.553646097e-03f, 3.552059002e-03f, 3.550465848e-03f, 3.548866640e-03f, 3.547261379e-03f, 3.545650069e-03f, 3.544032713e-03f, 3.542409314e-03f,
-3.540779875e-03f, 3.539144400e-03f, 3.537502891e-03f, 3.535855351e-03f, 3.534201785e-03f, 3.532542194e-03f, 3.530876582e-03f, 3.529204952e-03f, 3.527527308e-03f, 3.525843653e-03f,
-3.524153989e-03f, 3.522458321e-03f, 3.520756650e-03f, 3.519048982e-03f, 3.517335318e-03f, 3.515615662e-03f, 3.513890017e-03f, 3.512158387e-03f, 3.510420775e-03f, 3.508677185e-03f,
-3.506927618e-03f, 3.505172080e-03f, 3.503410573e-03f, 3.501643100e-03f, 3.499869665e-03f, 3.498090272e-03f, 3.496304923e-03f, 3.494513622e-03f, 3.492716372e-03f, 3.490913178e-03f,
-3.489104041e-03f, 3.487288967e-03f, 3.485467957e-03f, 3.483641016e-03f, 3.481808147e-03f, 3.479969353e-03f, 3.478124638e-03f, 3.476274006e-03f, 3.474417460e-03f, 3.472555003e-03f,
-3.470686639e-03f, 3.468812371e-03f, 3.466932203e-03f, 3.465046140e-03f, 3.463154183e-03f, 3.461256336e-03f, 3.459352605e-03f, 3.457442990e-03f, 3.455527498e-03f, 3.453606130e-03f,
-3.451678891e-03f, 3.449745785e-03f, 3.447806814e-03f, 3.445861983e-03f, 3.443911295e-03f, 3.441954754e-03f, 3.439992363e-03f, 3.438024127e-03f, 3.436050049e-03f, 3.434070132e-03f,
-3.432084381e-03f, 3.430092799e-03f, 3.428095389e-03f, 3.426092156e-03f, 3.424083104e-03f, 3.422068236e-03f, 3.420047555e-03f, 3.418021066e-03f, 3.415988773e-03f, 3.413950679e-03f,
-3.411906788e-03f, 3.409857104e-03f, 3.407801631e-03f, 3.405740372e-03f, 3.403673331e-03f, 3.401600513e-03f, 3.399521922e-03f, 3.397437560e-03f, 3.395347432e-03f, 3.393251542e-03f,
-3.391149893e-03f, 3.389042491e-03f, 3.386929338e-03f, 3.384810438e-03f, 3.382685796e-03f, 3.380555416e-03f, 3.378419301e-03f, 3.376277455e-03f, 3.374129883e-03f, 3.371976588e-03f,
-3.369817575e-03f, 3.367652847e-03f, 3.365482408e-03f, 3.363306263e-03f, 3.361124416e-03f, 3.358936870e-03f, 3.356743630e-03f, 3.354544699e-03f, 3.352340083e-03f, 3.350129784e-03f,
-3.347913808e-03f, 3.345692157e-03f, 3.343464837e-03f, 3.341231852e-03f, 3.338993204e-03f, 3.336748900e-03f, 3.334498942e-03f, 3.332243336e-03f, 3.329982085e-03f, 3.327715193e-03f,
-3.325442665e-03f, 3.323164504e-03f, 3.320880716e-03f, 3.318591304e-03f, 3.316296273e-03f, 3.313995626e-03f, 3.311689369e-03f, 3.309377504e-03f, 3.307060038e-03f, 3.304736973e-03f,
-3.302408314e-03f, 3.300074066e-03f, 3.297734233e-03f, 3.295388818e-03f, 3.293037828e-03f, 3.290681265e-03f, 3.288319134e-03f, 3.285951440e-03f, 3.283578186e-03f, 3.281199378e-03f,
-3.278815020e-03f, 3.276425115e-03f, 3.274029669e-03f, 3.271628686e-03f, 3.269222170e-03f, 3.266810126e-03f, 3.264392559e-03f, 3.261969472e-03f, 3.259540870e-03f, 3.257106757e-03f,
-3.254667139e-03f, 3.252222019e-03f, 3.249771402e-03f, 3.247315293e-03f, 3.244853697e-03f, 3.242386616e-03f, 3.239914057e-03f, 3.237436024e-03f, 3.234952521e-03f, 3.232463553e-03f,
-3.229969124e-03f, 3.227469239e-03f, 3.224963903e-03f, 3.222453120e-03f, 3.219936895e-03f, 3.217415232e-03f, 3.214888137e-03f, 3.212355613e-03f, 3.209817666e-03f, 3.207274299e-03f,
-3.204725519e-03f, 3.202171328e-03f, 3.199611733e-03f, 3.197046738e-03f, 3.194476347e-03f, 3.191900565e-03f, 3.189319397e-03f, 3.186732848e-03f, 3.184140922e-03f, 3.181543625e-03f,
-3.178940960e-03f, 3.176332933e-03f, 3.173719548e-03f, 3.171100811e-03f, 3.168476726e-03f, 3.165847297e-03f, 3.163212530e-03f, 3.160572430e-03f, 3.157927000e-03f, 3.155276247e-03f,
-3.152620175e-03f, 3.149958789e-03f, 3.147292094e-03f, 3.144620094e-03f, 3.141942795e-03f, 3.139260201e-03f, 3.136572317e-03f, 3.133879148e-03f, 3.131180700e-03f, 3.128476976e-03f,
-3.125767983e-03f, 3.123053724e-03f, 3.120334206e-03f, 3.117609432e-03f, 3.114879408e-03f, 3.112144138e-03f, 3.109403629e-03f, 3.106657884e-03f, 3.103906909e-03f, 3.101150709e-03f,
-3.098389289e-03f, 3.095622654e-03f, 3.092850808e-03f, 3.090073758e-03f, 3.087291508e-03f, 3.084504062e-03f, 3.081711427e-03f, 3.078913607e-03f, 3.076110608e-03f, 3.073302434e-03f,
-3.070489091e-03f, 3.067670583e-03f, 3.064846916e-03f, 3.062018095e-03f, 3.059184125e-03f, 3.056345012e-03f, 3.053500760e-03f, 3.050651375e-03f, 3.047796861e-03f, 3.044937224e-03f,
-3.042072470e-03f, 3.039202603e-03f, 3.036327629e-03f, 3.033447552e-03f, 3.030562379e-03f, 3.027672114e-03f, 3.024776763e-03f, 3.021876330e-03f, 3.018970821e-03f, 3.016060242e-03f,
-3.013144598e-03f, 3.010223893e-03f, 3.007298134e-03f, 3.004367326e-03f, 3.001431473e-03f, 2.998490581e-03f, 2.995544657e-03f, 2.992593704e-03f, 2.989637728e-03f, 2.986676735e-03f,
-2.983710730e-03f, 2.980739718e-03f, 2.977763705e-03f, 2.974782696e-03f, 2.971796697e-03f, 2.968805713e-03f, 2.965809749e-03f, 2.962808811e-03f, 2.959802904e-03f, 2.956792034e-03f,
-2.953776206e-03f, 2.950755426e-03f, 2.947729698e-03f, 2.944699030e-03f, 2.941663425e-03f, 2.938622890e-03f, 2.935577430e-03f, 2.932527051e-03f, 2.929471757e-03f, 2.926411556e-03f,
-2.923346451e-03f, 2.920276449e-03f, 2.917201556e-03f, 2.914121776e-03f, 2.911037115e-03f, 2.907947580e-03f, 2.904853175e-03f, 2.901753906e-03f, 2.898649779e-03f, 2.895540799e-03f,
-2.892426972e-03f, 2.889308304e-03f, 2.886184800e-03f, 2.883056466e-03f, 2.879923307e-03f, 2.876785330e-03f, 2.873642539e-03f, 2.870494941e-03f, 2.867342541e-03f, 2.864185345e-03f,
-2.861023359e-03f, 2.857856588e-03f, 2.854685037e-03f, 2.851508714e-03f, 2.848327623e-03f, 2.845141770e-03f, 2.841951161e-03f, 2.838755802e-03f, 2.835555698e-03f, 2.832350856e-03f,
-2.829141280e-03f, 2.825926977e-03f, 2.822707953e-03f, 2.819484213e-03f, 2.816255764e-03f, 2.813022610e-03f, 2.809784758e-03f, 2.806542214e-03f, 2.803294984e-03f, 2.800043072e-03f,
-2.796786486e-03f, 2.793525231e-03f, 2.790259313e-03f, 2.786988738e-03f, 2.783713511e-03f, 2.780433639e-03f, 2.777149128e-03f, 2.773859983e-03f, 2.770566210e-03f, 2.767267816e-03f,
-2.763964805e-03f, 2.760657185e-03f, 2.757344961e-03f, 2.754028139e-03f, 2.750706725e-03f, 2.747380725e-03f, 2.744050145e-03f, 2.740714991e-03f, 2.737375269e-03f, 2.734030984e-03f,
-2.730682144e-03f, 2.727328754e-03f, 2.723970819e-03f, 2.720608347e-03f, 2.717241342e-03f, 2.713869812e-03f, 2.710493762e-03f, 2.707113198e-03f, 2.703728127e-03f, 2.700338554e-03f,
-2.696944485e-03f, 2.693545927e-03f, 2.690142885e-03f, 2.686735366e-03f, 2.683323376e-03f, 2.679906921e-03f, 2.676486008e-03f, 2.673060641e-03f, 2.669630828e-03f, 2.666196574e-03f,
-2.662757886e-03f, 2.659314770e-03f, 2.655867232e-03f, 2.652415279e-03f, 2.648958915e-03f, 2.645498149e-03f, 2.642032985e-03f, 2.638563430e-03f, 2.635089490e-03f, 2.631611172e-03f,
-2.628128482e-03f, 2.624641425e-03f, 2.621150009e-03f, 2.617654239e-03f, 2.614154122e-03f, 2.610649664e-03f, 2.607140871e-03f, 2.603627750e-03f, 2.600110306e-03f, 2.596588546e-03f,
-2.593062477e-03f, 2.589532105e-03f, 2.585997436e-03f, 2.582458476e-03f, 2.578915232e-03f, 2.575367710e-03f, 2.571815916e-03f, 2.568259857e-03f, 2.564699539e-03f, 2.561134969e-03f,
-2.557566152e-03f, 2.553993096e-03f, 2.550415806e-03f, 2.546834289e-03f, 2.543248552e-03f, 2.539658601e-03f, 2.536064441e-03f, 2.532466081e-03f, 2.528863525e-03f, 2.525256782e-03f,
-2.521645856e-03f, 2.518030754e-03f, 2.514411484e-03f, 2.510788050e-03f, 2.507160461e-03f, 2.503528722e-03f, 2.499892839e-03f, 2.496252820e-03f, 2.492608671e-03f, 2.488960398e-03f,
-2.485308008e-03f, 2.481651507e-03f, 2.477990902e-03f, 2.474326200e-03f, 2.470657406e-03f, 2.466984528e-03f, 2.463307572e-03f, 2.459626544e-03f, 2.455941452e-03f, 2.452252301e-03f,
-2.448559099e-03f, 2.444861851e-03f, 2.441160565e-03f, 2.437455247e-03f, 2.433745904e-03f, 2.430032542e-03f, 2.426315168e-03f, 2.422593788e-03f, 2.418868410e-03f, 2.415139039e-03f,
-2.411405683e-03f, 2.407668349e-03f, 2.403927041e-03f, 2.400181769e-03f, 2.396432537e-03f, 2.392679354e-03f, 2.388922224e-03f, 2.385161156e-03f, 2.381396156e-03f, 2.377627231e-03f,
-2.373854386e-03f, 2.370077630e-03f, 2.366296968e-03f, 2.362512408e-03f, 2.358723956e-03f, 2.354931619e-03f, 2.351135404e-03f, 2.347335317e-03f, 2.343531366e-03f, 2.339723556e-03f,
-2.335911895e-03f, 2.332096390e-03f, 2.328277047e-03f, 2.324453873e-03f, 2.320626876e-03f, 2.316796060e-03f, 2.312961435e-03f, 2.309123005e-03f, 2.305280779e-03f, 2.301434763e-03f,
-2.297584964e-03f, 2.293731389e-03f, 2.289874044e-03f, 2.286012936e-03f, 2.282148073e-03f, 2.278279461e-03f, 2.274407107e-03f, 2.270531017e-03f, 2.266651200e-03f, 2.262767661e-03f,
-2.258880408e-03f, 2.254989447e-03f, 2.251094786e-03f, 2.247196431e-03f, 2.243294389e-03f, 2.239388668e-03f, 2.235479273e-03f, 2.231566213e-03f, 2.227649493e-03f, 2.223729122e-03f,
-2.219805105e-03f, 2.215877450e-03f, 2.211946164e-03f, 2.208011254e-03f, 2.204072727e-03f, 2.200130590e-03f, 2.196184849e-03f, 2.192235512e-03f, 2.188282586e-03f, 2.184326077e-03f,
-2.180365994e-03f, 2.176402342e-03f, 2.172435129e-03f, 2.168464362e-03f, 2.164490048e-03f, 2.160512194e-03f, 2.156530807e-03f, 2.152545894e-03f, 2.148557463e-03f, 2.144565519e-03f,
-2.140570071e-03f, 2.136571126e-03f, 2.132568689e-03f, 2.128562770e-03f, 2.124553374e-03f, 2.120540509e-03f, 2.116524182e-03f, 2.112504399e-03f, 2.108481169e-03f, 2.104454498e-03f,
-2.100424394e-03f, 2.096390863e-03f, 2.092353913e-03f, 2.088313550e-03f, 2.084269783e-03f, 2.080222618e-03f, 2.076172062e-03f, 2.072118122e-03f, 2.068060806e-03f, 2.064000121e-03f,
-2.059936074e-03f, 2.055868672e-03f, 2.051797923e-03f, 2.047723833e-03f, 2.043646410e-03f, 2.039565661e-03f, 2.035481594e-03f, 2.031394215e-03f, 2.027303531e-03f, 2.023209551e-03f,
-2.019112280e-03f, 2.015011728e-03f, 2.010907900e-03f, 2.006800803e-03f, 2.002690446e-03f, 1.998576836e-03f, 1.994459979e-03f, 1.990339883e-03f, 1.986216556e-03f, 1.982090004e-03f,
-1.977960235e-03f, 1.973827257e-03f, 1.969691076e-03f, 1.965551699e-03f, 1.961409135e-03f, 1.957263390e-03f, 1.953114472e-03f, 1.948962389e-03f, 1.944807146e-03f, 1.940648752e-03f,
-1.936487215e-03f, 1.932322541e-03f, 1.928154738e-03f, 1.923983813e-03f, 1.919809773e-03f, 1.915632627e-03f, 1.911452380e-03f, 1.907269042e-03f, 1.903082618e-03f, 1.898893117e-03f,
-1.894700546e-03f, 1.890504912e-03f, 1.886306223e-03f, 1.882104486e-03f, 1.877899709e-03f, 1.873691898e-03f, 1.869481061e-03f, 1.865267207e-03f, 1.861050341e-03f, 1.856830473e-03f,
-1.852607608e-03f, 1.848381755e-03f, 1.844152921e-03f, 1.839921113e-03f, 1.835686339e-03f, 1.831448607e-03f, 1.827207923e-03f, 1.822964296e-03f, 1.818717732e-03f, 1.814468240e-03f,
-1.810215827e-03f, 1.805960500e-03f, 1.801702266e-03f, 1.797441134e-03f, 1.793177111e-03f, 1.788910204e-03f, 1.784640421e-03f, 1.780367770e-03f, 1.776092257e-03f, 1.771813891e-03f,
-1.767532678e-03f, 1.763248627e-03f, 1.758961745e-03f, 1.754672040e-03f, 1.750379519e-03f, 1.746084190e-03f, 1.741786060e-03f, 1.737485136e-03f, 1.733181428e-03f, 1.728874941e-03f,
-1.724565684e-03f, 1.720253664e-03f, 1.715938888e-03f, 1.711621366e-03f, 1.707301103e-03f, 1.702978107e-03f, 1.698652387e-03f, 1.694323950e-03f, 1.689992803e-03f, 1.685658954e-03f,
-1.681322411e-03f, 1.676983181e-03f, 1.672641271e-03f, 1.668296691e-03f, 1.663949447e-03f, 1.659599546e-03f, 1.655246997e-03f, 1.650891807e-03f, 1.646533984e-03f, 1.642173536e-03f,
-1.637810469e-03f, 1.633444793e-03f, 1.629076514e-03f, 1.624705640e-03f, 1.620332179e-03f, 1.615956139e-03f, 1.611577526e-03f, 1.607196350e-03f, 1.602812617e-03f, 1.598426336e-03f,
-1.594037514e-03f, 1.589646158e-03f, 1.585252278e-03f, 1.580855879e-03f, 1.576456970e-03f, 1.572055559e-03f, 1.567651653e-03f, 1.563245260e-03f, 1.558836389e-03f, 1.554425046e-03f,
-1.550011239e-03f, 1.545594976e-03f, 1.541176265e-03f, 1.536755114e-03f, 1.532331530e-03f, 1.527905522e-03f, 1.523477096e-03f, 1.519046261e-03f, 1.514613025e-03f, 1.510177395e-03f,
-1.505739379e-03f, 1.501298984e-03f, 1.496856220e-03f, 1.492411093e-03f, 1.487963611e-03f, 1.483513782e-03f, 1.479061614e-03f, 1.474607114e-03f, 1.470150292e-03f, 1.465691153e-03f,
-1.461229707e-03f, 1.456765960e-03f, 1.452299921e-03f, 1.447831598e-03f, 1.443360999e-03f, 1.438888130e-03f, 1.434413001e-03f, 1.429935619e-03f, 1.425455992e-03f, 1.420974127e-03f,
-1.416490033e-03f, 1.412003717e-03f, 1.407515188e-03f, 1.403024453e-03f, 1.398531520e-03f, 1.394036396e-03f, 1.389539091e-03f, 1.385039611e-03f, 1.380537965e-03f, 1.376034160e-03f,
-1.371528204e-03f, 1.367020106e-03f, 1.362509873e-03f, 1.357997512e-03f, 1.353483033e-03f, 1.348966443e-03f, 1.344447749e-03f, 1.339926960e-03f, 1.335404084e-03f, 1.330879128e-03f,
-1.326352100e-03f, 1.321823009e-03f, 1.317291862e-03f, 1.312758668e-03f, 1.308223433e-03f, 1.303686167e-03f, 1.299146877e-03f, 1.294605571e-03f, 1.290062256e-03f, 1.285516942e-03f,
-1.280969635e-03f, 1.276420345e-03f, 1.271869078e-03f, 1.267315842e-03f, 1.262760647e-03f, 1.258203499e-03f, 1.253644407e-03f, 1.249083378e-03f, 1.244520421e-03f, 1.239955544e-03f,
-1.235388754e-03f, 1.230820060e-03f, 1.226249470e-03f, 1.221676991e-03f, 1.217102631e-03f, 1.212526399e-03f, 1.207948303e-03f, 1.203368350e-03f, 1.198786549e-03f, 1.194202907e-03f,
-1.189617433e-03f, 1.185030135e-03f, 1.180441020e-03f, 1.175850097e-03f, 1.171257373e-03f, 1.166662858e-03f, 1.162066558e-03f, 1.157468481e-03f, 1.152868637e-03f, 1.148267033e-03f,
-1.143663676e-03f, 1.139058575e-03f, 1.134451738e-03f, 1.129843174e-03f, 1.125232889e-03f, 1.120620893e-03f, 1.116007192e-03f, 1.111391796e-03f, 1.106774713e-03f, 1.102155950e-03f,
-1.097535515e-03f, 1.092913416e-03f, 1.088289663e-03f, 1.083664262e-03f, 1.079037221e-03f, 1.074408550e-03f, 1.069778255e-03f, 1.065146346e-03f, 1.060512829e-03f, 1.055877714e-03f,
-1.051241008e-03f, 1.046602719e-03f, 1.041962855e-03f, 1.037321426e-03f, 1.032678438e-03f, 1.028033899e-03f, 1.023387819e-03f, 1.018740204e-03f, 1.014091064e-03f, 1.009440405e-03f,
-1.004788237e-03f, 1.000134567e-03f, 9.954794044e-04f, 9.908227559e-04f, 9.861646302e-04f, 9.815050354e-04f, 9.768439797e-04f, 9.721814710e-04f, 9.675175177e-04f, 9.628521278e-04f,
-9.581853094e-04f, 9.535170707e-04f, 9.488474199e-04f, 9.441763650e-04f, 9.395039142e-04f, 9.348300757e-04f, 9.301548576e-04f, 9.254782680e-04f, 9.208003152e-04f, 9.161210072e-04f,
-9.114403522e-04f, 9.067583584e-04f, 9.020750339e-04f, 8.973903869e-04f, 8.927044256e-04f, 8.880171581e-04f, 8.833285926e-04f, 8.786387372e-04f, 8.739476002e-04f, 8.692551896e-04f,
-8.645615138e-04f, 8.598665807e-04f, 8.551703987e-04f, 8.504729759e-04f, 8.457743205e-04f, 8.410744407e-04f, 8.363733446e-04f, 8.316710404e-04f, 8.269675364e-04f, 8.222628406e-04f,
-8.175569614e-04f, 8.128499069e-04f, 8.081416852e-04f, 8.034323047e-04f, 7.987217734e-04f, 7.940100996e-04f, 7.892972915e-04f, 7.845833573e-04f, 7.798683052e-04f, 7.751521434e-04f,
-7.704348800e-04f, 7.657165234e-04f, 7.609970817e-04f, 7.562765631e-04f, 7.515549759e-04f, 7.468323282e-04f, 7.421086283e-04f, 7.373838843e-04f, 7.326581046e-04f, 7.279312973e-04f,
-7.232034706e-04f, 7.184746329e-04f, 7.137447922e-04f, 7.090139568e-04f, 7.042821349e-04f, 6.995493349e-04f, 6.948155648e-04f, 6.900808330e-04f, 6.853451476e-04f, 6.806085169e-04f,
-6.758709491e-04f, 6.711324525e-04f, 6.663930353e-04f, 6.616527057e-04f, 6.569114720e-04f, 6.521693424e-04f, 6.474263252e-04f, 6.426824285e-04f, 6.379376607e-04f, 6.331920300e-04f,
-6.284455446e-04f, 6.236982128e-04f, 6.189500427e-04f, 6.142010428e-04f, 6.094512212e-04f, 6.047005861e-04f, 5.999491459e-04f, 5.951969087e-04f, 5.904438828e-04f, 5.856900766e-04f,
-5.809354981e-04f, 5.761801558e-04f, 5.714240577e-04f, 5.666672123e-04f, 5.619096278e-04f, 5.571513124e-04f, 5.523922743e-04f, 5.476325219e-04f, 5.428720634e-04f, 5.381109071e-04f,
-5.333490612e-04f, 5.285865340e-04f, 5.238233337e-04f, 5.190594687e-04f, 5.142949472e-04f, 5.095297774e-04f, 5.047639677e-04f, 4.999975262e-04f, 4.952304613e-04f, 4.904627813e-04f,
-4.856944943e-04f, 4.809256088e-04f, 4.761561329e-04f, 4.713860749e-04f, 4.666154431e-04f, 4.618442458e-04f, 4.570724912e-04f, 4.523001876e-04f, 4.475273433e-04f, 4.427539666e-04f,
-4.379800658e-04f, 4.332056490e-04f, 4.284307247e-04f, 4.236553010e-04f, 4.188793863e-04f, 4.141029889e-04f, 4.093261169e-04f, 4.045487787e-04f, 3.997709826e-04f, 3.949927369e-04f,
-3.902140498e-04f, 3.854349296e-04f, 3.806553846e-04f, 3.758754231e-04f, 3.710950533e-04f, 3.663142836e-04f, 3.615331222e-04f, 3.567515774e-04f, 3.519696575e-04f, 3.471873707e-04f,
-3.424047255e-04f, 3.376217299e-04f, 3.328383924e-04f, 3.280547212e-04f, 3.232707246e-04f, 3.184864108e-04f, 3.137017882e-04f, 3.089168651e-04f, 3.041316497e-04f, 2.993461503e-04f,
-2.945603751e-04f, 2.897743326e-04f, 2.849880310e-04f, 2.802014785e-04f, 2.754146834e-04f, 2.706276540e-04f, 2.658403987e-04f, 2.610529256e-04f, 2.562652432e-04f, 2.514773596e-04f,
-2.466892831e-04f, 2.419010221e-04f, 2.371125847e-04f, 2.323239794e-04f, 2.275352144e-04f, 2.227462979e-04f, 2.179572383e-04f, 2.131680438e-04f, 2.083787227e-04f, 2.035892834e-04f,
-1.987997340e-04f, 1.940100829e-04f, 1.892203383e-04f, 1.844305086e-04f, 1.796406020e-04f, 1.748506268e-04f, 1.700605912e-04f, 1.652705037e-04f, 1.604803723e-04f, 1.556902055e-04f,
-1.509000115e-04f, 1.461097986e-04f, 1.413195750e-04f, 1.365293491e-04f, 1.317391291e-04f, 1.269489233e-04f, 1.221587400e-04f, 1.173685874e-04f, 1.125784738e-04f, 1.077884076e-04f,
-1.029983969e-04f, 9.820845014e-05f, 9.341857548e-05f, 8.862878122e-05f, 8.383907564e-05f, 7.904946701e-05f, 7.425996361e-05f, 6.947057371e-05f, 6.468130557e-05f, 5.989216748e-05f,
-5.510316770e-05f, 5.031431450e-05f, 4.552561615e-05f, 4.073708091e-05f, 3.594871706e-05f, 3.116053286e-05f, 2.637253658e-05f, 2.158473648e-05f, 1.679714083e-05f, 1.200975788e-05f,
-7.222595914e-06f, 2.435663180e-06f, -2.351032057e-06f, -7.137481536e-06f, -1.192367700e-05f, -1.670961019e-05f, -2.149527284e-05f, -2.628065670e-05f, -3.106575352e-05f, -3.585055503e-05f,
--4.063505299e-05f, -4.541923913e-05f, -5.020310522e-05f, -5.498664299e-05f, -5.976984420e-05f, -6.455270059e-05f, -6.933520393e-05f, -7.411734595e-05f, -7.889911842e-05f, -8.368051308e-05f,
--8.846152171e-05f, -9.324213604e-05f, -9.802234784e-05f, -1.028021489e-04f, -1.075815309e-04f, -1.123604857e-04f, -1.171390050e-04f, -1.219170805e-04f, -1.266947041e-04f, -1.314718675e-04f,
--1.362485625e-04f, -1.410247808e-04f, -1.458005143e-04f, -1.505757546e-04f, -1.553504936e-04f, -1.601247230e-04f, -1.648984346e-04f, -1.696716202e-04f, -1.744442715e-04f, -1.792163804e-04f,
--1.839879386e-04f, -1.887589379e-04f, -1.935293701e-04f, -1.982992269e-04f, -2.030685002e-04f, -2.078371818e-04f, -2.126052633e-04f, -2.173727367e-04f, -2.221395937e-04f, -2.269058261e-04f,
--2.316714257e-04f, -2.364363842e-04f, -2.412006936e-04f, -2.459643456e-04f, -2.507273319e-04f, -2.554896444e-04f, -2.602512750e-04f, -2.650122153e-04f, -2.697724572e-04f, -2.745319925e-04f,
--2.792908131e-04f, -2.840489107e-04f, -2.888062772e-04f, -2.935629043e-04f, -2.983187839e-04f, -3.030739078e-04f, -3.078282678e-04f, -3.125818558e-04f, -3.173346635e-04f, -3.220866829e-04f,
--3.268379056e-04f, -3.315883236e-04f, -3.363379287e-04f, -3.410867126e-04f, -3.458346674e-04f, -3.505817847e-04f, -3.553280564e-04f, -3.600734744e-04f, -3.648180305e-04f, -3.695617166e-04f,
--3.743045244e-04f, -3.790464459e-04f, -3.837874729e-04f, -3.885275972e-04f, -3.932668107e-04f, -3.980051052e-04f, -4.027424727e-04f, -4.074789049e-04f, -4.122143938e-04f, -4.169489311e-04f,
--4.216825089e-04f, -4.264151188e-04f, -4.311467528e-04f, -4.358774029e-04f, -4.406070607e-04f, -4.453357183e-04f, -4.500633674e-04f, -4.547900001e-04f, -4.595156081e-04f, -4.642401833e-04f,
--4.689637177e-04f, -4.736862031e-04f, -4.784076315e-04f, -4.831279946e-04f, -4.878472844e-04f, -4.925654928e-04f, -4.972826118e-04f, -5.019986331e-04f, -5.067135487e-04f, -5.114273506e-04f,
--5.161400306e-04f, -5.208515806e-04f, -5.255619926e-04f, -5.302712584e-04f, -5.349793701e-04f, -5.396863194e-04f, -5.443920984e-04f, -5.490966990e-04f, -5.538001130e-04f, -5.585023325e-04f,
--5.632033493e-04f, -5.679031554e-04f, -5.726017427e-04f, -5.772991032e-04f, -5.819952288e-04f, -5.866901115e-04f, -5.913837432e-04f, -5.960761159e-04f, -6.007672214e-04f, -6.054570519e-04f,
--6.101455992e-04f, -6.148328553e-04f, -6.195188121e-04f, -6.242034617e-04f, -6.288867959e-04f, -6.335688068e-04f, -6.382494864e-04f, -6.429288266e-04f, -6.476068194e-04f, -6.522834568e-04f,
--6.569587307e-04f, -6.616326333e-04f, -6.663051563e-04f, -6.709762920e-04f, -6.756460321e-04f, -6.803143688e-04f, -6.849812941e-04f, -6.896467999e-04f, -6.943108783e-04f, -6.989735212e-04f,
--7.036347208e-04f, -7.082944689e-04f, -7.129527577e-04f, -7.176095791e-04f, -7.222649252e-04f, -7.269187880e-04f, -7.315711595e-04f, -7.362220319e-04f, -7.408713970e-04f, -7.455192469e-04f,
--7.501655738e-04f, -7.548103696e-04f, -7.594536264e-04f, -7.640953362e-04f, -7.687354912e-04f, -7.733740833e-04f, -7.780111046e-04f, -7.826465472e-04f, -7.872804032e-04f, -7.919126646e-04f,
--7.965433235e-04f, -8.011723720e-04f, -8.057998021e-04f, -8.104256060e-04f, -8.150497758e-04f, -8.196723034e-04f, -8.242931811e-04f, -8.289124009e-04f, -8.335299549e-04f, -8.381458352e-04f,
--8.427600340e-04f, -8.473725433e-04f, -8.519833553e-04f, -8.565924620e-04f, -8.611998556e-04f, -8.658055283e-04f, -8.704094721e-04f, -8.750116791e-04f, -8.796121416e-04f, -8.842108516e-04f,
--8.888078013e-04f, -8.934029828e-04f, -8.979963883e-04f, -9.025880100e-04f, -9.071778399e-04f, -9.117658702e-04f, -9.163520932e-04f, -9.209365010e-04f, -9.255190856e-04f, -9.300998394e-04f,
--9.346787545e-04f, -9.392558230e-04f, -9.438310372e-04f, -9.484043893e-04f, -9.529758713e-04f, -9.575454756e-04f, -9.621131943e-04f, -9.666790196e-04f, -9.712429438e-04f, -9.758049589e-04f,
--9.803650573e-04f, -9.849232312e-04f, -9.894794728e-04f, -9.940337742e-04f, -9.985861278e-04f, -1.003136526e-03f, -1.007684960e-03f, -1.012231424e-03f, -1.016775908e-03f, -1.021318406e-03f,
--1.025858909e-03f, -1.030397411e-03f, -1.034933902e-03f, -1.039468375e-03f, -1.044000824e-03f, -1.048531239e-03f, -1.053059613e-03f, -1.057585939e-03f, -1.062110208e-03f, -1.066632414e-03f,
--1.071152547e-03f, -1.075670602e-03f, -1.080186569e-03f, -1.084700441e-03f, -1.089212211e-03f, -1.093721870e-03f, -1.098229412e-03f, -1.102734828e-03f, -1.107238111e-03f, -1.111739253e-03f,
--1.116238246e-03f, -1.120735083e-03f, -1.125229756e-03f, -1.129722258e-03f, -1.134212580e-03f, -1.138700716e-03f, -1.143186657e-03f, -1.147670395e-03f, -1.152151924e-03f, -1.156631235e-03f,
--1.161108322e-03f, -1.165583175e-03f, -1.170055788e-03f, -1.174526154e-03f, -1.178994264e-03f, -1.183460110e-03f, -1.187923686e-03f, -1.192384983e-03f, -1.196843995e-03f, -1.201300713e-03f,
--1.205755129e-03f, -1.210207237e-03f, -1.214657029e-03f, -1.219104497e-03f, -1.223549633e-03f, -1.227992431e-03f, -1.232432882e-03f, -1.236870978e-03f, -1.241306714e-03f, -1.245740079e-03f,
--1.250171068e-03f, -1.254599673e-03f, -1.259025886e-03f, -1.263449700e-03f, -1.267871106e-03f, -1.272290099e-03f, -1.276706669e-03f, -1.281120810e-03f, -1.285532514e-03f, -1.289941773e-03f,
--1.294348581e-03f, -1.298752929e-03f, -1.303154810e-03f, -1.307554217e-03f, -1.311951142e-03f, -1.316345578e-03f, -1.320737517e-03f, -1.325126951e-03f, -1.329513874e-03f, -1.333898277e-03f,
--1.338280154e-03f, -1.342659497e-03f, -1.347036298e-03f, -1.351410551e-03f, -1.355782247e-03f, -1.360151379e-03f, -1.364517940e-03f, -1.368881922e-03f, -1.373243318e-03f, -1.377602121e-03f,
--1.381958322e-03f, -1.386311916e-03f, -1.390662894e-03f, -1.395011248e-03f, -1.399356973e-03f, -1.403700059e-03f, -1.408040501e-03f, -1.412378289e-03f, -1.416713418e-03f, -1.421045880e-03f,
--1.425375666e-03f, -1.429702771e-03f, -1.434027187e-03f, -1.438348906e-03f, -1.442667921e-03f, -1.446984224e-03f, -1.451297809e-03f, -1.455608668e-03f, -1.459916794e-03f, -1.464222179e-03f,
--1.468524816e-03f, -1.472824699e-03f, -1.477121818e-03f, -1.481416168e-03f, -1.485707741e-03f, -1.489996529e-03f, -1.494282526e-03f, -1.498565724e-03f, -1.502846116e-03f, -1.507123695e-03f,
--1.511398453e-03f, -1.515670383e-03f, -1.519939478e-03f, -1.524205730e-03f, -1.528469133e-03f, -1.532729680e-03f, -1.536987362e-03f, -1.541242173e-03f, -1.545494105e-03f, -1.549743152e-03f,
--1.553989306e-03f, -1.558232561e-03f, -1.562472907e-03f, -1.566710340e-03f, -1.570944851e-03f, -1.575176433e-03f, -1.579405079e-03f, -1.583630782e-03f, -1.587853535e-03f, -1.592073331e-03f,
--1.596290162e-03f, -1.600504021e-03f, -1.604714902e-03f, -1.608922797e-03f, -1.613127698e-03f, -1.617329600e-03f, -1.621528494e-03f, -1.625724374e-03f, -1.629917232e-03f, -1.634107062e-03f,
--1.638293857e-03f, -1.642477608e-03f, -1.646658310e-03f, -1.650835955e-03f, -1.655010536e-03f, -1.659182045e-03f, -1.663350477e-03f, -1.667515824e-03f, -1.671678079e-03f, -1.675837234e-03f,
--1.679993283e-03f, -1.684146219e-03f, -1.688296035e-03f, -1.692442723e-03f, -1.696586278e-03f, -1.700726690e-03f, -1.704863955e-03f, -1.708998064e-03f, -1.713129011e-03f, -1.717256789e-03f,
--1.721381391e-03f, -1.725502809e-03f, -1.729621038e-03f, -1.733736069e-03f, -1.737847896e-03f, -1.741956512e-03f, -1.746061910e-03f, -1.750164084e-03f, -1.754263025e-03f, -1.758358728e-03f,
--1.762451186e-03f, -1.766540390e-03f, -1.770626336e-03f, -1.774709015e-03f, -1.778788420e-03f, -1.782864546e-03f, -1.786937385e-03f, -1.791006930e-03f, -1.795073174e-03f, -1.799136110e-03f,
--1.803195732e-03f, -1.807252033e-03f, -1.811305006e-03f, -1.815354643e-03f, -1.819400939e-03f, -1.823443887e-03f, -1.827483478e-03f, -1.831519708e-03f, -1.835552569e-03f, -1.839582053e-03f,
--1.843608155e-03f, -1.847630868e-03f, -1.851650184e-03f, -1.855666098e-03f, -1.859678601e-03f, -1.863687688e-03f, -1.867693352e-03f, -1.871695586e-03f, -1.875694383e-03f, -1.879689737e-03f,
--1.883681640e-03f, -1.887670086e-03f, -1.891655069e-03f, -1.895636581e-03f, -1.899614616e-03f, -1.903589168e-03f, -1.907560229e-03f, -1.911527792e-03f, -1.915491852e-03f, -1.919452401e-03f,
--1.923409434e-03f, -1.927362942e-03f, -1.931312920e-03f, -1.935259360e-03f, -1.939202257e-03f, -1.943141603e-03f, -1.947077393e-03f, -1.951009618e-03f, -1.954938273e-03f, -1.958863352e-03f,
--1.962784847e-03f, -1.966702752e-03f, -1.970617060e-03f, -1.974527764e-03f, -1.978434859e-03f, -1.982338338e-03f, -1.986238193e-03f, -1.990134419e-03f, -1.994027009e-03f, -1.997915956e-03f,
--2.001801254e-03f, -2.005682896e-03f, -2.009560877e-03f, -2.013435188e-03f, -2.017305824e-03f, -2.021172778e-03f, -2.025036044e-03f, -2.028895616e-03f, -2.032751486e-03f, -2.036603648e-03f,
--2.040452096e-03f, -2.044296824e-03f, -2.048137824e-03f, -2.051975091e-03f, -2.055808618e-03f, -2.059638398e-03f, -2.063464426e-03f, -2.067286694e-03f, -2.071105196e-03f, -2.074919927e-03f,
--2.078730879e-03f, -2.082538046e-03f, -2.086341422e-03f, -2.090141000e-03f, -2.093936774e-03f, -2.097728737e-03f, -2.101516884e-03f, -2.105301208e-03f, -2.109081702e-03f, -2.112858361e-03f,
--2.116631177e-03f, -2.120400145e-03f, -2.124165258e-03f, -2.127926510e-03f, -2.131683894e-03f, -2.135437405e-03f, -2.139187036e-03f, -2.142932780e-03f, -2.146674632e-03f, -2.150412585e-03f,
--2.154146633e-03f, -2.157876770e-03f, -2.161602989e-03f, -2.165325284e-03f, -2.169043649e-03f, -2.172758078e-03f, -2.176468564e-03f, -2.180175102e-03f, -2.183877684e-03f, -2.187576306e-03f,
--2.191270960e-03f, -2.194961640e-03f, -2.198648341e-03f, -2.202331056e-03f, -2.206009779e-03f, -2.209684504e-03f, -2.213355224e-03f, -2.217021934e-03f, -2.220684628e-03f, -2.224343299e-03f,
--2.227997940e-03f, -2.231648547e-03f, -2.235295113e-03f, -2.238937631e-03f, -2.242576097e-03f, -2.246210503e-03f, -2.249840843e-03f, -2.253467112e-03f, -2.257089304e-03f, -2.260707412e-03f,
--2.264321430e-03f, -2.267931352e-03f, -2.271537173e-03f, -2.275138886e-03f, -2.278736486e-03f, -2.282329965e-03f, -2.285919319e-03f, -2.289504541e-03f, -2.293085625e-03f, -2.296662566e-03f,
--2.300235356e-03f, -2.303803991e-03f, -2.307368465e-03f, -2.310928771e-03f, -2.314484903e-03f, -2.318036856e-03f, -2.321584624e-03f, -2.325128200e-03f, -2.328667579e-03f, -2.332202755e-03f,
--2.335733722e-03f, -2.339260474e-03f, -2.342783005e-03f, -2.346301309e-03f, -2.349815381e-03f, -2.353325215e-03f, -2.356830804e-03f, -2.360332143e-03f, -2.363829227e-03f, -2.367322048e-03f,
--2.370810602e-03f, -2.374294883e-03f, -2.377774884e-03f, -2.381250601e-03f, -2.384722026e-03f, -2.388189155e-03f, -2.391651982e-03f, -2.395110501e-03f, -2.398564705e-03f, -2.402014591e-03f,
--2.405460150e-03f, -2.408901379e-03f, -2.412338271e-03f, -2.415770820e-03f, -2.419199021e-03f, -2.422622869e-03f, -2.426042356e-03f, -2.429457478e-03f, -2.432868229e-03f, -2.436274604e-03f,
--2.439676596e-03f, -2.443074200e-03f, -2.446467410e-03f, -2.449856221e-03f, -2.453240627e-03f, -2.456620623e-03f, -2.459996202e-03f, -2.463367359e-03f, -2.466734089e-03f, -2.470096386e-03f,
--2.473454245e-03f, -2.476807659e-03f, -2.480156624e-03f, -2.483501133e-03f, -2.486841181e-03f, -2.490176763e-03f, -2.493507874e-03f, -2.496834506e-03f, -2.500156656e-03f, -2.503474317e-03f,
--2.506787484e-03f, -2.510096151e-03f, -2.513400314e-03f, -2.516699966e-03f, -2.519995102e-03f, -2.523285717e-03f, -2.526571804e-03f, -2.529853360e-03f, -2.533130377e-03f, -2.536402852e-03f,
--2.539670778e-03f, -2.542934149e-03f, -2.546192962e-03f, -2.549447209e-03f, -2.552696886e-03f, -2.555941988e-03f, -2.559182508e-03f, -2.562418442e-03f, -2.565649784e-03f, -2.568876530e-03f,
--2.572098672e-03f, -2.575316207e-03f, -2.578529129e-03f, -2.581737433e-03f, -2.584941112e-03f, -2.588140163e-03f, -2.591334579e-03f, -2.594524356e-03f, -2.597709488e-03f, -2.600889969e-03f,
--2.604065795e-03f, -2.607236961e-03f, -2.610403460e-03f, -2.613565289e-03f, -2.616722440e-03f, -2.619874911e-03f, -2.623022694e-03f, -2.626165786e-03f, -2.629304180e-03f, -2.632437872e-03f,
--2.635566856e-03f, -2.638691127e-03f, -2.641810681e-03f, -2.644925511e-03f, -2.648035614e-03f, -2.651140982e-03f, -2.654241613e-03f, -2.657337500e-03f, -2.660428638e-03f, -2.663515022e-03f,
--2.666596647e-03f, -2.669673509e-03f, -2.672745601e-03f, -2.675812919e-03f, -2.678875458e-03f, -2.681933213e-03f, -2.684986178e-03f, -2.688034349e-03f, -2.691077721e-03f, -2.694116288e-03f,
--2.697150046e-03f, -2.700178990e-03f, -2.703203114e-03f, -2.706222414e-03f, -2.709236884e-03f, -2.712246521e-03f, -2.715251318e-03f, -2.718251270e-03f, -2.721246374e-03f, -2.724236624e-03f,
--2.727222014e-03f, -2.730202541e-03f, -2.733178199e-03f, -2.736148983e-03f, -2.739114889e-03f, -2.742075911e-03f, -2.745032045e-03f, -2.747983285e-03f, -2.750929628e-03f, -2.753871067e-03f,
--2.756807599e-03f, -2.759739219e-03f, -2.762665921e-03f, -2.765587701e-03f, -2.768504553e-03f, -2.771416474e-03f, -2.774323459e-03f, -2.777225502e-03f, -2.780122599e-03f, -2.783014745e-03f,
--2.785901936e-03f, -2.788784166e-03f, -2.791661431e-03f, -2.794533726e-03f, -2.797401047e-03f, -2.800263389e-03f, -2.803120746e-03f, -2.805973115e-03f, -2.808820491e-03f, -2.811662869e-03f,
--2.814500244e-03f, -2.817332612e-03f, -2.820159968e-03f, -2.822982308e-03f, -2.825799626e-03f, -2.828611919e-03f, -2.831419181e-03f, -2.834221409e-03f, -2.837018596e-03f, -2.839810740e-03f,
--2.842597835e-03f, -2.845379877e-03f, -2.848156860e-03f, -2.850928782e-03f, -2.853695636e-03f, -2.856457420e-03f, -2.859214127e-03f, -2.861965754e-03f, -2.864712295e-03f, -2.867453748e-03f,
--2.870190106e-03f, -2.872921366e-03f, -2.875647523e-03f, -2.878368573e-03f, -2.881084512e-03f, -2.883795334e-03f, -2.886501035e-03f, -2.889201611e-03f, -2.891897058e-03f, -2.894587371e-03f,
--2.897272546e-03f, -2.899952578e-03f, -2.902627464e-03f, -2.905297198e-03f, -2.907961776e-03f, -2.910621194e-03f, -2.913275448e-03f, -2.915924533e-03f, -2.918568445e-03f, -2.921207180e-03f,
--2.923840733e-03f, -2.926469100e-03f, -2.929092278e-03f, -2.931710260e-03f, -2.934323044e-03f, -2.936930625e-03f, -2.939532999e-03f, -2.942130161e-03f, -2.944722108e-03f, -2.947308834e-03f,
--2.949890337e-03f, -2.952466611e-03f, -2.955037653e-03f, -2.957603458e-03f, -2.960164023e-03f, -2.962719342e-03f, -2.965269412e-03f, -2.967814229e-03f, -2.970353789e-03f, -2.972888086e-03f,
--2.975417119e-03f, -2.977940881e-03f, -2.980459370e-03f, -2.982972581e-03f, -2.985480510e-03f, -2.987983152e-03f, -2.990480505e-03f, -2.992972563e-03f, -2.995459323e-03f, -2.997940781e-03f,
--3.000416933e-03f, -3.002887774e-03f, -3.005353301e-03f, -3.007813510e-03f, -3.010268396e-03f, -3.012717956e-03f, -3.015162186e-03f, -3.017601082e-03f, -3.020034640e-03f, -3.022462856e-03f,
--3.024885726e-03f, -3.027303245e-03f, -3.029715411e-03f, -3.032122220e-03f, -3.034523667e-03f, -3.036919748e-03f, -3.039310460e-03f, -3.041695799e-03f, -3.044075761e-03f, -3.046450342e-03f,
--3.048819538e-03f, -3.051183346e-03f, -3.053541761e-03f, -3.055894781e-03f, -3.058242400e-03f, -3.060584616e-03f, -3.062921424e-03f, -3.065252820e-03f, -3.067578802e-03f, -3.069899365e-03f,
--3.072214506e-03f, -3.074524220e-03f, -3.076828505e-03f, -3.079127355e-03f, -3.081420769e-03f, -3.083708741e-03f, -3.085991269e-03f, -3.088268348e-03f, -3.090539975e-03f, -3.092806147e-03f,
--3.095066859e-03f, -3.097322108e-03f, -3.099571891e-03f, -3.101816204e-03f, -3.104055042e-03f, -3.106288403e-03f, -3.108516284e-03f, -3.110738680e-03f, -3.112955587e-03f, -3.115167003e-03f,
--3.117372924e-03f, -3.119573346e-03f, -3.121768266e-03f, -3.123957680e-03f, -3.126141584e-03f, -3.128319976e-03f, -3.130492852e-03f, -3.132660208e-03f, -3.134822040e-03f, -3.136978346e-03f,
--3.139129122e-03f, -3.141274365e-03f, -3.143414070e-03f, -3.145548235e-03f, -3.147676856e-03f, -3.149799930e-03f, -3.151917453e-03f, -3.154029423e-03f, -3.156135835e-03f, -3.158236686e-03f,
--3.160331973e-03f, -3.162421693e-03f, -3.164505842e-03f, -3.166584418e-03f, -3.168657415e-03f, -3.170724833e-03f, -3.172786666e-03f, -3.174842912e-03f, -3.176893567e-03f, -3.178938629e-03f,
--3.180978094e-03f, -3.183011958e-03f, -3.185040219e-03f, -3.187062874e-03f, -3.189079918e-03f, -3.191091349e-03f, -3.193097164e-03f, -3.195097360e-03f, -3.197091933e-03f, -3.199080880e-03f,
--3.201064198e-03f, -3.203041884e-03f, -3.205013934e-03f, -3.206980347e-03f, -3.208941118e-03f, -3.210896244e-03f, -3.212845722e-03f, -3.214789550e-03f, -3.216727724e-03f, -3.218660241e-03f,
--3.220587098e-03f, -3.222508292e-03f, -3.224423820e-03f, -3.226333679e-03f, -3.228237866e-03f, -3.230136378e-03f, -3.232029212e-03f, -3.233916365e-03f, -3.235797833e-03f, -3.237673615e-03f,
--3.239543707e-03f, -3.241408106e-03f, -3.243266809e-03f, -3.245119813e-03f, -3.246967116e-03f, -3.248808714e-03f, -3.250644604e-03f, -3.252474785e-03f, -3.254299252e-03f, -3.256118003e-03f,
--3.257931035e-03f, -3.259738345e-03f, -3.261539931e-03f, -3.263335789e-03f, -3.265125917e-03f, -3.266910312e-03f, -3.268688971e-03f, -3.270461891e-03f, -3.272229070e-03f, -3.273990505e-03f,
--3.275746193e-03f, -3.277496131e-03f, -3.279240317e-03f, -3.280978748e-03f, -3.282711420e-03f, -3.284438333e-03f, -3.286159482e-03f, -3.287874865e-03f, -3.289584480e-03f, -3.291288323e-03f,
--3.292986393e-03f, -3.294678685e-03f, -3.296365199e-03f, -3.298045931e-03f, -3.299720879e-03f, -3.301390039e-03f, -3.303053410e-03f, -3.304710989e-03f, -3.306362773e-03f, -3.308008759e-03f,
--3.309648946e-03f, -3.311283330e-03f, -3.312911910e-03f, -3.314534682e-03f, -3.316151644e-03f, -3.317762793e-03f, -3.319368128e-03f, -3.320967645e-03f, -3.322561342e-03f, -3.324149217e-03f,
--3.325731267e-03f, -3.327307489e-03f, -3.328877882e-03f, -3.330442443e-03f, -3.332001170e-03f, -3.333554059e-03f, -3.335101109e-03f, -3.336642318e-03f, -3.338177682e-03f, -3.339707200e-03f,
--3.341230869e-03f, -3.342748687e-03f, -3.344260652e-03f, -3.345766761e-03f, -3.347267012e-03f, -3.348761403e-03f, -3.350249931e-03f, -3.351732594e-03f, -3.353209389e-03f, -3.354680316e-03f,
--3.356145371e-03f, -3.357604551e-03f, -3.359057856e-03f, -3.360505283e-03f, -3.361946828e-03f, -3.363382492e-03f, -3.364812270e-03f, -3.366236161e-03f, -3.367654163e-03f, -3.369066273e-03f,
--3.370472490e-03f, -3.371872811e-03f, -3.373267234e-03f, -3.374655758e-03f, -3.376038379e-03f, -3.377415096e-03f, -3.378785907e-03f, -3.380150810e-03f, -3.381509803e-03f, -3.382862883e-03f,
--3.384210048e-03f, -3.385551298e-03f, -3.386886629e-03f, -3.388216039e-03f, -3.389539527e-03f, -3.390857090e-03f, -3.392168727e-03f, -3.393474436e-03f, -3.394774214e-03f, -3.396068060e-03f,
--3.397355972e-03f, -3.398637947e-03f, -3.399913984e-03f, -3.401184082e-03f, -3.402448238e-03f, -3.403706449e-03f, -3.404958716e-03f, -3.406205034e-03f, -3.407445404e-03f, -3.408679822e-03f,
--3.409908287e-03f, -3.411130797e-03f, -3.412347351e-03f, -3.413557946e-03f, -3.414762581e-03f, -3.415961254e-03f, -3.417153963e-03f, -3.418340706e-03f, -3.419521483e-03f, -3.420696290e-03f,
--3.421865126e-03f, -3.423027990e-03f, -3.424184880e-03f, -3.425335794e-03f, -3.426480730e-03f, -3.427619687e-03f, -3.428752663e-03f, -3.429879657e-03f, -3.431000666e-03f, -3.432115689e-03f,
--3.433224725e-03f, -3.434327772e-03f, -3.435424828e-03f, -3.436515892e-03f, -3.437600962e-03f, -3.438680036e-03f, -3.439753114e-03f, -3.440820193e-03f, -3.441881271e-03f, -3.442936349e-03f,
--3.443985423e-03f, -3.445028492e-03f, -3.446065555e-03f, -3.447096611e-03f, -3.448121657e-03f, -3.449140693e-03f, -3.450153717e-03f, -3.451160727e-03f, -3.452161723e-03f, -3.453156702e-03f,
--3.454145663e-03f, -3.455128605e-03f, -3.456105527e-03f, -3.457076426e-03f, -3.458041303e-03f, -3.459000154e-03f, -3.459952980e-03f, -3.460899778e-03f, -3.461840547e-03f, -3.462775287e-03f,
--3.463703995e-03f, -3.464626670e-03f, -3.465543312e-03f, -3.466453918e-03f, -3.467358488e-03f, -3.468257020e-03f, -3.469149513e-03f, -3.470035966e-03f, -3.470916377e-03f, -3.471790746e-03f,
--3.472659071e-03f, -3.473521350e-03f, -3.474377584e-03f, -3.475227770e-03f, -3.476071908e-03f, -3.476909995e-03f, -3.477742032e-03f, -3.478568017e-03f, -3.479387949e-03f, -3.480201827e-03f,
--3.481009649e-03f, -3.481811415e-03f, -3.482607123e-03f, -3.483396772e-03f, -3.484180362e-03f, -3.484957892e-03f, -3.485729359e-03f, -3.486494764e-03f, -3.487254105e-03f, -3.488007382e-03f,
--3.488754592e-03f, -3.489495736e-03f, -3.490230812e-03f, -3.490959820e-03f, -3.491682758e-03f, -3.492399625e-03f, -3.493110421e-03f, -3.493815144e-03f, -3.494513794e-03f, -3.495206369e-03f,
--3.495892870e-03f, -3.496573295e-03f, -3.497247642e-03f, -3.497915912e-03f, -3.498578103e-03f, -3.499234215e-03f, -3.499884247e-03f, -3.500528198e-03f, -3.501166066e-03f, -3.501797852e-03f,
--3.502423555e-03f, -3.503043173e-03f, -3.503656707e-03f, -3.504264155e-03f, -3.504865516e-03f, -3.505460790e-03f, -3.506049976e-03f, -3.506633073e-03f, -3.507210081e-03f, -3.507781000e-03f,
--3.508345827e-03f, -3.508904563e-03f, -3.509457207e-03f, -3.510003758e-03f, -3.510544216e-03f, -3.511078580e-03f, -3.511606850e-03f, -3.512129024e-03f, -3.512645103e-03f, -3.513155085e-03f,
--3.513658970e-03f, -3.514156758e-03f, -3.514648448e-03f, -3.515134039e-03f, -3.515613531e-03f, -3.516086924e-03f, -3.516554216e-03f, -3.517015408e-03f, -3.517470499e-03f, -3.517919488e-03f,
--3.518362375e-03f, -3.518799160e-03f, -3.519229842e-03f, -3.519654420e-03f, -3.520072894e-03f, -3.520485264e-03f, -3.520891530e-03f, -3.521291690e-03f, -3.521685746e-03f, -3.522073695e-03f,
--3.522455538e-03f, -3.522831275e-03f, -3.523200905e-03f, -3.523564428e-03f, -3.523921843e-03f, -3.524273150e-03f, -3.524618350e-03f, -3.524957441e-03f, -3.525290423e-03f, -3.525617296e-03f,
--3.525938061e-03f, -3.526252715e-03f, -3.526561261e-03f, -3.526863696e-03f, -3.527160021e-03f, -3.527450236e-03f, -3.527734340e-03f, -3.528012334e-03f, -3.528284217e-03f, -3.528549989e-03f,
--3.528809650e-03f, -3.529063199e-03f, -3.529310638e-03f, -3.529551964e-03f, -3.529787179e-03f, -3.530016282e-03f, -3.530239274e-03f, -3.530456153e-03f, -3.530666920e-03f, -3.530871576e-03f,
--3.531070119e-03f, -3.531262551e-03f, -3.531448870e-03f, -3.531629077e-03f, -3.531803172e-03f, -3.531971155e-03f, -3.532133025e-03f, -3.532288784e-03f, -3.532438430e-03f, -3.532581965e-03f,
--3.532719388e-03f, -3.532850698e-03f, -3.532975897e-03f, -3.533094985e-03f, -3.533207961e-03f, -3.533314825e-03f, -3.533415578e-03f, -3.533510220e-03f, -3.533598750e-03f, -3.533681170e-03f,
--3.533757479e-03f, -3.533827678e-03f, -3.533891766e-03f, -3.533949744e-03f, -3.534001612e-03f, -3.534047370e-03f, -3.534087019e-03f, -3.534120559e-03f, -3.534147989e-03f, -3.534169311e-03f,
--3.534184524e-03f, -3.534193630e-03f, -3.534196627e-03f, -3.534193516e-03f, -3.534184299e-03f, -3.534168974e-03f, -3.534147543e-03f, -3.534120005e-03f, -3.534086362e-03f, -3.534046613e-03f,
--3.534000759e-03f, -3.533948800e-03f, -3.533890736e-03f, -3.533826569e-03f, -3.533756298e-03f, -3.533679924e-03f, -3.533597447e-03f, -3.533508869e-03f, -3.533414188e-03f, -3.533313406e-03f,
--3.533206523e-03f, -3.533093540e-03f, -3.532974457e-03f, -3.532849275e-03f, -3.532717994e-03f, -3.532580614e-03f, -3.532437137e-03f, -3.532287563e-03f, -3.532131892e-03f, -3.531970126e-03f,
--3.531802264e-03f, -3.531628307e-03f, -3.531448256e-03f, -3.531262111e-03f, -3.531069873e-03f, -3.530871543e-03f, -3.530667122e-03f, -3.530456609e-03f, -3.530240006e-03f, -3.530017314e-03f,
--3.529788532e-03f, -3.529553663e-03f, -3.529312705e-03f, -3.529065661e-03f, -3.528812531e-03f, -3.528553316e-03f, -3.528288016e-03f, -3.528016632e-03f, -3.527739165e-03f, -3.527455616e-03f,
--3.527165986e-03f, -3.526870274e-03f, -3.526568484e-03f, -3.526260614e-03f, -3.525946666e-03f, -3.525626640e-03f, -3.525300539e-03f, -3.524968361e-03f, -3.524630109e-03f, -3.524285783e-03f,
--3.523935385e-03f, -3.523578914e-03f, -3.523216372e-03f, -3.522847761e-03f, -3.522473080e-03f, -3.522092331e-03f, -3.521705514e-03f, -3.521312632e-03f, -3.520913684e-03f, -3.520508671e-03f,
--3.520097596e-03f, -3.519680458e-03f, -3.519257259e-03f, -3.518828000e-03f, -3.518392682e-03f, -3.517951305e-03f, -3.517503872e-03f, -3.517050383e-03f, -3.516590838e-03f, -3.516125240e-03f,
--3.515653590e-03f, -3.515175888e-03f, -3.514692135e-03f, -3.514202334e-03f, -3.513706484e-03f, -3.513204587e-03f, -3.512696645e-03f, -3.512182658e-03f, -3.511662627e-03f, -3.511136555e-03f,
--3.510604441e-03f, -3.510066288e-03f, -3.509522096e-03f, -3.508971867e-03f, -3.508415602e-03f, -3.507853303e-03f, -3.507284970e-03f, -3.506710604e-03f, -3.506130208e-03f, -3.505543783e-03f,
--3.504951329e-03f, -3.504352848e-03f, -3.503748342e-03f, -3.503137811e-03f, -3.502521258e-03f, -3.501898683e-03f, -3.501270088e-03f, -3.500635474e-03f, -3.499994844e-03f, -3.499348197e-03f,
--3.498695535e-03f, -3.498036861e-03f, -3.497372175e-03f, -3.496701479e-03f, -3.496024774e-03f, -3.495342062e-03f, -3.494653345e-03f, -3.493958623e-03f, -3.493257898e-03f, -3.492551173e-03f,
--3.491838447e-03f, -3.491119724e-03f, -3.490395003e-03f, -3.489664288e-03f, -3.488927579e-03f, -3.488184879e-03f, -3.487436188e-03f, -3.486681508e-03f, -3.485920842e-03f, -3.485154189e-03f,
--3.484381553e-03f, -3.483602935e-03f, -3.482818336e-03f, -3.482027759e-03f, -3.481231204e-03f, -3.480428673e-03f, -3.479620169e-03f, -3.478805692e-03f, -3.477985245e-03f, -3.477158829e-03f,
--3.476326446e-03f, -3.475488098e-03f, -3.474643787e-03f, -3.473793513e-03f, -3.472937280e-03f, -3.472075088e-03f, -3.471206940e-03f, -3.470332838e-03f, -3.469452782e-03f, -3.468566776e-03f,
--3.467674821e-03f, -3.466776918e-03f, -3.465873070e-03f, -3.464963278e-03f, -3.464047544e-03f, -3.463125871e-03f, -3.462198260e-03f, -3.461264712e-03f, -3.460325231e-03f, -3.459379817e-03f,
--3.458428473e-03f, -3.457471201e-03f, -3.456508003e-03f, -3.455538880e-03f, -3.454563834e-03f, -3.453582868e-03f, -3.452595984e-03f, -3.451603184e-03f, -3.450604469e-03f, -3.449599841e-03f,
--3.448589303e-03f, -3.447572857e-03f, -3.446550505e-03f, -3.445522248e-03f, -3.444488090e-03f, -3.443448031e-03f, -3.442402074e-03f, -3.441350222e-03f, -3.440292476e-03f, -3.439228838e-03f,
--3.438159311e-03f, -3.437083896e-03f, -3.436002597e-03f, -3.434915414e-03f, -3.433822351e-03f, -3.432723409e-03f, -3.431618591e-03f, -3.430507898e-03f, -3.429391334e-03f, -3.428268899e-03f,
--3.427140598e-03f, -3.426006430e-03f, -3.424866400e-03f, -3.423720509e-03f, -3.422568760e-03f, -3.421411155e-03f, -3.420247695e-03f, -3.419078384e-03f, -3.417903224e-03f, -3.416722217e-03f,
--3.415535365e-03f, -3.414342671e-03f, -3.413144137e-03f, -3.411939766e-03f, -3.410729559e-03f, -3.409513520e-03f, -3.408291650e-03f, -3.407063953e-03f, -3.405830430e-03f, -3.404591083e-03f,
--3.403345916e-03f, -3.402094931e-03f, -3.400838130e-03f, -3.399575516e-03f, -3.398307091e-03f, -3.397032857e-03f, -3.395752818e-03f, -3.394466975e-03f, -3.393175332e-03f, -3.391877890e-03f,
--3.390574653e-03f, -3.389265622e-03f, -3.387950801e-03f, -3.386630191e-03f, -3.385303796e-03f, -3.383971618e-03f, -3.382633660e-03f, -3.381289924e-03f, -3.379940413e-03f, -3.378585130e-03f,
--3.377224076e-03f, -3.375857255e-03f, -3.374484670e-03f, -3.373106323e-03f, -3.371722217e-03f, -3.370332354e-03f, -3.368936737e-03f, -3.367535370e-03f, -3.366128253e-03f, -3.364715391e-03f,
--3.363296787e-03f, -3.361872441e-03f, -3.360442359e-03f, -3.359006542e-03f, -3.357564992e-03f, -3.356117714e-03f, -3.354664709e-03f, -3.353205981e-03f, -3.351741532e-03f, -3.350271365e-03f,
--3.348795483e-03f, -3.347313888e-03f, -3.345826584e-03f, -3.344333574e-03f, -3.342834860e-03f, -3.341330445e-03f, -3.339820333e-03f, -3.338304525e-03f, -3.336783025e-03f, -3.335255836e-03f,
--3.333722961e-03f, -3.332184402e-03f, -3.330640163e-03f, -3.329090247e-03f, -3.327534656e-03f, -3.325973394e-03f, -3.324406463e-03f, -3.322833866e-03f, -3.321255608e-03f, -3.319671689e-03f,
--3.318082115e-03f, -3.316486886e-03f, -3.314886008e-03f, -3.313279482e-03f, -3.311667312e-03f, -3.310049501e-03f, -3.308426051e-03f, -3.306796967e-03f, -3.305162251e-03f, -3.303521905e-03f,
--3.301875935e-03f, -3.300224341e-03f, -3.298567129e-03f, -3.296904299e-03f, -3.295235857e-03f, -3.293561805e-03f, -3.291882146e-03f, -3.290196884e-03f, -3.288506021e-03f, -3.286809561e-03f,
--3.285107507e-03f, -3.283399863e-03f, -3.281686631e-03f, -3.279967814e-03f, -3.278243417e-03f, -3.276513442e-03f, -3.274777892e-03f, -3.273036771e-03f, -3.271290083e-03f, -3.269537830e-03f,
--3.267780015e-03f, -3.266016643e-03f, -3.264247715e-03f, -3.262473237e-03f, -3.260693211e-03f, -3.258907640e-03f, -3.257116528e-03f, -3.255319878e-03f, -3.253517693e-03f, -3.251709978e-03f,
--3.249896735e-03f, -3.248077967e-03f, -3.246253679e-03f, -3.244423874e-03f, -3.242588554e-03f, -3.240747724e-03f, -3.238901387e-03f, -3.237049546e-03f, -3.235192206e-03f, -3.233329369e-03f,
--3.231461038e-03f, -3.229587218e-03f, -3.227707912e-03f, -3.225823124e-03f, -3.223932856e-03f, -3.222037113e-03f, -3.220135898e-03f, -3.218229215e-03f, -3.216317067e-03f, -3.214399457e-03f,
--3.212476390e-03f, -3.210547870e-03f, -3.208613898e-03f, -3.206674480e-03f, -3.204729619e-03f, -3.202779318e-03f, -3.200823582e-03f, -3.198862413e-03f, -3.196895816e-03f, -3.194923793e-03f,
--3.192946350e-03f, -3.190963489e-03f, -3.188975215e-03f, -3.186981530e-03f, -3.184982439e-03f, -3.182977945e-03f, -3.180968052e-03f, -3.178952765e-03f, -3.176932085e-03f, -3.174906019e-03f,
--3.172874568e-03f, -3.170837737e-03f, -3.168795530e-03f, -3.166747951e-03f, -3.164695003e-03f, -3.162636690e-03f, -3.160573016e-03f, -3.158503984e-03f, -3.156429600e-03f, -3.154349866e-03f,
--3.152264786e-03f, -3.150174365e-03f, -3.148078606e-03f, -3.145977513e-03f, -3.143871090e-03f, -3.141759340e-03f, -3.139642269e-03f, -3.137519879e-03f, -3.135392175e-03f, -3.133259160e-03f,
--3.131120839e-03f, -3.128977216e-03f, -3.126828294e-03f, -3.124674077e-03f, -3.122514570e-03f, -3.120349776e-03f, -3.118179700e-03f, -3.116004346e-03f, -3.113823716e-03f, -3.111637817e-03f,
--3.109446651e-03f, -3.107250222e-03f, -3.105048536e-03f, -3.102841595e-03f, -3.100629404e-03f, -3.098411967e-03f, -3.096189288e-03f, -3.093961371e-03f, -3.091728220e-03f, -3.089489840e-03f,
--3.087246234e-03f, -3.084997407e-03f, -3.082743363e-03f, -3.080484106e-03f, -3.078219640e-03f, -3.075949969e-03f, -3.073675098e-03f, -3.071395030e-03f, -3.069109771e-03f, -3.066819323e-03f,
--3.064523692e-03f, -3.062222882e-03f, -3.059916896e-03f, -3.057605739e-03f, -3.055289416e-03f, -3.052967930e-03f, -3.050641287e-03f, -3.048309489e-03f, -3.045972542e-03f, -3.043630449e-03f,
--3.041283216e-03f, -3.038930846e-03f, -3.036573343e-03f, -3.034210713e-03f, -3.031842959e-03f, -3.029470085e-03f, -3.027092097e-03f, -3.024708998e-03f, -3.022320793e-03f, -3.019927487e-03f,
--3.017529083e-03f, -3.015125585e-03f, -3.012717000e-03f, -3.010303330e-03f, -3.007884580e-03f, -3.005460755e-03f, -3.003031860e-03f, -3.000597897e-03f, -2.998158873e-03f, -2.995714792e-03f,
--2.993265657e-03f, -2.990811474e-03f, -2.988352247e-03f, -2.985887981e-03f, -2.983418680e-03f, -2.980944348e-03f, -2.978464990e-03f, -2.975980611e-03f, -2.973491215e-03f, -2.970996807e-03f,
--2.968497391e-03f, -2.965992972e-03f, -2.963483554e-03f, -2.960969143e-03f, -2.958449742e-03f, -2.955925356e-03f, -2.953395990e-03f, -2.950861649e-03f, -2.948322337e-03f, -2.945778058e-03f,
--2.943228818e-03f, -2.940674621e-03f, -2.938115472e-03f, -2.935551375e-03f, -2.932982335e-03f, -2.930408357e-03f, -2.927829446e-03f, -2.925245605e-03f, -2.922656841e-03f, -2.920063157e-03f,
--2.917464559e-03f, -2.914861050e-03f, -2.912252637e-03f, -2.909639323e-03f, -2.907021114e-03f, -2.904398013e-03f, -2.901770027e-03f, -2.899137159e-03f, -2.896499415e-03f, -2.893856799e-03f,
--2.891209316e-03f, -2.888556971e-03f, -2.885899769e-03f, -2.883237715e-03f, -2.880570813e-03f, -2.877899068e-03f, -2.875222485e-03f, -2.872541070e-03f, -2.869854827e-03f, -2.867163760e-03f,
--2.864467875e-03f, -2.861767177e-03f, -2.859061670e-03f, -2.856351359e-03f, -2.853636250e-03f, -2.850916348e-03f, -2.848191656e-03f, -2.845462181e-03f, -2.842727927e-03f, -2.839988899e-03f,
--2.837245102e-03f, -2.834496542e-03f, -2.831743222e-03f, -2.828985149e-03f, -2.826222326e-03f, -2.823454760e-03f, -2.820682455e-03f, -2.817905416e-03f, -2.815123648e-03f, -2.812337157e-03f,
--2.809545946e-03f, -2.806750022e-03f, -2.803949390e-03f, -2.801144054e-03f, -2.798334020e-03f, -2.795519292e-03f, -2.792699877e-03f, -2.789875778e-03f, -2.787047001e-03f, -2.784213551e-03f,
--2.781375434e-03f, -2.778532654e-03f, -2.775685217e-03f, -2.772833127e-03f, -2.769976390e-03f, -2.767115012e-03f, -2.764248996e-03f, -2.761378350e-03f, -2.758503076e-03f, -2.755623182e-03f,
--2.752738672e-03f, -2.749849551e-03f, -2.746955824e-03f, -2.744057497e-03f, -2.741154575e-03f, -2.738247064e-03f, -2.735334968e-03f, -2.732418292e-03f, -2.729497043e-03f, -2.726571225e-03f,
--2.723640844e-03f, -2.720705904e-03f, -2.717766412e-03f, -2.714822372e-03f, -2.711873790e-03f, -2.708920671e-03f, -2.705963021e-03f, -2.703000845e-03f, -2.700034147e-03f, -2.697062934e-03f,
--2.694087212e-03f, -2.691106984e-03f, -2.688122257e-03f, -2.685133036e-03f, -2.682139327e-03f, -2.679141134e-03f, -2.676138464e-03f, -2.673131321e-03f, -2.670119711e-03f, -2.667103640e-03f,
--2.664083113e-03f, -2.661058135e-03f, -2.658028712e-03f, -2.654994849e-03f, -2.651956552e-03f, -2.648913827e-03f, -2.645866678e-03f, -2.642815111e-03f, -2.639759132e-03f, -2.636698747e-03f,
--2.633633960e-03f, -2.630564777e-03f, -2.627491204e-03f, -2.624413246e-03f, -2.621330910e-03f, -2.618244200e-03f, -2.615153121e-03f, -2.612057680e-03f, -2.608957883e-03f, -2.605853734e-03f,
--2.602745239e-03f, -2.599632404e-03f, -2.596515235e-03f, -2.593393737e-03f, -2.590267915e-03f, -2.587137776e-03f, -2.584003324e-03f, -2.580864567e-03f, -2.577721508e-03f, -2.574574154e-03f,
--2.571422511e-03f, -2.568266584e-03f, -2.565106379e-03f, -2.561941901e-03f, -2.558773157e-03f, -2.555600152e-03f, -2.552422891e-03f, -2.549241380e-03f, -2.546055626e-03f, -2.542865633e-03f,
--2.539671408e-03f, -2.536472956e-03f, -2.533270283e-03f, -2.530063394e-03f, -2.526852296e-03f, -2.523636995e-03f, -2.520417495e-03f, -2.517193803e-03f, -2.513965925e-03f, -2.510733866e-03f,
--2.507497632e-03f, -2.504257229e-03f, -2.501012663e-03f, -2.497763940e-03f, -2.494511065e-03f, -2.491254044e-03f, -2.487992883e-03f, -2.484727588e-03f, -2.481458165e-03f, -2.478184620e-03f,
--2.474906958e-03f, -2.471625185e-03f, -2.468339308e-03f, -2.465049332e-03f, -2.461755263e-03f, -2.458457107e-03f, -2.455154870e-03f, -2.451848557e-03f, -2.448538175e-03f, -2.445223730e-03f,
--2.441905227e-03f, -2.438582673e-03f, -2.435256073e-03f, -2.431925434e-03f, -2.428590761e-03f, -2.425252060e-03f, -2.421909338e-03f, -2.418562600e-03f, -2.415211852e-03f, -2.411857101e-03f,
--2.408498351e-03f, -2.405135610e-03f, -2.401768883e-03f, -2.398398177e-03f, -2.395023497e-03f, -2.391644849e-03f, -2.388262240e-03f, -2.384875675e-03f, -2.381485160e-03f, -2.378090702e-03f,
--2.374692307e-03f, -2.371289981e-03f, -2.367883729e-03f, -2.364473558e-03f, -2.361059474e-03f, -2.357641483e-03f, -2.354219591e-03f, -2.350793805e-03f, -2.347364130e-03f, -2.343930572e-03f,
--2.340493138e-03f, -2.337051834e-03f, -2.333606666e-03f, -2.330157640e-03f, -2.326704762e-03f, -2.323248039e-03f, -2.319787476e-03f, -2.316323080e-03f, -2.312854857e-03f, -2.309382813e-03f,
--2.305906954e-03f, -2.302427286e-03f, -2.298943817e-03f, -2.295456551e-03f, -2.291965496e-03f, -2.288470657e-03f, -2.284972040e-03f, -2.281469653e-03f, -2.277963500e-03f, -2.274453589e-03f,
--2.270939925e-03f, -2.267422515e-03f, -2.263901366e-03f, -2.260376482e-03f, -2.256847872e-03f, -2.253315540e-03f, -2.249779494e-03f, -2.246239739e-03f, -2.242696282e-03f, -2.239149130e-03f,
--2.235598287e-03f, -2.232043762e-03f, -2.228485560e-03f, -2.224923687e-03f, -2.221358150e-03f, -2.217788955e-03f, -2.214216109e-03f, -2.210639618e-03f, -2.207059488e-03f, -2.203475726e-03f,
--2.199888337e-03f, -2.196297329e-03f, -2.192702708e-03f, -2.189104480e-03f, -2.185502651e-03f, -2.181897229e-03f, -2.178288219e-03f, -2.174675628e-03f, -2.171059462e-03f, -2.167439727e-03f,
--2.163816431e-03f, -2.160189579e-03f, -2.156559179e-03f, -2.152925236e-03f, -2.149287756e-03f, -2.145646747e-03f, -2.142002215e-03f, -2.138354167e-03f, -2.134702608e-03f, -2.131047545e-03f,
--2.127388985e-03f, -2.123726935e-03f, -2.120061400e-03f, -2.116392388e-03f, -2.112719905e-03f, -2.109043956e-03f, -2.105364550e-03f, -2.101681692e-03f, -2.097995389e-03f, -2.094305648e-03f,
--2.090612475e-03f, -2.086915876e-03f, -2.083215859e-03f, -2.079512429e-03f, -2.075805593e-03f, -2.072095359e-03f, -2.068381732e-03f, -2.064664719e-03f, -2.060944326e-03f, -2.057220561e-03f,
--2.053493430e-03f, -2.049762940e-03f, -2.046029096e-03f, -2.042291906e-03f, -2.038551377e-03f, -2.034807514e-03f, -2.031060325e-03f, -2.027309817e-03f, -2.023555995e-03f, -2.019798867e-03f,
--2.016038439e-03f, -2.012274718e-03f, -2.008507711e-03f, -2.004737424e-03f, -2.000963864e-03f, -1.997187037e-03f, -1.993406951e-03f, -1.989623612e-03f, -1.985837027e-03f, -1.982047202e-03f,
--1.978254144e-03f, -1.974457860e-03f, -1.970658357e-03f, -1.966855641e-03f, -1.963049719e-03f, -1.959240597e-03f, -1.955428284e-03f, -1.951612784e-03f, -1.947794106e-03f, -1.943972255e-03f,
--1.940147240e-03f, -1.936319065e-03f, -1.932487739e-03f, -1.928653267e-03f, -1.924815657e-03f, -1.920974916e-03f, -1.917131050e-03f, -1.913284066e-03f, -1.909433971e-03f, -1.905580771e-03f,
--1.901724474e-03f, -1.897865087e-03f, -1.894002615e-03f, -1.890137067e-03f, -1.886268448e-03f, -1.882396766e-03f, -1.878522028e-03f, -1.874644240e-03f, -1.870763409e-03f, -1.866879542e-03f,
--1.862992647e-03f, -1.859102729e-03f, -1.855209796e-03f, -1.851313854e-03f, -1.847414911e-03f, -1.843512973e-03f, -1.839608048e-03f, -1.835700141e-03f, -1.831789261e-03f, -1.827875414e-03f,
--1.823958606e-03f, -1.820038846e-03f, -1.816116139e-03f, -1.812190493e-03f, -1.808261914e-03f, -1.804330410e-03f, -1.800395987e-03f, -1.796458653e-03f, -1.792518414e-03f, -1.788575278e-03f,
--1.784629251e-03f, -1.780680340e-03f, -1.776728552e-03f, -1.772773894e-03f, -1.768816374e-03f, -1.764855998e-03f, -1.760892773e-03f, -1.756926706e-03f, -1.752957805e-03f, -1.748986075e-03f,
--1.745011525e-03f, -1.741034161e-03f, -1.737053990e-03f, -1.733071019e-03f, -1.729085256e-03f, -1.725096706e-03f, -1.721105378e-03f, -1.717111279e-03f, -1.713114415e-03f, -1.709114793e-03f,
--1.705112421e-03f, -1.701107305e-03f, -1.697099453e-03f, -1.693088871e-03f, -1.689075568e-03f, -1.685059549e-03f, -1.681040822e-03f, -1.677019394e-03f, -1.672995272e-03f, -1.668968463e-03f,
--1.664938975e-03f, -1.660906813e-03f, -1.656871987e-03f, -1.652834502e-03f, -1.648794365e-03f, -1.644751584e-03f, -1.640706167e-03f, -1.636658119e-03f, -1.632607448e-03f, -1.628554162e-03f,
--1.624498267e-03f, -1.620439771e-03f, -1.616378681e-03f, -1.612315003e-03f, -1.608248745e-03f, -1.604179915e-03f, -1.600108519e-03f, -1.596034564e-03f, -1.591958059e-03f, -1.587879009e-03f,
--1.583797422e-03f, -1.579713305e-03f, -1.575626666e-03f, -1.571537511e-03f, -1.567445848e-03f, -1.563351684e-03f, -1.559255027e-03f, -1.555155883e-03f, -1.551054259e-03f, -1.546950163e-03f,
--1.542843602e-03f, -1.538734584e-03f, -1.534623115e-03f, -1.530509203e-03f, -1.526392854e-03f, -1.522274077e-03f, -1.518152879e-03f, -1.514029266e-03f, -1.509903246e-03f, -1.505774826e-03f,
--1.501644014e-03f, -1.497510816e-03f, -1.493375240e-03f, -1.489237294e-03f, -1.485096984e-03f, -1.480954318e-03f, -1.476809303e-03f, -1.472661946e-03f, -1.468512255e-03f, -1.464360237e-03f,
--1.460205899e-03f, -1.456049248e-03f, -1.451890293e-03f, -1.447729039e-03f, -1.443565495e-03f, -1.439399668e-03f, -1.435231565e-03f, -1.431061193e-03f, -1.426888560e-03f, -1.422713673e-03f,
--1.418536539e-03f, -1.414357166e-03f, -1.410175561e-03f, -1.405991731e-03f, -1.401805684e-03f, -1.397617427e-03f, -1.393426967e-03f, -1.389234313e-03f, -1.385039470e-03f, -1.380842447e-03f,
--1.376643251e-03f, -1.372441888e-03f, -1.368238368e-03f, -1.364032696e-03f, -1.359824881e-03f, -1.355614930e-03f, -1.351402849e-03f, -1.347188647e-03f, -1.342972331e-03f, -1.338753909e-03f,
--1.334533386e-03f, -1.330310772e-03f, -1.326086074e-03f, -1.321859298e-03f, -1.317630453e-03f, -1.313399545e-03f, -1.309166583e-03f, -1.304931573e-03f, -1.300694522e-03f, -1.296455440e-03f,
--1.292214332e-03f, -1.287971206e-03f, -1.283726070e-03f, -1.279478932e-03f, -1.275229798e-03f, -1.270978675e-03f, -1.266725573e-03f, -1.262470497e-03f, -1.258213455e-03f, -1.253954456e-03f,
--1.249693505e-03f, -1.245430612e-03f, -1.241165782e-03f, -1.236899025e-03f, -1.232630346e-03f, -1.228359754e-03f, -1.224087257e-03f, -1.219812860e-03f, -1.215536573e-03f, -1.211258403e-03f,
--1.206978356e-03f, -1.202696441e-03f, -1.198412665e-03f, -1.194127036e-03f, -1.189839560e-03f, -1.185550246e-03f, -1.181259102e-03f, -1.176966133e-03f, -1.172671349e-03f, -1.168374757e-03f,
--1.164076363e-03f, -1.159776176e-03f, -1.155474203e-03f, -1.151170452e-03f, -1.146864930e-03f, -1.142557645e-03f, -1.138248604e-03f, -1.133937815e-03f, -1.129625285e-03f, -1.125311022e-03f,
--1.120995034e-03f, -1.116677327e-03f, -1.112357910e-03f, -1.108036790e-03f, -1.103713975e-03f, -1.099389472e-03f, -1.095063288e-03f, -1.090735432e-03f, -1.086405911e-03f, -1.082074732e-03f,
--1.077741903e-03f, -1.073407432e-03f, -1.069071326e-03f, -1.064733592e-03f, -1.060394239e-03f, -1.056053274e-03f, -1.051710704e-03f, -1.047366537e-03f, -1.043020781e-03f, -1.038673444e-03f,
--1.034324532e-03f, -1.029974053e-03f, -1.025622015e-03f, -1.021268426e-03f, -1.016913294e-03f, -1.012556625e-03f, -1.008198427e-03f, -1.003838709e-03f, -9.994774773e-04f, -9.951147399e-04f,
--9.907505043e-04f, -9.863847782e-04f, -9.820175693e-04f, -9.776488851e-04f, -9.732787333e-04f, -9.689071215e-04f, -9.645340574e-04f, -9.601595485e-04f, -9.557836025e-04f, -9.514062270e-04f,
--9.470274297e-04f, -9.426472183e-04f, -9.382656002e-04f, -9.338825833e-04f, -9.294981751e-04f, -9.251123834e-04f, -9.207252156e-04f, -9.163366796e-04f, -9.119467829e-04f, -9.075555332e-04f,
--9.031629381e-04f, -8.987690054e-04f, -8.943737427e-04f, -8.899771576e-04f, -8.855792578e-04f, -8.811800510e-04f, -8.767795449e-04f, -8.723777471e-04f, -8.679746652e-04f, -8.635703071e-04f,
--8.591646803e-04f, -8.547577925e-04f, -8.503496514e-04f, -8.459402647e-04f, -8.415296400e-04f, -8.371177852e-04f, -8.327047077e-04f, -8.282904154e-04f, -8.238749159e-04f, -8.194582170e-04f,
--8.150403262e-04f, -8.106212513e-04f, -8.062010001e-04f, -8.017795801e-04f, -7.973569992e-04f, -7.929332649e-04f, -7.885083851e-04f, -7.840823673e-04f, -7.796552194e-04f, -7.752269490e-04f,
--7.707975639e-04f, -7.663670717e-04f, -7.619354801e-04f, -7.575027970e-04f, -7.530690299e-04f, -7.486341867e-04f, -7.441982749e-04f, -7.397613025e-04f, -7.353232770e-04f, -7.308842062e-04f,
--7.264440978e-04f, -7.220029596e-04f, -7.175607992e-04f, -7.131176245e-04f, -7.086734431e-04f, -7.042282627e-04f, -6.997820912e-04f, -6.953349362e-04f, -6.908868054e-04f, -6.864377067e-04f,
--6.819876477e-04f, -6.775366362e-04f, -6.730846799e-04f, -6.686317866e-04f, -6.641779640e-04f, -6.597232199e-04f, -6.552675619e-04f, -6.508109980e-04f, -6.463535357e-04f, -6.418951828e-04f,
--6.374359472e-04f, -6.329758365e-04f, -6.285148585e-04f, -6.240530209e-04f, -6.195903316e-04f, -6.151267982e-04f, -6.106624285e-04f, -6.061972304e-04f, -6.017312114e-04f, -5.972643795e-04f,
--5.927967423e-04f, -5.883283077e-04f, -5.838590833e-04f, -5.793890770e-04f, -5.749182965e-04f, -5.704467496e-04f, -5.659744440e-04f, -5.615013875e-04f, -5.570275879e-04f, -5.525530530e-04f,
--5.480777905e-04f, -5.436018082e-04f, -5.391251139e-04f, -5.346477152e-04f, -5.301696202e-04f, -5.256908364e-04f, -5.212113716e-04f, -5.167312337e-04f, -5.122504304e-04f, -5.077689696e-04f,
--5.032868588e-04f, -4.988041061e-04f, -4.943207191e-04f, -4.898367055e-04f, -4.853520733e-04f, -4.808668302e-04f, -4.763809839e-04f, -4.718945423e-04f, -4.674075130e-04f, -4.629199040e-04f,
--4.584317230e-04f, -4.539429778e-04f, -4.494536761e-04f, -4.449638258e-04f, -4.404734346e-04f, -4.359825104e-04f, -4.314910609e-04f, -4.269990939e-04f, -4.225066172e-04f, -4.180136386e-04f,
--4.135201658e-04f, -4.090262067e-04f, -4.045317691e-04f, -4.000368607e-04f, -3.955414894e-04f, -3.910456629e-04f, -3.865493891e-04f, -3.820526756e-04f, -3.775555304e-04f, -3.730579612e-04f,
--3.685599758e-04f, -3.640615820e-04f, -3.595627876e-04f, -3.550636004e-04f, -3.505640282e-04f, -3.460640787e-04f, -3.415637598e-04f, -3.370630793e-04f, -3.325620450e-04f, -3.280606647e-04f,
--3.235589461e-04f, -3.190568970e-04f, -3.145545254e-04f, -3.100518389e-04f, -3.055488453e-04f, -3.010455525e-04f, -2.965419683e-04f, -2.920381004e-04f, -2.875339566e-04f, -2.830295448e-04f,
--2.785248727e-04f, -2.740199482e-04f, -2.695147790e-04f, -2.650093730e-04f, -2.605037379e-04f, -2.559978815e-04f, -2.514918117e-04f, -2.469855362e-04f, -2.424790628e-04f, -2.379723994e-04f,
--2.334655537e-04f, -2.289585335e-04f, -2.244513467e-04f, -2.199440009e-04f, -2.154365041e-04f, -2.109288640e-04f, -2.064210885e-04f, -2.019131852e-04f, -1.974051620e-04f, -1.928970268e-04f,
--1.883887873e-04f, -1.838804512e-04f, -1.793720265e-04f, -1.748635208e-04f, -1.703549421e-04f, -1.658462980e-04f, -1.613375964e-04f, -1.568288451e-04f, -1.523200519e-04f, -1.478112245e-04f,
--1.433023708e-04f, -1.387934985e-04f, -1.342846155e-04f, -1.297757295e-04f, -1.252668484e-04f, -1.207579798e-04f, -1.162491317e-04f, -1.117403118e-04f, -1.072315279e-04f, -1.027227878e-04f,
--9.821409928e-05f, -9.370547011e-05f, -8.919690810e-05f, -8.468842104e-05f, -8.018001671e-05f, -7.567170291e-05f, -7.116348741e-05f, -6.665537800e-05f, -6.214738248e-05f, -5.763950862e-05f,
--5.313176421e-05f, -4.862415703e-05f, -4.411669488e-05f, -3.960938552e-05f, -3.510223674e-05f, -3.059525633e-05f, -2.608845206e-05f, -2.158183171e-05f, -1.707540307e-05f, -1.256917390e-05f,
--8.063152001e-06f, -3.557345134e-06f, 9.482389208e-07f, 5.453592388e-06f, 9.958707493e-06f, 1.446357646e-05f, 1.896819152e-05f, 2.347254490e-05f, 2.797662882e-05f, 3.248043553e-05f,
-3.698395724e-05f, 4.148718618e-05f, 4.599011460e-05f, 5.049273472e-05f, 5.499503878e-05f, 5.949701902e-05f, 6.399866766e-05f, 6.849997694e-05f, 7.300093911e-05f, 7.750154640e-05f,
-8.200179106e-05f, 8.650166532e-05f, 9.100116142e-05f, 9.550027161e-05f, 9.999898813e-05f, 1.044973032e-04f, 1.089952091e-04f, 1.134926981e-04f, 1.179897625e-04f, 1.224863943e-04f,
-1.269825860e-04f, 1.314783298e-04f, 1.359736179e-04f, 1.404684426e-04f, 1.449627961e-04f, 1.494566707e-04f, 1.539500586e-04f, 1.584429522e-04f, 1.629353436e-04f, 1.674272251e-04f,
-1.719185891e-04f, 1.764094276e-04f, 1.808997332e-04f, 1.853894979e-04f, 1.898787140e-04f, 1.943673739e-04f, 1.988554698e-04f, 2.033429939e-04f, 2.078299386e-04f, 2.123162961e-04f,
-2.168020587e-04f, 2.212872187e-04f, 2.257717683e-04f, 2.302556999e-04f, 2.347390056e-04f, 2.392216779e-04f, 2.437037089e-04f, 2.481850910e-04f, 2.526658165e-04f, 2.571458776e-04f,
-2.616252666e-04f, 2.661039759e-04f, 2.705819977e-04f, 2.750593243e-04f, 2.795359480e-04f, 2.840118612e-04f, 2.884870560e-04f, 2.929615249e-04f, 2.974352601e-04f, 3.019082539e-04f,
-3.063804987e-04f, 3.108519867e-04f, 3.153227103e-04f, 3.197926617e-04f, 3.242618333e-04f, 3.287302174e-04f, 3.331978063e-04f, 3.376645924e-04f, 3.421305679e-04f, 3.465957252e-04f,
-3.510600565e-04f, 3.555235544e-04f, 3.599862109e-04f, 3.644480186e-04f, 3.689089697e-04f, 3.733690565e-04f, 3.778282714e-04f, 3.822866068e-04f, 3.867440549e-04f, 3.912006081e-04f,
-3.956562587e-04f, 4.001109992e-04f, 4.045648218e-04f, 4.090177189e-04f, 4.134696829e-04f, 4.179207060e-04f, 4.223707807e-04f, 4.268198993e-04f, 4.312680542e-04f, 4.357152377e-04f,
-4.401614422e-04f, 4.446066601e-04f, 4.490508837e-04f, 4.534941053e-04f, 4.579363175e-04f, 4.623775125e-04f, 4.668176827e-04f, 4.712568205e-04f, 4.756949183e-04f, 4.801319685e-04f,
-4.845679634e-04f, 4.890028955e-04f, 4.934367570e-04f, 4.978695405e-04f, 5.023012383e-04f, 5.067318428e-04f, 5.111613464e-04f, 5.155897415e-04f, 5.200170205e-04f, 5.244431758e-04f,
-5.288681998e-04f, 5.332920850e-04f, 5.377148237e-04f, 5.421364084e-04f, 5.465568314e-04f, 5.509760852e-04f, 5.553941623e-04f, 5.598110550e-04f, 5.642267557e-04f, 5.686412570e-04f,
-5.730545511e-04f, 5.774666307e-04f, 5.818774880e-04f, 5.862871156e-04f, 5.906955058e-04f, 5.951026512e-04f, 5.995085441e-04f, 6.039131771e-04f, 6.083165425e-04f, 6.127186328e-04f,
-6.171194406e-04f, 6.215189581e-04f, 6.259171780e-04f, 6.303140926e-04f, 6.347096945e-04f, 6.391039761e-04f, 6.434969298e-04f, 6.478885482e-04f, 6.522788238e-04f, 6.566677489e-04f,
-6.610553162e-04f, 6.654415180e-04f, 6.698263469e-04f, 6.742097953e-04f, 6.785918559e-04f, 6.829725209e-04f, 6.873517830e-04f, 6.917296347e-04f, 6.961060685e-04f, 7.004810768e-04f,
-7.048546522e-04f, 7.092267871e-04f, 7.135974742e-04f, 7.179667060e-04f, 7.223344749e-04f, 7.267007734e-04f, 7.310655942e-04f, 7.354289297e-04f, 7.397907725e-04f, 7.441511151e-04f,
-7.485099501e-04f, 7.528672700e-04f, 7.572230673e-04f, 7.615773346e-04f, 7.659300645e-04f, 7.702812494e-04f, 7.746308820e-04f, 7.789789549e-04f, 7.833254605e-04f, 7.876703915e-04f,
-7.920137404e-04f, 7.963554998e-04f, 8.006956623e-04f, 8.050342204e-04f, 8.093711668e-04f, 8.137064940e-04f, 8.180401946e-04f, 8.223722613e-04f, 8.267026865e-04f, 8.310314630e-04f,
-8.353585832e-04f, 8.396840399e-04f, 8.440078256e-04f, 8.483299329e-04f, 8.526503545e-04f, 8.569690830e-04f, 8.612861109e-04f, 8.656014310e-04f, 8.699150358e-04f, 8.742269180e-04f,
-8.785370702e-04f, 8.828454850e-04f, 8.871521552e-04f, 8.914570733e-04f, 8.957602320e-04f, 9.000616239e-04f, 9.043612417e-04f, 9.086590781e-04f, 9.129551257e-04f, 9.172493772e-04f,
-9.215418253e-04f, 9.258324626e-04f, 9.301212818e-04f, 9.344082755e-04f, 9.386934366e-04f, 9.429767576e-04f, 9.472582313e-04f, 9.515378503e-04f, 9.558156073e-04f, 9.600914951e-04f,
-9.643655064e-04f, 9.686376338e-04f, 9.729078700e-04f, 9.771762079e-04f, 9.814426401e-04f, 9.857071593e-04f, 9.899697582e-04f, 9.942304297e-04f, 9.984891663e-04f, 1.002745961e-03f,
-1.007000806e-03f, 1.011253695e-03f, 1.015504620e-03f, 1.019753574e-03f, 1.024000550e-03f, 1.028245540e-03f, 1.032488537e-03f, 1.036729534e-03f, 1.040968524e-03f, 1.045205500e-03f,
-1.049440454e-03f, 1.053673379e-03f, 1.057904268e-03f, 1.062133114e-03f, 1.066359909e-03f, 1.070584646e-03f, 1.074807319e-03f, 1.079027919e-03f, 1.083246441e-03f, 1.087462875e-03f,
-1.091677216e-03f, 1.095889457e-03f, 1.100099589e-03f, 1.104307606e-03f, 1.108513500e-03f, 1.112717266e-03f, 1.116918894e-03f, 1.121118379e-03f, 1.125315712e-03f, 1.129510888e-03f,
-1.133703898e-03f, 1.137894736e-03f, 1.142083395e-03f, 1.146269867e-03f, 1.150454145e-03f, 1.154636222e-03f, 1.158816091e-03f, 1.162993745e-03f, 1.167169177e-03f, 1.171342380e-03f,
-1.175513346e-03f, 1.179682068e-03f, 1.183848540e-03f, 1.188012755e-03f, 1.192174704e-03f, 1.196334382e-03f, 1.200491780e-03f, 1.204646893e-03f, 1.208799713e-03f, 1.212950232e-03f,
-1.217098445e-03f, 1.221244343e-03f, 1.225387920e-03f, 1.229529168e-03f, 1.233668081e-03f, 1.237804652e-03f, 1.241938873e-03f, 1.246070738e-03f, 1.250200240e-03f, 1.254327371e-03f,
-1.258452124e-03f, 1.262574493e-03f, 1.266694470e-03f, 1.270812049e-03f, 1.274927223e-03f, 1.279039984e-03f, 1.283150325e-03f, 1.287258240e-03f, 1.291363721e-03f, 1.295466763e-03f,
-1.299567356e-03f, 1.303665496e-03f, 1.307761174e-03f, 1.311854384e-03f, 1.315945118e-03f, 1.320033371e-03f, 1.324119134e-03f, 1.328202402e-03f, 1.332283166e-03f, 1.336361421e-03f,
-1.340437159e-03f, 1.344510373e-03f, 1.348581056e-03f, 1.352649202e-03f, 1.356714804e-03f, 1.360777854e-03f, 1.364838346e-03f, 1.368896273e-03f, 1.372951628e-03f, 1.377004404e-03f,
-1.381054594e-03f, 1.385102192e-03f, 1.389147190e-03f, 1.393189582e-03f, 1.397229361e-03f, 1.401266520e-03f, 1.405301051e-03f, 1.409332950e-03f, 1.413362207e-03f, 1.417388817e-03f,
-1.421412773e-03f, 1.425434068e-03f, 1.429452696e-03f, 1.433468648e-03f, 1.437481919e-03f, 1.441492502e-03f, 1.445500390e-03f, 1.449505576e-03f, 1.453508053e-03f, 1.457507815e-03f,
-1.461504855e-03f, 1.465499166e-03f, 1.469490741e-03f, 1.473479573e-03f, 1.477465657e-03f, 1.481448984e-03f, 1.485429549e-03f, 1.489407345e-03f, 1.493382364e-03f, 1.497354600e-03f,
-1.501324046e-03f, 1.505290697e-03f, 1.509254544e-03f, 1.513215581e-03f, 1.517173802e-03f, 1.521129200e-03f, 1.525081768e-03f, 1.529031499e-03f, 1.532978387e-03f, 1.536922425e-03f,
-1.540863607e-03f, 1.544801925e-03f, 1.548737374e-03f, 1.552669946e-03f, 1.556599634e-03f, 1.560526433e-03f, 1.564450335e-03f, 1.568371335e-03f, 1.572289424e-03f, 1.576204597e-03f,
-1.580116847e-03f, 1.584026167e-03f, 1.587932552e-03f, 1.591835993e-03f, 1.595736485e-03f, 1.599634021e-03f, 1.603528594e-03f, 1.607420198e-03f, 1.611308826e-03f, 1.615194472e-03f,
-1.619077130e-03f, 1.622956791e-03f, 1.626833451e-03f, 1.630707102e-03f, 1.634577738e-03f, 1.638445353e-03f, 1.642309939e-03f, 1.646171490e-03f, 1.650030001e-03f, 1.653885464e-03f,
-1.657737872e-03f, 1.661587220e-03f, 1.665433500e-03f, 1.669276707e-03f, 1.673116834e-03f, 1.676953874e-03f, 1.680787820e-03f, 1.684618668e-03f, 1.688446409e-03f, 1.692271037e-03f,
-1.696092547e-03f, 1.699910931e-03f, 1.703726183e-03f, 1.707538297e-03f, 1.711347266e-03f, 1.715153084e-03f, 1.718955745e-03f, 1.722755241e-03f, 1.726551567e-03f, 1.730344717e-03f,
-1.734134683e-03f, 1.737921459e-03f, 1.741705040e-03f, 1.745485418e-03f, 1.749262587e-03f, 1.753036542e-03f, 1.756807275e-03f, 1.760574780e-03f, 1.764339051e-03f, 1.768100081e-03f,
-1.771857865e-03f, 1.775612396e-03f, 1.779363667e-03f, 1.783111672e-03f, 1.786856406e-03f, 1.790597861e-03f, 1.794336031e-03f, 1.798070910e-03f, 1.801802492e-03f, 1.805530770e-03f,
-1.809255739e-03f, 1.812977391e-03f, 1.816695721e-03f, 1.820410723e-03f, 1.824122390e-03f, 1.827830715e-03f, 1.831535693e-03f, 1.835237318e-03f, 1.838935582e-03f, 1.842630481e-03f,
-1.846322008e-03f, 1.850010155e-03f, 1.853694919e-03f, 1.857376291e-03f, 1.861054267e-03f, 1.864728839e-03f, 1.868400002e-03f, 1.872067749e-03f, 1.875732074e-03f, 1.879392972e-03f,
-1.883050435e-03f, 1.886704458e-03f, 1.890355035e-03f, 1.894002160e-03f, 1.897645826e-03f, 1.901286027e-03f, 1.904922757e-03f, 1.908556010e-03f, 1.912185781e-03f, 1.915812062e-03f,
-1.919434848e-03f, 1.923054132e-03f, 1.926669909e-03f, 1.930282173e-03f, 1.933890917e-03f, 1.937496136e-03f, 1.941097823e-03f, 1.944695972e-03f, 1.948290578e-03f, 1.951881633e-03f,
-1.955469133e-03f, 1.959053072e-03f, 1.962633442e-03f, 1.966210239e-03f, 1.969783455e-03f, 1.973353086e-03f, 1.976919125e-03f, 1.980481567e-03f, 1.984040404e-03f, 1.987595632e-03f,
-1.991147244e-03f, 1.994695235e-03f, 1.998239598e-03f, 2.001780327e-03f, 2.005317417e-03f, 2.008850862e-03f, 2.012380655e-03f, 2.015906791e-03f, 2.019429264e-03f, 2.022948068e-03f,
-2.026463197e-03f, 2.029974645e-03f, 2.033482407e-03f, 2.036986475e-03f, 2.040486846e-03f, 2.043983512e-03f, 2.047476468e-03f, 2.050965708e-03f, 2.054451226e-03f, 2.057933017e-03f,
-2.061411074e-03f, 2.064885391e-03f, 2.068355964e-03f, 2.071822785e-03f, 2.075285850e-03f, 2.078745152e-03f, 2.082200686e-03f, 2.085652446e-03f, 2.089100426e-03f, 2.092544620e-03f,
-2.095985023e-03f, 2.099421629e-03f, 2.102854432e-03f, 2.106283426e-03f, 2.109708605e-03f, 2.113129965e-03f, 2.116547499e-03f, 2.119961201e-03f, 2.123371066e-03f, 2.126777088e-03f,
-2.130179262e-03f, 2.133577581e-03f, 2.136972040e-03f, 2.140362634e-03f, 2.143749356e-03f, 2.147132201e-03f, 2.150511163e-03f, 2.153886238e-03f, 2.157257418e-03f, 2.160624699e-03f,
-2.163988075e-03f, 2.167347540e-03f, 2.170703088e-03f, 2.174054715e-03f, 2.177402414e-03f, 2.180746179e-03f, 2.184086007e-03f, 2.187421889e-03f, 2.190753822e-03f, 2.194081800e-03f,
-2.197405816e-03f, 2.200725866e-03f, 2.204041944e-03f, 2.207354044e-03f, 2.210662162e-03f, 2.213966290e-03f, 2.217266425e-03f, 2.220562560e-03f, 2.223854689e-03f, 2.227142808e-03f,
-2.230426911e-03f, 2.233706993e-03f, 2.236983047e-03f, 2.240255069e-03f, 2.243523053e-03f, 2.246786994e-03f, 2.250046886e-03f, 2.253302723e-03f, 2.256554501e-03f, 2.259802214e-03f,
-2.263045857e-03f, 2.266285423e-03f, 2.269520908e-03f, 2.272752307e-03f, 2.275979613e-03f, 2.279202823e-03f, 2.282421929e-03f, 2.285636927e-03f, 2.288847812e-03f, 2.292054578e-03f,
-2.295257220e-03f, 2.298455733e-03f, 2.301650110e-03f, 2.304840348e-03f, 2.308026440e-03f, 2.311208382e-03f, 2.314386167e-03f, 2.317559791e-03f, 2.320729249e-03f, 2.323894535e-03f,
-2.327055644e-03f, 2.330212571e-03f, 2.333365310e-03f, 2.336513856e-03f, 2.339658204e-03f, 2.342798349e-03f, 2.345934286e-03f, 2.349066009e-03f, 2.352193513e-03f, 2.355316793e-03f,
-2.358435844e-03f, 2.361550661e-03f, 2.364661238e-03f, 2.367767570e-03f, 2.370869652e-03f, 2.373967479e-03f, 2.377061047e-03f, 2.380150348e-03f, 2.383235380e-03f, 2.386316136e-03f,
-2.389392611e-03f, 2.392464801e-03f, 2.395532700e-03f, 2.398596302e-03f, 2.401655604e-03f, 2.404710600e-03f, 2.407761285e-03f, 2.410807654e-03f, 2.413849701e-03f, 2.416887422e-03f,
-2.419920812e-03f, 2.422949865e-03f, 2.425974578e-03f, 2.428994944e-03f, 2.432010958e-03f, 2.435022617e-03f, 2.438029914e-03f, 2.441032844e-03f, 2.444031404e-03f, 2.447025587e-03f,
-2.450015390e-03f, 2.453000806e-03f, 2.455981831e-03f, 2.458958460e-03f, 2.461930688e-03f, 2.464898511e-03f, 2.467861922e-03f, 2.470820919e-03f, 2.473775494e-03f, 2.476725645e-03f,
-2.479671365e-03f, 2.482612650e-03f, 2.485549495e-03f, 2.488481895e-03f, 2.491409846e-03f, 2.494333342e-03f, 2.497252379e-03f, 2.500166952e-03f, 2.503077056e-03f, 2.505982686e-03f,
-2.508883837e-03f, 2.511780505e-03f, 2.514672686e-03f, 2.517560373e-03f, 2.520443562e-03f, 2.523322250e-03f, 2.526196430e-03f, 2.529066098e-03f, 2.531931250e-03f, 2.534791880e-03f,
-2.537647985e-03f, 2.540499558e-03f, 2.543346596e-03f, 2.546189094e-03f, 2.549027048e-03f, 2.551860452e-03f, 2.554689301e-03f, 2.557513592e-03f, 2.560333319e-03f, 2.563148479e-03f,
-2.565959065e-03f, 2.568765075e-03f, 2.571566502e-03f, 2.574363343e-03f, 2.577155592e-03f, 2.579943246e-03f, 2.582726299e-03f, 2.585504748e-03f, 2.588278587e-03f, 2.591047812e-03f,
-2.593812418e-03f, 2.596572402e-03f, 2.599327757e-03f, 2.602078481e-03f, 2.604824567e-03f, 2.607566013e-03f, 2.610302812e-03f, 2.613034962e-03f, 2.615762456e-03f, 2.618485292e-03f,
-2.621203464e-03f, 2.623916968e-03f, 2.626625799e-03f, 2.629329953e-03f, 2.632029426e-03f, 2.634724213e-03f, 2.637414309e-03f, 2.640099711e-03f, 2.642780414e-03f, 2.645456413e-03f,
-2.648127705e-03f, 2.650794284e-03f, 2.653456146e-03f, 2.656113288e-03f, 2.658765704e-03f, 2.661413390e-03f, 2.664056343e-03f, 2.666694557e-03f, 2.669328028e-03f, 2.671956753e-03f,
-2.674580726e-03f, 2.677199944e-03f, 2.679814401e-03f, 2.682424095e-03f, 2.685029020e-03f, 2.687629173e-03f, 2.690224548e-03f, 2.692815143e-03f, 2.695400952e-03f, 2.697981972e-03f,
-2.700558197e-03f, 2.703129625e-03f, 2.705696250e-03f, 2.708258069e-03f, 2.710815078e-03f, 2.713367271e-03f, 2.715914646e-03f, 2.718457197e-03f, 2.720994922e-03f, 2.723527815e-03f,
-2.726055872e-03f, 2.728579090e-03f, 2.731097464e-03f, 2.733610990e-03f, 2.736119664e-03f, 2.738623482e-03f, 2.741122440e-03f, 2.743616533e-03f, 2.746105759e-03f, 2.748590112e-03f,
-2.751069589e-03f, 2.753544185e-03f, 2.756013897e-03f, 2.758478720e-03f, 2.760938651e-03f, 2.763393686e-03f, 2.765843820e-03f, 2.768289050e-03f, 2.770729371e-03f, 2.773164780e-03f,
-2.775595272e-03f, 2.778020844e-03f, 2.780441492e-03f, 2.782857212e-03f, 2.785267999e-03f, 2.787673851e-03f, 2.790074763e-03f, 2.792470731e-03f, 2.794861751e-03f, 2.797247819e-03f,
-2.799628932e-03f, 2.802005086e-03f, 2.804376277e-03f, 2.806742501e-03f, 2.809103753e-03f, 2.811460031e-03f, 2.813811331e-03f, 2.816157648e-03f, 2.818498979e-03f, 2.820835321e-03f,
-2.823166668e-03f, 2.825493018e-03f, 2.827814367e-03f, 2.830130711e-03f, 2.832442046e-03f, 2.834748369e-03f, 2.837049675e-03f, 2.839345962e-03f, 2.841637224e-03f, 2.843923460e-03f,
-2.846204664e-03f, 2.848480834e-03f, 2.850751965e-03f, 2.853018055e-03f, 2.855279098e-03f, 2.857535092e-03f, 2.859786033e-03f, 2.862031918e-03f, 2.864272742e-03f, 2.866508502e-03f,
-2.868739195e-03f, 2.870964817e-03f, 2.873185364e-03f, 2.875400832e-03f, 2.877611219e-03f, 2.879816521e-03f, 2.882016733e-03f, 2.884211853e-03f, 2.886401877e-03f, 2.888586802e-03f,
-2.890766623e-03f, 2.892941338e-03f, 2.895110942e-03f, 2.897275433e-03f, 2.899434808e-03f, 2.901589061e-03f, 2.903738191e-03f, 2.905882193e-03f, 2.908021064e-03f, 2.910154801e-03f,
-2.912283400e-03f, 2.914406858e-03f, 2.916525172e-03f, 2.918638337e-03f, 2.920746351e-03f, 2.922849211e-03f, 2.924946912e-03f, 2.927039452e-03f, 2.929126827e-03f, 2.931209034e-03f,
-2.933286069e-03f, 2.935357929e-03f, 2.937424612e-03f, 2.939486113e-03f, 2.941542429e-03f, 2.943593557e-03f, 2.945639494e-03f, 2.947680236e-03f, 2.949715780e-03f, 2.951746123e-03f,
-2.953771262e-03f, 2.955791193e-03f, 2.957805914e-03f, 2.959815420e-03f, 2.961819709e-03f, 2.963818778e-03f, 2.965812623e-03f, 2.967801242e-03f, 2.969784630e-03f, 2.971762785e-03f,
-2.973735704e-03f, 2.975703383e-03f, 2.977665820e-03f, 2.979623011e-03f, 2.981574954e-03f, 2.983521644e-03f, 2.985463080e-03f, 2.987399257e-03f, 2.989330173e-03f, 2.991255825e-03f,
-2.993176210e-03f, 2.995091324e-03f, 2.997001165e-03f, 2.998905729e-03f, 3.000805014e-03f, 3.002699016e-03f, 3.004587733e-03f, 3.006471162e-03f, 3.008349299e-03f, 3.010222142e-03f,
-3.012089687e-03f, 3.013951932e-03f, 3.015808874e-03f, 3.017660509e-03f, 3.019506835e-03f, 3.021347849e-03f, 3.023183548e-03f, 3.025013929e-03f, 3.026838990e-03f, 3.028658727e-03f,
-3.030473137e-03f, 3.032282217e-03f, 3.034085966e-03f, 3.035884379e-03f, 3.037677455e-03f, 3.039465189e-03f, 3.041247580e-03f, 3.043024625e-03f, 3.044796320e-03f, 3.046562664e-03f,
-3.048323652e-03f, 3.050079283e-03f, 3.051829554e-03f, 3.053574462e-03f, 3.055314004e-03f, 3.057048177e-03f, 3.058776979e-03f, 3.060500407e-03f, 3.062218458e-03f, 3.063931130e-03f,
-3.065638420e-03f, 3.067340326e-03f, 3.069036844e-03f, 3.070727971e-03f, 3.072413706e-03f, 3.074094046e-03f, 3.075768988e-03f, 3.077438529e-03f, 3.079102667e-03f, 3.080761399e-03f,
-3.082414723e-03f, 3.084062635e-03f, 3.085705135e-03f, 3.087342218e-03f, 3.088973882e-03f, 3.090600125e-03f, 3.092220945e-03f, 3.093836338e-03f, 3.095446302e-03f, 3.097050835e-03f,
-3.098649935e-03f, 3.100243598e-03f, 3.101831822e-03f, 3.103414605e-03f, 3.104991944e-03f, 3.106563837e-03f, 3.108130282e-03f, 3.109691276e-03f, 3.111246816e-03f, 3.112796900e-03f,
-3.114341526e-03f, 3.115880692e-03f, 3.117414394e-03f, 3.118942631e-03f, 3.120465401e-03f, 3.121982700e-03f, 3.123494527e-03f, 3.125000879e-03f, 3.126501754e-03f, 3.127997150e-03f,
-3.129487063e-03f, 3.130971493e-03f, 3.132450437e-03f, 3.133923892e-03f, 3.135391856e-03f, 3.136854327e-03f, 3.138311303e-03f, 3.139762781e-03f, 3.141208759e-03f, 3.142649235e-03f,
-3.144084207e-03f, 3.145513673e-03f, 3.146937630e-03f, 3.148356076e-03f, 3.149769009e-03f, 3.151176427e-03f, 3.152578328e-03f, 3.153974709e-03f, 3.155365569e-03f, 3.156750905e-03f,
-3.158130715e-03f, 3.159504997e-03f, 3.160873750e-03f, 3.162236970e-03f, 3.163594656e-03f, 3.164946806e-03f, 3.166293417e-03f, 3.167634489e-03f, 3.168970018e-03f, 3.170300002e-03f,
-3.171624440e-03f, 3.172943330e-03f, 3.174256669e-03f, 3.175564456e-03f, 3.176866689e-03f, 3.178163365e-03f, 3.179454483e-03f, 3.180740040e-03f, 3.182020036e-03f, 3.183294467e-03f,
-3.184563333e-03f, 3.185826630e-03f, 3.187084358e-03f, 3.188336513e-03f, 3.189583096e-03f, 3.190824102e-03f, 3.192059532e-03f, 3.193289382e-03f, 3.194513651e-03f, 3.195732338e-03f,
-3.196945439e-03f, 3.198152955e-03f, 3.199354881e-03f, 3.200551218e-03f, 3.201741963e-03f, 3.202927114e-03f, 3.204106670e-03f, 3.205280629e-03f, 3.206448989e-03f, 3.207611748e-03f,
-3.208768905e-03f, 3.209920457e-03f, 3.211066404e-03f, 3.212206744e-03f, 3.213341474e-03f, 3.214470593e-03f, 3.215594100e-03f, 3.216711993e-03f, 3.217824270e-03f, 3.218930930e-03f,
-3.220031970e-03f, 3.221127390e-03f, 3.222217187e-03f, 3.223301361e-03f, 3.224379909e-03f, 3.225452830e-03f, 3.226520123e-03f, 3.227581785e-03f, 3.228637815e-03f, 3.229688213e-03f,
-3.230732975e-03f, 3.231772101e-03f, 3.232805590e-03f, 3.233833439e-03f, 3.234855647e-03f, 3.235872213e-03f, 3.236883135e-03f, 3.237888412e-03f, 3.238888042e-03f, 3.239882024e-03f,
-3.240870357e-03f, 3.241853039e-03f, 3.242830068e-03f, 3.243801444e-03f, 3.244767164e-03f, 3.245727228e-03f, 3.246681634e-03f, 3.247630381e-03f, 3.248573467e-03f, 3.249510891e-03f,
-3.250442652e-03f, 3.251368748e-03f, 3.252289178e-03f, 3.253203941e-03f, 3.254113036e-03f, 3.255016460e-03f, 3.255914214e-03f, 3.256806295e-03f, 3.257692703e-03f, 3.258573436e-03f,
-3.259448492e-03f, 3.260317872e-03f, 3.261181573e-03f, 3.262039594e-03f, 3.262891935e-03f, 3.263738593e-03f, 3.264579568e-03f, 3.265414859e-03f, 3.266244464e-03f, 3.267068382e-03f,
-3.267886612e-03f, 3.268699154e-03f, 3.269506005e-03f, 3.270307165e-03f, 3.271102633e-03f, 3.271892408e-03f, 3.272676488e-03f, 3.273454872e-03f, 3.274227560e-03f, 3.274994551e-03f,
-3.275755842e-03f, 3.276511434e-03f, 3.277261326e-03f, 3.278005515e-03f, 3.278744002e-03f, 3.279476786e-03f, 3.280203864e-03f, 3.280925237e-03f, 3.281640903e-03f, 3.282350862e-03f,
-3.283055113e-03f, 3.283753654e-03f, 3.284446485e-03f, 3.285133604e-03f, 3.285815011e-03f, 3.286490706e-03f, 3.287160686e-03f, 3.287824952e-03f, 3.288483502e-03f, 3.289136336e-03f,
-3.289783453e-03f, 3.290424851e-03f, 3.291060531e-03f, 3.291690490e-03f, 3.292314730e-03f, 3.292933248e-03f, 3.293546043e-03f, 3.294153116e-03f, 3.294754466e-03f, 3.295350091e-03f,
-3.295939991e-03f, 3.296524165e-03f, 3.297102612e-03f, 3.297675333e-03f, 3.298242325e-03f, 3.298803589e-03f, 3.299359123e-03f, 3.299908927e-03f, 3.300453001e-03f, 3.300991344e-03f,
-3.301523954e-03f, 3.302050832e-03f, 3.302571977e-03f, 3.303087388e-03f, 3.303597065e-03f, 3.304101006e-03f, 3.304599212e-03f, 3.305091682e-03f, 3.305578416e-03f, 3.306059412e-03f,
-3.306534670e-03f, 3.307004190e-03f, 3.307467971e-03f, 3.307926013e-03f, 3.308378315e-03f, 3.308824877e-03f, 3.309265698e-03f, 3.309700778e-03f, 3.310130116e-03f, 3.310553711e-03f,
-3.310971565e-03f, 3.311383675e-03f, 3.311790042e-03f, 3.312190664e-03f, 3.312585543e-03f, 3.312974677e-03f, 3.313358066e-03f, 3.313735709e-03f, 3.314107607e-03f, 3.314473759e-03f,
-3.314834164e-03f, 3.315188822e-03f, 3.315537734e-03f, 3.315880898e-03f, 3.316218314e-03f, 3.316549982e-03f, 3.316875902e-03f, 3.317196073e-03f, 3.317510496e-03f, 3.317819169e-03f,
-3.318122093e-03f, 3.318419268e-03f, 3.318710692e-03f, 3.318996367e-03f, 3.319276292e-03f, 3.319550466e-03f, 3.319818890e-03f, 3.320081563e-03f, 3.320338486e-03f, 3.320589657e-03f,
-3.320835077e-03f, 3.321074745e-03f, 3.321308663e-03f, 3.321536829e-03f, 3.321759243e-03f, 3.321975905e-03f, 3.322186816e-03f, 3.322391975e-03f, 3.322591382e-03f, 3.322785036e-03f,
-3.322972939e-03f, 3.323155090e-03f, 3.323331489e-03f, 3.323502135e-03f, 3.323667030e-03f, 3.323826172e-03f, 3.323979563e-03f, 3.324127201e-03f, 3.324269087e-03f, 3.324405222e-03f,
-3.324535604e-03f, 3.324660235e-03f, 3.324779114e-03f, 3.324892241e-03f, 3.324999617e-03f, 3.325101241e-03f, 3.325197114e-03f, 3.325287236e-03f, 3.325371606e-03f, 3.325450226e-03f,
-3.325523095e-03f, 3.325590213e-03f, 3.325651581e-03f, 3.325707199e-03f, 3.325757067e-03f, 3.325801184e-03f, 3.325839553e-03f, 3.325872171e-03f, 3.325899041e-03f, 3.325920162e-03f,
-3.325935534e-03f, 3.325945158e-03f, 3.325949033e-03f, 3.325947161e-03f, 3.325939541e-03f, 3.325926174e-03f, 3.325907061e-03f, 3.325882200e-03f, 3.325851593e-03f, 3.325815241e-03f,
-3.325773143e-03f, 3.325725300e-03f, 3.325671712e-03f, 3.325612379e-03f, 3.325547303e-03f, 3.325476482e-03f, 3.325399919e-03f, 3.325317613e-03f, 3.325229565e-03f, 3.325135775e-03f,
-3.325036243e-03f, 3.324930970e-03f, 3.324819957e-03f, 3.324703204e-03f, 3.324580711e-03f, 3.324452479e-03f, 3.324318509e-03f, 3.324178801e-03f, 3.324033355e-03f, 3.323882173e-03f,
-3.323725254e-03f, 3.323562599e-03f, 3.323394210e-03f, 3.323220085e-03f, 3.323040227e-03f, 3.322854635e-03f, 3.322663310e-03f, 3.322466253e-03f, 3.322263465e-03f, 3.322054945e-03f,
-3.321840696e-03f, 3.321620716e-03f, 3.321395008e-03f, 3.321163572e-03f, 3.320926408e-03f, 3.320683517e-03f, 3.320434900e-03f, 3.320180558e-03f, 3.319920491e-03f, 3.319654700e-03f,
-3.319383186e-03f, 3.319105949e-03f, 3.318822991e-03f, 3.318534312e-03f, 3.318239912e-03f, 3.317939794e-03f, 3.317633957e-03f, 3.317322402e-03f, 3.317005131e-03f, 3.316682143e-03f,
-3.316353441e-03f, 3.316019024e-03f, 3.315678893e-03f, 3.315333051e-03f, 3.314981496e-03f, 3.314624231e-03f, 3.314261256e-03f, 3.313892572e-03f, 3.313518180e-03f, 3.313138081e-03f,
-3.312752276e-03f, 3.312360766e-03f, 3.311963551e-03f, 3.311560634e-03f, 3.311152014e-03f, 3.310737693e-03f, 3.310317671e-03f, 3.309891951e-03f, 3.309460532e-03f, 3.309023417e-03f,
-3.308580605e-03f, 3.308132098e-03f, 3.307677897e-03f, 3.307218003e-03f, 3.306752418e-03f, 3.306281142e-03f, 3.305804176e-03f, 3.305321522e-03f, 3.304833180e-03f, 3.304339152e-03f,
-3.303839439e-03f, 3.303334042e-03f, 3.302822963e-03f, 3.302306201e-03f, 3.301783760e-03f, 3.301255639e-03f, 3.300721840e-03f, 3.300182364e-03f, 3.299637213e-03f, 3.299086387e-03f,
-3.298529888e-03f, 3.297967718e-03f, 3.297399877e-03f, 3.296826366e-03f, 3.296247187e-03f, 3.295662342e-03f, 3.295071831e-03f, 3.294475656e-03f, 3.293873819e-03f, 3.293266319e-03f,
-3.292653160e-03f, 3.292034342e-03f, 3.291409866e-03f, 3.290779734e-03f, 3.290143948e-03f, 3.289502508e-03f, 3.288855416e-03f, 3.288202674e-03f, 3.287544282e-03f, 3.286880243e-03f,
-3.286210558e-03f, 3.285535228e-03f, 3.284854254e-03f, 3.284167639e-03f, 3.283475383e-03f, 3.282777489e-03f, 3.282073957e-03f, 3.281364789e-03f, 3.280649986e-03f, 3.279929551e-03f,
-3.279203484e-03f, 3.278471788e-03f, 3.277734463e-03f, 3.276991512e-03f, 3.276242935e-03f, 3.275488735e-03f, 3.274728913e-03f, 3.273963471e-03f, 3.273192410e-03f, 3.272415731e-03f,
-3.271633438e-03f, 3.270845530e-03f, 3.270052010e-03f, 3.269252880e-03f, 3.268448141e-03f, 3.267637794e-03f, 3.266821842e-03f, 3.266000286e-03f, 3.265173128e-03f, 3.264340370e-03f,
-3.263502013e-03f, 3.262658059e-03f, 3.261808510e-03f, 3.260953367e-03f, 3.260092633e-03f, 3.259226309e-03f, 3.258354396e-03f, 3.257476897e-03f, 3.256593814e-03f, 3.255705148e-03f,
-3.254810901e-03f, 3.253911075e-03f, 3.253005672e-03f, 3.252094694e-03f, 3.251178141e-03f, 3.250256018e-03f, 3.249328324e-03f, 3.248395063e-03f, 3.247456235e-03f, 3.246511844e-03f,
-3.245561890e-03f, 3.244606376e-03f, 3.243645304e-03f, 3.242678675e-03f, 3.241706492e-03f, 3.240728756e-03f, 3.239745470e-03f, 3.238756636e-03f, 3.237762255e-03f, 3.236762329e-03f,
-3.235756861e-03f, 3.234745853e-03f, 3.233729306e-03f, 3.232707223e-03f, 3.231679605e-03f, 3.230646455e-03f, 3.229607775e-03f, 3.228563566e-03f, 3.227513832e-03f, 3.226458573e-03f,
-3.225397793e-03f, 3.224331493e-03f, 3.223259675e-03f, 3.222182342e-03f, 3.221099496e-03f, 3.220011138e-03f, 3.218917271e-03f, 3.217817898e-03f, 3.216713020e-03f, 3.215602639e-03f,
-3.214486758e-03f, 3.213365379e-03f, 3.212238504e-03f, 3.211106135e-03f, 3.209968275e-03f, 3.208824926e-03f, 3.207676090e-03f, 3.206521769e-03f, 3.205361966e-03f, 3.204196683e-03f,
-3.203025922e-03f, 3.201849686e-03f, 3.200667976e-03f, 3.199480796e-03f, 3.198288147e-03f, 3.197090032e-03f, 3.195886453e-03f, 3.194677413e-03f, 3.193462914e-03f, 3.192242957e-03f,
-3.191017547e-03f, 3.189786685e-03f, 3.188550373e-03f, 3.187308614e-03f, 3.186061410e-03f, 3.184808764e-03f, 3.183550678e-03f, 3.182287155e-03f, 3.181018197e-03f, 3.179743806e-03f,
-3.178463986e-03f, 3.177178738e-03f, 3.175888065e-03f, 3.174591970e-03f, 3.173290455e-03f, 3.171983522e-03f, 3.170671174e-03f, 3.169353415e-03f, 3.168030245e-03f, 3.166701668e-03f,
-3.165367687e-03f, 3.164028303e-03f, 3.162683520e-03f, 3.161333340e-03f, 3.159977766e-03f, 3.158616800e-03f, 3.157250445e-03f, 3.155878704e-03f, 3.154501579e-03f, 3.153119073e-03f,
-3.151731188e-03f, 3.150337928e-03f, 3.148939295e-03f, 3.147535291e-03f, 3.146125920e-03f, 3.144711183e-03f, 3.143291085e-03f, 3.141865627e-03f, 3.140434812e-03f, 3.138998643e-03f,
-3.137557123e-03f, 3.136110254e-03f, 3.134658040e-03f, 3.133200482e-03f, 3.131737585e-03f, 3.130269350e-03f, 3.128795780e-03f, 3.127316879e-03f, 3.125832649e-03f, 3.124343093e-03f,
-3.122848213e-03f, 3.121348013e-03f, 3.119842496e-03f, 3.118331664e-03f, 3.116815520e-03f, 3.115294068e-03f, 3.113767309e-03f, 3.112235248e-03f, 3.110697886e-03f, 3.109155227e-03f,
-3.107607274e-03f, 3.106054030e-03f, 3.104495497e-03f, 3.102931678e-03f, 3.101362578e-03f, 3.099788198e-03f, 3.098208541e-03f, 3.096623611e-03f, 3.095033410e-03f, 3.093437942e-03f,
-3.091837210e-03f, 3.090231216e-03f, 3.088619964e-03f, 3.087003457e-03f, 3.085381697e-03f, 3.083754689e-03f, 3.082122434e-03f, 3.080484936e-03f, 3.078842198e-03f, 3.077194224e-03f,
-3.075541016e-03f, 3.073882577e-03f, 3.072218911e-03f, 3.070550021e-03f, 3.068875910e-03f, 3.067196580e-03f, 3.065512036e-03f, 3.063822281e-03f, 3.062127316e-03f, 3.060427147e-03f,
-3.058721776e-03f, 3.057011206e-03f, 3.055295440e-03f, 3.053574482e-03f, 3.051848335e-03f, 3.050117002e-03f, 3.048380486e-03f, 3.046638791e-03f, 3.044891920e-03f, 3.043139876e-03f,
-3.041382663e-03f, 3.039620283e-03f, 3.037852741e-03f, 3.036080039e-03f, 3.034302180e-03f, 3.032519169e-03f, 3.030731008e-03f, 3.028937702e-03f, 3.027139252e-03f, 3.025335663e-03f,
-3.023526937e-03f, 3.021713079e-03f, 3.019894092e-03f, 3.018069979e-03f, 3.016240743e-03f, 3.014406388e-03f, 3.012566918e-03f, 3.010722335e-03f, 3.008872644e-03f, 3.007017847e-03f,
-3.005157949e-03f, 3.003292952e-03f, 3.001422860e-03f, 2.999547677e-03f, 2.997667406e-03f, 2.995782051e-03f, 2.993891615e-03f, 2.991996102e-03f, 2.990095514e-03f, 2.988189857e-03f,
-2.986279133e-03f, 2.984363346e-03f, 2.982442499e-03f, 2.980516596e-03f, 2.978585641e-03f, 2.976649637e-03f, 2.974708588e-03f, 2.972762497e-03f, 2.970811368e-03f, 2.968855205e-03f,
-2.966894011e-03f, 2.964927791e-03f, 2.962956546e-03f, 2.960980283e-03f, 2.958999003e-03f, 2.957012710e-03f, 2.955021409e-03f, 2.953025103e-03f, 2.951023796e-03f, 2.949017491e-03f,
-2.947006192e-03f, 2.944989903e-03f, 2.942968628e-03f, 2.940942370e-03f, 2.938911134e-03f, 2.936874922e-03f, 2.934833739e-03f, 2.932787588e-03f, 2.930736473e-03f, 2.928680399e-03f,
-2.926619368e-03f, 2.924553385e-03f, 2.922482454e-03f, 2.920406578e-03f, 2.918325761e-03f, 2.916240007e-03f, 2.914149319e-03f, 2.912053703e-03f, 2.909953161e-03f, 2.907847698e-03f,
-2.905737317e-03f, 2.903622022e-03f, 2.901501817e-03f, 2.899376707e-03f, 2.897246694e-03f, 2.895111784e-03f, 2.892971979e-03f, 2.890827284e-03f, 2.888677703e-03f, 2.886523240e-03f,
-2.884363898e-03f, 2.882199682e-03f, 2.880030596e-03f, 2.877856643e-03f, 2.875677828e-03f, 2.873494155e-03f, 2.871305628e-03f, 2.869112250e-03f, 2.866914026e-03f, 2.864710960e-03f,
-2.862503056e-03f, 2.860290318e-03f, 2.858072750e-03f, 2.855850356e-03f, 2.853623140e-03f, 2.851391106e-03f, 2.849154259e-03f, 2.846912602e-03f, 2.844666140e-03f, 2.842414877e-03f,
-2.840158817e-03f, 2.837897963e-03f, 2.835632321e-03f, 2.833361894e-03f, 2.831086687e-03f, 2.828806704e-03f, 2.826521948e-03f, 2.824232424e-03f, 2.821938137e-03f, 2.819639090e-03f,
-2.817335288e-03f, 2.815026734e-03f, 2.812713434e-03f, 2.810395391e-03f, 2.808072610e-03f, 2.805745095e-03f, 2.803412850e-03f, 2.801075879e-03f, 2.798734187e-03f, 2.796387778e-03f,
-2.794036657e-03f, 2.791680827e-03f, 2.789320293e-03f, 2.786955059e-03f, 2.784585129e-03f, 2.782210509e-03f, 2.779831202e-03f, 2.777447212e-03f, 2.775058544e-03f, 2.772665203e-03f,
-2.770267192e-03f, 2.767864517e-03f, 2.765457180e-03f, 2.763045188e-03f, 2.760628544e-03f, 2.758207253e-03f, 2.755781318e-03f, 2.753350746e-03f, 2.750915539e-03f, 2.748475703e-03f,
-2.746031241e-03f, 2.743582159e-03f, 2.741128461e-03f, 2.738670151e-03f, 2.736207233e-03f, 2.733739713e-03f, 2.731267595e-03f, 2.728790883e-03f, 2.726309582e-03f, 2.723823696e-03f,
-2.721333230e-03f, 2.718838188e-03f, 2.716338575e-03f, 2.713834395e-03f, 2.711325654e-03f, 2.708812355e-03f, 2.706294503e-03f, 2.703772104e-03f, 2.701245160e-03f, 2.698713677e-03f,
-2.696177660e-03f, 2.693637113e-03f, 2.691092041e-03f, 2.688542449e-03f, 2.685988340e-03f, 2.683429720e-03f, 2.680866593e-03f, 2.678298965e-03f, 2.675726839e-03f, 2.673150220e-03f,
-2.670569114e-03f, 2.667983524e-03f, 2.665393456e-03f, 2.662798913e-03f, 2.660199902e-03f, 2.657596426e-03f, 2.654988490e-03f, 2.652376100e-03f, 2.649759259e-03f, 2.647137973e-03f,
-2.644512246e-03f, 2.641882083e-03f, 2.639247488e-03f, 2.636608468e-03f, 2.633965026e-03f, 2.631317167e-03f, 2.628664896e-03f, 2.626008217e-03f, 2.623347136e-03f, 2.620681658e-03f,
-2.618011787e-03f, 2.615337528e-03f, 2.612658886e-03f, 2.609975866e-03f, 2.607288472e-03f, 2.604596710e-03f, 2.601900585e-03f, 2.599200100e-03f, 2.596495262e-03f, 2.593786075e-03f,
-2.591072543e-03f, 2.588354673e-03f, 2.585632469e-03f, 2.582905935e-03f, 2.580175077e-03f, 2.577439899e-03f, 2.574700407e-03f, 2.571956605e-03f, 2.569208499e-03f, 2.566456094e-03f,
-2.563699393e-03f, 2.560938403e-03f, 2.558173129e-03f, 2.555403575e-03f, 2.552629746e-03f, 2.549851648e-03f, 2.547069285e-03f, 2.544282662e-03f, 2.541491785e-03f, 2.538696659e-03f,
-2.535897288e-03f, 2.533093677e-03f, 2.530285833e-03f, 2.527473759e-03f, 2.524657461e-03f, 2.521836944e-03f, 2.519012212e-03f, 2.516183272e-03f, 2.513350128e-03f, 2.510512786e-03f,
-2.507671250e-03f, 2.504825525e-03f, 2.501975617e-03f, 2.499121531e-03f, 2.496263272e-03f, 2.493400845e-03f, 2.490534255e-03f, 2.487663508e-03f, 2.484788608e-03f, 2.481909561e-03f,
-2.479026372e-03f, 2.476139047e-03f, 2.473247589e-03f, 2.470352006e-03f, 2.467452301e-03f, 2.464548480e-03f, 2.461640548e-03f, 2.458728511e-03f, 2.455812374e-03f, 2.452892141e-03f,
-2.449967819e-03f, 2.447039412e-03f, 2.444106927e-03f, 2.441170367e-03f, 2.438229738e-03f, 2.435285046e-03f, 2.432336296e-03f, 2.429383494e-03f, 2.426426643e-03f, 2.423465751e-03f,
-2.420500822e-03f, 2.417531861e-03f, 2.414558874e-03f, 2.411581867e-03f, 2.408600844e-03f, 2.405615810e-03f, 2.402626773e-03f, 2.399633735e-03f, 2.396636704e-03f, 2.393635684e-03f,
-2.390630681e-03f, 2.387621700e-03f, 2.384608746e-03f, 2.381591826e-03f, 2.378570944e-03f, 2.375546106e-03f, 2.372517317e-03f, 2.369484583e-03f, 2.366447909e-03f, 2.363407300e-03f,
-2.360362763e-03f, 2.357314302e-03f, 2.354261923e-03f, 2.351205631e-03f, 2.348145433e-03f, 2.345081332e-03f, 2.342013336e-03f, 2.338941449e-03f, 2.335865677e-03f, 2.332786026e-03f,
-2.329702500e-03f, 2.326615106e-03f, 2.323523849e-03f, 2.320428735e-03f, 2.317329769e-03f, 2.314226956e-03f, 2.311120302e-03f, 2.308009814e-03f, 2.304895495e-03f, 2.301777353e-03f,
-2.298655392e-03f, 2.295529618e-03f, 2.292400037e-03f, 2.289266654e-03f, 2.286129476e-03f, 2.282988506e-03f, 2.279843752e-03f, 2.276695219e-03f, 2.273542912e-03f, 2.270386837e-03f,
-2.267227000e-03f, 2.264063406e-03f, 2.260896061e-03f, 2.257724971e-03f, 2.254550141e-03f, 2.251371577e-03f, 2.248189285e-03f, 2.245003270e-03f, 2.241813539e-03f, 2.238620096e-03f,
-2.235422948e-03f, 2.232222100e-03f, 2.229017558e-03f, 2.225809327e-03f, 2.222597414e-03f, 2.219381825e-03f, 2.216162564e-03f, 2.212939637e-03f, 2.209713052e-03f, 2.206482812e-03f,
-2.203248924e-03f, 2.200011394e-03f, 2.196770227e-03f, 2.193525430e-03f, 2.190277008e-03f, 2.187024967e-03f, 2.183769312e-03f, 2.180510050e-03f, 2.177247186e-03f, 2.173980726e-03f,
-2.170710676e-03f, 2.167437042e-03f, 2.164159830e-03f, 2.160879045e-03f, 2.157594694e-03f, 2.154306781e-03f, 2.151015314e-03f, 2.147720297e-03f, 2.144421738e-03f, 2.141119641e-03f,
-2.137814013e-03f, 2.134504859e-03f, 2.131192185e-03f, 2.127875998e-03f, 2.124556303e-03f, 2.121233106e-03f, 2.117906413e-03f, 2.114576230e-03f, 2.111242563e-03f, 2.107905418e-03f,
-2.104564800e-03f, 2.101220716e-03f, 2.097873172e-03f, 2.094522174e-03f, 2.091167727e-03f, 2.087809838e-03f, 2.084448512e-03f, 2.081083756e-03f, 2.077715575e-03f, 2.074343976e-03f,
-2.070968964e-03f, 2.067590546e-03f, 2.064208727e-03f, 2.060823514e-03f, 2.057434913e-03f, 2.054042929e-03f, 2.050647569e-03f, 2.047248839e-03f, 2.043846744e-03f, 2.040441291e-03f,
-2.037032486e-03f, 2.033620335e-03f, 2.030204843e-03f, 2.026786018e-03f, 2.023363865e-03f, 2.019938391e-03f, 2.016509600e-03f, 2.013077500e-03f, 2.009642097e-03f, 2.006203396e-03f,
-2.002761403e-03f, 1.999316126e-03f, 1.995867569e-03f, 1.992415740e-03f, 1.988960644e-03f, 1.985502287e-03f, 1.982040676e-03f, 1.978575816e-03f, 1.975107715e-03f, 1.971636377e-03f,
-1.968161809e-03f, 1.964684018e-03f, 1.961203009e-03f, 1.957718788e-03f, 1.954231363e-03f, 1.950740738e-03f, 1.947246921e-03f, 1.943749917e-03f, 1.940249733e-03f, 1.936746375e-03f,
-1.933239849e-03f, 1.929730161e-03f, 1.926217317e-03f, 1.922701325e-03f, 1.919182189e-03f, 1.915659917e-03f, 1.912134514e-03f, 1.908605986e-03f, 1.905074341e-03f, 1.901539584e-03f,
-1.898001721e-03f, 1.894460760e-03f, 1.890916705e-03f, 1.887369564e-03f, 1.883819342e-03f, 1.880266046e-03f, 1.876709683e-03f, 1.873150258e-03f, 1.869587778e-03f, 1.866022249e-03f,
-1.862453677e-03f, 1.858882069e-03f, 1.855307432e-03f, 1.851729770e-03f, 1.848149092e-03f, 1.844565403e-03f, 1.840978709e-03f, 1.837389017e-03f, 1.833796333e-03f, 1.830200664e-03f,
-1.826602016e-03f, 1.823000395e-03f, 1.819395808e-03f, 1.815788260e-03f, 1.812177760e-03f, 1.808564312e-03f, 1.804947923e-03f, 1.801328600e-03f, 1.797706349e-03f, 1.794081176e-03f,
-1.790453088e-03f, 1.786822091e-03f, 1.783188193e-03f, 1.779551398e-03f, 1.775911714e-03f, 1.772269146e-03f, 1.768623703e-03f, 1.764975389e-03f, 1.761324211e-03f, 1.757670176e-03f,
-1.754013291e-03f, 1.750353561e-03f, 1.746690994e-03f, 1.743025595e-03f, 1.739357371e-03f, 1.735686329e-03f, 1.732012475e-03f, 1.728335815e-03f, 1.724656357e-03f, 1.720974106e-03f,
-1.717289070e-03f, 1.713601254e-03f, 1.709910665e-03f, 1.706217310e-03f, 1.702521195e-03f, 1.698822327e-03f, 1.695120712e-03f, 1.691416356e-03f, 1.687709267e-03f, 1.683999451e-03f,
-1.680286915e-03f, 1.676571664e-03f, 1.672853706e-03f, 1.669133047e-03f, 1.665409694e-03f, 1.661683653e-03f, 1.657954931e-03f, 1.654223534e-03f, 1.650489469e-03f, 1.646752743e-03f,
-1.643013362e-03f, 1.639271332e-03f, 1.635526662e-03f, 1.631779356e-03f, 1.628029421e-03f, 1.624276865e-03f, 1.620521694e-03f, 1.616763914e-03f, 1.613003532e-03f, 1.609240555e-03f,
-1.605474989e-03f, 1.601706842e-03f, 1.597936119e-03f, 1.594162827e-03f, 1.590386973e-03f, 1.586608564e-03f, 1.582827606e-03f, 1.579044106e-03f, 1.575258070e-03f, 1.571469506e-03f,
-1.567678419e-03f, 1.563884818e-03f, 1.560088707e-03f, 1.556290095e-03f, 1.552488987e-03f, 1.548685391e-03f, 1.544879312e-03f, 1.541070759e-03f, 1.537259737e-03f, 1.533446253e-03f,
-1.529630314e-03f, 1.525811927e-03f, 1.521991098e-03f, 1.518167834e-03f, 1.514342142e-03f, 1.510514028e-03f, 1.506683500e-03f, 1.502850564e-03f, 1.499015227e-03f, 1.495177495e-03f,
-1.491337376e-03f, 1.487494875e-03f, 1.483650001e-03f, 1.479802759e-03f, 1.475953156e-03f, 1.472101200e-03f, 1.468246896e-03f, 1.464390252e-03f, 1.460531275e-03f, 1.456669971e-03f,
-1.452806347e-03f, 1.448940409e-03f, 1.445072166e-03f, 1.441201623e-03f, 1.437328787e-03f, 1.433453665e-03f, 1.429576264e-03f, 1.425696591e-03f, 1.421814652e-03f, 1.417930455e-03f,
-1.414044006e-03f, 1.410155311e-03f, 1.406264379e-03f, 1.402371215e-03f, 1.398475827e-03f, 1.394578222e-03f, 1.390678405e-03f, 1.386776385e-03f, 1.382872167e-03f, 1.378965759e-03f,
-1.375057168e-03f, 1.371146401e-03f, 1.367233464e-03f, 1.363318364e-03f, 1.359401108e-03f, 1.355481703e-03f, 1.351560156e-03f, 1.347636474e-03f, 1.343710664e-03f, 1.339782732e-03f,
-1.335852686e-03f, 1.331920532e-03f, 1.327986277e-03f, 1.324049929e-03f, 1.320111494e-03f, 1.316170978e-03f, 1.312228390e-03f, 1.308283735e-03f, 1.304337021e-03f, 1.300388255e-03f,
-1.296437444e-03f, 1.292484594e-03f, 1.288529712e-03f, 1.284572806e-03f, 1.280613883e-03f, 1.276652948e-03f, 1.272690010e-03f, 1.268725075e-03f, 1.264758151e-03f, 1.260789243e-03f,
-1.256818360e-03f, 1.252845507e-03f, 1.248870693e-03f, 1.244893923e-03f, 1.240915206e-03f, 1.236934547e-03f, 1.232951955e-03f, 1.228967435e-03f, 1.224980995e-03f, 1.220992642e-03f,
-1.217002383e-03f, 1.213010225e-03f, 1.209016175e-03f, 1.205020239e-03f, 1.201022426e-03f, 1.197022741e-03f, 1.193021192e-03f, 1.189017786e-03f, 1.185012530e-03f, 1.181005431e-03f,
-1.176996495e-03f, 1.172985731e-03f, 1.168973145e-03f, 1.164958743e-03f, 1.160942534e-03f, 1.156924524e-03f, 1.152904719e-03f, 1.148883128e-03f, 1.144859758e-03f, 1.140834614e-03f,
-1.136807705e-03f, 1.132779037e-03f, 1.128748617e-03f, 1.124716453e-03f, 1.120682551e-03f, 1.116646919e-03f, 1.112609564e-03f, 1.108570492e-03f, 1.104529711e-03f, 1.100487227e-03f,
-1.096443049e-03f, 1.092397183e-03f, 1.088349635e-03f, 1.084300414e-03f, 1.080249526e-03f, 1.076196978e-03f, 1.072142778e-03f, 1.068086932e-03f, 1.064029448e-03f, 1.059970333e-03f,
-1.055909593e-03f, 1.051847236e-03f, 1.047783269e-03f, 1.043717699e-03f, 1.039650533e-03f, 1.035581779e-03f, 1.031511443e-03f, 1.027439533e-03f, 1.023366055e-03f, 1.019291017e-03f,
-1.015214426e-03f, 1.011136289e-03f, 1.007056613e-03f, 1.002975405e-03f, 9.988926726e-04f, 9.948084229e-04f, 9.907226628e-04f, 9.866353995e-04f, 9.825466402e-04f, 9.784563919e-04f,
-9.743646620e-04f, 9.702714574e-04f, 9.661767853e-04f, 9.620806529e-04f, 9.579830674e-04f, 9.538840359e-04f, 9.497835655e-04f, 9.456816634e-04f, 9.415783369e-04f, 9.374735929e-04f,
-9.333674388e-04f, 9.292598817e-04f, 9.251509287e-04f, 9.210405870e-04f, 9.169288638e-04f, 9.128157663e-04f, 9.087013017e-04f, 9.045854771e-04f, 9.004682997e-04f, 8.963497767e-04f,
-8.922299153e-04f, 8.881087227e-04f, 8.839862060e-04f, 8.798623725e-04f, 8.757372294e-04f, 8.716107838e-04f, 8.674830429e-04f, 8.633540141e-04f, 8.592237043e-04f, 8.550921209e-04f,
-8.509592711e-04f, 8.468251620e-04f, 8.426898010e-04f, 8.385531951e-04f, 8.344153516e-04f, 8.302762777e-04f, 8.261359807e-04f, 8.219944677e-04f, 8.178517460e-04f, 8.137078227e-04f,
-8.095627052e-04f, 8.054164007e-04f, 8.012689162e-04f, 7.971202592e-04f, 7.929704368e-04f, 7.888194563e-04f, 7.846673249e-04f, 7.805140498e-04f, 7.763596382e-04f, 7.722040974e-04f,
-7.680474347e-04f, 7.638896573e-04f, 7.597307724e-04f, 7.555707872e-04f, 7.514097091e-04f, 7.472475452e-04f, 7.430843029e-04f, 7.389199893e-04f, 7.347546117e-04f, 7.305881773e-04f,
-7.264206935e-04f, 7.222521675e-04f, 7.180826065e-04f, 7.139120178e-04f, 7.097404086e-04f, 7.055677863e-04f, 7.013941580e-04f, 6.972195311e-04f, 6.930439128e-04f, 6.888673104e-04f,
-6.846897311e-04f, 6.805111822e-04f, 6.763316710e-04f, 6.721512048e-04f, 6.679697908e-04f, 6.637874363e-04f, 6.596041486e-04f, 6.554199349e-04f, 6.512348026e-04f, 6.470487589e-04f,
-6.428618111e-04f, 6.386739665e-04f, 6.344852324e-04f, 6.302956160e-04f, 6.261051246e-04f, 6.219137656e-04f, 6.177215462e-04f, 6.135284737e-04f, 6.093345554e-04f, 6.051397985e-04f,
-6.009442105e-04f, 5.967477985e-04f, 5.925505699e-04f, 5.883525319e-04f, 5.841536919e-04f, 5.799540572e-04f, 5.757536350e-04f, 5.715524326e-04f, 5.673504574e-04f, 5.631477167e-04f,
-5.589442177e-04f, 5.547399678e-04f, 5.505349743e-04f, 5.463292444e-04f, 5.421227855e-04f, 5.379156049e-04f, 5.337077099e-04f, 5.294991078e-04f, 5.252898059e-04f, 5.210798116e-04f,
-5.168691320e-04f, 5.126577746e-04f, 5.084457467e-04f, 5.042330555e-04f, 5.000197085e-04f, 4.958057128e-04f, 4.915910759e-04f, 4.873758050e-04f, 4.831599074e-04f, 4.789433905e-04f,
-4.747262616e-04f, 4.705085280e-04f, 4.662901971e-04f, 4.620712761e-04f, 4.578517724e-04f, 4.536316933e-04f, 4.494110460e-04f, 4.451898381e-04f, 4.409680767e-04f, 4.367457692e-04f,
-4.325229229e-04f, 4.282995451e-04f, 4.240756433e-04f, 4.198512246e-04f, 4.156262964e-04f, 4.114008661e-04f, 4.071749410e-04f, 4.029485284e-04f, 3.987216356e-04f, 3.944942700e-04f,
-3.902664388e-04f, 3.860381495e-04f, 3.818094094e-04f, 3.775802258e-04f, 3.733506059e-04f, 3.691205573e-04f, 3.648900871e-04f, 3.606592027e-04f, 3.564279115e-04f, 3.521962208e-04f,
-3.479641379e-04f, 3.437316702e-04f, 3.394988249e-04f, 3.352656095e-04f, 3.310320312e-04f, 3.267980975e-04f, 3.225638155e-04f, 3.183291928e-04f, 3.140942365e-04f, 3.098589540e-04f,
-3.056233528e-04f, 3.013874400e-04f, 2.971512232e-04f, 2.929147094e-04f, 2.886779063e-04f, 2.844408209e-04f, 2.802034608e-04f, 2.759658332e-04f, 2.717279455e-04f, 2.674898049e-04f,
-2.632514190e-04f, 2.590127949e-04f, 2.547739400e-04f, 2.505348617e-04f, 2.462955673e-04f, 2.420560642e-04f, 2.378163596e-04f, 2.335764609e-04f, 2.293363754e-04f, 2.250961106e-04f,
-2.208556736e-04f, 2.166150720e-04f, 2.123743129e-04f, 2.081334038e-04f, 2.038923519e-04f, 1.996511647e-04f, 1.954098494e-04f, 1.911684133e-04f, 1.869268639e-04f, 1.826852085e-04f,
-1.784434543e-04f, 1.742016088e-04f, 1.699596792e-04f, 1.657176730e-04f, 1.614755974e-04f, 1.572334597e-04f, 1.529912673e-04f, 1.487490276e-04f, 1.445067479e-04f, 1.402644355e-04f,
-1.360220977e-04f, 1.317797418e-04f, 1.275373753e-04f, 1.232950054e-04f, 1.190526395e-04f, 1.148102849e-04f, 1.105679490e-04f, 1.063256390e-04f, 1.020833623e-04f, 9.784112620e-05f,
-9.359893807e-05f, 8.935680524e-05f, 8.511473501e-05f, 8.087273473e-05f, 7.663081172e-05f, 7.238897330e-05f, 6.814722681e-05f, 6.390557957e-05f, 5.966403890e-05f, 5.542261214e-05f,
-5.118130660e-05f, 4.694012960e-05f, 4.269908848e-05f, 3.845819056e-05f, 3.421744315e-05f, 2.997685359e-05f, 2.573642918e-05f, 2.149617725e-05f, 1.725610512e-05f, 1.301622011e-05f,
-8.776529531e-06f, 4.537040709e-06f, 2.977609569e-07f, -3.941302409e-06f, -8.180142073e-06f, -1.241875072e-05f, -1.665712104e-05f, -2.089524572e-05f, -2.513311744e-05f, -2.937072890e-05f,
--3.360807278e-05f, -3.784514177e-05f, -4.208192857e-05f, -4.631842587e-05f, -5.055462636e-05f, -5.479052274e-05f, -5.902610769e-05f, -6.326137392e-05f, -6.749631412e-05f, -7.173092098e-05f,
--7.596518722e-05f, -8.019910552e-05f, -8.443266860e-05f, -8.866586914e-05f, -9.289869985e-05f, -9.713115343e-05f, -1.013632226e-04f, -1.055949000e-04f, -1.098261785e-04f, -1.140570506e-04f,
--1.182875092e-04f, -1.225175468e-04f, -1.267471563e-04f, -1.309763304e-04f, -1.352050617e-04f, -1.394333429e-04f, -1.436611668e-04f, -1.478885262e-04f, -1.521154136e-04f, -1.563418219e-04f,
--1.605677438e-04f, -1.647931719e-04f, -1.690180990e-04f, -1.732425179e-04f, -1.774664212e-04f, -1.816898016e-04f, -1.859126520e-04f, -1.901349650e-04f, -1.943567334e-04f, -1.985779499e-04f,
--2.027986071e-04f, -2.070186980e-04f, -2.112382151e-04f, -2.154571513e-04f, -2.196754993e-04f, -2.238932517e-04f, -2.281104014e-04f, -2.323269411e-04f, -2.365428636e-04f, -2.407581615e-04f,
--2.449728277e-04f, -2.491868548e-04f, -2.534002357e-04f, -2.576129630e-04f, -2.618250296e-04f, -2.660364281e-04f, -2.702471514e-04f, -2.744571923e-04f, -2.786665433e-04f, -2.828751974e-04f,
--2.870831472e-04f, -2.912903857e-04f, -2.954969054e-04f, -2.997026992e-04f, -3.039077598e-04f, -3.081120800e-04f, -3.123156527e-04f, -3.165184705e-04f, -3.207205262e-04f, -3.249218126e-04f,
--3.291223225e-04f, -3.333220487e-04f, -3.375209840e-04f, -3.417191211e-04f, -3.459164528e-04f, -3.501129719e-04f, -3.543086712e-04f, -3.585035435e-04f, -3.626975815e-04f, -3.668907782e-04f,
--3.710831262e-04f, -3.752746184e-04f, -3.794652475e-04f, -3.836550064e-04f, -3.878438879e-04f, -3.920318848e-04f, -3.962189898e-04f, -4.004051959e-04f, -4.045904957e-04f, -4.087748822e-04f,
--4.129583481e-04f, -4.171408862e-04f, -4.213224894e-04f, -4.255031505e-04f, -4.296828623e-04f, -4.338616177e-04f, -4.380394094e-04f, -4.422162303e-04f, -4.463920733e-04f, -4.505669311e-04f,
--4.547407966e-04f, -4.589136626e-04f, -4.630855220e-04f, -4.672563675e-04f, -4.714261922e-04f, -4.755949887e-04f, -4.797627500e-04f, -4.839294689e-04f, -4.880951383e-04f, -4.922597509e-04f,
--4.964232997e-04f, -5.005857776e-04f, -5.047471773e-04f, -5.089074917e-04f, -5.130667138e-04f, -5.172248363e-04f, -5.213818522e-04f, -5.255377543e-04f, -5.296925354e-04f, -5.338461886e-04f,
--5.379987066e-04f, -5.421500823e-04f, -5.463003087e-04f, -5.504493785e-04f, -5.545972848e-04f, -5.587440203e-04f, -5.628895780e-04f, -5.670339507e-04f, -5.711771314e-04f, -5.753191130e-04f,
--5.794598884e-04f, -5.835994504e-04f, -5.877377920e-04f, -5.918749061e-04f, -5.960107856e-04f, -6.001454234e-04f, -6.042788125e-04f, -6.084109457e-04f, -6.125418160e-04f, -6.166714163e-04f,
--6.207997396e-04f, -6.249267787e-04f, -6.290525266e-04f, -6.331769762e-04f, -6.373001205e-04f, -6.414219525e-04f, -6.455424649e-04f, -6.496616509e-04f, -6.537795034e-04f, -6.578960152e-04f,
--6.620111794e-04f, -6.661249889e-04f, -6.702374367e-04f, -6.743485157e-04f, -6.784582189e-04f, -6.825665393e-04f, -6.866734698e-04f, -6.907790035e-04f, -6.948831332e-04f, -6.989858520e-04f,
--7.030871528e-04f, -7.071870287e-04f, -7.112854726e-04f, -7.153824775e-04f, -7.194780364e-04f, -7.235721423e-04f, -7.276647882e-04f, -7.317559671e-04f, -7.358456720e-04f, -7.399338959e-04f,
--7.440206318e-04f, -7.481058728e-04f, -7.521896118e-04f, -7.562718419e-04f, -7.603525561e-04f, -7.644317474e-04f, -7.685094088e-04f, -7.725855334e-04f, -7.766601142e-04f, -7.807331443e-04f,
--7.848046166e-04f, -7.888745243e-04f, -7.929428604e-04f, -7.970096179e-04f, -8.010747898e-04f, -8.051383693e-04f, -8.092003494e-04f, -8.132607231e-04f, -8.173194836e-04f, -8.213766238e-04f,
--8.254321369e-04f, -8.294860159e-04f, -8.335382540e-04f, -8.375888441e-04f, -8.416377794e-04f, -8.456850529e-04f, -8.497306578e-04f, -8.537745872e-04f, -8.578168341e-04f, -8.618573916e-04f,
--8.658962529e-04f, -8.699334110e-04f, -8.739688591e-04f, -8.780025902e-04f, -8.820345976e-04f, -8.860648742e-04f, -8.900934133e-04f, -8.941202079e-04f, -8.981452513e-04f, -9.021685364e-04f,
--9.061900565e-04f, -9.102098047e-04f, -9.142277742e-04f, -9.182439580e-04f, -9.222583494e-04f, -9.262709415e-04f, -9.302817274e-04f, -9.342907003e-04f, -9.382978534e-04f, -9.423031799e-04f,
--9.463066729e-04f, -9.503083255e-04f, -9.543081310e-04f, -9.583060826e-04f, -9.623021734e-04f, -9.662963967e-04f, -9.702887455e-04f, -9.742792132e-04f, -9.782677928e-04f, -9.822544777e-04f,
--9.862392610e-04f, -9.902221360e-04f, -9.942030957e-04f, -9.981821336e-04f, -1.002159243e-03f, -1.006134416e-03f, -1.010107648e-03f, -1.014078930e-03f, -1.018048257e-03f, -1.022015621e-03f,
--1.025981015e-03f, -1.029944434e-03f, -1.033905870e-03f, -1.037865316e-03f, -1.041822766e-03f, -1.045778213e-03f, -1.049731650e-03f, -1.053683071e-03f, -1.057632469e-03f, -1.061579836e-03f,
--1.065525167e-03f, -1.069468454e-03f, -1.073409692e-03f, -1.077348873e-03f, -1.081285990e-03f, -1.085221037e-03f, -1.089154007e-03f, -1.093084893e-03f, -1.097013689e-03f, -1.100940389e-03f,
--1.104864984e-03f, -1.108787469e-03f, -1.112707838e-03f, -1.116626082e-03f, -1.120542197e-03f, -1.124456174e-03f, -1.128368008e-03f, -1.132277692e-03f, -1.136185218e-03f, -1.140090581e-03f,
--1.143993774e-03f, -1.147894790e-03f, -1.151793623e-03f, -1.155690265e-03f, -1.159584711e-03f, -1.163476953e-03f, -1.167366986e-03f, -1.171254802e-03f, -1.175140395e-03f, -1.179023758e-03f,
--1.182904884e-03f, -1.186783768e-03f, -1.190660402e-03f, -1.194534780e-03f, -1.198406895e-03f, -1.202276741e-03f, -1.206144312e-03f, -1.210009599e-03f, -1.213872598e-03f, -1.217733301e-03f,
--1.221591702e-03f, -1.225447795e-03f, -1.229301572e-03f, -1.233153028e-03f, -1.237002155e-03f, -1.240848947e-03f, -1.244693399e-03f, -1.248535502e-03f, -1.252375251e-03f, -1.256212639e-03f,
--1.260047659e-03f, -1.263880306e-03f, -1.267710572e-03f, -1.271538451e-03f, -1.275363937e-03f, -1.279187023e-03f, -1.283007703e-03f, -1.286825970e-03f, -1.290641817e-03f, -1.294455239e-03f,
--1.298266228e-03f, -1.302074779e-03f, -1.305880884e-03f, -1.309684538e-03f, -1.313485733e-03f, -1.317284465e-03f, -1.321080725e-03f, -1.324874507e-03f, -1.328665806e-03f, -1.332454615e-03f,
--1.336240927e-03f, -1.340024736e-03f, -1.343806035e-03f, -1.347584818e-03f, -1.351361079e-03f, -1.355134812e-03f, -1.358906009e-03f, -1.362674665e-03f, -1.366440772e-03f, -1.370204326e-03f,
--1.373965319e-03f, -1.377723745e-03f, -1.381479597e-03f, -1.385232870e-03f, -1.388983557e-03f, -1.392731651e-03f, -1.396477147e-03f, -1.400220037e-03f, -1.403960316e-03f, -1.407697977e-03f,
--1.411433014e-03f, -1.415165421e-03f, -1.418895191e-03f, -1.422622318e-03f, -1.426346795e-03f, -1.430068617e-03f, -1.433787777e-03f, -1.437504268e-03f, -1.441218085e-03f, -1.444929221e-03f,
--1.448637670e-03f, -1.452343426e-03f, -1.456046482e-03f, -1.459746833e-03f, -1.463444471e-03f, -1.467139390e-03f, -1.470831585e-03f, -1.474521049e-03f, -1.478207776e-03f, -1.481891760e-03f,
--1.485572994e-03f, -1.489251472e-03f, -1.492927188e-03f, -1.496600136e-03f, -1.500270310e-03f, -1.503937702e-03f, -1.507602308e-03f, -1.511264121e-03f, -1.514923135e-03f, -1.518579343e-03f,
--1.522232740e-03f, -1.525883319e-03f, -1.529531074e-03f, -1.533175999e-03f, -1.536818088e-03f, -1.540457335e-03f, -1.544093733e-03f, -1.547727276e-03f, -1.551357959e-03f, -1.554985774e-03f,
--1.558610717e-03f, -1.562232780e-03f, -1.565851958e-03f, -1.569468245e-03f, -1.573081634e-03f, -1.576692120e-03f, -1.580299696e-03f, -1.583904356e-03f, -1.587506095e-03f, -1.591104905e-03f,
--1.594700782e-03f, -1.598293718e-03f, -1.601883709e-03f, -1.605470747e-03f, -1.609054827e-03f, -1.612635943e-03f, -1.616214088e-03f, -1.619789258e-03f, -1.623361444e-03f, -1.626930643e-03f,
--1.630496847e-03f, -1.634060051e-03f, -1.637620248e-03f, -1.641177433e-03f, -1.644731600e-03f, -1.648282742e-03f, -1.651830854e-03f, -1.655375929e-03f, -1.658917963e-03f, -1.662456947e-03f,
--1.665992878e-03f, -1.669525749e-03f, -1.673055553e-03f, -1.676582285e-03f, -1.680105940e-03f, -1.683626510e-03f, -1.687143991e-03f, -1.690658375e-03f, -1.694169658e-03f, -1.697677834e-03f,
--1.701182896e-03f, -1.704684838e-03f, -1.708183655e-03f, -1.711679341e-03f, -1.715171890e-03f, -1.718661296e-03f, -1.722147553e-03f, -1.725630655e-03f, -1.729110597e-03f, -1.732587372e-03f,
--1.736060975e-03f, -1.739531401e-03f, -1.742998642e-03f, -1.746462693e-03f, -1.749923549e-03f, -1.753381203e-03f, -1.756835651e-03f, -1.760286885e-03f, -1.763734900e-03f, -1.767179691e-03f,
--1.770621251e-03f, -1.774059576e-03f, -1.777494658e-03f, -1.780926492e-03f, -1.784355073e-03f, -1.787780395e-03f, -1.791202452e-03f, -1.794621238e-03f, -1.798036748e-03f, -1.801448975e-03f,
--1.804857915e-03f, -1.808263560e-03f, -1.811665907e-03f, -1.815064948e-03f, -1.818460678e-03f, -1.821853092e-03f, -1.825242184e-03f, -1.828627948e-03f, -1.832010378e-03f, -1.835389469e-03f,
--1.838765215e-03f, -1.842137610e-03f, -1.845506650e-03f, -1.848872327e-03f, -1.852234637e-03f, -1.855593574e-03f, -1.858949132e-03f, -1.862301305e-03f, -1.865650089e-03f, -1.868995476e-03f,
--1.872337463e-03f, -1.875676042e-03f, -1.879011210e-03f, -1.882342959e-03f, -1.885671284e-03f, -1.888996180e-03f, -1.892317642e-03f, -1.895635663e-03f, -1.898950238e-03f, -1.902261362e-03f,
--1.905569029e-03f, -1.908873233e-03f, -1.912173969e-03f, -1.915471232e-03f, -1.918765015e-03f, -1.922055314e-03f, -1.925342122e-03f, -1.928625435e-03f, -1.931905247e-03f, -1.935181552e-03f,
--1.938454346e-03f, -1.941723621e-03f, -1.944989373e-03f, -1.948251597e-03f, -1.951510287e-03f, -1.954765438e-03f, -1.958017043e-03f, -1.961265099e-03f, -1.964509598e-03f, -1.967750536e-03f,
--1.970987908e-03f, -1.974221708e-03f, -1.977451930e-03f, -1.980678570e-03f, -1.983901621e-03f, -1.987121079e-03f, -1.990336938e-03f, -1.993549192e-03f, -1.996757837e-03f, -1.999962867e-03f,
--2.003164276e-03f, -2.006362059e-03f, -2.009556212e-03f, -2.012746728e-03f, -2.015933602e-03f, -2.019116829e-03f, -2.022296403e-03f, -2.025472320e-03f, -2.028644574e-03f, -2.031813160e-03f,
--2.034978072e-03f, -2.038139305e-03f, -2.041296854e-03f, -2.044450713e-03f, -2.047600878e-03f, -2.050747343e-03f, -2.053890103e-03f, -2.057029152e-03f, -2.060164485e-03f, -2.063296098e-03f,
--2.066423985e-03f, -2.069548140e-03f, -2.072668558e-03f, -2.075785235e-03f, -2.078898165e-03f, -2.082007343e-03f, -2.085112764e-03f, -2.088214422e-03f, -2.091312312e-03f, -2.094406430e-03f,
--2.097496769e-03f, -2.100583326e-03f, -2.103666094e-03f, -2.106745069e-03f, -2.109820245e-03f, -2.112891618e-03f, -2.115959182e-03f, -2.119022932e-03f, -2.122082864e-03f, -2.125138971e-03f,
--2.128191249e-03f, -2.131239692e-03f, -2.134284297e-03f, -2.137325057e-03f, -2.140361968e-03f, -2.143395024e-03f, -2.146424221e-03f, -2.149449553e-03f, -2.152471016e-03f, -2.155488604e-03f,
--2.158502312e-03f, -2.161512136e-03f, -2.164518070e-03f, -2.167520110e-03f, -2.170518250e-03f, -2.173512485e-03f, -2.176502811e-03f, -2.179489223e-03f, -2.182471714e-03f, -2.185450282e-03f,
--2.188424920e-03f, -2.191395623e-03f, -2.194362388e-03f, -2.197325208e-03f, -2.200284079e-03f, -2.203238996e-03f, -2.206189954e-03f, -2.209136949e-03f, -2.212079974e-03f, -2.215019026e-03f,
--2.217954100e-03f, -2.220885190e-03f, -2.223812292e-03f, -2.226735401e-03f, -2.229654512e-03f, -2.232569620e-03f, -2.235480721e-03f, -2.238387809e-03f, -2.241290880e-03f, -2.244189929e-03f,
--2.247084952e-03f, -2.249975942e-03f, -2.252862896e-03f, -2.255745809e-03f, -2.258624676e-03f, -2.261499493e-03f, -2.264370253e-03f, -2.267236954e-03f, -2.270099589e-03f, -2.272958155e-03f,
--2.275812646e-03f, -2.278663058e-03f, -2.281509386e-03f, -2.284351626e-03f, -2.287189772e-03f, -2.290023820e-03f, -2.292853765e-03f, -2.295679603e-03f, -2.298501329e-03f, -2.301318938e-03f,
--2.304132426e-03f, -2.306941788e-03f, -2.309747019e-03f, -2.312548114e-03f, -2.315345070e-03f, -2.318137881e-03f, -2.320926543e-03f, -2.323711051e-03f, -2.326491401e-03f, -2.329267588e-03f,
--2.332039607e-03f, -2.334807454e-03f, -2.337571124e-03f, -2.340330613e-03f, -2.343085916e-03f, -2.345837029e-03f, -2.348583947e-03f, -2.351326665e-03f, -2.354065180e-03f, -2.356799486e-03f,
--2.359529579e-03f, -2.362255454e-03f, -2.364977107e-03f, -2.367694534e-03f, -2.370407730e-03f, -2.373116691e-03f, -2.375821411e-03f, -2.378521887e-03f, -2.381218115e-03f, -2.383910089e-03f,
--2.386597805e-03f, -2.389281259e-03f, -2.391960447e-03f, -2.394635364e-03f, -2.397306005e-03f, -2.399972367e-03f, -2.402634444e-03f, -2.405292233e-03f, -2.407945729e-03f, -2.410594928e-03f,
--2.413239825e-03f, -2.415880416e-03f, -2.418516697e-03f, -2.421148663e-03f, -2.423776311e-03f, -2.426399635e-03f, -2.429018631e-03f, -2.431633295e-03f, -2.434243623e-03f, -2.436849611e-03f,
--2.439451254e-03f, -2.442048548e-03f, -2.444641488e-03f, -2.447230071e-03f, -2.449814292e-03f, -2.452394147e-03f, -2.454969632e-03f, -2.457540742e-03f, -2.460107474e-03f, -2.462669822e-03f,
--2.465227783e-03f, -2.467781353e-03f, -2.470330528e-03f, -2.472875302e-03f, -2.475415673e-03f, -2.477951636e-03f, -2.480483186e-03f, -2.483010320e-03f, -2.485533034e-03f, -2.488051322e-03f,
--2.490565183e-03f, -2.493074610e-03f, -2.495579600e-03f, -2.498080149e-03f, -2.500576253e-03f, -2.503067907e-03f, -2.505555108e-03f, -2.508037852e-03f, -2.510516134e-03f, -2.512989951e-03f,
--2.515459298e-03f, -2.517924172e-03f, -2.520384568e-03f, -2.522840482e-03f, -2.525291910e-03f, -2.527738849e-03f, -2.530181294e-03f, -2.532619241e-03f, -2.535052686e-03f, -2.537481626e-03f,
--2.539906057e-03f, -2.542325973e-03f, -2.544741373e-03f, -2.547152250e-03f, -2.549558602e-03f, -2.551960425e-03f, -2.554357715e-03f, -2.556750467e-03f, -2.559138679e-03f, -2.561522345e-03f,
--2.563901463e-03f, -2.566276028e-03f, -2.568646036e-03f, -2.571011484e-03f, -2.573372367e-03f, -2.575728682e-03f, -2.578080426e-03f, -2.580427593e-03f, -2.582770181e-03f, -2.585108185e-03f,
--2.587441602e-03f, -2.589770428e-03f, -2.592094659e-03f, -2.594414292e-03f, -2.596729322e-03f, -2.599039746e-03f, -2.601345559e-03f, -2.603646760e-03f, -2.605943342e-03f, -2.608235304e-03f,
--2.610522641e-03f, -2.612805349e-03f, -2.615083425e-03f, -2.617356864e-03f, -2.619625664e-03f, -2.621889821e-03f, -2.624149331e-03f, -2.626404190e-03f, -2.628654394e-03f, -2.630899941e-03f,
--2.633140825e-03f, -2.635377045e-03f, -2.637608596e-03f, -2.639835474e-03f, -2.642057675e-03f, -2.644275197e-03f, -2.646488036e-03f, -2.648696188e-03f, -2.650899649e-03f, -2.653098416e-03f,
--2.655292486e-03f, -2.657481854e-03f, -2.659666518e-03f, -2.661846473e-03f, -2.664021717e-03f, -2.666192245e-03f, -2.668358054e-03f, -2.670519141e-03f, -2.672675502e-03f, -2.674827134e-03f,
--2.676974033e-03f, -2.679116196e-03f, -2.681253619e-03f, -2.683386299e-03f, -2.685514233e-03f, -2.687637416e-03f, -2.689755846e-03f, -2.691869519e-03f, -2.693978432e-03f, -2.696082581e-03f,
--2.698181963e-03f, -2.700276574e-03f, -2.702366412e-03f, -2.704451473e-03f, -2.706531752e-03f, -2.708607248e-03f, -2.710677957e-03f, -2.712743875e-03f, -2.714804999e-03f, -2.716861326e-03f,
--2.718912853e-03f, -2.720959575e-03f, -2.723001491e-03f, -2.725038596e-03f, -2.727070887e-03f, -2.729098362e-03f, -2.731121016e-03f, -2.733138846e-03f, -2.735151850e-03f, -2.737160025e-03f,
--2.739163366e-03f, -2.741161870e-03f, -2.743155535e-03f, -2.745144357e-03f, -2.747128334e-03f, -2.749107461e-03f, -2.751081736e-03f, -2.753051155e-03f, -2.755015716e-03f, -2.756975414e-03f,
--2.758930248e-03f, -2.760880214e-03f, -2.762825309e-03f, -2.764765530e-03f, -2.766700873e-03f, -2.768631336e-03f, -2.770556915e-03f, -2.772477607e-03f, -2.774393410e-03f, -2.776304320e-03f,
--2.778210334e-03f, -2.780111450e-03f, -2.782007663e-03f, -2.783898971e-03f, -2.785785372e-03f, -2.787666862e-03f, -2.789543437e-03f, -2.791415096e-03f, -2.793281835e-03f, -2.795143651e-03f,
--2.797000541e-03f, -2.798852502e-03f, -2.800699532e-03f, -2.802541626e-03f, -2.804378784e-03f, -2.806211000e-03f, -2.808038273e-03f, -2.809860600e-03f, -2.811677977e-03f, -2.813490403e-03f,
--2.815297873e-03f, -2.817100385e-03f, -2.818897937e-03f, -2.820690525e-03f, -2.822478147e-03f, -2.824260799e-03f, -2.826038479e-03f, -2.827811184e-03f, -2.829578912e-03f, -2.831341658e-03f,
--2.833099422e-03f, -2.834852199e-03f, -2.836599988e-03f, -2.838342785e-03f, -2.840080587e-03f, -2.841813393e-03f, -2.843541198e-03f, -2.845264001e-03f, -2.846981798e-03f, -2.848694587e-03f,
--2.850402366e-03f, -2.852105131e-03f, -2.853802880e-03f, -2.855495610e-03f, -2.857183319e-03f, -2.858866003e-03f, -2.860543661e-03f, -2.862216289e-03f, -2.863883886e-03f, -2.865546447e-03f,
--2.867203971e-03f, -2.868856455e-03f, -2.870503897e-03f, -2.872146294e-03f, -2.873783643e-03f, -2.875415941e-03f, -2.877043187e-03f, -2.878665378e-03f, -2.880282510e-03f, -2.881894582e-03f,
--2.883501591e-03f, -2.885103535e-03f, -2.886700411e-03f, -2.888292216e-03f, -2.889878948e-03f, -2.891460604e-03f, -2.893037183e-03f, -2.894608681e-03f, -2.896175097e-03f, -2.897736427e-03f,
--2.899292669e-03f, -2.900843821e-03f, -2.902389881e-03f, -2.903930845e-03f, -2.905466712e-03f, -2.906997480e-03f, -2.908523145e-03f, -2.910043705e-03f, -2.911559159e-03f, -2.913069503e-03f,
--2.914574736e-03f, -2.916074854e-03f, -2.917569857e-03f, -2.919059740e-03f, -2.920544503e-03f, -2.922024143e-03f, -2.923498657e-03f, -2.924968043e-03f, -2.926432299e-03f, -2.927891423e-03f,
--2.929345412e-03f, -2.930794264e-03f, -2.932237977e-03f, -2.933676549e-03f, -2.935109977e-03f, -2.936538259e-03f, -2.937961393e-03f, -2.939379378e-03f, -2.940792209e-03f, -2.942199887e-03f,
--2.943602407e-03f, -2.944999769e-03f, -2.946391969e-03f, -2.947779007e-03f, -2.949160879e-03f, -2.950537584e-03f, -2.951909119e-03f, -2.953275482e-03f, -2.954636672e-03f, -2.955992686e-03f,
--2.957343522e-03f, -2.958689178e-03f, -2.960029652e-03f, -2.961364942e-03f, -2.962695046e-03f, -2.964019962e-03f, -2.965339687e-03f, -2.966654221e-03f, -2.967963560e-03f, -2.969267703e-03f,
--2.970566647e-03f, -2.971860392e-03f, -2.973148934e-03f, -2.974432272e-03f, -2.975710405e-03f, -2.976983329e-03f, -2.978251043e-03f, -2.979513546e-03f, -2.980770834e-03f, -2.982022907e-03f,
--2.983269763e-03f, -2.984511399e-03f, -2.985747814e-03f, -2.986979005e-03f, -2.988204972e-03f, -2.989425711e-03f, -2.990641222e-03f, -2.991851502e-03f, -2.993056550e-03f, -2.994256364e-03f,
--2.995450941e-03f, -2.996640281e-03f, -2.997824381e-03f, -2.999003240e-03f, -3.000176856e-03f, -3.001345226e-03f, -3.002508350e-03f, -3.003666226e-03f, -3.004818852e-03f, -3.005966225e-03f,
--3.007108345e-03f, -3.008245210e-03f, -3.009376818e-03f, -3.010503167e-03f, -3.011624256e-03f, -3.012740083e-03f, -3.013850646e-03f, -3.014955944e-03f, -3.016055975e-03f, -3.017150737e-03f,
--3.018240229e-03f, -3.019324450e-03f, -3.020403397e-03f, -3.021477069e-03f, -3.022545464e-03f, -3.023608581e-03f, -3.024666419e-03f, -3.025718975e-03f, -3.026766248e-03f, -3.027808237e-03f,
--3.028844940e-03f, -3.029876355e-03f, -3.030902482e-03f, -3.031923318e-03f, -3.032938862e-03f, -3.033949113e-03f, -3.034954069e-03f, -3.035953729e-03f, -3.036948090e-03f, -3.037937153e-03f,
--3.038920914e-03f, -3.039899374e-03f, -3.040872530e-03f, -3.041840381e-03f, -3.042802926e-03f, -3.043760163e-03f, -3.044712091e-03f, -3.045658708e-03f, -3.046600014e-03f, -3.047536006e-03f,
--3.048466684e-03f, -3.049392045e-03f, -3.050312090e-03f, -3.051226816e-03f, -3.052136222e-03f, -3.053040307e-03f, -3.053939070e-03f, -3.054832509e-03f, -3.055720622e-03f, -3.056603410e-03f,
--3.057480870e-03f, -3.058353001e-03f, -3.059219803e-03f, -3.060081273e-03f, -3.060937411e-03f, -3.061788215e-03f, -3.062633684e-03f, -3.063473817e-03f, -3.064308613e-03f, -3.065138071e-03f,
--3.065962189e-03f, -3.066780966e-03f, -3.067594402e-03f, -3.068402495e-03f, -3.069205244e-03f, -3.070002647e-03f, -3.070794704e-03f, -3.071581414e-03f, -3.072362775e-03f, -3.073138787e-03f,
--3.073909448e-03f, -3.074674758e-03f, -3.075434715e-03f, -3.076189318e-03f, -3.076938566e-03f, -3.077682458e-03f, -3.078420994e-03f, -3.079154172e-03f, -3.079881991e-03f, -3.080604450e-03f,
--3.081321549e-03f, -3.082033286e-03f, -3.082739660e-03f, -3.083440670e-03f, -3.084136316e-03f, -3.084826596e-03f, -3.085511510e-03f, -3.086191057e-03f, -3.086865236e-03f, -3.087534045e-03f,
--3.088197484e-03f, -3.088855553e-03f, -3.089508250e-03f, -3.090155574e-03f, -3.090797525e-03f, -3.091434101e-03f, -3.092065303e-03f, -3.092691129e-03f, -3.093311577e-03f, -3.093926649e-03f,
--3.094536342e-03f, -3.095140656e-03f, -3.095739591e-03f, -3.096333144e-03f, -3.096921317e-03f, -3.097504107e-03f, -3.098081515e-03f, -3.098653539e-03f, -3.099220178e-03f, -3.099781433e-03f,
--3.100337302e-03f, -3.100887785e-03f, -3.101432881e-03f, -3.101972589e-03f, -3.102506909e-03f, -3.103035840e-03f, -3.103559382e-03f, -3.104077533e-03f, -3.104590293e-03f, -3.105097662e-03f,
--3.105599639e-03f, -3.106096223e-03f, -3.106587414e-03f, -3.107073211e-03f, -3.107553614e-03f, -3.108028622e-03f, -3.108498234e-03f, -3.108962450e-03f, -3.109421270e-03f, -3.109874693e-03f,
--3.110322718e-03f, -3.110765346e-03f, -3.111202575e-03f, -3.111634404e-03f, -3.112060835e-03f, -3.112481865e-03f, -3.112897495e-03f, -3.113307724e-03f, -3.113712552e-03f, -3.114111978e-03f,
--3.114506002e-03f, -3.114894624e-03f, -3.115277843e-03f, -3.115655658e-03f, -3.116028070e-03f, -3.116395078e-03f, -3.116756681e-03f, -3.117112880e-03f, -3.117463673e-03f, -3.117809062e-03f,
--3.118149044e-03f, -3.118483621e-03f, -3.118812791e-03f, -3.119136554e-03f, -3.119454911e-03f, -3.119767861e-03f, -3.120075403e-03f, -3.120377537e-03f, -3.120674264e-03f, -3.120965582e-03f,
--3.121251492e-03f, -3.121531993e-03f, -3.121807086e-03f, -3.122076769e-03f, -3.122341044e-03f, -3.122599909e-03f, -3.122853364e-03f, -3.123101410e-03f, -3.123344046e-03f, -3.123581271e-03f,
--3.123813087e-03f, -3.124039493e-03f, -3.124260488e-03f, -3.124476072e-03f, -3.124686246e-03f, -3.124891010e-03f, -3.125090363e-03f, -3.125284304e-03f, -3.125472835e-03f, -3.125655956e-03f,
--3.125833665e-03f, -3.126005963e-03f, -3.126172850e-03f, -3.126334326e-03f, -3.126490392e-03f, -3.126641046e-03f, -3.126786289e-03f, -3.126926122e-03f, -3.127060543e-03f, -3.127189553e-03f,
--3.127313153e-03f, -3.127431342e-03f, -3.127544121e-03f, -3.127651488e-03f, -3.127753445e-03f, -3.127849992e-03f, -3.127941129e-03f, -3.128026855e-03f, -3.128107172e-03f, -3.128182078e-03f,
--3.128251575e-03f, -3.128315662e-03f, -3.128374339e-03f, -3.128427608e-03f, -3.128475467e-03f, -3.128517918e-03f, -3.128554960e-03f, -3.128586593e-03f, -3.128612818e-03f, -3.128633635e-03f,
--3.128649045e-03f, -3.128659047e-03f, -3.128663641e-03f, -3.128662829e-03f, -3.128656610e-03f, -3.128644985e-03f, -3.128627953e-03f, -3.128605516e-03f, -3.128577673e-03f, -3.128544425e-03f,
--3.128505772e-03f, -3.128461715e-03f, -3.128412254e-03f, -3.128357389e-03f, -3.128297120e-03f, -3.128231449e-03f, -3.128160374e-03f, -3.128083898e-03f, -3.128002020e-03f, -3.127914740e-03f,
--3.127822060e-03f, -3.127723979e-03f, -3.127620498e-03f, -3.127511617e-03f, -3.127397337e-03f, -3.127277659e-03f, -3.127152582e-03f, -3.127022107e-03f, -3.126886236e-03f, -3.126744967e-03f,
--3.126598303e-03f, -3.126446243e-03f, -3.126288787e-03f, -3.126125938e-03f, -3.125957694e-03f, -3.125784057e-03f, -3.125605027e-03f, -3.125420604e-03f, -3.125230790e-03f, -3.125035585e-03f,
--3.124834990e-03f, -3.124629005e-03f, -3.124417630e-03f, -3.124200867e-03f, -3.123978716e-03f, -3.123751178e-03f, -3.123518253e-03f, -3.123279943e-03f, -3.123036247e-03f, -3.122787167e-03f,
--3.122532703e-03f, -3.122272856e-03f, -3.122007626e-03f, -3.121737015e-03f, -3.121461023e-03f, -3.121179651e-03f, -3.120892900e-03f, -3.120600770e-03f, -3.120303262e-03f, -3.120000377e-03f,
--3.119692116e-03f, -3.119378480e-03f, -3.119059469e-03f, -3.118735084e-03f, -3.118405326e-03f, -3.118070196e-03f, -3.117729696e-03f, -3.117383824e-03f, -3.117032583e-03f, -3.116675974e-03f,
--3.116313997e-03f, -3.115946653e-03f, -3.115573943e-03f, -3.115195868e-03f, -3.114812430e-03f, -3.114423628e-03f, -3.114029463e-03f, -3.113629938e-03f, -3.113225053e-03f, -3.112814808e-03f,
--3.112399205e-03f, -3.111978244e-03f, -3.111551928e-03f, -3.111120256e-03f, -3.110683230e-03f, -3.110240850e-03f, -3.109793119e-03f, -3.109340036e-03f, -3.108881603e-03f, -3.108417822e-03f,
--3.107948692e-03f, -3.107474215e-03f, -3.106994393e-03f, -3.106509226e-03f, -3.106018716e-03f, -3.105522863e-03f, -3.105021669e-03f, -3.104515134e-03f, -3.104003261e-03f, -3.103486050e-03f,
--3.102963502e-03f, -3.102435619e-03f, -3.101902401e-03f, -3.101363851e-03f, -3.100819968e-03f, -3.100270755e-03f, -3.099716212e-03f, -3.099156341e-03f, -3.098591143e-03f, -3.098020620e-03f,
--3.097444771e-03f, -3.096863600e-03f, -3.096277107e-03f, -3.095685293e-03f, -3.095088160e-03f, -3.094485708e-03f, -3.093877940e-03f, -3.093264857e-03f, -3.092646459e-03f, -3.092022749e-03f,
--3.091393728e-03f, -3.090759396e-03f, -3.090119756e-03f, -3.089474808e-03f, -3.088824555e-03f, -3.088168997e-03f, -3.087508136e-03f, -3.086841973e-03f, -3.086170510e-03f, -3.085493748e-03f,
--3.084811689e-03f, -3.084124334e-03f, -3.083431684e-03f, -3.082733742e-03f, -3.082030508e-03f, -3.081321984e-03f, -3.080608171e-03f, -3.079889072e-03f, -3.079164687e-03f, -3.078435018e-03f,
--3.077700066e-03f, -3.076959834e-03f, -3.076214322e-03f, -3.075463532e-03f, -3.074707466e-03f, -3.073946126e-03f, -3.073179512e-03f, -3.072407627e-03f, -3.071630472e-03f, -3.070848049e-03f,
--3.070060359e-03f, -3.069267404e-03f, -3.068469186e-03f, -3.067665706e-03f, -3.066856966e-03f, -3.066042968e-03f, -3.065223713e-03f, -3.064399203e-03f, -3.063569440e-03f, -3.062734425e-03f,
--3.061894160e-03f, -3.061048647e-03f, -3.060197887e-03f, -3.059341883e-03f, -3.058480636e-03f, -3.057614147e-03f, -3.056742420e-03f, -3.055865454e-03f, -3.054983253e-03f, -3.054095817e-03f,
--3.053203149e-03f, -3.052305251e-03f, -3.051402124e-03f, -3.050493770e-03f, -3.049580192e-03f, -3.048661390e-03f, -3.047737367e-03f, -3.046808124e-03f, -3.045873664e-03f, -3.044933988e-03f,
--3.043989099e-03f, -3.043038998e-03f, -3.042083686e-03f, -3.041123167e-03f, -3.040157441e-03f, -3.039186512e-03f, -3.038210380e-03f, -3.037229048e-03f, -3.036242517e-03f, -3.035250790e-03f,
--3.034253869e-03f, -3.033251756e-03f, -3.032244452e-03f, -3.031231960e-03f, -3.030214281e-03f, -3.029191418e-03f, -3.028163373e-03f, -3.027130147e-03f, -3.026091744e-03f, -3.025048164e-03f,
--3.023999410e-03f, -3.022945484e-03f, -3.021886389e-03f, -3.020822125e-03f, -3.019752696e-03f, -3.018678103e-03f, -3.017598349e-03f, -3.016513435e-03f, -3.015423365e-03f, -3.014328139e-03f,
--3.013227760e-03f, -3.012122231e-03f, -3.011011553e-03f, -3.009895729e-03f, -3.008774760e-03f, -3.007648650e-03f, -3.006517400e-03f, -3.005381012e-03f, -3.004239489e-03f, -3.003092833e-03f,
--3.001941046e-03f, -3.000784131e-03f, -2.999622089e-03f, -2.998454923e-03f, -2.997282636e-03f, -2.996105229e-03f, -2.994922704e-03f, -2.993735065e-03f, -2.992542314e-03f, -2.991344452e-03f,
--2.990141483e-03f, -2.988933407e-03f, -2.987720229e-03f, -2.986501950e-03f, -2.985278572e-03f, -2.984050098e-03f, -2.982816531e-03f, -2.981577872e-03f, -2.980334124e-03f, -2.979085290e-03f,
--2.977831372e-03f, -2.976572372e-03f, -2.975308293e-03f, -2.974039137e-03f, -2.972764907e-03f, -2.971485605e-03f, -2.970201233e-03f, -2.968911795e-03f, -2.967617292e-03f, -2.966317728e-03f,
--2.965013104e-03f, -2.963703423e-03f, -2.962388687e-03f, -2.961068900e-03f, -2.959744064e-03f, -2.958414181e-03f, -2.957079253e-03f, -2.955739284e-03f, -2.954394276e-03f, -2.953044232e-03f,
--2.951689153e-03f, -2.950329044e-03f, -2.948963905e-03f, -2.947593741e-03f, -2.946218553e-03f, -2.944838345e-03f, -2.943453118e-03f, -2.942062876e-03f, -2.940667621e-03f, -2.939267356e-03f,
--2.937862083e-03f, -2.936451806e-03f, -2.935036526e-03f, -2.933616247e-03f, -2.932190972e-03f, -2.930760702e-03f, -2.929325441e-03f, -2.927885192e-03f, -2.926439957e-03f, -2.924989739e-03f,
--2.923534541e-03f, -2.922074365e-03f, -2.920609214e-03f, -2.919139092e-03f, -2.917664001e-03f, -2.916183943e-03f, -2.914698922e-03f, -2.913208940e-03f, -2.911714000e-03f, -2.910214105e-03f,
--2.908709258e-03f, -2.907199462e-03f, -2.905684720e-03f, -2.904165034e-03f, -2.902640407e-03f, -2.901110842e-03f, -2.899576343e-03f, -2.898036911e-03f, -2.896492551e-03f, -2.894943264e-03f,
--2.893389054e-03f, -2.891829924e-03f, -2.890265876e-03f, -2.888696914e-03f, -2.887123041e-03f, -2.885544259e-03f, -2.883960572e-03f, -2.882371982e-03f, -2.880778493e-03f, -2.879180108e-03f,
--2.877576829e-03f, -2.875968659e-03f, -2.874355602e-03f, -2.872737661e-03f, -2.871114838e-03f, -2.869487138e-03f, -2.867854562e-03f, -2.866217114e-03f, -2.864574796e-03f, -2.862927613e-03f,
--2.861275567e-03f, -2.859618662e-03f, -2.857956899e-03f, -2.856290283e-03f, -2.854618817e-03f, -2.852942504e-03f, -2.851261346e-03f, -2.849575348e-03f, -2.847884511e-03f, -2.846188840e-03f,
--2.844488338e-03f, -2.842783007e-03f, -2.841072852e-03f, -2.839357874e-03f, -2.837638078e-03f, -2.835913467e-03f, -2.834184043e-03f, -2.832449810e-03f, -2.830710772e-03f, -2.828966931e-03f,
--2.827218291e-03f, -2.825464855e-03f, -2.823706626e-03f, -2.821943608e-03f, -2.820175804e-03f, -2.818403218e-03f, -2.816625851e-03f, -2.814843709e-03f, -2.813056794e-03f, -2.811265109e-03f,
--2.809468658e-03f, -2.807667445e-03f, -2.805861472e-03f, -2.804050742e-03f, -2.802235261e-03f, -2.800415030e-03f, -2.798590053e-03f, -2.796760333e-03f, -2.794925874e-03f, -2.793086680e-03f,
--2.791242753e-03f, -2.789394098e-03f, -2.787540717e-03f, -2.785682614e-03f, -2.783819793e-03f, -2.781952256e-03f, -2.780080008e-03f, -2.778203052e-03f, -2.776321391e-03f, -2.774435030e-03f,
--2.772543970e-03f, -2.770648217e-03f, -2.768747772e-03f, -2.766842641e-03f, -2.764932826e-03f, -2.763018332e-03f, -2.761099160e-03f, -2.759175316e-03f, -2.757246803e-03f, -2.755313624e-03f,
--2.753375782e-03f, -2.751433283e-03f, -2.749486128e-03f, -2.747534321e-03f, -2.745577867e-03f, -2.743616769e-03f, -2.741651031e-03f, -2.739680655e-03f, -2.737705646e-03f, -2.735726008e-03f,
--2.733741744e-03f, -2.731752857e-03f, -2.729759352e-03f, -2.727761232e-03f, -2.725758501e-03f, -2.723751162e-03f, -2.721739219e-03f, -2.719722677e-03f, -2.717701538e-03f, -2.715675806e-03f,
--2.713645486e-03f, -2.711610580e-03f, -2.709571093e-03f, -2.707527028e-03f, -2.705478389e-03f, -2.703425181e-03f, -2.701367406e-03f, -2.699305068e-03f, -2.697238172e-03f, -2.695166721e-03f,
--2.693090718e-03f, -2.691010169e-03f, -2.688925076e-03f, -2.686835443e-03f, -2.684741274e-03f, -2.682642574e-03f, -2.680539346e-03f, -2.678431593e-03f, -2.676319320e-03f, -2.674202531e-03f,
--2.672081229e-03f, -2.669955418e-03f, -2.667825103e-03f, -2.665690287e-03f, -2.663550974e-03f, -2.661407168e-03f, -2.659258873e-03f, -2.657106093e-03f, -2.654948831e-03f, -2.652787093e-03f,
--2.650620881e-03f, -2.648450200e-03f, -2.646275054e-03f, -2.644095446e-03f, -2.641911382e-03f, -2.639722864e-03f, -2.637529896e-03f, -2.635332484e-03f, -2.633130630e-03f, -2.630924339e-03f,
--2.628713615e-03f, -2.626498462e-03f, -2.624278884e-03f, -2.622054884e-03f, -2.619826468e-03f, -2.617593639e-03f, -2.615356402e-03f, -2.613114759e-03f, -2.610868716e-03f, -2.608618277e-03f,
--2.606363445e-03f, -2.604104226e-03f, -2.601840622e-03f, -2.599572638e-03f, -2.597300278e-03f, -2.595023547e-03f, -2.592742448e-03f, -2.590456986e-03f, -2.588167165e-03f, -2.585872989e-03f,
--2.583574462e-03f, -2.581271589e-03f, -2.578964373e-03f, -2.576652819e-03f, -2.574336931e-03f, -2.572016713e-03f, -2.569692170e-03f, -2.567363306e-03f, -2.565030124e-03f, -2.562692630e-03f,
--2.560350828e-03f, -2.558004721e-03f, -2.555654314e-03f, -2.553299612e-03f, -2.550940618e-03f, -2.548577338e-03f, -2.546209774e-03f, -2.543837932e-03f, -2.541461816e-03f, -2.539081430e-03f,
--2.536696779e-03f, -2.534307867e-03f, -2.531914697e-03f, -2.529517276e-03f, -2.527115606e-03f, -2.524709693e-03f, -2.522299540e-03f, -2.519885153e-03f, -2.517466534e-03f, -2.515043690e-03f,
--2.512616624e-03f, -2.510185341e-03f, -2.507749845e-03f, -2.505310140e-03f, -2.502866231e-03f, -2.500418123e-03f, -2.497965819e-03f, -2.495509325e-03f, -2.493048645e-03f, -2.490583782e-03f,
--2.488114743e-03f, -2.485641530e-03f, -2.483164150e-03f, -2.480682605e-03f, -2.478196901e-03f, -2.475707043e-03f, -2.473213034e-03f, -2.470714879e-03f, -2.468212583e-03f, -2.465706150e-03f,
--2.463195585e-03f, -2.460680893e-03f, -2.458162077e-03f, -2.455639143e-03f, -2.453112095e-03f, -2.450580938e-03f, -2.448045676e-03f, -2.445506314e-03f, -2.442962856e-03f, -2.440415307e-03f,
--2.437863672e-03f, -2.435307956e-03f, -2.432748162e-03f, -2.430184295e-03f, -2.427616361e-03f, -2.425044364e-03f, -2.422468308e-03f, -2.419888198e-03f, -2.417304039e-03f, -2.414715836e-03f,
--2.412123593e-03f, -2.409527314e-03f, -2.406927005e-03f, -2.404322671e-03f, -2.401714315e-03f, -2.399101943e-03f, -2.396485560e-03f, -2.393865169e-03f, -2.391240777e-03f, -2.388612387e-03f,
--2.385980004e-03f, -2.383343633e-03f, -2.380703280e-03f, -2.378058948e-03f, -2.375410642e-03f, -2.372758367e-03f, -2.370102129e-03f, -2.367441931e-03f, -2.364777779e-03f, -2.362109677e-03f,
--2.359437631e-03f, -2.356761644e-03f, -2.354081722e-03f, -2.351397870e-03f, -2.348710093e-03f, -2.346018395e-03f, -2.343322781e-03f, -2.340623256e-03f, -2.337919825e-03f, -2.335212493e-03f,
--2.332501264e-03f, -2.329786145e-03f, -2.327067138e-03f, -2.324344250e-03f, -2.321617485e-03f, -2.318886849e-03f, -2.316152346e-03f, -2.313413980e-03f, -2.310671758e-03f, -2.307925683e-03f,
--2.305175762e-03f, -2.302421998e-03f, -2.299664397e-03f, -2.296902963e-03f, -2.294137703e-03f, -2.291368620e-03f, -2.288595719e-03f, -2.285819007e-03f, -2.283038487e-03f, -2.280254164e-03f,
--2.277466044e-03f, -2.274674132e-03f, -2.271878433e-03f, -2.269078951e-03f, -2.266275692e-03f, -2.263468660e-03f, -2.260657862e-03f, -2.257843301e-03f, -2.255024984e-03f, -2.252202914e-03f,
--2.249377098e-03f, -2.246547539e-03f, -2.243714244e-03f, -2.240877217e-03f, -2.238036463e-03f, -2.235191988e-03f, -2.232343797e-03f, -2.229491894e-03f, -2.226636285e-03f, -2.223776976e-03f,
--2.220913970e-03f, -2.218047273e-03f, -2.215176891e-03f, -2.212302829e-03f, -2.209425091e-03f, -2.206543683e-03f, -2.203658610e-03f, -2.200769877e-03f, -2.197877490e-03f, -2.194981453e-03f,
--2.192081772e-03f, -2.189178452e-03f, -2.186271498e-03f, -2.183360915e-03f, -2.180446709e-03f, -2.177528885e-03f, -2.174607448e-03f, -2.171682403e-03f, -2.168753756e-03f, -2.165821512e-03f,
--2.162885675e-03f, -2.159946252e-03f, -2.157003247e-03f, -2.154056666e-03f, -2.151106515e-03f, -2.148152797e-03f, -2.145195520e-03f, -2.142234687e-03f, -2.139270304e-03f, -2.136302377e-03f,
--2.133330911e-03f, -2.130355912e-03f, -2.127377383e-03f, -2.124395332e-03f, -2.121409762e-03f, -2.118420681e-03f, -2.115428092e-03f, -2.112432001e-03f, -2.109432414e-03f, -2.106429336e-03f,
--2.103422772e-03f, -2.100412728e-03f, -2.097399209e-03f, -2.094382220e-03f, -2.091361767e-03f, -2.088337856e-03f, -2.085310491e-03f, -2.082279678e-03f, -2.079245423e-03f, -2.076207730e-03f,
--2.073166606e-03f, -2.070122056e-03f, -2.067074085e-03f, -2.064022698e-03f, -2.060967902e-03f, -2.057909701e-03f, -2.054848101e-03f, -2.051783108e-03f, -2.048714726e-03f, -2.045642962e-03f,
--2.042567821e-03f, -2.039489308e-03f, -2.036407429e-03f, -2.033322190e-03f, -2.030233595e-03f, -2.027141651e-03f, -2.024046363e-03f, -2.020947736e-03f, -2.017845776e-03f, -2.014740489e-03f,
--2.011631880e-03f, -2.008519954e-03f, -2.005404717e-03f, -2.002286176e-03f, -1.999164334e-03f, -1.996039198e-03f, -1.992910774e-03f, -1.989779066e-03f, -1.986644081e-03f, -1.983505824e-03f,
--1.980364301e-03f, -1.977219517e-03f, -1.974071478e-03f, -1.970920190e-03f, -1.967765658e-03f, -1.964607887e-03f, -1.961446884e-03f, -1.958282654e-03f, -1.955115203e-03f, -1.951944536e-03f,
--1.948770658e-03f, -1.945593577e-03f, -1.942413296e-03f, -1.939229823e-03f, -1.936043162e-03f, -1.932853319e-03f, -1.929660300e-03f, -1.926464111e-03f, -1.923264757e-03f, -1.920062244e-03f,
--1.916856578e-03f, -1.913647764e-03f, -1.910435808e-03f, -1.907220716e-03f, -1.904002494e-03f, -1.900781147e-03f, -1.897556680e-03f, -1.894329101e-03f, -1.891098414e-03f, -1.887864625e-03f,
--1.884627740e-03f, -1.881387764e-03f, -1.878144704e-03f, -1.874898566e-03f, -1.871649354e-03f, -1.868397075e-03f, -1.865141734e-03f, -1.861883338e-03f, -1.858621892e-03f, -1.855357402e-03f,
--1.852089873e-03f, -1.848819312e-03f, -1.845545725e-03f, -1.842269116e-03f, -1.838989493e-03f, -1.835706860e-03f, -1.832421223e-03f, -1.829132590e-03f, -1.825840964e-03f, -1.822546352e-03f,
--1.819248761e-03f, -1.815948195e-03f, -1.812644661e-03f, -1.809338164e-03f, -1.806028711e-03f, -1.802716307e-03f, -1.799400958e-03f, -1.796082671e-03f, -1.792761450e-03f, -1.789437302e-03f,
--1.786110232e-03f, -1.782780247e-03f, -1.779447353e-03f, -1.776111555e-03f, -1.772772860e-03f, -1.769431272e-03f, -1.766086799e-03f, -1.762739446e-03f, -1.759389219e-03f, -1.756036124e-03f,
--1.752680166e-03f, -1.749321353e-03f, -1.745959690e-03f, -1.742595182e-03f, -1.739227836e-03f, -1.735857657e-03f, -1.732484653e-03f, -1.729108828e-03f, -1.725730188e-03f, -1.722348740e-03f,
--1.718964490e-03f, -1.715577443e-03f, -1.712187606e-03f, -1.708794985e-03f, -1.705399585e-03f, -1.702001412e-03f, -1.698600474e-03f, -1.695196774e-03f, -1.691790321e-03f, -1.688381119e-03f,
--1.684969175e-03f, -1.681554495e-03f, -1.678137085e-03f, -1.674716950e-03f, -1.671294097e-03f, -1.667868532e-03f, -1.664440262e-03f, -1.661009291e-03f, -1.657575626e-03f, -1.654139274e-03f,
--1.650700240e-03f, -1.647258531e-03f, -1.643814151e-03f, -1.640367109e-03f, -1.636917409e-03f, -1.633465058e-03f, -1.630010061e-03f, -1.626552426e-03f, -1.623092158e-03f, -1.619629263e-03f,
--1.616163747e-03f, -1.612695616e-03f, -1.609224878e-03f, -1.605751536e-03f, -1.602275599e-03f, -1.598797072e-03f, -1.595315961e-03f, -1.591832272e-03f, -1.588346011e-03f, -1.584857185e-03f,
--1.581365800e-03f, -1.577871862e-03f, -1.574375377e-03f, -1.570876351e-03f, -1.567374790e-03f, -1.563870701e-03f, -1.560364090e-03f, -1.556854963e-03f, -1.553343326e-03f, -1.549829185e-03f,
--1.546312547e-03f, -1.542793418e-03f, -1.539271804e-03f, -1.535747711e-03f, -1.532221145e-03f, -1.528692114e-03f, -1.525160622e-03f, -1.521626676e-03f, -1.518090282e-03f, -1.514551447e-03f,
--1.511010177e-03f, -1.507466478e-03f, -1.503920356e-03f, -1.500371818e-03f, -1.496820869e-03f, -1.493267517e-03f, -1.489711767e-03f, -1.486153626e-03f, -1.482593099e-03f, -1.479030194e-03f,
--1.475464916e-03f, -1.471897272e-03f, -1.468327268e-03f, -1.464754911e-03f, -1.461180205e-03f, -1.457603159e-03f, -1.454023778e-03f, -1.450442069e-03f, -1.446858037e-03f, -1.443271690e-03f,
--1.439683033e-03f, -1.436092072e-03f, -1.432498815e-03f, -1.428903268e-03f, -1.425305436e-03f, -1.421705326e-03f, -1.418102944e-03f, -1.414498298e-03f, -1.410891392e-03f, -1.407282234e-03f,
--1.403670830e-03f, -1.400057186e-03f, -1.396441309e-03f, -1.392823204e-03f, -1.389202879e-03f, -1.385580340e-03f, -1.381955592e-03f, -1.378328643e-03f, -1.374699499e-03f, -1.371068166e-03f,
--1.367434650e-03f, -1.363798958e-03f, -1.360161097e-03f, -1.356521073e-03f, -1.352878891e-03f, -1.349234560e-03f, -1.345588084e-03f, -1.341939470e-03f, -1.338288726e-03f, -1.334635856e-03f,
--1.330980869e-03f, -1.327323769e-03f, -1.323664564e-03f, -1.320003259e-03f, -1.316339863e-03f, -1.312674379e-03f, -1.309006817e-03f, -1.305337180e-03f, -1.301665477e-03f, -1.297991714e-03f,
--1.294315897e-03f, -1.290638032e-03f, -1.286958126e-03f, -1.283276185e-03f, -1.279592217e-03f, -1.275906226e-03f, -1.272218221e-03f, -1.268528207e-03f, -1.264836191e-03f, -1.261142179e-03f,
--1.257446178e-03f, -1.253748194e-03f, -1.250048234e-03f, -1.246346304e-03f, -1.242642411e-03f, -1.238936561e-03f, -1.235228761e-03f, -1.231519017e-03f, -1.227807336e-03f, -1.224093724e-03f,
--1.220378188e-03f, -1.216660735e-03f, -1.212941370e-03f, -1.209220101e-03f, -1.205496933e-03f, -1.201771874e-03f, -1.198044931e-03f, -1.194316108e-03f, -1.190585414e-03f, -1.186852854e-03f,
--1.183118435e-03f, -1.179382164e-03f, -1.175644048e-03f, -1.171904092e-03f, -1.168162304e-03f, -1.164418689e-03f, -1.160673255e-03f, -1.156926008e-03f, -1.153176955e-03f, -1.149426102e-03f,
--1.145673455e-03f, -1.141919022e-03f, -1.138162809e-03f, -1.134404823e-03f, -1.130645069e-03f, -1.126883556e-03f, -1.123120288e-03f, -1.119355274e-03f, -1.115588519e-03f, -1.111820030e-03f,
--1.108049814e-03f, -1.104277877e-03f, -1.100504225e-03f, -1.096728867e-03f, -1.092951807e-03f, -1.089173054e-03f, -1.085392612e-03f, -1.081610490e-03f, -1.077826693e-03f, -1.074041229e-03f,
--1.070254103e-03f, -1.066465323e-03f, -1.062674895e-03f, -1.058882825e-03f, -1.055089121e-03f, -1.051293789e-03f, -1.047496836e-03f, -1.043698268e-03f, -1.039898092e-03f, -1.036096315e-03f,
--1.032292943e-03f, -1.028487983e-03f, -1.024681441e-03f, -1.020873325e-03f, -1.017063641e-03f, -1.013252395e-03f, -1.009439594e-03f, -1.005625246e-03f, -1.001809355e-03f, -9.979919306e-04f,
--9.941729777e-04f, -9.903525034e-04f, -9.865305144e-04f, -9.827070174e-04f, -9.788820191e-04f, -9.750555261e-04f, -9.712275451e-04f, -9.673980829e-04f, -9.635671461e-04f, -9.597347415e-04f,
--9.559008756e-04f, -9.520655553e-04f, -9.482287872e-04f, -9.443905781e-04f, -9.405509346e-04f, -9.367098635e-04f, -9.328673714e-04f, -9.290234651e-04f, -9.251781513e-04f, -9.213314367e-04f,
--9.174833280e-04f, -9.136338320e-04f, -9.097829554e-04f, -9.059307049e-04f, -9.020770872e-04f, -8.982221091e-04f, -8.943657773e-04f, -8.905080986e-04f, -8.866490796e-04f, -8.827887271e-04f,
--8.789270478e-04f, -8.750640486e-04f, -8.711997361e-04f, -8.673341171e-04f, -8.634671983e-04f, -8.595989865e-04f, -8.557294884e-04f, -8.518587108e-04f, -8.479866605e-04f, -8.441133441e-04f,
--8.402387685e-04f, -8.363629405e-04f, -8.324858667e-04f, -8.286075540e-04f, -8.247280091e-04f, -8.208472387e-04f, -8.169652498e-04f, -8.130820489e-04f, -8.091976430e-04f, -8.053120387e-04f,
--8.014252429e-04f, -7.975372623e-04f, -7.936481038e-04f, -7.897577740e-04f, -7.858662798e-04f, -7.819736280e-04f, -7.780798253e-04f, -7.741848786e-04f, -7.702887946e-04f, -7.663915801e-04f,
--7.624932420e-04f, -7.585937869e-04f, -7.546932218e-04f, -7.507915534e-04f, -7.468887884e-04f, -7.429849338e-04f, -7.390799963e-04f, -7.351739828e-04f, -7.312668999e-04f, -7.273587546e-04f,
--7.234495536e-04f, -7.195393038e-04f, -7.156280119e-04f, -7.117156849e-04f, -7.078023294e-04f, -7.038879523e-04f, -6.999725604e-04f, -6.960561606e-04f, -6.921387597e-04f, -6.882203644e-04f,
--6.843009817e-04f, -6.803806183e-04f, -6.764592810e-04f, -6.725369768e-04f, -6.686137123e-04f, -6.646894946e-04f, -6.607643303e-04f, -6.568382263e-04f, -6.529111894e-04f, -6.489832266e-04f,
--6.450543445e-04f, -6.411245501e-04f, -6.371938502e-04f, -6.332622517e-04f, -6.293297613e-04f, -6.253963859e-04f, -6.214621324e-04f, -6.175270076e-04f, -6.135910184e-04f, -6.096541715e-04f,
--6.057164740e-04f, -6.017779325e-04f, -5.978385539e-04f, -5.938983452e-04f, -5.899573131e-04f, -5.860154645e-04f, -5.820728062e-04f, -5.781293452e-04f, -5.741850883e-04f, -5.702400423e-04f,
--5.662942141e-04f, -5.623476105e-04f, -5.584002384e-04f, -5.544521047e-04f, -5.505032163e-04f, -5.465535799e-04f, -5.426032026e-04f, -5.386520910e-04f, -5.347002521e-04f, -5.307476928e-04f,
--5.267944200e-04f, -5.228404404e-04f, -5.188857610e-04f, -5.149303887e-04f, -5.109743302e-04f, -5.070175926e-04f, -5.030601826e-04f, -4.991021071e-04f, -4.951433731e-04f, -4.911839873e-04f,
--4.872239567e-04f, -4.832632881e-04f, -4.793019885e-04f, -4.753400646e-04f, -4.713775234e-04f, -4.674143718e-04f, -4.634506166e-04f, -4.594862647e-04f, -4.555213231e-04f, -4.515557985e-04f,
--4.475896979e-04f, -4.436230281e-04f, -4.396557961e-04f, -4.356880086e-04f, -4.317196727e-04f, -4.277507952e-04f, -4.237813830e-04f, -4.198114429e-04f, -4.158409819e-04f, -4.118700069e-04f,
--4.078985247e-04f, -4.039265422e-04f, -3.999540663e-04f, -3.959811039e-04f, -3.920076620e-04f, -3.880337473e-04f, -3.840593668e-04f, -3.800845274e-04f, -3.761092360e-04f, -3.721334994e-04f,
--3.681573246e-04f, -3.641807184e-04f, -3.602036878e-04f, -3.562262396e-04f, -3.522483808e-04f, -3.482701182e-04f, -3.442914587e-04f, -3.403124093e-04f, -3.363329767e-04f, -3.323531681e-04f,
--3.283729901e-04f, -3.243924497e-04f, -3.204115539e-04f, -3.164303095e-04f, -3.124487234e-04f, -3.084668025e-04f, -3.044845537e-04f, -3.005019839e-04f, -2.965191001e-04f, -2.925359090e-04f,
--2.885524177e-04f, -2.845686329e-04f, -2.805845617e-04f, -2.766002109e-04f, -2.726155874e-04f, -2.686306982e-04f, -2.646455500e-04f, -2.606601498e-04f, -2.566745046e-04f, -2.526886212e-04f,
--2.487025065e-04f, -2.447161674e-04f, -2.407296109e-04f, -2.367428437e-04f, -2.327558729e-04f, -2.287687053e-04f, -2.247813478e-04f, -2.207938074e-04f, -2.168060909e-04f, -2.128182052e-04f,
--2.088301572e-04f, -2.048419539e-04f, -2.008536021e-04f, -1.968651087e-04f, -1.928764807e-04f, -1.888877249e-04f, -1.848988482e-04f, -1.809098576e-04f, -1.769207599e-04f, -1.729315620e-04f,
--1.689422709e-04f, -1.649528934e-04f, -1.609634364e-04f, -1.569739069e-04f, -1.529843116e-04f, -1.489946577e-04f, -1.450049518e-04f, -1.410152010e-04f, -1.370254120e-04f, -1.330355919e-04f,
--1.290457476e-04f, -1.250558858e-04f, -1.210660135e-04f, -1.170761377e-04f, -1.130862652e-04f, -1.090964028e-04f, -1.051065576e-04f, -1.011167363e-04f, -9.712694591e-05f, -9.313719330e-05f,
--8.914748536e-05f, -8.515782899e-05f, -8.116823107e-05f, -7.717869850e-05f, -7.318923817e-05f, -6.919985697e-05f, -6.521056179e-05f, -6.122135952e-05f, -5.723225706e-05f, -5.324326128e-05f,
--4.925437908e-05f, -4.526561736e-05f, -4.127698298e-05f, -3.728848285e-05f, -3.330012385e-05f, -2.931191286e-05f, -2.532385677e-05f, -2.133596247e-05f, -1.734823683e-05f, -1.336068675e-05f,
--9.373319098e-06f, -5.386140763e-06f, -1.399158625e-06f, 2.587620435e-06f, 6.574189537e-06f, 1.056054180e-05f, 1.454667035e-05f, 1.853256831e-05f, 2.251822880e-05f, 2.650364494e-05f,
-3.048880985e-05f, 3.447371668e-05f, 3.845835853e-05f, 4.244272854e-05f, 4.642681984e-05f, 5.041062554e-05f, 5.439413880e-05f, 5.837735272e-05f, 6.236026045e-05f, 6.634285512e-05f,
-7.032512985e-05f, 7.430707779e-05f, 7.828869207e-05f, 8.226996582e-05f, 8.625089218e-05f, 9.023146430e-05f, 9.421167530e-05f, 9.819151832e-05f, 1.021709865e-04f, 1.061500730e-04f,
-1.101287710e-04f, 1.141070735e-04f, 1.180849738e-04f, 1.220624650e-04f, 1.260395402e-04f, 1.300161926e-04f, 1.339924153e-04f, 1.379682015e-04f, 1.419435443e-04f, 1.459184369e-04f,
-1.498928725e-04f, 1.538668441e-04f, 1.578403450e-04f, 1.618133683e-04f, 1.657859071e-04f, 1.697579547e-04f, 1.737295042e-04f, 1.777005487e-04f, 1.816710814e-04f, 1.856410954e-04f,
-1.896105840e-04f, 1.935795403e-04f, 1.975479575e-04f, 2.015158287e-04f, 2.054831472e-04f, 2.094499060e-04f, 2.134160983e-04f, 2.173817174e-04f, 2.213467564e-04f, 2.253112085e-04f,
-2.292750668e-04f, 2.332383246e-04f, 2.372009750e-04f, 2.411630112e-04f, 2.451244263e-04f, 2.490852137e-04f, 2.530453664e-04f, 2.570048777e-04f, 2.609637407e-04f, 2.649219486e-04f,
-2.688794947e-04f, 2.728363720e-04f, 2.767925739e-04f, 2.807480935e-04f, 2.847029240e-04f, 2.886570586e-04f, 2.926104906e-04f, 2.965632130e-04f, 3.005152192e-04f, 3.044665022e-04f,
-3.084170555e-04f, 3.123668720e-04f, 3.163159451e-04f, 3.202642680e-04f, 3.242118339e-04f, 3.281586360e-04f, 3.321046675e-04f, 3.360499216e-04f, 3.399943916e-04f, 3.439380706e-04f,
-3.478809520e-04f, 3.518230289e-04f, 3.557642946e-04f, 3.597047423e-04f, 3.636443652e-04f, 3.675831565e-04f, 3.715211096e-04f, 3.754582175e-04f, 3.793944737e-04f, 3.833298712e-04f,
-3.872644035e-04f, 3.911980636e-04f, 3.951308448e-04f, 3.990627405e-04f, 4.029937438e-04f, 4.069238480e-04f, 4.108530463e-04f, 4.147813320e-04f, 4.187086984e-04f, 4.226351388e-04f,
-4.265606463e-04f, 4.304852142e-04f, 4.344088359e-04f, 4.383315046e-04f, 4.422532135e-04f, 4.461739559e-04f, 4.500937251e-04f, 4.540125144e-04f, 4.579303170e-04f, 4.618471263e-04f,
-4.657629355e-04f, 4.696777379e-04f, 4.735915267e-04f, 4.775042953e-04f, 4.814160370e-04f, 4.853267451e-04f, 4.892364127e-04f, 4.931450334e-04f, 4.970526002e-04f, 5.009591066e-04f,
-5.048645459e-04f, 5.087689113e-04f, 5.126721961e-04f, 5.165743938e-04f, 5.204754975e-04f, 5.243755006e-04f, 5.282743964e-04f, 5.321721782e-04f, 5.360688394e-04f, 5.399643732e-04f,
-5.438587731e-04f, 5.477520323e-04f, 5.516441441e-04f, 5.555351019e-04f, 5.594248990e-04f, 5.633135288e-04f, 5.672009846e-04f, 5.710872598e-04f, 5.749723476e-04f, 5.788562415e-04f,
-5.827389347e-04f, 5.866204207e-04f, 5.905006927e-04f, 5.943797442e-04f, 5.982575685e-04f, 6.021341590e-04f, 6.060095090e-04f, 6.098836119e-04f, 6.137564610e-04f, 6.176280498e-04f,
-6.214983716e-04f, 6.253674197e-04f, 6.292351876e-04f, 6.331016687e-04f, 6.369668563e-04f, 6.408307438e-04f, 6.446933246e-04f, 6.485545921e-04f, 6.524145397e-04f, 6.562731608e-04f,
-6.601304487e-04f, 6.639863970e-04f, 6.678409989e-04f, 6.716942479e-04f, 6.755461375e-04f, 6.793966609e-04f, 6.832458117e-04f, 6.870935833e-04f, 6.909399690e-04f, 6.947849623e-04f,
-6.986285567e-04f, 7.024707455e-04f, 7.063115222e-04f, 7.101508802e-04f, 7.139888130e-04f, 7.178253140e-04f, 7.216603766e-04f, 7.254939944e-04f, 7.293261606e-04f, 7.331568689e-04f,
-7.369861126e-04f, 7.408138852e-04f, 7.446401801e-04f, 7.484649909e-04f, 7.522883110e-04f, 7.561101338e-04f, 7.599304529e-04f, 7.637492617e-04f, 7.675665536e-04f, 7.713823223e-04f,
-7.751965611e-04f, 7.790092635e-04f, 7.828204230e-04f, 7.866300332e-04f, 7.904380875e-04f, 7.942445794e-04f, 7.980495024e-04f, 8.018528500e-04f, 8.056546158e-04f, 8.094547932e-04f,
-8.132533758e-04f, 8.170503570e-04f, 8.208457304e-04f, 8.246394896e-04f, 8.284316279e-04f, 8.322221391e-04f, 8.360110165e-04f, 8.397982538e-04f, 8.435838445e-04f, 8.473677821e-04f,
-8.511500601e-04f, 8.549306722e-04f, 8.587096118e-04f, 8.624868726e-04f, 8.662624480e-04f, 8.700363317e-04f, 8.738085172e-04f, 8.775789981e-04f, 8.813477679e-04f, 8.851148202e-04f,
-8.888801486e-04f, 8.926437467e-04f, 8.964056081e-04f, 9.001657263e-04f, 9.039240950e-04f, 9.076807077e-04f, 9.114355580e-04f, 9.151886396e-04f, 9.189399461e-04f, 9.226894709e-04f,
-9.264372079e-04f, 9.301831505e-04f, 9.339272924e-04f, 9.376696272e-04f, 9.414101486e-04f, 9.451488501e-04f, 9.488857255e-04f, 9.526207683e-04f, 9.563539721e-04f, 9.600853307e-04f,
-9.638148377e-04f, 9.675424867e-04f, 9.712682713e-04f, 9.749921853e-04f, 9.787142222e-04f, 9.824343759e-04f, 9.861526398e-04f, 9.898690077e-04f, 9.935834733e-04f, 9.972960302e-04f,
-1.001006672e-03f, 1.004715393e-03f, 1.008422186e-03f, 1.012127045e-03f, 1.015829964e-03f, 1.019530937e-03f, 1.023229956e-03f, 1.026927017e-03f, 1.030622112e-03f, 1.034315235e-03f,
-1.038006381e-03f, 1.041695542e-03f, 1.045382713e-03f, 1.049067887e-03f, 1.052751058e-03f, 1.056432220e-03f, 1.060111366e-03f, 1.063788490e-03f, 1.067463587e-03f, 1.071136648e-03f,
-1.074807670e-03f, 1.078476644e-03f, 1.082143566e-03f, 1.085808428e-03f, 1.089471225e-03f, 1.093131950e-03f, 1.096790597e-03f, 1.100447160e-03f, 1.104101633e-03f, 1.107754009e-03f,
-1.111404283e-03f, 1.115052447e-03f, 1.118698496e-03f, 1.122342424e-03f, 1.125984224e-03f, 1.129623891e-03f, 1.133261417e-03f, 1.136896798e-03f, 1.140530026e-03f, 1.144161096e-03f,
-1.147790001e-03f, 1.151416735e-03f, 1.155041293e-03f, 1.158663668e-03f, 1.162283853e-03f, 1.165901843e-03f, 1.169517631e-03f, 1.173131212e-03f, 1.176742579e-03f, 1.180351726e-03f,
-1.183958647e-03f, 1.187563336e-03f, 1.191165787e-03f, 1.194765993e-03f, 1.198363949e-03f, 1.201959648e-03f, 1.205553085e-03f, 1.209144253e-03f, 1.212733146e-03f, 1.216319758e-03f,
-1.219904083e-03f, 1.223486115e-03f, 1.227065848e-03f, 1.230643276e-03f, 1.234218392e-03f, 1.237791191e-03f, 1.241361666e-03f, 1.244929813e-03f, 1.248495623e-03f, 1.252059092e-03f,
-1.255620214e-03f, 1.259178981e-03f, 1.262735390e-03f, 1.266289432e-03f, 1.269841103e-03f, 1.273390396e-03f, 1.276937305e-03f, 1.280481825e-03f, 1.284023949e-03f, 1.287563671e-03f,
-1.291100985e-03f, 1.294635886e-03f, 1.298168367e-03f, 1.301698422e-03f, 1.305226046e-03f, 1.308751232e-03f, 1.312273974e-03f, 1.315794267e-03f, 1.319312104e-03f, 1.322827480e-03f,
-1.326340389e-03f, 1.329850824e-03f, 1.333358780e-03f, 1.336864250e-03f, 1.340367229e-03f, 1.343867712e-03f, 1.347365691e-03f, 1.350861161e-03f, 1.354354117e-03f, 1.357844552e-03f,
-1.361332460e-03f, 1.364817835e-03f, 1.368300672e-03f, 1.371780965e-03f, 1.375258708e-03f, 1.378733894e-03f, 1.382206519e-03f, 1.385676575e-03f, 1.389144058e-03f, 1.392608962e-03f,
-1.396071280e-03f, 1.399531006e-03f, 1.402988136e-03f, 1.406442663e-03f, 1.409894580e-03f, 1.413343884e-03f, 1.416790566e-03f, 1.420234623e-03f, 1.423676047e-03f, 1.427114834e-03f,
-1.430550977e-03f, 1.433984470e-03f, 1.437415308e-03f, 1.440843485e-03f, 1.444268995e-03f, 1.447691832e-03f, 1.451111991e-03f, 1.454529466e-03f, 1.457944250e-03f, 1.461356339e-03f,
-1.464765727e-03f, 1.468172407e-03f, 1.471576374e-03f, 1.474977623e-03f, 1.478376146e-03f, 1.481771940e-03f, 1.485164998e-03f, 1.488555314e-03f, 1.491942883e-03f, 1.495327698e-03f,
-1.498709755e-03f, 1.502089047e-03f, 1.505465569e-03f, 1.508839315e-03f, 1.512210280e-03f, 1.515578457e-03f, 1.518943841e-03f, 1.522306427e-03f, 1.525666208e-03f, 1.529023180e-03f,
-1.532377335e-03f, 1.535728670e-03f, 1.539077177e-03f, 1.542422852e-03f, 1.545765689e-03f, 1.549105682e-03f, 1.552442826e-03f, 1.555777114e-03f, 1.559108542e-03f, 1.562437104e-03f,
-1.565762794e-03f, 1.569085606e-03f, 1.572405535e-03f, 1.575722575e-03f, 1.579036721e-03f, 1.582347968e-03f, 1.585656308e-03f, 1.588961738e-03f, 1.592264252e-03f, 1.595563843e-03f,
-1.598860506e-03f, 1.602154237e-03f, 1.605445028e-03f, 1.608732876e-03f, 1.612017773e-03f, 1.615299715e-03f, 1.618578697e-03f, 1.621854712e-03f, 1.625127755e-03f, 1.628397821e-03f,
-1.631664904e-03f, 1.634928998e-03f, 1.638190099e-03f, 1.641448200e-03f, 1.644703296e-03f, 1.647955383e-03f, 1.651204453e-03f, 1.654450502e-03f, 1.657693525e-03f, 1.660933515e-03f,
-1.664170468e-03f, 1.667404378e-03f, 1.670635239e-03f, 1.673863047e-03f, 1.677087795e-03f, 1.680309479e-03f, 1.683528092e-03f, 1.686743630e-03f, 1.689956088e-03f, 1.693165458e-03f,
-1.696371738e-03f, 1.699574920e-03f, 1.702774999e-03f, 1.705971971e-03f, 1.709165830e-03f, 1.712356570e-03f, 1.715544186e-03f, 1.718728673e-03f, 1.721910025e-03f, 1.725088238e-03f,
-1.728263305e-03f, 1.731435222e-03f, 1.734603983e-03f, 1.737769582e-03f, 1.740932015e-03f, 1.744091276e-03f, 1.747247361e-03f, 1.750400262e-03f, 1.753549976e-03f, 1.756696497e-03f,
-1.759839820e-03f, 1.762979939e-03f, 1.766116850e-03f, 1.769250546e-03f, 1.772381024e-03f, 1.775508276e-03f, 1.778632299e-03f, 1.781753087e-03f, 1.784870635e-03f, 1.787984937e-03f,
-1.791095989e-03f, 1.794203785e-03f, 1.797308320e-03f, 1.800409588e-03f, 1.803507585e-03f, 1.806602305e-03f, 1.809693744e-03f, 1.812781895e-03f, 1.815866755e-03f, 1.818948317e-03f,
-1.822026576e-03f, 1.825101528e-03f, 1.828173168e-03f, 1.831241489e-03f, 1.834306487e-03f, 1.837368157e-03f, 1.840426494e-03f, 1.843481492e-03f, 1.846533147e-03f, 1.849581453e-03f,
-1.852626406e-03f, 1.855668000e-03f, 1.858706230e-03f, 1.861741091e-03f, 1.864772578e-03f, 1.867800685e-03f, 1.870825409e-03f, 1.873846743e-03f, 1.876864684e-03f, 1.879879225e-03f,
-1.882890361e-03f, 1.885898088e-03f, 1.888902401e-03f, 1.891903295e-03f, 1.894900764e-03f, 1.897894803e-03f, 1.900885409e-03f, 1.903872575e-03f, 1.906856296e-03f, 1.909836568e-03f,
-1.912813386e-03f, 1.915786744e-03f, 1.918756639e-03f, 1.921723064e-03f, 1.924686015e-03f, 1.927645486e-03f, 1.930601474e-03f, 1.933553973e-03f, 1.936502978e-03f, 1.939448484e-03f,
-1.942390486e-03f, 1.945328980e-03f, 1.948263960e-03f, 1.951195422e-03f, 1.954123360e-03f, 1.957047771e-03f, 1.959968648e-03f, 1.962885987e-03f, 1.965799784e-03f, 1.968710033e-03f,
-1.971616729e-03f, 1.974519869e-03f, 1.977419446e-03f, 1.980315456e-03f, 1.983207894e-03f, 1.986096756e-03f, 1.988982036e-03f, 1.991863730e-03f, 1.994741833e-03f, 1.997616340e-03f,
-2.000487247e-03f, 2.003354548e-03f, 2.006218240e-03f, 2.009078316e-03f, 2.011934773e-03f, 2.014787605e-03f, 2.017636808e-03f, 2.020482377e-03f, 2.023324308e-03f, 2.026162595e-03f,
-2.028997234e-03f, 2.031828221e-03f, 2.034655550e-03f, 2.037479217e-03f, 2.040299217e-03f, 2.043115545e-03f, 2.045928198e-03f, 2.048737169e-03f, 2.051542455e-03f, 2.054344050e-03f,
-2.057141951e-03f, 2.059936152e-03f, 2.062726649e-03f, 2.065513438e-03f, 2.068296513e-03f, 2.071075870e-03f, 2.073851504e-03f, 2.076623411e-03f, 2.079391586e-03f, 2.082156025e-03f,
-2.084916723e-03f, 2.087673675e-03f, 2.090426877e-03f, 2.093176324e-03f, 2.095922012e-03f, 2.098663937e-03f, 2.101402092e-03f, 2.104136475e-03f, 2.106867081e-03f, 2.109593904e-03f,
-2.112316941e-03f, 2.115036187e-03f, 2.117751638e-03f, 2.120463288e-03f, 2.123171134e-03f, 2.125875171e-03f, 2.128575395e-03f, 2.131271801e-03f, 2.133964384e-03f, 2.136653140e-03f,
-2.139338065e-03f, 2.142019155e-03f, 2.144696404e-03f, 2.147369809e-03f, 2.150039364e-03f, 2.152705067e-03f, 2.155366911e-03f, 2.158024893e-03f, 2.160679008e-03f, 2.163329253e-03f,
-2.165975622e-03f, 2.168618111e-03f, 2.171256716e-03f, 2.173891433e-03f, 2.176522257e-03f, 2.179149183e-03f, 2.181772208e-03f, 2.184391328e-03f, 2.187006536e-03f, 2.189617831e-03f,
-2.192225206e-03f, 2.194828659e-03f, 2.197428184e-03f, 2.200023777e-03f, 2.202615435e-03f, 2.205203152e-03f, 2.207786924e-03f, 2.210366748e-03f, 2.212942618e-03f, 2.215514532e-03f,
-2.218082483e-03f, 2.220646469e-03f, 2.223206485e-03f, 2.225762527e-03f, 2.228314590e-03f, 2.230862671e-03f, 2.233406765e-03f, 2.235946868e-03f, 2.238482975e-03f, 2.241015083e-03f,
-2.243543188e-03f, 2.246067285e-03f, 2.248587370e-03f, 2.251103438e-03f, 2.253615487e-03f, 2.256123512e-03f, 2.258627508e-03f, 2.261127471e-03f, 2.263623398e-03f, 2.266115284e-03f,
-2.268603125e-03f, 2.271086917e-03f, 2.273566656e-03f, 2.276042338e-03f, 2.278513959e-03f, 2.280981514e-03f, 2.283445000e-03f, 2.285904413e-03f, 2.288359749e-03f, 2.290811003e-03f,
-2.293258171e-03f, 2.295701250e-03f, 2.298140236e-03f, 2.300575124e-03f, 2.303005911e-03f, 2.305432592e-03f, 2.307855164e-03f, 2.310273622e-03f, 2.312687963e-03f, 2.315098182e-03f,
-2.317504276e-03f, 2.319906241e-03f, 2.322304073e-03f, 2.324697768e-03f, 2.327087321e-03f, 2.329472730e-03f, 2.331853990e-03f, 2.334231097e-03f, 2.336604047e-03f, 2.338972837e-03f,
-2.341337462e-03f, 2.343697919e-03f, 2.346054204e-03f, 2.348406312e-03f, 2.350754241e-03f, 2.353097986e-03f, 2.355437544e-03f, 2.357772910e-03f, 2.360104081e-03f, 2.362431053e-03f,
-2.364753823e-03f, 2.367072385e-03f, 2.369386737e-03f, 2.371696875e-03f, 2.374002795e-03f, 2.376304494e-03f, 2.378601967e-03f, 2.380895210e-03f, 2.383184221e-03f, 2.385468995e-03f,
-2.387749528e-03f, 2.390025817e-03f, 2.392297859e-03f, 2.394565648e-03f, 2.396829183e-03f, 2.399088458e-03f, 2.401343471e-03f, 2.403594217e-03f, 2.405840694e-03f, 2.408082896e-03f,
-2.410320822e-03f, 2.412554466e-03f, 2.414783826e-03f, 2.417008897e-03f, 2.419229677e-03f, 2.421446161e-03f, 2.423658346e-03f, 2.425866228e-03f, 2.428069804e-03f, 2.430269071e-03f,
-2.432464023e-03f, 2.434654659e-03f, 2.436840974e-03f, 2.439022965e-03f, 2.441200628e-03f, 2.443373960e-03f, 2.445542957e-03f, 2.447707616e-03f, 2.449867933e-03f, 2.452023904e-03f,
-2.454175527e-03f, 2.456322798e-03f, 2.458465712e-03f, 2.460604268e-03f, 2.462738460e-03f, 2.464868287e-03f, 2.466993744e-03f, 2.469114827e-03f, 2.471231534e-03f, 2.473343862e-03f,
-2.475451805e-03f, 2.477555362e-03f, 2.479654529e-03f, 2.481749301e-03f, 2.483839677e-03f, 2.485925653e-03f, 2.488007224e-03f, 2.490084389e-03f, 2.492157143e-03f, 2.494225483e-03f,
-2.496289406e-03f, 2.498348908e-03f, 2.500403986e-03f, 2.502454637e-03f, 2.504500858e-03f, 2.506542645e-03f, 2.508579994e-03f, 2.510612903e-03f, 2.512641368e-03f, 2.514665387e-03f,
-2.516684955e-03f, 2.518700069e-03f, 2.520710727e-03f, 2.522716925e-03f, 2.524718659e-03f, 2.526715927e-03f, 2.528708725e-03f, 2.530697051e-03f, 2.532680900e-03f, 2.534660270e-03f,
-2.536635157e-03f, 2.538605558e-03f, 2.540571471e-03f, 2.542532892e-03f, 2.544489817e-03f, 2.546442244e-03f, 2.548390170e-03f, 2.550333591e-03f, 2.552272504e-03f, 2.554206906e-03f,
-2.556136795e-03f, 2.558062166e-03f, 2.559983017e-03f, 2.561899345e-03f, 2.563811146e-03f, 2.565718418e-03f, 2.567621158e-03f, 2.569519362e-03f, 2.571413027e-03f, 2.573302151e-03f,
-2.575186730e-03f, 2.577066762e-03f, 2.578942242e-03f, 2.580813170e-03f, 2.582679540e-03f, 2.584541351e-03f, 2.586398599e-03f, 2.588251281e-03f, 2.590099395e-03f, 2.591942937e-03f,
-2.593781905e-03f, 2.595616295e-03f, 2.597446105e-03f, 2.599271332e-03f, 2.601091972e-03f, 2.602908024e-03f, 2.604719483e-03f, 2.606526347e-03f, 2.608328614e-03f, 2.610126279e-03f,
-2.611919342e-03f, 2.613707797e-03f, 2.615491644e-03f, 2.617270878e-03f, 2.619045498e-03f, 2.620815499e-03f, 2.622580880e-03f, 2.624341638e-03f, 2.626097769e-03f, 2.627849271e-03f,
-2.629596142e-03f, 2.631338378e-03f, 2.633075976e-03f, 2.634808935e-03f, 2.636537250e-03f, 2.638260920e-03f, 2.639979942e-03f, 2.641694312e-03f, 2.643404029e-03f, 2.645109089e-03f,
-2.646809490e-03f, 2.648505229e-03f, 2.650196303e-03f, 2.651882710e-03f, 2.653564447e-03f, 2.655241511e-03f, 2.656913900e-03f, 2.658581611e-03f, 2.660244642e-03f, 2.661902989e-03f,
-2.663556650e-03f, 2.665205623e-03f, 2.666849905e-03f, 2.668489493e-03f, 2.670124385e-03f, 2.671754578e-03f, 2.673380070e-03f, 2.675000857e-03f, 2.676616939e-03f, 2.678228311e-03f,
-2.679834971e-03f, 2.681436917e-03f, 2.683034147e-03f, 2.684626657e-03f, 2.686214445e-03f, 2.687797510e-03f, 2.689375847e-03f, 2.690949456e-03f, 2.692518332e-03f, 2.694082475e-03f,
-2.695641881e-03f, 2.697196548e-03f, 2.698746473e-03f, 2.700291655e-03f, 2.701832090e-03f, 2.703367776e-03f, 2.704898711e-03f, 2.706424893e-03f, 2.707946319e-03f, 2.709462986e-03f,
-2.710974892e-03f, 2.712482036e-03f, 2.713984414e-03f, 2.715482024e-03f, 2.716974864e-03f, 2.718462932e-03f, 2.719946225e-03f, 2.721424740e-03f, 2.722898476e-03f, 2.724367431e-03f,
-2.725831601e-03f, 2.727290985e-03f, 2.728745581e-03f, 2.730195386e-03f, 2.731640397e-03f, 2.733080614e-03f, 2.734516032e-03f, 2.735946651e-03f, 2.737372468e-03f, 2.738793480e-03f,
-2.740209686e-03f, 2.741621084e-03f, 2.743027670e-03f, 2.744429444e-03f, 2.745826402e-03f, 2.747218543e-03f, 2.748605864e-03f, 2.749988364e-03f, 2.751366039e-03f, 2.752738889e-03f,
-2.754106911e-03f, 2.755470102e-03f, 2.756828461e-03f, 2.758181986e-03f, 2.759530674e-03f, 2.760874524e-03f, 2.762213533e-03f, 2.763547700e-03f, 2.764877021e-03f, 2.766201496e-03f,
-2.767521122e-03f, 2.768835897e-03f, 2.770145819e-03f, 2.771450886e-03f, 2.772751096e-03f, 2.774046447e-03f, 2.775336938e-03f, 2.776622565e-03f, 2.777903328e-03f, 2.779179224e-03f,
-2.780450251e-03f, 2.781716407e-03f, 2.782977691e-03f, 2.784234100e-03f, 2.785485632e-03f, 2.786732286e-03f, 2.787974060e-03f, 2.789210952e-03f, 2.790442959e-03f, 2.791670081e-03f,
-2.792892315e-03f, 2.794109659e-03f, 2.795322111e-03f, 2.796529670e-03f, 2.797732334e-03f, 2.798930101e-03f, 2.800122969e-03f, 2.801310936e-03f, 2.802494001e-03f, 2.803672161e-03f,
-2.804845415e-03f, 2.806013762e-03f, 2.807177199e-03f, 2.808335725e-03f, 2.809489337e-03f, 2.810638035e-03f, 2.811781816e-03f, 2.812920679e-03f, 2.814054621e-03f, 2.815183643e-03f,
-2.816307740e-03f, 2.817426913e-03f, 2.818541159e-03f, 2.819650476e-03f, 2.820754863e-03f, 2.821854319e-03f, 2.822948841e-03f, 2.824038428e-03f, 2.825123078e-03f, 2.826202790e-03f,
-2.827277562e-03f, 2.828347393e-03f, 2.829412280e-03f, 2.830472223e-03f, 2.831527220e-03f, 2.832577269e-03f, 2.833622368e-03f, 2.834662516e-03f, 2.835697712e-03f, 2.836727954e-03f,
-2.837753241e-03f, 2.838773570e-03f, 2.839788941e-03f, 2.840799352e-03f, 2.841804801e-03f, 2.842805287e-03f, 2.843800808e-03f, 2.844791364e-03f, 2.845776952e-03f, 2.846757572e-03f,
-2.847733221e-03f, 2.848703898e-03f, 2.849669602e-03f, 2.850630332e-03f, 2.851586085e-03f, 2.852536862e-03f, 2.853482659e-03f, 2.854423477e-03f, 2.855359312e-03f, 2.856290165e-03f,
-2.857216034e-03f, 2.858136918e-03f, 2.859052814e-03f, 2.859963722e-03f, 2.860869641e-03f, 2.861770568e-03f, 2.862666504e-03f, 2.863557446e-03f, 2.864443394e-03f, 2.865324345e-03f,
-2.866200300e-03f, 2.867071255e-03f, 2.867937212e-03f, 2.868798167e-03f, 2.869654119e-03f, 2.870505069e-03f, 2.871351014e-03f, 2.872191953e-03f, 2.873027884e-03f, 2.873858808e-03f,
-2.874684722e-03f, 2.875505626e-03f, 2.876321518e-03f, 2.877132397e-03f, 2.877938262e-03f, 2.878739112e-03f, 2.879534945e-03f, 2.880325762e-03f, 2.881111559e-03f, 2.881892337e-03f,
-2.882668095e-03f, 2.883438830e-03f, 2.884204543e-03f, 2.884965232e-03f, 2.885720895e-03f, 2.886471533e-03f, 2.887217144e-03f, 2.887957727e-03f, 2.888693280e-03f, 2.889423804e-03f,
-2.890149296e-03f, 2.890869756e-03f, 2.891585183e-03f, 2.892295576e-03f, 2.893000934e-03f, 2.893701257e-03f, 2.894396542e-03f, 2.895086789e-03f, 2.895771997e-03f, 2.896452166e-03f,
-2.897127294e-03f, 2.897797380e-03f, 2.898462424e-03f, 2.899122425e-03f, 2.899777381e-03f, 2.900427292e-03f, 2.901072157e-03f, 2.901711976e-03f, 2.902346747e-03f, 2.902976469e-03f,
-2.903601142e-03f, 2.904220765e-03f, 2.904835337e-03f, 2.905444857e-03f, 2.906049324e-03f, 2.906648738e-03f, 2.907243099e-03f, 2.907832404e-03f, 2.908416653e-03f, 2.908995847e-03f,
-2.909569983e-03f, 2.910139061e-03f, 2.910703081e-03f, 2.911262041e-03f, 2.911815941e-03f, 2.912364781e-03f, 2.912908560e-03f, 2.913447276e-03f, 2.913980929e-03f, 2.914509520e-03f,
-2.915033046e-03f, 2.915551507e-03f, 2.916064904e-03f, 2.916573234e-03f, 2.917076498e-03f, 2.917574694e-03f, 2.918067823e-03f, 2.918555883e-03f, 2.919038875e-03f, 2.919516797e-03f,
-2.919989649e-03f, 2.920457430e-03f, 2.920920140e-03f, 2.921377779e-03f, 2.921830345e-03f, 2.922277839e-03f, 2.922720259e-03f, 2.923157605e-03f, 2.923589878e-03f, 2.924017075e-03f,
-2.924439197e-03f, 2.924856244e-03f, 2.925268214e-03f, 2.925675108e-03f, 2.926076925e-03f, 2.926473664e-03f, 2.926865326e-03f, 2.927251909e-03f, 2.927633413e-03f, 2.928009839e-03f,
-2.928381185e-03f, 2.928747450e-03f, 2.929108636e-03f, 2.929464741e-03f, 2.929815765e-03f, 2.930161708e-03f, 2.930502570e-03f, 2.930838349e-03f, 2.931169046e-03f, 2.931494660e-03f,
-2.931815192e-03f, 2.932130640e-03f, 2.932441005e-03f, 2.932746286e-03f, 2.933046483e-03f, 2.933341596e-03f, 2.933631624e-03f, 2.933916568e-03f, 2.934196427e-03f, 2.934471200e-03f,
-2.934740888e-03f, 2.935005491e-03f, 2.935265007e-03f, 2.935519438e-03f, 2.935768782e-03f, 2.936013041e-03f, 2.936252212e-03f, 2.936486297e-03f, 2.936715296e-03f, 2.936939207e-03f,
-2.937158031e-03f, 2.937371769e-03f, 2.937580418e-03f, 2.937783981e-03f, 2.937982456e-03f, 2.938175844e-03f, 2.938364144e-03f, 2.938547356e-03f, 2.938725481e-03f, 2.938898517e-03f,
-2.939066467e-03f, 2.939229328e-03f, 2.939387101e-03f, 2.939539787e-03f, 2.939687384e-03f, 2.939829894e-03f, 2.939967316e-03f, 2.940099651e-03f, 2.940226897e-03f, 2.940349056e-03f,
-2.940466127e-03f, 2.940578111e-03f, 2.940685007e-03f, 2.940786815e-03f, 2.940883536e-03f, 2.940975170e-03f, 2.941061717e-03f, 2.941143176e-03f, 2.941219549e-03f, 2.941290835e-03f,
-2.941357034e-03f, 2.941418147e-03f, 2.941474173e-03f, 2.941525113e-03f, 2.941570968e-03f, 2.941611736e-03f, 2.941647419e-03f, 2.941678016e-03f, 2.941703528e-03f, 2.941723955e-03f,
-2.941739297e-03f, 2.941749555e-03f, 2.941754728e-03f, 2.941754818e-03f, 2.941749823e-03f, 2.941739745e-03f, 2.941724584e-03f, 2.941704340e-03f, 2.941679013e-03f, 2.941648604e-03f,
-2.941613113e-03f, 2.941572540e-03f, 2.941526886e-03f, 2.941476151e-03f, 2.941420335e-03f, 2.941359439e-03f, 2.941293462e-03f, 2.941222407e-03f, 2.941146272e-03f, 2.941065058e-03f,
-2.940978766e-03f, 2.940887396e-03f, 2.940790949e-03f, 2.940689424e-03f, 2.940582823e-03f, 2.940471145e-03f, 2.940354392e-03f, 2.940232563e-03f, 2.940105659e-03f, 2.939973681e-03f,
-2.939836630e-03f, 2.939694504e-03f, 2.939547306e-03f, 2.939395036e-03f, 2.939237694e-03f, 2.939075280e-03f, 2.938907796e-03f, 2.938735242e-03f, 2.938557618e-03f, 2.938374925e-03f,
-2.938187163e-03f, 2.937994334e-03f, 2.937796437e-03f, 2.937593473e-03f, 2.937385444e-03f, 2.937172349e-03f, 2.936954189e-03f, 2.936730965e-03f, 2.936502677e-03f, 2.936269327e-03f,
-2.936030914e-03f, 2.935787440e-03f, 2.935538905e-03f, 2.935285309e-03f, 2.935026655e-03f, 2.934762941e-03f, 2.934494169e-03f, 2.934220340e-03f, 2.933941455e-03f, 2.933657514e-03f,
-2.933368517e-03f, 2.933074466e-03f, 2.932775362e-03f, 2.932471205e-03f, 2.932161996e-03f, 2.931847736e-03f, 2.931528425e-03f, 2.931204065e-03f, 2.930874655e-03f, 2.930540198e-03f,
-2.930200694e-03f, 2.929856144e-03f, 2.929506548e-03f, 2.929151908e-03f, 2.928792224e-03f, 2.928427498e-03f, 2.928057729e-03f, 2.927682920e-03f, 2.927303070e-03f, 2.926918181e-03f,
-2.926528255e-03f, 2.926133290e-03f, 2.925733290e-03f, 2.925328254e-03f, 2.924918184e-03f, 2.924503080e-03f, 2.924082943e-03f, 2.923657776e-03f, 2.923227577e-03f, 2.922792350e-03f,
-2.922352093e-03f, 2.921906810e-03f, 2.921456499e-03f, 2.921001164e-03f, 2.920540804e-03f, 2.920075421e-03f, 2.919605015e-03f, 2.919129589e-03f, 2.918649142e-03f, 2.918163676e-03f,
-2.917673193e-03f, 2.917177692e-03f, 2.916677176e-03f, 2.916171646e-03f, 2.915661102e-03f, 2.915145546e-03f, 2.914624978e-03f, 2.914099401e-03f, 2.913568815e-03f, 2.913033222e-03f,
-2.912492621e-03f, 2.911947016e-03f, 2.911396407e-03f, 2.910840795e-03f, 2.910280181e-03f, 2.909714567e-03f, 2.909143954e-03f, 2.908568342e-03f, 2.907987735e-03f, 2.907402131e-03f,
-2.906811534e-03f, 2.906215944e-03f, 2.905615363e-03f, 2.905009791e-03f, 2.904399230e-03f, 2.903783681e-03f, 2.903163147e-03f, 2.902537627e-03f, 2.901907124e-03f, 2.901271638e-03f,
-2.900631172e-03f, 2.899985725e-03f, 2.899335301e-03f, 2.898679900e-03f, 2.898019524e-03f, 2.897354173e-03f, 2.896683850e-03f, 2.896008556e-03f, 2.895328292e-03f, 2.894643059e-03f,
-2.893952860e-03f, 2.893257695e-03f, 2.892557566e-03f, 2.891852475e-03f, 2.891142423e-03f, 2.890427411e-03f, 2.889707441e-03f, 2.888982514e-03f, 2.888252633e-03f, 2.887517797e-03f,
-2.886778010e-03f, 2.886033273e-03f, 2.885283586e-03f, 2.884528952e-03f, 2.883769372e-03f, 2.883004848e-03f, 2.882235382e-03f, 2.881460974e-03f, 2.880681627e-03f, 2.879897342e-03f,
-2.879108120e-03f, 2.878313964e-03f, 2.877514875e-03f, 2.876710854e-03f, 2.875901904e-03f, 2.875088025e-03f, 2.874269221e-03f, 2.873445491e-03f, 2.872616838e-03f, 2.871783264e-03f,
-2.870944770e-03f, 2.870101358e-03f, 2.869253030e-03f, 2.868399788e-03f, 2.867541632e-03f, 2.866678565e-03f, 2.865810589e-03f, 2.864937706e-03f, 2.864059916e-03f, 2.863177223e-03f,
-2.862289627e-03f, 2.861397131e-03f, 2.860499736e-03f, 2.859597444e-03f, 2.858690257e-03f, 2.857778176e-03f, 2.856861205e-03f, 2.855939343e-03f, 2.855012594e-03f, 2.854080959e-03f,
-2.853144440e-03f, 2.852203039e-03f, 2.851256757e-03f, 2.850305598e-03f, 2.849349561e-03f, 2.848388650e-03f, 2.847422866e-03f, 2.846452212e-03f, 2.845476689e-03f, 2.844496299e-03f,
-2.843511044e-03f, 2.842520925e-03f, 2.841525946e-03f, 2.840526108e-03f, 2.839521413e-03f, 2.838511862e-03f, 2.837497459e-03f, 2.836478204e-03f, 2.835454101e-03f, 2.834425150e-03f,
-2.833391354e-03f, 2.832352716e-03f, 2.831309236e-03f, 2.830260917e-03f, 2.829207762e-03f, 2.828149772e-03f, 2.827086949e-03f, 2.826019296e-03f, 2.824946814e-03f, 2.823869506e-03f,
-2.822787373e-03f, 2.821700418e-03f, 2.820608643e-03f, 2.819512051e-03f, 2.818410642e-03f, 2.817304420e-03f, 2.816193387e-03f, 2.815077544e-03f, 2.813956894e-03f, 2.812831440e-03f,
-2.811701182e-03f, 2.810566124e-03f, 2.809426268e-03f, 2.808281616e-03f, 2.807132169e-03f, 2.805977932e-03f, 2.804818905e-03f, 2.803655090e-03f, 2.802486491e-03f, 2.801313109e-03f,
-2.800134947e-03f, 2.798952007e-03f, 2.797764291e-03f, 2.796571802e-03f, 2.795374541e-03f, 2.794172512e-03f, 2.792965716e-03f, 2.791754156e-03f, 2.790537835e-03f, 2.789316753e-03f,
-2.788090915e-03f, 2.786860322e-03f, 2.785624976e-03f, 2.784384881e-03f, 2.783140038e-03f, 2.781890449e-03f, 2.780636118e-03f, 2.779377047e-03f, 2.778113237e-03f, 2.776844692e-03f,
-2.775571414e-03f, 2.774293405e-03f, 2.773010668e-03f, 2.771723205e-03f, 2.770431019e-03f, 2.769134112e-03f, 2.767832487e-03f, 2.766526146e-03f, 2.765215092e-03f, 2.763899327e-03f,
-2.762578853e-03f, 2.761253674e-03f, 2.759923792e-03f, 2.758589209e-03f, 2.757249928e-03f, 2.755905951e-03f, 2.754557281e-03f, 2.753203921e-03f, 2.751845873e-03f, 2.750483139e-03f,
-2.749115723e-03f, 2.747743627e-03f, 2.746366854e-03f, 2.744985405e-03f, 2.743599285e-03f, 2.742208495e-03f, 2.740813038e-03f, 2.739412916e-03f, 2.738008133e-03f, 2.736598692e-03f,
-2.735184593e-03f, 2.733765842e-03f, 2.732342439e-03f, 2.730914389e-03f, 2.729481692e-03f, 2.728044353e-03f, 2.726602374e-03f, 2.725155758e-03f, 2.723704507e-03f, 2.722248625e-03f,
-2.720788113e-03f, 2.719322975e-03f, 2.717853214e-03f, 2.716378832e-03f, 2.714899832e-03f, 2.713416216e-03f, 2.711927989e-03f, 2.710435152e-03f, 2.708937708e-03f, 2.707435660e-03f,
-2.705929011e-03f, 2.704417764e-03f, 2.702901922e-03f, 2.701381487e-03f, 2.699856462e-03f, 2.698326851e-03f, 2.696792656e-03f, 2.695253880e-03f, 2.693710526e-03f, 2.692162596e-03f,
-2.690610094e-03f, 2.689053023e-03f, 2.687491386e-03f, 2.685925185e-03f, 2.684354423e-03f, 2.682779104e-03f, 2.681199230e-03f, 2.679614805e-03f, 2.678025830e-03f, 2.676432310e-03f,
-2.674834248e-03f, 2.673231645e-03f, 2.671624506e-03f, 2.670012833e-03f, 2.668396630e-03f, 2.666775898e-03f, 2.665150643e-03f, 2.663520865e-03f, 2.661886569e-03f, 2.660247758e-03f,
-2.658604434e-03f, 2.656956600e-03f, 2.655304261e-03f, 2.653647418e-03f, 2.651986075e-03f, 2.650320236e-03f, 2.648649902e-03f, 2.646975078e-03f, 2.645295766e-03f, 2.643611969e-03f,
-2.641923692e-03f, 2.640230936e-03f, 2.638533705e-03f, 2.636832002e-03f, 2.635125830e-03f, 2.633415193e-03f, 2.631700094e-03f, 2.629980536e-03f, 2.628256521e-03f, 2.626528054e-03f,
-2.624795137e-03f, 2.623057775e-03f, 2.621315969e-03f, 2.619569723e-03f, 2.617819041e-03f, 2.616063925e-03f, 2.614304379e-03f, 2.612540407e-03f, 2.610772011e-03f, 2.608999195e-03f,
-2.607221962e-03f, 2.605440316e-03f, 2.603654259e-03f, 2.601863795e-03f, 2.600068928e-03f, 2.598269660e-03f, 2.596465995e-03f, 2.594657937e-03f, 2.592845488e-03f, 2.591028653e-03f,
-2.589207433e-03f, 2.587381834e-03f, 2.585551858e-03f, 2.583717508e-03f, 2.581878789e-03f, 2.580035702e-03f, 2.578188253e-03f, 2.576336444e-03f, 2.574480278e-03f, 2.572619760e-03f,
-2.570754892e-03f, 2.568885678e-03f, 2.567012121e-03f, 2.565134225e-03f, 2.563251994e-03f, 2.561365430e-03f, 2.559474538e-03f, 2.557579321e-03f, 2.555679782e-03f, 2.553775924e-03f,
-2.551867752e-03f, 2.549955269e-03f, 2.548038478e-03f, 2.546117384e-03f, 2.544191988e-03f, 2.542262296e-03f, 2.540328310e-03f, 2.538390034e-03f, 2.536447472e-03f, 2.534500628e-03f,
-2.532549504e-03f, 2.530594105e-03f, 2.528634433e-03f, 2.526670494e-03f, 2.524702289e-03f, 2.522729824e-03f, 2.520753101e-03f, 2.518772124e-03f, 2.516786898e-03f, 2.514797424e-03f,
-2.512803708e-03f, 2.510805752e-03f, 2.508803561e-03f, 2.506797139e-03f, 2.504786488e-03f, 2.502771612e-03f, 2.500752516e-03f, 2.498729203e-03f, 2.496701676e-03f, 2.494669940e-03f,
-2.492633997e-03f, 2.490593853e-03f, 2.488549510e-03f, 2.486500973e-03f, 2.484448245e-03f, 2.482391329e-03f, 2.480330230e-03f, 2.478264952e-03f, 2.476195498e-03f, 2.474121872e-03f,
-2.472044077e-03f, 2.469962118e-03f, 2.467875999e-03f, 2.465785723e-03f, 2.463691294e-03f, 2.461592715e-03f, 2.459489992e-03f, 2.457383127e-03f, 2.455272125e-03f, 2.453156988e-03f,
-2.451037722e-03f, 2.448914331e-03f, 2.446786817e-03f, 2.444655184e-03f, 2.442519438e-03f, 2.440379581e-03f, 2.438235618e-03f, 2.436087552e-03f, 2.433935388e-03f, 2.431779129e-03f,
-2.429618779e-03f, 2.427454342e-03f, 2.425285823e-03f, 2.423113224e-03f, 2.420936551e-03f, 2.418755807e-03f, 2.416570995e-03f, 2.414382121e-03f, 2.412189188e-03f, 2.409992200e-03f,
-2.407791161e-03f, 2.405586074e-03f, 2.403376945e-03f, 2.401163777e-03f, 2.398946574e-03f, 2.396725341e-03f, 2.394500080e-03f, 2.392270797e-03f, 2.390037495e-03f, 2.387800178e-03f,
-2.385558851e-03f, 2.383313518e-03f, 2.381064182e-03f, 2.378810848e-03f, 2.376553519e-03f, 2.374292201e-03f, 2.372026897e-03f, 2.369757610e-03f, 2.367484346e-03f, 2.365207109e-03f,
-2.362925902e-03f, 2.360640730e-03f, 2.358351597e-03f, 2.356058507e-03f, 2.353761464e-03f, 2.351460472e-03f, 2.349155536e-03f, 2.346846660e-03f, 2.344533847e-03f, 2.342217103e-03f,
-2.339896431e-03f, 2.337571836e-03f, 2.335243322e-03f, 2.332910892e-03f, 2.330574552e-03f, 2.328234305e-03f, 2.325890156e-03f, 2.323542109e-03f, 2.321190169e-03f, 2.318834339e-03f,
-2.316474623e-03f, 2.314111027e-03f, 2.311743554e-03f, 2.309372209e-03f, 2.306996996e-03f, 2.304617919e-03f, 2.302234982e-03f, 2.299848191e-03f, 2.297457548e-03f, 2.295063059e-03f,
-2.292664729e-03f, 2.290262560e-03f, 2.287856558e-03f, 2.285446727e-03f, 2.283033071e-03f, 2.280615595e-03f, 2.278194303e-03f, 2.275769199e-03f, 2.273340288e-03f, 2.270907574e-03f,
-2.268471062e-03f, 2.266030756e-03f, 2.263586661e-03f, 2.261138780e-03f, 2.258687119e-03f, 2.256231681e-03f, 2.253772471e-03f, 2.251309494e-03f, 2.248842754e-03f, 2.246372256e-03f,
-2.243898004e-03f, 2.241420002e-03f, 2.238938255e-03f, 2.236452767e-03f, 2.233963543e-03f, 2.231470588e-03f, 2.228973906e-03f, 2.226473501e-03f, 2.223969377e-03f, 2.221461541e-03f,
-2.218949995e-03f, 2.216434745e-03f, 2.213915795e-03f, 2.211393149e-03f, 2.208866813e-03f, 2.206336790e-03f, 2.203803086e-03f, 2.201265704e-03f, 2.198724650e-03f, 2.196179927e-03f,
-2.193631542e-03f, 2.191079497e-03f, 2.188523799e-03f, 2.185964450e-03f, 2.183401457e-03f, 2.180834823e-03f, 2.178264554e-03f, 2.175690653e-03f, 2.173113126e-03f, 2.170531977e-03f,
-2.167947210e-03f, 2.165358832e-03f, 2.162766845e-03f, 2.160171255e-03f, 2.157572066e-03f, 2.154969284e-03f, 2.152362913e-03f, 2.149752957e-03f, 2.147139421e-03f, 2.144522310e-03f,
-2.141901628e-03f, 2.139277381e-03f, 2.136649573e-03f, 2.134018209e-03f, 2.131383293e-03f, 2.128744831e-03f, 2.126102827e-03f, 2.123457285e-03f, 2.120808210e-03f, 2.118155608e-03f,
-2.115499483e-03f, 2.112839840e-03f, 2.110176684e-03f, 2.107510018e-03f, 2.104839849e-03f, 2.102166181e-03f, 2.099489019e-03f, 2.096808367e-03f, 2.094124230e-03f, 2.091436614e-03f,
-2.088745522e-03f, 2.086050961e-03f, 2.083352934e-03f, 2.080651447e-03f, 2.077946504e-03f, 2.075238110e-03f, 2.072526270e-03f, 2.069810990e-03f, 2.067092273e-03f, 2.064370125e-03f,
-2.061644550e-03f, 2.058915554e-03f, 2.056183141e-03f, 2.053447317e-03f, 2.050708085e-03f, 2.047965452e-03f, 2.045219422e-03f, 2.042470000e-03f, 2.039717190e-03f, 2.036960998e-03f,
-2.034201429e-03f, 2.031438488e-03f, 2.028672179e-03f, 2.025902508e-03f, 2.023129480e-03f, 2.020353099e-03f, 2.017573370e-03f, 2.014790299e-03f, 2.012003890e-03f, 2.009214148e-03f,
-2.006421080e-03f, 2.003624688e-03f, 2.000824979e-03f, 1.998021957e-03f, 1.995215628e-03f, 1.992405996e-03f, 1.989593067e-03f, 1.986776845e-03f, 1.983957336e-03f, 1.981134544e-03f,
-1.978308475e-03f, 1.975479134e-03f, 1.972646525e-03f, 1.969810655e-03f, 1.966971527e-03f, 1.964129147e-03f, 1.961283521e-03f, 1.958434652e-03f, 1.955582547e-03f, 1.952727210e-03f,
-1.949868646e-03f, 1.947006861e-03f, 1.944141860e-03f, 1.941273647e-03f, 1.938402229e-03f, 1.935527609e-03f, 1.932649794e-03f, 1.929768788e-03f, 1.926884596e-03f, 1.923997224e-03f,
-1.921106676e-03f, 1.918212959e-03f, 1.915316077e-03f, 1.912416035e-03f, 1.909512838e-03f, 1.906606492e-03f, 1.903697002e-03f, 1.900784372e-03f, 1.897868609e-03f, 1.894949718e-03f,
-1.892027702e-03f, 1.889102569e-03f, 1.886174323e-03f, 1.883242969e-03f, 1.880308512e-03f, 1.877370958e-03f, 1.874430312e-03f, 1.871486580e-03f, 1.868539765e-03f, 1.865589875e-03f,
-1.862636913e-03f, 1.859680886e-03f, 1.856721798e-03f, 1.853759654e-03f, 1.850794461e-03f, 1.847826223e-03f, 1.844854946e-03f, 1.841880635e-03f, 1.838903294e-03f, 1.835922931e-03f,
-1.832939549e-03f, 1.829953154e-03f, 1.826963751e-03f, 1.823971347e-03f, 1.820975945e-03f, 1.817977552e-03f, 1.814976172e-03f, 1.811971812e-03f, 1.808964476e-03f, 1.805954170e-03f,
-1.802940899e-03f, 1.799924669e-03f, 1.796905484e-03f, 1.793883351e-03f, 1.790858274e-03f, 1.787830259e-03f, 1.784799312e-03f, 1.781765437e-03f, 1.778728641e-03f, 1.775688928e-03f,
-1.772646304e-03f, 1.769600775e-03f, 1.766552345e-03f, 1.763501021e-03f, 1.760446807e-03f, 1.757389709e-03f, 1.754329733e-03f, 1.751266884e-03f, 1.748201167e-03f, 1.745132588e-03f,
-1.742061152e-03f, 1.738986865e-03f, 1.735909732e-03f, 1.732829759e-03f, 1.729746951e-03f, 1.726661314e-03f, 1.723572852e-03f, 1.720481572e-03f, 1.717387480e-03f, 1.714290580e-03f,
-1.711190878e-03f, 1.708088379e-03f, 1.704983090e-03f, 1.701875015e-03f, 1.698764160e-03f, 1.695650531e-03f, 1.692534133e-03f, 1.689414972e-03f, 1.686293053e-03f, 1.683168382e-03f,
-1.680040964e-03f, 1.676910804e-03f, 1.673777910e-03f, 1.670642285e-03f, 1.667503935e-03f, 1.664362867e-03f, 1.661219085e-03f, 1.658072596e-03f, 1.654923404e-03f, 1.651771516e-03f,
-1.648616937e-03f, 1.645459672e-03f, 1.642299727e-03f, 1.639137108e-03f, 1.635971821e-03f, 1.632803870e-03f, 1.629633263e-03f, 1.626460003e-03f, 1.623284097e-03f, 1.620105550e-03f,
-1.616924369e-03f, 1.613740558e-03f, 1.610554124e-03f, 1.607365072e-03f, 1.604173407e-03f, 1.600979135e-03f, 1.597782263e-03f, 1.594582795e-03f, 1.591380737e-03f, 1.588176096e-03f,
-1.584968876e-03f, 1.581759083e-03f, 1.578546723e-03f, 1.575331802e-03f, 1.572114325e-03f, 1.568894299e-03f, 1.565671728e-03f, 1.562446618e-03f, 1.559218976e-03f, 1.555988806e-03f,
-1.552756115e-03f, 1.549520908e-03f, 1.546283192e-03f, 1.543042971e-03f, 1.539800251e-03f, 1.536555039e-03f, 1.533307339e-03f, 1.530057159e-03f, 1.526804503e-03f, 1.523549376e-03f,
-1.520291786e-03f, 1.517031738e-03f, 1.513769237e-03f, 1.510504289e-03f, 1.507236900e-03f, 1.503967076e-03f, 1.500694822e-03f, 1.497420145e-03f, 1.494143050e-03f, 1.490863543e-03f,
-1.487581629e-03f, 1.484297315e-03f, 1.481010606e-03f, 1.477721509e-03f, 1.474430028e-03f, 1.471136170e-03f, 1.467839940e-03f, 1.464541345e-03f, 1.461240390e-03f, 1.457937081e-03f,
-1.454631423e-03f, 1.451323424e-03f, 1.448013088e-03f, 1.444700421e-03f, 1.441385429e-03f, 1.438068119e-03f, 1.434748495e-03f, 1.431426564e-03f, 1.428102332e-03f, 1.424775804e-03f,
-1.421446987e-03f, 1.418115886e-03f, 1.414782506e-03f, 1.411446855e-03f, 1.408108938e-03f, 1.404768760e-03f, 1.401426328e-03f, 1.398081648e-03f, 1.394734725e-03f, 1.391385565e-03f,
-1.388034175e-03f, 1.384680559e-03f, 1.381324725e-03f, 1.377966678e-03f, 1.374606423e-03f, 1.371243968e-03f, 1.367879317e-03f, 1.364512477e-03f, 1.361143453e-03f, 1.357772252e-03f,
-1.354398879e-03f, 1.351023341e-03f, 1.347645643e-03f, 1.344265791e-03f, 1.340883792e-03f, 1.337499651e-03f, 1.334113374e-03f, 1.330724967e-03f, 1.327334436e-03f, 1.323941788e-03f,
-1.320547027e-03f, 1.317150161e-03f, 1.313751194e-03f, 1.310350133e-03f, 1.306946985e-03f, 1.303541754e-03f, 1.300134447e-03f, 1.296725071e-03f, 1.293313630e-03f, 1.289900131e-03f,
-1.286484580e-03f, 1.283066983e-03f, 1.279647346e-03f, 1.276225676e-03f, 1.272801977e-03f, 1.269376256e-03f, 1.265948519e-03f, 1.262518772e-03f, 1.259087022e-03f, 1.255653274e-03f,
-1.252217533e-03f, 1.248779808e-03f, 1.245340102e-03f, 1.241898423e-03f, 1.238454776e-03f, 1.235009167e-03f, 1.231561603e-03f, 1.228112090e-03f, 1.224660633e-03f, 1.221207239e-03f,
-1.217751914e-03f, 1.214294663e-03f, 1.210835494e-03f, 1.207374411e-03f, 1.203911421e-03f, 1.200446531e-03f, 1.196979746e-03f, 1.193511072e-03f, 1.190040516e-03f, 1.186568083e-03f,
-1.183093779e-03f, 1.179617612e-03f, 1.176139586e-03f, 1.172659708e-03f, 1.169177984e-03f, 1.165694421e-03f, 1.162209023e-03f, 1.158721798e-03f, 1.155232752e-03f, 1.151741890e-03f,
-1.148249219e-03f, 1.144754745e-03f, 1.141258474e-03f, 1.137760412e-03f, 1.134260565e-03f, 1.130758940e-03f, 1.127255542e-03f, 1.123750378e-03f, 1.120243454e-03f, 1.116734776e-03f,
-1.113224350e-03f, 1.109712182e-03f, 1.106198279e-03f, 1.102682647e-03f, 1.099165291e-03f, 1.095646219e-03f, 1.092125436e-03f, 1.088602948e-03f, 1.085078761e-03f, 1.081552882e-03f,
-1.078025318e-03f, 1.074496073e-03f, 1.070965154e-03f, 1.067432568e-03f, 1.063898321e-03f, 1.060362418e-03f, 1.056824866e-03f, 1.053285672e-03f, 1.049744841e-03f, 1.046202380e-03f,
-1.042658294e-03f, 1.039112591e-03f, 1.035565276e-03f, 1.032016355e-03f, 1.028465835e-03f, 1.024913722e-03f, 1.021360022e-03f, 1.017804742e-03f, 1.014247887e-03f, 1.010689464e-03f,
-1.007129479e-03f, 1.003567938e-03f, 1.000004848e-03f, 9.964402140e-04f, 9.928740435e-04f, 9.893063422e-04f, 9.857371164e-04f, 9.821663723e-04f, 9.785941163e-04f, 9.750203544e-04f,
-9.714450931e-04f, 9.678683385e-04f, 9.642900969e-04f, 9.607103746e-04f, 9.571291779e-04f, 9.535465129e-04f, 9.499623860e-04f, 9.463768034e-04f, 9.427897715e-04f, 9.392012964e-04f,
-9.356113845e-04f, 9.320200421e-04f, 9.284272753e-04f, 9.248330906e-04f, 9.212374942e-04f, 9.176404923e-04f, 9.140420914e-04f, 9.104422976e-04f, 9.068411172e-04f, 9.032385566e-04f,
-8.996346220e-04f, 8.960293198e-04f, 8.924226563e-04f, 8.888146377e-04f, 8.852052703e-04f, 8.815945606e-04f, 8.779825147e-04f, 8.743691390e-04f, 8.707544398e-04f, 8.671384235e-04f,
-8.635210962e-04f, 8.599024645e-04f, 8.562825345e-04f, 8.526613126e-04f, 8.490388052e-04f, 8.454150185e-04f, 8.417899589e-04f, 8.381636328e-04f, 8.345360464e-04f, 8.309072061e-04f,
-8.272771182e-04f, 8.236457890e-04f, 8.200132250e-04f, 8.163794324e-04f, 8.127444176e-04f, 8.091081870e-04f, 8.054707468e-04f, 8.018321035e-04f, 7.981922634e-04f, 7.945512328e-04f,
-7.909090181e-04f, 7.872656256e-04f, 7.836210618e-04f, 7.799753329e-04f, 7.763284453e-04f, 7.726804055e-04f, 7.690312197e-04f, 7.653808943e-04f, 7.617294357e-04f, 7.580768503e-04f,
-7.544231444e-04f, 7.507683244e-04f, 7.471123967e-04f, 7.434553676e-04f, 7.397972436e-04f, 7.361380310e-04f, 7.324777362e-04f, 7.288163656e-04f, 7.251539255e-04f, 7.214904224e-04f,
-7.178258626e-04f, 7.141602525e-04f, 7.104935986e-04f, 7.068259071e-04f, 7.031571846e-04f, 6.994874373e-04f, 6.958166717e-04f, 6.921448942e-04f, 6.884721112e-04f, 6.847983291e-04f,
-6.811235542e-04f, 6.774477930e-04f, 6.737710519e-04f, 6.700933374e-04f, 6.664146557e-04f, 6.627350133e-04f, 6.590544166e-04f, 6.553728721e-04f, 6.516903861e-04f, 6.480069651e-04f,
-6.443226154e-04f, 6.406373435e-04f, 6.369511559e-04f, 6.332640588e-04f, 6.295760588e-04f, 6.258871623e-04f, 6.221973756e-04f, 6.185067052e-04f, 6.148151576e-04f, 6.111227392e-04f,
-6.074294563e-04f, 6.037353154e-04f, 6.000403230e-04f, 5.963444854e-04f, 5.926478092e-04f, 5.889503007e-04f, 5.852519663e-04f, 5.815528126e-04f, 5.778528459e-04f, 5.741520727e-04f,
-5.704504994e-04f, 5.667481325e-04f, 5.630449783e-04f, 5.593410434e-04f, 5.556363342e-04f, 5.519308571e-04f, 5.482246185e-04f, 5.445176250e-04f, 5.408098829e-04f, 5.371013987e-04f,
-5.333921789e-04f, 5.296822299e-04f, 5.259715581e-04f, 5.222601700e-04f, 5.185480721e-04f, 5.148352708e-04f, 5.111217726e-04f, 5.074075838e-04f, 5.036927110e-04f, 4.999771607e-04f,
-4.962609392e-04f, 4.925440531e-04f, 4.888265088e-04f, 4.851083127e-04f, 4.813894714e-04f, 4.776699912e-04f, 4.739498787e-04f, 4.702291402e-04f, 4.665077824e-04f, 4.627858115e-04f,
-4.590632342e-04f, 4.553400568e-04f, 4.516162858e-04f, 4.478919278e-04f, 4.441669891e-04f, 4.404414762e-04f, 4.367153956e-04f, 4.329887538e-04f, 4.292615572e-04f, 4.255338123e-04f,
-4.218055256e-04f, 4.180767035e-04f, 4.143473526e-04f, 4.106174793e-04f, 4.068870900e-04f, 4.031561913e-04f, 3.994247895e-04f, 3.956928913e-04f, 3.919605031e-04f, 3.882276313e-04f,
-3.844942824e-04f, 3.807604629e-04f, 3.770261793e-04f, 3.732914380e-04f, 3.695562456e-04f, 3.658206084e-04f, 3.620845331e-04f, 3.583480260e-04f, 3.546110937e-04f, 3.508737427e-04f,
-3.471359793e-04f, 3.433978101e-04f, 3.396592416e-04f, 3.359202803e-04f, 3.321809326e-04f, 3.284412050e-04f, 3.247011041e-04f, 3.209606362e-04f, 3.172198079e-04f, 3.134786256e-04f,
-3.097370959e-04f, 3.059952253e-04f, 3.022530201e-04f, 2.985104869e-04f, 2.947676323e-04f, 2.910244625e-04f, 2.872809843e-04f, 2.835372040e-04f, 2.797931281e-04f, 2.760487631e-04f,
-2.723041155e-04f, 2.685591918e-04f, 2.648139985e-04f, 2.610685420e-04f, 2.573228289e-04f, 2.535768656e-04f, 2.498306586e-04f, 2.460842145e-04f, 2.423375396e-04f, 2.385906405e-04f,
-2.348435237e-04f, 2.310961957e-04f, 2.273486628e-04f, 2.236009318e-04f, 2.198530089e-04f, 2.161049008e-04f, 2.123566138e-04f, 2.086081545e-04f, 2.048595294e-04f, 2.011107450e-04f,
-1.973618077e-04f, 1.936127241e-04f, 1.898635005e-04f, 1.861141436e-04f, 1.823646597e-04f, 1.786150555e-04f, 1.748653373e-04f, 1.711155116e-04f, 1.673655851e-04f, 1.636155640e-04f,
-1.598654549e-04f, 1.561152644e-04f, 1.523649988e-04f, 1.486146647e-04f, 1.448642686e-04f, 1.411138169e-04f, 1.373633161e-04f, 1.336127727e-04f, 1.298621933e-04f, 1.261115842e-04f,
-1.223609519e-04f, 1.186103031e-04f, 1.148596440e-04f, 1.111089813e-04f, 1.073583213e-04f, 1.036076707e-04f, 9.985703578e-05f, 9.610642312e-05f, 9.235583918e-05f, 8.860529044e-05f,
-8.485478338e-05f, 8.110432449e-05f, 7.735392025e-05f, 7.360357712e-05f, 6.985330159e-05f, 6.610310014e-05f, 6.235297925e-05f, 5.860294540e-05f, 5.485300505e-05f, 5.110316469e-05f,
-4.735343079e-05f, 4.360380983e-05f, 3.985430828e-05f, 3.610493262e-05f, 3.235568931e-05f, 2.860658484e-05f, 2.485762568e-05f, 2.110881829e-05f, 1.736016915e-05f, 1.361168474e-05f,
-9.863371507e-06f, 6.115235937e-06f, 2.367284494e-06f, -1.380476354e-06f, -5.128040138e-06f, -8.875400392e-06f, -1.262255065e-05f, -1.636948445e-05f, -2.011619532e-05f, -2.386267680e-05f,
--2.760892243e-05f, -3.135492574e-05f, -3.510068027e-05f, -3.884617957e-05f, -4.259141716e-05f, -4.633638660e-05f, -5.008108143e-05f, -5.382549517e-05f, -5.756962139e-05f, -6.131345362e-05f,
--6.505698541e-05f, -6.880021030e-05f, -7.254312183e-05f, -7.628571357e-05f, -8.002797905e-05f, -8.376991182e-05f, -8.751150544e-05f, -9.125275345e-05f, -9.499364941e-05f, -9.873418687e-05f,
--1.024743594e-04f, -1.062141605e-04f, -1.099535838e-04f, -1.136926228e-04f, -1.174312711e-04f, -1.211695222e-04f, -1.249073697e-04f, -1.286448072e-04f, -1.323818281e-04f, -1.361184262e-04f,
--1.398545949e-04f, -1.435903279e-04f, -1.473256186e-04f, -1.510604606e-04f, -1.547948476e-04f, -1.585287730e-04f, -1.622622305e-04f, -1.659952136e-04f, -1.697277159e-04f, -1.734597310e-04f,
--1.771912524e-04f, -1.809222738e-04f, -1.846527886e-04f, -1.883827906e-04f, -1.921122732e-04f, -1.958412300e-04f, -1.995696546e-04f, -2.032975407e-04f, -2.070248817e-04f, -2.107516714e-04f,
--2.144779031e-04f, -2.182035707e-04f, -2.219286676e-04f, -2.256531874e-04f, -2.293771237e-04f, -2.331004702e-04f, -2.368232204e-04f, -2.405453679e-04f, -2.442669063e-04f, -2.479878292e-04f,
--2.517081303e-04f, -2.554278030e-04f, -2.591468411e-04f, -2.628652381e-04f, -2.665829876e-04f, -2.703000833e-04f, -2.740165187e-04f, -2.777322875e-04f, -2.814473832e-04f, -2.851617995e-04f,
--2.888755301e-04f, -2.925885684e-04f, -2.963009082e-04f, -3.000125431e-04f, -3.037234666e-04f, -3.074336725e-04f, -3.111431542e-04f, -3.148519055e-04f, -3.185599200e-04f, -3.222671914e-04f,
--3.259737131e-04f, -3.296794789e-04f, -3.333844825e-04f, -3.370887174e-04f, -3.407921772e-04f, -3.444948557e-04f, -3.481967465e-04f, -3.518978432e-04f, -3.555981394e-04f, -3.592976288e-04f,
--3.629963051e-04f, -3.666941619e-04f, -3.703911928e-04f, -3.740873915e-04f, -3.777827517e-04f, -3.814772670e-04f, -3.851709310e-04f, -3.888637375e-04f, -3.925556801e-04f, -3.962467524e-04f,
--3.999369482e-04f, -4.036262610e-04f, -4.073146847e-04f, -4.110022127e-04f, -4.146888389e-04f, -4.183745568e-04f, -4.220593602e-04f, -4.257432427e-04f, -4.294261981e-04f, -4.331082199e-04f,
--4.367893020e-04f, -4.404694379e-04f, -4.441486214e-04f, -4.478268461e-04f, -4.515041057e-04f, -4.551803941e-04f, -4.588557047e-04f, -4.625300314e-04f, -4.662033678e-04f, -4.698757076e-04f,
--4.735470446e-04f, -4.772173725e-04f, -4.808866849e-04f, -4.845549755e-04f, -4.882222382e-04f, -4.918884665e-04f, -4.955536543e-04f, -4.992177952e-04f, -5.028808829e-04f, -5.065429113e-04f,
--5.102038739e-04f, -5.138637646e-04f, -5.175225770e-04f, -5.211803049e-04f, -5.248369421e-04f, -5.284924822e-04f, -5.321469191e-04f, -5.358002464e-04f, -5.394524578e-04f, -5.431035472e-04f,
--5.467535083e-04f, -5.504023349e-04f, -5.540500206e-04f, -5.576965592e-04f, -5.613419446e-04f, -5.649861704e-04f, -5.686292305e-04f, -5.722711185e-04f, -5.759118283e-04f, -5.795513536e-04f,
--5.831896882e-04f, -5.868268258e-04f, -5.904627603e-04f, -5.940974855e-04f, -5.977309950e-04f, -6.013632827e-04f, -6.049943424e-04f, -6.086241678e-04f, -6.122527528e-04f, -6.158800911e-04f,
--6.195061766e-04f, -6.231310030e-04f, -6.267545641e-04f, -6.303768538e-04f, -6.339978658e-04f, -6.376175940e-04f, -6.412360321e-04f, -6.448531740e-04f, -6.484690135e-04f, -6.520835445e-04f,
--6.556967606e-04f, -6.593086558e-04f, -6.629192239e-04f, -6.665284587e-04f, -6.701363540e-04f, -6.737429038e-04f, -6.773481017e-04f, -6.809519417e-04f, -6.845544175e-04f, -6.881555231e-04f,
--6.917552523e-04f, -6.953535990e-04f, -6.989505569e-04f, -7.025461199e-04f, -7.061402820e-04f, -7.097330369e-04f, -7.133243786e-04f, -7.169143008e-04f, -7.205027975e-04f, -7.240898626e-04f,
--7.276754898e-04f, -7.312596731e-04f, -7.348424064e-04f, -7.384236836e-04f, -7.420034985e-04f, -7.455818450e-04f, -7.491587170e-04f, -7.527341085e-04f, -7.563080132e-04f, -7.598804252e-04f,
--7.634513383e-04f, -7.670207463e-04f, -7.705886434e-04f, -7.741550232e-04f, -7.777198798e-04f, -7.812832071e-04f, -7.848449990e-04f, -7.884052494e-04f, -7.919639522e-04f, -7.955211014e-04f,
--7.990766910e-04f, -8.026307147e-04f, -8.061831667e-04f, -8.097340408e-04f, -8.132833309e-04f, -8.168310310e-04f, -8.203771352e-04f, -8.239216372e-04f, -8.274645311e-04f, -8.310058109e-04f,
--8.345454705e-04f, -8.380835038e-04f, -8.416199049e-04f, -8.451546677e-04f, -8.486877861e-04f, -8.522192543e-04f, -8.557490661e-04f, -8.592772155e-04f, -8.628036965e-04f, -8.663285032e-04f,
--8.698516295e-04f, -8.733730694e-04f, -8.768928168e-04f, -8.804108659e-04f, -8.839272107e-04f, -8.874418450e-04f, -8.909547630e-04f, -8.944659587e-04f, -8.979754261e-04f, -9.014831591e-04f,
--9.049891519e-04f, -9.084933985e-04f, -9.119958929e-04f, -9.154966291e-04f, -9.189956012e-04f, -9.224928033e-04f, -9.259882293e-04f, -9.294818733e-04f, -9.329737294e-04f, -9.364637917e-04f,
--9.399520541e-04f, -9.434385108e-04f, -9.469231559e-04f, -9.504059833e-04f, -9.538869872e-04f, -9.573661617e-04f, -9.608435008e-04f, -9.643189987e-04f, -9.677926493e-04f, -9.712644469e-04f,
--9.747343855e-04f, -9.782024591e-04f, -9.816686620e-04f, -9.851329882e-04f, -9.885954318e-04f, -9.920559869e-04f, -9.955146477e-04f, -9.989714083e-04f, -1.002426263e-03f, -1.005879205e-03f,
--1.009330230e-03f, -1.012779331e-03f, -1.016226502e-03f, -1.019671738e-03f, -1.023115033e-03f, -1.026556380e-03f, -1.029995775e-03f, -1.033433211e-03f, -1.036868682e-03f, -1.040302182e-03f,
--1.043733706e-03f, -1.047163248e-03f, -1.050590803e-03f, -1.054016363e-03f, -1.057439924e-03f, -1.060861479e-03f, -1.064281023e-03f, -1.067698550e-03f, -1.071114054e-03f, -1.074527529e-03f,
--1.077938970e-03f, -1.081348371e-03f, -1.084755726e-03f, -1.088161029e-03f, -1.091564274e-03f, -1.094965457e-03f, -1.098364570e-03f, -1.101761608e-03f, -1.105156565e-03f, -1.108549436e-03f,
--1.111940215e-03f, -1.115328896e-03f, -1.118715473e-03f, -1.122099941e-03f, -1.125482293e-03f, -1.128862525e-03f, -1.132240630e-03f, -1.135616603e-03f, -1.138990438e-03f, -1.142362129e-03f,
--1.145731670e-03f, -1.149099057e-03f, -1.152464282e-03f, -1.155827341e-03f, -1.159188227e-03f, -1.162546935e-03f, -1.165903460e-03f, -1.169257795e-03f, -1.172609935e-03f, -1.175959874e-03f,
--1.179307607e-03f, -1.182653128e-03f, -1.185996431e-03f, -1.189337511e-03f, -1.192676361e-03f, -1.196012977e-03f, -1.199347352e-03f, -1.202679481e-03f, -1.206009359e-03f, -1.209336979e-03f,
--1.212662336e-03f, -1.215985425e-03f, -1.219306239e-03f, -1.222624774e-03f, -1.225941023e-03f, -1.229254981e-03f, -1.232566642e-03f, -1.235876001e-03f, -1.239183052e-03f, -1.242487790e-03f,
--1.245790209e-03f, -1.249090303e-03f, -1.252388066e-03f, -1.255683494e-03f, -1.258976581e-03f, -1.262267320e-03f, -1.265555707e-03f, -1.268841736e-03f, -1.272125401e-03f, -1.275406697e-03f,
--1.278685618e-03f, -1.281962159e-03f, -1.285236314e-03f, -1.288508078e-03f, -1.291777445e-03f, -1.295044410e-03f, -1.298308966e-03f, -1.301571109e-03f, -1.304830833e-03f, -1.308088133e-03f,
--1.311343002e-03f, -1.314595436e-03f, -1.317845429e-03f, -1.321092976e-03f, -1.324338071e-03f, -1.327580708e-03f, -1.330820882e-03f, -1.334058588e-03f, -1.337293820e-03f, -1.340526573e-03f,
--1.343756841e-03f, -1.346984619e-03f, -1.350209901e-03f, -1.353432682e-03f, -1.356652956e-03f, -1.359870719e-03f, -1.363085964e-03f, -1.366298686e-03f, -1.369508880e-03f, -1.372716540e-03f,
--1.375921661e-03f, -1.379124238e-03f, -1.382324264e-03f, -1.385521736e-03f, -1.388716646e-03f, -1.391908991e-03f, -1.395098764e-03f, -1.398285960e-03f, -1.401470574e-03f, -1.404652600e-03f,
--1.407832034e-03f, -1.411008869e-03f, -1.414183100e-03f, -1.417354722e-03f, -1.420523730e-03f, -1.423690118e-03f, -1.426853882e-03f, -1.430015014e-03f, -1.433173511e-03f, -1.436329367e-03f,
--1.439482577e-03f, -1.442633135e-03f, -1.445781036e-03f, -1.448926275e-03f, -1.452068846e-03f, -1.455208744e-03f, -1.458345964e-03f, -1.461480501e-03f, -1.464612349e-03f, -1.467741503e-03f,
--1.470867958e-03f, -1.473991708e-03f, -1.477112749e-03f, -1.480231074e-03f, -1.483346679e-03f, -1.486459559e-03f, -1.489569708e-03f, -1.492677121e-03f, -1.495781792e-03f, -1.498883717e-03f,
--1.501982891e-03f, -1.505079308e-03f, -1.508172962e-03f, -1.511263849e-03f, -1.514351964e-03f, -1.517437301e-03f, -1.520519856e-03f, -1.523599622e-03f, -1.526676595e-03f, -1.529750769e-03f,
--1.532822140e-03f, -1.535890703e-03f, -1.538956451e-03f, -1.542019380e-03f, -1.545079485e-03f, -1.548136761e-03f, -1.551191203e-03f, -1.554242804e-03f, -1.557291561e-03f, -1.560337469e-03f,
--1.563380521e-03f, -1.566420713e-03f, -1.569458040e-03f, -1.572492497e-03f, -1.575524078e-03f, -1.578552779e-03f, -1.581578594e-03f, -1.584601519e-03f, -1.587621548e-03f, -1.590638676e-03f,
--1.593652898e-03f, -1.596664210e-03f, -1.599672605e-03f, -1.602678080e-03f, -1.605680628e-03f, -1.608680245e-03f, -1.611676927e-03f, -1.614670667e-03f, -1.617661461e-03f, -1.620649304e-03f,
--1.623634190e-03f, -1.626616116e-03f, -1.629595075e-03f, -1.632571063e-03f, -1.635544075e-03f, -1.638514106e-03f, -1.641481151e-03f, -1.644445204e-03f, -1.647406262e-03f, -1.650364318e-03f,
--1.653319369e-03f, -1.656271408e-03f, -1.659220432e-03f, -1.662166434e-03f, -1.665109411e-03f, -1.668049358e-03f, -1.670986269e-03f, -1.673920139e-03f, -1.676850964e-03f, -1.679778738e-03f,
--1.682703457e-03f, -1.685625116e-03f, -1.688543710e-03f, -1.691459234e-03f, -1.694371683e-03f, -1.697281053e-03f, -1.700187338e-03f, -1.703090534e-03f, -1.705990635e-03f, -1.708887637e-03f,
--1.711781536e-03f, -1.714672325e-03f, -1.717560001e-03f, -1.720444558e-03f, -1.723325993e-03f, -1.726204299e-03f, -1.729079472e-03f, -1.731951507e-03f, -1.734820400e-03f, -1.737686145e-03f,
--1.740548739e-03f, -1.743408175e-03f, -1.746264450e-03f, -1.749117559e-03f, -1.751967496e-03f, -1.754814257e-03f, -1.757657838e-03f, -1.760498233e-03f, -1.763335437e-03f, -1.766169447e-03f,
--1.769000258e-03f, -1.771827863e-03f, -1.774652260e-03f, -1.777473443e-03f, -1.780291407e-03f, -1.783106148e-03f, -1.785917661e-03f, -1.788725942e-03f, -1.791530985e-03f, -1.794332786e-03f,
--1.797131340e-03f, -1.799926643e-03f, -1.802718690e-03f, -1.805507476e-03f, -1.808292997e-03f, -1.811075249e-03f, -1.813854225e-03f, -1.816629922e-03f, -1.819402336e-03f, -1.822171460e-03f,
--1.824937292e-03f, -1.827699826e-03f, -1.830459058e-03f, -1.833214983e-03f, -1.835967596e-03f, -1.838716893e-03f, -1.841462870e-03f, -1.844205521e-03f, -1.846944843e-03f, -1.849680830e-03f,
--1.852413478e-03f, -1.855142783e-03f, -1.857868740e-03f, -1.860591344e-03f, -1.863310591e-03f, -1.866026477e-03f, -1.868738996e-03f, -1.871448145e-03f, -1.874153919e-03f, -1.876856313e-03f,
--1.879555323e-03f, -1.882250944e-03f, -1.884943172e-03f, -1.887632003e-03f, -1.890317431e-03f, -1.892999453e-03f, -1.895678064e-03f, -1.898353260e-03f, -1.901025035e-03f, -1.903693387e-03f,
--1.906358309e-03f, -1.909019799e-03f, -1.911677851e-03f, -1.914332460e-03f, -1.916983624e-03f, -1.919631336e-03f, -1.922275594e-03f, -1.924916391e-03f, -1.927553725e-03f, -1.930187591e-03f,
--1.932817983e-03f, -1.935444899e-03f, -1.938068333e-03f, -1.940688281e-03f, -1.943304739e-03f, -1.945917702e-03f, -1.948527167e-03f, -1.951133129e-03f, -1.953735583e-03f, -1.956334525e-03f,
--1.958929951e-03f, -1.961521856e-03f, -1.964110237e-03f, -1.966695089e-03f, -1.969276408e-03f, -1.971854189e-03f, -1.974428428e-03f, -1.976999121e-03f, -1.979566264e-03f, -1.982129852e-03f,
--1.984689881e-03f, -1.987246347e-03f, -1.989799246e-03f, -1.992348573e-03f, -1.994894325e-03f, -1.997436496e-03f, -1.999975084e-03f, -2.002510083e-03f, -2.005041489e-03f, -2.007569298e-03f,
--2.010093507e-03f, -2.012614110e-03f, -2.015131104e-03f, -2.017644485e-03f, -2.020154248e-03f, -2.022660389e-03f, -2.025162904e-03f, -2.027661789e-03f, -2.030157040e-03f, -2.032648653e-03f,
--2.035136623e-03f, -2.037620947e-03f, -2.040101620e-03f, -2.042578638e-03f, -2.045051998e-03f, -2.047521694e-03f, -2.049987724e-03f, -2.052450082e-03f, -2.054908766e-03f, -2.057363770e-03f,
--2.059815091e-03f, -2.062262724e-03f, -2.064706667e-03f, -2.067146914e-03f, -2.069583461e-03f, -2.072016305e-03f, -2.074445442e-03f, -2.076870868e-03f, -2.079292577e-03f, -2.081710568e-03f,
--2.084124835e-03f, -2.086535375e-03f, -2.088942183e-03f, -2.091345256e-03f, -2.093744590e-03f, -2.096140181e-03f, -2.098532024e-03f, -2.100920117e-03f, -2.103304454e-03f, -2.105685032e-03f,
--2.108061848e-03f, -2.110434896e-03f, -2.112804174e-03f, -2.115169678e-03f, -2.117531403e-03f, -2.119889345e-03f, -2.122243501e-03f, -2.124593868e-03f, -2.126940440e-03f, -2.129283214e-03f,
--2.131622187e-03f, -2.133957354e-03f, -2.136288711e-03f, -2.138616256e-03f, -2.140939983e-03f, -2.143259890e-03f, -2.145575972e-03f, -2.147888225e-03f, -2.150196646e-03f, -2.152501231e-03f,
--2.154801976e-03f, -2.157098878e-03f, -2.159391932e-03f, -2.161681135e-03f, -2.163966484e-03f, -2.166247973e-03f, -2.168525600e-03f, -2.170799361e-03f, -2.173069252e-03f, -2.175335270e-03f,
--2.177597410e-03f, -2.179855670e-03f, -2.182110044e-03f, -2.184360530e-03f, -2.186607124e-03f, -2.188849823e-03f, -2.191088621e-03f, -2.193323517e-03f, -2.195554506e-03f, -2.197781585e-03f,
--2.200004749e-03f, -2.202223996e-03f, -2.204439322e-03f, -2.206650722e-03f, -2.208858194e-03f, -2.211061734e-03f, -2.213261338e-03f, -2.215457002e-03f, -2.217648724e-03f, -2.219836499e-03f,
--2.222020324e-03f, -2.224200195e-03f, -2.226376109e-03f, -2.228548062e-03f, -2.230716051e-03f, -2.232880071e-03f, -2.235040121e-03f, -2.237196195e-03f, -2.239348291e-03f, -2.241496405e-03f,
--2.243640533e-03f, -2.245780673e-03f, -2.247916820e-03f, -2.250048970e-03f, -2.252177122e-03f, -2.254301270e-03f, -2.256421413e-03f, -2.258537545e-03f, -2.260649664e-03f, -2.262757766e-03f,
--2.264861848e-03f, -2.266961907e-03f, -2.269057938e-03f, -2.271149939e-03f, -2.273237906e-03f, -2.275321836e-03f, -2.277401726e-03f, -2.279477571e-03f, -2.281549369e-03f, -2.283617116e-03f,
--2.285680809e-03f, -2.287740445e-03f, -2.289796019e-03f, -2.291847530e-03f, -2.293894973e-03f, -2.295938345e-03f, -2.297977643e-03f, -2.300012864e-03f, -2.302044004e-03f, -2.304071060e-03f,
--2.306094028e-03f, -2.308112906e-03f, -2.310127690e-03f, -2.312138377e-03f, -2.314144963e-03f, -2.316147445e-03f, -2.318145821e-03f, -2.320140087e-03f, -2.322130239e-03f, -2.324116274e-03f,
--2.326098189e-03f, -2.328075982e-03f, -2.330049648e-03f, -2.332019185e-03f, -2.333984589e-03f, -2.335945857e-03f, -2.337902986e-03f, -2.339855973e-03f, -2.341804815e-03f, -2.343749508e-03f,
--2.345690049e-03f, -2.347626436e-03f, -2.349558665e-03f, -2.351486733e-03f, -2.353410636e-03f, -2.355330373e-03f, -2.357245939e-03f, -2.359157331e-03f, -2.361064547e-03f, -2.362967583e-03f,
--2.364866437e-03f, -2.366761105e-03f, -2.368651584e-03f, -2.370537872e-03f, -2.372419964e-03f, -2.374297858e-03f, -2.376171552e-03f, -2.378041041e-03f, -2.379906324e-03f, -2.381767396e-03f,
--2.383624256e-03f, -2.385476899e-03f, -2.387325324e-03f, -2.389169527e-03f, -2.391009504e-03f, -2.392845254e-03f, -2.394676773e-03f, -2.396504058e-03f, -2.398327107e-03f, -2.400145916e-03f,
--2.401960482e-03f, -2.403770803e-03f, -2.405576875e-03f, -2.407378697e-03f, -2.409176264e-03f, -2.410969574e-03f, -2.412758624e-03f, -2.414543411e-03f, -2.416323932e-03f, -2.418100185e-03f,
--2.419872167e-03f, -2.421639874e-03f, -2.423403305e-03f, -2.425162455e-03f, -2.426917323e-03f, -2.428667905e-03f, -2.430414199e-03f, -2.432156202e-03f, -2.433893911e-03f, -2.435627324e-03f,
--2.437356437e-03f, -2.439081247e-03f, -2.440801753e-03f, -2.442517951e-03f, -2.444229839e-03f, -2.445937413e-03f, -2.447640672e-03f, -2.449339612e-03f, -2.451034230e-03f, -2.452724525e-03f,
--2.454410493e-03f, -2.456092131e-03f, -2.457769437e-03f, -2.459442409e-03f, -2.461111043e-03f, -2.462775337e-03f, -2.464435288e-03f, -2.466090893e-03f, -2.467742151e-03f, -2.469389058e-03f,
--2.471031612e-03f, -2.472669810e-03f, -2.474303649e-03f, -2.475933128e-03f, -2.477558242e-03f, -2.479178991e-03f, -2.480795370e-03f, -2.482407378e-03f, -2.484015012e-03f, -2.485618270e-03f,
--2.487217148e-03f, -2.488811645e-03f, -2.490401758e-03f, -2.491987484e-03f, -2.493568821e-03f, -2.495145767e-03f, -2.496718318e-03f, -2.498286473e-03f, -2.499850228e-03f, -2.501409582e-03f,
--2.502964532e-03f, -2.504515075e-03f, -2.506061209e-03f, -2.507602932e-03f, -2.509140241e-03f, -2.510673134e-03f, -2.512201608e-03f, -2.513725661e-03f, -2.515245291e-03f, -2.516760494e-03f,
--2.518271270e-03f, -2.519777614e-03f, -2.521279526e-03f, -2.522777002e-03f, -2.524270040e-03f, -2.525758638e-03f, -2.527242794e-03f, -2.528722505e-03f, -2.530197769e-03f, -2.531668583e-03f,
--2.533134946e-03f, -2.534596855e-03f, -2.536054307e-03f, -2.537507301e-03f, -2.538955833e-03f, -2.540399903e-03f, -2.541839507e-03f, -2.543274643e-03f, -2.544705310e-03f, -2.546131504e-03f,
--2.547553224e-03f, -2.548970467e-03f, -2.550383232e-03f, -2.551791515e-03f, -2.553195315e-03f, -2.554594629e-03f, -2.555989456e-03f, -2.557379793e-03f, -2.558765638e-03f, -2.560146989e-03f,
--2.561523844e-03f, -2.562896200e-03f, -2.564264056e-03f, -2.565627408e-03f, -2.566986256e-03f, -2.568340597e-03f, -2.569690429e-03f, -2.571035750e-03f, -2.572376558e-03f, -2.573712850e-03f,
--2.575044625e-03f, -2.576371880e-03f, -2.577694614e-03f, -2.579012824e-03f, -2.580326509e-03f, -2.581635666e-03f, -2.582940293e-03f, -2.584240389e-03f, -2.585535950e-03f, -2.586826977e-03f,
--2.588113465e-03f, -2.589395414e-03f, -2.590672821e-03f, -2.591945684e-03f, -2.593214002e-03f, -2.594477772e-03f, -2.595736993e-03f, -2.596991662e-03f, -2.598241778e-03f, -2.599487338e-03f,
--2.600728341e-03f, -2.601964786e-03f, -2.603196669e-03f, -2.604423989e-03f, -2.605646744e-03f, -2.606864933e-03f, -2.608078553e-03f, -2.609287603e-03f, -2.610492080e-03f, -2.611691984e-03f,
--2.612887311e-03f, -2.614078061e-03f, -2.615264231e-03f, -2.616445819e-03f, -2.617622825e-03f, -2.618795245e-03f, -2.619963079e-03f, -2.621126324e-03f, -2.622284979e-03f, -2.623439041e-03f,
--2.624588510e-03f, -2.625733383e-03f, -2.626873659e-03f, -2.628009336e-03f, -2.629140412e-03f, -2.630266886e-03f, -2.631388755e-03f, -2.632506018e-03f, -2.633618674e-03f, -2.634726720e-03f,
--2.635830156e-03f, -2.636928979e-03f, -2.638023187e-03f, -2.639112780e-03f, -2.640197755e-03f, -2.641278111e-03f, -2.642353846e-03f, -2.643424958e-03f, -2.644491446e-03f, -2.645553309e-03f,
--2.646610545e-03f, -2.647663151e-03f, -2.648711127e-03f, -2.649754471e-03f, -2.650793182e-03f, -2.651827257e-03f, -2.652856696e-03f, -2.653881497e-03f, -2.654901658e-03f, -2.655917177e-03f,
--2.656928054e-03f, -2.657934287e-03f, -2.658935873e-03f, -2.659932813e-03f, -2.660925104e-03f, -2.661912744e-03f, -2.662895733e-03f, -2.663874069e-03f, -2.664847750e-03f, -2.665816775e-03f,
--2.666781143e-03f, -2.667740851e-03f, -2.668695900e-03f, -2.669646287e-03f, -2.670592010e-03f, -2.671533070e-03f, -2.672469463e-03f, -2.673401189e-03f, -2.674328246e-03f, -2.675250634e-03f,
--2.676168350e-03f, -2.677081393e-03f, -2.677989763e-03f, -2.678893457e-03f, -2.679792474e-03f, -2.680686814e-03f, -2.681576474e-03f, -2.682461454e-03f, -2.683341751e-03f, -2.684217366e-03f,
--2.685088296e-03f, -2.685954541e-03f, -2.686816099e-03f, -2.687672968e-03f, -2.688525149e-03f, -2.689372638e-03f, -2.690215436e-03f, -2.691053541e-03f, -2.691886951e-03f, -2.692715666e-03f,
--2.693539684e-03f, -2.694359005e-03f, -2.695173626e-03f, -2.695983548e-03f, -2.696788768e-03f, -2.697589286e-03f, -2.698385100e-03f, -2.699176209e-03f, -2.699962613e-03f, -2.700744309e-03f,
--2.701521298e-03f, -2.702293577e-03f, -2.703061146e-03f, -2.703824004e-03f, -2.704582149e-03f, -2.705335581e-03f, -2.706084298e-03f, -2.706828300e-03f, -2.707567585e-03f, -2.708302153e-03f,
--2.709032002e-03f, -2.709757131e-03f, -2.710477540e-03f, -2.711193226e-03f, -2.711904190e-03f, -2.712610431e-03f, -2.713311947e-03f, -2.714008737e-03f, -2.714700801e-03f, -2.715388137e-03f,
--2.716070745e-03f, -2.716748623e-03f, -2.717421771e-03f, -2.718090188e-03f, -2.718753872e-03f, -2.719412824e-03f, -2.720067042e-03f, -2.720716524e-03f, -2.721361272e-03f, -2.722001282e-03f,
--2.722636556e-03f, -2.723267090e-03f, -2.723892886e-03f, -2.724513942e-03f, -2.725130257e-03f, -2.725741831e-03f, -2.726348662e-03f, -2.726950750e-03f, -2.727548094e-03f, -2.728140693e-03f,
--2.728728547e-03f, -2.729311654e-03f, -2.729890014e-03f, -2.730463627e-03f, -2.731032490e-03f, -2.731596605e-03f, -2.732155969e-03f, -2.732710583e-03f, -2.733260445e-03f, -2.733805555e-03f,
--2.734345912e-03f, -2.734881516e-03f, -2.735412365e-03f, -2.735938460e-03f, -2.736459799e-03f, -2.736976381e-03f, -2.737488207e-03f, -2.737995275e-03f, -2.738497586e-03f, -2.738995137e-03f,
--2.739487929e-03f, -2.739975961e-03f, -2.740459233e-03f, -2.740937743e-03f, -2.741411492e-03f, -2.741880478e-03f, -2.742344702e-03f, -2.742804162e-03f, -2.743258858e-03f, -2.743708790e-03f,
--2.744153956e-03f, -2.744594358e-03f, -2.745029993e-03f, -2.745460861e-03f, -2.745886963e-03f, -2.746308296e-03f, -2.746724862e-03f, -2.747136660e-03f, -2.747543688e-03f, -2.747945947e-03f,
--2.748343436e-03f, -2.748736155e-03f, -2.749124103e-03f, -2.749507280e-03f, -2.749885685e-03f, -2.750259319e-03f, -2.750628180e-03f, -2.750992268e-03f, -2.751351583e-03f, -2.751706125e-03f,
--2.752055892e-03f, -2.752400886e-03f, -2.752741105e-03f, -2.753076549e-03f, -2.753407218e-03f, -2.753733111e-03f, -2.754054228e-03f, -2.754370569e-03f, -2.754682134e-03f, -2.754988922e-03f,
--2.755290933e-03f, -2.755588166e-03f, -2.755880622e-03f, -2.756168300e-03f, -2.756451200e-03f, -2.756729322e-03f, -2.757002665e-03f, -2.757271229e-03f, -2.757535014e-03f, -2.757794020e-03f,
--2.758048247e-03f, -2.758297694e-03f, -2.758542361e-03f, -2.758782248e-03f, -2.759017355e-03f, -2.759247682e-03f, -2.759473229e-03f, -2.759693995e-03f, -2.759909980e-03f, -2.760121184e-03f,
--2.760327607e-03f, -2.760529250e-03f, -2.760726111e-03f, -2.760918191e-03f, -2.761105489e-03f, -2.761288007e-03f, -2.761465742e-03f, -2.761638697e-03f, -2.761806869e-03f, -2.761970260e-03f,
--2.762128870e-03f, -2.762282697e-03f, -2.762431743e-03f, -2.762576008e-03f, -2.762715490e-03f, -2.762850191e-03f, -2.762980110e-03f, -2.763105248e-03f, -2.763225604e-03f, -2.763341178e-03f,
--2.763451971e-03f, -2.763557983e-03f, -2.763659213e-03f, -2.763755662e-03f, -2.763847329e-03f, -2.763934215e-03f, -2.764016321e-03f, -2.764093645e-03f, -2.764166189e-03f, -2.764233951e-03f,
--2.764296934e-03f, -2.764355135e-03f, -2.764408557e-03f, -2.764457198e-03f, -2.764501060e-03f, -2.764540141e-03f, -2.764574443e-03f, -2.764603966e-03f, -2.764628709e-03f, -2.764648674e-03f,
--2.764663859e-03f, -2.764674266e-03f, -2.764679895e-03f, -2.764680746e-03f, -2.764676818e-03f, -2.764668113e-03f, -2.764654631e-03f, -2.764636372e-03f, -2.764613336e-03f, -2.764585523e-03f,
--2.764552935e-03f, -2.764515570e-03f, -2.764473430e-03f, -2.764426514e-03f, -2.764374824e-03f, -2.764318359e-03f, -2.764257120e-03f, -2.764191107e-03f, -2.764120320e-03f, -2.764044760e-03f,
--2.763964428e-03f, -2.763879323e-03f, -2.763789446e-03f, -2.763694797e-03f, -2.763595377e-03f, -2.763491187e-03f, -2.763382226e-03f, -2.763268496e-03f, -2.763149996e-03f, -2.763026727e-03f,
--2.762898689e-03f, -2.762765883e-03f, -2.762628310e-03f, -2.762485970e-03f, -2.762338863e-03f, -2.762186990e-03f, -2.762030351e-03f, -2.761868948e-03f, -2.761702780e-03f, -2.761531847e-03f,
--2.761356152e-03f, -2.761175693e-03f, -2.760990472e-03f, -2.760800490e-03f, -2.760605746e-03f, -2.760406241e-03f, -2.760201977e-03f, -2.759992953e-03f, -2.759779170e-03f, -2.759560630e-03f,
--2.759337331e-03f, -2.759109276e-03f, -2.758876464e-03f, -2.758638897e-03f, -2.758396575e-03f, -2.758149498e-03f, -2.757897668e-03f, -2.757641085e-03f, -2.757379749e-03f, -2.757113662e-03f,
--2.756842824e-03f, -2.756567236e-03f, -2.756286899e-03f, -2.756001813e-03f, -2.755711979e-03f, -2.755417397e-03f, -2.755118070e-03f, -2.754813996e-03f, -2.754505178e-03f, -2.754191616e-03f,
--2.753873310e-03f, -2.753550262e-03f, -2.753222472e-03f, -2.752889941e-03f, -2.752552670e-03f, -2.752210660e-03f, -2.751863911e-03f, -2.751512425e-03f, -2.751156202e-03f, -2.750795244e-03f,
--2.750429550e-03f, -2.750059122e-03f, -2.749683961e-03f, -2.749304067e-03f, -2.748919443e-03f, -2.748530087e-03f, -2.748136002e-03f, -2.747737189e-03f, -2.747333647e-03f, -2.746925379e-03f,
--2.746512385e-03f, -2.746094667e-03f, -2.745672224e-03f, -2.745245058e-03f, -2.744813171e-03f, -2.744376562e-03f, -2.743935234e-03f, -2.743489186e-03f, -2.743038421e-03f, -2.742582939e-03f,
--2.742122741e-03f, -2.741657828e-03f, -2.741188201e-03f, -2.740713862e-03f, -2.740234811e-03f, -2.739751049e-03f, -2.739262578e-03f, -2.738769399e-03f, -2.738271512e-03f, -2.737768919e-03f,
--2.737261621e-03f, -2.736749619e-03f, -2.736232914e-03f, -2.735711507e-03f, -2.735185400e-03f, -2.734654594e-03f, -2.734119089e-03f, -2.733578887e-03f, -2.733033990e-03f, -2.732484397e-03f,
--2.731930112e-03f, -2.731371133e-03f, -2.730807464e-03f, -2.730239105e-03f, -2.729666057e-03f, -2.729088322e-03f, -2.728505901e-03f, -2.727918795e-03f, -2.727327005e-03f, -2.726730533e-03f,
--2.726129379e-03f, -2.725523546e-03f, -2.724913034e-03f, -2.724297845e-03f, -2.723677981e-03f, -2.723053441e-03f, -2.722424228e-03f, -2.721790344e-03f, -2.721151788e-03f, -2.720508564e-03f,
--2.719860671e-03f, -2.719208112e-03f, -2.718550888e-03f, -2.717889000e-03f, -2.717222449e-03f, -2.716551238e-03f, -2.715875367e-03f, -2.715194837e-03f, -2.714509651e-03f, -2.713819810e-03f,
--2.713125314e-03f, -2.712426167e-03f, -2.711722368e-03f, -2.711013919e-03f, -2.710300823e-03f, -2.709583080e-03f, -2.708860691e-03f, -2.708133659e-03f, -2.707401985e-03f, -2.706665670e-03f,
--2.705924716e-03f, -2.705179125e-03f, -2.704428897e-03f, -2.703674035e-03f, -2.702914540e-03f, -2.702150413e-03f, -2.701381657e-03f, -2.700608272e-03f, -2.699830261e-03f, -2.699047624e-03f,
--2.698260364e-03f, -2.697468482e-03f, -2.696671979e-03f, -2.695870858e-03f, -2.695065120e-03f, -2.694254766e-03f, -2.693439799e-03f, -2.692620219e-03f, -2.691796029e-03f, -2.690967229e-03f,
--2.690133823e-03f, -2.689295811e-03f, -2.688453196e-03f, -2.687605978e-03f, -2.686754160e-03f, -2.685897743e-03f, -2.685036730e-03f, -2.684171121e-03f, -2.683300918e-03f, -2.682426124e-03f,
--2.681546740e-03f, -2.680662767e-03f, -2.679774208e-03f, -2.678881064e-03f, -2.677983338e-03f, -2.677081030e-03f, -2.676174143e-03f, -2.675262678e-03f, -2.674346638e-03f, -2.673426024e-03f,
--2.672500837e-03f, -2.671571081e-03f, -2.670636756e-03f, -2.669697864e-03f, -2.668754408e-03f, -2.667806389e-03f, -2.666853809e-03f, -2.665896670e-03f, -2.664934974e-03f, -2.663968723e-03f,
--2.662997918e-03f, -2.662022562e-03f, -2.661042657e-03f, -2.660058204e-03f, -2.659069205e-03f, -2.658075662e-03f, -2.657077578e-03f, -2.656074954e-03f, -2.655067793e-03f, -2.654056095e-03f,
--2.653039864e-03f, -2.652019100e-03f, -2.650993807e-03f, -2.649963986e-03f, -2.648929640e-03f, -2.647890769e-03f, -2.646847377e-03f, -2.645799465e-03f, -2.644747035e-03f, -2.643690090e-03f,
--2.642628631e-03f, -2.641562661e-03f, -2.640492181e-03f, -2.639417194e-03f, -2.638337701e-03f, -2.637253706e-03f, -2.636165210e-03f, -2.635072214e-03f, -2.633974722e-03f, -2.632872735e-03f,
--2.631766256e-03f, -2.630655286e-03f, -2.629539828e-03f, -2.628419884e-03f, -2.627295457e-03f, -2.626166547e-03f, -2.625033158e-03f, -2.623895292e-03f, -2.622752950e-03f, -2.621606136e-03f,
--2.620454851e-03f, -2.619299097e-03f, -2.618138877e-03f, -2.616974194e-03f, -2.615805048e-03f, -2.614631443e-03f, -2.613453381e-03f, -2.612270863e-03f, -2.611083893e-03f, -2.609892473e-03f,
--2.608696604e-03f, -2.607496290e-03f, -2.606291532e-03f, -2.605082333e-03f, -2.603868695e-03f, -2.602650621e-03f, -2.601428112e-03f, -2.600201171e-03f, -2.598969801e-03f, -2.597734004e-03f,
--2.596493782e-03f, -2.595249137e-03f, -2.594000073e-03f, -2.592746590e-03f, -2.591488693e-03f, -2.590226383e-03f, -2.588959662e-03f, -2.587688533e-03f, -2.586412999e-03f, -2.585133061e-03f,
--2.583848723e-03f, -2.582559986e-03f, -2.581266854e-03f, -2.579969329e-03f, -2.578667412e-03f, -2.577361107e-03f, -2.576050416e-03f, -2.574735342e-03f, -2.573415887e-03f, -2.572092054e-03f,
--2.570763844e-03f, -2.569431261e-03f, -2.568094308e-03f, -2.566752986e-03f, -2.565407298e-03f, -2.564057248e-03f, -2.562702836e-03f, -2.561344067e-03f, -2.559980942e-03f, -2.558613464e-03f,
--2.557241636e-03f, -2.555865460e-03f, -2.554484939e-03f, -2.553100076e-03f, -2.551710872e-03f, -2.550317332e-03f, -2.548919456e-03f, -2.547517249e-03f, -2.546110713e-03f, -2.544699850e-03f,
--2.543284663e-03f, -2.541865154e-03f, -2.540441327e-03f, -2.539013184e-03f, -2.537580728e-03f, -2.536143961e-03f, -2.534702886e-03f, -2.533257506e-03f, -2.531807824e-03f, -2.530353842e-03f,
--2.528895563e-03f, -2.527432990e-03f, -2.525966125e-03f, -2.524494972e-03f, -2.523019533e-03f, -2.521539811e-03f, -2.520055808e-03f, -2.518567528e-03f, -2.517074972e-03f, -2.515578145e-03f,
--2.514077049e-03f, -2.512571686e-03f, -2.511062060e-03f, -2.509548174e-03f, -2.508030029e-03f, -2.506507629e-03f, -2.504980977e-03f, -2.503450076e-03f, -2.501914928e-03f, -2.500375537e-03f,
--2.498831905e-03f, -2.497284036e-03f, -2.495731931e-03f, -2.494175595e-03f, -2.492615029e-03f, -2.491050237e-03f, -2.489481222e-03f, -2.487907987e-03f, -2.486330534e-03f, -2.484748867e-03f,
--2.483162989e-03f, -2.481572902e-03f, -2.479978609e-03f, -2.478380114e-03f, -2.476777419e-03f, -2.475170528e-03f, -2.473559443e-03f, -2.471944167e-03f, -2.470324704e-03f, -2.468701057e-03f,
--2.467073228e-03f, -2.465441220e-03f, -2.463805037e-03f, -2.462164681e-03f, -2.460520156e-03f, -2.458871465e-03f, -2.457218611e-03f, -2.455561596e-03f, -2.453900425e-03f, -2.452235099e-03f,
--2.450565622e-03f, -2.448891998e-03f, -2.447214229e-03f, -2.445532318e-03f, -2.443846269e-03f, -2.442156085e-03f, -2.440461768e-03f, -2.438763323e-03f, -2.437060751e-03f, -2.435354057e-03f,
--2.433643243e-03f, -2.431928313e-03f, -2.430209269e-03f, -2.428486116e-03f, -2.426758856e-03f, -2.425027492e-03f, -2.423292028e-03f, -2.421552466e-03f, -2.419808810e-03f, -2.418061064e-03f,
--2.416309230e-03f, -2.414553312e-03f, -2.412793313e-03f, -2.411029236e-03f, -2.409261085e-03f, -2.407488862e-03f, -2.405712571e-03f, -2.403932216e-03f, -2.402147799e-03f, -2.400359324e-03f,
--2.398566794e-03f, -2.396770213e-03f, -2.394969584e-03f, -2.393164910e-03f, -2.391356194e-03f, -2.389543440e-03f, -2.387726651e-03f, -2.385905831e-03f, -2.384080982e-03f, -2.382252109e-03f,
--2.380419214e-03f, -2.378582302e-03f, -2.376741374e-03f, -2.374896436e-03f, -2.373047489e-03f, -2.371194538e-03f, -2.369337587e-03f, -2.367476637e-03f, -2.365611693e-03f, -2.363742759e-03f,
--2.361869837e-03f, -2.359992931e-03f, -2.358112045e-03f, -2.356227182e-03f, -2.354338346e-03f, -2.352445539e-03f, -2.350548766e-03f, -2.348648030e-03f, -2.346743334e-03f, -2.344834682e-03f,
--2.342922078e-03f, -2.341005524e-03f, -2.339085025e-03f, -2.337160584e-03f, -2.335232205e-03f, -2.333299890e-03f, -2.331363644e-03f, -2.329423471e-03f, -2.327479373e-03f, -2.325531354e-03f,
--2.323579418e-03f, -2.321623569e-03f, -2.319663810e-03f, -2.317700144e-03f, -2.315732575e-03f, -2.313761107e-03f, -2.311785744e-03f, -2.309806489e-03f, -2.307823345e-03f, -2.305836317e-03f,
--2.303845407e-03f, -2.301850620e-03f, -2.299851960e-03f, -2.297849429e-03f, -2.295843032e-03f, -2.293832772e-03f, -2.291818653e-03f, -2.289800678e-03f, -2.287778852e-03f, -2.285753177e-03f,
--2.283723659e-03f, -2.281690299e-03f, -2.279653103e-03f, -2.277612074e-03f, -2.275567215e-03f, -2.273518530e-03f, -2.271466024e-03f, -2.269409699e-03f, -2.267349559e-03f, -2.265285609e-03f,
--2.263217852e-03f, -2.261146292e-03f, -2.259070932e-03f, -2.256991777e-03f, -2.254908830e-03f, -2.252822095e-03f, -2.250731575e-03f, -2.248637275e-03f, -2.246539199e-03f, -2.244437350e-03f,
--2.242331731e-03f, -2.240222348e-03f, -2.238109203e-03f, -2.235992301e-03f, -2.233871646e-03f, -2.231747240e-03f, -2.229619089e-03f, -2.227487196e-03f, -2.225351565e-03f, -2.223212200e-03f,
--2.221069104e-03f, -2.218922282e-03f, -2.216771737e-03f, -2.214617474e-03f, -2.212459496e-03f, -2.210297807e-03f, -2.208132412e-03f, -2.205963313e-03f, -2.203790516e-03f, -2.201614023e-03f,
--2.199433840e-03f, -2.197249970e-03f, -2.195062416e-03f, -2.192871183e-03f, -2.190676275e-03f, -2.188477696e-03f, -2.186275450e-03f, -2.184069541e-03f, -2.181859972e-03f, -2.179646748e-03f,
--2.177429873e-03f, -2.175209351e-03f, -2.172985186e-03f, -2.170757382e-03f, -2.168525942e-03f, -2.166290872e-03f, -2.164052175e-03f, -2.161809855e-03f, -2.159563916e-03f, -2.157314362e-03f,
--2.155061198e-03f, -2.152804427e-03f, -2.150544054e-03f, -2.148280082e-03f, -2.146012516e-03f, -2.143741360e-03f, -2.141466617e-03f, -2.139188293e-03f, -2.136906391e-03f, -2.134620915e-03f,
--2.132331870e-03f, -2.130039259e-03f, -2.127743087e-03f, -2.125443358e-03f, -2.123140075e-03f, -2.120833245e-03f, -2.118522869e-03f, -2.116208953e-03f, -2.113891501e-03f, -2.111570516e-03f,
--2.109246004e-03f, -2.106917968e-03f, -2.104586413e-03f, -2.102251343e-03f, -2.099912761e-03f, -2.097570673e-03f, -2.095225082e-03f, -2.092875993e-03f, -2.090523409e-03f, -2.088167336e-03f,
--2.085807777e-03f, -2.083444737e-03f, -2.081078220e-03f, -2.078708230e-03f, -2.076334772e-03f, -2.073957849e-03f, -2.071577466e-03f, -2.069193628e-03f, -2.066806338e-03f, -2.064415602e-03f,
--2.062021422e-03f, -2.059623805e-03f, -2.057222753e-03f, -2.054818271e-03f, -2.052410364e-03f, -2.049999036e-03f, -2.047584291e-03f, -2.045166134e-03f, -2.042744569e-03f, -2.040319600e-03f,
--2.037891232e-03f, -2.035459468e-03f, -2.033024315e-03f, -2.030585775e-03f, -2.028143853e-03f, -2.025698555e-03f, -2.023249883e-03f, -2.020797842e-03f, -2.018342438e-03f, -2.015883673e-03f,
--2.013421554e-03f, -2.010956084e-03f, -2.008487267e-03f, -2.006015108e-03f, -2.003539612e-03f, -2.001060782e-03f, -1.998578624e-03f, -1.996093142e-03f, -1.993604340e-03f, -1.991112223e-03f,
--1.988616795e-03f, -1.986118061e-03f, -1.983616025e-03f, -1.981110692e-03f, -1.978602066e-03f, -1.976090152e-03f, -1.973574954e-03f, -1.971056477e-03f, -1.968534725e-03f, -1.966009703e-03f,
--1.963481416e-03f, -1.960949867e-03f, -1.958415062e-03f, -1.955877005e-03f, -1.953335700e-03f, -1.950791153e-03f, -1.948243367e-03f, -1.945692348e-03f, -1.943138099e-03f, -1.940580626e-03f,
--1.938019933e-03f, -1.935456024e-03f, -1.932888905e-03f, -1.930318579e-03f, -1.927745052e-03f, -1.925168328e-03f, -1.922588411e-03f, -1.920005307e-03f, -1.917419020e-03f, -1.914829554e-03f,
--1.912236915e-03f, -1.909641106e-03f, -1.907042133e-03f, -1.904440000e-03f, -1.901834712e-03f, -1.899226273e-03f, -1.896614689e-03f, -1.893999963e-03f, -1.891382101e-03f, -1.888761107e-03f,
--1.886136986e-03f, -1.883509742e-03f, -1.880879381e-03f, -1.878245907e-03f, -1.875609325e-03f, -1.872969639e-03f, -1.870326854e-03f, -1.867680975e-03f, -1.865032007e-03f, -1.862379954e-03f,
--1.859724821e-03f, -1.857066613e-03f, -1.854405335e-03f, -1.851740991e-03f, -1.849073586e-03f, -1.846403125e-03f, -1.843729613e-03f, -1.841053054e-03f, -1.838373454e-03f, -1.835690817e-03f,
--1.833005147e-03f, -1.830316450e-03f, -1.827624731e-03f, -1.824929994e-03f, -1.822232244e-03f, -1.819531485e-03f, -1.816827724e-03f, -1.814120964e-03f, -1.811411210e-03f, -1.808698468e-03f,
--1.805982742e-03f, -1.803264037e-03f, -1.800542357e-03f, -1.797817708e-03f, -1.795090095e-03f, -1.792359522e-03f, -1.789625994e-03f, -1.786889516e-03f, -1.784150094e-03f, -1.781407731e-03f,
--1.778662433e-03f, -1.775914205e-03f, -1.773163051e-03f, -1.770408977e-03f, -1.767651987e-03f, -1.764892086e-03f, -1.762129280e-03f, -1.759363573e-03f, -1.756594970e-03f, -1.753823476e-03f,
--1.751049096e-03f, -1.748271835e-03f, -1.745491698e-03f, -1.742708690e-03f, -1.739922816e-03f, -1.737134080e-03f, -1.734342488e-03f, -1.731548045e-03f, -1.728750755e-03f, -1.725950624e-03f,
--1.723147657e-03f, -1.720341858e-03f, -1.717533233e-03f, -1.714721787e-03f, -1.711907524e-03f, -1.709090450e-03f, -1.706270570e-03f, -1.703447888e-03f, -1.700622410e-03f, -1.697794141e-03f,
--1.694963086e-03f, -1.692129250e-03f, -1.689292637e-03f, -1.686453253e-03f, -1.683611103e-03f, -1.680766193e-03f, -1.677918526e-03f, -1.675068109e-03f, -1.672214945e-03f, -1.669359041e-03f,
--1.666500402e-03f, -1.663639032e-03f, -1.660774936e-03f, -1.657908120e-03f, -1.655038589e-03f, -1.652166348e-03f, -1.649291402e-03f, -1.646413755e-03f, -1.643533414e-03f, -1.640650383e-03f,
--1.637764668e-03f, -1.634876273e-03f, -1.631985204e-03f, -1.629091466e-03f, -1.626195063e-03f, -1.623296002e-03f, -1.620394287e-03f, -1.617489923e-03f, -1.614582916e-03f, -1.611673271e-03f,
--1.608760992e-03f, -1.605846086e-03f, -1.602928557e-03f, -1.600008410e-03f, -1.597085651e-03f, -1.594160284e-03f, -1.591232316e-03f, -1.588301751e-03f, -1.585368594e-03f, -1.582432851e-03f,
--1.579494526e-03f, -1.576553626e-03f, -1.573610155e-03f, -1.570664118e-03f, -1.567715521e-03f, -1.564764369e-03f, -1.561810667e-03f, -1.558854420e-03f, -1.555895634e-03f, -1.552934314e-03f,
--1.549970465e-03f, -1.547004092e-03f, -1.544035201e-03f, -1.541063797e-03f, -1.538089885e-03f, -1.535113470e-03f, -1.532134558e-03f, -1.529153154e-03f, -1.526169263e-03f, -1.523182891e-03f,
--1.520194043e-03f, -1.517202724e-03f, -1.514208939e-03f, -1.511212694e-03f, -1.508213995e-03f, -1.505212845e-03f, -1.502209251e-03f, -1.499203218e-03f, -1.496194752e-03f, -1.493183857e-03f,
--1.490170539e-03f, -1.487154803e-03f, -1.484136656e-03f, -1.481116101e-03f, -1.478093144e-03f, -1.475067791e-03f, -1.472040047e-03f, -1.469009918e-03f, -1.465977408e-03f, -1.462942523e-03f,
--1.459905269e-03f, -1.456865651e-03f, -1.453823674e-03f, -1.450779344e-03f, -1.447732665e-03f, -1.444683645e-03f, -1.441632286e-03f, -1.438578597e-03f, -1.435522580e-03f, -1.432464243e-03f,
--1.429403590e-03f, -1.426340627e-03f, -1.423275359e-03f, -1.420207792e-03f, -1.417137930e-03f, -1.414065781e-03f, -1.410991348e-03f, -1.407914638e-03f, -1.404835655e-03f, -1.401754406e-03f,
--1.398670895e-03f, -1.395585128e-03f, -1.392497111e-03f, -1.389406849e-03f, -1.386314348e-03f, -1.383219612e-03f, -1.380122648e-03f, -1.377023461e-03f, -1.373922056e-03f, -1.370818439e-03f,
--1.367712615e-03f, -1.364604590e-03f, -1.361494370e-03f, -1.358381959e-03f, -1.355267363e-03f, -1.352150588e-03f, -1.349031640e-03f, -1.345910523e-03f, -1.342787243e-03f, -1.339661807e-03f,
--1.336534218e-03f, -1.333404484e-03f, -1.330272608e-03f, -1.327138598e-03f, -1.324002458e-03f, -1.320864194e-03f, -1.317723811e-03f, -1.314581316e-03f, -1.311436713e-03f, -1.308290008e-03f,
--1.305141207e-03f, -1.301990314e-03f, -1.298837337e-03f, -1.295682280e-03f, -1.292525149e-03f, -1.289365949e-03f, -1.286204686e-03f, -1.283041366e-03f, -1.279875994e-03f, -1.276708576e-03f,
--1.273539117e-03f, -1.270367623e-03f, -1.267194099e-03f, -1.264018551e-03f, -1.260840985e-03f, -1.257661407e-03f, -1.254479821e-03f, -1.251296234e-03f, -1.248110650e-03f, -1.244923077e-03f,
--1.241733519e-03f, -1.238541981e-03f, -1.235348470e-03f, -1.232152992e-03f, -1.228955551e-03f, -1.225756153e-03f, -1.222554805e-03f, -1.219351511e-03f, -1.216146278e-03f, -1.212939110e-03f,
--1.209730014e-03f, -1.206518996e-03f, -1.203306060e-03f, -1.200091213e-03f, -1.196874460e-03f, -1.193655807e-03f, -1.190435259e-03f, -1.187212823e-03f, -1.183988503e-03f, -1.180762306e-03f,
--1.177534238e-03f, -1.174304303e-03f, -1.171072507e-03f, -1.167838857e-03f, -1.164603358e-03f, -1.161366016e-03f, -1.158126835e-03f, -1.154885823e-03f, -1.151642985e-03f, -1.148398326e-03f,
--1.145151852e-03f, -1.141903569e-03f, -1.138653482e-03f, -1.135401598e-03f, -1.132147921e-03f, -1.128892458e-03f, -1.125635215e-03f, -1.122376197e-03f, -1.119115409e-03f, -1.115852859e-03f,
--1.112588550e-03f, -1.109322489e-03f, -1.106054683e-03f, -1.102785135e-03f, -1.099513853e-03f, -1.096240842e-03f, -1.092966108e-03f, -1.089689656e-03f, -1.086411493e-03f, -1.083131623e-03f,
--1.079850054e-03f, -1.076566789e-03f, -1.073281836e-03f, -1.069995200e-03f, -1.066706887e-03f, -1.063416903e-03f, -1.060125253e-03f, -1.056831942e-03f, -1.053536978e-03f, -1.050240366e-03f,
--1.046942111e-03f, -1.043642219e-03f, -1.040340697e-03f, -1.037037549e-03f, -1.033732782e-03f, -1.030426401e-03f, -1.027118413e-03f, -1.023808822e-03f, -1.020497636e-03f, -1.017184859e-03f,
--1.013870497e-03f, -1.010554557e-03f, -1.007237044e-03f, -1.003917964e-03f, -1.000597322e-03f, -9.972751250e-04f, -9.939513784e-04f, -9.906260880e-04f, -9.872992595e-04f, -9.839708990e-04f,
--9.806410121e-04f, -9.773096047e-04f, -9.739766826e-04f, -9.706422518e-04f, -9.673063180e-04f, -9.639688870e-04f, -9.606299648e-04f, -9.572895572e-04f, -9.539476700e-04f, -9.506043090e-04f,
--9.472594802e-04f, -9.439131894e-04f, -9.405654424e-04f, -9.372162452e-04f, -9.338656035e-04f, -9.305135232e-04f, -9.271600103e-04f, -9.238050705e-04f, -9.204487099e-04f, -9.170909341e-04f,
--9.137317491e-04f, -9.103711609e-04f, -9.070091752e-04f, -9.036457979e-04f, -9.002810350e-04f, -8.969148924e-04f, -8.935473758e-04f, -8.901784913e-04f, -8.868082446e-04f, -8.834366418e-04f,
--8.800636886e-04f, -8.766893911e-04f, -8.733137550e-04f, -8.699367864e-04f, -8.665584911e-04f, -8.631788749e-04f, -8.597979440e-04f, -8.564157040e-04f, -8.530321611e-04f, -8.496473209e-04f,
--8.462611896e-04f, -8.428737730e-04f, -8.394850770e-04f, -8.360951076e-04f, -8.327038707e-04f, -8.293113722e-04f, -8.259176180e-04f, -8.225226141e-04f, -8.191263664e-04f, -8.157288808e-04f,
--8.123301633e-04f, -8.089302198e-04f, -8.055290563e-04f, -8.021266786e-04f, -7.987230928e-04f, -7.953183048e-04f, -7.919123206e-04f, -7.885051460e-04f, -7.850967870e-04f, -7.816872496e-04f,
--7.782765398e-04f, -7.748646635e-04f, -7.714516266e-04f, -7.680374352e-04f, -7.646220951e-04f, -7.612056123e-04f, -7.577879929e-04f, -7.543692428e-04f, -7.509493678e-04f, -7.475283741e-04f,
--7.441062676e-04f, -7.406830542e-04f, -7.372587399e-04f, -7.338333308e-04f, -7.304068327e-04f, -7.269792517e-04f, -7.235505937e-04f, -7.201208648e-04f, -7.166900708e-04f, -7.132582179e-04f,
--7.098253119e-04f, -7.063913589e-04f, -7.029563649e-04f, -6.995203358e-04f, -6.960832776e-04f, -6.926451964e-04f, -6.892060981e-04f, -6.857659887e-04f, -6.823248743e-04f, -6.788827608e-04f,
--6.754396542e-04f, -6.719955606e-04f, -6.685504858e-04f, -6.651044361e-04f, -6.616574173e-04f, -6.582094354e-04f, -6.547604965e-04f, -6.513106066e-04f, -6.478597716e-04f, -6.444079977e-04f,
--6.409552908e-04f, -6.375016569e-04f, -6.340471021e-04f, -6.305916324e-04f, -6.271352537e-04f, -6.236779722e-04f, -6.202197937e-04f, -6.167607245e-04f, -6.133007704e-04f, -6.098399376e-04f,
--6.063782320e-04f, -6.029156596e-04f, -5.994522266e-04f, -5.959879388e-04f, -5.925228025e-04f, -5.890568235e-04f, -5.855900080e-04f, -5.821223619e-04f, -5.786538913e-04f, -5.751846023e-04f,
--5.717145008e-04f, -5.682435930e-04f, -5.647718848e-04f, -5.612993823e-04f, -5.578260916e-04f, -5.543520186e-04f, -5.508771695e-04f, -5.474015503e-04f, -5.439251670e-04f, -5.404480257e-04f,
--5.369701323e-04f, -5.334914931e-04f, -5.300121140e-04f, -5.265320011e-04f, -5.230511604e-04f, -5.195695980e-04f, -5.160873200e-04f, -5.126043323e-04f, -5.091206411e-04f, -5.056362524e-04f,
--5.021511723e-04f, -4.986654068e-04f, -4.951789620e-04f, -4.916918439e-04f, -4.882040587e-04f, -4.847156124e-04f, -4.812265110e-04f, -4.777367606e-04f, -4.742463672e-04f, -4.707553371e-04f,
--4.672636761e-04f, -4.637713904e-04f, -4.602784860e-04f, -4.567849690e-04f, -4.532908456e-04f, -4.497961217e-04f, -4.463008034e-04f, -4.428048968e-04f, -4.393084079e-04f, -4.358113430e-04f,
--4.323137079e-04f, -4.288155088e-04f, -4.253167518e-04f, -4.218174429e-04f, -4.183175883e-04f, -4.148171940e-04f, -4.113162660e-04f, -4.078148105e-04f, -4.043128335e-04f, -4.008103411e-04f,
--3.973073395e-04f, -3.938038346e-04f, -3.902998326e-04f, -3.867953395e-04f, -3.832903614e-04f, -3.797849044e-04f, -3.762789747e-04f, -3.727725782e-04f, -3.692657210e-04f, -3.657584093e-04f,
--3.622506492e-04f, -3.587424466e-04f, -3.552338078e-04f, -3.517247387e-04f, -3.482152456e-04f, -3.447053343e-04f, -3.411950112e-04f, -3.376842822e-04f, -3.341731534e-04f, -3.306616309e-04f,
--3.271497209e-04f, -3.236374293e-04f, -3.201247623e-04f, -3.166117260e-04f, -3.130983265e-04f, -3.095845699e-04f, -3.060704622e-04f, -3.025560095e-04f, -2.990412180e-04f, -2.955260937e-04f,
--2.920106428e-04f, -2.884948713e-04f, -2.849787852e-04f, -2.814623908e-04f, -2.779456941e-04f, -2.744287012e-04f, -2.709114181e-04f, -2.673938511e-04f, -2.638760061e-04f, -2.603578893e-04f,
--2.568395067e-04f, -2.533208645e-04f, -2.498019688e-04f, -2.462828256e-04f, -2.427634411e-04f, -2.392438213e-04f, -2.357239723e-04f, -2.322039003e-04f, -2.286836113e-04f, -2.251631114e-04f,
--2.216424067e-04f, -2.181215034e-04f, -2.146004074e-04f, -2.110791250e-04f, -2.075576622e-04f, -2.040360250e-04f, -2.005142197e-04f, -1.969922522e-04f, -1.934701288e-04f, -1.899478554e-04f,
--1.864254382e-04f, -1.829028832e-04f, -1.793801966e-04f, -1.758573845e-04f, -1.723344530e-04f, -1.688114081e-04f, -1.652882559e-04f, -1.617650026e-04f, -1.582416542e-04f, -1.547182169e-04f,
--1.511946966e-04f, -1.476710996e-04f, -1.441474319e-04f, -1.406236997e-04f, -1.370999089e-04f, -1.335760657e-04f, -1.300521762e-04f, -1.265282465e-04f, -1.230042826e-04f, -1.194802908e-04f,
--1.159562769e-04f, -1.124322473e-04f, -1.089082078e-04f, -1.053841648e-04f, -1.018601241e-04f, -9.833609193e-05f, -9.481207438e-05f, -9.128807752e-05f, -8.776410745e-05f, -8.424017026e-05f,
--8.071627202e-05f, -7.719241884e-05f, -7.366861680e-05f, -7.014487198e-05f, -6.662119048e-05f, -6.309757838e-05f, -5.957404177e-05f, -5.605058673e-05f, -5.252721935e-05f, -4.900394571e-05f,
--4.548077190e-05f, -4.195770401e-05f, -3.843474811e-05f, -3.491191029e-05f, -3.138919663e-05f, -2.786661322e-05f, -2.434416613e-05f, -2.082186145e-05f, -1.729970525e-05f, -1.377770362e-05f,
--1.025586264e-05f, -6.734188376e-06f, -3.212686917e-06f, 3.086356630e-07f, 3.829773287e-06f, 7.350719879e-06f, 1.087146936e-05f, 1.439201567e-05f, 1.791235271e-05f, 2.143247443e-05f,
-2.495237474e-05f, 2.847204758e-05f, 3.199148687e-05f, 3.551068655e-05f, 3.902964054e-05f, 4.254834278e-05f, 4.606678719e-05f, 4.958496771e-05f, 5.310287827e-05f, 5.662051281e-05f,
-6.013786526e-05f, 6.365492955e-05f, 6.717169963e-05f, 7.068816942e-05f, 7.420433287e-05f, 7.772018392e-05f, 8.123571651e-05f, 8.475092457e-05f, 8.826580205e-05f, 9.178034290e-05f,
-9.529454104e-05f, 9.880839044e-05f, 1.023218850e-04f, 1.058350187e-04f, 1.093477856e-04f, 1.128601794e-04f, 1.163721942e-04f, 1.198838240e-04f, 1.233950626e-04f, 1.269059041e-04f,
-1.304163424e-04f, 1.339263714e-04f, 1.374359851e-04f, 1.409451775e-04f, 1.444539424e-04f, 1.479622740e-04f, 1.514701661e-04f, 1.549776126e-04f, 1.584846076e-04f, 1.619911450e-04f,
-1.654972188e-04f, 1.690028229e-04f, 1.725079514e-04f, 1.760125981e-04f, 1.795167570e-04f, 1.830204221e-04f, 1.865235875e-04f, 1.900262470e-04f, 1.935283945e-04f, 1.970300242e-04f,
-2.005311300e-04f, 2.040317058e-04f, 2.075317457e-04f, 2.110312435e-04f, 2.145301933e-04f, 2.180285891e-04f, 2.215264249e-04f, 2.250236945e-04f, 2.285203921e-04f, 2.320165116e-04f,
-2.355120470e-04f, 2.390069923e-04f, 2.425013414e-04f, 2.459950884e-04f, 2.494882273e-04f, 2.529807520e-04f, 2.564726565e-04f, 2.599639349e-04f, 2.634545812e-04f, 2.669445892e-04f,
-2.704339532e-04f, 2.739226669e-04f, 2.774107245e-04f, 2.808981200e-04f, 2.843848473e-04f, 2.878709006e-04f, 2.913562736e-04f, 2.948409606e-04f, 2.983249555e-04f, 3.018082523e-04f,
-3.052908451e-04f, 3.087727278e-04f, 3.122538945e-04f, 3.157343392e-04f, 3.192140559e-04f, 3.226930386e-04f, 3.261712814e-04f, 3.296487783e-04f, 3.331255233e-04f, 3.366015105e-04f,
-3.400767339e-04f, 3.435511875e-04f, 3.470248653e-04f, 3.504977615e-04f, 3.539698699e-04f, 3.574411848e-04f, 3.609117000e-04f, 3.643814097e-04f, 3.678503079e-04f, 3.713183887e-04f,
-3.747856460e-04f, 3.782520740e-04f, 3.817176667e-04f, 3.851824182e-04f, 3.886463224e-04f, 3.921093735e-04f, 3.955715656e-04f, 3.990328926e-04f, 4.024933487e-04f, 4.059529279e-04f,
-4.094116243e-04f, 4.128694320e-04f, 4.163263449e-04f, 4.197823573e-04f, 4.232374631e-04f, 4.266916565e-04f, 4.301449314e-04f, 4.335972821e-04f, 4.370487026e-04f, 4.404991869e-04f,
-4.439487292e-04f, 4.473973235e-04f, 4.508449640e-04f, 4.542916446e-04f, 4.577373596e-04f, 4.611821030e-04f, 4.646258688e-04f, 4.680686513e-04f, 4.715104445e-04f, 4.749512425e-04f,
-4.783910394e-04f, 4.818298293e-04f, 4.852676064e-04f, 4.887043647e-04f, 4.921400984e-04f, 4.955748015e-04f, 4.990084682e-04f, 5.024410926e-04f, 5.058726688e-04f, 5.093031910e-04f,
-5.127326533e-04f, 5.161610498e-04f, 5.195883746e-04f, 5.230146219e-04f, 5.264397858e-04f, 5.298638604e-04f, 5.332868399e-04f, 5.367087184e-04f, 5.401294901e-04f, 5.435491491e-04f,
-5.469676896e-04f, 5.503851057e-04f, 5.538013915e-04f, 5.572165413e-04f, 5.606305491e-04f, 5.640434092e-04f, 5.674551156e-04f, 5.708656626e-04f, 5.742750443e-04f, 5.776832550e-04f,
-5.810902887e-04f, 5.844961396e-04f, 5.879008019e-04f, 5.913042698e-04f, 5.947065375e-04f, 5.981075992e-04f, 6.015074489e-04f, 6.049060810e-04f, 6.083034897e-04f, 6.116996690e-04f,
-6.150946132e-04f, 6.184883165e-04f, 6.218807731e-04f, 6.252719772e-04f, 6.286619231e-04f, 6.320506048e-04f, 6.354380166e-04f, 6.388241528e-04f, 6.422090076e-04f, 6.455925750e-04f,
-6.489748495e-04f, 6.523558252e-04f, 6.557354963e-04f, 6.591138571e-04f, 6.624909017e-04f, 6.658666245e-04f, 6.692410196e-04f, 6.726140813e-04f, 6.759858039e-04f, 6.793561815e-04f,
-6.827252084e-04f, 6.860928789e-04f, 6.894591872e-04f, 6.928241276e-04f, 6.961876943e-04f, 6.995498816e-04f, 7.029106838e-04f, 7.062700950e-04f, 7.096281096e-04f, 7.129847219e-04f,
-7.163399261e-04f, 7.196937165e-04f, 7.230460873e-04f, 7.263970329e-04f, 7.297465476e-04f, 7.330946255e-04f, 7.364412611e-04f, 7.397864485e-04f, 7.431301822e-04f, 7.464724563e-04f,
-7.498132653e-04f, 7.531526033e-04f, 7.564904647e-04f, 7.598268439e-04f, 7.631617350e-04f, 7.664951325e-04f, 7.698270306e-04f, 7.731574237e-04f, 7.764863061e-04f, 7.798136722e-04f,
-7.831395161e-04f, 7.864638324e-04f, 7.897866152e-04f, 7.931078590e-04f, 7.964275581e-04f, 7.997457068e-04f, 8.030622995e-04f, 8.063773306e-04f, 8.096907943e-04f, 8.130026850e-04f,
-8.163129972e-04f, 8.196217251e-04f, 8.229288631e-04f, 8.262344056e-04f, 8.295383470e-04f, 8.328406816e-04f, 8.361414038e-04f, 8.394405080e-04f, 8.427379885e-04f, 8.460338399e-04f,
-8.493280563e-04f, 8.526206324e-04f, 8.559115623e-04f, 8.592008406e-04f, 8.624884616e-04f, 8.657744197e-04f, 8.690587094e-04f, 8.723413251e-04f, 8.756222611e-04f, 8.789015119e-04f,
-8.821790719e-04f, 8.854549356e-04f, 8.887290973e-04f, 8.920015515e-04f, 8.952722926e-04f, 8.985413151e-04f, 9.018086134e-04f, 9.050741819e-04f, 9.083380151e-04f, 9.116001075e-04f,
-9.148604535e-04f, 9.181190475e-04f, 9.213758840e-04f, 9.246309575e-04f, 9.278842624e-04f, 9.311357933e-04f, 9.343855445e-04f, 9.376335106e-04f, 9.408796860e-04f, 9.441240652e-04f,
-9.473666428e-04f, 9.506074131e-04f, 9.538463708e-04f, 9.570835102e-04f, 9.603188259e-04f, 9.635523125e-04f, 9.667839643e-04f, 9.700137759e-04f, 9.732417419e-04f, 9.764678567e-04f,
-9.796921149e-04f, 9.829145109e-04f, 9.861350394e-04f, 9.893536948e-04f, 9.925704717e-04f, 9.957853647e-04f, 9.989983682e-04f, 1.002209477e-03f, 1.005418685e-03f, 1.008625988e-03f,
-1.011831379e-03f, 1.015034853e-03f, 1.018236406e-03f, 1.021436031e-03f, 1.024633723e-03f, 1.027829476e-03f, 1.031023286e-03f, 1.034215147e-03f, 1.037405053e-03f, 1.040592998e-03f,
-1.043778979e-03f, 1.046962988e-03f, 1.050145022e-03f, 1.053325073e-03f, 1.056503138e-03f, 1.059679210e-03f, 1.062853284e-03f, 1.066025355e-03f, 1.069195417e-03f, 1.072363466e-03f,
-1.075529495e-03f, 1.078693500e-03f, 1.081855474e-03f, 1.085015413e-03f, 1.088173311e-03f, 1.091329163e-03f, 1.094482964e-03f, 1.097634708e-03f, 1.100784389e-03f, 1.103932003e-03f,
-1.107077545e-03f, 1.110221008e-03f, 1.113362387e-03f, 1.116501678e-03f, 1.119638875e-03f, 1.122773972e-03f, 1.125906965e-03f, 1.129037848e-03f, 1.132166615e-03f, 1.135293262e-03f,
-1.138417782e-03f, 1.141540172e-03f, 1.144660425e-03f, 1.147778536e-03f, 1.150894500e-03f, 1.154008312e-03f, 1.157119966e-03f, 1.160229457e-03f, 1.163336781e-03f, 1.166441930e-03f,
-1.169544902e-03f, 1.172645689e-03f, 1.175744287e-03f, 1.178840691e-03f, 1.181934895e-03f, 1.185026894e-03f, 1.188116684e-03f, 1.191204258e-03f, 1.194289611e-03f, 1.197372739e-03f,
-1.200453636e-03f, 1.203532297e-03f, 1.206608716e-03f, 1.209682889e-03f, 1.212754810e-03f, 1.215824474e-03f, 1.218891876e-03f, 1.221957010e-03f, 1.225019872e-03f, 1.228080457e-03f,
-1.231138759e-03f, 1.234194772e-03f, 1.237248493e-03f, 1.240299915e-03f, 1.243349034e-03f, 1.246395844e-03f, 1.249440340e-03f, 1.252482518e-03f, 1.255522371e-03f, 1.258559895e-03f,
-1.261595085e-03f, 1.264627936e-03f, 1.267658442e-03f, 1.270686598e-03f, 1.273712399e-03f, 1.276735841e-03f, 1.279756918e-03f, 1.282775624e-03f, 1.285791956e-03f, 1.288805907e-03f,
-1.291817473e-03f, 1.294826648e-03f, 1.297833428e-03f, 1.300837807e-03f, 1.303839781e-03f, 1.306839344e-03f, 1.309836491e-03f, 1.312831218e-03f, 1.315823518e-03f, 1.318813388e-03f,
-1.321800822e-03f, 1.324785814e-03f, 1.327768361e-03f, 1.330748457e-03f, 1.333726096e-03f, 1.336701275e-03f, 1.339673987e-03f, 1.342644229e-03f, 1.345611994e-03f, 1.348577278e-03f,
-1.351540076e-03f, 1.354500383e-03f, 1.357458194e-03f, 1.360413504e-03f, 1.363366308e-03f, 1.366316601e-03f, 1.369264378e-03f, 1.372209634e-03f, 1.375152364e-03f, 1.378092563e-03f,
-1.381030226e-03f, 1.383965349e-03f, 1.386897926e-03f, 1.389827952e-03f, 1.392755423e-03f, 1.395680333e-03f, 1.398602678e-03f, 1.401522453e-03f, 1.404439653e-03f, 1.407354272e-03f,
-1.410266306e-03f, 1.413175751e-03f, 1.416082600e-03f, 1.418986850e-03f, 1.421888495e-03f, 1.424787531e-03f, 1.427683953e-03f, 1.430577755e-03f, 1.433468933e-03f, 1.436357482e-03f,
-1.439243398e-03f, 1.442126674e-03f, 1.445007308e-03f, 1.447885293e-03f, 1.450760625e-03f, 1.453633299e-03f, 1.456503310e-03f, 1.459370653e-03f, 1.462235324e-03f, 1.465097318e-03f,
-1.467956629e-03f, 1.470813254e-03f, 1.473667187e-03f, 1.476518424e-03f, 1.479366959e-03f, 1.482212789e-03f, 1.485055907e-03f, 1.487896310e-03f, 1.490733993e-03f, 1.493568951e-03f,
-1.496401178e-03f, 1.499230672e-03f, 1.502057425e-03f, 1.504881435e-03f, 1.507702696e-03f, 1.510521203e-03f, 1.513336952e-03f, 1.516149938e-03f, 1.518960156e-03f, 1.521767602e-03f,
-1.524572271e-03f, 1.527374157e-03f, 1.530173258e-03f, 1.532969567e-03f, 1.535763080e-03f, 1.538553792e-03f, 1.541341699e-03f, 1.544126796e-03f, 1.546909079e-03f, 1.549688542e-03f,
-1.552465181e-03f, 1.555238992e-03f, 1.558009970e-03f, 1.560778109e-03f, 1.563543406e-03f, 1.566305856e-03f, 1.569065455e-03f, 1.571822196e-03f, 1.574576077e-03f, 1.577327092e-03f,
-1.580075237e-03f, 1.582820508e-03f, 1.585562898e-03f, 1.588302405e-03f, 1.591039023e-03f, 1.593772748e-03f, 1.596503575e-03f, 1.599231500e-03f, 1.601956518e-03f, 1.604678625e-03f,
-1.607397816e-03f, 1.610114086e-03f, 1.612827431e-03f, 1.615537847e-03f, 1.618245328e-03f, 1.620949871e-03f, 1.623651470e-03f, 1.626350122e-03f, 1.629045822e-03f, 1.631738565e-03f,
-1.634428346e-03f, 1.637115162e-03f, 1.639799008e-03f, 1.642479879e-03f, 1.645157771e-03f, 1.647832680e-03f, 1.650504600e-03f, 1.653173528e-03f, 1.655839459e-03f, 1.658502388e-03f,
-1.661162312e-03f, 1.663819225e-03f, 1.666473123e-03f, 1.669124002e-03f, 1.671771858e-03f, 1.674416685e-03f, 1.677058480e-03f, 1.679697238e-03f, 1.682332955e-03f, 1.684965626e-03f,
-1.687595248e-03f, 1.690221814e-03f, 1.692845322e-03f, 1.695465767e-03f, 1.698083144e-03f, 1.700697450e-03f, 1.703308679e-03f, 1.705916827e-03f, 1.708521890e-03f, 1.711123864e-03f,
-1.713722745e-03f, 1.716318527e-03f, 1.718911208e-03f, 1.721500781e-03f, 1.724087244e-03f, 1.726670591e-03f, 1.729250819e-03f, 1.731827923e-03f, 1.734401899e-03f, 1.736972742e-03f,
-1.739540449e-03f, 1.742105015e-03f, 1.744666435e-03f, 1.747224706e-03f, 1.749779824e-03f, 1.752331783e-03f, 1.754880580e-03f, 1.757426211e-03f, 1.759968671e-03f, 1.762507956e-03f,
-1.765044061e-03f, 1.767576984e-03f, 1.770106719e-03f, 1.772633262e-03f, 1.775156609e-03f, 1.777676755e-03f, 1.780193698e-03f, 1.782707432e-03f, 1.785217953e-03f, 1.787725257e-03f,
-1.790229340e-03f, 1.792730198e-03f, 1.795227826e-03f, 1.797722221e-03f, 1.800213379e-03f, 1.802701294e-03f, 1.805185964e-03f, 1.807667383e-03f, 1.810145548e-03f, 1.812620455e-03f,
-1.815092100e-03f, 1.817560478e-03f, 1.820025585e-03f, 1.822487418e-03f, 1.824945972e-03f, 1.827401243e-03f, 1.829853228e-03f, 1.832301921e-03f, 1.834747319e-03f, 1.837189418e-03f,
-1.839628214e-03f, 1.842063703e-03f, 1.844495881e-03f, 1.846924743e-03f, 1.849350286e-03f, 1.851772506e-03f, 1.854191398e-03f, 1.856606959e-03f, 1.859019185e-03f, 1.861428072e-03f,
-1.863833615e-03f, 1.866235811e-03f, 1.868634656e-03f, 1.871030145e-03f, 1.873422275e-03f, 1.875811042e-03f, 1.878196442e-03f, 1.880578471e-03f, 1.882957125e-03f, 1.885332400e-03f,
-1.887704293e-03f, 1.890072798e-03f, 1.892437913e-03f, 1.894799633e-03f, 1.897157955e-03f, 1.899512874e-03f, 1.901864387e-03f, 1.904212490e-03f, 1.906557179e-03f, 1.908898450e-03f,
-1.911236299e-03f, 1.913570722e-03f, 1.915901716e-03f, 1.918229276e-03f, 1.920553400e-03f, 1.922874082e-03f, 1.925191319e-03f, 1.927505108e-03f, 1.929815444e-03f, 1.932122324e-03f,
-1.934425744e-03f, 1.936725700e-03f, 1.939022188e-03f, 1.941315205e-03f, 1.943604746e-03f, 1.945890808e-03f, 1.948173388e-03f, 1.950452481e-03f, 1.952728083e-03f, 1.955000192e-03f,
-1.957268802e-03f, 1.959533911e-03f, 1.961795515e-03f, 1.964053609e-03f, 1.966308191e-03f, 1.968559257e-03f, 1.970806802e-03f, 1.973050823e-03f, 1.975291317e-03f, 1.977528280e-03f,
-1.979761707e-03f, 1.981991596e-03f, 1.984217943e-03f, 1.986440744e-03f, 1.988659995e-03f, 1.990875693e-03f, 1.993087834e-03f, 1.995296414e-03f, 1.997501431e-03f, 1.999702879e-03f,
-2.001900757e-03f, 2.004095059e-03f, 2.006285782e-03f, 2.008472924e-03f, 2.010656479e-03f, 2.012836445e-03f, 2.015012819e-03f, 2.017185595e-03f, 2.019354772e-03f, 2.021520345e-03f,
-2.023682310e-03f, 2.025840665e-03f, 2.027995406e-03f, 2.030146529e-03f, 2.032294030e-03f, 2.034437907e-03f, 2.036578155e-03f, 2.038714771e-03f, 2.040847751e-03f, 2.042977093e-03f,
-2.045102793e-03f, 2.047224846e-03f, 2.049343250e-03f, 2.051458002e-03f, 2.053569097e-03f, 2.055676532e-03f, 2.057780304e-03f, 2.059880409e-03f, 2.061976845e-03f, 2.064069607e-03f,
-2.066158691e-03f, 2.068244096e-03f, 2.070325817e-03f, 2.072403850e-03f, 2.074478193e-03f, 2.076548842e-03f, 2.078615794e-03f, 2.080679045e-03f, 2.082738592e-03f, 2.084794431e-03f,
-2.086846560e-03f, 2.088894974e-03f, 2.090939671e-03f, 2.092980647e-03f, 2.095017899e-03f, 2.097051423e-03f, 2.099081217e-03f, 2.101107276e-03f, 2.103129598e-03f, 2.105148179e-03f,
-2.107163016e-03f, 2.109174106e-03f, 2.111181445e-03f, 2.113185031e-03f, 2.115184859e-03f, 2.117180926e-03f, 2.119173231e-03f, 2.121161768e-03f, 2.123146535e-03f, 2.125127528e-03f,
-2.127104745e-03f, 2.129078183e-03f, 2.131047837e-03f, 2.133013705e-03f, 2.134975783e-03f, 2.136934069e-03f, 2.138888559e-03f, 2.140839250e-03f, 2.142786139e-03f, 2.144729223e-03f,
-2.146668498e-03f, 2.148603961e-03f, 2.150535610e-03f, 2.152463440e-03f, 2.154387450e-03f, 2.156307636e-03f, 2.158223994e-03f, 2.160136522e-03f, 2.162045216e-03f, 2.163950073e-03f,
-2.165851091e-03f, 2.167748267e-03f, 2.169641596e-03f, 2.171531076e-03f, 2.173416704e-03f, 2.175298478e-03f, 2.177176393e-03f, 2.179050447e-03f, 2.180920637e-03f, 2.182786959e-03f,
-2.184649412e-03f, 2.186507991e-03f, 2.188362694e-03f, 2.190213517e-03f, 2.192060459e-03f, 2.193903515e-03f, 2.195742683e-03f, 2.197577959e-03f, 2.199409342e-03f, 2.201236827e-03f,
-2.203060413e-03f, 2.204880095e-03f, 2.206695871e-03f, 2.208507738e-03f, 2.210315694e-03f, 2.212119735e-03f, 2.213919858e-03f, 2.215716060e-03f, 2.217508339e-03f, 2.219296692e-03f,
-2.221081116e-03f, 2.222861607e-03f, 2.224638163e-03f, 2.226410782e-03f, 2.228179460e-03f, 2.229944194e-03f, 2.231704982e-03f, 2.233461820e-03f, 2.235214707e-03f, 2.236963638e-03f,
-2.238708612e-03f, 2.240449625e-03f, 2.242186675e-03f, 2.243919759e-03f, 2.245648874e-03f, 2.247374018e-03f, 2.249095187e-03f, 2.250812378e-03f, 2.252525590e-03f, 2.254234819e-03f,
-2.255940062e-03f, 2.257641318e-03f, 2.259338582e-03f, 2.261031853e-03f, 2.262721127e-03f, 2.264406402e-03f, 2.266087675e-03f, 2.267764944e-03f, 2.269438206e-03f, 2.271107458e-03f,
-2.272772697e-03f, 2.274433921e-03f, 2.276091127e-03f, 2.277744313e-03f, 2.279393476e-03f, 2.281038612e-03f, 2.282679721e-03f, 2.284316798e-03f, 2.285949841e-03f, 2.287578849e-03f,
-2.289203817e-03f, 2.290824744e-03f, 2.292441627e-03f, 2.294054463e-03f, 2.295663250e-03f, 2.297267985e-03f, 2.298868666e-03f, 2.300465289e-03f, 2.302057854e-03f, 2.303646356e-03f,
-2.305230794e-03f, 2.306811165e-03f, 2.308387466e-03f, 2.309959695e-03f, 2.311527849e-03f, 2.313091927e-03f, 2.314651924e-03f, 2.316207840e-03f, 2.317759671e-03f, 2.319307416e-03f,
-2.320851070e-03f, 2.322390633e-03f, 2.323926102e-03f, 2.325457473e-03f, 2.326984746e-03f, 2.328507916e-03f, 2.330026983e-03f, 2.331541943e-03f, 2.333052795e-03f, 2.334559535e-03f,
-2.336062161e-03f, 2.337560671e-03f, 2.339055063e-03f, 2.340545334e-03f, 2.342031482e-03f, 2.343513505e-03f, 2.344991399e-03f, 2.346465164e-03f, 2.347934796e-03f, 2.349400293e-03f,
-2.350861652e-03f, 2.352318873e-03f, 2.353771951e-03f, 2.355220886e-03f, 2.356665674e-03f, 2.358106314e-03f, 2.359542803e-03f, 2.360975138e-03f, 2.362403318e-03f, 2.363827341e-03f,
-2.365247203e-03f, 2.366662904e-03f, 2.368074440e-03f, 2.369481809e-03f, 2.370885010e-03f, 2.372284040e-03f, 2.373678896e-03f, 2.375069577e-03f, 2.376456080e-03f, 2.377838404e-03f,
-2.379216546e-03f, 2.380590503e-03f, 2.381960275e-03f, 2.383325857e-03f, 2.384687250e-03f, 2.386044450e-03f, 2.387397454e-03f, 2.388746262e-03f, 2.390090871e-03f, 2.391431279e-03f,
-2.392767484e-03f, 2.394099483e-03f, 2.395427275e-03f, 2.396750857e-03f, 2.398070228e-03f, 2.399385386e-03f, 2.400696327e-03f, 2.402003051e-03f, 2.403305555e-03f, 2.404603838e-03f,
-2.405897896e-03f, 2.407187729e-03f, 2.408473334e-03f, 2.409754709e-03f, 2.411031853e-03f, 2.412304763e-03f, 2.413573436e-03f, 2.414837873e-03f, 2.416098069e-03f, 2.417354024e-03f,
-2.418605735e-03f, 2.419853201e-03f, 2.421096419e-03f, 2.422335388e-03f, 2.423570105e-03f, 2.424800570e-03f, 2.426026779e-03f, 2.427248731e-03f, 2.428466424e-03f, 2.429679857e-03f,
-2.430889026e-03f, 2.432093932e-03f, 2.433294570e-03f, 2.434490941e-03f, 2.435683042e-03f, 2.436870870e-03f, 2.438054425e-03f, 2.439233704e-03f, 2.440408706e-03f, 2.441579429e-03f,
-2.442745871e-03f, 2.443908029e-03f, 2.445065904e-03f, 2.446219492e-03f, 2.447368792e-03f, 2.448513802e-03f, 2.449654520e-03f, 2.450790945e-03f, 2.451923075e-03f, 2.453050908e-03f,
-2.454174443e-03f, 2.455293677e-03f, 2.456408609e-03f, 2.457519238e-03f, 2.458625561e-03f, 2.459727577e-03f, 2.460825285e-03f, 2.461918682e-03f, 2.463007767e-03f, 2.464092538e-03f,
-2.465172993e-03f, 2.466249132e-03f, 2.467320952e-03f, 2.468388452e-03f, 2.469451630e-03f, 2.470510484e-03f, 2.471565014e-03f, 2.472615216e-03f, 2.473661091e-03f, 2.474702635e-03f,
-2.475739848e-03f, 2.476772728e-03f, 2.477801273e-03f, 2.478825482e-03f, 2.479845354e-03f, 2.480860886e-03f, 2.481872078e-03f, 2.482878927e-03f, 2.483881433e-03f, 2.484879593e-03f,
-2.485873407e-03f, 2.486862872e-03f, 2.487847988e-03f, 2.488828752e-03f, 2.489805164e-03f, 2.490777222e-03f, 2.491744924e-03f, 2.492708269e-03f, 2.493667255e-03f, 2.494621882e-03f,
-2.495572147e-03f, 2.496518050e-03f, 2.497459588e-03f, 2.498396761e-03f, 2.499329567e-03f, 2.500258005e-03f, 2.501182073e-03f, 2.502101770e-03f, 2.503017095e-03f, 2.503928046e-03f,
-2.504834621e-03f, 2.505736821e-03f, 2.506634642e-03f, 2.507528085e-03f, 2.508417147e-03f, 2.509301827e-03f, 2.510182125e-03f, 2.511058038e-03f, 2.511929565e-03f, 2.512796706e-03f,
-2.513659458e-03f, 2.514517821e-03f, 2.515371794e-03f, 2.516221374e-03f, 2.517066562e-03f, 2.517907355e-03f, 2.518743752e-03f, 2.519575753e-03f, 2.520403356e-03f, 2.521226559e-03f,
-2.522045363e-03f, 2.522859764e-03f, 2.523669763e-03f, 2.524475358e-03f, 2.525276548e-03f, 2.526073331e-03f, 2.526865708e-03f, 2.527653675e-03f, 2.528437233e-03f, 2.529216381e-03f,
-2.529991116e-03f, 2.530761439e-03f, 2.531527347e-03f, 2.532288840e-03f, 2.533045917e-03f, 2.533798577e-03f, 2.534546818e-03f, 2.535290639e-03f, 2.536030041e-03f, 2.536765020e-03f,
-2.537495577e-03f, 2.538221711e-03f, 2.538943419e-03f, 2.539660702e-03f, 2.540373559e-03f, 2.541081987e-03f, 2.541785987e-03f, 2.542485558e-03f, 2.543180697e-03f, 2.543871405e-03f,
-2.544557681e-03f, 2.545239523e-03f, 2.545916931e-03f, 2.546589903e-03f, 2.547258439e-03f, 2.547922537e-03f, 2.548582198e-03f, 2.549237419e-03f, 2.549888200e-03f, 2.550534541e-03f,
-2.551176440e-03f, 2.551813896e-03f, 2.552446908e-03f, 2.553075477e-03f, 2.553699600e-03f, 2.554319277e-03f, 2.554934507e-03f, 2.555545289e-03f, 2.556151623e-03f, 2.556753508e-03f,
-2.557350942e-03f, 2.557943926e-03f, 2.558532457e-03f, 2.559116537e-03f, 2.559696162e-03f, 2.560271334e-03f, 2.560842051e-03f, 2.561408313e-03f, 2.561970118e-03f, 2.562527466e-03f,
-2.563080356e-03f, 2.563628787e-03f, 2.564172760e-03f, 2.564712272e-03f, 2.565247324e-03f, 2.565777915e-03f, 2.566304043e-03f, 2.566825709e-03f, 2.567342911e-03f, 2.567855650e-03f,
-2.568363924e-03f, 2.568867732e-03f, 2.569367075e-03f, 2.569861951e-03f, 2.570352360e-03f, 2.570838301e-03f, 2.571319773e-03f, 2.571796777e-03f, 2.572269311e-03f, 2.572737375e-03f,
-2.573200968e-03f, 2.573660089e-03f, 2.574114739e-03f, 2.574564917e-03f, 2.575010621e-03f, 2.575451852e-03f, 2.575888609e-03f, 2.576320891e-03f, 2.576748699e-03f, 2.577172031e-03f,
-2.577590886e-03f, 2.578005265e-03f, 2.578415168e-03f, 2.578820592e-03f, 2.579221539e-03f, 2.579618007e-03f, 2.580009996e-03f, 2.580397506e-03f, 2.580780537e-03f, 2.581159087e-03f,
-2.581533156e-03f, 2.581902745e-03f, 2.582267852e-03f, 2.582628477e-03f, 2.582984620e-03f, 2.583336281e-03f, 2.583683458e-03f, 2.584026152e-03f, 2.584364363e-03f, 2.584698089e-03f,
-2.585027332e-03f, 2.585352089e-03f, 2.585672362e-03f, 2.585988149e-03f, 2.586299450e-03f, 2.586606266e-03f, 2.586908595e-03f, 2.587206438e-03f, 2.587499794e-03f, 2.587788663e-03f,
-2.588073044e-03f, 2.588352938e-03f, 2.588628344e-03f, 2.588899262e-03f, 2.589165692e-03f, 2.589427633e-03f, 2.589685085e-03f, 2.589938049e-03f, 2.590186523e-03f, 2.590430508e-03f,
-2.590670003e-03f, 2.590905009e-03f, 2.591135524e-03f, 2.591361550e-03f, 2.591583085e-03f, 2.591800130e-03f, 2.592012685e-03f, 2.592220749e-03f, 2.592424322e-03f, 2.592623404e-03f,
-2.592817996e-03f, 2.593008096e-03f, 2.593193705e-03f, 2.593374823e-03f, 2.593551449e-03f, 2.593723584e-03f, 2.593891228e-03f, 2.594054380e-03f, 2.594213041e-03f, 2.594367210e-03f,
-2.594516887e-03f, 2.594662073e-03f, 2.594802767e-03f, 2.594938969e-03f, 2.595070680e-03f, 2.595197899e-03f, 2.595320626e-03f, 2.595438862e-03f, 2.595552606e-03f, 2.595661858e-03f,
-2.595766619e-03f, 2.595866889e-03f, 2.595962667e-03f, 2.596053954e-03f, 2.596140750e-03f, 2.596223054e-03f, 2.596300868e-03f, 2.596374190e-03f, 2.596443022e-03f, 2.596507363e-03f,
-2.596567213e-03f, 2.596622573e-03f, 2.596673442e-03f, 2.596719822e-03f, 2.596761711e-03f, 2.596799110e-03f, 2.596832020e-03f, 2.596860440e-03f, 2.596884371e-03f, 2.596903813e-03f,
-2.596918766e-03f, 2.596929230e-03f, 2.596935205e-03f, 2.596936693e-03f, 2.596933692e-03f, 2.596926204e-03f, 2.596914227e-03f, 2.596897764e-03f, 2.596876814e-03f, 2.596851377e-03f,
-2.596821453e-03f, 2.596787043e-03f, 2.596748147e-03f, 2.596704766e-03f, 2.596656899e-03f, 2.596604548e-03f, 2.596547712e-03f, 2.596486391e-03f, 2.596420587e-03f, 2.596350299e-03f,
-2.596275527e-03f, 2.596196273e-03f, 2.596112536e-03f, 2.596024317e-03f, 2.595931617e-03f, 2.595834435e-03f, 2.595732772e-03f, 2.595626628e-03f, 2.595516005e-03f, 2.595400902e-03f,
-2.595281319e-03f, 2.595157258e-03f, 2.595028718e-03f, 2.594895700e-03f, 2.594758205e-03f, 2.594616233e-03f, 2.594469785e-03f, 2.594318860e-03f, 2.594163460e-03f, 2.594003585e-03f,
-2.593839236e-03f, 2.593670412e-03f, 2.593497115e-03f, 2.593319346e-03f, 2.593137104e-03f, 2.592950390e-03f, 2.592759204e-03f, 2.592563548e-03f, 2.592363422e-03f, 2.592158827e-03f,
-2.591949762e-03f, 2.591736229e-03f, 2.591518229e-03f, 2.591295761e-03f, 2.591068827e-03f, 2.590837427e-03f, 2.590601561e-03f, 2.590361231e-03f, 2.590116437e-03f, 2.589867180e-03f,
-2.589613460e-03f, 2.589355278e-03f, 2.589092635e-03f, 2.588825531e-03f, 2.588553968e-03f, 2.588277945e-03f, 2.587997463e-03f, 2.587712524e-03f, 2.587423128e-03f, 2.587129276e-03f,
-2.586830968e-03f, 2.586528205e-03f, 2.586220988e-03f, 2.585909318e-03f, 2.585593195e-03f, 2.585272621e-03f, 2.584947596e-03f, 2.584618120e-03f, 2.584284195e-03f, 2.583945822e-03f,
-2.583603001e-03f, 2.583255733e-03f, 2.582904019e-03f, 2.582547860e-03f, 2.582187256e-03f, 2.581822209e-03f, 2.581452720e-03f, 2.581078788e-03f, 2.580700416e-03f, 2.580317603e-03f,
-2.579930352e-03f, 2.579538662e-03f, 2.579142535e-03f, 2.578741972e-03f, 2.578336973e-03f, 2.577927540e-03f, 2.577513673e-03f, 2.577095373e-03f, 2.576672642e-03f, 2.576245480e-03f,
-2.575813889e-03f, 2.575377868e-03f, 2.574937420e-03f, 2.574492545e-03f, 2.574043245e-03f, 2.573589519e-03f, 2.573131370e-03f, 2.572668798e-03f, 2.572201804e-03f, 2.571730390e-03f,
-2.571254556e-03f, 2.570774304e-03f, 2.570289634e-03f, 2.569800548e-03f, 2.569307046e-03f, 2.568809130e-03f, 2.568306801e-03f, 2.567800060e-03f, 2.567288908e-03f, 2.566773346e-03f,
-2.566253375e-03f, 2.565728997e-03f, 2.565200212e-03f, 2.564667023e-03f, 2.564129428e-03f, 2.563587431e-03f, 2.563041033e-03f, 2.562490233e-03f, 2.561935034e-03f, 2.561375437e-03f,
-2.560811442e-03f, 2.560243052e-03f, 2.559670267e-03f, 2.559093089e-03f, 2.558511519e-03f, 2.557925557e-03f, 2.557335206e-03f, 2.556740467e-03f, 2.556141340e-03f, 2.555537827e-03f,
-2.554929930e-03f, 2.554317649e-03f, 2.553700986e-03f, 2.553079942e-03f, 2.552454519e-03f, 2.551824718e-03f, 2.551190540e-03f, 2.550551986e-03f, 2.549909058e-03f, 2.549261757e-03f,
-2.548610085e-03f, 2.547954042e-03f, 2.547293631e-03f, 2.546628852e-03f, 2.545959708e-03f, 2.545286198e-03f, 2.544608325e-03f, 2.543926091e-03f, 2.543239496e-03f, 2.542548542e-03f,
-2.541853230e-03f, 2.541153562e-03f, 2.540449540e-03f, 2.539741164e-03f, 2.539028436e-03f, 2.538311358e-03f, 2.537589931e-03f, 2.536864157e-03f, 2.536134036e-03f, 2.535399571e-03f,
-2.534660763e-03f, 2.533917614e-03f, 2.533170125e-03f, 2.532418297e-03f, 2.531662132e-03f, 2.530901633e-03f, 2.530136799e-03f, 2.529367633e-03f, 2.528594136e-03f, 2.527816310e-03f,
-2.527034156e-03f, 2.526247677e-03f, 2.525456873e-03f, 2.524661746e-03f, 2.523862298e-03f, 2.523058531e-03f, 2.522250445e-03f, 2.521438043e-03f, 2.520621326e-03f, 2.519800296e-03f,
-2.518974955e-03f, 2.518145304e-03f, 2.517311345e-03f, 2.516473079e-03f, 2.515630509e-03f, 2.514783635e-03f, 2.513932460e-03f, 2.513076986e-03f, 2.512217213e-03f, 2.511353144e-03f,
-2.510484780e-03f, 2.509612124e-03f, 2.508735176e-03f, 2.507853939e-03f, 2.506968415e-03f, 2.506078604e-03f, 2.505184509e-03f, 2.504286132e-03f, 2.503383475e-03f, 2.502476539e-03f,
-2.501565325e-03f, 2.500649837e-03f, 2.499730075e-03f, 2.498806041e-03f, 2.497877738e-03f, 2.496945167e-03f, 2.496008330e-03f, 2.495067228e-03f, 2.494121865e-03f, 2.493172240e-03f,
-2.492218357e-03f, 2.491260217e-03f, 2.490297823e-03f, 2.489331175e-03f, 2.488360276e-03f, 2.487385128e-03f, 2.486405733e-03f, 2.485422092e-03f, 2.484434208e-03f, 2.483442082e-03f,
-2.482445716e-03f, 2.481445113e-03f, 2.480440274e-03f, 2.479431202e-03f, 2.478417898e-03f, 2.477400363e-03f, 2.476378601e-03f, 2.475352614e-03f, 2.474322402e-03f, 2.473287968e-03f,
-2.472249315e-03f, 2.471206444e-03f, 2.470159357e-03f, 2.469108056e-03f, 2.468052544e-03f, 2.466992822e-03f, 2.465928892e-03f, 2.464860757e-03f, 2.463788418e-03f, 2.462711878e-03f,
-2.461631138e-03f, 2.460546202e-03f, 2.459457070e-03f, 2.458363745e-03f, 2.457266229e-03f, 2.456164524e-03f, 2.455058633e-03f, 2.453948557e-03f, 2.452834298e-03f, 2.451715860e-03f,
-2.450593243e-03f, 2.449466450e-03f, 2.448335484e-03f, 2.447200345e-03f, 2.446061038e-03f, 2.444917563e-03f, 2.443769923e-03f, 2.442618120e-03f, 2.441462157e-03f, 2.440302035e-03f,
-2.439137757e-03f, 2.437969325e-03f, 2.436796741e-03f, 2.435620008e-03f, 2.434439127e-03f, 2.433254102e-03f, 2.432064934e-03f, 2.430871625e-03f, 2.429674178e-03f, 2.428472596e-03f,
-2.427266880e-03f, 2.426057032e-03f, 2.424843056e-03f, 2.423624952e-03f, 2.422402725e-03f, 2.421176376e-03f, 2.419945907e-03f, 2.418711320e-03f, 2.417472619e-03f, 2.416229805e-03f,
-2.414982881e-03f, 2.413731848e-03f, 2.412476711e-03f, 2.411217470e-03f, 2.409954129e-03f, 2.408686689e-03f, 2.407415153e-03f, 2.406139524e-03f, 2.404859804e-03f, 2.403575995e-03f,
-2.402288100e-03f, 2.400996121e-03f, 2.399700061e-03f, 2.398399922e-03f, 2.397095706e-03f, 2.395787417e-03f, 2.394475056e-03f, 2.393158626e-03f, 2.391838130e-03f, 2.390513569e-03f,
-2.389184948e-03f, 2.387852267e-03f, 2.386515529e-03f, 2.385174738e-03f, 2.383829896e-03f, 2.382481004e-03f, 2.381128066e-03f, 2.379771085e-03f, 2.378410062e-03f, 2.377045000e-03f,
-2.375675903e-03f, 2.374302771e-03f, 2.372925609e-03f, 2.371544419e-03f, 2.370159203e-03f, 2.368769964e-03f, 2.367376704e-03f, 2.365979427e-03f, 2.364578134e-03f, 2.363172828e-03f,
-2.361763513e-03f, 2.360350190e-03f, 2.358932862e-03f, 2.357511533e-03f, 2.356086204e-03f, 2.354656878e-03f, 2.353223559e-03f, 2.351786248e-03f, 2.350344949e-03f, 2.348899663e-03f,
-2.347450394e-03f, 2.345997145e-03f, 2.344539918e-03f, 2.343078716e-03f, 2.341613542e-03f, 2.340144398e-03f, 2.338671288e-03f, 2.337194213e-03f, 2.335713177e-03f, 2.334228182e-03f,
-2.332739232e-03f, 2.331246328e-03f, 2.329749475e-03f, 2.328248674e-03f, 2.326743928e-03f, 2.325235241e-03f, 2.323722615e-03f, 2.322206052e-03f, 2.320685557e-03f, 2.319161130e-03f,
-2.317632776e-03f, 2.316100498e-03f, 2.314564297e-03f, 2.313024177e-03f, 2.311480141e-03f, 2.309932192e-03f, 2.308380332e-03f, 2.306824565e-03f, 2.305264893e-03f, 2.303701319e-03f,
-2.302133846e-03f, 2.300562478e-03f, 2.298987216e-03f, 2.297408065e-03f, 2.295825026e-03f, 2.294238103e-03f, 2.292647298e-03f, 2.291052615e-03f, 2.289454057e-03f, 2.287851627e-03f,
-2.286245327e-03f, 2.284635161e-03f, 2.283021131e-03f, 2.281403240e-03f, 2.279781493e-03f, 2.278155890e-03f, 2.276526437e-03f, 2.274893135e-03f, 2.273255987e-03f, 2.271614997e-03f,
-2.269970168e-03f, 2.268321503e-03f, 2.266669004e-03f, 2.265012675e-03f, 2.263352519e-03f, 2.261688539e-03f, 2.260020738e-03f, 2.258349119e-03f, 2.256673686e-03f, 2.254994440e-03f,
-2.253311386e-03f, 2.251624527e-03f, 2.249933865e-03f, 2.248239404e-03f, 2.246541147e-03f, 2.244839097e-03f, 2.243133257e-03f, 2.241423630e-03f, 2.239710220e-03f, 2.237993029e-03f,
-2.236272061e-03f, 2.234547320e-03f, 2.232818807e-03f, 2.231086527e-03f, 2.229350482e-03f, 2.227610676e-03f, 2.225867111e-03f, 2.224119792e-03f, 2.222368722e-03f, 2.220613903e-03f,
-2.218855338e-03f, 2.217093032e-03f, 2.215326987e-03f, 2.213557207e-03f, 2.211783694e-03f, 2.210006453e-03f, 2.208225485e-03f, 2.206440796e-03f, 2.204652387e-03f, 2.202860262e-03f,
-2.201064425e-03f, 2.199264879e-03f, 2.197461627e-03f, 2.195654672e-03f, 2.193844018e-03f, 2.192029667e-03f, 2.190211625e-03f, 2.188389893e-03f, 2.186564474e-03f, 2.184735374e-03f,
-2.182902594e-03f, 2.181066138e-03f, 2.179226009e-03f, 2.177382212e-03f, 2.175534748e-03f, 2.173683623e-03f, 2.171828838e-03f, 2.169970397e-03f, 2.168108305e-03f, 2.166242564e-03f,
-2.164373177e-03f, 2.162500148e-03f, 2.160623481e-03f, 2.158743179e-03f, 2.156859245e-03f, 2.154971683e-03f, 2.153080496e-03f, 2.151185687e-03f, 2.149287262e-03f, 2.147385221e-03f,
-2.145479570e-03f, 2.143570311e-03f, 2.141657449e-03f, 2.139740986e-03f, 2.137820926e-03f, 2.135897273e-03f, 2.133970030e-03f, 2.132039201e-03f, 2.130104789e-03f, 2.128166797e-03f,
-2.126225230e-03f, 2.124280090e-03f, 2.122331382e-03f, 2.120379109e-03f, 2.118423274e-03f, 2.116463882e-03f, 2.114500934e-03f, 2.112534436e-03f, 2.110564391e-03f, 2.108590802e-03f,
-2.106613673e-03f, 2.104633008e-03f, 2.102648810e-03f, 2.100661082e-03f, 2.098669829e-03f, 2.096675054e-03f, 2.094676761e-03f, 2.092674953e-03f, 2.090669634e-03f, 2.088660808e-03f,
-2.086648477e-03f, 2.084632647e-03f, 2.082613320e-03f, 2.080590501e-03f, 2.078564193e-03f, 2.076534399e-03f, 2.074501123e-03f, 2.072464370e-03f, 2.070424142e-03f, 2.068380443e-03f,
-2.066333278e-03f, 2.064282650e-03f, 2.062228562e-03f, 2.060171018e-03f, 2.058110023e-03f, 2.056045580e-03f, 2.053977691e-03f, 2.051906363e-03f, 2.049831597e-03f, 2.047753398e-03f,
-2.045671770e-03f, 2.043586716e-03f, 2.041498241e-03f, 2.039406347e-03f, 2.037311039e-03f, 2.035212321e-03f, 2.033110196e-03f, 2.031004668e-03f, 2.028895741e-03f, 2.026783419e-03f,
-2.024667706e-03f, 2.022548605e-03f, 2.020426121e-03f, 2.018300256e-03f, 2.016171016e-03f, 2.014038404e-03f, 2.011902423e-03f, 2.009763078e-03f, 2.007620373e-03f, 2.005474311e-03f,
-2.003324896e-03f, 2.001172132e-03f, 1.999016023e-03f, 1.996856574e-03f, 1.994693787e-03f, 1.992527667e-03f, 1.990358217e-03f, 1.988185443e-03f, 1.986009346e-03f, 1.983829933e-03f,
-1.981647205e-03f, 1.979461168e-03f, 1.977271826e-03f, 1.975079182e-03f, 1.972883240e-03f, 1.970684004e-03f, 1.968481478e-03f, 1.966275667e-03f, 1.964066573e-03f, 1.961854202e-03f,
-1.959638557e-03f, 1.957419642e-03f, 1.955197462e-03f, 1.952972019e-03f, 1.950743319e-03f, 1.948511365e-03f, 1.946276161e-03f, 1.944037711e-03f, 1.941796020e-03f, 1.939551091e-03f,
-1.937302929e-03f, 1.935051537e-03f, 1.932796919e-03f, 1.930539080e-03f, 1.928278024e-03f, 1.926013755e-03f, 1.923746276e-03f, 1.921475592e-03f, 1.919201707e-03f, 1.916924626e-03f,
-1.914644351e-03f, 1.912360888e-03f, 1.910074241e-03f, 1.907784413e-03f, 1.905491408e-03f, 1.903195232e-03f, 1.900895887e-03f, 1.898593378e-03f, 1.896287710e-03f, 1.893978886e-03f,
-1.891666911e-03f, 1.889351788e-03f, 1.887033522e-03f, 1.884712118e-03f, 1.882387578e-03f, 1.880059908e-03f, 1.877729111e-03f, 1.875395193e-03f, 1.873058156e-03f, 1.870718005e-03f,
-1.868374745e-03f, 1.866028380e-03f, 1.863678913e-03f, 1.861326349e-03f, 1.858970693e-03f, 1.856611948e-03f, 1.854250119e-03f, 1.851885210e-03f, 1.849517225e-03f, 1.847146169e-03f,
-1.844772045e-03f, 1.842394858e-03f, 1.840014613e-03f, 1.837631314e-03f, 1.835244964e-03f, 1.832855568e-03f, 1.830463131e-03f, 1.828067657e-03f, 1.825669149e-03f, 1.823267613e-03f,
-1.820863053e-03f, 1.818455472e-03f, 1.816044876e-03f, 1.813631268e-03f, 1.811214654e-03f, 1.808795036e-03f, 1.806372420e-03f, 1.803946811e-03f, 1.801518211e-03f, 1.799086626e-03f,
-1.796652060e-03f, 1.794214518e-03f, 1.791774003e-03f, 1.789330521e-03f, 1.786884075e-03f, 1.784434669e-03f, 1.781982310e-03f, 1.779526999e-03f, 1.777068743e-03f, 1.774607546e-03f,
-1.772143411e-03f, 1.769676344e-03f, 1.767206348e-03f, 1.764733428e-03f, 1.762257589e-03f, 1.759778836e-03f, 1.757297171e-03f, 1.754812600e-03f, 1.752325128e-03f, 1.749834759e-03f,
-1.747341496e-03f, 1.744845346e-03f, 1.742346312e-03f, 1.739844398e-03f, 1.737339609e-03f, 1.734831950e-03f, 1.732321426e-03f, 1.729808039e-03f, 1.727291796e-03f, 1.724772700e-03f,
-1.722250757e-03f, 1.719725970e-03f, 1.717198344e-03f, 1.714667884e-03f, 1.712134594e-03f, 1.709598478e-03f, 1.707059542e-03f, 1.704517789e-03f, 1.701973225e-03f, 1.699425854e-03f,
-1.696875680e-03f, 1.694322708e-03f, 1.691766942e-03f, 1.689208388e-03f, 1.686647049e-03f, 1.684082930e-03f, 1.681516036e-03f, 1.678946371e-03f, 1.676373941e-03f, 1.673798749e-03f,
-1.671220800e-03f, 1.668640099e-03f, 1.666056650e-03f, 1.663470458e-03f, 1.660881528e-03f, 1.658289863e-03f, 1.655695470e-03f, 1.653098352e-03f, 1.650498514e-03f, 1.647895961e-03f,
-1.645290698e-03f, 1.642682728e-03f, 1.640072057e-03f, 1.637458689e-03f, 1.634842629e-03f, 1.632223882e-03f, 1.629602452e-03f, 1.626978344e-03f, 1.624351562e-03f, 1.621722112e-03f,
-1.619089998e-03f, 1.616455225e-03f, 1.613817797e-03f, 1.611177719e-03f, 1.608534996e-03f, 1.605889633e-03f, 1.603241633e-03f, 1.600591003e-03f, 1.597937746e-03f, 1.595281868e-03f,
-1.592623372e-03f, 1.589962265e-03f, 1.587298550e-03f, 1.584632232e-03f, 1.581963317e-03f, 1.579291808e-03f, 1.576617711e-03f, 1.573941030e-03f, 1.571261770e-03f, 1.568579936e-03f,
-1.565895533e-03f, 1.563208565e-03f, 1.560519037e-03f, 1.557826955e-03f, 1.555132321e-03f, 1.552435143e-03f, 1.549735424e-03f, 1.547033169e-03f, 1.544328383e-03f, 1.541621070e-03f,
-1.538911236e-03f, 1.536198886e-03f, 1.533484024e-03f, 1.530766654e-03f, 1.528046783e-03f, 1.525324414e-03f, 1.522599553e-03f, 1.519872204e-03f, 1.517142372e-03f, 1.514410063e-03f,
-1.511675280e-03f, 1.508938029e-03f, 1.506198315e-03f, 1.503456142e-03f, 1.500711516e-03f, 1.497964440e-03f, 1.495214921e-03f, 1.492462963e-03f, 1.489708571e-03f, 1.486951749e-03f,
-1.484192503e-03f, 1.481430838e-03f, 1.478666758e-03f, 1.475900269e-03f, 1.473131375e-03f, 1.470360081e-03f, 1.467586392e-03f, 1.464810313e-03f, 1.462031849e-03f, 1.459251005e-03f,
-1.456467785e-03f, 1.453682196e-03f, 1.450894241e-03f, 1.448103925e-03f, 1.445311255e-03f, 1.442516233e-03f, 1.439718867e-03f, 1.436919159e-03f, 1.434117116e-03f, 1.431312743e-03f,
-1.428506044e-03f, 1.425697024e-03f, 1.422885688e-03f, 1.420072041e-03f, 1.417256089e-03f, 1.414437836e-03f, 1.411617288e-03f, 1.408794448e-03f, 1.405969323e-03f, 1.403141917e-03f,
-1.400312235e-03f, 1.397480282e-03f, 1.394646064e-03f, 1.391809585e-03f, 1.388970850e-03f, 1.386129865e-03f, 1.383286634e-03f, 1.380441162e-03f, 1.377593455e-03f, 1.374743517e-03f,
-1.371891354e-03f, 1.369036970e-03f, 1.366180371e-03f, 1.363321561e-03f, 1.360460547e-03f, 1.357597332e-03f, 1.354731921e-03f, 1.351864321e-03f, 1.348994536e-03f, 1.346122571e-03f,
-1.343248431e-03f, 1.340372121e-03f, 1.337493646e-03f, 1.334613012e-03f, 1.331730223e-03f, 1.328845285e-03f, 1.325958203e-03f, 1.323068981e-03f, 1.320177625e-03f, 1.317284140e-03f,
-1.314388532e-03f, 1.311490804e-03f, 1.308590963e-03f, 1.305689014e-03f, 1.302784960e-03f, 1.299878809e-03f, 1.296970565e-03f, 1.294060232e-03f, 1.291147817e-03f, 1.288233324e-03f,
-1.285316758e-03f, 1.282398125e-03f, 1.279477430e-03f, 1.276554678e-03f, 1.273629873e-03f, 1.270703022e-03f, 1.267774129e-03f, 1.264843200e-03f, 1.261910240e-03f, 1.258975253e-03f,
-1.256038246e-03f, 1.253099222e-03f, 1.250158189e-03f, 1.247215150e-03f, 1.244270110e-03f, 1.241323076e-03f, 1.238374052e-03f, 1.235423043e-03f, 1.232470055e-03f, 1.229515093e-03f,
-1.226558162e-03f, 1.223599267e-03f, 1.220638414e-03f, 1.217675607e-03f, 1.214710852e-03f, 1.211744155e-03f, 1.208775520e-03f, 1.205804952e-03f, 1.202832457e-03f, 1.199858041e-03f,
-1.196881707e-03f, 1.193903463e-03f, 1.190923312e-03f, 1.187941260e-03f, 1.184957312e-03f, 1.181971475e-03f, 1.178983752e-03f, 1.175994149e-03f, 1.173002671e-03f, 1.170009324e-03f,
-1.167014113e-03f, 1.164017044e-03f, 1.161018120e-03f, 1.158017349e-03f, 1.155014734e-03f, 1.152010282e-03f, 1.149003998e-03f, 1.145995886e-03f, 1.142985953e-03f, 1.139974203e-03f,
-1.136960642e-03f, 1.133945275e-03f, 1.130928107e-03f, 1.127909144e-03f, 1.124888392e-03f, 1.121865854e-03f, 1.118841537e-03f, 1.115815447e-03f, 1.112787587e-03f, 1.109757964e-03f,
-1.106726584e-03f, 1.103693450e-03f, 1.100658569e-03f, 1.097621946e-03f, 1.094583587e-03f, 1.091543496e-03f, 1.088501679e-03f, 1.085458141e-03f, 1.082412888e-03f, 1.079365926e-03f,
-1.076317258e-03f, 1.073266892e-03f, 1.070214831e-03f, 1.067161082e-03f, 1.064105650e-03f, 1.061048540e-03f, 1.057989758e-03f, 1.054929309e-03f, 1.051867198e-03f, 1.048803431e-03f,
-1.045738013e-03f, 1.042670950e-03f, 1.039602246e-03f, 1.036531908e-03f, 1.033459940e-03f, 1.030386349e-03f, 1.027311139e-03f, 1.024234315e-03f, 1.021155885e-03f, 1.018075851e-03f,
-1.014994221e-03f, 1.011911000e-03f, 1.008826192e-03f, 1.005739804e-03f, 1.002651840e-03f, 9.995623066e-04f, 9.964712088e-04f, 9.933785520e-04f, 9.902843417e-04f, 9.871885832e-04f,
-9.840912820e-04f, 9.809924436e-04f, 9.778920734e-04f, 9.747901768e-04f, 9.716867592e-04f, 9.685818262e-04f, 9.654753831e-04f, 9.623674354e-04f, 9.592579886e-04f, 9.561470480e-04f,
-9.530346193e-04f, 9.499207077e-04f, 9.468053189e-04f, 9.436884581e-04f, 9.405701310e-04f, 9.374503430e-04f, 9.343290995e-04f, 9.312064060e-04f, 9.280822680e-04f, 9.249566910e-04f,
-9.218296804e-04f, 9.187012418e-04f, 9.155713805e-04f, 9.124401021e-04f, 9.093074122e-04f, 9.061733160e-04f, 9.030378193e-04f, 8.999009274e-04f, 8.967626458e-04f, 8.936229801e-04f,
-8.904819357e-04f, 8.873395182e-04f, 8.841957330e-04f, 8.810505857e-04f, 8.779040817e-04f, 8.747562266e-04f, 8.716070259e-04f, 8.684564851e-04f, 8.653046097e-04f, 8.621514052e-04f,
-8.589968772e-04f, 8.558410311e-04f, 8.526838726e-04f, 8.495254071e-04f, 8.463656401e-04f, 8.432045772e-04f, 8.400422240e-04f, 8.368785858e-04f, 8.337136684e-04f, 8.305474772e-04f,
-8.273800177e-04f, 8.242112956e-04f, 8.210413163e-04f, 8.178700853e-04f, 8.146976084e-04f, 8.115238909e-04f, 8.083489384e-04f, 8.051727566e-04f, 8.019953508e-04f, 7.988167268e-04f,
-7.956368901e-04f, 7.924558461e-04f, 7.892736006e-04f, 7.860901590e-04f, 7.829055269e-04f, 7.797197099e-04f, 7.765327135e-04f, 7.733445433e-04f, 7.701552050e-04f, 7.669647040e-04f,
-7.637730459e-04f, 7.605802363e-04f, 7.573862809e-04f, 7.541911851e-04f, 7.509949546e-04f, 7.477975949e-04f, 7.445991117e-04f, 7.413995104e-04f, 7.381987968e-04f, 7.349969764e-04f,
-7.317940547e-04f, 7.285900375e-04f, 7.253849302e-04f, 7.221787385e-04f, 7.189714679e-04f, 7.157631242e-04f, 7.125537128e-04f, 7.093432394e-04f, 7.061317096e-04f, 7.029191290e-04f,
-6.997055031e-04f, 6.964908377e-04f, 6.932751383e-04f, 6.900584105e-04f, 6.868406600e-04f, 6.836218924e-04f, 6.804021132e-04f, 6.771813281e-04f, 6.739595427e-04f, 6.707367627e-04f,
-6.675129936e-04f, 6.642882411e-04f, 6.610625109e-04f, 6.578358084e-04f, 6.546081394e-04f, 6.513795096e-04f, 6.481499244e-04f, 6.449193896e-04f, 6.416879108e-04f, 6.384554936e-04f,
-6.352221437e-04f, 6.319878667e-04f, 6.287526682e-04f, 6.255165540e-04f, 6.222795295e-04f, 6.190416005e-04f, 6.158027726e-04f, 6.125630515e-04f, 6.093224427e-04f, 6.060809520e-04f,
-6.028385850e-04f, 5.995953474e-04f, 5.963512447e-04f, 5.931062827e-04f, 5.898604671e-04f, 5.866138033e-04f, 5.833662972e-04f, 5.801179544e-04f, 5.768687805e-04f, 5.736187812e-04f,
-5.703679621e-04f, 5.671163290e-04f, 5.638638874e-04f, 5.606106431e-04f, 5.573566017e-04f, 5.541017689e-04f, 5.508461503e-04f, 5.475897516e-04f, 5.443325785e-04f, 5.410746366e-04f,
-5.378159317e-04f, 5.345564694e-04f, 5.312962553e-04f, 5.280352952e-04f, 5.247735947e-04f, 5.215111594e-04f, 5.182479952e-04f, 5.149841076e-04f, 5.117195023e-04f, 5.084541851e-04f,
-5.051881615e-04f, 5.019214373e-04f, 4.986540182e-04f, 4.953859098e-04f, 4.921171179e-04f, 4.888476480e-04f, 4.855775059e-04f, 4.823066974e-04f, 4.790352280e-04f, 4.757631034e-04f,
-4.724903295e-04f, 4.692169117e-04f, 4.659428559e-04f, 4.626681678e-04f, 4.593928529e-04f, 4.561169171e-04f, 4.528403659e-04f, 4.495632052e-04f, 4.462854406e-04f, 4.430070778e-04f,
-4.397281225e-04f, 4.364485803e-04f, 4.331684571e-04f, 4.298877585e-04f, 4.266064901e-04f, 4.233246578e-04f, 4.200422672e-04f, 4.167593239e-04f, 4.134758338e-04f, 4.101918025e-04f,
-4.069072357e-04f, 4.036221391e-04f, 4.003365184e-04f, 3.970503794e-04f, 3.937637277e-04f, 3.904765690e-04f, 3.871889091e-04f, 3.839007537e-04f, 3.806121084e-04f, 3.773229790e-04f,
-3.740333712e-04f, 3.707432908e-04f, 3.674527433e-04f, 3.641617346e-04f, 3.608702703e-04f, 3.575783561e-04f, 3.542859978e-04f, 3.509932011e-04f, 3.476999717e-04f, 3.444063153e-04f,
-3.411122376e-04f, 3.378177444e-04f, 3.345228413e-04f, 3.312275341e-04f, 3.279318285e-04f, 3.246357302e-04f, 3.213392449e-04f, 3.180423783e-04f, 3.147451362e-04f, 3.114475243e-04f,
-3.081495483e-04f, 3.048512139e-04f, 3.015525269e-04f, 2.982534929e-04f, 2.949541177e-04f, 2.916544069e-04f, 2.883543664e-04f, 2.850540019e-04f, 2.817533190e-04f, 2.784523235e-04f,
-2.751510210e-04f, 2.718494175e-04f, 2.685475184e-04f, 2.652453297e-04f, 2.619428569e-04f, 2.586401058e-04f, 2.553370822e-04f, 2.520337918e-04f, 2.487302402e-04f, 2.454264333e-04f,
-2.421223766e-04f, 2.388180761e-04f, 2.355135373e-04f, 2.322087660e-04f, 2.289037680e-04f, 2.255985489e-04f, 2.222931145e-04f, 2.189874705e-04f, 2.156816227e-04f, 2.123755766e-04f,
-2.090693382e-04f, 2.057629131e-04f, 2.024563070e-04f, 1.991495256e-04f, 1.958425747e-04f, 1.925354600e-04f, 1.892281873e-04f, 1.859207622e-04f, 1.826131904e-04f, 1.793054778e-04f,
-1.759976300e-04f, 1.726896527e-04f, 1.693815517e-04f, 1.660733327e-04f, 1.627650014e-04f, 1.594565636e-04f, 1.561480249e-04f, 1.528393911e-04f, 1.495306680e-04f, 1.462218612e-04f,
-1.429129764e-04f, 1.396040194e-04f, 1.362949960e-04f, 1.329859117e-04f, 1.296767724e-04f, 1.263675838e-04f, 1.230583516e-04f, 1.197490815e-04f, 1.164397793e-04f, 1.131304506e-04f,
-1.098211012e-04f, 1.065117368e-04f, 1.032023631e-04f, 9.989298586e-05f, 9.658361079e-05f, 9.327424361e-05f, 8.996489004e-05f, 8.665555579e-05f, 8.334624658e-05f, 8.003696814e-05f,
-7.672772617e-05f, 7.341852640e-05f, 7.010937454e-05f, 6.680027632e-05f, 6.349123744e-05f, 6.018226362e-05f, 5.687336059e-05f, 5.356453405e-05f, 5.025578972e-05f, 4.694713331e-05f,
-4.363857055e-05f, 4.033010713e-05f, 3.702174878e-05f, 3.371350120e-05f, 3.040537012e-05f, 2.709736123e-05f, 2.378948026e-05f, 2.048173291e-05f, 1.717412489e-05f, 1.386666191e-05f,
-1.055934969e-05f, 7.252193920e-06f, 3.945200319e-06f, 6.383745921e-07f, -2.668277554e-06f, -5.974750414e-06f, -9.281038283e-06f, -1.258713545e-05f, -1.589303623e-05f, -1.919873489e-05f,
--2.250422575e-05f, -2.580950310e-05f, -2.911456124e-05f, -3.241939447e-05f, -3.572399709e-05f, -3.902836340e-05f, -4.233248770e-05f, -4.563636429e-05f, -4.893998747e-05f, -5.224335155e-05f,
--5.554645084e-05f, -5.884927963e-05f, -6.215183224e-05f, -6.545410297e-05f, -6.875608612e-05f, -7.205777601e-05f, -7.535916695e-05f, -7.866025324e-05f, -8.196102919e-05f, -8.526148912e-05f,
--8.856162734e-05f, -9.186143816e-05f, -9.516091589e-05f, -9.846005486e-05f, -1.017588494e-04f, -1.050572937e-04f, -1.083553823e-04f, -1.116531093e-04f, -1.149504692e-04f, -1.182474562e-04f,
--1.215440647e-04f, -1.248402889e-04f, -1.281361233e-04f, -1.314315621e-04f, -1.347265996e-04f, -1.380212302e-04f, -1.413154483e-04f, -1.446092480e-04f, -1.479026239e-04f, -1.511955701e-04f,
--1.544880810e-04f, -1.577801510e-04f, -1.610717744e-04f, -1.643629456e-04f, -1.676536587e-04f, -1.709439083e-04f, -1.742336887e-04f, -1.775229941e-04f, -1.808118189e-04f, -1.841001574e-04f,
--1.873880041e-04f, -1.906753532e-04f, -1.939621991e-04f, -1.972485361e-04f, -2.005343586e-04f, -2.038196609e-04f, -2.071044375e-04f, -2.103886825e-04f, -2.136723904e-04f, -2.169555555e-04f,
--2.202381723e-04f, -2.235202349e-04f, -2.268017379e-04f, -2.300826755e-04f, -2.333630421e-04f, -2.366428321e-04f, -2.399220399e-04f, -2.432006597e-04f, -2.464786860e-04f, -2.497561131e-04f,
--2.530329355e-04f, -2.563091474e-04f, -2.595847432e-04f, -2.628597173e-04f, -2.661340641e-04f, -2.694077780e-04f, -2.726808533e-04f, -2.759532844e-04f, -2.792250656e-04f, -2.824961915e-04f,
--2.857666562e-04f, -2.890364543e-04f, -2.923055801e-04f, -2.955740280e-04f, -2.988417924e-04f, -3.021088677e-04f, -3.053752482e-04f, -3.086409283e-04f, -3.119059025e-04f, -3.151701652e-04f,
--3.184337106e-04f, -3.216965333e-04f, -3.249586276e-04f, -3.282199880e-04f, -3.314806088e-04f, -3.347404844e-04f, -3.379996092e-04f, -3.412579777e-04f, -3.445155843e-04f, -3.477724233e-04f,
--3.510284892e-04f, -3.542837763e-04f, -3.575382792e-04f, -3.607919922e-04f, -3.640449097e-04f, -3.672970262e-04f, -3.705483361e-04f, -3.737988338e-04f, -3.770485136e-04f, -3.802973702e-04f,
--3.835453978e-04f, -3.867925910e-04f, -3.900389440e-04f, -3.932844515e-04f, -3.965291078e-04f, -3.997729073e-04f, -4.030158445e-04f, -4.062579138e-04f, -4.094991097e-04f, -4.127394266e-04f,
--4.159788590e-04f, -4.192174013e-04f, -4.224550479e-04f, -4.256917934e-04f, -4.289276321e-04f, -4.321625585e-04f, -4.353965671e-04f, -4.386296524e-04f, -4.418618087e-04f, -4.450930306e-04f,
--4.483233125e-04f, -4.515526489e-04f, -4.547810342e-04f, -4.580084630e-04f, -4.612349297e-04f, -4.644604288e-04f, -4.676849547e-04f, -4.709085019e-04f, -4.741310649e-04f, -4.773526383e-04f,
--4.805732164e-04f, -4.837927937e-04f, -4.870113648e-04f, -4.902289242e-04f, -4.934454663e-04f, -4.966609856e-04f, -4.998754766e-04f, -5.030889339e-04f, -5.063013518e-04f, -5.095127250e-04f,
--5.127230480e-04f, -5.159323151e-04f, -5.191405210e-04f, -5.223476602e-04f, -5.255537271e-04f, -5.287587163e-04f, -5.319626223e-04f, -5.351654397e-04f, -5.383671629e-04f, -5.415677864e-04f,
--5.447673048e-04f, -5.479657127e-04f, -5.511630045e-04f, -5.543591748e-04f, -5.575542181e-04f, -5.607481290e-04f, -5.639409020e-04f, -5.671325316e-04f, -5.703230124e-04f, -5.735123389e-04f,
--5.767005057e-04f, -5.798875074e-04f, -5.830733384e-04f, -5.862579934e-04f, -5.894414668e-04f, -5.926237533e-04f, -5.958048474e-04f, -5.989847437e-04f, -6.021634368e-04f, -6.053409212e-04f,
--6.085171915e-04f, -6.116922422e-04f, -6.148660680e-04f, -6.180386634e-04f, -6.212100230e-04f, -6.243801414e-04f, -6.275490132e-04f, -6.307166329e-04f, -6.338829952e-04f, -6.370480946e-04f,
--6.402119258e-04f, -6.433744833e-04f, -6.465357618e-04f, -6.496957558e-04f, -6.528544600e-04f, -6.560118689e-04f, -6.591679773e-04f, -6.623227796e-04f, -6.654762705e-04f, -6.686284446e-04f,
--6.717792966e-04f, -6.749288210e-04f, -6.780770126e-04f, -6.812238658e-04f, -6.843693754e-04f, -6.875135361e-04f, -6.906563423e-04f, -6.937977888e-04f, -6.969378702e-04f, -7.000765812e-04f,
--7.032139164e-04f, -7.063498704e-04f, -7.094844379e-04f, -7.126176136e-04f, -7.157493922e-04f, -7.188797682e-04f, -7.220087363e-04f, -7.251362912e-04f, -7.282624277e-04f, -7.313871403e-04f,
--7.345104237e-04f, -7.376322726e-04f, -7.407526817e-04f, -7.438716456e-04f, -7.469891591e-04f, -7.501052169e-04f, -7.532198136e-04f, -7.563329439e-04f, -7.594446025e-04f, -7.625547842e-04f,
--7.656634836e-04f, -7.687706954e-04f, -7.718764143e-04f, -7.749806351e-04f, -7.780833525e-04f, -7.811845611e-04f, -7.842842557e-04f, -7.873824311e-04f, -7.904790819e-04f, -7.935742029e-04f,
--7.966677888e-04f, -7.997598343e-04f, -8.028503342e-04f, -8.059392833e-04f, -8.090266762e-04f, -8.121125077e-04f, -8.151967725e-04f, -8.182794655e-04f, -8.213605813e-04f, -8.244401148e-04f,
--8.275180606e-04f, -8.305944136e-04f, -8.336691685e-04f, -8.367423201e-04f, -8.398138631e-04f, -8.428837924e-04f, -8.459521027e-04f, -8.490187888e-04f, -8.520838455e-04f, -8.551472675e-04f,
--8.582090497e-04f, -8.612691869e-04f, -8.643276738e-04f, -8.673845052e-04f, -8.704396761e-04f, -8.734931811e-04f, -8.765450150e-04f, -8.795951728e-04f, -8.826436492e-04f, -8.856904390e-04f,
--8.887355370e-04f, -8.917789381e-04f, -8.948206372e-04f, -8.978606289e-04f, -9.008989083e-04f, -9.039354700e-04f, -9.069703091e-04f, -9.100034202e-04f, -9.130347983e-04f, -9.160644381e-04f,
--9.190923347e-04f, -9.221184827e-04f, -9.251428772e-04f, -9.281655128e-04f, -9.311863846e-04f, -9.342054874e-04f, -9.372228161e-04f, -9.402383655e-04f, -9.432521305e-04f, -9.462641060e-04f,
--9.492742869e-04f, -9.522826681e-04f, -9.552892445e-04f, -9.582940110e-04f, -9.612969624e-04f, -9.642980938e-04f, -9.672974000e-04f, -9.702948758e-04f, -9.732905163e-04f, -9.762843164e-04f,
--9.792762709e-04f, -9.822663748e-04f, -9.852546230e-04f, -9.882410106e-04f, -9.912255323e-04f, -9.942081831e-04f, -9.971889580e-04f, -1.000167852e-03f, -1.003144860e-03f, -1.006119977e-03f,
--1.009093198e-03f, -1.012064517e-03f, -1.015033931e-03f, -1.018001433e-03f, -1.020967019e-03f, -1.023930684e-03f, -1.026892422e-03f, -1.029852229e-03f, -1.032810100e-03f, -1.035766029e-03f,
--1.038720013e-03f, -1.041672044e-03f, -1.044622120e-03f, -1.047570234e-03f, -1.050516382e-03f, -1.053460558e-03f, -1.056402759e-03f, -1.059342978e-03f, -1.062281210e-03f, -1.065217452e-03f,
--1.068151697e-03f, -1.071083941e-03f, -1.074014179e-03f, -1.076942406e-03f, -1.079868617e-03f, -1.082792807e-03f, -1.085714971e-03f, -1.088635104e-03f, -1.091553201e-03f, -1.094469258e-03f,
--1.097383269e-03f, -1.100295229e-03f, -1.103205133e-03f, -1.106112978e-03f, -1.109018756e-03f, -1.111922465e-03f, -1.114824098e-03f, -1.117723652e-03f, -1.120621120e-03f, -1.123516498e-03f,
--1.126409782e-03f, -1.129300966e-03f, -1.132190045e-03f, -1.135077015e-03f, -1.137961870e-03f, -1.140844607e-03f, -1.143725219e-03f, -1.146603702e-03f, -1.149480052e-03f, -1.152354262e-03f,
--1.155226330e-03f, -1.158096249e-03f, -1.160964014e-03f, -1.163829622e-03f, -1.166693067e-03f, -1.169554344e-03f, -1.172413448e-03f, -1.175270375e-03f, -1.178125120e-03f, -1.180977678e-03f,
--1.183828044e-03f, -1.186676213e-03f, -1.189522181e-03f, -1.192365942e-03f, -1.195207493e-03f, -1.198046828e-03f, -1.200883942e-03f, -1.203718830e-03f, -1.206551489e-03f, -1.209381912e-03f,
--1.212210095e-03f, -1.215036035e-03f, -1.217859724e-03f, -1.220681160e-03f, -1.223500337e-03f, -1.226317250e-03f, -1.229131895e-03f, -1.231944267e-03f, -1.234754361e-03f, -1.237562173e-03f,
--1.240367697e-03f, -1.243170929e-03f, -1.245971865e-03f, -1.248770499e-03f, -1.251566826e-03f, -1.254360843e-03f, -1.257152545e-03f, -1.259941926e-03f, -1.262728982e-03f, -1.265513709e-03f,
--1.268296101e-03f, -1.271076154e-03f, -1.273853863e-03f, -1.276629224e-03f, -1.279402232e-03f, -1.282172882e-03f, -1.284941170e-03f, -1.287707090e-03f, -1.290470639e-03f, -1.293231811e-03f,
--1.295990603e-03f, -1.298747009e-03f, -1.301501024e-03f, -1.304252645e-03f, -1.307001866e-03f, -1.309748682e-03f, -1.312493090e-03f, -1.315235085e-03f, -1.317974661e-03f, -1.320711815e-03f,
--1.323446541e-03f, -1.326178836e-03f, -1.328908694e-03f, -1.331636111e-03f, -1.334361083e-03f, -1.337083604e-03f, -1.339803671e-03f, -1.342521278e-03f, -1.345236421e-03f, -1.347949096e-03f,
--1.350659298e-03f, -1.353367022e-03f, -1.356072264e-03f, -1.358775020e-03f, -1.361475284e-03f, -1.364173052e-03f, -1.366868320e-03f, -1.369561084e-03f, -1.372251338e-03f, -1.374939078e-03f,
--1.377624300e-03f, -1.380306998e-03f, -1.382987170e-03f, -1.385664809e-03f, -1.388339913e-03f, -1.391012475e-03f, -1.393682492e-03f, -1.396349959e-03f, -1.399014872e-03f, -1.401677226e-03f,
--1.404337017e-03f, -1.406994240e-03f, -1.409648891e-03f, -1.412300966e-03f, -1.414950459e-03f, -1.417597367e-03f, -1.420241685e-03f, -1.422883409e-03f, -1.425522533e-03f, -1.428159055e-03f,
--1.430792969e-03f, -1.433424271e-03f, -1.436052956e-03f, -1.438679021e-03f, -1.441302460e-03f, -1.443923269e-03f, -1.446541445e-03f, -1.449156982e-03f, -1.451769876e-03f, -1.454380123e-03f,
--1.456987719e-03f, -1.459592658e-03f, -1.462194938e-03f, -1.464794552e-03f, -1.467391498e-03f, -1.469985770e-03f, -1.472577365e-03f, -1.475166277e-03f, -1.477752503e-03f, -1.480336039e-03f,
--1.482916879e-03f, -1.485495020e-03f, -1.488070457e-03f, -1.490643187e-03f, -1.493213204e-03f, -1.495780505e-03f, -1.498345085e-03f, -1.500906939e-03f, -1.503466064e-03f, -1.506022456e-03f,
--1.508576109e-03f, -1.511127021e-03f, -1.513675185e-03f, -1.516220599e-03f, -1.518763258e-03f, -1.521303158e-03f, -1.523840294e-03f, -1.526374663e-03f, -1.528906259e-03f, -1.531435079e-03f,
--1.533961119e-03f, -1.536484374e-03f, -1.539004840e-03f, -1.541522514e-03f, -1.544037389e-03f, -1.546549464e-03f, -1.549058733e-03f, -1.551565191e-03f, -1.554068836e-03f, -1.556569663e-03f,
--1.559067667e-03f, -1.561562844e-03f, -1.564055191e-03f, -1.566544703e-03f, -1.569031376e-03f, -1.571515206e-03f, -1.573996188e-03f, -1.576474319e-03f, -1.578949594e-03f, -1.581422010e-03f,
--1.583891562e-03f, -1.586358245e-03f, -1.588822057e-03f, -1.591282992e-03f, -1.593741047e-03f, -1.596196218e-03f, -1.598648501e-03f, -1.601097890e-03f, -1.603544383e-03f, -1.605987976e-03f,
--1.608428663e-03f, -1.610866442e-03f, -1.613301308e-03f, -1.615733257e-03f, -1.618162285e-03f, -1.620588387e-03f, -1.623011561e-03f, -1.625431802e-03f, -1.627849105e-03f, -1.630263467e-03f,
--1.632674884e-03f, -1.635083352e-03f, -1.637488867e-03f, -1.639891424e-03f, -1.642291020e-03f, -1.644687651e-03f, -1.647081313e-03f, -1.649472001e-03f, -1.651859713e-03f, -1.654244443e-03f,
--1.656626188e-03f, -1.659004944e-03f, -1.661380708e-03f, -1.663753474e-03f, -1.666123239e-03f, -1.668490000e-03f, -1.670853752e-03f, -1.673214491e-03f, -1.675572213e-03f, -1.677926915e-03f,
--1.680278593e-03f, -1.682627242e-03f, -1.684972859e-03f, -1.687315440e-03f, -1.689654981e-03f, -1.691991478e-03f, -1.694324928e-03f, -1.696655325e-03f, -1.698982667e-03f, -1.701306950e-03f,
--1.703628170e-03f, -1.705946322e-03f, -1.708261404e-03f, -1.710573411e-03f, -1.712882339e-03f, -1.715188185e-03f, -1.717490944e-03f, -1.719790614e-03f, -1.722087189e-03f, -1.724380667e-03f,
--1.726671044e-03f, -1.728958315e-03f, -1.731242477e-03f, -1.733523527e-03f, -1.735801459e-03f, -1.738076272e-03f, -1.740347960e-03f, -1.742616520e-03f, -1.744881949e-03f, -1.747144242e-03f,
--1.749403396e-03f, -1.751659407e-03f, -1.753912271e-03f, -1.756161986e-03f, -1.758408546e-03f, -1.760651948e-03f, -1.762892189e-03f, -1.765129264e-03f, -1.767363171e-03f, -1.769593905e-03f,
--1.771821462e-03f, -1.774045840e-03f, -1.776267034e-03f, -1.778485041e-03f, -1.780699856e-03f, -1.782911478e-03f, -1.785119900e-03f, -1.787325121e-03f, -1.789527136e-03f, -1.791725942e-03f,
--1.793921536e-03f, -1.796113912e-03f, -1.798303069e-03f, -1.800489002e-03f, -1.802671707e-03f, -1.804851182e-03f, -1.807027422e-03f, -1.809200424e-03f, -1.811370184e-03f, -1.813536699e-03f,
--1.815699966e-03f, -1.817859979e-03f, -1.820016737e-03f, -1.822170235e-03f, -1.824320471e-03f, -1.826467439e-03f, -1.828611137e-03f, -1.830751562e-03f, -1.832888710e-03f, -1.835022576e-03f,
--1.837153159e-03f, -1.839280454e-03f, -1.841404457e-03f, -1.843525166e-03f, -1.845642576e-03f, -1.847756685e-03f, -1.849867489e-03f, -1.851974983e-03f, -1.854079166e-03f, -1.856180033e-03f,
--1.858277581e-03f, -1.860371806e-03f, -1.862462706e-03f, -1.864550276e-03f, -1.866634513e-03f, -1.868715414e-03f, -1.870792975e-03f, -1.872867194e-03f, -1.874938065e-03f, -1.877005587e-03f,
--1.879069756e-03f, -1.881130567e-03f, -1.883188019e-03f, -1.885242107e-03f, -1.887292829e-03f, -1.889340180e-03f, -1.891384158e-03f, -1.893424758e-03f, -1.895461979e-03f, -1.897495816e-03f,
--1.899526266e-03f, -1.901553326e-03f, -1.903576992e-03f, -1.905597261e-03f, -1.907614130e-03f, -1.909627595e-03f, -1.911637654e-03f, -1.913644303e-03f, -1.915647538e-03f, -1.917647356e-03f,
--1.919643755e-03f, -1.921636730e-03f, -1.923626279e-03f, -1.925612398e-03f, -1.927595084e-03f, -1.929574333e-03f, -1.931550144e-03f, -1.933522511e-03f, -1.935491433e-03f, -1.937456905e-03f,
--1.939418925e-03f, -1.941377490e-03f, -1.943332595e-03f, -1.945284239e-03f, -1.947232417e-03f, -1.949177127e-03f, -1.951118366e-03f, -1.953056130e-03f, -1.954990416e-03f, -1.956921221e-03f,
--1.958848542e-03f, -1.960772375e-03f, -1.962692718e-03f, -1.964609567e-03f, -1.966522920e-03f, -1.968432773e-03f, -1.970339122e-03f, -1.972241966e-03f, -1.974141301e-03f, -1.976037123e-03f,
--1.977929430e-03f, -1.979818218e-03f, -1.981703485e-03f, -1.983585227e-03f, -1.985463442e-03f, -1.987338126e-03f, -1.989209276e-03f, -1.991076889e-03f, -1.992940962e-03f, -1.994801492e-03f,
--1.996658477e-03f, -1.998511912e-03f, -2.000361796e-03f, -2.002208125e-03f, -2.004050895e-03f, -2.005890105e-03f, -2.007725750e-03f, -2.009557829e-03f, -2.011386338e-03f, -2.013211273e-03f,
--2.015032633e-03f, -2.016850414e-03f, -2.018664614e-03f, -2.020475228e-03f, -2.022282255e-03f, -2.024085692e-03f, -2.025885534e-03f, -2.027681781e-03f, -2.029474428e-03f, -2.031263472e-03f,
--2.033048912e-03f, -2.034830743e-03f, -2.036608964e-03f, -2.038383570e-03f, -2.040154560e-03f, -2.041921931e-03f, -2.043685679e-03f, -2.045445801e-03f, -2.047202296e-03f, -2.048955159e-03f,
--2.050704389e-03f, -2.052449982e-03f, -2.054191935e-03f, -2.055930246e-03f, -2.057664912e-03f, -2.059395931e-03f, -2.061123298e-03f, -2.062847012e-03f, -2.064567069e-03f, -2.066283468e-03f,
--2.067996204e-03f, -2.069705277e-03f, -2.071410681e-03f, -2.073112416e-03f, -2.074810477e-03f, -2.076504863e-03f, -2.078195571e-03f, -2.079882598e-03f, -2.081565940e-03f, -2.083245597e-03f,
--2.084921564e-03f, -2.086593839e-03f, -2.088262419e-03f, -2.089927302e-03f, -2.091588486e-03f, -2.093245966e-03f, -2.094899741e-03f, -2.096549808e-03f, -2.098196165e-03f, -2.099838808e-03f,
--2.101477736e-03f, -2.103112944e-03f, -2.104744432e-03f, -2.106372195e-03f, -2.107996233e-03f, -2.109616541e-03f, -2.111233117e-03f, -2.112845960e-03f, -2.114455065e-03f, -2.116060431e-03f,
--2.117662055e-03f, -2.119259934e-03f, -2.120854067e-03f, -2.122444449e-03f, -2.124031080e-03f, -2.125613955e-03f, -2.127193073e-03f, -2.128768432e-03f, -2.130340028e-03f, -2.131907859e-03f,
--2.133471922e-03f, -2.135032216e-03f, -2.136588738e-03f, -2.138141484e-03f, -2.139690453e-03f, -2.141235642e-03f, -2.142777049e-03f, -2.144314671e-03f, -2.145848506e-03f, -2.147378551e-03f,
--2.148904804e-03f, -2.150427263e-03f, -2.151945924e-03f, -2.153460786e-03f, -2.154971846e-03f, -2.156479102e-03f, -2.157982551e-03f, -2.159482191e-03f, -2.160978020e-03f, -2.162470035e-03f,
--2.163958233e-03f, -2.165442613e-03f, -2.166923172e-03f, -2.168399908e-03f, -2.169872818e-03f, -2.171341900e-03f, -2.172807152e-03f, -2.174268571e-03f, -2.175726155e-03f, -2.177179902e-03f,
--2.178629809e-03f, -2.180075875e-03f, -2.181518096e-03f, -2.182956471e-03f, -2.184390996e-03f, -2.185821671e-03f, -2.187248493e-03f, -2.188671458e-03f, -2.190090566e-03f, -2.191505814e-03f,
--2.192917200e-03f, -2.194324721e-03f, -2.195728375e-03f, -2.197128160e-03f, -2.198524074e-03f, -2.199916115e-03f, -2.201304280e-03f, -2.202688567e-03f, -2.204068974e-03f, -2.205445499e-03f,
--2.206818139e-03f, -2.208186893e-03f, -2.209551758e-03f, -2.210912733e-03f, -2.212269814e-03f, -2.213623000e-03f, -2.214972289e-03f, -2.216317679e-03f, -2.217659167e-03f, -2.218996752e-03f,
--2.220330430e-03f, -2.221660201e-03f, -2.222986062e-03f, -2.224308011e-03f, -2.225626046e-03f, -2.226940165e-03f, -2.228250365e-03f, -2.229556645e-03f, -2.230859003e-03f, -2.232157437e-03f,
--2.233451944e-03f, -2.234742523e-03f, -2.236029171e-03f, -2.237311887e-03f, -2.238590668e-03f, -2.239865513e-03f, -2.241136419e-03f, -2.242403385e-03f, -2.243666408e-03f, -2.244925487e-03f,
--2.246180620e-03f, -2.247431804e-03f, -2.248679038e-03f, -2.249922320e-03f, -2.251161647e-03f, -2.252397019e-03f, -2.253628432e-03f, -2.254855886e-03f, -2.256079377e-03f, -2.257298905e-03f,
--2.258514467e-03f, -2.259726062e-03f, -2.260933687e-03f, -2.262137340e-03f, -2.263337021e-03f, -2.264532726e-03f, -2.265724455e-03f, -2.266912205e-03f, -2.268095974e-03f, -2.269275761e-03f,
--2.270451563e-03f, -2.271623379e-03f, -2.272791208e-03f, -2.273955047e-03f, -2.275114894e-03f, -2.276270748e-03f, -2.277422607e-03f, -2.278570469e-03f, -2.279714332e-03f, -2.280854195e-03f,
--2.281990056e-03f, -2.283121912e-03f, -2.284249764e-03f, -2.285373607e-03f, -2.286493442e-03f, -2.287609266e-03f, -2.288721077e-03f, -2.289828874e-03f, -2.290932655e-03f, -2.292032418e-03f,
--2.293128162e-03f, -2.294219885e-03f, -2.295307585e-03f, -2.296391261e-03f, -2.297470911e-03f, -2.298546533e-03f, -2.299618125e-03f, -2.300685687e-03f, -2.301749216e-03f, -2.302808711e-03f,
--2.303864170e-03f, -2.304915592e-03f, -2.305962974e-03f, -2.307006316e-03f, -2.308045615e-03f, -2.309080871e-03f, -2.310112081e-03f, -2.311139245e-03f, -2.312162360e-03f, -2.313181424e-03f,
--2.314196437e-03f, -2.315207397e-03f, -2.316214302e-03f, -2.317217151e-03f, -2.318215943e-03f, -2.319210674e-03f, -2.320201346e-03f, -2.321187954e-03f, -2.322170500e-03f, -2.323148979e-03f,
--2.324123393e-03f, -2.325093738e-03f, -2.326060013e-03f, -2.327022217e-03f, -2.327980349e-03f, -2.328934407e-03f, -2.329884389e-03f, -2.330830294e-03f, -2.331772122e-03f, -2.332709869e-03f,
--2.333643535e-03f, -2.334573119e-03f, -2.335498619e-03f, -2.336420034e-03f, -2.337337362e-03f, -2.338250603e-03f, -2.339159753e-03f, -2.340064814e-03f, -2.340965782e-03f, -2.341862656e-03f,
--2.342755436e-03f, -2.343644120e-03f, -2.344528707e-03f, -2.345409194e-03f, -2.346285582e-03f, -2.347157869e-03f, -2.348026053e-03f, -2.348890133e-03f, -2.349750107e-03f, -2.350605976e-03f,
--2.351457737e-03f, -2.352305389e-03f, -2.353148930e-03f, -2.353988361e-03f, -2.354823678e-03f, -2.355654882e-03f, -2.356481971e-03f, -2.357304943e-03f, -2.358123798e-03f, -2.358938534e-03f,
--2.359749151e-03f, -2.360555646e-03f, -2.361358019e-03f, -2.362156268e-03f, -2.362950393e-03f, -2.363740393e-03f, -2.364526265e-03f, -2.365308009e-03f, -2.366085624e-03f, -2.366859109e-03f,
--2.367628463e-03f, -2.368393684e-03f, -2.369154771e-03f, -2.369911724e-03f, -2.370664541e-03f, -2.371413221e-03f, -2.372157763e-03f, -2.372898166e-03f, -2.373634429e-03f, -2.374366550e-03f,
--2.375094530e-03f, -2.375818366e-03f, -2.376538059e-03f, -2.377253606e-03f, -2.377965006e-03f, -2.378672259e-03f, -2.379375364e-03f, -2.380074320e-03f, -2.380769125e-03f, -2.381459780e-03f,
--2.382146282e-03f, -2.382828630e-03f, -2.383506825e-03f, -2.384180864e-03f, -2.384850747e-03f, -2.385516474e-03f, -2.386178042e-03f, -2.386835452e-03f, -2.387488702e-03f, -2.388137791e-03f,
--2.388782718e-03f, -2.389423483e-03f, -2.390060085e-03f, -2.390692522e-03f, -2.391320795e-03f, -2.391944901e-03f, -2.392564841e-03f, -2.393180613e-03f, -2.393792216e-03f, -2.394399650e-03f,
--2.395002914e-03f, -2.395602006e-03f, -2.396196927e-03f, -2.396787676e-03f, -2.397374250e-03f, -2.397956651e-03f, -2.398534877e-03f, -2.399108926e-03f, -2.399678800e-03f, -2.400244496e-03f,
--2.400806013e-03f, -2.401363352e-03f, -2.401916512e-03f, -2.402465491e-03f, -2.403010289e-03f, -2.403550905e-03f, -2.404087339e-03f, -2.404619590e-03f, -2.405147657e-03f, -2.405671539e-03f,
--2.406191236e-03f, -2.406706747e-03f, -2.407218072e-03f, -2.407725209e-03f, -2.408228158e-03f, -2.408726919e-03f, -2.409221491e-03f, -2.409711872e-03f, -2.410198064e-03f, -2.410680064e-03f,
--2.411157873e-03f, -2.411631489e-03f, -2.412100912e-03f, -2.412566142e-03f, -2.413027178e-03f, -2.413484019e-03f, -2.413936665e-03f, -2.414385116e-03f, -2.414829370e-03f, -2.415269427e-03f,
--2.415705287e-03f, -2.416136949e-03f, -2.416564412e-03f, -2.416987676e-03f, -2.417406741e-03f, -2.417821606e-03f, -2.418232271e-03f, -2.418638734e-03f, -2.419040997e-03f, -2.419439057e-03f,
--2.419832915e-03f, -2.420222570e-03f, -2.420608022e-03f, -2.420989270e-03f, -2.421366314e-03f, -2.421739153e-03f, -2.422107787e-03f, -2.422472216e-03f, -2.422832439e-03f, -2.423188456e-03f,
--2.423540266e-03f, -2.423887870e-03f, -2.424231265e-03f, -2.424570453e-03f, -2.424905433e-03f, -2.425236205e-03f, -2.425562768e-03f, -2.425885121e-03f, -2.426203265e-03f, -2.426517199e-03f,
--2.426826923e-03f, -2.427132437e-03f, -2.427433740e-03f, -2.427730832e-03f, -2.428023712e-03f, -2.428312381e-03f, -2.428596838e-03f, -2.428877083e-03f, -2.429153115e-03f, -2.429424935e-03f,
--2.429692541e-03f, -2.429955935e-03f, -2.430215115e-03f, -2.430470081e-03f, -2.430720834e-03f, -2.430967373e-03f, -2.431209697e-03f, -2.431447807e-03f, -2.431681702e-03f, -2.431911383e-03f,
--2.432136848e-03f, -2.432358098e-03f, -2.432575133e-03f, -2.432787953e-03f, -2.432996557e-03f, -2.433200945e-03f, -2.433401117e-03f, -2.433597073e-03f, -2.433788813e-03f, -2.433976337e-03f,
--2.434159645e-03f, -2.434338736e-03f, -2.434513610e-03f, -2.434684268e-03f, -2.434850710e-03f, -2.435012935e-03f, -2.435170942e-03f, -2.435324733e-03f, -2.435474308e-03f, -2.435619665e-03f,
--2.435760805e-03f, -2.435897729e-03f, -2.436030435e-03f, -2.436158925e-03f, -2.436283197e-03f, -2.436403253e-03f, -2.436519091e-03f, -2.436630713e-03f, -2.436738118e-03f, -2.436841306e-03f,
--2.436940277e-03f, -2.437035031e-03f, -2.437125569e-03f, -2.437211890e-03f, -2.437293994e-03f, -2.437371882e-03f, -2.437445554e-03f, -2.437515009e-03f, -2.437580249e-03f, -2.437641272e-03f,
--2.437698079e-03f, -2.437750670e-03f, -2.437799046e-03f, -2.437843206e-03f, -2.437883151e-03f, -2.437918880e-03f, -2.437950394e-03f, -2.437977694e-03f, -2.438000778e-03f, -2.438019649e-03f,
--2.438034304e-03f, -2.438044746e-03f, -2.438050973e-03f, -2.438052987e-03f, -2.438050788e-03f, -2.438044375e-03f, -2.438033749e-03f, -2.438018910e-03f, -2.437999858e-03f, -2.437976594e-03f,
--2.437949119e-03f, -2.437917431e-03f, -2.437881532e-03f, -2.437841421e-03f, -2.437797100e-03f, -2.437748568e-03f, -2.437695826e-03f, -2.437638874e-03f, -2.437577712e-03f, -2.437512340e-03f,
--2.437442760e-03f, -2.437368971e-03f, -2.437290974e-03f, -2.437208768e-03f, -2.437122355e-03f, -2.437031735e-03f, -2.436936908e-03f, -2.436837875e-03f, -2.436734635e-03f, -2.436627190e-03f,
--2.436515539e-03f, -2.436399684e-03f, -2.436279624e-03f, -2.436155361e-03f, -2.436026893e-03f, -2.435894223e-03f, -2.435757350e-03f, -2.435616275e-03f, -2.435470998e-03f, -2.435321519e-03f,
--2.435167840e-03f, -2.435009961e-03f, -2.434847882e-03f, -2.434681604e-03f, -2.434511126e-03f, -2.434336451e-03f, -2.434157578e-03f, -2.433974508e-03f, -2.433787241e-03f, -2.433595777e-03f,
--2.433400119e-03f, -2.433200265e-03f, -2.432996217e-03f, -2.432787975e-03f, -2.432575540e-03f, -2.432358912e-03f, -2.432138092e-03f, -2.431913080e-03f, -2.431683878e-03f, -2.431450485e-03f,
--2.431212903e-03f, -2.430971131e-03f, -2.430725172e-03f, -2.430475024e-03f, -2.430220690e-03f, -2.429962169e-03f, -2.429699463e-03f, -2.429432571e-03f, -2.429161495e-03f, -2.428886235e-03f,
--2.428606793e-03f, -2.428323168e-03f, -2.428035362e-03f, -2.427743374e-03f, -2.427447207e-03f, -2.427146860e-03f, -2.426842335e-03f, -2.426533631e-03f, -2.426220751e-03f, -2.425903694e-03f,
--2.425582462e-03f, -2.425257054e-03f, -2.424927473e-03f, -2.424593719e-03f, -2.424255792e-03f, -2.423913693e-03f, -2.423567423e-03f, -2.423216984e-03f, -2.422862375e-03f, -2.422503598e-03f,
--2.422140654e-03f, -2.421773542e-03f, -2.421402265e-03f, -2.421026823e-03f, -2.420647217e-03f, -2.420263448e-03f, -2.419875517e-03f, -2.419483424e-03f, -2.419087170e-03f, -2.418686757e-03f,
--2.418282185e-03f, -2.417873456e-03f, -2.417460569e-03f, -2.417043527e-03f, -2.416622329e-03f, -2.416196978e-03f, -2.415767473e-03f, -2.415333817e-03f, -2.414896009e-03f, -2.414454051e-03f,
--2.414007944e-03f, -2.413557688e-03f, -2.413103286e-03f, -2.412644737e-03f, -2.412182043e-03f, -2.411715205e-03f, -2.411244224e-03f, -2.410769101e-03f, -2.410289836e-03f, -2.409806432e-03f,
--2.409318889e-03f, -2.408827208e-03f, -2.408331390e-03f, -2.407831436e-03f, -2.407327347e-03f, -2.406819125e-03f, -2.406306771e-03f, -2.405790285e-03f, -2.405269669e-03f, -2.404744924e-03f,
--2.404216051e-03f, -2.403683050e-03f, -2.403145925e-03f, -2.402604674e-03f, -2.402059300e-03f, -2.401509804e-03f, -2.400956187e-03f, -2.400398450e-03f, -2.399836594e-03f, -2.399270620e-03f,
--2.398700530e-03f, -2.398126325e-03f, -2.397548006e-03f, -2.396965575e-03f, -2.396379032e-03f, -2.395788378e-03f, -2.395193616e-03f, -2.394594745e-03f, -2.393991769e-03f, -2.393384686e-03f,
--2.392773500e-03f, -2.392158212e-03f, -2.391538821e-03f, -2.390915331e-03f, -2.390287742e-03f, -2.389656055e-03f, -2.389020272e-03f, -2.388380394e-03f, -2.387736422e-03f, -2.387088358e-03f,
--2.386436203e-03f, -2.385779959e-03f, -2.385119626e-03f, -2.384455206e-03f, -2.383786701e-03f, -2.383114112e-03f, -2.382437440e-03f, -2.381756686e-03f, -2.381071853e-03f, -2.380382940e-03f,
--2.379689951e-03f, -2.378992886e-03f, -2.378291747e-03f, -2.377586534e-03f, -2.376877250e-03f, -2.376163897e-03f, -2.375446474e-03f, -2.374724984e-03f, -2.373999429e-03f, -2.373269810e-03f,
--2.372536127e-03f, -2.371798384e-03f, -2.371056581e-03f, -2.370310719e-03f, -2.369560801e-03f, -2.368806827e-03f, -2.368048800e-03f, -2.367286721e-03f, -2.366520590e-03f, -2.365750411e-03f,
--2.364976184e-03f, -2.364197912e-03f, -2.363415594e-03f, -2.362629234e-03f, -2.361838832e-03f, -2.361044391e-03f, -2.360245912e-03f, -2.359443395e-03f, -2.358636844e-03f, -2.357826260e-03f,
--2.357011644e-03f, -2.356192998e-03f, -2.355370323e-03f, -2.354543621e-03f, -2.353712895e-03f, -2.352878144e-03f, -2.352039372e-03f, -2.351196579e-03f, -2.350349768e-03f, -2.349498940e-03f,
--2.348644097e-03f, -2.347785240e-03f, -2.346922372e-03f, -2.346055493e-03f, -2.345184606e-03f, -2.344309712e-03f, -2.343430813e-03f, -2.342547911e-03f, -2.341661008e-03f, -2.340770105e-03f,
--2.339875203e-03f, -2.338976306e-03f, -2.338073414e-03f, -2.337166529e-03f, -2.336255654e-03f, -2.335340789e-03f, -2.334421937e-03f, -2.333499099e-03f, -2.332572278e-03f, -2.331641475e-03f,
--2.330706692e-03f, -2.329767930e-03f, -2.328825192e-03f, -2.327878479e-03f, -2.326927794e-03f, -2.325973137e-03f, -2.325014512e-03f, -2.324051919e-03f, -2.323085362e-03f, -2.322114840e-03f,
--2.321140358e-03f, -2.320161915e-03f, -2.319179515e-03f, -2.318193159e-03f, -2.317202849e-03f, -2.316208587e-03f, -2.315210375e-03f, -2.314208215e-03f, -2.313202109e-03f, -2.312192059e-03f,
--2.311178066e-03f, -2.310160133e-03f, -2.309138261e-03f, -2.308112454e-03f, -2.307082711e-03f, -2.306049037e-03f, -2.305011432e-03f, -2.303969899e-03f, -2.302924439e-03f, -2.301875055e-03f,
--2.300821748e-03f, -2.299764521e-03f, -2.298703376e-03f, -2.297638315e-03f, -2.296569339e-03f, -2.295496451e-03f, -2.294419654e-03f, -2.293338948e-03f, -2.292254336e-03f, -2.291165820e-03f,
--2.290073403e-03f, -2.288977086e-03f, -2.287876871e-03f, -2.286772761e-03f, -2.285664758e-03f, -2.284552863e-03f, -2.283437079e-03f, -2.282317408e-03f, -2.281193853e-03f, -2.280066414e-03f,
--2.278935096e-03f, -2.277799899e-03f, -2.276660825e-03f, -2.275517878e-03f, -2.274371059e-03f, -2.273220370e-03f, -2.272065814e-03f, -2.270907392e-03f, -2.269745108e-03f, -2.268578962e-03f,
--2.267408958e-03f, -2.266235098e-03f, -2.265057383e-03f, -2.263875817e-03f, -2.262690401e-03f, -2.261501137e-03f, -2.260308029e-03f, -2.259111077e-03f, -2.257910285e-03f, -2.256705655e-03f,
--2.255497188e-03f, -2.254284888e-03f, -2.253068756e-03f, -2.251848795e-03f, -2.250625008e-03f, -2.249397395e-03f, -2.248165961e-03f, -2.246930707e-03f, -2.245691635e-03f, -2.244448748e-03f,
--2.243202048e-03f, -2.241951538e-03f, -2.240697220e-03f, -2.239439096e-03f, -2.238177168e-03f, -2.236911440e-03f, -2.235641913e-03f, -2.234368589e-03f, -2.233091473e-03f, -2.231810564e-03f,
--2.230525867e-03f, -2.229237383e-03f, -2.227945115e-03f, -2.226649065e-03f, -2.225349236e-03f, -2.224045631e-03f, -2.222738251e-03f, -2.221427099e-03f, -2.220112178e-03f, -2.218793489e-03f,
--2.217471037e-03f, -2.216144822e-03f, -2.214814848e-03f, -2.213481117e-03f, -2.212143631e-03f, -2.210802394e-03f, -2.209457407e-03f, -2.208108673e-03f, -2.206756194e-03f, -2.205399974e-03f,
--2.204040015e-03f, -2.202676318e-03f, -2.201308888e-03f, -2.199937726e-03f, -2.198562835e-03f, -2.197184217e-03f, -2.195801875e-03f, -2.194415812e-03f, -2.193026031e-03f, -2.191632533e-03f,
--2.190235321e-03f, -2.188834399e-03f, -2.187429768e-03f, -2.186021432e-03f, -2.184609393e-03f, -2.183193653e-03f, -2.181774215e-03f, -2.180351083e-03f, -2.178924258e-03f, -2.177493743e-03f,
--2.176059541e-03f, -2.174621654e-03f, -2.173180086e-03f, -2.171734838e-03f, -2.170285915e-03f, -2.168833317e-03f, -2.167377049e-03f, -2.165917112e-03f, -2.164453509e-03f, -2.162986244e-03f,
--2.161515319e-03f, -2.160040736e-03f, -2.158562499e-03f, -2.157080610e-03f, -2.155595072e-03f, -2.154105887e-03f, -2.152613059e-03f, -2.151116590e-03f, -2.149616483e-03f, -2.148112740e-03f,
--2.146605365e-03f, -2.145094361e-03f, -2.143579730e-03f, -2.142061474e-03f, -2.140539598e-03f, -2.139014103e-03f, -2.137484992e-03f, -2.135952269e-03f, -2.134415935e-03f, -2.132875995e-03f,
--2.131332451e-03f, -2.129785305e-03f, -2.128234560e-03f, -2.126680220e-03f, -2.125122288e-03f, -2.123560765e-03f, -2.121995656e-03f, -2.120426962e-03f, -2.118854687e-03f, -2.117278834e-03f,
--2.115699406e-03f, -2.114116405e-03f, -2.112529835e-03f, -2.110939698e-03f, -2.109345998e-03f, -2.107748737e-03f, -2.106147918e-03f, -2.104543545e-03f, -2.102935619e-03f, -2.101324145e-03f,
--2.099709125e-03f, -2.098090562e-03f, -2.096468459e-03f, -2.094842819e-03f, -2.093213646e-03f, -2.091580941e-03f, -2.089944708e-03f, -2.088304951e-03f, -2.086661672e-03f, -2.085014874e-03f,
--2.083364560e-03f, -2.081710733e-03f, -2.080053397e-03f, -2.078392554e-03f, -2.076728207e-03f, -2.075060360e-03f, -2.073389015e-03f, -2.071714176e-03f, -2.070035845e-03f, -2.068354027e-03f,
--2.066668723e-03f, -2.064979937e-03f, -2.063287672e-03f, -2.061591932e-03f, -2.059892718e-03f, -2.058190035e-03f, -2.056483886e-03f, -2.054774273e-03f, -2.053061200e-03f, -2.051344670e-03f,
--2.049624686e-03f, -2.047901252e-03f, -2.046174369e-03f, -2.044444043e-03f, -2.042710275e-03f, -2.040973069e-03f, -2.039232428e-03f, -2.037488355e-03f, -2.035740854e-03f, -2.033989928e-03f,
--2.032235580e-03f, -2.030477812e-03f, -2.028716630e-03f, -2.026952034e-03f, -2.025184030e-03f, -2.023412619e-03f, -2.021637806e-03f, -2.019859593e-03f, -2.018077985e-03f, -2.016292983e-03f,
--2.014504591e-03f, -2.012712814e-03f, -2.010917653e-03f, -2.009119112e-03f, -2.007317194e-03f, -2.005511904e-03f, -2.003703243e-03f, -2.001891216e-03f, -2.000075825e-03f, -1.998257074e-03f,
--1.996434967e-03f, -1.994609506e-03f, -1.992780695e-03f, -1.990948538e-03f, -1.989113037e-03f, -1.987274196e-03f, -1.985432018e-03f, -1.983586507e-03f, -1.981737666e-03f, -1.979885499e-03f,
--1.978030008e-03f, -1.976171198e-03f, -1.974309071e-03f, -1.972443631e-03f, -1.970574882e-03f, -1.968702826e-03f, -1.966827468e-03f, -1.964948810e-03f, -1.963066856e-03f, -1.961181610e-03f,
--1.959293074e-03f, -1.957401253e-03f, -1.955506150e-03f, -1.953607768e-03f, -1.951706110e-03f, -1.949801181e-03f, -1.947892984e-03f, -1.945981521e-03f, -1.944066797e-03f, -1.942148815e-03f,
--1.940227579e-03f, -1.938303092e-03f, -1.936375357e-03f, -1.934444378e-03f, -1.932510159e-03f, -1.930572703e-03f, -1.928632013e-03f, -1.926688094e-03f, -1.924740948e-03f, -1.922790579e-03f,
--1.920836991e-03f, -1.918880187e-03f, -1.916920171e-03f, -1.914956947e-03f, -1.912990517e-03f, -1.911020886e-03f, -1.909048057e-03f, -1.907072034e-03f, -1.905092820e-03f, -1.903110419e-03f,
--1.901124834e-03f, -1.899136069e-03f, -1.897144128e-03f, -1.895149015e-03f, -1.893150732e-03f, -1.891149283e-03f, -1.889144673e-03f, -1.887136904e-03f, -1.885125981e-03f, -1.883111907e-03f,
--1.881094685e-03f, -1.879074320e-03f, -1.877050815e-03f, -1.875024174e-03f, -1.872994399e-03f, -1.870961496e-03f, -1.868925468e-03f, -1.866886318e-03f, -1.864844050e-03f, -1.862798667e-03f,
--1.860750175e-03f, -1.858698575e-03f, -1.856643872e-03f, -1.854586070e-03f, -1.852525172e-03f, -1.850461182e-03f, -1.848394104e-03f, -1.846323942e-03f, -1.844250699e-03f, -1.842174378e-03f,
--1.840094985e-03f, -1.838012522e-03f, -1.835926993e-03f, -1.833838402e-03f, -1.831746753e-03f, -1.829652050e-03f, -1.827554296e-03f, -1.825453495e-03f, -1.823349651e-03f, -1.821242768e-03f,
--1.819132850e-03f, -1.817019899e-03f, -1.814903921e-03f, -1.812784919e-03f, -1.810662897e-03f, -1.808537859e-03f, -1.806409808e-03f, -1.804278748e-03f, -1.802144683e-03f, -1.800007618e-03f,
--1.797867555e-03f, -1.795724499e-03f, -1.793578453e-03f, -1.791429422e-03f, -1.789277410e-03f, -1.787122419e-03f, -1.784964455e-03f, -1.782803520e-03f, -1.780639620e-03f, -1.778472757e-03f,
--1.776302936e-03f, -1.774130160e-03f, -1.771954434e-03f, -1.769775762e-03f, -1.767594146e-03f, -1.765409592e-03f, -1.763222103e-03f, -1.761031684e-03f, -1.758838337e-03f, -1.756642067e-03f,
--1.754442878e-03f, -1.752240775e-03f, -1.750035760e-03f, -1.747827838e-03f, -1.745617012e-03f, -1.743403288e-03f, -1.741186668e-03f, -1.738967157e-03f, -1.736744759e-03f, -1.734519477e-03f,
--1.732291317e-03f, -1.730060281e-03f, -1.727826373e-03f, -1.725589599e-03f, -1.723349961e-03f, -1.721107464e-03f, -1.718862112e-03f, -1.716613909e-03f, -1.714362859e-03f, -1.712108966e-03f,
--1.709852233e-03f, -1.707592666e-03f, -1.705330268e-03f, -1.703065043e-03f, -1.700796995e-03f, -1.698526129e-03f, -1.696252447e-03f, -1.693975956e-03f, -1.691696658e-03f, -1.689414557e-03f,
--1.687129658e-03f, -1.684841965e-03f, -1.682551482e-03f, -1.680258213e-03f, -1.677962163e-03f, -1.675663334e-03f, -1.673361732e-03f, -1.671057360e-03f, -1.668750223e-03f, -1.666440325e-03f,
--1.664127669e-03f, -1.661812261e-03f, -1.659494104e-03f, -1.657173202e-03f, -1.654849560e-03f, -1.652523181e-03f, -1.650194070e-03f, -1.647862231e-03f, -1.645527669e-03f, -1.643190387e-03f,
--1.640850389e-03f, -1.638507680e-03f, -1.636162264e-03f, -1.633814145e-03f, -1.631463328e-03f, -1.629109816e-03f, -1.626753613e-03f, -1.624394725e-03f, -1.622033155e-03f, -1.619668907e-03f,
--1.617301986e-03f, -1.614932396e-03f, -1.612560141e-03f, -1.610185225e-03f, -1.607807653e-03f, -1.605427429e-03f, -1.603044556e-03f, -1.600659041e-03f, -1.598270885e-03f, -1.595880095e-03f,
--1.593486674e-03f, -1.591090626e-03f, -1.588691956e-03f, -1.586290668e-03f, -1.583886767e-03f, -1.581480256e-03f, -1.579071139e-03f, -1.576659422e-03f, -1.574245109e-03f, -1.571828203e-03f,
--1.569408710e-03f, -1.566986632e-03f, -1.564561976e-03f, -1.562134745e-03f, -1.559704943e-03f, -1.557272575e-03f, -1.554837645e-03f, -1.552400158e-03f, -1.549960117e-03f, -1.547517527e-03f,
--1.545072393e-03f, -1.542624719e-03f, -1.540174509e-03f, -1.537721768e-03f, -1.535266500e-03f, -1.532808709e-03f, -1.530348399e-03f, -1.527885576e-03f, -1.525420244e-03f, -1.522952406e-03f,
--1.520482068e-03f, -1.518009233e-03f, -1.515533906e-03f, -1.513056092e-03f, -1.510575795e-03f, -1.508093020e-03f, -1.505607770e-03f, -1.503120050e-03f, -1.500629865e-03f, -1.498137219e-03f,
--1.495642117e-03f, -1.493144562e-03f, -1.490644560e-03f, -1.488142115e-03f, -1.485637231e-03f, -1.483129913e-03f, -1.480620165e-03f, -1.478107992e-03f, -1.475593398e-03f, -1.473076388e-03f,
--1.470556966e-03f, -1.468035136e-03f, -1.465510904e-03f, -1.462984273e-03f, -1.460455248e-03f, -1.457923834e-03f, -1.455390035e-03f, -1.452853855e-03f, -1.450315300e-03f, -1.447774373e-03f,
--1.445231079e-03f, -1.442685423e-03f, -1.440137410e-03f, -1.437587043e-03f, -1.435034327e-03f, -1.432479267e-03f, -1.429921867e-03f, -1.427362132e-03f, -1.424800067e-03f, -1.422235675e-03f,
--1.419668962e-03f, -1.417099932e-03f, -1.414528590e-03f, -1.411954940e-03f, -1.409378987e-03f, -1.406800735e-03f, -1.404220189e-03f, -1.401637354e-03f, -1.399052234e-03f, -1.396464833e-03f,
--1.393875157e-03f, -1.391283209e-03f, -1.388688996e-03f, -1.386092520e-03f, -1.383493787e-03f, -1.380892801e-03f, -1.378289567e-03f, -1.375684090e-03f, -1.373076374e-03f, -1.370466423e-03f,
--1.367854243e-03f, -1.365239839e-03f, -1.362623213e-03f, -1.360004373e-03f, -1.357383321e-03f, -1.354760063e-03f, -1.352134603e-03f, -1.349506946e-03f, -1.346877096e-03f, -1.344245059e-03f,
--1.341610839e-03f, -1.338974441e-03f, -1.336335868e-03f, -1.333695127e-03f, -1.331052221e-03f, -1.328407156e-03f, -1.325759935e-03f, -1.323110564e-03f, -1.320459048e-03f, -1.317805391e-03f,
--1.315149597e-03f, -1.312491672e-03f, -1.309831620e-03f, -1.307169446e-03f, -1.304505155e-03f, -1.301838751e-03f, -1.299170239e-03f, -1.296499623e-03f, -1.293826910e-03f, -1.291152102e-03f,
--1.288475206e-03f, -1.285796225e-03f, -1.283115164e-03f, -1.280432029e-03f, -1.277746824e-03f, -1.275059553e-03f, -1.272370222e-03f, -1.269678835e-03f, -1.266985397e-03f, -1.264289913e-03f,
--1.261592387e-03f, -1.258892825e-03f, -1.256191230e-03f, -1.253487609e-03f, -1.250781965e-03f, -1.248074303e-03f, -1.245364629e-03f, -1.242652946e-03f, -1.239939260e-03f, -1.237223576e-03f,
--1.234505898e-03f, -1.231786232e-03f, -1.229064581e-03f, -1.226340951e-03f, -1.223615346e-03f, -1.220887772e-03f, -1.218158234e-03f, -1.215426735e-03f, -1.212693281e-03f, -1.209957877e-03f,
--1.207220527e-03f, -1.204481237e-03f, -1.201740011e-03f, -1.198996854e-03f, -1.196251771e-03f, -1.193504766e-03f, -1.190755845e-03f, -1.188005013e-03f, -1.185252274e-03f, -1.182497633e-03f,
--1.179741095e-03f, -1.176982665e-03f, -1.174222347e-03f, -1.171460148e-03f, -1.168696070e-03f, -1.165930121e-03f, -1.163162303e-03f, -1.160392623e-03f, -1.157621084e-03f, -1.154847693e-03f,
--1.152072453e-03f, -1.149295370e-03f, -1.146516448e-03f, -1.143735693e-03f, -1.140953110e-03f, -1.138168702e-03f, -1.135382476e-03f, -1.132594436e-03f, -1.129804588e-03f, -1.127012935e-03f,
--1.124219483e-03f, -1.121424236e-03f, -1.118627201e-03f, -1.115828381e-03f, -1.113027782e-03f, -1.110225408e-03f, -1.107421265e-03f, -1.104615357e-03f, -1.101807690e-03f, -1.098998267e-03f,
--1.096187095e-03f, -1.093374179e-03f, -1.090559522e-03f, -1.087743131e-03f, -1.084925009e-03f, -1.082105163e-03f, -1.079283597e-03f, -1.076460315e-03f, -1.073635324e-03f, -1.070808627e-03f,
--1.067980231e-03f, -1.065150139e-03f, -1.062318357e-03f, -1.059484890e-03f, -1.056649742e-03f, -1.053812920e-03f, -1.050974427e-03f, -1.048134270e-03f, -1.045292451e-03f, -1.042448978e-03f,
--1.039603855e-03f, -1.036757086e-03f, -1.033908677e-03f, -1.031058633e-03f, -1.028206959e-03f, -1.025353660e-03f, -1.022498740e-03f, -1.019642206e-03f, -1.016784061e-03f, -1.013924311e-03f,
--1.011062962e-03f, -1.008200017e-03f, -1.005335482e-03f, -1.002469363e-03f, -9.996016631e-04f, -9.967323888e-04f, -9.938615446e-04f, -9.909891356e-04f, -9.881151670e-04f, -9.852396436e-04f,
--9.823625707e-04f, -9.794839532e-04f, -9.766037962e-04f, -9.737221047e-04f, -9.708388839e-04f, -9.679541388e-04f, -9.650678744e-04f, -9.621800958e-04f, -9.592908082e-04f, -9.564000165e-04f,
--9.535077258e-04f, -9.506139413e-04f, -9.477186680e-04f, -9.448219110e-04f, -9.419236753e-04f, -9.390239661e-04f, -9.361227885e-04f, -9.332201475e-04f, -9.303160483e-04f, -9.274104959e-04f,
--9.245034954e-04f, -9.215950520e-04f, -9.186851707e-04f, -9.157738567e-04f, -9.128611150e-04f, -9.099469508e-04f, -9.070313691e-04f, -9.041143752e-04f, -9.011959741e-04f, -8.982761709e-04f,
--8.953549707e-04f, -8.924323788e-04f, -8.895084001e-04f, -8.865830398e-04f, -8.836563032e-04f, -8.807281952e-04f, -8.777987210e-04f, -8.748678858e-04f, -8.719356947e-04f, -8.690021528e-04f,
--8.660672653e-04f, -8.631310374e-04f, -8.601934741e-04f, -8.572545806e-04f, -8.543143621e-04f, -8.513728237e-04f, -8.484299706e-04f, -8.454858079e-04f, -8.425403409e-04f, -8.395935745e-04f,
--8.366455141e-04f, -8.336961648e-04f, -8.307455317e-04f, -8.277936200e-04f, -8.248404349e-04f, -8.218859816e-04f, -8.189302652e-04f, -8.159732909e-04f, -8.130150639e-04f, -8.100555893e-04f,
--8.070948724e-04f, -8.041329184e-04f, -8.011697323e-04f, -7.982053194e-04f, -7.952396849e-04f, -7.922728340e-04f, -7.893047719e-04f, -7.863355038e-04f, -7.833650348e-04f, -7.803933702e-04f,
--7.774205151e-04f, -7.744464748e-04f, -7.714712544e-04f, -7.684948593e-04f, -7.655172945e-04f, -7.625385653e-04f, -7.595586769e-04f, -7.565776345e-04f, -7.535954434e-04f, -7.506121086e-04f,
--7.476276356e-04f, -7.446420294e-04f, -7.416552953e-04f, -7.386674385e-04f, -7.356784643e-04f, -7.326883778e-04f, -7.296971844e-04f, -7.267048891e-04f, -7.237114973e-04f, -7.207170142e-04f,
--7.177214451e-04f, -7.147247951e-04f, -7.117270694e-04f, -7.087282734e-04f, -7.057284123e-04f, -7.027274913e-04f, -6.997255157e-04f, -6.967224906e-04f, -6.937184214e-04f, -6.907133133e-04f,
--6.877071716e-04f, -6.847000014e-04f, -6.816918081e-04f, -6.786825969e-04f, -6.756723731e-04f, -6.726611419e-04f, -6.696489085e-04f, -6.666356783e-04f, -6.636214565e-04f, -6.606062483e-04f,
--6.575900590e-04f, -6.545728940e-04f, -6.515547584e-04f, -6.485356575e-04f, -6.455155966e-04f, -6.424945810e-04f, -6.394726159e-04f, -6.364497066e-04f, -6.334258584e-04f, -6.304010765e-04f,
--6.273753663e-04f, -6.243487330e-04f, -6.213211819e-04f, -6.182927183e-04f, -6.152633474e-04f, -6.122330746e-04f, -6.092019051e-04f, -6.061698443e-04f, -6.031368973e-04f, -6.001030696e-04f,
--5.970683663e-04f, -5.940327928e-04f, -5.909963544e-04f, -5.879590563e-04f, -5.849209039e-04f, -5.818819025e-04f, -5.788420573e-04f, -5.758013737e-04f, -5.727598569e-04f, -5.697175123e-04f,
--5.666743451e-04f, -5.636303607e-04f, -5.605855644e-04f, -5.575399614e-04f, -5.544935571e-04f, -5.514463568e-04f, -5.483983659e-04f, -5.453495895e-04f, -5.423000330e-04f, -5.392497018e-04f,
--5.361986011e-04f, -5.331467362e-04f, -5.300941126e-04f, -5.270407354e-04f, -5.239866101e-04f, -5.209317418e-04f, -5.178761360e-04f, -5.148197980e-04f, -5.117627331e-04f, -5.087049466e-04f,
--5.056464438e-04f, -5.025872301e-04f, -4.995273107e-04f, -4.964666911e-04f, -4.934053765e-04f, -4.903433723e-04f, -4.872806838e-04f, -4.842173163e-04f, -4.811532751e-04f, -4.780885657e-04f,
--4.750231933e-04f, -4.719571632e-04f, -4.688904808e-04f, -4.658231514e-04f, -4.627551804e-04f, -4.596865731e-04f, -4.566173349e-04f, -4.535474710e-04f, -4.504769868e-04f, -4.474058877e-04f,
--4.443341789e-04f, -4.412618659e-04f, -4.381889540e-04f, -4.351154485e-04f, -4.320413548e-04f, -4.289666782e-04f, -4.258914240e-04f, -4.228155976e-04f, -4.197392044e-04f, -4.166622497e-04f,
--4.135847388e-04f, -4.105066771e-04f, -4.074280699e-04f, -4.043489227e-04f, -4.012692407e-04f, -3.981890292e-04f, -3.951082938e-04f, -3.920270396e-04f, -3.889452720e-04f, -3.858629965e-04f,
--3.827802184e-04f, -3.796969429e-04f, -3.766131755e-04f, -3.735289216e-04f, -3.704441864e-04f, -3.673589754e-04f, -3.642732939e-04f, -3.611871472e-04f, -3.581005408e-04f, -3.550134799e-04f,
--3.519259699e-04f, -3.488380163e-04f, -3.457496243e-04f, -3.426607993e-04f, -3.395715468e-04f, -3.364818719e-04f, -3.333917802e-04f, -3.303012769e-04f, -3.272103674e-04f, -3.241190572e-04f,
--3.210273515e-04f, -3.179352557e-04f, -3.148427753e-04f, -3.117499154e-04f, -3.086566817e-04f, -3.055630792e-04f, -3.024691136e-04f, -2.993747901e-04f, -2.962801140e-04f, -2.931850908e-04f,
--2.900897259e-04f, -2.869940245e-04f, -2.838979921e-04f, -2.808016340e-04f, -2.777049556e-04f, -2.746079623e-04f, -2.715106594e-04f, -2.684130523e-04f, -2.653151464e-04f, -2.622169471e-04f,
--2.591184597e-04f, -2.560196895e-04f, -2.529206421e-04f, -2.498213226e-04f, -2.467217366e-04f, -2.436218893e-04f, -2.405217862e-04f, -2.374214326e-04f, -2.343208339e-04f, -2.312199954e-04f,
--2.281189226e-04f, -2.250176208e-04f, -2.219160954e-04f, -2.188143517e-04f, -2.157123952e-04f, -2.126102311e-04f, -2.095078649e-04f, -2.064053020e-04f, -2.033025477e-04f, -2.001996073e-04f,
--1.970964864e-04f, -1.939931901e-04f, -1.908897240e-04f, -1.877860934e-04f, -1.846823036e-04f, -1.815783600e-04f, -1.784742680e-04f, -1.753700331e-04f, -1.722656604e-04f, -1.691611555e-04f,
--1.660565237e-04f, -1.629517703e-04f, -1.598469008e-04f, -1.567419205e-04f, -1.536368347e-04f, -1.505316490e-04f, -1.474263685e-04f, -1.443209988e-04f, -1.412155451e-04f, -1.381100129e-04f,
--1.350044075e-04f, -1.318987342e-04f, -1.287929986e-04f, -1.256872058e-04f, -1.225813614e-04f, -1.194754707e-04f, -1.163695389e-04f, -1.132635716e-04f, -1.101575741e-04f, -1.070515518e-04f,
--1.039455099e-04f, -1.008394540e-04f, -9.773338931e-05f, -9.462732126e-05f, -9.152125521e-05f, -8.841519654e-05f, -8.530915059e-05f, -8.220312276e-05f, -7.909711839e-05f, -7.599114287e-05f,
--7.288520155e-05f, -6.977929981e-05f, -6.667344300e-05f, -6.356763650e-05f, -6.046188567e-05f, -5.735619588e-05f, -5.425057248e-05f, -5.114502085e-05f, -4.803954635e-05f, -4.493415434e-05f,
--4.182885019e-05f, -3.872363925e-05f, -3.561852689e-05f, -3.251351847e-05f, -2.940861935e-05f, -2.630383490e-05f, -2.319917047e-05f, -2.009463142e-05f, -1.699022312e-05f, -1.388595091e-05f,
--1.078182016e-05f, -7.677836232e-06f, -4.574004475e-06f, -1.470330248e-06f, 1.633181093e-06f, 4.736524192e-06f, 7.839693695e-06f, 1.094268425e-05f, 1.404549050e-05f, 1.714810709e-05f,
-2.025052867e-05f, 2.335274989e-05f, 2.645476539e-05f, 2.955656983e-05f, 3.265815786e-05f, 3.575952413e-05f, 3.886066328e-05f, 4.196156998e-05f, 4.506223887e-05f, 4.816266460e-05f,
-5.126284184e-05f, 5.436276523e-05f, 5.746242944e-05f, 6.056182911e-05f, 6.366095891e-05f, 6.675981349e-05f, 6.985838751e-05f, 7.295667563e-05f, 7.605467252e-05f, 7.915237282e-05f,
-8.224977121e-05f, 8.534686235e-05f, 8.844364089e-05f, 9.154010151e-05f, 9.463623887e-05f, 9.773204763e-05f, 1.008275225e-04f, 1.039226580e-04f, 1.070174490e-04f, 1.101118901e-04f,
-1.132059759e-04f, 1.162997011e-04f, 1.193930604e-04f, 1.224860485e-04f, 1.255786600e-04f, 1.286708896e-04f, 1.317627320e-04f, 1.348541819e-04f, 1.379452339e-04f, 1.410358827e-04f,
-1.441261231e-04f, 1.472159496e-04f, 1.503053570e-04f, 1.533943399e-04f, 1.564828930e-04f, 1.595710111e-04f, 1.626586887e-04f, 1.657459207e-04f, 1.688327016e-04f, 1.719190262e-04f,
-1.750048891e-04f, 1.780902851e-04f, 1.811752088e-04f, 1.842596549e-04f, 1.873436182e-04f, 1.904270933e-04f, 1.935100748e-04f, 1.965925576e-04f, 1.996745364e-04f, 2.027560057e-04f,
-2.058369603e-04f, 2.089173950e-04f, 2.119973043e-04f, 2.150766831e-04f, 2.181555260e-04f, 2.212338278e-04f, 2.243115831e-04f, 2.273887866e-04f, 2.304654331e-04f, 2.335415173e-04f,
-2.366170339e-04f, 2.396919776e-04f, 2.427663431e-04f, 2.458401251e-04f, 2.489133184e-04f, 2.519859176e-04f, 2.550579176e-04f, 2.581293130e-04f, 2.612000985e-04f, 2.642702689e-04f,
-2.673398188e-04f, 2.704087431e-04f, 2.734770365e-04f, 2.765446936e-04f, 2.796117092e-04f, 2.826780781e-04f, 2.857437950e-04f, 2.888088545e-04f, 2.918732516e-04f, 2.949369808e-04f,
-2.980000369e-04f, 3.010624148e-04f, 3.041241090e-04f, 3.071851144e-04f, 3.102454257e-04f, 3.133050376e-04f, 3.163639450e-04f, 3.194221425e-04f, 3.224796249e-04f, 3.255363870e-04f,
-3.285924235e-04f, 3.316477292e-04f, 3.347022988e-04f, 3.377561271e-04f, 3.408092088e-04f, 3.438615387e-04f, 3.469131117e-04f, 3.499639223e-04f, 3.530139655e-04f, 3.560632360e-04f,
-3.591117285e-04f, 3.621594378e-04f, 3.652063587e-04f, 3.682524860e-04f, 3.712978145e-04f, 3.743423389e-04f, 3.773860540e-04f, 3.804289546e-04f, 3.834710354e-04f, 3.865122914e-04f,
-3.895527171e-04f, 3.925923076e-04f, 3.956310574e-04f, 3.986689615e-04f, 4.017060146e-04f, 4.047422115e-04f, 4.077775470e-04f, 4.108120159e-04f, 4.138456130e-04f, 4.168783332e-04f,
-4.199101712e-04f, 4.229411218e-04f, 4.259711798e-04f, 4.290003401e-04f, 4.320285974e-04f, 4.350559466e-04f, 4.380823825e-04f, 4.411079000e-04f, 4.441324937e-04f, 4.471561586e-04f,
-4.501788894e-04f, 4.532006811e-04f, 4.562215283e-04f, 4.592414261e-04f, 4.622603691e-04f, 4.652783522e-04f, 4.682953703e-04f, 4.713114181e-04f, 4.743264906e-04f, 4.773405826e-04f,
-4.803536889e-04f, 4.833658043e-04f, 4.863769237e-04f, 4.893870420e-04f, 4.923961540e-04f, 4.954042545e-04f, 4.984113384e-04f, 5.014174006e-04f, 5.044224360e-04f, 5.074264393e-04f,
-5.104294055e-04f, 5.134313293e-04f, 5.164322058e-04f, 5.194320297e-04f, 5.224307959e-04f, 5.254284993e-04f, 5.284251348e-04f, 5.314206973e-04f, 5.344151815e-04f, 5.374085825e-04f,
-5.404008950e-04f, 5.433921141e-04f, 5.463822345e-04f, 5.493712511e-04f, 5.523591590e-04f, 5.553459528e-04f, 5.583316276e-04f, 5.613161782e-04f, 5.642995996e-04f, 5.672818867e-04f,
-5.702630342e-04f, 5.732430373e-04f, 5.762218907e-04f, 5.791995894e-04f, 5.821761282e-04f, 5.851515022e-04f, 5.881257063e-04f, 5.910987353e-04f, 5.940705841e-04f, 5.970412478e-04f,
-6.000107212e-04f, 6.029789993e-04f, 6.059460770e-04f, 6.089119492e-04f, 6.118766109e-04f, 6.148400570e-04f, 6.178022824e-04f, 6.207632822e-04f, 6.237230512e-04f, 6.266815844e-04f,
-6.296388768e-04f, 6.325949232e-04f, 6.355497188e-04f, 6.385032583e-04f, 6.414555369e-04f, 6.444065493e-04f, 6.473562908e-04f, 6.503047560e-04f, 6.532519402e-04f, 6.561978382e-04f,
-6.591424450e-04f, 6.620857555e-04f, 6.650277649e-04f, 6.679684680e-04f, 6.709078598e-04f, 6.738459354e-04f, 6.767826897e-04f, 6.797181177e-04f, 6.826522145e-04f, 6.855849749e-04f,
-6.885163941e-04f, 6.914464670e-04f, 6.943751886e-04f, 6.973025540e-04f, 7.002285581e-04f, 7.031531959e-04f, 7.060764626e-04f, 7.089983531e-04f, 7.119188624e-04f, 7.148379855e-04f,
-7.177557176e-04f, 7.206720535e-04f, 7.235869884e-04f, 7.265005173e-04f, 7.294126352e-04f, 7.323233372e-04f, 7.352326183e-04f, 7.381404735e-04f, 7.410468980e-04f, 7.439518867e-04f,
-7.468554347e-04f, 7.497575371e-04f, 7.526581890e-04f, 7.555573853e-04f, 7.584551212e-04f, 7.613513918e-04f, 7.642461920e-04f, 7.671395171e-04f, 7.700313620e-04f, 7.729217218e-04f,
-7.758105917e-04f, 7.786979667e-04f, 7.815838419e-04f, 7.844682123e-04f, 7.873510732e-04f, 7.902324195e-04f, 7.931122465e-04f, 7.959905491e-04f, 7.988673225e-04f, 8.017425619e-04f,
-8.046162622e-04f, 8.074884187e-04f, 8.103590264e-04f, 8.132280805e-04f, 8.160955761e-04f, 8.189615083e-04f, 8.218258723e-04f, 8.246886632e-04f, 8.275498761e-04f, 8.304095061e-04f,
-8.332675484e-04f, 8.361239982e-04f, 8.389788506e-04f, 8.418321008e-04f, 8.446837438e-04f, 8.475337749e-04f, 8.503821892e-04f, 8.532289819e-04f, 8.560741481e-04f, 8.589176831e-04f,
-8.617595819e-04f, 8.645998398e-04f, 8.674384520e-04f, 8.702754136e-04f, 8.731107197e-04f, 8.759443657e-04f, 8.787763467e-04f, 8.816066578e-04f, 8.844352943e-04f, 8.872622514e-04f,
-8.900875243e-04f, 8.929111081e-04f, 8.957329982e-04f, 8.985531897e-04f, 9.013716778e-04f, 9.041884577e-04f, 9.070035247e-04f, 9.098168740e-04f, 9.126285009e-04f, 9.154384005e-04f,
-9.182465680e-04f, 9.210529988e-04f, 9.238576881e-04f, 9.266606311e-04f, 9.294618231e-04f, 9.322612593e-04f, 9.350589349e-04f, 9.378548453e-04f, 9.406489857e-04f, 9.434413513e-04f,
-9.462319375e-04f, 9.490207395e-04f, 9.518077525e-04f, 9.545929719e-04f, 9.573763929e-04f, 9.601580108e-04f, 9.629378210e-04f, 9.657158186e-04f, 9.684919991e-04f, 9.712663576e-04f,
-9.740388895e-04f, 9.768095901e-04f, 9.795784548e-04f, 9.823454787e-04f, 9.851106573e-04f, 9.878739859e-04f, 9.906354597e-04f, 9.933950741e-04f, 9.961528245e-04f, 9.989087061e-04f,
-1.001662714e-03f, 1.004414845e-03f, 1.007165092e-03f, 1.009913452e-03f, 1.012659920e-03f, 1.015404492e-03f, 1.018147162e-03f, 1.020887926e-03f, 1.023626779e-03f, 1.026363718e-03f,
-1.029098736e-03f, 1.031831830e-03f, 1.034562995e-03f, 1.037292227e-03f, 1.040019520e-03f, 1.042744870e-03f, 1.045468272e-03f, 1.048189723e-03f, 1.050909216e-03f, 1.053626749e-03f,
-1.056342315e-03f, 1.059055911e-03f, 1.061767532e-03f, 1.064477173e-03f, 1.067184829e-03f, 1.069890497e-03f, 1.072594172e-03f, 1.075295849e-03f, 1.077995523e-03f, 1.080693190e-03f,
-1.083388845e-03f, 1.086082484e-03f, 1.088774103e-03f, 1.091463696e-03f, 1.094151259e-03f, 1.096836788e-03f, 1.099520278e-03f, 1.102201725e-03f, 1.104881123e-03f, 1.107558469e-03f,
-1.110233758e-03f, 1.112906986e-03f, 1.115578148e-03f, 1.118247239e-03f, 1.120914255e-03f, 1.123579191e-03f, 1.126242044e-03f, 1.128902808e-03f, 1.131561479e-03f, 1.134218052e-03f,
-1.136872524e-03f, 1.139524889e-03f, 1.142175143e-03f, 1.144823282e-03f, 1.147469301e-03f, 1.150113195e-03f, 1.152754961e-03f, 1.155394594e-03f, 1.158032089e-03f, 1.160667442e-03f,
-1.163300648e-03f, 1.165931704e-03f, 1.168560603e-03f, 1.171187344e-03f, 1.173811919e-03f, 1.176434326e-03f, 1.179054560e-03f, 1.181672617e-03f, 1.184288491e-03f, 1.186902180e-03f,
-1.189513677e-03f, 1.192122980e-03f, 1.194730082e-03f, 1.197334981e-03f, 1.199937672e-03f, 1.202538150e-03f, 1.205136411e-03f, 1.207732450e-03f, 1.210326264e-03f, 1.212917847e-03f,
-1.215507196e-03f, 1.218094306e-03f, 1.220679173e-03f, 1.223261792e-03f, 1.225842160e-03f, 1.228420271e-03f, 1.230996121e-03f, 1.233569707e-03f, 1.236141023e-03f, 1.238710066e-03f,
-1.241276830e-03f, 1.243841313e-03f, 1.246403509e-03f, 1.248963414e-03f, 1.251521024e-03f, 1.254076335e-03f, 1.256629342e-03f, 1.259180041e-03f, 1.261728428e-03f, 1.264274498e-03f,
-1.266818247e-03f, 1.269359671e-03f, 1.271898766e-03f, 1.274435527e-03f, 1.276969950e-03f, 1.279502031e-03f, 1.282031765e-03f, 1.284559149e-03f, 1.287084178e-03f, 1.289606847e-03f,
-1.292127154e-03f, 1.294645092e-03f, 1.297160659e-03f, 1.299673850e-03f, 1.302184660e-03f, 1.304693086e-03f, 1.307199124e-03f, 1.309702768e-03f, 1.312204015e-03f, 1.314702861e-03f,
-1.317199301e-03f, 1.319693332e-03f, 1.322184949e-03f, 1.324674148e-03f, 1.327160925e-03f, 1.329645275e-03f, 1.332127194e-03f, 1.334606679e-03f, 1.337083726e-03f, 1.339558329e-03f,
-1.342030485e-03f, 1.344500189e-03f, 1.346967438e-03f, 1.349432228e-03f, 1.351894554e-03f, 1.354354412e-03f, 1.356811798e-03f, 1.359266708e-03f, 1.361719138e-03f, 1.364169083e-03f,
-1.366616541e-03f, 1.369061505e-03f, 1.371503973e-03f, 1.373943941e-03f, 1.376381404e-03f, 1.378816357e-03f, 1.381248798e-03f, 1.383678722e-03f, 1.386106125e-03f, 1.388531003e-03f,
-1.390953352e-03f, 1.393373168e-03f, 1.395790446e-03f, 1.398205183e-03f, 1.400617374e-03f, 1.403027017e-03f, 1.405434106e-03f, 1.407838637e-03f, 1.410240607e-03f, 1.412640012e-03f,
-1.415036847e-03f, 1.417431108e-03f, 1.419822792e-03f, 1.422211895e-03f, 1.424598412e-03f, 1.426982340e-03f, 1.429363674e-03f, 1.431742411e-03f, 1.434118547e-03f, 1.436492077e-03f,
-1.438862998e-03f, 1.441231306e-03f, 1.443596996e-03f, 1.445960065e-03f, 1.448320510e-03f, 1.450678325e-03f, 1.453033507e-03f, 1.455386052e-03f, 1.457735956e-03f, 1.460083216e-03f,
-1.462427827e-03f, 1.464769785e-03f, 1.467109087e-03f, 1.469445728e-03f, 1.471779705e-03f, 1.474111014e-03f, 1.476439651e-03f, 1.478765612e-03f, 1.481088893e-03f, 1.483409490e-03f,
-1.485727400e-03f, 1.488042618e-03f, 1.490355141e-03f, 1.492664965e-03f, 1.494972086e-03f, 1.497276500e-03f, 1.499578204e-03f, 1.501877192e-03f, 1.504173463e-03f, 1.506467011e-03f,
-1.508757834e-03f, 1.511045926e-03f, 1.513331285e-03f, 1.515613907e-03f, 1.517893787e-03f, 1.520170922e-03f, 1.522445309e-03f, 1.524716943e-03f, 1.526985820e-03f, 1.529251938e-03f,
-1.531515292e-03f, 1.533775877e-03f, 1.536033692e-03f, 1.538288731e-03f, 1.540540992e-03f, 1.542790469e-03f, 1.545037161e-03f, 1.547281062e-03f, 1.549522169e-03f, 1.551760479e-03f,
-1.553995987e-03f, 1.556228690e-03f, 1.558458585e-03f, 1.560685667e-03f, 1.562909933e-03f, 1.565131379e-03f, 1.567350002e-03f, 1.569565797e-03f, 1.571778762e-03f, 1.573988892e-03f,
-1.576196184e-03f, 1.578400633e-03f, 1.580602238e-03f, 1.582800993e-03f, 1.584996895e-03f, 1.587189941e-03f, 1.589380126e-03f, 1.591567448e-03f, 1.593751902e-03f, 1.595933486e-03f,
-1.598112195e-03f, 1.600288025e-03f, 1.602460974e-03f, 1.604631037e-03f, 1.606798211e-03f, 1.608962492e-03f, 1.611123878e-03f, 1.613282363e-03f, 1.615437945e-03f, 1.617590620e-03f,
-1.619740385e-03f, 1.621887235e-03f, 1.624031168e-03f, 1.626172180e-03f, 1.628310267e-03f, 1.630445425e-03f, 1.632577652e-03f, 1.634706943e-03f, 1.636833296e-03f, 1.638956706e-03f,
-1.641077171e-03f, 1.643194686e-03f, 1.645309248e-03f, 1.647420853e-03f, 1.649529499e-03f, 1.651635181e-03f, 1.653737897e-03f, 1.655837642e-03f, 1.657934413e-03f, 1.660028207e-03f,
-1.662119021e-03f, 1.664206850e-03f, 1.666291692e-03f, 1.668373542e-03f, 1.670452398e-03f, 1.672528256e-03f, 1.674601113e-03f, 1.676670964e-03f, 1.678737808e-03f, 1.680801640e-03f,
-1.682862457e-03f, 1.684920255e-03f, 1.686975032e-03f, 1.689026784e-03f, 1.691075506e-03f, 1.693121197e-03f, 1.695163853e-03f, 1.697203470e-03f, 1.699240044e-03f, 1.701273573e-03f,
-1.703304054e-03f, 1.705331482e-03f, 1.707355855e-03f, 1.709377169e-03f, 1.711395421e-03f, 1.713410607e-03f, 1.715422725e-03f, 1.717431770e-03f, 1.719437740e-03f, 1.721440631e-03f,
-1.723440441e-03f, 1.725437165e-03f, 1.727430800e-03f, 1.729421343e-03f, 1.731408792e-03f, 1.733393142e-03f, 1.735374390e-03f, 1.737352533e-03f, 1.739327568e-03f, 1.741299492e-03f,
-1.743268301e-03f, 1.745233992e-03f, 1.747196562e-03f, 1.749156007e-03f, 1.751112325e-03f, 1.753065512e-03f, 1.755015565e-03f, 1.756962481e-03f, 1.758906256e-03f, 1.760846888e-03f,
-1.762784373e-03f, 1.764718708e-03f, 1.766649890e-03f, 1.768577915e-03f, 1.770502781e-03f, 1.772424484e-03f, 1.774343022e-03f, 1.776258390e-03f, 1.778170587e-03f, 1.780079608e-03f,
-1.781985451e-03f, 1.783888112e-03f, 1.785787589e-03f, 1.787683878e-03f, 1.789576977e-03f, 1.791466881e-03f, 1.793353588e-03f, 1.795237095e-03f, 1.797117400e-03f, 1.798994497e-03f,
-1.800868386e-03f, 1.802739062e-03f, 1.804606522e-03f, 1.806470764e-03f, 1.808331785e-03f, 1.810189580e-03f, 1.812044149e-03f, 1.813895486e-03f, 1.815743590e-03f, 1.817588457e-03f,
-1.819430084e-03f, 1.821268468e-03f, 1.823103607e-03f, 1.824935497e-03f, 1.826764135e-03f, 1.828589519e-03f, 1.830411644e-03f, 1.832230509e-03f, 1.834046110e-03f, 1.835858445e-03f,
-1.837667510e-03f, 1.839473302e-03f, 1.841275819e-03f, 1.843075058e-03f, 1.844871015e-03f, 1.846663688e-03f, 1.848453074e-03f, 1.850239169e-03f, 1.852021972e-03f, 1.853801478e-03f,
-1.855577686e-03f, 1.857350592e-03f, 1.859120193e-03f, 1.860886487e-03f, 1.862649470e-03f, 1.864409140e-03f, 1.866165494e-03f, 1.867918529e-03f, 1.869668242e-03f, 1.871414630e-03f,
-1.873157691e-03f, 1.874897422e-03f, 1.876633819e-03f, 1.878366880e-03f, 1.880096603e-03f, 1.881822983e-03f, 1.883546020e-03f, 1.885265709e-03f, 1.886982048e-03f, 1.888695034e-03f,
-1.890404665e-03f, 1.892110937e-03f, 1.893813848e-03f, 1.895513395e-03f, 1.897209576e-03f, 1.898902387e-03f, 1.900591825e-03f, 1.902277889e-03f, 1.903960576e-03f, 1.905639881e-03f,
-1.907315804e-03f, 1.908988341e-03f, 1.910657490e-03f, 1.912323247e-03f, 1.913985610e-03f, 1.915644577e-03f, 1.917300144e-03f, 1.918952310e-03f, 1.920601070e-03f, 1.922246424e-03f,
-1.923888367e-03f, 1.925526898e-03f, 1.927162013e-03f, 1.928793711e-03f, 1.930421988e-03f, 1.932046842e-03f, 1.933668269e-03f, 1.935286269e-03f, 1.936900837e-03f, 1.938511972e-03f,
-1.940119670e-03f, 1.941723930e-03f, 1.943324748e-03f, 1.944922122e-03f, 1.946516050e-03f, 1.948106528e-03f, 1.949693554e-03f, 1.951277127e-03f, 1.952857242e-03f, 1.954433898e-03f,
-1.956007092e-03f, 1.957576821e-03f, 1.959143084e-03f, 1.960705877e-03f, 1.962265198e-03f, 1.963821044e-03f, 1.965373413e-03f, 1.966922303e-03f, 1.968467711e-03f, 1.970009634e-03f,
-1.971548070e-03f, 1.973083016e-03f, 1.974614471e-03f, 1.976142431e-03f, 1.977666895e-03f, 1.979187859e-03f, 1.980705321e-03f, 1.982219279e-03f, 1.983729731e-03f, 1.985236673e-03f,
-1.986740104e-03f, 1.988240021e-03f, 1.989736422e-03f, 1.991229304e-03f, 1.992718665e-03f, 1.994204503e-03f, 1.995686815e-03f, 1.997165598e-03f, 1.998640851e-03f, 2.000112571e-03f,
-2.001580756e-03f, 2.003045403e-03f, 2.004506510e-03f, 2.005964075e-03f, 2.007418095e-03f, 2.008868568e-03f, 2.010315492e-03f, 2.011758864e-03f, 2.013198683e-03f, 2.014634945e-03f,
-2.016067649e-03f, 2.017496792e-03f, 2.018922371e-03f, 2.020344386e-03f, 2.021762833e-03f, 2.023177710e-03f, 2.024589015e-03f, 2.025996745e-03f, 2.027400899e-03f, 2.028801474e-03f,
-2.030198468e-03f, 2.031591879e-03f, 2.032981704e-03f, 2.034367942e-03f, 2.035750589e-03f, 2.037129645e-03f, 2.038505106e-03f, 2.039876970e-03f, 2.041245236e-03f, 2.042609901e-03f,
-2.043970963e-03f, 2.045328420e-03f, 2.046682270e-03f, 2.048032510e-03f, 2.049379138e-03f, 2.050722153e-03f, 2.052061551e-03f, 2.053397332e-03f, 2.054729493e-03f, 2.056058031e-03f,
-2.057382945e-03f, 2.058704233e-03f, 2.060021892e-03f, 2.061335920e-03f, 2.062646316e-03f, 2.063953077e-03f, 2.065256202e-03f, 2.066555687e-03f, 2.067851531e-03f, 2.069143733e-03f,
-2.070432289e-03f, 2.071717199e-03f, 2.072998459e-03f, 2.074276068e-03f, 2.075550024e-03f, 2.076820326e-03f, 2.078086970e-03f, 2.079349954e-03f, 2.080609278e-03f, 2.081864939e-03f,
-2.083116934e-03f, 2.084365263e-03f, 2.085609923e-03f, 2.086850912e-03f, 2.088088227e-03f, 2.089321868e-03f, 2.090551833e-03f, 2.091778118e-03f, 2.093000723e-03f, 2.094219646e-03f,
-2.095434884e-03f, 2.096646436e-03f, 2.097854299e-03f, 2.099058472e-03f, 2.100258954e-03f, 2.101455741e-03f, 2.102648833e-03f, 2.103838227e-03f, 2.105023922e-03f, 2.106205915e-03f,
-2.107384205e-03f, 2.108558790e-03f, 2.109729668e-03f, 2.110896838e-03f, 2.112060297e-03f, 2.113220044e-03f, 2.114376076e-03f, 2.115528393e-03f, 2.116676992e-03f, 2.117821872e-03f,
-2.118963030e-03f, 2.120100465e-03f, 2.121234176e-03f, 2.122364160e-03f, 2.123490415e-03f, 2.124612941e-03f, 2.125731734e-03f, 2.126846795e-03f, 2.127958119e-03f, 2.129065707e-03f,
-2.130169556e-03f, 2.131269665e-03f, 2.132366032e-03f, 2.133458655e-03f, 2.134547532e-03f, 2.135632662e-03f, 2.136714043e-03f, 2.137791674e-03f, 2.138865553e-03f, 2.139935678e-03f,
-2.141002047e-03f, 2.142064659e-03f, 2.143123512e-03f, 2.144178605e-03f, 2.145229936e-03f, 2.146277503e-03f, 2.147321305e-03f, 2.148361341e-03f, 2.149397607e-03f, 2.150430104e-03f,
-2.151458829e-03f, 2.152483781e-03f, 2.153504958e-03f, 2.154522359e-03f, 2.155535982e-03f, 2.156545825e-03f, 2.157551888e-03f, 2.158554168e-03f, 2.159552664e-03f, 2.160547374e-03f,
-2.161538297e-03f, 2.162525432e-03f, 2.163508777e-03f, 2.164488330e-03f, 2.165464090e-03f, 2.166436055e-03f, 2.167404224e-03f, 2.168368596e-03f, 2.169329169e-03f, 2.170285941e-03f,
-2.171238912e-03f, 2.172188079e-03f, 2.173133441e-03f, 2.174074998e-03f, 2.175012746e-03f, 2.175946686e-03f, 2.176876815e-03f, 2.177803132e-03f, 2.178725636e-03f, 2.179644325e-03f,
-2.180559199e-03f, 2.181470255e-03f, 2.182377492e-03f, 2.183280909e-03f, 2.184180504e-03f, 2.185076277e-03f, 2.185968225e-03f, 2.186856348e-03f, 2.187740645e-03f, 2.188621112e-03f,
-2.189497751e-03f, 2.190370558e-03f, 2.191239534e-03f, 2.192104676e-03f, 2.192965984e-03f, 2.193823455e-03f, 2.194677089e-03f, 2.195526885e-03f, 2.196372841e-03f, 2.197214955e-03f,
-2.198053228e-03f, 2.198887657e-03f, 2.199718241e-03f, 2.200544979e-03f, 2.201367870e-03f, 2.202186913e-03f, 2.203002106e-03f, 2.203813447e-03f, 2.204620937e-03f, 2.205424574e-03f,
-2.206224356e-03f, 2.207020283e-03f, 2.207812353e-03f, 2.208600565e-03f, 2.209384918e-03f, 2.210165410e-03f, 2.210942041e-03f, 2.211714810e-03f, 2.212483715e-03f, 2.213248755e-03f,
-2.214009930e-03f, 2.214767237e-03f, 2.215520676e-03f, 2.216270247e-03f, 2.217015946e-03f, 2.217757775e-03f, 2.218495731e-03f, 2.219229813e-03f, 2.219960021e-03f, 2.220686353e-03f,
-2.221408809e-03f, 2.222127387e-03f, 2.222842086e-03f, 2.223552906e-03f, 2.224259844e-03f, 2.224962901e-03f, 2.225662075e-03f, 2.226357365e-03f, 2.227048770e-03f, 2.227736290e-03f,
-2.228419923e-03f, 2.229099668e-03f, 2.229775524e-03f, 2.230447490e-03f, 2.231115566e-03f, 2.231779751e-03f, 2.232440043e-03f, 2.233096441e-03f, 2.233748945e-03f, 2.234397554e-03f,
-2.235042266e-03f, 2.235683082e-03f, 2.236319999e-03f, 2.236953018e-03f, 2.237582136e-03f, 2.238207354e-03f, 2.238828671e-03f, 2.239446085e-03f, 2.240059595e-03f, 2.240669202e-03f,
-2.241274904e-03f, 2.241876700e-03f, 2.242474589e-03f, 2.243068571e-03f, 2.243658644e-03f, 2.244244808e-03f, 2.244827063e-03f, 2.245405407e-03f, 2.245979839e-03f, 2.246550359e-03f,
-2.247116966e-03f, 2.247679660e-03f, 2.248238438e-03f, 2.248793302e-03f, 2.249344249e-03f, 2.249891279e-03f, 2.250434392e-03f, 2.250973587e-03f, 2.251508862e-03f, 2.252040218e-03f,
-2.252567654e-03f, 2.253091168e-03f, 2.253610760e-03f, 2.254126430e-03f, 2.254638177e-03f, 2.255146000e-03f, 2.255649898e-03f, 2.256149871e-03f, 2.256645919e-03f, 2.257138040e-03f,
-2.257626233e-03f, 2.258110499e-03f, 2.258590836e-03f, 2.259067245e-03f, 2.259539724e-03f, 2.260008272e-03f, 2.260472890e-03f, 2.260933576e-03f, 2.261390330e-03f, 2.261843152e-03f,
-2.262292041e-03f, 2.262736995e-03f, 2.263178016e-03f, 2.263615101e-03f, 2.264048251e-03f, 2.264477466e-03f, 2.264902744e-03f, 2.265324084e-03f, 2.265741488e-03f, 2.266154953e-03f,
-2.266564480e-03f, 2.266970067e-03f, 2.267371716e-03f, 2.267769424e-03f, 2.268163192e-03f, 2.268553019e-03f, 2.268938904e-03f, 2.269320848e-03f, 2.269698849e-03f, 2.270072907e-03f,
-2.270443023e-03f, 2.270809195e-03f, 2.271171422e-03f, 2.271529705e-03f, 2.271884044e-03f, 2.272234437e-03f, 2.272580885e-03f, 2.272923386e-03f, 2.273261941e-03f, 2.273596549e-03f,
-2.273927210e-03f, 2.274253924e-03f, 2.274576690e-03f, 2.274895507e-03f, 2.275210376e-03f, 2.275521296e-03f, 2.275828267e-03f, 2.276131288e-03f, 2.276430359e-03f, 2.276725481e-03f,
-2.277016651e-03f, 2.277303871e-03f, 2.277587140e-03f, 2.277866458e-03f, 2.278141824e-03f, 2.278413239e-03f, 2.278680701e-03f, 2.278944210e-03f, 2.279203768e-03f, 2.279459372e-03f,
-2.279711023e-03f, 2.279958721e-03f, 2.280202466e-03f, 2.280442257e-03f, 2.280678093e-03f, 2.280909976e-03f, 2.281137905e-03f, 2.281361879e-03f, 2.281581898e-03f, 2.281797962e-03f,
-2.282010072e-03f, 2.282218226e-03f, 2.282422425e-03f, 2.282622669e-03f, 2.282818957e-03f, 2.283011289e-03f, 2.283199666e-03f, 2.283384086e-03f, 2.283564551e-03f, 2.283741059e-03f,
-2.283913611e-03f, 2.284082207e-03f, 2.284246847e-03f, 2.284407530e-03f, 2.284564256e-03f, 2.284717026e-03f, 2.284865839e-03f, 2.285010696e-03f, 2.285151595e-03f, 2.285288538e-03f,
-2.285421525e-03f, 2.285550554e-03f, 2.285675627e-03f, 2.285796742e-03f, 2.285913901e-03f, 2.286027103e-03f, 2.286136349e-03f, 2.286241637e-03f, 2.286342969e-03f, 2.286440344e-03f,
-2.286533763e-03f, 2.286623224e-03f, 2.286708730e-03f, 2.286790279e-03f, 2.286867871e-03f, 2.286941507e-03f, 2.287011187e-03f, 2.287076910e-03f, 2.287138678e-03f, 2.287196489e-03f,
-2.287250345e-03f, 2.287300245e-03f, 2.287346190e-03f, 2.287388178e-03f, 2.287426212e-03f, 2.287460290e-03f, 2.287490414e-03f, 2.287516582e-03f, 2.287538796e-03f, 2.287557055e-03f,
-2.287571360e-03f, 2.287581711e-03f, 2.287588107e-03f, 2.287590550e-03f, 2.287589040e-03f, 2.287583576e-03f, 2.287574159e-03f, 2.287560789e-03f, 2.287543466e-03f, 2.287522191e-03f,
-2.287496963e-03f, 2.287467784e-03f, 2.287434653e-03f, 2.287397571e-03f, 2.287356538e-03f, 2.287311553e-03f, 2.287262619e-03f, 2.287209734e-03f, 2.287152899e-03f, 2.287092114e-03f,
-2.287027380e-03f, 2.286958697e-03f, 2.286886066e-03f, 2.286809486e-03f, 2.286728958e-03f, 2.286644482e-03f, 2.286556059e-03f, 2.286463690e-03f, 2.286367373e-03f, 2.286267111e-03f,
-2.286162903e-03f, 2.286054749e-03f, 2.285942650e-03f, 2.285826607e-03f, 2.285706620e-03f, 2.285582688e-03f, 2.285454814e-03f, 2.285322997e-03f, 2.285187237e-03f, 2.285047535e-03f,
-2.284903892e-03f, 2.284756307e-03f, 2.284604782e-03f, 2.284449317e-03f, 2.284289912e-03f, 2.284126567e-03f, 2.283959284e-03f, 2.283788063e-03f, 2.283612905e-03f, 2.283433809e-03f,
-2.283250776e-03f, 2.283063807e-03f, 2.282872903e-03f, 2.282678063e-03f, 2.282479289e-03f, 2.282276581e-03f, 2.282069940e-03f, 2.281859366e-03f, 2.281644859e-03f, 2.281426421e-03f,
-2.281204052e-03f, 2.280977753e-03f, 2.280747523e-03f, 2.280513364e-03f, 2.280275277e-03f, 2.280033261e-03f, 2.279787318e-03f, 2.279537448e-03f, 2.279283652e-03f, 2.279025931e-03f,
-2.278764285e-03f, 2.278498714e-03f, 2.278229221e-03f, 2.277955804e-03f, 2.277678465e-03f, 2.277397205e-03f, 2.277112024e-03f, 2.276822923e-03f, 2.276529902e-03f, 2.276232963e-03f,
-2.275932106e-03f, 2.275627332e-03f, 2.275318641e-03f, 2.275006035e-03f, 2.274689514e-03f, 2.274369078e-03f, 2.274044729e-03f, 2.273716468e-03f, 2.273384294e-03f, 2.273048210e-03f,
-2.272708215e-03f, 2.272364311e-03f, 2.272016498e-03f, 2.271664777e-03f, 2.271309149e-03f, 2.270949614e-03f, 2.270586175e-03f, 2.270218830e-03f, 2.269847582e-03f, 2.269472432e-03f,
-2.269093379e-03f, 2.268710425e-03f, 2.268323570e-03f, 2.267932816e-03f, 2.267538164e-03f, 2.267139614e-03f, 2.266737167e-03f, 2.266330825e-03f, 2.265920587e-03f, 2.265506456e-03f,
-2.265088431e-03f, 2.264666514e-03f, 2.264240706e-03f, 2.263811008e-03f, 2.263377420e-03f, 2.262939944e-03f, 2.262498581e-03f, 2.262053331e-03f, 2.261604196e-03f, 2.261151176e-03f,
-2.260694273e-03f, 2.260233487e-03f, 2.259768820e-03f, 2.259300272e-03f, 2.258827845e-03f, 2.258351540e-03f, 2.257871357e-03f, 2.257387298e-03f, 2.256899363e-03f, 2.256407554e-03f,
-2.255911872e-03f, 2.255412318e-03f, 2.254908893e-03f, 2.254401598e-03f, 2.253890433e-03f, 2.253375401e-03f, 2.252856503e-03f, 2.252333738e-03f, 2.251807110e-03f, 2.251276618e-03f,
-2.250742263e-03f, 2.250204048e-03f, 2.249661972e-03f, 2.249116038e-03f, 2.248566245e-03f, 2.248012597e-03f, 2.247455093e-03f, 2.246893735e-03f, 2.246328523e-03f, 2.245759460e-03f,
-2.245186546e-03f, 2.244609783e-03f, 2.244029172e-03f, 2.243444713e-03f, 2.242856409e-03f, 2.242264260e-03f, 2.241668267e-03f, 2.241068433e-03f, 2.240464757e-03f, 2.239857242e-03f,
-2.239245889e-03f, 2.238630698e-03f, 2.238011671e-03f, 2.237388810e-03f, 2.236762116e-03f, 2.236131590e-03f, 2.235497232e-03f, 2.234859046e-03f, 2.234217031e-03f, 2.233571190e-03f,
-2.232921523e-03f, 2.232268032e-03f, 2.231610718e-03f, 2.230949582e-03f, 2.230284627e-03f, 2.229615852e-03f, 2.228943261e-03f, 2.228266853e-03f, 2.227586630e-03f, 2.226902595e-03f,
-2.226214747e-03f, 2.225523089e-03f, 2.224827621e-03f, 2.224128346e-03f, 2.223425265e-03f, 2.222718379e-03f, 2.222007689e-03f, 2.221293198e-03f, 2.220574905e-03f, 2.219852814e-03f,
-2.219126925e-03f, 2.218397240e-03f, 2.217663760e-03f, 2.216926486e-03f, 2.216185421e-03f, 2.215440566e-03f, 2.214691922e-03f, 2.213939490e-03f, 2.213183272e-03f, 2.212423271e-03f,
-2.211659486e-03f, 2.210891920e-03f, 2.210120574e-03f, 2.209345450e-03f, 2.208566550e-03f, 2.207783874e-03f, 2.206997425e-03f, 2.206207204e-03f, 2.205413212e-03f, 2.204615451e-03f,
-2.203813923e-03f, 2.203008630e-03f, 2.202199572e-03f, 2.201386752e-03f, 2.200570170e-03f, 2.199749830e-03f, 2.198925732e-03f, 2.198097878e-03f, 2.197266269e-03f, 2.196430908e-03f,
-2.195591795e-03f, 2.194748933e-03f, 2.193902323e-03f, 2.193051968e-03f, 2.192197867e-03f, 2.191340024e-03f, 2.190478439e-03f, 2.189613116e-03f, 2.188744054e-03f, 2.187871256e-03f,
-2.186994724e-03f, 2.186114460e-03f, 2.185230464e-03f, 2.184342740e-03f, 2.183451288e-03f, 2.182556110e-03f, 2.181657208e-03f, 2.180754584e-03f, 2.179848240e-03f, 2.178938177e-03f,
-2.178024397e-03f, 2.177106902e-03f, 2.176185694e-03f, 2.175260774e-03f, 2.174332145e-03f, 2.173399807e-03f, 2.172463763e-03f, 2.171524015e-03f, 2.170580565e-03f, 2.169633414e-03f,
-2.168682564e-03f, 2.167728017e-03f, 2.166769775e-03f, 2.165807839e-03f, 2.164842213e-03f, 2.163872896e-03f, 2.162899892e-03f, 2.161923203e-03f, 2.160942829e-03f, 2.159958773e-03f,
-2.158971037e-03f, 2.157979623e-03f, 2.156984533e-03f, 2.155985768e-03f, 2.154983331e-03f, 2.153977223e-03f, 2.152967446e-03f, 2.151954003e-03f, 2.150936896e-03f, 2.149916125e-03f,
-2.148891694e-03f, 2.147863604e-03f, 2.146831857e-03f, 2.145796455e-03f, 2.144757400e-03f, 2.143714694e-03f, 2.142668340e-03f, 2.141618338e-03f, 2.140564692e-03f, 2.139507402e-03f,
-2.138446472e-03f, 2.137381903e-03f, 2.136313698e-03f, 2.135241857e-03f, 2.134166384e-03f, 2.133087280e-03f, 2.132004548e-03f, 2.130918189e-03f, 2.129828205e-03f, 2.128734600e-03f,
-2.127637374e-03f, 2.126536529e-03f, 2.125432069e-03f, 2.124323995e-03f, 2.123212308e-03f, 2.122097012e-03f, 2.120978109e-03f, 2.119855600e-03f, 2.118729487e-03f, 2.117599773e-03f,
-2.116466461e-03f, 2.115329551e-03f, 2.114189046e-03f, 2.113044949e-03f, 2.111897261e-03f, 2.110745985e-03f, 2.109591123e-03f, 2.108432677e-03f, 2.107270649e-03f, 2.106105042e-03f,
-2.104935857e-03f, 2.103763098e-03f, 2.102586765e-03f, 2.101406862e-03f, 2.100223390e-03f, 2.099036352e-03f, 2.097845751e-03f, 2.096651587e-03f, 2.095453864e-03f, 2.094252584e-03f,
-2.093047749e-03f, 2.091839362e-03f, 2.090627424e-03f, 2.089411938e-03f, 2.088192906e-03f, 2.086970330e-03f, 2.085744214e-03f, 2.084514558e-03f, 2.083281366e-03f, 2.082044640e-03f,
-2.080804382e-03f, 2.079560594e-03f, 2.078313279e-03f, 2.077062439e-03f, 2.075808077e-03f, 2.074550195e-03f, 2.073288794e-03f, 2.072023878e-03f, 2.070755449e-03f, 2.069483510e-03f,
-2.068208062e-03f, 2.066929108e-03f, 2.065646650e-03f, 2.064360692e-03f, 2.063071235e-03f, 2.061778281e-03f, 2.060481834e-03f, 2.059181895e-03f, 2.057878467e-03f, 2.056571553e-03f,
-2.055261154e-03f, 2.053947274e-03f, 2.052629914e-03f, 2.051309078e-03f, 2.049984768e-03f, 2.048656986e-03f, 2.047325734e-03f, 2.045991016e-03f, 2.044652833e-03f, 2.043311188e-03f,
-2.041966084e-03f, 2.040617524e-03f, 2.039265508e-03f, 2.037910042e-03f, 2.036551125e-03f, 2.035188763e-03f, 2.033822955e-03f, 2.032453707e-03f, 2.031081019e-03f, 2.029704895e-03f,
-2.028325336e-03f, 2.026942347e-03f, 2.025555928e-03f, 2.024166083e-03f, 2.022772815e-03f, 2.021376125e-03f, 2.019976017e-03f, 2.018572493e-03f, 2.017165556e-03f, 2.015755208e-03f,
-2.014341452e-03f, 2.012924291e-03f, 2.011503727e-03f, 2.010079763e-03f, 2.008652401e-03f, 2.007221645e-03f, 2.005787496e-03f, 2.004349958e-03f, 2.002909033e-03f, 2.001464724e-03f,
-2.000017033e-03f, 1.998565964e-03f, 1.997111518e-03f, 1.995653699e-03f, 1.994192509e-03f, 1.992727951e-03f, 1.991260028e-03f, 1.989788742e-03f, 1.988314096e-03f, 1.986836093e-03f,
-1.985354736e-03f, 1.983870027e-03f, 1.982381969e-03f, 1.980890565e-03f, 1.979395818e-03f, 1.977897730e-03f, 1.976396304e-03f, 1.974891542e-03f, 1.973383449e-03f, 1.971872026e-03f,
-1.970357276e-03f, 1.968839202e-03f, 1.967317807e-03f, 1.965793094e-03f, 1.964265065e-03f, 1.962733724e-03f, 1.961199072e-03f, 1.959661114e-03f, 1.958119851e-03f, 1.956575287e-03f,
-1.955027424e-03f, 1.953476266e-03f, 1.951921815e-03f, 1.950364074e-03f, 1.948803045e-03f, 1.947238733e-03f, 1.945671139e-03f, 1.944100267e-03f, 1.942526119e-03f, 1.940948698e-03f,
-1.939368008e-03f, 1.937784051e-03f, 1.936196830e-03f, 1.934606347e-03f, 1.933012607e-03f, 1.931415612e-03f, 1.929815364e-03f, 1.928211867e-03f, 1.926605123e-03f, 1.924995137e-03f,
-1.923381909e-03f, 1.921765445e-03f, 1.920145746e-03f, 1.918522815e-03f, 1.916896655e-03f, 1.915267270e-03f, 1.913634663e-03f, 1.911998836e-03f, 1.910359792e-03f, 1.908717535e-03f,
-1.907072067e-03f, 1.905423391e-03f, 1.903771511e-03f, 1.902116429e-03f, 1.900458149e-03f, 1.898796674e-03f, 1.897132006e-03f, 1.895464149e-03f, 1.893793105e-03f, 1.892118878e-03f,
-1.890441471e-03f, 1.888760887e-03f, 1.887077129e-03f, 1.885390200e-03f, 1.883700103e-03f, 1.882006841e-03f, 1.880310418e-03f, 1.878610835e-03f, 1.876908098e-03f, 1.875202208e-03f,
-1.873493169e-03f, 1.871780984e-03f, 1.870065655e-03f, 1.868347187e-03f, 1.866625583e-03f, 1.864900844e-03f, 1.863172975e-03f, 1.861441979e-03f, 1.859707859e-03f, 1.857970618e-03f,
-1.856230259e-03f, 1.854486785e-03f, 1.852740200e-03f, 1.850990507e-03f, 1.849237709e-03f, 1.847481809e-03f, 1.845722810e-03f, 1.843960716e-03f, 1.842195529e-03f, 1.840427254e-03f,
-1.838655893e-03f, 1.836881449e-03f, 1.835103926e-03f, 1.833323326e-03f, 1.831539654e-03f, 1.829752913e-03f, 1.827963105e-03f, 1.826170233e-03f, 1.824374303e-03f, 1.822575315e-03f,
-1.820773274e-03f, 1.818968183e-03f, 1.817160046e-03f, 1.815348865e-03f, 1.813534644e-03f, 1.811717386e-03f, 1.809897094e-03f, 1.808073772e-03f, 1.806247424e-03f, 1.804418051e-03f,
-1.802585659e-03f, 1.800750249e-03f, 1.798911826e-03f, 1.797070393e-03f, 1.795225952e-03f, 1.793378508e-03f, 1.791528064e-03f, 1.789674623e-03f, 1.787818189e-03f, 1.785958764e-03f,
-1.784096353e-03f, 1.782230958e-03f, 1.780362583e-03f, 1.778491232e-03f, 1.776616907e-03f, 1.774739613e-03f, 1.772859352e-03f, 1.770976128e-03f, 1.769089945e-03f, 1.767200805e-03f,
-1.765308713e-03f, 1.763413671e-03f, 1.761515684e-03f, 1.759614754e-03f, 1.757710885e-03f, 1.755804081e-03f, 1.753894344e-03f, 1.751981679e-03f, 1.750066088e-03f, 1.748147576e-03f,
-1.746226146e-03f, 1.744301801e-03f, 1.742374545e-03f, 1.740444380e-03f, 1.738511312e-03f, 1.736575343e-03f, 1.734636476e-03f, 1.732694716e-03f, 1.730750065e-03f, 1.728802528e-03f,
-1.726852107e-03f, 1.724898807e-03f, 1.722942630e-03f, 1.720983581e-03f, 1.719021663e-03f, 1.717056879e-03f, 1.715089233e-03f, 1.713118729e-03f, 1.711145370e-03f, 1.709169159e-03f,
-1.707190101e-03f, 1.705208198e-03f, 1.703223455e-03f, 1.701235875e-03f, 1.699245461e-03f, 1.697252218e-03f, 1.695256148e-03f, 1.693257256e-03f, 1.691255545e-03f, 1.689251018e-03f,
-1.687243679e-03f, 1.685233532e-03f, 1.683220581e-03f, 1.681204828e-03f, 1.679186279e-03f, 1.677164935e-03f, 1.675140802e-03f, 1.673113882e-03f, 1.671084179e-03f, 1.669051698e-03f,
-1.667016441e-03f, 1.664978412e-03f, 1.662937615e-03f, 1.660894054e-03f, 1.658847732e-03f, 1.656798653e-03f, 1.654746821e-03f, 1.652692239e-03f, 1.650634911e-03f, 1.648574841e-03f,
-1.646512032e-03f, 1.644446489e-03f, 1.642378214e-03f, 1.640307212e-03f, 1.638233487e-03f, 1.636157041e-03f, 1.634077879e-03f, 1.631996005e-03f, 1.629911422e-03f, 1.627824134e-03f,
-1.625734145e-03f, 1.623641459e-03f, 1.621546079e-03f, 1.619448008e-03f, 1.617347252e-03f, 1.615243813e-03f, 1.613137696e-03f, 1.611028904e-03f, 1.608917441e-03f, 1.606803311e-03f,
-1.604686517e-03f, 1.602567063e-03f, 1.600444954e-03f, 1.598320193e-03f, 1.596192784e-03f, 1.594062730e-03f, 1.591930035e-03f, 1.589794704e-03f, 1.587656740e-03f, 1.585516147e-03f,
-1.583372929e-03f, 1.581227089e-03f, 1.579078632e-03f, 1.576927561e-03f, 1.574773880e-03f, 1.572617594e-03f, 1.570458705e-03f, 1.568297218e-03f, 1.566133136e-03f, 1.563966465e-03f,
-1.561797206e-03f, 1.559625365e-03f, 1.557450946e-03f, 1.555273951e-03f, 1.553094385e-03f, 1.550912252e-03f, 1.548727556e-03f, 1.546540301e-03f, 1.544350490e-03f, 1.542158128e-03f,
-1.539963219e-03f, 1.537765766e-03f, 1.535565773e-03f, 1.533363245e-03f, 1.531158184e-03f, 1.528950596e-03f, 1.526740485e-03f, 1.524527853e-03f, 1.522312705e-03f, 1.520095045e-03f,
-1.517874878e-03f, 1.515652206e-03f, 1.513427034e-03f, 1.511199366e-03f, 1.508969206e-03f, 1.506736558e-03f, 1.504501426e-03f, 1.502263814e-03f, 1.500023725e-03f, 1.497781165e-03f,
-1.495536136e-03f, 1.493288643e-03f, 1.491038691e-03f, 1.488786282e-03f, 1.486531421e-03f, 1.484274112e-03f, 1.482014359e-03f, 1.479752166e-03f, 1.477487537e-03f, 1.475220477e-03f,
-1.472950989e-03f, 1.470679077e-03f, 1.468404745e-03f, 1.466127997e-03f, 1.463848838e-03f, 1.461567272e-03f, 1.459283302e-03f, 1.456996933e-03f, 1.454708168e-03f, 1.452417013e-03f,
-1.450123470e-03f, 1.447827544e-03f, 1.445529240e-03f, 1.443228560e-03f, 1.440925510e-03f, 1.438620093e-03f, 1.436312314e-03f, 1.434002177e-03f, 1.431689685e-03f, 1.429374843e-03f,
-1.427057655e-03f, 1.424738125e-03f, 1.422416258e-03f, 1.420092057e-03f, 1.417765526e-03f, 1.415436670e-03f, 1.413105494e-03f, 1.410772000e-03f, 1.408436193e-03f, 1.406098077e-03f,
-1.403757657e-03f, 1.401414937e-03f, 1.399069921e-03f, 1.396722612e-03f, 1.394373016e-03f, 1.392021136e-03f, 1.389666977e-03f, 1.387310542e-03f, 1.384951836e-03f, 1.382590864e-03f,
-1.380227629e-03f, 1.377862135e-03f, 1.375494387e-03f, 1.373124389e-03f, 1.370752146e-03f, 1.368377661e-03f, 1.366000938e-03f, 1.363621982e-03f, 1.361240798e-03f, 1.358857388e-03f,
-1.356471759e-03f, 1.354083913e-03f, 1.351693855e-03f, 1.349301589e-03f, 1.346907120e-03f, 1.344510452e-03f, 1.342111589e-03f, 1.339710536e-03f, 1.337307296e-03f, 1.334901873e-03f,
-1.332494273e-03f, 1.330084500e-03f, 1.327672557e-03f, 1.325258449e-03f, 1.322842180e-03f, 1.320423755e-03f, 1.318003178e-03f, 1.315580453e-03f, 1.313155585e-03f, 1.310728577e-03f,
-1.308299435e-03f, 1.305868162e-03f, 1.303434762e-03f, 1.300999241e-03f, 1.298561602e-03f, 1.296121850e-03f, 1.293679989e-03f, 1.291236023e-03f, 1.288789957e-03f, 1.286341795e-03f,
-1.283891541e-03f, 1.281439200e-03f, 1.278984776e-03f, 1.276528274e-03f, 1.274069697e-03f, 1.271609051e-03f, 1.269146339e-03f, 1.266681566e-03f, 1.264214736e-03f, 1.261745854e-03f,
-1.259274924e-03f, 1.256801950e-03f, 1.254326937e-03f, 1.251849889e-03f, 1.249370811e-03f, 1.246889707e-03f, 1.244406581e-03f, 1.241921437e-03f, 1.239434281e-03f, 1.236945117e-03f,
-1.234453948e-03f, 1.231960780e-03f, 1.229465617e-03f, 1.226968463e-03f, 1.224469322e-03f, 1.221968200e-03f, 1.219465100e-03f, 1.216960027e-03f, 1.214452985e-03f, 1.211943980e-03f,
-1.209433014e-03f, 1.206920093e-03f, 1.204405222e-03f, 1.201888403e-03f, 1.199369643e-03f, 1.196848946e-03f, 1.194326315e-03f, 1.191801756e-03f, 1.189275273e-03f, 1.186746870e-03f,
-1.184216552e-03f, 1.181684323e-03f, 1.179150188e-03f, 1.176614151e-03f, 1.174076218e-03f, 1.171536391e-03f, 1.168994676e-03f, 1.166451077e-03f, 1.163905599e-03f, 1.161358247e-03f,
-1.158809024e-03f, 1.156257935e-03f, 1.153704985e-03f, 1.151150178e-03f, 1.148593520e-03f, 1.146035013e-03f, 1.143474663e-03f, 1.140912475e-03f, 1.138348452e-03f, 1.135782600e-03f,
-1.133214923e-03f, 1.130645425e-03f, 1.128074112e-03f, 1.125500986e-03f, 1.122926054e-03f, 1.120349320e-03f, 1.117770788e-03f, 1.115190462e-03f, 1.112608348e-03f, 1.110024450e-03f,
-1.107438772e-03f, 1.104851319e-03f, 1.102262096e-03f, 1.099671107e-03f, 1.097078357e-03f, 1.094483849e-03f, 1.091887590e-03f, 1.089289583e-03f, 1.086689833e-03f, 1.084088345e-03f,
-1.081485123e-03f, 1.078880172e-03f, 1.076273496e-03f, 1.073665100e-03f, 1.071054989e-03f, 1.068443167e-03f, 1.065829639e-03f, 1.063214409e-03f, 1.060597482e-03f, 1.057978863e-03f,
-1.055358556e-03f, 1.052736566e-03f, 1.050112898e-03f, 1.047487555e-03f, 1.044860544e-03f, 1.042231867e-03f, 1.039601531e-03f, 1.036969539e-03f, 1.034335897e-03f, 1.031700609e-03f,
-1.029063679e-03f, 1.026425112e-03f, 1.023784913e-03f, 1.021143087e-03f, 1.018499638e-03f, 1.015854571e-03f, 1.013207890e-03f, 1.010559600e-03f, 1.007909706e-03f, 1.005258213e-03f,
-1.002605125e-03f, 9.999504462e-04f, 9.972941822e-04f, 9.946363375e-04f, 9.919769165e-04f, 9.893159241e-04f, 9.866533649e-04f, 9.839892436e-04f, 9.813235649e-04f, 9.786563335e-04f,
-9.759875540e-04f, 9.733172312e-04f, 9.706453697e-04f, 9.679719743e-04f, 9.652970497e-04f, 9.626206005e-04f, 9.599426315e-04f, 9.572631474e-04f, 9.545821529e-04f, 9.518996528e-04f,
-9.492156516e-04f, 9.465301543e-04f, 9.438431653e-04f, 9.411546896e-04f, 9.384647319e-04f, 9.357732967e-04f, 9.330803890e-04f, 9.303860134e-04f, 9.276901746e-04f, 9.249928775e-04f,
-9.222941266e-04f, 9.195939269e-04f, 9.168922830e-04f, 9.141891996e-04f, 9.114846816e-04f, 9.087787336e-04f, 9.060713605e-04f, 9.033625669e-04f, 9.006523577e-04f, 8.979407376e-04f,
-8.952277113e-04f, 8.925132837e-04f, 8.897974595e-04f, 8.870802434e-04f, 8.843616403e-04f, 8.816416549e-04f, 8.789202919e-04f, 8.761975563e-04f, 8.734734526e-04f, 8.707479858e-04f,
-8.680211606e-04f, 8.652929818e-04f, 8.625634542e-04f, 8.598325825e-04f, 8.571003716e-04f, 8.543668263e-04f, 8.516319513e-04f, 8.488957515e-04f, 8.461582316e-04f, 8.434193965e-04f,
-8.406792510e-04f, 8.379377998e-04f, 8.351950478e-04f, 8.324509998e-04f, 8.297056606e-04f, 8.269590350e-04f, 8.242111278e-04f, 8.214619439e-04f, 8.187114880e-04f, 8.159597651e-04f,
-8.132067798e-04f, 8.104525371e-04f, 8.076970418e-04f, 8.049402986e-04f, 8.021823125e-04f, 7.994230883e-04f, 7.966626308e-04f, 7.939009448e-04f, 7.911380351e-04f, 7.883739067e-04f,
-7.856085644e-04f, 7.828420130e-04f, 7.800742573e-04f, 7.773053022e-04f, 7.745351526e-04f, 7.717638133e-04f, 7.689912892e-04f, 7.662175850e-04f, 7.634427058e-04f, 7.606666562e-04f,
-7.578894413e-04f, 7.551110658e-04f, 7.523315347e-04f, 7.495508527e-04f, 7.467690248e-04f, 7.439860558e-04f, 7.412019506e-04f, 7.384167140e-04f, 7.356303511e-04f, 7.328428665e-04f,
-7.300542652e-04f, 7.272645522e-04f, 7.244737321e-04f, 7.216818100e-04f, 7.188887908e-04f, 7.160946793e-04f, 7.132994803e-04f, 7.105031989e-04f, 7.077058398e-04f, 7.049074081e-04f,
-7.021079085e-04f, 6.993073459e-04f, 6.965057254e-04f, 6.937030517e-04f, 6.908993297e-04f, 6.880945644e-04f, 6.852887607e-04f, 6.824819235e-04f, 6.796740577e-04f, 6.768651681e-04f,
-6.740552598e-04f, 6.712443376e-04f, 6.684324064e-04f, 6.656194711e-04f, 6.628055367e-04f, 6.599906081e-04f, 6.571746902e-04f, 6.543577879e-04f, 6.515399061e-04f, 6.487210498e-04f,
-6.459012238e-04f, 6.430804332e-04f, 6.402586828e-04f, 6.374359776e-04f, 6.346123225e-04f, 6.317877224e-04f, 6.289621823e-04f, 6.261357070e-04f, 6.233083016e-04f, 6.204799710e-04f,
-6.176507200e-04f, 6.148205537e-04f, 6.119894770e-04f, 6.091574948e-04f, 6.063246121e-04f, 6.034908338e-04f, 6.006561649e-04f, 5.978206103e-04f, 5.949841750e-04f, 5.921468638e-04f,
-5.893086818e-04f, 5.864696340e-04f, 5.836297251e-04f, 5.807889604e-04f, 5.779473446e-04f, 5.751048827e-04f, 5.722615797e-04f, 5.694174406e-04f, 5.665724703e-04f, 5.637266737e-04f,
-5.608800559e-04f, 5.580326218e-04f, 5.551843764e-04f, 5.523353246e-04f, 5.494854714e-04f, 5.466348218e-04f, 5.437833807e-04f, 5.409311531e-04f, 5.380781441e-04f, 5.352243584e-04f,
-5.323698012e-04f, 5.295144775e-04f, 5.266583921e-04f, 5.238015500e-04f, 5.209439563e-04f, 5.180856160e-04f, 5.152265339e-04f, 5.123667151e-04f, 5.095061646e-04f, 5.066448873e-04f,
-5.037828882e-04f, 5.009201724e-04f, 4.980567448e-04f, 4.951926103e-04f, 4.923277741e-04f, 4.894622410e-04f, 4.865960161e-04f, 4.837291043e-04f, 4.808615107e-04f, 4.779932402e-04f,
-4.751242978e-04f, 4.722546886e-04f, 4.693844175e-04f, 4.665134895e-04f, 4.636419096e-04f, 4.607696829e-04f, 4.578968142e-04f, 4.550233087e-04f, 4.521491713e-04f, 4.492744070e-04f,
-4.463990208e-04f, 4.435230177e-04f, 4.406464028e-04f, 4.377691810e-04f, 4.348913573e-04f, 4.320129368e-04f, 4.291339244e-04f, 4.262543252e-04f, 4.233741441e-04f, 4.204933862e-04f,
-4.176120565e-04f, 4.147301601e-04f, 4.118477018e-04f, 4.089646867e-04f, 4.060811199e-04f, 4.031970063e-04f, 4.003123510e-04f, 3.974271590e-04f, 3.945414352e-04f, 3.916551848e-04f,
-3.887684127e-04f, 3.858811239e-04f, 3.829933235e-04f, 3.801050165e-04f, 3.772162079e-04f, 3.743269027e-04f, 3.714371059e-04f, 3.685468227e-04f, 3.656560578e-04f, 3.627648166e-04f,
-3.598731038e-04f, 3.569809246e-04f, 3.540882839e-04f, 3.511951869e-04f, 3.483016385e-04f, 3.454076437e-04f, 3.425132077e-04f, 3.396183353e-04f, 3.367230317e-04f, 3.338273018e-04f,
-3.309311507e-04f, 3.280345834e-04f, 3.251376050e-04f, 3.222402205e-04f, 3.193424348e-04f, 3.164442531e-04f, 3.135456804e-04f, 3.106467216e-04f, 3.077473819e-04f, 3.048476662e-04f,
-3.019475796e-04f, 2.990471272e-04f, 2.961463139e-04f, 2.932451448e-04f, 2.903436249e-04f, 2.874417593e-04f, 2.845395530e-04f, 2.816370110e-04f, 2.787341384e-04f, 2.758309401e-04f,
-2.729274213e-04f, 2.700235870e-04f, 2.671194421e-04f, 2.642149918e-04f, 2.613102411e-04f, 2.584051950e-04f, 2.554998586e-04f, 2.525942368e-04f, 2.496883348e-04f, 2.467821575e-04f,
-2.438757100e-04f, 2.409689974e-04f, 2.380620246e-04f, 2.351547968e-04f, 2.322473189e-04f, 2.293395960e-04f, 2.264316331e-04f, 2.235234354e-04f, 2.206150077e-04f, 2.177063551e-04f,
-2.147974828e-04f, 2.118883957e-04f, 2.089790989e-04f, 2.060695973e-04f, 2.031598962e-04f, 2.002500004e-04f, 1.973399150e-04f, 1.944296451e-04f, 1.915191957e-04f, 1.886085719e-04f,
-1.856977787e-04f, 1.827868210e-04f, 1.798757041e-04f, 1.769644329e-04f, 1.740530124e-04f, 1.711414477e-04f, 1.682297438e-04f, 1.653179058e-04f, 1.624059388e-04f, 1.594938476e-04f,
-1.565816375e-04f, 1.536693134e-04f, 1.507568803e-04f, 1.478443434e-04f, 1.449317076e-04f, 1.420189781e-04f, 1.391061597e-04f, 1.361932576e-04f, 1.332802768e-04f, 1.303672224e-04f,
-1.274540994e-04f, 1.245409127e-04f, 1.216276676e-04f, 1.187143689e-04f, 1.158010218e-04f, 1.128876313e-04f, 1.099742024e-04f, 1.070607401e-04f, 1.041472495e-04f, 1.012337357e-04f,
-9.832020363e-05f, 9.540665836e-05f, 9.249310493e-05f, 8.957954838e-05f, 8.666599373e-05f, 8.375244604e-05f, 8.083891033e-05f, 7.792539164e-05f, 7.501189500e-05f, 7.209842544e-05f,
-6.918498801e-05f, 6.627158774e-05f, 6.335822966e-05f, 6.044491880e-05f, 5.753166019e-05f, 5.461845888e-05f, 5.170531988e-05f, 4.879224824e-05f, 4.587924899e-05f, 4.296632714e-05f,
-4.005348775e-05f, 3.714073582e-05f, 3.422807641e-05f, 3.131551453e-05f, 2.840305521e-05f, 2.549070349e-05f, 2.257846439e-05f, 1.966634293e-05f, 1.675434415e-05f, 1.384247307e-05f,
-1.093073472e-05f, 8.019134123e-06f, 5.107676304e-06f, 2.196366288e-06f, -7.147909011e-07f, -3.625790239e-06f, -6.536626704e-06f, -9.447295273e-06f, -1.235779092e-05f, -1.526810864e-05f,
--1.817824339e-05f, -2.108819016e-05f, -2.399794393e-05f, -2.690749968e-05f, -2.981685240e-05f, -3.272599706e-05f, -3.563492866e-05f, -3.854364216e-05f, -4.145213256e-05f, -4.436039484e-05f,
--4.726842399e-05f, -5.017621499e-05f, -5.308376283e-05f, -5.599106249e-05f, -5.889810898e-05f, -6.180489726e-05f, -6.471142234e-05f, -6.761767921e-05f, -7.052366285e-05f, -7.342936826e-05f,
--7.633479043e-05f, -7.923992436e-05f, -8.214476503e-05f, -8.504930745e-05f, -8.795354660e-05f, -9.085747749e-05f, -9.376109512e-05f, -9.666439447e-05f, -9.956737055e-05f, -1.024700184e-04f,
--1.053723329e-04f, -1.082743092e-04f, -1.111759422e-04f, -1.140772269e-04f, -1.169781584e-04f, -1.198787317e-04f, -1.227789416e-04f, -1.256787834e-04f, -1.285782519e-04f, -1.314773422e-04f,
--1.343760493e-04f, -1.372743681e-04f, -1.401722938e-04f, -1.430698213e-04f, -1.459669456e-04f, -1.488636618e-04f, -1.517599648e-04f, -1.546558497e-04f, -1.575513115e-04f, -1.604463452e-04f,
--1.633409458e-04f, -1.662351084e-04f, -1.691288280e-04f, -1.720220996e-04f, -1.749149182e-04f, -1.778072788e-04f, -1.806991765e-04f, -1.835906063e-04f, -1.864815632e-04f, -1.893720422e-04f,
--1.922620385e-04f, -1.951515469e-04f, -1.980405626e-04f, -2.009290806e-04f, -2.038170959e-04f, -2.067046035e-04f, -2.095915985e-04f, -2.124780760e-04f, -2.153640309e-04f, -2.182494582e-04f,
--2.211343532e-04f, -2.240187107e-04f, -2.269025258e-04f, -2.297857936e-04f, -2.326685092e-04f, -2.355506674e-04f, -2.384322635e-04f, -2.413132925e-04f, -2.441937494e-04f, -2.470736292e-04f,
--2.499529271e-04f, -2.528316380e-04f, -2.557097571e-04f, -2.585872793e-04f, -2.614641998e-04f, -2.643405136e-04f, -2.672162157e-04f, -2.700913013e-04f, -2.729657654e-04f, -2.758396030e-04f,
--2.787128093e-04f, -2.815853792e-04f, -2.844573079e-04f, -2.873285904e-04f, -2.901992219e-04f, -2.930691973e-04f, -2.959385117e-04f, -2.988071603e-04f, -3.016751381e-04f, -3.045424402e-04f,
--3.074090616e-04f, -3.102749975e-04f, -3.131402429e-04f, -3.160047930e-04f, -3.188686427e-04f, -3.217317872e-04f, -3.245942216e-04f, -3.274559409e-04f, -3.303169404e-04f, -3.331772149e-04f,
--3.360367598e-04f, -3.388955699e-04f, -3.417536405e-04f, -3.446109667e-04f, -3.474675435e-04f, -3.503233660e-04f, -3.531784294e-04f, -3.560327288e-04f, -3.588862592e-04f, -3.617390158e-04f,
--3.645909937e-04f, -3.674421879e-04f, -3.702925937e-04f, -3.731422061e-04f, -3.759910203e-04f, -3.788390313e-04f, -3.816862344e-04f, -3.845326245e-04f, -3.873781968e-04f, -3.902229465e-04f,
--3.930668687e-04f, -3.959099585e-04f, -3.987522111e-04f, -4.015936215e-04f, -4.044341850e-04f, -4.072738965e-04f, -4.101127514e-04f, -4.129507447e-04f, -4.157878716e-04f, -4.186241271e-04f,
--4.214595065e-04f, -4.242940050e-04f, -4.271276175e-04f, -4.299603394e-04f, -4.327921657e-04f, -4.356230916e-04f, -4.384531123e-04f, -4.412822228e-04f, -4.441104185e-04f, -4.469376944e-04f,
--4.497640457e-04f, -4.525894675e-04f, -4.554139551e-04f, -4.582375036e-04f, -4.610601081e-04f, -4.638817639e-04f, -4.667024661e-04f, -4.695222099e-04f, -4.723409904e-04f, -4.751588029e-04f,
--4.779756425e-04f, -4.807915044e-04f, -4.836063839e-04f, -4.864202760e-04f, -4.892331760e-04f, -4.920450790e-04f, -4.948559804e-04f, -4.976658751e-04f, -5.004747585e-04f, -5.032826258e-04f,
--5.060894722e-04f, -5.088952927e-04f, -5.117000828e-04f, -5.145038375e-04f, -5.173065521e-04f, -5.201082218e-04f, -5.229088418e-04f, -5.257084073e-04f, -5.285069136e-04f, -5.313043558e-04f,
--5.341007292e-04f, -5.368960290e-04f, -5.396902504e-04f, -5.424833887e-04f, -5.452754391e-04f, -5.480663968e-04f, -5.508562570e-04f, -5.536450151e-04f, -5.564326662e-04f, -5.592192055e-04f,
--5.620046284e-04f, -5.647889301e-04f, -5.675721057e-04f, -5.703541507e-04f, -5.731350601e-04f, -5.759148293e-04f, -5.786934536e-04f, -5.814709281e-04f, -5.842472481e-04f, -5.870224090e-04f,
--5.897964060e-04f, -5.925692343e-04f, -5.953408892e-04f, -5.981113660e-04f, -6.008806599e-04f, -6.036487663e-04f, -6.064156804e-04f, -6.091813975e-04f, -6.119459129e-04f, -6.147092219e-04f,
--6.174713197e-04f, -6.202322017e-04f, -6.229918631e-04f, -6.257502993e-04f, -6.285075055e-04f, -6.312634770e-04f, -6.340182092e-04f, -6.367716973e-04f, -6.395239367e-04f, -6.422749226e-04f,
--6.450246504e-04f, -6.477731154e-04f, -6.505203130e-04f, -6.532662383e-04f, -6.560108868e-04f, -6.587542538e-04f, -6.614963345e-04f, -6.642371244e-04f, -6.669766188e-04f, -6.697148130e-04f,
--6.724517023e-04f, -6.751872821e-04f, -6.779215477e-04f, -6.806544945e-04f, -6.833861178e-04f, -6.861164129e-04f, -6.888453753e-04f, -6.915730002e-04f, -6.942992830e-04f, -6.970242192e-04f,
--6.997478040e-04f, -7.024700328e-04f, -7.051909010e-04f, -7.079104039e-04f, -7.106285370e-04f, -7.133452955e-04f, -7.160606750e-04f, -7.187746707e-04f, -7.214872780e-04f, -7.241984924e-04f,
--7.269083092e-04f, -7.296167238e-04f, -7.323237316e-04f, -7.350293280e-04f, -7.377335084e-04f, -7.404362682e-04f, -7.431376029e-04f, -7.458375077e-04f, -7.485359782e-04f, -7.512330097e-04f,
--7.539285976e-04f, -7.566227375e-04f, -7.593154246e-04f, -7.620066544e-04f, -7.646964224e-04f, -7.673847240e-04f, -7.700715546e-04f, -7.727569096e-04f, -7.754407845e-04f, -7.781231747e-04f,
--7.808040757e-04f, -7.834834829e-04f, -7.861613918e-04f, -7.888377977e-04f, -7.915126963e-04f, -7.941860828e-04f, -7.968579529e-04f, -7.995283019e-04f, -8.021971253e-04f, -8.048644186e-04f,
--8.075301773e-04f, -8.101943968e-04f, -8.128570726e-04f, -8.155182002e-04f, -8.181777751e-04f, -8.208357927e-04f, -8.234922486e-04f, -8.261471383e-04f, -8.288004572e-04f, -8.314522008e-04f,
--8.341023646e-04f, -8.367509442e-04f, -8.393979351e-04f, -8.420433327e-04f, -8.446871326e-04f, -8.473293303e-04f, -8.499699213e-04f, -8.526089011e-04f, -8.552462653e-04f, -8.578820094e-04f,
--8.605161289e-04f, -8.631486194e-04f, -8.657794763e-04f, -8.684086953e-04f, -8.710362718e-04f, -8.736622015e-04f, -8.762864799e-04f, -8.789091025e-04f, -8.815300648e-04f, -8.841493625e-04f,
--8.867669911e-04f, -8.893829462e-04f, -8.919972233e-04f, -8.946098180e-04f, -8.972207260e-04f, -8.998299426e-04f, -9.024374637e-04f, -9.050432846e-04f, -9.076474011e-04f, -9.102498086e-04f,
--9.128505029e-04f, -9.154494795e-04f, -9.180467339e-04f, -9.206422619e-04f, -9.232360590e-04f, -9.258281208e-04f, -9.284184429e-04f, -9.310070210e-04f, -9.335938507e-04f, -9.361789275e-04f,
--9.387622471e-04f, -9.413438053e-04f, -9.439235974e-04f, -9.465016193e-04f, -9.490778666e-04f, -9.516523348e-04f, -9.542250197e-04f, -9.567959169e-04f, -9.593650221e-04f, -9.619323308e-04f,
--9.644978388e-04f, -9.670615417e-04f, -9.696234353e-04f, -9.721835150e-04f, -9.747417768e-04f, -9.772982161e-04f, -9.798528287e-04f, -9.824056103e-04f, -9.849565565e-04f, -9.875056631e-04f,
--9.900529257e-04f, -9.925983401e-04f, -9.951419019e-04f, -9.976836068e-04f, -1.000223451e-03f, -1.002761429e-03f, -1.005297538e-03f, -1.007831772e-03f, -1.010364128e-03f, -1.012894602e-03f,
--1.015423189e-03f, -1.017949885e-03f, -1.020474685e-03f, -1.022997586e-03f, -1.025518583e-03f, -1.028037672e-03f, -1.030554848e-03f, -1.033070108e-03f, -1.035583447e-03f, -1.038094860e-03f,
--1.040604345e-03f, -1.043111895e-03f, -1.045617508e-03f, -1.048121179e-03f, -1.050622904e-03f, -1.053122678e-03f, -1.055620497e-03f, -1.058116357e-03f, -1.060610254e-03f, -1.063102184e-03f,
--1.065592143e-03f, -1.068080125e-03f, -1.070566128e-03f, -1.073050147e-03f, -1.075532177e-03f, -1.078012215e-03f, -1.080490256e-03f, -1.082966296e-03f, -1.085440331e-03f, -1.087912357e-03f,
--1.090382370e-03f, -1.092850365e-03f, -1.095316339e-03f, -1.097780286e-03f, -1.100242204e-03f, -1.102702087e-03f, -1.105159933e-03f, -1.107615736e-03f, -1.110069492e-03f, -1.112521198e-03f,
--1.114970849e-03f, -1.117418441e-03f, -1.119863970e-03f, -1.122307431e-03f, -1.124748822e-03f, -1.127188137e-03f, -1.129625373e-03f, -1.132060525e-03f, -1.134493589e-03f, -1.136924562e-03f,
--1.139353439e-03f, -1.141780216e-03f, -1.144204889e-03f, -1.146627453e-03f, -1.149047906e-03f, -1.151466242e-03f, -1.153882458e-03f, -1.156296550e-03f, -1.158708513e-03f, -1.161118344e-03f,
--1.163526038e-03f, -1.165931592e-03f, -1.168335001e-03f, -1.170736261e-03f, -1.173135369e-03f, -1.175532320e-03f, -1.177927110e-03f, -1.180319735e-03f, -1.182710192e-03f, -1.185098475e-03f,
--1.187484582e-03f, -1.189868509e-03f, -1.192250250e-03f, -1.194629802e-03f, -1.197007162e-03f, -1.199382325e-03f, -1.201755287e-03f, -1.204126044e-03f, -1.206494593e-03f, -1.208860928e-03f,
--1.211225047e-03f, -1.213586946e-03f, -1.215946619e-03f, -1.218304064e-03f, -1.220659277e-03f, -1.223012253e-03f, -1.225362989e-03f, -1.227711480e-03f, -1.230057723e-03f, -1.232401713e-03f,
--1.234743448e-03f, -1.237082922e-03f, -1.239420132e-03f, -1.241755075e-03f, -1.244087745e-03f, -1.246418140e-03f, -1.248746255e-03f, -1.251072086e-03f, -1.253395630e-03f, -1.255716882e-03f,
--1.258035840e-03f, -1.260352498e-03f, -1.262666853e-03f, -1.264978901e-03f, -1.267288638e-03f, -1.269596061e-03f, -1.271901165e-03f, -1.274203947e-03f, -1.276504402e-03f, -1.278802528e-03f,
--1.281098319e-03f, -1.283391773e-03f, -1.285682885e-03f, -1.287971652e-03f, -1.290258070e-03f, -1.292542134e-03f, -1.294823842e-03f, -1.297103188e-03f, -1.299380171e-03f, -1.301654785e-03f,
--1.303927026e-03f, -1.306196892e-03f, -1.308464378e-03f, -1.310729480e-03f, -1.312992196e-03f, -1.315252520e-03f, -1.317510449e-03f, -1.319765979e-03f, -1.322019107e-03f, -1.324269829e-03f,
--1.326518141e-03f, -1.328764039e-03f, -1.331007520e-03f, -1.333248579e-03f, -1.335487214e-03f, -1.337723420e-03f, -1.339957193e-03f, -1.342188531e-03f, -1.344417428e-03f, -1.346643882e-03f,
--1.348867888e-03f, -1.351089444e-03f, -1.353308544e-03f, -1.355525187e-03f, -1.357739367e-03f, -1.359951081e-03f, -1.362160326e-03f, -1.364367097e-03f, -1.366571392e-03f, -1.368773206e-03f,
--1.370972536e-03f, -1.373169378e-03f, -1.375363728e-03f, -1.377555583e-03f, -1.379744939e-03f, -1.381931793e-03f, -1.384116141e-03f, -1.386297978e-03f, -1.388477303e-03f, -1.390654110e-03f,
--1.392828396e-03f, -1.395000158e-03f, -1.397169392e-03f, -1.399336095e-03f, -1.401500262e-03f, -1.403661891e-03f, -1.405820977e-03f, -1.407977518e-03f, -1.410131508e-03f, -1.412282946e-03f,
--1.414431827e-03f, -1.416578147e-03f, -1.418721904e-03f, -1.420863093e-03f, -1.423001711e-03f, -1.425137755e-03f, -1.427271220e-03f, -1.429402104e-03f, -1.431530403e-03f, -1.433656113e-03f,
--1.435779230e-03f, -1.437899752e-03f, -1.440017675e-03f, -1.442132994e-03f, -1.444245707e-03f, -1.446355811e-03f, -1.448463301e-03f, -1.450568174e-03f, -1.452670426e-03f, -1.454770055e-03f,
--1.456867056e-03f, -1.458961427e-03f, -1.461053163e-03f, -1.463142262e-03f, -1.465228719e-03f, -1.467312531e-03f, -1.469393695e-03f, -1.471472208e-03f, -1.473548065e-03f, -1.475621264e-03f,
--1.477691801e-03f, -1.479759672e-03f, -1.481824875e-03f, -1.483887405e-03f, -1.485947260e-03f, -1.488004435e-03f, -1.490058928e-03f, -1.492110735e-03f, -1.494159853e-03f, -1.496206278e-03f,
--1.498250007e-03f, -1.500291036e-03f, -1.502329363e-03f, -1.504364983e-03f, -1.506397893e-03f, -1.508428091e-03f, -1.510455572e-03f, -1.512480333e-03f, -1.514502372e-03f, -1.516521683e-03f,
--1.518538266e-03f, -1.520552115e-03f, -1.522563227e-03f, -1.524571600e-03f, -1.526577230e-03f, -1.528580113e-03f, -1.530580246e-03f, -1.532577627e-03f, -1.534572251e-03f, -1.536564115e-03f,
--1.538553217e-03f, -1.540539552e-03f, -1.542523118e-03f, -1.544503911e-03f, -1.546481928e-03f, -1.548457166e-03f, -1.550429621e-03f, -1.552399290e-03f, -1.554366170e-03f, -1.556330257e-03f,
--1.558291550e-03f, -1.560250043e-03f, -1.562205734e-03f, -1.564158620e-03f, -1.566108697e-03f, -1.568055963e-03f, -1.570000413e-03f, -1.571942046e-03f, -1.573880857e-03f, -1.575816843e-03f,
--1.577750002e-03f, -1.579680330e-03f, -1.581607823e-03f, -1.583532479e-03f, -1.585454295e-03f, -1.587373267e-03f, -1.589289393e-03f, -1.591202668e-03f, -1.593113090e-03f, -1.595020656e-03f,
--1.596925362e-03f, -1.598827206e-03f, -1.600726184e-03f, -1.602622294e-03f, -1.604515531e-03f, -1.606405893e-03f, -1.608293377e-03f, -1.610177980e-03f, -1.612059699e-03f, -1.613938529e-03f,
--1.615814470e-03f, -1.617687517e-03f, -1.619557666e-03f, -1.621424917e-03f, -1.623289264e-03f, -1.625150705e-03f, -1.627009237e-03f, -1.628864858e-03f, -1.630717563e-03f, -1.632567349e-03f,
--1.634414215e-03f, -1.636258156e-03f, -1.638099171e-03f, -1.639937254e-03f, -1.641772405e-03f, -1.643604619e-03f, -1.645433894e-03f, -1.647260226e-03f, -1.649083614e-03f, -1.650904052e-03f,
--1.652721540e-03f, -1.654536073e-03f, -1.656347649e-03f, -1.658156265e-03f, -1.659961917e-03f, -1.661764603e-03f, -1.663564320e-03f, -1.665361065e-03f, -1.667154835e-03f, -1.668945627e-03f,
--1.670733438e-03f, -1.672518266e-03f, -1.674300106e-03f, -1.676078957e-03f, -1.677854815e-03f, -1.679627678e-03f, -1.681397542e-03f, -1.683164405e-03f, -1.684928264e-03f, -1.686689116e-03f,
--1.688446957e-03f, -1.690201786e-03f, -1.691953600e-03f, -1.693702394e-03f, -1.695448167e-03f, -1.697190916e-03f, -1.698930638e-03f, -1.700667330e-03f, -1.702400989e-03f, -1.704131612e-03f,
--1.705859197e-03f, -1.707583741e-03f, -1.709305240e-03f, -1.711023693e-03f, -1.712739095e-03f, -1.714451446e-03f, -1.716160741e-03f, -1.717866977e-03f, -1.719570153e-03f, -1.721270265e-03f,
--1.722967311e-03f, -1.724661288e-03f, -1.726352192e-03f, -1.728040022e-03f, -1.729724774e-03f, -1.731406446e-03f, -1.733085035e-03f, -1.734760539e-03f, -1.736432953e-03f, -1.738102277e-03f,
--1.739768507e-03f, -1.741431640e-03f, -1.743091674e-03f, -1.744748606e-03f, -1.746402433e-03f, -1.748053153e-03f, -1.749700763e-03f, -1.751345260e-03f, -1.752986641e-03f, -1.754624905e-03f,
--1.756260047e-03f, -1.757892066e-03f, -1.759520960e-03f, -1.761146724e-03f, -1.762769357e-03f, -1.764388856e-03f, -1.766005218e-03f, -1.767618441e-03f, -1.769228523e-03f, -1.770835459e-03f,
--1.772439249e-03f, -1.774039889e-03f, -1.775637376e-03f, -1.777231709e-03f, -1.778822884e-03f, -1.780410900e-03f, -1.781995752e-03f, -1.783577440e-03f, -1.785155959e-03f, -1.786731309e-03f,
--1.788303485e-03f, -1.789872486e-03f, -1.791438309e-03f, -1.793000951e-03f, -1.794560411e-03f, -1.796116685e-03f, -1.797669771e-03f, -1.799219666e-03f, -1.800766368e-03f, -1.802309875e-03f,
--1.803850184e-03f, -1.805387292e-03f, -1.806921197e-03f, -1.808451896e-03f, -1.809979387e-03f, -1.811503668e-03f, -1.813024736e-03f, -1.814542589e-03f, -1.816057224e-03f, -1.817568638e-03f,
--1.819076830e-03f, -1.820581797e-03f, -1.822083536e-03f, -1.823582045e-03f, -1.825077321e-03f, -1.826569363e-03f, -1.828058168e-03f, -1.829543732e-03f, -1.831026055e-03f, -1.832505134e-03f,
--1.833980965e-03f, -1.835453548e-03f, -1.836922879e-03f, -1.838388956e-03f, -1.839851777e-03f, -1.841311339e-03f, -1.842767640e-03f, -1.844220678e-03f, -1.845670450e-03f, -1.847116955e-03f,
--1.848560189e-03f, -1.850000150e-03f, -1.851436836e-03f, -1.852870246e-03f, -1.854300375e-03f, -1.855727223e-03f, -1.857150787e-03f, -1.858571064e-03f, -1.859988053e-03f, -1.861401751e-03f,
--1.862812155e-03f, -1.864219264e-03f, -1.865623076e-03f, -1.867023587e-03f, -1.868420796e-03f, -1.869814701e-03f, -1.871205299e-03f, -1.872592588e-03f, -1.873976566e-03f, -1.875357230e-03f,
--1.876734579e-03f, -1.878108611e-03f, -1.879479322e-03f, -1.880846711e-03f, -1.882210776e-03f, -1.883571515e-03f, -1.884928924e-03f, -1.886283003e-03f, -1.887633749e-03f, -1.888981160e-03f,
--1.890325233e-03f, -1.891665967e-03f, -1.893003359e-03f, -1.894337408e-03f, -1.895668111e-03f, -1.896995466e-03f, -1.898319470e-03f, -1.899640123e-03f, -1.900957421e-03f, -1.902271363e-03f,
--1.903581947e-03f, -1.904889170e-03f, -1.906193030e-03f, -1.907493525e-03f, -1.908790654e-03f, -1.910084414e-03f, -1.911374803e-03f, -1.912661819e-03f, -1.913945460e-03f, -1.915225725e-03f,
--1.916502610e-03f, -1.917776114e-03f, -1.919046235e-03f, -1.920312970e-03f, -1.921576319e-03f, -1.922836279e-03f, -1.924092847e-03f, -1.925346023e-03f, -1.926595803e-03f, -1.927842186e-03f,
--1.929085171e-03f, -1.930324754e-03f, -1.931560934e-03f, -1.932793710e-03f, -1.934023078e-03f, -1.935249038e-03f, -1.936471587e-03f, -1.937690724e-03f, -1.938906446e-03f, -1.940118751e-03f,
--1.941327638e-03f, -1.942533105e-03f, -1.943735149e-03f, -1.944933769e-03f, -1.946128964e-03f, -1.947320730e-03f, -1.948509067e-03f, -1.949693972e-03f, -1.950875444e-03f, -1.952053480e-03f,
--1.953228079e-03f, -1.954399239e-03f, -1.955566959e-03f, -1.956731235e-03f, -1.957892067e-03f, -1.959049453e-03f, -1.960203391e-03f, -1.961353878e-03f, -1.962500914e-03f, -1.963644496e-03f,
--1.964784623e-03f, -1.965921293e-03f, -1.967054504e-03f, -1.968184254e-03f, -1.969310542e-03f, -1.970433365e-03f, -1.971552723e-03f, -1.972668612e-03f, -1.973781033e-03f, -1.974889982e-03f,
--1.975995458e-03f, -1.977097460e-03f, -1.978195985e-03f, -1.979291032e-03f, -1.980382599e-03f, -1.981470685e-03f, -1.982555288e-03f, -1.983636406e-03f, -1.984714037e-03f, -1.985788180e-03f,
--1.986858833e-03f, -1.987925995e-03f, -1.988989663e-03f, -1.990049837e-03f, -1.991106514e-03f, -1.992159693e-03f, -1.993209372e-03f, -1.994255550e-03f, -1.995298225e-03f, -1.996337395e-03f,
--1.997373059e-03f, -1.998405215e-03f, -1.999433862e-03f, -2.000458998e-03f, -2.001480621e-03f, -2.002498730e-03f, -2.003513323e-03f, -2.004524399e-03f, -2.005531956e-03f, -2.006535993e-03f,
--2.007536508e-03f, -2.008533499e-03f, -2.009526965e-03f, -2.010516905e-03f, -2.011503316e-03f, -2.012486198e-03f, -2.013465549e-03f, -2.014441367e-03f, -2.015413651e-03f, -2.016382400e-03f,
--2.017347611e-03f, -2.018309284e-03f, -2.019267417e-03f, -2.020222008e-03f, -2.021173057e-03f, -2.022120561e-03f, -2.023064519e-03f, -2.024004930e-03f, -2.024941792e-03f, -2.025875105e-03f,
--2.026804865e-03f, -2.027731073e-03f, -2.028653726e-03f, -2.029572823e-03f, -2.030488363e-03f, -2.031400345e-03f, -2.032308766e-03f, -2.033213627e-03f, -2.034114924e-03f, -2.035012658e-03f,
--2.035906826e-03f, -2.036797427e-03f, -2.037684460e-03f, -2.038567924e-03f, -2.039447817e-03f, -2.040324137e-03f, -2.041196885e-03f, -2.042066057e-03f, -2.042931653e-03f, -2.043793672e-03f,
--2.044652113e-03f, -2.045506973e-03f, -2.046358252e-03f, -2.047205949e-03f, -2.048050061e-03f, -2.048890589e-03f, -2.049727530e-03f, -2.050560884e-03f, -2.051390649e-03f, -2.052216823e-03f,
--2.053039407e-03f, -2.053858398e-03f, -2.054673795e-03f, -2.055485597e-03f, -2.056293803e-03f, -2.057098412e-03f, -2.057899422e-03f, -2.058696832e-03f, -2.059490641e-03f, -2.060280848e-03f,
--2.061067452e-03f, -2.061850452e-03f, -2.062629845e-03f, -2.063405632e-03f, -2.064177811e-03f, -2.064946381e-03f, -2.065711341e-03f, -2.066472689e-03f, -2.067230425e-03f, -2.067984548e-03f,
--2.068735056e-03f, -2.069481948e-03f, -2.070225223e-03f, -2.070964880e-03f, -2.071700918e-03f, -2.072433336e-03f, -2.073162133e-03f, -2.073887307e-03f, -2.074608858e-03f, -2.075326785e-03f,
--2.076041087e-03f, -2.076751762e-03f, -2.077458809e-03f, -2.078162228e-03f, -2.078862017e-03f, -2.079558176e-03f, -2.080250704e-03f, -2.080939599e-03f, -2.081624860e-03f, -2.082306487e-03f,
--2.082984478e-03f, -2.083658833e-03f, -2.084329550e-03f, -2.084996629e-03f, -2.085660068e-03f, -2.086319867e-03f, -2.086976025e-03f, -2.087628541e-03f, -2.088277414e-03f, -2.088922642e-03f,
--2.089564225e-03f, -2.090202163e-03f, -2.090836454e-03f, -2.091467097e-03f, -2.092094091e-03f, -2.092717436e-03f, -2.093337131e-03f, -2.093953175e-03f, -2.094565566e-03f, -2.095174304e-03f,
--2.095779389e-03f, -2.096380819e-03f, -2.096978593e-03f, -2.097572711e-03f, -2.098163172e-03f, -2.098749975e-03f, -2.099333119e-03f, -2.099912603e-03f, -2.100488427e-03f, -2.101060590e-03f,
--2.101629091e-03f, -2.102193929e-03f, -2.102755103e-03f, -2.103312613e-03f, -2.103866458e-03f, -2.104416637e-03f, -2.104963149e-03f, -2.105505994e-03f, -2.106045171e-03f, -2.106580679e-03f,
--2.107112518e-03f, -2.107640686e-03f, -2.108165183e-03f, -2.108686009e-03f, -2.109203162e-03f, -2.109716641e-03f, -2.110226447e-03f, -2.110732579e-03f, -2.111235036e-03f, -2.111733816e-03f,
--2.112228920e-03f, -2.112720347e-03f, -2.113208096e-03f, -2.113692167e-03f, -2.114172558e-03f, -2.114649270e-03f, -2.115122302e-03f, -2.115591652e-03f, -2.116057321e-03f, -2.116519308e-03f,
--2.116977612e-03f, -2.117432233e-03f, -2.117883169e-03f, -2.118330421e-03f, -2.118773988e-03f, -2.119213870e-03f, -2.119650065e-03f, -2.120082573e-03f, -2.120511394e-03f, -2.120936527e-03f,
--2.121357971e-03f, -2.121775727e-03f, -2.122189793e-03f, -2.122600169e-03f, -2.123006855e-03f, -2.123409850e-03f, -2.123809153e-03f, -2.124204764e-03f, -2.124596682e-03f, -2.124984908e-03f,
--2.125369440e-03f, -2.125750279e-03f, -2.126127423e-03f, -2.126500872e-03f, -2.126870626e-03f, -2.127236684e-03f, -2.127599046e-03f, -2.127957711e-03f, -2.128312680e-03f, -2.128663951e-03f,
--2.129011525e-03f, -2.129355400e-03f, -2.129695576e-03f, -2.130032054e-03f, -2.130364832e-03f, -2.130693911e-03f, -2.131019289e-03f, -2.131340967e-03f, -2.131658944e-03f, -2.131973220e-03f,
--2.132283795e-03f, -2.132590667e-03f, -2.132893838e-03f, -2.133193306e-03f, -2.133489071e-03f, -2.133781133e-03f, -2.134069491e-03f, -2.134354146e-03f, -2.134635097e-03f, -2.134912343e-03f,
--2.135185885e-03f, -2.135455722e-03f, -2.135721854e-03f, -2.135984280e-03f, -2.136243001e-03f, -2.136498016e-03f, -2.136749324e-03f, -2.136996927e-03f, -2.137240823e-03f, -2.137481012e-03f,
--2.137717493e-03f, -2.137950268e-03f, -2.138179335e-03f, -2.138404695e-03f, -2.138626347e-03f, -2.138844291e-03f, -2.139058526e-03f, -2.139269053e-03f, -2.139475872e-03f, -2.139678982e-03f,
--2.139878383e-03f, -2.140074075e-03f, -2.140266059e-03f, -2.140454332e-03f, -2.140638897e-03f, -2.140819752e-03f, -2.140996897e-03f, -2.141170333e-03f, -2.141340059e-03f, -2.141506075e-03f,
--2.141668381e-03f, -2.141826977e-03f, -2.141981863e-03f, -2.142133038e-03f, -2.142280504e-03f, -2.142424259e-03f, -2.142564304e-03f, -2.142700638e-03f, -2.142833262e-03f, -2.142962175e-03f,
--2.143087378e-03f, -2.143208870e-03f, -2.143326652e-03f, -2.143440723e-03f, -2.143551084e-03f, -2.143657735e-03f, -2.143760674e-03f, -2.143859904e-03f, -2.143955423e-03f, -2.144047231e-03f,
--2.144135329e-03f, -2.144219717e-03f, -2.144300395e-03f, -2.144377362e-03f, -2.144450619e-03f, -2.144520166e-03f, -2.144586003e-03f, -2.144648131e-03f, -2.144706548e-03f, -2.144761256e-03f,
--2.144812254e-03f, -2.144859543e-03f, -2.144903122e-03f, -2.144942992e-03f, -2.144979153e-03f, -2.145011605e-03f, -2.145040349e-03f, -2.145065383e-03f, -2.145086709e-03f, -2.145104327e-03f,
--2.145118236e-03f, -2.145128438e-03f, -2.145134931e-03f, -2.145137717e-03f, -2.145136796e-03f, -2.145132167e-03f, -2.145123832e-03f, -2.145111789e-03f, -2.145096040e-03f, -2.145076585e-03f,
--2.145053423e-03f, -2.145026556e-03f, -2.144995983e-03f, -2.144961704e-03f, -2.144923720e-03f, -2.144882032e-03f, -2.144836639e-03f, -2.144787542e-03f, -2.144734740e-03f, -2.144678235e-03f,
--2.144618026e-03f, -2.144554115e-03f, -2.144486500e-03f, -2.144415183e-03f, -2.144340164e-03f, -2.144261443e-03f, -2.144179020e-03f, -2.144092896e-03f, -2.144003072e-03f, -2.143909547e-03f,
--2.143812321e-03f, -2.143711396e-03f, -2.143606772e-03f, -2.143498449e-03f, -2.143386427e-03f, -2.143270707e-03f, -2.143151289e-03f, -2.143028174e-03f, -2.142901361e-03f, -2.142770853e-03f,
--2.142636648e-03f, -2.142498747e-03f, -2.142357151e-03f, -2.142211860e-03f, -2.142062875e-03f, -2.141910196e-03f, -2.141753823e-03f, -2.141593758e-03f, -2.141430000e-03f, -2.141262550e-03f,
--2.141091408e-03f, -2.140916575e-03f, -2.140738052e-03f, -2.140555839e-03f, -2.140369936e-03f, -2.140180344e-03f, -2.139987064e-03f, -2.139790096e-03f, -2.139589440e-03f, -2.139385098e-03f,
--2.139177069e-03f, -2.138965355e-03f, -2.138749955e-03f, -2.138530871e-03f, -2.138308103e-03f, -2.138081651e-03f, -2.137851517e-03f, -2.137617700e-03f, -2.137380201e-03f, -2.137139022e-03f,
--2.136894162e-03f, -2.136645622e-03f, -2.136393403e-03f, -2.136137506e-03f, -2.135877931e-03f, -2.135614678e-03f, -2.135347749e-03f, -2.135077144e-03f, -2.134802863e-03f, -2.134524908e-03f,
--2.134243280e-03f, -2.133957977e-03f, -2.133669003e-03f, -2.133376356e-03f, -2.133080039e-03f, -2.132780051e-03f, -2.132476393e-03f, -2.132169066e-03f, -2.131858071e-03f, -2.131543408e-03f,
--2.131225079e-03f, -2.130903084e-03f, -2.130577423e-03f, -2.130248098e-03f, -2.129915109e-03f, -2.129578457e-03f, -2.129238143e-03f, -2.128894168e-03f, -2.128546531e-03f, -2.128195236e-03f,
--2.127840281e-03f, -2.127481667e-03f, -2.127119397e-03f, -2.126753470e-03f, -2.126383887e-03f, -2.126010649e-03f, -2.125633758e-03f, -2.125253213e-03f, -2.124869015e-03f, -2.124481167e-03f,
--2.124089667e-03f, -2.123694518e-03f, -2.123295720e-03f, -2.122893274e-03f, -2.122487181e-03f, -2.122077442e-03f, -2.121664057e-03f, -2.121247028e-03f, -2.120826356e-03f, -2.120402041e-03f,
--2.119974085e-03f, -2.119542487e-03f, -2.119107251e-03f, -2.118668375e-03f, -2.118225862e-03f, -2.117779711e-03f, -2.117329925e-03f, -2.116876504e-03f, -2.116419449e-03f, -2.115958761e-03f,
--2.115494441e-03f, -2.115026491e-03f, -2.114554910e-03f, -2.114079700e-03f, -2.113600863e-03f, -2.113118398e-03f, -2.112632308e-03f, -2.112142593e-03f, -2.111649254e-03f, -2.111152292e-03f,
--2.110651709e-03f, -2.110147505e-03f, -2.109639681e-03f, -2.109128239e-03f, -2.108613180e-03f, -2.108094504e-03f, -2.107572213e-03f, -2.107046308e-03f, -2.106516790e-03f, -2.105983660e-03f,
--2.105446919e-03f, -2.104906569e-03f, -2.104362610e-03f, -2.103815043e-03f, -2.103263871e-03f, -2.102709093e-03f, -2.102150711e-03f, -2.101588727e-03f, -2.101023141e-03f, -2.100453954e-03f,
--2.099881168e-03f, -2.099304784e-03f, -2.098724803e-03f, -2.098141227e-03f, -2.097554056e-03f, -2.096963291e-03f, -2.096368935e-03f, -2.095770987e-03f, -2.095169450e-03f, -2.094564325e-03f,
--2.093955613e-03f, -2.093343314e-03f, -2.092727431e-03f, -2.092107965e-03f, -2.091484916e-03f, -2.090858286e-03f, -2.090228077e-03f, -2.089594290e-03f, -2.088956926e-03f, -2.088315986e-03f,
--2.087671471e-03f, -2.087023383e-03f, -2.086371724e-03f, -2.085716494e-03f, -2.085057695e-03f, -2.084395328e-03f, -2.083729395e-03f, -2.083059896e-03f, -2.082386834e-03f, -2.081710209e-03f,
--2.081030023e-03f, -2.080346278e-03f, -2.079658974e-03f, -2.078968113e-03f, -2.078273697e-03f, -2.077575726e-03f, -2.076874203e-03f, -2.076169128e-03f, -2.075460503e-03f, -2.074748330e-03f,
--2.074032610e-03f, -2.073313344e-03f, -2.072590534e-03f, -2.071864181e-03f, -2.071134286e-03f, -2.070400852e-03f, -2.069663879e-03f, -2.068923369e-03f, -2.068179324e-03f, -2.067431745e-03f,
--2.066680633e-03f, -2.065925990e-03f, -2.065167817e-03f, -2.064406117e-03f, -2.063640890e-03f, -2.062872137e-03f, -2.062099862e-03f, -2.061324064e-03f, -2.060544746e-03f, -2.059761909e-03f,
--2.058975554e-03f, -2.058185684e-03f, -2.057392299e-03f, -2.056595402e-03f, -2.055794993e-03f, -2.054991075e-03f, -2.054183649e-03f, -2.053372716e-03f, -2.052558279e-03f, -2.051740339e-03f,
--2.050918896e-03f, -2.050093954e-03f, -2.049265513e-03f, -2.048433576e-03f, -2.047598143e-03f, -2.046759217e-03f, -2.045916799e-03f, -2.045070891e-03f, -2.044221494e-03f, -2.043368611e-03f,
--2.042512242e-03f, -2.041652389e-03f, -2.040789054e-03f, -2.039922240e-03f, -2.039051946e-03f, -2.038178176e-03f, -2.037300931e-03f, -2.036420212e-03f, -2.035536021e-03f, -2.034648361e-03f,
--2.033757232e-03f, -2.032862636e-03f, -2.031964576e-03f, -2.031063053e-03f, -2.030158068e-03f, -2.029249623e-03f, -2.028337721e-03f, -2.027422363e-03f, -2.026503550e-03f, -2.025581285e-03f,
--2.024655569e-03f, -2.023726404e-03f, -2.022793791e-03f, -2.021857734e-03f, -2.020918233e-03f, -2.019975290e-03f, -2.019028907e-03f, -2.018079086e-03f, -2.017125828e-03f, -2.016169137e-03f,
--2.015209012e-03f, -2.014245457e-03f, -2.013278473e-03f, -2.012308061e-03f, -2.011334225e-03f, -2.010356965e-03f, -2.009376284e-03f, -2.008392183e-03f, -2.007404664e-03f, -2.006413729e-03f,
--2.005419381e-03f, -2.004421621e-03f, -2.003420450e-03f, -2.002415871e-03f, -2.001407886e-03f, -2.000396497e-03f, -1.999381705e-03f, -1.998363513e-03f, -1.997341922e-03f, -1.996316935e-03f,
--1.995288553e-03f, -1.994256778e-03f, -1.993221613e-03f, -1.992183059e-03f, -1.991141118e-03f, -1.990095792e-03f, -1.989047084e-03f, -1.987994995e-03f, -1.986939527e-03f, -1.985880682e-03f,
--1.984818463e-03f, -1.983752870e-03f, -1.982683907e-03f, -1.981611576e-03f, -1.980535878e-03f, -1.979456815e-03f, -1.978374389e-03f, -1.977288603e-03f, -1.976199459e-03f, -1.975106958e-03f,
--1.974011103e-03f, -1.972911896e-03f, -1.971809338e-03f, -1.970703433e-03f, -1.969594181e-03f, -1.968481586e-03f, -1.967365649e-03f, -1.966246372e-03f, -1.965123757e-03f, -1.963997807e-03f,
--1.962868524e-03f, -1.961735910e-03f, -1.960599967e-03f, -1.959460696e-03f, -1.958318101e-03f, -1.957172184e-03f, -1.956022946e-03f, -1.954870390e-03f, -1.953714517e-03f, -1.952555331e-03f,
--1.951392833e-03f, -1.950227026e-03f, -1.949057911e-03f, -1.947885491e-03f, -1.946709768e-03f, -1.945530744e-03f, -1.944348422e-03f, -1.943162803e-03f, -1.941973891e-03f, -1.940781687e-03f,
--1.939586193e-03f, -1.938387411e-03f, -1.937185345e-03f, -1.935979996e-03f, -1.934771366e-03f, -1.933559458e-03f, -1.932344274e-03f, -1.931125816e-03f, -1.929904086e-03f, -1.928679088e-03f,
--1.927450822e-03f, -1.926219292e-03f, -1.924984500e-03f, -1.923746447e-03f, -1.922505137e-03f, -1.921260572e-03f, -1.920012754e-03f, -1.918761684e-03f, -1.917507367e-03f, -1.916249804e-03f,
--1.914988997e-03f, -1.913724948e-03f, -1.912457661e-03f, -1.911187137e-03f, -1.909913379e-03f, -1.908636389e-03f, -1.907356170e-03f, -1.906072723e-03f, -1.904786052e-03f, -1.903496159e-03f,
--1.902203046e-03f, -1.900906715e-03f, -1.899607170e-03f, -1.898304411e-03f, -1.896998443e-03f, -1.895689267e-03f, -1.894376885e-03f, -1.893061301e-03f, -1.891742516e-03f, -1.890420533e-03f,
--1.889095355e-03f, -1.887766984e-03f, -1.886435422e-03f, -1.885100672e-03f, -1.883762736e-03f, -1.882421617e-03f, -1.881077318e-03f, -1.879729840e-03f, -1.878379187e-03f, -1.877025360e-03f,
--1.875668363e-03f, -1.874308198e-03f, -1.872944867e-03f, -1.871578373e-03f, -1.870208719e-03f, -1.868835906e-03f, -1.867459938e-03f, -1.866080817e-03f, -1.864698546e-03f, -1.863313127e-03f,
--1.861924563e-03f, -1.860532856e-03f, -1.859138009e-03f, -1.857740025e-03f, -1.856338905e-03f, -1.854934654e-03f, -1.853527272e-03f, -1.852116764e-03f, -1.850703130e-03f, -1.849286375e-03f,
--1.847866501e-03f, -1.846443510e-03f, -1.845017405e-03f, -1.843588189e-03f, -1.842155864e-03f, -1.840720432e-03f, -1.839281897e-03f, -1.837840262e-03f, -1.836395528e-03f, -1.834947699e-03f,
--1.833496777e-03f, -1.832042765e-03f, -1.830585665e-03f, -1.829125480e-03f, -1.827662214e-03f, -1.826195868e-03f, -1.824726445e-03f, -1.823253949e-03f, -1.821778381e-03f, -1.820299744e-03f,
--1.818818042e-03f, -1.817333276e-03f, -1.815845451e-03f, -1.814354567e-03f, -1.812860629e-03f, -1.811363638e-03f, -1.809863598e-03f, -1.808360512e-03f, -1.806854381e-03f, -1.805345210e-03f,
--1.803833000e-03f, -1.802317755e-03f, -1.800799476e-03f, -1.799278168e-03f, -1.797753833e-03f, -1.796226473e-03f, -1.794696092e-03f, -1.793162692e-03f, -1.791626275e-03f, -1.790086846e-03f,
--1.788544407e-03f, -1.786998960e-03f, -1.785450508e-03f, -1.783899054e-03f, -1.782344602e-03f, -1.780787153e-03f, -1.779226711e-03f, -1.777663279e-03f, -1.776096859e-03f, -1.774527454e-03f,
--1.772955068e-03f, -1.771379702e-03f, -1.769801361e-03f, -1.768220046e-03f, -1.766635761e-03f, -1.765048509e-03f, -1.763458293e-03f, -1.761865114e-03f, -1.760268978e-03f, -1.758669885e-03f,
--1.757067840e-03f, -1.755462845e-03f, -1.753854902e-03f, -1.752244016e-03f, -1.750630189e-03f, -1.749013424e-03f, -1.747393724e-03f, -1.745771091e-03f, -1.744145529e-03f, -1.742517041e-03f,
--1.740885630e-03f, -1.739251298e-03f, -1.737614049e-03f, -1.735973886e-03f, -1.734330811e-03f, -1.732684828e-03f, -1.731035940e-03f, -1.729384149e-03f, -1.727729459e-03f, -1.726071873e-03f,
--1.724411393e-03f, -1.722748024e-03f, -1.721081767e-03f, -1.719412625e-03f, -1.717740603e-03f, -1.716065702e-03f, -1.714387927e-03f, -1.712707279e-03f, -1.711023763e-03f, -1.709337381e-03f,
--1.707648136e-03f, -1.705956031e-03f, -1.704261069e-03f, -1.702563254e-03f, -1.700862589e-03f, -1.699159076e-03f, -1.697452719e-03f, -1.695743521e-03f, -1.694031484e-03f, -1.692316613e-03f,
--1.690598910e-03f, -1.688878378e-03f, -1.687155020e-03f, -1.685428840e-03f, -1.683699841e-03f, -1.681968026e-03f, -1.680233397e-03f, -1.678495959e-03f, -1.676755714e-03f, -1.675012665e-03f,
--1.673266816e-03f, -1.671518170e-03f, -1.669766730e-03f, -1.668012499e-03f, -1.666255480e-03f, -1.664495676e-03f, -1.662733092e-03f, -1.660967729e-03f, -1.659199591e-03f, -1.657428682e-03f,
--1.655655004e-03f, -1.653878561e-03f, -1.652099356e-03f, -1.650317391e-03f, -1.648532672e-03f, -1.646745200e-03f, -1.644954978e-03f, -1.643162011e-03f, -1.641366302e-03f, -1.639567853e-03f,
--1.637766667e-03f, -1.635962749e-03f, -1.634156101e-03f, -1.632346727e-03f, -1.630534630e-03f, -1.628719813e-03f, -1.626902280e-03f, -1.625082033e-03f, -1.623259077e-03f, -1.621433414e-03f,
--1.619605047e-03f, -1.617773981e-03f, -1.615940217e-03f, -1.614103761e-03f, -1.612264614e-03f, -1.610422781e-03f, -1.608578264e-03f, -1.606731067e-03f, -1.604881194e-03f, -1.603028647e-03f,
--1.601173430e-03f, -1.599315546e-03f, -1.597454999e-03f, -1.595591792e-03f, -1.593725928e-03f, -1.591857411e-03f, -1.589986245e-03f, -1.588112431e-03f, -1.586235975e-03f, -1.584356879e-03f,
--1.582475146e-03f, -1.580590781e-03f, -1.578703786e-03f, -1.576814165e-03f, -1.574921921e-03f, -1.573027058e-03f, -1.571129579e-03f, -1.569229488e-03f, -1.567326787e-03f, -1.565421481e-03f,
--1.563513573e-03f, -1.561603065e-03f, -1.559689963e-03f, -1.557774269e-03f, -1.555855986e-03f, -1.553935119e-03f, -1.552011669e-03f, -1.550085642e-03f, -1.548157041e-03f, -1.546225868e-03f,
--1.544292128e-03f, -1.542355823e-03f, -1.540416958e-03f, -1.538475536e-03f, -1.536531560e-03f, -1.534585034e-03f, -1.532635961e-03f, -1.530684345e-03f, -1.528730189e-03f, -1.526773498e-03f,
--1.524814273e-03f, -1.522852520e-03f, -1.520888241e-03f, -1.518921440e-03f, -1.516952121e-03f, -1.514980287e-03f, -1.513005941e-03f, -1.511029087e-03f, -1.509049729e-03f, -1.507067871e-03f,
--1.505083515e-03f, -1.503096665e-03f, -1.501107326e-03f, -1.499115500e-03f, -1.497121191e-03f, -1.495124403e-03f, -1.493125139e-03f, -1.491123403e-03f, -1.489119199e-03f, -1.487112529e-03f,
--1.485103398e-03f, -1.483091810e-03f, -1.481077767e-03f, -1.479061274e-03f, -1.477042334e-03f, -1.475020951e-03f, -1.472997128e-03f, -1.470970869e-03f, -1.468942177e-03f, -1.466911057e-03f,
--1.464877512e-03f, -1.462841545e-03f, -1.460803161e-03f, -1.458762362e-03f, -1.456719153e-03f, -1.454673537e-03f, -1.452625518e-03f, -1.450575099e-03f, -1.448522285e-03f, -1.446467078e-03f,
--1.444409483e-03f, -1.442349503e-03f, -1.440287142e-03f, -1.438222404e-03f, -1.436155292e-03f, -1.434085810e-03f, -1.432013962e-03f, -1.429939751e-03f, -1.427863181e-03f, -1.425784256e-03f,
--1.423702980e-03f, -1.421619356e-03f, -1.419533388e-03f, -1.417445080e-03f, -1.415354435e-03f, -1.413261458e-03f, -1.411166152e-03f, -1.409068520e-03f, -1.406968567e-03f, -1.404866296e-03f,
--1.402761711e-03f, -1.400654815e-03f, -1.398545614e-03f, -1.396434109e-03f, -1.394320306e-03f, -1.392204207e-03f, -1.390085817e-03f, -1.387965140e-03f, -1.385842179e-03f, -1.383716938e-03f,
--1.381589420e-03f, -1.379459630e-03f, -1.377327572e-03f, -1.375193249e-03f, -1.373056664e-03f, -1.370917823e-03f, -1.368776728e-03f, -1.366633384e-03f, -1.364487794e-03f, -1.362339962e-03f,
--1.360189892e-03f, -1.358037588e-03f, -1.355883054e-03f, -1.353726293e-03f, -1.351567310e-03f, -1.349406107e-03f, -1.347242690e-03f, -1.345077062e-03f, -1.342909226e-03f, -1.340739187e-03f,
--1.338566949e-03f, -1.336392515e-03f, -1.334215889e-03f, -1.332037075e-03f, -1.329856078e-03f, -1.327672900e-03f, -1.325487546e-03f, -1.323300020e-03f, -1.321110325e-03f, -1.318918466e-03f,
--1.316724446e-03f, -1.314528270e-03f, -1.312329941e-03f, -1.310129463e-03f, -1.307926840e-03f, -1.305722076e-03f, -1.303515175e-03f, -1.301306141e-03f, -1.299094977e-03f, -1.296881689e-03f,
--1.294666279e-03f, -1.292448751e-03f, -1.290229110e-03f, -1.288007360e-03f, -1.285783504e-03f, -1.283557546e-03f, -1.281329491e-03f, -1.279099343e-03f, -1.276867104e-03f, -1.274632780e-03f,
--1.272396374e-03f, -1.270157890e-03f, -1.267917333e-03f, -1.265674706e-03f, -1.263430012e-03f, -1.261183258e-03f, -1.258934445e-03f, -1.256683578e-03f, -1.254430662e-03f, -1.252175700e-03f,
--1.249918696e-03f, -1.247659654e-03f, -1.245398578e-03f, -1.243135473e-03f, -1.240870342e-03f, -1.238603189e-03f, -1.236334019e-03f, -1.234062835e-03f, -1.231789641e-03f, -1.229514441e-03f,
--1.227237240e-03f, -1.224958042e-03f, -1.222676850e-03f, -1.220393669e-03f, -1.218108502e-03f, -1.215821355e-03f, -1.213532229e-03f, -1.211241131e-03f, -1.208948064e-03f, -1.206653031e-03f,
--1.204356038e-03f, -1.202057088e-03f, -1.199756185e-03f, -1.197453333e-03f, -1.195148537e-03f, -1.192841800e-03f, -1.190533126e-03f, -1.188222521e-03f, -1.185909987e-03f, -1.183595529e-03f,
--1.181279151e-03f, -1.178960856e-03f, -1.176640651e-03f, -1.174318537e-03f, -1.171994520e-03f, -1.169668603e-03f, -1.167340791e-03f, -1.165011088e-03f, -1.162679497e-03f, -1.160346024e-03f,
--1.158010672e-03f, -1.155673445e-03f, -1.153334347e-03f, -1.150993384e-03f, -1.148650558e-03f, -1.146305873e-03f, -1.143959335e-03f, -1.141610947e-03f, -1.139260714e-03f, -1.136908639e-03f,
--1.134554726e-03f, -1.132198981e-03f, -1.129841406e-03f, -1.127482007e-03f, -1.125120787e-03f, -1.122757751e-03f, -1.120392902e-03f, -1.118026245e-03f, -1.115657785e-03f, -1.113287525e-03f,
--1.110915469e-03f, -1.108541622e-03f, -1.106165988e-03f, -1.103788571e-03f, -1.101409375e-03f, -1.099028405e-03f, -1.096645664e-03f, -1.094261158e-03f, -1.091874889e-03f, -1.089486863e-03f,
--1.087097084e-03f, -1.084705556e-03f, -1.082312282e-03f, -1.079917268e-03f, -1.077520517e-03f, -1.075122034e-03f, -1.072721823e-03f, -1.070319889e-03f, -1.067916235e-03f, -1.065510865e-03f,
--1.063103785e-03f, -1.060694997e-03f, -1.058284508e-03f, -1.055872320e-03f, -1.053458438e-03f, -1.051042866e-03f, -1.048625609e-03f, -1.046206671e-03f, -1.043786055e-03f, -1.041363768e-03f,
--1.038939811e-03f, -1.036514191e-03f, -1.034086911e-03f, -1.031657975e-03f, -1.029227389e-03f, -1.026795155e-03f, -1.024361278e-03f, -1.021925764e-03f, -1.019488615e-03f, -1.017049836e-03f,
--1.014609432e-03f, -1.012167407e-03f, -1.009723765e-03f, -1.007278511e-03f, -1.004831648e-03f, -1.002383182e-03f, -9.999331158e-04f, -9.974814544e-04f, -9.950282022e-04f, -9.925733634e-04f,
--9.901169423e-04f, -9.876589433e-04f, -9.851993707e-04f, -9.827382288e-04f, -9.802755220e-04f, -9.778112547e-04f, -9.753454311e-04f, -9.728780556e-04f, -9.704091325e-04f, -9.679386663e-04f,
--9.654666613e-04f, -9.629931217e-04f, -9.605180521e-04f, -9.580414567e-04f, -9.555633399e-04f, -9.530837060e-04f, -9.506025596e-04f, -9.481199048e-04f, -9.456357461e-04f, -9.431500878e-04f,
--9.406629344e-04f, -9.381742902e-04f, -9.356841596e-04f, -9.331925470e-04f, -9.306994568e-04f, -9.282048933e-04f, -9.257088610e-04f, -9.232113642e-04f, -9.207124073e-04f, -9.182119948e-04f,
--9.157101311e-04f, -9.132068205e-04f, -9.107020674e-04f, -9.081958763e-04f, -9.056882515e-04f, -9.031791975e-04f, -9.006687188e-04f, -8.981568196e-04f, -8.956435044e-04f, -8.931287778e-04f,
--8.906126439e-04f, -8.880951074e-04f, -8.855761726e-04f, -8.830558440e-04f, -8.805341259e-04f, -8.780110229e-04f, -8.754865393e-04f, -8.729606796e-04f, -8.704334482e-04f, -8.679048497e-04f,
--8.653748883e-04f, -8.628435686e-04f, -8.603108951e-04f, -8.577768721e-04f, -8.552415041e-04f, -8.527047956e-04f, -8.501667510e-04f, -8.476273749e-04f, -8.450866716e-04f, -8.425446456e-04f,
--8.400013014e-04f, -8.374566434e-04f, -8.349106762e-04f, -8.323634042e-04f, -8.298148318e-04f, -8.272649636e-04f, -8.247138040e-04f, -8.221613574e-04f, -8.196076285e-04f, -8.170526217e-04f,
--8.144963414e-04f, -8.119387921e-04f, -8.093799784e-04f, -8.068199046e-04f, -8.042585754e-04f, -8.016959952e-04f, -7.991321685e-04f, -7.965670998e-04f, -7.940007937e-04f, -7.914332545e-04f,
--7.888644868e-04f, -7.862944952e-04f, -7.837232840e-04f, -7.811508580e-04f, -7.785772214e-04f, -7.760023790e-04f, -7.734263351e-04f, -7.708490943e-04f, -7.682706611e-04f, -7.656910401e-04f,
--7.631102357e-04f, -7.605282526e-04f, -7.579450951e-04f, -7.553607679e-04f, -7.527752754e-04f, -7.501886223e-04f, -7.476008130e-04f, -7.450118520e-04f, -7.424217440e-04f, -7.398304935e-04f,
--7.372381049e-04f, -7.346445829e-04f, -7.320499319e-04f, -7.294541566e-04f, -7.268572614e-04f, -7.242592510e-04f, -7.216601298e-04f, -7.190599024e-04f, -7.164585735e-04f, -7.138561475e-04f,
--7.112526289e-04f, -7.086480225e-04f, -7.060423326e-04f, -7.034355639e-04f, -7.008277210e-04f, -6.982188083e-04f, -6.956088306e-04f, -6.929977922e-04f, -6.903856979e-04f, -6.877725522e-04f,
--6.851583596e-04f, -6.825431248e-04f, -6.799268523e-04f, -6.773095467e-04f, -6.746912125e-04f, -6.720718544e-04f, -6.694514770e-04f, -6.668300847e-04f, -6.642076823e-04f, -6.615842742e-04f,
--6.589598652e-04f, -6.563344597e-04f, -6.537080623e-04f, -6.510806778e-04f, -6.484523106e-04f, -6.458229653e-04f, -6.431926466e-04f, -6.405613590e-04f, -6.379291072e-04f, -6.352958957e-04f,
--6.326617292e-04f, -6.300266122e-04f, -6.273905494e-04f, -6.247535453e-04f, -6.221156047e-04f, -6.194767320e-04f, -6.168369320e-04f, -6.141962091e-04f, -6.115545681e-04f, -6.089120135e-04f,
--6.062685500e-04f, -6.036241822e-04f, -6.009789146e-04f, -5.983327520e-04f, -5.956856990e-04f, -5.930377601e-04f, -5.903889400e-04f, -5.877392433e-04f, -5.850886747e-04f, -5.824372387e-04f,
--5.797849400e-04f, -5.771317833e-04f, -5.744777732e-04f, -5.718229142e-04f, -5.691672111e-04f, -5.665106685e-04f, -5.638532909e-04f, -5.611950832e-04f, -5.585360498e-04f, -5.558761954e-04f,
--5.532155247e-04f, -5.505540423e-04f, -5.478917529e-04f, -5.452286611e-04f, -5.425647716e-04f, -5.399000889e-04f, -5.372346178e-04f, -5.345683629e-04f, -5.319013288e-04f, -5.292335202e-04f,
--5.265649418e-04f, -5.238955982e-04f, -5.212254941e-04f, -5.185546340e-04f, -5.158830228e-04f, -5.132106650e-04f, -5.105375653e-04f, -5.078637283e-04f, -5.051891588e-04f, -5.025138613e-04f,
--4.998378406e-04f, -4.971611013e-04f, -4.944836481e-04f, -4.918054856e-04f, -4.891266185e-04f, -4.864470515e-04f, -4.837667892e-04f, -4.810858364e-04f, -4.784041976e-04f, -4.757218777e-04f,
--4.730388811e-04f, -4.703552126e-04f, -4.676708770e-04f, -4.649858788e-04f, -4.623002227e-04f, -4.596139134e-04f, -4.569269557e-04f, -4.542393541e-04f, -4.515511133e-04f, -4.488622381e-04f,
--4.461727331e-04f, -4.434826030e-04f, -4.407918525e-04f, -4.381004863e-04f, -4.354085090e-04f, -4.327159253e-04f, -4.300227400e-04f, -4.273289577e-04f, -4.246345831e-04f, -4.219396209e-04f,
--4.192440757e-04f, -4.165479523e-04f, -4.138512554e-04f, -4.111539897e-04f, -4.084561598e-04f, -4.057577704e-04f, -4.030588263e-04f, -4.003593321e-04f, -3.976592925e-04f, -3.949587123e-04f,
--3.922575960e-04f, -3.895559485e-04f, -3.868537744e-04f, -3.841510784e-04f, -3.814478653e-04f, -3.787441396e-04f, -3.760399062e-04f, -3.733351697e-04f, -3.706299348e-04f, -3.679242063e-04f,
--3.652179887e-04f, -3.625112869e-04f, -3.598041056e-04f, -3.570964494e-04f, -3.543883230e-04f, -3.516797312e-04f, -3.489706786e-04f, -3.462611700e-04f, -3.435512101e-04f, -3.408408036e-04f,
--3.381299552e-04f, -3.354186696e-04f, -3.327069515e-04f, -3.299948056e-04f, -3.272822366e-04f, -3.245692493e-04f, -3.218558484e-04f, -3.191420385e-04f, -3.164278244e-04f, -3.137132108e-04f,
--3.109982025e-04f, -3.082828040e-04f, -3.055670202e-04f, -3.028508558e-04f, -3.001343154e-04f, -2.974174038e-04f, -2.947001257e-04f, -2.919824858e-04f, -2.892644889e-04f, -2.865461396e-04f,
--2.838274427e-04f, -2.811084029e-04f, -2.783890249e-04f, -2.756693134e-04f, -2.729492732e-04f, -2.702289089e-04f, -2.675082253e-04f, -2.647872271e-04f, -2.620659191e-04f, -2.593443059e-04f,
--2.566223922e-04f, -2.539001829e-04f, -2.511776825e-04f, -2.484548959e-04f, -2.457318277e-04f, -2.430084827e-04f, -2.402848656e-04f, -2.375609812e-04f, -2.348368340e-04f, -2.321124290e-04f,
--2.293877707e-04f, -2.266628639e-04f, -2.239377134e-04f, -2.212123238e-04f, -2.184866999e-04f, -2.157608464e-04f, -2.130347680e-04f, -2.103084695e-04f, -2.075819555e-04f, -2.048552309e-04f,
--2.021283003e-04f, -1.994011684e-04f, -1.966738400e-04f, -1.939463199e-04f, -1.912186126e-04f, -1.884907230e-04f, -1.857626557e-04f, -1.830344156e-04f, -1.803060073e-04f, -1.775774355e-04f,
--1.748487050e-04f, -1.721198205e-04f, -1.693907868e-04f, -1.666616085e-04f, -1.639322903e-04f, -1.612028371e-04f, -1.584732535e-04f, -1.557435442e-04f, -1.530137140e-04f, -1.502837676e-04f,
--1.475537098e-04f, -1.448235452e-04f, -1.420932785e-04f, -1.393629146e-04f, -1.366324581e-04f, -1.339019137e-04f, -1.311712862e-04f, -1.284405803e-04f, -1.257098007e-04f, -1.229789522e-04f,
--1.202480395e-04f, -1.175170672e-04f, -1.147860402e-04f, -1.120549630e-04f, -1.093238406e-04f, -1.065926775e-04f, -1.038614786e-04f, -1.011302485e-04f, -9.839899193e-05f, -9.566771365e-05f,
--9.293641836e-05f, -9.020511080e-05f, -8.747379568e-05f, -8.474247773e-05f, -8.201116166e-05f, -7.927985219e-05f, -7.654855406e-05f, -7.381727197e-05f, -7.108601064e-05f, -6.835477481e-05f,
--6.562356918e-05f, -6.289239847e-05f, -6.016126741e-05f, -5.743018071e-05f, -5.469914309e-05f, -5.196815928e-05f, -4.923723397e-05f, -4.650637190e-05f, -4.377557778e-05f, -4.104485633e-05f,
--3.831421226e-05f, -3.558365029e-05f, -3.285317513e-05f, -3.012279150e-05f, -2.739250411e-05f, -2.466231767e-05f, -2.193223691e-05f, -1.920226653e-05f, -1.647241125e-05f, -1.374267577e-05f,
--1.101306481e-05f, -8.283583085e-06f, -5.554235300e-06f, -2.825026167e-06f, -9.596039480e-08f, 2.632957306e-06f, 5.361722228e-06f, 8.090329661e-06f, 1.081877490e-05f, 1.354705323e-05f,
-1.627515996e-05f, 1.900309037e-05f, 2.173083976e-05f, 2.445840342e-05f, 2.718577665e-05f, 2.991295475e-05f, 3.263993301e-05f, 3.536670673e-05f, 3.809327121e-05f, 4.081962174e-05f,
-4.354575363e-05f, 4.627166218e-05f, 4.899734268e-05f, 5.172279044e-05f, 5.444800076e-05f, 5.717296893e-05f, 5.989769028e-05f, 6.262216009e-05f, 6.534637368e-05f, 6.807032634e-05f,
-7.079401339e-05f, 7.351743013e-05f, 7.624057187e-05f, 7.896343391e-05f, 8.168601157e-05f, 8.440830015e-05f, 8.713029497e-05f, 8.985199133e-05f, 9.257338456e-05f, 9.529446995e-05f,
-9.801524283e-05f, 1.007356985e-04f, 1.034558323e-04f, 1.061756395e-04f, 1.088951155e-04f, 1.116142555e-04f, 1.143330549e-04f, 1.170515090e-04f, 1.197696132e-04f, 1.224873626e-04f,
-1.252047528e-04f, 1.279217789e-04f, 1.306384363e-04f, 1.333547204e-04f, 1.360706264e-04f, 1.387861497e-04f, 1.415012856e-04f, 1.442160295e-04f, 1.469303766e-04f, 1.496443224e-04f,
-1.523578620e-04f, 1.550709910e-04f, 1.577837045e-04f, 1.604959979e-04f, 1.632078667e-04f, 1.659193060e-04f, 1.686303112e-04f, 1.713408778e-04f, 1.740510009e-04f, 1.767606760e-04f,
-1.794698984e-04f, 1.821786634e-04f, 1.848869664e-04f, 1.875948027e-04f, 1.903021677e-04f, 1.930090567e-04f, 1.957154650e-04f, 1.984213881e-04f, 2.011268212e-04f, 2.038317597e-04f,
-2.065361990e-04f, 2.092401344e-04f, 2.119435613e-04f, 2.146464749e-04f, 2.173488708e-04f, 2.200507442e-04f, 2.227520905e-04f, 2.254529050e-04f, 2.281531832e-04f, 2.308529203e-04f,
-2.335521117e-04f, 2.362507529e-04f, 2.389488391e-04f, 2.416463658e-04f, 2.443433282e-04f, 2.470397219e-04f, 2.497355420e-04f, 2.524307841e-04f, 2.551254435e-04f, 2.578195155e-04f,
-2.605129955e-04f, 2.632058790e-04f, 2.658981613e-04f, 2.685898377e-04f, 2.712809037e-04f, 2.739713546e-04f, 2.766611858e-04f, 2.793503927e-04f, 2.820389707e-04f, 2.847269151e-04f,
-2.874142215e-04f, 2.901008850e-04f, 2.927869012e-04f, 2.954722655e-04f, 2.981569731e-04f, 3.008410196e-04f, 3.035244003e-04f, 3.062071106e-04f, 3.088891460e-04f, 3.115705017e-04f,
-3.142511733e-04f, 3.169311561e-04f, 3.196104455e-04f, 3.222890370e-04f, 3.249669258e-04f, 3.276441076e-04f, 3.303205776e-04f, 3.329963313e-04f, 3.356713640e-04f, 3.383456713e-04f,
-3.410192485e-04f, 3.436920911e-04f, 3.463641944e-04f, 3.490355538e-04f, 3.517061649e-04f, 3.543760230e-04f, 3.570451236e-04f, 3.597134620e-04f, 3.623810338e-04f, 3.650478343e-04f,
-3.677138590e-04f, 3.703791033e-04f, 3.730435626e-04f, 3.757072325e-04f, 3.783701082e-04f, 3.810321853e-04f, 3.836934592e-04f, 3.863539254e-04f, 3.890135792e-04f, 3.916724162e-04f,
-3.943304318e-04f, 3.969876214e-04f, 3.996439805e-04f, 4.022995046e-04f, 4.049541890e-04f, 4.076080293e-04f, 4.102610210e-04f, 4.129131594e-04f, 4.155644400e-04f, 4.182148584e-04f,
-4.208644099e-04f, 4.235130900e-04f, 4.261608943e-04f, 4.288078181e-04f, 4.314538570e-04f, 4.340990064e-04f, 4.367432618e-04f, 4.393866187e-04f, 4.420290726e-04f, 4.446706189e-04f,
-4.473112531e-04f, 4.499509707e-04f, 4.525897672e-04f, 4.552276381e-04f, 4.578645789e-04f, 4.605005850e-04f, 4.631356520e-04f, 4.657697754e-04f, 4.684029506e-04f, 4.710351732e-04f,
-4.736664387e-04f, 4.762967425e-04f, 4.789260801e-04f, 4.815544472e-04f, 4.841818391e-04f, 4.868082515e-04f, 4.894336797e-04f, 4.920581194e-04f, 4.946815660e-04f, 4.973040151e-04f,
-4.999254622e-04f, 5.025459028e-04f, 5.051653324e-04f, 5.077837466e-04f, 5.104011409e-04f, 5.130175108e-04f, 5.156328519e-04f, 5.182471596e-04f, 5.208604296e-04f, 5.234726573e-04f,
-5.260838384e-04f, 5.286939683e-04f, 5.313030426e-04f, 5.339110569e-04f, 5.365180067e-04f, 5.391238875e-04f, 5.417286949e-04f, 5.443324245e-04f, 5.469350718e-04f, 5.495366323e-04f,
-5.521371017e-04f, 5.547364755e-04f, 5.573347493e-04f, 5.599319187e-04f, 5.625279791e-04f, 5.651229262e-04f, 5.677167556e-04f, 5.703094628e-04f, 5.729010434e-04f, 5.754914931e-04f,
-5.780808073e-04f, 5.806689817e-04f, 5.832560118e-04f, 5.858418933e-04f, 5.884266217e-04f, 5.910101927e-04f, 5.935926017e-04f, 5.961738446e-04f, 5.987539167e-04f, 6.013328138e-04f,
-6.039105315e-04f, 6.064870653e-04f, 6.090624108e-04f, 6.116365637e-04f, 6.142095197e-04f, 6.167812742e-04f, 6.193518230e-04f, 6.219211616e-04f, 6.244892857e-04f, 6.270561909e-04f,
-6.296218728e-04f, 6.321863271e-04f, 6.347495494e-04f, 6.373115354e-04f, 6.398722806e-04f, 6.424317807e-04f, 6.449900314e-04f, 6.475470283e-04f, 6.501027671e-04f, 6.526572433e-04f,
-6.552104528e-04f, 6.577623910e-04f, 6.603130537e-04f, 6.628624366e-04f, 6.654105352e-04f, 6.679573453e-04f, 6.705028625e-04f, 6.730470826e-04f, 6.755900011e-04f, 6.781316138e-04f,
-6.806719162e-04f, 6.832109042e-04f, 6.857485734e-04f, 6.882849195e-04f, 6.908199381e-04f, 6.933536250e-04f, 6.958859758e-04f, 6.984169863e-04f, 7.009466521e-04f, 7.034749690e-04f,
-7.060019326e-04f, 7.085275387e-04f, 7.110517829e-04f, 7.135746610e-04f, 7.160961686e-04f, 7.186163016e-04f, 7.211350556e-04f, 7.236524263e-04f, 7.261684095e-04f, 7.286830009e-04f,
-7.311961962e-04f, 7.337079912e-04f, 7.362183815e-04f, 7.387273630e-04f, 7.412349313e-04f, 7.437410823e-04f, 7.462458116e-04f, 7.487491150e-04f, 7.512509882e-04f, 7.537514271e-04f,
-7.562504273e-04f, 7.587479846e-04f, 7.612440948e-04f, 7.637387537e-04f, 7.662319569e-04f, 7.687237004e-04f, 7.712139798e-04f, 7.737027909e-04f, 7.761901296e-04f, 7.786759915e-04f,
-7.811603725e-04f, 7.836432684e-04f, 7.861246749e-04f, 7.886045878e-04f, 7.910830030e-04f, 7.935599162e-04f, 7.960353232e-04f, 7.985092199e-04f, 8.009816020e-04f, 8.034524654e-04f,
-8.059218059e-04f, 8.083896192e-04f, 8.108559012e-04f, 8.133206477e-04f, 8.157838545e-04f, 8.182455176e-04f, 8.207056326e-04f, 8.231641954e-04f, 8.256212019e-04f, 8.280766479e-04f,
-8.305305293e-04f, 8.329828418e-04f, 8.354335813e-04f, 8.378827438e-04f, 8.403303249e-04f, 8.427763207e-04f, 8.452207269e-04f, 8.476635394e-04f, 8.501047540e-04f, 8.525443667e-04f,
-8.549823733e-04f, 8.574187697e-04f, 8.598535518e-04f, 8.622867154e-04f, 8.647182564e-04f, 8.671481707e-04f, 8.695764542e-04f, 8.720031028e-04f, 8.744281124e-04f, 8.768514788e-04f,
-8.792731981e-04f, 8.816932660e-04f, 8.841116785e-04f, 8.865284315e-04f, 8.889435209e-04f, 8.913569426e-04f, 8.937686926e-04f, 8.961787668e-04f, 8.985871610e-04f, 9.009938713e-04f,
-9.033988935e-04f, 9.058022236e-04f, 9.082038576e-04f, 9.106037913e-04f, 9.130020207e-04f, 9.153985418e-04f, 9.177933505e-04f, 9.201864427e-04f, 9.225778145e-04f, 9.249674618e-04f,
-9.273553805e-04f, 9.297415666e-04f, 9.321260161e-04f, 9.345087249e-04f, 9.368896891e-04f, 9.392689046e-04f, 9.416463674e-04f, 9.440220735e-04f, 9.463960188e-04f, 9.487681994e-04f,
-9.511386113e-04f, 9.535072504e-04f, 9.558741127e-04f, 9.582391944e-04f, 9.606024913e-04f, 9.629639995e-04f, 9.653237150e-04f, 9.676816338e-04f, 9.700377519e-04f, 9.723920654e-04f,
-9.747445703e-04f, 9.770952627e-04f, 9.794441385e-04f, 9.817911938e-04f, 9.841364246e-04f, 9.864798271e-04f, 9.888213972e-04f, 9.911611309e-04f, 9.934990244e-04f, 9.958350738e-04f,
-9.981692750e-04f, 1.000501624e-03f, 1.002832117e-03f, 1.005160750e-03f, 1.007487520e-03f, 1.009812421e-03f, 1.012135451e-03f, 1.014456606e-03f, 1.016775880e-03f, 1.019093272e-03f,
-1.021408776e-03f, 1.023722389e-03f, 1.026034106e-03f, 1.028343925e-03f, 1.030651841e-03f, 1.032957850e-03f, 1.035261948e-03f, 1.037564132e-03f, 1.039864398e-03f, 1.042162741e-03f,
-1.044459158e-03f, 1.046753645e-03f, 1.049046198e-03f, 1.051336813e-03f, 1.053625487e-03f, 1.055912215e-03f, 1.058196994e-03f, 1.060479820e-03f, 1.062760689e-03f, 1.065039597e-03f,
-1.067316541e-03f, 1.069591516e-03f, 1.071864519e-03f, 1.074135545e-03f, 1.076404592e-03f, 1.078671655e-03f, 1.080936730e-03f, 1.083199814e-03f, 1.085460903e-03f, 1.087719993e-03f,
-1.089977080e-03f, 1.092232160e-03f, 1.094485231e-03f, 1.096736287e-03f, 1.098985325e-03f, 1.101232341e-03f, 1.103477332e-03f, 1.105720294e-03f, 1.107961223e-03f, 1.110200115e-03f,
-1.112436966e-03f, 1.114671774e-03f, 1.116904533e-03f, 1.119135240e-03f, 1.121363892e-03f, 1.123590485e-03f, 1.125815014e-03f, 1.128037477e-03f, 1.130257870e-03f, 1.132476188e-03f,
-1.134692428e-03f, 1.136906587e-03f, 1.139118660e-03f, 1.141328645e-03f, 1.143536536e-03f, 1.145742331e-03f, 1.147946026e-03f, 1.150147618e-03f, 1.152347101e-03f, 1.154544474e-03f,
-1.156739731e-03f, 1.158932870e-03f, 1.161123886e-03f, 1.163312777e-03f, 1.165499538e-03f, 1.167684166e-03f, 1.169866657e-03f, 1.172047007e-03f, 1.174225213e-03f, 1.176401271e-03f,
-1.178575178e-03f, 1.180746929e-03f, 1.182916522e-03f, 1.185083952e-03f, 1.187249216e-03f, 1.189412311e-03f, 1.191573232e-03f, 1.193731976e-03f, 1.195888540e-03f, 1.198042919e-03f,
-1.200195111e-03f, 1.202345112e-03f, 1.204492917e-03f, 1.206638524e-03f, 1.208781929e-03f, 1.210923128e-03f, 1.213062118e-03f, 1.215198895e-03f, 1.217333455e-03f, 1.219465795e-03f,
-1.221595912e-03f, 1.223723802e-03f, 1.225849461e-03f, 1.227972886e-03f, 1.230094072e-03f, 1.232213018e-03f, 1.234329719e-03f, 1.236444171e-03f, 1.238556371e-03f, 1.240666316e-03f,
-1.242774002e-03f, 1.244879425e-03f, 1.246982582e-03f, 1.249083470e-03f, 1.251182085e-03f, 1.253278423e-03f, 1.255372481e-03f, 1.257464255e-03f, 1.259553742e-03f, 1.261640939e-03f,
-1.263725842e-03f, 1.265808447e-03f, 1.267888751e-03f, 1.269966751e-03f, 1.272042443e-03f, 1.274115824e-03f, 1.276186889e-03f, 1.278255637e-03f, 1.280322062e-03f, 1.282386163e-03f,
-1.284447935e-03f, 1.286507375e-03f, 1.288564479e-03f, 1.290619244e-03f, 1.292671667e-03f, 1.294721744e-03f, 1.296769473e-03f, 1.298814848e-03f, 1.300857867e-03f, 1.302898528e-03f,
-1.304936825e-03f, 1.306972756e-03f, 1.309006317e-03f, 1.311037506e-03f, 1.313066318e-03f, 1.315092750e-03f, 1.317116800e-03f, 1.319138462e-03f, 1.321157735e-03f, 1.323174615e-03f,
-1.325189098e-03f, 1.327201182e-03f, 1.329210862e-03f, 1.331218135e-03f, 1.333222999e-03f, 1.335225449e-03f, 1.337225482e-03f, 1.339223096e-03f, 1.341218287e-03f, 1.343211050e-03f,
-1.345201384e-03f, 1.347189285e-03f, 1.349174750e-03f, 1.351157774e-03f, 1.353138356e-03f, 1.355116491e-03f, 1.357092176e-03f, 1.359065409e-03f, 1.361036185e-03f, 1.363004502e-03f,
-1.364970356e-03f, 1.366933744e-03f, 1.368894662e-03f, 1.370853108e-03f, 1.372809079e-03f, 1.374762570e-03f, 1.376713579e-03f, 1.378662103e-03f, 1.380608138e-03f, 1.382551681e-03f,
-1.384492728e-03f, 1.386431277e-03f, 1.388367325e-03f, 1.390300868e-03f, 1.392231903e-03f, 1.394160426e-03f, 1.396086435e-03f, 1.398009926e-03f, 1.399930897e-03f, 1.401849344e-03f,
-1.403765263e-03f, 1.405678652e-03f, 1.407589507e-03f, 1.409497826e-03f, 1.411403605e-03f, 1.413306841e-03f, 1.415207531e-03f, 1.417105671e-03f, 1.419001259e-03f, 1.420894292e-03f,
-1.422784765e-03f, 1.424672677e-03f, 1.426558024e-03f, 1.428440803e-03f, 1.430321010e-03f, 1.432198644e-03f, 1.434073699e-03f, 1.435946175e-03f, 1.437816066e-03f, 1.439683371e-03f,
-1.441548087e-03f, 1.443410209e-03f, 1.445269735e-03f, 1.447126663e-03f, 1.448980988e-03f, 1.450832708e-03f, 1.452681820e-03f, 1.454528320e-03f, 1.456372206e-03f, 1.458213475e-03f,
-1.460052124e-03f, 1.461888149e-03f, 1.463721547e-03f, 1.465552316e-03f, 1.467380453e-03f, 1.469205954e-03f, 1.471028816e-03f, 1.472849037e-03f, 1.474666614e-03f, 1.476481542e-03f,
-1.478293821e-03f, 1.480103445e-03f, 1.481910414e-03f, 1.483714722e-03f, 1.485516368e-03f, 1.487315349e-03f, 1.489111662e-03f, 1.490905302e-03f, 1.492696269e-03f, 1.494484559e-03f,
-1.496270168e-03f, 1.498053094e-03f, 1.499833334e-03f, 1.501610885e-03f, 1.503385744e-03f, 1.505157908e-03f, 1.506927374e-03f, 1.508694139e-03f, 1.510458201e-03f, 1.512219557e-03f,
-1.513978203e-03f, 1.515734137e-03f, 1.517487355e-03f, 1.519237856e-03f, 1.520985636e-03f, 1.522730691e-03f, 1.524473020e-03f, 1.526212620e-03f, 1.527949487e-03f, 1.529683619e-03f,
-1.531415013e-03f, 1.533143666e-03f, 1.534869575e-03f, 1.536592737e-03f, 1.538313150e-03f, 1.540030811e-03f, 1.541745716e-03f, 1.543457864e-03f, 1.545167251e-03f, 1.546873874e-03f,
-1.548577731e-03f, 1.550278819e-03f, 1.551977136e-03f, 1.553672677e-03f, 1.555365441e-03f, 1.557055425e-03f, 1.558742625e-03f, 1.560427040e-03f, 1.562108666e-03f, 1.563787501e-03f,
-1.565463543e-03f, 1.567136787e-03f, 1.568807231e-03f, 1.570474874e-03f, 1.572139711e-03f, 1.573801741e-03f, 1.575460960e-03f, 1.577117366e-03f, 1.578770957e-03f, 1.580421728e-03f,
-1.582069679e-03f, 1.583714805e-03f, 1.585357105e-03f, 1.586996576e-03f, 1.588633214e-03f, 1.590267018e-03f, 1.591897984e-03f, 1.593526111e-03f, 1.595151394e-03f, 1.596773833e-03f,
-1.598393423e-03f, 1.600010163e-03f, 1.601624049e-03f, 1.603235080e-03f, 1.604843252e-03f, 1.606448563e-03f, 1.608051010e-03f, 1.609650591e-03f, 1.611247303e-03f, 1.612841143e-03f,
-1.614432109e-03f, 1.616020198e-03f, 1.617605407e-03f, 1.619187735e-03f, 1.620767178e-03f, 1.622343735e-03f, 1.623917401e-03f, 1.625488175e-03f, 1.627056055e-03f, 1.628621037e-03f,
-1.630183119e-03f, 1.631742298e-03f, 1.633298573e-03f, 1.634851940e-03f, 1.636402397e-03f, 1.637949942e-03f, 1.639494571e-03f, 1.641036283e-03f, 1.642575075e-03f, 1.644110944e-03f,
-1.645643888e-03f, 1.647173905e-03f, 1.648700991e-03f, 1.650225145e-03f, 1.651746364e-03f, 1.653264645e-03f, 1.654779987e-03f, 1.656292386e-03f, 1.657801840e-03f, 1.659308347e-03f,
-1.660811904e-03f, 1.662312509e-03f, 1.663810159e-03f, 1.665304852e-03f, 1.666796586e-03f, 1.668285358e-03f, 1.669771165e-03f, 1.671254006e-03f, 1.672733877e-03f, 1.674210778e-03f,
-1.675684704e-03f, 1.677155654e-03f, 1.678623625e-03f, 1.680088615e-03f, 1.681550622e-03f, 1.683009643e-03f, 1.684465676e-03f, 1.685918718e-03f, 1.687368768e-03f, 1.688815822e-03f,
-1.690259879e-03f, 1.691700936e-03f, 1.693138991e-03f, 1.694574041e-03f, 1.696006084e-03f, 1.697435118e-03f, 1.698861141e-03f, 1.700284150e-03f, 1.701704144e-03f, 1.703121118e-03f,
-1.704535072e-03f, 1.705946004e-03f, 1.707353910e-03f, 1.708758788e-03f, 1.710160637e-03f, 1.711559454e-03f, 1.712955237e-03f, 1.714347983e-03f, 1.715737691e-03f, 1.717124358e-03f,
-1.718507981e-03f, 1.719888559e-03f, 1.721266090e-03f, 1.722640570e-03f, 1.724011999e-03f, 1.725380374e-03f, 1.726745691e-03f, 1.728107951e-03f, 1.729467149e-03f, 1.730823285e-03f,
-1.732176355e-03f, 1.733526358e-03f, 1.734873292e-03f, 1.736217153e-03f, 1.737557941e-03f, 1.738895653e-03f, 1.740230287e-03f, 1.741561841e-03f, 1.742890312e-03f, 1.744215698e-03f,
-1.745537998e-03f, 1.746857210e-03f, 1.748173330e-03f, 1.749486357e-03f, 1.750796290e-03f, 1.752103125e-03f, 1.753406860e-03f, 1.754707495e-03f, 1.756005026e-03f, 1.757299451e-03f,
-1.758590769e-03f, 1.759878977e-03f, 1.761164074e-03f, 1.762446057e-03f, 1.763724924e-03f, 1.765000673e-03f, 1.766273302e-03f, 1.767542810e-03f, 1.768809193e-03f, 1.770072450e-03f,
-1.771332580e-03f, 1.772589580e-03f, 1.773843447e-03f, 1.775094181e-03f, 1.776341778e-03f, 1.777586238e-03f, 1.778827558e-03f, 1.780065736e-03f, 1.781300770e-03f, 1.782532658e-03f,
-1.783761399e-03f, 1.784986989e-03f, 1.786209428e-03f, 1.787428714e-03f, 1.788644843e-03f, 1.789857816e-03f, 1.791067629e-03f, 1.792274280e-03f, 1.793477768e-03f, 1.794678092e-03f,
-1.795875248e-03f, 1.797069235e-03f, 1.798260051e-03f, 1.799447695e-03f, 1.800632164e-03f, 1.801813456e-03f, 1.802991570e-03f, 1.804166504e-03f, 1.805338256e-03f, 1.806506824e-03f,
-1.807672206e-03f, 1.808834400e-03f, 1.809993405e-03f, 1.811149219e-03f, 1.812301839e-03f, 1.813451265e-03f, 1.814597494e-03f, 1.815740524e-03f, 1.816880355e-03f, 1.818016982e-03f,
-1.819150406e-03f, 1.820280625e-03f, 1.821407636e-03f, 1.822531437e-03f, 1.823652028e-03f, 1.824769405e-03f, 1.825883568e-03f, 1.826994515e-03f, 1.828102244e-03f, 1.829206753e-03f,
-1.830308041e-03f, 1.831406105e-03f, 1.832500944e-03f, 1.833592557e-03f, 1.834680941e-03f, 1.835766095e-03f, 1.836848017e-03f, 1.837926706e-03f, 1.839002160e-03f, 1.840074376e-03f,
-1.841143354e-03f, 1.842209092e-03f, 1.843271588e-03f, 1.844330841e-03f, 1.845386848e-03f, 1.846439609e-03f, 1.847489121e-03f, 1.848535383e-03f, 1.849578393e-03f, 1.850618150e-03f,
-1.851654651e-03f, 1.852687897e-03f, 1.853717883e-03f, 1.854744611e-03f, 1.855768076e-03f, 1.856788279e-03f, 1.857805217e-03f, 1.858818889e-03f, 1.859829293e-03f, 1.860836428e-03f,
-1.861840292e-03f, 1.862840883e-03f, 1.863838201e-03f, 1.864832243e-03f, 1.865823007e-03f, 1.866810494e-03f, 1.867794700e-03f, 1.868775624e-03f, 1.869753266e-03f, 1.870727622e-03f,
-1.871698693e-03f, 1.872666475e-03f, 1.873630969e-03f, 1.874592172e-03f, 1.875550082e-03f, 1.876504699e-03f, 1.877456021e-03f, 1.878404047e-03f, 1.879348774e-03f, 1.880290202e-03f,
-1.881228329e-03f, 1.882163153e-03f, 1.883094674e-03f, 1.884022890e-03f, 1.884947799e-03f, 1.885869399e-03f, 1.886787691e-03f, 1.887702671e-03f, 1.888614339e-03f, 1.889522694e-03f,
-1.890427733e-03f, 1.891329456e-03f, 1.892227861e-03f, 1.893122947e-03f, 1.894014712e-03f, 1.894903155e-03f, 1.895788275e-03f, 1.896670071e-03f, 1.897548540e-03f, 1.898423682e-03f,
-1.899295495e-03f, 1.900163979e-03f, 1.901029131e-03f, 1.901890950e-03f, 1.902749436e-03f, 1.903604586e-03f, 1.904456400e-03f, 1.905304876e-03f, 1.906150013e-03f, 1.906991810e-03f,
-1.907830264e-03f, 1.908665376e-03f, 1.909497144e-03f, 1.910325567e-03f, 1.911150642e-03f, 1.911972370e-03f, 1.912790749e-03f, 1.913605777e-03f, 1.914417453e-03f, 1.915225777e-03f,
-1.916030747e-03f, 1.916832361e-03f, 1.917630619e-03f, 1.918425519e-03f, 1.919217061e-03f, 1.920005242e-03f, 1.920790062e-03f, 1.921571520e-03f, 1.922349614e-03f, 1.923124344e-03f,
-1.923895707e-03f, 1.924663704e-03f, 1.925428332e-03f, 1.926189591e-03f, 1.926947480e-03f, 1.927701997e-03f, 1.928453142e-03f, 1.929200912e-03f, 1.929945308e-03f, 1.930686328e-03f,
-1.931423970e-03f, 1.932158235e-03f, 1.932889120e-03f, 1.933616624e-03f, 1.934340748e-03f, 1.935061489e-03f, 1.935778846e-03f, 1.936492818e-03f, 1.937203405e-03f, 1.937910606e-03f,
-1.938614418e-03f, 1.939314842e-03f, 1.940011876e-03f, 1.940705519e-03f, 1.941395770e-03f, 1.942082628e-03f, 1.942766093e-03f, 1.943446162e-03f, 1.944122836e-03f, 1.944796113e-03f,
-1.945465992e-03f, 1.946132473e-03f, 1.946795553e-03f, 1.947455233e-03f, 1.948111512e-03f, 1.948764387e-03f, 1.949413860e-03f, 1.950059927e-03f, 1.950702590e-03f, 1.951341845e-03f,
-1.951977694e-03f, 1.952610135e-03f, 1.953239166e-03f, 1.953864787e-03f, 1.954486998e-03f, 1.955105797e-03f, 1.955721183e-03f, 1.956333155e-03f, 1.956941713e-03f, 1.957546856e-03f,
-1.958148583e-03f, 1.958746893e-03f, 1.959341785e-03f, 1.959933258e-03f, 1.960521312e-03f, 1.961105945e-03f, 1.961687158e-03f, 1.962264948e-03f, 1.962839316e-03f, 1.963410260e-03f,
-1.963977779e-03f, 1.964541873e-03f, 1.965102542e-03f, 1.965659783e-03f, 1.966213597e-03f, 1.966763983e-03f, 1.967310940e-03f, 1.967854467e-03f, 1.968394563e-03f, 1.968931228e-03f,
-1.969464461e-03f, 1.969994261e-03f, 1.970520627e-03f, 1.971043560e-03f, 1.971563057e-03f, 1.972079119e-03f, 1.972591744e-03f, 1.973100932e-03f, 1.973606683e-03f, 1.974108994e-03f,
-1.974607867e-03f, 1.975103300e-03f, 1.975595293e-03f, 1.976083844e-03f, 1.976568953e-03f, 1.977050620e-03f, 1.977528844e-03f, 1.978003625e-03f, 1.978474960e-03f, 1.978942851e-03f,
-1.979407296e-03f, 1.979868295e-03f, 1.980325848e-03f, 1.980779952e-03f, 1.981230609e-03f, 1.981677817e-03f, 1.982121576e-03f, 1.982561885e-03f, 1.982998743e-03f, 1.983432151e-03f,
-1.983862107e-03f, 1.984288611e-03f, 1.984711662e-03f, 1.985131261e-03f, 1.985547405e-03f, 1.985960096e-03f, 1.986369332e-03f, 1.986775112e-03f, 1.987177437e-03f, 1.987576305e-03f,
-1.987971717e-03f, 1.988363671e-03f, 1.988752168e-03f, 1.989137206e-03f, 1.989518785e-03f, 1.989896906e-03f, 1.990271567e-03f, 1.990642767e-03f, 1.991010507e-03f, 1.991374786e-03f,
-1.991735604e-03f, 1.992092960e-03f, 1.992446853e-03f, 1.992797283e-03f, 1.993144251e-03f, 1.993487755e-03f, 1.993827795e-03f, 1.994164370e-03f, 1.994497481e-03f, 1.994827127e-03f,
-1.995153307e-03f, 1.995476021e-03f, 1.995795269e-03f, 1.996111050e-03f, 1.996423364e-03f, 1.996732211e-03f, 1.997037590e-03f, 1.997339501e-03f, 1.997637944e-03f, 1.997932918e-03f,
-1.998224423e-03f, 1.998512459e-03f, 1.998797025e-03f, 1.999078121e-03f, 1.999355747e-03f, 1.999629902e-03f, 1.999900587e-03f, 2.000167800e-03f, 2.000431543e-03f, 2.000691813e-03f,
-2.000948612e-03f, 2.001201938e-03f, 2.001451792e-03f, 2.001698174e-03f, 2.001941082e-03f, 2.002180518e-03f, 2.002416480e-03f, 2.002648969e-03f, 2.002877983e-03f, 2.003103524e-03f,
-2.003325591e-03f, 2.003544183e-03f, 2.003759301e-03f, 2.003970944e-03f, 2.004179112e-03f, 2.004383806e-03f, 2.004585023e-03f, 2.004782766e-03f, 2.004977033e-03f, 2.005167824e-03f,
-2.005355140e-03f, 2.005538979e-03f, 2.005719342e-03f, 2.005896229e-03f, 2.006069640e-03f, 2.006239575e-03f, 2.006406032e-03f, 2.006569014e-03f, 2.006728518e-03f, 2.006884546e-03f,
-2.007037096e-03f, 2.007186170e-03f, 2.007331767e-03f, 2.007473886e-03f, 2.007612528e-03f, 2.007747694e-03f, 2.007879382e-03f, 2.008007592e-03f, 2.008132325e-03f, 2.008253581e-03f,
-2.008371360e-03f, 2.008485661e-03f, 2.008596485e-03f, 2.008703831e-03f, 2.008807700e-03f, 2.008908092e-03f, 2.009005006e-03f, 2.009098443e-03f, 2.009188402e-03f, 2.009274885e-03f,
-2.009357890e-03f, 2.009437418e-03f, 2.009513468e-03f, 2.009586042e-03f, 2.009655139e-03f, 2.009720758e-03f, 2.009782901e-03f, 2.009841567e-03f, 2.009896756e-03f, 2.009948469e-03f,
-2.009996705e-03f, 2.010041465e-03f, 2.010082748e-03f, 2.010120556e-03f, 2.010154887e-03f, 2.010185742e-03f, 2.010213122e-03f, 2.010237026e-03f, 2.010257454e-03f, 2.010274407e-03f,
-2.010287885e-03f, 2.010297888e-03f, 2.010304416e-03f, 2.010307470e-03f, 2.010307049e-03f, 2.010303153e-03f, 2.010295784e-03f, 2.010284940e-03f, 2.010270624e-03f, 2.010252833e-03f,
-2.010231569e-03f, 2.010206833e-03f, 2.010178623e-03f, 2.010146941e-03f, 2.010111787e-03f, 2.010073160e-03f, 2.010031062e-03f, 2.009985493e-03f, 2.009936452e-03f, 2.009883940e-03f,
-2.009827957e-03f, 2.009768504e-03f, 2.009705581e-03f, 2.009639188e-03f, 2.009569325e-03f, 2.009495993e-03f, 2.009419193e-03f, 2.009338923e-03f, 2.009255186e-03f, 2.009167980e-03f,
-2.009077307e-03f, 2.008983167e-03f, 2.008885560e-03f, 2.008784486e-03f, 2.008679947e-03f, 2.008571941e-03f, 2.008460470e-03f, 2.008345534e-03f, 2.008227133e-03f, 2.008105268e-03f,
-2.007979939e-03f, 2.007851147e-03f, 2.007718892e-03f, 2.007583174e-03f, 2.007443994e-03f, 2.007301352e-03f, 2.007155249e-03f, 2.007005685e-03f, 2.006852661e-03f, 2.006696176e-03f,
-2.006536232e-03f, 2.006372829e-03f, 2.006205968e-03f, 2.006035648e-03f, 2.005861871e-03f, 2.005684636e-03f, 2.005503945e-03f, 2.005319798e-03f, 2.005132195e-03f, 2.004941137e-03f,
-2.004746624e-03f, 2.004548657e-03f, 2.004347237e-03f, 2.004142364e-03f, 2.003934038e-03f, 2.003722261e-03f, 2.003507032e-03f, 2.003288352e-03f, 2.003066222e-03f, 2.002840642e-03f,
-2.002611613e-03f, 2.002379136e-03f, 2.002143211e-03f, 2.001903838e-03f, 2.001661019e-03f, 2.001414753e-03f, 2.001165043e-03f, 2.000911887e-03f, 2.000655287e-03f, 2.000395243e-03f,
-2.000131757e-03f, 1.999864828e-03f, 1.999594457e-03f, 1.999320646e-03f, 1.999043394e-03f, 1.998762702e-03f, 1.998478571e-03f, 1.998191002e-03f, 1.997899995e-03f, 1.997605552e-03f,
-1.997307672e-03f, 1.997006356e-03f, 1.996701606e-03f, 1.996393421e-03f, 1.996081803e-03f, 1.995766752e-03f, 1.995448270e-03f, 1.995126356e-03f, 1.994801011e-03f, 1.994472237e-03f,
-1.994140034e-03f, 1.993804402e-03f, 1.993465344e-03f, 1.993122858e-03f, 1.992776947e-03f, 1.992427610e-03f, 1.992074849e-03f, 1.991718665e-03f, 1.991359057e-03f, 1.990996028e-03f,
-1.990629578e-03f, 1.990259708e-03f, 1.989886418e-03f, 1.989509709e-03f, 1.989129583e-03f, 1.988746039e-03f, 1.988359080e-03f, 1.987968705e-03f, 1.987574916e-03f, 1.987177714e-03f,
-1.986777098e-03f, 1.986373071e-03f, 1.985965633e-03f, 1.985554786e-03f, 1.985140529e-03f, 1.984722863e-03f, 1.984301791e-03f, 1.983877312e-03f, 1.983449428e-03f, 1.983018139e-03f,
-1.982583447e-03f, 1.982145352e-03f, 1.981703855e-03f, 1.981258957e-03f, 1.980810660e-03f, 1.980358964e-03f, 1.979903870e-03f, 1.979445379e-03f, 1.978983492e-03f, 1.978518210e-03f,
-1.978049534e-03f, 1.977577466e-03f, 1.977102005e-03f, 1.976623153e-03f, 1.976140912e-03f, 1.975655281e-03f, 1.975166263e-03f, 1.974673857e-03f, 1.974178066e-03f, 1.973678890e-03f,
-1.973176331e-03f, 1.972670388e-03f, 1.972161064e-03f, 1.971648360e-03f, 1.971132276e-03f, 1.970612813e-03f, 1.970089973e-03f, 1.969563757e-03f, 1.969034166e-03f, 1.968501201e-03f,
-1.967964863e-03f, 1.967425153e-03f, 1.966882072e-03f, 1.966335621e-03f, 1.965785803e-03f, 1.965232616e-03f, 1.964676064e-03f, 1.964116147e-03f, 1.963552865e-03f, 1.962986221e-03f,
-1.962416216e-03f, 1.961842850e-03f, 1.961266124e-03f, 1.960686041e-03f, 1.960102601e-03f, 1.959515805e-03f, 1.958925655e-03f, 1.958332151e-03f, 1.957735295e-03f, 1.957135089e-03f,
-1.956531533e-03f, 1.955924628e-03f, 1.955314376e-03f, 1.954700779e-03f, 1.954083836e-03f, 1.953463550e-03f, 1.952839922e-03f, 1.952212953e-03f, 1.951582645e-03f, 1.950948998e-03f,
-1.950312014e-03f, 1.949671694e-03f, 1.949028039e-03f, 1.948381052e-03f, 1.947730732e-03f, 1.947077082e-03f, 1.946420102e-03f, 1.945759795e-03f, 1.945096160e-03f, 1.944429201e-03f,
-1.943758917e-03f, 1.943085311e-03f, 1.942408383e-03f, 1.941728135e-03f, 1.941044569e-03f, 1.940357685e-03f, 1.939667486e-03f, 1.938973972e-03f, 1.938277145e-03f, 1.937577006e-03f,
-1.936873557e-03f, 1.936166799e-03f, 1.935456733e-03f, 1.934743361e-03f, 1.934026684e-03f, 1.933306704e-03f, 1.932583422e-03f, 1.931856840e-03f, 1.931126958e-03f, 1.930393779e-03f,
-1.929657304e-03f, 1.928917534e-03f, 1.928174471e-03f, 1.927428116e-03f, 1.926678471e-03f, 1.925925537e-03f, 1.925169316e-03f, 1.924409809e-03f, 1.923647017e-03f, 1.922880943e-03f,
-1.922111587e-03f, 1.921338951e-03f, 1.920563037e-03f, 1.919783847e-03f, 1.919001381e-03f, 1.918215641e-03f, 1.917426629e-03f, 1.916634346e-03f, 1.915838794e-03f, 1.915039975e-03f,
-1.914237889e-03f, 1.913432539e-03f, 1.912623926e-03f, 1.911812052e-03f, 1.910996918e-03f, 1.910178526e-03f, 1.909356878e-03f, 1.908531974e-03f, 1.907703817e-03f, 1.906872409e-03f,
-1.906037750e-03f, 1.905199843e-03f, 1.904358689e-03f, 1.903514290e-03f, 1.902666647e-03f, 1.901815762e-03f, 1.900961637e-03f, 1.900104273e-03f, 1.899243672e-03f, 1.898379835e-03f,
-1.897512766e-03f, 1.896642464e-03f, 1.895768931e-03f, 1.894892171e-03f, 1.894012183e-03f, 1.893128970e-03f, 1.892242533e-03f, 1.891352875e-03f, 1.890459996e-03f, 1.889563899e-03f,
-1.888664586e-03f, 1.887762057e-03f, 1.886856316e-03f, 1.885947362e-03f, 1.885035200e-03f, 1.884119829e-03f, 1.883201252e-03f, 1.882279470e-03f, 1.881354486e-03f, 1.880426301e-03f,
-1.879494917e-03f, 1.878560335e-03f, 1.877622558e-03f, 1.876681587e-03f, 1.875737424e-03f, 1.874790071e-03f, 1.873839530e-03f, 1.872885802e-03f, 1.871928890e-03f, 1.870968794e-03f,
-1.870005518e-03f, 1.869039062e-03f, 1.868069429e-03f, 1.867096621e-03f, 1.866120639e-03f, 1.865141485e-03f, 1.864159161e-03f, 1.863173669e-03f, 1.862185011e-03f, 1.861193189e-03f,
-1.860198204e-03f, 1.859200059e-03f, 1.858198755e-03f, 1.857194294e-03f, 1.856186679e-03f, 1.855175911e-03f, 1.854161992e-03f, 1.853144923e-03f, 1.852124708e-03f, 1.851101347e-03f,
-1.850074844e-03f, 1.849045199e-03f, 1.848012414e-03f, 1.846976492e-03f, 1.845937435e-03f, 1.844895245e-03f, 1.843849922e-03f, 1.842801471e-03f, 1.841749892e-03f, 1.840695187e-03f,
-1.839637359e-03f, 1.838576409e-03f, 1.837512340e-03f, 1.836445153e-03f, 1.835374851e-03f, 1.834301435e-03f, 1.833224908e-03f, 1.832145271e-03f, 1.831062527e-03f, 1.829976677e-03f,
-1.828887725e-03f, 1.827795670e-03f, 1.826700517e-03f, 1.825602267e-03f, 1.824500922e-03f, 1.823396483e-03f, 1.822288954e-03f, 1.821178336e-03f, 1.820064631e-03f, 1.818947841e-03f,
-1.817827969e-03f, 1.816705016e-03f, 1.815578986e-03f, 1.814449878e-03f, 1.813317697e-03f, 1.812182444e-03f, 1.811044121e-03f, 1.809902730e-03f, 1.808758274e-03f, 1.807610754e-03f,
-1.806460173e-03f, 1.805306533e-03f, 1.804149836e-03f, 1.802990084e-03f, 1.801827279e-03f, 1.800661424e-03f, 1.799492521e-03f, 1.798320572e-03f, 1.797145578e-03f, 1.795967543e-03f,
-1.794786469e-03f, 1.793602357e-03f, 1.792415211e-03f, 1.791225031e-03f, 1.790031821e-03f, 1.788835582e-03f, 1.787636317e-03f, 1.786434029e-03f, 1.785228718e-03f, 1.784020388e-03f,
-1.782809041e-03f, 1.781594680e-03f, 1.780377305e-03f, 1.779156920e-03f, 1.777933527e-03f, 1.776707128e-03f, 1.775477726e-03f, 1.774245322e-03f, 1.773009919e-03f, 1.771771520e-03f,
-1.770530126e-03f, 1.769285740e-03f, 1.768038365e-03f, 1.766788002e-03f, 1.765534654e-03f, 1.764278323e-03f, 1.763019012e-03f, 1.761756723e-03f, 1.760491458e-03f, 1.759223219e-03f,
-1.757952010e-03f, 1.756677832e-03f, 1.755400687e-03f, 1.754120579e-03f, 1.752837509e-03f, 1.751551479e-03f, 1.750262493e-03f, 1.748970553e-03f, 1.747675660e-03f, 1.746377818e-03f,
-1.745077029e-03f, 1.743773295e-03f, 1.742466618e-03f, 1.741157002e-03f, 1.739844448e-03f, 1.738528959e-03f, 1.737210537e-03f, 1.735889185e-03f, 1.734564905e-03f, 1.733237699e-03f,
-1.731907571e-03f, 1.730574523e-03f, 1.729238556e-03f, 1.727899674e-03f, 1.726557879e-03f, 1.725213173e-03f, 1.723865559e-03f, 1.722515040e-03f, 1.721161617e-03f, 1.719805294e-03f,
-1.718446073e-03f, 1.717083956e-03f, 1.715718946e-03f, 1.714351046e-03f, 1.712980258e-03f, 1.711606584e-03f, 1.710230027e-03f, 1.708850589e-03f, 1.707468274e-03f, 1.706083084e-03f,
-1.704695020e-03f, 1.703304087e-03f, 1.701910285e-03f, 1.700513619e-03f, 1.699114090e-03f, 1.697711701e-03f, 1.696306455e-03f, 1.694898354e-03f, 1.693487400e-03f, 1.692073597e-03f,
-1.690656947e-03f, 1.689237453e-03f, 1.687815117e-03f, 1.686389941e-03f, 1.684961929e-03f, 1.683531084e-03f, 1.682097406e-03f, 1.680660900e-03f, 1.679221568e-03f, 1.677779413e-03f,
-1.676334437e-03f, 1.674886643e-03f, 1.673436033e-03f, 1.671982611e-03f, 1.670526378e-03f, 1.669067338e-03f, 1.667605493e-03f, 1.666140846e-03f, 1.664673400e-03f, 1.663203157e-03f,
-1.661730120e-03f, 1.660254291e-03f, 1.658775674e-03f, 1.657294271e-03f, 1.655810085e-03f, 1.654323118e-03f, 1.652833374e-03f, 1.651340854e-03f, 1.649845563e-03f, 1.648347501e-03f,
-1.646846673e-03f, 1.645343081e-03f, 1.643836727e-03f, 1.642327615e-03f, 1.640815747e-03f, 1.639301126e-03f, 1.637783754e-03f, 1.636263636e-03f, 1.634740772e-03f, 1.633215166e-03f,
-1.631686822e-03f, 1.630155741e-03f, 1.628621926e-03f, 1.627085380e-03f, 1.625546107e-03f, 1.624004108e-03f, 1.622459387e-03f, 1.620911947e-03f, 1.619361790e-03f, 1.617808918e-03f,
-1.616253336e-03f, 1.614695046e-03f, 1.613134050e-03f, 1.611570352e-03f, 1.610003954e-03f, 1.608434859e-03f, 1.606863071e-03f, 1.605288591e-03f, 1.603711423e-03f, 1.602131569e-03f,
-1.600549034e-03f, 1.598963818e-03f, 1.597375926e-03f, 1.595785360e-03f, 1.594192123e-03f, 1.592596218e-03f, 1.590997648e-03f, 1.589396416e-03f, 1.587792524e-03f, 1.586185977e-03f,
-1.584576775e-03f, 1.582964923e-03f, 1.581350424e-03f, 1.579733280e-03f, 1.578113494e-03f, 1.576491069e-03f, 1.574866009e-03f, 1.573238315e-03f, 1.571607992e-03f, 1.569975042e-03f,
-1.568339468e-03f, 1.566701273e-03f, 1.565060459e-03f, 1.563417031e-03f, 1.561770991e-03f, 1.560122341e-03f, 1.558471086e-03f, 1.556817227e-03f, 1.555160768e-03f, 1.553501712e-03f,
-1.551840062e-03f, 1.550175821e-03f, 1.548508992e-03f, 1.546839578e-03f, 1.545167582e-03f, 1.543493007e-03f, 1.541815855e-03f, 1.540136132e-03f, 1.538453838e-03f, 1.536768977e-03f,
-1.535081553e-03f, 1.533391568e-03f, 1.531699025e-03f, 1.530003928e-03f, 1.528306279e-03f, 1.526606082e-03f, 1.524903339e-03f, 1.523198054e-03f, 1.521490230e-03f, 1.519779870e-03f,
-1.518066977e-03f, 1.516351554e-03f, 1.514633604e-03f, 1.512913131e-03f, 1.511190137e-03f, 1.509464625e-03f, 1.507736599e-03f, 1.506006062e-03f, 1.504273017e-03f, 1.502537467e-03f,
-1.500799415e-03f, 1.499058865e-03f, 1.497315819e-03f, 1.495570280e-03f, 1.493822253e-03f, 1.492071739e-03f, 1.490318742e-03f, 1.488563266e-03f, 1.486805313e-03f, 1.485044887e-03f,
-1.483281990e-03f, 1.481516626e-03f, 1.479748799e-03f, 1.477978511e-03f, 1.476205765e-03f, 1.474430565e-03f, 1.472652915e-03f, 1.470872816e-03f, 1.469090272e-03f, 1.467305288e-03f,
-1.465517865e-03f, 1.463728007e-03f, 1.461935717e-03f, 1.460140999e-03f, 1.458343855e-03f, 1.456544289e-03f, 1.454742305e-03f, 1.452937905e-03f, 1.451131092e-03f, 1.449321871e-03f,
-1.447510244e-03f, 1.445696214e-03f, 1.443879785e-03f, 1.442060960e-03f, 1.440239742e-03f, 1.438416135e-03f, 1.436590142e-03f, 1.434761766e-03f, 1.432931010e-03f, 1.431097878e-03f,
-1.429262373e-03f, 1.427424498e-03f, 1.425584257e-03f, 1.423741652e-03f, 1.421896688e-03f, 1.420049368e-03f, 1.418199694e-03f, 1.416347671e-03f, 1.414493301e-03f, 1.412636588e-03f,
-1.410777536e-03f, 1.408916146e-03f, 1.407052424e-03f, 1.405186372e-03f, 1.403317994e-03f, 1.401447292e-03f, 1.399574271e-03f, 1.397698933e-03f, 1.395821283e-03f, 1.393941323e-03f,
-1.392059057e-03f, 1.390174487e-03f, 1.388287619e-03f, 1.386398454e-03f, 1.384506997e-03f, 1.382613251e-03f, 1.380717218e-03f, 1.378818903e-03f, 1.376918310e-03f, 1.375015440e-03f,
-1.373110298e-03f, 1.371202888e-03f, 1.369293211e-03f, 1.367381273e-03f, 1.365467077e-03f, 1.363550625e-03f, 1.361631922e-03f, 1.359710970e-03f, 1.357787774e-03f, 1.355862336e-03f,
-1.353934661e-03f, 1.352004751e-03f, 1.350072609e-03f, 1.348138241e-03f, 1.346201648e-03f, 1.344262835e-03f, 1.342321805e-03f, 1.340378561e-03f, 1.338433107e-03f, 1.336485446e-03f,
-1.334535582e-03f, 1.332583518e-03f, 1.330629258e-03f, 1.328672805e-03f, 1.326714164e-03f, 1.324753336e-03f, 1.322790326e-03f, 1.320825138e-03f, 1.318857774e-03f, 1.316888239e-03f,
-1.314916536e-03f, 1.312942668e-03f, 1.310966639e-03f, 1.308988452e-03f, 1.307008112e-03f, 1.305025621e-03f, 1.303040983e-03f, 1.301054202e-03f, 1.299065281e-03f, 1.297074224e-03f,
-1.295081034e-03f, 1.293085715e-03f, 1.291088270e-03f, 1.289088703e-03f, 1.287087018e-03f, 1.285083218e-03f, 1.283077307e-03f, 1.281069288e-03f, 1.279059165e-03f, 1.277046942e-03f,
-1.275032621e-03f, 1.273016207e-03f, 1.270997704e-03f, 1.268977114e-03f, 1.266954442e-03f, 1.264929691e-03f, 1.262902865e-03f, 1.260873967e-03f, 1.258843001e-03f, 1.256809971e-03f,
-1.254774879e-03f, 1.252737731e-03f, 1.250698529e-03f, 1.248657277e-03f, 1.246613979e-03f, 1.244568638e-03f, 1.242521259e-03f, 1.240471844e-03f, 1.238420397e-03f, 1.236366922e-03f,
-1.234311423e-03f, 1.232253904e-03f, 1.230194367e-03f, 1.228132817e-03f, 1.226069257e-03f, 1.224003691e-03f, 1.221936123e-03f, 1.219866557e-03f, 1.217794995e-03f, 1.215721442e-03f,
-1.213645902e-03f, 1.211568377e-03f, 1.209488873e-03f, 1.207407392e-03f, 1.205323938e-03f, 1.203238516e-03f, 1.201151128e-03f, 1.199061778e-03f, 1.196970470e-03f, 1.194877208e-03f,
-1.192781996e-03f, 1.190684837e-03f, 1.188585735e-03f, 1.186484694e-03f, 1.184381717e-03f, 1.182276809e-03f, 1.180169972e-03f, 1.178061212e-03f, 1.175950530e-03f, 1.173837932e-03f,
-1.171723421e-03f, 1.169607000e-03f, 1.167488674e-03f, 1.165368447e-03f, 1.163246321e-03f, 1.161122301e-03f, 1.158996391e-03f, 1.156868594e-03f, 1.154738914e-03f, 1.152607355e-03f,
-1.150473921e-03f, 1.148338615e-03f, 1.146201442e-03f, 1.144062405e-03f, 1.141921507e-03f, 1.139778753e-03f, 1.137634147e-03f, 1.135487692e-03f, 1.133339392e-03f, 1.131189251e-03f,
-1.129037273e-03f, 1.126883462e-03f, 1.124727820e-03f, 1.122570353e-03f, 1.120411065e-03f, 1.118249957e-03f, 1.116087036e-03f, 1.113922304e-03f, 1.111755766e-03f, 1.109587425e-03f,
-1.107417284e-03f, 1.105245349e-03f, 1.103071623e-03f, 1.100896109e-03f, 1.098718812e-03f, 1.096539735e-03f, 1.094358882e-03f, 1.092176257e-03f, 1.089991865e-03f, 1.087805708e-03f,
-1.085617791e-03f, 1.083428117e-03f, 1.081236691e-03f, 1.079043516e-03f, 1.076848597e-03f, 1.074651936e-03f, 1.072453539e-03f, 1.070253408e-03f, 1.068051549e-03f, 1.065847964e-03f,
-1.063642657e-03f, 1.061435633e-03f, 1.059226896e-03f, 1.057016449e-03f, 1.054804296e-03f, 1.052590441e-03f, 1.050374889e-03f, 1.048157642e-03f, 1.045938705e-03f, 1.043718083e-03f,
-1.041495778e-03f, 1.039271794e-03f, 1.037046137e-03f, 1.034818809e-03f, 1.032589814e-03f, 1.030359158e-03f, 1.028126842e-03f, 1.025892872e-03f, 1.023657251e-03f, 1.021419984e-03f,
-1.019181073e-03f, 1.016940524e-03f, 1.014698340e-03f, 1.012454526e-03f, 1.010209084e-03f, 1.007962019e-03f, 1.005713336e-03f, 1.003463037e-03f, 1.001211128e-03f, 9.989576113e-04f,
-9.967024918e-04f, 9.944457731e-04f, 9.921874595e-04f, 9.899275547e-04f, 9.876660629e-04f, 9.854029880e-04f, 9.831383340e-04f, 9.808721049e-04f, 9.786043048e-04f, 9.763349375e-04f,
-9.740640073e-04f, 9.717915179e-04f, 9.695174735e-04f, 9.672418781e-04f, 9.649647357e-04f, 9.626860503e-04f, 9.604058259e-04f, 9.581240666e-04f, 9.558407763e-04f, 9.535559592e-04f,
-9.512696193e-04f, 9.489817605e-04f, 9.466923870e-04f, 9.444015027e-04f, 9.421091118e-04f, 9.398152182e-04f, 9.375198260e-04f, 9.352229392e-04f, 9.329245620e-04f, 9.306246983e-04f,
-9.283233522e-04f, 9.260205278e-04f, 9.237162291e-04f, 9.214104603e-04f, 9.191032252e-04f, 9.167945282e-04f, 9.144843731e-04f, 9.121727641e-04f, 9.098597052e-04f, 9.075452006e-04f,
-9.052292543e-04f, 9.029118704e-04f, 9.005930529e-04f, 8.982728061e-04f, 8.959511338e-04f, 8.936280403e-04f, 8.913035297e-04f, 8.889776059e-04f, 8.866502732e-04f, 8.843215356e-04f,
-8.819913973e-04f, 8.796598623e-04f, 8.773269347e-04f, 8.749926187e-04f, 8.726569183e-04f, 8.703198377e-04f, 8.679813810e-04f, 8.656415523e-04f, 8.633003557e-04f, 8.609577954e-04f,
-8.586138755e-04f, 8.562686000e-04f, 8.539219732e-04f, 8.515739991e-04f, 8.492246819e-04f, 8.468740257e-04f, 8.445220347e-04f, 8.421687130e-04f, 8.398140647e-04f, 8.374580940e-04f,
-8.351008050e-04f, 8.327422019e-04f, 8.303822888e-04f, 8.280210699e-04f, 8.256585493e-04f, 8.232947311e-04f, 8.209296196e-04f, 8.185632189e-04f, 8.161955332e-04f, 8.138265666e-04f,
-8.114563232e-04f, 8.090848074e-04f, 8.067120231e-04f, 8.043379746e-04f, 8.019626661e-04f, 7.995861017e-04f, 7.972082856e-04f, 7.948292220e-04f, 7.924489151e-04f, 7.900673691e-04f,
-7.876845880e-04f, 7.853005762e-04f, 7.829153379e-04f, 7.805288771e-04f, 7.781411981e-04f, 7.757523051e-04f, 7.733622023e-04f, 7.709708939e-04f, 7.685783840e-04f, 7.661846770e-04f,
-7.637897769e-04f, 7.613936880e-04f, 7.589964145e-04f, 7.565979606e-04f, 7.541983306e-04f, 7.517975285e-04f, 7.493955587e-04f, 7.469924254e-04f, 7.445881327e-04f, 7.421826850e-04f,
-7.397760863e-04f, 7.373683410e-04f, 7.349594532e-04f, 7.325494273e-04f, 7.301382673e-04f, 7.277259776e-04f, 7.253125624e-04f, 7.228980259e-04f, 7.204823724e-04f, 7.180656060e-04f,
-7.156477310e-04f, 7.132287517e-04f, 7.108086724e-04f, 7.083874971e-04f, 7.059652303e-04f, 7.035418761e-04f, 7.011174388e-04f, 6.986919226e-04f, 6.962653318e-04f, 6.938376706e-04f,
-6.914089434e-04f, 6.889791543e-04f, 6.865483076e-04f, 6.841164075e-04f, 6.816834585e-04f, 6.792494646e-04f, 6.768144301e-04f, 6.743783594e-04f, 6.719412567e-04f, 6.695031262e-04f,
-6.670639723e-04f, 6.646237992e-04f, 6.621826111e-04f, 6.597404124e-04f, 6.572972074e-04f, 6.548530002e-04f, 6.524077953e-04f, 6.499615968e-04f, 6.475144090e-04f, 6.450662363e-04f,
-6.426170829e-04f, 6.401669531e-04f, 6.377158513e-04f, 6.352637816e-04f, 6.328107483e-04f, 6.303567559e-04f, 6.279018085e-04f, 6.254459105e-04f, 6.229890661e-04f, 6.205312797e-04f,
-6.180725555e-04f, 6.156128979e-04f, 6.131523112e-04f, 6.106907996e-04f, 6.082283675e-04f, 6.057650192e-04f, 6.033007590e-04f, 6.008355911e-04f, 5.983695200e-04f, 5.959025498e-04f,
-5.934346850e-04f, 5.909659299e-04f, 5.884962887e-04f, 5.860257658e-04f, 5.835543654e-04f, 5.810820920e-04f, 5.786089499e-04f, 5.761349433e-04f, 5.736600765e-04f, 5.711843540e-04f,
-5.687077800e-04f, 5.662303589e-04f, 5.637520950e-04f, 5.612729926e-04f, 5.587930560e-04f, 5.563122896e-04f, 5.538306978e-04f, 5.513482848e-04f, 5.488650549e-04f, 5.463810126e-04f,
-5.438961622e-04f, 5.414105080e-04f, 5.389240543e-04f, 5.364368055e-04f, 5.339487659e-04f, 5.314599399e-04f, 5.289703318e-04f, 5.264799460e-04f, 5.239887867e-04f, 5.214968585e-04f,
-5.190041655e-04f, 5.165107122e-04f, 5.140165029e-04f, 5.115215420e-04f, 5.090258338e-04f, 5.065293826e-04f, 5.040321929e-04f, 5.015342690e-04f, 4.990356152e-04f, 4.965362359e-04f,
-4.940361354e-04f, 4.915353182e-04f, 4.890337886e-04f, 4.865315509e-04f, 4.840286095e-04f, 4.815249688e-04f, 4.790206331e-04f, 4.765156068e-04f, 4.740098943e-04f, 4.715035000e-04f,
-4.689964281e-04f, 4.664886832e-04f, 4.639802695e-04f, 4.614711914e-04f, 4.589614533e-04f, 4.564510596e-04f, 4.539400146e-04f, 4.514283228e-04f, 4.489159885e-04f, 4.464030160e-04f,
-4.438894098e-04f, 4.413751743e-04f, 4.388603138e-04f, 4.363448326e-04f, 4.338287353e-04f, 4.313120261e-04f, 4.287947094e-04f, 4.262767897e-04f, 4.237582713e-04f, 4.212391587e-04f,
-4.187194561e-04f, 4.161991679e-04f, 4.136782987e-04f, 4.111568527e-04f, 4.086348343e-04f, 4.061122480e-04f, 4.035890981e-04f, 4.010653891e-04f, 3.985411252e-04f, 3.960163110e-04f,
-3.934909507e-04f, 3.909650489e-04f, 3.884386098e-04f, 3.859116379e-04f, 3.833841376e-04f, 3.808561133e-04f, 3.783275694e-04f, 3.757985102e-04f, 3.732689403e-04f, 3.707388639e-04f,
-3.682082854e-04f, 3.656772094e-04f, 3.631456402e-04f, 3.606135821e-04f, 3.580810396e-04f, 3.555480172e-04f, 3.530145191e-04f, 3.504805498e-04f, 3.479461137e-04f, 3.454112153e-04f,
-3.428758589e-04f, 3.403400489e-04f, 3.378037897e-04f, 3.352670858e-04f, 3.327299416e-04f, 3.301923614e-04f, 3.276543497e-04f, 3.251159109e-04f, 3.225770493e-04f, 3.200377695e-04f,
-3.174980758e-04f, 3.149579727e-04f, 3.124174644e-04f, 3.098765556e-04f, 3.073352505e-04f, 3.047935536e-04f, 3.022514693e-04f, 2.997090020e-04f, 2.971661562e-04f, 2.946229362e-04f,
-2.920793465e-04f, 2.895353915e-04f, 2.869910755e-04f, 2.844464031e-04f, 2.819013786e-04f, 2.793560065e-04f, 2.768102911e-04f, 2.742642369e-04f, 2.717178484e-04f, 2.691711299e-04f,
-2.666240858e-04f, 2.640767206e-04f, 2.615290387e-04f, 2.589810445e-04f, 2.564327424e-04f, 2.538841369e-04f, 2.513352324e-04f, 2.487860332e-04f, 2.462365439e-04f, 2.436867689e-04f,
-2.411367125e-04f, 2.385863792e-04f, 2.360357734e-04f, 2.334848995e-04f, 2.309337620e-04f, 2.283823653e-04f, 2.258307138e-04f, 2.232788120e-04f, 2.207266642e-04f, 2.181742749e-04f,
-2.156216484e-04f, 2.130687894e-04f, 2.105157021e-04f, 2.079623909e-04f, 2.054088604e-04f, 2.028551149e-04f, 2.003011589e-04f, 1.977469968e-04f, 1.951926330e-04f, 1.926380719e-04f,
-1.900833180e-04f, 1.875283757e-04f, 1.849732494e-04f, 1.824179436e-04f, 1.798624626e-04f, 1.773068109e-04f, 1.747509930e-04f, 1.721950132e-04f, 1.696388760e-04f, 1.670825858e-04f,
-1.645261470e-04f, 1.619695641e-04f, 1.594128415e-04f, 1.568559836e-04f, 1.542989948e-04f, 1.517418796e-04f, 1.491846424e-04f, 1.466272877e-04f, 1.440698197e-04f, 1.415122431e-04f,
-1.389545621e-04f, 1.363967813e-04f, 1.338389051e-04f, 1.312809378e-04f, 1.287228839e-04f, 1.261647479e-04f, 1.236065341e-04f, 1.210482470e-04f, 1.184898911e-04f, 1.159314706e-04f,
-1.133729902e-04f, 1.108144541e-04f, 1.082558669e-04f, 1.056972328e-04f, 1.031385565e-04f, 1.005798422e-04f, 9.802109449e-05f, 9.546231769e-05f, 9.290351626e-05f, 9.034469461e-05f,
-8.778585718e-05f, 8.522700838e-05f, 8.266815265e-05f, 8.010929440e-05f, 7.755043806e-05f, 7.499158805e-05f, 7.243274879e-05f, 6.987392471e-05f, 6.731512022e-05f, 6.475633975e-05f,
-6.219758772e-05f, 5.963886856e-05f, 5.708018667e-05f, 5.452154649e-05f, 5.196295244e-05f, 4.940440893e-05f, 4.684592037e-05f, 4.428749121e-05f, 4.172912584e-05f, 3.917082869e-05f,
-3.661260419e-05f, 3.405445673e-05f, 3.149639075e-05f, 2.893841067e-05f, 2.638052088e-05f, 2.382272583e-05f, 2.126502991e-05f, 1.870743755e-05f, 1.614995315e-05f, 1.359258114e-05f,
-1.103532594e-05f, 8.478191940e-06f, 5.921183570e-06f, 3.364305239e-06f, 8.075613591e-07f, -1.749043657e-06f, -4.305505399e-06f, -6.861819455e-06f, -9.417981415e-06f, -1.197398687e-05f,
--1.452983141e-05f, -1.708551062e-05f, -1.964102010e-05f, -2.219635544e-05f, -2.475151223e-05f, -2.730648607e-05f, -2.986127255e-05f, -3.241586726e-05f, -3.497026580e-05f, -3.752446376e-05f,
--4.007845674e-05f, -4.263224034e-05f, -4.518581015e-05f, -4.773916178e-05f, -5.029229081e-05f, -5.284519286e-05f, -5.539786351e-05f, -5.795029838e-05f, -6.050249305e-05f, -6.305444314e-05f,
--6.560614424e-05f, -6.815759196e-05f, -7.070878191e-05f, -7.325970968e-05f, -7.581037088e-05f, -7.836076111e-05f, -8.091087600e-05f, -8.346071113e-05f, -8.601026212e-05f, -8.855952458e-05f,
--9.110849412e-05f, -9.365716634e-05f, -9.620553687e-05f, -9.875360130e-05f, -1.013013553e-04f, -1.038487943e-04f, -1.063959142e-04f, -1.089427104e-04f, -1.114891786e-04f, -1.140353144e-04f,
--1.165811134e-04f, -1.191265712e-04f, -1.216716835e-04f, -1.242164458e-04f, -1.267608539e-04f, -1.293049032e-04f, -1.318485895e-04f, -1.343919084e-04f, -1.369348554e-04f, -1.394774263e-04f,
--1.420196165e-04f, -1.445614219e-04f, -1.471028379e-04f, -1.496438603e-04f, -1.521844845e-04f, -1.547247064e-04f, -1.572645215e-04f, -1.598039254e-04f, -1.623429138e-04f, -1.648814823e-04f,
--1.674196265e-04f, -1.699573421e-04f, -1.724946247e-04f, -1.750314700e-04f, -1.775678736e-04f, -1.801038311e-04f, -1.826393382e-04f, -1.851743905e-04f, -1.877089837e-04f, -1.902431133e-04f,
--1.927767751e-04f, -1.953099647e-04f, -1.978426778e-04f, -2.003749099e-04f, -2.029066568e-04f, -2.054379141e-04f, -2.079686774e-04f, -2.104989424e-04f, -2.130287048e-04f, -2.155579601e-04f,
--2.180867041e-04f, -2.206149325e-04f, -2.231426408e-04f, -2.256698247e-04f, -2.281964800e-04f, -2.307226022e-04f, -2.332481870e-04f, -2.357732301e-04f, -2.382977272e-04f, -2.408216738e-04f,
--2.433450658e-04f, -2.458678987e-04f, -2.483901682e-04f, -2.509118700e-04f, -2.534329998e-04f, -2.559535533e-04f, -2.584735260e-04f, -2.609929137e-04f, -2.635117121e-04f, -2.660299169e-04f,
--2.685475236e-04f, -2.710645281e-04f, -2.735809260e-04f, -2.760967129e-04f, -2.786118846e-04f, -2.811264368e-04f, -2.836403650e-04f, -2.861536651e-04f, -2.886663328e-04f, -2.911783636e-04f,
--2.936897533e-04f, -2.962004976e-04f, -2.987105922e-04f, -3.012200327e-04f, -3.037288150e-04f, -3.062369346e-04f, -3.087443873e-04f, -3.112511688e-04f, -3.137572748e-04f, -3.162627010e-04f,
--3.187674431e-04f, -3.212714968e-04f, -3.237748578e-04f, -3.262775218e-04f, -3.287794846e-04f, -3.312807419e-04f, -3.337812893e-04f, -3.362811226e-04f, -3.387802375e-04f, -3.412786297e-04f,
--3.437762950e-04f, -3.462732290e-04f, -3.487694275e-04f, -3.512648863e-04f, -3.537596010e-04f, -3.562535674e-04f, -3.587467812e-04f, -3.612392381e-04f, -3.637309339e-04f, -3.662218643e-04f,
--3.687120251e-04f, -3.712014119e-04f, -3.736900205e-04f, -3.761778467e-04f, -3.786648862e-04f, -3.811511348e-04f, -3.836365882e-04f, -3.861212421e-04f, -3.886050922e-04f, -3.910881345e-04f,
--3.935703645e-04f, -3.960517781e-04f, -3.985323709e-04f, -4.010121389e-04f, -4.034910776e-04f, -4.059691830e-04f, -4.084464507e-04f, -4.109228765e-04f, -4.133984561e-04f, -4.158731854e-04f,
--4.183470602e-04f, -4.208200760e-04f, -4.232922289e-04f, -4.257635145e-04f, -4.282339286e-04f, -4.307034669e-04f, -4.331721254e-04f, -4.356398996e-04f, -4.381067855e-04f, -4.405727788e-04f,
--4.430378753e-04f, -4.455020708e-04f, -4.479653611e-04f, -4.504277419e-04f, -4.528892091e-04f, -4.553497584e-04f, -4.578093857e-04f, -4.602680868e-04f, -4.627258574e-04f, -4.651826933e-04f,
--4.676385905e-04f, -4.700935446e-04f, -4.725475514e-04f, -4.750006069e-04f, -4.774527067e-04f, -4.799038468e-04f, -4.823540229e-04f, -4.848032308e-04f, -4.872514664e-04f, -4.896987255e-04f,
--4.921450039e-04f, -4.945902975e-04f, -4.970346020e-04f, -4.994779133e-04f, -5.019202272e-04f, -5.043615396e-04f, -5.068018463e-04f, -5.092411431e-04f, -5.116794259e-04f, -5.141166905e-04f,
--5.165529327e-04f, -5.189881485e-04f, -5.214223335e-04f, -5.238554838e-04f, -5.262875952e-04f, -5.287186634e-04f, -5.311486844e-04f, -5.335776540e-04f, -5.360055680e-04f, -5.384324224e-04f,
--5.408582130e-04f, -5.432829357e-04f, -5.457065863e-04f, -5.481291607e-04f, -5.505506547e-04f, -5.529710643e-04f, -5.553903854e-04f, -5.578086137e-04f, -5.602257452e-04f, -5.626417757e-04f,
--5.650567012e-04f, -5.674705176e-04f, -5.698832206e-04f, -5.722948063e-04f, -5.747052705e-04f, -5.771146090e-04f, -5.795228179e-04f, -5.819298930e-04f, -5.843358301e-04f, -5.867406253e-04f,
--5.891442743e-04f, -5.915467732e-04f, -5.939481178e-04f, -5.963483041e-04f, -5.987473279e-04f, -6.011451851e-04f, -6.035418718e-04f, -6.059373838e-04f, -6.083317170e-04f, -6.107248673e-04f,
--6.131168308e-04f, -6.155076033e-04f, -6.178971807e-04f, -6.202855590e-04f, -6.226727342e-04f, -6.250587021e-04f, -6.274434587e-04f, -6.298270000e-04f, -6.322093219e-04f, -6.345904203e-04f,
--6.369702912e-04f, -6.393489306e-04f, -6.417263344e-04f, -6.441024985e-04f, -6.464774190e-04f, -6.488510918e-04f, -6.512235128e-04f, -6.535946781e-04f, -6.559645836e-04f, -6.583332252e-04f,
--6.607005990e-04f, -6.630667009e-04f, -6.654315269e-04f, -6.677950730e-04f, -6.701573351e-04f, -6.725183094e-04f, -6.748779916e-04f, -6.772363779e-04f, -6.795934643e-04f, -6.819492466e-04f,
--6.843037210e-04f, -6.866568835e-04f, -6.890087300e-04f, -6.913592565e-04f, -6.937084591e-04f, -6.960563337e-04f, -6.984028764e-04f, -7.007480833e-04f, -7.030919502e-04f, -7.054344733e-04f,
--7.077756485e-04f, -7.101154720e-04f, -7.124539396e-04f, -7.147910476e-04f, -7.171267918e-04f, -7.194611683e-04f, -7.217941732e-04f, -7.241258025e-04f, -7.264560523e-04f, -7.287849186e-04f,
--7.311123974e-04f, -7.334384848e-04f, -7.357631770e-04f, -7.380864698e-04f, -7.404083594e-04f, -7.427288418e-04f, -7.450479132e-04f, -7.473655696e-04f, -7.496818070e-04f, -7.519966215e-04f,
--7.543100092e-04f, -7.566219663e-04f, -7.589324887e-04f, -7.612415725e-04f, -7.635492139e-04f, -7.658554089e-04f, -7.681601536e-04f, -7.704634442e-04f, -7.727652767e-04f, -7.750656472e-04f,
--7.773645518e-04f, -7.796619866e-04f, -7.819579478e-04f, -7.842524315e-04f, -7.865454337e-04f, -7.888369506e-04f, -7.911269783e-04f, -7.934155129e-04f, -7.957025506e-04f, -7.979880875e-04f,
--8.002721197e-04f, -8.025546433e-04f, -8.048356546e-04f, -8.071151495e-04f, -8.093931244e-04f, -8.116695753e-04f, -8.139444983e-04f, -8.162178896e-04f, -8.184897455e-04f, -8.207600619e-04f,
--8.230288352e-04f, -8.252960614e-04f, -8.275617367e-04f, -8.298258573e-04f, -8.320884194e-04f, -8.343494191e-04f, -8.366088526e-04f, -8.388667162e-04f, -8.411230059e-04f, -8.433777180e-04f,
--8.456308486e-04f, -8.478823940e-04f, -8.501323503e-04f, -8.523807137e-04f, -8.546274805e-04f, -8.568726469e-04f, -8.591162090e-04f, -8.613581631e-04f, -8.635985053e-04f, -8.658372320e-04f,
--8.680743392e-04f, -8.703098233e-04f, -8.725436804e-04f, -8.747759069e-04f, -8.770064988e-04f, -8.792354525e-04f, -8.814627642e-04f, -8.836884302e-04f, -8.859124466e-04f, -8.881348097e-04f,
--8.903555158e-04f, -8.925745611e-04f, -8.947919419e-04f, -8.970076544e-04f, -8.992216949e-04f, -9.014340597e-04f, -9.036447451e-04f, -9.058537472e-04f, -9.080610624e-04f, -9.102666870e-04f,
--9.124706172e-04f, -9.146728493e-04f, -9.168733796e-04f, -9.190722044e-04f, -9.212693200e-04f, -9.234647227e-04f, -9.256584088e-04f, -9.278503745e-04f, -9.300406163e-04f, -9.322291303e-04f,
--9.344159130e-04f, -9.366009606e-04f, -9.387842694e-04f, -9.409658359e-04f, -9.431456562e-04f, -9.453237267e-04f, -9.475000438e-04f, -9.496746037e-04f, -9.518474029e-04f, -9.540184377e-04f,
--9.561877043e-04f, -9.583551993e-04f, -9.605209188e-04f, -9.626848593e-04f, -9.648470171e-04f, -9.670073886e-04f, -9.691659702e-04f, -9.713227582e-04f, -9.734777489e-04f, -9.756309388e-04f,
--9.777823243e-04f, -9.799319016e-04f, -9.820796673e-04f, -9.842256176e-04f, -9.863697490e-04f, -9.885120579e-04f, -9.906525407e-04f, -9.927911937e-04f, -9.949280134e-04f, -9.970629961e-04f,
--9.991961384e-04f, -1.001327437e-03f, -1.003456887e-03f, -1.005584486e-03f, -1.007710231e-03f, -1.009834117e-03f, -1.011956141e-03f, -1.014076299e-03f, -1.016194589e-03f, -1.018311005e-03f,
--1.020425546e-03f, -1.022538206e-03f, -1.024648984e-03f, -1.026757874e-03f, -1.028864875e-03f, -1.030969981e-03f, -1.033073189e-03f, -1.035174497e-03f, -1.037273900e-03f, -1.039371395e-03f,
--1.041466979e-03f, -1.043560647e-03f, -1.045652397e-03f, -1.047742225e-03f, -1.049830127e-03f, -1.051916100e-03f, -1.054000140e-03f, -1.056082245e-03f, -1.058162409e-03f, -1.060240631e-03f,
--1.062316906e-03f, -1.064391230e-03f, -1.066463602e-03f, -1.068534016e-03f, -1.070602470e-03f, -1.072668959e-03f, -1.074733482e-03f, -1.076796033e-03f, -1.078856610e-03f, -1.080915209e-03f,
--1.082971827e-03f, -1.085026461e-03f, -1.087079106e-03f, -1.089129760e-03f, -1.091178418e-03f, -1.093225078e-03f, -1.095269737e-03f, -1.097312390e-03f, -1.099353034e-03f, -1.101391666e-03f,
--1.103428283e-03f, -1.105462880e-03f, -1.107495456e-03f, -1.109526005e-03f, -1.111554526e-03f, -1.113581013e-03f, -1.115605465e-03f, -1.117627878e-03f, -1.119648248e-03f, -1.121666571e-03f,
--1.123682846e-03f, -1.125697067e-03f, -1.127709232e-03f, -1.129719338e-03f, -1.131727380e-03f, -1.133733357e-03f, -1.135737263e-03f, -1.137739097e-03f, -1.139738854e-03f, -1.141736532e-03f,
--1.143732127e-03f, -1.145725635e-03f, -1.147717053e-03f, -1.149706379e-03f, -1.151693608e-03f, -1.153678738e-03f, -1.155661764e-03f, -1.157642684e-03f, -1.159621495e-03f, -1.161598193e-03f,
--1.163572774e-03f, -1.165545236e-03f, -1.167515576e-03f, -1.169483789e-03f, -1.171449872e-03f, -1.173413823e-03f, -1.175375639e-03f, -1.177335315e-03f, -1.179292848e-03f, -1.181248236e-03f,
--1.183201475e-03f, -1.185152561e-03f, -1.187101492e-03f, -1.189048264e-03f, -1.190992874e-03f, -1.192935319e-03f, -1.194875596e-03f, -1.196813701e-03f, -1.198749630e-03f, -1.200683382e-03f,
--1.202614952e-03f, -1.204544338e-03f, -1.206471535e-03f, -1.208396542e-03f, -1.210319354e-03f, -1.212239969e-03f, -1.214158384e-03f, -1.216074594e-03f, -1.217988597e-03f, -1.219900391e-03f,
--1.221809970e-03f, -1.223717333e-03f, -1.225622477e-03f, -1.227525397e-03f, -1.229426092e-03f, -1.231324557e-03f, -1.233220789e-03f, -1.235114786e-03f, -1.237006545e-03f, -1.238896061e-03f,
--1.240783332e-03f, -1.242668356e-03f, -1.244551128e-03f, -1.246431645e-03f, -1.248309905e-03f, -1.250185904e-03f, -1.252059640e-03f, -1.253931108e-03f, -1.255800307e-03f, -1.257667232e-03f,
--1.259531881e-03f, -1.261394251e-03f, -1.263254339e-03f, -1.265112141e-03f, -1.266967654e-03f, -1.268820876e-03f, -1.270671803e-03f, -1.272520432e-03f, -1.274366760e-03f, -1.276210784e-03f,
--1.278052501e-03f, -1.279891908e-03f, -1.281729002e-03f, -1.283563780e-03f, -1.285396239e-03f, -1.287226375e-03f, -1.289054186e-03f, -1.290879669e-03f, -1.292702820e-03f, -1.294523637e-03f,
--1.296342117e-03f, -1.298158256e-03f, -1.299972052e-03f, -1.301783501e-03f, -1.303592601e-03f, -1.305399348e-03f, -1.307203740e-03f, -1.309005774e-03f, -1.310805446e-03f, -1.312602754e-03f,
--1.314397694e-03f, -1.316190264e-03f, -1.317980461e-03f, -1.319768282e-03f, -1.321553723e-03f, -1.323336782e-03f, -1.325117456e-03f, -1.326895742e-03f, -1.328671637e-03f, -1.330445138e-03f,
--1.332216242e-03f, -1.333984947e-03f, -1.335751248e-03f, -1.337515144e-03f, -1.339276631e-03f, -1.341035707e-03f, -1.342792369e-03f, -1.344546613e-03f, -1.346298437e-03f, -1.348047837e-03f,
--1.349794812e-03f, -1.351539358e-03f, -1.353281472e-03f, -1.355021152e-03f, -1.356758394e-03f, -1.358493196e-03f, -1.360225554e-03f, -1.361955467e-03f, -1.363682930e-03f, -1.365407941e-03f,
--1.367130498e-03f, -1.368850598e-03f, -1.370568237e-03f, -1.372283413e-03f, -1.373996123e-03f, -1.375706364e-03f, -1.377414133e-03f, -1.379119428e-03f, -1.380822246e-03f, -1.382522584e-03f,
--1.384220438e-03f, -1.385915808e-03f, -1.387608688e-03f, -1.389299077e-03f, -1.390986973e-03f, -1.392672371e-03f, -1.394355270e-03f, -1.396035667e-03f, -1.397713558e-03f, -1.399388942e-03f,
--1.401061814e-03f, -1.402732174e-03f, -1.404400017e-03f, -1.406065341e-03f, -1.407728144e-03f, -1.409388422e-03f, -1.411046173e-03f, -1.412701395e-03f, -1.414354084e-03f, -1.416004237e-03f,
--1.417651853e-03f, -1.419296927e-03f, -1.420939459e-03f, -1.422579444e-03f, -1.424216881e-03f, -1.425851766e-03f, -1.427484096e-03f, -1.429113870e-03f, -1.430741085e-03f, -1.432365737e-03f,
--1.433987824e-03f, -1.435607344e-03f, -1.437224294e-03f, -1.438838671e-03f, -1.440450472e-03f, -1.442059695e-03f, -1.443666338e-03f, -1.445270397e-03f, -1.446871869e-03f, -1.448470754e-03f,
--1.450067047e-03f, -1.451660746e-03f, -1.453251848e-03f, -1.454840352e-03f, -1.456426253e-03f, -1.458009551e-03f, -1.459590241e-03f, -1.461168322e-03f, -1.462743791e-03f, -1.464316645e-03f,
--1.465886882e-03f, -1.467454499e-03f, -1.469019494e-03f, -1.470581864e-03f, -1.472141606e-03f, -1.473698718e-03f, -1.475253198e-03f, -1.476805042e-03f, -1.478354249e-03f, -1.479900816e-03f,
--1.481444740e-03f, -1.482986018e-03f, -1.484524649e-03f, -1.486060629e-03f, -1.487593957e-03f, -1.489124630e-03f, -1.490652644e-03f, -1.492177998e-03f, -1.493700690e-03f, -1.495220716e-03f,
--1.496738075e-03f, -1.498252763e-03f, -1.499764778e-03f, -1.501274119e-03f, -1.502780781e-03f, -1.504284764e-03f, -1.505786064e-03f, -1.507284679e-03f, -1.508780607e-03f, -1.510273844e-03f,
--1.511764390e-03f, -1.513252241e-03f, -1.514737394e-03f, -1.516219848e-03f, -1.517699600e-03f, -1.519176648e-03f, -1.520650989e-03f, -1.522122620e-03f, -1.523591540e-03f, -1.525057746e-03f,
--1.526521236e-03f, -1.527982007e-03f, -1.529440056e-03f, -1.530895383e-03f, -1.532347983e-03f, -1.533797855e-03f, -1.535244997e-03f, -1.536689405e-03f, -1.538131079e-03f, -1.539570015e-03f,
--1.541006210e-03f, -1.542439664e-03f, -1.543870373e-03f, -1.545298335e-03f, -1.546723548e-03f, -1.548146009e-03f, -1.549565716e-03f, -1.550982667e-03f, -1.552396860e-03f, -1.553808292e-03f,
--1.555216960e-03f, -1.556622864e-03f, -1.558026000e-03f, -1.559426366e-03f, -1.560823959e-03f, -1.562218779e-03f, -1.563610822e-03f, -1.565000085e-03f, -1.566386568e-03f, -1.567770267e-03f,
--1.569151181e-03f, -1.570529306e-03f, -1.571904642e-03f, -1.573277185e-03f, -1.574646933e-03f, -1.576013885e-03f, -1.577378038e-03f, -1.578739390e-03f, -1.580097938e-03f, -1.581453681e-03f,
--1.582806616e-03f, -1.584156740e-03f, -1.585504053e-03f, -1.586848552e-03f, -1.588190234e-03f, -1.589529097e-03f, -1.590865140e-03f, -1.592198359e-03f, -1.593528754e-03f, -1.594856321e-03f,
--1.596181059e-03f, -1.597502965e-03f, -1.598822038e-03f, -1.600138275e-03f, -1.601451674e-03f, -1.602762233e-03f, -1.604069949e-03f, -1.605374822e-03f, -1.606676848e-03f, -1.607976026e-03f,
--1.609272354e-03f, -1.610565828e-03f, -1.611856449e-03f, -1.613144212e-03f, -1.614429117e-03f, -1.615711160e-03f, -1.616990341e-03f, -1.618266657e-03f, -1.619540106e-03f, -1.620810685e-03f,
--1.622078394e-03f, -1.623343229e-03f, -1.624605189e-03f, -1.625864272e-03f, -1.627120476e-03f, -1.628373799e-03f, -1.629624238e-03f, -1.630871792e-03f, -1.632116459e-03f, -1.633358237e-03f,
--1.634597123e-03f, -1.635833116e-03f, -1.637066214e-03f, -1.638296415e-03f, -1.639523717e-03f, -1.640748118e-03f, -1.641969615e-03f, -1.643188208e-03f, -1.644403894e-03f, -1.645616671e-03f,
--1.646826537e-03f, -1.648033490e-03f, -1.649237529e-03f, -1.650438651e-03f, -1.651636854e-03f, -1.652832137e-03f, -1.654024498e-03f, -1.655213935e-03f, -1.656400445e-03f, -1.657584027e-03f,
--1.658764680e-03f, -1.659942401e-03f, -1.661117188e-03f, -1.662289040e-03f, -1.663457954e-03f, -1.664623929e-03f, -1.665786963e-03f, -1.666947054e-03f, -1.668104200e-03f, -1.669258400e-03f,
--1.670409651e-03f, -1.671557952e-03f, -1.672703300e-03f, -1.673845695e-03f, -1.674985134e-03f, -1.676121616e-03f, -1.677255138e-03f, -1.678385699e-03f, -1.679513297e-03f, -1.680637931e-03f,
--1.681759598e-03f, -1.682878296e-03f, -1.683994025e-03f, -1.685106782e-03f, -1.686216565e-03f, -1.687323373e-03f, -1.688427204e-03f, -1.689528056e-03f, -1.690625927e-03f, -1.691720817e-03f,
--1.692812722e-03f, -1.693901641e-03f, -1.694987573e-03f, -1.696070516e-03f, -1.697150468e-03f, -1.698227428e-03f, -1.699301393e-03f, -1.700372362e-03f, -1.701440333e-03f, -1.702505306e-03f,
--1.703567277e-03f, -1.704626245e-03f, -1.705682209e-03f, -1.706735168e-03f, -1.707785118e-03f, -1.708832059e-03f, -1.709875989e-03f, -1.710916907e-03f, -1.711954810e-03f, -1.712989698e-03f,
--1.714021568e-03f, -1.715050419e-03f, -1.716076249e-03f, -1.717099057e-03f, -1.718118841e-03f, -1.719135600e-03f, -1.720149331e-03f, -1.721160034e-03f, -1.722167707e-03f, -1.723172347e-03f,
--1.724173955e-03f, -1.725172527e-03f, -1.726168063e-03f, -1.727160560e-03f, -1.728150019e-03f, -1.729136435e-03f, -1.730119810e-03f, -1.731100139e-03f, -1.732077424e-03f, -1.733051660e-03f,
--1.734022848e-03f, -1.734990986e-03f, -1.735956072e-03f, -1.736918104e-03f, -1.737877082e-03f, -1.738833004e-03f, -1.739785867e-03f, -1.740735672e-03f, -1.741682415e-03f, -1.742626096e-03f,
--1.743566714e-03f, -1.744504267e-03f, -1.745438753e-03f, -1.746370171e-03f, -1.747298519e-03f, -1.748223797e-03f, -1.749146002e-03f, -1.750065133e-03f, -1.750981190e-03f, -1.751894169e-03f,
--1.752804071e-03f, -1.753710893e-03f, -1.754614634e-03f, -1.755515294e-03f, -1.756412869e-03f, -1.757307360e-03f, -1.758198764e-03f, -1.759087081e-03f, -1.759972308e-03f, -1.760854445e-03f,
--1.761733491e-03f, -1.762609443e-03f, -1.763482300e-03f, -1.764352062e-03f, -1.765218727e-03f, -1.766082293e-03f, -1.766942759e-03f, -1.767800125e-03f, -1.768654387e-03f, -1.769505546e-03f,
--1.770353600e-03f, -1.771198548e-03f, -1.772040388e-03f, -1.772879119e-03f, -1.773714740e-03f, -1.774547249e-03f, -1.775376646e-03f, -1.776202929e-03f, -1.777026096e-03f, -1.777846147e-03f,
--1.778663080e-03f, -1.779476895e-03f, -1.780287589e-03f, -1.781095161e-03f, -1.781899611e-03f, -1.782700937e-03f, -1.783499138e-03f, -1.784294212e-03f, -1.785086159e-03f, -1.785874978e-03f,
--1.786660666e-03f, -1.787443223e-03f, -1.788222648e-03f, -1.788998940e-03f, -1.789772097e-03f, -1.790542118e-03f, -1.791309002e-03f, -1.792072749e-03f, -1.792833356e-03f, -1.793590822e-03f,
--1.794345147e-03f, -1.795096329e-03f, -1.795844368e-03f, -1.796589262e-03f, -1.797331009e-03f, -1.798069610e-03f, -1.798805062e-03f, -1.799537365e-03f, -1.800266518e-03f, -1.800992519e-03f,
--1.801715368e-03f, -1.802435063e-03f, -1.803151603e-03f, -1.803864987e-03f, -1.804575215e-03f, -1.805282284e-03f, -1.805986195e-03f, -1.806686946e-03f, -1.807384535e-03f, -1.808078963e-03f,
--1.808770228e-03f, -1.809458328e-03f, -1.810143263e-03f, -1.810825032e-03f, -1.811503634e-03f, -1.812179068e-03f, -1.812851333e-03f, -1.813520428e-03f, -1.814186351e-03f, -1.814849103e-03f,
--1.815508681e-03f, -1.816165085e-03f, -1.816818315e-03f, -1.817468368e-03f, -1.818115245e-03f, -1.818758944e-03f, -1.819399464e-03f, -1.820036804e-03f, -1.820670964e-03f, -1.821301942e-03f,
--1.821929738e-03f, -1.822554350e-03f, -1.823175779e-03f, -1.823794022e-03f, -1.824409079e-03f, -1.825020948e-03f, -1.825629631e-03f, -1.826235124e-03f, -1.826837428e-03f, -1.827436541e-03f,
--1.828032464e-03f, -1.828625194e-03f, -1.829214731e-03f, -1.829801074e-03f, -1.830384222e-03f, -1.830964175e-03f, -1.831540932e-03f, -1.832114491e-03f, -1.832684853e-03f, -1.833252016e-03f,
--1.833815979e-03f, -1.834376741e-03f, -1.834934303e-03f, -1.835488663e-03f, -1.836039819e-03f, -1.836587773e-03f, -1.837132522e-03f, -1.837674066e-03f, -1.838212404e-03f, -1.838747535e-03f,
--1.839279460e-03f, -1.839808176e-03f, -1.840333683e-03f, -1.840855981e-03f, -1.841375069e-03f, -1.841890945e-03f, -1.842403610e-03f, -1.842913062e-03f, -1.843419302e-03f, -1.843922327e-03f,
--1.844422138e-03f, -1.844918734e-03f, -1.845412114e-03f, -1.845902278e-03f, -1.846389224e-03f, -1.846872952e-03f, -1.847353462e-03f, -1.847830753e-03f, -1.848304824e-03f, -1.848775674e-03f,
--1.849243303e-03f, -1.849707711e-03f, -1.850168896e-03f, -1.850626858e-03f, -1.851081596e-03f, -1.851533111e-03f, -1.851981400e-03f, -1.852426464e-03f, -1.852868302e-03f, -1.853306914e-03f,
--1.853742298e-03f, -1.854174454e-03f, -1.854603383e-03f, -1.855029082e-03f, -1.855451552e-03f, -1.855870792e-03f, -1.856286801e-03f, -1.856699579e-03f, -1.857109126e-03f, -1.857515441e-03f,
--1.857918522e-03f, -1.858318371e-03f, -1.858714986e-03f, -1.859108367e-03f, -1.859498513e-03f, -1.859885424e-03f, -1.860269099e-03f, -1.860649538e-03f, -1.861026740e-03f, -1.861400706e-03f,
--1.861771433e-03f, -1.862138923e-03f, -1.862503174e-03f, -1.862864186e-03f, -1.863221958e-03f, -1.863576491e-03f, -1.863927784e-03f, -1.864275835e-03f, -1.864620646e-03f, -1.864962215e-03f,
--1.865300542e-03f, -1.865635627e-03f, -1.865967469e-03f, -1.866296068e-03f, -1.866621423e-03f, -1.866943534e-03f, -1.867262401e-03f, -1.867578023e-03f, -1.867890400e-03f, -1.868199532e-03f,
--1.868505418e-03f, -1.868808058e-03f, -1.869107451e-03f, -1.869403598e-03f, -1.869696497e-03f, -1.869986149e-03f, -1.870272553e-03f, -1.870555709e-03f, -1.870835617e-03f, -1.871112276e-03f,
--1.871385686e-03f, -1.871655846e-03f, -1.871922757e-03f, -1.872186418e-03f, -1.872446829e-03f, -1.872703990e-03f, -1.872957899e-03f, -1.873208558e-03f, -1.873455966e-03f, -1.873700122e-03f,
--1.873941026e-03f, -1.874178679e-03f, -1.874413079e-03f, -1.874644227e-03f, -1.874872122e-03f, -1.875096764e-03f, -1.875318154e-03f, -1.875536290e-03f, -1.875751173e-03f, -1.875962802e-03f,
--1.876171177e-03f, -1.876376298e-03f, -1.876578165e-03f, -1.876776778e-03f, -1.876972136e-03f, -1.877164239e-03f, -1.877353088e-03f, -1.877538682e-03f, -1.877721020e-03f, -1.877900104e-03f,
--1.878075932e-03f, -1.878248504e-03f, -1.878417821e-03f, -1.878583882e-03f, -1.878746687e-03f, -1.878906236e-03f, -1.879062530e-03f, -1.879215567e-03f, -1.879365348e-03f, -1.879511872e-03f,
--1.879655141e-03f, -1.879795152e-03f, -1.879931908e-03f, -1.880065406e-03f, -1.880195648e-03f, -1.880322634e-03f, -1.880446363e-03f, -1.880566835e-03f, -1.880684050e-03f, -1.880798009e-03f,
--1.880908710e-03f, -1.881016155e-03f, -1.881120343e-03f, -1.881221274e-03f, -1.881318949e-03f, -1.881413366e-03f, -1.881504527e-03f, -1.881592431e-03f, -1.881677079e-03f, -1.881758469e-03f,
--1.881836603e-03f, -1.881911481e-03f, -1.881983102e-03f, -1.882051466e-03f, -1.882116574e-03f, -1.882178425e-03f, -1.882237020e-03f, -1.882292359e-03f, -1.882344442e-03f, -1.882393268e-03f,
--1.882438839e-03f, -1.882481154e-03f, -1.882520213e-03f, -1.882556017e-03f, -1.882588564e-03f, -1.882617857e-03f, -1.882643894e-03f, -1.882666676e-03f, -1.882686203e-03f, -1.882702475e-03f,
--1.882715493e-03f, -1.882725256e-03f, -1.882731765e-03f, -1.882735019e-03f, -1.882735019e-03f, -1.882731766e-03f, -1.882725258e-03f, -1.882715498e-03f, -1.882702484e-03f, -1.882686217e-03f,
--1.882666697e-03f, -1.882643924e-03f, -1.882617899e-03f, -1.882588621e-03f, -1.882556092e-03f, -1.882520311e-03f, -1.882481278e-03f, -1.882438994e-03f, -1.882393459e-03f, -1.882344674e-03f,
--1.882292638e-03f, -1.882237351e-03f, -1.882178815e-03f, -1.882117029e-03f, -1.882051993e-03f, -1.881983709e-03f, -1.881912175e-03f, -1.881837393e-03f, -1.881759363e-03f, -1.881678085e-03f,
--1.881593560e-03f, -1.881505787e-03f, -1.881414768e-03f, -1.881320501e-03f, -1.881222989e-03f, -1.881122231e-03f, -1.881018227e-03f, -1.880910978e-03f, -1.880800484e-03f, -1.880686746e-03f,
--1.880569764e-03f, -1.880449538e-03f, -1.880326068e-03f, -1.880199356e-03f, -1.880069402e-03f, -1.879936205e-03f, -1.879799767e-03f, -1.879660087e-03f, -1.879517166e-03f, -1.879371006e-03f,
--1.879221605e-03f, -1.879068964e-03f, -1.878913085e-03f, -1.878753966e-03f, -1.878591610e-03f, -1.878426016e-03f, -1.878257184e-03f, -1.878085116e-03f, -1.877909811e-03f, -1.877731271e-03f,
--1.877549495e-03f, -1.877364484e-03f, -1.877176239e-03f, -1.876984760e-03f, -1.876790047e-03f, -1.876592102e-03f, -1.876390924e-03f, -1.876186515e-03f, -1.875978874e-03f, -1.875768003e-03f,
--1.875553901e-03f, -1.875336570e-03f, -1.875116010e-03f, -1.874892221e-03f, -1.874665204e-03f, -1.874434960e-03f, -1.874201488e-03f, -1.873964791e-03f, -1.873724868e-03f, -1.873481720e-03f,
--1.873235348e-03f, -1.872985751e-03f, -1.872732931e-03f, -1.872476889e-03f, -1.872217625e-03f, -1.871955139e-03f, -1.871689433e-03f, -1.871420506e-03f, -1.871148360e-03f, -1.870872995e-03f,
--1.870594412e-03f, -1.870312612e-03f, -1.870027594e-03f, -1.869739361e-03f, -1.869447912e-03f, -1.869153248e-03f, -1.868855369e-03f, -1.868554278e-03f, -1.868249974e-03f, -1.867942457e-03f,
--1.867631730e-03f, -1.867317791e-03f, -1.867000643e-03f, -1.866680286e-03f, -1.866356720e-03f, -1.866029946e-03f, -1.865699966e-03f, -1.865366779e-03f, -1.865030387e-03f, -1.864690790e-03f,
--1.864347989e-03f, -1.864001985e-03f, -1.863652778e-03f, -1.863300370e-03f, -1.862944761e-03f, -1.862585952e-03f, -1.862223944e-03f, -1.861858737e-03f, -1.861490333e-03f, -1.861118732e-03f,
--1.860743934e-03f, -1.860365942e-03f, -1.859984755e-03f, -1.859600375e-03f, -1.859212802e-03f, -1.858822037e-03f, -1.858428081e-03f, -1.858030936e-03f, -1.857630600e-03f, -1.857227077e-03f,
--1.856820366e-03f, -1.856410468e-03f, -1.855997385e-03f, -1.855581116e-03f, -1.855161664e-03f, -1.854739028e-03f, -1.854313211e-03f, -1.853884212e-03f, -1.853452033e-03f, -1.853016674e-03f,
--1.852578137e-03f, -1.852136423e-03f, -1.851691531e-03f, -1.851243464e-03f, -1.850792223e-03f, -1.850337807e-03f, -1.849880219e-03f, -1.849419459e-03f, -1.848955528e-03f, -1.848488427e-03f,
--1.848018157e-03f, -1.847544720e-03f, -1.847068115e-03f, -1.846588345e-03f, -1.846105409e-03f, -1.845619310e-03f, -1.845130047e-03f, -1.844637623e-03f, -1.844142038e-03f, -1.843643293e-03f,
--1.843141390e-03f, -1.842636328e-03f, -1.842128110e-03f, -1.841616736e-03f, -1.841102208e-03f, -1.840584526e-03f, -1.840063692e-03f, -1.839539706e-03f, -1.839012570e-03f, -1.838482285e-03f,
--1.837948851e-03f, -1.837412271e-03f, -1.836872545e-03f, -1.836329673e-03f, -1.835783659e-03f, -1.835234501e-03f, -1.834682202e-03f, -1.834126763e-03f, -1.833568184e-03f, -1.833006468e-03f,
--1.832441614e-03f, -1.831873625e-03f, -1.831302501e-03f, -1.830728243e-03f, -1.830150854e-03f, -1.829570333e-03f, -1.828986682e-03f, -1.828399902e-03f, -1.827809995e-03f, -1.827216962e-03f,
--1.826620803e-03f, -1.826021520e-03f, -1.825419115e-03f, -1.824813587e-03f, -1.824204940e-03f, -1.823593173e-03f, -1.822978289e-03f, -1.822360288e-03f, -1.821739171e-03f, -1.821114940e-03f,
--1.820487597e-03f, -1.819857141e-03f, -1.819223576e-03f, -1.818586901e-03f, -1.817947118e-03f, -1.817304228e-03f, -1.816658234e-03f, -1.816009135e-03f, -1.815356934e-03f, -1.814701631e-03f,
--1.814043228e-03f, -1.813381726e-03f, -1.812717127e-03f, -1.812049431e-03f, -1.811378641e-03f, -1.810704757e-03f, -1.810027781e-03f, -1.809347714e-03f, -1.808664557e-03f, -1.807978312e-03f,
--1.807288981e-03f, -1.806596564e-03f, -1.805901063e-03f, -1.805202480e-03f, -1.804500815e-03f, -1.803796070e-03f, -1.803088246e-03f, -1.802377346e-03f, -1.801663369e-03f, -1.800946319e-03f,
--1.800226195e-03f, -1.799503000e-03f, -1.798776734e-03f, -1.798047400e-03f, -1.797314999e-03f, -1.796579532e-03f, -1.795841001e-03f, -1.795099406e-03f, -1.794354750e-03f, -1.793607035e-03f,
--1.792856260e-03f, -1.792102429e-03f, -1.791345541e-03f, -1.790585600e-03f, -1.789822606e-03f, -1.789056561e-03f, -1.788287466e-03f, -1.787515323e-03f, -1.786740133e-03f, -1.785961898e-03f,
--1.785180619e-03f, -1.784396299e-03f, -1.783608937e-03f, -1.782818537e-03f, -1.782025099e-03f, -1.781228625e-03f, -1.780429116e-03f, -1.779626575e-03f, -1.778821002e-03f, -1.778012399e-03f,
--1.777200768e-03f, -1.776386110e-03f, -1.775568428e-03f, -1.774747722e-03f, -1.773923993e-03f, -1.773097245e-03f, -1.772267477e-03f, -1.771434693e-03f, -1.770598893e-03f, -1.769760079e-03f,
--1.768918253e-03f, -1.768073416e-03f, -1.767225570e-03f, -1.766374716e-03f, -1.765520857e-03f, -1.764663994e-03f, -1.763804128e-03f, -1.762941261e-03f, -1.762075395e-03f, -1.761206531e-03f,
--1.760334672e-03f, -1.759459818e-03f, -1.758581972e-03f, -1.757701135e-03f, -1.756817309e-03f, -1.755930495e-03f, -1.755040696e-03f, -1.754147912e-03f, -1.753252147e-03f, -1.752353400e-03f,
--1.751451675e-03f, -1.750546972e-03f, -1.749639294e-03f, -1.748728642e-03f, -1.747815018e-03f, -1.746898424e-03f, -1.745978862e-03f, -1.745056332e-03f, -1.744130838e-03f, -1.743202381e-03f,
--1.742270961e-03f, -1.741336583e-03f, -1.740399246e-03f, -1.739458953e-03f, -1.738515706e-03f, -1.737569507e-03f, -1.736620356e-03f, -1.735668257e-03f, -1.734713210e-03f, -1.733755218e-03f,
--1.732794283e-03f, -1.731830406e-03f, -1.730863589e-03f, -1.729893834e-03f, -1.728921143e-03f, -1.727945518e-03f, -1.726966960e-03f, -1.725985471e-03f, -1.725001054e-03f, -1.724013710e-03f,
--1.723023440e-03f, -1.722030248e-03f, -1.721034134e-03f, -1.720035101e-03f, -1.719033150e-03f, -1.718028284e-03f, -1.717020504e-03f, -1.716009812e-03f, -1.714996210e-03f, -1.713979700e-03f,
--1.712960284e-03f, -1.711937964e-03f, -1.710912742e-03f, -1.709884619e-03f, -1.708853598e-03f, -1.707819680e-03f, -1.706782868e-03f, -1.705743164e-03f, -1.704700569e-03f, -1.703655085e-03f,
--1.702606715e-03f, -1.701555460e-03f, -1.700501322e-03f, -1.699444303e-03f, -1.698384406e-03f, -1.697321632e-03f, -1.696255983e-03f, -1.695187462e-03f, -1.694116070e-03f, -1.693041809e-03f,
--1.691964681e-03f, -1.690884689e-03f, -1.689801834e-03f, -1.688716118e-03f, -1.687627544e-03f, -1.686536113e-03f, -1.685441828e-03f, -1.684344690e-03f, -1.683244702e-03f, -1.682141865e-03f,
--1.681036183e-03f, -1.679927655e-03f, -1.678816286e-03f, -1.677702077e-03f, -1.676585029e-03f, -1.675465146e-03f, -1.674342429e-03f, -1.673216880e-03f, -1.672088502e-03f, -1.670957296e-03f,
--1.669823265e-03f, -1.668686410e-03f, -1.667546734e-03f, -1.666404240e-03f, -1.665258928e-03f, -1.664110801e-03f, -1.662959862e-03f, -1.661806113e-03f, -1.660649555e-03f, -1.659490191e-03f,
--1.658328023e-03f, -1.657163053e-03f, -1.655995283e-03f, -1.654824716e-03f, -1.653651353e-03f, -1.652475198e-03f, -1.651296251e-03f, -1.650114516e-03f, -1.648929994e-03f, -1.647742687e-03f,
--1.646552599e-03f, -1.645359730e-03f, -1.644164084e-03f, -1.642965662e-03f, -1.641764467e-03f, -1.640560501e-03f, -1.639353766e-03f, -1.638144264e-03f, -1.636931998e-03f, -1.635716970e-03f,
--1.634499182e-03f, -1.633278636e-03f, -1.632055336e-03f, -1.630829282e-03f, -1.629600477e-03f, -1.628368924e-03f, -1.627134624e-03f, -1.625897581e-03f, -1.624657795e-03f, -1.623415271e-03f,
--1.622170009e-03f, -1.620922013e-03f, -1.619671284e-03f, -1.618417825e-03f, -1.617161638e-03f, -1.615902726e-03f, -1.614641090e-03f, -1.613376734e-03f, -1.612109659e-03f, -1.610839868e-03f,
--1.609567363e-03f, -1.608292147e-03f, -1.607014221e-03f, -1.605733589e-03f, -1.604450252e-03f, -1.603164214e-03f, -1.601875475e-03f, -1.600584040e-03f, -1.599289909e-03f, -1.597993086e-03f,
--1.596693573e-03f, -1.595391372e-03f, -1.594086485e-03f, -1.592778916e-03f, -1.591468666e-03f, -1.590155738e-03f, -1.588840135e-03f, -1.587521858e-03f, -1.586200910e-03f, -1.584877294e-03f,
--1.583551012e-03f, -1.582222066e-03f, -1.580890459e-03f, -1.579556194e-03f, -1.578219272e-03f, -1.576879697e-03f, -1.575537470e-03f, -1.574192595e-03f, -1.572845073e-03f, -1.571494907e-03f,
--1.570142100e-03f, -1.568786654e-03f, -1.567428572e-03f, -1.566067856e-03f, -1.564704508e-03f, -1.563338531e-03f, -1.561969928e-03f, -1.560598702e-03f, -1.559224853e-03f, -1.557848386e-03f,
--1.556469302e-03f, -1.555087605e-03f, -1.553703296e-03f, -1.552316379e-03f, -1.550926855e-03f, -1.549534728e-03f, -1.548140000e-03f, -1.546742673e-03f, -1.545342750e-03f, -1.543940234e-03f,
--1.542535126e-03f, -1.541127431e-03f, -1.539717150e-03f, -1.538304285e-03f, -1.536888840e-03f, -1.535470818e-03f, -1.534050219e-03f, -1.532627048e-03f, -1.531201307e-03f, -1.529772998e-03f,
--1.528342125e-03f, -1.526908689e-03f, -1.525472693e-03f, -1.524034140e-03f, -1.522593033e-03f, -1.521149374e-03f, -1.519703165e-03f, -1.518254410e-03f, -1.516803111e-03f, -1.515349271e-03f,
--1.513892893e-03f, -1.512433978e-03f, -1.510972530e-03f, -1.509508551e-03f, -1.508042045e-03f, -1.506573013e-03f, -1.505101459e-03f, -1.503627384e-03f, -1.502150793e-03f, -1.500671687e-03f,
--1.499190069e-03f, -1.497705942e-03f, -1.496219308e-03f, -1.494730171e-03f, -1.493238533e-03f, -1.491744396e-03f, -1.490247764e-03f, -1.488748639e-03f, -1.487247024e-03f, -1.485742921e-03f,
--1.484236334e-03f, -1.482727265e-03f, -1.481215716e-03f, -1.479701692e-03f, -1.478185193e-03f, -1.476666224e-03f, -1.475144787e-03f, -1.473620884e-03f, -1.472094518e-03f, -1.470565693e-03f,
--1.469034411e-03f, -1.467500674e-03f, -1.465964486e-03f, -1.464425849e-03f, -1.462884766e-03f, -1.461341241e-03f, -1.459795274e-03f, -1.458246871e-03f, -1.456696033e-03f, -1.455142762e-03f,
--1.453587063e-03f, -1.452028938e-03f, -1.450468389e-03f, -1.448905419e-03f, -1.447340032e-03f, -1.445772230e-03f, -1.444202016e-03f, -1.442629393e-03f, -1.441054363e-03f, -1.439476930e-03f,
--1.437897096e-03f, -1.436314865e-03f, -1.434730238e-03f, -1.433143220e-03f, -1.431553812e-03f, -1.429962018e-03f, -1.428367841e-03f, -1.426771283e-03f, -1.425172347e-03f, -1.423571037e-03f,
--1.421967355e-03f, -1.420361304e-03f, -1.418752887e-03f, -1.417142107e-03f, -1.415528967e-03f, -1.413913470e-03f, -1.412295618e-03f, -1.410675414e-03f, -1.409052863e-03f, -1.407427965e-03f,
--1.405800725e-03f, -1.404171146e-03f, -1.402539229e-03f, -1.400904979e-03f, -1.399268398e-03f, -1.397629490e-03f, -1.395988256e-03f, -1.394344700e-03f, -1.392698826e-03f, -1.391050635e-03f,
--1.389400131e-03f, -1.387747318e-03f, -1.386092197e-03f, -1.384434772e-03f, -1.382775046e-03f, -1.381113022e-03f, -1.379448703e-03f, -1.377782092e-03f, -1.376113192e-03f, -1.374442006e-03f,
--1.372768536e-03f, -1.371092787e-03f, -1.369414761e-03f, -1.367734460e-03f, -1.366051889e-03f, -1.364367050e-03f, -1.362679946e-03f, -1.360990580e-03f, -1.359298955e-03f, -1.357605075e-03f,
--1.355908942e-03f, -1.354210559e-03f, -1.352509930e-03f, -1.350807057e-03f, -1.349101944e-03f, -1.347394593e-03f, -1.345685009e-03f, -1.343973193e-03f, -1.342259148e-03f, -1.340542879e-03f,
--1.338824388e-03f, -1.337103678e-03f, -1.335380752e-03f, -1.333655613e-03f, -1.331928265e-03f, -1.330198711e-03f, -1.328466953e-03f, -1.326732995e-03f, -1.324996840e-03f, -1.323258490e-03f,
--1.321517950e-03f, -1.319775223e-03f, -1.318030310e-03f, -1.316283216e-03f, -1.314533944e-03f, -1.312782497e-03f, -1.311028878e-03f, -1.309273089e-03f, -1.307515135e-03f, -1.305755019e-03f,
--1.303992743e-03f, -1.302228311e-03f, -1.300461726e-03f, -1.298692990e-03f, -1.296922109e-03f, -1.295149083e-03f, -1.293373917e-03f, -1.291596615e-03f, -1.289817178e-03f, -1.288035610e-03f,
--1.286251915e-03f, -1.284466095e-03f, -1.282678154e-03f, -1.280888095e-03f, -1.279095922e-03f, -1.277301637e-03f, -1.275505243e-03f, -1.273706745e-03f, -1.271906144e-03f, -1.270103445e-03f,
--1.268298651e-03f, -1.266491764e-03f, -1.264682788e-03f, -1.262871727e-03f, -1.261058583e-03f, -1.259243360e-03f, -1.257426061e-03f, -1.255606689e-03f, -1.253785248e-03f, -1.251961741e-03f,
--1.250136171e-03f, -1.248308541e-03f, -1.246478855e-03f, -1.244647115e-03f, -1.242813326e-03f, -1.240977490e-03f, -1.239139611e-03f, -1.237299692e-03f, -1.235457737e-03f, -1.233613748e-03f,
--1.231767729e-03f, -1.229919683e-03f, -1.228069614e-03f, -1.226217525e-03f, -1.224363418e-03f, -1.222507299e-03f, -1.220649169e-03f, -1.218789032e-03f, -1.216926891e-03f, -1.215062751e-03f,
--1.213196613e-03f, -1.211328482e-03f, -1.209458361e-03f, -1.207586253e-03f, -1.205712161e-03f, -1.203836089e-03f, -1.201958041e-03f, -1.200078019e-03f, -1.198196026e-03f, -1.196312067e-03f,
--1.194426145e-03f, -1.192538263e-03f, -1.190648424e-03f, -1.188756631e-03f, -1.186862889e-03f, -1.184967201e-03f, -1.183069569e-03f, -1.181169997e-03f, -1.179268489e-03f, -1.177365048e-03f,
--1.175459678e-03f, -1.173552381e-03f, -1.171643162e-03f, -1.169732023e-03f, -1.167818969e-03f, -1.165904002e-03f, -1.163987126e-03f, -1.162068344e-03f, -1.160147659e-03f, -1.158225076e-03f,
--1.156300598e-03f, -1.154374228e-03f, -1.152445969e-03f, -1.150515825e-03f, -1.148583799e-03f, -1.146649895e-03f, -1.144714116e-03f, -1.142776466e-03f, -1.140836948e-03f, -1.138895566e-03f,
--1.136952322e-03f, -1.135007222e-03f, -1.133060267e-03f, -1.131111461e-03f, -1.129160809e-03f, -1.127208313e-03f, -1.125253976e-03f, -1.123297803e-03f, -1.121339797e-03f, -1.119379961e-03f,
--1.117418299e-03f, -1.115454814e-03f, -1.113489510e-03f, -1.111522391e-03f, -1.109553459e-03f, -1.107582718e-03f, -1.105610172e-03f, -1.103635824e-03f, -1.101659679e-03f, -1.099681738e-03f,
--1.097702007e-03f, -1.095720487e-03f, -1.093737184e-03f, -1.091752100e-03f, -1.089765239e-03f, -1.087776604e-03f, -1.085786200e-03f, -1.083794029e-03f, -1.081800095e-03f, -1.079804402e-03f,
--1.077806952e-03f, -1.075807751e-03f, -1.073806801e-03f, -1.071804106e-03f, -1.069799669e-03f, -1.067793494e-03f, -1.065785585e-03f, -1.063775944e-03f, -1.061764577e-03f, -1.059751485e-03f,
--1.057736674e-03f, -1.055720145e-03f, -1.053701904e-03f, -1.051681954e-03f, -1.049660297e-03f, -1.047636938e-03f, -1.045611881e-03f, -1.043585128e-03f, -1.041556684e-03f, -1.039526552e-03f,
--1.037494735e-03f, -1.035461238e-03f, -1.033426064e-03f, -1.031389217e-03f, -1.029350699e-03f, -1.027310516e-03f, -1.025268669e-03f, -1.023225164e-03f, -1.021180003e-03f, -1.019133191e-03f,
--1.017084730e-03f, -1.015034625e-03f, -1.012982879e-03f, -1.010929496e-03f, -1.008874480e-03f, -1.006817833e-03f, -1.004759560e-03f, -1.002699665e-03f, -1.000638150e-03f, -9.985750201e-04f,
--9.965102785e-04f, -9.944439289e-04f, -9.923759749e-04f, -9.903064202e-04f, -9.882352685e-04f, -9.861625235e-04f, -9.840881887e-04f, -9.820122679e-04f, -9.799347647e-04f, -9.778556829e-04f,
--9.757750261e-04f, -9.736927980e-04f, -9.716090023e-04f, -9.695236426e-04f, -9.674367227e-04f, -9.653482463e-04f, -9.632582170e-04f, -9.611666385e-04f, -9.590735146e-04f, -9.569788490e-04f,
--9.548826453e-04f, -9.527849073e-04f, -9.506856386e-04f, -9.485848431e-04f, -9.464825244e-04f, -9.443786861e-04f, -9.422733322e-04f, -9.401664662e-04f, -9.380580919e-04f, -9.359482130e-04f,
--9.338368333e-04f, -9.317239564e-04f, -9.296095862e-04f, -9.274937263e-04f, -9.253763806e-04f, -9.232575526e-04f, -9.211372463e-04f, -9.190154653e-04f, -9.168922133e-04f, -9.147674942e-04f,
--9.126413117e-04f, -9.105136695e-04f, -9.083845714e-04f, -9.062540212e-04f, -9.041220226e-04f, -9.019885794e-04f, -8.998536953e-04f, -8.977173742e-04f, -8.955796197e-04f, -8.934404358e-04f,
--8.912998261e-04f, -8.891577944e-04f, -8.870143445e-04f, -8.848694802e-04f, -8.827232053e-04f, -8.805755236e-04f, -8.784264388e-04f, -8.762759547e-04f, -8.741240752e-04f, -8.719708041e-04f,
--8.698161451e-04f, -8.676601020e-04f, -8.655026787e-04f, -8.633438789e-04f, -8.611837064e-04f, -8.590221652e-04f, -8.568592589e-04f, -8.546949914e-04f, -8.525293665e-04f, -8.503623880e-04f,
--8.481940598e-04f, -8.460243857e-04f, -8.438533694e-04f, -8.416810149e-04f, -8.395073259e-04f, -8.373323063e-04f, -8.351559600e-04f, -8.329782906e-04f, -8.307993022e-04f, -8.286189985e-04f,
--8.264373833e-04f, -8.242544606e-04f, -8.220702341e-04f, -8.198847077e-04f, -8.176978853e-04f, -8.155097707e-04f, -8.133203678e-04f, -8.111296803e-04f, -8.089377123e-04f, -8.067444674e-04f,
--8.045499497e-04f, -8.023541629e-04f, -8.001571110e-04f, -7.979587977e-04f, -7.957592270e-04f, -7.935584027e-04f, -7.913563288e-04f, -7.891530090e-04f, -7.869484473e-04f, -7.847426475e-04f,
--7.825356135e-04f, -7.803273492e-04f, -7.781178586e-04f, -7.759071454e-04f, -7.736952135e-04f, -7.714820670e-04f, -7.692677095e-04f, -7.670521451e-04f, -7.648353777e-04f, -7.626174111e-04f,
--7.603982492e-04f, -7.581778959e-04f, -7.559563552e-04f, -7.537336310e-04f, -7.515097271e-04f, -7.492846475e-04f, -7.470583960e-04f, -7.448309766e-04f, -7.426023933e-04f, -7.403726498e-04f,
--7.381417502e-04f, -7.359096984e-04f, -7.336764982e-04f, -7.314421537e-04f, -7.292066686e-04f, -7.269700471e-04f, -7.247322929e-04f, -7.224934100e-04f, -7.202534024e-04f, -7.180122740e-04f,
--7.157700286e-04f, -7.135266704e-04f, -7.112822031e-04f, -7.090366308e-04f, -7.067899573e-04f, -7.045421867e-04f, -7.022933228e-04f, -7.000433697e-04f, -6.977923312e-04f, -6.955402114e-04f,
--6.932870141e-04f, -6.910327433e-04f, -6.887774030e-04f, -6.865209972e-04f, -6.842635298e-04f, -6.820050047e-04f, -6.797454259e-04f, -6.774847974e-04f, -6.752231232e-04f, -6.729604072e-04f,
--6.706966534e-04f, -6.684318657e-04f, -6.661660481e-04f, -6.638992047e-04f, -6.616313393e-04f, -6.593624560e-04f, -6.570925587e-04f, -6.548216515e-04f, -6.525497382e-04f, -6.502768229e-04f,
--6.480029096e-04f, -6.457280022e-04f, -6.434521047e-04f, -6.411752212e-04f, -6.388973555e-04f, -6.366185118e-04f, -6.343386940e-04f, -6.320579060e-04f, -6.297761520e-04f, -6.274934358e-04f,
--6.252097615e-04f, -6.229251331e-04f, -6.206395546e-04f, -6.183530300e-04f, -6.160655633e-04f, -6.137771584e-04f, -6.114878195e-04f, -6.091975505e-04f, -6.069063554e-04f, -6.046142383e-04f,
--6.023212031e-04f, -6.000272538e-04f, -5.977323946e-04f, -5.954366293e-04f, -5.931399621e-04f, -5.908423969e-04f, -5.885439378e-04f, -5.862445887e-04f, -5.839443537e-04f, -5.816432369e-04f,
--5.793412422e-04f, -5.770383737e-04f, -5.747346355e-04f, -5.724300314e-04f, -5.701245656e-04f, -5.678182422e-04f, -5.655110651e-04f, -5.632030383e-04f, -5.608941660e-04f, -5.585844521e-04f,
--5.562739007e-04f, -5.539625158e-04f, -5.516503015e-04f, -5.493372618e-04f, -5.470234008e-04f, -5.447087224e-04f, -5.423932308e-04f, -5.400769300e-04f, -5.377598241e-04f, -5.354419170e-04f,
--5.331232129e-04f, -5.308037158e-04f, -5.284834297e-04f, -5.261623587e-04f, -5.238405069e-04f, -5.215178783e-04f, -5.191944770e-04f, -5.168703070e-04f, -5.145453724e-04f, -5.122196773e-04f,
--5.098932256e-04f, -5.075660216e-04f, -5.052380692e-04f, -5.029093725e-04f, -5.005799355e-04f, -4.982497624e-04f, -4.959188573e-04f, -4.935872241e-04f, -4.912548669e-04f, -4.889217899e-04f,
--4.865879970e-04f, -4.842534925e-04f, -4.819182802e-04f, -4.795823644e-04f, -4.772457491e-04f, -4.749084384e-04f, -4.725704363e-04f, -4.702317469e-04f, -4.678923744e-04f, -4.655523227e-04f,
--4.632115960e-04f, -4.608701984e-04f, -4.585281339e-04f, -4.561854066e-04f, -4.538420207e-04f, -4.514979802e-04f, -4.491532891e-04f, -4.468079516e-04f, -4.444619718e-04f, -4.421153538e-04f,
--4.397681016e-04f, -4.374202193e-04f, -4.350717111e-04f, -4.327225810e-04f, -4.303728331e-04f, -4.280224715e-04f, -4.256715004e-04f, -4.233199238e-04f, -4.209677458e-04f, -4.186149705e-04f,
--4.162616020e-04f, -4.139076444e-04f, -4.115531018e-04f, -4.091979784e-04f, -4.068422781e-04f, -4.044860052e-04f, -4.021291637e-04f, -3.997717578e-04f, -3.974137915e-04f, -3.950552689e-04f,
--3.926961942e-04f, -3.903365714e-04f, -3.879764047e-04f, -3.856156982e-04f, -3.832544560e-04f, -3.808926822e-04f, -3.785303809e-04f, -3.761675562e-04f, -3.738042122e-04f, -3.714403531e-04f,
--3.690759830e-04f, -3.667111060e-04f, -3.643457261e-04f, -3.619798476e-04f, -3.596134745e-04f, -3.572466109e-04f, -3.548792611e-04f, -3.525114290e-04f, -3.501431188e-04f, -3.477743346e-04f,
--3.454050806e-04f, -3.430353608e-04f, -3.406651795e-04f, -3.382945406e-04f, -3.359234484e-04f, -3.335519069e-04f, -3.311799203e-04f, -3.288074928e-04f, -3.264346283e-04f, -3.240613312e-04f,
--3.216876054e-04f, -3.193134551e-04f, -3.169388844e-04f, -3.145638975e-04f, -3.121884986e-04f, -3.098126916e-04f, -3.074364808e-04f, -3.050598703e-04f, -3.026828641e-04f, -3.003054666e-04f,
--2.979276817e-04f, -2.955495136e-04f, -2.931709664e-04f, -2.907920443e-04f, -2.884127514e-04f, -2.860330919e-04f, -2.836530698e-04f, -2.812726893e-04f, -2.788919546e-04f, -2.765108697e-04f,
--2.741294389e-04f, -2.717476661e-04f, -2.693655557e-04f, -2.669831117e-04f, -2.646003382e-04f, -2.622172394e-04f, -2.598338195e-04f, -2.574500825e-04f, -2.550660326e-04f, -2.526816739e-04f,
--2.502970106e-04f, -2.479120469e-04f, -2.455267868e-04f, -2.431412345e-04f, -2.407553941e-04f, -2.383692698e-04f, -2.359828657e-04f, -2.335961860e-04f, -2.312092347e-04f, -2.288220161e-04f,
--2.264345343e-04f, -2.240467934e-04f, -2.216587975e-04f, -2.192705509e-04f, -2.168820576e-04f, -2.144933218e-04f, -2.121043476e-04f, -2.097151392e-04f, -2.073257007e-04f, -2.049360363e-04f,
--2.025461501e-04f, -2.001560462e-04f, -1.977657288e-04f, -1.953752020e-04f, -1.929844700e-04f, -1.905935369e-04f, -1.882024069e-04f, -1.858110841e-04f, -1.834195726e-04f, -1.810278766e-04f,
--1.786360003e-04f, -1.762439478e-04f, -1.738517231e-04f, -1.714593306e-04f, -1.690667743e-04f, -1.666740583e-04f, -1.642811868e-04f, -1.618881640e-04f, -1.594949940e-04f, -1.571016809e-04f,
--1.547082289e-04f, -1.523146422e-04f, -1.499209248e-04f, -1.475270809e-04f, -1.451331147e-04f, -1.427390303e-04f, -1.403448319e-04f, -1.379505235e-04f, -1.355561094e-04f, -1.331615937e-04f,
--1.307669805e-04f, -1.283722740e-04f, -1.259774784e-04f, -1.235825976e-04f, -1.211876360e-04f, -1.187925977e-04f, -1.163974867e-04f, -1.140023073e-04f, -1.116070636e-04f, -1.092117597e-04f,
--1.068163998e-04f, -1.044209880e-04f, -1.020255284e-04f, -9.963002529e-05f, -9.723448270e-05f, -9.483890479e-05f, -9.244329572e-05f, -9.004765963e-05f, -8.765200065e-05f, -8.525632293e-05f,
--8.286063061e-05f, -8.046492784e-05f, -7.806921875e-05f, -7.567350749e-05f, -7.327779819e-05f, -7.088209501e-05f, -6.848640207e-05f, -6.609072352e-05f, -6.369506351e-05f, -6.129942616e-05f,
--5.890381562e-05f, -5.650823603e-05f, -5.411269153e-05f, -5.171718625e-05f, -4.932172434e-05f, -4.692630993e-05f, -4.453094717e-05f, -4.213564018e-05f, -3.974039311e-05f, -3.734521009e-05f,
--3.495009526e-05f, -3.255505275e-05f, -3.016008671e-05f, -2.776520126e-05f, -2.537040055e-05f, -2.297568870e-05f, -2.058106985e-05f, -1.818654814e-05f, -1.579212769e-05f, -1.339781265e-05f,
--1.100360715e-05f, -8.609515306e-06f, -6.215541265e-06f, -3.821689154e-06f, -1.427963105e-06f, 9.656327529e-07f, 3.359094288e-06f, 5.752417372e-06f, 8.145597874e-06f, 1.053863167e-05f,
-1.293151462e-05f, 1.532424261e-05f, 1.771681151e-05f, 2.010921718e-05f, 2.250145551e-05f, 2.489352237e-05f, 2.728541363e-05f, 2.967712517e-05f, 3.206865286e-05f, 3.445999258e-05f,
-3.685114022e-05f, 3.924209163e-05f, 4.163284271e-05f, 4.402338933e-05f, 4.641372737e-05f, 4.880385271e-05f, 5.119376124e-05f, 5.358344882e-05f, 5.597291135e-05f, 5.836214470e-05f,
-6.075114477e-05f, 6.313990743e-05f, 6.552842856e-05f, 6.791670405e-05f, 7.030472979e-05f, 7.269250167e-05f, 7.508001556e-05f, 7.746726736e-05f, 7.985425296e-05f, 8.224096824e-05f,
-8.462740909e-05f, 8.701357141e-05f, 8.939945108e-05f, 9.178504400e-05f, 9.417034606e-05f, 9.655535315e-05f, 9.894006116e-05f, 1.013244660e-04f, 1.037085635e-04f, 1.060923497e-04f,
-1.084758204e-04f, 1.108589715e-04f, 1.132417988e-04f, 1.156242984e-04f, 1.180064661e-04f, 1.203882978e-04f, 1.227697894e-04f, 1.251509368e-04f, 1.275317359e-04f, 1.299121827e-04f,
-1.322922729e-04f, 1.346720026e-04f, 1.370513676e-04f, 1.394303639e-04f, 1.418089873e-04f, 1.441872337e-04f, 1.465650992e-04f, 1.489425795e-04f, 1.513196706e-04f, 1.536963684e-04f,
-1.560726688e-04f, 1.584485678e-04f, 1.608240612e-04f, 1.631991449e-04f, 1.655738150e-04f, 1.679480672e-04f, 1.703218976e-04f, 1.726953020e-04f, 1.750682763e-04f, 1.774408166e-04f,
-1.798129186e-04f, 1.821845784e-04f, 1.845557918e-04f, 1.869265548e-04f, 1.892968633e-04f, 1.916667133e-04f, 1.940361006e-04f, 1.964050212e-04f, 1.987734711e-04f, 2.011414461e-04f,
-2.035089421e-04f, 2.058759553e-04f, 2.082424813e-04f, 2.106085163e-04f, 2.129740561e-04f, 2.153390967e-04f, 2.177036340e-04f, 2.200676639e-04f, 2.224311825e-04f, 2.247941855e-04f,
-2.271566691e-04f, 2.295186291e-04f, 2.318800614e-04f, 2.342409621e-04f, 2.366013271e-04f, 2.389611523e-04f, 2.413204336e-04f, 2.436791671e-04f, 2.460373486e-04f, 2.483949742e-04f,
-2.507520398e-04f, 2.531085413e-04f, 2.554644747e-04f, 2.578198359e-04f, 2.601746210e-04f, 2.625288259e-04f, 2.648824465e-04f, 2.672354788e-04f, 2.695879188e-04f, 2.719397625e-04f,
-2.742910057e-04f, 2.766416446e-04f, 2.789916749e-04f, 2.813410928e-04f, 2.836898942e-04f, 2.860380751e-04f, 2.883856314e-04f, 2.907325591e-04f, 2.930788543e-04f, 2.954245128e-04f,
-2.977695306e-04f, 3.001139038e-04f, 3.024576283e-04f, 3.048007002e-04f, 3.071431153e-04f, 3.094848697e-04f, 3.118259594e-04f, 3.141663803e-04f, 3.165061285e-04f, 3.188452000e-04f,
-3.211835907e-04f, 3.235212966e-04f, 3.258583138e-04f, 3.281946381e-04f, 3.305302658e-04f, 3.328651926e-04f, 3.351994147e-04f, 3.375329280e-04f, 3.398657286e-04f, 3.421978125e-04f,
-3.445291756e-04f, 3.468598139e-04f, 3.491897236e-04f, 3.515189005e-04f, 3.538473408e-04f, 3.561750404e-04f, 3.585019953e-04f, 3.608282016e-04f, 3.631536553e-04f, 3.654783524e-04f,
-3.678022890e-04f, 3.701254610e-04f, 3.724478644e-04f, 3.747694954e-04f, 3.770903499e-04f, 3.794104240e-04f, 3.817297137e-04f, 3.840482151e-04f, 3.863659241e-04f, 3.886828369e-04f,
-3.909989494e-04f, 3.933142576e-04f, 3.956287578e-04f, 3.979424458e-04f, 4.002553177e-04f, 4.025673696e-04f, 4.048785975e-04f, 4.071889976e-04f, 4.094985657e-04f, 4.118072980e-04f,
-4.141151906e-04f, 4.164222394e-04f, 4.187284406e-04f, 4.210337902e-04f, 4.233382843e-04f, 4.256419189e-04f, 4.279446902e-04f, 4.302465941e-04f, 4.325476267e-04f, 4.348477842e-04f,
-4.371470626e-04f, 4.394454579e-04f, 4.417429662e-04f, 4.440395837e-04f, 4.463353064e-04f, 4.486301303e-04f, 4.509240516e-04f, 4.532170663e-04f, 4.555091706e-04f, 4.578003605e-04f,
-4.600906321e-04f, 4.623799815e-04f, 4.646684048e-04f, 4.669558981e-04f, 4.692424575e-04f, 4.715280790e-04f, 4.738127589e-04f, 4.760964931e-04f, 4.783792779e-04f, 4.806611092e-04f,
-4.829419833e-04f, 4.852218962e-04f, 4.875008440e-04f, 4.897788229e-04f, 4.920558290e-04f, 4.943318583e-04f, 4.966069070e-04f, 4.988809713e-04f, 5.011540472e-04f, 5.034261309e-04f,
-5.056972185e-04f, 5.079673061e-04f, 5.102363899e-04f, 5.125044660e-04f, 5.147715306e-04f, 5.170375797e-04f, 5.193026095e-04f, 5.215666162e-04f, 5.238295958e-04f, 5.260915446e-04f,
-5.283524587e-04f, 5.306123343e-04f, 5.328711674e-04f, 5.351289543e-04f, 5.373856910e-04f, 5.396413739e-04f, 5.418959989e-04f, 5.441495623e-04f, 5.464020603e-04f, 5.486534890e-04f,
-5.509038445e-04f, 5.531531231e-04f, 5.554013209e-04f, 5.576484341e-04f, 5.598944588e-04f, 5.621393913e-04f, 5.643832277e-04f, 5.666259643e-04f, 5.688675971e-04f, 5.711081224e-04f,
-5.733475364e-04f, 5.755858352e-04f, 5.778230150e-04f, 5.800590722e-04f, 5.822940027e-04f, 5.845278029e-04f, 5.867604689e-04f, 5.889919970e-04f, 5.912223834e-04f, 5.934516242e-04f,
-5.956797156e-04f, 5.979066540e-04f, 6.001324354e-04f, 6.023570562e-04f, 6.045805125e-04f, 6.068028006e-04f, 6.090239166e-04f, 6.112438568e-04f, 6.134626175e-04f, 6.156801948e-04f,
-6.178965850e-04f, 6.201117844e-04f, 6.223257891e-04f, 6.245385955e-04f, 6.267501996e-04f, 6.289605979e-04f, 6.311697865e-04f, 6.333777617e-04f, 6.355845197e-04f, 6.377900569e-04f,
-6.399943693e-04f, 6.421974534e-04f, 6.443993053e-04f, 6.465999214e-04f, 6.487992979e-04f, 6.509974310e-04f, 6.531943170e-04f, 6.553899522e-04f, 6.575843330e-04f, 6.597774554e-04f,
-6.619693159e-04f, 6.641599107e-04f, 6.663492361e-04f, 6.685372884e-04f, 6.707240638e-04f, 6.729095587e-04f, 6.750937694e-04f, 6.772766921e-04f, 6.794583231e-04f, 6.816386589e-04f,
-6.838176955e-04f, 6.859954294e-04f, 6.881718569e-04f, 6.903469742e-04f, 6.925207778e-04f, 6.946932638e-04f, 6.968644287e-04f, 6.990342687e-04f, 7.012027802e-04f, 7.033699594e-04f,
-7.055358028e-04f, 7.077003066e-04f, 7.098634672e-04f, 7.120252810e-04f, 7.141857441e-04f, 7.163448531e-04f, 7.185026042e-04f, 7.206589938e-04f, 7.228140183e-04f, 7.249676739e-04f,
-7.271199570e-04f, 7.292708641e-04f, 7.314203914e-04f, 7.335685353e-04f, 7.357152922e-04f, 7.378606584e-04f, 7.400046303e-04f, 7.421472044e-04f, 7.442883768e-04f, 7.464281441e-04f,
-7.485665027e-04f, 7.507034488e-04f, 7.528389789e-04f, 7.549730893e-04f, 7.571057765e-04f, 7.592370369e-04f, 7.613668668e-04f, 7.634952627e-04f, 7.656222209e-04f, 7.677477378e-04f,
-7.698718099e-04f, 7.719944336e-04f, 7.741156052e-04f, 7.762353212e-04f, 7.783535780e-04f, 7.804703720e-04f, 7.825856997e-04f, 7.846995575e-04f, 7.868119417e-04f, 7.889228489e-04f,
-7.910322754e-04f, 7.931402178e-04f, 7.952466724e-04f, 7.973516356e-04f, 7.994551040e-04f, 8.015570739e-04f, 8.036575419e-04f, 8.057565043e-04f, 8.078539577e-04f, 8.099498984e-04f,
-8.120443230e-04f, 8.141372279e-04f, 8.162286096e-04f, 8.183184645e-04f, 8.204067891e-04f, 8.224935800e-04f, 8.245788335e-04f, 8.266625461e-04f, 8.287447144e-04f, 8.308253348e-04f,
-8.329044039e-04f, 8.349819180e-04f, 8.370578737e-04f, 8.391322676e-04f, 8.412050960e-04f, 8.432763555e-04f, 8.453460427e-04f, 8.474141540e-04f, 8.494806859e-04f, 8.515456349e-04f,
-8.536089976e-04f, 8.556707706e-04f, 8.577309502e-04f, 8.597895330e-04f, 8.618465157e-04f, 8.639018946e-04f, 8.659556664e-04f, 8.680078275e-04f, 8.700583746e-04f, 8.721073042e-04f,
-8.741546127e-04f, 8.762002969e-04f, 8.782443531e-04f, 8.802867780e-04f, 8.823275682e-04f, 8.843667202e-04f, 8.864042305e-04f, 8.884400958e-04f, 8.904743126e-04f, 8.925068774e-04f,
-8.945377869e-04f, 8.965670377e-04f, 8.985946263e-04f, 9.006205493e-04f, 9.026448034e-04f, 9.046673850e-04f, 9.066882908e-04f, 9.087075174e-04f, 9.107250614e-04f, 9.127409194e-04f,
-9.147550881e-04f, 9.167675639e-04f, 9.187783437e-04f, 9.207874238e-04f, 9.227948011e-04f, 9.248004720e-04f, 9.268044333e-04f, 9.288066816e-04f, 9.308072134e-04f, 9.328060255e-04f,
-9.348031145e-04f, 9.367984770e-04f, 9.387921097e-04f, 9.407840092e-04f, 9.427741721e-04f, 9.447625952e-04f, 9.467492751e-04f, 9.487342084e-04f, 9.507173919e-04f, 9.526988221e-04f,
-9.546784958e-04f, 9.566564096e-04f, 9.586325602e-04f, 9.606069444e-04f, 9.625795587e-04f, 9.645503999e-04f, 9.665194646e-04f, 9.684867496e-04f, 9.704522515e-04f, 9.724159671e-04f,
-9.743778931e-04f, 9.763380261e-04f, 9.782963629e-04f, 9.802529003e-04f, 9.822076348e-04f, 9.841605632e-04f, 9.861116823e-04f, 9.880609888e-04f, 9.900084794e-04f, 9.919541509e-04f,
-9.938980000e-04f, 9.958400234e-04f, 9.977802178e-04f, 9.997185801e-04f, 1.001655107e-03f, 1.003589795e-03f, 1.005522641e-03f, 1.007453643e-03f, 1.009382795e-03f, 1.011310096e-03f,
-1.013235543e-03f, 1.015159131e-03f, 1.017080858e-03f, 1.019000720e-03f, 1.020918715e-03f, 1.022834839e-03f, 1.024749088e-03f, 1.026661460e-03f, 1.028571952e-03f, 1.030480560e-03f,
-1.032387281e-03f, 1.034292112e-03f, 1.036195049e-03f, 1.038096090e-03f, 1.039995232e-03f, 1.041892470e-03f, 1.043787803e-03f, 1.045681226e-03f, 1.047572737e-03f, 1.049462332e-03f,
-1.051350009e-03f, 1.053235763e-03f, 1.055119593e-03f, 1.057001495e-03f, 1.058881465e-03f, 1.060759501e-03f, 1.062635599e-03f, 1.064509756e-03f, 1.066381970e-03f, 1.068252237e-03f,
-1.070120553e-03f, 1.071986917e-03f, 1.073851324e-03f, 1.075713771e-03f, 1.077574256e-03f, 1.079432775e-03f, 1.081289326e-03f, 1.083143905e-03f, 1.084996508e-03f, 1.086847134e-03f,
-1.088695778e-03f, 1.090542438e-03f, 1.092387111e-03f, 1.094229794e-03f, 1.096070483e-03f, 1.097909175e-03f, 1.099745868e-03f, 1.101580558e-03f, 1.103413243e-03f, 1.105243918e-03f,
-1.107072582e-03f, 1.108899231e-03f, 1.110723862e-03f, 1.112546472e-03f, 1.114367058e-03f, 1.116185616e-03f, 1.118002145e-03f, 1.119816641e-03f, 1.121629100e-03f, 1.123439521e-03f,
-1.125247899e-03f, 1.127054232e-03f, 1.128858517e-03f, 1.130660750e-03f, 1.132460930e-03f, 1.134259052e-03f, 1.136055114e-03f, 1.137849113e-03f, 1.139641045e-03f, 1.141430909e-03f,
-1.143218700e-03f, 1.145004417e-03f, 1.146788055e-03f, 1.148569612e-03f, 1.150349085e-03f, 1.152126471e-03f, 1.153901767e-03f, 1.155674971e-03f, 1.157446078e-03f, 1.159215087e-03f,
-1.160981994e-03f, 1.162746797e-03f, 1.164509491e-03f, 1.166270076e-03f, 1.168028547e-03f, 1.169784901e-03f, 1.171539136e-03f, 1.173291249e-03f, 1.175041237e-03f, 1.176789097e-03f,
-1.178534826e-03f, 1.180278421e-03f, 1.182019880e-03f, 1.183759199e-03f, 1.185496375e-03f, 1.187231406e-03f, 1.188964289e-03f, 1.190695020e-03f, 1.192423598e-03f, 1.194150019e-03f,
-1.195874280e-03f, 1.197596378e-03f, 1.199316311e-03f, 1.201034076e-03f, 1.202749669e-03f, 1.204463089e-03f, 1.206174332e-03f, 1.207883395e-03f, 1.209590275e-03f, 1.211294970e-03f,
-1.212997477e-03f, 1.214697793e-03f, 1.216395915e-03f, 1.218091841e-03f, 1.219785567e-03f, 1.221477091e-03f, 1.223166410e-03f, 1.224853521e-03f, 1.226538422e-03f, 1.228221109e-03f,
-1.229901580e-03f, 1.231579831e-03f, 1.233255862e-03f, 1.234929667e-03f, 1.236601246e-03f, 1.238270594e-03f, 1.239937709e-03f, 1.241602589e-03f, 1.243265231e-03f, 1.244925631e-03f,
-1.246583787e-03f, 1.248239697e-03f, 1.249893358e-03f, 1.251544767e-03f, 1.253193921e-03f, 1.254840817e-03f, 1.256485453e-03f, 1.258127826e-03f, 1.259767934e-03f, 1.261405773e-03f,
-1.263041341e-03f, 1.264674636e-03f, 1.266305654e-03f, 1.267934392e-03f, 1.269560849e-03f, 1.271185022e-03f, 1.272806907e-03f, 1.274426502e-03f, 1.276043805e-03f, 1.277658812e-03f,
-1.279271522e-03f, 1.280881931e-03f, 1.282490037e-03f, 1.284095837e-03f, 1.285699328e-03f, 1.287300508e-03f, 1.288899375e-03f, 1.290495925e-03f, 1.292090156e-03f, 1.293682066e-03f,
-1.295271651e-03f, 1.296858909e-03f, 1.298443837e-03f, 1.300026434e-03f, 1.301606696e-03f, 1.303184620e-03f, 1.304760204e-03f, 1.306333446e-03f, 1.307904343e-03f, 1.309472892e-03f,
-1.311039091e-03f, 1.312602937e-03f, 1.314164427e-03f, 1.315723559e-03f, 1.317280331e-03f, 1.318834740e-03f, 1.320386783e-03f, 1.321936457e-03f, 1.323483761e-03f, 1.325028692e-03f,
-1.326571247e-03f, 1.328111423e-03f, 1.329649218e-03f, 1.331184630e-03f, 1.332717656e-03f, 1.334248293e-03f, 1.335776540e-03f, 1.337302393e-03f, 1.338825849e-03f, 1.340346908e-03f,
-1.341865565e-03f, 1.343381819e-03f, 1.344895666e-03f, 1.346407106e-03f, 1.347916134e-03f, 1.349422749e-03f, 1.350926947e-03f, 1.352428728e-03f, 1.353928088e-03f, 1.355425024e-03f,
-1.356919535e-03f, 1.358411617e-03f, 1.359901269e-03f, 1.361388488e-03f, 1.362873271e-03f, 1.364355616e-03f, 1.365835521e-03f, 1.367312983e-03f, 1.368788000e-03f, 1.370260569e-03f,
-1.371730688e-03f, 1.373198355e-03f, 1.374663567e-03f, 1.376126321e-03f, 1.377586616e-03f, 1.379044449e-03f, 1.380499818e-03f, 1.381952720e-03f, 1.383403153e-03f, 1.384851114e-03f,
-1.386296601e-03f, 1.387739612e-03f, 1.389180144e-03f, 1.390618196e-03f, 1.392053764e-03f, 1.393486846e-03f, 1.394917441e-03f, 1.396345545e-03f, 1.397771156e-03f, 1.399194273e-03f,
-1.400614892e-03f, 1.402033011e-03f, 1.403448629e-03f, 1.404861742e-03f, 1.406272349e-03f, 1.407680447e-03f, 1.409086034e-03f, 1.410489108e-03f, 1.411889665e-03f, 1.413287705e-03f,
-1.414683224e-03f, 1.416076221e-03f, 1.417466693e-03f, 1.418854638e-03f, 1.420240054e-03f, 1.421622938e-03f, 1.423003288e-03f, 1.424381103e-03f, 1.425756379e-03f, 1.427129114e-03f,
-1.428499306e-03f, 1.429866954e-03f, 1.431232054e-03f, 1.432594605e-03f, 1.433954604e-03f, 1.435312049e-03f, 1.436666938e-03f, 1.438019269e-03f, 1.439369040e-03f, 1.440716248e-03f,
-1.442060890e-03f, 1.443402966e-03f, 1.444742473e-03f, 1.446079408e-03f, 1.447413770e-03f, 1.448745556e-03f, 1.450074764e-03f, 1.451401392e-03f, 1.452725438e-03f, 1.454046899e-03f,
-1.455365774e-03f, 1.456682061e-03f, 1.457995757e-03f, 1.459306859e-03f, 1.460615367e-03f, 1.461921278e-03f, 1.463224590e-03f, 1.464525300e-03f, 1.465823407e-03f, 1.467118908e-03f,
-1.468411802e-03f, 1.469702086e-03f, 1.470989758e-03f, 1.472274816e-03f, 1.473557259e-03f, 1.474837083e-03f, 1.476114287e-03f, 1.477388869e-03f, 1.478660827e-03f, 1.479930159e-03f,
-1.481196862e-03f, 1.482460935e-03f, 1.483722376e-03f, 1.484981182e-03f, 1.486237352e-03f, 1.487490883e-03f, 1.488741773e-03f, 1.489990022e-03f, 1.491235625e-03f, 1.492478582e-03f,
-1.493718891e-03f, 1.494956549e-03f, 1.496191555e-03f, 1.497423906e-03f, 1.498653600e-03f, 1.499880636e-03f, 1.501105012e-03f, 1.502326725e-03f, 1.503545774e-03f, 1.504762157e-03f,
-1.505975871e-03f, 1.507186915e-03f, 1.508395287e-03f, 1.509600984e-03f, 1.510804006e-03f, 1.512004350e-03f, 1.513202013e-03f, 1.514396995e-03f, 1.515589293e-03f, 1.516778906e-03f,
-1.517965831e-03f, 1.519150066e-03f, 1.520331610e-03f, 1.521510461e-03f, 1.522686617e-03f, 1.523860075e-03f, 1.525030835e-03f, 1.526198894e-03f, 1.527364250e-03f, 1.528526902e-03f,
-1.529686847e-03f, 1.530844084e-03f, 1.531998611e-03f, 1.533150427e-03f, 1.534299528e-03f, 1.535445914e-03f, 1.536589582e-03f, 1.537730531e-03f, 1.538868759e-03f, 1.540004264e-03f,
-1.541137044e-03f, 1.542267098e-03f, 1.543394424e-03f, 1.544519019e-03f, 1.545640883e-03f, 1.546760013e-03f, 1.547876407e-03f, 1.548990064e-03f, 1.550100982e-03f, 1.551209159e-03f,
-1.552314594e-03f, 1.553417285e-03f, 1.554517229e-03f, 1.555614425e-03f, 1.556708872e-03f, 1.557800568e-03f, 1.558889511e-03f, 1.559975699e-03f, 1.561059130e-03f, 1.562139803e-03f,
-1.563217716e-03f, 1.564292868e-03f, 1.565365256e-03f, 1.566434880e-03f, 1.567501736e-03f, 1.568565824e-03f, 1.569627142e-03f, 1.570685688e-03f, 1.571741461e-03f, 1.572794459e-03f,
-1.573844680e-03f, 1.574892122e-03f, 1.575936784e-03f, 1.576978665e-03f, 1.578017762e-03f, 1.579054074e-03f, 1.580087599e-03f, 1.581118336e-03f, 1.582146283e-03f, 1.583171439e-03f,
-1.584193801e-03f, 1.585213368e-03f, 1.586230140e-03f, 1.587244113e-03f, 1.588255286e-03f, 1.589263658e-03f, 1.590269228e-03f, 1.591271993e-03f, 1.592271952e-03f, 1.593269104e-03f,
-1.594263446e-03f, 1.595254978e-03f, 1.596243698e-03f, 1.597229604e-03f, 1.598212695e-03f, 1.599192969e-03f, 1.600170424e-03f, 1.601145060e-03f, 1.602116874e-03f, 1.603085865e-03f,
-1.604052031e-03f, 1.605015372e-03f, 1.605975885e-03f, 1.606933569e-03f, 1.607888423e-03f, 1.608840445e-03f, 1.609789633e-03f, 1.610735986e-03f, 1.611679503e-03f, 1.612620181e-03f,
-1.613558021e-03f, 1.614493019e-03f, 1.615425175e-03f, 1.616354488e-03f, 1.617280955e-03f, 1.618204576e-03f, 1.619125348e-03f, 1.620043271e-03f, 1.620958343e-03f, 1.621870563e-03f,
-1.622779929e-03f, 1.623686439e-03f, 1.624590093e-03f, 1.625490889e-03f, 1.626388826e-03f, 1.627283902e-03f, 1.628176115e-03f, 1.629065465e-03f, 1.629951950e-03f, 1.630835569e-03f,
-1.631716320e-03f, 1.632594202e-03f, 1.633469213e-03f, 1.634341353e-03f, 1.635210619e-03f, 1.636077011e-03f, 1.636940528e-03f, 1.637801167e-03f, 1.638658928e-03f, 1.639513809e-03f,
-1.640365808e-03f, 1.641214926e-03f, 1.642061159e-03f, 1.642904508e-03f, 1.643744970e-03f, 1.644582545e-03f, 1.645417231e-03f, 1.646249026e-03f, 1.647077931e-03f, 1.647903942e-03f,
-1.648727059e-03f, 1.649547282e-03f, 1.650364607e-03f, 1.651179035e-03f, 1.651990564e-03f, 1.652799192e-03f, 1.653604919e-03f, 1.654407744e-03f, 1.655207664e-03f, 1.656004679e-03f,
-1.656798788e-03f, 1.657589990e-03f, 1.658378282e-03f, 1.659163664e-03f, 1.659946136e-03f, 1.660725694e-03f, 1.661502340e-03f, 1.662276070e-03f, 1.663046885e-03f, 1.663814782e-03f,
-1.664579761e-03f, 1.665341821e-03f, 1.666100960e-03f, 1.666857178e-03f, 1.667610472e-03f, 1.668360843e-03f, 1.669108288e-03f, 1.669852807e-03f, 1.670594399e-03f, 1.671333062e-03f,
-1.672068796e-03f, 1.672801598e-03f, 1.673531469e-03f, 1.674258407e-03f, 1.674982411e-03f, 1.675703480e-03f, 1.676421612e-03f, 1.677136808e-03f, 1.677849065e-03f, 1.678558382e-03f,
-1.679264759e-03f, 1.679968195e-03f, 1.680668687e-03f, 1.681366237e-03f, 1.682060841e-03f, 1.682752500e-03f, 1.683441212e-03f, 1.684126976e-03f, 1.684809791e-03f, 1.685489657e-03f,
-1.686166572e-03f, 1.686840535e-03f, 1.687511545e-03f, 1.688179601e-03f, 1.688844702e-03f, 1.689506848e-03f, 1.690166037e-03f, 1.690822268e-03f, 1.691475540e-03f, 1.692125852e-03f,
-1.692773204e-03f, 1.693417594e-03f, 1.694059022e-03f, 1.694697486e-03f, 1.695332986e-03f, 1.695965520e-03f, 1.696595088e-03f, 1.697221689e-03f, 1.697845322e-03f, 1.698465986e-03f,
-1.699083679e-03f, 1.699698402e-03f, 1.700310153e-03f, 1.700918931e-03f, 1.701524736e-03f, 1.702127566e-03f, 1.702727421e-03f, 1.703324300e-03f, 1.703918202e-03f, 1.704509126e-03f,
-1.705097071e-03f, 1.705682036e-03f, 1.706264021e-03f, 1.706843025e-03f, 1.707419047e-03f, 1.707992085e-03f, 1.708562140e-03f, 1.709129210e-03f, 1.709693295e-03f, 1.710254394e-03f,
-1.710812505e-03f, 1.711367629e-03f, 1.711919764e-03f, 1.712468910e-03f, 1.713015065e-03f, 1.713558230e-03f, 1.714098402e-03f, 1.714635583e-03f, 1.715169770e-03f, 1.715700963e-03f,
-1.716229161e-03f, 1.716754363e-03f, 1.717276570e-03f, 1.717795779e-03f, 1.718311991e-03f, 1.718825204e-03f, 1.719335418e-03f, 1.719842632e-03f, 1.720346845e-03f, 1.720848057e-03f,
-1.721346267e-03f, 1.721841475e-03f, 1.722333679e-03f, 1.722822879e-03f, 1.723309074e-03f, 1.723792264e-03f, 1.724272447e-03f, 1.724749624e-03f, 1.725223794e-03f, 1.725694955e-03f,
-1.726163108e-03f, 1.726628251e-03f, 1.727090384e-03f, 1.727549507e-03f, 1.728005618e-03f, 1.728458718e-03f, 1.728908805e-03f, 1.729355879e-03f, 1.729799939e-03f, 1.730240985e-03f,
-1.730679016e-03f, 1.731114032e-03f, 1.731546031e-03f, 1.731975014e-03f, 1.732400980e-03f, 1.732823927e-03f, 1.733243857e-03f, 1.733660767e-03f, 1.734074659e-03f, 1.734485530e-03f,
-1.734893380e-03f, 1.735298209e-03f, 1.735700017e-03f, 1.736098803e-03f, 1.736494566e-03f, 1.736887306e-03f, 1.737277022e-03f, 1.737663714e-03f, 1.738047381e-03f, 1.738428023e-03f,
-1.738805639e-03f, 1.739180229e-03f, 1.739551792e-03f, 1.739920329e-03f, 1.740285838e-03f, 1.740648318e-03f, 1.741007770e-03f, 1.741364194e-03f, 1.741717587e-03f, 1.742067951e-03f,
-1.742415285e-03f, 1.742759588e-03f, 1.743100859e-03f, 1.743439100e-03f, 1.743774308e-03f, 1.744106484e-03f, 1.744435626e-03f, 1.744761736e-03f, 1.745084812e-03f, 1.745404855e-03f,
-1.745721862e-03f, 1.746035835e-03f, 1.746346773e-03f, 1.746654676e-03f, 1.746959542e-03f, 1.747261373e-03f, 1.747560166e-03f, 1.747855923e-03f, 1.748148643e-03f, 1.748438325e-03f,
-1.748724969e-03f, 1.749008575e-03f, 1.749289142e-03f, 1.749566670e-03f, 1.749841159e-03f, 1.750112609e-03f, 1.750381019e-03f, 1.750646388e-03f, 1.750908718e-03f, 1.751168006e-03f,
-1.751424254e-03f, 1.751677461e-03f, 1.751927626e-03f, 1.752174749e-03f, 1.752418830e-03f, 1.752659869e-03f, 1.752897865e-03f, 1.753132819e-03f, 1.753364730e-03f, 1.753593597e-03f,
-1.753819421e-03f, 1.754042201e-03f, 1.754261938e-03f, 1.754478630e-03f, 1.754692278e-03f, 1.754902882e-03f, 1.755110440e-03f, 1.755314954e-03f, 1.755516423e-03f, 1.755714847e-03f,
-1.755910225e-03f, 1.756102557e-03f, 1.756291844e-03f, 1.756478085e-03f, 1.756661280e-03f, 1.756841429e-03f, 1.757018531e-03f, 1.757192587e-03f, 1.757363596e-03f, 1.757531558e-03f,
-1.757696474e-03f, 1.757858342e-03f, 1.758017164e-03f, 1.758172938e-03f, 1.758325665e-03f, 1.758475345e-03f, 1.758621977e-03f, 1.758765561e-03f, 1.758906098e-03f, 1.759043587e-03f,
-1.759178029e-03f, 1.759309422e-03f, 1.759437768e-03f, 1.759563066e-03f, 1.759685315e-03f, 1.759804517e-03f, 1.759920670e-03f, 1.760033776e-03f, 1.760143833e-03f, 1.760250842e-03f,
-1.760354803e-03f, 1.760455716e-03f, 1.760553581e-03f, 1.760648397e-03f, 1.760740165e-03f, 1.760828885e-03f, 1.760914557e-03f, 1.760997181e-03f, 1.761076756e-03f, 1.761153284e-03f,
-1.761226764e-03f, 1.761297195e-03f, 1.761364579e-03f, 1.761428914e-03f, 1.761490202e-03f, 1.761548442e-03f, 1.761603635e-03f, 1.761655779e-03f, 1.761704877e-03f, 1.761750926e-03f,
-1.761793929e-03f, 1.761833884e-03f, 1.761870792e-03f, 1.761904653e-03f, 1.761935467e-03f, 1.761963234e-03f, 1.761987954e-03f, 1.762009628e-03f, 1.762028255e-03f, 1.762043836e-03f,
-1.762056371e-03f, 1.762065859e-03f, 1.762072302e-03f, 1.762075699e-03f, 1.762076051e-03f, 1.762073357e-03f, 1.762067618e-03f, 1.762058834e-03f, 1.762047005e-03f, 1.762032132e-03f,
-1.762014214e-03f, 1.761993251e-03f, 1.761969245e-03f, 1.761942195e-03f, 1.761912101e-03f, 1.761878964e-03f, 1.761842783e-03f, 1.761803560e-03f, 1.761761294e-03f, 1.761715985e-03f,
-1.761667634e-03f, 1.761616242e-03f, 1.761561807e-03f, 1.761504331e-03f, 1.761443814e-03f, 1.761380256e-03f, 1.761313658e-03f, 1.761244019e-03f, 1.761171340e-03f, 1.761095621e-03f,
-1.761016862e-03f, 1.760935065e-03f, 1.760850229e-03f, 1.760762354e-03f, 1.760671441e-03f, 1.760577490e-03f, 1.760480502e-03f, 1.760380476e-03f, 1.760277414e-03f, 1.760171315e-03f,
-1.760062180e-03f, 1.759950009e-03f, 1.759834802e-03f, 1.759716561e-03f, 1.759595285e-03f, 1.759470974e-03f, 1.759343630e-03f, 1.759213252e-03f, 1.759079841e-03f, 1.758943397e-03f,
-1.758803920e-03f, 1.758661412e-03f, 1.758515872e-03f, 1.758367301e-03f, 1.758215700e-03f, 1.758061068e-03f, 1.757903407e-03f, 1.757742716e-03f, 1.757578996e-03f, 1.757412247e-03f,
-1.757242471e-03f, 1.757069667e-03f, 1.756893836e-03f, 1.756714978e-03f, 1.756533094e-03f, 1.756348185e-03f, 1.756160250e-03f, 1.755969291e-03f, 1.755775307e-03f, 1.755578300e-03f,
-1.755378270e-03f, 1.755175217e-03f, 1.754969142e-03f, 1.754760045e-03f, 1.754547927e-03f, 1.754332789e-03f, 1.754114631e-03f, 1.753893453e-03f, 1.753669256e-03f, 1.753442041e-03f,
-1.753211808e-03f, 1.752978558e-03f, 1.752742292e-03f, 1.752503009e-03f, 1.752260711e-03f, 1.752015398e-03f, 1.751767070e-03f, 1.751515729e-03f, 1.751261375e-03f, 1.751004008e-03f,
-1.750743629e-03f, 1.750480239e-03f, 1.750213839e-03f, 1.749944428e-03f, 1.749672008e-03f, 1.749396579e-03f, 1.749118142e-03f, 1.748836698e-03f, 1.748552247e-03f, 1.748264789e-03f,
-1.747974326e-03f, 1.747680859e-03f, 1.747384387e-03f, 1.747084912e-03f, 1.746782434e-03f, 1.746476954e-03f, 1.746168472e-03f, 1.745856990e-03f, 1.745542508e-03f, 1.745225027e-03f,
-1.744904547e-03f, 1.744581069e-03f, 1.744254594e-03f, 1.743925123e-03f, 1.743592656e-03f, 1.743257194e-03f, 1.742918738e-03f, 1.742577289e-03f, 1.742232847e-03f, 1.741885413e-03f,
-1.741534988e-03f, 1.741181573e-03f, 1.740825168e-03f, 1.740465774e-03f, 1.740103393e-03f, 1.739738024e-03f, 1.739369669e-03f, 1.738998328e-03f, 1.738624002e-03f, 1.738246692e-03f,
-1.737866400e-03f, 1.737483125e-03f, 1.737096868e-03f, 1.736707631e-03f, 1.736315414e-03f, 1.735920217e-03f, 1.735522043e-03f, 1.735120892e-03f, 1.734716764e-03f, 1.734309660e-03f,
-1.733899582e-03f, 1.733486530e-03f, 1.733070505e-03f, 1.732651508e-03f, 1.732229540e-03f, 1.731804601e-03f, 1.731376693e-03f, 1.730945817e-03f, 1.730511973e-03f, 1.730075163e-03f,
-1.729635387e-03f, 1.729192646e-03f, 1.728746941e-03f, 1.728298273e-03f, 1.727846643e-03f, 1.727392052e-03f, 1.726934502e-03f, 1.726473992e-03f, 1.726010523e-03f, 1.725544098e-03f,
-1.725074716e-03f, 1.724602379e-03f, 1.724127088e-03f, 1.723648844e-03f, 1.723167647e-03f, 1.722683499e-03f, 1.722196401e-03f, 1.721706353e-03f, 1.721213357e-03f, 1.720717414e-03f,
-1.720218524e-03f, 1.719716690e-03f, 1.719211911e-03f, 1.718704189e-03f, 1.718193525e-03f, 1.717679920e-03f, 1.717163374e-03f, 1.716643890e-03f, 1.716121468e-03f, 1.715596109e-03f,
-1.715067815e-03f, 1.714536585e-03f, 1.714002422e-03f, 1.713465327e-03f, 1.712925300e-03f, 1.712382343e-03f, 1.711836457e-03f, 1.711287642e-03f, 1.710735901e-03f, 1.710181233e-03f,
-1.709623641e-03f, 1.709063126e-03f, 1.708499687e-03f, 1.707933328e-03f, 1.707364048e-03f, 1.706791849e-03f, 1.706216732e-03f, 1.705638698e-03f, 1.705057749e-03f, 1.704473886e-03f,
-1.703887109e-03f, 1.703297420e-03f, 1.702704820e-03f, 1.702109310e-03f, 1.701510892e-03f, 1.700909566e-03f, 1.700305335e-03f, 1.699698198e-03f, 1.699088158e-03f, 1.698475215e-03f,
-1.697859371e-03f, 1.697240627e-03f, 1.696618984e-03f, 1.695994443e-03f, 1.695367007e-03f, 1.694736675e-03f, 1.694103449e-03f, 1.693467330e-03f, 1.692828321e-03f, 1.692186421e-03f,
-1.691541632e-03f, 1.690893956e-03f, 1.690243394e-03f, 1.689589947e-03f, 1.688933616e-03f, 1.688274402e-03f, 1.687612308e-03f, 1.686947334e-03f, 1.686279481e-03f, 1.685608751e-03f,
-1.684935146e-03f, 1.684258666e-03f, 1.683579313e-03f, 1.682897088e-03f, 1.682211992e-03f, 1.681524027e-03f, 1.680833195e-03f, 1.680139496e-03f, 1.679442932e-03f, 1.678743504e-03f,
-1.678041214e-03f, 1.677336063e-03f, 1.676628053e-03f, 1.675917184e-03f, 1.675203458e-03f, 1.674486877e-03f, 1.673767442e-03f, 1.673045154e-03f, 1.672320015e-03f, 1.671592027e-03f,
-1.670861189e-03f, 1.670127505e-03f, 1.669390976e-03f, 1.668651602e-03f, 1.667909385e-03f, 1.667164328e-03f, 1.666416430e-03f, 1.665665694e-03f, 1.664912121e-03f, 1.664155713e-03f,
-1.663396471e-03f, 1.662634396e-03f, 1.661869491e-03f, 1.661101756e-03f, 1.660331193e-03f, 1.659557803e-03f, 1.658781588e-03f, 1.658002550e-03f, 1.657220689e-03f, 1.656436008e-03f,
-1.655648508e-03f, 1.654858191e-03f, 1.654065057e-03f, 1.653269109e-03f, 1.652470348e-03f, 1.651668776e-03f, 1.650864394e-03f, 1.650057203e-03f, 1.649247206e-03f, 1.648434403e-03f,
-1.647618797e-03f, 1.646800389e-03f, 1.645979181e-03f, 1.645155173e-03f, 1.644328368e-03f, 1.643498767e-03f, 1.642666373e-03f, 1.641831185e-03f, 1.640993207e-03f, 1.640152439e-03f,
-1.639308883e-03f, 1.638462542e-03f, 1.637613416e-03f, 1.636761506e-03f, 1.635906816e-03f, 1.635049346e-03f, 1.634189098e-03f, 1.633326074e-03f, 1.632460274e-03f, 1.631591702e-03f,
-1.630720359e-03f, 1.629846245e-03f, 1.628969364e-03f, 1.628089716e-03f, 1.627207303e-03f, 1.626322128e-03f, 1.625434191e-03f, 1.624543494e-03f, 1.623650039e-03f, 1.622753828e-03f,
-1.621854862e-03f, 1.620953144e-03f, 1.620048674e-03f, 1.619141455e-03f, 1.618231488e-03f, 1.617318775e-03f, 1.616403318e-03f, 1.615485118e-03f, 1.614564178e-03f, 1.613640498e-03f,
-1.612714081e-03f, 1.611784929e-03f, 1.610853042e-03f, 1.609918424e-03f, 1.608981076e-03f, 1.608040999e-03f, 1.607098195e-03f, 1.606152666e-03f, 1.605204414e-03f, 1.604253441e-03f,
-1.603299748e-03f, 1.602343338e-03f, 1.601384211e-03f, 1.600422370e-03f, 1.599457817e-03f, 1.598490554e-03f, 1.597520582e-03f, 1.596547903e-03f, 1.595572519e-03f, 1.594594431e-03f,
-1.593613643e-03f, 1.592630155e-03f, 1.591643969e-03f, 1.590655087e-03f, 1.589663512e-03f, 1.588669244e-03f, 1.587672286e-03f, 1.586672640e-03f, 1.585670307e-03f, 1.584665290e-03f,
-1.583657590e-03f, 1.582647209e-03f, 1.581634150e-03f, 1.580618413e-03f, 1.579600002e-03f, 1.578578917e-03f, 1.577555161e-03f, 1.576528735e-03f, 1.575499642e-03f, 1.574467884e-03f,
-1.573433462e-03f, 1.572396378e-03f, 1.571356635e-03f, 1.570314234e-03f, 1.569269177e-03f, 1.568221466e-03f, 1.567171103e-03f, 1.566118091e-03f, 1.565062430e-03f, 1.564004124e-03f,
-1.562943173e-03f, 1.561879581e-03f, 1.560813348e-03f, 1.559744478e-03f, 1.558672971e-03f, 1.557598830e-03f, 1.556522058e-03f, 1.555442655e-03f, 1.554360624e-03f, 1.553275967e-03f,
-1.552188687e-03f, 1.551098784e-03f, 1.550006261e-03f, 1.548911121e-03f, 1.547813364e-03f, 1.546712994e-03f, 1.545610012e-03f, 1.544504420e-03f, 1.543396221e-03f, 1.542285416e-03f,
-1.541172007e-03f, 1.540055997e-03f, 1.538937388e-03f, 1.537816181e-03f, 1.536692379e-03f, 1.535565984e-03f, 1.534436998e-03f, 1.533305423e-03f, 1.532171261e-03f, 1.531034514e-03f,
-1.529895185e-03f, 1.528753275e-03f, 1.527608787e-03f, 1.526461723e-03f, 1.525312084e-03f, 1.524159873e-03f, 1.523005093e-03f, 1.521847744e-03f, 1.520687830e-03f, 1.519525353e-03f,
-1.518360314e-03f, 1.517192716e-03f, 1.516022562e-03f, 1.514849852e-03f, 1.513674590e-03f, 1.512496777e-03f, 1.511316416e-03f, 1.510133508e-03f, 1.508948057e-03f, 1.507760064e-03f,
-1.506569532e-03f, 1.505376462e-03f, 1.504180857e-03f, 1.502982719e-03f, 1.501782051e-03f, 1.500578853e-03f, 1.499373130e-03f, 1.498164883e-03f, 1.496954113e-03f, 1.495740824e-03f,
-1.494525018e-03f, 1.493306697e-03f, 1.492085863e-03f, 1.490862518e-03f, 1.489636664e-03f, 1.488408305e-03f, 1.487177442e-03f, 1.485944077e-03f, 1.484708213e-03f, 1.483469852e-03f,
-1.482228996e-03f, 1.480985648e-03f, 1.479739809e-03f, 1.478491483e-03f, 1.477240671e-03f, 1.475987376e-03f, 1.474731599e-03f, 1.473473345e-03f, 1.472212613e-03f, 1.470949408e-03f,
-1.469683731e-03f, 1.468415585e-03f, 1.467144971e-03f, 1.465871893e-03f, 1.464596352e-03f, 1.463318351e-03f, 1.462037893e-03f, 1.460754979e-03f, 1.459469613e-03f, 1.458181795e-03f,
-1.456891530e-03f, 1.455598818e-03f, 1.454303663e-03f, 1.453006067e-03f, 1.451706032e-03f, 1.450403560e-03f, 1.449098655e-03f, 1.447791318e-03f, 1.446481551e-03f, 1.445169358e-03f,
-1.443854740e-03f, 1.442537701e-03f, 1.441218242e-03f, 1.439896365e-03f, 1.438572074e-03f, 1.437245370e-03f, 1.435916257e-03f, 1.434584736e-03f, 1.433250810e-03f, 1.431914482e-03f,
-1.430575753e-03f, 1.429234626e-03f, 1.427891105e-03f, 1.426545190e-03f, 1.425196885e-03f, 1.423846192e-03f, 1.422493114e-03f, 1.421137653e-03f, 1.419779811e-03f, 1.418419592e-03f,
-1.417056996e-03f, 1.415692028e-03f, 1.414324690e-03f, 1.412954983e-03f, 1.411582911e-03f, 1.410208475e-03f, 1.408831680e-03f, 1.407452526e-03f, 1.406071016e-03f, 1.404687154e-03f,
-1.403300941e-03f, 1.401912381e-03f, 1.400521475e-03f, 1.399128226e-03f, 1.397732637e-03f, 1.396334710e-03f, 1.394934447e-03f, 1.393531853e-03f, 1.392126928e-03f, 1.390719675e-03f,
-1.389310097e-03f, 1.387898197e-03f, 1.386483977e-03f, 1.385067440e-03f, 1.383648588e-03f, 1.382227424e-03f, 1.380803951e-03f, 1.379378170e-03f, 1.377950085e-03f, 1.376519699e-03f,
-1.375087013e-03f, 1.373652031e-03f, 1.372214754e-03f, 1.370775187e-03f, 1.369333330e-03f, 1.367889188e-03f, 1.366442762e-03f, 1.364994055e-03f, 1.363543070e-03f, 1.362089809e-03f,
-1.360634276e-03f, 1.359176472e-03f, 1.357716400e-03f, 1.356254064e-03f, 1.354789465e-03f, 1.353322606e-03f, 1.351853490e-03f, 1.350382120e-03f, 1.348908499e-03f, 1.347432628e-03f,
-1.345954511e-03f, 1.344474150e-03f, 1.342991549e-03f, 1.341506709e-03f, 1.340019633e-03f, 1.338530324e-03f, 1.337038786e-03f, 1.335545019e-03f, 1.334049028e-03f, 1.332550815e-03f,
-1.331050383e-03f, 1.329547734e-03f, 1.328042871e-03f, 1.326535796e-03f, 1.325026513e-03f, 1.323515025e-03f, 1.322001333e-03f, 1.320485441e-03f, 1.318967352e-03f, 1.317447068e-03f,
-1.315924592e-03f, 1.314399926e-03f, 1.312873074e-03f, 1.311344038e-03f, 1.309812822e-03f, 1.308279427e-03f, 1.306743856e-03f, 1.305206113e-03f, 1.303666200e-03f, 1.302124120e-03f,
-1.300579875e-03f, 1.299033469e-03f, 1.297484904e-03f, 1.295934184e-03f, 1.294381310e-03f, 1.292826285e-03f, 1.291269114e-03f, 1.289709797e-03f, 1.288148339e-03f, 1.286584741e-03f,
-1.285019007e-03f, 1.283451140e-03f, 1.281881142e-03f, 1.280309017e-03f, 1.278734766e-03f, 1.277158393e-03f, 1.275579901e-03f, 1.273999293e-03f, 1.272416571e-03f, 1.270831738e-03f,
-1.269244798e-03f, 1.267655752e-03f, 1.266064605e-03f, 1.264471358e-03f, 1.262876014e-03f, 1.261278578e-03f, 1.259679050e-03f, 1.258077435e-03f, 1.256473735e-03f, 1.254867953e-03f,
-1.253260091e-03f, 1.251650154e-03f, 1.250038143e-03f, 1.248424062e-03f, 1.246807914e-03f, 1.245189701e-03f, 1.243569426e-03f, 1.241947092e-03f, 1.240322703e-03f, 1.238696261e-03f,
-1.237067768e-03f, 1.235437229e-03f, 1.233804645e-03f, 1.232170021e-03f, 1.230533358e-03f, 1.228894660e-03f, 1.227253929e-03f, 1.225611169e-03f, 1.223966383e-03f, 1.222319573e-03f,
-1.220670742e-03f, 1.219019894e-03f, 1.217367031e-03f, 1.215712157e-03f, 1.214055274e-03f, 1.212396385e-03f, 1.210735494e-03f, 1.209072603e-03f, 1.207407715e-03f, 1.205740833e-03f,
-1.204071961e-03f, 1.202401101e-03f, 1.200728256e-03f, 1.199053429e-03f, 1.197376624e-03f, 1.195697843e-03f, 1.194017089e-03f, 1.192334365e-03f, 1.190649675e-03f, 1.188963021e-03f,
-1.187274406e-03f, 1.185583834e-03f, 1.183891307e-03f, 1.182196828e-03f, 1.180500401e-03f, 1.178802029e-03f, 1.177101714e-03f, 1.175399459e-03f, 1.173695269e-03f, 1.171989145e-03f,
-1.170281091e-03f, 1.168571109e-03f, 1.166859204e-03f, 1.165145377e-03f, 1.163429633e-03f, 1.161711974e-03f, 1.159992402e-03f, 1.158270922e-03f, 1.156547537e-03f, 1.154822249e-03f,
-1.153095061e-03f, 1.151365977e-03f, 1.149635000e-03f, 1.147902132e-03f, 1.146167378e-03f, 1.144430739e-03f, 1.142692219e-03f, 1.140951822e-03f, 1.139209550e-03f, 1.137465407e-03f,
-1.135719395e-03f, 1.133971517e-03f, 1.132221778e-03f, 1.130470179e-03f, 1.128716725e-03f, 1.126961418e-03f, 1.125204261e-03f, 1.123445258e-03f, 1.121684411e-03f, 1.119921724e-03f,
-1.118157200e-03f, 1.116390842e-03f, 1.114622653e-03f, 1.112852637e-03f, 1.111080796e-03f, 1.109307134e-03f, 1.107531654e-03f, 1.105754359e-03f, 1.103975252e-03f, 1.102194337e-03f,
-1.100411616e-03f, 1.098627093e-03f, 1.096840771e-03f, 1.095052653e-03f, 1.093262742e-03f, 1.091471042e-03f, 1.089677556e-03f, 1.087882286e-03f, 1.086085237e-03f, 1.084286411e-03f,
-1.082485812e-03f, 1.080683442e-03f, 1.078879305e-03f, 1.077073405e-03f, 1.075265744e-03f, 1.073456325e-03f, 1.071645153e-03f, 1.069832229e-03f, 1.068017558e-03f, 1.066201143e-03f,
-1.064382986e-03f, 1.062563091e-03f, 1.060741461e-03f, 1.058918100e-03f, 1.057093011e-03f, 1.055266197e-03f, 1.053437661e-03f, 1.051607406e-03f, 1.049775437e-03f, 1.047941755e-03f,
-1.046106365e-03f, 1.044269269e-03f, 1.042430471e-03f, 1.040589975e-03f, 1.038747782e-03f, 1.036903898e-03f, 1.035058324e-03f, 1.033211065e-03f, 1.031362123e-03f, 1.029511502e-03f,
-1.027659205e-03f, 1.025805236e-03f, 1.023949597e-03f, 1.022092292e-03f, 1.020233325e-03f, 1.018372698e-03f, 1.016510415e-03f, 1.014646479e-03f, 1.012780894e-03f, 1.010913663e-03f,
-1.009044789e-03f, 1.007174275e-03f, 1.005302126e-03f, 1.003428343e-03f, 1.001552931e-03f, 9.996758933e-04f, 9.977972323e-04f, 9.959169518e-04f, 9.940350552e-04f, 9.921515458e-04f,
-9.902664269e-04f, 9.883797019e-04f, 9.864913741e-04f, 9.846014469e-04f, 9.827099237e-04f, 9.808168078e-04f, 9.789221025e-04f, 9.770258113e-04f, 9.751279374e-04f, 9.732284844e-04f,
-9.713274554e-04f, 9.694248540e-04f, 9.675206835e-04f, 9.656149472e-04f, 9.637076486e-04f, 9.617987910e-04f, 9.598883778e-04f, 9.579764125e-04f, 9.560628983e-04f, 9.541478387e-04f,
-9.522312371e-04f, 9.503130970e-04f, 9.483934216e-04f, 9.464722144e-04f, 9.445494788e-04f, 9.426252182e-04f, 9.406994360e-04f, 9.387721357e-04f, 9.368433206e-04f, 9.349129942e-04f,
-9.329811599e-04f, 9.310478210e-04f, 9.291129812e-04f, 9.271766437e-04f, 9.252388120e-04f, 9.232994895e-04f, 9.213586798e-04f, 9.194163861e-04f, 9.174726119e-04f, 9.155273608e-04f,
-9.135806361e-04f, 9.116324413e-04f, 9.096827798e-04f, 9.077316550e-04f, 9.057790706e-04f, 9.038250298e-04f, 9.018695362e-04f, 8.999125932e-04f, 8.979542042e-04f, 8.959943728e-04f,
-8.940331025e-04f, 8.920703966e-04f, 8.901062586e-04f, 8.881406921e-04f, 8.861737006e-04f, 8.842052874e-04f, 8.822354560e-04f, 8.802642100e-04f, 8.782915529e-04f, 8.763174881e-04f,
-8.743420191e-04f, 8.723651495e-04f, 8.703868826e-04f, 8.684072220e-04f, 8.664261713e-04f, 8.644437339e-04f, 8.624599132e-04f, 8.604747129e-04f, 8.584881365e-04f, 8.565001873e-04f,
-8.545108690e-04f, 8.525201851e-04f, 8.505281391e-04f, 8.485347345e-04f, 8.465399748e-04f, 8.445438635e-04f, 8.425464042e-04f, 8.405476004e-04f, 8.385474557e-04f, 8.365459735e-04f,
-8.345431575e-04f, 8.325390110e-04f, 8.305335378e-04f, 8.285267412e-04f, 8.265186249e-04f, 8.245091924e-04f, 8.224984473e-04f, 8.204863931e-04f, 8.184730333e-04f, 8.164583715e-04f,
-8.144424113e-04f, 8.124251562e-04f, 8.104066098e-04f, 8.083867756e-04f, 8.063656572e-04f, 8.043432581e-04f, 8.023195821e-04f, 8.002946325e-04f, 7.982684130e-04f, 7.962409271e-04f,
-7.942121784e-04f, 7.921821706e-04f, 7.901509071e-04f, 7.881183916e-04f, 7.860846277e-04f, 7.840496188e-04f, 7.820133687e-04f, 7.799758809e-04f, 7.779371590e-04f, 7.758972066e-04f,
-7.738560272e-04f, 7.718136246e-04f, 7.697700022e-04f, 7.677251637e-04f, 7.656791127e-04f, 7.636318528e-04f, 7.615833875e-04f, 7.595337206e-04f, 7.574828556e-04f, 7.554307961e-04f,
-7.533775458e-04f, 7.513231082e-04f, 7.492674869e-04f, 7.472106857e-04f, 7.451527081e-04f, 7.430935577e-04f, 7.410332382e-04f, 7.389717531e-04f, 7.369091062e-04f, 7.348453010e-04f,
-7.327803412e-04f, 7.307142304e-04f, 7.286469723e-04f, 7.265785704e-04f, 7.245090285e-04f, 7.224383501e-04f, 7.203665390e-04f, 7.182935987e-04f, 7.162195329e-04f, 7.141443452e-04f,
-7.120680394e-04f, 7.099906189e-04f, 7.079120876e-04f, 7.058324491e-04f, 7.037517069e-04f, 7.016698649e-04f, 6.995869265e-04f, 6.975028956e-04f, 6.954177757e-04f, 6.933315705e-04f,
-6.912442838e-04f, 6.891559190e-04f, 6.870664800e-04f, 6.849759704e-04f, 6.828843939e-04f, 6.807917542e-04f, 6.786980548e-04f, 6.766032996e-04f, 6.745074921e-04f, 6.724106361e-04f,
-6.703127352e-04f, 6.682137932e-04f, 6.661138137e-04f, 6.640128004e-04f, 6.619107570e-04f, 6.598076872e-04f, 6.577035946e-04f, 6.555984831e-04f, 6.534923562e-04f, 6.513852176e-04f,
-6.492770712e-04f, 6.471679205e-04f, 6.450577692e-04f, 6.429466212e-04f, 6.408344800e-04f, 6.387213494e-04f, 6.366072331e-04f, 6.344921348e-04f, 6.323760582e-04f, 6.302590070e-04f,
-6.281409849e-04f, 6.260219958e-04f, 6.239020431e-04f, 6.217811308e-04f, 6.196592625e-04f, 6.175364419e-04f, 6.154126727e-04f, 6.132879588e-04f, 6.111623037e-04f, 6.090357112e-04f,
-6.069081852e-04f, 6.047797292e-04f, 6.026503470e-04f, 6.005200423e-04f, 5.983888190e-04f, 5.962566806e-04f, 5.941236311e-04f, 5.919896740e-04f, 5.898548131e-04f, 5.877190522e-04f,
-5.855823951e-04f, 5.834448454e-04f, 5.813064069e-04f, 5.791670833e-04f, 5.770268785e-04f, 5.748857961e-04f, 5.727438398e-04f, 5.706010136e-04f, 5.684573210e-04f, 5.663127659e-04f,
-5.641673520e-04f, 5.620210831e-04f, 5.598739628e-04f, 5.577259951e-04f, 5.555771836e-04f, 5.534275321e-04f, 5.512770444e-04f, 5.491257242e-04f, 5.469735753e-04f, 5.448206015e-04f,
-5.426668065e-04f, 5.405121941e-04f, 5.383567680e-04f, 5.362005322e-04f, 5.340434902e-04f, 5.318856459e-04f, 5.297270030e-04f, 5.275675654e-04f, 5.254073369e-04f, 5.232463211e-04f,
-5.210845218e-04f, 5.189219430e-04f, 5.167585882e-04f, 5.145944614e-04f, 5.124295663e-04f, 5.102639067e-04f, 5.080974863e-04f, 5.059303090e-04f, 5.037623786e-04f, 5.015936987e-04f,
-4.994242734e-04f, 4.972541062e-04f, 4.950832010e-04f, 4.929115617e-04f, 4.907391919e-04f, 4.885660956e-04f, 4.863922764e-04f, 4.842177383e-04f, 4.820424849e-04f, 4.798665201e-04f,
-4.776898477e-04f, 4.755124715e-04f, 4.733343953e-04f, 4.711556229e-04f, 4.689761581e-04f, 4.667960047e-04f, 4.646151665e-04f, 4.624336474e-04f, 4.602514511e-04f, 4.580685814e-04f,
-4.558850422e-04f, 4.537008373e-04f, 4.515159705e-04f, 4.493304455e-04f, 4.471442662e-04f, 4.449574365e-04f, 4.427699601e-04f, 4.405818409e-04f, 4.383930827e-04f, 4.362036892e-04f,
-4.340136644e-04f, 4.318230120e-04f, 4.296317358e-04f, 4.274398398e-04f, 4.252473276e-04f, 4.230542032e-04f, 4.208604703e-04f, 4.186661328e-04f, 4.164711946e-04f, 4.142756593e-04f,
-4.120795309e-04f, 4.098828132e-04f, 4.076855101e-04f, 4.054876252e-04f, 4.032891626e-04f, 4.010901260e-04f, 3.988905192e-04f, 3.966903461e-04f, 3.944896106e-04f, 3.922883164e-04f,
-3.900864674e-04f, 3.878840674e-04f, 3.856811202e-04f, 3.834776298e-04f, 3.812736000e-04f, 3.790690345e-04f, 3.768639372e-04f, 3.746583120e-04f, 3.724521627e-04f, 3.702454932e-04f,
-3.680383072e-04f, 3.658306087e-04f, 3.636224015e-04f, 3.614136894e-04f, 3.592044763e-04f, 3.569947659e-04f, 3.547845623e-04f, 3.525738692e-04f, 3.503626904e-04f, 3.481510299e-04f,
-3.459388914e-04f, 3.437262789e-04f, 3.415131961e-04f, 3.392996469e-04f, 3.370856352e-04f, 3.348711648e-04f, 3.326562396e-04f, 3.304408634e-04f, 3.282250401e-04f, 3.260087736e-04f,
-3.237920676e-04f, 3.215749261e-04f, 3.193573529e-04f, 3.171393519e-04f, 3.149209269e-04f, 3.127020818e-04f, 3.104828204e-04f, 3.082631466e-04f, 3.060430643e-04f, 3.038225773e-04f,
-3.016016895e-04f, 2.993804047e-04f, 2.971587268e-04f, 2.949366597e-04f, 2.927142073e-04f, 2.904913733e-04f, 2.882681617e-04f, 2.860445763e-04f, 2.838206210e-04f, 2.815962996e-04f,
-2.793716160e-04f, 2.771465742e-04f, 2.749211779e-04f, 2.726954310e-04f, 2.704693373e-04f, 2.682429008e-04f, 2.660161254e-04f, 2.637890148e-04f, 2.615615730e-04f, 2.593338038e-04f,
-2.571057111e-04f, 2.548772987e-04f, 2.526485706e-04f, 2.504195305e-04f, 2.481901825e-04f, 2.459605303e-04f, 2.437305778e-04f, 2.415003288e-04f, 2.392697874e-04f, 2.370389572e-04f,
-2.348078423e-04f, 2.325764464e-04f, 2.303447735e-04f, 2.281128274e-04f, 2.258806120e-04f, 2.236481311e-04f, 2.214153887e-04f, 2.191823886e-04f, 2.169491347e-04f, 2.147156308e-04f,
-2.124818809e-04f, 2.102478888e-04f, 2.080136584e-04f, 2.057791935e-04f, 2.035444981e-04f, 2.013095759e-04f, 1.990744310e-04f, 1.968390671e-04f, 1.946034882e-04f, 1.923676981e-04f,
-1.901317007e-04f, 1.878954998e-04f, 1.856590994e-04f, 1.834225034e-04f, 1.811857155e-04f, 1.789487397e-04f, 1.767115798e-04f, 1.744742398e-04f, 1.722367235e-04f, 1.699990348e-04f,
-1.677611775e-04f, 1.655231556e-04f, 1.632849729e-04f, 1.610466333e-04f, 1.588081407e-04f, 1.565694989e-04f, 1.543307119e-04f, 1.520917834e-04f, 1.498527175e-04f, 1.476135179e-04f,
-1.453741886e-04f, 1.431347334e-04f, 1.408951562e-04f, 1.386554608e-04f, 1.364156512e-04f, 1.341757313e-04f, 1.319357048e-04f, 1.296955758e-04f, 1.274553480e-04f, 1.252150254e-04f,
-1.229746118e-04f, 1.207341110e-04f, 1.184935271e-04f, 1.162528638e-04f, 1.140121251e-04f, 1.117713147e-04f, 1.095304367e-04f, 1.072894948e-04f, 1.050484929e-04f, 1.028074350e-04f,
-1.005663249e-04f, 9.832516644e-05f, 9.608396354e-05f, 9.384272006e-05f, 9.160143988e-05f, 8.936012688e-05f, 8.711878494e-05f, 8.487741792e-05f, 8.263602972e-05f, 8.039462419e-05f,
-7.815320523e-05f, 7.591177669e-05f, 7.367034246e-05f, 7.142890642e-05f, 6.918747243e-05f, 6.694604437e-05f, 6.470462611e-05f, 6.246322154e-05f, 6.022183451e-05f, 5.798046892e-05f,
-5.573912862e-05f, 5.349781749e-05f, 5.125653941e-05f, 4.901529824e-05f, 4.677409786e-05f, 4.453294214e-05f, 4.229183495e-05f, 4.005078017e-05f, 3.780978166e-05f, 3.556884329e-05f,
-3.332796894e-05f, 3.108716247e-05f, 2.884642776e-05f, 2.660576867e-05f, 2.436518907e-05f, 2.212469283e-05f, 1.988428381e-05f, 1.764396590e-05f, 1.540374295e-05f, 1.316361882e-05f,
-1.092359740e-05f, 8.683682538e-06f, 6.443878106e-06f, 4.204187967e-06f, 1.964615989e-06f, -2.748339660e-07f, -2.514158032e-06f, -4.753352347e-06f, -6.992413046e-06f, -9.231336267e-06f,
--1.147011815e-05f, -1.370875483e-05f, -1.594724244e-05f, -1.818557713e-05f, -2.042375504e-05f, -2.266177230e-05f, -2.489962505e-05f, -2.713730944e-05f, -2.937482161e-05f, -3.161215770e-05f,
--3.384931385e-05f, -3.608628621e-05f, -3.832307091e-05f, -4.055966411e-05f, -4.279606195e-05f, -4.503226056e-05f, -4.726825611e-05f, -4.950404474e-05f, -5.173962258e-05f, -5.397498579e-05f,
--5.621013053e-05f, -5.844505292e-05f, -6.067974914e-05f, -6.291421532e-05f, -6.514844761e-05f, -6.738244218e-05f, -6.961619516e-05f, -7.184970271e-05f, -7.408296099e-05f, -7.631596614e-05f,
--7.854871433e-05f, -8.078120171e-05f, -8.301342443e-05f, -8.524537864e-05f, -8.747706052e-05f, -8.970846621e-05f, -9.193959187e-05f, -9.417043366e-05f, -9.640098774e-05f, -9.863125028e-05f,
--1.008612174e-04f, -1.030908853e-04f, -1.053202502e-04f, -1.075493082e-04f, -1.097780554e-04f, -1.120064881e-04f, -1.142346023e-04f, -1.164623943e-04f, -1.186898603e-04f, -1.209169963e-04f,
--1.231437986e-04f, -1.253702634e-04f, -1.275963867e-04f, -1.298221648e-04f, -1.320475939e-04f, -1.342726701e-04f, -1.364973896e-04f, -1.387217486e-04f, -1.409457432e-04f, -1.431693696e-04f,
--1.453926241e-04f, -1.476155027e-04f, -1.498380016e-04f, -1.520601171e-04f, -1.542818453e-04f, -1.565031825e-04f, -1.587241246e-04f, -1.609446681e-04f, -1.631648090e-04f, -1.653845435e-04f,
--1.676038679e-04f, -1.698227782e-04f, -1.720412708e-04f, -1.742593417e-04f, -1.764769872e-04f, -1.786942034e-04f, -1.809109866e-04f, -1.831273330e-04f, -1.853432386e-04f, -1.875586999e-04f,
--1.897737128e-04f, -1.919882737e-04f, -1.942023787e-04f, -1.964160240e-04f, -1.986292058e-04f, -2.008419203e-04f, -2.030541638e-04f, -2.052659324e-04f, -2.074772223e-04f, -2.096880297e-04f,
--2.118983509e-04f, -2.141081820e-04f, -2.163175193e-04f, -2.185263589e-04f, -2.207346971e-04f, -2.229425301e-04f, -2.251498541e-04f, -2.273566653e-04f, -2.295629599e-04f, -2.317687341e-04f,
--2.339739842e-04f, -2.361787063e-04f, -2.383828968e-04f, -2.405865517e-04f, -2.427896674e-04f, -2.449922400e-04f, -2.471942658e-04f, -2.493957410e-04f, -2.515966618e-04f, -2.537970245e-04f,
--2.559968252e-04f, -2.581960603e-04f, -2.603947259e-04f, -2.625928182e-04f, -2.647903336e-04f, -2.669872682e-04f, -2.691836182e-04f, -2.713793800e-04f, -2.735745497e-04f, -2.757691236e-04f,
--2.779630979e-04f, -2.801564689e-04f, -2.823492327e-04f, -2.845413858e-04f, -2.867329242e-04f, -2.889238442e-04f, -2.911141422e-04f, -2.933038143e-04f, -2.954928567e-04f, -2.976812659e-04f,
--2.998690379e-04f, -3.020561690e-04f, -3.042426556e-04f, -3.064284938e-04f, -3.086136799e-04f, -3.107982102e-04f, -3.129820809e-04f, -3.151652883e-04f, -3.173478287e-04f, -3.195296983e-04f,
--3.217108934e-04f, -3.238914103e-04f, -3.260712452e-04f, -3.282503944e-04f, -3.304288541e-04f, -3.326066207e-04f, -3.347836905e-04f, -3.369600596e-04f, -3.391357244e-04f, -3.413106811e-04f,
--3.434849261e-04f, -3.456584555e-04f, -3.478312658e-04f, -3.500033532e-04f, -3.521747139e-04f, -3.543453442e-04f, -3.565152405e-04f, -3.586843991e-04f, -3.608528161e-04f, -3.630204880e-04f,
--3.651874110e-04f, -3.673535814e-04f, -3.695189955e-04f, -3.716836496e-04f, -3.738475400e-04f, -3.760106630e-04f, -3.781730149e-04f, -3.803345921e-04f, -3.824953908e-04f, -3.846554073e-04f,
--3.868146379e-04f, -3.889730790e-04f, -3.911307269e-04f, -3.932875779e-04f, -3.954436282e-04f, -3.975988743e-04f, -3.997533124e-04f, -4.019069389e-04f, -4.040597500e-04f, -4.062117422e-04f,
--4.083629117e-04f, -4.105132548e-04f, -4.126627679e-04f, -4.148114474e-04f, -4.169592895e-04f, -4.191062906e-04f, -4.212524470e-04f, -4.233977551e-04f, -4.255422112e-04f, -4.276858116e-04f,
--4.298285527e-04f, -4.319704309e-04f, -4.341114424e-04f, -4.362515836e-04f, -4.383908509e-04f, -4.405292406e-04f, -4.426667491e-04f, -4.448033727e-04f, -4.469391078e-04f, -4.490739508e-04f,
--4.512078980e-04f, -4.533409457e-04f, -4.554730903e-04f, -4.576043283e-04f, -4.597346559e-04f, -4.618640695e-04f, -4.639925656e-04f, -4.661201404e-04f, -4.682467903e-04f, -4.703725118e-04f,
--4.724973012e-04f, -4.746211549e-04f, -4.767440692e-04f, -4.788660405e-04f, -4.809870653e-04f, -4.831071399e-04f, -4.852262607e-04f, -4.873444241e-04f, -4.894616265e-04f, -4.915778643e-04f,
--4.936931339e-04f, -4.958074316e-04f, -4.979207539e-04f, -5.000330971e-04f, -5.021444578e-04f, -5.042548322e-04f, -5.063642169e-04f, -5.084726081e-04f, -5.105800023e-04f, -5.126863960e-04f,
--5.147917855e-04f, -5.168961673e-04f, -5.189995377e-04f, -5.211018933e-04f, -5.232032304e-04f, -5.253035454e-04f, -5.274028348e-04f, -5.295010950e-04f, -5.315983224e-04f, -5.336945135e-04f,
--5.357896647e-04f, -5.378837724e-04f, -5.399768331e-04f, -5.420688432e-04f, -5.441597992e-04f, -5.462496974e-04f, -5.483385345e-04f, -5.504263067e-04f, -5.525130106e-04f, -5.545986426e-04f,
--5.566831991e-04f, -5.587666767e-04f, -5.608490717e-04f, -5.629303807e-04f, -5.650106000e-04f, -5.670897262e-04f, -5.691677558e-04f, -5.712446852e-04f, -5.733205108e-04f, -5.753952292e-04f,
--5.774688368e-04f, -5.795413301e-04f, -5.816127056e-04f, -5.836829597e-04f, -5.857520890e-04f, -5.878200899e-04f, -5.898869590e-04f, -5.919526926e-04f, -5.940172874e-04f, -5.960807398e-04f,
--5.981430462e-04f, -6.002042033e-04f, -6.022642074e-04f, -6.043230552e-04f, -6.063807431e-04f, -6.084372676e-04f, -6.104926252e-04f, -6.125468124e-04f, -6.145998258e-04f, -6.166516619e-04f,
--6.187023172e-04f, -6.207517882e-04f, -6.228000714e-04f, -6.248471634e-04f, -6.268930607e-04f, -6.289377598e-04f, -6.309812572e-04f, -6.330235496e-04f, -6.350646333e-04f, -6.371045051e-04f,
--6.391431613e-04f, -6.411805986e-04f, -6.432168135e-04f, -6.452518025e-04f, -6.472855623e-04f, -6.493180893e-04f, -6.513493801e-04f, -6.533794313e-04f, -6.554082394e-04f, -6.574358010e-04f,
--6.594621126e-04f, -6.614871709e-04f, -6.635109723e-04f, -6.655335136e-04f, -6.675547911e-04f, -6.695748016e-04f, -6.715935416e-04f, -6.736110076e-04f, -6.756271963e-04f, -6.776421043e-04f,
--6.796557281e-04f, -6.816680643e-04f, -6.836791096e-04f, -6.856888605e-04f, -6.876973136e-04f, -6.897044655e-04f, -6.917103128e-04f, -6.937148521e-04f, -6.957180801e-04f, -6.977199934e-04f,
--6.997205885e-04f, -7.017198620e-04f, -7.037178107e-04f, -7.057144311e-04f, -7.077097198e-04f, -7.097036735e-04f, -7.116962888e-04f, -7.136875623e-04f, -7.156774907e-04f, -7.176660705e-04f,
--7.196532985e-04f, -7.216391712e-04f, -7.236236854e-04f, -7.256068376e-04f, -7.275886246e-04f, -7.295690429e-04f, -7.315480892e-04f, -7.335257602e-04f, -7.355020525e-04f, -7.374769628e-04f,
--7.394504877e-04f, -7.414226240e-04f, -7.433933682e-04f, -7.453627171e-04f, -7.473306674e-04f, -7.492972157e-04f, -7.512623586e-04f, -7.532260929e-04f, -7.551884153e-04f, -7.571493224e-04f,
--7.591088110e-04f, -7.610668777e-04f, -7.630235192e-04f, -7.649787322e-04f, -7.669325134e-04f, -7.688848596e-04f, -7.708357674e-04f, -7.727852335e-04f, -7.747332547e-04f, -7.766798276e-04f,
--7.786249491e-04f, -7.805686157e-04f, -7.825108242e-04f, -7.844515714e-04f, -7.863908539e-04f, -7.883286686e-04f, -7.902650121e-04f, -7.921998811e-04f, -7.941332725e-04f, -7.960651829e-04f,
--7.979956091e-04f, -7.999245478e-04f, -8.018519959e-04f, -8.037779499e-04f, -8.057024068e-04f, -8.076253632e-04f, -8.095468159e-04f, -8.114667617e-04f, -8.133851974e-04f, -8.153021196e-04f,
--8.172175253e-04f, -8.191314110e-04f, -8.210437738e-04f, -8.229546102e-04f, -8.248639171e-04f, -8.267716913e-04f, -8.286779296e-04f, -8.305826287e-04f, -8.324857855e-04f, -8.343873967e-04f,
--8.362874592e-04f, -8.381859698e-04f, -8.400829252e-04f, -8.419783222e-04f, -8.438721578e-04f, -8.457644286e-04f, -8.476551315e-04f, -8.495442634e-04f, -8.514318210e-04f, -8.533178012e-04f,
--8.552022008e-04f, -8.570850166e-04f, -8.589662456e-04f, -8.608458844e-04f, -8.627239299e-04f, -8.646003791e-04f, -8.664752287e-04f, -8.683484755e-04f, -8.702201165e-04f, -8.720901486e-04f,
--8.739585684e-04f, -8.758253730e-04f, -8.776905591e-04f, -8.795541237e-04f, -8.814160636e-04f, -8.832763757e-04f, -8.851350568e-04f, -8.869921039e-04f, -8.888475138e-04f, -8.907012834e-04f,
--8.925534096e-04f, -8.944038892e-04f, -8.962527193e-04f, -8.980998966e-04f, -8.999454181e-04f, -9.017892807e-04f, -9.036314813e-04f, -9.054720167e-04f, -9.073108840e-04f, -9.091480799e-04f,
--9.109836015e-04f, -9.128174457e-04f, -9.146496093e-04f, -9.164800894e-04f, -9.183088828e-04f, -9.201359865e-04f, -9.219613973e-04f, -9.237851124e-04f, -9.256071285e-04f, -9.274274426e-04f,
--9.292460518e-04f, -9.310629529e-04f, -9.328781428e-04f, -9.346916187e-04f, -9.365033773e-04f, -9.383134157e-04f, -9.401217309e-04f, -9.419283198e-04f, -9.437331793e-04f, -9.455363066e-04f,
--9.473376985e-04f, -9.491373520e-04f, -9.509352641e-04f, -9.527314319e-04f, -9.545258522e-04f, -9.563185222e-04f, -9.581094387e-04f, -9.598985989e-04f, -9.616859996e-04f, -9.634716380e-04f,
--9.652555110e-04f, -9.670376157e-04f, -9.688179490e-04f, -9.705965080e-04f, -9.723732897e-04f, -9.741482911e-04f, -9.759215093e-04f, -9.776929413e-04f, -9.794625842e-04f, -9.812304349e-04f,
--9.829964906e-04f, -9.847607482e-04f, -9.865232049e-04f, -9.882838577e-04f, -9.900427036e-04f, -9.917997397e-04f, -9.935549631e-04f, -9.953083708e-04f, -9.970599599e-04f, -9.988097275e-04f,
--1.000557671e-03f, -1.002303786e-03f, -1.004048072e-03f, -1.005790524e-03f, -1.007531140e-03f, -1.009269918e-03f, -1.011006853e-03f, -1.012741943e-03f, -1.014475186e-03f, -1.016206578e-03f,
--1.017936117e-03f, -1.019663800e-03f, -1.021389623e-03f, -1.023113584e-03f, -1.024835680e-03f, -1.026555908e-03f, -1.028274265e-03f, -1.029990749e-03f, -1.031705356e-03f, -1.033418084e-03f,
--1.035128930e-03f, -1.036837890e-03f, -1.038544963e-03f, -1.040250145e-03f, -1.041953434e-03f, -1.043654826e-03f, -1.045354319e-03f, -1.047051910e-03f, -1.048747596e-03f, -1.050441374e-03f,
--1.052133241e-03f, -1.053823196e-03f, -1.055511234e-03f, -1.057197353e-03f, -1.058881550e-03f, -1.060563823e-03f, -1.062244168e-03f, -1.063922583e-03f, -1.065599065e-03f, -1.067273611e-03f,
--1.068946219e-03f, -1.070616886e-03f, -1.072285608e-03f, -1.073952383e-03f, -1.075617209e-03f, -1.077280082e-03f, -1.078941000e-03f, -1.080599960e-03f, -1.082256960e-03f, -1.083911996e-03f,
--1.085565065e-03f, -1.087216166e-03f, -1.088865295e-03f, -1.090512450e-03f, -1.092157627e-03f, -1.093800824e-03f, -1.095442039e-03f, -1.097081268e-03f, -1.098718510e-03f, -1.100353760e-03f,
--1.101987017e-03f, -1.103618277e-03f, -1.105247539e-03f, -1.106874799e-03f, -1.108500055e-03f, -1.110123303e-03f, -1.111744542e-03f, -1.113363768e-03f, -1.114980980e-03f, -1.116596173e-03f,
--1.118209346e-03f, -1.119820496e-03f, -1.121429620e-03f, -1.123036715e-03f, -1.124641780e-03f, -1.126244810e-03f, -1.127845804e-03f, -1.129444759e-03f, -1.131041672e-03f, -1.132636541e-03f,
--1.134229362e-03f, -1.135820134e-03f, -1.137408853e-03f, -1.138995518e-03f, -1.140580125e-03f, -1.142162671e-03f, -1.143743155e-03f, -1.145321574e-03f, -1.146897924e-03f, -1.148472204e-03f,
--1.150044410e-03f, -1.151614540e-03f, -1.153182592e-03f, -1.154748563e-03f, -1.156312450e-03f, -1.157874251e-03f, -1.159433963e-03f, -1.160991584e-03f, -1.162547110e-03f, -1.164100540e-03f,
--1.165651871e-03f, -1.167201101e-03f, -1.168748225e-03f, -1.170293244e-03f, -1.171836152e-03f, -1.173376949e-03f, -1.174915632e-03f, -1.176452197e-03f, -1.177986643e-03f, -1.179518967e-03f,
--1.181049166e-03f, -1.182577238e-03f, -1.184103180e-03f, -1.185626991e-03f, -1.187148666e-03f, -1.188668205e-03f, -1.190185603e-03f, -1.191700860e-03f, -1.193213972e-03f, -1.194724936e-03f,
--1.196233751e-03f, -1.197740414e-03f, -1.199244922e-03f, -1.200747273e-03f, -1.202247464e-03f, -1.203745493e-03f, -1.205241358e-03f, -1.206735056e-03f, -1.208226584e-03f, -1.209715940e-03f,
--1.211203122e-03f, -1.212688127e-03f, -1.214170953e-03f, -1.215651597e-03f, -1.217130056e-03f, -1.218606330e-03f, -1.220080414e-03f, -1.221552307e-03f, -1.223022006e-03f, -1.224489508e-03f,
--1.225954812e-03f, -1.227417915e-03f, -1.228878815e-03f, -1.230337508e-03f, -1.231793993e-03f, -1.233248268e-03f, -1.234700329e-03f, -1.236150175e-03f, -1.237597803e-03f, -1.239043210e-03f,
--1.240486396e-03f, -1.241927356e-03f, -1.243366089e-03f, -1.244802592e-03f, -1.246236863e-03f, -1.247668899e-03f, -1.249098699e-03f, -1.250526260e-03f, -1.251951579e-03f, -1.253374655e-03f,
--1.254795484e-03f, -1.256214065e-03f, -1.257630395e-03f, -1.259044472e-03f, -1.260456293e-03f, -1.261865857e-03f, -1.263273161e-03f, -1.264678202e-03f, -1.266080979e-03f, -1.267481489e-03f,
--1.268879729e-03f, -1.270275698e-03f, -1.271669394e-03f, -1.273060813e-03f, -1.274449953e-03f, -1.275836813e-03f, -1.277221391e-03f, -1.278603682e-03f, -1.279983687e-03f, -1.281361402e-03f,
--1.282736824e-03f, -1.284109953e-03f, -1.285480785e-03f, -1.286849319e-03f, -1.288215551e-03f, -1.289579481e-03f, -1.290941105e-03f, -1.292300421e-03f, -1.293657427e-03f, -1.295012122e-03f,
--1.296364502e-03f, -1.297714566e-03f, -1.299062311e-03f, -1.300407735e-03f, -1.301750836e-03f, -1.303091612e-03f, -1.304430060e-03f, -1.305766179e-03f, -1.307099966e-03f, -1.308431419e-03f,
--1.309760536e-03f, -1.311087315e-03f, -1.312411753e-03f, -1.313733848e-03f, -1.315053599e-03f, -1.316371002e-03f, -1.317686057e-03f, -1.318998760e-03f, -1.320309110e-03f, -1.321617105e-03f,
--1.322922741e-03f, -1.324226019e-03f, -1.325526934e-03f, -1.326825485e-03f, -1.328121670e-03f, -1.329415487e-03f, -1.330706934e-03f, -1.331996008e-03f, -1.333282708e-03f, -1.334567031e-03f,
--1.335848975e-03f, -1.337128539e-03f, -1.338405720e-03f, -1.339680515e-03f, -1.340952924e-03f, -1.342222944e-03f, -1.343490573e-03f, -1.344755809e-03f, -1.346018649e-03f, -1.347279092e-03f,
--1.348537136e-03f, -1.349792778e-03f, -1.351046017e-03f, -1.352296851e-03f, -1.353545277e-03f, -1.354791294e-03f, -1.356034899e-03f, -1.357276090e-03f, -1.358514867e-03f, -1.359751225e-03f,
--1.360985164e-03f, -1.362216682e-03f, -1.363445776e-03f, -1.364672445e-03f, -1.365896686e-03f, -1.367118497e-03f, -1.368337878e-03f, -1.369554824e-03f, -1.370769336e-03f, -1.371981410e-03f,
--1.373191045e-03f, -1.374398238e-03f, -1.375602989e-03f, -1.376805294e-03f, -1.378005152e-03f, -1.379202561e-03f, -1.380397519e-03f, -1.381590024e-03f, -1.382780075e-03f, -1.383967668e-03f,
--1.385152804e-03f, -1.386335478e-03f, -1.387515690e-03f, -1.388693438e-03f, -1.389868719e-03f, -1.391041533e-03f, -1.392211876e-03f, -1.393379747e-03f, -1.394545145e-03f, -1.395708067e-03f,
--1.396868511e-03f, -1.398026476e-03f, -1.399181959e-03f, -1.400334960e-03f, -1.401485475e-03f, -1.402633504e-03f, -1.403779044e-03f, -1.404922093e-03f, -1.406062651e-03f, -1.407200713e-03f,
--1.408336280e-03f, -1.409469349e-03f, -1.410599919e-03f, -1.411727987e-03f, -1.412853551e-03f, -1.413976611e-03f, -1.415097164e-03f, -1.416215208e-03f, -1.417330741e-03f, -1.418443762e-03f,
--1.419554269e-03f, -1.420662261e-03f, -1.421767735e-03f, -1.422870689e-03f, -1.423971122e-03f, -1.425069033e-03f, -1.426164418e-03f, -1.427257278e-03f, -1.428347609e-03f, -1.429435410e-03f,
--1.430520680e-03f, -1.431603416e-03f, -1.432683618e-03f, -1.433761282e-03f, -1.434836408e-03f, -1.435908993e-03f, -1.436979037e-03f, -1.438046537e-03f, -1.439111492e-03f, -1.440173899e-03f,
--1.441233758e-03f, -1.442291067e-03f, -1.443345823e-03f, -1.444398025e-03f, -1.445447672e-03f, -1.446494762e-03f, -1.447539293e-03f, -1.448581263e-03f, -1.449620671e-03f, -1.450657516e-03f,
--1.451691795e-03f, -1.452723507e-03f, -1.453752650e-03f, -1.454779223e-03f, -1.455803224e-03f, -1.456824651e-03f, -1.457843503e-03f, -1.458859778e-03f, -1.459873475e-03f, -1.460884591e-03f,
--1.461893126e-03f, -1.462899078e-03f, -1.463902445e-03f, -1.464903225e-03f, -1.465901417e-03f, -1.466897020e-03f, -1.467890031e-03f, -1.468880450e-03f, -1.469868274e-03f, -1.470853503e-03f,
--1.471836134e-03f, -1.472816166e-03f, -1.473793597e-03f, -1.474768427e-03f, -1.475740652e-03f, -1.476710273e-03f, -1.477677287e-03f, -1.478641692e-03f, -1.479603488e-03f, -1.480562673e-03f,
--1.481519244e-03f, -1.482473202e-03f, -1.483424544e-03f, -1.484373268e-03f, -1.485319374e-03f, -1.486262859e-03f, -1.487203723e-03f, -1.488141963e-03f, -1.489077579e-03f, -1.490010568e-03f,
--1.490940930e-03f, -1.491868663e-03f, -1.492793765e-03f, -1.493716236e-03f, -1.494636073e-03f, -1.495553275e-03f, -1.496467840e-03f, -1.497379768e-03f, -1.498289057e-03f, -1.499195705e-03f,
--1.500099711e-03f, -1.501001073e-03f, -1.501899791e-03f, -1.502795863e-03f, -1.503689286e-03f, -1.504580061e-03f, -1.505468185e-03f, -1.506353658e-03f, -1.507236477e-03f, -1.508116642e-03f,
--1.508994151e-03f, -1.509869002e-03f, -1.510741195e-03f, -1.511610727e-03f, -1.512477599e-03f, -1.513341807e-03f, -1.514203351e-03f, -1.515062230e-03f, -1.515918443e-03f, -1.516771987e-03f,
--1.517622861e-03f, -1.518471065e-03f, -1.519316597e-03f, -1.520159456e-03f, -1.520999639e-03f, -1.521837147e-03f, -1.522671978e-03f, -1.523504130e-03f, -1.524333602e-03f, -1.525160393e-03f,
--1.525984501e-03f, -1.526805926e-03f, -1.527624666e-03f, -1.528440719e-03f, -1.529254086e-03f, -1.530064763e-03f, -1.530872750e-03f, -1.531678047e-03f, -1.532480650e-03f, -1.533280560e-03f,
--1.534077775e-03f, -1.534872294e-03f, -1.535664116e-03f, -1.536453238e-03f, -1.537239661e-03f, -1.538023383e-03f, -1.538804403e-03f, -1.539582719e-03f, -1.540358331e-03f, -1.541131237e-03f,
--1.541901436e-03f, -1.542668927e-03f, -1.543433708e-03f, -1.544195779e-03f, -1.544955138e-03f, -1.545711784e-03f, -1.546465716e-03f, -1.547216934e-03f, -1.547965434e-03f, -1.548711218e-03f,
--1.549454283e-03f, -1.550194628e-03f, -1.550932252e-03f, -1.551667154e-03f, -1.552399333e-03f, -1.553128788e-03f, -1.553855518e-03f, -1.554579522e-03f, -1.555300797e-03f, -1.556019345e-03f,
--1.556735162e-03f, -1.557448249e-03f, -1.558158604e-03f, -1.558866226e-03f, -1.559571114e-03f, -1.560273267e-03f, -1.560972684e-03f, -1.561669364e-03f, -1.562363305e-03f, -1.563054508e-03f,
--1.563742970e-03f, -1.564428690e-03f, -1.565111669e-03f, -1.565791903e-03f, -1.566469394e-03f, -1.567144139e-03f, -1.567816137e-03f, -1.568485389e-03f, -1.569151891e-03f, -1.569815645e-03f,
--1.570476647e-03f, -1.571134899e-03f, -1.571790398e-03f, -1.572443143e-03f, -1.573093134e-03f, -1.573740370e-03f, -1.574384850e-03f, -1.575026572e-03f, -1.575665536e-03f, -1.576301741e-03f,
--1.576935186e-03f, -1.577565869e-03f, -1.578193791e-03f, -1.578818950e-03f, -1.579441345e-03f, -1.580060975e-03f, -1.580677840e-03f, -1.581291938e-03f, -1.581903268e-03f, -1.582511830e-03f,
--1.583117623e-03f, -1.583720646e-03f, -1.584320897e-03f, -1.584918377e-03f, -1.585513084e-03f, -1.586105017e-03f, -1.586694176e-03f, -1.587280559e-03f, -1.587864166e-03f, -1.588444995e-03f,
--1.589023047e-03f, -1.589598320e-03f, -1.590170813e-03f, -1.590740526e-03f, -1.591307457e-03f, -1.591871607e-03f, -1.592432973e-03f, -1.592991555e-03f, -1.593547353e-03f, -1.594100366e-03f,
--1.594650592e-03f, -1.595198031e-03f, -1.595742683e-03f, -1.596284546e-03f, -1.596823620e-03f, -1.597359903e-03f, -1.597893396e-03f, -1.598424097e-03f, -1.598952005e-03f, -1.599477121e-03f,
--1.599999442e-03f, -1.600518969e-03f, -1.601035701e-03f, -1.601549636e-03f, -1.602060774e-03f, -1.602569115e-03f, -1.603074658e-03f, -1.603577401e-03f, -1.604077345e-03f, -1.604574488e-03f,
--1.605068830e-03f, -1.605560370e-03f, -1.606049108e-03f, -1.606535042e-03f, -1.607018173e-03f, -1.607498499e-03f, -1.607976020e-03f, -1.608450734e-03f, -1.608922642e-03f, -1.609391743e-03f,
--1.609858036e-03f, -1.610321521e-03f, -1.610782196e-03f, -1.611240061e-03f, -1.611695116e-03f, -1.612147360e-03f, -1.612596792e-03f, -1.613043412e-03f, -1.613487219e-03f, -1.613928212e-03f,
--1.614366391e-03f, -1.614801755e-03f, -1.615234304e-03f, -1.615664037e-03f, -1.616090954e-03f, -1.616515053e-03f, -1.616936335e-03f, -1.617354798e-03f, -1.617770443e-03f, -1.618183268e-03f,
--1.618593273e-03f, -1.619000458e-03f, -1.619404822e-03f, -1.619806364e-03f, -1.620205084e-03f, -1.620600982e-03f, -1.620994056e-03f, -1.621384306e-03f, -1.621771733e-03f, -1.622156334e-03f,
--1.622538111e-03f, -1.622917062e-03f, -1.623293186e-03f, -1.623666484e-03f, -1.624036954e-03f, -1.624404597e-03f, -1.624769412e-03f, -1.625131398e-03f, -1.625490555e-03f, -1.625846883e-03f,
--1.626200380e-03f, -1.626551048e-03f, -1.626898884e-03f, -1.627243888e-03f, -1.627586062e-03f, -1.627925402e-03f, -1.628261910e-03f, -1.628595586e-03f, -1.628926427e-03f, -1.629254435e-03f,
--1.629579608e-03f, -1.629901947e-03f, -1.630221451e-03f, -1.630538119e-03f, -1.630851951e-03f, -1.631162947e-03f, -1.631471106e-03f, -1.631776429e-03f, -1.632078913e-03f, -1.632378561e-03f,
--1.632675370e-03f, -1.632969340e-03f, -1.633260472e-03f, -1.633548765e-03f, -1.633834218e-03f, -1.634116831e-03f, -1.634396604e-03f, -1.634673537e-03f, -1.634947629e-03f, -1.635218880e-03f,
--1.635487289e-03f, -1.635752857e-03f, -1.636015582e-03f, -1.636275465e-03f, -1.636532506e-03f, -1.636786704e-03f, -1.637038059e-03f, -1.637286570e-03f, -1.637532237e-03f, -1.637775061e-03f,
--1.638015040e-03f, -1.638252175e-03f, -1.638486465e-03f, -1.638717910e-03f, -1.638946509e-03f, -1.639172264e-03f, -1.639395172e-03f, -1.639615235e-03f, -1.639832452e-03f, -1.640046822e-03f,
--1.640258346e-03f, -1.640467022e-03f, -1.640672852e-03f, -1.640875835e-03f, -1.641075971e-03f, -1.641273258e-03f, -1.641467698e-03f, -1.641659291e-03f, -1.641848035e-03f, -1.642033931e-03f,
--1.642216978e-03f, -1.642397177e-03f, -1.642574528e-03f, -1.642749029e-03f, -1.642920681e-03f, -1.643089485e-03f, -1.643255439e-03f, -1.643418543e-03f, -1.643578799e-03f, -1.643736204e-03f,
--1.643890760e-03f, -1.644042466e-03f, -1.644191322e-03f, -1.644337328e-03f, -1.644480484e-03f, -1.644620789e-03f, -1.644758244e-03f, -1.644892849e-03f, -1.645024604e-03f, -1.645153508e-03f,
--1.645279561e-03f, -1.645402764e-03f, -1.645523116e-03f, -1.645640617e-03f, -1.645755268e-03f, -1.645867067e-03f, -1.645976016e-03f, -1.646082114e-03f, -1.646185361e-03f, -1.646285757e-03f,
--1.646383302e-03f, -1.646477997e-03f, -1.646569840e-03f, -1.646658832e-03f, -1.646744974e-03f, -1.646828264e-03f, -1.646908704e-03f, -1.646986293e-03f, -1.647061030e-03f, -1.647132917e-03f,
--1.647201954e-03f, -1.647268139e-03f, -1.647331474e-03f, -1.647391958e-03f, -1.647449591e-03f, -1.647504374e-03f, -1.647556307e-03f, -1.647605389e-03f, -1.647651621e-03f, -1.647695002e-03f,
--1.647735534e-03f, -1.647773215e-03f, -1.647808046e-03f, -1.647840028e-03f, -1.647869159e-03f, -1.647895441e-03f, -1.647918874e-03f, -1.647939457e-03f, -1.647957190e-03f, -1.647972075e-03f,
--1.647984110e-03f, -1.647993297e-03f, -1.647999635e-03f, -1.648003124e-03f, -1.648003765e-03f, -1.648001557e-03f, -1.647996502e-03f, -1.647988598e-03f, -1.647977847e-03f, -1.647964248e-03f,
--1.647947802e-03f, -1.647928508e-03f, -1.647906367e-03f, -1.647881380e-03f, -1.647853546e-03f, -1.647822865e-03f, -1.647789338e-03f, -1.647752966e-03f, -1.647713747e-03f, -1.647671683e-03f,
--1.647626774e-03f, -1.647579019e-03f, -1.647528420e-03f, -1.647474976e-03f, -1.647418688e-03f, -1.647359556e-03f, -1.647297580e-03f, -1.647232760e-03f, -1.647165097e-03f, -1.647094591e-03f,
--1.647021243e-03f, -1.646945051e-03f, -1.646866018e-03f, -1.646784143e-03f, -1.646699427e-03f, -1.646611869e-03f, -1.646521470e-03f, -1.646428231e-03f, -1.646332151e-03f, -1.646233232e-03f,
--1.646131473e-03f, -1.646026874e-03f, -1.645919437e-03f, -1.645809161e-03f, -1.645696047e-03f, -1.645580095e-03f, -1.645461305e-03f, -1.645339678e-03f, -1.645215214e-03f, -1.645087914e-03f,
--1.644957778e-03f, -1.644824806e-03f, -1.644688999e-03f, -1.644550357e-03f, -1.644408881e-03f, -1.644264571e-03f, -1.644117426e-03f, -1.643967449e-03f, -1.643814639e-03f, -1.643658996e-03f,
--1.643500521e-03f, -1.643339215e-03f, -1.643175078e-03f, -1.643008110e-03f, -1.642838312e-03f, -1.642665684e-03f, -1.642490227e-03f, -1.642311941e-03f, -1.642130826e-03f, -1.641946884e-03f,
--1.641760114e-03f, -1.641570517e-03f, -1.641378094e-03f, -1.641182845e-03f, -1.640984770e-03f, -1.640783871e-03f, -1.640580147e-03f, -1.640373599e-03f, -1.640164227e-03f, -1.639952033e-03f,
--1.639737016e-03f, -1.639519177e-03f, -1.639298517e-03f, -1.639075037e-03f, -1.638848736e-03f, -1.638619615e-03f, -1.638387675e-03f, -1.638152917e-03f, -1.637915341e-03f, -1.637674947e-03f,
--1.637431736e-03f, -1.637185709e-03f, -1.636936866e-03f, -1.636685209e-03f, -1.636430736e-03f, -1.636173450e-03f, -1.635913351e-03f, -1.635650438e-03f, -1.635384714e-03f, -1.635116178e-03f,
--1.634844832e-03f, -1.634570675e-03f, -1.634293708e-03f, -1.634013933e-03f, -1.633731349e-03f, -1.633445957e-03f, -1.633157759e-03f, -1.632866754e-03f, -1.632572944e-03f, -1.632276328e-03f,
--1.631976908e-03f, -1.631674684e-03f, -1.631369658e-03f, -1.631061829e-03f, -1.630751198e-03f, -1.630437767e-03f, -1.630121535e-03f, -1.629802504e-03f, -1.629480673e-03f, -1.629156045e-03f,
--1.628828619e-03f, -1.628498397e-03f, -1.628165379e-03f, -1.627829565e-03f, -1.627490957e-03f, -1.627149556e-03f, -1.626805361e-03f, -1.626458374e-03f, -1.626108596e-03f, -1.625756027e-03f,
--1.625400668e-03f, -1.625042519e-03f, -1.624681583e-03f, -1.624317858e-03f, -1.623951347e-03f, -1.623582050e-03f, -1.623209968e-03f, -1.622835101e-03f, -1.622457451e-03f, -1.622077017e-03f,
--1.621693802e-03f, -1.621307806e-03f, -1.620919029e-03f, -1.620527472e-03f, -1.620133137e-03f, -1.619736024e-03f, -1.619336134e-03f, -1.618933468e-03f, -1.618528027e-03f, -1.618119811e-03f,
--1.617708821e-03f, -1.617295059e-03f, -1.616878524e-03f, -1.616459219e-03f, -1.616037144e-03f, -1.615612299e-03f, -1.615184686e-03f, -1.614754306e-03f, -1.614321159e-03f, -1.613885247e-03f,
--1.613446569e-03f, -1.613005128e-03f, -1.612560924e-03f, -1.612113958e-03f, -1.611664231e-03f, -1.611211744e-03f, -1.610756498e-03f, -1.610298493e-03f, -1.609837732e-03f, -1.609374213e-03f,
--1.608907940e-03f, -1.608438912e-03f, -1.607967131e-03f, -1.607492597e-03f, -1.607015311e-03f, -1.606535275e-03f, -1.606052490e-03f, -1.605566956e-03f, -1.605078674e-03f, -1.604587646e-03f,
--1.604093873e-03f, -1.603597354e-03f, -1.603098093e-03f, -1.602596088e-03f, -1.602091343e-03f, -1.601583856e-03f, -1.601073631e-03f, -1.600560667e-03f, -1.600044965e-03f, -1.599526528e-03f,
--1.599005355e-03f, -1.598481447e-03f, -1.597954807e-03f, -1.597425435e-03f, -1.596893331e-03f, -1.596358498e-03f, -1.595820935e-03f, -1.595280645e-03f, -1.594737629e-03f, -1.594191886e-03f,
--1.593643420e-03f, -1.593092229e-03f, -1.592538317e-03f, -1.591981683e-03f, -1.591422329e-03f, -1.590860257e-03f, -1.590295466e-03f, -1.589727959e-03f, -1.589157736e-03f, -1.588584799e-03f,
--1.588009148e-03f, -1.587430786e-03f, -1.586849712e-03f, -1.586265929e-03f, -1.585679436e-03f, -1.585090237e-03f, -1.584498331e-03f, -1.583903720e-03f, -1.583306405e-03f, -1.582706387e-03f,
--1.582103668e-03f, -1.581498248e-03f, -1.580890129e-03f, -1.580279312e-03f, -1.579665798e-03f, -1.579049589e-03f, -1.578430685e-03f, -1.577809088e-03f, -1.577184800e-03f, -1.576557820e-03f,
--1.575928151e-03f, -1.575295794e-03f, -1.574660750e-03f, -1.574023020e-03f, -1.573382606e-03f, -1.572739509e-03f, -1.572093729e-03f, -1.571445269e-03f, -1.570794130e-03f, -1.570140313e-03f,
--1.569483818e-03f, -1.568824648e-03f, -1.568162804e-03f, -1.567498287e-03f, -1.566831098e-03f, -1.566161239e-03f, -1.565488711e-03f, -1.564813515e-03f, -1.564135652e-03f, -1.563455125e-03f,
--1.562771934e-03f, -1.562086080e-03f, -1.561397565e-03f, -1.560706390e-03f, -1.560012557e-03f, -1.559316067e-03f, -1.558616921e-03f, -1.557915121e-03f, -1.557210668e-03f, -1.556503563e-03f,
--1.555793808e-03f, -1.555081404e-03f, -1.554366352e-03f, -1.553648655e-03f, -1.552928312e-03f, -1.552205327e-03f, -1.551479699e-03f, -1.550751431e-03f, -1.550020524e-03f, -1.549286979e-03f,
--1.548550797e-03f, -1.547811981e-03f, -1.547070531e-03f, -1.546326450e-03f, -1.545579738e-03f, -1.544830396e-03f, -1.544078427e-03f, -1.543323832e-03f, -1.542566611e-03f, -1.541806768e-03f,
--1.541044303e-03f, -1.540279217e-03f, -1.539511512e-03f, -1.538741190e-03f, -1.537968251e-03f, -1.537192699e-03f, -1.536414533e-03f, -1.535633755e-03f, -1.534850368e-03f, -1.534064372e-03f,
--1.533275769e-03f, -1.532484561e-03f, -1.531690748e-03f, -1.530894333e-03f, -1.530095317e-03f, -1.529293702e-03f, -1.528489489e-03f, -1.527682679e-03f, -1.526873275e-03f, -1.526061277e-03f,
--1.525246688e-03f, -1.524429508e-03f, -1.523609740e-03f, -1.522787384e-03f, -1.521962444e-03f, -1.521134919e-03f, -1.520304812e-03f, -1.519472124e-03f, -1.518636857e-03f, -1.517799013e-03f,
--1.516958592e-03f, -1.516115597e-03f, -1.515270029e-03f, -1.514421890e-03f, -1.513571182e-03f, -1.512717905e-03f, -1.511862063e-03f, -1.511003655e-03f, -1.510142684e-03f, -1.509279152e-03f,
--1.508413060e-03f, -1.507544410e-03f, -1.506673204e-03f, -1.505799442e-03f, -1.504923128e-03f, -1.504044261e-03f, -1.503162845e-03f, -1.502278881e-03f, -1.501392370e-03f, -1.500503314e-03f,
--1.499611715e-03f, -1.498717574e-03f, -1.497820894e-03f, -1.496921675e-03f, -1.496019920e-03f, -1.495115631e-03f, -1.494208808e-03f, -1.493299454e-03f, -1.492387570e-03f, -1.491473158e-03f,
--1.490556221e-03f, -1.489636758e-03f, -1.488714774e-03f, -1.487790268e-03f, -1.486863242e-03f, -1.485933700e-03f, -1.485001641e-03f, -1.484067069e-03f, -1.483129984e-03f, -1.482190389e-03f,
--1.481248286e-03f, -1.480303675e-03f, -1.479356559e-03f, -1.478406940e-03f, -1.477454819e-03f, -1.476500198e-03f, -1.475543080e-03f, -1.474583465e-03f, -1.473621355e-03f, -1.472656753e-03f,
--1.471689661e-03f, -1.470720079e-03f, -1.469748010e-03f, -1.468773456e-03f, -1.467796418e-03f, -1.466816898e-03f, -1.465834899e-03f, -1.464850421e-03f, -1.463863467e-03f, -1.462874039e-03f,
--1.461882139e-03f, -1.460887768e-03f, -1.459890927e-03f, -1.458891621e-03f, -1.457889849e-03f, -1.456885613e-03f, -1.455878917e-03f, -1.454869761e-03f, -1.453858147e-03f, -1.452844078e-03f,
--1.451827555e-03f, -1.450808580e-03f, -1.449787155e-03f, -1.448763283e-03f, -1.447736963e-03f, -1.446708200e-03f, -1.445676994e-03f, -1.444643348e-03f, -1.443607264e-03f, -1.442568743e-03f,
--1.441527787e-03f, -1.440484398e-03f, -1.439438579e-03f, -1.438390331e-03f, -1.437339656e-03f, -1.436286556e-03f, -1.435231033e-03f, -1.434173089e-03f, -1.433112726e-03f, -1.432049947e-03f,
--1.430984752e-03f, -1.429917143e-03f, -1.428847124e-03f, -1.427774696e-03f, -1.426699860e-03f, -1.425622619e-03f, -1.424542976e-03f, -1.423460931e-03f, -1.422376486e-03f, -1.421289645e-03f,
--1.420200409e-03f, -1.419108779e-03f, -1.418014758e-03f, -1.416918349e-03f, -1.415819552e-03f, -1.414718370e-03f, -1.413614805e-03f, -1.412508860e-03f, -1.411400535e-03f, -1.410289834e-03f,
--1.409176758e-03f, -1.408061309e-03f, -1.406943489e-03f, -1.405823301e-03f, -1.404700747e-03f, -1.403575828e-03f, -1.402448546e-03f, -1.401318905e-03f, -1.400186905e-03f, -1.399052549e-03f,
--1.397915839e-03f, -1.396776777e-03f, -1.395635365e-03f, -1.394491606e-03f, -1.393345500e-03f, -1.392197052e-03f, -1.391046262e-03f, -1.389893133e-03f, -1.388737667e-03f, -1.387579865e-03f,
--1.386419731e-03f, -1.385257266e-03f, -1.384092473e-03f, -1.382925353e-03f, -1.381755909e-03f, -1.380584143e-03f, -1.379410056e-03f, -1.378233652e-03f, -1.377054933e-03f, -1.375873899e-03f,
--1.374690555e-03f, -1.373504901e-03f, -1.372316941e-03f, -1.371126675e-03f, -1.369934107e-03f, -1.368739239e-03f, -1.367542072e-03f, -1.366342610e-03f, -1.365140853e-03f, -1.363936805e-03f,
--1.362730468e-03f, -1.361521843e-03f, -1.360310934e-03f, -1.359097741e-03f, -1.357882269e-03f, -1.356664518e-03f, -1.355444491e-03f, -1.354222190e-03f, -1.352997617e-03f, -1.351770776e-03f,
--1.350541667e-03f, -1.349310293e-03f, -1.348076657e-03f, -1.346840761e-03f, -1.345602606e-03f, -1.344362196e-03f, -1.343119532e-03f, -1.341874617e-03f, -1.340627453e-03f, -1.339378043e-03f,
--1.338126388e-03f, -1.336872491e-03f, -1.335616354e-03f, -1.334357980e-03f, -1.333097370e-03f, -1.331834528e-03f, -1.330569455e-03f, -1.329302153e-03f, -1.328032626e-03f, -1.326760876e-03f,
--1.325486903e-03f, -1.324210712e-03f, -1.322932305e-03f, -1.321651683e-03f, -1.320368849e-03f, -1.319083805e-03f, -1.317796554e-03f, -1.316507098e-03f, -1.315215440e-03f, -1.313921581e-03f,
--1.312625525e-03f, -1.311327273e-03f, -1.310026827e-03f, -1.308724192e-03f, -1.307419367e-03f, -1.306112357e-03f, -1.304803163e-03f, -1.303491788e-03f, -1.302178234e-03f, -1.300862503e-03f,
--1.299544599e-03f, -1.298224523e-03f, -1.296902277e-03f, -1.295577865e-03f, -1.294251289e-03f, -1.292922550e-03f, -1.291591652e-03f, -1.290258596e-03f, -1.288923386e-03f, -1.287586023e-03f,
--1.286246511e-03f, -1.284904851e-03f, -1.283561046e-03f, -1.282215099e-03f, -1.280867011e-03f, -1.279516786e-03f, -1.278164426e-03f, -1.276809933e-03f, -1.275453309e-03f, -1.274094558e-03f,
--1.272733681e-03f, -1.271370682e-03f, -1.270005562e-03f, -1.268638324e-03f, -1.267268970e-03f, -1.265897504e-03f, -1.264523927e-03f, -1.263148243e-03f, -1.261770452e-03f, -1.260390559e-03f,
--1.259008566e-03f, -1.257624474e-03f, -1.256238287e-03f, -1.254850007e-03f, -1.253459636e-03f, -1.252067178e-03f, -1.250672634e-03f, -1.249276008e-03f, -1.247877301e-03f, -1.246476516e-03f,
--1.245073656e-03f, -1.243668723e-03f, -1.242261721e-03f, -1.240852650e-03f, -1.239441515e-03f, -1.238028317e-03f, -1.236613059e-03f, -1.235195744e-03f, -1.233776373e-03f, -1.232354951e-03f,
--1.230931479e-03f, -1.229505960e-03f, -1.228078396e-03f, -1.226648791e-03f, -1.225217146e-03f, -1.223783464e-03f, -1.222347748e-03f, -1.220910001e-03f, -1.219470225e-03f, -1.218028422e-03f,
--1.216584595e-03f, -1.215138748e-03f, -1.213690881e-03f, -1.212240999e-03f, -1.210789104e-03f, -1.209335198e-03f, -1.207879284e-03f, -1.206421364e-03f, -1.204961442e-03f, -1.203499520e-03f,
--1.202035600e-03f, -1.200569685e-03f, -1.199101778e-03f, -1.197631881e-03f, -1.196159998e-03f, -1.194686130e-03f, -1.193210280e-03f, -1.191732452e-03f, -1.190252647e-03f, -1.188770869e-03f,
--1.187287120e-03f, -1.185801403e-03f, -1.184313720e-03f, -1.182824074e-03f, -1.181332468e-03f, -1.179838904e-03f, -1.178343386e-03f, -1.176845915e-03f, -1.175346496e-03f, -1.173845129e-03f,
--1.172341818e-03f, -1.170836566e-03f, -1.169329376e-03f, -1.167820249e-03f, -1.166309189e-03f, -1.164796199e-03f, -1.163281282e-03f, -1.161764439e-03f, -1.160245674e-03f, -1.158724989e-03f,
--1.157202388e-03f, -1.155677872e-03f, -1.154151445e-03f, -1.152623110e-03f, -1.151092869e-03f, -1.149560725e-03f, -1.148026680e-03f, -1.146490738e-03f, -1.144952901e-03f, -1.143413172e-03f,
--1.141871554e-03f, -1.140328049e-03f, -1.138782661e-03f, -1.137235392e-03f, -1.135686244e-03f, -1.134135222e-03f, -1.132582326e-03f, -1.131027561e-03f, -1.129470929e-03f, -1.127912433e-03f,
--1.126352075e-03f, -1.124789859e-03f, -1.123225787e-03f, -1.121659861e-03f, -1.120092086e-03f, -1.118522463e-03f, -1.116950996e-03f, -1.115377687e-03f, -1.113802540e-03f, -1.112225556e-03f,
--1.110646739e-03f, -1.109066091e-03f, -1.107483616e-03f, -1.105899316e-03f, -1.104313195e-03f, -1.102725254e-03f, -1.101135497e-03f, -1.099543927e-03f, -1.097950546e-03f, -1.096355357e-03f,
--1.094758364e-03f, -1.093159569e-03f, -1.091558975e-03f, -1.089956584e-03f, -1.088352401e-03f, -1.086746427e-03f, -1.085138665e-03f, -1.083529119e-03f, -1.081917790e-03f, -1.080304683e-03f,
--1.078689800e-03f, -1.077073144e-03f, -1.075454717e-03f, -1.073834524e-03f, -1.072212565e-03f, -1.070588846e-03f, -1.068963367e-03f, -1.067336133e-03f, -1.065707146e-03f, -1.064076409e-03f,
--1.062443926e-03f, -1.060809698e-03f, -1.059173729e-03f, -1.057536021e-03f, -1.055896579e-03f, -1.054255404e-03f, -1.052612500e-03f, -1.050967869e-03f, -1.049321515e-03f, -1.047673440e-03f,
--1.046023648e-03f, -1.044372140e-03f, -1.042718921e-03f, -1.041063994e-03f, -1.039407360e-03f, -1.037749024e-03f, -1.036088988e-03f, -1.034427254e-03f, -1.032763827e-03f, -1.031098709e-03f,
--1.029431902e-03f, -1.027763411e-03f, -1.026093238e-03f, -1.024421385e-03f, -1.022747857e-03f, -1.021072655e-03f, -1.019395783e-03f, -1.017717244e-03f, -1.016037041e-03f, -1.014355177e-03f,
--1.012671654e-03f, -1.010986477e-03f, -1.009299647e-03f, -1.007611168e-03f, -1.005921043e-03f, -1.004229275e-03f, -1.002535867e-03f, -1.000840822e-03f, -9.991441425e-04f, -9.974458322e-04f,
--9.957458940e-04f, -9.940443308e-04f, -9.923411457e-04f, -9.906363417e-04f, -9.889299219e-04f, -9.872218893e-04f, -9.855122469e-04f, -9.838009977e-04f, -9.820881449e-04f, -9.803736915e-04f,
--9.786576405e-04f, -9.769399951e-04f, -9.752207581e-04f, -9.734999328e-04f, -9.717775222e-04f, -9.700535293e-04f, -9.683279572e-04f, -9.666008090e-04f, -9.648720878e-04f, -9.631417966e-04f,
--9.614099385e-04f, -9.596765166e-04f, -9.579415340e-04f, -9.562049938e-04f, -9.544668990e-04f, -9.527272528e-04f, -9.509860582e-04f, -9.492433184e-04f, -9.474990364e-04f, -9.457532154e-04f,
--9.440058584e-04f, -9.422569686e-04f, -9.405065490e-04f, -9.387546029e-04f, -9.370011332e-04f, -9.352461431e-04f, -9.334896358e-04f, -9.317316143e-04f, -9.299720818e-04f, -9.282110414e-04f,
--9.264484962e-04f, -9.246844494e-04f, -9.229189041e-04f, -9.211518635e-04f, -9.193833306e-04f, -9.176133086e-04f, -9.158418007e-04f, -9.140688100e-04f, -9.122943396e-04f, -9.105183928e-04f,
--9.087409726e-04f, -9.069620822e-04f, -9.051817248e-04f, -9.033999036e-04f, -9.016166216e-04f, -8.998318821e-04f, -8.980456882e-04f, -8.962580431e-04f, -8.944689500e-04f, -8.926784120e-04f,
--8.908864323e-04f, -8.890930142e-04f, -8.872981607e-04f, -8.855018751e-04f, -8.837041605e-04f, -8.819050202e-04f, -8.801044573e-04f, -8.783024750e-04f, -8.764990766e-04f, -8.746942651e-04f,
--8.728880439e-04f, -8.710804161e-04f, -8.692713849e-04f, -8.674609535e-04f, -8.656491252e-04f, -8.638359031e-04f, -8.620212904e-04f, -8.602052905e-04f, -8.583879064e-04f, -8.565691414e-04f,
--8.547489988e-04f, -8.529274817e-04f, -8.511045934e-04f, -8.492803372e-04f, -8.474547161e-04f, -8.456277336e-04f, -8.437993927e-04f, -8.419696968e-04f, -8.401386491e-04f, -8.383062528e-04f,
--8.364725111e-04f, -8.346374274e-04f, -8.328010049e-04f, -8.309632468e-04f, -8.291241563e-04f, -8.272837367e-04f, -8.254419914e-04f, -8.235989234e-04f, -8.217545362e-04f, -8.199088329e-04f,
--8.180618169e-04f, -8.162134913e-04f, -8.143638595e-04f, -8.125129247e-04f, -8.106606903e-04f, -8.088071594e-04f, -8.069523353e-04f, -8.050962214e-04f, -8.032388210e-04f, -8.013801372e-04f,
--7.995201734e-04f, -7.976589328e-04f, -7.957964189e-04f, -7.939326348e-04f, -7.920675838e-04f, -7.902012693e-04f, -7.883336945e-04f, -7.864648628e-04f, -7.845947773e-04f, -7.827234416e-04f,
--7.808508588e-04f, -7.789770322e-04f, -7.771019652e-04f, -7.752256611e-04f, -7.733481232e-04f, -7.714693548e-04f, -7.695893592e-04f, -7.677081397e-04f, -7.658256997e-04f, -7.639420425e-04f,
--7.620571714e-04f, -7.601710898e-04f, -7.582838009e-04f, -7.563953081e-04f, -7.545056147e-04f, -7.526147241e-04f, -7.507226396e-04f, -7.488293646e-04f, -7.469349023e-04f, -7.450392561e-04f,
--7.431424294e-04f, -7.412444255e-04f, -7.393452477e-04f, -7.374448995e-04f, -7.355433841e-04f, -7.336407049e-04f, -7.317368653e-04f, -7.298318686e-04f, -7.279257182e-04f, -7.260184174e-04f,
--7.241099696e-04f, -7.222003782e-04f, -7.202896465e-04f, -7.183777779e-04f, -7.164647758e-04f, -7.145506435e-04f, -7.126353844e-04f, -7.107190019e-04f, -7.088014994e-04f, -7.068828802e-04f,
--7.049631477e-04f, -7.030423053e-04f, -7.011203564e-04f, -6.991973043e-04f, -6.972731525e-04f, -6.953479044e-04f, -6.934215633e-04f, -6.914941326e-04f, -6.895656157e-04f, -6.876360160e-04f,
--6.857053369e-04f, -6.837735819e-04f, -6.818407542e-04f, -6.799068574e-04f, -6.779718947e-04f, -6.760358697e-04f, -6.740987857e-04f, -6.721606461e-04f, -6.702214543e-04f, -6.682812139e-04f,
--6.663399280e-04f, -6.643976003e-04f, -6.624542340e-04f, -6.605098327e-04f, -6.585643997e-04f, -6.566179384e-04f, -6.546704523e-04f, -6.527219449e-04f, -6.507724194e-04f, -6.488218794e-04f,
--6.468703283e-04f, -6.449177695e-04f, -6.429642064e-04f, -6.410096426e-04f, -6.390540813e-04f, -6.370975261e-04f, -6.351399804e-04f, -6.331814476e-04f, -6.312219311e-04f, -6.292614345e-04f,
--6.272999612e-04f, -6.253375145e-04f, -6.233740980e-04f, -6.214097151e-04f, -6.194443693e-04f, -6.174780639e-04f, -6.155108025e-04f, -6.135425885e-04f, -6.115734254e-04f, -6.096033166e-04f,
--6.076322655e-04f, -6.056602758e-04f, -6.036873507e-04f, -6.017134938e-04f, -5.997387085e-04f, -5.977629983e-04f, -5.957863667e-04f, -5.938088171e-04f, -5.918303530e-04f, -5.898509779e-04f,
--5.878706952e-04f, -5.858895084e-04f, -5.839074211e-04f, -5.819244366e-04f, -5.799405585e-04f, -5.779557902e-04f, -5.759701352e-04f, -5.739835971e-04f, -5.719961792e-04f, -5.700078850e-04f,
--5.680187182e-04f, -5.660286820e-04f, -5.640377801e-04f, -5.620460159e-04f, -5.600533930e-04f, -5.580599147e-04f, -5.560655846e-04f, -5.540704062e-04f, -5.520743830e-04f, -5.500775185e-04f,
--5.480798162e-04f, -5.460812796e-04f, -5.440819121e-04f, -5.420817174e-04f, -5.400806988e-04f, -5.380788600e-04f, -5.360762043e-04f, -5.340727354e-04f, -5.320684567e-04f, -5.300633717e-04f,
--5.280574840e-04f, -5.260507971e-04f, -5.240433144e-04f, -5.220350395e-04f, -5.200259759e-04f, -5.180161272e-04f, -5.160054968e-04f, -5.139940882e-04f, -5.119819050e-04f, -5.099689508e-04f,
--5.079552289e-04f, -5.059407430e-04f, -5.039254966e-04f, -5.019094932e-04f, -4.998927363e-04f, -4.978752295e-04f, -4.958569763e-04f, -4.938379802e-04f, -4.918182447e-04f, -4.897977734e-04f,
--4.877765699e-04f, -4.857546376e-04f, -4.837319801e-04f, -4.817086009e-04f, -4.796845036e-04f, -4.776596917e-04f, -4.756341688e-04f, -4.736079383e-04f, -4.715810038e-04f, -4.695533690e-04f,
--4.675250372e-04f, -4.654960122e-04f, -4.634662973e-04f, -4.614358962e-04f, -4.594048124e-04f, -4.573730494e-04f, -4.553406109e-04f, -4.533075003e-04f, -4.512737212e-04f, -4.492392772e-04f,
--4.472041718e-04f, -4.451684086e-04f, -4.431319911e-04f, -4.410949229e-04f, -4.390572075e-04f, -4.370188486e-04f, -4.349798496e-04f, -4.329402141e-04f, -4.308999457e-04f, -4.288590480e-04f,
--4.268175244e-04f, -4.247753787e-04f, -4.227326143e-04f, -4.206892348e-04f, -4.186452437e-04f, -4.166006448e-04f, -4.145554414e-04f, -4.125096372e-04f, -4.104632357e-04f, -4.084162406e-04f,
--4.063686554e-04f, -4.043204836e-04f, -4.022717289e-04f, -4.002223948e-04f, -3.981724848e-04f, -3.961220027e-04f, -3.940709518e-04f, -3.920193359e-04f, -3.899671585e-04f, -3.879144232e-04f,
--3.858611335e-04f, -3.838072931e-04f, -3.817529055e-04f, -3.796979743e-04f, -3.776425030e-04f, -3.755864954e-04f, -3.735299549e-04f, -3.714728851e-04f, -3.694152896e-04f, -3.673571721e-04f,
--3.652985360e-04f, -3.632393851e-04f, -3.611797228e-04f, -3.591195527e-04f, -3.570588785e-04f, -3.549977038e-04f, -3.529360321e-04f, -3.508738670e-04f, -3.488112121e-04f, -3.467480711e-04f,
--3.446844474e-04f, -3.426203447e-04f, -3.405557667e-04f, -3.384907168e-04f, -3.364251987e-04f, -3.343592160e-04f, -3.322927723e-04f, -3.302258711e-04f, -3.281585161e-04f, -3.260907109e-04f,
--3.240224591e-04f, -3.219537643e-04f, -3.198846300e-04f, -3.178150599e-04f, -3.157450576e-04f, -3.136746266e-04f, -3.116037707e-04f, -3.095324933e-04f, -3.074607982e-04f, -3.053886888e-04f,
--3.033161688e-04f, -3.012432419e-04f, -2.991699115e-04f, -2.970961814e-04f, -2.950220551e-04f, -2.929475363e-04f, -2.908726285e-04f, -2.887973353e-04f, -2.867216604e-04f, -2.846456074e-04f,
--2.825691799e-04f, -2.804923814e-04f, -2.784152157e-04f, -2.763376863e-04f, -2.742597968e-04f, -2.721815508e-04f, -2.701029520e-04f, -2.680240040e-04f, -2.659447103e-04f, -2.638650747e-04f,
--2.617851006e-04f, -2.597047918e-04f, -2.576241517e-04f, -2.555431842e-04f, -2.534618927e-04f, -2.513802809e-04f, -2.492983524e-04f, -2.472161108e-04f, -2.451335597e-04f, -2.430507028e-04f,
--2.409675436e-04f, -2.388840859e-04f, -2.368003331e-04f, -2.347162890e-04f, -2.326319571e-04f, -2.305473410e-04f, -2.284624445e-04f, -2.263772710e-04f, -2.242918243e-04f, -2.222061079e-04f,
--2.201201254e-04f, -2.180338806e-04f, -2.159473769e-04f, -2.138606181e-04f, -2.117736077e-04f, -2.096863494e-04f, -2.075988467e-04f, -2.055111034e-04f, -2.034231230e-04f, -2.013349092e-04f,
--1.992464655e-04f, -1.971577957e-04f, -1.950689033e-04f, -1.929797919e-04f, -1.908904652e-04f, -1.888009268e-04f, -1.867111803e-04f, -1.846212293e-04f, -1.825310775e-04f, -1.804407285e-04f,
--1.783501860e-04f, -1.762594534e-04f, -1.741685346e-04f, -1.720774330e-04f, -1.699861523e-04f, -1.678946962e-04f, -1.658030683e-04f, -1.637112721e-04f, -1.616193113e-04f, -1.595271896e-04f,
--1.574349106e-04f, -1.553424779e-04f, -1.532498950e-04f, -1.511571658e-04f, -1.490642936e-04f, -1.469712823e-04f, -1.448781354e-04f, -1.427848566e-04f, -1.406914494e-04f, -1.385979175e-04f,
--1.365042646e-04f, -1.344104942e-04f, -1.323166100e-04f, -1.302226156e-04f, -1.281285146e-04f, -1.260343106e-04f, -1.239400074e-04f, -1.218456084e-04f, -1.197511174e-04f, -1.176565379e-04f,
--1.155618737e-04f, -1.134671282e-04f, -1.113723052e-04f, -1.092774082e-04f, -1.071824409e-04f, -1.050874069e-04f, -1.029923099e-04f, -1.008971534e-04f, -9.880194107e-05f, -9.670667658e-05f,
--9.461136352e-05f, -9.251600552e-05f, -9.042060621e-05f, -8.832516921e-05f, -8.622969813e-05f, -8.413419662e-05f, -8.203866828e-05f, -7.994311675e-05f, -7.784754565e-05f, -7.575195860e-05f,
--7.365635923e-05f, -7.156075115e-05f, -6.946513799e-05f, -6.736952338e-05f, -6.527391093e-05f, -6.317830427e-05f, -6.108270702e-05f, -5.898712281e-05f, -5.689155525e-05f, -5.479600796e-05f,
--5.270048457e-05f, -5.060498870e-05f, -4.850952396e-05f, -4.641409399e-05f, -4.431870239e-05f, -4.222335279e-05f, -4.012804881e-05f, -3.803279406e-05f, -3.593759218e-05f, -3.384244676e-05f,
--3.174736144e-05f, -2.965233984e-05f, -2.755738556e-05f, -2.546250223e-05f, -2.336769346e-05f, -2.127296287e-05f, -1.917831408e-05f, -1.708375071e-05f, -1.498927636e-05f, -1.289489466e-05f,
--1.080060921e-05f, -8.706423645e-06f, -6.612341565e-06f, -4.518366587e-06f, -2.424502325e-06f, -3.307523924e-07f, 1.762879599e-06f, 3.856390035e-06f, 5.949775306e-06f, 8.043031800e-06f,
-1.013615590e-05f, 1.222914401e-05f, 1.432199251e-05f, 1.641469778e-05f, 1.850725623e-05f, 2.059966424e-05f, 2.269191821e-05f, 2.478401452e-05f, 2.687594957e-05f, 2.896771976e-05f,
-3.105932147e-05f, 3.315075110e-05f, 3.524200504e-05f, 3.733307969e-05f, 3.942397145e-05f, 4.151467671e-05f, 4.360519187e-05f, 4.569551332e-05f, 4.778563746e-05f, 4.987556070e-05f,
-5.196527942e-05f, 5.405479003e-05f, 5.614408894e-05f, 5.823317253e-05f, 6.032203721e-05f, 6.241067938e-05f, 6.449909545e-05f, 6.658728182e-05f, 6.867523488e-05f, 7.076295105e-05f,
-7.285042673e-05f, 7.493765833e-05f, 7.702464224e-05f, 7.911137488e-05f, 8.119785266e-05f, 8.328407197e-05f, 8.537002924e-05f, 8.745572087e-05f, 8.954114326e-05f, 9.162629284e-05f,
-9.371116600e-05f, 9.579575917e-05f, 9.788006876e-05f, 9.996409117e-05f, 1.020478228e-04f, 1.041312601e-04f, 1.062143995e-04f, 1.082972374e-04f, 1.103797702e-04f, 1.124619943e-04f,
-1.145439061e-04f, 1.166255021e-04f, 1.187067787e-04f, 1.207877322e-04f, 1.228683592e-04f, 1.249486561e-04f, 1.270286192e-04f, 1.291082450e-04f, 1.311875299e-04f, 1.332664703e-04f,
-1.353450627e-04f, 1.374233035e-04f, 1.395011891e-04f, 1.415787160e-04f, 1.436558805e-04f, 1.457326792e-04f, 1.478091084e-04f, 1.498851645e-04f, 1.519608441e-04f, 1.540361434e-04f,
-1.561110591e-04f, 1.581855874e-04f, 1.602597249e-04f, 1.623334680e-04f, 1.644068131e-04f, 1.664797566e-04f, 1.685522951e-04f, 1.706244248e-04f, 1.726961424e-04f, 1.747674441e-04f,
-1.768383265e-04f, 1.789087861e-04f, 1.809788191e-04f, 1.830484222e-04f, 1.851175917e-04f, 1.871863241e-04f, 1.892546158e-04f, 1.913224633e-04f, 1.933898631e-04f, 1.954568115e-04f,
-1.975233051e-04f, 1.995893403e-04f, 2.016549135e-04f, 2.037200212e-04f, 2.057846599e-04f, 2.078488261e-04f, 2.099125161e-04f, 2.119757264e-04f, 2.140384535e-04f, 2.161006939e-04f,
-2.181624441e-04f, 2.202237004e-04f, 2.222844594e-04f, 2.243447175e-04f, 2.264044711e-04f, 2.284637169e-04f, 2.305224511e-04f, 2.325806704e-04f, 2.346383711e-04f, 2.366955497e-04f,
-2.387522028e-04f, 2.408083267e-04f, 2.428639181e-04f, 2.449189732e-04f, 2.469734887e-04f, 2.490274610e-04f, 2.510808865e-04f, 2.531337618e-04f, 2.551860833e-04f, 2.572378476e-04f,
-2.592890511e-04f, 2.613396902e-04f, 2.633897616e-04f, 2.654392616e-04f, 2.674881868e-04f, 2.695365337e-04f, 2.715842986e-04f, 2.736314783e-04f, 2.756780690e-04f, 2.777240674e-04f,
-2.797694699e-04f, 2.818142730e-04f, 2.838584732e-04f, 2.859020671e-04f, 2.879450511e-04f, 2.899874217e-04f, 2.920291755e-04f, 2.940703089e-04f, 2.961108184e-04f, 2.981507006e-04f,
-3.001899519e-04f, 3.022285689e-04f, 3.042665481e-04f, 3.063038860e-04f, 3.083405791e-04f, 3.103766240e-04f, 3.124120171e-04f, 3.144467549e-04f, 3.164808340e-04f, 3.185142510e-04f,
-3.205470022e-04f, 3.225790844e-04f, 3.246104939e-04f, 3.266412273e-04f, 3.286712811e-04f, 3.307006519e-04f, 3.327293362e-04f, 3.347573305e-04f, 3.367846313e-04f, 3.388112353e-04f,
-3.408371389e-04f, 3.428623386e-04f, 3.448868311e-04f, 3.469106128e-04f, 3.489336803e-04f, 3.509560301e-04f, 3.529776588e-04f, 3.549985629e-04f, 3.570187390e-04f, 3.590381836e-04f,
-3.610568933e-04f, 3.630748646e-04f, 3.650920941e-04f, 3.671085783e-04f, 3.691243138e-04f, 3.711392972e-04f, 3.731535249e-04f, 3.751669936e-04f, 3.771796999e-04f, 3.791916402e-04f,
-3.812028112e-04f, 3.832132095e-04f, 3.852228315e-04f, 3.872316739e-04f, 3.892397332e-04f, 3.912470060e-04f, 3.932534890e-04f, 3.952591785e-04f, 3.972640714e-04f, 3.992681640e-04f,
-4.012714530e-04f, 4.032739351e-04f, 4.052756066e-04f, 4.072764644e-04f, 4.092765049e-04f, 4.112757247e-04f, 4.132741204e-04f, 4.152716886e-04f, 4.172684260e-04f, 4.192643290e-04f,
-4.212593944e-04f, 4.232536186e-04f, 4.252469984e-04f, 4.272395302e-04f, 4.292312108e-04f, 4.312220366e-04f, 4.332120044e-04f, 4.352011107e-04f, 4.371893521e-04f, 4.391767253e-04f,
-4.411632269e-04f, 4.431488534e-04f, 4.451336015e-04f, 4.471174678e-04f, 4.491004490e-04f, 4.510825416e-04f, 4.530637423e-04f, 4.550440477e-04f, 4.570234545e-04f, 4.590019592e-04f,
-4.609795585e-04f, 4.629562490e-04f, 4.649320274e-04f, 4.669068903e-04f, 4.688808344e-04f, 4.708538562e-04f, 4.728259524e-04f, 4.747971197e-04f, 4.767673547e-04f, 4.787366540e-04f,
-4.807050144e-04f, 4.826724324e-04f, 4.846389047e-04f, 4.866044280e-04f, 4.885689989e-04f, 4.905326141e-04f, 4.924952702e-04f, 4.944569639e-04f, 4.964176918e-04f, 4.983774507e-04f,
-5.003362372e-04f, 5.022940480e-04f, 5.042508797e-04f, 5.062067289e-04f, 5.081615925e-04f, 5.101154671e-04f, 5.120683492e-04f, 5.140202357e-04f, 5.159711232e-04f, 5.179210084e-04f,
-5.198698879e-04f, 5.218177585e-04f, 5.237646168e-04f, 5.257104596e-04f, 5.276552836e-04f, 5.295990853e-04f, 5.315418616e-04f, 5.334836091e-04f, 5.354243246e-04f, 5.373640046e-04f,
-5.393026461e-04f, 5.412402455e-04f, 5.431767997e-04f, 5.451123054e-04f, 5.470467593e-04f, 5.489801581e-04f, 5.509124985e-04f, 5.528437772e-04f, 5.547739910e-04f, 5.567031366e-04f,
-5.586312107e-04f, 5.605582100e-04f, 5.624841312e-04f, 5.644089712e-04f, 5.663327266e-04f, 5.682553942e-04f, 5.701769707e-04f, 5.720974528e-04f, 5.740168374e-04f, 5.759351210e-04f,
-5.778523005e-04f, 5.797683727e-04f, 5.816833342e-04f, 5.835971819e-04f, 5.855099125e-04f, 5.874215227e-04f, 5.893320093e-04f, 5.912413691e-04f, 5.931495988e-04f, 5.950566951e-04f,
-5.969626550e-04f, 5.988674751e-04f, 6.007711522e-04f, 6.026736830e-04f, 6.045750644e-04f, 6.064752932e-04f, 6.083743660e-04f, 6.102722798e-04f, 6.121690312e-04f, 6.140646171e-04f,
-6.159590343e-04f, 6.178522795e-04f, 6.197443495e-04f, 6.216352412e-04f, 6.235249513e-04f, 6.254134767e-04f, 6.273008141e-04f, 6.291869603e-04f, 6.310719122e-04f, 6.329556666e-04f,
-6.348382202e-04f, 6.367195699e-04f, 6.385997125e-04f, 6.404786448e-04f, 6.423563637e-04f, 6.442328659e-04f, 6.461081484e-04f, 6.479822078e-04f, 6.498550411e-04f, 6.517266451e-04f,
-6.535970166e-04f, 6.554661524e-04f, 6.573340494e-04f, 6.592007045e-04f, 6.610661144e-04f, 6.629302761e-04f, 6.647931863e-04f, 6.666548420e-04f, 6.685152399e-04f, 6.703743769e-04f,
-6.722322500e-04f, 6.740888559e-04f, 6.759441914e-04f, 6.777982536e-04f, 6.796510392e-04f, 6.815025451e-04f, 6.833527682e-04f, 6.852017054e-04f, 6.870493535e-04f, 6.888957094e-04f,
-6.907407700e-04f, 6.925845322e-04f, 6.944269928e-04f, 6.962681488e-04f, 6.981079971e-04f, 6.999465345e-04f, 7.017837579e-04f, 7.036196643e-04f, 7.054542505e-04f, 7.072875134e-04f,
-7.091194500e-04f, 7.109500572e-04f, 7.127793318e-04f, 7.146072707e-04f, 7.164338710e-04f, 7.182591295e-04f, 7.200830432e-04f, 7.219056088e-04f, 7.237268235e-04f, 7.255466841e-04f,
-7.273651875e-04f, 7.291823307e-04f, 7.309981107e-04f, 7.328125242e-04f, 7.346255684e-04f, 7.364372401e-04f, 7.382475363e-04f, 7.400564539e-04f, 7.418639899e-04f, 7.436701412e-04f,
-7.454749049e-04f, 7.472782778e-04f, 7.490802568e-04f, 7.508808391e-04f, 7.526800215e-04f, 7.544778011e-04f, 7.562741747e-04f, 7.580691394e-04f, 7.598626921e-04f, 7.616548298e-04f,
-7.634455495e-04f, 7.652348483e-04f, 7.670227230e-04f, 7.688091706e-04f, 7.705941882e-04f, 7.723777728e-04f, 7.741599213e-04f, 7.759406307e-04f, 7.777198981e-04f, 7.794977205e-04f,
-7.812740949e-04f, 7.830490182e-04f, 7.848224875e-04f, 7.865944998e-04f, 7.883650522e-04f, 7.901341416e-04f, 7.919017651e-04f, 7.936679197e-04f, 7.954326024e-04f, 7.971958103e-04f,
-7.989575404e-04f, 8.007177897e-04f, 8.024765554e-04f, 8.042338343e-04f, 8.059896237e-04f, 8.077439204e-04f, 8.094967217e-04f, 8.112480244e-04f, 8.129978258e-04f, 8.147461228e-04f,
-8.164929125e-04f, 8.182381920e-04f, 8.199819584e-04f, 8.217242086e-04f, 8.234649399e-04f, 8.252041492e-04f, 8.269418337e-04f, 8.286779904e-04f, 8.304126164e-04f, 8.321457089e-04f,
-8.338772648e-04f, 8.356072814e-04f, 8.373357556e-04f, 8.390626846e-04f, 8.407880655e-04f, 8.425118954e-04f, 8.442341714e-04f, 8.459548906e-04f, 8.476740502e-04f, 8.493916472e-04f,
-8.511076788e-04f, 8.528221420e-04f, 8.545350341e-04f, 8.562463521e-04f, 8.579560932e-04f, 8.596642545e-04f, 8.613708331e-04f, 8.630758263e-04f, 8.647792310e-04f, 8.664810446e-04f,
-8.681812640e-04f, 8.698798865e-04f, 8.715769093e-04f, 8.732723294e-04f, 8.749661441e-04f, 8.766583505e-04f, 8.783489457e-04f, 8.800379270e-04f, 8.817252915e-04f, 8.834110365e-04f,
-8.850951589e-04f, 8.867776562e-04f, 8.884585253e-04f, 8.901377636e-04f, 8.918153682e-04f, 8.934913363e-04f, 8.951656650e-04f, 8.968383517e-04f, 8.985093935e-04f, 9.001787876e-04f,
-9.018465312e-04f, 9.035126215e-04f, 9.051770558e-04f, 9.068398312e-04f, 9.085009449e-04f, 9.101603943e-04f, 9.118181765e-04f, 9.134742887e-04f, 9.151287283e-04f, 9.167814923e-04f,
-9.184325781e-04f, 9.200819829e-04f, 9.217297039e-04f, 9.233757385e-04f, 9.250200837e-04f, 9.266627370e-04f, 9.283036955e-04f, 9.299429565e-04f, 9.315805173e-04f, 9.332163751e-04f,
-9.348505272e-04f, 9.364829709e-04f, 9.381137034e-04f, 9.397427221e-04f, 9.413700242e-04f, 9.429956070e-04f, 9.446194678e-04f, 9.462416038e-04f, 9.478620124e-04f, 9.494806909e-04f,
-9.510976365e-04f, 9.527128467e-04f, 9.543263185e-04f, 9.559380495e-04f, 9.575480369e-04f, 9.591562780e-04f, 9.607627701e-04f, 9.623675106e-04f, 9.639704967e-04f, 9.655717259e-04f,
-9.671711954e-04f, 9.687689025e-04f, 9.703648447e-04f, 9.719590193e-04f, 9.735514235e-04f, 9.751420548e-04f, 9.767309105e-04f, 9.783179880e-04f, 9.799032845e-04f, 9.814867975e-04f,
-9.830685244e-04f, 9.846484625e-04f, 9.862266091e-04f, 9.878029617e-04f, 9.893775176e-04f, 9.909502742e-04f, 9.925212289e-04f, 9.940903791e-04f, 9.956577221e-04f, 9.972232554e-04f,
-9.987869764e-04f, 1.000348882e-03f, 1.001908971e-03f, 1.003467239e-03f, 1.005023685e-03f, 1.006578305e-03f, 1.008131097e-03f, 1.009682059e-03f, 1.011231188e-03f, 1.012778481e-03f,
-1.014323936e-03f, 1.015867551e-03f, 1.017409322e-03f, 1.018949247e-03f, 1.020487323e-03f, 1.022023549e-03f, 1.023557921e-03f, 1.025090437e-03f, 1.026621094e-03f, 1.028149890e-03f,
-1.029676822e-03f, 1.031201889e-03f, 1.032725086e-03f, 1.034246412e-03f, 1.035765864e-03f, 1.037283440e-03f, 1.038799137e-03f, 1.040312952e-03f, 1.041824884e-03f, 1.043334929e-03f,
-1.044843086e-03f, 1.046349351e-03f, 1.047853722e-03f, 1.049356196e-03f, 1.050856772e-03f, 1.052355447e-03f, 1.053852217e-03f, 1.055347081e-03f, 1.056840037e-03f, 1.058331081e-03f,
-1.059820211e-03f, 1.061307426e-03f, 1.062792721e-03f, 1.064276095e-03f, 1.065757546e-03f, 1.067237071e-03f, 1.068714667e-03f, 1.070190332e-03f, 1.071664064e-03f, 1.073135860e-03f,
-1.074605718e-03f, 1.076073635e-03f, 1.077539610e-03f, 1.079003638e-03f, 1.080465719e-03f, 1.081925849e-03f, 1.083384026e-03f, 1.084840249e-03f, 1.086294513e-03f, 1.087746818e-03f,
-1.089197160e-03f, 1.090645538e-03f, 1.092091948e-03f, 1.093536389e-03f, 1.094978857e-03f, 1.096419352e-03f, 1.097857869e-03f, 1.099294408e-03f, 1.100728965e-03f, 1.102161538e-03f,
-1.103592125e-03f, 1.105020724e-03f, 1.106447332e-03f, 1.107871946e-03f, 1.109294565e-03f, 1.110715186e-03f, 1.112133806e-03f, 1.113550424e-03f, 1.114965037e-03f, 1.116377642e-03f,
-1.117788238e-03f, 1.119196822e-03f, 1.120603392e-03f, 1.122007945e-03f, 1.123410479e-03f, 1.124810992e-03f, 1.126209481e-03f, 1.127605945e-03f, 1.129000380e-03f, 1.130392785e-03f,
-1.131783158e-03f, 1.133171495e-03f, 1.134557795e-03f, 1.135942056e-03f, 1.137324274e-03f, 1.138704449e-03f, 1.140082577e-03f, 1.141458656e-03f, 1.142832685e-03f, 1.144204660e-03f,
-1.145574580e-03f, 1.146942442e-03f, 1.148308244e-03f, 1.149671985e-03f, 1.151033660e-03f, 1.152393269e-03f, 1.153750809e-03f, 1.155106279e-03f, 1.156459674e-03f, 1.157810994e-03f,
-1.159160237e-03f, 1.160507399e-03f, 1.161852479e-03f, 1.163195475e-03f, 1.164536384e-03f, 1.165875205e-03f, 1.167211934e-03f, 1.168546570e-03f, 1.169879111e-03f, 1.171209554e-03f,
-1.172537897e-03f, 1.173864139e-03f, 1.175188276e-03f, 1.176510307e-03f, 1.177830230e-03f, 1.179148042e-03f, 1.180463741e-03f, 1.181777326e-03f, 1.183088793e-03f, 1.184398141e-03f,
-1.185705368e-03f, 1.187010471e-03f, 1.188313449e-03f, 1.189614299e-03f, 1.190913019e-03f, 1.192209607e-03f, 1.193504061e-03f, 1.194796378e-03f, 1.196086558e-03f, 1.197374596e-03f,
-1.198660492e-03f, 1.199944244e-03f, 1.201225849e-03f, 1.202505305e-03f, 1.203782610e-03f, 1.205057761e-03f, 1.206330758e-03f, 1.207601598e-03f, 1.208870278e-03f, 1.210136797e-03f,
-1.211401152e-03f, 1.212663342e-03f, 1.213923365e-03f, 1.215181218e-03f, 1.216436899e-03f, 1.217690407e-03f, 1.218941738e-03f, 1.220190893e-03f, 1.221437867e-03f, 1.222682659e-03f,
-1.223925268e-03f, 1.225165690e-03f, 1.226403925e-03f, 1.227639970e-03f, 1.228873823e-03f, 1.230105482e-03f, 1.231334945e-03f, 1.232562210e-03f, 1.233787275e-03f, 1.235010138e-03f,
-1.236230797e-03f, 1.237449250e-03f, 1.238665496e-03f, 1.239879531e-03f, 1.241091355e-03f, 1.242300965e-03f, 1.243508359e-03f, 1.244713535e-03f, 1.245916492e-03f, 1.247117227e-03f,
-1.248315738e-03f, 1.249512024e-03f, 1.250706082e-03f, 1.251897911e-03f, 1.253087509e-03f, 1.254274873e-03f, 1.255460002e-03f, 1.256642894e-03f, 1.257823547e-03f, 1.259001959e-03f,
-1.260178128e-03f, 1.261352052e-03f, 1.262523729e-03f, 1.263693158e-03f, 1.264860337e-03f, 1.266025263e-03f, 1.267187935e-03f, 1.268348351e-03f, 1.269506508e-03f, 1.270662406e-03f,
-1.271816042e-03f, 1.272967414e-03f, 1.274116521e-03f, 1.275263361e-03f, 1.276407931e-03f, 1.277550231e-03f, 1.278690257e-03f, 1.279828009e-03f, 1.280963484e-03f, 1.282096681e-03f,
-1.283227597e-03f, 1.284356232e-03f, 1.285482582e-03f, 1.286606647e-03f, 1.287728425e-03f, 1.288847913e-03f, 1.289965110e-03f, 1.291080014e-03f, 1.292192623e-03f, 1.293302936e-03f,
-1.294410950e-03f, 1.295516665e-03f, 1.296620077e-03f, 1.297721186e-03f, 1.298819989e-03f, 1.299916486e-03f, 1.301010673e-03f, 1.302102550e-03f, 1.303192114e-03f, 1.304279364e-03f,
-1.305364298e-03f, 1.306446914e-03f, 1.307527211e-03f, 1.308605186e-03f, 1.309680839e-03f, 1.310754167e-03f, 1.311825169e-03f, 1.312893842e-03f, 1.313960186e-03f, 1.315024198e-03f,
-1.316085877e-03f, 1.317145221e-03f, 1.318202229e-03f, 1.319256898e-03f, 1.320309227e-03f, 1.321359214e-03f, 1.322406859e-03f, 1.323452158e-03f, 1.324495110e-03f, 1.325535714e-03f,
-1.326573968e-03f, 1.327609870e-03f, 1.328643419e-03f, 1.329674612e-03f, 1.330703449e-03f, 1.331729928e-03f, 1.332754047e-03f, 1.333775804e-03f, 1.334795198e-03f, 1.335812227e-03f,
-1.336826889e-03f, 1.337839184e-03f, 1.338849108e-03f, 1.339856662e-03f, 1.340861842e-03f, 1.341864648e-03f, 1.342865078e-03f, 1.343863130e-03f, 1.344858803e-03f, 1.345852094e-03f,
-1.346843004e-03f, 1.347831529e-03f, 1.348817669e-03f, 1.349801421e-03f, 1.350782784e-03f, 1.351761758e-03f, 1.352738339e-03f, 1.353712527e-03f, 1.354684320e-03f, 1.355653716e-03f,
-1.356620715e-03f, 1.357585313e-03f, 1.358547511e-03f, 1.359507306e-03f, 1.360464696e-03f, 1.361419681e-03f, 1.362372259e-03f, 1.363322428e-03f, 1.364270187e-03f, 1.365215534e-03f,
-1.366158467e-03f, 1.367098986e-03f, 1.368037089e-03f, 1.368972774e-03f, 1.369906040e-03f, 1.370836886e-03f, 1.371765309e-03f, 1.372691308e-03f, 1.373614883e-03f, 1.374536031e-03f,
-1.375454751e-03f, 1.376371041e-03f, 1.377284901e-03f, 1.378196328e-03f, 1.379105322e-03f, 1.380011880e-03f, 1.380916002e-03f, 1.381817685e-03f, 1.382716930e-03f, 1.383613733e-03f,
-1.384508094e-03f, 1.385400012e-03f, 1.386289484e-03f, 1.387176510e-03f, 1.388061088e-03f, 1.388943217e-03f, 1.389822895e-03f, 1.390700120e-03f, 1.391574893e-03f, 1.392447211e-03f,
-1.393317072e-03f, 1.394184476e-03f, 1.395049422e-03f, 1.395911906e-03f, 1.396771930e-03f, 1.397629490e-03f, 1.398484586e-03f, 1.399337217e-03f, 1.400187380e-03f, 1.401035075e-03f,
-1.401880301e-03f, 1.402723056e-03f, 1.403563338e-03f, 1.404401147e-03f, 1.405236481e-03f, 1.406069339e-03f, 1.406899719e-03f, 1.407727621e-03f, 1.408553043e-03f, 1.409375983e-03f,
-1.410196440e-03f, 1.411014414e-03f, 1.411829903e-03f, 1.412642905e-03f, 1.413453419e-03f, 1.414261444e-03f, 1.415066980e-03f, 1.415870023e-03f, 1.416670574e-03f, 1.417468631e-03f,
-1.418264193e-03f, 1.419057259e-03f, 1.419847826e-03f, 1.420635895e-03f, 1.421421464e-03f, 1.422204532e-03f, 1.422985097e-03f, 1.423763158e-03f, 1.424538714e-03f, 1.425311764e-03f,
-1.426082307e-03f, 1.426850341e-03f, 1.427615866e-03f, 1.428378879e-03f, 1.429139381e-03f, 1.429897369e-03f, 1.430652843e-03f, 1.431405802e-03f, 1.432156243e-03f, 1.432904167e-03f,
-1.433649572e-03f, 1.434392456e-03f, 1.435132820e-03f, 1.435870661e-03f, 1.436605978e-03f, 1.437338770e-03f, 1.438069037e-03f, 1.438796777e-03f, 1.439521988e-03f, 1.440244671e-03f,
-1.440964823e-03f, 1.441682444e-03f, 1.442397532e-03f, 1.443110087e-03f, 1.443820107e-03f, 1.444527591e-03f, 1.445232539e-03f, 1.445934949e-03f, 1.446634819e-03f, 1.447332150e-03f,
-1.448026940e-03f, 1.448719187e-03f, 1.449408891e-03f, 1.450096051e-03f, 1.450780666e-03f, 1.451462734e-03f, 1.452142255e-03f, 1.452819228e-03f, 1.453493651e-03f, 1.454165523e-03f,
-1.454834845e-03f, 1.455501613e-03f, 1.456165829e-03f, 1.456827489e-03f, 1.457486595e-03f, 1.458143144e-03f, 1.458797135e-03f, 1.459448568e-03f, 1.460097441e-03f, 1.460743754e-03f,
-1.461387506e-03f, 1.462028696e-03f, 1.462667322e-03f, 1.463303383e-03f, 1.463936880e-03f, 1.464567810e-03f, 1.465196174e-03f, 1.465821969e-03f, 1.466445195e-03f, 1.467065852e-03f,
-1.467683937e-03f, 1.468299451e-03f, 1.468912392e-03f, 1.469522759e-03f, 1.470130552e-03f, 1.470735770e-03f, 1.471338411e-03f, 1.471938475e-03f, 1.472535961e-03f, 1.473130868e-03f,
-1.473723195e-03f, 1.474312941e-03f, 1.474900106e-03f, 1.475484688e-03f, 1.476066687e-03f, 1.476646101e-03f, 1.477222931e-03f, 1.477797175e-03f, 1.478368831e-03f, 1.478937901e-03f,
-1.479504382e-03f, 1.480068273e-03f, 1.480629575e-03f, 1.481188285e-03f, 1.481744404e-03f, 1.482297930e-03f, 1.482848863e-03f, 1.483397202e-03f, 1.483942946e-03f, 1.484486094e-03f,
-1.485026645e-03f, 1.485564600e-03f, 1.486099956e-03f, 1.486632713e-03f, 1.487162870e-03f, 1.487690427e-03f, 1.488215383e-03f, 1.488737737e-03f, 1.489257488e-03f, 1.489774635e-03f,
-1.490289179e-03f, 1.490801117e-03f, 1.491310450e-03f, 1.491817176e-03f, 1.492321296e-03f, 1.492822807e-03f, 1.493321710e-03f, 1.493818003e-03f, 1.494311686e-03f, 1.494802759e-03f,
-1.495291220e-03f, 1.495777069e-03f, 1.496260306e-03f, 1.496740928e-03f, 1.497218937e-03f, 1.497694331e-03f, 1.498167109e-03f, 1.498637271e-03f, 1.499104816e-03f, 1.499569744e-03f,
-1.500032053e-03f, 1.500491744e-03f, 1.500948815e-03f, 1.501403266e-03f, 1.501855096e-03f, 1.502304305e-03f, 1.502750892e-03f, 1.503194856e-03f, 1.503636197e-03f, 1.504074914e-03f,
-1.504511007e-03f, 1.504944474e-03f, 1.505375316e-03f, 1.505803532e-03f, 1.506229120e-03f, 1.506652082e-03f, 1.507072415e-03f, 1.507490120e-03f, 1.507905195e-03f, 1.508317641e-03f,
-1.508727456e-03f, 1.509134640e-03f, 1.509539194e-03f, 1.509941115e-03f, 1.510340403e-03f, 1.510737059e-03f, 1.511131080e-03f, 1.511522468e-03f, 1.511911221e-03f, 1.512297339e-03f,
-1.512680821e-03f, 1.513061667e-03f, 1.513439877e-03f, 1.513815449e-03f, 1.514188383e-03f, 1.514558679e-03f, 1.514926337e-03f, 1.515291355e-03f, 1.515653733e-03f, 1.516013472e-03f,
-1.516370569e-03f, 1.516725026e-03f, 1.517076841e-03f, 1.517426014e-03f, 1.517772545e-03f, 1.518116433e-03f, 1.518457677e-03f, 1.518796277e-03f, 1.519132234e-03f, 1.519465545e-03f,
-1.519796212e-03f, 1.520124233e-03f, 1.520449608e-03f, 1.520772337e-03f, 1.521092419e-03f, 1.521409854e-03f, 1.521724641e-03f, 1.522036781e-03f, 1.522346272e-03f, 1.522653114e-03f,
-1.522957308e-03f, 1.523258852e-03f, 1.523557746e-03f, 1.523853989e-03f, 1.524147583e-03f, 1.524438525e-03f, 1.524726816e-03f, 1.525012455e-03f, 1.525295443e-03f, 1.525575778e-03f,
-1.525853461e-03f, 1.526128490e-03f, 1.526400866e-03f, 1.526670589e-03f, 1.526937658e-03f, 1.527202072e-03f, 1.527463832e-03f, 1.527722937e-03f, 1.527979387e-03f, 1.528233182e-03f,
-1.528484320e-03f, 1.528732803e-03f, 1.528978630e-03f, 1.529221800e-03f, 1.529462313e-03f, 1.529700169e-03f, 1.529935368e-03f, 1.530167909e-03f, 1.530397792e-03f, 1.530625017e-03f,
-1.530849584e-03f, 1.531071492e-03f, 1.531290742e-03f, 1.531507332e-03f, 1.531721263e-03f, 1.531932535e-03f, 1.532141147e-03f, 1.532347099e-03f, 1.532550390e-03f, 1.532751022e-03f,
-1.532948993e-03f, 1.533144303e-03f, 1.533336953e-03f, 1.533526941e-03f, 1.533714269e-03f, 1.533898934e-03f, 1.534080939e-03f, 1.534260281e-03f, 1.534436962e-03f, 1.534610980e-03f,
-1.534782336e-03f, 1.534951030e-03f, 1.535117062e-03f, 1.535280431e-03f, 1.535441137e-03f, 1.535599180e-03f, 1.535754560e-03f, 1.535907277e-03f, 1.536057331e-03f, 1.536204721e-03f,
-1.536349448e-03f, 1.536491512e-03f, 1.536630912e-03f, 1.536767648e-03f, 1.536901720e-03f, 1.537033128e-03f, 1.537161873e-03f, 1.537287953e-03f, 1.537411369e-03f, 1.537532121e-03f,
-1.537650209e-03f, 1.537765633e-03f, 1.537878392e-03f, 1.537988487e-03f, 1.538095918e-03f, 1.538200684e-03f, 1.538302785e-03f, 1.538402222e-03f, 1.538498995e-03f, 1.538593103e-03f,
-1.538684546e-03f, 1.538773325e-03f, 1.538859440e-03f, 1.538942889e-03f, 1.539023675e-03f, 1.539101795e-03f, 1.539177252e-03f, 1.539250043e-03f, 1.539320171e-03f, 1.539387633e-03f,
-1.539452432e-03f, 1.539514566e-03f, 1.539574036e-03f, 1.539630841e-03f, 1.539684982e-03f, 1.539736460e-03f, 1.539785273e-03f, 1.539831422e-03f, 1.539874907e-03f, 1.539915728e-03f,
-1.539953885e-03f, 1.539989379e-03f, 1.540022209e-03f, 1.540052375e-03f, 1.540079878e-03f, 1.540104718e-03f, 1.540126895e-03f, 1.540146408e-03f, 1.540163258e-03f, 1.540177446e-03f,
-1.540188971e-03f, 1.540197833e-03f, 1.540204033e-03f, 1.540207570e-03f, 1.540208445e-03f, 1.540206659e-03f, 1.540202210e-03f, 1.540195100e-03f, 1.540185328e-03f, 1.540172894e-03f,
-1.540157800e-03f, 1.540140044e-03f, 1.540119628e-03f, 1.540096551e-03f, 1.540070813e-03f, 1.540042415e-03f, 1.540011357e-03f, 1.539977639e-03f, 1.539941262e-03f, 1.539902225e-03f,
-1.539860529e-03f, 1.539816174e-03f, 1.539769160e-03f, 1.539719487e-03f, 1.539667156e-03f, 1.539612168e-03f, 1.539554521e-03f, 1.539494217e-03f, 1.539431255e-03f, 1.539365636e-03f,
-1.539297361e-03f, 1.539226429e-03f, 1.539152841e-03f, 1.539076597e-03f, 1.538997697e-03f, 1.538916142e-03f, 1.538831931e-03f, 1.538745066e-03f, 1.538655546e-03f, 1.538563372e-03f,
-1.538468545e-03f, 1.538371063e-03f, 1.538270929e-03f, 1.538168141e-03f, 1.538062701e-03f, 1.537954608e-03f, 1.537843864e-03f, 1.537730468e-03f, 1.537614421e-03f, 1.537495723e-03f,
-1.537374374e-03f, 1.537250375e-03f, 1.537123727e-03f, 1.536994429e-03f, 1.536862482e-03f, 1.536727886e-03f, 1.536590642e-03f, 1.536450750e-03f, 1.536308210e-03f, 1.536163023e-03f,
-1.536015190e-03f, 1.535864710e-03f, 1.535711584e-03f, 1.535555813e-03f, 1.535397397e-03f, 1.535236336e-03f, 1.535072631e-03f, 1.534906282e-03f, 1.534737290e-03f, 1.534565655e-03f,
-1.534391377e-03f, 1.534214457e-03f, 1.534034896e-03f, 1.533852694e-03f, 1.533667851e-03f, 1.533480368e-03f, 1.533290245e-03f, 1.533097483e-03f, 1.532902083e-03f, 1.532704044e-03f,
-1.532503367e-03f, 1.532300053e-03f, 1.532094103e-03f, 1.531885516e-03f, 1.531674293e-03f, 1.531460435e-03f, 1.531243943e-03f, 1.531024816e-03f, 1.530803056e-03f, 1.530578663e-03f,
-1.530351637e-03f, 1.530121979e-03f, 1.529889689e-03f, 1.529654769e-03f, 1.529417218e-03f, 1.529177038e-03f, 1.528934228e-03f, 1.528688789e-03f, 1.528440723e-03f, 1.528190029e-03f,
-1.527936708e-03f, 1.527680760e-03f, 1.527422187e-03f, 1.527160989e-03f, 1.526897166e-03f, 1.526630719e-03f, 1.526361649e-03f, 1.526089956e-03f, 1.525815641e-03f, 1.525538705e-03f,
-1.525259147e-03f, 1.524976970e-03f, 1.524692172e-03f, 1.524404756e-03f, 1.524114722e-03f, 1.523822070e-03f, 1.523526801e-03f, 1.523228915e-03f, 1.522928414e-03f, 1.522625298e-03f,
-1.522319567e-03f, 1.522011223e-03f, 1.521700266e-03f, 1.521386697e-03f, 1.521070516e-03f, 1.520751724e-03f, 1.520430322e-03f, 1.520106310e-03f, 1.519779690e-03f, 1.519450461e-03f,
-1.519118625e-03f, 1.518784183e-03f, 1.518447135e-03f, 1.518107481e-03f, 1.517765223e-03f, 1.517420361e-03f, 1.517072897e-03f, 1.516722830e-03f, 1.516370161e-03f, 1.516014892e-03f,
-1.515657023e-03f, 1.515296555e-03f, 1.514933489e-03f, 1.514567824e-03f, 1.514199563e-03f, 1.513828706e-03f, 1.513455254e-03f, 1.513079207e-03f, 1.512700566e-03f, 1.512319333e-03f,
-1.511935507e-03f, 1.511549091e-03f, 1.511160084e-03f, 1.510768487e-03f, 1.510374301e-03f, 1.509977527e-03f, 1.509578167e-03f, 1.509176220e-03f, 1.508771687e-03f, 1.508364570e-03f,
-1.507954869e-03f, 1.507542585e-03f, 1.507127719e-03f, 1.506710272e-03f, 1.506290245e-03f, 1.505867638e-03f, 1.505442453e-03f, 1.505014690e-03f, 1.504584350e-03f, 1.504151434e-03f,
-1.503715943e-03f, 1.503277879e-03f, 1.502837241e-03f, 1.502394030e-03f, 1.501948248e-03f, 1.501499896e-03f, 1.501048974e-03f, 1.500595484e-03f, 1.500139426e-03f, 1.499680801e-03f,
-1.499219610e-03f, 1.498755855e-03f, 1.498289535e-03f, 1.497820653e-03f, 1.497349208e-03f, 1.496875203e-03f, 1.496398637e-03f, 1.495919512e-03f, 1.495437829e-03f, 1.494953589e-03f,
-1.494466793e-03f, 1.493977442e-03f, 1.493485536e-03f, 1.492991077e-03f, 1.492494066e-03f, 1.491994504e-03f, 1.491492391e-03f, 1.490987729e-03f, 1.490480519e-03f, 1.489970762e-03f,
-1.489458459e-03f, 1.488943611e-03f, 1.488426219e-03f, 1.487906283e-03f, 1.487383806e-03f, 1.486858788e-03f, 1.486331230e-03f, 1.485801133e-03f, 1.485268498e-03f, 1.484733327e-03f,
-1.484195620e-03f, 1.483655378e-03f, 1.483112603e-03f, 1.482567296e-03f, 1.482019457e-03f, 1.481469088e-03f, 1.480916190e-03f, 1.480360764e-03f, 1.479802811e-03f, 1.479242332e-03f,
-1.478679329e-03f, 1.478113802e-03f, 1.477545753e-03f, 1.476975182e-03f, 1.476402091e-03f, 1.475826481e-03f, 1.475248353e-03f, 1.474667708e-03f, 1.474084548e-03f, 1.473498873e-03f,
-1.472910685e-03f, 1.472319984e-03f, 1.471726773e-03f, 1.471131052e-03f, 1.470532822e-03f, 1.469932084e-03f, 1.469328841e-03f, 1.468723092e-03f, 1.468114839e-03f, 1.467504084e-03f,
-1.466890827e-03f, 1.466275070e-03f, 1.465656813e-03f, 1.465036059e-03f, 1.464412808e-03f, 1.463787062e-03f, 1.463158821e-03f, 1.462528087e-03f, 1.461894861e-03f, 1.461259145e-03f,
-1.460620940e-03f, 1.459980246e-03f, 1.459337066e-03f, 1.458691400e-03f, 1.458043250e-03f, 1.457392617e-03f, 1.456739501e-03f, 1.456083906e-03f, 1.455425831e-03f, 1.454765278e-03f,
-1.454102249e-03f, 1.453436744e-03f, 1.452768765e-03f, 1.452098313e-03f, 1.451425390e-03f, 1.450749997e-03f, 1.450072134e-03f, 1.449391804e-03f, 1.448709008e-03f, 1.448023747e-03f,
-1.447336022e-03f, 1.446645835e-03f, 1.445953187e-03f, 1.445258080e-03f, 1.444560514e-03f, 1.443860491e-03f, 1.443158013e-03f, 1.442453080e-03f, 1.441745694e-03f, 1.441035857e-03f,
-1.440323570e-03f, 1.439608834e-03f, 1.438891651e-03f, 1.438172022e-03f, 1.437449948e-03f, 1.436725431e-03f, 1.435998472e-03f, 1.435269072e-03f, 1.434537234e-03f, 1.433802958e-03f,
-1.433066245e-03f, 1.432327098e-03f, 1.431585517e-03f, 1.430841505e-03f, 1.430095061e-03f, 1.429346189e-03f, 1.428594889e-03f, 1.427841163e-03f, 1.427085011e-03f, 1.426326437e-03f,
-1.425565440e-03f, 1.424802023e-03f, 1.424036187e-03f, 1.423267934e-03f, 1.422497264e-03f, 1.421724180e-03f, 1.420948683e-03f, 1.420170773e-03f, 1.419390454e-03f, 1.418607726e-03f,
-1.417822591e-03f, 1.417035050e-03f, 1.416245105e-03f, 1.415452757e-03f, 1.414658008e-03f, 1.413860859e-03f, 1.413061312e-03f, 1.412259369e-03f, 1.411455030e-03f, 1.410648297e-03f,
-1.409839173e-03f, 1.409027658e-03f, 1.408213754e-03f, 1.407397462e-03f, 1.406578785e-03f, 1.405757723e-03f, 1.404934278e-03f, 1.404108452e-03f, 1.403280247e-03f, 1.402449663e-03f,
-1.401616703e-03f, 1.400781367e-03f, 1.399943659e-03f, 1.399103578e-03f, 1.398261127e-03f, 1.397416308e-03f, 1.396569122e-03f, 1.395719570e-03f, 1.394867654e-03f, 1.394013376e-03f,
-1.393156737e-03f, 1.392297740e-03f, 1.391436385e-03f, 1.390572674e-03f, 1.389706609e-03f, 1.388838192e-03f, 1.387967424e-03f, 1.387094306e-03f, 1.386218841e-03f, 1.385341030e-03f,
-1.384460875e-03f, 1.383578377e-03f, 1.382693538e-03f, 1.381806360e-03f, 1.380916844e-03f, 1.380024992e-03f, 1.379130806e-03f, 1.378234287e-03f, 1.377335437e-03f, 1.376434258e-03f,
-1.375530751e-03f, 1.374624919e-03f, 1.373716762e-03f, 1.372806283e-03f, 1.371893483e-03f, 1.370978365e-03f, 1.370060928e-03f, 1.369141177e-03f, 1.368219111e-03f, 1.367294733e-03f,
-1.366368044e-03f, 1.365439047e-03f, 1.364507743e-03f, 1.363574134e-03f, 1.362638221e-03f, 1.361700007e-03f, 1.360759492e-03f, 1.359816680e-03f, 1.358871570e-03f, 1.357924167e-03f,
-1.356974470e-03f, 1.356022482e-03f, 1.355068204e-03f, 1.354111639e-03f, 1.353152789e-03f, 1.352191654e-03f, 1.351228237e-03f, 1.350262539e-03f, 1.349294563e-03f, 1.348324310e-03f,
-1.347351782e-03f, 1.346376981e-03f, 1.345399908e-03f, 1.344420566e-03f, 1.343438956e-03f, 1.342455080e-03f, 1.341468940e-03f, 1.340480537e-03f, 1.339489874e-03f, 1.338496953e-03f,
-1.337501775e-03f, 1.336504342e-03f, 1.335504656e-03f, 1.334502718e-03f, 1.333498532e-03f, 1.332492097e-03f, 1.331483418e-03f, 1.330472494e-03f, 1.329459329e-03f, 1.328443923e-03f,
-1.327426280e-03f, 1.326406400e-03f, 1.325384286e-03f, 1.324359940e-03f, 1.323333363e-03f, 1.322304558e-03f, 1.321273525e-03f, 1.320240268e-03f, 1.319204788e-03f, 1.318167087e-03f,
-1.317127167e-03f, 1.316085030e-03f, 1.315040678e-03f, 1.313994112e-03f, 1.312945335e-03f, 1.311894349e-03f, 1.310841155e-03f, 1.309785755e-03f, 1.308728152e-03f, 1.307668348e-03f,
-1.306606344e-03f, 1.305542142e-03f, 1.304475744e-03f, 1.303407153e-03f, 1.302336370e-03f, 1.301263397e-03f, 1.300188236e-03f, 1.299110889e-03f, 1.298031359e-03f, 1.296949646e-03f,
-1.295865754e-03f, 1.294779684e-03f, 1.293691438e-03f, 1.292601018e-03f, 1.291508426e-03f, 1.290413664e-03f, 1.289316735e-03f, 1.288217640e-03f, 1.287116381e-03f, 1.286012960e-03f,
-1.284907379e-03f, 1.283799641e-03f, 1.282689747e-03f, 1.281577699e-03f, 1.280463500e-03f, 1.279347152e-03f, 1.278228656e-03f, 1.277108014e-03f, 1.275985229e-03f, 1.274860303e-03f,
-1.273733238e-03f, 1.272604035e-03f, 1.271472697e-03f, 1.270339227e-03f, 1.269203625e-03f, 1.268065895e-03f, 1.266926037e-03f, 1.265784056e-03f, 1.264639951e-03f, 1.263493726e-03f,
-1.262345383e-03f, 1.261194923e-03f, 1.260042350e-03f, 1.258887664e-03f, 1.257730868e-03f, 1.256571965e-03f, 1.255410956e-03f, 1.254247843e-03f, 1.253082629e-03f, 1.251915316e-03f,
-1.250745905e-03f, 1.249574400e-03f, 1.248400801e-03f, 1.247225112e-03f, 1.246047334e-03f, 1.244867470e-03f, 1.243685522e-03f, 1.242501492e-03f, 1.241315381e-03f, 1.240127193e-03f,
-1.238936929e-03f, 1.237744592e-03f, 1.236550184e-03f, 1.235353707e-03f, 1.234155162e-03f, 1.232954554e-03f, 1.231751882e-03f, 1.230547150e-03f, 1.229340361e-03f, 1.228131515e-03f,
-1.226920616e-03f, 1.225707665e-03f, 1.224492665e-03f, 1.223275618e-03f, 1.222056526e-03f, 1.220835392e-03f, 1.219612217e-03f, 1.218387004e-03f, 1.217159756e-03f, 1.215930473e-03f,
-1.214699159e-03f, 1.213465816e-03f, 1.212230446e-03f, 1.210993052e-03f, 1.209753635e-03f, 1.208512198e-03f, 1.207268743e-03f, 1.206023272e-03f, 1.204775788e-03f, 1.203526293e-03f,
-1.202274789e-03f, 1.201021278e-03f, 1.199765763e-03f, 1.198508247e-03f, 1.197248730e-03f, 1.195987216e-03f, 1.194723707e-03f, 1.193458206e-03f, 1.192190714e-03f, 1.190921233e-03f,
-1.189649767e-03f, 1.188376317e-03f, 1.187100886e-03f, 1.185823476e-03f, 1.184544089e-03f, 1.183262728e-03f, 1.181979395e-03f, 1.180694092e-03f, 1.179406822e-03f, 1.178117587e-03f,
-1.176826390e-03f, 1.175533232e-03f, 1.174238116e-03f, 1.172941045e-03f, 1.171642020e-03f, 1.170341045e-03f, 1.169038121e-03f, 1.167733251e-03f, 1.166426437e-03f, 1.165117681e-03f,
-1.163806987e-03f, 1.162494356e-03f, 1.161179791e-03f, 1.159863293e-03f, 1.158544867e-03f, 1.157224513e-03f, 1.155902234e-03f, 1.154578033e-03f, 1.153251912e-03f, 1.151923874e-03f,
-1.150593920e-03f, 1.149262054e-03f, 1.147928277e-03f, 1.146592592e-03f, 1.145255002e-03f, 1.143915509e-03f, 1.142574115e-03f, 1.141230823e-03f, 1.139885636e-03f, 1.138538555e-03f,
-1.137189583e-03f, 1.135838722e-03f, 1.134485975e-03f, 1.133131345e-03f, 1.131774834e-03f, 1.130416444e-03f, 1.129056178e-03f, 1.127694038e-03f, 1.126330027e-03f, 1.124964147e-03f,
-1.123596400e-03f, 1.122226790e-03f, 1.120855318e-03f, 1.119481987e-03f, 1.118106800e-03f, 1.116729759e-03f, 1.115350866e-03f, 1.113970124e-03f, 1.112587536e-03f, 1.111203104e-03f,
-1.109816830e-03f, 1.108428717e-03f, 1.107038768e-03f, 1.105646984e-03f, 1.104253369e-03f, 1.102857925e-03f, 1.101460655e-03f, 1.100061561e-03f, 1.098660645e-03f, 1.097257910e-03f,
-1.095853359e-03f, 1.094446994e-03f, 1.093038818e-03f, 1.091628833e-03f, 1.090217042e-03f, 1.088803447e-03f, 1.087388051e-03f, 1.085970856e-03f, 1.084551865e-03f, 1.083131081e-03f,
-1.081708506e-03f, 1.080284142e-03f, 1.078857993e-03f, 1.077430060e-03f, 1.076000347e-03f, 1.074568856e-03f, 1.073135589e-03f, 1.071700549e-03f, 1.070263739e-03f, 1.068825161e-03f,
-1.067384818e-03f, 1.065942712e-03f, 1.064498846e-03f, 1.063053223e-03f, 1.061605845e-03f, 1.060156715e-03f, 1.058705835e-03f, 1.057253208e-03f, 1.055798837e-03f, 1.054342724e-03f,
-1.052884872e-03f, 1.051425284e-03f, 1.049963961e-03f, 1.048500907e-03f, 1.047036125e-03f, 1.045569617e-03f, 1.044101385e-03f, 1.042631432e-03f, 1.041159761e-03f, 1.039686375e-03f,
-1.038211276e-03f, 1.036734467e-03f, 1.035255950e-03f, 1.033775728e-03f, 1.032293805e-03f, 1.030810181e-03f, 1.029324861e-03f, 1.027837846e-03f, 1.026349140e-03f, 1.024858745e-03f,
-1.023366664e-03f, 1.021872899e-03f, 1.020377453e-03f, 1.018880329e-03f, 1.017381530e-03f, 1.015881057e-03f, 1.014378915e-03f, 1.012875105e-03f, 1.011369631e-03f, 1.009862494e-03f,
-1.008353698e-03f, 1.006843245e-03f, 1.005331139e-03f, 1.003817381e-03f, 1.002301975e-03f, 1.000784922e-03f, 9.992662272e-04f, 9.977458915e-04f, 9.962239182e-04f, 9.947003100e-04f,
-9.931750696e-04f, 9.916481997e-04f, 9.901197031e-04f, 9.885895824e-04f, 9.870578405e-04f, 9.855244801e-04f, 9.839895039e-04f, 9.824529146e-04f, 9.809147150e-04f, 9.793749079e-04f,
-9.778334961e-04f, 9.762904821e-04f, 9.747458690e-04f, 9.731996593e-04f, 9.716518558e-04f, 9.701024614e-04f, 9.685514788e-04f, 9.669989107e-04f, 9.654447599e-04f, 9.638890293e-04f,
-9.623317216e-04f, 9.607728395e-04f, 9.592123859e-04f, 9.576503635e-04f, 9.560867752e-04f, 9.545216237e-04f, 9.529549118e-04f, 9.513866423e-04f, 9.498168181e-04f, 9.482454419e-04f,
-9.466725164e-04f, 9.450980447e-04f, 9.435220293e-04f, 9.419444733e-04f, 9.403653793e-04f, 9.387847501e-04f, 9.372025887e-04f, 9.356188978e-04f, 9.340336803e-04f, 9.324469390e-04f,
-9.308586766e-04f, 9.292688961e-04f, 9.276776003e-04f, 9.260847920e-04f, 9.244904741e-04f, 9.228946493e-04f, 9.212973206e-04f, 9.196984908e-04f, 9.180981627e-04f, 9.164963393e-04f,
-9.148930232e-04f, 9.132882175e-04f, 9.116819249e-04f, 9.100741483e-04f, 9.084648907e-04f, 9.068541547e-04f, 9.052419434e-04f, 9.036282596e-04f, 9.020131062e-04f, 9.003964860e-04f,
-8.987784019e-04f, 8.971588568e-04f, 8.955378536e-04f, 8.939153952e-04f, 8.922914844e-04f, 8.906661242e-04f, 8.890393174e-04f, 8.874110669e-04f, 8.857813757e-04f, 8.841502466e-04f,
-8.825176825e-04f, 8.808836864e-04f, 8.792482611e-04f, 8.776114096e-04f, 8.759731347e-04f, 8.743334394e-04f, 8.726923266e-04f, 8.710497992e-04f, 8.694058601e-04f, 8.677605122e-04f,
-8.661137586e-04f, 8.644656020e-04f, 8.628160455e-04f, 8.611650919e-04f, 8.595127442e-04f, 8.578590054e-04f, 8.562038783e-04f, 8.545473659e-04f, 8.528894712e-04f, 8.512301971e-04f,
-8.495695465e-04f, 8.479075224e-04f, 8.462441278e-04f, 8.445793656e-04f, 8.429132387e-04f, 8.412457501e-04f, 8.395769028e-04f, 8.379066997e-04f, 8.362351438e-04f, 8.345622381e-04f,
-8.328879855e-04f, 8.312123891e-04f, 8.295354517e-04f, 8.278571763e-04f, 8.261775660e-04f, 8.244966237e-04f, 8.228143524e-04f, 8.211307551e-04f, 8.194458347e-04f, 8.177595943e-04f,
-8.160720368e-04f, 8.143831653e-04f, 8.126929827e-04f, 8.110014920e-04f, 8.093086962e-04f, 8.076145983e-04f, 8.059192014e-04f, 8.042225084e-04f, 8.025245224e-04f, 8.008252463e-04f,
-7.991246831e-04f, 7.974228359e-04f, 7.957197077e-04f, 7.940153015e-04f, 7.923096203e-04f, 7.906026672e-04f, 7.888944452e-04f, 7.871849572e-04f, 7.854742063e-04f, 7.837621956e-04f,
-7.820489281e-04f, 7.803344068e-04f, 7.786186347e-04f, 7.769016149e-04f, 7.751833505e-04f, 7.734638444e-04f, 7.717430997e-04f, 7.700211195e-04f, 7.682979068e-04f, 7.665734646e-04f,
-7.648477960e-04f, 7.631209041e-04f, 7.613927919e-04f, 7.596634625e-04f, 7.579329189e-04f, 7.562011641e-04f, 7.544682014e-04f, 7.527340336e-04f, 7.509986639e-04f, 7.492620954e-04f,
-7.475243311e-04f, 7.457853740e-04f, 7.440452274e-04f, 7.423038942e-04f, 7.405613775e-04f, 7.388176804e-04f, 7.370728060e-04f, 7.353267573e-04f, 7.335795375e-04f, 7.318311496e-04f,
-7.300815968e-04f, 7.283308820e-04f, 7.265790085e-04f, 7.248259793e-04f, 7.230717975e-04f, 7.213164662e-04f, 7.195599884e-04f, 7.178023674e-04f, 7.160436062e-04f, 7.142837079e-04f,
-7.125226756e-04f, 7.107605124e-04f, 7.089972215e-04f, 7.072328059e-04f, 7.054672687e-04f, 7.037006132e-04f, 7.019328423e-04f, 7.001639593e-04f, 6.983939672e-04f, 6.966228691e-04f,
-6.948506682e-04f, 6.930773677e-04f, 6.913029705e-04f, 6.895274800e-04f, 6.877508991e-04f, 6.859732311e-04f, 6.841944791e-04f, 6.824146461e-04f, 6.806337354e-04f, 6.788517501e-04f,
-6.770686933e-04f, 6.752845681e-04f, 6.734993778e-04f, 6.717131254e-04f, 6.699258142e-04f, 6.681374472e-04f, 6.663480276e-04f, 6.645575586e-04f, 6.627660433e-04f, 6.609734848e-04f,
-6.591798864e-04f, 6.573852512e-04f, 6.555895824e-04f, 6.537928830e-04f, 6.519951564e-04f, 6.501964056e-04f, 6.483966338e-04f, 6.465958442e-04f, 6.447940399e-04f, 6.429912242e-04f,
-6.411874002e-04f, 6.393825710e-04f, 6.375767399e-04f, 6.357699101e-04f, 6.339620846e-04f, 6.321532668e-04f, 6.303434597e-04f, 6.285326666e-04f, 6.267208907e-04f, 6.249081351e-04f,
-6.230944030e-04f, 6.212796976e-04f, 6.194640222e-04f, 6.176473799e-04f, 6.158297738e-04f, 6.140112073e-04f, 6.121916834e-04f, 6.103712055e-04f, 6.085497766e-04f, 6.067274001e-04f,
-6.049040791e-04f, 6.030798167e-04f, 6.012546163e-04f, 5.994284810e-04f, 5.976014141e-04f, 5.957734187e-04f, 5.939444981e-04f, 5.921146554e-04f, 5.902838939e-04f, 5.884522169e-04f,
-5.866196274e-04f, 5.847861289e-04f, 5.829517243e-04f, 5.811164171e-04f, 5.792802104e-04f, 5.774431075e-04f, 5.756051115e-04f, 5.737662257e-04f, 5.719264533e-04f, 5.700857976e-04f,
-5.682442617e-04f, 5.664018490e-04f, 5.645585627e-04f, 5.627144059e-04f, 5.608693820e-04f, 5.590234941e-04f, 5.571767456e-04f, 5.553291396e-04f, 5.534806794e-04f, 5.516313682e-04f,
-5.497812093e-04f, 5.479302060e-04f, 5.460783614e-04f, 5.442256789e-04f, 5.423721616e-04f, 5.405178128e-04f, 5.386626359e-04f, 5.368066340e-04f, 5.349498103e-04f, 5.330921683e-04f,
-5.312337110e-04f, 5.293744418e-04f, 5.275143639e-04f, 5.256534806e-04f, 5.237917952e-04f, 5.219293108e-04f, 5.200660309e-04f, 5.182019586e-04f, 5.163370972e-04f, 5.144714500e-04f,
-5.126050202e-04f, 5.107378112e-04f, 5.088698261e-04f, 5.070010684e-04f, 5.051315411e-04f, 5.032612477e-04f, 5.013901914e-04f, 4.995183755e-04f, 4.976458032e-04f, 4.957724778e-04f,
-4.938984027e-04f, 4.920235810e-04f, 4.901480161e-04f, 4.882717113e-04f, 4.863946699e-04f, 4.845168950e-04f, 4.826383901e-04f, 4.807591585e-04f, 4.788792033e-04f, 4.769985279e-04f,
-4.751171356e-04f, 4.732350297e-04f, 4.713522134e-04f, 4.694686901e-04f, 4.675844631e-04f, 4.656995357e-04f, 4.638139111e-04f, 4.619275926e-04f, 4.600405837e-04f, 4.581528875e-04f,
-4.562645073e-04f, 4.543754465e-04f, 4.524857084e-04f, 4.505952963e-04f, 4.487042134e-04f, 4.468124632e-04f, 4.449200488e-04f, 4.430269737e-04f, 4.411332410e-04f, 4.392388542e-04f,
-4.373438166e-04f, 4.354481314e-04f, 4.335518019e-04f, 4.316548316e-04f, 4.297572236e-04f, 4.278589814e-04f, 4.259601082e-04f, 4.240606073e-04f, 4.221604821e-04f, 4.202597359e-04f,
-4.183583720e-04f, 4.164563938e-04f, 4.145538045e-04f, 4.126506074e-04f, 4.107468060e-04f, 4.088424036e-04f, 4.069374033e-04f, 4.050318087e-04f, 4.031256230e-04f, 4.012188495e-04f,
-3.993114916e-04f, 3.974035525e-04f, 3.954950358e-04f, 3.935859445e-04f, 3.916762822e-04f, 3.897660521e-04f, 3.878552576e-04f, 3.859439020e-04f, 3.840319886e-04f, 3.821195208e-04f,
-3.802065019e-04f, 3.782929352e-04f, 3.763788241e-04f, 3.744641720e-04f, 3.725489821e-04f, 3.706332579e-04f, 3.687170026e-04f, 3.668002196e-04f, 3.648829122e-04f, 3.629650838e-04f,
-3.610467377e-04f, 3.591278773e-04f, 3.572085060e-04f, 3.552886270e-04f, 3.533682437e-04f, 3.514473595e-04f, 3.495259776e-04f, 3.476041016e-04f, 3.456817347e-04f, 3.437588802e-04f,
-3.418355415e-04f, 3.399117220e-04f, 3.379874251e-04f, 3.360626540e-04f, 3.341374121e-04f, 3.322117028e-04f, 3.302855295e-04f, 3.283588954e-04f, 3.264318040e-04f, 3.245042586e-04f,
-3.225762626e-04f, 3.206478193e-04f, 3.187189321e-04f, 3.167896043e-04f, 3.148598393e-04f, 3.129296405e-04f, 3.109990112e-04f, 3.090679548e-04f, 3.071364747e-04f, 3.052045742e-04f,
-3.032722566e-04f, 3.013395254e-04f, 2.994063839e-04f, 2.974728355e-04f, 2.955388835e-04f, 2.936045313e-04f, 2.916697823e-04f, 2.897346398e-04f, 2.877991072e-04f, 2.858631879e-04f,
-2.839268852e-04f, 2.819902026e-04f, 2.800531433e-04f, 2.781157108e-04f, 2.761779083e-04f, 2.742397394e-04f, 2.723012074e-04f, 2.703623155e-04f, 2.684230673e-04f, 2.664834661e-04f,
-2.645435152e-04f, 2.626032180e-04f, 2.606625779e-04f, 2.587215983e-04f, 2.567802826e-04f, 2.548386340e-04f, 2.528966561e-04f, 2.509543521e-04f, 2.490117255e-04f, 2.470687796e-04f,
-2.451255178e-04f, 2.431819435e-04f, 2.412380601e-04f, 2.392938709e-04f, 2.373493793e-04f, 2.354045886e-04f, 2.334595024e-04f, 2.315141239e-04f, 2.295684565e-04f, 2.276225037e-04f,
-2.256762687e-04f, 2.237297550e-04f, 2.217829660e-04f, 2.198359050e-04f, 2.178885754e-04f, 2.159409806e-04f, 2.139931239e-04f, 2.120450089e-04f, 2.100966387e-04f, 2.081480169e-04f,
-2.061991468e-04f, 2.042500318e-04f, 2.023006752e-04f, 2.003510805e-04f, 1.984012511e-04f, 1.964511902e-04f, 1.945009014e-04f, 1.925503880e-04f, 1.905996533e-04f, 1.886487008e-04f,
-1.866975339e-04f, 1.847461559e-04f, 1.827945701e-04f, 1.808427801e-04f, 1.788907892e-04f, 1.769386008e-04f, 1.749862182e-04f, 1.730336448e-04f, 1.710808841e-04f, 1.691279394e-04f,
-1.671748141e-04f, 1.652215116e-04f, 1.632680353e-04f, 1.613143885e-04f, 1.593605747e-04f, 1.574065972e-04f, 1.554524594e-04f, 1.534981648e-04f, 1.515437166e-04f, 1.495891183e-04f,
-1.476343733e-04f, 1.456794850e-04f, 1.437244567e-04f, 1.417692918e-04f, 1.398139938e-04f, 1.378585660e-04f, 1.359030117e-04f, 1.339473345e-04f, 1.319915376e-04f, 1.300356245e-04f,
-1.280795985e-04f, 1.261234631e-04f, 1.241672216e-04f, 1.222108774e-04f, 1.202544339e-04f, 1.182978944e-04f, 1.163412625e-04f, 1.143845414e-04f, 1.124277346e-04f, 1.104708454e-04f,
-1.085138772e-04f, 1.065568334e-04f, 1.045997174e-04f, 1.026425327e-04f, 1.006852824e-04f, 9.872797018e-05f, 9.677059927e-05f, 9.481317310e-05f, 9.285569504e-05f, 9.089816848e-05f,
-8.894059682e-05f, 8.698298344e-05f, 8.502533172e-05f, 8.306764506e-05f, 8.110992683e-05f, 7.915218043e-05f, 7.719440923e-05f, 7.523661663e-05f, 7.327880601e-05f, 7.132098076e-05f,
-6.936314426e-05f, 6.740529989e-05f, 6.544745104e-05f, 6.348960110e-05f, 6.153175345e-05f, 5.957391147e-05f, 5.761607855e-05f, 5.565825807e-05f, 5.370045342e-05f, 5.174266797e-05f,
-4.978490512e-05f, 4.782716824e-05f, 4.586946072e-05f, 4.391178594e-05f, 4.195414727e-05f, 3.999654812e-05f, 3.803899184e-05f, 3.608148184e-05f, 3.412402148e-05f, 3.216661415e-05f,
-3.020926323e-05f, 2.825197210e-05f, 2.629474414e-05f, 2.433758273e-05f, 2.238049124e-05f, 2.042347307e-05f, 1.846653158e-05f, 1.650967015e-05f, 1.455289217e-05f, 1.259620100e-05f,
-1.063960004e-05f, 8.683092647e-06f, 6.726682207e-06f, 4.770372095e-06f, 2.814165686e-06f, 8.580663563e-07f, -1.097922519e-06f, -3.053797566e-06f, -5.009555409e-06f, -6.965192674e-06f,
--8.920705989e-06f, -1.087609198e-05f, -1.283134727e-05f, -1.478646850e-05f, -1.674145228e-05f, -1.869629525e-05f, -2.065099403e-05f, -2.260554526e-05f, -2.455994557e-05f, -2.651419158e-05f,
--2.846827993e-05f, -3.042220724e-05f, -3.237597015e-05f, -3.432956530e-05f, -3.628298930e-05f, -3.823623881e-05f, -4.018931044e-05f, -4.214220084e-05f, -4.409490664e-05f, -4.604742448e-05f,
--4.799975098e-05f, -4.995188279e-05f, -5.190381654e-05f, -5.385554887e-05f, -5.580707642e-05f, -5.775839582e-05f, -5.970950372e-05f, -6.166039676e-05f, -6.361107156e-05f, -6.556152479e-05f,
--6.751175306e-05f, -6.946175304e-05f, -7.141152136e-05f, -7.336105465e-05f, -7.531034958e-05f, -7.725940278e-05f, -7.920821089e-05f, -8.115677056e-05f, -8.310507843e-05f, -8.505313116e-05f,
--8.700092539e-05f, -8.894845777e-05f, -9.089572494e-05f, -9.284272356e-05f, -9.478945028e-05f, -9.673590174e-05f, -9.868207460e-05f, -1.006279655e-04f, -1.025735711e-04f, -1.045188881e-04f,
--1.064639130e-04f, -1.084086427e-04f, -1.103530736e-04f, -1.122972025e-04f, -1.142410261e-04f, -1.161845409e-04f, -1.181277437e-04f, -1.200706311e-04f, -1.220131998e-04f, -1.239554464e-04f,
--1.258973675e-04f, -1.278389599e-04f, -1.297802203e-04f, -1.317211452e-04f, -1.336617313e-04f, -1.356019753e-04f, -1.375418740e-04f, -1.394814238e-04f, -1.414206215e-04f, -1.433594639e-04f,
--1.452979474e-04f, -1.472360689e-04f, -1.491738249e-04f, -1.511112122e-04f, -1.530482274e-04f, -1.549848672e-04f, -1.569211283e-04f, -1.588570073e-04f, -1.607925010e-04f, -1.627276059e-04f,
--1.646623188e-04f, -1.665966364e-04f, -1.685305552e-04f, -1.704640721e-04f, -1.723971837e-04f, -1.743298867e-04f, -1.762621777e-04f, -1.781940535e-04f, -1.801255107e-04f, -1.820565459e-04f,
--1.839871560e-04f, -1.859173376e-04f, -1.878470873e-04f, -1.897764019e-04f, -1.917052780e-04f, -1.936337124e-04f, -1.955617017e-04f, -1.974892426e-04f, -1.994163319e-04f, -2.013429661e-04f,
--2.032691421e-04f, -2.051948565e-04f, -2.071201059e-04f, -2.090448872e-04f, -2.109691970e-04f, -2.128930319e-04f, -2.148163888e-04f, -2.167392643e-04f, -2.186616551e-04f, -2.205835579e-04f,
--2.225049694e-04f, -2.244258863e-04f, -2.263463054e-04f, -2.282662233e-04f, -2.301856368e-04f, -2.321045425e-04f, -2.340229372e-04f, -2.359408176e-04f, -2.378581804e-04f, -2.397750223e-04f,
--2.416913401e-04f, -2.436071304e-04f, -2.455223899e-04f, -2.474371155e-04f, -2.493513038e-04f, -2.512649515e-04f, -2.531780553e-04f, -2.550906121e-04f, -2.570026184e-04f, -2.589140711e-04f,
--2.608249668e-04f, -2.627353023e-04f, -2.646450744e-04f, -2.665542797e-04f, -2.684629149e-04f, -2.703709769e-04f, -2.722784624e-04f, -2.741853680e-04f, -2.760916905e-04f, -2.779974267e-04f,
--2.799025733e-04f, -2.818071270e-04f, -2.837110846e-04f, -2.856144429e-04f, -2.875171985e-04f, -2.894193482e-04f, -2.913208888e-04f, -2.932218170e-04f, -2.951221295e-04f, -2.970218232e-04f,
--2.989208947e-04f, -3.008193408e-04f, -3.027171583e-04f, -3.046143439e-04f, -3.065108944e-04f, -3.084068065e-04f, -3.103020770e-04f, -3.121967027e-04f, -3.140906803e-04f, -3.159840066e-04f,
--3.178766783e-04f, -3.197686922e-04f, -3.216600451e-04f, -3.235507338e-04f, -3.254407550e-04f, -3.273301054e-04f, -3.292187820e-04f, -3.311067813e-04f, -3.329941003e-04f, -3.348807356e-04f,
--3.367666841e-04f, -3.386519426e-04f, -3.405365078e-04f, -3.424203765e-04f, -3.443035454e-04f, -3.461860115e-04f, -3.480677714e-04f, -3.499488220e-04f, -3.518291600e-04f, -3.537087822e-04f,
--3.555876854e-04f, -3.574658665e-04f, -3.593433221e-04f, -3.612200492e-04f, -3.630960445e-04f, -3.649713047e-04f, -3.668458268e-04f, -3.687196075e-04f, -3.705926435e-04f, -3.724649318e-04f,
--3.743364691e-04f, -3.762072523e-04f, -3.780772780e-04f, -3.799465432e-04f, -3.818150447e-04f, -3.836827792e-04f, -3.855497437e-04f, -3.874159348e-04f, -3.892813494e-04f, -3.911459844e-04f,
--3.930098366e-04f, -3.948729027e-04f, -3.967351797e-04f, -3.985966643e-04f, -4.004573533e-04f, -4.023172437e-04f, -4.041763321e-04f, -4.060346156e-04f, -4.078920908e-04f, -4.097487546e-04f,
--4.116046039e-04f, -4.134596355e-04f, -4.153138463e-04f, -4.171672330e-04f, -4.190197926e-04f, -4.208715218e-04f, -4.227224176e-04f, -4.245724767e-04f, -4.264216960e-04f, -4.282700724e-04f,
--4.301176028e-04f, -4.319642839e-04f, -4.338101126e-04f, -4.356550858e-04f, -4.374992004e-04f, -4.393424532e-04f, -4.411848411e-04f, -4.430263609e-04f, -4.448670095e-04f, -4.467067838e-04f,
--4.485456806e-04f, -4.503836969e-04f, -4.522208294e-04f, -4.540570751e-04f, -4.558924309e-04f, -4.577268936e-04f, -4.595604600e-04f, -4.613931272e-04f, -4.632248919e-04f, -4.650557510e-04f,
--4.668857015e-04f, -4.687147403e-04f, -4.705428641e-04f, -4.723700700e-04f, -4.741963547e-04f, -4.760217153e-04f, -4.778461485e-04f, -4.796696514e-04f, -4.814922207e-04f, -4.833138535e-04f,
--4.851345465e-04f, -4.869542968e-04f, -4.887731012e-04f, -4.905909566e-04f, -4.924078599e-04f, -4.942238081e-04f, -4.960387981e-04f, -4.978528268e-04f, -4.996658911e-04f, -5.014779879e-04f,
--5.032891141e-04f, -5.050992668e-04f, -5.069084427e-04f, -5.087166389e-04f, -5.105238522e-04f, -5.123300796e-04f, -5.141353181e-04f, -5.159395645e-04f, -5.177428159e-04f, -5.195450690e-04f,
--5.213463210e-04f, -5.231465687e-04f, -5.249458091e-04f, -5.267440390e-04f, -5.285412556e-04f, -5.303374557e-04f, -5.321326363e-04f, -5.339267943e-04f, -5.357199266e-04f, -5.375120304e-04f,
--5.393031024e-04f, -5.410931397e-04f, -5.428821393e-04f, -5.446700980e-04f, -5.464570130e-04f, -5.482428810e-04f, -5.500276992e-04f, -5.518114645e-04f, -5.535941738e-04f, -5.553758242e-04f,
--5.571564127e-04f, -5.589359361e-04f, -5.607143916e-04f, -5.624917760e-04f, -5.642680864e-04f, -5.660433197e-04f, -5.678174730e-04f, -5.695905433e-04f, -5.713625275e-04f, -5.731334227e-04f,
--5.749032258e-04f, -5.766719339e-04f, -5.784395439e-04f, -5.802060529e-04f, -5.819714578e-04f, -5.837357558e-04f, -5.854989437e-04f, -5.872610187e-04f, -5.890219777e-04f, -5.907818178e-04f,
--5.925405359e-04f, -5.942981291e-04f, -5.960545945e-04f, -5.978099290e-04f, -5.995641297e-04f, -6.013171936e-04f, -6.030691177e-04f, -6.048198992e-04f, -6.065695350e-04f, -6.083180221e-04f,
--6.100653577e-04f, -6.118115387e-04f, -6.135565622e-04f, -6.153004253e-04f, -6.170431250e-04f, -6.187846584e-04f, -6.205250225e-04f, -6.222642143e-04f, -6.240022310e-04f, -6.257390696e-04f,
--6.274747272e-04f, -6.292092008e-04f, -6.309424875e-04f, -6.326745843e-04f, -6.344054884e-04f, -6.361351969e-04f, -6.378637067e-04f, -6.395910151e-04f, -6.413171190e-04f, -6.430420156e-04f,
--6.447657019e-04f, -6.464881750e-04f, -6.482094320e-04f, -6.499294701e-04f, -6.516482863e-04f, -6.533658777e-04f, -6.550822414e-04f, -6.567973745e-04f, -6.585112742e-04f, -6.602239375e-04f,
--6.619353615e-04f, -6.636455434e-04f, -6.653544802e-04f, -6.670621691e-04f, -6.687686073e-04f, -6.704737917e-04f, -6.721777197e-04f, -6.738803882e-04f, -6.755817944e-04f, -6.772819354e-04f,
--6.789808084e-04f, -6.806784106e-04f, -6.823747389e-04f, -6.840697907e-04f, -6.857635630e-04f, -6.874560529e-04f, -6.891472577e-04f, -6.908371745e-04f, -6.925258004e-04f, -6.942131326e-04f,
--6.958991682e-04f, -6.975839044e-04f, -6.992673383e-04f, -7.009494672e-04f, -7.026302882e-04f, -7.043097985e-04f, -7.059879952e-04f, -7.076648755e-04f, -7.093404366e-04f, -7.110146756e-04f,
--7.126875898e-04f, -7.143591763e-04f, -7.160294324e-04f, -7.176983551e-04f, -7.193659418e-04f, -7.210321895e-04f, -7.226970955e-04f, -7.243606570e-04f, -7.260228712e-04f, -7.276837353e-04f,
--7.293432465e-04f, -7.310014020e-04f, -7.326581991e-04f, -7.343136348e-04f, -7.359677065e-04f, -7.376204114e-04f, -7.392717467e-04f, -7.409217095e-04f, -7.425702972e-04f, -7.442175070e-04f,
--7.458633361e-04f, -7.475077817e-04f, -7.491508411e-04f, -7.507925116e-04f, -7.524327902e-04f, -7.540716744e-04f, -7.557091613e-04f, -7.573452482e-04f, -7.589799323e-04f, -7.606132110e-04f,
--7.622450814e-04f, -7.638755408e-04f, -7.655045865e-04f, -7.671322157e-04f, -7.687584258e-04f, -7.703832140e-04f, -7.720065775e-04f, -7.736285136e-04f, -7.752490196e-04f, -7.768680929e-04f,
--7.784857306e-04f, -7.801019300e-04f, -7.817166886e-04f, -7.833300034e-04f, -7.849418719e-04f, -7.865522913e-04f, -7.881612590e-04f, -7.897687722e-04f, -7.913748282e-04f, -7.929794244e-04f,
--7.945825580e-04f, -7.961842264e-04f, -7.977844269e-04f, -7.993831567e-04f, -8.009804133e-04f, -8.025761940e-04f, -8.041704960e-04f, -8.057633167e-04f, -8.073546534e-04f, -8.089445035e-04f,
--8.105328644e-04f, -8.121197332e-04f, -8.137051074e-04f, -8.152889844e-04f, -8.168713615e-04f, -8.184522359e-04f, -8.200316052e-04f, -8.216094666e-04f, -8.231858175e-04f, -8.247606552e-04f,
--8.263339772e-04f, -8.279057807e-04f, -8.294760633e-04f, -8.310448221e-04f, -8.326120547e-04f, -8.341777583e-04f, -8.357419304e-04f, -8.373045684e-04f, -8.388656696e-04f, -8.404252315e-04f,
--8.419832513e-04f, -8.435397266e-04f, -8.450946547e-04f, -8.466480330e-04f, -8.481998589e-04f, -8.497501299e-04f, -8.512988433e-04f, -8.528459965e-04f, -8.543915870e-04f, -8.559356122e-04f,
--8.574780695e-04f, -8.590189563e-04f, -8.605582700e-04f, -8.620960082e-04f, -8.636321681e-04f, -8.651667473e-04f, -8.666997432e-04f, -8.682311532e-04f, -8.697609748e-04f, -8.712892054e-04f,
--8.728158425e-04f, -8.743408834e-04f, -8.758643258e-04f, -8.773861670e-04f, -8.789064045e-04f, -8.804250357e-04f, -8.819420582e-04f, -8.834574693e-04f, -8.849712666e-04f, -8.864834476e-04f,
--8.879940097e-04f, -8.895029504e-04f, -8.910102672e-04f, -8.925159575e-04f, -8.940200190e-04f, -8.955224489e-04f, -8.970232450e-04f, -8.985224046e-04f, -9.000199252e-04f, -9.015158044e-04f,
--9.030100397e-04f, -9.045026286e-04f, -9.059935686e-04f, -9.074828572e-04f, -9.089704919e-04f, -9.104564703e-04f, -9.119407898e-04f, -9.134234481e-04f, -9.149044426e-04f, -9.163837709e-04f,
--9.178614306e-04f, -9.193374190e-04f, -9.208117339e-04f, -9.222843728e-04f, -9.237553331e-04f, -9.252246125e-04f, -9.266922086e-04f, -9.281581188e-04f, -9.296223407e-04f, -9.310848719e-04f,
--9.325457100e-04f, -9.340048526e-04f, -9.354622972e-04f, -9.369180413e-04f, -9.383720827e-04f, -9.398244188e-04f, -9.412750472e-04f, -9.427239656e-04f, -9.441711715e-04f, -9.456166626e-04f,
--9.470604364e-04f, -9.485024905e-04f, -9.499428225e-04f, -9.513814301e-04f, -9.528183109e-04f, -9.542534624e-04f, -9.556868824e-04f, -9.571185683e-04f, -9.585485179e-04f, -9.599767287e-04f,
--9.614031984e-04f, -9.628279247e-04f, -9.642509052e-04f, -9.656721374e-04f, -9.670916191e-04f, -9.685093479e-04f, -9.699253214e-04f, -9.713395374e-04f, -9.727519934e-04f, -9.741626871e-04f,
--9.755716162e-04f, -9.769787784e-04f, -9.783841713e-04f, -9.797877925e-04f, -9.811896398e-04f, -9.825897109e-04f, -9.839880034e-04f, -9.853845149e-04f, -9.867792433e-04f, -9.881721862e-04f,
--9.895633412e-04f, -9.909527062e-04f, -9.923402787e-04f, -9.937260565e-04f, -9.951100373e-04f, -9.964922188e-04f, -9.978725987e-04f, -9.992511747e-04f, -1.000627945e-03f, -1.002002906e-03f,
--1.003376057e-03f, -1.004747395e-03f, -1.006116917e-03f, -1.007484622e-03f, -1.008850508e-03f, -1.010214571e-03f, -1.011576810e-03f, -1.012937223e-03f, -1.014295806e-03f, -1.015652559e-03f,
--1.017007479e-03f, -1.018360563e-03f, -1.019711809e-03f, -1.021061215e-03f, -1.022408780e-03f, -1.023754500e-03f, -1.025098373e-03f, -1.026440397e-03f, -1.027780570e-03f, -1.029118890e-03f,
--1.030455355e-03f, -1.031789962e-03f, -1.033122709e-03f, -1.034453594e-03f, -1.035782615e-03f, -1.037109769e-03f, -1.038435055e-03f, -1.039758470e-03f, -1.041080011e-03f, -1.042399678e-03f,
--1.043717467e-03f, -1.045033377e-03f, -1.046347405e-03f, -1.047659549e-03f, -1.048969808e-03f, -1.050278178e-03f, -1.051584657e-03f, -1.052889245e-03f, -1.054191937e-03f, -1.055492733e-03f,
--1.056791630e-03f, -1.058088626e-03f, -1.059383719e-03f, -1.060676906e-03f, -1.061968186e-03f, -1.063257557e-03f, -1.064545015e-03f, -1.065830560e-03f, -1.067114190e-03f, -1.068395901e-03f,
--1.069675692e-03f, -1.070953560e-03f, -1.072229505e-03f, -1.073503523e-03f, -1.074775613e-03f, -1.076045772e-03f, -1.077313998e-03f, -1.078580289e-03f, -1.079844644e-03f, -1.081107060e-03f,
--1.082367535e-03f, -1.083626067e-03f, -1.084882653e-03f, -1.086137293e-03f, -1.087389983e-03f, -1.088640722e-03f, -1.089889508e-03f, -1.091136338e-03f, -1.092381211e-03f, -1.093624124e-03f,
--1.094865076e-03f, -1.096104065e-03f, -1.097341088e-03f, -1.098576143e-03f, -1.099809229e-03f, -1.101040343e-03f, -1.102269483e-03f, -1.103496648e-03f, -1.104721835e-03f, -1.105945042e-03f,
--1.107166268e-03f, -1.108385510e-03f, -1.109602767e-03f, -1.110818035e-03f, -1.112031315e-03f, -1.113242602e-03f, -1.114451896e-03f, -1.115659195e-03f, -1.116864495e-03f, -1.118067797e-03f,
--1.119269097e-03f, -1.120468393e-03f, -1.121665684e-03f, -1.122860968e-03f, -1.124054242e-03f, -1.125245506e-03f, -1.126434756e-03f, -1.127621990e-03f, -1.128807208e-03f, -1.129990407e-03f,
--1.131171585e-03f, -1.132350740e-03f, -1.133527870e-03f, -1.134702973e-03f, -1.135876048e-03f, -1.137047093e-03f, -1.138216105e-03f, -1.139383082e-03f, -1.140548024e-03f, -1.141710927e-03f,
--1.142871790e-03f, -1.144030611e-03f, -1.145187389e-03f, -1.146342121e-03f, -1.147494805e-03f, -1.148645440e-03f, -1.149794023e-03f, -1.150940553e-03f, -1.152085029e-03f, -1.153227447e-03f,
--1.154367807e-03f, -1.155506106e-03f, -1.156642342e-03f, -1.157776515e-03f, -1.158908621e-03f, -1.160038659e-03f, -1.161166627e-03f, -1.162292524e-03f, -1.163416347e-03f, -1.164538095e-03f,
--1.165657765e-03f, -1.166775357e-03f, -1.167890868e-03f, -1.169004297e-03f, -1.170115641e-03f, -1.171224899e-03f, -1.172332069e-03f, -1.173437149e-03f, -1.174540138e-03f, -1.175641033e-03f,
--1.176739833e-03f, -1.177836537e-03f, -1.178931141e-03f, -1.180023645e-03f, -1.181114047e-03f, -1.182202345e-03f, -1.183288538e-03f, -1.184372623e-03f, -1.185454598e-03f, -1.186534463e-03f,
--1.187612214e-03f, -1.188687852e-03f, -1.189761373e-03f, -1.190832776e-03f, -1.191902059e-03f, -1.192969222e-03f, -1.194034260e-03f, -1.195097174e-03f, -1.196157962e-03f, -1.197216621e-03f,
--1.198273150e-03f, -1.199327548e-03f, -1.200379812e-03f, -1.201429941e-03f, -1.202477933e-03f, -1.203523787e-03f, -1.204567501e-03f, -1.205609073e-03f, -1.206648501e-03f, -1.207685784e-03f,
--1.208720920e-03f, -1.209753908e-03f, -1.210784745e-03f, -1.211813431e-03f, -1.212839963e-03f, -1.213864340e-03f, -1.214886560e-03f, -1.215906622e-03f, -1.216924524e-03f, -1.217940264e-03f,
--1.218953840e-03f, -1.219965252e-03f, -1.220974497e-03f, -1.221981574e-03f, -1.222986481e-03f, -1.223989217e-03f, -1.224989779e-03f, -1.225988167e-03f, -1.226984378e-03f, -1.227978412e-03f,
--1.228970266e-03f, -1.229959940e-03f, -1.230947430e-03f, -1.231932737e-03f, -1.232915857e-03f, -1.233896790e-03f, -1.234875535e-03f, -1.235852088e-03f, -1.236826450e-03f, -1.237798618e-03f,
--1.238768591e-03f, -1.239736367e-03f, -1.240701945e-03f, -1.241665323e-03f, -1.242626500e-03f, -1.243585474e-03f, -1.244542244e-03f, -1.245496807e-03f, -1.246449163e-03f, -1.247399310e-03f,
--1.248347247e-03f, -1.249292971e-03f, -1.250236482e-03f, -1.251177778e-03f, -1.252116858e-03f, -1.253053719e-03f, -1.253988361e-03f, -1.254920782e-03f, -1.255850981e-03f, -1.256778955e-03f,
--1.257704704e-03f, -1.258628226e-03f, -1.259549520e-03f, -1.260468584e-03f, -1.261385416e-03f, -1.262300016e-03f, -1.263212382e-03f, -1.264122511e-03f, -1.265030404e-03f, -1.265936058e-03f,
--1.266839473e-03f, -1.267740645e-03f, -1.268639575e-03f, -1.269536261e-03f, -1.270430701e-03f, -1.271322894e-03f, -1.272212838e-03f, -1.273100533e-03f, -1.273985976e-03f, -1.274869166e-03f,
--1.275750102e-03f, -1.276628783e-03f, -1.277505206e-03f, -1.278379372e-03f, -1.279251277e-03f, -1.280120922e-03f, -1.280988304e-03f, -1.281853423e-03f, -1.282716276e-03f, -1.283576862e-03f,
--1.284435181e-03f, -1.285291231e-03f, -1.286145009e-03f, -1.286996516e-03f, -1.287845750e-03f, -1.288692709e-03f, -1.289537392e-03f, -1.290379798e-03f, -1.291219925e-03f, -1.292057772e-03f,
--1.292893338e-03f, -1.293726622e-03f, -1.294557621e-03f, -1.295386335e-03f, -1.296212763e-03f, -1.297036903e-03f, -1.297858754e-03f, -1.298678315e-03f, -1.299495584e-03f, -1.300310560e-03f,
--1.301123242e-03f, -1.301933628e-03f, -1.302741718e-03f, -1.303547510e-03f, -1.304351002e-03f, -1.305152194e-03f, -1.305951084e-03f, -1.306747671e-03f, -1.307541954e-03f, -1.308333931e-03f,
--1.309123602e-03f, -1.309910964e-03f, -1.310696017e-03f, -1.311478760e-03f, -1.312259191e-03f, -1.313037310e-03f, -1.313813114e-03f, -1.314586603e-03f, -1.315357775e-03f, -1.316126630e-03f,
--1.316893166e-03f, -1.317657382e-03f, -1.318419276e-03f, -1.319178848e-03f, -1.319936097e-03f, -1.320691020e-03f, -1.321443618e-03f, -1.322193888e-03f, -1.322941830e-03f, -1.323687443e-03f,
--1.324430725e-03f, -1.325171675e-03f, -1.325910293e-03f, -1.326646576e-03f, -1.327380524e-03f, -1.328112136e-03f, -1.328841410e-03f, -1.329568346e-03f, -1.330292942e-03f, -1.331015197e-03f,
--1.331735110e-03f, -1.332452680e-03f, -1.333167906e-03f, -1.333880786e-03f, -1.334591321e-03f, -1.335299507e-03f, -1.336005346e-03f, -1.336708834e-03f, -1.337409972e-03f, -1.338108758e-03f,
--1.338805191e-03f, -1.339499271e-03f, -1.340190995e-03f, -1.340880363e-03f, -1.341567374e-03f, -1.342252027e-03f, -1.342934321e-03f, -1.343614254e-03f, -1.344291826e-03f, -1.344967036e-03f,
--1.345639883e-03f, -1.346310365e-03f, -1.346978481e-03f, -1.347644232e-03f, -1.348307614e-03f, -1.348968629e-03f, -1.349627273e-03f, -1.350283548e-03f, -1.350937451e-03f, -1.351588981e-03f,
--1.352238138e-03f, -1.352884920e-03f, -1.353529328e-03f, -1.354171358e-03f, -1.354811012e-03f, -1.355448287e-03f, -1.356083182e-03f, -1.356715698e-03f, -1.357345832e-03f, -1.357973584e-03f,
--1.358598953e-03f, -1.359221937e-03f, -1.359842537e-03f, -1.360460751e-03f, -1.361076578e-03f, -1.361690017e-03f, -1.362301068e-03f, -1.362909729e-03f, -1.363515999e-03f, -1.364119878e-03f,
--1.364721364e-03f, -1.365320457e-03f, -1.365917156e-03f, -1.366511460e-03f, -1.367103368e-03f, -1.367692879e-03f, -1.368279992e-03f, -1.368864707e-03f, -1.369447022e-03f, -1.370026937e-03f,
--1.370604451e-03f, -1.371179562e-03f, -1.371752271e-03f, -1.372322576e-03f, -1.372890476e-03f, -1.373455971e-03f, -1.374019060e-03f, -1.374579741e-03f, -1.375138014e-03f, -1.375693879e-03f,
--1.376247334e-03f, -1.376798379e-03f, -1.377347012e-03f, -1.377893233e-03f, -1.378437041e-03f, -1.378978436e-03f, -1.379517416e-03f, -1.380053981e-03f, -1.380588130e-03f, -1.381119862e-03f,
--1.381649176e-03f, -1.382176072e-03f, -1.382700549e-03f, -1.383222606e-03f, -1.383742243e-03f, -1.384259457e-03f, -1.384774250e-03f, -1.385286619e-03f, -1.385796565e-03f, -1.386304087e-03f,
--1.386809183e-03f, -1.387311853e-03f, -1.387812097e-03f, -1.388309913e-03f, -1.388805302e-03f, -1.389298261e-03f, -1.389788791e-03f, -1.390276891e-03f, -1.390762559e-03f, -1.391245796e-03f,
--1.391726601e-03f, -1.392204973e-03f, -1.392680911e-03f, -1.393154414e-03f, -1.393625483e-03f, -1.394094116e-03f, -1.394560312e-03f, -1.395024071e-03f, -1.395485393e-03f, -1.395944276e-03f,
--1.396400720e-03f, -1.396854725e-03f, -1.397306289e-03f, -1.397755412e-03f, -1.398202093e-03f, -1.398646332e-03f, -1.399088129e-03f, -1.399527481e-03f, -1.399964390e-03f, -1.400398854e-03f,
--1.400830872e-03f, -1.401260445e-03f, -1.401687571e-03f, -1.402112250e-03f, -1.402534481e-03f, -1.402954264e-03f, -1.403371598e-03f, -1.403786482e-03f, -1.404198916e-03f, -1.404608900e-03f,
--1.405016432e-03f, -1.405421513e-03f, -1.405824141e-03f, -1.406224317e-03f, -1.406622038e-03f, -1.407017306e-03f, -1.407410120e-03f, -1.407800478e-03f, -1.408188381e-03f, -1.408573827e-03f,
--1.408956817e-03f, -1.409337350e-03f, -1.409715425e-03f, -1.410091042e-03f, -1.410464200e-03f, -1.410834899e-03f, -1.411203138e-03f, -1.411568917e-03f, -1.411932235e-03f, -1.412293092e-03f,
--1.412651487e-03f, -1.413007420e-03f, -1.413360891e-03f, -1.413711898e-03f, -1.414060442e-03f, -1.414406522e-03f, -1.414750137e-03f, -1.415091287e-03f, -1.415429972e-03f, -1.415766192e-03f,
--1.416099944e-03f, -1.416431231e-03f, -1.416760050e-03f, -1.417086401e-03f, -1.417410285e-03f, -1.417731700e-03f, -1.418050646e-03f, -1.418367123e-03f, -1.418681131e-03f, -1.418992668e-03f,
--1.419301735e-03f, -1.419608331e-03f, -1.419912456e-03f, -1.420214110e-03f, -1.420513291e-03f, -1.420810000e-03f, -1.421104237e-03f, -1.421396000e-03f, -1.421685290e-03f, -1.421972106e-03f,
--1.422256448e-03f, -1.422538315e-03f, -1.422817707e-03f, -1.423094625e-03f, -1.423369067e-03f, -1.423641033e-03f, -1.423910522e-03f, -1.424177536e-03f, -1.424442072e-03f, -1.424704131e-03f,
--1.424963713e-03f, -1.425220817e-03f, -1.425475443e-03f, -1.425727591e-03f, -1.425977260e-03f, -1.426224450e-03f, -1.426469161e-03f, -1.426711392e-03f, -1.426951144e-03f, -1.427188415e-03f,
--1.427423206e-03f, -1.427655517e-03f, -1.427885347e-03f, -1.428112695e-03f, -1.428337563e-03f, -1.428559948e-03f, -1.428779852e-03f, -1.428997274e-03f, -1.429212213e-03f, -1.429424670e-03f,
--1.429634644e-03f, -1.429842136e-03f, -1.430047144e-03f, -1.430249668e-03f, -1.430449709e-03f, -1.430647266e-03f, -1.430842339e-03f, -1.431034928e-03f, -1.431225033e-03f, -1.431412653e-03f,
--1.431597788e-03f, -1.431780438e-03f, -1.431960603e-03f, -1.432138283e-03f, -1.432313477e-03f, -1.432486186e-03f, -1.432656409e-03f, -1.432824146e-03f, -1.432989397e-03f, -1.433152162e-03f,
--1.433312440e-03f, -1.433470232e-03f, -1.433625538e-03f, -1.433778356e-03f, -1.433928688e-03f, -1.434076533e-03f, -1.434221890e-03f, -1.434364761e-03f, -1.434505144e-03f, -1.434643040e-03f,
--1.434778448e-03f, -1.434911369e-03f, -1.435041802e-03f, -1.435169747e-03f, -1.435295205e-03f, -1.435418174e-03f, -1.435538656e-03f, -1.435656649e-03f, -1.435772155e-03f, -1.435885172e-03f,
--1.435995701e-03f, -1.436103742e-03f, -1.436209295e-03f, -1.436312359e-03f, -1.436412935e-03f, -1.436511022e-03f, -1.436606621e-03f, -1.436699731e-03f, -1.436790353e-03f, -1.436878487e-03f,
--1.436964132e-03f, -1.437047289e-03f, -1.437127957e-03f, -1.437206136e-03f, -1.437281827e-03f, -1.437355030e-03f, -1.437425744e-03f, -1.437493970e-03f, -1.437559707e-03f, -1.437622956e-03f,
--1.437683716e-03f, -1.437741989e-03f, -1.437797773e-03f, -1.437851068e-03f, -1.437901876e-03f, -1.437950195e-03f, -1.437996027e-03f, -1.438039370e-03f, -1.438080226e-03f, -1.438118593e-03f,
--1.438154473e-03f, -1.438187865e-03f, -1.438218770e-03f, -1.438247187e-03f, -1.438273116e-03f, -1.438296559e-03f, -1.438317514e-03f, -1.438335981e-03f, -1.438351962e-03f, -1.438365456e-03f,
--1.438376464e-03f, -1.438384984e-03f, -1.438391018e-03f, -1.438394566e-03f, -1.438395627e-03f, -1.438394203e-03f, -1.438390292e-03f, -1.438383896e-03f, -1.438375014e-03f, -1.438363646e-03f,
--1.438349793e-03f, -1.438333455e-03f, -1.438314632e-03f, -1.438293324e-03f, -1.438269531e-03f, -1.438243254e-03f, -1.438214493e-03f, -1.438183248e-03f, -1.438149518e-03f, -1.438113305e-03f,
--1.438074609e-03f, -1.438033429e-03f, -1.437989766e-03f, -1.437943621e-03f, -1.437894993e-03f, -1.437843882e-03f, -1.437790289e-03f, -1.437734215e-03f, -1.437675658e-03f, -1.437614621e-03f,
--1.437551102e-03f, -1.437485102e-03f, -1.437416621e-03f, -1.437345660e-03f, -1.437272219e-03f, -1.437196298e-03f, -1.437117897e-03f, -1.437037017e-03f, -1.436953658e-03f, -1.436867821e-03f,
--1.436779505e-03f, -1.436688710e-03f, -1.436595438e-03f, -1.436499688e-03f, -1.436401461e-03f, -1.436300757e-03f, -1.436197576e-03f, -1.436091919e-03f, -1.435983786e-03f, -1.435873178e-03f,
--1.435760094e-03f, -1.435644535e-03f, -1.435526501e-03f, -1.435405993e-03f, -1.435283012e-03f, -1.435157556e-03f, -1.435029627e-03f, -1.434899226e-03f, -1.434766352e-03f, -1.434631006e-03f,
--1.434493188e-03f, -1.434352899e-03f, -1.434210138e-03f, -1.434064908e-03f, -1.433917206e-03f, -1.433767036e-03f, -1.433614395e-03f, -1.433459286e-03f, -1.433301708e-03f, -1.433141662e-03f,
--1.432979148e-03f, -1.432814167e-03f, -1.432646719e-03f, -1.432476805e-03f, -1.432304424e-03f, -1.432129578e-03f, -1.431952267e-03f, -1.431772491e-03f, -1.431590251e-03f, -1.431405547e-03f,
--1.431218379e-03f, -1.431028749e-03f, -1.430836656e-03f, -1.430642102e-03f, -1.430445086e-03f, -1.430245609e-03f, -1.430043671e-03f, -1.429839274e-03f, -1.429632417e-03f, -1.429423101e-03f,
--1.429211326e-03f, -1.428997094e-03f, -1.428780404e-03f, -1.428561257e-03f, -1.428339654e-03f, -1.428115594e-03f, -1.427889080e-03f, -1.427660110e-03f, -1.427428687e-03f, -1.427194809e-03f,
--1.426958478e-03f, -1.426719695e-03f, -1.426478459e-03f, -1.426234772e-03f, -1.425988634e-03f, -1.425740045e-03f, -1.425489007e-03f, -1.425235519e-03f, -1.424979583e-03f, -1.424721198e-03f,
--1.424460366e-03f, -1.424197087e-03f, -1.423931362e-03f, -1.423663190e-03f, -1.423392574e-03f, -1.423119513e-03f, -1.422844009e-03f, -1.422566060e-03f, -1.422285670e-03f, -1.422002837e-03f,
--1.421717563e-03f, -1.421429847e-03f, -1.421139692e-03f, -1.420847097e-03f, -1.420552064e-03f, -1.420254592e-03f, -1.419954682e-03f, -1.419652336e-03f, -1.419347554e-03f, -1.419040335e-03f,
--1.418730682e-03f, -1.418418595e-03f, -1.418104074e-03f, -1.417787120e-03f, -1.417467734e-03f, -1.417145917e-03f, -1.416821669e-03f, -1.416494991e-03f, -1.416165883e-03f, -1.415834346e-03f,
--1.415500382e-03f, -1.415163991e-03f, -1.414825172e-03f, -1.414483928e-03f, -1.414140259e-03f, -1.413794166e-03f, -1.413445649e-03f, -1.413094709e-03f, -1.412741347e-03f, -1.412385564e-03f,
--1.412027360e-03f, -1.411666737e-03f, -1.411303694e-03f, -1.410938233e-03f, -1.410570354e-03f, -1.410200058e-03f, -1.409827347e-03f, -1.409452220e-03f, -1.409074679e-03f, -1.408694724e-03f,
--1.408312357e-03f, -1.407927577e-03f, -1.407540386e-03f, -1.407150785e-03f, -1.406758774e-03f, -1.406364354e-03f, -1.405967527e-03f, -1.405568292e-03f, -1.405166651e-03f, -1.404762604e-03f,
--1.404356153e-03f, -1.403947298e-03f, -1.403536040e-03f, -1.403122379e-03f, -1.402706318e-03f, -1.402287856e-03f, -1.401866995e-03f, -1.401443734e-03f, -1.401018077e-03f, -1.400590022e-03f,
--1.400159571e-03f, -1.399726725e-03f, -1.399291484e-03f, -1.398853851e-03f, -1.398413824e-03f, -1.397971406e-03f, -1.397526598e-03f, -1.397079399e-03f, -1.396629812e-03f, -1.396177837e-03f,
--1.395723475e-03f, -1.395266726e-03f, -1.394807592e-03f, -1.394346075e-03f, -1.393882173e-03f, -1.393415890e-03f, -1.392947225e-03f, -1.392476179e-03f, -1.392002754e-03f, -1.391526950e-03f,
--1.391048769e-03f, -1.390568210e-03f, -1.390085277e-03f, -1.389599968e-03f, -1.389112286e-03f, -1.388622231e-03f, -1.388129804e-03f, -1.387635006e-03f, -1.387137838e-03f, -1.386638302e-03f,
--1.386136398e-03f, -1.385632127e-03f, -1.385125490e-03f, -1.384616488e-03f, -1.384105123e-03f, -1.383591395e-03f, -1.383075305e-03f, -1.382556854e-03f, -1.382036044e-03f, -1.381512875e-03f,
--1.380987348e-03f, -1.380459465e-03f, -1.379929227e-03f, -1.379396633e-03f, -1.378861687e-03f, -1.378324388e-03f, -1.377784738e-03f, -1.377242738e-03f, -1.376698388e-03f, -1.376151691e-03f,
--1.375602646e-03f, -1.375051256e-03f, -1.374497520e-03f, -1.373941442e-03f, -1.373383020e-03f, -1.372822257e-03f, -1.372259153e-03f, -1.371693711e-03f, -1.371125930e-03f, -1.370555811e-03f,
--1.369983357e-03f, -1.369408568e-03f, -1.368831446e-03f, -1.368251991e-03f, -1.367670204e-03f, -1.367086087e-03f, -1.366499641e-03f, -1.365910867e-03f, -1.365319766e-03f, -1.364726339e-03f,
--1.364130588e-03f, -1.363532514e-03f, -1.362932117e-03f, -1.362329399e-03f, -1.361724362e-03f, -1.361117005e-03f, -1.360507331e-03f, -1.359895341e-03f, -1.359281036e-03f, -1.358664417e-03f,
--1.358045485e-03f, -1.357424241e-03f, -1.356800688e-03f, -1.356174825e-03f, -1.355546654e-03f, -1.354916176e-03f, -1.354283394e-03f, -1.353648307e-03f, -1.353010916e-03f, -1.352371225e-03f,
--1.351729232e-03f, -1.351084941e-03f, -1.350438351e-03f, -1.349789464e-03f, -1.349138282e-03f, -1.348484806e-03f, -1.347829037e-03f, -1.347170976e-03f, -1.346510624e-03f, -1.345847984e-03f,
--1.345183055e-03f, -1.344515840e-03f, -1.343846339e-03f, -1.343174555e-03f, -1.342500487e-03f, -1.341824138e-03f, -1.341145509e-03f, -1.340464601e-03f, -1.339781416e-03f, -1.339095954e-03f,
--1.338408217e-03f, -1.337718207e-03f, -1.337025925e-03f, -1.336331371e-03f, -1.335634548e-03f, -1.334935456e-03f, -1.334234098e-03f, -1.333530474e-03f, -1.332824586e-03f, -1.332116434e-03f,
--1.331406022e-03f, -1.330693349e-03f, -1.329978417e-03f, -1.329261227e-03f, -1.328541782e-03f, -1.327820082e-03f, -1.327096128e-03f, -1.326369923e-03f, -1.325641467e-03f, -1.324910761e-03f,
--1.324177808e-03f, -1.323442609e-03f, -1.322705164e-03f, -1.321965476e-03f, -1.321223546e-03f, -1.320479375e-03f, -1.319732964e-03f, -1.318984316e-03f, -1.318233431e-03f, -1.317480311e-03f,
--1.316724957e-03f, -1.315967371e-03f, -1.315207555e-03f, -1.314445509e-03f, -1.313681235e-03f, -1.312914734e-03f, -1.312146009e-03f, -1.311375060e-03f, -1.310601888e-03f, -1.309826497e-03f,
--1.309048886e-03f, -1.308269057e-03f, -1.307487012e-03f, -1.306702753e-03f, -1.305916280e-03f, -1.305127596e-03f, -1.304336701e-03f, -1.303543597e-03f, -1.302748286e-03f, -1.301950770e-03f,
--1.301151049e-03f, -1.300349125e-03f, -1.299545000e-03f, -1.298738676e-03f, -1.297930153e-03f, -1.297119433e-03f, -1.296306519e-03f, -1.295491410e-03f, -1.294674110e-03f, -1.293854619e-03f,
--1.293032939e-03f, -1.292209072e-03f, -1.291383019e-03f, -1.290554781e-03f, -1.289724360e-03f, -1.288891759e-03f, -1.288056977e-03f, -1.287220018e-03f, -1.286380882e-03f, -1.285539571e-03f,
--1.284696087e-03f, -1.283850430e-03f, -1.283002604e-03f, -1.282152609e-03f, -1.281300447e-03f, -1.280446120e-03f, -1.279589629e-03f, -1.278730975e-03f, -1.277870161e-03f, -1.277007188e-03f,
--1.276142058e-03f, -1.275274772e-03f, -1.274405331e-03f, -1.273533738e-03f, -1.272659995e-03f, -1.271784102e-03f, -1.270906061e-03f, -1.270025875e-03f, -1.269143544e-03f, -1.268259070e-03f,
--1.267372456e-03f, -1.266483702e-03f, -1.265592811e-03f, -1.264699783e-03f, -1.263804621e-03f, -1.262907326e-03f, -1.262007901e-03f, -1.261106346e-03f, -1.260202663e-03f, -1.259296854e-03f,
--1.258388921e-03f, -1.257478866e-03f, -1.256566689e-03f, -1.255652393e-03f, -1.254735980e-03f, -1.253817451e-03f, -1.252896808e-03f, -1.251974053e-03f, -1.251049186e-03f, -1.250122211e-03f,
--1.249193129e-03f, -1.248261941e-03f, -1.247328650e-03f, -1.246393256e-03f, -1.245455762e-03f, -1.244516170e-03f, -1.243574481e-03f, -1.242630697e-03f, -1.241684819e-03f, -1.240736850e-03f,
--1.239786791e-03f, -1.238834644e-03f, -1.237880411e-03f, -1.236924094e-03f, -1.235965693e-03f, -1.235005212e-03f, -1.234042652e-03f, -1.233078014e-03f, -1.232111300e-03f, -1.231142513e-03f,
--1.230171654e-03f, -1.229198725e-03f, -1.228223727e-03f, -1.227246663e-03f, -1.226267534e-03f, -1.225286342e-03f, -1.224303088e-03f, -1.223317776e-03f, -1.222330406e-03f, -1.221340980e-03f,
--1.220349500e-03f, -1.219355969e-03f, -1.218360387e-03f, -1.217362756e-03f, -1.216363080e-03f, -1.215361358e-03f, -1.214357594e-03f, -1.213351789e-03f, -1.212343944e-03f, -1.211334063e-03f,
--1.210322146e-03f, -1.209308196e-03f, -1.208292213e-03f, -1.207274201e-03f, -1.206254162e-03f, -1.205232096e-03f, -1.204208006e-03f, -1.203181894e-03f, -1.202153761e-03f, -1.201123610e-03f,
--1.200091443e-03f, -1.199057260e-03f, -1.198021065e-03f, -1.196982859e-03f, -1.195942645e-03f, -1.194900423e-03f, -1.193856196e-03f, -1.192809966e-03f, -1.191761734e-03f, -1.190711503e-03f,
--1.189659275e-03f, -1.188605052e-03f, -1.187548834e-03f, -1.186490626e-03f, -1.185430427e-03f, -1.184368241e-03f, -1.183304069e-03f, -1.182237913e-03f, -1.181169776e-03f, -1.180099658e-03f,
--1.179027563e-03f, -1.177953492e-03f, -1.176877446e-03f, -1.175799429e-03f, -1.174719442e-03f, -1.173637486e-03f, -1.172553565e-03f, -1.171467679e-03f, -1.170379832e-03f, -1.169290024e-03f,
--1.168198258e-03f, -1.167104536e-03f, -1.166008860e-03f, -1.164911232e-03f, -1.163811654e-03f, -1.162710127e-03f, -1.161606655e-03f, -1.160501239e-03f, -1.159393880e-03f, -1.158284582e-03f,
--1.157173346e-03f, -1.156060174e-03f, -1.154945068e-03f, -1.153828030e-03f, -1.152709062e-03f, -1.151588166e-03f, -1.150465345e-03f, -1.149340600e-03f, -1.148213934e-03f, -1.147085348e-03f,
--1.145954844e-03f, -1.144822425e-03f, -1.143688093e-03f, -1.142551850e-03f, -1.141413697e-03f, -1.140273637e-03f, -1.139131672e-03f, -1.137987804e-03f, -1.136842036e-03f, -1.135694368e-03f,
--1.134544804e-03f, -1.133393345e-03f, -1.132239994e-03f, -1.131084752e-03f, -1.129927622e-03f, -1.128768606e-03f, -1.127607706e-03f, -1.126444924e-03f, -1.125280262e-03f, -1.124113722e-03f,
--1.122945307e-03f, -1.121775018e-03f, -1.120602858e-03f, -1.119428829e-03f, -1.118252933e-03f, -1.117075172e-03f, -1.115895548e-03f, -1.114714063e-03f, -1.113530720e-03f, -1.112345521e-03f,
--1.111158467e-03f, -1.109969562e-03f, -1.108778806e-03f, -1.107586203e-03f, -1.106391755e-03f, -1.105195463e-03f, -1.103997330e-03f, -1.102797358e-03f, -1.101595549e-03f, -1.100391905e-03f,
--1.099186429e-03f, -1.097979123e-03f, -1.096769989e-03f, -1.095559029e-03f, -1.094346245e-03f, -1.093131640e-03f, -1.091915216e-03f, -1.090696974e-03f, -1.089476918e-03f, -1.088255049e-03f,
--1.087031369e-03f, -1.085805882e-03f, -1.084578588e-03f, -1.083349491e-03f, -1.082118592e-03f, -1.080885894e-03f, -1.079651399e-03f, -1.078415109e-03f, -1.077177027e-03f, -1.075937154e-03f,
--1.074695493e-03f, -1.073452047e-03f, -1.072206816e-03f, -1.070959805e-03f, -1.069711014e-03f, -1.068460447e-03f, -1.067208105e-03f, -1.065953991e-03f, -1.064698107e-03f, -1.063440455e-03f,
--1.062181037e-03f, -1.060919857e-03f, -1.059656915e-03f, -1.058392215e-03f, -1.057125759e-03f, -1.055857549e-03f, -1.054587587e-03f, -1.053315875e-03f, -1.052042417e-03f, -1.050767213e-03f,
--1.049490267e-03f, -1.048211581e-03f, -1.046931157e-03f, -1.045648997e-03f, -1.044365104e-03f, -1.043079480e-03f, -1.041792128e-03f, -1.040503049e-03f, -1.039212246e-03f, -1.037919721e-03f,
--1.036625477e-03f, -1.035329517e-03f, -1.034031841e-03f, -1.032732453e-03f, -1.031431356e-03f, -1.030128550e-03f, -1.028824040e-03f, -1.027517826e-03f, -1.026209912e-03f, -1.024900300e-03f,
--1.023588992e-03f, -1.022275990e-03f, -1.020961298e-03f, -1.019644916e-03f, -1.018326849e-03f, -1.017007097e-03f, -1.015685664e-03f, -1.014362551e-03f, -1.013037762e-03f, -1.011711298e-03f,
--1.010383162e-03f, -1.009053357e-03f, -1.007721884e-03f, -1.006388746e-03f, -1.005053946e-03f, -1.003717486e-03f, -1.002379368e-03f, -1.001039595e-03f, -9.996981693e-04f, -9.983550929e-04f,
--9.970103686e-04f, -9.956639986e-04f, -9.943159855e-04f, -9.929663317e-04f, -9.916150395e-04f, -9.902621114e-04f, -9.889075499e-04f, -9.875513574e-04f, -9.861935363e-04f, -9.848340891e-04f,
--9.834730182e-04f, -9.821103260e-04f, -9.807460150e-04f, -9.793800877e-04f, -9.780125465e-04f, -9.766433939e-04f, -9.752726323e-04f, -9.739002641e-04f, -9.725262920e-04f, -9.711507182e-04f,
--9.697735454e-04f, -9.683947759e-04f, -9.670144122e-04f, -9.656324569e-04f, -9.642489124e-04f, -9.628637811e-04f, -9.614770656e-04f, -9.600887684e-04f, -9.586988919e-04f, -9.573074387e-04f,
--9.559144112e-04f, -9.545198119e-04f, -9.531236434e-04f, -9.517259081e-04f, -9.503266086e-04f, -9.489257473e-04f, -9.475233268e-04f, -9.461193496e-04f, -9.447138182e-04f, -9.433067350e-04f,
--9.418981028e-04f, -9.404879239e-04f, -9.390762009e-04f, -9.376629363e-04f, -9.362481327e-04f, -9.348317926e-04f, -9.334139184e-04f, -9.319945129e-04f, -9.305735785e-04f, -9.291511177e-04f,
--9.277271331e-04f, -9.263016272e-04f, -9.248746027e-04f, -9.234460620e-04f, -9.220160078e-04f, -9.205844425e-04f, -9.191513687e-04f, -9.177167890e-04f, -9.162807060e-04f, -9.148431222e-04f,
--9.134040403e-04f, -9.119634627e-04f, -9.105213920e-04f, -9.090778309e-04f, -9.076327820e-04f, -9.061862477e-04f, -9.047382307e-04f, -9.032887335e-04f, -9.018377589e-04f, -9.003853093e-04f,
--8.989313873e-04f, -8.974759957e-04f, -8.960191368e-04f, -8.945608134e-04f, -8.931010281e-04f, -8.916397835e-04f, -8.901770821e-04f, -8.887129266e-04f, -8.872473197e-04f, -8.857802638e-04f,
--8.843117617e-04f, -8.828418160e-04f, -8.813704292e-04f, -8.798976041e-04f, -8.784233433e-04f, -8.769476493e-04f, -8.754705248e-04f, -8.739919724e-04f, -8.725119949e-04f, -8.710305947e-04f,
--8.695477747e-04f, -8.680635373e-04f, -8.665778854e-04f, -8.650908214e-04f, -8.636023481e-04f, -8.621124681e-04f, -8.606211841e-04f, -8.591284987e-04f, -8.576344146e-04f, -8.561389345e-04f,
--8.546420610e-04f, -8.531437968e-04f, -8.516441445e-04f, -8.501431069e-04f, -8.486406866e-04f, -8.471368863e-04f, -8.456317086e-04f, -8.441251563e-04f, -8.426172321e-04f, -8.411079385e-04f,
--8.395972784e-04f, -8.380852543e-04f, -8.365718690e-04f, -8.350571252e-04f, -8.335410256e-04f, -8.320235729e-04f, -8.305047697e-04f, -8.289846189e-04f, -8.274631230e-04f, -8.259402848e-04f,
--8.244161070e-04f, -8.228905923e-04f, -8.213637435e-04f, -8.198355632e-04f, -8.183060542e-04f, -8.167752192e-04f, -8.152430608e-04f, -8.137095820e-04f, -8.121747852e-04f, -8.106386734e-04f,
--8.091012492e-04f, -8.075625153e-04f, -8.060224746e-04f, -8.044811296e-04f, -8.029384833e-04f, -8.013945382e-04f, -7.998492972e-04f, -7.983027630e-04f, -7.967549384e-04f, -7.952058260e-04f,
--7.936554287e-04f, -7.921037492e-04f, -7.905507903e-04f, -7.889965547e-04f, -7.874410451e-04f, -7.858842644e-04f, -7.843262153e-04f, -7.827669006e-04f, -7.812063231e-04f, -7.796444854e-04f,
--7.780813904e-04f, -7.765170409e-04f, -7.749514396e-04f, -7.733845894e-04f, -7.718164929e-04f, -7.702471530e-04f, -7.686765725e-04f, -7.671047541e-04f, -7.655317007e-04f, -7.639574150e-04f,
--7.623818998e-04f, -7.608051579e-04f, -7.592271921e-04f, -7.576480053e-04f, -7.560676001e-04f, -7.544859795e-04f, -7.529031462e-04f, -7.513191030e-04f, -7.497338528e-04f, -7.481473983e-04f,
--7.465597423e-04f, -7.449708877e-04f, -7.433808373e-04f, -7.417895939e-04f, -7.401971603e-04f, -7.386035393e-04f, -7.370087339e-04f, -7.354127467e-04f, -7.338155806e-04f, -7.322172385e-04f,
--7.306177231e-04f, -7.290170374e-04f, -7.274151841e-04f, -7.258121660e-04f, -7.242079861e-04f, -7.226026472e-04f, -7.209961521e-04f, -7.193885036e-04f, -7.177797046e-04f, -7.161697579e-04f,
--7.145586664e-04f, -7.129464330e-04f, -7.113330604e-04f, -7.097185516e-04f, -7.081029094e-04f, -7.064861367e-04f, -7.048682363e-04f, -7.032492110e-04f, -7.016290638e-04f, -7.000077976e-04f,
--6.983854151e-04f, -6.967619192e-04f, -6.951373129e-04f, -6.935115989e-04f, -6.918847803e-04f, -6.902568597e-04f, -6.886278402e-04f, -6.869977246e-04f, -6.853665157e-04f, -6.837342166e-04f,
--6.821008299e-04f, -6.804663587e-04f, -6.788308059e-04f, -6.771941742e-04f, -6.755564666e-04f, -6.739176861e-04f, -6.722778354e-04f, -6.706369175e-04f, -6.689949353e-04f, -6.673518917e-04f,
--6.657077896e-04f, -6.640626318e-04f, -6.624164214e-04f, -6.607691611e-04f, -6.591208540e-04f, -6.574715029e-04f, -6.558211107e-04f, -6.541696803e-04f, -6.525172148e-04f, -6.508637169e-04f,
--6.492091895e-04f, -6.475536357e-04f, -6.458970584e-04f, -6.442394603e-04f, -6.425808446e-04f, -6.409212141e-04f, -6.392605717e-04f, -6.375989203e-04f, -6.359362630e-04f, -6.342726026e-04f,
--6.326079420e-04f, -6.309422842e-04f, -6.292756322e-04f, -6.276079888e-04f, -6.259393571e-04f, -6.242697399e-04f, -6.225991402e-04f, -6.209275609e-04f, -6.192550050e-04f, -6.175814755e-04f,
--6.159069752e-04f, -6.142315072e-04f, -6.125550743e-04f, -6.108776796e-04f, -6.091993260e-04f, -6.075200164e-04f, -6.058397538e-04f, -6.041585412e-04f, -6.024763816e-04f, -6.007932778e-04f,
--5.991092329e-04f, -5.974242498e-04f, -5.957383315e-04f, -5.940514809e-04f, -5.923637011e-04f, -5.906749950e-04f, -5.889853655e-04f, -5.872948157e-04f, -5.856033485e-04f, -5.839109669e-04f,
--5.822176739e-04f, -5.805234724e-04f, -5.788283655e-04f, -5.771323560e-04f, -5.754354471e-04f, -5.737376417e-04f, -5.720389427e-04f, -5.703393533e-04f, -5.686388762e-04f, -5.669375146e-04f,
--5.652352715e-04f, -5.635321497e-04f, -5.618281524e-04f, -5.601232825e-04f, -5.584175430e-04f, -5.567109370e-04f, -5.550034673e-04f, -5.532951371e-04f, -5.515859493e-04f, -5.498759069e-04f,
--5.481650129e-04f, -5.464532704e-04f, -5.447406823e-04f, -5.430272517e-04f, -5.413129815e-04f, -5.395978748e-04f, -5.378819346e-04f, -5.361651639e-04f, -5.344475657e-04f, -5.327291431e-04f,
--5.310098990e-04f, -5.292898365e-04f, -5.275689586e-04f, -5.258472682e-04f, -5.241247686e-04f, -5.224014626e-04f, -5.206773532e-04f, -5.189524436e-04f, -5.172267368e-04f, -5.155002357e-04f,
--5.137729434e-04f, -5.120448629e-04f, -5.103159974e-04f, -5.085863497e-04f, -5.068559229e-04f, -5.051247201e-04f, -5.033927444e-04f, -5.016599987e-04f, -4.999264860e-04f, -4.981922095e-04f,
--4.964571722e-04f, -4.947213771e-04f, -4.929848272e-04f, -4.912475257e-04f, -4.895094755e-04f, -4.877706797e-04f, -4.860311413e-04f, -4.842908634e-04f, -4.825498491e-04f, -4.808081014e-04f,
--4.790656234e-04f, -4.773224180e-04f, -4.755784884e-04f, -4.738338376e-04f, -4.720884687e-04f, -4.703423848e-04f, -4.685955888e-04f, -4.668480839e-04f, -4.650998731e-04f, -4.633509595e-04f,
--4.616013462e-04f, -4.598510361e-04f, -4.581000324e-04f, -4.563483382e-04f, -4.545959565e-04f, -4.528428903e-04f, -4.510891428e-04f, -4.493347171e-04f, -4.475796161e-04f, -4.458238429e-04f,
--4.440674008e-04f, -4.423102926e-04f, -4.405525215e-04f, -4.387940906e-04f, -4.370350029e-04f, -4.352752616e-04f, -4.335148696e-04f, -4.317538302e-04f, -4.299921463e-04f, -4.282298210e-04f,
--4.264668575e-04f, -4.247032588e-04f, -4.229390280e-04f, -4.211741682e-04f, -4.194086825e-04f, -4.176425739e-04f, -4.158758456e-04f, -4.141085006e-04f, -4.123405420e-04f, -4.105719730e-04f,
--4.088027966e-04f, -4.070330159e-04f, -4.052626339e-04f, -4.034916539e-04f, -4.017200789e-04f, -3.999479120e-04f, -3.981751563e-04f, -3.964018148e-04f, -3.946278908e-04f, -3.928533872e-04f,
--3.910783072e-04f, -3.893026539e-04f, -3.875264304e-04f, -3.857496398e-04f, -3.839722852e-04f, -3.821943697e-04f, -3.804158964e-04f, -3.786368684e-04f, -3.768572889e-04f, -3.750771608e-04f,
--3.732964875e-04f, -3.715152718e-04f, -3.697335170e-04f, -3.679512263e-04f, -3.661684025e-04f, -3.643850490e-04f, -3.626011688e-04f, -3.608167650e-04f, -3.590318408e-04f, -3.572463992e-04f,
--3.554604434e-04f, -3.536739765e-04f, -3.518870015e-04f, -3.500995217e-04f, -3.483115402e-04f, -3.465230600e-04f, -3.447340843e-04f, -3.429446162e-04f, -3.411546588e-04f, -3.393642153e-04f,
--3.375732887e-04f, -3.357818822e-04f, -3.339899990e-04f, -3.321976421e-04f, -3.304048147e-04f, -3.286115198e-04f, -3.268177607e-04f, -3.250235405e-04f, -3.232288622e-04f, -3.214337290e-04f,
--3.196381441e-04f, -3.178421105e-04f, -3.160456315e-04f, -3.142487100e-04f, -3.124513494e-04f, -3.106535526e-04f, -3.088553228e-04f, -3.070566632e-04f, -3.052575769e-04f, -3.034580671e-04f,
--3.016581368e-04f, -2.998577892e-04f, -2.980570274e-04f, -2.962558546e-04f, -2.944542739e-04f, -2.926522885e-04f, -2.908499014e-04f, -2.890471159e-04f, -2.872439351e-04f, -2.854403620e-04f,
--2.836363999e-04f, -2.818320519e-04f, -2.800273211e-04f, -2.782222107e-04f, -2.764167237e-04f, -2.746108635e-04f, -2.728046330e-04f, -2.709980355e-04f, -2.691910741e-04f, -2.673837519e-04f,
--2.655760720e-04f, -2.637680377e-04f, -2.619596521e-04f, -2.601509183e-04f, -2.583418394e-04f, -2.565324186e-04f, -2.547226591e-04f, -2.529125640e-04f, -2.511021364e-04f, -2.492913796e-04f,
--2.474802966e-04f, -2.456688906e-04f, -2.438571647e-04f, -2.420451221e-04f, -2.402327660e-04f, -2.384200995e-04f, -2.366071257e-04f, -2.347938479e-04f, -2.329802691e-04f, -2.311663925e-04f,
--2.293522212e-04f, -2.275377585e-04f, -2.257230075e-04f, -2.239079712e-04f, -2.220926530e-04f, -2.202770558e-04f, -2.184611830e-04f, -2.166450376e-04f, -2.148286228e-04f, -2.130119417e-04f,
--2.111949975e-04f, -2.093777934e-04f, -2.075603325e-04f, -2.057426180e-04f, -2.039246531e-04f, -2.021064408e-04f, -2.002879843e-04f, -1.984692869e-04f, -1.966503516e-04f, -1.948311816e-04f,
--1.930117801e-04f, -1.911921503e-04f, -1.893722952e-04f, -1.875522181e-04f, -1.857319221e-04f, -1.839114104e-04f, -1.820906861e-04f, -1.802697524e-04f, -1.784486124e-04f, -1.766272694e-04f,
--1.748057264e-04f, -1.729839867e-04f, -1.711620533e-04f, -1.693399295e-04f, -1.675176184e-04f, -1.656951232e-04f, -1.638724470e-04f, -1.620495931e-04f, -1.602265644e-04f, -1.584033643e-04f,
--1.565799959e-04f, -1.547564623e-04f, -1.529327667e-04f, -1.511089123e-04f, -1.492849022e-04f, -1.474607396e-04f, -1.456364276e-04f, -1.438119695e-04f, -1.419873683e-04f, -1.401626273e-04f,
--1.383377496e-04f, -1.365127383e-04f, -1.346875967e-04f, -1.328623278e-04f, -1.310369349e-04f, -1.292114212e-04f, -1.273857897e-04f, -1.255600436e-04f, -1.237341861e-04f, -1.219082204e-04f,
--1.200821496e-04f, -1.182559769e-04f, -1.164297055e-04f, -1.146033385e-04f, -1.127768790e-04f, -1.109503303e-04f, -1.091236955e-04f, -1.072969778e-04f, -1.054701803e-04f, -1.036433061e-04f,
--1.018163586e-04f, -9.998934072e-05f, -9.816225574e-05f, -9.633510680e-05f, -9.450789706e-05f, -9.268062969e-05f, -9.085330784e-05f, -8.902593468e-05f, -8.719851337e-05f, -8.537104707e-05f,
--8.354353894e-05f, -8.171599214e-05f, -7.988840984e-05f, -7.806079520e-05f, -7.623315137e-05f, -7.440548153e-05f, -7.257778882e-05f, -7.075007642e-05f, -6.892234747e-05f, -6.709460515e-05f,
--6.526685260e-05f, -6.343909300e-05f, -6.161132951e-05f, -5.978356527e-05f, -5.795580345e-05f, -5.612804722e-05f, -5.430029972e-05f, -5.247256412e-05f, -5.064484358e-05f, -4.881714126e-05f,
--4.698946031e-05f, -4.516180389e-05f, -4.333417517e-05f, -4.150657729e-05f, -3.967901341e-05f, -3.785148670e-05f, -3.602400031e-05f, -3.419655740e-05f, -3.236916112e-05f, -3.054181463e-05f,
--2.871452108e-05f, -2.688728363e-05f, -2.506010544e-05f, -2.323298966e-05f, -2.140593945e-05f, -1.957895796e-05f, -1.775204834e-05f, -1.592521375e-05f, -1.409845734e-05f, -1.227178227e-05f,
--1.044519169e-05f, -8.618688746e-06f, -6.792276597e-06f, -4.965958392e-06f, -3.139737285e-06f, -1.313616425e-06f, 5.124010351e-07f, 2.338311946e-06f, 4.164113158e-06f, 5.989801520e-06f,
-7.815373883e-06f, 9.640827099e-06f, 1.146615802e-05f, 1.329136349e-05f, 1.511644037e-05f, 1.694138552e-05f, 1.876619577e-05f, 2.059086799e-05f, 2.241539903e-05f, 2.423978575e-05f,
-2.606402499e-05f, 2.788811362e-05f, 2.971204849e-05f, 3.153582646e-05f, 3.335944437e-05f, 3.518289910e-05f, 3.700618749e-05f, 3.882930641e-05f, 4.065225271e-05f, 4.247502325e-05f,
-4.429761489e-05f, 4.612002449e-05f, 4.794224891e-05f, 4.976428501e-05f, 5.158612966e-05f, 5.340777971e-05f, 5.522923202e-05f, 5.705048347e-05f, 5.887153091e-05f, 6.069237121e-05f,
-6.251300122e-05f, 6.433341783e-05f, 6.615361788e-05f, 6.797359825e-05f, 6.979335581e-05f, 7.161288742e-05f, 7.343218995e-05f, 7.525126026e-05f, 7.707009524e-05f, 7.888869174e-05f,
-8.070704663e-05f, 8.252515679e-05f, 8.434301909e-05f, 8.616063040e-05f, 8.797798760e-05f, 8.979508755e-05f, 9.161192713e-05f, 9.342850321e-05f, 9.524481267e-05f, 9.706085239e-05f,
-9.887661924e-05f, 1.006921101e-04f, 1.025073218e-04f, 1.043222514e-04f, 1.061368955e-04f, 1.079512512e-04f, 1.097653153e-04f, 1.115790846e-04f, 1.133925561e-04f, 1.152057267e-04f,
-1.170185932e-04f, 1.188311526e-04f, 1.206434016e-04f, 1.224553372e-04f, 1.242669563e-04f, 1.260782557e-04f, 1.278892324e-04f, 1.296998832e-04f, 1.315102050e-04f, 1.333201948e-04f,
-1.351298493e-04f, 1.369391656e-04f, 1.387481404e-04f, 1.405567707e-04f, 1.423650534e-04f, 1.441729854e-04f, 1.459805635e-04f, 1.477877846e-04f, 1.495946458e-04f, 1.514011437e-04f,
-1.532072755e-04f, 1.550130378e-04f, 1.568184277e-04f, 1.586234421e-04f, 1.604280778e-04f, 1.622323318e-04f, 1.640362009e-04f, 1.658396821e-04f, 1.676427723e-04f, 1.694454683e-04f,
-1.712477671e-04f, 1.730496656e-04f, 1.748511606e-04f, 1.766522492e-04f, 1.784529282e-04f, 1.802531945e-04f, 1.820530451e-04f, 1.838524768e-04f, 1.856514865e-04f, 1.874500713e-04f,
-1.892482279e-04f, 1.910459533e-04f, 1.928432445e-04f, 1.946400983e-04f, 1.964365117e-04f, 1.982324815e-04f, 2.000280048e-04f, 2.018230784e-04f, 2.036176992e-04f, 2.054118642e-04f,
-2.072055703e-04f, 2.089988144e-04f, 2.107915935e-04f, 2.125839045e-04f, 2.143757443e-04f, 2.161671098e-04f, 2.179579979e-04f, 2.197484057e-04f, 2.215383300e-04f, 2.233277678e-04f,
-2.251167160e-04f, 2.269051715e-04f, 2.286931313e-04f, 2.304805923e-04f, 2.322675515e-04f, 2.340540057e-04f, 2.358399520e-04f, 2.376253873e-04f, 2.394103084e-04f, 2.411947125e-04f,
-2.429785963e-04f, 2.447619569e-04f, 2.465447912e-04f, 2.483270962e-04f, 2.501088687e-04f, 2.518901058e-04f, 2.536708045e-04f, 2.554509615e-04f, 2.572305740e-04f, 2.590096388e-04f,
-2.607881530e-04f, 2.625661135e-04f, 2.643435171e-04f, 2.661203610e-04f, 2.678966421e-04f, 2.696723572e-04f, 2.714475035e-04f, 2.732220778e-04f, 2.749960771e-04f, 2.767694983e-04f,
-2.785423386e-04f, 2.803145947e-04f, 2.820862638e-04f, 2.838573427e-04f, 2.856278284e-04f, 2.873977179e-04f, 2.891670083e-04f, 2.909356963e-04f, 2.927037791e-04f, 2.944712537e-04f,
-2.962381169e-04f, 2.980043658e-04f, 2.997699973e-04f, 3.015350085e-04f, 3.032993963e-04f, 3.050631577e-04f, 3.068262897e-04f, 3.085887893e-04f, 3.103506535e-04f, 3.121118793e-04f,
-3.138724636e-04f, 3.156324035e-04f, 3.173916959e-04f, 3.191503378e-04f, 3.209083263e-04f, 3.226656584e-04f, 3.244223310e-04f, 3.261783411e-04f, 3.279336858e-04f, 3.296883620e-04f,
-3.314423668e-04f, 3.331956972e-04f, 3.349483501e-04f, 3.367003226e-04f, 3.384516117e-04f, 3.402022144e-04f, 3.419521277e-04f, 3.437013486e-04f, 3.454498742e-04f, 3.471977015e-04f,
-3.489448275e-04f, 3.506912491e-04f, 3.524369635e-04f, 3.541819677e-04f, 3.559262586e-04f, 3.576698333e-04f, 3.594126888e-04f, 3.611548222e-04f, 3.628962305e-04f, 3.646369107e-04f,
-3.663768599e-04f, 3.681160751e-04f, 3.698545533e-04f, 3.715922915e-04f, 3.733292869e-04f, 3.750655363e-04f, 3.768010370e-04f, 3.785357859e-04f, 3.802697801e-04f, 3.820030166e-04f,
-3.837354924e-04f, 3.854672047e-04f, 3.871981504e-04f, 3.889283267e-04f, 3.906577305e-04f, 3.923863589e-04f, 3.941142091e-04f, 3.958412779e-04f, 3.975675626e-04f, 3.992930601e-04f,
-4.010177676e-04f, 4.027416821e-04f, 4.044648006e-04f, 4.061871202e-04f, 4.079086380e-04f, 4.096293511e-04f, 4.113492565e-04f, 4.130683513e-04f, 4.147866327e-04f, 4.165040975e-04f,
-4.182207430e-04f, 4.199365663e-04f, 4.216515643e-04f, 4.233657342e-04f, 4.250790731e-04f, 4.267915781e-04f, 4.285032461e-04f, 4.302140745e-04f, 4.319240601e-04f, 4.336332002e-04f,
-4.353414917e-04f, 4.370489319e-04f, 4.387555178e-04f, 4.404612465e-04f, 4.421661151e-04f, 4.438701207e-04f, 4.455732604e-04f, 4.472755313e-04f, 4.489769306e-04f, 4.506774553e-04f,
-4.523771025e-04f, 4.540758694e-04f, 4.557737531e-04f, 4.574707507e-04f, 4.591668592e-04f, 4.608620759e-04f, 4.625563979e-04f, 4.642498222e-04f, 4.659423460e-04f, 4.676339665e-04f,
-4.693246807e-04f, 4.710144858e-04f, 4.727033789e-04f, 4.743913571e-04f, 4.760784176e-04f, 4.777645576e-04f, 4.794497741e-04f, 4.811340643e-04f, 4.828174253e-04f, 4.844998543e-04f,
-4.861813484e-04f, 4.878619049e-04f, 4.895415207e-04f, 4.912201931e-04f, 4.928979193e-04f, 4.945746963e-04f, 4.962505214e-04f, 4.979253917e-04f, 4.995993043e-04f, 5.012722565e-04f,
-5.029442453e-04f, 5.046152680e-04f, 5.062853217e-04f, 5.079544036e-04f, 5.096225109e-04f, 5.112896407e-04f, 5.129557901e-04f, 5.146209565e-04f, 5.162851370e-04f, 5.179483286e-04f,
-5.196105287e-04f, 5.212717344e-04f, 5.229319429e-04f, 5.245911514e-04f, 5.262493571e-04f, 5.279065571e-04f, 5.295627487e-04f, 5.312179290e-04f, 5.328720953e-04f, 5.345252447e-04f,
-5.361773745e-04f, 5.378284818e-04f, 5.394785639e-04f, 5.411276179e-04f, 5.427756411e-04f, 5.444226307e-04f, 5.460685839e-04f, 5.477134980e-04f, 5.493573700e-04f, 5.510001973e-04f,
-5.526419771e-04f, 5.542827065e-04f, 5.559223829e-04f, 5.575610034e-04f, 5.591985653e-04f, 5.608350658e-04f, 5.624705021e-04f, 5.641048715e-04f, 5.657381712e-04f, 5.673703984e-04f,
-5.690015504e-04f, 5.706316245e-04f, 5.722606178e-04f, 5.738885277e-04f, 5.755153513e-04f, 5.771410859e-04f, 5.787657288e-04f, 5.803892772e-04f, 5.820117284e-04f, 5.836330797e-04f,
-5.852533283e-04f, 5.868724714e-04f, 5.884905063e-04f, 5.901074304e-04f, 5.917232408e-04f, 5.933379349e-04f, 5.949515098e-04f, 5.965639630e-04f, 5.981752916e-04f, 5.997854930e-04f,
-6.013945644e-04f, 6.030025031e-04f, 6.046093064e-04f, 6.062149716e-04f, 6.078194959e-04f, 6.094228768e-04f, 6.110251114e-04f, 6.126261970e-04f, 6.142261311e-04f, 6.158249107e-04f,
-6.174225334e-04f, 6.190189963e-04f, 6.206142968e-04f, 6.222084321e-04f, 6.238013997e-04f, 6.253931968e-04f, 6.269838207e-04f, 6.285732688e-04f, 6.301615383e-04f, 6.317486266e-04f,
-6.333345310e-04f, 6.349192489e-04f, 6.365027775e-04f, 6.380851143e-04f, 6.396662564e-04f, 6.412462014e-04f, 6.428249464e-04f, 6.444024890e-04f, 6.459788263e-04f, 6.475539557e-04f,
-6.491278746e-04f, 6.507005804e-04f, 6.522720703e-04f, 6.538423418e-04f, 6.554113922e-04f, 6.569792189e-04f, 6.585458191e-04f, 6.601111904e-04f, 6.616753300e-04f, 6.632382353e-04f,
-6.647999036e-04f, 6.663603325e-04f, 6.679195191e-04f, 6.694774610e-04f, 6.710341555e-04f, 6.725895999e-04f, 6.741437916e-04f, 6.756967281e-04f, 6.772484068e-04f, 6.787988249e-04f,
-6.803479800e-04f, 6.818958693e-04f, 6.834424904e-04f, 6.849878405e-04f, 6.865319172e-04f, 6.880747177e-04f, 6.896162396e-04f, 6.911564802e-04f, 6.926954369e-04f, 6.942331072e-04f,
-6.957694885e-04f, 6.973045781e-04f, 6.988383735e-04f, 7.003708722e-04f, 7.019020715e-04f, 7.034319690e-04f, 7.049605619e-04f, 7.064878478e-04f, 7.080138240e-04f, 7.095384881e-04f,
-7.110618374e-04f, 7.125838695e-04f, 7.141045817e-04f, 7.156239715e-04f, 7.171420363e-04f, 7.186587737e-04f, 7.201741810e-04f, 7.216882557e-04f, 7.232009953e-04f, 7.247123972e-04f,
-7.262224590e-04f, 7.277311780e-04f, 7.292385517e-04f, 7.307445776e-04f, 7.322492533e-04f, 7.337525761e-04f, 7.352545435e-04f, 7.367551531e-04f, 7.382544023e-04f, 7.397522885e-04f,
-7.412488094e-04f, 7.427439623e-04f, 7.442377448e-04f, 7.457301544e-04f, 7.472211885e-04f, 7.487108448e-04f, 7.501991206e-04f, 7.516860135e-04f, 7.531715209e-04f, 7.546556405e-04f,
-7.561383697e-04f, 7.576197061e-04f, 7.590996471e-04f, 7.605781903e-04f, 7.620553332e-04f, 7.635310733e-04f, 7.650054082e-04f, 7.664783354e-04f, 7.679498524e-04f, 7.694199568e-04f,
-7.708886461e-04f, 7.723559179e-04f, 7.738217697e-04f, 7.752861990e-04f, 7.767492034e-04f, 7.782107805e-04f, 7.796709278e-04f, 7.811296429e-04f, 7.825869233e-04f, 7.840427665e-04f,
-7.854971703e-04f, 7.869501321e-04f, 7.884016494e-04f, 7.898517200e-04f, 7.913003413e-04f, 7.927475110e-04f, 7.941932265e-04f, 7.956374856e-04f, 7.970802858e-04f, 7.985216246e-04f,
-7.999614997e-04f, 8.013999087e-04f, 8.028368492e-04f, 8.042723187e-04f, 8.057063149e-04f, 8.071388354e-04f, 8.085698778e-04f, 8.099994396e-04f, 8.114275186e-04f, 8.128541123e-04f,
-8.142792184e-04f, 8.157028345e-04f, 8.171249581e-04f, 8.185455870e-04f, 8.199647188e-04f, 8.213823510e-04f, 8.227984814e-04f, 8.242131075e-04f, 8.256262271e-04f, 8.270378377e-04f,
-8.284479370e-04f, 8.298565227e-04f, 8.312635923e-04f, 8.326691437e-04f, 8.340731744e-04f, 8.354756820e-04f, 8.368766643e-04f, 8.382761189e-04f, 8.396740435e-04f, 8.410704357e-04f,
-8.424652933e-04f, 8.438586139e-04f, 8.452503951e-04f, 8.466406348e-04f, 8.480293305e-04f, 8.494164799e-04f, 8.508020808e-04f, 8.521861308e-04f, 8.535686276e-04f, 8.549495690e-04f,
-8.563289526e-04f, 8.577067762e-04f, 8.590830374e-04f, 8.604577339e-04f, 8.618308635e-04f, 8.632024240e-04f, 8.645724129e-04f, 8.659408281e-04f, 8.673076672e-04f, 8.686729280e-04f,
-8.700366082e-04f, 8.713987056e-04f, 8.727592179e-04f, 8.741181428e-04f, 8.754754781e-04f, 8.768312215e-04f, 8.781853708e-04f, 8.795379237e-04f, 8.808888780e-04f, 8.822382314e-04f,
-8.835859817e-04f, 8.849321267e-04f, 8.862766641e-04f, 8.876195916e-04f, 8.889609072e-04f, 8.903006085e-04f, 8.916386933e-04f, 8.929751594e-04f, 8.943100045e-04f, 8.956432266e-04f,
-8.969748233e-04f, 8.983047924e-04f, 8.996331318e-04f, 9.009598393e-04f, 9.022849125e-04f, 9.036083495e-04f, 9.049301479e-04f, 9.062503055e-04f, 9.075688203e-04f, 9.088856899e-04f,
-9.102009122e-04f, 9.115144851e-04f, 9.128264063e-04f, 9.141366738e-04f, 9.154452852e-04f, 9.167522385e-04f, 9.180575315e-04f, 9.193611620e-04f, 9.206631279e-04f, 9.219634271e-04f,
-9.232620573e-04f, 9.245590164e-04f, 9.258543022e-04f, 9.271479128e-04f, 9.284398458e-04f, 9.297300992e-04f, 9.310186708e-04f, 9.323055584e-04f, 9.335907601e-04f, 9.348742736e-04f,
-9.361560969e-04f, 9.374362277e-04f, 9.387146640e-04f, 9.399914037e-04f, 9.412664447e-04f, 9.425397849e-04f, 9.438114221e-04f, 9.450813543e-04f, 9.463495793e-04f, 9.476160951e-04f,
-9.488808996e-04f, 9.501439907e-04f, 9.514053664e-04f, 9.526650244e-04f, 9.539229628e-04f, 9.551791795e-04f, 9.564336724e-04f, 9.576864394e-04f, 9.589374785e-04f, 9.601867877e-04f,
-9.614343647e-04f, 9.626802077e-04f, 9.639243145e-04f, 9.651666831e-04f, 9.664073115e-04f, 9.676461975e-04f, 9.688833393e-04f, 9.701187346e-04f, 9.713523816e-04f, 9.725842780e-04f,
-9.738144221e-04f, 9.750428116e-04f, 9.762694446e-04f, 9.774943191e-04f, 9.787174331e-04f, 9.799387845e-04f, 9.811583713e-04f, 9.823761915e-04f, 9.835922432e-04f, 9.848065243e-04f,
-9.860190328e-04f, 9.872297667e-04f, 9.884387241e-04f, 9.896459030e-04f, 9.908513013e-04f, 9.920549171e-04f, 9.932567484e-04f, 9.944567933e-04f, 9.956550497e-04f, 9.968515158e-04f,
-9.980461895e-04f, 9.992390688e-04f, 1.000430152e-03f, 1.001619437e-03f, 1.002806921e-03f, 1.003992604e-03f, 1.005176482e-03f, 1.006358555e-03f, 1.007538819e-03f, 1.008717274e-03f,
-1.009893917e-03f, 1.011068746e-03f, 1.012241759e-03f, 1.013412955e-03f, 1.014582331e-03f, 1.015749886e-03f, 1.016915617e-03f, 1.018079523e-03f, 1.019241602e-03f, 1.020401852e-03f,
-1.021560271e-03f, 1.022716857e-03f, 1.023871608e-03f, 1.025024523e-03f, 1.026175599e-03f, 1.027324835e-03f, 1.028472228e-03f, 1.029617777e-03f, 1.030761480e-03f, 1.031903336e-03f,
-1.033043341e-03f, 1.034181495e-03f, 1.035317795e-03f, 1.036452240e-03f, 1.037584828e-03f, 1.038715557e-03f, 1.039844425e-03f, 1.040971430e-03f, 1.042096570e-03f, 1.043219844e-03f,
-1.044341250e-03f, 1.045460785e-03f, 1.046578449e-03f, 1.047694239e-03f, 1.048808153e-03f, 1.049920190e-03f, 1.051030348e-03f, 1.052138625e-03f, 1.053245019e-03f, 1.054349528e-03f,
-1.055452151e-03f, 1.056552886e-03f, 1.057651730e-03f, 1.058748683e-03f, 1.059843743e-03f, 1.060936907e-03f, 1.062028174e-03f, 1.063117541e-03f, 1.064205009e-03f, 1.065290573e-03f,
-1.066374234e-03f, 1.067455988e-03f, 1.068535835e-03f, 1.069613772e-03f, 1.070689798e-03f, 1.071763911e-03f, 1.072836110e-03f, 1.073906391e-03f, 1.074974755e-03f, 1.076041198e-03f,
-1.077105720e-03f, 1.078168319e-03f, 1.079228992e-03f, 1.080287738e-03f, 1.081344556e-03f, 1.082399443e-03f, 1.083452399e-03f, 1.084503420e-03f, 1.085552507e-03f, 1.086599656e-03f,
-1.087644866e-03f, 1.088688136e-03f, 1.089729463e-03f, 1.090768847e-03f, 1.091806285e-03f, 1.092841776e-03f, 1.093875317e-03f, 1.094906908e-03f, 1.095936547e-03f, 1.096964232e-03f,
-1.097989962e-03f, 1.099013734e-03f, 1.100035547e-03f, 1.101055399e-03f, 1.102073289e-03f, 1.103089216e-03f, 1.104103176e-03f, 1.105115170e-03f, 1.106125195e-03f, 1.107133249e-03f,
-1.108139332e-03f, 1.109143440e-03f, 1.110145574e-03f, 1.111145730e-03f, 1.112143908e-03f, 1.113140106e-03f, 1.114134322e-03f, 1.115126554e-03f, 1.116116802e-03f, 1.117105063e-03f,
-1.118091336e-03f, 1.119075619e-03f, 1.120057911e-03f, 1.121038210e-03f, 1.122016515e-03f, 1.122992823e-03f, 1.123967134e-03f, 1.124939445e-03f, 1.125909756e-03f, 1.126878065e-03f,
-1.127844369e-03f, 1.128808669e-03f, 1.129770961e-03f, 1.130731244e-03f, 1.131689518e-03f, 1.132645780e-03f, 1.133600029e-03f, 1.134552263e-03f, 1.135502481e-03f, 1.136450681e-03f,
-1.137396862e-03f, 1.138341022e-03f, 1.139283159e-03f, 1.140223273e-03f, 1.141161362e-03f, 1.142097424e-03f, 1.143031457e-03f, 1.143963461e-03f, 1.144893433e-03f, 1.145821373e-03f,
-1.146747278e-03f, 1.147671148e-03f, 1.148592980e-03f, 1.149512774e-03f, 1.150430527e-03f, 1.151346239e-03f, 1.152259907e-03f, 1.153171531e-03f, 1.154081109e-03f, 1.154988639e-03f,
-1.155894121e-03f, 1.156797552e-03f, 1.157698931e-03f, 1.158598257e-03f, 1.159495528e-03f, 1.160390744e-03f, 1.161283901e-03f, 1.162175000e-03f, 1.163064038e-03f, 1.163951014e-03f,
-1.164835927e-03f, 1.165718775e-03f, 1.166599558e-03f, 1.167478272e-03f, 1.168354918e-03f, 1.169229494e-03f, 1.170101998e-03f, 1.170972429e-03f, 1.171840786e-03f, 1.172707067e-03f,
-1.173571270e-03f, 1.174433395e-03f, 1.175293440e-03f, 1.176151404e-03f, 1.177007285e-03f, 1.177861082e-03f, 1.178712794e-03f, 1.179562419e-03f, 1.180409956e-03f, 1.181255404e-03f,
-1.182098761e-03f, 1.182940025e-03f, 1.183779197e-03f, 1.184616273e-03f, 1.185451254e-03f, 1.186284137e-03f, 1.187114921e-03f, 1.187943606e-03f, 1.188770189e-03f, 1.189594669e-03f,
-1.190417046e-03f, 1.191237317e-03f, 1.192055481e-03f, 1.192871538e-03f, 1.193685486e-03f, 1.194497323e-03f, 1.195307049e-03f, 1.196114662e-03f, 1.196920160e-03f, 1.197723543e-03f,
-1.198524809e-03f, 1.199323957e-03f, 1.200120986e-03f, 1.200915894e-03f, 1.201708680e-03f, 1.202499344e-03f, 1.203287883e-03f, 1.204074296e-03f, 1.204858583e-03f, 1.205640742e-03f,
-1.206420772e-03f, 1.207198671e-03f, 1.207974438e-03f, 1.208748073e-03f, 1.209519573e-03f, 1.210288938e-03f, 1.211056167e-03f, 1.211821258e-03f, 1.212584210e-03f, 1.213345022e-03f,
-1.214103692e-03f, 1.214860220e-03f, 1.215614605e-03f, 1.216366844e-03f, 1.217116938e-03f, 1.217864884e-03f, 1.218610682e-03f, 1.219354330e-03f, 1.220095828e-03f, 1.220835174e-03f,
-1.221572367e-03f, 1.222307405e-03f, 1.223040289e-03f, 1.223771016e-03f, 1.224499585e-03f, 1.225225996e-03f, 1.225950246e-03f, 1.226672336e-03f, 1.227392264e-03f, 1.228110028e-03f,
-1.228825629e-03f, 1.229539063e-03f, 1.230250331e-03f, 1.230959432e-03f, 1.231666364e-03f, 1.232371126e-03f, 1.233073717e-03f, 1.233774136e-03f, 1.234472382e-03f, 1.235168453e-03f,
-1.235862350e-03f, 1.236554070e-03f, 1.237243612e-03f, 1.237930977e-03f, 1.238616161e-03f, 1.239299165e-03f, 1.239979988e-03f, 1.240658627e-03f, 1.241335083e-03f, 1.242009354e-03f,
-1.242681440e-03f, 1.243351338e-03f, 1.244019049e-03f, 1.244684570e-03f, 1.245347902e-03f, 1.246009043e-03f, 1.246667992e-03f, 1.247324747e-03f, 1.247979309e-03f, 1.248631676e-03f,
-1.249281847e-03f, 1.249929821e-03f, 1.250575596e-03f, 1.251219173e-03f, 1.251860550e-03f, 1.252499726e-03f, 1.253136700e-03f, 1.253771471e-03f, 1.254404038e-03f, 1.255034400e-03f,
-1.255662557e-03f, 1.256288507e-03f, 1.256912249e-03f, 1.257533782e-03f, 1.258153106e-03f, 1.258770220e-03f, 1.259385121e-03f, 1.259997811e-03f, 1.260608287e-03f, 1.261216549e-03f,
-1.261822595e-03f, 1.262426426e-03f, 1.263028039e-03f, 1.263627435e-03f, 1.264224611e-03f, 1.264819568e-03f, 1.265412305e-03f, 1.266002819e-03f, 1.266591112e-03f, 1.267177181e-03f,
-1.267761025e-03f, 1.268342645e-03f, 1.268922039e-03f, 1.269499206e-03f, 1.270074145e-03f, 1.270646856e-03f, 1.271217337e-03f, 1.271785588e-03f, 1.272351607e-03f, 1.272915395e-03f,
-1.273476950e-03f, 1.274036271e-03f, 1.274593358e-03f, 1.275148209e-03f, 1.275700825e-03f, 1.276251203e-03f, 1.276799343e-03f, 1.277345245e-03f, 1.277888907e-03f, 1.278430329e-03f,
-1.278969510e-03f, 1.279506449e-03f, 1.280041146e-03f, 1.280573599e-03f, 1.281103807e-03f, 1.281631771e-03f, 1.282157489e-03f, 1.282680960e-03f, 1.283202184e-03f, 1.283721160e-03f,
-1.284237887e-03f, 1.284752364e-03f, 1.285264591e-03f, 1.285774566e-03f, 1.286282290e-03f, 1.286787761e-03f, 1.287290978e-03f, 1.287791942e-03f, 1.288290650e-03f, 1.288787103e-03f,
-1.289281299e-03f, 1.289773239e-03f, 1.290262920e-03f, 1.290750344e-03f, 1.291235507e-03f, 1.291718411e-03f, 1.292199055e-03f, 1.292677437e-03f, 1.293153556e-03f, 1.293627414e-03f,
-1.294099007e-03f, 1.294568337e-03f, 1.295035402e-03f, 1.295500202e-03f, 1.295962735e-03f, 1.296423001e-03f, 1.296881001e-03f, 1.297336732e-03f, 1.297790194e-03f, 1.298241387e-03f,
-1.298690309e-03f, 1.299136961e-03f, 1.299581342e-03f, 1.300023451e-03f, 1.300463287e-03f, 1.300900850e-03f, 1.301336138e-03f, 1.301769153e-03f, 1.302199892e-03f, 1.302628356e-03f,
-1.303054543e-03f, 1.303478453e-03f, 1.303900086e-03f, 1.304319441e-03f, 1.304736517e-03f, 1.305151313e-03f, 1.305563830e-03f, 1.305974066e-03f, 1.306382022e-03f, 1.306787695e-03f,
-1.307191087e-03f, 1.307592195e-03f, 1.307991021e-03f, 1.308387562e-03f, 1.308781819e-03f, 1.309173791e-03f, 1.309563477e-03f, 1.309950878e-03f, 1.310335992e-03f, 1.310718818e-03f,
-1.311099357e-03f, 1.311477608e-03f, 1.311853570e-03f, 1.312227243e-03f, 1.312598626e-03f, 1.312967719e-03f, 1.313334521e-03f, 1.313699032e-03f, 1.314061251e-03f, 1.314421178e-03f,
-1.314778812e-03f, 1.315134153e-03f, 1.315487201e-03f, 1.315837954e-03f, 1.316186412e-03f, 1.316532575e-03f, 1.316876443e-03f, 1.317218015e-03f, 1.317557290e-03f, 1.317894268e-03f,
-1.318228949e-03f, 1.318561332e-03f, 1.318891417e-03f, 1.319219203e-03f, 1.319544690e-03f, 1.319867877e-03f, 1.320188764e-03f, 1.320507351e-03f, 1.320823637e-03f, 1.321137622e-03f,
-1.321449305e-03f, 1.321758685e-03f, 1.322065764e-03f, 1.322370539e-03f, 1.322673012e-03f, 1.322973180e-03f, 1.323271045e-03f, 1.323566605e-03f, 1.323859861e-03f, 1.324150811e-03f,
-1.324439456e-03f, 1.324725794e-03f, 1.325009827e-03f, 1.325291553e-03f, 1.325570972e-03f, 1.325848083e-03f, 1.326122887e-03f, 1.326395383e-03f, 1.326665571e-03f, 1.326933449e-03f,
-1.327199019e-03f, 1.327462280e-03f, 1.327723231e-03f, 1.327981872e-03f, 1.328238202e-03f, 1.328492222e-03f, 1.328743931e-03f, 1.328993329e-03f, 1.329240416e-03f, 1.329485190e-03f,
-1.329727653e-03f, 1.329967803e-03f, 1.330205641e-03f, 1.330441165e-03f, 1.330674377e-03f, 1.330905275e-03f, 1.331133859e-03f, 1.331360129e-03f, 1.331584085e-03f, 1.331805727e-03f,
-1.332025054e-03f, 1.332242065e-03f, 1.332456762e-03f, 1.332669143e-03f, 1.332879209e-03f, 1.333086958e-03f, 1.333292391e-03f, 1.333495508e-03f, 1.333696309e-03f, 1.333894792e-03f,
-1.334090959e-03f, 1.334284808e-03f, 1.334476340e-03f, 1.334665555e-03f, 1.334852451e-03f, 1.335037030e-03f, 1.335219290e-03f, 1.335399232e-03f, 1.335576856e-03f, 1.335752161e-03f,
-1.335925147e-03f, 1.336095813e-03f, 1.336264161e-03f, 1.336430189e-03f, 1.336593898e-03f, 1.336755288e-03f, 1.336914357e-03f, 1.337071106e-03f, 1.337225536e-03f, 1.337377645e-03f,
-1.337527434e-03f, 1.337674902e-03f, 1.337820050e-03f, 1.337962877e-03f, 1.338103384e-03f, 1.338241569e-03f, 1.338377434e-03f, 1.338510977e-03f, 1.338642199e-03f, 1.338771100e-03f,
-1.338897679e-03f, 1.339021937e-03f, 1.339143873e-03f, 1.339263488e-03f, 1.339380781e-03f, 1.339495753e-03f, 1.339608402e-03f, 1.339718730e-03f, 1.339826735e-03f, 1.339932419e-03f,
-1.340035780e-03f, 1.340136820e-03f, 1.340235537e-03f, 1.340331932e-03f, 1.340426005e-03f, 1.340517756e-03f, 1.340607185e-03f, 1.340694291e-03f, 1.340779075e-03f, 1.340861537e-03f,
-1.340941676e-03f, 1.341019493e-03f, 1.341094988e-03f, 1.341168160e-03f, 1.341239010e-03f, 1.341307538e-03f, 1.341373744e-03f, 1.341437627e-03f, 1.341499188e-03f, 1.341558427e-03f,
-1.341615344e-03f, 1.341669939e-03f, 1.341722212e-03f, 1.341772162e-03f, 1.341819791e-03f, 1.341865097e-03f, 1.341908082e-03f, 1.341948745e-03f, 1.341987086e-03f, 1.342023106e-03f,
-1.342056804e-03f, 1.342088180e-03f, 1.342117235e-03f, 1.342143969e-03f, 1.342168381e-03f, 1.342190472e-03f, 1.342210242e-03f, 1.342227692e-03f, 1.342242820e-03f, 1.342255627e-03f,
-1.342266114e-03f, 1.342274280e-03f, 1.342280126e-03f, 1.342283651e-03f, 1.342284857e-03f, 1.342283742e-03f, 1.342280307e-03f, 1.342274553e-03f, 1.342266479e-03f, 1.342256086e-03f,
-1.342243373e-03f, 1.342228341e-03f, 1.342210990e-03f, 1.342191320e-03f, 1.342169332e-03f, 1.342145025e-03f, 1.342118400e-03f, 1.342089457e-03f, 1.342058195e-03f, 1.342024616e-03f,
-1.341988720e-03f, 1.341950506e-03f, 1.341909975e-03f, 1.341867127e-03f, 1.341821962e-03f, 1.341774481e-03f, 1.341724683e-03f, 1.341672569e-03f, 1.341618140e-03f, 1.341561394e-03f,
-1.341502334e-03f, 1.341440958e-03f, 1.341377267e-03f, 1.341311262e-03f, 1.341242942e-03f, 1.341172307e-03f, 1.341099359e-03f, 1.341024098e-03f, 1.340946523e-03f, 1.340866634e-03f,
-1.340784433e-03f, 1.340699919e-03f, 1.340613093e-03f, 1.340523955e-03f, 1.340432506e-03f, 1.340338744e-03f, 1.340242672e-03f, 1.340144289e-03f, 1.340043595e-03f, 1.339940591e-03f,
-1.339835277e-03f, 1.339727654e-03f, 1.339617721e-03f, 1.339505479e-03f, 1.339390929e-03f, 1.339274070e-03f, 1.339154904e-03f, 1.339033429e-03f, 1.338909648e-03f, 1.338783559e-03f,
-1.338655164e-03f, 1.338524463e-03f, 1.338391456e-03f, 1.338256143e-03f, 1.338118526e-03f, 1.337978603e-03f, 1.337836376e-03f, 1.337691846e-03f, 1.337545011e-03f, 1.337395873e-03f,
-1.337244433e-03f, 1.337090690e-03f, 1.336934645e-03f, 1.336776298e-03f, 1.336615650e-03f, 1.336452702e-03f, 1.336287453e-03f, 1.336119904e-03f, 1.335950055e-03f, 1.335777907e-03f,
-1.335603461e-03f, 1.335426716e-03f, 1.335247674e-03f, 1.335066334e-03f, 1.334882697e-03f, 1.334696763e-03f, 1.334508534e-03f, 1.334318009e-03f, 1.334125189e-03f, 1.333930074e-03f,
-1.333732666e-03f, 1.333532963e-03f, 1.333330967e-03f, 1.333126679e-03f, 1.332920098e-03f, 1.332711226e-03f, 1.332500062e-03f, 1.332286607e-03f, 1.332070863e-03f, 1.331852828e-03f,
-1.331632504e-03f, 1.331409892e-03f, 1.331184991e-03f, 1.330957803e-03f, 1.330728327e-03f, 1.330496565e-03f, 1.330262517e-03f, 1.330026183e-03f, 1.329787564e-03f, 1.329546661e-03f,
-1.329303473e-03f, 1.329058003e-03f, 1.328810249e-03f, 1.328560214e-03f, 1.328307896e-03f, 1.328053298e-03f, 1.327796419e-03f, 1.327537260e-03f, 1.327275821e-03f, 1.327012104e-03f,
-1.326746109e-03f, 1.326477836e-03f, 1.326207286e-03f, 1.325934459e-03f, 1.325659357e-03f, 1.325381979e-03f, 1.325102327e-03f, 1.324820401e-03f, 1.324536201e-03f, 1.324249729e-03f,
-1.323960985e-03f, 1.323669969e-03f, 1.323376682e-03f, 1.323081125e-03f, 1.322783299e-03f, 1.322483204e-03f, 1.322180840e-03f, 1.321876209e-03f, 1.321569310e-03f, 1.321260146e-03f,
-1.320948716e-03f, 1.320635021e-03f, 1.320319061e-03f, 1.320000838e-03f, 1.319680352e-03f, 1.319357604e-03f, 1.319032595e-03f, 1.318705324e-03f, 1.318375793e-03f, 1.318044003e-03f,
-1.317709954e-03f, 1.317373647e-03f, 1.317035083e-03f, 1.316694262e-03f, 1.316351185e-03f, 1.316005853e-03f, 1.315658267e-03f, 1.315308427e-03f, 1.314956334e-03f, 1.314601989e-03f,
-1.314245392e-03f, 1.313886544e-03f, 1.313525447e-03f, 1.313162100e-03f, 1.312796505e-03f, 1.312428662e-03f, 1.312058572e-03f, 1.311686236e-03f, 1.311311655e-03f, 1.310934829e-03f,
-1.310555759e-03f, 1.310174446e-03f, 1.309790891e-03f, 1.309405094e-03f, 1.309017057e-03f, 1.308626779e-03f, 1.308234263e-03f, 1.307839508e-03f, 1.307442516e-03f, 1.307043288e-03f,
-1.306641823e-03f, 1.306238124e-03f, 1.305832191e-03f, 1.305424024e-03f, 1.305013624e-03f, 1.304600993e-03f, 1.304186131e-03f, 1.303769040e-03f, 1.303349719e-03f, 1.302928170e-03f,
-1.302504393e-03f, 1.302078390e-03f, 1.301650161e-03f, 1.301219708e-03f, 1.300787030e-03f, 1.300352130e-03f, 1.299915007e-03f, 1.299475663e-03f, 1.299034099e-03f, 1.298590315e-03f,
-1.298144313e-03f, 1.297696093e-03f, 1.297245656e-03f, 1.296793003e-03f, 1.296338135e-03f, 1.295881054e-03f, 1.295421759e-03f, 1.294960251e-03f, 1.294496533e-03f, 1.294030604e-03f,
-1.293562466e-03f, 1.293092119e-03f, 1.292619565e-03f, 1.292144804e-03f, 1.291667837e-03f, 1.291188666e-03f, 1.290707291e-03f, 1.290223713e-03f, 1.289737934e-03f, 1.289249953e-03f,
-1.288759773e-03f, 1.288267394e-03f, 1.287772817e-03f, 1.287276042e-03f, 1.286777072e-03f, 1.286275907e-03f, 1.285772548e-03f, 1.285266996e-03f, 1.284759252e-03f, 1.284249317e-03f,
-1.283737193e-03f, 1.283222879e-03f, 1.282706377e-03f, 1.282187688e-03f, 1.281666814e-03f, 1.281143755e-03f, 1.280618511e-03f, 1.280091085e-03f, 1.279561478e-03f, 1.279029689e-03f,
-1.278495721e-03f, 1.277959574e-03f, 1.277421250e-03f, 1.276880749e-03f, 1.276338073e-03f, 1.275793222e-03f, 1.275246199e-03f, 1.274697002e-03f, 1.274145635e-03f, 1.273592098e-03f,
-1.273036391e-03f, 1.272478517e-03f, 1.271918476e-03f, 1.271356269e-03f, 1.270791898e-03f, 1.270225363e-03f, 1.269656666e-03f, 1.269085807e-03f, 1.268512788e-03f, 1.267937610e-03f,
-1.267360274e-03f, 1.266780781e-03f, 1.266199133e-03f, 1.265615330e-03f, 1.265029373e-03f, 1.264441265e-03f, 1.263851005e-03f, 1.263258595e-03f, 1.262664036e-03f, 1.262067329e-03f,
-1.261468476e-03f, 1.260867478e-03f, 1.260264335e-03f, 1.259659049e-03f, 1.259051622e-03f, 1.258442053e-03f, 1.257830345e-03f, 1.257216499e-03f, 1.256600516e-03f, 1.255982396e-03f,
-1.255362142e-03f, 1.254739754e-03f, 1.254115234e-03f, 1.253488582e-03f, 1.252859801e-03f, 1.252228891e-03f, 1.251595853e-03f, 1.250960689e-03f, 1.250323400e-03f, 1.249683987e-03f,
-1.249042451e-03f, 1.248398794e-03f, 1.247753016e-03f, 1.247105120e-03f, 1.246455106e-03f, 1.245802976e-03f, 1.245148730e-03f, 1.244492370e-03f, 1.243833898e-03f, 1.243173314e-03f,
-1.242510620e-03f, 1.241845817e-03f, 1.241178907e-03f, 1.240509890e-03f, 1.239838768e-03f, 1.239165542e-03f, 1.238490214e-03f, 1.237812784e-03f, 1.237133255e-03f, 1.236451627e-03f,
-1.235767902e-03f, 1.235082080e-03f, 1.234394164e-03f, 1.233704154e-03f, 1.233012053e-03f, 1.232317860e-03f, 1.231621579e-03f, 1.230923209e-03f, 1.230222752e-03f, 1.229520210e-03f,
-1.228815583e-03f, 1.228108874e-03f, 1.227400084e-03f, 1.226689213e-03f, 1.225976264e-03f, 1.225261237e-03f, 1.224544134e-03f, 1.223824956e-03f, 1.223103705e-03f, 1.222380383e-03f,
-1.221654989e-03f, 1.220927527e-03f, 1.220197996e-03f, 1.219466399e-03f, 1.218732738e-03f, 1.217997012e-03f, 1.217259224e-03f, 1.216519375e-03f, 1.215777467e-03f, 1.215033501e-03f,
-1.214287478e-03f, 1.213539400e-03f, 1.212789268e-03f, 1.212037083e-03f, 1.211282848e-03f, 1.210526563e-03f, 1.209768229e-03f, 1.209007849e-03f, 1.208245424e-03f, 1.207480955e-03f,
-1.206714443e-03f, 1.205945891e-03f, 1.205175299e-03f, 1.204402669e-03f, 1.203628002e-03f, 1.202851300e-03f, 1.202072564e-03f, 1.201291796e-03f, 1.200508998e-03f, 1.199724170e-03f,
-1.198937314e-03f, 1.198148432e-03f, 1.197357525e-03f, 1.196564594e-03f, 1.195769642e-03f, 1.194972669e-03f, 1.194173678e-03f, 1.193372669e-03f, 1.192569644e-03f, 1.191764605e-03f,
-1.190957552e-03f, 1.190148489e-03f, 1.189337415e-03f, 1.188524334e-03f, 1.187709245e-03f, 1.186892151e-03f, 1.186073053e-03f, 1.185251954e-03f, 1.184428853e-03f, 1.183603753e-03f,
-1.182776656e-03f, 1.181947563e-03f, 1.181116475e-03f, 1.180283394e-03f, 1.179448322e-03f, 1.178611259e-03f, 1.177772209e-03f, 1.176931172e-03f, 1.176088150e-03f, 1.175243144e-03f,
-1.174396156e-03f, 1.173547188e-03f, 1.172696240e-03f, 1.171843316e-03f, 1.170988416e-03f, 1.170131542e-03f, 1.169272695e-03f, 1.168411878e-03f, 1.167549091e-03f, 1.166684337e-03f,
-1.165817616e-03f, 1.164948932e-03f, 1.164078284e-03f, 1.163205675e-03f, 1.162331107e-03f, 1.161454580e-03f, 1.160576097e-03f, 1.159695660e-03f, 1.158813269e-03f, 1.157928927e-03f,
-1.157042636e-03f, 1.156154396e-03f, 1.155264210e-03f, 1.154372078e-03f, 1.153478004e-03f, 1.152581988e-03f, 1.151684033e-03f, 1.150784139e-03f, 1.149882308e-03f, 1.148978543e-03f,
-1.148072845e-03f, 1.147165215e-03f, 1.146255655e-03f, 1.145344167e-03f, 1.144430753e-03f, 1.143515414e-03f, 1.142598152e-03f, 1.141678968e-03f, 1.140757865e-03f, 1.139834844e-03f,
-1.138909907e-03f, 1.137983055e-03f, 1.137054291e-03f, 1.136123615e-03f, 1.135191030e-03f, 1.134256537e-03f, 1.133320138e-03f, 1.132381835e-03f, 1.131441630e-03f, 1.130499524e-03f,
-1.129555519e-03f, 1.128609616e-03f, 1.127661818e-03f, 1.126712127e-03f, 1.125760543e-03f, 1.124807069e-03f, 1.123851707e-03f, 1.122894458e-03f, 1.121935324e-03f, 1.120974307e-03f,
-1.120011408e-03f, 1.119046630e-03f, 1.118079973e-03f, 1.117111441e-03f, 1.116141035e-03f, 1.115168755e-03f, 1.114194606e-03f, 1.113218587e-03f, 1.112240701e-03f, 1.111260950e-03f,
-1.110279335e-03f, 1.109295858e-03f, 1.108310522e-03f, 1.107323327e-03f, 1.106334276e-03f, 1.105343371e-03f, 1.104350613e-03f, 1.103356004e-03f, 1.102359546e-03f, 1.101361241e-03f,
-1.100361091e-03f, 1.099359097e-03f, 1.098355261e-03f, 1.097349586e-03f, 1.096342072e-03f, 1.095332723e-03f, 1.094321539e-03f, 1.093308523e-03f, 1.092293676e-03f, 1.091277001e-03f,
-1.090258498e-03f, 1.089238171e-03f, 1.088216020e-03f, 1.087192049e-03f, 1.086166258e-03f, 1.085138649e-03f, 1.084109225e-03f, 1.083077987e-03f, 1.082044938e-03f, 1.081010078e-03f,
-1.079973411e-03f, 1.078934937e-03f, 1.077894659e-03f, 1.076852579e-03f, 1.075808698e-03f, 1.074763019e-03f, 1.073715543e-03f, 1.072666272e-03f, 1.071615209e-03f, 1.070562355e-03f,
-1.069507712e-03f, 1.068451282e-03f, 1.067393067e-03f, 1.066333068e-03f, 1.065271289e-03f, 1.064207730e-03f, 1.063142394e-03f, 1.062075283e-03f, 1.061006398e-03f, 1.059935742e-03f,
-1.058863316e-03f, 1.057789123e-03f, 1.056713164e-03f, 1.055635441e-03f, 1.054555957e-03f, 1.053474713e-03f, 1.052391711e-03f, 1.051306954e-03f, 1.050220442e-03f, 1.049132179e-03f,
-1.048042166e-03f, 1.046950406e-03f, 1.045856899e-03f, 1.044761649e-03f, 1.043664657e-03f, 1.042565925e-03f, 1.041465455e-03f, 1.040363249e-03f, 1.039259309e-03f, 1.038153638e-03f,
-1.037046237e-03f, 1.035937107e-03f, 1.034826253e-03f, 1.033713674e-03f, 1.032599374e-03f, 1.031483354e-03f, 1.030365616e-03f, 1.029246162e-03f, 1.028124995e-03f, 1.027002117e-03f,
-1.025877529e-03f, 1.024751233e-03f, 1.023623232e-03f, 1.022493527e-03f, 1.021362121e-03f, 1.020229016e-03f, 1.019094214e-03f, 1.017957716e-03f, 1.016819526e-03f, 1.015679644e-03f,
-1.014538073e-03f, 1.013394816e-03f, 1.012249873e-03f, 1.011103248e-03f, 1.009954942e-03f, 1.008804958e-03f, 1.007653297e-03f, 1.006499962e-03f, 1.005344954e-03f, 1.004188276e-03f,
-1.003029930e-03f, 1.001869918e-03f, 1.000708242e-03f, 9.995449041e-04f, 9.983799066e-04f, 9.972132514e-04f, 9.960449408e-04f, 9.948749768e-04f, 9.937033616e-04f, 9.925300972e-04f,
-9.913551858e-04f, 9.901786295e-04f, 9.890004305e-04f, 9.878205908e-04f, 9.866391127e-04f, 9.854559982e-04f, 9.842712495e-04f, 9.830848688e-04f, 9.818968581e-04f, 9.807072196e-04f,
-9.795159556e-04f, 9.783230681e-04f, 9.771285592e-04f, 9.759324313e-04f, 9.747346863e-04f, 9.735353265e-04f, 9.723343541e-04f, 9.711317712e-04f, 9.699275799e-04f, 9.687217826e-04f,
-9.675143813e-04f, 9.663053782e-04f, 9.650947755e-04f, 9.638825754e-04f, 9.626687801e-04f, 9.614533918e-04f, 9.602364126e-04f, 9.590178448e-04f, 9.577976906e-04f, 9.565759521e-04f,
-9.553526316e-04f, 9.541277313e-04f, 9.529012534e-04f, 9.516732000e-04f, 9.504435735e-04f, 9.492123760e-04f, 9.479796098e-04f, 9.467452770e-04f, 9.455093799e-04f, 9.442719208e-04f,
-9.430329018e-04f, 9.417923252e-04f, 9.405501933e-04f, 9.393065082e-04f, 9.380612722e-04f, 9.368144875e-04f, 9.355661564e-04f, 9.343162812e-04f, 9.330648641e-04f, 9.318119073e-04f,
-9.305574131e-04f, 9.293013838e-04f, 9.280438216e-04f, 9.267847288e-04f, 9.255241076e-04f, 9.242619603e-04f, 9.229982892e-04f, 9.217330966e-04f, 9.204663848e-04f, 9.191981559e-04f,
-9.179284123e-04f, 9.166571564e-04f, 9.153843902e-04f, 9.141101163e-04f, 9.128343368e-04f, 9.115570540e-04f, 9.102782702e-04f, 9.089979878e-04f, 9.077162090e-04f, 9.064329362e-04f,
-9.051481716e-04f, 9.038619175e-04f, 9.025741763e-04f, 9.012849503e-04f, 8.999942417e-04f, 8.987020530e-04f, 8.974083864e-04f, 8.961132442e-04f, 8.948166288e-04f, 8.935185425e-04f,
-8.922189877e-04f, 8.909179666e-04f, 8.896154816e-04f, 8.883115350e-04f, 8.870061292e-04f, 8.856992665e-04f, 8.843909493e-04f, 8.830811799e-04f, 8.817699606e-04f, 8.804572939e-04f,
-8.791431820e-04f, 8.778276273e-04f, 8.765106322e-04f, 8.751921990e-04f, 8.738723301e-04f, 8.725510279e-04f, 8.712282947e-04f, 8.699041329e-04f, 8.685785449e-04f, 8.672515330e-04f,
-8.659230997e-04f, 8.645932473e-04f, 8.632619781e-04f, 8.619292946e-04f, 8.605951992e-04f, 8.592596942e-04f, 8.579227821e-04f, 8.565844652e-04f, 8.552447459e-04f, 8.539036266e-04f,
-8.525611098e-04f, 8.512171977e-04f, 8.498718929e-04f, 8.485251978e-04f, 8.471771147e-04f, 8.458276460e-04f, 8.444767942e-04f, 8.431245617e-04f, 8.417709509e-04f, 8.404159642e-04f,
-8.390596041e-04f, 8.377018730e-04f, 8.363427732e-04f, 8.349823073e-04f, 8.336204776e-04f, 8.322572866e-04f, 8.308927368e-04f, 8.295268305e-04f, 8.281595702e-04f, 8.267909584e-04f,
-8.254209975e-04f, 8.240496899e-04f, 8.226770381e-04f, 8.213030446e-04f, 8.199277117e-04f, 8.185510420e-04f, 8.171730379e-04f, 8.157937019e-04f, 8.144130364e-04f, 8.130310439e-04f,
-8.116477269e-04f, 8.102630878e-04f, 8.088771291e-04f, 8.074898533e-04f, 8.061012628e-04f, 8.047113601e-04f, 8.033201478e-04f, 8.019276282e-04f, 8.005338040e-04f, 7.991386774e-04f,
-7.977422511e-04f, 7.963445276e-04f, 7.949455093e-04f, 7.935451987e-04f, 7.921435983e-04f, 7.907407106e-04f, 7.893365382e-04f, 7.879310834e-04f, 7.865243489e-04f, 7.851163371e-04f,
-7.837070506e-04f, 7.822964917e-04f, 7.808846632e-04f, 7.794715674e-04f, 7.780572069e-04f, 7.766415843e-04f, 7.752247019e-04f, 7.738065624e-04f, 7.723871683e-04f, 7.709665221e-04f,
-7.695446264e-04f, 7.681214836e-04f, 7.666970962e-04f, 7.652714670e-04f, 7.638445983e-04f, 7.624164927e-04f, 7.609871527e-04f, 7.595565810e-04f, 7.581247800e-04f, 7.566917522e-04f,
-7.552575003e-04f, 7.538220268e-04f, 7.523853342e-04f, 7.509474252e-04f, 7.495083021e-04f, 7.480679677e-04f, 7.466264244e-04f, 7.451836749e-04f, 7.437397217e-04f, 7.422945673e-04f,
-7.408482143e-04f, 7.394006654e-04f, 7.379519230e-04f, 7.365019898e-04f, 7.350508683e-04f, 7.335985611e-04f, 7.321450707e-04f, 7.306903999e-04f, 7.292345510e-04f, 7.277775268e-04f,
-7.263193299e-04f, 7.248599627e-04f, 7.233994279e-04f, 7.219377281e-04f, 7.204748659e-04f, 7.190108439e-04f, 7.175456647e-04f, 7.160793308e-04f, 7.146118449e-04f, 7.131432097e-04f,
-7.116734276e-04f, 7.102025013e-04f, 7.087304334e-04f, 7.072572265e-04f, 7.057828833e-04f, 7.043074063e-04f, 7.028307982e-04f, 7.013530616e-04f, 6.998741991e-04f, 6.983942133e-04f,
-6.969131069e-04f, 6.954308824e-04f, 6.939475425e-04f, 6.924630899e-04f, 6.909775272e-04f, 6.894908569e-04f, 6.880030818e-04f, 6.865142044e-04f, 6.850242275e-04f, 6.835331536e-04f,
-6.820409854e-04f, 6.805477255e-04f, 6.790533766e-04f, 6.775579413e-04f, 6.760614223e-04f, 6.745638222e-04f, 6.730651437e-04f, 6.715653894e-04f, 6.700645620e-04f, 6.685626642e-04f,
-6.670596985e-04f, 6.655556677e-04f, 6.640505745e-04f, 6.625444214e-04f, 6.610372112e-04f, 6.595289464e-04f, 6.580196299e-04f, 6.565092643e-04f, 6.549978521e-04f, 6.534853962e-04f,
-6.519718991e-04f, 6.504573637e-04f, 6.489417924e-04f, 6.474251881e-04f, 6.459075533e-04f, 6.443888909e-04f, 6.428692034e-04f, 6.413484935e-04f, 6.398267640e-04f, 6.383040176e-04f,
-6.367802568e-04f, 6.352554845e-04f, 6.337297033e-04f, 6.322029159e-04f, 6.306751250e-04f, 6.291463333e-04f, 6.276165436e-04f, 6.260857584e-04f, 6.245539805e-04f, 6.230212127e-04f,
-6.214874576e-04f, 6.199527180e-04f, 6.184169964e-04f, 6.168802958e-04f, 6.153426187e-04f, 6.138039679e-04f, 6.122643461e-04f, 6.107237561e-04f, 6.091822005e-04f, 6.076396820e-04f,
-6.060962034e-04f, 6.045517675e-04f, 6.030063769e-04f, 6.014600343e-04f, 5.999127426e-04f, 5.983645043e-04f, 5.968153223e-04f, 5.952651994e-04f, 5.937141381e-04f, 5.921621413e-04f,
-5.906092117e-04f, 5.890553520e-04f, 5.875005650e-04f, 5.859448534e-04f, 5.843882200e-04f, 5.828306675e-04f, 5.812721986e-04f, 5.797128162e-04f, 5.781525228e-04f, 5.765913214e-04f,
-5.750292147e-04f, 5.734662053e-04f, 5.719022961e-04f, 5.703374898e-04f, 5.687717892e-04f, 5.672051970e-04f, 5.656377160e-04f, 5.640693490e-04f, 5.625000987e-04f, 5.609299678e-04f,
-5.593589592e-04f, 5.577870757e-04f, 5.562143199e-04f, 5.546406946e-04f, 5.530662027e-04f, 5.514908469e-04f, 5.499146299e-04f, 5.483375546e-04f, 5.467596237e-04f, 5.451808400e-04f,
-5.436012062e-04f, 5.420207253e-04f, 5.404393998e-04f, 5.388572327e-04f, 5.372742267e-04f, 5.356903846e-04f, 5.341057091e-04f, 5.325202032e-04f, 5.309338694e-04f, 5.293467108e-04f,
-5.277587299e-04f, 5.261699297e-04f, 5.245803129e-04f, 5.229898824e-04f, 5.213986408e-04f, 5.198065911e-04f, 5.182137360e-04f, 5.166200783e-04f, 5.150256208e-04f, 5.134303664e-04f,
-5.118343177e-04f, 5.102374777e-04f, 5.086398491e-04f, 5.070414348e-04f, 5.054422375e-04f, 5.038422601e-04f, 5.022415054e-04f, 5.006399761e-04f, 4.990376752e-04f, 4.974346054e-04f,
-4.958307695e-04f, 4.942261703e-04f, 4.926208107e-04f, 4.910146936e-04f, 4.894078216e-04f, 4.878001976e-04f, 4.861918245e-04f, 4.845827051e-04f, 4.829728422e-04f, 4.813622386e-04f,
-4.797508971e-04f, 4.781388207e-04f, 4.765260120e-04f, 4.749124740e-04f, 4.732982095e-04f, 4.716832213e-04f, 4.700675123e-04f, 4.684510852e-04f, 4.668339429e-04f, 4.652160883e-04f,
-4.635975242e-04f, 4.619782534e-04f, 4.603582787e-04f, 4.587376031e-04f, 4.571162294e-04f, 4.554941603e-04f, 4.538713988e-04f, 4.522479477e-04f, 4.506238098e-04f, 4.489989880e-04f,
-4.473734851e-04f, 4.457473040e-04f, 4.441204475e-04f, 4.424929186e-04f, 4.408647199e-04f, 4.392358545e-04f, 4.376063251e-04f, 4.359761346e-04f, 4.343452858e-04f, 4.327137817e-04f,
-4.310816250e-04f, 4.294488187e-04f, 4.278153656e-04f, 4.261812685e-04f, 4.245465304e-04f, 4.229111540e-04f, 4.212751423e-04f, 4.196384981e-04f, 4.180012242e-04f, 4.163633236e-04f,
-4.147247992e-04f, 4.130856537e-04f, 4.114458900e-04f, 4.098055111e-04f, 4.081645197e-04f, 4.065229189e-04f, 4.048807114e-04f, 4.032379000e-04f, 4.015944878e-04f, 3.999504775e-04f,
-3.983058721e-04f, 3.966606744e-04f, 3.950148873e-04f, 3.933685137e-04f, 3.917215564e-04f, 3.900740184e-04f, 3.884259025e-04f, 3.867772116e-04f, 3.851279486e-04f, 3.834781163e-04f,
-3.818277178e-04f, 3.801767557e-04f, 3.785252331e-04f, 3.768731528e-04f, 3.752205177e-04f, 3.735673307e-04f, 3.719135947e-04f, 3.702593126e-04f, 3.686044872e-04f, 3.669491215e-04f,
-3.652932184e-04f, 3.636367807e-04f, 3.619798113e-04f, 3.603223132e-04f, 3.586642892e-04f, 3.570057422e-04f, 3.553466752e-04f, 3.536870910e-04f, 3.520269925e-04f, 3.503663827e-04f,
-3.487052643e-04f, 3.470436404e-04f, 3.453815139e-04f, 3.437188875e-04f, 3.420557643e-04f, 3.403921472e-04f, 3.387280389e-04f, 3.370634426e-04f, 3.353983609e-04f, 3.337327970e-04f,
-3.320667536e-04f, 3.304002337e-04f, 3.287332402e-04f, 3.270657760e-04f, 3.253978439e-04f, 3.237294470e-04f, 3.220605882e-04f, 3.203912702e-04f, 3.187214961e-04f, 3.170512688e-04f,
-3.153805912e-04f, 3.137094661e-04f, 3.120378966e-04f, 3.103658855e-04f, 3.086934357e-04f, 3.070205502e-04f, 3.053472318e-04f, 3.036734836e-04f, 3.019993083e-04f, 3.003247090e-04f,
-2.986496885e-04f, 2.969742498e-04f, 2.952983958e-04f, 2.936221294e-04f, 2.919454536e-04f, 2.902683712e-04f, 2.885908851e-04f, 2.869129984e-04f, 2.852347139e-04f, 2.835560346e-04f,
-2.818769633e-04f, 2.801975030e-04f, 2.785176566e-04f, 2.768374271e-04f, 2.751568174e-04f, 2.734758304e-04f, 2.717944690e-04f, 2.701127362e-04f, 2.684306349e-04f, 2.667481680e-04f,
-2.650653384e-04f, 2.633821492e-04f, 2.616986031e-04f, 2.600147032e-04f, 2.583304524e-04f, 2.566458535e-04f, 2.549609096e-04f, 2.532756236e-04f, 2.515899984e-04f, 2.499040369e-04f,
-2.482177421e-04f, 2.465311169e-04f, 2.448441643e-04f, 2.431568871e-04f, 2.414692884e-04f, 2.397813710e-04f, 2.380931378e-04f, 2.364045919e-04f, 2.347157362e-04f, 2.330265736e-04f,
-2.313371070e-04f, 2.296473393e-04f, 2.279572736e-04f, 2.262669128e-04f, 2.245762597e-04f, 2.228853173e-04f, 2.211940887e-04f, 2.195025766e-04f, 2.178107841e-04f, 2.161187141e-04f,
-2.144263695e-04f, 2.127337533e-04f, 2.110408684e-04f, 2.093477178e-04f, 2.076543044e-04f, 2.059606311e-04f, 2.042667009e-04f, 2.025725167e-04f, 2.008780815e-04f, 1.991833982e-04f,
-1.974884698e-04f, 1.957932992e-04f, 1.940978894e-04f, 1.924022432e-04f, 1.907063637e-04f, 1.890102538e-04f, 1.873139164e-04f, 1.856173545e-04f, 1.839205710e-04f, 1.822235688e-04f,
-1.805263510e-04f, 1.788289205e-04f, 1.771312801e-04f, 1.754334330e-04f, 1.737353819e-04f, 1.720371298e-04f, 1.703386798e-04f, 1.686400347e-04f, 1.669411975e-04f, 1.652421712e-04f,
-1.635429586e-04f, 1.618435628e-04f, 1.601439866e-04f, 1.584442331e-04f, 1.567443052e-04f, 1.550442058e-04f, 1.533439379e-04f, 1.516435044e-04f, 1.499429083e-04f, 1.482421525e-04f,
-1.465412400e-04f, 1.448401738e-04f, 1.431389567e-04f, 1.414375917e-04f, 1.397360818e-04f, 1.380344299e-04f, 1.363326390e-04f, 1.346307121e-04f, 1.329286520e-04f, 1.312264617e-04f,
-1.295241442e-04f, 1.278217025e-04f, 1.261191394e-04f, 1.244164579e-04f, 1.227136610e-04f, 1.210107517e-04f, 1.193077328e-04f, 1.176046074e-04f, 1.159013783e-04f, 1.141980485e-04f,
-1.124946211e-04f, 1.107910988e-04f, 1.090874848e-04f, 1.073837818e-04f, 1.056799930e-04f, 1.039761212e-04f, 1.022721693e-04f, 1.005681404e-04f, 9.886403741e-05f, 9.715986321e-05f,
-9.545562080e-05f, 9.375131312e-05f, 9.204694312e-05f, 9.034251375e-05f, 8.863802797e-05f, 8.693348871e-05f, 8.522889893e-05f, 8.352426159e-05f, 8.181957962e-05f, 8.011485599e-05f,
-7.841009363e-05f, 7.670529550e-05f, 7.500046455e-05f, 7.329560372e-05f, 7.159071597e-05f, 6.988580424e-05f, 6.818087149e-05f, 6.647592065e-05f, 6.477095469e-05f, 6.306597654e-05f,
-6.136098915e-05f, 5.965599548e-05f, 5.795099847e-05f, 5.624600107e-05f, 5.454100622e-05f, 5.283601688e-05f, 5.113103599e-05f, 4.942606649e-05f, 4.772111134e-05f, 4.601617348e-05f,
-4.431125585e-05f, 4.260636141e-05f, 4.090149309e-05f, 3.919665385e-05f, 3.749184662e-05f, 3.578707436e-05f, 3.408234001e-05f, 3.237764652e-05f, 3.067299682e-05f, 2.896839386e-05f,
-2.726384059e-05f, 2.555933995e-05f, 2.385489489e-05f, 2.215050834e-05f, 2.044618325e-05f, 1.874192256e-05f, 1.703772922e-05f, 1.533360616e-05f, 1.362955633e-05f, 1.192558268e-05f,
-1.022168813e-05f, 8.517875632e-06f, 6.814148129e-06f, 5.110508557e-06f, 3.406959858e-06f, 1.703504971e-06f, 1.468342492e-10f, -1.703111612e-06f, -3.406267431e-06f, -5.109317682e-06f,
--6.812259430e-06f, -8.515089735e-06f, -1.021780566e-05f, -1.192040427e-05f, -1.362288263e-05f, -1.532523780e-05f, -1.702746685e-05f, -1.872956684e-05f, -2.043153483e-05f, -2.213336790e-05f,
--2.383506311e-05f, -2.553661752e-05f, -2.723802820e-05f, -2.893929222e-05f, -3.064040664e-05f, -3.234136854e-05f, -3.404217498e-05f, -3.574282304e-05f, -3.744330978e-05f, -3.914363226e-05f,
--4.084378757e-05f, -4.254377277e-05f, -4.424358494e-05f, -4.594322114e-05f, -4.764267844e-05f, -4.934195393e-05f, -5.104104467e-05f, -5.273994774e-05f, -5.443866021e-05f, -5.613717915e-05f,
--5.783550165e-05f, -5.953362477e-05f, -6.123154559e-05f, -6.292926120e-05f, -6.462676866e-05f, -6.632406505e-05f, -6.802114746e-05f, -6.971801296e-05f, -7.141465863e-05f, -7.311108155e-05f,
--7.480727881e-05f, -7.650324747e-05f, -7.819898463e-05f, -7.989448737e-05f, -8.158975276e-05f, -8.328477790e-05f, -8.497955987e-05f, -8.667409574e-05f, -8.836838261e-05f, -9.006241757e-05f,
--9.175619769e-05f, -9.344972006e-05f, -9.514298178e-05f, -9.683597993e-05f, -9.852871160e-05f, -1.002211739e-04f, -1.019133639e-04f, -1.036052786e-04f, -1.052969153e-04f, -1.069882709e-04f,
--1.086793426e-04f, -1.103701274e-04f, -1.120606225e-04f, -1.137508250e-04f, -1.154407319e-04f, -1.171303403e-04f, -1.188196474e-04f, -1.205086502e-04f, -1.221973458e-04f, -1.238857314e-04f,
--1.255738040e-04f, -1.272615607e-04f, -1.289489986e-04f, -1.306361149e-04f, -1.323229066e-04f, -1.340093709e-04f, -1.356955048e-04f, -1.373813054e-04f, -1.390667699e-04f, -1.407518954e-04f,
--1.424366789e-04f, -1.441211176e-04f, -1.458052086e-04f, -1.474889489e-04f, -1.491723358e-04f, -1.508553663e-04f, -1.525380375e-04f, -1.542203465e-04f, -1.559022905e-04f, -1.575838665e-04f,
--1.592650717e-04f, -1.609459032e-04f, -1.626263581e-04f, -1.643064336e-04f, -1.659861267e-04f, -1.676654345e-04f, -1.693443542e-04f, -1.710228829e-04f, -1.727010178e-04f, -1.743787559e-04f,
--1.760560943e-04f, -1.777330303e-04f, -1.794095608e-04f, -1.810856831e-04f, -1.827613943e-04f, -1.844366915e-04f, -1.861115718e-04f, -1.877860323e-04f, -1.894600703e-04f, -1.911336827e-04f,
--1.928068668e-04f, -1.944796197e-04f, -1.961519385e-04f, -1.978238203e-04f, -1.994952623e-04f, -2.011662616e-04f, -2.028368154e-04f, -2.045069208e-04f, -2.061765749e-04f, -2.078457749e-04f,
--2.095145179e-04f, -2.111828010e-04f, -2.128506215e-04f, -2.145179764e-04f, -2.161848629e-04f, -2.178512781e-04f, -2.195172192e-04f, -2.211826833e-04f, -2.228476676e-04f, -2.245121693e-04f,
--2.261761854e-04f, -2.278397131e-04f, -2.295027497e-04f, -2.311652921e-04f, -2.328273377e-04f, -2.344888835e-04f, -2.361499267e-04f, -2.378104645e-04f, -2.394704940e-04f, -2.411300124e-04f,
--2.427890168e-04f, -2.444475044e-04f, -2.461054724e-04f, -2.477629180e-04f, -2.494198382e-04f, -2.510762303e-04f, -2.527320915e-04f, -2.543874188e-04f, -2.560422095e-04f, -2.576964608e-04f,
--2.593501697e-04f, -2.610033336e-04f, -2.626559495e-04f, -2.643080147e-04f, -2.659595263e-04f, -2.676104814e-04f, -2.692608773e-04f, -2.709107112e-04f, -2.725599802e-04f, -2.742086816e-04f,
--2.758568124e-04f, -2.775043699e-04f, -2.791513513e-04f, -2.807977537e-04f, -2.824435743e-04f, -2.840888104e-04f, -2.857334591e-04f, -2.873775176e-04f, -2.890209832e-04f, -2.906638529e-04f,
--2.923061240e-04f, -2.939477937e-04f, -2.955888592e-04f, -2.972293176e-04f, -2.988691663e-04f, -3.005084023e-04f, -3.021470229e-04f, -3.037850254e-04f, -3.054224068e-04f, -3.070591644e-04f,
--3.086952954e-04f, -3.103307970e-04f, -3.119656665e-04f, -3.135999010e-04f, -3.152334977e-04f, -3.168664539e-04f, -3.184987668e-04f, -3.201304336e-04f, -3.217614514e-04f, -3.233918177e-04f,
--3.250215294e-04f, -3.266505840e-04f, -3.282789785e-04f, -3.299067102e-04f, -3.315337764e-04f, -3.331601742e-04f, -3.347859010e-04f, -3.364109539e-04f, -3.380353301e-04f, -3.396590269e-04f,
--3.412820415e-04f, -3.429043712e-04f, -3.445260131e-04f, -3.461469646e-04f, -3.477672229e-04f, -3.493867852e-04f, -3.510056487e-04f, -3.526238106e-04f, -3.542412684e-04f, -3.558580191e-04f,
--3.574740600e-04f, -3.590893884e-04f, -3.607040015e-04f, -3.623178966e-04f, -3.639310709e-04f, -3.655435217e-04f, -3.671552462e-04f, -3.687662417e-04f, -3.703765054e-04f, -3.719860347e-04f,
--3.735948267e-04f, -3.752028788e-04f, -3.768101881e-04f, -3.784167520e-04f, -3.800225677e-04f, -3.816276325e-04f, -3.832319437e-04f, -3.848354985e-04f, -3.864382942e-04f, -3.880403281e-04f,
--3.896415975e-04f, -3.912420995e-04f, -3.928418316e-04f, -3.944407910e-04f, -3.960389749e-04f, -3.976363807e-04f, -3.992330056e-04f, -4.008288469e-04f, -4.024239020e-04f, -4.040181680e-04f,
--4.056116424e-04f, -4.072043223e-04f, -4.087962051e-04f, -4.103872880e-04f, -4.119775684e-04f, -4.135670436e-04f, -4.151557108e-04f, -4.167435674e-04f, -4.183306107e-04f, -4.199168379e-04f,
--4.215022464e-04f, -4.230868335e-04f, -4.246705965e-04f, -4.262535327e-04f, -4.278356394e-04f, -4.294169139e-04f, -4.309973536e-04f, -4.325769557e-04f, -4.341557176e-04f, -4.357336366e-04f,
--4.373107101e-04f, -4.388869352e-04f, -4.404623095e-04f, -4.420368301e-04f, -4.436104945e-04f, -4.451832999e-04f, -4.467552437e-04f, -4.483263232e-04f, -4.498965357e-04f, -4.514658787e-04f,
--4.530343493e-04f, -4.546019451e-04f, -4.561686632e-04f, -4.577345011e-04f, -4.592994561e-04f, -4.608635256e-04f, -4.624267068e-04f, -4.639889972e-04f, -4.655503940e-04f, -4.671108947e-04f,
--4.686704966e-04f, -4.702291971e-04f, -4.717869935e-04f, -4.733438831e-04f, -4.748998634e-04f, -4.764549317e-04f, -4.780090853e-04f, -4.795623217e-04f, -4.811146382e-04f, -4.826660322e-04f,
--4.842165010e-04f, -4.857660420e-04f, -4.873146526e-04f, -4.888623302e-04f, -4.904090721e-04f, -4.919548758e-04f, -4.934997385e-04f, -4.950436578e-04f, -4.965866310e-04f, -4.981286554e-04f,
--4.996697285e-04f, -5.012098477e-04f, -5.027490103e-04f, -5.042872137e-04f, -5.058244554e-04f, -5.073607327e-04f, -5.088960431e-04f, -5.104303839e-04f, -5.119637526e-04f, -5.134961465e-04f,
--5.150275630e-04f, -5.165579997e-04f, -5.180874538e-04f, -5.196159229e-04f, -5.211434042e-04f, -5.226698953e-04f, -5.241953935e-04f, -5.257198963e-04f, -5.272434011e-04f, -5.287659053e-04f,
--5.302874063e-04f, -5.318079017e-04f, -5.333273887e-04f, -5.348458649e-04f, -5.363633276e-04f, -5.378797743e-04f, -5.393952025e-04f, -5.409096096e-04f, -5.424229930e-04f, -5.439353502e-04f,
--5.454466786e-04f, -5.469569757e-04f, -5.484662388e-04f, -5.499744656e-04f, -5.514816533e-04f, -5.529877996e-04f, -5.544929018e-04f, -5.559969573e-04f, -5.574999637e-04f, -5.590019185e-04f,
--5.605028190e-04f, -5.620026627e-04f, -5.635014472e-04f, -5.649991699e-04f, -5.664958282e-04f, -5.679914197e-04f, -5.694859418e-04f, -5.709793920e-04f, -5.724717677e-04f, -5.739630666e-04f,
--5.754532859e-04f, -5.769424233e-04f, -5.784304762e-04f, -5.799174422e-04f, -5.814033186e-04f, -5.828881030e-04f, -5.843717930e-04f, -5.858543859e-04f, -5.873358793e-04f, -5.888162707e-04f,
--5.902955577e-04f, -5.917737376e-04f, -5.932508081e-04f, -5.947267666e-04f, -5.962016106e-04f, -5.976753378e-04f, -5.991479455e-04f, -6.006194313e-04f, -6.020897927e-04f, -6.035590273e-04f,
--6.050271326e-04f, -6.064941060e-04f, -6.079599452e-04f, -6.094246477e-04f, -6.108882110e-04f, -6.123506326e-04f, -6.138119100e-04f, -6.152720409e-04f, -6.167310228e-04f, -6.181888532e-04f,
--6.196455296e-04f, -6.211010496e-04f, -6.225554108e-04f, -6.240086107e-04f, -6.254606469e-04f, -6.269115169e-04f, -6.283612182e-04f, -6.298097485e-04f, -6.312571054e-04f, -6.327032863e-04f,
--6.341482888e-04f, -6.355921106e-04f, -6.370347491e-04f, -6.384762021e-04f, -6.399164669e-04f, -6.413555413e-04f, -6.427934228e-04f, -6.442301090e-04f, -6.456655975e-04f, -6.470998858e-04f,
--6.485329716e-04f, -6.499648525e-04f, -6.513955259e-04f, -6.528249897e-04f, -6.542532413e-04f, -6.556802783e-04f, -6.571060983e-04f, -6.585306991e-04f, -6.599540781e-04f, -6.613762329e-04f,
--6.627971613e-04f, -6.642168607e-04f, -6.656353289e-04f, -6.670525635e-04f, -6.684685620e-04f, -6.698833220e-04f, -6.712968413e-04f, -6.727091175e-04f, -6.741201481e-04f, -6.755299308e-04f,
--6.769384633e-04f, -6.783457432e-04f, -6.797517681e-04f, -6.811565357e-04f, -6.825600436e-04f, -6.839622894e-04f, -6.853632709e-04f, -6.867629856e-04f, -6.881614312e-04f, -6.895586055e-04f,
--6.909545059e-04f, -6.923491303e-04f, -6.937424762e-04f, -6.951345413e-04f, -6.965253234e-04f, -6.979148200e-04f, -6.993030289e-04f, -7.006899476e-04f, -7.020755740e-04f, -7.034599056e-04f,
--7.048429402e-04f, -7.062246755e-04f, -7.076051091e-04f, -7.089842387e-04f, -7.103620620e-04f, -7.117385767e-04f, -7.131137805e-04f, -7.144876712e-04f, -7.158602463e-04f, -7.172315037e-04f,
--7.186014409e-04f, -7.199700558e-04f, -7.213373461e-04f, -7.227033094e-04f, -7.240679434e-04f, -7.254312460e-04f, -7.267932148e-04f, -7.281538475e-04f, -7.295131418e-04f, -7.308710956e-04f,
--7.322277065e-04f, -7.335829722e-04f, -7.349368905e-04f, -7.362894592e-04f, -7.376406759e-04f, -7.389905384e-04f, -7.403390445e-04f, -7.416861919e-04f, -7.430319784e-04f, -7.443764016e-04f,
--7.457194595e-04f, -7.470611496e-04f, -7.484014699e-04f, -7.497404180e-04f, -7.510779917e-04f, -7.524141888e-04f, -7.537490071e-04f, -7.550824443e-04f, -7.564144982e-04f, -7.577451666e-04f,
--7.590744472e-04f, -7.604023379e-04f, -7.617288364e-04f, -7.630539406e-04f, -7.643776482e-04f, -7.656999569e-04f, -7.670208647e-04f, -7.683403693e-04f, -7.696584685e-04f, -7.709751601e-04f,
--7.722904419e-04f, -7.736043117e-04f, -7.749167674e-04f, -7.762278067e-04f, -7.775374275e-04f, -7.788456276e-04f, -7.801524048e-04f, -7.814577569e-04f, -7.827616817e-04f, -7.840641772e-04f,
--7.853652411e-04f, -7.866648712e-04f, -7.879630654e-04f, -7.892598216e-04f, -7.905551375e-04f, -7.918490111e-04f, -7.931414401e-04f, -7.944324225e-04f, -7.957219560e-04f, -7.970100385e-04f,
--7.982966680e-04f, -7.995818421e-04f, -8.008655589e-04f, -8.021478162e-04f, -8.034286118e-04f, -8.047079437e-04f, -8.059858096e-04f, -8.072622075e-04f, -8.085371353e-04f, -8.098105907e-04f,
--8.110825719e-04f, -8.123530765e-04f, -8.136221025e-04f, -8.148896478e-04f, -8.161557102e-04f, -8.174202878e-04f, -8.186833783e-04f, -8.199449798e-04f, -8.212050900e-04f, -8.224637069e-04f,
--8.237208285e-04f, -8.249764525e-04f, -8.262305770e-04f, -8.274831999e-04f, -8.287343191e-04f, -8.299839325e-04f, -8.312320380e-04f, -8.324786336e-04f, -8.337237172e-04f, -8.349672868e-04f,
--8.362093402e-04f, -8.374498755e-04f, -8.386888905e-04f, -8.399263833e-04f, -8.411623517e-04f, -8.423967938e-04f, -8.436297074e-04f, -8.448610905e-04f, -8.460909412e-04f, -8.473192573e-04f,
--8.485460368e-04f, -8.497712777e-04f, -8.509949780e-04f, -8.522171356e-04f, -8.534377486e-04f, -8.546568149e-04f, -8.558743324e-04f, -8.570902992e-04f, -8.583047133e-04f, -8.595175726e-04f,
--8.607288752e-04f, -8.619386190e-04f, -8.631468020e-04f, -8.643534223e-04f, -8.655584779e-04f, -8.667619667e-04f, -8.679638868e-04f, -8.691642361e-04f, -8.703630128e-04f, -8.715602148e-04f,
--8.727558402e-04f, -8.739498869e-04f, -8.751423530e-04f, -8.763332366e-04f, -8.775225356e-04f, -8.787102481e-04f, -8.798963722e-04f, -8.810809058e-04f, -8.822638471e-04f, -8.834451941e-04f,
--8.846249448e-04f, -8.858030973e-04f, -8.869796496e-04f, -8.881545998e-04f, -8.893279460e-04f, -8.904996862e-04f, -8.916698186e-04f, -8.928383411e-04f, -8.940052518e-04f, -8.951705489e-04f,
--8.963342304e-04f, -8.974962943e-04f, -8.986567389e-04f, -8.998155621e-04f, -9.009727621e-04f, -9.021283369e-04f, -9.032822846e-04f, -9.044346034e-04f, -9.055852914e-04f, -9.067343466e-04f,
--9.078817672e-04f, -9.090275512e-04f, -9.101716969e-04f, -9.113142023e-04f, -9.124550655e-04f, -9.135942847e-04f, -9.147318579e-04f, -9.158677834e-04f, -9.170020592e-04f, -9.181346835e-04f,
--9.192656544e-04f, -9.203949701e-04f, -9.215226288e-04f, -9.226486284e-04f, -9.237729673e-04f, -9.248956435e-04f, -9.260166553e-04f, -9.271360008e-04f, -9.282536781e-04f, -9.293696854e-04f,
--9.304840208e-04f, -9.315966827e-04f, -9.327076690e-04f, -9.338169781e-04f, -9.349246080e-04f, -9.360305570e-04f, -9.371348233e-04f, -9.382374050e-04f, -9.393383004e-04f, -9.404375075e-04f,
--9.415350247e-04f, -9.426308502e-04f, -9.437249821e-04f, -9.448174186e-04f, -9.459081580e-04f, -9.469971985e-04f, -9.480845382e-04f, -9.491701755e-04f, -9.502541085e-04f, -9.513363354e-04f,
--9.524168546e-04f, -9.534956641e-04f, -9.545727623e-04f, -9.556481474e-04f, -9.567218177e-04f, -9.577937713e-04f, -9.588640066e-04f, -9.599325217e-04f, -9.609993150e-04f, -9.620643846e-04f,
--9.631277290e-04f, -9.641893462e-04f, -9.652492346e-04f, -9.663073924e-04f, -9.673638180e-04f, -9.684185096e-04f, -9.694714654e-04f, -9.705226838e-04f, -9.715721631e-04f, -9.726199014e-04f,
--9.736658972e-04f, -9.747101487e-04f, -9.757526543e-04f, -9.767934121e-04f, -9.778324205e-04f, -9.788696779e-04f, -9.799051825e-04f, -9.809389327e-04f, -9.819709267e-04f, -9.830011629e-04f,
--9.840296396e-04f, -9.850563551e-04f, -9.860813078e-04f, -9.871044959e-04f, -9.881259179e-04f, -9.891455721e-04f, -9.901634567e-04f, -9.911795702e-04f, -9.921939109e-04f, -9.932064771e-04f,
--9.942172673e-04f, -9.952262797e-04f, -9.962335127e-04f, -9.972389646e-04f, -9.982426340e-04f, -9.992445190e-04f, -1.000244618e-03f, -1.001242930e-03f, -1.002239452e-03f, -1.003234184e-03f,
--1.004227123e-03f, -1.005218268e-03f, -1.006207618e-03f, -1.007195170e-03f, -1.008180924e-03f, -1.009164877e-03f, -1.010147029e-03f, -1.011127376e-03f, -1.012105919e-03f, -1.013082654e-03f,
--1.014057582e-03f, -1.015030699e-03f, -1.016002005e-03f, -1.016971497e-03f, -1.017939176e-03f, -1.018905037e-03f, -1.019869082e-03f, -1.020831306e-03f, -1.021791710e-03f, -1.022750292e-03f,
--1.023707049e-03f, -1.024661981e-03f, -1.025615086e-03f, -1.026566362e-03f, -1.027515808e-03f, -1.028463422e-03f, -1.029409203e-03f, -1.030353149e-03f, -1.031295259e-03f, -1.032235531e-03f,
--1.033173964e-03f, -1.034110556e-03f, -1.035045306e-03f, -1.035978211e-03f, -1.036909272e-03f, -1.037838485e-03f, -1.038765851e-03f, -1.039691366e-03f, -1.040615030e-03f, -1.041536841e-03f,
--1.042456798e-03f, -1.043374899e-03f, -1.044291143e-03f, -1.045205528e-03f, -1.046118052e-03f, -1.047028715e-03f, -1.047937515e-03f, -1.048844451e-03f, -1.049749520e-03f, -1.050652722e-03f,
--1.051554054e-03f, -1.052453517e-03f, -1.053351107e-03f, -1.054246824e-03f, -1.055140666e-03f, -1.056032632e-03f, -1.056922721e-03f, -1.057810930e-03f, -1.058697259e-03f, -1.059581706e-03f,
--1.060464270e-03f, -1.061344949e-03f, -1.062223742e-03f, -1.063100647e-03f, -1.063975663e-03f, -1.064848789e-03f, -1.065720024e-03f, -1.066589365e-03f, -1.067456811e-03f, -1.068322362e-03f,
--1.069186015e-03f, -1.070047770e-03f, -1.070907624e-03f, -1.071765577e-03f, -1.072621627e-03f, -1.073475773e-03f, -1.074328014e-03f, -1.075178347e-03f, -1.076026773e-03f, -1.076873288e-03f,
--1.077717893e-03f, -1.078560585e-03f, -1.079401364e-03f, -1.080240227e-03f, -1.081077175e-03f, -1.081912204e-03f, -1.082745315e-03f, -1.083576505e-03f, -1.084405774e-03f, -1.085233119e-03f,
--1.086058540e-03f, -1.086882036e-03f, -1.087703605e-03f, -1.088523245e-03f, -1.089340956e-03f, -1.090156736e-03f, -1.090970584e-03f, -1.091782498e-03f, -1.092592478e-03f, -1.093400522e-03f,
--1.094206628e-03f, -1.095010796e-03f, -1.095813024e-03f, -1.096613311e-03f, -1.097411656e-03f, -1.098208057e-03f, -1.099002513e-03f, -1.099795022e-03f, -1.100585585e-03f, -1.101374198e-03f,
--1.102160862e-03f, -1.102945575e-03f, -1.103728335e-03f, -1.104509141e-03f, -1.105287993e-03f, -1.106064888e-03f, -1.106839826e-03f, -1.107612806e-03f, -1.108383825e-03f, -1.109152884e-03f,
--1.109919980e-03f, -1.110685113e-03f, -1.111448282e-03f, -1.112209484e-03f, -1.112968720e-03f, -1.113725987e-03f, -1.114481285e-03f, -1.115234612e-03f, -1.115985967e-03f, -1.116735349e-03f,
--1.117482757e-03f, -1.118228190e-03f, -1.118971646e-03f, -1.119713125e-03f, -1.120452624e-03f, -1.121190144e-03f, -1.121925682e-03f, -1.122659238e-03f, -1.123390811e-03f, -1.124120399e-03f,
--1.124848001e-03f, -1.125573616e-03f, -1.126297243e-03f, -1.127018881e-03f, -1.127738529e-03f, -1.128456185e-03f, -1.129171848e-03f, -1.129885518e-03f, -1.130597193e-03f, -1.131306872e-03f,
--1.132014554e-03f, -1.132720238e-03f, -1.133423923e-03f, -1.134125607e-03f, -1.134825290e-03f, -1.135522970e-03f, -1.136218647e-03f, -1.136912319e-03f, -1.137603985e-03f, -1.138293644e-03f,
--1.138981296e-03f, -1.139666938e-03f, -1.140350570e-03f, -1.141032192e-03f, -1.141711801e-03f, -1.142389396e-03f, -1.143064978e-03f, -1.143738544e-03f, -1.144410093e-03f, -1.145079625e-03f,
--1.145747139e-03f, -1.146412633e-03f, -1.147076107e-03f, -1.147737559e-03f, -1.148396988e-03f, -1.149054394e-03f, -1.149709775e-03f, -1.150363130e-03f, -1.151014459e-03f, -1.151663760e-03f,
--1.152311032e-03f, -1.152956275e-03f, -1.153599487e-03f, -1.154240667e-03f, -1.154879815e-03f, -1.155516929e-03f, -1.156152008e-03f, -1.156785052e-03f, -1.157416059e-03f, -1.158045029e-03f,
--1.158671960e-03f, -1.159296852e-03f, -1.159919703e-03f, -1.160540513e-03f, -1.161159280e-03f, -1.161776004e-03f, -1.162390684e-03f, -1.163003319e-03f, -1.163613907e-03f, -1.164222449e-03f,
--1.164828942e-03f, -1.165433387e-03f, -1.166035782e-03f, -1.166636126e-03f, -1.167234418e-03f, -1.167830658e-03f, -1.168424844e-03f, -1.169016975e-03f, -1.169607052e-03f, -1.170195072e-03f,
--1.170781035e-03f, -1.171364940e-03f, -1.171946786e-03f, -1.172526573e-03f, -1.173104298e-03f, -1.173679963e-03f, -1.174253564e-03f, -1.174825103e-03f, -1.175394577e-03f, -1.175961986e-03f,
--1.176527330e-03f, -1.177090606e-03f, -1.177651816e-03f, -1.178210956e-03f, -1.178768028e-03f, -1.179323029e-03f, -1.179875959e-03f, -1.180426818e-03f, -1.180975604e-03f, -1.181522316e-03f,
--1.182066954e-03f, -1.182609517e-03f, -1.183150005e-03f, -1.183688415e-03f, -1.184224748e-03f, -1.184759003e-03f, -1.185291178e-03f, -1.185821274e-03f, -1.186349289e-03f, -1.186875222e-03f,
--1.187399073e-03f, -1.187920841e-03f, -1.188440525e-03f, -1.188958124e-03f, -1.189473638e-03f, -1.189987066e-03f, -1.190498407e-03f, -1.191007660e-03f, -1.191514825e-03f, -1.192019900e-03f,
--1.192522886e-03f, -1.193023781e-03f, -1.193522584e-03f, -1.194019295e-03f, -1.194513913e-03f, -1.195006438e-03f, -1.195496868e-03f, -1.195985203e-03f, -1.196471442e-03f, -1.196955585e-03f,
--1.197437630e-03f, -1.197917577e-03f, -1.198395426e-03f, -1.198871175e-03f, -1.199344825e-03f, -1.199816373e-03f, -1.200285820e-03f, -1.200753165e-03f, -1.201218407e-03f, -1.201681545e-03f,
--1.202142579e-03f, -1.202601509e-03f, -1.203058332e-03f, -1.203513050e-03f, -1.203965661e-03f, -1.204416164e-03f, -1.204864559e-03f, -1.205310845e-03f, -1.205755021e-03f, -1.206197088e-03f,
--1.206637043e-03f, -1.207074888e-03f, -1.207510620e-03f, -1.207944240e-03f, -1.208375746e-03f, -1.208805138e-03f, -1.209232416e-03f, -1.209657579e-03f, -1.210080626e-03f, -1.210501556e-03f,
--1.210920370e-03f, -1.211337066e-03f, -1.211751644e-03f, -1.212164103e-03f, -1.212574442e-03f, -1.212982662e-03f, -1.213388761e-03f, -1.213792740e-03f, -1.214194596e-03f, -1.214594330e-03f,
--1.214991942e-03f, -1.215387430e-03f, -1.215780794e-03f, -1.216172034e-03f, -1.216561149e-03f, -1.216948138e-03f, -1.217333001e-03f, -1.217715737e-03f, -1.218096346e-03f, -1.218474828e-03f,
--1.218851181e-03f, -1.219225405e-03f, -1.219597500e-03f, -1.219967466e-03f, -1.220335300e-03f, -1.220701005e-03f, -1.221064577e-03f, -1.221426018e-03f, -1.221785327e-03f, -1.222142502e-03f,
--1.222497544e-03f, -1.222850453e-03f, -1.223201227e-03f, -1.223549866e-03f, -1.223896370e-03f, -1.224240739e-03f, -1.224582971e-03f, -1.224923066e-03f, -1.225261024e-03f, -1.225596845e-03f,
--1.225930528e-03f, -1.226262072e-03f, -1.226591477e-03f, -1.226918742e-03f, -1.227243868e-03f, -1.227566854e-03f, -1.227887699e-03f, -1.228206402e-03f, -1.228522965e-03f, -1.228837385e-03f,
--1.229149663e-03f, -1.229459797e-03f, -1.229767789e-03f, -1.230073637e-03f, -1.230377341e-03f, -1.230678901e-03f, -1.230978316e-03f, -1.231275585e-03f, -1.231570709e-03f, -1.231863687e-03f,
--1.232154519e-03f, -1.232443203e-03f, -1.232729741e-03f, -1.233014131e-03f, -1.233296374e-03f, -1.233576468e-03f, -1.233854413e-03f, -1.234130210e-03f, -1.234403857e-03f, -1.234675355e-03f,
--1.234944703e-03f, -1.235211900e-03f, -1.235476947e-03f, -1.235739843e-03f, -1.236000587e-03f, -1.236259180e-03f, -1.236515621e-03f, -1.236769909e-03f, -1.237022045e-03f, -1.237272029e-03f,
--1.237519858e-03f, -1.237765535e-03f, -1.238009058e-03f, -1.238250426e-03f, -1.238489640e-03f, -1.238726700e-03f, -1.238961604e-03f, -1.239194354e-03f, -1.239424948e-03f, -1.239653386e-03f,
--1.239879668e-03f, -1.240103793e-03f, -1.240325762e-03f, -1.240545575e-03f, -1.240763230e-03f, -1.240978728e-03f, -1.241192068e-03f, -1.241403251e-03f, -1.241612275e-03f, -1.241819141e-03f,
--1.242023849e-03f, -1.242226398e-03f, -1.242426788e-03f, -1.242625018e-03f, -1.242821090e-03f, -1.243015001e-03f, -1.243206753e-03f, -1.243396345e-03f, -1.243583777e-03f, -1.243769048e-03f,
--1.243952159e-03f, -1.244133108e-03f, -1.244311897e-03f, -1.244488525e-03f, -1.244662991e-03f, -1.244835296e-03f, -1.245005439e-03f, -1.245173420e-03f, -1.245339239e-03f, -1.245502896e-03f,
--1.245664390e-03f, -1.245823722e-03f, -1.245980892e-03f, -1.246135898e-03f, -1.246288742e-03f, -1.246439423e-03f, -1.246587940e-03f, -1.246734294e-03f, -1.246878485e-03f, -1.247020512e-03f,
--1.247160375e-03f, -1.247298075e-03f, -1.247433610e-03f, -1.247566982e-03f, -1.247698189e-03f, -1.247827233e-03f, -1.247954111e-03f, -1.248078826e-03f, -1.248201376e-03f, -1.248321761e-03f,
--1.248439982e-03f, -1.248556038e-03f, -1.248669929e-03f, -1.248781655e-03f, -1.248891217e-03f, -1.248998613e-03f, -1.249103844e-03f, -1.249206910e-03f, -1.249307811e-03f, -1.249406547e-03f,
--1.249503117e-03f, -1.249597522e-03f, -1.249689762e-03f, -1.249779836e-03f, -1.249867745e-03f, -1.249953488e-03f, -1.250037066e-03f, -1.250118479e-03f, -1.250197726e-03f, -1.250274807e-03f,
--1.250349723e-03f, -1.250422474e-03f, -1.250493059e-03f, -1.250561479e-03f, -1.250627733e-03f, -1.250691821e-03f, -1.250753744e-03f, -1.250813502e-03f, -1.250871094e-03f, -1.250926521e-03f,
--1.250979783e-03f, -1.251030879e-03f, -1.251079810e-03f, -1.251126576e-03f, -1.251171176e-03f, -1.251213611e-03f, -1.251253882e-03f, -1.251291987e-03f, -1.251327927e-03f, -1.251361703e-03f,
--1.251393313e-03f, -1.251422759e-03f, -1.251450040e-03f, -1.251475157e-03f, -1.251498109e-03f, -1.251518896e-03f, -1.251537519e-03f, -1.251553978e-03f, -1.251568273e-03f, -1.251580404e-03f,
--1.251590371e-03f, -1.251598174e-03f, -1.251603813e-03f, -1.251607289e-03f, -1.251608601e-03f, -1.251607750e-03f, -1.251604736e-03f, -1.251599558e-03f, -1.251592218e-03f, -1.251582715e-03f,
--1.251571049e-03f, -1.251557220e-03f, -1.251541230e-03f, -1.251523077e-03f, -1.251502762e-03f, -1.251480285e-03f, -1.251455646e-03f, -1.251428846e-03f, -1.251399884e-03f, -1.251368762e-03f,
--1.251335478e-03f, -1.251300033e-03f, -1.251262428e-03f, -1.251222662e-03f, -1.251180736e-03f, -1.251136650e-03f, -1.251090404e-03f, -1.251041998e-03f, -1.250991433e-03f, -1.250938709e-03f,
--1.250883826e-03f, -1.250826784e-03f, -1.250767583e-03f, -1.250706224e-03f, -1.250642707e-03f, -1.250577032e-03f, -1.250509200e-03f, -1.250439210e-03f, -1.250367063e-03f, -1.250292759e-03f,
--1.250216298e-03f, -1.250137681e-03f, -1.250056908e-03f, -1.249973979e-03f, -1.249888895e-03f, -1.249801655e-03f, -1.249712261e-03f, -1.249620711e-03f, -1.249527007e-03f, -1.249431149e-03f,
--1.249333137e-03f, -1.249232972e-03f, -1.249130653e-03f, -1.249026181e-03f, -1.248919557e-03f, -1.248810780e-03f, -1.248699851e-03f, -1.248586771e-03f, -1.248471539e-03f, -1.248354156e-03f,
--1.248234622e-03f, -1.248112938e-03f, -1.247989104e-03f, -1.247863120e-03f, -1.247734987e-03f, -1.247604705e-03f, -1.247472274e-03f, -1.247337695e-03f, -1.247200967e-03f, -1.247062092e-03f,
--1.246921070e-03f, -1.246777901e-03f, -1.246632586e-03f, -1.246485124e-03f, -1.246335517e-03f, -1.246183764e-03f, -1.246029867e-03f, -1.245873824e-03f, -1.245715638e-03f, -1.245555308e-03f,
--1.245392834e-03f, -1.245228218e-03f, -1.245061459e-03f, -1.244892558e-03f, -1.244721515e-03f, -1.244548331e-03f, -1.244373006e-03f, -1.244195540e-03f, -1.244015935e-03f, -1.243834190e-03f,
--1.243650305e-03f, -1.243464283e-03f, -1.243276121e-03f, -1.243085822e-03f, -1.242893386e-03f, -1.242698813e-03f, -1.242502103e-03f, -1.242303258e-03f, -1.242102277e-03f, -1.241899161e-03f,
--1.241693910e-03f, -1.241486526e-03f, -1.241277008e-03f, -1.241065356e-03f, -1.240851573e-03f, -1.240635657e-03f, -1.240417609e-03f, -1.240197431e-03f, -1.239975122e-03f, -1.239750682e-03f,
--1.239524113e-03f, -1.239295416e-03f, -1.239064589e-03f, -1.238831635e-03f, -1.238596553e-03f, -1.238359344e-03f, -1.238120009e-03f, -1.237878548e-03f, -1.237634962e-03f, -1.237389250e-03f,
--1.237141415e-03f, -1.236891456e-03f, -1.236639374e-03f, -1.236385169e-03f, -1.236128842e-03f, -1.235870394e-03f, -1.235609825e-03f, -1.235347136e-03f, -1.235082327e-03f, -1.234815399e-03f,
--1.234546353e-03f, -1.234275188e-03f, -1.234001906e-03f, -1.233726508e-03f, -1.233448993e-03f, -1.233169362e-03f, -1.232887617e-03f, -1.232603758e-03f, -1.232317784e-03f, -1.232029698e-03f,
--1.231739499e-03f, -1.231447189e-03f, -1.231152767e-03f, -1.230856234e-03f, -1.230557592e-03f, -1.230256840e-03f, -1.229953980e-03f, -1.229649011e-03f, -1.229341936e-03f, -1.229032753e-03f,
--1.228721465e-03f, -1.228408071e-03f, -1.228092572e-03f, -1.227774970e-03f, -1.227455264e-03f, -1.227133455e-03f, -1.226809545e-03f, -1.226483533e-03f, -1.226155420e-03f, -1.225825207e-03f,
--1.225492895e-03f, -1.225158485e-03f, -1.224821977e-03f, -1.224483371e-03f, -1.224142669e-03f, -1.223799872e-03f, -1.223454979e-03f, -1.223107992e-03f, -1.222758912e-03f, -1.222407738e-03f,
--1.222054473e-03f, -1.221699116e-03f, -1.221341668e-03f, -1.220982131e-03f, -1.220620504e-03f, -1.220256790e-03f, -1.219890987e-03f, -1.219523097e-03f, -1.219153122e-03f, -1.218781061e-03f,
--1.218406915e-03f, -1.218030685e-03f, -1.217652373e-03f, -1.217271978e-03f, -1.216889501e-03f, -1.216504944e-03f, -1.216118307e-03f, -1.215729591e-03f, -1.215338796e-03f, -1.214945924e-03f,
--1.214550975e-03f, -1.214153950e-03f, -1.213754850e-03f, -1.213353676e-03f, -1.212950428e-03f, -1.212545107e-03f, -1.212137715e-03f, -1.211728251e-03f, -1.211316717e-03f, -1.210903114e-03f,
--1.210487443e-03f, -1.210069703e-03f, -1.209649897e-03f, -1.209228025e-03f, -1.208804087e-03f, -1.208378085e-03f, -1.207950020e-03f, -1.207519892e-03f, -1.207087703e-03f, -1.206653452e-03f,
--1.206217142e-03f, -1.205778772e-03f, -1.205338344e-03f, -1.204895859e-03f, -1.204451318e-03f, -1.204004721e-03f, -1.203556069e-03f, -1.203105363e-03f, -1.202652605e-03f, -1.202197794e-03f,
--1.201740932e-03f, -1.201282021e-03f, -1.200821060e-03f, -1.200358050e-03f, -1.199892994e-03f, -1.199425890e-03f, -1.198956742e-03f, -1.198485548e-03f, -1.198012311e-03f, -1.197537031e-03f,
--1.197059710e-03f, -1.196580347e-03f, -1.196098945e-03f, -1.195615503e-03f, -1.195130024e-03f, -1.194642507e-03f, -1.194152955e-03f, -1.193661367e-03f, -1.193167745e-03f, -1.192672090e-03f,
--1.192174403e-03f, -1.191674684e-03f, -1.191172936e-03f, -1.190669158e-03f, -1.190163352e-03f, -1.189655518e-03f, -1.189145658e-03f, -1.188633773e-03f, -1.188119864e-03f, -1.187603932e-03f,
--1.187085977e-03f, -1.186566001e-03f, -1.186044004e-03f, -1.185519989e-03f, -1.184993955e-03f, -1.184465905e-03f, -1.183935838e-03f, -1.183403756e-03f, -1.182869660e-03f, -1.182333551e-03f,
--1.181795430e-03f, -1.181255298e-03f, -1.180713157e-03f, -1.180169006e-03f, -1.179622848e-03f, -1.179074683e-03f, -1.178524513e-03f, -1.177972338e-03f, -1.177418160e-03f, -1.176861979e-03f,
--1.176303797e-03f, -1.175743614e-03f, -1.175181433e-03f, -1.174617253e-03f, -1.174051077e-03f, -1.173482905e-03f, -1.172912738e-03f, -1.172340577e-03f, -1.171766424e-03f, -1.171190279e-03f,
--1.170612144e-03f, -1.170032020e-03f, -1.169449907e-03f, -1.168865808e-03f, -1.168279723e-03f, -1.167691653e-03f, -1.167101600e-03f, -1.166509564e-03f, -1.165915547e-03f, -1.165319549e-03f,
--1.164721573e-03f, -1.164121619e-03f, -1.163519688e-03f, -1.162915782e-03f, -1.162309901e-03f, -1.161702047e-03f, -1.161092221e-03f, -1.160480424e-03f, -1.159866657e-03f, -1.159250922e-03f,
--1.158633219e-03f, -1.158013551e-03f, -1.157391917e-03f, -1.156768319e-03f, -1.156142759e-03f, -1.155515238e-03f, -1.154885756e-03f, -1.154254315e-03f, -1.153620917e-03f, -1.152985562e-03f,
--1.152348252e-03f, -1.151708987e-03f, -1.151067770e-03f, -1.150424600e-03f, -1.149779481e-03f, -1.149132412e-03f, -1.148483395e-03f, -1.147832431e-03f, -1.147179522e-03f, -1.146524668e-03f,
--1.145867872e-03f, -1.145209133e-03f, -1.144548454e-03f, -1.143885836e-03f, -1.143221280e-03f, -1.142554787e-03f, -1.141886359e-03f, -1.141215996e-03f, -1.140543700e-03f, -1.139869473e-03f,
--1.139193315e-03f, -1.138515228e-03f, -1.137835213e-03f, -1.137153272e-03f, -1.136469406e-03f, -1.135783615e-03f, -1.135095902e-03f, -1.134406268e-03f, -1.133714713e-03f, -1.133021240e-03f,
--1.132325849e-03f, -1.131628542e-03f, -1.130929321e-03f, -1.130228186e-03f, -1.129525139e-03f, -1.128820181e-03f, -1.128113313e-03f, -1.127404537e-03f, -1.126693855e-03f, -1.125981267e-03f,
--1.125266775e-03f, -1.124550380e-03f, -1.123832084e-03f, -1.123111887e-03f, -1.122389792e-03f, -1.121665800e-03f, -1.120939911e-03f, -1.120212128e-03f, -1.119482452e-03f, -1.118750884e-03f,
--1.118017425e-03f, -1.117282077e-03f, -1.116544841e-03f, -1.115805719e-03f, -1.115064712e-03f, -1.114321822e-03f, -1.113577049e-03f, -1.112830396e-03f, -1.112081863e-03f, -1.111331452e-03f,
--1.110579164e-03f, -1.109825002e-03f, -1.109068965e-03f, -1.108311057e-03f, -1.107551277e-03f, -1.106789628e-03f, -1.106026111e-03f, -1.105260727e-03f, -1.104493478e-03f, -1.103724365e-03f,
--1.102953390e-03f, -1.102180554e-03f, -1.101405858e-03f, -1.100629305e-03f, -1.099850895e-03f, -1.099070630e-03f, -1.098288511e-03f, -1.097504541e-03f, -1.096718719e-03f, -1.095931048e-03f,
--1.095141530e-03f, -1.094350165e-03f, -1.093556956e-03f, -1.092761903e-03f, -1.091965008e-03f, -1.091166273e-03f, -1.090365699e-03f, -1.089563287e-03f, -1.088759040e-03f, -1.087952959e-03f,
--1.087145044e-03f, -1.086335298e-03f, -1.085523723e-03f, -1.084710319e-03f, -1.083895088e-03f, -1.083078031e-03f, -1.082259151e-03f, -1.081438449e-03f, -1.080615926e-03f, -1.079791584e-03f,
--1.078965424e-03f, -1.078137447e-03f, -1.077307657e-03f, -1.076476053e-03f, -1.075642637e-03f, -1.074807412e-03f, -1.073970378e-03f, -1.073131537e-03f, -1.072290891e-03f, -1.071448442e-03f,
--1.070604190e-03f, -1.069758137e-03f, -1.068910285e-03f, -1.068060636e-03f, -1.067209191e-03f, -1.066355951e-03f, -1.065500919e-03f, -1.064644096e-03f, -1.063785483e-03f, -1.062925082e-03f,
--1.062062894e-03f, -1.061198922e-03f, -1.060333167e-03f, -1.059465629e-03f, -1.058596312e-03f, -1.057725217e-03f, -1.056852345e-03f, -1.055977697e-03f, -1.055101276e-03f, -1.054223083e-03f,
--1.053343120e-03f, -1.052461388e-03f, -1.051577889e-03f, -1.050692624e-03f, -1.049805596e-03f, -1.048916806e-03f, -1.048026255e-03f, -1.047133945e-03f, -1.046239878e-03f, -1.045344055e-03f,
--1.044446479e-03f, -1.043547150e-03f, -1.042646070e-03f, -1.041743242e-03f, -1.040838666e-03f, -1.039932345e-03f, -1.039024279e-03f, -1.038114472e-03f, -1.037202924e-03f, -1.036289637e-03f,
--1.035374612e-03f, -1.034457852e-03f, -1.033539359e-03f, -1.032619133e-03f, -1.031697176e-03f, -1.030773491e-03f, -1.029848078e-03f, -1.028920941e-03f, -1.027992079e-03f, -1.027061496e-03f,
--1.026129192e-03f, -1.025195170e-03f, -1.024259431e-03f, -1.023321976e-03f, -1.022382809e-03f, -1.021441929e-03f, -1.020499340e-03f, -1.019555042e-03f, -1.018609038e-03f, -1.017661330e-03f,
--1.016711918e-03f, -1.015760805e-03f, -1.014807992e-03f, -1.013853482e-03f, -1.012897275e-03f, -1.011939375e-03f, -1.010979782e-03f, -1.010018498e-03f, -1.009055525e-03f, -1.008090864e-03f,
--1.007124519e-03f, -1.006156489e-03f, -1.005186778e-03f, -1.004215387e-03f, -1.003242317e-03f, -1.002267570e-03f, -1.001291149e-03f, -1.000313055e-03f, -9.993332894e-04f, -9.983518544e-04f,
--9.973687519e-04f, -9.963839834e-04f, -9.953975510e-04f, -9.944094563e-04f, -9.934197011e-04f, -9.924282873e-04f, -9.914352167e-04f, -9.904404911e-04f, -9.894441124e-04f, -9.884460822e-04f,
--9.874464025e-04f, -9.864450751e-04f, -9.854421018e-04f, -9.844374845e-04f, -9.834312249e-04f, -9.824233249e-04f, -9.814137864e-04f, -9.804026112e-04f, -9.793898011e-04f, -9.783753580e-04f,
--9.773592837e-04f, -9.763415802e-04f, -9.753222491e-04f, -9.743012925e-04f, -9.732787121e-04f, -9.722545099e-04f, -9.712286876e-04f, -9.702012472e-04f, -9.691721906e-04f, -9.681415195e-04f,
--9.671092359e-04f, -9.660753417e-04f, -9.650398388e-04f, -9.640027289e-04f, -9.629640141e-04f, -9.619236962e-04f, -9.608817771e-04f, -9.598382587e-04f, -9.587931429e-04f, -9.577464316e-04f,
--9.566981266e-04f, -9.556482300e-04f, -9.545967436e-04f, -9.535436694e-04f, -9.524890091e-04f, -9.514327649e-04f, -9.503749385e-04f, -9.493155319e-04f, -9.482545470e-04f, -9.471919858e-04f,
--9.461278501e-04f, -9.450621420e-04f, -9.439948633e-04f, -9.429260160e-04f, -9.418556020e-04f, -9.407836233e-04f, -9.397100818e-04f, -9.386349795e-04f, -9.375583183e-04f, -9.364801001e-04f,
--9.354003270e-04f, -9.343190008e-04f, -9.332361236e-04f, -9.321516973e-04f, -9.310657239e-04f, -9.299782053e-04f, -9.288891435e-04f, -9.277985405e-04f, -9.267063983e-04f, -9.256127188e-04f,
--9.245175040e-04f, -9.234207559e-04f, -9.223224765e-04f, -9.212226678e-04f, -9.201213318e-04f, -9.190184704e-04f, -9.179140857e-04f, -9.168081796e-04f, -9.157007542e-04f, -9.145918115e-04f,
--9.134813535e-04f, -9.123693821e-04f, -9.112558994e-04f, -9.101409075e-04f, -9.090244082e-04f, -9.079064037e-04f, -9.067868960e-04f, -9.056658870e-04f, -9.045433789e-04f, -9.034193736e-04f,
--9.022938732e-04f, -9.011668797e-04f, -9.000383951e-04f, -8.989084216e-04f, -8.977769610e-04f, -8.966440155e-04f, -8.955095872e-04f, -8.943736780e-04f, -8.932362900e-04f, -8.920974252e-04f,
--8.909570858e-04f, -8.898152738e-04f, -8.886719913e-04f, -8.875272402e-04f, -8.863810227e-04f, -8.852333409e-04f, -8.840841967e-04f, -8.829335924e-04f, -8.817815299e-04f, -8.806280113e-04f,
--8.794730388e-04f, -8.783166143e-04f, -8.771587401e-04f, -8.759994181e-04f, -8.748386504e-04f, -8.736764392e-04f, -8.725127866e-04f, -8.713476946e-04f, -8.701811654e-04f, -8.690132010e-04f,
--8.678438035e-04f, -8.666729751e-04f, -8.655007179e-04f, -8.643270339e-04f, -8.631519253e-04f, -8.619753942e-04f, -8.607974428e-04f, -8.596180730e-04f, -8.584372872e-04f, -8.572550873e-04f,
--8.560714755e-04f, -8.548864540e-04f, -8.537000249e-04f, -8.525121902e-04f, -8.513229522e-04f, -8.501323130e-04f, -8.489402747e-04f, -8.477468395e-04f, -8.465520095e-04f, -8.453557869e-04f,
--8.441581737e-04f, -8.429591723e-04f, -8.417587846e-04f, -8.405570130e-04f, -8.393538594e-04f, -8.381493262e-04f, -8.369434154e-04f, -8.357361293e-04f, -8.345274699e-04f, -8.333174395e-04f,
--8.321060402e-04f, -8.308932743e-04f, -8.296791438e-04f, -8.284636510e-04f, -8.272467981e-04f, -8.260285872e-04f, -8.248090205e-04f, -8.235881002e-04f, -8.223658286e-04f, -8.211422077e-04f,
--8.199172398e-04f, -8.186909271e-04f, -8.174632717e-04f, -8.162342760e-04f, -8.150039420e-04f, -8.137722721e-04f, -8.125392683e-04f, -8.113049329e-04f, -8.100692682e-04f, -8.088322763e-04f,
--8.075939595e-04f, -8.063543200e-04f, -8.051133599e-04f, -8.038710816e-04f, -8.026274872e-04f, -8.013825789e-04f, -8.001363591e-04f, -7.988888299e-04f, -7.976399936e-04f, -7.963898524e-04f,
--7.951384085e-04f, -7.938856642e-04f, -7.926316217e-04f, -7.913762833e-04f, -7.901196513e-04f, -7.888617277e-04f, -7.876025150e-04f, -7.863420154e-04f, -7.850802311e-04f, -7.838171643e-04f,
--7.825528174e-04f, -7.812871926e-04f, -7.800202922e-04f, -7.787521184e-04f, -7.774826735e-04f, -7.762119597e-04f, -7.749399794e-04f, -7.736667348e-04f, -7.723922282e-04f, -7.711164619e-04f,
--7.698394381e-04f, -7.685611591e-04f, -7.672816272e-04f, -7.660008448e-04f, -7.647188140e-04f, -7.634355372e-04f, -7.621510166e-04f, -7.608652547e-04f, -7.595782535e-04f, -7.582900156e-04f,
--7.570005430e-04f, -7.557098383e-04f, -7.544179036e-04f, -7.531247412e-04f, -7.518303536e-04f, -7.505347429e-04f, -7.492379115e-04f, -7.479398617e-04f, -7.466405959e-04f, -7.453401162e-04f,
--7.440384252e-04f, -7.427355250e-04f, -7.414314181e-04f, -7.401261067e-04f, -7.388195931e-04f, -7.375118797e-04f, -7.362029689e-04f, -7.348928629e-04f, -7.335815641e-04f, -7.322690748e-04f,
--7.309553974e-04f, -7.296405342e-04f, -7.283244876e-04f, -7.270072599e-04f, -7.256888534e-04f, -7.243692705e-04f, -7.230485135e-04f, -7.217265848e-04f, -7.204034868e-04f, -7.190792218e-04f,
--7.177537922e-04f, -7.164272002e-04f, -7.150994484e-04f, -7.137705390e-04f, -7.124404744e-04f, -7.111092571e-04f, -7.097768892e-04f, -7.084433733e-04f, -7.071087117e-04f, -7.057729068e-04f,
--7.044359609e-04f, -7.030978764e-04f, -7.017586558e-04f, -7.004183013e-04f, -6.990768154e-04f, -6.977342005e-04f, -6.963904589e-04f, -6.950455930e-04f, -6.936996053e-04f, -6.923524981e-04f,
--6.910042738e-04f, -6.896549348e-04f, -6.883044836e-04f, -6.869529224e-04f, -6.856002538e-04f, -6.842464801e-04f, -6.828916037e-04f, -6.815356270e-04f, -6.801785525e-04f, -6.788203825e-04f,
--6.774611195e-04f, -6.761007658e-04f, -6.747393240e-04f, -6.733767963e-04f, -6.720131853e-04f, -6.706484934e-04f, -6.692827229e-04f, -6.679158763e-04f, -6.665479560e-04f, -6.651789645e-04f,
--6.638089042e-04f, -6.624377775e-04f, -6.610655868e-04f, -6.596923346e-04f, -6.583180234e-04f, -6.569426555e-04f, -6.555662334e-04f, -6.541887595e-04f, -6.528102363e-04f, -6.514306663e-04f,
--6.500500518e-04f, -6.486683953e-04f, -6.472856993e-04f, -6.459019663e-04f, -6.445171986e-04f, -6.431313987e-04f, -6.417445692e-04f, -6.403567124e-04f, -6.389678307e-04f, -6.375779268e-04f,
--6.361870030e-04f, -6.347950618e-04f, -6.334021057e-04f, -6.320081370e-04f, -6.306131584e-04f, -6.292171723e-04f, -6.278201811e-04f, -6.264221873e-04f, -6.250231934e-04f, -6.236232019e-04f,
--6.222222152e-04f, -6.208202359e-04f, -6.194172664e-04f, -6.180133092e-04f, -6.166083668e-04f, -6.152024416e-04f, -6.137955362e-04f, -6.123876530e-04f, -6.109787946e-04f, -6.095689634e-04f,
--6.081581620e-04f, -6.067463928e-04f, -6.053336582e-04f, -6.039199610e-04f, -6.025053034e-04f, -6.010896881e-04f, -5.996731174e-04f, -5.982555941e-04f, -5.968371204e-04f, -5.954176990e-04f,
--5.939973324e-04f, -5.925760230e-04f, -5.911537735e-04f, -5.897305862e-04f, -5.883064637e-04f, -5.868814085e-04f, -5.854554232e-04f, -5.840285103e-04f, -5.826006723e-04f, -5.811719116e-04f,
--5.797422309e-04f, -5.783116327e-04f, -5.768801195e-04f, -5.754476937e-04f, -5.740143581e-04f, -5.725801150e-04f, -5.711449670e-04f, -5.697089166e-04f, -5.682719665e-04f, -5.668341191e-04f,
--5.653953769e-04f, -5.639557425e-04f, -5.625152185e-04f, -5.610738073e-04f, -5.596315116e-04f, -5.581883338e-04f, -5.567442766e-04f, -5.552993424e-04f, -5.538535339e-04f, -5.524068535e-04f,
--5.509593038e-04f, -5.495108875e-04f, -5.480616069e-04f, -5.466114647e-04f, -5.451604635e-04f, -5.437086058e-04f, -5.422558941e-04f, -5.408023311e-04f, -5.393479192e-04f, -5.378926612e-04f,
--5.364365594e-04f, -5.349796165e-04f, -5.335218351e-04f, -5.320632176e-04f, -5.306037668e-04f, -5.291434852e-04f, -5.276823753e-04f, -5.262204397e-04f, -5.247576810e-04f, -5.232941017e-04f,
--5.218297045e-04f, -5.203644920e-04f, -5.188984666e-04f, -5.174316310e-04f, -5.159639878e-04f, -5.144955396e-04f, -5.130262889e-04f, -5.115562384e-04f, -5.100853905e-04f, -5.086137480e-04f,
--5.071413134e-04f, -5.056680892e-04f, -5.041940782e-04f, -5.027192828e-04f, -5.012437057e-04f, -4.997673495e-04f, -4.982902167e-04f, -4.968123101e-04f, -4.953336321e-04f, -4.938541853e-04f,
--4.923739725e-04f, -4.908929961e-04f, -4.894112588e-04f, -4.879287632e-04f, -4.864455119e-04f, -4.849615076e-04f, -4.834767527e-04f, -4.819912500e-04f, -4.805050020e-04f, -4.790180113e-04f,
--4.775302807e-04f, -4.760418126e-04f, -4.745526097e-04f, -4.730626746e-04f, -4.715720100e-04f, -4.700806184e-04f, -4.685885026e-04f, -4.670956650e-04f, -4.656021083e-04f, -4.641078352e-04f,
--4.626128483e-04f, -4.611171502e-04f, -4.596207435e-04f, -4.581236308e-04f, -4.566258149e-04f, -4.551272982e-04f, -4.536280836e-04f, -4.521281735e-04f, -4.506275706e-04f, -4.491262776e-04f,
--4.476242970e-04f, -4.461216316e-04f, -4.446182840e-04f, -4.431142567e-04f, -4.416095525e-04f, -4.401041740e-04f, -4.385981238e-04f, -4.370914046e-04f, -4.355840190e-04f, -4.340759696e-04f,
--4.325672592e-04f, -4.310578903e-04f, -4.295478656e-04f, -4.280371878e-04f, -4.265258594e-04f, -4.250138832e-04f, -4.235012618e-04f, -4.219879979e-04f, -4.204740941e-04f, -4.189595530e-04f,
--4.174443774e-04f, -4.159285699e-04f, -4.144121330e-04f, -4.128950696e-04f, -4.113773822e-04f, -4.098590736e-04f, -4.083401463e-04f, -4.068206031e-04f, -4.053004465e-04f, -4.037796793e-04f,
--4.022583042e-04f, -4.007363237e-04f, -3.992137406e-04f, -3.976905576e-04f, -3.961667772e-04f, -3.946424022e-04f, -3.931174353e-04f, -3.915918790e-04f, -3.900657362e-04f, -3.885390094e-04f,
--3.870117013e-04f, -3.854838146e-04f, -3.839553521e-04f, -3.824263162e-04f, -3.808967098e-04f, -3.793665355e-04f, -3.778357960e-04f, -3.763044940e-04f, -3.747726321e-04f, -3.732402130e-04f,
--3.717072395e-04f, -3.701737142e-04f, -3.686396397e-04f, -3.671050188e-04f, -3.655698541e-04f, -3.640341484e-04f, -3.624979043e-04f, -3.609611245e-04f, -3.594238117e-04f, -3.578859686e-04f,
--3.563475979e-04f, -3.548087022e-04f, -3.532692843e-04f, -3.517293468e-04f, -3.501888925e-04f, -3.486479240e-04f, -3.471064441e-04f, -3.455644554e-04f, -3.440219606e-04f, -3.424789624e-04f,
--3.409354635e-04f, -3.393914667e-04f, -3.378469745e-04f, -3.363019898e-04f, -3.347565151e-04f, -3.332105533e-04f, -3.316641070e-04f, -3.301171789e-04f, -3.285697718e-04f, -3.270218882e-04f,
--3.254735310e-04f, -3.239247028e-04f, -3.223754063e-04f, -3.208256443e-04f, -3.192754194e-04f, -3.177247344e-04f, -3.161735919e-04f, -3.146219947e-04f, -3.130699455e-04f, -3.115174470e-04f,
--3.099645019e-04f, -3.084111129e-04f, -3.068572827e-04f, -3.053030140e-04f, -3.037483096e-04f, -3.021931721e-04f, -3.006376044e-04f, -2.990816090e-04f, -2.975251887e-04f, -2.959683462e-04f,
--2.944110843e-04f, -2.928534056e-04f, -2.912953129e-04f, -2.897368089e-04f, -2.881778963e-04f, -2.866185778e-04f, -2.850588562e-04f, -2.834987341e-04f, -2.819382143e-04f, -2.803772995e-04f,
--2.788159925e-04f, -2.772542959e-04f, -2.756922124e-04f, -2.741297449e-04f, -2.725668960e-04f, -2.710036684e-04f, -2.694400649e-04f, -2.678760882e-04f, -2.663117410e-04f, -2.647470261e-04f,
--2.631819461e-04f, -2.616165039e-04f, -2.600507021e-04f, -2.584845434e-04f, -2.569180306e-04f, -2.553511664e-04f, -2.537839536e-04f, -2.522163948e-04f, -2.506484929e-04f, -2.490802504e-04f,
--2.475116703e-04f, -2.459427551e-04f, -2.443735077e-04f, -2.428039307e-04f, -2.412340269e-04f, -2.396637991e-04f, -2.380932499e-04f, -2.365223821e-04f, -2.349511984e-04f, -2.333797016e-04f,
--2.318078944e-04f, -2.302357796e-04f, -2.286633598e-04f, -2.270906378e-04f, -2.255176163e-04f, -2.239442982e-04f, -2.223706860e-04f, -2.207967826e-04f, -2.192225907e-04f, -2.176481131e-04f,
--2.160733524e-04f, -2.144983114e-04f, -2.129229928e-04f, -2.113473995e-04f, -2.097715341e-04f, -2.081953993e-04f, -2.066189980e-04f, -2.050423328e-04f, -2.034654065e-04f, -2.018882218e-04f,
--2.003107815e-04f, -1.987330883e-04f, -1.971551450e-04f, -1.955769543e-04f, -1.939985189e-04f, -1.924198416e-04f, -1.908409252e-04f, -1.892617723e-04f, -1.876823857e-04f, -1.861027682e-04f,
--1.845229225e-04f, -1.829428514e-04f, -1.813625576e-04f, -1.797820438e-04f, -1.782013127e-04f, -1.766203672e-04f, -1.750392100e-04f, -1.734578439e-04f, -1.718762714e-04f, -1.702944955e-04f,
--1.687125189e-04f, -1.671303443e-04f, -1.655479744e-04f, -1.639654120e-04f, -1.623826599e-04f, -1.607997208e-04f, -1.592165974e-04f, -1.576332925e-04f, -1.560498089e-04f, -1.544661492e-04f,
--1.528823163e-04f, -1.512983128e-04f, -1.497141416e-04f, -1.481298054e-04f, -1.465453069e-04f, -1.449606489e-04f, -1.433758341e-04f, -1.417908652e-04f, -1.402057452e-04f, -1.386204765e-04f,
--1.370350621e-04f, -1.354495047e-04f, -1.338638070e-04f, -1.322779718e-04f, -1.306920018e-04f, -1.291058997e-04f, -1.275196684e-04f, -1.259333106e-04f, -1.243468289e-04f, -1.227602263e-04f,
--1.211735054e-04f, -1.195866689e-04f, -1.179997196e-04f, -1.164126604e-04f, -1.148254938e-04f, -1.132382227e-04f, -1.116508498e-04f, -1.100633779e-04f, -1.084758098e-04f, -1.068881480e-04f,
--1.053003956e-04f, -1.037125550e-04f, -1.021246292e-04f, -1.005366209e-04f, -9.894853281e-05f, -9.736036767e-05f, -9.577212826e-05f, -9.418381731e-05f, -9.259543759e-05f, -9.100699184e-05f,
--8.941848280e-05f, -8.782991324e-05f, -8.624128590e-05f, -8.465260352e-05f, -8.306386887e-05f, -8.147508468e-05f, -7.988625372e-05f, -7.829737872e-05f, -7.670846243e-05f, -7.511950762e-05f,
--7.353051701e-05f, -7.194149338e-05f, -7.035243945e-05f, -6.876335799e-05f, -6.717425173e-05f, -6.558512344e-05f, -6.399597585e-05f, -6.240681172e-05f, -6.081763379e-05f, -5.922844482e-05f,
--5.763924754e-05f, -5.605004471e-05f, -5.446083908e-05f, -5.287163339e-05f, -5.128243039e-05f, -4.969323282e-05f, -4.810404344e-05f, -4.651486499e-05f, -4.492570021e-05f, -4.333655186e-05f,
--4.174742268e-05f, -4.015831542e-05f, -3.856923281e-05f, -3.698017761e-05f, -3.539115257e-05f, -3.380216042e-05f, -3.221320391e-05f, -3.062428579e-05f, -2.903540880e-05f, -2.744657569e-05f,
--2.585778920e-05f, -2.426905207e-05f, -2.268036705e-05f, -2.109173688e-05f, -1.950316430e-05f, -1.791465205e-05f, -1.632620289e-05f, -1.473781955e-05f, -1.314950476e-05f, -1.156126129e-05f,
--9.973091856e-06f, -8.384999211e-06f, -6.796986093e-06f, -5.209055244e-06f, -3.621209403e-06f, -2.033451309e-06f, -4.457837033e-07f, 1.141790676e-06f, 2.729269089e-06f, 4.316648799e-06f,
-5.903927065e-06f, 7.491101152e-06f, 9.078168320e-06f, 1.066512583e-05f, 1.225197095e-05f, 1.383870095e-05f, 1.542531308e-05f, 1.701180460e-05f, 1.859817279e-05f, 2.018441492e-05f,
-2.177052823e-05f, 2.335651000e-05f, 2.494235751e-05f, 2.652806800e-05f, 2.811363875e-05f, 2.969906703e-05f, 3.128435011e-05f, 3.286948525e-05f, 3.445446972e-05f, 3.603930079e-05f,
-3.762397573e-05f, 3.920849180e-05f, 4.079284629e-05f, 4.237703646e-05f, 4.396105958e-05f, 4.554491293e-05f, 4.712859377e-05f, 4.871209937e-05f, 5.029542702e-05f, 5.187857398e-05f,
-5.346153753e-05f, 5.504431495e-05f, 5.662690350e-05f, 5.820930046e-05f, 5.979150311e-05f, 6.137350873e-05f, 6.295531459e-05f, 6.453691796e-05f, 6.611831614e-05f, 6.769950639e-05f,
-6.928048600e-05f, 7.086125223e-05f, 7.244180239e-05f, 7.402213373e-05f, 7.560224356e-05f, 7.718212914e-05f, 7.876178776e-05f, 8.034121670e-05f, 8.192041324e-05f, 8.349937468e-05f,
-8.507809829e-05f, 8.665658135e-05f, 8.823482116e-05f, 8.981281500e-05f, 9.139056016e-05f, 9.296805392e-05f, 9.454529358e-05f, 9.612227641e-05f, 9.769899971e-05f, 9.927546077e-05f,
-1.008516569e-04f, 1.024275853e-04f, 1.040032434e-04f, 1.055786284e-04f, 1.071537376e-04f, 1.087285684e-04f, 1.103031179e-04f, 1.118773836e-04f, 1.134513626e-04f, 1.150250523e-04f,
-1.165984500e-04f, 1.181715530e-04f, 1.197443586e-04f, 1.213168641e-04f, 1.228890667e-04f, 1.244609638e-04f, 1.260325527e-04f, 1.276038307e-04f, 1.291747951e-04f, 1.307454431e-04f,
-1.323157722e-04f, 1.338857795e-04f, 1.354554625e-04f, 1.370248183e-04f, 1.385938444e-04f, 1.401625380e-04f, 1.417308964e-04f, 1.432989169e-04f, 1.448665969e-04f, 1.464339337e-04f,
-1.480009245e-04f, 1.495675667e-04f, 1.511338576e-04f, 1.526997945e-04f, 1.542653747e-04f, 1.558305956e-04f, 1.573954544e-04f, 1.589599484e-04f, 1.605240751e-04f, 1.620878316e-04f,
-1.636512154e-04f, 1.652142237e-04f, 1.667768538e-04f, 1.683391032e-04f, 1.699009690e-04f, 1.714624487e-04f, 1.730235395e-04f, 1.745842388e-04f, 1.761445438e-04f, 1.777044520e-04f,
-1.792639607e-04f, 1.808230671e-04f, 1.823817686e-04f, 1.839400626e-04f, 1.854979464e-04f, 1.870554172e-04f, 1.886124725e-04f, 1.901691095e-04f, 1.917253256e-04f, 1.932811182e-04f,
-1.948364845e-04f, 1.963914219e-04f, 1.979459278e-04f, 1.994999994e-04f, 2.010536342e-04f, 2.026068294e-04f, 2.041595824e-04f, 2.057118905e-04f, 2.072637512e-04f, 2.088151617e-04f,
-2.103661193e-04f, 2.119166215e-04f, 2.134666655e-04f, 2.150162487e-04f, 2.165653685e-04f, 2.181140222e-04f, 2.196622072e-04f, 2.212099208e-04f, 2.227571603e-04f, 2.243039232e-04f,
-2.258502067e-04f, 2.273960083e-04f, 2.289413252e-04f, 2.304861549e-04f, 2.320304947e-04f, 2.335743420e-04f, 2.351176940e-04f, 2.366605483e-04f, 2.382029021e-04f, 2.397447528e-04f,
-2.412860977e-04f, 2.428269343e-04f, 2.443672600e-04f, 2.459070719e-04f, 2.474463677e-04f, 2.489851445e-04f, 2.505233998e-04f, 2.520611309e-04f, 2.535983353e-04f, 2.551350103e-04f,
-2.566711533e-04f, 2.582067616e-04f, 2.597418326e-04f, 2.612763637e-04f, 2.628103523e-04f, 2.643437958e-04f, 2.658766915e-04f, 2.674090369e-04f, 2.689408292e-04f, 2.704720660e-04f,
-2.720027445e-04f, 2.735328622e-04f, 2.750624165e-04f, 2.765914047e-04f, 2.781198242e-04f, 2.796476725e-04f, 2.811749469e-04f, 2.827016448e-04f, 2.842277636e-04f, 2.857533007e-04f,
-2.872782536e-04f, 2.888026195e-04f, 2.903263959e-04f, 2.918495802e-04f, 2.933721699e-04f, 2.948941622e-04f, 2.964155547e-04f, 2.979363446e-04f, 2.994565295e-04f, 3.009761067e-04f,
-3.024950737e-04f, 3.040134278e-04f, 3.055311665e-04f, 3.070482871e-04f, 3.085647872e-04f, 3.100806640e-04f, 3.115959151e-04f, 3.131105378e-04f, 3.146245295e-04f, 3.161378878e-04f,
-3.176506099e-04f, 3.191626934e-04f, 3.206741356e-04f, 3.221849339e-04f, 3.236950859e-04f, 3.252045889e-04f, 3.267134403e-04f, 3.282216377e-04f, 3.297291783e-04f, 3.312360597e-04f,
-3.327422793e-04f, 3.342478345e-04f, 3.357527227e-04f, 3.372569415e-04f, 3.387604881e-04f, 3.402633602e-04f, 3.417655550e-04f, 3.432670701e-04f, 3.447679030e-04f, 3.462680509e-04f,
-3.477675115e-04f, 3.492662821e-04f, 3.507643602e-04f, 3.522617433e-04f, 3.537584287e-04f, 3.552544140e-04f, 3.567496966e-04f, 3.582442740e-04f, 3.597381436e-04f, 3.612313029e-04f,
-3.627237493e-04f, 3.642154803e-04f, 3.657064934e-04f, 3.671967860e-04f, 3.686863556e-04f, 3.701751997e-04f, 3.716633158e-04f, 3.731507012e-04f, 3.746373535e-04f, 3.761232702e-04f,
-3.776084487e-04f, 3.790928865e-04f, 3.805765811e-04f, 3.820595300e-04f, 3.835417306e-04f, 3.850231804e-04f, 3.865038769e-04f, 3.879838176e-04f, 3.894630000e-04f, 3.909414216e-04f,
-3.924190798e-04f, 3.938959722e-04f, 3.953720962e-04f, 3.968474493e-04f, 3.983220291e-04f, 3.997958330e-04f, 4.012688585e-04f, 4.027411032e-04f, 4.042125645e-04f, 4.056832399e-04f,
-4.071531269e-04f, 4.086222231e-04f, 4.100905259e-04f, 4.115580328e-04f, 4.130247415e-04f, 4.144906493e-04f, 4.159557538e-04f, 4.174200525e-04f, 4.188835429e-04f, 4.203462225e-04f,
-4.218080890e-04f, 4.232691397e-04f, 4.247293721e-04f, 4.261887840e-04f, 4.276473726e-04f, 4.291051357e-04f, 4.305620707e-04f, 4.320181750e-04f, 4.334734464e-04f, 4.349278823e-04f,
-4.363814802e-04f, 4.378342377e-04f, 4.392861523e-04f, 4.407372215e-04f, 4.421874430e-04f, 4.436368142e-04f, 4.450853327e-04f, 4.465329960e-04f, 4.479798017e-04f, 4.494257473e-04f,
-4.508708304e-04f, 4.523150485e-04f, 4.537583992e-04f, 4.552008801e-04f, 4.566424886e-04f, 4.580832225e-04f, 4.595230791e-04f, 4.609620561e-04f, 4.624001511e-04f, 4.638373616e-04f,
-4.652736852e-04f, 4.667091195e-04f, 4.681436619e-04f, 4.695773102e-04f, 4.710100618e-04f, 4.724419144e-04f, 4.738728655e-04f, 4.753029127e-04f, 4.767320537e-04f, 4.781602858e-04f,
-4.795876069e-04f, 4.810140144e-04f, 4.824395059e-04f, 4.838640790e-04f, 4.852877314e-04f, 4.867104605e-04f, 4.881322641e-04f, 4.895531397e-04f, 4.909730848e-04f, 4.923920972e-04f,
-4.938101743e-04f, 4.952273139e-04f, 4.966435135e-04f, 4.980587707e-04f, 4.994730831e-04f, 5.008864483e-04f, 5.022988641e-04f, 5.037103278e-04f, 5.051208373e-04f, 5.065303901e-04f,
-5.079389838e-04f, 5.093466160e-04f, 5.107532844e-04f, 5.121589866e-04f, 5.135637202e-04f, 5.149674828e-04f, 5.163702722e-04f, 5.177720858e-04f, 5.191729214e-04f, 5.205727766e-04f,
-5.219716490e-04f, 5.233695362e-04f, 5.247664360e-04f, 5.261623459e-04f, 5.275572636e-04f, 5.289511867e-04f, 5.303441130e-04f, 5.317360400e-04f, 5.331269653e-04f, 5.345168867e-04f,
-5.359058018e-04f, 5.372937083e-04f, 5.386806038e-04f, 5.400664860e-04f, 5.414513526e-04f, 5.428352011e-04f, 5.442180294e-04f, 5.455998350e-04f, 5.469806156e-04f, 5.483603689e-04f,
-5.497390927e-04f, 5.511167844e-04f, 5.524934419e-04f, 5.538690628e-04f, 5.552436448e-04f, 5.566171856e-04f, 5.579896829e-04f, 5.593611343e-04f, 5.607315376e-04f, 5.621008904e-04f,
-5.634691905e-04f, 5.648364355e-04f, 5.662026232e-04f, 5.675677511e-04f, 5.689318172e-04f, 5.702948189e-04f, 5.716567541e-04f, 5.730176205e-04f, 5.743774158e-04f, 5.757361376e-04f,
-5.770937837e-04f, 5.784503519e-04f, 5.798058398e-04f, 5.811602451e-04f, 5.825135657e-04f, 5.838657991e-04f, 5.852169431e-04f, 5.865669956e-04f, 5.879159541e-04f, 5.892638164e-04f,
-5.906105803e-04f, 5.919562435e-04f, 5.933008037e-04f, 5.946442587e-04f, 5.959866062e-04f, 5.973278440e-04f, 5.986679698e-04f, 6.000069814e-04f, 6.013448764e-04f, 6.026816527e-04f,
-6.040173081e-04f, 6.053518402e-04f, 6.066852469e-04f, 6.080175259e-04f, 6.093486749e-04f, 6.106786918e-04f, 6.120075742e-04f, 6.133353200e-04f, 6.146619270e-04f, 6.159873929e-04f,
-6.173117154e-04f, 6.186348925e-04f, 6.199569218e-04f, 6.212778011e-04f, 6.225975282e-04f, 6.239161010e-04f, 6.252335171e-04f, 6.265497744e-04f, 6.278648707e-04f, 6.291788038e-04f,
-6.304915714e-04f, 6.318031714e-04f, 6.331136016e-04f, 6.344228597e-04f, 6.357309437e-04f, 6.370378512e-04f, 6.383435801e-04f, 6.396481283e-04f, 6.409514934e-04f, 6.422536734e-04f,
-6.435546661e-04f, 6.448544693e-04f, 6.461530808e-04f, 6.474504984e-04f, 6.487467200e-04f, 6.500417433e-04f, 6.513355663e-04f, 6.526281868e-04f, 6.539196025e-04f, 6.552098114e-04f,
-6.564988113e-04f, 6.577866000e-04f, 6.590731753e-04f, 6.603585352e-04f, 6.616426775e-04f, 6.629255999e-04f, 6.642073004e-04f, 6.654877769e-04f, 6.667670271e-04f, 6.680450490e-04f,
-6.693218404e-04f, 6.705973992e-04f, 6.718717232e-04f, 6.731448104e-04f, 6.744166585e-04f, 6.756872655e-04f, 6.769566293e-04f, 6.782247476e-04f, 6.794916185e-04f, 6.807572398e-04f,
-6.820216093e-04f, 6.832847250e-04f, 6.845465847e-04f, 6.858071864e-04f, 6.870665279e-04f, 6.883246072e-04f, 6.895814221e-04f, 6.908369705e-04f, 6.920912504e-04f, 6.933442597e-04f,
-6.945959962e-04f, 6.958464578e-04f, 6.970956426e-04f, 6.983435484e-04f, 6.995901731e-04f, 7.008355146e-04f, 7.020795709e-04f, 7.033223399e-04f, 7.045638195e-04f, 7.058040077e-04f,
-7.070429023e-04f, 7.082805014e-04f, 7.095168028e-04f, 7.107518046e-04f, 7.119855045e-04f, 7.132179007e-04f, 7.144489909e-04f, 7.156787733e-04f, 7.169072457e-04f, 7.181344060e-04f,
-7.193602523e-04f, 7.205847825e-04f, 7.218079946e-04f, 7.230298865e-04f, 7.242504562e-04f, 7.254697016e-04f, 7.266876208e-04f, 7.279042117e-04f, 7.291194723e-04f, 7.303334005e-04f,
-7.315459943e-04f, 7.327572518e-04f, 7.339671709e-04f, 7.351757495e-04f, 7.363829858e-04f, 7.375888776e-04f, 7.387934230e-04f, 7.399966200e-04f, 7.411984666e-04f, 7.423989607e-04f,
-7.435981004e-04f, 7.447958837e-04f, 7.459923086e-04f, 7.471873730e-04f, 7.483810752e-04f, 7.495734129e-04f, 7.507643843e-04f, 7.519539874e-04f, 7.531422202e-04f, 7.543290807e-04f,
-7.555145670e-04f, 7.566986771e-04f, 7.578814090e-04f, 7.590627608e-04f, 7.602427305e-04f, 7.614213161e-04f, 7.625985157e-04f, 7.637743274e-04f, 7.649487492e-04f, 7.661217791e-04f,
-7.672934152e-04f, 7.684636556e-04f, 7.696324982e-04f, 7.707999413e-04f, 7.719659828e-04f, 7.731306208e-04f, 7.742938534e-04f, 7.754556786e-04f, 7.766160946e-04f, 7.777750993e-04f,
-7.789326910e-04f, 7.800888676e-04f, 7.812436273e-04f, 7.823969681e-04f, 7.835488882e-04f, 7.846993855e-04f, 7.858484583e-04f, 7.869961046e-04f, 7.881423226e-04f, 7.892871102e-04f,
-7.904304657e-04f, 7.915723871e-04f, 7.927128726e-04f, 7.938519202e-04f, 7.949895281e-04f, 7.961256944e-04f, 7.972604173e-04f, 7.983936947e-04f, 7.995255250e-04f, 8.006559061e-04f,
-8.017848362e-04f, 8.029123136e-04f, 8.040383362e-04f, 8.051629023e-04f, 8.062860099e-04f, 8.074076573e-04f, 8.085278426e-04f, 8.096465639e-04f, 8.107638193e-04f, 8.118796071e-04f,
-8.129939254e-04f, 8.141067724e-04f, 8.152181462e-04f, 8.163280449e-04f, 8.174364668e-04f, 8.185434101e-04f, 8.196488728e-04f, 8.207528532e-04f, 8.218553495e-04f, 8.229563598e-04f,
-8.240558823e-04f, 8.251539152e-04f, 8.262504568e-04f, 8.273455051e-04f, 8.284390584e-04f, 8.295311150e-04f, 8.306216729e-04f, 8.317107303e-04f, 8.327982856e-04f, 8.338843369e-04f,
-8.349688825e-04f, 8.360519204e-04f, 8.371334490e-04f, 8.382134665e-04f, 8.392919711e-04f, 8.403689610e-04f, 8.414444344e-04f, 8.425183896e-04f, 8.435908248e-04f, 8.446617383e-04f,
-8.457311283e-04f, 8.467989930e-04f, 8.478653307e-04f, 8.489301396e-04f, 8.499934179e-04f, 8.510551640e-04f, 8.521153761e-04f, 8.531740524e-04f, 8.542311912e-04f, 8.552867908e-04f,
-8.563408494e-04f, 8.573933652e-04f, 8.584443367e-04f, 8.594937620e-04f, 8.605416395e-04f, 8.615879673e-04f, 8.626327438e-04f, 8.636759673e-04f, 8.647176361e-04f, 8.657577484e-04f,
-8.667963026e-04f, 8.678332969e-04f, 8.688687296e-04f, 8.699025991e-04f, 8.709349037e-04f, 8.719656416e-04f, 8.729948112e-04f, 8.740224108e-04f, 8.750484387e-04f, 8.760728932e-04f,
-8.770957726e-04f, 8.781170754e-04f, 8.791367997e-04f, 8.801549439e-04f, 8.811715064e-04f, 8.821864856e-04f, 8.831998796e-04f, 8.842116870e-04f, 8.852219059e-04f, 8.862305349e-04f,
-8.872375721e-04f, 8.882430161e-04f, 8.892468651e-04f, 8.902491174e-04f, 8.912497716e-04f, 8.922488258e-04f, 8.932462786e-04f, 8.942421282e-04f, 8.952363731e-04f, 8.962290115e-04f,
-8.972200420e-04f, 8.982094628e-04f, 8.991972724e-04f, 9.001834691e-04f, 9.011680514e-04f, 9.021510176e-04f, 9.031323661e-04f, 9.041120954e-04f, 9.050902038e-04f, 9.060666897e-04f,
-9.070415516e-04f, 9.080147878e-04f, 9.089863968e-04f, 9.099563769e-04f, 9.109247267e-04f, 9.118914446e-04f, 9.128565288e-04f, 9.138199780e-04f, 9.147817904e-04f, 9.157419647e-04f,
-9.167004991e-04f, 9.176573921e-04f, 9.186126422e-04f, 9.195662478e-04f, 9.205182074e-04f, 9.214685194e-04f, 9.224171823e-04f, 9.233641945e-04f, 9.243095545e-04f, 9.252532608e-04f,
-9.261953118e-04f, 9.271357060e-04f, 9.280744418e-04f, 9.290115178e-04f, 9.299469324e-04f, 9.308806841e-04f, 9.318127714e-04f, 9.327431928e-04f, 9.336719467e-04f, 9.345990317e-04f,
-9.355244463e-04f, 9.364481889e-04f, 9.373702580e-04f, 9.382906522e-04f, 9.392093700e-04f, 9.401264099e-04f, 9.410417704e-04f, 9.419554499e-04f, 9.428674472e-04f, 9.437777605e-04f,
-9.446863886e-04f, 9.455933299e-04f, 9.464985829e-04f, 9.474021462e-04f, 9.483040183e-04f, 9.492041977e-04f, 9.501026831e-04f, 9.509994730e-04f, 9.518945658e-04f, 9.527879602e-04f,
-9.536796547e-04f, 9.545696478e-04f, 9.554579383e-04f, 9.563445245e-04f, 9.572294050e-04f, 9.581125786e-04f, 9.589940436e-04f, 9.598737987e-04f, 9.607518425e-04f, 9.616281736e-04f,
-9.625027905e-04f, 9.633756918e-04f, 9.642468762e-04f, 9.651163421e-04f, 9.659840884e-04f, 9.668501134e-04f, 9.677144158e-04f, 9.685769943e-04f, 9.694378475e-04f, 9.702969739e-04f,
-9.711543722e-04f, 9.720100410e-04f, 9.728639789e-04f, 9.737161846e-04f, 9.745666566e-04f, 9.754153937e-04f, 9.762623944e-04f, 9.771076574e-04f, 9.779511813e-04f, 9.787929648e-04f,
-9.796330065e-04f, 9.804713051e-04f, 9.813078593e-04f, 9.821426676e-04f, 9.829757287e-04f, 9.838070414e-04f, 9.846366043e-04f, 9.854644160e-04f, 9.862904752e-04f, 9.871147806e-04f,
-9.879373309e-04f, 9.887581248e-04f, 9.895771609e-04f, 9.903944379e-04f, 9.912099546e-04f, 9.920237096e-04f, 9.928357016e-04f, 9.936459293e-04f, 9.944543914e-04f, 9.952610867e-04f,
-9.960660138e-04f, 9.968691714e-04f, 9.976705584e-04f, 9.984701733e-04f, 9.992680149e-04f, 1.000064082e-03f, 1.000858373e-03f, 1.001650887e-03f, 1.002441623e-03f, 1.003230579e-03f,
-1.004017755e-03f, 1.004803148e-03f, 1.005586757e-03f, 1.006368583e-03f, 1.007148622e-03f, 1.007926874e-03f, 1.008703338e-03f, 1.009478012e-03f, 1.010250895e-03f, 1.011021986e-03f,
-1.011791284e-03f, 1.012558788e-03f, 1.013324495e-03f, 1.014088406e-03f, 1.014850519e-03f, 1.015610832e-03f, 1.016369345e-03f, 1.017126055e-03f, 1.017880963e-03f, 1.018634067e-03f,
-1.019385365e-03f, 1.020134857e-03f, 1.020882541e-03f, 1.021628416e-03f, 1.022372481e-03f, 1.023114734e-03f, 1.023855175e-03f, 1.024593803e-03f, 1.025330615e-03f, 1.026065612e-03f,
-1.026798792e-03f, 1.027530153e-03f, 1.028259694e-03f, 1.028987416e-03f, 1.029713315e-03f, 1.030437391e-03f, 1.031159644e-03f, 1.031880071e-03f, 1.032598672e-03f, 1.033315445e-03f,
-1.034030390e-03f, 1.034743505e-03f, 1.035454789e-03f, 1.036164241e-03f, 1.036871860e-03f, 1.037577645e-03f, 1.038281594e-03f, 1.038983708e-03f, 1.039683983e-03f, 1.040382420e-03f,
-1.041079017e-03f, 1.041773774e-03f, 1.042466688e-03f, 1.043157760e-03f, 1.043846987e-03f, 1.044534370e-03f, 1.045219906e-03f, 1.045903594e-03f, 1.046585435e-03f, 1.047265425e-03f,
-1.047943566e-03f, 1.048619854e-03f, 1.049294291e-03f, 1.049966873e-03f, 1.050637600e-03f, 1.051306472e-03f, 1.051973487e-03f, 1.052638644e-03f, 1.053301942e-03f, 1.053963380e-03f,
-1.054622958e-03f, 1.055280673e-03f, 1.055936525e-03f, 1.056590513e-03f, 1.057242635e-03f, 1.057892892e-03f, 1.058541282e-03f, 1.059187803e-03f, 1.059832455e-03f, 1.060475238e-03f,
-1.061116148e-03f, 1.061755187e-03f, 1.062392353e-03f, 1.063027645e-03f, 1.063661061e-03f, 1.064292601e-03f, 1.064922264e-03f, 1.065550050e-03f, 1.066175956e-03f, 1.066799982e-03f,
-1.067422127e-03f, 1.068042390e-03f, 1.068660771e-03f, 1.069277267e-03f, 1.069891879e-03f, 1.070504605e-03f, 1.071115444e-03f, 1.071724395e-03f, 1.072331458e-03f, 1.072936632e-03f,
-1.073539915e-03f, 1.074141306e-03f, 1.074740806e-03f, 1.075338412e-03f, 1.075934123e-03f, 1.076527940e-03f, 1.077119861e-03f, 1.077709885e-03f, 1.078298011e-03f, 1.078884238e-03f,
-1.079468566e-03f, 1.080050993e-03f, 1.080631519e-03f, 1.081210143e-03f, 1.081786863e-03f, 1.082361679e-03f, 1.082934591e-03f, 1.083505596e-03f, 1.084074695e-03f, 1.084641886e-03f,
-1.085207169e-03f, 1.085770542e-03f, 1.086332006e-03f, 1.086891558e-03f, 1.087449199e-03f, 1.088004926e-03f, 1.088558740e-03f, 1.089110640e-03f, 1.089660625e-03f, 1.090208693e-03f,
-1.090754844e-03f, 1.091299078e-03f, 1.091841393e-03f, 1.092381789e-03f, 1.092920265e-03f, 1.093456819e-03f, 1.093991452e-03f, 1.094524162e-03f, 1.095054948e-03f, 1.095583810e-03f,
-1.096110747e-03f, 1.096635759e-03f, 1.097158843e-03f, 1.097680000e-03f, 1.098199229e-03f, 1.098716529e-03f, 1.099231899e-03f, 1.099745339e-03f, 1.100256847e-03f, 1.100766423e-03f,
-1.101274066e-03f, 1.101779776e-03f, 1.102283551e-03f, 1.102785391e-03f, 1.103285295e-03f, 1.103783262e-03f, 1.104279292e-03f, 1.104773384e-03f, 1.105265537e-03f, 1.105755750e-03f,
-1.106244023e-03f, 1.106730355e-03f, 1.107214745e-03f, 1.107697192e-03f, 1.108177697e-03f, 1.108656257e-03f, 1.109132872e-03f, 1.109607543e-03f, 1.110080267e-03f, 1.110551044e-03f,
-1.111019874e-03f, 1.111486755e-03f, 1.111951688e-03f, 1.112414671e-03f, 1.112875704e-03f, 1.113334786e-03f, 1.113791917e-03f, 1.114247095e-03f, 1.114700320e-03f, 1.115151591e-03f,
-1.115600909e-03f, 1.116048271e-03f, 1.116493678e-03f, 1.116937128e-03f, 1.117378621e-03f, 1.117818157e-03f, 1.118255735e-03f, 1.118691354e-03f, 1.119125014e-03f, 1.119556713e-03f,
-1.119986452e-03f, 1.120414229e-03f, 1.120840044e-03f, 1.121263897e-03f, 1.121685786e-03f, 1.122105712e-03f, 1.122523673e-03f, 1.122939669e-03f, 1.123353699e-03f, 1.123765764e-03f,
-1.124175861e-03f, 1.124583991e-03f, 1.124990153e-03f, 1.125394346e-03f, 1.125796570e-03f, 1.126196825e-03f, 1.126595109e-03f, 1.126991422e-03f, 1.127385763e-03f, 1.127778133e-03f,
-1.128168530e-03f, 1.128556953e-03f, 1.128943403e-03f, 1.129327879e-03f, 1.129710380e-03f, 1.130090906e-03f, 1.130469455e-03f, 1.130846029e-03f, 1.131220625e-03f, 1.131593244e-03f,
-1.131963884e-03f, 1.132332546e-03f, 1.132699230e-03f, 1.133063933e-03f, 1.133426656e-03f, 1.133787399e-03f, 1.134146161e-03f, 1.134502941e-03f, 1.134857739e-03f, 1.135210554e-03f,
-1.135561386e-03f, 1.135910235e-03f, 1.136257100e-03f, 1.136601980e-03f, 1.136944874e-03f, 1.137285784e-03f, 1.137624707e-03f, 1.137961644e-03f, 1.138296594e-03f, 1.138629557e-03f,
-1.138960532e-03f, 1.139289519e-03f, 1.139616516e-03f, 1.139941525e-03f, 1.140264544e-03f, 1.140585573e-03f, 1.140904611e-03f, 1.141221659e-03f, 1.141536715e-03f, 1.141849779e-03f,
-1.142160852e-03f, 1.142469931e-03f, 1.142777017e-03f, 1.143082110e-03f, 1.143385210e-03f, 1.143686314e-03f, 1.143985424e-03f, 1.144282539e-03f, 1.144577659e-03f, 1.144870783e-03f,
-1.145161910e-03f, 1.145451041e-03f, 1.145738175e-03f, 1.146023311e-03f, 1.146306450e-03f, 1.146587590e-03f, 1.146866732e-03f, 1.147143875e-03f, 1.147419019e-03f, 1.147692164e-03f,
-1.147963308e-03f, 1.148232452e-03f, 1.148499595e-03f, 1.148764738e-03f, 1.149027879e-03f, 1.149289018e-03f, 1.149548156e-03f, 1.149805291e-03f, 1.150060423e-03f, 1.150313553e-03f,
-1.150564679e-03f, 1.150813802e-03f, 1.151060921e-03f, 1.151306035e-03f, 1.151549145e-03f, 1.151790250e-03f, 1.152029350e-03f, 1.152266445e-03f, 1.152501534e-03f, 1.152734617e-03f,
-1.152965694e-03f, 1.153194764e-03f, 1.153421827e-03f, 1.153646883e-03f, 1.153869932e-03f, 1.154090973e-03f, 1.154310006e-03f, 1.154527032e-03f, 1.154742048e-03f, 1.154955056e-03f,
-1.155166055e-03f, 1.155375045e-03f, 1.155582026e-03f, 1.155786997e-03f, 1.155989958e-03f, 1.156190909e-03f, 1.156389849e-03f, 1.156586779e-03f, 1.156781698e-03f, 1.156974606e-03f,
-1.157165503e-03f, 1.157354389e-03f, 1.157541263e-03f, 1.157726125e-03f, 1.157908975e-03f, 1.158089813e-03f, 1.158268638e-03f, 1.158445451e-03f, 1.158620251e-03f, 1.158793038e-03f,
-1.158963812e-03f, 1.159132572e-03f, 1.159299319e-03f, 1.159464053e-03f, 1.159626772e-03f, 1.159787478e-03f, 1.159946169e-03f, 1.160102846e-03f, 1.160257508e-03f, 1.160410156e-03f,
-1.160560790e-03f, 1.160709408e-03f, 1.160856011e-03f, 1.161000599e-03f, 1.161143172e-03f, 1.161283729e-03f, 1.161422271e-03f, 1.161558797e-03f, 1.161693307e-03f, 1.161825802e-03f,
-1.161956280e-03f, 1.162084743e-03f, 1.162211189e-03f, 1.162335619e-03f, 1.162458032e-03f, 1.162578429e-03f, 1.162696809e-03f, 1.162813173e-03f, 1.162927520e-03f, 1.163039850e-03f,
-1.163150163e-03f, 1.163258459e-03f, 1.163364738e-03f, 1.163469000e-03f, 1.163571245e-03f, 1.163671473e-03f, 1.163769683e-03f, 1.163865876e-03f, 1.163960052e-03f, 1.164052210e-03f,
-1.164142351e-03f, 1.164230474e-03f, 1.164316580e-03f, 1.164400668e-03f, 1.164482739e-03f, 1.164562792e-03f, 1.164640828e-03f, 1.164716845e-03f, 1.164790846e-03f, 1.164862828e-03f,
-1.164932793e-03f, 1.165000740e-03f, 1.165066670e-03f, 1.165130582e-03f, 1.165192476e-03f, 1.165252353e-03f, 1.165310212e-03f, 1.165366053e-03f, 1.165419877e-03f, 1.165471684e-03f,
-1.165521472e-03f, 1.165569244e-03f, 1.165614998e-03f, 1.165658734e-03f, 1.165700454e-03f, 1.165740156e-03f, 1.165777840e-03f, 1.165813508e-03f, 1.165847158e-03f, 1.165878791e-03f,
-1.165908408e-03f, 1.165936007e-03f, 1.165961589e-03f, 1.165985155e-03f, 1.166006704e-03f, 1.166026236e-03f, 1.166043752e-03f, 1.166059252e-03f, 1.166072735e-03f, 1.166084201e-03f,
-1.166093652e-03f, 1.166101086e-03f, 1.166106505e-03f, 1.166109908e-03f, 1.166111295e-03f, 1.166110666e-03f, 1.166108022e-03f, 1.166103362e-03f, 1.166096688e-03f, 1.166087998e-03f,
-1.166077293e-03f, 1.166064574e-03f, 1.166049839e-03f, 1.166033090e-03f, 1.166014327e-03f, 1.165993550e-03f, 1.165970758e-03f, 1.165945953e-03f, 1.165919133e-03f, 1.165890301e-03f,
-1.165859454e-03f, 1.165826595e-03f, 1.165791722e-03f, 1.165754837e-03f, 1.165715938e-03f, 1.165675028e-03f, 1.165632105e-03f, 1.165587169e-03f, 1.165540222e-03f, 1.165491263e-03f,
-1.165440293e-03f, 1.165387311e-03f, 1.165332318e-03f, 1.165275314e-03f, 1.165216300e-03f, 1.165155275e-03f, 1.165092240e-03f, 1.165027195e-03f, 1.164960140e-03f, 1.164891075e-03f,
-1.164820001e-03f, 1.164746918e-03f, 1.164671827e-03f, 1.164594726e-03f, 1.164515618e-03f, 1.164434501e-03f, 1.164351377e-03f, 1.164266245e-03f, 1.164179105e-03f, 1.164089959e-03f,
-1.163998806e-03f, 1.163905647e-03f, 1.163810481e-03f, 1.163713310e-03f, 1.163614133e-03f, 1.163512950e-03f, 1.163409763e-03f, 1.163304571e-03f, 1.163197374e-03f, 1.163088174e-03f,
-1.162976969e-03f, 1.162863762e-03f, 1.162748551e-03f, 1.162631337e-03f, 1.162512120e-03f, 1.162390902e-03f, 1.162267681e-03f, 1.162142459e-03f, 1.162015236e-03f, 1.161886012e-03f,
-1.161754787e-03f, 1.161621562e-03f, 1.161486337e-03f, 1.161349113e-03f, 1.161209890e-03f, 1.161068668e-03f, 1.160925448e-03f, 1.160780229e-03f, 1.160633013e-03f, 1.160483799e-03f,
-1.160332589e-03f, 1.160179382e-03f, 1.160024179e-03f, 1.159866981e-03f, 1.159707786e-03f, 1.159546597e-03f, 1.159383414e-03f, 1.159218236e-03f, 1.159051064e-03f, 1.158881899e-03f,
-1.158710741e-03f, 1.158537591e-03f, 1.158362448e-03f, 1.158185314e-03f, 1.158006188e-03f, 1.157825072e-03f, 1.157641965e-03f, 1.157456868e-03f, 1.157269781e-03f, 1.157080706e-03f,
-1.156889642e-03f, 1.156696589e-03f, 1.156501549e-03f, 1.156304522e-03f, 1.156105508e-03f, 1.155904507e-03f, 1.155701521e-03f, 1.155496549e-03f, 1.155289592e-03f, 1.155080650e-03f,
-1.154869725e-03f, 1.154656816e-03f, 1.154441924e-03f, 1.154225049e-03f, 1.154006193e-03f, 1.153785354e-03f, 1.153562535e-03f, 1.153337735e-03f, 1.153110955e-03f, 1.152882196e-03f,
-1.152651457e-03f, 1.152418740e-03f, 1.152184045e-03f, 1.151947373e-03f, 1.151708724e-03f, 1.151468098e-03f, 1.151225496e-03f, 1.150980919e-03f, 1.150734367e-03f, 1.150485841e-03f,
-1.150235341e-03f, 1.149982868e-03f, 1.149728423e-03f, 1.149472005e-03f, 1.149213616e-03f, 1.148953256e-03f, 1.148690926e-03f, 1.148426625e-03f, 1.148160356e-03f, 1.147892118e-03f,
-1.147621912e-03f, 1.147349738e-03f, 1.147075598e-03f, 1.146799491e-03f, 1.146521419e-03f, 1.146241381e-03f, 1.145959379e-03f, 1.145675413e-03f, 1.145389484e-03f, 1.145101592e-03f,
-1.144811738e-03f, 1.144519923e-03f, 1.144226146e-03f, 1.143930410e-03f, 1.143632714e-03f, 1.143333059e-03f, 1.143031446e-03f, 1.142727875e-03f, 1.142422347e-03f, 1.142114863e-03f,
-1.141805423e-03f, 1.141494028e-03f, 1.141180678e-03f, 1.140865375e-03f, 1.140548119e-03f, 1.140228910e-03f, 1.139907749e-03f, 1.139584638e-03f, 1.139259576e-03f, 1.138932564e-03f,
-1.138603603e-03f, 1.138272694e-03f, 1.137939837e-03f, 1.137605033e-03f, 1.137268282e-03f, 1.136929587e-03f, 1.136588946e-03f, 1.136246361e-03f, 1.135901832e-03f, 1.135555361e-03f,
-1.135206948e-03f, 1.134856593e-03f, 1.134504298e-03f, 1.134150063e-03f, 1.133793888e-03f, 1.133435775e-03f, 1.133075725e-03f, 1.132713737e-03f, 1.132349814e-03f, 1.131983954e-03f,
-1.131616160e-03f, 1.131246433e-03f, 1.130874771e-03f, 1.130501178e-03f, 1.130125652e-03f, 1.129748196e-03f, 1.129368810e-03f, 1.128987494e-03f, 1.128604249e-03f, 1.128219077e-03f,
-1.127831977e-03f, 1.127442952e-03f, 1.127052000e-03f, 1.126659124e-03f, 1.126264324e-03f, 1.125867601e-03f, 1.125468956e-03f, 1.125068389e-03f, 1.124665902e-03f, 1.124261494e-03f,
-1.123855168e-03f, 1.123446923e-03f, 1.123036761e-03f, 1.122624682e-03f, 1.122210687e-03f, 1.121794777e-03f, 1.121376953e-03f, 1.120957216e-03f, 1.120535567e-03f, 1.120112005e-03f,
-1.119686533e-03f, 1.119259151e-03f, 1.118829860e-03f, 1.118398661e-03f, 1.117965555e-03f, 1.117530542e-03f, 1.117093623e-03f, 1.116654799e-03f, 1.116214072e-03f, 1.115771442e-03f,
-1.115326909e-03f, 1.114880475e-03f, 1.114432141e-03f, 1.113981908e-03f, 1.113529776e-03f, 1.113075746e-03f, 1.112619819e-03f, 1.112161996e-03f, 1.111702279e-03f, 1.111240667e-03f,
-1.110777163e-03f, 1.110311765e-03f, 1.109844477e-03f, 1.109375298e-03f, 1.108904230e-03f, 1.108431273e-03f, 1.107956429e-03f, 1.107479697e-03f, 1.107001080e-03f, 1.106520579e-03f,
-1.106038193e-03f, 1.105553924e-03f, 1.105067774e-03f, 1.104579742e-03f, 1.104089830e-03f, 1.103598039e-03f, 1.103104370e-03f, 1.102608824e-03f, 1.102111402e-03f, 1.101612104e-03f,
-1.101110932e-03f, 1.100607887e-03f, 1.100102969e-03f, 1.099596180e-03f, 1.099087521e-03f, 1.098576992e-03f, 1.098064595e-03f, 1.097550331e-03f, 1.097034200e-03f, 1.096516204e-03f,
-1.095996343e-03f, 1.095474620e-03f, 1.094951034e-03f, 1.094425586e-03f, 1.093898278e-03f, 1.093369111e-03f, 1.092838086e-03f, 1.092305204e-03f, 1.091770465e-03f, 1.091233871e-03f,
-1.090695423e-03f, 1.090155122e-03f, 1.089612969e-03f, 1.089068965e-03f, 1.088523111e-03f, 1.087975408e-03f, 1.087425858e-03f, 1.086874460e-03f, 1.086321217e-03f, 1.085766129e-03f,
-1.085209198e-03f, 1.084650424e-03f, 1.084089809e-03f, 1.083527354e-03f, 1.082963059e-03f, 1.082396926e-03f, 1.081828956e-03f, 1.081259150e-03f, 1.080687509e-03f, 1.080114034e-03f,
-1.079538727e-03f, 1.078961588e-03f, 1.078382619e-03f, 1.077801820e-03f, 1.077219193e-03f, 1.076634739e-03f, 1.076048458e-03f, 1.075460353e-03f, 1.074870424e-03f, 1.074278673e-03f,
-1.073685100e-03f, 1.073089706e-03f, 1.072492493e-03f, 1.071893463e-03f, 1.071292615e-03f, 1.070689951e-03f, 1.070085473e-03f, 1.069479181e-03f, 1.068871077e-03f, 1.068261162e-03f,
-1.067649437e-03f, 1.067035902e-03f, 1.066420561e-03f, 1.065803412e-03f, 1.065184458e-03f, 1.064563700e-03f, 1.063941140e-03f, 1.063316777e-03f, 1.062690614e-03f, 1.062062651e-03f,
-1.061432890e-03f, 1.060801332e-03f, 1.060167978e-03f, 1.059532829e-03f, 1.058895887e-03f, 1.058257153e-03f, 1.057616628e-03f, 1.056974313e-03f, 1.056330209e-03f, 1.055684318e-03f,
-1.055036641e-03f, 1.054387179e-03f, 1.053735934e-03f, 1.053082905e-03f, 1.052428096e-03f, 1.051771507e-03f, 1.051113139e-03f, 1.050452993e-03f, 1.049791071e-03f, 1.049127374e-03f,
-1.048461904e-03f, 1.047794661e-03f, 1.047125646e-03f, 1.046454862e-03f, 1.045782309e-03f, 1.045107989e-03f, 1.044431902e-03f, 1.043754051e-03f, 1.043074435e-03f, 1.042393058e-03f,
-1.041709920e-03f, 1.041025021e-03f, 1.040338365e-03f, 1.039649951e-03f, 1.038959781e-03f, 1.038267857e-03f, 1.037574179e-03f, 1.036878749e-03f, 1.036181569e-03f, 1.035482639e-03f,
-1.034781962e-03f, 1.034079537e-03f, 1.033375367e-03f, 1.032669453e-03f, 1.031961796e-03f, 1.031252398e-03f, 1.030541260e-03f, 1.029828383e-03f, 1.029113768e-03f, 1.028397418e-03f,
-1.027679332e-03f, 1.026959513e-03f, 1.026237962e-03f, 1.025514681e-03f, 1.024789670e-03f, 1.024062930e-03f, 1.023334465e-03f, 1.022604274e-03f, 1.021872359e-03f, 1.021138721e-03f,
-1.020403363e-03f, 1.019666284e-03f, 1.018927487e-03f, 1.018186973e-03f, 1.017444743e-03f, 1.016700799e-03f, 1.015955143e-03f, 1.015207774e-03f, 1.014458696e-03f, 1.013707908e-03f,
-1.012955414e-03f, 1.012201213e-03f, 1.011445308e-03f, 1.010687700e-03f, 1.009928391e-03f, 1.009167381e-03f, 1.008404672e-03f, 1.007640265e-03f, 1.006874163e-03f, 1.006106366e-03f,
-1.005336876e-03f, 1.004565694e-03f, 1.003792822e-03f, 1.003018261e-03f, 1.002242012e-03f, 1.001464078e-03f, 1.000684459e-03f, 9.999031570e-04f, 9.991201733e-04f, 9.983355094e-04f,
-9.975491668e-04f, 9.967611470e-04f, 9.959714513e-04f, 9.951800813e-04f, 9.943870385e-04f, 9.935923242e-04f, 9.927959400e-04f, 9.919978874e-04f, 9.911981678e-04f, 9.903967827e-04f,
-9.895937336e-04f, 9.887890220e-04f, 9.879826493e-04f, 9.871746171e-04f, 9.863649269e-04f, 9.855535802e-04f, 9.847405784e-04f, 9.839259231e-04f, 9.831096157e-04f, 9.822916579e-04f,
-9.814720510e-04f, 9.806507967e-04f, 9.798278964e-04f, 9.790033516e-04f, 9.781771639e-04f, 9.773493348e-04f, 9.765198658e-04f, 9.756887585e-04f, 9.748560144e-04f, 9.740216351e-04f,
-9.731856220e-04f, 9.723479767e-04f, 9.715087008e-04f, 9.706677958e-04f, 9.698252632e-04f, 9.689811047e-04f, 9.681353217e-04f, 9.672879159e-04f, 9.664388887e-04f, 9.655882418e-04f,
-9.647359768e-04f, 9.638820951e-04f, 9.630265984e-04f, 9.621694882e-04f, 9.613107662e-04f, 9.604504338e-04f, 9.595884927e-04f, 9.587249445e-04f, 9.578597908e-04f, 9.569930331e-04f,
-9.561246731e-04f, 9.552547122e-04f, 9.543831523e-04f, 9.535099947e-04f, 9.526352413e-04f, 9.517588934e-04f, 9.508809529e-04f, 9.500014212e-04f, 9.491203000e-04f, 9.482375909e-04f,
-9.473532955e-04f, 9.464674155e-04f, 9.455799525e-04f, 9.446909081e-04f, 9.438002839e-04f, 9.429080816e-04f, 9.420143028e-04f, 9.411189492e-04f, 9.402220223e-04f, 9.393235239e-04f,
-9.384234556e-04f, 9.375218190e-04f, 9.366186158e-04f, 9.357138476e-04f, 9.348075161e-04f, 9.338996230e-04f, 9.329901699e-04f, 9.320791585e-04f, 9.311665904e-04f, 9.302524674e-04f,
-9.293367910e-04f, 9.284195630e-04f, 9.275007851e-04f, 9.265804589e-04f, 9.256585862e-04f, 9.247351685e-04f, 9.238102076e-04f, 9.228837052e-04f, 9.219556630e-04f, 9.210260826e-04f,
-9.200949658e-04f, 9.191623143e-04f, 9.182281297e-04f, 9.172924139e-04f, 9.163551684e-04f, 9.154163950e-04f, 9.144760955e-04f, 9.135342714e-04f, 9.125909247e-04f, 9.116460569e-04f,
-9.106996697e-04f, 9.097517651e-04f, 9.088023445e-04f, 9.078514099e-04f, 9.068989629e-04f, 9.059450052e-04f, 9.049895386e-04f, 9.040325649e-04f, 9.030740857e-04f, 9.021141029e-04f,
-9.011526181e-04f, 9.001896332e-04f, 8.992251498e-04f, 8.982591698e-04f, 8.972916949e-04f, 8.963227269e-04f, 8.953522675e-04f, 8.943803184e-04f, 8.934068816e-04f, 8.924319587e-04f,
-8.914555514e-04f, 8.904776617e-04f, 8.894982912e-04f, 8.885174418e-04f, 8.875351152e-04f, 8.865513132e-04f, 8.855660376e-04f, 8.845792902e-04f, 8.835910728e-04f, 8.826013871e-04f,
-8.816102351e-04f, 8.806176184e-04f, 8.796235389e-04f, 8.786279985e-04f, 8.776309988e-04f, 8.766325417e-04f, 8.756326291e-04f, 8.746312627e-04f, 8.736284443e-04f, 8.726241758e-04f,
-8.716184591e-04f, 8.706112958e-04f, 8.696026879e-04f, 8.685926372e-04f, 8.675811455e-04f, 8.665682147e-04f, 8.655538465e-04f, 8.645380429e-04f, 8.635208056e-04f, 8.625021366e-04f,
-8.614820376e-04f, 8.604605105e-04f, 8.594375572e-04f, 8.584131795e-04f, 8.573873792e-04f, 8.563601583e-04f, 8.553315186e-04f, 8.543014619e-04f, 8.532699901e-04f, 8.522371051e-04f,
-8.512028088e-04f, 8.501671030e-04f, 8.491299896e-04f, 8.480914704e-04f, 8.470515475e-04f, 8.460102225e-04f, 8.449674975e-04f, 8.439233743e-04f, 8.428778548e-04f, 8.418309409e-04f,
-8.407826344e-04f, 8.397329373e-04f, 8.386818515e-04f, 8.376293789e-04f, 8.365755213e-04f, 8.355202808e-04f, 8.344636591e-04f, 8.334056582e-04f, 8.323462800e-04f, 8.312855264e-04f,
-8.302233994e-04f, 8.291599008e-04f, 8.280950326e-04f, 8.270287967e-04f, 8.259611950e-04f, 8.248922295e-04f, 8.238219020e-04f, 8.227502146e-04f, 8.216771691e-04f, 8.206027675e-04f,
-8.195270117e-04f, 8.184499036e-04f, 8.173714453e-04f, 8.162916386e-04f, 8.152104855e-04f, 8.141279879e-04f, 8.130441479e-04f, 8.119589673e-04f, 8.108724481e-04f, 8.097845922e-04f,
-8.086954017e-04f, 8.076048785e-04f, 8.065130245e-04f, 8.054198417e-04f, 8.043253321e-04f, 8.032294977e-04f, 8.021323404e-04f, 8.010338622e-04f, 7.999340651e-04f, 7.988329511e-04f,
-7.977305221e-04f, 7.966267802e-04f, 7.955217272e-04f, 7.944153653e-04f, 7.933076964e-04f, 7.921987225e-04f, 7.910884455e-04f, 7.899768675e-04f, 7.888639905e-04f, 7.877498165e-04f,
-7.866343475e-04f, 7.855175855e-04f, 7.843995325e-04f, 7.832801905e-04f, 7.821595615e-04f, 7.810376475e-04f, 7.799144506e-04f, 7.787899728e-04f, 7.776642161e-04f, 7.765371825e-04f,
-7.754088740e-04f, 7.742792927e-04f, 7.731484405e-04f, 7.720163196e-04f, 7.708829320e-04f, 7.697482796e-04f, 7.686123646e-04f, 7.674751890e-04f, 7.663367547e-04f, 7.651970640e-04f,
-7.640561187e-04f, 7.629139209e-04f, 7.617704728e-04f, 7.606257763e-04f, 7.594798335e-04f, 7.583326464e-04f, 7.571842172e-04f, 7.560345479e-04f, 7.548836404e-04f, 7.537314970e-04f,
-7.525781197e-04f, 7.514235104e-04f, 7.502676714e-04f, 7.491106046e-04f, 7.479523122e-04f, 7.467927962e-04f, 7.456320587e-04f, 7.444701018e-04f, 7.433069276e-04f, 7.421425381e-04f,
-7.409769354e-04f, 7.398101216e-04f, 7.386420988e-04f, 7.374728692e-04f, 7.363024347e-04f, 7.351307975e-04f, 7.339579597e-04f, 7.327839234e-04f, 7.316086906e-04f, 7.304322636e-04f,
-7.292546443e-04f, 7.280758350e-04f, 7.268958376e-04f, 7.257146544e-04f, 7.245322874e-04f, 7.233487387e-04f, 7.221640105e-04f, 7.209781049e-04f, 7.197910240e-04f, 7.186027699e-04f,
-7.174133448e-04f, 7.162227507e-04f, 7.150309898e-04f, 7.138380643e-04f, 7.126439762e-04f, 7.114487278e-04f, 7.102523210e-04f, 7.090547581e-04f, 7.078560413e-04f, 7.066561726e-04f,
-7.054551542e-04f, 7.042529882e-04f, 7.030496768e-04f, 7.018452222e-04f, 7.006396264e-04f, 6.994328917e-04f, 6.982250201e-04f, 6.970160139e-04f, 6.958058752e-04f, 6.945946062e-04f,
-6.933822090e-04f, 6.921686858e-04f, 6.909540388e-04f, 6.897382701e-04f, 6.885213818e-04f, 6.873033762e-04f, 6.860842555e-04f, 6.848640218e-04f, 6.836426772e-04f, 6.824202240e-04f,
-6.811966644e-04f, 6.799720004e-04f, 6.787462344e-04f, 6.775193685e-04f, 6.762914048e-04f, 6.750623457e-04f, 6.738321931e-04f, 6.726009494e-04f, 6.713686168e-04f, 6.701351974e-04f,
-6.689006934e-04f, 6.676651071e-04f, 6.664284405e-04f, 6.651906961e-04f, 6.639518758e-04f, 6.627119820e-04f, 6.614710169e-04f, 6.602289826e-04f, 6.589858814e-04f, 6.577417155e-04f,
-6.564964871e-04f, 6.552501984e-04f, 6.540028516e-04f, 6.527544490e-04f, 6.515049928e-04f, 6.502544852e-04f, 6.490029283e-04f, 6.477503246e-04f, 6.464966761e-04f, 6.452419851e-04f,
-6.439862539e-04f, 6.427294846e-04f, 6.414716795e-04f, 6.402128409e-04f, 6.389529710e-04f, 6.376920719e-04f, 6.364301461e-04f, 6.351671956e-04f, 6.339032228e-04f, 6.326382299e-04f,
-6.313722191e-04f, 6.301051927e-04f, 6.288371530e-04f, 6.275681021e-04f, 6.262980424e-04f, 6.250269761e-04f, 6.237549055e-04f, 6.224818328e-04f, 6.212077603e-04f, 6.199326902e-04f,
-6.186566248e-04f, 6.173795664e-04f, 6.161015172e-04f, 6.148224796e-04f, 6.135424557e-04f, 6.122614479e-04f, 6.109794584e-04f, 6.096964895e-04f, 6.084125435e-04f, 6.071276226e-04f,
-6.058417292e-04f, 6.045548655e-04f, 6.032670338e-04f, 6.019782364e-04f, 6.006884755e-04f, 5.993977535e-04f, 5.981060726e-04f, 5.968134352e-04f, 5.955198435e-04f, 5.942252998e-04f,
-5.929298064e-04f, 5.916333656e-04f, 5.903359798e-04f, 5.890376511e-04f, 5.877383819e-04f, 5.864381746e-04f, 5.851370314e-04f, 5.838349546e-04f, 5.825319465e-04f, 5.812280095e-04f,
-5.799231458e-04f, 5.786173577e-04f, 5.773106476e-04f, 5.760030178e-04f, 5.746944706e-04f, 5.733850083e-04f, 5.720746333e-04f, 5.707633478e-04f, 5.694511541e-04f, 5.681380547e-04f,
-5.668240518e-04f, 5.655091477e-04f, 5.641933448e-04f, 5.628766454e-04f, 5.615590519e-04f, 5.602405665e-04f, 5.589211916e-04f, 5.576009295e-04f, 5.562797826e-04f, 5.549577531e-04f,
-5.536348436e-04f, 5.523110562e-04f, 5.509863933e-04f, 5.496608573e-04f, 5.483344505e-04f, 5.470071752e-04f, 5.456790338e-04f, 5.443500287e-04f, 5.430201622e-04f, 5.416894366e-04f,
-5.403578543e-04f, 5.390254177e-04f, 5.376921291e-04f, 5.363579908e-04f, 5.350230052e-04f, 5.336871748e-04f, 5.323505017e-04f, 5.310129885e-04f, 5.296746374e-04f, 5.283354508e-04f,
-5.269954311e-04f, 5.256545807e-04f, 5.243129019e-04f, 5.229703971e-04f, 5.216270686e-04f, 5.202829189e-04f, 5.189379503e-04f, 5.175921651e-04f, 5.162455658e-04f, 5.148981548e-04f,
-5.135499343e-04f, 5.122009069e-04f, 5.108510748e-04f, 5.095004404e-04f, 5.081490062e-04f, 5.067967745e-04f, 5.054437477e-04f, 5.040899282e-04f, 5.027353184e-04f, 5.013799206e-04f,
-5.000237373e-04f, 4.986667708e-04f, 4.973090236e-04f, 4.959504980e-04f, 4.945911964e-04f, 4.932311213e-04f, 4.918702750e-04f, 4.905086599e-04f, 4.891462784e-04f, 4.877831330e-04f,
-4.864192259e-04f, 4.850545597e-04f, 4.836891367e-04f, 4.823229594e-04f, 4.809560301e-04f, 4.795883513e-04f, 4.782199253e-04f, 4.768507546e-04f, 4.754808415e-04f, 4.741101886e-04f,
-4.727387982e-04f, 4.713666727e-04f, 4.699938145e-04f, 4.686202261e-04f, 4.672459099e-04f, 4.658708682e-04f, 4.644951036e-04f, 4.631186184e-04f, 4.617414151e-04f, 4.603634961e-04f,
-4.589848637e-04f, 4.576055205e-04f, 4.562254689e-04f, 4.548447113e-04f, 4.534632500e-04f, 4.520810876e-04f, 4.506982265e-04f, 4.493146691e-04f, 4.479304179e-04f, 4.465454752e-04f,
-4.451598436e-04f, 4.437735254e-04f, 4.423865231e-04f, 4.409988391e-04f, 4.396104759e-04f, 4.382214359e-04f, 4.368317215e-04f, 4.354413352e-04f, 4.340502795e-04f, 4.326585568e-04f,
-4.312661694e-04f, 4.298731200e-04f, 4.284794109e-04f, 4.270850445e-04f, 4.256900234e-04f, 4.242943499e-04f, 4.228980266e-04f, 4.215010558e-04f, 4.201034401e-04f, 4.187051819e-04f,
-4.173062835e-04f, 4.159067476e-04f, 4.145065766e-04f, 4.131057728e-04f, 4.117043389e-04f, 4.103022771e-04f, 4.088995901e-04f, 4.074962802e-04f, 4.060923499e-04f, 4.046878017e-04f,
-4.032826381e-04f, 4.018768614e-04f, 4.004704743e-04f, 3.990634791e-04f, 3.976558783e-04f, 3.962476744e-04f, 3.948388699e-04f, 3.934294672e-04f, 3.920194688e-04f, 3.906088771e-04f,
-3.891976947e-04f, 3.877859241e-04f, 3.863735676e-04f, 3.849606278e-04f, 3.835471072e-04f, 3.821330082e-04f, 3.807183333e-04f, 3.793030850e-04f, 3.778872658e-04f, 3.764708781e-04f,
-3.750539244e-04f, 3.736364073e-04f, 3.722183292e-04f, 3.707996926e-04f, 3.693804999e-04f, 3.679607537e-04f, 3.665404564e-04f, 3.651196106e-04f, 3.636982187e-04f, 3.622762833e-04f,
-3.608538067e-04f, 3.594307915e-04f, 3.580072402e-04f, 3.565831553e-04f, 3.551585393e-04f, 3.537333947e-04f, 3.523077239e-04f, 3.508815294e-04f, 3.494548139e-04f, 3.480275797e-04f,
-3.465998293e-04f, 3.451715653e-04f, 3.437427902e-04f, 3.423135064e-04f, 3.408837164e-04f, 3.394534229e-04f, 3.380226281e-04f, 3.365913348e-04f, 3.351595453e-04f, 3.337272622e-04f,
-3.322944880e-04f, 3.308612251e-04f, 3.294274761e-04f, 3.279932436e-04f, 3.265585299e-04f, 3.251233377e-04f, 3.236876694e-04f, 3.222515275e-04f, 3.208149146e-04f, 3.193778331e-04f,
-3.179402856e-04f, 3.165022746e-04f, 3.150638026e-04f, 3.136248721e-04f, 3.121854856e-04f, 3.107456457e-04f, 3.093053548e-04f, 3.078646155e-04f, 3.064234303e-04f, 3.049818017e-04f,
-3.035397322e-04f, 3.020972244e-04f, 3.006542808e-04f, 2.992109038e-04f, 2.977670961e-04f, 2.963228601e-04f, 2.948781983e-04f, 2.934331134e-04f, 2.919876077e-04f, 2.905416838e-04f,
-2.890953443e-04f, 2.876485917e-04f, 2.862014285e-04f, 2.847538572e-04f, 2.833058804e-04f, 2.818575005e-04f, 2.804087202e-04f, 2.789595418e-04f, 2.775099681e-04f, 2.760600015e-04f,
-2.746096444e-04f, 2.731588996e-04f, 2.717077694e-04f, 2.702562565e-04f, 2.688043633e-04f, 2.673520923e-04f, 2.658994462e-04f, 2.644464275e-04f, 2.629930386e-04f, 2.615392822e-04f,
-2.600851607e-04f, 2.586306767e-04f, 2.571758328e-04f, 2.557206314e-04f, 2.542650751e-04f, 2.528091664e-04f, 2.513529079e-04f, 2.498963022e-04f, 2.484393517e-04f, 2.469820590e-04f,
-2.455244266e-04f, 2.440664571e-04f, 2.426081530e-04f, 2.411495168e-04f, 2.396905512e-04f, 2.382312586e-04f, 2.367716415e-04f, 2.353117026e-04f, 2.338514444e-04f, 2.323908694e-04f,
-2.309299801e-04f, 2.294687791e-04f, 2.280072690e-04f, 2.265454522e-04f, 2.250833314e-04f, 2.236209091e-04f, 2.221581878e-04f, 2.206951700e-04f, 2.192318584e-04f, 2.177682555e-04f,
-2.163043637e-04f, 2.148401858e-04f, 2.133757241e-04f, 2.119109813e-04f, 2.104459599e-04f, 2.089806624e-04f, 2.075150915e-04f, 2.060492496e-04f, 2.045831393e-04f, 2.031167632e-04f,
-2.016501238e-04f, 2.001832236e-04f, 1.987160653e-04f, 1.972486513e-04f, 1.957809842e-04f, 1.943130666e-04f, 1.928449010e-04f, 1.913764900e-04f, 1.899078361e-04f, 1.884389419e-04f,
-1.869698099e-04f, 1.855004428e-04f, 1.840308429e-04f, 1.825610129e-04f, 1.810909554e-04f, 1.796206729e-04f, 1.781501680e-04f, 1.766794432e-04f, 1.752085010e-04f, 1.737373441e-04f,
-1.722659749e-04f, 1.707943961e-04f, 1.693226102e-04f, 1.678506198e-04f, 1.663784273e-04f, 1.649060354e-04f, 1.634334467e-04f, 1.619606636e-04f, 1.604876887e-04f, 1.590145247e-04f,
-1.575411740e-04f, 1.560676392e-04f, 1.545939229e-04f, 1.531200277e-04f, 1.516459560e-04f, 1.501717104e-04f, 1.486972936e-04f, 1.472227080e-04f, 1.457479563e-04f, 1.442730409e-04f,
-1.427979645e-04f, 1.413227296e-04f, 1.398473387e-04f, 1.383717945e-04f, 1.368960994e-04f, 1.354202561e-04f, 1.339442671e-04f, 1.324681350e-04f, 1.309918623e-04f, 1.295154516e-04f,
-1.280389054e-04f, 1.265622263e-04f, 1.250854169e-04f, 1.236084797e-04f, 1.221314173e-04f, 1.206542322e-04f, 1.191769271e-04f, 1.176995044e-04f, 1.162219668e-04f, 1.147443167e-04f,
-1.132665568e-04f, 1.117886896e-04f, 1.103107177e-04f, 1.088326437e-04f, 1.073544700e-04f, 1.058761993e-04f, 1.043978341e-04f, 1.029193770e-04f, 1.014408306e-04f, 9.996219733e-05f,
-9.848347984e-05f, 9.700468069e-05f, 9.552580243e-05f, 9.404684761e-05f, 9.256781881e-05f, 9.108871859e-05f, 8.960954949e-05f, 8.813031410e-05f, 8.665101496e-05f, 8.517165464e-05f,
-8.369223570e-05f, 8.221276070e-05f, 8.073323220e-05f, 7.925365276e-05f, 7.777402494e-05f, 7.629435131e-05f, 7.481463443e-05f, 7.333487685e-05f, 7.185508113e-05f, 7.037524985e-05f,
-6.889538554e-05f, 6.741549079e-05f, 6.593556814e-05f, 6.445562016e-05f, 6.297564940e-05f, 6.149565844e-05f, 6.001564981e-05f, 5.853562610e-05f, 5.705558985e-05f, 5.557554362e-05f,
-5.409548998e-05f, 5.261543149e-05f, 5.113537069e-05f, 4.965531015e-05f, 4.817525244e-05f, 4.669520010e-05f, 4.521515570e-05f, 4.373512179e-05f, 4.225510093e-05f, 4.077509569e-05f,
-3.929510861e-05f, 3.781514225e-05f, 3.633519918e-05f, 3.485528195e-05f, 3.337539311e-05f, 3.189553523e-05f, 3.041571085e-05f, 2.893592254e-05f, 2.745617285e-05f, 2.597646434e-05f,
-2.449679956e-05f, 2.301718107e-05f, 2.153761142e-05f, 2.005809317e-05f, 1.857862887e-05f, 1.709922107e-05f, 1.561987234e-05f, 1.414058522e-05f, 1.266136227e-05f, 1.118220604e-05f,
-9.703119091e-06f, 8.224103965e-06f, 6.745163218e-06f, 5.266299403e-06f, 3.787515073e-06f, 2.308812778e-06f, 8.301950700e-07f, -6.483354998e-07f, -2.126776381e-06f, -3.605125023e-06f,
--5.083378875e-06f, -6.561535388e-06f, -8.039592013e-06f, -9.517546200e-06f, -1.099539540e-05f, -1.247313706e-05f, -1.395076865e-05f, -1.542828760e-05f, -1.690569137e-05f, -1.838297741e-05f,
--1.986014319e-05f, -2.133718614e-05f, -2.281410373e-05f, -2.429089341e-05f, -2.576755263e-05f, -2.724407885e-05f, -2.872046953e-05f, -3.019672212e-05f, -3.167283407e-05f, -3.314880284e-05f,
--3.462462590e-05f, -3.610030070e-05f, -3.757582469e-05f, -3.905119533e-05f, -4.052641009e-05f, -4.200146641e-05f, -4.347636177e-05f, -4.495109362e-05f, -4.642565942e-05f, -4.790005664e-05f,
--4.937428273e-05f, -5.084833515e-05f, -5.232221137e-05f, -5.379590885e-05f, -5.526942505e-05f, -5.674275744e-05f, -5.821590348e-05f, -5.968886064e-05f, -6.116162638e-05f, -6.263419816e-05f,
--6.410657345e-05f, -6.557874972e-05f, -6.705072444e-05f, -6.852249507e-05f, -6.999405908e-05f, -7.146541394e-05f, -7.293655711e-05f, -7.440748608e-05f, -7.587819830e-05f, -7.734869125e-05f,
--7.881896240e-05f, -8.028900921e-05f, -8.175882917e-05f, -8.322841975e-05f, -8.469777842e-05f, -8.616690264e-05f, -8.763578991e-05f, -8.910443768e-05f, -9.057284344e-05f, -9.204100467e-05f,
--9.350891883e-05f, -9.497658341e-05f, -9.644399589e-05f, -9.791115374e-05f, -9.937805444e-05f, -1.008446955e-04f, -1.023110743e-04f, -1.037771884e-04f, -1.052430354e-04f, -1.067086125e-04f,
--1.081739174e-04f, -1.096389476e-04f, -1.111037004e-04f, -1.125681734e-04f, -1.140323641e-04f, -1.154962699e-04f, -1.169598884e-04f, -1.184232171e-04f, -1.198862533e-04f, -1.213489947e-04f,
--1.228114387e-04f, -1.242735827e-04f, -1.257354244e-04f, -1.271969611e-04f, -1.286581903e-04f, -1.301191096e-04f, -1.315797165e-04f, -1.330400084e-04f, -1.344999829e-04f, -1.359596373e-04f,
--1.374189693e-04f, -1.388779763e-04f, -1.403366559e-04f, -1.417950054e-04f, -1.432530225e-04f, -1.447107046e-04f, -1.461680492e-04f, -1.476250538e-04f, -1.490817160e-04f, -1.505380331e-04f,
--1.519940028e-04f, -1.534496225e-04f, -1.549048898e-04f, -1.563598021e-04f, -1.578143569e-04f, -1.592685518e-04f, -1.607223842e-04f, -1.621758517e-04f, -1.636289518e-04f, -1.650816820e-04f,
--1.665340397e-04f, -1.679860226e-04f, -1.694376281e-04f, -1.708888537e-04f, -1.723396970e-04f, -1.737901554e-04f, -1.752402266e-04f, -1.766899079e-04f, -1.781391969e-04f, -1.795880911e-04f,
--1.810365882e-04f, -1.824846854e-04f, -1.839323805e-04f, -1.853796709e-04f, -1.868265541e-04f, -1.882730276e-04f, -1.897190891e-04f, -1.911647359e-04f, -1.926099657e-04f, -1.940547759e-04f,
--1.954991642e-04f, -1.969431279e-04f, -1.983866647e-04f, -1.998297720e-04f, -2.012724475e-04f, -2.027146886e-04f, -2.041564928e-04f, -2.055978578e-04f, -2.070387810e-04f, -2.084792600e-04f,
--2.099192923e-04f, -2.113588754e-04f, -2.127980069e-04f, -2.142366843e-04f, -2.156749052e-04f, -2.171126671e-04f, -2.185499676e-04f, -2.199868041e-04f, -2.214231743e-04f, -2.228590756e-04f,
--2.242945057e-04f, -2.257294621e-04f, -2.271639422e-04f, -2.285979437e-04f, -2.300314642e-04f, -2.314645011e-04f, -2.328970521e-04f, -2.343291146e-04f, -2.357606862e-04f, -2.371917645e-04f,
--2.386223471e-04f, -2.400524314e-04f, -2.414820151e-04f, -2.429110957e-04f, -2.443396708e-04f, -2.457677379e-04f, -2.471952946e-04f, -2.486223384e-04f, -2.500488670e-04f, -2.514748778e-04f,
--2.529003685e-04f, -2.543253366e-04f, -2.557497797e-04f, -2.571736954e-04f, -2.585970811e-04f, -2.600199346e-04f, -2.614422533e-04f, -2.628640349e-04f, -2.642852769e-04f, -2.657059768e-04f,
--2.671261324e-04f, -2.685457411e-04f, -2.699648005e-04f, -2.713833082e-04f, -2.728012617e-04f, -2.742186588e-04f, -2.756354969e-04f, -2.770517736e-04f, -2.784674865e-04f, -2.798826333e-04f,
--2.812972114e-04f, -2.827112185e-04f, -2.841246522e-04f, -2.855375100e-04f, -2.869497896e-04f, -2.883614885e-04f, -2.897726044e-04f, -2.911831348e-04f, -2.925930774e-04f, -2.940024296e-04f,
--2.954111892e-04f, -2.968193538e-04f, -2.982269208e-04f, -2.996338880e-04f, -3.010402529e-04f, -3.024460132e-04f, -3.038511664e-04f, -3.052557102e-04f, -3.066596421e-04f, -3.080629598e-04f,
--3.094656609e-04f, -3.108677430e-04f, -3.122692037e-04f, -3.136700406e-04f, -3.150702514e-04f, -3.164698336e-04f, -3.178687849e-04f, -3.192671028e-04f, -3.206647851e-04f, -3.220618294e-04f,
--3.234582331e-04f, -3.248539941e-04f, -3.262491099e-04f, -3.276435781e-04f, -3.290373964e-04f, -3.304305624e-04f, -3.318230737e-04f, -3.332149279e-04f, -3.346061228e-04f, -3.359966559e-04f,
--3.373865248e-04f, -3.387757272e-04f, -3.401642608e-04f, -3.415521231e-04f, -3.429393119e-04f, -3.443258247e-04f, -3.457116592e-04f, -3.470968131e-04f, -3.484812840e-04f, -3.498650695e-04f,
--3.512481673e-04f, -3.526305750e-04f, -3.540122903e-04f, -3.553933109e-04f, -3.567736344e-04f, -3.581532584e-04f, -3.595321806e-04f, -3.609103987e-04f, -3.622879104e-04f, -3.636647132e-04f,
--3.650408049e-04f, -3.664161831e-04f, -3.677908454e-04f, -3.691647897e-04f, -3.705380134e-04f, -3.719105143e-04f, -3.732822901e-04f, -3.746533384e-04f, -3.760236570e-04f, -3.773932434e-04f,
--3.787620953e-04f, -3.801302105e-04f, -3.814975866e-04f, -3.828642212e-04f, -3.842301122e-04f, -3.855952571e-04f, -3.869596536e-04f, -3.883232995e-04f, -3.896861924e-04f, -3.910483300e-04f,
--3.924097100e-04f, -3.937703301e-04f, -3.951301879e-04f, -3.964892812e-04f, -3.978476077e-04f, -3.992051651e-04f, -4.005619510e-04f, -4.019179632e-04f, -4.032731994e-04f, -4.046276572e-04f,
--4.059813344e-04f, -4.073342287e-04f, -4.086863379e-04f, -4.100376595e-04f, -4.113881913e-04f, -4.127379310e-04f, -4.140868764e-04f, -4.154350252e-04f, -4.167823750e-04f, -4.181289236e-04f,
--4.194746687e-04f, -4.208196081e-04f, -4.221637394e-04f, -4.235070605e-04f, -4.248495689e-04f, -4.261912624e-04f, -4.275321389e-04f, -4.288721959e-04f, -4.302114312e-04f, -4.315498427e-04f,
--4.328874279e-04f, -4.342241846e-04f, -4.355601107e-04f, -4.368952037e-04f, -4.382294616e-04f, -4.395628819e-04f, -4.408954624e-04f, -4.422272010e-04f, -4.435580953e-04f, -4.448881431e-04f,
--4.462173421e-04f, -4.475456902e-04f, -4.488731850e-04f, -4.501998243e-04f, -4.515256058e-04f, -4.528505274e-04f, -4.541745868e-04f, -4.554977817e-04f, -4.568201100e-04f, -4.581415693e-04f,
--4.594621574e-04f, -4.607818722e-04f, -4.621007114e-04f, -4.634186727e-04f, -4.647357540e-04f, -4.660519530e-04f, -4.673672675e-04f, -4.686816952e-04f, -4.699952340e-04f, -4.713078816e-04f,
--4.726196358e-04f, -4.739304945e-04f, -4.752404553e-04f, -4.765495161e-04f, -4.778576747e-04f, -4.791649288e-04f, -4.804712763e-04f, -4.817767149e-04f, -4.830812425e-04f, -4.843848569e-04f,
--4.856875558e-04f, -4.869893370e-04f, -4.882901984e-04f, -4.895901378e-04f, -4.908891529e-04f, -4.921872417e-04f, -4.934844018e-04f, -4.947806311e-04f, -4.960759275e-04f, -4.973702887e-04f,
--4.986637125e-04f, -4.999561968e-04f, -5.012477395e-04f, -5.025383382e-04f, -5.038279909e-04f, -5.051166954e-04f, -5.064044495e-04f, -5.076912510e-04f, -5.089770978e-04f, -5.102619877e-04f,
--5.115459185e-04f, -5.128288881e-04f, -5.141108944e-04f, -5.153919351e-04f, -5.166720081e-04f, -5.179511112e-04f, -5.192292423e-04f, -5.205063993e-04f, -5.217825800e-04f, -5.230577822e-04f,
--5.243320038e-04f, -5.256052427e-04f, -5.268774967e-04f, -5.281487636e-04f, -5.294190414e-04f, -5.306883280e-04f, -5.319566210e-04f, -5.332239185e-04f, -5.344902183e-04f, -5.357555183e-04f,
--5.370198163e-04f, -5.382831102e-04f, -5.395453980e-04f, -5.408066774e-04f, -5.420669463e-04f, -5.433262027e-04f, -5.445844444e-04f, -5.458416693e-04f, -5.470978753e-04f, -5.483530603e-04f,
--5.496072222e-04f, -5.508603588e-04f, -5.521124681e-04f, -5.533635479e-04f, -5.546135962e-04f, -5.558626109e-04f, -5.571105898e-04f, -5.583575309e-04f, -5.596034321e-04f, -5.608482912e-04f,
--5.620921063e-04f, -5.633348751e-04f, -5.645765957e-04f, -5.658172659e-04f, -5.670568836e-04f, -5.682954468e-04f, -5.695329535e-04f, -5.707694014e-04f, -5.720047886e-04f, -5.732391130e-04f,
--5.744723724e-04f, -5.757045649e-04f, -5.769356884e-04f, -5.781657408e-04f, -5.793947200e-04f, -5.806226240e-04f, -5.818494507e-04f, -5.830751981e-04f, -5.842998641e-04f, -5.855234467e-04f,
--5.867459438e-04f, -5.879673534e-04f, -5.891876733e-04f, -5.904069017e-04f, -5.916250363e-04f, -5.928420753e-04f, -5.940580165e-04f, -5.952728580e-04f, -5.964865976e-04f, -5.976992334e-04f,
--5.989107633e-04f, -6.001211852e-04f, -6.013304973e-04f, -6.025386974e-04f, -6.037457835e-04f, -6.049517536e-04f, -6.061566057e-04f, -6.073603378e-04f, -6.085629478e-04f, -6.097644338e-04f,
--6.109647937e-04f, -6.121640255e-04f, -6.133621272e-04f, -6.145590969e-04f, -6.157549325e-04f, -6.169496320e-04f, -6.181431934e-04f, -6.193356147e-04f, -6.205268940e-04f, -6.217170292e-04f,
--6.229060183e-04f, -6.240938594e-04f, -6.252805505e-04f, -6.264660896e-04f, -6.276504748e-04f, -6.288337039e-04f, -6.300157751e-04f, -6.311966864e-04f, -6.323764358e-04f, -6.335550214e-04f,
--6.347324412e-04f, -6.359086931e-04f, -6.370837753e-04f, -6.382576859e-04f, -6.394304227e-04f, -6.406019839e-04f, -6.417723675e-04f, -6.429415716e-04f, -6.441095942e-04f, -6.452764334e-04f,
--6.464420872e-04f, -6.476065537e-04f, -6.487698309e-04f, -6.499319169e-04f, -6.510928098e-04f, -6.522525076e-04f, -6.534110084e-04f, -6.545683102e-04f, -6.557244112e-04f, -6.568793094e-04f,
--6.580330029e-04f, -6.591854897e-04f, -6.603367679e-04f, -6.614868357e-04f, -6.626356911e-04f, -6.637833322e-04f, -6.649297570e-04f, -6.660749638e-04f, -6.672189505e-04f, -6.683617152e-04f,
--6.695032562e-04f, -6.706435713e-04f, -6.717826589e-04f, -6.729205169e-04f, -6.740571435e-04f, -6.751925367e-04f, -6.763266948e-04f, -6.774596157e-04f, -6.785912977e-04f, -6.797217388e-04f,
--6.808509372e-04f, -6.819788910e-04f, -6.831055983e-04f, -6.842310572e-04f, -6.853552658e-04f, -6.864782224e-04f, -6.875999250e-04f, -6.887203718e-04f, -6.898395608e-04f, -6.909574904e-04f,
--6.920741585e-04f, -6.931895633e-04f, -6.943037030e-04f, -6.954165758e-04f, -6.965281797e-04f, -6.976385130e-04f, -6.987475737e-04f, -6.998553602e-04f, -7.009618704e-04f, -7.020671026e-04f,
--7.031710550e-04f, -7.042737256e-04f, -7.053751128e-04f, -7.064752146e-04f, -7.075740293e-04f, -7.086715549e-04f, -7.097677898e-04f, -7.108627320e-04f, -7.119563798e-04f, -7.130487313e-04f,
--7.141397848e-04f, -7.152295383e-04f, -7.163179903e-04f, -7.174051387e-04f, -7.184909818e-04f, -7.195755179e-04f, -7.206587451e-04f, -7.217406616e-04f, -7.228212656e-04f, -7.239005554e-04f,
--7.249785291e-04f, -7.260551850e-04f, -7.271305214e-04f, -7.282045363e-04f, -7.292772280e-04f, -7.303485949e-04f, -7.314186350e-04f, -7.324873466e-04f, -7.335547280e-04f, -7.346207773e-04f,
--7.356854929e-04f, -7.367488730e-04f, -7.378109157e-04f, -7.388716194e-04f, -7.399309823e-04f, -7.409890026e-04f, -7.420456786e-04f, -7.431010086e-04f, -7.441549908e-04f, -7.452076235e-04f,
--7.462589048e-04f, -7.473088332e-04f, -7.483574068e-04f, -7.494046240e-04f, -7.504504829e-04f, -7.514949819e-04f, -7.525381193e-04f, -7.535798932e-04f, -7.546203021e-04f, -7.556593442e-04f,
--7.566970177e-04f, -7.577333210e-04f, -7.587682524e-04f, -7.598018101e-04f, -7.608339924e-04f, -7.618647977e-04f, -7.628942243e-04f, -7.639222703e-04f, -7.649489343e-04f, -7.659742143e-04f,
--7.669981089e-04f, -7.680206162e-04f, -7.690417347e-04f, -7.700614625e-04f, -7.710797981e-04f, -7.720967397e-04f, -7.731122858e-04f, -7.741264345e-04f, -7.751391843e-04f, -7.761505334e-04f,
--7.771604803e-04f, -7.781690233e-04f, -7.791761606e-04f, -7.801818906e-04f, -7.811862118e-04f, -7.821891224e-04f, -7.831906207e-04f, -7.841907052e-04f, -7.851893742e-04f, -7.861866260e-04f,
--7.871824591e-04f, -7.881768717e-04f, -7.891698622e-04f, -7.901614291e-04f, -7.911515706e-04f, -7.921402852e-04f, -7.931275713e-04f, -7.941134271e-04f, -7.950978511e-04f, -7.960808418e-04f,
--7.970623973e-04f, -7.980425163e-04f, -7.990211969e-04f, -7.999984377e-04f, -8.009742371e-04f, -8.019485934e-04f, -8.029215050e-04f, -8.038929704e-04f, -8.048629879e-04f, -8.058315560e-04f,
--8.067986730e-04f, -8.077643374e-04f, -8.087285477e-04f, -8.096913021e-04f, -8.106525993e-04f, -8.116124375e-04f, -8.125708152e-04f, -8.135277308e-04f, -8.144831828e-04f, -8.154371696e-04f,
--8.163896897e-04f, -8.173407414e-04f, -8.182903233e-04f, -8.192384337e-04f, -8.201850712e-04f, -8.211302341e-04f, -8.220739210e-04f, -8.230161303e-04f, -8.239568604e-04f, -8.248961098e-04f,
--8.258338770e-04f, -8.267701605e-04f, -8.277049587e-04f, -8.286382700e-04f, -8.295700930e-04f, -8.305004262e-04f, -8.314292680e-04f, -8.323566169e-04f, -8.332824714e-04f, -8.342068300e-04f,
--8.351296911e-04f, -8.360510534e-04f, -8.369709152e-04f, -8.378892750e-04f, -8.388061314e-04f, -8.397214830e-04f, -8.406353281e-04f, -8.415476652e-04f, -8.424584930e-04f, -8.433678100e-04f,
--8.442756145e-04f, -8.451819053e-04f, -8.460866807e-04f, -8.469899393e-04f, -8.478916797e-04f, -8.487919004e-04f, -8.496905998e-04f, -8.505877766e-04f, -8.514834294e-04f, -8.523775565e-04f,
--8.532701566e-04f, -8.541612283e-04f, -8.550507700e-04f, -8.559387804e-04f, -8.568252580e-04f, -8.577102013e-04f, -8.585936089e-04f, -8.594754795e-04f, -8.603558114e-04f, -8.612346034e-04f,
--8.621118540e-04f, -8.629875617e-04f, -8.638617252e-04f, -8.647343430e-04f, -8.656054137e-04f, -8.664749359e-04f, -8.673429082e-04f, -8.682093292e-04f, -8.690741975e-04f, -8.699375116e-04f,
--8.707992702e-04f, -8.716594719e-04f, -8.725181153e-04f, -8.733751990e-04f, -8.742307216e-04f, -8.750846817e-04f, -8.759370779e-04f, -8.767879089e-04f, -8.776371733e-04f, -8.784848697e-04f,
--8.793309968e-04f, -8.801755531e-04f, -8.810185373e-04f, -8.818599481e-04f, -8.826997840e-04f, -8.835380438e-04f, -8.843747260e-04f, -8.852098294e-04f, -8.860433525e-04f, -8.868752940e-04f,
--8.877056527e-04f, -8.885344270e-04f, -8.893616158e-04f, -8.901872176e-04f, -8.910112312e-04f, -8.918336552e-04f, -8.926544883e-04f, -8.934737291e-04f, -8.942913764e-04f, -8.951074287e-04f,
--8.959218849e-04f, -8.967347436e-04f, -8.975460035e-04f, -8.983556632e-04f, -8.991637215e-04f, -8.999701771e-04f, -9.007750287e-04f, -9.015782749e-04f, -9.023799145e-04f, -9.031799463e-04f,
--9.039783688e-04f, -9.047751809e-04f, -9.055703812e-04f, -9.063639685e-04f, -9.071559414e-04f, -9.079462989e-04f, -9.087350394e-04f, -9.095221619e-04f, -9.103076649e-04f, -9.110915474e-04f,
--9.118738079e-04f, -9.126544453e-04f, -9.134334583e-04f, -9.142108457e-04f, -9.149866061e-04f, -9.157607384e-04f, -9.165332414e-04f, -9.173041137e-04f, -9.180733541e-04f, -9.188409615e-04f,
--9.196069346e-04f, -9.203712721e-04f, -9.211339729e-04f, -9.218950357e-04f, -9.226544593e-04f, -9.234122424e-04f, -9.241683840e-04f, -9.249228827e-04f, -9.256757374e-04f, -9.264269468e-04f,
--9.271765098e-04f, -9.279244252e-04f, -9.286706917e-04f, -9.294153083e-04f, -9.301582736e-04f, -9.308995865e-04f, -9.316392458e-04f, -9.323772504e-04f, -9.331135990e-04f, -9.338482906e-04f,
--9.345813238e-04f, -9.353126976e-04f, -9.360424108e-04f, -9.367704623e-04f, -9.374968508e-04f, -9.382215752e-04f, -9.389446344e-04f, -9.396660272e-04f, -9.403857524e-04f, -9.411038090e-04f,
--9.418201958e-04f, -9.425349116e-04f, -9.432479553e-04f, -9.439593258e-04f, -9.446690219e-04f, -9.453770426e-04f, -9.460833867e-04f, -9.467880530e-04f, -9.474910405e-04f, -9.481923480e-04f,
--9.488919745e-04f, -9.495899188e-04f, -9.502861798e-04f, -9.509807564e-04f, -9.516736476e-04f, -9.523648521e-04f, -9.530543690e-04f, -9.537421972e-04f, -9.544283355e-04f, -9.551127828e-04f,
--9.557955382e-04f, -9.564766004e-04f, -9.571559685e-04f, -9.578336413e-04f, -9.585096178e-04f, -9.591838969e-04f, -9.598564776e-04f, -9.605273588e-04f, -9.611965395e-04f, -9.618640185e-04f,
--9.625297948e-04f, -9.631938675e-04f, -9.638562353e-04f, -9.645168974e-04f, -9.651758526e-04f, -9.658331000e-04f, -9.664886384e-04f, -9.671424669e-04f, -9.677945844e-04f, -9.684449899e-04f,
--9.690936825e-04f, -9.697406609e-04f, -9.703859243e-04f, -9.710294717e-04f, -9.716713020e-04f, -9.723114142e-04f, -9.729498073e-04f, -9.735864804e-04f, -9.742214323e-04f, -9.748546622e-04f,
--9.754861691e-04f, -9.761159518e-04f, -9.767440096e-04f, -9.773703413e-04f, -9.779949460e-04f, -9.786178227e-04f, -9.792389705e-04f, -9.798583884e-04f, -9.804760754e-04f, -9.810920306e-04f,
--9.817062529e-04f, -9.823187415e-04f, -9.829294953e-04f, -9.835385135e-04f, -9.841457951e-04f, -9.847513391e-04f, -9.853551446e-04f, -9.859572106e-04f, -9.865575363e-04f, -9.871561206e-04f,
--9.877529627e-04f, -9.883480616e-04f, -9.889414165e-04f, -9.895330263e-04f, -9.901228902e-04f, -9.907110072e-04f, -9.912973764e-04f, -9.918819970e-04f, -9.924648680e-04f, -9.930459886e-04f,
--9.936253577e-04f, -9.942029746e-04f, -9.947788383e-04f, -9.953529480e-04f, -9.959253027e-04f, -9.964959016e-04f, -9.970647437e-04f, -9.976318283e-04f, -9.981971544e-04f, -9.987607212e-04f,
--9.993225278e-04f, -9.998825733e-04f, -1.000440857e-03f, -1.000997378e-03f, -1.001552135e-03f, -1.002105128e-03f, -1.002656355e-03f, -1.003205816e-03f, -1.003753510e-03f, -1.004299436e-03f,
--1.004843594e-03f, -1.005385982e-03f, -1.005926599e-03f, -1.006465446e-03f, -1.007002520e-03f, -1.007537821e-03f, -1.008071349e-03f, -1.008603103e-03f, -1.009133081e-03f, -1.009661282e-03f,
--1.010187707e-03f, -1.010712355e-03f, -1.011235223e-03f, -1.011756313e-03f, -1.012275622e-03f, -1.012793150e-03f, -1.013308897e-03f, -1.013822861e-03f, -1.014335042e-03f, -1.014845439e-03f,
--1.015354051e-03f, -1.015860878e-03f, -1.016365918e-03f, -1.016869171e-03f, -1.017370636e-03f, -1.017870313e-03f, -1.018368200e-03f, -1.018864297e-03f, -1.019358603e-03f, -1.019851118e-03f,
--1.020341840e-03f, -1.020830769e-03f, -1.021317904e-03f, -1.021803245e-03f, -1.022286790e-03f, -1.022768539e-03f, -1.023248491e-03f, -1.023726646e-03f, -1.024203003e-03f, -1.024677560e-03f,
--1.025150318e-03f, -1.025621276e-03f, -1.026090433e-03f, -1.026557788e-03f, -1.027023340e-03f, -1.027487089e-03f, -1.027949035e-03f, -1.028409175e-03f, -1.028867511e-03f, -1.029324041e-03f,
--1.029778764e-03f, -1.030231679e-03f, -1.030682787e-03f, -1.031132086e-03f, -1.031579576e-03f, -1.032025256e-03f, -1.032469126e-03f, -1.032911184e-03f, -1.033351430e-03f, -1.033789864e-03f,
--1.034226484e-03f, -1.034661290e-03f, -1.035094282e-03f, -1.035525459e-03f, -1.035954820e-03f, -1.036382365e-03f, -1.036808092e-03f, -1.037232002e-03f, -1.037654094e-03f, -1.038074366e-03f,
--1.038492819e-03f, -1.038909452e-03f, -1.039324264e-03f, -1.039737255e-03f, -1.040148424e-03f, -1.040557770e-03f, -1.040965293e-03f, -1.041370993e-03f, -1.041774868e-03f, -1.042176917e-03f,
--1.042577142e-03f, -1.042975540e-03f, -1.043372112e-03f, -1.043766856e-03f, -1.044159773e-03f, -1.044550861e-03f, -1.044940120e-03f, -1.045327549e-03f, -1.045713149e-03f, -1.046096917e-03f,
--1.046478855e-03f, -1.046858961e-03f, -1.047237234e-03f, -1.047613675e-03f, -1.047988282e-03f, -1.048361055e-03f, -1.048731994e-03f, -1.049101098e-03f, -1.049468366e-03f, -1.049833799e-03f,
--1.050197394e-03f, -1.050559153e-03f, -1.050919074e-03f, -1.051277157e-03f, -1.051633401e-03f, -1.051987806e-03f, -1.052340371e-03f, -1.052691097e-03f, -1.053039982e-03f, -1.053387025e-03f,
--1.053732227e-03f, -1.054075587e-03f, -1.054417104e-03f, -1.054756779e-03f, -1.055094609e-03f, -1.055430596e-03f, -1.055764738e-03f, -1.056097036e-03f, -1.056427488e-03f, -1.056756094e-03f,
--1.057082854e-03f, -1.057407766e-03f, -1.057730832e-03f, -1.058052050e-03f, -1.058371420e-03f, -1.058688942e-03f, -1.059004614e-03f, -1.059318437e-03f, -1.059630410e-03f, -1.059940533e-03f,
--1.060248805e-03f, -1.060555226e-03f, -1.060859795e-03f, -1.061162513e-03f, -1.061463378e-03f, -1.061762390e-03f, -1.062059549e-03f, -1.062354855e-03f, -1.062648306e-03f, -1.062939903e-03f,
--1.063229646e-03f, -1.063517533e-03f, -1.063803564e-03f, -1.064087740e-03f, -1.064370059e-03f, -1.064650522e-03f, -1.064929128e-03f, -1.065205876e-03f, -1.065480766e-03f, -1.065753798e-03f,
--1.066024972e-03f, -1.066294286e-03f, -1.066561742e-03f, -1.066827338e-03f, -1.067091074e-03f, -1.067352949e-03f, -1.067612964e-03f, -1.067871119e-03f, -1.068127411e-03f, -1.068381842e-03f,
--1.068634412e-03f, -1.068885119e-03f, -1.069133963e-03f, -1.069380944e-03f, -1.069626063e-03f, -1.069869317e-03f, -1.070110708e-03f, -1.070350235e-03f, -1.070587897e-03f, -1.070823694e-03f,
--1.071057626e-03f, -1.071289693e-03f, -1.071519895e-03f, -1.071748230e-03f, -1.071974700e-03f, -1.072199302e-03f, -1.072422038e-03f, -1.072642907e-03f, -1.072861909e-03f, -1.073079043e-03f,
--1.073294309e-03f, -1.073507708e-03f, -1.073719238e-03f, -1.073928899e-03f, -1.074136691e-03f, -1.074342615e-03f, -1.074546668e-03f, -1.074748853e-03f, -1.074949167e-03f, -1.075147612e-03f,
--1.075344186e-03f, -1.075538890e-03f, -1.075731723e-03f, -1.075922685e-03f, -1.076111776e-03f, -1.076298996e-03f, -1.076484344e-03f, -1.076667820e-03f, -1.076849424e-03f, -1.077029156e-03f,
--1.077207015e-03f, -1.077383002e-03f, -1.077557116e-03f, -1.077729357e-03f, -1.077899725e-03f, -1.078068220e-03f, -1.078234841e-03f, -1.078399588e-03f, -1.078562462e-03f, -1.078723462e-03f,
--1.078882587e-03f, -1.079039838e-03f, -1.079195214e-03f, -1.079348716e-03f, -1.079500343e-03f, -1.079650095e-03f, -1.079797971e-03f, -1.079943973e-03f, -1.080088099e-03f, -1.080230349e-03f,
--1.080370724e-03f, -1.080509223e-03f, -1.080645846e-03f, -1.080780593e-03f, -1.080913464e-03f, -1.081044459e-03f, -1.081173577e-03f, -1.081300819e-03f, -1.081426184e-03f, -1.081549672e-03f,
--1.081671283e-03f, -1.081791018e-03f, -1.081908875e-03f, -1.082024856e-03f, -1.082138959e-03f, -1.082251185e-03f, -1.082361533e-03f, -1.082470004e-03f, -1.082576598e-03f, -1.082681314e-03f,
--1.082784152e-03f, -1.082885113e-03f, -1.082984195e-03f, -1.083081400e-03f, -1.083176727e-03f, -1.083270177e-03f, -1.083361748e-03f, -1.083451441e-03f, -1.083539256e-03f, -1.083625193e-03f,
--1.083709251e-03f, -1.083791432e-03f, -1.083871734e-03f, -1.083950158e-03f, -1.084026704e-03f, -1.084101371e-03f, -1.084174161e-03f, -1.084245071e-03f, -1.084314104e-03f, -1.084381258e-03f,
--1.084446534e-03f, -1.084509932e-03f, -1.084571451e-03f, -1.084631092e-03f, -1.084688854e-03f, -1.084744739e-03f, -1.084798744e-03f, -1.084850872e-03f, -1.084901122e-03f, -1.084949493e-03f,
--1.084995986e-03f, -1.085040601e-03f, -1.085083338e-03f, -1.085124197e-03f, -1.085163177e-03f, -1.085200280e-03f, -1.085235505e-03f, -1.085268852e-03f, -1.085300321e-03f, -1.085329912e-03f,
--1.085357625e-03f, -1.085383461e-03f, -1.085407420e-03f, -1.085429501e-03f, -1.085449704e-03f, -1.085468030e-03f, -1.085484479e-03f, -1.085499050e-03f, -1.085511745e-03f, -1.085522562e-03f,
--1.085531503e-03f, -1.085538567e-03f, -1.085543754e-03f, -1.085547064e-03f, -1.085548498e-03f, -1.085548056e-03f, -1.085545737e-03f, -1.085541542e-03f, -1.085535471e-03f, -1.085527524e-03f,
--1.085517702e-03f, -1.085506003e-03f, -1.085492429e-03f, -1.085476980e-03f, -1.085459656e-03f, -1.085440456e-03f, -1.085419381e-03f, -1.085396432e-03f, -1.085371608e-03f, -1.085344909e-03f,
--1.085316337e-03f, -1.085285890e-03f, -1.085253568e-03f, -1.085219373e-03f, -1.085183305e-03f, -1.085145363e-03f, -1.085105547e-03f, -1.085063859e-03f, -1.085020297e-03f, -1.084974863e-03f,
--1.084927556e-03f, -1.084878377e-03f, -1.084827325e-03f, -1.084774402e-03f, -1.084719607e-03f, -1.084662940e-03f, -1.084604402e-03f, -1.084543992e-03f, -1.084481712e-03f, -1.084417561e-03f,
--1.084351540e-03f, -1.084283648e-03f, -1.084213886e-03f, -1.084142255e-03f, -1.084068754e-03f, -1.083993383e-03f, -1.083916144e-03f, -1.083837035e-03f, -1.083756059e-03f, -1.083673213e-03f,
--1.083588500e-03f, -1.083501919e-03f, -1.083413470e-03f, -1.083323154e-03f, -1.083230971e-03f, -1.083136922e-03f, -1.083041005e-03f, -1.082943223e-03f, -1.082843575e-03f, -1.082742061e-03f,
--1.082638682e-03f, -1.082533437e-03f, -1.082426328e-03f, -1.082317355e-03f, -1.082206517e-03f, -1.082093816e-03f, -1.081979251e-03f, -1.081862822e-03f, -1.081744531e-03f, -1.081624377e-03f,
--1.081502361e-03f, -1.081378483e-03f, -1.081252744e-03f, -1.081125143e-03f, -1.080995681e-03f, -1.080864358e-03f, -1.080731175e-03f, -1.080596132e-03f, -1.080459230e-03f, -1.080320468e-03f,
--1.080179847e-03f, -1.080037368e-03f, -1.079893031e-03f, -1.079746836e-03f, -1.079598783e-03f, -1.079448873e-03f, -1.079297107e-03f, -1.079143484e-03f, -1.078988005e-03f, -1.078830671e-03f,
--1.078671481e-03f, -1.078510437e-03f, -1.078347538e-03f, -1.078182785e-03f, -1.078016178e-03f, -1.077847718e-03f, -1.077677406e-03f, -1.077505241e-03f, -1.077331224e-03f, -1.077155355e-03f,
--1.076977635e-03f, -1.076798064e-03f, -1.076616643e-03f, -1.076433372e-03f, -1.076248252e-03f, -1.076061282e-03f, -1.075872464e-03f, -1.075681797e-03f, -1.075489283e-03f, -1.075294922e-03f,
--1.075098713e-03f, -1.074900658e-03f, -1.074700758e-03f, -1.074499011e-03f, -1.074295420e-03f, -1.074089984e-03f, -1.073882704e-03f, -1.073673581e-03f, -1.073462614e-03f, -1.073249804e-03f,
--1.073035152e-03f, -1.072818659e-03f, -1.072600324e-03f, -1.072380149e-03f, -1.072158133e-03f, -1.071934277e-03f, -1.071708583e-03f, -1.071481049e-03f, -1.071251677e-03f, -1.071020467e-03f,
--1.070787420e-03f, -1.070552537e-03f, -1.070315817e-03f, -1.070077261e-03f, -1.069836871e-03f, -1.069594645e-03f, -1.069350585e-03f, -1.069104692e-03f, -1.068856966e-03f, -1.068607407e-03f,
--1.068356017e-03f, -1.068102794e-03f, -1.067847741e-03f, -1.067590858e-03f, -1.067332145e-03f, -1.067071602e-03f, -1.066809231e-03f, -1.066545032e-03f, -1.066279006e-03f, -1.066011152e-03f,
--1.065741472e-03f, -1.065469966e-03f, -1.065196635e-03f, -1.064921479e-03f, -1.064644500e-03f, -1.064365696e-03f, -1.064085070e-03f, -1.063802622e-03f, -1.063518352e-03f, -1.063232260e-03f,
--1.062944349e-03f, -1.062654617e-03f, -1.062363066e-03f, -1.062069697e-03f, -1.061774509e-03f, -1.061477504e-03f, -1.061178682e-03f, -1.060878045e-03f, -1.060575591e-03f, -1.060271323e-03f,
--1.059965240e-03f, -1.059657344e-03f, -1.059347635e-03f, -1.059036113e-03f, -1.058722780e-03f, -1.058407635e-03f, -1.058090681e-03f, -1.057771916e-03f, -1.057451343e-03f, -1.057128961e-03f,
--1.056804771e-03f, -1.056478774e-03f, -1.056150971e-03f, -1.055821362e-03f, -1.055489948e-03f, -1.055156730e-03f, -1.054821708e-03f, -1.054484883e-03f, -1.054146256e-03f, -1.053805827e-03f,
--1.053463597e-03f, -1.053119567e-03f, -1.052773737e-03f, -1.052426109e-03f, -1.052076683e-03f, -1.051725459e-03f, -1.051372438e-03f, -1.051017622e-03f, -1.050661010e-03f, -1.050302604e-03f,
--1.049942404e-03f, -1.049580411e-03f, -1.049216626e-03f, -1.048851049e-03f, -1.048483681e-03f, -1.048114523e-03f, -1.047743576e-03f, -1.047370841e-03f, -1.046996317e-03f, -1.046620007e-03f,
--1.046241910e-03f, -1.045862027e-03f, -1.045480360e-03f, -1.045096908e-03f, -1.044711674e-03f, -1.044324657e-03f, -1.043935858e-03f, -1.043545278e-03f, -1.043152918e-03f, -1.042758779e-03f,
--1.042362861e-03f, -1.041965166e-03f, -1.041565693e-03f, -1.041164444e-03f, -1.040761420e-03f, -1.040356621e-03f, -1.039950049e-03f, -1.039541703e-03f, -1.039131585e-03f, -1.038719696e-03f,
--1.038306037e-03f, -1.037890608e-03f, -1.037473409e-03f, -1.037054443e-03f, -1.036633710e-03f, -1.036211210e-03f, -1.035786945e-03f, -1.035360915e-03f, -1.034933121e-03f, -1.034503564e-03f,
--1.034072245e-03f, -1.033639164e-03f, -1.033204324e-03f, -1.032767723e-03f, -1.032329364e-03f, -1.031889247e-03f, -1.031447373e-03f, -1.031003742e-03f, -1.030558357e-03f, -1.030111217e-03f,
--1.029662324e-03f, -1.029211678e-03f, -1.028759280e-03f, -1.028305131e-03f, -1.027849233e-03f, -1.027391585e-03f, -1.026932189e-03f, -1.026471046e-03f, -1.026008156e-03f, -1.025543521e-03f,
--1.025077142e-03f, -1.024609018e-03f, -1.024139153e-03f, -1.023667545e-03f, -1.023194196e-03f, -1.022719107e-03f, -1.022242280e-03f, -1.021763714e-03f, -1.021283411e-03f, -1.020801372e-03f,
--1.020317597e-03f, -1.019832088e-03f, -1.019344846e-03f, -1.018855871e-03f, -1.018365164e-03f, -1.017872727e-03f, -1.017378561e-03f, -1.016882666e-03f, -1.016385043e-03f, -1.015885693e-03f,
--1.015384617e-03f, -1.014881817e-03f, -1.014377293e-03f, -1.013871046e-03f, -1.013363077e-03f, -1.012853387e-03f, -1.012341978e-03f, -1.011828849e-03f, -1.011314003e-03f, -1.010797439e-03f,
--1.010279160e-03f, -1.009759166e-03f, -1.009237457e-03f, -1.008714036e-03f, -1.008188903e-03f, -1.007662059e-03f, -1.007133505e-03f, -1.006603242e-03f, -1.006071272e-03f, -1.005537594e-03f,
--1.005002211e-03f, -1.004465123e-03f, -1.003926331e-03f, -1.003385837e-03f, -1.002843640e-03f, -1.002299743e-03f, -1.001754147e-03f, -1.001206852e-03f, -1.000657859e-03f, -1.000107170e-03f,
--9.995547861e-04f, -9.990007074e-04f, -9.984449354e-04f, -9.978874712e-04f, -9.973283158e-04f, -9.967674703e-04f, -9.962049359e-04f, -9.956407135e-04f, -9.950748042e-04f, -9.945072092e-04f,
--9.939379294e-04f, -9.933669661e-04f, -9.927943202e-04f, -9.922199929e-04f, -9.916439853e-04f, -9.910662984e-04f, -9.904869334e-04f, -9.899058913e-04f, -9.893231733e-04f, -9.887387805e-04f,
--9.881527140e-04f, -9.875649749e-04f, -9.869755643e-04f, -9.863844833e-04f, -9.857917331e-04f, -9.851973148e-04f, -9.846012295e-04f, -9.840034783e-04f, -9.834040625e-04f, -9.828029830e-04f,
--9.822002411e-04f, -9.815958379e-04f, -9.809897746e-04f, -9.803820522e-04f, -9.797726720e-04f, -9.791616351e-04f, -9.785489426e-04f, -9.779345958e-04f, -9.773185957e-04f, -9.767009436e-04f,
--9.760816405e-04f, -9.754606878e-04f, -9.748380865e-04f, -9.742138378e-04f, -9.735879429e-04f, -9.729604030e-04f, -9.723312193e-04f, -9.717003929e-04f, -9.710679251e-04f, -9.704338170e-04f,
--9.697980699e-04f, -9.691606848e-04f, -9.685216632e-04f, -9.678810060e-04f, -9.672387146e-04f, -9.665947901e-04f, -9.659492338e-04f, -9.653020469e-04f, -9.646532306e-04f, -9.640027861e-04f,
--9.633507146e-04f, -9.626970174e-04f, -9.620416957e-04f, -9.613847507e-04f, -9.607261837e-04f, -9.600659958e-04f, -9.594041884e-04f, -9.587407626e-04f, -9.580757198e-04f, -9.574090611e-04f,
--9.567407879e-04f, -9.560709013e-04f, -9.553994027e-04f, -9.547262932e-04f, -9.540515741e-04f, -9.533752468e-04f, -9.526973124e-04f, -9.520177723e-04f, -9.513366277e-04f, -9.506538799e-04f,
--9.499695301e-04f, -9.492835797e-04f, -9.485960299e-04f, -9.479068821e-04f, -9.472161374e-04f, -9.465237972e-04f, -9.458298628e-04f, -9.451343355e-04f, -9.444372165e-04f, -9.437385073e-04f,
--9.430382090e-04f, -9.423363230e-04f, -9.416328506e-04f, -9.409277931e-04f, -9.402211518e-04f, -9.395129281e-04f, -9.388031232e-04f, -9.380917386e-04f, -9.373787754e-04f, -9.366642351e-04f,
--9.359481189e-04f, -9.352304282e-04f, -9.345111644e-04f, -9.337903287e-04f, -9.330679226e-04f, -9.323439473e-04f, -9.316184043e-04f, -9.308912947e-04f, -9.301626201e-04f, -9.294323818e-04f,
--9.287005810e-04f, -9.279672193e-04f, -9.272322979e-04f, -9.264958182e-04f, -9.257577815e-04f, -9.250181893e-04f, -9.242770429e-04f, -9.235343437e-04f, -9.227900931e-04f, -9.220442924e-04f,
--9.212969430e-04f, -9.205480464e-04f, -9.197976038e-04f, -9.190456168e-04f, -9.182920866e-04f, -9.175370147e-04f, -9.167804025e-04f, -9.160222514e-04f, -9.152625628e-04f, -9.145013380e-04f,
--9.137385786e-04f, -9.129742859e-04f, -9.122084613e-04f, -9.114411062e-04f, -9.106722221e-04f, -9.099018104e-04f, -9.091298725e-04f, -9.083564098e-04f, -9.075814238e-04f, -9.068049158e-04f,
--9.060268874e-04f, -9.052473400e-04f, -9.044662750e-04f, -9.036836938e-04f, -9.028995979e-04f, -9.021139887e-04f, -9.013268678e-04f, -9.005382364e-04f, -8.997480962e-04f, -8.989564485e-04f,
--8.981632948e-04f, -8.973686366e-04f, -8.965724754e-04f, -8.957748125e-04f, -8.949756495e-04f, -8.941749879e-04f, -8.933728290e-04f, -8.925691745e-04f, -8.917640258e-04f, -8.909573843e-04f,
--8.901492515e-04f, -8.893396290e-04f, -8.885285182e-04f, -8.877159207e-04f, -8.869018378e-04f, -8.860862711e-04f, -8.852692222e-04f, -8.844506924e-04f, -8.836306834e-04f, -8.828091965e-04f,
--8.819862334e-04f, -8.811617956e-04f, -8.803358844e-04f, -8.795085016e-04f, -8.786796485e-04f, -8.778493268e-04f, -8.770175379e-04f, -8.761842833e-04f, -8.753495647e-04f, -8.745133835e-04f,
--8.736757412e-04f, -8.728366394e-04f, -8.719960796e-04f, -8.711540634e-04f, -8.703105924e-04f, -8.694656680e-04f, -8.686192918e-04f, -8.677714653e-04f, -8.669221902e-04f, -8.660714679e-04f,
--8.652193001e-04f, -8.643656883e-04f, -8.635106340e-04f, -8.626541388e-04f, -8.617962043e-04f, -8.609368321e-04f, -8.600760237e-04f, -8.592137807e-04f, -8.583501046e-04f, -8.574849972e-04f,
--8.566184598e-04f, -8.557504942e-04f, -8.548811019e-04f, -8.540102845e-04f, -8.531380436e-04f, -8.522643808e-04f, -8.513892977e-04f, -8.505127958e-04f, -8.496348769e-04f, -8.487555424e-04f,
--8.478747940e-04f, -8.469926333e-04f, -8.461090619e-04f, -8.452240814e-04f, -8.443376935e-04f, -8.434498997e-04f, -8.425607017e-04f, -8.416701011e-04f, -8.407780995e-04f, -8.398846986e-04f,
--8.389898999e-04f, -8.380937051e-04f, -8.371961159e-04f, -8.362971339e-04f, -8.353967607e-04f, -8.344949979e-04f, -8.335918472e-04f, -8.326873103e-04f, -8.317813888e-04f, -8.308740843e-04f,
--8.299653985e-04f, -8.290553330e-04f, -8.281438895e-04f, -8.272310698e-04f, -8.263168753e-04f, -8.254013078e-04f, -8.244843690e-04f, -8.235660605e-04f, -8.226463840e-04f, -8.217253411e-04f,
--8.208029336e-04f, -8.198791631e-04f, -8.189540313e-04f, -8.180275399e-04f, -8.170996905e-04f, -8.161704849e-04f, -8.152399247e-04f, -8.143080116e-04f, -8.133747474e-04f, -8.124401337e-04f,
--8.115041721e-04f, -8.105668645e-04f, -8.096282125e-04f, -8.086882178e-04f, -8.077468822e-04f, -8.068042072e-04f, -8.058601948e-04f, -8.049148464e-04f, -8.039681639e-04f, -8.030201491e-04f,
--8.020708035e-04f, -8.011201289e-04f, -8.001681271e-04f, -7.992147998e-04f, -7.982601487e-04f, -7.973041755e-04f, -7.963468819e-04f, -7.953882698e-04f, -7.944283408e-04f, -7.934670967e-04f,
--7.925045392e-04f, -7.915406701e-04f, -7.905754911e-04f, -7.896090039e-04f, -7.886412104e-04f, -7.876721122e-04f, -7.867017111e-04f, -7.857300088e-04f, -7.847570072e-04f, -7.837827080e-04f,
--7.828071130e-04f, -7.818302238e-04f, -7.808520424e-04f, -7.798725703e-04f, -7.788918096e-04f, -7.779097618e-04f, -7.769264287e-04f, -7.759418122e-04f, -7.749559141e-04f, -7.739687360e-04f,
--7.729802799e-04f, -7.719905474e-04f, -7.709995404e-04f, -7.700072607e-04f, -7.690137100e-04f, -7.680188901e-04f, -7.670228029e-04f, -7.660254502e-04f, -7.650268336e-04f, -7.640269551e-04f,
--7.630258165e-04f, -7.620234195e-04f, -7.610197660e-04f, -7.600148577e-04f, -7.590086966e-04f, -7.580012843e-04f, -7.569926228e-04f, -7.559827138e-04f, -7.549715592e-04f, -7.539591607e-04f,
--7.529455203e-04f, -7.519306397e-04f, -7.509145207e-04f, -7.498971653e-04f, -7.488785752e-04f, -7.478587522e-04f, -7.468376983e-04f, -7.458154152e-04f, -7.447919047e-04f, -7.437671689e-04f,
--7.427412093e-04f, -7.417140281e-04f, -7.406856268e-04f, -7.396560075e-04f, -7.386251720e-04f, -7.375931221e-04f, -7.365598597e-04f, -7.355253867e-04f, -7.344897048e-04f, -7.334528161e-04f,
--7.324147222e-04f, -7.313754252e-04f, -7.303349269e-04f, -7.292932291e-04f, -7.282503337e-04f, -7.272062426e-04f, -7.261609577e-04f, -7.251144809e-04f, -7.240668139e-04f, -7.230179588e-04f,
--7.219679174e-04f, -7.209166916e-04f, -7.198642833e-04f, -7.188106943e-04f, -7.177559266e-04f, -7.166999821e-04f, -7.156428626e-04f, -7.145845700e-04f, -7.135251063e-04f, -7.124644734e-04f,
--7.114026731e-04f, -7.103397074e-04f, -7.092755782e-04f, -7.082102873e-04f, -7.071438367e-04f, -7.060762284e-04f, -7.050074641e-04f, -7.039375459e-04f, -7.028664757e-04f, -7.017942554e-04f,
--7.007208868e-04f, -6.996463720e-04f, -6.985707128e-04f, -6.974939113e-04f, -6.964159692e-04f, -6.953368886e-04f, -6.942566713e-04f, -6.931753194e-04f, -6.920928348e-04f, -6.910092193e-04f,
--6.899244750e-04f, -6.888386038e-04f, -6.877516076e-04f, -6.866634883e-04f, -6.855742480e-04f, -6.844838886e-04f, -6.833924119e-04f, -6.822998201e-04f, -6.812061150e-04f, -6.801112986e-04f,
--6.790153729e-04f, -6.779183397e-04f, -6.768202012e-04f, -6.757209592e-04f, -6.746206157e-04f, -6.735191727e-04f, -6.724166321e-04f, -6.713129960e-04f, -6.702082663e-04f, -6.691024449e-04f,
--6.679955339e-04f, -6.668875352e-04f, -6.657784508e-04f, -6.646682828e-04f, -6.635570330e-04f, -6.624447035e-04f, -6.613312962e-04f, -6.602168132e-04f, -6.591012564e-04f, -6.579846278e-04f,
--6.568669295e-04f, -6.557481634e-04f, -6.546283315e-04f, -6.535074358e-04f, -6.523854784e-04f, -6.512624612e-04f, -6.501383862e-04f, -6.490132554e-04f, -6.478870709e-04f, -6.467598347e-04f,
--6.456315487e-04f, -6.445022151e-04f, -6.433718357e-04f, -6.422404126e-04f, -6.411079479e-04f, -6.399744435e-04f, -6.388399015e-04f, -6.377043240e-04f, -6.365677128e-04f, -6.354300701e-04f,
--6.342913979e-04f, -6.331516982e-04f, -6.320109731e-04f, -6.308692245e-04f, -6.297264546e-04f, -6.285826653e-04f, -6.274378588e-04f, -6.262920369e-04f, -6.251452018e-04f, -6.239973556e-04f,
--6.228485002e-04f, -6.216986378e-04f, -6.205477703e-04f, -6.193958998e-04f, -6.182430284e-04f, -6.170891581e-04f, -6.159342910e-04f, -6.147784291e-04f, -6.136215745e-04f, -6.124637293e-04f,
--6.113048954e-04f, -6.101450751e-04f, -6.089842702e-04f, -6.078224830e-04f, -6.066597155e-04f, -6.054959697e-04f, -6.043312477e-04f, -6.031655516e-04f, -6.019988835e-04f, -6.008312454e-04f,
--5.996626394e-04f, -5.984930676e-04f, -5.973225321e-04f, -5.961510349e-04f, -5.949785782e-04f, -5.938051640e-04f, -5.926307944e-04f, -5.914554715e-04f, -5.902791974e-04f, -5.891019741e-04f,
--5.879238039e-04f, -5.867446887e-04f, -5.855646306e-04f, -5.843836319e-04f, -5.832016944e-04f, -5.820188205e-04f, -5.808350120e-04f, -5.796502713e-04f, -5.784646003e-04f, -5.772780012e-04f,
--5.760904760e-04f, -5.749020270e-04f, -5.737126561e-04f, -5.725223656e-04f, -5.713311575e-04f, -5.701390339e-04f, -5.689459969e-04f, -5.677520488e-04f, -5.665571915e-04f, -5.653614272e-04f,
--5.641647581e-04f, -5.629671862e-04f, -5.617687137e-04f, -5.605693428e-04f, -5.593690754e-04f, -5.581679138e-04f, -5.569658601e-04f, -5.557629165e-04f, -5.545590850e-04f, -5.533543678e-04f,
--5.521487670e-04f, -5.509422848e-04f, -5.497349233e-04f, -5.485266847e-04f, -5.473175710e-04f, -5.461075845e-04f, -5.448967272e-04f, -5.436850014e-04f, -5.424724092e-04f, -5.412589527e-04f,
--5.400446340e-04f, -5.388294554e-04f, -5.376134189e-04f, -5.363965268e-04f, -5.351787811e-04f, -5.339601841e-04f, -5.327407379e-04f, -5.315204447e-04f, -5.302993066e-04f, -5.290773257e-04f,
--5.278545043e-04f, -5.266308445e-04f, -5.254063485e-04f, -5.241810184e-04f, -5.229548565e-04f, -5.217278648e-04f, -5.205000456e-04f, -5.192714010e-04f, -5.180419332e-04f, -5.168116444e-04f,
--5.155805367e-04f, -5.143486124e-04f, -5.131158735e-04f, -5.118823224e-04f, -5.106479611e-04f, -5.094127919e-04f, -5.081768169e-04f, -5.069400384e-04f, -5.057024584e-04f, -5.044640793e-04f,
--5.032249031e-04f, -5.019849321e-04f, -5.007441685e-04f, -4.995026145e-04f, -4.982602722e-04f, -4.970171438e-04f, -4.957732317e-04f, -4.945285378e-04f, -4.932830645e-04f, -4.920368140e-04f,
--4.907897883e-04f, -4.895419899e-04f, -4.882934208e-04f, -4.870440832e-04f, -4.857939795e-04f, -4.845431117e-04f, -4.832914820e-04f, -4.820390928e-04f, -4.807859462e-04f, -4.795320443e-04f,
--4.782773896e-04f, -4.770219840e-04f, -4.757658299e-04f, -4.745089295e-04f, -4.732512850e-04f, -4.719928986e-04f, -4.707337725e-04f, -4.694739090e-04f, -4.682133102e-04f, -4.669519785e-04f,
--4.656899160e-04f, -4.644271249e-04f, -4.631636075e-04f, -4.618993660e-04f, -4.606344027e-04f, -4.593687197e-04f, -4.581023193e-04f, -4.568352038e-04f, -4.555673753e-04f, -4.542988361e-04f,
--4.530295884e-04f, -4.517596345e-04f, -4.504889767e-04f, -4.492176170e-04f, -4.479455579e-04f, -4.466728015e-04f, -4.453993501e-04f, -4.441252059e-04f, -4.428503711e-04f, -4.415748481e-04f,
--4.402986390e-04f, -4.390217461e-04f, -4.377441717e-04f, -4.364659180e-04f, -4.351869872e-04f, -4.339073816e-04f, -4.326271035e-04f, -4.313461551e-04f, -4.300645387e-04f, -4.287822565e-04f,
--4.274993107e-04f, -4.262157037e-04f, -4.249314377e-04f, -4.236465150e-04f, -4.223609378e-04f, -4.210747083e-04f, -4.197878289e-04f, -4.185003018e-04f, -4.172121293e-04f, -4.159233136e-04f,
--4.146338570e-04f, -4.133437618e-04f, -4.120530302e-04f, -4.107616645e-04f, -4.094696670e-04f, -4.081770400e-04f, -4.068837857e-04f, -4.055899064e-04f, -4.042954044e-04f, -4.030002819e-04f,
--4.017045413e-04f, -4.004081847e-04f, -3.991112145e-04f, -3.978136330e-04f, -3.965154425e-04f, -3.952166451e-04f, -3.939172433e-04f, -3.926172393e-04f, -3.913166353e-04f, -3.900154337e-04f,
--3.887136367e-04f, -3.874112467e-04f, -3.861082658e-04f, -3.848046965e-04f, -3.835005410e-04f, -3.821958015e-04f, -3.808904805e-04f, -3.795845801e-04f, -3.782781026e-04f, -3.769710504e-04f,
--3.756634258e-04f, -3.743552310e-04f, -3.730464683e-04f, -3.717371401e-04f, -3.704272486e-04f, -3.691167961e-04f, -3.678057850e-04f, -3.664942175e-04f, -3.651820959e-04f, -3.638694225e-04f,
--3.625561997e-04f, -3.612424298e-04f, -3.599281150e-04f, -3.586132576e-04f, -3.572978600e-04f, -3.559819244e-04f, -3.546654532e-04f, -3.533484487e-04f, -3.520309132e-04f, -3.507128490e-04f,
--3.493942584e-04f, -3.480751437e-04f, -3.467555072e-04f, -3.454353513e-04f, -3.441146782e-04f, -3.427934904e-04f, -3.414717900e-04f, -3.401495794e-04f, -3.388268609e-04f, -3.375036368e-04f,
--3.361799096e-04f, -3.348556813e-04f, -3.335309545e-04f, -3.322057314e-04f, -3.308800143e-04f, -3.295538056e-04f, -3.282271076e-04f, -3.268999226e-04f, -3.255722529e-04f, -3.242441008e-04f,
--3.229154687e-04f, -3.215863590e-04f, -3.202567738e-04f, -3.189267156e-04f, -3.175961867e-04f, -3.162651894e-04f, -3.149337261e-04f, -3.136017990e-04f, -3.122694105e-04f, -3.109365630e-04f,
--3.096032587e-04f, -3.082695000e-04f, -3.069352893e-04f, -3.056006288e-04f, -3.042655209e-04f, -3.029299679e-04f, -3.015939723e-04f, -3.002575362e-04f, -2.989206621e-04f, -2.975833522e-04f,
--2.962456090e-04f, -2.949074348e-04f, -2.935688318e-04f, -2.922298025e-04f, -2.908903491e-04f, -2.895504741e-04f, -2.882101797e-04f, -2.868694684e-04f, -2.855283424e-04f, -2.841868041e-04f,
--2.828448558e-04f, -2.815024999e-04f, -2.801597387e-04f, -2.788165746e-04f, -2.774730099e-04f, -2.761290470e-04f, -2.747846882e-04f, -2.734399358e-04f, -2.720947923e-04f, -2.707492599e-04f,
--2.694033410e-04f, -2.680570380e-04f, -2.667103532e-04f, -2.653632890e-04f, -2.640158477e-04f, -2.626680316e-04f, -2.613198431e-04f, -2.599712847e-04f, -2.586223585e-04f, -2.572730670e-04f,
--2.559234126e-04f, -2.545733975e-04f, -2.532230242e-04f, -2.518722950e-04f, -2.505212122e-04f, -2.491697783e-04f, -2.478179955e-04f, -2.464658662e-04f, -2.451133929e-04f, -2.437605778e-04f,
--2.424074232e-04f, -2.410539317e-04f, -2.397001055e-04f, -2.383459470e-04f, -2.369914585e-04f, -2.356366424e-04f, -2.342815011e-04f, -2.329260369e-04f, -2.315702523e-04f, -2.302141494e-04f,
--2.288577308e-04f, -2.275009988e-04f, -2.261439558e-04f, -2.247866041e-04f, -2.234289460e-04f, -2.220709840e-04f, -2.207127204e-04f, -2.193541576e-04f, -2.179952979e-04f, -2.166361438e-04f,
--2.152766975e-04f, -2.139169615e-04f, -2.125569381e-04f, -2.111966297e-04f, -2.098360386e-04f, -2.084751673e-04f, -2.071140180e-04f, -2.057525932e-04f, -2.043908953e-04f, -2.030289265e-04f,
--2.016666894e-04f, -2.003041861e-04f, -1.989414192e-04f, -1.975783910e-04f, -1.962151039e-04f, -1.948515601e-04f, -1.934877622e-04f, -1.921237125e-04f, -1.907594133e-04f, -1.893948671e-04f,
--1.880300761e-04f, -1.866650428e-04f, -1.852997696e-04f, -1.839342588e-04f, -1.825685128e-04f, -1.812025340e-04f, -1.798363247e-04f, -1.784698874e-04f, -1.771032243e-04f, -1.757363380e-04f,
--1.743692306e-04f, -1.730019048e-04f, -1.716343627e-04f, -1.702666068e-04f, -1.688986395e-04f, -1.675304631e-04f, -1.661620800e-04f, -1.647934927e-04f, -1.634247034e-04f, -1.620557146e-04f,
--1.606865286e-04f, -1.593171478e-04f, -1.579475746e-04f, -1.565778113e-04f, -1.552078605e-04f, -1.538377243e-04f, -1.524674053e-04f, -1.510969057e-04f, -1.497262281e-04f, -1.483553746e-04f,
--1.469843478e-04f, -1.456131500e-04f, -1.442417836e-04f, -1.428702510e-04f, -1.414985546e-04f, -1.401266966e-04f, -1.387546796e-04f, -1.373825059e-04f, -1.360101779e-04f, -1.346376979e-04f,
--1.332650684e-04f, -1.318922916e-04f, -1.305193701e-04f, -1.291463062e-04f, -1.277731023e-04f, -1.263997607e-04f, -1.250262839e-04f, -1.236526742e-04f, -1.222789339e-04f, -1.209050656e-04f,
--1.195310715e-04f, -1.181569541e-04f, -1.167827157e-04f, -1.154083588e-04f, -1.140338856e-04f, -1.126592986e-04f, -1.112846002e-04f, -1.099097927e-04f, -1.085348786e-04f, -1.071598602e-04f,
--1.057847399e-04f, -1.044095200e-04f, -1.030342031e-04f, -1.016587913e-04f, -1.002832873e-04f, -9.890769318e-05f, -9.753201152e-05f, -9.615624464e-05f, -9.478039492e-05f, -9.340446476e-05f,
--9.202845653e-05f, -9.065237263e-05f, -8.927621542e-05f, -8.789998730e-05f, -8.652369064e-05f, -8.514732784e-05f, -8.377090128e-05f, -8.239441333e-05f, -8.101786639e-05f, -7.964126283e-05f,
--7.826460504e-05f, -7.688789541e-05f, -7.551113630e-05f, -7.413433012e-05f, -7.275747924e-05f, -7.138058604e-05f, -7.000365291e-05f, -6.862668223e-05f, -6.724967638e-05f, -6.587263775e-05f,
--6.449556871e-05f, -6.311847166e-05f, -6.174134897e-05f, -6.036420302e-05f, -5.898703620e-05f, -5.760985089e-05f, -5.623264947e-05f, -5.485543432e-05f, -5.347820783e-05f, -5.210097237e-05f,
--5.072373033e-05f, -4.934648409e-05f, -4.796923604e-05f, -4.659198854e-05f, -4.521474398e-05f, -4.383750475e-05f, -4.246027322e-05f, -4.108305177e-05f, -3.970584279e-05f, -3.832864865e-05f,
--3.695147174e-05f, -3.557431443e-05f, -3.419717910e-05f, -3.282006814e-05f, -3.144298392e-05f, -3.006592882e-05f, -2.868890522e-05f, -2.731191550e-05f, -2.593496203e-05f, -2.455804720e-05f,
--2.318117339e-05f, -2.180434296e-05f, -2.042755830e-05f, -1.905082179e-05f, -1.767413581e-05f, -1.629750272e-05f, -1.492092491e-05f, -1.354440475e-05f, -1.216794462e-05f, -1.079154690e-05f,
--9.415213955e-06f, -8.038948169e-06f, -6.662751914e-06f, -5.286627565e-06f, -3.910577498e-06f, -2.534604085e-06f, -1.158709702e-06f, 2.171032776e-07f, 1.592832481e-06f, 2.968475534e-06f,
-4.344030065e-06f, 5.719493700e-06f, 7.094864067e-06f, 8.470138794e-06f, 9.845315510e-06f, 1.122039184e-05f, 1.259536542e-05f, 1.397023388e-05f, 1.534499483e-05f, 1.671964593e-05f,
-1.809418479e-05f, 1.946860904e-05f, 2.084291632e-05f, 2.221710426e-05f, 2.359117048e-05f, 2.496511263e-05f, 2.633892833e-05f, 2.771261522e-05f, 2.908617093e-05f, 3.045959309e-05f,
-3.183287933e-05f, 3.320602730e-05f, 3.457903462e-05f, 3.595189893e-05f, 3.732461787e-05f, 3.869718906e-05f, 4.006961016e-05f, 4.144187879e-05f, 4.281399258e-05f, 4.418594919e-05f,
-4.555774624e-05f, 4.692938138e-05f, 4.830085223e-05f, 4.967215645e-05f, 5.104329167e-05f, 5.241425554e-05f, 5.378504568e-05f, 5.515565974e-05f, 5.652609537e-05f, 5.789635020e-05f,
-5.926642188e-05f, 6.063630804e-05f, 6.200600635e-05f, 6.337551442e-05f, 6.474482992e-05f, 6.611395048e-05f, 6.748287375e-05f, 6.885159737e-05f, 7.022011900e-05f, 7.158843627e-05f,
-7.295654684e-05f, 7.432444834e-05f, 7.569213844e-05f, 7.705961477e-05f, 7.842687500e-05f, 7.979391675e-05f, 8.116073770e-05f, 8.252733548e-05f, 8.389370774e-05f, 8.525985215e-05f,
-8.662576635e-05f, 8.799144799e-05f, 8.935689473e-05f, 9.072210422e-05f, 9.208707411e-05f, 9.345180206e-05f, 9.481628573e-05f, 9.618052277e-05f, 9.754451084e-05f, 9.890824759e-05f,
-1.002717307e-04f, 1.016349578e-04f, 1.029979265e-04f, 1.043606346e-04f, 1.057230797e-04f, 1.070852594e-04f, 1.084471713e-04f, 1.098088133e-04f, 1.111701829e-04f, 1.125312777e-04f,
-1.138920956e-04f, 1.152526340e-04f, 1.166128907e-04f, 1.179728634e-04f, 1.193325497e-04f, 1.206919472e-04f, 1.220510537e-04f, 1.234098668e-04f, 1.247683842e-04f, 1.261266036e-04f,
-1.274845226e-04f, 1.288421388e-04f, 1.301994501e-04f, 1.315564539e-04f, 1.329131481e-04f, 1.342695303e-04f, 1.356255981e-04f, 1.369813492e-04f, 1.383367814e-04f, 1.396918923e-04f,
-1.410466795e-04f, 1.424011407e-04f, 1.437552737e-04f, 1.451090760e-04f, 1.464625454e-04f, 1.478156796e-04f, 1.491684762e-04f, 1.505209330e-04f, 1.518730475e-04f, 1.532248175e-04f,
-1.545762407e-04f, 1.559273148e-04f, 1.572780374e-04f, 1.586284062e-04f, 1.599784189e-04f, 1.613280732e-04f, 1.626773668e-04f, 1.640262974e-04f, 1.653748626e-04f, 1.667230602e-04f,
-1.680708879e-04f, 1.694183433e-04f, 1.707654241e-04f, 1.721121280e-04f, 1.734584528e-04f, 1.748043961e-04f, 1.761499556e-04f, 1.774951291e-04f, 1.788399141e-04f, 1.801843085e-04f,
-1.815283098e-04f, 1.828719159e-04f, 1.842151244e-04f, 1.855579329e-04f, 1.869003393e-04f, 1.882423413e-04f, 1.895839364e-04f, 1.909251225e-04f, 1.922658972e-04f, 1.936062582e-04f,
-1.949462033e-04f, 1.962857302e-04f, 1.976248365e-04f, 1.989635200e-04f, 2.003017784e-04f, 2.016396094e-04f, 2.029770108e-04f, 2.043139801e-04f, 2.056505152e-04f, 2.069866137e-04f,
-2.083222735e-04f, 2.096574921e-04f, 2.109922673e-04f, 2.123265969e-04f, 2.136604785e-04f, 2.149939099e-04f, 2.163268888e-04f, 2.176594129e-04f, 2.189914800e-04f, 2.203230877e-04f,
-2.216542338e-04f, 2.229849160e-04f, 2.243151321e-04f, 2.256448798e-04f, 2.269741568e-04f, 2.283029608e-04f, 2.296312895e-04f, 2.309591408e-04f, 2.322865123e-04f, 2.336134018e-04f,
-2.349398070e-04f, 2.362657256e-04f, 2.375911554e-04f, 2.389160941e-04f, 2.402405395e-04f, 2.415644893e-04f, 2.428879412e-04f, 2.442108930e-04f, 2.455333424e-04f, 2.468552872e-04f,
-2.481767251e-04f, 2.494976538e-04f, 2.508180712e-04f, 2.521379749e-04f, 2.534573627e-04f, 2.547762324e-04f, 2.560945816e-04f, 2.574124083e-04f, 2.587297100e-04f, 2.600464846e-04f,
-2.613627298e-04f, 2.626784434e-04f, 2.639936232e-04f, 2.653082668e-04f, 2.666223721e-04f, 2.679359368e-04f, 2.692489587e-04f, 2.705614355e-04f, 2.718733651e-04f, 2.731847451e-04f,
-2.744955733e-04f, 2.758058476e-04f, 2.771155656e-04f, 2.784247251e-04f, 2.797333240e-04f, 2.810413599e-04f, 2.823488308e-04f, 2.836557342e-04f, 2.849620680e-04f, 2.862678301e-04f,
-2.875730180e-04f, 2.888776298e-04f, 2.901816630e-04f, 2.914851155e-04f, 2.927879852e-04f, 2.940902696e-04f, 2.953919668e-04f, 2.966930743e-04f, 2.979935901e-04f, 2.992935119e-04f,
-3.005928375e-04f, 3.018915647e-04f, 3.031896912e-04f, 3.044872149e-04f, 3.057841336e-04f, 3.070804450e-04f, 3.083761470e-04f, 3.096712374e-04f, 3.109657138e-04f, 3.122595743e-04f,
-3.135528165e-04f, 3.148454382e-04f, 3.161374373e-04f, 3.174288115e-04f, 3.187195587e-04f, 3.200096767e-04f, 3.212991632e-04f, 3.225880162e-04f, 3.238762333e-04f, 3.251638124e-04f,
-3.264507514e-04f, 3.277370480e-04f, 3.290227000e-04f, 3.303077054e-04f, 3.315920618e-04f, 3.328757671e-04f, 3.341588191e-04f, 3.354412157e-04f, 3.367229546e-04f, 3.380040337e-04f,
-3.392844509e-04f, 3.405642039e-04f, 3.418432905e-04f, 3.431217087e-04f, 3.443994562e-04f, 3.456765309e-04f, 3.469529305e-04f, 3.482286530e-04f, 3.495036962e-04f, 3.507780578e-04f,
-3.520517358e-04f, 3.533247280e-04f, 3.545970322e-04f, 3.558686463e-04f, 3.571395681e-04f, 3.584097954e-04f, 3.596793262e-04f, 3.609481582e-04f, 3.622162892e-04f, 3.634837173e-04f,
-3.647504401e-04f, 3.660164556e-04f, 3.672817615e-04f, 3.685463559e-04f, 3.698102364e-04f, 3.710734011e-04f, 3.723358477e-04f, 3.735975740e-04f, 3.748585780e-04f, 3.761188576e-04f,
-3.773784105e-04f, 3.786372347e-04f, 3.798953281e-04f, 3.811526884e-04f, 3.824093135e-04f, 3.836652015e-04f, 3.849203500e-04f, 3.861747570e-04f, 3.874284203e-04f, 3.886813380e-04f,
-3.899335077e-04f, 3.911849274e-04f, 3.924355950e-04f, 3.936855084e-04f, 3.949346654e-04f, 3.961830639e-04f, 3.974307019e-04f, 3.986775772e-04f, 3.999236877e-04f, 4.011690313e-04f,
-4.024136059e-04f, 4.036574093e-04f, 4.049004396e-04f, 4.061426945e-04f, 4.073841720e-04f, 4.086248700e-04f, 4.098647864e-04f, 4.111039190e-04f, 4.123422659e-04f, 4.135798248e-04f,
-4.148165937e-04f, 4.160525706e-04f, 4.172877533e-04f, 4.185221397e-04f, 4.197557278e-04f, 4.209885155e-04f, 4.222205006e-04f, 4.234516812e-04f, 4.246820551e-04f, 4.259116202e-04f,
-4.271403745e-04f, 4.283683159e-04f, 4.295954424e-04f, 4.308217518e-04f, 4.320472420e-04f, 4.332719111e-04f, 4.344957569e-04f, 4.357187775e-04f, 4.369409706e-04f, 4.381623343e-04f,
-4.393828664e-04f, 4.406025650e-04f, 4.418214280e-04f, 4.430394533e-04f, 4.442566389e-04f, 4.454729827e-04f, 4.466884826e-04f, 4.479031366e-04f, 4.491169427e-04f, 4.503298989e-04f,
-4.515420030e-04f, 4.527532530e-04f, 4.539636469e-04f, 4.551731826e-04f, 4.563818581e-04f, 4.575896714e-04f, 4.587966205e-04f, 4.600027032e-04f, 4.612079176e-04f, 4.624122616e-04f,
-4.636157333e-04f, 4.648183305e-04f, 4.660200512e-04f, 4.672208935e-04f, 4.684208553e-04f, 4.696199346e-04f, 4.708181293e-04f, 4.720154375e-04f, 4.732118571e-04f, 4.744073862e-04f,
-4.756020226e-04f, 4.767957644e-04f, 4.779886096e-04f, 4.791805562e-04f, 4.803716021e-04f, 4.815617454e-04f, 4.827509841e-04f, 4.839393161e-04f, 4.851267395e-04f, 4.863132523e-04f,
-4.874988524e-04f, 4.886835379e-04f, 4.898673068e-04f, 4.910501570e-04f, 4.922320867e-04f, 4.934130938e-04f, 4.945931763e-04f, 4.957723322e-04f, 4.969505597e-04f, 4.981278566e-04f,
-4.993042210e-04f, 5.004796509e-04f, 5.016541443e-04f, 5.028276994e-04f, 5.040003141e-04f, 5.051719863e-04f, 5.063427143e-04f, 5.075124960e-04f, 5.086813293e-04f, 5.098492125e-04f,
-5.110161435e-04f, 5.121821203e-04f, 5.133471410e-04f, 5.145112037e-04f, 5.156743063e-04f, 5.168364470e-04f, 5.179976238e-04f, 5.191578346e-04f, 5.203170777e-04f, 5.214753510e-04f,
-5.226326526e-04f, 5.237889806e-04f, 5.249443329e-04f, 5.260987078e-04f, 5.272521032e-04f, 5.284045172e-04f, 5.295559478e-04f, 5.307063932e-04f, 5.318558514e-04f, 5.330043205e-04f,
-5.341517986e-04f, 5.352982837e-04f, 5.364437739e-04f, 5.375882673e-04f, 5.387317620e-04f, 5.398742561e-04f, 5.410157476e-04f, 5.421562346e-04f, 5.432957153e-04f, 5.444341876e-04f,
-5.455716498e-04f, 5.467080999e-04f, 5.478435360e-04f, 5.489779561e-04f, 5.501113585e-04f, 5.512437412e-04f, 5.523751023e-04f, 5.535054399e-04f, 5.546347521e-04f, 5.557630370e-04f,
-5.568902928e-04f, 5.580165175e-04f, 5.591417094e-04f, 5.602658664e-04f, 5.613889867e-04f, 5.625110684e-04f, 5.636321097e-04f, 5.647521087e-04f, 5.658710635e-04f, 5.669889722e-04f,
-5.681058329e-04f, 5.692216439e-04f, 5.703364032e-04f, 5.714501090e-04f, 5.725627594e-04f, 5.736743525e-04f, 5.747848865e-04f, 5.758943596e-04f, 5.770027698e-04f, 5.781101154e-04f,
-5.792163945e-04f, 5.803216052e-04f, 5.814257456e-04f, 5.825288140e-04f, 5.836308086e-04f, 5.847317273e-04f, 5.858315686e-04f, 5.869303304e-04f, 5.880280109e-04f, 5.891246084e-04f,
-5.902201209e-04f, 5.913145468e-04f, 5.924078840e-04f, 5.935001309e-04f, 5.945912856e-04f, 5.956813462e-04f, 5.967703110e-04f, 5.978581782e-04f, 5.989449459e-04f, 6.000306122e-04f,
-6.011151755e-04f, 6.021986339e-04f, 6.032809856e-04f, 6.043622287e-04f, 6.054423615e-04f, 6.065213823e-04f, 6.075992891e-04f, 6.086760801e-04f, 6.097517537e-04f, 6.108263080e-04f,
-6.118997412e-04f, 6.129720516e-04f, 6.140432372e-04f, 6.151132965e-04f, 6.161822275e-04f, 6.172500285e-04f, 6.183166977e-04f, 6.193822334e-04f, 6.204466337e-04f, 6.215098970e-04f,
-6.225720214e-04f, 6.236330051e-04f, 6.246928464e-04f, 6.257515436e-04f, 6.268090949e-04f, 6.278654984e-04f, 6.289207526e-04f, 6.299748555e-04f, 6.310278055e-04f, 6.320796008e-04f,
-6.331302396e-04f, 6.341797203e-04f, 6.352280410e-04f, 6.362752001e-04f, 6.373211957e-04f, 6.383660262e-04f, 6.394096898e-04f, 6.404521848e-04f, 6.414935094e-04f, 6.425336619e-04f,
-6.435726406e-04f, 6.446104438e-04f, 6.456470698e-04f, 6.466825167e-04f, 6.477167830e-04f, 6.487498668e-04f, 6.497817665e-04f, 6.508124804e-04f, 6.518420068e-04f, 6.528703438e-04f,
-6.538974900e-04f, 6.549234434e-04f, 6.559482025e-04f, 6.569717655e-04f, 6.579941308e-04f, 6.590152966e-04f, 6.600352613e-04f, 6.610540231e-04f, 6.620715804e-04f, 6.630879315e-04f,
-6.641030746e-04f, 6.651170082e-04f, 6.661297306e-04f, 6.671412400e-04f, 6.681515348e-04f, 6.691606133e-04f, 6.701684739e-04f, 6.711751149e-04f, 6.721805345e-04f, 6.731847312e-04f,
-6.741877033e-04f, 6.751894492e-04f, 6.761899671e-04f, 6.771892554e-04f, 6.781873124e-04f, 6.791841366e-04f, 6.801797263e-04f, 6.811740797e-04f, 6.821671954e-04f, 6.831590716e-04f,
-6.841497066e-04f, 6.851390990e-04f, 6.861272469e-04f, 6.871141488e-04f, 6.880998031e-04f, 6.890842081e-04f, 6.900673623e-04f, 6.910492639e-04f, 6.920299113e-04f, 6.930093030e-04f,
-6.939874374e-04f, 6.949643127e-04f, 6.959399274e-04f, 6.969142799e-04f, 6.978873686e-04f, 6.988591919e-04f, 6.998297481e-04f, 7.007990357e-04f, 7.017670531e-04f, 7.027337987e-04f,
-7.036992708e-04f, 7.046634679e-04f, 7.056263884e-04f, 7.065880308e-04f, 7.075483933e-04f, 7.085074745e-04f, 7.094652728e-04f, 7.104217866e-04f, 7.113770142e-04f, 7.123309542e-04f,
-7.132836050e-04f, 7.142349650e-04f, 7.151850326e-04f, 7.161338063e-04f, 7.170812844e-04f, 7.180274656e-04f, 7.189723481e-04f, 7.199159304e-04f, 7.208582111e-04f, 7.217991885e-04f,
-7.227388610e-04f, 7.236772272e-04f, 7.246142855e-04f, 7.255500344e-04f, 7.264844723e-04f, 7.274175976e-04f, 7.283494090e-04f, 7.292799047e-04f, 7.302090833e-04f, 7.311369433e-04f,
-7.320634832e-04f, 7.329887013e-04f, 7.339125963e-04f, 7.348351666e-04f, 7.357564106e-04f, 7.366763268e-04f, 7.375949139e-04f, 7.385121701e-04f, 7.394280941e-04f, 7.403426844e-04f,
-7.412559393e-04f, 7.421678575e-04f, 7.430784375e-04f, 7.439876777e-04f, 7.448955766e-04f, 7.458021329e-04f, 7.467073449e-04f, 7.476112112e-04f, 7.485137303e-04f, 7.494149008e-04f,
-7.503147211e-04f, 7.512131898e-04f, 7.521103055e-04f, 7.530060666e-04f, 7.539004717e-04f, 7.547935193e-04f, 7.556852080e-04f, 7.565755363e-04f, 7.574645027e-04f, 7.583521058e-04f,
-7.592383442e-04f, 7.601232163e-04f, 7.610067208e-04f, 7.618888562e-04f, 7.627696211e-04f, 7.636490139e-04f, 7.645270334e-04f, 7.654036780e-04f, 7.662789463e-04f, 7.671528370e-04f,
-7.680253484e-04f, 7.688964793e-04f, 7.697662283e-04f, 7.706345938e-04f, 7.715015745e-04f, 7.723671689e-04f, 7.732313757e-04f, 7.740941935e-04f, 7.749556208e-04f, 7.758156562e-04f,
-7.766742983e-04f, 7.775315458e-04f, 7.783873972e-04f, 7.792418511e-04f, 7.800949062e-04f, 7.809465610e-04f, 7.817968142e-04f, 7.826456643e-04f, 7.834931101e-04f, 7.843391501e-04f,
-7.851837830e-04f, 7.860270073e-04f, 7.868688217e-04f, 7.877092248e-04f, 7.885482153e-04f, 7.893857918e-04f, 7.902219529e-04f, 7.910566973e-04f, 7.918900236e-04f, 7.927219304e-04f,
-7.935524165e-04f, 7.943814804e-04f, 7.952091209e-04f, 7.960353365e-04f, 7.968601260e-04f, 7.976834879e-04f, 7.985054210e-04f, 7.993259239e-04f, 8.001449953e-04f, 8.009626339e-04f,
-8.017788383e-04f, 8.025936072e-04f, 8.034069393e-04f, 8.042188332e-04f, 8.050292877e-04f, 8.058383015e-04f, 8.066458731e-04f, 8.074520014e-04f, 8.082566850e-04f, 8.090599226e-04f,
-8.098617130e-04f, 8.106620547e-04f, 8.114609466e-04f, 8.122583872e-04f, 8.130543755e-04f, 8.138489099e-04f, 8.146419893e-04f, 8.154336124e-04f, 8.162237779e-04f, 8.170124845e-04f,
-8.177997310e-04f, 8.185855160e-04f, 8.193698383e-04f, 8.201526967e-04f, 8.209340898e-04f, 8.217140165e-04f, 8.224924754e-04f, 8.232694653e-04f, 8.240449849e-04f, 8.248190330e-04f,
-8.255916084e-04f, 8.263627098e-04f, 8.271323359e-04f, 8.279004855e-04f, 8.286671574e-04f, 8.294323504e-04f, 8.301960631e-04f, 8.309582944e-04f, 8.317190431e-04f, 8.324783079e-04f,
-8.332360876e-04f, 8.339923809e-04f, 8.347471868e-04f, 8.355005038e-04f, 8.362523310e-04f, 8.370026669e-04f, 8.377515105e-04f, 8.384988604e-04f, 8.392447156e-04f, 8.399890748e-04f,
-8.407319369e-04f, 8.414733005e-04f, 8.422131646e-04f, 8.429515280e-04f, 8.436883894e-04f, 8.444237477e-04f, 8.451576017e-04f, 8.458899503e-04f, 8.466207921e-04f, 8.473501262e-04f,
-8.480779513e-04f, 8.488042662e-04f, 8.495290698e-04f, 8.502523609e-04f, 8.509741384e-04f, 8.516944010e-04f, 8.524131478e-04f, 8.531303774e-04f, 8.538460888e-04f, 8.545602808e-04f,
-8.552729523e-04f, 8.559841021e-04f, 8.566937290e-04f, 8.574018321e-04f, 8.581084100e-04f, 8.588134618e-04f, 8.595169862e-04f, 8.602189822e-04f, 8.609194486e-04f, 8.616183843e-04f,
-8.623157882e-04f, 8.630116592e-04f, 8.637059962e-04f, 8.643987980e-04f, 8.650900636e-04f, 8.657797918e-04f, 8.664679816e-04f, 8.671546319e-04f, 8.678397416e-04f, 8.685233095e-04f,
-8.692053346e-04f, 8.698858158e-04f, 8.705647520e-04f, 8.712421422e-04f, 8.719179853e-04f, 8.725922801e-04f, 8.732650257e-04f, 8.739362209e-04f, 8.746058647e-04f, 8.752739560e-04f,
-8.759404938e-04f, 8.766054770e-04f, 8.772689045e-04f, 8.779307754e-04f, 8.785910885e-04f, 8.792498428e-04f, 8.799070372e-04f, 8.805626708e-04f, 8.812167424e-04f, 8.818692511e-04f,
-8.825201958e-04f, 8.831695755e-04f, 8.838173891e-04f, 8.844636357e-04f, 8.851083141e-04f, 8.857514235e-04f, 8.863929627e-04f, 8.870329308e-04f, 8.876713267e-04f, 8.883081495e-04f,
-8.889433980e-04f, 8.895770715e-04f, 8.902091687e-04f, 8.908396888e-04f, 8.914686307e-04f, 8.920959935e-04f, 8.927217761e-04f, 8.933459777e-04f, 8.939685971e-04f, 8.945896334e-04f,
-8.952090856e-04f, 8.958269528e-04f, 8.964432340e-04f, 8.970579282e-04f, 8.976710345e-04f, 8.982825519e-04f, 8.988924793e-04f, 8.995008160e-04f, 9.001075609e-04f, 9.007127130e-04f,
-9.013162715e-04f, 9.019182353e-04f, 9.025186036e-04f, 9.031173753e-04f, 9.037145496e-04f, 9.043101255e-04f, 9.049041020e-04f, 9.054964784e-04f, 9.060872535e-04f, 9.066764266e-04f,
-9.072639966e-04f, 9.078499627e-04f, 9.084343239e-04f, 9.090170794e-04f, 9.095982281e-04f, 9.101777693e-04f, 9.107557021e-04f, 9.113320254e-04f, 9.119067384e-04f, 9.124798403e-04f,
-9.130513300e-04f, 9.136212069e-04f, 9.141894698e-04f, 9.147561180e-04f, 9.153211506e-04f, 9.158845667e-04f, 9.164463655e-04f, 9.170065459e-04f, 9.175651073e-04f, 9.181220487e-04f,
-9.186773692e-04f, 9.192310681e-04f, 9.197831443e-04f, 9.203335972e-04f, 9.208824258e-04f, 9.214296292e-04f, 9.219752067e-04f, 9.225191573e-04f, 9.230614803e-04f, 9.236021748e-04f,
-9.241412400e-04f, 9.246786750e-04f, 9.252144790e-04f, 9.257486512e-04f, 9.262811908e-04f, 9.268120969e-04f, 9.273413687e-04f, 9.278690054e-04f, 9.283950061e-04f, 9.289193702e-04f,
-9.294420967e-04f, 9.299631849e-04f, 9.304826340e-04f, 9.310004431e-04f, 9.315166115e-04f, 9.320311384e-04f, 9.325440230e-04f, 9.330552645e-04f, 9.335648621e-04f, 9.340728150e-04f,
-9.345791225e-04f, 9.350837838e-04f, 9.355867981e-04f, 9.360881646e-04f, 9.365878826e-04f, 9.370859513e-04f, 9.375823700e-04f, 9.380771379e-04f, 9.385702542e-04f, 9.390617182e-04f,
-9.395515292e-04f, 9.400396863e-04f, 9.405261889e-04f, 9.410110362e-04f, 9.414942275e-04f, 9.419757620e-04f, 9.424556390e-04f, 9.429338578e-04f, 9.434104177e-04f, 9.438853179e-04f,
-9.443585576e-04f, 9.448301363e-04f, 9.453000532e-04f, 9.457683075e-04f, 9.462348986e-04f, 9.466998257e-04f, 9.471630882e-04f, 9.476246854e-04f, 9.480846165e-04f, 9.485428808e-04f,
-9.489994778e-04f, 9.494544066e-04f, 9.499076666e-04f, 9.503592571e-04f, 9.508091775e-04f, 9.512574270e-04f, 9.517040050e-04f, 9.521489108e-04f, 9.525921438e-04f, 9.530337033e-04f,
-9.534735886e-04f, 9.539117990e-04f, 9.543483340e-04f, 9.547831928e-04f, 9.552163748e-04f, 9.556478794e-04f, 9.560777059e-04f, 9.565058537e-04f, 9.569323221e-04f, 9.573571106e-04f,
-9.577802184e-04f, 9.582016449e-04f, 9.586213896e-04f, 9.590394517e-04f, 9.594558307e-04f, 9.598705260e-04f, 9.602835369e-04f, 9.606948629e-04f, 9.611045032e-04f, 9.615124574e-04f,
-9.619187248e-04f, 9.623233048e-04f, 9.627261968e-04f, 9.631274003e-04f, 9.635269146e-04f, 9.639247391e-04f, 9.643208733e-04f, 9.647153165e-04f, 9.651080683e-04f, 9.654991280e-04f,
-9.658884950e-04f, 9.662761688e-04f, 9.666621488e-04f, 9.670464345e-04f, 9.674290253e-04f, 9.678099206e-04f, 9.681891198e-04f, 9.685666225e-04f, 9.689424281e-04f, 9.693165360e-04f,
-9.696889456e-04f, 9.700596565e-04f, 9.704286682e-04f, 9.707959799e-04f, 9.711615914e-04f, 9.715255019e-04f, 9.718877110e-04f, 9.722482182e-04f, 9.726070229e-04f, 9.729641247e-04f,
-9.733195229e-04f, 9.736732172e-04f, 9.740252070e-04f, 9.743754917e-04f, 9.747240710e-04f, 9.750709442e-04f, 9.754161109e-04f, 9.757595706e-04f, 9.761013229e-04f, 9.764413671e-04f,
-9.767797029e-04f, 9.771163298e-04f, 9.774512472e-04f, 9.777844548e-04f, 9.781159520e-04f, 9.784457383e-04f, 9.787738133e-04f, 9.791001766e-04f, 9.794248277e-04f, 9.797477661e-04f,
-9.800689913e-04f, 9.803885030e-04f, 9.807063006e-04f, 9.810223838e-04f, 9.813367520e-04f, 9.816494049e-04f, 9.819603420e-04f, 9.822695628e-04f, 9.825770670e-04f, 9.828828541e-04f,
-9.831869237e-04f, 9.834892754e-04f, 9.837899087e-04f, 9.840888233e-04f, 9.843860187e-04f, 9.846814945e-04f, 9.849752503e-04f, 9.852672857e-04f, 9.855576004e-04f, 9.858461938e-04f,
-9.861330657e-04f, 9.864182155e-04f, 9.867016431e-04f, 9.869833478e-04f, 9.872633295e-04f, 9.875415876e-04f, 9.878181218e-04f, 9.880929318e-04f, 9.883660172e-04f, 9.886373775e-04f,
-9.889070125e-04f, 9.891749218e-04f, 9.894411050e-04f, 9.897055618e-04f, 9.899682918e-04f, 9.902292946e-04f, 9.904885700e-04f, 9.907461175e-04f, 9.910019369e-04f, 9.912560278e-04f,
-9.915083899e-04f, 9.917590227e-04f, 9.920079261e-04f, 9.922550997e-04f, 9.925005431e-04f, 9.927442561e-04f, 9.929862383e-04f, 9.932264894e-04f, 9.934650091e-04f, 9.937017971e-04f,
-9.939368531e-04f, 9.941701768e-04f, 9.944017679e-04f, 9.946316261e-04f, 9.948597510e-04f, 9.950861426e-04f, 9.953108003e-04f, 9.955337240e-04f, 9.957549133e-04f, 9.959743681e-04f,
-9.961920879e-04f, 9.964080727e-04f, 9.966223220e-04f, 9.968348356e-04f, 9.970456132e-04f, 9.972546547e-04f, 9.974619597e-04f, 9.976675280e-04f, 9.978713593e-04f, 9.980734534e-04f,
-9.982738101e-04f, 9.984724291e-04f, 9.986693101e-04f, 9.988644530e-04f, 9.990578575e-04f, 9.992495234e-04f, 9.994394504e-04f, 9.996276383e-04f, 9.998140870e-04f, 9.999987961e-04f,
-1.000181766e-03f, 1.000362995e-03f, 1.000542484e-03f, 1.000720233e-03f, 1.000896242e-03f, 1.001070510e-03f, 1.001243036e-03f, 1.001413822e-03f, 1.001582866e-03f, 1.001750169e-03f,
-1.001915730e-03f, 1.002079550e-03f, 1.002241627e-03f, 1.002401962e-03f, 1.002560555e-03f, 1.002717405e-03f, 1.002872512e-03f, 1.003025876e-03f, 1.003177498e-03f, 1.003327376e-03f,
-1.003475511e-03f, 1.003621902e-03f, 1.003766550e-03f, 1.003909454e-03f, 1.004050614e-03f, 1.004190030e-03f, 1.004327701e-03f, 1.004463629e-03f, 1.004597812e-03f, 1.004730250e-03f,
-1.004860944e-03f, 1.004989892e-03f, 1.005117096e-03f, 1.005242555e-03f, 1.005366269e-03f, 1.005488237e-03f, 1.005608460e-03f, 1.005726937e-03f, 1.005843669e-03f, 1.005958655e-03f,
-1.006071895e-03f, 1.006183390e-03f, 1.006293139e-03f, 1.006401141e-03f, 1.006507397e-03f, 1.006611908e-03f, 1.006714672e-03f, 1.006815689e-03f, 1.006914960e-03f, 1.007012485e-03f,
-1.007108263e-03f, 1.007202295e-03f, 1.007294580e-03f, 1.007385118e-03f, 1.007473910e-03f, 1.007560954e-03f, 1.007646252e-03f, 1.007729803e-03f, 1.007811607e-03f, 1.007891665e-03f,
-1.007969975e-03f, 1.008046538e-03f, 1.008121354e-03f, 1.008194423e-03f, 1.008265745e-03f, 1.008335320e-03f, 1.008403147e-03f, 1.008469228e-03f, 1.008533561e-03f, 1.008596148e-03f,
-1.008656987e-03f, 1.008716079e-03f, 1.008773424e-03f, 1.008829022e-03f, 1.008882872e-03f, 1.008934976e-03f, 1.008985332e-03f, 1.009033942e-03f, 1.009080804e-03f, 1.009125919e-03f,
-1.009169288e-03f, 1.009210909e-03f, 1.009250783e-03f, 1.009288911e-03f, 1.009325292e-03f, 1.009359926e-03f, 1.009392813e-03f, 1.009423953e-03f, 1.009453347e-03f, 1.009480994e-03f,
-1.009506895e-03f, 1.009531049e-03f, 1.009553457e-03f, 1.009574118e-03f, 1.009593034e-03f, 1.009610202e-03f, 1.009625625e-03f, 1.009639302e-03f, 1.009651233e-03f, 1.009661418e-03f,
-1.009669857e-03f, 1.009676550e-03f, 1.009681498e-03f, 1.009684701e-03f, 1.009686158e-03f, 1.009685869e-03f, 1.009683836e-03f, 1.009680057e-03f, 1.009674534e-03f, 1.009667265e-03f,
-1.009658252e-03f, 1.009647494e-03f, 1.009634992e-03f, 1.009620745e-03f, 1.009604755e-03f, 1.009587020e-03f, 1.009567541e-03f, 1.009546318e-03f, 1.009523352e-03f, 1.009498642e-03f,
-1.009472188e-03f, 1.009443992e-03f, 1.009414052e-03f, 1.009382370e-03f, 1.009348945e-03f, 1.009313777e-03f, 1.009276866e-03f, 1.009238214e-03f, 1.009197819e-03f, 1.009155683e-03f,
-1.009111805e-03f, 1.009066185e-03f, 1.009018824e-03f, 1.008969722e-03f, 1.008918878e-03f, 1.008866294e-03f, 1.008811970e-03f, 1.008755905e-03f, 1.008698100e-03f, 1.008638554e-03f,
-1.008577269e-03f, 1.008514245e-03f, 1.008449481e-03f, 1.008382978e-03f, 1.008314736e-03f, 1.008244756e-03f, 1.008173037e-03f, 1.008099580e-03f, 1.008024385e-03f, 1.007947452e-03f,
-1.007868781e-03f, 1.007788373e-03f, 1.007706229e-03f, 1.007622347e-03f, 1.007536729e-03f, 1.007449375e-03f, 1.007360285e-03f, 1.007269459e-03f, 1.007176897e-03f, 1.007082600e-03f,
-1.006986568e-03f, 1.006888802e-03f, 1.006789301e-03f, 1.006688066e-03f, 1.006585097e-03f, 1.006480395e-03f, 1.006373959e-03f, 1.006265791e-03f, 1.006155889e-03f, 1.006044255e-03f,
-1.005930890e-03f, 1.005815792e-03f, 1.005698963e-03f, 1.005580402e-03f, 1.005460111e-03f, 1.005338089e-03f, 1.005214337e-03f, 1.005088855e-03f, 1.004961644e-03f, 1.004832703e-03f,
-1.004702033e-03f, 1.004569634e-03f, 1.004435508e-03f, 1.004299653e-03f, 1.004162071e-03f, 1.004022761e-03f, 1.003881725e-03f, 1.003738961e-03f, 1.003594472e-03f, 1.003448257e-03f,
-1.003300316e-03f, 1.003150650e-03f, 1.002999260e-03f, 1.002846145e-03f, 1.002691306e-03f, 1.002534743e-03f, 1.002376457e-03f, 1.002216448e-03f, 1.002054717e-03f, 1.001891263e-03f,
-1.001726088e-03f, 1.001559191e-03f, 1.001390573e-03f, 1.001220235e-03f, 1.001048176e-03f, 1.000874398e-03f, 1.000698900e-03f, 1.000521683e-03f, 1.000342748e-03f, 1.000162095e-03f,
-9.999797237e-04f, 9.997956354e-04f, 9.996098301e-04f, 9.994223084e-04f, 9.992330706e-04f, 9.990421172e-04f, 9.988494487e-04f, 9.986550655e-04f, 9.984589680e-04f, 9.982611566e-04f,
-9.980616318e-04f, 9.978603941e-04f, 9.976574440e-04f, 9.974527817e-04f, 9.972464079e-04f, 9.970383230e-04f, 9.968285274e-04f, 9.966170217e-04f, 9.964038062e-04f, 9.961888815e-04f,
-9.959722480e-04f, 9.957539063e-04f, 9.955338567e-04f, 9.953120998e-04f, 9.950886361e-04f, 9.948634660e-04f, 9.946365901e-04f, 9.944080088e-04f, 9.941777227e-04f, 9.939457322e-04f,
-9.937120379e-04f, 9.934766402e-04f, 9.932395397e-04f, 9.930007369e-04f, 9.927602323e-04f, 9.925180265e-04f, 9.922741198e-04f, 9.920285130e-04f, 9.917812064e-04f, 9.915322006e-04f,
-9.912814963e-04f, 9.910290938e-04f, 9.907749938e-04f, 9.905191967e-04f, 9.902617032e-04f, 9.900025137e-04f, 9.897416289e-04f, 9.894790493e-04f, 9.892147754e-04f, 9.889488078e-04f,
-9.886811471e-04f, 9.884117938e-04f, 9.881407485e-04f, 9.878680118e-04f, 9.875935842e-04f, 9.873174664e-04f, 9.870396588e-04f, 9.867601622e-04f, 9.864789770e-04f, 9.861961039e-04f,
-9.859115434e-04f, 9.856252962e-04f, 9.853373628e-04f, 9.850477439e-04f, 9.847564400e-04f, 9.844634518e-04f, 9.841687799e-04f, 9.838724248e-04f, 9.835743873e-04f, 9.832746678e-04f,
-9.829732671e-04f, 9.826701857e-04f, 9.823654244e-04f, 9.820589836e-04f, 9.817508641e-04f, 9.814410664e-04f, 9.811295913e-04f, 9.808164394e-04f, 9.805016112e-04f, 9.801851075e-04f,
-9.798669289e-04f, 9.795470760e-04f, 9.792255496e-04f, 9.789023502e-04f, 9.785774785e-04f, 9.782509353e-04f, 9.779227211e-04f, 9.775928366e-04f, 9.772612825e-04f, 9.769280595e-04f,
-9.765931682e-04f, 9.762566094e-04f, 9.759183836e-04f, 9.755784917e-04f, 9.752369343e-04f, 9.748937120e-04f, 9.745488257e-04f, 9.742022759e-04f, 9.738540633e-04f, 9.735041888e-04f,
-9.731526530e-04f, 9.727994565e-04f, 9.724446001e-04f, 9.720880846e-04f, 9.717299106e-04f, 9.713700789e-04f, 9.710085901e-04f, 9.706454451e-04f, 9.702806445e-04f, 9.699141891e-04f,
-9.695460795e-04f, 9.691763167e-04f, 9.688049012e-04f, 9.684318338e-04f, 9.680571153e-04f, 9.676807464e-04f, 9.673027279e-04f, 9.669230605e-04f, 9.665417449e-04f, 9.661587821e-04f,
-9.657741726e-04f, 9.653879173e-04f, 9.650000169e-04f, 9.646104723e-04f, 9.642192841e-04f, 9.638264532e-04f, 9.634319803e-04f, 9.630358663e-04f, 9.626381118e-04f, 9.622387178e-04f,
-9.618376849e-04f, 9.614350140e-04f, 9.610307059e-04f, 9.606247614e-04f, 9.602171812e-04f, 9.598079662e-04f, 9.593971172e-04f, 9.589846350e-04f, 9.585705204e-04f, 9.581547742e-04f,
-9.577373973e-04f, 9.573183904e-04f, 9.568977544e-04f, 9.564754902e-04f, 9.560515984e-04f, 9.556260801e-04f, 9.551989359e-04f, 9.547701668e-04f, 9.543397736e-04f, 9.539077572e-04f,
-9.534741183e-04f, 9.530388578e-04f, 9.526019766e-04f, 9.521634756e-04f, 9.517233555e-04f, 9.512816173e-04f, 9.508382618e-04f, 9.503932898e-04f, 9.499467024e-04f, 9.494985002e-04f,
-9.490486842e-04f, 9.485972553e-04f, 9.481442143e-04f, 9.476895622e-04f, 9.472332997e-04f, 9.467754279e-04f, 9.463159475e-04f, 9.458548596e-04f, 9.453921649e-04f, 9.449278644e-04f,
-9.444619589e-04f, 9.439944494e-04f, 9.435253368e-04f, 9.430546220e-04f, 9.425823059e-04f, 9.421083894e-04f, 9.416328735e-04f, 9.411557590e-04f, 9.406770469e-04f, 9.401967381e-04f,
-9.397148335e-04f, 9.392313341e-04f, 9.387462407e-04f, 9.382595544e-04f, 9.377712761e-04f, 9.372814067e-04f, 9.367899471e-04f, 9.362968984e-04f, 9.358022613e-04f, 9.353060370e-04f,
-9.348082264e-04f, 9.343088303e-04f, 9.338078498e-04f, 9.333052859e-04f, 9.328011395e-04f, 9.322954115e-04f, 9.317881030e-04f, 9.312792149e-04f, 9.307687482e-04f, 9.302567038e-04f,
-9.297430829e-04f, 9.292278862e-04f, 9.287111149e-04f, 9.281927698e-04f, 9.276728521e-04f, 9.271513627e-04f, 9.266283026e-04f, 9.261036728e-04f, 9.255774743e-04f, 9.250497080e-04f,
-9.245203751e-04f, 9.239894766e-04f, 9.234570133e-04f, 9.229229864e-04f, 9.223873969e-04f, 9.218502458e-04f, 9.213115341e-04f, 9.207712629e-04f, 9.202294331e-04f, 9.196860458e-04f,
-9.191411021e-04f, 9.185946029e-04f, 9.180465494e-04f, 9.174969425e-04f, 9.169457833e-04f, 9.163930729e-04f, 9.158388123e-04f, 9.152830025e-04f, 9.147256446e-04f, 9.141667398e-04f,
-9.136062889e-04f, 9.130442931e-04f, 9.124807535e-04f, 9.119156711e-04f, 9.113490471e-04f, 9.107808824e-04f, 9.102111781e-04f, 9.096399354e-04f, 9.090671553e-04f, 9.084928388e-04f,
-9.079169872e-04f, 9.073396014e-04f, 9.067606826e-04f, 9.061802318e-04f, 9.055982502e-04f, 9.050147388e-04f, 9.044296988e-04f, 9.038431313e-04f, 9.032550373e-04f, 9.026654180e-04f,
-9.020742745e-04f, 9.014816079e-04f, 9.008874193e-04f, 9.002917099e-04f, 8.996944807e-04f, 8.990957329e-04f, 8.984954676e-04f, 8.978936860e-04f, 8.972903892e-04f, 8.966855782e-04f,
-8.960792544e-04f, 8.954714187e-04f, 8.948620724e-04f, 8.942512165e-04f, 8.936388523e-04f, 8.930249808e-04f, 8.924096033e-04f, 8.917927209e-04f, 8.911743348e-04f, 8.905544460e-04f,
-8.899330559e-04f, 8.893101654e-04f, 8.886857759e-04f, 8.880598885e-04f, 8.874325043e-04f, 8.868036245e-04f, 8.861732504e-04f, 8.855413830e-04f, 8.849080236e-04f, 8.842731734e-04f,
-8.836368335e-04f, 8.829990052e-04f, 8.823596896e-04f, 8.817188879e-04f, 8.810766014e-04f, 8.804328312e-04f, 8.797875785e-04f, 8.791408445e-04f, 8.784926305e-04f, 8.778429377e-04f,
-8.771917672e-04f, 8.765391203e-04f, 8.758849983e-04f, 8.752294022e-04f, 8.745723334e-04f, 8.739137931e-04f, 8.732537825e-04f, 8.725923028e-04f, 8.719293553e-04f, 8.712649411e-04f,
-8.705990617e-04f, 8.699317181e-04f, 8.692629116e-04f, 8.685926435e-04f, 8.679209151e-04f, 8.672477275e-04f, 8.665730820e-04f, 8.658969799e-04f, 8.652194225e-04f, 8.645404109e-04f,
-8.638599465e-04f, 8.631780305e-04f, 8.624946642e-04f, 8.618098489e-04f, 8.611235858e-04f, 8.604358763e-04f, 8.597467215e-04f, 8.590561228e-04f, 8.583640814e-04f, 8.576705986e-04f,
-8.569756758e-04f, 8.562793142e-04f, 8.555815151e-04f, 8.548822798e-04f, 8.541816096e-04f, 8.534795058e-04f, 8.527759696e-04f, 8.520710025e-04f, 8.513646057e-04f, 8.506567804e-04f,
-8.499475281e-04f, 8.492368501e-04f, 8.485247475e-04f, 8.478112219e-04f, 8.470962744e-04f, 8.463799065e-04f, 8.456621194e-04f, 8.449429145e-04f, 8.442222930e-04f, 8.435002564e-04f,
-8.427768060e-04f, 8.420519430e-04f, 8.413256689e-04f, 8.405979850e-04f, 8.398688925e-04f, 8.391383930e-04f, 8.384064877e-04f, 8.376731780e-04f, 8.369384651e-04f, 8.362023506e-04f,
-8.354648357e-04f, 8.347259218e-04f, 8.339856103e-04f, 8.332439025e-04f, 8.325007998e-04f, 8.317563035e-04f, 8.310104151e-04f, 8.302631359e-04f, 8.295144673e-04f, 8.287644107e-04f,
-8.280129674e-04f, 8.272601388e-04f, 8.265059264e-04f, 8.257503315e-04f, 8.249933555e-04f, 8.242349997e-04f, 8.234752657e-04f, 8.227141547e-04f, 8.219516683e-04f, 8.211878077e-04f,
-8.204225744e-04f, 8.196559698e-04f, 8.188879953e-04f, 8.181186523e-04f, 8.173479423e-04f, 8.165758666e-04f, 8.158024267e-04f, 8.150276240e-04f, 8.142514599e-04f, 8.134739358e-04f,
-8.126950532e-04f, 8.119148134e-04f, 8.111332180e-04f, 8.103502684e-04f, 8.095659659e-04f, 8.087803121e-04f, 8.079933084e-04f, 8.072049562e-04f, 8.064152569e-04f, 8.056242120e-04f,
-8.048318230e-04f, 8.040380914e-04f, 8.032430184e-04f, 8.024466058e-04f, 8.016488547e-04f, 8.008497669e-04f, 8.000493436e-04f, 7.992475864e-04f, 7.984444968e-04f, 7.976400761e-04f,
-7.968343259e-04f, 7.960272477e-04f, 7.952188430e-04f, 7.944091131e-04f, 7.935980596e-04f, 7.927856840e-04f, 7.919719877e-04f, 7.911569723e-04f, 7.903406393e-04f, 7.895229900e-04f,
-7.887040261e-04f, 7.878837490e-04f, 7.870621602e-04f, 7.862392613e-04f, 7.854150536e-04f, 7.845895388e-04f, 7.837627183e-04f, 7.829345936e-04f, 7.821051663e-04f, 7.812744379e-04f,
-7.804424099e-04f, 7.796090837e-04f, 7.787744610e-04f, 7.779385432e-04f, 7.771013318e-04f, 7.762628285e-04f, 7.754230347e-04f, 7.745819519e-04f, 7.737395817e-04f, 7.728959257e-04f,
-7.720509853e-04f, 7.712047620e-04f, 7.703572576e-04f, 7.695084734e-04f, 7.686584110e-04f, 7.678070720e-04f, 7.669544579e-04f, 7.661005703e-04f, 7.652454108e-04f, 7.643889808e-04f,
-7.635312819e-04f, 7.626723158e-04f, 7.618120839e-04f, 7.609505879e-04f, 7.600878293e-04f, 7.592238096e-04f, 7.583585304e-04f, 7.574919934e-04f, 7.566242001e-04f, 7.557551520e-04f,
-7.548848508e-04f, 7.540132979e-04f, 7.531404951e-04f, 7.522664439e-04f, 7.513911459e-04f, 7.505146026e-04f, 7.496368157e-04f, 7.487577867e-04f, 7.478775173e-04f, 7.469960090e-04f,
-7.461132635e-04f, 7.452292824e-04f, 7.443440671e-04f, 7.434576195e-04f, 7.425699410e-04f, 7.416810332e-04f, 7.407908979e-04f, 7.398995366e-04f, 7.390069508e-04f, 7.381131424e-04f,
-7.372181127e-04f, 7.363218636e-04f, 7.354243965e-04f, 7.345257132e-04f, 7.336258152e-04f, 7.327247042e-04f, 7.318223818e-04f, 7.309188497e-04f, 7.300141095e-04f, 7.291081628e-04f,
-7.282010112e-04f, 7.272926565e-04f, 7.263831002e-04f, 7.254723440e-04f, 7.245603895e-04f, 7.236472385e-04f, 7.227328925e-04f, 7.218173531e-04f, 7.209006222e-04f, 7.199827012e-04f,
-7.190635920e-04f, 7.181432960e-04f, 7.172218151e-04f, 7.162991508e-04f, 7.153753049e-04f, 7.144502789e-04f, 7.135240747e-04f, 7.125966937e-04f, 7.116681378e-04f, 7.107384086e-04f,
-7.098075078e-04f, 7.088754370e-04f, 7.079421979e-04f, 7.070077923e-04f, 7.060722218e-04f, 7.051354881e-04f, 7.041975929e-04f, 7.032585379e-04f, 7.023183247e-04f, 7.013769552e-04f,
-7.004344308e-04f, 6.994907535e-04f, 6.985459249e-04f, 6.975999466e-04f, 6.966528204e-04f, 6.957045480e-04f, 6.947551311e-04f, 6.938045714e-04f, 6.928528706e-04f, 6.919000305e-04f,
-6.909460527e-04f, 6.899909390e-04f, 6.890346911e-04f, 6.880773107e-04f, 6.871187996e-04f, 6.861591594e-04f, 6.851983919e-04f, 6.842364989e-04f, 6.832734820e-04f, 6.823093430e-04f,
-6.813440837e-04f, 6.803777057e-04f, 6.794102108e-04f, 6.784416007e-04f, 6.774718773e-04f, 6.765010422e-04f, 6.755290971e-04f, 6.745560439e-04f, 6.735818843e-04f, 6.726066200e-04f,
-6.716302527e-04f, 6.706527843e-04f, 6.696742165e-04f, 6.686945511e-04f, 6.677137898e-04f, 6.667319343e-04f, 6.657489865e-04f, 6.647649481e-04f, 6.637798209e-04f, 6.627936067e-04f,
-6.618063071e-04f, 6.608179240e-04f, 6.598284592e-04f, 6.588379145e-04f, 6.578462915e-04f, 6.568535922e-04f, 6.558598183e-04f, 6.548649715e-04f, 6.538690536e-04f, 6.528720666e-04f,
-6.518740120e-04f, 6.508748917e-04f, 6.498747076e-04f, 6.488734614e-04f, 6.478711549e-04f, 6.468677898e-04f, 6.458633681e-04f, 6.448578915e-04f, 6.438513618e-04f, 6.428437807e-04f,
-6.418351502e-04f, 6.408254721e-04f, 6.398147480e-04f, 6.388029799e-04f, 6.377901695e-04f, 6.367763188e-04f, 6.357614294e-04f, 6.347455032e-04f, 6.337285420e-04f, 6.327105477e-04f,
-6.316915220e-04f, 6.306714669e-04f, 6.296503840e-04f, 6.286282753e-04f, 6.276051426e-04f, 6.265809877e-04f, 6.255558125e-04f, 6.245296187e-04f, 6.235024082e-04f, 6.224741829e-04f,
-6.214449446e-04f, 6.204146951e-04f, 6.193834362e-04f, 6.183511699e-04f, 6.173178980e-04f, 6.162836223e-04f, 6.152483446e-04f, 6.142120669e-04f, 6.131747909e-04f, 6.121365186e-04f,
-6.110972517e-04f, 6.100569921e-04f, 6.090157418e-04f, 6.079735025e-04f, 6.069302761e-04f, 6.058860645e-04f, 6.048408696e-04f, 6.037946932e-04f, 6.027475371e-04f, 6.016994033e-04f,
-6.006502936e-04f, 5.996002100e-04f, 5.985491542e-04f, 5.974971281e-04f, 5.964441337e-04f, 5.953901728e-04f, 5.943352472e-04f, 5.932793590e-04f, 5.922225099e-04f, 5.911647018e-04f,
-5.901059367e-04f, 5.890462164e-04f, 5.879855428e-04f, 5.869239178e-04f, 5.858613432e-04f, 5.847978211e-04f, 5.837333533e-04f, 5.826679416e-04f, 5.816015881e-04f, 5.805342945e-04f,
-5.794660628e-04f, 5.783968949e-04f, 5.773267927e-04f, 5.762557580e-04f, 5.751837930e-04f, 5.741108993e-04f, 5.730370789e-04f, 5.719623339e-04f, 5.708866659e-04f, 5.698100771e-04f,
-5.687325692e-04f, 5.676541443e-04f, 5.665748042e-04f, 5.654945508e-04f, 5.644133862e-04f, 5.633313121e-04f, 5.622483306e-04f, 5.611644435e-04f, 5.600796528e-04f, 5.589939605e-04f,
-5.579073683e-04f, 5.568198784e-04f, 5.557314926e-04f, 5.546422129e-04f, 5.535520411e-04f, 5.524609793e-04f, 5.513690294e-04f, 5.502761932e-04f, 5.491824729e-04f, 5.480878702e-04f,
-5.469923872e-04f, 5.458960258e-04f, 5.447987879e-04f, 5.437006755e-04f, 5.426016906e-04f, 5.415018351e-04f, 5.404011110e-04f, 5.392995201e-04f, 5.381970645e-04f, 5.370937462e-04f,
-5.359895671e-04f, 5.348845291e-04f, 5.337786342e-04f, 5.326718844e-04f, 5.315642817e-04f, 5.304558279e-04f, 5.293465252e-04f, 5.282363754e-04f, 5.271253805e-04f, 5.260135425e-04f,
-5.249008634e-04f, 5.237873451e-04f, 5.226729896e-04f, 5.215577990e-04f, 5.204417751e-04f, 5.193249200e-04f, 5.182072356e-04f, 5.170887239e-04f, 5.159693870e-04f, 5.148492267e-04f,
-5.137282451e-04f, 5.126064442e-04f, 5.114838259e-04f, 5.103603923e-04f, 5.092361453e-04f, 5.081110869e-04f, 5.069852192e-04f, 5.058585441e-04f, 5.047310636e-04f, 5.036027798e-04f,
-5.024736945e-04f, 5.013438099e-04f, 5.002131279e-04f, 4.990816505e-04f, 4.979493798e-04f, 4.968163177e-04f, 4.956824662e-04f, 4.945478274e-04f, 4.934124032e-04f, 4.922761957e-04f,
-4.911392069e-04f, 4.900014388e-04f, 4.888628934e-04f, 4.877235728e-04f, 4.865834789e-04f, 4.854426137e-04f, 4.843009794e-04f, 4.831585778e-04f, 4.820154111e-04f, 4.808714812e-04f,
-4.797267902e-04f, 4.785813400e-04f, 4.774351329e-04f, 4.762881706e-04f, 4.751404554e-04f, 4.739919891e-04f, 4.728427739e-04f, 4.716928118e-04f, 4.705421048e-04f, 4.693906550e-04f,
-4.682384643e-04f, 4.670855348e-04f, 4.659318686e-04f, 4.647774677e-04f, 4.636223342e-04f, 4.624664700e-04f, 4.613098772e-04f, 4.601525579e-04f, 4.589945142e-04f, 4.578357479e-04f,
-4.566762613e-04f, 4.555160563e-04f, 4.543551351e-04f, 4.531934996e-04f, 4.520311519e-04f, 4.508680941e-04f, 4.497043281e-04f, 4.485398562e-04f, 4.473746803e-04f, 4.462088024e-04f,
-4.450422247e-04f, 4.438749492e-04f, 4.427069780e-04f, 4.415383131e-04f, 4.403689566e-04f, 4.391989105e-04f, 4.380281769e-04f, 4.368567579e-04f, 4.356846556e-04f, 4.345118720e-04f,
-4.333384092e-04f, 4.321642692e-04f, 4.309894542e-04f, 4.298139661e-04f, 4.286378072e-04f, 4.274609794e-04f, 4.262834848e-04f, 4.251053255e-04f, 4.239265036e-04f, 4.227470211e-04f,
-4.215668802e-04f, 4.203860829e-04f, 4.192046313e-04f, 4.180225274e-04f, 4.168397735e-04f, 4.156563715e-04f, 4.144723235e-04f, 4.132876316e-04f, 4.121022980e-04f, 4.109163246e-04f,
-4.097297136e-04f, 4.085424671e-04f, 4.073545872e-04f, 4.061660759e-04f, 4.049769354e-04f, 4.037871678e-04f, 4.025967750e-04f, 4.014057593e-04f, 4.002141228e-04f, 3.990218675e-04f,
-3.978289955e-04f, 3.966355090e-04f, 3.954414100e-04f, 3.942467006e-04f, 3.930513829e-04f, 3.918554591e-04f, 3.906589313e-04f, 3.894618015e-04f, 3.882640719e-04f, 3.870657445e-04f,
-3.858668215e-04f, 3.846673050e-04f, 3.834671971e-04f, 3.822664999e-04f, 3.810652155e-04f, 3.798633460e-04f, 3.786608936e-04f, 3.774578604e-04f, 3.762542484e-04f, 3.750500598e-04f,
-3.738452967e-04f, 3.726399612e-04f, 3.714340555e-04f, 3.702275817e-04f, 3.690205418e-04f, 3.678129380e-04f, 3.666047725e-04f, 3.653960473e-04f, 3.641867646e-04f, 3.629769265e-04f,
-3.617665351e-04f, 3.605555925e-04f, 3.593441010e-04f, 3.581320625e-04f, 3.569194793e-04f, 3.557063534e-04f, 3.544926871e-04f, 3.532784823e-04f, 3.520637414e-04f, 3.508484663e-04f,
-3.496326592e-04f, 3.484163223e-04f, 3.471994577e-04f, 3.459820675e-04f, 3.447641539e-04f, 3.435457190e-04f, 3.423267650e-04f, 3.411072939e-04f, 3.398873080e-04f, 3.386668093e-04f,
-3.374458000e-04f, 3.362242823e-04f, 3.350022582e-04f, 3.337797300e-04f, 3.325566998e-04f, 3.313331697e-04f, 3.301091418e-04f, 3.288846184e-04f, 3.276596015e-04f, 3.264340934e-04f,
-3.252080961e-04f, 3.239816118e-04f, 3.227546427e-04f, 3.215271908e-04f, 3.202992585e-04f, 3.190708478e-04f, 3.178419608e-04f, 3.166125997e-04f, 3.153827667e-04f, 3.141524640e-04f,
-3.129216936e-04f, 3.116904578e-04f, 3.104587587e-04f, 3.092265984e-04f, 3.079939792e-04f, 3.067609031e-04f, 3.055273724e-04f, 3.042933891e-04f, 3.030589555e-04f, 3.018240737e-04f,
-3.005887459e-04f, 2.993529743e-04f, 2.981167609e-04f, 2.968801081e-04f, 2.956430178e-04f, 2.944054924e-04f, 2.931675339e-04f, 2.919291446e-04f, 2.906903265e-04f, 2.894510819e-04f,
-2.882114130e-04f, 2.869713219e-04f, 2.857308107e-04f, 2.844898817e-04f, 2.832485370e-04f, 2.820067788e-04f, 2.807646093e-04f, 2.795220306e-04f, 2.782790449e-04f, 2.770356543e-04f,
-2.757918612e-04f, 2.745476675e-04f, 2.733030756e-04f, 2.720580875e-04f, 2.708127056e-04f, 2.695669318e-04f, 2.683207684e-04f, 2.670742177e-04f, 2.658272817e-04f, 2.645799627e-04f,
-2.633322628e-04f, 2.620841841e-04f, 2.608357290e-04f, 2.595868996e-04f, 2.583376980e-04f, 2.570881265e-04f, 2.558381871e-04f, 2.545878822e-04f, 2.533372139e-04f, 2.520861843e-04f,
-2.508347957e-04f, 2.495830502e-04f, 2.483309500e-04f, 2.470784974e-04f, 2.458256944e-04f, 2.445725434e-04f, 2.433190464e-04f, 2.420652057e-04f, 2.408110234e-04f, 2.395565018e-04f,
-2.383016430e-04f, 2.370464492e-04f, 2.357909227e-04f, 2.345350655e-04f, 2.332788800e-04f, 2.320223682e-04f, 2.307655324e-04f, 2.295083747e-04f, 2.282508975e-04f, 2.269931027e-04f,
-2.257349928e-04f, 2.244765698e-04f, 2.232178359e-04f, 2.219587933e-04f, 2.206994443e-04f, 2.194397910e-04f, 2.181798357e-04f, 2.169195804e-04f, 2.156590275e-04f, 2.143981791e-04f,
-2.131370373e-04f, 2.118756045e-04f, 2.106138829e-04f, 2.093518745e-04f, 2.080895816e-04f, 2.068270064e-04f, 2.055641512e-04f, 2.043010180e-04f, 2.030376092e-04f, 2.017739268e-04f,
-2.005099732e-04f, 1.992457505e-04f, 1.979812609e-04f, 1.967165066e-04f, 1.954514898e-04f, 1.941862128e-04f, 1.929206776e-04f, 1.916548867e-04f, 1.903888420e-04f, 1.891225459e-04f,
-1.878560005e-04f, 1.865892080e-04f, 1.853221708e-04f, 1.840548908e-04f, 1.827873705e-04f, 1.815196119e-04f, 1.802516173e-04f, 1.789833888e-04f, 1.777149288e-04f, 1.764462393e-04f,
-1.751773227e-04f, 1.739081810e-04f, 1.726388166e-04f, 1.713692316e-04f, 1.700994283e-04f, 1.688294087e-04f, 1.675591753e-04f, 1.662887301e-04f, 1.650180754e-04f, 1.637472133e-04f,
-1.624761461e-04f, 1.612048761e-04f, 1.599334053e-04f, 1.586617361e-04f, 1.573898706e-04f, 1.561178111e-04f, 1.548455597e-04f, 1.535731186e-04f, 1.523004902e-04f, 1.510276765e-04f,
-1.497546798e-04f, 1.484815023e-04f, 1.472081463e-04f, 1.459346139e-04f, 1.446609073e-04f, 1.433870289e-04f, 1.421129806e-04f, 1.408387649e-04f, 1.395643839e-04f, 1.382898397e-04f,
-1.370151347e-04f, 1.357402711e-04f, 1.344652510e-04f, 1.331900767e-04f, 1.319147503e-04f, 1.306392742e-04f, 1.293636504e-04f, 1.280878813e-04f, 1.268119690e-04f, 1.255359158e-04f,
-1.242597238e-04f, 1.229833953e-04f, 1.217069325e-04f, 1.204303377e-04f, 1.191536129e-04f, 1.178767605e-04f, 1.165997827e-04f, 1.153226816e-04f, 1.140454595e-04f, 1.127681187e-04f,
-1.114906612e-04f, 1.102130894e-04f, 1.089354054e-04f, 1.076576115e-04f, 1.063797099e-04f, 1.051017028e-04f, 1.038235923e-04f, 1.025453809e-04f, 1.012670705e-04f, 9.998866356e-05f,
-9.871016216e-05f, 9.743156856e-05f, 9.615288497e-05f, 9.487411361e-05f, 9.359525669e-05f, 9.231631643e-05f, 9.103729504e-05f, 8.975819474e-05f, 8.847901775e-05f, 8.719976628e-05f,
-8.592044255e-05f, 8.464104878e-05f, 8.336158718e-05f, 8.208205996e-05f, 8.080246935e-05f, 7.952281756e-05f, 7.824310680e-05f, 7.696333930e-05f, 7.568351726e-05f, 7.440364291e-05f,
-7.312371845e-05f, 7.184374611e-05f, 7.056372810e-05f, 6.928366664e-05f, 6.800356394e-05f, 6.672342221e-05f, 6.544324368e-05f, 6.416303056e-05f, 6.288278506e-05f, 6.160250940e-05f,
-6.032220580e-05f, 5.904187646e-05f, 5.776152361e-05f, 5.648114946e-05f, 5.520075622e-05f, 5.392034611e-05f, 5.263992134e-05f, 5.135948413e-05f, 5.007903669e-05f, 4.879858124e-05f,
-4.751811999e-05f, 4.623765516e-05f, 4.495718895e-05f, 4.367672359e-05f, 4.239626128e-05f, 4.111580424e-05f, 3.983535468e-05f, 3.855491482e-05f, 3.727448687e-05f, 3.599407304e-05f,
-3.471367554e-05f, 3.343329659e-05f, 3.215293840e-05f, 3.087260318e-05f, 2.959229314e-05f, 2.831201050e-05f, 2.703175747e-05f, 2.575153625e-05f, 2.447134907e-05f, 2.319119812e-05f,
-2.191108563e-05f, 2.063101380e-05f, 1.935098484e-05f, 1.807100096e-05f, 1.679106438e-05f, 1.551117730e-05f, 1.423134194e-05f, 1.295156049e-05f, 1.167183518e-05f, 1.039216821e-05f,
-9.112561781e-06f, 7.833018115e-06f, 6.553539413e-06f, 5.274127885e-06f, 3.994785738e-06f, 2.715515180e-06f, 1.436318418e-06f, 1.571976585e-07f, -1.121844892e-06f, -2.400807026e-06f,
--3.679686538e-06f, -4.958481223e-06f, -6.237188874e-06f, -7.515807286e-06f, -8.794334255e-06f, -1.007276758e-05f, -1.135110504e-05f, -1.262934445e-05f, -1.390748360e-05f, -1.518552029e-05f,
--1.646345231e-05f, -1.774127746e-05f, -1.901899353e-05f, -2.029659834e-05f, -2.157408966e-05f, -2.285146531e-05f, -2.412872307e-05f, -2.540586076e-05f, -2.668287616e-05f, -2.795976709e-05f,
--2.923653133e-05f, -3.051316669e-05f, -3.178967098e-05f, -3.306604198e-05f, -3.434227751e-05f, -3.561837536e-05f, -3.689433334e-05f, -3.817014925e-05f, -3.944582090e-05f, -4.072134608e-05f,
--4.199672260e-05f, -4.327194827e-05f, -4.454702088e-05f, -4.582193825e-05f, -4.709669819e-05f, -4.837129848e-05f, -4.964573695e-05f, -5.092001140e-05f, -5.219411963e-05f, -5.346805946e-05f,
--5.474182869e-05f, -5.601542513e-05f, -5.728884659e-05f, -5.856209088e-05f, -5.983515580e-05f, -6.110803917e-05f, -6.238073880e-05f, -6.365325250e-05f, -6.492557808e-05f, -6.619771336e-05f,
--6.746965613e-05f, -6.874140423e-05f, -7.001295546e-05f, -7.128430764e-05f, -7.255545857e-05f, -7.382640608e-05f, -7.509714798e-05f, -7.636768208e-05f, -7.763800621e-05f, -7.890811817e-05f,
--8.017801579e-05f, -8.144769689e-05f, -8.271715927e-05f, -8.398640077e-05f, -8.525541920e-05f, -8.652421237e-05f, -8.779277812e-05f, -8.906111426e-05f, -9.032921861e-05f, -9.159708899e-05f,
--9.286472324e-05f, -9.413211916e-05f, -9.539927458e-05f, -9.666618733e-05f, -9.793285524e-05f, -9.919927612e-05f, -1.004654478e-04f, -1.017313681e-04f, -1.029970349e-04f, -1.042624459e-04f,
--1.055275991e-04f, -1.067924922e-04f, -1.080571231e-04f, -1.093214896e-04f, -1.105855895e-04f, -1.118494207e-04f, -1.131129809e-04f, -1.143762681e-04f, -1.156392801e-04f, -1.169020146e-04f,
--1.181644695e-04f, -1.194266428e-04f, -1.206885321e-04f, -1.219501353e-04f, -1.232114503e-04f, -1.244724750e-04f, -1.257332070e-04f, -1.269936444e-04f, -1.282537848e-04f, -1.295136262e-04f,
--1.307731665e-04f, -1.320324033e-04f, -1.332913347e-04f, -1.345499583e-04f, -1.358082722e-04f, -1.370662740e-04f, -1.383239617e-04f, -1.395813331e-04f, -1.408383861e-04f, -1.420951184e-04f,
--1.433515280e-04f, -1.446076127e-04f, -1.458633703e-04f, -1.471187987e-04f, -1.483738957e-04f, -1.496286592e-04f, -1.508830871e-04f, -1.521371771e-04f, -1.533909272e-04f, -1.546443352e-04f,
--1.558973989e-04f, -1.571501162e-04f, -1.584024850e-04f, -1.596545031e-04f, -1.609061684e-04f, -1.621574787e-04f, -1.634084319e-04f, -1.646590258e-04f, -1.659092584e-04f, -1.671591274e-04f,
--1.684086307e-04f, -1.696577663e-04f, -1.709065319e-04f, -1.721549254e-04f, -1.734029447e-04f, -1.746505877e-04f, -1.758978521e-04f, -1.771447360e-04f, -1.783912371e-04f, -1.796373533e-04f,
--1.808830825e-04f, -1.821284226e-04f, -1.833733714e-04f, -1.846179268e-04f, -1.858620867e-04f, -1.871058489e-04f, -1.883492114e-04f, -1.895921719e-04f, -1.908347284e-04f, -1.920768788e-04f,
--1.933186209e-04f, -1.945599526e-04f, -1.958008718e-04f, -1.970413763e-04f, -1.982814641e-04f, -1.995211330e-04f, -2.007603810e-04f, -2.019992058e-04f, -2.032376054e-04f, -2.044755777e-04f,
--2.057131205e-04f, -2.069502317e-04f, -2.081869093e-04f, -2.094231511e-04f, -2.106589550e-04f, -2.118943189e-04f, -2.131292406e-04f, -2.143637181e-04f, -2.155977494e-04f, -2.168313321e-04f,
--2.180644643e-04f, -2.192971439e-04f, -2.205293688e-04f, -2.217611367e-04f, -2.229924458e-04f, -2.242232937e-04f, -2.254536785e-04f, -2.266835981e-04f, -2.279130503e-04f, -2.291420331e-04f,
--2.303705443e-04f, -2.315985819e-04f, -2.328261438e-04f, -2.340532278e-04f, -2.352798319e-04f, -2.365059540e-04f, -2.377315920e-04f, -2.389567439e-04f, -2.401814074e-04f, -2.414055806e-04f,
--2.426292613e-04f, -2.438524475e-04f, -2.450751371e-04f, -2.462973280e-04f, -2.475190181e-04f, -2.487402053e-04f, -2.499608876e-04f, -2.511810629e-04f, -2.524007291e-04f, -2.536198841e-04f,
--2.548385258e-04f, -2.560566522e-04f, -2.572742612e-04f, -2.584913507e-04f, -2.597079187e-04f, -2.609239630e-04f, -2.621394816e-04f, -2.633544725e-04f, -2.645689336e-04f, -2.657828628e-04f,
--2.669962580e-04f, -2.682091171e-04f, -2.694214382e-04f, -2.706332191e-04f, -2.718444578e-04f, -2.730551523e-04f, -2.742653004e-04f, -2.754749001e-04f, -2.766839493e-04f, -2.778924461e-04f,
--2.791003882e-04f, -2.803077738e-04f, -2.815146007e-04f, -2.827208668e-04f, -2.839265702e-04f, -2.851317088e-04f, -2.863362805e-04f, -2.875402833e-04f, -2.887437151e-04f, -2.899465739e-04f,
--2.911488576e-04f, -2.923505642e-04f, -2.935516917e-04f, -2.947522381e-04f, -2.959522011e-04f, -2.971515790e-04f, -2.983503695e-04f, -2.995485707e-04f, -3.007461805e-04f, -3.019431969e-04f,
--3.031396179e-04f, -3.043354414e-04f, -3.055306654e-04f, -3.067252879e-04f, -3.079193069e-04f, -3.091127202e-04f, -3.103055259e-04f, -3.114977220e-04f, -3.126893065e-04f, -3.138802772e-04f,
--3.150706323e-04f, -3.162603696e-04f, -3.174494872e-04f, -3.186379830e-04f, -3.198258550e-04f, -3.210131013e-04f, -3.221997198e-04f, -3.233857084e-04f, -3.245710652e-04f, -3.257557882e-04f,
--3.269398753e-04f, -3.281233245e-04f, -3.293061339e-04f, -3.304883015e-04f, -3.316698251e-04f, -3.328507029e-04f, -3.340309328e-04f, -3.352105128e-04f, -3.363894409e-04f, -3.375677152e-04f,
--3.387453336e-04f, -3.399222941e-04f, -3.410985947e-04f, -3.422742335e-04f, -3.434492085e-04f, -3.446235176e-04f, -3.457971589e-04f, -3.469701303e-04f, -3.481424300e-04f, -3.493140559e-04f,
--3.504850060e-04f, -3.516552783e-04f, -3.528248709e-04f, -3.539937818e-04f, -3.551620090e-04f, -3.563295505e-04f, -3.574964044e-04f, -3.586625687e-04f, -3.598280413e-04f, -3.609928204e-04f,
--3.621569039e-04f, -3.633202900e-04f, -3.644829765e-04f, -3.656449616e-04f, -3.668062433e-04f, -3.679668196e-04f, -3.691266886e-04f, -3.702858482e-04f, -3.714442966e-04f, -3.726020318e-04f,
--3.737590518e-04f, -3.749153547e-04f, -3.760709385e-04f, -3.772258012e-04f, -3.783799410e-04f, -3.795333558e-04f, -3.806860437e-04f, -3.818380027e-04f, -3.829892310e-04f, -3.841397265e-04f,
--3.852894873e-04f, -3.864385116e-04f, -3.875867972e-04f, -3.887343424e-04f, -3.898811451e-04f, -3.910272034e-04f, -3.921725154e-04f, -3.933170792e-04f, -3.944608928e-04f, -3.956039543e-04f,
--3.967462617e-04f, -3.978878131e-04f, -3.990286067e-04f, -4.001686404e-04f, -4.013079124e-04f, -4.024464207e-04f, -4.035841635e-04f, -4.047211387e-04f, -4.058573445e-04f, -4.069927789e-04f,
--4.081274401e-04f, -4.092613261e-04f, -4.103944350e-04f, -4.115267649e-04f, -4.126583139e-04f, -4.137890800e-04f, -4.149190615e-04f, -4.160482563e-04f, -4.171766626e-04f, -4.183042784e-04f,
--4.194311019e-04f, -4.205571312e-04f, -4.216823643e-04f, -4.228067994e-04f, -4.239304346e-04f, -4.250532680e-04f, -4.261752976e-04f, -4.272965217e-04f, -4.284169382e-04f, -4.295365454e-04f,
--4.306553413e-04f, -4.317733240e-04f, -4.328904918e-04f, -4.340068426e-04f, -4.351223746e-04f, -4.362370860e-04f, -4.373509748e-04f, -4.384640392e-04f, -4.395762773e-04f, -4.406876872e-04f,
--4.417982671e-04f, -4.429080150e-04f, -4.440169292e-04f, -4.451250078e-04f, -4.462322489e-04f, -4.473386505e-04f, -4.484442110e-04f, -4.495489284e-04f, -4.506528008e-04f, -4.517558264e-04f,
--4.528580034e-04f, -4.539593298e-04f, -4.550598039e-04f, -4.561594238e-04f, -4.572581876e-04f, -4.583560935e-04f, -4.594531397e-04f, -4.605493243e-04f, -4.616446454e-04f, -4.627391012e-04f,
--4.638326899e-04f, -4.649254097e-04f, -4.660172587e-04f, -4.671082350e-04f, -4.681983369e-04f, -4.692875625e-04f, -4.703759100e-04f, -4.714633775e-04f, -4.725499633e-04f, -4.736356655e-04f,
--4.747204822e-04f, -4.758044117e-04f, -4.768874522e-04f, -4.779696018e-04f, -4.790508586e-04f, -4.801312210e-04f, -4.812106871e-04f, -4.822892550e-04f, -4.833669230e-04f, -4.844436892e-04f,
--4.855195519e-04f, -4.865945092e-04f, -4.876685594e-04f, -4.887417006e-04f, -4.898139310e-04f, -4.908852489e-04f, -4.919556524e-04f, -4.930251398e-04f, -4.940937093e-04f, -4.951613590e-04f,
--4.962280871e-04f, -4.972938920e-04f, -4.983587718e-04f, -4.994227247e-04f, -5.004857489e-04f, -5.015478427e-04f, -5.026090043e-04f, -5.036692318e-04f, -5.047285236e-04f, -5.057868779e-04f,
--5.068442928e-04f, -5.079007666e-04f, -5.089562976e-04f, -5.100108840e-04f, -5.110645239e-04f, -5.121172157e-04f, -5.131689576e-04f, -5.142197478e-04f, -5.152695846e-04f, -5.163184662e-04f,
--5.173663908e-04f, -5.184133568e-04f, -5.194593623e-04f, -5.205044056e-04f, -5.215484849e-04f, -5.225915986e-04f, -5.236337448e-04f, -5.246749219e-04f, -5.257151280e-04f, -5.267543615e-04f,
--5.277926206e-04f, -5.288299035e-04f, -5.298662086e-04f, -5.309015341e-04f, -5.319358783e-04f, -5.329692394e-04f, -5.340016158e-04f, -5.350330056e-04f, -5.360634073e-04f, -5.370928190e-04f,
--5.381212390e-04f, -5.391486656e-04f, -5.401750972e-04f, -5.412005319e-04f, -5.422249681e-04f, -5.432484041e-04f, -5.442708382e-04f, -5.452922686e-04f, -5.463126937e-04f, -5.473321117e-04f,
--5.483505210e-04f, -5.493679198e-04f, -5.503843065e-04f, -5.513996793e-04f, -5.524140366e-04f, -5.534273767e-04f, -5.544396979e-04f, -5.554509984e-04f, -5.564612767e-04f, -5.574705310e-04f,
--5.584787597e-04f, -5.594859610e-04f, -5.604921333e-04f, -5.614972750e-04f, -5.625013842e-04f, -5.635044595e-04f, -5.645064990e-04f, -5.655075012e-04f, -5.665074643e-04f, -5.675063867e-04f,
--5.685042668e-04f, -5.695011028e-04f, -5.704968932e-04f, -5.714916362e-04f, -5.724853302e-04f, -5.734779735e-04f, -5.744695646e-04f, -5.754601017e-04f, -5.764495832e-04f, -5.774380074e-04f,
--5.784253728e-04f, -5.794116776e-04f, -5.803969202e-04f, -5.813810991e-04f, -5.823642125e-04f, -5.833462588e-04f, -5.843272364e-04f, -5.853071436e-04f, -5.862859789e-04f, -5.872637406e-04f,
--5.882404271e-04f, -5.892160367e-04f, -5.901905679e-04f, -5.911640190e-04f, -5.921363883e-04f, -5.931076744e-04f, -5.940778755e-04f, -5.950469902e-04f, -5.960150166e-04f, -5.969819533e-04f,
--5.979477987e-04f, -5.989125511e-04f, -5.998762089e-04f, -6.008387706e-04f, -6.018002345e-04f, -6.027605991e-04f, -6.037198627e-04f, -6.046780238e-04f, -6.056350808e-04f, -6.065910320e-04f,
--6.075458760e-04f, -6.084996111e-04f, -6.094522358e-04f, -6.104037484e-04f, -6.113541474e-04f, -6.123034312e-04f, -6.132515982e-04f, -6.141986470e-04f, -6.151445758e-04f, -6.160893832e-04f,
--6.170330675e-04f, -6.179756272e-04f, -6.189170608e-04f, -6.198573667e-04f, -6.207965433e-04f, -6.217345891e-04f, -6.226715026e-04f, -6.236072821e-04f, -6.245419261e-04f, -6.254754331e-04f,
--6.264078016e-04f, -6.273390300e-04f, -6.282691167e-04f, -6.291980602e-04f, -6.301258591e-04f, -6.310525117e-04f, -6.319780165e-04f, -6.329023719e-04f, -6.338255766e-04f, -6.347476289e-04f,
--6.356685273e-04f, -6.365882703e-04f, -6.375068564e-04f, -6.384242840e-04f, -6.393405517e-04f, -6.402556579e-04f, -6.411696012e-04f, -6.420823799e-04f, -6.429939927e-04f, -6.439044379e-04f,
--6.448137142e-04f, -6.457218199e-04f, -6.466287537e-04f, -6.475345140e-04f, -6.484390992e-04f, -6.493425080e-04f, -6.502447389e-04f, -6.511457902e-04f, -6.520456607e-04f, -6.529443487e-04f,
--6.538418528e-04f, -6.547381715e-04f, -6.556333033e-04f, -6.565272468e-04f, -6.574200005e-04f, -6.583115630e-04f, -6.592019327e-04f, -6.600911081e-04f, -6.609790879e-04f, -6.618658706e-04f,
--6.627514547e-04f, -6.636358387e-04f, -6.645190212e-04f, -6.654010007e-04f, -6.662817758e-04f, -6.671613451e-04f, -6.680397071e-04f, -6.689168603e-04f, -6.697928033e-04f, -6.706675347e-04f,
--6.715410530e-04f, -6.724133568e-04f, -6.732844446e-04f, -6.741543151e-04f, -6.750229668e-04f, -6.758903983e-04f, -6.767566081e-04f, -6.776215949e-04f, -6.784853571e-04f, -6.793478934e-04f,
--6.802092024e-04f, -6.810692827e-04f, -6.819281328e-04f, -6.827857514e-04f, -6.836421370e-04f, -6.844972882e-04f, -6.853512036e-04f, -6.862038819e-04f, -6.870553216e-04f, -6.879055213e-04f,
--6.887544796e-04f, -6.896021952e-04f, -6.904486667e-04f, -6.912938926e-04f, -6.921378716e-04f, -6.929806024e-04f, -6.938220834e-04f, -6.946623134e-04f, -6.955012910e-04f, -6.963390147e-04f,
--6.971754833e-04f, -6.980106953e-04f, -6.988446495e-04f, -6.996773443e-04f, -7.005087785e-04f, -7.013389507e-04f, -7.021678596e-04f, -7.029955038e-04f, -7.038218819e-04f, -7.046469925e-04f,
--7.054708345e-04f, -7.062934063e-04f, -7.071147066e-04f, -7.079347342e-04f, -7.087534876e-04f, -7.095709656e-04f, -7.103871668e-04f, -7.112020898e-04f, -7.120157334e-04f, -7.128280961e-04f,
--7.136391768e-04f, -7.144489740e-04f, -7.152574864e-04f, -7.160647128e-04f, -7.168706517e-04f, -7.176753020e-04f, -7.184786622e-04f, -7.192807311e-04f, -7.200815073e-04f, -7.208809896e-04f,
--7.216791766e-04f, -7.224760671e-04f, -7.232716598e-04f, -7.240659533e-04f, -7.248589464e-04f, -7.256506377e-04f, -7.264410260e-04f, -7.272301101e-04f, -7.280178885e-04f, -7.288043601e-04f,
--7.295895235e-04f, -7.303733775e-04f, -7.311559208e-04f, -7.319371521e-04f, -7.327170702e-04f, -7.334956738e-04f, -7.342729616e-04f, -7.350489324e-04f, -7.358235849e-04f, -7.365969179e-04f,
--7.373689300e-04f, -7.381396200e-04f, -7.389089868e-04f, -7.396770290e-04f, -7.404437454e-04f, -7.412091347e-04f, -7.419731957e-04f, -7.427359272e-04f, -7.434973279e-04f, -7.442573967e-04f,
--7.450161322e-04f, -7.457735332e-04f, -7.465295985e-04f, -7.472843269e-04f, -7.480377172e-04f, -7.487897681e-04f, -7.495404785e-04f, -7.502898470e-04f, -7.510378725e-04f, -7.517845539e-04f,
--7.525298897e-04f, -7.532738790e-04f, -7.540165204e-04f, -7.547578128e-04f, -7.554977550e-04f, -7.562363457e-04f, -7.569735838e-04f, -7.577094681e-04f, -7.584439974e-04f, -7.591771705e-04f,
--7.599089863e-04f, -7.606394434e-04f, -7.613685409e-04f, -7.620962774e-04f, -7.628226518e-04f, -7.635476630e-04f, -7.642713098e-04f, -7.649935910e-04f, -7.657145054e-04f, -7.664340519e-04f,
--7.671522293e-04f, -7.678690364e-04f, -7.685844722e-04f, -7.692985354e-04f, -7.700112250e-04f, -7.707225397e-04f, -7.714324784e-04f, -7.721410400e-04f, -7.728482233e-04f, -7.735540272e-04f,
--7.742584505e-04f, -7.749614922e-04f, -7.756631511e-04f, -7.763634260e-04f, -7.770623159e-04f, -7.777598196e-04f, -7.784559360e-04f, -7.791506640e-04f, -7.798440024e-04f, -7.805359502e-04f,
--7.812265062e-04f, -7.819156694e-04f, -7.826034386e-04f, -7.832898127e-04f, -7.839747906e-04f, -7.846583713e-04f, -7.853405535e-04f, -7.860213364e-04f, -7.867007186e-04f, -7.873786992e-04f,
--7.880552771e-04f, -7.887304512e-04f, -7.894042204e-04f, -7.900765836e-04f, -7.907475397e-04f, -7.914170878e-04f, -7.920852266e-04f, -7.927519552e-04f, -7.934172725e-04f, -7.940811773e-04f,
--7.947436688e-04f, -7.954047457e-04f, -7.960644070e-04f, -7.967226518e-04f, -7.973794788e-04f, -7.980348872e-04f, -7.986888757e-04f, -7.993414435e-04f, -7.999925894e-04f, -8.006423125e-04f,
--8.012906116e-04f, -8.019374858e-04f, -8.025829340e-04f, -8.032269552e-04f, -8.038695483e-04f, -8.045107124e-04f, -8.051504464e-04f, -8.057887493e-04f, -8.064256201e-04f, -8.070610577e-04f,
--8.076950613e-04f, -8.083276297e-04f, -8.089587619e-04f, -8.095884570e-04f, -8.102167139e-04f, -8.108435317e-04f, -8.114689093e-04f, -8.120928458e-04f, -8.127153402e-04f, -8.133363914e-04f,
--8.139559986e-04f, -8.145741606e-04f, -8.151908767e-04f, -8.158061456e-04f, -8.164199666e-04f, -8.170323386e-04f, -8.176432606e-04f, -8.182527317e-04f, -8.188607509e-04f, -8.194673173e-04f,
--8.200724298e-04f, -8.206760876e-04f, -8.212782897e-04f, -8.218790351e-04f, -8.224783229e-04f, -8.230761521e-04f, -8.236725218e-04f, -8.242674311e-04f, -8.248608790e-04f, -8.254528646e-04f,
--8.260433869e-04f, -8.266324450e-04f, -8.272200380e-04f, -8.278061650e-04f, -8.283908250e-04f, -8.289740171e-04f, -8.295557404e-04f, -8.301359940e-04f, -8.307147770e-04f, -8.312920884e-04f,
--8.318679274e-04f, -8.324422930e-04f, -8.330151844e-04f, -8.335866006e-04f, -8.341565408e-04f, -8.347250040e-04f, -8.352919894e-04f, -8.358574961e-04f, -8.364215231e-04f, -8.369840697e-04f,
--8.375451349e-04f, -8.381047178e-04f, -8.386628176e-04f, -8.392194334e-04f, -8.397745643e-04f, -8.403282094e-04f, -8.408803680e-04f, -8.414310391e-04f, -8.419802218e-04f, -8.425279154e-04f,
--8.430741189e-04f, -8.436188315e-04f, -8.441620523e-04f, -8.447037806e-04f, -8.452440154e-04f, -8.457827560e-04f, -8.463200014e-04f, -8.468557508e-04f, -8.473900035e-04f, -8.479227585e-04f,
--8.484540151e-04f, -8.489837724e-04f, -8.495120296e-04f, -8.500387859e-04f, -8.505640404e-04f, -8.510877924e-04f, -8.516100410e-04f, -8.521307855e-04f, -8.526500249e-04f, -8.531677585e-04f,
--8.536839856e-04f, -8.541987053e-04f, -8.547119167e-04f, -8.552236192e-04f, -8.557338119e-04f, -8.562424940e-04f, -8.567496648e-04f, -8.572553235e-04f, -8.577594692e-04f, -8.582621012e-04f,
--8.587632188e-04f, -8.592628211e-04f, -8.597609074e-04f, -8.602574769e-04f, -8.607525289e-04f, -8.612460626e-04f, -8.617380772e-04f, -8.622285719e-04f, -8.627175461e-04f, -8.632049990e-04f,
--8.636909297e-04f, -8.641753377e-04f, -8.646582220e-04f, -8.651395821e-04f, -8.656194171e-04f, -8.660977263e-04f, -8.665745090e-04f, -8.670497645e-04f, -8.675234919e-04f, -8.679956907e-04f,
--8.684663601e-04f, -8.689354993e-04f, -8.694031076e-04f, -8.698691844e-04f, -8.703337289e-04f, -8.707967404e-04f, -8.712582181e-04f, -8.717181615e-04f, -8.721765698e-04f, -8.726334423e-04f,
--8.730887783e-04f, -8.735425771e-04f, -8.739948380e-04f, -8.744455603e-04f, -8.748947434e-04f, -8.753423866e-04f, -8.757884892e-04f, -8.762330504e-04f, -8.766760697e-04f, -8.771175464e-04f,
--8.775574798e-04f, -8.779958692e-04f, -8.784327140e-04f, -8.788680134e-04f, -8.793017670e-04f, -8.797339739e-04f, -8.801646336e-04f, -8.805937454e-04f, -8.810213086e-04f, -8.814473227e-04f,
--8.818717869e-04f, -8.822947007e-04f, -8.827160633e-04f, -8.831358742e-04f, -8.835541327e-04f, -8.839708382e-04f, -8.843859902e-04f, -8.847995878e-04f, -8.852116306e-04f, -8.856221180e-04f,
--8.860310492e-04f, -8.864384237e-04f, -8.868442409e-04f, -8.872485002e-04f, -8.876512010e-04f, -8.880523427e-04f, -8.884519246e-04f, -8.888499462e-04f, -8.892464069e-04f, -8.896413062e-04f,
--8.900346433e-04f, -8.904264178e-04f, -8.908166290e-04f, -8.912052764e-04f, -8.915923594e-04f, -8.919778775e-04f, -8.923618300e-04f, -8.927442164e-04f, -8.931250361e-04f, -8.935042886e-04f,
--8.938819732e-04f, -8.942580896e-04f, -8.946326370e-04f, -8.950056150e-04f, -8.953770229e-04f, -8.957468604e-04f, -8.961151267e-04f, -8.964818214e-04f, -8.968469439e-04f, -8.972104938e-04f,
--8.975724704e-04f, -8.979328732e-04f, -8.982917017e-04f, -8.986489555e-04f, -8.990046339e-04f, -8.993587364e-04f, -8.997112626e-04f, -9.000622119e-04f, -9.004115838e-04f, -9.007593779e-04f,
--9.011055935e-04f, -9.014502302e-04f, -9.017932875e-04f, -9.021347650e-04f, -9.024746620e-04f, -9.028129782e-04f, -9.031497130e-04f, -9.034848660e-04f, -9.038184366e-04f, -9.041504244e-04f,
--9.044808290e-04f, -9.048096498e-04f, -9.051368863e-04f, -9.054625382e-04f, -9.057866048e-04f, -9.061090859e-04f, -9.064299809e-04f, -9.067492893e-04f, -9.070670108e-04f, -9.073831447e-04f,
--9.076976908e-04f, -9.080106486e-04f, -9.083220175e-04f, -9.086317973e-04f, -9.089399873e-04f, -9.092465873e-04f, -9.095515968e-04f, -9.098550152e-04f, -9.101568423e-04f, -9.104570776e-04f,
--9.107557207e-04f, -9.110527711e-04f, -9.113482284e-04f, -9.116420923e-04f, -9.119343623e-04f, -9.122250379e-04f, -9.125141189e-04f, -9.128016048e-04f, -9.130874952e-04f, -9.133717897e-04f,
--9.136544879e-04f, -9.139355894e-04f, -9.142150939e-04f, -9.144930009e-04f, -9.147693101e-04f, -9.150440210e-04f, -9.153171334e-04f, -9.155886469e-04f, -9.158585609e-04f, -9.161268753e-04f,
--9.163935897e-04f, -9.166587036e-04f, -9.169222167e-04f, -9.171841287e-04f, -9.174444391e-04f, -9.177031478e-04f, -9.179602542e-04f, -9.182157581e-04f, -9.184696591e-04f, -9.187219568e-04f,
--9.189726510e-04f, -9.192217414e-04f, -9.194692274e-04f, -9.197151090e-04f, -9.199593856e-04f, -9.202020570e-04f, -9.204431229e-04f, -9.206825830e-04f, -9.209204369e-04f, -9.211566843e-04f,
--9.213913249e-04f, -9.216243585e-04f, -9.218557847e-04f, -9.220856031e-04f, -9.223138136e-04f, -9.225404158e-04f, -9.227654094e-04f, -9.229887941e-04f, -9.232105697e-04f, -9.234307358e-04f,
--9.236492922e-04f, -9.238662386e-04f, -9.240815748e-04f, -9.242953004e-04f, -9.245074151e-04f, -9.247179188e-04f, -9.249268111e-04f, -9.251340919e-04f, -9.253397607e-04f, -9.255438174e-04f,
--9.257462617e-04f, -9.259470934e-04f, -9.261463123e-04f, -9.263439180e-04f, -9.265399103e-04f, -9.267342890e-04f, -9.269270539e-04f, -9.271182047e-04f, -9.273077412e-04f, -9.274956631e-04f,
--9.276819703e-04f, -9.278666626e-04f, -9.280497396e-04f, -9.282312012e-04f, -9.284110471e-04f, -9.285892772e-04f, -9.287658913e-04f, -9.289408891e-04f, -9.291142704e-04f, -9.292860351e-04f,
--9.294561829e-04f, -9.296247137e-04f, -9.297916272e-04f, -9.299569233e-04f, -9.301206017e-04f, -9.302826624e-04f, -9.304431051e-04f, -9.306019296e-04f, -9.307591358e-04f, -9.309147234e-04f,
--9.310686924e-04f, -9.312210426e-04f, -9.313717737e-04f, -9.315208857e-04f, -9.316683783e-04f, -9.318142515e-04f, -9.319585050e-04f, -9.321011388e-04f, -9.322421526e-04f, -9.323815463e-04f,
--9.325193199e-04f, -9.326554730e-04f, -9.327900057e-04f, -9.329229178e-04f, -9.330542091e-04f, -9.331838796e-04f, -9.333119290e-04f, -9.334383573e-04f, -9.335631644e-04f, -9.336863501e-04f,
--9.338079144e-04f, -9.339278571e-04f, -9.340461780e-04f, -9.341628772e-04f, -9.342779545e-04f, -9.343914098e-04f, -9.345032431e-04f, -9.346134541e-04f, -9.347220429e-04f, -9.348290093e-04f,
--9.349343532e-04f, -9.350380747e-04f, -9.351401735e-04f, -9.352406496e-04f, -9.353395030e-04f, -9.354367336e-04f, -9.355323413e-04f, -9.356263260e-04f, -9.357186876e-04f, -9.358094263e-04f,
--9.358985417e-04f, -9.359860340e-04f, -9.360719030e-04f, -9.361561488e-04f, -9.362387712e-04f, -9.363197702e-04f, -9.363991458e-04f, -9.364768979e-04f, -9.365530266e-04f, -9.366275317e-04f,
--9.367004133e-04f, -9.367716713e-04f, -9.368413057e-04f, -9.369093165e-04f, -9.369757036e-04f, -9.370404671e-04f, -9.371036069e-04f, -9.371651231e-04f, -9.372250156e-04f, -9.372832844e-04f,
--9.373399295e-04f, -9.373949509e-04f, -9.374483487e-04f, -9.375001227e-04f, -9.375502732e-04f, -9.375988000e-04f, -9.376457031e-04f, -9.376909827e-04f, -9.377346386e-04f, -9.377766710e-04f,
--9.378170799e-04f, -9.378558653e-04f, -9.378930272e-04f, -9.379285656e-04f, -9.379624807e-04f, -9.379947724e-04f, -9.380254408e-04f, -9.380544859e-04f, -9.380819079e-04f, -9.381077066e-04f,
--9.381318823e-04f, -9.381544349e-04f, -9.381753645e-04f, -9.381946712e-04f, -9.382123551e-04f, -9.382284162e-04f, -9.382428545e-04f, -9.382556702e-04f, -9.382668634e-04f, -9.382764341e-04f,
--9.382843824e-04f, -9.382907083e-04f, -9.382954121e-04f, -9.382984937e-04f, -9.382999533e-04f, -9.382997910e-04f, -9.382980068e-04f, -9.382946009e-04f, -9.382895734e-04f, -9.382829244e-04f,
--9.382746539e-04f, -9.382647622e-04f, -9.382532493e-04f, -9.382401153e-04f, -9.382253604e-04f, -9.382089847e-04f, -9.381909884e-04f, -9.381713714e-04f, -9.381501341e-04f, -9.381272765e-04f,
--9.381027988e-04f, -9.380767010e-04f, -9.380489834e-04f, -9.380196462e-04f, -9.379886893e-04f, -9.379561131e-04f, -9.379219176e-04f, -9.378861031e-04f, -9.378486696e-04f, -9.378096174e-04f,
--9.377689466e-04f, -9.377266574e-04f, -9.376827499e-04f, -9.376372244e-04f, -9.375900810e-04f, -9.375413198e-04f, -9.374909412e-04f, -9.374389452e-04f, -9.373853320e-04f, -9.373301020e-04f,
--9.372732551e-04f, -9.372147917e-04f, -9.371547119e-04f, -9.370930160e-04f, -9.370297041e-04f, -9.369647765e-04f, -9.368982333e-04f, -9.368300749e-04f, -9.367603013e-04f, -9.366889129e-04f,
--9.366159098e-04f, -9.365412923e-04f, -9.364650606e-04f, -9.363872149e-04f, -9.363077555e-04f, -9.362266826e-04f, -9.361439964e-04f, -9.360596973e-04f, -9.359737853e-04f, -9.358862608e-04f,
--9.357971241e-04f, -9.357063754e-04f, -9.356140148e-04f, -9.355200428e-04f, -9.354244596e-04f, -9.353272654e-04f, -9.352284604e-04f, -9.351280451e-04f, -9.350260196e-04f, -9.349223842e-04f,
--9.348171391e-04f, -9.347102848e-04f, -9.346018214e-04f, -9.344917493e-04f, -9.343800686e-04f, -9.342667799e-04f, -9.341518832e-04f, -9.340353790e-04f, -9.339172674e-04f, -9.337975489e-04f,
--9.336762238e-04f, -9.335532922e-04f, -9.334287546e-04f, -9.333026113e-04f, -9.331748626e-04f, -9.330455087e-04f, -9.329145501e-04f, -9.327819871e-04f, -9.326478199e-04f, -9.325120489e-04f,
--9.323746745e-04f, -9.322356969e-04f, -9.320951166e-04f, -9.319529338e-04f, -9.318091490e-04f, -9.316637624e-04f, -9.315167743e-04f, -9.313681853e-04f, -9.312179955e-04f, -9.310662055e-04f,
--9.309128154e-04f, -9.307578258e-04f, -9.306012369e-04f, -9.304430492e-04f, -9.302832629e-04f, -9.301218785e-04f, -9.299588964e-04f, -9.297943170e-04f, -9.296281405e-04f, -9.294603675e-04f,
--9.292909982e-04f, -9.291200331e-04f, -9.289474727e-04f, -9.287733171e-04f, -9.285975670e-04f, -9.284202227e-04f, -9.282412845e-04f, -9.280607529e-04f, -9.278786283e-04f, -9.276949112e-04f,
--9.275096018e-04f, -9.273227008e-04f, -9.271342084e-04f, -9.269441251e-04f, -9.267524513e-04f, -9.265591874e-04f, -9.263643340e-04f, -9.261678913e-04f, -9.259698600e-04f, -9.257702403e-04f,
--9.255690328e-04f, -9.253662378e-04f, -9.251618559e-04f, -9.249558875e-04f, -9.247483330e-04f, -9.245391929e-04f, -9.243284677e-04f, -9.241161578e-04f, -9.239022636e-04f, -9.236867858e-04f,
--9.234697246e-04f, -9.232510807e-04f, -9.230308544e-04f, -9.228090462e-04f, -9.225856567e-04f, -9.223606863e-04f, -9.221341355e-04f, -9.219060048e-04f, -9.216762947e-04f, -9.214450057e-04f,
--9.212121382e-04f, -9.209776928e-04f, -9.207416700e-04f, -9.205040703e-04f, -9.202648941e-04f, -9.200241421e-04f, -9.197818147e-04f, -9.195379124e-04f, -9.192924357e-04f, -9.190453853e-04f,
--9.187967615e-04f, -9.185465650e-04f, -9.182947962e-04f, -9.180414556e-04f, -9.177865440e-04f, -9.175300616e-04f, -9.172720092e-04f, -9.170123872e-04f, -9.167511962e-04f, -9.164884367e-04f,
--9.162241093e-04f, -9.159582146e-04f, -9.156907531e-04f, -9.154217253e-04f, -9.151511318e-04f, -9.148789732e-04f, -9.146052501e-04f, -9.143299630e-04f, -9.140531125e-04f, -9.137746991e-04f,
--9.134947235e-04f, -9.132131862e-04f, -9.129300879e-04f, -9.126454290e-04f, -9.123592102e-04f, -9.120714321e-04f, -9.117820952e-04f, -9.114912002e-04f, -9.111987477e-04f, -9.109047383e-04f,
--9.106091725e-04f, -9.103120510e-04f, -9.100133744e-04f, -9.097131433e-04f, -9.094113583e-04f, -9.091080200e-04f, -9.088031291e-04f, -9.084966861e-04f, -9.081886918e-04f, -9.078791467e-04f,
--9.075680515e-04f, -9.072554067e-04f, -9.069412131e-04f, -9.066254712e-04f, -9.063081818e-04f, -9.059893454e-04f, -9.056689627e-04f, -9.053470344e-04f, -9.050235611e-04f, -9.046985434e-04f,
--9.043719821e-04f, -9.040438777e-04f, -9.037142310e-04f, -9.033830425e-04f, -9.030503131e-04f, -9.027160433e-04f, -9.023802338e-04f, -9.020428853e-04f, -9.017039984e-04f, -9.013635739e-04f,
--9.010216125e-04f, -9.006781147e-04f, -9.003330814e-04f, -8.999865131e-04f, -8.996384107e-04f, -8.992887748e-04f, -8.989376060e-04f, -8.985849051e-04f, -8.982306729e-04f, -8.978749099e-04f,
--8.975176169e-04f, -8.971587947e-04f, -8.967984439e-04f, -8.964365653e-04f, -8.960731595e-04f, -8.957082273e-04f, -8.953417695e-04f, -8.949737867e-04f, -8.946042797e-04f, -8.942332492e-04f,
--8.938606960e-04f, -8.934866207e-04f, -8.931110242e-04f, -8.927339072e-04f, -8.923552704e-04f, -8.919751145e-04f, -8.915934404e-04f, -8.912102487e-04f, -8.908255403e-04f, -8.904393158e-04f,
--8.900515761e-04f, -8.896623220e-04f, -8.892715540e-04f, -8.888792732e-04f, -8.884854802e-04f, -8.880901757e-04f, -8.876933607e-04f, -8.872950357e-04f, -8.868952018e-04f, -8.864938595e-04f,
--8.860910097e-04f, -8.856866533e-04f, -8.852807909e-04f, -8.848734234e-04f, -8.844645516e-04f, -8.840541762e-04f, -8.836422982e-04f, -8.832289182e-04f, -8.828140371e-04f, -8.823976557e-04f,
--8.819797748e-04f, -8.815603953e-04f, -8.811395179e-04f, -8.807171435e-04f, -8.802932729e-04f, -8.798679069e-04f, -8.794410463e-04f, -8.790126920e-04f, -8.785828448e-04f, -8.781515056e-04f,
--8.777186751e-04f, -8.772843543e-04f, -8.768485439e-04f, -8.764112448e-04f, -8.759724579e-04f, -8.755321840e-04f, -8.750904240e-04f, -8.746471786e-04f, -8.742024489e-04f, -8.737562356e-04f,
--8.733085396e-04f, -8.728593617e-04f, -8.724087029e-04f, -8.719565640e-04f, -8.715029458e-04f, -8.710478494e-04f, -8.705912754e-04f, -8.701332249e-04f, -8.696736986e-04f, -8.692126975e-04f,
--8.687502225e-04f, -8.682862745e-04f, -8.678208543e-04f, -8.673539628e-04f, -8.668856010e-04f, -8.664157698e-04f, -8.659444700e-04f, -8.654717025e-04f, -8.649974683e-04f, -8.645217683e-04f,
--8.640446034e-04f, -8.635659744e-04f, -8.630858824e-04f, -8.626043282e-04f, -8.621213128e-04f, -8.616368371e-04f, -8.611509020e-04f, -8.606635084e-04f, -8.601746574e-04f, -8.596843497e-04f,
--8.591925864e-04f, -8.586993683e-04f, -8.582046966e-04f, -8.577085720e-04f, -8.572109955e-04f, -8.567119681e-04f, -8.562114907e-04f, -8.557095643e-04f, -8.552061898e-04f, -8.547013683e-04f,
--8.541951006e-04f, -8.536873878e-04f, -8.531782307e-04f, -8.526676304e-04f, -8.521555878e-04f, -8.516421040e-04f, -8.511271798e-04f, -8.506108163e-04f, -8.500930145e-04f, -8.495737753e-04f,
--8.490530997e-04f, -8.485309887e-04f, -8.480074433e-04f, -8.474824646e-04f, -8.469560534e-04f, -8.464282108e-04f, -8.458989377e-04f, -8.453682353e-04f, -8.448361045e-04f, -8.443025463e-04f,
--8.437675617e-04f, -8.432311517e-04f, -8.426933174e-04f, -8.421540597e-04f, -8.416133797e-04f, -8.410712785e-04f, -8.405277569e-04f, -8.399828162e-04f, -8.394364572e-04f, -8.388886810e-04f,
--8.383394887e-04f, -8.377888813e-04f, -8.372368598e-04f, -8.366834253e-04f, -8.361285788e-04f, -8.355723214e-04f, -8.350146541e-04f, -8.344555780e-04f, -8.338950941e-04f, -8.333332034e-04f,
--8.327699071e-04f, -8.322052062e-04f, -8.316391017e-04f, -8.310715948e-04f, -8.305026864e-04f, -8.299323778e-04f, -8.293606698e-04f, -8.287875637e-04f, -8.282130604e-04f, -8.276371611e-04f,
--8.270598669e-04f, -8.264811788e-04f, -8.259010979e-04f, -8.253196253e-04f, -8.247367621e-04f, -8.241525094e-04f, -8.235668683e-04f, -8.229798399e-04f, -8.223914252e-04f, -8.218016255e-04f,
--8.212104418e-04f, -8.206178751e-04f, -8.200239267e-04f, -8.194285976e-04f, -8.188318889e-04f, -8.182338018e-04f, -8.176343374e-04f, -8.170334967e-04f, -8.164312810e-04f, -8.158276914e-04f,
--8.152227289e-04f, -8.146163947e-04f, -8.140086899e-04f, -8.133996158e-04f, -8.127891733e-04f, -8.121773637e-04f, -8.115641881e-04f, -8.109496476e-04f, -8.103337435e-04f, -8.097164767e-04f,
--8.090978486e-04f, -8.084778601e-04f, -8.078565126e-04f, -8.072338072e-04f, -8.066097449e-04f, -8.059843270e-04f, -8.053575547e-04f, -8.047294291e-04f, -8.040999514e-04f, -8.034691227e-04f,
--8.028369442e-04f, -8.022034172e-04f, -8.015685427e-04f, -8.009323220e-04f, -8.002947562e-04f, -7.996558466e-04f, -7.990155943e-04f, -7.983740005e-04f, -7.977310664e-04f, -7.970867931e-04f,
--7.964411820e-04f, -7.957942342e-04f, -7.951459509e-04f, -7.944963332e-04f, -7.938453825e-04f, -7.931930998e-04f, -7.925394865e-04f, -7.918845437e-04f, -7.912282727e-04f, -7.905706746e-04f,
--7.899117507e-04f, -7.892515023e-04f, -7.885899304e-04f, -7.879270364e-04f, -7.872628214e-04f, -7.865972868e-04f, -7.859304337e-04f, -7.852622634e-04f, -7.845927771e-04f, -7.839219761e-04f,
--7.832498615e-04f, -7.825764347e-04f, -7.819016969e-04f, -7.812256493e-04f, -7.805482931e-04f, -7.798696297e-04f, -7.791896603e-04f, -7.785083862e-04f, -7.778258085e-04f, -7.771419286e-04f,
--7.764567477e-04f, -7.757702671e-04f, -7.750824880e-04f, -7.743934118e-04f, -7.737030397e-04f, -7.730113729e-04f, -7.723184128e-04f, -7.716241606e-04f, -7.709286176e-04f, -7.702317851e-04f,
--7.695336644e-04f, -7.688342567e-04f, -7.681335634e-04f, -7.674315857e-04f, -7.667283249e-04f, -7.660237824e-04f, -7.653179594e-04f, -7.646108572e-04f, -7.639024771e-04f, -7.631928205e-04f,
--7.624818886e-04f, -7.617696827e-04f, -7.610562042e-04f, -7.603414543e-04f, -7.596254345e-04f, -7.589081459e-04f, -7.581895899e-04f, -7.574697679e-04f, -7.567486811e-04f, -7.560263309e-04f,
--7.553027186e-04f, -7.545778455e-04f, -7.538517131e-04f, -7.531243225e-04f, -7.523956751e-04f, -7.516657723e-04f, -7.509346155e-04f, -7.502022059e-04f, -7.494685449e-04f, -7.487336338e-04f,
--7.479974740e-04f, -7.472600669e-04f, -7.465214138e-04f, -7.457815160e-04f, -7.450403749e-04f, -7.442979919e-04f, -7.435543683e-04f, -7.428095055e-04f, -7.420634048e-04f, -7.413160677e-04f,
--7.405674955e-04f, -7.398176895e-04f, -7.390666511e-04f, -7.383143817e-04f, -7.375608827e-04f, -7.368061555e-04f, -7.360502014e-04f, -7.352930218e-04f, -7.345346182e-04f, -7.337749918e-04f,
--7.330141441e-04f, -7.322520765e-04f, -7.314887904e-04f, -7.307242871e-04f, -7.299585681e-04f, -7.291916347e-04f, -7.284234884e-04f, -7.276541306e-04f, -7.268835626e-04f, -7.261117859e-04f,
--7.253388018e-04f, -7.245646119e-04f, -7.237892175e-04f, -7.230126200e-04f, -7.222348208e-04f, -7.214558214e-04f, -7.206756232e-04f, -7.198942276e-04f, -7.191116360e-04f, -7.183278499e-04f,
--7.175428706e-04f, -7.167566997e-04f, -7.159693385e-04f, -7.151807885e-04f, -7.143910511e-04f, -7.136001277e-04f, -7.128080199e-04f, -7.120147290e-04f, -7.112202565e-04f, -7.104246038e-04f,
--7.096277724e-04f, -7.088297637e-04f, -7.080305793e-04f, -7.072302204e-04f, -7.064286887e-04f, -7.056259855e-04f, -7.048221123e-04f, -7.040170706e-04f, -7.032108618e-04f, -7.024034874e-04f,
--7.015949489e-04f, -7.007852478e-04f, -6.999743855e-04f, -6.991623634e-04f, -6.983491831e-04f, -6.975348461e-04f, -6.967193538e-04f, -6.959027077e-04f, -6.950849092e-04f, -6.942659600e-04f,
--6.934458614e-04f, -6.926246149e-04f, -6.918022221e-04f, -6.909786844e-04f, -6.901540034e-04f, -6.893281804e-04f, -6.885012171e-04f, -6.876731149e-04f, -6.868438753e-04f, -6.860134999e-04f,
--6.851819901e-04f, -6.843493474e-04f, -6.835155734e-04f, -6.826806695e-04f, -6.818446373e-04f, -6.810074783e-04f, -6.801691940e-04f, -6.793297859e-04f, -6.784892556e-04f, -6.776476046e-04f,
--6.768048343e-04f, -6.759609463e-04f, -6.751159423e-04f, -6.742698235e-04f, -6.734225917e-04f, -6.725742484e-04f, -6.717247950e-04f, -6.708742331e-04f, -6.700225643e-04f, -6.691697901e-04f,
--6.683159120e-04f, -6.674609316e-04f, -6.666048504e-04f, -6.657476701e-04f, -6.648893920e-04f, -6.640300178e-04f, -6.631695491e-04f, -6.623079873e-04f, -6.614453341e-04f, -6.605815910e-04f,
--6.597167595e-04f, -6.588508413e-04f, -6.579838379e-04f, -6.571157508e-04f, -6.562465817e-04f, -6.553763320e-04f, -6.545050034e-04f, -6.536325975e-04f, -6.527591158e-04f, -6.518845598e-04f,
--6.510089313e-04f, -6.501322316e-04f, -6.492544626e-04f, -6.483756256e-04f, -6.474957223e-04f, -6.466147543e-04f, -6.457327232e-04f, -6.448496306e-04f, -6.439654780e-04f, -6.430802671e-04f,
--6.421939995e-04f, -6.413066766e-04f, -6.404183003e-04f, -6.395288720e-04f, -6.386383933e-04f, -6.377468659e-04f, -6.368542913e-04f, -6.359606712e-04f, -6.350660072e-04f, -6.341703009e-04f,
--6.332735539e-04f, -6.323757678e-04f, -6.314769443e-04f, -6.305770849e-04f, -6.296761913e-04f, -6.287742651e-04f, -6.278713078e-04f, -6.269673213e-04f, -6.260623070e-04f, -6.251562666e-04f,
--6.242492017e-04f, -6.233411140e-04f, -6.224320051e-04f, -6.215218766e-04f, -6.206107302e-04f, -6.196985674e-04f, -6.187853900e-04f, -6.178711997e-04f, -6.169559979e-04f, -6.160397864e-04f,
--6.151225668e-04f, -6.142043408e-04f, -6.132851100e-04f, -6.123648761e-04f, -6.114436406e-04f, -6.105214054e-04f, -6.095981720e-04f, -6.086739421e-04f, -6.077487173e-04f, -6.068224994e-04f,
--6.058952899e-04f, -6.049670905e-04f, -6.040379030e-04f, -6.031077289e-04f, -6.021765700e-04f, -6.012444279e-04f, -6.003113043e-04f, -5.993772008e-04f, -5.984421191e-04f, -5.975060610e-04f,
--5.965690281e-04f, -5.956310220e-04f, -5.946920445e-04f, -5.937520972e-04f, -5.928111818e-04f, -5.918693000e-04f, -5.909264536e-04f, -5.899826441e-04f, -5.890378733e-04f, -5.880921428e-04f,
--5.871454544e-04f, -5.861978098e-04f, -5.852492107e-04f, -5.842996586e-04f, -5.833491555e-04f, -5.823977029e-04f, -5.814453026e-04f, -5.804919562e-04f, -5.795376655e-04f, -5.785824322e-04f,
--5.776262580e-04f, -5.766691446e-04f, -5.757110937e-04f, -5.747521070e-04f, -5.737921863e-04f, -5.728313332e-04f, -5.718695496e-04f, -5.709068370e-04f, -5.699431973e-04f, -5.689786321e-04f,
--5.680131431e-04f, -5.670467322e-04f, -5.660794010e-04f, -5.651111513e-04f, -5.641419847e-04f, -5.631719031e-04f, -5.622009081e-04f, -5.612290015e-04f, -5.602561851e-04f, -5.592824605e-04f,
--5.583078295e-04f, -5.573322938e-04f, -5.563558552e-04f, -5.553785155e-04f, -5.544002764e-04f, -5.534211395e-04f, -5.524411068e-04f, -5.514601798e-04f, -5.504783605e-04f, -5.494956504e-04f,
--5.485120515e-04f, -5.475275653e-04f, -5.465421938e-04f, -5.455559386e-04f, -5.445688015e-04f, -5.435807843e-04f, -5.425918888e-04f, -5.416021166e-04f, -5.406114696e-04f, -5.396199495e-04f,
--5.386275582e-04f, -5.376342973e-04f, -5.366401686e-04f, -5.356451739e-04f, -5.346493151e-04f, -5.336525938e-04f, -5.326550118e-04f, -5.316565709e-04f, -5.306572730e-04f, -5.296571197e-04f,
--5.286561129e-04f, -5.276542543e-04f, -5.266515457e-04f, -5.256479890e-04f, -5.246435858e-04f, -5.236383381e-04f, -5.226322475e-04f, -5.216253159e-04f, -5.206175450e-04f, -5.196089367e-04f,
--5.185994928e-04f, -5.175892150e-04f, -5.165781052e-04f, -5.155661651e-04f, -5.145533965e-04f, -5.135398013e-04f, -5.125253813e-04f, -5.115101382e-04f, -5.104940739e-04f, -5.094771902e-04f,
--5.084594888e-04f, -5.074409716e-04f, -5.064216405e-04f, -5.054014971e-04f, -5.043805434e-04f, -5.033587811e-04f, -5.023362121e-04f, -5.013128382e-04f, -5.002886612e-04f, -4.992636829e-04f,
--4.982379051e-04f, -4.972113297e-04f, -4.961839584e-04f, -4.951557932e-04f, -4.941268359e-04f, -4.930970882e-04f, -4.920665520e-04f, -4.910352291e-04f, -4.900031214e-04f, -4.889702306e-04f,
--4.879365587e-04f, -4.869021075e-04f, -4.858668788e-04f, -4.848308743e-04f, -4.837940961e-04f, -4.827565459e-04f, -4.817182256e-04f, -4.806791369e-04f, -4.796392818e-04f, -4.785986621e-04f,
--4.775572796e-04f, -4.765151362e-04f, -4.754722337e-04f, -4.744285740e-04f, -4.733841590e-04f, -4.723389904e-04f, -4.712930702e-04f, -4.702464001e-04f, -4.691989822e-04f, -4.681508181e-04f,
--4.671019098e-04f, -4.660522591e-04f, -4.650018679e-04f, -4.639507380e-04f, -4.628988714e-04f, -4.618462698e-04f, -4.607929352e-04f, -4.597388694e-04f, -4.586840742e-04f, -4.576285516e-04f,
--4.565723035e-04f, -4.555153316e-04f, -4.544576378e-04f, -4.533992241e-04f, -4.523400923e-04f, -4.512802442e-04f, -4.502196819e-04f, -4.491584070e-04f, -4.480964216e-04f, -4.470337274e-04f,
--4.459703265e-04f, -4.449062206e-04f, -4.438414116e-04f, -4.427759015e-04f, -4.417096920e-04f, -4.406427852e-04f, -4.395751828e-04f, -4.385068868e-04f, -4.374378991e-04f, -4.363682216e-04f,
--4.352978560e-04f, -4.342268045e-04f, -4.331550687e-04f, -4.320826507e-04f, -4.310095523e-04f, -4.299357754e-04f, -4.288613220e-04f, -4.277861938e-04f, -4.267103929e-04f, -4.256339211e-04f,
--4.245567803e-04f, -4.234789725e-04f, -4.224004995e-04f, -4.213213632e-04f, -4.202415656e-04f, -4.191611085e-04f, -4.180799939e-04f, -4.169982237e-04f, -4.159157997e-04f, -4.148327240e-04f,
--4.137489983e-04f, -4.126646247e-04f, -4.115796050e-04f, -4.104939411e-04f, -4.094076351e-04f, -4.083206887e-04f, -4.072331039e-04f, -4.061448826e-04f, -4.050560268e-04f, -4.039665384e-04f,
--4.028764192e-04f, -4.017856713e-04f, -4.006942965e-04f, -3.996022967e-04f, -3.985096740e-04f, -3.974164301e-04f, -3.963225672e-04f, -3.952280870e-04f, -3.941329915e-04f, -3.930372826e-04f,
--3.919409623e-04f, -3.908440325e-04f, -3.897464952e-04f, -3.886483522e-04f, -3.875496055e-04f, -3.864502571e-04f, -3.853503089e-04f, -3.842497628e-04f, -3.831486207e-04f, -3.820468847e-04f,
--3.809445566e-04f, -3.798416383e-04f, -3.787381320e-04f, -3.776340394e-04f, -3.765293625e-04f, -3.754241032e-04f, -3.743182636e-04f, -3.732118456e-04f, -3.721048510e-04f, -3.709972820e-04f,
--3.698891403e-04f, -3.687804280e-04f, -3.676711470e-04f, -3.665612992e-04f, -3.654508867e-04f, -3.643399114e-04f, -3.632283752e-04f, -3.621162800e-04f, -3.610036280e-04f, -3.598904209e-04f,
--3.587766608e-04f, -3.576623496e-04f, -3.565474892e-04f, -3.554320818e-04f, -3.543161291e-04f, -3.531996332e-04f, -3.520825960e-04f, -3.509650195e-04f, -3.498469057e-04f, -3.487282566e-04f,
--3.476090740e-04f, -3.464893599e-04f, -3.453691164e-04f, -3.442483454e-04f, -3.431270489e-04f, -3.420052289e-04f, -3.408828872e-04f, -3.397600259e-04f, -3.386366470e-04f, -3.375127524e-04f,
--3.363883442e-04f, -3.352634242e-04f, -3.341379944e-04f, -3.330120570e-04f, -3.318856137e-04f, -3.307586666e-04f, -3.296312178e-04f, -3.285032690e-04f, -3.273748224e-04f, -3.262458799e-04f,
--3.251164436e-04f, -3.239865153e-04f, -3.228560971e-04f, -3.217251909e-04f, -3.205937988e-04f, -3.194619227e-04f, -3.183295646e-04f, -3.171967265e-04f, -3.160634104e-04f, -3.149296182e-04f,
--3.137953521e-04f, -3.126606139e-04f, -3.115254056e-04f, -3.103897293e-04f, -3.092535869e-04f, -3.081169805e-04f, -3.069799119e-04f, -3.058423833e-04f, -3.047043966e-04f, -3.035659538e-04f,
--3.024270568e-04f, -3.012877078e-04f, -3.001479087e-04f, -2.990076615e-04f, -2.978669681e-04f, -2.967258307e-04f, -2.955842511e-04f, -2.944422315e-04f, -2.932997737e-04f, -2.921568798e-04f,
--2.910135519e-04f, -2.898697918e-04f, -2.887256017e-04f, -2.875809834e-04f, -2.864359391e-04f, -2.852904707e-04f, -2.841445803e-04f, -2.829982697e-04f, -2.818515412e-04f, -2.807043965e-04f,
--2.795568379e-04f, -2.784088672e-04f, -2.772604865e-04f, -2.761116978e-04f, -2.749625031e-04f, -2.738129044e-04f, -2.726629037e-04f, -2.715125031e-04f, -2.703617046e-04f, -2.692105101e-04f,
--2.680589217e-04f, -2.669069414e-04f, -2.657545712e-04f, -2.646018132e-04f, -2.634486693e-04f, -2.622951415e-04f, -2.611412320e-04f, -2.599869427e-04f, -2.588322755e-04f, -2.576772327e-04f,
--2.565218161e-04f, -2.553660277e-04f, -2.542098697e-04f, -2.530533440e-04f, -2.518964527e-04f, -2.507391977e-04f, -2.495815812e-04f, -2.484236050e-04f, -2.472652713e-04f, -2.461065820e-04f,
--2.449475393e-04f, -2.437881451e-04f, -2.426284014e-04f, -2.414683103e-04f, -2.403078738e-04f, -2.391470939e-04f, -2.379859726e-04f, -2.368245121e-04f, -2.356627143e-04f, -2.345005812e-04f,
--2.333381148e-04f, -2.321753173e-04f, -2.310121906e-04f, -2.298487368e-04f, -2.286849579e-04f, -2.275208559e-04f, -2.263564328e-04f, -2.251916908e-04f, -2.240266318e-04f, -2.228612578e-04f,
--2.216955710e-04f, -2.205295732e-04f, -2.193632667e-04f, -2.181966533e-04f, -2.170297352e-04f, -2.158625143e-04f, -2.146949927e-04f, -2.135271725e-04f, -2.123590557e-04f, -2.111906443e-04f,
--2.100219404e-04f, -2.088529460e-04f, -2.076836631e-04f, -2.065140937e-04f, -2.053442400e-04f, -2.041741040e-04f, -2.030036876e-04f, -2.018329930e-04f, -2.006620222e-04f, -1.994907772e-04f,
--1.983192600e-04f, -1.971474728e-04f, -1.959754175e-04f, -1.948030962e-04f, -1.936305109e-04f, -1.924576637e-04f, -1.912845566e-04f, -1.901111917e-04f, -1.889375710e-04f, -1.877636965e-04f,
--1.865895704e-04f, -1.854151946e-04f, -1.842405712e-04f, -1.830657022e-04f, -1.818905897e-04f, -1.807152358e-04f, -1.795396424e-04f, -1.783638116e-04f, -1.771877456e-04f, -1.760114462e-04f,
--1.748349156e-04f, -1.736581558e-04f, -1.724811689e-04f, -1.713039569e-04f, -1.701265219e-04f, -1.689488659e-04f, -1.677709909e-04f, -1.665928990e-04f, -1.654145924e-04f, -1.642360729e-04f,
--1.630573427e-04f, -1.618784038e-04f, -1.606992582e-04f, -1.595199081e-04f, -1.583403555e-04f, -1.571606024e-04f, -1.559806508e-04f, -1.548005029e-04f, -1.536201606e-04f, -1.524396261e-04f,
--1.512589014e-04f, -1.500779885e-04f, -1.488968894e-04f, -1.477156064e-04f, -1.465341413e-04f, -1.453524963e-04f, -1.441706733e-04f, -1.429886746e-04f, -1.418065020e-04f, -1.406241577e-04f,
--1.394416438e-04f, -1.382589622e-04f, -1.370761150e-04f, -1.358931044e-04f, -1.347099322e-04f, -1.335266007e-04f, -1.323431118e-04f, -1.311594676e-04f, -1.299756702e-04f, -1.287917217e-04f,
--1.276076240e-04f, -1.264233792e-04f, -1.252389894e-04f, -1.240544567e-04f, -1.228697830e-04f, -1.216849706e-04f, -1.205000213e-04f, -1.193149373e-04f, -1.181297207e-04f, -1.169443734e-04f,
--1.157588976e-04f, -1.145732953e-04f, -1.133875686e-04f, -1.122017194e-04f, -1.110157500e-04f, -1.098296623e-04f, -1.086434584e-04f, -1.074571403e-04f, -1.062707101e-04f, -1.050841699e-04f,
--1.038975217e-04f, -1.027107676e-04f, -1.015239097e-04f, -1.003369499e-04f, -9.914989045e-05f, -9.796273327e-05f, -9.677548046e-05f, -9.558813409e-05f, -9.440069621e-05f, -9.321316888e-05f,
--9.202555416e-05f, -9.083785411e-05f, -8.965007078e-05f, -8.846220624e-05f, -8.727426253e-05f, -8.608624174e-05f, -8.489814590e-05f, -8.370997708e-05f, -8.252173734e-05f, -8.133342873e-05f,
--8.014505332e-05f, -7.895661317e-05f, -7.776811032e-05f, -7.657954685e-05f, -7.539092481e-05f, -7.420224625e-05f, -7.301351324e-05f, -7.182472784e-05f, -7.063589210e-05f, -6.944700808e-05f,
--6.825807784e-05f, -6.706910344e-05f, -6.588008694e-05f, -6.469103040e-05f, -6.350193586e-05f, -6.231280540e-05f, -6.112364107e-05f, -5.993444492e-05f, -5.874521902e-05f, -5.755596543e-05f,
--5.636668619e-05f, -5.517738337e-05f, -5.398805903e-05f, -5.279871522e-05f, -5.160935401e-05f, -5.041997744e-05f, -4.923058758e-05f, -4.804118647e-05f, -4.685177619e-05f, -4.566235879e-05f,
--4.447293631e-05f, -4.328351083e-05f, -4.209408440e-05f, -4.090465906e-05f, -3.971523689e-05f, -3.852581993e-05f, -3.733641024e-05f, -3.614700987e-05f, -3.495762089e-05f, -3.376824535e-05f,
--3.257888530e-05f, -3.138954280e-05f, -3.020021990e-05f, -2.901091866e-05f, -2.782164113e-05f, -2.663238937e-05f, -2.544316544e-05f, -2.425397138e-05f, -2.306480925e-05f, -2.187568110e-05f,
--2.068658900e-05f, -1.949753498e-05f, -1.830852111e-05f, -1.711954944e-05f, -1.593062201e-05f, -1.474174090e-05f, -1.355290813e-05f, -1.236412578e-05f, -1.117539589e-05f, -9.986720503e-06f,
--8.798101686e-06f, -7.609541483e-06f, -6.421041947e-06f, -5.232605128e-06f, -4.044233078e-06f, -2.855927846e-06f, -1.667691482e-06f, -4.795260375e-07f, 7.085664387e-07f, 1.896583897e-06f,
-3.084524288e-06f, 4.272385563e-06f, 5.460165673e-06f, 6.647862570e-06f, 7.835474206e-06f, 9.022998532e-06f, 1.021043350e-05f, 1.139777707e-05f, 1.258502718e-05f, 1.377218180e-05f,
-1.495923887e-05f, 1.614619635e-05f, 1.733305220e-05f, 1.851980436e-05f, 1.970645079e-05f, 2.089298946e-05f, 2.207941830e-05f, 2.326573529e-05f, 2.445193837e-05f, 2.563802550e-05f,
-2.682399464e-05f, 2.800984375e-05f, 2.919557077e-05f, 3.038117368e-05f, 3.156665042e-05f, 3.275199897e-05f, 3.393721726e-05f, 3.512230327e-05f, 3.630725495e-05f, 3.749207027e-05f,
-3.867674718e-05f, 3.986128365e-05f, 4.104567762e-05f, 4.222992708e-05f, 4.341402997e-05f, 4.459798426e-05f, 4.578178791e-05f, 4.696543889e-05f, 4.814893516e-05f, 4.933227468e-05f,
-5.051545541e-05f, 5.169847532e-05f, 5.288133238e-05f, 5.406402454e-05f, 5.524654979e-05f, 5.642890607e-05f, 5.761109136e-05f, 5.879310362e-05f, 5.997494083e-05f, 6.115660095e-05f,
-6.233808194e-05f, 6.351938178e-05f, 6.470049843e-05f, 6.588142987e-05f, 6.706217407e-05f, 6.824272898e-05f, 6.942309260e-05f, 7.060326288e-05f, 7.178323779e-05f, 7.296301532e-05f,
-7.414259344e-05f, 7.532197010e-05f, 7.650114330e-05f, 7.768011100e-05f, 7.885887118e-05f, 8.003742182e-05f, 8.121576088e-05f, 8.239388635e-05f, 8.357179620e-05f, 8.474948841e-05f,
-8.592696095e-05f, 8.710421181e-05f, 8.828123896e-05f, 8.945804038e-05f, 9.063461405e-05f, 9.181095795e-05f, 9.298707007e-05f, 9.416294838e-05f, 9.533859086e-05f, 9.651399550e-05f,
-9.768916028e-05f, 9.886408318e-05f, 1.000387622e-04f, 1.012131953e-04f, 1.023873805e-04f, 1.035613157e-04f, 1.047349990e-04f, 1.059084283e-04f, 1.070816016e-04f, 1.082545170e-04f,
-1.094271723e-04f, 1.105995656e-04f, 1.117716949e-04f, 1.129435582e-04f, 1.141151534e-04f, 1.152864786e-04f, 1.164575317e-04f, 1.176283107e-04f, 1.187988137e-04f, 1.199690386e-04f,
-1.211389834e-04f, 1.223086461e-04f, 1.234780247e-04f, 1.246471171e-04f, 1.258159215e-04f, 1.269844358e-04f, 1.281526580e-04f, 1.293205860e-04f, 1.304882180e-04f, 1.316555518e-04f,
-1.328225855e-04f, 1.339893171e-04f, 1.351557446e-04f, 1.363218660e-04f, 1.374876793e-04f, 1.386531825e-04f, 1.398183736e-04f, 1.409832506e-04f, 1.421478115e-04f, 1.433120543e-04f,
-1.444759771e-04f, 1.456395777e-04f, 1.468028544e-04f, 1.479658050e-04f, 1.491284275e-04f, 1.502907200e-04f, 1.514526805e-04f, 1.526143070e-04f, 1.537755975e-04f, 1.549365500e-04f,
-1.560971626e-04f, 1.572574332e-04f, 1.584173599e-04f, 1.595769406e-04f, 1.607361735e-04f, 1.618950565e-04f, 1.630535876e-04f, 1.642117648e-04f, 1.653695862e-04f, 1.665270499e-04f,
-1.676841537e-04f, 1.688408958e-04f, 1.699972741e-04f, 1.711532867e-04f, 1.723089316e-04f, 1.734642069e-04f, 1.746191105e-04f, 1.757736404e-04f, 1.769277948e-04f, 1.780815717e-04f,
-1.792349690e-04f, 1.803879848e-04f, 1.815406171e-04f, 1.826928640e-04f, 1.838447234e-04f, 1.849961935e-04f, 1.861472723e-04f, 1.872979577e-04f, 1.884482479e-04f, 1.895981408e-04f,
-1.907476345e-04f, 1.918967271e-04f, 1.930454165e-04f, 1.941937009e-04f, 1.953415782e-04f, 1.964890465e-04f, 1.976361038e-04f, 1.987827482e-04f, 1.999289777e-04f, 2.010747904e-04f,
-2.022201843e-04f, 2.033651575e-04f, 2.045097080e-04f, 2.056538338e-04f, 2.067975330e-04f, 2.079408037e-04f, 2.090836438e-04f, 2.102260516e-04f, 2.113680249e-04f, 2.125095618e-04f,
-2.136506605e-04f, 2.147913190e-04f, 2.159315352e-04f, 2.170713073e-04f, 2.182106334e-04f, 2.193495115e-04f, 2.204879396e-04f, 2.216259158e-04f, 2.227634381e-04f, 2.239005047e-04f,
-2.250371136e-04f, 2.261732629e-04f, 2.273089506e-04f, 2.284441747e-04f, 2.295789334e-04f, 2.307132248e-04f, 2.318470468e-04f, 2.329803976e-04f, 2.341132752e-04f, 2.352456777e-04f,
-2.363776031e-04f, 2.375090496e-04f, 2.386400153e-04f, 2.397704981e-04f, 2.409004961e-04f, 2.420300076e-04f, 2.431590304e-04f, 2.442875627e-04f, 2.454156027e-04f, 2.465431482e-04f,
-2.476701975e-04f, 2.487967487e-04f, 2.499227997e-04f, 2.510483487e-04f, 2.521733938e-04f, 2.532979331e-04f, 2.544219646e-04f, 2.555454865e-04f, 2.566684967e-04f, 2.577909935e-04f,
-2.589129749e-04f, 2.600344390e-04f, 2.611553839e-04f, 2.622758077e-04f, 2.633957085e-04f, 2.645150843e-04f, 2.656339333e-04f, 2.667522536e-04f, 2.678700433e-04f, 2.689873004e-04f,
-2.701040232e-04f, 2.712202096e-04f, 2.723358577e-04f, 2.734509658e-04f, 2.745655319e-04f, 2.756795540e-04f, 2.767930304e-04f, 2.779059591e-04f, 2.790183382e-04f, 2.801301659e-04f,
-2.812414402e-04f, 2.823521592e-04f, 2.834623212e-04f, 2.845719241e-04f, 2.856809662e-04f, 2.867894455e-04f, 2.878973601e-04f, 2.890047082e-04f, 2.901114879e-04f, 2.912176972e-04f,
-2.923233345e-04f, 2.934283976e-04f, 2.945328849e-04f, 2.956367943e-04f, 2.967401241e-04f, 2.978428724e-04f, 2.989450372e-04f, 3.000466168e-04f, 3.011476092e-04f, 3.022480126e-04f,
-3.033478252e-04f, 3.044470450e-04f, 3.055456702e-04f, 3.066436989e-04f, 3.077411293e-04f, 3.088379595e-04f, 3.099341876e-04f, 3.110298119e-04f, 3.121248304e-04f, 3.132192413e-04f,
-3.143130427e-04f, 3.154062327e-04f, 3.164988096e-04f, 3.175907715e-04f, 3.186821165e-04f, 3.197728428e-04f, 3.208629485e-04f, 3.219524317e-04f, 3.230412907e-04f, 3.241295237e-04f,
-3.252171286e-04f, 3.263041038e-04f, 3.273904473e-04f, 3.284761574e-04f, 3.295612321e-04f, 3.306456697e-04f, 3.317294684e-04f, 3.328126262e-04f, 3.338951414e-04f, 3.349770121e-04f,
-3.360582365e-04f, 3.371388127e-04f, 3.382187390e-04f, 3.392980135e-04f, 3.403766344e-04f, 3.414545998e-04f, 3.425319080e-04f, 3.436085571e-04f, 3.446845453e-04f, 3.457598707e-04f,
-3.468345317e-04f, 3.479085262e-04f, 3.489818526e-04f, 3.500545090e-04f, 3.511264936e-04f, 3.521978046e-04f, 3.532684402e-04f, 3.543383985e-04f, 3.554076778e-04f, 3.564762762e-04f,
-3.575441920e-04f, 3.586114234e-04f, 3.596779685e-04f, 3.607438255e-04f, 3.618089927e-04f, 3.628734682e-04f, 3.639372503e-04f, 3.650003371e-04f, 3.660627268e-04f, 3.671244178e-04f,
-3.681854081e-04f, 3.692456959e-04f, 3.703052796e-04f, 3.713641573e-04f, 3.724223272e-04f, 3.734797875e-04f, 3.745365365e-04f, 3.755925723e-04f, 3.766478932e-04f, 3.777024974e-04f,
-3.787563831e-04f, 3.798095486e-04f, 3.808619921e-04f, 3.819137117e-04f, 3.829647058e-04f, 3.840149725e-04f, 3.850645101e-04f, 3.861133168e-04f, 3.871613909e-04f, 3.882087305e-04f,
-3.892553340e-04f, 3.903011994e-04f, 3.913463252e-04f, 3.923907095e-04f, 3.934343506e-04f, 3.944772467e-04f, 3.955193960e-04f, 3.965607968e-04f, 3.976014474e-04f, 3.986413460e-04f,
-3.996804907e-04f, 4.007188800e-04f, 4.017565121e-04f, 4.027933851e-04f, 4.038294973e-04f, 4.048648471e-04f, 4.058994326e-04f, 4.069332522e-04f, 4.079663040e-04f, 4.089985864e-04f,
-4.100300976e-04f, 4.110608359e-04f, 4.120907995e-04f, 4.131199867e-04f, 4.141483957e-04f, 4.151760250e-04f, 4.162028726e-04f, 4.172289369e-04f, 4.182542162e-04f, 4.192787087e-04f,
-4.203024128e-04f, 4.213253266e-04f, 4.223474486e-04f, 4.233687768e-04f, 4.243893098e-04f, 4.254090456e-04f, 4.264279827e-04f, 4.274461193e-04f, 4.284634537e-04f, 4.294799841e-04f,
-4.304957090e-04f, 4.315106265e-04f, 4.325247350e-04f, 4.335380327e-04f, 4.345505180e-04f, 4.355621892e-04f, 4.365730445e-04f, 4.375830823e-04f, 4.385923009e-04f, 4.396006985e-04f,
-4.406082736e-04f, 4.416150243e-04f, 4.426209491e-04f, 4.436260461e-04f, 4.446303138e-04f, 4.456337505e-04f, 4.466363544e-04f, 4.476381239e-04f, 4.486390573e-04f, 4.496391529e-04f,
-4.506384091e-04f, 4.516368241e-04f, 4.526343964e-04f, 4.536311241e-04f, 4.546270058e-04f, 4.556220396e-04f, 4.566162239e-04f, 4.576095571e-04f, 4.586020375e-04f, 4.595936634e-04f,
-4.605844332e-04f, 4.615743452e-04f, 4.625633977e-04f, 4.635515891e-04f, 4.645389178e-04f, 4.655253821e-04f, 4.665109802e-04f, 4.674957107e-04f, 4.684795718e-04f, 4.694625619e-04f,
-4.704446793e-04f, 4.714259224e-04f, 4.724062896e-04f, 4.733857792e-04f, 4.743643896e-04f, 4.753421191e-04f, 4.763189661e-04f, 4.772949290e-04f, 4.782700061e-04f, 4.792441958e-04f,
-4.802174966e-04f, 4.811899066e-04f, 4.821614244e-04f, 4.831320483e-04f, 4.841017767e-04f, 4.850706079e-04f, 4.860385404e-04f, 4.870055725e-04f, 4.879717026e-04f, 4.889369291e-04f,
-4.899012503e-04f, 4.908646648e-04f, 4.918271708e-04f, 4.927887667e-04f, 4.937494510e-04f, 4.947092221e-04f, 4.956680782e-04f, 4.966260180e-04f, 4.975830396e-04f, 4.985391416e-04f,
-4.994943224e-04f, 5.004485803e-04f, 5.014019137e-04f, 5.023543212e-04f, 5.033058010e-04f, 5.042563516e-04f, 5.052059714e-04f, 5.061546589e-04f, 5.071024124e-04f, 5.080492303e-04f,
-5.089951111e-04f, 5.099400533e-04f, 5.108840551e-04f, 5.118271152e-04f, 5.127692318e-04f, 5.137104034e-04f, 5.146506285e-04f, 5.155899054e-04f, 5.165282327e-04f, 5.174656087e-04f,
-5.184020320e-04f, 5.193375008e-04f, 5.202720138e-04f, 5.212055692e-04f, 5.221381656e-04f, 5.230698014e-04f, 5.240004751e-04f, 5.249301851e-04f, 5.258589299e-04f, 5.267867078e-04f,
-5.277135175e-04f, 5.286393573e-04f, 5.295642257e-04f, 5.304881211e-04f, 5.314110421e-04f, 5.323329870e-04f, 5.332539544e-04f, 5.341739427e-04f, 5.350929504e-04f, 5.360109759e-04f,
-5.369280178e-04f, 5.378440745e-04f, 5.387591445e-04f, 5.396732262e-04f, 5.405863182e-04f, 5.414984190e-04f, 5.424095269e-04f, 5.433196406e-04f, 5.442287584e-04f, 5.451368790e-04f,
-5.460440007e-04f, 5.469501220e-04f, 5.478552416e-04f, 5.487593578e-04f, 5.496624691e-04f, 5.505645741e-04f, 5.514656713e-04f, 5.523657592e-04f, 5.532648362e-04f, 5.541629010e-04f,
-5.550599519e-04f, 5.559559875e-04f, 5.568510063e-04f, 5.577450069e-04f, 5.586379878e-04f, 5.595299474e-04f, 5.604208843e-04f, 5.613107971e-04f, 5.621996841e-04f, 5.630875441e-04f,
-5.639743755e-04f, 5.648601767e-04f, 5.657449465e-04f, 5.666286833e-04f, 5.675113856e-04f, 5.683930519e-04f, 5.692736809e-04f, 5.701532711e-04f, 5.710318209e-04f, 5.719093290e-04f,
-5.727857939e-04f, 5.736612141e-04f, 5.745355883e-04f, 5.754089149e-04f, 5.762811925e-04f, 5.771524196e-04f, 5.780225949e-04f, 5.788917168e-04f, 5.797597841e-04f, 5.806267951e-04f,
-5.814927485e-04f, 5.823576428e-04f, 5.832214767e-04f, 5.840842486e-04f, 5.849459572e-04f, 5.858066011e-04f, 5.866661788e-04f, 5.875246889e-04f, 5.883821299e-04f, 5.892385005e-04f,
-5.900937993e-04f, 5.909480248e-04f, 5.918011757e-04f, 5.926532505e-04f, 5.935042478e-04f, 5.943541662e-04f, 5.952030043e-04f, 5.960507607e-04f, 5.968974340e-04f, 5.977430229e-04f,
-5.985875259e-04f, 5.994309416e-04f, 6.002732686e-04f, 6.011145056e-04f, 6.019546512e-04f, 6.027937039e-04f, 6.036316624e-04f, 6.044685254e-04f, 6.053042913e-04f, 6.061389590e-04f,
-6.069725269e-04f, 6.078049938e-04f, 6.086363582e-04f, 6.094666187e-04f, 6.102957741e-04f, 6.111238229e-04f, 6.119507638e-04f, 6.127765954e-04f, 6.136013164e-04f, 6.144249254e-04f,
-6.152474210e-04f, 6.160688019e-04f, 6.168890668e-04f, 6.177082143e-04f, 6.185262430e-04f, 6.193431517e-04f, 6.201589389e-04f, 6.209736033e-04f, 6.217871436e-04f, 6.225995585e-04f,
-6.234108465e-04f, 6.242210065e-04f, 6.250300370e-04f, 6.258379367e-04f, 6.266447044e-04f, 6.274503386e-04f, 6.282548380e-04f, 6.290582014e-04f, 6.298604274e-04f, 6.306615147e-04f,
-6.314614620e-04f, 6.322602679e-04f, 6.330579312e-04f, 6.338544506e-04f, 6.346498247e-04f, 6.354440523e-04f, 6.362371320e-04f, 6.370290625e-04f, 6.378198426e-04f, 6.386094709e-04f,
-6.393979462e-04f, 6.401852671e-04f, 6.409714325e-04f, 6.417564409e-04f, 6.425402911e-04f, 6.433229818e-04f, 6.441045118e-04f, 6.448848798e-04f, 6.456640844e-04f, 6.464421244e-04f,
-6.472189986e-04f, 6.479947056e-04f, 6.487692443e-04f, 6.495426132e-04f, 6.503148113e-04f, 6.510858371e-04f, 6.518556895e-04f, 6.526243671e-04f, 6.533918688e-04f, 6.541581933e-04f,
-6.549233393e-04f, 6.556873056e-04f, 6.564500909e-04f, 6.572116940e-04f, 6.579721137e-04f, 6.587313486e-04f, 6.594893976e-04f, 6.602462594e-04f, 6.610019329e-04f, 6.617564166e-04f,
-6.625097096e-04f, 6.632618104e-04f, 6.640127178e-04f, 6.647624308e-04f, 6.655109479e-04f, 6.662582681e-04f, 6.670043901e-04f, 6.677493126e-04f, 6.684930345e-04f, 6.692355546e-04f,
-6.699768716e-04f, 6.707169843e-04f, 6.714558916e-04f, 6.721935922e-04f, 6.729300849e-04f, 6.736653685e-04f, 6.743994419e-04f, 6.751323039e-04f, 6.758639532e-04f, 6.765943886e-04f,
-6.773236091e-04f, 6.780516133e-04f, 6.787784001e-04f, 6.795039683e-04f, 6.802283168e-04f, 6.809514444e-04f, 6.816733499e-04f, 6.823940321e-04f, 6.831134898e-04f, 6.838317219e-04f,
-6.845487273e-04f, 6.852645047e-04f, 6.859790530e-04f, 6.866923711e-04f, 6.874044577e-04f, 6.881153118e-04f, 6.888249321e-04f, 6.895333176e-04f, 6.902404670e-04f, 6.909463793e-04f,
-6.916510533e-04f, 6.923544878e-04f, 6.930566818e-04f, 6.937576340e-04f, 6.944573433e-04f, 6.951558087e-04f, 6.958530289e-04f, 6.965490029e-04f, 6.972437295e-04f, 6.979372076e-04f,
-6.986294361e-04f, 6.993204138e-04f, 7.000101397e-04f, 7.006986126e-04f, 7.013858315e-04f, 7.020717951e-04f, 7.027565025e-04f, 7.034399524e-04f, 7.041221438e-04f, 7.048030757e-04f,
-7.054827468e-04f, 7.061611561e-04f, 7.068383025e-04f, 7.075141849e-04f, 7.081888022e-04f, 7.088621534e-04f, 7.095342373e-04f, 7.102050529e-04f, 7.108745991e-04f, 7.115428747e-04f,
-7.122098788e-04f, 7.128756103e-04f, 7.135400680e-04f, 7.142032510e-04f, 7.148651580e-04f, 7.155257882e-04f, 7.161851404e-04f, 7.168432136e-04f, 7.175000066e-04f, 7.181555185e-04f,
-7.188097482e-04f, 7.194626946e-04f, 7.201143567e-04f, 7.207647335e-04f, 7.214138239e-04f, 7.220616268e-04f, 7.227081412e-04f, 7.233533662e-04f, 7.239973005e-04f, 7.246399433e-04f,
-7.252812935e-04f, 7.259213500e-04f, 7.265601119e-04f, 7.271975781e-04f, 7.278337475e-04f, 7.284686192e-04f, 7.291021922e-04f, 7.297344654e-04f, 7.303654378e-04f, 7.309951084e-04f,
-7.316234763e-04f, 7.322505403e-04f, 7.328762995e-04f, 7.335007529e-04f, 7.341238996e-04f, 7.347457384e-04f, 7.353662684e-04f, 7.359854887e-04f, 7.366033982e-04f, 7.372199959e-04f,
-7.378352809e-04f, 7.384492522e-04f, 7.390619087e-04f, 7.396732496e-04f, 7.402832738e-04f, 7.408919804e-04f, 7.414993684e-04f, 7.421054369e-04f, 7.427101848e-04f, 7.433136112e-04f,
-7.439157151e-04f, 7.445164957e-04f, 7.451159518e-04f, 7.457140827e-04f, 7.463108873e-04f, 7.469063646e-04f, 7.475005138e-04f, 7.480933338e-04f, 7.486848238e-04f, 7.492749828e-04f,
-7.498638099e-04f, 7.504513041e-04f, 7.510374645e-04f, 7.516222902e-04f, 7.522057802e-04f, 7.527879336e-04f, 7.533687495e-04f, 7.539482270e-04f, 7.545263651e-04f, 7.551031630e-04f,
-7.556786197e-04f, 7.562527343e-04f, 7.568255059e-04f, 7.573969336e-04f, 7.579670165e-04f, 7.585357537e-04f, 7.591031443e-04f, 7.596691874e-04f, 7.602338820e-04f, 7.607972274e-04f,
-7.613592226e-04f, 7.619198667e-04f, 7.624791589e-04f, 7.630370983e-04f, 7.635936839e-04f, 7.641489149e-04f, 7.647027904e-04f, 7.652553097e-04f, 7.658064716e-04f, 7.663562756e-04f,
-7.669047205e-04f, 7.674518057e-04f, 7.679975301e-04f, 7.685418931e-04f, 7.690848936e-04f, 7.696265310e-04f, 7.701668042e-04f, 7.707057124e-04f, 7.712432549e-04f, 7.717794308e-04f,
-7.723142392e-04f, 7.728476792e-04f, 7.733797502e-04f, 7.739104511e-04f, 7.744397812e-04f, 7.749677397e-04f, 7.754943257e-04f, 7.760195384e-04f, 7.765433769e-04f, 7.770658406e-04f,
-7.775869284e-04f, 7.781066397e-04f, 7.786249736e-04f, 7.791419294e-04f, 7.796575061e-04f, 7.801717030e-04f, 7.806845193e-04f, 7.811959541e-04f, 7.817060068e-04f, 7.822146765e-04f,
-7.827219623e-04f, 7.832278636e-04f, 7.837323795e-04f, 7.842355092e-04f, 7.847372520e-04f, 7.852376070e-04f, 7.857365736e-04f, 7.862341508e-04f, 7.867303380e-04f, 7.872251344e-04f,
-7.877185391e-04f, 7.882105516e-04f, 7.887011708e-04f, 7.891903962e-04f, 7.896782270e-04f, 7.901646623e-04f, 7.906497015e-04f, 7.911333438e-04f, 7.916155884e-04f, 7.920964346e-04f,
-7.925758817e-04f, 7.930539289e-04f, 7.935305754e-04f, 7.940058206e-04f, 7.944796637e-04f, 7.949521039e-04f, 7.954231406e-04f, 7.958927730e-04f, 7.963610004e-04f, 7.968278220e-04f,
-7.972932372e-04f, 7.977572453e-04f, 7.982198454e-04f, 7.986810370e-04f, 7.991408192e-04f, 7.995991914e-04f, 8.000561530e-04f, 8.005117030e-04f, 8.009658410e-04f, 8.014185662e-04f,
-8.018698778e-04f, 8.023197753e-04f, 8.027682578e-04f, 8.032153248e-04f, 8.036609755e-04f, 8.041052093e-04f, 8.045480254e-04f, 8.049894232e-04f, 8.054294021e-04f, 8.058679613e-04f,
-8.063051002e-04f, 8.067408181e-04f, 8.071751143e-04f, 8.076079883e-04f, 8.080394392e-04f, 8.084694666e-04f, 8.088980696e-04f, 8.093252477e-04f, 8.097510002e-04f, 8.101753265e-04f,
-8.105982259e-04f, 8.110196978e-04f, 8.114397416e-04f, 8.118583565e-04f, 8.122755420e-04f, 8.126912975e-04f, 8.131056222e-04f, 8.135185156e-04f, 8.139299771e-04f, 8.143400060e-04f,
-8.147486018e-04f, 8.151557637e-04f, 8.155614912e-04f, 8.159657837e-04f, 8.163686405e-04f, 8.167700611e-04f, 8.171700449e-04f, 8.175685912e-04f, 8.179656994e-04f, 8.183613690e-04f,
-8.187555994e-04f, 8.191483899e-04f, 8.195397400e-04f, 8.199296491e-04f, 8.203181166e-04f, 8.207051419e-04f, 8.210907244e-04f, 8.214748637e-04f, 8.218575590e-04f, 8.222388098e-04f,
-8.226186156e-04f, 8.229969758e-04f, 8.233738898e-04f, 8.237493571e-04f, 8.241233771e-04f, 8.244959492e-04f, 8.248670729e-04f, 8.252367477e-04f, 8.256049729e-04f, 8.259717481e-04f,
-8.263370727e-04f, 8.267009462e-04f, 8.270633680e-04f, 8.274243375e-04f, 8.277838544e-04f, 8.281419179e-04f, 8.284985277e-04f, 8.288536831e-04f, 8.292073837e-04f, 8.295596289e-04f,
-8.299104182e-04f, 8.302597510e-04f, 8.306076270e-04f, 8.309540455e-04f, 8.312990061e-04f, 8.316425083e-04f, 8.319845515e-04f, 8.323251352e-04f, 8.326642591e-04f, 8.330019224e-04f,
-8.333381249e-04f, 8.336728659e-04f, 8.340061450e-04f, 8.343379617e-04f, 8.346683155e-04f, 8.349972060e-04f, 8.353246326e-04f, 8.356505949e-04f, 8.359750924e-04f, 8.362981247e-04f,
-8.366196913e-04f, 8.369397917e-04f, 8.372584254e-04f, 8.375755920e-04f, 8.378912911e-04f, 8.382055222e-04f, 8.385182847e-04f, 8.388295784e-04f, 8.391394027e-04f, 8.394477572e-04f,
-8.397546415e-04f, 8.400600550e-04f, 8.403639975e-04f, 8.406664684e-04f, 8.409674672e-04f, 8.412669937e-04f, 8.415650474e-04f, 8.418616277e-04f, 8.421567344e-04f, 8.424503670e-04f,
-8.427425250e-04f, 8.430332082e-04f, 8.433224159e-04f, 8.436101480e-04f, 8.438964038e-04f, 8.441811832e-04f, 8.444644855e-04f, 8.447463105e-04f, 8.450266577e-04f, 8.453055268e-04f,
-8.455829174e-04f, 8.458588290e-04f, 8.461332614e-04f, 8.464062140e-04f, 8.466776866e-04f, 8.469476787e-04f, 8.472161900e-04f, 8.474832201e-04f, 8.477487687e-04f, 8.480128353e-04f,
-8.482754196e-04f, 8.485365213e-04f, 8.487961400e-04f, 8.490542753e-04f, 8.493109269e-04f, 8.495660944e-04f, 8.498197775e-04f, 8.500719758e-04f, 8.503226890e-04f, 8.505719167e-04f,
-8.508196587e-04f, 8.510659146e-04f, 8.513106839e-04f, 8.515539665e-04f, 8.517957620e-04f, 8.520360701e-04f, 8.522748903e-04f, 8.525122225e-04f, 8.527480663e-04f, 8.529824214e-04f,
-8.532152874e-04f, 8.534466641e-04f, 8.536765512e-04f, 8.539049483e-04f, 8.541318552e-04f, 8.543572715e-04f, 8.545811970e-04f, 8.548036313e-04f, 8.550245742e-04f, 8.552440253e-04f,
-8.554619845e-04f, 8.556784514e-04f, 8.558934257e-04f, 8.561069071e-04f, 8.563188954e-04f, 8.565293903e-04f, 8.567383916e-04f, 8.569458989e-04f, 8.571519120e-04f, 8.573564306e-04f,
-8.575594546e-04f, 8.577609835e-04f, 8.579610172e-04f, 8.581595554e-04f, 8.583565978e-04f, 8.585521443e-04f, 8.587461945e-04f, 8.589387482e-04f, 8.591298053e-04f, 8.593193654e-04f,
-8.595074283e-04f, 8.596939937e-04f, 8.598790616e-04f, 8.600626315e-04f, 8.602447034e-04f, 8.604252769e-04f, 8.606043519e-04f, 8.607819281e-04f, 8.609580054e-04f, 8.611325835e-04f,
-8.613056622e-04f, 8.614772414e-04f, 8.616473207e-04f, 8.618159000e-04f, 8.619829792e-04f, 8.621485579e-04f, 8.623126361e-04f, 8.624752135e-04f, 8.626362899e-04f, 8.627958652e-04f,
-8.629539392e-04f, 8.631105117e-04f, 8.632655824e-04f, 8.634191514e-04f, 8.635712183e-04f, 8.637217830e-04f, 8.638708453e-04f, 8.640184051e-04f, 8.641644623e-04f, 8.643090166e-04f,
-8.644520678e-04f, 8.645936160e-04f, 8.647336608e-04f, 8.648722021e-04f, 8.650092399e-04f, 8.651447739e-04f, 8.652788040e-04f, 8.654113301e-04f, 8.655423521e-04f, 8.656718698e-04f,
-8.657998830e-04f, 8.659263917e-04f, 8.660513957e-04f, 8.661748949e-04f, 8.662968893e-04f, 8.664173785e-04f, 8.665363627e-04f, 8.666538416e-04f, 8.667698151e-04f, 8.668842831e-04f,
-8.669972456e-04f, 8.671087024e-04f, 8.672186534e-04f, 8.673270985e-04f, 8.674340377e-04f, 8.675394708e-04f, 8.676433978e-04f, 8.677458186e-04f, 8.678467330e-04f, 8.679461410e-04f,
-8.680440426e-04f, 8.681404376e-04f, 8.682353260e-04f, 8.683287077e-04f, 8.684205827e-04f, 8.685109508e-04f, 8.685998121e-04f, 8.686871664e-04f, 8.687730137e-04f, 8.688573540e-04f,
-8.689401871e-04f, 8.690215131e-04f, 8.691013319e-04f, 8.691796435e-04f, 8.692564477e-04f, 8.693317447e-04f, 8.694055343e-04f, 8.694778165e-04f, 8.695485912e-04f, 8.696178585e-04f,
-8.696856184e-04f, 8.697518707e-04f, 8.698166155e-04f, 8.698798528e-04f, 8.699415825e-04f, 8.700018046e-04f, 8.700605192e-04f, 8.701177262e-04f, 8.701734256e-04f, 8.702276174e-04f,
-8.702803016e-04f, 8.703314782e-04f, 8.703811472e-04f, 8.704293087e-04f, 8.704759626e-04f, 8.705211090e-04f, 8.705647478e-04f, 8.706068791e-04f, 8.706475029e-04f, 8.706866193e-04f,
-8.707242282e-04f, 8.707603296e-04f, 8.707949237e-04f, 8.708280105e-04f, 8.708595900e-04f, 8.708896621e-04f, 8.709182271e-04f, 8.709452848e-04f, 8.709708355e-04f, 8.709948790e-04f,
-8.710174155e-04f, 8.710384450e-04f, 8.710579676e-04f, 8.710759834e-04f, 8.710924923e-04f, 8.711074946e-04f, 8.711209901e-04f, 8.711329791e-04f, 8.711434615e-04f, 8.711524375e-04f,
-8.711599071e-04f, 8.711658705e-04f, 8.711703276e-04f, 8.711732787e-04f, 8.711747237e-04f, 8.711746627e-04f, 8.711730960e-04f, 8.711700235e-04f, 8.711654453e-04f, 8.711593616e-04f,
-8.711517725e-04f, 8.711426781e-04f, 8.711320784e-04f, 8.711199736e-04f, 8.711063638e-04f, 8.710912492e-04f, 8.710746298e-04f, 8.710565058e-04f, 8.710368772e-04f, 8.710157443e-04f,
-8.709931072e-04f, 8.709689659e-04f, 8.709433206e-04f, 8.709161715e-04f, 8.708875187e-04f, 8.708573624e-04f, 8.708257026e-04f, 8.707925396e-04f, 8.707578735e-04f, 8.707217044e-04f,
-8.706840325e-04f, 8.706448580e-04f, 8.706041810e-04f, 8.705620017e-04f, 8.705183202e-04f, 8.704731367e-04f, 8.704264515e-04f, 8.703782646e-04f, 8.703285763e-04f, 8.702773867e-04f,
-8.702246960e-04f, 8.701705043e-04f, 8.701148120e-04f, 8.700576191e-04f, 8.699989259e-04f, 8.699387326e-04f, 8.698770393e-04f, 8.698138463e-04f, 8.697491537e-04f, 8.696829618e-04f,
-8.696152708e-04f, 8.695460808e-04f, 8.694753921e-04f, 8.694032050e-04f, 8.693295196e-04f, 8.692543361e-04f, 8.691776548e-04f, 8.690994760e-04f, 8.690197997e-04f, 8.689386263e-04f,
-8.688559560e-04f, 8.687717891e-04f, 8.686861257e-04f, 8.685989661e-04f, 8.685103106e-04f, 8.684201593e-04f, 8.683285127e-04f, 8.682353708e-04f, 8.681407340e-04f, 8.680446025e-04f,
-8.679469766e-04f, 8.678478566e-04f, 8.677472426e-04f, 8.676451350e-04f, 8.675415340e-04f, 8.674364400e-04f, 8.673298531e-04f, 8.672217738e-04f, 8.671122021e-04f, 8.670011385e-04f,
-8.668885832e-04f, 8.667745365e-04f, 8.666589987e-04f, 8.665419701e-04f, 8.664234509e-04f, 8.663034416e-04f, 8.661819423e-04f, 8.660589534e-04f, 8.659344752e-04f, 8.658085079e-04f,
-8.656810520e-04f, 8.655521077e-04f, 8.654216754e-04f, 8.652897553e-04f, 8.651563478e-04f, 8.650214531e-04f, 8.648850717e-04f, 8.647472039e-04f, 8.646078499e-04f, 8.644670102e-04f,
-8.643246850e-04f, 8.641808747e-04f, 8.640355797e-04f, 8.638888002e-04f, 8.637405367e-04f, 8.635907894e-04f, 8.634395588e-04f, 8.632868451e-04f, 8.631326488e-04f, 8.629769702e-04f,
-8.628198096e-04f, 8.626611675e-04f, 8.625010441e-04f, 8.623394399e-04f, 8.621763553e-04f, 8.620117905e-04f, 8.618457461e-04f, 8.616782223e-04f, 8.615092195e-04f, 8.613387382e-04f,
-8.611667787e-04f, 8.609933414e-04f, 8.608184267e-04f, 8.606420350e-04f, 8.604641667e-04f, 8.602848221e-04f, 8.601040018e-04f, 8.599217061e-04f, 8.597379353e-04f, 8.595526900e-04f,
-8.593659705e-04f, 8.591777773e-04f, 8.589881107e-04f, 8.587969712e-04f, 8.586043592e-04f, 8.584102752e-04f, 8.582147195e-04f, 8.580176925e-04f, 8.578191948e-04f, 8.576192268e-04f,
-8.574177888e-04f, 8.572148814e-04f, 8.570105049e-04f, 8.568046599e-04f, 8.565973467e-04f, 8.563885659e-04f, 8.561783178e-04f, 8.559666030e-04f, 8.557534218e-04f, 8.555387748e-04f,
-8.553226623e-04f, 8.551050850e-04f, 8.548860432e-04f, 8.546655374e-04f, 8.544435681e-04f, 8.542201357e-04f, 8.539952408e-04f, 8.537688838e-04f, 8.535410651e-04f, 8.533117854e-04f,
-8.530810451e-04f, 8.528488446e-04f, 8.526151844e-04f, 8.523800651e-04f, 8.521434872e-04f, 8.519054511e-04f, 8.516659573e-04f, 8.514250064e-04f, 8.511825989e-04f, 8.509387352e-04f,
-8.506934160e-04f, 8.504466416e-04f, 8.501984126e-04f, 8.499487296e-04f, 8.496975931e-04f, 8.494450035e-04f, 8.491909615e-04f, 8.489354674e-04f, 8.486785220e-04f, 8.484201257e-04f,
-8.481602790e-04f, 8.478989825e-04f, 8.476362368e-04f, 8.473720423e-04f, 8.471063997e-04f, 8.468393094e-04f, 8.465707720e-04f, 8.463007881e-04f, 8.460293583e-04f, 8.457564831e-04f,
-8.454821630e-04f, 8.452063986e-04f, 8.449291906e-04f, 8.446505394e-04f, 8.443704456e-04f, 8.440889098e-04f, 8.438059327e-04f, 8.435215147e-04f, 8.432356564e-04f, 8.429483584e-04f,
-8.426596214e-04f, 8.423694459e-04f, 8.420778325e-04f, 8.417847817e-04f, 8.414902943e-04f, 8.411943707e-04f, 8.408970117e-04f, 8.405982177e-04f, 8.402979894e-04f, 8.399963275e-04f,
-8.396932324e-04f, 8.393887049e-04f, 8.390827455e-04f, 8.387753549e-04f, 8.384665337e-04f, 8.381562825e-04f, 8.378446019e-04f, 8.375314926e-04f, 8.372169552e-04f, 8.369009903e-04f,
-8.365835986e-04f, 8.362647807e-04f, 8.359445372e-04f, 8.356228688e-04f, 8.352997762e-04f, 8.349752599e-04f, 8.346493207e-04f, 8.343219591e-04f, 8.339931759e-04f, 8.336629716e-04f,
-8.333313471e-04f, 8.329983028e-04f, 8.326638395e-04f, 8.323279579e-04f, 8.319906585e-04f, 8.316519422e-04f, 8.313118095e-04f, 8.309702612e-04f, 8.306272979e-04f, 8.302829203e-04f,
-8.299371290e-04f, 8.295899249e-04f, 8.292413084e-04f, 8.288912805e-04f, 8.285398417e-04f, 8.281869927e-04f, 8.278327343e-04f, 8.274770671e-04f, 8.271199918e-04f, 8.267615092e-04f,
-8.264016199e-04f, 8.260403247e-04f, 8.256776243e-04f, 8.253135194e-04f, 8.249480107e-04f, 8.245810989e-04f, 8.242127847e-04f, 8.238430690e-04f, 8.234719523e-04f, 8.230994355e-04f,
-8.227255192e-04f, 8.223502042e-04f, 8.219734913e-04f, 8.215953811e-04f, 8.212158745e-04f, 8.208349721e-04f, 8.204526747e-04f, 8.200689830e-04f, 8.196838979e-04f, 8.192974200e-04f,
-8.189095501e-04f, 8.185202890e-04f, 8.181296374e-04f, 8.177375961e-04f, 8.173441659e-04f, 8.169493475e-04f, 8.165531416e-04f, 8.161555492e-04f, 8.157565708e-04f, 8.153562074e-04f,
-8.149544597e-04f, 8.145513284e-04f, 8.141468144e-04f, 8.137409185e-04f, 8.133336414e-04f, 8.129249839e-04f, 8.125149468e-04f, 8.121035309e-04f, 8.116907370e-04f, 8.112765660e-04f,
-8.108610185e-04f, 8.104440955e-04f, 8.100257977e-04f, 8.096061259e-04f, 8.091850809e-04f, 8.087626637e-04f, 8.083388748e-04f, 8.079137153e-04f, 8.074871859e-04f, 8.070592874e-04f,
-8.066300207e-04f, 8.061993865e-04f, 8.057673858e-04f, 8.053340193e-04f, 8.048992879e-04f, 8.044631925e-04f, 8.040257338e-04f, 8.035869127e-04f, 8.031467300e-04f, 8.027051866e-04f,
-8.022622834e-04f, 8.018180212e-04f, 8.013724008e-04f, 8.009254231e-04f, 8.004770890e-04f, 8.000273992e-04f, 7.995763548e-04f, 7.991239565e-04f, 7.986702052e-04f, 7.982151018e-04f,
-7.977586472e-04f, 7.973008422e-04f, 7.968416876e-04f, 7.963811845e-04f, 7.959193336e-04f, 7.954561359e-04f, 7.949915922e-04f, 7.945257034e-04f, 7.940584704e-04f, 7.935898941e-04f,
-7.931199754e-04f, 7.926487152e-04f, 7.921761144e-04f, 7.917021739e-04f, 7.912268945e-04f, 7.907502773e-04f, 7.902723230e-04f, 7.897930327e-04f, 7.893124072e-04f, 7.888304474e-04f,
-7.883471543e-04f, 7.878625288e-04f, 7.873765717e-04f, 7.868892841e-04f, 7.864006669e-04f, 7.859107209e-04f, 7.854194471e-04f, 7.849268465e-04f, 7.844329199e-04f, 7.839376683e-04f,
-7.834410927e-04f, 7.829431940e-04f, 7.824439731e-04f, 7.819434310e-04f, 7.814415686e-04f, 7.809383869e-04f, 7.804338868e-04f, 7.799280693e-04f, 7.794209353e-04f, 7.789124859e-04f,
-7.784027219e-04f, 7.778916443e-04f, 7.773792542e-04f, 7.768655523e-04f, 7.763505399e-04f, 7.758342177e-04f, 7.753165868e-04f, 7.747976481e-04f, 7.742774027e-04f, 7.737558515e-04f,
-7.732329955e-04f, 7.727088357e-04f, 7.721833730e-04f, 7.716566085e-04f, 7.711285432e-04f, 7.705991780e-04f, 7.700685139e-04f, 7.695365520e-04f, 7.690032933e-04f, 7.684687387e-04f,
-7.679328892e-04f, 7.673957459e-04f, 7.668573098e-04f, 7.663175818e-04f, 7.657765631e-04f, 7.652342545e-04f, 7.646906572e-04f, 7.641457721e-04f, 7.635996003e-04f, 7.630521428e-04f,
-7.625034007e-04f, 7.619533748e-04f, 7.614020664e-04f, 7.608494764e-04f, 7.602956058e-04f, 7.597404558e-04f, 7.591840272e-04f, 7.586263213e-04f, 7.580673389e-04f, 7.575070812e-04f,
-7.569455493e-04f, 7.563827440e-04f, 7.558186667e-04f, 7.552533181e-04f, 7.546866995e-04f, 7.541188119e-04f, 7.535496564e-04f, 7.529792339e-04f, 7.524075456e-04f, 7.518345926e-04f,
-7.512603759e-04f, 7.506848966e-04f, 7.501081557e-04f, 7.495301544e-04f, 7.489508936e-04f, 7.483703746e-04f, 7.477885984e-04f, 7.472055660e-04f, 7.466212785e-04f, 7.460357371e-04f,
-7.454489429e-04f, 7.448608968e-04f, 7.442716001e-04f, 7.436810538e-04f, 7.430892589e-04f, 7.424962167e-04f, 7.419019283e-04f, 7.413063946e-04f, 7.407096169e-04f, 7.401115962e-04f,
-7.395123336e-04f, 7.389118304e-04f, 7.383100875e-04f, 7.377071061e-04f, 7.371028873e-04f, 7.364974322e-04f, 7.358907421e-04f, 7.352828179e-04f, 7.346736608e-04f, 7.340632720e-04f,
-7.334516526e-04f, 7.328388037e-04f, 7.322247264e-04f, 7.316094219e-04f, 7.309928914e-04f, 7.303751360e-04f, 7.297561567e-04f, 7.291359548e-04f, 7.285145315e-04f, 7.278918878e-04f,
-7.272680249e-04f, 7.266429440e-04f, 7.260166462e-04f, 7.253891328e-04f, 7.247604047e-04f, 7.241304633e-04f, 7.234993097e-04f, 7.228669450e-04f, 7.222333704e-04f, 7.215985871e-04f,
-7.209625963e-04f, 7.203253991e-04f, 7.196869967e-04f, 7.190473903e-04f, 7.184065811e-04f, 7.177645702e-04f, 7.171213589e-04f, 7.164769483e-04f, 7.158313396e-04f, 7.151845341e-04f,
-7.145365328e-04f, 7.138873370e-04f, 7.132369480e-04f, 7.125853668e-04f, 7.119325947e-04f, 7.112786329e-04f, 7.106234826e-04f, 7.099671450e-04f, 7.093096213e-04f, 7.086509128e-04f,
-7.079910206e-04f, 7.073299460e-04f, 7.066676901e-04f, 7.060042543e-04f, 7.053396396e-04f, 7.046738474e-04f, 7.040068788e-04f, 7.033387352e-04f, 7.026694176e-04f, 7.019989274e-04f,
-7.013272658e-04f, 7.006544340e-04f, 6.999804333e-04f, 6.993052648e-04f, 6.986289299e-04f, 6.979514297e-04f, 6.972727656e-04f, 6.965929387e-04f, 6.959119503e-04f, 6.952298017e-04f,
-6.945464942e-04f, 6.938620288e-04f, 6.931764070e-04f, 6.924896300e-04f, 6.918016991e-04f, 6.911126154e-04f, 6.904223803e-04f, 6.897309950e-04f, 6.890384608e-04f, 6.883447790e-04f,
-6.876499509e-04f, 6.869539776e-04f, 6.862568606e-04f, 6.855586010e-04f, 6.848592001e-04f, 6.841586593e-04f, 6.834569798e-04f, 6.827541628e-04f, 6.820502098e-04f, 6.813451219e-04f,
-6.806389004e-04f, 6.799315467e-04f, 6.792230621e-04f, 6.785134478e-04f, 6.778027051e-04f, 6.770908354e-04f, 6.763778399e-04f, 6.756637199e-04f, 6.749484768e-04f, 6.742321118e-04f,
-6.735146263e-04f, 6.727960215e-04f, 6.720762989e-04f, 6.713554596e-04f, 6.706335051e-04f, 6.699104365e-04f, 6.691862554e-04f, 6.684609629e-04f, 6.677345604e-04f, 6.670070492e-04f,
-6.662784307e-04f, 6.655487061e-04f, 6.648178769e-04f, 6.640859443e-04f, 6.633529096e-04f, 6.626187743e-04f, 6.618835397e-04f, 6.611472070e-04f, 6.604097777e-04f, 6.596712530e-04f,
-6.589316343e-04f, 6.581909231e-04f, 6.574491205e-04f, 6.567062280e-04f, 6.559622470e-04f, 6.552171787e-04f, 6.544710245e-04f, 6.537237858e-04f, 6.529754640e-04f, 6.522260604e-04f,
-6.514755764e-04f, 6.507240133e-04f, 6.499713725e-04f, 6.492176554e-04f, 6.484628633e-04f, 6.477069977e-04f, 6.469500598e-04f, 6.461920511e-04f, 6.454329730e-04f, 6.446728268e-04f,
-6.439116139e-04f, 6.431493356e-04f, 6.423859935e-04f, 6.416215888e-04f, 6.408561230e-04f, 6.400895974e-04f, 6.393220134e-04f, 6.385533724e-04f, 6.377836759e-04f, 6.370129252e-04f,
-6.362411217e-04f, 6.354682668e-04f, 6.346943619e-04f, 6.339194085e-04f, 6.331434079e-04f, 6.323663615e-04f, 6.315882707e-04f, 6.308091370e-04f, 6.300289618e-04f, 6.292477464e-04f,
-6.284654924e-04f, 6.276822010e-04f, 6.268978738e-04f, 6.261125121e-04f, 6.253261174e-04f, 6.245386912e-04f, 6.237502347e-04f, 6.229607495e-04f, 6.221702369e-04f, 6.213786985e-04f,
-6.205861356e-04f, 6.197925497e-04f, 6.189979423e-04f, 6.182023146e-04f, 6.174056683e-04f, 6.166080047e-04f, 6.158093253e-04f, 6.150096315e-04f, 6.142089248e-04f, 6.134072065e-04f,
-6.126044783e-04f, 6.118007415e-04f, 6.109959975e-04f, 6.101902479e-04f, 6.093834940e-04f, 6.085757374e-04f, 6.077669795e-04f, 6.069572217e-04f, 6.061464655e-04f, 6.053347125e-04f,
-6.045219640e-04f, 6.037082215e-04f, 6.028934865e-04f, 6.020777604e-04f, 6.012610448e-04f, 6.004433411e-04f, 5.996246507e-04f, 5.988049753e-04f, 5.979843161e-04f, 5.971626748e-04f,
-5.963400528e-04f, 5.955164515e-04f, 5.946918726e-04f, 5.938663173e-04f, 5.930397873e-04f, 5.922122841e-04f, 5.913838091e-04f, 5.905543638e-04f, 5.897239497e-04f, 5.888925683e-04f,
-5.880602211e-04f, 5.872269096e-04f, 5.863926354e-04f, 5.855573998e-04f, 5.847212045e-04f, 5.838840509e-04f, 5.830459405e-04f, 5.822068748e-04f, 5.813668554e-04f, 5.805258838e-04f,
-5.796839614e-04f, 5.788410898e-04f, 5.779972705e-04f, 5.771525051e-04f, 5.763067950e-04f, 5.754601417e-04f, 5.746125468e-04f, 5.737640119e-04f, 5.729145384e-04f, 5.720641278e-04f,
-5.712127818e-04f, 5.703605017e-04f, 5.695072893e-04f, 5.686531459e-04f, 5.677980731e-04f, 5.669420725e-04f, 5.660851456e-04f, 5.652272939e-04f, 5.643685191e-04f, 5.635088225e-04f,
-5.626482058e-04f, 5.617866705e-04f, 5.609242182e-04f, 5.600608504e-04f, 5.591965686e-04f, 5.583313745e-04f, 5.574652695e-04f, 5.565982553e-04f, 5.557303333e-04f, 5.548615051e-04f,
-5.539917723e-04f, 5.531211365e-04f, 5.522495992e-04f, 5.513771620e-04f, 5.505038264e-04f, 5.496295940e-04f, 5.487544663e-04f, 5.478784451e-04f, 5.470015317e-04f, 5.461237278e-04f,
-5.452450350e-04f, 5.443654548e-04f, 5.434849888e-04f, 5.426036387e-04f, 5.417214058e-04f, 5.408382920e-04f, 5.399542986e-04f, 5.390694274e-04f, 5.381836798e-04f, 5.372970576e-04f,
-5.364095622e-04f, 5.355211953e-04f, 5.346319584e-04f, 5.337418532e-04f, 5.328508812e-04f, 5.319590440e-04f, 5.310663433e-04f, 5.301727806e-04f, 5.292783575e-04f, 5.283830757e-04f,
-5.274869366e-04f, 5.265899420e-04f, 5.256920934e-04f, 5.247933925e-04f, 5.238938408e-04f, 5.229934400e-04f, 5.220921916e-04f, 5.211900973e-04f, 5.202871587e-04f, 5.193833774e-04f,
-5.184787550e-04f, 5.175732932e-04f, 5.166669935e-04f, 5.157598575e-04f, 5.148518870e-04f, 5.139430835e-04f, 5.130334486e-04f, 5.121229840e-04f, 5.112116913e-04f, 5.102995720e-04f,
-5.093866280e-04f, 5.084728607e-04f, 5.075582718e-04f, 5.066428629e-04f, 5.057266358e-04f, 5.048095919e-04f, 5.038917330e-04f, 5.029730606e-04f, 5.020535765e-04f, 5.011332823e-04f,
-5.002121795e-04f, 4.992902699e-04f, 4.983675551e-04f, 4.974440367e-04f, 4.965197165e-04f, 4.955945959e-04f, 4.946686768e-04f, 4.937419606e-04f, 4.928144492e-04f, 4.918861441e-04f,
-4.909570470e-04f, 4.900271595e-04f, 4.890964833e-04f, 4.881650202e-04f, 4.872327716e-04f, 4.862997393e-04f, 4.853659250e-04f, 4.844313303e-04f, 4.834959569e-04f, 4.825598064e-04f,
-4.816228805e-04f, 4.806851809e-04f, 4.797467092e-04f, 4.788074672e-04f, 4.778674564e-04f, 4.769266787e-04f, 4.759851355e-04f, 4.750428287e-04f, 4.740997599e-04f, 4.731559307e-04f,
-4.722113429e-04f, 4.712659981e-04f, 4.703198981e-04f, 4.693730444e-04f, 4.684254388e-04f, 4.674770830e-04f, 4.665279786e-04f, 4.655781274e-04f, 4.646275310e-04f, 4.636761911e-04f,
-4.627241094e-04f, 4.617712876e-04f, 4.608177274e-04f, 4.598634305e-04f, 4.589083986e-04f, 4.579526334e-04f, 4.569961366e-04f, 4.560389099e-04f, 4.550809549e-04f, 4.541222734e-04f,
-4.531628671e-04f, 4.522027377e-04f, 4.512418869e-04f, 4.502803164e-04f, 4.493180279e-04f, 4.483550232e-04f, 4.473913038e-04f, 4.464268716e-04f, 4.454617283e-04f, 4.444958755e-04f,
-4.435293150e-04f, 4.425620485e-04f, 4.415940777e-04f, 4.406254044e-04f, 4.396560302e-04f, 4.386859569e-04f, 4.377151861e-04f, 4.367437197e-04f, 4.357715593e-04f, 4.347987066e-04f,
-4.338251635e-04f, 4.328509315e-04f, 4.318760125e-04f, 4.309004082e-04f, 4.299241203e-04f, 4.289471505e-04f, 4.279695005e-04f, 4.269911721e-04f, 4.260121671e-04f, 4.250324871e-04f,
-4.240521340e-04f, 4.230711093e-04f, 4.220894150e-04f, 4.211070526e-04f, 4.201240240e-04f, 4.191403309e-04f, 4.181559750e-04f, 4.171709581e-04f, 4.161852820e-04f, 4.151989483e-04f,
-4.142119588e-04f, 4.132243153e-04f, 4.122360195e-04f, 4.112470731e-04f, 4.102574780e-04f, 4.092672358e-04f, 4.082763484e-04f, 4.072848174e-04f, 4.062926446e-04f, 4.052998319e-04f,
-4.043063808e-04f, 4.033122933e-04f, 4.023175710e-04f, 4.013222157e-04f, 4.003262292e-04f, 3.993296132e-04f, 3.983323696e-04f, 3.973344999e-04f, 3.963360061e-04f, 3.953368899e-04f,
-3.943371531e-04f, 3.933367974e-04f, 3.923358246e-04f, 3.913342364e-04f, 3.903320347e-04f, 3.893292211e-04f, 3.883257976e-04f, 3.873217658e-04f, 3.863171275e-04f, 3.853118845e-04f,
-3.843060386e-04f, 3.832995915e-04f, 3.822925451e-04f, 3.812849010e-04f, 3.802766612e-04f, 3.792678273e-04f, 3.782584012e-04f, 3.772483846e-04f, 3.762377793e-04f, 3.752265871e-04f,
-3.742148098e-04f, 3.732024492e-04f, 3.721895070e-04f, 3.711759850e-04f, 3.701618851e-04f, 3.691472090e-04f, 3.681319586e-04f, 3.671161355e-04f, 3.660997416e-04f, 3.650827787e-04f,
-3.640652486e-04f, 3.630471531e-04f, 3.620284939e-04f, 3.610092729e-04f, 3.599894919e-04f, 3.589691526e-04f, 3.579482569e-04f, 3.569268066e-04f, 3.559048034e-04f, 3.548822492e-04f,
-3.538591458e-04f, 3.528354949e-04f, 3.518112984e-04f, 3.507865581e-04f, 3.497612758e-04f, 3.487354533e-04f, 3.477090923e-04f, 3.466821948e-04f, 3.456547625e-04f, 3.446267972e-04f,
-3.435983008e-04f, 3.425692750e-04f, 3.415397217e-04f, 3.405096426e-04f, 3.394790397e-04f, 3.384479146e-04f, 3.374162693e-04f, 3.363841054e-04f, 3.353514250e-04f, 3.343182297e-04f,
-3.332845214e-04f, 3.322503019e-04f, 3.312155730e-04f, 3.301803366e-04f, 3.291445945e-04f, 3.281083484e-04f, 3.270716003e-04f, 3.260343519e-04f, 3.249966051e-04f, 3.239583616e-04f,
-3.229196234e-04f, 3.218803922e-04f, 3.208406699e-04f, 3.198004583e-04f, 3.187597592e-04f, 3.177185745e-04f, 3.166769059e-04f, 3.156347554e-04f, 3.145921247e-04f, 3.135490158e-04f,
-3.125054303e-04f, 3.114613702e-04f, 3.104168372e-04f, 3.093718333e-04f, 3.083263603e-04f, 3.072804199e-04f, 3.062340141e-04f, 3.051871447e-04f, 3.041398134e-04f, 3.030920222e-04f,
-3.020437729e-04f, 3.009950674e-04f, 2.999459074e-04f, 2.988962948e-04f, 2.978462315e-04f, 2.967957193e-04f, 2.957447600e-04f, 2.946933555e-04f, 2.936415077e-04f, 2.925892183e-04f,
-2.915364893e-04f, 2.904833224e-04f, 2.894297196e-04f, 2.883756826e-04f, 2.873212134e-04f, 2.862663138e-04f, 2.852109855e-04f, 2.841552306e-04f, 2.830990508e-04f, 2.820424479e-04f,
-2.809854239e-04f, 2.799279806e-04f, 2.788701199e-04f, 2.778118435e-04f, 2.767531534e-04f, 2.756940514e-04f, 2.746345393e-04f, 2.735746191e-04f, 2.725142926e-04f, 2.714535616e-04f,
-2.703924280e-04f, 2.693308937e-04f, 2.682689605e-04f, 2.672066303e-04f, 2.661439049e-04f, 2.650807862e-04f, 2.640172761e-04f, 2.629533765e-04f, 2.618890891e-04f, 2.608244159e-04f,
-2.597593587e-04f, 2.586939194e-04f, 2.576280998e-04f, 2.565619019e-04f, 2.554953275e-04f, 2.544283784e-04f, 2.533610566e-04f, 2.522933638e-04f, 2.512253020e-04f, 2.501568731e-04f,
-2.490880788e-04f, 2.480189212e-04f, 2.469494019e-04f, 2.458795230e-04f, 2.448092863e-04f, 2.437386936e-04f, 2.426677469e-04f, 2.415964480e-04f, 2.405247988e-04f, 2.394528011e-04f,
-2.383804568e-04f, 2.373077679e-04f, 2.362347362e-04f, 2.351613635e-04f, 2.340876517e-04f, 2.330136028e-04f, 2.319392186e-04f, 2.308645009e-04f, 2.297894517e-04f, 2.287140728e-04f,
-2.276383661e-04f, 2.265623336e-04f, 2.254859770e-04f, 2.244092982e-04f, 2.233322992e-04f, 2.222549818e-04f, 2.211773479e-04f, 2.200993994e-04f, 2.190211382e-04f, 2.179425661e-04f,
-2.168636850e-04f, 2.157844969e-04f, 2.147050035e-04f, 2.136252069e-04f, 2.125451088e-04f, 2.114647112e-04f, 2.103840159e-04f, 2.093030249e-04f, 2.082217400e-04f, 2.071401631e-04f,
-2.060582961e-04f, 2.049761409e-04f, 2.038936994e-04f, 2.028109734e-04f, 2.017279649e-04f, 2.006446758e-04f, 1.995611078e-04f, 1.984772631e-04f, 1.973931433e-04f, 1.963087504e-04f,
-1.952240863e-04f, 1.941391530e-04f, 1.930539522e-04f, 1.919684859e-04f, 1.908827559e-04f, 1.897967643e-04f, 1.887105128e-04f, 1.876240033e-04f, 1.865372378e-04f, 1.854502182e-04f,
-1.843629463e-04f, 1.832754240e-04f, 1.821876532e-04f, 1.810996359e-04f, 1.800113739e-04f, 1.789228691e-04f, 1.778341235e-04f, 1.767451388e-04f, 1.756559171e-04f, 1.745664602e-04f,
-1.734767700e-04f, 1.723868484e-04f, 1.712966973e-04f, 1.702063186e-04f, 1.691157142e-04f, 1.680248860e-04f, 1.669338360e-04f, 1.658425659e-04f, 1.647510777e-04f, 1.636593734e-04f,
-1.625674547e-04f, 1.614753237e-04f, 1.603829822e-04f, 1.592904320e-04f, 1.581976752e-04f, 1.571047137e-04f, 1.560115492e-04f, 1.549181837e-04f, 1.538246192e-04f, 1.527308575e-04f,
-1.516369006e-04f, 1.505427502e-04f, 1.494484084e-04f, 1.483538771e-04f, 1.472591581e-04f, 1.461642533e-04f, 1.450691647e-04f, 1.439738942e-04f, 1.428784436e-04f, 1.417828149e-04f,
-1.406870100e-04f, 1.395910307e-04f, 1.384948791e-04f, 1.373985569e-04f, 1.363020661e-04f, 1.352054087e-04f, 1.341085864e-04f, 1.330116013e-04f, 1.319144552e-04f, 1.308171500e-04f,
-1.297196877e-04f, 1.286220701e-04f, 1.275242991e-04f, 1.264263768e-04f, 1.253283049e-04f, 1.242300853e-04f, 1.231317201e-04f, 1.220332110e-04f, 1.209345601e-04f, 1.198357691e-04f,
-1.187368401e-04f, 1.176377749e-04f, 1.165385754e-04f, 1.154392436e-04f, 1.143397813e-04f, 1.132401905e-04f, 1.121404731e-04f, 1.110406309e-04f, 1.099406660e-04f, 1.088405801e-04f,
-1.077403752e-04f, 1.066400533e-04f, 1.055396162e-04f, 1.044390658e-04f, 1.033384041e-04f, 1.022376329e-04f, 1.011367542e-04f, 1.000357698e-04f, 9.893468179e-05f, 9.783349194e-05f,
-9.673220220e-05f, 9.563081447e-05f, 9.452933068e-05f, 9.342775272e-05f, 9.232608251e-05f, 9.122432196e-05f, 9.012247298e-05f, 8.902053748e-05f, 8.791851737e-05f, 8.681641456e-05f,
-8.571423096e-05f, 8.461196848e-05f, 8.350962904e-05f, 8.240721454e-05f, 8.130472689e-05f, 8.020216801e-05f, 7.909953980e-05f, 7.799684418e-05f, 7.689408306e-05f, 7.579125834e-05f,
-7.468837195e-05f, 7.358542578e-05f, 7.248242175e-05f, 7.137936176e-05f, 7.027624774e-05f, 6.917308159e-05f, 6.806986523e-05f, 6.696660055e-05f, 6.586328947e-05f, 6.475993391e-05f,
-6.365653577e-05f, 6.255309697e-05f, 6.144961940e-05f, 6.034610499e-05f, 5.924255565e-05f, 5.813897328e-05f, 5.703535979e-05f, 5.593171709e-05f, 5.482804710e-05f, 5.372435173e-05f,
-5.262063287e-05f, 5.151689245e-05f, 5.041313238e-05f, 4.930935455e-05f, 4.820556088e-05f, 4.710175329e-05f, 4.599793367e-05f, 4.489410395e-05f, 4.379026602e-05f, 4.268642180e-05f,
-4.158257320e-05f, 4.047872211e-05f, 3.937487047e-05f, 3.827102016e-05f, 3.716717310e-05f, 3.606333120e-05f, 3.495949637e-05f, 3.385567051e-05f, 3.275185553e-05f, 3.164805334e-05f,
-3.054426585e-05f, 2.944049496e-05f, 2.833674259e-05f, 2.723301063e-05f, 2.612930099e-05f, 2.502561559e-05f, 2.392195633e-05f, 2.281832512e-05f, 2.171472385e-05f, 2.061115444e-05f,
-1.950761880e-05f, 1.840411882e-05f, 1.730065642e-05f, 1.619723350e-05f, 1.509385197e-05f, 1.399051372e-05f, 1.288722067e-05f, 1.178397472e-05f, 1.068077777e-05f, 9.577631735e-06f,
-8.474538509e-06f, 7.371499999e-06f, 6.268518109e-06f, 5.165594741e-06f, 4.062731800e-06f, 2.959931187e-06f, 1.857194806e-06f, 7.545245588e-07f, -3.480776521e-07f, -1.450609925e-06f,
--2.553070357e-06f, -3.655457049e-06f, -4.757768097e-06f, -5.860001602e-06f, -6.962155663e-06f, -8.064228379e-06f, -9.166217850e-06f, -1.026812218e-05f, -1.136993946e-05f, -1.247166779e-05f,
--1.357330529e-05f, -1.467485004e-05f, -1.577630015e-05f, -1.687765372e-05f, -1.797890886e-05f, -1.908006366e-05f, -2.018111622e-05f, -2.128206466e-05f, -2.238290708e-05f, -2.348364157e-05f,
--2.458426624e-05f, -2.568477919e-05f, -2.678517854e-05f, -2.788546238e-05f, -2.898562882e-05f, -3.008567596e-05f, -3.118560191e-05f, -3.228540479e-05f, -3.338508268e-05f, -3.448463370e-05f,
--3.558405596e-05f, -3.668334756e-05f, -3.778250661e-05f, -3.888153123e-05f, -3.998041951e-05f, -4.107916956e-05f, -4.217777951e-05f, -4.327624745e-05f, -4.437457149e-05f, -4.547274975e-05f,
--4.657078033e-05f, -4.766866135e-05f, -4.876639092e-05f, -4.986396715e-05f, -5.096138815e-05f, -5.205865203e-05f, -5.315575691e-05f, -5.425270090e-05f, -5.534948212e-05f, -5.644609867e-05f,
--5.754254868e-05f, -5.863883025e-05f, -5.973494151e-05f, -6.083088056e-05f, -6.192664553e-05f, -6.302223453e-05f, -6.411764568e-05f, -6.521287709e-05f, -6.630792689e-05f, -6.740279318e-05f,
--6.849747410e-05f, -6.959196776e-05f, -7.068627227e-05f, -7.178038577e-05f, -7.287430636e-05f, -7.396803217e-05f, -7.506156133e-05f, -7.615489194e-05f, -7.724802215e-05f, -7.834095006e-05f,
--7.943367380e-05f, -8.052619150e-05f, -8.161850127e-05f, -8.271060125e-05f, -8.380248956e-05f, -8.489416432e-05f, -8.598562367e-05f, -8.707686572e-05f, -8.816788860e-05f, -8.925869045e-05f,
--9.034926939e-05f, -9.143962354e-05f, -9.252975105e-05f, -9.361965003e-05f, -9.470931861e-05f, -9.579875494e-05f, -9.688795713e-05f, -9.797692332e-05f, -9.906565165e-05f, -1.001541402e-04f,
--1.012423872e-04f, -1.023303908e-04f, -1.034181489e-04f, -1.045056599e-04f, -1.055929219e-04f, -1.066799329e-04f, -1.077666911e-04f, -1.088531946e-04f, -1.099394417e-04f, -1.110254303e-04f,
--1.121111588e-04f, -1.131966251e-04f, -1.142818274e-04f, -1.153667640e-04f, -1.164514329e-04f, -1.175358322e-04f, -1.186199601e-04f, -1.197038148e-04f, -1.207873944e-04f, -1.218706970e-04f,
--1.229537208e-04f, -1.240364639e-04f, -1.251189245e-04f, -1.262011007e-04f, -1.272829906e-04f, -1.283645925e-04f, -1.294459045e-04f, -1.305269246e-04f, -1.316076511e-04f, -1.326880821e-04f,
--1.337682158e-04f, -1.348480503e-04f, -1.359275837e-04f, -1.370068143e-04f, -1.380857401e-04f, -1.391643593e-04f, -1.402426702e-04f, -1.413206707e-04f, -1.423983592e-04f, -1.434757336e-04f,
--1.445527923e-04f, -1.456295334e-04f, -1.467059549e-04f, -1.477820552e-04f, -1.488578323e-04f, -1.499332843e-04f, -1.510084095e-04f, -1.520832061e-04f, -1.531576721e-04f, -1.542318058e-04f,
--1.553056053e-04f, -1.563790687e-04f, -1.574521943e-04f, -1.585249802e-04f, -1.595974246e-04f, -1.606695256e-04f, -1.617412814e-04f, -1.628126902e-04f, -1.638837502e-04f, -1.649544594e-04f,
--1.660248161e-04f, -1.670948185e-04f, -1.681644648e-04f, -1.692337530e-04f, -1.703026814e-04f, -1.713712482e-04f, -1.724394515e-04f, -1.735072895e-04f, -1.745747603e-04f, -1.756418623e-04f,
--1.767085934e-04f, -1.777749520e-04f, -1.788409362e-04f, -1.799065441e-04f, -1.809717740e-04f, -1.820366241e-04f, -1.831010925e-04f, -1.841651773e-04f, -1.852288769e-04f, -1.862921893e-04f,
--1.873551129e-04f, -1.884176456e-04f, -1.894797858e-04f, -1.905415316e-04f, -1.916028812e-04f, -1.926638329e-04f, -1.937243847e-04f, -1.947845349e-04f, -1.958442817e-04f, -1.969036233e-04f,
--1.979625578e-04f, -1.990210835e-04f, -2.000791985e-04f, -2.011369011e-04f, -2.021941895e-04f, -2.032510618e-04f, -2.043075162e-04f, -2.053635510e-04f, -2.064191644e-04f, -2.074743545e-04f,
--2.085291195e-04f, -2.095834577e-04f, -2.106373673e-04f, -2.116908464e-04f, -2.127438933e-04f, -2.137965062e-04f, -2.148486832e-04f, -2.159004227e-04f, -2.169517227e-04f, -2.180025816e-04f,
--2.190529974e-04f, -2.201029686e-04f, -2.211524931e-04f, -2.222015694e-04f, -2.232501954e-04f, -2.242983696e-04f, -2.253460901e-04f, -2.263933552e-04f, -2.274401629e-04f, -2.284865116e-04f,
--2.295323996e-04f, -2.305778249e-04f, -2.316227858e-04f, -2.326672806e-04f, -2.337113074e-04f, -2.347548646e-04f, -2.357979502e-04f, -2.368405626e-04f, -2.378827000e-04f, -2.389243606e-04f,
--2.399655426e-04f, -2.410062443e-04f, -2.420464639e-04f, -2.430861996e-04f, -2.441254496e-04f, -2.451642122e-04f, -2.462024857e-04f, -2.472402682e-04f, -2.482775581e-04f, -2.493143534e-04f,
--2.503506526e-04f, -2.513864537e-04f, -2.524217551e-04f, -2.534565550e-04f, -2.544908516e-04f, -2.555246432e-04f, -2.565579281e-04f, -2.575907044e-04f, -2.586229704e-04f, -2.596547244e-04f,
--2.606859647e-04f, -2.617166893e-04f, -2.627468967e-04f, -2.637765851e-04f, -2.648057527e-04f, -2.658343977e-04f, -2.668625185e-04f, -2.678901132e-04f, -2.689171802e-04f, -2.699437177e-04f,
--2.709697240e-04f, -2.719951972e-04f, -2.730201358e-04f, -2.740445378e-04f, -2.750684017e-04f, -2.760917256e-04f, -2.771145079e-04f, -2.781367468e-04f, -2.791584405e-04f, -2.801795873e-04f,
--2.812001856e-04f, -2.822202335e-04f, -2.832397293e-04f, -2.842586714e-04f, -2.852770579e-04f, -2.862948872e-04f, -2.873121576e-04f, -2.883288672e-04f, -2.893450144e-04f, -2.903605975e-04f,
--2.913756148e-04f, -2.923900644e-04f, -2.934039448e-04f, -2.944172542e-04f, -2.954299909e-04f, -2.964421531e-04f, -2.974537391e-04f, -2.984647473e-04f, -2.994751759e-04f, -3.004850233e-04f,
--3.014942876e-04f, -3.025029672e-04f, -3.035110604e-04f, -3.045185655e-04f, -3.055254808e-04f, -3.065318046e-04f, -3.075375351e-04f, -3.085426707e-04f, -3.095472097e-04f, -3.105511503e-04f,
--3.115544909e-04f, -3.125572298e-04f, -3.135593652e-04f, -3.145608956e-04f, -3.155618191e-04f, -3.165621342e-04f, -3.175618390e-04f, -3.185609320e-04f, -3.195594114e-04f, -3.205572755e-04f,
--3.215545227e-04f, -3.225511513e-04f, -3.235471595e-04f, -3.245425458e-04f, -3.255373084e-04f, -3.265314456e-04f, -3.275249558e-04f, -3.285178372e-04f, -3.295100883e-04f, -3.305017073e-04f,
--3.314926926e-04f, -3.324830424e-04f, -3.334727552e-04f, -3.344618292e-04f, -3.354502627e-04f, -3.364380542e-04f, -3.374252019e-04f, -3.384117042e-04f, -3.393975594e-04f, -3.403827658e-04f,
--3.413673218e-04f, -3.423512257e-04f, -3.433344758e-04f, -3.443170706e-04f, -3.452990083e-04f, -3.462802873e-04f, -3.472609059e-04f, -3.482408625e-04f, -3.492201554e-04f, -3.501987830e-04f,
--3.511767436e-04f, -3.521540356e-04f, -3.531306573e-04f, -3.541066071e-04f, -3.550818833e-04f, -3.560564843e-04f, -3.570304085e-04f, -3.580036541e-04f, -3.589762197e-04f, -3.599481034e-04f,
--3.609193038e-04f, -3.618898191e-04f, -3.628596477e-04f, -3.638287880e-04f, -3.647972384e-04f, -3.657649972e-04f, -3.667320627e-04f, -3.676984335e-04f, -3.686641078e-04f, -3.696290840e-04f,
--3.705933605e-04f, -3.715569356e-04f, -3.725198078e-04f, -3.734819755e-04f, -3.744434369e-04f, -3.754041905e-04f, -3.763642347e-04f, -3.773235678e-04f, -3.782821883e-04f, -3.792400945e-04f,
--3.801972848e-04f, -3.811537577e-04f, -3.821095114e-04f, -3.830645445e-04f, -3.840188552e-04f, -3.849724420e-04f, -3.859253033e-04f, -3.868774374e-04f, -3.878288429e-04f, -3.887795180e-04f,
--3.897294612e-04f, -3.906786708e-04f, -3.916271454e-04f, -3.925748833e-04f, -3.935218829e-04f, -3.944681425e-04f, -3.954136608e-04f, -3.963584359e-04f, -3.973024664e-04f, -3.982457507e-04f,
--3.991882871e-04f, -4.001300742e-04f, -4.010711102e-04f, -4.020113937e-04f, -4.029509231e-04f, -4.038896967e-04f, -4.048277131e-04f, -4.057649705e-04f, -4.067014676e-04f, -4.076372026e-04f,
--4.085721741e-04f, -4.095063804e-04f, -4.104398200e-04f, -4.113724913e-04f, -4.123043927e-04f, -4.132355228e-04f, -4.141658799e-04f, -4.150954625e-04f, -4.160242689e-04f, -4.169522978e-04f,
--4.178795474e-04f, -4.188060163e-04f, -4.197317028e-04f, -4.206566056e-04f, -4.215807229e-04f, -4.225040532e-04f, -4.234265951e-04f, -4.243483469e-04f, -4.252693071e-04f, -4.261894742e-04f,
--4.271088466e-04f, -4.280274228e-04f, -4.289452012e-04f, -4.298621804e-04f, -4.307783588e-04f, -4.316937347e-04f, -4.326083068e-04f, -4.335220735e-04f, -4.344350332e-04f, -4.353471845e-04f,
--4.362585258e-04f, -4.371690555e-04f, -4.380787722e-04f, -4.389876743e-04f, -4.398957603e-04f, -4.408030287e-04f, -4.417094780e-04f, -4.426151066e-04f, -4.435199131e-04f, -4.444238960e-04f,
--4.453270536e-04f, -4.462293846e-04f, -4.471308873e-04f, -4.480315604e-04f, -4.489314022e-04f, -4.498304114e-04f, -4.507285863e-04f, -4.516259255e-04f, -4.525224275e-04f, -4.534180908e-04f,
--4.543129139e-04f, -4.552068953e-04f, -4.561000335e-04f, -4.569923271e-04f, -4.578837744e-04f, -4.587743741e-04f, -4.596641247e-04f, -4.605530246e-04f, -4.614410724e-04f, -4.623282666e-04f,
--4.632146057e-04f, -4.641000883e-04f, -4.649847129e-04f, -4.658684779e-04f, -4.667513820e-04f, -4.676334236e-04f, -4.685146013e-04f, -4.693949136e-04f, -4.702743591e-04f, -4.711529362e-04f,
--4.720306435e-04f, -4.729074796e-04f, -4.737834430e-04f, -4.746585322e-04f, -4.755327458e-04f, -4.764060822e-04f, -4.772785402e-04f, -4.781501181e-04f, -4.790208147e-04f, -4.798906283e-04f,
--4.807595575e-04f, -4.816276010e-04f, -4.824947573e-04f, -4.833610249e-04f, -4.842264023e-04f, -4.850908882e-04f, -4.859544811e-04f, -4.868171796e-04f, -4.876789822e-04f, -4.885398875e-04f,
--4.893998940e-04f, -4.902590004e-04f, -4.911172052e-04f, -4.919745070e-04f, -4.928309044e-04f, -4.936863958e-04f, -4.945409800e-04f, -4.953946555e-04f, -4.962474208e-04f, -4.970992746e-04f,
--4.979502155e-04f, -4.988002419e-04f, -4.996493526e-04f, -5.004975461e-04f, -5.013448209e-04f, -5.021911758e-04f, -5.030366092e-04f, -5.038811198e-04f, -5.047247062e-04f, -5.055673670e-04f,
--5.064091007e-04f, -5.072499061e-04f, -5.080897816e-04f, -5.089287259e-04f, -5.097667376e-04f, -5.106038153e-04f, -5.114399576e-04f, -5.122751632e-04f, -5.131094306e-04f, -5.139427585e-04f,
--5.147751455e-04f, -5.156065902e-04f, -5.164370912e-04f, -5.172666472e-04f, -5.180952567e-04f, -5.189229185e-04f, -5.197496310e-04f, -5.205753931e-04f, -5.214002032e-04f, -5.222240601e-04f,
--5.230469623e-04f, -5.238689086e-04f, -5.246898974e-04f, -5.255099276e-04f, -5.263289977e-04f, -5.271471064e-04f, -5.279642522e-04f, -5.287804340e-04f, -5.295956503e-04f, -5.304098997e-04f,
--5.312231809e-04f, -5.320354927e-04f, -5.328468335e-04f, -5.336572021e-04f, -5.344665972e-04f, -5.352750174e-04f, -5.360824614e-04f, -5.368889278e-04f, -5.376944154e-04f, -5.384989227e-04f,
--5.393024484e-04f, -5.401049913e-04f, -5.409065500e-04f, -5.417071231e-04f, -5.425067094e-04f, -5.433053076e-04f, -5.441029162e-04f, -5.448995340e-04f, -5.456951598e-04f, -5.464897920e-04f,
--5.472834296e-04f, -5.480760711e-04f, -5.488677152e-04f, -5.496583607e-04f, -5.504480061e-04f, -5.512366504e-04f, -5.520242920e-04f, -5.528109298e-04f, -5.535965624e-04f, -5.543811885e-04f,
--5.551648069e-04f, -5.559474163e-04f, -5.567290153e-04f, -5.575096026e-04f, -5.582891771e-04f, -5.590677374e-04f, -5.598452822e-04f, -5.606218102e-04f, -5.613973202e-04f, -5.621718109e-04f,
--5.629452811e-04f, -5.637177293e-04f, -5.644891544e-04f, -5.652595552e-04f, -5.660289302e-04f, -5.667972784e-04f, -5.675645983e-04f, -5.683308888e-04f, -5.690961485e-04f, -5.698603763e-04f,
--5.706235709e-04f, -5.713857310e-04f, -5.721468553e-04f, -5.729069426e-04f, -5.736659917e-04f, -5.744240014e-04f, -5.751809703e-04f, -5.759368972e-04f, -5.766917809e-04f, -5.774456202e-04f,
--5.781984137e-04f, -5.789501604e-04f, -5.797008589e-04f, -5.804505080e-04f, -5.811991064e-04f, -5.819466531e-04f, -5.826931466e-04f, -5.834385859e-04f, -5.841829696e-04f, -5.849262966e-04f,
--5.856685656e-04f, -5.864097755e-04f, -5.871499250e-04f, -5.878890128e-04f, -5.886270379e-04f, -5.893639989e-04f, -5.900998947e-04f, -5.908347241e-04f, -5.915684858e-04f, -5.923011787e-04f,
--5.930328015e-04f, -5.937633531e-04f, -5.944928323e-04f, -5.952212378e-04f, -5.959485686e-04f, -5.966748233e-04f, -5.974000008e-04f, -5.981241000e-04f, -5.988471196e-04f, -5.995690584e-04f,
--6.002899153e-04f, -6.010096891e-04f, -6.017283786e-04f, -6.024459827e-04f, -6.031625002e-04f, -6.038779298e-04f, -6.045922705e-04f, -6.053055211e-04f, -6.060176803e-04f, -6.067287471e-04f,
--6.074387203e-04f, -6.081475987e-04f, -6.088553812e-04f, -6.095620666e-04f, -6.102676537e-04f, -6.109721415e-04f, -6.116755287e-04f, -6.123778143e-04f, -6.130789970e-04f, -6.137790757e-04f,
--6.144780493e-04f, -6.151759167e-04f, -6.158726766e-04f, -6.165683281e-04f, -6.172628699e-04f, -6.179563009e-04f, -6.186486199e-04f, -6.193398260e-04f, -6.200299179e-04f, -6.207188944e-04f,
--6.214067546e-04f, -6.220934972e-04f, -6.227791212e-04f, -6.234636255e-04f, -6.241470088e-04f, -6.248292702e-04f, -6.255104085e-04f, -6.261904225e-04f, -6.268693113e-04f, -6.275470737e-04f,
--6.282237085e-04f, -6.288992148e-04f, -6.295735913e-04f, -6.302468370e-04f, -6.309189509e-04f, -6.315899318e-04f, -6.322597785e-04f, -6.329284902e-04f, -6.335960656e-04f, -6.342625036e-04f,
--6.349278033e-04f, -6.355919635e-04f, -6.362549831e-04f, -6.369168611e-04f, -6.375775964e-04f, -6.382371879e-04f, -6.388956345e-04f, -6.395529353e-04f, -6.402090891e-04f, -6.408640948e-04f,
--6.415179514e-04f, -6.421706579e-04f, -6.428222132e-04f, -6.434726162e-04f, -6.441218659e-04f, -6.447699612e-04f, -6.454169012e-04f, -6.460626846e-04f, -6.467073106e-04f, -6.473507780e-04f,
--6.479930858e-04f, -6.486342330e-04f, -6.492742186e-04f, -6.499130414e-04f, -6.505507006e-04f, -6.511871950e-04f, -6.518225236e-04f, -6.524566854e-04f, -6.530896794e-04f, -6.537215045e-04f,
--6.543521598e-04f, -6.549816442e-04f, -6.556099567e-04f, -6.562370964e-04f, -6.568630620e-04f, -6.574878528e-04f, -6.581114676e-04f, -6.587339055e-04f, -6.593551655e-04f, -6.599752465e-04f,
--6.605941476e-04f, -6.612118678e-04f, -6.618284060e-04f, -6.624437614e-04f, -6.630579328e-04f, -6.636709193e-04f, -6.642827200e-04f, -6.648933338e-04f, -6.655027598e-04f, -6.661109969e-04f,
--6.667180443e-04f, -6.673239009e-04f, -6.679285657e-04f, -6.685320378e-04f, -6.691343163e-04f, -6.697354001e-04f, -6.703352883e-04f, -6.709339799e-04f, -6.715314740e-04f, -6.721277696e-04f,
--6.727228658e-04f, -6.733167616e-04f, -6.739094560e-04f, -6.745009481e-04f, -6.750912370e-04f, -6.756803217e-04f, -6.762682013e-04f, -6.768548748e-04f, -6.774403413e-04f, -6.780245999e-04f,
--6.786076496e-04f, -6.791894894e-04f, -6.797701185e-04f, -6.803495360e-04f, -6.809277409e-04f, -6.815047322e-04f, -6.820805092e-04f, -6.826550707e-04f, -6.832284160e-04f, -6.838005441e-04f,
--6.843714541e-04f, -6.849411451e-04f, -6.855096162e-04f, -6.860768665e-04f, -6.866428950e-04f, -6.872077009e-04f, -6.877712833e-04f, -6.883336413e-04f, -6.888947739e-04f, -6.894546804e-04f,
--6.900133597e-04f, -6.905708111e-04f, -6.911270335e-04f, -6.916820262e-04f, -6.922357883e-04f, -6.927883188e-04f, -6.933396170e-04f, -6.938896819e-04f, -6.944385126e-04f, -6.949861083e-04f,
--6.955324681e-04f, -6.960775912e-04f, -6.966214766e-04f, -6.971641236e-04f, -6.977055312e-04f, -6.982456986e-04f, -6.987846250e-04f, -6.993223094e-04f, -6.998587512e-04f, -7.003939493e-04f,
--7.009279029e-04f, -7.014606112e-04f, -7.019920734e-04f, -7.025222887e-04f, -7.030512561e-04f, -7.035789748e-04f, -7.041054441e-04f, -7.046306630e-04f, -7.051546308e-04f, -7.056773466e-04f,
--7.061988096e-04f, -7.067190190e-04f, -7.072379740e-04f, -7.077556736e-04f, -7.082721172e-04f, -7.087873040e-04f, -7.093012330e-04f, -7.098139035e-04f, -7.103253147e-04f, -7.108354657e-04f,
--7.113443559e-04f, -7.118519843e-04f, -7.123583502e-04f, -7.128634528e-04f, -7.133672912e-04f, -7.138698648e-04f, -7.143711726e-04f, -7.148712140e-04f, -7.153699881e-04f, -7.158674942e-04f,
--7.163637315e-04f, -7.168586991e-04f, -7.173523964e-04f, -7.178448225e-04f, -7.183359767e-04f, -7.188258582e-04f, -7.193144662e-04f, -7.198018000e-04f, -7.202878589e-04f, -7.207726419e-04f,
--7.212561485e-04f, -7.217383778e-04f, -7.222193291e-04f, -7.226990017e-04f, -7.231773947e-04f, -7.236545075e-04f, -7.241303393e-04f, -7.246048893e-04f, -7.250781569e-04f, -7.255501412e-04f,
--7.260208416e-04f, -7.264902573e-04f, -7.269583875e-04f, -7.274252317e-04f, -7.278907889e-04f, -7.283550586e-04f, -7.288180399e-04f, -7.292797322e-04f, -7.297401348e-04f, -7.301992468e-04f,
--7.306570678e-04f, -7.311135968e-04f, -7.315688332e-04f, -7.320227763e-04f, -7.324754254e-04f, -7.329267798e-04f, -7.333768388e-04f, -7.338256017e-04f, -7.342730678e-04f, -7.347192364e-04f,
--7.351641069e-04f, -7.356076785e-04f, -7.360499505e-04f, -7.364909223e-04f, -7.369305932e-04f, -7.373689625e-04f, -7.378060295e-04f, -7.382417936e-04f, -7.386762541e-04f, -7.391094103e-04f,
--7.395412615e-04f, -7.399718072e-04f, -7.404010466e-04f, -7.408289790e-04f, -7.412556039e-04f, -7.416809205e-04f, -7.421049282e-04f, -7.425276264e-04f, -7.429490144e-04f, -7.433690915e-04f,
--7.437878572e-04f, -7.442053107e-04f, -7.446214515e-04f, -7.450362789e-04f, -7.454497922e-04f, -7.458619909e-04f, -7.462728743e-04f, -7.466824417e-04f, -7.470906927e-04f, -7.474976264e-04f,
--7.479032423e-04f, -7.483075399e-04f, -7.487105184e-04f, -7.491121773e-04f, -7.495125159e-04f, -7.499115337e-04f, -7.503092300e-04f, -7.507056042e-04f, -7.511006558e-04f, -7.514943841e-04f,
--7.518867885e-04f, -7.522778685e-04f, -7.526676234e-04f, -7.530560527e-04f, -7.534431558e-04f, -7.538289320e-04f, -7.542133808e-04f, -7.545965017e-04f, -7.549782940e-04f, -7.553587571e-04f,
--7.557378906e-04f, -7.561156937e-04f, -7.564921660e-04f, -7.568673069e-04f, -7.572411159e-04f, -7.576135922e-04f, -7.579847355e-04f, -7.583545451e-04f, -7.587230205e-04f, -7.590901611e-04f,
--7.594559664e-04f, -7.598204359e-04f, -7.601835689e-04f, -7.605453650e-04f, -7.609058236e-04f, -7.612649441e-04f, -7.616227261e-04f, -7.619791689e-04f, -7.623342721e-04f, -7.626880352e-04f,
--7.630404576e-04f, -7.633915387e-04f, -7.637412781e-04f, -7.640896753e-04f, -7.644367296e-04f, -7.647824407e-04f, -7.651268080e-04f, -7.654698309e-04f, -7.658115090e-04f, -7.661518418e-04f,
--7.664908288e-04f, -7.668284694e-04f, -7.671647632e-04f, -7.674997097e-04f, -7.678333083e-04f, -7.681655586e-04f, -7.684964602e-04f, -7.688260124e-04f, -7.691542148e-04f, -7.694810670e-04f,
--7.698065685e-04f, -7.701307187e-04f, -7.704535173e-04f, -7.707749637e-04f, -7.710950574e-04f, -7.714137981e-04f, -7.717311852e-04f, -7.720472182e-04f, -7.723618968e-04f, -7.726752204e-04f,
--7.729871886e-04f, -7.732978010e-04f, -7.736070570e-04f, -7.739149563e-04f, -7.742214984e-04f, -7.745266828e-04f, -7.748305091e-04f, -7.751329769e-04f, -7.754340858e-04f, -7.757338352e-04f,
--7.760322248e-04f, -7.763292541e-04f, -7.766249228e-04f, -7.769192303e-04f, -7.772121763e-04f, -7.775037603e-04f, -7.777939819e-04f, -7.780828408e-04f, -7.783703364e-04f, -7.786564684e-04f,
--7.789412364e-04f, -7.792246399e-04f, -7.795066787e-04f, -7.797873521e-04f, -7.800666600e-04f, -7.803446018e-04f, -7.806211772e-04f, -7.808963857e-04f, -7.811702271e-04f, -7.814427008e-04f,
--7.817138066e-04f, -7.819835440e-04f, -7.822519126e-04f, -7.825189122e-04f, -7.827845422e-04f, -7.830488024e-04f, -7.833116923e-04f, -7.835732117e-04f, -7.838333600e-04f, -7.840921370e-04f,
--7.843495424e-04f, -7.846055756e-04f, -7.848602365e-04f, -7.851135246e-04f, -7.853654396e-04f, -7.856159811e-04f, -7.858651488e-04f, -7.861129423e-04f, -7.863593614e-04f, -7.866044056e-04f,
--7.868480746e-04f, -7.870903682e-04f, -7.873312859e-04f, -7.875708274e-04f, -7.878089924e-04f, -7.880457807e-04f, -7.882811917e-04f, -7.885152253e-04f, -7.887478812e-04f, -7.889791589e-04f,
--7.892090583e-04f, -7.894375789e-04f, -7.896647205e-04f, -7.898904827e-04f, -7.901148653e-04f, -7.903378680e-04f, -7.905594905e-04f, -7.907797324e-04f, -7.909985935e-04f, -7.912160735e-04f,
--7.914321721e-04f, -7.916468890e-04f, -7.918602239e-04f, -7.920721766e-04f, -7.922827467e-04f, -7.924919341e-04f, -7.926997383e-04f, -7.929061592e-04f, -7.931111964e-04f, -7.933148498e-04f,
--7.935171190e-04f, -7.937180038e-04f, -7.939175039e-04f, -7.941156191e-04f, -7.943123491e-04f, -7.945076936e-04f, -7.947016525e-04f, -7.948942254e-04f, -7.950854121e-04f, -7.952752124e-04f,
--7.954636260e-04f, -7.956506527e-04f, -7.958362923e-04f, -7.960205445e-04f, -7.962034091e-04f, -7.963848858e-04f, -7.965649745e-04f, -7.967436749e-04f, -7.969209868e-04f, -7.970969100e-04f,
--7.972714442e-04f, -7.974445892e-04f, -7.976163449e-04f, -7.977867111e-04f, -7.979556874e-04f, -7.981232737e-04f, -7.982894699e-04f, -7.984542757e-04f, -7.986176908e-04f, -7.987797152e-04f,
--7.989403487e-04f, -7.990995909e-04f, -7.992574418e-04f, -7.994139012e-04f, -7.995689689e-04f, -7.997226446e-04f, -7.998749283e-04f, -8.000258198e-04f, -8.001753188e-04f, -8.003234252e-04f,
--8.004701388e-04f, -8.006154596e-04f, -8.007593872e-04f, -8.009019216e-04f, -8.010430626e-04f, -8.011828100e-04f, -8.013211637e-04f, -8.014581235e-04f, -8.015936893e-04f, -8.017278609e-04f,
--8.018606382e-04f, -8.019920211e-04f, -8.021220094e-04f, -8.022506030e-04f, -8.023778017e-04f, -8.025036054e-04f, -8.026280140e-04f, -8.027510273e-04f, -8.028726453e-04f, -8.029928677e-04f,
--8.031116946e-04f, -8.032291257e-04f, -8.033451610e-04f, -8.034598003e-04f, -8.035730436e-04f, -8.036848907e-04f, -8.037953415e-04f, -8.039043959e-04f, -8.040120538e-04f, -8.041183151e-04f,
--8.042231798e-04f, -8.043266477e-04f, -8.044287188e-04f, -8.045293929e-04f, -8.046286699e-04f, -8.047265499e-04f, -8.048230326e-04f, -8.049181181e-04f, -8.050118062e-04f, -8.051040969e-04f,
--8.051949901e-04f, -8.052844857e-04f, -8.053725837e-04f, -8.054592840e-04f, -8.055445865e-04f, -8.056284912e-04f, -8.057109981e-04f, -8.057921070e-04f, -8.058718179e-04f, -8.059501308e-04f,
--8.060270456e-04f, -8.061025624e-04f, -8.061766809e-04f, -8.062494012e-04f, -8.063207234e-04f, -8.063906472e-04f, -8.064591727e-04f, -8.065262999e-04f, -8.065920287e-04f, -8.066563591e-04f,
--8.067192911e-04f, -8.067808247e-04f, -8.068409599e-04f, -8.068996965e-04f, -8.069570347e-04f, -8.070129744e-04f, -8.070675156e-04f, -8.071206583e-04f, -8.071724025e-04f, -8.072227481e-04f,
--8.072716953e-04f, -8.073192440e-04f, -8.073653941e-04f, -8.074101458e-04f, -8.074534990e-04f, -8.074954537e-04f, -8.075360100e-04f, -8.075751679e-04f, -8.076129273e-04f, -8.076492884e-04f,
--8.076842511e-04f, -8.077178155e-04f, -8.077499815e-04f, -8.077807493e-04f, -8.078101189e-04f, -8.078380903e-04f, -8.078646635e-04f, -8.078898386e-04f, -8.079136156e-04f, -8.079359946e-04f,
--8.079569756e-04f, -8.079765587e-04f, -8.079947440e-04f, -8.080115314e-04f, -8.080269211e-04f, -8.080409131e-04f, -8.080535075e-04f, -8.080647044e-04f, -8.080745037e-04f, -8.080829056e-04f,
--8.080899102e-04f, -8.080955175e-04f, -8.080997277e-04f, -8.081025407e-04f, -8.081039567e-04f, -8.081039758e-04f, -8.081025980e-04f, -8.080998235e-04f, -8.080956523e-04f, -8.080900845e-04f,
--8.080831203e-04f, -8.080747597e-04f, -8.080650028e-04f, -8.080538498e-04f, -8.080413007e-04f, -8.080273556e-04f, -8.080120148e-04f, -8.079952782e-04f, -8.079771460e-04f, -8.079576184e-04f,
--8.079366954e-04f, -8.079143771e-04f, -8.078906637e-04f, -8.078655554e-04f, -8.078390522e-04f, -8.078111543e-04f, -8.077818619e-04f, -8.077511750e-04f, -8.077190938e-04f, -8.076856184e-04f,
--8.076507491e-04f, -8.076144859e-04f, -8.075768290e-04f, -8.075377785e-04f, -8.074973346e-04f, -8.074554975e-04f, -8.074122673e-04f, -8.073676443e-04f, -8.073216284e-04f, -8.072742200e-04f,
--8.072254191e-04f, -8.071752261e-04f, -8.071236409e-04f, -8.070706639e-04f, -8.070162951e-04f, -8.069605349e-04f, -8.069033833e-04f, -8.068448405e-04f, -8.067849068e-04f, -8.067235823e-04f,
--8.066608672e-04f, -8.065967617e-04f, -8.065312661e-04f, -8.064643805e-04f, -8.063961051e-04f, -8.063264401e-04f, -8.062553857e-04f, -8.061829422e-04f, -8.061091098e-04f, -8.060338886e-04f,
--8.059572789e-04f, -8.058792810e-04f, -8.057998949e-04f, -8.057191211e-04f, -8.056369596e-04f, -8.055534107e-04f, -8.054684747e-04f, -8.053821518e-04f, -8.052944422e-04f, -8.052053461e-04f,
--8.051148639e-04f, -8.050229957e-04f, -8.049297418e-04f, -8.048351024e-04f, -8.047390778e-04f, -8.046416683e-04f, -8.045428741e-04f, -8.044426955e-04f, -8.043411326e-04f, -8.042381859e-04f,
--8.041338555e-04f, -8.040281417e-04f, -8.039210448e-04f, -8.038125651e-04f, -8.037027028e-04f, -8.035914582e-04f, -8.034788317e-04f, -8.033648234e-04f, -8.032494336e-04f, -8.031326627e-04f,
--8.030145110e-04f, -8.028949787e-04f, -8.027740661e-04f, -8.026517735e-04f, -8.025281012e-04f, -8.024030496e-04f, -8.022766189e-04f, -8.021488094e-04f, -8.020196214e-04f, -8.018890553e-04f,
--8.017571114e-04f, -8.016237899e-04f, -8.014890912e-04f, -8.013530157e-04f, -8.012155635e-04f, -8.010767352e-04f, -8.009365309e-04f, -8.007949511e-04f, -8.006519960e-04f, -8.005076659e-04f,
--8.003619613e-04f, -8.002148825e-04f, -8.000664297e-04f, -7.999166034e-04f, -7.997654039e-04f, -7.996128316e-04f, -7.994588867e-04f, -7.993035697e-04f, -7.991468808e-04f, -7.989888205e-04f,
--7.988293892e-04f, -7.986685871e-04f, -7.985064146e-04f, -7.983428722e-04f, -7.981779601e-04f, -7.980116788e-04f, -7.978440286e-04f, -7.976750100e-04f, -7.975046232e-04f, -7.973328686e-04f,
--7.971597467e-04f, -7.969852579e-04f, -7.968094024e-04f, -7.966321808e-04f, -7.964535934e-04f, -7.962736405e-04f, -7.960923227e-04f, -7.959096403e-04f, -7.957255936e-04f, -7.955401832e-04f,
--7.953534093e-04f, -7.951652725e-04f, -7.949757732e-04f, -7.947849116e-04f, -7.945926883e-04f, -7.943991037e-04f, -7.942041582e-04f, -7.940078523e-04f, -7.938101862e-04f, -7.936111606e-04f,
--7.934107757e-04f, -7.932090321e-04f, -7.930059302e-04f, -7.928014704e-04f, -7.925956531e-04f, -7.923884788e-04f, -7.921799480e-04f, -7.919700610e-04f, -7.917588184e-04f, -7.915462205e-04f,
--7.913322679e-04f, -7.911169610e-04f, -7.909003002e-04f, -7.906822860e-04f, -7.904629189e-04f, -7.902421994e-04f, -7.900201278e-04f, -7.897967048e-04f, -7.895719306e-04f, -7.893458059e-04f,
--7.891183311e-04f, -7.888895067e-04f, -7.886593331e-04f, -7.884278108e-04f, -7.881949404e-04f, -7.879607223e-04f, -7.877251570e-04f, -7.874882450e-04f, -7.872499868e-04f, -7.870103829e-04f,
--7.867694337e-04f, -7.865271399e-04f, -7.862835018e-04f, -7.860385201e-04f, -7.857921951e-04f, -7.855445275e-04f, -7.852955177e-04f, -7.850451662e-04f, -7.847934737e-04f, -7.845404405e-04f,
--7.842860672e-04f, -7.840303543e-04f, -7.837733024e-04f, -7.835149120e-04f, -7.832551836e-04f, -7.829941178e-04f, -7.827317150e-04f, -7.824679759e-04f, -7.822029010e-04f, -7.819364908e-04f,
--7.816687458e-04f, -7.813996666e-04f, -7.811292538e-04f, -7.808575079e-04f, -7.805844294e-04f, -7.803100190e-04f, -7.800342771e-04f, -7.797572044e-04f, -7.794788014e-04f, -7.791990687e-04f,
--7.789180067e-04f, -7.786356162e-04f, -7.783518977e-04f, -7.780668517e-04f, -7.777804788e-04f, -7.774927797e-04f, -7.772037548e-04f, -7.769134048e-04f, -7.766217303e-04f, -7.763287318e-04f,
--7.760344099e-04f, -7.757387653e-04f, -7.754417985e-04f, -7.751435101e-04f, -7.748439008e-04f, -7.745429710e-04f, -7.742407215e-04f, -7.739371528e-04f, -7.736322656e-04f, -7.733260604e-04f,
--7.730185379e-04f, -7.727096986e-04f, -7.723995433e-04f, -7.720880725e-04f, -7.717752868e-04f, -7.714611868e-04f, -7.711457733e-04f, -7.708290468e-04f, -7.705110079e-04f, -7.701916573e-04f,
--7.698709956e-04f, -7.695490235e-04f, -7.692257415e-04f, -7.689011504e-04f, -7.685752508e-04f, -7.682480433e-04f, -7.679195286e-04f, -7.675897073e-04f, -7.672585801e-04f, -7.669261476e-04f,
--7.665924105e-04f, -7.662573694e-04f, -7.659210251e-04f, -7.655833781e-04f, -7.652444292e-04f, -7.649041790e-04f, -7.645626282e-04f, -7.642197774e-04f, -7.638756274e-04f, -7.635301787e-04f,
--7.631834322e-04f, -7.628353884e-04f, -7.624860480e-04f, -7.621354118e-04f, -7.617834805e-04f, -7.614302546e-04f, -7.610757350e-04f, -7.607199222e-04f, -7.603628171e-04f, -7.600044203e-04f,
--7.596447324e-04f, -7.592837543e-04f, -7.589214866e-04f, -7.585579300e-04f, -7.581930852e-04f, -7.578269530e-04f, -7.574595340e-04f, -7.570908290e-04f, -7.567208387e-04f, -7.563495638e-04f,
--7.559770050e-04f, -7.556031631e-04f, -7.552280388e-04f, -7.548516328e-04f, -7.544739459e-04f, -7.540949787e-04f, -7.537147321e-04f, -7.533332067e-04f, -7.529504034e-04f, -7.525663228e-04f,
--7.521809656e-04f, -7.517943327e-04f, -7.514064248e-04f, -7.510172426e-04f, -7.506267869e-04f, -7.502350585e-04f, -7.498420581e-04f, -7.494477864e-04f, -7.490522442e-04f, -7.486554324e-04f,
--7.482573516e-04f, -7.478580026e-04f, -7.474573862e-04f, -7.470555032e-04f, -7.466523543e-04f, -7.462479404e-04f, -7.458422621e-04f, -7.454353204e-04f, -7.450271159e-04f, -7.446176494e-04f,
--7.442069218e-04f, -7.437949339e-04f, -7.433816863e-04f, -7.429671800e-04f, -7.425514156e-04f, -7.421343941e-04f, -7.417161162e-04f, -7.412965827e-04f, -7.408757945e-04f, -7.404537522e-04f,
--7.400304568e-04f, -7.396059090e-04f, -7.391801097e-04f, -7.387530597e-04f, -7.383247598e-04f, -7.378952108e-04f, -7.374644135e-04f, -7.370323687e-04f, -7.365990774e-04f, -7.361645403e-04f,
--7.357287582e-04f, -7.352917320e-04f, -7.348534625e-04f, -7.344139505e-04f, -7.339731969e-04f, -7.335312026e-04f, -7.330879683e-04f, -7.326434949e-04f, -7.321977833e-04f, -7.317508343e-04f,
--7.313026488e-04f, -7.308532275e-04f, -7.304025715e-04f, -7.299506815e-04f, -7.294975583e-04f, -7.290432029e-04f, -7.285876161e-04f, -7.281307988e-04f, -7.276727518e-04f, -7.272134761e-04f,
--7.267529724e-04f, -7.262912417e-04f, -7.258282848e-04f, -7.253641027e-04f, -7.248986961e-04f, -7.244320660e-04f, -7.239642133e-04f, -7.234951388e-04f, -7.230248435e-04f, -7.225533281e-04f,
--7.220805937e-04f, -7.216066412e-04f, -7.211314713e-04f, -7.206550850e-04f, -7.201774833e-04f, -7.196986669e-04f, -7.192186369e-04f, -7.187373941e-04f, -7.182549394e-04f, -7.177712738e-04f,
--7.172863981e-04f, -7.168003133e-04f, -7.163130203e-04f, -7.158245199e-04f, -7.153348133e-04f, -7.148439011e-04f, -7.143517845e-04f, -7.138584642e-04f, -7.133639413e-04f, -7.128682167e-04f,
--7.123712912e-04f, -7.118731659e-04f, -7.113738416e-04f, -7.108733194e-04f, -7.103716001e-04f, -7.098686847e-04f, -7.093645742e-04f, -7.088592694e-04f, -7.083527713e-04f, -7.078450810e-04f,
--7.073361993e-04f, -7.068261272e-04f, -7.063148656e-04f, -7.058024156e-04f, -7.052887780e-04f, -7.047739538e-04f, -7.042579441e-04f, -7.037407497e-04f, -7.032223717e-04f, -7.027028110e-04f,
--7.021820686e-04f, -7.016601454e-04f, -7.011370425e-04f, -7.006127607e-04f, -7.000873012e-04f, -6.995606649e-04f, -6.990328527e-04f, -6.985038656e-04f, -6.979737047e-04f, -6.974423710e-04f,
--6.969098654e-04f, -6.963761888e-04f, -6.958413424e-04f, -6.953053271e-04f, -6.947681440e-04f, -6.942297939e-04f, -6.936902780e-04f, -6.931495972e-04f, -6.926077525e-04f, -6.920647450e-04f,
--6.915205757e-04f, -6.909752455e-04f, -6.904287555e-04f, -6.898811068e-04f, -6.893323002e-04f, -6.887823369e-04f, -6.882312179e-04f, -6.876789442e-04f, -6.871255169e-04f, -6.865709369e-04f,
--6.860152052e-04f, -6.854583231e-04f, -6.849002913e-04f, -6.843411111e-04f, -6.837807834e-04f, -6.832193093e-04f, -6.826566899e-04f, -6.820929261e-04f, -6.815280190e-04f, -6.809619697e-04f,
--6.803947792e-04f, -6.798264485e-04f, -6.792569788e-04f, -6.786863711e-04f, -6.781146264e-04f, -6.775417459e-04f, -6.769677304e-04f, -6.763925813e-04f, -6.758162994e-04f, -6.752388859e-04f,
--6.746603418e-04f, -6.740806682e-04f, -6.734998662e-04f, -6.729179368e-04f, -6.723348812e-04f, -6.717507004e-04f, -6.711653955e-04f, -6.705789676e-04f, -6.699914177e-04f, -6.694027470e-04f,
--6.688129565e-04f, -6.682220473e-04f, -6.676300206e-04f, -6.670368773e-04f, -6.664426187e-04f, -6.658472458e-04f, -6.652507597e-04f, -6.646531615e-04f, -6.640544524e-04f, -6.634546333e-04f,
--6.628537055e-04f, -6.622516700e-04f, -6.616485280e-04f, -6.610442805e-04f, -6.604389287e-04f, -6.598324737e-04f, -6.592249166e-04f, -6.586162586e-04f, -6.580065007e-04f, -6.573956440e-04f,
--6.567836898e-04f, -6.561706391e-04f, -6.555564931e-04f, -6.549412528e-04f, -6.543249195e-04f, -6.537074942e-04f, -6.530889782e-04f, -6.524693724e-04f, -6.518486782e-04f, -6.512268966e-04f,
--6.506040287e-04f, -6.499800757e-04f, -6.493550388e-04f, -6.487289191e-04f, -6.481017177e-04f, -6.474734359e-04f, -6.468440747e-04f, -6.462136353e-04f, -6.455821189e-04f, -6.449495267e-04f,
--6.443158597e-04f, -6.436811193e-04f, -6.430453064e-04f, -6.424084223e-04f, -6.417704682e-04f, -6.411314453e-04f, -6.404913546e-04f, -6.398501975e-04f, -6.392079750e-04f, -6.385646883e-04f,
--6.379203386e-04f, -6.372749272e-04f, -6.366284551e-04f, -6.359809236e-04f, -6.353323338e-04f, -6.346826870e-04f, -6.340319843e-04f, -6.333802270e-04f, -6.327274162e-04f, -6.320735530e-04f,
--6.314186388e-04f, -6.307626747e-04f, -6.301056619e-04f, -6.294476016e-04f, -6.287884950e-04f, -6.281283434e-04f, -6.274671479e-04f, -6.268049097e-04f, -6.261416301e-04f, -6.254773102e-04f,
--6.248119513e-04f, -6.241455546e-04f, -6.234781214e-04f, -6.228096527e-04f, -6.221401499e-04f, -6.214696142e-04f, -6.207980468e-04f, -6.201254489e-04f, -6.194518217e-04f, -6.187771666e-04f,
--6.181014847e-04f, -6.174247772e-04f, -6.167470454e-04f, -6.160682905e-04f, -6.153885138e-04f, -6.147077165e-04f, -6.140258998e-04f, -6.133430650e-04f, -6.126592134e-04f, -6.119743461e-04f,
--6.112884644e-04f, -6.106015697e-04f, -6.099136630e-04f, -6.092247458e-04f, -6.085348191e-04f, -6.078438844e-04f, -6.071519428e-04f, -6.064589957e-04f, -6.057650442e-04f, -6.050700896e-04f,
--6.043741333e-04f, -6.036771764e-04f, -6.029792202e-04f, -6.022802661e-04f, -6.015803152e-04f, -6.008793689e-04f, -6.001774285e-04f, -5.994744951e-04f, -5.987705701e-04f, -5.980656548e-04f,
--5.973597504e-04f, -5.966528583e-04f, -5.959449796e-04f, -5.952361158e-04f, -5.945262681e-04f, -5.938154377e-04f, -5.931036260e-04f, -5.923908343e-04f, -5.916770638e-04f, -5.909623158e-04f,
--5.902465918e-04f, -5.895298928e-04f, -5.888122203e-04f, -5.880935756e-04f, -5.873739599e-04f, -5.866533746e-04f, -5.859318210e-04f, -5.852093003e-04f, -5.844858140e-04f, -5.837613632e-04f,
--5.830359493e-04f, -5.823095737e-04f, -5.815822376e-04f, -5.808539424e-04f, -5.801246894e-04f, -5.793944799e-04f, -5.786633152e-04f, -5.779311966e-04f, -5.771981256e-04f, -5.764641033e-04f,
--5.757291312e-04f, -5.749932106e-04f, -5.742563428e-04f, -5.735185291e-04f, -5.727797709e-04f, -5.720400694e-04f, -5.712994262e-04f, -5.705578424e-04f, -5.698153194e-04f, -5.690718587e-04f,
--5.683274614e-04f, -5.675821290e-04f, -5.668358628e-04f, -5.660886642e-04f, -5.653405345e-04f, -5.645914751e-04f, -5.638414873e-04f, -5.630905724e-04f, -5.623387319e-04f, -5.615859671e-04f,
--5.608322793e-04f, -5.600776699e-04f, -5.593221404e-04f, -5.585656919e-04f, -5.578083260e-04f, -5.570500439e-04f, -5.562908471e-04f, -5.555307369e-04f, -5.547697147e-04f, -5.540077818e-04f,
--5.532449397e-04f, -5.524811897e-04f, -5.517165331e-04f, -5.509509715e-04f, -5.501845061e-04f, -5.494171383e-04f, -5.486488695e-04f, -5.478797012e-04f, -5.471096346e-04f, -5.463386712e-04f,
--5.455668124e-04f, -5.447940595e-04f, -5.440204140e-04f, -5.432458772e-04f, -5.424704506e-04f, -5.416941355e-04f, -5.409169334e-04f, -5.401388456e-04f, -5.393598735e-04f, -5.385800185e-04f,
--5.377992821e-04f, -5.370176657e-04f, -5.362351706e-04f, -5.354517983e-04f, -5.346675502e-04f, -5.338824276e-04f, -5.330964321e-04f, -5.323095649e-04f, -5.315218276e-04f, -5.307332216e-04f,
--5.299437482e-04f, -5.291534089e-04f, -5.283622051e-04f, -5.275701382e-04f, -5.267772097e-04f, -5.259834210e-04f, -5.251887734e-04f, -5.243932686e-04f, -5.235969077e-04f, -5.227996924e-04f,
--5.220016240e-04f, -5.212027040e-04f, -5.204029338e-04f, -5.196023148e-04f, -5.188008485e-04f, -5.179985363e-04f, -5.171953796e-04f, -5.163913800e-04f, -5.155865387e-04f, -5.147808574e-04f,
--5.139743374e-04f, -5.131669802e-04f, -5.123587872e-04f, -5.115497599e-04f, -5.107398997e-04f, -5.099292081e-04f, -5.091176865e-04f, -5.083053364e-04f, -5.074921593e-04f, -5.066781566e-04f,
--5.058633297e-04f, -5.050476802e-04f, -5.042312095e-04f, -5.034139190e-04f, -5.025958103e-04f, -5.017768847e-04f, -5.009571438e-04f, -5.001365890e-04f, -4.993152218e-04f, -4.984930437e-04f,
--4.976700561e-04f, -4.968462605e-04f, -4.960216584e-04f, -4.951962513e-04f, -4.943700406e-04f, -4.935430278e-04f, -4.927152145e-04f, -4.918866020e-04f, -4.910571919e-04f, -4.902269856e-04f,
--4.893959847e-04f, -4.885641906e-04f, -4.877316048e-04f, -4.868982289e-04f, -4.860640642e-04f, -4.852291123e-04f, -4.843933747e-04f, -4.835568529e-04f, -4.827195483e-04f, -4.818814625e-04f,
--4.810425970e-04f, -4.802029533e-04f, -4.793625328e-04f, -4.785213371e-04f, -4.776793676e-04f, -4.768366260e-04f, -4.759931136e-04f, -4.751488320e-04f, -4.743037827e-04f, -4.734579673e-04f,
--4.726113871e-04f, -4.717640438e-04f, -4.709159388e-04f, -4.700670737e-04f, -4.692174500e-04f, -4.683670692e-04f, -4.675159328e-04f, -4.666640423e-04f, -4.658113993e-04f, -4.649580052e-04f,
--4.641038617e-04f, -4.632489701e-04f, -4.623933321e-04f, -4.615369492e-04f, -4.606798229e-04f, -4.598219548e-04f, -4.589633462e-04f, -4.581039989e-04f, -4.572439143e-04f, -4.563830940e-04f,
--4.555215395e-04f, -4.546592523e-04f, -4.537962340e-04f, -4.529324860e-04f, -4.520680101e-04f, -4.512028076e-04f, -4.503368801e-04f, -4.494702292e-04f, -4.486028565e-04f, -4.477347634e-04f,
--4.468659515e-04f, -4.459964223e-04f, -4.451261775e-04f, -4.442552185e-04f, -4.433835469e-04f, -4.425111643e-04f, -4.416380722e-04f, -4.407642722e-04f, -4.398897658e-04f, -4.390145546e-04f,
--4.381386401e-04f, -4.372620239e-04f, -4.363847076e-04f, -4.355066927e-04f, -4.346279807e-04f, -4.337485733e-04f, -4.328684720e-04f, -4.319876784e-04f, -4.311061941e-04f, -4.302240205e-04f,
--4.293411593e-04f, -4.284576121e-04f, -4.275733804e-04f, -4.266884658e-04f, -4.258028698e-04f, -4.249165941e-04f, -4.240296402e-04f, -4.231420097e-04f, -4.222537042e-04f, -4.213647252e-04f,
--4.204750743e-04f, -4.195847531e-04f, -4.186937633e-04f, -4.178021063e-04f, -4.169097837e-04f, -4.160167972e-04f, -4.151231484e-04f, -4.142288387e-04f, -4.133338698e-04f, -4.124382434e-04f,
--4.115419609e-04f, -4.106450240e-04f, -4.097474343e-04f, -4.088491933e-04f, -4.079503027e-04f, -4.070507640e-04f, -4.061505788e-04f, -4.052497489e-04f, -4.043482756e-04f, -4.034461607e-04f,
--4.025434057e-04f, -4.016400123e-04f, -4.007359820e-04f, -3.998313165e-04f, -3.989260173e-04f, -3.980200861e-04f, -3.971135244e-04f, -3.962063340e-04f, -3.952985162e-04f, -3.943900729e-04f,
--3.934810056e-04f, -3.925713159e-04f, -3.916610054e-04f, -3.907500758e-04f, -3.898385286e-04f, -3.889263655e-04f, -3.880135880e-04f, -3.871001979e-04f, -3.861861967e-04f, -3.852715860e-04f,
--3.843563674e-04f, -3.834405427e-04f, -3.825241133e-04f, -3.816070810e-04f, -3.806894473e-04f, -3.797712139e-04f, -3.788523824e-04f, -3.779329544e-04f, -3.770129315e-04f, -3.760923154e-04f,
--3.751711078e-04f, -3.742493102e-04f, -3.733269242e-04f, -3.724039516e-04f, -3.714803938e-04f, -3.705562527e-04f, -3.696315298e-04f, -3.687062267e-04f, -3.677803450e-04f, -3.668538865e-04f,
--3.659268527e-04f, -3.649992454e-04f, -3.640710660e-04f, -3.631423164e-04f, -3.622129980e-04f, -3.612831126e-04f, -3.603526618e-04f, -3.594216473e-04f, -3.584900706e-04f, -3.575579335e-04f,
--3.566252375e-04f, -3.556919844e-04f, -3.547581758e-04f, -3.538238133e-04f, -3.528888986e-04f, -3.519534333e-04f, -3.510174191e-04f, -3.500808577e-04f, -3.491437506e-04f, -3.482060996e-04f,
--3.472679063e-04f, -3.463291723e-04f, -3.453898994e-04f, -3.444500891e-04f, -3.435097432e-04f, -3.425688633e-04f, -3.416274510e-04f, -3.406855080e-04f, -3.397430360e-04f, -3.388000367e-04f,
--3.378565117e-04f, -3.369124626e-04f, -3.359678912e-04f, -3.350227990e-04f, -3.340771879e-04f, -3.331310593e-04f, -3.321844151e-04f, -3.312372569e-04f, -3.302895863e-04f, -3.293414050e-04f,
--3.283927147e-04f, -3.274435170e-04f, -3.264938137e-04f, -3.255436064e-04f, -3.245928968e-04f, -3.236416865e-04f, -3.226899773e-04f, -3.217377708e-04f, -3.207850687e-04f, -3.198318726e-04f,
--3.188781843e-04f, -3.179240054e-04f, -3.169693376e-04f, -3.160141827e-04f, -3.150585421e-04f, -3.141024178e-04f, -3.131458113e-04f, -3.121887243e-04f, -3.112311585e-04f, -3.102731156e-04f,
--3.093145973e-04f, -3.083556052e-04f, -3.073961411e-04f, -3.064362067e-04f, -3.054758036e-04f, -3.045149335e-04f, -3.035535981e-04f, -3.025917992e-04f, -3.016295383e-04f, -3.006668173e-04f,
--2.997036377e-04f, -2.987400013e-04f, -2.977759098e-04f, -2.968113648e-04f, -2.958463681e-04f, -2.948809214e-04f, -2.939150264e-04f, -2.929486847e-04f, -2.919818980e-04f, -2.910146682e-04f,
--2.900469968e-04f, -2.890788855e-04f, -2.881103361e-04f, -2.871413503e-04f, -2.861719298e-04f, -2.852020762e-04f, -2.842317913e-04f, -2.832610768e-04f, -2.822899344e-04f, -2.813183657e-04f,
--2.803463726e-04f, -2.793739567e-04f, -2.784011197e-04f, -2.774278633e-04f, -2.764541892e-04f, -2.754800992e-04f, -2.745055950e-04f, -2.735306782e-04f, -2.725553506e-04f, -2.715796139e-04f,
--2.706034698e-04f, -2.696269200e-04f, -2.686499662e-04f, -2.676726102e-04f, -2.666948536e-04f, -2.657166982e-04f, -2.647381458e-04f, -2.637591979e-04f, -2.627798563e-04f, -2.618001228e-04f,
--2.608199991e-04f, -2.598394868e-04f, -2.588585878e-04f, -2.578773036e-04f, -2.568956362e-04f, -2.559135871e-04f, -2.549311580e-04f, -2.539483508e-04f, -2.529651671e-04f, -2.519816087e-04f,
--2.509976773e-04f, -2.500133745e-04f, -2.490287023e-04f, -2.480436621e-04f, -2.470582559e-04f, -2.460724852e-04f, -2.450863519e-04f, -2.440998577e-04f, -2.431130043e-04f, -2.421257934e-04f,
--2.411382267e-04f, -2.401503060e-04f, -2.391620331e-04f, -2.381734096e-04f, -2.371844373e-04f, -2.361951178e-04f, -2.352054531e-04f, -2.342154447e-04f, -2.332250944e-04f, -2.322344039e-04f,
--2.312433751e-04f, -2.302520095e-04f, -2.292603090e-04f, -2.282682753e-04f, -2.272759101e-04f, -2.262832151e-04f, -2.252901922e-04f, -2.242968429e-04f, -2.233031692e-04f, -2.223091726e-04f,
--2.213148551e-04f, -2.203202181e-04f, -2.193252637e-04f, -2.183299933e-04f, -2.173344089e-04f, -2.163385122e-04f, -2.153423048e-04f, -2.143457886e-04f, -2.133489652e-04f, -2.123518365e-04f,
--2.113544041e-04f, -2.103566698e-04f, -2.093586354e-04f, -2.083603026e-04f, -2.073616731e-04f, -2.063627487e-04f, -2.053635311e-04f, -2.043640221e-04f, -2.033642234e-04f, -2.023641368e-04f,
--2.013637640e-04f, -2.003631068e-04f, -1.993621669e-04f, -1.983609461e-04f, -1.973594460e-04f, -1.963576686e-04f, -1.953556154e-04f, -1.943532883e-04f, -1.933506890e-04f, -1.923478193e-04f,
--1.913446809e-04f, -1.903412755e-04f, -1.893376049e-04f, -1.883336710e-04f, -1.873294753e-04f, -1.863250197e-04f, -1.853203060e-04f, -1.843153358e-04f, -1.833101109e-04f, -1.823046332e-04f,
--1.812989043e-04f, -1.802929259e-04f, -1.792867000e-04f, -1.782802281e-04f, -1.772735121e-04f, -1.762665537e-04f, -1.752593547e-04f, -1.742519168e-04f, -1.732442418e-04f, -1.722363315e-04f,
--1.712281876e-04f, -1.702198118e-04f, -1.692112059e-04f, -1.682023717e-04f, -1.671933110e-04f, -1.661840254e-04f, -1.651745168e-04f, -1.641647869e-04f, -1.631548375e-04f, -1.621446704e-04f,
--1.611342872e-04f, -1.601236897e-04f, -1.591128798e-04f, -1.581018592e-04f, -1.570906296e-04f, -1.560791928e-04f, -1.550675506e-04f, -1.540557046e-04f, -1.530436568e-04f, -1.520314088e-04f,
--1.510189625e-04f, -1.500063195e-04f, -1.489934816e-04f, -1.479804507e-04f, -1.469672284e-04f, -1.459538165e-04f, -1.449402169e-04f, -1.439264311e-04f, -1.429124611e-04f, -1.418983086e-04f,
--1.408839754e-04f, -1.398694632e-04f, -1.388547737e-04f, -1.378399088e-04f, -1.368248702e-04f, -1.358096597e-04f, -1.347942790e-04f, -1.337787300e-04f, -1.327630143e-04f, -1.317471338e-04f,
--1.307310901e-04f, -1.297148852e-04f, -1.286985207e-04f, -1.276819984e-04f, -1.266653201e-04f, -1.256484876e-04f, -1.246315025e-04f, -1.236143668e-04f, -1.225970821e-04f, -1.215796502e-04f,
--1.205620729e-04f, -1.195443520e-04f, -1.185264892e-04f, -1.175084863e-04f, -1.164903450e-04f, -1.154720672e-04f, -1.144536546e-04f, -1.134351089e-04f, -1.124164320e-04f, -1.113976256e-04f,
--1.103786915e-04f, -1.093596315e-04f, -1.083404472e-04f, -1.073211406e-04f, -1.063017133e-04f, -1.052821671e-04f, -1.042625039e-04f, -1.032427253e-04f, -1.022228331e-04f, -1.012028292e-04f,
--1.001827152e-04f, -9.916249303e-05f, -9.814216435e-05f, -9.712173096e-05f, -9.610119464e-05f, -9.508055716e-05f, -9.405982028e-05f, -9.303898578e-05f, -9.201805543e-05f, -9.099703100e-05f,
--8.997591427e-05f, -8.895470699e-05f, -8.793341095e-05f, -8.691202792e-05f, -8.589055966e-05f, -8.486900795e-05f, -8.384737456e-05f, -8.282566127e-05f, -8.180386983e-05f, -8.078200203e-05f,
--7.976005964e-05f, -7.873804443e-05f, -7.771595816e-05f, -7.669380262e-05f, -7.567157956e-05f, -7.464929077e-05f, -7.362693802e-05f, -7.260452308e-05f, -7.158204771e-05f, -7.055951370e-05f,
--6.953692280e-05f, -6.851427680e-05f, -6.749157747e-05f, -6.646882657e-05f, -6.544602588e-05f, -6.442317717e-05f, -6.340028222e-05f, -6.237734278e-05f, -6.135436064e-05f, -6.033133756e-05f,
--5.930827533e-05f, -5.828517569e-05f, -5.726204044e-05f, -5.623887134e-05f, -5.521567016e-05f, -5.419243868e-05f, -5.316917865e-05f, -5.214589186e-05f, -5.112258008e-05f, -5.009924507e-05f,
--4.907588861e-05f, -4.805251247e-05f, -4.702911842e-05f, -4.600570822e-05f, -4.498228365e-05f, -4.395884648e-05f, -4.293539848e-05f, -4.191194143e-05f, -4.088847708e-05f, -3.986500721e-05f,
--3.884153359e-05f, -3.781805799e-05f, -3.679458217e-05f, -3.577110792e-05f, -3.474763699e-05f, -3.372417116e-05f, -3.270071220e-05f, -3.167726187e-05f, -3.065382194e-05f, -2.963039419e-05f,
--2.860698038e-05f, -2.758358228e-05f, -2.656020166e-05f, -2.553684028e-05f, -2.451349992e-05f, -2.349018234e-05f, -2.246688931e-05f, -2.144362260e-05f, -2.042038397e-05f, -1.939717520e-05f,
--1.837399804e-05f, -1.735085427e-05f, -1.632774566e-05f, -1.530467396e-05f, -1.428164095e-05f, -1.325864840e-05f, -1.223569806e-05f, -1.121279171e-05f, -1.018993110e-05f, -9.167118017e-06f,
--8.144354211e-06f, -7.121641452e-06f, -6.098981503e-06f, -5.076376130e-06f, -4.053827098e-06f, -3.031336170e-06f, -2.008905111e-06f, -9.865356841e-07f, 3.577034625e-08f, 1.058011217e-06f,
-2.080185165e-06f, 3.102290427e-06f, 4.124325240e-06f, 5.146287843e-06f, 6.168176472e-06f, 7.189989365e-06f, 8.211724762e-06f, 9.233380900e-06f, 1.025495602e-05f, 1.127644835e-05f,
-1.229785615e-05f, 1.331917764e-05f, 1.434041107e-05f, 1.536155468e-05f, 1.638260670e-05f, 1.740356539e-05f, 1.842442897e-05f, 1.944519569e-05f, 2.046586380e-05f, 2.148643152e-05f,
-2.250689712e-05f, 2.352725881e-05f, 2.454751486e-05f, 2.556766350e-05f, 2.658770298e-05f, 2.760763154e-05f, 2.862744742e-05f, 2.964714886e-05f, 3.066673412e-05f, 3.168620143e-05f,
-3.270554905e-05f, 3.372477521e-05f, 3.474387816e-05f, 3.576285615e-05f, 3.678170742e-05f, 3.780043022e-05f, 3.881902280e-05f, 3.983748341e-05f, 4.085581028e-05f, 4.187400168e-05f,
-4.289205585e-05f, 4.390997103e-05f, 4.492774548e-05f, 4.594537744e-05f, 4.696286517e-05f, 4.798020691e-05f, 4.899740092e-05f, 5.001444545e-05f, 5.103133874e-05f, 5.204807905e-05f,
-5.306466463e-05f, 5.408109374e-05f, 5.509736462e-05f, 5.611347553e-05f, 5.712942472e-05f, 5.814521045e-05f, 5.916083097e-05f, 6.017628453e-05f, 6.119156939e-05f, 6.220668381e-05f,
-6.322162604e-05f, 6.423639434e-05f, 6.525098696e-05f, 6.626540216e-05f, 6.727963820e-05f, 6.829369334e-05f, 6.930756583e-05f, 7.032125394e-05f, 7.133475592e-05f, 7.234807003e-05f,
-7.336119453e-05f, 7.437412768e-05f, 7.538686775e-05f, 7.639941300e-05f, 7.741176168e-05f, 7.842391206e-05f, 7.943586241e-05f, 8.044761097e-05f, 8.145915603e-05f, 8.247049584e-05f,
-8.348162867e-05f, 8.449255278e-05f, 8.550326644e-05f, 8.651376791e-05f, 8.752405546e-05f, 8.853412736e-05f, 8.954398188e-05f, 9.055361727e-05f, 9.156303182e-05f, 9.257222379e-05f,
-9.358119145e-05f, 9.458993307e-05f, 9.559844692e-05f, 9.660673126e-05f, 9.761478438e-05f, 9.862260455e-05f, 9.963019003e-05f, 1.006375391e-04f, 1.016446500e-04f, 1.026515211e-04f,
-1.036581506e-04f, 1.046645367e-04f, 1.056706779e-04f, 1.066765722e-04f, 1.076822181e-04f, 1.086876138e-04f, 1.096927575e-04f, 1.106976476e-04f, 1.117022823e-04f, 1.127066600e-04f,
-1.137107788e-04f, 1.147146370e-04f, 1.157182331e-04f, 1.167215651e-04f, 1.177246315e-04f, 1.187274304e-04f, 1.197299603e-04f, 1.207322192e-04f, 1.217342057e-04f, 1.227359179e-04f,
-1.237373540e-04f, 1.247385125e-04f, 1.257393916e-04f, 1.267399896e-04f, 1.277403047e-04f, 1.287403352e-04f, 1.297400795e-04f, 1.307395359e-04f, 1.317387026e-04f, 1.327375778e-04f,
-1.337361600e-04f, 1.347344474e-04f, 1.357324383e-04f, 1.367301309e-04f, 1.377275236e-04f, 1.387246147e-04f, 1.397214025e-04f, 1.407178853e-04f, 1.417140612e-04f, 1.427099288e-04f,
-1.437054862e-04f, 1.447007318e-04f, 1.456956638e-04f, 1.466902805e-04f, 1.476845804e-04f, 1.486785615e-04f, 1.496722224e-04f, 1.506655612e-04f, 1.516585762e-04f, 1.526512658e-04f,
-1.536436283e-04f, 1.546356620e-04f, 1.556273651e-04f, 1.566187360e-04f, 1.576097731e-04f, 1.586004745e-04f, 1.595908386e-04f, 1.605808638e-04f, 1.615705483e-04f, 1.625598904e-04f,
-1.635488885e-04f, 1.645375409e-04f, 1.655258458e-04f, 1.665138016e-04f, 1.675014066e-04f, 1.684886592e-04f, 1.694755575e-04f, 1.704621001e-04f, 1.714482851e-04f, 1.724341109e-04f,
-1.734195757e-04f, 1.744046781e-04f, 1.753894161e-04f, 1.763737882e-04f, 1.773577928e-04f, 1.783414280e-04f, 1.793246922e-04f, 1.803075838e-04f, 1.812901011e-04f, 1.822722424e-04f,
-1.832540060e-04f, 1.842353903e-04f, 1.852163936e-04f, 1.861970141e-04f, 1.871772503e-04f, 1.881571005e-04f, 1.891365630e-04f, 1.901156362e-04f, 1.910943182e-04f, 1.920726076e-04f,
-1.930505027e-04f, 1.940280016e-04f, 1.950051029e-04f, 1.959818049e-04f, 1.969581058e-04f, 1.979340040e-04f, 1.989094978e-04f, 1.998845857e-04f, 2.008592659e-04f, 2.018335368e-04f,
-2.028073966e-04f, 2.037808439e-04f, 2.047538768e-04f, 2.057264937e-04f, 2.066986931e-04f, 2.076704732e-04f, 2.086418324e-04f, 2.096127690e-04f, 2.105832813e-04f, 2.115533678e-04f,
-2.125230268e-04f, 2.134922566e-04f, 2.144610556e-04f, 2.154294221e-04f, 2.163973545e-04f, 2.173648511e-04f, 2.183319103e-04f, 2.192985305e-04f, 2.202647099e-04f, 2.212304471e-04f,
-2.221957402e-04f, 2.231605878e-04f, 2.241249880e-04f, 2.250889394e-04f, 2.260524403e-04f, 2.270154889e-04f, 2.279780838e-04f, 2.289402232e-04f, 2.299019056e-04f, 2.308631292e-04f,
-2.318238925e-04f, 2.327841938e-04f, 2.337440315e-04f, 2.347034039e-04f, 2.356623095e-04f, 2.366207466e-04f, 2.375787136e-04f, 2.385362088e-04f, 2.394932307e-04f, 2.404497776e-04f,
-2.414058478e-04f, 2.423614398e-04f, 2.433165519e-04f, 2.442711826e-04f, 2.452253301e-04f, 2.461789929e-04f, 2.471321694e-04f, 2.480848579e-04f, 2.490370568e-04f, 2.499887646e-04f,
-2.509399795e-04f, 2.518907001e-04f, 2.528409246e-04f, 2.537906514e-04f, 2.547398790e-04f, 2.556886058e-04f, 2.566368300e-04f, 2.575845502e-04f, 2.585317647e-04f, 2.594784720e-04f,
-2.604246703e-04f, 2.613703581e-04f, 2.623155339e-04f, 2.632601959e-04f, 2.642043426e-04f, 2.651479725e-04f, 2.660910838e-04f, 2.670336751e-04f, 2.679757446e-04f, 2.689172909e-04f,
-2.698583123e-04f, 2.707988072e-04f, 2.717387740e-04f, 2.726782112e-04f, 2.736171171e-04f, 2.745554902e-04f, 2.754933289e-04f, 2.764306315e-04f, 2.773673966e-04f, 2.783036224e-04f,
-2.792393075e-04f, 2.801744502e-04f, 2.811090490e-04f, 2.820431023e-04f, 2.829766085e-04f, 2.839095660e-04f, 2.848419733e-04f, 2.857738287e-04f, 2.867051307e-04f, 2.876358777e-04f,
-2.885660682e-04f, 2.894957005e-04f, 2.904247732e-04f, 2.913532845e-04f, 2.922812331e-04f, 2.932086172e-04f, 2.941354353e-04f, 2.950616859e-04f, 2.959873674e-04f, 2.969124783e-04f,
-2.978370169e-04f, 2.987609816e-04f, 2.996843711e-04f, 3.006071836e-04f, 3.015294176e-04f, 3.024510716e-04f, 3.033721440e-04f, 3.042926333e-04f, 3.052125379e-04f, 3.061318562e-04f,
-3.070505867e-04f, 3.079687279e-04f, 3.088862781e-04f, 3.098032359e-04f, 3.107195997e-04f, 3.116353679e-04f, 3.125505391e-04f, 3.134651116e-04f, 3.143790839e-04f, 3.152924545e-04f,
-3.162052219e-04f, 3.171173844e-04f, 3.180289406e-04f, 3.189398889e-04f, 3.198502279e-04f, 3.207599558e-04f, 3.216690713e-04f, 3.225775727e-04f, 3.234854586e-04f, 3.243927275e-04f,
-3.252993777e-04f, 3.262054078e-04f, 3.271108162e-04f, 3.280156014e-04f, 3.289197619e-04f, 3.298232962e-04f, 3.307262028e-04f, 3.316284800e-04f, 3.325301264e-04f, 3.334311406e-04f,
-3.343315209e-04f, 3.352312658e-04f, 3.361303739e-04f, 3.370288436e-04f, 3.379266734e-04f, 3.388238618e-04f, 3.397204072e-04f, 3.406163083e-04f, 3.415115634e-04f, 3.424061711e-04f,
-3.433001298e-04f, 3.441934381e-04f, 3.450860945e-04f, 3.459780974e-04f, 3.468694453e-04f, 3.477601368e-04f, 3.486501703e-04f, 3.495395444e-04f, 3.504282576e-04f, 3.513163083e-04f,
-3.522036950e-04f, 3.530904164e-04f, 3.539764708e-04f, 3.548618569e-04f, 3.557465730e-04f, 3.566306178e-04f, 3.575139897e-04f, 3.583966873e-04f, 3.592787090e-04f, 3.601600534e-04f,
-3.610407191e-04f, 3.619207044e-04f, 3.628000080e-04f, 3.636786284e-04f, 3.645565641e-04f, 3.654338136e-04f, 3.663103754e-04f, 3.671862482e-04f, 3.680614303e-04f, 3.689359204e-04f,
-3.698097169e-04f, 3.706828185e-04f, 3.715552236e-04f, 3.724269308e-04f, 3.732979386e-04f, 3.741682455e-04f, 3.750378501e-04f, 3.759067510e-04f, 3.767749467e-04f, 3.776424356e-04f,
-3.785092165e-04f, 3.793752877e-04f, 3.802406479e-04f, 3.811052956e-04f, 3.819692294e-04f, 3.828324478e-04f, 3.836949494e-04f, 3.845567326e-04f, 3.854177962e-04f, 3.862781386e-04f,
-3.871377583e-04f, 3.879966541e-04f, 3.888548243e-04f, 3.897122676e-04f, 3.905689826e-04f, 3.914249678e-04f, 3.922802217e-04f, 3.931347430e-04f, 3.939885301e-04f, 3.948415818e-04f,
-3.956938965e-04f, 3.965454729e-04f, 3.973963094e-04f, 3.982464047e-04f, 3.990957574e-04f, 3.999443660e-04f, 4.007922291e-04f, 4.016393453e-04f, 4.024857132e-04f, 4.033313313e-04f,
-4.041761983e-04f, 4.050203128e-04f, 4.058636732e-04f, 4.067062783e-04f, 4.075481266e-04f, 4.083892166e-04f, 4.092295471e-04f, 4.100691165e-04f, 4.109079236e-04f, 4.117459668e-04f,
-4.125832448e-04f, 4.134197562e-04f, 4.142554996e-04f, 4.150904735e-04f, 4.159246767e-04f, 4.167581077e-04f, 4.175907651e-04f, 4.184226475e-04f, 4.192537535e-04f, 4.200840818e-04f,
-4.209136309e-04f, 4.217423995e-04f, 4.225703862e-04f, 4.233975897e-04f, 4.242240084e-04f, 4.250496411e-04f, 4.258744864e-04f, 4.266985429e-04f, 4.275218092e-04f, 4.283442839e-04f,
-4.291659657e-04f, 4.299868533e-04f, 4.308069452e-04f, 4.316262400e-04f, 4.324447365e-04f, 4.332624332e-04f, 4.340793288e-04f, 4.348954219e-04f, 4.357107112e-04f, 4.365251953e-04f,
-4.373388728e-04f, 4.381517424e-04f, 4.389638027e-04f, 4.397750525e-04f, 4.405854902e-04f, 4.413951147e-04f, 4.422039245e-04f, 4.430119183e-04f, 4.438190947e-04f, 4.446254524e-04f,
-4.454309901e-04f, 4.462357064e-04f, 4.470396000e-04f, 4.478426695e-04f, 4.486449137e-04f, 4.494463311e-04f, 4.502469204e-04f, 4.510466804e-04f, 4.518456096e-04f, 4.526437068e-04f,
-4.534409706e-04f, 4.542373997e-04f, 4.550329928e-04f, 4.558277486e-04f, 4.566216657e-04f, 4.574147427e-04f, 4.582069785e-04f, 4.589983717e-04f, 4.597889209e-04f, 4.605786249e-04f,
-4.613674823e-04f, 4.621554919e-04f, 4.629426523e-04f, 4.637289622e-04f, 4.645144203e-04f, 4.652990253e-04f, 4.660827759e-04f, 4.668656709e-04f, 4.676477088e-04f, 4.684288885e-04f,
-4.692092085e-04f, 4.699886677e-04f, 4.707672647e-04f, 4.715449983e-04f, 4.723218670e-04f, 4.730978698e-04f, 4.738730052e-04f, 4.746472720e-04f, 4.754206689e-04f, 4.761931946e-04f,
-4.769648479e-04f, 4.777356274e-04f, 4.785055320e-04f, 4.792745602e-04f, 4.800427109e-04f, 4.808099827e-04f, 4.815763744e-04f, 4.823418848e-04f, 4.831065125e-04f, 4.838702563e-04f,
-4.846331150e-04f, 4.853950872e-04f, 4.861561717e-04f, 4.869163673e-04f, 4.876756726e-04f, 4.884340865e-04f, 4.891916077e-04f, 4.899482349e-04f, 4.907039669e-04f, 4.914588024e-04f,
-4.922127401e-04f, 4.929657789e-04f, 4.937179175e-04f, 4.944691547e-04f, 4.952194891e-04f, 4.959689196e-04f, 4.967174450e-04f, 4.974650639e-04f, 4.982117752e-04f, 4.989575776e-04f,
-4.997024699e-04f, 5.004464508e-04f, 5.011895192e-04f, 5.019316738e-04f, 5.026729134e-04f, 5.034132367e-04f, 5.041526426e-04f, 5.048911298e-04f, 5.056286971e-04f, 5.063653433e-04f,
-5.071010671e-04f, 5.078358674e-04f, 5.085697429e-04f, 5.093026925e-04f, 5.100347149e-04f, 5.107658089e-04f, 5.114959734e-04f, 5.122252070e-04f, 5.129535087e-04f, 5.136808771e-04f,
-5.144073112e-04f, 5.151328097e-04f, 5.158573714e-04f, 5.165809952e-04f, 5.173036798e-04f, 5.180254240e-04f, 5.187462267e-04f, 5.194660867e-04f, 5.201850027e-04f, 5.209029737e-04f,
-5.216199984e-04f, 5.223360756e-04f, 5.230512042e-04f, 5.237653830e-04f, 5.244786109e-04f, 5.251908865e-04f, 5.259022089e-04f, 5.266125767e-04f, 5.273219889e-04f, 5.280304443e-04f,
-5.287379417e-04f, 5.294444799e-04f, 5.301500578e-04f, 5.308546743e-04f, 5.315583281e-04f, 5.322610182e-04f, 5.329627433e-04f, 5.336635023e-04f, 5.343632941e-04f, 5.350621175e-04f,
-5.357599714e-04f, 5.364568546e-04f, 5.371527659e-04f, 5.378477044e-04f, 5.385416687e-04f, 5.392346578e-04f, 5.399266705e-04f, 5.406177057e-04f, 5.413077623e-04f, 5.419968391e-04f,
-5.426849350e-04f, 5.433720489e-04f, 5.440581796e-04f, 5.447433261e-04f, 5.454274871e-04f, 5.461106617e-04f, 5.467928486e-04f, 5.474740468e-04f, 5.481542551e-04f, 5.488334724e-04f,
-5.495116976e-04f, 5.501889297e-04f, 5.508651674e-04f, 5.515404098e-04f, 5.522146556e-04f, 5.528879038e-04f, 5.535601533e-04f, 5.542314029e-04f, 5.549016517e-04f, 5.555708984e-04f,
-5.562391421e-04f, 5.569063816e-04f, 5.575726157e-04f, 5.582378436e-04f, 5.589020639e-04f, 5.595652757e-04f, 5.602274780e-04f, 5.608886695e-04f, 5.615488492e-04f, 5.622080161e-04f,
-5.628661690e-04f, 5.635233069e-04f, 5.641794288e-04f, 5.648345335e-04f, 5.654886200e-04f, 5.661416873e-04f, 5.667937342e-04f, 5.674447597e-04f, 5.680947627e-04f, 5.687437422e-04f,
-5.693916971e-04f, 5.700386264e-04f, 5.706845290e-04f, 5.713294039e-04f, 5.719732499e-04f, 5.726160662e-04f, 5.732578516e-04f, 5.738986050e-04f, 5.745383255e-04f, 5.751770119e-04f,
-5.758146634e-04f, 5.764512787e-04f, 5.770868569e-04f, 5.777213970e-04f, 5.783548979e-04f, 5.789873586e-04f, 5.796187781e-04f, 5.802491553e-04f, 5.808784892e-04f, 5.815067788e-04f,
-5.821340231e-04f, 5.827602211e-04f, 5.833853717e-04f, 5.840094739e-04f, 5.846325268e-04f, 5.852545292e-04f, 5.858754803e-04f, 5.864953789e-04f, 5.871142241e-04f, 5.877320150e-04f,
-5.883487504e-04f, 5.889644294e-04f, 5.895790509e-04f, 5.901926141e-04f, 5.908051179e-04f, 5.914165613e-04f, 5.920269433e-04f, 5.926362629e-04f, 5.932445192e-04f, 5.938517111e-04f,
-5.944578378e-04f, 5.950628981e-04f, 5.956668911e-04f, 5.962698159e-04f, 5.968716715e-04f, 5.974724569e-04f, 5.980721711e-04f, 5.986708132e-04f, 5.992683821e-04f, 5.998648770e-04f,
-6.004602969e-04f, 6.010546408e-04f, 6.016479077e-04f, 6.022400967e-04f, 6.028312069e-04f, 6.034212372e-04f, 6.040101868e-04f, 6.045980547e-04f, 6.051848398e-04f, 6.057705414e-04f,
-6.063551585e-04f, 6.069386900e-04f, 6.075211351e-04f, 6.081024929e-04f, 6.086827623e-04f, 6.092619425e-04f, 6.098400325e-04f, 6.104170314e-04f, 6.109929383e-04f, 6.115677523e-04f,
-6.121414723e-04f, 6.127140976e-04f, 6.132856271e-04f, 6.138560600e-04f, 6.144253954e-04f, 6.149936322e-04f, 6.155607697e-04f, 6.161268069e-04f, 6.166917429e-04f, 6.172555768e-04f,
-6.178183077e-04f, 6.183799347e-04f, 6.189404569e-04f, 6.194998733e-04f, 6.200581831e-04f, 6.206153855e-04f, 6.211714794e-04f, 6.217264641e-04f, 6.222803385e-04f, 6.228331020e-04f,
-6.233847534e-04f, 6.239352921e-04f, 6.244847170e-04f, 6.250330274e-04f, 6.255802222e-04f, 6.261263008e-04f, 6.266712621e-04f, 6.272151054e-04f, 6.277578296e-04f, 6.282994341e-04f,
-6.288399179e-04f, 6.293792802e-04f, 6.299175200e-04f, 6.304546366e-04f, 6.309906290e-04f, 6.315254965e-04f, 6.320592381e-04f, 6.325918531e-04f, 6.331233405e-04f, 6.336536996e-04f,
-6.341829294e-04f, 6.347110292e-04f, 6.352379980e-04f, 6.357638351e-04f, 6.362885397e-04f, 6.368121108e-04f, 6.373345477e-04f, 6.378558494e-04f, 6.383760153e-04f, 6.388950445e-04f,
-6.394129361e-04f, 6.399296893e-04f, 6.404453033e-04f, 6.409597773e-04f, 6.414731104e-04f, 6.419853019e-04f, 6.424963509e-04f, 6.430062567e-04f, 6.435150183e-04f, 6.440226351e-04f,
-6.445291062e-04f, 6.450344308e-04f, 6.455386081e-04f, 6.460416373e-04f, 6.465435176e-04f, 6.470442482e-04f, 6.475438283e-04f, 6.480422572e-04f, 6.485395340e-04f, 6.490356579e-04f,
-6.495306283e-04f, 6.500244442e-04f, 6.505171049e-04f, 6.510086097e-04f, 6.514989577e-04f, 6.519881482e-04f, 6.524761805e-04f, 6.529630536e-04f, 6.534487670e-04f, 6.539333197e-04f,
-6.544167111e-04f, 6.548989404e-04f, 6.553800068e-04f, 6.558599096e-04f, 6.563386479e-04f, 6.568162212e-04f, 6.572926285e-04f, 6.577678692e-04f, 6.582419425e-04f, 6.587148477e-04f,
-6.591865840e-04f, 6.596571507e-04f, 6.601265470e-04f, 6.605947722e-04f, 6.610618256e-04f, 6.615277065e-04f, 6.619924140e-04f, 6.624559476e-04f, 6.629183064e-04f, 6.633794897e-04f,
-6.638394968e-04f, 6.642983270e-04f, 6.647559796e-04f, 6.652124538e-04f, 6.656677490e-04f, 6.661218644e-04f, 6.665747993e-04f, 6.670265530e-04f, 6.674771249e-04f, 6.679265141e-04f,
-6.683747200e-04f, 6.688217420e-04f, 6.692675792e-04f, 6.697122311e-04f, 6.701556968e-04f, 6.705979758e-04f, 6.710390674e-04f, 6.714789707e-04f, 6.719176853e-04f, 6.723552103e-04f,
-6.727915451e-04f, 6.732266891e-04f, 6.736606415e-04f, 6.740934017e-04f, 6.745249690e-04f, 6.749553427e-04f, 6.753845221e-04f, 6.758125067e-04f, 6.762392957e-04f, 6.766648885e-04f,
-6.770892844e-04f, 6.775124827e-04f, 6.779344829e-04f, 6.783552842e-04f, 6.787748860e-04f, 6.791932876e-04f, 6.796104885e-04f, 6.800264879e-04f, 6.804412852e-04f, 6.808548798e-04f,
-6.812672711e-04f, 6.816784583e-04f, 6.820884409e-04f, 6.824972183e-04f, 6.829047897e-04f, 6.833111547e-04f, 6.837163124e-04f, 6.841202624e-04f, 6.845230041e-04f, 6.849245367e-04f,
-6.853248597e-04f, 6.857239724e-04f, 6.861218743e-04f, 6.865185647e-04f, 6.869140431e-04f, 6.873083087e-04f, 6.877013611e-04f, 6.880931996e-04f, 6.884838237e-04f, 6.888732326e-04f,
-6.892614258e-04f, 6.896484028e-04f, 6.900341629e-04f, 6.904187056e-04f, 6.908020302e-04f, 6.911841362e-04f, 6.915650230e-04f, 6.919446900e-04f, 6.923231367e-04f, 6.927003624e-04f,
-6.930763666e-04f, 6.934511487e-04f, 6.938247081e-04f, 6.941970443e-04f, 6.945681568e-04f, 6.949380448e-04f, 6.953067080e-04f, 6.956741457e-04f, 6.960403573e-04f, 6.964053424e-04f,
-6.967691003e-04f, 6.971316305e-04f, 6.974929325e-04f, 6.978530058e-04f, 6.982118496e-04f, 6.985694637e-04f, 6.989258473e-04f, 6.992809999e-04f, 6.996349211e-04f, 6.999876103e-04f,
-7.003390669e-04f, 7.006892905e-04f, 7.010382804e-04f, 7.013860362e-04f, 7.017325574e-04f, 7.020778434e-04f, 7.024218937e-04f, 7.027647079e-04f, 7.031062853e-04f, 7.034466254e-04f,
-7.037857279e-04f, 7.041235921e-04f, 7.044602175e-04f, 7.047956037e-04f, 7.051297502e-04f, 7.054626564e-04f, 7.057943219e-04f, 7.061247461e-04f, 7.064539286e-04f, 7.067818688e-04f,
-7.071085664e-04f, 7.074340207e-04f, 7.077582314e-04f, 7.080811980e-04f, 7.084029198e-04f, 7.087233966e-04f, 7.090426278e-04f, 7.093606129e-04f, 7.096773515e-04f, 7.099928431e-04f,
-7.103070873e-04f, 7.106200835e-04f, 7.109318313e-04f, 7.112423303e-04f, 7.115515799e-04f, 7.118595798e-04f, 7.121663295e-04f, 7.124718286e-04f, 7.127760765e-04f, 7.130790729e-04f,
-7.133808172e-04f, 7.136813092e-04f, 7.139805482e-04f, 7.142785339e-04f, 7.145752659e-04f, 7.148707437e-04f, 7.151649669e-04f, 7.154579350e-04f, 7.157496477e-04f, 7.160401044e-04f,
-7.163293049e-04f, 7.166172486e-04f, 7.169039351e-04f, 7.171893641e-04f, 7.174735351e-04f, 7.177564477e-04f, 7.180381015e-04f, 7.183184961e-04f, 7.185976311e-04f, 7.188755061e-04f,
-7.191521207e-04f, 7.194274744e-04f, 7.197015670e-04f, 7.199743979e-04f, 7.202459668e-04f, 7.205162734e-04f, 7.207853172e-04f, 7.210530979e-04f, 7.213196150e-04f, 7.215848682e-04f,
-7.218488571e-04f, 7.221115814e-04f, 7.223730406e-04f, 7.226332344e-04f, 7.228921624e-04f, 7.231498243e-04f, 7.234062197e-04f, 7.236613481e-04f, 7.239152094e-04f, 7.241678031e-04f,
-7.244191288e-04f, 7.246691862e-04f, 7.249179750e-04f, 7.251654948e-04f, 7.254117452e-04f, 7.256567259e-04f, 7.259004367e-04f, 7.261428770e-04f, 7.263840466e-04f, 7.266239452e-04f,
-7.268625724e-04f, 7.270999279e-04f, 7.273360113e-04f, 7.275708224e-04f, 7.278043608e-04f, 7.280366261e-04f, 7.282676182e-04f, 7.284973366e-04f, 7.287257810e-04f, 7.289529511e-04f,
-7.291788467e-04f, 7.294034673e-04f, 7.296268128e-04f, 7.298488827e-04f, 7.300696768e-04f, 7.302891948e-04f, 7.305074364e-04f, 7.307244013e-04f, 7.309400892e-04f, 7.311544997e-04f,
-7.313676327e-04f, 7.315794879e-04f, 7.317900649e-04f, 7.319993634e-04f, 7.322073832e-04f, 7.324141241e-04f, 7.326195857e-04f, 7.328237677e-04f, 7.330266699e-04f, 7.332282920e-04f,
-7.334286338e-04f, 7.336276950e-04f, 7.338254753e-04f, 7.340219745e-04f, 7.342171923e-04f, 7.344111284e-04f, 7.346037826e-04f, 7.347951547e-04f, 7.349852444e-04f, 7.351740514e-04f,
-7.353615755e-04f, 7.355478165e-04f, 7.357327741e-04f, 7.359164482e-04f, 7.360988383e-04f, 7.362799444e-04f, 7.364597662e-04f, 7.366383034e-04f, 7.368155559e-04f, 7.369915234e-04f,
-7.371662056e-04f, 7.373396025e-04f, 7.375117137e-04f, 7.376825390e-04f, 7.378520782e-04f, 7.380203312e-04f, 7.381872977e-04f, 7.383529774e-04f, 7.385173703e-04f, 7.386804760e-04f,
-7.388422944e-04f, 7.390028254e-04f, 7.391620686e-04f, 7.393200239e-04f, 7.394766912e-04f, 7.396320701e-04f, 7.397861606e-04f, 7.399389625e-04f, 7.400904756e-04f, 7.402406996e-04f,
-7.403896345e-04f, 7.405372800e-04f, 7.406836359e-04f, 7.408287022e-04f, 7.409724786e-04f, 7.411149650e-04f, 7.412561612e-04f, 7.413960670e-04f, 7.415346823e-04f, 7.416720069e-04f,
-7.418080407e-04f, 7.419427835e-04f, 7.420762352e-04f, 7.422083956e-04f, 7.423392646e-04f, 7.424688420e-04f, 7.425971277e-04f, 7.427241215e-04f, 7.428498233e-04f, 7.429742331e-04f,
-7.430973505e-04f, 7.432191756e-04f, 7.433397082e-04f, 7.434589482e-04f, 7.435768953e-04f, 7.436935496e-04f, 7.438089109e-04f, 7.439229791e-04f, 7.440357540e-04f, 7.441472356e-04f,
-7.442574238e-04f, 7.443663184e-04f, 7.444739193e-04f, 7.445802264e-04f, 7.446852397e-04f, 7.447889590e-04f, 7.448913842e-04f, 7.449925153e-04f, 7.450923521e-04f, 7.451908946e-04f,
-7.452881426e-04f, 7.453840961e-04f, 7.454787551e-04f, 7.455721193e-04f, 7.456641888e-04f, 7.457549635e-04f, 7.458444432e-04f, 7.459326280e-04f, 7.460195177e-04f, 7.461051123e-04f,
-7.461894117e-04f, 7.462724159e-04f, 7.463541248e-04f, 7.464345383e-04f, 7.465136564e-04f, 7.465914790e-04f, 7.466680061e-04f, 7.467432376e-04f, 7.468171735e-04f, 7.468898137e-04f,
-7.469611583e-04f, 7.470312070e-04f, 7.470999600e-04f, 7.471674172e-04f, 7.472335785e-04f, 7.472984439e-04f, 7.473620134e-04f, 7.474242869e-04f, 7.474852645e-04f, 7.475449461e-04f,
-7.476033317e-04f, 7.476604213e-04f, 7.477162148e-04f, 7.477707122e-04f, 7.478239136e-04f, 7.478758189e-04f, 7.479264281e-04f, 7.479757412e-04f, 7.480237583e-04f, 7.480704792e-04f,
-7.481159041e-04f, 7.481600328e-04f, 7.482028655e-04f, 7.482444021e-04f, 7.482846427e-04f, 7.483235872e-04f, 7.483612357e-04f, 7.483975882e-04f, 7.484326447e-04f, 7.484664052e-04f,
-7.484988697e-04f, 7.485300384e-04f, 7.485599112e-04f, 7.485884881e-04f, 7.486157691e-04f, 7.486417544e-04f, 7.486664440e-04f, 7.486898378e-04f, 7.487119360e-04f, 7.487327385e-04f,
-7.487522455e-04f, 7.487704570e-04f, 7.487873729e-04f, 7.488029935e-04f, 7.488173187e-04f, 7.488303486e-04f, 7.488420832e-04f, 7.488525227e-04f, 7.488616670e-04f, 7.488695163e-04f,
-7.488760706e-04f, 7.488813300e-04f, 7.488852946e-04f, 7.488879644e-04f, 7.488893395e-04f, 7.488894200e-04f, 7.488882060e-04f, 7.488856976e-04f, 7.488818948e-04f, 7.488767978e-04f,
-7.488704066e-04f, 7.488627213e-04f, 7.488537421e-04f, 7.488434690e-04f, 7.488319021e-04f, 7.488190415e-04f, 7.488048874e-04f, 7.487894398e-04f, 7.487726989e-04f, 7.487546647e-04f,
-7.487353374e-04f, 7.487147171e-04f, 7.486928039e-04f, 7.486695979e-04f, 7.486450993e-04f, 7.486193082e-04f, 7.485922246e-04f, 7.485638488e-04f, 7.485341809e-04f, 7.485032210e-04f,
-7.484709692e-04f, 7.484374257e-04f, 7.484025906e-04f, 7.483664641e-04f, 7.483290463e-04f, 7.482903373e-04f, 7.482503373e-04f, 7.482090465e-04f, 7.481664650e-04f, 7.481225930e-04f,
-7.480774306e-04f, 7.480309780e-04f, 7.479832353e-04f, 7.479342027e-04f, 7.478838804e-04f, 7.478322686e-04f, 7.477793674e-04f, 7.477251770e-04f, 7.476696975e-04f, 7.476129292e-04f,
-7.475548723e-04f, 7.474955268e-04f, 7.474348931e-04f, 7.473729712e-04f, 7.473097614e-04f, 7.472452639e-04f, 7.471794789e-04f, 7.471124065e-04f, 7.470440469e-04f, 7.469744005e-04f,
-7.469034672e-04f, 7.468312475e-04f, 7.467577414e-04f, 7.466829492e-04f, 7.466068711e-04f, 7.465295073e-04f, 7.464508581e-04f, 7.463709235e-04f, 7.462897040e-04f, 7.462071996e-04f,
-7.461234106e-04f, 7.460383373e-04f, 7.459519799e-04f, 7.458643385e-04f, 7.457754135e-04f, 7.456852050e-04f, 7.455937134e-04f, 7.455009388e-04f, 7.454068815e-04f, 7.453115417e-04f,
-7.452149197e-04f, 7.451170157e-04f, 7.450178301e-04f, 7.449173629e-04f, 7.448156146e-04f, 7.447125853e-04f, 7.446082753e-04f, 7.445026849e-04f, 7.443958143e-04f, 7.442876639e-04f,
-7.441782338e-04f, 7.440675243e-04f, 7.439555358e-04f, 7.438422685e-04f, 7.437277226e-04f, 7.436118985e-04f, 7.434947964e-04f, 7.433764166e-04f, 7.432567595e-04f, 7.431358252e-04f,
-7.430136141e-04f, 7.428901265e-04f, 7.427653627e-04f, 7.426393230e-04f, 7.425120076e-04f, 7.423834169e-04f, 7.422535511e-04f, 7.421224107e-04f, 7.419899958e-04f, 7.418563068e-04f,
-7.417213441e-04f, 7.415851079e-04f, 7.414475985e-04f, 7.413088163e-04f, 7.411687616e-04f, 7.410274347e-04f, 7.408848359e-04f, 7.407409656e-04f, 7.405958241e-04f, 7.404494117e-04f,
-7.403017288e-04f, 7.401527757e-04f, 7.400025527e-04f, 7.398510602e-04f, 7.396982985e-04f, 7.395442680e-04f, 7.393889690e-04f, 7.392324019e-04f, 7.390745670e-04f, 7.389154646e-04f,
-7.387550952e-04f, 7.385934591e-04f, 7.384305566e-04f, 7.382663881e-04f, 7.381009541e-04f, 7.379342547e-04f, 7.377662905e-04f, 7.375970617e-04f, 7.374265688e-04f, 7.372548121e-04f,
-7.370817921e-04f, 7.369075090e-04f, 7.367319633e-04f, 7.365551554e-04f, 7.363770856e-04f, 7.361977543e-04f, 7.360171620e-04f, 7.358353090e-04f, 7.356521957e-04f, 7.354678225e-04f,
-7.352821898e-04f, 7.350952980e-04f, 7.349071476e-04f, 7.347177388e-04f, 7.345270722e-04f, 7.343351481e-04f, 7.341419670e-04f, 7.339475292e-04f, 7.337518353e-04f, 7.335548855e-04f,
-7.333566803e-04f, 7.331572202e-04f, 7.329565056e-04f, 7.327545369e-04f, 7.325513145e-04f, 7.323468388e-04f, 7.321411104e-04f, 7.319341295e-04f, 7.317258968e-04f, 7.315164125e-04f,
-7.313056772e-04f, 7.310936913e-04f, 7.308804553e-04f, 7.306659695e-04f, 7.304502345e-04f, 7.302332507e-04f, 7.300150185e-04f, 7.297955384e-04f, 7.295748109e-04f, 7.293528364e-04f,
-7.291296154e-04f, 7.289051484e-04f, 7.286794358e-04f, 7.284524781e-04f, 7.282242758e-04f, 7.279948293e-04f, 7.277641391e-04f, 7.275322057e-04f, 7.272990296e-04f, 7.270646113e-04f,
-7.268289512e-04f, 7.265920498e-04f, 7.263539077e-04f, 7.261145253e-04f, 7.258739031e-04f, 7.256320416e-04f, 7.253889413e-04f, 7.251446027e-04f, 7.248990263e-04f, 7.246522126e-04f,
-7.244041621e-04f, 7.241548753e-04f, 7.239043528e-04f, 7.236525950e-04f, 7.233996024e-04f, 7.231453757e-04f, 7.228899152e-04f, 7.226332216e-04f, 7.223752952e-04f, 7.221161368e-04f,
-7.218557467e-04f, 7.215941256e-04f, 7.213312739e-04f, 7.210671921e-04f, 7.208018809e-04f, 7.205353408e-04f, 7.202675723e-04f, 7.199985758e-04f, 7.197283521e-04f, 7.194569016e-04f,
-7.191842249e-04f, 7.189103225e-04f, 7.186351949e-04f, 7.183588428e-04f, 7.180812667e-04f, 7.178024672e-04f, 7.175224447e-04f, 7.172411999e-04f, 7.169587334e-04f, 7.166750456e-04f,
-7.163901372e-04f, 7.161040088e-04f, 7.158166609e-04f, 7.155280940e-04f, 7.152383088e-04f, 7.149473059e-04f, 7.146550858e-04f, 7.143616491e-04f, 7.140669964e-04f, 7.137711283e-04f,
-7.134740453e-04f, 7.131757481e-04f, 7.128762373e-04f, 7.125755134e-04f, 7.122735771e-04f, 7.119704289e-04f, 7.116660695e-04f, 7.113604994e-04f, 7.110537193e-04f, 7.107457297e-04f,
-7.104365314e-04f, 7.101261248e-04f, 7.098145106e-04f, 7.095016895e-04f, 7.091876620e-04f, 7.088724287e-04f, 7.085559904e-04f, 7.082383475e-04f, 7.079195008e-04f, 7.075994508e-04f,
-7.072781983e-04f, 7.069557437e-04f, 7.066320878e-04f, 7.063072313e-04f, 7.059811746e-04f, 7.056539185e-04f, 7.053254637e-04f, 7.049958107e-04f, 7.046649602e-04f, 7.043329129e-04f,
-7.039996694e-04f, 7.036652303e-04f, 7.033295964e-04f, 7.029927682e-04f, 7.026547465e-04f, 7.023155319e-04f, 7.019751250e-04f, 7.016335266e-04f, 7.012907372e-04f, 7.009467576e-04f,
-7.006015885e-04f, 7.002552304e-04f, 6.999076841e-04f, 6.995589503e-04f, 6.992090296e-04f, 6.988579227e-04f, 6.985056303e-04f, 6.981521531e-04f, 6.977974918e-04f, 6.974416470e-04f,
-6.970846195e-04f, 6.967264099e-04f, 6.963670190e-04f, 6.960064474e-04f, 6.956446959e-04f, 6.952817650e-04f, 6.949176557e-04f, 6.945523684e-04f, 6.941859040e-04f, 6.938182632e-04f,
-6.934494467e-04f, 6.930794551e-04f, 6.927082893e-04f, 6.923359498e-04f, 6.919624375e-04f, 6.915877531e-04f, 6.912118972e-04f, 6.908348706e-04f, 6.904566741e-04f, 6.900773083e-04f,
-6.896967741e-04f, 6.893150720e-04f, 6.889322029e-04f, 6.885481675e-04f, 6.881629666e-04f, 6.877766008e-04f, 6.873890710e-04f, 6.870003778e-04f, 6.866105220e-04f, 6.862195044e-04f,
-6.858273257e-04f, 6.854339866e-04f, 6.850394880e-04f, 6.846438306e-04f, 6.842470150e-04f, 6.838490422e-04f, 6.834499128e-04f, 6.830496277e-04f, 6.826481875e-04f, 6.822455931e-04f,
-6.818418452e-04f, 6.814369446e-04f, 6.810308921e-04f, 6.806236884e-04f, 6.802153344e-04f, 6.798058307e-04f, 6.793951783e-04f, 6.789833778e-04f, 6.785704300e-04f, 6.781563358e-04f,
-6.777410960e-04f, 6.773247112e-04f, 6.769071824e-04f, 6.764885103e-04f, 6.760686957e-04f, 6.756477394e-04f, 6.752256422e-04f, 6.748024050e-04f, 6.743780284e-04f, 6.739525134e-04f,
-6.735258607e-04f, 6.730980712e-04f, 6.726691456e-04f, 6.722390847e-04f, 6.718078895e-04f, 6.713755607e-04f, 6.709420991e-04f, 6.705075055e-04f, 6.700717808e-04f, 6.696349259e-04f,
-6.691969414e-04f, 6.687578283e-04f, 6.683175874e-04f, 6.678762195e-04f, 6.674337255e-04f, 6.669901061e-04f, 6.665453623e-04f, 6.660994949e-04f, 6.656525046e-04f, 6.652043925e-04f,
-6.647551592e-04f, 6.643048057e-04f, 6.638533329e-04f, 6.634007414e-04f, 6.629470323e-04f, 6.624922064e-04f, 6.620362645e-04f, 6.615792075e-04f, 6.611210362e-04f, 6.606617515e-04f,
-6.602013543e-04f, 6.597398455e-04f, 6.592772259e-04f, 6.588134964e-04f, 6.583486578e-04f, 6.578827111e-04f, 6.574156571e-04f, 6.569474966e-04f, 6.564782307e-04f, 6.560078601e-04f,
-6.555363857e-04f, 6.550638085e-04f, 6.545901292e-04f, 6.541153489e-04f, 6.536394684e-04f, 6.531624885e-04f, 6.526844102e-04f, 6.522052344e-04f, 6.517249620e-04f, 6.512435939e-04f,
-6.507611309e-04f, 6.502775741e-04f, 6.497929242e-04f, 6.493071822e-04f, 6.488203490e-04f, 6.483324256e-04f, 6.478434128e-04f, 6.473533115e-04f, 6.468621227e-04f, 6.463698473e-04f,
-6.458764862e-04f, 6.453820403e-04f, 6.448865106e-04f, 6.443898980e-04f, 6.438922033e-04f, 6.433934276e-04f, 6.428935718e-04f, 6.423926368e-04f, 6.418906235e-04f, 6.413875329e-04f,
-6.408833659e-04f, 6.403781235e-04f, 6.398718066e-04f, 6.393644161e-04f, 6.388559530e-04f, 6.383464182e-04f, 6.378358128e-04f, 6.373241375e-04f, 6.368113935e-04f, 6.362975816e-04f,
-6.357827028e-04f, 6.352667581e-04f, 6.347497484e-04f, 6.342316747e-04f, 6.337125379e-04f, 6.331923391e-04f, 6.326710791e-04f, 6.321487590e-04f, 6.316253797e-04f, 6.311009422e-04f,
-6.305754475e-04f, 6.300488965e-04f, 6.295212902e-04f, 6.289926297e-04f, 6.284629158e-04f, 6.279321496e-04f, 6.274003321e-04f, 6.268674642e-04f, 6.263335470e-04f, 6.257985813e-04f,
-6.252625683e-04f, 6.247255089e-04f, 6.241874041e-04f, 6.236482549e-04f, 6.231080623e-04f, 6.225668273e-04f, 6.220245509e-04f, 6.214812341e-04f, 6.209368779e-04f, 6.203914834e-04f,
-6.198450515e-04f, 6.192975832e-04f, 6.187490796e-04f, 6.181995417e-04f, 6.176489704e-04f, 6.170973669e-04f, 6.165447320e-04f, 6.159910670e-04f, 6.154363727e-04f, 6.148806502e-04f,
-6.143239005e-04f, 6.137661247e-04f, 6.132073237e-04f, 6.126474987e-04f, 6.120866506e-04f, 6.115247805e-04f, 6.109618894e-04f, 6.103979784e-04f, 6.098330485e-04f, 6.092671007e-04f,
-6.087001361e-04f, 6.081321558e-04f, 6.075631607e-04f, 6.069931520e-04f, 6.064221306e-04f, 6.058500976e-04f, 6.052770542e-04f, 6.047030013e-04f, 6.041279399e-04f, 6.035518713e-04f,
-6.029747963e-04f, 6.023967162e-04f, 6.018176319e-04f, 6.012375444e-04f, 6.006564550e-04f, 6.000743646e-04f, 5.994912744e-04f, 5.989071853e-04f, 5.983220984e-04f, 5.977360150e-04f,
-5.971489359e-04f, 5.965608623e-04f, 5.959717953e-04f, 5.953817360e-04f, 5.947906854e-04f, 5.941986446e-04f, 5.936056148e-04f, 5.930115969e-04f, 5.924165922e-04f, 5.918206016e-04f,
-5.912236263e-04f, 5.906256674e-04f, 5.900267259e-04f, 5.894268031e-04f, 5.888258999e-04f, 5.882240174e-04f, 5.876211569e-04f, 5.870173193e-04f, 5.864125058e-04f, 5.858067175e-04f,
-5.851999555e-04f, 5.845922210e-04f, 5.839835149e-04f, 5.833738385e-04f, 5.827631929e-04f, 5.821515792e-04f, 5.815389984e-04f, 5.809254518e-04f, 5.803109404e-04f, 5.796954654e-04f,
-5.790790279e-04f, 5.784616290e-04f, 5.778432699e-04f, 5.772239516e-04f, 5.766036753e-04f, 5.759824423e-04f, 5.753602534e-04f, 5.747371100e-04f, 5.741130132e-04f, 5.734879641e-04f,
-5.728619638e-04f, 5.722350135e-04f, 5.716071143e-04f, 5.709782674e-04f, 5.703484740e-04f, 5.697177351e-04f, 5.690860519e-04f, 5.684534256e-04f, 5.678198573e-04f, 5.671853483e-04f,
-5.665498995e-04f, 5.659135123e-04f, 5.652761878e-04f, 5.646379271e-04f, 5.639987313e-04f, 5.633586018e-04f, 5.627175395e-04f, 5.620755458e-04f, 5.614326217e-04f, 5.607887684e-04f,
-5.601439871e-04f, 5.594982791e-04f, 5.588516454e-04f, 5.582040872e-04f, 5.575556057e-04f, 5.569062021e-04f, 5.562558776e-04f, 5.556046334e-04f, 5.549524706e-04f, 5.542993904e-04f,
-5.536453941e-04f, 5.529904827e-04f, 5.523346576e-04f, 5.516779198e-04f, 5.510202707e-04f, 5.503617113e-04f, 5.497022429e-04f, 5.490418667e-04f, 5.483805838e-04f, 5.477183956e-04f,
-5.470553031e-04f, 5.463913076e-04f, 5.457264103e-04f, 5.450606124e-04f, 5.443939151e-04f, 5.437263196e-04f, 5.430578272e-04f, 5.423884390e-04f, 5.417181562e-04f, 5.410469802e-04f,
-5.403749120e-04f, 5.397019529e-04f, 5.390281042e-04f, 5.383533670e-04f, 5.376777427e-04f, 5.370012323e-04f, 5.363238371e-04f, 5.356455584e-04f, 5.349663974e-04f, 5.342863554e-04f,
-5.336054334e-04f, 5.329236329e-04f, 5.322409550e-04f, 5.315574009e-04f, 5.308729720e-04f, 5.301876693e-04f, 5.295014943e-04f, 5.288144480e-04f, 5.281265319e-04f, 5.274377470e-04f,
-5.267480947e-04f, 5.260575762e-04f, 5.253661928e-04f, 5.246739456e-04f, 5.239808360e-04f, 5.232868653e-04f, 5.225920345e-04f, 5.218963452e-04f, 5.211997983e-04f, 5.205023954e-04f,
-5.198041375e-04f, 5.191050260e-04f, 5.184050621e-04f, 5.177042471e-04f, 5.170025823e-04f, 5.163000689e-04f, 5.155967081e-04f, 5.148925014e-04f, 5.141874499e-04f, 5.134815549e-04f,
-5.127748176e-04f, 5.120672395e-04f, 5.113588216e-04f, 5.106495654e-04f, 5.099394721e-04f, 5.092285430e-04f, 5.085167793e-04f, 5.078041824e-04f, 5.070907535e-04f, 5.063764939e-04f,
-5.056614049e-04f, 5.049454879e-04f, 5.042287440e-04f, 5.035111745e-04f, 5.027927809e-04f, 5.020735643e-04f, 5.013535261e-04f, 5.006326676e-04f, 4.999109900e-04f, 4.991884947e-04f,
-4.984651829e-04f, 4.977410560e-04f, 4.970161153e-04f, 4.962903620e-04f, 4.955637976e-04f, 4.948364232e-04f, 4.941082402e-04f, 4.933792500e-04f, 4.926494537e-04f, 4.919188528e-04f,
-4.911874486e-04f, 4.904552423e-04f, 4.897222353e-04f, 4.889884289e-04f, 4.882538245e-04f, 4.875184233e-04f, 4.867822266e-04f, 4.860452359e-04f, 4.853074523e-04f, 4.845688773e-04f,
-4.838295122e-04f, 4.830893583e-04f, 4.823484169e-04f, 4.816066894e-04f, 4.808641771e-04f, 4.801208813e-04f, 4.793768034e-04f, 4.786319447e-04f, 4.778863065e-04f, 4.771398902e-04f,
-4.763926971e-04f, 4.756447286e-04f, 4.748959860e-04f, 4.741464707e-04f, 4.733961839e-04f, 4.726451271e-04f, 4.718933016e-04f, 4.711407087e-04f, 4.703873498e-04f, 4.696332263e-04f,
-4.688783394e-04f, 4.681226906e-04f, 4.673662812e-04f, 4.666091126e-04f, 4.658511860e-04f, 4.650925030e-04f, 4.643330648e-04f, 4.635728728e-04f, 4.628119284e-04f, 4.620502329e-04f,
-4.612877876e-04f, 4.605245941e-04f, 4.597606536e-04f, 4.589959674e-04f, 4.582305370e-04f, 4.574643638e-04f, 4.566974491e-04f, 4.559297943e-04f, 4.551614007e-04f, 4.543922697e-04f,
-4.536224028e-04f, 4.528518012e-04f, 4.520804665e-04f, 4.513083998e-04f, 4.505356027e-04f, 4.497620765e-04f, 4.489878227e-04f, 4.482128425e-04f, 4.474371373e-04f, 4.466607087e-04f,
-4.458835578e-04f, 4.451056863e-04f, 4.443270953e-04f, 4.435477864e-04f, 4.427677608e-04f, 4.419870201e-04f, 4.412055656e-04f, 4.404233987e-04f, 4.396405208e-04f, 4.388569333e-04f,
-4.380726376e-04f, 4.372876351e-04f, 4.365019272e-04f, 4.357155153e-04f, 4.349284008e-04f, 4.341405852e-04f, 4.333520698e-04f, 4.325628560e-04f, 4.317729452e-04f, 4.309823389e-04f,
-4.301910385e-04f, 4.293990453e-04f, 4.286063609e-04f, 4.278129865e-04f, 4.270189237e-04f, 4.262241738e-04f, 4.254287383e-04f, 4.246326185e-04f, 4.238358160e-04f, 4.230383320e-04f,
-4.222401681e-04f, 4.214413257e-04f, 4.206418062e-04f, 4.198416110e-04f, 4.190407415e-04f, 4.182391992e-04f, 4.174369855e-04f, 4.166341019e-04f, 4.158305497e-04f, 4.150263304e-04f,
-4.142214454e-04f, 4.134158962e-04f, 4.126096842e-04f, 4.118028108e-04f, 4.109952775e-04f, 4.101870857e-04f, 4.093782368e-04f, 4.085687324e-04f, 4.077585738e-04f, 4.069477624e-04f,
-4.061362998e-04f, 4.053241873e-04f, 4.045114265e-04f, 4.036980187e-04f, 4.028839654e-04f, 4.020692681e-04f, 4.012539282e-04f, 4.004379471e-04f, 3.996213263e-04f, 3.988040673e-04f,
-3.979861715e-04f, 3.971676404e-04f, 3.963484754e-04f, 3.955286780e-04f, 3.947082496e-04f, 3.938871918e-04f, 3.930655059e-04f, 3.922431934e-04f, 3.914202558e-04f, 3.905966945e-04f,
-3.897725110e-04f, 3.889477069e-04f, 3.881222834e-04f, 3.872962422e-04f, 3.864695846e-04f, 3.856423122e-04f, 3.848144264e-04f, 3.839859287e-04f, 3.831568206e-04f, 3.823271035e-04f,
-3.814967788e-04f, 3.806658482e-04f, 3.798343130e-04f, 3.790021748e-04f, 3.781694349e-04f, 3.773360950e-04f, 3.765021564e-04f, 3.756676206e-04f, 3.748324892e-04f, 3.739967636e-04f,
-3.731604452e-04f, 3.723235357e-04f, 3.714860364e-04f, 3.706479489e-04f, 3.698092746e-04f, 3.689700150e-04f, 3.681301716e-04f, 3.672897460e-04f, 3.664487395e-04f, 3.656071537e-04f,
-3.647649901e-04f, 3.639222501e-04f, 3.630789353e-04f, 3.622350472e-04f, 3.613905872e-04f, 3.605455569e-04f, 3.596999577e-04f, 3.588537912e-04f, 3.580070588e-04f, 3.571597621e-04f,
-3.563119025e-04f, 3.554634815e-04f, 3.546145007e-04f, 3.537649616e-04f, 3.529148656e-04f, 3.520642143e-04f, 3.512130091e-04f, 3.503612517e-04f, 3.495089434e-04f, 3.486560858e-04f,
-3.478026805e-04f, 3.469487288e-04f, 3.460942324e-04f, 3.452391927e-04f, 3.443836113e-04f, 3.435274897e-04f, 3.426708293e-04f, 3.418136317e-04f, 3.409558985e-04f, 3.400976311e-04f,
-3.392388310e-04f, 3.383794998e-04f, 3.375196390e-04f, 3.366592501e-04f, 3.357983347e-04f, 3.349368942e-04f, 3.340749301e-04f, 3.332124441e-04f, 3.323494376e-04f, 3.314859122e-04f,
-3.306218693e-04f, 3.297573106e-04f, 3.288922375e-04f, 3.280266515e-04f, 3.271605543e-04f, 3.262939472e-04f, 3.254268319e-04f, 3.245592099e-04f, 3.236910828e-04f, 3.228224519e-04f,
-3.219533190e-04f, 3.210836855e-04f, 3.202135529e-04f, 3.193429229e-04f, 3.184717969e-04f, 3.176001764e-04f, 3.167280630e-04f, 3.158554583e-04f, 3.149823638e-04f, 3.141087810e-04f,
-3.132347115e-04f, 3.123601568e-04f, 3.114851185e-04f, 3.106095980e-04f, 3.097335970e-04f, 3.088571170e-04f, 3.079801595e-04f, 3.071027262e-04f, 3.062248184e-04f, 3.053464378e-04f,
-3.044675860e-04f, 3.035882644e-04f, 3.027084747e-04f, 3.018282183e-04f, 3.009474969e-04f, 3.000663120e-04f, 2.991846651e-04f, 2.983025577e-04f, 2.974199916e-04f, 2.965369681e-04f,
-2.956534889e-04f, 2.947695556e-04f, 2.938851695e-04f, 2.930003325e-04f, 2.921150459e-04f, 2.912293113e-04f, 2.903431304e-04f, 2.894565047e-04f, 2.885694356e-04f, 2.876819249e-04f,
-2.867939740e-04f, 2.859055846e-04f, 2.850167581e-04f, 2.841274962e-04f, 2.832378004e-04f, 2.823476723e-04f, 2.814571134e-04f, 2.805661254e-04f, 2.796747097e-04f, 2.787828680e-04f,
-2.778906018e-04f, 2.769979127e-04f, 2.761048023e-04f, 2.752112721e-04f, 2.743173237e-04f, 2.734229587e-04f, 2.725281786e-04f, 2.716329851e-04f, 2.707373796e-04f, 2.698413639e-04f,
-2.689449393e-04f, 2.680481077e-04f, 2.671508704e-04f, 2.662532291e-04f, 2.653551853e-04f, 2.644567407e-04f, 2.635578968e-04f, 2.626586552e-04f, 2.617590175e-04f, 2.608589852e-04f,
-2.599585600e-04f, 2.590577434e-04f, 2.581565370e-04f, 2.572549424e-04f, 2.563529612e-04f, 2.554505949e-04f, 2.545478451e-04f, 2.536447135e-04f, 2.527412016e-04f, 2.518373110e-04f,
-2.509330432e-04f, 2.500284000e-04f, 2.491233828e-04f, 2.482179933e-04f, 2.473122330e-04f, 2.464061035e-04f, 2.454996064e-04f, 2.445927434e-04f, 2.436855159e-04f, 2.427779257e-04f,
-2.418699742e-04f, 2.409616631e-04f, 2.400529940e-04f, 2.391439685e-04f, 2.382345881e-04f, 2.373248545e-04f, 2.364147692e-04f, 2.355043339e-04f, 2.345935501e-04f, 2.336824195e-04f,
-2.327709436e-04f, 2.318591240e-04f, 2.309469624e-04f, 2.300344603e-04f, 2.291216193e-04f, 2.282084411e-04f, 2.272949272e-04f, 2.263810793e-04f, 2.254668989e-04f, 2.245523876e-04f,
-2.236375471e-04f, 2.227223789e-04f, 2.218068847e-04f, 2.208910660e-04f, 2.199749245e-04f, 2.190584618e-04f, 2.181416794e-04f, 2.172245790e-04f, 2.163071621e-04f, 2.153894305e-04f,
-2.144713856e-04f, 2.135530291e-04f, 2.126343627e-04f, 2.117153879e-04f, 2.107961062e-04f, 2.098765195e-04f, 2.089566291e-04f, 2.080364369e-04f, 2.071159442e-04f, 2.061951529e-04f,
-2.052740644e-04f, 2.043526805e-04f, 2.034310026e-04f, 2.025090325e-04f, 2.015867717e-04f, 2.006642219e-04f, 1.997413846e-04f, 1.988182615e-04f, 1.978948541e-04f, 1.969711642e-04f,
-1.960471933e-04f, 1.951229431e-04f, 1.941984151e-04f, 1.932736109e-04f, 1.923485323e-04f, 1.914231807e-04f, 1.904975579e-04f, 1.895716654e-04f, 1.886455048e-04f, 1.877190779e-04f,
-1.867923861e-04f, 1.858654311e-04f, 1.849382146e-04f, 1.840107381e-04f, 1.830830033e-04f, 1.821550118e-04f, 1.812267652e-04f, 1.802982651e-04f, 1.793695132e-04f, 1.784405111e-04f,
-1.775112603e-04f, 1.765817626e-04f, 1.756520195e-04f, 1.747220327e-04f, 1.737918038e-04f, 1.728613344e-04f, 1.719306262e-04f, 1.709996807e-04f, 1.700684996e-04f, 1.691370845e-04f,
-1.682054371e-04f, 1.672735589e-04f, 1.663414517e-04f, 1.654091169e-04f, 1.644765563e-04f, 1.635437715e-04f, 1.626107640e-04f, 1.616775356e-04f, 1.607440878e-04f, 1.598104224e-04f,
-1.588765408e-04f, 1.579424448e-04f, 1.570081359e-04f, 1.560736159e-04f, 1.551388862e-04f, 1.542039487e-04f, 1.532688048e-04f, 1.523334562e-04f, 1.513979046e-04f, 1.504621515e-04f,
-1.495261987e-04f, 1.485900477e-04f, 1.476537001e-04f, 1.467171577e-04f, 1.457804220e-04f, 1.448434947e-04f, 1.439063773e-04f, 1.429690716e-04f, 1.420315792e-04f, 1.410939017e-04f,
-1.401560406e-04f, 1.392179978e-04f, 1.382797747e-04f, 1.373413731e-04f, 1.364027945e-04f, 1.354640407e-04f, 1.345251131e-04f, 1.335860136e-04f, 1.326467436e-04f, 1.317073049e-04f,
-1.307676990e-04f, 1.298279277e-04f, 1.288879925e-04f, 1.279478950e-04f, 1.270076370e-04f, 1.260672200e-04f, 1.251266458e-04f, 1.241859158e-04f, 1.232450318e-04f, 1.223039954e-04f,
-1.213628082e-04f, 1.204214719e-04f, 1.194799881e-04f, 1.185383585e-04f, 1.175965846e-04f, 1.166546681e-04f, 1.157126107e-04f, 1.147704140e-04f, 1.138280796e-04f, 1.128856092e-04f,
-1.119430044e-04f, 1.110002669e-04f, 1.100573982e-04f, 1.091144001e-04f, 1.081712741e-04f, 1.072280219e-04f, 1.062846452e-04f, 1.053411455e-04f, 1.043975246e-04f, 1.034537840e-04f,
-1.025099254e-04f, 1.015659505e-04f, 1.006218608e-04f, 9.967765802e-05f, 9.873334382e-05f, 9.778891981e-05f, 9.684438764e-05f, 9.589974894e-05f, 9.495500536e-05f, 9.401015853e-05f,
-9.306521010e-05f, 9.212016171e-05f, 9.117501499e-05f, 9.022977159e-05f, 8.928443314e-05f, 8.833900130e-05f, 8.739347769e-05f, 8.644786396e-05f, 8.550216175e-05f, 8.455637270e-05f,
-8.361049846e-05f, 8.266454065e-05f, 8.171850093e-05f, 8.077238093e-05f, 7.982618230e-05f, 7.887990667e-05f, 7.793355569e-05f, 7.698713100e-05f, 7.604063424e-05f, 7.509406705e-05f,
-7.414743107e-05f, 7.320072794e-05f, 7.225395930e-05f, 7.130712680e-05f, 7.036023208e-05f, 6.941327677e-05f, 6.846626252e-05f, 6.751919097e-05f, 6.657206375e-05f, 6.562488253e-05f,
-6.467764892e-05f, 6.373036457e-05f, 6.278303114e-05f, 6.183565024e-05f, 6.088822354e-05f, 5.994075266e-05f, 5.899323925e-05f, 5.804568494e-05f, 5.709809139e-05f, 5.615046023e-05f,
-5.520279311e-05f, 5.425509165e-05f, 5.330735751e-05f, 5.235959232e-05f, 5.141179773e-05f, 5.046397538e-05f, 4.951612690e-05f, 4.856825393e-05f, 4.762035813e-05f, 4.667244111e-05f,
-4.572450454e-05f, 4.477655005e-05f, 4.382857927e-05f, 4.288059385e-05f, 4.193259543e-05f, 4.098458564e-05f, 4.003656614e-05f, 3.908853855e-05f, 3.814050451e-05f, 3.719246567e-05f,
-3.624442367e-05f, 3.529638014e-05f, 3.434833673e-05f, 3.340029507e-05f, 3.245225680e-05f, 3.150422357e-05f, 3.055619700e-05f, 2.960817874e-05f, 2.866017043e-05f, 2.771217370e-05f,
-2.676419020e-05f, 2.581622155e-05f, 2.486826941e-05f, 2.392033541e-05f, 2.297242118e-05f, 2.202452836e-05f, 2.107665860e-05f, 2.012881352e-05f, 1.918099477e-05f, 1.823320398e-05f,
-1.728544278e-05f, 1.633771283e-05f, 1.539001574e-05f, 1.444235317e-05f, 1.349472674e-05f, 1.254713809e-05f, 1.159958885e-05f, 1.065208067e-05f, 9.704615177e-06f, 8.757194007e-06f,
-7.809818795e-06f, 6.862491176e-06f, 5.915212786e-06f, 4.967985258e-06f, 4.020810228e-06f, 3.073689328e-06f, 2.126624195e-06f, 1.179616460e-06f, 2.326677590e-07f, -7.142202763e-07f,
--1.661046012e-06f, -2.607807815e-06f, -3.554504053e-06f, -4.501133094e-06f, -5.447693304e-06f, -6.394183052e-06f, -7.340600706e-06f, -8.286944634e-06f, -9.233213205e-06f, -1.017940479e-05f,
--1.112551775e-05f, -1.207155046e-05f, -1.301750130e-05f, -1.396336862e-05f, -1.490915080e-05f, -1.585484621e-05f, -1.680045323e-05f, -1.774597021e-05f, -1.869139553e-05f, -1.963672757e-05f,
--2.058196470e-05f, -2.152710528e-05f, -2.247214769e-05f, -2.341709030e-05f, -2.436193148e-05f, -2.530666961e-05f, -2.625130307e-05f, -2.719583021e-05f, -2.814024943e-05f, -2.908455909e-05f,
--3.002875756e-05f, -3.097284322e-05f, -3.191681445e-05f, -3.286066962e-05f, -3.380440711e-05f, -3.474802529e-05f, -3.569152254e-05f, -3.663489724e-05f, -3.757814776e-05f, -3.852127248e-05f,
--3.946426977e-05f, -4.040713802e-05f, -4.134987561e-05f, -4.229248090e-05f, -4.323495229e-05f, -4.417728814e-05f, -4.511948685e-05f, -4.606154678e-05f, -4.700346633e-05f, -4.794524386e-05f,
--4.888687777e-05f, -4.982836642e-05f, -5.076970821e-05f, -5.171090152e-05f, -5.265194472e-05f, -5.359283620e-05f, -5.453357435e-05f, -5.547415754e-05f, -5.641458417e-05f, -5.735485261e-05f,
--5.829496125e-05f, -5.923490847e-05f, -6.017469266e-05f, -6.111431221e-05f, -6.205376550e-05f, -6.299305092e-05f, -6.393216685e-05f, -6.487111169e-05f, -6.580988381e-05f, -6.674848161e-05f,
--6.768690348e-05f, -6.862514781e-05f, -6.956321297e-05f, -7.050109738e-05f, -7.143879940e-05f, -7.237631744e-05f, -7.331364989e-05f, -7.425079513e-05f, -7.518775157e-05f, -7.612451758e-05f,
--7.706109157e-05f, -7.799747192e-05f, -7.893365704e-05f, -7.986964531e-05f, -8.080543512e-05f, -8.174102489e-05f, -8.267641299e-05f, -8.361159782e-05f, -8.454657779e-05f, -8.548135129e-05f,
--8.641591671e-05f, -8.735027245e-05f, -8.828441691e-05f, -8.921834849e-05f, -9.015206559e-05f, -9.108556661e-05f, -9.201884995e-05f, -9.295191400e-05f, -9.388475718e-05f, -9.481737787e-05f,
--9.574977449e-05f, -9.668194543e-05f, -9.761388910e-05f, -9.854560390e-05f, -9.947708824e-05f, -1.004083405e-04f, -1.013393591e-04f, -1.022701425e-04f, -1.032006890e-04f, -1.041309971e-04f,
--1.050610652e-04f, -1.059908916e-04f, -1.069204748e-04f, -1.078498132e-04f, -1.087789052e-04f, -1.097077493e-04f, -1.106363437e-04f, -1.115646870e-04f, -1.124927775e-04f, -1.134206137e-04f,
--1.143481939e-04f, -1.152755166e-04f, -1.162025803e-04f, -1.171293832e-04f, -1.180559238e-04f, -1.189822006e-04f, -1.199082120e-04f, -1.208339563e-04f, -1.217594319e-04f, -1.226846374e-04f,
--1.236095711e-04f, -1.245342315e-04f, -1.254586169e-04f, -1.263827258e-04f, -1.273065566e-04f, -1.282301077e-04f, -1.291533775e-04f, -1.300763645e-04f, -1.309990671e-04f, -1.319214837e-04f,
--1.328436127e-04f, -1.337654526e-04f, -1.346870017e-04f, -1.356082586e-04f, -1.365292216e-04f, -1.374498891e-04f, -1.383702597e-04f, -1.392903316e-04f, -1.402101034e-04f, -1.411295734e-04f,
--1.420487402e-04f, -1.429676021e-04f, -1.438861575e-04f, -1.448044050e-04f, -1.457223428e-04f, -1.466399696e-04f, -1.475572836e-04f, -1.484742833e-04f, -1.493909672e-04f, -1.503073337e-04f,
--1.512233813e-04f, -1.521391083e-04f, -1.530545132e-04f, -1.539695944e-04f, -1.548843505e-04f, -1.557987797e-04f, -1.567128807e-04f, -1.576266517e-04f, -1.585400913e-04f, -1.594531978e-04f,
--1.603659698e-04f, -1.612784057e-04f, -1.621905039e-04f, -1.631022628e-04f, -1.640136810e-04f, -1.649247568e-04f, -1.658354887e-04f, -1.667458752e-04f, -1.676559146e-04f, -1.685656055e-04f,
--1.694749463e-04f, -1.703839355e-04f, -1.712925714e-04f, -1.722008526e-04f, -1.731087775e-04f, -1.740163446e-04f, -1.749235522e-04f, -1.758303990e-04f, -1.767368832e-04f, -1.776430034e-04f,
--1.785487581e-04f, -1.794541456e-04f, -1.803591645e-04f, -1.812638132e-04f, -1.821680902e-04f, -1.830719939e-04f, -1.839755228e-04f, -1.848786753e-04f, -1.857814499e-04f, -1.866838452e-04f,
--1.875858594e-04f, -1.884874912e-04f, -1.893887390e-04f, -1.902896011e-04f, -1.911900762e-04f, -1.920901627e-04f, -1.929898590e-04f, -1.938891636e-04f, -1.947880750e-04f, -1.956865917e-04f,
--1.965847121e-04f, -1.974824347e-04f, -1.983797579e-04f, -1.992766804e-04f, -2.001732004e-04f, -2.010693165e-04f, -2.019650272e-04f, -2.028603310e-04f, -2.037552263e-04f, -2.046497116e-04f,
--2.055437854e-04f, -2.064374461e-04f, -2.073306923e-04f, -2.082235225e-04f, -2.091159351e-04f, -2.100079285e-04f, -2.108995014e-04f, -2.117906521e-04f, -2.126813792e-04f, -2.135716812e-04f,
--2.144615564e-04f, -2.153510035e-04f, -2.162400209e-04f, -2.171286072e-04f, -2.180167607e-04f, -2.189044800e-04f, -2.197917635e-04f, -2.206786099e-04f, -2.215650175e-04f, -2.224509849e-04f,
--2.233365106e-04f, -2.242215930e-04f, -2.251062307e-04f, -2.259904221e-04f, -2.268741658e-04f, -2.277574603e-04f, -2.286403040e-04f, -2.295226955e-04f, -2.304046332e-04f, -2.312861157e-04f,
--2.321671415e-04f, -2.330477091e-04f, -2.339278170e-04f, -2.348074636e-04f, -2.356866476e-04f, -2.365653674e-04f, -2.374436215e-04f, -2.383214085e-04f, -2.391987268e-04f, -2.400755750e-04f,
--2.409519515e-04f, -2.418278550e-04f, -2.427032838e-04f, -2.435782366e-04f, -2.444527119e-04f, -2.453267081e-04f, -2.462002238e-04f, -2.470732575e-04f, -2.479458077e-04f, -2.488178730e-04f,
--2.496894518e-04f, -2.505605428e-04f, -2.514311443e-04f, -2.523012551e-04f, -2.531708735e-04f, -2.540399981e-04f, -2.549086274e-04f, -2.557767600e-04f, -2.566443944e-04f, -2.575115291e-04f,
--2.583781627e-04f, -2.592442937e-04f, -2.601099206e-04f, -2.609750420e-04f, -2.618396564e-04f, -2.627037623e-04f, -2.635673584e-04f, -2.644304430e-04f, -2.652930148e-04f, -2.661550723e-04f,
--2.670166140e-04f, -2.678776385e-04f, -2.687381444e-04f, -2.695981301e-04f, -2.704575943e-04f, -2.713165355e-04f, -2.721749521e-04f, -2.730328429e-04f, -2.738902062e-04f, -2.747470407e-04f,
--2.756033450e-04f, -2.764591176e-04f, -2.773143569e-04f, -2.781690617e-04f, -2.790232304e-04f, -2.798768617e-04f, -2.807299539e-04f, -2.815825059e-04f, -2.824345160e-04f, -2.832859828e-04f,
--2.841369050e-04f, -2.849872810e-04f, -2.858371095e-04f, -2.866863890e-04f, -2.875351180e-04f, -2.883832952e-04f, -2.892309192e-04f, -2.900779883e-04f, -2.909245014e-04f, -2.917704569e-04f,
--2.926158533e-04f, -2.934606894e-04f, -2.943049635e-04f, -2.951486744e-04f, -2.959918207e-04f, -2.968344008e-04f, -2.976764133e-04f, -2.985178569e-04f, -2.993587301e-04f, -3.001990315e-04f,
--3.010387598e-04f, -3.018779133e-04f, -3.027164909e-04f, -3.035544910e-04f, -3.043919122e-04f, -3.052287532e-04f, -3.060650125e-04f, -3.069006887e-04f, -3.077357804e-04f, -3.085702862e-04f,
--3.094042047e-04f, -3.102375344e-04f, -3.110702741e-04f, -3.119024222e-04f, -3.127339775e-04f, -3.135649384e-04f, -3.143953036e-04f, -3.152250716e-04f, -3.160542412e-04f, -3.168828109e-04f,
--3.177107793e-04f, -3.185381449e-04f, -3.193649065e-04f, -3.201910627e-04f, -3.210166119e-04f, -3.218415530e-04f, -3.226658844e-04f, -3.234896047e-04f, -3.243127127e-04f, -3.251352068e-04f,
--3.259570858e-04f, -3.267783483e-04f, -3.275989928e-04f, -3.284190180e-04f, -3.292384225e-04f, -3.300572049e-04f, -3.308753639e-04f, -3.316928981e-04f, -3.325098061e-04f, -3.333260865e-04f,
--3.341417380e-04f, -3.349567592e-04f, -3.357711487e-04f, -3.365849052e-04f, -3.373980273e-04f, -3.382105136e-04f, -3.390223628e-04f, -3.398335735e-04f, -3.406441443e-04f, -3.414540740e-04f,
--3.422633610e-04f, -3.430720041e-04f, -3.438800019e-04f, -3.446873531e-04f, -3.454940563e-04f, -3.463001101e-04f, -3.471055132e-04f, -3.479102643e-04f, -3.487143620e-04f, -3.495178049e-04f,
--3.503205917e-04f, -3.511227211e-04f, -3.519241917e-04f, -3.527250021e-04f, -3.535251511e-04f, -3.543246373e-04f, -3.551234593e-04f, -3.559216159e-04f, -3.567191056e-04f, -3.575159271e-04f,
--3.583120791e-04f, -3.591075604e-04f, -3.599023694e-04f, -3.606965050e-04f, -3.614899657e-04f, -3.622827503e-04f, -3.630748574e-04f, -3.638662857e-04f, -3.646570338e-04f, -3.654471006e-04f,
--3.662364845e-04f, -3.670251844e-04f, -3.678131988e-04f, -3.686005265e-04f, -3.693871662e-04f, -3.701731164e-04f, -3.709583761e-04f, -3.717429437e-04f, -3.725268180e-04f, -3.733099977e-04f,
--3.740924815e-04f, -3.748742680e-04f, -3.756553560e-04f, -3.764357442e-04f, -3.772154312e-04f, -3.779944158e-04f, -3.787726966e-04f, -3.795502724e-04f, -3.803271418e-04f, -3.811033036e-04f,
--3.818787564e-04f, -3.826534990e-04f, -3.834275300e-04f, -3.842008483e-04f, -3.849734524e-04f, -3.857453411e-04f, -3.865165131e-04f, -3.872869671e-04f, -3.880567019e-04f, -3.888257161e-04f,
--3.895940085e-04f, -3.903615778e-04f, -3.911284226e-04f, -3.918945418e-04f, -3.926599341e-04f, -3.934245981e-04f, -3.941885326e-04f, -3.949517364e-04f, -3.957142081e-04f, -3.964759464e-04f,
--3.972369502e-04f, -3.979972181e-04f, -3.987567489e-04f, -3.995155413e-04f, -4.002735941e-04f, -4.010309059e-04f, -4.017874756e-04f, -4.025433018e-04f, -4.032983833e-04f, -4.040527189e-04f,
--4.048063072e-04f, -4.055591471e-04f, -4.063112373e-04f, -4.070625765e-04f, -4.078131634e-04f, -4.085629969e-04f, -4.093120757e-04f, -4.100603985e-04f, -4.108079641e-04f, -4.115547713e-04f,
--4.123008188e-04f, -4.130461053e-04f, -4.137906296e-04f, -4.145343906e-04f, -4.152773869e-04f, -4.160196173e-04f, -4.167610805e-04f, -4.175017755e-04f, -4.182417008e-04f, -4.189808554e-04f,
--4.197192379e-04f, -4.204568471e-04f, -4.211936818e-04f, -4.219297408e-04f, -4.226650229e-04f, -4.233995269e-04f, -4.241332514e-04f, -4.248661954e-04f, -4.255983575e-04f, -4.263297366e-04f,
--4.270603315e-04f, -4.277901409e-04f, -4.285191636e-04f, -4.292473985e-04f, -4.299748443e-04f, -4.307014998e-04f, -4.314273638e-04f, -4.321524351e-04f, -4.328767125e-04f, -4.336001947e-04f,
--4.343228807e-04f, -4.350447692e-04f, -4.357658590e-04f, -4.364861489e-04f, -4.372056377e-04f, -4.379243243e-04f, -4.386422073e-04f, -4.393592857e-04f, -4.400755583e-04f, -4.407910238e-04f,
--4.415056811e-04f, -4.422195291e-04f, -4.429325664e-04f, -4.436447920e-04f, -4.443562046e-04f, -4.450668031e-04f, -4.457765863e-04f, -4.464855531e-04f, -4.471937022e-04f, -4.479010325e-04f,
--4.486075428e-04f, -4.493132319e-04f, -4.500180988e-04f, -4.507221421e-04f, -4.514253608e-04f, -4.521277537e-04f, -4.528293196e-04f, -4.535300574e-04f, -4.542299659e-04f, -4.549290440e-04f,
--4.556272904e-04f, -4.563247041e-04f, -4.570212839e-04f, -4.577170286e-04f, -4.584119372e-04f, -4.591060083e-04f, -4.597992410e-04f, -4.604916340e-04f, -4.611831863e-04f, -4.618738966e-04f,
--4.625637639e-04f, -4.632527869e-04f, -4.639409646e-04f, -4.646282958e-04f, -4.653147795e-04f, -4.660004143e-04f, -4.666851993e-04f, -4.673691333e-04f, -4.680522152e-04f, -4.687344438e-04f,
--4.694158180e-04f, -4.700963368e-04f, -4.707759989e-04f, -4.714548032e-04f, -4.721327487e-04f, -4.728098343e-04f, -4.734860587e-04f, -4.741614209e-04f, -4.748359198e-04f, -4.755095543e-04f,
--4.761823232e-04f, -4.768542255e-04f, -4.775252601e-04f, -4.781954257e-04f, -4.788647215e-04f, -4.795331461e-04f, -4.802006986e-04f, -4.808673779e-04f, -4.815331828e-04f, -4.821981123e-04f,
--4.828621652e-04f, -4.835253405e-04f, -4.841876370e-04f, -4.848490538e-04f, -4.855095897e-04f, -4.861692435e-04f, -4.868280144e-04f, -4.874859010e-04f, -4.881429025e-04f, -4.887990176e-04f,
--4.894542454e-04f, -4.901085847e-04f, -4.907620345e-04f, -4.914145936e-04f, -4.920662611e-04f, -4.927170359e-04f, -4.933669168e-04f, -4.940159029e-04f, -4.946639930e-04f, -4.953111861e-04f,
--4.959574812e-04f, -4.966028771e-04f, -4.972473729e-04f, -4.978909674e-04f, -4.985336596e-04f, -4.991754485e-04f, -4.998163330e-04f, -5.004563121e-04f, -5.010953846e-04f, -5.017335496e-04f,
--5.023708060e-04f, -5.030071528e-04f, -5.036425890e-04f, -5.042771134e-04f, -5.049107251e-04f, -5.055434230e-04f, -5.061752061e-04f, -5.068060733e-04f, -5.074360236e-04f, -5.080650561e-04f,
--5.086931696e-04f, -5.093203631e-04f, -5.099466357e-04f, -5.105719862e-04f, -5.111964137e-04f, -5.118199171e-04f, -5.124424955e-04f, -5.130641477e-04f, -5.136848729e-04f, -5.143046700e-04f,
--5.149235379e-04f, -5.155414757e-04f, -5.161584823e-04f, -5.167745568e-04f, -5.173896981e-04f, -5.180039052e-04f, -5.186171772e-04f, -5.192295130e-04f, -5.198409117e-04f, -5.204513722e-04f,
--5.210608936e-04f, -5.216694748e-04f, -5.222771148e-04f, -5.228838128e-04f, -5.234895676e-04f, -5.240943783e-04f, -5.246982439e-04f, -5.253011635e-04f, -5.259031360e-04f, -5.265041605e-04f,
--5.271042360e-04f, -5.277033615e-04f, -5.283015360e-04f, -5.288987586e-04f, -5.294950283e-04f, -5.300903441e-04f, -5.306847051e-04f, -5.312781103e-04f, -5.318705587e-04f, -5.324620494e-04f,
--5.330525814e-04f, -5.336421538e-04f, -5.342307655e-04f, -5.348184157e-04f, -5.354051033e-04f, -5.359908275e-04f, -5.365755873e-04f, -5.371593817e-04f, -5.377422098e-04f, -5.383240706e-04f,
--5.389049632e-04f, -5.394848867e-04f, -5.400638401e-04f, -5.406418224e-04f, -5.412188328e-04f, -5.417948704e-04f, -5.423699340e-04f, -5.429440230e-04f, -5.435171362e-04f, -5.440892728e-04f,
--5.446604319e-04f, -5.452306125e-04f, -5.457998137e-04f, -5.463680346e-04f, -5.469352743e-04f, -5.475015319e-04f, -5.480668063e-04f, -5.486310968e-04f, -5.491944024e-04f, -5.497567223e-04f,
--5.503180554e-04f, -5.508784009e-04f, -5.514377579e-04f, -5.519961254e-04f, -5.525535027e-04f, -5.531098887e-04f, -5.536652826e-04f, -5.542196835e-04f, -5.547730904e-04f, -5.553255026e-04f,
--5.558769191e-04f, -5.564273390e-04f, -5.569767614e-04f, -5.575251855e-04f, -5.580726103e-04f, -5.586190351e-04f, -5.591644588e-04f, -5.597088806e-04f, -5.602522997e-04f, -5.607947152e-04f,
--5.613361261e-04f, -5.618765317e-04f, -5.624159311e-04f, -5.629543233e-04f, -5.634917076e-04f, -5.640280830e-04f, -5.645634487e-04f, -5.650978039e-04f, -5.656311476e-04f, -5.661634791e-04f,
--5.666947974e-04f, -5.672251017e-04f, -5.677543913e-04f, -5.682826651e-04f, -5.688099224e-04f, -5.693361623e-04f, -5.698613840e-04f, -5.703855866e-04f, -5.709087694e-04f, -5.714309313e-04f,
--5.719520717e-04f, -5.724721897e-04f, -5.729912845e-04f, -5.735093551e-04f, -5.740264009e-04f, -5.745424209e-04f, -5.750574144e-04f, -5.755713804e-04f, -5.760843183e-04f, -5.765962271e-04f,
--5.771071061e-04f, -5.776169544e-04f, -5.781257713e-04f, -5.786335558e-04f, -5.791403073e-04f, -5.796460248e-04f, -5.801507076e-04f, -5.806543549e-04f, -5.811569659e-04f, -5.816585397e-04f,
--5.821590756e-04f, -5.826585728e-04f, -5.831570305e-04f, -5.836544478e-04f, -5.841508240e-04f, -5.846461584e-04f, -5.851404500e-04f, -5.856336981e-04f, -5.861259020e-04f, -5.866170609e-04f,
--5.871071739e-04f, -5.875962403e-04f, -5.880842593e-04f, -5.885712301e-04f, -5.890571521e-04f, -5.895420243e-04f, -5.900258460e-04f, -5.905086165e-04f, -5.909903349e-04f, -5.914710006e-04f,
--5.919506128e-04f, -5.924291706e-04f, -5.929066734e-04f, -5.933831204e-04f, -5.938585107e-04f, -5.943328438e-04f, -5.948061188e-04f, -5.952783349e-04f, -5.957494915e-04f, -5.962195878e-04f,
--5.966886229e-04f, -5.971565963e-04f, -5.976235071e-04f, -5.980893547e-04f, -5.985541382e-04f, -5.990178569e-04f, -5.994805102e-04f, -5.999420972e-04f, -6.004026173e-04f, -6.008620697e-04f,
--6.013204537e-04f, -6.017777685e-04f, -6.022340136e-04f, -6.026891880e-04f, -6.031432912e-04f, -6.035963223e-04f, -6.040482808e-04f, -6.044991658e-04f, -6.049489767e-04f, -6.053977127e-04f,
--6.058453732e-04f, -6.062919574e-04f, -6.067374646e-04f, -6.071818942e-04f, -6.076252455e-04f, -6.080675177e-04f, -6.085087101e-04f, -6.089488221e-04f, -6.093878529e-04f, -6.098258020e-04f,
--6.102626685e-04f, -6.106984518e-04f, -6.111331513e-04f, -6.115667661e-04f, -6.119992958e-04f, -6.124307395e-04f, -6.128610967e-04f, -6.132903665e-04f, -6.137185485e-04f, -6.141456418e-04f,
--6.145716458e-04f, -6.149965600e-04f, -6.154203835e-04f, -6.158431157e-04f, -6.162647560e-04f, -6.166853037e-04f, -6.171047582e-04f, -6.175231188e-04f, -6.179403848e-04f, -6.183565556e-04f,
--6.187716306e-04f, -6.191856091e-04f, -6.195984904e-04f, -6.200102740e-04f, -6.204209591e-04f, -6.208305452e-04f, -6.212390315e-04f, -6.216464176e-04f, -6.220527026e-04f, -6.224578861e-04f,
--6.228619674e-04f, -6.232649457e-04f, -6.236668206e-04f, -6.240675914e-04f, -6.244672575e-04f, -6.248658182e-04f, -6.252632730e-04f, -6.256596212e-04f, -6.260548622e-04f, -6.264489954e-04f,
--6.268420202e-04f, -6.272339359e-04f, -6.276247420e-04f, -6.280144379e-04f, -6.284030230e-04f, -6.287904966e-04f, -6.291768583e-04f, -6.295621072e-04f, -6.299462430e-04f, -6.303292649e-04f,
--6.307111725e-04f, -6.310919650e-04f, -6.314716420e-04f, -6.318502028e-04f, -6.322276469e-04f, -6.326039737e-04f, -6.329791825e-04f, -6.333532729e-04f, -6.337262442e-04f, -6.340980959e-04f,
--6.344688274e-04f, -6.348384381e-04f, -6.352069275e-04f, -6.355742951e-04f, -6.359405401e-04f, -6.363056622e-04f, -6.366696606e-04f, -6.370325350e-04f, -6.373942846e-04f, -6.377549090e-04f,
--6.381144076e-04f, -6.384727799e-04f, -6.388300253e-04f, -6.391861433e-04f, -6.395411333e-04f, -6.398949947e-04f, -6.402477272e-04f, -6.405993300e-04f, -6.409498027e-04f, -6.412991448e-04f,
--6.416473556e-04f, -6.419944348e-04f, -6.423403817e-04f, -6.426851959e-04f, -6.430288767e-04f, -6.433714238e-04f, -6.437128365e-04f, -6.440531143e-04f, -6.443922569e-04f, -6.447302635e-04f,
--6.450671337e-04f, -6.454028671e-04f, -6.457374631e-04f, -6.460709211e-04f, -6.464032408e-04f, -6.467344215e-04f, -6.470644628e-04f, -6.473933642e-04f, -6.477211253e-04f, -6.480477454e-04f,
--6.483732242e-04f, -6.486975610e-04f, -6.490207556e-04f, -6.493428072e-04f, -6.496637156e-04f, -6.499834801e-04f, -6.503021004e-04f, -6.506195759e-04f, -6.509359062e-04f, -6.512510907e-04f,
--6.515651291e-04f, -6.518780208e-04f, -6.521897654e-04f, -6.525003624e-04f, -6.528098114e-04f, -6.531181119e-04f, -6.534252634e-04f, -6.537312655e-04f, -6.540361178e-04f, -6.543398197e-04f,
--6.546423708e-04f, -6.549437707e-04f, -6.552440189e-04f, -6.555431150e-04f, -6.558410586e-04f, -6.561378492e-04f, -6.564334863e-04f, -6.567279695e-04f, -6.570212985e-04f, -6.573134727e-04f,
--6.576044917e-04f, -6.578943551e-04f, -6.581830625e-04f, -6.584706135e-04f, -6.587570076e-04f, -6.590422444e-04f, -6.593263235e-04f, -6.596092444e-04f, -6.598910068e-04f, -6.601716103e-04f,
--6.604510544e-04f, -6.607293387e-04f, -6.610064629e-04f, -6.612824265e-04f, -6.615572291e-04f, -6.618308703e-04f, -6.621033497e-04f, -6.623746670e-04f, -6.626448216e-04f, -6.629138134e-04f,
--6.631816417e-04f, -6.634483064e-04f, -6.637138069e-04f, -6.639781429e-04f, -6.642413140e-04f, -6.645033199e-04f, -6.647641601e-04f, -6.650238342e-04f, -6.652823420e-04f, -6.655396830e-04f,
--6.657958569e-04f, -6.660508633e-04f, -6.663047018e-04f, -6.665573721e-04f, -6.668088738e-04f, -6.670592065e-04f, -6.673083699e-04f, -6.675563637e-04f, -6.678031874e-04f, -6.680488408e-04f,
--6.682933235e-04f, -6.685366351e-04f, -6.687787753e-04f, -6.690197437e-04f, -6.692595401e-04f, -6.694981640e-04f, -6.697356151e-04f, -6.699718932e-04f, -6.702069978e-04f, -6.704409287e-04f,
--6.706736854e-04f, -6.709052678e-04f, -6.711356754e-04f, -6.713649079e-04f, -6.715929650e-04f, -6.718198465e-04f, -6.720455519e-04f, -6.722700810e-04f, -6.724934335e-04f, -6.727156090e-04f,
--6.729366072e-04f, -6.731564278e-04f, -6.733750706e-04f, -6.735925352e-04f, -6.738088214e-04f, -6.740239288e-04f, -6.742378571e-04f, -6.744506060e-04f, -6.746621753e-04f, -6.748725646e-04f,
--6.750817737e-04f, -6.752898024e-04f, -6.754966502e-04f, -6.757023169e-04f, -6.759068023e-04f, -6.761101060e-04f, -6.763122278e-04f, -6.765131675e-04f, -6.767129247e-04f, -6.769114992e-04f,
--6.771088907e-04f, -6.773050989e-04f, -6.775001236e-04f, -6.776939646e-04f, -6.778866215e-04f, -6.780780941e-04f, -6.782683822e-04f, -6.784574855e-04f, -6.786454037e-04f, -6.788321367e-04f,
--6.790176841e-04f, -6.792020457e-04f, -6.793852213e-04f, -6.795672106e-04f, -6.797480134e-04f, -6.799276295e-04f, -6.801060586e-04f, -6.802833005e-04f, -6.804593550e-04f, -6.806342218e-04f,
--6.808079007e-04f, -6.809803915e-04f, -6.811516940e-04f, -6.813218079e-04f, -6.814907331e-04f, -6.816584693e-04f, -6.818250162e-04f, -6.819903738e-04f, -6.821545418e-04f, -6.823175199e-04f,
--6.824793080e-04f, -6.826399059e-04f, -6.827993134e-04f, -6.829575302e-04f, -6.831145562e-04f, -6.832703912e-04f, -6.834250350e-04f, -6.835784873e-04f, -6.837307481e-04f, -6.838818171e-04f,
--6.840316942e-04f, -6.841803791e-04f, -6.843278717e-04f, -6.844741718e-04f, -6.846192792e-04f, -6.847631938e-04f, -6.849059153e-04f, -6.850474437e-04f, -6.851877787e-04f, -6.853269202e-04f,
--6.854648680e-04f, -6.856016219e-04f, -6.857371819e-04f, -6.858715477e-04f, -6.860047192e-04f, -6.861366962e-04f, -6.862674786e-04f, -6.863970662e-04f, -6.865254589e-04f, -6.866526566e-04f,
--6.867786590e-04f, -6.869034661e-04f, -6.870270777e-04f, -6.871494938e-04f, -6.872707140e-04f, -6.873907384e-04f, -6.875095668e-04f, -6.876271990e-04f, -6.877436349e-04f, -6.878588745e-04f,
--6.879729176e-04f, -6.880857640e-04f, -6.881974137e-04f, -6.883078665e-04f, -6.884171223e-04f, -6.885251811e-04f, -6.886320426e-04f, -6.887377069e-04f, -6.888421737e-04f, -6.889454430e-04f,
--6.890475148e-04f, -6.891483888e-04f, -6.892480649e-04f, -6.893465432e-04f, -6.894438235e-04f, -6.895399057e-04f, -6.896347898e-04f, -6.897284755e-04f, -6.898209629e-04f, -6.899122519e-04f,
--6.900023424e-04f, -6.900912343e-04f, -6.901789276e-04f, -6.902654221e-04f, -6.903507177e-04f, -6.904348146e-04f, -6.905177124e-04f, -6.905994113e-04f, -6.906799111e-04f, -6.907592117e-04f,
--6.908373132e-04f, -6.909142154e-04f, -6.909899183e-04f, -6.910644218e-04f, -6.911377259e-04f, -6.912098306e-04f, -6.912807358e-04f, -6.913504414e-04f, -6.914189474e-04f, -6.914862538e-04f,
--6.915523605e-04f, -6.916172674e-04f, -6.916809747e-04f, -6.917434822e-04f, -6.918047898e-04f, -6.918648976e-04f, -6.919238056e-04f, -6.919815137e-04f, -6.920380219e-04f, -6.920933301e-04f,
--6.921474384e-04f, -6.922003467e-04f, -6.922520551e-04f, -6.923025635e-04f, -6.923518719e-04f, -6.923999802e-04f, -6.924468886e-04f, -6.924925970e-04f, -6.925371053e-04f, -6.925804137e-04f,
--6.926225220e-04f, -6.926634303e-04f, -6.927031386e-04f, -6.927416470e-04f, -6.927789553e-04f, -6.928150637e-04f, -6.928499722e-04f, -6.928836807e-04f, -6.929161893e-04f, -6.929474981e-04f,
--6.929776069e-04f, -6.930065159e-04f, -6.930342252e-04f, -6.930607346e-04f, -6.930860443e-04f, -6.931101542e-04f, -6.931330645e-04f, -6.931547752e-04f, -6.931752862e-04f, -6.931945977e-04f,
--6.932127097e-04f, -6.932296222e-04f, -6.932453352e-04f, -6.932598490e-04f, -6.932731634e-04f, -6.932852785e-04f, -6.932961944e-04f, -6.933059112e-04f, -6.933144290e-04f, -6.933217476e-04f,
--6.933278674e-04f, -6.933327882e-04f, -6.933365103e-04f, -6.933390335e-04f, -6.933403581e-04f, -6.933404841e-04f, -6.933394116e-04f, -6.933371407e-04f, -6.933336714e-04f, -6.933290038e-04f,
--6.933231380e-04f, -6.933160741e-04f, -6.933078122e-04f, -6.932983524e-04f, -6.932876948e-04f, -6.932758394e-04f, -6.932627864e-04f, -6.932485358e-04f, -6.932330879e-04f, -6.932164426e-04f,
--6.931986001e-04f, -6.931795605e-04f, -6.931593239e-04f, -6.931378904e-04f, -6.931152601e-04f, -6.930914331e-04f, -6.930664097e-04f, -6.930401898e-04f, -6.930127736e-04f, -6.929841613e-04f,
--6.929543529e-04f, -6.929233486e-04f, -6.928911485e-04f, -6.928577528e-04f, -6.928231616e-04f, -6.927873750e-04f, -6.927503932e-04f, -6.927122162e-04f, -6.926728444e-04f, -6.926322777e-04f,
--6.925905163e-04f, -6.925475605e-04f, -6.925034103e-04f, -6.924580659e-04f, -6.924115275e-04f, -6.923637951e-04f, -6.923148691e-04f, -6.922647495e-04f, -6.922134364e-04f, -6.921609302e-04f,
--6.921072309e-04f, -6.920523386e-04f, -6.919962537e-04f, -6.919389762e-04f, -6.918805064e-04f, -6.918208443e-04f, -6.917599902e-04f, -6.916979443e-04f, -6.916347068e-04f, -6.915702778e-04f,
--6.915046575e-04f, -6.914378461e-04f, -6.913698439e-04f, -6.913006510e-04f, -6.912302675e-04f, -6.911586938e-04f, -6.910859300e-04f, -6.910119763e-04f, -6.909368329e-04f, -6.908605000e-04f,
--6.907829778e-04f, -6.907042666e-04f, -6.906243665e-04f, -6.905432779e-04f, -6.904610008e-04f, -6.903775354e-04f, -6.902928822e-04f, -6.902070412e-04f, -6.901200126e-04f, -6.900317968e-04f,
--6.899423938e-04f, -6.898518041e-04f, -6.897600278e-04f, -6.896670650e-04f, -6.895729162e-04f, -6.894775815e-04f, -6.893810611e-04f, -6.892833553e-04f, -6.891844644e-04f, -6.890843885e-04f,
--6.889831280e-04f, -6.888806831e-04f, -6.887770541e-04f, -6.886722411e-04f, -6.885662445e-04f, -6.884590645e-04f, -6.883507014e-04f, -6.882411555e-04f, -6.881304269e-04f, -6.880185161e-04f,
--6.879054232e-04f, -6.877911485e-04f, -6.876756923e-04f, -6.875590549e-04f, -6.874412366e-04f, -6.873222376e-04f, -6.872020582e-04f, -6.870806987e-04f, -6.869581594e-04f, -6.868344405e-04f,
--6.867095425e-04f, -6.865834655e-04f, -6.864562098e-04f, -6.863277758e-04f, -6.861981637e-04f, -6.860673739e-04f, -6.859354067e-04f, -6.858022623e-04f, -6.856679410e-04f, -6.855324433e-04f,
--6.853957693e-04f, -6.852579194e-04f, -6.851188939e-04f, -6.849786931e-04f, -6.848373174e-04f, -6.846947671e-04f, -6.845510424e-04f, -6.844061438e-04f, -6.842600715e-04f, -6.841128258e-04f,
--6.839644072e-04f, -6.838148159e-04f, -6.836640522e-04f, -6.835121166e-04f, -6.833590093e-04f, -6.832047307e-04f, -6.830492811e-04f, -6.828926609e-04f, -6.827348704e-04f, -6.825759100e-04f,
--6.824157800e-04f, -6.822544807e-04f, -6.820920126e-04f, -6.819283760e-04f, -6.817635712e-04f, -6.815975986e-04f, -6.814304585e-04f, -6.812621514e-04f, -6.810926776e-04f, -6.809220375e-04f,
--6.807502314e-04f, -6.805772597e-04f, -6.804031228e-04f, -6.802278210e-04f, -6.800513548e-04f, -6.798737245e-04f, -6.796949305e-04f, -6.795149732e-04f, -6.793338529e-04f, -6.791515702e-04f,
--6.789681252e-04f, -6.787835185e-04f, -6.785977505e-04f, -6.784108215e-04f, -6.782227319e-04f, -6.780334822e-04f, -6.778430727e-04f, -6.776515038e-04f, -6.774587760e-04f, -6.772648897e-04f,
--6.770698452e-04f, -6.768736430e-04f, -6.766762835e-04f, -6.764777671e-04f, -6.762780942e-04f, -6.760772653e-04f, -6.758752808e-04f, -6.756721410e-04f, -6.754678465e-04f, -6.752623976e-04f,
--6.750557948e-04f, -6.748480385e-04f, -6.746391292e-04f, -6.744290672e-04f, -6.742178531e-04f, -6.740054873e-04f, -6.737919701e-04f, -6.735773021e-04f, -6.733614836e-04f, -6.731445153e-04f,
--6.729263974e-04f, -6.727071304e-04f, -6.724867149e-04f, -6.722651512e-04f, -6.720424398e-04f, -6.718185812e-04f, -6.715935758e-04f, -6.713674241e-04f, -6.711401265e-04f, -6.709116836e-04f,
--6.706820958e-04f, -6.704513636e-04f, -6.702194874e-04f, -6.699864677e-04f, -6.697523050e-04f, -6.695169998e-04f, -6.692805525e-04f, -6.690429637e-04f, -6.688042338e-04f, -6.685643633e-04f,
--6.683233527e-04f, -6.680812025e-04f, -6.678379131e-04f, -6.675934852e-04f, -6.673479191e-04f, -6.671012154e-04f, -6.668533745e-04f, -6.666043971e-04f, -6.663542835e-04f, -6.661030343e-04f,
--6.658506499e-04f, -6.655971310e-04f, -6.653424780e-04f, -6.650866915e-04f, -6.648297718e-04f, -6.645717197e-04f, -6.643125355e-04f, -6.640522198e-04f, -6.637907732e-04f, -6.635281961e-04f,
--6.632644890e-04f, -6.629996526e-04f, -6.627336874e-04f, -6.624665938e-04f, -6.621983724e-04f, -6.619290237e-04f, -6.616585484e-04f, -6.613869468e-04f, -6.611142197e-04f, -6.608403674e-04f,
--6.605653906e-04f, -6.602892898e-04f, -6.600120656e-04f, -6.597337185e-04f, -6.594542491e-04f, -6.591736578e-04f, -6.588919454e-04f, -6.586091123e-04f, -6.583251591e-04f, -6.580400863e-04f,
--6.577538946e-04f, -6.574665845e-04f, -6.571781565e-04f, -6.568886113e-04f, -6.565979494e-04f, -6.563061714e-04f, -6.560132779e-04f, -6.557192694e-04f, -6.554241465e-04f, -6.551279098e-04f,
--6.548305599e-04f, -6.545320974e-04f, -6.542325229e-04f, -6.539318369e-04f, -6.536300400e-04f, -6.533271329e-04f, -6.530231162e-04f, -6.527179904e-04f, -6.524117561e-04f, -6.521044139e-04f,
--6.517959645e-04f, -6.514864084e-04f, -6.511757463e-04f, -6.508639788e-04f, -6.505511064e-04f, -6.502371298e-04f, -6.499220496e-04f, -6.496058664e-04f, -6.492885808e-04f, -6.489701935e-04f,
--6.486507051e-04f, -6.483301162e-04f, -6.480084274e-04f, -6.476856394e-04f, -6.473617527e-04f, -6.470367681e-04f, -6.467106861e-04f, -6.463835073e-04f, -6.460552326e-04f, -6.457258623e-04f,
--6.453953973e-04f, -6.450638381e-04f, -6.447311854e-04f, -6.443974398e-04f, -6.440626020e-04f, -6.437266727e-04f, -6.433896524e-04f, -6.430515418e-04f, -6.427123417e-04f, -6.423720526e-04f,
--6.420306752e-04f, -6.416882102e-04f, -6.413446582e-04f, -6.410000199e-04f, -6.406542959e-04f, -6.403074870e-04f, -6.399595938e-04f, -6.396106170e-04f, -6.392605572e-04f, -6.389094151e-04f,
--6.385571915e-04f, -6.382038869e-04f, -6.378495021e-04f, -6.374940377e-04f, -6.371374944e-04f, -6.367798730e-04f, -6.364211741e-04f, -6.360613983e-04f, -6.357005465e-04f, -6.353386192e-04f,
--6.349756172e-04f, -6.346115411e-04f, -6.342463918e-04f, -6.338801698e-04f, -6.335128759e-04f, -6.331445108e-04f, -6.327750751e-04f, -6.324045697e-04f, -6.320329951e-04f, -6.316603522e-04f,
--6.312866416e-04f, -6.309118640e-04f, -6.305360202e-04f, -6.301591109e-04f, -6.297811368e-04f, -6.294020986e-04f, -6.290219971e-04f, -6.286408330e-04f, -6.282586069e-04f, -6.278753197e-04f,
--6.274909721e-04f, -6.271055647e-04f, -6.267190984e-04f, -6.263315739e-04f, -6.259429919e-04f, -6.255533531e-04f, -6.251626583e-04f, -6.247709083e-04f, -6.243781037e-04f, -6.239842454e-04f,
--6.235893341e-04f, -6.231933705e-04f, -6.227963553e-04f, -6.223982895e-04f, -6.219991736e-04f, -6.215990084e-04f, -6.211977948e-04f, -6.207955335e-04f, -6.203922252e-04f, -6.199878707e-04f,
--6.195824708e-04f, -6.191760262e-04f, -6.187685378e-04f, -6.183600062e-04f, -6.179504323e-04f, -6.175398168e-04f, -6.171281605e-04f, -6.167154642e-04f, -6.163017287e-04f, -6.158869548e-04f,
--6.154711432e-04f, -6.150542947e-04f, -6.146364102e-04f, -6.142174903e-04f, -6.137975359e-04f, -6.133765479e-04f, -6.129545269e-04f, -6.125314738e-04f, -6.121073894e-04f, -6.116822744e-04f,
--6.112561298e-04f, -6.108289562e-04f, -6.104007545e-04f, -6.099715256e-04f, -6.095412701e-04f, -6.091099890e-04f, -6.086776829e-04f, -6.082443529e-04f, -6.078099996e-04f, -6.073746238e-04f,
--6.069382265e-04f, -6.065008084e-04f, -6.060623703e-04f, -6.056229131e-04f, -6.051824376e-04f, -6.047409446e-04f, -6.042984350e-04f, -6.038549095e-04f, -6.034103690e-04f, -6.029648144e-04f,
--6.025182465e-04f, -6.020706661e-04f, -6.016220741e-04f, -6.011724713e-04f, -6.007218585e-04f, -6.002702366e-04f, -5.998176064e-04f, -5.993639689e-04f, -5.989093247e-04f, -5.984536749e-04f,
--5.979970202e-04f, -5.975393615e-04f, -5.970806996e-04f, -5.966210355e-04f, -5.961603699e-04f, -5.956987038e-04f, -5.952360379e-04f, -5.947723732e-04f, -5.943077106e-04f, -5.938420508e-04f,
--5.933753948e-04f, -5.929077434e-04f, -5.924390976e-04f, -5.919694581e-04f, -5.914988259e-04f, -5.910272018e-04f, -5.905545868e-04f, -5.900809816e-04f, -5.896063872e-04f, -5.891308045e-04f,
--5.886542344e-04f, -5.881766777e-04f, -5.876981353e-04f, -5.872186082e-04f, -5.867380972e-04f, -5.862566032e-04f, -5.857741271e-04f, -5.852906698e-04f, -5.848062322e-04f, -5.843208152e-04f,
--5.838344197e-04f, -5.833470467e-04f, -5.828586970e-04f, -5.823693715e-04f, -5.818790711e-04f, -5.813877968e-04f, -5.808955495e-04f, -5.804023300e-04f, -5.799081393e-04f, -5.794129784e-04f,
--5.789168480e-04f, -5.784197493e-04f, -5.779216830e-04f, -5.774226501e-04f, -5.769226515e-04f, -5.764216882e-04f, -5.759197610e-04f, -5.754168710e-04f, -5.749130190e-04f, -5.744082059e-04f,
--5.739024328e-04f, -5.733957006e-04f, -5.728880101e-04f, -5.723793624e-04f, -5.718697583e-04f, -5.713591988e-04f, -5.708476849e-04f, -5.703352175e-04f, -5.698217976e-04f, -5.693074260e-04f,
--5.687921038e-04f, -5.682758319e-04f, -5.677586113e-04f, -5.672404429e-04f, -5.667213276e-04f, -5.662012665e-04f, -5.656802605e-04f, -5.651583105e-04f, -5.646354176e-04f, -5.641115826e-04f,
--5.635868066e-04f, -5.630610905e-04f, -5.625344353e-04f, -5.620068420e-04f, -5.614783115e-04f, -5.609488448e-04f, -5.604184429e-04f, -5.598871068e-04f, -5.593548374e-04f, -5.588216357e-04f,
--5.582875027e-04f, -5.577524395e-04f, -5.572164469e-04f, -5.566795259e-04f, -5.561416776e-04f, -5.556029030e-04f, -5.550632030e-04f, -5.545225786e-04f, -5.539810309e-04f, -5.534385607e-04f,
--5.528951692e-04f, -5.523508573e-04f, -5.518056260e-04f, -5.512594764e-04f, -5.507124093e-04f, -5.501644259e-04f, -5.496155272e-04f, -5.490657140e-04f, -5.485149876e-04f, -5.479633487e-04f,
--5.474107986e-04f, -5.468573382e-04f, -5.463029685e-04f, -5.457476905e-04f, -5.451915052e-04f, -5.446344138e-04f, -5.440764171e-04f, -5.435175162e-04f, -5.429577122e-04f, -5.423970060e-04f,
--5.418353988e-04f, -5.412728914e-04f, -5.407094850e-04f, -5.401451806e-04f, -5.395799792e-04f, -5.390138819e-04f, -5.384468897e-04f, -5.378790036e-04f, -5.373102246e-04f, -5.367405539e-04f,
--5.361699925e-04f, -5.355985413e-04f, -5.350262015e-04f, -5.344529741e-04f, -5.338788601e-04f, -5.333038607e-04f, -5.327279767e-04f, -5.321512094e-04f, -5.315735597e-04f, -5.309950288e-04f,
--5.304156176e-04f, -5.298353272e-04f, -5.292541587e-04f, -5.286721132e-04f, -5.280891917e-04f, -5.275053952e-04f, -5.269207249e-04f, -5.263351819e-04f, -5.257487670e-04f, -5.251614816e-04f,
--5.245733266e-04f, -5.239843030e-04f, -5.233944121e-04f, -5.228036547e-04f, -5.222120322e-04f, -5.216195454e-04f, -5.210261955e-04f, -5.204319835e-04f, -5.198369107e-04f, -5.192409779e-04f,
--5.186441864e-04f, -5.180465372e-04f, -5.174480314e-04f, -5.168486700e-04f, -5.162484543e-04f, -5.156473852e-04f, -5.150454639e-04f, -5.144426915e-04f, -5.138390690e-04f, -5.132345976e-04f,
--5.126292784e-04f, -5.120231124e-04f, -5.114161008e-04f, -5.108082447e-04f, -5.101995451e-04f, -5.095900033e-04f, -5.089796202e-04f, -5.083683970e-04f, -5.077563348e-04f, -5.071434348e-04f,
--5.065296980e-04f, -5.059151256e-04f, -5.052997187e-04f, -5.046834783e-04f, -5.040664057e-04f, -5.034485018e-04f, -5.028297680e-04f, -5.022102052e-04f, -5.015898147e-04f, -5.009685974e-04f,
--5.003465546e-04f, -4.997236875e-04f, -4.990999970e-04f, -4.984754844e-04f, -4.978501508e-04f, -4.972239973e-04f, -4.965970250e-04f, -4.959692352e-04f, -4.953406288e-04f, -4.947112072e-04f,
--4.940809713e-04f, -4.934499225e-04f, -4.928180617e-04f, -4.921853901e-04f, -4.915519090e-04f, -4.909176194e-04f, -4.902825225e-04f, -4.896466194e-04f, -4.890099113e-04f, -4.883723994e-04f,
--4.877340847e-04f, -4.870949685e-04f, -4.864550520e-04f, -4.858143362e-04f, -4.851728223e-04f, -4.845305115e-04f, -4.838874050e-04f, -4.832435039e-04f, -4.825988094e-04f, -4.819533226e-04f,
--4.813070447e-04f, -4.806599769e-04f, -4.800121204e-04f, -4.793634763e-04f, -4.787140459e-04f, -4.780638301e-04f, -4.774128304e-04f, -4.767610477e-04f, -4.761084834e-04f, -4.754551386e-04f,
--4.748010144e-04f, -4.741461120e-04f, -4.734904327e-04f, -4.728339776e-04f, -4.721767479e-04f, -4.715187448e-04f, -4.708599695e-04f, -4.702004231e-04f, -4.695401069e-04f, -4.688790220e-04f,
--4.682171696e-04f, -4.675545510e-04f, -4.668911673e-04f, -4.662270198e-04f, -4.655621095e-04f, -4.648964378e-04f, -4.642300058e-04f, -4.635628147e-04f, -4.628948658e-04f, -4.622261602e-04f,
--4.615566991e-04f, -4.608864837e-04f, -4.602155154e-04f, -4.595437951e-04f, -4.588713243e-04f, -4.581981040e-04f, -4.575241355e-04f, -4.568494201e-04f, -4.561739588e-04f, -4.554977530e-04f,
--4.548208039e-04f, -4.541431126e-04f, -4.534646804e-04f, -4.527855086e-04f, -4.521055982e-04f, -4.514249507e-04f, -4.507435671e-04f, -4.500614488e-04f, -4.493785969e-04f, -4.486950126e-04f,
--4.480106973e-04f, -4.473256521e-04f, -4.466398782e-04f, -4.459533770e-04f, -4.452661496e-04f, -4.445781972e-04f, -4.438895212e-04f, -4.432001227e-04f, -4.425100029e-04f, -4.418191632e-04f,
--4.411276048e-04f, -4.404353288e-04f, -4.397423366e-04f, -4.390486294e-04f, -4.383542085e-04f, -4.376590750e-04f, -4.369632302e-04f, -4.362666755e-04f, -4.355694119e-04f, -4.348714409e-04f,
--4.341727636e-04f, -4.334733812e-04f, -4.327732952e-04f, -4.320725066e-04f, -4.313710168e-04f, -4.306688270e-04f, -4.299659385e-04f, -4.292623525e-04f, -4.285580703e-04f, -4.278530932e-04f,
--4.271474224e-04f, -4.264410592e-04f, -4.257340049e-04f, -4.250262607e-04f, -4.243178279e-04f, -4.236087077e-04f, -4.228989015e-04f, -4.221884105e-04f, -4.214772360e-04f, -4.207653793e-04f,
--4.200528415e-04f, -4.193396241e-04f, -4.186257283e-04f, -4.179111553e-04f, -4.171959065e-04f, -4.164799831e-04f, -4.157633864e-04f, -4.150461176e-04f, -4.143281782e-04f, -4.136095693e-04f,
--4.128902923e-04f, -4.121703483e-04f, -4.114497389e-04f, -4.107284651e-04f, -4.100065283e-04f, -4.092839298e-04f, -4.085606708e-04f, -4.078367528e-04f, -4.071121769e-04f, -4.063869445e-04f,
--4.056610569e-04f, -4.049345153e-04f, -4.042073210e-04f, -4.034794755e-04f, -4.027509798e-04f, -4.020218355e-04f, -4.012920437e-04f, -4.005616058e-04f, -3.998305230e-04f, -3.990987968e-04f,
--3.983664283e-04f, -3.976334189e-04f, -3.968997699e-04f, -3.961654826e-04f, -3.954305584e-04f, -3.946949985e-04f, -3.939588042e-04f, -3.932219769e-04f, -3.924845179e-04f, -3.917464284e-04f,
--3.910077099e-04f, -3.902683637e-04f, -3.895283909e-04f, -3.887877931e-04f, -3.880465714e-04f, -3.873047272e-04f, -3.865622619e-04f, -3.858191767e-04f, -3.850754731e-04f, -3.843311522e-04f,
--3.835862155e-04f, -3.828406642e-04f, -3.820944998e-04f, -3.813477234e-04f, -3.806003365e-04f, -3.798523405e-04f, -3.791037365e-04f, -3.783545260e-04f, -3.776047103e-04f, -3.768542907e-04f,
--3.761032685e-04f, -3.753516452e-04f, -3.745994220e-04f, -3.738466003e-04f, -3.730931814e-04f, -3.723391667e-04f, -3.715845575e-04f, -3.708293551e-04f, -3.700735609e-04f, -3.693171763e-04f,
--3.685602025e-04f, -3.678026410e-04f, -3.670444931e-04f, -3.662857600e-04f, -3.655264433e-04f, -3.647665442e-04f, -3.640060641e-04f, -3.632450043e-04f, -3.624833661e-04f, -3.617211511e-04f,
--3.609583604e-04f, -3.601949955e-04f, -3.594310577e-04f, -3.586665483e-04f, -3.579014688e-04f, -3.571358205e-04f, -3.563696047e-04f, -3.556028229e-04f, -3.548354763e-04f, -3.540675663e-04f,
--3.532990944e-04f, -3.525300618e-04f, -3.517604699e-04f, -3.509903201e-04f, -3.502196139e-04f, -3.494483524e-04f, -3.486765372e-04f, -3.479041695e-04f, -3.471312508e-04f, -3.463577824e-04f,
--3.455837656e-04f, -3.448092020e-04f, -3.440340928e-04f, -3.432584394e-04f, -3.424822432e-04f, -3.417055056e-04f, -3.409282279e-04f, -3.401504116e-04f, -3.393720580e-04f, -3.385931684e-04f,
--3.378137444e-04f, -3.370337871e-04f, -3.362532982e-04f, -3.354722788e-04f, -3.346907304e-04f, -3.339086545e-04f, -3.331260523e-04f, -3.323429253e-04f, -3.315592748e-04f, -3.307751023e-04f,
--3.299904091e-04f, -3.292051966e-04f, -3.284194663e-04f, -3.276332195e-04f, -3.268464575e-04f, -3.260591819e-04f, -3.252713939e-04f, -3.244830950e-04f, -3.236942866e-04f, -3.229049701e-04f,
--3.221151469e-04f, -3.213248183e-04f, -3.205339858e-04f, -3.197426508e-04f, -3.189508146e-04f, -3.181584788e-04f, -3.173656446e-04f, -3.165723135e-04f, -3.157784868e-04f, -3.149841661e-04f,
--3.141893526e-04f, -3.133940479e-04f, -3.125982533e-04f, -3.118019702e-04f, -3.110052000e-04f, -3.102079441e-04f, -3.094102040e-04f, -3.086119811e-04f, -3.078132767e-04f, -3.070140923e-04f,
--3.062144293e-04f, -3.054142891e-04f, -3.046136731e-04f, -3.038125828e-04f, -3.030110195e-04f, -3.022089847e-04f, -3.014064797e-04f, -3.006035061e-04f, -2.998000652e-04f, -2.989961585e-04f,
--2.981917873e-04f, -2.973869530e-04f, -2.965816572e-04f, -2.957759013e-04f, -2.949696865e-04f, -2.941630145e-04f, -2.933558866e-04f, -2.925483041e-04f, -2.917402687e-04f, -2.909317816e-04f,
--2.901228443e-04f, -2.893134582e-04f, -2.885036248e-04f, -2.876933455e-04f, -2.868826218e-04f, -2.860714549e-04f, -2.852598465e-04f, -2.844477979e-04f, -2.836353105e-04f, -2.828223858e-04f,
--2.820090252e-04f, -2.811952302e-04f, -2.803810021e-04f, -2.795663425e-04f, -2.787512528e-04f, -2.779357343e-04f, -2.771197885e-04f, -2.763034170e-04f, -2.754866210e-04f, -2.746694021e-04f,
--2.738517617e-04f, -2.730337013e-04f, -2.722152222e-04f, -2.713963259e-04f, -2.705770138e-04f, -2.697572875e-04f, -2.689371484e-04f, -2.681165978e-04f, -2.672956372e-04f, -2.664742682e-04f,
--2.656524921e-04f, -2.648303103e-04f, -2.640077244e-04f, -2.631847358e-04f, -2.623613458e-04f, -2.615375561e-04f, -2.607133680e-04f, -2.598887829e-04f, -2.590638024e-04f, -2.582384279e-04f,
--2.574126608e-04f, -2.565865026e-04f, -2.557599547e-04f, -2.549330186e-04f, -2.541056958e-04f, -2.532779877e-04f, -2.524498957e-04f, -2.516214214e-04f, -2.507925661e-04f, -2.499633313e-04f,
--2.491337186e-04f, -2.483037293e-04f, -2.474733649e-04f, -2.466426269e-04f, -2.458115167e-04f, -2.449800358e-04f, -2.441481857e-04f, -2.433159677e-04f, -2.424833835e-04f, -2.416504344e-04f,
--2.408171219e-04f, -2.399834474e-04f, -2.391494126e-04f, -2.383150187e-04f, -2.374802672e-04f, -2.366451598e-04f, -2.358096977e-04f, -2.349738825e-04f, -2.341377156e-04f, -2.333011985e-04f,
--2.324643327e-04f, -2.316271196e-04f, -2.307895608e-04f, -2.299516576e-04f, -2.291134116e-04f, -2.282748243e-04f, -2.274358970e-04f, -2.265966313e-04f, -2.257570286e-04f, -2.249170905e-04f,
--2.240768184e-04f, -2.232362137e-04f, -2.223952780e-04f, -2.215540126e-04f, -2.207124192e-04f, -2.198704992e-04f, -2.190282540e-04f, -2.181856851e-04f, -2.173427941e-04f, -2.164995823e-04f,
--2.156560512e-04f, -2.148122025e-04f, -2.139680374e-04f, -2.131235575e-04f, -2.122787644e-04f, -2.114336593e-04f, -2.105882440e-04f, -2.097425197e-04f, -2.088964881e-04f, -2.080501505e-04f,
--2.072035085e-04f, -2.063565636e-04f, -2.055093172e-04f, -2.046617708e-04f, -2.038139260e-04f, -2.029657841e-04f, -2.021173468e-04f, -2.012686154e-04f, -2.004195914e-04f, -1.995702764e-04f,
--1.987206719e-04f, -1.978707792e-04f, -1.970205999e-04f, -1.961701356e-04f, -1.953193876e-04f, -1.944683575e-04f, -1.936170468e-04f, -1.927654569e-04f, -1.919135893e-04f, -1.910614456e-04f,
--1.902090272e-04f, -1.893563357e-04f, -1.885033724e-04f, -1.876501389e-04f, -1.867966368e-04f, -1.859428674e-04f, -1.850888323e-04f, -1.842345330e-04f, -1.833799709e-04f, -1.825251476e-04f,
--1.816700646e-04f, -1.808147233e-04f, -1.799591253e-04f, -1.791032720e-04f, -1.782471650e-04f, -1.773908057e-04f, -1.765341956e-04f, -1.756773363e-04f, -1.748202292e-04f, -1.739628758e-04f,
--1.731052777e-04f, -1.722474363e-04f, -1.713893531e-04f, -1.705310296e-04f, -1.696724674e-04f, -1.688136679e-04f, -1.679546326e-04f, -1.670953631e-04f, -1.662358607e-04f, -1.653761271e-04f,
--1.645161637e-04f, -1.636559721e-04f, -1.627955537e-04f, -1.619349100e-04f, -1.610740426e-04f, -1.602129529e-04f, -1.593516424e-04f, -1.584901127e-04f, -1.576283653e-04f, -1.567664016e-04f,
--1.559042232e-04f, -1.550418315e-04f, -1.541792281e-04f, -1.533164145e-04f, -1.524533922e-04f, -1.515901626e-04f, -1.507267274e-04f, -1.498630879e-04f, -1.489992458e-04f, -1.481352024e-04f,
--1.472709594e-04f, -1.464065182e-04f, -1.455418804e-04f, -1.446770473e-04f, -1.438120207e-04f, -1.429468019e-04f, -1.420813924e-04f, -1.412157939e-04f, -1.403500077e-04f, -1.394840354e-04f,
--1.386178785e-04f, -1.377515386e-04f, -1.368850170e-04f, -1.360183154e-04f, -1.351514353e-04f, -1.342843780e-04f, -1.334171453e-04f, -1.325497385e-04f, -1.316821592e-04f, -1.308144089e-04f,
--1.299464892e-04f, -1.290784014e-04f, -1.282101472e-04f, -1.273417280e-04f, -1.264731454e-04f, -1.256044008e-04f, -1.247354958e-04f, -1.238664319e-04f, -1.229972107e-04f, -1.221278335e-04f,
--1.212583020e-04f, -1.203886176e-04f, -1.195187819e-04f, -1.186487964e-04f, -1.177786625e-04f, -1.169083819e-04f, -1.160379559e-04f, -1.151673862e-04f, -1.142966743e-04f, -1.134258216e-04f,
--1.125548297e-04f, -1.116837001e-04f, -1.108124342e-04f, -1.099410337e-04f, -1.090695001e-04f, -1.081978348e-04f, -1.073260393e-04f, -1.064541153e-04f, -1.055820641e-04f, -1.047098874e-04f,
--1.038375866e-04f, -1.029651632e-04f, -1.020926188e-04f, -1.012199549e-04f, -1.003471730e-04f, -9.947427458e-05f, -9.860126121e-05f, -9.772813438e-05f, -9.685489562e-05f, -9.598154644e-05f,
--9.510808837e-05f, -9.423452290e-05f, -9.336085158e-05f, -9.248707590e-05f, -9.161319739e-05f, -9.073921757e-05f, -8.986513796e-05f, -8.899096006e-05f, -8.811668541e-05f, -8.724231551e-05f,
--8.636785189e-05f, -8.549329606e-05f, -8.461864955e-05f, -8.374391386e-05f, -8.286909053e-05f, -8.199418106e-05f, -8.111918697e-05f, -8.024410979e-05f, -7.936895103e-05f, -7.849371222e-05f,
--7.761839485e-05f, -7.674300047e-05f, -7.586753058e-05f, -7.499198671e-05f, -7.411637037e-05f, -7.324068308e-05f, -7.236492636e-05f, -7.148910173e-05f, -7.061321071e-05f, -6.973725482e-05f,
--6.886123557e-05f, -6.798515448e-05f, -6.710901308e-05f, -6.623281288e-05f, -6.535655540e-05f, -6.448024215e-05f, -6.360387467e-05f, -6.272745446e-05f, -6.185098305e-05f, -6.097446195e-05f,
--6.009789268e-05f, -5.922127676e-05f, -5.834461572e-05f, -5.746791106e-05f, -5.659116431e-05f, -5.571437699e-05f, -5.483755061e-05f, -5.396068670e-05f, -5.308378676e-05f, -5.220685233e-05f,
--5.132988492e-05f, -5.045288604e-05f, -4.957585722e-05f, -4.869879997e-05f, -4.782171581e-05f, -4.694460627e-05f, -4.606747285e-05f, -4.519031708e-05f, -4.431314047e-05f, -4.343594455e-05f,
--4.255873082e-05f, -4.168150082e-05f, -4.080425605e-05f, -3.992699803e-05f, -3.904972829e-05f, -3.817244833e-05f, -3.729515968e-05f, -3.641786385e-05f, -3.554056237e-05f, -3.466325674e-05f,
--3.378594849e-05f, -3.290863913e-05f, -3.203133018e-05f, -3.115402316e-05f, -3.027671958e-05f, -2.939942095e-05f, -2.852212881e-05f, -2.764484465e-05f, -2.676757001e-05f, -2.589030639e-05f,
--2.501305531e-05f, -2.413581828e-05f, -2.325859683e-05f, -2.238139247e-05f, -2.150420671e-05f, -2.062704107e-05f, -1.974989707e-05f, -1.887277621e-05f, -1.799568002e-05f, -1.711861001e-05f,
--1.624156769e-05f, -1.536455458e-05f, -1.448757219e-05f, -1.361062205e-05f, -1.273370565e-05f, -1.185682452e-05f, -1.097998016e-05f, -1.010317410e-05f, -9.226407851e-06f, -8.349682918e-06f,
--7.473000817e-06f, -6.596363062e-06f, -5.719771166e-06f, -4.843226641e-06f, -3.966730999e-06f, -3.090285753e-06f, -2.213892416e-06f, -1.337552498e-06f, -4.612675114e-07f, 4.149610321e-07f,
-1.291131621e-06f, 2.167242745e-06f, 3.043292893e-06f, 3.919280554e-06f, 4.795204217e-06f, 5.671062373e-06f, 6.546853511e-06f, 7.422576122e-06f, 8.298228695e-06f, 9.173809722e-06f,
-1.004931769e-05f, 1.092475110e-05f, 1.180010843e-05f, 1.267538818e-05f, 1.355058884e-05f, 1.442570891e-05f, 1.530074686e-05f, 1.617570120e-05f, 1.705057043e-05f, 1.792535302e-05f,
-1.880004748e-05f, 1.967465230e-05f, 2.054916597e-05f, 2.142358698e-05f, 2.229791384e-05f, 2.317214503e-05f, 2.404627905e-05f, 2.492031440e-05f, 2.579424956e-05f, 2.666808304e-05f,
-2.754181334e-05f, 2.841543894e-05f, 2.928895834e-05f, 3.016237004e-05f, 3.103567254e-05f, 3.190886434e-05f, 3.278194393e-05f, 3.365490980e-05f, 3.452776047e-05f, 3.540049442e-05f,
-3.627311016e-05f, 3.714560618e-05f, 3.801798098e-05f, 3.889023307e-05f, 3.976236093e-05f, 4.063436309e-05f, 4.150623802e-05f, 4.237798424e-05f, 4.324960025e-05f, 4.412108454e-05f,
-4.499243562e-05f, 4.586365199e-05f, 4.673473216e-05f, 4.760567462e-05f, 4.847647789e-05f, 4.934714045e-05f, 5.021766082e-05f, 5.108803751e-05f, 5.195826900e-05f, 5.282835382e-05f,
-5.369829047e-05f, 5.456807744e-05f, 5.543771326e-05f, 5.630719641e-05f, 5.717652542e-05f, 5.804569879e-05f, 5.891471501e-05f, 5.978357262e-05f, 6.065227010e-05f, 6.152080597e-05f,
-6.238917874e-05f, 6.325738691e-05f, 6.412542900e-05f, 6.499330352e-05f, 6.586100898e-05f, 6.672854388e-05f, 6.759590675e-05f, 6.846309608e-05f, 6.933011040e-05f, 7.019694821e-05f,
-7.106360803e-05f, 7.193008837e-05f, 7.279638775e-05f, 7.366250468e-05f, 7.452843766e-05f, 7.539418523e-05f, 7.625974589e-05f, 7.712511816e-05f, 7.799030055e-05f, 7.885529159e-05f,
-7.972008978e-05f, 8.058469365e-05f, 8.144910172e-05f, 8.231331249e-05f, 8.317732450e-05f, 8.404113626e-05f, 8.490474628e-05f, 8.576815310e-05f, 8.663135523e-05f, 8.749435118e-05f,
-8.835713949e-05f, 8.921971867e-05f, 9.008208725e-05f, 9.094424375e-05f, 9.180618669e-05f, 9.266791460e-05f, 9.352942600e-05f, 9.439071941e-05f, 9.525179336e-05f, 9.611264638e-05f,
-9.697327699e-05f, 9.783368371e-05f, 9.869386508e-05f, 9.955381963e-05f, 1.004135459e-04f, 1.012730423e-04f, 1.021323076e-04f, 1.029913401e-04f, 1.038501384e-04f, 1.047087011e-04f,
-1.055670267e-04f, 1.064251137e-04f, 1.072829606e-04f, 1.081405660e-04f, 1.089979284e-04f, 1.098550463e-04f, 1.107119183e-04f, 1.115685429e-04f, 1.124249187e-04f, 1.132810442e-04f,
-1.141369178e-04f, 1.149925382e-04f, 1.158479040e-04f, 1.167030135e-04f, 1.175578654e-04f, 1.184124582e-04f, 1.192667905e-04f, 1.201208607e-04f, 1.209746675e-04f, 1.218282093e-04f,
-1.226814847e-04f, 1.235344923e-04f, 1.243872306e-04f, 1.252396981e-04f, 1.260918934e-04f, 1.269438150e-04f, 1.277954615e-04f, 1.286468314e-04f, 1.294979233e-04f, 1.303487357e-04f,
-1.311992671e-04f, 1.320495161e-04f, 1.328994813e-04f, 1.337491612e-04f, 1.345985543e-04f, 1.354476593e-04f, 1.362964745e-04f, 1.371449987e-04f, 1.379932303e-04f, 1.388411680e-04f,
-1.396888102e-04f, 1.405361555e-04f, 1.413832025e-04f, 1.422299497e-04f, 1.430763956e-04f, 1.439225390e-04f, 1.447683782e-04f, 1.456139118e-04f, 1.464591385e-04f, 1.473040567e-04f,
-1.481486650e-04f, 1.489929621e-04f, 1.498369463e-04f, 1.506806164e-04f, 1.515239709e-04f, 1.523670082e-04f, 1.532097271e-04f, 1.540521260e-04f, 1.548942036e-04f, 1.557359583e-04f,
-1.565773888e-04f, 1.574184936e-04f, 1.582592713e-04f, 1.590997205e-04f, 1.599398397e-04f, 1.607796274e-04f, 1.616190823e-04f, 1.624582030e-04f, 1.632969880e-04f, 1.641354358e-04f,
-1.649735451e-04f, 1.658113144e-04f, 1.666487423e-04f, 1.674858273e-04f, 1.683225681e-04f, 1.691589632e-04f, 1.699950112e-04f, 1.708307107e-04f, 1.716660603e-04f, 1.725010584e-04f,
-1.733357038e-04f, 1.741699950e-04f, 1.750039305e-04f, 1.758375090e-04f, 1.766707290e-04f, 1.775035891e-04f, 1.783360879e-04f, 1.791682240e-04f, 1.799999960e-04f, 1.808314024e-04f,
-1.816624419e-04f, 1.824931130e-04f, 1.833234143e-04f, 1.841533444e-04f, 1.849829019e-04f, 1.858120854e-04f, 1.866408935e-04f, 1.874693247e-04f, 1.882973777e-04f, 1.891250510e-04f,
-1.899523433e-04f, 1.907792531e-04f, 1.916057791e-04f, 1.924319197e-04f, 1.932576738e-04f, 1.940830397e-04f, 1.949080161e-04f, 1.957326017e-04f, 1.965567950e-04f, 1.973805946e-04f,
-1.982039992e-04f, 1.990270073e-04f, 1.998496175e-04f, 2.006718284e-04f, 2.014936387e-04f, 2.023150469e-04f, 2.031360517e-04f, 2.039566516e-04f, 2.047768453e-04f, 2.055966313e-04f,
-2.064160084e-04f, 2.072349750e-04f, 2.080535298e-04f, 2.088716715e-04f, 2.096893985e-04f, 2.105067096e-04f, 2.113236034e-04f, 2.121400784e-04f, 2.129561333e-04f, 2.137717668e-04f,
-2.145869773e-04f, 2.154017636e-04f, 2.162161242e-04f, 2.170300578e-04f, 2.178435630e-04f, 2.186566384e-04f, 2.194692826e-04f, 2.202814944e-04f, 2.210932722e-04f, 2.219046147e-04f,
-2.227155205e-04f, 2.235259883e-04f, 2.243360168e-04f, 2.251456044e-04f, 2.259547499e-04f, 2.267634518e-04f, 2.275717089e-04f, 2.283795197e-04f, 2.291868828e-04f, 2.299937970e-04f,
-2.308002608e-04f, 2.316062729e-04f, 2.324118320e-04f, 2.332169365e-04f, 2.340215853e-04f, 2.348257768e-04f, 2.356295099e-04f, 2.364327830e-04f, 2.372355949e-04f, 2.380379442e-04f,
-2.388398295e-04f, 2.396412494e-04f, 2.404422027e-04f, 2.412426880e-04f, 2.420427039e-04f, 2.428422490e-04f, 2.436413221e-04f, 2.444399217e-04f, 2.452380465e-04f, 2.460356952e-04f,
-2.468328663e-04f, 2.476295587e-04f, 2.484257709e-04f, 2.492215015e-04f, 2.500167493e-04f, 2.508115128e-04f, 2.516057908e-04f, 2.523995819e-04f, 2.531928847e-04f, 2.539856980e-04f,
-2.547780204e-04f, 2.555698505e-04f, 2.563611870e-04f, 2.571520285e-04f, 2.579423738e-04f, 2.587322216e-04f, 2.595215703e-04f, 2.603104189e-04f, 2.610987658e-04f, 2.618866098e-04f,
-2.626739495e-04f, 2.634607837e-04f, 2.642471110e-04f, 2.650329300e-04f, 2.658182394e-04f, 2.666030380e-04f, 2.673873244e-04f, 2.681710972e-04f, 2.689543552e-04f, 2.697370970e-04f,
-2.705193213e-04f, 2.713010268e-04f, 2.720822122e-04f, 2.728628761e-04f, 2.736430173e-04f, 2.744226344e-04f, 2.752017261e-04f, 2.759802911e-04f, 2.767583281e-04f, 2.775358357e-04f,
-2.783128127e-04f, 2.790892578e-04f, 2.798651696e-04f, 2.806405469e-04f, 2.814153883e-04f, 2.821896926e-04f, 2.829634583e-04f, 2.837366843e-04f, 2.845093692e-04f, 2.852815118e-04f,
-2.860531107e-04f, 2.868241645e-04f, 2.875946722e-04f, 2.883646322e-04f, 2.891340434e-04f, 2.899029044e-04f, 2.906712140e-04f, 2.914389709e-04f, 2.922061737e-04f, 2.929728211e-04f,
-2.937389120e-04f, 2.945044450e-04f, 2.952694187e-04f, 2.960338320e-04f, 2.967976836e-04f, 2.975609721e-04f, 2.983236962e-04f, 2.990858548e-04f, 2.998474465e-04f, 3.006084700e-04f,
-3.013689240e-04f, 3.021288073e-04f, 3.028881187e-04f, 3.036468567e-04f, 3.044050202e-04f, 3.051626079e-04f, 3.059196184e-04f, 3.066760506e-04f, 3.074319032e-04f, 3.081871748e-04f,
-3.089418643e-04f, 3.096959704e-04f, 3.104494917e-04f, 3.112024271e-04f, 3.119547752e-04f, 3.127065348e-04f, 3.134577047e-04f, 3.142082835e-04f, 3.149582701e-04f, 3.157076631e-04f,
-3.164564614e-04f, 3.172046636e-04f, 3.179522685e-04f, 3.186992748e-04f, 3.194456813e-04f, 3.201914868e-04f, 3.209366899e-04f, 3.216812895e-04f, 3.224252843e-04f, 3.231686730e-04f,
-3.239114545e-04f, 3.246536273e-04f, 3.253951904e-04f, 3.261361425e-04f, 3.268764823e-04f, 3.276162086e-04f, 3.283553201e-04f, 3.290938157e-04f, 3.298316940e-04f, 3.305689539e-04f,
-3.313055940e-04f, 3.320416133e-04f, 3.327770104e-04f, 3.335117841e-04f, 3.342459331e-04f, 3.349794564e-04f, 3.357123525e-04f, 3.364446204e-04f, 3.371762587e-04f, 3.379072663e-04f,
-3.386376419e-04f, 3.393673843e-04f, 3.400964923e-04f, 3.408249646e-04f, 3.415528001e-04f, 3.422799976e-04f, 3.430065558e-04f, 3.437324734e-04f, 3.444577494e-04f, 3.451823824e-04f,
-3.459063713e-04f, 3.466297148e-04f, 3.473524118e-04f, 3.480744611e-04f, 3.487958614e-04f, 3.495166115e-04f, 3.502367102e-04f, 3.509561564e-04f, 3.516749488e-04f, 3.523930862e-04f,
-3.531105674e-04f, 3.538273912e-04f, 3.545435565e-04f, 3.552590621e-04f, 3.559739066e-04f, 3.566880890e-04f, 3.574016081e-04f, 3.581144626e-04f, 3.588266515e-04f, 3.595381734e-04f,
-3.602490272e-04f, 3.609592117e-04f, 3.616687258e-04f, 3.623775682e-04f, 3.630857378e-04f, 3.637932333e-04f, 3.645000537e-04f, 3.652061978e-04f, 3.659116642e-04f, 3.666164520e-04f,
-3.673205598e-04f, 3.680239866e-04f, 3.687267312e-04f, 3.694287923e-04f, 3.701301689e-04f, 3.708308597e-04f, 3.715308637e-04f, 3.722301795e-04f, 3.729288061e-04f, 3.736267423e-04f,
-3.743239869e-04f, 3.750205388e-04f, 3.757163968e-04f, 3.764115598e-04f, 3.771060266e-04f, 3.777997960e-04f, 3.784928669e-04f, 3.791852382e-04f, 3.798769086e-04f, 3.805678771e-04f,
-3.812581424e-04f, 3.819477036e-04f, 3.826365593e-04f, 3.833247084e-04f, 3.840121499e-04f, 3.846988825e-04f, 3.853849052e-04f, 3.860702167e-04f, 3.867548160e-04f, 3.874387019e-04f,
-3.881218733e-04f, 3.888043290e-04f, 3.894860679e-04f, 3.901670889e-04f, 3.908473908e-04f, 3.915269726e-04f, 3.922058330e-04f, 3.928839710e-04f, 3.935613854e-04f, 3.942380752e-04f,
-3.949140391e-04f, 3.955892761e-04f, 3.962637851e-04f, 3.969375649e-04f, 3.976106144e-04f, 3.982829324e-04f, 3.989545180e-04f, 3.996253700e-04f, 4.002954872e-04f, 4.009648685e-04f,
-4.016335129e-04f, 4.023014192e-04f, 4.029685863e-04f, 4.036350132e-04f, 4.043006986e-04f, 4.049656416e-04f, 4.056298410e-04f, 4.062932957e-04f, 4.069560046e-04f, 4.076179666e-04f,
-4.082791807e-04f, 4.089396457e-04f, 4.095993605e-04f, 4.102583240e-04f, 4.109165352e-04f, 4.115739930e-04f, 4.122306962e-04f, 4.128866438e-04f, 4.135418348e-04f, 4.141962679e-04f,
-4.148499422e-04f, 4.155028565e-04f, 4.161550099e-04f, 4.168064011e-04f, 4.174570292e-04f, 4.181068930e-04f, 4.187559915e-04f, 4.194043235e-04f, 4.200518882e-04f, 4.206986843e-04f,
-4.213447107e-04f, 4.219899666e-04f, 4.226344506e-04f, 4.232781619e-04f, 4.239210994e-04f, 4.245632619e-04f, 4.252046484e-04f, 4.258452579e-04f, 4.264850892e-04f, 4.271241415e-04f,
-4.277624135e-04f, 4.283999043e-04f, 4.290366127e-04f, 4.296725378e-04f, 4.303076785e-04f, 4.309420338e-04f, 4.315756025e-04f, 4.322083837e-04f, 4.328403763e-04f, 4.334715793e-04f,
-4.341019917e-04f, 4.347316123e-04f, 4.353604402e-04f, 4.359884743e-04f, 4.366157136e-04f, 4.372421570e-04f, 4.378678036e-04f, 4.384926523e-04f, 4.391167020e-04f, 4.397399518e-04f,
-4.403624006e-04f, 4.409840474e-04f, 4.416048912e-04f, 4.422249309e-04f, 4.428441656e-04f, 4.434625942e-04f, 4.440802156e-04f, 4.446970290e-04f, 4.453130332e-04f, 4.459282273e-04f,
-4.465426102e-04f, 4.471561809e-04f, 4.477689385e-04f, 4.483808819e-04f, 4.489920102e-04f, 4.496023222e-04f, 4.502118171e-04f, 4.508204937e-04f, 4.514283512e-04f, 4.520353885e-04f,
-4.526416046e-04f, 4.532469986e-04f, 4.538515693e-04f, 4.544553160e-04f, 4.550582374e-04f, 4.556603328e-04f, 4.562616010e-04f, 4.568620411e-04f, 4.574616521e-04f, 4.580604331e-04f,
-4.586583830e-04f, 4.592555008e-04f, 4.598517856e-04f, 4.604472365e-04f, 4.610418524e-04f, 4.616356323e-04f, 4.622285754e-04f, 4.628206805e-04f, 4.634119469e-04f, 4.640023733e-04f,
-4.645919591e-04f, 4.651807030e-04f, 4.657686043e-04f, 4.663556619e-04f, 4.669418749e-04f, 4.675272422e-04f, 4.681117631e-04f, 4.686954364e-04f, 4.692782613e-04f, 4.698602368e-04f,
-4.704413619e-04f, 4.710216357e-04f, 4.716010573e-04f, 4.721796256e-04f, 4.727573398e-04f, 4.733341990e-04f, 4.739102021e-04f, 4.744853482e-04f, 4.750596365e-04f, 4.756330659e-04f,
-4.762056355e-04f, 4.767773444e-04f, 4.773481917e-04f, 4.779181764e-04f, 4.784872975e-04f, 4.790555543e-04f, 4.796229457e-04f, 4.801894708e-04f, 4.807551288e-04f, 4.813199186e-04f,
-4.818838393e-04f, 4.824468901e-04f, 4.830090701e-04f, 4.835703782e-04f, 4.841308136e-04f, 4.846903754e-04f, 4.852490627e-04f, 4.858068745e-04f, 4.863638100e-04f, 4.869198683e-04f,
-4.874750484e-04f, 4.880293494e-04f, 4.885827705e-04f, 4.891353107e-04f, 4.896869692e-04f, 4.902377450e-04f, 4.907876373e-04f, 4.913366452e-04f, 4.918847677e-04f, 4.924320040e-04f,
-4.929783532e-04f, 4.935238144e-04f, 4.940683867e-04f, 4.946120693e-04f, 4.951548612e-04f, 4.956967616e-04f, 4.962377696e-04f, 4.967778843e-04f, 4.973171049e-04f, 4.978554305e-04f,
-4.983928601e-04f, 4.989293930e-04f, 4.994650282e-04f, 4.999997650e-04f, 5.005336024e-04f, 5.010665395e-04f, 5.015985755e-04f, 5.021297096e-04f, 5.026599409e-04f, 5.031892685e-04f,
-5.037176915e-04f, 5.042452092e-04f, 5.047718206e-04f, 5.052975250e-04f, 5.058223214e-04f, 5.063462090e-04f, 5.068691870e-04f, 5.073912545e-04f, 5.079124107e-04f, 5.084326548e-04f,
-5.089519858e-04f, 5.094704030e-04f, 5.099879055e-04f, 5.105044925e-04f, 5.110201632e-04f, 5.115349167e-04f, 5.120487522e-04f, 5.125616688e-04f, 5.130736658e-04f, 5.135847423e-04f,
-5.140948975e-04f, 5.146041306e-04f, 5.151124407e-04f, 5.156198271e-04f, 5.161262889e-04f, 5.166318252e-04f, 5.171364354e-04f, 5.176401185e-04f, 5.181428738e-04f, 5.186447005e-04f,
-5.191455977e-04f, 5.196455647e-04f, 5.201446006e-04f, 5.206427046e-04f, 5.211398760e-04f, 5.216361139e-04f, 5.221314176e-04f, 5.226257862e-04f, 5.231192189e-04f, 5.236117151e-04f,
-5.241032738e-04f, 5.245938943e-04f, 5.250835757e-04f, 5.255723174e-04f, 5.260601186e-04f, 5.265469784e-04f, 5.270328960e-04f, 5.275178708e-04f, 5.280019018e-04f, 5.284849884e-04f,
-5.289671298e-04f, 5.294483251e-04f, 5.299285737e-04f, 5.304078747e-04f, 5.308862274e-04f, 5.313636311e-04f, 5.318400849e-04f, 5.323155881e-04f, 5.327901399e-04f, 5.332637396e-04f,
-5.337363865e-04f, 5.342080797e-04f, 5.346788185e-04f, 5.351486022e-04f, 5.356174301e-04f, 5.360853012e-04f, 5.365522151e-04f, 5.370181707e-04f, 5.374831676e-04f, 5.379472048e-04f,
-5.384102816e-04f, 5.388723974e-04f, 5.393335514e-04f, 5.397937428e-04f, 5.402529709e-04f, 5.407112350e-04f, 5.411685344e-04f, 5.416248683e-04f, 5.420802360e-04f, 5.425346367e-04f,
-5.429880699e-04f, 5.434405346e-04f, 5.438920303e-04f, 5.443425561e-04f, 5.447921115e-04f, 5.452406956e-04f, 5.456883078e-04f, 5.461349473e-04f, 5.465806135e-04f, 5.470253056e-04f,
-5.474690229e-04f, 5.479117647e-04f, 5.483535304e-04f, 5.487943192e-04f, 5.492341304e-04f, 5.496729634e-04f, 5.501108173e-04f, 5.505476917e-04f, 5.509835856e-04f, 5.514184985e-04f,
-5.518524297e-04f, 5.522853785e-04f, 5.527173442e-04f, 5.531483261e-04f, 5.535783236e-04f, 5.540073359e-04f, 5.544353624e-04f, 5.548624024e-04f, 5.552884552e-04f, 5.557135202e-04f,
-5.561375967e-04f, 5.565606840e-04f, 5.569827815e-04f, 5.574038884e-04f, 5.578240042e-04f, 5.582431282e-04f, 5.586612597e-04f, 5.590783980e-04f, 5.594945425e-04f, 5.599096926e-04f,
-5.603238475e-04f, 5.607370067e-04f, 5.611491694e-04f, 5.615603352e-04f, 5.619705032e-04f, 5.623796728e-04f, 5.627878435e-04f, 5.631950145e-04f, 5.636011853e-04f, 5.640063551e-04f,
-5.644105234e-04f, 5.648136896e-04f, 5.652158529e-04f, 5.656170128e-04f, 5.660171687e-04f, 5.664163198e-04f, 5.668144657e-04f, 5.672116056e-04f, 5.676077389e-04f, 5.680028651e-04f,
-5.683969835e-04f, 5.687900934e-04f, 5.691821944e-04f, 5.695732857e-04f, 5.699633668e-04f, 5.703524370e-04f, 5.707404958e-04f, 5.711275425e-04f, 5.715135765e-04f, 5.718985973e-04f,
-5.722826042e-04f, 5.726655967e-04f, 5.730475741e-04f, 5.734285358e-04f, 5.738084813e-04f, 5.741874100e-04f, 5.745653212e-04f, 5.749422145e-04f, 5.753180891e-04f, 5.756929446e-04f,
-5.760667803e-04f, 5.764395957e-04f, 5.768113901e-04f, 5.771821631e-04f, 5.775519140e-04f, 5.779206422e-04f, 5.782883473e-04f, 5.786550286e-04f, 5.790206855e-04f, 5.793853175e-04f,
-5.797489241e-04f, 5.801115046e-04f, 5.804730585e-04f, 5.808335853e-04f, 5.811930844e-04f, 5.815515552e-04f, 5.819089972e-04f, 5.822654099e-04f, 5.826207926e-04f, 5.829751448e-04f,
-5.833284661e-04f, 5.836807558e-04f, 5.840320135e-04f, 5.843822385e-04f, 5.847314303e-04f, 5.850795884e-04f, 5.854267123e-04f, 5.857728015e-04f, 5.861178553e-04f, 5.864618733e-04f,
-5.868048549e-04f, 5.871467997e-04f, 5.874877071e-04f, 5.878275765e-04f, 5.881664075e-04f, 5.885041996e-04f, 5.888409521e-04f, 5.891766647e-04f, 5.895113368e-04f, 5.898449678e-04f,
-5.901775574e-04f, 5.905091049e-04f, 5.908396099e-04f, 5.911690718e-04f, 5.914974902e-04f, 5.918248646e-04f, 5.921511944e-04f, 5.924764792e-04f, 5.928007185e-04f, 5.931239117e-04f,
-5.934460585e-04f, 5.937671582e-04f, 5.940872105e-04f, 5.944062148e-04f, 5.947241707e-04f, 5.950410776e-04f, 5.953569351e-04f, 5.956717428e-04f, 5.959855001e-04f, 5.962982065e-04f,
-5.966098617e-04f, 5.969204650e-04f, 5.972300161e-04f, 5.975385145e-04f, 5.978459598e-04f, 5.981523514e-04f, 5.984576889e-04f, 5.987619718e-04f, 5.990651997e-04f, 5.993673722e-04f,
-5.996684888e-04f, 5.999685489e-04f, 6.002675523e-04f, 6.005654983e-04f, 6.008623867e-04f, 6.011582169e-04f, 6.014529885e-04f, 6.017467011e-04f, 6.020393541e-04f, 6.023309473e-04f,
-6.026214801e-04f, 6.029109521e-04f, 6.031993630e-04f, 6.034867121e-04f, 6.037729992e-04f, 6.040582238e-04f, 6.043423855e-04f, 6.046254839e-04f, 6.049075184e-04f, 6.051884888e-04f,
-6.054683946e-04f, 6.057472354e-04f, 6.060250108e-04f, 6.063017204e-04f, 6.065773637e-04f, 6.068519403e-04f, 6.071254500e-04f, 6.073978921e-04f, 6.076692664e-04f, 6.079395725e-04f,
-6.082088099e-04f, 6.084769782e-04f, 6.087440771e-04f, 6.090101062e-04f, 6.092750651e-04f, 6.095389533e-04f, 6.098017706e-04f, 6.100635165e-04f, 6.103241906e-04f, 6.105837926e-04f,
-6.108423220e-04f, 6.110997786e-04f, 6.113561619e-04f, 6.116114715e-04f, 6.118657071e-04f, 6.121188684e-04f, 6.123709549e-04f, 6.126219662e-04f, 6.128719021e-04f, 6.131207622e-04f,
-6.133685460e-04f, 6.136152533e-04f, 6.138608837e-04f, 6.141054368e-04f, 6.143489123e-04f, 6.145913098e-04f, 6.148326290e-04f, 6.150728695e-04f, 6.153120311e-04f, 6.155501132e-04f,
-6.157871157e-04f, 6.160230381e-04f, 6.162578802e-04f, 6.164916416e-04f, 6.167243219e-04f, 6.169559208e-04f, 6.171864381e-04f, 6.174158733e-04f, 6.176442262e-04f, 6.178714964e-04f,
-6.180976836e-04f, 6.183227875e-04f, 6.185468078e-04f, 6.187697441e-04f, 6.189915961e-04f, 6.192123635e-04f, 6.194320461e-04f, 6.196506435e-04f, 6.198681553e-04f, 6.200845814e-04f,
-6.202999213e-04f, 6.205141749e-04f, 6.207273417e-04f, 6.209394215e-04f, 6.211504140e-04f, 6.213603189e-04f, 6.215691359e-04f, 6.217768647e-04f, 6.219835051e-04f, 6.221890567e-04f,
-6.223935193e-04f, 6.225968925e-04f, 6.227991762e-04f, 6.230003700e-04f, 6.232004736e-04f, 6.233994868e-04f, 6.235974093e-04f, 6.237942408e-04f, 6.239899811e-04f, 6.241846299e-04f,
-6.243781869e-04f, 6.245706519e-04f, 6.247620246e-04f, 6.249523047e-04f, 6.251414920e-04f, 6.253295863e-04f, 6.255165872e-04f, 6.257024946e-04f, 6.258873081e-04f, 6.260710276e-04f,
-6.262536527e-04f, 6.264351833e-04f, 6.266156191e-04f, 6.267949599e-04f, 6.269732053e-04f, 6.271503553e-04f, 6.273264095e-04f, 6.275013677e-04f, 6.276752297e-04f, 6.278479953e-04f,
-6.280196642e-04f, 6.281902362e-04f, 6.283597111e-04f, 6.285280887e-04f, 6.286953687e-04f, 6.288615509e-04f, 6.290266352e-04f, 6.291906212e-04f, 6.293535088e-04f, 6.295152978e-04f,
-6.296759880e-04f, 6.298355791e-04f, 6.299940710e-04f, 6.301514635e-04f, 6.303077563e-04f, 6.304629493e-04f, 6.306170423e-04f, 6.307700350e-04f, 6.309219273e-04f, 6.310727189e-04f,
-6.312224098e-04f, 6.313709997e-04f, 6.315184884e-04f, 6.316648758e-04f, 6.318101616e-04f, 6.319543458e-04f, 6.320974280e-04f, 6.322394082e-04f, 6.323802861e-04f, 6.325200616e-04f,
-6.326587345e-04f, 6.327963047e-04f, 6.329327720e-04f, 6.330681362e-04f, 6.332023972e-04f, 6.333355547e-04f, 6.334676088e-04f, 6.335985591e-04f, 6.337284055e-04f, 6.338571479e-04f,
-6.339847862e-04f, 6.341113201e-04f, 6.342367496e-04f, 6.343610745e-04f, 6.344842946e-04f, 6.346064099e-04f, 6.347274201e-04f, 6.348473251e-04f, 6.349661249e-04f, 6.350838192e-04f,
-6.352004080e-04f, 6.353158911e-04f, 6.354302683e-04f, 6.355435396e-04f, 6.356557049e-04f, 6.357667639e-04f, 6.358767167e-04f, 6.359855630e-04f, 6.360933028e-04f, 6.361999360e-04f,
-6.363054623e-04f, 6.364098818e-04f, 6.365131944e-04f, 6.366153998e-04f, 6.367164980e-04f, 6.368164890e-04f, 6.369153725e-04f, 6.370131486e-04f, 6.371098171e-04f, 6.372053778e-04f,
-6.372998308e-04f, 6.373931760e-04f, 6.374854132e-04f, 6.375765423e-04f, 6.376665634e-04f, 6.377554762e-04f, 6.378432807e-04f, 6.379299769e-04f, 6.380155646e-04f, 6.381000438e-04f,
-6.381834144e-04f, 6.382656763e-04f, 6.383468295e-04f, 6.384268739e-04f, 6.385058094e-04f, 6.385836360e-04f, 6.386603536e-04f, 6.387359621e-04f, 6.388104616e-04f, 6.388838518e-04f,
-6.389561329e-04f, 6.390273047e-04f, 6.390973671e-04f, 6.391663202e-04f, 6.392341639e-04f, 6.393008981e-04f, 6.393665228e-04f, 6.394310379e-04f, 6.394944435e-04f, 6.395567394e-04f,
-6.396179257e-04f, 6.396780023e-04f, 6.397369692e-04f, 6.397948264e-04f, 6.398515737e-04f, 6.399072113e-04f, 6.399617390e-04f, 6.400151569e-04f, 6.400674649e-04f, 6.401186631e-04f,
-6.401687513e-04f, 6.402177297e-04f, 6.402655981e-04f, 6.403123566e-04f, 6.403580051e-04f, 6.404025437e-04f, 6.404459724e-04f, 6.404882910e-04f, 6.405294998e-04f, 6.405695986e-04f,
-6.406085874e-04f, 6.406464663e-04f, 6.406832353e-04f, 6.407188943e-04f, 6.407534434e-04f, 6.407868827e-04f, 6.408192120e-04f, 6.408504315e-04f, 6.408805411e-04f, 6.409095409e-04f,
-6.409374308e-04f, 6.409642110e-04f, 6.409898815e-04f, 6.410144422e-04f, 6.410378932e-04f, 6.410602346e-04f, 6.410814663e-04f, 6.411015885e-04f, 6.411206011e-04f, 6.411385041e-04f,
-6.411552977e-04f, 6.411709819e-04f, 6.411855567e-04f, 6.411990221e-04f, 6.412113783e-04f, 6.412226252e-04f, 6.412327630e-04f, 6.412417916e-04f, 6.412497111e-04f, 6.412565217e-04f,
-6.412622233e-04f, 6.412668160e-04f, 6.412702999e-04f, 6.412726750e-04f, 6.412739415e-04f, 6.412740994e-04f, 6.412731487e-04f, 6.412710895e-04f, 6.412679219e-04f, 6.412636461e-04f,
-6.412582620e-04f, 6.412517697e-04f, 6.412441694e-04f, 6.412354611e-04f, 6.412256450e-04f, 6.412147210e-04f, 6.412026893e-04f, 6.411895500e-04f, 6.411753032e-04f, 6.411599489e-04f,
-6.411434873e-04f, 6.411259185e-04f, 6.411072426e-04f, 6.410874597e-04f, 6.410665699e-04f, 6.410445732e-04f, 6.410214699e-04f, 6.409972600e-04f, 6.409719437e-04f, 6.409455210e-04f,
-6.409179920e-04f, 6.408893570e-04f, 6.408596160e-04f, 6.408287691e-04f, 6.407968165e-04f, 6.407637583e-04f, 6.407295946e-04f, 6.406943256e-04f, 6.406579513e-04f, 6.406204720e-04f,
-6.405818878e-04f, 6.405421987e-04f, 6.405014050e-04f, 6.404595068e-04f, 6.404165042e-04f, 6.403723974e-04f, 6.403271866e-04f, 6.402808718e-04f, 6.402334532e-04f, 6.401849310e-04f,
-6.401353054e-04f, 6.400845764e-04f, 6.400327444e-04f, 6.399798093e-04f, 6.399257715e-04f, 6.398706309e-04f, 6.398143880e-04f, 6.397570427e-04f, 6.396985952e-04f, 6.396390458e-04f,
-6.395783946e-04f, 6.395166418e-04f, 6.394537876e-04f, 6.393898321e-04f, 6.393247756e-04f, 6.392586181e-04f, 6.391913600e-04f, 6.391230014e-04f, 6.390535424e-04f, 6.389829833e-04f,
-6.389113243e-04f, 6.388385656e-04f, 6.387647073e-04f, 6.386897497e-04f, 6.386136929e-04f, 6.385365373e-04f, 6.384582828e-04f, 6.383789299e-04f, 6.382984787e-04f, 6.382169294e-04f,
-6.381342822e-04f, 6.380505373e-04f, 6.379656949e-04f, 6.378797554e-04f, 6.377927188e-04f, 6.377045855e-04f, 6.376153555e-04f, 6.375250293e-04f, 6.374336069e-04f, 6.373410886e-04f,
-6.372474747e-04f, 6.371527654e-04f, 6.370569609e-04f, 6.369600615e-04f, 6.368620674e-04f, 6.367629788e-04f, 6.366627960e-04f, 6.365615192e-04f, 6.364591487e-04f, 6.363556847e-04f,
-6.362511275e-04f, 6.361454773e-04f, 6.360387344e-04f, 6.359308991e-04f, 6.358219715e-04f, 6.357119520e-04f, 6.356008409e-04f, 6.354886383e-04f, 6.353753445e-04f, 6.352609599e-04f,
-6.351454847e-04f, 6.350289191e-04f, 6.349112634e-04f, 6.347925180e-04f, 6.346726831e-04f, 6.345517589e-04f, 6.344297457e-04f, 6.343066439e-04f, 6.341824537e-04f, 6.340571754e-04f,
-6.339308092e-04f, 6.338033556e-04f, 6.336748147e-04f, 6.335451868e-04f, 6.334144724e-04f, 6.332826715e-04f, 6.331497847e-04f, 6.330158121e-04f, 6.328807540e-04f, 6.327446108e-04f,
-6.326073828e-04f, 6.324690702e-04f, 6.323296735e-04f, 6.321891928e-04f, 6.320476286e-04f, 6.319049811e-04f, 6.317612506e-04f, 6.316164375e-04f, 6.314705421e-04f, 6.313235647e-04f,
-6.311755056e-04f, 6.310263653e-04f, 6.308761439e-04f, 6.307248418e-04f, 6.305724594e-04f, 6.304189969e-04f, 6.302644549e-04f, 6.301088334e-04f, 6.299521330e-04f, 6.297943539e-04f,
-6.296354966e-04f, 6.294755612e-04f, 6.293145483e-04f, 6.291524581e-04f, 6.289892909e-04f, 6.288250473e-04f, 6.286597274e-04f, 6.284933316e-04f, 6.283258604e-04f, 6.281573140e-04f,
-6.279876929e-04f, 6.278169973e-04f, 6.276452278e-04f, 6.274723845e-04f, 6.272984680e-04f, 6.271234785e-04f, 6.269474165e-04f, 6.267702822e-04f, 6.265920762e-04f, 6.264127988e-04f,
-6.262324503e-04f, 6.260510311e-04f, 6.258685417e-04f, 6.256849823e-04f, 6.255003535e-04f, 6.253146556e-04f, 6.251278889e-04f, 6.249400539e-04f, 6.247511509e-04f, 6.245611804e-04f,
-6.243701428e-04f, 6.241780384e-04f, 6.239848677e-04f, 6.237906311e-04f, 6.235953289e-04f, 6.233989616e-04f, 6.232015296e-04f, 6.230030333e-04f, 6.228034731e-04f, 6.226028495e-04f,
-6.224011628e-04f, 6.221984134e-04f, 6.219946019e-04f, 6.217897285e-04f, 6.215837938e-04f, 6.213767981e-04f, 6.211687419e-04f, 6.209596257e-04f, 6.207494498e-04f, 6.205382146e-04f,
-6.203259207e-04f, 6.201125684e-04f, 6.198981582e-04f, 6.196826906e-04f, 6.194661659e-04f, 6.192485846e-04f, 6.190299472e-04f, 6.188102541e-04f, 6.185895057e-04f, 6.183677026e-04f,
-6.181448451e-04f, 6.179209338e-04f, 6.176959690e-04f, 6.174699512e-04f, 6.172428810e-04f, 6.170147587e-04f, 6.167855848e-04f, 6.165553598e-04f, 6.163240841e-04f, 6.160917582e-04f,
-6.158583827e-04f, 6.156239579e-04f, 6.153884844e-04f, 6.151519625e-04f, 6.149143929e-04f, 6.146757759e-04f, 6.144361121e-04f, 6.141954019e-04f, 6.139536458e-04f, 6.137108443e-04f,
-6.134669980e-04f, 6.132221072e-04f, 6.129761725e-04f, 6.127291943e-04f, 6.124811733e-04f, 6.122321098e-04f, 6.119820043e-04f, 6.117308575e-04f, 6.114786696e-04f, 6.112254414e-04f,
-6.109711733e-04f, 6.107158657e-04f, 6.104595192e-04f, 6.102021344e-04f, 6.099437116e-04f, 6.096842515e-04f, 6.094237546e-04f, 6.091622213e-04f, 6.088996522e-04f, 6.086360479e-04f,
-6.083714087e-04f, 6.081057354e-04f, 6.078390283e-04f, 6.075712880e-04f, 6.073025151e-04f, 6.070327101e-04f, 6.067618735e-04f, 6.064900059e-04f, 6.062171077e-04f, 6.059431796e-04f,
-6.056682221e-04f, 6.053922357e-04f, 6.051152209e-04f, 6.048371784e-04f, 6.045581086e-04f, 6.042780121e-04f, 6.039968895e-04f, 6.037147412e-04f, 6.034315680e-04f, 6.031473703e-04f,
-6.028621486e-04f, 6.025759037e-04f, 6.022886359e-04f, 6.020003459e-04f, 6.017110342e-04f, 6.014207014e-04f, 6.011293481e-04f, 6.008369749e-04f, 6.005435822e-04f, 6.002491708e-04f,
-5.999537411e-04f, 5.996572938e-04f, 5.993598294e-04f, 5.990613485e-04f, 5.987618517e-04f, 5.984613395e-04f, 5.981598127e-04f, 5.978572716e-04f, 5.975537170e-04f, 5.972491495e-04f,
-5.969435696e-04f, 5.966369778e-04f, 5.963293749e-04f, 5.960207614e-04f, 5.957111380e-04f, 5.954005051e-04f, 5.950888635e-04f, 5.947762136e-04f, 5.944625563e-04f, 5.941478919e-04f,
-5.938322212e-04f, 5.935155448e-04f, 5.931978632e-04f, 5.928791772e-04f, 5.925594872e-04f, 5.922387940e-04f, 5.919170981e-04f, 5.915944002e-04f, 5.912707008e-04f, 5.909460007e-04f,
-5.906203005e-04f, 5.902936007e-04f, 5.899659020e-04f, 5.896372051e-04f, 5.893075105e-04f, 5.889768190e-04f, 5.886451311e-04f, 5.883124475e-04f, 5.879787688e-04f, 5.876440956e-04f,
-5.873084287e-04f, 5.869717687e-04f, 5.866341161e-04f, 5.862954717e-04f, 5.859558361e-04f, 5.856152100e-04f, 5.852735940e-04f, 5.849309887e-04f, 5.845873949e-04f, 5.842428132e-04f,
-5.838972442e-04f, 5.835506886e-04f, 5.832031471e-04f, 5.828546203e-04f, 5.825051089e-04f, 5.821546136e-04f, 5.818031351e-04f, 5.814506739e-04f, 5.810972309e-04f, 5.807428066e-04f,
-5.803874018e-04f, 5.800310171e-04f, 5.796736532e-04f, 5.793153108e-04f, 5.789559905e-04f, 5.785956932e-04f, 5.782344193e-04f, 5.778721697e-04f, 5.775089450e-04f, 5.771447460e-04f,
-5.767795732e-04f, 5.764134275e-04f, 5.760463094e-04f, 5.756782198e-04f, 5.753091592e-04f, 5.749391285e-04f, 5.745681283e-04f, 5.741961592e-04f, 5.738232221e-04f, 5.734493177e-04f,
-5.730744465e-04f, 5.726986095e-04f, 5.723218071e-04f, 5.719440403e-04f, 5.715653096e-04f, 5.711856159e-04f, 5.708049598e-04f, 5.704233421e-04f, 5.700407634e-04f, 5.696572246e-04f,
-5.692727262e-04f, 5.688872692e-04f, 5.685008541e-04f, 5.681134817e-04f, 5.677251528e-04f, 5.673358681e-04f, 5.669456282e-04f, 5.665544341e-04f, 5.661622863e-04f, 5.657691857e-04f,
-5.653751330e-04f, 5.649801289e-04f, 5.645841742e-04f, 5.641872696e-04f, 5.637894158e-04f, 5.633906137e-04f, 5.629908639e-04f, 5.625901673e-04f, 5.621885245e-04f, 5.617859364e-04f,
-5.613824037e-04f, 5.609779271e-04f, 5.605725074e-04f, 5.601661455e-04f, 5.597588419e-04f, 5.593505976e-04f, 5.589414132e-04f, 5.585312896e-04f, 5.581202275e-04f, 5.577082277e-04f,
-5.572952910e-04f, 5.568814181e-04f, 5.564666098e-04f, 5.560508670e-04f, 5.556341903e-04f, 5.552165805e-04f, 5.547980385e-04f, 5.543785650e-04f, 5.539581609e-04f, 5.535368268e-04f,
-5.531145636e-04f, 5.526913721e-04f, 5.522672531e-04f, 5.518422074e-04f, 5.514162357e-04f, 5.509893389e-04f, 5.505615177e-04f, 5.501327730e-04f, 5.497031056e-04f, 5.492725162e-04f,
-5.488410057e-04f, 5.484085749e-04f, 5.479752246e-04f, 5.475409556e-04f, 5.471057687e-04f, 5.466696647e-04f, 5.462326445e-04f, 5.457947088e-04f, 5.453558585e-04f, 5.449160943e-04f,
-5.444754172e-04f, 5.440338279e-04f, 5.435913273e-04f, 5.431479161e-04f, 5.427035953e-04f, 5.422583656e-04f, 5.418122279e-04f, 5.413651829e-04f, 5.409172316e-04f, 5.404683748e-04f,
-5.400186132e-04f, 5.395679478e-04f, 5.391163794e-04f, 5.386639087e-04f, 5.382105368e-04f, 5.377562643e-04f, 5.373010922e-04f, 5.368450213e-04f, 5.363880524e-04f, 5.359301864e-04f,
-5.354714241e-04f, 5.350117665e-04f, 5.345512143e-04f, 5.340897683e-04f, 5.336274296e-04f, 5.331641988e-04f, 5.327000770e-04f, 5.322350649e-04f, 5.317691633e-04f, 5.313023733e-04f,
-5.308346955e-04f, 5.303661310e-04f, 5.298966805e-04f, 5.294263450e-04f, 5.289551252e-04f, 5.284830222e-04f, 5.280100367e-04f, 5.275361696e-04f, 5.270614219e-04f, 5.265857943e-04f,
-5.261092878e-04f, 5.256319032e-04f, 5.251536415e-04f, 5.246745035e-04f, 5.241944901e-04f, 5.237136022e-04f, 5.232318406e-04f, 5.227492063e-04f, 5.222657002e-04f, 5.217813232e-04f,
-5.212960761e-04f, 5.208099598e-04f, 5.203229753e-04f, 5.198351235e-04f, 5.193464051e-04f, 5.188568213e-04f, 5.183663727e-04f, 5.178750605e-04f, 5.173828853e-04f, 5.168898483e-04f,
-5.163959502e-04f, 5.159011921e-04f, 5.154055747e-04f, 5.149090990e-04f, 5.144117660e-04f, 5.139135765e-04f, 5.134145315e-04f, 5.129146319e-04f, 5.124138785e-04f, 5.119122724e-04f,
-5.114098145e-04f, 5.109065056e-04f, 5.104023467e-04f, 5.098973387e-04f, 5.093914827e-04f, 5.088847793e-04f, 5.083772298e-04f, 5.078688348e-04f, 5.073595955e-04f, 5.068495126e-04f,
-5.063385873e-04f, 5.058268203e-04f, 5.053142127e-04f, 5.048007654e-04f, 5.042864792e-04f, 5.037713553e-04f, 5.032553945e-04f, 5.027385977e-04f, 5.022209660e-04f, 5.017025002e-04f,
-5.011832013e-04f, 5.006630703e-04f, 5.001421081e-04f, 4.996203157e-04f, 4.990976940e-04f, 4.985742440e-04f, 4.980499666e-04f, 4.975248629e-04f, 4.969989338e-04f, 4.964721801e-04f,
-4.959446030e-04f, 4.954162034e-04f, 4.948869822e-04f, 4.943569404e-04f, 4.938260789e-04f, 4.932943989e-04f, 4.927619011e-04f, 4.922285866e-04f, 4.916944564e-04f, 4.911595115e-04f,
-4.906237528e-04f, 4.900871813e-04f, 4.895497980e-04f, 4.890116038e-04f, 4.884725999e-04f, 4.879327870e-04f, 4.873921663e-04f, 4.868507387e-04f, 4.863085052e-04f, 4.857654668e-04f,
-4.852216245e-04f, 4.846769793e-04f, 4.841315321e-04f, 4.835852841e-04f, 4.830382361e-04f, 4.824903891e-04f, 4.819417442e-04f, 4.813923024e-04f, 4.808420647e-04f, 4.802910321e-04f,
-4.797392055e-04f, 4.791865860e-04f, 4.786331746e-04f, 4.780789723e-04f, 4.775239801e-04f, 4.769681991e-04f, 4.764116302e-04f, 4.758542744e-04f, 4.752961328e-04f, 4.747372064e-04f,
-4.741774962e-04f, 4.736170032e-04f, 4.730557285e-04f, 4.724936730e-04f, 4.719308378e-04f, 4.713672240e-04f, 4.708028325e-04f, 4.702376643e-04f, 4.696717205e-04f, 4.691050022e-04f,
-4.685375103e-04f, 4.679692459e-04f, 4.674002100e-04f, 4.668304037e-04f, 4.662598280e-04f, 4.656884839e-04f, 4.651163724e-04f, 4.645434947e-04f, 4.639698517e-04f, 4.633954446e-04f,
-4.628202742e-04f, 4.622443417e-04f, 4.616676482e-04f, 4.610901946e-04f, 4.605119821e-04f, 4.599330116e-04f, 4.593532842e-04f, 4.587728010e-04f, 4.581915631e-04f, 4.576095714e-04f,
-4.570268270e-04f, 4.564433311e-04f, 4.558590846e-04f, 4.552740886e-04f, 4.546883442e-04f, 4.541018525e-04f, 4.535146144e-04f, 4.529266311e-04f, 4.523379036e-04f, 4.517484330e-04f,
-4.511582204e-04f, 4.505672668e-04f, 4.499755734e-04f, 4.493831411e-04f, 4.487899710e-04f, 4.481960643e-04f, 4.476014220e-04f, 4.470060452e-04f, 4.464099349e-04f, 4.458130922e-04f,
-4.452155183e-04f, 4.446172141e-04f, 4.440181809e-04f, 4.434184195e-04f, 4.428179313e-04f, 4.422167172e-04f, 4.416147783e-04f, 4.410121157e-04f, 4.404087305e-04f, 4.398046237e-04f,
-4.391997966e-04f, 4.385942502e-04f, 4.379879855e-04f, 4.373810037e-04f, 4.367733058e-04f, 4.361648930e-04f, 4.355557664e-04f, 4.349459270e-04f, 4.343353759e-04f, 4.337241144e-04f,
-4.331121434e-04f, 4.324994641e-04f, 4.318860775e-04f, 4.312719849e-04f, 4.306571872e-04f, 4.300416856e-04f, 4.294254813e-04f, 4.288085753e-04f, 4.281909687e-04f, 4.275726626e-04f,
-4.269536583e-04f, 4.263339567e-04f, 4.257135590e-04f, 4.250924663e-04f, 4.244706798e-04f, 4.238482005e-04f, 4.232250297e-04f, 4.226011683e-04f, 4.219766175e-04f, 4.213513785e-04f,
-4.207254524e-04f, 4.200988403e-04f, 4.194715433e-04f, 4.188435626e-04f, 4.182148993e-04f, 4.175855546e-04f, 4.169555294e-04f, 4.163248251e-04f, 4.156934428e-04f, 4.150613834e-04f,
-4.144286483e-04f, 4.137952386e-04f, 4.131611553e-04f, 4.125263996e-04f, 4.118909728e-04f, 4.112548758e-04f, 4.106181099e-04f, 4.099806761e-04f, 4.093425758e-04f, 4.087038099e-04f,
-4.080643796e-04f, 4.074242862e-04f, 4.067835307e-04f, 4.061421143e-04f, 4.055000381e-04f, 4.048573033e-04f, 4.042139111e-04f, 4.035698626e-04f, 4.029251589e-04f, 4.022798013e-04f,
-4.016337909e-04f, 4.009871288e-04f, 4.003398162e-04f, 3.996918543e-04f, 3.990432442e-04f, 3.983939871e-04f, 3.977440841e-04f, 3.970935365e-04f, 3.964423454e-04f, 3.957905119e-04f,
-3.951380373e-04f, 3.944849227e-04f, 3.938311692e-04f, 3.931767781e-04f, 3.925217505e-04f, 3.918660876e-04f, 3.912097906e-04f, 3.905528606e-04f, 3.898952988e-04f, 3.892371064e-04f,
-3.885782846e-04f, 3.879188346e-04f, 3.872587575e-04f, 3.865980546e-04f, 3.859367269e-04f, 3.852747758e-04f, 3.846122023e-04f, 3.839490077e-04f, 3.832851932e-04f, 3.826207598e-04f,
-3.819557090e-04f, 3.812900417e-04f, 3.806237593e-04f, 3.799568628e-04f, 3.792893536e-04f, 3.786212328e-04f, 3.779525015e-04f, 3.772831611e-04f, 3.766132126e-04f, 3.759426573e-04f,
-3.752714964e-04f, 3.745997311e-04f, 3.739273625e-04f, 3.732543920e-04f, 3.725808206e-04f, 3.719066496e-04f, 3.712318803e-04f, 3.705565137e-04f, 3.698805511e-04f, 3.692039938e-04f,
-3.685268429e-04f, 3.678490997e-04f, 3.671707652e-04f, 3.664918409e-04f, 3.658123278e-04f, 3.651322272e-04f, 3.644515404e-04f, 3.637702684e-04f, 3.630884126e-04f, 3.624059741e-04f,
-3.617229542e-04f, 3.610393541e-04f, 3.603551750e-04f, 3.596704182e-04f, 3.589850848e-04f, 3.582991760e-04f, 3.576126932e-04f, 3.569256375e-04f, 3.562380101e-04f, 3.555498124e-04f,
-3.548610454e-04f, 3.541717105e-04f, 3.534818088e-04f, 3.527913416e-04f, 3.521003102e-04f, 3.514087157e-04f, 3.507165594e-04f, 3.500238425e-04f, 3.493305663e-04f, 3.486367320e-04f,
-3.479423408e-04f, 3.472473940e-04f, 3.465518928e-04f, 3.458558384e-04f, 3.451592321e-04f, 3.444620752e-04f, 3.437643688e-04f, 3.430661142e-04f, 3.423673127e-04f, 3.416679655e-04f,
-3.409680738e-04f, 3.402676389e-04f, 3.395666621e-04f, 3.388651445e-04f, 3.381630875e-04f, 3.374604922e-04f, 3.367573600e-04f, 3.360536921e-04f, 3.353494897e-04f, 3.346447541e-04f,
-3.339394865e-04f, 3.332336883e-04f, 3.325273606e-04f, 3.318205046e-04f, 3.311131218e-04f, 3.304052133e-04f, 3.296967804e-04f, 3.289878243e-04f, 3.282783463e-04f, 3.275683477e-04f,
-3.268578297e-04f, 3.261467936e-04f, 3.254352406e-04f, 3.247231721e-04f, 3.240105892e-04f, 3.232974933e-04f, 3.225838856e-04f, 3.218697674e-04f, 3.211551399e-04f, 3.204400045e-04f,
-3.197243623e-04f, 3.190082147e-04f, 3.182915630e-04f, 3.175744083e-04f, 3.168567520e-04f, 3.161385954e-04f, 3.154199397e-04f, 3.147007862e-04f, 3.139811362e-04f, 3.132609909e-04f,
-3.125403516e-04f, 3.118192197e-04f, 3.110975964e-04f, 3.103754829e-04f, 3.096528806e-04f, 3.089297907e-04f, 3.082062146e-04f, 3.074821534e-04f, 3.067576085e-04f, 3.060325812e-04f,
-3.053070728e-04f, 3.045810844e-04f, 3.038546176e-04f, 3.031276734e-04f, 3.024002532e-04f, 3.016723583e-04f, 3.009439900e-04f, 3.002151496e-04f, 2.994858383e-04f, 2.987560575e-04f,
-2.980258084e-04f, 2.972950924e-04f, 2.965639107e-04f, 2.958322647e-04f, 2.951001555e-04f, 2.943675846e-04f, 2.936345532e-04f, 2.929010627e-04f, 2.921671142e-04f, 2.914327092e-04f,
-2.906978489e-04f, 2.899625346e-04f, 2.892267676e-04f, 2.884905492e-04f, 2.877538808e-04f, 2.870167635e-04f, 2.862791989e-04f, 2.855411880e-04f, 2.848027323e-04f, 2.840638330e-04f,
-2.833244915e-04f, 2.825847091e-04f, 2.818444870e-04f, 2.811038266e-04f, 2.803627291e-04f, 2.796211960e-04f, 2.788792285e-04f, 2.781368279e-04f, 2.773939956e-04f, 2.766507327e-04f,
-2.759070408e-04f, 2.751629210e-04f, 2.744183747e-04f, 2.736734032e-04f, 2.729280078e-04f, 2.721821899e-04f, 2.714359507e-04f, 2.706892916e-04f, 2.699422139e-04f, 2.691947189e-04f,
-2.684468079e-04f, 2.676984823e-04f, 2.669497433e-04f, 2.662005923e-04f, 2.654510307e-04f, 2.647010597e-04f, 2.639506806e-04f, 2.631998949e-04f, 2.624487037e-04f, 2.616971085e-04f,
-2.609451106e-04f, 2.601927112e-04f, 2.594399118e-04f, 2.586867136e-04f, 2.579331180e-04f, 2.571791263e-04f, 2.564247398e-04f, 2.556699599e-04f, 2.549147878e-04f, 2.541592251e-04f,
-2.534032728e-04f, 2.526469325e-04f, 2.518902054e-04f, 2.511330928e-04f, 2.503755961e-04f, 2.496177167e-04f, 2.488594558e-04f, 2.481008149e-04f, 2.473417951e-04f, 2.465823980e-04f,
-2.458226247e-04f, 2.450624767e-04f, 2.443019553e-04f, 2.435410619e-04f, 2.427797977e-04f, 2.420181641e-04f, 2.412561624e-04f, 2.404937941e-04f, 2.397310604e-04f, 2.389679627e-04f,
-2.382045022e-04f, 2.374406805e-04f, 2.366764988e-04f, 2.359119584e-04f, 2.351470607e-04f, 2.343818071e-04f, 2.336161989e-04f, 2.328502374e-04f, 2.320839240e-04f, 2.313172600e-04f,
-2.305502468e-04f, 2.297828858e-04f, 2.290151783e-04f, 2.282471255e-04f, 2.274787290e-04f, 2.267099900e-04f, 2.259409099e-04f, 2.251714900e-04f, 2.244017318e-04f, 2.236316365e-04f,
-2.228612054e-04f, 2.220904401e-04f, 2.213193417e-04f, 2.205479117e-04f, 2.197761515e-04f, 2.190040623e-04f, 2.182316455e-04f, 2.174589026e-04f, 2.166858348e-04f, 2.159124434e-04f,
-2.151387300e-04f, 2.143646958e-04f, 2.135903422e-04f, 2.128156705e-04f, 2.120406821e-04f, 2.112653784e-04f, 2.104897607e-04f, 2.097138304e-04f, 2.089375888e-04f, 2.081610374e-04f,
-2.073841774e-04f, 2.066070103e-04f, 2.058295374e-04f, 2.050517601e-04f, 2.042736797e-04f, 2.034952976e-04f, 2.027166151e-04f, 2.019376337e-04f, 2.011583547e-04f, 2.003787794e-04f,
-1.995989093e-04f, 1.988187457e-04f, 1.980382899e-04f, 1.972575434e-04f, 1.964765075e-04f, 1.956951836e-04f, 1.949135730e-04f, 1.941316771e-04f, 1.933494973e-04f, 1.925670350e-04f,
-1.917842915e-04f, 1.910012682e-04f, 1.902179665e-04f, 1.894343877e-04f, 1.886505333e-04f, 1.878664045e-04f, 1.870820028e-04f, 1.862973296e-04f, 1.855123861e-04f, 1.847271739e-04f,
-1.839416942e-04f, 1.831559485e-04f, 1.823699381e-04f, 1.815836643e-04f, 1.807971287e-04f, 1.800103325e-04f, 1.792232771e-04f, 1.784359639e-04f, 1.776483943e-04f, 1.768605697e-04f,
-1.760724914e-04f, 1.752841609e-04f, 1.744955794e-04f, 1.737067484e-04f, 1.729176693e-04f, 1.721283434e-04f, 1.713387721e-04f, 1.705489569e-04f, 1.697588990e-04f, 1.689685999e-04f,
-1.681780609e-04f, 1.673872835e-04f, 1.665962690e-04f, 1.658050188e-04f, 1.650135343e-04f, 1.642218168e-04f, 1.634298678e-04f, 1.626376886e-04f, 1.618452807e-04f, 1.610526453e-04f,
-1.602597839e-04f, 1.594666979e-04f, 1.586733887e-04f, 1.578798576e-04f, 1.570861061e-04f, 1.562921355e-04f, 1.554979472e-04f, 1.547035426e-04f, 1.539089231e-04f, 1.531140900e-04f,
-1.523190448e-04f, 1.515237889e-04f, 1.507283236e-04f, 1.499326503e-04f, 1.491367704e-04f, 1.483406854e-04f, 1.475443966e-04f, 1.467479053e-04f, 1.459512130e-04f, 1.451543211e-04f,
-1.443572309e-04f, 1.435599439e-04f, 1.427624615e-04f, 1.419647850e-04f, 1.411669158e-04f, 1.403688553e-04f, 1.395706049e-04f, 1.387721661e-04f, 1.379735401e-04f, 1.371747284e-04f,
-1.363757324e-04f, 1.355765535e-04f, 1.347771931e-04f, 1.339776525e-04f, 1.331779332e-04f, 1.323780366e-04f, 1.315779639e-04f, 1.307777168e-04f, 1.299772965e-04f, 1.291767044e-04f,
-1.283759419e-04f, 1.275750105e-04f, 1.267739115e-04f, 1.259726463e-04f, 1.251712163e-04f, 1.243696229e-04f, 1.235678676e-04f, 1.227659516e-04f, 1.219638764e-04f, 1.211616435e-04f,
-1.203592541e-04f, 1.195567098e-04f, 1.187540118e-04f, 1.179511616e-04f, 1.171481606e-04f, 1.163450102e-04f, 1.155417118e-04f, 1.147382668e-04f, 1.139346765e-04f, 1.131309425e-04f,
-1.123270660e-04f, 1.115230485e-04f, 1.107188914e-04f, 1.099145960e-04f, 1.091101638e-04f, 1.083055963e-04f, 1.075008947e-04f, 1.066960604e-04f, 1.058910950e-04f, 1.050859997e-04f,
-1.042807760e-04f, 1.034754253e-04f, 1.026699490e-04f, 1.018643485e-04f, 1.010586251e-04f, 1.002527804e-04f, 9.944681559e-05f, 9.864073220e-05f, 9.783453160e-05f, 9.702821519e-05f,
-9.622178438e-05f, 9.541524057e-05f, 9.460858515e-05f, 9.380181953e-05f, 9.299494511e-05f, 9.218796330e-05f, 9.138087550e-05f, 9.057368310e-05f, 8.976638752e-05f, 8.895899015e-05f,
-8.815149240e-05f, 8.734389566e-05f, 8.653620135e-05f, 8.572841087e-05f, 8.492052562e-05f, 8.411254699e-05f, 8.330447641e-05f, 8.249631526e-05f, 8.168806495e-05f, 8.087972689e-05f,
-8.007130248e-05f, 7.926279311e-05f, 7.845420021e-05f, 7.764552516e-05f, 7.683676938e-05f, 7.602793426e-05f, 7.521902121e-05f, 7.441003164e-05f, 7.360096695e-05f, 7.279182853e-05f,
-7.198261780e-05f, 7.117333616e-05f, 7.036398502e-05f, 6.955456577e-05f, 6.874507983e-05f, 6.793552858e-05f, 6.712591345e-05f, 6.631623584e-05f, 6.550649713e-05f, 6.469669876e-05f,
-6.388684210e-05f, 6.307692858e-05f, 6.226695959e-05f, 6.145693654e-05f, 6.064686083e-05f, 5.983673387e-05f, 5.902655706e-05f, 5.821633180e-05f, 5.740605950e-05f, 5.659574157e-05f,
-5.578537940e-05f, 5.497497440e-05f, 5.416452797e-05f, 5.335404153e-05f, 5.254351647e-05f, 5.173295419e-05f, 5.092235611e-05f, 5.011172362e-05f, 4.930105813e-05f, 4.849036104e-05f,
-4.767963376e-05f, 4.686887768e-05f, 4.605809423e-05f, 4.524728478e-05f, 4.443645076e-05f, 4.362559357e-05f, 4.281471460e-05f, 4.200381526e-05f, 4.119289696e-05f, 4.038196110e-05f,
-3.957100908e-05f, 3.876004230e-05f, 3.794906217e-05f, 3.713807009e-05f, 3.632706747e-05f, 3.551605570e-05f, 3.470503619e-05f, 3.389401035e-05f, 3.308297956e-05f, 3.227194525e-05f,
-3.146090881e-05f, 3.064987164e-05f, 2.983883515e-05f, 2.902780073e-05f, 2.821676979e-05f, 2.740574374e-05f, 2.659472396e-05f, 2.578371188e-05f, 2.497270888e-05f, 2.416171637e-05f,
-2.335073574e-05f, 2.253976842e-05f, 2.172881578e-05f, 2.091787924e-05f, 2.010696019e-05f, 1.929606004e-05f, 1.848518019e-05f, 1.767432203e-05f, 1.686348697e-05f, 1.605267641e-05f,
-1.524189175e-05f, 1.443113439e-05f, 1.362040573e-05f, 1.280970716e-05f, 1.199904010e-05f, 1.118840593e-05f, 1.037780606e-05f, 9.567241887e-06f, 8.756714810e-06f, 7.946226228e-06f,
-7.135777540e-06f, 6.325370144e-06f, 5.515005439e-06f, 4.704684823e-06f, 3.894409694e-06f, 3.084181451e-06f, 2.274001490e-06f, 1.463871210e-06f, 6.537920085e-07f, -1.562347178e-07f,
--9.662075718e-07f, -1.776125156e-06f, -2.585986075e-06f, -3.395788931e-06f, -4.205532329e-06f, -5.015214871e-06f, -5.824835162e-06f, -6.634391807e-06f, -7.443883410e-06f, -8.253308575e-06f,
--9.062665908e-06f, -9.871954013e-06f, -1.068117150e-05f, -1.149031696e-05f, -1.229938902e-05f, -1.310838627e-05f, -1.391730732e-05f, -1.472615078e-05f, -1.553491525e-05f, -1.634359935e-05f,
--1.715220167e-05f, -1.796072083e-05f, -1.876915543e-05f, -1.957750409e-05f, -2.038576540e-05f, -2.119393798e-05f, -2.200202043e-05f, -2.281001137e-05f, -2.361790941e-05f, -2.442571314e-05f,
--2.523342119e-05f, -2.604103216e-05f, -2.684854466e-05f, -2.765595731e-05f, -2.846326871e-05f, -2.927047747e-05f, -3.007758221e-05f, -3.088458153e-05f, -3.169147406e-05f, -3.249825839e-05f,
--3.330493314e-05f, -3.411149693e-05f, -3.491794837e-05f, -3.572428607e-05f, -3.653050864e-05f, -3.733661470e-05f, -3.814260286e-05f, -3.894847174e-05f, -3.975421995e-05f, -4.055984610e-05f,
--4.136534882e-05f, -4.217072671e-05f, -4.297597839e-05f, -4.378110248e-05f, -4.458609759e-05f, -4.539096234e-05f, -4.619569535e-05f, -4.700029524e-05f, -4.780476062e-05f, -4.860909011e-05f,
--4.941328233e-05f, -5.021733589e-05f, -5.102124942e-05f, -5.182502154e-05f, -5.262865087e-05f, -5.343213602e-05f, -5.423547561e-05f, -5.503866827e-05f, -5.584171262e-05f, -5.664460728e-05f,
--5.744735087e-05f, -5.824994201e-05f, -5.905237932e-05f, -5.985466143e-05f, -6.065678697e-05f, -6.145875455e-05f, -6.226056279e-05f, -6.306221033e-05f, -6.386369578e-05f, -6.466501778e-05f,
--6.546617494e-05f, -6.626716590e-05f, -6.706798928e-05f, -6.786864370e-05f, -6.866912779e-05f, -6.946944018e-05f, -7.026957950e-05f, -7.106954437e-05f, -7.186933343e-05f, -7.266894530e-05f,
--7.346837861e-05f, -7.426763199e-05f, -7.506670408e-05f, -7.586559349e-05f, -7.666429887e-05f, -7.746281884e-05f, -7.826115203e-05f, -7.905929708e-05f, -7.985725263e-05f, -8.065501729e-05f,
--8.145258971e-05f, -8.224996852e-05f, -8.304715235e-05f, -8.384413984e-05f, -8.464092962e-05f, -8.543752033e-05f, -8.623391061e-05f, -8.703009909e-05f, -8.782608440e-05f, -8.862186519e-05f,
--8.941744009e-05f, -9.021280774e-05f, -9.100796678e-05f, -9.180291585e-05f, -9.259765358e-05f, -9.339217862e-05f, -9.418648961e-05f, -9.498058519e-05f, -9.577446400e-05f, -9.656812467e-05f,
--9.736156587e-05f, -9.815478621e-05f, -9.894778436e-05f, -9.974055895e-05f, -1.005331086e-04f, -1.013254320e-04f, -1.021175278e-04f, -1.029093946e-04f, -1.037010311e-04f, -1.044924359e-04f,
--1.052836076e-04f, -1.060745450e-04f, -1.068652466e-04f, -1.076557111e-04f, -1.084459372e-04f, -1.092359235e-04f, -1.100256686e-04f, -1.108151712e-04f, -1.116044300e-04f, -1.123934436e-04f,
--1.131822107e-04f, -1.139707299e-04f, -1.147589998e-04f, -1.155470191e-04f, -1.163347866e-04f, -1.171223007e-04f, -1.179095602e-04f, -1.186965638e-04f, -1.194833101e-04f, -1.202697977e-04f,
--1.210560253e-04f, -1.218419916e-04f, -1.226276952e-04f, -1.234131348e-04f, -1.241983090e-04f, -1.249832166e-04f, -1.257678561e-04f, -1.265522262e-04f, -1.273363256e-04f, -1.281201530e-04f,
--1.289037069e-04f, -1.296869862e-04f, -1.304699894e-04f, -1.312527151e-04f, -1.320351622e-04f, -1.328173292e-04f, -1.335992148e-04f, -1.343808176e-04f, -1.351621364e-04f, -1.359431698e-04f,
--1.367239164e-04f, -1.375043750e-04f, -1.382845442e-04f, -1.390644227e-04f, -1.398440091e-04f, -1.406233021e-04f, -1.414023005e-04f, -1.421810028e-04f, -1.429594077e-04f, -1.437375140e-04f,
--1.445153202e-04f, -1.452928251e-04f, -1.460700274e-04f, -1.468469256e-04f, -1.476235185e-04f, -1.483998049e-04f, -1.491757832e-04f, -1.499514523e-04f, -1.507268108e-04f, -1.515018574e-04f,
--1.522765907e-04f, -1.530510095e-04f, -1.538251124e-04f, -1.545988981e-04f, -1.553723653e-04f, -1.561455127e-04f, -1.569183389e-04f, -1.576908427e-04f, -1.584630228e-04f, -1.592348777e-04f,
--1.600064063e-04f, -1.607776071e-04f, -1.615484790e-04f, -1.623190205e-04f, -1.630892303e-04f, -1.638591072e-04f, -1.646286499e-04f, -1.653978570e-04f, -1.661667272e-04f, -1.669352592e-04f,
--1.677034517e-04f, -1.684713035e-04f, -1.692388131e-04f, -1.700059794e-04f, -1.707728009e-04f, -1.715392764e-04f, -1.723054046e-04f, -1.730711842e-04f, -1.738366139e-04f, -1.746016924e-04f,
--1.753664183e-04f, -1.761307905e-04f, -1.768948075e-04f, -1.776584681e-04f, -1.784217710e-04f, -1.791847149e-04f, -1.799472985e-04f, -1.807095205e-04f, -1.814713797e-04f, -1.822328746e-04f,
--1.829940041e-04f, -1.837547668e-04f, -1.845151615e-04f, -1.852751868e-04f, -1.860348415e-04f, -1.867941242e-04f, -1.875530338e-04f, -1.883115688e-04f, -1.890697281e-04f, -1.898275102e-04f,
--1.905849141e-04f, -1.913419383e-04f, -1.920985815e-04f, -1.928548426e-04f, -1.936107201e-04f, -1.943662129e-04f, -1.951213197e-04f, -1.958760391e-04f, -1.966303699e-04f, -1.973843108e-04f,
--1.981378605e-04f, -1.988910178e-04f, -1.996437813e-04f, -2.003961499e-04f, -2.011481222e-04f, -2.018996969e-04f, -2.026508729e-04f, -2.034016487e-04f, -2.041520232e-04f, -2.049019950e-04f,
--2.056515630e-04f, -2.064007257e-04f, -2.071494820e-04f, -2.078978306e-04f, -2.086457703e-04f, -2.093932997e-04f, -2.101404176e-04f, -2.108871227e-04f, -2.116334137e-04f, -2.123792895e-04f,
--2.131247487e-04f, -2.138697901e-04f, -2.146144125e-04f, -2.153586144e-04f, -2.161023948e-04f, -2.168457523e-04f, -2.175886857e-04f, -2.183311937e-04f, -2.190732751e-04f, -2.198149286e-04f,
--2.205561530e-04f, -2.212969470e-04f, -2.220373093e-04f, -2.227772387e-04f, -2.235167340e-04f, -2.242557939e-04f, -2.249944172e-04f, -2.257326026e-04f, -2.264703488e-04f, -2.272076546e-04f,
--2.279445188e-04f, -2.286809402e-04f, -2.294169174e-04f, -2.301524492e-04f, -2.308875345e-04f, -2.316221719e-04f, -2.323563602e-04f, -2.330900982e-04f, -2.338233846e-04f, -2.345562182e-04f,
--2.352885978e-04f, -2.360205221e-04f, -2.367519898e-04f, -2.374829999e-04f, -2.382135509e-04f, -2.389436418e-04f, -2.396732712e-04f, -2.404024379e-04f, -2.411311407e-04f, -2.418593784e-04f,
--2.425871497e-04f, -2.433144534e-04f, -2.440412883e-04f, -2.447676532e-04f, -2.454935468e-04f, -2.462189679e-04f, -2.469439153e-04f, -2.476683877e-04f, -2.483923840e-04f, -2.491159029e-04f,
--2.498389433e-04f, -2.505615038e-04f, -2.512835832e-04f, -2.520051805e-04f, -2.527262942e-04f, -2.534469233e-04f, -2.541670665e-04f, -2.548867225e-04f, -2.556058903e-04f, -2.563245685e-04f,
--2.570427560e-04f, -2.577604515e-04f, -2.584776539e-04f, -2.591943619e-04f, -2.599105743e-04f, -2.606262900e-04f, -2.613415076e-04f, -2.620562261e-04f, -2.627704442e-04f, -2.634841608e-04f,
--2.641973745e-04f, -2.649100842e-04f, -2.656222887e-04f, -2.663339869e-04f, -2.670451775e-04f, -2.677558592e-04f, -2.684660311e-04f, -2.691756917e-04f, -2.698848400e-04f, -2.705934747e-04f,
--2.713015947e-04f, -2.720091987e-04f, -2.727162857e-04f, -2.734228543e-04f, -2.741289034e-04f, -2.748344318e-04f, -2.755394383e-04f, -2.762439218e-04f, -2.769478810e-04f, -2.776513149e-04f,
--2.783542221e-04f, -2.790566015e-04f, -2.797584520e-04f, -2.804597723e-04f, -2.811605613e-04f, -2.818608178e-04f, -2.825605407e-04f, -2.832597286e-04f, -2.839583806e-04f, -2.846564954e-04f,
--2.853540718e-04f, -2.860511087e-04f, -2.867476049e-04f, -2.874435592e-04f, -2.881389704e-04f, -2.888338375e-04f, -2.895281592e-04f, -2.902219343e-04f, -2.909151618e-04f, -2.916078404e-04f,
--2.922999689e-04f, -2.929915463e-04f, -2.936825714e-04f, -2.943730429e-04f, -2.950629598e-04f, -2.957523209e-04f, -2.964411250e-04f, -2.971293710e-04f, -2.978170577e-04f, -2.985041839e-04f,
--2.991907486e-04f, -2.998767506e-04f, -3.005621887e-04f, -3.012470618e-04f, -3.019313687e-04f, -3.026151083e-04f, -3.032982794e-04f, -3.039808809e-04f, -3.046629117e-04f, -3.053443706e-04f,
--3.060252564e-04f, -3.067055681e-04f, -3.073853045e-04f, -3.080644644e-04f, -3.087430467e-04f, -3.094210504e-04f, -3.100984742e-04f, -3.107753170e-04f, -3.114515777e-04f, -3.121272551e-04f,
--3.128023482e-04f, -3.134768558e-04f, -3.141507767e-04f, -3.148241099e-04f, -3.154968542e-04f, -3.161690085e-04f, -3.168405717e-04f, -3.175115426e-04f, -3.181819202e-04f, -3.188517032e-04f,
--3.195208907e-04f, -3.201894814e-04f, -3.208574743e-04f, -3.215248682e-04f, -3.221916621e-04f, -3.228578547e-04f, -3.235234451e-04f, -3.241884320e-04f, -3.248528145e-04f, -3.255165913e-04f,
--3.261797614e-04f, -3.268423236e-04f, -3.275042769e-04f, -3.281656201e-04f, -3.288263522e-04f, -3.294864720e-04f, -3.301459785e-04f, -3.308048705e-04f, -3.314631470e-04f, -3.321208068e-04f,
--3.327778489e-04f, -3.334342721e-04f, -3.340900754e-04f, -3.347452576e-04f, -3.353998178e-04f, -3.360537547e-04f, -3.367070673e-04f, -3.373597545e-04f, -3.380118153e-04f, -3.386632485e-04f,
--3.393140530e-04f, -3.399642278e-04f, -3.406137718e-04f, -3.412626839e-04f, -3.419109631e-04f, -3.425586081e-04f, -3.432056181e-04f, -3.438519918e-04f, -3.444977283e-04f, -3.451428264e-04f,
--3.457872850e-04f, -3.464311032e-04f, -3.470742798e-04f, -3.477168138e-04f, -3.483587040e-04f, -3.489999495e-04f, -3.496405491e-04f, -3.502805018e-04f, -3.509198065e-04f, -3.515584622e-04f,
--3.521964679e-04f, -3.528338223e-04f, -3.534705245e-04f, -3.541065735e-04f, -3.547419682e-04f, -3.553767074e-04f, -3.560107902e-04f, -3.566442156e-04f, -3.572769823e-04f, -3.579090895e-04f,
--3.585405361e-04f, -3.591713210e-04f, -3.598014431e-04f, -3.604309014e-04f, -3.610596949e-04f, -3.616878226e-04f, -3.623152833e-04f, -3.629420761e-04f, -3.635681999e-04f, -3.641936537e-04f,
--3.648184364e-04f, -3.654425470e-04f, -3.660659844e-04f, -3.666887477e-04f, -3.673108358e-04f, -3.679322477e-04f, -3.685529823e-04f, -3.691730386e-04f, -3.697924156e-04f, -3.704111122e-04f,
--3.710291275e-04f, -3.716464604e-04f, -3.722631099e-04f, -3.728790749e-04f, -3.734943545e-04f, -3.741089476e-04f, -3.747228532e-04f, -3.753360703e-04f, -3.759485979e-04f, -3.765604350e-04f,
--3.771715805e-04f, -3.777820335e-04f, -3.783917929e-04f, -3.790008577e-04f, -3.796092269e-04f, -3.802168996e-04f, -3.808238746e-04f, -3.814301511e-04f, -3.820357280e-04f, -3.826406042e-04f,
--3.832447789e-04f, -3.838482510e-04f, -3.844510195e-04f, -3.850530834e-04f, -3.856544417e-04f, -3.862550935e-04f, -3.868550377e-04f, -3.874542733e-04f, -3.880527994e-04f, -3.886506150e-04f,
--3.892477190e-04f, -3.898441105e-04f, -3.904397886e-04f, -3.910347521e-04f, -3.916290003e-04f, -3.922225319e-04f, -3.928153462e-04f, -3.934074421e-04f, -3.939988186e-04f, -3.945894748e-04f,
--3.951794097e-04f, -3.957686223e-04f, -3.963571116e-04f, -3.969448767e-04f, -3.975319166e-04f, -3.981182304e-04f, -3.987038170e-04f, -3.992886756e-04f, -3.998728051e-04f, -4.004562045e-04f,
--4.010388730e-04f, -4.016208096e-04f, -4.022020133e-04f, -4.027824831e-04f, -4.033622181e-04f, -4.039412174e-04f, -4.045194799e-04f, -4.050970048e-04f, -4.056737911e-04f, -4.062498379e-04f,
--4.068251441e-04f, -4.073997089e-04f, -4.079735313e-04f, -4.085466103e-04f, -4.091189451e-04f, -4.096905346e-04f, -4.102613780e-04f, -4.108314743e-04f, -4.114008226e-04f, -4.119694219e-04f,
--4.125372713e-04f, -4.131043699e-04f, -4.136707167e-04f, -4.142363109e-04f, -4.148011514e-04f, -4.153652373e-04f, -4.159285678e-04f, -4.164911419e-04f, -4.170529587e-04f, -4.176140172e-04f,
--4.181743166e-04f, -4.187338559e-04f, -4.192926342e-04f, -4.198506506e-04f, -4.204079042e-04f, -4.209643940e-04f, -4.215201192e-04f, -4.220750789e-04f, -4.226292720e-04f, -4.231826978e-04f,
--4.237353553e-04f, -4.242872437e-04f, -4.248383619e-04f, -4.253887092e-04f, -4.259382845e-04f, -4.264870871e-04f, -4.270351160e-04f, -4.275823703e-04f, -4.281288492e-04f, -4.286745516e-04f,
--4.292194768e-04f, -4.297636239e-04f, -4.303069919e-04f, -4.308495799e-04f, -4.313913872e-04f, -4.319324127e-04f, -4.324726557e-04f, -4.330121152e-04f, -4.335507904e-04f, -4.340886803e-04f,
--4.346257841e-04f, -4.351621009e-04f, -4.356976299e-04f, -4.362323702e-04f, -4.367663208e-04f, -4.372994810e-04f, -4.378318498e-04f, -4.383634265e-04f, -4.388942100e-04f, -4.394241996e-04f,
--4.399533944e-04f, -4.404817935e-04f, -4.410093961e-04f, -4.415362013e-04f, -4.420622083e-04f, -4.425874162e-04f, -4.431118241e-04f, -4.436354312e-04f, -4.441582366e-04f, -4.446802395e-04f,
--4.452014391e-04f, -4.457218344e-04f, -4.462414247e-04f, -4.467602091e-04f, -4.472781867e-04f, -4.477953568e-04f, -4.483117184e-04f, -4.488272707e-04f, -4.493420130e-04f, -4.498559443e-04f,
--4.503690638e-04f, -4.508813707e-04f, -4.513928642e-04f, -4.519035434e-04f, -4.524134075e-04f, -4.529224557e-04f, -4.534306871e-04f, -4.539381009e-04f, -4.544446964e-04f, -4.549504726e-04f,
--4.554554287e-04f, -4.559595641e-04f, -4.564628777e-04f, -4.569653688e-04f, -4.574670366e-04f, -4.579678803e-04f, -4.584678991e-04f, -4.589670921e-04f, -4.594654586e-04f, -4.599629977e-04f,
--4.604597087e-04f, -4.609555907e-04f, -4.614506429e-04f, -4.619448645e-04f, -4.624382548e-04f, -4.629308129e-04f, -4.634225381e-04f, -4.639134295e-04f, -4.644034863e-04f, -4.648927078e-04f,
--4.653810931e-04f, -4.658686416e-04f, -4.663553523e-04f, -4.668412245e-04f, -4.673262575e-04f, -4.678104503e-04f, -4.682938024e-04f, -4.687763128e-04f, -4.692579808e-04f, -4.697388056e-04f,
--4.702187865e-04f, -4.706979226e-04f, -4.711762132e-04f, -4.716536576e-04f, -4.721302549e-04f, -4.726060044e-04f, -4.730809054e-04f, -4.735549569e-04f, -4.740281584e-04f, -4.745005091e-04f,
--4.749720080e-04f, -4.754426547e-04f, -4.759124481e-04f, -4.763813877e-04f, -4.768494726e-04f, -4.773167021e-04f, -4.777830755e-04f, -4.782485919e-04f, -4.787132507e-04f, -4.791770511e-04f,
--4.796399924e-04f, -4.801020738e-04f, -4.805632945e-04f, -4.810236539e-04f, -4.814831511e-04f, -4.819417855e-04f, -4.823995564e-04f, -4.828564629e-04f, -4.833125043e-04f, -4.837676800e-04f,
--4.842219892e-04f, -4.846754312e-04f, -4.851280051e-04f, -4.855797104e-04f, -4.860305463e-04f, -4.864805121e-04f, -4.869296070e-04f, -4.873778303e-04f, -4.878251813e-04f, -4.882716593e-04f,
--4.887172636e-04f, -4.891619935e-04f, -4.896058483e-04f, -4.900488272e-04f, -4.904909295e-04f, -4.909321545e-04f, -4.913725016e-04f, -4.918119701e-04f, -4.922505591e-04f, -4.926882681e-04f,
--4.931250963e-04f, -4.935610430e-04f, -4.939961076e-04f, -4.944302893e-04f, -4.948635874e-04f, -4.952960013e-04f, -4.957275303e-04f, -4.961581737e-04f, -4.965879308e-04f, -4.970168008e-04f,
--4.974447833e-04f, -4.978718773e-04f, -4.982980823e-04f, -4.987233977e-04f, -4.991478226e-04f, -4.995713565e-04f, -4.999939986e-04f, -5.004157484e-04f, -5.008366051e-04f, -5.012565680e-04f,
--5.016756365e-04f, -5.020938100e-04f, -5.025110877e-04f, -5.029274690e-04f, -5.033429532e-04f, -5.037575398e-04f, -5.041712279e-04f, -5.045840171e-04f, -5.049959065e-04f, -5.054068956e-04f,
--5.058169837e-04f, -5.062261702e-04f, -5.066344544e-04f, -5.070418357e-04f, -5.074483133e-04f, -5.078538868e-04f, -5.082585554e-04f, -5.086623185e-04f, -5.090651755e-04f, -5.094671257e-04f,
--5.098681685e-04f, -5.102683033e-04f, -5.106675293e-04f, -5.110658461e-04f, -5.114632530e-04f, -5.118597493e-04f, -5.122553344e-04f, -5.126500077e-04f, -5.130437685e-04f, -5.134366164e-04f,
--5.138285505e-04f, -5.142195704e-04f, -5.146096754e-04f, -5.149988649e-04f, -5.153871382e-04f, -5.157744948e-04f, -5.161609341e-04f, -5.165464554e-04f, -5.169310581e-04f, -5.173147417e-04f,
--5.176975056e-04f, -5.180793490e-04f, -5.184602715e-04f, -5.188402725e-04f, -5.192193513e-04f, -5.195975073e-04f, -5.199747400e-04f, -5.203510488e-04f, -5.207264330e-04f, -5.211008921e-04f,
--5.214744256e-04f, -5.218470327e-04f, -5.222187130e-04f, -5.225894659e-04f, -5.229592907e-04f, -5.233281869e-04f, -5.236961540e-04f, -5.240631913e-04f, -5.244292982e-04f, -5.247944743e-04f,
--5.251587189e-04f, -5.255220315e-04f, -5.258844114e-04f, -5.262458583e-04f, -5.266063713e-04f, -5.269659501e-04f, -5.273245941e-04f, -5.276823026e-04f, -5.280390752e-04f, -5.283949113e-04f,
--5.287498102e-04f, -5.291037716e-04f, -5.294567948e-04f, -5.298088793e-04f, -5.301600245e-04f, -5.305102299e-04f, -5.308594949e-04f, -5.312078191e-04f, -5.315552018e-04f, -5.319016426e-04f,
--5.322471408e-04f, -5.325916960e-04f, -5.329353076e-04f, -5.332779751e-04f, -5.336196980e-04f, -5.339604757e-04f, -5.343003077e-04f, -5.346391935e-04f, -5.349771326e-04f, -5.353141244e-04f,
--5.356501684e-04f, -5.359852641e-04f, -5.363194110e-04f, -5.366526086e-04f, -5.369848563e-04f, -5.373161537e-04f, -5.376465002e-04f, -5.379758953e-04f, -5.383043386e-04f, -5.386318294e-04f,
--5.389583674e-04f, -5.392839520e-04f, -5.396085827e-04f, -5.399322591e-04f, -5.402549805e-04f, -5.405767466e-04f, -5.408975568e-04f, -5.412174106e-04f, -5.415363076e-04f, -5.418542473e-04f,
--5.421712291e-04f, -5.424872527e-04f, -5.428023174e-04f, -5.431164229e-04f, -5.434295686e-04f, -5.437417541e-04f, -5.440529789e-04f, -5.443632425e-04f, -5.446725445e-04f, -5.449808843e-04f,
--5.452882615e-04f, -5.455946757e-04f, -5.459001264e-04f, -5.462046131e-04f, -5.465081353e-04f, -5.468106926e-04f, -5.471122846e-04f, -5.474129107e-04f, -5.477125705e-04f, -5.480112636e-04f,
--5.483089895e-04f, -5.486057478e-04f, -5.489015380e-04f, -5.491963596e-04f, -5.494902123e-04f, -5.497830956e-04f, -5.500750089e-04f, -5.503659520e-04f, -5.506559243e-04f, -5.509449255e-04f,
--5.512329550e-04f, -5.515200125e-04f, -5.518060975e-04f, -5.520912096e-04f, -5.523753483e-04f, -5.526585133e-04f, -5.529407041e-04f, -5.532219203e-04f, -5.535021614e-04f, -5.537814271e-04f,
--5.540597169e-04f, -5.543370304e-04f, -5.546133672e-04f, -5.548887269e-04f, -5.551631091e-04f, -5.554365133e-04f, -5.557089392e-04f, -5.559803863e-04f, -5.562508543e-04f, -5.565203427e-04f,
--5.567888511e-04f, -5.570563792e-04f, -5.573229266e-04f, -5.575884928e-04f, -5.578530774e-04f, -5.581166801e-04f, -5.583793005e-04f, -5.586409381e-04f, -5.589015927e-04f, -5.591612638e-04f,
--5.594199510e-04f, -5.596776539e-04f, -5.599343722e-04f, -5.601901055e-04f, -5.604448534e-04f, -5.606986155e-04f, -5.609513915e-04f, -5.612031810e-04f, -5.614539836e-04f, -5.617037990e-04f,
--5.619526267e-04f, -5.622004665e-04f, -5.624473179e-04f, -5.626931807e-04f, -5.629380543e-04f, -5.631819386e-04f, -5.634248330e-04f, -5.636667374e-04f, -5.639076512e-04f, -5.641475743e-04f,
--5.643865061e-04f, -5.646244464e-04f, -5.648613949e-04f, -5.650973511e-04f, -5.653323148e-04f, -5.655662856e-04f, -5.657992631e-04f, -5.660312470e-04f, -5.662622371e-04f, -5.664922329e-04f,
--5.667212341e-04f, -5.669492404e-04f, -5.671762515e-04f, -5.674022671e-04f, -5.676272867e-04f, -5.678513102e-04f, -5.680743371e-04f, -5.682963671e-04f, -5.685174001e-04f, -5.687374355e-04f,
--5.689564731e-04f, -5.691745126e-04f, -5.693915537e-04f, -5.696075961e-04f, -5.698226395e-04f, -5.700366835e-04f, -5.702497278e-04f, -5.704617723e-04f, -5.706728164e-04f, -5.708828601e-04f,
--5.710919029e-04f, -5.712999445e-04f, -5.715069848e-04f, -5.717130233e-04f, -5.719180598e-04f, -5.721220940e-04f, -5.723251256e-04f, -5.725271544e-04f, -5.727281800e-04f, -5.729282022e-04f,
--5.731272206e-04f, -5.733252351e-04f, -5.735222454e-04f, -5.737182510e-04f, -5.739132519e-04f, -5.741072477e-04f, -5.743002382e-04f, -5.744922230e-04f, -5.746832020e-04f, -5.748731748e-04f,
--5.750621412e-04f, -5.752501010e-04f, -5.754370538e-04f, -5.756229995e-04f, -5.758079377e-04f, -5.759918682e-04f, -5.761747909e-04f, -5.763567053e-04f, -5.765376113e-04f, -5.767175086e-04f,
--5.768963970e-04f, -5.770742762e-04f, -5.772511460e-04f, -5.774270062e-04f, -5.776018565e-04f, -5.777756966e-04f, -5.779485265e-04f, -5.781203457e-04f, -5.782911542e-04f, -5.784609516e-04f,
--5.786297377e-04f, -5.787975123e-04f, -5.789642753e-04f, -5.791300263e-04f, -5.792947651e-04f, -5.794584916e-04f, -5.796212055e-04f, -5.797829066e-04f, -5.799435947e-04f, -5.801032695e-04f,
--5.802619310e-04f, -5.804195788e-04f, -5.805762127e-04f, -5.807318326e-04f, -5.808864383e-04f, -5.810400295e-04f, -5.811926060e-04f, -5.813441678e-04f, -5.814947144e-04f, -5.816442459e-04f,
--5.817927619e-04f, -5.819402624e-04f, -5.820867470e-04f, -5.822322156e-04f, -5.823766681e-04f, -5.825201042e-04f, -5.826625238e-04f, -5.828039267e-04f, -5.829443127e-04f, -5.830836817e-04f,
--5.832220334e-04f, -5.833593677e-04f, -5.834956845e-04f, -5.836309834e-04f, -5.837652645e-04f, -5.838985276e-04f, -5.840307723e-04f, -5.841619987e-04f, -5.842922065e-04f, -5.844213957e-04f,
--5.845495659e-04f, -5.846767171e-04f, -5.848028492e-04f, -5.849279619e-04f, -5.850520552e-04f, -5.851751288e-04f, -5.852971827e-04f, -5.854182166e-04f, -5.855382305e-04f, -5.856572242e-04f,
--5.857751976e-04f, -5.858921506e-04f, -5.860080829e-04f, -5.861229945e-04f, -5.862368853e-04f, -5.863497550e-04f, -5.864616037e-04f, -5.865724310e-04f, -5.866822371e-04f, -5.867910216e-04f,
--5.868987846e-04f, -5.870055258e-04f, -5.871112451e-04f, -5.872159425e-04f, -5.873196179e-04f, -5.874222710e-04f, -5.875239019e-04f, -5.876245104e-04f, -5.877240963e-04f, -5.878226597e-04f,
--5.879202003e-04f, -5.880167182e-04f, -5.881122131e-04f, -5.882066850e-04f, -5.883001338e-04f, -5.883925594e-04f, -5.884839618e-04f, -5.885743407e-04f, -5.886636962e-04f, -5.887520281e-04f,
--5.888393364e-04f, -5.889256210e-04f, -5.890108818e-04f, -5.890951187e-04f, -5.891783316e-04f, -5.892605205e-04f, -5.893416853e-04f, -5.894218259e-04f, -5.895009423e-04f, -5.895790343e-04f,
--5.896561020e-04f, -5.897321452e-04f, -5.898071639e-04f, -5.898811580e-04f, -5.899541275e-04f, -5.900260723e-04f, -5.900969923e-04f, -5.901668876e-04f, -5.902357580e-04f, -5.903036035e-04f,
--5.903704240e-04f, -5.904362195e-04f, -5.905009900e-04f, -5.905647353e-04f, -5.906274556e-04f, -5.906891507e-04f, -5.907498205e-04f, -5.908094651e-04f, -5.908680844e-04f, -5.909256784e-04f,
--5.909822471e-04f, -5.910377904e-04f, -5.910923082e-04f, -5.911458007e-04f, -5.911982676e-04f, -5.912497091e-04f, -5.913001251e-04f, -5.913495156e-04f, -5.913978806e-04f, -5.914452200e-04f,
--5.914915338e-04f, -5.915368220e-04f, -5.915810847e-04f, -5.916243218e-04f, -5.916665332e-04f, -5.917077191e-04f, -5.917478794e-04f, -5.917870140e-04f, -5.918251230e-04f, -5.918622065e-04f,
--5.918982643e-04f, -5.919332965e-04f, -5.919673031e-04f, -5.920002842e-04f, -5.920322397e-04f, -5.920631696e-04f, -5.920930740e-04f, -5.921219529e-04f, -5.921498062e-04f, -5.921766341e-04f,
--5.922024365e-04f, -5.922272135e-04f, -5.922509651e-04f, -5.922736912e-04f, -5.922953920e-04f, -5.923160675e-04f, -5.923357177e-04f, -5.923543426e-04f, -5.923719423e-04f, -5.923885168e-04f,
--5.924040662e-04f, -5.924185905e-04f, -5.924320897e-04f, -5.924445638e-04f, -5.924560131e-04f, -5.924664373e-04f, -5.924758368e-04f, -5.924842113e-04f, -5.924915612e-04f, -5.924978863e-04f,
--5.925031867e-04f, -5.925074626e-04f, -5.925107139e-04f, -5.925129408e-04f, -5.925141432e-04f, -5.925143214e-04f, -5.925134752e-04f, -5.925116048e-04f, -5.925087103e-04f, -5.925047918e-04f,
--5.924998492e-04f, -5.924938828e-04f, -5.924868925e-04f, -5.924788785e-04f, -5.924698408e-04f, -5.924597795e-04f, -5.924486947e-04f, -5.924365866e-04f, -5.924234551e-04f, -5.924093003e-04f,
--5.923941225e-04f, -5.923779215e-04f, -5.923606977e-04f, -5.923424510e-04f, -5.923231815e-04f, -5.923028894e-04f, -5.922815748e-04f, -5.922592377e-04f, -5.922358783e-04f, -5.922114966e-04f,
--5.921860929e-04f, -5.921596671e-04f, -5.921322194e-04f, -5.921037500e-04f, -5.920742589e-04f, -5.920437463e-04f, -5.920122123e-04f, -5.919796570e-04f, -5.919460805e-04f, -5.919114830e-04f,
--5.918758645e-04f, -5.918392253e-04f, -5.918015654e-04f, -5.917628850e-04f, -5.917231842e-04f, -5.916824631e-04f, -5.916407220e-04f, -5.915979609e-04f, -5.915541799e-04f, -5.915093793e-04f,
--5.914635591e-04f, -5.914167195e-04f, -5.913688607e-04f, -5.913199828e-04f, -5.912700859e-04f, -5.912191703e-04f, -5.911672360e-04f, -5.911142833e-04f, -5.910603122e-04f, -5.910053230e-04f,
--5.909493158e-04f, -5.908922908e-04f, -5.908342481e-04f, -5.907751879e-04f, -5.907151104e-04f, -5.906540158e-04f, -5.905919042e-04f, -5.905287757e-04f, -5.904646307e-04f, -5.903994692e-04f,
--5.903332914e-04f, -5.902660976e-04f, -5.901978879e-04f, -5.901286624e-04f, -5.900584215e-04f, -5.899871651e-04f, -5.899148937e-04f, -5.898416073e-04f, -5.897673061e-04f, -5.896919904e-04f,
--5.896156603e-04f, -5.895383160e-04f, -5.894599578e-04f, -5.893805858e-04f, -5.893002003e-04f, -5.892188014e-04f, -5.891363893e-04f, -5.890529644e-04f, -5.889685267e-04f, -5.888830765e-04f,
--5.887966140e-04f, -5.887091394e-04f, -5.886206530e-04f, -5.885311550e-04f, -5.884406455e-04f, -5.883491249e-04f, -5.882565932e-04f, -5.881630509e-04f, -5.880684980e-04f, -5.879729349e-04f,
--5.878763617e-04f, -5.877787787e-04f, -5.876801862e-04f, -5.875805843e-04f, -5.874799733e-04f, -5.873783534e-04f, -5.872757250e-04f, -5.871720881e-04f, -5.870674432e-04f, -5.869617904e-04f,
--5.868551299e-04f, -5.867474621e-04f, -5.866387872e-04f, -5.865291054e-04f, -5.864184170e-04f, -5.863067222e-04f, -5.861940214e-04f, -5.860803147e-04f, -5.859656025e-04f, -5.858498849e-04f,
--5.857331624e-04f, -5.856154351e-04f, -5.854967032e-04f, -5.853769672e-04f, -5.852562272e-04f, -5.851344836e-04f, -5.850117366e-04f, -5.848879864e-04f, -5.847632334e-04f, -5.846374779e-04f,
--5.845107201e-04f, -5.843829604e-04f, -5.842541989e-04f, -5.841244360e-04f, -5.839936721e-04f, -5.838619073e-04f, -5.837291419e-04f, -5.835953764e-04f, -5.834606109e-04f, -5.833248458e-04f,
--5.831880814e-04f, -5.830503179e-04f, -5.829115558e-04f, -5.827717952e-04f, -5.826310365e-04f, -5.824892800e-04f, -5.823465260e-04f, -5.822027749e-04f, -5.820580269e-04f, -5.819122823e-04f,
--5.817655416e-04f, -5.816178049e-04f, -5.814690726e-04f, -5.813193452e-04f, -5.811686227e-04f, -5.810169057e-04f, -5.808641944e-04f, -5.807104891e-04f, -5.805557903e-04f, -5.804000981e-04f,
--5.802434130e-04f, -5.800857354e-04f, -5.799270654e-04f, -5.797674035e-04f, -5.796067500e-04f, -5.794451053e-04f, -5.792824697e-04f, -5.791188436e-04f, -5.789542272e-04f, -5.787886210e-04f,
--5.786220253e-04f, -5.784544405e-04f, -5.782858669e-04f, -5.781163048e-04f, -5.779457547e-04f, -5.777742168e-04f, -5.776016917e-04f, -5.774281795e-04f, -5.772536807e-04f, -5.770781957e-04f,
--5.769017248e-04f, -5.767242683e-04f, -5.765458268e-04f, -5.763664005e-04f, -5.761859898e-04f, -5.760045950e-04f, -5.758222167e-04f, -5.756388551e-04f, -5.754545106e-04f, -5.752691837e-04f,
--5.750828747e-04f, -5.748955839e-04f, -5.747073118e-04f, -5.745180588e-04f, -5.743278253e-04f, -5.741366116e-04f, -5.739444182e-04f, -5.737512454e-04f, -5.735570937e-04f, -5.733619634e-04f,
--5.731658550e-04f, -5.729687689e-04f, -5.727707054e-04f, -5.725716650e-04f, -5.723716480e-04f, -5.721706550e-04f, -5.719686863e-04f, -5.717657423e-04f, -5.715618234e-04f, -5.713569300e-04f,
--5.711510627e-04f, -5.709442217e-04f, -5.707364076e-04f, -5.705276207e-04f, -5.703178614e-04f, -5.701071303e-04f, -5.698954277e-04f, -5.696827540e-04f, -5.694691097e-04f, -5.692544952e-04f,
--5.690389110e-04f, -5.688223575e-04f, -5.686048351e-04f, -5.683863443e-04f, -5.681668855e-04f, -5.679464592e-04f, -5.677250657e-04f, -5.675027057e-04f, -5.672793794e-04f, -5.670550874e-04f,
--5.668298300e-04f, -5.666036079e-04f, -5.663764213e-04f, -5.661482708e-04f, -5.659191569e-04f, -5.656890799e-04f, -5.654580404e-04f, -5.652260388e-04f, -5.649930756e-04f, -5.647591512e-04f,
--5.645242661e-04f, -5.642884209e-04f, -5.640516159e-04f, -5.638138516e-04f, -5.635751285e-04f, -5.633354471e-04f, -5.630948079e-04f, -5.628532113e-04f, -5.626106578e-04f, -5.623671479e-04f,
--5.621226822e-04f, -5.618772610e-04f, -5.616308849e-04f, -5.613835543e-04f, -5.611352697e-04f, -5.608860318e-04f, -5.606358408e-04f, -5.603846974e-04f, -5.601326020e-04f, -5.598795551e-04f,
--5.596255573e-04f, -5.593706089e-04f, -5.591147107e-04f, -5.588578629e-04f, -5.586000662e-04f, -5.583413211e-04f, -5.580816280e-04f, -5.578209876e-04f, -5.575594002e-04f, -5.572968664e-04f,
--5.570333867e-04f, -5.567689617e-04f, -5.565035919e-04f, -5.562372777e-04f, -5.559700197e-04f, -5.557018185e-04f, -5.554326746e-04f, -5.551625884e-04f, -5.548915606e-04f, -5.546195916e-04f,
--5.543466820e-04f, -5.540728323e-04f, -5.537980430e-04f, -5.535223148e-04f, -5.532456481e-04f, -5.529680434e-04f, -5.526895014e-04f, -5.524100226e-04f, -5.521296074e-04f, -5.518482565e-04f,
--5.515659704e-04f, -5.512827497e-04f, -5.509985948e-04f, -5.507135064e-04f, -5.504274851e-04f, -5.501405313e-04f, -5.498526456e-04f, -5.495638286e-04f, -5.492740809e-04f, -5.489834029e-04f,
--5.486917954e-04f, -5.483992588e-04f, -5.481057937e-04f, -5.478114007e-04f, -5.475160803e-04f, -5.472198332e-04f, -5.469226599e-04f, -5.466245609e-04f, -5.463255369e-04f, -5.460255884e-04f,
--5.457247160e-04f, -5.454229203e-04f, -5.451202019e-04f, -5.448165614e-04f, -5.445119993e-04f, -5.442065162e-04f, -5.439001128e-04f, -5.435927896e-04f, -5.432845471e-04f, -5.429753861e-04f,
--5.426653071e-04f, -5.423543107e-04f, -5.420423975e-04f, -5.417295680e-04f, -5.414158230e-04f, -5.411011630e-04f, -5.407855885e-04f, -5.404691003e-04f, -5.401516989e-04f, -5.398333850e-04f,
--5.395141590e-04f, -5.391940218e-04f, -5.388729738e-04f, -5.385510157e-04f, -5.382281480e-04f, -5.379043716e-04f, -5.375796868e-04f, -5.372540944e-04f, -5.369275950e-04f, -5.366001892e-04f,
--5.362718777e-04f, -5.359426610e-04f, -5.356125398e-04f, -5.352815147e-04f, -5.349495864e-04f, -5.346167555e-04f, -5.342830227e-04f, -5.339483885e-04f, -5.336128535e-04f, -5.332764186e-04f,
--5.329390842e-04f, -5.326008511e-04f, -5.322617198e-04f, -5.319216911e-04f, -5.315807655e-04f, -5.312389437e-04f, -5.308962265e-04f, -5.305526143e-04f, -5.302081079e-04f, -5.298627080e-04f,
--5.295164151e-04f, -5.291692300e-04f, -5.288211533e-04f, -5.284721856e-04f, -5.281223277e-04f, -5.277715802e-04f, -5.274199437e-04f, -5.270674190e-04f, -5.267140067e-04f, -5.263597074e-04f,
--5.260045219e-04f, -5.256484508e-04f, -5.252914947e-04f, -5.249336545e-04f, -5.245749307e-04f, -5.242153240e-04f, -5.238548351e-04f, -5.234934646e-04f, -5.231312134e-04f, -5.227680820e-04f,
--5.224040711e-04f, -5.220391815e-04f, -5.216734138e-04f, -5.213067686e-04f, -5.209392468e-04f, -5.205708490e-04f, -5.202015759e-04f, -5.198314281e-04f, -5.194604065e-04f, -5.190885116e-04f,
--5.187157442e-04f, -5.183421050e-04f, -5.179675947e-04f, -5.175922140e-04f, -5.172159636e-04f, -5.168388442e-04f, -5.164608565e-04f, -5.160820012e-04f, -5.157022792e-04f, -5.153216909e-04f,
--5.149402373e-04f, -5.145579189e-04f, -5.141747366e-04f, -5.137906910e-04f, -5.134057828e-04f, -5.130200129e-04f, -5.126333818e-04f, -5.122458904e-04f, -5.118575393e-04f, -5.114683293e-04f,
--5.110782611e-04f, -5.106873355e-04f, -5.102955532e-04f, -5.099029148e-04f, -5.095094212e-04f, -5.091150732e-04f, -5.087198713e-04f, -5.083238164e-04f, -5.079269092e-04f, -5.075291505e-04f,
--5.071305410e-04f, -5.067310814e-04f, -5.063307725e-04f, -5.059296150e-04f, -5.055276098e-04f, -5.051247574e-04f, -5.047210588e-04f, -5.043165146e-04f, -5.039111257e-04f, -5.035048926e-04f,
--5.030978164e-04f, -5.026898976e-04f, -5.022811370e-04f, -5.018715354e-04f, -5.014610936e-04f, -5.010498124e-04f, -5.006376925e-04f, -5.002247346e-04f, -4.998109395e-04f, -4.993963081e-04f,
--4.989808411e-04f, -4.985645392e-04f, -4.981474033e-04f, -4.977294341e-04f, -4.973106323e-04f, -4.968909989e-04f, -4.964705345e-04f, -4.960492399e-04f, -4.956271159e-04f, -4.952041634e-04f,
--4.947803830e-04f, -4.943557756e-04f, -4.939303420e-04f, -4.935040829e-04f, -4.930769992e-04f, -4.926490917e-04f, -4.922203610e-04f, -4.917908081e-04f, -4.913604338e-04f, -4.909292387e-04f,
--4.904972238e-04f, -4.900643899e-04f, -4.896307377e-04f, -4.891962680e-04f, -4.887609816e-04f, -4.883248794e-04f, -4.878879622e-04f, -4.874502308e-04f, -4.870116859e-04f, -4.865723284e-04f,
--4.861321592e-04f, -4.856911789e-04f, -4.852493885e-04f, -4.848067888e-04f, -4.843633805e-04f, -4.839191646e-04f, -4.834741417e-04f, -4.830283129e-04f, -4.825816787e-04f, -4.821342402e-04f,
--4.816859981e-04f, -4.812369533e-04f, -4.807871065e-04f, -4.803364586e-04f, -4.798850105e-04f, -4.794327630e-04f, -4.789797169e-04f, -4.785258730e-04f, -4.780712322e-04f, -4.776157954e-04f,
--4.771595633e-04f, -4.767025369e-04f, -4.762447169e-04f, -4.757861041e-04f, -4.753266996e-04f, -4.748665040e-04f, -4.744055183e-04f, -4.739437432e-04f, -4.734811797e-04f, -4.730178286e-04f,
--4.725536908e-04f, -4.720887670e-04f, -4.716230583e-04f, -4.711565653e-04f, -4.706892890e-04f, -4.702212302e-04f, -4.697523899e-04f, -4.692827688e-04f, -4.688123678e-04f, -4.683411878e-04f,
--4.678692297e-04f, -4.673964943e-04f, -4.669229824e-04f, -4.664486951e-04f, -4.659736331e-04f, -4.654977973e-04f, -4.650211886e-04f, -4.645438078e-04f, -4.640656559e-04f, -4.635867337e-04f,
--4.631070421e-04f, -4.626265820e-04f, -4.621453542e-04f, -4.616633597e-04f, -4.611805992e-04f, -4.606970739e-04f, -4.602127844e-04f, -4.597277316e-04f, -4.592419166e-04f, -4.587553401e-04f,
--4.582680031e-04f, -4.577799065e-04f, -4.572910511e-04f, -4.568014378e-04f, -4.563110676e-04f, -4.558199413e-04f, -4.553280599e-04f, -4.548354242e-04f, -4.543420351e-04f, -4.538478936e-04f,
--4.533530005e-04f, -4.528573568e-04f, -4.523609633e-04f, -4.518638211e-04f, -4.513659309e-04f, -4.508672937e-04f, -4.503679104e-04f, -4.498677819e-04f, -4.493669091e-04f, -4.488652930e-04f,
--4.483629345e-04f, -4.478598344e-04f, -4.473559938e-04f, -4.468514134e-04f, -4.463460944e-04f, -4.458400374e-04f, -4.453332436e-04f, -4.448257138e-04f, -4.443174489e-04f, -4.438084499e-04f,
--4.432987177e-04f, -4.427882533e-04f, -4.422770575e-04f, -4.417651313e-04f, -4.412524756e-04f, -4.407390914e-04f, -4.402249796e-04f, -4.397101411e-04f, -4.391945769e-04f, -4.386782879e-04f,
--4.381612751e-04f, -4.376435394e-04f, -4.371250817e-04f, -4.366059030e-04f, -4.360860043e-04f, -4.355653864e-04f, -4.350440504e-04f, -4.345219971e-04f, -4.339992276e-04f, -4.334757427e-04f,
--4.329515435e-04f, -4.324266309e-04f, -4.319010058e-04f, -4.313746692e-04f, -4.308476221e-04f, -4.303198654e-04f, -4.297914000e-04f, -4.292622270e-04f, -4.287323473e-04f, -4.282017619e-04f,
--4.276704717e-04f, -4.271384777e-04f, -4.266057808e-04f, -4.260723821e-04f, -4.255382825e-04f, -4.250034829e-04f, -4.244679844e-04f, -4.239317879e-04f, -4.233948944e-04f, -4.228573048e-04f,
--4.223190202e-04f, -4.217800415e-04f, -4.212403696e-04f, -4.207000057e-04f, -4.201589506e-04f, -4.196172053e-04f, -4.190747709e-04f, -4.185316482e-04f, -4.179878384e-04f, -4.174433423e-04f,
--4.168981609e-04f, -4.163522953e-04f, -4.158057465e-04f, -4.152585154e-04f, -4.147106030e-04f, -4.141620103e-04f, -4.136127383e-04f, -4.130627880e-04f, -4.125121604e-04f, -4.119608565e-04f,
--4.114088773e-04f, -4.108562238e-04f, -4.103028970e-04f, -4.097488979e-04f, -4.091942275e-04f, -4.086388867e-04f, -4.080828767e-04f, -4.075261984e-04f, -4.069688528e-04f, -4.064108410e-04f,
--4.058521639e-04f, -4.052928225e-04f, -4.047328179e-04f, -4.041721511e-04f, -4.036108230e-04f, -4.030488348e-04f, -4.024861873e-04f, -4.019228817e-04f, -4.013589190e-04f, -4.007943001e-04f,
--4.002290261e-04f, -3.996630980e-04f, -3.990965169e-04f, -3.985292837e-04f, -3.979613995e-04f, -3.973928653e-04f, -3.968236821e-04f, -3.962538510e-04f, -3.956833730e-04f, -3.951122491e-04f,
--3.945404804e-04f, -3.939680678e-04f, -3.933950125e-04f, -3.928213154e-04f, -3.922469775e-04f, -3.916720000e-04f, -3.910963839e-04f, -3.905201301e-04f, -3.899432398e-04f, -3.893657139e-04f,
--3.887875536e-04f, -3.882087598e-04f, -3.876293336e-04f, -3.870492761e-04f, -3.864685882e-04f, -3.858872711e-04f, -3.853053258e-04f, -3.847227533e-04f, -3.841395546e-04f, -3.835557309e-04f,
--3.829712832e-04f, -3.823862125e-04f, -3.818005199e-04f, -3.812142065e-04f, -3.806272732e-04f, -3.800397212e-04f, -3.794515515e-04f, -3.788627651e-04f, -3.782733632e-04f, -3.776833468e-04f,
--3.770927169e-04f, -3.765014746e-04f, -3.759096210e-04f, -3.753171571e-04f, -3.747240841e-04f, -3.741304029e-04f, -3.735361146e-04f, -3.729412204e-04f, -3.723457212e-04f, -3.717496181e-04f,
--3.711529123e-04f, -3.705556048e-04f, -3.699576966e-04f, -3.693591889e-04f, -3.687600826e-04f, -3.681603790e-04f, -3.675600790e-04f, -3.669591837e-04f, -3.663576943e-04f, -3.657556117e-04f,
--3.651529372e-04f, -3.645496717e-04f, -3.639458163e-04f, -3.633413721e-04f, -3.627363403e-04f, -3.621307219e-04f, -3.615245179e-04f, -3.609177295e-04f, -3.603103578e-04f, -3.597024038e-04f,
--3.590938687e-04f, -3.584847535e-04f, -3.578750593e-04f, -3.572647872e-04f, -3.566539383e-04f, -3.560425137e-04f, -3.554305146e-04f, -3.548179419e-04f, -3.542047968e-04f, -3.535910804e-04f,
--3.529767937e-04f, -3.523619380e-04f, -3.517465143e-04f, -3.511305236e-04f, -3.505139672e-04f, -3.498968460e-04f, -3.492791612e-04f, -3.486609140e-04f, -3.480421054e-04f, -3.474227365e-04f,
--3.468028084e-04f, -3.461823222e-04f, -3.455612792e-04f, -3.449396802e-04f, -3.443175266e-04f, -3.436948193e-04f, -3.430715596e-04f, -3.424477484e-04f, -3.418233870e-04f, -3.411984764e-04f,
--3.405730178e-04f, -3.399470123e-04f, -3.393204610e-04f, -3.386933650e-04f, -3.380657254e-04f, -3.374375434e-04f, -3.368088201e-04f, -3.361795566e-04f, -3.355497541e-04f, -3.349194136e-04f,
--3.342885362e-04f, -3.336571232e-04f, -3.330251756e-04f, -3.323926946e-04f, -3.317596813e-04f, -3.311261368e-04f, -3.304920623e-04f, -3.298574589e-04f, -3.292223276e-04f, -3.285866698e-04f,
--3.279504864e-04f, -3.273137786e-04f, -3.266765477e-04f, -3.260387946e-04f, -3.254005205e-04f, -3.247617266e-04f, -3.241224140e-04f, -3.234825839e-04f, -3.228422374e-04f, -3.222013756e-04f,
--3.215599997e-04f, -3.209181108e-04f, -3.202757100e-04f, -3.196327986e-04f, -3.189893776e-04f, -3.183454483e-04f, -3.177010117e-04f, -3.170560690e-04f, -3.164106213e-04f, -3.157646698e-04f,
--3.151182157e-04f, -3.144712601e-04f, -3.138238041e-04f, -3.131758489e-04f, -3.125273957e-04f, -3.118784456e-04f, -3.112289998e-04f, -3.105790594e-04f, -3.099286255e-04f, -3.092776994e-04f,
--3.086262822e-04f, -3.079743751e-04f, -3.073219792e-04f, -3.066690956e-04f, -3.060157256e-04f, -3.053618703e-04f, -3.047075308e-04f, -3.040527084e-04f, -3.033974042e-04f, -3.027416193e-04f,
--3.020853549e-04f, -3.014286123e-04f, -3.007713925e-04f, -3.001136967e-04f, -2.994555261e-04f, -2.987968819e-04f, -2.981377652e-04f, -2.974781772e-04f, -2.968181191e-04f, -2.961575920e-04f,
--2.954965972e-04f, -2.948351358e-04f, -2.941732089e-04f, -2.935108178e-04f, -2.928479636e-04f, -2.921846475e-04f, -2.915208707e-04f, -2.908566343e-04f, -2.901919396e-04f, -2.895267877e-04f,
--2.888611798e-04f, -2.881951171e-04f, -2.875286008e-04f, -2.868616319e-04f, -2.861942119e-04f, -2.855263417e-04f, -2.848580226e-04f, -2.841892558e-04f, -2.835200425e-04f, -2.828503838e-04f,
--2.821802810e-04f, -2.815097352e-04f, -2.808387476e-04f, -2.801673194e-04f, -2.794954519e-04f, -2.788231461e-04f, -2.781504033e-04f, -2.774772247e-04f, -2.768036115e-04f, -2.761295648e-04f,
--2.754550859e-04f, -2.747801759e-04f, -2.741048361e-04f, -2.734290676e-04f, -2.727528717e-04f, -2.720762495e-04f, -2.713992022e-04f, -2.707217311e-04f, -2.700438373e-04f, -2.693655221e-04f,
--2.686867865e-04f, -2.680076320e-04f, -2.673280596e-04f, -2.666480705e-04f, -2.659676659e-04f, -2.652868472e-04f, -2.646056153e-04f, -2.639239717e-04f, -2.632419174e-04f, -2.625594537e-04f,
--2.618765818e-04f, -2.611933028e-04f, -2.605096181e-04f, -2.598255288e-04f, -2.591410361e-04f, -2.584561412e-04f, -2.577708454e-04f, -2.570851498e-04f, -2.563990557e-04f, -2.557125642e-04f,
--2.550256767e-04f, -2.543383942e-04f, -2.536507181e-04f, -2.529626495e-04f, -2.522741897e-04f, -2.515853399e-04f, -2.508961012e-04f, -2.502064749e-04f, -2.495164623e-04f, -2.488260645e-04f,
--2.481352827e-04f, -2.474441182e-04f, -2.467525723e-04f, -2.460606460e-04f, -2.453683407e-04f, -2.446756576e-04f, -2.439825979e-04f, -2.432891627e-04f, -2.425953534e-04f, -2.419011712e-04f,
--2.412066173e-04f, -2.405116928e-04f, -2.398163992e-04f, -2.391207374e-04f, -2.384247089e-04f, -2.377283148e-04f, -2.370315563e-04f, -2.363344347e-04f, -2.356369513e-04f, -2.349391071e-04f,
--2.342409036e-04f, -2.335423418e-04f, -2.328434231e-04f, -2.321441486e-04f, -2.314445197e-04f, -2.307445374e-04f, -2.300442032e-04f, -2.293435181e-04f, -2.286424835e-04f, -2.279411005e-04f,
--2.272393705e-04f, -2.265372946e-04f, -2.258348740e-04f, -2.251321101e-04f, -2.244290041e-04f, -2.237255571e-04f, -2.230217705e-04f, -2.223176454e-04f, -2.216131832e-04f, -2.209083850e-04f,
--2.202032521e-04f, -2.194977857e-04f, -2.187919872e-04f, -2.180858576e-04f, -2.173793983e-04f, -2.166726105e-04f, -2.159654955e-04f, -2.152580545e-04f, -2.145502887e-04f, -2.138421994e-04f,
--2.131337878e-04f, -2.124250552e-04f, -2.117160028e-04f, -2.110066320e-04f, -2.102969438e-04f, -2.095869396e-04f, -2.088766206e-04f, -2.081659881e-04f, -2.074550433e-04f, -2.067437875e-04f,
--2.060322219e-04f, -2.053203477e-04f, -2.046081663e-04f, -2.038956789e-04f, -2.031828866e-04f, -2.024697909e-04f, -2.017563929e-04f, -2.010426939e-04f, -2.003286951e-04f, -1.996143978e-04f,
--1.988998033e-04f, -1.981849127e-04f, -1.974697275e-04f, -1.967542487e-04f, -1.960384777e-04f, -1.953224158e-04f, -1.946060641e-04f, -1.938894240e-04f, -1.931724967e-04f, -1.924552834e-04f,
--1.917377855e-04f, -1.910200042e-04f, -1.903019407e-04f, -1.895835963e-04f, -1.888649722e-04f, -1.881460698e-04f, -1.874268903e-04f, -1.867074349e-04f, -1.859877050e-04f, -1.852677017e-04f,
--1.845474263e-04f, -1.838268802e-04f, -1.831060645e-04f, -1.823849805e-04f, -1.816636296e-04f, -1.809420129e-04f, -1.802201317e-04f, -1.794979873e-04f, -1.787755810e-04f, -1.780529140e-04f,
--1.773299876e-04f, -1.766068030e-04f, -1.758833616e-04f, -1.751596645e-04f, -1.744357132e-04f, -1.737115087e-04f, -1.729870525e-04f, -1.722623457e-04f, -1.715373897e-04f, -1.708121856e-04f,
--1.700867349e-04f, -1.693610387e-04f, -1.686350983e-04f, -1.679089150e-04f, -1.671824901e-04f, -1.664558248e-04f, -1.657289205e-04f, -1.650017783e-04f, -1.642743996e-04f, -1.635467856e-04f,
--1.628189376e-04f, -1.620908568e-04f, -1.613625447e-04f, -1.606340023e-04f, -1.599052311e-04f, -1.591762322e-04f, -1.584470070e-04f, -1.577175568e-04f, -1.569878827e-04f, -1.562579861e-04f,
--1.555278683e-04f, -1.547975305e-04f, -1.540669740e-04f, -1.533362001e-04f, -1.526052101e-04f, -1.518740052e-04f, -1.511425868e-04f, -1.504109560e-04f, -1.496791143e-04f, -1.489470628e-04f,
--1.482148028e-04f, -1.474823357e-04f, -1.467496627e-04f, -1.460167851e-04f, -1.452837041e-04f, -1.445504211e-04f, -1.438169373e-04f, -1.430832540e-04f, -1.423493725e-04f, -1.416152941e-04f,
--1.408810201e-04f, -1.401465517e-04f, -1.394118902e-04f, -1.386770369e-04f, -1.379419931e-04f, -1.372067601e-04f, -1.364713391e-04f, -1.357357315e-04f, -1.349999385e-04f, -1.342639614e-04f,
--1.335278015e-04f, -1.327914601e-04f, -1.320549384e-04f, -1.313182378e-04f, -1.305813596e-04f, -1.298443049e-04f, -1.291070752e-04f, -1.283696717e-04f, -1.276320956e-04f, -1.268943483e-04f,
--1.261564311e-04f, -1.254183452e-04f, -1.246800920e-04f, -1.239416726e-04f, -1.232030885e-04f, -1.224643409e-04f, -1.217254310e-04f, -1.209863602e-04f, -1.202471298e-04f, -1.195077410e-04f,
--1.187681952e-04f, -1.180284936e-04f, -1.172886375e-04f, -1.165486282e-04f, -1.158084670e-04f, -1.150681552e-04f, -1.143276941e-04f, -1.135870849e-04f, -1.128463290e-04f, -1.121054277e-04f,
--1.113643822e-04f, -1.106231938e-04f, -1.098818638e-04f, -1.091403936e-04f, -1.083987843e-04f, -1.076570373e-04f, -1.069151540e-04f, -1.061731355e-04f, -1.054309831e-04f, -1.046886983e-04f,
--1.039462822e-04f, -1.032037361e-04f, -1.024610614e-04f, -1.017182593e-04f, -1.009753311e-04f, -1.002322782e-04f, -9.948910175e-05f, -9.874580312e-05f, -9.800238358e-05f, -9.725884444e-05f,
--9.651518699e-05f, -9.577141251e-05f, -9.502752231e-05f, -9.428351767e-05f, -9.353939990e-05f, -9.279517028e-05f, -9.205083011e-05f, -9.130638068e-05f, -9.056182329e-05f, -8.981715924e-05f,
--8.907238981e-05f, -8.832751631e-05f, -8.758254002e-05f, -8.683746224e-05f, -8.609228428e-05f, -8.534700741e-05f, -8.460163294e-05f, -8.385616217e-05f, -8.311059638e-05f, -8.236493688e-05f,
--8.161918496e-05f, -8.087334191e-05f, -8.012740904e-05f, -7.938138763e-05f, -7.863527898e-05f, -7.788908440e-05f, -7.714280516e-05f, -7.639644258e-05f, -7.564999795e-05f, -7.490347255e-05f,
--7.415686770e-05f, -7.341018468e-05f, -7.266342479e-05f, -7.191658933e-05f, -7.116967960e-05f, -7.042269688e-05f, -6.967564248e-05f, -6.892851770e-05f, -6.818132383e-05f, -6.743406216e-05f,
--6.668673399e-05f, -6.593934063e-05f, -6.519188336e-05f, -6.444436349e-05f, -6.369678230e-05f, -6.294914111e-05f, -6.220144119e-05f, -6.145368386e-05f, -6.070587040e-05f, -5.995800212e-05f,
--5.921008030e-05f, -5.846210626e-05f, -5.771408128e-05f, -5.696600665e-05f, -5.621788369e-05f, -5.546971368e-05f, -5.472149792e-05f, -5.397323771e-05f, -5.322493435e-05f, -5.247658912e-05f,
--5.172820334e-05f, -5.097977829e-05f, -5.023131527e-05f, -4.948281558e-05f, -4.873428051e-05f, -4.798571136e-05f, -4.723710944e-05f, -4.648847603e-05f, -4.573981242e-05f, -4.499111993e-05f,
--4.424239984e-05f, -4.349365345e-05f, -4.274488206e-05f, -4.199608697e-05f, -4.124726946e-05f, -4.049843084e-05f, -3.974957239e-05f, -3.900069543e-05f, -3.825180125e-05f, -3.750289113e-05f,
--3.675396638e-05f, -3.600502829e-05f, -3.525607816e-05f, -3.450711728e-05f, -3.375814695e-05f, -3.300916847e-05f, -3.226018313e-05f, -3.151119223e-05f, -3.076219705e-05f, -3.001319891e-05f,
--2.926419908e-05f, -2.851519888e-05f, -2.776619958e-05f, -2.701720250e-05f, -2.626820891e-05f, -2.551922013e-05f, -2.477023743e-05f, -2.402126212e-05f, -2.327229550e-05f, -2.252333885e-05f,
--2.177439347e-05f, -2.102546065e-05f, -2.027654169e-05f, -1.952763788e-05f, -1.877875052e-05f, -1.802988090e-05f, -1.728103032e-05f, -1.653220006e-05f, -1.578339142e-05f, -1.503460569e-05f,
--1.428584417e-05f, -1.353710815e-05f, -1.278839893e-05f, -1.203971779e-05f, -1.129106602e-05f, -1.054244493e-05f, -9.793855802e-06f, -9.045299928e-06f, -8.296778602e-06f, -7.548293115e-06f,
--6.799844759e-06f, -6.051434825e-06f, -5.303064606e-06f, -4.554735392e-06f, -3.806448474e-06f, -3.058205144e-06f, -2.310006692e-06f, -1.561854410e-06f, -8.137495866e-07f, -6.569351339e-08f,
-6.823125199e-07f, 1.430267223e-06f, 2.178169307e-06f, 2.926017480e-06f, 3.673810456e-06f, 4.421546942e-06f, 5.169225652e-06f, 5.916845295e-06f, 6.664404584e-06f, 7.411902229e-06f,
-8.159336942e-06f, 8.906707436e-06f, 9.654012421e-06f, 1.040125061e-05f, 1.114842072e-05f, 1.189552145e-05f, 1.264255153e-05f, 1.338950967e-05f, 1.413639457e-05f, 1.488320496e-05f,
-1.562993954e-05f, 1.637659703e-05f, 1.712317615e-05f, 1.786967560e-05f, 1.861609411e-05f, 1.936243038e-05f, 2.010868314e-05f, 2.085485110e-05f, 2.160093297e-05f, 2.234692747e-05f,
-2.309283331e-05f, 2.383864922e-05f, 2.458437390e-05f, 2.533000608e-05f, 2.607554448e-05f, 2.682098780e-05f, 2.756633477e-05f, 2.831158410e-05f, 2.905673451e-05f, 2.980178473e-05f,
-3.054673346e-05f, 3.129157943e-05f, 3.203632136e-05f, 3.278095797e-05f, 3.352548797e-05f, 3.426991008e-05f, 3.501422304e-05f, 3.575842554e-05f, 3.650251633e-05f, 3.724649411e-05f,
-3.799035761e-05f, 3.873410555e-05f, 3.947773665e-05f, 4.022124963e-05f, 4.096464322e-05f, 4.170791614e-05f, 4.245106712e-05f, 4.319409486e-05f, 4.393699811e-05f, 4.467977558e-05f,
-4.542242599e-05f, 4.616494808e-05f, 4.690734056e-05f, 4.764960216e-05f, 4.839173161e-05f, 4.913372763e-05f, 4.987558895e-05f, 5.061731429e-05f, 5.135890238e-05f, 5.210035196e-05f,
-5.284166173e-05f, 5.358283044e-05f, 5.432385681e-05f, 5.506473957e-05f, 5.580547744e-05f, 5.654606916e-05f, 5.728651346e-05f, 5.802680906e-05f, 5.876695470e-05f, 5.950694910e-05f,
-6.024679100e-05f, 6.098647913e-05f, 6.172601221e-05f, 6.246538899e-05f, 6.320460818e-05f, 6.394366854e-05f, 6.468256878e-05f, 6.542130764e-05f, 6.615988385e-05f, 6.689829615e-05f,
-6.763654328e-05f, 6.837462396e-05f, 6.911253693e-05f, 6.985028093e-05f, 7.058785469e-05f, 7.132525696e-05f, 7.206248645e-05f, 7.279954192e-05f, 7.353642210e-05f, 7.427312573e-05f,
-7.500965154e-05f, 7.574599828e-05f, 7.648216468e-05f, 7.721814948e-05f, 7.795395142e-05f, 7.868956924e-05f, 7.942500169e-05f, 8.016024750e-05f, 8.089530541e-05f, 8.163017417e-05f,
-8.236485251e-05f, 8.309933919e-05f, 8.383363294e-05f, 8.456773250e-05f, 8.530163662e-05f, 8.603534405e-05f, 8.676885353e-05f, 8.750216380e-05f, 8.823527361e-05f, 8.896818171e-05f,
-8.970088684e-05f, 9.043338774e-05f, 9.116568317e-05f, 9.189777187e-05f, 9.262965260e-05f, 9.336132409e-05f, 9.409278510e-05f, 9.482403438e-05f, 9.555507068e-05f, 9.628589275e-05f,
-9.701649933e-05f, 9.774688918e-05f, 9.847706106e-05f, 9.920701370e-05f, 9.993674588e-05f, 1.006662563e-04f, 1.013955438e-04f, 1.021246071e-04f, 1.028534449e-04f, 1.035820560e-04f,
-1.043104392e-04f, 1.050385931e-04f, 1.057665167e-04f, 1.064942085e-04f, 1.072216675e-04f, 1.079488922e-04f, 1.086758816e-04f, 1.094026343e-04f, 1.101291491e-04f, 1.108554248e-04f,
-1.115814601e-04f, 1.123072539e-04f, 1.130328047e-04f, 1.137581115e-04f, 1.144831730e-04f, 1.152079879e-04f, 1.159325550e-04f, 1.166568731e-04f, 1.173809409e-04f, 1.181047572e-04f,
-1.188283208e-04f, 1.195516304e-04f, 1.202746848e-04f, 1.209974828e-04f, 1.217200230e-04f, 1.224423044e-04f, 1.231643257e-04f, 1.238860856e-04f, 1.246075829e-04f, 1.253288163e-04f,
-1.260497847e-04f, 1.267704869e-04f, 1.274909215e-04f, 1.282110873e-04f, 1.289309832e-04f, 1.296506080e-04f, 1.303699603e-04f, 1.310890389e-04f, 1.318078427e-04f, 1.325263704e-04f,
-1.332446207e-04f, 1.339625926e-04f, 1.346802846e-04f, 1.353976957e-04f, 1.361148245e-04f, 1.368316700e-04f, 1.375482308e-04f, 1.382645057e-04f, 1.389804935e-04f, 1.396961930e-04f,
-1.404116030e-04f, 1.411267223e-04f, 1.418415496e-04f, 1.425560837e-04f, 1.432703234e-04f, 1.439842675e-04f, 1.446979148e-04f, 1.454112641e-04f, 1.461243141e-04f, 1.468370636e-04f,
-1.475495115e-04f, 1.482616565e-04f, 1.489734973e-04f, 1.496850329e-04f, 1.503962620e-04f, 1.511071833e-04f, 1.518177957e-04f, 1.525280980e-04f, 1.532380889e-04f, 1.539477672e-04f,
-1.546571318e-04f, 1.553661814e-04f, 1.560749148e-04f, 1.567833309e-04f, 1.574914284e-04f, 1.581992061e-04f, 1.589066628e-04f, 1.596137973e-04f, 1.603206084e-04f, 1.610270950e-04f,
-1.617332557e-04f, 1.624390895e-04f, 1.631445951e-04f, 1.638497713e-04f, 1.645546169e-04f, 1.652591307e-04f, 1.659633116e-04f, 1.666671582e-04f, 1.673706696e-04f, 1.680738443e-04f,
-1.687766813e-04f, 1.694791794e-04f, 1.701813373e-04f, 1.708831539e-04f, 1.715846280e-04f, 1.722857584e-04f, 1.729865439e-04f, 1.736869833e-04f, 1.743870754e-04f, 1.750868190e-04f,
-1.757862131e-04f, 1.764852562e-04f, 1.771839474e-04f, 1.778822854e-04f, 1.785802689e-04f, 1.792778969e-04f, 1.799751682e-04f, 1.806720815e-04f, 1.813686357e-04f, 1.820648296e-04f,
-1.827606620e-04f, 1.834561318e-04f, 1.841512378e-04f, 1.848459787e-04f, 1.855403535e-04f, 1.862343609e-04f, 1.869279997e-04f, 1.876212689e-04f, 1.883141671e-04f, 1.890066933e-04f,
-1.896988463e-04f, 1.903906249e-04f, 1.910820278e-04f, 1.917730541e-04f, 1.924637024e-04f, 1.931539717e-04f, 1.938438607e-04f, 1.945333683e-04f, 1.952224933e-04f, 1.959112345e-04f,
-1.965995909e-04f, 1.972875611e-04f, 1.979751441e-04f, 1.986623387e-04f, 1.993491438e-04f, 2.000355581e-04f, 2.007215805e-04f, 2.014072099e-04f, 2.020924450e-04f, 2.027772848e-04f,
-2.034617281e-04f, 2.041457737e-04f, 2.048294204e-04f, 2.055126672e-04f, 2.061955128e-04f, 2.068779561e-04f, 2.075599959e-04f, 2.082416312e-04f, 2.089228607e-04f, 2.096036832e-04f,
-2.102840978e-04f, 2.109641031e-04f, 2.116436980e-04f, 2.123228815e-04f, 2.130016523e-04f, 2.136800093e-04f, 2.143579513e-04f, 2.150354773e-04f, 2.157125861e-04f, 2.163892764e-04f,
-2.170655473e-04f, 2.177413975e-04f, 2.184168259e-04f, 2.190918314e-04f, 2.197664128e-04f, 2.204405690e-04f, 2.211142988e-04f, 2.217876012e-04f, 2.224604749e-04f, 2.231329189e-04f,
-2.238049320e-04f, 2.244765131e-04f, 2.251476610e-04f, 2.258183746e-04f, 2.264886528e-04f, 2.271584945e-04f, 2.278278985e-04f, 2.284968637e-04f, 2.291653890e-04f, 2.298334732e-04f,
-2.305011152e-04f, 2.311683139e-04f, 2.318350682e-04f, 2.325013769e-04f, 2.331672390e-04f, 2.338326533e-04f, 2.344976186e-04f, 2.351621339e-04f, 2.358261981e-04f, 2.364898099e-04f,
-2.371529684e-04f, 2.378156724e-04f, 2.384779208e-04f, 2.391397124e-04f, 2.398010462e-04f, 2.404619210e-04f, 2.411223357e-04f, 2.417822893e-04f, 2.424417805e-04f, 2.431008084e-04f,
-2.437593717e-04f, 2.444174694e-04f, 2.450751004e-04f, 2.457322635e-04f, 2.463889578e-04f, 2.470451819e-04f, 2.477009350e-04f, 2.483562157e-04f, 2.490110232e-04f, 2.496653561e-04f,
-2.503192136e-04f, 2.509725944e-04f, 2.516254974e-04f, 2.522779216e-04f, 2.529298659e-04f, 2.535813291e-04f, 2.542323102e-04f, 2.548828081e-04f, 2.555328216e-04f, 2.561823498e-04f,
-2.568313915e-04f, 2.574799455e-04f, 2.581280110e-04f, 2.587755866e-04f, 2.594226714e-04f, 2.600692643e-04f, 2.607153641e-04f, 2.613609699e-04f, 2.620060805e-04f, 2.626506948e-04f,
-2.632948117e-04f, 2.639384302e-04f, 2.645815492e-04f, 2.652241677e-04f, 2.658662844e-04f, 2.665078985e-04f, 2.671490087e-04f, 2.677896140e-04f, 2.684297133e-04f, 2.690693057e-04f,
-2.697083899e-04f, 2.703469649e-04f, 2.709850297e-04f, 2.716225831e-04f, 2.722596242e-04f, 2.728961518e-04f, 2.735321649e-04f, 2.741676624e-04f, 2.748026433e-04f, 2.754371064e-04f,
-2.760710508e-04f, 2.767044753e-04f, 2.773373790e-04f, 2.779697607e-04f, 2.786016193e-04f, 2.792329539e-04f, 2.798637634e-04f, 2.804940467e-04f, 2.811238027e-04f, 2.817530305e-04f,
-2.823817289e-04f, 2.830098969e-04f, 2.836375335e-04f, 2.842646376e-04f, 2.848912081e-04f, 2.855172441e-04f, 2.861427444e-04f, 2.867677080e-04f, 2.873921339e-04f, 2.880160210e-04f,
-2.886393683e-04f, 2.892621748e-04f, 2.898844393e-04f, 2.905061609e-04f, 2.911273386e-04f, 2.917479712e-04f, 2.923680578e-04f, 2.929875973e-04f, 2.936065887e-04f, 2.942250309e-04f,
-2.948429230e-04f, 2.954602638e-04f, 2.960770524e-04f, 2.966932877e-04f, 2.973089687e-04f, 2.979240944e-04f, 2.985386637e-04f, 2.991526756e-04f, 2.997661292e-04f, 3.003790233e-04f,
-3.009913569e-04f, 3.016031291e-04f, 3.022143388e-04f, 3.028249849e-04f, 3.034350666e-04f, 3.040445827e-04f, 3.046535322e-04f, 3.052619142e-04f, 3.058697275e-04f, 3.064769713e-04f,
-3.070836444e-04f, 3.076897459e-04f, 3.082952748e-04f, 3.089002301e-04f, 3.095046106e-04f, 3.101084156e-04f, 3.107116438e-04f, 3.113142944e-04f, 3.119163663e-04f, 3.125178586e-04f,
-3.131187702e-04f, 3.137191001e-04f, 3.143188473e-04f, 3.149180108e-04f, 3.155165897e-04f, 3.161145829e-04f, 3.167119895e-04f, 3.173088084e-04f, 3.179050387e-04f, 3.185006793e-04f,
-3.190957293e-04f, 3.196901877e-04f, 3.202840535e-04f, 3.208773257e-04f, 3.214700033e-04f, 3.220620854e-04f, 3.226535709e-04f, 3.232444589e-04f, 3.238347484e-04f, 3.244244384e-04f,
-3.250135279e-04f, 3.256020160e-04f, 3.261899016e-04f, 3.267771839e-04f, 3.273638618e-04f, 3.279499343e-04f, 3.285354005e-04f, 3.291202594e-04f, 3.297045101e-04f, 3.302881515e-04f,
-3.308711827e-04f, 3.314536028e-04f, 3.320354107e-04f, 3.326166055e-04f, 3.331971863e-04f, 3.337771520e-04f, 3.343565017e-04f, 3.349352345e-04f, 3.355133494e-04f, 3.360908455e-04f,
-3.366677217e-04f, 3.372439771e-04f, 3.378196108e-04f, 3.383946218e-04f, 3.389690092e-04f, 3.395427720e-04f, 3.401159092e-04f, 3.406884200e-04f, 3.412603033e-04f, 3.418315583e-04f,
-3.424021839e-04f, 3.429721793e-04f, 3.435415434e-04f, 3.441102754e-04f, 3.446783742e-04f, 3.452458391e-04f, 3.458126690e-04f, 3.463788629e-04f, 3.469444200e-04f, 3.475093393e-04f,
-3.480736199e-04f, 3.486372609e-04f, 3.492002612e-04f, 3.497626201e-04f, 3.503243365e-04f, 3.508854095e-04f, 3.514458383e-04f, 3.520056218e-04f, 3.525647592e-04f, 3.531232495e-04f,
-3.536810918e-04f, 3.542382852e-04f, 3.547948287e-04f, 3.553507215e-04f, 3.559059626e-04f, 3.564605512e-04f, 3.570144862e-04f, 3.575677669e-04f, 3.581203922e-04f, 3.586723612e-04f,
-3.592236731e-04f, 3.597743270e-04f, 3.603243219e-04f, 3.608736569e-04f, 3.614223311e-04f, 3.619703437e-04f, 3.625176937e-04f, 3.630643801e-04f, 3.636104022e-04f, 3.641557590e-04f,
-3.647004497e-04f, 3.652444732e-04f, 3.657878287e-04f, 3.663305154e-04f, 3.668725323e-04f, 3.674138786e-04f, 3.679545533e-04f, 3.684945556e-04f, 3.690338845e-04f, 3.695725392e-04f,
-3.701105188e-04f, 3.706478225e-04f, 3.711844492e-04f, 3.717203982e-04f, 3.722556686e-04f, 3.727902595e-04f, 3.733241700e-04f, 3.738573992e-04f, 3.743899462e-04f, 3.749218103e-04f,
-3.754529904e-04f, 3.759834858e-04f, 3.765132955e-04f, 3.770424188e-04f, 3.775708546e-04f, 3.780986022e-04f, 3.786256607e-04f, 3.791520292e-04f, 3.796777069e-04f, 3.802026929e-04f,
-3.807269863e-04f, 3.812505863e-04f, 3.817734921e-04f, 3.822957026e-04f, 3.828172172e-04f, 3.833380350e-04f, 3.838581550e-04f, 3.843775765e-04f, 3.848962985e-04f, 3.854143203e-04f,
-3.859316411e-04f, 3.864482598e-04f, 3.869641758e-04f, 3.874793881e-04f, 3.879938959e-04f, 3.885076984e-04f, 3.890207947e-04f, 3.895331840e-04f, 3.900448655e-04f, 3.905558383e-04f,
-3.910661015e-04f, 3.915756544e-04f, 3.920844961e-04f, 3.925926258e-04f, 3.931000427e-04f, 3.936067458e-04f, 3.941127345e-04f, 3.946180078e-04f, 3.951225650e-04f, 3.956264051e-04f,
-3.961295275e-04f, 3.966319312e-04f, 3.971336155e-04f, 3.976345795e-04f, 3.981348224e-04f, 3.986343434e-04f, 3.991331417e-04f, 3.996312165e-04f, 4.001285669e-04f, 4.006251921e-04f,
-4.011210914e-04f, 4.016162639e-04f, 4.021107089e-04f, 4.026044254e-04f, 4.030974127e-04f, 4.035896701e-04f, 4.040811966e-04f, 4.045719916e-04f, 4.050620542e-04f, 4.055513835e-04f,
-4.060399789e-04f, 4.065278394e-04f, 4.070149644e-04f, 4.075013530e-04f, 4.079870045e-04f, 4.084719180e-04f, 4.089560927e-04f, 4.094395279e-04f, 4.099222228e-04f, 4.104041766e-04f,
-4.108853885e-04f, 4.113658577e-04f, 4.118455835e-04f, 4.123245650e-04f, 4.128028015e-04f, 4.132802923e-04f, 4.137570365e-04f, 4.142330333e-04f, 4.147082820e-04f, 4.151827819e-04f,
-4.156565321e-04f, 4.161295319e-04f, 4.166017805e-04f, 4.170732772e-04f, 4.175440211e-04f, 4.180140116e-04f, 4.184832478e-04f, 4.189517290e-04f, 4.194194544e-04f, 4.198864234e-04f,
-4.203526350e-04f, 4.208180887e-04f, 4.212827835e-04f, 4.217467188e-04f, 4.222098938e-04f, 4.226723078e-04f, 4.231339600e-04f, 4.235948496e-04f, 4.240549760e-04f, 4.245143384e-04f,
-4.249729359e-04f, 4.254307680e-04f, 4.258878339e-04f, 4.263441327e-04f, 4.267996638e-04f, 4.272544265e-04f, 4.277084200e-04f, 4.281616435e-04f, 4.286140964e-04f, 4.290657779e-04f,
-4.295166872e-04f, 4.299668238e-04f, 4.304161867e-04f, 4.308647754e-04f, 4.313125890e-04f, 4.317596269e-04f, 4.322058883e-04f, 4.326513725e-04f, 4.330960789e-04f, 4.335400066e-04f,
-4.339831550e-04f, 4.344255233e-04f, 4.348671109e-04f, 4.353079170e-04f, 4.357479409e-04f, 4.361871820e-04f, 4.366256394e-04f, 4.370633126e-04f, 4.375002007e-04f, 4.379363031e-04f,
-4.383716192e-04f, 4.388061481e-04f, 4.392398892e-04f, 4.396728418e-04f, 4.401050052e-04f, 4.405363787e-04f, 4.409669616e-04f, 4.413967533e-04f, 4.418257529e-04f, 4.422539600e-04f,
-4.426813737e-04f, 4.431079933e-04f, 4.435338182e-04f, 4.439588478e-04f, 4.443830813e-04f, 4.448065180e-04f, 4.452291572e-04f, 4.456509984e-04f, 4.460720408e-04f, 4.464922837e-04f,
-4.469117265e-04f, 4.473303685e-04f, 4.477482089e-04f, 4.481652473e-04f, 4.485814828e-04f, 4.489969149e-04f, 4.494115428e-04f, 4.498253659e-04f, 4.502383836e-04f, 4.506505951e-04f,
-4.510619998e-04f, 4.514725971e-04f, 4.518823863e-04f, 4.522913668e-04f, 4.526995378e-04f, 4.531068988e-04f, 4.535134491e-04f, 4.539191880e-04f, 4.543241149e-04f, 4.547282292e-04f,
-4.551315302e-04f, 4.555340173e-04f, 4.559356898e-04f, 4.563365470e-04f, 4.567365885e-04f, 4.571358134e-04f, 4.575342212e-04f, 4.579318112e-04f, 4.583285829e-04f, 4.587245355e-04f,
-4.591196685e-04f, 4.595139812e-04f, 4.599074730e-04f, 4.603001433e-04f, 4.606919914e-04f, 4.610830168e-04f, 4.614732187e-04f, 4.618625967e-04f, 4.622511500e-04f, 4.626388780e-04f,
-4.630257802e-04f, 4.634118559e-04f, 4.637971045e-04f, 4.641815254e-04f, 4.645651180e-04f, 4.649478817e-04f, 4.653298158e-04f, 4.657109199e-04f, 4.660911932e-04f, 4.664706351e-04f,
-4.668492452e-04f, 4.672270227e-04f, 4.676039671e-04f, 4.679800777e-04f, 4.683553540e-04f, 4.687297955e-04f, 4.691034014e-04f, 4.694761712e-04f, 4.698481044e-04f, 4.702192002e-04f,
-4.705894583e-04f, 4.709588779e-04f, 4.713274584e-04f, 4.716951994e-04f, 4.720621002e-04f, 4.724281602e-04f, 4.727933789e-04f, 4.731577557e-04f, 4.735212901e-04f, 4.738839813e-04f,
-4.742458290e-04f, 4.746068324e-04f, 4.749669911e-04f, 4.753263045e-04f, 4.756847719e-04f, 4.760423930e-04f, 4.763991670e-04f, 4.767550934e-04f, 4.771101717e-04f, 4.774644013e-04f,
-4.778177817e-04f, 4.781703123e-04f, 4.785219925e-04f, 4.788728218e-04f, 4.792227997e-04f, 4.795719255e-04f, 4.799201989e-04f, 4.802676191e-04f, 4.806141857e-04f, 4.809598981e-04f,
-4.813047558e-04f, 4.816487583e-04f, 4.819919050e-04f, 4.823341953e-04f, 4.826756288e-04f, 4.830162049e-04f, 4.833559230e-04f, 4.836947827e-04f, 4.840327835e-04f, 4.843699247e-04f,
-4.847062059e-04f, 4.850416265e-04f, 4.853761861e-04f, 4.857098840e-04f, 4.860427198e-04f, 4.863746930e-04f, 4.867058031e-04f, 4.870360494e-04f, 4.873654316e-04f, 4.876939491e-04f,
-4.880216014e-04f, 4.883483880e-04f, 4.886743084e-04f, 4.889993621e-04f, 4.893235485e-04f, 4.896468672e-04f, 4.899693177e-04f, 4.902908995e-04f, 4.906116120e-04f, 4.909314548e-04f,
-4.912504274e-04f, 4.915685293e-04f, 4.918857600e-04f, 4.922021190e-04f, 4.925176058e-04f, 4.928322200e-04f, 4.931459610e-04f, 4.934588283e-04f, 4.937708216e-04f, 4.940819403e-04f,
-4.943921839e-04f, 4.947015519e-04f, 4.950100439e-04f, 4.953176595e-04f, 4.956243980e-04f, 4.959302591e-04f, 4.962352423e-04f, 4.965393471e-04f, 4.968425730e-04f, 4.971449196e-04f,
-4.974463865e-04f, 4.977469731e-04f, 4.980466790e-04f, 4.983455037e-04f, 4.986434469e-04f, 4.989405079e-04f, 4.992366864e-04f, 4.995319820e-04f, 4.998263941e-04f, 5.001199223e-04f,
-5.004125662e-04f, 5.007043253e-04f, 5.009951993e-04f, 5.012851875e-04f, 5.015742896e-04f, 5.018625052e-04f, 5.021498338e-04f, 5.024362750e-04f, 5.027218283e-04f, 5.030064934e-04f,
-5.032902697e-04f, 5.035731568e-04f, 5.038551544e-04f, 5.041362619e-04f, 5.044164791e-04f, 5.046958053e-04f, 5.049742403e-04f, 5.052517836e-04f, 5.055284347e-04f, 5.058041933e-04f,
-5.060790589e-04f, 5.063530312e-04f, 5.066261097e-04f, 5.068982940e-04f, 5.071695836e-04f, 5.074399782e-04f, 5.077094775e-04f, 5.079780808e-04f, 5.082457880e-04f, 5.085125985e-04f,
-5.087785119e-04f, 5.090435279e-04f, 5.093076461e-04f, 5.095708661e-04f, 5.098331874e-04f, 5.100946097e-04f, 5.103551325e-04f, 5.106147556e-04f, 5.108734785e-04f, 5.111313008e-04f,
-5.113882221e-04f, 5.116442421e-04f, 5.118993604e-04f, 5.121535765e-04f, 5.124068902e-04f, 5.126593010e-04f, 5.129108086e-04f, 5.131614125e-04f, 5.134111125e-04f, 5.136599081e-04f,
-5.139077989e-04f, 5.141547847e-04f, 5.144008650e-04f, 5.146460395e-04f, 5.148903078e-04f, 5.151336696e-04f, 5.153761244e-04f, 5.156176720e-04f, 5.158583119e-04f, 5.160980439e-04f,
-5.163368675e-04f, 5.165747825e-04f, 5.168117884e-04f, 5.170478849e-04f, 5.172830717e-04f, 5.175173484e-04f, 5.177507147e-04f, 5.179831703e-04f, 5.182147147e-04f, 5.184453477e-04f,
-5.186750690e-04f, 5.189038781e-04f, 5.191317747e-04f, 5.193587586e-04f, 5.195848294e-04f, 5.198099867e-04f, 5.200342303e-04f, 5.202575597e-04f, 5.204799748e-04f, 5.207014751e-04f,
-5.209220603e-04f, 5.211417302e-04f, 5.213604843e-04f, 5.215783225e-04f, 5.217952443e-04f, 5.220112494e-04f, 5.222263376e-04f, 5.224405086e-04f, 5.226537619e-04f, 5.228660974e-04f,
-5.230775147e-04f, 5.232880134e-04f, 5.234975934e-04f, 5.237062543e-04f, 5.239139958e-04f, 5.241208176e-04f, 5.243267195e-04f, 5.245317010e-04f, 5.247357620e-04f, 5.249389021e-04f,
-5.251411210e-04f, 5.253424186e-04f, 5.255427943e-04f, 5.257422481e-04f, 5.259407796e-04f, 5.261383885e-04f, 5.263350745e-04f, 5.265308375e-04f, 5.267256770e-04f, 5.269195928e-04f,
-5.271125847e-04f, 5.273046523e-04f, 5.274957954e-04f, 5.276860138e-04f, 5.278753072e-04f, 5.280636752e-04f, 5.282511177e-04f, 5.284376343e-04f, 5.286232249e-04f, 5.288078892e-04f,
-5.289916268e-04f, 5.291744376e-04f, 5.293563213e-04f, 5.295372776e-04f, 5.297173063e-04f, 5.298964072e-04f, 5.300745799e-04f, 5.302518243e-04f, 5.304281401e-04f, 5.306035271e-04f,
-5.307779850e-04f, 5.309515136e-04f, 5.311241126e-04f, 5.312957818e-04f, 5.314665210e-04f, 5.316363300e-04f, 5.318052084e-04f, 5.319731562e-04f, 5.321401730e-04f, 5.323062586e-04f,
-5.324714128e-04f, 5.326356355e-04f, 5.327989262e-04f, 5.329612850e-04f, 5.331227114e-04f, 5.332832054e-04f, 5.334427666e-04f, 5.336013949e-04f, 5.337590901e-04f, 5.339158520e-04f,
-5.340716803e-04f, 5.342265749e-04f, 5.343805354e-04f, 5.345335619e-04f, 5.346856539e-04f, 5.348368114e-04f, 5.349870342e-04f, 5.351363219e-04f, 5.352846746e-04f, 5.354320918e-04f,
-5.355785735e-04f, 5.357241195e-04f, 5.358687296e-04f, 5.360124036e-04f, 5.361551413e-04f, 5.362969425e-04f, 5.364378070e-04f, 5.365777347e-04f, 5.367167254e-04f, 5.368547789e-04f,
-5.369918950e-04f, 5.371280736e-04f, 5.372633145e-04f, 5.373976174e-04f, 5.375309824e-04f, 5.376634091e-04f, 5.377948974e-04f, 5.379254471e-04f, 5.380550582e-04f, 5.381837303e-04f,
-5.383114635e-04f, 5.384382574e-04f, 5.385641120e-04f, 5.386890271e-04f, 5.388130025e-04f, 5.389360382e-04f, 5.390581338e-04f, 5.391792894e-04f, 5.392995047e-04f, 5.394187797e-04f,
-5.395371140e-04f, 5.396545077e-04f, 5.397709606e-04f, 5.398864726e-04f, 5.400010434e-04f, 5.401146730e-04f, 5.402273613e-04f, 5.403391081e-04f, 5.404499132e-04f, 5.405597766e-04f,
-5.406686981e-04f, 5.407766777e-04f, 5.408837151e-04f, 5.409898102e-04f, 5.410949630e-04f, 5.411991733e-04f, 5.413024410e-04f, 5.414047660e-04f, 5.415061482e-04f, 5.416065874e-04f,
-5.417060836e-04f, 5.418046366e-04f, 5.419022464e-04f, 5.419989128e-04f, 5.420946357e-04f, 5.421894150e-04f, 5.422832507e-04f, 5.423761426e-04f, 5.424680906e-04f, 5.425590946e-04f,
-5.426491546e-04f, 5.427382705e-04f, 5.428264421e-04f, 5.429136693e-04f, 5.429999522e-04f, 5.430852905e-04f, 5.431696842e-04f, 5.432531333e-04f, 5.433356377e-04f, 5.434171972e-04f,
-5.434978118e-04f, 5.435774814e-04f, 5.436562059e-04f, 5.437339853e-04f, 5.438108196e-04f, 5.438867085e-04f, 5.439616521e-04f, 5.440356504e-04f, 5.441087031e-04f, 5.441808103e-04f,
-5.442519720e-04f, 5.443221879e-04f, 5.443914582e-04f, 5.444597827e-04f, 5.445271614e-04f, 5.445935942e-04f, 5.446590811e-04f, 5.447236221e-04f, 5.447872170e-04f, 5.448498658e-04f,
-5.449115686e-04f, 5.449723252e-04f, 5.450321356e-04f, 5.450909997e-04f, 5.451489176e-04f, 5.452058892e-04f, 5.452619145e-04f, 5.453169933e-04f, 5.453711258e-04f, 5.454243118e-04f,
-5.454765514e-04f, 5.455278445e-04f, 5.455781910e-04f, 5.456275910e-04f, 5.456760445e-04f, 5.457235514e-04f, 5.457701117e-04f, 5.458157253e-04f, 5.458603924e-04f, 5.459041128e-04f,
-5.459468865e-04f, 5.459887136e-04f, 5.460295940e-04f, 5.460695277e-04f, 5.461085147e-04f, 5.461465551e-04f, 5.461836487e-04f, 5.462197957e-04f, 5.462549960e-04f, 5.462892496e-04f,
-5.463225565e-04f, 5.463549167e-04f, 5.463863303e-04f, 5.464167972e-04f, 5.464463174e-04f, 5.464748911e-04f, 5.465025181e-04f, 5.465291984e-04f, 5.465549323e-04f, 5.465797195e-04f,
-5.466035602e-04f, 5.466264544e-04f, 5.466484020e-04f, 5.466694032e-04f, 5.466894580e-04f, 5.467085663e-04f, 5.467267283e-04f, 5.467439439e-04f, 5.467602132e-04f, 5.467755362e-04f,
-5.467899129e-04f, 5.468033435e-04f, 5.468158279e-04f, 5.468273661e-04f, 5.468379583e-04f, 5.468476044e-04f, 5.468563046e-04f, 5.468640588e-04f, 5.468708671e-04f, 5.468767296e-04f,
-5.468816463e-04f, 5.468856173e-04f, 5.468886426e-04f, 5.468907223e-04f, 5.468918564e-04f, 5.468920451e-04f, 5.468912883e-04f, 5.468895862e-04f, 5.468869388e-04f, 5.468833461e-04f,
-5.468788083e-04f, 5.468733254e-04f, 5.468668975e-04f, 5.468595247e-04f, 5.468512070e-04f, 5.468419445e-04f, 5.468317373e-04f, 5.468205855e-04f, 5.468084892e-04f, 5.467954484e-04f,
-5.467814632e-04f, 5.467665338e-04f, 5.467506601e-04f, 5.467338424e-04f, 5.467160807e-04f, 5.466973750e-04f, 5.466777256e-04f, 5.466571324e-04f, 5.466355956e-04f, 5.466131153e-04f,
-5.465896916e-04f, 5.465653245e-04f, 5.465400143e-04f, 5.465137609e-04f, 5.464865646e-04f, 5.464584254e-04f, 5.464293434e-04f, 5.463993188e-04f, 5.463683517e-04f, 5.463364421e-04f,
-5.463035902e-04f, 5.462697962e-04f, 5.462350601e-04f, 5.461993820e-04f, 5.461627622e-04f, 5.461252006e-04f, 5.460866976e-04f, 5.460472530e-04f, 5.460068672e-04f, 5.459655403e-04f,
-5.459232723e-04f, 5.458800634e-04f, 5.458359138e-04f, 5.457908236e-04f, 5.457447929e-04f, 5.456978219e-04f, 5.456499107e-04f, 5.456010595e-04f, 5.455512684e-04f, 5.455005375e-04f,
-5.454488671e-04f, 5.453962573e-04f, 5.453427081e-04f, 5.452882199e-04f, 5.452327926e-04f, 5.451764266e-04f, 5.451191219e-04f, 5.450608788e-04f, 5.450016973e-04f, 5.449415777e-04f,
-5.448805201e-04f, 5.448185247e-04f, 5.447555916e-04f, 5.446917211e-04f, 5.446269133e-04f, 5.445611683e-04f, 5.444944864e-04f, 5.444268677e-04f, 5.443583125e-04f, 5.442888208e-04f,
-5.442183929e-04f, 5.441470290e-04f, 5.440747292e-04f, 5.440014938e-04f, 5.439273229e-04f, 5.438522167e-04f, 5.437761754e-04f, 5.436991992e-04f, 5.436212884e-04f, 5.435424430e-04f,
-5.434626633e-04f, 5.433819495e-04f, 5.433003019e-04f, 5.432177205e-04f, 5.431342057e-04f, 5.430497575e-04f, 5.429643763e-04f, 5.428780623e-04f, 5.427908156e-04f, 5.427026364e-04f,
-5.426135250e-04f, 5.425234817e-04f, 5.424325065e-04f, 5.423405998e-04f, 5.422477618e-04f, 5.421539926e-04f, 5.420592926e-04f, 5.419636618e-04f, 5.418671007e-04f, 5.417696093e-04f,
-5.416711880e-04f, 5.415718369e-04f, 5.414715563e-04f, 5.413703464e-04f, 5.412682075e-04f, 5.411651398e-04f, 5.410611435e-04f, 5.409562189e-04f, 5.408503663e-04f, 5.407435858e-04f,
-5.406358778e-04f, 5.405272424e-04f, 5.404176800e-04f, 5.403071907e-04f, 5.401957749e-04f, 5.400834328e-04f, 5.399701645e-04f, 5.398559705e-04f, 5.397408510e-04f, 5.396248062e-04f,
-5.395078363e-04f, 5.393899417e-04f, 5.392711227e-04f, 5.391513794e-04f, 5.390307121e-04f, 5.389091212e-04f, 5.387866069e-04f, 5.386631694e-04f, 5.385388091e-04f, 5.384135263e-04f,
-5.382873211e-04f, 5.381601939e-04f, 5.380321450e-04f, 5.379031746e-04f, 5.377732830e-04f, 5.376424706e-04f, 5.375107376e-04f, 5.373780843e-04f, 5.372445110e-04f, 5.371100179e-04f,
-5.369746055e-04f, 5.368382739e-04f, 5.367010235e-04f, 5.365628545e-04f, 5.364237673e-04f, 5.362837623e-04f, 5.361428395e-04f, 5.360009995e-04f, 5.358582425e-04f, 5.357145687e-04f,
-5.355699786e-04f, 5.354244724e-04f, 5.352780505e-04f, 5.351307130e-04f, 5.349824605e-04f, 5.348332931e-04f, 5.346832113e-04f, 5.345322153e-04f, 5.343803054e-04f, 5.342274820e-04f,
-5.340737454e-04f, 5.339190959e-04f, 5.337635339e-04f, 5.336070597e-04f, 5.334496736e-04f, 5.332913759e-04f, 5.331321671e-04f, 5.329720473e-04f, 5.328110170e-04f, 5.326490766e-04f,
-5.324862262e-04f, 5.323224664e-04f, 5.321577974e-04f, 5.319922196e-04f, 5.318257333e-04f, 5.316583389e-04f, 5.314900367e-04f, 5.313208271e-04f, 5.311507104e-04f, 5.309796870e-04f,
-5.308077572e-04f, 5.306349215e-04f, 5.304611801e-04f, 5.302865335e-04f, 5.301109819e-04f, 5.299345258e-04f, 5.297571655e-04f, 5.295789014e-04f, 5.293997338e-04f, 5.292196632e-04f,
-5.290386899e-04f, 5.288568142e-04f, 5.286740366e-04f, 5.284903575e-04f, 5.283057771e-04f, 5.281202959e-04f, 5.279339143e-04f, 5.277466326e-04f, 5.275584513e-04f, 5.273693707e-04f,
-5.271793912e-04f, 5.269885132e-04f, 5.267967370e-04f, 5.266040632e-04f, 5.264104920e-04f, 5.262160239e-04f, 5.260206593e-04f, 5.258243985e-04f, 5.256272420e-04f, 5.254291902e-04f,
-5.252302434e-04f, 5.250304021e-04f, 5.248296667e-04f, 5.246280376e-04f, 5.244255151e-04f, 5.242220998e-04f, 5.240177920e-04f, 5.238125921e-04f, 5.236065005e-04f, 5.233995178e-04f,
-5.231916442e-04f, 5.229828802e-04f, 5.227732262e-04f, 5.225626827e-04f, 5.223512500e-04f, 5.221389287e-04f, 5.219257190e-04f, 5.217116215e-04f, 5.214966366e-04f, 5.212807647e-04f,
-5.210640063e-04f, 5.208463617e-04f, 5.206278314e-04f, 5.204084159e-04f, 5.201881156e-04f, 5.199669310e-04f, 5.197448624e-04f, 5.195219103e-04f, 5.192980752e-04f, 5.190733575e-04f,
-5.188477576e-04f, 5.186212761e-04f, 5.183939133e-04f, 5.181656697e-04f, 5.179365458e-04f, 5.177065421e-04f, 5.174756589e-04f, 5.172438967e-04f, 5.170112561e-04f, 5.167777374e-04f,
-5.165433411e-04f, 5.163080677e-04f, 5.160719177e-04f, 5.158348915e-04f, 5.155969896e-04f, 5.153582124e-04f, 5.151185605e-04f, 5.148780343e-04f, 5.146366342e-04f, 5.143943609e-04f,
-5.141512146e-04f, 5.139071960e-04f, 5.136623055e-04f, 5.134165435e-04f, 5.131699107e-04f, 5.129224073e-04f, 5.126740340e-04f, 5.124247912e-04f, 5.121746795e-04f, 5.119236992e-04f,
-5.116718510e-04f, 5.114191352e-04f, 5.111655524e-04f, 5.109111031e-04f, 5.106557878e-04f, 5.103996069e-04f, 5.101425611e-04f, 5.098846507e-04f, 5.096258763e-04f, 5.093662384e-04f,
-5.091057375e-04f, 5.088443742e-04f, 5.085821488e-04f, 5.083190620e-04f, 5.080551143e-04f, 5.077903061e-04f, 5.075246379e-04f, 5.072581104e-04f, 5.069907240e-04f, 5.067224792e-04f,
-5.064533766e-04f, 5.061834166e-04f, 5.059125999e-04f, 5.056409269e-04f, 5.053683981e-04f, 5.050950142e-04f, 5.048207755e-04f, 5.045456827e-04f, 5.042697363e-04f, 5.039929368e-04f,
-5.037152848e-04f, 5.034367807e-04f, 5.031574252e-04f, 5.028772188e-04f, 5.025961620e-04f, 5.023142553e-04f, 5.020314993e-04f, 5.017478946e-04f, 5.014634417e-04f, 5.011781411e-04f,
-5.008919934e-04f, 5.006049992e-04f, 5.003171589e-04f, 5.000284732e-04f, 4.997389427e-04f, 4.994485678e-04f, 4.991573491e-04f, 4.988652872e-04f, 4.985723827e-04f, 4.982786361e-04f,
-4.979840480e-04f, 4.976886189e-04f, 4.973923494e-04f, 4.970952401e-04f, 4.967972916e-04f, 4.964985044e-04f, 4.961988791e-04f, 4.958984163e-04f, 4.955971165e-04f, 4.952949803e-04f,
-4.949920084e-04f, 4.946882012e-04f, 4.943835594e-04f, 4.940780836e-04f, 4.937717743e-04f, 4.934646321e-04f, 4.931566576e-04f, 4.928478514e-04f, 4.925382142e-04f, 4.922277464e-04f,
-4.919164486e-04f, 4.916043216e-04f, 4.912913657e-04f, 4.909775818e-04f, 4.906629703e-04f, 4.903475319e-04f, 4.900312671e-04f, 4.897141766e-04f, 4.893962610e-04f, 4.890775208e-04f,
-4.887579568e-04f, 4.884375694e-04f, 4.881163593e-04f, 4.877943271e-04f, 4.874714734e-04f, 4.871477989e-04f, 4.868233041e-04f, 4.864979897e-04f, 4.861718562e-04f, 4.858449044e-04f,
-4.855171348e-04f, 4.851885480e-04f, 4.848591447e-04f, 4.845289255e-04f, 4.841978911e-04f, 4.838660419e-04f, 4.835333788e-04f, 4.831999022e-04f, 4.828656129e-04f, 4.825305115e-04f,
-4.821945985e-04f, 4.818578748e-04f, 4.815203407e-04f, 4.811819972e-04f, 4.808428446e-04f, 4.805028838e-04f, 4.801621153e-04f, 4.798205398e-04f, 4.794781579e-04f, 4.791349703e-04f,
-4.787909776e-04f, 4.784461805e-04f, 4.781005796e-04f, 4.777541756e-04f, 4.774069691e-04f, 4.770589608e-04f, 4.767101513e-04f, 4.763605414e-04f, 4.760101315e-04f, 4.756589225e-04f,
-4.753069150e-04f, 4.749541097e-04f, 4.746005071e-04f, 4.742461080e-04f, 4.738909130e-04f, 4.735349228e-04f, 4.731781381e-04f, 4.728205596e-04f, 4.724621878e-04f, 4.721030236e-04f,
-4.717430675e-04f, 4.713823202e-04f, 4.710207825e-04f, 4.706584550e-04f, 4.702953383e-04f, 4.699314332e-04f, 4.695667403e-04f, 4.692012604e-04f, 4.688349940e-04f, 4.684679420e-04f,
-4.681001049e-04f, 4.677314835e-04f, 4.673620785e-04f, 4.669918905e-04f, 4.666209203e-04f, 4.662491685e-04f, 4.658766358e-04f, 4.655033230e-04f, 4.651292307e-04f, 4.647543597e-04f,
-4.643787105e-04f, 4.640022840e-04f, 4.636250809e-04f, 4.632471018e-04f, 4.628683474e-04f, 4.624888185e-04f, 4.621085157e-04f, 4.617274398e-04f, 4.613455915e-04f, 4.609629716e-04f,
-4.605795806e-04f, 4.601954193e-04f, 4.598104885e-04f, 4.594247888e-04f, 4.590383211e-04f, 4.586510859e-04f, 4.582630840e-04f, 4.578743162e-04f, 4.574847832e-04f, 4.570944856e-04f,
-4.567034243e-04f, 4.563115999e-04f, 4.559190132e-04f, 4.555256649e-04f, 4.551315557e-04f, 4.547366865e-04f, 4.543410578e-04f, 4.539446704e-04f, 4.535475252e-04f, 4.531496227e-04f,
-4.527509638e-04f, 4.523515492e-04f, 4.519513797e-04f, 4.515504559e-04f, 4.511487786e-04f, 4.507463486e-04f, 4.503431666e-04f, 4.499392334e-04f, 4.495345497e-04f, 4.491291163e-04f,
-4.487229339e-04f, 4.483160033e-04f, 4.479083251e-04f, 4.474999003e-04f, 4.470907295e-04f, 4.466808135e-04f, 4.462701530e-04f, 4.458587489e-04f, 4.454466018e-04f, 4.450337126e-04f,
-4.446200819e-04f, 4.442057107e-04f, 4.437905995e-04f, 4.433747493e-04f, 4.429581607e-04f, 4.425408346e-04f, 4.421227717e-04f, 4.417039728e-04f, 4.412844386e-04f, 4.408641700e-04f,
-4.404431677e-04f, 4.400214325e-04f, 4.395989651e-04f, 4.391757664e-04f, 4.387518371e-04f, 4.383271780e-04f, 4.379017899e-04f, 4.374756736e-04f, 4.370488299e-04f, 4.366212595e-04f,
-4.361929633e-04f, 4.357639419e-04f, 4.353341963e-04f, 4.349037273e-04f, 4.344725355e-04f, 4.340406218e-04f, 4.336079870e-04f, 4.331746320e-04f, 4.327405574e-04f, 4.323057641e-04f,
-4.318702529e-04f, 4.314340246e-04f, 4.309970799e-04f, 4.305594198e-04f, 4.301210450e-04f, 4.296819563e-04f, 4.292421545e-04f, 4.288016405e-04f, 4.283604149e-04f, 4.279184788e-04f,
-4.274758328e-04f, 4.270324777e-04f, 4.265884145e-04f, 4.261436438e-04f, 4.256981666e-04f, 4.252519836e-04f, 4.248050957e-04f, 4.243575037e-04f, 4.239092083e-04f, 4.234602105e-04f,
-4.230105110e-04f, 4.225601107e-04f, 4.221090104e-04f, 4.216572110e-04f, 4.212047131e-04f, 4.207515178e-04f, 4.202976258e-04f, 4.198430379e-04f, 4.193877550e-04f, 4.189317779e-04f,
-4.184751075e-04f, 4.180177445e-04f, 4.175596899e-04f, 4.171009445e-04f, 4.166415090e-04f, 4.161813844e-04f, 4.157205715e-04f, 4.152590711e-04f, 4.147968841e-04f, 4.143340112e-04f,
-4.138704535e-04f, 4.134062117e-04f, 4.129412866e-04f, 4.124756792e-04f, 4.120093902e-04f, 4.115424205e-04f, 4.110747710e-04f, 4.106064426e-04f, 4.101374360e-04f, 4.096677521e-04f,
-4.091973919e-04f, 4.087263561e-04f, 4.082546456e-04f, 4.077822613e-04f, 4.073092040e-04f, 4.068354746e-04f, 4.063610740e-04f, 4.058860030e-04f, 4.054102626e-04f, 4.049338535e-04f,
-4.044567766e-04f, 4.039790328e-04f, 4.035006231e-04f, 4.030215481e-04f, 4.025418089e-04f, 4.020614063e-04f, 4.015803411e-04f, 4.010986144e-04f, 4.006162268e-04f, 4.001331793e-04f,
-3.996494729e-04f, 3.991651082e-04f, 3.986800864e-04f, 3.981944082e-04f, 3.977080745e-04f, 3.972210861e-04f, 3.967334441e-04f, 3.962451493e-04f, 3.957562025e-04f, 3.952666047e-04f,
-3.947763567e-04f, 3.942854595e-04f, 3.937939138e-04f, 3.933017207e-04f, 3.928088811e-04f, 3.923153957e-04f, 3.918212656e-04f, 3.913264915e-04f, 3.908310745e-04f, 3.903350153e-04f,
-3.898383150e-04f, 3.893409744e-04f, 3.888429944e-04f, 3.883443759e-04f, 3.878451199e-04f, 3.873452272e-04f, 3.868446987e-04f, 3.863435353e-04f, 3.858417381e-04f, 3.853393077e-04f,
-3.848362453e-04f, 3.843325517e-04f, 3.838282277e-04f, 3.833232744e-04f, 3.828176926e-04f, 3.823114833e-04f, 3.818046473e-04f, 3.812971856e-04f, 3.807890992e-04f, 3.802803888e-04f,
-3.797710555e-04f, 3.792611002e-04f, 3.787505238e-04f, 3.782393272e-04f, 3.777275113e-04f, 3.772150772e-04f, 3.767020256e-04f, 3.761883575e-04f, 3.756740740e-04f, 3.751591758e-04f,
-3.746436639e-04f, 3.741275393e-04f, 3.736108029e-04f, 3.730934556e-04f, 3.725754984e-04f, 3.720569321e-04f, 3.715377579e-04f, 3.710179764e-04f, 3.704975888e-04f, 3.699765960e-04f,
-3.694549989e-04f, 3.689327984e-04f, 3.684099954e-04f, 3.678865911e-04f, 3.673625861e-04f, 3.668379816e-04f, 3.663127785e-04f, 3.657869777e-04f, 3.652605802e-04f, 3.647335869e-04f,
-3.642059987e-04f, 3.636778167e-04f, 3.631490418e-04f, 3.626196748e-04f, 3.620897169e-04f, 3.615591689e-04f, 3.610280318e-04f, 3.604963066e-04f, 3.599639942e-04f, 3.594310956e-04f,
-3.588976117e-04f, 3.583635435e-04f, 3.578288920e-04f, 3.572936580e-04f, 3.567578427e-04f, 3.562214470e-04f, 3.556844718e-04f, 3.551469180e-04f, 3.546087867e-04f, 3.540700789e-04f,
-3.535307955e-04f, 3.529909374e-04f, 3.524505057e-04f, 3.519095013e-04f, 3.513679252e-04f, 3.508257783e-04f, 3.502830617e-04f, 3.497397763e-04f, 3.491959232e-04f, 3.486515032e-04f,
-3.481065173e-04f, 3.475609666e-04f, 3.470148520e-04f, 3.464681746e-04f, 3.459209352e-04f, 3.453731348e-04f, 3.448247746e-04f, 3.442758553e-04f, 3.437263781e-04f, 3.431763440e-04f,
-3.426257538e-04f, 3.420746086e-04f, 3.415229094e-04f, 3.409706572e-04f, 3.404178529e-04f, 3.398644976e-04f, 3.393105923e-04f, 3.387561379e-04f, 3.382011355e-04f, 3.376455860e-04f,
-3.370894904e-04f, 3.365328498e-04f, 3.359756652e-04f, 3.354179374e-04f, 3.348596676e-04f, 3.343008568e-04f, 3.337415059e-04f, 3.331816159e-04f, 3.326211879e-04f, 3.320602229e-04f,
-3.314987218e-04f, 3.309366857e-04f, 3.303741156e-04f, 3.298110125e-04f, 3.292473774e-04f, 3.286832112e-04f, 3.281185151e-04f, 3.275532901e-04f, 3.269875371e-04f, 3.264212571e-04f,
-3.258544512e-04f, 3.252871205e-04f, 3.247192658e-04f, 3.241508882e-04f, 3.235819888e-04f, 3.230125686e-04f, 3.224426285e-04f, 3.218721697e-04f, 3.213011931e-04f, 3.207296997e-04f,
-3.201576906e-04f, 3.195851668e-04f, 3.190121293e-04f, 3.184385791e-04f, 3.178645173e-04f, 3.172899449e-04f, 3.167148630e-04f, 3.161392725e-04f, 3.155631745e-04f, 3.149865700e-04f,
-3.144094600e-04f, 3.138318457e-04f, 3.132537279e-04f, 3.126751078e-04f, 3.120959864e-04f, 3.115163647e-04f, 3.109362437e-04f, 3.103556245e-04f, 3.097745082e-04f, 3.091928957e-04f,
-3.086107881e-04f, 3.080281865e-04f, 3.074450918e-04f, 3.068615052e-04f, 3.062774277e-04f, 3.056928602e-04f, 3.051078040e-04f, 3.045222599e-04f, 3.039362290e-04f, 3.033497125e-04f,
-3.027627113e-04f, 3.021752265e-04f, 3.015872591e-04f, 3.009988102e-04f, 3.004098809e-04f, 2.998204721e-04f, 2.992305850e-04f, 2.986402205e-04f, 2.980493798e-04f, 2.974580639e-04f,
-2.968662739e-04f, 2.962740108e-04f, 2.956812756e-04f, 2.950880694e-04f, 2.944943934e-04f, 2.939002484e-04f, 2.933056357e-04f, 2.927105562e-04f, 2.921150110e-04f, 2.915190013e-04f,
-2.909225279e-04f, 2.903255921e-04f, 2.897281948e-04f, 2.891303371e-04f, 2.885320202e-04f, 2.879332450e-04f, 2.873340126e-04f, 2.867343241e-04f, 2.861341806e-04f, 2.855335831e-04f,
-2.849325328e-04f, 2.843310305e-04f, 2.837290776e-04f, 2.831266749e-04f, 2.825238236e-04f, 2.819205248e-04f, 2.813167795e-04f, 2.807125888e-04f, 2.801079538e-04f, 2.795028756e-04f,
-2.788973552e-04f, 2.782913937e-04f, 2.776849921e-04f, 2.770781517e-04f, 2.764708734e-04f, 2.758631583e-04f, 2.752550075e-04f, 2.746464221e-04f, 2.740374031e-04f, 2.734279517e-04f,
-2.728180690e-04f, 2.722077559e-04f, 2.715970137e-04f, 2.709858433e-04f, 2.703742459e-04f, 2.697622226e-04f, 2.691497744e-04f, 2.685369025e-04f, 2.679236078e-04f, 2.673098916e-04f,
-2.666957549e-04f, 2.660811987e-04f, 2.654662243e-04f, 2.648508326e-04f, 2.642350248e-04f, 2.636188019e-04f, 2.630021651e-04f, 2.623851154e-04f, 2.617676540e-04f, 2.611497819e-04f,
-2.605315003e-04f, 2.599128102e-04f, 2.592937127e-04f, 2.586742089e-04f, 2.580542999e-04f, 2.574339869e-04f, 2.568132709e-04f, 2.561921530e-04f, 2.555706344e-04f, 2.549487160e-04f,
-2.543263991e-04f, 2.537036848e-04f, 2.530805740e-04f, 2.524570680e-04f, 2.518331679e-04f, 2.512088747e-04f, 2.505841896e-04f, 2.499591136e-04f, 2.493336479e-04f, 2.487077935e-04f,
-2.480815517e-04f, 2.474549234e-04f, 2.468279099e-04f, 2.462005122e-04f, 2.455727314e-04f, 2.449445686e-04f, 2.443160250e-04f, 2.436871017e-04f, 2.430577997e-04f, 2.424281202e-04f,
-2.417980643e-04f, 2.411676332e-04f, 2.405368279e-04f, 2.399056495e-04f, 2.392740992e-04f, 2.386421781e-04f, 2.380098872e-04f, 2.373772278e-04f, 2.367442010e-04f, 2.361108078e-04f,
-2.354770494e-04f, 2.348429269e-04f, 2.342084414e-04f, 2.335735940e-04f, 2.329383859e-04f, 2.323028182e-04f, 2.316668920e-04f, 2.310306085e-04f, 2.303939687e-04f, 2.297569738e-04f,
-2.291196248e-04f, 2.284819231e-04f, 2.278438696e-04f, 2.272054655e-04f, 2.265667119e-04f, 2.259276099e-04f, 2.252881607e-04f, 2.246483655e-04f, 2.240082252e-04f, 2.233677411e-04f,
-2.227269143e-04f, 2.220857460e-04f, 2.214442372e-04f, 2.208023891e-04f, 2.201602028e-04f, 2.195176794e-04f, 2.188748202e-04f, 2.182316262e-04f, 2.175880985e-04f, 2.169442383e-04f,
-2.163000468e-04f, 2.156555250e-04f, 2.150106741e-04f, 2.143654953e-04f, 2.137199897e-04f, 2.130741583e-04f, 2.124280024e-04f, 2.117815231e-04f, 2.111347216e-04f, 2.104875989e-04f,
-2.098401562e-04f, 2.091923947e-04f, 2.085443155e-04f, 2.078959197e-04f, 2.072472086e-04f, 2.065981831e-04f, 2.059488445e-04f, 2.052991939e-04f, 2.046492325e-04f, 2.039989614e-04f,
-2.033483817e-04f, 2.026974946e-04f, 2.020463013e-04f, 2.013948028e-04f, 2.007430004e-04f, 2.000908952e-04f, 1.994384883e-04f, 1.987857808e-04f, 1.981327740e-04f, 1.974794690e-04f,
-1.968258669e-04f, 1.961719689e-04f, 1.955177761e-04f, 1.948632897e-04f, 1.942085108e-04f, 1.935534406e-04f, 1.928980802e-04f, 1.922424309e-04f, 1.915864936e-04f, 1.909302697e-04f,
-1.902737602e-04f, 1.896169663e-04f, 1.889598891e-04f, 1.883025299e-04f, 1.876448898e-04f, 1.869869698e-04f, 1.863287713e-04f, 1.856702953e-04f, 1.850115430e-04f, 1.843525155e-04f,
-1.836932141e-04f, 1.830336398e-04f, 1.823737939e-04f, 1.817136774e-04f, 1.810532916e-04f, 1.803926376e-04f, 1.797317166e-04f, 1.790705297e-04f, 1.784090781e-04f, 1.777473630e-04f,
-1.770853854e-04f, 1.764231467e-04f, 1.757606478e-04f, 1.750978901e-04f, 1.744348747e-04f, 1.737716027e-04f, 1.731080753e-04f, 1.724442936e-04f, 1.717802589e-04f, 1.711159722e-04f,
-1.704514349e-04f, 1.697866479e-04f, 1.691216125e-04f, 1.684563299e-04f, 1.677908012e-04f, 1.671250276e-04f, 1.664590103e-04f, 1.657927503e-04f, 1.651262490e-04f, 1.644595074e-04f,
-1.637925268e-04f, 1.631253083e-04f, 1.624578530e-04f, 1.617901622e-04f, 1.611222370e-04f, 1.604540786e-04f, 1.597856881e-04f, 1.591170668e-04f, 1.584482157e-04f, 1.577791362e-04f,
-1.571098292e-04f, 1.564402961e-04f, 1.557705380e-04f, 1.551005560e-04f, 1.544303514e-04f, 1.537599253e-04f, 1.530892788e-04f, 1.524184132e-04f, 1.517473297e-04f, 1.510760294e-04f,
-1.504045134e-04f, 1.497327830e-04f, 1.490608393e-04f, 1.483886836e-04f, 1.477163169e-04f, 1.470437405e-04f, 1.463709555e-04f, 1.456979632e-04f, 1.450247647e-04f, 1.443513611e-04f,
-1.436777537e-04f, 1.430039436e-04f, 1.423299320e-04f, 1.416557201e-04f, 1.409813091e-04f, 1.403067001e-04f, 1.396318944e-04f, 1.389568931e-04f, 1.382816973e-04f, 1.376063084e-04f,
-1.369307273e-04f, 1.362549555e-04f, 1.355789939e-04f, 1.349028438e-04f, 1.342265064e-04f, 1.335499829e-04f, 1.328732744e-04f, 1.321963821e-04f, 1.315193072e-04f, 1.308420509e-04f,
-1.301646144e-04f, 1.294869989e-04f, 1.288092055e-04f, 1.281312354e-04f, 1.274530898e-04f, 1.267747699e-04f, 1.260962769e-04f, 1.254176120e-04f, 1.247387763e-04f, 1.240597710e-04f,
-1.233805974e-04f, 1.227012566e-04f, 1.220217497e-04f, 1.213420781e-04f, 1.206622428e-04f, 1.199822450e-04f, 1.193020860e-04f, 1.186217669e-04f, 1.179412890e-04f, 1.172606533e-04f,
-1.165798611e-04f, 1.158989136e-04f, 1.152178119e-04f, 1.145365573e-04f, 1.138551509e-04f, 1.131735940e-04f, 1.124918877e-04f, 1.118100332e-04f, 1.111280316e-04f, 1.104458843e-04f,
-1.097635923e-04f, 1.090811569e-04f, 1.083985793e-04f, 1.077158606e-04f, 1.070330020e-04f, 1.063500047e-04f, 1.056668700e-04f, 1.049835989e-04f, 1.043001928e-04f, 1.036166527e-04f,
-1.029329799e-04f, 1.022491756e-04f, 1.015652409e-04f, 1.008811771e-04f, 1.001969853e-04f, 9.951266677e-05f, 9.882822265e-05f, 9.814365414e-05f, 9.745896244e-05f, 9.677414875e-05f,
-9.608921424e-05f, 9.540416012e-05f, 9.471898758e-05f, 9.403369782e-05f, 9.334829201e-05f, 9.266277136e-05f, 9.197713706e-05f, 9.129139031e-05f, 9.060553229e-05f, 8.991956420e-05f,
-8.923348724e-05f, 8.854730259e-05f, 8.786101145e-05f, 8.717461502e-05f, 8.648811449e-05f, 8.580151105e-05f, 8.511480590e-05f, 8.442800023e-05f, 8.374109523e-05f, 8.305409211e-05f,
-8.236699205e-05f, 8.167979625e-05f, 8.099250590e-05f, 8.030512220e-05f, 7.961764635e-05f, 7.893007954e-05f, 7.824242296e-05f, 7.755467781e-05f, 7.686684528e-05f, 7.617892657e-05f,
-7.549092288e-05f, 7.480283540e-05f, 7.411466532e-05f, 7.342641385e-05f, 7.273808217e-05f, 7.204967149e-05f, 7.136118299e-05f, 7.067261788e-05f, 6.998397734e-05f, 6.929526258e-05f,
-6.860647480e-05f, 6.791761518e-05f, 6.722868492e-05f, 6.653968523e-05f, 6.585061728e-05f, 6.516148230e-05f, 6.447228145e-05f, 6.378301596e-05f, 6.309368700e-05f, 6.240429578e-05f,
-6.171484349e-05f, 6.102533133e-05f, 6.033576049e-05f, 5.964613218e-05f, 5.895644758e-05f, 5.826670790e-05f, 5.757691433e-05f, 5.688706806e-05f, 5.619717030e-05f, 5.550722224e-05f,
-5.481722507e-05f, 5.412718000e-05f, 5.343708821e-05f, 5.274695091e-05f, 5.205676929e-05f, 5.136654455e-05f, 5.067627789e-05f, 4.998597049e-05f, 4.929562357e-05f, 4.860523830e-05f,
-4.791481590e-05f, 4.722435755e-05f, 4.653386445e-05f, 4.584333781e-05f, 4.515277880e-05f, 4.446218864e-05f, 4.377156852e-05f, 4.308091963e-05f, 4.239024317e-05f, 4.169954034e-05f,
-4.100881233e-05f, 4.031806033e-05f, 3.962728556e-05f, 3.893648919e-05f, 3.824567242e-05f, 3.755483646e-05f, 3.686398250e-05f, 3.617311173e-05f, 3.548222535e-05f, 3.479132455e-05f,
-3.410041054e-05f, 3.340948450e-05f, 3.271854763e-05f, 3.202760113e-05f, 3.133664619e-05f, 3.064568401e-05f, 2.995471578e-05f, 2.926374270e-05f, 2.857276596e-05f, 2.788178676e-05f,
-2.719080630e-05f, 2.649982576e-05f, 2.580884634e-05f, 2.511786924e-05f, 2.442689566e-05f, 2.373592678e-05f, 2.304496380e-05f, 2.235400792e-05f, 2.166306032e-05f, 2.097212221e-05f,
-2.028119478e-05f, 1.959027922e-05f, 1.889937672e-05f, 1.820848849e-05f, 1.751761570e-05f, 1.682675957e-05f, 1.613592127e-05f, 1.544510201e-05f, 1.475430297e-05f, 1.406352535e-05f,
-1.337277035e-05f, 1.268203914e-05f, 1.199133294e-05f, 1.130065293e-05f, 1.061000030e-05f, 9.919376250e-06f, 9.228781965e-06f, 8.538218639e-06f, 7.847687466e-06f, 7.157189635e-06f,
-6.466726340e-06f, 5.776298772e-06f, 5.085908121e-06f, 4.395555580e-06f, 3.705242340e-06f, 3.014969590e-06f, 2.324738523e-06f, 1.634550329e-06f, 9.444061980e-07f, 2.543073207e-07f,
--4.357451128e-07f, -1.125749912e-06f, -1.815705888e-06f, -2.505611851e-06f, -3.195466611e-06f, -3.885268978e-06f, -4.575017764e-06f, -5.264711780e-06f, -5.954349837e-06f, -6.643930745e-06f,
--7.333453317e-06f, -8.022916365e-06f, -8.712318700e-06f, -9.401659134e-06f, -1.009093648e-05f, -1.078014955e-05f, -1.146929716e-05f, -1.215837811e-05f, -1.284739123e-05f, -1.353633533e-05f,
--1.422520921e-05f, -1.491401170e-05f, -1.560274160e-05f, -1.629139773e-05f, -1.697997891e-05f, -1.766848395e-05f, -1.835691167e-05f, -1.904526087e-05f, -1.973353037e-05f, -2.042171900e-05f,
--2.110982556e-05f, -2.179784887e-05f, -2.248578775e-05f, -2.317364101e-05f, -2.386140748e-05f, -2.454908595e-05f, -2.523667527e-05f, -2.592417423e-05f, -2.661158166e-05f, -2.729889637e-05f,
--2.798611719e-05f, -2.867324293e-05f, -2.936027240e-05f, -3.004720444e-05f, -3.073403785e-05f, -3.142077146e-05f, -3.210740409e-05f, -3.279393455e-05f, -3.348036167e-05f, -3.416668426e-05f,
--3.485290114e-05f, -3.553901114e-05f, -3.622501308e-05f, -3.691090578e-05f, -3.759668806e-05f, -3.828235874e-05f, -3.896791664e-05f, -3.965336059e-05f, -4.033868940e-05f, -4.102390191e-05f,
--4.170899693e-05f, -4.239397329e-05f, -4.307882981e-05f, -4.376356531e-05f, -4.444817863e-05f, -4.513266858e-05f, -4.581703398e-05f, -4.650127367e-05f, -4.718538647e-05f, -4.786937121e-05f,
--4.855322671e-05f, -4.923695179e-05f, -4.992054529e-05f, -5.060400603e-05f, -5.128733283e-05f, -5.197052454e-05f, -5.265357996e-05f, -5.333649794e-05f, -5.401927730e-05f, -5.470191687e-05f,
--5.538441548e-05f, -5.606677195e-05f, -5.674898512e-05f, -5.743105382e-05f, -5.811297688e-05f, -5.879475313e-05f, -5.947638139e-05f, -6.015786051e-05f, -6.083918931e-05f, -6.152036663e-05f,
--6.220139130e-05f, -6.288226214e-05f, -6.356297800e-05f, -6.424353771e-05f, -6.492394010e-05f, -6.560418400e-05f, -6.628426826e-05f, -6.696419170e-05f, -6.764395316e-05f, -6.832355147e-05f,
--6.900298548e-05f, -6.968225402e-05f, -7.036135592e-05f, -7.104029002e-05f, -7.171905516e-05f, -7.239765018e-05f, -7.307607392e-05f, -7.375432521e-05f, -7.443240289e-05f, -7.511030580e-05f,
--7.578803279e-05f, -7.646558269e-05f, -7.714295434e-05f, -7.782014659e-05f, -7.849715827e-05f, -7.917398823e-05f, -7.985063530e-05f, -8.052709834e-05f, -8.120337618e-05f, -8.187946767e-05f,
--8.255537165e-05f, -8.323108696e-05f, -8.390661245e-05f, -8.458194697e-05f, -8.525708936e-05f, -8.593203846e-05f, -8.660679312e-05f, -8.728135219e-05f, -8.795571451e-05f, -8.862987894e-05f,
--8.930384432e-05f, -8.997760949e-05f, -9.065117331e-05f, -9.132453463e-05f, -9.199769229e-05f, -9.267064514e-05f, -9.334339204e-05f, -9.401593184e-05f, -9.468826338e-05f, -9.536038552e-05f,
--9.603229711e-05f, -9.670399701e-05f, -9.737548406e-05f, -9.804675712e-05f, -9.871781505e-05f, -9.938865669e-05f, -1.000592809e-04f, -1.007296865e-04f, -1.013998725e-04f, -1.020698375e-04f,
--1.027395806e-04f, -1.034091005e-04f, -1.040783961e-04f, -1.047474663e-04f, -1.054163100e-04f, -1.060849259e-04f, -1.067533129e-04f, -1.074214700e-04f, -1.080893959e-04f, -1.087570895e-04f,
--1.094245498e-04f, -1.100917755e-04f, -1.107587655e-04f, -1.114255186e-04f, -1.120920339e-04f, -1.127583100e-04f, -1.134243458e-04f, -1.140901403e-04f, -1.147556923e-04f, -1.154210007e-04f,
--1.160860643e-04f, -1.167508820e-04f, -1.174154526e-04f, -1.180797751e-04f, -1.187438483e-04f, -1.194076710e-04f, -1.200712422e-04f, -1.207345607e-04f, -1.213976253e-04f, -1.220604350e-04f,
--1.227229886e-04f, -1.233852850e-04f, -1.240473231e-04f, -1.247091017e-04f, -1.253706197e-04f, -1.260318760e-04f, -1.266928694e-04f, -1.273535989e-04f, -1.280140633e-04f, -1.286742614e-04f,
--1.293341922e-04f, -1.299938546e-04f, -1.306532473e-04f, -1.313123694e-04f, -1.319712196e-04f, -1.326297969e-04f, -1.332881001e-04f, -1.339461281e-04f, -1.346038798e-04f, -1.352613541e-04f,
--1.359185498e-04f, -1.365754659e-04f, -1.372321012e-04f, -1.378884546e-04f, -1.385445250e-04f, -1.392003112e-04f, -1.398558122e-04f, -1.405110269e-04f, -1.411659541e-04f, -1.418205927e-04f,
--1.424749416e-04f, -1.431289997e-04f, -1.437827658e-04f, -1.444362390e-04f, -1.450894180e-04f, -1.457423018e-04f, -1.463948892e-04f, -1.470471791e-04f, -1.476991705e-04f, -1.483508622e-04f,
--1.490022531e-04f, -1.496533421e-04f, -1.503041282e-04f, -1.509546101e-04f, -1.516047868e-04f, -1.522546572e-04f, -1.529042202e-04f, -1.535534747e-04f, -1.542024195e-04f, -1.548510537e-04f,
--1.554993760e-04f, -1.561473854e-04f, -1.567950808e-04f, -1.574424611e-04f, -1.580895251e-04f, -1.587362719e-04f, -1.593827002e-04f, -1.600288091e-04f, -1.606745973e-04f, -1.613200639e-04f,
--1.619652076e-04f, -1.626100275e-04f, -1.632545224e-04f, -1.638986913e-04f, -1.645425330e-04f, -1.651860464e-04f, -1.658292305e-04f, -1.664720842e-04f, -1.671146063e-04f, -1.677567959e-04f,
--1.683986517e-04f, -1.690401728e-04f, -1.696813580e-04f, -1.703222062e-04f, -1.709627164e-04f, -1.716028875e-04f, -1.722427184e-04f, -1.728822080e-04f, -1.735213552e-04f, -1.741601590e-04f,
--1.747986182e-04f, -1.754367318e-04f, -1.760744987e-04f, -1.767119178e-04f, -1.773489881e-04f, -1.779857084e-04f, -1.786220778e-04f, -1.792580950e-04f, -1.798937591e-04f, -1.805290690e-04f,
--1.811640235e-04f, -1.817986217e-04f, -1.824328624e-04f, -1.830667446e-04f, -1.837002671e-04f, -1.843334290e-04f, -1.849662292e-04f, -1.855986665e-04f, -1.862307400e-04f, -1.868624485e-04f,
--1.874937910e-04f, -1.881247664e-04f, -1.887553737e-04f, -1.893856117e-04f, -1.900154795e-04f, -1.906449759e-04f, -1.912740999e-04f, -1.919028504e-04f, -1.925312265e-04f, -1.931592269e-04f,
--1.937868506e-04f, -1.944140967e-04f, -1.950409640e-04f, -1.956674514e-04f, -1.962935580e-04f, -1.969192826e-04f, -1.975446243e-04f, -1.981695819e-04f, -1.987941543e-04f, -1.994183406e-04f,
--2.000421397e-04f, -2.006655505e-04f, -2.012885720e-04f, -2.019112032e-04f, -2.025334429e-04f, -2.031552901e-04f, -2.037767438e-04f, -2.043978030e-04f, -2.050184665e-04f, -2.056387334e-04f,
--2.062586026e-04f, -2.068780730e-04f, -2.074971437e-04f, -2.081158135e-04f, -2.087340814e-04f, -2.093519464e-04f, -2.099694074e-04f, -2.105864635e-04f, -2.112031135e-04f, -2.118193564e-04f,
--2.124351912e-04f, -2.130506168e-04f, -2.136656323e-04f, -2.142802365e-04f, -2.148944285e-04f, -2.155082071e-04f, -2.161215715e-04f, -2.167345205e-04f, -2.173470530e-04f, -2.179591682e-04f,
--2.185708649e-04f, -2.191821422e-04f, -2.197929989e-04f, -2.204034341e-04f, -2.210134467e-04f, -2.216230357e-04f, -2.222322001e-04f, -2.228409389e-04f, -2.234492510e-04f, -2.240571354e-04f,
--2.246645911e-04f, -2.252716171e-04f, -2.258782123e-04f, -2.264843757e-04f, -2.270901064e-04f, -2.276954033e-04f, -2.283002653e-04f, -2.289046915e-04f, -2.295086808e-04f, -2.301122323e-04f,
--2.307153449e-04f, -2.313180176e-04f, -2.319202493e-04f, -2.325220392e-04f, -2.331233861e-04f, -2.337242891e-04f, -2.343247472e-04f, -2.349247592e-04f, -2.355243243e-04f, -2.361234415e-04f,
--2.367221096e-04f, -2.373203278e-04f, -2.379180950e-04f, -2.385154102e-04f, -2.391122725e-04f, -2.397086807e-04f, -2.403046339e-04f, -2.409001312e-04f, -2.414951714e-04f, -2.420897537e-04f,
--2.426838770e-04f, -2.432775403e-04f, -2.438707426e-04f, -2.444634830e-04f, -2.450557604e-04f, -2.456475739e-04f, -2.462389223e-04f, -2.468298049e-04f, -2.474202205e-04f, -2.480101682e-04f,
--2.485996471e-04f, -2.491886560e-04f, -2.497771940e-04f, -2.503652602e-04f, -2.509528535e-04f, -2.515399730e-04f, -2.521266176e-04f, -2.527127865e-04f, -2.532984786e-04f, -2.538836929e-04f,
--2.544684285e-04f, -2.550526844e-04f, -2.556364596e-04f, -2.562197531e-04f, -2.568025640e-04f, -2.573848912e-04f, -2.579667338e-04f, -2.585480909e-04f, -2.591289614e-04f, -2.597093444e-04f,
--2.602892390e-04f, -2.608686440e-04f, -2.614475587e-04f, -2.620259820e-04f, -2.626039129e-04f, -2.631813505e-04f, -2.637582938e-04f, -2.643347418e-04f, -2.649106937e-04f, -2.654861483e-04f,
--2.660611049e-04f, -2.666355623e-04f, -2.672095197e-04f, -2.677829760e-04f, -2.683559304e-04f, -2.689283819e-04f, -2.695003294e-04f, -2.700717722e-04f, -2.706427091e-04f, -2.712131393e-04f,
--2.717830618e-04f, -2.723524757e-04f, -2.729213799e-04f, -2.734897736e-04f, -2.740576558e-04f, -2.746250256e-04f, -2.751918820e-04f, -2.757582240e-04f, -2.763240508e-04f, -2.768893613e-04f,
--2.774541547e-04f, -2.780184300e-04f, -2.785821862e-04f, -2.791454225e-04f, -2.797081378e-04f, -2.802703313e-04f, -2.808320019e-04f, -2.813931489e-04f, -2.819537711e-04f, -2.825138678e-04f,
--2.830734379e-04f, -2.836324806e-04f, -2.841909949e-04f, -2.847489798e-04f, -2.853064345e-04f, -2.858633580e-04f, -2.864197494e-04f, -2.869756078e-04f, -2.875309322e-04f, -2.880857217e-04f,
--2.886399754e-04f, -2.891936924e-04f, -2.897468718e-04f, -2.902995125e-04f, -2.908516138e-04f, -2.914031747e-04f, -2.919541942e-04f, -2.925046715e-04f, -2.930546057e-04f, -2.936039958e-04f,
--2.941528409e-04f, -2.947011401e-04f, -2.952488925e-04f, -2.957960972e-04f, -2.963427533e-04f, -2.968888598e-04f, -2.974344160e-04f, -2.979794207e-04f, -2.985238732e-04f, -2.990677726e-04f,
--2.996111179e-04f, -3.001539083e-04f, -3.006961428e-04f, -3.012378205e-04f, -3.017789406e-04f, -3.023195022e-04f, -3.028595042e-04f, -3.033989460e-04f, -3.039378265e-04f, -3.044761449e-04f,
--3.050139002e-04f, -3.055510916e-04f, -3.060877183e-04f, -3.066237792e-04f, -3.071592735e-04f, -3.076942004e-04f, -3.082285589e-04f, -3.087623481e-04f, -3.092955673e-04f, -3.098282154e-04f,
--3.103602916e-04f, -3.108917951e-04f, -3.114227249e-04f, -3.119530801e-04f, -3.124828600e-04f, -3.130120636e-04f, -3.135406900e-04f, -3.140687383e-04f, -3.145962078e-04f, -3.151230974e-04f,
--3.156494064e-04f, -3.161751339e-04f, -3.167002790e-04f, -3.172248408e-04f, -3.177488185e-04f, -3.182722112e-04f, -3.187950180e-04f, -3.193172381e-04f, -3.198388706e-04f, -3.203599147e-04f,
--3.208803694e-04f, -3.214002339e-04f, -3.219195075e-04f, -3.224381891e-04f, -3.229562780e-04f, -3.234737733e-04f, -3.239906741e-04f, -3.245069797e-04f, -3.250226890e-04f, -3.255378014e-04f,
--3.260523159e-04f, -3.265662317e-04f, -3.270795479e-04f, -3.275922637e-04f, -3.281043782e-04f, -3.286158907e-04f, -3.291268002e-04f, -3.296371060e-04f, -3.301468071e-04f, -3.306559027e-04f,
--3.311643921e-04f, -3.316722743e-04f, -3.321795485e-04f, -3.326862140e-04f, -3.331922697e-04f, -3.336977150e-04f, -3.342025490e-04f, -3.347067708e-04f, -3.352103797e-04f, -3.357133748e-04f,
--3.362157552e-04f, -3.367175202e-04f, -3.372186688e-04f, -3.377192004e-04f, -3.382191140e-04f, -3.387184089e-04f, -3.392170842e-04f, -3.397151392e-04f, -3.402125729e-04f, -3.407093845e-04f,
--3.412055733e-04f, -3.417011385e-04f, -3.421960792e-04f, -3.426903945e-04f, -3.431840838e-04f, -3.436771462e-04f, -3.441695808e-04f, -3.446613869e-04f, -3.451525637e-04f, -3.456431103e-04f,
--3.461330259e-04f, -3.466223099e-04f, -3.471109612e-04f, -3.475989792e-04f, -3.480863630e-04f, -3.485731118e-04f, -3.490592249e-04f, -3.495447015e-04f, -3.500295407e-04f, -3.505137417e-04f,
--3.509973038e-04f, -3.514802261e-04f, -3.519625080e-04f, -3.524441485e-04f, -3.529251469e-04f, -3.534055024e-04f, -3.538852142e-04f, -3.543642816e-04f, -3.548427037e-04f, -3.553204798e-04f,
--3.557976090e-04f, -3.562740907e-04f, -3.567499240e-04f, -3.572251081e-04f, -3.576996423e-04f, -3.581735258e-04f, -3.586467578e-04f, -3.591193376e-04f, -3.595912643e-04f, -3.600625372e-04f,
--3.605331556e-04f, -3.610031186e-04f, -3.614724254e-04f, -3.619410755e-04f, -3.624090678e-04f, -3.628764018e-04f, -3.633430766e-04f, -3.638090915e-04f, -3.642744456e-04f, -3.647391384e-04f,
--3.652031689e-04f, -3.656665364e-04f, -3.661292402e-04f, -3.665912796e-04f, -3.670526537e-04f, -3.675133618e-04f, -3.679734032e-04f, -3.684327771e-04f, -3.688914828e-04f, -3.693495195e-04f,
--3.698068864e-04f, -3.702635829e-04f, -3.707196082e-04f, -3.711749615e-04f, -3.716296421e-04f, -3.720836493e-04f, -3.725369822e-04f, -3.729896403e-04f, -3.734416227e-04f, -3.738929287e-04f,
--3.743435576e-04f, -3.747935086e-04f, -3.752427811e-04f, -3.756913742e-04f, -3.761392873e-04f, -3.765865196e-04f, -3.770330703e-04f, -3.774789389e-04f, -3.779241245e-04f, -3.783686264e-04f,
--3.788124439e-04f, -3.792555763e-04f, -3.796980229e-04f, -3.801397829e-04f, -3.805808556e-04f, -3.810212403e-04f, -3.814609363e-04f, -3.818999429e-04f, -3.823382594e-04f, -3.827758850e-04f,
--3.832128191e-04f, -3.836490609e-04f, -3.840846097e-04f, -3.845194649e-04f, -3.849536256e-04f, -3.853870913e-04f, -3.858198613e-04f, -3.862519347e-04f, -3.866833109e-04f, -3.871139893e-04f,
--3.875439691e-04f, -3.879732496e-04f, -3.884018301e-04f, -3.888297100e-04f, -3.892568885e-04f, -3.896833650e-04f, -3.901091387e-04f, -3.905342090e-04f, -3.909585752e-04f, -3.913822366e-04f,
--3.918051926e-04f, -3.922274423e-04f, -3.926489852e-04f, -3.930698206e-04f, -3.934899478e-04f, -3.939093660e-04f, -3.943280748e-04f, -3.947460732e-04f, -3.951633608e-04f, -3.955799368e-04f,
--3.959958005e-04f, -3.964109513e-04f, -3.968253885e-04f, -3.972391115e-04f, -3.976521195e-04f, -3.980644119e-04f, -3.984759880e-04f, -3.988868472e-04f, -3.992969889e-04f, -3.997064123e-04f,
--4.001151168e-04f, -4.005231017e-04f, -4.009303664e-04f, -4.013369102e-04f, -4.017427325e-04f, -4.021478326e-04f, -4.025522099e-04f, -4.029558637e-04f, -4.033587934e-04f, -4.037609983e-04f,
--4.041624778e-04f, -4.045632312e-04f, -4.049632579e-04f, -4.053625573e-04f, -4.057611286e-04f, -4.061589713e-04f, -4.065560848e-04f, -4.069524683e-04f, -4.073481213e-04f, -4.077430431e-04f,
--4.081372331e-04f, -4.085306907e-04f, -4.089234151e-04f, -4.093154059e-04f, -4.097066624e-04f, -4.100971839e-04f, -4.104869698e-04f, -4.108760195e-04f, -4.112643323e-04f, -4.116519078e-04f,
--4.120387451e-04f, -4.124248438e-04f, -4.128102031e-04f, -4.131948226e-04f, -4.135787015e-04f, -4.139618392e-04f, -4.143442352e-04f, -4.147258888e-04f, -4.151067995e-04f, -4.154869665e-04f,
--4.158663893e-04f, -4.162450674e-04f, -4.166230000e-04f, -4.170001867e-04f, -4.173766267e-04f, -4.177523195e-04f, -4.181272645e-04f, -4.185014611e-04f, -4.188749087e-04f, -4.192476067e-04f,
--4.196195545e-04f, -4.199907516e-04f, -4.203611972e-04f, -4.207308909e-04f, -4.210998321e-04f, -4.214680201e-04f, -4.218354544e-04f, -4.222021344e-04f, -4.225680595e-04f, -4.229332291e-04f,
--4.232976427e-04f, -4.236612997e-04f, -4.240241995e-04f, -4.243863414e-04f, -4.247477251e-04f, -4.251083497e-04f, -4.254682149e-04f, -4.258273201e-04f, -4.261856646e-04f, -4.265432478e-04f,
--4.269000693e-04f, -4.272561285e-04f, -4.276114248e-04f, -4.279659576e-04f, -4.283197263e-04f, -4.286727305e-04f, -4.290249696e-04f, -4.293764429e-04f, -4.297271500e-04f, -4.300770903e-04f,
--4.304262632e-04f, -4.307746682e-04f, -4.311223048e-04f, -4.314691723e-04f, -4.318152703e-04f, -4.321605982e-04f, -4.325051554e-04f, -4.328489414e-04f, -4.331919557e-04f, -4.335341977e-04f,
--4.338756669e-04f, -4.342163627e-04f, -4.345562847e-04f, -4.348954322e-04f, -4.352338048e-04f, -4.355714019e-04f, -4.359082230e-04f, -4.362442675e-04f, -4.365795349e-04f, -4.369140248e-04f,
--4.372477365e-04f, -4.375806695e-04f, -4.379128234e-04f, -4.382441976e-04f, -4.385747915e-04f, -4.389046047e-04f, -4.392336367e-04f, -4.395618869e-04f, -4.398893548e-04f, -4.402160399e-04f,
--4.405419418e-04f, -4.408670598e-04f, -4.411913934e-04f, -4.415149423e-04f, -4.418377058e-04f, -4.421596834e-04f, -4.424808747e-04f, -4.428012792e-04f, -4.431208963e-04f, -4.434397256e-04f,
--4.437577665e-04f, -4.440750186e-04f, -4.443914813e-04f, -4.447071542e-04f, -4.450220368e-04f, -4.453361286e-04f, -4.456494291e-04f, -4.459619378e-04f, -4.462736542e-04f, -4.465845779e-04f,
--4.468947083e-04f, -4.472040450e-04f, -4.475125874e-04f, -4.478203352e-04f, -4.481272879e-04f, -4.484334449e-04f, -4.487388057e-04f, -4.490433700e-04f, -4.493471372e-04f, -4.496501069e-04f,
--4.499522786e-04f, -4.502536519e-04f, -4.505542261e-04f, -4.508540010e-04f, -4.511529760e-04f, -4.514511507e-04f, -4.517485246e-04f, -4.520450973e-04f, -4.523408683e-04f, -4.526358370e-04f,
--4.529300032e-04f, -4.532233663e-04f, -4.535159259e-04f, -4.538076815e-04f, -4.540986327e-04f, -4.543887790e-04f, -4.546781199e-04f, -4.549666552e-04f, -4.552543842e-04f, -4.555413065e-04f,
--4.558274218e-04f, -4.561127295e-04f, -4.563972293e-04f, -4.566809206e-04f, -4.569638031e-04f, -4.572458764e-04f, -4.575271399e-04f, -4.578075933e-04f, -4.580872361e-04f, -4.583660679e-04f,
--4.586440883e-04f, -4.589212968e-04f, -4.591976931e-04f, -4.594732766e-04f, -4.597480471e-04f, -4.600220040e-04f, -4.602951470e-04f, -4.605674755e-04f, -4.608389893e-04f, -4.611096879e-04f,
--4.613795709e-04f, -4.616486379e-04f, -4.619168884e-04f, -4.621843221e-04f, -4.624509385e-04f, -4.627167373e-04f, -4.629817180e-04f, -4.632458803e-04f, -4.635092237e-04f, -4.637717478e-04f,
--4.640334523e-04f, -4.642943367e-04f, -4.645544007e-04f, -4.648136438e-04f, -4.650720657e-04f, -4.653296659e-04f, -4.655864442e-04f, -4.658424000e-04f, -4.660975331e-04f, -4.663518429e-04f,
--4.666053293e-04f, -4.668579916e-04f, -4.671098297e-04f, -4.673608430e-04f, -4.676110313e-04f, -4.678603941e-04f, -4.681089311e-04f, -4.683566419e-04f, -4.686035261e-04f, -4.688495834e-04f,
--4.690948133e-04f, -4.693392156e-04f, -4.695827898e-04f, -4.698255356e-04f, -4.700674526e-04f, -4.703085405e-04f, -4.705487989e-04f, -4.707882274e-04f, -4.710268257e-04f, -4.712645935e-04f,
--4.715015303e-04f, -4.717376358e-04f, -4.719729097e-04f, -4.722073517e-04f, -4.724409613e-04f, -4.726737382e-04f, -4.729056821e-04f, -4.731367927e-04f, -4.733670695e-04f, -4.735965123e-04f,
--4.738251207e-04f, -4.740528943e-04f, -4.742798330e-04f, -4.745059362e-04f, -4.747312036e-04f, -4.749556351e-04f, -4.751792301e-04f, -4.754019884e-04f, -4.756239096e-04f, -4.758449934e-04f,
--4.760652396e-04f, -4.762846477e-04f, -4.765032175e-04f, -4.767209486e-04f, -4.769378407e-04f, -4.771538935e-04f, -4.773691066e-04f, -4.775834798e-04f, -4.777970128e-04f, -4.780097052e-04f,
--4.782215568e-04f, -4.784325671e-04f, -4.786427360e-04f, -4.788520630e-04f, -4.790605480e-04f, -4.792681905e-04f, -4.794749904e-04f, -4.796809472e-04f, -4.798860607e-04f, -4.800903306e-04f,
--4.802937567e-04f, -4.804963385e-04f, -4.806980758e-04f, -4.808989684e-04f, -4.810990159e-04f, -4.812982181e-04f, -4.814965746e-04f, -4.816940852e-04f, -4.818907495e-04f, -4.820865674e-04f,
--4.822815385e-04f, -4.824756626e-04f, -4.826689393e-04f, -4.828613684e-04f, -4.830529497e-04f, -4.832436828e-04f, -4.834335674e-04f, -4.836226034e-04f, -4.838107904e-04f, -4.839981281e-04f,
--4.841846164e-04f, -4.843702549e-04f, -4.845550434e-04f, -4.847389815e-04f, -4.849220692e-04f, -4.851043060e-04f, -4.852856918e-04f, -4.854662262e-04f, -4.856459091e-04f, -4.858247401e-04f,
--4.860027191e-04f, -4.861798458e-04f, -4.863561198e-04f, -4.865315411e-04f, -4.867061093e-04f, -4.868798241e-04f, -4.870526855e-04f, -4.872246930e-04f, -4.873958465e-04f, -4.875661457e-04f,
--4.877355904e-04f, -4.879041804e-04f, -4.880719154e-04f, -4.882387953e-04f, -4.884048196e-04f, -4.885699883e-04f, -4.887343012e-04f, -4.888977579e-04f, -4.890603582e-04f, -4.892221020e-04f,
--4.893829890e-04f, -4.895430191e-04f, -4.897021919e-04f, -4.898605072e-04f, -4.900179649e-04f, -4.901745647e-04f, -4.903303065e-04f, -4.904851900e-04f, -4.906392149e-04f, -4.907923812e-04f,
--4.909446885e-04f, -4.910961367e-04f, -4.912467256e-04f, -4.913964550e-04f, -4.915453247e-04f, -4.916933344e-04f, -4.918404840e-04f, -4.919867733e-04f, -4.921322021e-04f, -4.922767702e-04f,
--4.924204774e-04f, -4.925633235e-04f, -4.927053084e-04f, -4.928464318e-04f, -4.929866935e-04f, -4.931260934e-04f, -4.932646313e-04f, -4.934023071e-04f, -4.935391204e-04f, -4.936750712e-04f,
--4.938101593e-04f, -4.939443845e-04f, -4.940777466e-04f, -4.942102455e-04f, -4.943418810e-04f, -4.944726529e-04f, -4.946025610e-04f, -4.947316053e-04f, -4.948597854e-04f, -4.949871013e-04f,
--4.951135528e-04f, -4.952391398e-04f, -4.953638620e-04f, -4.954877194e-04f, -4.956107117e-04f, -4.957328389e-04f, -4.958541007e-04f, -4.959744970e-04f, -4.960940277e-04f, -4.962126926e-04f,
--4.963304916e-04f, -4.964474245e-04f, -4.965634912e-04f, -4.966786915e-04f, -4.967930253e-04f, -4.969064925e-04f, -4.970190929e-04f, -4.971308265e-04f, -4.972416929e-04f, -4.973516922e-04f,
--4.974608242e-04f, -4.975690888e-04f, -4.976764858e-04f, -4.977830151e-04f, -4.978886766e-04f, -4.979934701e-04f, -4.980973956e-04f, -4.982004529e-04f, -4.983026419e-04f, -4.984039625e-04f,
--4.985044146e-04f, -4.986039980e-04f, -4.987027127e-04f, -4.988005584e-04f, -4.988975352e-04f, -4.989936430e-04f, -4.990888815e-04f, -4.991832507e-04f, -4.992767505e-04f, -4.993693808e-04f,
--4.994611415e-04f, -4.995520325e-04f, -4.996420537e-04f, -4.997312050e-04f, -4.998194862e-04f, -4.999068974e-04f, -4.999934385e-04f, -5.000791092e-04f, -5.001639096e-04f, -5.002478395e-04f,
--5.003308989e-04f, -5.004130877e-04f, -5.004944058e-04f, -5.005748531e-04f, -5.006544296e-04f, -5.007331351e-04f, -5.008109696e-04f, -5.008879330e-04f, -5.009640252e-04f, -5.010392462e-04f,
--5.011135960e-04f, -5.011870743e-04f, -5.012596812e-04f, -5.013314165e-04f, -5.014022804e-04f, -5.014722725e-04f, -5.015413930e-04f, -5.016096417e-04f, -5.016770186e-04f, -5.017435236e-04f,
--5.018091568e-04f, -5.018739179e-04f, -5.019378070e-04f, -5.020008240e-04f, -5.020629688e-04f, -5.021242415e-04f, -5.021846420e-04f, -5.022441701e-04f, -5.023028260e-04f, -5.023606095e-04f,
--5.024175206e-04f, -5.024735593e-04f, -5.025287255e-04f, -5.025830192e-04f, -5.026364403e-04f, -5.026889889e-04f, -5.027406648e-04f, -5.027914682e-04f, -5.028413988e-04f, -5.028904568e-04f,
--5.029386420e-04f, -5.029859545e-04f, -5.030323942e-04f, -5.030779612e-04f, -5.031226553e-04f, -5.031664766e-04f, -5.032094251e-04f, -5.032515008e-04f, -5.032927035e-04f, -5.033330334e-04f,
--5.033724904e-04f, -5.034110745e-04f, -5.034487857e-04f, -5.034856240e-04f, -5.035215894e-04f, -5.035566819e-04f, -5.035909014e-04f, -5.036242481e-04f, -5.036567218e-04f, -5.036883226e-04f,
--5.037190505e-04f, -5.037489055e-04f, -5.037778876e-04f, -5.038059969e-04f, -5.038332333e-04f, -5.038595968e-04f, -5.038850874e-04f, -5.039097053e-04f, -5.039334503e-04f, -5.039563226e-04f,
--5.039783220e-04f, -5.039994487e-04f, -5.040197027e-04f, -5.040390840e-04f, -5.040575926e-04f, -5.040752286e-04f, -5.040919920e-04f, -5.041078827e-04f, -5.041229009e-04f, -5.041370466e-04f,
--5.041503198e-04f, -5.041627206e-04f, -5.041742489e-04f, -5.041849048e-04f, -5.041946885e-04f, -5.042035998e-04f, -5.042116389e-04f, -5.042188058e-04f, -5.042251005e-04f, -5.042305232e-04f,
--5.042350738e-04f, -5.042387524e-04f, -5.042415590e-04f, -5.042434937e-04f, -5.042445567e-04f, -5.042447478e-04f, -5.042440672e-04f, -5.042425150e-04f, -5.042400911e-04f, -5.042367957e-04f,
--5.042326289e-04f, -5.042275907e-04f, -5.042216811e-04f, -5.042149002e-04f, -5.042072482e-04f, -5.041987251e-04f, -5.041893309e-04f, -5.041790657e-04f, -5.041679297e-04f, -5.041559228e-04f,
--5.041430452e-04f, -5.041292970e-04f, -5.041146782e-04f, -5.040991889e-04f, -5.040828292e-04f, -5.040655992e-04f, -5.040474990e-04f, -5.040285286e-04f, -5.040086883e-04f, -5.039879779e-04f,
--5.039663978e-04f, -5.039439479e-04f, -5.039206283e-04f, -5.038964392e-04f, -5.038713806e-04f, -5.038454527e-04f, -5.038186555e-04f, -5.037909892e-04f, -5.037624539e-04f, -5.037330497e-04f,
--5.037027766e-04f, -5.036716349e-04f, -5.036396245e-04f, -5.036067457e-04f, -5.035729986e-04f, -5.035383831e-04f, -5.035028996e-04f, -5.034665481e-04f, -5.034293287e-04f, -5.033912416e-04f,
--5.033522868e-04f, -5.033124645e-04f, -5.032717749e-04f, -5.032302180e-04f, -5.031877940e-04f, -5.031445030e-04f, -5.031003452e-04f, -5.030553207e-04f, -5.030094296e-04f, -5.029626721e-04f,
--5.029150483e-04f, -5.028665583e-04f, -5.028172023e-04f, -5.027669805e-04f, -5.027158929e-04f, -5.026639398e-04f, -5.026111213e-04f, -5.025574375e-04f, -5.025028885e-04f, -5.024474746e-04f,
--5.023911959e-04f, -5.023340526e-04f, -5.022760447e-04f, -5.022171726e-04f, -5.021574362e-04f, -5.020968358e-04f, -5.020353716e-04f, -5.019730437e-04f, -5.019098523e-04f, -5.018457975e-04f,
--5.017808796e-04f, -5.017150986e-04f, -5.016484548e-04f, -5.015809484e-04f, -5.015125795e-04f, -5.014433482e-04f, -5.013732549e-04f, -5.013022996e-04f, -5.012304825e-04f, -5.011578039e-04f,
--5.010842638e-04f, -5.010098625e-04f, -5.009346002e-04f, -5.008584771e-04f, -5.007814933e-04f, -5.007036491e-04f, -5.006249446e-04f, -5.005453801e-04f, -5.004649557e-04f, -5.003836716e-04f,
--5.003015280e-04f, -5.002185252e-04f, -5.001346633e-04f, -5.000499426e-04f, -4.999643631e-04f, -4.998779253e-04f, -4.997906292e-04f, -4.997024750e-04f, -4.996134630e-04f, -4.995235935e-04f,
--4.994328665e-04f, -4.993412823e-04f, -4.992488412e-04f, -4.991555434e-04f, -4.990613890e-04f, -4.989663783e-04f, -4.988705115e-04f, -4.987737889e-04f, -4.986762106e-04f, -4.985777769e-04f,
--4.984784881e-04f, -4.983783443e-04f, -4.982773458e-04f, -4.981754928e-04f, -4.980727856e-04f, -4.979692244e-04f, -4.978648093e-04f, -4.977595408e-04f, -4.976534190e-04f, -4.975464441e-04f,
--4.974386164e-04f, -4.973299362e-04f, -4.972204036e-04f, -4.971100189e-04f, -4.969987825e-04f, -4.968866945e-04f, -4.967737551e-04f, -4.966599647e-04f, -4.965453235e-04f, -4.964298317e-04f,
--4.963134897e-04f, -4.961962976e-04f, -4.960782557e-04f, -4.959593644e-04f, -4.958396237e-04f, -4.957190341e-04f, -4.955975958e-04f, -4.954753090e-04f, -4.953521741e-04f, -4.952281912e-04f,
--4.951033607e-04f, -4.949776829e-04f, -4.948511579e-04f, -4.947237862e-04f, -4.945955679e-04f, -4.944665034e-04f, -4.943365929e-04f, -4.942058367e-04f, -4.940742351e-04f, -4.939417884e-04f,
--4.938084969e-04f, -4.936743608e-04f, -4.935393804e-04f, -4.934035561e-04f, -4.932668882e-04f, -4.931293768e-04f, -4.929910224e-04f, -4.928518252e-04f, -4.927117855e-04f, -4.925709036e-04f,
--4.924291799e-04f, -4.922866145e-04f, -4.921432079e-04f, -4.919989603e-04f, -4.918538721e-04f, -4.917079435e-04f, -4.915611748e-04f, -4.914135664e-04f, -4.912651186e-04f, -4.911158317e-04f,
--4.909657060e-04f, -4.908147418e-04f, -4.906629394e-04f, -4.905102993e-04f, -4.903568216e-04f, -4.902025067e-04f, -4.900473549e-04f, -4.898913666e-04f, -4.897345421e-04f, -4.895768817e-04f,
--4.894183857e-04f, -4.892590545e-04f, -4.890988884e-04f, -4.889378878e-04f, -4.887760529e-04f, -4.886133841e-04f, -4.884498818e-04f, -4.882855463e-04f, -4.881203779e-04f, -4.879543770e-04f,
--4.877875439e-04f, -4.876198790e-04f, -4.874513826e-04f, -4.872820550e-04f, -4.871118966e-04f, -4.869409078e-04f, -4.867690890e-04f, -4.865964403e-04f, -4.864229623e-04f, -4.862486553e-04f,
--4.860735196e-04f, -4.858975556e-04f, -4.857207637e-04f, -4.855431442e-04f, -4.853646975e-04f, -4.851854239e-04f, -4.850053238e-04f, -4.848243976e-04f, -4.846426457e-04f, -4.844600684e-04f,
--4.842766661e-04f, -4.840924391e-04f, -4.839073879e-04f, -4.837215128e-04f, -4.835348143e-04f, -4.833472926e-04f, -4.831589481e-04f, -4.829697813e-04f, -4.827797925e-04f, -4.825889821e-04f,
--4.823973505e-04f, -4.822048981e-04f, -4.820116253e-04f, -4.818175324e-04f, -4.816226199e-04f, -4.814268881e-04f, -4.812303375e-04f, -4.810329684e-04f, -4.808347812e-04f, -4.806357764e-04f,
--4.804359543e-04f, -4.802353153e-04f, -4.800338599e-04f, -4.798315884e-04f, -4.796285012e-04f, -4.794245988e-04f, -4.792198816e-04f, -4.790143500e-04f, -4.788080043e-04f, -4.786008450e-04f,
--4.783928725e-04f, -4.781840873e-04f, -4.779744897e-04f, -4.777640801e-04f, -4.775528591e-04f, -4.773408269e-04f, -4.771279841e-04f, -4.769143309e-04f, -4.766998680e-04f, -4.764845957e-04f,
--4.762685144e-04f, -4.760516245e-04f, -4.758339265e-04f, -4.756154209e-04f, -4.753961080e-04f, -4.751759882e-04f, -4.749550621e-04f, -4.747333301e-04f, -4.745107925e-04f, -4.742874499e-04f,
--4.740633026e-04f, -4.738383512e-04f, -4.736125960e-04f, -4.733860376e-04f, -4.731586763e-04f, -4.729305125e-04f, -4.727015469e-04f, -4.724717797e-04f, -4.722412116e-04f, -4.720098428e-04f,
--4.717776738e-04f, -4.715447052e-04f, -4.713109374e-04f, -4.710763708e-04f, -4.708410059e-04f, -4.706048432e-04f, -4.703678831e-04f, -4.701301261e-04f, -4.698915726e-04f, -4.696522231e-04f,
--4.694120781e-04f, -4.691711381e-04f, -4.689294035e-04f, -4.686868749e-04f, -4.684435525e-04f, -4.681994371e-04f, -4.679545289e-04f, -4.677088286e-04f, -4.674623365e-04f, -4.672150533e-04f,
--4.669669792e-04f, -4.667181149e-04f, -4.664684608e-04f, -4.662180174e-04f, -4.659667851e-04f, -4.657147646e-04f, -4.654619562e-04f, -4.652083604e-04f, -4.649539779e-04f, -4.646988089e-04f,
--4.644428541e-04f, -4.641861139e-04f, -4.639285888e-04f, -4.636702794e-04f, -4.634111861e-04f, -4.631513095e-04f, -4.628906499e-04f, -4.626292080e-04f, -4.623669843e-04f, -4.621039792e-04f,
--4.618401932e-04f, -4.615756269e-04f, -4.613102809e-04f, -4.610441554e-04f, -4.607772512e-04f, -4.605095688e-04f, -4.602411085e-04f, -4.599718710e-04f, -4.597018568e-04f, -4.594310664e-04f,
--4.591595003e-04f, -4.588871590e-04f, -4.586140431e-04f, -4.583401531e-04f, -4.580654894e-04f, -4.577900528e-04f, -4.575138436e-04f, -4.572368623e-04f, -4.569591097e-04f, -4.566805861e-04f,
--4.564012920e-04f, -4.561212282e-04f, -4.558403950e-04f, -4.555587930e-04f, -4.552764227e-04f, -4.549932848e-04f, -4.547093797e-04f, -4.544247079e-04f, -4.541392701e-04f, -4.538530667e-04f,
--4.535660984e-04f, -4.532783656e-04f, -4.529898690e-04f, -4.527006090e-04f, -4.524105862e-04f, -4.521198012e-04f, -4.518282545e-04f, -4.515359467e-04f, -4.512428783e-04f, -4.509490499e-04f,
--4.506544621e-04f, -4.503591154e-04f, -4.500630104e-04f, -4.497661477e-04f, -4.494685277e-04f, -4.491701512e-04f, -4.488710185e-04f, -4.485711304e-04f, -4.482704874e-04f, -4.479690900e-04f,
--4.476669389e-04f, -4.473640346e-04f, -4.470603776e-04f, -4.467559686e-04f, -4.464508082e-04f, -4.461448968e-04f, -4.458382352e-04f, -4.455308238e-04f, -4.452226632e-04f, -4.449137542e-04f,
--4.446040971e-04f, -4.442936927e-04f, -4.439825414e-04f, -4.436706440e-04f, -4.433580009e-04f, -4.430446128e-04f, -4.427304803e-04f, -4.424156039e-04f, -4.420999843e-04f, -4.417836221e-04f,
--4.414665177e-04f, -4.411486720e-04f, -4.408300854e-04f, -4.405107585e-04f, -4.401906920e-04f, -4.398698865e-04f, -4.395483425e-04f, -4.392260607e-04f, -4.389030417e-04f, -4.385792860e-04f,
--4.382547944e-04f, -4.379295673e-04f, -4.376036055e-04f, -4.372769096e-04f, -4.369494800e-04f, -4.366213176e-04f, -4.362924228e-04f, -4.359627963e-04f, -4.356324388e-04f, -4.353013508e-04f,
--4.349695330e-04f, -4.346369859e-04f, -4.343037103e-04f, -4.339697067e-04f, -4.336349758e-04f, -4.332995182e-04f, -4.329633345e-04f, -4.326264254e-04f, -4.322887915e-04f, -4.319504334e-04f,
--4.316113518e-04f, -4.312715472e-04f, -4.309310204e-04f, -4.305897720e-04f, -4.302478026e-04f, -4.299051128e-04f, -4.295617033e-04f, -4.292175748e-04f, -4.288727278e-04f, -4.285271631e-04f,
--4.281808812e-04f, -4.278338829e-04f, -4.274861687e-04f, -4.271377394e-04f, -4.267885955e-04f, -4.264387378e-04f, -4.260881668e-04f, -4.257368833e-04f, -4.253848878e-04f, -4.250321811e-04f,
--4.246787638e-04f, -4.243246366e-04f, -4.239698001e-04f, -4.236142550e-04f, -4.232580020e-04f, -4.229010416e-04f, -4.225433747e-04f, -4.221850018e-04f, -4.218259236e-04f, -4.214661408e-04f,
--4.211056541e-04f, -4.207444640e-04f, -4.203825714e-04f, -4.200199769e-04f, -4.196566811e-04f, -4.192926848e-04f, -4.189279885e-04f, -4.185625931e-04f, -4.181964991e-04f, -4.178297072e-04f,
--4.174622182e-04f, -4.170940327e-04f, -4.167251513e-04f, -4.163555749e-04f, -4.159853040e-04f, -4.156143394e-04f, -4.152426817e-04f, -4.148703316e-04f, -4.144972899e-04f, -4.141235572e-04f,
--4.137491342e-04f, -4.133740216e-04f, -4.129982201e-04f, -4.126217304e-04f, -4.122445532e-04f, -4.118666892e-04f, -4.114881391e-04f, -4.111089036e-04f, -4.107289834e-04f, -4.103483792e-04f,
--4.099670917e-04f, -4.095851216e-04f, -4.092024696e-04f, -4.088191365e-04f, -4.084351229e-04f, -4.080504296e-04f, -4.076650572e-04f, -4.072790065e-04f, -4.068922782e-04f, -4.065048730e-04f,
--4.061167916e-04f, -4.057280347e-04f, -4.053386031e-04f, -4.049484975e-04f, -4.045577186e-04f, -4.041662671e-04f, -4.037741438e-04f, -4.033813493e-04f, -4.029878844e-04f, -4.025937498e-04f,
--4.021989463e-04f, -4.018034745e-04f, -4.014073353e-04f, -4.010105293e-04f, -4.006130572e-04f, -4.002149199e-04f, -3.998161179e-04f, -3.994166522e-04f, -3.990165233e-04f, -3.986157321e-04f,
--3.982142793e-04f, -3.978121656e-04f, -3.974093918e-04f, -3.970059585e-04f, -3.966018666e-04f, -3.961971168e-04f, -3.957917098e-04f, -3.953856464e-04f, -3.949789274e-04f, -3.945715534e-04f,
--3.941635252e-04f, -3.937548436e-04f, -3.933455094e-04f, -3.929355232e-04f, -3.925248858e-04f, -3.921135981e-04f, -3.917016606e-04f, -3.912890743e-04f, -3.908758399e-04f, -3.904619580e-04f,
--3.900474295e-04f, -3.896322552e-04f, -3.892164358e-04f, -3.887999720e-04f, -3.883828647e-04f, -3.879651145e-04f, -3.875467223e-04f, -3.871276889e-04f, -3.867080149e-04f, -3.862877012e-04f,
--3.858667485e-04f, -3.854451577e-04f, -3.850229294e-04f, -3.846000645e-04f, -3.841765637e-04f, -3.837524278e-04f, -3.833276576e-04f, -3.829022538e-04f, -3.824762173e-04f, -3.820495488e-04f,
--3.816222492e-04f, -3.811943191e-04f, -3.807657593e-04f, -3.803365707e-04f, -3.799067541e-04f, -3.794763101e-04f, -3.790452397e-04f, -3.786135436e-04f, -3.781812225e-04f, -3.777482774e-04f,
--3.773147089e-04f, -3.768805178e-04f, -3.764457050e-04f, -3.760102713e-04f, -3.755742174e-04f, -3.751375441e-04f, -3.747002523e-04f, -3.742623427e-04f, -3.738238162e-04f, -3.733846735e-04f,
--3.729449154e-04f, -3.725045428e-04f, -3.720635564e-04f, -3.716219571e-04f, -3.711797456e-04f, -3.707369228e-04f, -3.702934894e-04f, -3.698494464e-04f, -3.694047944e-04f, -3.689595343e-04f,
--3.685136669e-04f, -3.680671931e-04f, -3.676201135e-04f, -3.671724292e-04f, -3.667241408e-04f, -3.662752492e-04f, -3.658257551e-04f, -3.653756595e-04f, -3.649249632e-04f, -3.644736669e-04f,
--3.640217714e-04f, -3.635692777e-04f, -3.631161865e-04f, -3.626624987e-04f, -3.622082150e-04f, -3.617533363e-04f, -3.612978635e-04f, -3.608417973e-04f, -3.603851386e-04f, -3.599278883e-04f,
--3.594700470e-04f, -3.590116158e-04f, -3.585525954e-04f, -3.580929866e-04f, -3.576327903e-04f, -3.571720073e-04f, -3.567106385e-04f, -3.562486847e-04f, -3.557861467e-04f, -3.553230254e-04f,
--3.548593215e-04f, -3.543950361e-04f, -3.539301698e-04f, -3.534647236e-04f, -3.529986983e-04f, -3.525320947e-04f, -3.520649137e-04f, -3.515971561e-04f, -3.511288228e-04f, -3.506599146e-04f,
--3.501904324e-04f, -3.497203770e-04f, -3.492497493e-04f, -3.487785501e-04f, -3.483067803e-04f, -3.478344408e-04f, -3.473615323e-04f, -3.468880558e-04f, -3.464140121e-04f, -3.459394021e-04f,
--3.454642266e-04f, -3.449884865e-04f, -3.445121826e-04f, -3.440353159e-04f, -3.435578871e-04f, -3.430798971e-04f, -3.426013469e-04f, -3.421222372e-04f, -3.416425690e-04f, -3.411623431e-04f,
--3.406815603e-04f, -3.402002216e-04f, -3.397183278e-04f, -3.392358798e-04f, -3.387528785e-04f, -3.382693247e-04f, -3.377852192e-04f, -3.373005631e-04f, -3.368153571e-04f, -3.363296022e-04f,
--3.358432991e-04f, -3.353564489e-04f, -3.348690523e-04f, -3.343811102e-04f, -3.338926236e-04f, -3.334035933e-04f, -3.329140202e-04f, -3.324239052e-04f, -3.319332491e-04f, -3.314420529e-04f,
--3.309503174e-04f, -3.304580435e-04f, -3.299652322e-04f, -3.294718842e-04f, -3.289780005e-04f, -3.284835821e-04f, -3.279886296e-04f, -3.274931442e-04f, -3.269971266e-04f, -3.265005777e-04f,
--3.260034985e-04f, -3.255058898e-04f, -3.250077526e-04f, -3.245090877e-04f, -3.240098961e-04f, -3.235101785e-04f, -3.230099360e-04f, -3.225091695e-04f, -3.220078798e-04f, -3.215060678e-04f,
--3.210037345e-04f, -3.205008807e-04f, -3.199975073e-04f, -3.194936153e-04f, -3.189892056e-04f, -3.184842791e-04f, -3.179788366e-04f, -3.174728792e-04f, -3.169664076e-04f, -3.164594228e-04f,
--3.159519258e-04f, -3.154439174e-04f, -3.149353986e-04f, -3.144263702e-04f, -3.139168332e-04f, -3.134067885e-04f, -3.128962370e-04f, -3.123851797e-04f, -3.118736174e-04f, -3.113615510e-04f,
--3.108489816e-04f, -3.103359099e-04f, -3.098223370e-04f, -3.093082637e-04f, -3.087936911e-04f, -3.082786199e-04f, -3.077630511e-04f, -3.072469857e-04f, -3.067304246e-04f, -3.062133686e-04f,
--3.056958188e-04f, -3.051777761e-04f, -3.046592414e-04f, -3.041402155e-04f, -3.036206996e-04f, -3.031006944e-04f, -3.025802009e-04f, -3.020592201e-04f, -3.015377529e-04f, -3.010158001e-04f,
--3.004933629e-04f, -2.999704420e-04f, -2.994470385e-04f, -2.989231532e-04f, -2.983987871e-04f, -2.978739412e-04f, -2.973486164e-04f, -2.968228136e-04f, -2.962965338e-04f, -2.957697779e-04f,
--2.952425468e-04f, -2.947148415e-04f, -2.941866630e-04f, -2.936580122e-04f, -2.931288900e-04f, -2.925992974e-04f, -2.920692353e-04f, -2.915387048e-04f, -2.910077066e-04f, -2.904762418e-04f,
--2.899443114e-04f, -2.894119163e-04f, -2.888790573e-04f, -2.883457356e-04f, -2.878119520e-04f, -2.872777076e-04f, -2.867430031e-04f, -2.862078397e-04f, -2.856722183e-04f, -2.851361398e-04f,
--2.845996051e-04f, -2.840626153e-04f, -2.835251713e-04f, -2.829872741e-04f, -2.824489246e-04f, -2.819101238e-04f, -2.813708726e-04f, -2.808311720e-04f, -2.802910231e-04f, -2.797504266e-04f,
--2.792093837e-04f, -2.786678952e-04f, -2.781259622e-04f, -2.775835856e-04f, -2.770407663e-04f, -2.764975054e-04f, -2.759538038e-04f, -2.754096625e-04f, -2.748650825e-04f, -2.743200647e-04f,
--2.737746101e-04f, -2.732287196e-04f, -2.726823943e-04f, -2.721356352e-04f, -2.715884431e-04f, -2.710408191e-04f, -2.704927641e-04f, -2.699442792e-04f, -2.693953653e-04f, -2.688460233e-04f,
--2.682962543e-04f, -2.677460593e-04f, -2.671954392e-04f, -2.666443950e-04f, -2.660929276e-04f, -2.655410382e-04f, -2.649887276e-04f, -2.644359968e-04f, -2.638828468e-04f, -2.633292787e-04f,
--2.627752933e-04f, -2.622208918e-04f, -2.616660749e-04f, -2.611108439e-04f, -2.605551996e-04f, -2.599991430e-04f, -2.594426751e-04f, -2.588857970e-04f, -2.583285095e-04f, -2.577708138e-04f,
--2.572127107e-04f, -2.566542013e-04f, -2.560952866e-04f, -2.555359675e-04f, -2.549762451e-04f, -2.544161204e-04f, -2.538555943e-04f, -2.532946679e-04f, -2.527333421e-04f, -2.521716180e-04f,
--2.516094965e-04f, -2.510469786e-04f, -2.504840654e-04f, -2.499207579e-04f, -2.493570570e-04f, -2.487929637e-04f, -2.482284791e-04f, -2.476636041e-04f, -2.470983398e-04f, -2.465326872e-04f,
--2.459666472e-04f, -2.454002209e-04f, -2.448334092e-04f, -2.442662133e-04f, -2.436986340e-04f, -2.431306725e-04f, -2.425623296e-04f, -2.419936065e-04f, -2.414245040e-04f, -2.408550234e-04f,
--2.402851654e-04f, -2.397149312e-04f, -2.391443218e-04f, -2.385733382e-04f, -2.380019814e-04f, -2.374302523e-04f, -2.368581521e-04f, -2.362856817e-04f, -2.357128422e-04f, -2.351396346e-04f,
--2.345660598e-04f, -2.339921189e-04f, -2.334178130e-04f, -2.328431430e-04f, -2.322681099e-04f, -2.316927148e-04f, -2.311169587e-04f, -2.305408427e-04f, -2.299643676e-04f, -2.293875346e-04f,
--2.288103447e-04f, -2.282327989e-04f, -2.276548983e-04f, -2.270766437e-04f, -2.264980364e-04f, -2.259190772e-04f, -2.253397673e-04f, -2.247601076e-04f, -2.241800992e-04f, -2.235997431e-04f,
--2.230190403e-04f, -2.224379919e-04f, -2.218565988e-04f, -2.212748622e-04f, -2.206927830e-04f, -2.201103623e-04f, -2.195276011e-04f, -2.189445005e-04f, -2.183610614e-04f, -2.177772849e-04f,
--2.171931720e-04f, -2.166087238e-04f, -2.160239413e-04f, -2.154388256e-04f, -2.148533775e-04f, -2.142675983e-04f, -2.136814890e-04f, -2.130950505e-04f, -2.125082839e-04f, -2.119211903e-04f,
--2.113337707e-04f, -2.107460260e-04f, -2.101579575e-04f, -2.095695660e-04f, -2.089808527e-04f, -2.083918186e-04f, -2.078024647e-04f, -2.072127920e-04f, -2.066228017e-04f, -2.060324947e-04f,
--2.054418721e-04f, -2.048509349e-04f, -2.042596842e-04f, -2.036681210e-04f, -2.030762464e-04f, -2.024840614e-04f, -2.018915671e-04f, -2.012987644e-04f, -2.007056545e-04f, -2.001122384e-04f,
--1.995185171e-04f, -1.989244917e-04f, -1.983301633e-04f, -1.977355328e-04f, -1.971406014e-04f, -1.965453700e-04f, -1.959498398e-04f, -1.953540117e-04f, -1.947578869e-04f, -1.941614664e-04f,
--1.935647512e-04f, -1.929677424e-04f, -1.923704411e-04f, -1.917728482e-04f, -1.911749649e-04f, -1.905767922e-04f, -1.899783311e-04f, -1.893795827e-04f, -1.887805481e-04f, -1.881812284e-04f,
--1.875816245e-04f, -1.869817375e-04f, -1.863815685e-04f, -1.857811186e-04f, -1.851803888e-04f, -1.845793801e-04f, -1.839780936e-04f, -1.833765305e-04f, -1.827746916e-04f, -1.821725782e-04f,
--1.815701912e-04f, -1.809675318e-04f, -1.803646009e-04f, -1.797613997e-04f, -1.791579291e-04f, -1.785541903e-04f, -1.779501844e-04f, -1.773459123e-04f, -1.767413752e-04f, -1.761365741e-04f,
--1.755315101e-04f, -1.749261842e-04f, -1.743205976e-04f, -1.737147512e-04f, -1.731086461e-04f, -1.725022835e-04f, -1.718956643e-04f, -1.712887897e-04f, -1.706816606e-04f, -1.700742783e-04f,
--1.694666436e-04f, -1.688587578e-04f, -1.682506219e-04f, -1.676422369e-04f, -1.670336039e-04f, -1.664247240e-04f, -1.658155982e-04f, -1.652062277e-04f, -1.645966135e-04f, -1.639867566e-04f,
--1.633766582e-04f, -1.627663193e-04f, -1.621557409e-04f, -1.615449242e-04f, -1.609338702e-04f, -1.603225801e-04f, -1.597110547e-04f, -1.590992954e-04f, -1.584873030e-04f, -1.578750788e-04f,
--1.572626237e-04f, -1.566499388e-04f, -1.560370253e-04f, -1.554238842e-04f, -1.548105165e-04f, -1.541969234e-04f, -1.535831058e-04f, -1.529690650e-04f, -1.523548020e-04f, -1.517403178e-04f,
--1.511256135e-04f, -1.505106903e-04f, -1.498955491e-04f, -1.492801911e-04f, -1.486646174e-04f, -1.480488289e-04f, -1.474328269e-04f, -1.468166123e-04f, -1.462001864e-04f, -1.455835500e-04f,
--1.449667044e-04f, -1.443496506e-04f, -1.437323896e-04f, -1.431149227e-04f, -1.424972507e-04f, -1.418793749e-04f, -1.412612964e-04f, -1.406430161e-04f, -1.400245352e-04f, -1.394058547e-04f,
--1.387869759e-04f, -1.381678996e-04f, -1.375486270e-04f, -1.369291593e-04f, -1.363094974e-04f, -1.356896425e-04f, -1.350695957e-04f, -1.344493579e-04f, -1.338289305e-04f, -1.332083143e-04f,
--1.325875105e-04f, -1.319665202e-04f, -1.313453444e-04f, -1.307239844e-04f, -1.301024410e-04f, -1.294807155e-04f, -1.288588089e-04f, -1.282367223e-04f, -1.276144568e-04f, -1.269920135e-04f,
--1.263693935e-04f, -1.257465978e-04f, -1.251236275e-04f, -1.245004838e-04f, -1.238771678e-04f, -1.232536804e-04f, -1.226300228e-04f, -1.220061962e-04f, -1.213822015e-04f, -1.207580399e-04f,
--1.201337125e-04f, -1.195092203e-04f, -1.188845645e-04f, -1.182597461e-04f, -1.176347662e-04f, -1.170096260e-04f, -1.163843265e-04f, -1.157588688e-04f, -1.151332540e-04f, -1.145074832e-04f,
--1.138815575e-04f, -1.132554779e-04f, -1.126292457e-04f, -1.120028617e-04f, -1.113763273e-04f, -1.107496434e-04f, -1.101228112e-04f, -1.094958316e-04f, -1.088687060e-04f, -1.082414352e-04f,
--1.076140205e-04f, -1.069864629e-04f, -1.063587635e-04f, -1.057309234e-04f, -1.051029438e-04f, -1.044748256e-04f, -1.038465700e-04f, -1.032181781e-04f, -1.025896510e-04f, -1.019609898e-04f,
--1.013321955e-04f, -1.007032694e-04f, -1.000742124e-04f, -9.944502567e-05f, -9.881571031e-05f, -9.818626742e-05f, -9.755669808e-05f, -9.692700340e-05f, -9.629718448e-05f, -9.566724241e-05f,
--9.503717829e-05f, -9.440699322e-05f, -9.377668829e-05f, -9.314626461e-05f, -9.251572327e-05f, -9.188506537e-05f, -9.125429201e-05f, -9.062340429e-05f, -8.999240331e-05f, -8.936129016e-05f,
--8.873006594e-05f, -8.809873176e-05f, -8.746728871e-05f, -8.683573790e-05f, -8.620408041e-05f, -8.557231736e-05f, -8.494044984e-05f, -8.430847894e-05f, -8.367640578e-05f, -8.304423145e-05f,
--8.241195705e-05f, -8.177958368e-05f, -8.114711245e-05f, -8.051454444e-05f, -7.988188076e-05f, -7.924912252e-05f, -7.861627081e-05f, -7.798332674e-05f, -7.735029140e-05f, -7.671716589e-05f,
--7.608395132e-05f, -7.545064879e-05f, -7.481725940e-05f, -7.418378424e-05f, -7.355022443e-05f, -7.291658106e-05f, -7.228285524e-05f, -7.164904805e-05f, -7.101516062e-05f, -7.038119403e-05f,
--6.974714940e-05f, -6.911302781e-05f, -6.847883038e-05f, -6.784455821e-05f, -6.721021239e-05f, -6.657579403e-05f, -6.594130424e-05f, -6.530674410e-05f, -6.467211473e-05f, -6.403741723e-05f,
--6.340265270e-05f, -6.276782224e-05f, -6.213292695e-05f, -6.149796794e-05f, -6.086294631e-05f, -6.022786316e-05f, -5.959271960e-05f, -5.895751672e-05f, -5.832225562e-05f, -5.768693742e-05f,
--5.705156321e-05f, -5.641613410e-05f, -5.578065118e-05f, -5.514511557e-05f, -5.450952836e-05f, -5.387389065e-05f, -5.323820356e-05f, -5.260246817e-05f, -5.196668560e-05f, -5.133085694e-05f,
--5.069498331e-05f, -5.005906579e-05f, -4.942310550e-05f, -4.878710354e-05f, -4.815106100e-05f, -4.751497900e-05f, -4.687885863e-05f, -4.624270100e-05f, -4.560650720e-05f, -4.497027835e-05f,
--4.433401555e-05f, -4.369771989e-05f, -4.306139248e-05f, -4.242503442e-05f, -4.178864682e-05f, -4.115223078e-05f, -4.051578739e-05f, -3.987931777e-05f, -3.924282301e-05f, -3.860630422e-05f,
--3.796976249e-05f, -3.733319894e-05f, -3.669661466e-05f, -3.606001076e-05f, -3.542338833e-05f, -3.478674848e-05f, -3.415009232e-05f, -3.351342094e-05f, -3.287673544e-05f, -3.224003693e-05f,
--3.160332652e-05f, -3.096660529e-05f, -3.032987435e-05f, -2.969313481e-05f, -2.905638777e-05f, -2.841963432e-05f, -2.778287558e-05f, -2.714611263e-05f, -2.650934659e-05f, -2.587257854e-05f,
--2.523580961e-05f, -2.459904088e-05f, -2.396227345e-05f, -2.332550843e-05f, -2.268874692e-05f, -2.205199003e-05f, -2.141523884e-05f, -2.077849446e-05f, -2.014175799e-05f, -1.950503053e-05f,
--1.886831319e-05f, -1.823160705e-05f, -1.759491323e-05f, -1.695823283e-05f, -1.632156693e-05f, -1.568491665e-05f, -1.504828308e-05f, -1.441166732e-05f, -1.377507047e-05f, -1.313849364e-05f,
--1.250193791e-05f, -1.186540440e-05f, -1.122889419e-05f, -1.059240839e-05f, -9.955948094e-06f, -9.319514405e-06f, -8.683108421e-06f, -8.046731239e-06f, -7.410383958e-06f, -6.774067675e-06f,
--6.137783491e-06f, -5.501532501e-06f, -4.865315805e-06f, -4.229134499e-06f, -3.592989682e-06f, -2.956882452e-06f, -2.320813904e-06f, -1.684785137e-06f, -1.048797247e-06f, -4.128513325e-07f,
-2.230515113e-07f, 8.589101872e-07f, 1.494723599e-06f, 2.130490650e-06f, 2.766210244e-06f, 3.401881286e-06f, 4.037502680e-06f, 4.673073329e-06f, 5.308592138e-06f, 5.944058012e-06f,
-6.579469857e-06f, 7.214826576e-06f, 7.850127075e-06f, 8.485370260e-06f, 9.120555035e-06f, 9.755680307e-06f, 1.039074498e-05f, 1.102574796e-05f, 1.166068816e-05f, 1.229556448e-05f,
-1.293037583e-05f, 1.356512111e-05f, 1.419979923e-05f, 1.483440910e-05f, 1.546894963e-05f, 1.610341972e-05f, 1.673781828e-05f, 1.737214423e-05f, 1.800639646e-05f, 1.864057388e-05f,
-1.927467541e-05f, 1.990869996e-05f, 2.054264642e-05f, 2.117651372e-05f, 2.181030076e-05f, 2.244400645e-05f, 2.307762969e-05f, 2.371116941e-05f, 2.434462451e-05f, 2.497799390e-05f,
-2.561127650e-05f, 2.624447120e-05f, 2.687757693e-05f, 2.751059260e-05f, 2.814351711e-05f, 2.877634938e-05f, 2.940908832e-05f, 3.004173284e-05f, 3.067428186e-05f, 3.130673429e-05f,
-3.193908904e-05f, 3.257134503e-05f, 3.320350116e-05f, 3.383555636e-05f, 3.446750953e-05f, 3.509935960e-05f, 3.573110547e-05f, 3.636274606e-05f, 3.699428028e-05f, 3.762570705e-05f,
-3.825702529e-05f, 3.888823392e-05f, 3.951933184e-05f, 4.015031797e-05f, 4.078119124e-05f, 4.141195055e-05f, 4.204259483e-05f, 4.267312299e-05f, 4.330353395e-05f, 4.393382662e-05f,
-4.456399994e-05f, 4.519405281e-05f, 4.582398415e-05f, 4.645379289e-05f, 4.708347794e-05f, 4.771303822e-05f, 4.834247265e-05f, 4.897178015e-05f, 4.960095965e-05f, 5.023001006e-05f,
-5.085893031e-05f, 5.148771931e-05f, 5.211637600e-05f, 5.274489928e-05f, 5.337328808e-05f, 5.400154133e-05f, 5.462965795e-05f, 5.525763686e-05f, 5.588547698e-05f, 5.651317725e-05f,
-5.714073658e-05f, 5.776815389e-05f, 5.839542812e-05f, 5.902255819e-05f, 5.964954302e-05f, 6.027638154e-05f, 6.090307267e-05f, 6.152961535e-05f, 6.215600850e-05f, 6.278225104e-05f,
-6.340834191e-05f, 6.403428002e-05f, 6.466006432e-05f, 6.528569373e-05f, 6.591116717e-05f, 6.653648358e-05f, 6.716164189e-05f, 6.778664102e-05f, 6.841147991e-05f, 6.903615748e-05f,
-6.966067268e-05f, 7.028502442e-05f, 7.090921164e-05f, 7.153323327e-05f, 7.215708825e-05f, 7.278077551e-05f, 7.340429398e-05f, 7.402764259e-05f, 7.465082028e-05f, 7.527382599e-05f,
-7.589665864e-05f, 7.651931717e-05f, 7.714180052e-05f, 7.776410762e-05f, 7.838623741e-05f, 7.900818883e-05f, 7.962996081e-05f, 8.025155229e-05f, 8.087296220e-05f, 8.149418949e-05f,
-8.211523310e-05f, 8.273609196e-05f, 8.335676501e-05f, 8.397725119e-05f, 8.459754944e-05f, 8.521765870e-05f, 8.583757792e-05f, 8.645730602e-05f, 8.707684197e-05f, 8.769618469e-05f,
-8.831533313e-05f, 8.893428623e-05f, 8.955304294e-05f, 9.017160219e-05f, 9.078996294e-05f, 9.140812413e-05f, 9.202608470e-05f, 9.264384359e-05f, 9.326139976e-05f, 9.387875215e-05f,
-9.449589971e-05f, 9.511284138e-05f, 9.572957610e-05f, 9.634610284e-05f, 9.696242053e-05f, 9.757852813e-05f, 9.819442458e-05f, 9.881010884e-05f, 9.942557985e-05f, 1.000408366e-04f,
-1.006558779e-04f, 1.012707029e-04f, 1.018853104e-04f, 1.024996995e-04f, 1.031138690e-04f, 1.037278179e-04f, 1.043415452e-04f, 1.049550498e-04f, 1.055683307e-04f, 1.061813869e-04f,
-1.067942172e-04f, 1.074068206e-04f, 1.080191962e-04f, 1.086313428e-04f, 1.092432595e-04f, 1.098549451e-04f, 1.104663986e-04f, 1.110776190e-04f, 1.116886053e-04f, 1.122993564e-04f,
-1.129098713e-04f, 1.135201489e-04f, 1.141301881e-04f, 1.147399881e-04f, 1.153495476e-04f, 1.159588657e-04f, 1.165679414e-04f, 1.171767736e-04f, 1.177853612e-04f, 1.183937033e-04f,
-1.190017987e-04f, 1.196096466e-04f, 1.202172457e-04f, 1.208245952e-04f, 1.214316939e-04f, 1.220385408e-04f, 1.226451349e-04f, 1.232514752e-04f, 1.238575607e-04f, 1.244633902e-04f,
-1.250689628e-04f, 1.256742775e-04f, 1.262793332e-04f, 1.268841289e-04f, 1.274886635e-04f, 1.280929360e-04f, 1.286969455e-04f, 1.293006908e-04f, 1.299041710e-04f, 1.305073851e-04f,
-1.311103319e-04f, 1.317130105e-04f, 1.323154199e-04f, 1.329175590e-04f, 1.335194268e-04f, 1.341210223e-04f, 1.347223445e-04f, 1.353233923e-04f, 1.359241647e-04f, 1.365246608e-04f,
-1.371248794e-04f, 1.377248196e-04f, 1.383244804e-04f, 1.389238606e-04f, 1.395229594e-04f, 1.401217757e-04f, 1.407203085e-04f, 1.413185568e-04f, 1.419165195e-04f, 1.425141956e-04f,
-1.431115841e-04f, 1.437086841e-04f, 1.443054945e-04f, 1.449020142e-04f, 1.454982424e-04f, 1.460941779e-04f, 1.466898197e-04f, 1.472851669e-04f, 1.478802184e-04f, 1.484749733e-04f,
-1.490694305e-04f, 1.496635889e-04f, 1.502574477e-04f, 1.508510058e-04f, 1.514442622e-04f, 1.520372159e-04f, 1.526298658e-04f, 1.532222110e-04f, 1.538142506e-04f, 1.544059833e-04f,
-1.549974084e-04f, 1.555885247e-04f, 1.561793313e-04f, 1.567698272e-04f, 1.573600113e-04f, 1.579498827e-04f, 1.585394403e-04f, 1.591286833e-04f, 1.597176105e-04f, 1.603062210e-04f,
-1.608945138e-04f, 1.614824879e-04f, 1.620701422e-04f, 1.626574759e-04f, 1.632444879e-04f, 1.638311772e-04f, 1.644175428e-04f, 1.650035837e-04f, 1.655892990e-04f, 1.661746876e-04f,
-1.667597486e-04f, 1.673444809e-04f, 1.679288837e-04f, 1.685129558e-04f, 1.690966963e-04f, 1.696801043e-04f, 1.702631787e-04f, 1.708459185e-04f, 1.714283228e-04f, 1.720103906e-04f,
-1.725921209e-04f, 1.731735127e-04f, 1.737545650e-04f, 1.743352769e-04f, 1.749156474e-04f, 1.754956754e-04f, 1.760753600e-04f, 1.766547003e-04f, 1.772336953e-04f, 1.778123439e-04f,
-1.783906452e-04f, 1.789685982e-04f, 1.795462020e-04f, 1.801234556e-04f, 1.807003580e-04f, 1.812769081e-04f, 1.818531052e-04f, 1.824289481e-04f, 1.830044360e-04f, 1.835795677e-04f,
-1.841543425e-04f, 1.847287592e-04f, 1.853028170e-04f, 1.858765149e-04f, 1.864498518e-04f, 1.870228269e-04f, 1.875954391e-04f, 1.881676876e-04f, 1.887395713e-04f, 1.893110892e-04f,
-1.898822405e-04f, 1.904530241e-04f, 1.910234391e-04f, 1.915934845e-04f, 1.921631594e-04f, 1.927324628e-04f, 1.933013937e-04f, 1.938699512e-04f, 1.944381344e-04f, 1.950059422e-04f,
-1.955733737e-04f, 1.961404280e-04f, 1.967071041e-04f, 1.972734011e-04f, 1.978393180e-04f, 1.984048538e-04f, 1.989700076e-04f, 1.995347785e-04f, 2.000991654e-04f, 2.006631675e-04f,
-2.012267838e-04f, 2.017900134e-04f, 2.023528552e-04f, 2.029153084e-04f, 2.034773720e-04f, 2.040390451e-04f, 2.046003267e-04f, 2.051612159e-04f, 2.057217117e-04f, 2.062818133e-04f,
-2.068415195e-04f, 2.074008296e-04f, 2.079597425e-04f, 2.085182574e-04f, 2.090763733e-04f, 2.096340892e-04f, 2.101914043e-04f, 2.107483175e-04f, 2.113048280e-04f, 2.118609348e-04f,
-2.124166370e-04f, 2.129719336e-04f, 2.135268237e-04f, 2.140813064e-04f, 2.146353808e-04f, 2.151890459e-04f, 2.157423008e-04f, 2.162951445e-04f, 2.168475762e-04f, 2.173995949e-04f,
-2.179511997e-04f, 2.185023897e-04f, 2.190531639e-04f, 2.196035214e-04f, 2.201534612e-04f, 2.207029826e-04f, 2.212520845e-04f, 2.218007660e-04f, 2.223490262e-04f, 2.228968642e-04f,
-2.234442791e-04f, 2.239912699e-04f, 2.245378358e-04f, 2.250839758e-04f, 2.256296890e-04f, 2.261749744e-04f, 2.267198313e-04f, 2.272642586e-04f, 2.278082554e-04f, 2.283518209e-04f,
-2.288949542e-04f, 2.294376542e-04f, 2.299799202e-04f, 2.305217512e-04f, 2.310631462e-04f, 2.316041045e-04f, 2.321446250e-04f, 2.326847069e-04f, 2.332243493e-04f, 2.337635513e-04f,
-2.343023120e-04f, 2.348406304e-04f, 2.353785057e-04f, 2.359159370e-04f, 2.364529233e-04f, 2.369894638e-04f, 2.375255576e-04f, 2.380612038e-04f, 2.385964015e-04f, 2.391311497e-04f,
-2.396654477e-04f, 2.401992944e-04f, 2.407326891e-04f, 2.412656308e-04f, 2.417981187e-04f, 2.423301517e-04f, 2.428617292e-04f, 2.433928501e-04f, 2.439235136e-04f, 2.444537187e-04f,
-2.449834647e-04f, 2.455127506e-04f, 2.460415756e-04f, 2.465699387e-04f, 2.470978391e-04f, 2.476252759e-04f, 2.481522482e-04f, 2.486787551e-04f, 2.492047958e-04f, 2.497303694e-04f,
-2.502554750e-04f, 2.507801117e-04f, 2.513042787e-04f, 2.518279750e-04f, 2.523511999e-04f, 2.528739523e-04f, 2.533962316e-04f, 2.539180367e-04f, 2.544393669e-04f, 2.549602212e-04f,
-2.554805988e-04f, 2.560004989e-04f, 2.565199205e-04f, 2.570388627e-04f, 2.575573248e-04f, 2.580753059e-04f, 2.585928051e-04f, 2.591098214e-04f, 2.596263542e-04f, 2.601424025e-04f,
-2.606579655e-04f, 2.611730422e-04f, 2.616876319e-04f, 2.622017337e-04f, 2.627153467e-04f, 2.632284701e-04f, 2.637411030e-04f, 2.642532446e-04f, 2.647648940e-04f, 2.652760504e-04f,
-2.657867128e-04f, 2.662968806e-04f, 2.668065528e-04f, 2.673157285e-04f, 2.678244070e-04f, 2.683325874e-04f, 2.688402688e-04f, 2.693474504e-04f, 2.698541314e-04f, 2.703603108e-04f,
-2.708659880e-04f, 2.713711619e-04f, 2.718758319e-04f, 2.723799970e-04f, 2.728836564e-04f, 2.733868094e-04f, 2.738894549e-04f, 2.743915923e-04f, 2.748932207e-04f, 2.753943392e-04f,
-2.758949470e-04f, 2.763950433e-04f, 2.768946272e-04f, 2.773936980e-04f, 2.778922548e-04f, 2.783902968e-04f, 2.788878231e-04f, 2.793848329e-04f, 2.798813254e-04f, 2.803772998e-04f,
-2.808727553e-04f, 2.813676910e-04f, 2.818621061e-04f, 2.823559998e-04f, 2.828493713e-04f, 2.833422197e-04f, 2.838345443e-04f, 2.843263442e-04f, 2.848176186e-04f, 2.853083667e-04f,
-2.857985877e-04f, 2.862882808e-04f, 2.867774452e-04f, 2.872660800e-04f, 2.877541845e-04f, 2.882417578e-04f, 2.887287991e-04f, 2.892153077e-04f, 2.897012827e-04f, 2.901867233e-04f,
-2.906716287e-04f, 2.911559982e-04f, 2.916398308e-04f, 2.921231259e-04f, 2.926058826e-04f, 2.930881002e-04f, 2.935697777e-04f, 2.940509145e-04f, 2.945315097e-04f, 2.950115626e-04f,
-2.954910723e-04f, 2.959700381e-04f, 2.964484591e-04f, 2.969263346e-04f, 2.974036638e-04f, 2.978804459e-04f, 2.983566802e-04f, 2.988323657e-04f, 2.993075018e-04f, 2.997820876e-04f,
-3.002561225e-04f, 3.007296055e-04f, 3.012025359e-04f, 3.016749130e-04f, 3.021467359e-04f, 3.026180039e-04f, 3.030887162e-04f, 3.035588721e-04f, 3.040284706e-04f, 3.044975112e-04f,
-3.049659930e-04f, 3.054339152e-04f, 3.059012771e-04f, 3.063680778e-04f, 3.068343167e-04f, 3.072999930e-04f, 3.077651058e-04f, 3.082296545e-04f, 3.086936382e-04f, 3.091570563e-04f,
-3.096199078e-04f, 3.100821922e-04f, 3.105439086e-04f, 3.110050562e-04f, 3.114656343e-04f, 3.119256422e-04f, 3.123850790e-04f, 3.128439441e-04f, 3.133022367e-04f, 3.137599559e-04f,
-3.142171012e-04f, 3.146736717e-04f, 3.151296666e-04f, 3.155850853e-04f, 3.160399269e-04f, 3.164941908e-04f, 3.169478761e-04f, 3.174009822e-04f, 3.178535083e-04f, 3.183054537e-04f,
-3.187568175e-04f, 3.192075991e-04f, 3.196577978e-04f, 3.201074127e-04f, 3.205564432e-04f, 3.210048885e-04f, 3.214527480e-04f, 3.219000207e-04f, 3.223467061e-04f, 3.227928033e-04f,
-3.232383118e-04f, 3.236832306e-04f, 3.241275591e-04f, 3.245712966e-04f, 3.250144424e-04f, 3.254569957e-04f, 3.258989557e-04f, 3.263403219e-04f, 3.267810933e-04f, 3.272212695e-04f,
-3.276608495e-04f, 3.280998327e-04f, 3.285382183e-04f, 3.289760058e-04f, 3.294131942e-04f, 3.298497830e-04f, 3.302857714e-04f, 3.307211587e-04f, 3.311559442e-04f, 3.315901271e-04f,
-3.320237069e-04f, 3.324566826e-04f, 3.328890538e-04f, 3.333208195e-04f, 3.337519793e-04f, 3.341825322e-04f, 3.346124777e-04f, 3.350418150e-04f, 3.354705435e-04f, 3.358986624e-04f,
-3.363261710e-04f, 3.367530687e-04f, 3.371793547e-04f, 3.376050283e-04f, 3.380300889e-04f, 3.384545358e-04f, 3.388783682e-04f, 3.393015855e-04f, 3.397241870e-04f, 3.401461720e-04f,
-3.405675398e-04f, 3.409882898e-04f, 3.414084212e-04f, 3.418279333e-04f, 3.422468255e-04f, 3.426650972e-04f, 3.430827475e-04f, 3.434997759e-04f, 3.439161816e-04f, 3.443319640e-04f,
-3.447471224e-04f, 3.451616562e-04f, 3.455755646e-04f, 3.459888470e-04f, 3.464015027e-04f, 3.468135310e-04f, 3.472249313e-04f, 3.476357029e-04f, 3.480458452e-04f, 3.484553574e-04f,
-3.488642390e-04f, 3.492724892e-04f, 3.496801073e-04f, 3.500870928e-04f, 3.504934450e-04f, 3.508991631e-04f, 3.513042466e-04f, 3.517086948e-04f, 3.521125070e-04f, 3.525156826e-04f,
-3.529182209e-04f, 3.533201213e-04f, 3.537213831e-04f, 3.541220057e-04f, 3.545219884e-04f, 3.549213306e-04f, 3.553200316e-04f, 3.557180908e-04f, 3.561155075e-04f, 3.565122812e-04f,
-3.569084111e-04f, 3.573038966e-04f, 3.576987371e-04f, 3.580929319e-04f, 3.584864804e-04f, 3.588793820e-04f, 3.592716361e-04f, 3.596632419e-04f, 3.600541989e-04f, 3.604445064e-04f,
-3.608341638e-04f, 3.612231705e-04f, 3.616115259e-04f, 3.619992292e-04f, 3.623862800e-04f, 3.627726775e-04f, 3.631584212e-04f, 3.635435104e-04f, 3.639279445e-04f, 3.643117229e-04f,
-3.646948450e-04f, 3.650773101e-04f, 3.654591177e-04f, 3.658402671e-04f, 3.662207576e-04f, 3.666005888e-04f, 3.669797600e-04f, 3.673582705e-04f, 3.677361198e-04f, 3.681133073e-04f,
-3.684898323e-04f, 3.688656942e-04f, 3.692408925e-04f, 3.696154265e-04f, 3.699892957e-04f, 3.703624994e-04f, 3.707350370e-04f, 3.711069080e-04f, 3.714781117e-04f, 3.718486476e-04f,
-3.722185150e-04f, 3.725877133e-04f, 3.729562421e-04f, 3.733241006e-04f, 3.736912883e-04f, 3.740578046e-04f, 3.744236488e-04f, 3.747888206e-04f, 3.751533191e-04f, 3.755171439e-04f,
-3.758802944e-04f, 3.762427700e-04f, 3.766045700e-04f, 3.769656941e-04f, 3.773261414e-04f, 3.776859115e-04f, 3.780450039e-04f, 3.784034179e-04f, 3.787611529e-04f, 3.791182084e-04f,
-3.794745838e-04f, 3.798302785e-04f, 3.801852921e-04f, 3.805396238e-04f, 3.808932732e-04f, 3.812462397e-04f, 3.815985226e-04f, 3.819501216e-04f, 3.823010359e-04f, 3.826512650e-04f,
-3.830008085e-04f, 3.833496656e-04f, 3.836978359e-04f, 3.840453188e-04f, 3.843921138e-04f, 3.847382203e-04f, 3.850836377e-04f, 3.854283655e-04f, 3.857724032e-04f, 3.861157502e-04f,
-3.864584059e-04f, 3.868003699e-04f, 3.871416415e-04f, 3.874822203e-04f, 3.878221056e-04f, 3.881612970e-04f, 3.884997939e-04f, 3.888375958e-04f, 3.891747021e-04f, 3.895111124e-04f,
-3.898468259e-04f, 3.901818424e-04f, 3.905161611e-04f, 3.908497816e-04f, 3.911827033e-04f, 3.915149258e-04f, 3.918464485e-04f, 3.921772708e-04f, 3.925073923e-04f, 3.928368124e-04f,
-3.931655306e-04f, 3.934935463e-04f, 3.938208592e-04f, 3.941474686e-04f, 3.944733740e-04f, 3.947985749e-04f, 3.951230708e-04f, 3.954468612e-04f, 3.957699456e-04f, 3.960923235e-04f,
-3.964139943e-04f, 3.967349576e-04f, 3.970552128e-04f, 3.973747594e-04f, 3.976935970e-04f, 3.980117250e-04f, 3.983291430e-04f, 3.986458504e-04f, 3.989618467e-04f, 3.992771315e-04f,
-3.995917042e-04f, 3.999055643e-04f, 4.002187114e-04f, 4.005311450e-04f, 4.008428645e-04f, 4.011538696e-04f, 4.014641596e-04f, 4.017737341e-04f, 4.020825926e-04f, 4.023907347e-04f,
-4.026981598e-04f, 4.030048675e-04f, 4.033108573e-04f, 4.036161287e-04f, 4.039206812e-04f, 4.042245144e-04f, 4.045276277e-04f, 4.048300208e-04f, 4.051316931e-04f, 4.054326441e-04f,
-4.057328735e-04f, 4.060323806e-04f, 4.063311651e-04f, 4.066292265e-04f, 4.069265644e-04f, 4.072231781e-04f, 4.075190674e-04f, 4.078142317e-04f, 4.081086706e-04f, 4.084023835e-04f,
-4.086953702e-04f, 4.089876300e-04f, 4.092791626e-04f, 4.095699674e-04f, 4.098600441e-04f, 4.101493922e-04f, 4.104380113e-04f, 4.107259008e-04f, 4.110130603e-04f, 4.112994894e-04f,
-4.115851877e-04f, 4.118701547e-04f, 4.121543900e-04f, 4.124378931e-04f, 4.127206635e-04f, 4.130027009e-04f, 4.132840048e-04f, 4.135645748e-04f, 4.138444105e-04f, 4.141235113e-04f,
-4.144018769e-04f, 4.146795068e-04f, 4.149564007e-04f, 4.152325580e-04f, 4.155079784e-04f, 4.157826614e-04f, 4.160566067e-04f, 4.163298137e-04f, 4.166022821e-04f, 4.168740114e-04f,
-4.171450013e-04f, 4.174152512e-04f, 4.176847609e-04f, 4.179535298e-04f, 4.182215576e-04f, 4.184888439e-04f, 4.187553882e-04f, 4.190211901e-04f, 4.192862492e-04f, 4.195505652e-04f,
-4.198141376e-04f, 4.200769660e-04f, 4.203390499e-04f, 4.206003891e-04f, 4.208609831e-04f, 4.211208315e-04f, 4.213799339e-04f, 4.216382899e-04f, 4.218958991e-04f, 4.221527611e-04f,
-4.224088756e-04f, 4.226642421e-04f, 4.229188602e-04f, 4.231727296e-04f, 4.234258499e-04f, 4.236782206e-04f, 4.239298415e-04f, 4.241807121e-04f, 4.244308320e-04f, 4.246802008e-04f,
-4.249288182e-04f, 4.251766839e-04f, 4.254237973e-04f, 4.256701582e-04f, 4.259157662e-04f, 4.261606208e-04f, 4.264047218e-04f, 4.266480687e-04f, 4.268906613e-04f, 4.271324990e-04f,
-4.273735816e-04f, 4.276139087e-04f, 4.278534800e-04f, 4.280922950e-04f, 4.283303533e-04f, 4.285676548e-04f, 4.288041989e-04f, 4.290399854e-04f, 4.292750138e-04f, 4.295092839e-04f,
-4.297427952e-04f, 4.299755474e-04f, 4.302075402e-04f, 4.304387733e-04f, 4.306692462e-04f, 4.308989586e-04f, 4.311279102e-04f, 4.313561006e-04f, 4.315835296e-04f, 4.318101967e-04f,
-4.320361016e-04f, 4.322612440e-04f, 4.324856235e-04f, 4.327092398e-04f, 4.329320926e-04f, 4.331541816e-04f, 4.333755064e-04f, 4.335960666e-04f, 4.338158620e-04f, 4.340348922e-04f,
-4.342531569e-04f, 4.344706558e-04f, 4.346873885e-04f, 4.349033548e-04f, 4.351185543e-04f, 4.353329866e-04f, 4.355466515e-04f, 4.357595487e-04f, 4.359716779e-04f, 4.361830386e-04f,
-4.363936307e-04f, 4.366034537e-04f, 4.368125075e-04f, 4.370207916e-04f, 4.372283059e-04f, 4.374350499e-04f, 4.376410233e-04f, 4.378462260e-04f, 4.380506575e-04f, 4.382543175e-04f,
-4.384572058e-04f, 4.386593221e-04f, 4.388606661e-04f, 4.390612374e-04f, 4.392610359e-04f, 4.394600611e-04f, 4.396583128e-04f, 4.398557907e-04f, 4.400524946e-04f, 4.402484241e-04f,
-4.404435789e-04f, 4.406379588e-04f, 4.408315635e-04f, 4.410243927e-04f, 4.412164461e-04f, 4.414077235e-04f, 4.415982245e-04f, 4.417879490e-04f, 4.419768965e-04f, 4.421650669e-04f,
-4.423524599e-04f, 4.425390752e-04f, 4.427249125e-04f, 4.429099716e-04f, 4.430942522e-04f, 4.432777540e-04f, 4.434604768e-04f, 4.436424203e-04f, 4.438235842e-04f, 4.440039684e-04f,
-4.441835725e-04f, 4.443623962e-04f, 4.445404394e-04f, 4.447177018e-04f, 4.448941831e-04f, 4.450698830e-04f, 4.452448013e-04f, 4.454189378e-04f, 4.455922923e-04f, 4.457648644e-04f,
-4.459366539e-04f, 4.461076606e-04f, 4.462778843e-04f, 4.464473247e-04f, 4.466159815e-04f, 4.467838546e-04f, 4.469509437e-04f, 4.471172485e-04f, 4.472827688e-04f, 4.474475045e-04f,
-4.476114552e-04f, 4.477746207e-04f, 4.479370009e-04f, 4.480985954e-04f, 4.482594041e-04f, 4.484194267e-04f, 4.485786630e-04f, 4.487371128e-04f, 4.488947758e-04f, 4.490516520e-04f,
-4.492077409e-04f, 4.493630425e-04f, 4.495175564e-04f, 4.496712826e-04f, 4.498242208e-04f, 4.499763707e-04f, 4.501277321e-04f, 4.502783050e-04f, 4.504280889e-04f, 4.505770838e-04f,
-4.507252895e-04f, 4.508727057e-04f, 4.510193322e-04f, 4.511651689e-04f, 4.513102155e-04f, 4.514544719e-04f, 4.515979378e-04f, 4.517406131e-04f, 4.518824975e-04f, 4.520235909e-04f,
-4.521638931e-04f, 4.523034039e-04f, 4.524421232e-04f, 4.525800506e-04f, 4.527171861e-04f, 4.528535294e-04f, 4.529890805e-04f, 4.531238390e-04f, 4.532578048e-04f, 4.533909778e-04f,
-4.535233578e-04f, 4.536549445e-04f, 4.537857379e-04f, 4.539157378e-04f, 4.540449439e-04f, 4.541733561e-04f, 4.543009743e-04f, 4.544277983e-04f, 4.545538278e-04f, 4.546790629e-04f,
-4.548035032e-04f, 4.549271486e-04f, 4.550499991e-04f, 4.551720543e-04f, 4.552933142e-04f, 4.554137786e-04f, 4.555334474e-04f, 4.556523204e-04f, 4.557703974e-04f, 4.558876783e-04f,
-4.560041630e-04f, 4.561198513e-04f, 4.562347430e-04f, 4.563488381e-04f, 4.564621363e-04f, 4.565746376e-04f, 4.566863417e-04f, 4.567972487e-04f, 4.569073582e-04f, 4.570166702e-04f,
-4.571251846e-04f, 4.572329012e-04f, 4.573398199e-04f, 4.574459406e-04f, 4.575512631e-04f, 4.576557873e-04f, 4.577595131e-04f, 4.578624403e-04f, 4.579645689e-04f, 4.580658986e-04f,
-4.581664295e-04f, 4.582661613e-04f, 4.583650940e-04f, 4.584632275e-04f, 4.585605615e-04f, 4.586570961e-04f, 4.587528311e-04f, 4.588477663e-04f, 4.589419018e-04f, 4.590352373e-04f,
-4.591277728e-04f, 4.592195082e-04f, 4.593104433e-04f, 4.594005780e-04f, 4.594899124e-04f, 4.595784462e-04f, 4.596661793e-04f, 4.597531118e-04f, 4.598392434e-04f, 4.599245740e-04f,
-4.600091037e-04f, 4.600928322e-04f, 4.601757596e-04f, 4.602578857e-04f, 4.603392104e-04f, 4.604197336e-04f, 4.604994553e-04f, 4.605783754e-04f, 4.606564938e-04f, 4.607338104e-04f,
-4.608103252e-04f, 4.608860380e-04f, 4.609609488e-04f, 4.610350576e-04f, 4.611083641e-04f, 4.611808685e-04f, 4.612525705e-04f, 4.613234702e-04f, 4.613935674e-04f, 4.614628621e-04f,
-4.615313543e-04f, 4.615990439e-04f, 4.616659307e-04f, 4.617320148e-04f, 4.617972961e-04f, 4.618617746e-04f, 4.619254501e-04f, 4.619883226e-04f, 4.620503922e-04f, 4.621116586e-04f,
-4.621721219e-04f, 4.622317821e-04f, 4.622906390e-04f, 4.623486926e-04f, 4.624059429e-04f, 4.624623899e-04f, 4.625180334e-04f, 4.625728735e-04f, 4.626269102e-04f, 4.626801433e-04f,
-4.627325728e-04f, 4.627841988e-04f, 4.628350211e-04f, 4.628850398e-04f, 4.629342548e-04f, 4.629826661e-04f, 4.630302736e-04f, 4.630770774e-04f, 4.631230773e-04f, 4.631682735e-04f,
-4.632126658e-04f, 4.632562542e-04f, 4.632990387e-04f, 4.633410194e-04f, 4.633821961e-04f, 4.634225689e-04f, 4.634621378e-04f, 4.635009026e-04f, 4.635388636e-04f, 4.635760205e-04f,
-4.636123734e-04f, 4.636479223e-04f, 4.636826673e-04f, 4.637166082e-04f, 4.637497451e-04f, 4.637820780e-04f, 4.638136069e-04f, 4.638443318e-04f, 4.638742526e-04f, 4.639033695e-04f,
-4.639316823e-04f, 4.639591912e-04f, 4.639858961e-04f, 4.640117970e-04f, 4.640368939e-04f, 4.640611869e-04f, 4.640846759e-04f, 4.641073611e-04f, 4.641292423e-04f, 4.641503196e-04f,
-4.641705930e-04f, 4.641900626e-04f, 4.642087284e-04f, 4.642265904e-04f, 4.642436486e-04f, 4.642599030e-04f, 4.642753537e-04f, 4.642900007e-04f, 4.643038441e-04f, 4.643168838e-04f,
-4.643291199e-04f, 4.643405524e-04f, 4.643511815e-04f, 4.643610070e-04f, 4.643700290e-04f, 4.643782477e-04f, 4.643856630e-04f, 4.643922749e-04f, 4.643980836e-04f, 4.644030890e-04f,
-4.644072912e-04f, 4.644106903e-04f, 4.644132863e-04f, 4.644150792e-04f, 4.644160691e-04f, 4.644162561e-04f, 4.644156403e-04f, 4.644142216e-04f, 4.644120001e-04f, 4.644089759e-04f,
-4.644051491e-04f, 4.644005197e-04f, 4.643950877e-04f, 4.643888533e-04f, 4.643818166e-04f, 4.643739775e-04f, 4.643653361e-04f, 4.643558926e-04f, 4.643456469e-04f, 4.643345992e-04f,
-4.643227496e-04f, 4.643100980e-04f, 4.642966447e-04f, 4.642823896e-04f, 4.642673329e-04f, 4.642514746e-04f, 4.642348148e-04f, 4.642173536e-04f, 4.641990911e-04f, 4.641800274e-04f,
-4.641601625e-04f, 4.641394966e-04f, 4.641180297e-04f, 4.640957619e-04f, 4.640726934e-04f, 4.640488242e-04f, 4.640241545e-04f, 4.639986842e-04f, 4.639724136e-04f, 4.639453426e-04f,
-4.639174715e-04f, 4.638888004e-04f, 4.638593292e-04f, 4.638290582e-04f, 4.637979874e-04f, 4.637661170e-04f, 4.637334471e-04f, 4.636999777e-04f, 4.636657090e-04f, 4.636306411e-04f,
-4.635947741e-04f, 4.635581082e-04f, 4.635206434e-04f, 4.634823799e-04f, 4.634433178e-04f, 4.634034572e-04f, 4.633627983e-04f, 4.633213411e-04f, 4.632790858e-04f, 4.632360326e-04f,
-4.631921815e-04f, 4.631475327e-04f, 4.631020863e-04f, 4.630558425e-04f, 4.630088013e-04f, 4.629609630e-04f, 4.629123276e-04f, 4.628628954e-04f, 4.628126664e-04f, 4.627616407e-04f,
-4.627098186e-04f, 4.626572002e-04f, 4.626037856e-04f, 4.625495749e-04f, 4.624945684e-04f, 4.624387661e-04f, 4.623821683e-04f, 4.623247750e-04f, 4.622665864e-04f, 4.622076028e-04f,
-4.621478241e-04f, 4.620872507e-04f, 4.620258826e-04f, 4.619637200e-04f, 4.619007632e-04f, 4.618370121e-04f, 4.617724671e-04f, 4.617071282e-04f, 4.616409957e-04f, 4.615740697e-04f,
-4.615063504e-04f, 4.614378379e-04f, 4.613685325e-04f, 4.612984342e-04f, 4.612275434e-04f, 4.611558601e-04f, 4.610833846e-04f, 4.610101169e-04f, 4.609360574e-04f, 4.608612061e-04f,
-4.607855633e-04f, 4.607091292e-04f, 4.606319039e-04f, 4.605538876e-04f, 4.604750805e-04f, 4.603954829e-04f, 4.603150948e-04f, 4.602339166e-04f, 4.601519483e-04f, 4.600691902e-04f,
-4.599856425e-04f, 4.599013054e-04f, 4.598161791e-04f, 4.597302638e-04f, 4.596435596e-04f, 4.595560668e-04f, 4.594677857e-04f, 4.593787163e-04f, 4.592888590e-04f, 4.591982138e-04f,
-4.591067812e-04f, 4.590145611e-04f, 4.589215540e-04f, 4.588277599e-04f, 4.587331791e-04f, 4.586378118e-04f, 4.585416582e-04f, 4.584447186e-04f, 4.583469932e-04f, 4.582484822e-04f,
-4.581491858e-04f, 4.580491043e-04f, 4.579482378e-04f, 4.578465866e-04f, 4.577441510e-04f, 4.576409312e-04f, 4.575369273e-04f, 4.574321397e-04f, 4.573265686e-04f, 4.572202141e-04f,
-4.571130766e-04f, 4.570051563e-04f, 4.568964534e-04f, 4.567869682e-04f, 4.566767009e-04f, 4.565656518e-04f, 4.564538210e-04f, 4.563412090e-04f, 4.562278158e-04f, 4.561136417e-04f,
-4.559986871e-04f, 4.558829521e-04f, 4.557664371e-04f, 4.556491422e-04f, 4.555310677e-04f, 4.554122139e-04f, 4.552925810e-04f, 4.551721693e-04f, 4.550509791e-04f, 4.549290107e-04f,
-4.548062642e-04f, 4.546827400e-04f, 4.545584383e-04f, 4.544333594e-04f, 4.543075035e-04f, 4.541808710e-04f, 4.540534621e-04f, 4.539252771e-04f, 4.537963162e-04f, 4.536665798e-04f,
-4.535360681e-04f, 4.534047814e-04f, 4.532727199e-04f, 4.531398840e-04f, 4.530062740e-04f, 4.528718900e-04f, 4.527367325e-04f, 4.526008017e-04f, 4.524640978e-04f, 4.523266213e-04f,
-4.521883723e-04f, 4.520493511e-04f, 4.519095582e-04f, 4.517689936e-04f, 4.516276578e-04f, 4.514855511e-04f, 4.513426737e-04f, 4.511990259e-04f, 4.510546081e-04f, 4.509094205e-04f,
-4.507634635e-04f, 4.506167373e-04f, 4.504692423e-04f, 4.503209788e-04f, 4.501719471e-04f, 4.500221474e-04f, 4.498715802e-04f, 4.497202457e-04f, 4.495681442e-04f, 4.494152761e-04f,
-4.492616416e-04f, 4.491072411e-04f, 4.489520749e-04f, 4.487961434e-04f, 4.486394468e-04f, 4.484819855e-04f, 4.483237598e-04f, 4.481647700e-04f, 4.480050165e-04f, 4.478444995e-04f,
-4.476832195e-04f, 4.475211767e-04f, 4.473583715e-04f, 4.471948042e-04f, 4.470304752e-04f, 4.468653847e-04f, 4.466995332e-04f, 4.465329209e-04f, 4.463655483e-04f, 4.461974156e-04f,
-4.460285232e-04f, 4.458588714e-04f, 4.456884606e-04f, 4.455172911e-04f, 4.453453633e-04f, 4.451726776e-04f, 4.449992342e-04f, 4.448250336e-04f, 4.446500760e-04f, 4.444743619e-04f,
-4.442978916e-04f, 4.441206654e-04f, 4.439426837e-04f, 4.437639470e-04f, 4.435844554e-04f, 4.434042095e-04f, 4.432232095e-04f, 4.430414558e-04f, 4.428589489e-04f, 4.426756890e-04f,
-4.424916765e-04f, 4.423069118e-04f, 4.421213953e-04f, 4.419351274e-04f, 4.417481084e-04f, 4.415603386e-04f, 4.413718186e-04f, 4.411825486e-04f, 4.409925290e-04f, 4.408017602e-04f,
-4.406102427e-04f, 4.404179767e-04f, 4.402249626e-04f, 4.400312009e-04f, 4.398366920e-04f, 4.396414361e-04f, 4.394454338e-04f, 4.392486854e-04f, 4.390511912e-04f, 4.388529518e-04f,
-4.386539674e-04f, 4.384542385e-04f, 4.382537655e-04f, 4.380525487e-04f, 4.378505887e-04f, 4.376478857e-04f, 4.374444401e-04f, 4.372402525e-04f, 4.370353231e-04f, 4.368296524e-04f,
-4.366232408e-04f, 4.364160887e-04f, 4.362081966e-04f, 4.359995647e-04f, 4.357901936e-04f, 4.355800836e-04f, 4.353692352e-04f, 4.351576488e-04f, 4.349453248e-04f, 4.347322636e-04f,
-4.345184656e-04f, 4.343039313e-04f, 4.340886611e-04f, 4.338726553e-04f, 4.336559145e-04f, 4.334384391e-04f, 4.332202294e-04f, 4.330012859e-04f, 4.327816091e-04f, 4.325611993e-04f,
-4.323400570e-04f, 4.321181827e-04f, 4.318955767e-04f, 4.316722395e-04f, 4.314481716e-04f, 4.312233733e-04f, 4.309978452e-04f, 4.307715876e-04f, 4.305446010e-04f, 4.303168859e-04f,
-4.300884426e-04f, 4.298592717e-04f, 4.296293736e-04f, 4.293987486e-04f, 4.291673974e-04f, 4.289353203e-04f, 4.287025177e-04f, 4.284689902e-04f, 4.282347382e-04f, 4.279997621e-04f,
-4.277640625e-04f, 4.275276396e-04f, 4.272904941e-04f, 4.270526264e-04f, 4.268140369e-04f, 4.265747261e-04f, 4.263346945e-04f, 4.260939425e-04f, 4.258524705e-04f, 4.256102792e-04f,
-4.253673689e-04f, 4.251237400e-04f, 4.248793932e-04f, 4.246343288e-04f, 4.243885473e-04f, 4.241420492e-04f, 4.238948349e-04f, 4.236469050e-04f, 4.233982600e-04f, 4.231489002e-04f,
-4.228988262e-04f, 4.226480385e-04f, 4.223965376e-04f, 4.221443238e-04f, 4.218913978e-04f, 4.216377600e-04f, 4.213834109e-04f, 4.211283510e-04f, 4.208725807e-04f, 4.206161006e-04f,
-4.203589112e-04f, 4.201010129e-04f, 4.198424063e-04f, 4.195830918e-04f, 4.193230700e-04f, 4.190623413e-04f, 4.188009062e-04f, 4.185387653e-04f, 4.182759190e-04f, 4.180123678e-04f,
-4.177481124e-04f, 4.174831530e-04f, 4.172174904e-04f, 4.169511249e-04f, 4.166840571e-04f, 4.164162874e-04f, 4.161478165e-04f, 4.158786448e-04f, 4.156087729e-04f, 4.153382011e-04f,
-4.150669302e-04f, 4.147949605e-04f, 4.145222926e-04f, 4.142489271e-04f, 4.139748643e-04f, 4.137001050e-04f, 4.134246495e-04f, 4.131484985e-04f, 4.128716523e-04f, 4.125941117e-04f,
-4.123158770e-04f, 4.120369489e-04f, 4.117573278e-04f, 4.114770142e-04f, 4.111960089e-04f, 4.109143121e-04f, 4.106319245e-04f, 4.103488467e-04f, 4.100650791e-04f, 4.097806223e-04f,
-4.094954769e-04f, 4.092096433e-04f, 4.089231222e-04f, 4.086359140e-04f, 4.083480193e-04f, 4.080594387e-04f, 4.077701726e-04f, 4.074802217e-04f, 4.071895866e-04f, 4.068982676e-04f,
-4.066062655e-04f, 4.063135807e-04f, 4.060202138e-04f, 4.057261654e-04f, 4.054314360e-04f, 4.051360261e-04f, 4.048399364e-04f, 4.045431674e-04f, 4.042457196e-04f, 4.039475936e-04f,
-4.036487900e-04f, 4.033493094e-04f, 4.030491522e-04f, 4.027483191e-04f, 4.024468106e-04f, 4.021446274e-04f, 4.018417699e-04f, 4.015382388e-04f, 4.012340345e-04f, 4.009291578e-04f,
-4.006236091e-04f, 4.003173891e-04f, 4.000104982e-04f, 3.997029372e-04f, 3.993947065e-04f, 3.990858068e-04f, 3.987762386e-04f, 3.984660025e-04f, 3.981550991e-04f, 3.978435290e-04f,
-3.975312927e-04f, 3.972183909e-04f, 3.969048241e-04f, 3.965905929e-04f, 3.962756980e-04f, 3.959601399e-04f, 3.956439191e-04f, 3.953270364e-04f, 3.950094922e-04f, 3.946912872e-04f,
-3.943724219e-04f, 3.940528971e-04f, 3.937327132e-04f, 3.934118709e-04f, 3.930903707e-04f, 3.927682133e-04f, 3.924453993e-04f, 3.921219293e-04f, 3.917978038e-04f, 3.914730236e-04f,
-3.911475891e-04f, 3.908215010e-04f, 3.904947600e-04f, 3.901673666e-04f, 3.898393214e-04f, 3.895106250e-04f, 3.891812781e-04f, 3.888512813e-04f, 3.885206352e-04f, 3.881893403e-04f,
-3.878573974e-04f, 3.875248071e-04f, 3.871915699e-04f, 3.868576865e-04f, 3.865231575e-04f, 3.861879835e-04f, 3.858521652e-04f, 3.855157032e-04f, 3.851785981e-04f, 3.848408505e-04f,
-3.845024611e-04f, 3.841634305e-04f, 3.838237593e-04f, 3.834834481e-04f, 3.831424976e-04f, 3.828009085e-04f, 3.824586813e-04f, 3.821158167e-04f, 3.817723154e-04f, 3.814281779e-04f,
-3.810834049e-04f, 3.807379971e-04f, 3.803919551e-04f, 3.800452795e-04f, 3.796979709e-04f, 3.793500301e-04f, 3.790014577e-04f, 3.786522543e-04f, 3.783024205e-04f, 3.779519570e-04f,
-3.776008645e-04f, 3.772491437e-04f, 3.768967950e-04f, 3.765438193e-04f, 3.761902172e-04f, 3.758359893e-04f, 3.754811362e-04f, 3.751256587e-04f, 3.747695574e-04f, 3.744128330e-04f,
-3.740554860e-04f, 3.736975172e-04f, 3.733389273e-04f, 3.729797169e-04f, 3.726198866e-04f, 3.722594372e-04f, 3.718983693e-04f, 3.715366835e-04f, 3.711743805e-04f, 3.708114611e-04f,
-3.704479258e-04f, 3.700837754e-04f, 3.697190105e-04f, 3.693536318e-04f, 3.689876399e-04f, 3.686210356e-04f, 3.682538195e-04f, 3.678859923e-04f, 3.675175547e-04f, 3.671485073e-04f,
-3.667788508e-04f, 3.664085860e-04f, 3.660377134e-04f, 3.656662339e-04f, 3.652941480e-04f, 3.649214564e-04f, 3.645481599e-04f, 3.641742591e-04f, 3.637997547e-04f, 3.634246474e-04f,
-3.630489379e-04f, 3.626726269e-04f, 3.622957151e-04f, 3.619182031e-04f, 3.615400917e-04f, 3.611613816e-04f, 3.607820734e-04f, 3.604021679e-04f, 3.600216657e-04f, 3.596405676e-04f,
-3.592588742e-04f, 3.588765863e-04f, 3.584937045e-04f, 3.581102296e-04f, 3.577261623e-04f, 3.573415032e-04f, 3.569562531e-04f, 3.565704127e-04f, 3.561839827e-04f, 3.557969637e-04f,
-3.554093566e-04f, 3.550211620e-04f, 3.546323806e-04f, 3.542430132e-04f, 3.538530605e-04f, 3.534625231e-04f, 3.530714018e-04f, 3.526796973e-04f, 3.522874103e-04f, 3.518945416e-04f,
-3.515010918e-04f, 3.511070618e-04f, 3.507124521e-04f, 3.503172636e-04f, 3.499214969e-04f, 3.495251528e-04f, 3.491282320e-04f, 3.487307352e-04f, 3.483326632e-04f, 3.479340166e-04f,
-3.475347963e-04f, 3.471350029e-04f, 3.467346372e-04f, 3.463336999e-04f, 3.459321918e-04f, 3.455301135e-04f, 3.451274658e-04f, 3.447242495e-04f, 3.443204653e-04f, 3.439161139e-04f,
-3.435111960e-04f, 3.431057124e-04f, 3.426996639e-04f, 3.422930512e-04f, 3.418858749e-04f, 3.414781360e-04f, 3.410698350e-04f, 3.406609728e-04f, 3.402515501e-04f, 3.398415677e-04f,
-3.394310262e-04f, 3.390199265e-04f, 3.386082693e-04f, 3.381960553e-04f, 3.377832853e-04f, 3.373699601e-04f, 3.369560804e-04f, 3.365416469e-04f, 3.361266605e-04f, 3.357111218e-04f,
-3.352950316e-04f, 3.348783907e-04f, 3.344611999e-04f, 3.340434598e-04f, 3.336251713e-04f, 3.332063352e-04f, 3.327869521e-04f, 3.323670229e-04f, 3.319465482e-04f, 3.315255290e-04f,
-3.311039659e-04f, 3.306818597e-04f, 3.302592112e-04f, 3.298360211e-04f, 3.294122903e-04f, 3.289880194e-04f, 3.285632093e-04f, 3.281378607e-04f, 3.277119744e-04f, 3.272855512e-04f,
-3.268585918e-04f, 3.264310971e-04f, 3.260030678e-04f, 3.255745046e-04f, 3.251454084e-04f, 3.247157800e-04f, 3.242856200e-04f, 3.238549294e-04f, 3.234237088e-04f, 3.229919591e-04f,
-3.225596811e-04f, 3.221268754e-04f, 3.216935430e-04f, 3.212596846e-04f, 3.208253010e-04f, 3.203903929e-04f, 3.199549612e-04f, 3.195190067e-04f, 3.190825301e-04f, 3.186455322e-04f,
-3.182080139e-04f, 3.177699759e-04f, 3.173314189e-04f, 3.168923439e-04f, 3.164527516e-04f, 3.160126428e-04f, 3.155720183e-04f, 3.151308789e-04f, 3.146892254e-04f, 3.142470585e-04f,
-3.138043792e-04f, 3.133611881e-04f, 3.129174862e-04f, 3.124732741e-04f, 3.120285528e-04f, 3.115833229e-04f, 3.111375854e-04f, 3.106913409e-04f, 3.102445904e-04f, 3.097973346e-04f,
-3.093495744e-04f, 3.089013105e-04f, 3.084525438e-04f, 3.080032750e-04f, 3.075535050e-04f, 3.071032346e-04f, 3.066524646e-04f, 3.062011959e-04f, 3.057494291e-04f, 3.052971653e-04f,
-3.048444050e-04f, 3.043911493e-04f, 3.039373989e-04f, 3.034831546e-04f, 3.030284173e-04f, 3.025731877e-04f, 3.021174667e-04f, 3.016612551e-04f, 3.012045537e-04f, 3.007473634e-04f,
-3.002896850e-04f, 2.998315193e-04f, 2.993728671e-04f, 2.989137292e-04f, 2.984541066e-04f, 2.979939999e-04f, 2.975334102e-04f, 2.970723380e-04f, 2.966107844e-04f, 2.961487501e-04f,
-2.956862360e-04f, 2.952232429e-04f, 2.947597716e-04f, 2.942958230e-04f, 2.938313979e-04f, 2.933664971e-04f, 2.929011215e-04f, 2.924352720e-04f, 2.919689492e-04f, 2.915021542e-04f,
-2.910348877e-04f, 2.905671506e-04f, 2.900989437e-04f, 2.896302679e-04f, 2.891611239e-04f, 2.886915127e-04f, 2.882214351e-04f, 2.877508919e-04f, 2.872798840e-04f, 2.868084123e-04f,
-2.863364775e-04f, 2.858640805e-04f, 2.853912222e-04f, 2.849179035e-04f, 2.844441251e-04f, 2.839698879e-04f, 2.834951928e-04f, 2.830200406e-04f, 2.825444322e-04f, 2.820683685e-04f,
-2.815918502e-04f, 2.811148783e-04f, 2.806374536e-04f, 2.801595769e-04f, 2.796812492e-04f, 2.792024713e-04f, 2.787232439e-04f, 2.782435681e-04f, 2.777634446e-04f, 2.772828744e-04f,
-2.768018582e-04f, 2.763203970e-04f, 2.758384916e-04f, 2.753561428e-04f, 2.748733516e-04f, 2.743901188e-04f, 2.739064452e-04f, 2.734223318e-04f, 2.729377794e-04f, 2.724527888e-04f,
-2.719673610e-04f, 2.714814968e-04f, 2.709951971e-04f, 2.705084627e-04f, 2.700212946e-04f, 2.695336935e-04f, 2.690456604e-04f, 2.685571962e-04f, 2.680683017e-04f, 2.675789777e-04f,
-2.670892253e-04f, 2.665990452e-04f, 2.661084383e-04f, 2.656174055e-04f, 2.651259477e-04f, 2.646340657e-04f, 2.641417605e-04f, 2.636490329e-04f, 2.631558838e-04f, 2.626623141e-04f,
-2.621683246e-04f, 2.616739163e-04f, 2.611790901e-04f, 2.606838467e-04f, 2.601881872e-04f, 2.596921123e-04f, 2.591956230e-04f, 2.586987202e-04f, 2.582014047e-04f, 2.577036775e-04f,
-2.572055394e-04f, 2.567069913e-04f, 2.562080342e-04f, 2.557086688e-04f, 2.552088961e-04f, 2.547087170e-04f, 2.542081324e-04f, 2.537071432e-04f, 2.532057502e-04f, 2.527039544e-04f,
-2.522017566e-04f, 2.516991579e-04f, 2.511961589e-04f, 2.506927607e-04f, 2.501889642e-04f, 2.496847702e-04f, 2.491801796e-04f, 2.486751934e-04f, 2.481698124e-04f, 2.476640376e-04f,
-2.471578698e-04f, 2.466513100e-04f, 2.461443591e-04f, 2.456370179e-04f, 2.451292873e-04f, 2.446211683e-04f, 2.441126618e-04f, 2.436037687e-04f, 2.430944899e-04f, 2.425848263e-04f,
-2.420747787e-04f, 2.415643482e-04f, 2.410535356e-04f, 2.405423419e-04f, 2.400307679e-04f, 2.395188145e-04f, 2.390064827e-04f, 2.384937733e-04f, 2.379806874e-04f, 2.374672258e-04f,
-2.369533894e-04f, 2.364391791e-04f, 2.359245958e-04f, 2.354096405e-04f, 2.348943141e-04f, 2.343786175e-04f, 2.338625516e-04f, 2.333461174e-04f, 2.328293157e-04f, 2.323121474e-04f,
-2.317946136e-04f, 2.312767150e-04f, 2.307584527e-04f, 2.302398276e-04f, 2.297208405e-04f, 2.292014924e-04f, 2.286817842e-04f, 2.281617169e-04f, 2.276412913e-04f, 2.271205084e-04f,
-2.265993692e-04f, 2.260778745e-04f, 2.255560252e-04f, 2.250338224e-04f, 2.245112669e-04f, 2.239883596e-04f, 2.234651015e-04f, 2.229414936e-04f, 2.224175366e-04f, 2.218932317e-04f,
-2.213685796e-04f, 2.208435814e-04f, 2.203182380e-04f, 2.197925502e-04f, 2.192665191e-04f, 2.187401455e-04f, 2.182134304e-04f, 2.176863748e-04f, 2.171589795e-04f, 2.166312456e-04f,
-2.161031738e-04f, 2.155747653e-04f, 2.150460209e-04f, 2.145169415e-04f, 2.139875281e-04f, 2.134577816e-04f, 2.129277030e-04f, 2.123972932e-04f, 2.118665532e-04f, 2.113354838e-04f,
-2.108040861e-04f, 2.102723609e-04f, 2.097403093e-04f, 2.092079321e-04f, 2.086752303e-04f, 2.081422049e-04f, 2.076088567e-04f, 2.070751868e-04f, 2.065411960e-04f, 2.060068854e-04f,
-2.054722558e-04f, 2.049373083e-04f, 2.044020437e-04f, 2.038664630e-04f, 2.033305672e-04f, 2.027943572e-04f, 2.022578340e-04f, 2.017209984e-04f, 2.011838515e-04f, 2.006463943e-04f,
-2.001086275e-04f, 1.995705523e-04f, 1.990321696e-04f, 1.984934802e-04f, 1.979544853e-04f, 1.974151856e-04f, 1.968755822e-04f, 1.963356761e-04f, 1.957954681e-04f, 1.952549592e-04f,
-1.947141505e-04f, 1.941730428e-04f, 1.936316371e-04f, 1.930899344e-04f, 1.925479356e-04f, 1.920056416e-04f, 1.914630535e-04f, 1.909201722e-04f, 1.903769987e-04f, 1.898335338e-04f,
-1.892897787e-04f, 1.887457341e-04f, 1.882014012e-04f, 1.876567808e-04f, 1.871118740e-04f, 1.865666816e-04f, 1.860212046e-04f, 1.854754441e-04f, 1.849294009e-04f, 1.843830761e-04f,
-1.838364705e-04f, 1.832895853e-04f, 1.827424212e-04f, 1.821949794e-04f, 1.816472607e-04f, 1.810992661e-04f, 1.805509966e-04f, 1.800024532e-04f, 1.794536368e-04f, 1.789045484e-04f,
-1.783551889e-04f, 1.778055594e-04f, 1.772556608e-04f, 1.767054941e-04f, 1.761550602e-04f, 1.756043601e-04f, 1.750533948e-04f, 1.745021652e-04f, 1.739506724e-04f, 1.733989173e-04f,
-1.728469008e-04f, 1.722946240e-04f, 1.717420878e-04f, 1.711892932e-04f, 1.706362411e-04f, 1.700829326e-04f, 1.695293686e-04f, 1.689755501e-04f, 1.684214780e-04f, 1.678671534e-04f,
-1.673125772e-04f, 1.667577503e-04f, 1.662026739e-04f, 1.656473488e-04f, 1.650917760e-04f, 1.645359565e-04f, 1.639798913e-04f, 1.634235813e-04f, 1.628670276e-04f, 1.623102311e-04f,
-1.617531928e-04f, 1.611959136e-04f, 1.606383947e-04f, 1.600806368e-04f, 1.595226411e-04f, 1.589644084e-04f, 1.584059399e-04f, 1.578472364e-04f, 1.572882990e-04f, 1.567291285e-04f,
-1.561697261e-04f, 1.556100927e-04f, 1.550502293e-04f, 1.544901368e-04f, 1.539298163e-04f, 1.533692687e-04f, 1.528084950e-04f, 1.522474962e-04f, 1.516862733e-04f, 1.511248273e-04f,
-1.505631591e-04f, 1.500012698e-04f, 1.494391603e-04f, 1.488768317e-04f, 1.483142848e-04f, 1.477515208e-04f, 1.471885405e-04f, 1.466253450e-04f, 1.460619353e-04f, 1.454983123e-04f,
-1.449344770e-04f, 1.443704305e-04f, 1.438061737e-04f, 1.432417077e-04f, 1.426770333e-04f, 1.421121516e-04f, 1.415470636e-04f, 1.409817703e-04f, 1.404162726e-04f, 1.398505716e-04f,
-1.392846682e-04f, 1.387185635e-04f, 1.381522585e-04f, 1.375857540e-04f, 1.370190512e-04f, 1.364521510e-04f, 1.358850544e-04f, 1.353177625e-04f, 1.347502761e-04f, 1.341825963e-04f,
-1.336147241e-04f, 1.330466605e-04f, 1.324784065e-04f, 1.319099630e-04f, 1.313413311e-04f, 1.307725118e-04f, 1.302035061e-04f, 1.296343149e-04f, 1.290649393e-04f, 1.284953802e-04f,
-1.279256387e-04f, 1.273557158e-04f, 1.267856124e-04f, 1.262153295e-04f, 1.256448682e-04f, 1.250742295e-04f, 1.245034143e-04f, 1.239324236e-04f, 1.233612585e-04f, 1.227899199e-04f,
-1.222184089e-04f, 1.216467264e-04f, 1.210748735e-04f, 1.205028511e-04f, 1.199306603e-04f, 1.193583020e-04f, 1.187857772e-04f, 1.182130871e-04f, 1.176402324e-04f, 1.170672143e-04f,
-1.164940338e-04f, 1.159206919e-04f, 1.153471895e-04f, 1.147735276e-04f, 1.141997074e-04f, 1.136257297e-04f, 1.130515956e-04f, 1.124773060e-04f, 1.119028621e-04f, 1.113282647e-04f,
-1.107535150e-04f, 1.101786138e-04f, 1.096035622e-04f, 1.090283612e-04f, 1.084530119e-04f, 1.078775151e-04f, 1.073018720e-04f, 1.067260835e-04f, 1.061501507e-04f, 1.055740744e-04f,
-1.049978559e-04f, 1.044214959e-04f, 1.038449957e-04f, 1.032683561e-04f, 1.026915781e-04f, 1.021146629e-04f, 1.015376113e-04f, 1.009604244e-04f, 1.003831033e-04f, 9.980564878e-05f,
-9.922806203e-05f, 9.865034400e-05f, 9.807249570e-05f, 9.749451814e-05f, 9.691641233e-05f, 9.633817928e-05f, 9.575981999e-05f, 9.518133548e-05f, 9.460272675e-05f, 9.402399481e-05f,
-9.344514068e-05f, 9.286616536e-05f, 9.228706986e-05f, 9.170785518e-05f, 9.112852235e-05f, 9.054907238e-05f, 8.996950626e-05f, 8.938982501e-05f, 8.881002965e-05f, 8.823012117e-05f,
-8.765010060e-05f, 8.706996895e-05f, 8.648972721e-05f, 8.590937642e-05f, 8.532891757e-05f, 8.474835168e-05f, 8.416767975e-05f, 8.358690281e-05f, 8.300602186e-05f, 8.242503792e-05f,
-8.184395199e-05f, 8.126276508e-05f, 8.068147822e-05f, 8.010009241e-05f, 7.951860867e-05f, 7.893702800e-05f, 7.835535142e-05f, 7.777357994e-05f, 7.719171457e-05f, 7.660975633e-05f,
-7.602770623e-05f, 7.544556529e-05f, 7.486333450e-05f, 7.428101490e-05f, 7.369860749e-05f, 7.311611328e-05f, 7.253353329e-05f, 7.195086853e-05f, 7.136812002e-05f, 7.078528877e-05f,
-7.020237578e-05f, 6.961938209e-05f, 6.903630869e-05f, 6.845315660e-05f, 6.786992684e-05f, 6.728662043e-05f, 6.670323837e-05f, 6.611978167e-05f, 6.553625136e-05f, 6.495264845e-05f,
-6.436897395e-05f, 6.378522887e-05f, 6.320141424e-05f, 6.261753105e-05f, 6.203358034e-05f, 6.144956311e-05f, 6.086548038e-05f, 6.028133316e-05f, 5.969712247e-05f, 5.911284932e-05f,
-5.852851472e-05f, 5.794411970e-05f, 5.735966526e-05f, 5.677515242e-05f, 5.619058220e-05f, 5.560595561e-05f, 5.502127366e-05f, 5.443653737e-05f, 5.385174776e-05f, 5.326690584e-05f,
-5.268201262e-05f, 5.209706912e-05f, 5.151207636e-05f, 5.092703534e-05f, 5.034194709e-05f, 4.975681262e-05f, 4.917163294e-05f, 4.858640908e-05f, 4.800114204e-05f, 4.741583283e-05f,
-4.683048249e-05f, 4.624509201e-05f, 4.565966242e-05f, 4.507419472e-05f, 4.448868995e-05f, 4.390314910e-05f, 4.331757319e-05f, 4.273196325e-05f, 4.214632028e-05f, 4.156064531e-05f,
-4.097493933e-05f, 4.038920338e-05f, 3.980343846e-05f, 3.921764559e-05f, 3.863182579e-05f, 3.804598007e-05f, 3.746010944e-05f, 3.687421492e-05f, 3.628829752e-05f, 3.570235826e-05f,
-3.511639816e-05f, 3.453041822e-05f, 3.394441947e-05f, 3.335840291e-05f, 3.277236957e-05f, 3.218632045e-05f, 3.160025658e-05f, 3.101417896e-05f, 3.042808861e-05f, 2.984198654e-05f,
-2.925587377e-05f, 2.866975131e-05f, 2.808362019e-05f, 2.749748140e-05f, 2.691133597e-05f, 2.632518490e-05f, 2.573902922e-05f, 2.515286994e-05f, 2.456670807e-05f, 2.398054462e-05f,
-2.339438061e-05f, 2.280821705e-05f, 2.222205496e-05f, 2.163589535e-05f, 2.104973923e-05f, 2.046358761e-05f, 1.987744151e-05f, 1.929130195e-05f, 1.870516993e-05f, 1.811904647e-05f,
-1.753293258e-05f, 1.694682927e-05f, 1.636073757e-05f, 1.577465847e-05f, 1.518859299e-05f, 1.460254214e-05f, 1.401650695e-05f, 1.343048841e-05f, 1.284448754e-05f, 1.225850536e-05f,
-1.167254287e-05f, 1.108660109e-05f, 1.050068103e-05f, 9.914783696e-06f, 9.328910106e-06f, 8.743061269e-06f, 8.157238198e-06f, 7.571441902e-06f, 6.985673393e-06f, 6.399933683e-06f,
-5.814223781e-06f, 5.228544699e-06f, 4.642897447e-06f, 4.057283035e-06f, 3.471702475e-06f, 2.886156775e-06f, 2.300646947e-06f, 1.715174000e-06f, 1.129738945e-06f, 5.443427897e-07f,
--4.101345511e-08f, -6.263287802e-07f, -1.211602176e-06f, -1.796832634e-06f, -2.382019146e-06f, -2.967160701e-06f, -3.552256291e-06f, -4.137304909e-06f, -4.722305545e-06f, -5.307257192e-06f,
--5.892158840e-06f, -6.477009483e-06f, -7.061808113e-06f, -7.646553721e-06f, -8.231245302e-06f, -8.815881846e-06f, -9.400462348e-06f, -9.984985799e-06f, -1.056945119e-05f, -1.115385753e-05f,
--1.173820379e-05f, -1.232248898e-05f, -1.290671208e-05f, -1.349087210e-05f, -1.407496802e-05f, -1.465899885e-05f, -1.524296357e-05f, -1.582686118e-05f, -1.641069067e-05f, -1.699445105e-05f,
--1.757814130e-05f, -1.816176043e-05f, -1.874530742e-05f, -1.932878127e-05f, -1.991218099e-05f, -2.049550556e-05f, -2.107875398e-05f, -2.166192526e-05f, -2.224501837e-05f, -2.282803234e-05f,
--2.341096614e-05f, -2.399381878e-05f, -2.457658926e-05f, -2.515927657e-05f, -2.574187971e-05f, -2.632439769e-05f, -2.690682949e-05f, -2.748917413e-05f, -2.807143059e-05f, -2.865359787e-05f,
--2.923567499e-05f, -2.981766093e-05f, -3.039955469e-05f, -3.098135529e-05f, -3.156306171e-05f, -3.214467295e-05f, -3.272618803e-05f, -3.330760593e-05f, -3.388892567e-05f, -3.447014624e-05f,
--3.505126664e-05f, -3.563228588e-05f, -3.621320296e-05f, -3.679401688e-05f, -3.737472665e-05f, -3.795533126e-05f, -3.853582972e-05f, -3.911622104e-05f, -3.969650422e-05f, -4.027667826e-05f,
--4.085674217e-05f, -4.143669495e-05f, -4.201653560e-05f, -4.259626314e-05f, -4.317587656e-05f, -4.375537488e-05f, -4.433475710e-05f, -4.491402222e-05f, -4.549316925e-05f, -4.607219720e-05f,
--4.665110508e-05f, -4.722989189e-05f, -4.780855664e-05f, -4.838709834e-05f, -4.896551599e-05f, -4.954380862e-05f, -5.012197521e-05f, -5.070001479e-05f, -5.127792636e-05f, -5.185570893e-05f,
--5.243336151e-05f, -5.301088311e-05f, -5.358827275e-05f, -5.416552943e-05f, -5.474265217e-05f, -5.531963997e-05f, -5.589649184e-05f, -5.647320681e-05f, -5.704978388e-05f, -5.762622206e-05f,
--5.820252037e-05f, -5.877867782e-05f, -5.935469343e-05f, -5.993056620e-05f, -6.050629516e-05f, -6.108187931e-05f, -6.165731767e-05f, -6.223260926e-05f, -6.280775309e-05f, -6.338274818e-05f,
--6.395759354e-05f, -6.453228820e-05f, -6.510683116e-05f, -6.568122144e-05f, -6.625545807e-05f, -6.682954005e-05f, -6.740346641e-05f, -6.797723617e-05f, -6.855084835e-05f, -6.912430196e-05f,
--6.969759602e-05f, -7.027072955e-05f, -7.084370158e-05f, -7.141651112e-05f, -7.198915719e-05f, -7.256163883e-05f, -7.313395503e-05f, -7.370610484e-05f, -7.427808727e-05f, -7.484990135e-05f,
--7.542154609e-05f, -7.599302052e-05f, -7.656432366e-05f, -7.713545455e-05f, -7.770641219e-05f, -7.827719563e-05f, -7.884780387e-05f, -7.941823596e-05f, -7.998849091e-05f, -8.055856775e-05f,
--8.112846550e-05f, -8.169818320e-05f, -8.226771988e-05f, -8.283707455e-05f, -8.340624625e-05f, -8.397523400e-05f, -8.454403684e-05f, -8.511265380e-05f, -8.568108390e-05f, -8.624932617e-05f,
--8.681737965e-05f, -8.738524336e-05f, -8.795291634e-05f, -8.852039762e-05f, -8.908768623e-05f, -8.965478121e-05f, -9.022168158e-05f, -9.078838638e-05f, -9.135489464e-05f, -9.192120540e-05f,
--9.248731769e-05f, -9.305323055e-05f, -9.361894301e-05f, -9.418445411e-05f, -9.474976288e-05f, -9.531486837e-05f, -9.587976960e-05f, -9.644446562e-05f, -9.700895546e-05f, -9.757323816e-05f,
--9.813731276e-05f, -9.870117831e-05f, -9.926483383e-05f, -9.982827837e-05f, -1.003915110e-04f, -1.009545307e-04f, -1.015173365e-04f, -1.020799275e-04f, -1.026423028e-04f, -1.032044613e-04f,
--1.037664021e-04f, -1.043281243e-04f, -1.048896269e-04f, -1.054509089e-04f, -1.060119694e-04f, -1.065728075e-04f, -1.071334221e-04f, -1.076938123e-04f, -1.082539773e-04f, -1.088139159e-04f,
--1.093736273e-04f, -1.099331105e-04f, -1.104923646e-04f, -1.110513886e-04f, -1.116101816e-04f, -1.121687425e-04f, -1.127270706e-04f, -1.132851647e-04f, -1.138430240e-04f, -1.144006475e-04f,
--1.149580343e-04f, -1.155151834e-04f, -1.160720939e-04f, -1.166287648e-04f, -1.171851952e-04f, -1.177413841e-04f, -1.182973306e-04f, -1.188530338e-04f, -1.194084927e-04f, -1.199637063e-04f,
--1.205186737e-04f, -1.210733940e-04f, -1.216278663e-04f, -1.221820895e-04f, -1.227360628e-04f, -1.232897852e-04f, -1.238432558e-04f, -1.243964736e-04f, -1.249494377e-04f, -1.255021471e-04f,
--1.260546009e-04f, -1.266067983e-04f, -1.271587381e-04f, -1.277104196e-04f, -1.282618417e-04f, -1.288130036e-04f, -1.293639043e-04f, -1.299145428e-04f, -1.304649183e-04f, -1.310150297e-04f,
--1.315648763e-04f, -1.321144569e-04f, -1.326637707e-04f, -1.332128169e-04f, -1.337615943e-04f, -1.343101022e-04f, -1.348583395e-04f, -1.354063054e-04f, -1.359539989e-04f, -1.365014191e-04f,
--1.370485651e-04f, -1.375954359e-04f, -1.381420306e-04f, -1.386883483e-04f, -1.392343880e-04f, -1.397801489e-04f, -1.403256300e-04f, -1.408708304e-04f, -1.414157491e-04f, -1.419603853e-04f,
--1.425047380e-04f, -1.430488063e-04f, -1.435925893e-04f, -1.441360860e-04f, -1.446792956e-04f, -1.452222171e-04f, -1.457648496e-04f, -1.463071921e-04f, -1.468492439e-04f, -1.473910039e-04f,
--1.479324712e-04f, -1.484736449e-04f, -1.490145241e-04f, -1.495551079e-04f, -1.500953954e-04f, -1.506353856e-04f, -1.511750777e-04f, -1.517144707e-04f, -1.522535637e-04f, -1.527923558e-04f,
--1.533308461e-04f, -1.538690337e-04f, -1.544069177e-04f, -1.549444972e-04f, -1.554817712e-04f, -1.560187389e-04f, -1.565553993e-04f, -1.570917515e-04f, -1.576277947e-04f, -1.581635279e-04f,
--1.586989502e-04f, -1.592340608e-04f, -1.597688587e-04f, -1.603033429e-04f, -1.608375127e-04f, -1.613713671e-04f, -1.619049052e-04f, -1.624381261e-04f, -1.629710290e-04f, -1.635036128e-04f,
--1.640358767e-04f, -1.645678199e-04f, -1.650994413e-04f, -1.656307402e-04f, -1.661617156e-04f, -1.666923666e-04f, -1.672226923e-04f, -1.677526919e-04f, -1.682823645e-04f, -1.688117090e-04f,
--1.693407248e-04f, -1.698694108e-04f, -1.703977661e-04f, -1.709257900e-04f, -1.714534814e-04f, -1.719808396e-04f, -1.725078635e-04f, -1.730345524e-04f, -1.735609054e-04f, -1.740869215e-04f,
--1.746125998e-04f, -1.751379395e-04f, -1.756629398e-04f, -1.761875996e-04f, -1.767119182e-04f, -1.772358946e-04f, -1.777595280e-04f, -1.782828175e-04f, -1.788057621e-04f, -1.793283611e-04f,
--1.798506136e-04f, -1.803725186e-04f, -1.808940753e-04f, -1.814152828e-04f, -1.819361402e-04f, -1.824566467e-04f, -1.829768013e-04f, -1.834966033e-04f, -1.840160517e-04f, -1.845351456e-04f,
--1.850538843e-04f, -1.855722667e-04f, -1.860902921e-04f, -1.866079596e-04f, -1.871252682e-04f, -1.876422172e-04f, -1.881588057e-04f, -1.886750327e-04f, -1.891908975e-04f, -1.897063991e-04f,
--1.902215367e-04f, -1.907363095e-04f, -1.912507165e-04f, -1.917647569e-04f, -1.922784298e-04f, -1.927917345e-04f, -1.933046699e-04f, -1.938172353e-04f, -1.943294298e-04f, -1.948412525e-04f,
--1.953527025e-04f, -1.958637791e-04f, -1.963744814e-04f, -1.968848084e-04f, -1.973947594e-04f, -1.979043335e-04f, -1.984135298e-04f, -1.989223474e-04f, -1.994307856e-04f, -1.999388435e-04f,
--2.004465202e-04f, -2.009538149e-04f, -2.014607267e-04f, -2.019672547e-04f, -2.024733982e-04f, -2.029791562e-04f, -2.034845280e-04f, -2.039895126e-04f, -2.044941093e-04f, -2.049983172e-04f,
--2.055021353e-04f, -2.060055630e-04f, -2.065085994e-04f, -2.070112435e-04f, -2.075134947e-04f, -2.080153519e-04f, -2.085168145e-04f, -2.090178814e-04f, -2.095185520e-04f, -2.100188254e-04f,
--2.105187007e-04f, -2.110181771e-04f, -2.115172538e-04f, -2.120159298e-04f, -2.125142045e-04f, -2.130120770e-04f, -2.135095463e-04f, -2.140066118e-04f, -2.145032725e-04f, -2.149995277e-04f,
--2.154953764e-04f, -2.159908179e-04f, -2.164858514e-04f, -2.169804760e-04f, -2.174746909e-04f, -2.179684952e-04f, -2.184618882e-04f, -2.189548690e-04f, -2.194474368e-04f, -2.199395908e-04f,
--2.204313301e-04f, -2.209226539e-04f, -2.214135614e-04f, -2.219040519e-04f, -2.223941243e-04f, -2.228837781e-04f, -2.233730122e-04f, -2.238618260e-04f, -2.243502186e-04f, -2.248381892e-04f,
--2.253257369e-04f, -2.258128610e-04f, -2.262995606e-04f, -2.267858350e-04f, -2.272716832e-04f, -2.277571046e-04f, -2.282420983e-04f, -2.287266635e-04f, -2.292107994e-04f, -2.296945051e-04f,
--2.301777799e-04f, -2.306606230e-04f, -2.311430335e-04f, -2.316250107e-04f, -2.321065537e-04f, -2.325876618e-04f, -2.330683341e-04f, -2.335485699e-04f, -2.340283683e-04f, -2.345077286e-04f,
--2.349866499e-04f, -2.354651315e-04f, -2.359431726e-04f, -2.364207723e-04f, -2.368979298e-04f, -2.373746445e-04f, -2.378509154e-04f, -2.383267418e-04f, -2.388021229e-04f, -2.392770579e-04f,
--2.397515460e-04f, -2.402255864e-04f, -2.406991784e-04f, -2.411723211e-04f, -2.416450137e-04f, -2.421172556e-04f, -2.425890458e-04f, -2.430603837e-04f, -2.435312683e-04f, -2.440016991e-04f,
--2.444716750e-04f, -2.449411955e-04f, -2.454102596e-04f, -2.458788667e-04f, -2.463470159e-04f, -2.468147064e-04f, -2.472819376e-04f, -2.477487085e-04f, -2.482150185e-04f, -2.486808668e-04f,
--2.491462525e-04f, -2.496111750e-04f, -2.500756333e-04f, -2.505396269e-04f, -2.510031549e-04f, -2.514662165e-04f, -2.519288110e-04f, -2.523909375e-04f, -2.528525954e-04f, -2.533137839e-04f,
--2.537745022e-04f, -2.542347495e-04f, -2.546945251e-04f, -2.551538282e-04f, -2.556126580e-04f, -2.560710139e-04f, -2.565288950e-04f, -2.569863005e-04f, -2.574432298e-04f, -2.578996820e-04f,
--2.583556564e-04f, -2.588111523e-04f, -2.592661689e-04f, -2.597207054e-04f, -2.601747611e-04f, -2.606283352e-04f, -2.610814271e-04f, -2.615340358e-04f, -2.619861608e-04f, -2.624378012e-04f,
--2.628889563e-04f, -2.633396253e-04f, -2.637898075e-04f, -2.642395022e-04f, -2.646887086e-04f, -2.651374260e-04f, -2.655856536e-04f, -2.660333907e-04f, -2.664806366e-04f, -2.669273904e-04f,
--2.673736515e-04f, -2.678194192e-04f, -2.682646926e-04f, -2.687094712e-04f, -2.691537540e-04f, -2.695975405e-04f, -2.700408298e-04f, -2.704836212e-04f, -2.709259140e-04f, -2.713677075e-04f,
--2.718090010e-04f, -2.722497936e-04f, -2.726900848e-04f, -2.731298737e-04f, -2.735691596e-04f, -2.740079419e-04f, -2.744462197e-04f, -2.748839924e-04f, -2.753212592e-04f, -2.757580195e-04f,
--2.761942724e-04f, -2.766300174e-04f, -2.770652536e-04f, -2.774999803e-04f, -2.779341969e-04f, -2.783679026e-04f, -2.788010967e-04f, -2.792337785e-04f, -2.796659473e-04f, -2.800976023e-04f,
--2.805287429e-04f, -2.809593683e-04f, -2.813894779e-04f, -2.818190709e-04f, -2.822481466e-04f, -2.826767043e-04f, -2.831047433e-04f, -2.835322630e-04f, -2.839592625e-04f, -2.843857413e-04f,
--2.848116986e-04f, -2.852371336e-04f, -2.856620458e-04f, -2.860864344e-04f, -2.865102986e-04f, -2.869336379e-04f, -2.873564515e-04f, -2.877787387e-04f, -2.882004989e-04f, -2.886217313e-04f,
--2.890424352e-04f, -2.894626100e-04f, -2.898822549e-04f, -2.903013693e-04f, -2.907199526e-04f, -2.911380039e-04f, -2.915555226e-04f, -2.919725080e-04f, -2.923889595e-04f, -2.928048764e-04f,
--2.932202580e-04f, -2.936351035e-04f, -2.940494124e-04f, -2.944631839e-04f, -2.948764174e-04f, -2.952891122e-04f, -2.957012675e-04f, -2.961128829e-04f, -2.965239574e-04f, -2.969344906e-04f,
--2.973444817e-04f, -2.977539300e-04f, -2.981628350e-04f, -2.985711958e-04f, -2.989790119e-04f, -2.993862825e-04f, -2.997930070e-04f, -3.001991848e-04f, -3.006048152e-04f, -3.010098975e-04f,
--3.014144310e-04f, -3.018184151e-04f, -3.022218492e-04f, -3.026247325e-04f, -3.030270645e-04f, -3.034288444e-04f, -3.038300716e-04f, -3.042307454e-04f, -3.046308653e-04f, -3.050304304e-04f,
--3.054294403e-04f, -3.058278942e-04f, -3.062257915e-04f, -3.066231315e-04f, -3.070199136e-04f, -3.074161372e-04f, -3.078118015e-04f, -3.082069060e-04f, -3.086014500e-04f, -3.089954329e-04f,
--3.093888540e-04f, -3.097817127e-04f, -3.101740083e-04f, -3.105657402e-04f, -3.109569078e-04f, -3.113475104e-04f, -3.117375474e-04f, -3.121270181e-04f, -3.125159220e-04f, -3.129042584e-04f,
--3.132920266e-04f, -3.136792260e-04f, -3.140658561e-04f, -3.144519161e-04f, -3.148374054e-04f, -3.152223235e-04f, -3.156066697e-04f, -3.159904433e-04f, -3.163736437e-04f, -3.167562704e-04f,
--3.171383227e-04f, -3.175197999e-04f, -3.179007015e-04f, -3.182810269e-04f, -3.186607753e-04f, -3.190399463e-04f, -3.194185392e-04f, -3.197965533e-04f, -3.201739881e-04f, -3.205508430e-04f,
--3.209271172e-04f, -3.213028104e-04f, -3.216779217e-04f, -3.220524506e-04f, -3.224263966e-04f, -3.227997589e-04f, -3.231725371e-04f, -3.235447304e-04f, -3.239163384e-04f, -3.242873603e-04f,
--3.246577956e-04f, -3.250276437e-04f, -3.253969039e-04f, -3.257655758e-04f, -3.261336587e-04f, -3.265011519e-04f, -3.268680550e-04f, -3.272343673e-04f, -3.276000882e-04f, -3.279652171e-04f,
--3.283297535e-04f, -3.286936967e-04f, -3.290570462e-04f, -3.294198013e-04f, -3.297819616e-04f, -3.301435263e-04f, -3.305044950e-04f, -3.308648670e-04f, -3.312246418e-04f, -3.315838187e-04f,
--3.319423973e-04f, -3.323003768e-04f, -3.326577569e-04f, -3.330145367e-04f, -3.333707159e-04f, -3.337262938e-04f, -3.340812698e-04f, -3.344356435e-04f, -3.347894141e-04f, -3.351425811e-04f,
--3.354951440e-04f, -3.358471023e-04f, -3.361984552e-04f, -3.365492023e-04f, -3.368993430e-04f, -3.372488768e-04f, -3.375978030e-04f, -3.379461212e-04f, -3.382938307e-04f, -3.386409310e-04f,
--3.389874216e-04f, -3.393333018e-04f, -3.396785712e-04f, -3.400232291e-04f, -3.403672751e-04f, -3.407107085e-04f, -3.410535289e-04f, -3.413957356e-04f, -3.417373282e-04f, -3.420783060e-04f,
--3.424186685e-04f, -3.427584152e-04f, -3.430975456e-04f, -3.434360591e-04f, -3.437739551e-04f, -3.441112331e-04f, -3.444478926e-04f, -3.447839330e-04f, -3.451193538e-04f, -3.454541545e-04f,
--3.457883345e-04f, -3.461218933e-04f, -3.464548303e-04f, -3.467871450e-04f, -3.471188370e-04f, -3.474499056e-04f, -3.477803503e-04f, -3.481101707e-04f, -3.484393661e-04f, -3.487679361e-04f,
--3.490958801e-04f, -3.494231976e-04f, -3.497498881e-04f, -3.500759510e-04f, -3.504013859e-04f, -3.507261922e-04f, -3.510503695e-04f, -3.513739171e-04f, -3.516968346e-04f, -3.520191214e-04f,
--3.523407771e-04f, -3.526618011e-04f, -3.529821930e-04f, -3.533019521e-04f, -3.536210781e-04f, -3.539395704e-04f, -3.542574284e-04f, -3.545746518e-04f, -3.548912399e-04f, -3.552071923e-04f,
--3.555225085e-04f, -3.558371879e-04f, -3.561512302e-04f, -3.564646347e-04f, -3.567774010e-04f, -3.570895285e-04f, -3.574010169e-04f, -3.577118656e-04f, -3.580220741e-04f, -3.583316418e-04f,
--3.586405684e-04f, -3.589488534e-04f, -3.592564962e-04f, -3.595634963e-04f, -3.598698533e-04f, -3.601755667e-04f, -3.604806360e-04f, -3.607850607e-04f, -3.610888404e-04f, -3.613919745e-04f,
--3.616944626e-04f, -3.619963042e-04f, -3.622974988e-04f, -3.625980460e-04f, -3.628979453e-04f, -3.631971961e-04f, -3.634957981e-04f, -3.637937508e-04f, -3.640910536e-04f, -3.643877062e-04f,
--3.646837080e-04f, -3.649790586e-04f, -3.652737575e-04f, -3.655678043e-04f, -3.658611985e-04f, -3.661539396e-04f, -3.664460272e-04f, -3.667374609e-04f, -3.670282400e-04f, -3.673183643e-04f,
--3.676078332e-04f, -3.678966463e-04f, -3.681848032e-04f, -3.684723033e-04f, -3.687591462e-04f, -3.690453316e-04f, -3.693308589e-04f, -3.696157276e-04f, -3.698999374e-04f, -3.701834878e-04f,
--3.704663784e-04f, -3.707486086e-04f, -3.710301781e-04f, -3.713110865e-04f, -3.715913332e-04f, -3.718709179e-04f, -3.721498401e-04f, -3.724280994e-04f, -3.727056953e-04f, -3.729826274e-04f,
--3.732588953e-04f, -3.735344985e-04f, -3.738094366e-04f, -3.740837093e-04f, -3.743573160e-04f, -3.746302563e-04f, -3.749025298e-04f, -3.751741361e-04f, -3.754450748e-04f, -3.757153453e-04f,
--3.759849475e-04f, -3.762538807e-04f, -3.765221446e-04f, -3.767897387e-04f, -3.770566627e-04f, -3.773229161e-04f, -3.775884986e-04f, -3.778534096e-04f, -3.781176489e-04f, -3.783812159e-04f,
--3.786441103e-04f, -3.789063317e-04f, -3.791678796e-04f, -3.794287537e-04f, -3.796889535e-04f, -3.799484787e-04f, -3.802073289e-04f, -3.804655036e-04f, -3.807230024e-04f, -3.809798250e-04f,
--3.812359710e-04f, -3.814914399e-04f, -3.817462313e-04f, -3.820003450e-04f, -3.822537804e-04f, -3.825065372e-04f, -3.827586150e-04f, -3.830100135e-04f, -3.832607321e-04f, -3.835107706e-04f,
--3.837601286e-04f, -3.840088056e-04f, -3.842568013e-04f, -3.845041153e-04f, -3.847507473e-04f, -3.849966967e-04f, -3.852419634e-04f, -3.854865469e-04f, -3.857304467e-04f, -3.859736627e-04f,
--3.862161943e-04f, -3.864580412e-04f, -3.866992030e-04f, -3.869396794e-04f, -3.871794700e-04f, -3.874185744e-04f, -3.876569923e-04f, -3.878947233e-04f, -3.881317670e-04f, -3.883681231e-04f,
--3.886037912e-04f, -3.888387709e-04f, -3.890730620e-04f, -3.893066640e-04f, -3.895395766e-04f, -3.897717994e-04f, -3.900033321e-04f, -3.902341743e-04f, -3.904643257e-04f, -3.906937859e-04f,
--3.909225546e-04f, -3.911506314e-04f, -3.913780160e-04f, -3.916047081e-04f, -3.918307072e-04f, -3.920560131e-04f, -3.922806254e-04f, -3.925045437e-04f, -3.927277678e-04f, -3.929502974e-04f,
--3.931721319e-04f, -3.933932712e-04f, -3.936137149e-04f, -3.938334626e-04f, -3.940525141e-04f, -3.942708689e-04f, -3.944885269e-04f, -3.947054876e-04f, -3.949217506e-04f, -3.951373158e-04f,
--3.953521828e-04f, -3.955663512e-04f, -3.957798207e-04f, -3.959925910e-04f, -3.962046618e-04f, -3.964160328e-04f, -3.966267036e-04f, -3.968366739e-04f, -3.970459435e-04f, -3.972545120e-04f,
--3.974623791e-04f, -3.976695444e-04f, -3.978760078e-04f, -3.980817688e-04f, -3.982868271e-04f, -3.984911826e-04f, -3.986948347e-04f, -3.988977834e-04f, -3.991000282e-04f, -3.993015688e-04f,
--3.995024050e-04f, -3.997025364e-04f, -3.999019628e-04f, -4.001006838e-04f, -4.002986992e-04f, -4.004960087e-04f, -4.006926120e-04f, -4.008885087e-04f, -4.010836987e-04f, -4.012781815e-04f,
--4.014719570e-04f, -4.016650249e-04f, -4.018573848e-04f, -4.020490364e-04f, -4.022399796e-04f, -4.024302139e-04f, -4.026197392e-04f, -4.028085552e-04f, -4.029966615e-04f, -4.031840580e-04f,
--4.033707442e-04f, -4.035567200e-04f, -4.037419851e-04f, -4.039265393e-04f, -4.041103821e-04f, -4.042935134e-04f, -4.044759330e-04f, -4.046576405e-04f, -4.048386356e-04f, -4.050189182e-04f,
--4.051984879e-04f, -4.053773445e-04f, -4.055554878e-04f, -4.057329174e-04f, -4.059096332e-04f, -4.060856348e-04f, -4.062609220e-04f, -4.064354946e-04f, -4.066093523e-04f, -4.067824949e-04f,
--4.069549220e-04f, -4.071266335e-04f, -4.072976291e-04f, -4.074679086e-04f, -4.076374717e-04f, -4.078063182e-04f, -4.079744478e-04f, -4.081418603e-04f, -4.083085555e-04f, -4.084745331e-04f,
--4.086397928e-04f, -4.088043345e-04f, -4.089681580e-04f, -4.091312629e-04f, -4.092936490e-04f, -4.094553162e-04f, -4.096162642e-04f, -4.097764927e-04f, -4.099360015e-04f, -4.100947905e-04f,
--4.102528593e-04f, -4.104102078e-04f, -4.105668358e-04f, -4.107227430e-04f, -4.108779291e-04f, -4.110323941e-04f, -4.111861376e-04f, -4.113391595e-04f, -4.114914595e-04f, -4.116430374e-04f,
--4.117938931e-04f, -4.119440262e-04f, -4.120934367e-04f, -4.122421242e-04f, -4.123900886e-04f, -4.125373297e-04f, -4.126838472e-04f, -4.128296411e-04f, -4.129747109e-04f, -4.131190567e-04f,
--4.132626781e-04f, -4.134055750e-04f, -4.135477472e-04f, -4.136891944e-04f, -4.138299166e-04f, -4.139699134e-04f, -4.141091847e-04f, -4.142477304e-04f, -4.143855501e-04f, -4.145226439e-04f,
--4.146590113e-04f, -4.147946523e-04f, -4.149295667e-04f, -4.150637543e-04f, -4.151972149e-04f, -4.153299484e-04f, -4.154619545e-04f, -4.155932331e-04f, -4.157237840e-04f, -4.158536070e-04f,
--4.159827020e-04f, -4.161110688e-04f, -4.162387072e-04f, -4.163656171e-04f, -4.164917982e-04f, -4.166172504e-04f, -4.167419736e-04f, -4.168659676e-04f, -4.169892321e-04f, -4.171117672e-04f,
--4.172335725e-04f, -4.173546479e-04f, -4.174749934e-04f, -4.175946086e-04f, -4.177134936e-04f, -4.178316480e-04f, -4.179490718e-04f, -4.180657648e-04f, -4.181817268e-04f, -4.182969578e-04f,
--4.184114575e-04f, -4.185252258e-04f, -4.186382626e-04f, -4.187505677e-04f, -4.188621410e-04f, -4.189729823e-04f, -4.190830915e-04f, -4.191924685e-04f, -4.193011131e-04f, -4.194090252e-04f,
--4.195162046e-04f, -4.196226513e-04f, -4.197283650e-04f, -4.198333457e-04f, -4.199375932e-04f, -4.200411074e-04f, -4.201438881e-04f, -4.202459353e-04f, -4.203472488e-04f, -4.204478285e-04f,
--4.205476743e-04f, -4.206467860e-04f, -4.207451635e-04f, -4.208428067e-04f, -4.209397156e-04f, -4.210358899e-04f, -4.211313295e-04f, -4.212260344e-04f, -4.213200045e-04f, -4.214132395e-04f,
--4.215057395e-04f, -4.215975043e-04f, -4.216885338e-04f, -4.217788278e-04f, -4.218683864e-04f, -4.219572093e-04f, -4.220452965e-04f, -4.221326479e-04f, -4.222192634e-04f, -4.223051429e-04f,
--4.223902862e-04f, -4.224746934e-04f, -4.225583642e-04f, -4.226412987e-04f, -4.227234966e-04f, -4.228049580e-04f, -4.228856827e-04f, -4.229656707e-04f, -4.230449218e-04f, -4.231234360e-04f,
--4.232012132e-04f, -4.232782532e-04f, -4.233545561e-04f, -4.234301218e-04f, -4.235049501e-04f, -4.235790410e-04f, -4.236523944e-04f, -4.237250103e-04f, -4.237968885e-04f, -4.238680290e-04f,
--4.239384317e-04f, -4.240080966e-04f, -4.240770236e-04f, -4.241452125e-04f, -4.242126634e-04f, -4.242793762e-04f, -4.243453508e-04f, -4.244105872e-04f, -4.244750853e-04f, -4.245388450e-04f,
--4.246018663e-04f, -4.246641491e-04f, -4.247256933e-04f, -4.247864990e-04f, -4.248465660e-04f, -4.249058943e-04f, -4.249644839e-04f, -4.250223347e-04f, -4.250794467e-04f, -4.251358197e-04f,
--4.251914538e-04f, -4.252463490e-04f, -4.253005051e-04f, -4.253539221e-04f, -4.254066001e-04f, -4.254585389e-04f, -4.255097385e-04f, -4.255601989e-04f, -4.256099200e-04f, -4.256589019e-04f,
--4.257071444e-04f, -4.257546476e-04f, -4.258014113e-04f, -4.258474357e-04f, -4.258927207e-04f, -4.259372661e-04f, -4.259810721e-04f, -4.260241386e-04f, -4.260664655e-04f, -4.261080528e-04f,
--4.261489006e-04f, -4.261890088e-04f, -4.262283774e-04f, -4.262670063e-04f, -4.263048956e-04f, -4.263420452e-04f, -4.263784552e-04f, -4.264141255e-04f, -4.264490560e-04f, -4.264832469e-04f,
--4.265166981e-04f, -4.265494096e-04f, -4.265813813e-04f, -4.266126133e-04f, -4.266431056e-04f, -4.266728581e-04f, -4.267018710e-04f, -4.267301441e-04f, -4.267576775e-04f, -4.267844712e-04f,
--4.268105251e-04f, -4.268358394e-04f, -4.268604140e-04f, -4.268842488e-04f, -4.269073441e-04f, -4.269296996e-04f, -4.269513155e-04f, -4.269721918e-04f, -4.269923284e-04f, -4.270117254e-04f,
--4.270303829e-04f, -4.270483008e-04f, -4.270654791e-04f, -4.270819179e-04f, -4.270976173e-04f, -4.271125771e-04f, -4.271267975e-04f, -4.271402785e-04f, -4.271530201e-04f, -4.271650224e-04f,
--4.271762853e-04f, -4.271868089e-04f, -4.271965932e-04f, -4.272056383e-04f, -4.272139443e-04f, -4.272215110e-04f, -4.272283387e-04f, -4.272344273e-04f, -4.272397768e-04f, -4.272443874e-04f,
--4.272482590e-04f, -4.272513917e-04f, -4.272537855e-04f, -4.272554406e-04f, -4.272563569e-04f, -4.272565344e-04f, -4.272559733e-04f, -4.272546737e-04f, -4.272526354e-04f, -4.272498587e-04f,
--4.272463435e-04f, -4.272420900e-04f, -4.272370981e-04f, -4.272313679e-04f, -4.272248996e-04f, -4.272176931e-04f, -4.272097486e-04f, -4.272010661e-04f, -4.271916456e-04f, -4.271814872e-04f,
--4.271705911e-04f, -4.271589572e-04f, -4.271465856e-04f, -4.271334765e-04f, -4.271196298e-04f, -4.271050458e-04f, -4.270897243e-04f, -4.270736656e-04f, -4.270568697e-04f, -4.270393366e-04f,
--4.270210666e-04f, -4.270020595e-04f, -4.269823156e-04f, -4.269618350e-04f, -4.269406176e-04f, -4.269186636e-04f, -4.268959731e-04f, -4.268725462e-04f, -4.268483829e-04f, -4.268234834e-04f,
--4.267978477e-04f, -4.267714760e-04f, -4.267443683e-04f, -4.267165248e-04f, -4.266879456e-04f, -4.266586306e-04f, -4.266285802e-04f, -4.265977942e-04f, -4.265662730e-04f, -4.265340165e-04f,
--4.265010248e-04f, -4.264672982e-04f, -4.264328366e-04f, -4.263976402e-04f, -4.263617092e-04f, -4.263250436e-04f, -4.262876435e-04f, -4.262495091e-04f, -4.262106404e-04f, -4.261710377e-04f,
--4.261307009e-04f, -4.260896303e-04f, -4.260478260e-04f, -4.260052880e-04f, -4.259620165e-04f, -4.259180117e-04f, -4.258732737e-04f, -4.258278025e-04f, -4.257815983e-04f, -4.257346613e-04f,
--4.256869916e-04f, -4.256385893e-04f, -4.255894546e-04f, -4.255395875e-04f, -4.254889883e-04f, -4.254376570e-04f, -4.253855939e-04f, -4.253327990e-04f, -4.252792725e-04f, -4.252250145e-04f,
--4.251700252e-04f, -4.251143047e-04f, -4.250578532e-04f, -4.250006709e-04f, -4.249427578e-04f, -4.248841141e-04f, -4.248247400e-04f, -4.247646356e-04f, -4.247038011e-04f, -4.246422367e-04f,
--4.245799425e-04f, -4.245169186e-04f, -4.244531652e-04f, -4.243886826e-04f, -4.243234707e-04f, -4.242575299e-04f, -4.241908603e-04f, -4.241234620e-04f, -4.240553352e-04f, -4.239864801e-04f,
--4.239168968e-04f, -4.238465856e-04f, -4.237755465e-04f, -4.237037798e-04f, -4.236312857e-04f, -4.235580642e-04f, -4.234841157e-04f, -4.234094402e-04f, -4.233340380e-04f, -4.232579092e-04f,
--4.231810541e-04f, -4.231034727e-04f, -4.230251654e-04f, -4.229461322e-04f, -4.228663733e-04f, -4.227858891e-04f, -4.227046795e-04f, -4.226227449e-04f, -4.225400854e-04f, -4.224567013e-04f,
--4.223725926e-04f, -4.222877597e-04f, -4.222022027e-04f, -4.221159218e-04f, -4.220289171e-04f, -4.219411890e-04f, -4.218527377e-04f, -4.217635632e-04f, -4.216736658e-04f, -4.215830458e-04f,
--4.214917033e-04f, -4.213996385e-04f, -4.213068517e-04f, -4.212133431e-04f, -4.211191128e-04f, -4.210241611e-04f, -4.209284883e-04f, -4.208320944e-04f, -4.207349798e-04f, -4.206371446e-04f,
--4.205385891e-04f, -4.204393136e-04f, -4.203393181e-04f, -4.202386030e-04f, -4.201371684e-04f, -4.200350147e-04f, -4.199321419e-04f, -4.198285504e-04f, -4.197242404e-04f, -4.196192121e-04f,
--4.195134658e-04f, -4.194070016e-04f, -4.192998198e-04f, -4.191919207e-04f, -4.190833044e-04f, -4.189739713e-04f, -4.188639216e-04f, -4.187531554e-04f, -4.186416731e-04f, -4.185294748e-04f,
--4.184165609e-04f, -4.183029316e-04f, -4.181885871e-04f, -4.180735277e-04f, -4.179577536e-04f, -4.178412650e-04f, -4.177240623e-04f, -4.176061457e-04f, -4.174875154e-04f, -4.173681716e-04f,
--4.172481148e-04f, -4.171273450e-04f, -4.170058625e-04f, -4.168836677e-04f, -4.167607608e-04f, -4.166371420e-04f, -4.165128116e-04f, -4.163877699e-04f, -4.162620171e-04f, -4.161355535e-04f,
--4.160083794e-04f, -4.158804951e-04f, -4.157519007e-04f, -4.156225967e-04f, -4.154925832e-04f, -4.153618605e-04f, -4.152304290e-04f, -4.150982888e-04f, -4.149654403e-04f, -4.148318838e-04f,
--4.146976194e-04f, -4.145626476e-04f, -4.144269686e-04f, -4.142905826e-04f, -4.141534901e-04f, -4.140156911e-04f, -4.138771861e-04f, -4.137379753e-04f, -4.135980591e-04f, -4.134574376e-04f,
--4.133161112e-04f, -4.131740803e-04f, -4.130313450e-04f, -4.128879057e-04f, -4.127437627e-04f, -4.125989163e-04f, -4.124533667e-04f, -4.123071144e-04f, -4.121601595e-04f, -4.120125024e-04f,
--4.118641434e-04f, -4.117150828e-04f, -4.115653209e-04f, -4.114148580e-04f, -4.112636945e-04f, -4.111118306e-04f, -4.109592666e-04f, -4.108060029e-04f, -4.106520397e-04f, -4.104973775e-04f,
--4.103420164e-04f, -4.101859569e-04f, -4.100291992e-04f, -4.098717437e-04f, -4.097135907e-04f, -4.095547405e-04f, -4.093951934e-04f, -4.092349497e-04f, -4.090740099e-04f, -4.089123741e-04f,
--4.087500428e-04f, -4.085870163e-04f, -4.084232948e-04f, -4.082588788e-04f, -4.080937685e-04f, -4.079279644e-04f, -4.077614667e-04f, -4.075942757e-04f, -4.074263918e-04f, -4.072578154e-04f,
--4.070885468e-04f, -4.069185863e-04f, -4.067479343e-04f, -4.065765911e-04f, -4.064045570e-04f, -4.062318325e-04f, -4.060584178e-04f, -4.058843133e-04f, -4.057095194e-04f, -4.055340363e-04f,
--4.053578645e-04f, -4.051810044e-04f, -4.050034561e-04f, -4.048252202e-04f, -4.046462970e-04f, -4.044666868e-04f, -4.042863900e-04f, -4.041054069e-04f, -4.039237379e-04f, -4.037413835e-04f,
--4.035583438e-04f, -4.033746194e-04f, -4.031902105e-04f, -4.030051175e-04f, -4.028193409e-04f, -4.026328809e-04f, -4.024457380e-04f, -4.022579125e-04f, -4.020694047e-04f, -4.018802152e-04f,
--4.016903441e-04f, -4.014997920e-04f, -4.013085592e-04f, -4.011166460e-04f, -4.009240529e-04f, -4.007307802e-04f, -4.005368283e-04f, -4.003421976e-04f, -4.001468885e-04f, -3.999509013e-04f,
--3.997542365e-04f, -3.995568944e-04f, -3.993588755e-04f, -3.991601801e-04f, -3.989608086e-04f, -3.987607614e-04f, -3.985600388e-04f, -3.983586414e-04f, -3.981565695e-04f, -3.979538234e-04f,
--3.977504036e-04f, -3.975463105e-04f, -3.973415444e-04f, -3.971361059e-04f, -3.969299952e-04f, -3.967232128e-04f, -3.965157591e-04f, -3.963076345e-04f, -3.960988394e-04f, -3.958893742e-04f,
--3.956792394e-04f, -3.954684352e-04f, -3.952569622e-04f, -3.950448208e-04f, -3.948320113e-04f, -3.946185343e-04f, -3.944043900e-04f, -3.941895789e-04f, -3.939741015e-04f, -3.937579581e-04f,
--3.935411492e-04f, -3.933236752e-04f, -3.931055366e-04f, -3.928867336e-04f, -3.926672669e-04f, -3.924471367e-04f, -3.922263436e-04f, -3.920048879e-04f, -3.917827701e-04f, -3.915599906e-04f,
--3.913365499e-04f, -3.911124483e-04f, -3.908876863e-04f, -3.906622644e-04f, -3.904361830e-04f, -3.902094425e-04f, -3.899820433e-04f, -3.897539860e-04f, -3.895252709e-04f, -3.892958984e-04f,
--3.890658691e-04f, -3.888351834e-04f, -3.886038417e-04f, -3.883718444e-04f, -3.881391920e-04f, -3.879058850e-04f, -3.876719238e-04f, -3.874373089e-04f, -3.872020406e-04f, -3.869661195e-04f,
--3.867295461e-04f, -3.864923206e-04f, -3.862544438e-04f, -3.860159159e-04f, -3.857767374e-04f, -3.855369088e-04f, -3.852964306e-04f, -3.850553033e-04f, -3.848135272e-04f, -3.845711028e-04f,
--3.843280307e-04f, -3.840843112e-04f, -3.838399449e-04f, -3.835949322e-04f, -3.833492736e-04f, -3.831029695e-04f, -3.828560205e-04f, -3.826084269e-04f, -3.823601893e-04f, -3.821113082e-04f,
--3.818617840e-04f, -3.816116172e-04f, -3.813608082e-04f, -3.811093577e-04f, -3.808572659e-04f, -3.806045335e-04f, -3.803511608e-04f, -3.800971485e-04f, -3.798424969e-04f, -3.795872065e-04f,
--3.793312779e-04f, -3.790747115e-04f, -3.788175078e-04f, -3.785596674e-04f, -3.783011906e-04f, -3.780420780e-04f, -3.777823301e-04f, -3.775219473e-04f, -3.772609302e-04f, -3.769992793e-04f,
--3.767369950e-04f, -3.764740779e-04f, -3.762105285e-04f, -3.759463472e-04f, -3.756815345e-04f, -3.754160910e-04f, -3.751500172e-04f, -3.748833136e-04f, -3.746159806e-04f, -3.743480188e-04f,
--3.740794287e-04f, -3.738102108e-04f, -3.735403656e-04f, -3.732698936e-04f, -3.729987953e-04f, -3.727270713e-04f, -3.724547221e-04f, -3.721817481e-04f, -3.719081499e-04f, -3.716339280e-04f,
--3.713590829e-04f, -3.710836151e-04f, -3.708075253e-04f, -3.705308138e-04f, -3.702534812e-04f, -3.699755280e-04f, -3.696969548e-04f, -3.694177621e-04f, -3.691379503e-04f, -3.688575201e-04f,
--3.685764720e-04f, -3.682948064e-04f, -3.680125240e-04f, -3.677296252e-04f, -3.674461106e-04f, -3.671619807e-04f, -3.668772361e-04f, -3.665918773e-04f, -3.663059047e-04f, -3.660193191e-04f,
--3.657321208e-04f, -3.654443105e-04f, -3.651558887e-04f, -3.648668559e-04f, -3.645772126e-04f, -3.642869595e-04f, -3.639960970e-04f, -3.637046258e-04f, -3.634125462e-04f, -3.631198590e-04f,
--3.628265646e-04f, -3.625326636e-04f, -3.622381566e-04f, -3.619430440e-04f, -3.616473265e-04f, -3.613510046e-04f, -3.610540789e-04f, -3.607565498e-04f, -3.604584181e-04f, -3.601596841e-04f,
--3.598603486e-04f, -3.595604120e-04f, -3.592598750e-04f, -3.589587379e-04f, -3.586570016e-04f, -3.583546664e-04f, -3.580517330e-04f, -3.577482019e-04f, -3.574440737e-04f, -3.571393490e-04f,
--3.568340283e-04f, -3.565281123e-04f, -3.562216013e-04f, -3.559144962e-04f, -3.556067973e-04f, -3.552985054e-04f, -3.549896209e-04f, -3.546801445e-04f, -3.543700767e-04f, -3.540594180e-04f,
--3.537481692e-04f, -3.534363307e-04f, -3.531239032e-04f, -3.528108872e-04f, -3.524972832e-04f, -3.521830920e-04f, -3.518683140e-04f, -3.515529499e-04f, -3.512370002e-04f, -3.509204656e-04f,
--3.506033466e-04f, -3.502856438e-04f, -3.499673578e-04f, -3.496484892e-04f, -3.493290385e-04f, -3.490090065e-04f, -3.486883936e-04f, -3.483672004e-04f, -3.480454277e-04f, -3.477230759e-04f,
--3.474001456e-04f, -3.470766375e-04f, -3.467525522e-04f, -3.464278902e-04f, -3.461026522e-04f, -3.457768388e-04f, -3.454504505e-04f, -3.451234880e-04f, -3.447959518e-04f, -3.444678427e-04f,
--3.441391611e-04f, -3.438099078e-04f, -3.434800832e-04f, -3.431496881e-04f, -3.428187230e-04f, -3.424871886e-04f, -3.421550854e-04f, -3.418224141e-04f, -3.414891752e-04f, -3.411553695e-04f,
--3.408209975e-04f, -3.404860598e-04f, -3.401505571e-04f, -3.398144900e-04f, -3.394778591e-04f, -3.391406650e-04f, -3.388029083e-04f, -3.384645897e-04f, -3.381257098e-04f, -3.377862692e-04f,
--3.374462686e-04f, -3.371057085e-04f, -3.367645897e-04f, -3.364229126e-04f, -3.360806781e-04f, -3.357378866e-04f, -3.353945388e-04f, -3.350506354e-04f, -3.347061770e-04f, -3.343611642e-04f,
--3.340155976e-04f, -3.336694780e-04f, -3.333228059e-04f, -3.329755820e-04f, -3.326278068e-04f, -3.322794812e-04f, -3.319306056e-04f, -3.315811807e-04f, -3.312312073e-04f, -3.308806858e-04f,
--3.305296170e-04f, -3.301780016e-04f, -3.298258400e-04f, -3.294731331e-04f, -3.291198815e-04f, -3.287660857e-04f, -3.284117466e-04f, -3.280568646e-04f, -3.277014404e-04f, -3.273454748e-04f,
--3.269889683e-04f, -3.266319217e-04f, -3.262743355e-04f, -3.259162105e-04f, -3.255575472e-04f, -3.251983464e-04f, -3.248386087e-04f, -3.244783348e-04f, -3.241175252e-04f, -3.237561808e-04f,
--3.233943021e-04f, -3.230318899e-04f, -3.226689447e-04f, -3.223054672e-04f, -3.219414582e-04f, -3.215769182e-04f, -3.212118480e-04f, -3.208462481e-04f, -3.204801194e-04f, -3.201134624e-04f,
--3.197462778e-04f, -3.193785664e-04f, -3.190103287e-04f, -3.186415654e-04f, -3.182722772e-04f, -3.179024649e-04f, -3.175321290e-04f, -3.171612702e-04f, -3.167898893e-04f, -3.164179869e-04f,
--3.160455637e-04f, -3.156726203e-04f, -3.152991575e-04f, -3.149251758e-04f, -3.145506762e-04f, -3.141756590e-04f, -3.138001252e-04f, -3.134240754e-04f, -3.130475102e-04f, -3.126704303e-04f,
--3.122928364e-04f, -3.119147293e-04f, -3.115361096e-04f, -3.111569780e-04f, -3.107773351e-04f, -3.103971818e-04f, -3.100165186e-04f, -3.096353463e-04f, -3.092536656e-04f, -3.088714771e-04f,
--3.084887815e-04f, -3.081055797e-04f, -3.077218721e-04f, -3.073376597e-04f, -3.069529429e-04f, -3.065677227e-04f, -3.061819996e-04f, -3.057957743e-04f, -3.054090476e-04f, -3.050218202e-04f,
--3.046340927e-04f, -3.042458659e-04f, -3.038571405e-04f, -3.034679171e-04f, -3.030781966e-04f, -3.026879796e-04f, -3.022972668e-04f, -3.019060589e-04f, -3.015143566e-04f, -3.011221607e-04f,
--3.007294719e-04f, -3.003362908e-04f, -2.999426183e-04f, -2.995484549e-04f, -2.991538015e-04f, -2.987586587e-04f, -2.983630272e-04f, -2.979669078e-04f, -2.975703013e-04f, -2.971732082e-04f,
--2.967756294e-04f, -2.963775655e-04f, -2.959790173e-04f, -2.955799855e-04f, -2.951804708e-04f, -2.947804740e-04f, -2.943799958e-04f, -2.939790369e-04f, -2.935775980e-04f, -2.931756798e-04f,
--2.927732832e-04f, -2.923704088e-04f, -2.919670573e-04f, -2.915632295e-04f, -2.911589261e-04f, -2.907541479e-04f, -2.903488955e-04f, -2.899431697e-04f, -2.895369713e-04f, -2.891303010e-04f,
--2.887231595e-04f, -2.883155475e-04f, -2.879074659e-04f, -2.874989152e-04f, -2.870898964e-04f, -2.866804100e-04f, -2.862704570e-04f, -2.858600379e-04f, -2.854491535e-04f, -2.850378046e-04f,
--2.846259920e-04f, -2.842137163e-04f, -2.838009783e-04f, -2.833877788e-04f, -2.829741186e-04f, -2.825599982e-04f, -2.821454186e-04f, -2.817303804e-04f, -2.813148844e-04f, -2.808989314e-04f,
--2.804825221e-04f, -2.800656573e-04f, -2.796483376e-04f, -2.792305640e-04f, -2.788123370e-04f, -2.783936576e-04f, -2.779745263e-04f, -2.775549441e-04f, -2.771349115e-04f, -2.767144295e-04f,
--2.762934988e-04f, -2.758721201e-04f, -2.754502941e-04f, -2.750280217e-04f, -2.746053037e-04f, -2.741821406e-04f, -2.737585334e-04f, -2.733344828e-04f, -2.729099896e-04f, -2.724850545e-04f,
--2.720596783e-04f, -2.716338617e-04f, -2.712076055e-04f, -2.707809106e-04f, -2.703537776e-04f, -2.699262073e-04f, -2.694982006e-04f, -2.690697581e-04f, -2.686408806e-04f, -2.682115690e-04f,
--2.677818239e-04f, -2.673516462e-04f, -2.669210367e-04f, -2.664899961e-04f, -2.660585251e-04f, -2.656266246e-04f, -2.651942954e-04f, -2.647615382e-04f, -2.643283537e-04f, -2.638947429e-04f,
--2.634607064e-04f, -2.630262450e-04f, -2.625913596e-04f, -2.621560508e-04f, -2.617203196e-04f, -2.612841666e-04f, -2.608475926e-04f, -2.604105985e-04f, -2.599731850e-04f, -2.595353529e-04f,
--2.590971030e-04f, -2.586584361e-04f, -2.582193530e-04f, -2.577798544e-04f, -2.573399411e-04f, -2.568996140e-04f, -2.564588739e-04f, -2.560177214e-04f, -2.555761574e-04f, -2.551341828e-04f,
--2.546917982e-04f, -2.542490045e-04f, -2.538058026e-04f, -2.533621930e-04f, -2.529181768e-04f, -2.524737546e-04f, -2.520289273e-04f, -2.515836957e-04f, -2.511380605e-04f, -2.506920226e-04f,
--2.502455828e-04f, -2.497987418e-04f, -2.493515005e-04f, -2.489038597e-04f, -2.484558201e-04f, -2.480073826e-04f, -2.475585479e-04f, -2.471093170e-04f, -2.466596905e-04f, -2.462096693e-04f,
--2.457592542e-04f, -2.453084461e-04f, -2.448572456e-04f, -2.444056536e-04f, -2.439536710e-04f, -2.435012985e-04f, -2.430485369e-04f, -2.425953871e-04f, -2.421418499e-04f, -2.416879260e-04f,
--2.412336164e-04f, -2.407789217e-04f, -2.403238428e-04f, -2.398683806e-04f, -2.394125358e-04f, -2.389563093e-04f, -2.384997019e-04f, -2.380427143e-04f, -2.375853475e-04f, -2.371276022e-04f,
--2.366694792e-04f, -2.362109794e-04f, -2.357521036e-04f, -2.352928525e-04f, -2.348332271e-04f, -2.343732282e-04f, -2.339128565e-04f, -2.334521129e-04f, -2.329909982e-04f, -2.325295133e-04f,
--2.320676589e-04f, -2.316054359e-04f, -2.311428451e-04f, -2.306798873e-04f, -2.302165634e-04f, -2.297528742e-04f, -2.292888205e-04f, -2.288244032e-04f, -2.283596230e-04f, -2.278944808e-04f,
--2.274289775e-04f, -2.269631138e-04f, -2.264968906e-04f, -2.260303088e-04f, -2.255633691e-04f, -2.250960723e-04f, -2.246284195e-04f, -2.241604112e-04f, -2.236920485e-04f, -2.232233321e-04f,
--2.227542628e-04f, -2.222848416e-04f, -2.218150692e-04f, -2.213449464e-04f, -2.208744742e-04f, -2.204036533e-04f, -2.199324846e-04f, -2.194609690e-04f, -2.189891071e-04f, -2.185169000e-04f,
--2.180443485e-04f, -2.175714533e-04f, -2.170982154e-04f, -2.166246355e-04f, -2.161507146e-04f, -2.156764534e-04f, -2.152018528e-04f, -2.147269137e-04f, -2.142516369e-04f, -2.137760232e-04f,
--2.133000734e-04f, -2.128237886e-04f, -2.123471694e-04f, -2.118702167e-04f, -2.113929314e-04f, -2.109153143e-04f, -2.104373663e-04f, -2.099590882e-04f, -2.094804809e-04f, -2.090015453e-04f,
--2.085222821e-04f, -2.080426922e-04f, -2.075627765e-04f, -2.070825358e-04f, -2.066019710e-04f, -2.061210830e-04f, -2.056398726e-04f, -2.051583406e-04f, -2.046764879e-04f, -2.041943154e-04f,
--2.037118239e-04f, -2.032290142e-04f, -2.027458873e-04f, -2.022624440e-04f, -2.017786852e-04f, -2.012946116e-04f, -2.008102242e-04f, -2.003255238e-04f, -1.998405114e-04f, -1.993551876e-04f,
--1.988695535e-04f, -1.983836098e-04f, -1.978973575e-04f, -1.974107974e-04f, -1.969239303e-04f, -1.964367571e-04f, -1.959492788e-04f, -1.954614961e-04f, -1.949734098e-04f, -1.944850210e-04f,
--1.939963304e-04f, -1.935073390e-04f, -1.930180475e-04f, -1.925284568e-04f, -1.920385679e-04f, -1.915483816e-04f, -1.910578987e-04f, -1.905671201e-04f, -1.900760467e-04f, -1.895846794e-04f,
--1.890930190e-04f, -1.886010664e-04f, -1.881088224e-04f, -1.876162880e-04f, -1.871234641e-04f, -1.866303514e-04f, -1.861369509e-04f, -1.856432634e-04f, -1.851492898e-04f, -1.846550310e-04f,
--1.841604879e-04f, -1.836656613e-04f, -1.831705521e-04f, -1.826751612e-04f, -1.821794894e-04f, -1.816835377e-04f, -1.811873069e-04f, -1.806907979e-04f, -1.801940116e-04f, -1.796969488e-04f,
--1.791996105e-04f, -1.787019975e-04f, -1.782041106e-04f, -1.777059508e-04f, -1.772075190e-04f, -1.767088160e-04f, -1.762098427e-04f, -1.757106000e-04f, -1.752110888e-04f, -1.747113100e-04f,
--1.742112644e-04f, -1.737109529e-04f, -1.732103764e-04f, -1.727095358e-04f, -1.722084320e-04f, -1.717070659e-04f, -1.712054383e-04f, -1.707035502e-04f, -1.702014023e-04f, -1.696989957e-04f,
--1.691963312e-04f, -1.686934096e-04f, -1.681902320e-04f, -1.676867991e-04f, -1.671831118e-04f, -1.666791711e-04f, -1.661749778e-04f, -1.656705328e-04f, -1.651658370e-04f, -1.646608913e-04f,
--1.641556966e-04f, -1.636502538e-04f, -1.631445638e-04f, -1.626386274e-04f, -1.621324456e-04f, -1.616260192e-04f, -1.611193491e-04f, -1.606124363e-04f, -1.601052816e-04f, -1.595978860e-04f,
--1.590902502e-04f, -1.585823753e-04f, -1.580742620e-04f, -1.575659114e-04f, -1.570573242e-04f, -1.565485015e-04f, -1.560394440e-04f, -1.555301528e-04f, -1.550206286e-04f, -1.545108724e-04f,
--1.540008850e-04f, -1.534906675e-04f, -1.529802206e-04f, -1.524695453e-04f, -1.519586425e-04f, -1.514475130e-04f, -1.509361578e-04f, -1.504245778e-04f, -1.499127739e-04f, -1.494007469e-04f,
--1.488884978e-04f, -1.483760275e-04f, -1.478633368e-04f, -1.473504268e-04f, -1.468372982e-04f, -1.463239520e-04f, -1.458103891e-04f, -1.452966104e-04f, -1.447826168e-04f, -1.442684092e-04f,
--1.437539885e-04f, -1.432393556e-04f, -1.427245114e-04f, -1.422094568e-04f, -1.416941928e-04f, -1.411787202e-04f, -1.406630399e-04f, -1.401471529e-04f, -1.396310600e-04f, -1.391147622e-04f,
--1.385982603e-04f, -1.380815553e-04f, -1.375646481e-04f, -1.370475396e-04f, -1.365302306e-04f, -1.360127222e-04f, -1.354950152e-04f, -1.349771105e-04f, -1.344590091e-04f, -1.339407117e-04f,
--1.334222195e-04f, -1.329035332e-04f, -1.323846537e-04f, -1.318655821e-04f, -1.313463191e-04f, -1.308268658e-04f, -1.303072230e-04f, -1.297873916e-04f, -1.292673725e-04f, -1.287471667e-04f,
--1.282267751e-04f, -1.277061985e-04f, -1.271854380e-04f, -1.266644943e-04f, -1.261433685e-04f, -1.256220614e-04f, -1.251005740e-04f, -1.245789071e-04f, -1.240570617e-04f, -1.235350387e-04f,
--1.230128390e-04f, -1.224904635e-04f, -1.219679132e-04f, -1.214451889e-04f, -1.209222916e-04f, -1.203992222e-04f, -1.198759816e-04f, -1.193525707e-04f, -1.188289904e-04f, -1.183052417e-04f,
--1.177813255e-04f, -1.172572427e-04f, -1.167329942e-04f, -1.162085809e-04f, -1.156840037e-04f, -1.151592637e-04f, -1.146343616e-04f, -1.141092984e-04f, -1.135840750e-04f, -1.130586924e-04f,
--1.125331514e-04f, -1.120074530e-04f, -1.114815982e-04f, -1.109555877e-04f, -1.104294226e-04f, -1.099031038e-04f, -1.093766321e-04f, -1.088500085e-04f, -1.083232340e-04f, -1.077963094e-04f,
--1.072692357e-04f, -1.067420138e-04f, -1.062146446e-04f, -1.056871290e-04f, -1.051594680e-04f, -1.046316625e-04f, -1.041037134e-04f, -1.035756216e-04f, -1.030473881e-04f, -1.025190137e-04f,
--1.019904995e-04f, -1.014618462e-04f, -1.009330550e-04f, -1.004041265e-04f, -9.987506191e-05f, -9.934586201e-05f, -9.881652775e-05f, -9.828706006e-05f, -9.775745987e-05f, -9.722772809e-05f,
--9.669786566e-05f, -9.616787350e-05f, -9.563775253e-05f, -9.510750369e-05f, -9.457712790e-05f, -9.404662608e-05f, -9.351599915e-05f, -9.298524806e-05f, -9.245437372e-05f, -9.192337706e-05f,
--9.139225900e-05f, -9.086102048e-05f, -9.032966242e-05f, -8.979818574e-05f, -8.926659139e-05f, -8.873488027e-05f, -8.820305333e-05f, -8.767111148e-05f, -8.713905566e-05f, -8.660688680e-05f,
--8.607460582e-05f, -8.554221365e-05f, -8.500971122e-05f, -8.447709946e-05f, -8.394437929e-05f, -8.341155165e-05f, -8.287861747e-05f, -8.234557767e-05f, -8.181243318e-05f, -8.127918494e-05f,
--8.074583386e-05f, -8.021238089e-05f, -7.967882695e-05f, -7.914517297e-05f, -7.861141988e-05f, -7.807756862e-05f, -7.754362010e-05f, -7.700957526e-05f, -7.647543504e-05f, -7.594120036e-05f,
--7.540687215e-05f, -7.487245134e-05f, -7.433793887e-05f, -7.380333566e-05f, -7.326864264e-05f, -7.273386076e-05f, -7.219899093e-05f, -7.166403408e-05f, -7.112899116e-05f, -7.059386309e-05f,
--7.005865080e-05f, -6.952335522e-05f, -6.898797729e-05f, -6.845251793e-05f, -6.791697809e-05f, -6.738135868e-05f, -6.684566065e-05f, -6.630988492e-05f, -6.577403242e-05f, -6.523810410e-05f,
--6.470210087e-05f, -6.416602368e-05f, -6.362987345e-05f, -6.309365112e-05f, -6.255735761e-05f, -6.202099387e-05f, -6.148456082e-05f, -6.094805940e-05f, -6.041149054e-05f, -5.987485517e-05f,
--5.933815422e-05f, -5.880138863e-05f, -5.826455933e-05f, -5.772766726e-05f, -5.719071333e-05f, -5.665369850e-05f, -5.611662369e-05f, -5.557948983e-05f, -5.504229786e-05f, -5.450504871e-05f,
--5.396774331e-05f, -5.343038260e-05f, -5.289296751e-05f, -5.235549898e-05f, -5.181797792e-05f, -5.128040529e-05f, -5.074278201e-05f, -5.020510901e-05f, -4.966738724e-05f, -4.912961761e-05f,
--4.859180108e-05f, -4.805393856e-05f, -4.751603099e-05f, -4.697807931e-05f, -4.644008444e-05f, -4.590204733e-05f, -4.536396891e-05f, -4.482585010e-05f, -4.428769185e-05f, -4.374949508e-05f,
--4.321126073e-05f, -4.267298973e-05f, -4.213468302e-05f, -4.159634153e-05f, -4.105796619e-05f, -4.051955794e-05f, -3.998111771e-05f, -3.944264643e-05f, -3.890414503e-05f, -3.836561446e-05f,
--3.782705564e-05f, -3.728846950e-05f, -3.674985698e-05f, -3.621121902e-05f, -3.567255654e-05f, -3.513387048e-05f, -3.459516178e-05f, -3.405643135e-05f, -3.351768015e-05f, -3.297890910e-05f,
--3.244011913e-05f, -3.190131118e-05f, -3.136248618e-05f, -3.082364507e-05f, -3.028478877e-05f, -2.974591822e-05f, -2.920703435e-05f, -2.866813810e-05f, -2.812923039e-05f, -2.759031217e-05f,
--2.705138436e-05f, -2.651244789e-05f, -2.597350370e-05f, -2.543455273e-05f, -2.489559589e-05f, -2.435663414e-05f, -2.381766839e-05f, -2.327869958e-05f, -2.273972864e-05f, -2.220075651e-05f,
--2.166178411e-05f, -2.112281239e-05f, -2.058384226e-05f, -2.004487467e-05f, -1.950591054e-05f, -1.896695080e-05f, -1.842799640e-05f, -1.788904825e-05f, -1.735010730e-05f, -1.681117447e-05f,
--1.627225069e-05f, -1.573333689e-05f, -1.519443402e-05f, -1.465554299e-05f, -1.411666474e-05f, -1.357780019e-05f, -1.303895029e-05f, -1.250011596e-05f, -1.196129813e-05f, -1.142249773e-05f,
--1.088371570e-05f, -1.034495296e-05f, -9.806210440e-06f, -9.267489075e-06f, -8.728789794e-06f, -8.190113526e-06f, -7.651461202e-06f, -7.112833751e-06f, -6.574232103e-06f, -6.035657188e-06f,
--5.497109934e-06f, -4.958591271e-06f, -4.420102129e-06f, -3.881643436e-06f, -3.343216121e-06f, -2.804821114e-06f, -2.266459342e-06f, -1.728131735e-06f, -1.189839222e-06f, -6.515827292e-07f,
--1.133631863e-07f, 4.248184788e-07f, 9.629613383e-07f, 1.501064464e-06f, 2.039126929e-06f, 2.577147805e-06f, 3.115126165e-06f, 3.653061082e-06f, 4.190951628e-06f, 4.728796876e-06f,
-5.266595900e-06f, 5.804347772e-06f, 6.342051567e-06f, 6.879706358e-06f, 7.417311219e-06f, 7.954865223e-06f, 8.492367444e-06f, 9.029816958e-06f, 9.567212837e-06f, 1.010455416e-05f,
-1.064183999e-05f, 1.117906942e-05f, 1.171624151e-05f, 1.225335534e-05f, 1.279040999e-05f, 1.332740452e-05f, 1.386433803e-05f, 1.440120957e-05f, 1.493801824e-05f, 1.547476310e-05f,
-1.601144323e-05f, 1.654805771e-05f, 1.708460561e-05f, 1.762108602e-05f, 1.815749800e-05f, 1.869384064e-05f, 1.923011301e-05f, 1.976631419e-05f, 2.030244326e-05f, 2.083849930e-05f,
-2.137448138e-05f, 2.191038859e-05f, 2.244621999e-05f, 2.298197468e-05f, 2.351765173e-05f, 2.405325021e-05f, 2.458876922e-05f, 2.512420782e-05f, 2.565956510e-05f, 2.619484013e-05f,
-2.673003201e-05f, 2.726513980e-05f, 2.780016259e-05f, 2.833509946e-05f, 2.886994949e-05f, 2.940471176e-05f, 2.993938536e-05f, 3.047396936e-05f, 3.100846284e-05f, 3.154286490e-05f,
-3.207717461e-05f, 3.261139105e-05f, 3.314551331e-05f, 3.367954047e-05f, 3.421347161e-05f, 3.474730582e-05f, 3.528104217e-05f, 3.581467977e-05f, 3.634821768e-05f, 3.688165499e-05f,
-3.741499079e-05f, 3.794822417e-05f, 3.848135420e-05f, 3.901437998e-05f, 3.954730058e-05f, 4.008011510e-05f, 4.061282262e-05f, 4.114542222e-05f, 4.167791301e-05f, 4.221029405e-05f,
-4.274256444e-05f, 4.327472326e-05f, 4.380676961e-05f, 4.433870257e-05f, 4.487052123e-05f, 4.540222467e-05f, 4.593381199e-05f, 4.646528228e-05f, 4.699663462e-05f, 4.752786811e-05f,
-4.805898183e-05f, 4.858997487e-05f, 4.912084633e-05f, 4.965159529e-05f, 5.018222085e-05f, 5.071272209e-05f, 5.124309811e-05f, 5.177334801e-05f, 5.230347086e-05f, 5.283346577e-05f,
-5.336333183e-05f, 5.389306812e-05f, 5.442267375e-05f, 5.495214781e-05f, 5.548148938e-05f, 5.601069757e-05f, 5.653977147e-05f, 5.706871017e-05f, 5.759751277e-05f, 5.812617836e-05f,
-5.865470604e-05f, 5.918309490e-05f, 5.971134405e-05f, 6.023945257e-05f, 6.076741957e-05f, 6.129524413e-05f, 6.182292537e-05f, 6.235046237e-05f, 6.287785423e-05f, 6.340510006e-05f,
-6.393219894e-05f, 6.445914999e-05f, 6.498595229e-05f, 6.551260495e-05f, 6.603910708e-05f, 6.656545776e-05f, 6.709165609e-05f, 6.761770119e-05f, 6.814359215e-05f, 6.866932807e-05f,
-6.919490806e-05f, 6.972033121e-05f, 7.024559663e-05f, 7.077070343e-05f, 7.129565070e-05f, 7.182043754e-05f, 7.234506307e-05f, 7.286952639e-05f, 7.339382660e-05f, 7.391796280e-05f,
-7.444193411e-05f, 7.496573962e-05f, 7.548937845e-05f, 7.601284969e-05f, 7.653615246e-05f, 7.705928587e-05f, 7.758224901e-05f, 7.810504101e-05f, 7.862766096e-05f, 7.915010797e-05f,
-7.967238116e-05f, 8.019447963e-05f, 8.071640249e-05f, 8.123814885e-05f, 8.175971783e-05f, 8.228110853e-05f, 8.280232006e-05f, 8.332335154e-05f, 8.384420208e-05f, 8.436487078e-05f,
-8.488535677e-05f, 8.540565915e-05f, 8.592577704e-05f, 8.644570956e-05f, 8.696545580e-05f, 8.748501490e-05f, 8.800438596e-05f, 8.852356810e-05f, 8.904256044e-05f, 8.956136209e-05f,
-9.007997217e-05f, 9.059838979e-05f, 9.111661408e-05f, 9.163464414e-05f, 9.215247910e-05f, 9.267011808e-05f, 9.318756019e-05f, 9.370480456e-05f, 9.422185030e-05f, 9.473869653e-05f,
-9.525534237e-05f, 9.577178695e-05f, 9.628802939e-05f, 9.680406880e-05f, 9.731990432e-05f, 9.783553505e-05f, 9.835096013e-05f, 9.886617868e-05f, 9.938118981e-05f, 9.989599267e-05f,
-1.004105864e-04f, 1.009249700e-04f, 1.014391428e-04f, 1.019531037e-04f, 1.024668520e-04f, 1.029803868e-04f, 1.034937072e-04f, 1.040068123e-04f, 1.045197012e-04f, 1.050323732e-04f,
-1.055448272e-04f, 1.060570625e-04f, 1.065690781e-04f, 1.070808733e-04f, 1.075924470e-04f, 1.081037986e-04f, 1.086149270e-04f, 1.091258315e-04f, 1.096365111e-04f, 1.101469649e-04f,
-1.106571923e-04f, 1.111671921e-04f, 1.116769637e-04f, 1.121865061e-04f, 1.126958184e-04f, 1.132048998e-04f, 1.137137495e-04f, 1.142223665e-04f, 1.147307501e-04f, 1.152388993e-04f,
-1.157468132e-04f, 1.162544911e-04f, 1.167619320e-04f, 1.172691352e-04f, 1.177760996e-04f, 1.182828246e-04f, 1.187893092e-04f, 1.192955525e-04f, 1.198015537e-04f, 1.203073120e-04f,
-1.208128264e-04f, 1.213180962e-04f, 1.218231204e-04f, 1.223278983e-04f, 1.228324289e-04f, 1.233367114e-04f, 1.238407450e-04f, 1.243445288e-04f, 1.248480619e-04f, 1.253513435e-04f,
-1.258543728e-04f, 1.263571488e-04f, 1.268596708e-04f, 1.273619378e-04f, 1.278639491e-04f, 1.283657037e-04f, 1.288672009e-04f, 1.293684398e-04f, 1.298694195e-04f, 1.303701392e-04f,
-1.308705981e-04f, 1.313707952e-04f, 1.318707298e-04f, 1.323704010e-04f, 1.328698080e-04f, 1.333689498e-04f, 1.338678257e-04f, 1.343664349e-04f, 1.348647764e-04f, 1.353628495e-04f,
-1.358606532e-04f, 1.363581868e-04f, 1.368554495e-04f, 1.373524402e-04f, 1.378491584e-04f, 1.383456030e-04f, 1.388417732e-04f, 1.393376683e-04f, 1.398332874e-04f, 1.403286296e-04f,
-1.408236941e-04f, 1.413184800e-04f, 1.418129866e-04f, 1.423072130e-04f, 1.428011583e-04f, 1.432948218e-04f, 1.437882025e-04f, 1.442812997e-04f, 1.447741126e-04f, 1.452666402e-04f,
-1.457588818e-04f, 1.462508365e-04f, 1.467425035e-04f, 1.472338820e-04f, 1.477249711e-04f, 1.482157701e-04f, 1.487062780e-04f, 1.491964941e-04f, 1.496864175e-04f, 1.501760474e-04f,
-1.506653830e-04f, 1.511544234e-04f, 1.516431679e-04f, 1.521316156e-04f, 1.526197656e-04f, 1.531076172e-04f, 1.535951696e-04f, 1.540824218e-04f, 1.545693732e-04f, 1.550560228e-04f,
-1.555423698e-04f, 1.560284135e-04f, 1.565141530e-04f, 1.569995875e-04f, 1.574847162e-04f, 1.579695382e-04f, 1.584540528e-04f, 1.589382591e-04f, 1.594221563e-04f, 1.599057436e-04f,
-1.603890202e-04f, 1.608719852e-04f, 1.613546379e-04f, 1.618369774e-04f, 1.623190030e-04f, 1.628007138e-04f, 1.632821090e-04f, 1.637631878e-04f, 1.642439493e-04f, 1.647243929e-04f,
-1.652045176e-04f, 1.656843227e-04f, 1.661638074e-04f, 1.666429708e-04f, 1.671218121e-04f, 1.676003306e-04f, 1.680785254e-04f, 1.685563957e-04f, 1.690339408e-04f, 1.695111598e-04f,
-1.699880519e-04f, 1.704646163e-04f, 1.709408523e-04f, 1.714167589e-04f, 1.718923355e-04f, 1.723675812e-04f, 1.728424952e-04f, 1.733170768e-04f, 1.737913251e-04f, 1.742652393e-04f,
-1.747388186e-04f, 1.752120623e-04f, 1.756849695e-04f, 1.761575395e-04f, 1.766297715e-04f, 1.771016646e-04f, 1.775732180e-04f, 1.780444311e-04f, 1.785153029e-04f, 1.789858328e-04f,
-1.794560198e-04f, 1.799258633e-04f, 1.803953625e-04f, 1.808645164e-04f, 1.813333244e-04f, 1.818017857e-04f, 1.822698995e-04f, 1.827376650e-04f, 1.832050814e-04f, 1.836721480e-04f,
-1.841388639e-04f, 1.846052284e-04f, 1.850712406e-04f, 1.855368999e-04f, 1.860022054e-04f, 1.864671563e-04f, 1.869317519e-04f, 1.873959915e-04f, 1.878598741e-04f, 1.883233990e-04f,
-1.887865656e-04f, 1.892493729e-04f, 1.897118202e-04f, 1.901739067e-04f, 1.906356317e-04f, 1.910969945e-04f, 1.915579941e-04f, 1.920186299e-04f, 1.924789010e-04f, 1.929388068e-04f,
-1.933983463e-04f, 1.938575190e-04f, 1.943163240e-04f, 1.947747605e-04f, 1.952328277e-04f, 1.956905250e-04f, 1.961478515e-04f, 1.966048064e-04f, 1.970613891e-04f, 1.975175987e-04f,
-1.979734345e-04f, 1.984288957e-04f, 1.988839816e-04f, 1.993386913e-04f, 1.997930242e-04f, 2.002469795e-04f, 2.007005564e-04f, 2.011537542e-04f, 2.016065720e-04f, 2.020590093e-04f,
-2.025110651e-04f, 2.029627387e-04f, 2.034140295e-04f, 2.038649366e-04f, 2.043154592e-04f, 2.047655967e-04f, 2.052153483e-04f, 2.056647132e-04f, 2.061136906e-04f, 2.065622799e-04f,
-2.070104803e-04f, 2.074582910e-04f, 2.079057113e-04f, 2.083527404e-04f, 2.087993777e-04f, 2.092456223e-04f, 2.096914735e-04f, 2.101369305e-04f, 2.105819927e-04f, 2.110266592e-04f,
-2.114709294e-04f, 2.119148025e-04f, 2.123582778e-04f, 2.128013544e-04f, 2.132440318e-04f, 2.136863091e-04f, 2.141281856e-04f, 2.145696606e-04f, 2.150107333e-04f, 2.154514030e-04f,
-2.158916690e-04f, 2.163315305e-04f, 2.167709869e-04f, 2.172100373e-04f, 2.176486810e-04f, 2.180869174e-04f, 2.185247456e-04f, 2.189621651e-04f, 2.193991749e-04f, 2.198357744e-04f,
-2.202719630e-04f, 2.207077397e-04f, 2.211431040e-04f, 2.215780551e-04f, 2.220125923e-04f, 2.224467149e-04f, 2.228804221e-04f, 2.233137132e-04f, 2.237465875e-04f, 2.241790443e-04f,
-2.246110828e-04f, 2.250427024e-04f, 2.254739023e-04f, 2.259046818e-04f, 2.263350402e-04f, 2.267649768e-04f, 2.271944909e-04f, 2.276235817e-04f, 2.280522486e-04f, 2.284804908e-04f,
-2.289083076e-04f, 2.293356983e-04f, 2.297626623e-04f, 2.301891987e-04f, 2.306153069e-04f, 2.310409862e-04f, 2.314662359e-04f, 2.318910552e-04f, 2.323154435e-04f, 2.327394001e-04f,
-2.331629242e-04f, 2.335860152e-04f, 2.340086724e-04f, 2.344308950e-04f, 2.348526824e-04f, 2.352740338e-04f, 2.356949486e-04f, 2.361154260e-04f, 2.365354654e-04f, 2.369550661e-04f,
-2.373742274e-04f, 2.377929486e-04f, 2.382112289e-04f, 2.386290678e-04f, 2.390464645e-04f, 2.394634182e-04f, 2.398799285e-04f, 2.402959944e-04f, 2.407116154e-04f, 2.411267908e-04f,
-2.415415199e-04f, 2.419558019e-04f, 2.423696363e-04f, 2.427830223e-04f, 2.431959592e-04f, 2.436084464e-04f, 2.440204831e-04f, 2.444320688e-04f, 2.448432027e-04f, 2.452538841e-04f,
-2.456641124e-04f, 2.460738869e-04f, 2.464832068e-04f, 2.468920716e-04f, 2.473004806e-04f, 2.477084331e-04f, 2.481159283e-04f, 2.485229657e-04f, 2.489295446e-04f, 2.493356642e-04f,
-2.497413240e-04f, 2.501465233e-04f, 2.505512613e-04f, 2.509555375e-04f, 2.513593511e-04f, 2.517627015e-04f, 2.521655880e-04f, 2.525680100e-04f, 2.529699668e-04f, 2.533714578e-04f,
-2.537724822e-04f, 2.541730394e-04f, 2.545731288e-04f, 2.549727497e-04f, 2.553719014e-04f, 2.557705833e-04f, 2.561687947e-04f, 2.565665350e-04f, 2.569638035e-04f, 2.573605996e-04f,
-2.577569226e-04f, 2.581527719e-04f, 2.585481467e-04f, 2.589430466e-04f, 2.593374707e-04f, 2.597314185e-04f, 2.601248893e-04f, 2.605178825e-04f, 2.609103973e-04f, 2.613024333e-04f,
-2.616939897e-04f, 2.620850659e-04f, 2.624756612e-04f, 2.628657751e-04f, 2.632554068e-04f, 2.636445557e-04f, 2.640332213e-04f, 2.644214027e-04f, 2.648090995e-04f, 2.651963110e-04f,
-2.655830365e-04f, 2.659692754e-04f, 2.663550271e-04f, 2.667402909e-04f, 2.671250662e-04f, 2.675093524e-04f, 2.678931489e-04f, 2.682764550e-04f, 2.686592701e-04f, 2.690415935e-04f,
-2.694234247e-04f, 2.698047630e-04f, 2.701856078e-04f, 2.705659584e-04f, 2.709458143e-04f, 2.713251748e-04f, 2.717040393e-04f, 2.720824072e-04f, 2.724602779e-04f, 2.728376506e-04f,
-2.732145250e-04f, 2.735909002e-04f, 2.739667757e-04f, 2.743421509e-04f, 2.747170252e-04f, 2.750913979e-04f, 2.754652685e-04f, 2.758386363e-04f, 2.762115007e-04f, 2.765838611e-04f,
-2.769557169e-04f, 2.773270676e-04f, 2.776979124e-04f, 2.780682508e-04f, 2.784380822e-04f, 2.788074059e-04f, 2.791762214e-04f, 2.795445281e-04f, 2.799123254e-04f, 2.802796127e-04f,
-2.806463893e-04f, 2.810126547e-04f, 2.813784082e-04f, 2.817436494e-04f, 2.821083775e-04f, 2.824725921e-04f, 2.828362924e-04f, 2.831994779e-04f, 2.835621481e-04f, 2.839243022e-04f,
-2.842859398e-04f, 2.846470603e-04f, 2.850076630e-04f, 2.853677474e-04f, 2.857273128e-04f, 2.860863588e-04f, 2.864448847e-04f, 2.868028899e-04f, 2.871603739e-04f, 2.875173360e-04f,
-2.878737757e-04f, 2.882296925e-04f, 2.885850856e-04f, 2.889399546e-04f, 2.892942989e-04f, 2.896481179e-04f, 2.900014111e-04f, 2.903541778e-04f, 2.907064174e-04f, 2.910581295e-04f,
-2.914093134e-04f, 2.917599686e-04f, 2.921100945e-04f, 2.924596905e-04f, 2.928087561e-04f, 2.931572907e-04f, 2.935052937e-04f, 2.938527646e-04f, 2.941997028e-04f, 2.945461077e-04f,
-2.948919788e-04f, 2.952373156e-04f, 2.955821174e-04f, 2.959263837e-04f, 2.962701140e-04f, 2.966133077e-04f, 2.969559642e-04f, 2.972980830e-04f, 2.976396635e-04f, 2.979807052e-04f,
-2.983212075e-04f, 2.986611699e-04f, 2.990005918e-04f, 2.993394727e-04f, 2.996778120e-04f, 3.000156092e-04f, 3.003528638e-04f, 3.006895751e-04f, 3.010257427e-04f, 3.013613660e-04f,
-3.016964445e-04f, 3.020309776e-04f, 3.023649647e-04f, 3.026984055e-04f, 3.030312992e-04f, 3.033636454e-04f, 3.036954435e-04f, 3.040266930e-04f, 3.043573934e-04f, 3.046875441e-04f,
-3.050171447e-04f, 3.053461945e-04f, 3.056746930e-04f, 3.060026398e-04f, 3.063300342e-04f, 3.066568758e-04f, 3.069831640e-04f, 3.073088983e-04f, 3.076340782e-04f, 3.079587032e-04f,
-3.082827727e-04f, 3.086062862e-04f, 3.089292433e-04f, 3.092516432e-04f, 3.095734857e-04f, 3.098947701e-04f, 3.102154959e-04f, 3.105356627e-04f, 3.108552698e-04f, 3.111743168e-04f,
-3.114928032e-04f, 3.118107284e-04f, 3.121280920e-04f, 3.124448935e-04f, 3.127611323e-04f, 3.130768079e-04f, 3.133919198e-04f, 3.137064675e-04f, 3.140204506e-04f, 3.143338685e-04f,
-3.146467207e-04f, 3.149590066e-04f, 3.152707259e-04f, 3.155818780e-04f, 3.158924624e-04f, 3.162024787e-04f, 3.165119262e-04f, 3.168208046e-04f, 3.171291133e-04f, 3.174368518e-04f,
-3.177440197e-04f, 3.180506165e-04f, 3.183566416e-04f, 3.186620946e-04f, 3.189669749e-04f, 3.192712822e-04f, 3.195750159e-04f, 3.198781755e-04f, 3.201807606e-04f, 3.204827707e-04f,
-3.207842052e-04f, 3.210850637e-04f, 3.213853458e-04f, 3.216850509e-04f, 3.219841786e-04f, 3.222827284e-04f, 3.225806997e-04f, 3.228780923e-04f, 3.231749055e-04f, 3.234711389e-04f,
-3.237667920e-04f, 3.240618644e-04f, 3.243563556e-04f, 3.246502651e-04f, 3.249435925e-04f, 3.252363372e-04f, 3.255284989e-04f, 3.258200770e-04f, 3.261110712e-04f, 3.264014808e-04f,
-3.266913056e-04f, 3.269805449e-04f, 3.272691984e-04f, 3.275572657e-04f, 3.278447461e-04f, 3.281316393e-04f, 3.284179449e-04f, 3.287036624e-04f, 3.289887913e-04f, 3.292733311e-04f,
-3.295572815e-04f, 3.298406419e-04f, 3.301234120e-04f, 3.304055913e-04f, 3.306871793e-04f, 3.309681756e-04f, 3.312485797e-04f, 3.315283913e-04f, 3.318076098e-04f, 3.320862348e-04f,
-3.323642659e-04f, 3.326417026e-04f, 3.329185446e-04f, 3.331947913e-04f, 3.334704424e-04f, 3.337454973e-04f, 3.340199558e-04f, 3.342938172e-04f, 3.345670813e-04f, 3.348397475e-04f,
-3.351118155e-04f, 3.353832848e-04f, 3.356541549e-04f, 3.359244256e-04f, 3.361940962e-04f, 3.364631665e-04f, 3.367316360e-04f, 3.369995043e-04f, 3.372667709e-04f, 3.375334354e-04f,
-3.377994974e-04f, 3.380649566e-04f, 3.383298124e-04f, 3.385940645e-04f, 3.388577124e-04f, 3.391207558e-04f, 3.393831942e-04f, 3.396450272e-04f, 3.399062544e-04f, 3.401668754e-04f,
-3.404268897e-04f, 3.406862971e-04f, 3.409450970e-04f, 3.412032892e-04f, 3.414608730e-04f, 3.417178483e-04f, 3.419742145e-04f, 3.422299713e-04f, 3.424851182e-04f, 3.427396549e-04f,
-3.429935810e-04f, 3.432468960e-04f, 3.434995996e-04f, 3.437516915e-04f, 3.440031711e-04f, 3.442540381e-04f, 3.445042921e-04f, 3.447539328e-04f, 3.450029596e-04f, 3.452513724e-04f,
-3.454991706e-04f, 3.457463538e-04f, 3.459929218e-04f, 3.462388741e-04f, 3.464842103e-04f, 3.467289300e-04f, 3.469730329e-04f, 3.472165187e-04f, 3.474593868e-04f, 3.477016369e-04f,
-3.479432688e-04f, 3.481842819e-04f, 3.484246759e-04f, 3.486644505e-04f, 3.489036053e-04f, 3.491421398e-04f, 3.493800538e-04f, 3.496173469e-04f, 3.498540186e-04f, 3.500900687e-04f,
-3.503254968e-04f, 3.505603025e-04f, 3.507944854e-04f, 3.510280452e-04f, 3.512609816e-04f, 3.514932941e-04f, 3.517249824e-04f, 3.519560462e-04f, 3.521864851e-04f, 3.524162987e-04f,
-3.526454868e-04f, 3.528740488e-04f, 3.531019846e-04f, 3.533292937e-04f, 3.535559758e-04f, 3.537820305e-04f, 3.540074576e-04f, 3.542322566e-04f, 3.544564272e-04f, 3.546799690e-04f,
-3.549028818e-04f, 3.551251652e-04f, 3.553468188e-04f, 3.555678424e-04f, 3.557882355e-04f, 3.560079978e-04f, 3.562271290e-04f, 3.564456288e-04f, 3.566634969e-04f, 3.568807328e-04f,
-3.570973363e-04f, 3.573133070e-04f, 3.575286446e-04f, 3.577433489e-04f, 3.579574193e-04f, 3.581708557e-04f, 3.583836577e-04f, 3.585958250e-04f, 3.588073573e-04f, 3.590182542e-04f,
-3.592285154e-04f, 3.594381406e-04f, 3.596471296e-04f, 3.598554818e-04f, 3.600631972e-04f, 3.602702753e-04f, 3.604767158e-04f, 3.606825184e-04f, 3.608876828e-04f, 3.610922087e-04f,
-3.612960959e-04f, 3.614993438e-04f, 3.617019524e-04f, 3.619039213e-04f, 3.621052501e-04f, 3.623059385e-04f, 3.625059864e-04f, 3.627053933e-04f, 3.629041589e-04f, 3.631022830e-04f,
-3.632997653e-04f, 3.634966055e-04f, 3.636928032e-04f, 3.638883583e-04f, 3.640832703e-04f, 3.642775390e-04f, 3.644711641e-04f, 3.646641453e-04f, 3.648564824e-04f, 3.650481750e-04f,
-3.652392229e-04f, 3.654296258e-04f, 3.656193833e-04f, 3.658084953e-04f, 3.659969614e-04f, 3.661847813e-04f, 3.663719548e-04f, 3.665584816e-04f, 3.667443614e-04f, 3.669295939e-04f,
-3.671141790e-04f, 3.672981162e-04f, 3.674814053e-04f, 3.676640461e-04f, 3.678460382e-04f, 3.680273815e-04f, 3.682080756e-04f, 3.683881203e-04f, 3.685675153e-04f, 3.687462604e-04f,
-3.689243552e-04f, 3.691017996e-04f, 3.692785932e-04f, 3.694547358e-04f, 3.696302272e-04f, 3.698050670e-04f, 3.699792551e-04f, 3.701527912e-04f, 3.703256750e-04f, 3.704979063e-04f,
-3.706694847e-04f, 3.708404102e-04f, 3.710106824e-04f, 3.711803010e-04f, 3.713492659e-04f, 3.715175767e-04f, 3.716852333e-04f, 3.718522354e-04f, 3.720185827e-04f, 3.721842750e-04f,
-3.723493121e-04f, 3.725136938e-04f, 3.726774197e-04f, 3.728404897e-04f, 3.730029035e-04f, 3.731646609e-04f, 3.733257616e-04f, 3.734862055e-04f, 3.736459922e-04f, 3.738051216e-04f,
-3.739635935e-04f, 3.741214075e-04f, 3.742785635e-04f, 3.744350613e-04f, 3.745909006e-04f, 3.747460812e-04f, 3.749006029e-04f, 3.750544655e-04f, 3.752076687e-04f, 3.753602124e-04f,
-3.755120962e-04f, 3.756633201e-04f, 3.758138837e-04f, 3.759637869e-04f, 3.761130294e-04f, 3.762616111e-04f, 3.764095318e-04f, 3.765567911e-04f, 3.767033890e-04f, 3.768493252e-04f,
-3.769945995e-04f, 3.771392117e-04f, 3.772831616e-04f, 3.774264490e-04f, 3.775690737e-04f, 3.777110354e-04f, 3.778523341e-04f, 3.779929695e-04f, 3.781329414e-04f, 3.782722496e-04f,
-3.784108939e-04f, 3.785488742e-04f, 3.786861902e-04f, 3.788228417e-04f, 3.789588285e-04f, 3.790941506e-04f, 3.792288076e-04f, 3.793627994e-04f, 3.794961258e-04f, 3.796287867e-04f,
-3.797607818e-04f, 3.798921109e-04f, 3.800227740e-04f, 3.801527707e-04f, 3.802821010e-04f, 3.804107646e-04f, 3.805387614e-04f, 3.806660912e-04f, 3.807927538e-04f, 3.809187491e-04f,
-3.810440769e-04f, 3.811687370e-04f, 3.812927292e-04f, 3.814160535e-04f, 3.815387095e-04f, 3.816606972e-04f, 3.817820164e-04f, 3.819026669e-04f, 3.820226486e-04f, 3.821419613e-04f,
-3.822606048e-04f, 3.823785790e-04f, 3.824958838e-04f, 3.826125189e-04f, 3.827284843e-04f, 3.828437797e-04f, 3.829584051e-04f, 3.830723602e-04f, 3.831856449e-04f, 3.832982591e-04f,
-3.834102027e-04f, 3.835214754e-04f, 3.836320771e-04f, 3.837420078e-04f, 3.838512672e-04f, 3.839598552e-04f, 3.840677716e-04f, 3.841750164e-04f, 3.842815894e-04f, 3.843874904e-04f,
-3.844927194e-04f, 3.845972761e-04f, 3.847011605e-04f, 3.848043724e-04f, 3.849069117e-04f, 3.850087783e-04f, 3.851099720e-04f, 3.852104927e-04f, 3.853103403e-04f, 3.854095146e-04f,
-3.855080155e-04f, 3.856058430e-04f, 3.857029968e-04f, 3.857994770e-04f, 3.858952832e-04f, 3.859904155e-04f, 3.860848737e-04f, 3.861786577e-04f, 3.862717674e-04f, 3.863642027e-04f,
-3.864559634e-04f, 3.865470494e-04f, 3.866374607e-04f, 3.867271972e-04f, 3.868162586e-04f, 3.869046450e-04f, 3.869923562e-04f, 3.870793921e-04f, 3.871657526e-04f, 3.872514376e-04f,
-3.873364470e-04f, 3.874207807e-04f, 3.875044386e-04f, 3.875874206e-04f, 3.876697267e-04f, 3.877513566e-04f, 3.878323104e-04f, 3.879125880e-04f, 3.879921892e-04f, 3.880711139e-04f,
-3.881493621e-04f, 3.882269337e-04f, 3.883038286e-04f, 3.883800467e-04f, 3.884555879e-04f, 3.885304521e-04f, 3.886046394e-04f, 3.886781495e-04f, 3.887509824e-04f, 3.888231380e-04f,
-3.888946163e-04f, 3.889654172e-04f, 3.890355405e-04f, 3.891049863e-04f, 3.891737544e-04f, 3.892418449e-04f, 3.893092575e-04f, 3.893759923e-04f, 3.894420492e-04f, 3.895074280e-04f,
-3.895721289e-04f, 3.896361516e-04f, 3.896994961e-04f, 3.897621624e-04f, 3.898241504e-04f, 3.898854600e-04f, 3.899460913e-04f, 3.900060440e-04f, 3.900653182e-04f, 3.901239139e-04f,
-3.901818309e-04f, 3.902390692e-04f, 3.902956288e-04f, 3.903515096e-04f, 3.904067115e-04f, 3.904612346e-04f, 3.905150788e-04f, 3.905682439e-04f, 3.906207301e-04f, 3.906725372e-04f,
-3.907236652e-04f, 3.907741141e-04f, 3.908238837e-04f, 3.908729742e-04f, 3.909213854e-04f, 3.909691173e-04f, 3.910161699e-04f, 3.910625432e-04f, 3.911082370e-04f, 3.911532515e-04f,
-3.911975864e-04f, 3.912412420e-04f, 3.912842180e-04f, 3.913265144e-04f, 3.913681314e-04f, 3.914090687e-04f, 3.914493264e-04f, 3.914889046e-04f, 3.915278030e-04f, 3.915660219e-04f,
-3.916035610e-04f, 3.916404204e-04f, 3.916766002e-04f, 3.917121002e-04f, 3.917469205e-04f, 3.917810610e-04f, 3.918145218e-04f, 3.918473028e-04f, 3.918794040e-04f, 3.919108254e-04f,
-3.919415671e-04f, 3.919716289e-04f, 3.920010110e-04f, 3.920297132e-04f, 3.920577356e-04f, 3.920850783e-04f, 3.921117411e-04f, 3.921377242e-04f, 3.921630274e-04f, 3.921876509e-04f,
-3.922115945e-04f, 3.922348584e-04f, 3.922574426e-04f, 3.922793469e-04f, 3.923005715e-04f, 3.923211164e-04f, 3.923409815e-04f, 3.923601670e-04f, 3.923786727e-04f, 3.923964988e-04f,
-3.924136452e-04f, 3.924301119e-04f, 3.924458990e-04f, 3.924610066e-04f, 3.924754345e-04f, 3.924891829e-04f, 3.925022517e-04f, 3.925146411e-04f, 3.925263510e-04f, 3.925373814e-04f,
-3.925477324e-04f, 3.925574040e-04f, 3.925663962e-04f, 3.925747091e-04f, 3.925823427e-04f, 3.925892971e-04f, 3.925955723e-04f, 3.926011682e-04f, 3.926060850e-04f, 3.926103227e-04f,
-3.926138814e-04f, 3.926167610e-04f, 3.926189616e-04f, 3.926204833e-04f, 3.926213261e-04f, 3.926214901e-04f, 3.926209753e-04f, 3.926197817e-04f, 3.926179095e-04f, 3.926153586e-04f,
-3.926121291e-04f, 3.926082210e-04f, 3.926036345e-04f, 3.925983696e-04f, 3.925924263e-04f, 3.925858047e-04f, 3.925785048e-04f, 3.925705268e-04f, 3.925618706e-04f, 3.925525363e-04f,
-3.925425241e-04f, 3.925318339e-04f, 3.925204659e-04f, 3.925084201e-04f, 3.924956965e-04f, 3.924822953e-04f, 3.924682165e-04f, 3.924534601e-04f, 3.924380264e-04f, 3.924219152e-04f,
-3.924051268e-04f, 3.923876612e-04f, 3.923695184e-04f, 3.923506986e-04f, 3.923312018e-04f, 3.923110281e-04f, 3.922901776e-04f, 3.922686504e-04f, 3.922464465e-04f, 3.922235661e-04f,
-3.922000092e-04f, 3.921757760e-04f, 3.921508665e-04f, 3.921252807e-04f, 3.920990189e-04f, 3.920720810e-04f, 3.920444673e-04f, 3.920161777e-04f, 3.919872124e-04f, 3.919575715e-04f,
-3.919272550e-04f, 3.918962632e-04f, 3.918645960e-04f, 3.918322536e-04f, 3.917992361e-04f, 3.917655435e-04f, 3.917311761e-04f, 3.916961339e-04f, 3.916604170e-04f, 3.916240255e-04f,
-3.915869595e-04f, 3.915492192e-04f, 3.915108047e-04f, 3.914717160e-04f, 3.914319533e-04f, 3.913915167e-04f, 3.913504064e-04f, 3.913086223e-04f, 3.912661648e-04f, 3.912230338e-04f,
-3.911792296e-04f, 3.911347522e-04f, 3.910896017e-04f, 3.910437783e-04f, 3.909972821e-04f, 3.909501133e-04f, 3.909022719e-04f, 3.908537582e-04f, 3.908045721e-04f, 3.907547139e-04f,
-3.907041838e-04f, 3.906529817e-04f, 3.906011079e-04f, 3.905485626e-04f, 3.904953457e-04f, 3.904414576e-04f, 3.903868983e-04f, 3.903316679e-04f, 3.902757667e-04f, 3.902191947e-04f,
-3.901619521e-04f, 3.901040391e-04f, 3.900454557e-04f, 3.899862022e-04f, 3.899262787e-04f, 3.898656854e-04f, 3.898044223e-04f, 3.897424897e-04f, 3.896798877e-04f, 3.896166165e-04f,
-3.895526762e-04f, 3.894880669e-04f, 3.894227890e-04f, 3.893568424e-04f, 3.892902273e-04f, 3.892229440e-04f, 3.891549926e-04f, 3.890863732e-04f, 3.890170861e-04f, 3.889471313e-04f,
-3.888765091e-04f, 3.888052196e-04f, 3.887332630e-04f, 3.886606395e-04f, 3.885873492e-04f, 3.885133923e-04f, 3.884387690e-04f, 3.883634795e-04f, 3.882875239e-04f, 3.882109025e-04f,
-3.881336153e-04f, 3.880556627e-04f, 3.879770447e-04f, 3.878977615e-04f, 3.878178134e-04f, 3.877372005e-04f, 3.876559230e-04f, 3.875739811e-04f, 3.874913750e-04f, 3.874081049e-04f,
-3.873241709e-04f, 3.872395733e-04f, 3.871543122e-04f, 3.870683879e-04f, 3.869818005e-04f, 3.868945503e-04f, 3.868066373e-04f, 3.867180620e-04f, 3.866288243e-04f, 3.865389246e-04f,
-3.864483631e-04f, 3.863571399e-04f, 3.862652552e-04f, 3.861727093e-04f, 3.860795023e-04f, 3.859856346e-04f, 3.858911062e-04f, 3.857959173e-04f, 3.857000683e-04f, 3.856035593e-04f,
-3.855063906e-04f, 3.854085623e-04f, 3.853100746e-04f, 3.852109278e-04f, 3.851111221e-04f, 3.850106578e-04f, 3.849095349e-04f, 3.848077538e-04f, 3.847053147e-04f, 3.846022178e-04f,
-3.844984634e-04f, 3.843940516e-04f, 3.842889826e-04f, 3.841832568e-04f, 3.840768744e-04f, 3.839698355e-04f, 3.838621404e-04f, 3.837537893e-04f, 3.836447825e-04f, 3.835351202e-04f,
-3.834248027e-04f, 3.833138301e-04f, 3.832022028e-04f, 3.830899209e-04f, 3.829769847e-04f, 3.828633945e-04f, 3.827491504e-04f, 3.826342528e-04f, 3.825187018e-04f, 3.824024978e-04f,
-3.822856409e-04f, 3.821681315e-04f, 3.820499697e-04f, 3.819311558e-04f, 3.818116901e-04f, 3.816915729e-04f, 3.815708043e-04f, 3.814493846e-04f, 3.813273141e-04f, 3.812045931e-04f,
-3.810812218e-04f, 3.809572004e-04f, 3.808325292e-04f, 3.807072086e-04f, 3.805812387e-04f, 3.804546198e-04f, 3.803273522e-04f, 3.801994361e-04f, 3.800708718e-04f, 3.799416597e-04f,
-3.798117998e-04f, 3.796812926e-04f, 3.795501383e-04f, 3.794183372e-04f, 3.792858894e-04f, 3.791527955e-04f, 3.790190554e-04f, 3.788846697e-04f, 3.787496385e-04f, 3.786139622e-04f,
-3.784776409e-04f, 3.783406751e-04f, 3.782030649e-04f, 3.780648106e-04f, 3.779259126e-04f, 3.777863712e-04f, 3.776461865e-04f, 3.775053590e-04f, 3.773638888e-04f, 3.772217763e-04f,
-3.770790218e-04f, 3.769356256e-04f, 3.767915879e-04f, 3.766469091e-04f, 3.765015894e-04f, 3.763556292e-04f, 3.762090287e-04f, 3.760617882e-04f, 3.759139081e-04f, 3.757653887e-04f,
-3.756162302e-04f, 3.754664330e-04f, 3.753159973e-04f, 3.751649234e-04f, 3.750132118e-04f, 3.748608626e-04f, 3.747078762e-04f, 3.745542529e-04f, 3.743999930e-04f, 3.742450969e-04f,
-3.740895647e-04f, 3.739333969e-04f, 3.737765938e-04f, 3.736191556e-04f, 3.734610828e-04f, 3.733023755e-04f, 3.731430342e-04f, 3.729830592e-04f, 3.728224507e-04f, 3.726612091e-04f,
-3.724993348e-04f, 3.723368280e-04f, 3.721736891e-04f, 3.720099183e-04f, 3.718455161e-04f, 3.716804828e-04f, 3.715148187e-04f, 3.713485240e-04f, 3.711815993e-04f, 3.710140447e-04f,
-3.708458606e-04f, 3.706770474e-04f, 3.705076054e-04f, 3.703375350e-04f, 3.701668364e-04f, 3.699955100e-04f, 3.698235561e-04f, 3.696509752e-04f, 3.694777675e-04f, 3.693039334e-04f,
-3.691294732e-04f, 3.689543873e-04f, 3.687786760e-04f, 3.686023396e-04f, 3.684253786e-04f, 3.682477933e-04f, 3.680695840e-04f, 3.678907510e-04f, 3.677112948e-04f, 3.675312157e-04f,
-3.673505140e-04f, 3.671691901e-04f, 3.669872443e-04f, 3.668046771e-04f, 3.666214887e-04f, 3.664376796e-04f, 3.662532501e-04f, 3.660682005e-04f, 3.658825312e-04f, 3.656962427e-04f,
-3.655093352e-04f, 3.653218091e-04f, 3.651336648e-04f, 3.649449026e-04f, 3.647555230e-04f, 3.645655263e-04f, 3.643749129e-04f, 3.641836831e-04f, 3.639918373e-04f, 3.637993760e-04f,
-3.636062994e-04f, 3.634126079e-04f, 3.632183020e-04f, 3.630233820e-04f, 3.628278483e-04f, 3.626317013e-04f, 3.624349413e-04f, 3.622375688e-04f, 3.620395841e-04f, 3.618409876e-04f,
-3.616417797e-04f, 3.614419608e-04f, 3.612415312e-04f, 3.610404915e-04f, 3.608388419e-04f, 3.606365828e-04f, 3.604337147e-04f, 3.602302379e-04f, 3.600261529e-04f, 3.598214600e-04f,
-3.596161596e-04f, 3.594102521e-04f, 3.592037380e-04f, 3.589966175e-04f, 3.587888912e-04f, 3.585805595e-04f, 3.583716227e-04f, 3.581620812e-04f, 3.579519354e-04f, 3.577411858e-04f,
-3.575298327e-04f, 3.573178767e-04f, 3.571053179e-04f, 3.568921570e-04f, 3.566783943e-04f, 3.564640302e-04f, 3.562490651e-04f, 3.560334994e-04f, 3.558173336e-04f, 3.556005680e-04f,
-3.553832032e-04f, 3.551652394e-04f, 3.549466772e-04f, 3.547275169e-04f, 3.545077590e-04f, 3.542874039e-04f, 3.540664519e-04f, 3.538449037e-04f, 3.536227595e-04f, 3.534000197e-04f,
-3.531766849e-04f, 3.529527555e-04f, 3.527282318e-04f, 3.525031143e-04f, 3.522774035e-04f, 3.520510997e-04f, 3.518242035e-04f, 3.515967151e-04f, 3.513686352e-04f, 3.511399641e-04f,
-3.509107022e-04f, 3.506808500e-04f, 3.504504079e-04f, 3.502193764e-04f, 3.499877559e-04f, 3.497555469e-04f, 3.495227498e-04f, 3.492893650e-04f, 3.490553930e-04f, 3.488208342e-04f,
-3.485856891e-04f, 3.483499581e-04f, 3.481136417e-04f, 3.478767403e-04f, 3.476392545e-04f, 3.474011845e-04f, 3.471625309e-04f, 3.469232942e-04f, 3.466834748e-04f, 3.464430731e-04f,
-3.462020896e-04f, 3.459605248e-04f, 3.457183791e-04f, 3.454756530e-04f, 3.452323470e-04f, 3.449884614e-04f, 3.447439969e-04f, 3.444989538e-04f, 3.442533325e-04f, 3.440071337e-04f,
-3.437603576e-04f, 3.435130049e-04f, 3.432650760e-04f, 3.430165713e-04f, 3.427674913e-04f, 3.425178365e-04f, 3.422676073e-04f, 3.420168043e-04f, 3.417654279e-04f, 3.415134785e-04f,
-3.412609568e-04f, 3.410078630e-04f, 3.407541978e-04f, 3.404999615e-04f, 3.402451548e-04f, 3.399897780e-04f, 3.397338316e-04f, 3.394773161e-04f, 3.392202321e-04f, 3.389625799e-04f,
-3.387043601e-04f, 3.384455732e-04f, 3.381862196e-04f, 3.379262999e-04f, 3.376658145e-04f, 3.374047639e-04f, 3.371431486e-04f, 3.368809692e-04f, 3.366182260e-04f, 3.363549196e-04f,
-3.360910506e-04f, 3.358266193e-04f, 3.355616262e-04f, 3.352960720e-04f, 3.350299570e-04f, 3.347632819e-04f, 3.344960470e-04f, 3.342282528e-04f, 3.339599000e-04f, 3.336909890e-04f,
-3.334215202e-04f, 3.331514943e-04f, 3.328809117e-04f, 3.326097729e-04f, 3.323380784e-04f, 3.320658287e-04f, 3.317930244e-04f, 3.315196659e-04f, 3.312457538e-04f, 3.309712886e-04f,
-3.306962708e-04f, 3.304207009e-04f, 3.301445794e-04f, 3.298679069e-04f, 3.295906838e-04f, 3.293129107e-04f, 3.290345881e-04f, 3.287557165e-04f, 3.284762964e-04f, 3.281963285e-04f,
-3.279158131e-04f, 3.276347508e-04f, 3.273531421e-04f, 3.270709877e-04f, 3.267882879e-04f, 3.265050433e-04f, 3.262212544e-04f, 3.259369219e-04f, 3.256520461e-04f, 3.253666277e-04f,
-3.250806671e-04f, 3.247941650e-04f, 3.245071218e-04f, 3.242195380e-04f, 3.239314143e-04f, 3.236427511e-04f, 3.233535490e-04f, 3.230638085e-04f, 3.227735302e-04f, 3.224827145e-04f,
-3.221913621e-04f, 3.218994735e-04f, 3.216070492e-04f, 3.213140898e-04f, 3.210205958e-04f, 3.207265678e-04f, 3.204320063e-04f, 3.201369118e-04f, 3.198412849e-04f, 3.195451262e-04f,
-3.192484362e-04f, 3.189512154e-04f, 3.186534645e-04f, 3.183551839e-04f, 3.180563742e-04f, 3.177570359e-04f, 3.174571697e-04f, 3.171567761e-04f, 3.168558556e-04f, 3.165544088e-04f,
-3.162524363e-04f, 3.159499385e-04f, 3.156469162e-04f, 3.153433698e-04f, 3.150392998e-04f, 3.147347070e-04f, 3.144295917e-04f, 3.141239546e-04f, 3.138177963e-04f, 3.135111173e-04f,
-3.132039182e-04f, 3.128961996e-04f, 3.125879620e-04f, 3.122792060e-04f, 3.119699321e-04f, 3.116601410e-04f, 3.113498332e-04f, 3.110390093e-04f, 3.107276698e-04f, 3.104158154e-04f,
-3.101034466e-04f, 3.097905639e-04f, 3.094771681e-04f, 3.091632595e-04f, 3.088488389e-04f, 3.085339068e-04f, 3.082184638e-04f, 3.079025105e-04f, 3.075860474e-04f, 3.072690751e-04f,
-3.069515943e-04f, 3.066336054e-04f, 3.063151092e-04f, 3.059961061e-04f, 3.056765968e-04f, 3.053565818e-04f, 3.050360618e-04f, 3.047150373e-04f, 3.043935089e-04f, 3.040714773e-04f,
-3.037489429e-04f, 3.034259065e-04f, 3.031023685e-04f, 3.027783297e-04f, 3.024537905e-04f, 3.021287516e-04f, 3.018032136e-04f, 3.014771771e-04f, 3.011506427e-04f, 3.008236109e-04f,
-3.004960825e-04f, 3.001680579e-04f, 2.998395378e-04f, 2.995105227e-04f, 2.991810134e-04f, 2.988510104e-04f, 2.985205143e-04f, 2.981895257e-04f, 2.978580452e-04f, 2.975260734e-04f,
-2.971936110e-04f, 2.968606585e-04f, 2.965272166e-04f, 2.961932858e-04f, 2.958588669e-04f, 2.955239603e-04f, 2.951885667e-04f, 2.948526868e-04f, 2.945163211e-04f, 2.941794702e-04f,
-2.938421349e-04f, 2.935043156e-04f, 2.931660130e-04f, 2.928272278e-04f, 2.924879605e-04f, 2.921482117e-04f, 2.918079822e-04f, 2.914672725e-04f, 2.911260832e-04f, 2.907844150e-04f,
-2.904422685e-04f, 2.900996442e-04f, 2.897565430e-04f, 2.894129652e-04f, 2.890689117e-04f, 2.887243830e-04f, 2.883793798e-04f, 2.880339027e-04f, 2.876879522e-04f, 2.873415291e-04f,
-2.869946340e-04f, 2.866472675e-04f, 2.862994303e-04f, 2.859511229e-04f, 2.856023461e-04f, 2.852531004e-04f, 2.849033865e-04f, 2.845532051e-04f, 2.842025567e-04f, 2.838514420e-04f,
-2.834998617e-04f, 2.831478164e-04f, 2.827953067e-04f, 2.824423332e-04f, 2.820888967e-04f, 2.817349978e-04f, 2.813806371e-04f, 2.810258152e-04f, 2.806705329e-04f, 2.803147907e-04f,
-2.799585892e-04f, 2.796019293e-04f, 2.792448114e-04f, 2.788872363e-04f, 2.785292045e-04f, 2.781707169e-04f, 2.778117739e-04f, 2.774523763e-04f, 2.770925247e-04f, 2.767322197e-04f,
-2.763714621e-04f, 2.760102524e-04f, 2.756485914e-04f, 2.752864797e-04f, 2.749239179e-04f, 2.745609067e-04f, 2.741974468e-04f, 2.738335388e-04f, 2.734691834e-04f, 2.731043813e-04f,
-2.727391331e-04f, 2.723734394e-04f, 2.720073010e-04f, 2.716407185e-04f, 2.712736926e-04f, 2.709062239e-04f, 2.705383131e-04f, 2.701699609e-04f, 2.698011679e-04f, 2.694319349e-04f,
-2.690622624e-04f, 2.686921512e-04f, 2.683216019e-04f, 2.679506152e-04f, 2.675791917e-04f, 2.672073322e-04f, 2.668350373e-04f, 2.664623078e-04f, 2.660891441e-04f, 2.657155472e-04f,
-2.653415175e-04f, 2.649670558e-04f, 2.645921629e-04f, 2.642168392e-04f, 2.638410856e-04f, 2.634649027e-04f, 2.630882913e-04f, 2.627112519e-04f, 2.623337852e-04f, 2.619558920e-04f,
-2.615775729e-04f, 2.611988287e-04f, 2.608196599e-04f, 2.604400673e-04f, 2.600600516e-04f, 2.596796135e-04f, 2.592987536e-04f, 2.589174726e-04f, 2.585357713e-04f, 2.581536503e-04f,
-2.577711102e-04f, 2.573881519e-04f, 2.570047760e-04f, 2.566209831e-04f, 2.562367741e-04f, 2.558521495e-04f, 2.554671100e-04f, 2.550816564e-04f, 2.546957894e-04f, 2.543095096e-04f,
-2.539228178e-04f, 2.535357146e-04f, 2.531482008e-04f, 2.527602770e-04f, 2.523719440e-04f, 2.519832024e-04f, 2.515940530e-04f, 2.512044964e-04f, 2.508145334e-04f, 2.504241646e-04f,
-2.500333908e-04f, 2.496422126e-04f, 2.492506308e-04f, 2.488586462e-04f, 2.484662592e-04f, 2.480734708e-04f, 2.476802816e-04f, 2.472866923e-04f, 2.468927036e-04f, 2.464983162e-04f,
-2.461035309e-04f, 2.457083483e-04f, 2.453127692e-04f, 2.449167942e-04f, 2.445204242e-04f, 2.441236597e-04f, 2.437265016e-04f, 2.433289504e-04f, 2.429310071e-04f, 2.425326721e-04f,
-2.421339464e-04f, 2.417348306e-04f, 2.413353253e-04f, 2.409354314e-04f, 2.405351496e-04f, 2.401344805e-04f, 2.397334249e-04f, 2.393319836e-04f, 2.389301571e-04f, 2.385279463e-04f,
-2.381253519e-04f, 2.377223746e-04f, 2.373190152e-04f, 2.369152742e-04f, 2.365111526e-04f, 2.361066510e-04f, 2.357017701e-04f, 2.352965106e-04f, 2.348908734e-04f, 2.344848590e-04f,
-2.340784683e-04f, 2.336717020e-04f, 2.332645608e-04f, 2.328570454e-04f, 2.324491565e-04f, 2.320408950e-04f, 2.316322615e-04f, 2.312232568e-04f, 2.308138815e-04f, 2.304041365e-04f,
-2.299940225e-04f, 2.295835402e-04f, 2.291726903e-04f, 2.287614735e-04f, 2.283498907e-04f, 2.279379426e-04f, 2.275256298e-04f, 2.271129531e-04f, 2.266999134e-04f, 2.262865112e-04f,
-2.258727474e-04f, 2.254586227e-04f, 2.250441378e-04f, 2.246292934e-04f, 2.242140904e-04f, 2.237985295e-04f, 2.233826114e-04f, 2.229663368e-04f, 2.225497065e-04f, 2.221327212e-04f,
-2.217153818e-04f, 2.212976888e-04f, 2.208796432e-04f, 2.204612456e-04f, 2.200424968e-04f, 2.196233975e-04f, 2.192039484e-04f, 2.187841504e-04f, 2.183640042e-04f, 2.179435105e-04f,
-2.175226701e-04f, 2.171014838e-04f, 2.166799522e-04f, 2.162580762e-04f, 2.158358564e-04f, 2.154132937e-04f, 2.149903888e-04f, 2.145671425e-04f, 2.141435555e-04f, 2.137196286e-04f,
-2.132953625e-04f, 2.128707580e-04f, 2.124458159e-04f, 2.120205368e-04f, 2.115949217e-04f, 2.111689711e-04f, 2.107426860e-04f, 2.103160669e-04f, 2.098891148e-04f, 2.094618304e-04f,
-2.090342144e-04f, 2.086062676e-04f, 2.081779908e-04f, 2.077493847e-04f, 2.073204501e-04f, 2.068911878e-04f, 2.064615984e-04f, 2.060316829e-04f, 2.056014419e-04f, 2.051708763e-04f,
-2.047399867e-04f, 2.043087740e-04f, 2.038772389e-04f, 2.034453822e-04f, 2.030132047e-04f, 2.025807071e-04f, 2.021478903e-04f, 2.017147549e-04f, 2.012813018e-04f, 2.008475316e-04f,
-2.004134453e-04f, 1.999790436e-04f, 1.995443272e-04f, 1.991092969e-04f, 1.986739535e-04f, 1.982382978e-04f, 1.978023305e-04f, 1.973660524e-04f, 1.969294643e-04f, 1.964925671e-04f,
-1.960553613e-04f, 1.956178479e-04f, 1.951800276e-04f, 1.947419012e-04f, 1.943034694e-04f, 1.938647331e-04f, 1.934256930e-04f, 1.929863500e-04f, 1.925467047e-04f, 1.921067580e-04f,
-1.916665106e-04f, 1.912259634e-04f, 1.907851171e-04f, 1.903439725e-04f, 1.899025304e-04f, 1.894607915e-04f, 1.890187568e-04f, 1.885764268e-04f, 1.881338025e-04f, 1.876908846e-04f,
-1.872476739e-04f, 1.868041712e-04f, 1.863603773e-04f, 1.859162929e-04f, 1.854719189e-04f, 1.850272561e-04f, 1.845823051e-04f, 1.841370669e-04f, 1.836915422e-04f, 1.832457319e-04f,
-1.827996366e-04f, 1.823532572e-04f, 1.819065944e-04f, 1.814596492e-04f, 1.810124222e-04f, 1.805649143e-04f, 1.801171262e-04f, 1.796690588e-04f, 1.792207128e-04f, 1.787720891e-04f,
-1.783231884e-04f, 1.778740115e-04f, 1.774245592e-04f, 1.769748324e-04f, 1.765248318e-04f, 1.760745582e-04f, 1.756240124e-04f, 1.751731953e-04f, 1.747221075e-04f, 1.742707500e-04f,
-1.738191235e-04f, 1.733672288e-04f, 1.729150667e-04f, 1.724626380e-04f, 1.720099435e-04f, 1.715569841e-04f, 1.711037605e-04f, 1.706502735e-04f, 1.701965239e-04f, 1.697425126e-04f,
-1.692882403e-04f, 1.688337078e-04f, 1.683789160e-04f, 1.679238656e-04f, 1.674685575e-04f, 1.670129924e-04f, 1.665571712e-04f, 1.661010947e-04f, 1.656447636e-04f, 1.651881788e-04f,
-1.647313412e-04f, 1.642742514e-04f, 1.638169103e-04f, 1.633593188e-04f, 1.629014776e-04f, 1.624433875e-04f, 1.619850494e-04f, 1.615264640e-04f, 1.610676322e-04f, 1.606085548e-04f,
-1.601492325e-04f, 1.596896663e-04f, 1.592298569e-04f, 1.587698051e-04f, 1.583095118e-04f, 1.578489777e-04f, 1.573882037e-04f, 1.569271905e-04f, 1.564659391e-04f, 1.560044501e-04f,
-1.555427245e-04f, 1.550807631e-04f, 1.546185666e-04f, 1.541561358e-04f, 1.536934717e-04f, 1.532305749e-04f, 1.527674464e-04f, 1.523040869e-04f, 1.518404973e-04f, 1.513766784e-04f,
-1.509126309e-04f, 1.504483558e-04f, 1.499838538e-04f, 1.495191258e-04f, 1.490541725e-04f, 1.485889948e-04f, 1.481235935e-04f, 1.476579695e-04f, 1.471921235e-04f, 1.467260564e-04f,
-1.462597690e-04f, 1.457932621e-04f, 1.453265366e-04f, 1.448595932e-04f, 1.443924328e-04f, 1.439250562e-04f, 1.434574643e-04f, 1.429896578e-04f, 1.425216376e-04f, 1.420534045e-04f,
-1.415849594e-04f, 1.411163030e-04f, 1.406474362e-04f, 1.401783598e-04f, 1.397090746e-04f, 1.392395815e-04f, 1.387698813e-04f, 1.382999748e-04f, 1.378298629e-04f, 1.373595463e-04f,
-1.368890259e-04f, 1.364183026e-04f, 1.359473771e-04f, 1.354762503e-04f, 1.350049230e-04f, 1.345333960e-04f, 1.340616702e-04f, 1.335897465e-04f, 1.331176255e-04f, 1.326453082e-04f,
-1.321727955e-04f, 1.317000880e-04f, 1.312271867e-04f, 1.307540924e-04f, 1.302808059e-04f, 1.298073281e-04f, 1.293336598e-04f, 1.288598017e-04f, 1.283857548e-04f, 1.279115200e-04f,
-1.274370979e-04f, 1.269624895e-04f, 1.264876955e-04f, 1.260127169e-04f, 1.255375545e-04f, 1.250622090e-04f, 1.245866814e-04f, 1.241109724e-04f, 1.236350829e-04f, 1.231590137e-04f,
-1.226827658e-04f, 1.222063398e-04f, 1.217297366e-04f, 1.212529572e-04f, 1.207760022e-04f, 1.202988726e-04f, 1.198215692e-04f, 1.193440929e-04f, 1.188664444e-04f, 1.183886246e-04f,
-1.179106343e-04f, 1.174324744e-04f, 1.169541458e-04f, 1.164756492e-04f, 1.159969855e-04f, 1.155181555e-04f, 1.150391601e-04f, 1.145600002e-04f, 1.140806765e-04f, 1.136011899e-04f,
-1.131215412e-04f, 1.126417313e-04f, 1.121617611e-04f, 1.116816313e-04f, 1.112013428e-04f, 1.107208965e-04f, 1.102402931e-04f, 1.097595336e-04f, 1.092786188e-04f, 1.087975494e-04f,
-1.083163265e-04f, 1.078349507e-04f, 1.073534230e-04f, 1.068717442e-04f, 1.063899151e-04f, 1.059079366e-04f, 1.054258096e-04f, 1.049435348e-04f, 1.044611131e-04f, 1.039785453e-04f,
-1.034958324e-04f, 1.030129751e-04f, 1.025299743e-04f, 1.020468308e-04f, 1.015635456e-04f, 1.010801193e-04f, 1.005965529e-04f, 1.001128473e-04f, 9.962900322e-05f, 9.914502155e-05f,
-9.866090315e-05f, 9.817664885e-05f, 9.769225951e-05f, 9.720773598e-05f, 9.672307909e-05f, 9.623828970e-05f, 9.575336866e-05f, 9.526831681e-05f, 9.478313501e-05f, 9.429782410e-05f,
-9.381238492e-05f, 9.332681833e-05f, 9.284112518e-05f, 9.235530632e-05f, 9.186936258e-05f, 9.138329484e-05f, 9.089710392e-05f, 9.041079069e-05f, 8.992435599e-05f, 8.943780068e-05f,
-8.895112559e-05f, 8.846433159e-05f, 8.797741952e-05f, 8.749039024e-05f, 8.700324459e-05f, 8.651598342e-05f, 8.602860759e-05f, 8.554111795e-05f, 8.505351535e-05f, 8.456580063e-05f,
-8.407797465e-05f, 8.359003827e-05f, 8.310199233e-05f, 8.261383769e-05f, 8.212557519e-05f, 8.163720569e-05f, 8.114873005e-05f, 8.066014911e-05f, 8.017146372e-05f, 7.968267475e-05f,
-7.919378304e-05f, 7.870478944e-05f, 7.821569481e-05f, 7.772650000e-05f, 7.723720586e-05f, 7.674781325e-05f, 7.625832302e-05f, 7.576873602e-05f, 7.527905312e-05f, 7.478927515e-05f,
-7.429940297e-05f, 7.380943745e-05f, 7.331937943e-05f, 7.282922976e-05f, 7.233898931e-05f, 7.184865892e-05f, 7.135823945e-05f, 7.086773175e-05f, 7.037713669e-05f, 6.988645510e-05f,
-6.939568786e-05f, 6.890483580e-05f, 6.841389979e-05f, 6.792288069e-05f, 6.743177934e-05f, 6.694059661e-05f, 6.644933334e-05f, 6.595799040e-05f, 6.546656864e-05f, 6.497506891e-05f,
-6.448349207e-05f, 6.399183897e-05f, 6.350011048e-05f, 6.300830744e-05f, 6.251643071e-05f, 6.202448115e-05f, 6.153245962e-05f, 6.104036697e-05f, 6.054820405e-05f, 6.005597173e-05f,
-5.956367085e-05f, 5.907130228e-05f, 5.857886687e-05f, 5.808636548e-05f, 5.759379896e-05f, 5.710116817e-05f, 5.660847397e-05f, 5.611571721e-05f, 5.562289875e-05f, 5.513001945e-05f,
-5.463708016e-05f, 5.414408174e-05f, 5.365102505e-05f, 5.315791094e-05f, 5.266474027e-05f, 5.217151390e-05f, 5.167823268e-05f, 5.118489748e-05f, 5.069150914e-05f, 5.019806853e-05f,
-4.970457650e-05f, 4.921103391e-05f, 4.871744161e-05f, 4.822380047e-05f, 4.773011134e-05f, 4.723637508e-05f, 4.674259254e-05f, 4.624876458e-05f, 4.575489207e-05f, 4.526097585e-05f,
-4.476701678e-05f, 4.427301573e-05f, 4.377897354e-05f, 4.328489108e-05f, 4.279076920e-05f, 4.229660876e-05f, 4.180241062e-05f, 4.130817564e-05f, 4.081390467e-05f, 4.031959856e-05f,
-3.982525819e-05f, 3.933088439e-05f, 3.883647804e-05f, 3.834203999e-05f, 3.784757109e-05f, 3.735307221e-05f, 3.685854420e-05f, 3.636398792e-05f, 3.586940422e-05f, 3.537479396e-05f,
-3.488015800e-05f, 3.438549720e-05f, 3.389081241e-05f, 3.339610450e-05f, 3.290137431e-05f, 3.240662271e-05f, 3.191185055e-05f, 3.141705869e-05f, 3.092224799e-05f, 3.042741930e-05f,
-2.993257348e-05f, 2.943771139e-05f, 2.894283388e-05f, 2.844794181e-05f, 2.795303605e-05f, 2.745811743e-05f, 2.696318683e-05f, 2.646824510e-05f, 2.597329310e-05f, 2.547833167e-05f,
-2.498336168e-05f, 2.448838399e-05f, 2.399339945e-05f, 2.349840892e-05f, 2.300341325e-05f, 2.250841331e-05f, 2.201340994e-05f, 2.151840400e-05f, 2.102339635e-05f, 2.052838785e-05f,
-2.003337935e-05f, 1.953837171e-05f, 1.904336578e-05f, 1.854836242e-05f, 1.805336249e-05f, 1.755836684e-05f, 1.706337632e-05f, 1.656839180e-05f, 1.607341412e-05f, 1.557844415e-05f,
-1.508348274e-05f, 1.458853074e-05f, 1.409358901e-05f, 1.359865840e-05f, 1.310373978e-05f, 1.260883399e-05f, 1.211394189e-05f, 1.161906433e-05f, 1.112420217e-05f, 1.062935626e-05f,
-1.013452747e-05f, 9.639716633e-06f, 9.144924616e-06f, 8.650152270e-06f, 8.155400450e-06f, 7.660670009e-06f, 7.165961802e-06f, 6.671276683e-06f, 6.176615505e-06f, 5.681979122e-06f,
-5.187368387e-06f, 4.692784154e-06f, 4.198227277e-06f, 3.703698609e-06f, 3.209199003e-06f, 2.714729311e-06f, 2.220290387e-06f, 1.725883084e-06f, 1.231508254e-06f, 7.371667506e-07f,
-2.428594252e-07f, -2.514128695e-07f, -7.456492812e-07f, -1.239848958e-06f, -1.734011047e-06f, -2.228134698e-06f, -2.722219058e-06f, -3.216263276e-06f, -3.710266500e-06f, -4.204227879e-06f,
--4.698146562e-06f, -5.192021698e-06f, -5.685852436e-06f, -6.179637924e-06f, -6.673377313e-06f, -7.167069752e-06f, -7.660714390e-06f, -8.154310378e-06f, -8.647856865e-06f, -9.141353001e-06f,
--9.634797937e-06f, -1.012819082e-05f, -1.062153081e-05f, -1.111481704e-05f, -1.160804868e-05f, -1.210122488e-05f, -1.259434477e-05f, -1.308740752e-05f, -1.358041228e-05f, -1.407335820e-05f,
--1.456624442e-05f, -1.505907011e-05f, -1.555183441e-05f, -1.604453648e-05f, -1.653717547e-05f, -1.702975053e-05f, -1.752226081e-05f, -1.801470547e-05f, -1.850708366e-05f, -1.899939454e-05f,
--1.949163725e-05f, -1.998381095e-05f, -2.047591480e-05f, -2.096794795e-05f, -2.145990955e-05f, -2.195179876e-05f, -2.244361472e-05f, -2.293535661e-05f, -2.342702357e-05f, -2.391861475e-05f,
--2.441012932e-05f, -2.490156642e-05f, -2.539292522e-05f, -2.588420486e-05f, -2.637540451e-05f, -2.686652333e-05f, -2.735756046e-05f, -2.784851506e-05f, -2.833938630e-05f, -2.883017333e-05f,
--2.932087530e-05f, -2.981149138e-05f, -3.030202072e-05f, -3.079246248e-05f, -3.128281581e-05f, -3.177307989e-05f, -3.226325385e-05f, -3.275333687e-05f, -3.324332811e-05f, -3.373322671e-05f,
--3.422303185e-05f, -3.471274267e-05f, -3.520235835e-05f, -3.569187804e-05f, -3.618130090e-05f, -3.667062609e-05f, -3.715985278e-05f, -3.764898012e-05f, -3.813800727e-05f, -3.862693341e-05f,
--3.911575767e-05f, -3.960447924e-05f, -4.009309728e-05f, -4.058161094e-05f, -4.107001938e-05f, -4.155832178e-05f, -4.204651729e-05f, -4.253460508e-05f, -4.302258431e-05f, -4.351045414e-05f,
--4.399821374e-05f, -4.448586228e-05f, -4.497339892e-05f, -4.546082282e-05f, -4.594813314e-05f, -4.643532906e-05f, -4.692240975e-05f, -4.740937435e-05f, -4.789622205e-05f, -4.838295201e-05f,
--4.886956339e-05f, -4.935605536e-05f, -4.984242710e-05f, -5.032867776e-05f, -5.081480651e-05f, -5.130081253e-05f, -5.178669498e-05f, -5.227245303e-05f, -5.275808585e-05f, -5.324359261e-05f,
--5.372897247e-05f, -5.421422461e-05f, -5.469934820e-05f, -5.518434241e-05f, -5.566920640e-05f, -5.615393935e-05f, -5.663854044e-05f, -5.712300882e-05f, -5.760734368e-05f, -5.809154418e-05f,
--5.857560950e-05f, -5.905953882e-05f, -5.954333129e-05f, -6.002698610e-05f, -6.051050242e-05f, -6.099387943e-05f, -6.147711629e-05f, -6.196021219e-05f, -6.244316629e-05f, -6.292597777e-05f,
--6.340864582e-05f, -6.389116959e-05f, -6.437354827e-05f, -6.485578104e-05f, -6.533786707e-05f, -6.581980554e-05f, -6.630159563e-05f, -6.678323650e-05f, -6.726472735e-05f, -6.774606735e-05f,
--6.822725567e-05f, -6.870829151e-05f, -6.918917402e-05f, -6.966990241e-05f, -7.015047583e-05f, -7.063089348e-05f, -7.111115454e-05f, -7.159125818e-05f, -7.207120359e-05f, -7.255098995e-05f,
--7.303061644e-05f, -7.351008224e-05f, -7.398938653e-05f, -7.446852850e-05f, -7.494750733e-05f, -7.542632221e-05f, -7.590497231e-05f, -7.638345683e-05f, -7.686177494e-05f, -7.733992583e-05f,
--7.781790869e-05f, -7.829572270e-05f, -7.877336704e-05f, -7.925084091e-05f, -7.972814349e-05f, -8.020527397e-05f, -8.068223153e-05f, -8.115901536e-05f, -8.163562466e-05f, -8.211205860e-05f,
--8.258831638e-05f, -8.306439718e-05f, -8.354030020e-05f, -8.401602462e-05f, -8.449156964e-05f, -8.496693445e-05f, -8.544211823e-05f, -8.591712018e-05f, -8.639193949e-05f, -8.686657535e-05f,
--8.734102696e-05f, -8.781529350e-05f, -8.828937417e-05f, -8.876326817e-05f, -8.923697468e-05f, -8.971049291e-05f, -9.018382204e-05f, -9.065696127e-05f, -9.112990980e-05f, -9.160266682e-05f,
--9.207523153e-05f, -9.254760313e-05f, -9.301978080e-05f, -9.349176376e-05f, -9.396355120e-05f, -9.443514231e-05f, -9.490653630e-05f, -9.537773236e-05f, -9.584872969e-05f, -9.631952749e-05f,
--9.679012497e-05f, -9.726052132e-05f, -9.773071575e-05f, -9.820070745e-05f, -9.867049563e-05f, -9.914007948e-05f, -9.960945822e-05f, -1.000786311e-04f, -1.005475972e-04f, -1.010163558e-04f,
--1.014849061e-04f, -1.019532473e-04f, -1.024213786e-04f, -1.028892992e-04f, -1.033570084e-04f, -1.038245052e-04f, -1.042917890e-04f, -1.047588590e-04f, -1.052257143e-04f, -1.056923541e-04f,
--1.061587777e-04f, -1.066249843e-04f, -1.070909730e-04f, -1.075567432e-04f, -1.080222939e-04f, -1.084876245e-04f, -1.089527341e-04f, -1.094176219e-04f, -1.098822871e-04f, -1.103467291e-04f,
--1.108109469e-04f, -1.112749397e-04f, -1.117387069e-04f, -1.122022476e-04f, -1.126655610e-04f, -1.131286464e-04f, -1.135915029e-04f, -1.140541298e-04f, -1.145165263e-04f, -1.149786916e-04f,
--1.154406249e-04f, -1.159023255e-04f, -1.163637925e-04f, -1.168250252e-04f, -1.172860228e-04f, -1.177467846e-04f, -1.182073096e-04f, -1.186675972e-04f, -1.191276467e-04f, -1.195874571e-04f,
--1.200470277e-04f, -1.205063578e-04f, -1.209654465e-04f, -1.214242932e-04f, -1.218828969e-04f, -1.223412571e-04f, -1.227993727e-04f, -1.232572432e-04f, -1.237148677e-04f, -1.241722454e-04f,
--1.246293756e-04f, -1.250862575e-04f, -1.255428903e-04f, -1.259992733e-04f, -1.264554056e-04f, -1.269112866e-04f, -1.273669154e-04f, -1.278222913e-04f, -1.282774135e-04f, -1.287322812e-04f,
--1.291868937e-04f, -1.296412502e-04f, -1.300953499e-04f, -1.305491921e-04f, -1.310027760e-04f, -1.314561008e-04f, -1.319091658e-04f, -1.323619701e-04f, -1.328145132e-04f, -1.332667940e-04f,
--1.337188120e-04f, -1.341705664e-04f, -1.346220563e-04f, -1.350732811e-04f, -1.355242399e-04f, -1.359749320e-04f, -1.364253567e-04f, -1.368755131e-04f, -1.373254006e-04f, -1.377750183e-04f,
--1.382243655e-04f, -1.386734415e-04f, -1.391222455e-04f, -1.395707767e-04f, -1.400190343e-04f, -1.404670177e-04f, -1.409147261e-04f, -1.413621587e-04f, -1.418093147e-04f, -1.422561935e-04f,
--1.427027942e-04f, -1.431491161e-04f, -1.435951584e-04f, -1.440409205e-04f, -1.444864015e-04f, -1.449316007e-04f, -1.453765173e-04f, -1.458211506e-04f, -1.462654999e-04f, -1.467095644e-04f,
--1.471533434e-04f, -1.475968360e-04f, -1.480400416e-04f, -1.484829594e-04f, -1.489255887e-04f, -1.493679287e-04f, -1.498099787e-04f, -1.502517380e-04f, -1.506932057e-04f, -1.511343812e-04f,
--1.515752637e-04f, -1.520158524e-04f, -1.524561467e-04f, -1.528961458e-04f, -1.533358489e-04f, -1.537752553e-04f, -1.542143643e-04f, -1.546531751e-04f, -1.550916871e-04f, -1.555298994e-04f,
--1.559678113e-04f, -1.564054220e-04f, -1.568427310e-04f, -1.572797373e-04f, -1.577164404e-04f, -1.581528394e-04f, -1.585889336e-04f, -1.590247222e-04f, -1.594602047e-04f, -1.598953801e-04f,
--1.603302479e-04f, -1.607648072e-04f, -1.611990573e-04f, -1.616329976e-04f, -1.620666272e-04f, -1.624999455e-04f, -1.629329516e-04f, -1.633656450e-04f, -1.637980249e-04f, -1.642300905e-04f,
--1.646618411e-04f, -1.650932760e-04f, -1.655243944e-04f, -1.659551957e-04f, -1.663856792e-04f, -1.668158440e-04f, -1.672456896e-04f, -1.676752151e-04f, -1.681044198e-04f, -1.685333030e-04f,
--1.689618641e-04f, -1.693901023e-04f, -1.698180168e-04f, -1.702456070e-04f, -1.706728721e-04f, -1.710998114e-04f, -1.715264242e-04f, -1.719527099e-04f, -1.723786676e-04f, -1.728042966e-04f,
--1.732295964e-04f, -1.736545660e-04f, -1.740792049e-04f, -1.745035124e-04f, -1.749274876e-04f, -1.753511299e-04f, -1.757744386e-04f, -1.761974130e-04f, -1.766200524e-04f, -1.770423561e-04f,
--1.774643233e-04f, -1.778859533e-04f, -1.783072456e-04f, -1.787281992e-04f, -1.791488137e-04f, -1.795690881e-04f, -1.799890219e-04f, -1.804086144e-04f, -1.808278647e-04f, -1.812467723e-04f,
--1.816653365e-04f, -1.820835565e-04f, -1.825014316e-04f, -1.829189612e-04f, -1.833361445e-04f, -1.837529808e-04f, -1.841694695e-04f, -1.845856099e-04f, -1.850014012e-04f, -1.854168428e-04f,
--1.858319340e-04f, -1.862466740e-04f, -1.866610623e-04f, -1.870750980e-04f, -1.874887806e-04f, -1.879021092e-04f, -1.883150833e-04f, -1.887277021e-04f, -1.891399650e-04f, -1.895518713e-04f,
--1.899634202e-04f, -1.903746111e-04f, -1.907854434e-04f, -1.911959162e-04f, -1.916060290e-04f, -1.920157810e-04f, -1.924251716e-04f, -1.928342001e-04f, -1.932428659e-04f, -1.936511681e-04f,
--1.940591062e-04f, -1.944666794e-04f, -1.948738872e-04f, -1.952807288e-04f, -1.956872034e-04f, -1.960933106e-04f, -1.964990495e-04f, -1.969044196e-04f, -1.973094201e-04f, -1.977140503e-04f,
--1.981183096e-04f, -1.985221974e-04f, -1.989257128e-04f, -1.993288554e-04f, -1.997316243e-04f, -2.001340190e-04f, -2.005360388e-04f, -2.009376829e-04f, -2.013389508e-04f, -2.017398417e-04f,
--2.021403550e-04f, -2.025404901e-04f, -2.029402462e-04f, -2.033396227e-04f, -2.037386189e-04f, -2.041372342e-04f, -2.045354680e-04f, -2.049333194e-04f, -2.053307880e-04f, -2.057278730e-04f,
--2.061245738e-04f, -2.065208896e-04f, -2.069168200e-04f, -2.073123641e-04f, -2.077075214e-04f, -2.081022911e-04f, -2.084966727e-04f, -2.088906655e-04f, -2.092842688e-04f, -2.096774819e-04f,
--2.100703043e-04f, -2.104627353e-04f, -2.108547741e-04f, -2.112464202e-04f, -2.116376730e-04f, -2.120285317e-04f, -2.124189958e-04f, -2.128090645e-04f, -2.131987372e-04f, -2.135880133e-04f,
--2.139768922e-04f, -2.143653732e-04f, -2.147534556e-04f, -2.151411388e-04f, -2.155284222e-04f, -2.159153051e-04f, -2.163017869e-04f, -2.166878670e-04f, -2.170735447e-04f, -2.174588193e-04f,
--2.178436903e-04f, -2.182281569e-04f, -2.186122187e-04f, -2.189958748e-04f, -2.193791248e-04f, -2.197619679e-04f, -2.201444035e-04f, -2.205264310e-04f, -2.209080498e-04f, -2.212892592e-04f,
--2.216700586e-04f, -2.220504474e-04f, -2.224304250e-04f, -2.228099906e-04f, -2.231891438e-04f, -2.235678838e-04f, -2.239462100e-04f, -2.243241219e-04f, -2.247016187e-04f, -2.250787000e-04f,
--2.254553649e-04f, -2.258316130e-04f, -2.262074436e-04f, -2.265828561e-04f, -2.269578498e-04f, -2.273324242e-04f, -2.277065786e-04f, -2.280803125e-04f, -2.284536251e-04f, -2.288265159e-04f,
--2.291989843e-04f, -2.295710296e-04f, -2.299426512e-04f, -2.303138486e-04f, -2.306846211e-04f, -2.310549681e-04f, -2.314248890e-04f, -2.317943832e-04f, -2.321634501e-04f, -2.325320890e-04f,
--2.329002994e-04f, -2.332680807e-04f, -2.336354322e-04f, -2.340023534e-04f, -2.343688436e-04f, -2.347349022e-04f, -2.351005287e-04f, -2.354657225e-04f, -2.358304828e-04f, -2.361948092e-04f,
--2.365587011e-04f, -2.369221578e-04f, -2.372851787e-04f, -2.376477633e-04f, -2.380099109e-04f, -2.383716210e-04f, -2.387328929e-04f, -2.390937262e-04f, -2.394541201e-04f, -2.398140741e-04f,
--2.401735875e-04f, -2.405326599e-04f, -2.408912906e-04f, -2.412494791e-04f, -2.416072247e-04f, -2.419645268e-04f, -2.423213849e-04f, -2.426777984e-04f, -2.430337666e-04f, -2.433892891e-04f,
--2.437443653e-04f, -2.440989944e-04f, -2.444531761e-04f, -2.448069096e-04f, -2.451601945e-04f, -2.455130300e-04f, -2.458654158e-04f, -2.462173511e-04f, -2.465688354e-04f, -2.469198681e-04f,
--2.472704487e-04f, -2.476205765e-04f, -2.479702511e-04f, -2.483194717e-04f, -2.486682380e-04f, -2.490165492e-04f, -2.493644049e-04f, -2.497118044e-04f, -2.500587472e-04f, -2.504052327e-04f,
--2.507512603e-04f, -2.510968295e-04f, -2.514419398e-04f, -2.517865905e-04f, -2.521307811e-04f, -2.524745110e-04f, -2.528177798e-04f, -2.531605867e-04f, -2.535029312e-04f, -2.538448129e-04f,
--2.541862311e-04f, -2.545271852e-04f, -2.548676748e-04f, -2.552076992e-04f, -2.555472580e-04f, -2.558863505e-04f, -2.562249762e-04f, -2.565631346e-04f, -2.569008250e-04f, -2.572380470e-04f,
--2.575748001e-04f, -2.579110835e-04f, -2.582468969e-04f, -2.585822396e-04f, -2.589171111e-04f, -2.592515109e-04f, -2.595854385e-04f, -2.599188932e-04f, -2.602518745e-04f, -2.605843819e-04f,
--2.609164149e-04f, -2.612479729e-04f, -2.615790554e-04f, -2.619096618e-04f, -2.622397916e-04f, -2.625694442e-04f, -2.628986192e-04f, -2.632273160e-04f, -2.635555340e-04f, -2.638832728e-04f,
--2.642105317e-04f, -2.645373103e-04f, -2.648636080e-04f, -2.651894244e-04f, -2.655147588e-04f, -2.658396107e-04f, -2.661639797e-04f, -2.664878651e-04f, -2.668112665e-04f, -2.671341834e-04f,
--2.674566152e-04f, -2.677785613e-04f, -2.681000214e-04f, -2.684209947e-04f, -2.687414810e-04f, -2.690614795e-04f, -2.693809898e-04f, -2.697000114e-04f, -2.700185438e-04f, -2.703365864e-04f,
--2.706541387e-04f, -2.709712002e-04f, -2.712877705e-04f, -2.716038489e-04f, -2.719194350e-04f, -2.722345283e-04f, -2.725491283e-04f, -2.728632343e-04f, -2.731768461e-04f, -2.734899630e-04f,
--2.738025845e-04f, -2.741147101e-04f, -2.744263393e-04f, -2.747374717e-04f, -2.750481067e-04f, -2.753582438e-04f, -2.756678825e-04f, -2.759770223e-04f, -2.762856628e-04f, -2.765938033e-04f,
--2.769014435e-04f, -2.772085828e-04f, -2.775152208e-04f, -2.778213568e-04f, -2.781269905e-04f, -2.784321214e-04f, -2.787367489e-04f, -2.790408726e-04f, -2.793444920e-04f, -2.796476066e-04f,
--2.799502158e-04f, -2.802523193e-04f, -2.805539165e-04f, -2.808550070e-04f, -2.811555902e-04f, -2.814556657e-04f, -2.817552329e-04f, -2.820542915e-04f, -2.823528410e-04f, -2.826508807e-04f,
--2.829484104e-04f, -2.832454294e-04f, -2.835419374e-04f, -2.838379338e-04f, -2.841334182e-04f, -2.844283901e-04f, -2.847228490e-04f, -2.850167944e-04f, -2.853102259e-04f, -2.856031430e-04f,
--2.858955453e-04f, -2.861874322e-04f, -2.864788034e-04f, -2.867696582e-04f, -2.870599964e-04f, -2.873498173e-04f, -2.876391206e-04f, -2.879279057e-04f, -2.882161723e-04f, -2.885039198e-04f,
--2.887911478e-04f, -2.890778559e-04f, -2.893640435e-04f, -2.896497102e-04f, -2.899348557e-04f, -2.902194793e-04f, -2.905035806e-04f, -2.907871593e-04f, -2.910702148e-04f, -2.913527467e-04f,
--2.916347545e-04f, -2.919162378e-04f, -2.921971962e-04f, -2.924776292e-04f, -2.927575363e-04f, -2.930369171e-04f, -2.933157712e-04f, -2.935940981e-04f, -2.938718973e-04f, -2.941491685e-04f,
--2.944259112e-04f, -2.947021249e-04f, -2.949778092e-04f, -2.952529637e-04f, -2.955275879e-04f, -2.958016814e-04f, -2.960752438e-04f, -2.963482745e-04f, -2.966207733e-04f, -2.968927396e-04f,
--2.971641731e-04f, -2.974350732e-04f, -2.977054396e-04f, -2.979752718e-04f, -2.982445695e-04f, -2.985133321e-04f, -2.987815592e-04f, -2.990492505e-04f, -2.993164055e-04f, -2.995830238e-04f,
--2.998491049e-04f, -3.001146485e-04f, -3.003796540e-04f, -3.006441212e-04f, -3.009080495e-04f, -3.011714386e-04f, -3.014342881e-04f, -3.016965974e-04f, -3.019583663e-04f, -3.022195943e-04f,
--3.024802809e-04f, -3.027404259e-04f, -3.030000286e-04f, -3.032590889e-04f, -3.035176062e-04f, -3.037755801e-04f, -3.040330102e-04f, -3.042898962e-04f, -3.045462376e-04f, -3.048020340e-04f,
--3.050572850e-04f, -3.053119902e-04f, -3.055661492e-04f, -3.058197616e-04f, -3.060728271e-04f, -3.063253451e-04f, -3.065773154e-04f, -3.068287374e-04f, -3.070796109e-04f, -3.073299354e-04f,
--3.075797106e-04f, -3.078289360e-04f, -3.080776112e-04f, -3.083257359e-04f, -3.085733096e-04f, -3.088203321e-04f, -3.090668028e-04f, -3.093127214e-04f, -3.095580876e-04f, -3.098029009e-04f,
--3.100471609e-04f, -3.102908674e-04f, -3.105340198e-04f, -3.107766178e-04f, -3.110186610e-04f, -3.112601491e-04f, -3.115010817e-04f, -3.117414583e-04f, -3.119812787e-04f, -3.122205424e-04f,
--3.124592491e-04f, -3.126973984e-04f, -3.129349899e-04f, -3.131720233e-04f, -3.134084982e-04f, -3.136444142e-04f, -3.138797709e-04f, -3.141145680e-04f, -3.143488051e-04f, -3.145824819e-04f,
--3.148155980e-04f, -3.150481530e-04f, -3.152801466e-04f, -3.155115783e-04f, -3.157424480e-04f, -3.159727551e-04f, -3.162024993e-04f, -3.164316803e-04f, -3.166602977e-04f, -3.168883512e-04f,
--3.171158404e-04f, -3.173427649e-04f, -3.175691244e-04f, -3.177949186e-04f, -3.180201471e-04f, -3.182448096e-04f, -3.184689056e-04f, -3.186924349e-04f, -3.189153972e-04f, -3.191377920e-04f,
--3.193596190e-04f, -3.195808779e-04f, -3.198015683e-04f, -3.200216900e-04f, -3.202412425e-04f, -3.204602255e-04f, -3.206786387e-04f, -3.208964817e-04f, -3.211137543e-04f, -3.213304560e-04f,
--3.215465866e-04f, -3.217621457e-04f, -3.219771330e-04f, -3.221915481e-04f, -3.224053908e-04f, -3.226186606e-04f, -3.228313573e-04f, -3.230434805e-04f, -3.232550300e-04f, -3.234660053e-04f,
--3.236764062e-04f, -3.238862323e-04f, -3.240954833e-04f, -3.243041590e-04f, -3.245122589e-04f, -3.247197828e-04f, -3.249267303e-04f, -3.251331012e-04f, -3.253388951e-04f, -3.255441116e-04f,
--3.257487506e-04f, -3.259528116e-04f, -3.261562944e-04f, -3.263591986e-04f, -3.265615240e-04f, -3.267632702e-04f, -3.269644369e-04f, -3.271650239e-04f, -3.273650307e-04f, -3.275644572e-04f,
--3.277633030e-04f, -3.279615678e-04f, -3.281592513e-04f, -3.283563531e-04f, -3.285528732e-04f, -3.287488110e-04f, -3.289441663e-04f, -3.291389388e-04f, -3.293331283e-04f, -3.295267344e-04f,
--3.297197568e-04f, -3.299121952e-04f, -3.301040494e-04f, -3.302953191e-04f, -3.304860039e-04f, -3.306761037e-04f, -3.308656180e-04f, -3.310545466e-04f, -3.312428893e-04f, -3.314306457e-04f,
--3.316178156e-04f, -3.318043986e-04f, -3.319903946e-04f, -3.321758032e-04f, -3.323606241e-04f, -3.325448571e-04f, -3.327285019e-04f, -3.329115582e-04f, -3.330940257e-04f, -3.332759042e-04f,
--3.334571934e-04f, -3.336378930e-04f, -3.338180028e-04f, -3.339975224e-04f, -3.341764517e-04f, -3.343547903e-04f, -3.345325381e-04f, -3.347096946e-04f, -3.348862597e-04f, -3.350622331e-04f,
--3.352376145e-04f, -3.354124037e-04f, -3.355866004e-04f, -3.357602043e-04f, -3.359332152e-04f, -3.361056329e-04f, -3.362774571e-04f, -3.364486875e-04f, -3.366193239e-04f, -3.367893660e-04f,
--3.369588135e-04f, -3.371276663e-04f, -3.372959241e-04f, -3.374635866e-04f, -3.376306535e-04f, -3.377971247e-04f, -3.379629999e-04f, -3.381282789e-04f, -3.382929613e-04f, -3.384570470e-04f,
--3.386205357e-04f, -3.387834272e-04f, -3.389457212e-04f, -3.391074175e-04f, -3.392685159e-04f, -3.394290161e-04f, -3.395889180e-04f, -3.397482211e-04f, -3.399069255e-04f, -3.400650307e-04f,
--3.402225365e-04f, -3.403794429e-04f, -3.405357494e-04f, -3.406914559e-04f, -3.408465622e-04f, -3.410010680e-04f, -3.411549731e-04f, -3.413082773e-04f, -3.414609804e-04f, -3.416130821e-04f,
--3.417645822e-04f, -3.419154805e-04f, -3.420657769e-04f, -3.422154710e-04f, -3.423645626e-04f, -3.425130516e-04f, -3.426609377e-04f, -3.428082208e-04f, -3.429549005e-04f, -3.431009768e-04f,
--3.432464493e-04f, -3.433913179e-04f, -3.435355824e-04f, -3.436792425e-04f, -3.438222981e-04f, -3.439647489e-04f, -3.441065949e-04f, -3.442478356e-04f, -3.443884710e-04f, -3.445285009e-04f,
--3.446679250e-04f, -3.448067432e-04f, -3.449449552e-04f, -3.450825609e-04f, -3.452195600e-04f, -3.453559525e-04f, -3.454917380e-04f, -3.456269164e-04f, -3.457614875e-04f, -3.458954512e-04f,
--3.460288071e-04f, -3.461615552e-04f, -3.462936953e-04f, -3.464252271e-04f, -3.465561505e-04f, -3.466864653e-04f, -3.468161714e-04f, -3.469452684e-04f, -3.470737564e-04f, -3.472016350e-04f,
--3.473289041e-04f, -3.474555636e-04f, -3.475816132e-04f, -3.477070528e-04f, -3.478318822e-04f, -3.479561012e-04f, -3.480797097e-04f, -3.482027075e-04f, -3.483250945e-04f, -3.484468703e-04f,
--3.485680350e-04f, -3.486885883e-04f, -3.488085301e-04f, -3.489278602e-04f, -3.490465784e-04f, -3.491646846e-04f, -3.492821786e-04f, -3.493990602e-04f, -3.495153294e-04f, -3.496309859e-04f,
--3.497460296e-04f, -3.498604603e-04f, -3.499742779e-04f, -3.500874822e-04f, -3.502000731e-04f, -3.503120504e-04f, -3.504234140e-04f, -3.505341638e-04f, -3.506442995e-04f, -3.507538210e-04f,
--3.508627282e-04f, -3.509710210e-04f, -3.510786992e-04f, -3.511857626e-04f, -3.512922111e-04f, -3.513980446e-04f, -3.515032630e-04f, -3.516078661e-04f, -3.517118537e-04f, -3.518152258e-04f,
--3.519179821e-04f, -3.520201226e-04f, -3.521216472e-04f, -3.522225556e-04f, -3.523228478e-04f, -3.524225237e-04f, -3.525215830e-04f, -3.526200258e-04f, -3.527178518e-04f, -3.528150609e-04f,
--3.529116531e-04f, -3.530076281e-04f, -3.531029860e-04f, -3.531977264e-04f, -3.532918494e-04f, -3.533853548e-04f, -3.534782425e-04f, -3.535705123e-04f, -3.536621643e-04f, -3.537531981e-04f,
--3.538436138e-04f, -3.539334113e-04f, -3.540225903e-04f, -3.541111508e-04f, -3.541990928e-04f, -3.542864160e-04f, -3.543731204e-04f, -3.544592059e-04f, -3.545446723e-04f, -3.546295196e-04f,
--3.547137477e-04f, -3.547973565e-04f, -3.548803458e-04f, -3.549627155e-04f, -3.550444657e-04f, -3.551255961e-04f, -3.552061067e-04f, -3.552859973e-04f, -3.553652680e-04f, -3.554439185e-04f,
--3.555219489e-04f, -3.555993589e-04f, -3.556761486e-04f, -3.557523179e-04f, -3.558278665e-04f, -3.559027946e-04f, -3.559771019e-04f, -3.560507884e-04f, -3.561238540e-04f, -3.561962987e-04f,
--3.562681223e-04f, -3.563393248e-04f, -3.564099060e-04f, -3.564798660e-04f, -3.565492047e-04f, -3.566179219e-04f, -3.566860175e-04f, -3.567534916e-04f, -3.568203441e-04f, -3.568865748e-04f,
--3.569521837e-04f, -3.570171708e-04f, -3.570815359e-04f, -3.571452790e-04f, -3.572084001e-04f, -3.572708990e-04f, -3.573327758e-04f, -3.573940303e-04f, -3.574546625e-04f, -3.575146723e-04f,
--3.575740597e-04f, -3.576328246e-04f, -3.576909669e-04f, -3.577484866e-04f, -3.578053837e-04f, -3.578616581e-04f, -3.579173097e-04f, -3.579723385e-04f, -3.580267444e-04f, -3.580805275e-04f,
--3.581336875e-04f, -3.581862246e-04f, -3.582381386e-04f, -3.582894294e-04f, -3.583400972e-04f, -3.583901418e-04f, -3.584395631e-04f, -3.584883612e-04f, -3.585365359e-04f, -3.585840874e-04f,
--3.586310154e-04f, -3.586773200e-04f, -3.587230012e-04f, -3.587680589e-04f, -3.588124930e-04f, -3.588563036e-04f, -3.588994906e-04f, -3.589420540e-04f, -3.589839938e-04f, -3.590253099e-04f,
--3.590660023e-04f, -3.591060710e-04f, -3.591455159e-04f, -3.591843371e-04f, -3.592225345e-04f, -3.592601080e-04f, -3.592970578e-04f, -3.593333836e-04f, -3.593690857e-04f, -3.594041638e-04f,
--3.594386180e-04f, -3.594724483e-04f, -3.595056547e-04f, -3.595382372e-04f, -3.595701956e-04f, -3.596015302e-04f, -3.596322407e-04f, -3.596623273e-04f, -3.596917899e-04f, -3.597206285e-04f,
--3.597488431e-04f, -3.597764337e-04f, -3.598034003e-04f, -3.598297429e-04f, -3.598554615e-04f, -3.598805560e-04f, -3.599050266e-04f, -3.599288732e-04f, -3.599520958e-04f, -3.599746944e-04f,
--3.599966690e-04f, -3.600180196e-04f, -3.600387462e-04f, -3.600588489e-04f, -3.600783276e-04f, -3.600971824e-04f, -3.601154133e-04f, -3.601330202e-04f, -3.601500033e-04f, -3.601663625e-04f,
--3.601820978e-04f, -3.601972092e-04f, -3.602116968e-04f, -3.602255606e-04f, -3.602388007e-04f, -3.602514169e-04f, -3.602634094e-04f, -3.602747782e-04f, -3.602855233e-04f, -3.602956447e-04f,
--3.603051425e-04f, -3.603140167e-04f, -3.603222672e-04f, -3.603298943e-04f, -3.603368978e-04f, -3.603432778e-04f, -3.603490344e-04f, -3.603541676e-04f, -3.603586773e-04f, -3.603625638e-04f,
--3.603658269e-04f, -3.603684667e-04f, -3.603704834e-04f, -3.603718768e-04f, -3.603726471e-04f, -3.603727943e-04f, -3.603723185e-04f, -3.603712196e-04f, -3.603694978e-04f, -3.603671531e-04f,
--3.603641855e-04f, -3.603605951e-04f, -3.603563819e-04f, -3.603515460e-04f, -3.603460875e-04f, -3.603400063e-04f, -3.603333026e-04f, -3.603259764e-04f, -3.603180278e-04f, -3.603094568e-04f,
--3.603002635e-04f, -3.602904479e-04f, -3.602800102e-04f, -3.602689503e-04f, -3.602572684e-04f, -3.602449644e-04f, -3.602320385e-04f, -3.602184908e-04f, -3.602043212e-04f, -3.601895299e-04f,
--3.601741170e-04f, -3.601580825e-04f, -3.601414264e-04f, -3.601241490e-04f, -3.601062501e-04f, -3.600877300e-04f, -3.600685886e-04f, -3.600488261e-04f, -3.600284426e-04f, -3.600074381e-04f,
--3.599858127e-04f, -3.599635664e-04f, -3.599406995e-04f, -3.599172119e-04f, -3.598931037e-04f, -3.598683751e-04f, -3.598430261e-04f, -3.598170568e-04f, -3.597904672e-04f, -3.597632576e-04f,
--3.597354279e-04f, -3.597069783e-04f, -3.596779089e-04f, -3.596482197e-04f, -3.596179109e-04f, -3.595869825e-04f, -3.595554347e-04f, -3.595232675e-04f, -3.594904811e-04f, -3.594570755e-04f,
--3.594230509e-04f, -3.593884073e-04f, -3.593531449e-04f, -3.593172638e-04f, -3.592807640e-04f, -3.592436457e-04f, -3.592059090e-04f, -3.591675540e-04f, -3.591285808e-04f, -3.590889896e-04f,
--3.590487803e-04f, -3.590079532e-04f, -3.589665084e-04f, -3.589244460e-04f, -3.588817660e-04f, -3.588384687e-04f, -3.587945541e-04f, -3.587500224e-04f, -3.587048737e-04f, -3.586591080e-04f,
--3.586127256e-04f, -3.585657265e-04f, -3.585181109e-04f, -3.584698789e-04f, -3.584210307e-04f, -3.583715662e-04f, -3.583214858e-04f, -3.582707895e-04f, -3.582194775e-04f, -3.581675498e-04f,
--3.581150067e-04f, -3.580618482e-04f, -3.580080745e-04f, -3.579536857e-04f, -3.578986820e-04f, -3.578430636e-04f, -3.577868304e-04f, -3.577299828e-04f, -3.576725207e-04f, -3.576144445e-04f,
--3.575557542e-04f, -3.574964499e-04f, -3.574365319e-04f, -3.573760002e-04f, -3.573148550e-04f, -3.572530965e-04f, -3.571907248e-04f, -3.571277401e-04f, -3.570641425e-04f, -3.569999321e-04f,
--3.569351092e-04f, -3.568696738e-04f, -3.568036263e-04f, -3.567369666e-04f, -3.566696949e-04f, -3.566018115e-04f, -3.565333164e-04f, -3.564642099e-04f, -3.563944921e-04f, -3.563241632e-04f,
--3.562532233e-04f, -3.561816727e-04f, -3.561095113e-04f, -3.560367396e-04f, -3.559633575e-04f, -3.558893653e-04f, -3.558147632e-04f, -3.557395513e-04f, -3.556637298e-04f, -3.555872989e-04f,
--3.555102587e-04f, -3.554326095e-04f, -3.553543514e-04f, -3.552754845e-04f, -3.551960091e-04f, -3.551159254e-04f, -3.550352335e-04f, -3.549539336e-04f, -3.548720260e-04f, -3.547895107e-04f,
--3.547063879e-04f, -3.546226580e-04f, -3.545383209e-04f, -3.544533771e-04f, -3.543678265e-04f, -3.542816695e-04f, -3.541949062e-04f, -3.541075367e-04f, -3.540195614e-04f, -3.539309804e-04f,
--3.538417939e-04f, -3.537520021e-04f, -3.536616051e-04f, -3.535706033e-04f, -3.534789967e-04f, -3.533867857e-04f, -3.532939703e-04f, -3.532005508e-04f, -3.531065275e-04f, -3.530119004e-04f,
--3.529166699e-04f, -3.528208361e-04f, -3.527243993e-04f, -3.526273596e-04f, -3.525297172e-04f, -3.524314725e-04f, -3.523326255e-04f, -3.522331765e-04f, -3.521331257e-04f, -3.520324734e-04f,
--3.519312197e-04f, -3.518293649e-04f, -3.517269091e-04f, -3.516238527e-04f, -3.515201958e-04f, -3.514159387e-04f, -3.513110815e-04f, -3.512056245e-04f, -3.510995680e-04f, -3.509929121e-04f,
--3.508856571e-04f, -3.507778032e-04f, -3.506693507e-04f, -3.505602997e-04f, -3.504506505e-04f, -3.503404034e-04f, -3.502295585e-04f, -3.501181161e-04f, -3.500060765e-04f, -3.498934398e-04f,
--3.497802064e-04f, -3.496663764e-04f, -3.495519501e-04f, -3.494369278e-04f, -3.493213096e-04f, -3.492050958e-04f, -3.490882867e-04f, -3.489708825e-04f, -3.488528835e-04f, -3.487342899e-04f,
--3.486151019e-04f, -3.484953198e-04f, -3.483749439e-04f, -3.482539744e-04f, -3.481324115e-04f, -3.480102555e-04f, -3.478875067e-04f, -3.477641653e-04f, -3.476402316e-04f, -3.475157058e-04f,
--3.473905881e-04f, -3.472648790e-04f, -3.471385785e-04f, -3.470116870e-04f, -3.468842047e-04f, -3.467561320e-04f, -3.466274689e-04f, -3.464982159e-04f, -3.463683732e-04f, -3.462379411e-04f,
--3.461069197e-04f, -3.459753095e-04f, -3.458431106e-04f, -3.457103233e-04f, -3.455769480e-04f, -3.454429848e-04f, -3.453084341e-04f, -3.451732961e-04f, -3.450375711e-04f, -3.449012594e-04f,
--3.447643613e-04f, -3.446268770e-04f, -3.444888068e-04f, -3.443501510e-04f, -3.442109099e-04f, -3.440710838e-04f, -3.439306729e-04f, -3.437896775e-04f, -3.436480980e-04f, -3.435059346e-04f,
--3.433631875e-04f, -3.432198572e-04f, -3.430759438e-04f, -3.429314477e-04f, -3.427863691e-04f, -3.426407084e-04f, -3.424944659e-04f, -3.423476417e-04f, -3.422002364e-04f, -3.420522500e-04f,
--3.419036830e-04f, -3.417545356e-04f, -3.416048081e-04f, -3.414545009e-04f, -3.413036142e-04f, -3.411521483e-04f, -3.410001036e-04f, -3.408474803e-04f, -3.406942788e-04f, -3.405404993e-04f,
--3.403861421e-04f, -3.402312077e-04f, -3.400756962e-04f, -3.399196081e-04f, -3.397629435e-04f, -3.396057028e-04f, -3.394478864e-04f, -3.392894945e-04f, -3.391305275e-04f, -3.389709856e-04f,
--3.388108693e-04f, -3.386501788e-04f, -3.384889144e-04f, -3.383270764e-04f, -3.381646652e-04f, -3.380016811e-04f, -3.378381245e-04f, -3.376739955e-04f, -3.375092947e-04f, -3.373440222e-04f,
--3.371781785e-04f, -3.370117638e-04f, -3.368447785e-04f, -3.366772229e-04f, -3.365090973e-04f, -3.363404021e-04f, -3.361711377e-04f, -3.360013042e-04f, -3.358309021e-04f, -3.356599318e-04f,
--3.354883935e-04f, -3.353162875e-04f, -3.351436143e-04f, -3.349703742e-04f, -3.347965674e-04f, -3.346221944e-04f, -3.344472555e-04f, -3.342717510e-04f, -3.340956813e-04f, -3.339190467e-04f,
--3.337418476e-04f, -3.335640843e-04f, -3.333857572e-04f, -3.332068665e-04f, -3.330274128e-04f, -3.328473962e-04f, -3.326668172e-04f, -3.324856761e-04f, -3.323039733e-04f, -3.321217091e-04f,
--3.319388839e-04f, -3.317554981e-04f, -3.315715519e-04f, -3.313870458e-04f, -3.312019801e-04f, -3.310163552e-04f, -3.308301714e-04f, -3.306434291e-04f, -3.304561287e-04f, -3.302682705e-04f,
--3.300798548e-04f, -3.298908822e-04f, -3.297013529e-04f, -3.295112672e-04f, -3.293206257e-04f, -3.291294285e-04f, -3.289376762e-04f, -3.287453690e-04f, -3.285525074e-04f, -3.283590917e-04f,
--3.281651223e-04f, -3.279705996e-04f, -3.277755239e-04f, -3.275798956e-04f, -3.273837152e-04f, -3.271869829e-04f, -3.269896992e-04f, -3.267918644e-04f, -3.265934789e-04f, -3.263945432e-04f,
--3.261950576e-04f, -3.259950224e-04f, -3.257944381e-04f, -3.255933050e-04f, -3.253916236e-04f, -3.251893942e-04f, -3.249866172e-04f, -3.247832930e-04f, -3.245794220e-04f, -3.243750046e-04f,
--3.241700412e-04f, -3.239645322e-04f, -3.237584779e-04f, -3.235518788e-04f, -3.233447352e-04f, -3.231370476e-04f, -3.229288164e-04f, -3.227200419e-04f, -3.225107246e-04f, -3.223008649e-04f,
--3.220904631e-04f, -3.218795196e-04f, -3.216680350e-04f, -3.214560095e-04f, -3.212434436e-04f, -3.210303376e-04f, -3.208166921e-04f, -3.206025074e-04f, -3.203877838e-04f, -3.201725219e-04f,
--3.199567221e-04f, -3.197403846e-04f, -3.195235101e-04f, -3.193060988e-04f, -3.190881512e-04f, -3.188696677e-04f, -3.186506487e-04f, -3.184310946e-04f, -3.182110059e-04f, -3.179903830e-04f,
--3.177692263e-04f, -3.175475362e-04f, -3.173253131e-04f, -3.171025575e-04f, -3.168792697e-04f, -3.166554503e-04f, -3.164310996e-04f, -3.162062181e-04f, -3.159808061e-04f, -3.157548642e-04f,
--3.155283927e-04f, -3.153013921e-04f, -3.150738628e-04f, -3.148458052e-04f, -3.146172199e-04f, -3.143881071e-04f, -3.141584673e-04f, -3.139283010e-04f, -3.136976086e-04f, -3.134663906e-04f,
--3.132346474e-04f, -3.130023793e-04f, -3.127695870e-04f, -3.125362707e-04f, -3.123024310e-04f, -3.120680683e-04f, -3.118331830e-04f, -3.115977756e-04f, -3.113618465e-04f, -3.111253961e-04f,
--3.108884250e-04f, -3.106509335e-04f, -3.104129222e-04f, -3.101743914e-04f, -3.099353416e-04f, -3.096957732e-04f, -3.094556868e-04f, -3.092150827e-04f, -3.089739615e-04f, -3.087323235e-04f,
--3.084901692e-04f, -3.082474991e-04f, -3.080043137e-04f, -3.077606133e-04f, -3.075163985e-04f, -3.072716697e-04f, -3.070264274e-04f, -3.067806721e-04f, -3.065344041e-04f, -3.062876240e-04f,
--3.060403322e-04f, -3.057925292e-04f, -3.055442154e-04f, -3.052953914e-04f, -3.050460576e-04f, -3.047962144e-04f, -3.045458623e-04f, -3.042950019e-04f, -3.040436335e-04f, -3.037917576e-04f,
--3.035393748e-04f, -3.032864854e-04f, -3.030330900e-04f, -3.027791890e-04f, -3.025247830e-04f, -3.022698723e-04f, -3.020144575e-04f, -3.017585390e-04f, -3.015021173e-04f, -3.012451929e-04f,
--3.009877663e-04f, -3.007298380e-04f, -3.004714084e-04f, -3.002124781e-04f, -2.999530474e-04f, -2.996931169e-04f, -2.994326872e-04f, -2.991717585e-04f, -2.989103316e-04f, -2.986484068e-04f,
--2.983859846e-04f, -2.981230655e-04f, -2.978596501e-04f, -2.975957387e-04f, -2.973313320e-04f, -2.970664303e-04f, -2.968010342e-04f, -2.965351442e-04f, -2.962687608e-04f, -2.960018844e-04f,
--2.957345156e-04f, -2.954666549e-04f, -2.951983027e-04f, -2.949294596e-04f, -2.946601261e-04f, -2.943903026e-04f, -2.941199897e-04f, -2.938491879e-04f, -2.935778976e-04f, -2.933061194e-04f,
--2.930338538e-04f, -2.927611013e-04f, -2.924878624e-04f, -2.922141375e-04f, -2.919399273e-04f, -2.916652322e-04f, -2.913900528e-04f, -2.911143895e-04f, -2.908382428e-04f, -2.905616133e-04f,
--2.902845015e-04f, -2.900069079e-04f, -2.897288330e-04f, -2.894502773e-04f, -2.891712414e-04f, -2.888917257e-04f, -2.886117308e-04f, -2.883312572e-04f, -2.880503054e-04f, -2.877688760e-04f,
--2.874869694e-04f, -2.872045862e-04f, -2.869217269e-04f, -2.866383920e-04f, -2.863545820e-04f, -2.860702976e-04f, -2.857855391e-04f, -2.855003072e-04f, -2.852146023e-04f, -2.849284250e-04f,
--2.846417758e-04f, -2.843546553e-04f, -2.840670639e-04f, -2.837790023e-04f, -2.834904709e-04f, -2.832014702e-04f, -2.829120009e-04f, -2.826220634e-04f, -2.823316582e-04f, -2.820407860e-04f,
--2.817494472e-04f, -2.814576424e-04f, -2.811653722e-04f, -2.808726370e-04f, -2.805794374e-04f, -2.802857739e-04f, -2.799916471e-04f, -2.796970576e-04f, -2.794020058e-04f, -2.791064923e-04f,
--2.788105177e-04f, -2.785140825e-04f, -2.782171872e-04f, -2.779198325e-04f, -2.776220187e-04f, -2.773237466e-04f, -2.770250166e-04f, -2.767258293e-04f, -2.764261853e-04f, -2.761260850e-04f,
--2.758255291e-04f, -2.755245180e-04f, -2.752230524e-04f, -2.749211329e-04f, -2.746187599e-04f, -2.743159339e-04f, -2.740126557e-04f, -2.737089257e-04f, -2.734047445e-04f, -2.731001126e-04f,
--2.727950307e-04f, -2.724894991e-04f, -2.721835187e-04f, -2.718770898e-04f, -2.715702130e-04f, -2.712628890e-04f, -2.709551183e-04f, -2.706469013e-04f, -2.703382388e-04f, -2.700291313e-04f,
--2.697195793e-04f, -2.694095834e-04f, -2.690991442e-04f, -2.687882623e-04f, -2.684769381e-04f, -2.681651723e-04f, -2.678529655e-04f, -2.675403182e-04f, -2.672272311e-04f, -2.669137045e-04f,
--2.665997393e-04f, -2.662853358e-04f, -2.659704948e-04f, -2.656552167e-04f, -2.653395022e-04f, -2.650233518e-04f, -2.647067661e-04f, -2.643897457e-04f, -2.640722912e-04f, -2.637544031e-04f,
--2.634360820e-04f, -2.631173285e-04f, -2.627981433e-04f, -2.624785268e-04f, -2.621584796e-04f, -2.618380025e-04f, -2.615170958e-04f, -2.611957602e-04f, -2.608739964e-04f, -2.605518048e-04f,
--2.602291861e-04f, -2.599061409e-04f, -2.595826697e-04f, -2.592587732e-04f, -2.589344519e-04f, -2.586097065e-04f, -2.582845374e-04f, -2.579589454e-04f, -2.576329310e-04f, -2.573064948e-04f,
--2.569796374e-04f, -2.566523593e-04f, -2.563246613e-04f, -2.559965438e-04f, -2.556680076e-04f, -2.553390531e-04f, -2.550096810e-04f, -2.546798918e-04f, -2.543496863e-04f, -2.540190649e-04f,
--2.536880283e-04f, -2.533565772e-04f, -2.530247119e-04f, -2.526924333e-04f, -2.523597419e-04f, -2.520266383e-04f, -2.516931231e-04f, -2.513591969e-04f, -2.510248604e-04f, -2.506901141e-04f,
--2.503549586e-04f, -2.500193945e-04f, -2.496834225e-04f, -2.493470432e-04f, -2.490102572e-04f, -2.486730651e-04f, -2.483354674e-04f, -2.479974649e-04f, -2.476590582e-04f, -2.473202477e-04f,
--2.469810343e-04f, -2.466414184e-04f, -2.463014007e-04f, -2.459609818e-04f, -2.456201623e-04f, -2.452789429e-04f, -2.449373242e-04f, -2.445953067e-04f, -2.442528912e-04f, -2.439100781e-04f,
--2.435668683e-04f, -2.432232622e-04f, -2.428792605e-04f, -2.425348638e-04f, -2.421900727e-04f, -2.418448879e-04f, -2.414993100e-04f, -2.411533397e-04f, -2.408069775e-04f, -2.404602240e-04f,
--2.401130800e-04f, -2.397655459e-04f, -2.394176226e-04f, -2.390693105e-04f, -2.387206103e-04f, -2.383715227e-04f, -2.380220483e-04f, -2.376721877e-04f, -2.373219416e-04f, -2.369713105e-04f,
--2.366202951e-04f, -2.362688961e-04f, -2.359171141e-04f, -2.355649497e-04f, -2.352124035e-04f, -2.348594763e-04f, -2.345061685e-04f, -2.341524810e-04f, -2.337984143e-04f, -2.334439690e-04f,
--2.330891458e-04f, -2.327339453e-04f, -2.323783682e-04f, -2.320224152e-04f, -2.316660867e-04f, -2.313093836e-04f, -2.309523065e-04f, -2.305948559e-04f, -2.302370326e-04f, -2.298788371e-04f,
--2.295202702e-04f, -2.291613324e-04f, -2.288020245e-04f, -2.284423471e-04f, -2.280823007e-04f, -2.277218862e-04f, -2.273611040e-04f, -2.269999549e-04f, -2.266384396e-04f, -2.262765586e-04f,
--2.259143127e-04f, -2.255517024e-04f, -2.251887284e-04f, -2.248253915e-04f, -2.244616921e-04f, -2.240976311e-04f, -2.237332090e-04f, -2.233684266e-04f, -2.230032844e-04f, -2.226377831e-04f,
--2.222719234e-04f, -2.219057059e-04f, -2.215391314e-04f, -2.211722004e-04f, -2.208049136e-04f, -2.204372717e-04f, -2.200692753e-04f, -2.197009252e-04f, -2.193322219e-04f, -2.189631661e-04f,
--2.185937585e-04f, -2.182239998e-04f, -2.178538906e-04f, -2.174834316e-04f, -2.171126234e-04f, -2.167414668e-04f, -2.163699623e-04f, -2.159981107e-04f, -2.156259127e-04f, -2.152533688e-04f,
--2.148804798e-04f, -2.145072463e-04f, -2.141336690e-04f, -2.137597486e-04f, -2.133854857e-04f, -2.130108810e-04f, -2.126359353e-04f, -2.122606490e-04f, -2.118850231e-04f, -2.115090580e-04f,
--2.111327545e-04f, -2.107561133e-04f, -2.103791350e-04f, -2.100018203e-04f, -2.096241699e-04f, -2.092461845e-04f, -2.088678647e-04f, -2.084892113e-04f, -2.081102248e-04f, -2.077309060e-04f,
--2.073512556e-04f, -2.069712743e-04f, -2.065909626e-04f, -2.062103214e-04f, -2.058293512e-04f, -2.054480528e-04f, -2.050664269e-04f, -2.046844741e-04f, -2.043021951e-04f, -2.039195906e-04f,
--2.035366613e-04f, -2.031534079e-04f, -2.027698310e-04f, -2.023859314e-04f, -2.020017098e-04f, -2.016171667e-04f, -2.012323030e-04f, -2.008471193e-04f, -2.004616162e-04f, -2.000757946e-04f,
--1.996896550e-04f, -1.993031981e-04f, -1.989164248e-04f, -1.985293355e-04f, -1.981419311e-04f, -1.977542123e-04f, -1.973661796e-04f, -1.969778339e-04f, -1.965891758e-04f, -1.962002060e-04f,
--1.958109251e-04f, -1.954213340e-04f, -1.950314333e-04f, -1.946412237e-04f, -1.942507058e-04f, -1.938598805e-04f, -1.934687483e-04f, -1.930773100e-04f, -1.926855663e-04f, -1.922935178e-04f,
--1.919011654e-04f, -1.915085096e-04f, -1.911155512e-04f, -1.907222909e-04f, -1.903287294e-04f, -1.899348673e-04f, -1.895407055e-04f, -1.891462445e-04f, -1.887514852e-04f, -1.883564281e-04f,
--1.879610740e-04f, -1.875654237e-04f, -1.871694778e-04f, -1.867732370e-04f, -1.863767020e-04f, -1.859798736e-04f, -1.855827524e-04f, -1.851853392e-04f, -1.847876346e-04f, -1.843896394e-04f,
--1.839913543e-04f, -1.835927799e-04f, -1.831939171e-04f, -1.827947665e-04f, -1.823953288e-04f, -1.819956047e-04f, -1.815955950e-04f, -1.811953003e-04f, -1.807947214e-04f, -1.803938590e-04f,
--1.799927138e-04f, -1.795912865e-04f, -1.791895778e-04f, -1.787875885e-04f, -1.783853192e-04f, -1.779827707e-04f, -1.775799437e-04f, -1.771768389e-04f, -1.767734570e-04f, -1.763697988e-04f,
--1.759658649e-04f, -1.755616561e-04f, -1.751571731e-04f, -1.747524166e-04f, -1.743473873e-04f, -1.739420860e-04f, -1.735365134e-04f, -1.731306701e-04f, -1.727245570e-04f, -1.723181748e-04f,
--1.719115241e-04f, -1.715046056e-04f, -1.710974202e-04f, -1.706899686e-04f, -1.702822513e-04f, -1.698742693e-04f, -1.694660232e-04f, -1.690575137e-04f, -1.686487415e-04f, -1.682397074e-04f,
--1.678304122e-04f, -1.674208565e-04f, -1.670110410e-04f, -1.666009665e-04f, -1.661906338e-04f, -1.657800435e-04f, -1.653691964e-04f, -1.649580931e-04f, -1.645467345e-04f, -1.641351213e-04f,
--1.637232542e-04f, -1.633111339e-04f, -1.628987611e-04f, -1.624861367e-04f, -1.620732612e-04f, -1.616601355e-04f, -1.612467603e-04f, -1.608331363e-04f, -1.604192643e-04f, -1.600051449e-04f,
--1.595907790e-04f, -1.591761672e-04f, -1.587613103e-04f, -1.583462090e-04f, -1.579308641e-04f, -1.575152762e-04f, -1.570994462e-04f, -1.566833748e-04f, -1.562670627e-04f, -1.558505106e-04f,
--1.554337193e-04f, -1.550166895e-04f, -1.545994220e-04f, -1.541819174e-04f, -1.537641766e-04f, -1.533462003e-04f, -1.529279892e-04f, -1.525095440e-04f, -1.520908655e-04f, -1.516719545e-04f,
--1.512528116e-04f, -1.508334377e-04f, -1.504138334e-04f, -1.499939995e-04f, -1.495739368e-04f, -1.491536459e-04f, -1.487331277e-04f, -1.483123829e-04f, -1.478914121e-04f, -1.474702163e-04f,
--1.470487960e-04f, -1.466271521e-04f, -1.462052853e-04f, -1.457831964e-04f, -1.453608860e-04f, -1.449383550e-04f, -1.445156040e-04f, -1.440926339e-04f, -1.436694454e-04f, -1.432460392e-04f,
--1.428224160e-04f, -1.423985767e-04f, -1.419745220e-04f, -1.415502526e-04f, -1.411257692e-04f, -1.407010727e-04f, -1.402761637e-04f, -1.398510431e-04f, -1.394257115e-04f, -1.390001697e-04f,
--1.385744185e-04f, -1.381484587e-04f, -1.377222909e-04f, -1.372959159e-04f, -1.368693345e-04f, -1.364425474e-04f, -1.360155555e-04f, -1.355883593e-04f, -1.351609598e-04f, -1.347333576e-04f,
--1.343055535e-04f, -1.338775483e-04f, -1.334493426e-04f, -1.330209374e-04f, -1.325923332e-04f, -1.321635309e-04f, -1.317345313e-04f, -1.313053350e-04f, -1.308759429e-04f, -1.304463557e-04f,
--1.300165741e-04f, -1.295865990e-04f, -1.291564310e-04f, -1.287260709e-04f, -1.282955196e-04f, -1.278647777e-04f, -1.274338460e-04f, -1.270027252e-04f, -1.265714162e-04f, -1.261399197e-04f,
--1.257082364e-04f, -1.252763671e-04f, -1.248443126e-04f, -1.244120736e-04f, -1.239796508e-04f, -1.235470452e-04f, -1.231142573e-04f, -1.226812880e-04f, -1.222481380e-04f, -1.218148082e-04f,
--1.213812992e-04f, -1.209476118e-04f, -1.205137467e-04f, -1.200797049e-04f, -1.196454869e-04f, -1.192110936e-04f, -1.187765258e-04f, -1.183417841e-04f, -1.179068694e-04f, -1.174717824e-04f,
--1.170365240e-04f, -1.166010947e-04f, -1.161654956e-04f, -1.157297272e-04f, -1.152937903e-04f, -1.148576858e-04f, -1.144214144e-04f, -1.139849768e-04f, -1.135483738e-04f, -1.131116062e-04f,
--1.126746748e-04f, -1.122375803e-04f, -1.118003235e-04f, -1.113629052e-04f, -1.109253261e-04f, -1.104875869e-04f, -1.100496886e-04f, -1.096116318e-04f, -1.091734172e-04f, -1.087350458e-04f,
--1.082965182e-04f, -1.078578352e-04f, -1.074189976e-04f, -1.069800061e-04f, -1.065408615e-04f, -1.061015647e-04f, -1.056621163e-04f, -1.052225171e-04f, -1.047827680e-04f, -1.043428696e-04f,
--1.039028228e-04f, -1.034626282e-04f, -1.030222868e-04f, -1.025817992e-04f, -1.021411663e-04f, -1.017003888e-04f, -1.012594675e-04f, -1.008184031e-04f, -1.003771964e-04f, -9.993584825e-05f,
--9.949435936e-05f, -9.905273052e-05f, -9.861096250e-05f, -9.816905607e-05f, -9.772701202e-05f, -9.728483111e-05f, -9.684251411e-05f, -9.640006182e-05f, -9.595747498e-05f, -9.551475439e-05f,
--9.507190082e-05f, -9.462891505e-05f, -9.418579784e-05f, -9.374254998e-05f, -9.329917224e-05f, -9.285566540e-05f, -9.241203023e-05f, -9.196826752e-05f, -9.152437803e-05f, -9.108036254e-05f,
--9.063622184e-05f, -9.019195669e-05f, -8.974756788e-05f, -8.930305619e-05f, -8.885842238e-05f, -8.841366724e-05f, -8.796879155e-05f, -8.752379608e-05f, -8.707868162e-05f, -8.663344894e-05f,
--8.618809881e-05f, -8.574263203e-05f, -8.529704936e-05f, -8.485135159e-05f, -8.440553949e-05f, -8.395961385e-05f, -8.351357544e-05f, -8.306742504e-05f, -8.262116344e-05f, -8.217479141e-05f,
--8.172830974e-05f, -8.128171920e-05f, -8.083502057e-05f, -8.038821463e-05f, -7.994130217e-05f, -7.949428396e-05f, -7.904716079e-05f, -7.859993343e-05f, -7.815260267e-05f, -7.770516929e-05f,
--7.725763407e-05f, -7.680999779e-05f, -7.636226123e-05f, -7.591442518e-05f, -7.546649041e-05f, -7.501845770e-05f, -7.457032785e-05f, -7.412210163e-05f, -7.367377982e-05f, -7.322536321e-05f,
--7.277685257e-05f, -7.232824870e-05f, -7.187955237e-05f, -7.143076436e-05f, -7.098188546e-05f, -7.053291645e-05f, -7.008385812e-05f, -6.963471124e-05f, -6.918547661e-05f, -6.873615500e-05f,
--6.828674719e-05f, -6.783725398e-05f, -6.738767614e-05f, -6.693801445e-05f, -6.648826971e-05f, -6.603844269e-05f, -6.558853419e-05f, -6.513854497e-05f, -6.468847583e-05f, -6.423832755e-05f,
--6.378810092e-05f, -6.333779672e-05f, -6.288741573e-05f, -6.243695874e-05f, -6.198642653e-05f, -6.153581989e-05f, -6.108513960e-05f, -6.063438645e-05f, -6.018356122e-05f, -5.973266469e-05f,
--5.928169766e-05f, -5.883066091e-05f, -5.837955521e-05f, -5.792838136e-05f, -5.747714014e-05f, -5.702583234e-05f, -5.657445875e-05f, -5.612302014e-05f, -5.567151730e-05f, -5.521995102e-05f,
--5.476832208e-05f, -5.431663128e-05f, -5.386487939e-05f, -5.341306720e-05f, -5.296119549e-05f, -5.250926506e-05f, -5.205727669e-05f, -5.160523116e-05f, -5.115312926e-05f, -5.070097178e-05f,
--5.024875949e-05f, -4.979649320e-05f, -4.934417368e-05f, -4.889180172e-05f, -4.843937810e-05f, -4.798690362e-05f, -4.753437905e-05f, -4.708180519e-05f, -4.662918282e-05f, -4.617651273e-05f,
--4.572379570e-05f, -4.527103252e-05f, -4.481822398e-05f, -4.436537085e-05f, -4.391247394e-05f, -4.345953402e-05f, -4.300655188e-05f, -4.255352832e-05f, -4.210046410e-05f, -4.164736002e-05f,
--4.119421688e-05f, -4.074103544e-05f, -4.028781651e-05f, -3.983456086e-05f, -3.938126929e-05f, -3.892794257e-05f, -3.847458150e-05f, -3.802118687e-05f, -3.756775945e-05f, -3.711430004e-05f,
--3.666080942e-05f, -3.620728838e-05f, -3.575373770e-05f, -3.530015818e-05f, -3.484655059e-05f, -3.439291573e-05f, -3.393925438e-05f, -3.348556732e-05f, -3.303185535e-05f, -3.257811925e-05f,
--3.212435981e-05f, -3.167057781e-05f, -3.121677404e-05f, -3.076294929e-05f, -3.030910434e-05f, -2.985523997e-05f, -2.940135698e-05f, -2.894745616e-05f, -2.849353828e-05f, -2.803960413e-05f,
--2.758565450e-05f, -2.713169018e-05f, -2.667771195e-05f, -2.622372060e-05f, -2.576971691e-05f, -2.531570168e-05f, -2.486167568e-05f, -2.440763970e-05f, -2.395359453e-05f, -2.349954095e-05f,
--2.304547975e-05f, -2.259141172e-05f, -2.213733764e-05f, -2.168325830e-05f, -2.122917448e-05f, -2.077508696e-05f, -2.032099654e-05f, -1.986690400e-05f, -1.941281012e-05f, -1.895871570e-05f,
--1.850462151e-05f, -1.805052834e-05f, -1.759643697e-05f, -1.714234820e-05f, -1.668826280e-05f, -1.623418156e-05f, -1.578010527e-05f, -1.532603471e-05f, -1.487197066e-05f, -1.441791392e-05f,
--1.396386526e-05f, -1.350982547e-05f, -1.305579533e-05f, -1.260177563e-05f, -1.214776716e-05f, -1.169377069e-05f, -1.123978701e-05f, -1.078581691e-05f, -1.033186117e-05f, -9.877920576e-06f,
--9.423995907e-06f, -8.970087949e-06f, -8.516197487e-06f, -8.062325304e-06f, -7.608472183e-06f, -7.154638908e-06f, -6.700826262e-06f, -6.247035029e-06f, -5.793265992e-06f, -5.339519933e-06f,
--4.885797637e-06f, -4.432099885e-06f, -3.978427461e-06f, -3.524781148e-06f, -3.071161727e-06f, -2.617569982e-06f, -2.164006694e-06f, -1.710472647e-06f, -1.256968622e-06f, -8.034954017e-07f,
--3.500537676e-07f, 1.033554983e-07f, 5.567316142e-07f, 1.010073799e-06f, 1.463381270e-06f, 1.916653247e-06f, 2.369888948e-06f, 2.823087592e-06f, 3.276248398e-06f, 3.729370585e-06f,
-4.182453373e-06f, 4.635495980e-06f, 5.088497626e-06f, 5.541457531e-06f, 5.994374915e-06f, 6.447248997e-06f, 6.900078997e-06f, 7.352864136e-06f, 7.805603633e-06f, 8.258296709e-06f,
-8.710942585e-06f, 9.163540480e-06f, 9.616089617e-06f, 1.006858922e-05f, 1.052103850e-05f, 1.097343668e-05f, 1.142578300e-05f, 1.187807665e-05f, 1.233031688e-05f, 1.278250290e-05f,
-1.323463393e-05f, 1.368670920e-05f, 1.413872792e-05f, 1.459068932e-05f, 1.504259262e-05f, 1.549443705e-05f, 1.594622183e-05f, 1.639794618e-05f, 1.684960932e-05f, 1.730121047e-05f,
-1.775274887e-05f, 1.820422373e-05f, 1.865563429e-05f, 1.910697975e-05f, 1.955825935e-05f, 2.000947231e-05f, 2.046061786e-05f, 2.091169521e-05f, 2.136270361e-05f, 2.181364226e-05f,
-2.226451040e-05f, 2.271530724e-05f, 2.316603203e-05f, 2.361668398e-05f, 2.406726231e-05f, 2.451776626e-05f, 2.496819505e-05f, 2.541854791e-05f, 2.586882406e-05f, 2.631902274e-05f,
-2.676914316e-05f, 2.721918455e-05f, 2.766914615e-05f, 2.811902718e-05f, 2.856882687e-05f, 2.901854444e-05f, 2.946817913e-05f, 2.991773016e-05f, 3.036719677e-05f, 3.081657817e-05f,
-3.126587360e-05f, 3.171508230e-05f, 3.216420348e-05f, 3.261323638e-05f, 3.306218022e-05f, 3.351103425e-05f, 3.395979768e-05f, 3.440846976e-05f, 3.485704970e-05f, 3.530553674e-05f,
-3.575393012e-05f, 3.620222905e-05f, 3.665043279e-05f, 3.709854055e-05f, 3.754655157e-05f, 3.799446507e-05f, 3.844228031e-05f, 3.888999650e-05f, 3.933761287e-05f, 3.978512868e-05f,
-4.023254313e-05f, 4.067985548e-05f, 4.112706495e-05f, 4.157417077e-05f, 4.202117219e-05f, 4.246806844e-05f, 4.291485874e-05f, 4.336154234e-05f, 4.380811848e-05f, 4.425458638e-05f,
-4.470094528e-05f, 4.514719442e-05f, 4.559333304e-05f, 4.603936037e-05f, 4.648527565e-05f, 4.693107811e-05f, 4.737676700e-05f, 4.782234154e-05f, 4.826780099e-05f, 4.871314457e-05f,
-4.915837152e-05f, 4.960348109e-05f, 5.004847251e-05f, 5.049334502e-05f, 5.093809786e-05f, 5.138273027e-05f, 5.182724148e-05f, 5.227163075e-05f, 5.271589731e-05f, 5.316004040e-05f,
-5.360405926e-05f, 5.404795313e-05f, 5.449172126e-05f, 5.493536288e-05f, 5.537887724e-05f, 5.582226358e-05f, 5.626552115e-05f, 5.670864918e-05f, 5.715164691e-05f, 5.759451360e-05f,
-5.803724849e-05f, 5.847985082e-05f, 5.892231982e-05f, 5.936465476e-05f, 5.980685487e-05f, 6.024891940e-05f, 6.069084759e-05f, 6.113263870e-05f, 6.157429195e-05f, 6.201580661e-05f,
-6.245718192e-05f, 6.289841712e-05f, 6.333951147e-05f, 6.378046420e-05f, 6.422127457e-05f, 6.466194183e-05f, 6.510246522e-05f, 6.554284400e-05f, 6.598307740e-05f, 6.642316469e-05f,
-6.686310510e-05f, 6.730289790e-05f, 6.774254232e-05f, 6.818203763e-05f, 6.862138307e-05f, 6.906057789e-05f, 6.949962135e-05f, 6.993851269e-05f, 7.037725117e-05f, 7.081583604e-05f,
-7.125426655e-05f, 7.169254196e-05f, 7.213066152e-05f, 7.256862449e-05f, 7.300643011e-05f, 7.344407764e-05f, 7.388156634e-05f, 7.431889546e-05f, 7.475606425e-05f, 7.519307198e-05f,
-7.562991790e-05f, 7.606660126e-05f, 7.650312132e-05f, 7.693947735e-05f, 7.737566858e-05f, 7.781169429e-05f, 7.824755373e-05f, 7.868324617e-05f, 7.911877085e-05f, 7.955412703e-05f,
-7.998931399e-05f, 8.042433097e-05f, 8.085917723e-05f, 8.129385205e-05f, 8.172835467e-05f, 8.216268436e-05f, 8.259684038e-05f, 8.303082199e-05f, 8.346462846e-05f, 8.389825905e-05f,
-8.433171301e-05f, 8.476498962e-05f, 8.519808813e-05f, 8.563100782e-05f, 8.606374794e-05f, 8.649630776e-05f, 8.692868655e-05f, 8.736088356e-05f, 8.779289808e-05f, 8.822472935e-05f,
-8.865637665e-05f, 8.908783925e-05f, 8.951911642e-05f, 8.995020741e-05f, 9.038111150e-05f, 9.081182797e-05f, 9.124235606e-05f, 9.167269506e-05f, 9.210284424e-05f, 9.253280286e-05f,
-9.296257020e-05f, 9.339214552e-05f, 9.382152810e-05f, 9.425071721e-05f, 9.467971212e-05f, 9.510851210e-05f, 9.553711643e-05f, 9.596552437e-05f, 9.639373521e-05f, 9.682174821e-05f,
-9.724956266e-05f, 9.767717781e-05f, 9.810459296e-05f, 9.853180737e-05f, 9.895882032e-05f, 9.938563109e-05f, 9.981223895e-05f, 1.002386432e-04f, 1.006648431e-04f, 1.010908379e-04f,
-1.015166269e-04f, 1.019422094e-04f, 1.023675846e-04f, 1.027927519e-04f, 1.032177106e-04f, 1.036424598e-04f, 1.040669989e-04f, 1.044913271e-04f, 1.049154438e-04f, 1.053393483e-04f,
-1.057630397e-04f, 1.061865175e-04f, 1.066097808e-04f, 1.070328290e-04f, 1.074556613e-04f, 1.078782770e-04f, 1.083006755e-04f, 1.087228559e-04f, 1.091448177e-04f, 1.095665600e-04f,
-1.099880821e-04f, 1.104093834e-04f, 1.108304632e-04f, 1.112513206e-04f, 1.116719551e-04f, 1.120923658e-04f, 1.125125522e-04f, 1.129325134e-04f, 1.133522488e-04f, 1.137717576e-04f,
-1.141910392e-04f, 1.146100928e-04f, 1.150289178e-04f, 1.154475134e-04f, 1.158658789e-04f, 1.162840136e-04f, 1.167019168e-04f, 1.171195878e-04f, 1.175370259e-04f, 1.179542303e-04f,
-1.183712005e-04f, 1.187879356e-04f, 1.192044351e-04f, 1.196206980e-04f, 1.200367239e-04f, 1.204525119e-04f, 1.208680614e-04f, 1.212833716e-04f, 1.216984419e-04f, 1.221132716e-04f,
-1.225278599e-04f, 1.229422062e-04f, 1.233563098e-04f, 1.237701699e-04f, 1.241837859e-04f, 1.245971571e-04f, 1.250102827e-04f, 1.254231621e-04f, 1.258357946e-04f, 1.262481795e-04f,
-1.266603161e-04f, 1.270722036e-04f, 1.274838415e-04f, 1.278952289e-04f, 1.283063653e-04f, 1.287172499e-04f, 1.291278821e-04f, 1.295382610e-04f, 1.299483862e-04f, 1.303582567e-04f,
-1.307678721e-04f, 1.311772315e-04f, 1.315863343e-04f, 1.319951798e-04f, 1.324037673e-04f, 1.328120961e-04f, 1.332201656e-04f, 1.336279750e-04f, 1.340355236e-04f, 1.344428109e-04f,
-1.348498360e-04f, 1.352565984e-04f, 1.356630972e-04f, 1.360693319e-04f, 1.364753018e-04f, 1.368810061e-04f, 1.372864442e-04f, 1.376916154e-04f, 1.380965190e-04f, 1.385011544e-04f,
-1.389055209e-04f, 1.393096177e-04f, 1.397134443e-04f, 1.401169998e-04f, 1.405202837e-04f, 1.409232953e-04f, 1.413260339e-04f, 1.417284988e-04f, 1.421306894e-04f, 1.425326049e-04f,
-1.429342447e-04f, 1.433356081e-04f, 1.437366944e-04f, 1.441375031e-04f, 1.445380333e-04f, 1.449382844e-04f, 1.453382558e-04f, 1.457379468e-04f, 1.461373567e-04f, 1.465364848e-04f,
-1.469353305e-04f, 1.473338931e-04f, 1.477321720e-04f, 1.481301664e-04f, 1.485278757e-04f, 1.489252992e-04f, 1.493224363e-04f, 1.497192862e-04f, 1.501158485e-04f, 1.505121222e-04f,
-1.509081069e-04f, 1.513038019e-04f, 1.516992064e-04f, 1.520943198e-04f, 1.524891414e-04f, 1.528836707e-04f, 1.532779069e-04f, 1.536718493e-04f, 1.540654974e-04f, 1.544588504e-04f,
-1.548519077e-04f, 1.552446686e-04f, 1.556371325e-04f, 1.560292987e-04f, 1.564211666e-04f, 1.568127355e-04f, 1.572040048e-04f, 1.575949737e-04f, 1.579856417e-04f, 1.583760080e-04f,
-1.587660721e-04f, 1.591558333e-04f, 1.595452909e-04f, 1.599344443e-04f, 1.603232928e-04f, 1.607118358e-04f, 1.611000726e-04f, 1.614880026e-04f, 1.618756251e-04f, 1.622629395e-04f,
-1.626499452e-04f, 1.630366414e-04f, 1.634230276e-04f, 1.638091030e-04f, 1.641948671e-04f, 1.645803193e-04f, 1.649654587e-04f, 1.653502850e-04f, 1.657347972e-04f, 1.661189949e-04f,
-1.665028775e-04f, 1.668864441e-04f, 1.672696943e-04f, 1.676526273e-04f, 1.680352426e-04f, 1.684175395e-04f, 1.687995173e-04f, 1.691811755e-04f, 1.695625133e-04f, 1.699435302e-04f,
-1.703242255e-04f, 1.707045985e-04f, 1.710846487e-04f, 1.714643754e-04f, 1.718437780e-04f, 1.722228559e-04f, 1.726016083e-04f, 1.729800347e-04f, 1.733581345e-04f, 1.737359070e-04f,
-1.741133516e-04f, 1.744904676e-04f, 1.748672545e-04f, 1.752437116e-04f, 1.756198382e-04f, 1.759956338e-04f, 1.763710977e-04f, 1.767462294e-04f, 1.771210281e-04f, 1.774954932e-04f,
-1.778696242e-04f, 1.782434204e-04f, 1.786168812e-04f, 1.789900059e-04f, 1.793627940e-04f, 1.797352448e-04f, 1.801073577e-04f, 1.804791321e-04f, 1.808505674e-04f, 1.812216629e-04f,
-1.815924180e-04f, 1.819628321e-04f, 1.823329047e-04f, 1.827026350e-04f, 1.830720225e-04f, 1.834410666e-04f, 1.838097666e-04f, 1.841781219e-04f, 1.845461319e-04f, 1.849137961e-04f,
-1.852811137e-04f, 1.856480842e-04f, 1.860147070e-04f, 1.863809815e-04f, 1.867469070e-04f, 1.871124830e-04f, 1.874777088e-04f, 1.878425839e-04f, 1.882071076e-04f, 1.885712793e-04f,
-1.889350985e-04f, 1.892985645e-04f, 1.896616767e-04f, 1.900244345e-04f, 1.903868373e-04f, 1.907488846e-04f, 1.911105756e-04f, 1.914719099e-04f, 1.918328868e-04f, 1.921935057e-04f,
-1.925537660e-04f, 1.929136672e-04f, 1.932732085e-04f, 1.936323895e-04f, 1.939912096e-04f, 1.943496681e-04f, 1.947077644e-04f, 1.950654980e-04f, 1.954228683e-04f, 1.957798746e-04f,
-1.961365164e-04f, 1.964927931e-04f, 1.968487041e-04f, 1.972042488e-04f, 1.975594266e-04f, 1.979142370e-04f, 1.982686794e-04f, 1.986227530e-04f, 1.989764575e-04f, 1.993297922e-04f,
-1.996827565e-04f, 2.000353498e-04f, 2.003875715e-04f, 2.007394211e-04f, 2.010908980e-04f, 2.014420016e-04f, 2.017927313e-04f, 2.021430865e-04f, 2.024930668e-04f, 2.028426714e-04f,
-2.031918998e-04f, 2.035407514e-04f, 2.038892257e-04f, 2.042373220e-04f, 2.045850399e-04f, 2.049323787e-04f, 2.052793379e-04f, 2.056259168e-04f, 2.059721150e-04f, 2.063179318e-04f,
-2.066633667e-04f, 2.070084191e-04f, 2.073530884e-04f, 2.076973741e-04f, 2.080412756e-04f, 2.083847923e-04f, 2.087279237e-04f, 2.090706692e-04f, 2.094130282e-04f, 2.097550002e-04f,
-2.100965846e-04f, 2.104377809e-04f, 2.107785884e-04f, 2.111190067e-04f, 2.114590351e-04f, 2.117986731e-04f, 2.121379202e-04f, 2.124767758e-04f, 2.128152393e-04f, 2.131533102e-04f,
-2.134909878e-04f, 2.138282718e-04f, 2.141651615e-04f, 2.145016563e-04f, 2.148377557e-04f, 2.151734591e-04f, 2.155087661e-04f, 2.158436760e-04f, 2.161781883e-04f, 2.165123025e-04f,
-2.168460179e-04f, 2.171793341e-04f, 2.175122505e-04f, 2.178447666e-04f, 2.181768817e-04f, 2.185085954e-04f, 2.188399072e-04f, 2.191708164e-04f, 2.195013226e-04f, 2.198314251e-04f,
-2.201611235e-04f, 2.204904172e-04f, 2.208193057e-04f, 2.211477884e-04f, 2.214758648e-04f, 2.218035344e-04f, 2.221307965e-04f, 2.224576508e-04f, 2.227840966e-04f, 2.231101334e-04f,
-2.234357607e-04f, 2.237609779e-04f, 2.240857845e-04f, 2.244101800e-04f, 2.247341639e-04f, 2.250577356e-04f, 2.253808945e-04f, 2.257036403e-04f, 2.260259722e-04f, 2.263478899e-04f,
-2.266693927e-04f, 2.269904802e-04f, 2.273111519e-04f, 2.276314071e-04f, 2.279512454e-04f, 2.282706663e-04f, 2.285896692e-04f, 2.289082536e-04f, 2.292264190e-04f, 2.295441648e-04f,
-2.298614907e-04f, 2.301783959e-04f, 2.304948801e-04f, 2.308109427e-04f, 2.311265832e-04f, 2.314418010e-04f, 2.317565958e-04f, 2.320709668e-04f, 2.323849137e-04f, 2.326984359e-04f,
-2.330115329e-04f, 2.333242042e-04f, 2.336364493e-04f, 2.339482677e-04f, 2.342596588e-04f, 2.345706222e-04f, 2.348811574e-04f, 2.351912638e-04f, 2.355009410e-04f, 2.358101884e-04f,
-2.361190055e-04f, 2.364273919e-04f, 2.367353470e-04f, 2.370428703e-04f, 2.373499614e-04f, 2.376566197e-04f, 2.379628448e-04f, 2.382686361e-04f, 2.385739931e-04f, 2.388789153e-04f,
-2.391834024e-04f, 2.394874536e-04f, 2.397910686e-04f, 2.400942469e-04f, 2.403969880e-04f, 2.406992913e-04f, 2.410011565e-04f, 2.413025829e-04f, 2.416035701e-04f, 2.419041177e-04f,
-2.422042251e-04f, 2.425038919e-04f, 2.428031175e-04f, 2.431019015e-04f, 2.434002433e-04f, 2.436981426e-04f, 2.439955988e-04f, 2.442926115e-04f, 2.445891801e-04f, 2.448853042e-04f,
-2.451809833e-04f, 2.454762170e-04f, 2.457710046e-04f, 2.460653459e-04f, 2.463592402e-04f, 2.466526871e-04f, 2.469456862e-04f, 2.472382370e-04f, 2.475303389e-04f, 2.478219916e-04f,
-2.481131945e-04f, 2.484039472e-04f, 2.486942492e-04f, 2.489841001e-04f, 2.492734993e-04f, 2.495624464e-04f, 2.498509410e-04f, 2.501389825e-04f, 2.504265706e-04f, 2.507137047e-04f,
-2.510003843e-04f, 2.512866091e-04f, 2.515723785e-04f, 2.518576922e-04f, 2.521425495e-04f, 2.524269502e-04f, 2.527108936e-04f, 2.529943794e-04f, 2.532774071e-04f, 2.535599763e-04f,
-2.538420864e-04f, 2.541237371e-04f, 2.544049279e-04f, 2.546856583e-04f, 2.549659278e-04f, 2.552457361e-04f, 2.555250827e-04f, 2.558039671e-04f, 2.560823889e-04f, 2.563603476e-04f,
-2.566378428e-04f, 2.569148740e-04f, 2.571914408e-04f, 2.574675428e-04f, 2.577431795e-04f, 2.580183504e-04f, 2.582930551e-04f, 2.585672933e-04f, 2.588410644e-04f, 2.591143679e-04f,
-2.593872036e-04f, 2.596595708e-04f, 2.599314692e-04f, 2.602028984e-04f, 2.604738579e-04f, 2.607443473e-04f, 2.610143662e-04f, 2.612839140e-04f, 2.615529904e-04f, 2.618215950e-04f,
-2.620897273e-04f, 2.623573869e-04f, 2.626245734e-04f, 2.628912863e-04f, 2.631575252e-04f, 2.634232897e-04f, 2.636885794e-04f, 2.639533937e-04f, 2.642177324e-04f, 2.644815950e-04f,
-2.647449811e-04f, 2.650078902e-04f, 2.652703219e-04f, 2.655322759e-04f, 2.657937516e-04f, 2.660547487e-04f, 2.663152668e-04f, 2.665753054e-04f, 2.668348641e-04f, 2.670939425e-04f,
-2.673525403e-04f, 2.676106569e-04f, 2.678682920e-04f, 2.681254452e-04f, 2.683821160e-04f, 2.686383041e-04f, 2.688940090e-04f, 2.691492304e-04f, 2.694039677e-04f, 2.696582207e-04f,
-2.699119890e-04f, 2.701652720e-04f, 2.704180694e-04f, 2.706703809e-04f, 2.709222059e-04f, 2.711735442e-04f, 2.714243953e-04f, 2.716747588e-04f, 2.719246343e-04f, 2.721740214e-04f,
-2.724229198e-04f, 2.726713289e-04f, 2.729192485e-04f, 2.731666782e-04f, 2.734136175e-04f, 2.736600660e-04f, 2.739060234e-04f, 2.741514893e-04f, 2.743964633e-04f, 2.746409450e-04f,
-2.748849340e-04f, 2.751284299e-04f, 2.753714324e-04f, 2.756139410e-04f, 2.758559554e-04f, 2.760974752e-04f, 2.763385000e-04f, 2.765790295e-04f, 2.768190632e-04f, 2.770586007e-04f,
-2.772976418e-04f, 2.775361859e-04f, 2.777742329e-04f, 2.780117821e-04f, 2.782488334e-04f, 2.784853863e-04f, 2.787214404e-04f, 2.789569954e-04f, 2.791920509e-04f, 2.794266066e-04f,
-2.796606620e-04f, 2.798942168e-04f, 2.801272706e-04f, 2.803598231e-04f, 2.805918739e-04f, 2.808234226e-04f, 2.810544689e-04f, 2.812850123e-04f, 2.815150527e-04f, 2.817445895e-04f,
-2.819736224e-04f, 2.822021511e-04f, 2.824301752e-04f, 2.826576943e-04f, 2.828847081e-04f, 2.831112163e-04f, 2.833372184e-04f, 2.835627142e-04f, 2.837877032e-04f, 2.840121852e-04f,
-2.842361597e-04f, 2.844596264e-04f, 2.846825850e-04f, 2.849050351e-04f, 2.851269764e-04f, 2.853484086e-04f, 2.855693312e-04f, 2.857897439e-04f, 2.860096465e-04f, 2.862290384e-04f,
-2.864479195e-04f, 2.866662894e-04f, 2.868841477e-04f, 2.871014940e-04f, 2.873183281e-04f, 2.875346497e-04f, 2.877504583e-04f, 2.879657536e-04f, 2.881805353e-04f, 2.883948031e-04f,
-2.886085567e-04f, 2.888217956e-04f, 2.890345196e-04f, 2.892467284e-04f, 2.894584215e-04f, 2.896695988e-04f, 2.898802598e-04f, 2.900904042e-04f, 2.903000318e-04f, 2.905091421e-04f,
-2.907177349e-04f, 2.909258098e-04f, 2.911333665e-04f, 2.913404047e-04f, 2.915469241e-04f, 2.917529244e-04f, 2.919584051e-04f, 2.921633661e-04f, 2.923678070e-04f, 2.925717274e-04f,
-2.927751272e-04f, 2.929780058e-04f, 2.931803632e-04f, 2.933821988e-04f, 2.935835125e-04f, 2.937843039e-04f, 2.939845726e-04f, 2.941843185e-04f, 2.943835412e-04f, 2.945822403e-04f,
-2.947804156e-04f, 2.949780668e-04f, 2.951751935e-04f, 2.953717955e-04f, 2.955678725e-04f, 2.957634241e-04f, 2.959584501e-04f, 2.961529501e-04f, 2.963469239e-04f, 2.965403712e-04f,
-2.967332916e-04f, 2.969256849e-04f, 2.971175508e-04f, 2.973088890e-04f, 2.974996992e-04f, 2.976899811e-04f, 2.978797344e-04f, 2.980689588e-04f, 2.982576540e-04f, 2.984458198e-04f,
-2.986334559e-04f, 2.988205619e-04f, 2.990071377e-04f, 2.991931828e-04f, 2.993786970e-04f, 2.995636801e-04f, 2.997481318e-04f, 2.999320517e-04f, 3.001154397e-04f, 3.002982953e-04f,
-3.004806184e-04f, 3.006624087e-04f, 3.008436658e-04f, 3.010243896e-04f, 3.012045798e-04f, 3.013842360e-04f, 3.015633580e-04f, 3.017419455e-04f, 3.019199983e-04f, 3.020975161e-04f,
-3.022744986e-04f, 3.024509455e-04f, 3.026268567e-04f, 3.028022318e-04f, 3.029770705e-04f, 3.031513727e-04f, 3.033251379e-04f, 3.034983661e-04f, 3.036710568e-04f, 3.038432100e-04f,
-3.040148252e-04f, 3.041859022e-04f, 3.043564409e-04f, 3.045264408e-04f, 3.046959019e-04f, 3.048648237e-04f, 3.050332062e-04f, 3.052010489e-04f, 3.053683517e-04f, 3.055351143e-04f,
-3.057013365e-04f, 3.058670180e-04f, 3.060321585e-04f, 3.061967579e-04f, 3.063608159e-04f, 3.065243322e-04f, 3.066873066e-04f, 3.068497388e-04f, 3.070116287e-04f, 3.071729759e-04f,
-3.073337803e-04f, 3.074940415e-04f, 3.076537594e-04f, 3.078129337e-04f, 3.079715642e-04f, 3.081296506e-04f, 3.082871927e-04f, 3.084441904e-04f, 3.086006432e-04f, 3.087565511e-04f,
-3.089119138e-04f, 3.090667310e-04f, 3.092210026e-04f, 3.093747282e-04f, 3.095279078e-04f, 3.096805410e-04f, 3.098326276e-04f, 3.099841674e-04f, 3.101351602e-04f, 3.102856058e-04f,
-3.104355039e-04f, 3.105848544e-04f, 3.107336569e-04f, 3.108819113e-04f, 3.110296175e-04f, 3.111767750e-04f, 3.113233838e-04f, 3.114694436e-04f, 3.116149543e-04f, 3.117599155e-04f,
-3.119043272e-04f, 3.120481890e-04f, 3.121915008e-04f, 3.123342623e-04f, 3.124764735e-04f, 3.126181340e-04f, 3.127592436e-04f, 3.128998022e-04f, 3.130398095e-04f, 3.131792654e-04f,
-3.133181696e-04f, 3.134565219e-04f, 3.135943222e-04f, 3.137315702e-04f, 3.138682658e-04f, 3.140044088e-04f, 3.141399988e-04f, 3.142750359e-04f, 3.144095197e-04f, 3.145434501e-04f,
-3.146768269e-04f, 3.148096499e-04f, 3.149419189e-04f, 3.150736337e-04f, 3.152047941e-04f, 3.153354000e-04f, 3.154654511e-04f, 3.155949474e-04f, 3.157238885e-04f, 3.158522743e-04f,
-3.159801046e-04f, 3.161073793e-04f, 3.162340982e-04f, 3.163602610e-04f, 3.164858677e-04f, 3.166109180e-04f, 3.167354118e-04f, 3.168593488e-04f, 3.169827290e-04f, 3.171055521e-04f,
-3.172278179e-04f, 3.173495264e-04f, 3.174706773e-04f, 3.175912704e-04f, 3.177113056e-04f, 3.178307828e-04f, 3.179497017e-04f, 3.180680622e-04f, 3.181858642e-04f, 3.183031074e-04f,
-3.184197917e-04f, 3.185359169e-04f, 3.186514830e-04f, 3.187664896e-04f, 3.188809367e-04f, 3.189948242e-04f, 3.191081518e-04f, 3.192209194e-04f, 3.193331268e-04f, 3.194447739e-04f,
-3.195558606e-04f, 3.196663866e-04f, 3.197763519e-04f, 3.198857563e-04f, 3.199945996e-04f, 3.201028817e-04f, 3.202106025e-04f, 3.203177617e-04f, 3.204243594e-04f, 3.205303952e-04f,
-3.206358691e-04f, 3.207407809e-04f, 3.208451306e-04f, 3.209489178e-04f, 3.210521426e-04f, 3.211548048e-04f, 3.212569042e-04f, 3.213584407e-04f, 3.214594142e-04f, 3.215598245e-04f,
-3.216596715e-04f, 3.217589551e-04f, 3.218576751e-04f, 3.219558315e-04f, 3.220534240e-04f, 3.221504526e-04f, 3.222469171e-04f, 3.223428174e-04f, 3.224381534e-04f, 3.225329249e-04f,
-3.226271319e-04f, 3.227207742e-04f, 3.228138517e-04f, 3.229063642e-04f, 3.229983117e-04f, 3.230896941e-04f, 3.231805111e-04f, 3.232707628e-04f, 3.233604489e-04f, 3.234495695e-04f,
-3.235381242e-04f, 3.236261132e-04f, 3.237135361e-04f, 3.238003930e-04f, 3.238866838e-04f, 3.239724082e-04f, 3.240575662e-04f, 3.241421578e-04f, 3.242261827e-04f, 3.243096409e-04f,
-3.243925323e-04f, 3.244748568e-04f, 3.245566143e-04f, 3.246378046e-04f, 3.247184278e-04f, 3.247984836e-04f, 3.248779721e-04f, 3.249568930e-04f, 3.250352463e-04f, 3.251130319e-04f,
-3.251902498e-04f, 3.252668997e-04f, 3.253429817e-04f, 3.254184957e-04f, 3.254934415e-04f, 3.255678190e-04f, 3.256416282e-04f, 3.257148690e-04f, 3.257875414e-04f, 3.258596451e-04f,
-3.259311802e-04f, 3.260021465e-04f, 3.260725440e-04f, 3.261423726e-04f, 3.262116323e-04f, 3.262803228e-04f, 3.263484442e-04f, 3.264159964e-04f, 3.264829793e-04f, 3.265493929e-04f,
-3.266152370e-04f, 3.266805116e-04f, 3.267452166e-04f, 3.268093520e-04f, 3.268729176e-04f, 3.269359134e-04f, 3.269983394e-04f, 3.270601955e-04f, 3.271214816e-04f, 3.271821976e-04f,
-3.272423435e-04f, 3.273019192e-04f, 3.273609247e-04f, 3.274193599e-04f, 3.274772248e-04f, 3.275345192e-04f, 3.275912431e-04f, 3.276473965e-04f, 3.277029793e-04f, 3.277579915e-04f,
-3.278124330e-04f, 3.278663037e-04f, 3.279196037e-04f, 3.279723328e-04f, 3.280244910e-04f, 3.280760782e-04f, 3.281270945e-04f, 3.281775397e-04f, 3.282274138e-04f, 3.282767168e-04f,
-3.283254486e-04f, 3.283736092e-04f, 3.284211986e-04f, 3.284682166e-04f, 3.285146633e-04f, 3.285605386e-04f, 3.286058426e-04f, 3.286505750e-04f, 3.286947360e-04f, 3.287383255e-04f,
-3.287813434e-04f, 3.288237897e-04f, 3.288656644e-04f, 3.289069674e-04f, 3.289476988e-04f, 3.289878585e-04f, 3.290274464e-04f, 3.290664626e-04f, 3.291049070e-04f, 3.291427795e-04f,
-3.291800803e-04f, 3.292168092e-04f, 3.292529662e-04f, 3.292885513e-04f, 3.293235644e-04f, 3.293580057e-04f, 3.293918750e-04f, 3.294251723e-04f, 3.294578976e-04f, 3.294900509e-04f,
-3.295216322e-04f, 3.295526415e-04f, 3.295830787e-04f, 3.296129439e-04f, 3.296422370e-04f, 3.296709581e-04f, 3.296991070e-04f, 3.297266839e-04f, 3.297536887e-04f, 3.297801214e-04f,
-3.298059820e-04f, 3.298312705e-04f, 3.298559868e-04f, 3.298801311e-04f, 3.299037033e-04f, 3.299267034e-04f, 3.299491313e-04f, 3.299709872e-04f, 3.299922709e-04f, 3.300129826e-04f,
-3.300331222e-04f, 3.300526897e-04f, 3.300716852e-04f, 3.300901086e-04f, 3.301079599e-04f, 3.301252392e-04f, 3.301419465e-04f, 3.301580817e-04f, 3.301736450e-04f, 3.301886363e-04f,
-3.302030556e-04f, 3.302169029e-04f, 3.302301783e-04f, 3.302428818e-04f, 3.302550134e-04f, 3.302665732e-04f, 3.302775610e-04f, 3.302879771e-04f, 3.302978213e-04f, 3.303070938e-04f,
-3.303157945e-04f, 3.303239235e-04f, 3.303314807e-04f, 3.303384664e-04f, 3.303448803e-04f, 3.303507227e-04f, 3.303559934e-04f, 3.303606926e-04f, 3.303648204e-04f, 3.303683766e-04f,
-3.303713614e-04f, 3.303737747e-04f, 3.303756168e-04f, 3.303768874e-04f, 3.303775868e-04f, 3.303777150e-04f, 3.303772719e-04f, 3.303762577e-04f, 3.303746723e-04f, 3.303725159e-04f,
-3.303697884e-04f, 3.303664900e-04f, 3.303626206e-04f, 3.303581803e-04f, 3.303531692e-04f, 3.303475873e-04f, 3.303414346e-04f, 3.303347113e-04f, 3.303274173e-04f, 3.303195528e-04f,
-3.303111177e-04f, 3.303021122e-04f, 3.302925362e-04f, 3.302823900e-04f, 3.302716734e-04f, 3.302603866e-04f, 3.302485296e-04f, 3.302361025e-04f, 3.302231054e-04f, 3.302095382e-04f,
-3.301954012e-04f, 3.301806943e-04f, 3.301654177e-04f, 3.301495713e-04f, 3.301331553e-04f, 3.301161697e-04f, 3.300986146e-04f, 3.300804901e-04f, 3.300617962e-04f, 3.300425330e-04f,
-3.300227007e-04f, 3.300022992e-04f, 3.299813286e-04f, 3.299597891e-04f, 3.299376806e-04f, 3.299150034e-04f, 3.298917574e-04f, 3.298679427e-04f, 3.298435595e-04f, 3.298186078e-04f,
-3.297930876e-04f, 3.297669992e-04f, 3.297403425e-04f, 3.297131177e-04f, 3.296853248e-04f, 3.296569640e-04f, 3.296280353e-04f, 3.295985388e-04f, 3.295684746e-04f, 3.295378428e-04f,
-3.295066435e-04f, 3.294748768e-04f, 3.294425428e-04f, 3.294096415e-04f, 3.293761732e-04f, 3.293421378e-04f, 3.293075356e-04f, 3.292723665e-04f, 3.292366307e-04f, 3.292003282e-04f,
-3.291634593e-04f, 3.291260240e-04f, 3.290880224e-04f, 3.290494546e-04f, 3.290103207e-04f, 3.289706209e-04f, 3.289303552e-04f, 3.288895237e-04f, 3.288481266e-04f, 3.288061640e-04f,
-3.287636360e-04f, 3.287205427e-04f, 3.286768842e-04f, 3.286326607e-04f, 3.285878722e-04f, 3.285425189e-04f, 3.284966009e-04f, 3.284501183e-04f, 3.284030712e-04f, 3.283554598e-04f,
-3.283072842e-04f, 3.282585445e-04f, 3.282092408e-04f, 3.281593733e-04f, 3.281089421e-04f, 3.280579473e-04f, 3.280063890e-04f, 3.279542674e-04f, 3.279015827e-04f, 3.278483348e-04f,
-3.277945241e-04f, 3.277401505e-04f, 3.276852143e-04f, 3.276297156e-04f, 3.275736545e-04f, 3.275170311e-04f, 3.274598457e-04f, 3.274020983e-04f, 3.273437890e-04f, 3.272849181e-04f,
-3.272254856e-04f, 3.271654918e-04f, 3.271049367e-04f, 3.270438205e-04f, 3.269821433e-04f, 3.269199053e-04f, 3.268571067e-04f, 3.267937475e-04f, 3.267298280e-04f, 3.266653483e-04f,
-3.266003085e-04f, 3.265347088e-04f, 3.264685494e-04f, 3.264018303e-04f, 3.263345519e-04f, 3.262667141e-04f, 3.261983173e-04f, 3.261293614e-04f, 3.260598468e-04f, 3.259897735e-04f,
-3.259191418e-04f, 3.258479517e-04f, 3.257762035e-04f, 3.257038973e-04f, 3.256310333e-04f, 3.255576116e-04f, 3.254836324e-04f, 3.254090959e-04f, 3.253340023e-04f, 3.252583517e-04f,
-3.251821443e-04f, 3.251053802e-04f, 3.250280597e-04f, 3.249501829e-04f, 3.248717500e-04f, 3.247927612e-04f, 3.247132166e-04f, 3.246331165e-04f, 3.245524609e-04f, 3.244712501e-04f,
-3.243894843e-04f, 3.243071636e-04f, 3.242242883e-04f, 3.241408584e-04f, 3.240568743e-04f, 3.239723361e-04f, 3.238872439e-04f, 3.238015980e-04f, 3.237153985e-04f, 3.236286456e-04f,
-3.235413396e-04f, 3.234534806e-04f, 3.233650688e-04f, 3.232761045e-04f, 3.231865877e-04f, 3.230965187e-04f, 3.230058977e-04f, 3.229147249e-04f, 3.228230005e-04f, 3.227307246e-04f,
-3.226378976e-04f, 3.225445195e-04f, 3.224505906e-04f, 3.223561111e-04f, 3.222610812e-04f, 3.221655011e-04f, 3.220693710e-04f, 3.219726911e-04f, 3.218754616e-04f, 3.217776828e-04f,
-3.216793547e-04f, 3.215804778e-04f, 3.214810521e-04f, 3.213810778e-04f, 3.212805553e-04f, 3.211794846e-04f, 3.210778660e-04f, 3.209756998e-04f, 3.208729861e-04f, 3.207697252e-04f,
-3.206659173e-04f, 3.205615625e-04f, 3.204566612e-04f, 3.203512136e-04f, 3.202452197e-04f, 3.201386800e-04f, 3.200315946e-04f, 3.199239637e-04f, 3.198157876e-04f, 3.197070665e-04f,
-3.195978006e-04f, 3.194879901e-04f, 3.193776354e-04f, 3.192667365e-04f, 3.191552937e-04f, 3.190433074e-04f, 3.189307776e-04f, 3.188177047e-04f, 3.187040889e-04f, 3.185899304e-04f,
-3.184752294e-04f, 3.183599862e-04f, 3.182442010e-04f, 3.181278741e-04f, 3.180110057e-04f, 3.178935961e-04f, 3.177756454e-04f, 3.176571540e-04f, 3.175381221e-04f, 3.174185498e-04f,
-3.172984376e-04f, 3.171777856e-04f, 3.170565940e-04f, 3.169348632e-04f, 3.168125933e-04f, 3.166897846e-04f, 3.165664374e-04f, 3.164425520e-04f, 3.163181285e-04f, 3.161931672e-04f,
-3.160676684e-04f, 3.159416324e-04f, 3.158150593e-04f, 3.156879496e-04f, 3.155603033e-04f, 3.154321208e-04f, 3.153034024e-04f, 3.151741482e-04f, 3.150443586e-04f, 3.149140339e-04f,
-3.147831742e-04f, 3.146517799e-04f, 3.145198512e-04f, 3.143873884e-04f, 3.142543917e-04f, 3.141208615e-04f, 3.139867980e-04f, 3.138522014e-04f, 3.137170721e-04f, 3.135814103e-04f,
-3.134452163e-04f, 3.133084904e-04f, 3.131712328e-04f, 3.130334438e-04f, 3.128951236e-04f, 3.127562727e-04f, 3.126168912e-04f, 3.124769794e-04f, 3.123365377e-04f, 3.121955662e-04f,
-3.120540653e-04f, 3.119120353e-04f, 3.117694764e-04f, 3.116263889e-04f, 3.114827731e-04f, 3.113386293e-04f, 3.111939579e-04f, 3.110487590e-04f, 3.109030329e-04f, 3.107567800e-04f,
-3.106100006e-04f, 3.104626949e-04f, 3.103148633e-04f, 3.101665059e-04f, 3.100176232e-04f, 3.098682154e-04f, 3.097182829e-04f, 3.095678258e-04f, 3.094168445e-04f, 3.092653394e-04f,
-3.091133107e-04f, 3.089607587e-04f, 3.088076837e-04f, 3.086540860e-04f, 3.084999659e-04f, 3.083453238e-04f, 3.081901599e-04f, 3.080344746e-04f, 3.078782681e-04f, 3.077215407e-04f,
-3.075642928e-04f, 3.074065247e-04f, 3.072482367e-04f, 3.070894291e-04f, 3.069301022e-04f, 3.067702563e-04f, 3.066098917e-04f, 3.064490088e-04f, 3.062876079e-04f, 3.061256892e-04f,
-3.059632532e-04f, 3.058003001e-04f, 3.056368302e-04f, 3.054728439e-04f, 3.053083415e-04f, 3.051433233e-04f, 3.049777896e-04f, 3.048117408e-04f, 3.046451771e-04f, 3.044780990e-04f,
-3.043105067e-04f, 3.041424006e-04f, 3.039737809e-04f, 3.038046481e-04f, 3.036350024e-04f, 3.034648442e-04f, 3.032941738e-04f, 3.031229915e-04f, 3.029512978e-04f, 3.027790928e-04f,
-3.026063770e-04f, 3.024331507e-04f, 3.022594141e-04f, 3.020851678e-04f, 3.019104119e-04f, 3.017351469e-04f, 3.015593731e-04f, 3.013830908e-04f, 3.012063003e-04f, 3.010290020e-04f,
-3.008511963e-04f, 3.006728835e-04f, 3.004940639e-04f, 3.003147379e-04f, 3.001349058e-04f, 2.999545681e-04f, 2.997737249e-04f, 2.995923767e-04f, 2.994105239e-04f, 2.992281667e-04f,
-2.990453055e-04f, 2.988619408e-04f, 2.986780728e-04f, 2.984937019e-04f, 2.983088284e-04f, 2.981234527e-04f, 2.979375752e-04f, 2.977511963e-04f, 2.975643162e-04f, 2.973769353e-04f,
-2.971890541e-04f, 2.970006728e-04f, 2.968117918e-04f, 2.966224116e-04f, 2.964325324e-04f, 2.962421546e-04f, 2.960512786e-04f, 2.958599047e-04f, 2.956680334e-04f, 2.954756649e-04f,
-2.952827997e-04f, 2.950894381e-04f, 2.948955806e-04f, 2.947012274e-04f, 2.945063789e-04f, 2.943110356e-04f, 2.941151977e-04f, 2.939188657e-04f, 2.937220400e-04f, 2.935247208e-04f,
-2.933269087e-04f, 2.931286039e-04f, 2.929298069e-04f, 2.927305180e-04f, 2.925307376e-04f, 2.923304661e-04f, 2.921297039e-04f, 2.919284514e-04f, 2.917267089e-04f, 2.915244768e-04f,
-2.913217555e-04f, 2.911185455e-04f, 2.909148470e-04f, 2.907106605e-04f, 2.905059863e-04f, 2.903008249e-04f, 2.900951767e-04f, 2.898890420e-04f, 2.896824212e-04f, 2.894753148e-04f,
-2.892677230e-04f, 2.890596464e-04f, 2.888510852e-04f, 2.886420400e-04f, 2.884325111e-04f, 2.882224988e-04f, 2.880120037e-04f, 2.878010261e-04f, 2.875895663e-04f, 2.873776248e-04f,
-2.871652021e-04f, 2.869522984e-04f, 2.867389143e-04f, 2.865250500e-04f, 2.863107061e-04f, 2.860958828e-04f, 2.858805807e-04f, 2.856648002e-04f, 2.854485416e-04f, 2.852318053e-04f,
-2.850145918e-04f, 2.847969014e-04f, 2.845787347e-04f, 2.843600919e-04f, 2.841409735e-04f, 2.839213800e-04f, 2.837013117e-04f, 2.834807691e-04f, 2.832597525e-04f, 2.830382624e-04f,
-2.828162992e-04f, 2.825938633e-04f, 2.823709552e-04f, 2.821475752e-04f, 2.819237238e-04f, 2.816994014e-04f, 2.814746084e-04f, 2.812493453e-04f, 2.810236124e-04f, 2.807974103e-04f,
-2.805707393e-04f, 2.803435998e-04f, 2.801159923e-04f, 2.798879172e-04f, 2.796593749e-04f, 2.794303659e-04f, 2.792008906e-04f, 2.789709494e-04f, 2.787405428e-04f, 2.785096712e-04f,
-2.782783350e-04f, 2.780465346e-04f, 2.778142705e-04f, 2.775815432e-04f, 2.773483530e-04f, 2.771147004e-04f, 2.768805859e-04f, 2.766460098e-04f, 2.764109727e-04f, 2.761754749e-04f,
-2.759395169e-04f, 2.757030992e-04f, 2.754662221e-04f, 2.752288862e-04f, 2.749910918e-04f, 2.747528394e-04f, 2.745141296e-04f, 2.742749626e-04f, 2.740353389e-04f, 2.737952591e-04f,
-2.735547235e-04f, 2.733137327e-04f, 2.730722869e-04f, 2.728303868e-04f, 2.725880327e-04f, 2.723452252e-04f, 2.721019645e-04f, 2.718582514e-04f, 2.716140860e-04f, 2.713694690e-04f,
-2.711244008e-04f, 2.708788818e-04f, 2.706329125e-04f, 2.703864934e-04f, 2.701396248e-04f, 2.698923074e-04f, 2.696445414e-04f, 2.693963275e-04f, 2.691476660e-04f, 2.688985575e-04f,
-2.686490023e-04f, 2.683990009e-04f, 2.681485539e-04f, 2.678976617e-04f, 2.676463247e-04f, 2.673945434e-04f, 2.671423183e-04f, 2.668896498e-04f, 2.666365384e-04f, 2.663829847e-04f,
-2.661289890e-04f, 2.658745518e-04f, 2.656196736e-04f, 2.653643549e-04f, 2.651085962e-04f, 2.648523979e-04f, 2.645957605e-04f, 2.643386844e-04f, 2.640811702e-04f, 2.638232184e-04f,
-2.635648293e-04f, 2.633060035e-04f, 2.630467416e-04f, 2.627870438e-04f, 2.625269108e-04f, 2.622663430e-04f, 2.620053408e-04f, 2.617439049e-04f, 2.614820356e-04f, 2.612197335e-04f,
-2.609569990e-04f, 2.606938326e-04f, 2.604302348e-04f, 2.601662061e-04f, 2.599017470e-04f, 2.596368579e-04f, 2.593715394e-04f, 2.591057920e-04f, 2.588396160e-04f, 2.585730122e-04f,
-2.583059808e-04f, 2.580385225e-04f, 2.577706376e-04f, 2.575023268e-04f, 2.572335905e-04f, 2.569644292e-04f, 2.566948433e-04f, 2.564248335e-04f, 2.561544001e-04f, 2.558835437e-04f,
-2.556122649e-04f, 2.553405640e-04f, 2.550684415e-04f, 2.547958981e-04f, 2.545229342e-04f, 2.542495503e-04f, 2.539757468e-04f, 2.537015244e-04f, 2.534268834e-04f, 2.531518245e-04f,
-2.528763481e-04f, 2.526004548e-04f, 2.523241449e-04f, 2.520474191e-04f, 2.517702779e-04f, 2.514927217e-04f, 2.512147511e-04f, 2.509363666e-04f, 2.506575686e-04f, 2.503783578e-04f,
-2.500987346e-04f, 2.498186995e-04f, 2.495382531e-04f, 2.492573958e-04f, 2.489761282e-04f, 2.486944509e-04f, 2.484123642e-04f, 2.481298688e-04f, 2.478469651e-04f, 2.475636536e-04f,
-2.472799350e-04f, 2.469958097e-04f, 2.467112782e-04f, 2.464263411e-04f, 2.461409988e-04f, 2.458552519e-04f, 2.455691010e-04f, 2.452825465e-04f, 2.449955890e-04f, 2.447082290e-04f,
-2.444204670e-04f, 2.441323035e-04f, 2.438437392e-04f, 2.435547744e-04f, 2.432654098e-04f, 2.429756458e-04f, 2.426854831e-04f, 2.423949220e-04f, 2.421039633e-04f, 2.418126073e-04f,
-2.415208546e-04f, 2.412287059e-04f, 2.409361615e-04f, 2.406432220e-04f, 2.403498880e-04f, 2.400561600e-04f, 2.397620385e-04f, 2.394675241e-04f, 2.391726174e-04f, 2.388773187e-04f,
-2.385816288e-04f, 2.382855481e-04f, 2.379890772e-04f, 2.376922165e-04f, 2.373949668e-04f, 2.370973284e-04f, 2.367993020e-04f, 2.365008881e-04f, 2.362020872e-04f, 2.359028998e-04f,
-2.356033266e-04f, 2.353033681e-04f, 2.350030248e-04f, 2.347022972e-04f, 2.344011860e-04f, 2.340996916e-04f, 2.337978146e-04f, 2.334955555e-04f, 2.331929150e-04f, 2.328898936e-04f,
-2.325864917e-04f, 2.322827101e-04f, 2.319785491e-04f, 2.316740094e-04f, 2.313690916e-04f, 2.310637961e-04f, 2.307581236e-04f, 2.304520745e-04f, 2.301456495e-04f, 2.298388492e-04f,
-2.295316739e-04f, 2.292241245e-04f, 2.289162013e-04f, 2.286079049e-04f, 2.282992360e-04f, 2.279901950e-04f, 2.276807825e-04f, 2.273709992e-04f, 2.270608455e-04f, 2.267503220e-04f,
-2.264394293e-04f, 2.261281679e-04f, 2.258165385e-04f, 2.255045415e-04f, 2.251921776e-04f, 2.248794473e-04f, 2.245663511e-04f, 2.242528897e-04f, 2.239390637e-04f, 2.236248735e-04f,
-2.233103198e-04f, 2.229954031e-04f, 2.226801240e-04f, 2.223644830e-04f, 2.220484808e-04f, 2.217321180e-04f, 2.214153950e-04f, 2.210983125e-04f, 2.207808710e-04f, 2.204630711e-04f,
-2.201449135e-04f, 2.198263986e-04f, 2.195075270e-04f, 2.191882993e-04f, 2.188687162e-04f, 2.185487781e-04f, 2.182284857e-04f, 2.179078396e-04f, 2.175868402e-04f, 2.172654882e-04f,
-2.169437843e-04f, 2.166217289e-04f, 2.162993226e-04f, 2.159765661e-04f, 2.156534598e-04f, 2.153300045e-04f, 2.150062007e-04f, 2.146820489e-04f, 2.143575498e-04f, 2.140327039e-04f,
-2.137075118e-04f, 2.133819742e-04f, 2.130560915e-04f, 2.127298645e-04f, 2.124032936e-04f, 2.120763796e-04f, 2.117491228e-04f, 2.114215241e-04f, 2.110935838e-04f, 2.107653028e-04f,
-2.104366814e-04f, 2.101077204e-04f, 2.097784203e-04f, 2.094487817e-04f, 2.091188052e-04f, 2.087884914e-04f, 2.084578409e-04f, 2.081268543e-04f, 2.077955322e-04f, 2.074638752e-04f,
-2.071318839e-04f, 2.067995588e-04f, 2.064669007e-04f, 2.061339100e-04f, 2.058005875e-04f, 2.054669336e-04f, 2.051329490e-04f, 2.047986343e-04f, 2.044639901e-04f, 2.041290169e-04f,
-2.037937155e-04f, 2.034580864e-04f, 2.031221302e-04f, 2.027858475e-04f, 2.024492389e-04f, 2.021123051e-04f, 2.017750466e-04f, 2.014374640e-04f, 2.010995579e-04f, 2.007613291e-04f,
-2.004227779e-04f, 2.000839052e-04f, 1.997447114e-04f, 1.994051972e-04f, 1.990653633e-04f, 1.987252101e-04f, 1.983847384e-04f, 1.980439487e-04f, 1.977028417e-04f, 1.973614179e-04f,
-1.970196780e-04f, 1.966776226e-04f, 1.963352523e-04f, 1.959925677e-04f, 1.956495694e-04f, 1.953062581e-04f, 1.949626344e-04f, 1.946186989e-04f, 1.942744521e-04f, 1.939298948e-04f,
-1.935850276e-04f, 1.932398510e-04f, 1.928943657e-04f, 1.925485722e-04f, 1.922024713e-04f, 1.918560636e-04f, 1.915093496e-04f, 1.911623300e-04f, 1.908150054e-04f, 1.904673764e-04f,
-1.901194437e-04f, 1.897712079e-04f, 1.894226696e-04f, 1.890738294e-04f, 1.887246879e-04f, 1.883752459e-04f, 1.880255038e-04f, 1.876754624e-04f, 1.873251223e-04f, 1.869744840e-04f,
-1.866235482e-04f, 1.862723156e-04f, 1.859207868e-04f, 1.855689624e-04f, 1.852168430e-04f, 1.848644293e-04f, 1.845117219e-04f, 1.841587214e-04f, 1.838054284e-04f, 1.834518437e-04f,
-1.830979678e-04f, 1.827438013e-04f, 1.823893450e-04f, 1.820345994e-04f, 1.816795651e-04f, 1.813242428e-04f, 1.809686332e-04f, 1.806127368e-04f, 1.802565544e-04f, 1.799000864e-04f,
-1.795433337e-04f, 1.791862968e-04f, 1.788289763e-04f, 1.784713730e-04f, 1.781134873e-04f, 1.777553201e-04f, 1.773968718e-04f, 1.770381432e-04f, 1.766791349e-04f, 1.763198476e-04f,
-1.759602818e-04f, 1.756004383e-04f, 1.752403176e-04f, 1.748799204e-04f, 1.745192474e-04f, 1.741582991e-04f, 1.737970763e-04f, 1.734355796e-04f, 1.730738097e-04f, 1.727117671e-04f,
-1.723494525e-04f, 1.719868666e-04f, 1.716240100e-04f, 1.712608833e-04f, 1.708974873e-04f, 1.705338225e-04f, 1.701698897e-04f, 1.698056894e-04f, 1.694412223e-04f, 1.690764890e-04f,
-1.687114903e-04f, 1.683462267e-04f, 1.679806990e-04f, 1.676149077e-04f, 1.672488535e-04f, 1.668825370e-04f, 1.665159590e-04f, 1.661491201e-04f, 1.657820209e-04f, 1.654146620e-04f,
-1.650470442e-04f, 1.646791681e-04f, 1.643110343e-04f, 1.639426435e-04f, 1.635739964e-04f, 1.632050936e-04f, 1.628359357e-04f, 1.624665235e-04f, 1.620968576e-04f, 1.617269386e-04f,
-1.613567671e-04f, 1.609863440e-04f, 1.606156698e-04f, 1.602447451e-04f, 1.598735707e-04f, 1.595021472e-04f, 1.591304752e-04f, 1.587585554e-04f, 1.583863885e-04f, 1.580139752e-04f,
-1.576413161e-04f, 1.572684118e-04f, 1.568952631e-04f, 1.565218705e-04f, 1.561482348e-04f, 1.557743566e-04f, 1.554002367e-04f, 1.550258755e-04f, 1.546512739e-04f, 1.542764324e-04f,
-1.539013518e-04f, 1.535260327e-04f, 1.531504758e-04f, 1.527746817e-04f, 1.523986512e-04f, 1.520223848e-04f, 1.516458833e-04f, 1.512691472e-04f, 1.508921774e-04f, 1.505149744e-04f,
-1.501375390e-04f, 1.497598717e-04f, 1.493819733e-04f, 1.490038445e-04f, 1.486254858e-04f, 1.482468980e-04f, 1.478680818e-04f, 1.474890378e-04f, 1.471097666e-04f, 1.467302691e-04f,
-1.463505458e-04f, 1.459705973e-04f, 1.455904245e-04f, 1.452100279e-04f, 1.448294083e-04f, 1.444485663e-04f, 1.440675025e-04f, 1.436862178e-04f, 1.433047126e-04f, 1.429229877e-04f,
-1.425410439e-04f, 1.421588817e-04f, 1.417765018e-04f, 1.413939050e-04f, 1.410110918e-04f, 1.406280631e-04f, 1.402448193e-04f, 1.398613613e-04f, 1.394776898e-04f, 1.390938053e-04f,
-1.387097085e-04f, 1.383254002e-04f, 1.379408811e-04f, 1.375561517e-04f, 1.371712128e-04f, 1.367860651e-04f, 1.364007093e-04f, 1.360151460e-04f, 1.356293759e-04f, 1.352433997e-04f,
-1.348572180e-04f, 1.344708317e-04f, 1.340842413e-04f, 1.336974475e-04f, 1.333104510e-04f, 1.329232525e-04f, 1.325358527e-04f, 1.321482523e-04f, 1.317604519e-04f, 1.313724523e-04f,
-1.309842541e-04f, 1.305958579e-04f, 1.302072646e-04f, 1.298184748e-04f, 1.294294891e-04f, 1.290403083e-04f, 1.286509330e-04f, 1.282613640e-04f, 1.278716019e-04f, 1.274816474e-04f,
-1.270915011e-04f, 1.267011639e-04f, 1.263106363e-04f, 1.259199191e-04f, 1.255290130e-04f, 1.251379186e-04f, 1.247466366e-04f, 1.243551678e-04f, 1.239635127e-04f, 1.235716722e-04f,
-1.231796468e-04f, 1.227874374e-04f, 1.223950445e-04f, 1.220024689e-04f, 1.216097113e-04f, 1.212167723e-04f, 1.208236527e-04f, 1.204303531e-04f, 1.200368742e-04f, 1.196432168e-04f,
-1.192493815e-04f, 1.188553690e-04f, 1.184611800e-04f, 1.180668153e-04f, 1.176722754e-04f, 1.172775611e-04f, 1.168826732e-04f, 1.164876122e-04f, 1.160923789e-04f, 1.156969739e-04f,
-1.153013981e-04f, 1.149056520e-04f, 1.145097364e-04f, 1.141136520e-04f, 1.137173994e-04f, 1.133209794e-04f, 1.129243926e-04f, 1.125276398e-04f, 1.121307217e-04f, 1.117336389e-04f,
-1.113363922e-04f, 1.109389822e-04f, 1.105414097e-04f, 1.101436753e-04f, 1.097457798e-04f, 1.093477238e-04f, 1.089495081e-04f, 1.085511333e-04f, 1.081526002e-04f, 1.077539094e-04f,
-1.073550617e-04f, 1.069560578e-04f, 1.065568983e-04f, 1.061575840e-04f, 1.057581155e-04f, 1.053584936e-04f, 1.049587189e-04f, 1.045587923e-04f, 1.041587143e-04f, 1.037584856e-04f,
-1.033581071e-04f, 1.029575793e-04f, 1.025569030e-04f, 1.021560789e-04f, 1.017551077e-04f, 1.013539901e-04f, 1.009527268e-04f, 1.005513185e-04f, 1.001497659e-04f, 9.974806976e-05f,
-9.934623071e-05f, 9.894424948e-05f, 9.854212679e-05f, 9.813986334e-05f, 9.773745982e-05f, 9.733491696e-05f, 9.693223546e-05f, 9.652941602e-05f, 9.612645935e-05f, 9.572336615e-05f,
-9.532013714e-05f, 9.491677303e-05f, 9.451327451e-05f, 9.410964229e-05f, 9.370587710e-05f, 9.330197962e-05f, 9.289795058e-05f, 9.249379067e-05f, 9.208950061e-05f, 9.168508111e-05f,
-9.128053288e-05f, 9.087585662e-05f, 9.047105304e-05f, 9.006612286e-05f, 8.966106678e-05f, 8.925588551e-05f, 8.885057976e-05f, 8.844515025e-05f, 8.803959768e-05f, 8.763392276e-05f,
-8.722812621e-05f, 8.682220874e-05f, 8.641617104e-05f, 8.601001385e-05f, 8.560373786e-05f, 8.519734379e-05f, 8.479083236e-05f, 8.438420426e-05f, 8.397746022e-05f, 8.357060094e-05f,
-8.316362715e-05f, 8.275653954e-05f, 8.234933884e-05f, 8.194202575e-05f, 8.153460099e-05f, 8.112706527e-05f, 8.071941930e-05f, 8.031166381e-05f, 7.990379949e-05f, 7.949582706e-05f,
-7.908774724e-05f, 7.867956075e-05f, 7.827126828e-05f, 7.786287057e-05f, 7.745436832e-05f, 7.704576224e-05f, 7.663705306e-05f, 7.622824148e-05f, 7.581932822e-05f, 7.541031399e-05f,
-7.500119951e-05f, 7.459198550e-05f, 7.418267267e-05f, 7.377326173e-05f, 7.336375339e-05f, 7.295414839e-05f, 7.254444742e-05f, 7.213465121e-05f, 7.172476048e-05f, 7.131477593e-05f,
-7.090469828e-05f, 7.049452825e-05f, 7.008426656e-05f, 6.967391392e-05f, 6.926347104e-05f, 6.885293866e-05f, 6.844231747e-05f, 6.803160820e-05f, 6.762081157e-05f, 6.720992828e-05f,
-6.679895907e-05f, 6.638790464e-05f, 6.597676571e-05f, 6.556554300e-05f, 6.515423723e-05f, 6.474284912e-05f, 6.433137937e-05f, 6.391982872e-05f, 6.350819787e-05f, 6.309648755e-05f,
-6.268469847e-05f, 6.227283135e-05f, 6.186088692e-05f, 6.144886587e-05f, 6.103676895e-05f, 6.062459685e-05f, 6.021235031e-05f, 5.980003004e-05f, 5.938763676e-05f, 5.897517118e-05f,
-5.856263403e-05f, 5.815002603e-05f, 5.773734789e-05f, 5.732460033e-05f, 5.691178407e-05f, 5.649889983e-05f, 5.608594833e-05f, 5.567293029e-05f, 5.525984643e-05f, 5.484669746e-05f,
-5.443348411e-05f, 5.402020710e-05f, 5.360686714e-05f, 5.319346495e-05f, 5.278000126e-05f, 5.236647678e-05f, 5.195289223e-05f, 5.153924834e-05f, 5.112554581e-05f, 5.071178538e-05f,
-5.029796777e-05f, 4.988409368e-05f, 4.947016384e-05f, 4.905617898e-05f, 4.864213981e-05f, 4.822804705e-05f, 4.781390142e-05f, 4.739970364e-05f, 4.698545444e-05f, 4.657115452e-05f,
-4.615680462e-05f, 4.574240545e-05f, 4.532795774e-05f, 4.491346220e-05f, 4.449891955e-05f, 4.408433051e-05f, 4.366969581e-05f, 4.325501617e-05f, 4.284029229e-05f, 4.242552492e-05f,
-4.201071476e-05f, 4.159586254e-05f, 4.118096897e-05f, 4.076603478e-05f, 4.035106069e-05f, 3.993604742e-05f, 3.952099569e-05f, 3.910590622e-05f, 3.869077973e-05f, 3.827561694e-05f,
-3.786041857e-05f, 3.744518535e-05f, 3.702991798e-05f, 3.661461721e-05f, 3.619928373e-05f, 3.578391829e-05f, 3.536852159e-05f, 3.495309435e-05f, 3.453763730e-05f, 3.412215116e-05f,
-3.370663665e-05f, 3.329109449e-05f, 3.287552540e-05f, 3.245993010e-05f, 3.204430931e-05f, 3.162866375e-05f, 3.121299415e-05f, 3.079730122e-05f, 3.038158568e-05f, 2.996584826e-05f,
-2.955008967e-05f, 2.913431064e-05f, 2.871851188e-05f, 2.830269412e-05f, 2.788685808e-05f, 2.747100448e-05f, 2.705513403e-05f, 2.663924746e-05f, 2.622334549e-05f, 2.580742884e-05f,
-2.539149824e-05f, 2.497555439e-05f, 2.455959802e-05f, 2.414362985e-05f, 2.372765060e-05f, 2.331166099e-05f, 2.289566175e-05f, 2.247965359e-05f, 2.206363722e-05f, 2.164761338e-05f,
-2.123158278e-05f, 2.081554615e-05f, 2.039950419e-05f, 1.998345764e-05f, 1.956740720e-05f, 1.915135361e-05f, 1.873529758e-05f, 1.831923983e-05f, 1.790318108e-05f, 1.748712204e-05f,
-1.707106345e-05f, 1.665500602e-05f, 1.623895046e-05f, 1.582289750e-05f, 1.540684786e-05f, 1.499080226e-05f, 1.457476141e-05f, 1.415872603e-05f, 1.374269685e-05f, 1.332667458e-05f,
-1.291065995e-05f, 1.249465366e-05f, 1.207865644e-05f, 1.166266901e-05f, 1.124669209e-05f, 1.083072639e-05f, 1.041477263e-05f, 9.998831541e-06f, 9.582903830e-06f, 9.166990217e-06f,
-8.751091422e-06f, 8.335208161e-06f, 7.919341155e-06f, 7.503491119e-06f, 7.087658773e-06f, 6.671844834e-06f, 6.256050020e-06f, 5.840275049e-06f, 5.424520637e-06f, 5.008787503e-06f,
-4.593076365e-06f, 4.177387938e-06f, 3.761722941e-06f, 3.346082090e-06f, 2.930466104e-06f, 2.514875697e-06f, 2.099311588e-06f, 1.683774494e-06f, 1.268265129e-06f, 8.527842127e-07f,
-4.373324595e-07f, 2.191058641e-08f, -3.934806905e-07f, -8.088406550e-07f, -1.224168591e-06f, -1.639463783e-06f, -2.054725515e-06f, -2.469953071e-06f, -2.885145736e-06f, -3.300302794e-06f,
--3.715423530e-06f, -4.130507229e-06f, -4.545553175e-06f, -4.960560654e-06f, -5.375528951e-06f, -5.790457350e-06f, -6.205345138e-06f, -6.620191600e-06f, -7.034996021e-06f, -7.449757688e-06f,
--7.864475886e-06f, -8.279149900e-06f, -8.693779018e-06f, -9.108362526e-06f, -9.522899709e-06f, -9.937389854e-06f, -1.035183225e-05f, -1.076622618e-05f, -1.118057093e-05f, -1.159486580e-05f,
--1.200911006e-05f, -1.242330300e-05f, -1.283744392e-05f, -1.325153209e-05f, -1.366556682e-05f, -1.407954737e-05f, -1.449347306e-05f, -1.490734315e-05f, -1.532115694e-05f, -1.573491372e-05f,
--1.614861278e-05f, -1.656225341e-05f, -1.697583488e-05f, -1.738935651e-05f, -1.780281756e-05f, -1.821621734e-05f, -1.862955513e-05f, -1.904283022e-05f, -1.945604191e-05f, -1.986918948e-05f,
--2.028227221e-05f, -2.069528942e-05f, -2.110824037e-05f, -2.152112437e-05f, -2.193394070e-05f, -2.234668866e-05f, -2.275936754e-05f, -2.317197662e-05f, -2.358451521e-05f, -2.399698258e-05f,
--2.440937804e-05f, -2.482170088e-05f, -2.523395038e-05f, -2.564612585e-05f, -2.605822657e-05f, -2.647025183e-05f, -2.688220094e-05f, -2.729407317e-05f, -2.770586784e-05f, -2.811758422e-05f,
--2.852922161e-05f, -2.894077931e-05f, -2.935225662e-05f, -2.976365282e-05f, -3.017496720e-05f, -3.058619908e-05f, -3.099734773e-05f, -3.140841246e-05f, -3.181939256e-05f, -3.223028732e-05f,
--3.264109604e-05f, -3.305181803e-05f, -3.346245256e-05f, -3.387299895e-05f, -3.428345648e-05f, -3.469382445e-05f, -3.510410217e-05f, -3.551428892e-05f, -3.592438400e-05f, -3.633438672e-05f,
--3.674429636e-05f, -3.715411224e-05f, -3.756383364e-05f, -3.797345986e-05f, -3.838299021e-05f, -3.879242397e-05f, -3.920176046e-05f, -3.961099897e-05f, -4.002013880e-05f, -4.042917924e-05f,
--4.083811961e-05f, -4.124695919e-05f, -4.165569730e-05f, -4.206433322e-05f, -4.247286627e-05f, -4.288129574e-05f, -4.328962093e-05f, -4.369784115e-05f, -4.410595569e-05f, -4.451396386e-05f,
--4.492186497e-05f, -4.532965830e-05f, -4.573734318e-05f, -4.614491889e-05f, -4.655238474e-05f, -4.695974004e-05f, -4.736698409e-05f, -4.777411620e-05f, -4.818113566e-05f, -4.858804178e-05f,
--4.899483387e-05f, -4.940151123e-05f, -4.980807317e-05f, -5.021451899e-05f, -5.062084800e-05f, -5.102705951e-05f, -5.143315281e-05f, -5.183912722e-05f, -5.224498204e-05f, -5.265071658e-05f,
--5.305633015e-05f, -5.346182206e-05f, -5.386719160e-05f, -5.427243810e-05f, -5.467756085e-05f, -5.508255918e-05f, -5.548743238e-05f, -5.589217976e-05f, -5.629680064e-05f, -5.670129432e-05f,
--5.710566012e-05f, -5.750989734e-05f, -5.791400529e-05f, -5.831798329e-05f, -5.872183065e-05f, -5.912554667e-05f, -5.952913067e-05f, -5.993258196e-05f, -6.033589986e-05f, -6.073908367e-05f,
--6.114213270e-05f, -6.154504628e-05f, -6.194782371e-05f, -6.235046431e-05f, -6.275296739e-05f, -6.315533227e-05f, -6.355755825e-05f, -6.395964466e-05f, -6.436159080e-05f, -6.476339601e-05f,
--6.516505958e-05f, -6.556658083e-05f, -6.596795909e-05f, -6.636919367e-05f, -6.677028388e-05f, -6.717122904e-05f, -6.757202847e-05f, -6.797268149e-05f, -6.837318742e-05f, -6.877354556e-05f,
--6.917375525e-05f, -6.957381580e-05f, -6.997372653e-05f, -7.037348675e-05f, -7.077309580e-05f, -7.117255298e-05f, -7.157185763e-05f, -7.197100905e-05f, -7.237000657e-05f, -7.276884952e-05f,
--7.316753721e-05f, -7.356606896e-05f, -7.396444411e-05f, -7.436266196e-05f, -7.476072185e-05f, -7.515862310e-05f, -7.555636502e-05f, -7.595394695e-05f, -7.635136821e-05f, -7.674862812e-05f,
--7.714572602e-05f, -7.754266121e-05f, -7.793943303e-05f, -7.833604081e-05f, -7.873248387e-05f, -7.912876153e-05f, -7.952487314e-05f, -7.992081800e-05f, -8.031659545e-05f, -8.071220482e-05f,
--8.110764543e-05f, -8.150291662e-05f, -8.189801771e-05f, -8.229294804e-05f, -8.268770692e-05f, -8.308229370e-05f, -8.347670770e-05f, -8.387094825e-05f, -8.426501469e-05f, -8.465890634e-05f,
--8.505262253e-05f, -8.544616261e-05f, -8.583952590e-05f, -8.623271173e-05f, -8.662571944e-05f, -8.701854836e-05f, -8.741119783e-05f, -8.780366717e-05f, -8.819595573e-05f, -8.858806283e-05f,
--8.897998782e-05f, -8.937173003e-05f, -8.976328879e-05f, -9.015466345e-05f, -9.054585333e-05f, -9.093685778e-05f, -9.132767613e-05f, -9.171830773e-05f, -9.210875190e-05f, -9.249900799e-05f,
--9.288907533e-05f, -9.327895328e-05f, -9.366864116e-05f, -9.405813831e-05f, -9.444744408e-05f, -9.483655781e-05f, -9.522547884e-05f, -9.561420650e-05f, -9.600274015e-05f, -9.639107912e-05f,
--9.677922276e-05f, -9.716717042e-05f, -9.755492142e-05f, -9.794247513e-05f, -9.832983087e-05f, -9.871698800e-05f, -9.910394587e-05f, -9.949070381e-05f, -9.987726118e-05f, -1.002636173e-04f,
--1.006497716e-04f, -1.010357233e-04f, -1.014214718e-04f, -1.018070165e-04f, -1.021923567e-04f, -1.025774917e-04f, -1.029624210e-04f, -1.033471438e-04f, -1.037316595e-04f, -1.041159675e-04f,
--1.045000671e-04f, -1.048839576e-04f, -1.052676385e-04f, -1.056511090e-04f, -1.060343685e-04f, -1.064174163e-04f, -1.068002519e-04f, -1.071828746e-04f, -1.075652837e-04f, -1.079474786e-04f,
--1.083294586e-04f, -1.087112231e-04f, -1.090927715e-04f, -1.094741030e-04f, -1.098552171e-04f, -1.102361132e-04f, -1.106167905e-04f, -1.109972484e-04f, -1.113774863e-04f, -1.117575036e-04f,
--1.121372996e-04f, -1.125168736e-04f, -1.128962251e-04f, -1.132753533e-04f, -1.136542578e-04f, -1.140329377e-04f, -1.144113925e-04f, -1.147896215e-04f, -1.151676241e-04f, -1.155453997e-04f,
--1.159229476e-04f, -1.163002672e-04f, -1.166773578e-04f, -1.170542188e-04f, -1.174308497e-04f, -1.178072497e-04f, -1.181834181e-04f, -1.185593545e-04f, -1.189350581e-04f, -1.193105284e-04f,
--1.196857646e-04f, -1.200607661e-04f, -1.204355324e-04f, -1.208100628e-04f, -1.211843566e-04f, -1.215584132e-04f, -1.219322321e-04f, -1.223058125e-04f, -1.226791538e-04f, -1.230522555e-04f,
--1.234251169e-04f, -1.237977373e-04f, -1.241701161e-04f, -1.245422528e-04f, -1.249141466e-04f, -1.252857970e-04f, -1.256572033e-04f, -1.260283649e-04f, -1.263992812e-04f, -1.267699516e-04f,
--1.271403754e-04f, -1.275105520e-04f, -1.278804808e-04f, -1.282501611e-04f, -1.286195924e-04f, -1.289887741e-04f, -1.293577054e-04f, -1.297263859e-04f, -1.300948148e-04f, -1.304629916e-04f,
--1.308309156e-04f, -1.311985862e-04f, -1.315660028e-04f, -1.319331648e-04f, -1.323000715e-04f, -1.326667224e-04f, -1.330331169e-04f, -1.333992542e-04f, -1.337651339e-04f, -1.341307552e-04f,
--1.344961177e-04f, -1.348612206e-04f, -1.352260633e-04f, -1.355906453e-04f, -1.359549660e-04f, -1.363190246e-04f, -1.366828207e-04f, -1.370463535e-04f, -1.374096226e-04f, -1.377726272e-04f,
--1.381353668e-04f, -1.384978408e-04f, -1.388600485e-04f, -1.392219894e-04f, -1.395836628e-04f, -1.399450682e-04f, -1.403062049e-04f, -1.406670723e-04f, -1.410276699e-04f, -1.413879970e-04f,
--1.417480530e-04f, -1.421078373e-04f, -1.424673493e-04f, -1.428265885e-04f, -1.431855541e-04f, -1.435442457e-04f, -1.439026626e-04f, -1.442608042e-04f, -1.446186699e-04f, -1.449762591e-04f,
--1.453335712e-04f, -1.456906057e-04f, -1.460473618e-04f, -1.464038391e-04f, -1.467600370e-04f, -1.471159547e-04f, -1.474715918e-04f, -1.478269477e-04f, -1.481820217e-04f, -1.485368132e-04f,
--1.488913218e-04f, -1.492455467e-04f, -1.495994873e-04f, -1.499531432e-04f, -1.503065137e-04f, -1.506595981e-04f, -1.510123960e-04f, -1.513649068e-04f, -1.517171297e-04f, -1.520690644e-04f,
--1.524207101e-04f, -1.527720662e-04f, -1.531231323e-04f, -1.534739077e-04f, -1.538243918e-04f, -1.541745840e-04f, -1.545244838e-04f, -1.548740906e-04f, -1.552234037e-04f, -1.555724227e-04f,
--1.559211469e-04f, -1.562695757e-04f, -1.566177086e-04f, -1.569655450e-04f, -1.573130843e-04f, -1.576603259e-04f, -1.580072692e-04f, -1.583539137e-04f, -1.587002588e-04f, -1.590463040e-04f,
--1.593920485e-04f, -1.597374919e-04f, -1.600826336e-04f, -1.604274730e-04f, -1.607720096e-04f, -1.611162427e-04f, -1.614601718e-04f, -1.618037963e-04f, -1.621471157e-04f, -1.624901293e-04f,
--1.628328367e-04f, -1.631752372e-04f, -1.635173302e-04f, -1.638591153e-04f, -1.642005917e-04f, -1.645417591e-04f, -1.648826167e-04f, -1.652231641e-04f, -1.655634006e-04f, -1.659033257e-04f,
--1.662429388e-04f, -1.665822394e-04f, -1.669212270e-04f, -1.672599008e-04f, -1.675982604e-04f, -1.679363053e-04f, -1.682740348e-04f, -1.686114484e-04f, -1.689485455e-04f, -1.692853256e-04f,
--1.696217881e-04f, -1.699579324e-04f, -1.702937581e-04f, -1.706292645e-04f, -1.709644511e-04f, -1.712993173e-04f, -1.716338626e-04f, -1.719680864e-04f, -1.723019882e-04f, -1.726355674e-04f,
--1.729688234e-04f, -1.733017557e-04f, -1.736343638e-04f, -1.739666471e-04f, -1.742986051e-04f, -1.746302371e-04f, -1.749615427e-04f, -1.752925213e-04f, -1.756231724e-04f, -1.759534953e-04f,
--1.762834897e-04f, -1.766131548e-04f, -1.769424902e-04f, -1.772714953e-04f, -1.776001696e-04f, -1.779285126e-04f, -1.782565236e-04f, -1.785842022e-04f, -1.789115477e-04f, -1.792385598e-04f,
--1.795652378e-04f, -1.798915811e-04f, -1.802175893e-04f, -1.805432618e-04f, -1.808685981e-04f, -1.811935976e-04f, -1.815182597e-04f, -1.818425841e-04f, -1.821665700e-04f, -1.824902171e-04f,
--1.828135247e-04f, -1.831364923e-04f, -1.834591194e-04f, -1.837814054e-04f, -1.841033498e-04f, -1.844249522e-04f, -1.847462119e-04f, -1.850671284e-04f, -1.853877012e-04f, -1.857079298e-04f,
--1.860278136e-04f, -1.863473521e-04f, -1.866665448e-04f, -1.869853911e-04f, -1.873038906e-04f, -1.876220427e-04f, -1.879398469e-04f, -1.882573026e-04f, -1.885744094e-04f, -1.888911666e-04f,
--1.892075739e-04f, -1.895236306e-04f, -1.898393363e-04f, -1.901546904e-04f, -1.904696924e-04f, -1.907843418e-04f, -1.910986380e-04f, -1.914125807e-04f, -1.917261691e-04f, -1.920394029e-04f,
--1.923522815e-04f, -1.926648043e-04f, -1.929769710e-04f, -1.932887809e-04f, -1.936002335e-04f, -1.939113284e-04f, -1.942220650e-04f, -1.945324429e-04f, -1.948424614e-04f, -1.951521201e-04f,
--1.954614185e-04f, -1.957703561e-04f, -1.960789324e-04f, -1.963871468e-04f, -1.966949989e-04f, -1.970024881e-04f, -1.973096140e-04f, -1.976163760e-04f, -1.979227737e-04f, -1.982288065e-04f,
--1.985344739e-04f, -1.988397755e-04f, -1.991447107e-04f, -1.994492790e-04f, -1.997534799e-04f, -2.000573130e-04f, -2.003607777e-04f, -2.006638736e-04f, -2.009666001e-04f, -2.012689567e-04f,
--2.015709430e-04f, -2.018725584e-04f, -2.021738025e-04f, -2.024746748e-04f, -2.027751747e-04f, -2.030753018e-04f, -2.033750556e-04f, -2.036744356e-04f, -2.039734413e-04f, -2.042720722e-04f,
--2.045703279e-04f, -2.048682078e-04f, -2.051657114e-04f, -2.054628383e-04f, -2.057595880e-04f, -2.060559600e-04f, -2.063519538e-04f, -2.066475689e-04f, -2.069428049e-04f, -2.072376613e-04f,
--2.075321375e-04f, -2.078262331e-04f, -2.081199476e-04f, -2.084132806e-04f, -2.087062315e-04f, -2.089987999e-04f, -2.092909853e-04f, -2.095827873e-04f, -2.098742053e-04f, -2.101652389e-04f,
--2.104558875e-04f, -2.107461508e-04f, -2.110360283e-04f, -2.113255194e-04f, -2.116146237e-04f, -2.119033408e-04f, -2.121916701e-04f, -2.124796112e-04f, -2.127671637e-04f, -2.130543270e-04f,
--2.133411007e-04f, -2.136274843e-04f, -2.139134774e-04f, -2.141990795e-04f, -2.144842901e-04f, -2.147691087e-04f, -2.150535350e-04f, -2.153375684e-04f, -2.156212084e-04f, -2.159044547e-04f,
--2.161873067e-04f, -2.164697641e-04f, -2.167518262e-04f, -2.170334927e-04f, -2.173147632e-04f, -2.175956371e-04f, -2.178761140e-04f, -2.181561934e-04f, -2.184358749e-04f, -2.187151581e-04f,
--2.189940424e-04f, -2.192725275e-04f, -2.195506129e-04f, -2.198282981e-04f, -2.201055826e-04f, -2.203824661e-04f, -2.206589481e-04f, -2.209350281e-04f, -2.212107056e-04f, -2.214859804e-04f,
--2.217608517e-04f, -2.220353194e-04f, -2.223093828e-04f, -2.225830416e-04f, -2.228562953e-04f, -2.231291435e-04f, -2.234015857e-04f, -2.236736214e-04f, -2.239452504e-04f, -2.242164720e-04f,
--2.244872859e-04f, -2.247576916e-04f, -2.250276887e-04f, -2.252972768e-04f, -2.255664554e-04f, -2.258352240e-04f, -2.261035823e-04f, -2.263715298e-04f, -2.266390662e-04f, -2.269061908e-04f,
--2.271729034e-04f, -2.274392034e-04f, -2.277050905e-04f, -2.279705643e-04f, -2.282356242e-04f, -2.285002699e-04f, -2.287645010e-04f, -2.290283170e-04f, -2.292917174e-04f, -2.295547019e-04f,
--2.298172701e-04f, -2.300794215e-04f, -2.303411557e-04f, -2.306024723e-04f, -2.308633708e-04f, -2.311238508e-04f, -2.313839120e-04f, -2.316435539e-04f, -2.319027760e-04f, -2.321615780e-04f,
--2.324199595e-04f, -2.326779200e-04f, -2.329354591e-04f, -2.331925763e-04f, -2.334492714e-04f, -2.337055439e-04f, -2.339613933e-04f, -2.342168193e-04f, -2.344718214e-04f, -2.347263992e-04f,
--2.349805524e-04f, -2.352342804e-04f, -2.354875830e-04f, -2.357404597e-04f, -2.359929100e-04f, -2.362449337e-04f, -2.364965302e-04f, -2.367476993e-04f, -2.369984404e-04f, -2.372487531e-04f,
--2.374986372e-04f, -2.377480921e-04f, -2.379971175e-04f, -2.382457130e-04f, -2.384938782e-04f, -2.387416126e-04f, -2.389889159e-04f, -2.392357877e-04f, -2.394822276e-04f, -2.397282352e-04f,
--2.399738102e-04f, -2.402189520e-04f, -2.404636603e-04f, -2.407079348e-04f, -2.409517750e-04f, -2.411951806e-04f, -2.414381511e-04f, -2.416806862e-04f, -2.419227855e-04f, -2.421644486e-04f,
--2.424056751e-04f, -2.426464646e-04f, -2.428868168e-04f, -2.431267312e-04f, -2.433662075e-04f, -2.436052453e-04f, -2.438438443e-04f, -2.440820039e-04f, -2.443197239e-04f, -2.445570040e-04f,
--2.447938436e-04f, -2.450302424e-04f, -2.452662001e-04f, -2.455017162e-04f, -2.457367905e-04f, -2.459714224e-04f, -2.462056117e-04f, -2.464393580e-04f, -2.466726610e-04f, -2.469055201e-04f,
--2.471379351e-04f, -2.473699056e-04f, -2.476014313e-04f, -2.478325117e-04f, -2.480631465e-04f, -2.482933353e-04f, -2.485230778e-04f, -2.487523736e-04f, -2.489812223e-04f, -2.492096236e-04f,
--2.494375771e-04f, -2.496650825e-04f, -2.498921393e-04f, -2.501187473e-04f, -2.503449061e-04f, -2.505706152e-04f, -2.507958745e-04f, -2.510206834e-04f, -2.512450417e-04f, -2.514689490e-04f,
--2.516924049e-04f, -2.519154091e-04f, -2.521379612e-04f, -2.523600609e-04f, -2.525817078e-04f, -2.528029016e-04f, -2.530236420e-04f, -2.532439285e-04f, -2.534637609e-04f, -2.536831388e-04f,
--2.539020618e-04f, -2.541205296e-04f, -2.543385418e-04f, -2.545560982e-04f, -2.547731983e-04f, -2.549898419e-04f, -2.552060285e-04f, -2.554217579e-04f, -2.556370297e-04f, -2.558518436e-04f,
--2.560661992e-04f, -2.562800962e-04f, -2.564935343e-04f, -2.567065131e-04f, -2.569190322e-04f, -2.571310915e-04f, -2.573426904e-04f, -2.575538288e-04f, -2.577645062e-04f, -2.579747223e-04f,
--2.581844768e-04f, -2.583937694e-04f, -2.586025998e-04f, -2.588109675e-04f, -2.590188724e-04f, -2.592263140e-04f, -2.594332921e-04f, -2.596398063e-04f, -2.598458562e-04f, -2.600514417e-04f,
--2.602565623e-04f, -2.604612177e-04f, -2.606654077e-04f, -2.608691318e-04f, -2.610723898e-04f, -2.612751814e-04f, -2.614775062e-04f, -2.616793640e-04f, -2.618807543e-04f, -2.620816770e-04f,
--2.622821316e-04f, -2.624821179e-04f, -2.626816356e-04f, -2.628806844e-04f, -2.630792638e-04f, -2.632773737e-04f, -2.634750138e-04f, -2.636721836e-04f, -2.638688830e-04f, -2.640651116e-04f,
--2.642608691e-04f, -2.644561552e-04f, -2.646509695e-04f, -2.648453119e-04f, -2.650391820e-04f, -2.652325794e-04f, -2.654255040e-04f, -2.656179554e-04f, -2.658099332e-04f, -2.660014373e-04f,
--2.661924672e-04f, -2.663830228e-04f, -2.665731037e-04f, -2.667627096e-04f, -2.669518402e-04f, -2.671404953e-04f, -2.673286745e-04f, -2.675163776e-04f, -2.677036042e-04f, -2.678903542e-04f,
--2.680766271e-04f, -2.682624227e-04f, -2.684477407e-04f, -2.686325809e-04f, -2.688169429e-04f, -2.690008265e-04f, -2.691842313e-04f, -2.693671572e-04f, -2.695496038e-04f, -2.697315708e-04f,
--2.699130580e-04f, -2.700940651e-04f, -2.702745917e-04f, -2.704546377e-04f, -2.706342028e-04f, -2.708132866e-04f, -2.709918890e-04f, -2.711700095e-04f, -2.713476480e-04f, -2.715248042e-04f,
--2.717014779e-04f, -2.718776686e-04f, -2.720533763e-04f, -2.722286006e-04f, -2.724033412e-04f, -2.725775978e-04f, -2.727513703e-04f, -2.729246583e-04f, -2.730974617e-04f, -2.732697800e-04f,
--2.734416131e-04f, -2.736129607e-04f, -2.737838225e-04f, -2.739541983e-04f, -2.741240878e-04f, -2.742934908e-04f, -2.744624069e-04f, -2.746308361e-04f, -2.747987779e-04f, -2.749662321e-04f,
--2.751331985e-04f, -2.752996769e-04f, -2.754656669e-04f, -2.756311684e-04f, -2.757961811e-04f, -2.759607046e-04f, -2.761247389e-04f, -2.762882836e-04f, -2.764513385e-04f, -2.766139033e-04f,
--2.767759778e-04f, -2.769375618e-04f, -2.770986549e-04f, -2.772592571e-04f, -2.774193679e-04f, -2.775789873e-04f, -2.777381149e-04f, -2.778967505e-04f, -2.780548939e-04f, -2.782125448e-04f,
--2.783697030e-04f, -2.785263682e-04f, -2.786825403e-04f, -2.788382190e-04f, -2.789934040e-04f, -2.791480952e-04f, -2.793022923e-04f, -2.794559950e-04f, -2.796092032e-04f, -2.797619165e-04f,
--2.799141349e-04f, -2.800658580e-04f, -2.802170856e-04f, -2.803678176e-04f, -2.805180536e-04f, -2.806677935e-04f, -2.808170370e-04f, -2.809657840e-04f, -2.811140341e-04f, -2.812617872e-04f,
--2.814090431e-04f, -2.815558015e-04f, -2.817020622e-04f, -2.818478250e-04f, -2.819930897e-04f, -2.821378561e-04f, -2.822821240e-04f, -2.824258931e-04f, -2.825691632e-04f, -2.827119342e-04f,
--2.828542058e-04f, -2.829959778e-04f, -2.831372500e-04f, -2.832780222e-04f, -2.834182941e-04f, -2.835580657e-04f, -2.836973366e-04f, -2.838361067e-04f, -2.839743758e-04f, -2.841121436e-04f,
--2.842494101e-04f, -2.843861748e-04f, -2.845224378e-04f, -2.846581987e-04f, -2.847934574e-04f, -2.849282136e-04f, -2.850624672e-04f, -2.851962181e-04f, -2.853294659e-04f, -2.854622105e-04f,
--2.855944517e-04f, -2.857261893e-04f, -2.858574231e-04f, -2.859881530e-04f, -2.861183787e-04f, -2.862481001e-04f, -2.863773169e-04f, -2.865060291e-04f, -2.866342363e-04f, -2.867619384e-04f,
--2.868891353e-04f, -2.870158267e-04f, -2.871420125e-04f, -2.872676924e-04f, -2.873928664e-04f, -2.875175342e-04f, -2.876416957e-04f, -2.877653506e-04f, -2.878884988e-04f, -2.880111401e-04f,
--2.881332744e-04f, -2.882549014e-04f, -2.883760211e-04f, -2.884966332e-04f, -2.886167375e-04f, -2.887363339e-04f, -2.888554222e-04f, -2.889740023e-04f, -2.890920740e-04f, -2.892096370e-04f,
--2.893266914e-04f, -2.894432368e-04f, -2.895592731e-04f, -2.896748002e-04f, -2.897898179e-04f, -2.899043260e-04f, -2.900183244e-04f, -2.901318129e-04f, -2.902447913e-04f, -2.903572596e-04f,
--2.904692175e-04f, -2.905806649e-04f, -2.906916016e-04f, -2.908020275e-04f, -2.909119424e-04f, -2.910213462e-04f, -2.911302387e-04f, -2.912386198e-04f, -2.913464893e-04f, -2.914538471e-04f,
--2.915606930e-04f, -2.916670268e-04f, -2.917728485e-04f, -2.918781579e-04f, -2.919829549e-04f, -2.920872392e-04f, -2.921910108e-04f, -2.922942695e-04f, -2.923970152e-04f, -2.924992477e-04f,
--2.926009669e-04f, -2.927021727e-04f, -2.928028649e-04f, -2.929030434e-04f, -2.930027080e-04f, -2.931018587e-04f, -2.932004952e-04f, -2.932986175e-04f, -2.933962254e-04f, -2.934933188e-04f,
--2.935898975e-04f, -2.936859615e-04f, -2.937815106e-04f, -2.938765446e-04f, -2.939710635e-04f, -2.940650671e-04f, -2.941585554e-04f, -2.942515281e-04f, -2.943439851e-04f, -2.944359264e-04f,
--2.945273518e-04f, -2.946182612e-04f, -2.947086544e-04f, -2.947985314e-04f, -2.948878921e-04f, -2.949767362e-04f, -2.950650638e-04f, -2.951528747e-04f, -2.952401687e-04f, -2.953269458e-04f,
--2.954132059e-04f, -2.954989488e-04f, -2.955841744e-04f, -2.956688826e-04f, -2.957530734e-04f, -2.958367466e-04f, -2.959199020e-04f, -2.960025397e-04f, -2.960846595e-04f, -2.961662612e-04f,
--2.962473448e-04f, -2.963279103e-04f, -2.964079574e-04f, -2.964874860e-04f, -2.965664962e-04f, -2.966449878e-04f, -2.967229606e-04f, -2.968004146e-04f, -2.968773497e-04f, -2.969537659e-04f,
--2.970296629e-04f, -2.971050407e-04f, -2.971798993e-04f, -2.972542385e-04f, -2.973280583e-04f, -2.974013585e-04f, -2.974741390e-04f, -2.975463999e-04f, -2.976181409e-04f, -2.976893620e-04f,
--2.977600632e-04f, -2.978302443e-04f, -2.978999052e-04f, -2.979690459e-04f, -2.980376663e-04f, -2.981057664e-04f, -2.981733459e-04f, -2.982404049e-04f, -2.983069433e-04f, -2.983729610e-04f,
--2.984384579e-04f, -2.985034340e-04f, -2.985678891e-04f, -2.986318232e-04f, -2.986952363e-04f, -2.987581283e-04f, -2.988204990e-04f, -2.988823484e-04f, -2.989436765e-04f, -2.990044832e-04f,
--2.990647684e-04f, -2.991245321e-04f, -2.991837741e-04f, -2.992424945e-04f, -2.993006931e-04f, -2.993583699e-04f, -2.994155249e-04f, -2.994721580e-04f, -2.995282690e-04f, -2.995838581e-04f,
--2.996389250e-04f, -2.996934698e-04f, -2.997474923e-04f, -2.998009927e-04f, -2.998539707e-04f, -2.999064263e-04f, -2.999583595e-04f, -3.000097702e-04f, -3.000606584e-04f, -3.001110241e-04f,
--3.001608671e-04f, -3.002101875e-04f, -3.002589851e-04f, -3.003072600e-04f, -3.003550121e-04f, -3.004022413e-04f, -3.004489476e-04f, -3.004951310e-04f, -3.005407915e-04f, -3.005859289e-04f,
--3.006305432e-04f, -3.006746345e-04f, -3.007182027e-04f, -3.007612476e-04f, -3.008037694e-04f, -3.008457679e-04f, -3.008872432e-04f, -3.009281952e-04f, -3.009686238e-04f, -3.010085291e-04f,
--3.010479110e-04f, -3.010867694e-04f, -3.011251044e-04f, -3.011629159e-04f, -3.012002039e-04f, -3.012369684e-04f, -3.012732093e-04f, -3.013089266e-04f, -3.013441204e-04f, -3.013787905e-04f,
--3.014129369e-04f, -3.014465597e-04f, -3.014796588e-04f, -3.015122342e-04f, -3.015442859e-04f, -3.015758138e-04f, -3.016068180e-04f, -3.016372984e-04f, -3.016672550e-04f, -3.016966878e-04f,
--3.017255969e-04f, -3.017539821e-04f, -3.017818434e-04f, -3.018091810e-04f, -3.018359946e-04f, -3.018622845e-04f, -3.018880504e-04f, -3.019132925e-04f, -3.019380107e-04f, -3.019622051e-04f,
--3.019858756e-04f, -3.020090221e-04f, -3.020316449e-04f, -3.020537437e-04f, -3.020753186e-04f, -3.020963697e-04f, -3.021168969e-04f, -3.021369002e-04f, -3.021563796e-04f, -3.021753352e-04f,
--3.021937669e-04f, -3.022116748e-04f, -3.022290588e-04f, -3.022459190e-04f, -3.022622553e-04f, -3.022780679e-04f, -3.022933566e-04f, -3.023081215e-04f, -3.023223627e-04f, -3.023360801e-04f,
--3.023492738e-04f, -3.023619437e-04f, -3.023740899e-04f, -3.023857124e-04f, -3.023968113e-04f, -3.024073865e-04f, -3.024174380e-04f, -3.024269659e-04f, -3.024359703e-04f, -3.024444510e-04f,
--3.024524082e-04f, -3.024598419e-04f, -3.024667521e-04f, -3.024731389e-04f, -3.024790021e-04f, -3.024843420e-04f, -3.024891585e-04f, -3.024934517e-04f, -3.024972215e-04f, -3.025004680e-04f,
--3.025031913e-04f, -3.025053913e-04f, -3.025070682e-04f, -3.025082219e-04f, -3.025088525e-04f, -3.025089601e-04f, -3.025085446e-04f, -3.025076061e-04f, -3.025061446e-04f, -3.025041602e-04f,
--3.025016530e-04f, -3.024986229e-04f, -3.024950700e-04f, -3.024909944e-04f, -3.024863961e-04f, -3.024812752e-04f, -3.024756316e-04f, -3.024694655e-04f, -3.024627769e-04f, -3.024555659e-04f,
--3.024478324e-04f, -3.024395766e-04f, -3.024307985e-04f, -3.024214982e-04f, -3.024116757e-04f, -3.024013310e-04f, -3.023904643e-04f, -3.023790755e-04f, -3.023671648e-04f, -3.023547322e-04f,
--3.023417778e-04f, -3.023283015e-04f, -3.023143036e-04f, -3.022997840e-04f, -3.022847428e-04f, -3.022691801e-04f, -3.022530960e-04f, -3.022364904e-04f, -3.022193635e-04f, -3.022017154e-04f,
--3.021835461e-04f, -3.021648556e-04f, -3.021456441e-04f, -3.021259117e-04f, -3.021056583e-04f, -3.020848841e-04f, -3.020635892e-04f, -3.020417736e-04f, -3.020194374e-04f, -3.019965806e-04f,
--3.019732034e-04f, -3.019493059e-04f, -3.019248880e-04f, -3.018999500e-04f, -3.018744918e-04f, -3.018485136e-04f, -3.018220155e-04f, -3.017949974e-04f, -3.017674596e-04f, -3.017394021e-04f,
--3.017108249e-04f, -3.016817282e-04f, -3.016521121e-04f, -3.016219767e-04f, -3.015913220e-04f, -3.015601481e-04f, -3.015284551e-04f, -3.014962432e-04f, -3.014635124e-04f, -3.014302628e-04f,
--3.013964945e-04f, -3.013622076e-04f, -3.013274022e-04f, -3.012920784e-04f, -3.012562363e-04f, -3.012198760e-04f, -3.011829976e-04f, -3.011456012e-04f, -3.011076869e-04f, -3.010692549e-04f,
--3.010303051e-04f, -3.009908377e-04f, -3.009508529e-04f, -3.009103508e-04f, -3.008693313e-04f, -3.008277947e-04f, -3.007857411e-04f, -3.007431706e-04f, -3.007000832e-04f, -3.006564792e-04f,
--3.006123585e-04f, -3.005677214e-04f, -3.005225679e-04f, -3.004768982e-04f, -3.004307124e-04f, -3.003840105e-04f, -3.003367928e-04f, -3.002890593e-04f, -3.002408102e-04f, -3.001920455e-04f,
--3.001427654e-04f, -3.000929701e-04f, -3.000426596e-04f, -2.999918341e-04f, -2.999404937e-04f, -2.998886385e-04f, -2.998362687e-04f, -2.997833843e-04f, -2.997299856e-04f, -2.996760726e-04f,
--2.996216454e-04f, -2.995667043e-04f, -2.995112493e-04f, -2.994552806e-04f, -2.993987983e-04f, -2.993418026e-04f, -2.992842935e-04f, -2.992262713e-04f, -2.991677360e-04f, -2.991086878e-04f,
--2.990491268e-04f, -2.989890533e-04f, -2.989284672e-04f, -2.988673688e-04f, -2.988057582e-04f, -2.987436356e-04f, -2.986810010e-04f, -2.986178547e-04f, -2.985541968e-04f, -2.984900275e-04f,
--2.984253468e-04f, -2.983601549e-04f, -2.982944521e-04f, -2.982282384e-04f, -2.981615139e-04f, -2.980942790e-04f, -2.980265336e-04f, -2.979582780e-04f, -2.978895123e-04f, -2.978202366e-04f,
--2.977504512e-04f, -2.976801562e-04f, -2.976093517e-04f, -2.975380379e-04f, -2.974662150e-04f, -2.973938831e-04f, -2.973210424e-04f, -2.972476930e-04f, -2.971738352e-04f, -2.970994690e-04f,
--2.970245947e-04f, -2.969492124e-04f, -2.968733223e-04f, -2.967969246e-04f, -2.967200194e-04f, -2.966426069e-04f, -2.965646872e-04f, -2.964862606e-04f, -2.964073272e-04f, -2.963278872e-04f,
--2.962479407e-04f, -2.961674880e-04f, -2.960865292e-04f, -2.960050645e-04f, -2.959230940e-04f, -2.958406180e-04f, -2.957576366e-04f, -2.956741501e-04f, -2.955901585e-04f, -2.955056621e-04f,
--2.954206611e-04f, -2.953351556e-04f, -2.952491459e-04f, -2.951626320e-04f, -2.950756143e-04f, -2.949880929e-04f, -2.949000679e-04f, -2.948115396e-04f, -2.947225082e-04f, -2.946329738e-04f,
--2.945429366e-04f, -2.944523969e-04f, -2.943613548e-04f, -2.942698106e-04f, -2.941777644e-04f, -2.940852163e-04f, -2.939921667e-04f, -2.938986157e-04f, -2.938045636e-04f, -2.937100104e-04f,
--2.936149564e-04f, -2.935194019e-04f, -2.934233470e-04f, -2.933267919e-04f, -2.932297368e-04f, -2.931321819e-04f, -2.930341275e-04f, -2.929355737e-04f, -2.928365208e-04f, -2.927369689e-04f,
--2.926369183e-04f, -2.925363692e-04f, -2.924353217e-04f, -2.923337762e-04f, -2.922317328e-04f, -2.921291917e-04f, -2.920261531e-04f, -2.919226173e-04f, -2.918185844e-04f, -2.917140548e-04f,
--2.916090285e-04f, -2.915035059e-04f, -2.913974871e-04f, -2.912909724e-04f, -2.911839620e-04f, -2.910764561e-04f, -2.909684549e-04f, -2.908599586e-04f, -2.907509676e-04f, -2.906414819e-04f,
--2.905315019e-04f, -2.904210277e-04f, -2.903100596e-04f, -2.901985978e-04f, -2.900866426e-04f, -2.899741941e-04f, -2.898612526e-04f, -2.897478184e-04f, -2.896338916e-04f, -2.895194726e-04f,
--2.894045614e-04f, -2.892891585e-04f, -2.891732639e-04f, -2.890568780e-04f, -2.889400010e-04f, -2.888226331e-04f, -2.887047746e-04f, -2.885864256e-04f, -2.884675865e-04f, -2.883482575e-04f,
--2.882284388e-04f, -2.881081307e-04f, -2.879873334e-04f, -2.878660472e-04f, -2.877442722e-04f, -2.876220088e-04f, -2.874992572e-04f, -2.873760177e-04f, -2.872522905e-04f, -2.871280758e-04f,
--2.870033739e-04f, -2.868781851e-04f, -2.867525095e-04f, -2.866263476e-04f, -2.864996994e-04f, -2.863725653e-04f, -2.862449455e-04f, -2.861168403e-04f, -2.859882500e-04f, -2.858591747e-04f,
--2.857296148e-04f, -2.855995705e-04f, -2.854690421e-04f, -2.853380299e-04f, -2.852065340e-04f, -2.850745548e-04f, -2.849420925e-04f, -2.848091474e-04f, -2.846757198e-04f, -2.845418099e-04f,
--2.844074180e-04f, -2.842725444e-04f, -2.841371893e-04f, -2.840013530e-04f, -2.838650357e-04f, -2.837282378e-04f, -2.835909595e-04f, -2.834532012e-04f, -2.833149629e-04f, -2.831762451e-04f,
--2.830370481e-04f, -2.828973720e-04f, -2.827572171e-04f, -2.826165839e-04f, -2.824754724e-04f, -2.823338830e-04f, -2.821918161e-04f, -2.820492718e-04f, -2.819062504e-04f, -2.817627523e-04f,
--2.816187777e-04f, -2.814743268e-04f, -2.813294001e-04f, -2.811839977e-04f, -2.810381200e-04f, -2.808917672e-04f, -2.807449397e-04f, -2.805976377e-04f, -2.804498615e-04f, -2.803016113e-04f,
--2.801528876e-04f, -2.800036906e-04f, -2.798540205e-04f, -2.797038778e-04f, -2.795532625e-04f, -2.794021752e-04f, -2.792506160e-04f, -2.790985853e-04f, -2.789460833e-04f, -2.787931104e-04f,
--2.786396668e-04f, -2.784857529e-04f, -2.783313689e-04f, -2.781765152e-04f, -2.780211920e-04f, -2.778653998e-04f, -2.777091386e-04f, -2.775524090e-04f, -2.773952111e-04f, -2.772375453e-04f,
--2.770794119e-04f, -2.769208113e-04f, -2.767617436e-04f, -2.766022092e-04f, -2.764422085e-04f, -2.762817417e-04f, -2.761208092e-04f, -2.759594112e-04f, -2.757975481e-04f, -2.756352202e-04f,
--2.754724278e-04f, -2.753091712e-04f, -2.751454508e-04f, -2.749812669e-04f, -2.748166197e-04f, -2.746515096e-04f, -2.744859370e-04f, -2.743199020e-04f, -2.741534052e-04f, -2.739864467e-04f,
--2.738190269e-04f, -2.736511462e-04f, -2.734828048e-04f, -2.733140031e-04f, -2.731447414e-04f, -2.729750200e-04f, -2.728048393e-04f, -2.726341996e-04f, -2.724631012e-04f, -2.722915445e-04f,
--2.721195297e-04f, -2.719470572e-04f, -2.717741274e-04f, -2.716007406e-04f, -2.714268970e-04f, -2.712525972e-04f, -2.710778412e-04f, -2.709026297e-04f, -2.707269627e-04f, -2.705508408e-04f,
--2.703742642e-04f, -2.701972332e-04f, -2.700197483e-04f, -2.698418097e-04f, -2.696634178e-04f, -2.694845729e-04f, -2.693052754e-04f, -2.691255257e-04f, -2.689453239e-04f, -2.687646707e-04f,
--2.685835661e-04f, -2.684020107e-04f, -2.682200047e-04f, -2.680375485e-04f, -2.678546424e-04f, -2.676712869e-04f, -2.674874822e-04f, -2.673032287e-04f, -2.671185267e-04f, -2.669333767e-04f,
--2.667477789e-04f, -2.665617337e-04f, -2.663752415e-04f, -2.661883026e-04f, -2.660009174e-04f, -2.658130862e-04f, -2.656248095e-04f, -2.654360874e-04f, -2.652469205e-04f, -2.650573091e-04f,
--2.648672535e-04f, -2.646767540e-04f, -2.644858112e-04f, -2.642944253e-04f, -2.641025966e-04f, -2.639103256e-04f, -2.637176126e-04f, -2.635244580e-04f, -2.633308622e-04f, -2.631368254e-04f,
--2.629423482e-04f, -2.627474308e-04f, -2.625520736e-04f, -2.623562770e-04f, -2.621600414e-04f, -2.619633671e-04f, -2.617662545e-04f, -2.615687040e-04f, -2.613707160e-04f, -2.611722908e-04f,
--2.609734288e-04f, -2.607741304e-04f, -2.605743960e-04f, -2.603742258e-04f, -2.601736205e-04f, -2.599725802e-04f, -2.597711054e-04f, -2.595691964e-04f, -2.593668537e-04f, -2.591640776e-04f,
--2.589608685e-04f, -2.587572268e-04f, -2.585531529e-04f, -2.583486471e-04f, -2.581437099e-04f, -2.579383416e-04f, -2.577325426e-04f, -2.575263134e-04f, -2.573196542e-04f, -2.571125655e-04f,
--2.569050477e-04f, -2.566971011e-04f, -2.564887263e-04f, -2.562799234e-04f, -2.560706930e-04f, -2.558610354e-04f, -2.556509511e-04f, -2.554404404e-04f, -2.552295037e-04f, -2.550181414e-04f,
--2.548063540e-04f, -2.545941417e-04f, -2.543815051e-04f, -2.541684444e-04f, -2.539549602e-04f, -2.537410528e-04f, -2.535267226e-04f, -2.533119700e-04f, -2.530967955e-04f, -2.528811993e-04f,
--2.526651820e-04f, -2.524487439e-04f, -2.522318855e-04f, -2.520146071e-04f, -2.517969091e-04f, -2.515787920e-04f, -2.513602562e-04f, -2.511413020e-04f, -2.509219299e-04f, -2.507021403e-04f,
--2.504819336e-04f, -2.502613103e-04f, -2.500402706e-04f, -2.498188151e-04f, -2.495969442e-04f, -2.493746583e-04f, -2.491519577e-04f, -2.489288429e-04f, -2.487053144e-04f, -2.484813725e-04f,
--2.482570176e-04f, -2.480322502e-04f, -2.478070707e-04f, -2.475814795e-04f, -2.473554771e-04f, -2.471290638e-04f, -2.469022401e-04f, -2.466750064e-04f, -2.464473631e-04f, -2.462193107e-04f,
--2.459908495e-04f, -2.457619801e-04f, -2.455327027e-04f, -2.453030180e-04f, -2.450729262e-04f, -2.448424278e-04f, -2.446115232e-04f, -2.443802129e-04f, -2.441484973e-04f, -2.439163768e-04f,
--2.436838519e-04f, -2.434509230e-04f, -2.432175905e-04f, -2.429838549e-04f, -2.427497166e-04f, -2.425151759e-04f, -2.422802335e-04f, -2.420448896e-04f, -2.418091448e-04f, -2.415729995e-04f,
--2.413364540e-04f, -2.410995090e-04f, -2.408621647e-04f, -2.406244216e-04f, -2.403862802e-04f, -2.401477409e-04f, -2.399088042e-04f, -2.396694705e-04f, -2.394297402e-04f, -2.391896138e-04f,
--2.389490917e-04f, -2.387081744e-04f, -2.384668623e-04f, -2.382251559e-04f, -2.379830556e-04f, -2.377405619e-04f, -2.374976752e-04f, -2.372543959e-04f, -2.370107246e-04f, -2.367666616e-04f,
--2.365222075e-04f, -2.362773626e-04f, -2.360321274e-04f, -2.357865024e-04f, -2.355404880e-04f, -2.352940847e-04f, -2.350472929e-04f, -2.348001131e-04f, -2.345525458e-04f, -2.343045913e-04f,
--2.340562502e-04f, -2.338075230e-04f, -2.335584100e-04f, -2.333089118e-04f, -2.330590287e-04f, -2.328087613e-04f, -2.325581101e-04f, -2.323070754e-04f, -2.320556578e-04f, -2.318038576e-04f,
--2.315516755e-04f, -2.312991118e-04f, -2.310461669e-04f, -2.307928415e-04f, -2.305391359e-04f, -2.302850506e-04f, -2.300305860e-04f, -2.297757427e-04f, -2.295205211e-04f, -2.292649217e-04f,
--2.290089449e-04f, -2.287525912e-04f, -2.284958612e-04f, -2.282387552e-04f, -2.279812737e-04f, -2.277234172e-04f, -2.274651862e-04f, -2.272065812e-04f, -2.269476026e-04f, -2.266882509e-04f,
--2.264285265e-04f, -2.261684301e-04f, -2.259079620e-04f, -2.256471226e-04f, -2.253859126e-04f, -2.251243324e-04f, -2.248623824e-04f, -2.246000631e-04f, -2.243373751e-04f, -2.240743187e-04f,
--2.238108945e-04f, -2.235471030e-04f, -2.232829447e-04f, -2.230184199e-04f, -2.227535293e-04f, -2.224882733e-04f, -2.222226523e-04f, -2.219566670e-04f, -2.216903176e-04f, -2.214236049e-04f,
--2.211565292e-04f, -2.208890910e-04f, -2.206212908e-04f, -2.203531291e-04f, -2.200846064e-04f, -2.198157232e-04f, -2.195464799e-04f, -2.192768772e-04f, -2.190069154e-04f, -2.187365950e-04f,
--2.184659166e-04f, -2.181948807e-04f, -2.179234877e-04f, -2.176517381e-04f, -2.173796325e-04f, -2.171071713e-04f, -2.168343550e-04f, -2.165611841e-04f, -2.162876592e-04f, -2.160137807e-04f,
--2.157395491e-04f, -2.154649650e-04f, -2.151900287e-04f, -2.149147409e-04f, -2.146391021e-04f, -2.143631126e-04f, -2.140867731e-04f, -2.138100841e-04f, -2.135330460e-04f, -2.132556593e-04f,
--2.129779246e-04f, -2.126998424e-04f, -2.124214131e-04f, -2.121426373e-04f, -2.118635155e-04f, -2.115840481e-04f, -2.113042358e-04f, -2.110240790e-04f, -2.107435782e-04f, -2.104627340e-04f,
--2.101815467e-04f, -2.099000171e-04f, -2.096181455e-04f, -2.093359325e-04f, -2.090533786e-04f, -2.087704843e-04f, -2.084872501e-04f, -2.082036765e-04f, -2.079197642e-04f, -2.076355134e-04f,
--2.073509249e-04f, -2.070659991e-04f, -2.067807365e-04f, -2.064951376e-04f, -2.062092030e-04f, -2.059229332e-04f, -2.056363286e-04f, -2.053493899e-04f, -2.050621176e-04f, -2.047745121e-04f,
--2.044865739e-04f, -2.041983037e-04f, -2.039097019e-04f, -2.036207691e-04f, -2.033315058e-04f, -2.030419124e-04f, -2.027519896e-04f, -2.024617378e-04f, -2.021711577e-04f, -2.018802496e-04f,
--2.015890142e-04f, -2.012974519e-04f, -2.010055633e-04f, -2.007133490e-04f, -2.004208094e-04f, -2.001279450e-04f, -1.998347565e-04f, -1.995412444e-04f, -1.992474091e-04f, -1.989532512e-04f,
--1.986587713e-04f, -1.983639698e-04f, -1.980688473e-04f, -1.977734044e-04f, -1.974776416e-04f, -1.971815593e-04f, -1.968851583e-04f, -1.965884389e-04f, -1.962914017e-04f, -1.959940473e-04f,
--1.956963762e-04f, -1.953983889e-04f, -1.951000860e-04f, -1.948014680e-04f, -1.945025354e-04f, -1.942032889e-04f, -1.939037288e-04f, -1.936038559e-04f, -1.933036706e-04f, -1.930031734e-04f,
--1.927023650e-04f, -1.924012457e-04f, -1.920998163e-04f, -1.917980772e-04f, -1.914960290e-04f, -1.911936722e-04f, -1.908910074e-04f, -1.905880351e-04f, -1.902847559e-04f, -1.899811703e-04f,
--1.896772788e-04f, -1.893730821e-04f, -1.890685806e-04f, -1.887637749e-04f, -1.884586656e-04f, -1.881532532e-04f, -1.878475382e-04f, -1.875415212e-04f, -1.872352028e-04f, -1.869285836e-04f,
--1.866216639e-04f, -1.863144445e-04f, -1.860069259e-04f, -1.856991086e-04f, -1.853909932e-04f, -1.850825802e-04f, -1.847738702e-04f, -1.844648637e-04f, -1.841555614e-04f, -1.838459637e-04f,
--1.835360712e-04f, -1.832258846e-04f, -1.829154042e-04f, -1.826046307e-04f, -1.822935647e-04f, -1.819822067e-04f, -1.816705573e-04f, -1.813586170e-04f, -1.810463864e-04f, -1.807338661e-04f,
--1.804210566e-04f, -1.801079584e-04f, -1.797945722e-04f, -1.794808985e-04f, -1.791669379e-04f, -1.788526909e-04f, -1.785381582e-04f, -1.782233401e-04f, -1.779082375e-04f, -1.775928507e-04f,
--1.772771803e-04f, -1.769612271e-04f, -1.766449914e-04f, -1.763284738e-04f, -1.760116750e-04f, -1.756945956e-04f, -1.753772359e-04f, -1.750595968e-04f, -1.747416786e-04f, -1.744234820e-04f,
--1.741050076e-04f, -1.737862559e-04f, -1.734672275e-04f, -1.731479230e-04f, -1.728283429e-04f, -1.725084879e-04f, -1.721883584e-04f, -1.718679551e-04f, -1.715472785e-04f, -1.712263293e-04f,
--1.709051079e-04f, -1.705836150e-04f, -1.702618511e-04f, -1.699398169e-04f, -1.696175128e-04f, -1.692949396e-04f, -1.689720976e-04f, -1.686489877e-04f, -1.683256102e-04f, -1.680019658e-04f,
--1.676780550e-04f, -1.673538785e-04f, -1.670294369e-04f, -1.667047306e-04f, -1.663797604e-04f, -1.660545267e-04f, -1.657290302e-04f, -1.654032713e-04f, -1.650772509e-04f, -1.647509693e-04f,
--1.644244272e-04f, -1.640976252e-04f, -1.637705638e-04f, -1.634432437e-04f, -1.631156654e-04f, -1.627878295e-04f, -1.624597366e-04f, -1.621313872e-04f, -1.618027821e-04f, -1.614739217e-04f,
--1.611448067e-04f, -1.608154375e-04f, -1.604858150e-04f, -1.601559395e-04f, -1.598258117e-04f, -1.594954322e-04f, -1.591648016e-04f, -1.588339205e-04f, -1.585027894e-04f, -1.581714090e-04f,
--1.578397798e-04f, -1.575079025e-04f, -1.571757776e-04f, -1.568434057e-04f, -1.565107874e-04f, -1.561779233e-04f, -1.558448141e-04f, -1.555114602e-04f, -1.551778623e-04f, -1.548440211e-04f,
--1.545099370e-04f, -1.541756106e-04f, -1.538410427e-04f, -1.535062337e-04f, -1.531711843e-04f, -1.528358951e-04f, -1.525003666e-04f, -1.521645995e-04f, -1.518285943e-04f, -1.514923517e-04f,
--1.511558723e-04f, -1.508191566e-04f, -1.504822053e-04f, -1.501450189e-04f, -1.498075981e-04f, -1.494699435e-04f, -1.491320556e-04f, -1.487939351e-04f, -1.484555825e-04f, -1.481169985e-04f,
--1.477781837e-04f, -1.474391387e-04f, -1.470998640e-04f, -1.467603603e-04f, -1.464206282e-04f, -1.460806683e-04f, -1.457404812e-04f, -1.454000675e-04f, -1.450594278e-04f, -1.447185627e-04f,
--1.443774728e-04f, -1.440361588e-04f, -1.436946211e-04f, -1.433528606e-04f, -1.430108776e-04f, -1.426686729e-04f, -1.423262471e-04f, -1.419836008e-04f, -1.416407345e-04f, -1.412976489e-04f,
--1.409543447e-04f, -1.406108223e-04f, -1.402670824e-04f, -1.399231257e-04f, -1.395789528e-04f, -1.392345641e-04f, -1.388899605e-04f, -1.385451424e-04f, -1.382001105e-04f, -1.378548654e-04f,
--1.375094078e-04f, -1.371637381e-04f, -1.368178571e-04f, -1.364717654e-04f, -1.361254635e-04f, -1.357789521e-04f, -1.354322318e-04f, -1.350853032e-04f, -1.347381670e-04f, -1.343908237e-04f,
--1.340432740e-04f, -1.336955184e-04f, -1.333475576e-04f, -1.329993923e-04f, -1.326510230e-04f, -1.323024503e-04f, -1.319536749e-04f, -1.316046974e-04f, -1.312555184e-04f, -1.309061385e-04f,
--1.305565583e-04f, -1.302067785e-04f, -1.298567997e-04f, -1.295066225e-04f, -1.291562475e-04f, -1.288056753e-04f, -1.284549066e-04f, -1.281039420e-04f, -1.277527821e-04f, -1.274014276e-04f,
--1.270498789e-04f, -1.266981369e-04f, -1.263462020e-04f, -1.259940750e-04f, -1.256417564e-04f, -1.252892468e-04f, -1.249365470e-04f, -1.245836575e-04f, -1.242305789e-04f, -1.238773118e-04f,
--1.235238570e-04f, -1.231702149e-04f, -1.228163863e-04f, -1.224623718e-04f, -1.221081720e-04f, -1.217537874e-04f, -1.213992188e-04f, -1.210444668e-04f, -1.206895320e-04f, -1.203344150e-04f,
--1.199791165e-04f, -1.196236370e-04f, -1.192679772e-04f, -1.189121378e-04f, -1.185561194e-04f, -1.181999225e-04f, -1.178435479e-04f, -1.174869961e-04f, -1.171302678e-04f, -1.167733636e-04f,
--1.164162842e-04f, -1.160590301e-04f, -1.157016021e-04f, -1.153440006e-04f, -1.149862265e-04f, -1.146282802e-04f, -1.142701625e-04f, -1.139118739e-04f, -1.135534152e-04f, -1.131947868e-04f,
--1.128359896e-04f, -1.124770240e-04f, -1.121178907e-04f, -1.117585904e-04f, -1.113991238e-04f, -1.110394913e-04f, -1.106796937e-04f, -1.103197316e-04f, -1.099596056e-04f, -1.095993164e-04f,
--1.092388646e-04f, -1.088782509e-04f, -1.085174758e-04f, -1.081565400e-04f, -1.077954442e-04f, -1.074341890e-04f, -1.070727749e-04f, -1.067112028e-04f, -1.063494731e-04f, -1.059875866e-04f,
--1.056255438e-04f, -1.052633454e-04f, -1.049009921e-04f, -1.045384845e-04f, -1.041758232e-04f, -1.038130088e-04f, -1.034500421e-04f, -1.030869236e-04f, -1.027236539e-04f, -1.023602338e-04f,
--1.019966639e-04f, -1.016329447e-04f, -1.012690770e-04f, -1.009050613e-04f, -1.005408984e-04f, -1.001765888e-04f, -9.981213323e-05f, -9.944753230e-05f, -9.908278665e-05f, -9.871789692e-05f,
--9.835286376e-05f, -9.798768781e-05f, -9.762236970e-05f, -9.725691009e-05f, -9.689130962e-05f, -9.652556892e-05f, -9.615968864e-05f, -9.579366943e-05f, -9.542751192e-05f, -9.506121677e-05f,
--9.469478461e-05f, -9.432821609e-05f, -9.396151185e-05f, -9.359467254e-05f, -9.322769880e-05f, -9.286059127e-05f, -9.249335061e-05f, -9.212597745e-05f, -9.175847245e-05f, -9.139083624e-05f,
--9.102306947e-05f, -9.065517280e-05f, -9.028714685e-05f, -8.991899229e-05f, -8.955070975e-05f, -8.918229989e-05f, -8.881376335e-05f, -8.844510077e-05f, -8.807631281e-05f, -8.770740010e-05f,
--8.733836331e-05f, -8.696920307e-05f, -8.659992003e-05f, -8.623051485e-05f, -8.586098816e-05f, -8.549134062e-05f, -8.512157288e-05f, -8.475168558e-05f, -8.438167937e-05f, -8.401155491e-05f,
--8.364131283e-05f, -8.327095380e-05f, -8.290047845e-05f, -8.252988744e-05f, -8.215918142e-05f, -8.178836103e-05f, -8.141742693e-05f, -8.104637977e-05f, -8.067522020e-05f, -8.030394886e-05f,
--7.993256641e-05f, -7.956107350e-05f, -7.918947078e-05f, -7.881775890e-05f, -7.844593851e-05f, -7.807401026e-05f, -7.770197481e-05f, -7.732983280e-05f, -7.695758489e-05f, -7.658523173e-05f,
--7.621277396e-05f, -7.584021225e-05f, -7.546754724e-05f, -7.509477959e-05f, -7.472190994e-05f, -7.434893896e-05f, -7.397586729e-05f, -7.360269559e-05f, -7.322942451e-05f, -7.285605469e-05f,
--7.248258681e-05f, -7.210902150e-05f, -7.173535942e-05f, -7.136160123e-05f, -7.098774758e-05f, -7.061379912e-05f, -7.023975651e-05f, -6.986562040e-05f, -6.949139144e-05f, -6.911707029e-05f,
--6.874265760e-05f, -6.836815403e-05f, -6.799356023e-05f, -6.761887686e-05f, -6.724410456e-05f, -6.686924401e-05f, -6.649429584e-05f, -6.611926072e-05f, -6.574413930e-05f, -6.536893223e-05f,
--6.499364018e-05f, -6.461826379e-05f, -6.424280373e-05f, -6.386726064e-05f, -6.349163518e-05f, -6.311592801e-05f, -6.274013979e-05f, -6.236427117e-05f, -6.198832281e-05f, -6.161229535e-05f,
--6.123618947e-05f, -6.086000581e-05f, -6.048374504e-05f, -6.010740780e-05f, -5.973099476e-05f, -5.935450657e-05f, -5.897794388e-05f, -5.860130737e-05f, -5.822459767e-05f, -5.784781545e-05f,
--5.747096137e-05f, -5.709403608e-05f, -5.671704025e-05f, -5.633997451e-05f, -5.596283955e-05f, -5.558563600e-05f, -5.520836454e-05f, -5.483102581e-05f, -5.445362048e-05f, -5.407614920e-05f,
--5.369861263e-05f, -5.332101143e-05f, -5.294334625e-05f, -5.256561776e-05f, -5.218782661e-05f, -5.180997346e-05f, -5.143205897e-05f, -5.105408379e-05f, -5.067604859e-05f, -5.029795402e-05f,
--4.991980074e-05f, -4.954158941e-05f, -4.916332069e-05f, -4.878499523e-05f, -4.840661370e-05f, -4.802817675e-05f, -4.764968505e-05f, -4.727113924e-05f, -4.689254000e-05f, -4.651388797e-05f,
--4.613518382e-05f, -4.575642820e-05f, -4.537762178e-05f, -4.499876521e-05f, -4.461985916e-05f, -4.424090427e-05f, -4.386190122e-05f, -4.348285065e-05f, -4.310375324e-05f, -4.272460963e-05f,
--4.234542049e-05f, -4.196618647e-05f, -4.158690824e-05f, -4.120758646e-05f, -4.082822178e-05f, -4.044881486e-05f, -4.006936636e-05f, -3.968987695e-05f, -3.931034727e-05f, -3.893077800e-05f,
--3.855116979e-05f, -3.817152329e-05f, -3.779183918e-05f, -3.741211810e-05f, -3.703236072e-05f, -3.665256770e-05f, -3.627273969e-05f, -3.589287736e-05f, -3.551298137e-05f, -3.513305237e-05f,
--3.475309103e-05f, -3.437309800e-05f, -3.399307394e-05f, -3.361301952e-05f, -3.323293538e-05f, -3.285282221e-05f, -3.247268064e-05f, -3.209251134e-05f, -3.171231498e-05f, -3.133209221e-05f,
--3.095184368e-05f, -3.057157007e-05f, -3.019127202e-05f, -2.981095021e-05f, -2.943060528e-05f, -2.905023790e-05f, -2.866984873e-05f, -2.828943842e-05f, -2.790900764e-05f, -2.752855705e-05f,
--2.714808730e-05f, -2.676759905e-05f, -2.638709297e-05f, -2.600656971e-05f, -2.562602994e-05f, -2.524547430e-05f, -2.486490347e-05f, -2.448431810e-05f, -2.410371885e-05f, -2.372310638e-05f,
--2.334248134e-05f, -2.296184441e-05f, -2.258119623e-05f, -2.220053747e-05f, -2.181986878e-05f, -2.143919082e-05f, -2.105850426e-05f, -2.067780975e-05f, -2.029710796e-05f, -1.991639953e-05f,
--1.953568513e-05f, -1.915496542e-05f, -1.877424106e-05f, -1.839351270e-05f, -1.801278100e-05f, -1.763204663e-05f, -1.725131024e-05f, -1.687057250e-05f, -1.648983404e-05f, -1.610909555e-05f,
--1.572835767e-05f, -1.534762107e-05f, -1.496688640e-05f, -1.458615432e-05f, -1.420542549e-05f, -1.382470057e-05f, -1.344398021e-05f, -1.306326508e-05f, -1.268255582e-05f, -1.230185311e-05f,
--1.192115759e-05f, -1.154046993e-05f, -1.115979079e-05f, -1.077912081e-05f, -1.039846066e-05f, -1.001781100e-05f, -9.637172483e-06f, -9.256545765e-06f, -8.875931507e-06f, -8.495330363e-06f,
--8.114742993e-06f, -7.734170054e-06f, -7.353612201e-06f, -6.973070093e-06f, -6.592544385e-06f, -6.212035736e-06f, -5.831544802e-06f, -5.451072240e-06f, -5.070618705e-06f, -4.690184856e-06f,
--4.309771348e-06f, -3.929378837e-06f, -3.549007980e-06f, -3.168659433e-06f, -2.788333853e-06f, -2.408031895e-06f, -2.027754215e-06f, -1.647501469e-06f, -1.267274312e-06f, -8.870734017e-07f,
--5.068993921e-07f, -1.267529389e-07f, 2.533653023e-07f, 6.334546764e-07f, 1.013514528e-06f, 1.393544202e-06f, 1.773543044e-06f, 2.153510399e-06f, 2.533445611e-06f, 2.913348027e-06f,
-3.293216992e-06f, 3.673051851e-06f, 4.052851949e-06f, 4.432616634e-06f, 4.812345249e-06f, 5.192037143e-06f, 5.571691660e-06f, 5.951308146e-06f, 6.330885949e-06f, 6.710424415e-06f,
-7.089922889e-06f, 7.469380720e-06f, 7.848797253e-06f, 8.228171835e-06f, 8.607503814e-06f, 8.986792537e-06f, 9.366037351e-06f, 9.745237603e-06f, 1.012439264e-05f, 1.050350181e-05f,
-1.088256447e-05f, 1.126157995e-05f, 1.164054761e-05f, 1.201946679e-05f, 1.239833685e-05f, 1.277715713e-05f, 1.315592698e-05f, 1.353464576e-05f, 1.391331280e-05f, 1.429192745e-05f,
-1.467048908e-05f, 1.504899702e-05f, 1.542745062e-05f, 1.580584924e-05f, 1.618419222e-05f, 1.656247892e-05f, 1.694070868e-05f, 1.731888086e-05f, 1.769699480e-05f, 1.807504986e-05f,
-1.845304538e-05f, 1.883098072e-05f, 1.920885523e-05f, 1.958666825e-05f, 1.996441915e-05f, 2.034210726e-05f, 2.071973195e-05f, 2.109729256e-05f, 2.147478845e-05f, 2.185221896e-05f,
-2.222958346e-05f, 2.260688129e-05f, 2.298411180e-05f, 2.336127435e-05f, 2.373836829e-05f, 2.411539297e-05f, 2.449234775e-05f, 2.486923198e-05f, 2.524604501e-05f, 2.562278620e-05f,
-2.599945490e-05f, 2.637605047e-05f, 2.675257225e-05f, 2.712901961e-05f, 2.750539190e-05f, 2.788168846e-05f, 2.825790867e-05f, 2.863405186e-05f, 2.901011741e-05f, 2.938610466e-05f,
-2.976201296e-05f, 3.013784168e-05f, 3.051359017e-05f, 3.088925779e-05f, 3.126484389e-05f, 3.164034783e-05f, 3.201576897e-05f, 3.239110666e-05f, 3.276636026e-05f, 3.314152913e-05f,
-3.351661262e-05f, 3.389161009e-05f, 3.426652091e-05f, 3.464134442e-05f, 3.501608000e-05f, 3.539072698e-05f, 3.576528475e-05f, 3.613975264e-05f, 3.651413003e-05f, 3.688841627e-05f,
-3.726261072e-05f, 3.763671274e-05f, 3.801072169e-05f, 3.838463694e-05f, 3.875845783e-05f, 3.913218374e-05f, 3.950581401e-05f, 3.987934803e-05f, 4.025278513e-05f, 4.062612470e-05f,
-4.099936608e-05f, 4.137250864e-05f, 4.174555174e-05f, 4.211849475e-05f, 4.249133702e-05f, 4.286407793e-05f, 4.323671682e-05f, 4.360925307e-05f, 4.398168604e-05f, 4.435401509e-05f,
-4.472623959e-05f, 4.509835890e-05f, 4.547037238e-05f, 4.584227940e-05f, 4.621407933e-05f, 4.658577153e-05f, 4.695735536e-05f, 4.732883019e-05f, 4.770019538e-05f, 4.807145031e-05f,
-4.844259433e-05f, 4.881362682e-05f, 4.918454714e-05f, 4.955535466e-05f, 4.992604874e-05f, 5.029662875e-05f, 5.066709406e-05f, 5.103744405e-05f, 5.140767806e-05f, 5.177779548e-05f,
-5.214779568e-05f, 5.251767801e-05f, 5.288744186e-05f, 5.325708659e-05f, 5.362661157e-05f, 5.399601616e-05f, 5.436529975e-05f, 5.473446170e-05f, 5.510350138e-05f, 5.547241816e-05f,
-5.584121141e-05f, 5.620988051e-05f, 5.657842482e-05f, 5.694684372e-05f, 5.731513659e-05f, 5.768330278e-05f, 5.805134168e-05f, 5.841925266e-05f, 5.878703510e-05f, 5.915468835e-05f,
-5.952221181e-05f, 5.988960484e-05f, 6.025686682e-05f, 6.062399712e-05f, 6.099099512e-05f, 6.135786019e-05f, 6.172459171e-05f, 6.209118906e-05f, 6.245765160e-05f, 6.282397872e-05f,
-6.319016979e-05f, 6.355622419e-05f, 6.392214130e-05f, 6.428792050e-05f, 6.465356115e-05f, 6.501906265e-05f, 6.538442437e-05f, 6.574964568e-05f, 6.611472596e-05f, 6.647966461e-05f,
-6.684446098e-05f, 6.720911448e-05f, 6.757362446e-05f, 6.793799032e-05f, 6.830221144e-05f, 6.866628719e-05f, 6.903021696e-05f, 6.939400013e-05f, 6.975763608e-05f, 7.012112419e-05f,
-7.048446385e-05f, 7.084765443e-05f, 7.121069533e-05f, 7.157358592e-05f, 7.193632559e-05f, 7.229891373e-05f, 7.266134971e-05f, 7.302363292e-05f, 7.338576274e-05f, 7.374773857e-05f,
-7.410955978e-05f, 7.447122577e-05f, 7.483273591e-05f, 7.519408960e-05f, 7.555528623e-05f, 7.591632517e-05f, 7.627720581e-05f, 7.663792755e-05f, 7.699848978e-05f, 7.735889187e-05f,
-7.771913323e-05f, 7.807921323e-05f, 7.843913127e-05f, 7.879888673e-05f, 7.915847902e-05f, 7.951790751e-05f, 7.987717160e-05f, 8.023627067e-05f, 8.059520413e-05f, 8.095397136e-05f,
-8.131257176e-05f, 8.167100471e-05f, 8.202926961e-05f, 8.238736586e-05f, 8.274529283e-05f, 8.310304994e-05f, 8.346063657e-05f, 8.381805212e-05f, 8.417529598e-05f, 8.453236755e-05f,
-8.488926622e-05f, 8.524599139e-05f, 8.560254245e-05f, 8.595891880e-05f, 8.631511984e-05f, 8.667114497e-05f, 8.702699358e-05f, 8.738266506e-05f, 8.773815883e-05f, 8.809347427e-05f,
-8.844861079e-05f, 8.880356778e-05f, 8.915834464e-05f, 8.951294078e-05f, 8.986735559e-05f, 9.022158848e-05f, 9.057563885e-05f, 9.092950609e-05f, 9.128318961e-05f, 9.163668881e-05f,
-9.199000310e-05f, 9.234313187e-05f, 9.269607453e-05f, 9.304883048e-05f, 9.340139913e-05f, 9.375377989e-05f, 9.410597214e-05f, 9.445797531e-05f, 9.480978880e-05f, 9.516141201e-05f,
-9.551284434e-05f, 9.586408521e-05f, 9.621513402e-05f, 9.656599019e-05f, 9.691665310e-05f, 9.726712219e-05f, 9.761739684e-05f, 9.796747648e-05f, 9.831736051e-05f, 9.866704833e-05f,
-9.901653937e-05f, 9.936583303e-05f, 9.971492872e-05f, 1.000638259e-04f, 1.004125238e-04f, 1.007610221e-04f, 1.011093200e-04f, 1.014574171e-04f, 1.018053126e-04f, 1.021530060e-04f,
-1.025004968e-04f, 1.028477843e-04f, 1.031948680e-04f, 1.035417472e-04f, 1.038884215e-04f, 1.042348901e-04f, 1.045811526e-04f, 1.049272083e-04f, 1.052730567e-04f, 1.056186971e-04f,
-1.059641291e-04f, 1.063093519e-04f, 1.066543651e-04f, 1.069991680e-04f, 1.073437601e-04f, 1.076881407e-04f, 1.080323094e-04f, 1.083762655e-04f, 1.087200085e-04f, 1.090635377e-04f,
-1.094068526e-04f, 1.097499526e-04f, 1.100928372e-04f, 1.104355057e-04f, 1.107779576e-04f, 1.111201923e-04f, 1.114622093e-04f, 1.118040079e-04f, 1.121455876e-04f, 1.124869477e-04f,
-1.128280879e-04f, 1.131690074e-04f, 1.135097056e-04f, 1.138501821e-04f, 1.141904362e-04f, 1.145304674e-04f, 1.148702751e-04f, 1.152098588e-04f, 1.155492177e-04f, 1.158883515e-04f,
-1.162272595e-04f, 1.165659411e-04f, 1.169043958e-04f, 1.172426231e-04f, 1.175806222e-04f, 1.179183928e-04f, 1.182559341e-04f, 1.185932457e-04f, 1.189303270e-04f, 1.192671774e-04f,
-1.196037963e-04f, 1.199401832e-04f, 1.202763376e-04f, 1.206122587e-04f, 1.209479462e-04f, 1.212833994e-04f, 1.216186178e-04f, 1.219536007e-04f, 1.222883477e-04f, 1.226228582e-04f,
-1.229571316e-04f, 1.232911673e-04f, 1.236249649e-04f, 1.239585237e-04f, 1.242918431e-04f, 1.246249227e-04f, 1.249577619e-04f, 1.252903600e-04f, 1.256227166e-04f, 1.259548311e-04f,
-1.262867029e-04f, 1.266183315e-04f, 1.269497163e-04f, 1.272808568e-04f, 1.276117524e-04f, 1.279424026e-04f, 1.282728068e-04f, 1.286029644e-04f, 1.289328749e-04f, 1.292625378e-04f,
-1.295919525e-04f, 1.299211184e-04f, 1.302500350e-04f, 1.305787018e-04f, 1.309071181e-04f, 1.312352835e-04f, 1.315631974e-04f, 1.318908593e-04f, 1.322182685e-04f, 1.325454246e-04f,
-1.328723271e-04f, 1.331989752e-04f, 1.335253686e-04f, 1.338515067e-04f, 1.341773889e-04f, 1.345030146e-04f, 1.348283835e-04f, 1.351534948e-04f, 1.354783480e-04f, 1.358029427e-04f,
-1.361272782e-04f, 1.364513540e-04f, 1.367751697e-04f, 1.370987246e-04f, 1.374220181e-04f, 1.377450499e-04f, 1.380678192e-04f, 1.383903257e-04f, 1.387125687e-04f, 1.390345477e-04f,
-1.393562622e-04f, 1.396777116e-04f, 1.399988954e-04f, 1.403198131e-04f, 1.406404641e-04f, 1.409608480e-04f, 1.412809640e-04f, 1.416008118e-04f, 1.419203908e-04f, 1.422397005e-04f,
-1.425587403e-04f, 1.428775097e-04f, 1.431960081e-04f, 1.435142351e-04f, 1.438321901e-04f, 1.441498726e-04f, 1.444672820e-04f, 1.447844179e-04f, 1.451012796e-04f, 1.454178667e-04f,
-1.457341787e-04f, 1.460502149e-04f, 1.463659750e-04f, 1.466814583e-04f, 1.469966643e-04f, 1.473115925e-04f, 1.476262425e-04f, 1.479406136e-04f, 1.482547053e-04f, 1.485685172e-04f,
-1.488820486e-04f, 1.491952991e-04f, 1.495082682e-04f, 1.498209553e-04f, 1.501333600e-04f, 1.504454816e-04f, 1.507573197e-04f, 1.510688738e-04f, 1.513801433e-04f, 1.516911277e-04f,
-1.520018266e-04f, 1.523122393e-04f, 1.526223654e-04f, 1.529322044e-04f, 1.532417557e-04f, 1.535510189e-04f, 1.538599934e-04f, 1.541686786e-04f, 1.544770742e-04f, 1.547851796e-04f,
-1.550929942e-04f, 1.554005176e-04f, 1.557077493e-04f, 1.560146887e-04f, 1.563213353e-04f, 1.566276887e-04f, 1.569337483e-04f, 1.572395136e-04f, 1.575449841e-04f, 1.578501593e-04f,
-1.581550387e-04f, 1.584596217e-04f, 1.587639080e-04f, 1.590678969e-04f, 1.593715880e-04f, 1.596749808e-04f, 1.599780748e-04f, 1.602808694e-04f, 1.605833642e-04f, 1.608855586e-04f,
-1.611874523e-04f, 1.614890445e-04f, 1.617903350e-04f, 1.620913231e-04f, 1.623920084e-04f, 1.626923904e-04f, 1.629924685e-04f, 1.632922424e-04f, 1.635917114e-04f, 1.638908751e-04f,
-1.641897330e-04f, 1.644882846e-04f, 1.647865294e-04f, 1.650844669e-04f, 1.653820967e-04f, 1.656794182e-04f, 1.659764309e-04f, 1.662731344e-04f, 1.665695281e-04f, 1.668656116e-04f,
-1.671613844e-04f, 1.674568460e-04f, 1.677519959e-04f, 1.680468336e-04f, 1.683413587e-04f, 1.686355706e-04f, 1.689294688e-04f, 1.692230529e-04f, 1.695163225e-04f, 1.698092769e-04f,
-1.701019158e-04f, 1.703942386e-04f, 1.706862448e-04f, 1.709779341e-04f, 1.712693058e-04f, 1.715603596e-04f, 1.718510949e-04f, 1.721415113e-04f, 1.724316082e-04f, 1.727213853e-04f,
-1.730108419e-04f, 1.732999778e-04f, 1.735887923e-04f, 1.738772850e-04f, 1.741654554e-04f, 1.744533031e-04f, 1.747408276e-04f, 1.750280284e-04f, 1.753149050e-04f, 1.756014569e-04f,
-1.758876838e-04f, 1.761735851e-04f, 1.764591603e-04f, 1.767444090e-04f, 1.770293307e-04f, 1.773139249e-04f, 1.775981913e-04f, 1.778821292e-04f, 1.781657383e-04f, 1.784490180e-04f,
-1.787319680e-04f, 1.790145877e-04f, 1.792968767e-04f, 1.795788345e-04f, 1.798604606e-04f, 1.801417547e-04f, 1.804227161e-04f, 1.807033446e-04f, 1.809836396e-04f, 1.812636006e-04f,
-1.815432272e-04f, 1.818225189e-04f, 1.821014753e-04f, 1.823800959e-04f, 1.826583803e-04f, 1.829363280e-04f, 1.832139386e-04f, 1.834912115e-04f, 1.837681464e-04f, 1.840447428e-04f,
-1.843210002e-04f, 1.845969181e-04f, 1.848724962e-04f, 1.851477340e-04f, 1.854226310e-04f, 1.856971868e-04f, 1.859714010e-04f, 1.862452730e-04f, 1.865188024e-04f, 1.867919888e-04f,
-1.870648318e-04f, 1.873373308e-04f, 1.876094855e-04f, 1.878812954e-04f, 1.881527601e-04f, 1.884238791e-04f, 1.886946519e-04f, 1.889650782e-04f, 1.892351574e-04f, 1.895048892e-04f,
-1.897742732e-04f, 1.900433087e-04f, 1.903119955e-04f, 1.905803331e-04f, 1.908483211e-04f, 1.911159589e-04f, 1.913832463e-04f, 1.916501826e-04f, 1.919167676e-04f, 1.921830008e-04f,
-1.924488816e-04f, 1.927144098e-04f, 1.929795849e-04f, 1.932444064e-04f, 1.935088739e-04f, 1.937729870e-04f, 1.940367452e-04f, 1.943001481e-04f, 1.945631954e-04f, 1.948258865e-04f,
-1.950882210e-04f, 1.953501985e-04f, 1.956118186e-04f, 1.958730809e-04f, 1.961339848e-04f, 1.963945301e-04f, 1.966547163e-04f, 1.969145429e-04f, 1.971740096e-04f, 1.974331158e-04f,
-1.976918613e-04f, 1.979502455e-04f, 1.982082681e-04f, 1.984659286e-04f, 1.987232267e-04f, 1.989801618e-04f, 1.992367336e-04f, 1.994929417e-04f, 1.997487856e-04f, 2.000042649e-04f,
-2.002593793e-04f, 2.005141283e-04f, 2.007685114e-04f, 2.010225284e-04f, 2.012761786e-04f, 2.015294619e-04f, 2.017823777e-04f, 2.020349256e-04f, 2.022871053e-04f, 2.025389163e-04f,
-2.027903581e-04f, 2.030414305e-04f, 2.032921330e-04f, 2.035424652e-04f, 2.037924266e-04f, 2.040420170e-04f, 2.042912358e-04f, 2.045400827e-04f, 2.047885572e-04f, 2.050366590e-04f,
-2.052843877e-04f, 2.055317429e-04f, 2.057787241e-04f, 2.060253310e-04f, 2.062715631e-04f, 2.065174202e-04f, 2.067629017e-04f, 2.070080073e-04f, 2.072527365e-04f, 2.074970891e-04f,
-2.077410645e-04f, 2.079846625e-04f, 2.082278825e-04f, 2.084707243e-04f, 2.087131874e-04f, 2.089552714e-04f, 2.091969760e-04f, 2.094383007e-04f, 2.096792452e-04f, 2.099198091e-04f,
-2.101599919e-04f, 2.103997934e-04f, 2.106392130e-04f, 2.108782505e-04f, 2.111169055e-04f, 2.113551775e-04f, 2.115930662e-04f, 2.118305711e-04f, 2.120676920e-04f, 2.123044284e-04f,
-2.125407800e-04f, 2.127767464e-04f, 2.130123271e-04f, 2.132475218e-04f, 2.134823302e-04f, 2.137167519e-04f, 2.139507864e-04f, 2.141844334e-04f, 2.144176926e-04f, 2.146505635e-04f,
-2.148830458e-04f, 2.151151391e-04f, 2.153468431e-04f, 2.155781573e-04f, 2.158090814e-04f, 2.160396151e-04f, 2.162697579e-04f, 2.164995095e-04f, 2.167288695e-04f, 2.169578376e-04f,
-2.171864133e-04f, 2.174145964e-04f, 2.176423864e-04f, 2.178697830e-04f, 2.180967859e-04f, 2.183233946e-04f, 2.185496088e-04f, 2.187754282e-04f, 2.190008523e-04f, 2.192258809e-04f,
-2.194505135e-04f, 2.196747498e-04f, 2.198985894e-04f, 2.201220321e-04f, 2.203450774e-04f, 2.205677249e-04f, 2.207899744e-04f, 2.210118254e-04f, 2.212332776e-04f, 2.214543307e-04f,
-2.216749843e-04f, 2.218952381e-04f, 2.221150916e-04f, 2.223345446e-04f, 2.225535967e-04f, 2.227722476e-04f, 2.229904969e-04f, 2.232083442e-04f, 2.234257892e-04f, 2.236428316e-04f,
-2.238594711e-04f, 2.240757072e-04f, 2.242915396e-04f, 2.245069680e-04f, 2.247219921e-04f, 2.249366115e-04f, 2.251508258e-04f, 2.253646348e-04f, 2.255780380e-04f, 2.257910352e-04f,
-2.260036260e-04f, 2.262158101e-04f, 2.264275871e-04f, 2.266389567e-04f, 2.268499186e-04f, 2.270604724e-04f, 2.272706178e-04f, 2.274803545e-04f, 2.276896821e-04f, 2.278986003e-04f,
-2.281071088e-04f, 2.283152072e-04f, 2.285228952e-04f, 2.287301726e-04f, 2.289370388e-04f, 2.291434937e-04f, 2.293495369e-04f, 2.295551681e-04f, 2.297603869e-04f, 2.299651931e-04f,
-2.301695863e-04f, 2.303735661e-04f, 2.305771323e-04f, 2.307802846e-04f, 2.309830225e-04f, 2.311853459e-04f, 2.313872543e-04f, 2.315887476e-04f, 2.317898252e-04f, 2.319904870e-04f,
-2.321907326e-04f, 2.323905617e-04f, 2.325899740e-04f, 2.327889692e-04f, 2.329875469e-04f, 2.331857068e-04f, 2.333834487e-04f, 2.335807723e-04f, 2.337776771e-04f, 2.339741629e-04f,
-2.341702295e-04f, 2.343658764e-04f, 2.345611034e-04f, 2.347559102e-04f, 2.349502965e-04f, 2.351442619e-04f, 2.353378062e-04f, 2.355309290e-04f, 2.357236301e-04f, 2.359159092e-04f,
-2.361077659e-04f, 2.362992000e-04f, 2.364902111e-04f, 2.366807990e-04f, 2.368709633e-04f, 2.370607038e-04f, 2.372500202e-04f, 2.374389121e-04f, 2.376273793e-04f, 2.378154215e-04f,
-2.380030384e-04f, 2.381902297e-04f, 2.383769951e-04f, 2.385633343e-04f, 2.387492470e-04f, 2.389347330e-04f, 2.391197918e-04f, 2.393044234e-04f, 2.394886273e-04f, 2.396724033e-04f,
-2.398557511e-04f, 2.400386704e-04f, 2.402211610e-04f, 2.404032225e-04f, 2.405848546e-04f, 2.407660571e-04f, 2.409468297e-04f, 2.411271722e-04f, 2.413070842e-04f, 2.414865654e-04f,
-2.416656156e-04f, 2.418442346e-04f, 2.420224219e-04f, 2.422001774e-04f, 2.423775008e-04f, 2.425543918e-04f, 2.427308501e-04f, 2.429068755e-04f, 2.430824677e-04f, 2.432576263e-04f,
-2.434323513e-04f, 2.436066422e-04f, 2.437804988e-04f, 2.439539208e-04f, 2.441269080e-04f, 2.442994601e-04f, 2.444715769e-04f, 2.446432580e-04f, 2.448145032e-04f, 2.449853123e-04f,
-2.451556850e-04f, 2.453256209e-04f, 2.454951200e-04f, 2.456641818e-04f, 2.458328062e-04f, 2.460009929e-04f, 2.461687415e-04f, 2.463360520e-04f, 2.465029239e-04f, 2.466693572e-04f,
-2.468353514e-04f, 2.470009063e-04f, 2.471660218e-04f, 2.473306975e-04f, 2.474949331e-04f, 2.476587286e-04f, 2.478220834e-04f, 2.479849976e-04f, 2.481474707e-04f, 2.483095026e-04f,
-2.484710929e-04f, 2.486322415e-04f, 2.487929481e-04f, 2.489532125e-04f, 2.491130344e-04f, 2.492724135e-04f, 2.494313497e-04f, 2.495898426e-04f, 2.497478921e-04f, 2.499054979e-04f,
-2.500626598e-04f, 2.502193775e-04f, 2.503756508e-04f, 2.505314794e-04f, 2.506868632e-04f, 2.508418018e-04f, 2.509962951e-04f, 2.511503428e-04f, 2.513039447e-04f, 2.514571005e-04f,
-2.516098101e-04f, 2.517620731e-04f, 2.519138894e-04f, 2.520652587e-04f, 2.522161808e-04f, 2.523666555e-04f, 2.525166825e-04f, 2.526662617e-04f, 2.528153927e-04f, 2.529640754e-04f,
-2.531123096e-04f, 2.532600950e-04f, 2.534074314e-04f, 2.535543185e-04f, 2.537007563e-04f, 2.538467443e-04f, 2.539922825e-04f, 2.541373706e-04f, 2.542820084e-04f, 2.544261957e-04f,
-2.545699322e-04f, 2.547132177e-04f, 2.548560521e-04f, 2.549984351e-04f, 2.551403665e-04f, 2.552818461e-04f, 2.554228736e-04f, 2.555634490e-04f, 2.557035719e-04f, 2.558432421e-04f,
-2.559824595e-04f, 2.561212238e-04f, 2.562595349e-04f, 2.563973925e-04f, 2.565347964e-04f, 2.566717464e-04f, 2.568082424e-04f, 2.569442840e-04f, 2.570798712e-04f, 2.572150037e-04f,
-2.573496813e-04f, 2.574839038e-04f, 2.576176710e-04f, 2.577509828e-04f, 2.578838389e-04f, 2.580162391e-04f, 2.581481832e-04f, 2.582796711e-04f, 2.584107025e-04f, 2.585412773e-04f,
-2.586713952e-04f, 2.588010561e-04f, 2.589302598e-04f, 2.590590061e-04f, 2.591872948e-04f, 2.593151257e-04f, 2.594424986e-04f, 2.595694134e-04f, 2.596958698e-04f, 2.598218677e-04f,
-2.599474069e-04f, 2.600724873e-04f, 2.601971085e-04f, 2.603212705e-04f, 2.604449730e-04f, 2.605682160e-04f, 2.606909991e-04f, 2.608133223e-04f, 2.609351853e-04f, 2.610565880e-04f,
-2.611775303e-04f, 2.612980118e-04f, 2.614180325e-04f, 2.615375921e-04f, 2.616566906e-04f, 2.617753277e-04f, 2.618935033e-04f, 2.620112172e-04f, 2.621284692e-04f, 2.622452592e-04f,
-2.623615869e-04f, 2.624774523e-04f, 2.625928552e-04f, 2.627077953e-04f, 2.628222726e-04f, 2.629362868e-04f, 2.630498379e-04f, 2.631629256e-04f, 2.632755498e-04f, 2.633877103e-04f,
-2.634994069e-04f, 2.636106396e-04f, 2.637214081e-04f, 2.638317124e-04f, 2.639415521e-04f, 2.640509272e-04f, 2.641598376e-04f, 2.642682830e-04f, 2.643762634e-04f, 2.644837785e-04f,
-2.645908283e-04f, 2.646974125e-04f, 2.648035310e-04f, 2.649091837e-04f, 2.650143705e-04f, 2.651190911e-04f, 2.652233454e-04f, 2.653271333e-04f, 2.654304547e-04f, 2.655333094e-04f,
-2.656356972e-04f, 2.657376180e-04f, 2.658390717e-04f, 2.659400581e-04f, 2.660405771e-04f, 2.661406286e-04f, 2.662402124e-04f, 2.663393284e-04f, 2.664379764e-04f, 2.665361563e-04f,
-2.666338680e-04f, 2.667311113e-04f, 2.668278861e-04f, 2.669241923e-04f, 2.670200297e-04f, 2.671153983e-04f, 2.672102978e-04f, 2.673047282e-04f, 2.673986893e-04f, 2.674921810e-04f,
-2.675852032e-04f, 2.676777557e-04f, 2.677698385e-04f, 2.678614513e-04f, 2.679525941e-04f, 2.680432668e-04f, 2.681334691e-04f, 2.682232011e-04f, 2.683124626e-04f, 2.684012535e-04f,
-2.684895736e-04f, 2.685774228e-04f, 2.686648011e-04f, 2.687517083e-04f, 2.688381442e-04f, 2.689241089e-04f, 2.690096020e-04f, 2.690946237e-04f, 2.691791736e-04f, 2.692632518e-04f,
-2.693468582e-04f, 2.694299925e-04f, 2.695126547e-04f, 2.695948447e-04f, 2.696765624e-04f, 2.697578077e-04f, 2.698385804e-04f, 2.699188805e-04f, 2.699987079e-04f, 2.700780624e-04f,
-2.701569440e-04f, 2.702353526e-04f, 2.703132880e-04f, 2.703907502e-04f, 2.704677391e-04f, 2.705442545e-04f, 2.706202964e-04f, 2.706958646e-04f, 2.707709592e-04f, 2.708455799e-04f,
-2.709197267e-04f, 2.709933995e-04f, 2.710665982e-04f, 2.711393228e-04f, 2.712115730e-04f, 2.712833489e-04f, 2.713546504e-04f, 2.714254773e-04f, 2.714958295e-04f, 2.715657071e-04f,
-2.716351099e-04f, 2.717040377e-04f, 2.717724907e-04f, 2.718404685e-04f, 2.719079713e-04f, 2.719749988e-04f, 2.720415510e-04f, 2.721076279e-04f, 2.721732293e-04f, 2.722383552e-04f,
-2.723030055e-04f, 2.723671801e-04f, 2.724308789e-04f, 2.724941019e-04f, 2.725568491e-04f, 2.726191202e-04f, 2.726809153e-04f, 2.727422343e-04f, 2.728030770e-04f, 2.728634436e-04f,
-2.729233338e-04f, 2.729827476e-04f, 2.730416849e-04f, 2.731001457e-04f, 2.731581300e-04f, 2.732156375e-04f, 2.732726684e-04f, 2.733292224e-04f, 2.733852997e-04f, 2.734409000e-04f,
-2.734960233e-04f, 2.735506696e-04f, 2.736048389e-04f, 2.736585310e-04f, 2.737117458e-04f, 2.737644835e-04f, 2.738167438e-04f, 2.738685268e-04f, 2.739198323e-04f, 2.739706604e-04f,
-2.740210109e-04f, 2.740708839e-04f, 2.741202792e-04f, 2.741691969e-04f, 2.742176368e-04f, 2.742655990e-04f, 2.743130834e-04f, 2.743600899e-04f, 2.744066184e-04f, 2.744526691e-04f,
-2.744982417e-04f, 2.745433363e-04f, 2.745879528e-04f, 2.746320912e-04f, 2.746757514e-04f, 2.747189334e-04f, 2.747616372e-04f, 2.748038627e-04f, 2.748456098e-04f, 2.748868787e-04f,
-2.749276691e-04f, 2.749679811e-04f, 2.750078146e-04f, 2.750471697e-04f, 2.750860462e-04f, 2.751244442e-04f, 2.751623636e-04f, 2.751998044e-04f, 2.752367665e-04f, 2.752732500e-04f,
-2.753092548e-04f, 2.753447809e-04f, 2.753798282e-04f, 2.754143967e-04f, 2.754484864e-04f, 2.754820973e-04f, 2.755152294e-04f, 2.755478826e-04f, 2.755800569e-04f, 2.756117524e-04f,
-2.756429689e-04f, 2.756737064e-04f, 2.757039650e-04f, 2.757337447e-04f, 2.757630453e-04f, 2.757918669e-04f, 2.758202096e-04f, 2.758480732e-04f, 2.758754577e-04f, 2.759023632e-04f,
-2.759287896e-04f, 2.759547370e-04f, 2.759802053e-04f, 2.760051944e-04f, 2.760297045e-04f, 2.760537355e-04f, 2.760772874e-04f, 2.761003601e-04f, 2.761229538e-04f, 2.761450683e-04f,
-2.761667037e-04f, 2.761878600e-04f, 2.762085371e-04f, 2.762287351e-04f, 2.762484540e-04f, 2.762676938e-04f, 2.762864545e-04f, 2.763047360e-04f, 2.763225384e-04f, 2.763398618e-04f,
-2.763567060e-04f, 2.763730711e-04f, 2.763889572e-04f, 2.764043641e-04f, 2.764192920e-04f, 2.764337409e-04f, 2.764477107e-04f, 2.764612015e-04f, 2.764742132e-04f, 2.764867460e-04f,
-2.764987997e-04f, 2.765103745e-04f, 2.765214703e-04f, 2.765320872e-04f, 2.765422251e-04f, 2.765518841e-04f, 2.765610643e-04f, 2.765697655e-04f, 2.765779880e-04f, 2.765857316e-04f,
-2.765929964e-04f, 2.765997824e-04f, 2.766060896e-04f, 2.766119182e-04f, 2.766172680e-04f, 2.766221391e-04f, 2.766265316e-04f, 2.766304455e-04f, 2.766338808e-04f, 2.766368375e-04f,
-2.766393157e-04f, 2.766413154e-04f, 2.766428366e-04f, 2.766438794e-04f, 2.766444438e-04f, 2.766445298e-04f, 2.766441375e-04f, 2.766432669e-04f, 2.766419181e-04f, 2.766400910e-04f,
-2.766377858e-04f, 2.766350024e-04f, 2.766317409e-04f, 2.766280014e-04f, 2.766237839e-04f, 2.766190884e-04f, 2.766139149e-04f, 2.766082636e-04f, 2.766021345e-04f, 2.765955276e-04f,
-2.765884429e-04f, 2.765808805e-04f, 2.765728405e-04f, 2.765643229e-04f, 2.765553278e-04f, 2.765458552e-04f, 2.765359051e-04f, 2.765254776e-04f, 2.765145728e-04f, 2.765031908e-04f,
-2.764913315e-04f, 2.764789951e-04f, 2.764661815e-04f, 2.764528909e-04f, 2.764391233e-04f, 2.764248788e-04f, 2.764101574e-04f, 2.763949592e-04f, 2.763792843e-04f, 2.763631327e-04f,
-2.763465044e-04f, 2.763293996e-04f, 2.763118183e-04f, 2.762937606e-04f, 2.762752266e-04f, 2.762562162e-04f, 2.762367296e-04f, 2.762167669e-04f, 2.761963281e-04f, 2.761754133e-04f,
-2.761540226e-04f, 2.761321560e-04f, 2.761098136e-04f, 2.760869955e-04f, 2.760637017e-04f, 2.760399324e-04f, 2.760156876e-04f, 2.759909674e-04f, 2.759657719e-04f, 2.759401011e-04f,
-2.759139551e-04f, 2.758873341e-04f, 2.758602380e-04f, 2.758326671e-04f, 2.758046212e-04f, 2.757761007e-04f, 2.757471054e-04f, 2.757176356e-04f, 2.756876913e-04f, 2.756572725e-04f,
-2.756263794e-04f, 2.755950121e-04f, 2.755631707e-04f, 2.755308552e-04f, 2.754980657e-04f, 2.754648024e-04f, 2.754310653e-04f, 2.753968545e-04f, 2.753621701e-04f, 2.753270123e-04f,
-2.752913810e-04f, 2.752552764e-04f, 2.752186987e-04f, 2.751816478e-04f, 2.751441239e-04f, 2.751061272e-04f, 2.750676576e-04f, 2.750287153e-04f, 2.749893005e-04f, 2.749494131e-04f,
-2.749090534e-04f, 2.748682214e-04f, 2.748269172e-04f, 2.747851410e-04f, 2.747428927e-04f, 2.747001727e-04f, 2.746569809e-04f, 2.746133174e-04f, 2.745691825e-04f, 2.745245761e-04f,
-2.744794984e-04f, 2.744339496e-04f, 2.743879297e-04f, 2.743414388e-04f, 2.742944771e-04f, 2.742470447e-04f, 2.741991417e-04f, 2.741507681e-04f, 2.741019243e-04f, 2.740526101e-04f,
-2.740028259e-04f, 2.739525717e-04f, 2.739018475e-04f, 2.738506536e-04f, 2.737989901e-04f, 2.737468571e-04f, 2.736942547e-04f, 2.736411830e-04f, 2.735876422e-04f, 2.735336324e-04f,
-2.734791537e-04f, 2.734242063e-04f, 2.733687903e-04f, 2.733129057e-04f, 2.732565529e-04f, 2.731997318e-04f, 2.731424426e-04f, 2.730846855e-04f, 2.730264606e-04f, 2.729677680e-04f,
-2.729086078e-04f, 2.728489802e-04f, 2.727888854e-04f, 2.727283235e-04f, 2.726672945e-04f, 2.726057988e-04f, 2.725438363e-04f, 2.724814072e-04f, 2.724185117e-04f, 2.723551500e-04f,
-2.722913221e-04f, 2.722270283e-04f, 2.721622686e-04f, 2.720970432e-04f, 2.720313522e-04f, 2.719651959e-04f, 2.718985743e-04f, 2.718314877e-04f, 2.717639361e-04f, 2.716959197e-04f,
-2.716274386e-04f, 2.715584931e-04f, 2.714890832e-04f, 2.714192092e-04f, 2.713488711e-04f, 2.712780692e-04f, 2.712068036e-04f, 2.711350744e-04f, 2.710628818e-04f, 2.709902260e-04f,
-2.709171071e-04f, 2.708435254e-04f, 2.707694808e-04f, 2.706949737e-04f, 2.706200042e-04f, 2.705445724e-04f, 2.704686786e-04f, 2.703923228e-04f, 2.703155052e-04f, 2.702382261e-04f,
-2.701604855e-04f, 2.700822837e-04f, 2.700036208e-04f, 2.699244970e-04f, 2.698449125e-04f, 2.697648674e-04f, 2.696843619e-04f, 2.696033961e-04f, 2.695219704e-04f, 2.694400847e-04f,
-2.693577394e-04f, 2.692749346e-04f, 2.691916704e-04f, 2.691079471e-04f, 2.690237647e-04f, 2.689391236e-04f, 2.688540239e-04f, 2.687684657e-04f, 2.686824493e-04f, 2.685959748e-04f,
-2.685090424e-04f, 2.684216523e-04f, 2.683338047e-04f, 2.682454998e-04f, 2.681567377e-04f, 2.680675187e-04f, 2.679778429e-04f, 2.678877105e-04f, 2.677971217e-04f, 2.677060768e-04f,
-2.676145758e-04f, 2.675226190e-04f, 2.674302066e-04f, 2.673373388e-04f, 2.672440158e-04f, 2.671502377e-04f, 2.670560048e-04f, 2.669613173e-04f, 2.668661753e-04f, 2.667705790e-04f,
-2.666745288e-04f, 2.665780247e-04f, 2.664810669e-04f, 2.663836557e-04f, 2.662857913e-04f, 2.661874738e-04f, 2.660887035e-04f, 2.659894806e-04f, 2.658898053e-04f, 2.657896777e-04f,
-2.656890982e-04f, 2.655880668e-04f, 2.654865839e-04f, 2.653846496e-04f, 2.652822641e-04f, 2.651794277e-04f, 2.650761405e-04f, 2.649724028e-04f, 2.648682147e-04f, 2.647635766e-04f,
-2.646584886e-04f, 2.645529509e-04f, 2.644469637e-04f, 2.643405273e-04f, 2.642336419e-04f, 2.641263077e-04f, 2.640185249e-04f, 2.639102937e-04f, 2.638016144e-04f, 2.636924871e-04f,
-2.635829122e-04f, 2.634728898e-04f, 2.633624201e-04f, 2.632515035e-04f, 2.631401400e-04f, 2.630283299e-04f, 2.629160735e-04f, 2.628033710e-04f, 2.626902225e-04f, 2.625766284e-04f,
-2.624625889e-04f, 2.623481042e-04f, 2.622331745e-04f, 2.621178001e-04f, 2.620019812e-04f, 2.618857180e-04f, 2.617690107e-04f, 2.616518597e-04f, 2.615342651e-04f, 2.614162272e-04f,
-2.612977462e-04f, 2.611788223e-04f, 2.610594558e-04f, 2.609396470e-04f, 2.608193960e-04f, 2.606987031e-04f, 2.605775686e-04f, 2.604559926e-04f, 2.603339755e-04f, 2.602115175e-04f,
-2.600886188e-04f, 2.599652797e-04f, 2.598415004e-04f, 2.597172812e-04f, 2.595926223e-04f, 2.594675239e-04f, 2.593419864e-04f, 2.592160099e-04f, 2.590895948e-04f, 2.589627412e-04f,
-2.588354494e-04f, 2.587077197e-04f, 2.585795523e-04f, 2.584509475e-04f, 2.583219055e-04f, 2.581924267e-04f, 2.580625111e-04f, 2.579321592e-04f, 2.578013712e-04f, 2.576701472e-04f,
-2.575384877e-04f, 2.574063928e-04f, 2.572738628e-04f, 2.571408980e-04f, 2.570074986e-04f, 2.568736648e-04f, 2.567393971e-04f, 2.566046956e-04f, 2.564695605e-04f, 2.563339922e-04f,
-2.561979910e-04f, 2.560615570e-04f, 2.559246906e-04f, 2.557873920e-04f, 2.556496615e-04f, 2.555114994e-04f, 2.553729059e-04f, 2.552338813e-04f, 2.550944259e-04f, 2.549545400e-04f,
-2.548142238e-04f, 2.546734776e-04f, 2.545323017e-04f, 2.543906964e-04f, 2.542486619e-04f, 2.541061985e-04f, 2.539633065e-04f, 2.538199862e-04f, 2.536762378e-04f, 2.535320617e-04f,
-2.533874581e-04f, 2.532424273e-04f, 2.530969696e-04f, 2.529510852e-04f, 2.528047745e-04f, 2.526580377e-04f, 2.525108752e-04f, 2.523632871e-04f, 2.522152739e-04f, 2.520668357e-04f,
-2.519179729e-04f, 2.517686858e-04f, 2.516189746e-04f, 2.514688397e-04f, 2.513182813e-04f, 2.511672997e-04f, 2.510158952e-04f, 2.508640682e-04f, 2.507118189e-04f, 2.505591476e-04f,
-2.504060545e-04f, 2.502525401e-04f, 2.500986046e-04f, 2.499442482e-04f, 2.497894714e-04f, 2.496342743e-04f, 2.494786573e-04f, 2.493226207e-04f, 2.491661648e-04f, 2.490092899e-04f,
-2.488519963e-04f, 2.486942843e-04f, 2.485361542e-04f, 2.483776063e-04f, 2.482186410e-04f, 2.480592584e-04f, 2.478994590e-04f, 2.477392430e-04f, 2.475786108e-04f, 2.474175626e-04f,
-2.472560988e-04f, 2.470942196e-04f, 2.469319255e-04f, 2.467692166e-04f, 2.466060934e-04f, 2.464425561e-04f, 2.462786050e-04f, 2.461142405e-04f, 2.459494628e-04f, 2.457842723e-04f,
-2.456186694e-04f, 2.454526542e-04f, 2.452862272e-04f, 2.451193886e-04f, 2.449521389e-04f, 2.447844782e-04f, 2.446164069e-04f, 2.444479254e-04f, 2.442790339e-04f, 2.441097329e-04f,
-2.439400225e-04f, 2.437699031e-04f, 2.435993752e-04f, 2.434284389e-04f, 2.432570946e-04f, 2.430853426e-04f, 2.429131834e-04f, 2.427406171e-04f, 2.425676441e-04f, 2.423942648e-04f,
-2.422204794e-04f, 2.420462884e-04f, 2.418716921e-04f, 2.416966907e-04f, 2.415212846e-04f, 2.413454742e-04f, 2.411692597e-04f, 2.409926416e-04f, 2.408156201e-04f, 2.406381956e-04f,
-2.404603684e-04f, 2.402821389e-04f, 2.401035074e-04f, 2.399244742e-04f, 2.397450397e-04f, 2.395652043e-04f, 2.393849682e-04f, 2.392043318e-04f, 2.390232954e-04f, 2.388418595e-04f,
-2.386600243e-04f, 2.384777901e-04f, 2.382951574e-04f, 2.381121265e-04f, 2.379286976e-04f, 2.377448713e-04f, 2.375606477e-04f, 2.373760273e-04f, 2.371910105e-04f, 2.370055974e-04f,
-2.368197886e-04f, 2.366335844e-04f, 2.364469851e-04f, 2.362599910e-04f, 2.360726025e-04f, 2.358848201e-04f, 2.356966439e-04f, 2.355080745e-04f, 2.353191121e-04f, 2.351297570e-04f,
-2.349400098e-04f, 2.347498706e-04f, 2.345593399e-04f, 2.343684180e-04f, 2.341771054e-04f, 2.339854022e-04f, 2.337933090e-04f, 2.336008261e-04f, 2.334079538e-04f, 2.332146924e-04f,
-2.330210425e-04f, 2.328270042e-04f, 2.326325781e-04f, 2.324377644e-04f, 2.322425635e-04f, 2.320469759e-04f, 2.318510017e-04f, 2.316546415e-04f, 2.314578956e-04f, 2.312607644e-04f,
-2.310632481e-04f, 2.308653473e-04f, 2.306670623e-04f, 2.304683934e-04f, 2.302693410e-04f, 2.300699055e-04f, 2.298700873e-04f, 2.296698867e-04f, 2.294693041e-04f, 2.292683399e-04f,
-2.290669945e-04f, 2.288652682e-04f, 2.286631615e-04f, 2.284606746e-04f, 2.282578080e-04f, 2.280545621e-04f, 2.278509372e-04f, 2.276469338e-04f, 2.274425521e-04f, 2.272377926e-04f,
-2.270326557e-04f, 2.268271417e-04f, 2.266212511e-04f, 2.264149842e-04f, 2.262083414e-04f, 2.260013230e-04f, 2.257939296e-04f, 2.255861614e-04f, 2.253780188e-04f, 2.251695023e-04f,
-2.249606123e-04f, 2.247513490e-04f, 2.245417129e-04f, 2.243317044e-04f, 2.241213240e-04f, 2.239105719e-04f, 2.236994485e-04f, 2.234879544e-04f, 2.232760898e-04f, 2.230638551e-04f,
-2.228512508e-04f, 2.226382772e-04f, 2.224249348e-04f, 2.222112239e-04f, 2.219971450e-04f, 2.217826983e-04f, 2.215678845e-04f, 2.213527037e-04f, 2.211371565e-04f, 2.209212432e-04f,
-2.207049642e-04f, 2.204883200e-04f, 2.202713109e-04f, 2.200539373e-04f, 2.198361997e-04f, 2.196180984e-04f, 2.193996339e-04f, 2.191808065e-04f, 2.189616167e-04f, 2.187420649e-04f,
-2.185221514e-04f, 2.183018767e-04f, 2.180812412e-04f, 2.178602453e-04f, 2.176388895e-04f, 2.174171740e-04f, 2.171950994e-04f, 2.169726660e-04f, 2.167498742e-04f, 2.165267246e-04f,
-2.163032174e-04f, 2.160793531e-04f, 2.158551321e-04f, 2.156305548e-04f, 2.154056216e-04f, 2.151803330e-04f, 2.149546894e-04f, 2.147286912e-04f, 2.145023387e-04f, 2.142756325e-04f,
-2.140485730e-04f, 2.138211604e-04f, 2.135933954e-04f, 2.133652783e-04f, 2.131368095e-04f, 2.129079894e-04f, 2.126788185e-04f, 2.124492972e-04f, 2.122194259e-04f, 2.119892050e-04f,
-2.117586350e-04f, 2.115277163e-04f, 2.112964492e-04f, 2.110648344e-04f, 2.108328720e-04f, 2.106005627e-04f, 2.103679068e-04f, 2.101349048e-04f, 2.099015570e-04f, 2.096678639e-04f,
-2.094338260e-04f, 2.091994436e-04f, 2.089647172e-04f, 2.087296473e-04f, 2.084942342e-04f, 2.082584784e-04f, 2.080223804e-04f, 2.077859405e-04f, 2.075491592e-04f, 2.073120369e-04f,
-2.070745742e-04f, 2.068367713e-04f, 2.065986288e-04f, 2.063601470e-04f, 2.061213265e-04f, 2.058821676e-04f, 2.056426708e-04f, 2.054028366e-04f, 2.051626653e-04f, 2.049221575e-04f,
-2.046813135e-04f, 2.044401338e-04f, 2.041986189e-04f, 2.039567691e-04f, 2.037145850e-04f, 2.034720669e-04f, 2.032292154e-04f, 2.029860308e-04f, 2.027425137e-04f, 2.024986644e-04f,
-2.022544834e-04f, 2.020099711e-04f, 2.017651281e-04f, 2.015199547e-04f, 2.012744514e-04f, 2.010286186e-04f, 2.007824568e-04f, 2.005359665e-04f, 2.002891481e-04f, 2.000420020e-04f,
-1.997945287e-04f, 1.995467287e-04f, 1.992986024e-04f, 1.990501502e-04f, 1.988013727e-04f, 1.985522702e-04f, 1.983028433e-04f, 1.980530923e-04f, 1.978030178e-04f, 1.975526202e-04f,
-1.973018999e-04f, 1.970508574e-04f, 1.967994932e-04f, 1.965478078e-04f, 1.962958015e-04f, 1.960434748e-04f, 1.957908283e-04f, 1.955378623e-04f, 1.952845774e-04f, 1.950309740e-04f,
-1.947770525e-04f, 1.945228134e-04f, 1.942682573e-04f, 1.940133844e-04f, 1.937581954e-04f, 1.935026906e-04f, 1.932468706e-04f, 1.929907358e-04f, 1.927342867e-04f, 1.924775237e-04f,
-1.922204474e-04f, 1.919630581e-04f, 1.917053563e-04f, 1.914473426e-04f, 1.911890174e-04f, 1.909303811e-04f, 1.906714342e-04f, 1.904121773e-04f, 1.901526107e-04f, 1.898927349e-04f,
-1.896325505e-04f, 1.893720579e-04f, 1.891112575e-04f, 1.888501499e-04f, 1.885887354e-04f, 1.883270147e-04f, 1.880649881e-04f, 1.878026562e-04f, 1.875400193e-04f, 1.872770781e-04f,
-1.870138330e-04f, 1.867502844e-04f, 1.864864328e-04f, 1.862222787e-04f, 1.859578226e-04f, 1.856930650e-04f, 1.854280063e-04f, 1.851626471e-04f, 1.848969878e-04f, 1.846310288e-04f,
-1.843647708e-04f, 1.840982141e-04f, 1.838313592e-04f, 1.835642067e-04f, 1.832967570e-04f, 1.830290105e-04f, 1.827609679e-04f, 1.824926295e-04f, 1.822239959e-04f, 1.819550675e-04f,
-1.816858449e-04f, 1.814163284e-04f, 1.811465187e-04f, 1.808764161e-04f, 1.806060213e-04f, 1.803353346e-04f, 1.800643566e-04f, 1.797930877e-04f, 1.795215285e-04f, 1.792496794e-04f,
-1.789775409e-04f, 1.787051136e-04f, 1.784323979e-04f, 1.781593942e-04f, 1.778861032e-04f, 1.776125253e-04f, 1.773386609e-04f, 1.770645107e-04f, 1.767900750e-04f, 1.765153544e-04f,
-1.762403494e-04f, 1.759650605e-04f, 1.756894881e-04f, 1.754136328e-04f, 1.751374950e-04f, 1.748610753e-04f, 1.745843742e-04f, 1.743073922e-04f, 1.740301297e-04f, 1.737525872e-04f,
-1.734747654e-04f, 1.731966646e-04f, 1.729182853e-04f, 1.726396282e-04f, 1.723606936e-04f, 1.720814821e-04f, 1.718019942e-04f, 1.715222303e-04f, 1.712421911e-04f, 1.709618769e-04f,
-1.706812884e-04f, 1.704004259e-04f, 1.701192901e-04f, 1.698378814e-04f, 1.695562003e-04f, 1.692742474e-04f, 1.689920231e-04f, 1.687095279e-04f, 1.684267625e-04f, 1.681437271e-04f,
-1.678604225e-04f, 1.675768491e-04f, 1.672930073e-04f, 1.670088978e-04f, 1.667245210e-04f, 1.664398774e-04f, 1.661549676e-04f, 1.658697921e-04f, 1.655843513e-04f, 1.652986458e-04f,
-1.650126761e-04f, 1.647264428e-04f, 1.644399462e-04f, 1.641531870e-04f, 1.638661657e-04f, 1.635788828e-04f, 1.632913387e-04f, 1.630035341e-04f, 1.627154694e-04f, 1.624271452e-04f,
-1.621385619e-04f, 1.618497201e-04f, 1.615606203e-04f, 1.612712630e-04f, 1.609816488e-04f, 1.606917782e-04f, 1.604016516e-04f, 1.601112696e-04f, 1.598206328e-04f, 1.595297416e-04f,
-1.592385966e-04f, 1.589471983e-04f, 1.586555472e-04f, 1.583636439e-04f, 1.580714888e-04f, 1.577790825e-04f, 1.574864255e-04f, 1.571935184e-04f, 1.569003616e-04f, 1.566069557e-04f,
-1.563133013e-04f, 1.560193987e-04f, 1.557252487e-04f, 1.554308516e-04f, 1.551362081e-04f, 1.548413187e-04f, 1.545461838e-04f, 1.542508040e-04f, 1.539551799e-04f, 1.536593119e-04f,
-1.533632007e-04f, 1.530668466e-04f, 1.527702504e-04f, 1.524734124e-04f, 1.521763333e-04f, 1.518790135e-04f, 1.515814536e-04f, 1.512836542e-04f, 1.509856157e-04f, 1.506873387e-04f,
-1.503888237e-04f, 1.500900712e-04f, 1.497910819e-04f, 1.494918562e-04f, 1.491923946e-04f, 1.488926978e-04f, 1.485927662e-04f, 1.482926003e-04f, 1.479922008e-04f, 1.476915681e-04f,
-1.473907028e-04f, 1.470896054e-04f, 1.467882765e-04f, 1.464867166e-04f, 1.461849262e-04f, 1.458829059e-04f, 1.455806562e-04f, 1.452781777e-04f, 1.449754708e-04f, 1.446725362e-04f,
-1.443693744e-04f, 1.440659859e-04f, 1.437623713e-04f, 1.434585310e-04f, 1.431544658e-04f, 1.428501760e-04f, 1.425456622e-04f, 1.422409250e-04f, 1.419359650e-04f, 1.416307826e-04f,
-1.413253784e-04f, 1.410197529e-04f, 1.407139068e-04f, 1.404078405e-04f, 1.401015546e-04f, 1.397950497e-04f, 1.394883262e-04f, 1.391813847e-04f, 1.388742259e-04f, 1.385668501e-04f,
-1.382592581e-04f, 1.379514502e-04f, 1.376434272e-04f, 1.373351894e-04f, 1.370267376e-04f, 1.367180721e-04f, 1.364091936e-04f, 1.361001026e-04f, 1.357907997e-04f, 1.354812855e-04f,
-1.351715604e-04f, 1.348616250e-04f, 1.345514799e-04f, 1.342411256e-04f, 1.339305627e-04f, 1.336197918e-04f, 1.333088133e-04f, 1.329976279e-04f, 1.326862361e-04f, 1.323746384e-04f,
-1.320628354e-04f, 1.317508277e-04f, 1.314386158e-04f, 1.311262002e-04f, 1.308135816e-04f, 1.305007605e-04f, 1.301877374e-04f, 1.298745129e-04f, 1.295610875e-04f, 1.292474619e-04f,
-1.289336365e-04f, 1.286196120e-04f, 1.283053888e-04f, 1.279909675e-04f, 1.276763488e-04f, 1.273615331e-04f, 1.270465211e-04f, 1.267313132e-04f, 1.264159100e-04f, 1.261003122e-04f,
-1.257845202e-04f, 1.254685346e-04f, 1.251523560e-04f, 1.248359850e-04f, 1.245194220e-04f, 1.242026677e-04f, 1.238857227e-04f, 1.235685874e-04f, 1.232512625e-04f, 1.229337485e-04f,
-1.226160460e-04f, 1.222981555e-04f, 1.219800776e-04f, 1.216618129e-04f, 1.213433620e-04f, 1.210247253e-04f, 1.207059035e-04f, 1.203868971e-04f, 1.200677068e-04f, 1.197483329e-04f,
-1.194287763e-04f, 1.191090373e-04f, 1.187891166e-04f, 1.184690147e-04f, 1.181487322e-04f, 1.178282696e-04f, 1.175076276e-04f, 1.171868067e-04f, 1.168658075e-04f, 1.165446305e-04f,
-1.162232763e-04f, 1.159017455e-04f, 1.155800387e-04f, 1.152581563e-04f, 1.149360990e-04f, 1.146138674e-04f, 1.142914620e-04f, 1.139688834e-04f, 1.136461322e-04f, 1.133232089e-04f,
-1.130001142e-04f, 1.126768485e-04f, 1.123534124e-04f, 1.120298066e-04f, 1.117060316e-04f, 1.113820880e-04f, 1.110579762e-04f, 1.107336971e-04f, 1.104092510e-04f, 1.100846385e-04f,
-1.097598604e-04f, 1.094349170e-04f, 1.091098090e-04f, 1.087845370e-04f, 1.084591015e-04f, 1.081335031e-04f, 1.078077424e-04f, 1.074818200e-04f, 1.071557364e-04f, 1.068294922e-04f,
-1.065030880e-04f, 1.061765244e-04f, 1.058498020e-04f, 1.055229212e-04f, 1.051958828e-04f, 1.048686872e-04f, 1.045413351e-04f, 1.042138270e-04f, 1.038861636e-04f, 1.035583453e-04f,
-1.032303728e-04f, 1.029022466e-04f, 1.025739674e-04f, 1.022455357e-04f, 1.019169520e-04f, 1.015882170e-04f, 1.012593313e-04f, 1.009302954e-04f, 1.006011099e-04f, 1.002717754e-04f,
-9.994229245e-05f, 9.961266165e-05f, 9.928288358e-05f, 9.895295883e-05f, 9.862288796e-05f, 9.829267157e-05f, 9.796231024e-05f, 9.763180455e-05f, 9.730115508e-05f, 9.697036241e-05f,
-9.663942714e-05f, 9.630834983e-05f, 9.597713107e-05f, 9.564577146e-05f, 9.531427156e-05f, 9.498263197e-05f, 9.465085328e-05f, 9.431893605e-05f, 9.398688088e-05f, 9.365468836e-05f,
-9.332235906e-05f, 9.298989358e-05f, 9.265729249e-05f, 9.232455639e-05f, 9.199168586e-05f, 9.165868148e-05f, 9.132554385e-05f, 9.099227354e-05f, 9.065887115e-05f, 9.032533725e-05f,
-8.999167245e-05f, 8.965787732e-05f, 8.932395245e-05f, 8.898989843e-05f, 8.865571585e-05f, 8.832140529e-05f, 8.798696735e-05f, 8.765240260e-05f, 8.731771164e-05f, 8.698289506e-05f,
-8.664795345e-05f, 8.631288739e-05f, 8.597769747e-05f, 8.564238428e-05f, 8.530694842e-05f, 8.497139046e-05f, 8.463571101e-05f, 8.429991065e-05f, 8.396398997e-05f, 8.362794955e-05f,
-8.329179000e-05f, 8.295551190e-05f, 8.261911584e-05f, 8.228260241e-05f, 8.194597221e-05f, 8.160922582e-05f, 8.127236383e-05f, 8.093538684e-05f, 8.059829544e-05f, 8.026109022e-05f,
-7.992377177e-05f, 7.958634069e-05f, 7.924879756e-05f, 7.891114298e-05f, 7.857337754e-05f, 7.823550183e-05f, 7.789751644e-05f, 7.755942198e-05f, 7.722121903e-05f, 7.688290818e-05f,
-7.654449003e-05f, 7.620596517e-05f, 7.586733419e-05f, 7.552859770e-05f, 7.518975627e-05f, 7.485081052e-05f, 7.451176102e-05f, 7.417260838e-05f, 7.383335318e-05f, 7.349399603e-05f,
-7.315453752e-05f, 7.281497824e-05f, 7.247531879e-05f, 7.213555977e-05f, 7.179570176e-05f, 7.145574536e-05f, 7.111569117e-05f, 7.077553979e-05f, 7.043529180e-05f, 7.009494782e-05f,
-6.975450842e-05f, 6.941397421e-05f, 6.907334579e-05f, 6.873262374e-05f, 6.839180867e-05f, 6.805090118e-05f, 6.770990185e-05f, 6.736881129e-05f, 6.702763009e-05f, 6.668635885e-05f,
-6.634499817e-05f, 6.600354864e-05f, 6.566201087e-05f, 6.532038544e-05f, 6.497867296e-05f, 6.463687402e-05f, 6.429498923e-05f, 6.395301917e-05f, 6.361096445e-05f, 6.326882567e-05f,
-6.292660342e-05f, 6.258429830e-05f, 6.224191091e-05f, 6.189944184e-05f, 6.155689171e-05f, 6.121426110e-05f, 6.087155061e-05f, 6.052876085e-05f, 6.018589241e-05f, 5.984294588e-05f,
-5.949992188e-05f, 5.915682100e-05f, 5.881364383e-05f, 5.847039098e-05f, 5.812706305e-05f, 5.778366063e-05f, 5.744018433e-05f, 5.709663474e-05f, 5.675301247e-05f, 5.640931812e-05f,
-5.606555227e-05f, 5.572171554e-05f, 5.537780853e-05f, 5.503383183e-05f, 5.468978605e-05f, 5.434567178e-05f, 5.400148962e-05f, 5.365724019e-05f, 5.331292406e-05f, 5.296854186e-05f,
-5.262409417e-05f, 5.227958160e-05f, 5.193500475e-05f, 5.159036422e-05f, 5.124566061e-05f, 5.090089452e-05f, 5.055606655e-05f, 5.021117731e-05f, 4.986622739e-05f, 4.952121740e-05f,
-4.917614793e-05f, 4.883101959e-05f, 4.848583298e-05f, 4.814058871e-05f, 4.779528736e-05f, 4.744992955e-05f, 4.710451588e-05f, 4.675904694e-05f, 4.641352334e-05f, 4.606794568e-05f,
-4.572231457e-05f, 4.537663060e-05f, 4.503089437e-05f, 4.468510650e-05f, 4.433926757e-05f, 4.399337820e-05f, 4.364743898e-05f, 4.330145051e-05f, 4.295541340e-05f, 4.260932826e-05f,
-4.226319567e-05f, 4.191701626e-05f, 4.157079060e-05f, 4.122451932e-05f, 4.087820301e-05f, 4.053184227e-05f, 4.018543771e-05f, 3.983898993e-05f, 3.949249953e-05f, 3.914596712e-05f,
-3.879939329e-05f, 3.845277865e-05f, 3.810612380e-05f, 3.775942934e-05f, 3.741269588e-05f, 3.706592402e-05f, 3.671911436e-05f, 3.637226751e-05f, 3.602538406e-05f, 3.567846463e-05f,
-3.533150980e-05f, 3.498452019e-05f, 3.463749640e-05f, 3.429043903e-05f, 3.394334869e-05f, 3.359622597e-05f, 3.324907148e-05f, 3.290188582e-05f, 3.255466960e-05f, 3.220742341e-05f,
-3.186014786e-05f, 3.151284356e-05f, 3.116551111e-05f, 3.081815110e-05f, 3.047076415e-05f, 3.012335085e-05f, 2.977591180e-05f, 2.942844762e-05f, 2.908095890e-05f, 2.873344625e-05f,
-2.838591026e-05f, 2.803835155e-05f, 2.769077071e-05f, 2.734316835e-05f, 2.699554507e-05f, 2.664790148e-05f, 2.630023817e-05f, 2.595255574e-05f, 2.560485481e-05f, 2.525713597e-05f,
-2.490939983e-05f, 2.456164699e-05f, 2.421387805e-05f, 2.386609362e-05f, 2.351829429e-05f, 2.317048068e-05f, 2.282265337e-05f, 2.247481298e-05f, 2.212696011e-05f, 2.177909537e-05f,
-2.143121934e-05f, 2.108333264e-05f, 2.073543586e-05f, 2.038752962e-05f, 2.003961451e-05f, 1.969169114e-05f, 1.934376010e-05f, 1.899582200e-05f, 1.864787745e-05f, 1.829992704e-05f,
-1.795197138e-05f, 1.760401106e-05f, 1.725604670e-05f, 1.690807889e-05f, 1.656010824e-05f, 1.621213534e-05f, 1.586416080e-05f, 1.551618522e-05f, 1.516820921e-05f, 1.482023336e-05f,
-1.447225828e-05f, 1.412428456e-05f, 1.377631282e-05f, 1.342834365e-05f, 1.308037765e-05f, 1.273241543e-05f, 1.238445758e-05f, 1.203650471e-05f, 1.168855742e-05f, 1.134061632e-05f,
-1.099268199e-05f, 1.064475505e-05f, 1.029683609e-05f, 9.948925716e-06f, 9.601024530e-06f, 9.253133132e-06f, 8.905252122e-06f, 8.557382102e-06f, 8.209523672e-06f, 7.861677433e-06f,
-7.513843985e-06f, 7.166023930e-06f, 6.818217868e-06f, 6.470426399e-06f, 6.122650123e-06f, 5.774889642e-06f, 5.427145555e-06f, 5.079418462e-06f, 4.731708964e-06f, 4.384017660e-06f,
-4.036345151e-06f, 3.688692036e-06f, 3.341058915e-06f, 2.993446388e-06f, 2.645855055e-06f, 2.298285515e-06f, 1.950738367e-06f, 1.603214211e-06f, 1.255713646e-06f, 9.082372719e-07f,
-5.607856870e-07f, 2.133594907e-07f, -1.340407181e-07f, -4.814143406e-07f, -8.287607780e-07f, -1.176079432e-06f, -1.523369703e-06f, -1.870630993e-06f, -2.217862705e-06f, -2.565064238e-06f,
--2.912234996e-06f, -3.259374380e-06f, -3.606481793e-06f, -3.953556636e-06f, -4.300598311e-06f, -4.647606221e-06f, -4.994579768e-06f, -5.341518356e-06f, -5.688421385e-06f, -6.035288260e-06f,
--6.382118383e-06f, -6.728911156e-06f, -7.075665984e-06f, -7.422382268e-06f, -7.769059414e-06f, -8.115696823e-06f, -8.462293899e-06f, -8.808850046e-06f, -9.155364668e-06f, -9.501837169e-06f,
--9.848266952e-06f, -1.019465342e-05f, -1.054099598e-05f, -1.088729404e-05f, -1.123354699e-05f, -1.157975425e-05f, -1.192591522e-05f, -1.227202930e-05f, -1.261809590e-05f, -1.296411443e-05f,
--1.331008428e-05f, -1.365600487e-05f, -1.400187560e-05f, -1.434769587e-05f, -1.469346510e-05f, -1.503918268e-05f, -1.538484802e-05f, -1.573046054e-05f, -1.607601962e-05f, -1.642152470e-05f,
--1.676697515e-05f, -1.711237041e-05f, -1.745770987e-05f, -1.780299293e-05f, -1.814821901e-05f, -1.849338752e-05f, -1.883849785e-05f, -1.918354943e-05f, -1.952854164e-05f, -1.987347392e-05f,
--2.021834565e-05f, -2.056315626e-05f, -2.090790514e-05f, -2.125259171e-05f, -2.159721537e-05f, -2.194177554e-05f, -2.228627162e-05f, -2.263070303e-05f, -2.297506916e-05f, -2.331936944e-05f,
--2.366360326e-05f, -2.400777005e-05f, -2.435186920e-05f, -2.469590014e-05f, -2.503986226e-05f, -2.538375498e-05f, -2.572757772e-05f, -2.607132988e-05f, -2.641501086e-05f, -2.675862010e-05f,
--2.710215698e-05f, -2.744562093e-05f, -2.778901136e-05f, -2.813232768e-05f, -2.847556930e-05f, -2.881873563e-05f, -2.916182609e-05f, -2.950484008e-05f, -2.984777702e-05f, -3.019063633e-05f,
--3.053341741e-05f, -3.087611968e-05f, -3.121874255e-05f, -3.156128544e-05f, -3.190374776e-05f, -3.224612892e-05f, -3.258842834e-05f, -3.293064542e-05f, -3.327277960e-05f, -3.361483027e-05f,
--3.395679686e-05f, -3.429867878e-05f, -3.464047544e-05f, -3.498218627e-05f, -3.532381067e-05f, -3.566534806e-05f, -3.600679786e-05f, -3.634815948e-05f, -3.668943234e-05f, -3.703061586e-05f,
--3.737170945e-05f, -3.771271253e-05f, -3.805362452e-05f, -3.839444483e-05f, -3.873517289e-05f, -3.907580811e-05f, -3.941634990e-05f, -3.975679769e-05f, -4.009715089e-05f, -4.043740892e-05f,
--4.077757121e-05f, -4.111763717e-05f, -4.145760621e-05f, -4.179747777e-05f, -4.213725125e-05f, -4.247692608e-05f, -4.281650168e-05f, -4.315597747e-05f, -4.349535287e-05f, -4.383462729e-05f,
--4.417380017e-05f, -4.451287092e-05f, -4.485183896e-05f, -4.519070372e-05f, -4.552946461e-05f, -4.586812107e-05f, -4.620667250e-05f, -4.654511833e-05f, -4.688345799e-05f, -4.722169090e-05f,
--4.755981648e-05f, -4.789783416e-05f, -4.823574335e-05f, -4.857354349e-05f, -4.891123399e-05f, -4.924881429e-05f, -4.958628380e-05f, -4.992364195e-05f, -5.026088816e-05f, -5.059802187e-05f,
--5.093504249e-05f, -5.127194945e-05f, -5.160874218e-05f, -5.194542011e-05f, -5.228198265e-05f, -5.261842924e-05f, -5.295475931e-05f, -5.329097227e-05f, -5.362706757e-05f, -5.396304462e-05f,
--5.429890285e-05f, -5.463464170e-05f, -5.497026058e-05f, -5.530575894e-05f, -5.564113619e-05f, -5.597639177e-05f, -5.631152511e-05f, -5.664653563e-05f, -5.698142277e-05f, -5.731618595e-05f,
--5.765082462e-05f, -5.798533819e-05f, -5.831972609e-05f, -5.865398777e-05f, -5.898812265e-05f, -5.932213016e-05f, -5.965600974e-05f, -5.998976081e-05f, -6.032338282e-05f, -6.065687518e-05f,
--6.099023734e-05f, -6.132346873e-05f, -6.165656879e-05f, -6.198953694e-05f, -6.232237262e-05f, -6.265507526e-05f, -6.298764431e-05f, -6.332007919e-05f, -6.365237933e-05f, -6.398454419e-05f,
--6.431657318e-05f, -6.464846576e-05f, -6.498022134e-05f, -6.531183938e-05f, -6.564331931e-05f, -6.597466055e-05f, -6.630586256e-05f, -6.663692477e-05f, -6.696784662e-05f, -6.729862754e-05f,
--6.762926698e-05f, -6.795976437e-05f, -6.829011916e-05f, -6.862033078e-05f, -6.895039866e-05f, -6.928032226e-05f, -6.961010102e-05f, -6.993973436e-05f, -7.026922174e-05f, -7.059856260e-05f,
--7.092775637e-05f, -7.125680250e-05f, -7.158570043e-05f, -7.191444961e-05f, -7.224304947e-05f, -7.257149945e-05f, -7.289979902e-05f, -7.322794759e-05f, -7.355594463e-05f, -7.388378957e-05f,
--7.421148186e-05f, -7.453902094e-05f, -7.486640626e-05f, -7.519363727e-05f, -7.552071341e-05f, -7.584763412e-05f, -7.617439885e-05f, -7.650100705e-05f, -7.682745817e-05f, -7.715375165e-05f,
--7.747988695e-05f, -7.780586350e-05f, -7.813168076e-05f, -7.845733817e-05f, -7.878283519e-05f, -7.910817127e-05f, -7.943334585e-05f, -7.975835838e-05f, -8.008320831e-05f, -8.040789510e-05f,
--8.073241820e-05f, -8.105677705e-05f, -8.138097110e-05f, -8.170499982e-05f, -8.202886265e-05f, -8.235255905e-05f, -8.267608846e-05f, -8.299945034e-05f, -8.332264414e-05f, -8.364566932e-05f,
--8.396852534e-05f, -8.429121164e-05f, -8.461372768e-05f, -8.493607291e-05f, -8.525824680e-05f, -8.558024879e-05f, -8.590207835e-05f, -8.622373493e-05f, -8.654521799e-05f, -8.686652697e-05f,
--8.718766136e-05f, -8.750862058e-05f, -8.782940412e-05f, -8.815001143e-05f, -8.847044195e-05f, -8.879069517e-05f, -8.911077052e-05f, -8.943066748e-05f, -8.975038551e-05f, -9.006992406e-05f,
--9.038928259e-05f, -9.070846057e-05f, -9.102745746e-05f, -9.134627273e-05f, -9.166490582e-05f, -9.198335621e-05f, -9.230162336e-05f, -9.261970673e-05f, -9.293760579e-05f, -9.325532000e-05f,
--9.357284883e-05f, -9.389019173e-05f, -9.420734818e-05f, -9.452431764e-05f, -9.484109958e-05f, -9.515769346e-05f, -9.547409875e-05f, -9.579031492e-05f, -9.610634144e-05f, -9.642217776e-05f,
--9.673782337e-05f, -9.705327773e-05f, -9.736854030e-05f, -9.768361056e-05f, -9.799848798e-05f, -9.831317203e-05f, -9.862766218e-05f, -9.894195789e-05f, -9.925605864e-05f, -9.956996391e-05f,
--9.988367316e-05f, -1.001971859e-04f, -1.005105015e-04f, -1.008236195e-04f, -1.011365394e-04f, -1.014492607e-04f, -1.017617828e-04f, -1.020741052e-04f, -1.023862273e-04f, -1.026981487e-04f,
--1.030098688e-04f, -1.033213872e-04f, -1.036327032e-04f, -1.039438163e-04f, -1.042547261e-04f, -1.045654320e-04f, -1.048759335e-04f, -1.051862300e-04f, -1.054963211e-04f, -1.058062062e-04f,
--1.061158849e-04f, -1.064253565e-04f, -1.067346205e-04f, -1.070436765e-04f, -1.073525240e-04f, -1.076611623e-04f, -1.079695911e-04f, -1.082778097e-04f, -1.085858176e-04f, -1.088936144e-04f,
--1.092011996e-04f, -1.095085725e-04f, -1.098157327e-04f, -1.101226797e-04f, -1.104294130e-04f, -1.107359320e-04f, -1.110422362e-04f, -1.113483252e-04f, -1.116541983e-04f, -1.119598552e-04f,
--1.122652952e-04f, -1.125705180e-04f, -1.128755228e-04f, -1.131803094e-04f, -1.134848770e-04f, -1.137892253e-04f, -1.140933537e-04f, -1.143972617e-04f, -1.147009488e-04f, -1.150044145e-04f,
--1.153076583e-04f, -1.156106797e-04f, -1.159134781e-04f, -1.162160531e-04f, -1.165184041e-04f, -1.168205307e-04f, -1.171224324e-04f, -1.174241085e-04f, -1.177255587e-04f, -1.180267825e-04f,
--1.183277792e-04f, -1.186285485e-04f, -1.189290898e-04f, -1.192294027e-04f, -1.195294865e-04f, -1.198293409e-04f, -1.201289652e-04f, -1.204283591e-04f, -1.207275220e-04f, -1.210264534e-04f,
--1.213251528e-04f, -1.216236198e-04f, -1.219218537e-04f, -1.222198542e-04f, -1.225176207e-04f, -1.228151527e-04f, -1.231124497e-04f, -1.234095113e-04f, -1.237063369e-04f, -1.240029260e-04f,
--1.242992782e-04f, -1.245953929e-04f, -1.248912697e-04f, -1.251869080e-04f, -1.254823074e-04f, -1.257774674e-04f, -1.260723874e-04f, -1.263670671e-04f, -1.266615058e-04f, -1.269557032e-04f,
--1.272496587e-04f, -1.275433718e-04f, -1.278368420e-04f, -1.281300689e-04f, -1.284230520e-04f, -1.287157907e-04f, -1.290082846e-04f, -1.293005332e-04f, -1.295925360e-04f, -1.298842926e-04f,
--1.301758024e-04f, -1.304670649e-04f, -1.307580797e-04f, -1.310488463e-04f, -1.313393642e-04f, -1.316296329e-04f, -1.319196519e-04f, -1.322094208e-04f, -1.324989390e-04f, -1.327882062e-04f,
--1.330772217e-04f, -1.333659852e-04f, -1.336544961e-04f, -1.339427540e-04f, -1.342307583e-04f, -1.345185087e-04f, -1.348060046e-04f, -1.350932456e-04f, -1.353802311e-04f, -1.356669607e-04f,
--1.359534339e-04f, -1.362396503e-04f, -1.365256094e-04f, -1.368113106e-04f, -1.370967536e-04f, -1.373819378e-04f, -1.376668627e-04f, -1.379515280e-04f, -1.382359331e-04f, -1.385200776e-04f,
--1.388039609e-04f, -1.390875827e-04f, -1.393709423e-04f, -1.396540395e-04f, -1.399368736e-04f, -1.402194443e-04f, -1.405017511e-04f, -1.407837934e-04f, -1.410655709e-04f, -1.413470830e-04f,
--1.416283293e-04f, -1.419093094e-04f, -1.421900227e-04f, -1.424704688e-04f, -1.427506472e-04f, -1.430305575e-04f, -1.433101992e-04f, -1.435895719e-04f, -1.438686750e-04f, -1.441475081e-04f,
--1.444260708e-04f, -1.447043626e-04f, -1.449823830e-04f, -1.452601316e-04f, -1.455376079e-04f, -1.458148114e-04f, -1.460917417e-04f, -1.463683984e-04f, -1.466447810e-04f, -1.469208889e-04f,
--1.471967219e-04f, -1.474722793e-04f, -1.477475608e-04f, -1.480225659e-04f, -1.482972941e-04f, -1.485717450e-04f, -1.488459182e-04f, -1.491198131e-04f, -1.493934294e-04f, -1.496667665e-04f,
--1.499398241e-04f, -1.502126016e-04f, -1.504850987e-04f, -1.507573149e-04f, -1.510292496e-04f, -1.513009026e-04f, -1.515722732e-04f, -1.518433612e-04f, -1.521141659e-04f, -1.523846871e-04f,
--1.526549242e-04f, -1.529248768e-04f, -1.531945445e-04f, -1.534639267e-04f, -1.537330231e-04f, -1.540018332e-04f, -1.542703566e-04f, -1.545385928e-04f, -1.548065415e-04f, -1.550742020e-04f,
--1.553415741e-04f, -1.556086572e-04f, -1.558754510e-04f, -1.561419549e-04f, -1.564081686e-04f, -1.566740916e-04f, -1.569397234e-04f, -1.572050637e-04f, -1.574701120e-04f, -1.577348679e-04f,
--1.579993308e-04f, -1.582635005e-04f, -1.585273764e-04f, -1.587909582e-04f, -1.590542453e-04f, -1.593172374e-04f, -1.595799340e-04f, -1.598423347e-04f, -1.601044390e-04f, -1.603662466e-04f,
--1.606277570e-04f, -1.608889697e-04f, -1.611498844e-04f, -1.614105006e-04f, -1.616708179e-04f, -1.619308358e-04f, -1.621905540e-04f, -1.624499719e-04f, -1.627090893e-04f, -1.629679055e-04f,
--1.632264204e-04f, -1.634846333e-04f, -1.637425439e-04f, -1.640001517e-04f, -1.642574564e-04f, -1.645144575e-04f, -1.647711546e-04f, -1.650275472e-04f, -1.652836350e-04f, -1.655394175e-04f,
--1.657948944e-04f, -1.660500651e-04f, -1.663049293e-04f, -1.665594865e-04f, -1.668137364e-04f, -1.670676785e-04f, -1.673213125e-04f, -1.675746378e-04f, -1.678276541e-04f, -1.680803609e-04f,
--1.683327579e-04f, -1.685848446e-04f, -1.688366207e-04f, -1.690880856e-04f, -1.693392391e-04f, -1.695900807e-04f, -1.698406099e-04f, -1.700908264e-04f, -1.703407298e-04f, -1.705903196e-04f,
--1.708395955e-04f, -1.710885570e-04f, -1.713372037e-04f, -1.715855353e-04f, -1.718335512e-04f, -1.720812512e-04f, -1.723286348e-04f, -1.725757016e-04f, -1.728224512e-04f, -1.730688833e-04f,
--1.733149973e-04f, -1.735607929e-04f, -1.738062697e-04f, -1.740514273e-04f, -1.742962653e-04f, -1.745407833e-04f, -1.747849809e-04f, -1.750288576e-04f, -1.752724132e-04f, -1.755156472e-04f,
--1.757585593e-04f, -1.760011489e-04f, -1.762434157e-04f, -1.764853594e-04f, -1.767269795e-04f, -1.769682756e-04f, -1.772092474e-04f, -1.774498945e-04f, -1.776902164e-04f, -1.779302127e-04f,
--1.781698832e-04f, -1.784092273e-04f, -1.786482448e-04f, -1.788869351e-04f, -1.791252980e-04f, -1.793633330e-04f, -1.796010398e-04f, -1.798384179e-04f, -1.800754671e-04f, -1.803121868e-04f,
--1.805485767e-04f, -1.807846364e-04f, -1.810203656e-04f, -1.812557639e-04f, -1.814908308e-04f, -1.817255661e-04f, -1.819599692e-04f, -1.821940399e-04f, -1.824277777e-04f, -1.826611823e-04f,
--1.828942534e-04f, -1.831269904e-04f, -1.833593931e-04f, -1.835914611e-04f, -1.838231939e-04f, -1.840545913e-04f, -1.842856528e-04f, -1.845163781e-04f, -1.847467667e-04f, -1.849768184e-04f,
--1.852065328e-04f, -1.854359094e-04f, -1.856649479e-04f, -1.858936480e-04f, -1.861220093e-04f, -1.863500313e-04f, -1.865777138e-04f, -1.868050563e-04f, -1.870320585e-04f, -1.872587201e-04f,
--1.874850406e-04f, -1.877110197e-04f, -1.879366570e-04f, -1.881619523e-04f, -1.883869050e-04f, -1.886115148e-04f, -1.888357815e-04f, -1.890597045e-04f, -1.892832836e-04f, -1.895065184e-04f,
--1.897294086e-04f, -1.899519537e-04f, -1.901741534e-04f, -1.903960074e-04f, -1.906175153e-04f, -1.908386767e-04f, -1.910594914e-04f, -1.912799588e-04f, -1.915000788e-04f, -1.917198508e-04f,
--1.919392747e-04f, -1.921583499e-04f, -1.923770762e-04f, -1.925954533e-04f, -1.928134807e-04f, -1.930311581e-04f, -1.932484851e-04f, -1.934654615e-04f, -1.936820869e-04f, -1.938983609e-04f,
--1.941142831e-04f, -1.943298532e-04f, -1.945450710e-04f, -1.947599360e-04f, -1.949744478e-04f, -1.951886062e-04f, -1.954024108e-04f, -1.956158613e-04f, -1.958289572e-04f, -1.960416984e-04f,
--1.962540843e-04f, -1.964661148e-04f, -1.966777894e-04f, -1.968891078e-04f, -1.971000697e-04f, -1.973106748e-04f, -1.975209226e-04f, -1.977308129e-04f, -1.979403454e-04f, -1.981495196e-04f,
--1.983583353e-04f, -1.985667921e-04f, -1.987748897e-04f, -1.989826277e-04f, -1.991900059e-04f, -1.993970239e-04f, -1.996036813e-04f, -1.998099779e-04f, -2.000159133e-04f, -2.002214871e-04f,
--2.004266991e-04f, -2.006315489e-04f, -2.008360363e-04f, -2.010401607e-04f, -2.012439221e-04f, -2.014473199e-04f, -2.016503540e-04f, -2.018530239e-04f, -2.020553293e-04f, -2.022572700e-04f,
--2.024588456e-04f, -2.026600558e-04f, -2.028609002e-04f, -2.030613786e-04f, -2.032614906e-04f, -2.034612360e-04f, -2.036606143e-04f, -2.038596252e-04f, -2.040582686e-04f, -2.042565439e-04f,
--2.044544510e-04f, -2.046519896e-04f, -2.048491592e-04f, -2.050459596e-04f, -2.052423904e-04f, -2.054384515e-04f, -2.056341423e-04f, -2.058294628e-04f, -2.060244124e-04f, -2.062189910e-04f,
--2.064131982e-04f, -2.066070337e-04f, -2.068004972e-04f, -2.069935883e-04f, -2.071863069e-04f, -2.073786526e-04f, -2.075706250e-04f, -2.077622239e-04f, -2.079534490e-04f, -2.081442999e-04f,
--2.083347764e-04f, -2.085248782e-04f, -2.087146049e-04f, -2.089039564e-04f, -2.090929321e-04f, -2.092815320e-04f, -2.094697556e-04f, -2.096576027e-04f, -2.098450730e-04f, -2.100321661e-04f,
--2.102188819e-04f, -2.104052199e-04f, -2.105911800e-04f, -2.107767617e-04f, -2.109619649e-04f, -2.111467892e-04f, -2.113312343e-04f, -2.115153000e-04f, -2.116989859e-04f, -2.118822918e-04f,
--2.120652173e-04f, -2.122477623e-04f, -2.124299264e-04f, -2.126117092e-04f, -2.127931106e-04f, -2.129741303e-04f, -2.131547679e-04f, -2.133350232e-04f, -2.135148959e-04f, -2.136943857e-04f,
--2.138734924e-04f, -2.140522156e-04f, -2.142305550e-04f, -2.144085105e-04f, -2.145860817e-04f, -2.147632683e-04f, -2.149400701e-04f, -2.151164868e-04f, -2.152925180e-04f, -2.154681636e-04f,
--2.156434233e-04f, -2.158182968e-04f, -2.159927837e-04f, -2.161668839e-04f, -2.163405971e-04f, -2.165139230e-04f, -2.166868613e-04f, -2.168594117e-04f, -2.170315741e-04f, -2.172033481e-04f,
--2.173747334e-04f, -2.175457298e-04f, -2.177163370e-04f, -2.178865548e-04f, -2.180563829e-04f, -2.182258210e-04f, -2.183948688e-04f, -2.185635262e-04f, -2.187317928e-04f, -2.188996684e-04f,
--2.190671527e-04f, -2.192342454e-04f, -2.194009464e-04f, -2.195672553e-04f, -2.197331718e-04f, -2.198986958e-04f, -2.200638270e-04f, -2.202285650e-04f, -2.203929098e-04f, -2.205568609e-04f,
--2.207204182e-04f, -2.208835814e-04f, -2.210463502e-04f, -2.212087244e-04f, -2.213707038e-04f, -2.215322880e-04f, -2.216934769e-04f, -2.218542702e-04f, -2.220146676e-04f, -2.221746690e-04f,
--2.223342740e-04f, -2.224934824e-04f, -2.226522939e-04f, -2.228107084e-04f, -2.229687255e-04f, -2.231263451e-04f, -2.232835669e-04f, -2.234403906e-04f, -2.235968160e-04f, -2.237528429e-04f,
--2.239084710e-04f, -2.240637001e-04f, -2.242185299e-04f, -2.243729603e-04f, -2.245269909e-04f, -2.246806216e-04f, -2.248338520e-04f, -2.249866821e-04f, -2.251391114e-04f, -2.252911399e-04f,
--2.254427673e-04f, -2.255939933e-04f, -2.257448177e-04f, -2.258952402e-04f, -2.260452608e-04f, -2.261948790e-04f, -2.263440947e-04f, -2.264929077e-04f, -2.266413178e-04f, -2.267893246e-04f,
--2.269369280e-04f, -2.270841278e-04f, -2.272309237e-04f, -2.273773156e-04f, -2.275233031e-04f, -2.276688861e-04f, -2.278140644e-04f, -2.279588376e-04f, -2.281032057e-04f, -2.282471684e-04f,
--2.283907255e-04f, -2.285338767e-04f, -2.286766218e-04f, -2.288189607e-04f, -2.289608931e-04f, -2.291024187e-04f, -2.292435375e-04f, -2.293842491e-04f, -2.295245534e-04f, -2.296644501e-04f,
--2.298039390e-04f, -2.299430200e-04f, -2.300816928e-04f, -2.302199571e-04f, -2.303578129e-04f, -2.304952599e-04f, -2.306322978e-04f, -2.307689265e-04f, -2.309051458e-04f, -2.310409555e-04f,
--2.311763553e-04f, -2.313113451e-04f, -2.314459246e-04f, -2.315800937e-04f, -2.317138521e-04f, -2.318471997e-04f, -2.319801363e-04f, -2.321126616e-04f, -2.322447755e-04f, -2.323764777e-04f,
--2.325077681e-04f, -2.326386465e-04f, -2.327691126e-04f, -2.328991663e-04f, -2.330288074e-04f, -2.331580357e-04f, -2.332868511e-04f, -2.334152532e-04f, -2.335432419e-04f, -2.336708171e-04f,
--2.337979785e-04f, -2.339247260e-04f, -2.340510593e-04f, -2.341769783e-04f, -2.343024828e-04f, -2.344275726e-04f, -2.345522475e-04f, -2.346765074e-04f, -2.348003520e-04f, -2.349237812e-04f,
--2.350467948e-04f, -2.351693926e-04f, -2.352915744e-04f, -2.354133401e-04f, -2.355346895e-04f, -2.356556223e-04f, -2.357761385e-04f, -2.358962378e-04f, -2.360159200e-04f, -2.361351851e-04f,
--2.362540327e-04f, -2.363724628e-04f, -2.364904752e-04f, -2.366080697e-04f, -2.367252460e-04f, -2.368420042e-04f, -2.369583439e-04f, -2.370742650e-04f, -2.371897674e-04f, -2.373048508e-04f,
--2.374195152e-04f, -2.375337603e-04f, -2.376475860e-04f, -2.377609921e-04f, -2.378739784e-04f, -2.379865448e-04f, -2.380986912e-04f, -2.382104173e-04f, -2.383217230e-04f, -2.384326081e-04f,
--2.385430726e-04f, -2.386531161e-04f, -2.387627386e-04f, -2.388719399e-04f, -2.389807199e-04f, -2.390890783e-04f, -2.391970151e-04f, -2.393045301e-04f, -2.394116231e-04f, -2.395182939e-04f,
--2.396245425e-04f, -2.397303687e-04f, -2.398357723e-04f, -2.399407531e-04f, -2.400453111e-04f, -2.401494461e-04f, -2.402531578e-04f, -2.403564463e-04f, -2.404593113e-04f, -2.405617526e-04f,
--2.406637702e-04f, -2.407653639e-04f, -2.408665336e-04f, -2.409672790e-04f, -2.410676002e-04f, -2.411674968e-04f, -2.412669689e-04f, -2.413660162e-04f, -2.414646386e-04f, -2.415628360e-04f,
--2.416606082e-04f, -2.417579551e-04f, -2.418548765e-04f, -2.419513724e-04f, -2.420474426e-04f, -2.421430869e-04f, -2.422383053e-04f, -2.423330976e-04f, -2.424274636e-04f, -2.425214032e-04f,
--2.426149164e-04f, -2.427080029e-04f, -2.428006626e-04f, -2.428928955e-04f, -2.429847014e-04f, -2.430760801e-04f, -2.431670315e-04f, -2.432575556e-04f, -2.433476522e-04f, -2.434373211e-04f,
--2.435265622e-04f, -2.436153755e-04f, -2.437037608e-04f, -2.437917180e-04f, -2.438792469e-04f, -2.439663474e-04f, -2.440530195e-04f, -2.441392630e-04f, -2.442250778e-04f, -2.443104637e-04f,
--2.443954207e-04f, -2.444799487e-04f, -2.445640475e-04f, -2.446477170e-04f, -2.447309571e-04f, -2.448137677e-04f, -2.448961486e-04f, -2.449780999e-04f, -2.450596213e-04f, -2.451407128e-04f,
--2.452213742e-04f, -2.453016055e-04f, -2.453814065e-04f, -2.454607772e-04f, -2.455397173e-04f, -2.456182269e-04f, -2.456963059e-04f, -2.457739540e-04f, -2.458511712e-04f, -2.459279575e-04f,
--2.460043127e-04f, -2.460802367e-04f, -2.461557294e-04f, -2.462307908e-04f, -2.463054206e-04f, -2.463796189e-04f, -2.464533856e-04f, -2.465267204e-04f, -2.465996235e-04f, -2.466720945e-04f,
--2.467441336e-04f, -2.468157405e-04f, -2.468869151e-04f, -2.469576575e-04f, -2.470279674e-04f, -2.470978449e-04f, -2.471672898e-04f, -2.472363020e-04f, -2.473048815e-04f, -2.473730281e-04f,
--2.474407418e-04f, -2.475080225e-04f, -2.475748701e-04f, -2.476412845e-04f, -2.477072657e-04f, -2.477728136e-04f, -2.478379280e-04f, -2.479026089e-04f, -2.479668563e-04f, -2.480306700e-04f,
--2.480940500e-04f, -2.481569961e-04f, -2.482195084e-04f, -2.482815867e-04f, -2.483432310e-04f, -2.484044412e-04f, -2.484652172e-04f, -2.485255590e-04f, -2.485854665e-04f, -2.486449395e-04f,
--2.487039781e-04f, -2.487625822e-04f, -2.488207516e-04f, -2.488784864e-04f, -2.489357865e-04f, -2.489926518e-04f, -2.490490822e-04f, -2.491050777e-04f, -2.491606381e-04f, -2.492157636e-04f,
--2.492704539e-04f, -2.493247090e-04f, -2.493785289e-04f, -2.494319135e-04f, -2.494848628e-04f, -2.495373766e-04f, -2.495894550e-04f, -2.496410978e-04f, -2.496923051e-04f, -2.497430767e-04f,
--2.497934126e-04f, -2.498433127e-04f, -2.498927771e-04f, -2.499418056e-04f, -2.499903981e-04f, -2.500385548e-04f, -2.500862754e-04f, -2.501335600e-04f, -2.501804084e-04f, -2.502268208e-04f,
--2.502727969e-04f, -2.503183367e-04f, -2.503634403e-04f, -2.504081075e-04f, -2.504523384e-04f, -2.504961328e-04f, -2.505394908e-04f, -2.505824123e-04f, -2.506248972e-04f, -2.506669455e-04f,
--2.507085572e-04f, -2.507497322e-04f, -2.507904705e-04f, -2.508307721e-04f, -2.508706369e-04f, -2.509100649e-04f, -2.509490561e-04f, -2.509876103e-04f, -2.510257277e-04f, -2.510634081e-04f,
--2.511006515e-04f, -2.511374579e-04f, -2.511738273e-04f, -2.512097596e-04f, -2.512452548e-04f, -2.512803128e-04f, -2.513149337e-04f, -2.513491175e-04f, -2.513828640e-04f, -2.514161733e-04f,
--2.514490453e-04f, -2.514814801e-04f, -2.515134775e-04f, -2.515450376e-04f, -2.515761604e-04f, -2.516068458e-04f, -2.516370939e-04f, -2.516669045e-04f, -2.516962777e-04f, -2.517252135e-04f,
--2.517537118e-04f, -2.517817726e-04f, -2.518093959e-04f, -2.518365818e-04f, -2.518633301e-04f, -2.518896409e-04f, -2.519155142e-04f, -2.519409499e-04f, -2.519659480e-04f, -2.519905086e-04f,
--2.520146315e-04f, -2.520383169e-04f, -2.520615647e-04f, -2.520843749e-04f, -2.521067475e-04f, -2.521286825e-04f, -2.521501798e-04f, -2.521712396e-04f, -2.521918616e-04f, -2.522120461e-04f,
--2.522317929e-04f, -2.522511022e-04f, -2.522699737e-04f, -2.522884077e-04f, -2.523064040e-04f, -2.523239627e-04f, -2.523410837e-04f, -2.523577672e-04f, -2.523740130e-04f, -2.523898212e-04f,
--2.524051918e-04f, -2.524201248e-04f, -2.524346203e-04f, -2.524486781e-04f, -2.524622984e-04f, -2.524754811e-04f, -2.524882263e-04f, -2.525005339e-04f, -2.525124040e-04f, -2.525238365e-04f,
--2.525348316e-04f, -2.525453892e-04f, -2.525555093e-04f, -2.525651920e-04f, -2.525744372e-04f, -2.525832450e-04f, -2.525916154e-04f, -2.525995484e-04f, -2.526070440e-04f, -2.526141023e-04f,
--2.526207233e-04f, -2.526269070e-04f, -2.526326534e-04f, -2.526379625e-04f, -2.526428344e-04f, -2.526472691e-04f, -2.526512666e-04f, -2.526548270e-04f, -2.526579502e-04f, -2.526606364e-04f,
--2.526628854e-04f, -2.526646975e-04f, -2.526660725e-04f, -2.526670105e-04f, -2.526675116e-04f, -2.526675758e-04f, -2.526672031e-04f, -2.526663935e-04f, -2.526651472e-04f, -2.526634640e-04f,
--2.526613441e-04f, -2.526587875e-04f, -2.526557943e-04f, -2.526523644e-04f, -2.526484979e-04f, -2.526441949e-04f, -2.526394554e-04f, -2.526342794e-04f, -2.526286669e-04f, -2.526226181e-04f,
--2.526161330e-04f, -2.526092116e-04f, -2.526018539e-04f, -2.525940600e-04f, -2.525858300e-04f, -2.525771638e-04f, -2.525680616e-04f, -2.525585234e-04f, -2.525485493e-04f, -2.525381392e-04f,
--2.525272933e-04f, -2.525160115e-04f, -2.525042940e-04f, -2.524921408e-04f, -2.524795520e-04f, -2.524665275e-04f, -2.524530676e-04f, -2.524391721e-04f, -2.524248413e-04f, -2.524100751e-04f,
--2.523948735e-04f, -2.523792368e-04f, -2.523631648e-04f, -2.523466577e-04f, -2.523297156e-04f, -2.523123384e-04f, -2.522945264e-04f, -2.522762794e-04f, -2.522575977e-04f, -2.522384812e-04f,
--2.522189300e-04f, -2.521989442e-04f, -2.521785239e-04f, -2.521576691e-04f, -2.521363800e-04f, -2.521146564e-04f, -2.520924987e-04f, -2.520699067e-04f, -2.520468806e-04f, -2.520234205e-04f,
--2.519995264e-04f, -2.519751984e-04f, -2.519504366e-04f, -2.519252410e-04f, -2.518996118e-04f, -2.518735490e-04f, -2.518470526e-04f, -2.518201229e-04f, -2.517927597e-04f, -2.517649633e-04f,
--2.517367338e-04f, -2.517080711e-04f, -2.516789753e-04f, -2.516494467e-04f, -2.516194851e-04f, -2.515890908e-04f, -2.515582638e-04f, -2.515270042e-04f, -2.514953121e-04f, -2.514631876e-04f,
--2.514306307e-04f, -2.513976416e-04f, -2.513642203e-04f, -2.513303669e-04f, -2.512960816e-04f, -2.512613644e-04f, -2.512262153e-04f, -2.511906346e-04f, -2.511546223e-04f, -2.511181785e-04f,
--2.510813032e-04f, -2.510439967e-04f, -2.510062589e-04f, -2.509680900e-04f, -2.509294901e-04f, -2.508904593e-04f, -2.508509976e-04f, -2.508111052e-04f, -2.507707822e-04f, -2.507300287e-04f,
--2.506888448e-04f, -2.506472306e-04f, -2.506051861e-04f, -2.505627116e-04f, -2.505198071e-04f, -2.504764727e-04f, -2.504327085e-04f, -2.503885146e-04f, -2.503438912e-04f, -2.502988384e-04f,
--2.502533562e-04f, -2.502074447e-04f, -2.501611042e-04f, -2.501143347e-04f, -2.500671362e-04f, -2.500195090e-04f, -2.499714532e-04f, -2.499229688e-04f, -2.498740559e-04f, -2.498247148e-04f,
--2.497749455e-04f, -2.497247481e-04f, -2.496741228e-04f, -2.496230696e-04f, -2.495715887e-04f, -2.495196802e-04f, -2.494673443e-04f, -2.494145810e-04f, -2.493613905e-04f, -2.493077729e-04f,
--2.492537283e-04f, -2.491992569e-04f, -2.491443588e-04f, -2.490890341e-04f, -2.490332829e-04f, -2.489771054e-04f, -2.489205017e-04f, -2.488634719e-04f, -2.488060162e-04f, -2.487481347e-04f,
--2.486898275e-04f, -2.486310947e-04f, -2.485719366e-04f, -2.485123532e-04f, -2.484523446e-04f, -2.483919110e-04f, -2.483310526e-04f, -2.482697695e-04f, -2.482080617e-04f, -2.481459295e-04f,
--2.480833730e-04f, -2.480203924e-04f, -2.479569877e-04f, -2.478931591e-04f, -2.478289068e-04f, -2.477642309e-04f, -2.476991315e-04f, -2.476336088e-04f, -2.475676630e-04f, -2.475012941e-04f,
--2.474345024e-04f, -2.473672880e-04f, -2.472996509e-04f, -2.472315915e-04f, -2.471631098e-04f, -2.470942059e-04f, -2.470248801e-04f, -2.469551325e-04f, -2.468849632e-04f, -2.468143723e-04f,
--2.467433602e-04f, -2.466719268e-04f, -2.466000724e-04f, -2.465277970e-04f, -2.464551010e-04f, -2.463819844e-04f, -2.463084473e-04f, -2.462344900e-04f, -2.461601126e-04f, -2.460853153e-04f,
--2.460100981e-04f, -2.459344614e-04f, -2.458584052e-04f, -2.457819297e-04f, -2.457050351e-04f, -2.456277216e-04f, -2.455499892e-04f, -2.454718383e-04f, -2.453932688e-04f, -2.453142811e-04f,
--2.452348753e-04f, -2.451550515e-04f, -2.450748099e-04f, -2.449941507e-04f, -2.449130741e-04f, -2.448315802e-04f, -2.447496692e-04f, -2.446673412e-04f, -2.445845966e-04f, -2.445014353e-04f,
--2.444178577e-04f, -2.443338638e-04f, -2.442494539e-04f, -2.441646281e-04f, -2.440793867e-04f, -2.439937297e-04f, -2.439076574e-04f, -2.438211700e-04f, -2.437342676e-04f, -2.436469504e-04f,
--2.435592186e-04f, -2.434710723e-04f, -2.433825119e-04f, -2.432935374e-04f, -2.432041490e-04f, -2.431143470e-04f, -2.430241315e-04f, -2.429335026e-04f, -2.428424607e-04f, -2.427510058e-04f,
--2.426591382e-04f, -2.425668580e-04f, -2.424741655e-04f, -2.423810609e-04f, -2.422875442e-04f, -2.421936158e-04f, -2.420992758e-04f, -2.420045244e-04f, -2.419093618e-04f, -2.418137883e-04f,
--2.417178039e-04f, -2.416214089e-04f, -2.415246035e-04f, -2.414273879e-04f, -2.413297623e-04f, -2.412317269e-04f, -2.411332819e-04f, -2.410344275e-04f, -2.409351639e-04f, -2.408354913e-04f,
--2.407354099e-04f, -2.406349199e-04f, -2.405340215e-04f, -2.404327150e-04f, -2.403310004e-04f, -2.402288782e-04f, -2.401263483e-04f, -2.400234111e-04f, -2.399200668e-04f, -2.398163155e-04f,
--2.397121575e-04f, -2.396075930e-04f, -2.395026222e-04f, -2.393972453e-04f, -2.392914626e-04f, -2.391852742e-04f, -2.390786803e-04f, -2.389716813e-04f, -2.388642772e-04f, -2.387564683e-04f,
--2.386482548e-04f, -2.385396370e-04f, -2.384306151e-04f, -2.383211892e-04f, -2.382113596e-04f, -2.381011266e-04f, -2.379904903e-04f, -2.378794509e-04f, -2.377680088e-04f, -2.376561641e-04f,
--2.375439169e-04f, -2.374312677e-04f, -2.373182165e-04f, -2.372047637e-04f, -2.370909094e-04f, -2.369766539e-04f, -2.368619973e-04f, -2.367469400e-04f, -2.366314821e-04f, -2.365156239e-04f,
--2.363993657e-04f, -2.362827076e-04f, -2.361656498e-04f, -2.360481927e-04f, -2.359303364e-04f, -2.358120812e-04f, -2.356934273e-04f, -2.355743750e-04f, -2.354549244e-04f, -2.353350759e-04f,
--2.352148296e-04f, -2.350941859e-04f, -2.349731449e-04f, -2.348517068e-04f, -2.347298720e-04f, -2.346076406e-04f, -2.344850130e-04f, -2.343619893e-04f, -2.342385698e-04f, -2.341147547e-04f,
--2.339905443e-04f, -2.338659388e-04f, -2.337409384e-04f, -2.336155435e-04f, -2.334897543e-04f, -2.333635709e-04f, -2.332369938e-04f, -2.331100230e-04f, -2.329826588e-04f, -2.328549016e-04f,
--2.327267516e-04f, -2.325982089e-04f, -2.324692739e-04f, -2.323399469e-04f, -2.322102279e-04f, -2.320801175e-04f, -2.319496157e-04f, -2.318187228e-04f, -2.316874391e-04f, -2.315557649e-04f,
--2.314237003e-04f, -2.312912457e-04f, -2.311584014e-04f, -2.310251675e-04f, -2.308915444e-04f, -2.307575323e-04f, -2.306231314e-04f, -2.304883420e-04f, -2.303531645e-04f, -2.302175990e-04f,
--2.300816458e-04f, -2.299453052e-04f, -2.298085774e-04f, -2.296714628e-04f, -2.295339615e-04f, -2.293960739e-04f, -2.292578002e-04f, -2.291191407e-04f, -2.289800956e-04f, -2.288406653e-04f,
--2.287008499e-04f, -2.285606498e-04f, -2.284200653e-04f, -2.282790965e-04f, -2.281377439e-04f, -2.279960075e-04f, -2.278538879e-04f, -2.277113851e-04f, -2.275684995e-04f, -2.274252314e-04f,
--2.272815810e-04f, -2.271375486e-04f, -2.269931345e-04f, -2.268483390e-04f, -2.267031623e-04f, -2.265576048e-04f, -2.264116666e-04f, -2.262653482e-04f, -2.261186497e-04f, -2.259715715e-04f,
--2.258241139e-04f, -2.256762770e-04f, -2.255280613e-04f, -2.253794670e-04f, -2.252304943e-04f, -2.250811436e-04f, -2.249314152e-04f, -2.247813093e-04f, -2.246308262e-04f, -2.244799663e-04f,
--2.243287298e-04f, -2.241771169e-04f, -2.240251281e-04f, -2.238727635e-04f, -2.237200236e-04f, -2.235669085e-04f, -2.234134185e-04f, -2.232595540e-04f, -2.231053153e-04f, -2.229507026e-04f,
--2.227957162e-04f, -2.226403565e-04f, -2.224846237e-04f, -2.223285182e-04f, -2.221720402e-04f, -2.220151900e-04f, -2.218579679e-04f, -2.217003743e-04f, -2.215424094e-04f, -2.213840736e-04f,
--2.212253671e-04f, -2.210662902e-04f, -2.209068433e-04f, -2.207470266e-04f, -2.205868405e-04f, -2.204262852e-04f, -2.202653611e-04f, -2.201040684e-04f, -2.199424076e-04f, -2.197803788e-04f,
--2.196179824e-04f, -2.194552187e-04f, -2.192920881e-04f, -2.191285907e-04f, -2.189647270e-04f, -2.188004972e-04f, -2.186359017e-04f, -2.184709408e-04f, -2.183056147e-04f, -2.181399238e-04f,
--2.179738685e-04f, -2.178074489e-04f, -2.176406656e-04f, -2.174735186e-04f, -2.173060085e-04f, -2.171381354e-04f, -2.169698998e-04f, -2.168013018e-04f, -2.166323420e-04f, -2.164630204e-04f,
--2.162933376e-04f, -2.161232938e-04f, -2.159528894e-04f, -2.157821245e-04f, -2.156109997e-04f, -2.154395151e-04f, -2.152676712e-04f, -2.150954683e-04f, -2.149229066e-04f, -2.147499865e-04f,
--2.145767083e-04f, -2.144030724e-04f, -2.142290791e-04f, -2.140547286e-04f, -2.138800215e-04f, -2.137049579e-04f, -2.135295381e-04f, -2.133537627e-04f, -2.131776317e-04f, -2.130011457e-04f,
--2.128243049e-04f, -2.126471097e-04f, -2.124695603e-04f, -2.122916572e-04f, -2.121134006e-04f, -2.119347910e-04f, -2.117558285e-04f, -2.115765137e-04f, -2.113968467e-04f, -2.112168280e-04f,
--2.110364578e-04f, -2.108557366e-04f, -2.106746647e-04f, -2.104932423e-04f, -2.103114699e-04f, -2.101293477e-04f, -2.099468762e-04f, -2.097640557e-04f, -2.095808865e-04f, -2.093973689e-04f,
--2.092135033e-04f, -2.090292900e-04f, -2.088447295e-04f, -2.086598220e-04f, -2.084745678e-04f, -2.082889674e-04f, -2.081030210e-04f, -2.079167291e-04f, -2.077300919e-04f, -2.075431099e-04f,
--2.073557833e-04f, -2.071681126e-04f, -2.069800980e-04f, -2.067917399e-04f, -2.066030388e-04f, -2.064139948e-04f, -2.062246084e-04f, -2.060348800e-04f, -2.058448098e-04f, -2.056543983e-04f,
--2.054636458e-04f, -2.052725526e-04f, -2.050811192e-04f, -2.048893458e-04f, -2.046972328e-04f, -2.045047806e-04f, -2.043119896e-04f, -2.041188601e-04f, -2.039253924e-04f, -2.037315870e-04f,
--2.035374441e-04f, -2.033429642e-04f, -2.031481476e-04f, -2.029529946e-04f, -2.027575057e-04f, -2.025616812e-04f, -2.023655215e-04f, -2.021690269e-04f, -2.019721977e-04f, -2.017750345e-04f,
--2.015775374e-04f, -2.013797070e-04f, -2.011815435e-04f, -2.009830473e-04f, -2.007842189e-04f, -2.005850585e-04f, -2.003855665e-04f, -2.001857433e-04f, -1.999855894e-04f, -1.997851049e-04f,
--1.995842904e-04f, -1.993831462e-04f, -1.991816726e-04f, -1.989798701e-04f, -1.987777390e-04f, -1.985752797e-04f, -1.983724926e-04f, -1.981693780e-04f, -1.979659363e-04f, -1.977621679e-04f,
--1.975580732e-04f, -1.973536525e-04f, -1.971489063e-04f, -1.969438349e-04f, -1.967384386e-04f, -1.965327179e-04f, -1.963266732e-04f, -1.961203048e-04f, -1.959136131e-04f, -1.957065985e-04f,
--1.954992614e-04f, -1.952916021e-04f, -1.950836211e-04f, -1.948753187e-04f, -1.946666953e-04f, -1.944577513e-04f, -1.942484871e-04f, -1.940389030e-04f, -1.938289995e-04f, -1.936187770e-04f,
--1.934082358e-04f, -1.931973763e-04f, -1.929861989e-04f, -1.927747041e-04f, -1.925628921e-04f, -1.923507634e-04f, -1.921383183e-04f, -1.919255574e-04f, -1.917124808e-04f, -1.914990892e-04f,
--1.912853827e-04f, -1.910713619e-04f, -1.908570272e-04f, -1.906423788e-04f, -1.904274173e-04f, -1.902121430e-04f, -1.899965563e-04f, -1.897806576e-04f, -1.895644473e-04f, -1.893479258e-04f,
--1.891310936e-04f, -1.889139509e-04f, -1.886964982e-04f, -1.884787359e-04f, -1.882606644e-04f, -1.880422842e-04f, -1.878235955e-04f, -1.876045988e-04f, -1.873852945e-04f, -1.871656831e-04f,
--1.869457648e-04f, -1.867255402e-04f, -1.865050096e-04f, -1.862841734e-04f, -1.860630320e-04f, -1.858415859e-04f, -1.856198354e-04f, -1.853977810e-04f, -1.851754231e-04f, -1.849527619e-04f,
--1.847297981e-04f, -1.845065320e-04f, -1.842829639e-04f, -1.840590944e-04f, -1.838349237e-04f, -1.836104524e-04f, -1.833856808e-04f, -1.831606094e-04f, -1.829352385e-04f, -1.827095686e-04f,
--1.824836000e-04f, -1.822573333e-04f, -1.820307688e-04f, -1.818039069e-04f, -1.815767480e-04f, -1.813492927e-04f, -1.811215411e-04f, -1.808934939e-04f, -1.806651514e-04f, -1.804365140e-04f,
--1.802075821e-04f, -1.799783562e-04f, -1.797488367e-04f, -1.795190240e-04f, -1.792889185e-04f, -1.790585206e-04f, -1.788278308e-04f, -1.785968495e-04f, -1.783655771e-04f, -1.781340140e-04f,
--1.779021607e-04f, -1.776700175e-04f, -1.774375850e-04f, -1.772048634e-04f, -1.769718533e-04f, -1.767385551e-04f, -1.765049691e-04f, -1.762710959e-04f, -1.760369359e-04f, -1.758024894e-04f,
--1.755677569e-04f, -1.753327388e-04f, -1.750974356e-04f, -1.748618477e-04f, -1.746259755e-04f, -1.743898195e-04f, -1.741533800e-04f, -1.739166575e-04f, -1.736796525e-04f, -1.734423654e-04f,
--1.732047965e-04f, -1.729669464e-04f, -1.727288154e-04f, -1.724904041e-04f, -1.722517128e-04f, -1.720127419e-04f, -1.717734920e-04f, -1.715339634e-04f, -1.712941566e-04f, -1.710540720e-04f,
--1.708137100e-04f, -1.705730711e-04f, -1.703321557e-04f, -1.700909643e-04f, -1.698494973e-04f, -1.696077552e-04f, -1.693657383e-04f, -1.691234471e-04f, -1.688808821e-04f, -1.686380437e-04f,
--1.683949323e-04f, -1.681515484e-04f, -1.679078924e-04f, -1.676639648e-04f, -1.674197659e-04f, -1.671752964e-04f, -1.669305565e-04f, -1.666855467e-04f, -1.664402676e-04f, -1.661947194e-04f,
--1.659489028e-04f, -1.657028180e-04f, -1.654564656e-04f, -1.652098461e-04f, -1.649629597e-04f, -1.647158071e-04f, -1.644683887e-04f, -1.642207048e-04f, -1.639727560e-04f, -1.637245427e-04f,
--1.634760653e-04f, -1.632273243e-04f, -1.629783202e-04f, -1.627290534e-04f, -1.624795243e-04f, -1.622297334e-04f, -1.619796812e-04f, -1.617293681e-04f, -1.614787945e-04f, -1.612279610e-04f,
--1.609768679e-04f, -1.607255157e-04f, -1.604739049e-04f, -1.602220360e-04f, -1.599699093e-04f, -1.597175254e-04f, -1.594648847e-04f, -1.592119876e-04f, -1.589588346e-04f, -1.587054262e-04f,
--1.584517629e-04f, -1.581978450e-04f, -1.579436731e-04f, -1.576892475e-04f, -1.574345688e-04f, -1.571796375e-04f, -1.569244539e-04f, -1.566690186e-04f, -1.564133320e-04f, -1.561573945e-04f,
--1.559012067e-04f, -1.556447689e-04f, -1.553880818e-04f, -1.551311456e-04f, -1.548739609e-04f, -1.546165281e-04f, -1.543588478e-04f, -1.541009203e-04f, -1.538427462e-04f, -1.535843259e-04f,
--1.533256598e-04f, -1.530667485e-04f, -1.528075923e-04f, -1.525481919e-04f, -1.522885476e-04f, -1.520286598e-04f, -1.517685292e-04f, -1.515081561e-04f, -1.512475410e-04f, -1.509866844e-04f,
--1.507255867e-04f, -1.504642484e-04f, -1.502026701e-04f, -1.499408520e-04f, -1.496787949e-04f, -1.494164990e-04f, -1.491539649e-04f, -1.488911930e-04f, -1.486281839e-04f, -1.483649379e-04f,
--1.481014557e-04f, -1.478377375e-04f, -1.475737840e-04f, -1.473095955e-04f, -1.470451727e-04f, -1.467805158e-04f, -1.465156255e-04f, -1.462505022e-04f, -1.459851463e-04f, -1.457195584e-04f,
--1.454537389e-04f, -1.451876883e-04f, -1.449214070e-04f, -1.446548957e-04f, -1.443881546e-04f, -1.441211844e-04f, -1.438539854e-04f, -1.435865583e-04f, -1.433189033e-04f, -1.430510211e-04f,
--1.427829122e-04f, -1.425145769e-04f, -1.422460158e-04f, -1.419772293e-04f, -1.417082180e-04f, -1.414389823e-04f, -1.411695227e-04f, -1.408998397e-04f, -1.406299338e-04f, -1.403598054e-04f,
--1.400894551e-04f, -1.398188832e-04f, -1.395480904e-04f, -1.392770771e-04f, -1.390058438e-04f, -1.387343909e-04f, -1.384627190e-04f, -1.381908285e-04f, -1.379187199e-04f, -1.376463938e-04f,
--1.373738506e-04f, -1.371010907e-04f, -1.368281147e-04f, -1.365549231e-04f, -1.362815163e-04f, -1.360078949e-04f, -1.357340593e-04f, -1.354600101e-04f, -1.351857476e-04f, -1.349112725e-04f,
--1.346365852e-04f, -1.343616861e-04f, -1.340865758e-04f, -1.338112548e-04f, -1.335357236e-04f, -1.332599826e-04f, -1.329840323e-04f, -1.327078733e-04f, -1.324315061e-04f, -1.321549310e-04f,
--1.318781487e-04f, -1.316011596e-04f, -1.313239643e-04f, -1.310465631e-04f, -1.307689566e-04f, -1.304911454e-04f, -1.302131298e-04f, -1.299349104e-04f, -1.296564878e-04f, -1.293778623e-04f,
--1.290990344e-04f, -1.288200048e-04f, -1.285407739e-04f, -1.282613421e-04f, -1.279817100e-04f, -1.277018781e-04f, -1.274218468e-04f, -1.271416168e-04f, -1.268611884e-04f, -1.265805622e-04f,
--1.262997386e-04f, -1.260187183e-04f, -1.257375016e-04f, -1.254560891e-04f, -1.251744813e-04f, -1.248926786e-04f, -1.246106817e-04f, -1.243284909e-04f, -1.240461068e-04f, -1.237635299e-04f,
--1.234807608e-04f, -1.231977998e-04f, -1.229146475e-04f, -1.226313044e-04f, -1.223477711e-04f, -1.220640480e-04f, -1.217801355e-04f, -1.214960344e-04f, -1.212117449e-04f, -1.209272677e-04f,
--1.206426033e-04f, -1.203577521e-04f, -1.200727147e-04f, -1.197874915e-04f, -1.195020831e-04f, -1.192164900e-04f, -1.189307127e-04f, -1.186447517e-04f, -1.183586076e-04f, -1.180722807e-04f,
--1.177857717e-04f, -1.174990810e-04f, -1.172122091e-04f, -1.169251566e-04f, -1.166379240e-04f, -1.163505117e-04f, -1.160629204e-04f, -1.157751504e-04f, -1.154872024e-04f, -1.151990768e-04f,
--1.149107741e-04f, -1.146222949e-04f, -1.143336396e-04f, -1.140448088e-04f, -1.137558030e-04f, -1.134666227e-04f, -1.131772684e-04f, -1.128877406e-04f, -1.125980399e-04f, -1.123081667e-04f,
--1.120181216e-04f, -1.117279051e-04f, -1.114375177e-04f, -1.111469599e-04f, -1.108562322e-04f, -1.105653352e-04f, -1.102742694e-04f, -1.099830352e-04f, -1.096916332e-04f, -1.094000639e-04f,
--1.091083279e-04f, -1.088164256e-04f, -1.085243576e-04f, -1.082321243e-04f, -1.079397264e-04f, -1.076471643e-04f, -1.073544385e-04f, -1.070615496e-04f, -1.067684980e-04f, -1.064752844e-04f,
--1.061819092e-04f, -1.058883729e-04f, -1.055946760e-04f, -1.053008191e-04f, -1.050068028e-04f, -1.047126274e-04f, -1.044182936e-04f, -1.041238018e-04f, -1.038291527e-04f, -1.035343466e-04f,
--1.032393841e-04f, -1.029442658e-04f, -1.026489922e-04f, -1.023535637e-04f, -1.020579810e-04f, -1.017622445e-04f, -1.014663548e-04f, -1.011703123e-04f, -1.008741177e-04f, -1.005777713e-04f,
--1.002812739e-04f, -9.998462580e-05f, -9.968782762e-05f, -9.939087988e-05f, -9.909378309e-05f, -9.879653778e-05f, -9.849914448e-05f, -9.820160371e-05f, -9.790391599e-05f, -9.760608186e-05f,
--9.730810184e-05f, -9.700997645e-05f, -9.671170623e-05f, -9.641329169e-05f, -9.611473338e-05f, -9.581603180e-05f, -9.551718751e-05f, -9.521820101e-05f, -9.491907284e-05f, -9.461980352e-05f,
--9.432039359e-05f, -9.402084357e-05f, -9.372115400e-05f, -9.342132540e-05f, -9.312135830e-05f, -9.282125322e-05f, -9.252101071e-05f, -9.222063129e-05f, -9.192011548e-05f, -9.161946383e-05f,
--9.131867686e-05f, -9.101775509e-05f, -9.071669907e-05f, -9.041550932e-05f, -9.011418638e-05f, -8.981273077e-05f, -8.951114302e-05f, -8.920942368e-05f, -8.890757327e-05f, -8.860559231e-05f,
--8.830348136e-05f, -8.800124093e-05f, -8.769887156e-05f, -8.739637378e-05f, -8.709374813e-05f, -8.679099514e-05f, -8.648811534e-05f, -8.618510927e-05f, -8.588197746e-05f, -8.557872044e-05f,
--8.527533875e-05f, -8.497183292e-05f, -8.466820349e-05f, -8.436445099e-05f, -8.406057595e-05f, -8.375657892e-05f, -8.345246042e-05f, -8.314822100e-05f, -8.284386118e-05f, -8.253938151e-05f,
--8.223478251e-05f, -8.193006473e-05f, -8.162522870e-05f, -8.132027495e-05f, -8.101520403e-05f, -8.071001647e-05f, -8.040471281e-05f, -8.009929358e-05f, -7.979375932e-05f, -7.948811057e-05f,
--7.918234786e-05f, -7.887647174e-05f, -7.857048274e-05f, -7.826438140e-05f, -7.795816826e-05f, -7.765184385e-05f, -7.734540871e-05f, -7.703886339e-05f, -7.673220841e-05f, -7.642544433e-05f,
--7.611857168e-05f, -7.581159099e-05f, -7.550450281e-05f, -7.519730767e-05f, -7.489000612e-05f, -7.458259870e-05f, -7.427508594e-05f, -7.396746839e-05f, -7.365974658e-05f, -7.335192105e-05f,
--7.304399236e-05f, -7.273596102e-05f, -7.242782760e-05f, -7.211959262e-05f, -7.181125663e-05f, -7.150282018e-05f, -7.119428379e-05f, -7.088564801e-05f, -7.057691339e-05f, -7.026808046e-05f,
--6.995914977e-05f, -6.965012186e-05f, -6.934099727e-05f, -6.903177654e-05f, -6.872246021e-05f, -6.841304884e-05f, -6.810354295e-05f, -6.779394310e-05f, -6.748424982e-05f, -6.717446365e-05f,
--6.686458515e-05f, -6.655461485e-05f, -6.624455330e-05f, -6.593440104e-05f, -6.562415861e-05f, -6.531382656e-05f, -6.500340543e-05f, -6.469289576e-05f, -6.438229810e-05f, -6.407161300e-05f,
--6.376084099e-05f, -6.344998262e-05f, -6.313903843e-05f, -6.282800898e-05f, -6.251689479e-05f, -6.220569643e-05f, -6.189441443e-05f, -6.158304933e-05f, -6.127160169e-05f, -6.096007205e-05f,
--6.064846095e-05f, -6.033676893e-05f, -6.002499655e-05f, -5.971314435e-05f, -5.940121287e-05f, -5.908920266e-05f, -5.877711427e-05f, -5.846494824e-05f, -5.815270511e-05f, -5.784038544e-05f,
--5.752798977e-05f, -5.721551864e-05f, -5.690297260e-05f, -5.659035220e-05f, -5.627765799e-05f, -5.596489050e-05f, -5.565205029e-05f, -5.533913791e-05f, -5.502615390e-05f, -5.471309880e-05f,
--5.439997317e-05f, -5.408677755e-05f, -5.377351249e-05f, -5.346017853e-05f, -5.314677623e-05f, -5.283330612e-05f, -5.251976876e-05f, -5.220616470e-05f, -5.189249448e-05f, -5.157875865e-05f,
--5.126495776e-05f, -5.095109235e-05f, -5.063716298e-05f, -5.032317019e-05f, -5.000911452e-05f, -4.969499654e-05f, -4.938081677e-05f, -4.906657579e-05f, -4.875227412e-05f, -4.843791232e-05f,
--4.812349094e-05f, -4.780901053e-05f, -4.749447163e-05f, -4.717987479e-05f, -4.686522057e-05f, -4.655050950e-05f, -4.623574215e-05f, -4.592091905e-05f, -4.560604076e-05f, -4.529110783e-05f,
--4.497612080e-05f, -4.466108022e-05f, -4.434598664e-05f, -4.403084062e-05f, -4.371564270e-05f, -4.340039342e-05f, -4.308509335e-05f, -4.276974302e-05f, -4.245434299e-05f, -4.213889381e-05f,
--4.182339602e-05f, -4.150785018e-05f, -4.119225683e-05f, -4.087661653e-05f, -4.056092982e-05f, -4.024519726e-05f, -3.992941938e-05f, -3.961359675e-05f, -3.929772991e-05f, -3.898181942e-05f,
--3.866586581e-05f, -3.834986965e-05f, -3.803383148e-05f, -3.771775185e-05f, -3.740163131e-05f, -3.708547041e-05f, -3.676926970e-05f, -3.645302974e-05f, -3.613675106e-05f, -3.582043422e-05f,
--3.550407978e-05f, -3.518768827e-05f, -3.487126026e-05f, -3.455479629e-05f, -3.423829691e-05f, -3.392176266e-05f, -3.360519412e-05f, -3.328859181e-05f, -3.297195629e-05f, -3.265528812e-05f,
--3.233858783e-05f, -3.202185599e-05f, -3.170509314e-05f, -3.138829984e-05f, -3.107147663e-05f, -3.075462406e-05f, -3.043774268e-05f, -3.012083305e-05f, -2.980389571e-05f, -2.948693121e-05f,
--2.916994011e-05f, -2.885292296e-05f, -2.853588030e-05f, -2.821881269e-05f, -2.790172067e-05f, -2.758460480e-05f, -2.726746562e-05f, -2.695030369e-05f, -2.663311956e-05f, -2.631591377e-05f,
--2.599868688e-05f, -2.568143944e-05f, -2.536417200e-05f, -2.504688511e-05f, -2.472957931e-05f, -2.441225517e-05f, -2.409491322e-05f, -2.377755402e-05f, -2.346017813e-05f, -2.314278608e-05f,
--2.282537843e-05f, -2.250795573e-05f, -2.219051853e-05f, -2.187306739e-05f, -2.155560284e-05f, -2.123812544e-05f, -2.092063575e-05f, -2.060313430e-05f, -2.028562166e-05f, -1.996809836e-05f,
--1.965056497e-05f, -1.933302203e-05f, -1.901547009e-05f, -1.869790970e-05f, -1.838034141e-05f, -1.806276577e-05f, -1.774518333e-05f, -1.742759464e-05f, -1.711000025e-05f, -1.679240070e-05f,
--1.647479656e-05f, -1.615718837e-05f, -1.583957668e-05f, -1.552196203e-05f, -1.520434498e-05f, -1.488672608e-05f, -1.456910587e-05f, -1.425148492e-05f, -1.393386375e-05f, -1.361624293e-05f,
--1.329862301e-05f, -1.298100453e-05f, -1.266338804e-05f, -1.234577409e-05f, -1.202816324e-05f, -1.171055602e-05f, -1.139295299e-05f, -1.107535470e-05f, -1.075776170e-05f, -1.044017454e-05f,
--1.012259375e-05f, -9.805019906e-06f, -9.487453540e-06f, -9.169895205e-06f, -8.852345449e-06f, -8.534804822e-06f, -8.217273870e-06f, -7.899753144e-06f, -7.582243191e-06f, -7.264744560e-06f,
--6.947257799e-06f, -6.629783455e-06f, -6.312322078e-06f, -5.994874216e-06f, -5.677440415e-06f, -5.360021225e-06f, -5.042617193e-06f, -4.725228866e-06f, -4.407856794e-06f, -4.090501522e-06f,
--3.773163600e-06f, -3.455843574e-06f, -3.138541991e-06f, -2.821259400e-06f, -2.503996348e-06f, -2.186753381e-06f, -1.869531047e-06f, -1.552329893e-06f, -1.235150465e-06f, -9.179933119e-07f,
--6.008589791e-07f, -2.837480136e-07f, 3.333903788e-08f, 3.504016287e-07f, 6.674392125e-07f, 9.844512428e-07f, 1.301437173e-06f, 1.618396458e-06f, 1.935328550e-06f, 2.252232904e-06f,
-2.569108974e-06f, 2.885956213e-06f, 3.202774077e-06f, 3.519562019e-06f, 3.836319494e-06f, 4.153045956e-06f, 4.469740861e-06f, 4.786403662e-06f, 5.103033814e-06f, 5.419630772e-06f,
-5.736193992e-06f, 6.052722929e-06f, 6.369217036e-06f, 6.685675771e-06f, 7.002098588e-06f, 7.318484942e-06f, 7.634834290e-06f, 7.951146087e-06f, 8.267419789e-06f, 8.583654851e-06f,
-8.899850731e-06f, 9.216006883e-06f, 9.532122764e-06f, 9.848197831e-06f, 1.016423154e-05f, 1.048022335e-05f, 1.079617271e-05f, 1.111207909e-05f, 1.142794193e-05f, 1.174376070e-05f,
-1.205953485e-05f, 1.237526385e-05f, 1.269094714e-05f, 1.300658419e-05f, 1.332217445e-05f, 1.363771738e-05f, 1.395321244e-05f, 1.426865909e-05f, 1.458405678e-05f, 1.489940498e-05f,
-1.521470313e-05f, 1.552995071e-05f, 1.584514717e-05f, 1.616029196e-05f, 1.647538455e-05f, 1.679042440e-05f, 1.710541096e-05f, 1.742034369e-05f, 1.773522206e-05f, 1.805004553e-05f,
-1.836481354e-05f, 1.867952557e-05f, 1.899418107e-05f, 1.930877950e-05f, 1.962332033e-05f, 1.993780301e-05f, 2.025222700e-05f, 2.056659177e-05f, 2.088089677e-05f, 2.119514148e-05f,
-2.150932533e-05f, 2.182344781e-05f, 2.213750837e-05f, 2.245150647e-05f, 2.276544158e-05f, 2.307931315e-05f, 2.339312065e-05f, 2.370686353e-05f, 2.402054127e-05f, 2.433415333e-05f,
-2.464769916e-05f, 2.496117824e-05f, 2.527459001e-05f, 2.558793396e-05f, 2.590120953e-05f, 2.621441619e-05f, 2.652755342e-05f, 2.684062066e-05f, 2.715361739e-05f, 2.746654306e-05f,
-2.777939715e-05f, 2.809217911e-05f, 2.840488842e-05f, 2.871752453e-05f, 2.903008692e-05f, 2.934257504e-05f, 2.965498836e-05f, 2.996732635e-05f, 3.027958848e-05f, 3.059177420e-05f,
-3.090388298e-05f, 3.121591430e-05f, 3.152786761e-05f, 3.183974239e-05f, 3.215153809e-05f, 3.246325420e-05f, 3.277489016e-05f, 3.308644546e-05f, 3.339791956e-05f, 3.370931192e-05f,
-3.402062201e-05f, 3.433184931e-05f, 3.464299328e-05f, 3.495405338e-05f, 3.526502909e-05f, 3.557591988e-05f, 3.588672521e-05f, 3.619744455e-05f, 3.650807737e-05f, 3.681862315e-05f,
-3.712908135e-05f, 3.743945143e-05f, 3.774973288e-05f, 3.805992516e-05f, 3.837002774e-05f, 3.868004010e-05f, 3.898996169e-05f, 3.929979200e-05f, 3.960953049e-05f, 3.991917664e-05f,
-4.022872992e-05f, 4.053818980e-05f, 4.084755575e-05f, 4.115682724e-05f, 4.146600375e-05f, 4.177508475e-05f, 4.208406971e-05f, 4.239295810e-05f, 4.270174940e-05f, 4.301044308e-05f,
-4.331903862e-05f, 4.362753549e-05f, 4.393593315e-05f, 4.424423110e-05f, 4.455242879e-05f, 4.486052571e-05f, 4.516852134e-05f, 4.547641513e-05f, 4.578420658e-05f, 4.609189516e-05f,
-4.639948034e-05f, 4.670696159e-05f, 4.701433841e-05f, 4.732161025e-05f, 4.762877660e-05f, 4.793583693e-05f, 4.824279073e-05f, 4.854963747e-05f, 4.885637662e-05f, 4.916300767e-05f,
-4.946953008e-05f, 4.977594335e-05f, 5.008224695e-05f, 5.038844036e-05f, 5.069452305e-05f, 5.100049451e-05f, 5.130635421e-05f, 5.161210164e-05f, 5.191773628e-05f, 5.222325759e-05f,
-5.252866508e-05f, 5.283395820e-05f, 5.313913646e-05f, 5.344419932e-05f, 5.374914627e-05f, 5.405397679e-05f, 5.435869036e-05f, 5.466328647e-05f, 5.496776459e-05f, 5.527212421e-05f,
-5.557636481e-05f, 5.588048588e-05f, 5.618448689e-05f, 5.648836733e-05f, 5.679212669e-05f, 5.709576445e-05f, 5.739928009e-05f, 5.770267310e-05f, 5.800594296e-05f, 5.830908915e-05f,
-5.861211117e-05f, 5.891500850e-05f, 5.921778062e-05f, 5.952042702e-05f, 5.982294718e-05f, 6.012534060e-05f, 6.042760675e-05f, 6.072974513e-05f, 6.103175523e-05f, 6.133363652e-05f,
-6.163538851e-05f, 6.193701067e-05f, 6.223850249e-05f, 6.253986347e-05f, 6.284109309e-05f, 6.314219084e-05f, 6.344315621e-05f, 6.374398870e-05f, 6.404468778e-05f, 6.434525296e-05f,
-6.464568371e-05f, 6.494597954e-05f, 6.524613993e-05f, 6.554616438e-05f, 6.584605237e-05f, 6.614580339e-05f, 6.644541695e-05f, 6.674489253e-05f, 6.704422963e-05f, 6.734342773e-05f,
-6.764248633e-05f, 6.794140493e-05f, 6.824018302e-05f, 6.853882008e-05f, 6.883731563e-05f, 6.913566915e-05f, 6.943388013e-05f, 6.973194807e-05f, 7.002987247e-05f, 7.032765283e-05f,
-7.062528863e-05f, 7.092277938e-05f, 7.122012457e-05f, 7.151732370e-05f, 7.181437626e-05f, 7.211128176e-05f, 7.240803969e-05f, 7.270464955e-05f, 7.300111084e-05f, 7.329742305e-05f,
-7.359358569e-05f, 7.388959825e-05f, 7.418546024e-05f, 7.448117115e-05f, 7.477673049e-05f, 7.507213775e-05f, 7.536739244e-05f, 7.566249406e-05f, 7.595744210e-05f, 7.625223607e-05f,
-7.654687548e-05f, 7.684135982e-05f, 7.713568860e-05f, 7.742986131e-05f, 7.772387748e-05f, 7.801773658e-05f, 7.831143814e-05f, 7.860498165e-05f, 7.889836662e-05f, 7.919159256e-05f,
-7.948465897e-05f, 7.977756535e-05f, 8.007031121e-05f, 8.036289605e-05f, 8.065531939e-05f, 8.094758073e-05f, 8.123967957e-05f, 8.153161543e-05f, 8.182338781e-05f, 8.211499622e-05f,
-8.240644017e-05f, 8.269771916e-05f, 8.298883271e-05f, 8.327978032e-05f, 8.357056151e-05f, 8.386117578e-05f, 8.415162265e-05f, 8.444190162e-05f, 8.473201220e-05f, 8.502195391e-05f,
-8.531172626e-05f, 8.560132876e-05f, 8.589076093e-05f, 8.618002227e-05f, 8.646911229e-05f, 8.675803052e-05f, 8.704677646e-05f, 8.733534963e-05f, 8.762374954e-05f, 8.791197571e-05f,
-8.820002766e-05f, 8.848790489e-05f, 8.877560692e-05f, 8.906313327e-05f, 8.935048346e-05f, 8.963765699e-05f, 8.992465340e-05f, 9.021147219e-05f, 9.049811289e-05f, 9.078457501e-05f,
-9.107085807e-05f, 9.135696158e-05f, 9.164288508e-05f, 9.192862807e-05f, 9.221419007e-05f, 9.249957062e-05f, 9.278476922e-05f, 9.306978540e-05f, 9.335461867e-05f, 9.363926857e-05f,
-9.392373461e-05f, 9.420801632e-05f, 9.449211321e-05f, 9.477602481e-05f, 9.505975064e-05f, 9.534329023e-05f, 9.562664310e-05f, 9.590980878e-05f, 9.619278678e-05f, 9.647557665e-05f,
-9.675817789e-05f, 9.704059003e-05f, 9.732281261e-05f, 9.760484515e-05f, 9.788668717e-05f, 9.816833820e-05f, 9.844979778e-05f, 9.873106542e-05f, 9.901214066e-05f, 9.929302302e-05f,
-9.957371204e-05f, 9.985420724e-05f, 1.001345082e-04f, 1.004146143e-04f, 1.006945252e-04f, 1.009742405e-04f, 1.012537596e-04f, 1.015330820e-04f, 1.018122073e-04f, 1.020911351e-04f,
-1.023698649e-04f, 1.026483961e-04f, 1.029267284e-04f, 1.032048612e-04f, 1.034827941e-04f, 1.037605267e-04f, 1.040380585e-04f, 1.043153889e-04f, 1.045925176e-04f, 1.048694441e-04f,
-1.051461678e-04f, 1.054226885e-04f, 1.056990055e-04f, 1.059751185e-04f, 1.062510269e-04f, 1.065267303e-04f, 1.068022282e-04f, 1.070775203e-04f, 1.073526060e-04f, 1.076274848e-04f,
-1.079021563e-04f, 1.081766201e-04f, 1.084508756e-04f, 1.087249225e-04f, 1.089987603e-04f, 1.092723884e-04f, 1.095458065e-04f, 1.098190141e-04f, 1.100920108e-04f, 1.103647960e-04f,
-1.106373694e-04f, 1.109097304e-04f, 1.111818787e-04f, 1.114538137e-04f, 1.117255351e-04f, 1.119970423e-04f, 1.122683349e-04f, 1.125394124e-04f, 1.128102745e-04f, 1.130809205e-04f,
-1.133513502e-04f, 1.136215631e-04f, 1.138915586e-04f, 1.141613364e-04f, 1.144308960e-04f, 1.147002369e-04f, 1.149693587e-04f, 1.152382610e-04f, 1.155069432e-04f, 1.157754051e-04f,
-1.160436460e-04f, 1.163116656e-04f, 1.165794634e-04f, 1.168470389e-04f, 1.171143918e-04f, 1.173815215e-04f, 1.176484277e-04f, 1.179151099e-04f, 1.181815676e-04f, 1.184478004e-04f,
-1.187138079e-04f, 1.189795895e-04f, 1.192451450e-04f, 1.195104737e-04f, 1.197755754e-04f, 1.200404495e-04f, 1.203050956e-04f, 1.205695133e-04f, 1.208337021e-04f, 1.210976615e-04f,
-1.213613913e-04f, 1.216248908e-04f, 1.218881597e-04f, 1.221511976e-04f, 1.224140039e-04f, 1.226765783e-04f, 1.229389203e-04f, 1.232010295e-04f, 1.234629055e-04f, 1.237245477e-04f,
-1.239859559e-04f, 1.242471295e-04f, 1.245080681e-04f, 1.247687713e-04f, 1.250292387e-04f, 1.252894697e-04f, 1.255494641e-04f, 1.258092213e-04f, 1.260687409e-04f, 1.263280225e-04f,
-1.265870657e-04f, 1.268458700e-04f, 1.271044350e-04f, 1.273627603e-04f, 1.276208455e-04f, 1.278786900e-04f, 1.281362936e-04f, 1.283936557e-04f, 1.286507759e-04f, 1.289076539e-04f,
-1.291642891e-04f, 1.294206812e-04f, 1.296768297e-04f, 1.299327343e-04f, 1.301883944e-04f, 1.304438097e-04f, 1.306989797e-04f, 1.309539041e-04f, 1.312085824e-04f, 1.314630141e-04f,
-1.317171989e-04f, 1.319711363e-04f, 1.322248259e-04f, 1.324782674e-04f, 1.327314602e-04f, 1.329844039e-04f, 1.332370982e-04f, 1.334895426e-04f, 1.337417367e-04f, 1.339936802e-04f,
-1.342453724e-04f, 1.344968132e-04f, 1.347480019e-04f, 1.349989383e-04f, 1.352496219e-04f, 1.355000523e-04f, 1.357502291e-04f, 1.360001518e-04f, 1.362498201e-04f, 1.364992336e-04f,
-1.367483917e-04f, 1.369972942e-04f, 1.372459406e-04f, 1.374943305e-04f, 1.377424635e-04f, 1.379903392e-04f, 1.382379571e-04f, 1.384853169e-04f, 1.387324182e-04f, 1.389792605e-04f,
-1.392258434e-04f, 1.394721666e-04f, 1.397182296e-04f, 1.399640320e-04f, 1.402095735e-04f, 1.404548535e-04f, 1.406998718e-04f, 1.409446279e-04f, 1.411891214e-04f, 1.414333518e-04f,
-1.416773189e-04f, 1.419210222e-04f, 1.421644612e-04f, 1.424076357e-04f, 1.426505451e-04f, 1.428931892e-04f, 1.431355674e-04f, 1.433776795e-04f, 1.436195249e-04f, 1.438611033e-04f,
-1.441024144e-04f, 1.443434576e-04f, 1.445842327e-04f, 1.448247391e-04f, 1.450649766e-04f, 1.453049447e-04f, 1.455446431e-04f, 1.457840713e-04f, 1.460232289e-04f, 1.462621156e-04f,
-1.465007309e-04f, 1.467390745e-04f, 1.469771460e-04f, 1.472149449e-04f, 1.474524710e-04f, 1.476897237e-04f, 1.479267028e-04f, 1.481634078e-04f, 1.483998383e-04f, 1.486359940e-04f,
-1.488718745e-04f, 1.491074793e-04f, 1.493428081e-04f, 1.495778605e-04f, 1.498126362e-04f, 1.500471346e-04f, 1.502813556e-04f, 1.505152986e-04f, 1.507489632e-04f, 1.509823492e-04f,
-1.512154561e-04f, 1.514482835e-04f, 1.516808311e-04f, 1.519130985e-04f, 1.521450853e-04f, 1.523767910e-04f, 1.526082154e-04f, 1.528393581e-04f, 1.530702187e-04f, 1.533007967e-04f,
-1.535310919e-04f, 1.537611038e-04f, 1.539908321e-04f, 1.542202764e-04f, 1.544494364e-04f, 1.546783115e-04f, 1.549069016e-04f, 1.551352061e-04f, 1.553632248e-04f, 1.555909572e-04f,
-1.558184030e-04f, 1.560455619e-04f, 1.562724334e-04f, 1.564990171e-04f, 1.567253127e-04f, 1.569513199e-04f, 1.571770383e-04f, 1.574024674e-04f, 1.576276070e-04f, 1.578524566e-04f,
-1.580770160e-04f, 1.583012846e-04f, 1.585252622e-04f, 1.587489485e-04f, 1.589723429e-04f, 1.591954453e-04f, 1.594182551e-04f, 1.596407721e-04f, 1.598629958e-04f, 1.600849260e-04f,
-1.603065623e-04f, 1.605279042e-04f, 1.607489515e-04f, 1.609697038e-04f, 1.611901606e-04f, 1.614103218e-04f, 1.616301868e-04f, 1.618497554e-04f, 1.620690272e-04f, 1.622880018e-04f,
-1.625066789e-04f, 1.627250582e-04f, 1.629431392e-04f, 1.631609216e-04f, 1.633784050e-04f, 1.635955892e-04f, 1.638124737e-04f, 1.640290582e-04f, 1.642453424e-04f, 1.644613259e-04f,
-1.646770083e-04f, 1.648923893e-04f, 1.651074686e-04f, 1.653222458e-04f, 1.655367205e-04f, 1.657508925e-04f, 1.659647613e-04f, 1.661783266e-04f, 1.663915881e-04f, 1.666045454e-04f,
-1.668171981e-04f, 1.670295461e-04f, 1.672415888e-04f, 1.674533259e-04f, 1.676647571e-04f, 1.678758822e-04f, 1.680867006e-04f, 1.682972121e-04f, 1.685074163e-04f, 1.687173130e-04f,
-1.689269017e-04f, 1.691361821e-04f, 1.693451539e-04f, 1.695538167e-04f, 1.697621703e-04f, 1.699702142e-04f, 1.701779482e-04f, 1.703853718e-04f, 1.705924849e-04f, 1.707992869e-04f,
-1.710057777e-04f, 1.712119568e-04f, 1.714178239e-04f, 1.716233788e-04f, 1.718286210e-04f, 1.720335503e-04f, 1.722381662e-04f, 1.724424686e-04f, 1.726464569e-04f, 1.728501310e-04f,
-1.730534905e-04f, 1.732565351e-04f, 1.734592644e-04f, 1.736616781e-04f, 1.738637759e-04f, 1.740655574e-04f, 1.742670224e-04f, 1.744681705e-04f, 1.746690014e-04f, 1.748695148e-04f,
-1.750697103e-04f, 1.752695876e-04f, 1.754691464e-04f, 1.756683864e-04f, 1.758673073e-04f, 1.760659087e-04f, 1.762641903e-04f, 1.764621518e-04f, 1.766597929e-04f, 1.768571133e-04f,
-1.770541126e-04f, 1.772507906e-04f, 1.774471469e-04f, 1.776431812e-04f, 1.778388931e-04f, 1.780342825e-04f, 1.782293489e-04f, 1.784240921e-04f, 1.786185117e-04f, 1.788126075e-04f,
-1.790063791e-04f, 1.791998261e-04f, 1.793929484e-04f, 1.795857456e-04f, 1.797782173e-04f, 1.799703634e-04f, 1.801621833e-04f, 1.803536770e-04f, 1.805448440e-04f, 1.807356841e-04f,
-1.809261969e-04f, 1.811163821e-04f, 1.813062395e-04f, 1.814957687e-04f, 1.816849694e-04f, 1.818738414e-04f, 1.820623843e-04f, 1.822505978e-04f, 1.824384817e-04f, 1.826260356e-04f,
-1.828132592e-04f, 1.830001522e-04f, 1.831867144e-04f, 1.833729454e-04f, 1.835588449e-04f, 1.837444127e-04f, 1.839296485e-04f, 1.841145519e-04f, 1.842991226e-04f, 1.844833604e-04f,
-1.846672650e-04f, 1.848508361e-04f, 1.850340733e-04f, 1.852169765e-04f, 1.853995453e-04f, 1.855817793e-04f, 1.857636784e-04f, 1.859452423e-04f, 1.861264706e-04f, 1.863073631e-04f,
-1.864879194e-04f, 1.866681393e-04f, 1.868480225e-04f, 1.870275688e-04f, 1.872067778e-04f, 1.873856492e-04f, 1.875641828e-04f, 1.877423783e-04f, 1.879202354e-04f, 1.880977538e-04f,
-1.882749333e-04f, 1.884517735e-04f, 1.886282742e-04f, 1.888044351e-04f, 1.889802559e-04f, 1.891557364e-04f, 1.893308762e-04f, 1.895056751e-04f, 1.896801329e-04f, 1.898542492e-04f,
-1.900280237e-04f, 1.902014562e-04f, 1.903745465e-04f, 1.905472942e-04f, 1.907196991e-04f, 1.908917608e-04f, 1.910634792e-04f, 1.912348540e-04f, 1.914058849e-04f, 1.915765715e-04f,
-1.917469138e-04f, 1.919169113e-04f, 1.920865638e-04f, 1.922558711e-04f, 1.924248328e-04f, 1.925934488e-04f, 1.927617187e-04f, 1.929296424e-04f, 1.930972194e-04f, 1.932644496e-04f,
-1.934313327e-04f, 1.935978685e-04f, 1.937640566e-04f, 1.939298968e-04f, 1.940953889e-04f, 1.942605326e-04f, 1.944253276e-04f, 1.945897737e-04f, 1.947538707e-04f, 1.949176181e-04f,
-1.950810159e-04f, 1.952440638e-04f, 1.954067615e-04f, 1.955691087e-04f, 1.957311052e-04f, 1.958927507e-04f, 1.960540450e-04f, 1.962149879e-04f, 1.963755790e-04f, 1.965358181e-04f,
-1.966957051e-04f, 1.968552396e-04f, 1.970144213e-04f, 1.971732501e-04f, 1.973317257e-04f, 1.974898478e-04f, 1.976476163e-04f, 1.978050307e-04f, 1.979620910e-04f, 1.981187969e-04f,
-1.982751480e-04f, 1.984311442e-04f, 1.985867853e-04f, 1.987420710e-04f, 1.988970010e-04f, 1.990515751e-04f, 1.992057931e-04f, 1.993596547e-04f, 1.995131597e-04f, 1.996663078e-04f,
-1.998190989e-04f, 1.999715326e-04f, 2.001236088e-04f, 2.002753272e-04f, 2.004266876e-04f, 2.005776897e-04f, 2.007283333e-04f, 2.008786182e-04f, 2.010285441e-04f, 2.011781109e-04f,
-2.013273182e-04f, 2.014761658e-04f, 2.016246536e-04f, 2.017727813e-04f, 2.019205486e-04f, 2.020679554e-04f, 2.022150013e-04f, 2.023616863e-04f, 2.025080100e-04f, 2.026539722e-04f,
-2.027995727e-04f, 2.029448114e-04f, 2.030896878e-04f, 2.032342019e-04f, 2.033783535e-04f, 2.035221422e-04f, 2.036655678e-04f, 2.038086303e-04f, 2.039513292e-04f, 2.040936645e-04f,
-2.042356359e-04f, 2.043772431e-04f, 2.045184860e-04f, 2.046593644e-04f, 2.047998779e-04f, 2.049400265e-04f, 2.050798099e-04f, 2.052192279e-04f, 2.053582802e-04f, 2.054969667e-04f,
-2.056352872e-04f, 2.057732414e-04f, 2.059108291e-04f, 2.060480502e-04f, 2.061849043e-04f, 2.063213914e-04f, 2.064575111e-04f, 2.065932634e-04f, 2.067286479e-04f, 2.068636645e-04f,
-2.069983129e-04f, 2.071325930e-04f, 2.072665046e-04f, 2.074000475e-04f, 2.075332214e-04f, 2.076660261e-04f, 2.077984615e-04f, 2.079305274e-04f, 2.080622235e-04f, 2.081935497e-04f,
-2.083245057e-04f, 2.084550913e-04f, 2.085853065e-04f, 2.087151509e-04f, 2.088446243e-04f, 2.089737267e-04f, 2.091024577e-04f, 2.092308172e-04f, 2.093588050e-04f, 2.094864209e-04f,
-2.096136646e-04f, 2.097405361e-04f, 2.098670352e-04f, 2.099931615e-04f, 2.101189150e-04f, 2.102442955e-04f, 2.103693027e-04f, 2.104939365e-04f, 2.106181967e-04f, 2.107420831e-04f,
-2.108655956e-04f, 2.109887338e-04f, 2.111114978e-04f, 2.112338872e-04f, 2.113559018e-04f, 2.114775416e-04f, 2.115988063e-04f, 2.117196958e-04f, 2.118402098e-04f, 2.119603482e-04f,
-2.120801108e-04f, 2.121994974e-04f, 2.123185079e-04f, 2.124371421e-04f, 2.125553997e-04f, 2.126732807e-04f, 2.127907848e-04f, 2.129079119e-04f, 2.130246618e-04f, 2.131410343e-04f,
-2.132570293e-04f, 2.133726465e-04f, 2.134878859e-04f, 2.136027472e-04f, 2.137172303e-04f, 2.138313350e-04f, 2.139450611e-04f, 2.140584085e-04f, 2.141713770e-04f, 2.142839664e-04f,
-2.143961766e-04f, 2.145080074e-04f, 2.146194586e-04f, 2.147305302e-04f, 2.148412218e-04f, 2.149515334e-04f, 2.150614648e-04f, 2.151710158e-04f, 2.152801863e-04f, 2.153889761e-04f,
-2.154973850e-04f, 2.156054129e-04f, 2.157130597e-04f, 2.158203252e-04f, 2.159272092e-04f, 2.160337115e-04f, 2.161398321e-04f, 2.162455707e-04f, 2.163509273e-04f, 2.164559016e-04f,
-2.165604935e-04f, 2.166647028e-04f, 2.167685294e-04f, 2.168719732e-04f, 2.169750340e-04f, 2.170777117e-04f, 2.171800061e-04f, 2.172819170e-04f, 2.173834443e-04f, 2.174845879e-04f,
-2.175853476e-04f, 2.176857233e-04f, 2.177857148e-04f, 2.178853220e-04f, 2.179845448e-04f, 2.180833829e-04f, 2.181818364e-04f, 2.182799049e-04f, 2.183775884e-04f, 2.184748868e-04f,
-2.185717999e-04f, 2.186683275e-04f, 2.187644696e-04f, 2.188602259e-04f, 2.189555965e-04f, 2.190505810e-04f, 2.191451794e-04f, 2.192393916e-04f, 2.193332174e-04f, 2.194266567e-04f,
-2.195197094e-04f, 2.196123752e-04f, 2.197046542e-04f, 2.197965462e-04f, 2.198880509e-04f, 2.199791684e-04f, 2.200698985e-04f, 2.201602410e-04f, 2.202501959e-04f, 2.203397629e-04f,
-2.204289421e-04f, 2.205177331e-04f, 2.206061361e-04f, 2.206941507e-04f, 2.207817769e-04f, 2.208690146e-04f, 2.209558636e-04f, 2.210423238e-04f, 2.211283951e-04f, 2.212140775e-04f,
-2.212993707e-04f, 2.213842746e-04f, 2.214687892e-04f, 2.215529142e-04f, 2.216366497e-04f, 2.217199955e-04f, 2.218029514e-04f, 2.218855174e-04f, 2.219676934e-04f, 2.220494792e-04f,
-2.221308747e-04f, 2.222118798e-04f, 2.222924944e-04f, 2.223727184e-04f, 2.224525517e-04f, 2.225319942e-04f, 2.226110457e-04f, 2.226897062e-04f, 2.227679756e-04f, 2.228458537e-04f,
-2.229233405e-04f, 2.230004358e-04f, 2.230771395e-04f, 2.231534516e-04f, 2.232293720e-04f, 2.233049004e-04f, 2.233800369e-04f, 2.234547813e-04f, 2.235291336e-04f, 2.236030936e-04f,
-2.236766613e-04f, 2.237498365e-04f, 2.238226191e-04f, 2.238950091e-04f, 2.239670064e-04f, 2.240386108e-04f, 2.241098223e-04f, 2.241806407e-04f, 2.242510661e-04f, 2.243210982e-04f,
-2.243907371e-04f, 2.244599826e-04f, 2.245288345e-04f, 2.245972930e-04f, 2.246653577e-04f, 2.247330288e-04f, 2.248003060e-04f, 2.248671893e-04f, 2.249336786e-04f, 2.249997738e-04f,
-2.250654748e-04f, 2.251307816e-04f, 2.251956941e-04f, 2.252602122e-04f, 2.253243357e-04f, 2.253880647e-04f, 2.254513991e-04f, 2.255143387e-04f, 2.255768835e-04f, 2.256390334e-04f,
-2.257007883e-04f, 2.257621482e-04f, 2.258231130e-04f, 2.258836826e-04f, 2.259438569e-04f, 2.260036359e-04f, 2.260630194e-04f, 2.261220075e-04f, 2.261806000e-04f, 2.262387969e-04f,
-2.262965981e-04f, 2.263540036e-04f, 2.264110132e-04f, 2.264676269e-04f, 2.265238446e-04f, 2.265796663e-04f, 2.266350919e-04f, 2.266901213e-04f, 2.267447545e-04f, 2.267989914e-04f,
-2.268528319e-04f, 2.269062761e-04f, 2.269593237e-04f, 2.270119748e-04f, 2.270642293e-04f, 2.271160871e-04f, 2.271675482e-04f, 2.272186125e-04f, 2.272692800e-04f, 2.273195505e-04f,
-2.273694242e-04f, 2.274189008e-04f, 2.274679803e-04f, 2.275166628e-04f, 2.275649480e-04f, 2.276128361e-04f, 2.276603269e-04f, 2.277074203e-04f, 2.277541164e-04f, 2.278004150e-04f,
-2.278463162e-04f, 2.278918198e-04f, 2.279369259e-04f, 2.279816343e-04f, 2.280259451e-04f, 2.280698582e-04f, 2.281133735e-04f, 2.281564910e-04f, 2.281992106e-04f, 2.282415324e-04f,
-2.282834562e-04f, 2.283249821e-04f, 2.283661100e-04f, 2.284068397e-04f, 2.284471715e-04f, 2.284871050e-04f, 2.285266404e-04f, 2.285657776e-04f, 2.286045166e-04f, 2.286428572e-04f,
-2.286807996e-04f, 2.287183436e-04f, 2.287554892e-04f, 2.287922364e-04f, 2.288285851e-04f, 2.288645353e-04f, 2.289000871e-04f, 2.289352403e-04f, 2.289699949e-04f, 2.290043509e-04f,
-2.290383083e-04f, 2.290718670e-04f, 2.291050270e-04f, 2.291377883e-04f, 2.291701509e-04f, 2.292021147e-04f, 2.292336797e-04f, 2.292648459e-04f, 2.292956133e-04f, 2.293259818e-04f,
-2.293559514e-04f, 2.293855221e-04f, 2.294146939e-04f, 2.294434667e-04f, 2.294718406e-04f, 2.294998155e-04f, 2.295273915e-04f, 2.295545684e-04f, 2.295813462e-04f, 2.296077251e-04f,
-2.296337048e-04f, 2.296592855e-04f, 2.296844671e-04f, 2.297092497e-04f, 2.297336331e-04f, 2.297576173e-04f, 2.297812025e-04f, 2.298043885e-04f, 2.298271753e-04f, 2.298495630e-04f,
-2.298715515e-04f, 2.298931409e-04f, 2.299143310e-04f, 2.299351220e-04f, 2.299555138e-04f, 2.299755064e-04f, 2.299950998e-04f, 2.300142939e-04f, 2.300330889e-04f, 2.300514847e-04f,
-2.300694812e-04f, 2.300870786e-04f, 2.301042767e-04f, 2.301210756e-04f, 2.301374754e-04f, 2.301534759e-04f, 2.301690772e-04f, 2.301842793e-04f, 2.301990823e-04f, 2.302134860e-04f,
-2.302274906e-04f, 2.302410960e-04f, 2.302543022e-04f, 2.302671093e-04f, 2.302795173e-04f, 2.302915260e-04f, 2.303031357e-04f, 2.303143463e-04f, 2.303251577e-04f, 2.303355700e-04f,
-2.303455833e-04f, 2.303551975e-04f, 2.303644126e-04f, 2.303732287e-04f, 2.303816458e-04f, 2.303896639e-04f, 2.303972830e-04f, 2.304045031e-04f, 2.304113242e-04f, 2.304177465e-04f,
-2.304237698e-04f, 2.304293942e-04f, 2.304346197e-04f, 2.304394464e-04f, 2.304438743e-04f, 2.304479034e-04f, 2.304515336e-04f, 2.304547652e-04f, 2.304575980e-04f, 2.304600320e-04f,
-2.304620675e-04f, 2.304637042e-04f, 2.304649423e-04f, 2.304657819e-04f, 2.304662229e-04f, 2.304662653e-04f, 2.304659092e-04f, 2.304651547e-04f, 2.304640017e-04f, 2.304624504e-04f,
-2.304605006e-04f, 2.304581525e-04f, 2.304554061e-04f, 2.304522614e-04f, 2.304487185e-04f, 2.304447774e-04f, 2.304404382e-04f, 2.304357008e-04f, 2.304305654e-04f, 2.304250319e-04f,
-2.304191004e-04f, 2.304127709e-04f, 2.304060435e-04f, 2.303989183e-04f, 2.303913952e-04f, 2.303834743e-04f, 2.303751557e-04f, 2.303664394e-04f, 2.303573255e-04f, 2.303478139e-04f,
-2.303379048e-04f, 2.303275981e-04f, 2.303168940e-04f, 2.303057925e-04f, 2.302942936e-04f, 2.302823975e-04f, 2.302701040e-04f, 2.302574134e-04f, 2.302443256e-04f, 2.302308406e-04f,
-2.302169587e-04f, 2.302026797e-04f, 2.301880038e-04f, 2.301729311e-04f, 2.301574615e-04f, 2.301415951e-04f, 2.301253320e-04f, 2.301086723e-04f, 2.300916160e-04f, 2.300741631e-04f,
-2.300563138e-04f, 2.300380681e-04f, 2.300194260e-04f, 2.300003877e-04f, 2.299809531e-04f, 2.299611224e-04f, 2.299408956e-04f, 2.299202727e-04f, 2.298992539e-04f, 2.298778392e-04f,
-2.298560287e-04f, 2.298338224e-04f, 2.298112205e-04f, 2.297882229e-04f, 2.297648298e-04f, 2.297410412e-04f, 2.297168572e-04f, 2.296922779e-04f, 2.296673033e-04f, 2.296419336e-04f,
-2.296161687e-04f, 2.295900088e-04f, 2.295634539e-04f, 2.295365042e-04f, 2.295091597e-04f, 2.294814204e-04f, 2.294532865e-04f, 2.294247580e-04f, 2.293958350e-04f, 2.293665177e-04f,
-2.293368060e-04f, 2.293067000e-04f, 2.292761999e-04f, 2.292453057e-04f, 2.292140175e-04f, 2.291823354e-04f, 2.291502595e-04f, 2.291177899e-04f, 2.290849266e-04f, 2.290516697e-04f,
-2.290180194e-04f, 2.289839756e-04f, 2.289495386e-04f, 2.289147084e-04f, 2.288794850e-04f, 2.288438686e-04f, 2.288078593e-04f, 2.287714572e-04f, 2.287346623e-04f, 2.286974747e-04f,
-2.286598946e-04f, 2.286219220e-04f, 2.285835571e-04f, 2.285447999e-04f, 2.285056505e-04f, 2.284661090e-04f, 2.284261756e-04f, 2.283858503e-04f, 2.283451332e-04f, 2.283040244e-04f,
-2.282625241e-04f, 2.282206323e-04f, 2.281783491e-04f, 2.281356746e-04f, 2.280926090e-04f, 2.280491524e-04f, 2.280053048e-04f, 2.279610663e-04f, 2.279164371e-04f, 2.278714173e-04f,
-2.278260069e-04f, 2.277802062e-04f, 2.277340151e-04f, 2.276874338e-04f, 2.276404625e-04f, 2.275931012e-04f, 2.275453500e-04f, 2.274972091e-04f, 2.274486785e-04f, 2.273997584e-04f,
-2.273504490e-04f, 2.273007502e-04f, 2.272506622e-04f, 2.272001853e-04f, 2.271493193e-04f, 2.270980646e-04f, 2.270464211e-04f, 2.269943891e-04f, 2.269419686e-04f, 2.268891597e-04f,
-2.268359627e-04f, 2.267823775e-04f, 2.267284044e-04f, 2.266740434e-04f, 2.266192947e-04f, 2.265641584e-04f, 2.265086346e-04f, 2.264527234e-04f, 2.263964251e-04f, 2.263397396e-04f,
-2.262826672e-04f, 2.262252079e-04f, 2.261673619e-04f, 2.261091294e-04f, 2.260505104e-04f, 2.259915050e-04f, 2.259321135e-04f, 2.258723360e-04f, 2.258121725e-04f, 2.257516232e-04f,
-2.256906883e-04f, 2.256293678e-04f, 2.255676620e-04f, 2.255055709e-04f, 2.254430948e-04f, 2.253802336e-04f, 2.253169876e-04f, 2.252533570e-04f, 2.251893418e-04f, 2.251249421e-04f,
-2.250601582e-04f, 2.249949902e-04f, 2.249294382e-04f, 2.248635024e-04f, 2.247971828e-04f, 2.247304797e-04f, 2.246633932e-04f, 2.245959235e-04f, 2.245280706e-04f, 2.244598347e-04f,
-2.243912160e-04f, 2.243222147e-04f, 2.242528308e-04f, 2.241830646e-04f, 2.241129161e-04f, 2.240423856e-04f, 2.239714731e-04f, 2.239001789e-04f, 2.238285030e-04f, 2.237564457e-04f,
-2.236840071e-04f, 2.236111873e-04f, 2.235379866e-04f, 2.234644049e-04f, 2.233904427e-04f, 2.233160998e-04f, 2.232413766e-04f, 2.231662732e-04f, 2.230907898e-04f, 2.230149264e-04f,
-2.229386834e-04f, 2.228620607e-04f, 2.227850587e-04f, 2.227076774e-04f, 2.226299170e-04f, 2.225517777e-04f, 2.224732597e-04f, 2.223943630e-04f, 2.223150880e-04f, 2.222354347e-04f,
-2.221554033e-04f, 2.220749939e-04f, 2.219942069e-04f, 2.219130422e-04f, 2.218315002e-04f, 2.217495809e-04f, 2.216672845e-04f, 2.215846112e-04f, 2.215015612e-04f, 2.214181346e-04f,
-2.213343317e-04f, 2.212501525e-04f, 2.211655973e-04f, 2.210806663e-04f, 2.209953596e-04f, 2.209096773e-04f, 2.208236198e-04f, 2.207371871e-04f, 2.206503794e-04f, 2.205631969e-04f,
-2.204756398e-04f, 2.203877083e-04f, 2.202994026e-04f, 2.202107227e-04f, 2.201216690e-04f, 2.200322416e-04f, 2.199424407e-04f, 2.198522664e-04f, 2.197617190e-04f, 2.196707986e-04f,
-2.195795054e-04f, 2.194878397e-04f, 2.193958015e-04f, 2.193033912e-04f, 2.192106088e-04f, 2.191174545e-04f, 2.190239286e-04f, 2.189300313e-04f, 2.188357627e-04f, 2.187411230e-04f,
-2.186461124e-04f, 2.185507312e-04f, 2.184549794e-04f, 2.183588574e-04f, 2.182623652e-04f, 2.181655032e-04f, 2.180682714e-04f, 2.179706701e-04f, 2.178726995e-04f, 2.177743598e-04f,
-2.176756511e-04f, 2.175765738e-04f, 2.174771279e-04f, 2.173773136e-04f, 2.172771313e-04f, 2.171765810e-04f, 2.170756631e-04f, 2.169743776e-04f, 2.168727248e-04f, 2.167707049e-04f,
-2.166683181e-04f, 2.165655646e-04f, 2.164624446e-04f, 2.163589583e-04f, 2.162551059e-04f, 2.161508877e-04f, 2.160463039e-04f, 2.159413545e-04f, 2.158360400e-04f, 2.157303604e-04f,
-2.156243160e-04f, 2.155179070e-04f, 2.154111336e-04f, 2.153039960e-04f, 2.151964944e-04f, 2.150886291e-04f, 2.149804003e-04f, 2.148718081e-04f, 2.147628529e-04f, 2.146535347e-04f,
-2.145438539e-04f, 2.144338106e-04f, 2.143234051e-04f, 2.142126375e-04f, 2.141015082e-04f, 2.139900173e-04f, 2.138781650e-04f, 2.137659516e-04f, 2.136533773e-04f, 2.135404423e-04f,
-2.134271469e-04f, 2.133134911e-04f, 2.131994754e-04f, 2.130850999e-04f, 2.129703648e-04f, 2.128552704e-04f, 2.127398168e-04f, 2.126240044e-04f, 2.125078333e-04f, 2.123913038e-04f,
-2.122744161e-04f, 2.121571704e-04f, 2.120395670e-04f, 2.119216061e-04f, 2.118032878e-04f, 2.116846126e-04f, 2.115655805e-04f, 2.114461919e-04f, 2.113264469e-04f, 2.112063458e-04f,
-2.110858889e-04f, 2.109650763e-04f, 2.108439083e-04f, 2.107223851e-04f, 2.106005070e-04f, 2.104782742e-04f, 2.103556870e-04f, 2.102327456e-04f, 2.101094502e-04f, 2.099858010e-04f,
-2.098617984e-04f, 2.097374426e-04f, 2.096127337e-04f, 2.094876721e-04f, 2.093622579e-04f, 2.092364915e-04f, 2.091103731e-04f, 2.089839029e-04f, 2.088570811e-04f, 2.087299081e-04f,
-2.086023840e-04f, 2.084745092e-04f, 2.083462837e-04f, 2.082177080e-04f, 2.080887823e-04f, 2.079595067e-04f, 2.078298816e-04f, 2.076999073e-04f, 2.075695838e-04f, 2.074389116e-04f,
-2.073078908e-04f, 2.071765218e-04f, 2.070448047e-04f, 2.069127399e-04f, 2.067803276e-04f, 2.066475679e-04f, 2.065144613e-04f, 2.063810079e-04f, 2.062472081e-04f, 2.061130620e-04f,
-2.059785699e-04f, 2.058437321e-04f, 2.057085489e-04f, 2.055730205e-04f, 2.054371471e-04f, 2.053009291e-04f, 2.051643667e-04f, 2.050274601e-04f, 2.048902096e-04f, 2.047526156e-04f,
-2.046146781e-04f, 2.044763976e-04f, 2.043377743e-04f, 2.041988084e-04f, 2.040595002e-04f, 2.039198500e-04f, 2.037798581e-04f, 2.036395246e-04f, 2.034988500e-04f, 2.033578344e-04f,
-2.032164781e-04f, 2.030747814e-04f, 2.029327446e-04f, 2.027903680e-04f, 2.026476517e-04f, 2.025045962e-04f, 2.023612016e-04f, 2.022174682e-04f, 2.020733963e-04f, 2.019289863e-04f,
-2.017842383e-04f, 2.016391526e-04f, 2.014937295e-04f, 2.013479694e-04f, 2.012018724e-04f, 2.010554388e-04f, 2.009086690e-04f, 2.007615632e-04f, 2.006141217e-04f, 2.004663447e-04f,
-2.003182326e-04f, 2.001697857e-04f, 2.000210041e-04f, 1.998718883e-04f, 1.997224384e-04f, 1.995726548e-04f, 1.994225378e-04f, 1.992720876e-04f, 1.991213045e-04f, 1.989701888e-04f,
-1.988187409e-04f, 1.986669609e-04f, 1.985148492e-04f, 1.983624061e-04f, 1.982096318e-04f, 1.980565267e-04f, 1.979030910e-04f, 1.977493250e-04f, 1.975952290e-04f, 1.974408034e-04f,
-1.972860483e-04f, 1.971309642e-04f, 1.969755512e-04f, 1.968198097e-04f, 1.966637400e-04f, 1.965073424e-04f, 1.963506171e-04f, 1.961935645e-04f, 1.960361849e-04f, 1.958784785e-04f,
-1.957204457e-04f, 1.955620867e-04f, 1.954034019e-04f, 1.952443916e-04f, 1.950850560e-04f, 1.949253955e-04f, 1.947654103e-04f, 1.946051008e-04f, 1.944444672e-04f, 1.942835099e-04f,
-1.941222292e-04f, 1.939606254e-04f, 1.937986987e-04f, 1.936364496e-04f, 1.934738782e-04f, 1.933109849e-04f, 1.931477700e-04f, 1.929842338e-04f, 1.928203767e-04f, 1.926561988e-04f,
-1.924917006e-04f, 1.923268824e-04f, 1.921617444e-04f, 1.919962870e-04f, 1.918305104e-04f, 1.916644150e-04f, 1.914980011e-04f, 1.913312691e-04f, 1.911642191e-04f, 1.909968516e-04f,
-1.908291669e-04f, 1.906611652e-04f, 1.904928469e-04f, 1.903242123e-04f, 1.901552617e-04f, 1.899859955e-04f, 1.898164139e-04f, 1.896465173e-04f, 1.894763059e-04f, 1.893057801e-04f,
-1.891349403e-04f, 1.889637867e-04f, 1.887923197e-04f, 1.886205396e-04f, 1.884484467e-04f, 1.882760413e-04f, 1.881033237e-04f, 1.879302943e-04f, 1.877569534e-04f, 1.875833014e-04f,
-1.874093385e-04f, 1.872350650e-04f, 1.870604814e-04f, 1.868855878e-04f, 1.867103847e-04f, 1.865348724e-04f, 1.863590512e-04f, 1.861829215e-04f, 1.860064834e-04f, 1.858297375e-04f,
-1.856526840e-04f, 1.854753233e-04f, 1.852976556e-04f, 1.851196813e-04f, 1.849414008e-04f, 1.847628143e-04f, 1.845839223e-04f, 1.844047250e-04f, 1.842252228e-04f, 1.840454159e-04f,
-1.838653049e-04f, 1.836848899e-04f, 1.835041713e-04f, 1.833231494e-04f, 1.831418247e-04f, 1.829601973e-04f, 1.827782678e-04f, 1.825960363e-04f, 1.824135033e-04f, 1.822306690e-04f,
-1.820475339e-04f, 1.818640982e-04f, 1.816803623e-04f, 1.814963266e-04f, 1.813119913e-04f, 1.811273569e-04f, 1.809424236e-04f, 1.807571918e-04f, 1.805716619e-04f, 1.803858342e-04f,
-1.801997090e-04f, 1.800132867e-04f, 1.798265676e-04f, 1.796395521e-04f, 1.794522405e-04f, 1.792646332e-04f, 1.790767306e-04f, 1.788885329e-04f, 1.787000405e-04f, 1.785112537e-04f,
-1.783221730e-04f, 1.781327986e-04f, 1.779431310e-04f, 1.777531704e-04f, 1.775629172e-04f, 1.773723718e-04f, 1.771815345e-04f, 1.769904057e-04f, 1.767989857e-04f, 1.766072749e-04f,
-1.764152736e-04f, 1.762229822e-04f, 1.760304011e-04f, 1.758375305e-04f, 1.756443709e-04f, 1.754509227e-04f, 1.752571860e-04f, 1.750631615e-04f, 1.748688492e-04f, 1.746742498e-04f,
-1.744793634e-04f, 1.742841905e-04f, 1.740887314e-04f, 1.738929865e-04f, 1.736969561e-04f, 1.735006407e-04f, 1.733040405e-04f, 1.731071559e-04f, 1.729099873e-04f, 1.727125351e-04f,
-1.725147996e-04f, 1.723167812e-04f, 1.721184802e-04f, 1.719198970e-04f, 1.717210320e-04f, 1.715218855e-04f, 1.713224579e-04f, 1.711227497e-04f, 1.709227610e-04f, 1.707224924e-04f,
-1.705219441e-04f, 1.703211166e-04f, 1.701200102e-04f, 1.699186253e-04f, 1.697169622e-04f, 1.695150214e-04f, 1.693128031e-04f, 1.691103078e-04f, 1.689075359e-04f, 1.687044877e-04f,
-1.685011635e-04f, 1.682975638e-04f, 1.680936889e-04f, 1.678895393e-04f, 1.676851152e-04f, 1.674804171e-04f, 1.672754453e-04f, 1.670702002e-04f, 1.668646822e-04f, 1.666588916e-04f,
-1.664528289e-04f, 1.662464944e-04f, 1.660398884e-04f, 1.658330115e-04f, 1.656258639e-04f, 1.654184460e-04f, 1.652107582e-04f, 1.650028009e-04f, 1.647945745e-04f, 1.645860793e-04f,
-1.643773158e-04f, 1.641682843e-04f, 1.639589851e-04f, 1.637494188e-04f, 1.635395856e-04f, 1.633294859e-04f, 1.631191202e-04f, 1.629084888e-04f, 1.626975921e-04f, 1.624864304e-04f,
-1.622750042e-04f, 1.620633139e-04f, 1.618513599e-04f, 1.616391424e-04f, 1.614266620e-04f, 1.612139190e-04f, 1.610009137e-04f, 1.607876467e-04f, 1.605741182e-04f, 1.603603287e-04f,
-1.601462785e-04f, 1.599319681e-04f, 1.597173978e-04f, 1.595025680e-04f, 1.592874792e-04f, 1.590721316e-04f, 1.588565258e-04f, 1.586406620e-04f, 1.584245408e-04f, 1.582081624e-04f,
-1.579915273e-04f, 1.577746358e-04f, 1.575574884e-04f, 1.573400855e-04f, 1.571224274e-04f, 1.569045146e-04f, 1.566863474e-04f, 1.564679263e-04f, 1.562492516e-04f, 1.560303238e-04f,
-1.558111432e-04f, 1.555917102e-04f, 1.553720253e-04f, 1.551520888e-04f, 1.549319012e-04f, 1.547114627e-04f, 1.544907740e-04f, 1.542698352e-04f, 1.540486469e-04f, 1.538272095e-04f,
-1.536055233e-04f, 1.533835887e-04f, 1.531614062e-04f, 1.529389761e-04f, 1.527162989e-04f, 1.524933750e-04f, 1.522702047e-04f, 1.520467885e-04f, 1.518231268e-04f, 1.515992200e-04f,
-1.513750684e-04f, 1.511506726e-04f, 1.509260328e-04f, 1.507011496e-04f, 1.504760233e-04f, 1.502506543e-04f, 1.500250431e-04f, 1.497991900e-04f, 1.495730954e-04f, 1.493467598e-04f,
-1.491201836e-04f, 1.488933672e-04f, 1.486663110e-04f, 1.484390154e-04f, 1.482114808e-04f, 1.479837076e-04f, 1.477556963e-04f, 1.475274472e-04f, 1.472989609e-04f, 1.470702376e-04f,
-1.468412777e-04f, 1.466120819e-04f, 1.463826503e-04f, 1.461529835e-04f, 1.459230818e-04f, 1.456929457e-04f, 1.454625756e-04f, 1.452319719e-04f, 1.450011351e-04f, 1.447700654e-04f,
-1.445387635e-04f, 1.443072296e-04f, 1.440754642e-04f, 1.438434677e-04f, 1.436112406e-04f, 1.433787832e-04f, 1.431460960e-04f, 1.429131794e-04f, 1.426800338e-04f, 1.424466596e-04f,
-1.422130573e-04f, 1.419792273e-04f, 1.417451699e-04f, 1.415108857e-04f, 1.412763751e-04f, 1.410416384e-04f, 1.408066761e-04f, 1.405714886e-04f, 1.403360764e-04f, 1.401004398e-04f,
-1.398645793e-04f, 1.396284953e-04f, 1.393921883e-04f, 1.391556587e-04f, 1.389189068e-04f, 1.386819332e-04f, 1.384447382e-04f, 1.382073223e-04f, 1.379696859e-04f, 1.377318294e-04f,
-1.374937533e-04f, 1.372554580e-04f, 1.370169439e-04f, 1.367782114e-04f, 1.365392611e-04f, 1.363000932e-04f, 1.360607083e-04f, 1.358211067e-04f, 1.355812890e-04f, 1.353412554e-04f,
-1.351010066e-04f, 1.348605428e-04f, 1.346198646e-04f, 1.343789723e-04f, 1.341378665e-04f, 1.338965474e-04f, 1.336550157e-04f, 1.334132716e-04f, 1.331713156e-04f, 1.329291483e-04f,
-1.326867699e-04f, 1.324441810e-04f, 1.322013819e-04f, 1.319583731e-04f, 1.317151551e-04f, 1.314717283e-04f, 1.312280931e-04f, 1.309842500e-04f, 1.307401994e-04f, 1.304959417e-04f,
-1.302514773e-04f, 1.300068068e-04f, 1.297619306e-04f, 1.295168490e-04f, 1.292715626e-04f, 1.290260717e-04f, 1.287803769e-04f, 1.285344785e-04f, 1.282883770e-04f, 1.280420728e-04f,
-1.277955664e-04f, 1.275488582e-04f, 1.273019487e-04f, 1.270548383e-04f, 1.268075275e-04f, 1.265600166e-04f, 1.263123062e-04f, 1.260643966e-04f, 1.258162884e-04f, 1.255679820e-04f,
-1.253194777e-04f, 1.250707761e-04f, 1.248218777e-04f, 1.245727827e-04f, 1.243234918e-04f, 1.240740053e-04f, 1.238243237e-04f, 1.235744474e-04f, 1.233243770e-04f, 1.230741127e-04f,
-1.228236551e-04f, 1.225730047e-04f, 1.223221618e-04f, 1.220711270e-04f, 1.218199006e-04f, 1.215684831e-04f, 1.213168750e-04f, 1.210650768e-04f, 1.208130888e-04f, 1.205609116e-04f,
-1.203085455e-04f, 1.200559910e-04f, 1.198032486e-04f, 1.195503188e-04f, 1.192972019e-04f, 1.190438985e-04f, 1.187904089e-04f, 1.185367337e-04f, 1.182828733e-04f, 1.180288281e-04f,
-1.177745986e-04f, 1.175201853e-04f, 1.172655886e-04f, 1.170108089e-04f, 1.167558468e-04f, 1.165007026e-04f, 1.162453769e-04f, 1.159898701e-04f, 1.157341826e-04f, 1.154783148e-04f,
-1.152222674e-04f, 1.149660406e-04f, 1.147096350e-04f, 1.144530511e-04f, 1.141962892e-04f, 1.139393499e-04f, 1.136822335e-04f, 1.134249406e-04f, 1.131674717e-04f, 1.129098271e-04f,
-1.126520073e-04f, 1.123940128e-04f, 1.121358441e-04f, 1.118775016e-04f, 1.116189858e-04f, 1.113602971e-04f, 1.111014360e-04f, 1.108424030e-04f, 1.105831984e-04f, 1.103238229e-04f,
-1.100642768e-04f, 1.098045606e-04f, 1.095446748e-04f, 1.092846197e-04f, 1.090243960e-04f, 1.087640041e-04f, 1.085034443e-04f, 1.082427173e-04f, 1.079818234e-04f, 1.077207630e-04f,
-1.074595368e-04f, 1.071981451e-04f, 1.069365884e-04f, 1.066748672e-04f, 1.064129819e-04f, 1.061509331e-04f, 1.058887210e-04f, 1.056263464e-04f, 1.053638095e-04f, 1.051011109e-04f,
-1.048382510e-04f, 1.045752303e-04f, 1.043120493e-04f, 1.040487084e-04f, 1.037852081e-04f, 1.035215489e-04f, 1.032577313e-04f, 1.029937556e-04f, 1.027296224e-04f, 1.024653322e-04f,
-1.022008854e-04f, 1.019362825e-04f, 1.016715239e-04f, 1.014066101e-04f, 1.011415417e-04f, 1.008763190e-04f, 1.006109425e-04f, 1.003454128e-04f, 1.000797302e-04f, 9.981389532e-05f,
-9.954790853e-05f, 9.928177034e-05f, 9.901548121e-05f, 9.874904162e-05f, 9.848245204e-05f, 9.821571294e-05f, 9.794882480e-05f, 9.768178809e-05f, 9.741460328e-05f, 9.714727086e-05f,
-9.687979128e-05f, 9.661216503e-05f, 9.634439257e-05f, 9.607647439e-05f, 9.580841096e-05f, 9.554020276e-05f, 9.527185025e-05f, 9.500335392e-05f, 9.473471423e-05f, 9.446593168e-05f,
-9.419700672e-05f, 9.392793984e-05f, 9.365873152e-05f, 9.338938223e-05f, 9.311989244e-05f, 9.285026264e-05f, 9.258049330e-05f, 9.231058491e-05f, 9.204053793e-05f, 9.177035284e-05f,
-9.150003013e-05f, 9.122957027e-05f, 9.095897374e-05f, 9.068824101e-05f, 9.041737258e-05f, 9.014636891e-05f, 8.987523049e-05f, 8.960395779e-05f, 8.933255130e-05f, 8.906101149e-05f,
-8.878933885e-05f, 8.851753385e-05f, 8.824559698e-05f, 8.797352871e-05f, 8.770132954e-05f, 8.742899993e-05f, 8.715654036e-05f, 8.688395133e-05f, 8.661123331e-05f, 8.633838679e-05f,
-8.606541224e-05f, 8.579231015e-05f, 8.551908100e-05f, 8.524572527e-05f, 8.497224344e-05f, 8.469863601e-05f, 8.442490344e-05f, 8.415104623e-05f, 8.387706486e-05f, 8.360295981e-05f,
-8.332873157e-05f, 8.305438061e-05f, 8.277990742e-05f, 8.250531250e-05f, 8.223059631e-05f, 8.195575935e-05f, 8.168080211e-05f, 8.140572505e-05f, 8.113052868e-05f, 8.085521348e-05f,
-8.057977993e-05f, 8.030422851e-05f, 8.002855972e-05f, 7.975277404e-05f, 7.947687195e-05f, 7.920085394e-05f, 7.892472050e-05f, 7.864847212e-05f, 7.837210928e-05f, 7.809563246e-05f,
-7.781904217e-05f, 7.754233887e-05f, 7.726552306e-05f, 7.698859523e-05f, 7.671155587e-05f, 7.643440546e-05f, 7.615714449e-05f, 7.587977345e-05f, 7.560229283e-05f, 7.532470311e-05f,
-7.504700479e-05f, 7.476919835e-05f, 7.449128428e-05f, 7.421326308e-05f, 7.393513523e-05f, 7.365690121e-05f, 7.337856153e-05f, 7.310011666e-05f, 7.282156710e-05f, 7.254291335e-05f,
-7.226415588e-05f, 7.198529519e-05f, 7.170633177e-05f, 7.142726611e-05f, 7.114809870e-05f, 7.086883003e-05f, 7.058946060e-05f, 7.030999089e-05f, 7.003042139e-05f, 6.975075260e-05f,
-6.947098500e-05f, 6.919111910e-05f, 6.891115537e-05f, 6.863109432e-05f, 6.835093644e-05f, 6.807068220e-05f, 6.779033212e-05f, 6.750988668e-05f, 6.722934638e-05f, 6.694871170e-05f,
-6.666798314e-05f, 6.638716119e-05f, 6.610624634e-05f, 6.582523910e-05f, 6.554413994e-05f, 6.526294937e-05f, 6.498166788e-05f, 6.470029596e-05f, 6.441883411e-05f, 6.413728281e-05f,
-6.385564257e-05f, 6.357391388e-05f, 6.329209722e-05f, 6.301019310e-05f, 6.272820202e-05f, 6.244612445e-05f, 6.216396091e-05f, 6.188171188e-05f, 6.159937786e-05f, 6.131695934e-05f,
-6.103445683e-05f, 6.075187080e-05f, 6.046920177e-05f, 6.018645022e-05f, 5.990361665e-05f, 5.962070156e-05f, 5.933770543e-05f, 5.905462878e-05f, 5.877147209e-05f, 5.848823585e-05f,
-5.820492058e-05f, 5.792152675e-05f, 5.763805487e-05f, 5.735450544e-05f, 5.707087894e-05f, 5.678717588e-05f, 5.650339676e-05f, 5.621954207e-05f, 5.593561230e-05f, 5.565160796e-05f,
-5.536752954e-05f, 5.508337754e-05f, 5.479915246e-05f, 5.451485478e-05f, 5.423048502e-05f, 5.394604367e-05f, 5.366153122e-05f, 5.337694817e-05f, 5.309229502e-05f, 5.280757228e-05f,
-5.252278043e-05f, 5.223791997e-05f, 5.195299141e-05f, 5.166799523e-05f, 5.138293195e-05f, 5.109780205e-05f, 5.081260604e-05f, 5.052734441e-05f, 5.024201766e-05f, 4.995662630e-05f,
-4.967117081e-05f, 4.938565170e-05f, 4.910006947e-05f, 4.881442462e-05f, 4.852871764e-05f, 4.824294903e-05f, 4.795711930e-05f, 4.767122894e-05f, 4.738527845e-05f, 4.709926833e-05f,
-4.681319908e-05f, 4.652707120e-05f, 4.624088519e-05f, 4.595464155e-05f, 4.566834077e-05f, 4.538198336e-05f, 4.509556982e-05f, 4.480910065e-05f, 4.452257634e-05f, 4.423599740e-05f,
-4.394936433e-05f, 4.366267762e-05f, 4.337593778e-05f, 4.308914531e-05f, 4.280230070e-05f, 4.251540446e-05f, 4.222845709e-05f, 4.194145908e-05f, 4.165441095e-05f, 4.136731318e-05f,
-4.108016628e-05f, 4.079297075e-05f, 4.050572708e-05f, 4.021843579e-05f, 3.993109737e-05f, 3.964371232e-05f, 3.935628115e-05f, 3.906880434e-05f, 3.878128242e-05f, 3.849371586e-05f,
-3.820610518e-05f, 3.791845088e-05f, 3.763075345e-05f, 3.734301340e-05f, 3.705523124e-05f, 3.676740745e-05f, 3.647954254e-05f, 3.619163702e-05f, 3.590369138e-05f, 3.561570612e-05f,
-3.532768175e-05f, 3.503961877e-05f, 3.475151767e-05f, 3.446337897e-05f, 3.417520315e-05f, 3.388699073e-05f, 3.359874220e-05f, 3.331045807e-05f, 3.302213884e-05f, 3.273378500e-05f,
-3.244539706e-05f, 3.215697552e-05f, 3.186852088e-05f, 3.158003365e-05f, 3.129151432e-05f, 3.100296340e-05f, 3.071438139e-05f, 3.042576879e-05f, 3.013712609e-05f, 2.984845382e-05f,
-2.955975245e-05f, 2.927102250e-05f, 2.898226447e-05f, 2.869347886e-05f, 2.840466617e-05f, 2.811582691e-05f, 2.782696157e-05f, 2.753807065e-05f, 2.724915466e-05f, 2.696021410e-05f,
-2.667124947e-05f, 2.638226128e-05f, 2.609325002e-05f, 2.580421619e-05f, 2.551516031e-05f, 2.522608286e-05f, 2.493698435e-05f, 2.464786529e-05f, 2.435872617e-05f, 2.406956749e-05f,
-2.378038977e-05f, 2.349119349e-05f, 2.320197917e-05f, 2.291274729e-05f, 2.262349837e-05f, 2.233423291e-05f, 2.204495141e-05f, 2.175565436e-05f, 2.146634228e-05f, 2.117701565e-05f,
-2.088767499e-05f, 2.059832080e-05f, 2.030895357e-05f, 2.001957381e-05f, 1.973018202e-05f, 1.944077871e-05f, 1.915136436e-05f, 1.886193949e-05f, 1.857250459e-05f, 1.828306018e-05f,
-1.799360674e-05f, 1.770414478e-05f, 1.741467480e-05f, 1.712519730e-05f, 1.683571279e-05f, 1.654622176e-05f, 1.625672472e-05f, 1.596722216e-05f, 1.567771460e-05f, 1.538820252e-05f,
-1.509868643e-05f, 1.480916684e-05f, 1.451964424e-05f, 1.423011913e-05f, 1.394059201e-05f, 1.365106340e-05f, 1.336153377e-05f, 1.307200365e-05f, 1.278247352e-05f, 1.249294390e-05f,
-1.220341527e-05f, 1.191388814e-05f, 1.162436301e-05f, 1.133484039e-05f, 1.104532077e-05f, 1.075580465e-05f, 1.046629253e-05f, 1.017678492e-05f, 9.887282308e-06f, 9.597785203e-06f,
-9.308294103e-06f, 9.018809507e-06f, 8.729331916e-06f, 8.439861831e-06f, 8.150399751e-06f, 7.860946176e-06f, 7.571501606e-06f, 7.282066541e-06f, 6.992641482e-06f, 6.703226927e-06f,
-6.413823376e-06f, 6.124431330e-06f, 5.835051288e-06f, 5.545683750e-06f, 5.256329214e-06f, 4.966988181e-06f, 4.677661150e-06f, 4.388348619e-06f, 4.099051090e-06f, 3.809769059e-06f,
-3.520503028e-06f, 3.231253495e-06f, 2.942020958e-06f, 2.652805917e-06f, 2.363608871e-06f, 2.074430318e-06f, 1.785270757e-06f, 1.496130687e-06f, 1.207010606e-06f, 9.179110137e-07f,
-6.288324073e-07f, 3.397752855e-07f, 5.074014661e-08f, -2.382725111e-07f, -5.272621896e-07f, -8.162283908e-07f, -1.105170617e-06f, -1.394088370e-06f, -1.682981151e-06f, -1.971848465e-06f,
--2.260689812e-06f, -2.549504695e-06f, -2.838292616e-06f, -3.127053079e-06f, -3.415785586e-06f, -3.704489640e-06f, -3.993164744e-06f, -4.281810400e-06f, -4.570426111e-06f, -4.859011382e-06f,
--5.147565715e-06f, -5.436088613e-06f, -5.724579579e-06f, -6.013038119e-06f, -6.301463734e-06f, -6.589855929e-06f, -6.878214207e-06f, -7.166538072e-06f, -7.454827029e-06f, -7.743080582e-06f,
--8.031298234e-06f, -8.319479490e-06f, -8.607623855e-06f, -8.895730832e-06f, -9.183799927e-06f, -9.471830644e-06f, -9.759822488e-06f, -1.004777496e-05f, -1.033568758e-05f, -1.062355983e-05f,
--1.091139123e-05f, -1.119918129e-05f, -1.148692950e-05f, -1.177463538e-05f, -1.206229843e-05f, -1.234991815e-05f, -1.263749405e-05f, -1.292502564e-05f, -1.321251242e-05f, -1.349995391e-05f,
--1.378734959e-05f, -1.407469900e-05f, -1.436200162e-05f, -1.464925696e-05f, -1.493646454e-05f, -1.522362386e-05f, -1.551073442e-05f, -1.579779574e-05f, -1.608480732e-05f, -1.637176867e-05f,
--1.665867930e-05f, -1.694553871e-05f, -1.723234641e-05f, -1.751910191e-05f, -1.780580472e-05f, -1.809245434e-05f, -1.837905029e-05f, -1.866559208e-05f, -1.895207920e-05f, -1.923851118e-05f,
--1.952488751e-05f, -1.981120771e-05f, -2.009747130e-05f, -2.038367776e-05f, -2.066982663e-05f, -2.095591740e-05f, -2.124194958e-05f, -2.152792269e-05f, -2.181383624e-05f, -2.209968973e-05f,
--2.238548268e-05f, -2.267121459e-05f, -2.295688498e-05f, -2.324249336e-05f, -2.352803923e-05f, -2.381352212e-05f, -2.409894152e-05f, -2.438429696e-05f, -2.466958794e-05f, -2.495481398e-05f,
--2.523997458e-05f, -2.552506926e-05f, -2.581009753e-05f, -2.609505891e-05f, -2.637995290e-05f, -2.666477901e-05f, -2.694953677e-05f, -2.723422568e-05f, -2.751884526e-05f, -2.780339501e-05f,
--2.808787446e-05f, -2.837228311e-05f, -2.865662049e-05f, -2.894088609e-05f, -2.922507945e-05f, -2.950920006e-05f, -2.979324745e-05f, -3.007722114e-05f, -3.036112062e-05f, -3.064494543e-05f,
--3.092869507e-05f, -3.121236906e-05f, -3.149596691e-05f, -3.177948814e-05f, -3.206293227e-05f, -3.234629881e-05f, -3.262958728e-05f, -3.291279719e-05f, -3.319592807e-05f, -3.347897941e-05f,
--3.376195076e-05f, -3.404484161e-05f, -3.432765149e-05f, -3.461037991e-05f, -3.489302639e-05f, -3.517559045e-05f, -3.545807161e-05f, -3.574046939e-05f, -3.602278329e-05f, -3.630501285e-05f,
--3.658715757e-05f, -3.686921699e-05f, -3.715119061e-05f, -3.743307796e-05f, -3.771487855e-05f, -3.799659190e-05f, -3.827821754e-05f, -3.855975499e-05f, -3.884120375e-05f, -3.912256336e-05f,
--3.940383334e-05f, -3.968501320e-05f, -3.996610246e-05f, -4.024710065e-05f, -4.052800729e-05f, -4.080882189e-05f, -4.108954399e-05f, -4.137017310e-05f, -4.165070874e-05f, -4.193115044e-05f,
--4.221149771e-05f, -4.249175009e-05f, -4.277190708e-05f, -4.305196823e-05f, -4.333193304e-05f, -4.361180105e-05f, -4.389157177e-05f, -4.417124473e-05f, -4.445081946e-05f, -4.473029547e-05f,
--4.500967229e-05f, -4.528894946e-05f, -4.556812648e-05f, -4.584720289e-05f, -4.612617821e-05f, -4.640505197e-05f, -4.668382368e-05f, -4.696249289e-05f, -4.724105911e-05f, -4.751952188e-05f,
--4.779788071e-05f, -4.807613513e-05f, -4.835428467e-05f, -4.863232886e-05f, -4.891026723e-05f, -4.918809930e-05f, -4.946582460e-05f, -4.974344265e-05f, -5.002095300e-05f, -5.029835515e-05f,
--5.057564866e-05f, -5.085283303e-05f, -5.112990780e-05f, -5.140687251e-05f, -5.168372668e-05f, -5.196046983e-05f, -5.223710151e-05f, -5.251362124e-05f, -5.279002855e-05f, -5.306632297e-05f,
--5.334250403e-05f, -5.361857127e-05f, -5.389452421e-05f, -5.417036239e-05f, -5.444608533e-05f, -5.472169258e-05f, -5.499718366e-05f, -5.527255811e-05f, -5.554781545e-05f, -5.582295523e-05f,
--5.609797697e-05f, -5.637288021e-05f, -5.664766448e-05f, -5.692232932e-05f, -5.719687426e-05f, -5.747129884e-05f, -5.774560258e-05f, -5.801978503e-05f, -5.829384572e-05f, -5.856778418e-05f,
--5.884159996e-05f, -5.911529258e-05f, -5.938886159e-05f, -5.966230652e-05f, -5.993562690e-05f, -6.020882228e-05f, -6.048189219e-05f, -6.075483617e-05f, -6.102765375e-05f, -6.130034448e-05f,
--6.157290789e-05f, -6.184534352e-05f, -6.211765091e-05f, -6.238982960e-05f, -6.266187913e-05f, -6.293379904e-05f, -6.320558887e-05f, -6.347724815e-05f, -6.374877643e-05f, -6.402017325e-05f,
--6.429143815e-05f, -6.456257066e-05f, -6.483357035e-05f, -6.510443673e-05f, -6.537516936e-05f, -6.564576778e-05f, -6.591623153e-05f, -6.618656015e-05f, -6.645675319e-05f, -6.672681019e-05f,
--6.699673069e-05f, -6.726651423e-05f, -6.753616037e-05f, -6.780566864e-05f, -6.807503860e-05f, -6.834426977e-05f, -6.861336172e-05f, -6.888231398e-05f, -6.915112610e-05f, -6.941979763e-05f,
--6.968832812e-05f, -6.995671710e-05f, -7.022496413e-05f, -7.049306876e-05f, -7.076103052e-05f, -7.102884898e-05f, -7.129652367e-05f, -7.156405415e-05f, -7.183143996e-05f, -7.209868065e-05f,
--7.236577578e-05f, -7.263272488e-05f, -7.289952752e-05f, -7.316618324e-05f, -7.343269159e-05f, -7.369905212e-05f, -7.396526438e-05f, -7.423132793e-05f, -7.449724231e-05f, -7.476300708e-05f,
--7.502862179e-05f, -7.529408599e-05f, -7.555939924e-05f, -7.582456108e-05f, -7.608957107e-05f, -7.635442876e-05f, -7.661913371e-05f, -7.688368548e-05f, -7.714808361e-05f, -7.741232765e-05f,
--7.767641718e-05f, -7.794035174e-05f, -7.820413088e-05f, -7.846775416e-05f, -7.873122115e-05f, -7.899453139e-05f, -7.925768444e-05f, -7.952067986e-05f, -7.978351720e-05f, -8.004619604e-05f,
--8.030871591e-05f, -8.057107638e-05f, -8.083327702e-05f, -8.109531737e-05f, -8.135719700e-05f, -8.161891547e-05f, -8.188047233e-05f, -8.214186715e-05f, -8.240309950e-05f, -8.266416891e-05f,
--8.292507497e-05f, -8.318581724e-05f, -8.344639526e-05f, -8.370680861e-05f, -8.396705685e-05f, -8.422713954e-05f, -8.448705625e-05f, -8.474680653e-05f, -8.500638995e-05f, -8.526580608e-05f,
--8.552505448e-05f, -8.578413471e-05f, -8.604304634e-05f, -8.630178894e-05f, -8.656036206e-05f, -8.681876529e-05f, -8.707699817e-05f, -8.733506029e-05f, -8.759295120e-05f, -8.785067048e-05f,
--8.810821769e-05f, -8.836559240e-05f, -8.862279417e-05f, -8.887982259e-05f, -8.913667720e-05f, -8.939335760e-05f, -8.964986333e-05f, -8.990619399e-05f, -9.016234912e-05f, -9.041832832e-05f,
--9.067413114e-05f, -9.092975716e-05f, -9.118520594e-05f, -9.144047707e-05f, -9.169557012e-05f, -9.195048465e-05f, -9.220522024e-05f, -9.245977646e-05f, -9.271415289e-05f, -9.296834910e-05f,
--9.322236467e-05f, -9.347619917e-05f, -9.372985217e-05f, -9.398332326e-05f, -9.423661200e-05f, -9.448971797e-05f, -9.474264076e-05f, -9.499537993e-05f, -9.524793506e-05f, -9.550030574e-05f,
--9.575249153e-05f, -9.600449202e-05f, -9.625630679e-05f, -9.650793541e-05f, -9.675937747e-05f, -9.701063254e-05f, -9.726170021e-05f, -9.751258005e-05f, -9.776327164e-05f, -9.801377457e-05f,
--9.826408842e-05f, -9.851421277e-05f, -9.876414720e-05f, -9.901389130e-05f, -9.926344464e-05f, -9.951280682e-05f, -9.976197741e-05f, -1.000109560e-04f, -1.002597422e-04f, -1.005083355e-04f,
--1.007567356e-04f, -1.010049420e-04f, -1.012529544e-04f, -1.015007722e-04f, -1.017483952e-04f, -1.019958228e-04f, -1.022430548e-04f, -1.024900905e-04f, -1.027369297e-04f, -1.029835720e-04f,
--1.032300169e-04f, -1.034762640e-04f, -1.037223129e-04f, -1.039681632e-04f, -1.042138144e-04f, -1.044592663e-04f, -1.047045183e-04f, -1.049495701e-04f, -1.051944212e-04f, -1.054390712e-04f,
--1.056835198e-04f, -1.059277665e-04f, -1.061718110e-04f, -1.064156527e-04f, -1.066592914e-04f, -1.069027265e-04f, -1.071459578e-04f, -1.073889847e-04f, -1.076318070e-04f, -1.078744241e-04f,
--1.081168357e-04f, -1.083590413e-04f, -1.086010407e-04f, -1.088428333e-04f, -1.090844188e-04f, -1.093257967e-04f, -1.095669668e-04f, -1.098079285e-04f, -1.100486814e-04f, -1.102892252e-04f,
--1.105295595e-04f, -1.107696839e-04f, -1.110095979e-04f, -1.112493012e-04f, -1.114887933e-04f, -1.117280739e-04f, -1.119671426e-04f, -1.122059990e-04f, -1.124446427e-04f, -1.126830732e-04f,
--1.129212903e-04f, -1.131592934e-04f, -1.133970823e-04f, -1.136346564e-04f, -1.138720155e-04f, -1.141091590e-04f, -1.143460867e-04f, -1.145827981e-04f, -1.148192929e-04f, -1.150555706e-04f,
--1.152916309e-04f, -1.155274733e-04f, -1.157630975e-04f, -1.159985031e-04f, -1.162336897e-04f, -1.164686569e-04f, -1.167034043e-04f, -1.169379315e-04f, -1.171722382e-04f, -1.174063239e-04f,
--1.176401883e-04f, -1.178738309e-04f, -1.181072515e-04f, -1.183404495e-04f, -1.185734246e-04f, -1.188061765e-04f, -1.190387047e-04f, -1.192710089e-04f, -1.195030887e-04f, -1.197349436e-04f,
--1.199665734e-04f, -1.201979776e-04f, -1.204291558e-04f, -1.206601077e-04f, -1.208908328e-04f, -1.211213309e-04f, -1.213516015e-04f, -1.215816442e-04f, -1.218114587e-04f, -1.220410445e-04f,
--1.222704013e-04f, -1.224995288e-04f, -1.227284265e-04f, -1.229570941e-04f, -1.231855311e-04f, -1.234137373e-04f, -1.236417122e-04f, -1.238694554e-04f, -1.240969666e-04f, -1.243242454e-04f,
--1.245512915e-04f, -1.247781044e-04f, -1.250046838e-04f, -1.252310293e-04f, -1.254571405e-04f, -1.256830171e-04f, -1.259086587e-04f, -1.261340649e-04f, -1.263592353e-04f, -1.265841696e-04f,
--1.268088674e-04f, -1.270333284e-04f, -1.272575521e-04f, -1.274815382e-04f, -1.277052863e-04f, -1.279287961e-04f, -1.281520672e-04f, -1.283750992e-04f, -1.285978917e-04f, -1.288204445e-04f,
--1.290427570e-04f, -1.292648291e-04f, -1.294866602e-04f, -1.297082500e-04f, -1.299295982e-04f, -1.301507044e-04f, -1.303715682e-04f, -1.305921893e-04f, -1.308125673e-04f, -1.310327019e-04f,
--1.312525926e-04f, -1.314722392e-04f, -1.316916412e-04f, -1.319107984e-04f, -1.321297103e-04f, -1.323483765e-04f, -1.325667968e-04f, -1.327849707e-04f, -1.330028980e-04f, -1.332205782e-04f,
--1.334380110e-04f, -1.336551960e-04f, -1.338721330e-04f, -1.340888214e-04f, -1.343052610e-04f, -1.345214514e-04f, -1.347373923e-04f, -1.349530833e-04f, -1.351685240e-04f, -1.353837142e-04f,
--1.355986534e-04f, -1.358133412e-04f, -1.360277775e-04f, -1.362419617e-04f, -1.364558935e-04f, -1.366695727e-04f, -1.368829988e-04f, -1.370961715e-04f, -1.373090904e-04f, -1.375217552e-04f,
--1.377341656e-04f, -1.379463211e-04f, -1.381582215e-04f, -1.383698665e-04f, -1.385812555e-04f, -1.387923884e-04f, -1.390032648e-04f, -1.392138843e-04f, -1.394242465e-04f, -1.396343512e-04f,
--1.398441980e-04f, -1.400537866e-04f, -1.402631165e-04f, -1.404721875e-04f, -1.406809993e-04f, -1.408895514e-04f, -1.410978436e-04f, -1.413058755e-04f, -1.415136467e-04f, -1.417211570e-04f,
--1.419284059e-04f, -1.421353932e-04f, -1.423421185e-04f, -1.425485815e-04f, -1.427547818e-04f, -1.429607192e-04f, -1.431663931e-04f, -1.433718035e-04f, -1.435769498e-04f, -1.437818318e-04f,
--1.439864491e-04f, -1.441908014e-04f, -1.443948883e-04f, -1.445987096e-04f, -1.448022649e-04f, -1.450055539e-04f, -1.452085762e-04f, -1.454113315e-04f, -1.456138195e-04f, -1.458160398e-04f,
--1.460179922e-04f, -1.462196762e-04f, -1.464210916e-04f, -1.466222380e-04f, -1.468231152e-04f, -1.470237227e-04f, -1.472240603e-04f, -1.474241276e-04f, -1.476239243e-04f, -1.478234501e-04f,
--1.480227047e-04f, -1.482216877e-04f, -1.484203988e-04f, -1.486188377e-04f, -1.488170040e-04f, -1.490148975e-04f, -1.492125179e-04f, -1.494098647e-04f, -1.496069377e-04f, -1.498037366e-04f,
--1.500002610e-04f, -1.501965107e-04f, -1.503924853e-04f, -1.505881844e-04f, -1.507836079e-04f, -1.509787552e-04f, -1.511736263e-04f, -1.513682207e-04f, -1.515625380e-04f, -1.517565781e-04f,
--1.519503406e-04f, -1.521438251e-04f, -1.523370314e-04f, -1.525299591e-04f, -1.527226080e-04f, -1.529149777e-04f, -1.531070679e-04f, -1.532988783e-04f, -1.534904086e-04f, -1.536816585e-04f,
--1.538726276e-04f, -1.540633158e-04f, -1.542537225e-04f, -1.544438477e-04f, -1.546336908e-04f, -1.548232518e-04f, -1.550125301e-04f, -1.552015256e-04f, -1.553902379e-04f, -1.555786667e-04f,
--1.557668117e-04f, -1.559546726e-04f, -1.561422491e-04f, -1.563295410e-04f, -1.565165478e-04f, -1.567032694e-04f, -1.568897053e-04f, -1.570758554e-04f, -1.572617192e-04f, -1.574472966e-04f,
--1.576325872e-04f, -1.578175906e-04f, -1.580023067e-04f, -1.581867351e-04f, -1.583708755e-04f, -1.585547277e-04f, -1.587382912e-04f, -1.589215659e-04f, -1.591045514e-04f, -1.592872475e-04f,
--1.594696538e-04f, -1.596517701e-04f, -1.598335960e-04f, -1.600151313e-04f, -1.601963757e-04f, -1.603773288e-04f, -1.605579905e-04f, -1.607383604e-04f, -1.609184382e-04f, -1.610982236e-04f,
--1.612777164e-04f, -1.614569163e-04f, -1.616358229e-04f, -1.618144359e-04f, -1.619927552e-04f, -1.621707804e-04f, -1.623485113e-04f, -1.625259474e-04f, -1.627030886e-04f, -1.628799346e-04f,
--1.630564851e-04f, -1.632327398e-04f, -1.634086985e-04f, -1.635843608e-04f, -1.637597264e-04f, -1.639347952e-04f, -1.641095667e-04f, -1.642840408e-04f, -1.644582171e-04f, -1.646320954e-04f,
--1.648056754e-04f, -1.649789568e-04f, -1.651519393e-04f, -1.653246228e-04f, -1.654970068e-04f, -1.656690911e-04f, -1.658408755e-04f, -1.660123596e-04f, -1.661835432e-04f, -1.663544261e-04f,
--1.665250079e-04f, -1.666952884e-04f, -1.668652673e-04f, -1.670349443e-04f, -1.672043192e-04f, -1.673733917e-04f, -1.675421615e-04f, -1.677106284e-04f, -1.678787921e-04f, -1.680466523e-04f,
--1.682142088e-04f, -1.683814612e-04f, -1.685484094e-04f, -1.687150531e-04f, -1.688813920e-04f, -1.690474258e-04f, -1.692131542e-04f, -1.693785771e-04f, -1.695436941e-04f, -1.697085051e-04f,
--1.698730096e-04f, -1.700372075e-04f, -1.702010985e-04f, -1.703646824e-04f, -1.705279588e-04f, -1.706909276e-04f, -1.708535884e-04f, -1.710159411e-04f, -1.711779853e-04f, -1.713397208e-04f,
--1.715011474e-04f, -1.716622647e-04f, -1.718230726e-04f, -1.719835708e-04f, -1.721437590e-04f, -1.723036370e-04f, -1.724632045e-04f, -1.726224612e-04f, -1.727814070e-04f, -1.729400416e-04f,
--1.730983647e-04f, -1.732563760e-04f, -1.734140754e-04f, -1.735714625e-04f, -1.737285372e-04f, -1.738852992e-04f, -1.740417482e-04f, -1.741978839e-04f, -1.743537063e-04f, -1.745092149e-04f,
--1.746644095e-04f, -1.748192900e-04f, -1.749738560e-04f, -1.751281074e-04f, -1.752820438e-04f, -1.754356651e-04f, -1.755889710e-04f, -1.757419612e-04f, -1.758946355e-04f, -1.760469938e-04f,
--1.761990356e-04f, -1.763507609e-04f, -1.765021693e-04f, -1.766532607e-04f, -1.768040347e-04f, -1.769544912e-04f, -1.771046299e-04f, -1.772544506e-04f, -1.774039530e-04f, -1.775531370e-04f,
--1.777020022e-04f, -1.778505485e-04f, -1.779987757e-04f, -1.781466834e-04f, -1.782942714e-04f, -1.784415396e-04f, -1.785884877e-04f, -1.787351154e-04f, -1.788814226e-04f, -1.790274090e-04f,
--1.791730744e-04f, -1.793184185e-04f, -1.794634412e-04f, -1.796081421e-04f, -1.797525212e-04f, -1.798965781e-04f, -1.800403126e-04f, -1.801837246e-04f, -1.803268137e-04f, -1.804695798e-04f,
--1.806120226e-04f, -1.807541420e-04f, -1.808959377e-04f, -1.810374094e-04f, -1.811785570e-04f, -1.813193802e-04f, -1.814598789e-04f, -1.816000528e-04f, -1.817399016e-04f, -1.818794253e-04f,
--1.820186235e-04f, -1.821574960e-04f, -1.822960427e-04f, -1.824342632e-04f, -1.825721575e-04f, -1.827097253e-04f, -1.828469663e-04f, -1.829838804e-04f, -1.831204674e-04f, -1.832567270e-04f,
--1.833926590e-04f, -1.835282633e-04f, -1.836635395e-04f, -1.837984876e-04f, -1.839331072e-04f, -1.840673983e-04f, -1.842013605e-04f, -1.843349938e-04f, -1.844682977e-04f, -1.846012723e-04f,
--1.847339172e-04f, -1.848662323e-04f, -1.849982173e-04f, -1.851298721e-04f, -1.852611965e-04f, -1.853921902e-04f, -1.855228530e-04f, -1.856531848e-04f, -1.857831854e-04f, -1.859128545e-04f,
--1.860421919e-04f, -1.861711975e-04f, -1.862998711e-04f, -1.864282124e-04f, -1.865562214e-04f, -1.866838976e-04f, -1.868112411e-04f, -1.869382515e-04f, -1.870649287e-04f, -1.871912726e-04f,
--1.873172828e-04f, -1.874429592e-04f, -1.875683017e-04f, -1.876933100e-04f, -1.878179839e-04f, -1.879423233e-04f, -1.880663279e-04f, -1.881899976e-04f, -1.883133322e-04f, -1.884363315e-04f,
--1.885589954e-04f, -1.886813235e-04f, -1.888033158e-04f, -1.889249720e-04f, -1.890462920e-04f, -1.891672756e-04f, -1.892879226e-04f, -1.894082329e-04f, -1.895282062e-04f, -1.896478423e-04f,
--1.897671411e-04f, -1.898861025e-04f, -1.900047261e-04f, -1.901230119e-04f, -1.902409596e-04f, -1.903585692e-04f, -1.904758403e-04f, -1.905927729e-04f, -1.907093668e-04f, -1.908256217e-04f,
--1.909415376e-04f, -1.910571141e-04f, -1.911723513e-04f, -1.912872488e-04f, -1.914018066e-04f, -1.915160243e-04f, -1.916299020e-04f, -1.917434394e-04f, -1.918566363e-04f, -1.919694926e-04f,
--1.920820081e-04f, -1.921941826e-04f, -1.923060159e-04f, -1.924175080e-04f, -1.925286586e-04f, -1.926394675e-04f, -1.927499347e-04f, -1.928600599e-04f, -1.929698430e-04f, -1.930792837e-04f,
--1.931883821e-04f, -1.932971378e-04f, -1.934055507e-04f, -1.935136207e-04f, -1.936213476e-04f, -1.937287312e-04f, -1.938357714e-04f, -1.939424681e-04f, -1.940488210e-04f, -1.941548300e-04f,
--1.942604950e-04f, -1.943658158e-04f, -1.944707922e-04f, -1.945754241e-04f, -1.946797114e-04f, -1.947836538e-04f, -1.948872513e-04f, -1.949905037e-04f, -1.950934107e-04f, -1.951959724e-04f,
--1.952981884e-04f, -1.954000588e-04f, -1.955015833e-04f, -1.956027617e-04f, -1.957035940e-04f, -1.958040800e-04f, -1.959042195e-04f, -1.960040124e-04f, -1.961034585e-04f, -1.962025578e-04f,
--1.963013099e-04f, -1.963997150e-04f, -1.964977726e-04f, -1.965954828e-04f, -1.966928454e-04f, -1.967898603e-04f, -1.968865272e-04f, -1.969828461e-04f, -1.970788168e-04f, -1.971744392e-04f,
--1.972697132e-04f, -1.973646386e-04f, -1.974592152e-04f, -1.975534430e-04f, -1.976473218e-04f, -1.977408514e-04f, -1.978340318e-04f, -1.979268628e-04f, -1.980193443e-04f, -1.981114760e-04f,
--1.982032580e-04f, -1.982946901e-04f, -1.983857721e-04f, -1.984765039e-04f, -1.985668854e-04f, -1.986569164e-04f, -1.987465968e-04f, -1.988359266e-04f, -1.989249055e-04f, -1.990135335e-04f,
--1.991018104e-04f, -1.991897360e-04f, -1.992773104e-04f, -1.993645332e-04f, -1.994514045e-04f, -1.995379241e-04f, -1.996240919e-04f, -1.997099077e-04f, -1.997953715e-04f, -1.998804830e-04f,
--1.999652423e-04f, -2.000496491e-04f, -2.001337034e-04f, -2.002174051e-04f, -2.003007539e-04f, -2.003837499e-04f, -2.004663928e-04f, -2.005486826e-04f, -2.006306192e-04f, -2.007122024e-04f,
--2.007934321e-04f, -2.008743083e-04f, -2.009548308e-04f, -2.010349995e-04f, -2.011148142e-04f, -2.011942749e-04f, -2.012733815e-04f, -2.013521339e-04f, -2.014305319e-04f, -2.015085754e-04f,
--2.015862644e-04f, -2.016635986e-04f, -2.017405782e-04f, -2.018172028e-04f, -2.018934724e-04f, -2.019693869e-04f, -2.020449463e-04f, -2.021201503e-04f, -2.021949990e-04f, -2.022694921e-04f,
--2.023436296e-04f, -2.024174114e-04f, -2.024908374e-04f, -2.025639075e-04f, -2.026366217e-04f, -2.027089797e-04f, -2.027809815e-04f, -2.028526270e-04f, -2.029239161e-04f, -2.029948487e-04f,
--2.030654248e-04f, -2.031356442e-04f, -2.032055068e-04f, -2.032750125e-04f, -2.033441613e-04f, -2.034129531e-04f, -2.034813877e-04f, -2.035494651e-04f, -2.036171852e-04f, -2.036845479e-04f,
--2.037515530e-04f, -2.038182006e-04f, -2.038844906e-04f, -2.039504227e-04f, -2.040159971e-04f, -2.040812135e-04f, -2.041460719e-04f, -2.042105722e-04f, -2.042747143e-04f, -2.043384982e-04f,
--2.044019237e-04f, -2.044649908e-04f, -2.045276994e-04f, -2.045900494e-04f, -2.046520408e-04f, -2.047136734e-04f, -2.047749471e-04f, -2.048358620e-04f, -2.048964179e-04f, -2.049566148e-04f,
--2.050164525e-04f, -2.050759310e-04f, -2.051350502e-04f, -2.051938101e-04f, -2.052522105e-04f, -2.053102515e-04f, -2.053679328e-04f, -2.054252546e-04f, -2.054822166e-04f, -2.055388188e-04f,
--2.055950612e-04f, -2.056509436e-04f, -2.057064661e-04f, -2.057616285e-04f, -2.058164307e-04f, -2.058708728e-04f, -2.059249546e-04f, -2.059786761e-04f, -2.060320372e-04f, -2.060850379e-04f,
--2.061376780e-04f, -2.061899575e-04f, -2.062418764e-04f, -2.062934346e-04f, -2.063446321e-04f, -2.063954687e-04f, -2.064459444e-04f, -2.064960592e-04f, -2.065458130e-04f, -2.065952058e-04f,
--2.066442374e-04f, -2.066929078e-04f, -2.067412170e-04f, -2.067891650e-04f, -2.068367516e-04f, -2.068839768e-04f, -2.069308405e-04f, -2.069773428e-04f, -2.070234835e-04f, -2.070692626e-04f,
--2.071146801e-04f, -2.071597358e-04f, -2.072044298e-04f, -2.072487620e-04f, -2.072927324e-04f, -2.073363408e-04f, -2.073795874e-04f, -2.074224719e-04f, -2.074649944e-04f, -2.075071548e-04f,
--2.075489531e-04f, -2.075903892e-04f, -2.076314631e-04f, -2.076721748e-04f, -2.077125241e-04f, -2.077525111e-04f, -2.077921358e-04f, -2.078313980e-04f, -2.078702978e-04f, -2.079088350e-04f,
--2.079470098e-04f, -2.079848219e-04f, -2.080222715e-04f, -2.080593584e-04f, -2.080960826e-04f, -2.081324441e-04f, -2.081684429e-04f, -2.082040788e-04f, -2.082393520e-04f, -2.082742623e-04f,
--2.083088097e-04f, -2.083429942e-04f, -2.083768158e-04f, -2.084102744e-04f, -2.084433700e-04f, -2.084761025e-04f, -2.085084720e-04f, -2.085404784e-04f, -2.085721217e-04f, -2.086034019e-04f,
--2.086343189e-04f, -2.086648727e-04f, -2.086950633e-04f, -2.087248906e-04f, -2.087543547e-04f, -2.087834555e-04f, -2.088121930e-04f, -2.088405671e-04f, -2.088685780e-04f, -2.088962254e-04f,
--2.089235095e-04f, -2.089504301e-04f, -2.089769874e-04f, -2.090031812e-04f, -2.090290115e-04f, -2.090544783e-04f, -2.090795817e-04f, -2.091043216e-04f, -2.091286979e-04f, -2.091527108e-04f,
--2.091763600e-04f, -2.091996458e-04f, -2.092225679e-04f, -2.092451265e-04f, -2.092673214e-04f, -2.092891528e-04f, -2.093106206e-04f, -2.093317247e-04f, -2.093524653e-04f, -2.093728422e-04f,
--2.093928554e-04f, -2.094125050e-04f, -2.094317910e-04f, -2.094507133e-04f, -2.094692719e-04f, -2.094874669e-04f, -2.095052982e-04f, -2.095227658e-04f, -2.095398698e-04f, -2.095566101e-04f,
--2.095729867e-04f, -2.095889997e-04f, -2.096046490e-04f, -2.096199346e-04f, -2.096348565e-04f, -2.096494148e-04f, -2.096636094e-04f, -2.096774404e-04f, -2.096909077e-04f, -2.097040114e-04f,
--2.097167514e-04f, -2.097291278e-04f, -2.097411406e-04f, -2.097527897e-04f, -2.097640752e-04f, -2.097749972e-04f, -2.097855555e-04f, -2.097957503e-04f, -2.098055815e-04f, -2.098150491e-04f,
--2.098241532e-04f, -2.098328937e-04f, -2.098412707e-04f, -2.098492843e-04f, -2.098569343e-04f, -2.098642208e-04f, -2.098711439e-04f, -2.098777036e-04f, -2.098838998e-04f, -2.098897326e-04f,
--2.098952020e-04f, -2.099003081e-04f, -2.099050508e-04f, -2.099094302e-04f, -2.099134462e-04f, -2.099170990e-04f, -2.099203885e-04f, -2.099233147e-04f, -2.099258778e-04f, -2.099280776e-04f,
--2.099299143e-04f, -2.099313878e-04f, -2.099324982e-04f, -2.099332455e-04f, -2.099336298e-04f, -2.099336510e-04f, -2.099333092e-04f, -2.099326044e-04f, -2.099315367e-04f, -2.099301060e-04f,
--2.099283125e-04f, -2.099261561e-04f, -2.099236369e-04f, -2.099207549e-04f, -2.099175101e-04f, -2.099139026e-04f, -2.099099324e-04f, -2.099055996e-04f, -2.099009041e-04f, -2.098958460e-04f,
--2.098904255e-04f, -2.098846424e-04f, -2.098784968e-04f, -2.098719888e-04f, -2.098651184e-04f, -2.098578857e-04f, -2.098502907e-04f, -2.098423334e-04f, -2.098340138e-04f, -2.098253321e-04f,
--2.098162883e-04f, -2.098068823e-04f, -2.097971143e-04f, -2.097869843e-04f, -2.097764924e-04f, -2.097656385e-04f, -2.097544228e-04f, -2.097428453e-04f, -2.097309060e-04f, -2.097186049e-04f,
--2.097059422e-04f, -2.096929179e-04f, -2.096795320e-04f, -2.096657846e-04f, -2.096516758e-04f, -2.096372055e-04f, -2.096223739e-04f, -2.096071810e-04f, -2.095916268e-04f, -2.095757114e-04f,
--2.095594349e-04f, -2.095427973e-04f, -2.095257987e-04f, -2.095084391e-04f, -2.094907186e-04f, -2.094726373e-04f, -2.094541952e-04f, -2.094353923e-04f, -2.094162288e-04f, -2.093967047e-04f,
--2.093768200e-04f, -2.093565749e-04f, -2.093359693e-04f, -2.093150034e-04f, -2.092936772e-04f, -2.092719908e-04f, -2.092499442e-04f, -2.092275375e-04f, -2.092047708e-04f, -2.091816442e-04f,
--2.091581576e-04f, -2.091343112e-04f, -2.091101051e-04f, -2.090855393e-04f, -2.090606139e-04f, -2.090353290e-04f, -2.090096846e-04f, -2.089836808e-04f, -2.089573177e-04f, -2.089305953e-04f,
--2.089035138e-04f, -2.088760731e-04f, -2.088482735e-04f, -2.088201149e-04f, -2.087915974e-04f, -2.087627212e-04f, -2.087334862e-04f, -2.087038926e-04f, -2.086739404e-04f, -2.086436298e-04f,
--2.086129608e-04f, -2.085819335e-04f, -2.085505479e-04f, -2.085188042e-04f, -2.084867025e-04f, -2.084542427e-04f, -2.084214251e-04f, -2.083882496e-04f, -2.083547164e-04f, -2.083208256e-04f,
--2.082865772e-04f, -2.082519714e-04f, -2.082170082e-04f, -2.081816877e-04f, -2.081460100e-04f, -2.081099752e-04f, -2.080735834e-04f, -2.080368346e-04f, -2.079997290e-04f, -2.079622667e-04f,
--2.079244477e-04f, -2.078862721e-04f, -2.078477401e-04f, -2.078088517e-04f, -2.077696071e-04f, -2.077300063e-04f, -2.076900493e-04f, -2.076497364e-04f, -2.076090677e-04f, -2.075680431e-04f,
--2.075266628e-04f, -2.074849270e-04f, -2.074428356e-04f, -2.074003889e-04f, -2.073575869e-04f, -2.073144297e-04f, -2.072709174e-04f, -2.072270501e-04f, -2.071828280e-04f, -2.071382511e-04f,
--2.070933195e-04f, -2.070480334e-04f, -2.070023928e-04f, -2.069563979e-04f, -2.069100487e-04f, -2.068633454e-04f, -2.068162880e-04f, -2.067688768e-04f, -2.067211117e-04f, -2.066729930e-04f,
--2.066245207e-04f, -2.065756949e-04f, -2.065265157e-04f, -2.064769833e-04f, -2.064270978e-04f, -2.063768592e-04f, -2.063262677e-04f, -2.062753235e-04f, -2.062240266e-04f, -2.061723771e-04f,
--2.061203752e-04f, -2.060680209e-04f, -2.060153145e-04f, -2.059622560e-04f, -2.059088455e-04f, -2.058550832e-04f, -2.058009691e-04f, -2.057465034e-04f, -2.056916863e-04f, -2.056365178e-04f,
--2.055809981e-04f, -2.055251272e-04f, -2.054689054e-04f, -2.054123327e-04f, -2.053554093e-04f, -2.052981352e-04f, -2.052405107e-04f, -2.051825358e-04f, -2.051242107e-04f, -2.050655355e-04f,
--2.050065103e-04f, -2.049471353e-04f, -2.048874105e-04f, -2.048273362e-04f, -2.047669124e-04f, -2.047061394e-04f, -2.046450171e-04f, -2.045835458e-04f, -2.045217255e-04f, -2.044595565e-04f,
--2.043970388e-04f, -2.043341726e-04f, -2.042709581e-04f, -2.042073953e-04f, -2.041434844e-04f, -2.040792255e-04f, -2.040146188e-04f, -2.039496644e-04f, -2.038843625e-04f, -2.038187131e-04f,
--2.037527165e-04f, -2.036863728e-04f, -2.036196821e-04f, -2.035526446e-04f, -2.034852603e-04f, -2.034175295e-04f, -2.033494523e-04f, -2.032810288e-04f, -2.032122592e-04f, -2.031431437e-04f,
--2.030736823e-04f, -2.030038752e-04f, -2.029337226e-04f, -2.028632247e-04f, -2.027923815e-04f, -2.027211932e-04f, -2.026496600e-04f, -2.025777820e-04f, -2.025055593e-04f, -2.024329922e-04f,
--2.023600808e-04f, -2.022868252e-04f, -2.022132256e-04f, -2.021392821e-04f, -2.020649949e-04f, -2.019903642e-04f, -2.019153900e-04f, -2.018400726e-04f, -2.017644122e-04f, -2.016884088e-04f,
--2.016120626e-04f, -2.015353739e-04f, -2.014583427e-04f, -2.013809692e-04f, -2.013032535e-04f, -2.012251959e-04f, -2.011467966e-04f, -2.010680555e-04f, -2.009889730e-04f, -2.009095492e-04f,
--2.008297842e-04f, -2.007496783e-04f, -2.006692315e-04f, -2.005884440e-04f, -2.005073161e-04f, -2.004258479e-04f, -2.003440395e-04f, -2.002618911e-04f, -2.001794029e-04f, -2.000965751e-04f,
--2.000134078e-04f, -1.999299012e-04f, -1.998460554e-04f, -1.997618707e-04f, -1.996773472e-04f, -1.995924851e-04f, -1.995072845e-04f, -1.994217457e-04f, -1.993358688e-04f, -1.992496539e-04f,
--1.991631013e-04f, -1.990762112e-04f, -1.989889836e-04f, -1.989014189e-04f, -1.988135171e-04f, -1.987252784e-04f, -1.986367031e-04f, -1.985477913e-04f, -1.984585431e-04f, -1.983689588e-04f,
--1.982790386e-04f, -1.981887826e-04f, -1.980981910e-04f, -1.980072639e-04f, -1.979160017e-04f, -1.978244044e-04f, -1.977324723e-04f, -1.976402055e-04f, -1.975476042e-04f, -1.974546686e-04f,
--1.973613990e-04f, -1.972677953e-04f, -1.971738580e-04f, -1.970795871e-04f, -1.969849828e-04f, -1.968900454e-04f, -1.967947750e-04f, -1.966991719e-04f, -1.966032361e-04f, -1.965069679e-04f,
--1.964103675e-04f, -1.963134352e-04f, -1.962161709e-04f, -1.961185751e-04f, -1.960206478e-04f, -1.959223893e-04f, -1.958237998e-04f, -1.957248794e-04f, -1.956256283e-04f, -1.955260468e-04f,
--1.954261351e-04f, -1.953258933e-04f, -1.952253217e-04f, -1.951244204e-04f, -1.950231896e-04f, -1.949216296e-04f, -1.948197406e-04f, -1.947175227e-04f, -1.946149761e-04f, -1.945121011e-04f,
--1.944088979e-04f, -1.943053667e-04f, -1.942015076e-04f, -1.940973209e-04f, -1.939928067e-04f, -1.938879654e-04f, -1.937827971e-04f, -1.936773019e-04f, -1.935714802e-04f, -1.934653321e-04f,
--1.933588579e-04f, -1.932520576e-04f, -1.931449317e-04f, -1.930374801e-04f, -1.929297033e-04f, -1.928216014e-04f, -1.927131745e-04f, -1.926044230e-04f, -1.924953469e-04f, -1.923859467e-04f,
--1.922762223e-04f, -1.921661742e-04f, -1.920558024e-04f, -1.919451072e-04f, -1.918340889e-04f, -1.917227476e-04f, -1.916110835e-04f, -1.914990969e-04f, -1.913867880e-04f, -1.912741570e-04f,
--1.911612042e-04f, -1.910479297e-04f, -1.909343337e-04f, -1.908204166e-04f, -1.907061785e-04f, -1.905916196e-04f, -1.904767402e-04f, -1.903615405e-04f, -1.902460207e-04f, -1.901301810e-04f,
--1.900140217e-04f, -1.898975430e-04f, -1.897807451e-04f, -1.896636282e-04f, -1.895461926e-04f, -1.894284385e-04f, -1.893103662e-04f, -1.891919757e-04f, -1.890732675e-04f, -1.889542417e-04f,
--1.888348986e-04f, -1.887152383e-04f, -1.885952611e-04f, -1.884749673e-04f, -1.883543571e-04f, -1.882334306e-04f, -1.881121882e-04f, -1.879906301e-04f, -1.878687565e-04f, -1.877465677e-04f,
--1.876240638e-04f, -1.875012452e-04f, -1.873781120e-04f, -1.872546645e-04f, -1.871309030e-04f, -1.870068276e-04f, -1.868824387e-04f, -1.867577364e-04f, -1.866327210e-04f, -1.865073927e-04f,
--1.863817518e-04f, -1.862557985e-04f, -1.861295331e-04f, -1.860029558e-04f, -1.858760668e-04f, -1.857488665e-04f, -1.856213549e-04f, -1.854935325e-04f, -1.853653994e-04f, -1.852369558e-04f,
--1.851082021e-04f, -1.849791384e-04f, -1.848497651e-04f, -1.847200823e-04f, -1.845900903e-04f, -1.844597894e-04f, -1.843291798e-04f, -1.841982617e-04f, -1.840670355e-04f, -1.839355013e-04f,
--1.838036595e-04f, -1.836715102e-04f, -1.835390537e-04f, -1.834062903e-04f, -1.832732202e-04f, -1.831398438e-04f, -1.830061611e-04f, -1.828721725e-04f, -1.827378783e-04f, -1.826032787e-04f,
--1.824683740e-04f, -1.823331643e-04f, -1.821976501e-04f, -1.820618314e-04f, -1.819257087e-04f, -1.817892821e-04f, -1.816525520e-04f, -1.815155185e-04f, -1.813781819e-04f, -1.812405426e-04f,
--1.811026006e-04f, -1.809643565e-04f, -1.808258103e-04f, -1.806869623e-04f, -1.805478128e-04f, -1.804083622e-04f, -1.802686105e-04f, -1.801285582e-04f, -1.799882054e-04f, -1.798475525e-04f,
--1.797065997e-04f, -1.795653472e-04f, -1.794237954e-04f, -1.792819445e-04f, -1.791397948e-04f, -1.789973465e-04f, -1.788545999e-04f, -1.787115554e-04f, -1.785682130e-04f, -1.784245733e-04f,
--1.782806363e-04f, -1.781364023e-04f, -1.779918718e-04f, -1.778470448e-04f, -1.777019218e-04f, -1.775565029e-04f, -1.774107884e-04f, -1.772647787e-04f, -1.771184739e-04f, -1.769718745e-04f,
--1.768249806e-04f, -1.766777925e-04f, -1.765303105e-04f, -1.763825348e-04f, -1.762344659e-04f, -1.760861039e-04f, -1.759374491e-04f, -1.757885018e-04f, -1.756392622e-04f, -1.754897308e-04f,
--1.753399076e-04f, -1.751897931e-04f, -1.750393875e-04f, -1.748886911e-04f, -1.747377042e-04f, -1.745864270e-04f, -1.744348599e-04f, -1.742830031e-04f, -1.741308569e-04f, -1.739784216e-04f,
--1.738256975e-04f, -1.736726848e-04f, -1.735193839e-04f, -1.733657951e-04f, -1.732119186e-04f, -1.730577547e-04f, -1.729033037e-04f, -1.727485660e-04f, -1.725935417e-04f, -1.724382312e-04f,
--1.722826348e-04f, -1.721267528e-04f, -1.719705854e-04f, -1.718141329e-04f, -1.716573958e-04f, -1.715003741e-04f, -1.713430683e-04f, -1.711854786e-04f, -1.710276053e-04f, -1.708694488e-04f,
--1.707110092e-04f, -1.705522870e-04f, -1.703932824e-04f, -1.702339956e-04f, -1.700744271e-04f, -1.699145771e-04f, -1.697544459e-04f, -1.695940338e-04f, -1.694333410e-04f, -1.692723680e-04f,
--1.691111150e-04f, -1.689495822e-04f, -1.687877701e-04f, -1.686256789e-04f, -1.684633088e-04f, -1.683006603e-04f, -1.681377336e-04f, -1.679745290e-04f, -1.678110468e-04f, -1.676472873e-04f,
--1.674832509e-04f, -1.673189378e-04f, -1.671543484e-04f, -1.669894828e-04f, -1.668243416e-04f, -1.666589249e-04f, -1.664932331e-04f, -1.663272664e-04f, -1.661610252e-04f, -1.659945099e-04f,
--1.658277206e-04f, -1.656606577e-04f, -1.654933216e-04f, -1.653257125e-04f, -1.651578308e-04f, -1.649896767e-04f, -1.648212506e-04f, -1.646525527e-04f, -1.644835835e-04f, -1.643143432e-04f,
--1.641448321e-04f, -1.639750505e-04f, -1.638049988e-04f, -1.636346773e-04f, -1.634640862e-04f, -1.632932260e-04f, -1.631220969e-04f, -1.629506992e-04f, -1.627790332e-04f, -1.626070994e-04f,
--1.624348979e-04f, -1.622624291e-04f, -1.620896934e-04f, -1.619166910e-04f, -1.617434223e-04f, -1.615698876e-04f, -1.613960872e-04f, -1.612220214e-04f, -1.610476905e-04f, -1.608730950e-04f,
--1.606982350e-04f, -1.605231110e-04f, -1.603477232e-04f, -1.601720720e-04f, -1.599961577e-04f, -1.598199806e-04f, -1.596435410e-04f, -1.594668394e-04f, -1.592898759e-04f, -1.591126509e-04f,
--1.589351648e-04f, -1.587574179e-04f, -1.585794105e-04f, -1.584011429e-04f, -1.582226155e-04f, -1.580438286e-04f, -1.578647825e-04f, -1.576854775e-04f, -1.575059141e-04f, -1.573260924e-04f,
--1.571460129e-04f, -1.569656759e-04f, -1.567850817e-04f, -1.566042307e-04f, -1.564231231e-04f, -1.562417593e-04f, -1.560601397e-04f, -1.558782645e-04f, -1.556961342e-04f, -1.555137490e-04f,
--1.553311093e-04f, -1.551482154e-04f, -1.549650677e-04f, -1.547816665e-04f, -1.545980121e-04f, -1.544141048e-04f, -1.542299451e-04f, -1.540455332e-04f, -1.538608695e-04f, -1.536759543e-04f,
--1.534907880e-04f, -1.533053709e-04f, -1.531197033e-04f, -1.529337856e-04f, -1.527476182e-04f, -1.525612013e-04f, -1.523745353e-04f, -1.521876206e-04f, -1.520004574e-04f, -1.518130462e-04f,
--1.516253873e-04f, -1.514374810e-04f, -1.512493277e-04f, -1.510609277e-04f, -1.508722813e-04f, -1.506833890e-04f, -1.504942510e-04f, -1.503048677e-04f, -1.501152395e-04f, -1.499253666e-04f,
--1.497352495e-04f, -1.495448885e-04f, -1.493542839e-04f, -1.491634361e-04f, -1.489723455e-04f, -1.487810123e-04f, -1.485894370e-04f, -1.483976198e-04f, -1.482055612e-04f, -1.480132615e-04f,
--1.478207210e-04f, -1.476279401e-04f, -1.474349191e-04f, -1.472416585e-04f, -1.470481585e-04f, -1.468544195e-04f, -1.466604418e-04f, -1.464662259e-04f, -1.462717720e-04f, -1.460770806e-04f,
--1.458821519e-04f, -1.456869864e-04f, -1.454915843e-04f, -1.452959461e-04f, -1.451000721e-04f, -1.449039627e-04f, -1.447076182e-04f, -1.445110390e-04f, -1.443142254e-04f, -1.441171778e-04f,
--1.439198965e-04f, -1.437223820e-04f, -1.435246345e-04f, -1.433266545e-04f, -1.431284422e-04f, -1.429299981e-04f, -1.427313226e-04f, -1.425324159e-04f, -1.423332784e-04f, -1.421339106e-04f,
--1.419343127e-04f, -1.417344851e-04f, -1.415344283e-04f, -1.413341425e-04f, -1.411336281e-04f, -1.409328855e-04f, -1.407319151e-04f, -1.405307172e-04f, -1.403292922e-04f, -1.401276404e-04f,
--1.399257622e-04f, -1.397236580e-04f, -1.395213282e-04f, -1.393187731e-04f, -1.391159931e-04f, -1.389129885e-04f, -1.387097598e-04f, -1.385063073e-04f, -1.383026313e-04f, -1.380987322e-04f,
--1.378946105e-04f, -1.376902664e-04f, -1.374857004e-04f, -1.372809128e-04f, -1.370759040e-04f, -1.368706743e-04f, -1.366652242e-04f, -1.364595540e-04f, -1.362536641e-04f, -1.360475548e-04f,
--1.358412265e-04f, -1.356346797e-04f, -1.354279146e-04f, -1.352209316e-04f, -1.350137312e-04f, -1.348063137e-04f, -1.345986795e-04f, -1.343908289e-04f, -1.341827624e-04f, -1.339744802e-04f,
--1.337659829e-04f, -1.335572707e-04f, -1.333483440e-04f, -1.331392033e-04f, -1.329298488e-04f, -1.327202811e-04f, -1.325105004e-04f, -1.323005071e-04f, -1.320903016e-04f, -1.318798843e-04f,
--1.316692556e-04f, -1.314584159e-04f, -1.312473655e-04f, -1.310361048e-04f, -1.308246342e-04f, -1.306129541e-04f, -1.304010649e-04f, -1.301889669e-04f, -1.299766606e-04f, -1.297641462e-04f,
--1.295514243e-04f, -1.293384951e-04f, -1.291253592e-04f, -1.289120167e-04f, -1.286984682e-04f, -1.284847141e-04f, -1.282707546e-04f, -1.280565903e-04f, -1.278422214e-04f, -1.276276484e-04f,
--1.274128717e-04f, -1.271978916e-04f, -1.269827085e-04f, -1.267673229e-04f, -1.265517350e-04f, -1.263359454e-04f, -1.261199544e-04f, -1.259037623e-04f, -1.256873696e-04f, -1.254707767e-04f,
--1.252539839e-04f, -1.250369916e-04f, -1.248198003e-04f, -1.246024103e-04f, -1.243848220e-04f, -1.241670359e-04f, -1.239490522e-04f, -1.237308714e-04f, -1.235124939e-04f, -1.232939200e-04f,
--1.230751503e-04f, -1.228561850e-04f, -1.226370245e-04f, -1.224176694e-04f, -1.221981198e-04f, -1.219783763e-04f, -1.217584393e-04f, -1.215383090e-04f, -1.213179860e-04f, -1.210974707e-04f,
--1.208767633e-04f, -1.206558644e-04f, -1.204347743e-04f, -1.202134934e-04f, -1.199920221e-04f, -1.197703608e-04f, -1.195485099e-04f, -1.193264699e-04f, -1.191042410e-04f, -1.188818238e-04f,
--1.186592185e-04f, -1.184364257e-04f, -1.182134456e-04f, -1.179902788e-04f, -1.177669256e-04f, -1.175433864e-04f, -1.173196616e-04f, -1.170957516e-04f, -1.168716568e-04f, -1.166473776e-04f,
--1.164229145e-04f, -1.161982677e-04f, -1.159734378e-04f, -1.157484251e-04f, -1.155232301e-04f, -1.152978531e-04f, -1.150722945e-04f, -1.148465547e-04f, -1.146206342e-04f, -1.143945334e-04f,
--1.141682526e-04f, -1.139417923e-04f, -1.137151528e-04f, -1.134883347e-04f, -1.132613382e-04f, -1.130341637e-04f, -1.128068118e-04f, -1.125792828e-04f, -1.123515771e-04f, -1.121236951e-04f,
--1.118956373e-04f, -1.116674040e-04f, -1.114389956e-04f, -1.112104125e-04f, -1.109816553e-04f, -1.107527242e-04f, -1.105236197e-04f, -1.102943421e-04f, -1.100648920e-04f, -1.098352697e-04f,
--1.096054756e-04f, -1.093755101e-04f, -1.091453737e-04f, -1.089150668e-04f, -1.086845897e-04f, -1.084539429e-04f, -1.082231267e-04f, -1.079921417e-04f, -1.077609882e-04f, -1.075296666e-04f,
--1.072981774e-04f, -1.070665209e-04f, -1.068346976e-04f, -1.066027079e-04f, -1.063705522e-04f, -1.061382309e-04f, -1.059057445e-04f, -1.056730932e-04f, -1.054402777e-04f, -1.052072982e-04f,
--1.049741552e-04f, -1.047408491e-04f, -1.045073803e-04f, -1.042737493e-04f, -1.040399564e-04f, -1.038060021e-04f, -1.035718868e-04f, -1.033376110e-04f, -1.031031749e-04f, -1.028685791e-04f,
--1.026338239e-04f, -1.023989099e-04f, -1.021638373e-04f, -1.019286067e-04f, -1.016932184e-04f, -1.014576728e-04f, -1.012219705e-04f, -1.009861117e-04f, -1.007500969e-04f, -1.005139266e-04f,
--1.002776012e-04f, -1.000411211e-04f, -9.980448660e-05f, -9.956769827e-05f, -9.933075649e-05f, -9.909366168e-05f, -9.885641426e-05f, -9.861901466e-05f, -9.838146329e-05f, -9.814376058e-05f,
--9.790590695e-05f, -9.766790283e-05f, -9.742974864e-05f, -9.719144480e-05f, -9.695299174e-05f, -9.671438988e-05f, -9.647563964e-05f, -9.623674146e-05f, -9.599769575e-05f, -9.575850294e-05f,
--9.551916346e-05f, -9.527967773e-05f, -9.504004618e-05f, -9.480026923e-05f, -9.456034731e-05f, -9.432028084e-05f, -9.408007026e-05f, -9.383971599e-05f, -9.359921845e-05f, -9.335857808e-05f,
--9.311779530e-05f, -9.287687053e-05f, -9.263580422e-05f, -9.239459678e-05f, -9.215324864e-05f, -9.191176024e-05f, -9.167013200e-05f, -9.142836434e-05f, -9.118645771e-05f, -9.094441252e-05f,
--9.070222921e-05f, -9.045990821e-05f, -9.021744995e-05f, -8.997485486e-05f, -8.973212336e-05f, -8.948925590e-05f, -8.924625289e-05f, -8.900311478e-05f, -8.875984198e-05f, -8.851643494e-05f,
--8.827289409e-05f, -8.802921985e-05f, -8.778541266e-05f, -8.754147296e-05f, -8.729740117e-05f, -8.705319772e-05f, -8.680886305e-05f, -8.656439760e-05f, -8.631980179e-05f, -8.607507606e-05f,
--8.583022084e-05f, -8.558523657e-05f, -8.534012367e-05f, -8.509488260e-05f, -8.484951377e-05f, -8.460401762e-05f, -8.435839459e-05f, -8.411264511e-05f, -8.386676962e-05f, -8.362076856e-05f,
--8.337464235e-05f, -8.312839143e-05f, -8.288201625e-05f, -8.263551723e-05f, -8.238889481e-05f, -8.214214943e-05f, -8.189528153e-05f, -8.164829153e-05f, -8.140117989e-05f, -8.115394703e-05f,
--8.090659339e-05f, -8.065911941e-05f, -8.041152553e-05f, -8.016381218e-05f, -7.991597981e-05f, -7.966802885e-05f, -7.941995973e-05f, -7.917177291e-05f, -7.892346881e-05f, -7.867504788e-05f,
--7.842651055e-05f, -7.817785726e-05f, -7.792908845e-05f, -7.768020457e-05f, -7.743120605e-05f, -7.718209333e-05f, -7.693286685e-05f, -7.668352705e-05f, -7.643407438e-05f, -7.618450926e-05f,
--7.593483215e-05f, -7.568504348e-05f, -7.543514369e-05f, -7.518513323e-05f, -7.493501253e-05f, -7.468478204e-05f, -7.443444221e-05f, -7.418399346e-05f, -7.393343624e-05f, -7.368277100e-05f,
--7.343199817e-05f, -7.318111820e-05f, -7.293013154e-05f, -7.267903861e-05f, -7.242783988e-05f, -7.217653577e-05f, -7.192512674e-05f, -7.167361322e-05f, -7.142199566e-05f, -7.117027450e-05f,
--7.091845018e-05f, -7.066652316e-05f, -7.041449387e-05f, -7.016236275e-05f, -6.991013026e-05f, -6.965779684e-05f, -6.940536292e-05f, -6.915282896e-05f, -6.890019540e-05f, -6.864746268e-05f,
--6.839463125e-05f, -6.814170156e-05f, -6.788867404e-05f, -6.763554915e-05f, -6.738232733e-05f, -6.712900903e-05f, -6.687559469e-05f, -6.662208476e-05f, -6.636847968e-05f, -6.611477990e-05f,
--6.586098587e-05f, -6.560709803e-05f, -6.535311683e-05f, -6.509904271e-05f, -6.484487613e-05f, -6.459061753e-05f, -6.433626736e-05f, -6.408182606e-05f, -6.382729408e-05f, -6.357267187e-05f,
--6.331795987e-05f, -6.306315854e-05f, -6.280826833e-05f, -6.255328967e-05f, -6.229822302e-05f, -6.204306882e-05f, -6.178782753e-05f, -6.153249960e-05f, -6.127708546e-05f, -6.102158557e-05f,
--6.076600038e-05f, -6.051033034e-05f, -6.025457590e-05f, -5.999873750e-05f, -5.974281559e-05f, -5.948681063e-05f, -5.923072306e-05f, -5.897455333e-05f, -5.871830189e-05f, -5.846196920e-05f,
--5.820555570e-05f, -5.794906184e-05f, -5.769248807e-05f, -5.743583484e-05f, -5.717910260e-05f, -5.692229181e-05f, -5.666540291e-05f, -5.640843635e-05f, -5.615139258e-05f, -5.589427206e-05f,
--5.563707524e-05f, -5.537980256e-05f, -5.512245447e-05f, -5.486503144e-05f, -5.460753390e-05f, -5.434996232e-05f, -5.409231713e-05f, -5.383459880e-05f, -5.357680778e-05f, -5.331894451e-05f,
--5.306100945e-05f, -5.280300305e-05f, -5.254492576e-05f, -5.228677804e-05f, -5.202856033e-05f, -5.177027309e-05f, -5.151191677e-05f, -5.125349182e-05f, -5.099499870e-05f, -5.073643785e-05f,
--5.047780974e-05f, -5.021911481e-05f, -4.996035352e-05f, -4.970152631e-05f, -4.944263364e-05f, -4.918367597e-05f, -4.892465375e-05f, -4.866556743e-05f, -4.840641746e-05f, -4.814720430e-05f,
--4.788792840e-05f, -4.762859021e-05f, -4.736919019e-05f, -4.710972879e-05f, -4.685020647e-05f, -4.659062367e-05f, -4.633098085e-05f, -4.607127848e-05f, -4.581151699e-05f, -4.555169684e-05f,
--4.529181850e-05f, -4.503188240e-05f, -4.477188901e-05f, -4.451183878e-05f, -4.425173217e-05f, -4.399156963e-05f, -4.373135160e-05f, -4.347107856e-05f, -4.321075095e-05f, -4.295036922e-05f,
--4.268993384e-05f, -4.242944526e-05f, -4.216890392e-05f, -4.190831029e-05f, -4.164766482e-05f, -4.138696797e-05f, -4.112622019e-05f, -4.086542193e-05f, -4.060457366e-05f, -4.034367582e-05f,
--4.008272887e-05f, -3.982173327e-05f, -3.956068947e-05f, -3.929959793e-05f, -3.903845910e-05f, -3.877727344e-05f, -3.851604140e-05f, -3.825476344e-05f, -3.799344001e-05f, -3.773207158e-05f,
--3.747065859e-05f, -3.720920150e-05f, -3.694770077e-05f, -3.668615685e-05f, -3.642457020e-05f, -3.616294128e-05f, -3.590127053e-05f, -3.563955842e-05f, -3.537780541e-05f, -3.511601194e-05f,
--3.485417847e-05f, -3.459230547e-05f, -3.433039338e-05f, -3.406844267e-05f, -3.380645378e-05f, -3.354442718e-05f, -3.328236332e-05f, -3.302026265e-05f, -3.275812564e-05f, -3.249595274e-05f,
--3.223374441e-05f, -3.197150110e-05f, -3.170922327e-05f, -3.144691137e-05f, -3.118456586e-05f, -3.092218720e-05f, -3.065977585e-05f, -3.039733226e-05f, -3.013485688e-05f, -2.987235018e-05f,
--2.960981261e-05f, -2.934724462e-05f, -2.908464668e-05f, -2.882201924e-05f, -2.855936276e-05f, -2.829667769e-05f, -2.803396449e-05f, -2.777122361e-05f, -2.750845552e-05f, -2.724566067e-05f,
--2.698283952e-05f, -2.671999252e-05f, -2.645712013e-05f, -2.619422280e-05f, -2.593130100e-05f, -2.566835518e-05f, -2.540538579e-05f, -2.514239330e-05f, -2.487937816e-05f, -2.461634083e-05f,
--2.435328176e-05f, -2.409020141e-05f, -2.382710023e-05f, -2.356397869e-05f, -2.330083725e-05f, -2.303767634e-05f, -2.277449645e-05f, -2.251129801e-05f, -2.224808149e-05f, -2.198484734e-05f,
--2.172159603e-05f, -2.145832800e-05f, -2.119504372e-05f, -2.093174363e-05f, -2.066842821e-05f, -2.040509790e-05f, -2.014175316e-05f, -1.987839445e-05f, -1.961502222e-05f, -1.935163693e-05f,
--1.908823904e-05f, -1.882482900e-05f, -1.856140728e-05f, -1.829797432e-05f, -1.803453058e-05f, -1.777107653e-05f, -1.750761261e-05f, -1.724413928e-05f, -1.698065701e-05f, -1.671716623e-05f,
--1.645366743e-05f, -1.619016104e-05f, -1.592664752e-05f, -1.566312734e-05f, -1.539960095e-05f, -1.513606880e-05f, -1.487253135e-05f, -1.460898905e-05f, -1.434544237e-05f, -1.408189176e-05f,
--1.381833768e-05f, -1.355478057e-05f, -1.329122091e-05f, -1.302765913e-05f, -1.276409571e-05f, -1.250053109e-05f, -1.223696574e-05f, -1.197340010e-05f, -1.170983463e-05f, -1.144626980e-05f,
--1.118270604e-05f, -1.091914383e-05f, -1.065558362e-05f, -1.039202586e-05f, -1.012847101e-05f, -9.864919520e-06f, -9.601371850e-06f, -9.337828455e-06f, -9.074289791e-06f, -8.810756313e-06f,
--8.547228475e-06f, -8.283706735e-06f, -8.020191546e-06f, -7.756683365e-06f, -7.493182645e-06f, -7.229689844e-06f, -6.966205415e-06f, -6.702729814e-06f, -6.439263496e-06f, -6.175806916e-06f,
--5.912360528e-06f, -5.648924788e-06f, -5.385500151e-06f, -5.122087070e-06f, -4.858686002e-06f, -4.595297400e-06f, -4.331921719e-06f, -4.068559413e-06f, -3.805210938e-06f, -3.541876747e-06f,
--3.278557296e-06f, -3.015253037e-06f, -2.751964426e-06f, -2.488691916e-06f, -2.225435961e-06f, -1.962197017e-06f, -1.698975536e-06f, -1.435771973e-06f, -1.172586781e-06f, -9.094204137e-07f,
--6.462733257e-07f, -3.831459700e-07f, -1.200388005e-07f, 1.430477296e-07f, 4.061131668e-07f, 6.691570577e-07f, 9.321789490e-07f, 1.195178388e-06f, 1.458154920e-06f, 1.721108094e-06f,
-1.984037456e-06f, 2.246942553e-06f, 2.509822933e-06f, 2.772678142e-06f, 3.035507729e-06f, 3.298311239e-06f, 3.561088222e-06f, 3.823838224e-06f, 4.086560794e-06f, 4.349255478e-06f,
-4.611921825e-06f, 4.874559383e-06f, 5.137167700e-06f, 5.399746323e-06f, 5.662294801e-06f, 5.924812683e-06f, 6.187299516e-06f, 6.449754849e-06f, 6.712178231e-06f, 6.974569210e-06f,
-7.236927335e-06f, 7.499252155e-06f, 7.761543218e-06f, 8.023800074e-06f, 8.286022271e-06f, 8.548209360e-06f, 8.810360889e-06f, 9.072476407e-06f, 9.334555465e-06f, 9.596597611e-06f,
-9.858602395e-06f, 1.012056937e-05f, 1.038249808e-05f, 1.064438808e-05f, 1.090623891e-05f, 1.116805014e-05f, 1.142982130e-05f, 1.169155195e-05f, 1.195324165e-05f, 1.221488993e-05f,
-1.247649635e-05f, 1.273806046e-05f, 1.299958182e-05f, 1.326105997e-05f, 1.352249447e-05f, 1.378388486e-05f, 1.404523070e-05f, 1.430653153e-05f, 1.456778692e-05f, 1.482899641e-05f,
-1.509015955e-05f, 1.535127590e-05f, 1.561234501e-05f, 1.587336643e-05f, 1.613433971e-05f, 1.639526440e-05f, 1.665614007e-05f, 1.691696625e-05f, 1.717774251e-05f, 1.743846839e-05f,
-1.769914345e-05f, 1.795976724e-05f, 1.822033932e-05f, 1.848085923e-05f, 1.874132654e-05f, 1.900174080e-05f, 1.926210155e-05f, 1.952240836e-05f, 1.978266077e-05f, 2.004285835e-05f,
-2.030300064e-05f, 2.056308720e-05f, 2.082311759e-05f, 2.108309136e-05f, 2.134300806e-05f, 2.160286725e-05f, 2.186266848e-05f, 2.212241132e-05f, 2.238209531e-05f, 2.264172001e-05f,
-2.290128498e-05f, 2.316078977e-05f, 2.342023393e-05f, 2.367961703e-05f, 2.393893862e-05f, 2.419819826e-05f, 2.445739550e-05f, 2.471652990e-05f, 2.497560102e-05f, 2.523460841e-05f,
-2.549355162e-05f, 2.575243023e-05f, 2.601124378e-05f, 2.626999184e-05f, 2.652867395e-05f, 2.678728968e-05f, 2.704583859e-05f, 2.730432023e-05f, 2.756273416e-05f, 2.782107995e-05f,
-2.807935714e-05f, 2.833756530e-05f, 2.859570399e-05f, 2.885377276e-05f, 2.911177118e-05f, 2.936969880e-05f, 2.962755518e-05f, 2.988533989e-05f, 3.014305248e-05f, 3.040069252e-05f,
-3.065825955e-05f, 3.091575315e-05f, 3.117317288e-05f, 3.143051829e-05f, 3.168778894e-05f, 3.194498440e-05f, 3.220210423e-05f, 3.245914798e-05f, 3.271611523e-05f, 3.297300552e-05f,
-3.322981843e-05f, 3.348655352e-05f, 3.374321034e-05f, 3.399978846e-05f, 3.425628745e-05f, 3.451270686e-05f, 3.476904625e-05f, 3.502530520e-05f, 3.528148326e-05f, 3.553757999e-05f,
-3.579359497e-05f, 3.604952775e-05f, 3.630537790e-05f, 3.656114498e-05f, 3.681682856e-05f, 3.707242819e-05f, 3.732794346e-05f, 3.758337391e-05f, 3.783871911e-05f, 3.809397864e-05f,
-3.834915205e-05f, 3.860423891e-05f, 3.885923879e-05f, 3.911415125e-05f, 3.936897585e-05f, 3.962371217e-05f, 3.987835978e-05f, 4.013291822e-05f, 4.038738709e-05f, 4.064176593e-05f,
-4.089605432e-05f, 4.115025183e-05f, 4.140435802e-05f, 4.165837246e-05f, 4.191229471e-05f, 4.216612436e-05f, 4.241986096e-05f, 4.267350408e-05f, 4.292705330e-05f, 4.318050817e-05f,
-4.343386828e-05f, 4.368713318e-05f, 4.394030246e-05f, 4.419337567e-05f, 4.444635239e-05f, 4.469923219e-05f, 4.495201464e-05f, 4.520469931e-05f, 4.545728576e-05f, 4.570977358e-05f,
-4.596216233e-05f, 4.621445159e-05f, 4.646664091e-05f, 4.671872989e-05f, 4.697071808e-05f, 4.722260506e-05f, 4.747439041e-05f, 4.772607369e-05f, 4.797765448e-05f, 4.822913235e-05f,
-4.848050688e-05f, 4.873177763e-05f, 4.898294419e-05f, 4.923400612e-05f, 4.948496300e-05f, 4.973581440e-05f, 4.998655990e-05f, 5.023719907e-05f, 5.048773149e-05f, 5.073815674e-05f,
-5.098847438e-05f, 5.123868399e-05f, 5.148878516e-05f, 5.173877745e-05f, 5.198866044e-05f, 5.223843371e-05f, 5.248809684e-05f, 5.273764939e-05f, 5.298709096e-05f, 5.323642111e-05f,
-5.348563942e-05f, 5.373474548e-05f, 5.398373886e-05f, 5.423261913e-05f, 5.448138588e-05f, 5.473003869e-05f, 5.497857713e-05f, 5.522700078e-05f, 5.547530922e-05f, 5.572350204e-05f,
-5.597157881e-05f, 5.621953911e-05f, 5.646738253e-05f, 5.671510864e-05f, 5.696271702e-05f, 5.721020725e-05f, 5.745757893e-05f, 5.770483162e-05f, 5.795196491e-05f, 5.819897838e-05f,
-5.844587162e-05f, 5.869264420e-05f, 5.893929571e-05f, 5.918582574e-05f, 5.943223386e-05f, 5.967851965e-05f, 5.992468272e-05f, 6.017072262e-05f, 6.041663896e-05f, 6.066243131e-05f,
-6.090809927e-05f, 6.115364240e-05f, 6.139906031e-05f, 6.164435257e-05f, 6.188951878e-05f, 6.213455851e-05f, 6.237947135e-05f, 6.262425690e-05f, 6.286891473e-05f, 6.311344443e-05f,
-6.335784560e-05f, 6.360211781e-05f, 6.384626066e-05f, 6.409027373e-05f, 6.433415661e-05f, 6.457790890e-05f, 6.482153017e-05f, 6.506502002e-05f, 6.530837804e-05f, 6.555160382e-05f,
-6.579469694e-05f, 6.603765700e-05f, 6.628048359e-05f, 6.652317630e-05f, 6.676573471e-05f, 6.700815842e-05f, 6.725044703e-05f, 6.749260011e-05f, 6.773461728e-05f, 6.797649810e-05f,
-6.821824219e-05f, 6.845984913e-05f, 6.870131852e-05f, 6.894264994e-05f, 6.918384299e-05f, 6.942489727e-05f, 6.966581237e-05f, 6.990658789e-05f, 7.014722341e-05f, 7.038771853e-05f,
-7.062807286e-05f, 7.086828598e-05f, 7.110835748e-05f, 7.134828698e-05f, 7.158807405e-05f, 7.182771831e-05f, 7.206721934e-05f, 7.230657674e-05f, 7.254579011e-05f, 7.278485905e-05f,
-7.302378315e-05f, 7.326256202e-05f, 7.350119525e-05f, 7.373968245e-05f, 7.397802320e-05f, 7.421621711e-05f, 7.445426378e-05f, 7.469216281e-05f, 7.492991380e-05f, 7.516751635e-05f,
-7.540497006e-05f, 7.564227453e-05f, 7.587942936e-05f, 7.611643416e-05f, 7.635328853e-05f, 7.658999206e-05f, 7.682654437e-05f, 7.706294505e-05f, 7.729919371e-05f, 7.753528995e-05f,
-7.777123337e-05f, 7.800702359e-05f, 7.824266019e-05f, 7.847814280e-05f, 7.871347100e-05f, 7.894864442e-05f, 7.918366265e-05f, 7.941852529e-05f, 7.965323197e-05f, 7.988778227e-05f,
-8.012217581e-05f, 8.035641220e-05f, 8.059049104e-05f, 8.082441194e-05f, 8.105817451e-05f, 8.129177835e-05f, 8.152522309e-05f, 8.175850831e-05f, 8.199163364e-05f, 8.222459868e-05f,
-8.245740304e-05f, 8.269004633e-05f, 8.292252817e-05f, 8.315484816e-05f, 8.338700592e-05f, 8.361900105e-05f, 8.385083317e-05f, 8.408250189e-05f, 8.431400681e-05f, 8.454534757e-05f,
-8.477652376e-05f, 8.500753500e-05f, 8.523838091e-05f, 8.546906109e-05f, 8.569957516e-05f, 8.592992274e-05f, 8.616010344e-05f, 8.639011688e-05f, 8.661996267e-05f, 8.684964043e-05f,
-8.707914977e-05f, 8.730849031e-05f, 8.753766167e-05f, 8.776666346e-05f, 8.799549530e-05f, 8.822415681e-05f, 8.845264760e-05f, 8.868096731e-05f, 8.890911553e-05f, 8.913709190e-05f,
-8.936489603e-05f, 8.959252754e-05f, 8.981998605e-05f, 9.004727119e-05f, 9.027438256e-05f, 9.050131981e-05f, 9.072808253e-05f, 9.095467036e-05f, 9.118108292e-05f, 9.140731984e-05f,
-9.163338072e-05f, 9.185926520e-05f, 9.208497290e-05f, 9.231050344e-05f, 9.253585645e-05f, 9.276103156e-05f, 9.298602838e-05f, 9.321084654e-05f, 9.343548566e-05f, 9.365994538e-05f,
-9.388422532e-05f, 9.410832510e-05f, 9.433224435e-05f, 9.455598270e-05f, 9.477953977e-05f, 9.500291520e-05f, 9.522610861e-05f, 9.544911963e-05f, 9.567194789e-05f, 9.589459302e-05f,
-9.611705464e-05f, 9.633933239e-05f, 9.656142589e-05f, 9.678333479e-05f, 9.700505870e-05f, 9.722659726e-05f, 9.744795010e-05f, 9.766911686e-05f, 9.789009716e-05f, 9.811089064e-05f,
-9.833149693e-05f, 9.855191566e-05f, 9.877214647e-05f, 9.899218899e-05f, 9.921204286e-05f, 9.943170770e-05f, 9.965118317e-05f, 9.987046888e-05f, 1.000895645e-04f, 1.003084696e-04f,
-1.005271839e-04f, 1.007457070e-04f, 1.009640385e-04f, 1.011821781e-04f, 1.014001254e-04f, 1.016178800e-04f, 1.018354416e-04f, 1.020528099e-04f, 1.022699844e-04f, 1.024869648e-04f,
-1.027037508e-04f, 1.029203419e-04f, 1.031367379e-04f, 1.033529383e-04f, 1.035689429e-04f, 1.037847512e-04f, 1.040003629e-04f, 1.042157776e-04f, 1.044309950e-04f, 1.046460147e-04f,
-1.048608364e-04f, 1.050754597e-04f, 1.052898843e-04f, 1.055041097e-04f, 1.057181357e-04f, 1.059319619e-04f, 1.061455880e-04f, 1.063590135e-04f, 1.065722381e-04f, 1.067852615e-04f,
-1.069980834e-04f, 1.072107033e-04f, 1.074231209e-04f, 1.076353359e-04f, 1.078473479e-04f, 1.080591566e-04f, 1.082707616e-04f, 1.084821626e-04f, 1.086933591e-04f, 1.089043510e-04f,
-1.091151378e-04f, 1.093257191e-04f, 1.095360947e-04f, 1.097462641e-04f, 1.099562271e-04f, 1.101659832e-04f, 1.103755322e-04f, 1.105848737e-04f, 1.107940073e-04f, 1.110029328e-04f,
-1.112116496e-04f, 1.114201576e-04f, 1.116284564e-04f, 1.118365456e-04f, 1.120444248e-04f, 1.122520938e-04f, 1.124595522e-04f, 1.126667996e-04f, 1.128738358e-04f, 1.130806603e-04f,
-1.132872728e-04f, 1.134936730e-04f, 1.136998606e-04f, 1.139058352e-04f, 1.141115964e-04f, 1.143171440e-04f, 1.145224776e-04f, 1.147275968e-04f, 1.149325013e-04f, 1.151371908e-04f,
-1.153416650e-04f, 1.155459234e-04f, 1.157499659e-04f, 1.159537919e-04f, 1.161574013e-04f, 1.163607936e-04f, 1.165639685e-04f, 1.167669257e-04f, 1.169696649e-04f, 1.171721857e-04f,
-1.173744878e-04f, 1.175765709e-04f, 1.177784346e-04f, 1.179800785e-04f, 1.181815025e-04f, 1.183827061e-04f, 1.185836890e-04f, 1.187844508e-04f, 1.189849913e-04f, 1.191853101e-04f,
-1.193854069e-04f, 1.195852814e-04f, 1.197849332e-04f, 1.199843620e-04f, 1.201835674e-04f, 1.203825492e-04f, 1.205813071e-04f, 1.207798406e-04f, 1.209781495e-04f, 1.211762334e-04f,
-1.213740921e-04f, 1.215717251e-04f, 1.217691322e-04f, 1.219663131e-04f, 1.221632674e-04f, 1.223599948e-04f, 1.225564949e-04f, 1.227527676e-04f, 1.229488123e-04f, 1.231446289e-04f,
-1.233402170e-04f, 1.235355762e-04f, 1.237307063e-04f, 1.239256070e-04f, 1.241202778e-04f, 1.243147186e-04f, 1.245089289e-04f, 1.247029085e-04f, 1.248966571e-04f, 1.250901742e-04f,
-1.252834597e-04f, 1.254765132e-04f, 1.256693344e-04f, 1.258619229e-04f, 1.260542785e-04f, 1.262464008e-04f, 1.264382895e-04f, 1.266299444e-04f, 1.268213650e-04f, 1.270125511e-04f,
-1.272035024e-04f, 1.273942186e-04f, 1.275846993e-04f, 1.277749442e-04f, 1.279649531e-04f, 1.281547256e-04f, 1.283442614e-04f, 1.285335602e-04f, 1.287226217e-04f, 1.289114456e-04f,
-1.291000315e-04f, 1.292883793e-04f, 1.294764884e-04f, 1.296643588e-04f, 1.298519900e-04f, 1.300393817e-04f, 1.302265337e-04f, 1.304134456e-04f, 1.306001171e-04f, 1.307865480e-04f,
-1.309727379e-04f, 1.311586865e-04f, 1.313443935e-04f, 1.315298586e-04f, 1.317150816e-04f, 1.319000620e-04f, 1.320847997e-04f, 1.322692943e-04f, 1.324535455e-04f, 1.326375530e-04f,
-1.328213165e-04f, 1.330048357e-04f, 1.331881104e-04f, 1.333711401e-04f, 1.335539247e-04f, 1.337364639e-04f, 1.339187572e-04f, 1.341008045e-04f, 1.342826054e-04f, 1.344641597e-04f,
-1.346454670e-04f, 1.348265271e-04f, 1.350073396e-04f, 1.351879043e-04f, 1.353682209e-04f, 1.355482890e-04f, 1.357281085e-04f, 1.359076789e-04f, 1.360870001e-04f, 1.362660717e-04f,
-1.364448934e-04f, 1.366234649e-04f, 1.368017860e-04f, 1.369798564e-04f, 1.371576757e-04f, 1.373352438e-04f, 1.375125602e-04f, 1.376896247e-04f, 1.378664371e-04f, 1.380429970e-04f,
-1.382193042e-04f, 1.383953583e-04f, 1.385711591e-04f, 1.387467063e-04f, 1.389219997e-04f, 1.390970389e-04f, 1.392718236e-04f, 1.394463536e-04f, 1.396206286e-04f, 1.397946483e-04f,
-1.399684124e-04f, 1.401419207e-04f, 1.403151729e-04f, 1.404881686e-04f, 1.406609076e-04f, 1.408333897e-04f, 1.410056145e-04f, 1.411775819e-04f, 1.413492914e-04f, 1.415207428e-04f,
-1.416919359e-04f, 1.418628703e-04f, 1.420335459e-04f, 1.422039622e-04f, 1.423741191e-04f, 1.425440163e-04f, 1.427136535e-04f, 1.428830304e-04f, 1.430521468e-04f, 1.432210023e-04f,
-1.433895968e-04f, 1.435579299e-04f, 1.437260014e-04f, 1.438938110e-04f, 1.440613584e-04f, 1.442286434e-04f, 1.443956656e-04f, 1.445624249e-04f, 1.447289210e-04f, 1.448951535e-04f,
-1.450611223e-04f, 1.452268270e-04f, 1.453922674e-04f, 1.455574433e-04f, 1.457223543e-04f, 1.458870002e-04f, 1.460513808e-04f, 1.462154957e-04f, 1.463793447e-04f, 1.465429276e-04f,
-1.467062440e-04f, 1.468692938e-04f, 1.470320767e-04f, 1.471945923e-04f, 1.473568405e-04f, 1.475188210e-04f, 1.476805335e-04f, 1.478419778e-04f, 1.480031536e-04f, 1.481640606e-04f,
-1.483246987e-04f, 1.484850674e-04f, 1.486451667e-04f, 1.488049961e-04f, 1.489645556e-04f, 1.491238448e-04f, 1.492828634e-04f, 1.494416112e-04f, 1.496000880e-04f, 1.497582935e-04f,
-1.499162275e-04f, 1.500738896e-04f, 1.502312797e-04f, 1.503883975e-04f, 1.505452428e-04f, 1.507018152e-04f, 1.508581146e-04f, 1.510141407e-04f, 1.511698932e-04f, 1.513253720e-04f,
-1.514805767e-04f, 1.516355071e-04f, 1.517901630e-04f, 1.519445441e-04f, 1.520986502e-04f, 1.522524810e-04f, 1.524060363e-04f, 1.525593159e-04f, 1.527123194e-04f, 1.528650467e-04f,
-1.530174975e-04f, 1.531696716e-04f, 1.533215687e-04f, 1.534731886e-04f, 1.536245311e-04f, 1.537755959e-04f, 1.539263827e-04f, 1.540768914e-04f, 1.542271216e-04f, 1.543770732e-04f,
-1.545267460e-04f, 1.546761396e-04f, 1.548252539e-04f, 1.549740886e-04f, 1.551226434e-04f, 1.552709182e-04f, 1.554189127e-04f, 1.555666267e-04f, 1.557140599e-04f, 1.558612121e-04f,
-1.560080831e-04f, 1.561546727e-04f, 1.563009805e-04f, 1.564470065e-04f, 1.565927503e-04f, 1.567382117e-04f, 1.568833905e-04f, 1.570282864e-04f, 1.571728993e-04f, 1.573172290e-04f,
-1.574612750e-04f, 1.576050374e-04f, 1.577485158e-04f, 1.578917099e-04f, 1.580346197e-04f, 1.581772448e-04f, 1.583195851e-04f, 1.584616402e-04f, 1.586034100e-04f, 1.587448943e-04f,
-1.588860928e-04f, 1.590270054e-04f, 1.591676317e-04f, 1.593079716e-04f, 1.594480249e-04f, 1.595877913e-04f, 1.597272706e-04f, 1.598664627e-04f, 1.600053672e-04f, 1.601439839e-04f,
-1.602823127e-04f, 1.604203534e-04f, 1.605581056e-04f, 1.606955693e-04f, 1.608327441e-04f, 1.609696299e-04f, 1.611062265e-04f, 1.612425336e-04f, 1.613785511e-04f, 1.615142786e-04f,
-1.616497161e-04f, 1.617848632e-04f, 1.619197199e-04f, 1.620542858e-04f, 1.621885608e-04f, 1.623225446e-04f, 1.624562371e-04f, 1.625896380e-04f, 1.627227472e-04f, 1.628555644e-04f,
-1.629880894e-04f, 1.631203220e-04f, 1.632522620e-04f, 1.633839092e-04f, 1.635152634e-04f, 1.636463244e-04f, 1.637770920e-04f, 1.639075660e-04f, 1.640377462e-04f, 1.641676323e-04f,
-1.642972242e-04f, 1.644265218e-04f, 1.645555247e-04f, 1.646842327e-04f, 1.648126458e-04f, 1.649407636e-04f, 1.650685861e-04f, 1.651961129e-04f, 1.653233439e-04f, 1.654502789e-04f,
-1.655769177e-04f, 1.657032601e-04f, 1.658293059e-04f, 1.659550549e-04f, 1.660805069e-04f, 1.662056618e-04f, 1.663305193e-04f, 1.664550792e-04f, 1.665793414e-04f, 1.667033057e-04f,
-1.668269718e-04f, 1.669503396e-04f, 1.670734088e-04f, 1.671961794e-04f, 1.673186511e-04f, 1.674408237e-04f, 1.675626971e-04f, 1.676842709e-04f, 1.678055452e-04f, 1.679265196e-04f,
-1.680471940e-04f, 1.681675682e-04f, 1.682876421e-04f, 1.684074154e-04f, 1.685268879e-04f, 1.686460595e-04f, 1.687649300e-04f, 1.688834992e-04f, 1.690017669e-04f, 1.691197329e-04f,
-1.692373972e-04f, 1.693547594e-04f, 1.694718194e-04f, 1.695885771e-04f, 1.697050322e-04f, 1.698211845e-04f, 1.699370340e-04f, 1.700525804e-04f, 1.701678235e-04f, 1.702827632e-04f,
-1.703973993e-04f, 1.705117316e-04f, 1.706257600e-04f, 1.707394842e-04f, 1.708529042e-04f, 1.709660196e-04f, 1.710788305e-04f, 1.711913365e-04f, 1.713035375e-04f, 1.714154334e-04f,
-1.715270239e-04f, 1.716383090e-04f, 1.717492884e-04f, 1.718599620e-04f, 1.719703295e-04f, 1.720803910e-04f, 1.721901461e-04f, 1.722995947e-04f, 1.724087366e-04f, 1.725175717e-04f,
-1.726260999e-04f, 1.727343209e-04f, 1.728422345e-04f, 1.729498407e-04f, 1.730571393e-04f, 1.731641301e-04f, 1.732708129e-04f, 1.733771876e-04f, 1.734832540e-04f, 1.735890120e-04f,
-1.736944614e-04f, 1.737996021e-04f, 1.739044338e-04f, 1.740089565e-04f, 1.741131699e-04f, 1.742170740e-04f, 1.743206685e-04f, 1.744239534e-04f, 1.745269284e-04f, 1.746295934e-04f,
-1.747319483e-04f, 1.748339929e-04f, 1.749357270e-04f, 1.750371505e-04f, 1.751382633e-04f, 1.752390651e-04f, 1.753395559e-04f, 1.754397356e-04f, 1.755396038e-04f, 1.756391606e-04f,
-1.757384057e-04f, 1.758373390e-04f, 1.759359604e-04f, 1.760342697e-04f, 1.761322668e-04f, 1.762299515e-04f, 1.763273236e-04f, 1.764243832e-04f, 1.765211299e-04f, 1.766175636e-04f,
-1.767136843e-04f, 1.768094917e-04f, 1.769049858e-04f, 1.770001664e-04f, 1.770950333e-04f, 1.771895864e-04f, 1.772838256e-04f, 1.773777507e-04f, 1.774713616e-04f, 1.775646582e-04f,
-1.776576403e-04f, 1.777503078e-04f, 1.778426605e-04f, 1.779346984e-04f, 1.780264212e-04f, 1.781178289e-04f, 1.782089213e-04f, 1.782996983e-04f, 1.783901598e-04f, 1.784803055e-04f,
-1.785701355e-04f, 1.786596495e-04f, 1.787488474e-04f, 1.788377292e-04f, 1.789262946e-04f, 1.790145435e-04f, 1.791024759e-04f, 1.791900916e-04f, 1.792773904e-04f, 1.793643722e-04f,
-1.794510370e-04f, 1.795373846e-04f, 1.796234148e-04f, 1.797091276e-04f, 1.797945228e-04f, 1.798796003e-04f, 1.799643599e-04f, 1.800488016e-04f, 1.801329252e-04f, 1.802167307e-04f,
-1.803002178e-04f, 1.803833865e-04f, 1.804662367e-04f, 1.805487682e-04f, 1.806309809e-04f, 1.807128748e-04f, 1.807944496e-04f, 1.808757052e-04f, 1.809566417e-04f, 1.810372587e-04f,
-1.811175563e-04f, 1.811975343e-04f, 1.812771927e-04f, 1.813565312e-04f, 1.814355497e-04f, 1.815142483e-04f, 1.815926267e-04f, 1.816706848e-04f, 1.817484226e-04f, 1.818258399e-04f,
-1.819029366e-04f, 1.819797126e-04f, 1.820561678e-04f, 1.821323021e-04f, 1.822081154e-04f, 1.822836076e-04f, 1.823587786e-04f, 1.824336283e-04f, 1.825081565e-04f, 1.825823632e-04f,
-1.826562482e-04f, 1.827298115e-04f, 1.828030530e-04f, 1.828759725e-04f, 1.829485700e-04f, 1.830208453e-04f, 1.830927984e-04f, 1.831644292e-04f, 1.832357375e-04f, 1.833067233e-04f,
-1.833773865e-04f, 1.834477269e-04f, 1.835177445e-04f, 1.835874392e-04f, 1.836568109e-04f, 1.837258595e-04f, 1.837945849e-04f, 1.838629869e-04f, 1.839310656e-04f, 1.839988208e-04f,
-1.840662524e-04f, 1.841333604e-04f, 1.842001446e-04f, 1.842666050e-04f, 1.843327414e-04f, 1.843985538e-04f, 1.844640422e-04f, 1.845292063e-04f, 1.845940461e-04f, 1.846585616e-04f,
-1.847227526e-04f, 1.847866191e-04f, 1.848501609e-04f, 1.849133780e-04f, 1.849762704e-04f, 1.850388379e-04f, 1.851010804e-04f, 1.851629979e-04f, 1.852245902e-04f, 1.852858574e-04f,
-1.853467992e-04f, 1.854074158e-04f, 1.854677068e-04f, 1.855276724e-04f, 1.855873123e-04f, 1.856466266e-04f, 1.857056152e-04f, 1.857642779e-04f, 1.858226147e-04f, 1.858806256e-04f,
-1.859383103e-04f, 1.859956690e-04f, 1.860527015e-04f, 1.861094077e-04f, 1.861657875e-04f, 1.862218410e-04f, 1.862775679e-04f, 1.863329684e-04f, 1.863880421e-04f, 1.864427892e-04f,
-1.864972095e-04f, 1.865513030e-04f, 1.866050696e-04f, 1.866585093e-04f, 1.867116219e-04f, 1.867644074e-04f, 1.868168657e-04f, 1.868689969e-04f, 1.869208007e-04f, 1.869722772e-04f,
-1.870234262e-04f, 1.870742478e-04f, 1.871247418e-04f, 1.871749083e-04f, 1.872247470e-04f, 1.872742581e-04f, 1.873234413e-04f, 1.873722968e-04f, 1.874208243e-04f, 1.874690238e-04f,
-1.875168954e-04f, 1.875644389e-04f, 1.876116542e-04f, 1.876585414e-04f, 1.877051003e-04f, 1.877513309e-04f, 1.877972332e-04f, 1.878428071e-04f, 1.878880525e-04f, 1.879329695e-04f,
-1.879775578e-04f, 1.880218176e-04f, 1.880657487e-04f, 1.881093511e-04f, 1.881526248e-04f, 1.881955696e-04f, 1.882381856e-04f, 1.882804727e-04f, 1.883224308e-04f, 1.883640600e-04f,
-1.884053601e-04f, 1.884463311e-04f, 1.884869730e-04f, 1.885272857e-04f, 1.885672692e-04f, 1.886069235e-04f, 1.886462484e-04f, 1.886852440e-04f, 1.887239102e-04f, 1.887622470e-04f,
-1.888002543e-04f, 1.888379322e-04f, 1.888752804e-04f, 1.889122991e-04f, 1.889489882e-04f, 1.889853476e-04f, 1.890213773e-04f, 1.890570773e-04f, 1.890924475e-04f, 1.891274880e-04f,
-1.891621985e-04f, 1.891965793e-04f, 1.892306301e-04f, 1.892643510e-04f, 1.892977419e-04f, 1.893308028e-04f, 1.893635337e-04f, 1.893959345e-04f, 1.894280053e-04f, 1.894597459e-04f,
-1.894911564e-04f, 1.895222367e-04f, 1.895529868e-04f, 1.895834067e-04f, 1.896134963e-04f, 1.896432556e-04f, 1.896726847e-04f, 1.897017834e-04f, 1.897305517e-04f, 1.897589897e-04f,
-1.897870973e-04f, 1.898148744e-04f, 1.898423211e-04f, 1.898694374e-04f, 1.898962231e-04f, 1.899226784e-04f, 1.899488031e-04f, 1.899745973e-04f, 1.900000609e-04f, 1.900251939e-04f,
-1.900499964e-04f, 1.900744682e-04f, 1.900986094e-04f, 1.901224200e-04f, 1.901458999e-04f, 1.901690491e-04f, 1.901918676e-04f, 1.902143554e-04f, 1.902365126e-04f, 1.902583389e-04f,
-1.902798346e-04f, 1.903009995e-04f, 1.903218336e-04f, 1.903423370e-04f, 1.903625096e-04f, 1.903823515e-04f, 1.904018625e-04f, 1.904210427e-04f, 1.904398921e-04f, 1.904584107e-04f,
-1.904765985e-04f, 1.904944555e-04f, 1.905119816e-04f, 1.905291769e-04f, 1.905460414e-04f, 1.905625750e-04f, 1.905787778e-04f, 1.905946497e-04f, 1.906101908e-04f, 1.906254011e-04f,
-1.906402805e-04f, 1.906548291e-04f, 1.906690468e-04f, 1.906829337e-04f, 1.906964897e-04f, 1.907097150e-04f, 1.907226093e-04f, 1.907351729e-04f, 1.907474056e-04f, 1.907593075e-04f,
-1.907708786e-04f, 1.907821189e-04f, 1.907930284e-04f, 1.908036072e-04f, 1.908138551e-04f, 1.908237722e-04f, 1.908333586e-04f, 1.908426143e-04f, 1.908515391e-04f, 1.908601333e-04f,
-1.908683967e-04f, 1.908763295e-04f, 1.908839315e-04f, 1.908912028e-04f, 1.908981435e-04f, 1.909047535e-04f, 1.909110329e-04f, 1.909169816e-04f, 1.909225998e-04f, 1.909278873e-04f,
-1.909328443e-04f, 1.909374707e-04f, 1.909417666e-04f, 1.909457319e-04f, 1.909493668e-04f, 1.909526712e-04f, 1.909556451e-04f, 1.909582885e-04f, 1.909606016e-04f, 1.909625843e-04f,
-1.909642366e-04f, 1.909655585e-04f, 1.909665501e-04f, 1.909672114e-04f, 1.909675425e-04f, 1.909675433e-04f, 1.909672138e-04f, 1.909665542e-04f, 1.909655644e-04f, 1.909642445e-04f,
-1.909625945e-04f, 1.909606143e-04f, 1.909583042e-04f, 1.909556640e-04f, 1.909526938e-04f, 1.909493936e-04f, 1.909457635e-04f, 1.909418036e-04f, 1.909375137e-04f, 1.909328941e-04f,
-1.909279446e-04f, 1.909226654e-04f, 1.909170565e-04f, 1.909111179e-04f, 1.909048496e-04f, 1.908982517e-04f, 1.908913242e-04f, 1.908840672e-04f, 1.908764807e-04f, 1.908685648e-04f,
-1.908603194e-04f, 1.908517447e-04f, 1.908428406e-04f, 1.908336072e-04f, 1.908240445e-04f, 1.908141527e-04f, 1.908039317e-04f, 1.907933815e-04f, 1.907825023e-04f, 1.907712940e-04f,
-1.907597568e-04f, 1.907478906e-04f, 1.907356955e-04f, 1.907231716e-04f, 1.907103189e-04f, 1.906971374e-04f, 1.906836272e-04f, 1.906697884e-04f, 1.906556209e-04f, 1.906411249e-04f,
-1.906263004e-04f, 1.906111475e-04f, 1.905956662e-04f, 1.905798565e-04f, 1.905637185e-04f, 1.905472523e-04f, 1.905304579e-04f, 1.905133354e-04f, 1.904958848e-04f, 1.904781062e-04f,
-1.904599997e-04f, 1.904415652e-04f, 1.904228029e-04f, 1.904037128e-04f, 1.903842950e-04f, 1.903645496e-04f, 1.903444765e-04f, 1.903240759e-04f, 1.903033478e-04f, 1.902822923e-04f,
-1.902609094e-04f, 1.902391993e-04f, 1.902171619e-04f, 1.901947973e-04f, 1.901721057e-04f, 1.901490870e-04f, 1.901257413e-04f, 1.901020688e-04f, 1.900780694e-04f, 1.900537432e-04f,
-1.900290903e-04f, 1.900041108e-04f, 1.899788048e-04f, 1.899531722e-04f, 1.899272133e-04f, 1.899009279e-04f, 1.898743163e-04f, 1.898473785e-04f, 1.898201146e-04f, 1.897925246e-04f,
-1.897646086e-04f, 1.897363667e-04f, 1.897077989e-04f, 1.896789054e-04f, 1.896496862e-04f, 1.896201414e-04f, 1.895902711e-04f, 1.895600753e-04f, 1.895295541e-04f, 1.894987077e-04f,
-1.894675360e-04f, 1.894360391e-04f, 1.894042172e-04f, 1.893720704e-04f, 1.893395986e-04f, 1.893068020e-04f, 1.892736807e-04f, 1.892402348e-04f, 1.892064642e-04f, 1.891723692e-04f,
-1.891379498e-04f, 1.891032061e-04f, 1.890681382e-04f, 1.890327461e-04f, 1.889970300e-04f, 1.889609899e-04f, 1.889246260e-04f, 1.888879382e-04f, 1.888509268e-04f, 1.888135917e-04f,
-1.887759332e-04f, 1.887379512e-04f, 1.886996459e-04f, 1.886610173e-04f, 1.886220656e-04f, 1.885827908e-04f, 1.885431931e-04f, 1.885032725e-04f, 1.884630291e-04f, 1.884224631e-04f,
-1.883815745e-04f, 1.883403633e-04f, 1.882988298e-04f, 1.882569740e-04f, 1.882147961e-04f, 1.881722960e-04f, 1.881294739e-04f, 1.880863299e-04f, 1.880428642e-04f, 1.879990767e-04f,
-1.879549677e-04f, 1.879105371e-04f, 1.878657852e-04f, 1.878207120e-04f, 1.877753176e-04f, 1.877296021e-04f, 1.876835657e-04f, 1.876372084e-04f, 1.875905303e-04f, 1.875435316e-04f,
-1.874962123e-04f, 1.874485726e-04f, 1.874006125e-04f, 1.873523323e-04f, 1.873037319e-04f, 1.872548115e-04f, 1.872055712e-04f, 1.871560112e-04f, 1.871061314e-04f, 1.870559321e-04f,
-1.870054134e-04f, 1.869545753e-04f, 1.869034180e-04f, 1.868519416e-04f, 1.868001462e-04f, 1.867480319e-04f, 1.866955988e-04f, 1.866428471e-04f, 1.865897769e-04f, 1.865363883e-04f,
-1.864826813e-04f, 1.864286562e-04f, 1.863743130e-04f, 1.863196519e-04f, 1.862646730e-04f, 1.862093764e-04f, 1.861537622e-04f, 1.860978305e-04f, 1.860415815e-04f, 1.859850153e-04f,
-1.859281320e-04f, 1.858709318e-04f, 1.858134147e-04f, 1.857555809e-04f, 1.856974305e-04f, 1.856389636e-04f, 1.855801804e-04f, 1.855210810e-04f, 1.854616655e-04f, 1.854019341e-04f,
-1.853418868e-04f, 1.852815238e-04f, 1.852208453e-04f, 1.851598513e-04f, 1.850985420e-04f, 1.850369176e-04f, 1.849749780e-04f, 1.849127236e-04f, 1.848501544e-04f, 1.847872706e-04f,
-1.847240723e-04f, 1.846605595e-04f, 1.845967326e-04f, 1.845325915e-04f, 1.844681364e-04f, 1.844033676e-04f, 1.843382850e-04f, 1.842728889e-04f, 1.842071793e-04f, 1.841411565e-04f,
-1.840748205e-04f, 1.840081715e-04f, 1.839412097e-04f, 1.838739351e-04f, 1.838063479e-04f, 1.837384484e-04f, 1.836702365e-04f, 1.836017124e-04f, 1.835328764e-04f, 1.834637285e-04f,
-1.833942688e-04f, 1.833244976e-04f, 1.832544150e-04f, 1.831840211e-04f, 1.831133160e-04f, 1.830423000e-04f, 1.829709731e-04f, 1.828993355e-04f, 1.828273873e-04f, 1.827551288e-04f,
-1.826825600e-04f, 1.826096811e-04f, 1.825364923e-04f, 1.824629937e-04f, 1.823891854e-04f, 1.823150677e-04f, 1.822406406e-04f, 1.821659043e-04f, 1.820908590e-04f, 1.820155048e-04f,
-1.819398419e-04f, 1.818638704e-04f, 1.817875906e-04f, 1.817110024e-04f, 1.816341062e-04f, 1.815569021e-04f, 1.814793901e-04f, 1.814015706e-04f, 1.813234435e-04f, 1.812450092e-04f,
-1.811662677e-04f, 1.810872193e-04f, 1.810078640e-04f, 1.809282021e-04f, 1.808482337e-04f, 1.807679589e-04f, 1.806873780e-04f, 1.806064911e-04f, 1.805252983e-04f, 1.804437999e-04f,
-1.803619959e-04f, 1.802798866e-04f, 1.801974721e-04f, 1.801147526e-04f, 1.800317283e-04f, 1.799483993e-04f, 1.798647658e-04f, 1.797808279e-04f, 1.796965859e-04f, 1.796120399e-04f,
-1.795271900e-04f, 1.794420365e-04f, 1.793565795e-04f, 1.792708192e-04f, 1.791847557e-04f, 1.790983893e-04f, 1.790117201e-04f, 1.789247483e-04f, 1.788374740e-04f, 1.787498974e-04f,
-1.786620188e-04f, 1.785738382e-04f, 1.784853559e-04f, 1.783965720e-04f, 1.783074867e-04f, 1.782181003e-04f, 1.781284128e-04f, 1.780384244e-04f, 1.779481354e-04f, 1.778575459e-04f,
-1.777666560e-04f, 1.776754661e-04f, 1.775839762e-04f, 1.774921865e-04f, 1.774000973e-04f, 1.773077086e-04f, 1.772150207e-04f, 1.771220338e-04f, 1.770287481e-04f, 1.769351637e-04f,
-1.768412808e-04f, 1.767470996e-04f, 1.766526203e-04f, 1.765578431e-04f, 1.764627682e-04f, 1.763673957e-04f, 1.762717259e-04f, 1.761757590e-04f, 1.760794950e-04f, 1.759829343e-04f,
-1.758860770e-04f, 1.757889232e-04f, 1.756914733e-04f, 1.755937274e-04f, 1.754956856e-04f, 1.753973482e-04f, 1.752987154e-04f, 1.751997873e-04f, 1.751005642e-04f, 1.750010462e-04f,
-1.749012336e-04f, 1.748011265e-04f, 1.747007251e-04f, 1.746000297e-04f, 1.744990404e-04f, 1.743977575e-04f, 1.742961811e-04f, 1.741943114e-04f, 1.740921486e-04f, 1.739896929e-04f,
-1.738869446e-04f, 1.737839038e-04f, 1.736805708e-04f, 1.735769457e-04f, 1.734730287e-04f, 1.733688200e-04f, 1.732643199e-04f, 1.731595286e-04f, 1.730544461e-04f, 1.729490729e-04f,
-1.728434090e-04f, 1.727374547e-04f, 1.726312101e-04f, 1.725246755e-04f, 1.724178512e-04f, 1.723107372e-04f, 1.722033338e-04f, 1.720956412e-04f, 1.719876597e-04f, 1.718793894e-04f,
-1.717708305e-04f, 1.716619833e-04f, 1.715528479e-04f, 1.714434247e-04f, 1.713337137e-04f, 1.712237152e-04f, 1.711134294e-04f, 1.710028566e-04f, 1.708919969e-04f, 1.707808506e-04f,
-1.706694178e-04f, 1.705576988e-04f, 1.704456939e-04f, 1.703334031e-04f, 1.702208268e-04f, 1.701079652e-04f, 1.699948184e-04f, 1.698813867e-04f, 1.697676703e-04f, 1.696536695e-04f,
-1.695393844e-04f, 1.694248153e-04f, 1.693099624e-04f, 1.691948259e-04f, 1.690794060e-04f, 1.689637030e-04f, 1.688477170e-04f, 1.687314484e-04f, 1.686148973e-04f, 1.684980640e-04f,
-1.683809486e-04f, 1.682635514e-04f, 1.681458727e-04f, 1.680279126e-04f, 1.679096714e-04f, 1.677911493e-04f, 1.676723465e-04f, 1.675532633e-04f, 1.674338999e-04f, 1.673142565e-04f,
-1.671943333e-04f, 1.670741307e-04f, 1.669536487e-04f, 1.668328877e-04f, 1.667118479e-04f, 1.665905294e-04f, 1.664689326e-04f, 1.663470577e-04f, 1.662249048e-04f, 1.661024743e-04f,
-1.659797664e-04f, 1.658567812e-04f, 1.657335191e-04f, 1.656099803e-04f, 1.654861650e-04f, 1.653620734e-04f, 1.652377058e-04f, 1.651130625e-04f, 1.649881436e-04f, 1.648629493e-04f,
-1.647374801e-04f, 1.646117359e-04f, 1.644857172e-04f, 1.643594242e-04f, 1.642328570e-04f, 1.641060160e-04f, 1.639789014e-04f, 1.638515133e-04f, 1.637238521e-04f, 1.635959181e-04f,
-1.634677113e-04f, 1.633392322e-04f, 1.632104809e-04f, 1.630814576e-04f, 1.629521627e-04f, 1.628225964e-04f, 1.626927588e-04f, 1.625626504e-04f, 1.624322712e-04f, 1.623016216e-04f,
-1.621707017e-04f, 1.620395120e-04f, 1.619080525e-04f, 1.617763236e-04f, 1.616443254e-04f, 1.615120583e-04f, 1.613795225e-04f, 1.612467183e-04f, 1.611136458e-04f, 1.609803054e-04f,
-1.608466973e-04f, 1.607128218e-04f, 1.605786790e-04f, 1.604442693e-04f, 1.603095930e-04f, 1.601746502e-04f, 1.600394412e-04f, 1.599039663e-04f, 1.597682257e-04f, 1.596322197e-04f,
-1.594959486e-04f, 1.593594126e-04f, 1.592226119e-04f, 1.590855468e-04f, 1.589482177e-04f, 1.588106246e-04f, 1.586727680e-04f, 1.585346480e-04f, 1.583962649e-04f, 1.582576190e-04f,
-1.581187105e-04f, 1.579795398e-04f, 1.578401069e-04f, 1.577004123e-04f, 1.575604562e-04f, 1.574202388e-04f, 1.572797605e-04f, 1.571390214e-04f, 1.569980218e-04f, 1.568567621e-04f,
-1.567152424e-04f, 1.565734631e-04f, 1.564314243e-04f, 1.562891264e-04f, 1.561465697e-04f, 1.560037543e-04f, 1.558606806e-04f, 1.557173489e-04f, 1.555737593e-04f, 1.554299122e-04f,
-1.552858079e-04f, 1.551414466e-04f, 1.549968285e-04f, 1.548519541e-04f, 1.547068234e-04f, 1.545614368e-04f, 1.544157946e-04f, 1.542698971e-04f, 1.541237444e-04f, 1.539773370e-04f,
-1.538306750e-04f, 1.536837587e-04f, 1.535365884e-04f, 1.533891644e-04f, 1.532414870e-04f, 1.530935564e-04f, 1.529453730e-04f, 1.527969369e-04f, 1.526482485e-04f, 1.524993080e-04f,
-1.523501157e-04f, 1.522006719e-04f, 1.520509769e-04f, 1.519010310e-04f, 1.517508344e-04f, 1.516003874e-04f, 1.514496903e-04f, 1.512987434e-04f, 1.511475469e-04f, 1.509961012e-04f,
-1.508444065e-04f, 1.506924631e-04f, 1.505402713e-04f, 1.503878313e-04f, 1.502351435e-04f, 1.500822082e-04f, 1.499290255e-04f, 1.497755959e-04f, 1.496219195e-04f, 1.494679967e-04f,
-1.493138278e-04f, 1.491594130e-04f, 1.490047527e-04f, 1.488498471e-04f, 1.486946965e-04f, 1.485393012e-04f, 1.483836615e-04f, 1.482277776e-04f, 1.480716499e-04f, 1.479152787e-04f,
-1.477586642e-04f, 1.476018067e-04f, 1.474447066e-04f, 1.472873641e-04f, 1.471297795e-04f, 1.469719531e-04f, 1.468138851e-04f, 1.466555760e-04f, 1.464970259e-04f, 1.463382352e-04f,
-1.461792042e-04f, 1.460199332e-04f, 1.458604223e-04f, 1.457006721e-04f, 1.455406826e-04f, 1.453804544e-04f, 1.452199875e-04f, 1.450592824e-04f, 1.448983393e-04f, 1.447371586e-04f,
-1.445757404e-04f, 1.444140852e-04f, 1.442521932e-04f, 1.440900648e-04f, 1.439277001e-04f, 1.437650996e-04f, 1.436022635e-04f, 1.434391921e-04f, 1.432758857e-04f, 1.431123447e-04f,
-1.429485693e-04f, 1.427845598e-04f, 1.426203165e-04f, 1.424558398e-04f, 1.422911299e-04f, 1.421261871e-04f, 1.419610118e-04f, 1.417956042e-04f, 1.416299647e-04f, 1.414640936e-04f,
-1.412979911e-04f, 1.411316575e-04f, 1.409650933e-04f, 1.407982986e-04f, 1.406312738e-04f, 1.404640192e-04f, 1.402965351e-04f, 1.401288219e-04f, 1.399608797e-04f, 1.397927090e-04f,
-1.396243100e-04f, 1.394556830e-04f, 1.392868284e-04f, 1.391177465e-04f, 1.389484376e-04f, 1.387789019e-04f, 1.386091398e-04f, 1.384391517e-04f, 1.382689378e-04f, 1.380984984e-04f,
-1.379278338e-04f, 1.377569445e-04f, 1.375858306e-04f, 1.374144925e-04f, 1.372429305e-04f, 1.370711449e-04f, 1.368991360e-04f, 1.367269042e-04f, 1.365544498e-04f, 1.363817730e-04f,
-1.362088743e-04f, 1.360357538e-04f, 1.358624120e-04f, 1.356888492e-04f, 1.355150656e-04f, 1.353410616e-04f, 1.351668375e-04f, 1.349923936e-04f, 1.348177303e-04f, 1.346428478e-04f,
-1.344677465e-04f, 1.342924267e-04f, 1.341168888e-04f, 1.339411329e-04f, 1.337651596e-04f, 1.335889690e-04f, 1.334125616e-04f, 1.332359376e-04f, 1.330590973e-04f, 1.328820411e-04f,
-1.327047693e-04f, 1.325272823e-04f, 1.323495802e-04f, 1.321716636e-04f, 1.319935327e-04f, 1.318151878e-04f, 1.316366292e-04f, 1.314578573e-04f, 1.312788725e-04f, 1.310996749e-04f,
-1.309202650e-04f, 1.307406431e-04f, 1.305608095e-04f, 1.303807646e-04f, 1.302005086e-04f, 1.300200419e-04f, 1.298393648e-04f, 1.296584777e-04f, 1.294773809e-04f, 1.292960747e-04f,
-1.291145594e-04f, 1.289328354e-04f, 1.287509031e-04f, 1.285687626e-04f, 1.283864145e-04f, 1.282038589e-04f, 1.280210963e-04f, 1.278381269e-04f, 1.276549511e-04f, 1.274715693e-04f,
-1.272879817e-04f, 1.271041888e-04f, 1.269201907e-04f, 1.267359880e-04f, 1.265515808e-04f, 1.263669696e-04f, 1.261821547e-04f, 1.259971364e-04f, 1.258119150e-04f, 1.256264909e-04f,
-1.254408645e-04f, 1.252550360e-04f, 1.250690058e-04f, 1.248827742e-04f, 1.246963416e-04f, 1.245097083e-04f, 1.243228747e-04f, 1.241358410e-04f, 1.239486077e-04f, 1.237611751e-04f,
-1.235735435e-04f, 1.233857132e-04f, 1.231976846e-04f, 1.230094580e-04f, 1.228210338e-04f, 1.226324124e-04f, 1.224435940e-04f, 1.222545790e-04f, 1.220653677e-04f, 1.218759605e-04f,
-1.216863578e-04f, 1.214965598e-04f, 1.213065669e-04f, 1.211163795e-04f, 1.209259979e-04f, 1.207354225e-04f, 1.205446535e-04f, 1.203536914e-04f, 1.201625365e-04f, 1.199711891e-04f,
-1.197796496e-04f, 1.195879183e-04f, 1.193959956e-04f, 1.192038818e-04f, 1.190115773e-04f, 1.188190824e-04f, 1.186263975e-04f, 1.184335228e-04f, 1.182404589e-04f, 1.180472059e-04f,
-1.178537643e-04f, 1.176601344e-04f, 1.174663166e-04f, 1.172723112e-04f, 1.170781185e-04f, 1.168837390e-04f, 1.166891729e-04f, 1.164944207e-04f, 1.162994826e-04f, 1.161043590e-04f,
-1.159090503e-04f, 1.157135568e-04f, 1.155178789e-04f, 1.153220169e-04f, 1.151259712e-04f, 1.149297421e-04f, 1.147333300e-04f, 1.145367353e-04f, 1.143399583e-04f, 1.141429993e-04f,
-1.139458587e-04f, 1.137485369e-04f, 1.135510343e-04f, 1.133533511e-04f, 1.131554877e-04f, 1.129574445e-04f, 1.127592219e-04f, 1.125608202e-04f, 1.123622397e-04f, 1.121634809e-04f,
-1.119645440e-04f, 1.117654295e-04f, 1.115661377e-04f, 1.113666689e-04f, 1.111670236e-04f, 1.109672020e-04f, 1.107672045e-04f, 1.105670316e-04f, 1.103666835e-04f, 1.101661606e-04f,
-1.099654633e-04f, 1.097645919e-04f, 1.095635468e-04f, 1.093623284e-04f, 1.091609370e-04f, 1.089593729e-04f, 1.087576367e-04f, 1.085557285e-04f, 1.083536488e-04f, 1.081513979e-04f,
-1.079489763e-04f, 1.077463842e-04f, 1.075436220e-04f, 1.073406901e-04f, 1.071375889e-04f, 1.069343187e-04f, 1.067308798e-04f, 1.065272728e-04f, 1.063234978e-04f, 1.061195553e-04f,
-1.059154457e-04f, 1.057111693e-04f, 1.055067265e-04f, 1.053021176e-04f, 1.050973430e-04f, 1.048924031e-04f, 1.046872983e-04f, 1.044820289e-04f, 1.042765952e-04f, 1.040709978e-04f,
-1.038652368e-04f, 1.036593128e-04f, 1.034532260e-04f, 1.032469768e-04f, 1.030405657e-04f, 1.028339929e-04f, 1.026272588e-04f, 1.024203639e-04f, 1.022133085e-04f, 1.020060929e-04f,
-1.017987175e-04f, 1.015911827e-04f, 1.013834889e-04f, 1.011756365e-04f, 1.009676257e-04f, 1.007594571e-04f, 1.005511309e-04f, 1.003426475e-04f, 1.001340073e-04f, 9.992521074e-05f,
-9.971625811e-05f, 9.950714980e-05f, 9.929788619e-05f, 9.908846766e-05f, 9.887889457e-05f, 9.866916731e-05f, 9.845928625e-05f, 9.824925176e-05f, 9.803906423e-05f, 9.782872401e-05f,
-9.761823151e-05f, 9.740758707e-05f, 9.719679110e-05f, 9.698584395e-05f, 9.677474602e-05f, 9.656349767e-05f, 9.635209928e-05f, 9.614055124e-05f, 9.592885391e-05f, 9.571700768e-05f,
-9.550501293e-05f, 9.529287003e-05f, 9.508057936e-05f, 9.486814131e-05f, 9.465555625e-05f, 9.444282455e-05f, 9.422994661e-05f, 9.401692280e-05f, 9.380375350e-05f, 9.359043909e-05f,
-9.337697995e-05f, 9.316337647e-05f, 9.294962901e-05f, 9.273573798e-05f, 9.252170373e-05f, 9.230752667e-05f, 9.209320717e-05f, 9.187874561e-05f, 9.166414237e-05f, 9.144939784e-05f,
-9.123451240e-05f, 9.101948643e-05f, 9.080432032e-05f, 9.058901445e-05f, 9.037356920e-05f, 9.015798495e-05f, 8.994226210e-05f, 8.972640103e-05f, 8.951040211e-05f, 8.929426573e-05f,
-8.907799229e-05f, 8.886158216e-05f, 8.864503573e-05f, 8.842835339e-05f, 8.821153551e-05f, 8.799458249e-05f, 8.777749472e-05f, 8.756027257e-05f, 8.734291644e-05f, 8.712542671e-05f,
-8.690780377e-05f, 8.669004801e-05f, 8.647215981e-05f, 8.625413956e-05f, 8.603598765e-05f, 8.581770447e-05f, 8.559929040e-05f, 8.538074584e-05f, 8.516207117e-05f, 8.494326677e-05f,
-8.472433305e-05f, 8.450527038e-05f, 8.428607917e-05f, 8.406675978e-05f, 8.384731263e-05f, 8.362773809e-05f, 8.340803656e-05f, 8.318820842e-05f, 8.296825408e-05f, 8.274817391e-05f,
-8.252796830e-05f, 8.230763766e-05f, 8.208718237e-05f, 8.186660282e-05f, 8.164589940e-05f, 8.142507251e-05f, 8.120412253e-05f, 8.098304987e-05f, 8.076185490e-05f, 8.054053803e-05f,
-8.031909965e-05f, 8.009754014e-05f, 7.987585991e-05f, 7.965405934e-05f, 7.943213882e-05f, 7.921009877e-05f, 7.898793955e-05f, 7.876566158e-05f, 7.854326524e-05f, 7.832075092e-05f,
-7.809811903e-05f, 7.787536996e-05f, 7.765250409e-05f, 7.742952184e-05f, 7.720642358e-05f, 7.698320972e-05f, 7.675988065e-05f, 7.653643677e-05f, 7.631287847e-05f, 7.608920615e-05f,
-7.586542020e-05f, 7.564152103e-05f, 7.541750902e-05f, 7.519338457e-05f, 7.496914809e-05f, 7.474479997e-05f, 7.452034059e-05f, 7.429577038e-05f, 7.407108970e-05f, 7.384629898e-05f,
-7.362139860e-05f, 7.339638896e-05f, 7.317127046e-05f, 7.294604350e-05f, 7.272070848e-05f, 7.249526579e-05f, 7.226971583e-05f, 7.204405901e-05f, 7.181829572e-05f, 7.159242635e-05f,
-7.136645132e-05f, 7.114037102e-05f, 7.091418584e-05f, 7.068789619e-05f, 7.046150247e-05f, 7.023500507e-05f, 7.000840441e-05f, 6.978170087e-05f, 6.955489486e-05f, 6.932798678e-05f,
-6.910097702e-05f, 6.887386600e-05f, 6.864665411e-05f, 6.841934175e-05f, 6.819192933e-05f, 6.796441724e-05f, 6.773680588e-05f, 6.750909567e-05f, 6.728128699e-05f, 6.705338026e-05f,
-6.682537587e-05f, 6.659727423e-05f, 6.636907573e-05f, 6.614078079e-05f, 6.591238980e-05f, 6.568390317e-05f, 6.545532129e-05f, 6.522664458e-05f, 6.499787344e-05f, 6.476900826e-05f,
-6.454004946e-05f, 6.431099743e-05f, 6.408185258e-05f, 6.385261531e-05f, 6.362328603e-05f, 6.339386515e-05f, 6.316435305e-05f, 6.293475016e-05f, 6.270505687e-05f, 6.247527359e-05f,
-6.224540073e-05f, 6.201543868e-05f, 6.178538786e-05f, 6.155524866e-05f, 6.132502150e-05f, 6.109470678e-05f, 6.086430490e-05f, 6.063381627e-05f, 6.040324129e-05f, 6.017258038e-05f,
-5.994183393e-05f, 5.971100236e-05f, 5.948008607e-05f, 5.924908546e-05f, 5.901800094e-05f, 5.878683292e-05f, 5.855558181e-05f, 5.832424800e-05f, 5.809283192e-05f, 5.786133396e-05f,
-5.762975453e-05f, 5.739809404e-05f, 5.716635290e-05f, 5.693453151e-05f, 5.670263028e-05f, 5.647064962e-05f, 5.623858994e-05f, 5.600645164e-05f, 5.577423513e-05f, 5.554194083e-05f,
-5.530956913e-05f, 5.507712044e-05f, 5.484459518e-05f, 5.461199376e-05f, 5.437931657e-05f, 5.414656403e-05f, 5.391373656e-05f, 5.368083454e-05f, 5.344785841e-05f, 5.321480856e-05f,
-5.298168540e-05f, 5.274848935e-05f, 5.251522081e-05f, 5.228188019e-05f, 5.204846790e-05f, 5.181498435e-05f, 5.158142995e-05f, 5.134780511e-05f, 5.111411024e-05f, 5.088034575e-05f,
-5.064651205e-05f, 5.041260954e-05f, 5.017863865e-05f, 4.994459978e-05f, 4.971049333e-05f, 4.947631973e-05f, 4.924207937e-05f, 4.900777268e-05f, 4.877340006e-05f, 4.853896192e-05f,
-4.830445868e-05f, 4.806989074e-05f, 4.783525851e-05f, 4.760056241e-05f, 4.736580285e-05f, 4.713098023e-05f, 4.689609498e-05f, 4.666114749e-05f, 4.642613819e-05f, 4.619106748e-05f,
-4.595593578e-05f, 4.572074349e-05f, 4.548549103e-05f, 4.525017881e-05f, 4.501480725e-05f, 4.477937675e-05f, 4.454388772e-05f, 4.430834058e-05f, 4.407273574e-05f, 4.383707362e-05f,
-4.360135462e-05f, 4.336557915e-05f, 4.312974764e-05f, 4.289386048e-05f, 4.265791810e-05f, 4.242192091e-05f, 4.218586932e-05f, 4.194976373e-05f, 4.171360458e-05f, 4.147739226e-05f,
-4.124112719e-05f, 4.100480978e-05f, 4.076844045e-05f, 4.053201961e-05f, 4.029554767e-05f, 4.005902504e-05f, 3.982245215e-05f, 3.958582939e-05f, 3.934915719e-05f, 3.911243596e-05f,
-3.887566612e-05f, 3.863884806e-05f, 3.840198222e-05f, 3.816506900e-05f, 3.792810881e-05f, 3.769110207e-05f, 3.745404920e-05f, 3.721695060e-05f, 3.697980670e-05f, 3.674261790e-05f,
-3.650538462e-05f, 3.626810727e-05f, 3.603078626e-05f, 3.579342202e-05f, 3.555601495e-05f, 3.531856547e-05f, 3.508107399e-05f, 3.484354093e-05f, 3.460596670e-05f, 3.436835172e-05f,
-3.413069640e-05f, 3.389300115e-05f, 3.365526638e-05f, 3.341749252e-05f, 3.317967998e-05f, 3.294182917e-05f, 3.270394051e-05f, 3.246601440e-05f, 3.222805127e-05f, 3.199005153e-05f,
-3.175201560e-05f, 3.151394388e-05f, 3.127583680e-05f, 3.103769476e-05f, 3.079951819e-05f, 3.056130750e-05f, 3.032306310e-05f, 3.008478541e-05f, 2.984647483e-05f, 2.960813180e-05f,
-2.936975672e-05f, 2.913135000e-05f, 2.889291207e-05f, 2.865444333e-05f, 2.841594421e-05f, 2.817741511e-05f, 2.793885645e-05f, 2.770026865e-05f, 2.746165212e-05f, 2.722300728e-05f,
-2.698433454e-05f, 2.674563432e-05f, 2.650690703e-05f, 2.626815309e-05f, 2.602937290e-05f, 2.579056690e-05f, 2.555173549e-05f, 2.531287908e-05f, 2.507399810e-05f, 2.483509296e-05f,
-2.459616407e-05f, 2.435721185e-05f, 2.411823671e-05f, 2.387923907e-05f, 2.364021935e-05f, 2.340117795e-05f, 2.316211530e-05f, 2.292303181e-05f, 2.268392789e-05f, 2.244480396e-05f,
-2.220566044e-05f, 2.196649774e-05f, 2.172731627e-05f, 2.148811646e-05f, 2.124889871e-05f, 2.100966344e-05f, 2.077041107e-05f, 2.053114201e-05f, 2.029185668e-05f, 2.005255549e-05f,
-1.981323886e-05f, 1.957390720e-05f, 1.933456093e-05f, 1.909520046e-05f, 1.885582621e-05f, 1.861643860e-05f, 1.837703803e-05f, 1.813762493e-05f, 1.789819970e-05f, 1.765876277e-05f,
-1.741931455e-05f, 1.717985545e-05f, 1.694038589e-05f, 1.670090629e-05f, 1.646141705e-05f, 1.622191860e-05f, 1.598241135e-05f, 1.574289571e-05f, 1.550337210e-05f, 1.526384094e-05f,
-1.502430263e-05f, 1.478475760e-05f, 1.454520626e-05f, 1.430564902e-05f, 1.406608630e-05f, 1.382651851e-05f, 1.358694608e-05f, 1.334736940e-05f, 1.310778890e-05f, 1.286820500e-05f,
-1.262861810e-05f, 1.238902863e-05f, 1.214943699e-05f, 1.190984360e-05f, 1.167024888e-05f, 1.143065324e-05f, 1.119105709e-05f, 1.095146085e-05f, 1.071186494e-05f, 1.047226976e-05f,
-1.023267573e-05f, 9.993083277e-06f, 9.753492801e-06f, 9.513904720e-06f, 9.274319449e-06f, 9.034737401e-06f, 8.795158991e-06f, 8.555584634e-06f, 8.316014742e-06f, 8.076449731e-06f,
-7.836890013e-06f, 7.597336004e-06f, 7.357788116e-06f, 7.118246765e-06f, 6.878712363e-06f, 6.639185324e-06f, 6.399666063e-06f, 6.160154992e-06f, 5.920652526e-06f, 5.681159078e-06f,
-5.441675062e-06f, 5.202200890e-06f, 4.962736977e-06f, 4.723283736e-06f, 4.483841580e-06f, 4.244410923e-06f, 4.004992177e-06f, 3.765585756e-06f, 3.526192073e-06f, 3.286811541e-06f,
-3.047444574e-06f, 2.808091583e-06f, 2.568752982e-06f, 2.329429184e-06f, 2.090120601e-06f, 1.850827647e-06f, 1.611550733e-06f, 1.372290273e-06f, 1.133046679e-06f, 8.938203639e-07f,
-6.546117393e-07f, 4.154212179e-07f, 1.762492121e-07f, -6.290386609e-08f, -3.020376044e-07f, -5.411515907e-07f, -7.802454130e-07f, -1.019318659e-06f, -1.258370918e-06f, -1.497401777e-06f,
--1.736410825e-06f, -1.975397649e-06f, -2.214361839e-06f, -2.453302983e-06f, -2.692220669e-06f, -2.931114487e-06f, -3.169984024e-06f, -3.408828869e-06f, -3.647648612e-06f, -3.886442842e-06f,
--4.125211146e-06f, -4.363953115e-06f, -4.602668337e-06f, -4.841356402e-06f, -5.080016900e-06f, -5.318649418e-06f, -5.557253548e-06f, -5.795828878e-06f, -6.034374998e-06f, -6.272891499e-06f,
--6.511377969e-06f, -6.749833998e-06f, -6.988259177e-06f, -7.226653096e-06f, -7.465015344e-06f, -7.703345513e-06f, -7.941643192e-06f, -8.179907972e-06f, -8.418139443e-06f, -8.656337196e-06f,
--8.894500821e-06f, -9.132629910e-06f, -9.370724054e-06f, -9.608782842e-06f, -9.846805867e-06f, -1.008479272e-05f, -1.032274299e-05f, -1.056065627e-05f, -1.079853215e-05f, -1.103637023e-05f,
--1.127417009e-05f, -1.151193133e-05f, -1.174965353e-05f, -1.198733630e-05f, -1.222497922e-05f, -1.246258188e-05f, -1.270014388e-05f, -1.293766480e-05f, -1.317514425e-05f, -1.341258182e-05f,
--1.364997709e-05f, -1.388732966e-05f, -1.412463912e-05f, -1.436190507e-05f, -1.459912709e-05f, -1.483630479e-05f, -1.507343775e-05f, -1.531052557e-05f, -1.554756785e-05f, -1.578456416e-05f,
--1.602151412e-05f, -1.625841731e-05f, -1.649527333e-05f, -1.673208177e-05f, -1.696884222e-05f, -1.720555429e-05f, -1.744221756e-05f, -1.767883162e-05f, -1.791539609e-05f, -1.815191053e-05f,
--1.838837457e-05f, -1.862478778e-05f, -1.886114976e-05f, -1.909746012e-05f, -1.933371843e-05f, -1.956992431e-05f, -1.980607734e-05f, -2.004217712e-05f, -2.027822325e-05f, -2.051421533e-05f,
--2.075015294e-05f, -2.098603568e-05f, -2.122186316e-05f, -2.145763497e-05f, -2.169335070e-05f, -2.192900995e-05f, -2.216461233e-05f, -2.240015741e-05f, -2.263564482e-05f, -2.287107413e-05f,
--2.310644494e-05f, -2.334175687e-05f, -2.357700949e-05f, -2.381220242e-05f, -2.404733525e-05f, -2.428240757e-05f, -2.451741899e-05f, -2.475236910e-05f, -2.498725750e-05f, -2.522208380e-05f,
--2.545684758e-05f, -2.569154845e-05f, -2.592618601e-05f, -2.616075986e-05f, -2.639526959e-05f, -2.662971481e-05f, -2.686409511e-05f, -2.709841010e-05f, -2.733265937e-05f, -2.756684253e-05f,
--2.780095918e-05f, -2.803500891e-05f, -2.826899132e-05f, -2.850290603e-05f, -2.873675262e-05f, -2.897053070e-05f, -2.920423987e-05f, -2.943787973e-05f, -2.967144988e-05f, -2.990494993e-05f,
--3.013837948e-05f, -3.037173812e-05f, -3.060502546e-05f, -3.083824111e-05f, -3.107138466e-05f, -3.130445571e-05f, -3.153745388e-05f, -3.177037876e-05f, -3.200322996e-05f, -3.223600707e-05f,
--3.246870970e-05f, -3.270133747e-05f, -3.293388996e-05f, -3.316636678e-05f, -3.339876754e-05f, -3.363109184e-05f, -3.386333929e-05f, -3.409550949e-05f, -3.432760204e-05f, -3.455961655e-05f,
--3.479155263e-05f, -3.502340987e-05f, -3.525518789e-05f, -3.548688629e-05f, -3.571850468e-05f, -3.595004266e-05f, -3.618149983e-05f, -3.641287581e-05f, -3.664417020e-05f, -3.687538260e-05f,
--3.710651263e-05f, -3.733755989e-05f, -3.756852399e-05f, -3.779940453e-05f, -3.803020112e-05f, -3.826091337e-05f, -3.849154088e-05f, -3.872208328e-05f, -3.895254015e-05f, -3.918291112e-05f,
--3.941319578e-05f, -3.964339375e-05f, -3.987350464e-05f, -4.010352806e-05f, -4.033346361e-05f, -4.056331091e-05f, -4.079306956e-05f, -4.102273917e-05f, -4.125231936e-05f, -4.148180973e-05f,
--4.171120989e-05f, -4.194051946e-05f, -4.216973804e-05f, -4.239886525e-05f, -4.262790070e-05f, -4.285684399e-05f, -4.308569474e-05f, -4.331445257e-05f, -4.354311708e-05f, -4.377168788e-05f,
--4.400016459e-05f, -4.422854682e-05f, -4.445683418e-05f, -4.468502628e-05f, -4.491312274e-05f, -4.514112318e-05f, -4.536902720e-05f, -4.559683441e-05f, -4.582454444e-05f, -4.605215689e-05f,
--4.627967138e-05f, -4.650708753e-05f, -4.673440494e-05f, -4.696162324e-05f, -4.718874204e-05f, -4.741576095e-05f, -4.764267958e-05f, -4.786949757e-05f, -4.809621451e-05f, -4.832283002e-05f,
--4.854934373e-05f, -4.877575525e-05f, -4.900206420e-05f, -4.922827018e-05f, -4.945437283e-05f, -4.968037175e-05f, -4.990626656e-05f, -5.013205689e-05f, -5.035774234e-05f, -5.058332254e-05f,
--5.080879711e-05f, -5.103416566e-05f, -5.125942781e-05f, -5.148458319e-05f, -5.170963140e-05f, -5.193457208e-05f, -5.215940483e-05f, -5.238412929e-05f, -5.260874506e-05f, -5.283325178e-05f,
--5.305764905e-05f, -5.328193651e-05f, -5.350611376e-05f, -5.373018044e-05f, -5.395413616e-05f, -5.417798055e-05f, -5.440171323e-05f, -5.462533381e-05f, -5.484884193e-05f, -5.507223720e-05f,
--5.529551925e-05f, -5.551868770e-05f, -5.574174217e-05f, -5.596468228e-05f, -5.618750767e-05f, -5.641021795e-05f, -5.663281274e-05f, -5.685529168e-05f, -5.707765439e-05f, -5.729990048e-05f,
--5.752202959e-05f, -5.774404134e-05f, -5.796593536e-05f, -5.818771128e-05f, -5.840936871e-05f, -5.863090728e-05f, -5.885232662e-05f, -5.907362637e-05f, -5.929480613e-05f, -5.951586555e-05f,
--5.973680424e-05f, -5.995762185e-05f, -6.017831798e-05f, -6.039889228e-05f, -6.061934437e-05f, -6.083967387e-05f, -6.105988043e-05f, -6.127996366e-05f, -6.149992319e-05f, -6.171975866e-05f,
--6.193946970e-05f, -6.215905593e-05f, -6.237851698e-05f, -6.259785249e-05f, -6.281706209e-05f, -6.303614541e-05f, -6.325510207e-05f, -6.347393171e-05f, -6.369263397e-05f, -6.391120847e-05f,
--6.412965484e-05f, -6.434797272e-05f, -6.456616175e-05f, -6.478422154e-05f, -6.500215175e-05f, -6.521995199e-05f, -6.543762191e-05f, -6.565516114e-05f, -6.587256931e-05f, -6.608984606e-05f,
--6.630699102e-05f, -6.652400382e-05f, -6.674088411e-05f, -6.695763152e-05f, -6.717424568e-05f, -6.739072623e-05f, -6.760707280e-05f, -6.782328504e-05f, -6.803936258e-05f, -6.825530505e-05f,
--6.847111210e-05f, -6.868678335e-05f, -6.890231846e-05f, -6.911771705e-05f, -6.933297877e-05f, -6.954810326e-05f, -6.976309015e-05f, -6.997793908e-05f, -7.019264969e-05f, -7.040722162e-05f,
--7.062165452e-05f, -7.083594801e-05f, -7.105010176e-05f, -7.126411538e-05f, -7.147798853e-05f, -7.169172084e-05f, -7.190531196e-05f, -7.211876154e-05f, -7.233206920e-05f, -7.254523460e-05f,
--7.275825737e-05f, -7.297113716e-05f, -7.318387362e-05f, -7.339646639e-05f, -7.360891510e-05f, -7.382121941e-05f, -7.403337896e-05f, -7.424539339e-05f, -7.445726235e-05f, -7.466898549e-05f,
--7.488056244e-05f, -7.509199286e-05f, -7.530327639e-05f, -7.551441268e-05f, -7.572540138e-05f, -7.593624212e-05f, -7.614693457e-05f, -7.635747836e-05f, -7.656787314e-05f, -7.677811857e-05f,
--7.698821428e-05f, -7.719815994e-05f, -7.740795518e-05f, -7.761759966e-05f, -7.782709303e-05f, -7.803643493e-05f, -7.824562502e-05f, -7.845466295e-05f, -7.866354836e-05f, -7.887228092e-05f,
--7.908086026e-05f, -7.928928604e-05f, -7.949755792e-05f, -7.970567554e-05f, -7.991363857e-05f, -8.012144664e-05f, -8.032909941e-05f, -8.053659655e-05f, -8.074393769e-05f, -8.095112250e-05f,
--8.115815062e-05f, -8.136502172e-05f, -8.157173545e-05f, -8.177829146e-05f, -8.198468941e-05f, -8.219092895e-05f, -8.239700975e-05f, -8.260293145e-05f, -8.280869371e-05f, -8.301429620e-05f,
--8.321973856e-05f, -8.342502046e-05f, -8.363014155e-05f, -8.383510149e-05f, -8.403989994e-05f, -8.424453656e-05f, -8.444901100e-05f, -8.465332293e-05f, -8.485747201e-05f, -8.506145790e-05f,
--8.526528025e-05f, -8.546893873e-05f, -8.567243300e-05f, -8.587576272e-05f, -8.607892754e-05f, -8.628192715e-05f, -8.648476118e-05f, -8.668742932e-05f, -8.688993121e-05f, -8.709226653e-05f,
--8.729443493e-05f, -8.749643609e-05f, -8.769826966e-05f, -8.789993531e-05f, -8.810143270e-05f, -8.830276150e-05f, -8.850392138e-05f, -8.870491200e-05f, -8.890573302e-05f, -8.910638411e-05f,
--8.930686495e-05f, -8.950717519e-05f, -8.970731450e-05f, -8.990728255e-05f, -9.010707901e-05f, -9.030670355e-05f, -9.050615583e-05f, -9.070543553e-05f, -9.090454231e-05f, -9.110347584e-05f,
--9.130223580e-05f, -9.150082185e-05f, -9.169923366e-05f, -9.189747091e-05f, -9.209553326e-05f, -9.229342039e-05f, -9.249113197e-05f, -9.268866767e-05f, -9.288602716e-05f, -9.308321012e-05f,
--9.328021622e-05f, -9.347704513e-05f, -9.367369653e-05f, -9.387017009e-05f, -9.406646548e-05f, -9.426258239e-05f, -9.445852048e-05f, -9.465427943e-05f, -9.484985892e-05f, -9.504525862e-05f,
--9.524047821e-05f, -9.543551736e-05f, -9.563037576e-05f, -9.582505308e-05f, -9.601954900e-05f, -9.621386320e-05f, -9.640799535e-05f, -9.660194514e-05f, -9.679571224e-05f, -9.698929633e-05f,
--9.718269709e-05f, -9.737591421e-05f, -9.756894737e-05f, -9.776179623e-05f, -9.795446050e-05f, -9.814693984e-05f, -9.833923394e-05f, -9.853134248e-05f, -9.872326515e-05f, -9.891500163e-05f,
--9.910655159e-05f, -9.929791474e-05f, -9.948909074e-05f, -9.968007928e-05f, -9.987088005e-05f, -1.000614927e-04f, -1.002519170e-04f, -1.004421526e-04f, -1.006321991e-04f, -1.008220563e-04f,
--1.010117239e-04f, -1.012012014e-04f, -1.013904887e-04f, -1.015795854e-04f, -1.017684912e-04f, -1.019572058e-04f, -1.021457288e-04f, -1.023340600e-04f, -1.025221991e-04f, -1.027101457e-04f,
--1.028978995e-04f, -1.030854603e-04f, -1.032728276e-04f, -1.034600013e-04f, -1.036469810e-04f, -1.038337663e-04f, -1.040203571e-04f, -1.042067529e-04f, -1.043929535e-04f, -1.045789585e-04f,
--1.047647677e-04f, -1.049503808e-04f, -1.051357974e-04f, -1.053210172e-04f, -1.055060400e-04f, -1.056908654e-04f, -1.058754932e-04f, -1.060599229e-04f, -1.062441544e-04f, -1.064281873e-04f,
--1.066120213e-04f, -1.067956561e-04f, -1.069790915e-04f, -1.071623270e-04f, -1.073453625e-04f, -1.075281976e-04f, -1.077108320e-04f, -1.078932654e-04f, -1.080754975e-04f, -1.082575280e-04f,
--1.084393566e-04f, -1.086209831e-04f, -1.088024070e-04f, -1.089836282e-04f, -1.091646463e-04f, -1.093454611e-04f, -1.095260721e-04f, -1.097064792e-04f, -1.098866821e-04f, -1.100666803e-04f,
--1.102464738e-04f, -1.104260621e-04f, -1.106054449e-04f, -1.107846220e-04f, -1.109635931e-04f, -1.111423578e-04f, -1.113209160e-04f, -1.114992672e-04f, -1.116774113e-04f, -1.118553478e-04f,
--1.120330766e-04f, -1.122105973e-04f, -1.123879096e-04f, -1.125650133e-04f, -1.127419081e-04f, -1.129185936e-04f, -1.130950696e-04f, -1.132713358e-04f, -1.134473919e-04f, -1.136232376e-04f,
--1.137988727e-04f, -1.139742968e-04f, -1.141495096e-04f, -1.143245110e-04f, -1.144993005e-04f, -1.146738779e-04f, -1.148482429e-04f, -1.150223953e-04f, -1.151963347e-04f, -1.153700609e-04f,
--1.155435735e-04f, -1.157168724e-04f, -1.158899572e-04f, -1.160628276e-04f, -1.162354833e-04f, -1.164079241e-04f, -1.165801497e-04f, -1.167521599e-04f, -1.169239542e-04f, -1.170955325e-04f,
--1.172668945e-04f, -1.174380398e-04f, -1.176089683e-04f, -1.177796796e-04f, -1.179501734e-04f, -1.181204496e-04f, -1.182905077e-04f, -1.184603476e-04f, -1.186299689e-04f, -1.187993713e-04f,
--1.189685547e-04f, -1.191375187e-04f, -1.193062631e-04f, -1.194747875e-04f, -1.196430917e-04f, -1.198111755e-04f, -1.199790385e-04f, -1.201466805e-04f, -1.203141011e-04f, -1.204813003e-04f,
--1.206482776e-04f, -1.208150328e-04f, -1.209815656e-04f, -1.211478757e-04f, -1.213139630e-04f, -1.214798271e-04f, -1.216454677e-04f, -1.218108846e-04f, -1.219760775e-04f, -1.221410461e-04f,
--1.223057902e-04f, -1.224703096e-04f, -1.226346038e-04f, -1.227986728e-04f, -1.229625161e-04f, -1.231261336e-04f, -1.232895250e-04f, -1.234526900e-04f, -1.236156284e-04f, -1.237783398e-04f,
--1.239408241e-04f, -1.241030809e-04f, -1.242651100e-04f, -1.244269112e-04f, -1.245884841e-04f, -1.247498286e-04f, -1.249109443e-04f, -1.250718310e-04f, -1.252324884e-04f, -1.253929163e-04f,
--1.255531145e-04f, -1.257130825e-04f, -1.258728203e-04f, -1.260323276e-04f, -1.261916040e-04f, -1.263506493e-04f, -1.265094633e-04f, -1.266680457e-04f, -1.268263963e-04f, -1.269845148e-04f,
--1.271424010e-04f, -1.273000545e-04f, -1.274574752e-04f, -1.276146628e-04f, -1.277716170e-04f, -1.279283375e-04f, -1.280848243e-04f, -1.282410768e-04f, -1.283970951e-04f, -1.285528787e-04f,
--1.287084274e-04f, -1.288637410e-04f, -1.290188192e-04f, -1.291736618e-04f, -1.293282685e-04f, -1.294826391e-04f, -1.296367733e-04f, -1.297906710e-04f, -1.299443317e-04f, -1.300977554e-04f,
--1.302509417e-04f, -1.304038903e-04f, -1.305566012e-04f, -1.307090739e-04f, -1.308613083e-04f, -1.310133042e-04f, -1.311650612e-04f, -1.313165791e-04f, -1.314678577e-04f, -1.316188968e-04f,
--1.317696961e-04f, -1.319202553e-04f, -1.320705743e-04f, -1.322206527e-04f, -1.323704904e-04f, -1.325200871e-04f, -1.326694425e-04f, -1.328185565e-04f, -1.329674287e-04f, -1.331160590e-04f,
--1.332644471e-04f, -1.334125928e-04f, -1.335604959e-04f, -1.337081560e-04f, -1.338555730e-04f, -1.340027466e-04f, -1.341496766e-04f, -1.342963627e-04f, -1.344428048e-04f, -1.345890026e-04f,
--1.347349558e-04f, -1.348806643e-04f, -1.350261278e-04f, -1.351713460e-04f, -1.353163187e-04f, -1.354610458e-04f, -1.356055269e-04f, -1.357497618e-04f, -1.358937504e-04f, -1.360374923e-04f,
--1.361809874e-04f, -1.363242355e-04f, -1.364672362e-04f, -1.366099893e-04f, -1.367524948e-04f, -1.368947522e-04f, -1.370367614e-04f, -1.371785222e-04f, -1.373200343e-04f, -1.374612975e-04f,
--1.376023117e-04f, -1.377430764e-04f, -1.378835917e-04f, -1.380238571e-04f, -1.381638725e-04f, -1.383036377e-04f, -1.384431525e-04f, -1.385824166e-04f, -1.387214298e-04f, -1.388601919e-04f,
--1.389987027e-04f, -1.391369619e-04f, -1.392749693e-04f, -1.394127248e-04f, -1.395502281e-04f, -1.396874789e-04f, -1.398244771e-04f, -1.399612224e-04f, -1.400977147e-04f, -1.402339537e-04f,
--1.403699392e-04f, -1.405056709e-04f, -1.406411488e-04f, -1.407763724e-04f, -1.409113418e-04f, -1.410460565e-04f, -1.411805165e-04f, -1.413147215e-04f, -1.414486713e-04f, -1.415823656e-04f,
--1.417158043e-04f, -1.418489872e-04f, -1.419819141e-04f, -1.421145846e-04f, -1.422469987e-04f, -1.423791562e-04f, -1.425110567e-04f, -1.426427002e-04f, -1.427740864e-04f, -1.429052150e-04f,
--1.430360860e-04f, -1.431666990e-04f, -1.432970539e-04f, -1.434271505e-04f, -1.435569885e-04f, -1.436865679e-04f, -1.438158883e-04f, -1.439449495e-04f, -1.440737514e-04f, -1.442022938e-04f,
--1.443305764e-04f, -1.444585991e-04f, -1.445863616e-04f, -1.447138638e-04f, -1.448411054e-04f, -1.449680863e-04f, -1.450948062e-04f, -1.452212650e-04f, -1.453474625e-04f, -1.454733984e-04f,
--1.455990726e-04f, -1.457244849e-04f, -1.458496350e-04f, -1.459745229e-04f, -1.460991482e-04f, -1.462235108e-04f, -1.463476104e-04f, -1.464714470e-04f, -1.465950203e-04f, -1.467183302e-04f,
--1.468413763e-04f, -1.469641586e-04f, -1.470866768e-04f, -1.472089308e-04f, -1.473309203e-04f, -1.474526453e-04f, -1.475741054e-04f, -1.476953004e-04f, -1.478162303e-04f, -1.479368949e-04f,
--1.480572938e-04f, -1.481774270e-04f, -1.482972942e-04f, -1.484168954e-04f, -1.485362302e-04f, -1.486552985e-04f, -1.487741001e-04f, -1.488926349e-04f, -1.490109026e-04f, -1.491289031e-04f,
--1.492466361e-04f, -1.493641016e-04f, -1.494812993e-04f, -1.495982290e-04f, -1.497148906e-04f, -1.498312839e-04f, -1.499474087e-04f, -1.500632648e-04f, -1.501788520e-04f, -1.502941702e-04f,
--1.504092192e-04f, -1.505239988e-04f, -1.506385088e-04f, -1.507527491e-04f, -1.508667194e-04f, -1.509804197e-04f, -1.510938497e-04f, -1.512070092e-04f, -1.513198981e-04f, -1.514325163e-04f,
--1.515448634e-04f, -1.516569395e-04f, -1.517687442e-04f, -1.518802774e-04f, -1.519915390e-04f, -1.521025288e-04f, -1.522132466e-04f, -1.523236922e-04f, -1.524338655e-04f, -1.525437662e-04f,
--1.526533944e-04f, -1.527627496e-04f, -1.528718319e-04f, -1.529806410e-04f, -1.530891768e-04f, -1.531974391e-04f, -1.533054277e-04f, -1.534131425e-04f, -1.535205832e-04f, -1.536277499e-04f,
--1.537346422e-04f, -1.538412600e-04f, -1.539476031e-04f, -1.540536715e-04f, -1.541594649e-04f, -1.542649832e-04f, -1.543702261e-04f, -1.544751936e-04f, -1.545798856e-04f, -1.546843017e-04f,
--1.547884419e-04f, -1.548923060e-04f, -1.549958939e-04f, -1.550992054e-04f, -1.552022403e-04f, -1.553049986e-04f, -1.554074799e-04f, -1.555096842e-04f, -1.556116114e-04f, -1.557132612e-04f,
--1.558146336e-04f, -1.559157283e-04f, -1.560165452e-04f, -1.561170842e-04f, -1.562173451e-04f, -1.563173277e-04f, -1.564170319e-04f, -1.565164576e-04f, -1.566156047e-04f, -1.567144728e-04f,
--1.568130620e-04f, -1.569113720e-04f, -1.570094028e-04f, -1.571071541e-04f, -1.572046259e-04f, -1.573018179e-04f, -1.573987300e-04f, -1.574953622e-04f, -1.575917141e-04f, -1.576877858e-04f,
--1.577835770e-04f, -1.578790876e-04f, -1.579743175e-04f, -1.580692665e-04f, -1.581639345e-04f, -1.582583214e-04f, -1.583524269e-04f, -1.584462510e-04f, -1.585397936e-04f, -1.586330544e-04f,
--1.587260333e-04f, -1.588187303e-04f, -1.589111451e-04f, -1.590032777e-04f, -1.590951278e-04f, -1.591866954e-04f, -1.592779804e-04f, -1.593689825e-04f, -1.594597017e-04f, -1.595501378e-04f,
--1.596402907e-04f, -1.597301602e-04f, -1.598197462e-04f, -1.599090487e-04f, -1.599980674e-04f, -1.600868022e-04f, -1.601752530e-04f, -1.602634197e-04f, -1.603513022e-04f, -1.604389002e-04f,
--1.605262137e-04f, -1.606132426e-04f, -1.606999866e-04f, -1.607864458e-04f, -1.608726200e-04f, -1.609585090e-04f, -1.610441127e-04f, -1.611294310e-04f, -1.612144637e-04f, -1.612992108e-04f,
--1.613836722e-04f, -1.614678476e-04f, -1.615517370e-04f, -1.616353403e-04f, -1.617186573e-04f, -1.618016879e-04f, -1.618844320e-04f, -1.619668894e-04f, -1.620490601e-04f, -1.621309440e-04f,
--1.622125408e-04f, -1.622938506e-04f, -1.623748731e-04f, -1.624556083e-04f, -1.625360560e-04f, -1.626162162e-04f, -1.626960887e-04f, -1.627756734e-04f, -1.628549701e-04f, -1.629339788e-04f,
--1.630126994e-04f, -1.630911318e-04f, -1.631692757e-04f, -1.632471312e-04f, -1.633246981e-04f, -1.634019763e-04f, -1.634789657e-04f, -1.635556661e-04f, -1.636320775e-04f, -1.637081998e-04f,
--1.637840328e-04f, -1.638595765e-04f, -1.639348307e-04f, -1.640097954e-04f, -1.640844703e-04f, -1.641588555e-04f, -1.642329508e-04f, -1.643067561e-04f, -1.643802713e-04f, -1.644534963e-04f,
--1.645264310e-04f, -1.645990753e-04f, -1.646714290e-04f, -1.647434922e-04f, -1.648152647e-04f, -1.648867463e-04f, -1.649579371e-04f, -1.650288368e-04f, -1.650994454e-04f, -1.651697628e-04f,
--1.652397889e-04f, -1.653095236e-04f, -1.653789667e-04f, -1.654481183e-04f, -1.655169782e-04f, -1.655855463e-04f, -1.656538225e-04f, -1.657218068e-04f, -1.657894989e-04f, -1.658568989e-04f,
--1.659240067e-04f, -1.659908220e-04f, -1.660573450e-04f, -1.661235754e-04f, -1.661895131e-04f, -1.662551582e-04f, -1.663205104e-04f, -1.663855698e-04f, -1.664503361e-04f, -1.665148094e-04f,
--1.665789896e-04f, -1.666428764e-04f, -1.667064700e-04f, -1.667697701e-04f, -1.668327767e-04f, -1.668954897e-04f, -1.669579091e-04f, -1.670200347e-04f, -1.670818664e-04f, -1.671434042e-04f,
--1.672046480e-04f, -1.672655977e-04f, -1.673262532e-04f, -1.673866145e-04f, -1.674466814e-04f, -1.675064539e-04f, -1.675659319e-04f, -1.676251154e-04f, -1.676840042e-04f, -1.677425982e-04f,
--1.678008974e-04f, -1.678589018e-04f, -1.679166112e-04f, -1.679740255e-04f, -1.680311448e-04f, -1.680879688e-04f, -1.681444976e-04f, -1.682007311e-04f, -1.682566691e-04f, -1.683123116e-04f,
--1.683676586e-04f, -1.684227100e-04f, -1.684774657e-04f, -1.685319256e-04f, -1.685860896e-04f, -1.686399578e-04f, -1.686935299e-04f, -1.687468060e-04f, -1.687997860e-04f, -1.688524698e-04f,
--1.689048574e-04f, -1.689569486e-04f, -1.690087435e-04f, -1.690602419e-04f, -1.691114438e-04f, -1.691623491e-04f, -1.692129578e-04f, -1.692632697e-04f, -1.693132849e-04f, -1.693630033e-04f,
--1.694124247e-04f, -1.694615492e-04f, -1.695103767e-04f, -1.695589071e-04f, -1.696071404e-04f, -1.696550765e-04f, -1.697027153e-04f, -1.697500568e-04f, -1.697971010e-04f, -1.698438477e-04f,
--1.698902969e-04f, -1.699364486e-04f, -1.699823026e-04f, -1.700278591e-04f, -1.700731178e-04f, -1.701180787e-04f, -1.701627419e-04f, -1.702071071e-04f, -1.702511745e-04f, -1.702949438e-04f,
--1.703384152e-04f, -1.703815885e-04f, -1.704244636e-04f, -1.704670406e-04f, -1.705093193e-04f, -1.705512998e-04f, -1.705929819e-04f, -1.706343657e-04f, -1.706754510e-04f, -1.707162379e-04f,
--1.707567263e-04f, -1.707969161e-04f, -1.708368073e-04f, -1.708763998e-04f, -1.709156937e-04f, -1.709546888e-04f, -1.709933851e-04f, -1.710317827e-04f, -1.710698813e-04f, -1.711076811e-04f,
--1.711451819e-04f, -1.711823837e-04f, -1.712192865e-04f, -1.712558902e-04f, -1.712921948e-04f, -1.713282002e-04f, -1.713639065e-04f, -1.713993136e-04f, -1.714344213e-04f, -1.714692298e-04f,
--1.715037390e-04f, -1.715379488e-04f, -1.715718592e-04f, -1.716054701e-04f, -1.716387816e-04f, -1.716717936e-04f, -1.717045061e-04f, -1.717369189e-04f, -1.717690322e-04f, -1.718008459e-04f,
--1.718323598e-04f, -1.718635741e-04f, -1.718944887e-04f, -1.719251035e-04f, -1.719554185e-04f, -1.719854338e-04f, -1.720151492e-04f, -1.720445647e-04f, -1.720736803e-04f, -1.721024960e-04f,
--1.721310118e-04f, -1.721592276e-04f, -1.721871434e-04f, -1.722147592e-04f, -1.722420750e-04f, -1.722690907e-04f, -1.722958063e-04f, -1.723222218e-04f, -1.723483372e-04f, -1.723741524e-04f,
--1.723996675e-04f, -1.724248823e-04f, -1.724497970e-04f, -1.724744114e-04f, -1.724987256e-04f, -1.725227396e-04f, -1.725464532e-04f, -1.725698666e-04f, -1.725929796e-04f, -1.726157923e-04f,
--1.726383047e-04f, -1.726605167e-04f, -1.726824283e-04f, -1.727040396e-04f, -1.727253504e-04f, -1.727463608e-04f, -1.727670708e-04f, -1.727874804e-04f, -1.728075896e-04f, -1.728273982e-04f,
--1.728469064e-04f, -1.728661142e-04f, -1.728850214e-04f, -1.729036282e-04f, -1.729219344e-04f, -1.729399401e-04f, -1.729576454e-04f, -1.729750501e-04f, -1.729921542e-04f, -1.730089579e-04f,
--1.730254610e-04f, -1.730416636e-04f, -1.730575656e-04f, -1.730731670e-04f, -1.730884680e-04f, -1.731034683e-04f, -1.731181681e-04f, -1.731325674e-04f, -1.731466661e-04f, -1.731604642e-04f,
--1.731739618e-04f, -1.731871588e-04f, -1.732000553e-04f, -1.732126512e-04f, -1.732249466e-04f, -1.732369414e-04f, -1.732486357e-04f, -1.732600294e-04f, -1.732711226e-04f, -1.732819153e-04f,
--1.732924075e-04f, -1.733025991e-04f, -1.733124903e-04f, -1.733220809e-04f, -1.733313710e-04f, -1.733403607e-04f, -1.733490498e-04f, -1.733574385e-04f, -1.733655268e-04f, -1.733733146e-04f,
--1.733808019e-04f, -1.733879888e-04f, -1.733948753e-04f, -1.734014614e-04f, -1.734077472e-04f, -1.734137325e-04f, -1.734194175e-04f, -1.734248021e-04f, -1.734298864e-04f, -1.734346704e-04f,
--1.734391541e-04f, -1.734433375e-04f, -1.734472206e-04f, -1.734508035e-04f, -1.734540862e-04f, -1.734570686e-04f, -1.734597509e-04f, -1.734621329e-04f, -1.734642148e-04f, -1.734659966e-04f,
--1.734674783e-04f, -1.734686599e-04f, -1.734695414e-04f, -1.734701229e-04f, -1.734704043e-04f, -1.734703858e-04f, -1.734700672e-04f, -1.734694488e-04f, -1.734685304e-04f, -1.734673121e-04f,
--1.734657939e-04f, -1.734639759e-04f, -1.734618581e-04f, -1.734594405e-04f, -1.734567231e-04f, -1.734537060e-04f, -1.734503892e-04f, -1.734467727e-04f, -1.734428566e-04f, -1.734386408e-04f,
--1.734341255e-04f, -1.734293107e-04f, -1.734241963e-04f, -1.734187824e-04f, -1.734130691e-04f, -1.734070564e-04f, -1.734007443e-04f, -1.733941329e-04f, -1.733872221e-04f, -1.733800121e-04f,
--1.733725029e-04f, -1.733646944e-04f, -1.733565868e-04f, -1.733481801e-04f, -1.733394743e-04f, -1.733304694e-04f, -1.733211656e-04f, -1.733115627e-04f, -1.733016610e-04f, -1.732914604e-04f,
--1.732809609e-04f, -1.732701626e-04f, -1.732590656e-04f, -1.732476699e-04f, -1.732359755e-04f, -1.732239825e-04f, -1.732116909e-04f, -1.731991008e-04f, -1.731862121e-04f, -1.731730251e-04f,
--1.731595396e-04f, -1.731457558e-04f, -1.731316738e-04f, -1.731172934e-04f, -1.731026149e-04f, -1.730876382e-04f, -1.730723634e-04f, -1.730567906e-04f, -1.730409197e-04f, -1.730247510e-04f,
--1.730082843e-04f, -1.729915198e-04f, -1.729744575e-04f, -1.729570974e-04f, -1.729394397e-04f, -1.729214843e-04f, -1.729032314e-04f, -1.728846810e-04f, -1.728658331e-04f, -1.728466878e-04f,
--1.728272451e-04f, -1.728075052e-04f, -1.727874681e-04f, -1.727671337e-04f, -1.727465023e-04f, -1.727255738e-04f, -1.727043483e-04f, -1.726828259e-04f, -1.726610066e-04f, -1.726388905e-04f,
--1.726164777e-04f, -1.725937681e-04f, -1.725707620e-04f, -1.725474593e-04f, -1.725238601e-04f, -1.724999645e-04f, -1.724757725e-04f, -1.724512843e-04f, -1.724264998e-04f, -1.724014191e-04f,
--1.723760423e-04f, -1.723503696e-04f, -1.723244008e-04f, -1.722981362e-04f, -1.722715758e-04f, -1.722447196e-04f, -1.722175677e-04f, -1.721901202e-04f, -1.721623772e-04f, -1.721343387e-04f,
--1.721060048e-04f, -1.720773756e-04f, -1.720484512e-04f, -1.720192315e-04f, -1.719897168e-04f, -1.719599071e-04f, -1.719298024e-04f, -1.718994028e-04f, -1.718687085e-04f, -1.718377194e-04f,
--1.718064357e-04f, -1.717748574e-04f, -1.717429847e-04f, -1.717108175e-04f, -1.716783560e-04f, -1.716456003e-04f, -1.716125504e-04f, -1.715792064e-04f, -1.715455684e-04f, -1.715116365e-04f,
--1.714774108e-04f, -1.714428913e-04f, -1.714080781e-04f, -1.713729714e-04f, -1.713375711e-04f, -1.713018774e-04f, -1.712658904e-04f, -1.712296102e-04f, -1.711930367e-04f, -1.711561702e-04f,
--1.711190108e-04f, -1.710815584e-04f, -1.710438132e-04f, -1.710057753e-04f, -1.709674448e-04f, -1.709288217e-04f, -1.708899062e-04f, -1.708506983e-04f, -1.708111982e-04f, -1.707714059e-04f,
--1.707313215e-04f, -1.706909451e-04f, -1.706502768e-04f, -1.706093167e-04f, -1.705680649e-04f, -1.705265215e-04f, -1.704846866e-04f, -1.704425602e-04f, -1.704001425e-04f, -1.703574336e-04f,
--1.703144336e-04f, -1.702711426e-04f, -1.702275606e-04f, -1.701836877e-04f, -1.701395242e-04f, -1.700950700e-04f, -1.700503252e-04f, -1.700052901e-04f, -1.699599646e-04f, -1.699143488e-04f,
--1.698684430e-04f, -1.698222471e-04f, -1.697757613e-04f, -1.697289857e-04f, -1.696819203e-04f, -1.696345654e-04f, -1.695869209e-04f, -1.695389871e-04f, -1.694907639e-04f, -1.694422516e-04f,
--1.693934502e-04f, -1.693443599e-04f, -1.692949806e-04f, -1.692453127e-04f, -1.691953560e-04f, -1.691451109e-04f, -1.690945773e-04f, -1.690437554e-04f, -1.689926454e-04f, -1.689412472e-04f,
--1.688895610e-04f, -1.688375870e-04f, -1.687853253e-04f, -1.687327759e-04f, -1.686799389e-04f, -1.686268146e-04f, -1.685734030e-04f, -1.685197042e-04f, -1.684657183e-04f, -1.684114455e-04f,
--1.683568859e-04f, -1.683020396e-04f, -1.682469067e-04f, -1.681914873e-04f, -1.681357815e-04f, -1.680797895e-04f, -1.680235114e-04f, -1.679669473e-04f, -1.679100974e-04f, -1.678529617e-04f,
--1.677955403e-04f, -1.677378335e-04f, -1.676798413e-04f, -1.676215638e-04f, -1.675630012e-04f, -1.675041535e-04f, -1.674450210e-04f, -1.673856037e-04f, -1.673259018e-04f, -1.672659154e-04f,
--1.672056446e-04f, -1.671450895e-04f, -1.670842503e-04f, -1.670231272e-04f, -1.669617201e-04f, -1.669000293e-04f, -1.668380549e-04f, -1.667757970e-04f, -1.667132558e-04f, -1.666504313e-04f,
--1.665873238e-04f, -1.665239333e-04f, -1.664602600e-04f, -1.663963040e-04f, -1.663320654e-04f, -1.662675444e-04f, -1.662027412e-04f, -1.661376557e-04f, -1.660722883e-04f, -1.660066390e-04f,
--1.659407079e-04f, -1.658744953e-04f, -1.658080011e-04f, -1.657412256e-04f, -1.656741690e-04f, -1.656068313e-04f, -1.655392126e-04f, -1.654713132e-04f, -1.654031332e-04f, -1.653346726e-04f,
--1.652659317e-04f, -1.651969106e-04f, -1.651276094e-04f, -1.650580283e-04f, -1.649881675e-04f, -1.649180269e-04f, -1.648476069e-04f, -1.647769075e-04f, -1.647059289e-04f, -1.646346713e-04f,
--1.645631347e-04f, -1.644913194e-04f, -1.644192254e-04f, -1.643468530e-04f, -1.642742022e-04f, -1.642012733e-04f, -1.641280663e-04f, -1.640545815e-04f, -1.639808189e-04f, -1.639067787e-04f,
--1.638324611e-04f, -1.637578663e-04f, -1.636829942e-04f, -1.636078453e-04f, -1.635324195e-04f, -1.634567170e-04f, -1.633807380e-04f, -1.633044826e-04f, -1.632279511e-04f, -1.631511434e-04f,
--1.630740599e-04f, -1.629967006e-04f, -1.629190658e-04f, -1.628411555e-04f, -1.627629699e-04f, -1.626845093e-04f, -1.626057736e-04f, -1.625267632e-04f, -1.624474781e-04f, -1.623679185e-04f,
--1.622880847e-04f, -1.622079766e-04f, -1.621275946e-04f, -1.620469387e-04f, -1.619660091e-04f, -1.618848061e-04f, -1.618033296e-04f, -1.617215800e-04f, -1.616395574e-04f, -1.615572619e-04f,
--1.614746937e-04f, -1.613918529e-04f, -1.613087398e-04f, -1.612253545e-04f, -1.611416972e-04f, -1.610577680e-04f, -1.609735671e-04f, -1.608890947e-04f, -1.608043509e-04f, -1.607193359e-04f,
--1.606340498e-04f, -1.605484929e-04f, -1.604626654e-04f, -1.603765673e-04f, -1.602901988e-04f, -1.602035602e-04f, -1.601166516e-04f, -1.600294732e-04f, -1.599420251e-04f, -1.598543075e-04f,
--1.597663206e-04f, -1.596780645e-04f, -1.595895395e-04f, -1.595007457e-04f, -1.594116833e-04f, -1.593223525e-04f, -1.592327534e-04f, -1.591428862e-04f, -1.590527511e-04f, -1.589623483e-04f,
--1.588716779e-04f, -1.587807402e-04f, -1.586895352e-04f, -1.585980633e-04f, -1.585063245e-04f, -1.584143190e-04f, -1.583220471e-04f, -1.582295089e-04f, -1.581367046e-04f, -1.580436344e-04f,
--1.579502984e-04f, -1.578566968e-04f, -1.577628299e-04f, -1.576686978e-04f, -1.575743006e-04f, -1.574796387e-04f, -1.573847121e-04f, -1.572895210e-04f, -1.571940657e-04f, -1.570983463e-04f,
--1.570023630e-04f, -1.569061160e-04f, -1.568096054e-04f, -1.567128316e-04f, -1.566157946e-04f, -1.565184946e-04f, -1.564209319e-04f, -1.563231066e-04f, -1.562250189e-04f, -1.561266690e-04f,
--1.560280571e-04f, -1.559291835e-04f, -1.558300482e-04f, -1.557306514e-04f, -1.556309935e-04f, -1.555310745e-04f, -1.554308947e-04f, -1.553304542e-04f, -1.552297532e-04f, -1.551287920e-04f,
--1.550275708e-04f, -1.549260896e-04f, -1.548243489e-04f, -1.547223486e-04f, -1.546200890e-04f, -1.545175704e-04f, -1.544147929e-04f, -1.543117567e-04f, -1.542084621e-04f, -1.541049091e-04f,
--1.540010981e-04f, -1.538970292e-04f, -1.537927026e-04f, -1.536881185e-04f, -1.535832772e-04f, -1.534781788e-04f, -1.533728235e-04f, -1.532672115e-04f, -1.531613431e-04f, -1.530552184e-04f,
--1.529488377e-04f, -1.528422011e-04f, -1.527353088e-04f, -1.526281612e-04f, -1.525207582e-04f, -1.524131003e-04f, -1.523051875e-04f, -1.521970201e-04f, -1.520885984e-04f, -1.519799224e-04f,
--1.518709924e-04f, -1.517618086e-04f, -1.516523713e-04f, -1.515426806e-04f, -1.514327368e-04f, -1.513225400e-04f, -1.512120905e-04f, -1.511013884e-04f, -1.509904341e-04f, -1.508792277e-04f,
--1.507677694e-04f, -1.506560594e-04f, -1.505440980e-04f, -1.504318853e-04f, -1.503194216e-04f, -1.502067071e-04f, -1.500937420e-04f, -1.499805265e-04f, -1.498670609e-04f, -1.497533453e-04f,
--1.496393800e-04f, -1.495251651e-04f, -1.494107010e-04f, -1.492959878e-04f, -1.491810258e-04f, -1.490658151e-04f, -1.489503560e-04f, -1.488346487e-04f, -1.487186934e-04f, -1.486024903e-04f,
--1.484860397e-04f, -1.483693418e-04f, -1.482523969e-04f, -1.481352050e-04f, -1.480177665e-04f, -1.479000816e-04f, -1.477821504e-04f, -1.476639733e-04f, -1.475455504e-04f, -1.474268821e-04f,
--1.473079684e-04f, -1.471888096e-04f, -1.470694060e-04f, -1.469497577e-04f, -1.468298651e-04f, -1.467097282e-04f, -1.465893475e-04f, -1.464687230e-04f, -1.463478551e-04f, -1.462267438e-04f,
--1.461053896e-04f, -1.459837925e-04f, -1.458619529e-04f, -1.457398710e-04f, -1.456175469e-04f, -1.454949810e-04f, -1.453721734e-04f, -1.452491244e-04f, -1.451258342e-04f, -1.450023031e-04f,
--1.448785313e-04f, -1.447545189e-04f, -1.446302664e-04f, -1.445057738e-04f, -1.443810415e-04f, -1.442560696e-04f, -1.441308584e-04f, -1.440054081e-04f, -1.438797190e-04f, -1.437537913e-04f,
--1.436276252e-04f, -1.435012211e-04f, -1.433745790e-04f, -1.432476993e-04f, -1.431205822e-04f, -1.429932279e-04f, -1.428656367e-04f, -1.427378088e-04f, -1.426097444e-04f, -1.424814439e-04f,
--1.423529073e-04f, -1.422241351e-04f, -1.420951274e-04f, -1.419658844e-04f, -1.418364064e-04f, -1.417066937e-04f, -1.415767465e-04f, -1.414465650e-04f, -1.413161494e-04f, -1.411855001e-04f,
--1.410546173e-04f, -1.409235012e-04f, -1.407921520e-04f, -1.406605701e-04f, -1.405287555e-04f, -1.403967087e-04f, -1.402644299e-04f, -1.401319192e-04f, -1.399991769e-04f, -1.398662034e-04f,
--1.397329988e-04f, -1.395995633e-04f, -1.394658974e-04f, -1.393320010e-04f, -1.391978747e-04f, -1.390635185e-04f, -1.389289328e-04f, -1.387941177e-04f, -1.386590736e-04f, -1.385238007e-04f,
--1.383882992e-04f, -1.382525694e-04f, -1.381166116e-04f, -1.379804260e-04f, -1.378440128e-04f, -1.377073724e-04f, -1.375705049e-04f, -1.374334107e-04f, -1.372960899e-04f, -1.371585429e-04f,
--1.370207698e-04f, -1.368827711e-04f, -1.367445468e-04f, -1.366060973e-04f, -1.364674228e-04f, -1.363285235e-04f, -1.361893999e-04f, -1.360500520e-04f, -1.359104802e-04f, -1.357706847e-04f,
--1.356306657e-04f, -1.354904236e-04f, -1.353499586e-04f, -1.352092710e-04f, -1.350683610e-04f, -1.349272288e-04f, -1.347858748e-04f, -1.346442992e-04f, -1.345025023e-04f, -1.343604843e-04f,
--1.342182455e-04f, -1.340757862e-04f, -1.339331066e-04f, -1.337902069e-04f, -1.336470876e-04f, -1.335037487e-04f, -1.333601907e-04f, -1.332164137e-04f, -1.330724180e-04f, -1.329282038e-04f,
--1.327837716e-04f, -1.326391215e-04f, -1.324942537e-04f, -1.323491686e-04f, -1.322038664e-04f, -1.320583475e-04f, -1.319126119e-04f, -1.317666601e-04f, -1.316204924e-04f, -1.314741089e-04f,
--1.313275099e-04f, -1.311806957e-04f, -1.310336667e-04f, -1.308864230e-04f, -1.307389649e-04f, -1.305912927e-04f, -1.304434067e-04f, -1.302953072e-04f, -1.301469943e-04f, -1.299984685e-04f,
--1.298497299e-04f, -1.297007789e-04f, -1.295516157e-04f, -1.294022406e-04f, -1.292526539e-04f, -1.291028558e-04f, -1.289528466e-04f, -1.288026266e-04f, -1.286521961e-04f, -1.285015554e-04f,
--1.283507047e-04f, -1.281996443e-04f, -1.280483745e-04f, -1.278968955e-04f, -1.277452077e-04f, -1.275933114e-04f, -1.274412067e-04f, -1.272888940e-04f, -1.271363736e-04f, -1.269836457e-04f,
--1.268307107e-04f, -1.266775687e-04f, -1.265242202e-04f, -1.263706653e-04f, -1.262169043e-04f, -1.260629377e-04f, -1.259087655e-04f, -1.257543881e-04f, -1.255998058e-04f, -1.254450189e-04f,
--1.252900277e-04f, -1.251348324e-04f, -1.249794333e-04f, -1.248238307e-04f, -1.246680249e-04f, -1.245120162e-04f, -1.243558049e-04f, -1.241993912e-04f, -1.240427755e-04f, -1.238859580e-04f,
--1.237289390e-04f, -1.235717188e-04f, -1.234142977e-04f, -1.232566760e-04f, -1.230988540e-04f, -1.229408319e-04f, -1.227826101e-04f, -1.226241888e-04f, -1.224655683e-04f, -1.223067490e-04f,
--1.221477311e-04f, -1.219885148e-04f, -1.218291006e-04f, -1.216694887e-04f, -1.215096793e-04f, -1.213496728e-04f, -1.211894695e-04f, -1.210290696e-04f, -1.208684735e-04f, -1.207076814e-04f,
--1.205466937e-04f, -1.203855106e-04f, -1.202241324e-04f, -1.200625594e-04f, -1.199007920e-04f, -1.197388304e-04f, -1.195766748e-04f, -1.194143257e-04f, -1.192517833e-04f, -1.190890479e-04f,
--1.189261198e-04f, -1.187629993e-04f, -1.185996866e-04f, -1.184361822e-04f, -1.182724862e-04f, -1.181085991e-04f, -1.179445210e-04f, -1.177802523e-04f, -1.176157933e-04f, -1.174511443e-04f,
--1.172863055e-04f, -1.171212774e-04f, -1.169560601e-04f, -1.167906540e-04f, -1.166250594e-04f, -1.164592766e-04f, -1.162933059e-04f, -1.161271476e-04f, -1.159608019e-04f, -1.157942693e-04f,
--1.156275500e-04f, -1.154606443e-04f, -1.152935525e-04f, -1.151262749e-04f, -1.149588119e-04f, -1.147911636e-04f, -1.146233305e-04f, -1.144553128e-04f, -1.142871109e-04f, -1.141187250e-04f,
--1.139501555e-04f, -1.137814026e-04f, -1.136124667e-04f, -1.134433481e-04f, -1.132740470e-04f, -1.131045639e-04f, -1.129348989e-04f, -1.127650524e-04f, -1.125950248e-04f, -1.124248163e-04f,
--1.122544272e-04f, -1.120838578e-04f, -1.119131085e-04f, -1.117421795e-04f, -1.115710713e-04f, -1.113997840e-04f, -1.112283180e-04f, -1.110566736e-04f, -1.108848511e-04f, -1.107128508e-04f,
--1.105406731e-04f, -1.103683183e-04f, -1.101957865e-04f, -1.100230783e-04f, -1.098501939e-04f, -1.096771335e-04f, -1.095038976e-04f, -1.093304864e-04f, -1.091569003e-04f, -1.089831395e-04f,
--1.088092044e-04f, -1.086350952e-04f, -1.084608124e-04f, -1.082863562e-04f, -1.081117270e-04f, -1.079369249e-04f, -1.077619505e-04f, -1.075868039e-04f, -1.074114856e-04f, -1.072359957e-04f,
--1.070603347e-04f, -1.068845029e-04f, -1.067085005e-04f, -1.065323279e-04f, -1.063559854e-04f, -1.061794733e-04f, -1.060027920e-04f, -1.058259418e-04f, -1.056489229e-04f, -1.054717358e-04f,
--1.052943807e-04f, -1.051168579e-04f, -1.049391678e-04f, -1.047613107e-04f, -1.045832869e-04f, -1.044050967e-04f, -1.042267404e-04f, -1.040482185e-04f, -1.038695311e-04f, -1.036906787e-04f,
--1.035116615e-04f, -1.033324799e-04f, -1.031531341e-04f, -1.029736246e-04f, -1.027939516e-04f, -1.026141155e-04f, -1.024341165e-04f, -1.022539551e-04f, -1.020736315e-04f, -1.018931461e-04f,
--1.017124991e-04f, -1.015316910e-04f, -1.013507220e-04f, -1.011695924e-04f, -1.009883026e-04f, -1.008068530e-04f, -1.006252438e-04f, -1.004434754e-04f, -1.002615480e-04f, -1.000794621e-04f,
--9.989721795e-05f, -9.971481587e-05f, -9.953225620e-05f, -9.934953926e-05f, -9.916666539e-05f, -9.898363492e-05f, -9.880044817e-05f, -9.861710548e-05f, -9.843360716e-05f, -9.824995357e-05f,
--9.806614501e-05f, -9.788218184e-05f, -9.769806437e-05f, -9.751379293e-05f, -9.732936786e-05f, -9.714478949e-05f, -9.696005816e-05f, -9.677517419e-05f, -9.659013791e-05f, -9.640494966e-05f,
--9.621960977e-05f, -9.603411857e-05f, -9.584847640e-05f, -9.566268360e-05f, -9.547674048e-05f, -9.529064739e-05f, -9.510440467e-05f, -9.491801264e-05f, -9.473147164e-05f, -9.454478201e-05f,
--9.435794408e-05f, -9.417095818e-05f, -9.398382466e-05f, -9.379654384e-05f, -9.360911606e-05f, -9.342154167e-05f, -9.323382099e-05f, -9.304595436e-05f, -9.285794212e-05f, -9.266978460e-05f,
--9.248148215e-05f, -9.229303510e-05f, -9.210444379e-05f, -9.191570856e-05f, -9.172682974e-05f, -9.153780767e-05f, -9.134864270e-05f, -9.115933515e-05f, -9.096988538e-05f, -9.078029371e-05f,
--9.059056050e-05f, -9.040068607e-05f, -9.021067077e-05f, -9.002051493e-05f, -8.983021891e-05f, -8.963978304e-05f, -8.944920765e-05f, -8.925849310e-05f, -8.906763972e-05f, -8.887664785e-05f,
--8.868551784e-05f, -8.849425002e-05f, -8.830284475e-05f, -8.811130235e-05f, -8.791962318e-05f, -8.772780758e-05f, -8.753585588e-05f, -8.734376844e-05f, -8.715154560e-05f, -8.695918769e-05f,
--8.676669507e-05f, -8.657406807e-05f, -8.638130705e-05f, -8.618841234e-05f, -8.599538429e-05f, -8.580222325e-05f, -8.560892955e-05f, -8.541550356e-05f, -8.522194560e-05f, -8.502825603e-05f,
--8.483443519e-05f, -8.464048343e-05f, -8.444640109e-05f, -8.425218852e-05f, -8.405784607e-05f, -8.386337408e-05f, -8.366877290e-05f, -8.347404289e-05f, -8.327918437e-05f, -8.308419771e-05f,
--8.288908325e-05f, -8.269384133e-05f, -8.249847232e-05f, -8.230297654e-05f, -8.210735436e-05f, -8.191160612e-05f, -8.171573218e-05f, -8.151973287e-05f, -8.132360855e-05f, -8.112735957e-05f,
--8.093098627e-05f, -8.073448902e-05f, -8.053786815e-05f, -8.034112402e-05f, -8.014425698e-05f, -7.994726737e-05f, -7.975015556e-05f, -7.955292189e-05f, -7.935556670e-05f, -7.915809036e-05f,
--7.896049322e-05f, -7.876277562e-05f, -7.856493792e-05f, -7.836698047e-05f, -7.816890362e-05f, -7.797070772e-05f, -7.777239313e-05f, -7.757396020e-05f, -7.737540928e-05f, -7.717674073e-05f,
--7.697795490e-05f, -7.677905213e-05f, -7.658003280e-05f, -7.638089724e-05f, -7.618164582e-05f, -7.598227888e-05f, -7.578279679e-05f, -7.558319989e-05f, -7.538348854e-05f, -7.518366310e-05f,
--7.498372391e-05f, -7.478367135e-05f, -7.458350575e-05f, -7.438322748e-05f, -7.418283689e-05f, -7.398233434e-05f, -7.378172019e-05f, -7.358099478e-05f, -7.338015848e-05f, -7.317921164e-05f,
--7.297815462e-05f, -7.277698777e-05f, -7.257571146e-05f, -7.237432604e-05f, -7.217283187e-05f, -7.197122929e-05f, -7.176951869e-05f, -7.156770040e-05f, -7.136577479e-05f, -7.116374221e-05f,
--7.096160303e-05f, -7.075935760e-05f, -7.055700628e-05f, -7.035454943e-05f, -7.015198740e-05f, -6.994932057e-05f, -6.974654928e-05f, -6.954367389e-05f, -6.934069477e-05f, -6.913761228e-05f,
--6.893442677e-05f, -6.873113860e-05f, -6.852774814e-05f, -6.832425574e-05f, -6.812066176e-05f, -6.791696657e-05f, -6.771317053e-05f, -6.750927399e-05f, -6.730527732e-05f, -6.710118087e-05f,
--6.689698502e-05f, -6.669269011e-05f, -6.648829652e-05f, -6.628380460e-05f, -6.607921472e-05f, -6.587452723e-05f, -6.566974250e-05f, -6.546486090e-05f, -6.525988277e-05f, -6.505480850e-05f,
--6.484963843e-05f, -6.464437293e-05f, -6.443901237e-05f, -6.423355710e-05f, -6.402800750e-05f, -6.382236392e-05f, -6.361662672e-05f, -6.341079628e-05f, -6.320487295e-05f, -6.299885710e-05f,
--6.279274908e-05f, -6.258654928e-05f, -6.238025804e-05f, -6.217387574e-05f, -6.196740274e-05f, -6.176083940e-05f, -6.155418609e-05f, -6.134744317e-05f, -6.114061101e-05f, -6.093368997e-05f,
--6.072668042e-05f, -6.051958272e-05f, -6.031239724e-05f, -6.010512434e-05f, -5.989776439e-05f, -5.969031776e-05f, -5.948278481e-05f, -5.927516591e-05f, -5.906746142e-05f, -5.885967171e-05f,
--5.865179715e-05f, -5.844383809e-05f, -5.823579492e-05f, -5.802766800e-05f, -5.781945768e-05f, -5.761116435e-05f, -5.740278836e-05f, -5.719433009e-05f, -5.698578990e-05f, -5.677716816e-05f,
--5.656846523e-05f, -5.635968149e-05f, -5.615081729e-05f, -5.594187302e-05f, -5.573284904e-05f, -5.552374571e-05f, -5.531456340e-05f, -5.510530249e-05f, -5.489596333e-05f, -5.468654631e-05f,
--5.447705178e-05f, -5.426748012e-05f, -5.405783169e-05f, -5.384810687e-05f, -5.363830602e-05f, -5.342842951e-05f, -5.321847771e-05f, -5.300845099e-05f, -5.279834973e-05f, -5.258817428e-05f,
--5.237792502e-05f, -5.216760232e-05f, -5.195720654e-05f, -5.174673807e-05f, -5.153619726e-05f, -5.132558449e-05f, -5.111490013e-05f, -5.090414455e-05f, -5.069331812e-05f, -5.048242121e-05f,
--5.027145419e-05f, -5.006041742e-05f, -4.984931129e-05f, -4.963813617e-05f, -4.942689241e-05f, -4.921558040e-05f, -4.900420051e-05f, -4.879275310e-05f, -4.858123855e-05f, -4.836965723e-05f,
--4.815800950e-05f, -4.794629576e-05f, -4.773451635e-05f, -4.752267166e-05f, -4.731076206e-05f, -4.709878791e-05f, -4.688674960e-05f, -4.667464749e-05f, -4.646248196e-05f, -4.625025337e-05f,
--4.603796210e-05f, -4.582560852e-05f, -4.561319301e-05f, -4.540071593e-05f, -4.518817767e-05f, -4.497557858e-05f, -4.476291905e-05f, -4.455019945e-05f, -4.433742015e-05f, -4.412458152e-05f,
--4.391168393e-05f, -4.369872777e-05f, -4.348571339e-05f, -4.327264119e-05f, -4.305951152e-05f, -4.284632476e-05f, -4.263308129e-05f, -4.241978148e-05f, -4.220642570e-05f, -4.199301433e-05f,
--4.177954774e-05f, -4.156602630e-05f, -4.135245039e-05f, -4.113882038e-05f, -4.092513665e-05f, -4.071139956e-05f, -4.049760950e-05f, -4.028376684e-05f, -4.006987194e-05f, -3.985592520e-05f,
--3.964192697e-05f, -3.942787764e-05f, -3.921377758e-05f, -3.899962716e-05f, -3.878542676e-05f, -3.857117675e-05f, -3.835687751e-05f, -3.814252941e-05f, -3.792813283e-05f, -3.771368814e-05f,
--3.749919572e-05f, -3.728465594e-05f, -3.707006917e-05f, -3.685543580e-05f, -3.664075619e-05f, -3.642603072e-05f, -3.621125977e-05f, -3.599644372e-05f, -3.578158293e-05f, -3.556667778e-05f,
--3.535172865e-05f, -3.513673591e-05f, -3.492169995e-05f, -3.470662112e-05f, -3.449149982e-05f, -3.427633641e-05f, -3.406113128e-05f, -3.384588479e-05f, -3.363059732e-05f, -3.341526925e-05f,
--3.319990095e-05f, -3.298449281e-05f, -3.276904519e-05f, -3.255355847e-05f, -3.233803303e-05f, -3.212246924e-05f, -3.190686748e-05f, -3.169122813e-05f, -3.147555156e-05f, -3.125983814e-05f,
--3.104408826e-05f, -3.082830229e-05f, -3.061248061e-05f, -3.039662359e-05f, -3.018073160e-05f, -2.996480503e-05f, -2.974884426e-05f, -2.953284965e-05f, -2.931682158e-05f, -2.910076044e-05f,
--2.888466659e-05f, -2.866854042e-05f, -2.845238229e-05f, -2.823619259e-05f, -2.801997170e-05f, -2.780371998e-05f, -2.758743782e-05f, -2.737112559e-05f, -2.715478368e-05f, -2.693841244e-05f,
--2.672201228e-05f, -2.650558355e-05f, -2.628912663e-05f, -2.607264191e-05f, -2.585612976e-05f, -2.563959055e-05f, -2.542302467e-05f, -2.520643249e-05f, -2.498981438e-05f, -2.477317073e-05f,
--2.455650190e-05f, -2.433980829e-05f, -2.412309026e-05f, -2.390634818e-05f, -2.368958245e-05f, -2.347279343e-05f, -2.325598150e-05f, -2.303914705e-05f, -2.282229043e-05f, -2.260541204e-05f,
--2.238851225e-05f, -2.217159143e-05f, -2.195464997e-05f, -2.173768823e-05f, -2.152070661e-05f, -2.130370546e-05f, -2.108668518e-05f, -2.086964614e-05f, -2.065258871e-05f, -2.043551327e-05f,
--2.021842020e-05f, -2.000130988e-05f, -1.978418268e-05f, -1.956703898e-05f, -1.934987915e-05f, -1.913270358e-05f, -1.891551264e-05f, -1.869830671e-05f, -1.848108616e-05f, -1.826385137e-05f,
--1.804660272e-05f, -1.782934059e-05f, -1.761206535e-05f, -1.739477738e-05f, -1.717747705e-05f, -1.696016474e-05f, -1.674284084e-05f, -1.652550571e-05f, -1.630815974e-05f, -1.609080329e-05f,
--1.587343675e-05f, -1.565606050e-05f, -1.543867491e-05f, -1.522128035e-05f, -1.500387721e-05f, -1.478646586e-05f, -1.456904668e-05f, -1.435162004e-05f, -1.413418632e-05f, -1.391674590e-05f,
--1.369929916e-05f, -1.348184647e-05f, -1.326438820e-05f, -1.304692474e-05f, -1.282945646e-05f, -1.261198374e-05f, -1.239450695e-05f, -1.217702647e-05f, -1.195954269e-05f, -1.174205596e-05f,
--1.152456667e-05f, -1.130707520e-05f, -1.108958193e-05f, -1.087208722e-05f, -1.065459146e-05f, -1.043709502e-05f, -1.021959828e-05f, -1.000210161e-05f, -9.784605395e-06f, -9.567110006e-06f,
--9.349615820e-06f, -9.132123213e-06f, -8.914632561e-06f, -8.697144241e-06f, -8.479658628e-06f, -8.262176098e-06f, -8.044697028e-06f, -7.827221792e-06f, -7.609750768e-06f, -7.392284331e-06f,
--7.174822856e-06f, -6.957366720e-06f, -6.739916298e-06f, -6.522471966e-06f, -6.305034099e-06f, -6.087603074e-06f, -5.870179265e-06f, -5.652763048e-06f, -5.435354799e-06f, -5.217954893e-06f,
--5.000563705e-06f, -4.783181611e-06f, -4.565808986e-06f, -4.348446206e-06f, -4.131093644e-06f, -3.913751678e-06f, -3.696420681e-06f, -3.479101029e-06f, -3.261793096e-06f, -3.044497258e-06f,
--2.827213890e-06f, -2.609943366e-06f, -2.392686062e-06f, -2.175442351e-06f, -1.958212609e-06f, -1.740997210e-06f, -1.523796529e-06f, -1.306610940e-06f, -1.089440818e-06f, -8.722865370e-07f,
--6.551484716e-07f, -4.380269959e-07f, -2.209224843e-07f, -3.835310753e-09f, 2.132341505e-07f, 4.302855254e-07f, 6.473184401e-07f, 8.643325206e-07f, 1.081327393e-06f, 1.298302684e-06f,
-1.515258019e-06f, 1.732193024e-06f, 1.949107327e-06f, 2.166000554e-06f, 2.382872331e-06f, 2.599722285e-06f, 2.816550042e-06f, 3.033355229e-06f, 3.250137473e-06f, 3.466896402e-06f,
-3.683631641e-06f, 3.900342818e-06f, 4.117029560e-06f, 4.333691494e-06f, 4.550328248e-06f, 4.766939448e-06f, 4.983524722e-06f, 5.200083698e-06f, 5.416616003e-06f, 5.633121265e-06f,
-5.849599112e-06f, 6.066049170e-06f, 6.282471069e-06f, 6.498864435e-06f, 6.715228898e-06f, 6.931564085e-06f, 7.147869624e-06f, 7.364145143e-06f, 7.580390271e-06f, 7.796604637e-06f,
-8.012787869e-06f, 8.228939595e-06f, 8.445059443e-06f, 8.661147044e-06f, 8.877202026e-06f, 9.093224017e-06f, 9.309212646e-06f, 9.525167544e-06f, 9.741088338e-06f, 9.956974658e-06f,
-1.017282613e-05f, 1.038864240e-05f, 1.060442307e-05f, 1.082016779e-05f, 1.103587618e-05f, 1.125154788e-05f, 1.146718251e-05f, 1.168277971e-05f, 1.189833910e-05f, 1.211386031e-05f,
-1.232934298e-05f, 1.254478673e-05f, 1.276019120e-05f, 1.297555601e-05f, 1.319088080e-05f, 1.340616520e-05f, 1.362140884e-05f, 1.383661134e-05f, 1.405177235e-05f, 1.426689148e-05f,
-1.448196838e-05f, 1.469700268e-05f, 1.491199400e-05f, 1.512694198e-05f, 1.534184624e-05f, 1.555670643e-05f, 1.577152217e-05f, 1.598629310e-05f, 1.620101884e-05f, 1.641569903e-05f,
-1.663033331e-05f, 1.684492129e-05f, 1.705946263e-05f, 1.727395694e-05f, 1.748840387e-05f, 1.770280304e-05f, 1.791715409e-05f, 1.813145665e-05f, 1.834571036e-05f, 1.855991485e-05f,
-1.877406974e-05f, 1.898817468e-05f, 1.920222930e-05f, 1.941623323e-05f, 1.963018611e-05f, 1.984408757e-05f, 2.005793725e-05f, 2.027173477e-05f, 2.048547978e-05f, 2.069917191e-05f,
-2.091281079e-05f, 2.112639605e-05f, 2.133992734e-05f, 2.155340429e-05f, 2.176682653e-05f, 2.198019369e-05f, 2.219350543e-05f, 2.240676136e-05f, 2.261996112e-05f, 2.283310436e-05f,
-2.304619070e-05f, 2.325921978e-05f, 2.347219124e-05f, 2.368510472e-05f, 2.389795985e-05f, 2.411075627e-05f, 2.432349361e-05f, 2.453617151e-05f, 2.474878961e-05f, 2.496134755e-05f,
-2.517384496e-05f, 2.538628148e-05f, 2.559865675e-05f, 2.581097040e-05f, 2.602322208e-05f, 2.623541142e-05f, 2.644753805e-05f, 2.665960163e-05f, 2.687160177e-05f, 2.708353814e-05f,
-2.729541035e-05f, 2.750721806e-05f, 2.771896090e-05f, 2.793063850e-05f, 2.814225052e-05f, 2.835379658e-05f, 2.856527633e-05f, 2.877668941e-05f, 2.898803545e-05f, 2.919931410e-05f,
-2.941052499e-05f, 2.962166777e-05f, 2.983274208e-05f, 3.004374756e-05f, 3.025468384e-05f, 3.046555058e-05f, 3.067634740e-05f, 3.088707396e-05f, 3.109772988e-05f, 3.130831482e-05f,
-3.151882841e-05f, 3.172927031e-05f, 3.193964013e-05f, 3.214993754e-05f, 3.236016218e-05f, 3.257031367e-05f, 3.278039168e-05f, 3.299039583e-05f, 3.320032578e-05f, 3.341018116e-05f,
-3.361996162e-05f, 3.382966681e-05f, 3.403929636e-05f, 3.424884991e-05f, 3.445832713e-05f, 3.466772763e-05f, 3.487705108e-05f, 3.508629711e-05f, 3.529546537e-05f, 3.550455551e-05f,
-3.571356716e-05f, 3.592249998e-05f, 3.613135360e-05f, 3.634012768e-05f, 3.654882186e-05f, 3.675743578e-05f, 3.696596909e-05f, 3.717442144e-05f, 3.738279247e-05f, 3.759108183e-05f,
-3.779928916e-05f, 3.800741411e-05f, 3.821545634e-05f, 3.842341547e-05f, 3.863129117e-05f, 3.883908308e-05f, 3.904679084e-05f, 3.925441411e-05f, 3.946195252e-05f, 3.966940574e-05f,
-3.987677341e-05f, 4.008405517e-05f, 4.029125068e-05f, 4.049835958e-05f, 4.070538152e-05f, 4.091231615e-05f, 4.111916312e-05f, 4.132592208e-05f, 4.153259269e-05f, 4.173917458e-05f,
-4.194566740e-05f, 4.215207082e-05f, 4.235838448e-05f, 4.256460802e-05f, 4.277074111e-05f, 4.297678339e-05f, 4.318273450e-05f, 4.338859412e-05f, 4.359436187e-05f, 4.380003743e-05f,
-4.400562043e-05f, 4.421111053e-05f, 4.441650738e-05f, 4.462181063e-05f, 4.482701995e-05f, 4.503213497e-05f, 4.523715535e-05f, 4.544208075e-05f, 4.564691082e-05f, 4.585164521e-05f,
-4.605628358e-05f, 4.626082558e-05f, 4.646527086e-05f, 4.666961907e-05f, 4.687386988e-05f, 4.707802294e-05f, 4.728207790e-05f, 4.748603442e-05f, 4.768989215e-05f, 4.789365074e-05f,
-4.809730986e-05f, 4.830086916e-05f, 4.850432830e-05f, 4.870768692e-05f, 4.891094470e-05f, 4.911410128e-05f, 4.931715632e-05f, 4.952010947e-05f, 4.972296041e-05f, 4.992570877e-05f,
-5.012835423e-05f, 5.033089644e-05f, 5.053333505e-05f, 5.073566973e-05f, 5.093790013e-05f, 5.114002592e-05f, 5.134204674e-05f, 5.154396227e-05f, 5.174577215e-05f, 5.194747606e-05f,
-5.214907364e-05f, 5.235056456e-05f, 5.255194848e-05f, 5.275322506e-05f, 5.295439397e-05f, 5.315545485e-05f, 5.335640737e-05f, 5.355725120e-05f, 5.375798599e-05f, 5.395861141e-05f,
-5.415912711e-05f, 5.435953277e-05f, 5.455982804e-05f, 5.476001258e-05f, 5.496008606e-05f, 5.516004815e-05f, 5.535989850e-05f, 5.555963677e-05f, 5.575926264e-05f, 5.595877576e-05f,
-5.615817580e-05f, 5.635746242e-05f, 5.655663529e-05f, 5.675569408e-05f, 5.695463844e-05f, 5.715346805e-05f, 5.735218256e-05f, 5.755078165e-05f, 5.774926498e-05f, 5.794763222e-05f,
-5.814588302e-05f, 5.834401707e-05f, 5.854203402e-05f, 5.873993355e-05f, 5.893771532e-05f, 5.913537899e-05f, 5.933292424e-05f, 5.953035073e-05f, 5.972765814e-05f, 5.992484612e-05f,
-6.012191435e-05f, 6.031886251e-05f, 6.051569024e-05f, 6.071239724e-05f, 6.090898316e-05f, 6.110544767e-05f, 6.130179046e-05f, 6.149801117e-05f, 6.169410950e-05f, 6.189008510e-05f,
-6.208593765e-05f, 6.228166682e-05f, 6.247727228e-05f, 6.267275370e-05f, 6.286811076e-05f, 6.306334313e-05f, 6.325845047e-05f, 6.345343247e-05f, 6.364828879e-05f, 6.384301912e-05f,
-6.403762311e-05f, 6.423210045e-05f, 6.442645081e-05f, 6.462067386e-05f, 6.481476928e-05f, 6.500873675e-05f, 6.520257593e-05f, 6.539628651e-05f, 6.558986815e-05f, 6.578332054e-05f,
-6.597664335e-05f, 6.616983626e-05f, 6.636289893e-05f, 6.655583106e-05f, 6.674863231e-05f, 6.694130237e-05f, 6.713384091e-05f, 6.732624761e-05f, 6.751852214e-05f, 6.771066419e-05f,
-6.790267343e-05f, 6.809454955e-05f, 6.828629222e-05f, 6.847790111e-05f, 6.866937592e-05f, 6.886071631e-05f, 6.905192198e-05f, 6.924299259e-05f, 6.943392784e-05f, 6.962472740e-05f,
-6.981539095e-05f, 7.000591817e-05f, 7.019630875e-05f, 7.038656236e-05f, 7.057667869e-05f, 7.076665743e-05f, 7.095649825e-05f, 7.114620083e-05f, 7.133576487e-05f, 7.152519004e-05f,
-7.171447603e-05f, 7.190362251e-05f, 7.209262919e-05f, 7.228149573e-05f, 7.247022183e-05f, 7.265880717e-05f, 7.284725143e-05f, 7.303555430e-05f, 7.322371547e-05f, 7.341173462e-05f,
-7.359961144e-05f, 7.378734562e-05f, 7.397493684e-05f, 7.416238479e-05f, 7.434968915e-05f, 7.453684962e-05f, 7.472386589e-05f, 7.491073763e-05f, 7.509746454e-05f, 7.528404632e-05f,
-7.547048264e-05f, 7.565677319e-05f, 7.584291768e-05f, 7.602891578e-05f, 7.621476719e-05f, 7.640047159e-05f, 7.658602868e-05f, 7.677143816e-05f, 7.695669970e-05f, 7.714181301e-05f,
-7.732677777e-05f, 7.751159367e-05f, 7.769626042e-05f, 7.788077769e-05f, 7.806514520e-05f, 7.824936261e-05f, 7.843342965e-05f, 7.861734598e-05f, 7.880111132e-05f, 7.898472535e-05f,
-7.916818777e-05f, 7.935149827e-05f, 7.953465656e-05f, 7.971766231e-05f, 7.990051524e-05f, 8.008321504e-05f, 8.026576140e-05f, 8.044815402e-05f, 8.063039259e-05f, 8.081247683e-05f,
-8.099440641e-05f, 8.117618105e-05f, 8.135780043e-05f, 8.153926426e-05f, 8.172057224e-05f, 8.190172406e-05f, 8.208271943e-05f, 8.226355804e-05f, 8.244423959e-05f, 8.262476379e-05f,
-8.280513034e-05f, 8.298533893e-05f, 8.316538926e-05f, 8.334528105e-05f, 8.352501399e-05f, 8.370458778e-05f, 8.388400212e-05f, 8.406325673e-05f, 8.424235129e-05f, 8.442128552e-05f,
-8.460005911e-05f, 8.477867178e-05f, 8.495712322e-05f, 8.513541315e-05f, 8.531354125e-05f, 8.549150725e-05f, 8.566931085e-05f, 8.584695174e-05f, 8.602442964e-05f, 8.620174426e-05f,
-8.637889530e-05f, 8.655588246e-05f, 8.673270546e-05f, 8.690936400e-05f, 8.708585779e-05f, 8.726218654e-05f, 8.743834995e-05f, 8.761434774e-05f, 8.779017962e-05f, 8.796584528e-05f,
-8.814134446e-05f, 8.831667684e-05f, 8.849184215e-05f, 8.866684010e-05f, 8.884167039e-05f, 8.901633274e-05f, 8.919082685e-05f, 8.936515245e-05f, 8.953930924e-05f, 8.971329693e-05f,
-8.988711525e-05f, 9.006076389e-05f, 9.023424258e-05f, 9.040755103e-05f, 9.058068895e-05f, 9.075365606e-05f, 9.092645207e-05f, 9.109907670e-05f, 9.127152966e-05f, 9.144381067e-05f,
-9.161591944e-05f, 9.178785569e-05f, 9.195961915e-05f, 9.213120951e-05f, 9.230262651e-05f, 9.247386986e-05f, 9.264493927e-05f, 9.281583447e-05f, 9.298655518e-05f, 9.315710111e-05f,
-9.332747198e-05f, 9.349766752e-05f, 9.366768743e-05f, 9.383753145e-05f, 9.400719929e-05f, 9.417669068e-05f, 9.434600533e-05f, 9.451514297e-05f, 9.468410332e-05f, 9.485288610e-05f,
-9.502149103e-05f, 9.518991784e-05f, 9.535816625e-05f, 9.552623598e-05f, 9.569412676e-05f, 9.586183831e-05f, 9.602937036e-05f, 9.619672263e-05f, 9.636389485e-05f, 9.653088673e-05f,
-9.669769802e-05f, 9.686432842e-05f, 9.703077768e-05f, 9.719704552e-05f, 9.736313166e-05f, 9.752903583e-05f, 9.769475777e-05f, 9.786029719e-05f, 9.802565382e-05f, 9.819082741e-05f,
-9.835581767e-05f, 9.852062433e-05f, 9.868524713e-05f, 9.884968579e-05f, 9.901394005e-05f, 9.917800964e-05f, 9.934189428e-05f, 9.950559372e-05f, 9.966910767e-05f, 9.983243588e-05f,
-9.999557808e-05f, 1.001585340e-04f, 1.003213034e-04f, 1.004838859e-04f, 1.006462814e-04f, 1.008084895e-04f, 1.009705100e-04f, 1.011323427e-04f, 1.012939872e-04f, 1.014554433e-04f,
-1.016167107e-04f, 1.017777892e-04f, 1.019386785e-04f, 1.020993784e-04f, 1.022598885e-04f, 1.024202087e-04f, 1.025803386e-04f, 1.027402780e-04f, 1.029000266e-04f, 1.030595842e-04f,
-1.032189505e-04f, 1.033781253e-04f, 1.035371083e-04f, 1.036958992e-04f, 1.038544978e-04f, 1.040129037e-04f, 1.041711169e-04f, 1.043291369e-04f, 1.044869636e-04f, 1.046445967e-04f,
-1.048020359e-04f, 1.049592810e-04f, 1.051163317e-04f, 1.052731878e-04f, 1.054298489e-04f, 1.055863149e-04f, 1.057425855e-04f, 1.058986605e-04f, 1.060545395e-04f, 1.062102224e-04f,
-1.063657088e-04f, 1.065209986e-04f, 1.066760915e-04f, 1.068309871e-04f, 1.069856854e-04f, 1.071401859e-04f, 1.072944886e-04f, 1.074485930e-04f, 1.076024990e-04f, 1.077562064e-04f,
-1.079097148e-04f, 1.080630240e-04f, 1.082161338e-04f, 1.083690439e-04f, 1.085217541e-04f, 1.086742641e-04f, 1.088265737e-04f, 1.089786826e-04f, 1.091305906e-04f, 1.092822974e-04f,
-1.094338028e-04f, 1.095851066e-04f, 1.097362085e-04f, 1.098871082e-04f, 1.100378056e-04f, 1.101883003e-04f, 1.103385921e-04f, 1.104886808e-04f, 1.106385662e-04f, 1.107882479e-04f,
-1.109377258e-04f, 1.110869996e-04f, 1.112360691e-04f, 1.113849340e-04f, 1.115335941e-04f, 1.116820492e-04f, 1.118302989e-04f, 1.119783431e-04f, 1.121261816e-04f, 1.122738140e-04f,
-1.124212402e-04f, 1.125684599e-04f, 1.127154728e-04f, 1.128622789e-04f, 1.130088777e-04f, 1.131552690e-04f, 1.133014527e-04f, 1.134474285e-04f, 1.135931962e-04f, 1.137387554e-04f,
-1.138841061e-04f, 1.140292479e-04f, 1.141741806e-04f, 1.143189040e-04f, 1.144634179e-04f, 1.146077220e-04f, 1.147518160e-04f, 1.148956998e-04f, 1.150393732e-04f, 1.151828358e-04f,
-1.153260875e-04f, 1.154691280e-04f, 1.156119571e-04f, 1.157545746e-04f, 1.158969803e-04f, 1.160391738e-04f, 1.161811550e-04f, 1.163229237e-04f, 1.164644796e-04f, 1.166058225e-04f,
-1.167469522e-04f, 1.168878684e-04f, 1.170285710e-04f, 1.171690596e-04f, 1.173093341e-04f, 1.174493943e-04f, 1.175892398e-04f, 1.177288706e-04f, 1.178682863e-04f, 1.180074868e-04f,
-1.181464718e-04f, 1.182852411e-04f, 1.184237944e-04f, 1.185621317e-04f, 1.187002525e-04f, 1.188381568e-04f, 1.189758443e-04f, 1.191133147e-04f, 1.192505679e-04f, 1.193876037e-04f,
-1.195244217e-04f, 1.196610218e-04f, 1.197974038e-04f, 1.199335675e-04f, 1.200695126e-04f, 1.202052390e-04f, 1.203407463e-04f, 1.204760344e-04f, 1.206111031e-04f, 1.207459522e-04f,
-1.208805814e-04f, 1.210149905e-04f, 1.211491794e-04f, 1.212831477e-04f, 1.214168953e-04f, 1.215504220e-04f, 1.216837276e-04f, 1.218168118e-04f, 1.219496744e-04f, 1.220823153e-04f,
-1.222147342e-04f, 1.223469308e-04f, 1.224789051e-04f, 1.226106568e-04f, 1.227421856e-04f, 1.228734914e-04f, 1.230045739e-04f, 1.231354330e-04f, 1.232660684e-04f, 1.233964799e-04f,
-1.235266674e-04f, 1.236566306e-04f, 1.237863693e-04f, 1.239158832e-04f, 1.240451723e-04f, 1.241742363e-04f, 1.243030750e-04f, 1.244316881e-04f, 1.245600755e-04f, 1.246882370e-04f,
-1.248161724e-04f, 1.249438814e-04f, 1.250713639e-04f, 1.251986197e-04f, 1.253256485e-04f, 1.254524502e-04f, 1.255790246e-04f, 1.257053714e-04f, 1.258314904e-04f, 1.259573816e-04f,
-1.260830446e-04f, 1.262084792e-04f, 1.263336854e-04f, 1.264586627e-04f, 1.265834112e-04f, 1.267079305e-04f, 1.268322205e-04f, 1.269562810e-04f, 1.270801118e-04f, 1.272037127e-04f,
-1.273270834e-04f, 1.274502239e-04f, 1.275731338e-04f, 1.276958131e-04f, 1.278182615e-04f, 1.279404788e-04f, 1.280624648e-04f, 1.281842194e-04f, 1.283057424e-04f, 1.284270335e-04f,
-1.285480925e-04f, 1.286689194e-04f, 1.287895138e-04f, 1.289098756e-04f, 1.290300046e-04f, 1.291499007e-04f, 1.292695635e-04f, 1.293889931e-04f, 1.295081890e-04f, 1.296271513e-04f,
-1.297458796e-04f, 1.298643738e-04f, 1.299826338e-04f, 1.301006592e-04f, 1.302184500e-04f, 1.303360060e-04f, 1.304533269e-04f, 1.305704126e-04f, 1.306872629e-04f, 1.308038776e-04f,
-1.309202566e-04f, 1.310363996e-04f, 1.311523065e-04f, 1.312679771e-04f, 1.313834112e-04f, 1.314986087e-04f, 1.316135693e-04f, 1.317282929e-04f, 1.318427792e-04f, 1.319570282e-04f,
-1.320710396e-04f, 1.321848133e-04f, 1.322983491e-04f, 1.324116467e-04f, 1.325247061e-04f, 1.326375271e-04f, 1.327501094e-04f, 1.328624530e-04f, 1.329745575e-04f, 1.330864229e-04f,
-1.331980490e-04f, 1.333094356e-04f, 1.334205826e-04f, 1.335314897e-04f, 1.336421567e-04f, 1.337525836e-04f, 1.338627702e-04f, 1.339727162e-04f, 1.340824215e-04f, 1.341918860e-04f,
-1.343011094e-04f, 1.344100916e-04f, 1.345188325e-04f, 1.346273318e-04f, 1.347355893e-04f, 1.348436051e-04f, 1.349513787e-04f, 1.350589102e-04f, 1.351661993e-04f, 1.352732458e-04f,
-1.353800496e-04f, 1.354866106e-04f, 1.355929285e-04f, 1.356990032e-04f, 1.358048346e-04f, 1.359104224e-04f, 1.360157666e-04f, 1.361208668e-04f, 1.362257231e-04f, 1.363303352e-04f,
-1.364347030e-04f, 1.365388262e-04f, 1.366427048e-04f, 1.367463386e-04f, 1.368497274e-04f, 1.369528711e-04f, 1.370557695e-04f, 1.371584224e-04f, 1.372608297e-04f, 1.373629913e-04f,
-1.374649069e-04f, 1.375665764e-04f, 1.376679998e-04f, 1.377691767e-04f, 1.378701071e-04f, 1.379707908e-04f, 1.380712276e-04f, 1.381714174e-04f, 1.382713601e-04f, 1.383710555e-04f,
-1.384705034e-04f, 1.385697036e-04f, 1.386686561e-04f, 1.387673607e-04f, 1.388658173e-04f, 1.389640256e-04f, 1.390619855e-04f, 1.391596969e-04f, 1.392571597e-04f, 1.393543737e-04f,
-1.394513386e-04f, 1.395480545e-04f, 1.396445211e-04f, 1.397407384e-04f, 1.398367060e-04f, 1.399324240e-04f, 1.400278921e-04f, 1.401231103e-04f, 1.402180783e-04f, 1.403127961e-04f,
-1.404072634e-04f, 1.405014802e-04f, 1.405954463e-04f, 1.406891615e-04f, 1.407826258e-04f, 1.408758389e-04f, 1.409688008e-04f, 1.410615113e-04f, 1.411539702e-04f, 1.412461774e-04f,
-1.413381329e-04f, 1.414298363e-04f, 1.415212877e-04f, 1.416124868e-04f, 1.417034335e-04f, 1.417941278e-04f, 1.418845694e-04f, 1.419747582e-04f, 1.420646940e-04f, 1.421543769e-04f,
-1.422438065e-04f, 1.423329829e-04f, 1.424219057e-04f, 1.425105750e-04f, 1.425989906e-04f, 1.426871523e-04f, 1.427750600e-04f, 1.428627136e-04f, 1.429501130e-04f, 1.430372580e-04f,
-1.431241485e-04f, 1.432107843e-04f, 1.432971654e-04f, 1.433832916e-04f, 1.434691628e-04f, 1.435547788e-04f, 1.436401396e-04f, 1.437252449e-04f, 1.438100947e-04f, 1.438946889e-04f,
-1.439790273e-04f, 1.440631097e-04f, 1.441469362e-04f, 1.442305065e-04f, 1.443138205e-04f, 1.443968781e-04f, 1.444796792e-04f, 1.445622237e-04f, 1.446445114e-04f, 1.447265422e-04f,
-1.448083159e-04f, 1.448898326e-04f, 1.449710920e-04f, 1.450520941e-04f, 1.451328386e-04f, 1.452133256e-04f, 1.452935548e-04f, 1.453735262e-04f, 1.454532396e-04f, 1.455326949e-04f,
-1.456118921e-04f, 1.456908310e-04f, 1.457695114e-04f, 1.458479333e-04f, 1.459260965e-04f, 1.460040010e-04f, 1.460816466e-04f, 1.461590332e-04f, 1.462361607e-04f, 1.463130290e-04f,
-1.463896379e-04f, 1.464659874e-04f, 1.465420774e-04f, 1.466179077e-04f, 1.466934782e-04f, 1.467687888e-04f, 1.468438395e-04f, 1.469186300e-04f, 1.469931604e-04f, 1.470674304e-04f,
-1.471414400e-04f, 1.472151891e-04f, 1.472886776e-04f, 1.473619053e-04f, 1.474348721e-04f, 1.475075781e-04f, 1.475800229e-04f, 1.476522066e-04f, 1.477241291e-04f, 1.477957902e-04f,
-1.478671898e-04f, 1.479383278e-04f, 1.480092042e-04f, 1.480798188e-04f, 1.481501715e-04f, 1.482202623e-04f, 1.482900910e-04f, 1.483596575e-04f, 1.484289617e-04f, 1.484980036e-04f,
-1.485667830e-04f, 1.486352999e-04f, 1.487035540e-04f, 1.487715455e-04f, 1.488392740e-04f, 1.489067397e-04f, 1.489739422e-04f, 1.490408817e-04f, 1.491075579e-04f, 1.491739708e-04f,
-1.492401202e-04f, 1.493060062e-04f, 1.493716285e-04f, 1.494369872e-04f, 1.495020820e-04f, 1.495669130e-04f, 1.496314800e-04f, 1.496957830e-04f, 1.497598218e-04f, 1.498235963e-04f,
-1.498871065e-04f, 1.499503524e-04f, 1.500133337e-04f, 1.500760504e-04f, 1.501385025e-04f, 1.502006897e-04f, 1.502626122e-04f, 1.503242697e-04f, 1.503856622e-04f, 1.504467895e-04f,
-1.505076517e-04f, 1.505682486e-04f, 1.506285802e-04f, 1.506886463e-04f, 1.507484469e-04f, 1.508079819e-04f, 1.508672513e-04f, 1.509262548e-04f, 1.509849925e-04f, 1.510434643e-04f,
-1.511016701e-04f, 1.511596098e-04f, 1.512172834e-04f, 1.512746907e-04f, 1.513318317e-04f, 1.513887063e-04f, 1.514453145e-04f, 1.515016561e-04f, 1.515577310e-04f, 1.516135393e-04f,
-1.516690808e-04f, 1.517243555e-04f, 1.517793632e-04f, 1.518341040e-04f, 1.518885777e-04f, 1.519427843e-04f, 1.519967236e-04f, 1.520503957e-04f, 1.521038004e-04f, 1.521569377e-04f,
-1.522098075e-04f, 1.522624098e-04f, 1.523147444e-04f, 1.523668114e-04f, 1.524186105e-04f, 1.524701419e-04f, 1.525214053e-04f, 1.525724008e-04f, 1.526231282e-04f, 1.526735875e-04f,
-1.527237787e-04f, 1.527737016e-04f, 1.528233563e-04f, 1.528727426e-04f, 1.529218604e-04f, 1.529707098e-04f, 1.530192907e-04f, 1.530676029e-04f, 1.531156465e-04f, 1.531634213e-04f,
-1.532109273e-04f, 1.532581645e-04f, 1.533051328e-04f, 1.533518321e-04f, 1.533982624e-04f, 1.534444236e-04f, 1.534903157e-04f, 1.535359385e-04f, 1.535812921e-04f, 1.536263764e-04f,
-1.536711913e-04f, 1.537157368e-04f, 1.537600128e-04f, 1.538040192e-04f, 1.538477561e-04f, 1.538912233e-04f, 1.539344209e-04f, 1.539773486e-04f, 1.540200066e-04f, 1.540623948e-04f,
-1.541045130e-04f, 1.541463613e-04f, 1.541879395e-04f, 1.542292477e-04f, 1.542702859e-04f, 1.543110538e-04f, 1.543515516e-04f, 1.543917791e-04f, 1.544317363e-04f, 1.544714232e-04f,
-1.545108397e-04f, 1.545499857e-04f, 1.545888613e-04f, 1.546274663e-04f, 1.546658008e-04f, 1.547038646e-04f, 1.547416578e-04f, 1.547791803e-04f, 1.548164321e-04f, 1.548534131e-04f,
-1.548901232e-04f, 1.549265625e-04f, 1.549627308e-04f, 1.549986282e-04f, 1.550342547e-04f, 1.550696101e-04f, 1.551046944e-04f, 1.551395076e-04f, 1.551740497e-04f, 1.552083206e-04f,
-1.552423202e-04f, 1.552760486e-04f, 1.553095058e-04f, 1.553426916e-04f, 1.553756060e-04f, 1.554082490e-04f, 1.554406206e-04f, 1.554727208e-04f, 1.555045494e-04f, 1.555361065e-04f,
-1.555673921e-04f, 1.555984060e-04f, 1.556291484e-04f, 1.556596190e-04f, 1.556898180e-04f, 1.557197453e-04f, 1.557494008e-04f, 1.557787845e-04f, 1.558078965e-04f, 1.558367366e-04f,
-1.558653048e-04f, 1.558936012e-04f, 1.559216256e-04f, 1.559493781e-04f, 1.559768587e-04f, 1.560040672e-04f, 1.560310037e-04f, 1.560576682e-04f, 1.560840607e-04f, 1.561101810e-04f,
-1.561360292e-04f, 1.561616054e-04f, 1.561869093e-04f, 1.562119411e-04f, 1.562367006e-04f, 1.562611880e-04f, 1.562854031e-04f, 1.563093460e-04f, 1.563330166e-04f, 1.563564149e-04f,
-1.563795409e-04f, 1.564023945e-04f, 1.564249758e-04f, 1.564472848e-04f, 1.564693214e-04f, 1.564910855e-04f, 1.565125773e-04f, 1.565337966e-04f, 1.565547435e-04f, 1.565754180e-04f,
-1.565958199e-04f, 1.566159494e-04f, 1.566358064e-04f, 1.566553909e-04f, 1.566747029e-04f, 1.566937424e-04f, 1.567125093e-04f, 1.567310037e-04f, 1.567492255e-04f, 1.567671747e-04f,
-1.567848514e-04f, 1.568022555e-04f, 1.568193870e-04f, 1.568362459e-04f, 1.568528322e-04f, 1.568691459e-04f, 1.568851870e-04f, 1.569009554e-04f, 1.569164513e-04f, 1.569316744e-04f,
-1.569466250e-04f, 1.569613029e-04f, 1.569757082e-04f, 1.569898408e-04f, 1.570037008e-04f, 1.570172882e-04f, 1.570306028e-04f, 1.570436449e-04f, 1.570564143e-04f, 1.570689110e-04f,
-1.570811351e-04f, 1.570930866e-04f, 1.571047654e-04f, 1.571161715e-04f, 1.571273050e-04f, 1.571381659e-04f, 1.571487542e-04f, 1.571590698e-04f, 1.571691128e-04f, 1.571788831e-04f,
-1.571883809e-04f, 1.571976060e-04f, 1.572065586e-04f, 1.572152385e-04f, 1.572236459e-04f, 1.572317807e-04f, 1.572396429e-04f, 1.572472325e-04f, 1.572545496e-04f, 1.572615942e-04f,
-1.572683662e-04f, 1.572748657e-04f, 1.572810927e-04f, 1.572870471e-04f, 1.572927291e-04f, 1.572981386e-04f, 1.573032757e-04f, 1.573081403e-04f, 1.573127325e-04f, 1.573170522e-04f,
-1.573210996e-04f, 1.573248745e-04f, 1.573283771e-04f, 1.573316073e-04f, 1.573345652e-04f, 1.573372508e-04f, 1.573396640e-04f, 1.573418050e-04f, 1.573436737e-04f, 1.573452701e-04f,
-1.573465943e-04f, 1.573476463e-04f, 1.573484261e-04f, 1.573489338e-04f, 1.573491693e-04f, 1.573491326e-04f, 1.573488239e-04f, 1.573482431e-04f, 1.573473902e-04f, 1.573462653e-04f,
-1.573448684e-04f, 1.573431995e-04f, 1.573412587e-04f, 1.573390459e-04f, 1.573365612e-04f, 1.573338046e-04f, 1.573307762e-04f, 1.573274759e-04f, 1.573239039e-04f, 1.573200601e-04f,
-1.573159445e-04f, 1.573115572e-04f, 1.573068983e-04f, 1.573019677e-04f, 1.572967655e-04f, 1.572912917e-04f, 1.572855463e-04f, 1.572795294e-04f, 1.572732410e-04f, 1.572666812e-04f,
-1.572598500e-04f, 1.572527473e-04f, 1.572453733e-04f, 1.572377280e-04f, 1.572298114e-04f, 1.572216235e-04f, 1.572131644e-04f, 1.572044342e-04f, 1.571954328e-04f, 1.571861603e-04f,
-1.571766168e-04f, 1.571668022e-04f, 1.571567167e-04f, 1.571463602e-04f, 1.571357328e-04f, 1.571248345e-04f, 1.571136654e-04f, 1.571022256e-04f, 1.570905150e-04f, 1.570785337e-04f,
-1.570662817e-04f, 1.570537592e-04f, 1.570409660e-04f, 1.570279024e-04f, 1.570145683e-04f, 1.570009637e-04f, 1.569870888e-04f, 1.569729435e-04f, 1.569585279e-04f, 1.569438421e-04f,
-1.569288861e-04f, 1.569136600e-04f, 1.568981637e-04f, 1.568823974e-04f, 1.568663611e-04f, 1.568500548e-04f, 1.568334786e-04f, 1.568166326e-04f, 1.567995168e-04f, 1.567821312e-04f,
-1.567644759e-04f, 1.567465510e-04f, 1.567283565e-04f, 1.567098925e-04f, 1.566911590e-04f, 1.566721561e-04f, 1.566528837e-04f, 1.566333421e-04f, 1.566135312e-04f, 1.565934511e-04f,
-1.565731019e-04f, 1.565524835e-04f, 1.565315962e-04f, 1.565104398e-04f, 1.564890146e-04f, 1.564673205e-04f, 1.564453575e-04f, 1.564231259e-04f, 1.564006256e-04f, 1.563778566e-04f,
-1.563548191e-04f, 1.563315132e-04f, 1.563079387e-04f, 1.562840960e-04f, 1.562599849e-04f, 1.562356056e-04f, 1.562109581e-04f, 1.561860425e-04f, 1.561608588e-04f, 1.561354072e-04f,
-1.561096876e-04f, 1.560837002e-04f, 1.560574451e-04f, 1.560309222e-04f, 1.560041317e-04f, 1.559770736e-04f, 1.559497479e-04f, 1.559221549e-04f, 1.558942945e-04f, 1.558661668e-04f,
-1.558377718e-04f, 1.558091097e-04f, 1.557801805e-04f, 1.557509843e-04f, 1.557215212e-04f, 1.556917912e-04f, 1.556617944e-04f, 1.556315309e-04f, 1.556010007e-04f, 1.555702039e-04f,
-1.555391407e-04f, 1.555078111e-04f, 1.554762151e-04f, 1.554443528e-04f, 1.554122243e-04f, 1.553798298e-04f, 1.553471692e-04f, 1.553142426e-04f, 1.552810501e-04f, 1.552475919e-04f,
-1.552138679e-04f, 1.551798783e-04f, 1.551456232e-04f, 1.551111026e-04f, 1.550763165e-04f, 1.550412652e-04f, 1.550059486e-04f, 1.549703669e-04f, 1.549345201e-04f, 1.548984083e-04f,
-1.548620317e-04f, 1.548253902e-04f, 1.547884840e-04f, 1.547513132e-04f, 1.547138778e-04f, 1.546761779e-04f, 1.546382136e-04f, 1.545999851e-04f, 1.545614923e-04f, 1.545227355e-04f,
-1.544837146e-04f, 1.544444297e-04f, 1.544048811e-04f, 1.543650686e-04f, 1.543249925e-04f, 1.542846528e-04f, 1.542440496e-04f, 1.542031830e-04f, 1.541620532e-04f, 1.541206601e-04f,
-1.540790039e-04f, 1.540370846e-04f, 1.539949025e-04f, 1.539524575e-04f, 1.539097497e-04f, 1.538667794e-04f, 1.538235464e-04f, 1.537800511e-04f, 1.537362933e-04f, 1.536922734e-04f,
-1.536479912e-04f, 1.536034470e-04f, 1.535586408e-04f, 1.535135728e-04f, 1.534682430e-04f, 1.534226515e-04f, 1.533767985e-04f, 1.533306840e-04f, 1.532843082e-04f, 1.532376711e-04f,
-1.531907728e-04f, 1.531436135e-04f, 1.530961932e-04f, 1.530485121e-04f, 1.530005702e-04f, 1.529523677e-04f, 1.529039047e-04f, 1.528551812e-04f, 1.528061974e-04f, 1.527569534e-04f,
-1.527074492e-04f, 1.526576851e-04f, 1.526076611e-04f, 1.525573773e-04f, 1.525068337e-04f, 1.524560307e-04f, 1.524049681e-04f, 1.523536463e-04f, 1.523020651e-04f, 1.522502249e-04f,
-1.521981256e-04f, 1.521457674e-04f, 1.520931504e-04f, 1.520402747e-04f, 1.519871405e-04f, 1.519337477e-04f, 1.518800967e-04f, 1.518261874e-04f, 1.517720200e-04f, 1.517175946e-04f,
-1.516629113e-04f, 1.516079702e-04f, 1.515527715e-04f, 1.514973152e-04f, 1.514416016e-04f, 1.513856306e-04f, 1.513294024e-04f, 1.512729172e-04f, 1.512161750e-04f, 1.511591760e-04f,
-1.511019202e-04f, 1.510444079e-04f, 1.509866391e-04f, 1.509286140e-04f, 1.508703326e-04f, 1.508117952e-04f, 1.507530017e-04f, 1.506939524e-04f, 1.506346474e-04f, 1.505750867e-04f,
-1.505152706e-04f, 1.504551991e-04f, 1.503948724e-04f, 1.503342905e-04f, 1.502734537e-04f, 1.502123620e-04f, 1.501510155e-04f, 1.500894145e-04f, 1.500275589e-04f, 1.499654491e-04f,
-1.499030850e-04f, 1.498404668e-04f, 1.497775946e-04f, 1.497144686e-04f, 1.496510889e-04f, 1.495874556e-04f, 1.495235689e-04f, 1.494594289e-04f, 1.493950356e-04f, 1.493303894e-04f,
-1.492654902e-04f, 1.492003382e-04f, 1.491349336e-04f, 1.490692765e-04f, 1.490033670e-04f, 1.489372052e-04f, 1.488707913e-04f, 1.488041255e-04f, 1.487372078e-04f, 1.486700384e-04f,
-1.486026175e-04f, 1.485349451e-04f, 1.484670214e-04f, 1.483988466e-04f, 1.483304207e-04f, 1.482617440e-04f, 1.481928166e-04f, 1.481236385e-04f, 1.480542100e-04f, 1.479845312e-04f,
-1.479146022e-04f, 1.478444232e-04f, 1.477739942e-04f, 1.477033156e-04f, 1.476323873e-04f, 1.475612096e-04f, 1.474897825e-04f, 1.474181063e-04f, 1.473461811e-04f, 1.472740069e-04f,
-1.472015840e-04f, 1.471289126e-04f, 1.470559927e-04f, 1.469828244e-04f, 1.469094081e-04f, 1.468357437e-04f, 1.467618314e-04f, 1.466876715e-04f, 1.466132640e-04f, 1.465386091e-04f,
-1.464637069e-04f, 1.463885576e-04f, 1.463131613e-04f, 1.462375183e-04f, 1.461616285e-04f, 1.460854923e-04f, 1.460091097e-04f, 1.459324809e-04f, 1.458556060e-04f, 1.457784853e-04f,
-1.457011188e-04f, 1.456235067e-04f, 1.455456492e-04f, 1.454675464e-04f, 1.453891985e-04f, 1.453106056e-04f, 1.452317678e-04f, 1.451526855e-04f, 1.450733586e-04f, 1.449937874e-04f,
-1.449139720e-04f, 1.448339126e-04f, 1.447536093e-04f, 1.446730622e-04f, 1.445922717e-04f, 1.445112377e-04f, 1.444299606e-04f, 1.443484403e-04f, 1.442666772e-04f, 1.441846712e-04f,
-1.441024228e-04f, 1.440199318e-04f, 1.439371987e-04f, 1.438542234e-04f, 1.437710062e-04f, 1.436875472e-04f, 1.436038466e-04f, 1.435199046e-04f, 1.434357213e-04f, 1.433512969e-04f,
-1.432666316e-04f, 1.431817254e-04f, 1.430965787e-04f, 1.430111915e-04f, 1.429255640e-04f, 1.428396965e-04f, 1.427535889e-04f, 1.426672417e-04f, 1.425806548e-04f, 1.424938285e-04f,
-1.424067629e-04f, 1.423194582e-04f, 1.422319146e-04f, 1.421441322e-04f, 1.420561113e-04f, 1.419678520e-04f, 1.418793544e-04f, 1.417906188e-04f, 1.417016452e-04f, 1.416124340e-04f,
-1.415229852e-04f, 1.414332990e-04f, 1.413433757e-04f, 1.412532153e-04f, 1.411628181e-04f, 1.410721843e-04f, 1.409813139e-04f, 1.408902072e-04f, 1.407988644e-04f, 1.407072856e-04f,
-1.406154711e-04f, 1.405234209e-04f, 1.404311353e-04f, 1.403386145e-04f, 1.402458586e-04f, 1.401528678e-04f, 1.400596423e-04f, 1.399661823e-04f, 1.398724880e-04f, 1.397785594e-04f,
-1.396843969e-04f, 1.395900006e-04f, 1.394953707e-04f, 1.394005074e-04f, 1.393054108e-04f, 1.392100811e-04f, 1.391145186e-04f, 1.390187233e-04f, 1.389226955e-04f, 1.388264355e-04f,
-1.387299432e-04f, 1.386332190e-04f, 1.385362631e-04f, 1.384390755e-04f, 1.383416566e-04f, 1.382440065e-04f, 1.381461253e-04f, 1.380480133e-04f, 1.379496707e-04f, 1.378510976e-04f,
-1.377522942e-04f, 1.376532608e-04f, 1.375539975e-04f, 1.374545045e-04f, 1.373547820e-04f, 1.372548301e-04f, 1.371546492e-04f, 1.370542393e-04f, 1.369536007e-04f, 1.368527336e-04f,
-1.367516381e-04f, 1.366503144e-04f, 1.365487628e-04f, 1.364469835e-04f, 1.363449765e-04f, 1.362427422e-04f, 1.361402807e-04f, 1.360375922e-04f, 1.359346769e-04f, 1.358315351e-04f,
-1.357281668e-04f, 1.356245724e-04f, 1.355207519e-04f, 1.354167057e-04f, 1.353124338e-04f, 1.352079365e-04f, 1.351032141e-04f, 1.349982666e-04f, 1.348930943e-04f, 1.347876975e-04f,
-1.346820762e-04f, 1.345762307e-04f, 1.344701612e-04f, 1.343638679e-04f, 1.342573511e-04f, 1.341506108e-04f, 1.340436474e-04f, 1.339364609e-04f, 1.338290517e-04f, 1.337214199e-04f,
-1.336135657e-04f, 1.335054894e-04f, 1.333971910e-04f, 1.332886710e-04f, 1.331799294e-04f, 1.330709664e-04f, 1.329617823e-04f, 1.328523772e-04f, 1.327427515e-04f, 1.326329052e-04f,
-1.325228386e-04f, 1.324125519e-04f, 1.323020453e-04f, 1.321913191e-04f, 1.320803734e-04f, 1.319692084e-04f, 1.318578243e-04f, 1.317462214e-04f, 1.316343999e-04f, 1.315223600e-04f,
-1.314101018e-04f, 1.312976257e-04f, 1.311849318e-04f, 1.310720203e-04f, 1.309588914e-04f, 1.308455455e-04f, 1.307319825e-04f, 1.306182029e-04f, 1.305042068e-04f, 1.303899944e-04f,
-1.302755659e-04f, 1.301609216e-04f, 1.300460616e-04f, 1.299309862e-04f, 1.298156956e-04f, 1.297001900e-04f, 1.295844697e-04f, 1.294685348e-04f, 1.293523856e-04f, 1.292360222e-04f,
-1.291194450e-04f, 1.290026541e-04f, 1.288856497e-04f, 1.287684321e-04f, 1.286510014e-04f, 1.285333580e-04f, 1.284155020e-04f, 1.282974337e-04f, 1.281791532e-04f, 1.280606608e-04f,
-1.279419567e-04f, 1.278230412e-04f, 1.277039144e-04f, 1.275845766e-04f, 1.274650281e-04f, 1.273452689e-04f, 1.272252994e-04f, 1.271051198e-04f, 1.269847303e-04f, 1.268641311e-04f,
-1.267433225e-04f, 1.266223046e-04f, 1.265010778e-04f, 1.263796422e-04f, 1.262579980e-04f, 1.261361456e-04f, 1.260140851e-04f, 1.258918167e-04f, 1.257693407e-04f, 1.256466573e-04f,
-1.255237668e-04f, 1.254006693e-04f, 1.252773651e-04f, 1.251538544e-04f, 1.250301375e-04f, 1.249062146e-04f, 1.247820859e-04f, 1.246577516e-04f, 1.245332120e-04f, 1.244084674e-04f,
-1.242835179e-04f, 1.241583637e-04f, 1.240330052e-04f, 1.239074425e-04f, 1.237816759e-04f, 1.236557056e-04f, 1.235295319e-04f, 1.234031550e-04f, 1.232765750e-04f, 1.231497924e-04f,
-1.230228072e-04f, 1.228956198e-04f, 1.227682303e-04f, 1.226406390e-04f, 1.225128462e-04f, 1.223848520e-04f, 1.222566568e-04f, 1.221282607e-04f, 1.219996640e-04f, 1.218708669e-04f,
-1.217418697e-04f, 1.216126726e-04f, 1.214832759e-04f, 1.213536797e-04f, 1.212238844e-04f, 1.210938902e-04f, 1.209636972e-04f, 1.208333059e-04f, 1.207027163e-04f, 1.205719288e-04f,
-1.204409435e-04f, 1.203097608e-04f, 1.201783808e-04f, 1.200468039e-04f, 1.199150302e-04f, 1.197830600e-04f, 1.196508935e-04f, 1.195185311e-04f, 1.193859728e-04f, 1.192532191e-04f,
-1.191202701e-04f, 1.189871260e-04f, 1.188537872e-04f, 1.187202538e-04f, 1.185865261e-04f, 1.184526044e-04f, 1.183184890e-04f, 1.181841799e-04f, 1.180496776e-04f, 1.179149822e-04f,
-1.177800940e-04f, 1.176450133e-04f, 1.175097402e-04f, 1.173742752e-04f, 1.172386183e-04f, 1.171027698e-04f, 1.169667301e-04f, 1.168304993e-04f, 1.166940777e-04f, 1.165574656e-04f,
-1.164206632e-04f, 1.162836707e-04f, 1.161464885e-04f, 1.160091167e-04f, 1.158715556e-04f, 1.157338055e-04f, 1.155958667e-04f, 1.154577393e-04f, 1.153194236e-04f, 1.151809200e-04f,
-1.150422286e-04f, 1.149033496e-04f, 1.147642835e-04f, 1.146250303e-04f, 1.144855904e-04f, 1.143459641e-04f, 1.142061515e-04f, 1.140661529e-04f, 1.139259687e-04f, 1.137855990e-04f,
-1.136450441e-04f, 1.135043043e-04f, 1.133633798e-04f, 1.132222709e-04f, 1.130809779e-04f, 1.129395009e-04f, 1.127978404e-04f, 1.126559964e-04f, 1.125139694e-04f, 1.123717594e-04f,
-1.122293669e-04f, 1.120867921e-04f, 1.119440352e-04f, 1.118010965e-04f, 1.116579763e-04f, 1.115146747e-04f, 1.113711922e-04f, 1.112275289e-04f, 1.110836851e-04f, 1.109396611e-04f,
-1.107954571e-04f, 1.106510734e-04f, 1.105065103e-04f, 1.103617680e-04f, 1.102168468e-04f, 1.100717470e-04f, 1.099264688e-04f, 1.097810125e-04f, 1.096353783e-04f, 1.094895666e-04f,
-1.093435775e-04f, 1.091974115e-04f, 1.090510686e-04f, 1.089045493e-04f, 1.087578537e-04f, 1.086109821e-04f, 1.084639348e-04f, 1.083167122e-04f, 1.081693143e-04f, 1.080217416e-04f,
-1.078739942e-04f, 1.077260725e-04f, 1.075779767e-04f, 1.074297070e-04f, 1.072812639e-04f, 1.071326474e-04f, 1.069838580e-04f, 1.068348959e-04f, 1.066857612e-04f, 1.065364544e-04f,
-1.063869757e-04f, 1.062373254e-04f, 1.060875037e-04f, 1.059375109e-04f, 1.057873473e-04f, 1.056370131e-04f, 1.054865087e-04f, 1.053358342e-04f, 1.051849901e-04f, 1.050339765e-04f,
-1.048827937e-04f, 1.047314421e-04f, 1.045799218e-04f, 1.044282331e-04f, 1.042763765e-04f, 1.041243520e-04f, 1.039721600e-04f, 1.038198007e-04f, 1.036672745e-04f, 1.035145817e-04f,
-1.033617224e-04f, 1.032086970e-04f, 1.030555057e-04f, 1.029021489e-04f, 1.027486268e-04f, 1.025949397e-04f, 1.024410878e-04f, 1.022870715e-04f, 1.021328910e-04f, 1.019785467e-04f,
-1.018240387e-04f, 1.016693674e-04f, 1.015145330e-04f, 1.013595359e-04f, 1.012043763e-04f, 1.010490545e-04f, 1.008935708e-04f, 1.007379254e-04f, 1.005821187e-04f, 1.004261509e-04f,
-1.002700223e-04f, 1.001137332e-04f, 9.995728385e-05f, 9.980067459e-05f, 9.964390567e-05f, 9.948697737e-05f, 9.932988999e-05f, 9.917264381e-05f, 9.901523911e-05f, 9.885767618e-05f,
-9.869995530e-05f, 9.854207676e-05f, 9.838404085e-05f, 9.822584785e-05f, 9.806749805e-05f, 9.790899174e-05f, 9.775032920e-05f, 9.759151071e-05f, 9.743253658e-05f, 9.727340708e-05f,
-9.711412251e-05f, 9.695468315e-05f, 9.679508929e-05f, 9.663534122e-05f, 9.647543922e-05f, 9.631538360e-05f, 9.615517463e-05f, 9.599481261e-05f, 9.583429783e-05f, 9.567363058e-05f,
-9.551281114e-05f, 9.535183981e-05f, 9.519071689e-05f, 9.502944265e-05f, 9.486801740e-05f, 9.470644142e-05f, 9.454471500e-05f, 9.438283845e-05f, 9.422081205e-05f, 9.405863609e-05f,
-9.389631086e-05f, 9.373383667e-05f, 9.357121380e-05f, 9.340844255e-05f, 9.324552320e-05f, 9.308245606e-05f, 9.291924142e-05f, 9.275587958e-05f, 9.259237082e-05f, 9.242871544e-05f,
-9.226491374e-05f, 9.210096602e-05f, 9.193687256e-05f, 9.177263367e-05f, 9.160824964e-05f, 9.144372077e-05f, 9.127904736e-05f, 9.111422969e-05f, 9.094926807e-05f, 9.078416280e-05f,
-9.061891417e-05f, 9.045352248e-05f, 9.028798803e-05f, 9.012231112e-05f, 8.995649204e-05f, 8.979053109e-05f, 8.962442858e-05f, 8.945818480e-05f, 8.929180004e-05f, 8.912527462e-05f,
-8.895860883e-05f, 8.879180297e-05f, 8.862485733e-05f, 8.845777223e-05f, 8.829054796e-05f, 8.812318482e-05f, 8.795568311e-05f, 8.778804314e-05f, 8.762026520e-05f, 8.745234959e-05f,
-8.728429663e-05f, 8.711610660e-05f, 8.694777982e-05f, 8.677931658e-05f, 8.661071720e-05f, 8.644198196e-05f, 8.627311118e-05f, 8.610410515e-05f, 8.593496418e-05f, 8.576568858e-05f,
-8.559627865e-05f, 8.542673469e-05f, 8.525705701e-05f, 8.508724590e-05f, 8.491730169e-05f, 8.474722466e-05f, 8.457701514e-05f, 8.440667341e-05f, 8.423619979e-05f, 8.406559459e-05f,
-8.389485810e-05f, 8.372399064e-05f, 8.355299251e-05f, 8.338186402e-05f, 8.321060548e-05f, 8.303921718e-05f, 8.286769945e-05f, 8.269605258e-05f, 8.252427689e-05f, 8.235237268e-05f,
-8.218034026e-05f, 8.200817994e-05f, 8.183589202e-05f, 8.166347682e-05f, 8.149093465e-05f, 8.131826580e-05f, 8.114547060e-05f, 8.097254935e-05f, 8.079950237e-05f, 8.062632995e-05f,
-8.045303241e-05f, 8.027961007e-05f, 8.010606322e-05f, 7.993239219e-05f, 7.975859728e-05f, 7.958467880e-05f, 7.941063707e-05f, 7.923647239e-05f, 7.906218508e-05f, 7.888777545e-05f,
-7.871324381e-05f, 7.853859047e-05f, 7.836381574e-05f, 7.818891994e-05f, 7.801390338e-05f, 7.783876638e-05f, 7.766350924e-05f, 7.748813228e-05f, 7.731263580e-05f, 7.713702014e-05f,
-7.696128559e-05f, 7.678543247e-05f, 7.660946111e-05f, 7.643337180e-05f, 7.625716486e-05f, 7.608084062e-05f, 7.590439938e-05f, 7.572784146e-05f, 7.555116717e-05f, 7.537437684e-05f,
-7.519747076e-05f, 7.502044927e-05f, 7.484331268e-05f, 7.466606129e-05f, 7.448869544e-05f, 7.431121543e-05f, 7.413362158e-05f, 7.395591420e-05f, 7.377809362e-05f, 7.360016016e-05f,
-7.342211412e-05f, 7.324395583e-05f, 7.306568560e-05f, 7.288730375e-05f, 7.270881060e-05f, 7.253020646e-05f, 7.235149166e-05f, 7.217266652e-05f, 7.199373134e-05f, 7.181468646e-05f,
-7.163553218e-05f, 7.145626883e-05f, 7.127689673e-05f, 7.109741620e-05f, 7.091782755e-05f, 7.073813110e-05f, 7.055832718e-05f, 7.037841611e-05f, 7.019839820e-05f, 7.001827378e-05f,
-6.983804316e-05f, 6.965770667e-05f, 6.947726462e-05f, 6.929671734e-05f, 6.911606515e-05f, 6.893530838e-05f, 6.875444733e-05f, 6.857348233e-05f, 6.839241371e-05f, 6.821124179e-05f,
-6.802996688e-05f, 6.784858932e-05f, 6.766710941e-05f, 6.748552749e-05f, 6.730384388e-05f, 6.712205890e-05f, 6.694017287e-05f, 6.675818612e-05f, 6.657609897e-05f, 6.639391174e-05f,
-6.621162475e-05f, 6.602923833e-05f, 6.584675281e-05f, 6.566416850e-05f, 6.548148574e-05f, 6.529870484e-05f, 6.511582613e-05f, 6.493284993e-05f, 6.474977657e-05f, 6.456660638e-05f,
-6.438333967e-05f, 6.419997678e-05f, 6.401651802e-05f, 6.383296373e-05f, 6.364931422e-05f, 6.346556983e-05f, 6.328173088e-05f, 6.309779770e-05f, 6.291377061e-05f, 6.272964993e-05f,
-6.254543600e-05f, 6.236112914e-05f, 6.217672968e-05f, 6.199223795e-05f, 6.180765426e-05f, 6.162297895e-05f, 6.143821234e-05f, 6.125335477e-05f, 6.106840655e-05f, 6.088336802e-05f,
-6.069823951e-05f, 6.051302134e-05f, 6.032771383e-05f, 6.014231733e-05f, 5.995683214e-05f, 5.977125862e-05f, 5.958559707e-05f, 5.939984784e-05f, 5.921401124e-05f, 5.902808761e-05f,
-5.884207728e-05f, 5.865598057e-05f, 5.846979782e-05f, 5.828352935e-05f, 5.809717550e-05f, 5.791073659e-05f, 5.772421294e-05f, 5.753760491e-05f, 5.735091280e-05f, 5.716413695e-05f,
-5.697727770e-05f, 5.679033536e-05f, 5.660331028e-05f, 5.641620278e-05f, 5.622901319e-05f, 5.604174185e-05f, 5.585438908e-05f, 5.566695521e-05f, 5.547944058e-05f, 5.529184552e-05f,
-5.510417035e-05f, 5.491641541e-05f, 5.472858104e-05f, 5.454066755e-05f, 5.435267529e-05f, 5.416460459e-05f, 5.397645577e-05f, 5.378822917e-05f, 5.359992512e-05f, 5.341154396e-05f,
-5.322308601e-05f, 5.303455161e-05f, 5.284594109e-05f, 5.265725478e-05f, 5.246849302e-05f, 5.227965613e-05f, 5.209074446e-05f, 5.190175833e-05f, 5.171269808e-05f, 5.152356404e-05f,
-5.133435654e-05f, 5.114507592e-05f, 5.095572251e-05f, 5.076629665e-05f, 5.057679866e-05f, 5.038722889e-05f, 5.019758766e-05f, 5.000787530e-05f, 4.981809217e-05f, 4.962823858e-05f,
-4.943831487e-05f, 4.924832138e-05f, 4.905825844e-05f, 4.886812638e-05f, 4.867792554e-05f, 4.848765626e-05f, 4.829731887e-05f, 4.810691370e-05f, 4.791644109e-05f, 4.772590138e-05f,
-4.753529489e-05f, 4.734462197e-05f, 4.715388295e-05f, 4.696307817e-05f, 4.677220795e-05f, 4.658127264e-05f, 4.639027258e-05f, 4.619920809e-05f, 4.600807952e-05f, 4.581688719e-05f,
-4.562563145e-05f, 4.543431264e-05f, 4.524293108e-05f, 4.505148711e-05f, 4.485998108e-05f, 4.466841331e-05f, 4.447678415e-05f, 4.428509392e-05f, 4.409334298e-05f, 4.390153164e-05f,
-4.370966026e-05f, 4.351772916e-05f, 4.332573869e-05f, 4.313368918e-05f, 4.294158097e-05f, 4.274941439e-05f, 4.255718979e-05f, 4.236490749e-05f, 4.217256784e-05f, 4.198017118e-05f,
-4.178771784e-05f, 4.159520816e-05f, 4.140264248e-05f, 4.121002113e-05f, 4.101734446e-05f, 4.082461279e-05f, 4.063182648e-05f, 4.043898585e-05f, 4.024609125e-05f, 4.005314301e-05f,
-3.986014147e-05f, 3.966708697e-05f, 3.947397985e-05f, 3.928082045e-05f, 3.908760910e-05f, 3.889434615e-05f, 3.870103192e-05f, 3.850766677e-05f, 3.831425103e-05f, 3.812078504e-05f,
-3.792726913e-05f, 3.773370365e-05f, 3.754008893e-05f, 3.734642532e-05f, 3.715271315e-05f, 3.695895276e-05f, 3.676514449e-05f, 3.657128868e-05f, 3.637738568e-05f, 3.618343581e-05f,
-3.598943942e-05f, 3.579539685e-05f, 3.560130843e-05f, 3.540717452e-05f, 3.521299543e-05f, 3.501877153e-05f, 3.482450314e-05f, 3.463019061e-05f, 3.443583427e-05f, 3.424143446e-05f,
-3.404699154e-05f, 3.385250582e-05f, 3.365797766e-05f, 3.346340740e-05f, 3.326879537e-05f, 3.307414192e-05f, 3.287944738e-05f, 3.268471210e-05f, 3.248993641e-05f, 3.229512066e-05f,
-3.210026518e-05f, 3.190537032e-05f, 3.171043642e-05f, 3.151546382e-05f, 3.132045285e-05f, 3.112540387e-05f, 3.093031720e-05f, 3.073519319e-05f, 3.054003218e-05f, 3.034483451e-05f,
-3.014960053e-05f, 2.995433056e-05f, 2.975902496e-05f, 2.956368407e-05f, 2.936830821e-05f, 2.917289775e-05f, 2.897745301e-05f, 2.878197433e-05f, 2.858646207e-05f, 2.839091656e-05f,
-2.819533813e-05f, 2.799972714e-05f, 2.780408392e-05f, 2.760840881e-05f, 2.741270216e-05f, 2.721696431e-05f, 2.702119559e-05f, 2.682539635e-05f, 2.662956693e-05f, 2.643370767e-05f,
-2.623781891e-05f, 2.604190099e-05f, 2.584595426e-05f, 2.564997906e-05f, 2.545397572e-05f, 2.525794460e-05f, 2.506188602e-05f, 2.486580033e-05f, 2.466968788e-05f, 2.447354900e-05f,
-2.427738404e-05f, 2.408119333e-05f, 2.388497723e-05f, 2.368873606e-05f, 2.349247018e-05f, 2.329617992e-05f, 2.309986563e-05f, 2.290352764e-05f, 2.270716630e-05f, 2.251078195e-05f,
-2.231437494e-05f, 2.211794559e-05f, 2.192149427e-05f, 2.172502129e-05f, 2.152852702e-05f, 2.133201179e-05f, 2.113547593e-05f, 2.093891980e-05f, 2.074234374e-05f, 2.054574808e-05f,
-2.034913317e-05f, 2.015249936e-05f, 1.995584697e-05f, 1.975917635e-05f, 1.956248786e-05f, 1.936578182e-05f, 1.916905857e-05f, 1.897231847e-05f, 1.877556185e-05f, 1.857878906e-05f,
-1.838200043e-05f, 1.818519630e-05f, 1.798837703e-05f, 1.779154295e-05f, 1.759469439e-05f, 1.739783172e-05f, 1.720095526e-05f, 1.700406536e-05f, 1.680716235e-05f, 1.661024659e-05f,
-1.641331841e-05f, 1.621637816e-05f, 1.601942617e-05f, 1.582246279e-05f, 1.562548836e-05f, 1.542850322e-05f, 1.523150771e-05f, 1.503450218e-05f, 1.483748696e-05f, 1.464046240e-05f,
-1.444342884e-05f, 1.424638662e-05f, 1.404933608e-05f, 1.385227757e-05f, 1.365521142e-05f, 1.345813798e-05f, 1.326105759e-05f, 1.306397059e-05f, 1.286687732e-05f, 1.266977812e-05f,
-1.247267334e-05f, 1.227556331e-05f, 1.207844838e-05f, 1.188132889e-05f, 1.168420518e-05f, 1.148707759e-05f, 1.128994646e-05f, 1.109281214e-05f, 1.089567496e-05f, 1.069853527e-05f,
-1.050139341e-05f, 1.030424972e-05f, 1.010710453e-05f, 9.909958199e-06f, 9.712811059e-06f, 9.515663452e-06f, 9.318515720e-06f, 9.121368204e-06f, 8.924221244e-06f, 8.727075182e-06f,
-8.529930359e-06f, 8.332787116e-06f, 8.135645792e-06f, 7.938506731e-06f, 7.741370271e-06f, 7.544236755e-06f, 7.347106522e-06f, 7.149979914e-06f, 6.952857271e-06f, 6.755738934e-06f,
-6.558625243e-06f, 6.361516540e-06f, 6.164413164e-06f, 5.967315456e-06f, 5.770223757e-06f, 5.573138407e-06f, 5.376059747e-06f, 5.178988117e-06f, 4.981923856e-06f, 4.784867307e-06f,
-4.587818808e-06f, 4.390778700e-06f, 4.193747323e-06f, 3.996725017e-06f, 3.799712123e-06f, 3.602708979e-06f, 3.405715928e-06f, 3.208733307e-06f, 3.011761458e-06f, 2.814800719e-06f,
-2.617851431e-06f, 2.420913934e-06f, 2.223988567e-06f, 2.027075670e-06f, 1.830175582e-06f, 1.633288643e-06f, 1.436415193e-06f, 1.239555571e-06f, 1.042710116e-06f, 8.458791673e-07f,
-6.490630650e-07f, 4.522621478e-07f, 2.554767551e-07f, 5.870722590e-08f, -1.380461007e-07f, -3.347828858e-07f, -5.315027902e-07f, -7.282054752e-07f, -9.248906019e-07f, -1.121557832e-06f,
--1.318206825e-06f, -1.514837245e-06f, -1.711448751e-06f, -1.908041006e-06f, -2.104613670e-06f, -2.301166406e-06f, -2.497698875e-06f, -2.694210739e-06f, -2.890701660e-06f, -3.087171298e-06f,
--3.283619318e-06f, -3.480045379e-06f, -3.676449145e-06f, -3.872830277e-06f, -4.069188438e-06f, -4.265523289e-06f, -4.461834494e-06f, -4.658121714e-06f, -4.854384612e-06f, -5.050622850e-06f,
--5.246836092e-06f, -5.443023999e-06f, -5.639186234e-06f, -5.835322460e-06f, -6.031432341e-06f, -6.227515538e-06f, -6.423571715e-06f, -6.619600536e-06f, -6.815601662e-06f, -7.011574758e-06f,
--7.207519487e-06f, -7.403435512e-06f, -7.599322497e-06f, -7.795180104e-06f, -7.991007999e-06f, -8.186805844e-06f, -8.382573303e-06f, -8.578310041e-06f, -8.774015720e-06f, -8.969690006e-06f,
--9.165332562e-06f, -9.360943052e-06f, -9.556521141e-06f, -9.752066493e-06f, -9.947578773e-06f, -1.014305764e-05f, -1.033850277e-05f, -1.053391382e-05f, -1.072929046e-05f, -1.092463235e-05f,
--1.111993915e-05f, -1.131521053e-05f, -1.151044616e-05f, -1.170564570e-05f, -1.190080882e-05f, -1.209593518e-05f, -1.229102445e-05f, -1.248607629e-05f, -1.268109037e-05f, -1.287606636e-05f,
--1.307100391e-05f, -1.326590271e-05f, -1.346076240e-05f, -1.365558266e-05f, -1.385036316e-05f, -1.404510356e-05f, -1.423980353e-05f, -1.443446273e-05f, -1.462908084e-05f, -1.482365751e-05f,
--1.501819241e-05f, -1.521268522e-05f, -1.540713560e-05f, -1.560154321e-05f, -1.579590772e-05f, -1.599022881e-05f, -1.618450613e-05f, -1.637873936e-05f, -1.657292816e-05f, -1.676707220e-05f,
--1.696117115e-05f, -1.715522468e-05f, -1.734923245e-05f, -1.754319414e-05f, -1.773710940e-05f, -1.793097792e-05f, -1.812479935e-05f, -1.831857337e-05f, -1.851229965e-05f, -1.870597784e-05f,
--1.889960764e-05f, -1.909318869e-05f, -1.928672068e-05f, -1.948020327e-05f, -1.967363612e-05f, -1.986701892e-05f, -2.006035133e-05f, -2.025363301e-05f, -2.044686365e-05f, -2.064004290e-05f,
--2.083317044e-05f, -2.102624594e-05f, -2.121926907e-05f, -2.141223950e-05f, -2.160515690e-05f, -2.179802094e-05f, -2.199083130e-05f, -2.218358763e-05f, -2.237628962e-05f, -2.256893694e-05f,
--2.276152925e-05f, -2.295406623e-05f, -2.314654754e-05f, -2.333897287e-05f, -2.353134188e-05f, -2.372365425e-05f, -2.391590964e-05f, -2.410810773e-05f, -2.430024819e-05f, -2.449233070e-05f,
--2.468435492e-05f, -2.487632053e-05f, -2.506822720e-05f, -2.526007460e-05f, -2.545186242e-05f, -2.564359031e-05f, -2.583525795e-05f, -2.602686503e-05f, -2.621841120e-05f, -2.640989615e-05f,
--2.660131955e-05f, -2.679268107e-05f, -2.698398038e-05f, -2.717521717e-05f, -2.736639110e-05f, -2.755750185e-05f, -2.774854909e-05f, -2.793953251e-05f, -2.813045176e-05f, -2.832130654e-05f,
--2.851209651e-05f, -2.870282135e-05f, -2.889348073e-05f, -2.908407433e-05f, -2.927460183e-05f, -2.946506291e-05f, -2.965545723e-05f, -2.984578447e-05f, -3.003604432e-05f, -3.022623644e-05f,
--3.041636052e-05f, -3.060641622e-05f, -3.079640324e-05f, -3.098632124e-05f, -3.117616990e-05f, -3.136594889e-05f, -3.155565791e-05f, -3.174529662e-05f, -3.193486470e-05f, -3.212436183e-05f,
--3.231378769e-05f, -3.250314195e-05f, -3.269242430e-05f, -3.288163441e-05f, -3.307077197e-05f, -3.325983664e-05f, -3.344882812e-05f, -3.363774607e-05f, -3.382659018e-05f, -3.401536013e-05f,
--3.420405559e-05f, -3.439267625e-05f, -3.458122179e-05f, -3.476969188e-05f, -3.495808621e-05f, -3.514640446e-05f, -3.533464631e-05f, -3.552281143e-05f, -3.571089952e-05f, -3.589891024e-05f,
--3.608684329e-05f, -3.627469834e-05f, -3.646247507e-05f, -3.665017317e-05f, -3.683779232e-05f, -3.702533219e-05f, -3.721279248e-05f, -3.740017287e-05f, -3.758747303e-05f, -3.777469265e-05f,
--3.796183141e-05f, -3.814888900e-05f, -3.833586510e-05f, -3.852275938e-05f, -3.870957155e-05f, -3.889630127e-05f, -3.908294824e-05f, -3.926951213e-05f, -3.945599263e-05f, -3.964238943e-05f,
--3.982870221e-05f, -4.001493065e-05f, -4.020107444e-05f, -4.038713327e-05f, -4.057310681e-05f, -4.075899476e-05f, -4.094479680e-05f, -4.113051262e-05f, -4.131614190e-05f, -4.150168432e-05f,
--4.168713958e-05f, -4.187250737e-05f, -4.205778735e-05f, -4.224297924e-05f, -4.242808270e-05f, -4.261309743e-05f, -4.279802312e-05f, -4.298285945e-05f, -4.316760611e-05f, -4.335226279e-05f,
--4.353682918e-05f, -4.372130496e-05f, -4.390568982e-05f, -4.408998346e-05f, -4.427418555e-05f, -4.445829580e-05f, -4.464231388e-05f, -4.482623949e-05f, -4.501007232e-05f, -4.519381206e-05f,
--4.537745839e-05f, -4.556101101e-05f, -4.574446961e-05f, -4.592783387e-05f, -4.611110349e-05f, -4.629427816e-05f, -4.647735758e-05f, -4.666034142e-05f, -4.684322939e-05f, -4.702602117e-05f,
--4.720871645e-05f, -4.739131494e-05f, -4.757381631e-05f, -4.775622027e-05f, -4.793852650e-05f, -4.812073470e-05f, -4.830284456e-05f, -4.848485578e-05f, -4.866676804e-05f, -4.884858104e-05f,
--4.903029448e-05f, -4.921190805e-05f, -4.939342144e-05f, -4.957483434e-05f, -4.975614646e-05f, -4.993735748e-05f, -5.011846710e-05f, -5.029947502e-05f, -5.048038094e-05f, -5.066118453e-05f,
--5.084188551e-05f, -5.102248357e-05f, -5.120297841e-05f, -5.138336971e-05f, -5.156365719e-05f, -5.174384052e-05f, -5.192391942e-05f, -5.210389358e-05f, -5.228376269e-05f, -5.246352646e-05f,
--5.264318458e-05f, -5.282273674e-05f, -5.300218266e-05f, -5.318152202e-05f, -5.336075452e-05f, -5.353987987e-05f, -5.371889776e-05f, -5.389780789e-05f, -5.407660996e-05f, -5.425530367e-05f,
--5.443388872e-05f, -5.461236481e-05f, -5.479073165e-05f, -5.496898892e-05f, -5.514713634e-05f, -5.532517360e-05f, -5.550310040e-05f, -5.568091645e-05f, -5.585862145e-05f, -5.603621510e-05f,
--5.621369709e-05f, -5.639106714e-05f, -5.656832495e-05f, -5.674547021e-05f, -5.692250264e-05f, -5.709942193e-05f, -5.727622778e-05f, -5.745291991e-05f, -5.762949802e-05f, -5.780596180e-05f,
--5.798231096e-05f, -5.815854522e-05f, -5.833466426e-05f, -5.851066781e-05f, -5.868655555e-05f, -5.886232721e-05f, -5.903798247e-05f, -5.921352106e-05f, -5.938894267e-05f, -5.956424701e-05f,
--5.973943379e-05f, -5.991450272e-05f, -6.008945350e-05f, -6.026428583e-05f, -6.043899943e-05f, -6.061359401e-05f, -6.078806927e-05f, -6.096242491e-05f, -6.113666066e-05f, -6.131077621e-05f,
--6.148477128e-05f, -6.165864557e-05f, -6.183239879e-05f, -6.200603066e-05f, -6.217954088e-05f, -6.235292916e-05f, -6.252619522e-05f, -6.269933876e-05f, -6.287235949e-05f, -6.304525713e-05f,
--6.321803138e-05f, -6.339068197e-05f, -6.356320859e-05f, -6.373561096e-05f, -6.390788879e-05f, -6.408004180e-05f, -6.425206970e-05f, -6.442397220e-05f, -6.459574901e-05f, -6.476739985e-05f,
--6.493892443e-05f, -6.511032246e-05f, -6.528159366e-05f, -6.545273774e-05f, -6.562375442e-05f, -6.579464342e-05f, -6.596540444e-05f, -6.613603720e-05f, -6.630654142e-05f, -6.647691681e-05f,
--6.664716309e-05f, -6.681727997e-05f, -6.698726718e-05f, -6.715712443e-05f, -6.732685143e-05f, -6.749644790e-05f, -6.766591357e-05f, -6.783524814e-05f, -6.800445134e-05f, -6.817352288e-05f,
--6.834246248e-05f, -6.851126987e-05f, -6.867994475e-05f, -6.884848686e-05f, -6.901689590e-05f, -6.918517160e-05f, -6.935331368e-05f, -6.952132186e-05f, -6.968919586e-05f, -6.985693540e-05f,
--7.002454020e-05f, -7.019200998e-05f, -7.035934446e-05f, -7.052654337e-05f, -7.069360643e-05f, -7.086053336e-05f, -7.102732388e-05f, -7.119397771e-05f, -7.136049459e-05f, -7.152687422e-05f,
--7.169311634e-05f, -7.185922067e-05f, -7.202518693e-05f, -7.219101485e-05f, -7.235670415e-05f, -7.252225456e-05f, -7.268766580e-05f, -7.285293760e-05f, -7.301806968e-05f, -7.318306177e-05f,
--7.334791359e-05f, -7.351262488e-05f, -7.367719535e-05f, -7.384162475e-05f, -7.400591278e-05f, -7.417005918e-05f, -7.433406369e-05f, -7.449792601e-05f, -7.466164590e-05f, -7.482522306e-05f,
--7.498865724e-05f, -7.515194816e-05f, -7.531509555e-05f, -7.547809914e-05f, -7.564095866e-05f, -7.580367384e-05f, -7.596624442e-05f, -7.612867011e-05f, -7.629095066e-05f, -7.645308579e-05f,
--7.661507524e-05f, -7.677691873e-05f, -7.693861601e-05f, -7.710016680e-05f, -7.726157083e-05f, -7.742282784e-05f, -7.758393756e-05f, -7.774489973e-05f, -7.790571407e-05f, -7.806638033e-05f,
--7.822689823e-05f, -7.838726752e-05f, -7.854748792e-05f, -7.870755918e-05f, -7.886748102e-05f, -7.902725319e-05f, -7.918687541e-05f, -7.934634743e-05f, -7.950566899e-05f, -7.966483981e-05f,
--7.982385963e-05f, -7.998272820e-05f, -8.014144526e-05f, -8.030001053e-05f, -8.045842376e-05f, -8.061668468e-05f, -8.077479304e-05f, -8.093274858e-05f, -8.109055103e-05f, -8.124820013e-05f,
--8.140569563e-05f, -8.156303726e-05f, -8.172022476e-05f, -8.187725788e-05f, -8.203413636e-05f, -8.219085993e-05f, -8.234742835e-05f, -8.250384134e-05f, -8.266009866e-05f, -8.281620005e-05f,
--8.297214525e-05f, -8.312793399e-05f, -8.328356604e-05f, -8.343904113e-05f, -8.359435900e-05f, -8.374951940e-05f, -8.390452207e-05f, -8.405936676e-05f, -8.421405321e-05f, -8.436858118e-05f,
--8.452295039e-05f, -8.467716061e-05f, -8.483121158e-05f, -8.498510304e-05f, -8.513883474e-05f, -8.529240644e-05f, -8.544581786e-05f, -8.559906878e-05f, -8.575215892e-05f, -8.590508805e-05f,
--8.605785590e-05f, -8.621046223e-05f, -8.636290680e-05f, -8.651518934e-05f, -8.666730961e-05f, -8.681926736e-05f, -8.697106233e-05f, -8.712269429e-05f, -8.727416298e-05f, -8.742546815e-05f,
--8.757660955e-05f, -8.772758695e-05f, -8.787840008e-05f, -8.802904870e-05f, -8.817953257e-05f, -8.832985144e-05f, -8.848000506e-05f, -8.862999319e-05f, -8.877981557e-05f, -8.892947198e-05f,
--8.907896215e-05f, -8.922828585e-05f, -8.937744282e-05f, -8.952643284e-05f, -8.967525565e-05f, -8.982391100e-05f, -8.997239866e-05f, -9.012071839e-05f, -9.026886994e-05f, -9.041685306e-05f,
--9.056466752e-05f, -9.071231307e-05f, -9.085978948e-05f, -9.100709650e-05f, -9.115423389e-05f, -9.130120141e-05f, -9.144799882e-05f, -9.159462589e-05f, -9.174108236e-05f, -9.188736801e-05f,
--9.203348259e-05f, -9.217942586e-05f, -9.232519759e-05f, -9.247079754e-05f, -9.261622547e-05f, -9.276148115e-05f, -9.290656433e-05f, -9.305147478e-05f, -9.319621227e-05f, -9.334077655e-05f,
--9.348516740e-05f, -9.362938457e-05f, -9.377342783e-05f, -9.391729695e-05f, -9.406099170e-05f, -9.420451183e-05f, -9.434785712e-05f, -9.449102733e-05f, -9.463402222e-05f, -9.477684158e-05f,
--9.491948515e-05f, -9.506195272e-05f, -9.520424404e-05f, -9.534635890e-05f, -9.548829705e-05f, -9.563005826e-05f, -9.577164231e-05f, -9.591304897e-05f, -9.605427800e-05f, -9.619532917e-05f,
--9.633620226e-05f, -9.647689704e-05f, -9.661741328e-05f, -9.675775075e-05f, -9.689790922e-05f, -9.703788846e-05f, -9.717768826e-05f, -9.731730837e-05f, -9.745674858e-05f, -9.759600866e-05f,
--9.773508837e-05f, -9.787398751e-05f, -9.801270584e-05f, -9.815124313e-05f, -9.828959916e-05f, -9.842777371e-05f, -9.856576656e-05f, -9.870357747e-05f, -9.884120624e-05f, -9.897865262e-05f,
--9.911591641e-05f, -9.925299737e-05f, -9.938989530e-05f, -9.952660995e-05f, -9.966314112e-05f, -9.979948859e-05f, -9.993565212e-05f, -1.000716315e-04f, -1.002074265e-04f, -1.003430370e-04f,
--1.004784626e-04f, -1.006137032e-04f, -1.007487586e-04f, -1.008836285e-04f, -1.010183127e-04f, -1.011528110e-04f, -1.012871232e-04f, -1.014212491e-04f, -1.015551884e-04f, -1.016889409e-04f,
--1.018225065e-04f, -1.019558849e-04f, -1.020890759e-04f, -1.022220792e-04f, -1.023548947e-04f, -1.024875222e-04f, -1.026199614e-04f, -1.027522121e-04f, -1.028842741e-04f, -1.030161472e-04f,
--1.031478312e-04f, -1.032793258e-04f, -1.034106309e-04f, -1.035417463e-04f, -1.036726716e-04f, -1.038034068e-04f, -1.039339517e-04f, -1.040643059e-04f, -1.041944693e-04f, -1.043244417e-04f,
--1.044542229e-04f, -1.045838126e-04f, -1.047132107e-04f, -1.048424170e-04f, -1.049714311e-04f, -1.051002531e-04f, -1.052288825e-04f, -1.053573193e-04f, -1.054855632e-04f, -1.056136140e-04f,
--1.057414715e-04f, -1.058691355e-04f, -1.059966058e-04f, -1.061238822e-04f, -1.062509645e-04f, -1.063778524e-04f, -1.065045459e-04f, -1.066310446e-04f, -1.067573484e-04f, -1.068834571e-04f,
--1.070093704e-04f, -1.071350882e-04f, -1.072606103e-04f, -1.073859364e-04f, -1.075110664e-04f, -1.076360000e-04f, -1.077607372e-04f, -1.078852776e-04f, -1.080096210e-04f, -1.081337674e-04f,
--1.082577164e-04f, -1.083814678e-04f, -1.085050216e-04f, -1.086283774e-04f, -1.087515351e-04f, -1.088744945e-04f, -1.089972554e-04f, -1.091198175e-04f, -1.092421808e-04f, -1.093643449e-04f,
--1.094863098e-04f, -1.096080752e-04f, -1.097296409e-04f, -1.098510067e-04f, -1.099721724e-04f, -1.100931379e-04f, -1.102139030e-04f, -1.103344673e-04f, -1.104548309e-04f, -1.105749934e-04f,
--1.106949547e-04f, -1.108147146e-04f, -1.109342729e-04f, -1.110536293e-04f, -1.111727838e-04f, -1.112917362e-04f, -1.114104861e-04f, -1.115290336e-04f, -1.116473782e-04f, -1.117655200e-04f,
--1.118834586e-04f, -1.120011940e-04f, -1.121187258e-04f, -1.122360540e-04f, -1.123531783e-04f, -1.124700986e-04f, -1.125868147e-04f, -1.127033263e-04f, -1.128196333e-04f, -1.129357356e-04f,
--1.130516328e-04f, -1.131673250e-04f, -1.132828118e-04f, -1.133980930e-04f, -1.135131686e-04f, -1.136280383e-04f, -1.137427019e-04f, -1.138571593e-04f, -1.139714103e-04f, -1.140854547e-04f,
--1.141992922e-04f, -1.143129228e-04f, -1.144263463e-04f, -1.145395624e-04f, -1.146525711e-04f, -1.147653720e-04f, -1.148779651e-04f, -1.149903502e-04f, -1.151025270e-04f, -1.152144955e-04f,
--1.153262554e-04f, -1.154378066e-04f, -1.155491488e-04f, -1.156602819e-04f, -1.157712058e-04f, -1.158819202e-04f, -1.159924251e-04f, -1.161027201e-04f, -1.162128052e-04f, -1.163226801e-04f,
--1.164323447e-04f, -1.165417988e-04f, -1.166510423e-04f, -1.167600750e-04f, -1.168688967e-04f, -1.169775072e-04f, -1.170859063e-04f, -1.171940940e-04f, -1.173020700e-04f, -1.174098341e-04f,
--1.175173862e-04f, -1.176247262e-04f, -1.177318537e-04f, -1.178387688e-04f, -1.179454712e-04f, -1.180519607e-04f, -1.181582373e-04f, -1.182643006e-04f, -1.183701506e-04f, -1.184757870e-04f,
--1.185812098e-04f, -1.186864188e-04f, -1.187914137e-04f, -1.188961945e-04f, -1.190007609e-04f, -1.191051128e-04f, -1.192092501e-04f, -1.193131725e-04f, -1.194168800e-04f, -1.195203723e-04f,
--1.196236493e-04f, -1.197267108e-04f, -1.198295567e-04f, -1.199321868e-04f, -1.200346009e-04f, -1.201367990e-04f, -1.202387807e-04f, -1.203405461e-04f, -1.204420949e-04f, -1.205434269e-04f,
--1.206445420e-04f, -1.207454401e-04f, -1.208461209e-04f, -1.209465844e-04f, -1.210468304e-04f, -1.211468587e-04f, -1.212466691e-04f, -1.213462616e-04f, -1.214456359e-04f, -1.215447919e-04f,
--1.216437295e-04f, -1.217424484e-04f, -1.218409486e-04f, -1.219392299e-04f, -1.220372922e-04f, -1.221351352e-04f, -1.222327589e-04f, -1.223301630e-04f, -1.224273475e-04f, -1.225243122e-04f,
--1.226210569e-04f, -1.227175815e-04f, -1.228138859e-04f, -1.229099698e-04f, -1.230058332e-04f, -1.231014759e-04f, -1.231968977e-04f, -1.232920985e-04f, -1.233870782e-04f, -1.234818366e-04f,
--1.235763736e-04f, -1.236706890e-04f, -1.237647826e-04f, -1.238586544e-04f, -1.239523042e-04f, -1.240457318e-04f, -1.241389371e-04f, -1.242319200e-04f, -1.243246803e-04f, -1.244172179e-04f,
--1.245095326e-04f, -1.246016242e-04f, -1.246934928e-04f, -1.247851380e-04f, -1.248765598e-04f, -1.249677581e-04f, -1.250587326e-04f, -1.251494833e-04f, -1.252400100e-04f, -1.253303126e-04f,
--1.254203909e-04f, -1.255102448e-04f, -1.255998742e-04f, -1.256892789e-04f, -1.257784588e-04f, -1.258674138e-04f, -1.259561437e-04f, -1.260446483e-04f, -1.261329277e-04f, -1.262209815e-04f,
--1.263088097e-04f, -1.263964122e-04f, -1.264837888e-04f, -1.265709394e-04f, -1.266578638e-04f, -1.267445620e-04f, -1.268310337e-04f, -1.269172789e-04f, -1.270032975e-04f, -1.270890892e-04f,
--1.271746540e-04f, -1.272599918e-04f, -1.273451024e-04f, -1.274299856e-04f, -1.275146414e-04f, -1.275990697e-04f, -1.276832702e-04f, -1.277672429e-04f, -1.278509877e-04f, -1.279345044e-04f,
--1.280177929e-04f, -1.281008531e-04f, -1.281836848e-04f, -1.282662879e-04f, -1.283486624e-04f, -1.284308080e-04f, -1.285127246e-04f, -1.285944122e-04f, -1.286758707e-04f, -1.287570998e-04f,
--1.288380994e-04f, -1.289188695e-04f, -1.289994100e-04f, -1.290797206e-04f, -1.291598013e-04f, -1.292396520e-04f, -1.293192725e-04f, -1.293986628e-04f, -1.294778227e-04f, -1.295567520e-04f,
--1.296354508e-04f, -1.297139188e-04f, -1.297921559e-04f, -1.298701621e-04f, -1.299479371e-04f, -1.300254810e-04f, -1.301027935e-04f, -1.301798746e-04f, -1.302567242e-04f, -1.303333421e-04f,
--1.304097282e-04f, -1.304858824e-04f, -1.305618046e-04f, -1.306374948e-04f, -1.307129526e-04f, -1.307881782e-04f, -1.308631713e-04f, -1.309379318e-04f, -1.310124597e-04f, -1.310867548e-04f,
--1.311608170e-04f, -1.312346462e-04f, -1.313082423e-04f, -1.313816052e-04f, -1.314547348e-04f, -1.315276309e-04f, -1.316002936e-04f, -1.316727226e-04f, -1.317449178e-04f, -1.318168792e-04f,
--1.318886066e-04f, -1.319601000e-04f, -1.320313592e-04f, -1.321023841e-04f, -1.321731747e-04f, -1.322437308e-04f, -1.323140523e-04f, -1.323841391e-04f, -1.324539912e-04f, -1.325236084e-04f,
--1.325929906e-04f, -1.326621377e-04f, -1.327310496e-04f, -1.327997263e-04f, -1.328681675e-04f, -1.329363733e-04f, -1.330043435e-04f, -1.330720780e-04f, -1.331395768e-04f, -1.332068397e-04f,
--1.332738666e-04f, -1.333406574e-04f, -1.334072121e-04f, -1.334735306e-04f, -1.335396127e-04f, -1.336054583e-04f, -1.336710674e-04f, -1.337364399e-04f, -1.338015756e-04f, -1.338664745e-04f,
--1.339311365e-04f, -1.339955615e-04f, -1.340597494e-04f, -1.341237001e-04f, -1.341874136e-04f, -1.342508896e-04f, -1.343141282e-04f, -1.343771293e-04f, -1.344398927e-04f, -1.345024184e-04f,
--1.345647063e-04f, -1.346267563e-04f, -1.346885683e-04f, -1.347501422e-04f, -1.348114779e-04f, -1.348725754e-04f, -1.349334346e-04f, -1.349940554e-04f, -1.350544376e-04f, -1.351145812e-04f,
--1.351744862e-04f, -1.352341524e-04f, -1.352935798e-04f, -1.353527682e-04f, -1.354117177e-04f, -1.354704280e-04f, -1.355288992e-04f, -1.355871311e-04f, -1.356451237e-04f, -1.357028769e-04f,
--1.357603905e-04f, -1.358176646e-04f, -1.358746991e-04f, -1.359314938e-04f, -1.359880487e-04f, -1.360443638e-04f, -1.361004388e-04f, -1.361562738e-04f, -1.362118687e-04f, -1.362672235e-04f,
--1.363223379e-04f, -1.363772120e-04f, -1.364318457e-04f, -1.364862388e-04f, -1.365403914e-04f, -1.365943034e-04f, -1.366479747e-04f, -1.367014051e-04f, -1.367545947e-04f, -1.368075434e-04f,
--1.368602511e-04f, -1.369127176e-04f, -1.369649431e-04f, -1.370169273e-04f, -1.370686703e-04f, -1.371201718e-04f, -1.371714320e-04f, -1.372224507e-04f, -1.372732278e-04f, -1.373237633e-04f,
--1.373740570e-04f, -1.374241091e-04f, -1.374739192e-04f, -1.375234875e-04f, -1.375728139e-04f, -1.376218982e-04f, -1.376707404e-04f, -1.377193405e-04f, -1.377676983e-04f, -1.378158139e-04f,
--1.378636871e-04f, -1.379113179e-04f, -1.379587062e-04f, -1.380058520e-04f, -1.380527552e-04f, -1.380994158e-04f, -1.381458336e-04f, -1.381920087e-04f, -1.382379409e-04f, -1.382836302e-04f,
--1.383290766e-04f, -1.383742800e-04f, -1.384192403e-04f, -1.384639575e-04f, -1.385084315e-04f, -1.385526622e-04f, -1.385966497e-04f, -1.386403938e-04f, -1.386838945e-04f, -1.387271517e-04f,
--1.387701654e-04f, -1.388129356e-04f, -1.388554621e-04f, -1.388977450e-04f, -1.389397841e-04f, -1.389815794e-04f, -1.390231309e-04f, -1.390644385e-04f, -1.391055022e-04f, -1.391463219e-04f,
--1.391868975e-04f, -1.392272291e-04f, -1.392673165e-04f, -1.393071597e-04f, -1.393467587e-04f, -1.393861134e-04f, -1.394252238e-04f, -1.394640898e-04f, -1.395027113e-04f, -1.395410884e-04f,
--1.395792210e-04f, -1.396171090e-04f, -1.396547524e-04f, -1.396921512e-04f, -1.397293052e-04f, -1.397662146e-04f, -1.398028791e-04f, -1.398392988e-04f, -1.398754736e-04f, -1.399114035e-04f,
--1.399470885e-04f, -1.399825285e-04f, -1.400177234e-04f, -1.400526732e-04f, -1.400873780e-04f, -1.401218376e-04f, -1.401560519e-04f, -1.401900211e-04f, -1.402237450e-04f, -1.402572235e-04f,
--1.402904567e-04f, -1.403234446e-04f, -1.403561870e-04f, -1.403886839e-04f, -1.404209354e-04f, -1.404529413e-04f, -1.404847016e-04f, -1.405162164e-04f, -1.405474855e-04f, -1.405785090e-04f,
--1.406092868e-04f, -1.406398188e-04f, -1.406701050e-04f, -1.407001455e-04f, -1.407299401e-04f, -1.407594889e-04f, -1.407887918e-04f, -1.408178488e-04f, -1.408466598e-04f, -1.408752248e-04f,
--1.409035439e-04f, -1.409316169e-04f, -1.409594438e-04f, -1.409870247e-04f, -1.410143594e-04f, -1.410414479e-04f, -1.410682903e-04f, -1.410948866e-04f, -1.411212365e-04f, -1.411473403e-04f,
--1.411731977e-04f, -1.411988089e-04f, -1.412241737e-04f, -1.412492922e-04f, -1.412741643e-04f, -1.412987901e-04f, -1.413231694e-04f, -1.413473023e-04f, -1.413711887e-04f, -1.413948287e-04f,
--1.414182222e-04f, -1.414413691e-04f, -1.414642695e-04f, -1.414869234e-04f, -1.415093307e-04f, -1.415314914e-04f, -1.415534055e-04f, -1.415750729e-04f, -1.415964937e-04f, -1.416176679e-04f,
--1.416385954e-04f, -1.416592762e-04f, -1.416797102e-04f, -1.416998976e-04f, -1.417198382e-04f, -1.417395321e-04f, -1.417589792e-04f, -1.417781796e-04f, -1.417971331e-04f, -1.418158398e-04f,
--1.418342998e-04f, -1.418525129e-04f, -1.418704792e-04f, -1.418881986e-04f, -1.419056712e-04f, -1.419228969e-04f, -1.419398757e-04f, -1.419566077e-04f, -1.419730927e-04f, -1.419893309e-04f,
--1.420053221e-04f, -1.420210665e-04f, -1.420365639e-04f, -1.420518144e-04f, -1.420668179e-04f, -1.420815746e-04f, -1.420960842e-04f, -1.421103470e-04f, -1.421243627e-04f, -1.421381316e-04f,
--1.421516534e-04f, -1.421649283e-04f, -1.421779563e-04f, -1.421907373e-04f, -1.422032713e-04f, -1.422155583e-04f, -1.422275984e-04f, -1.422393915e-04f, -1.422509376e-04f, -1.422622368e-04f,
--1.422732890e-04f, -1.422840942e-04f, -1.422946525e-04f, -1.423049638e-04f, -1.423150281e-04f, -1.423248455e-04f, -1.423344160e-04f, -1.423437395e-04f, -1.423528160e-04f, -1.423616456e-04f,
--1.423702283e-04f, -1.423785641e-04f, -1.423866529e-04f, -1.423944948e-04f, -1.424020898e-04f, -1.424094379e-04f, -1.424165392e-04f, -1.424233935e-04f, -1.424300010e-04f, -1.424363616e-04f,
--1.424424753e-04f, -1.424483422e-04f, -1.424539622e-04f, -1.424593355e-04f, -1.424644619e-04f, -1.424693415e-04f, -1.424739743e-04f, -1.424783604e-04f, -1.424824997e-04f, -1.424863922e-04f,
--1.424900380e-04f, -1.424934371e-04f, -1.424965895e-04f, -1.424994951e-04f, -1.425021541e-04f, -1.425045665e-04f, -1.425067322e-04f, -1.425086512e-04f, -1.425103237e-04f, -1.425117496e-04f,
--1.425129288e-04f, -1.425138616e-04f, -1.425145478e-04f, -1.425149875e-04f, -1.425151806e-04f, -1.425151273e-04f, -1.425148276e-04f, -1.425142814e-04f, -1.425134888e-04f, -1.425124498e-04f,
--1.425111644e-04f, -1.425096327e-04f, -1.425078547e-04f, -1.425058303e-04f, -1.425035597e-04f, -1.425010428e-04f, -1.424982797e-04f, -1.424952704e-04f, -1.424920150e-04f, -1.424885133e-04f,
--1.424847656e-04f, -1.424807717e-04f, -1.424765318e-04f, -1.424720459e-04f, -1.424673139e-04f, -1.424623360e-04f, -1.424571121e-04f, -1.424516422e-04f, -1.424459265e-04f, -1.424399649e-04f,
--1.424337575e-04f, -1.424273043e-04f, -1.424206053e-04f, -1.424136605e-04f, -1.424064701e-04f, -1.423990340e-04f, -1.423913522e-04f, -1.423834249e-04f, -1.423752519e-04f, -1.423668334e-04f,
--1.423581695e-04f, -1.423492600e-04f, -1.423401052e-04f, -1.423307049e-04f, -1.423210593e-04f, -1.423111683e-04f, -1.423010321e-04f, -1.422906506e-04f, -1.422800239e-04f, -1.422691521e-04f,
--1.422580351e-04f, -1.422466731e-04f, -1.422350659e-04f, -1.422232138e-04f, -1.422111167e-04f, -1.421987747e-04f, -1.421861878e-04f, -1.421733561e-04f, -1.421602795e-04f, -1.421469582e-04f,
--1.421333922e-04f, -1.421195816e-04f, -1.421055263e-04f, -1.420912264e-04f, -1.420766820e-04f, -1.420618931e-04f, -1.420468597e-04f, -1.420315820e-04f, -1.420160599e-04f, -1.420002935e-04f,
--1.419842828e-04f, -1.419680280e-04f, -1.419515289e-04f, -1.419347858e-04f, -1.419177986e-04f, -1.419005674e-04f, -1.418830923e-04f, -1.418653732e-04f, -1.418474103e-04f, -1.418292036e-04f,
--1.418107531e-04f, -1.417920589e-04f, -1.417731211e-04f, -1.417539396e-04f, -1.417345147e-04f, -1.417148462e-04f, -1.416949343e-04f, -1.416747790e-04f, -1.416543804e-04f, -1.416337385e-04f,
--1.416128534e-04f, -1.415917252e-04f, -1.415703538e-04f, -1.415487394e-04f, -1.415268821e-04f, -1.415047818e-04f, -1.414824386e-04f, -1.414598526e-04f, -1.414370239e-04f, -1.414139524e-04f,
--1.413906384e-04f, -1.413670818e-04f, -1.413432826e-04f, -1.413192411e-04f, -1.412949571e-04f, -1.412704308e-04f, -1.412456623e-04f, -1.412206515e-04f, -1.411953986e-04f, -1.411699037e-04f,
--1.411441667e-04f, -1.411181878e-04f, -1.410919670e-04f, -1.410655045e-04f, -1.410388001e-04f, -1.410118541e-04f, -1.409846665e-04f, -1.409572373e-04f, -1.409295667e-04f, -1.409016547e-04f,
--1.408735013e-04f, -1.408451066e-04f, -1.408164708e-04f, -1.407875938e-04f, -1.407584757e-04f, -1.407291167e-04f, -1.406995167e-04f, -1.406696759e-04f, -1.406395943e-04f, -1.406092720e-04f,
--1.405787091e-04f, -1.405479056e-04f, -1.405168616e-04f, -1.404855772e-04f, -1.404540525e-04f, -1.404222875e-04f, -1.403902823e-04f, -1.403580370e-04f, -1.403255517e-04f, -1.402928264e-04f,
--1.402598612e-04f, -1.402266562e-04f, -1.401932115e-04f, -1.401595271e-04f, -1.401256032e-04f, -1.400914397e-04f, -1.400570369e-04f, -1.400223947e-04f, -1.399875132e-04f, -1.399523926e-04f,
--1.399170329e-04f, -1.398814342e-04f, -1.398455965e-04f, -1.398095200e-04f, -1.397732047e-04f, -1.397366507e-04f, -1.396998582e-04f, -1.396628271e-04f, -1.396255575e-04f, -1.395880496e-04f,
--1.395503035e-04f, -1.395123192e-04f, -1.394740968e-04f, -1.394356363e-04f, -1.393969380e-04f, -1.393580018e-04f, -1.393188278e-04f, -1.392794162e-04f, -1.392397671e-04f, -1.391998804e-04f,
--1.391597564e-04f, -1.391193950e-04f, -1.390787964e-04f, -1.390379607e-04f, -1.389968880e-04f, -1.389555783e-04f, -1.389140318e-04f, -1.388722485e-04f, -1.388302285e-04f, -1.387879719e-04f,
--1.387454789e-04f, -1.387027495e-04f, -1.386597837e-04f, -1.386165818e-04f, -1.385731438e-04f, -1.385294697e-04f, -1.384855598e-04f, -1.384414140e-04f, -1.383970324e-04f, -1.383524153e-04f,
--1.383075626e-04f, -1.382624745e-04f, -1.382171510e-04f, -1.381715923e-04f, -1.381257984e-04f, -1.380797695e-04f, -1.380335057e-04f, -1.379870070e-04f, -1.379402736e-04f, -1.378933055e-04f,
--1.378461029e-04f, -1.377986658e-04f, -1.377509944e-04f, -1.377030888e-04f, -1.376549490e-04f, -1.376065752e-04f, -1.375579675e-04f, -1.375091259e-04f, -1.374600506e-04f, -1.374107417e-04f,
--1.373611993e-04f, -1.373114234e-04f, -1.372614143e-04f, -1.372111720e-04f, -1.371606966e-04f, -1.371099882e-04f, -1.370590469e-04f, -1.370078728e-04f, -1.369564661e-04f, -1.369048269e-04f,
--1.368529552e-04f, -1.368008511e-04f, -1.367485149e-04f, -1.366959465e-04f, -1.366431461e-04f, -1.365901138e-04f, -1.365368498e-04f, -1.364833540e-04f, -1.364296268e-04f, -1.363756680e-04f,
--1.363214780e-04f, -1.362670567e-04f, -1.362124043e-04f, -1.361575209e-04f, -1.361024066e-04f, -1.360470616e-04f, -1.359914859e-04f, -1.359356797e-04f, -1.358796430e-04f, -1.358233761e-04f,
--1.357668790e-04f, -1.357101518e-04f, -1.356531946e-04f, -1.355960076e-04f, -1.355385909e-04f, -1.354809447e-04f, -1.354230689e-04f, -1.353649638e-04f, -1.353066294e-04f, -1.352480659e-04f,
--1.351892734e-04f, -1.351302520e-04f, -1.350710019e-04f, -1.350115232e-04f, -1.349518159e-04f, -1.348918802e-04f, -1.348317163e-04f, -1.347713242e-04f, -1.347107042e-04f, -1.346498562e-04f,
--1.345887804e-04f, -1.345274770e-04f, -1.344659461e-04f, -1.344041877e-04f, -1.343422021e-04f, -1.342799894e-04f, -1.342175496e-04f, -1.341548830e-04f, -1.340919895e-04f, -1.340288695e-04f,
--1.339655229e-04f, -1.339019500e-04f, -1.338381508e-04f, -1.337741254e-04f, -1.337098741e-04f, -1.336453969e-04f, -1.335806940e-04f, -1.335157655e-04f, -1.334506115e-04f, -1.333852322e-04f,
--1.333196277e-04f, -1.332537981e-04f, -1.331877436e-04f, -1.331214642e-04f, -1.330549602e-04f, -1.329882316e-04f, -1.329212787e-04f, -1.328541014e-04f, -1.327867001e-04f, -1.327190747e-04f,
--1.326512254e-04f, -1.325831525e-04f, -1.325148559e-04f, -1.324463359e-04f, -1.323775925e-04f, -1.323086260e-04f, -1.322394364e-04f, -1.321700239e-04f, -1.321003887e-04f, -1.320305308e-04f,
--1.319604505e-04f, -1.318901478e-04f, -1.318196229e-04f, -1.317488759e-04f, -1.316779070e-04f, -1.316067163e-04f, -1.315353039e-04f, -1.314636701e-04f, -1.313918149e-04f, -1.313197385e-04f,
--1.312474410e-04f, -1.311749226e-04f, -1.311021834e-04f, -1.310292235e-04f, -1.309560432e-04f, -1.308826425e-04f, -1.308090216e-04f, -1.307351806e-04f, -1.306611197e-04f, -1.305868391e-04f,
--1.305123388e-04f, -1.304376191e-04f, -1.303626800e-04f, -1.302875218e-04f, -1.302121445e-04f, -1.301365484e-04f, -1.300607335e-04f, -1.299847000e-04f, -1.299084481e-04f, -1.298319779e-04f,
--1.297552896e-04f, -1.296783833e-04f, -1.296012592e-04f, -1.295239174e-04f, -1.294463580e-04f, -1.293685813e-04f, -1.292905874e-04f, -1.292123764e-04f, -1.291339485e-04f, -1.290553038e-04f,
--1.289764426e-04f, -1.288973648e-04f, -1.288180708e-04f, -1.287385607e-04f, -1.286588345e-04f, -1.285788925e-04f, -1.284987349e-04f, -1.284183617e-04f, -1.283377732e-04f, -1.282569694e-04f,
--1.281759506e-04f, -1.280947170e-04f, -1.280132686e-04f, -1.279316056e-04f, -1.278497282e-04f, -1.277676366e-04f, -1.276853309e-04f, -1.276028112e-04f, -1.275200778e-04f, -1.274371308e-04f,
--1.273539703e-04f, -1.272705966e-04f, -1.271870097e-04f, -1.271032098e-04f, -1.270191972e-04f, -1.269349719e-04f, -1.268505342e-04f, -1.267658841e-04f, -1.266810219e-04f, -1.265959477e-04f,
--1.265106617e-04f, -1.264251641e-04f, -1.263394550e-04f, -1.262535345e-04f, -1.261674029e-04f, -1.260810603e-04f, -1.259945069e-04f, -1.259077429e-04f, -1.258207684e-04f, -1.257335835e-04f,
--1.256461885e-04f, -1.255585836e-04f, -1.254707688e-04f, -1.253827444e-04f, -1.252945105e-04f, -1.252060673e-04f, -1.251174150e-04f, -1.250285537e-04f, -1.249394837e-04f, -1.248502050e-04f,
--1.247607179e-04f, -1.246710225e-04f, -1.245811190e-04f, -1.244910076e-04f, -1.244006885e-04f, -1.243101617e-04f, -1.242194276e-04f, -1.241284862e-04f, -1.240373378e-04f, -1.239459825e-04f,
--1.238544205e-04f, -1.237626520e-04f, -1.236706771e-04f, -1.235784960e-04f, -1.234861090e-04f, -1.233935161e-04f, -1.233007176e-04f, -1.232077136e-04f, -1.231145043e-04f, -1.230210899e-04f,
--1.229274705e-04f, -1.228336465e-04f, -1.227396178e-04f, -1.226453847e-04f, -1.225509475e-04f, -1.224563062e-04f, -1.223614610e-04f, -1.222664122e-04f, -1.221711599e-04f, -1.220757043e-04f,
--1.219800455e-04f, -1.218841838e-04f, -1.217881194e-04f, -1.216918523e-04f, -1.215953829e-04f, -1.214987113e-04f, -1.214018376e-04f, -1.213047621e-04f, -1.212074850e-04f, -1.211100063e-04f,
--1.210123264e-04f, -1.209144454e-04f, -1.208163635e-04f, -1.207180808e-04f, -1.206195976e-04f, -1.205209141e-04f, -1.204220303e-04f, -1.203229466e-04f, -1.202236632e-04f, -1.201241801e-04f,
--1.200244976e-04f, -1.199246158e-04f, -1.198245351e-04f, -1.197242555e-04f, -1.196237772e-04f, -1.195231005e-04f, -1.194222255e-04f, -1.193211524e-04f, -1.192198814e-04f, -1.191184128e-04f,
--1.190167466e-04f, -1.189148831e-04f, -1.188128225e-04f, -1.187105649e-04f, -1.186081107e-04f, -1.185054598e-04f, -1.184026127e-04f, -1.182995694e-04f, -1.181963301e-04f, -1.180928950e-04f,
--1.179892644e-04f, -1.178854384e-04f, -1.177814173e-04f, -1.176772011e-04f, -1.175727902e-04f, -1.174681847e-04f, -1.173633848e-04f, -1.172583907e-04f, -1.171532026e-04f, -1.170478208e-04f,
--1.169422453e-04f, -1.168364764e-04f, -1.167305143e-04f, -1.166243592e-04f, -1.165180114e-04f, -1.164114709e-04f, -1.163047380e-04f, -1.161978129e-04f, -1.160906959e-04f, -1.159833870e-04f,
--1.158758865e-04f, -1.157681947e-04f, -1.156603116e-04f, -1.155522376e-04f, -1.154439727e-04f, -1.153355173e-04f, -1.152268716e-04f, -1.151180356e-04f, -1.150090097e-04f, -1.148997940e-04f,
--1.147903887e-04f, -1.146807941e-04f, -1.145710104e-04f, -1.144610377e-04f, -1.143508762e-04f, -1.142405263e-04f, -1.141299880e-04f, -1.140192616e-04f, -1.139083472e-04f, -1.137972452e-04f,
--1.136859557e-04f, -1.135744789e-04f, -1.134628150e-04f, -1.133509642e-04f, -1.132389268e-04f, -1.131267029e-04f, -1.130142928e-04f, -1.129016967e-04f, -1.127889147e-04f, -1.126759471e-04f,
--1.125627942e-04f, -1.124494560e-04f, -1.123359328e-04f, -1.122222249e-04f, -1.121083325e-04f, -1.119942557e-04f, -1.118799948e-04f, -1.117655499e-04f, -1.116509214e-04f, -1.115361094e-04f,
--1.114211141e-04f, -1.113059357e-04f, -1.111905745e-04f, -1.110750307e-04f, -1.109593044e-04f, -1.108433960e-04f, -1.107273056e-04f, -1.106110334e-04f, -1.104945796e-04f, -1.103779445e-04f,
--1.102611283e-04f, -1.101441312e-04f, -1.100269535e-04f, -1.099095952e-04f, -1.097920567e-04f, -1.096743382e-04f, -1.095564399e-04f, -1.094383620e-04f, -1.093201047e-04f, -1.092016683e-04f,
--1.090830529e-04f, -1.089642588e-04f, -1.088452862e-04f, -1.087261354e-04f, -1.086068065e-04f, -1.084872998e-04f, -1.083676155e-04f, -1.082477538e-04f, -1.081277149e-04f, -1.080074991e-04f,
--1.078871066e-04f, -1.077665376e-04f, -1.076457923e-04f, -1.075248709e-04f, -1.074037738e-04f, -1.072825010e-04f, -1.071610529e-04f, -1.070394296e-04f, -1.069176314e-04f, -1.067956585e-04f,
--1.066735112e-04f, -1.065511895e-04f, -1.064286939e-04f, -1.063060245e-04f, -1.061831815e-04f, -1.060601651e-04f, -1.059369757e-04f, -1.058136133e-04f, -1.056900783e-04f, -1.055663709e-04f,
--1.054424913e-04f, -1.053184397e-04f, -1.051942163e-04f, -1.050698215e-04f, -1.049452553e-04f, -1.048205181e-04f, -1.046956101e-04f, -1.045705315e-04f, -1.044452825e-04f, -1.043198634e-04f,
--1.041942744e-04f, -1.040685157e-04f, -1.039425876e-04f, -1.038164903e-04f, -1.036902240e-04f, -1.035637890e-04f, -1.034371854e-04f, -1.033104136e-04f, -1.031834737e-04f, -1.030563660e-04f,
--1.029290908e-04f, -1.028016482e-04f, -1.026740385e-04f, -1.025462620e-04f, -1.024183188e-04f, -1.022902092e-04f, -1.021619334e-04f, -1.020334917e-04f, -1.019048843e-04f, -1.017761115e-04f,
--1.016471734e-04f, -1.015180704e-04f, -1.013888026e-04f, -1.012593703e-04f, -1.011297737e-04f, -1.010000131e-04f, -1.008700887e-04f, -1.007400008e-04f, -1.006097495e-04f, -1.004793351e-04f,
--1.003487580e-04f, -1.002180182e-04f, -1.000871160e-04f, -9.995605176e-05f, -9.982482562e-05f, -9.969343784e-05f, -9.956188866e-05f, -9.943017832e-05f, -9.929830706e-05f, -9.916627514e-05f,
--9.903408278e-05f, -9.890173023e-05f, -9.876921773e-05f, -9.863654553e-05f, -9.850371387e-05f, -9.837072299e-05f, -9.823757313e-05f, -9.810426454e-05f, -9.797079746e-05f, -9.783717214e-05f,
--9.770338882e-05f, -9.756944775e-05f, -9.743534917e-05f, -9.730109332e-05f, -9.716668045e-05f, -9.703211081e-05f, -9.689738464e-05f, -9.676250219e-05f, -9.662746371e-05f, -9.649226944e-05f,
--9.635691963e-05f, -9.622141452e-05f, -9.608575437e-05f, -9.594993941e-05f, -9.581396991e-05f, -9.567784610e-05f, -9.554156824e-05f, -9.540513658e-05f, -9.526855136e-05f, -9.513181283e-05f,
--9.499492124e-05f, -9.485787684e-05f, -9.472067988e-05f, -9.458333062e-05f, -9.444582930e-05f, -9.430817616e-05f, -9.417037148e-05f, -9.403241548e-05f, -9.389430844e-05f, -9.375605059e-05f,
--9.361764219e-05f, -9.347908349e-05f, -9.334037474e-05f, -9.320151620e-05f, -9.306250812e-05f, -9.292335075e-05f, -9.278404434e-05f, -9.264458915e-05f, -9.250498544e-05f, -9.236523345e-05f,
--9.222533344e-05f, -9.208528567e-05f, -9.194509038e-05f, -9.180474784e-05f, -9.166425830e-05f, -9.152362201e-05f, -9.138283924e-05f, -9.124191023e-05f, -9.110083524e-05f, -9.095961453e-05f,
--9.081824836e-05f, -9.067673698e-05f, -9.053508064e-05f, -9.039327961e-05f, -9.025133415e-05f, -9.010924451e-05f, -8.996701094e-05f, -8.982463371e-05f, -8.968211308e-05f, -8.953944930e-05f,
--8.939664264e-05f, -8.925369335e-05f, -8.911060168e-05f, -8.896736791e-05f, -8.882399229e-05f, -8.868047508e-05f, -8.853681653e-05f, -8.839301692e-05f, -8.824907650e-05f, -8.810499553e-05f,
--8.796077428e-05f, -8.781641300e-05f, -8.767191195e-05f, -8.752727141e-05f, -8.738249162e-05f, -8.723757285e-05f, -8.709251537e-05f, -8.694731943e-05f, -8.680198530e-05f, -8.665651325e-05f,
--8.651090353e-05f, -8.636515641e-05f, -8.621927215e-05f, -8.607325102e-05f, -8.592709328e-05f, -8.578079919e-05f, -8.563436902e-05f, -8.548780304e-05f, -8.534110150e-05f, -8.519426468e-05f,
--8.504729284e-05f, -8.490018625e-05f, -8.475294516e-05f, -8.460556985e-05f, -8.445806058e-05f, -8.431041763e-05f, -8.416264125e-05f, -8.401473171e-05f, -8.386668928e-05f, -8.371851423e-05f,
--8.357020682e-05f, -8.342176733e-05f, -8.327319602e-05f, -8.312449315e-05f, -8.297565900e-05f, -8.282669384e-05f, -8.267759793e-05f, -8.252837154e-05f, -8.237901494e-05f, -8.222952840e-05f,
--8.207991220e-05f, -8.193016659e-05f, -8.178029186e-05f, -8.163028826e-05f, -8.148015607e-05f, -8.132989557e-05f, -8.117950702e-05f, -8.102899069e-05f, -8.087834685e-05f, -8.072757578e-05f,
--8.057667774e-05f, -8.042565301e-05f, -8.027450186e-05f, -8.012322457e-05f, -7.997182140e-05f, -7.982029262e-05f, -7.966863852e-05f, -7.951685935e-05f, -7.936495540e-05f, -7.921292694e-05f,
--7.906077425e-05f, -7.890849758e-05f, -7.875609723e-05f, -7.860357346e-05f, -7.845092655e-05f, -7.829815677e-05f, -7.814526440e-05f, -7.799224971e-05f, -7.783911297e-05f, -7.768585447e-05f,
--7.753247447e-05f, -7.737897326e-05f, -7.722535110e-05f, -7.707160828e-05f, -7.691774507e-05f, -7.676376174e-05f, -7.660965858e-05f, -7.645543586e-05f, -7.630109385e-05f, -7.614663284e-05f,
--7.599205309e-05f, -7.583735490e-05f, -7.568253853e-05f, -7.552760426e-05f, -7.537255238e-05f, -7.521738315e-05f, -7.506209686e-05f, -7.490669379e-05f, -7.475117421e-05f, -7.459553840e-05f,
--7.443978665e-05f, -7.428391923e-05f, -7.412793642e-05f, -7.397183849e-05f, -7.381562574e-05f, -7.365929844e-05f, -7.350285687e-05f, -7.334630131e-05f, -7.318963204e-05f, -7.303284934e-05f,
--7.287595349e-05f, -7.271894478e-05f, -7.256182348e-05f, -7.240458987e-05f, -7.224724424e-05f, -7.208978687e-05f, -7.193221804e-05f, -7.177453803e-05f, -7.161674712e-05f, -7.145884560e-05f,
--7.130083375e-05f, -7.114271185e-05f, -7.098448019e-05f, -7.082613904e-05f, -7.066768869e-05f, -7.050912942e-05f, -7.035046152e-05f, -7.019168528e-05f, -7.003280096e-05f, -6.987380886e-05f,
--6.971470927e-05f, -6.955550246e-05f, -6.939618872e-05f, -6.923676834e-05f, -6.907724160e-05f, -6.891760878e-05f, -6.875787017e-05f, -6.859802606e-05f, -6.843807673e-05f, -6.827802247e-05f,
--6.811786355e-05f, -6.795760028e-05f, -6.779723292e-05f, -6.763676178e-05f, -6.747618713e-05f, -6.731550927e-05f, -6.715472848e-05f, -6.699384504e-05f, -6.683285924e-05f, -6.667177137e-05f,
--6.651058173e-05f, -6.634929058e-05f, -6.618789823e-05f, -6.602640496e-05f, -6.586481105e-05f, -6.570311680e-05f, -6.554132250e-05f, -6.537942843e-05f, -6.521743487e-05f, -6.505534213e-05f,
--6.489315048e-05f, -6.473086022e-05f, -6.456847164e-05f, -6.440598502e-05f, -6.424340066e-05f, -6.408071884e-05f, -6.391793985e-05f, -6.375506399e-05f, -6.359209154e-05f, -6.342902279e-05f,
--6.326585803e-05f, -6.310259756e-05f, -6.293924166e-05f, -6.277579063e-05f, -6.261224475e-05f, -6.244860432e-05f, -6.228486963e-05f, -6.212104096e-05f, -6.195711861e-05f, -6.179310288e-05f,
--6.162899404e-05f, -6.146479241e-05f, -6.130049825e-05f, -6.113611188e-05f, -6.097163357e-05f, -6.080706363e-05f, -6.064240235e-05f, -6.047765001e-05f, -6.031280691e-05f, -6.014787334e-05f,
--5.998284960e-05f, -5.981773598e-05f, -5.965253277e-05f, -5.948724027e-05f, -5.932185876e-05f, -5.915638855e-05f, -5.899082992e-05f, -5.882518317e-05f, -5.865944860e-05f, -5.849362650e-05f,
--5.832771715e-05f, -5.816172086e-05f, -5.799563793e-05f, -5.782946864e-05f, -5.766321329e-05f, -5.749687217e-05f, -5.733044559e-05f, -5.716393383e-05f, -5.699733719e-05f, -5.683065596e-05f,
--5.666389045e-05f, -5.649704094e-05f, -5.633010774e-05f, -5.616309113e-05f, -5.599599142e-05f, -5.582880889e-05f, -5.566154386e-05f, -5.549419660e-05f, -5.532676743e-05f, -5.515925663e-05f,
--5.499166450e-05f, -5.482399134e-05f, -5.465623745e-05f, -5.448840312e-05f, -5.432048865e-05f, -5.415249434e-05f, -5.398442048e-05f, -5.381626737e-05f, -5.364803531e-05f, -5.347972460e-05f,
--5.331133553e-05f, -5.314286841e-05f, -5.297432353e-05f, -5.280570118e-05f, -5.263700167e-05f, -5.246822530e-05f, -5.229937236e-05f, -5.213044315e-05f, -5.196143798e-05f, -5.179235713e-05f,
--5.162320091e-05f, -5.145396962e-05f, -5.128466355e-05f, -5.111528302e-05f, -5.094582830e-05f, -5.077629971e-05f, -5.060669754e-05f, -5.043702210e-05f, -5.026727368e-05f, -5.009745258e-05f,
--4.992755911e-05f, -4.975759355e-05f, -4.958755622e-05f, -4.941744742e-05f, -4.924726743e-05f, -4.907701657e-05f, -4.890669513e-05f, -4.873630342e-05f, -4.856584174e-05f, -4.839531037e-05f,
--4.822470964e-05f, -4.805403983e-05f, -4.788330126e-05f, -4.771249421e-05f, -4.754161899e-05f, -4.737067591e-05f, -4.719966526e-05f, -4.702858734e-05f, -4.685744246e-05f, -4.668623093e-05f,
--4.651495303e-05f, -4.634360907e-05f, -4.617219936e-05f, -4.600072419e-05f, -4.582918388e-05f, -4.565757871e-05f, -4.548590900e-05f, -4.531417504e-05f, -4.514237714e-05f, -4.497051560e-05f,
--4.479859072e-05f, -4.462660281e-05f, -4.445455217e-05f, -4.428243910e-05f, -4.411026391e-05f, -4.393802689e-05f, -4.376572835e-05f, -4.359336860e-05f, -4.342094793e-05f, -4.324846666e-05f,
--4.307592508e-05f, -4.290332350e-05f, -4.273066221e-05f, -4.255794154e-05f, -4.238516177e-05f, -4.221232322e-05f, -4.203942618e-05f, -4.186647096e-05f, -4.169345787e-05f, -4.152038720e-05f,
--4.134725927e-05f, -4.117407438e-05f, -4.100083283e-05f, -4.082753493e-05f, -4.065418097e-05f, -4.048077127e-05f, -4.030730613e-05f, -4.013378586e-05f, -3.996021076e-05f, -3.978658113e-05f,
--3.961289728e-05f, -3.943915951e-05f, -3.926536814e-05f, -3.909152346e-05f, -3.891762578e-05f, -3.874367540e-05f, -3.856967264e-05f, -3.839561779e-05f, -3.822151116e-05f, -3.804735306e-05f,
--3.787314379e-05f, -3.769888366e-05f, -3.752457297e-05f, -3.735021204e-05f, -3.717580116e-05f, -3.700134064e-05f, -3.682683079e-05f, -3.665227191e-05f, -3.647766431e-05f, -3.630300830e-05f,
--3.612830418e-05f, -3.595355226e-05f, -3.577875284e-05f, -3.560390624e-05f, -3.542901275e-05f, -3.525407268e-05f, -3.507908635e-05f, -3.490405405e-05f, -3.472897610e-05f, -3.455385280e-05f,
--3.437868445e-05f, -3.420347137e-05f, -3.402821386e-05f, -3.385291223e-05f, -3.367756678e-05f, -3.350217782e-05f, -3.332674566e-05f, -3.315127061e-05f, -3.297575297e-05f, -3.280019306e-05f,
--3.262459117e-05f, -3.244894761e-05f, -3.227326270e-05f, -3.209753673e-05f, -3.192177003e-05f, -3.174596289e-05f, -3.157011562e-05f, -3.139422853e-05f, -3.121830192e-05f, -3.104233612e-05f,
--3.086633141e-05f, -3.069028812e-05f, -3.051420654e-05f, -3.033808699e-05f, -3.016192978e-05f, -2.998573520e-05f, -2.980950358e-05f, -2.963323521e-05f, -2.945693041e-05f, -2.928058948e-05f,
--2.910421274e-05f, -2.892780048e-05f, -2.875135302e-05f, -2.857487067e-05f, -2.839835374e-05f, -2.822180252e-05f, -2.804521734e-05f, -2.786859850e-05f, -2.769194630e-05f, -2.751526106e-05f,
--2.733854309e-05f, -2.716179269e-05f, -2.698501017e-05f, -2.680819584e-05f, -2.663135001e-05f, -2.645447299e-05f, -2.627756509e-05f, -2.610062660e-05f, -2.592365785e-05f, -2.574665915e-05f,
--2.556963079e-05f, -2.539257310e-05f, -2.521548637e-05f, -2.503837092e-05f, -2.486122705e-05f, -2.468405508e-05f, -2.450685531e-05f, -2.432962806e-05f, -2.415237362e-05f, -2.397509232e-05f,
--2.379778445e-05f, -2.362045034e-05f, -2.344309028e-05f, -2.326570458e-05f, -2.308829356e-05f, -2.291085753e-05f, -2.273339679e-05f, -2.255591165e-05f, -2.237840242e-05f, -2.220086941e-05f,
--2.202331293e-05f, -2.184573329e-05f, -2.166813080e-05f, -2.149050577e-05f, -2.131285850e-05f, -2.113518931e-05f, -2.095749850e-05f, -2.077978638e-05f, -2.060205327e-05f, -2.042429947e-05f,
--2.024652529e-05f, -2.006873105e-05f, -1.989091704e-05f, -1.971308358e-05f, -1.953523098e-05f, -1.935735955e-05f, -1.917946959e-05f, -1.900156142e-05f, -1.882363535e-05f, -1.864569168e-05f,
--1.846773073e-05f, -1.828975280e-05f, -1.811175820e-05f, -1.793374725e-05f, -1.775572024e-05f, -1.757767750e-05f, -1.739961933e-05f, -1.722154603e-05f, -1.704345793e-05f, -1.686535532e-05f,
--1.668723852e-05f, -1.650910784e-05f, -1.633096359e-05f, -1.615280607e-05f, -1.597463559e-05f, -1.579645247e-05f, -1.561825701e-05f, -1.544004953e-05f, -1.526183032e-05f, -1.508359971e-05f,
--1.490535800e-05f, -1.472710550e-05f, -1.454884252e-05f, -1.437056936e-05f, -1.419228635e-05f, -1.401399378e-05f, -1.383569197e-05f, -1.365738122e-05f, -1.347906184e-05f, -1.330073415e-05f,
--1.312239846e-05f, -1.294405506e-05f, -1.276570428e-05f, -1.258734642e-05f, -1.240898179e-05f, -1.223061069e-05f, -1.205223345e-05f, -1.187385036e-05f, -1.169546173e-05f, -1.151706789e-05f,
--1.133866912e-05f, -1.116026575e-05f, -1.098185808e-05f, -1.080344643e-05f, -1.062503109e-05f, -1.044661238e-05f, -1.026819061e-05f, -1.008976609e-05f, -9.911339121e-06f, -9.732910019e-06f,
--9.554479090e-06f, -9.376046644e-06f, -9.197612989e-06f, -9.019178434e-06f, -8.840743288e-06f, -8.662307860e-06f, -8.483872458e-06f, -8.305437390e-06f, -8.127002966e-06f, -7.948569495e-06f,
--7.770137284e-06f, -7.591706642e-06f, -7.413277879e-06f, -7.234851302e-06f, -7.056427219e-06f, -6.878005940e-06f, -6.699587773e-06f, -6.521173026e-06f, -6.342762007e-06f, -6.164355026e-06f,
--5.985952389e-06f, -5.807554406e-06f, -5.629161384e-06f, -5.450773633e-06f, -5.272391459e-06f, -5.094015171e-06f, -4.915645078e-06f, -4.737281486e-06f, -4.558924705e-06f, -4.380575042e-06f,
--4.202232805e-06f, -4.023898303e-06f, -3.845571842e-06f, -3.667253731e-06f, -3.488944277e-06f, -3.310643789e-06f, -3.132352573e-06f, -2.954070938e-06f, -2.775799191e-06f, -2.597537640e-06f,
--2.419286592e-06f, -2.241046355e-06f, -2.062817237e-06f, -1.884599543e-06f, -1.706393583e-06f, -1.528199663e-06f, -1.350018090e-06f, -1.171849172e-06f, -9.936932161e-07f, -8.155505289e-07f,
--6.374214177e-07f, -4.593061895e-07f, -2.812051512e-07f, -1.031186099e-07f, 7.495312775e-08f, 2.530097548e-07f, 4.310509646e-07f, 6.090764504e-07f, 7.870859055e-07f, 9.650790234e-07f,
-1.143055497e-06f, 1.321015021e-06f, 1.498957288e-06f, 1.676881992e-06f, 1.854788827e-06f, 2.032677486e-06f, 2.210547663e-06f, 2.388399052e-06f, 2.566231346e-06f, 2.744044241e-06f,
-2.921837430e-06f, 3.099610606e-06f, 3.277363465e-06f, 3.455095700e-06f, 3.632807005e-06f, 3.810497075e-06f, 3.988165605e-06f, 4.165812288e-06f, 4.343436820e-06f, 4.521038895e-06f,
-4.698618207e-06f, 4.876174451e-06f, 5.053707322e-06f, 5.231216516e-06f, 5.408701725e-06f, 5.586162647e-06f, 5.763598975e-06f, 5.941010406e-06f, 6.118396633e-06f, 6.295757353e-06f,
-6.473092260e-06f, 6.650401051e-06f, 6.827683420e-06f, 7.004939063e-06f, 7.182167675e-06f, 7.359368953e-06f, 7.536542593e-06f, 7.713688289e-06f, 7.890805737e-06f, 8.067894635e-06f,
-8.244954678e-06f, 8.421985561e-06f, 8.598986982e-06f, 8.775958636e-06f, 8.952900220e-06f, 9.129811430e-06f, 9.306691962e-06f, 9.483541515e-06f, 9.660359783e-06f, 9.837146464e-06f,
-1.001390125e-05f, 1.019062385e-05f, 1.036731395e-05f, 1.054397125e-05f, 1.072059545e-05f, 1.089718624e-05f, 1.107374333e-05f, 1.125026641e-05f, 1.142675517e-05f, 1.160320932e-05f,
-1.177962855e-05f, 1.195601256e-05f, 1.213236104e-05f, 1.230867371e-05f, 1.248495024e-05f, 1.266119035e-05f, 1.283739373e-05f, 1.301356008e-05f, 1.318968910e-05f, 1.336578048e-05f,
-1.354183392e-05f, 1.371784913e-05f, 1.389382579e-05f, 1.406976362e-05f, 1.424566231e-05f, 1.442152155e-05f, 1.459734105e-05f, 1.477312051e-05f, 1.494885962e-05f, 1.512455809e-05f,
-1.530021561e-05f, 1.547583188e-05f, 1.565140661e-05f, 1.582693949e-05f, 1.600243023e-05f, 1.617787852e-05f, 1.635328406e-05f, 1.652864655e-05f, 1.670396570e-05f, 1.687924120e-05f,
-1.705447276e-05f, 1.722966007e-05f, 1.740480283e-05f, 1.757990076e-05f, 1.775495354e-05f, 1.792996087e-05f, 1.810492247e-05f, 1.827983803e-05f, 1.845470725e-05f, 1.862952983e-05f,
-1.880430548e-05f, 1.897903389e-05f, 1.915371477e-05f, 1.932834782e-05f, 1.950293275e-05f, 1.967746924e-05f, 1.985195701e-05f, 2.002639576e-05f, 2.020078519e-05f, 2.037512501e-05f,
-2.054941491e-05f, 2.072365459e-05f, 2.089784377e-05f, 2.107198214e-05f, 2.124606941e-05f, 2.142010528e-05f, 2.159408945e-05f, 2.176802163e-05f, 2.194190152e-05f, 2.211572882e-05f,
-2.228950324e-05f, 2.246322448e-05f, 2.263689224e-05f, 2.281050624e-05f, 2.298406617e-05f, 2.315757173e-05f, 2.333102264e-05f, 2.350441860e-05f, 2.367775930e-05f, 2.385104447e-05f,
-2.402427379e-05f, 2.419744698e-05f, 2.437056374e-05f, 2.454362378e-05f, 2.471662680e-05f, 2.488957251e-05f, 2.506246061e-05f, 2.523529080e-05f, 2.540806281e-05f, 2.558077632e-05f,
-2.575343105e-05f, 2.592602671e-05f, 2.609856299e-05f, 2.627103961e-05f, 2.644345627e-05f, 2.661581269e-05f, 2.678810855e-05f, 2.696034359e-05f, 2.713251749e-05f, 2.730462997e-05f,
-2.747668073e-05f, 2.764866949e-05f, 2.782059595e-05f, 2.799245982e-05f, 2.816426080e-05f, 2.833599861e-05f, 2.850767295e-05f, 2.867928353e-05f, 2.885083006e-05f, 2.902231225e-05f,
-2.919372981e-05f, 2.936508244e-05f, 2.953636986e-05f, 2.970759177e-05f, 2.987874788e-05f, 3.004983791e-05f, 3.022086156e-05f, 3.039181854e-05f, 3.056270856e-05f, 3.073353134e-05f,
-3.090428657e-05f, 3.107497398e-05f, 3.124559328e-05f, 3.141614416e-05f, 3.158662635e-05f, 3.175703956e-05f, 3.192738349e-05f, 3.209765785e-05f, 3.226786237e-05f, 3.243799675e-05f,
-3.260806069e-05f, 3.277805392e-05f, 3.294797615e-05f, 3.311782708e-05f, 3.328760643e-05f, 3.345731392e-05f, 3.362694925e-05f, 3.379651213e-05f, 3.396600228e-05f, 3.413541942e-05f,
-3.430476325e-05f, 3.447403349e-05f, 3.464322985e-05f, 3.481235205e-05f, 3.498139980e-05f, 3.515037281e-05f, 3.531927079e-05f, 3.548809347e-05f, 3.565684055e-05f, 3.582551176e-05f,
-3.599410679e-05f, 3.616262538e-05f, 3.633106723e-05f, 3.649943206e-05f, 3.666771958e-05f, 3.683592952e-05f, 3.700406158e-05f, 3.717211548e-05f, 3.734009094e-05f, 3.750798767e-05f,
-3.767580539e-05f, 3.784354381e-05f, 3.801120266e-05f, 3.817878164e-05f, 3.834628048e-05f, 3.851369890e-05f, 3.868103660e-05f, 3.884829331e-05f, 3.901546874e-05f, 3.918256262e-05f,
-3.934957465e-05f, 3.951650457e-05f, 3.968335208e-05f, 3.985011690e-05f, 4.001679875e-05f, 4.018339736e-05f, 4.034991244e-05f, 4.051634371e-05f, 4.068269088e-05f, 4.084895368e-05f,
-4.101513183e-05f, 4.118122505e-05f, 4.134723305e-05f, 4.151315556e-05f, 4.167899230e-05f, 4.184474298e-05f, 4.201040733e-05f, 4.217598507e-05f, 4.234147592e-05f, 4.250687959e-05f,
-4.267219582e-05f, 4.283742433e-05f, 4.300256482e-05f, 4.316761703e-05f, 4.333258068e-05f, 4.349745549e-05f, 4.366224118e-05f, 4.382693748e-05f, 4.399154411e-05f, 4.415606078e-05f,
-4.432048723e-05f, 4.448482317e-05f, 4.464906833e-05f, 4.481322244e-05f, 4.497728521e-05f, 4.514125637e-05f, 4.530513565e-05f, 4.546892277e-05f, 4.563261745e-05f, 4.579621941e-05f,
-4.595972839e-05f, 4.612314411e-05f, 4.628646629e-05f, 4.644969466e-05f, 4.661282894e-05f, 4.677586887e-05f, 4.693881415e-05f, 4.710166453e-05f, 4.726441973e-05f, 4.742707947e-05f,
-4.758964348e-05f, 4.775211149e-05f, 4.791448323e-05f, 4.807675841e-05f, 4.823893678e-05f, 4.840101805e-05f, 4.856300195e-05f, 4.872488822e-05f, 4.888667658e-05f, 4.904836676e-05f,
-4.920995849e-05f, 4.937145149e-05f, 4.953284550e-05f, 4.969414025e-05f, 4.985533545e-05f, 5.001643086e-05f, 5.017742618e-05f, 5.033832116e-05f, 5.049911552e-05f, 5.065980899e-05f,
-5.082040131e-05f, 5.098089220e-05f, 5.114128140e-05f, 5.130156864e-05f, 5.146175364e-05f, 5.162183614e-05f, 5.178181588e-05f, 5.194169257e-05f, 5.210146597e-05f, 5.226113579e-05f,
-5.242070177e-05f, 5.258016364e-05f, 5.273952114e-05f, 5.289877400e-05f, 5.305792195e-05f, 5.321696472e-05f, 5.337590206e-05f, 5.353473368e-05f, 5.369345934e-05f, 5.385207876e-05f,
-5.401059167e-05f, 5.416899782e-05f, 5.432729693e-05f, 5.448548874e-05f, 5.464357299e-05f, 5.480154941e-05f, 5.495941774e-05f, 5.511717771e-05f, 5.527482907e-05f, 5.543237154e-05f,
-5.558980486e-05f, 5.574712878e-05f, 5.590434302e-05f, 5.606144732e-05f, 5.621844143e-05f, 5.637532508e-05f, 5.653209800e-05f, 5.668875994e-05f, 5.684531064e-05f, 5.700174983e-05f,
-5.715807724e-05f, 5.731429263e-05f, 5.747039573e-05f, 5.762638628e-05f, 5.778226402e-05f, 5.793802868e-05f, 5.809368001e-05f, 5.824921776e-05f, 5.840464165e-05f, 5.855995143e-05f,
-5.871514684e-05f, 5.887022763e-05f, 5.902519352e-05f, 5.918004428e-05f, 5.933477963e-05f, 5.948939932e-05f, 5.964390309e-05f, 5.979829068e-05f, 5.995256184e-05f, 6.010671631e-05f,
-6.026075383e-05f, 6.041467415e-05f, 6.056847701e-05f, 6.072216215e-05f, 6.087572932e-05f, 6.102917826e-05f, 6.118250872e-05f, 6.133572044e-05f, 6.148881316e-05f, 6.164178663e-05f,
-6.179464060e-05f, 6.194737482e-05f, 6.209998902e-05f, 6.225248296e-05f, 6.240485637e-05f, 6.255710901e-05f, 6.270924063e-05f, 6.286125097e-05f, 6.301313978e-05f, 6.316490680e-05f,
-6.331655178e-05f, 6.346807448e-05f, 6.361947463e-05f, 6.377075200e-05f, 6.392190632e-05f, 6.407293734e-05f, 6.422384482e-05f, 6.437462851e-05f, 6.452528814e-05f, 6.467582348e-05f,
-6.482623428e-05f, 6.497652028e-05f, 6.512668123e-05f, 6.527671688e-05f, 6.542662700e-05f, 6.557641132e-05f, 6.572606960e-05f, 6.587560159e-05f, 6.602500704e-05f, 6.617428570e-05f,
-6.632343734e-05f, 6.647246169e-05f, 6.662135852e-05f, 6.677012757e-05f, 6.691876860e-05f, 6.706728136e-05f, 6.721566561e-05f, 6.736392110e-05f, 6.751204759e-05f, 6.766004483e-05f,
-6.780791257e-05f, 6.795565057e-05f, 6.810325859e-05f, 6.825073638e-05f, 6.839808369e-05f, 6.854530029e-05f, 6.869238593e-05f, 6.883934036e-05f, 6.898616334e-05f, 6.913285464e-05f,
-6.927941400e-05f, 6.942584119e-05f, 6.957213596e-05f, 6.971829807e-05f, 6.986432728e-05f, 7.001022334e-05f, 7.015598603e-05f, 7.030161509e-05f, 7.044711028e-05f, 7.059247137e-05f,
-7.073769811e-05f, 7.088279026e-05f, 7.102774759e-05f, 7.117256986e-05f, 7.131725682e-05f, 7.146180824e-05f, 7.160622388e-05f, 7.175050350e-05f, 7.189464686e-05f, 7.203865372e-05f,
-7.218252385e-05f, 7.232625701e-05f, 7.246985297e-05f, 7.261331147e-05f, 7.275663230e-05f, 7.289981521e-05f, 7.304285996e-05f, 7.318576633e-05f, 7.332853407e-05f, 7.347116295e-05f,
-7.361365274e-05f, 7.375600319e-05f, 7.389821408e-05f, 7.404028517e-05f, 7.418221623e-05f, 7.432400703e-05f, 7.446565732e-05f, 7.460716688e-05f, 7.474853547e-05f, 7.488976286e-05f,
-7.503084883e-05f, 7.517179313e-05f, 7.531259553e-05f, 7.545325581e-05f, 7.559377373e-05f, 7.573414906e-05f, 7.587438157e-05f, 7.601447103e-05f, 7.615441721e-05f, 7.629421987e-05f,
-7.643387880e-05f, 7.657339376e-05f, 7.671276451e-05f, 7.685199084e-05f, 7.699107252e-05f, 7.713000930e-05f, 7.726880098e-05f, 7.740744731e-05f, 7.754594807e-05f, 7.768430304e-05f,
-7.782251198e-05f, 7.796057468e-05f, 7.809849089e-05f, 7.823626041e-05f, 7.837388299e-05f, 7.851135842e-05f, 7.864868647e-05f, 7.878586692e-05f, 7.892289954e-05f, 7.905978410e-05f,
-7.919652038e-05f, 7.933310816e-05f, 7.946954721e-05f, 7.960583732e-05f, 7.974197825e-05f, 7.987796978e-05f, 8.001381170e-05f, 8.014950377e-05f, 8.028504578e-05f, 8.042043751e-05f,
-8.055567873e-05f, 8.069076922e-05f, 8.082570876e-05f, 8.096049713e-05f, 8.109513412e-05f, 8.122961949e-05f, 8.136395303e-05f, 8.149813453e-05f, 8.163216375e-05f, 8.176604049e-05f,
-8.189976451e-05f, 8.203333562e-05f, 8.216675358e-05f, 8.230001818e-05f, 8.243312920e-05f, 8.256608643e-05f, 8.269888964e-05f, 8.283153862e-05f, 8.296403316e-05f, 8.309637303e-05f,
-8.322855802e-05f, 8.336058793e-05f, 8.349246252e-05f, 8.362418159e-05f, 8.375574491e-05f, 8.388715229e-05f, 8.401840350e-05f, 8.414949832e-05f, 8.428043655e-05f, 8.441121797e-05f,
-8.454184237e-05f, 8.467230954e-05f, 8.480261926e-05f, 8.493277132e-05f, 8.506276551e-05f, 8.519260162e-05f, 8.532227944e-05f, 8.545179875e-05f, 8.558115934e-05f, 8.571036101e-05f,
-8.583940354e-05f, 8.596828673e-05f, 8.609701037e-05f, 8.622557424e-05f, 8.635397813e-05f, 8.648222185e-05f, 8.661030517e-05f, 8.673822790e-05f, 8.686598982e-05f, 8.699359073e-05f,
-8.712103042e-05f, 8.724830868e-05f, 8.737542530e-05f, 8.750238009e-05f, 8.762917283e-05f, 8.775580332e-05f, 8.788227135e-05f, 8.800857672e-05f, 8.813471922e-05f, 8.826069865e-05f,
-8.838651481e-05f, 8.851216748e-05f, 8.863765648e-05f, 8.876298158e-05f, 8.888814260e-05f, 8.901313933e-05f, 8.913797156e-05f, 8.926263909e-05f, 8.938714173e-05f, 8.951147927e-05f,
-8.963565150e-05f, 8.975965824e-05f, 8.988349927e-05f, 9.000717440e-05f, 9.013068343e-05f, 9.025402615e-05f, 9.037720238e-05f, 9.050021190e-05f, 9.062305452e-05f, 9.074573005e-05f,
-9.086823828e-05f, 9.099057902e-05f, 9.111275207e-05f, 9.123475723e-05f, 9.135659430e-05f, 9.147826309e-05f, 9.159976341e-05f, 9.172109505e-05f, 9.184225782e-05f, 9.196325152e-05f,
-9.208407597e-05f, 9.220473096e-05f, 9.232521630e-05f, 9.244553180e-05f, 9.256567726e-05f, 9.268565250e-05f, 9.280545730e-05f, 9.292509149e-05f, 9.304455488e-05f, 9.316384726e-05f,
-9.328296845e-05f, 9.340191825e-05f, 9.352069648e-05f, 9.363930293e-05f, 9.375773744e-05f, 9.387599979e-05f, 9.399408980e-05f, 9.411200729e-05f, 9.422975206e-05f, 9.434732392e-05f,
-9.446472269e-05f, 9.458194818e-05f, 9.469900019e-05f, 9.481587854e-05f, 9.493258304e-05f, 9.504911351e-05f, 9.516546976e-05f, 9.528165160e-05f, 9.539765885e-05f, 9.551349132e-05f,
-9.562914882e-05f, 9.574463117e-05f, 9.585993818e-05f, 9.597506967e-05f, 9.609002546e-05f, 9.620480535e-05f, 9.631940918e-05f, 9.643383675e-05f, 9.654808788e-05f, 9.666216238e-05f,
-9.677606008e-05f, 9.688978080e-05f, 9.700332435e-05f, 9.711669054e-05f, 9.722987921e-05f, 9.734289016e-05f, 9.745572322e-05f, 9.756837821e-05f, 9.768085495e-05f, 9.779315326e-05f,
-9.790527295e-05f, 9.801721385e-05f, 9.812897579e-05f, 9.824055858e-05f, 9.835196204e-05f, 9.846318600e-05f, 9.857423028e-05f, 9.868509471e-05f, 9.879577910e-05f, 9.890628328e-05f,
-9.901660708e-05f, 9.912675032e-05f, 9.923671282e-05f, 9.934649440e-05f, 9.945609491e-05f, 9.956551415e-05f, 9.967475196e-05f, 9.978380816e-05f, 9.989268258e-05f, 1.000013750e-04f,
-1.001098854e-04f, 1.002182134e-04f, 1.003263590e-04f, 1.004343219e-04f, 1.005421020e-04f, 1.006496992e-04f, 1.007571131e-04f, 1.008643438e-04f, 1.009713909e-04f, 1.010782544e-04f,
-1.011849341e-04f, 1.012914297e-04f, 1.013977412e-04f, 1.015038683e-04f, 1.016098109e-04f, 1.017155689e-04f, 1.018211420e-04f, 1.019265301e-04f, 1.020317330e-04f, 1.021367505e-04f,
-1.022415826e-04f, 1.023462290e-04f, 1.024506895e-04f, 1.025549640e-04f, 1.026590524e-04f, 1.027629544e-04f, 1.028666700e-04f, 1.029701988e-04f, 1.030735409e-04f, 1.031766959e-04f,
-1.032796638e-04f, 1.033824444e-04f, 1.034850375e-04f, 1.035874429e-04f, 1.036896606e-04f, 1.037916903e-04f, 1.038935319e-04f, 1.039951852e-04f, 1.040966501e-04f, 1.041979263e-04f,
-1.042990138e-04f, 1.043999124e-04f, 1.045006219e-04f, 1.046011422e-04f, 1.047014731e-04f, 1.048016144e-04f, 1.049015660e-04f, 1.050013278e-04f, 1.051008995e-04f, 1.052002810e-04f,
-1.052994723e-04f, 1.053984730e-04f, 1.054972831e-04f, 1.055959023e-04f, 1.056943307e-04f, 1.057925679e-04f, 1.058906138e-04f, 1.059884684e-04f, 1.060861314e-04f, 1.061836026e-04f,
-1.062808820e-04f, 1.063779694e-04f, 1.064748645e-04f, 1.065715674e-04f, 1.066680777e-04f, 1.067643955e-04f, 1.068605204e-04f, 1.069564525e-04f, 1.070521914e-04f, 1.071477371e-04f,
-1.072430895e-04f, 1.073382483e-04f, 1.074332134e-04f, 1.075279847e-04f, 1.076225620e-04f, 1.077169453e-04f, 1.078111342e-04f, 1.079051287e-04f, 1.079989287e-04f, 1.080925340e-04f,
-1.081859444e-04f, 1.082791599e-04f, 1.083721802e-04f, 1.084650052e-04f, 1.085576348e-04f, 1.086500688e-04f, 1.087423071e-04f, 1.088343495e-04f, 1.089261960e-04f, 1.090178462e-04f,
-1.091093003e-04f, 1.092005578e-04f, 1.092916189e-04f, 1.093824832e-04f, 1.094731506e-04f, 1.095636211e-04f, 1.096538944e-04f, 1.097439705e-04f, 1.098338492e-04f, 1.099235303e-04f,
-1.100130137e-04f, 1.101022993e-04f, 1.101913870e-04f, 1.102802765e-04f, 1.103689678e-04f, 1.104574608e-04f, 1.105457552e-04f, 1.106338510e-04f, 1.107217480e-04f, 1.108094461e-04f,
-1.108969451e-04f, 1.109842450e-04f, 1.110713455e-04f, 1.111582466e-04f, 1.112449481e-04f, 1.113314499e-04f, 1.114177518e-04f, 1.115038538e-04f, 1.115897556e-04f, 1.116754572e-04f,
-1.117609584e-04f, 1.118462590e-04f, 1.119313591e-04f, 1.120162584e-04f, 1.121009567e-04f, 1.121854541e-04f, 1.122697503e-04f, 1.123538452e-04f, 1.124377386e-04f, 1.125214306e-04f,
-1.126049208e-04f, 1.126882093e-04f, 1.127712958e-04f, 1.128541803e-04f, 1.129368626e-04f, 1.130193425e-04f, 1.131016201e-04f, 1.131836951e-04f, 1.132655674e-04f, 1.133472369e-04f,
-1.134287035e-04f, 1.135099670e-04f, 1.135910274e-04f, 1.136718844e-04f, 1.137525380e-04f, 1.138329881e-04f, 1.139132345e-04f, 1.139932771e-04f, 1.140731158e-04f, 1.141527505e-04f,
-1.142321810e-04f, 1.143114073e-04f, 1.143904291e-04f, 1.144692465e-04f, 1.145478592e-04f, 1.146262671e-04f, 1.147044702e-04f, 1.147824683e-04f, 1.148602613e-04f, 1.149378491e-04f,
-1.150152316e-04f, 1.150924086e-04f, 1.151693800e-04f, 1.152461457e-04f, 1.153227057e-04f, 1.153990597e-04f, 1.154752077e-04f, 1.155511495e-04f, 1.156268851e-04f, 1.157024143e-04f,
-1.157777370e-04f, 1.158528531e-04f, 1.159277626e-04f, 1.160024652e-04f, 1.160769608e-04f, 1.161512494e-04f, 1.162253309e-04f, 1.162992050e-04f, 1.163728718e-04f, 1.164463312e-04f,
-1.165195829e-04f, 1.165926269e-04f, 1.166654631e-04f, 1.167380914e-04f, 1.168105116e-04f, 1.168827237e-04f, 1.169547275e-04f, 1.170265230e-04f, 1.170981101e-04f, 1.171694885e-04f,
-1.172406583e-04f, 1.173116193e-04f, 1.173823715e-04f, 1.174529146e-04f, 1.175232487e-04f, 1.175933735e-04f, 1.176632891e-04f, 1.177329952e-04f, 1.178024919e-04f, 1.178717789e-04f,
-1.179408562e-04f, 1.180097237e-04f, 1.180783813e-04f, 1.181468289e-04f, 1.182150664e-04f, 1.182830936e-04f, 1.183509105e-04f, 1.184185171e-04f, 1.184859131e-04f, 1.185530984e-04f,
-1.186200731e-04f, 1.186868370e-04f, 1.187533899e-04f, 1.188197319e-04f, 1.188858627e-04f, 1.189517824e-04f, 1.190174907e-04f, 1.190829877e-04f, 1.191482732e-04f, 1.192133471e-04f,
-1.192782093e-04f, 1.193428598e-04f, 1.194072984e-04f, 1.194715250e-04f, 1.195355396e-04f, 1.195993420e-04f, 1.196629322e-04f, 1.197263101e-04f, 1.197894755e-04f, 1.198524285e-04f,
-1.199151688e-04f, 1.199776965e-04f, 1.200400113e-04f, 1.201021133e-04f, 1.201640024e-04f, 1.202256784e-04f, 1.202871412e-04f, 1.203483908e-04f, 1.204094271e-04f, 1.204702500e-04f,
-1.205308594e-04f, 1.205912552e-04f, 1.206514374e-04f, 1.207114058e-04f, 1.207711604e-04f, 1.208307010e-04f, 1.208900277e-04f, 1.209491403e-04f, 1.210080386e-04f, 1.210667228e-04f,
-1.211251926e-04f, 1.211834479e-04f, 1.212414888e-04f, 1.212993151e-04f, 1.213569267e-04f, 1.214143235e-04f, 1.214715055e-04f, 1.215284726e-04f, 1.215852247e-04f, 1.216417617e-04f,
-1.216980836e-04f, 1.217541902e-04f, 1.218100816e-04f, 1.218657575e-04f, 1.219212180e-04f, 1.219764629e-04f, 1.220314922e-04f, 1.220863058e-04f, 1.221409036e-04f, 1.221952855e-04f,
-1.222494516e-04f, 1.223034016e-04f, 1.223571355e-04f, 1.224106533e-04f, 1.224639549e-04f, 1.225170401e-04f, 1.225699090e-04f, 1.226225614e-04f, 1.226749974e-04f, 1.227272167e-04f,
-1.227792193e-04f, 1.228310052e-04f, 1.228825743e-04f, 1.229339265e-04f, 1.229850618e-04f, 1.230359800e-04f, 1.230866812e-04f, 1.231371652e-04f, 1.231874320e-04f, 1.232374814e-04f,
-1.232873135e-04f, 1.233369282e-04f, 1.233863253e-04f, 1.234355049e-04f, 1.234844669e-04f, 1.235332112e-04f, 1.235817377e-04f, 1.236300463e-04f, 1.236781371e-04f, 1.237260099e-04f,
-1.237736646e-04f, 1.238211013e-04f, 1.238683198e-04f, 1.239153202e-04f, 1.239621022e-04f, 1.240086659e-04f, 1.240550111e-04f, 1.241011380e-04f, 1.241470462e-04f, 1.241927359e-04f,
-1.242382070e-04f, 1.242834593e-04f, 1.243284929e-04f, 1.243733076e-04f, 1.244179035e-04f, 1.244622804e-04f, 1.245064382e-04f, 1.245503771e-04f, 1.245940968e-04f, 1.246375973e-04f,
-1.246808786e-04f, 1.247239406e-04f, 1.247667833e-04f, 1.248094066e-04f, 1.248518104e-04f, 1.248939947e-04f, 1.249359594e-04f, 1.249777045e-04f, 1.250192299e-04f, 1.250605356e-04f,
-1.251016216e-04f, 1.251424877e-04f, 1.251831339e-04f, 1.252235601e-04f, 1.252637664e-04f, 1.253037527e-04f, 1.253435188e-04f, 1.253830649e-04f, 1.254223907e-04f, 1.254614963e-04f,
-1.255003816e-04f, 1.255390465e-04f, 1.255774911e-04f, 1.256157153e-04f, 1.256537190e-04f, 1.256915021e-04f, 1.257290647e-04f, 1.257664066e-04f, 1.258035279e-04f, 1.258404285e-04f,
-1.258771083e-04f, 1.259135673e-04f, 1.259498055e-04f, 1.259858228e-04f, 1.260216191e-04f, 1.260571945e-04f, 1.260925489e-04f, 1.261276822e-04f, 1.261625944e-04f, 1.261972854e-04f,
-1.262317553e-04f, 1.262660039e-04f, 1.263000313e-04f, 1.263338373e-04f, 1.263674220e-04f, 1.264007853e-04f, 1.264339272e-04f, 1.264668477e-04f, 1.264995466e-04f, 1.265320240e-04f,
-1.265642798e-04f, 1.265963140e-04f, 1.266281265e-04f, 1.266597174e-04f, 1.266910865e-04f, 1.267222339e-04f, 1.267531594e-04f, 1.267838632e-04f, 1.268143451e-04f, 1.268446051e-04f,
-1.268746431e-04f, 1.269044592e-04f, 1.269340533e-04f, 1.269634254e-04f, 1.269925754e-04f, 1.270215033e-04f, 1.270502090e-04f, 1.270786927e-04f, 1.271069541e-04f, 1.271349933e-04f,
-1.271628103e-04f, 1.271904050e-04f, 1.272177774e-04f, 1.272449275e-04f, 1.272718552e-04f, 1.272985605e-04f, 1.273250434e-04f, 1.273513039e-04f, 1.273773419e-04f, 1.274031574e-04f,
-1.274287504e-04f, 1.274541208e-04f, 1.274792686e-04f, 1.275041939e-04f, 1.275288965e-04f, 1.275533765e-04f, 1.275776339e-04f, 1.276016685e-04f, 1.276254804e-04f, 1.276490696e-04f,
-1.276724361e-04f, 1.276955797e-04f, 1.277185006e-04f, 1.277411986e-04f, 1.277636738e-04f, 1.277859261e-04f, 1.278079555e-04f, 1.278297621e-04f, 1.278513457e-04f, 1.278727064e-04f,
-1.278938441e-04f, 1.279147589e-04f, 1.279354506e-04f, 1.279559194e-04f, 1.279761651e-04f, 1.279961878e-04f, 1.280159875e-04f, 1.280355640e-04f, 1.280549175e-04f, 1.280740479e-04f,
-1.280929551e-04f, 1.281116393e-04f, 1.281301002e-04f, 1.281483381e-04f, 1.281663527e-04f, 1.281841442e-04f, 1.282017125e-04f, 1.282190576e-04f, 1.282361795e-04f, 1.282530781e-04f,
-1.282697535e-04f, 1.282862057e-04f, 1.283024346e-04f, 1.283184402e-04f, 1.283342226e-04f, 1.283497817e-04f, 1.283651175e-04f, 1.283802300e-04f, 1.283951191e-04f, 1.284097850e-04f,
-1.284242276e-04f, 1.284384468e-04f, 1.284524427e-04f, 1.284662153e-04f, 1.284797645e-04f, 1.284930904e-04f, 1.285061930e-04f, 1.285190722e-04f, 1.285317280e-04f, 1.285441605e-04f,
-1.285563696e-04f, 1.285683553e-04f, 1.285801177e-04f, 1.285916567e-04f, 1.286029723e-04f, 1.286140646e-04f, 1.286249335e-04f, 1.286355791e-04f, 1.286460012e-04f, 1.286562001e-04f,
-1.286661755e-04f, 1.286759276e-04f, 1.286854563e-04f, 1.286947616e-04f, 1.287038436e-04f, 1.287127023e-04f, 1.287213375e-04f, 1.287297495e-04f, 1.287379381e-04f, 1.287459034e-04f,
-1.287536453e-04f, 1.287611639e-04f, 1.287684592e-04f, 1.287755312e-04f, 1.287823798e-04f, 1.287890052e-04f, 1.287954072e-04f, 1.288015860e-04f, 1.288075415e-04f, 1.288132738e-04f,
-1.288187828e-04f, 1.288240685e-04f, 1.288291310e-04f, 1.288339702e-04f, 1.288385863e-04f, 1.288429791e-04f, 1.288471487e-04f, 1.288510952e-04f, 1.288548185e-04f, 1.288583186e-04f,
-1.288615956e-04f, 1.288646494e-04f, 1.288674801e-04f, 1.288700877e-04f, 1.288724722e-04f, 1.288746336e-04f, 1.288765720e-04f, 1.288782873e-04f, 1.288797796e-04f, 1.288810489e-04f,
-1.288820952e-04f, 1.288829185e-04f, 1.288835188e-04f, 1.288838962e-04f, 1.288840506e-04f, 1.288839822e-04f, 1.288836908e-04f, 1.288831766e-04f, 1.288824396e-04f, 1.288814797e-04f,
-1.288802970e-04f, 1.288788915e-04f, 1.288772632e-04f, 1.288754122e-04f, 1.288733385e-04f, 1.288710420e-04f, 1.288685229e-04f, 1.288657812e-04f, 1.288628168e-04f, 1.288596298e-04f,
-1.288562202e-04f, 1.288525880e-04f, 1.288487333e-04f, 1.288446561e-04f, 1.288403565e-04f, 1.288358343e-04f, 1.288310898e-04f, 1.288261228e-04f, 1.288209335e-04f, 1.288155218e-04f,
-1.288098878e-04f, 1.288040315e-04f, 1.287979529e-04f, 1.287916521e-04f, 1.287851291e-04f, 1.287783840e-04f, 1.287714167e-04f, 1.287642273e-04f, 1.287568158e-04f, 1.287491822e-04f,
-1.287413267e-04f, 1.287332491e-04f, 1.287249496e-04f, 1.287164282e-04f, 1.287076849e-04f, 1.286987198e-04f, 1.286895328e-04f, 1.286801241e-04f, 1.286704936e-04f, 1.286606414e-04f,
-1.286505675e-04f, 1.286402720e-04f, 1.286297549e-04f, 1.286190162e-04f, 1.286080560e-04f, 1.285968744e-04f, 1.285854712e-04f, 1.285738467e-04f, 1.285620007e-04f, 1.285499335e-04f,
-1.285376449e-04f, 1.285251351e-04f, 1.285124041e-04f, 1.284994519e-04f, 1.284862785e-04f, 1.284728841e-04f, 1.284592686e-04f, 1.284454321e-04f, 1.284313747e-04f, 1.284170963e-04f,
-1.284025971e-04f, 1.283878770e-04f, 1.283729361e-04f, 1.283577745e-04f, 1.283423922e-04f, 1.283267892e-04f, 1.283109656e-04f, 1.282949215e-04f, 1.282786568e-04f, 1.282621717e-04f,
-1.282454661e-04f, 1.282285402e-04f, 1.282113939e-04f, 1.281940274e-04f, 1.281764406e-04f, 1.281586337e-04f, 1.281406066e-04f, 1.281223594e-04f, 1.281038922e-04f, 1.280852051e-04f,
-1.280662980e-04f, 1.280471710e-04f, 1.280278242e-04f, 1.280082576e-04f, 1.279884713e-04f, 1.279684653e-04f, 1.279482397e-04f, 1.279277945e-04f, 1.279071299e-04f, 1.278862458e-04f,
-1.278651423e-04f, 1.278438194e-04f, 1.278222772e-04f, 1.278005159e-04f, 1.277785353e-04f, 1.277563356e-04f, 1.277339169e-04f, 1.277112791e-04f, 1.276884224e-04f, 1.276653468e-04f,
-1.276420524e-04f, 1.276185392e-04f, 1.275948073e-04f, 1.275708568e-04f, 1.275466876e-04f, 1.275222999e-04f, 1.274976938e-04f, 1.274728692e-04f, 1.274478263e-04f, 1.274225651e-04f,
-1.273970856e-04f, 1.273713880e-04f, 1.273454723e-04f, 1.273193386e-04f, 1.272929869e-04f, 1.272664173e-04f, 1.272396298e-04f, 1.272126246e-04f, 1.271854016e-04f, 1.271579610e-04f,
-1.271303028e-04f, 1.271024271e-04f, 1.270743339e-04f, 1.270460234e-04f, 1.270174955e-04f, 1.269887504e-04f, 1.269597881e-04f, 1.269306087e-04f, 1.269012123e-04f, 1.268715989e-04f,
-1.268417685e-04f, 1.268117214e-04f, 1.267814575e-04f, 1.267509769e-04f, 1.267202796e-04f, 1.266893658e-04f, 1.266582356e-04f, 1.266268889e-04f, 1.265953259e-04f, 1.265635467e-04f,
-1.265315512e-04f, 1.264993397e-04f, 1.264669120e-04f, 1.264342685e-04f, 1.264014090e-04f, 1.263683338e-04f, 1.263350427e-04f, 1.263015361e-04f, 1.262678138e-04f, 1.262338760e-04f,
-1.261997228e-04f, 1.261653543e-04f, 1.261307704e-04f, 1.260959714e-04f, 1.260609572e-04f, 1.260257280e-04f, 1.259902838e-04f, 1.259546248e-04f, 1.259187509e-04f, 1.258826623e-04f,
-1.258463591e-04f, 1.258098413e-04f, 1.257731091e-04f, 1.257361624e-04f, 1.256990014e-04f, 1.256616262e-04f, 1.256240368e-04f, 1.255862333e-04f, 1.255482159e-04f, 1.255099846e-04f,
-1.254715394e-04f, 1.254328805e-04f, 1.253940080e-04f, 1.253549219e-04f, 1.253156224e-04f, 1.252761094e-04f, 1.252363831e-04f, 1.251964437e-04f, 1.251562910e-04f, 1.251159254e-04f,
-1.250753468e-04f, 1.250345553e-04f, 1.249935511e-04f, 1.249523341e-04f, 1.249109046e-04f, 1.248692625e-04f, 1.248274081e-04f, 1.247853413e-04f, 1.247430622e-04f, 1.247005711e-04f,
-1.246578678e-04f, 1.246149526e-04f, 1.245718256e-04f, 1.245284867e-04f, 1.244849362e-04f, 1.244411740e-04f, 1.243972004e-04f, 1.243530154e-04f, 1.243086190e-04f, 1.242640115e-04f,
-1.242191928e-04f, 1.241741631e-04f, 1.241289225e-04f, 1.240834710e-04f, 1.240378088e-04f, 1.239919359e-04f, 1.239458526e-04f, 1.238995587e-04f, 1.238530545e-04f, 1.238063401e-04f,
-1.237594155e-04f, 1.237122809e-04f, 1.236649363e-04f, 1.236173819e-04f, 1.235696177e-04f, 1.235216439e-04f, 1.234734605e-04f, 1.234250677e-04f, 1.233764655e-04f, 1.233276540e-04f,
-1.232786335e-04f, 1.232294039e-04f, 1.231799653e-04f, 1.231303179e-04f, 1.230804618e-04f, 1.230303970e-04f, 1.229801238e-04f, 1.229296421e-04f, 1.228789521e-04f, 1.228280539e-04f,
-1.227769475e-04f, 1.227256332e-04f, 1.226741110e-04f, 1.226223810e-04f, 1.225704434e-04f, 1.225182981e-04f, 1.224659455e-04f, 1.224133854e-04f, 1.223606181e-04f, 1.223076437e-04f,
-1.222544622e-04f, 1.222010739e-04f, 1.221474787e-04f, 1.220936768e-04f, 1.220396684e-04f, 1.219854535e-04f, 1.219310322e-04f, 1.218764046e-04f, 1.218215709e-04f, 1.217665312e-04f,
-1.217112856e-04f, 1.216558342e-04f, 1.216001770e-04f, 1.215443143e-04f, 1.214882462e-04f, 1.214319727e-04f, 1.213754940e-04f, 1.213188101e-04f, 1.212619213e-04f, 1.212048275e-04f,
-1.211475290e-04f, 1.210900259e-04f, 1.210323182e-04f, 1.209744061e-04f, 1.209162897e-04f, 1.208579691e-04f, 1.207994445e-04f, 1.207407159e-04f, 1.206817834e-04f, 1.206226473e-04f,
-1.205633076e-04f, 1.205037644e-04f, 1.204440179e-04f, 1.203840681e-04f, 1.203239152e-04f, 1.202635594e-04f, 1.202030007e-04f, 1.201422392e-04f, 1.200812751e-04f, 1.200201085e-04f,
-1.199587396e-04f, 1.198971684e-04f, 1.198353951e-04f, 1.197734198e-04f, 1.197112425e-04f, 1.196488636e-04f, 1.195862830e-04f, 1.195235009e-04f, 1.194605175e-04f, 1.193973327e-04f,
-1.193339469e-04f, 1.192703601e-04f, 1.192065724e-04f, 1.191425839e-04f, 1.190783948e-04f, 1.190140053e-04f, 1.189494154e-04f, 1.188846252e-04f, 1.188196350e-04f, 1.187544448e-04f,
-1.186890547e-04f, 1.186234649e-04f, 1.185576756e-04f, 1.184916868e-04f, 1.184254986e-04f, 1.183591113e-04f, 1.182925250e-04f, 1.182257397e-04f, 1.181587556e-04f, 1.180915728e-04f,
-1.180241916e-04f, 1.179566119e-04f, 1.178888340e-04f, 1.178208579e-04f, 1.177526839e-04f, 1.176843120e-04f, 1.176157424e-04f, 1.175469752e-04f, 1.174780106e-04f, 1.174088486e-04f,
-1.173394895e-04f, 1.172699333e-04f, 1.172001802e-04f, 1.171302304e-04f, 1.170600839e-04f, 1.169897409e-04f, 1.169192016e-04f, 1.168484661e-04f, 1.167775345e-04f, 1.167064069e-04f,
-1.166350836e-04f, 1.165635646e-04f, 1.164918501e-04f, 1.164199402e-04f, 1.163478351e-04f, 1.162755349e-04f, 1.162030398e-04f, 1.161303498e-04f, 1.160574652e-04f, 1.159843861e-04f,
-1.159111125e-04f, 1.158376448e-04f, 1.157639829e-04f, 1.156901271e-04f, 1.156160775e-04f, 1.155418342e-04f, 1.154673974e-04f, 1.153927673e-04f, 1.153179439e-04f, 1.152429275e-04f,
-1.151677181e-04f, 1.150923159e-04f, 1.150167211e-04f, 1.149409338e-04f, 1.148649541e-04f, 1.147887823e-04f, 1.147124184e-04f, 1.146358626e-04f, 1.145591150e-04f, 1.144821758e-04f,
-1.144050452e-04f, 1.143277233e-04f, 1.142502103e-04f, 1.141725062e-04f, 1.140946113e-04f, 1.140165257e-04f, 1.139382495e-04f, 1.138597829e-04f, 1.137811261e-04f, 1.137022792e-04f,
-1.136232423e-04f, 1.135440157e-04f, 1.134645994e-04f, 1.133849936e-04f, 1.133051986e-04f, 1.132252143e-04f, 1.131450410e-04f, 1.130646788e-04f, 1.129841280e-04f, 1.129033886e-04f,
-1.128224608e-04f, 1.127413447e-04f, 1.126600406e-04f, 1.125785485e-04f, 1.124968686e-04f, 1.124150012e-04f, 1.123329462e-04f, 1.122507040e-04f, 1.121682747e-04f, 1.120856583e-04f,
-1.120028551e-04f, 1.119198653e-04f, 1.118366889e-04f, 1.117533263e-04f, 1.116697774e-04f, 1.115860425e-04f, 1.115021217e-04f, 1.114180152e-04f, 1.113337232e-04f, 1.112492458e-04f,
-1.111645832e-04f, 1.110797355e-04f, 1.109947029e-04f, 1.109094856e-04f, 1.108240837e-04f, 1.107384975e-04f, 1.106527269e-04f, 1.105667723e-04f, 1.104806338e-04f, 1.103943115e-04f,
-1.103078057e-04f, 1.102211164e-04f, 1.101342439e-04f, 1.100471883e-04f, 1.099599498e-04f, 1.098725285e-04f, 1.097849246e-04f, 1.096971383e-04f, 1.096091698e-04f, 1.095210191e-04f,
-1.094326866e-04f, 1.093441723e-04f, 1.092554764e-04f, 1.091665991e-04f, 1.090775406e-04f, 1.089883009e-04f, 1.088988804e-04f, 1.088092792e-04f, 1.087194974e-04f, 1.086295352e-04f,
-1.085393927e-04f, 1.084490703e-04f, 1.083585679e-04f, 1.082678858e-04f, 1.081770242e-04f, 1.080859833e-04f, 1.079947631e-04f, 1.079033640e-04f, 1.078117859e-04f, 1.077200293e-04f,
-1.076280941e-04f, 1.075359806e-04f, 1.074436889e-04f, 1.073512193e-04f, 1.072585719e-04f, 1.071657469e-04f, 1.070727444e-04f, 1.069795646e-04f, 1.068862078e-04f, 1.067926740e-04f,
-1.066989635e-04f, 1.066050765e-04f, 1.065110130e-04f, 1.064167733e-04f, 1.063223576e-04f, 1.062277661e-04f, 1.061329989e-04f, 1.060380562e-04f, 1.059429381e-04f, 1.058476450e-04f,
-1.057521769e-04f, 1.056565340e-04f, 1.055607165e-04f, 1.054647246e-04f, 1.053685584e-04f, 1.052722182e-04f, 1.051757042e-04f, 1.050790164e-04f, 1.049821552e-04f, 1.048851206e-04f,
-1.047879128e-04f, 1.046905321e-04f, 1.045929787e-04f, 1.044952526e-04f, 1.043973541e-04f, 1.042992834e-04f, 1.042010407e-04f, 1.041026261e-04f, 1.040040398e-04f, 1.039052821e-04f,
-1.038063530e-04f, 1.037072529e-04f, 1.036079818e-04f, 1.035085399e-04f, 1.034089275e-04f, 1.033091448e-04f, 1.032091918e-04f, 1.031090689e-04f, 1.030087761e-04f, 1.029083137e-04f,
-1.028076819e-04f, 1.027068809e-04f, 1.026059108e-04f, 1.025047718e-04f, 1.024034642e-04f, 1.023019880e-04f, 1.022003436e-04f, 1.020985311e-04f, 1.019965506e-04f, 1.018944024e-04f,
-1.017920867e-04f, 1.016896037e-04f, 1.015869535e-04f, 1.014841363e-04f, 1.013811524e-04f, 1.012780019e-04f, 1.011746850e-04f, 1.010712019e-04f, 1.009675528e-04f, 1.008637379e-04f,
-1.007597575e-04f, 1.006556115e-04f, 1.005513004e-04f, 1.004468243e-04f, 1.003421833e-04f, 1.002373777e-04f, 1.001324076e-04f, 1.000272733e-04f, 9.992197493e-05f, 9.981651272e-05f,
-9.971088685e-05f, 9.960509752e-05f, 9.949914492e-05f, 9.939302926e-05f, 9.928675072e-05f, 9.918030952e-05f, 9.907370584e-05f, 9.896693989e-05f, 9.886001186e-05f, 9.875292195e-05f,
-9.864567036e-05f, 9.853825729e-05f, 9.843068294e-05f, 9.832294751e-05f, 9.821505120e-05f, 9.810699421e-05f, 9.799877674e-05f, 9.789039899e-05f, 9.778186116e-05f, 9.767316346e-05f,
-9.756430608e-05f, 9.745528923e-05f, 9.734611311e-05f, 9.723677792e-05f, 9.712728387e-05f, 9.701763115e-05f, 9.690781998e-05f, 9.679785054e-05f, 9.668772306e-05f, 9.657743773e-05f,
-9.646699475e-05f, 9.635639434e-05f, 9.624563669e-05f, 9.613472201e-05f, 9.602365050e-05f, 9.591242238e-05f, 9.580103784e-05f, 9.568949709e-05f, 9.557780035e-05f, 9.546594781e-05f,
-9.535393968e-05f, 9.524177617e-05f, 9.512945749e-05f, 9.501698384e-05f, 9.490435543e-05f, 9.479157248e-05f, 9.467863518e-05f, 9.456554374e-05f, 9.445229839e-05f, 9.433889931e-05f,
-9.422534673e-05f, 9.411164086e-05f, 9.399778189e-05f, 9.388377005e-05f, 9.376960554e-05f, 9.365528858e-05f, 9.354081937e-05f, 9.342619812e-05f, 9.331142505e-05f, 9.319650037e-05f,
-9.308142429e-05f, 9.296619702e-05f, 9.285081878e-05f, 9.273528977e-05f, 9.261961021e-05f, 9.250378031e-05f, 9.238780028e-05f, 9.227167035e-05f, 9.215539072e-05f, 9.203896160e-05f,
-9.192238321e-05f, 9.180565577e-05f, 9.168877948e-05f, 9.157175458e-05f, 9.145458126e-05f, 9.133725974e-05f, 9.121979024e-05f, 9.110217298e-05f, 9.098440817e-05f, 9.086649603e-05f,
-9.074843678e-05f, 9.063023062e-05f, 9.051187779e-05f, 9.039337849e-05f, 9.027473294e-05f, 9.015594137e-05f, 9.003700398e-05f, 8.991792100e-05f, 8.979869264e-05f, 8.967931913e-05f,
-8.955980068e-05f, 8.944013752e-05f, 8.932032985e-05f, 8.920037791e-05f, 8.908028190e-05f, 8.896004206e-05f, 8.883965860e-05f, 8.871913174e-05f, 8.859846170e-05f, 8.847764870e-05f,
-8.835669297e-05f, 8.823559472e-05f, 8.811435418e-05f, 8.799297157e-05f, 8.787144711e-05f, 8.774978103e-05f, 8.762797354e-05f, 8.750602487e-05f, 8.738393524e-05f, 8.726170487e-05f,
-8.713933400e-05f, 8.701682283e-05f, 8.689417161e-05f, 8.677138054e-05f, 8.664844985e-05f, 8.652537978e-05f, 8.640217054e-05f, 8.627882235e-05f, 8.615533546e-05f, 8.603171007e-05f,
-8.590794641e-05f, 8.578404472e-05f, 8.566000521e-05f, 8.553582812e-05f, 8.541151366e-05f, 8.528706208e-05f, 8.516247358e-05f, 8.503774841e-05f, 8.491288678e-05f, 8.478788893e-05f,
-8.466275509e-05f, 8.453748547e-05f, 8.441208032e-05f, 8.428653985e-05f, 8.416086430e-05f, 8.403505390e-05f, 8.390910887e-05f, 8.378302945e-05f, 8.365681586e-05f, 8.353046833e-05f,
-8.340398710e-05f, 8.327737239e-05f, 8.315062444e-05f, 8.302374347e-05f, 8.289672972e-05f, 8.276958341e-05f, 8.264230478e-05f, 8.251489407e-05f, 8.238735149e-05f, 8.225967728e-05f,
-8.213187168e-05f, 8.200393492e-05f, 8.187586723e-05f, 8.174766884e-05f, 8.161933999e-05f, 8.149088090e-05f, 8.136229182e-05f, 8.123357297e-05f, 8.110472459e-05f, 8.097574691e-05f,
-8.084664018e-05f, 8.071740461e-05f, 8.058804045e-05f, 8.045854793e-05f, 8.032892729e-05f, 8.019917875e-05f, 8.006930257e-05f, 7.993929896e-05f, 7.980916817e-05f, 7.967891044e-05f,
-7.954852600e-05f, 7.941801508e-05f, 7.928737792e-05f, 7.915661477e-05f, 7.902572585e-05f, 7.889471140e-05f, 7.876357167e-05f, 7.863230688e-05f, 7.850091728e-05f, 7.836940311e-05f,
-7.823776459e-05f, 7.810600198e-05f, 7.797411550e-05f, 7.784210541e-05f, 7.770997193e-05f, 7.757771530e-05f, 7.744533577e-05f, 7.731283357e-05f, 7.718020895e-05f, 7.704746215e-05f,
-7.691459339e-05f, 7.678160293e-05f, 7.664849101e-05f, 7.651525786e-05f, 7.638190373e-05f, 7.624842885e-05f, 7.611483347e-05f, 7.598111784e-05f, 7.584728218e-05f, 7.571332675e-05f,
-7.557925178e-05f, 7.544505752e-05f, 7.531074421e-05f, 7.517631209e-05f, 7.504176140e-05f, 7.490709239e-05f, 7.477230531e-05f, 7.463740038e-05f, 7.450237787e-05f, 7.436723800e-05f,
-7.423198103e-05f, 7.409660720e-05f, 7.396111675e-05f, 7.382550993e-05f, 7.368978698e-05f, 7.355394814e-05f, 7.341799367e-05f, 7.328192380e-05f, 7.314573878e-05f, 7.300943886e-05f,
-7.287302429e-05f, 7.273649530e-05f, 7.259985214e-05f, 7.246309507e-05f, 7.232622432e-05f, 7.218924014e-05f, 7.205214279e-05f, 7.191493250e-05f, 7.177760952e-05f, 7.164017411e-05f,
-7.150262650e-05f, 7.136496695e-05f, 7.122719570e-05f, 7.108931300e-05f, 7.095131910e-05f, 7.081321425e-05f, 7.067499869e-05f, 7.053667268e-05f, 7.039823646e-05f, 7.025969028e-05f,
-7.012103439e-05f, 6.998226904e-05f, 6.984339448e-05f, 6.970441096e-05f, 6.956531873e-05f, 6.942611804e-05f, 6.928680914e-05f, 6.914739227e-05f, 6.900786769e-05f, 6.886823566e-05f,
-6.872849641e-05f, 6.858865021e-05f, 6.844869729e-05f, 6.830863792e-05f, 6.816847235e-05f, 6.802820082e-05f, 6.788782359e-05f, 6.774734091e-05f, 6.760675303e-05f, 6.746606021e-05f,
-6.732526269e-05f, 6.718436073e-05f, 6.704335459e-05f, 6.690224451e-05f, 6.676103074e-05f, 6.661971355e-05f, 6.647829318e-05f, 6.633676988e-05f, 6.619514392e-05f, 6.605341554e-05f,
-6.591158501e-05f, 6.576965256e-05f, 6.562761846e-05f, 6.548548296e-05f, 6.534324632e-05f, 6.520090879e-05f, 6.505847062e-05f, 6.491593208e-05f, 6.477329340e-05f, 6.463055486e-05f,
-6.448771671e-05f, 6.434477920e-05f, 6.420174258e-05f, 6.405860712e-05f, 6.391537307e-05f, 6.377204068e-05f, 6.362861022e-05f, 6.348508193e-05f, 6.334145608e-05f, 6.319773293e-05f,
-6.305391272e-05f, 6.290999571e-05f, 6.276598217e-05f, 6.262187235e-05f, 6.247766651e-05f, 6.233336490e-05f, 6.218896779e-05f, 6.204447543e-05f, 6.189988808e-05f, 6.175520599e-05f,
-6.161042943e-05f, 6.146555866e-05f, 6.132059393e-05f, 6.117553550e-05f, 6.103038363e-05f, 6.088513859e-05f, 6.073980062e-05f, 6.059436999e-05f, 6.044884696e-05f, 6.030323178e-05f,
-6.015752473e-05f, 6.001172605e-05f, 5.986583601e-05f, 5.971985486e-05f, 5.957378288e-05f, 5.942762031e-05f, 5.928136742e-05f, 5.913502447e-05f, 5.898859173e-05f, 5.884206944e-05f,
-5.869545788e-05f, 5.854875730e-05f, 5.840196796e-05f, 5.825509013e-05f, 5.810812407e-05f, 5.796107004e-05f, 5.781392831e-05f, 5.766669912e-05f, 5.751938276e-05f, 5.737197947e-05f,
-5.722448952e-05f, 5.707691317e-05f, 5.692925070e-05f, 5.678150235e-05f, 5.663366839e-05f, 5.648574909e-05f, 5.633774470e-05f, 5.618965550e-05f, 5.604148174e-05f, 5.589322369e-05f,
-5.574488162e-05f, 5.559645577e-05f, 5.544794643e-05f, 5.529935385e-05f, 5.515067830e-05f, 5.500192005e-05f, 5.485307935e-05f, 5.470415646e-05f, 5.455515167e-05f, 5.440606523e-05f,
-5.425689740e-05f, 5.410764845e-05f, 5.395831865e-05f, 5.380890826e-05f, 5.365941754e-05f, 5.350984677e-05f, 5.336019620e-05f, 5.321046610e-05f, 5.306065675e-05f, 5.291076840e-05f,
-5.276080132e-05f, 5.261075577e-05f, 5.246063203e-05f, 5.231043036e-05f, 5.216015103e-05f, 5.200979430e-05f, 5.185936043e-05f, 5.170884971e-05f, 5.155826238e-05f, 5.140759873e-05f,
-5.125685901e-05f, 5.110604350e-05f, 5.095515246e-05f, 5.080418616e-05f, 5.065314486e-05f, 5.050202884e-05f, 5.035083836e-05f, 5.019957370e-05f, 5.004823511e-05f, 4.989682287e-05f,
-4.974533724e-05f, 4.959377849e-05f, 4.944214690e-05f, 4.929044273e-05f, 4.913866624e-05f, 4.898681771e-05f, 4.883489741e-05f, 4.868290561e-05f, 4.853084256e-05f, 4.837870856e-05f,
-4.822650385e-05f, 4.807422872e-05f, 4.792188342e-05f, 4.776946824e-05f, 4.761698344e-05f, 4.746442929e-05f, 4.731180606e-05f, 4.715911401e-05f, 4.700635343e-05f, 4.685352458e-05f,
-4.670062773e-05f, 4.654766315e-05f, 4.639463111e-05f, 4.624153188e-05f, 4.608836574e-05f, 4.593513294e-05f, 4.578183377e-05f, 4.562846850e-05f, 4.547503739e-05f, 4.532154072e-05f,
-4.516797875e-05f, 4.501435176e-05f, 4.486066003e-05f, 4.470690381e-05f, 4.455308339e-05f, 4.439919903e-05f, 4.424525101e-05f, 4.409123960e-05f, 4.393716507e-05f, 4.378302769e-05f,
-4.362882773e-05f, 4.347456547e-05f, 4.332024117e-05f, 4.316585512e-05f, 4.301140758e-05f, 4.285689883e-05f, 4.270232913e-05f, 4.254769876e-05f, 4.239300800e-05f, 4.223825711e-05f,
-4.208344637e-05f, 4.192857606e-05f, 4.177364643e-05f, 4.161865778e-05f, 4.146361036e-05f, 4.130850446e-05f, 4.115334035e-05f, 4.099811830e-05f, 4.084283858e-05f, 4.068750147e-05f,
-4.053210724e-05f, 4.037665617e-05f, 4.022114852e-05f, 4.006558458e-05f, 3.990996461e-05f, 3.975428890e-05f, 3.959855771e-05f, 3.944277132e-05f, 3.928693000e-05f, 3.913103403e-05f,
-3.897508368e-05f, 3.881907923e-05f, 3.866302095e-05f, 3.850690911e-05f, 3.835074400e-05f, 3.819452588e-05f, 3.803825502e-05f, 3.788193172e-05f, 3.772555623e-05f, 3.756912883e-05f,
-3.741264981e-05f, 3.725611943e-05f, 3.709953796e-05f, 3.694290570e-05f, 3.678622290e-05f, 3.662948985e-05f, 3.647270682e-05f, 3.631587408e-05f, 3.615899192e-05f, 3.600206061e-05f,
-3.584508042e-05f, 3.568805162e-05f, 3.553097451e-05f, 3.537384934e-05f, 3.521667640e-05f, 3.505945596e-05f, 3.490218830e-05f, 3.474487370e-05f, 3.458751242e-05f, 3.443010476e-05f,
-3.427265097e-05f, 3.411515135e-05f, 3.395760616e-05f, 3.380001569e-05f, 3.364238020e-05f, 3.348469998e-05f, 3.332697530e-05f, 3.316920644e-05f, 3.301139368e-05f, 3.285353729e-05f,
-3.269563755e-05f, 3.253769473e-05f, 3.237970912e-05f, 3.222168098e-05f, 3.206361061e-05f, 3.190549826e-05f, 3.174734423e-05f, 3.158914879e-05f, 3.143091221e-05f, 3.127263477e-05f,
-3.111431676e-05f, 3.095595844e-05f, 3.079756010e-05f, 3.063912200e-05f, 3.048064444e-05f, 3.032212769e-05f, 3.016357202e-05f, 3.000497771e-05f, 2.984634504e-05f, 2.968767429e-05f,
-2.952896574e-05f, 2.937021966e-05f, 2.921143633e-05f, 2.905261603e-05f, 2.889375904e-05f, 2.873486563e-05f, 2.857593608e-05f, 2.841697068e-05f, 2.825796969e-05f, 2.809893340e-05f,
-2.793986209e-05f, 2.778075603e-05f, 2.762161550e-05f, 2.746244078e-05f, 2.730323215e-05f, 2.714398989e-05f, 2.698471427e-05f, 2.682540558e-05f, 2.666606408e-05f, 2.650669007e-05f,
-2.634728381e-05f, 2.618784560e-05f, 2.602837569e-05f, 2.586887439e-05f, 2.570934195e-05f, 2.554977867e-05f, 2.539018482e-05f, 2.523056067e-05f, 2.507090652e-05f, 2.491122263e-05f,
-2.475150928e-05f, 2.459176676e-05f, 2.443199534e-05f, 2.427219531e-05f, 2.411236693e-05f, 2.395251050e-05f, 2.379262628e-05f, 2.363271456e-05f, 2.347277562e-05f, 2.331280973e-05f,
-2.315281718e-05f, 2.299279824e-05f, 2.283275320e-05f, 2.267268232e-05f, 2.251258590e-05f, 2.235246421e-05f, 2.219231752e-05f, 2.203214613e-05f, 2.187195030e-05f, 2.171173032e-05f,
-2.155148647e-05f, 2.139121902e-05f, 2.123092825e-05f, 2.107061445e-05f, 2.091027789e-05f, 2.074991886e-05f, 2.058953763e-05f, 2.042913448e-05f, 2.026870969e-05f, 2.010826354e-05f,
-1.994779631e-05f, 1.978730827e-05f, 1.962679972e-05f, 1.946627093e-05f, 1.930572217e-05f, 1.914515372e-05f, 1.898456588e-05f, 1.882395891e-05f, 1.866333309e-05f, 1.850268871e-05f,
-1.834202605e-05f, 1.818134537e-05f, 1.802064697e-05f, 1.785993113e-05f, 1.769919811e-05f, 1.753844821e-05f, 1.737768170e-05f, 1.721689885e-05f, 1.705609996e-05f, 1.689528530e-05f,
-1.673445515e-05f, 1.657360979e-05f, 1.641274949e-05f, 1.625187455e-05f, 1.609098523e-05f, 1.593008182e-05f, 1.576916459e-05f, 1.560823383e-05f, 1.544728982e-05f, 1.528633283e-05f,
-1.512536315e-05f, 1.496438105e-05f, 1.480338682e-05f, 1.464238073e-05f, 1.448136307e-05f, 1.432033410e-05f, 1.415929412e-05f, 1.399824340e-05f, 1.383718223e-05f, 1.367611087e-05f,
-1.351502961e-05f, 1.335393874e-05f, 1.319283852e-05f, 1.303172925e-05f, 1.287061119e-05f, 1.270948463e-05f, 1.254834984e-05f, 1.238720712e-05f, 1.222605673e-05f, 1.206489896e-05f,
-1.190373408e-05f, 1.174256237e-05f, 1.158138412e-05f, 1.142019961e-05f, 1.125900911e-05f, 1.109781289e-05f, 1.093661126e-05f, 1.077540447e-05f, 1.061419281e-05f, 1.045297656e-05f,
-1.029175600e-05f, 1.013053141e-05f, 9.969303070e-06f, 9.808071254e-06f, 9.646836243e-06f, 9.485598318e-06f, 9.324357757e-06f, 9.163114840e-06f, 9.001869845e-06f, 8.840623052e-06f,
-8.679374740e-06f, 8.518125189e-06f, 8.356874676e-06f, 8.195623481e-06f, 8.034371884e-06f, 7.873120163e-06f, 7.711868597e-06f, 7.550617465e-06f, 7.389367046e-06f, 7.228117619e-06f,
-7.066869463e-06f, 6.905622857e-06f, 6.744378079e-06f, 6.583135409e-06f, 6.421895124e-06f, 6.260657505e-06f, 6.099422828e-06f, 5.938191375e-06f, 5.776963422e-06f, 5.615739248e-06f,
-5.454519133e-06f, 5.293303354e-06f, 5.132092191e-06f, 4.970885921e-06f, 4.809684823e-06f, 4.648489176e-06f, 4.487299258e-06f, 4.326115348e-06f, 4.164937723e-06f, 4.003766662e-06f,
-3.842602443e-06f, 3.681445346e-06f, 3.520295646e-06f, 3.359153624e-06f, 3.198019557e-06f, 3.036893722e-06f, 2.875776399e-06f, 2.714667865e-06f, 2.553568398e-06f, 2.392478277e-06f,
-2.231397778e-06f, 2.070327180e-06f, 1.909266760e-06f, 1.748216797e-06f, 1.587177568e-06f, 1.426149351e-06f, 1.265132423e-06f, 1.104127062e-06f, 9.431335460e-07f, 7.821521519e-07f,
-6.211831572e-07f, 4.602268395e-07f, 2.992834761e-07f, 1.383533444e-07f, -2.256327837e-08f, -1.834661150e-07f, -3.443548882e-07f, -5.052293210e-07f, -6.660891362e-07f, -8.269340567e-07f,
--9.877638056e-07f, -1.148578106e-06f, -1.309376681e-06f, -1.470159254e-06f, -1.630925547e-06f, -1.791675285e-06f, -1.952408190e-06f, -2.113123986e-06f, -2.273822396e-06f, -2.434503145e-06f,
--2.595165954e-06f, -2.755810548e-06f, -2.916436651e-06f, -3.077043986e-06f, -3.237632277e-06f, -3.398201248e-06f, -3.558750622e-06f, -3.719280124e-06f, -3.879789478e-06f, -4.040278407e-06f,
--4.200746635e-06f, -4.361193888e-06f, -4.521619888e-06f, -4.682024361e-06f, -4.842407031e-06f, -5.002767621e-06f, -5.163105857e-06f, -5.323421463e-06f, -5.483714164e-06f, -5.643983684e-06f,
--5.804229748e-06f, -5.964452081e-06f, -6.124650407e-06f, -6.284824452e-06f, -6.444973940e-06f, -6.605098597e-06f, -6.765198147e-06f, -6.925272316e-06f, -7.085320830e-06f, -7.245343412e-06f,
--7.405339789e-06f, -7.565309687e-06f, -7.725252830e-06f, -7.885168944e-06f, -8.045057755e-06f, -8.204918989e-06f, -8.364752371e-06f, -8.524557627e-06f, -8.684334484e-06f, -8.844082667e-06f,
--9.003801902e-06f, -9.163491915e-06f, -9.323152434e-06f, -9.482783183e-06f, -9.642383890e-06f, -9.801954280e-06f, -9.961494081e-06f, -1.012100302e-05f, -1.028048082e-05f, -1.043992721e-05f,
--1.059934192e-05f, -1.075872467e-05f, -1.091807520e-05f, -1.107739322e-05f, -1.123667847e-05f, -1.139593067e-05f, -1.155514955e-05f, -1.171433484e-05f, -1.187348626e-05f, -1.203260355e-05f,
--1.219168642e-05f, -1.235073462e-05f, -1.250974786e-05f, -1.266872587e-05f, -1.282766838e-05f, -1.298657512e-05f, -1.314544582e-05f, -1.330428021e-05f, -1.346307801e-05f, -1.362183895e-05f,
--1.378056277e-05f, -1.393924918e-05f, -1.409789793e-05f, -1.425650872e-05f, -1.441508131e-05f, -1.457361541e-05f, -1.473211075e-05f, -1.489056707e-05f, -1.504898409e-05f, -1.520736154e-05f,
--1.536569915e-05f, -1.552399665e-05f, -1.568225378e-05f, -1.584047025e-05f, -1.599864580e-05f, -1.615678016e-05f, -1.631487306e-05f, -1.647292423e-05f, -1.663093339e-05f, -1.678890029e-05f,
--1.694682465e-05f, -1.710470619e-05f, -1.726254466e-05f, -1.742033978e-05f, -1.757809128e-05f, -1.773579890e-05f, -1.789346236e-05f, -1.805108139e-05f, -1.820865573e-05f, -1.836618511e-05f,
--1.852366925e-05f, -1.868110790e-05f, -1.883850077e-05f, -1.899584761e-05f, -1.915314815e-05f, -1.931040211e-05f, -1.946760923e-05f, -1.962476924e-05f, -1.978188187e-05f, -1.993894686e-05f,
--2.009596394e-05f, -2.025293283e-05f, -2.040985328e-05f, -2.056672501e-05f, -2.072354776e-05f, -2.088032127e-05f, -2.103704525e-05f, -2.119371945e-05f, -2.135034360e-05f, -2.150691744e-05f,
--2.166344069e-05f, -2.181991309e-05f, -2.197633438e-05f, -2.213270428e-05f, -2.228902254e-05f, -2.244528888e-05f, -2.260150304e-05f, -2.275766475e-05f, -2.291377375e-05f, -2.306982978e-05f,
--2.322583256e-05f, -2.338178183e-05f, -2.353767733e-05f, -2.369351879e-05f, -2.384930595e-05f, -2.400503854e-05f, -2.416071630e-05f, -2.431633896e-05f, -2.447190625e-05f, -2.462741792e-05f,
--2.478287370e-05f, -2.493827332e-05f, -2.509361653e-05f, -2.524890305e-05f, -2.540413262e-05f, -2.555930498e-05f, -2.571441987e-05f, -2.586947703e-05f, -2.602447618e-05f, -2.617941706e-05f,
--2.633429942e-05f, -2.648912299e-05f, -2.664388751e-05f, -2.679859271e-05f, -2.695323833e-05f, -2.710782411e-05f, -2.726234979e-05f, -2.741681511e-05f, -2.757121979e-05f, -2.772556359e-05f,
--2.787984624e-05f, -2.803406747e-05f, -2.818822703e-05f, -2.834232465e-05f, -2.849636008e-05f, -2.865033305e-05f, -2.880424330e-05f, -2.895809057e-05f, -2.911187460e-05f, -2.926559512e-05f,
--2.941925189e-05f, -2.957284463e-05f, -2.972637309e-05f, -2.987983701e-05f, -3.003323612e-05f, -3.018657018e-05f, -3.033983891e-05f, -3.049304205e-05f, -3.064617936e-05f, -3.079925057e-05f,
--3.095225541e-05f, -3.110519364e-05f, -3.125806499e-05f, -3.141086921e-05f, -3.156360603e-05f, -3.171627519e-05f, -3.186887645e-05f, -3.202140953e-05f, -3.217387419e-05f, -3.232627016e-05f,
--3.247859718e-05f, -3.263085501e-05f, -3.278304337e-05f, -3.293516202e-05f, -3.308721070e-05f, -3.323918915e-05f, -3.339109710e-05f, -3.354293432e-05f, -3.369470053e-05f, -3.384639549e-05f,
--3.399801893e-05f, -3.414957061e-05f, -3.430105025e-05f, -3.445245762e-05f, -3.460379245e-05f, -3.475505448e-05f, -3.490624347e-05f, -3.505735915e-05f, -3.520840127e-05f, -3.535936958e-05f,
--3.551026382e-05f, -3.566108374e-05f, -3.581182908e-05f, -3.596249958e-05f, -3.611309500e-05f, -3.626361508e-05f, -3.641405956e-05f, -3.656442820e-05f, -3.671472073e-05f, -3.686493691e-05f,
--3.701507647e-05f, -3.716513918e-05f, -3.731512477e-05f, -3.746503299e-05f, -3.761486359e-05f, -3.776461631e-05f, -3.791429091e-05f, -3.806388713e-05f, -3.821340472e-05f, -3.836284343e-05f,
--3.851220301e-05f, -3.866148320e-05f, -3.881068375e-05f, -3.895980441e-05f, -3.910884493e-05f, -3.925780507e-05f, -3.940668456e-05f, -3.955548316e-05f, -3.970420061e-05f, -3.985283667e-05f,
--4.000139109e-05f, -4.014986362e-05f, -4.029825400e-05f, -4.044656200e-05f, -4.059478734e-05f, -4.074292980e-05f, -4.089098912e-05f, -4.103896504e-05f, -4.118685733e-05f, -4.133466573e-05f,
--4.148238999e-05f, -4.163002987e-05f, -4.177758512e-05f, -4.192505549e-05f, -4.207244073e-05f, -4.221974059e-05f, -4.236695483e-05f, -4.251408319e-05f, -4.266112544e-05f, -4.280808133e-05f,
--4.295495060e-05f, -4.310173301e-05f, -4.324842832e-05f, -4.339503628e-05f, -4.354155663e-05f, -4.368798915e-05f, -4.383433357e-05f, -4.398058966e-05f, -4.412675717e-05f, -4.427283586e-05f,
--4.441882547e-05f, -4.456472576e-05f, -4.471053650e-05f, -4.485625743e-05f, -4.500188831e-05f, -4.514742890e-05f, -4.529287894e-05f, -4.543823821e-05f, -4.558350645e-05f, -4.572868342e-05f,
--4.587376888e-05f, -4.601876258e-05f, -4.616366429e-05f, -4.630847375e-05f, -4.645319073e-05f, -4.659781498e-05f, -4.674234627e-05f, -4.688678434e-05f, -4.703112896e-05f, -4.717537988e-05f,
--4.731953687e-05f, -4.746359968e-05f, -4.760756807e-05f, -4.775144181e-05f, -4.789522064e-05f, -4.803890433e-05f, -4.818249264e-05f, -4.832598533e-05f, -4.846938216e-05f, -4.861268288e-05f,
--4.875588726e-05f, -4.889899507e-05f, -4.904200605e-05f, -4.918491997e-05f, -4.932773660e-05f, -4.947045568e-05f, -4.961307700e-05f, -4.975560029e-05f, -4.989802534e-05f, -5.004035190e-05f,
--5.018257972e-05f, -5.032470859e-05f, -5.046673825e-05f, -5.060866847e-05f, -5.075049901e-05f, -5.089222964e-05f, -5.103386012e-05f, -5.117539021e-05f, -5.131681967e-05f, -5.145814828e-05f,
--5.159937579e-05f, -5.174050198e-05f, -5.188152659e-05f, -5.202244940e-05f, -5.216327018e-05f, -5.230398869e-05f, -5.244460469e-05f, -5.258511794e-05f, -5.272552823e-05f, -5.286583530e-05f,
--5.300603893e-05f, -5.314613888e-05f, -5.328613493e-05f, -5.342602683e-05f, -5.356581435e-05f, -5.370549726e-05f, -5.384507533e-05f, -5.398454833e-05f, -5.412391602e-05f, -5.426317816e-05f,
--5.440233454e-05f, -5.454138492e-05f, -5.468032906e-05f, -5.481916673e-05f, -5.495789771e-05f, -5.509652176e-05f, -5.523503866e-05f, -5.537344816e-05f, -5.551175005e-05f, -5.564994408e-05f,
--5.578803004e-05f, -5.592600769e-05f, -5.606387680e-05f, -5.620163714e-05f, -5.633928849e-05f, -5.647683061e-05f, -5.661426328e-05f, -5.675158627e-05f, -5.688879935e-05f, -5.702590229e-05f,
--5.716289486e-05f, -5.729977684e-05f, -5.743654800e-05f, -5.757320811e-05f, -5.770975695e-05f, -5.784619428e-05f, -5.798251989e-05f, -5.811873354e-05f, -5.825483501e-05f, -5.839082408e-05f,
--5.852670051e-05f, -5.866246409e-05f, -5.879811458e-05f, -5.893365177e-05f, -5.906907542e-05f, -5.920438532e-05f, -5.933958124e-05f, -5.947466295e-05f, -5.960963023e-05f, -5.974448286e-05f,
--5.987922061e-05f, -6.001384327e-05f, -6.014835060e-05f, -6.028274238e-05f, -6.041701840e-05f, -6.055117843e-05f, -6.068522224e-05f, -6.081914962e-05f, -6.095296034e-05f, -6.108665418e-05f,
--6.122023093e-05f, -6.135369036e-05f, -6.148703224e-05f, -6.162025636e-05f, -6.175336250e-05f, -6.188635044e-05f, -6.201921996e-05f, -6.215197083e-05f, -6.228460285e-05f, -6.241711578e-05f,
--6.254950941e-05f, -6.268178352e-05f, -6.281393790e-05f, -6.294597232e-05f, -6.307788657e-05f, -6.320968042e-05f, -6.334135367e-05f, -6.347290609e-05f, -6.360433747e-05f, -6.373564758e-05f,
--6.386683622e-05f, -6.399790316e-05f, -6.412884819e-05f, -6.425967110e-05f, -6.439037166e-05f, -6.452094966e-05f, -6.465140489e-05f, -6.478173713e-05f, -6.491194617e-05f, -6.504203179e-05f,
--6.517199378e-05f, -6.530183192e-05f, -6.543154599e-05f, -6.556113580e-05f, -6.569060111e-05f, -6.581994172e-05f, -6.594915742e-05f, -6.607824799e-05f, -6.620721322e-05f, -6.633605289e-05f,
--6.646476680e-05f, -6.659335474e-05f, -6.672181648e-05f, -6.685015183e-05f, -6.697836056e-05f, -6.710644247e-05f, -6.723439735e-05f, -6.736222499e-05f, -6.748992517e-05f, -6.761749769e-05f,
--6.774494233e-05f, -6.787225889e-05f, -6.799944716e-05f, -6.812650693e-05f, -6.825343799e-05f, -6.838024013e-05f, -6.850691314e-05f, -6.863345682e-05f, -6.875987096e-05f, -6.888615534e-05f,
--6.901230977e-05f, -6.913833403e-05f, -6.926422792e-05f, -6.938999123e-05f, -6.951562376e-05f, -6.964112530e-05f, -6.976649564e-05f, -6.989173457e-05f, -7.001684190e-05f, -7.014181742e-05f,
--7.026666091e-05f, -7.039137219e-05f, -7.051595104e-05f, -7.064039725e-05f, -7.076471063e-05f, -7.088889098e-05f, -7.101293808e-05f, -7.113685173e-05f, -7.126063174e-05f, -7.138427789e-05f,
--7.150778999e-05f, -7.163116784e-05f, -7.175441122e-05f, -7.187751995e-05f, -7.200049382e-05f, -7.212333262e-05f, -7.224603617e-05f, -7.236860424e-05f, -7.249103666e-05f, -7.261333321e-05f,
--7.273549369e-05f, -7.285751792e-05f, -7.297940567e-05f, -7.310115677e-05f, -7.322277100e-05f, -7.334424818e-05f, -7.346558809e-05f, -7.358679055e-05f, -7.370785536e-05f, -7.382878231e-05f,
--7.394957121e-05f, -7.407022187e-05f, -7.419073408e-05f, -7.431110765e-05f, -7.443134238e-05f, -7.455143808e-05f, -7.467139456e-05f, -7.479121161e-05f, -7.491088904e-05f, -7.503042665e-05f,
--7.514982426e-05f, -7.526908166e-05f, -7.538819866e-05f, -7.550717507e-05f, -7.562601069e-05f, -7.574470534e-05f, -7.586325881e-05f, -7.598167092e-05f, -7.609994146e-05f, -7.621807026e-05f,
--7.633605711e-05f, -7.645390183e-05f, -7.657160422e-05f, -7.668916409e-05f, -7.680658125e-05f, -7.692385551e-05f, -7.704098668e-05f, -7.715797457e-05f, -7.727481899e-05f, -7.739151974e-05f,
--7.750807665e-05f, -7.762448951e-05f, -7.774075814e-05f, -7.785688236e-05f, -7.797286197e-05f, -7.808869678e-05f, -7.820438661e-05f, -7.831993127e-05f, -7.843533057e-05f, -7.855058433e-05f,
--7.866569236e-05f, -7.878065446e-05f, -7.889547046e-05f, -7.901014017e-05f, -7.912466340e-05f, -7.923903997e-05f, -7.935326969e-05f, -7.946735238e-05f, -7.958128784e-05f, -7.969507591e-05f,
--7.980871639e-05f, -7.992220910e-05f, -8.003555386e-05f, -8.014875047e-05f, -8.026179877e-05f, -8.037469856e-05f, -8.048744967e-05f, -8.060005191e-05f, -8.071250509e-05f, -8.082480905e-05f,
--8.093696359e-05f, -8.104896853e-05f, -8.116082370e-05f, -8.127252892e-05f, -8.138408399e-05f, -8.149548875e-05f, -8.160674301e-05f, -8.171784660e-05f, -8.182879933e-05f, -8.193960102e-05f,
--8.205025150e-05f, -8.216075059e-05f, -8.227109810e-05f, -8.238129387e-05f, -8.249133771e-05f, -8.260122945e-05f, -8.271096891e-05f, -8.282055592e-05f, -8.292999028e-05f, -8.303927184e-05f,
--8.314840041e-05f, -8.325737583e-05f, -8.336619790e-05f, -8.347486646e-05f, -8.358338134e-05f, -8.369174235e-05f, -8.379994933e-05f, -8.390800210e-05f, -8.401590048e-05f, -8.412364431e-05f,
--8.423123340e-05f, -8.433866760e-05f, -8.444594672e-05f, -8.455307059e-05f, -8.466003904e-05f, -8.476685190e-05f, -8.487350900e-05f, -8.498001016e-05f, -8.508635522e-05f, -8.519254400e-05f,
--8.529857634e-05f, -8.540445206e-05f, -8.551017099e-05f, -8.561573297e-05f, -8.572113783e-05f, -8.582638539e-05f, -8.593147549e-05f, -8.603640796e-05f, -8.614118263e-05f, -8.624579934e-05f,
--8.635025791e-05f, -8.645455818e-05f, -8.655869999e-05f, -8.666268316e-05f, -8.676650753e-05f, -8.687017293e-05f, -8.697367921e-05f, -8.707702618e-05f, -8.718021369e-05f, -8.728324158e-05f,
--8.738610967e-05f, -8.748881781e-05f, -8.759136583e-05f, -8.769375356e-05f, -8.779598085e-05f, -8.789804753e-05f, -8.799995343e-05f, -8.810169840e-05f, -8.820328227e-05f, -8.830470488e-05f,
--8.840596607e-05f, -8.850706568e-05f, -8.860800354e-05f, -8.870877950e-05f, -8.880939339e-05f, -8.890984506e-05f, -8.901013434e-05f, -8.911026108e-05f, -8.921022511e-05f, -8.931002629e-05f,
--8.940966444e-05f, -8.950913941e-05f, -8.960845104e-05f, -8.970759918e-05f, -8.980658366e-05f, -8.990540433e-05f, -9.000406104e-05f, -9.010255362e-05f, -9.020088192e-05f, -9.029904579e-05f,
--9.039704506e-05f, -9.049487958e-05f, -9.059254921e-05f, -9.069005377e-05f, -9.078739313e-05f, -9.088456711e-05f, -9.098157558e-05f, -9.107841837e-05f, -9.117509534e-05f, -9.127160632e-05f,
--9.136795118e-05f, -9.146412974e-05f, -9.156014187e-05f, -9.165598741e-05f, -9.175166621e-05f, -9.184717812e-05f, -9.194252299e-05f, -9.203770066e-05f, -9.213271098e-05f, -9.222755382e-05f,
--9.232222901e-05f, -9.241673641e-05f, -9.251107586e-05f, -9.260524722e-05f, -9.269925035e-05f, -9.279308509e-05f, -9.288675129e-05f, -9.298024880e-05f, -9.307357749e-05f, -9.316673720e-05f,
--9.325972779e-05f, -9.335254911e-05f, -9.344520101e-05f, -9.353768334e-05f, -9.362999597e-05f, -9.372213875e-05f, -9.381411153e-05f, -9.390591417e-05f, -9.399754652e-05f, -9.408900844e-05f,
--9.418029978e-05f, -9.427142041e-05f, -9.436237018e-05f, -9.445314895e-05f, -9.454375657e-05f, -9.463419290e-05f, -9.472445781e-05f, -9.481455114e-05f, -9.490447276e-05f, -9.499422253e-05f,
--9.508380031e-05f, -9.517320595e-05f, -9.526243932e-05f, -9.535150028e-05f, -9.544038869e-05f, -9.552910440e-05f, -9.561764729e-05f, -9.570601720e-05f, -9.579421401e-05f, -9.588223758e-05f,
--9.597008776e-05f, -9.605776443e-05f, -9.614526744e-05f, -9.623259666e-05f, -9.631975196e-05f, -9.640673318e-05f, -9.649354021e-05f, -9.658017291e-05f, -9.666663113e-05f, -9.675291476e-05f,
--9.683902364e-05f, -9.692495765e-05f, -9.701071666e-05f, -9.709630052e-05f, -9.718170912e-05f, -9.726694231e-05f, -9.735199996e-05f, -9.743688194e-05f, -9.752158812e-05f, -9.760611837e-05f,
--9.769047255e-05f, -9.777465054e-05f, -9.785865221e-05f, -9.794247742e-05f, -9.802612604e-05f, -9.810959795e-05f, -9.819289302e-05f, -9.827601111e-05f, -9.835895210e-05f, -9.844171586e-05f,
--9.852430226e-05f, -9.860671118e-05f, -9.868894248e-05f, -9.877099605e-05f, -9.885287175e-05f, -9.893456945e-05f, -9.901608904e-05f, -9.909743038e-05f, -9.917859335e-05f, -9.925957783e-05f,
--9.934038368e-05f, -9.942101080e-05f, -9.950145904e-05f, -9.958172829e-05f, -9.966181842e-05f, -9.974172932e-05f, -9.982146085e-05f, -9.990101290e-05f, -9.998038534e-05f, -1.000595781e-04f,
--1.001385909e-04f, -1.002174238e-04f, -1.002960766e-04f, -1.003745492e-04f, -1.004528414e-04f, -1.005309532e-04f, -1.006088845e-04f, -1.006866350e-04f, -1.007642047e-04f, -1.008415935e-04f,
--1.009188013e-04f, -1.009958278e-04f, -1.010726731e-04f, -1.011493370e-04f, -1.012258194e-04f, -1.013021201e-04f, -1.013782391e-04f, -1.014541762e-04f, -1.015299314e-04f, -1.016055044e-04f,
--1.016808952e-04f, -1.017561037e-04f, -1.018311298e-04f, -1.019059733e-04f, -1.019806341e-04f, -1.020551121e-04f, -1.021294073e-04f, -1.022035194e-04f, -1.022774484e-04f, -1.023511942e-04f,
--1.024247566e-04f, -1.024981356e-04f, -1.025713309e-04f, -1.026443427e-04f, -1.027171706e-04f, -1.027898146e-04f, -1.028622746e-04f, -1.029345505e-04f, -1.030066421e-04f, -1.030785495e-04f,
--1.031502723e-04f, -1.032218106e-04f, -1.032931643e-04f, -1.033643332e-04f, -1.034353172e-04f, -1.035061162e-04f, -1.035767301e-04f, -1.036471588e-04f, -1.037174022e-04f, -1.037874603e-04f,
--1.038573327e-04f, -1.039270196e-04f, -1.039965208e-04f, -1.040658361e-04f, -1.041349655e-04f, -1.042039088e-04f, -1.042726660e-04f, -1.043412370e-04f, -1.044096216e-04f, -1.044778198e-04f,
--1.045458314e-04f, -1.046136564e-04f, -1.046812946e-04f, -1.047487459e-04f, -1.048160104e-04f, -1.048830877e-04f, -1.049499779e-04f, -1.050166808e-04f, -1.050831964e-04f, -1.051495246e-04f,
--1.052156651e-04f, -1.052816181e-04f, -1.053473833e-04f, -1.054129606e-04f, -1.054783500e-04f, -1.055435514e-04f, -1.056085646e-04f, -1.056733896e-04f, -1.057380262e-04f, -1.058024745e-04f,
--1.058667342e-04f, -1.059308053e-04f, -1.059946877e-04f, -1.060583813e-04f, -1.061218860e-04f, -1.061852017e-04f, -1.062483283e-04f, -1.063112657e-04f, -1.063740139e-04f, -1.064365727e-04f,
--1.064989420e-04f, -1.065611218e-04f, -1.066231120e-04f, -1.066849124e-04f, -1.067465231e-04f, -1.068079438e-04f, -1.068691745e-04f, -1.069302151e-04f, -1.069910655e-04f, -1.070517257e-04f,
--1.071121955e-04f, -1.071724749e-04f, -1.072325638e-04f, -1.072924620e-04f, -1.073521695e-04f, -1.074116862e-04f, -1.074710121e-04f, -1.075301469e-04f, -1.075890908e-04f, -1.076478435e-04f,
--1.077064049e-04f, -1.077647751e-04f, -1.078229538e-04f, -1.078809411e-04f, -1.079387369e-04f, -1.079963409e-04f, -1.080537533e-04f, -1.081109738e-04f, -1.081680025e-04f, -1.082248392e-04f,
--1.082814838e-04f, -1.083379363e-04f, -1.083941965e-04f, -1.084502645e-04f, -1.085061401e-04f, -1.085618232e-04f, -1.086173138e-04f, -1.086726117e-04f, -1.087277170e-04f, -1.087826295e-04f,
--1.088373491e-04f, -1.088918758e-04f, -1.089462095e-04f, -1.090003501e-04f, -1.090542975e-04f, -1.091080517e-04f, -1.091616125e-04f, -1.092149800e-04f, -1.092681540e-04f, -1.093211344e-04f,
--1.093739213e-04f, -1.094265144e-04f, -1.094789138e-04f, -1.095311193e-04f, -1.095831309e-04f, -1.096349485e-04f, -1.096865720e-04f, -1.097380014e-04f, -1.097892366e-04f, -1.098402775e-04f,
--1.098911240e-04f, -1.099417762e-04f, -1.099922338e-04f, -1.100424968e-04f, -1.100925653e-04f, -1.101424390e-04f, -1.101921179e-04f, -1.102416020e-04f, -1.102908912e-04f, -1.103399854e-04f,
--1.103888846e-04f, -1.104375886e-04f, -1.104860975e-04f, -1.105344111e-04f, -1.105825293e-04f, -1.106304522e-04f, -1.106781797e-04f, -1.107257116e-04f, -1.107730479e-04f, -1.108201886e-04f,
--1.108671336e-04f, -1.109138827e-04f, -1.109604361e-04f, -1.110067935e-04f, -1.110529550e-04f, -1.110989205e-04f, -1.111446898e-04f, -1.111902630e-04f, -1.112356400e-04f, -1.112808206e-04f,
--1.113258050e-04f, -1.113705929e-04f, -1.114151844e-04f, -1.114595794e-04f, -1.115037777e-04f, -1.115477795e-04f, -1.115915845e-04f, -1.116351928e-04f, -1.116786042e-04f, -1.117218188e-04f,
--1.117648364e-04f, -1.118076570e-04f, -1.118502806e-04f, -1.118927071e-04f, -1.119349364e-04f, -1.119769685e-04f, -1.120188033e-04f, -1.120604408e-04f, -1.121018809e-04f, -1.121431236e-04f,
--1.121841687e-04f, -1.122250163e-04f, -1.122656663e-04f, -1.123061187e-04f, -1.123463733e-04f, -1.123864302e-04f, -1.124262893e-04f, -1.124659505e-04f, -1.125054138e-04f, -1.125446791e-04f,
--1.125837464e-04f, -1.126226156e-04f, -1.126612867e-04f, -1.126997596e-04f, -1.127380343e-04f, -1.127761108e-04f, -1.128139889e-04f, -1.128516686e-04f, -1.128891500e-04f, -1.129264328e-04f,
--1.129635172e-04f, -1.130004030e-04f, -1.130370902e-04f, -1.130735788e-04f, -1.131098686e-04f, -1.131459597e-04f, -1.131818521e-04f, -1.132175456e-04f, -1.132530402e-04f, -1.132883359e-04f,
--1.133234326e-04f, -1.133583303e-04f, -1.133930290e-04f, -1.134275285e-04f, -1.134618290e-04f, -1.134959302e-04f, -1.135298323e-04f, -1.135635350e-04f, -1.135970385e-04f, -1.136303426e-04f,
--1.136634473e-04f, -1.136963526e-04f, -1.137290585e-04f, -1.137615648e-04f, -1.137938716e-04f, -1.138259788e-04f, -1.138578864e-04f, -1.138895943e-04f, -1.139211025e-04f, -1.139524110e-04f,
--1.139835197e-04f, -1.140144286e-04f, -1.140451377e-04f, -1.140756469e-04f, -1.141059562e-04f, -1.141360655e-04f, -1.141659748e-04f, -1.141956841e-04f, -1.142251934e-04f, -1.142545025e-04f,
--1.142836116e-04f, -1.143125205e-04f, -1.143412292e-04f, -1.143697376e-04f, -1.143980459e-04f, -1.144261538e-04f, -1.144540614e-04f, -1.144817687e-04f, -1.145092756e-04f, -1.145365821e-04f,
--1.145636882e-04f, -1.145905937e-04f, -1.146172988e-04f, -1.146438034e-04f, -1.146701074e-04f, -1.146962108e-04f, -1.147221136e-04f, -1.147478158e-04f, -1.147733173e-04f, -1.147986181e-04f,
--1.148237182e-04f, -1.148486176e-04f, -1.148733161e-04f, -1.148978139e-04f, -1.149221109e-04f, -1.149462070e-04f, -1.149701022e-04f, -1.149937966e-04f, -1.150172900e-04f, -1.150405825e-04f,
--1.150636740e-04f, -1.150865646e-04f, -1.151092541e-04f, -1.151317426e-04f, -1.151540300e-04f, -1.151761164e-04f, -1.151980017e-04f, -1.152196858e-04f, -1.152411688e-04f, -1.152624507e-04f,
--1.152835314e-04f, -1.153044109e-04f, -1.153250891e-04f, -1.153455662e-04f, -1.153658420e-04f, -1.153859165e-04f, -1.154057897e-04f, -1.154254617e-04f, -1.154449323e-04f, -1.154642016e-04f,
--1.154832695e-04f, -1.155021360e-04f, -1.155208012e-04f, -1.155392650e-04f, -1.155575274e-04f, -1.155755883e-04f, -1.155934478e-04f, -1.156111058e-04f, -1.156285624e-04f, -1.156458175e-04f,
--1.156628711e-04f, -1.156797232e-04f, -1.156963738e-04f, -1.157128229e-04f, -1.157290704e-04f, -1.157451163e-04f, -1.157609607e-04f, -1.157766036e-04f, -1.157920448e-04f, -1.158072845e-04f,
--1.158223225e-04f, -1.158371590e-04f, -1.158517938e-04f, -1.158662271e-04f, -1.158804586e-04f, -1.158944886e-04f, -1.159083169e-04f, -1.159219435e-04f, -1.159353685e-04f, -1.159485918e-04f,
--1.159616135e-04f, -1.159744335e-04f, -1.159870518e-04f, -1.159994684e-04f, -1.160116833e-04f, -1.160236966e-04f, -1.160355081e-04f, -1.160471179e-04f, -1.160585261e-04f, -1.160697325e-04f,
--1.160807372e-04f, -1.160915403e-04f, -1.161021416e-04f, -1.161125412e-04f, -1.161227391e-04f, -1.161327353e-04f, -1.161425297e-04f, -1.161521225e-04f, -1.161615135e-04f, -1.161707029e-04f,
--1.161796905e-04f, -1.161884764e-04f, -1.161970607e-04f, -1.162054432e-04f, -1.162136240e-04f, -1.162216032e-04f, -1.162293806e-04f, -1.162369563e-04f, -1.162443304e-04f, -1.162515028e-04f,
--1.162584735e-04f, -1.162652426e-04f, -1.162718100e-04f, -1.162781757e-04f, -1.162843398e-04f, -1.162903022e-04f, -1.162960630e-04f, -1.163016222e-04f, -1.163069798e-04f, -1.163121357e-04f,
--1.163170900e-04f, -1.163218428e-04f, -1.163263939e-04f, -1.163307435e-04f, -1.163348915e-04f, -1.163388380e-04f, -1.163425829e-04f, -1.163461262e-04f, -1.163494681e-04f, -1.163526084e-04f,
--1.163555473e-04f, -1.163582846e-04f, -1.163608205e-04f, -1.163631549e-04f, -1.163652878e-04f, -1.163672193e-04f, -1.163689494e-04f, -1.163704781e-04f, -1.163718054e-04f, -1.163729313e-04f,
--1.163738558e-04f, -1.163745790e-04f, -1.163751009e-04f, -1.163754215e-04f, -1.163755407e-04f, -1.163754587e-04f, -1.163751754e-04f, -1.163746909e-04f, -1.163740051e-04f, -1.163731181e-04f,
--1.163720300e-04f, -1.163707407e-04f, -1.163692502e-04f, -1.163675586e-04f, -1.163656658e-04f, -1.163635720e-04f, -1.163612771e-04f, -1.163587812e-04f, -1.163560842e-04f, -1.163531863e-04f,
--1.163500873e-04f, -1.163467874e-04f, -1.163432866e-04f, -1.163395848e-04f, -1.163356821e-04f, -1.163315786e-04f, -1.163272743e-04f, -1.163227691e-04f, -1.163180631e-04f, -1.163131564e-04f,
--1.163080489e-04f, -1.163027407e-04f, -1.162972319e-04f, -1.162915223e-04f, -1.162856122e-04f, -1.162795014e-04f, -1.162731900e-04f, -1.162666781e-04f, -1.162599657e-04f, -1.162530528e-04f,
--1.162459394e-04f, -1.162386256e-04f, -1.162311114e-04f, -1.162233968e-04f, -1.162154818e-04f, -1.162073666e-04f, -1.161990510e-04f, -1.161905353e-04f, -1.161818193e-04f, -1.161729031e-04f,
--1.161637867e-04f, -1.161544703e-04f, -1.161449537e-04f, -1.161352371e-04f, -1.161253205e-04f, -1.161152039e-04f, -1.161048874e-04f, -1.160943709e-04f, -1.160836546e-04f, -1.160727384e-04f,
--1.160616224e-04f, -1.160503066e-04f, -1.160387911e-04f, -1.160270759e-04f, -1.160151611e-04f, -1.160030466e-04f, -1.159907326e-04f, -1.159782189e-04f, -1.159655058e-04f, -1.159525933e-04f,
--1.159394813e-04f, -1.159261699e-04f, -1.159126591e-04f, -1.158989491e-04f, -1.158850398e-04f, -1.158709312e-04f, -1.158566235e-04f, -1.158421167e-04f, -1.158274107e-04f, -1.158125057e-04f,
--1.157974016e-04f, -1.157820986e-04f, -1.157665967e-04f, -1.157508959e-04f, -1.157349963e-04f, -1.157188978e-04f, -1.157026006e-04f, -1.156861047e-04f, -1.156694102e-04f, -1.156525170e-04f,
--1.156354253e-04f, -1.156181350e-04f, -1.156006463e-04f, -1.155829592e-04f, -1.155650737e-04f, -1.155469898e-04f, -1.155287077e-04f, -1.155102273e-04f, -1.154915488e-04f, -1.154726721e-04f,
--1.154535973e-04f, -1.154343245e-04f, -1.154148538e-04f, -1.153951850e-04f, -1.153753184e-04f, -1.153552540e-04f, -1.153349918e-04f, -1.153145319e-04f, -1.152938743e-04f, -1.152730191e-04f,
--1.152519663e-04f, -1.152307160e-04f, -1.152092682e-04f, -1.151876231e-04f, -1.151657805e-04f, -1.151437407e-04f, -1.151215036e-04f, -1.150990694e-04f, -1.150764380e-04f, -1.150536096e-04f,
--1.150305841e-04f, -1.150073617e-04f, -1.149839423e-04f, -1.149603261e-04f, -1.149365132e-04f, -1.149125035e-04f, -1.148882971e-04f, -1.148638941e-04f, -1.148392946e-04f, -1.148144985e-04f,
--1.147895060e-04f, -1.147643172e-04f, -1.147389320e-04f, -1.147133506e-04f, -1.146875730e-04f, -1.146615993e-04f, -1.146354294e-04f, -1.146090636e-04f, -1.145825019e-04f, -1.145557442e-04f,
--1.145287908e-04f, -1.145016415e-04f, -1.144742966e-04f, -1.144467561e-04f, -1.144190200e-04f, -1.143910884e-04f, -1.143629614e-04f, -1.143346390e-04f, -1.143061213e-04f, -1.142774084e-04f,
--1.142485003e-04f, -1.142193971e-04f, -1.141900988e-04f, -1.141606056e-04f, -1.141309175e-04f, -1.141010346e-04f, -1.140709569e-04f, -1.140406845e-04f, -1.140102175e-04f, -1.139795559e-04f,
--1.139486999e-04f, -1.139176494e-04f, -1.138864046e-04f, -1.138549655e-04f, -1.138233322e-04f, -1.137915048e-04f, -1.137594833e-04f, -1.137272678e-04f, -1.136948585e-04f, -1.136622552e-04f,
--1.136294582e-04f, -1.135964675e-04f, -1.135632832e-04f, -1.135299054e-04f, -1.134963340e-04f, -1.134625693e-04f, -1.134286112e-04f, -1.133944599e-04f, -1.133601155e-04f, -1.133255779e-04f,
--1.132908473e-04f, -1.132559238e-04f, -1.132208074e-04f, -1.131854982e-04f, -1.131499963e-04f, -1.131143017e-04f, -1.130784146e-04f, -1.130423351e-04f, -1.130060631e-04f, -1.129695988e-04f,
--1.129329423e-04f, -1.128960936e-04f, -1.128590529e-04f, -1.128218201e-04f, -1.127843955e-04f, -1.127467789e-04f, -1.127089707e-04f, -1.126709708e-04f, -1.126327792e-04f, -1.125943962e-04f,
--1.125558218e-04f, -1.125170560e-04f, -1.124780989e-04f, -1.124389507e-04f, -1.123996114e-04f, -1.123600811e-04f, -1.123203599e-04f, -1.122804478e-04f, -1.122403450e-04f, -1.122000515e-04f,
--1.121595675e-04f, -1.121188929e-04f, -1.120780280e-04f, -1.120369727e-04f, -1.119957272e-04f, -1.119542916e-04f, -1.119126659e-04f, -1.118708503e-04f, -1.118288447e-04f, -1.117866494e-04f,
--1.117442644e-04f, -1.117016898e-04f, -1.116589256e-04f, -1.116159721e-04f, -1.115728292e-04f, -1.115294970e-04f, -1.114859757e-04f, -1.114422654e-04f, -1.113983660e-04f, -1.113542778e-04f,
--1.113100008e-04f, -1.112655351e-04f, -1.112208808e-04f, -1.111760380e-04f, -1.111310068e-04f, -1.110857872e-04f, -1.110403795e-04f, -1.109947836e-04f, -1.109489997e-04f, -1.109030278e-04f,
--1.108568681e-04f, -1.108105206e-04f, -1.107639855e-04f, -1.107172629e-04f, -1.106703528e-04f, -1.106232553e-04f, -1.105759705e-04f, -1.105284986e-04f, -1.104808397e-04f, -1.104329937e-04f,
--1.103849609e-04f, -1.103367413e-04f, -1.102883351e-04f, -1.102397423e-04f, -1.101909630e-04f, -1.101419973e-04f, -1.100928454e-04f, -1.100435073e-04f, -1.099939832e-04f, -1.099442730e-04f,
--1.098943771e-04f, -1.098442953e-04f, -1.097940279e-04f, -1.097435750e-04f, -1.096929365e-04f, -1.096421128e-04f, -1.095911038e-04f, -1.095399096e-04f, -1.094885305e-04f, -1.094369664e-04f,
--1.093852174e-04f, -1.093332838e-04f, -1.092811655e-04f, -1.092288628e-04f, -1.091763756e-04f, -1.091237041e-04f, -1.090708485e-04f, -1.090178087e-04f, -1.089645850e-04f, -1.089111774e-04f,
--1.088575861e-04f, -1.088038111e-04f, -1.087498526e-04f, -1.086957107e-04f, -1.086413854e-04f, -1.085868769e-04f, -1.085321854e-04f, -1.084773108e-04f, -1.084222534e-04f, -1.083670131e-04f,
--1.083115903e-04f, -1.082559849e-04f, -1.082001970e-04f, -1.081442268e-04f, -1.080880745e-04f, -1.080317400e-04f, -1.079752235e-04f, -1.079185252e-04f, -1.078616451e-04f, -1.078045834e-04f,
--1.077473401e-04f, -1.076899155e-04f, -1.076323095e-04f, -1.075745224e-04f, -1.075165542e-04f, -1.074584050e-04f, -1.074000750e-04f, -1.073415643e-04f, -1.072828730e-04f, -1.072240012e-04f,
--1.071649491e-04f, -1.071057166e-04f, -1.070463041e-04f, -1.069867116e-04f, -1.069269391e-04f, -1.068669869e-04f, -1.068068550e-04f, -1.067465436e-04f, -1.066860528e-04f, -1.066253827e-04f,
--1.065645334e-04f, -1.065035050e-04f, -1.064422977e-04f, -1.063809116e-04f, -1.063193468e-04f, -1.062576035e-04f, -1.061956816e-04f, -1.061335815e-04f, -1.060713032e-04f, -1.060088468e-04f,
--1.059462124e-04f, -1.058834002e-04f, -1.058204103e-04f, -1.057572428e-04f, -1.056938979e-04f, -1.056303756e-04f, -1.055666761e-04f, -1.055027995e-04f, -1.054387460e-04f, -1.053745157e-04f,
--1.053101086e-04f, -1.052455249e-04f, -1.051807649e-04f, -1.051158284e-04f, -1.050507158e-04f, -1.049854272e-04f, -1.049199625e-04f, -1.048543221e-04f, -1.047885060e-04f, -1.047225143e-04f,
--1.046563472e-04f, -1.045900048e-04f, -1.045234873e-04f, -1.044567947e-04f, -1.043899272e-04f, -1.043228850e-04f, -1.042556680e-04f, -1.041882766e-04f, -1.041207108e-04f, -1.040529708e-04f,
--1.039850566e-04f, -1.039169685e-04f, -1.038487065e-04f, -1.037802708e-04f, -1.037116615e-04f, -1.036428787e-04f, -1.035739227e-04f, -1.035047934e-04f, -1.034354912e-04f, -1.033660160e-04f,
--1.032963680e-04f, -1.032265474e-04f, -1.031565542e-04f, -1.030863887e-04f, -1.030160510e-04f, -1.029455412e-04f, -1.028748594e-04f, -1.028040058e-04f, -1.027329805e-04f, -1.026617836e-04f,
--1.025904154e-04f, -1.025188758e-04f, -1.024471652e-04f, -1.023752835e-04f, -1.023032310e-04f, -1.022310078e-04f, -1.021586140e-04f, -1.020860497e-04f, -1.020133152e-04f, -1.019404105e-04f,
--1.018673358e-04f, -1.017940912e-04f, -1.017206769e-04f, -1.016470930e-04f, -1.015733396e-04f, -1.014994170e-04f, -1.014253252e-04f, -1.013510643e-04f, -1.012766346e-04f, -1.012020361e-04f,
--1.011272691e-04f, -1.010523336e-04f, -1.009772298e-04f, -1.009019578e-04f, -1.008265178e-04f, -1.007509100e-04f, -1.006751344e-04f, -1.005991913e-04f, -1.005230807e-04f, -1.004468028e-04f,
--1.003703578e-04f, -1.002937458e-04f, -1.002169670e-04f, -1.001400215e-04f, -1.000629094e-04f, -9.998563086e-05f, -9.990818611e-05f, -9.983057525e-05f, -9.975279843e-05f, -9.967485580e-05f,
--9.959674751e-05f, -9.951847370e-05f, -9.944003454e-05f, -9.936143017e-05f, -9.928266073e-05f, -9.920372638e-05f, -9.912462728e-05f, -9.904536356e-05f, -9.896593539e-05f, -9.888634291e-05f,
--9.880658627e-05f, -9.872666564e-05f, -9.864658115e-05f, -9.856633297e-05f, -9.848592124e-05f, -9.840534613e-05f, -9.832460777e-05f, -9.824370634e-05f, -9.816264197e-05f, -9.808141483e-05f,
--9.800002507e-05f, -9.791847284e-05f, -9.783675830e-05f, -9.775488161e-05f, -9.767284291e-05f, -9.759064238e-05f, -9.750828015e-05f, -9.742575640e-05f, -9.734307127e-05f, -9.726022492e-05f,
--9.717721752e-05f, -9.709404921e-05f, -9.701072015e-05f, -9.692723051e-05f, -9.684358045e-05f, -9.675977011e-05f, -9.667579966e-05f, -9.659166926e-05f, -9.650737906e-05f, -9.642292924e-05f,
--9.633831994e-05f, -9.625355132e-05f, -9.616862356e-05f, -9.608353680e-05f, -9.599829121e-05f, -9.591288696e-05f, -9.582732419e-05f, -9.574160308e-05f, -9.565572378e-05f, -9.556968646e-05f,
--9.548349128e-05f, -9.539713841e-05f, -9.531062800e-05f, -9.522396022e-05f, -9.513713523e-05f, -9.505015320e-05f, -9.496301429e-05f, -9.487571866e-05f, -9.478826648e-05f, -9.470065792e-05f,
--9.461289314e-05f, -9.452497230e-05f, -9.443689557e-05f, -9.434866312e-05f, -9.426027511e-05f, -9.417173171e-05f, -9.408303308e-05f, -9.399417940e-05f, -9.390517082e-05f, -9.381600752e-05f,
--9.372668967e-05f, -9.363721742e-05f, -9.354759096e-05f, -9.345781044e-05f, -9.336787605e-05f, -9.327778793e-05f, -9.318754628e-05f, -9.309715124e-05f, -9.300660301e-05f, -9.291590173e-05f,
--9.282504759e-05f, -9.273404075e-05f, -9.264288139e-05f, -9.255156968e-05f, -9.246010578e-05f, -9.236848987e-05f, -9.227672212e-05f, -9.218480270e-05f, -9.209273179e-05f, -9.200050955e-05f,
--9.190813616e-05f, -9.181561180e-05f, -9.172293663e-05f, -9.163011082e-05f, -9.153713456e-05f, -9.144400802e-05f, -9.135073136e-05f, -9.125730477e-05f, -9.116372842e-05f, -9.107000248e-05f,
--9.097612713e-05f, -9.088210255e-05f, -9.078792890e-05f, -9.069360637e-05f, -9.059913513e-05f, -9.050451536e-05f, -9.040974724e-05f, -9.031483093e-05f, -9.021976662e-05f, -9.012455449e-05f,
--9.002919471e-05f, -8.993368746e-05f, -8.983803292e-05f, -8.974223127e-05f, -8.964628268e-05f, -8.955018733e-05f, -8.945394541e-05f, -8.935755709e-05f, -8.926102255e-05f, -8.916434197e-05f,
--8.906751554e-05f, -8.897054342e-05f, -8.887342581e-05f, -8.877616287e-05f, -8.867875480e-05f, -8.858120178e-05f, -8.848350397e-05f, -8.838566158e-05f, -8.828767477e-05f, -8.818954374e-05f,
--8.809126865e-05f, -8.799284970e-05f, -8.789428707e-05f, -8.779558094e-05f, -8.769673150e-05f, -8.759773892e-05f, -8.749860339e-05f, -8.739932510e-05f, -8.729990422e-05f, -8.720034095e-05f,
--8.710063546e-05f, -8.700078795e-05f, -8.690079860e-05f, -8.680066759e-05f, -8.670039510e-05f, -8.659998133e-05f, -8.649942646e-05f, -8.639873068e-05f, -8.629789417e-05f, -8.619691712e-05f,
--8.609579971e-05f, -8.599454214e-05f, -8.589314458e-05f, -8.579160724e-05f, -8.568993028e-05f, -8.558811392e-05f, -8.548615832e-05f, -8.538406369e-05f, -8.528183020e-05f, -8.517945805e-05f,
--8.507694743e-05f, -8.497429852e-05f, -8.487151152e-05f, -8.476858661e-05f, -8.466552399e-05f, -8.456232384e-05f, -8.445898636e-05f, -8.435551174e-05f, -8.425190016e-05f, -8.414815182e-05f,
--8.404426691e-05f, -8.394024562e-05f, -8.383608815e-05f, -8.373179468e-05f, -8.362736541e-05f, -8.352280052e-05f, -8.341810022e-05f, -8.331326470e-05f, -8.320829414e-05f, -8.310318874e-05f,
--8.299794870e-05f, -8.289257421e-05f, -8.278706546e-05f, -8.268142264e-05f, -8.257564596e-05f, -8.246973560e-05f, -8.236369176e-05f, -8.225751464e-05f, -8.215120443e-05f, -8.204476132e-05f,
--8.193818552e-05f, -8.183147721e-05f, -8.172463659e-05f, -8.161766387e-05f, -8.151055923e-05f, -8.140332288e-05f, -8.129595500e-05f, -8.118845580e-05f, -8.108082548e-05f, -8.097306423e-05f,
--8.086517224e-05f, -8.075714973e-05f, -8.064899688e-05f, -8.054071389e-05f, -8.043230097e-05f, -8.032375831e-05f, -8.021508611e-05f, -8.010628456e-05f, -7.999735388e-05f, -7.988829426e-05f,
--7.977910589e-05f, -7.966978898e-05f, -7.956034373e-05f, -7.945077035e-05f, -7.934106902e-05f, -7.923123995e-05f, -7.912128334e-05f, -7.901119939e-05f, -7.890098831e-05f, -7.879065030e-05f,
--7.868018555e-05f, -7.856959428e-05f, -7.845887667e-05f, -7.834803295e-05f, -7.823706329e-05f, -7.812596792e-05f, -7.801474703e-05f, -7.790340083e-05f, -7.779192952e-05f, -7.768033330e-05f,
--7.756861238e-05f, -7.745676696e-05f, -7.734479725e-05f, -7.723270345e-05f, -7.712048576e-05f, -7.700814439e-05f, -7.689567955e-05f, -7.678309144e-05f, -7.667038026e-05f, -7.655754623e-05f,
--7.644458954e-05f, -7.633151040e-05f, -7.621830903e-05f, -7.610498562e-05f, -7.599154038e-05f, -7.587797352e-05f, -7.576428525e-05f, -7.565047577e-05f, -7.553654529e-05f, -7.542249402e-05f,
--7.530832217e-05f, -7.519402993e-05f, -7.507961754e-05f, -7.496508518e-05f, -7.485043307e-05f, -7.473566142e-05f, -7.462077043e-05f, -7.450576032e-05f, -7.439063130e-05f, -7.427538357e-05f,
--7.416001734e-05f, -7.404453283e-05f, -7.392893024e-05f, -7.381320979e-05f, -7.369737168e-05f, -7.358141612e-05f, -7.346534334e-05f, -7.334915352e-05f, -7.323284690e-05f, -7.311642367e-05f,
--7.299988406e-05f, -7.288322827e-05f, -7.276645651e-05f, -7.264956900e-05f, -7.253256595e-05f, -7.241544756e-05f, -7.229821407e-05f, -7.218086566e-05f, -7.206340257e-05f, -7.194582500e-05f,
--7.182813317e-05f, -7.171032728e-05f, -7.159240756e-05f, -7.147437421e-05f, -7.135622746e-05f, -7.123796751e-05f, -7.111959458e-05f, -7.100110888e-05f, -7.088251063e-05f, -7.076380005e-05f,
--7.064497734e-05f, -7.052604273e-05f, -7.040699643e-05f, -7.028783865e-05f, -7.016856961e-05f, -7.004918953e-05f, -6.992969863e-05f, -6.981009711e-05f, -6.969038520e-05f, -6.957056311e-05f,
--6.945063106e-05f, -6.933058926e-05f, -6.921043794e-05f, -6.909017731e-05f, -6.896980759e-05f, -6.884932899e-05f, -6.872874174e-05f, -6.860804605e-05f, -6.848724214e-05f, -6.836633022e-05f,
--6.824531053e-05f, -6.812418327e-05f, -6.800294866e-05f, -6.788160693e-05f, -6.776015829e-05f, -6.763860296e-05f, -6.751694116e-05f, -6.739517312e-05f, -6.727329904e-05f, -6.715131916e-05f,
--6.702923369e-05f, -6.690704285e-05f, -6.678474686e-05f, -6.666234594e-05f, -6.653984032e-05f, -6.641723021e-05f, -6.629451584e-05f, -6.617169743e-05f, -6.604877519e-05f, -6.592574935e-05f,
--6.580262014e-05f, -6.567938777e-05f, -6.555605247e-05f, -6.543261445e-05f, -6.530907395e-05f, -6.518543117e-05f, -6.506168636e-05f, -6.493783972e-05f, -6.481389149e-05f, -6.468984188e-05f,
--6.456569112e-05f, -6.444143943e-05f, -6.431708704e-05f, -6.419263417e-05f, -6.406808104e-05f, -6.394342788e-05f, -6.381867491e-05f, -6.369382236e-05f, -6.356887045e-05f, -6.344381941e-05f,
--6.331866946e-05f, -6.319342082e-05f, -6.306807372e-05f, -6.294262840e-05f, -6.281708506e-05f, -6.269144394e-05f, -6.256570527e-05f, -6.243986926e-05f, -6.231393616e-05f, -6.218790617e-05f,
--6.206177953e-05f, -6.193555647e-05f, -6.180923721e-05f, -6.168282198e-05f, -6.155631100e-05f, -6.142970451e-05f, -6.130300272e-05f, -6.117620588e-05f, -6.104931420e-05f, -6.092232791e-05f,
--6.079524724e-05f, -6.066807243e-05f, -6.054080369e-05f, -6.041344125e-05f, -6.028598535e-05f, -6.015843621e-05f, -6.003079406e-05f, -5.990305914e-05f, -5.977523166e-05f, -5.964731186e-05f,
--5.951929996e-05f, -5.939119621e-05f, -5.926300082e-05f, -5.913471402e-05f, -5.900633606e-05f, -5.887786714e-05f, -5.874930752e-05f, -5.862065741e-05f, -5.849191705e-05f, -5.836308666e-05f,
--5.823416649e-05f, -5.810515675e-05f, -5.797605768e-05f, -5.784686952e-05f, -5.771759248e-05f, -5.758822681e-05f, -5.745877273e-05f, -5.732923048e-05f, -5.719960029e-05f, -5.706988239e-05f,
--5.694007701e-05f, -5.681018439e-05f, -5.668020475e-05f, -5.655013833e-05f, -5.641998536e-05f, -5.628974608e-05f, -5.615942071e-05f, -5.602900949e-05f, -5.589851266e-05f, -5.576793044e-05f,
--5.563726308e-05f, -5.550651079e-05f, -5.537567382e-05f, -5.524475240e-05f, -5.511374677e-05f, -5.498265715e-05f, -5.485148379e-05f, -5.472022691e-05f, -5.458888675e-05f, -5.445746355e-05f,
--5.432595753e-05f, -5.419436894e-05f, -5.406269801e-05f, -5.393094498e-05f, -5.379911007e-05f, -5.366719352e-05f, -5.353519558e-05f, -5.340311647e-05f, -5.327095643e-05f, -5.313871570e-05f,
--5.300639451e-05f, -5.287399309e-05f, -5.274151169e-05f, -5.260895054e-05f, -5.247630987e-05f, -5.234358993e-05f, -5.221079095e-05f, -5.207791316e-05f, -5.194495680e-05f, -5.181192212e-05f,
--5.167880933e-05f, -5.154561870e-05f, -5.141235044e-05f, -5.127900480e-05f, -5.114558201e-05f, -5.101208232e-05f, -5.087850595e-05f, -5.074485316e-05f, -5.061112417e-05f, -5.047731922e-05f,
--5.034343855e-05f, -5.020948241e-05f, -5.007545102e-05f, -4.994134463e-05f, -4.980716347e-05f, -4.967290779e-05f, -4.953857781e-05f, -4.940417379e-05f, -4.926969596e-05f, -4.913514456e-05f,
--4.900051983e-05f, -4.886582200e-05f, -4.873105133e-05f, -4.859620803e-05f, -4.846129237e-05f, -4.832630457e-05f, -4.819124487e-05f, -4.805611352e-05f, -4.792091075e-05f, -4.778563681e-05f,
--4.765029194e-05f, -4.751487637e-05f, -4.737939035e-05f, -4.724383411e-05f, -4.710820790e-05f, -4.697251196e-05f, -4.683674653e-05f, -4.670091185e-05f, -4.656500816e-05f, -4.642903570e-05f,
--4.629299471e-05f, -4.615688544e-05f, -4.602070812e-05f, -4.588446300e-05f, -4.574815032e-05f, -4.561177032e-05f, -4.547532324e-05f, -4.533880933e-05f, -4.520222882e-05f, -4.506558196e-05f,
--4.492886899e-05f, -4.479209015e-05f, -4.465524569e-05f, -4.451833585e-05f, -4.438136086e-05f, -4.424432098e-05f, -4.410721644e-05f, -4.397004749e-05f, -4.383281437e-05f, -4.369551732e-05f,
--4.355815660e-05f, -4.342073243e-05f, -4.328324506e-05f, -4.314569474e-05f, -4.300808171e-05f, -4.287040622e-05f, -4.273266850e-05f, -4.259486880e-05f, -4.245700737e-05f, -4.231908445e-05f,
--4.218110028e-05f, -4.204305510e-05f, -4.190494917e-05f, -4.176678272e-05f, -4.162855600e-05f, -4.149026925e-05f, -4.135192272e-05f, -4.121351665e-05f, -4.107505129e-05f, -4.093652688e-05f,
--4.079794367e-05f, -4.065930190e-05f, -4.052060181e-05f, -4.038184366e-05f, -4.024302768e-05f, -4.010415412e-05f, -3.996522324e-05f, -3.982623526e-05f, -3.968719044e-05f, -3.954808902e-05f,
--3.940893125e-05f, -3.926971738e-05f, -3.913044764e-05f, -3.899112229e-05f, -3.885174158e-05f, -3.871230574e-05f, -3.857281502e-05f, -3.843326967e-05f, -3.829366994e-05f, -3.815401607e-05f,
--3.801430831e-05f, -3.787454690e-05f, -3.773473210e-05f, -3.759486414e-05f, -3.745494327e-05f, -3.731496975e-05f, -3.717494381e-05f, -3.703486571e-05f, -3.689473569e-05f, -3.675455400e-05f,
--3.661432088e-05f, -3.647403659e-05f, -3.633370136e-05f, -3.619331545e-05f, -3.605287910e-05f, -3.591239257e-05f, -3.577185609e-05f, -3.563126992e-05f, -3.549063431e-05f, -3.534994949e-05f,
--3.520921572e-05f, -3.506843325e-05f, -3.492760233e-05f, -3.478672319e-05f, -3.464579610e-05f, -3.450482129e-05f, -3.436379902e-05f, -3.422272954e-05f, -3.408161308e-05f, -3.394044991e-05f,
--3.379924026e-05f, -3.365798439e-05f, -3.351668255e-05f, -3.337533498e-05f, -3.323394194e-05f, -3.309250366e-05f, -3.295102041e-05f, -3.280949242e-05f, -3.266791995e-05f, -3.252630324e-05f,
--3.238464255e-05f, -3.224293813e-05f, -3.210119021e-05f, -3.195939906e-05f, -3.181756492e-05f, -3.167568804e-05f, -3.153376866e-05f, -3.139180705e-05f, -3.124980344e-05f, -3.110775809e-05f,
--3.096567124e-05f, -3.082354315e-05f, -3.068137406e-05f, -3.053916423e-05f, -3.039691390e-05f, -3.025462333e-05f, -3.011229276e-05f, -2.996992244e-05f, -2.982751262e-05f, -2.968506356e-05f,
--2.954257550e-05f, -2.940004869e-05f, -2.925748338e-05f, -2.911487983e-05f, -2.897223828e-05f, -2.882955898e-05f, -2.868684218e-05f, -2.854408813e-05f, -2.840129709e-05f, -2.825846930e-05f,
--2.811560501e-05f, -2.797270448e-05f, -2.782976795e-05f, -2.768679568e-05f, -2.754378791e-05f, -2.740074489e-05f, -2.725766688e-05f, -2.711455413e-05f, -2.697140689e-05f, -2.682822540e-05f,
--2.668500992e-05f, -2.654176070e-05f, -2.639847799e-05f, -2.625516204e-05f, -2.611181310e-05f, -2.596843142e-05f, -2.582501726e-05f, -2.568157086e-05f, -2.553809247e-05f, -2.539458236e-05f,
--2.525104075e-05f, -2.510746792e-05f, -2.496386411e-05f, -2.482022957e-05f, -2.467656454e-05f, -2.453286929e-05f, -2.438914407e-05f, -2.424538912e-05f, -2.410160470e-05f, -2.395779105e-05f,
--2.381394844e-05f, -2.367007710e-05f, -2.352617730e-05f, -2.338224928e-05f, -2.323829329e-05f, -2.309430959e-05f, -2.295029843e-05f, -2.280626006e-05f, -2.266219473e-05f, -2.251810269e-05f,
--2.237398419e-05f, -2.222983949e-05f, -2.208566884e-05f, -2.194147249e-05f, -2.179725069e-05f, -2.165300369e-05f, -2.150873175e-05f, -2.136443511e-05f, -2.122011403e-05f, -2.107576875e-05f,
--2.093139954e-05f, -2.078700665e-05f, -2.064259031e-05f, -2.049815080e-05f, -2.035368835e-05f, -2.020920323e-05f, -2.006469568e-05f, -1.992016595e-05f, -1.977561430e-05f, -1.963104097e-05f,
--1.948644623e-05f, -1.934183032e-05f, -1.919719350e-05f, -1.905253601e-05f, -1.890785811e-05f, -1.876316006e-05f, -1.861844209e-05f, -1.847370447e-05f, -1.832894745e-05f, -1.818417127e-05f,
--1.803937620e-05f, -1.789456248e-05f, -1.774973037e-05f, -1.760488012e-05f, -1.746001197e-05f, -1.731512619e-05f, -1.717022302e-05f, -1.702530272e-05f, -1.688036554e-05f, -1.673541173e-05f,
--1.659044154e-05f, -1.644545523e-05f, -1.630045305e-05f, -1.615543524e-05f, -1.601040207e-05f, -1.586535378e-05f, -1.572029063e-05f, -1.557521287e-05f, -1.543012075e-05f, -1.528501452e-05f,
--1.513989444e-05f, -1.499476076e-05f, -1.484961373e-05f, -1.470445360e-05f, -1.455928062e-05f, -1.441409506e-05f, -1.426889715e-05f, -1.412368715e-05f, -1.397846532e-05f, -1.383323190e-05f,
--1.368798716e-05f, -1.354273133e-05f, -1.339746468e-05f, -1.325218745e-05f, -1.310689990e-05f, -1.296160228e-05f, -1.281629484e-05f, -1.267097784e-05f, -1.252565152e-05f, -1.238031614e-05f,
--1.223497196e-05f, -1.208961921e-05f, -1.194425816e-05f, -1.179888906e-05f, -1.165351216e-05f, -1.150812772e-05f, -1.136273597e-05f, -1.121733718e-05f, -1.107193160e-05f, -1.092651949e-05f,
--1.078110108e-05f, -1.063567664e-05f, -1.049024642e-05f, -1.034481067e-05f, -1.019936963e-05f, -1.005392358e-05f, -9.908472743e-06f, -9.763017387e-06f, -9.617557762e-06f, -9.472094118e-06f,
--9.326626708e-06f, -9.181155783e-06f, -9.035681597e-06f, -8.890204399e-06f, -8.744724444e-06f, -8.599241982e-06f, -8.453757265e-06f, -8.308270546e-06f, -8.162782076e-06f, -8.017292107e-06f,
--7.871800891e-06f, -7.726308680e-06f, -7.580815726e-06f, -7.435322279e-06f, -7.289828593e-06f, -7.144334919e-06f, -6.998841508e-06f, -6.853348612e-06f, -6.707856484e-06f, -6.562365373e-06f,
--6.416875534e-06f, -6.271387215e-06f, -6.125900671e-06f, -5.980416151e-06f, -5.834933907e-06f, -5.689454192e-06f, -5.543977256e-06f, -5.398503350e-06f, -5.253032727e-06f, -5.107565638e-06f,
--4.962102334e-06f, -4.816643066e-06f, -4.671188085e-06f, -4.525737644e-06f, -4.380291993e-06f, -4.234851383e-06f, -4.089416066e-06f, -3.943986293e-06f, -3.798562315e-06f, -3.653144382e-06f,
--3.507732747e-06f, -3.362327659e-06f, -3.216929371e-06f, -3.071538133e-06f, -2.926154196e-06f, -2.780777810e-06f, -2.635409228e-06f, -2.490048699e-06f, -2.344696474e-06f, -2.199352804e-06f,
--2.054017940e-06f, -1.908692133e-06f, -1.763375632e-06f, -1.618068690e-06f, -1.472771556e-06f, -1.327484480e-06f, -1.182207714e-06f, -1.036941507e-06f, -8.916861111e-07f, -7.464417753e-07f,
--6.012087503e-07f, -4.559872865e-07f, -3.107776341e-07f, -1.655800432e-07f, -2.039476411e-08f, 1.247779532e-07f, 2.699378585e-07f, 4.150847019e-07f, 5.602182334e-07f, 7.053382030e-07f,
-8.504443608e-07f, 9.955364570e-07f, 1.140614242e-06f, 1.285677465e-06f, 1.430725878e-06f, 1.575759230e-06f, 1.720777272e-06f, 1.865779755e-06f, 2.010766428e-06f, 2.155737042e-06f,
-2.300691348e-06f, 2.445629097e-06f, 2.590550039e-06f, 2.735453924e-06f, 2.880340505e-06f, 3.025209531e-06f, 3.170060753e-06f, 3.314893923e-06f, 3.459708791e-06f, 3.604505109e-06f,
-3.749282627e-06f, 3.894041096e-06f, 4.038780269e-06f, 4.183499895e-06f, 4.328199727e-06f, 4.472879516e-06f, 4.617539013e-06f, 4.762177970e-06f, 4.906796138e-06f, 5.051393269e-06f,
-5.195969114e-06f, 5.340523426e-06f, 5.485055955e-06f, 5.629566455e-06f, 5.774054676e-06f, 5.918520371e-06f, 6.062963292e-06f, 6.207383190e-06f, 6.351779818e-06f, 6.496152929e-06f,
-6.640502274e-06f, 6.784827605e-06f, 6.929128676e-06f, 7.073405238e-06f, 7.217657045e-06f, 7.361883848e-06f, 7.506085400e-06f, 7.650261454e-06f, 7.794411763e-06f, 7.938536080e-06f,
-8.082634157e-06f, 8.226705748e-06f, 8.370750605e-06f, 8.514768482e-06f, 8.658759132e-06f, 8.802722308e-06f, 8.946657763e-06f, 9.090565251e-06f, 9.234444525e-06f, 9.378295339e-06f,
-9.522117447e-06f, 9.665910601e-06f, 9.809674556e-06f, 9.953409065e-06f, 1.009711388e-05f, 1.024078876e-05f, 1.038443346e-05f, 1.052804773e-05f, 1.067163132e-05f, 1.081518399e-05f,
-1.095870550e-05f, 1.110219559e-05f, 1.124565402e-05f, 1.138908055e-05f, 1.153247493e-05f, 1.167583692e-05f, 1.181916627e-05f, 1.196246274e-05f, 1.210572607e-05f, 1.224895603e-05f,
-1.239215237e-05f, 1.253531485e-05f, 1.267844322e-05f, 1.282153724e-05f, 1.296459665e-05f, 1.310762123e-05f, 1.325061071e-05f, 1.339356487e-05f, 1.353648345e-05f, 1.367936621e-05f,
-1.382221291e-05f, 1.396502330e-05f, 1.410779713e-05f, 1.425053418e-05f, 1.439323418e-05f, 1.453589690e-05f, 1.467852209e-05f, 1.482110951e-05f, 1.496365892e-05f, 1.510617007e-05f,
-1.524864272e-05f, 1.539107663e-05f, 1.553347155e-05f, 1.567582724e-05f, 1.581814346e-05f, 1.596041997e-05f, 1.610265652e-05f, 1.624485286e-05f, 1.638700877e-05f, 1.652912399e-05f,
-1.667119828e-05f, 1.681323140e-05f, 1.695522311e-05f, 1.709717317e-05f, 1.723908133e-05f, 1.738094735e-05f, 1.752277099e-05f, 1.766455201e-05f, 1.780629017e-05f, 1.794798522e-05f,
-1.808963693e-05f, 1.823124505e-05f, 1.837280934e-05f, 1.851432956e-05f, 1.865580547e-05f, 1.879723683e-05f, 1.893862340e-05f, 1.907996494e-05f, 1.922126120e-05f, 1.936251195e-05f,
-1.950371694e-05f, 1.964487594e-05f, 1.978598870e-05f, 1.992705498e-05f, 2.006807456e-05f, 2.020904717e-05f, 2.034997259e-05f, 2.049085058e-05f, 2.063168089e-05f, 2.077246329e-05f,
-2.091319754e-05f, 2.105388339e-05f, 2.119452061e-05f, 2.133510896e-05f, 2.147564820e-05f, 2.161613809e-05f, 2.175657840e-05f, 2.189696888e-05f, 2.203730929e-05f, 2.217759940e-05f,
-2.231783897e-05f, 2.245802776e-05f, 2.259816553e-05f, 2.273825204e-05f, 2.287828706e-05f, 2.301827035e-05f, 2.315820167e-05f, 2.329808079e-05f, 2.343790746e-05f, 2.357768144e-05f,
-2.371740251e-05f, 2.385707042e-05f, 2.399668494e-05f, 2.413624583e-05f, 2.427575285e-05f, 2.441520577e-05f, 2.455460435e-05f, 2.469394835e-05f, 2.483323754e-05f, 2.497247168e-05f,
-2.511165053e-05f, 2.525077387e-05f, 2.538984144e-05f, 2.552885302e-05f, 2.566780838e-05f, 2.580670727e-05f, 2.594554946e-05f, 2.608433472e-05f, 2.622306280e-05f, 2.636173349e-05f,
-2.650034653e-05f, 2.663890170e-05f, 2.677739875e-05f, 2.691583747e-05f, 2.705421760e-05f, 2.719253893e-05f, 2.733080120e-05f, 2.746900420e-05f, 2.760714768e-05f, 2.774523141e-05f,
-2.788325516e-05f, 2.802121869e-05f, 2.815912177e-05f, 2.829696417e-05f, 2.843474566e-05f, 2.857246599e-05f, 2.871012495e-05f, 2.884772229e-05f, 2.898525778e-05f, 2.912273119e-05f,
-2.926014229e-05f, 2.939749084e-05f, 2.953477661e-05f, 2.967199938e-05f, 2.980915891e-05f, 2.994625496e-05f, 3.008328731e-05f, 3.022025572e-05f, 3.035715996e-05f, 3.049399981e-05f,
-3.063077502e-05f, 3.076748538e-05f, 3.090413064e-05f, 3.104071058e-05f, 3.117722496e-05f, 3.131367357e-05f, 3.145005615e-05f, 3.158637250e-05f, 3.172262237e-05f, 3.185880553e-05f,
-3.199492176e-05f, 3.213097083e-05f, 3.226695250e-05f, 3.240286655e-05f, 3.253871275e-05f, 3.267449087e-05f, 3.281020067e-05f, 3.294584194e-05f, 3.308141444e-05f, 3.321691794e-05f,
-3.335235222e-05f, 3.348771705e-05f, 3.362301219e-05f, 3.375823743e-05f, 3.389339252e-05f, 3.402847725e-05f, 3.416349139e-05f, 3.429843471e-05f, 3.443330699e-05f, 3.456810798e-05f,
-3.470283748e-05f, 3.483749525e-05f, 3.497208106e-05f, 3.510659469e-05f, 3.524103592e-05f, 3.537540450e-05f, 3.550970023e-05f, 3.564392287e-05f, 3.577807220e-05f, 3.591214799e-05f,
-3.604615002e-05f, 3.618007806e-05f, 3.631393188e-05f, 3.644771126e-05f, 3.658141598e-05f, 3.671504581e-05f, 3.684860053e-05f, 3.698207990e-05f, 3.711548371e-05f, 3.724881174e-05f,
-3.738206375e-05f, 3.751523953e-05f, 3.764833885e-05f, 3.778136149e-05f, 3.791430722e-05f, 3.804717582e-05f, 3.817996707e-05f, 3.831268074e-05f, 3.844531662e-05f, 3.857787447e-05f,
-3.871035408e-05f, 3.884275522e-05f, 3.897507768e-05f, 3.910732122e-05f, 3.923948563e-05f, 3.937157069e-05f, 3.950357617e-05f, 3.963550185e-05f, 3.976734752e-05f, 3.989911294e-05f,
-4.003079791e-05f, 4.016240219e-05f, 4.029392557e-05f, 4.042536782e-05f, 4.055672874e-05f, 4.068800809e-05f, 4.081920565e-05f, 4.095032122e-05f, 4.108135456e-05f, 4.121230545e-05f,
-4.134317369e-05f, 4.147395904e-05f, 4.160466130e-05f, 4.173528023e-05f, 4.186581563e-05f, 4.199626727e-05f, 4.212663493e-05f, 4.225691840e-05f, 4.238711746e-05f, 4.251723190e-05f,
-4.264726148e-05f, 4.277720600e-05f, 4.290706524e-05f, 4.303683897e-05f, 4.316652700e-05f, 4.329612908e-05f, 4.342564502e-05f, 4.355507460e-05f, 4.368441758e-05f, 4.381367377e-05f,
-4.394284295e-05f, 4.407192489e-05f, 4.420091939e-05f, 4.432982622e-05f, 4.445864517e-05f, 4.458737604e-05f, 4.471601859e-05f, 4.484457262e-05f, 4.497303791e-05f, 4.510141425e-05f,
-4.522970143e-05f, 4.535789922e-05f, 4.548600742e-05f, 4.561402580e-05f, 4.574195417e-05f, 4.586979230e-05f, 4.599753998e-05f, 4.612519700e-05f, 4.625276314e-05f, 4.638023819e-05f,
-4.650762195e-05f, 4.663491419e-05f, 4.676211470e-05f, 4.688922328e-05f, 4.701623970e-05f, 4.714316377e-05f, 4.726999526e-05f, 4.739673397e-05f, 4.752337968e-05f, 4.764993219e-05f,
-4.777639128e-05f, 4.790275674e-05f, 4.802902836e-05f, 4.815520593e-05f, 4.828128924e-05f, 4.840727809e-05f, 4.853317225e-05f, 4.865897153e-05f, 4.878467571e-05f, 4.891028458e-05f,
-4.903579794e-05f, 4.916121557e-05f, 4.928653727e-05f, 4.941176283e-05f, 4.953689204e-05f, 4.966192468e-05f, 4.978686057e-05f, 4.991169947e-05f, 5.003644120e-05f, 5.016108554e-05f,
-5.028563228e-05f, 5.041008122e-05f, 5.053443215e-05f, 5.065868486e-05f, 5.078283915e-05f, 5.090689481e-05f, 5.103085164e-05f, 5.115470942e-05f, 5.127846796e-05f, 5.140212704e-05f,
-5.152568647e-05f, 5.164914603e-05f, 5.177250553e-05f, 5.189576476e-05f, 5.201892350e-05f, 5.214198157e-05f, 5.226493875e-05f, 5.238779484e-05f, 5.251054964e-05f, 5.263320295e-05f,
-5.275575455e-05f, 5.287820425e-05f, 5.300055184e-05f, 5.312279713e-05f, 5.324493990e-05f, 5.336697996e-05f, 5.348891710e-05f, 5.361075113e-05f, 5.373248183e-05f, 5.385410902e-05f,
-5.397563248e-05f, 5.409705201e-05f, 5.421836743e-05f, 5.433957851e-05f, 5.446068507e-05f, 5.458168690e-05f, 5.470258380e-05f, 5.482337558e-05f, 5.494406203e-05f, 5.506464295e-05f,
-5.518511815e-05f, 5.530548742e-05f, 5.542575056e-05f, 5.554590738e-05f, 5.566595768e-05f, 5.578590126e-05f, 5.590573792e-05f, 5.602546747e-05f, 5.614508970e-05f, 5.626460442e-05f,
-5.638401142e-05f, 5.650331052e-05f, 5.662250152e-05f, 5.674158422e-05f, 5.686055841e-05f, 5.697942392e-05f, 5.709818053e-05f, 5.721682806e-05f, 5.733536631e-05f, 5.745379508e-05f,
-5.757211418e-05f, 5.769032341e-05f, 5.780842257e-05f, 5.792641148e-05f, 5.804428994e-05f, 5.816205775e-05f, 5.827971472e-05f, 5.839726066e-05f, 5.851469537e-05f, 5.863201865e-05f,
-5.874923032e-05f, 5.886633019e-05f, 5.898331805e-05f, 5.910019372e-05f, 5.921695700e-05f, 5.933360771e-05f, 5.945014564e-05f, 5.956657062e-05f, 5.968288243e-05f, 5.979908091e-05f,
-5.991516585e-05f, 6.003113706e-05f, 6.014699435e-05f, 6.026273753e-05f, 6.037836642e-05f, 6.049388082e-05f, 6.060928053e-05f, 6.072456538e-05f, 6.083973518e-05f, 6.095478972e-05f,
-6.106972883e-05f, 6.118455231e-05f, 6.129925998e-05f, 6.141385165e-05f, 6.152832713e-05f, 6.164268623e-05f, 6.175692876e-05f, 6.187105454e-05f, 6.198506338e-05f, 6.209895510e-05f,
-6.221272949e-05f, 6.232638639e-05f, 6.243992560e-05f, 6.255334693e-05f, 6.266665021e-05f, 6.277983524e-05f, 6.289290184e-05f, 6.300584982e-05f, 6.311867900e-05f, 6.323138920e-05f,
-6.334398022e-05f, 6.345645189e-05f, 6.356880402e-05f, 6.368103643e-05f, 6.379314893e-05f, 6.390514133e-05f, 6.401701347e-05f, 6.412876514e-05f, 6.424039618e-05f, 6.435190639e-05f,
-6.446329560e-05f, 6.457456362e-05f, 6.468571028e-05f, 6.479673538e-05f, 6.490763875e-05f, 6.501842020e-05f, 6.512907956e-05f, 6.523961664e-05f, 6.535003127e-05f, 6.546032326e-05f,
-6.557049244e-05f, 6.568053862e-05f, 6.579046162e-05f, 6.590026126e-05f, 6.600993737e-05f, 6.611948977e-05f, 6.622891827e-05f, 6.633822271e-05f, 6.644740289e-05f, 6.655645864e-05f,
-6.666538979e-05f, 6.677419616e-05f, 6.688287756e-05f, 6.699143383e-05f, 6.709986478e-05f, 6.720817025e-05f, 6.731635004e-05f, 6.742440399e-05f, 6.753233192e-05f, 6.764013365e-05f,
-6.774780901e-05f, 6.785535783e-05f, 6.796277992e-05f, 6.807007512e-05f, 6.817724325e-05f, 6.828428413e-05f, 6.839119759e-05f, 6.849798346e-05f, 6.860464156e-05f, 6.871117172e-05f,
-6.881757377e-05f, 6.892384753e-05f, 6.902999283e-05f, 6.913600950e-05f, 6.924189736e-05f, 6.934765625e-05f, 6.945328599e-05f, 6.955878641e-05f, 6.966415734e-05f, 6.976939861e-05f,
-6.987451005e-05f, 6.997949149e-05f, 7.008434275e-05f, 7.018906367e-05f, 7.029365407e-05f, 7.039811380e-05f, 7.050244267e-05f, 7.060664052e-05f, 7.071070717e-05f, 7.081464248e-05f,
-7.091844625e-05f, 7.102211833e-05f, 7.112565854e-05f, 7.122906673e-05f, 7.133234272e-05f, 7.143548634e-05f, 7.153849743e-05f, 7.164137582e-05f, 7.174412134e-05f, 7.184673384e-05f,
-7.194921313e-05f, 7.205155906e-05f, 7.215377147e-05f, 7.225585018e-05f, 7.235779503e-05f, 7.245960586e-05f, 7.256128250e-05f, 7.266282479e-05f, 7.276423256e-05f, 7.286550565e-05f,
-7.296664390e-05f, 7.306764714e-05f, 7.316851521e-05f, 7.326924795e-05f, 7.336984520e-05f, 7.347030678e-05f, 7.357063255e-05f, 7.367082234e-05f, 7.377087598e-05f, 7.387079332e-05f,
-7.397057420e-05f, 7.407021845e-05f, 7.416972592e-05f, 7.426909644e-05f, 7.436832985e-05f, 7.446742600e-05f, 7.456638472e-05f, 7.466520586e-05f, 7.476388925e-05f, 7.486243474e-05f,
-7.496084217e-05f, 7.505911138e-05f, 7.515724222e-05f, 7.525523452e-05f, 7.535308812e-05f, 7.545080288e-05f, 7.554837863e-05f, 7.564581522e-05f, 7.574311249e-05f, 7.584027028e-05f,
-7.593728844e-05f, 7.603416681e-05f, 7.613090525e-05f, 7.622750358e-05f, 7.632396166e-05f, 7.642027933e-05f, 7.651645644e-05f, 7.661249283e-05f, 7.670838836e-05f, 7.680414286e-05f,
-7.689975618e-05f, 7.699522817e-05f, 7.709055868e-05f, 7.718574755e-05f, 7.728079464e-05f, 7.737569978e-05f, 7.747046284e-05f, 7.756508364e-05f, 7.765956206e-05f, 7.775389793e-05f,
-7.784809110e-05f, 7.794214142e-05f, 7.803604875e-05f, 7.812981293e-05f, 7.822343381e-05f, 7.831691125e-05f, 7.841024509e-05f, 7.850343518e-05f, 7.859648138e-05f, 7.868938354e-05f,
-7.878214150e-05f, 7.887475513e-05f, 7.896722428e-05f, 7.905954879e-05f, 7.915172852e-05f, 7.924376332e-05f, 7.933565305e-05f, 7.942739755e-05f, 7.951899669e-05f, 7.961045032e-05f,
-7.970175830e-05f, 7.979292046e-05f, 7.988393668e-05f, 7.997480681e-05f, 8.006553070e-05f, 8.015610821e-05f, 8.024653919e-05f, 8.033682351e-05f, 8.042696101e-05f, 8.051695155e-05f,
-8.060679500e-05f, 8.069649121e-05f, 8.078604003e-05f, 8.087544132e-05f, 8.096469495e-05f, 8.105380077e-05f, 8.114275864e-05f, 8.123156842e-05f, 8.132022996e-05f, 8.140874314e-05f,
-8.149710780e-05f, 8.158532380e-05f, 8.167339102e-05f, 8.176130930e-05f, 8.184907851e-05f, 8.193669852e-05f, 8.202416917e-05f, 8.211149034e-05f, 8.219866188e-05f, 8.228568366e-05f,
-8.237255554e-05f, 8.245927738e-05f, 8.254584905e-05f, 8.263227040e-05f, 8.271854131e-05f, 8.280466164e-05f, 8.289063124e-05f, 8.297645000e-05f, 8.306211776e-05f, 8.314763439e-05f,
-8.323299977e-05f, 8.331821375e-05f, 8.340327620e-05f, 8.348818699e-05f, 8.357294598e-05f, 8.365755304e-05f, 8.374200804e-05f, 8.382631084e-05f, 8.391046131e-05f, 8.399445933e-05f,
-8.407830475e-05f, 8.416199744e-05f, 8.424553728e-05f, 8.432892413e-05f, 8.441215786e-05f, 8.449523835e-05f, 8.457816545e-05f, 8.466093904e-05f, 8.474355900e-05f, 8.482602519e-05f,
-8.490833747e-05f, 8.499049573e-05f, 8.507249984e-05f, 8.515434966e-05f, 8.523604507e-05f, 8.531758593e-05f, 8.539897213e-05f, 8.548020354e-05f, 8.556128002e-05f, 8.564220145e-05f,
-8.572296771e-05f, 8.580357866e-05f, 8.588403419e-05f, 8.596433416e-05f, 8.604447846e-05f, 8.612446695e-05f, 8.620429951e-05f, 8.628397602e-05f, 8.636349635e-05f, 8.644286038e-05f,
-8.652206798e-05f, 8.660111904e-05f, 8.668001342e-05f, 8.675875101e-05f, 8.683733168e-05f, 8.691575531e-05f, 8.699402179e-05f, 8.707213097e-05f, 8.715008276e-05f, 8.722787701e-05f,
-8.730551363e-05f, 8.738299247e-05f, 8.746031343e-05f, 8.753747638e-05f, 8.761448120e-05f, 8.769132777e-05f, 8.776801598e-05f, 8.784454571e-05f, 8.792091683e-05f, 8.799712923e-05f,
-8.807318279e-05f, 8.814907740e-05f, 8.822481293e-05f, 8.830038926e-05f, 8.837580629e-05f, 8.845106389e-05f, 8.852616196e-05f, 8.860110036e-05f, 8.867587899e-05f, 8.875049773e-05f,
-8.882495647e-05f, 8.889925509e-05f, 8.897339347e-05f, 8.904737151e-05f, 8.912118908e-05f, 8.919484608e-05f, 8.926834239e-05f, 8.934167790e-05f, 8.941485249e-05f, 8.948786606e-05f,
-8.956071848e-05f, 8.963340966e-05f, 8.970593947e-05f, 8.977830780e-05f, 8.985051455e-05f, 8.992255961e-05f, 8.999444285e-05f, 9.006616418e-05f, 9.013772348e-05f, 9.020912064e-05f,
-9.028035556e-05f, 9.035142812e-05f, 9.042233821e-05f, 9.049308573e-05f, 9.056367057e-05f, 9.063409262e-05f, 9.070435178e-05f, 9.077444793e-05f, 9.084438096e-05f, 9.091415078e-05f,
-9.098375728e-05f, 9.105320034e-05f, 9.112247987e-05f, 9.119159575e-05f, 9.126054789e-05f, 9.132933618e-05f, 9.139796050e-05f, 9.146642077e-05f, 9.153471687e-05f, 9.160284870e-05f,
-9.167081615e-05f, 9.173861913e-05f, 9.180625753e-05f, 9.187373125e-05f, 9.194104018e-05f, 9.200818423e-05f, 9.207516329e-05f, 9.214197725e-05f, 9.220862603e-05f, 9.227510952e-05f,
-9.234142761e-05f, 9.240758020e-05f, 9.247356721e-05f, 9.253938852e-05f, 9.260504404e-05f, 9.267053367e-05f, 9.273585731e-05f, 9.280101486e-05f, 9.286600622e-05f, 9.293083130e-05f,
-9.299549000e-05f, 9.305998221e-05f, 9.312430785e-05f, 9.318846681e-05f, 9.325245901e-05f, 9.331628434e-05f, 9.337994270e-05f, 9.344343401e-05f, 9.350675817e-05f, 9.356991507e-05f,
-9.363290464e-05f, 9.369572676e-05f, 9.375838136e-05f, 9.382086833e-05f, 9.388318758e-05f, 9.394533902e-05f, 9.400732255e-05f, 9.406913809e-05f, 9.413078554e-05f, 9.419226481e-05f,
-9.425357580e-05f, 9.431471843e-05f, 9.437569260e-05f, 9.443649823e-05f, 9.449713522e-05f, 9.455760348e-05f, 9.461790293e-05f, 9.467803346e-05f, 9.473799501e-05f, 9.479778746e-05f,
-9.485741075e-05f, 9.491686477e-05f, 9.497614944e-05f, 9.503526467e-05f, 9.509421038e-05f, 9.515298648e-05f, 9.521159287e-05f, 9.527002948e-05f, 9.532829622e-05f, 9.538639300e-05f,
-9.544431973e-05f, 9.550207634e-05f, 9.555966273e-05f, 9.561707882e-05f, 9.567432452e-05f, 9.573139976e-05f, 9.578830445e-05f, 9.584503850e-05f, 9.590160183e-05f, 9.595799436e-05f,
-9.601421601e-05f, 9.607026668e-05f, 9.612614632e-05f, 9.618185481e-05f, 9.623739210e-05f, 9.629275810e-05f, 9.634795272e-05f, 9.640297588e-05f, 9.645782751e-05f, 9.651250753e-05f,
-9.656701585e-05f, 9.662135240e-05f, 9.667551709e-05f, 9.672950986e-05f, 9.678333061e-05f, 9.683697927e-05f, 9.689045577e-05f, 9.694376003e-05f, 9.699689197e-05f, 9.704985150e-05f,
-9.710263857e-05f, 9.715525308e-05f, 9.720769497e-05f, 9.725996416e-05f, 9.731206056e-05f, 9.736398412e-05f, 9.741573475e-05f, 9.746731238e-05f, 9.751871693e-05f, 9.756994833e-05f,
-9.762100651e-05f, 9.767189139e-05f, 9.772260291e-05f, 9.777314098e-05f, 9.782350554e-05f, 9.787369651e-05f, 9.792371382e-05f, 9.797355741e-05f, 9.802322719e-05f, 9.807272311e-05f,
-9.812204508e-05f, 9.817119304e-05f, 9.822016692e-05f, 9.826896665e-05f, 9.831759215e-05f, 9.836604337e-05f, 9.841432023e-05f, 9.846242267e-05f, 9.851035061e-05f, 9.855810399e-05f,
-9.860568274e-05f, 9.865308679e-05f, 9.870031608e-05f, 9.874737054e-05f, 9.879425011e-05f, 9.884095471e-05f, 9.888748429e-05f, 9.893383877e-05f, 9.898001810e-05f, 9.902602221e-05f,
-9.907185102e-05f, 9.911750449e-05f, 9.916298255e-05f, 9.920828513e-05f, 9.925341217e-05f, 9.929836360e-05f, 9.934313937e-05f, 9.938773941e-05f, 9.943216367e-05f, 9.947641207e-05f,
-9.952048456e-05f, 9.956438107e-05f, 9.960810156e-05f, 9.965164595e-05f, 9.969501418e-05f, 9.973820621e-05f, 9.978122195e-05f, 9.982406137e-05f, 9.986672440e-05f, 9.990921098e-05f,
-9.995152105e-05f, 9.999365455e-05f, 1.000356114e-04f, 1.000773916e-04f, 1.001189951e-04f, 1.001604218e-04f, 1.002016716e-04f, 1.002427445e-04f, 1.002836405e-04f, 1.003243594e-04f,
-1.003649013e-04f, 1.004052660e-04f, 1.004454536e-04f, 1.004854639e-04f, 1.005252970e-04f, 1.005649527e-04f, 1.006044310e-04f, 1.006437319e-04f, 1.006828552e-04f, 1.007218010e-04f,
-1.007605692e-04f, 1.007991598e-04f, 1.008375726e-04f, 1.008758077e-04f, 1.009138650e-04f, 1.009517444e-04f, 1.009894459e-04f, 1.010269695e-04f, 1.010643150e-04f, 1.011014825e-04f,
-1.011384719e-04f, 1.011752831e-04f, 1.012119161e-04f, 1.012483709e-04f, 1.012846474e-04f, 1.013207455e-04f, 1.013566653e-04f, 1.013924066e-04f, 1.014279694e-04f, 1.014633537e-04f,
-1.014985594e-04f, 1.015335865e-04f, 1.015684349e-04f, 1.016031046e-04f, 1.016375956e-04f, 1.016719077e-04f, 1.017060410e-04f, 1.017399955e-04f, 1.017737710e-04f, 1.018073675e-04f,
-1.018407850e-04f, 1.018740234e-04f, 1.019070828e-04f, 1.019399630e-04f, 1.019726640e-04f, 1.020051859e-04f, 1.020375284e-04f, 1.020696916e-04f, 1.021016755e-04f, 1.021334801e-04f,
-1.021651051e-04f, 1.021965508e-04f, 1.022278169e-04f, 1.022589035e-04f, 1.022898105e-04f, 1.023205379e-04f, 1.023510857e-04f, 1.023814537e-04f, 1.024116420e-04f, 1.024416506e-04f,
-1.024714794e-04f, 1.025011283e-04f, 1.025305974e-04f, 1.025598865e-04f, 1.025889957e-04f, 1.026179250e-04f, 1.026466742e-04f, 1.026752434e-04f, 1.027036325e-04f, 1.027318415e-04f,
-1.027598703e-04f, 1.027877190e-04f, 1.028153875e-04f, 1.028428757e-04f, 1.028701837e-04f, 1.028973113e-04f, 1.029242586e-04f, 1.029510256e-04f, 1.029776121e-04f, 1.030040182e-04f,
-1.030302439e-04f, 1.030562891e-04f, 1.030821537e-04f, 1.031078378e-04f, 1.031333414e-04f, 1.031586643e-04f, 1.031838066e-04f, 1.032087683e-04f, 1.032335492e-04f, 1.032581495e-04f,
-1.032825690e-04f, 1.033068077e-04f, 1.033308657e-04f, 1.033547428e-04f, 1.033784391e-04f, 1.034019545e-04f, 1.034252890e-04f, 1.034484426e-04f, 1.034714153e-04f, 1.034942070e-04f,
-1.035168177e-04f, 1.035392474e-04f, 1.035614961e-04f, 1.035835637e-04f, 1.036054502e-04f, 1.036271556e-04f, 1.036486799e-04f, 1.036700230e-04f, 1.036911850e-04f, 1.037121658e-04f,
-1.037329654e-04f, 1.037535837e-04f, 1.037740208e-04f, 1.037942767e-04f, 1.038143512e-04f, 1.038342445e-04f, 1.038539564e-04f, 1.038734869e-04f, 1.038928362e-04f, 1.039120040e-04f,
-1.039309904e-04f, 1.039497954e-04f, 1.039684190e-04f, 1.039868612e-04f, 1.040051219e-04f, 1.040232011e-04f, 1.040410988e-04f, 1.040588150e-04f, 1.040763497e-04f, 1.040937028e-04f,
-1.041108744e-04f, 1.041278644e-04f, 1.041446728e-04f, 1.041612997e-04f, 1.041777449e-04f, 1.041940086e-04f, 1.042100906e-04f, 1.042259909e-04f, 1.042417096e-04f, 1.042572467e-04f,
-1.042726020e-04f, 1.042877757e-04f, 1.043027677e-04f, 1.043175779e-04f, 1.043322065e-04f, 1.043466533e-04f, 1.043609184e-04f, 1.043750017e-04f, 1.043889033e-04f, 1.044026231e-04f,
-1.044161612e-04f, 1.044295175e-04f, 1.044426920e-04f, 1.044556847e-04f, 1.044684956e-04f, 1.044811247e-04f, 1.044935720e-04f, 1.045058375e-04f, 1.045179211e-04f, 1.045298230e-04f,
-1.045415430e-04f, 1.045530811e-04f, 1.045644375e-04f, 1.045756119e-04f, 1.045866046e-04f, 1.045974154e-04f, 1.046080443e-04f, 1.046184914e-04f, 1.046287566e-04f, 1.046388400e-04f,
-1.046487415e-04f, 1.046584612e-04f, 1.046679989e-04f, 1.046773549e-04f, 1.046865289e-04f, 1.046955211e-04f, 1.047043315e-04f, 1.047129599e-04f, 1.047214065e-04f, 1.047296713e-04f,
-1.047377542e-04f, 1.047456552e-04f, 1.047533744e-04f, 1.047609117e-04f, 1.047682672e-04f, 1.047754409e-04f, 1.047824327e-04f, 1.047892426e-04f, 1.047958707e-04f, 1.048023170e-04f,
-1.048085815e-04f, 1.048146641e-04f, 1.048205650e-04f, 1.048262840e-04f, 1.048318212e-04f, 1.048371766e-04f, 1.048423503e-04f, 1.048473421e-04f, 1.048521522e-04f, 1.048567805e-04f,
-1.048612271e-04f, 1.048654918e-04f, 1.048695749e-04f, 1.048734762e-04f, 1.048771958e-04f, 1.048807337e-04f, 1.048840898e-04f, 1.048872643e-04f, 1.048902571e-04f, 1.048930682e-04f,
-1.048956976e-04f, 1.048981454e-04f, 1.049004116e-04f, 1.049024961e-04f, 1.049043990e-04f, 1.049061203e-04f, 1.049076600e-04f, 1.049090181e-04f, 1.049101947e-04f, 1.049111897e-04f,
-1.049120032e-04f, 1.049126351e-04f, 1.049130856e-04f, 1.049133545e-04f, 1.049134420e-04f, 1.049133480e-04f, 1.049130726e-04f, 1.049126157e-04f, 1.049119775e-04f, 1.049111578e-04f,
-1.049101568e-04f, 1.049089743e-04f, 1.049076106e-04f, 1.049060655e-04f, 1.049043391e-04f, 1.049024315e-04f, 1.049003425e-04f, 1.048980723e-04f, 1.048956209e-04f, 1.048929883e-04f,
-1.048901745e-04f, 1.048871795e-04f, 1.048840034e-04f, 1.048806461e-04f, 1.048771078e-04f, 1.048733884e-04f, 1.048694879e-04f, 1.048654063e-04f, 1.048611438e-04f, 1.048567002e-04f,
-1.048520757e-04f, 1.048472703e-04f, 1.048422839e-04f, 1.048371167e-04f, 1.048317685e-04f, 1.048262395e-04f, 1.048205298e-04f, 1.048146392e-04f, 1.048085678e-04f, 1.048023157e-04f,
-1.047958829e-04f, 1.047892694e-04f, 1.047824752e-04f, 1.047755004e-04f, 1.047683450e-04f, 1.047610090e-04f, 1.047534925e-04f, 1.047457955e-04f, 1.047379179e-04f, 1.047298599e-04f,
-1.047216215e-04f, 1.047132027e-04f, 1.047046034e-04f, 1.046958239e-04f, 1.046868640e-04f, 1.046777239e-04f, 1.046684035e-04f, 1.046589029e-04f, 1.046492221e-04f, 1.046393612e-04f,
-1.046293202e-04f, 1.046190990e-04f, 1.046086979e-04f, 1.045981166e-04f, 1.045873555e-04f, 1.045764143e-04f, 1.045652933e-04f, 1.045539924e-04f, 1.045425116e-04f, 1.045308510e-04f,
-1.045190107e-04f, 1.045069906e-04f, 1.044947908e-04f, 1.044824113e-04f, 1.044698523e-04f, 1.044571136e-04f, 1.044441954e-04f, 1.044310977e-04f, 1.044178205e-04f, 1.044043638e-04f,
-1.043907278e-04f, 1.043769124e-04f, 1.043629177e-04f, 1.043487437e-04f, 1.043343905e-04f, 1.043198581e-04f, 1.043051465e-04f, 1.042902558e-04f, 1.042751860e-04f, 1.042599372e-04f,
-1.042445094e-04f, 1.042289027e-04f, 1.042131171e-04f, 1.041971526e-04f, 1.041810093e-04f, 1.041646872e-04f, 1.041481863e-04f, 1.041315068e-04f, 1.041146487e-04f, 1.040976119e-04f,
-1.040803966e-04f, 1.040630028e-04f, 1.040454305e-04f, 1.040276798e-04f, 1.040097508e-04f, 1.039916434e-04f, 1.039733577e-04f, 1.039548938e-04f, 1.039362518e-04f, 1.039174316e-04f,
-1.038984333e-04f, 1.038792570e-04f, 1.038599027e-04f, 1.038403704e-04f, 1.038206603e-04f, 1.038007723e-04f, 1.037807065e-04f, 1.037604630e-04f, 1.037400418e-04f, 1.037194430e-04f,
-1.036986666e-04f, 1.036777126e-04f, 1.036565812e-04f, 1.036352723e-04f, 1.036137861e-04f, 1.035921225e-04f, 1.035702817e-04f, 1.035482636e-04f, 1.035260684e-04f, 1.035036960e-04f,
-1.034811466e-04f, 1.034584202e-04f, 1.034355168e-04f, 1.034124366e-04f, 1.033891795e-04f, 1.033657456e-04f, 1.033421350e-04f, 1.033183478e-04f, 1.032943839e-04f, 1.032702434e-04f,
-1.032459265e-04f, 1.032214331e-04f, 1.031967633e-04f, 1.031719172e-04f, 1.031468949e-04f, 1.031216963e-04f, 1.030963216e-04f, 1.030707708e-04f, 1.030450439e-04f, 1.030191411e-04f,
-1.029930624e-04f, 1.029668078e-04f, 1.029403774e-04f, 1.029137714e-04f, 1.028869896e-04f, 1.028600322e-04f, 1.028328993e-04f, 1.028055909e-04f, 1.027781071e-04f, 1.027504479e-04f,
-1.027226135e-04f, 1.026946038e-04f, 1.026664189e-04f, 1.026380590e-04f, 1.026095240e-04f, 1.025808140e-04f, 1.025519292e-04f, 1.025228695e-04f, 1.024936350e-04f, 1.024642258e-04f,
-1.024346419e-04f, 1.024048835e-04f, 1.023749506e-04f, 1.023448432e-04f, 1.023145614e-04f, 1.022841054e-04f, 1.022534751e-04f, 1.022226706e-04f, 1.021916920e-04f, 1.021605394e-04f,
-1.021292128e-04f, 1.020977124e-04f, 1.020660380e-04f, 1.020341900e-04f, 1.020021682e-04f, 1.019699729e-04f, 1.019376040e-04f, 1.019050616e-04f, 1.018723458e-04f, 1.018394567e-04f,
-1.018063943e-04f, 1.017731587e-04f, 1.017397501e-04f, 1.017061683e-04f, 1.016724137e-04f, 1.016384861e-04f, 1.016043857e-04f, 1.015701125e-04f, 1.015356667e-04f, 1.015010483e-04f,
-1.014662574e-04f, 1.014312940e-04f, 1.013961583e-04f, 1.013608502e-04f, 1.013253699e-04f, 1.012897175e-04f, 1.012538931e-04f, 1.012178966e-04f, 1.011817282e-04f, 1.011453880e-04f,
-1.011088761e-04f, 1.010721924e-04f, 1.010353372e-04f, 1.009983104e-04f, 1.009611122e-04f, 1.009237426e-04f, 1.008862018e-04f, 1.008484898e-04f, 1.008106066e-04f, 1.007725524e-04f,
-1.007343272e-04f, 1.006959311e-04f, 1.006573643e-04f, 1.006186267e-04f, 1.005797185e-04f, 1.005406398e-04f, 1.005013906e-04f, 1.004619709e-04f, 1.004223810e-04f, 1.003826209e-04f,
-1.003426906e-04f, 1.003025903e-04f, 1.002623200e-04f, 1.002218798e-04f, 1.001812699e-04f, 1.001404902e-04f, 1.000995408e-04f, 1.000584220e-04f, 1.000171337e-04f, 9.997567598e-05f,
-9.993404901e-05f, 9.989225284e-05f, 9.985028756e-05f, 9.980815326e-05f, 9.976585002e-05f, 9.972337794e-05f, 9.968073709e-05f, 9.963792758e-05f, 9.959494949e-05f, 9.955180290e-05f,
-9.950848791e-05f, 9.946500461e-05f, 9.942135308e-05f, 9.937753342e-05f, 9.933354572e-05f, 9.928939007e-05f, 9.924506656e-05f, 9.920057527e-05f, 9.915591631e-05f, 9.911108977e-05f,
-9.906609573e-05f, 9.902093429e-05f, 9.897560554e-05f, 9.893010958e-05f, 9.888444650e-05f, 9.883861639e-05f, 9.879261934e-05f, 9.874645546e-05f, 9.870012483e-05f, 9.865362755e-05f,
-9.860696371e-05f, 9.856013342e-05f, 9.851313676e-05f, 9.846597383e-05f, 9.841864473e-05f, 9.837114955e-05f, 9.832348839e-05f, 9.827566135e-05f, 9.822766853e-05f, 9.817951002e-05f,
-9.813118591e-05f, 9.808269632e-05f, 9.803404133e-05f, 9.798522105e-05f, 9.793623558e-05f, 9.788708500e-05f, 9.783776943e-05f, 9.778828897e-05f, 9.773864370e-05f, 9.768883374e-05f,
-9.763885919e-05f, 9.758872013e-05f, 9.753841669e-05f, 9.748794895e-05f, 9.743731702e-05f, 9.738652100e-05f, 9.733556099e-05f, 9.728443710e-05f, 9.723314943e-05f, 9.718169808e-05f,
-9.713008316e-05f, 9.707830476e-05f, 9.702636300e-05f, 9.697425798e-05f, 9.692198979e-05f, 9.686955855e-05f, 9.681696436e-05f, 9.676420733e-05f, 9.671128756e-05f, 9.665820516e-05f,
-9.660496023e-05f, 9.655155288e-05f, 9.649798322e-05f, 9.644425135e-05f, 9.639035738e-05f, 9.633630142e-05f, 9.628208358e-05f, 9.622770396e-05f, 9.617316267e-05f, 9.611845982e-05f,
-9.606359552e-05f, 9.600856988e-05f, 9.595338301e-05f, 9.589803501e-05f, 9.584252601e-05f, 9.578685610e-05f, 9.573102540e-05f, 9.567503401e-05f, 9.561888206e-05f, 9.556256964e-05f,
-9.550609688e-05f, 9.544946389e-05f, 9.539267076e-05f, 9.533571763e-05f, 9.527860460e-05f, 9.522133178e-05f, 9.516389929e-05f, 9.510630724e-05f, 9.504855574e-05f, 9.499064491e-05f,
-9.493257486e-05f, 9.487434571e-05f, 9.481595756e-05f, 9.475741055e-05f, 9.469870477e-05f, 9.463984035e-05f, 9.458081741e-05f, 9.452163605e-05f, 9.446229639e-05f, 9.440279856e-05f,
-9.434314267e-05f, 9.428332883e-05f, 9.422335716e-05f, 9.416322778e-05f, 9.410294081e-05f, 9.404249636e-05f, 9.398189456e-05f, 9.392113552e-05f, 9.386021937e-05f, 9.379914621e-05f,
-9.373791618e-05f, 9.367652938e-05f, 9.361498595e-05f, 9.355328599e-05f, 9.349142964e-05f, 9.342941700e-05f, 9.336724821e-05f, 9.330492338e-05f, 9.324244264e-05f, 9.317980610e-05f,
-9.311701390e-05f, 9.305406614e-05f, 9.299096296e-05f, 9.292770447e-05f, 9.286429080e-05f, 9.280072208e-05f, 9.273699842e-05f, 9.267311996e-05f, 9.260908680e-05f, 9.254489909e-05f,
-9.248055694e-05f, 9.241606047e-05f, 9.235140982e-05f, 9.228660511e-05f, 9.222164646e-05f, 9.215653400e-05f, 9.209126786e-05f, 9.202584816e-05f, 9.196027503e-05f, 9.189454860e-05f,
-9.182866899e-05f, 9.176263633e-05f, 9.169645075e-05f, 9.163011237e-05f, 9.156362133e-05f, 9.149697775e-05f, 9.143018177e-05f, 9.136323350e-05f, 9.129613308e-05f, 9.122888064e-05f,
-9.116147631e-05f, 9.109392022e-05f, 9.102621250e-05f, 9.095835328e-05f, 9.089034269e-05f, 9.082218085e-05f, 9.075386791e-05f, 9.068540400e-05f, 9.061678924e-05f, 9.054802376e-05f,
-9.047910771e-05f, 9.041004120e-05f, 9.034082439e-05f, 9.027145738e-05f, 9.020194033e-05f, 9.013227337e-05f, 9.006245662e-05f, 8.999249022e-05f, 8.992237431e-05f, 8.985210901e-05f,
-8.978169448e-05f, 8.971113083e-05f, 8.964041820e-05f, 8.956955674e-05f, 8.949854657e-05f, 8.942738784e-05f, 8.935608067e-05f, 8.928462521e-05f, 8.921302159e-05f, 8.914126994e-05f,
-8.906937041e-05f, 8.899732313e-05f, 8.892512825e-05f, 8.885278589e-05f, 8.878029619e-05f, 8.870765930e-05f, 8.863487536e-05f, 8.856194449e-05f, 8.848886685e-05f, 8.841564256e-05f,
-8.834227178e-05f, 8.826875463e-05f, 8.819509126e-05f, 8.812128181e-05f, 8.804732643e-05f, 8.797322524e-05f, 8.789897840e-05f, 8.782458603e-05f, 8.775004830e-05f, 8.767536532e-05f,
-8.760053726e-05f, 8.752556425e-05f, 8.745044643e-05f, 8.737518394e-05f, 8.729977694e-05f, 8.722422555e-05f, 8.714852993e-05f, 8.707269022e-05f, 8.699670656e-05f, 8.692057909e-05f,
-8.684430797e-05f, 8.676789333e-05f, 8.669133533e-05f, 8.661463409e-05f, 8.653778978e-05f, 8.646080253e-05f, 8.638367250e-05f, 8.630639982e-05f, 8.622898465e-05f, 8.615142712e-05f,
-8.607372739e-05f, 8.599588561e-05f, 8.591790192e-05f, 8.583977646e-05f, 8.576150940e-05f, 8.568310086e-05f, 8.560455101e-05f, 8.552585998e-05f, 8.544702794e-05f, 8.536805502e-05f,
-8.528894138e-05f, 8.520968716e-05f, 8.513029252e-05f, 8.505075760e-05f, 8.497108256e-05f, 8.489126754e-05f, 8.481131270e-05f, 8.473121818e-05f, 8.465098414e-05f, 8.457061073e-05f,
-8.449009810e-05f, 8.440944639e-05f, 8.432865577e-05f, 8.424772638e-05f, 8.416665838e-05f, 8.408545192e-05f, 8.400410714e-05f, 8.392262422e-05f, 8.384100328e-05f, 8.375924450e-05f,
-8.367734803e-05f, 8.359531401e-05f, 8.351314260e-05f, 8.343083396e-05f, 8.334838824e-05f, 8.326580559e-05f, 8.318308618e-05f, 8.310023015e-05f, 8.301723766e-05f, 8.293410886e-05f,
-8.285084392e-05f, 8.276744299e-05f, 8.268390622e-05f, 8.260023377e-05f, 8.251642579e-05f, 8.243248245e-05f, 8.234840391e-05f, 8.226419031e-05f, 8.217984181e-05f, 8.209535858e-05f,
-8.201074078e-05f, 8.192598855e-05f, 8.184110206e-05f, 8.175608147e-05f, 8.167092693e-05f, 8.158563861e-05f, 8.150021666e-05f, 8.141466125e-05f, 8.132897253e-05f, 8.124315066e-05f,
-8.115719581e-05f, 8.107110813e-05f, 8.098488778e-05f, 8.089853493e-05f, 8.081204974e-05f, 8.072543236e-05f, 8.063868297e-05f, 8.055180171e-05f, 8.046478876e-05f, 8.037764427e-05f,
-8.029036841e-05f, 8.020296134e-05f, 8.011542322e-05f, 8.002775422e-05f, 7.993995449e-05f, 7.985202421e-05f, 7.976396353e-05f, 7.967577262e-05f, 7.958745165e-05f, 7.949900077e-05f,
-7.941042015e-05f, 7.932170996e-05f, 7.923287036e-05f, 7.914390152e-05f, 7.905480360e-05f, 7.896557677e-05f, 7.887622119e-05f, 7.878673703e-05f, 7.869712445e-05f, 7.860738362e-05f,
-7.851751471e-05f, 7.842751789e-05f, 7.833739332e-05f, 7.824714117e-05f, 7.815676160e-05f, 7.806625478e-05f, 7.797562089e-05f, 7.788486008e-05f, 7.779397254e-05f, 7.770295842e-05f,
-7.761181789e-05f, 7.752055112e-05f, 7.742915829e-05f, 7.733763956e-05f, 7.724599510e-05f, 7.715422508e-05f, 7.706232967e-05f, 7.697030904e-05f, 7.687816335e-05f, 7.678589279e-05f,
-7.669349752e-05f, 7.660097772e-05f, 7.650833354e-05f, 7.641556517e-05f, 7.632267278e-05f, 7.622965653e-05f, 7.613651660e-05f, 7.604325316e-05f, 7.594986639e-05f, 7.585635645e-05f,
-7.576272351e-05f, 7.566896776e-05f, 7.557508937e-05f, 7.548108850e-05f, 7.538696533e-05f, 7.529272003e-05f, 7.519835278e-05f, 7.510386376e-05f, 7.500925313e-05f, 7.491452107e-05f,
-7.481966775e-05f, 7.472469336e-05f, 7.462959806e-05f, 7.453438202e-05f, 7.443904544e-05f, 7.434358847e-05f, 7.424801130e-05f, 7.415231411e-05f, 7.405649706e-05f, 7.396056033e-05f,
-7.386450411e-05f, 7.376832856e-05f, 7.367203387e-05f, 7.357562021e-05f, 7.347908776e-05f, 7.338243670e-05f, 7.328566720e-05f, 7.318877944e-05f, 7.309177360e-05f, 7.299464986e-05f,
-7.289740840e-05f, 7.280004939e-05f, 7.270257301e-05f, 7.260497945e-05f, 7.250726888e-05f, 7.240944148e-05f, 7.231149743e-05f, 7.221343691e-05f, 7.211526010e-05f, 7.201696718e-05f,
-7.191855834e-05f, 7.182003374e-05f, 7.172139358e-05f, 7.162263802e-05f, 7.152376726e-05f, 7.142478148e-05f, 7.132568085e-05f, 7.122646556e-05f, 7.112713579e-05f, 7.102769172e-05f,
-7.092813353e-05f, 7.082846141e-05f, 7.072867553e-05f, 7.062877609e-05f, 7.052876326e-05f, 7.042863723e-05f, 7.032839817e-05f, 7.022804628e-05f, 7.012758174e-05f, 7.002700472e-05f,
-6.992631542e-05f, 6.982551402e-05f, 6.972460070e-05f, 6.962357564e-05f, 6.952243904e-05f, 6.942119107e-05f, 6.931983193e-05f, 6.921836179e-05f, 6.911678084e-05f, 6.901508927e-05f,
-6.891328726e-05f, 6.881137500e-05f, 6.870935268e-05f, 6.860722047e-05f, 6.850497858e-05f, 6.840262717e-05f, 6.830016645e-05f, 6.819759659e-05f, 6.809491779e-05f, 6.799213023e-05f,
-6.788923409e-05f, 6.778622958e-05f, 6.768311687e-05f, 6.757989615e-05f, 6.747656761e-05f, 6.737313143e-05f, 6.726958782e-05f, 6.716593695e-05f, 6.706217901e-05f, 6.695831420e-05f,
-6.685434270e-05f, 6.675026470e-05f, 6.664608039e-05f, 6.654178996e-05f, 6.643739360e-05f, 6.633289150e-05f, 6.622828385e-05f, 6.612357084e-05f, 6.601875266e-05f, 6.591382950e-05f,
-6.580880156e-05f, 6.570366901e-05f, 6.559843206e-05f, 6.549309090e-05f, 6.538764571e-05f, 6.528209670e-05f, 6.517644404e-05f, 6.507068793e-05f, 6.496482857e-05f, 6.485886614e-05f,
-6.475280084e-05f, 6.464663287e-05f, 6.454036240e-05f, 6.443398965e-05f, 6.432751479e-05f, 6.422093803e-05f, 6.411425955e-05f, 6.400747955e-05f, 6.390059823e-05f, 6.379361577e-05f,
-6.368653237e-05f, 6.357934823e-05f, 6.347206354e-05f, 6.336467849e-05f, 6.325719328e-05f, 6.314960811e-05f, 6.304192316e-05f, 6.293413864e-05f, 6.282625473e-05f, 6.271827164e-05f,
-6.261018956e-05f, 6.250200868e-05f, 6.239372920e-05f, 6.228535133e-05f, 6.217687524e-05f, 6.206830115e-05f, 6.195962924e-05f, 6.185085971e-05f, 6.174199276e-05f, 6.163302859e-05f,
-6.152396739e-05f, 6.141480936e-05f, 6.130555470e-05f, 6.119620361e-05f, 6.108675628e-05f, 6.097721291e-05f, 6.086757370e-05f, 6.075783884e-05f, 6.064800855e-05f, 6.053808300e-05f,
-6.042806241e-05f, 6.031794696e-05f, 6.020773687e-05f, 6.009743233e-05f, 5.998703353e-05f, 5.987654068e-05f, 5.976595398e-05f, 5.965527363e-05f, 5.954449982e-05f, 5.943363275e-05f,
-5.932267263e-05f, 5.921161966e-05f, 5.910047404e-05f, 5.898923596e-05f, 5.887790562e-05f, 5.876648324e-05f, 5.865496900e-05f, 5.854336312e-05f, 5.843166578e-05f, 5.831987720e-05f,
-5.820799757e-05f, 5.809602710e-05f, 5.798396598e-05f, 5.787181443e-05f, 5.775957263e-05f, 5.764724080e-05f, 5.753481913e-05f, 5.742230783e-05f, 5.730970710e-05f, 5.719701714e-05f,
-5.708423816e-05f, 5.697137035e-05f, 5.685841393e-05f, 5.674536909e-05f, 5.663223604e-05f, 5.651901499e-05f, 5.640570613e-05f, 5.629230966e-05f, 5.617882580e-05f, 5.606525475e-05f,
-5.595159671e-05f, 5.583785188e-05f, 5.572402048e-05f, 5.561010269e-05f, 5.549609874e-05f, 5.538200882e-05f, 5.526783314e-05f, 5.515357191e-05f, 5.503922532e-05f, 5.492479359e-05f,
-5.481027691e-05f, 5.469567551e-05f, 5.458098957e-05f, 5.446621931e-05f, 5.435136494e-05f, 5.423642665e-05f, 5.412140466e-05f, 5.400629917e-05f, 5.389111039e-05f, 5.377583853e-05f,
-5.366048378e-05f, 5.354504637e-05f, 5.342952649e-05f, 5.331392435e-05f, 5.319824016e-05f, 5.308247413e-05f, 5.296662647e-05f, 5.285069737e-05f, 5.273468706e-05f, 5.261859574e-05f,
-5.250242361e-05f, 5.238617088e-05f, 5.226983777e-05f, 5.215342448e-05f, 5.203693121e-05f, 5.192035819e-05f, 5.180370561e-05f, 5.168697368e-05f, 5.157016262e-05f, 5.145327263e-05f,
-5.133630393e-05f, 5.121925672e-05f, 5.110213120e-05f, 5.098492760e-05f, 5.086764612e-05f, 5.075028697e-05f, 5.063285035e-05f, 5.051533649e-05f, 5.039774559e-05f, 5.028007786e-05f,
-5.016233350e-05f, 5.004451274e-05f, 4.992661578e-05f, 4.980864283e-05f, 4.969059411e-05f, 4.957246982e-05f, 4.945427017e-05f, 4.933599538e-05f, 4.921764566e-05f, 4.909922121e-05f,
-4.898072226e-05f, 4.886214901e-05f, 4.874350167e-05f, 4.862478045e-05f, 4.850598558e-05f, 4.838711725e-05f, 4.826817568e-05f, 4.814916108e-05f, 4.803007368e-05f, 4.791091367e-05f,
-4.779168127e-05f, 4.767237669e-05f, 4.755300015e-05f, 4.743355186e-05f, 4.731403203e-05f, 4.719444087e-05f, 4.707477861e-05f, 4.695504544e-05f, 4.683524159e-05f, 4.671536727e-05f,
-4.659542269e-05f, 4.647540806e-05f, 4.635532361e-05f, 4.623516954e-05f, 4.611494606e-05f, 4.599465340e-05f, 4.587429176e-05f, 4.575386136e-05f, 4.563336242e-05f, 4.551279514e-05f,
-4.539215975e-05f, 4.527145646e-05f, 4.515068548e-05f, 4.502984703e-05f, 4.490894132e-05f, 4.478796857e-05f, 4.466692899e-05f, 4.454582280e-05f, 4.442465022e-05f, 4.430341145e-05f,
-4.418210672e-05f, 4.406073624e-05f, 4.393930022e-05f, 4.381779889e-05f, 4.369623246e-05f, 4.357460114e-05f, 4.345290515e-05f, 4.333114471e-05f, 4.320932003e-05f, 4.308743133e-05f,
-4.296547882e-05f, 4.284346273e-05f, 4.272138327e-05f, 4.259924065e-05f, 4.247703510e-05f, 4.235476683e-05f, 4.223243605e-05f, 4.211004299e-05f, 4.198758785e-05f, 4.186507087e-05f,
-4.174249226e-05f, 4.161985222e-05f, 4.149715099e-05f, 4.137438878e-05f, 4.125156580e-05f, 4.112868228e-05f, 4.100573843e-05f, 4.088273447e-05f, 4.075967062e-05f, 4.063654709e-05f,
-4.051336411e-05f, 4.039012190e-05f, 4.026682066e-05f, 4.014346063e-05f, 4.002004201e-05f, 3.989656503e-05f, 3.977302991e-05f, 3.964943686e-05f, 3.952578611e-05f, 3.940207787e-05f,
-3.927831237e-05f, 3.915448981e-05f, 3.903061042e-05f, 3.890667443e-05f, 3.878268204e-05f, 3.865863349e-05f, 3.853452898e-05f, 3.841036874e-05f, 3.828615298e-05f, 3.816188194e-05f,
-3.803755582e-05f, 3.791317485e-05f, 3.778873924e-05f, 3.766424923e-05f, 3.753970502e-05f, 3.741510684e-05f, 3.729045491e-05f, 3.716574944e-05f, 3.704099067e-05f, 3.691617880e-05f,
-3.679131407e-05f, 3.666639668e-05f, 3.654142687e-05f, 3.641640485e-05f, 3.629133085e-05f, 3.616620507e-05f, 3.604102776e-05f, 3.591579912e-05f, 3.579051938e-05f, 3.566518875e-05f,
-3.553980747e-05f, 3.541437575e-05f, 3.528889381e-05f, 3.516336188e-05f, 3.503778017e-05f, 3.491214891e-05f, 3.478646832e-05f, 3.466073862e-05f, 3.453496004e-05f, 3.440913279e-05f,
-3.428325710e-05f, 3.415733318e-05f, 3.403136127e-05f, 3.390534158e-05f, 3.377927434e-05f, 3.365315976e-05f, 3.352699808e-05f, 3.340078951e-05f, 3.327453427e-05f, 3.314823259e-05f,
-3.302188469e-05f, 3.289549080e-05f, 3.276905113e-05f, 3.264256591e-05f, 3.251603536e-05f, 3.238945970e-05f, 3.226283917e-05f, 3.213617397e-05f, 3.200946434e-05f, 3.188271049e-05f,
-3.175591265e-05f, 3.162907105e-05f, 3.150218590e-05f, 3.137525743e-05f, 3.124828587e-05f, 3.112127143e-05f, 3.099421434e-05f, 3.086711482e-05f, 3.073997311e-05f, 3.061278941e-05f,
-3.048556396e-05f, 3.035829698e-05f, 3.023098869e-05f, 3.010363931e-05f, 2.997624908e-05f, 2.984881821e-05f, 2.972134693e-05f, 2.959383546e-05f, 2.946628403e-05f, 2.933869286e-05f,
-2.921106217e-05f, 2.908339219e-05f, 2.895568315e-05f, 2.882793526e-05f, 2.870014876e-05f, 2.857232386e-05f, 2.844446080e-05f, 2.831655979e-05f, 2.818862106e-05f, 2.806064484e-05f,
-2.793263135e-05f, 2.780458081e-05f, 2.767649346e-05f, 2.754836950e-05f, 2.742020918e-05f, 2.729201271e-05f, 2.716378032e-05f, 2.703551224e-05f, 2.690720868e-05f, 2.677886988e-05f,
-2.665049606e-05f, 2.652208744e-05f, 2.639364426e-05f, 2.626516672e-05f, 2.613665507e-05f, 2.600810953e-05f, 2.587953032e-05f, 2.575091766e-05f, 2.562227179e-05f, 2.549359292e-05f,
-2.536488129e-05f, 2.523613712e-05f, 2.510736063e-05f, 2.497855205e-05f, 2.484971161e-05f, 2.472083953e-05f, 2.459193604e-05f, 2.446300136e-05f, 2.433403571e-05f, 2.420503934e-05f,
-2.407601245e-05f, 2.394695528e-05f, 2.381786806e-05f, 2.368875100e-05f, 2.355960434e-05f, 2.343042830e-05f, 2.330122310e-05f, 2.317198898e-05f, 2.304272615e-05f, 2.291343486e-05f,
-2.278411531e-05f, 2.265476774e-05f, 2.252539237e-05f, 2.239598944e-05f, 2.226655916e-05f, 2.213710176e-05f, 2.200761748e-05f, 2.187810653e-05f, 2.174856914e-05f, 2.161900554e-05f,
-2.148941595e-05f, 2.135980061e-05f, 2.123015973e-05f, 2.110049355e-05f, 2.097080229e-05f, 2.084108617e-05f, 2.071134544e-05f, 2.058158030e-05f, 2.045179099e-05f, 2.032197773e-05f,
-2.019214076e-05f, 2.006228029e-05f, 1.993239656e-05f, 1.980248979e-05f, 1.967256020e-05f, 1.954260803e-05f, 1.941263351e-05f, 1.928263685e-05f, 1.915261829e-05f, 1.902257804e-05f,
-1.889251635e-05f, 1.876243344e-05f, 1.863232953e-05f, 1.850220484e-05f, 1.837205962e-05f, 1.824189408e-05f, 1.811170844e-05f, 1.798150295e-05f, 1.785127782e-05f, 1.772103329e-05f,
-1.759076957e-05f, 1.746048690e-05f, 1.733018550e-05f, 1.719986560e-05f, 1.706952743e-05f, 1.693917122e-05f, 1.680879719e-05f, 1.667840556e-05f, 1.654799657e-05f, 1.641757044e-05f,
-1.628712741e-05f, 1.615666769e-05f, 1.602619152e-05f, 1.589569911e-05f, 1.576519071e-05f, 1.563466653e-05f, 1.550412681e-05f, 1.537357177e-05f, 1.524300163e-05f, 1.511241663e-05f,
-1.498181700e-05f, 1.485120295e-05f, 1.472057472e-05f, 1.458993253e-05f, 1.445927661e-05f, 1.432860720e-05f, 1.419792451e-05f, 1.406722877e-05f, 1.393652021e-05f, 1.380579906e-05f,
-1.367506555e-05f, 1.354431989e-05f, 1.341356233e-05f, 1.328279308e-05f, 1.315201238e-05f, 1.302122045e-05f, 1.289041752e-05f, 1.275960381e-05f, 1.262877956e-05f, 1.249794499e-05f,
-1.236710033e-05f, 1.223624580e-05f, 1.210538163e-05f, 1.197450805e-05f, 1.184362529e-05f, 1.171273358e-05f, 1.158183313e-05f, 1.145092419e-05f, 1.132000697e-05f, 1.118908170e-05f,
-1.105814861e-05f, 1.092720793e-05f, 1.079625989e-05f, 1.066530471e-05f, 1.053434261e-05f, 1.040337384e-05f, 1.027239860e-05f, 1.014141714e-05f, 1.001042968e-05f, 9.879436437e-06f,
-9.748437650e-06f, 9.617433542e-06f, 9.486424341e-06f, 9.355410273e-06f, 9.224391567e-06f, 9.093368447e-06f, 8.962341143e-06f, 8.831309881e-06f, 8.700274888e-06f, 8.569236391e-06f,
-8.438194617e-06f, 8.307149793e-06f, 8.176102147e-06f, 8.045051904e-06f, 7.913999292e-06f, 7.782944539e-06f, 7.651887870e-06f, 7.520829513e-06f, 7.389769695e-06f, 7.258708643e-06f,
-7.127646583e-06f, 6.996583743e-06f, 6.865520349e-06f, 6.734456627e-06f, 6.603392806e-06f, 6.472329111e-06f, 6.341265770e-06f, 6.210203008e-06f, 6.079141054e-06f, 5.948080132e-06f,
-5.817020471e-06f, 5.685962297e-06f, 5.554905836e-06f, 5.423851315e-06f, 5.292798960e-06f, 5.161748999e-06f, 5.030701657e-06f, 4.899657162e-06f, 4.768615739e-06f, 4.637577615e-06f,
-4.506543017e-06f, 4.375512170e-06f, 4.244485302e-06f, 4.113462639e-06f, 3.982444406e-06f, 3.851430831e-06f, 3.720422139e-06f, 3.589418557e-06f, 3.458420311e-06f, 3.327427627e-06f,
-3.196440731e-06f, 3.065459850e-06f, 2.934485209e-06f, 2.803517035e-06f, 2.672555554e-06f, 2.541600990e-06f, 2.410653572e-06f, 2.279713524e-06f, 2.148781072e-06f, 2.017856443e-06f,
-1.886939861e-06f, 1.756031554e-06f, 1.625131746e-06f, 1.494240664e-06f, 1.363358532e-06f, 1.232485577e-06f, 1.101622025e-06f, 9.707681006e-07f, 8.399240296e-07f, 7.090900377e-07f,
-5.782663502e-07f, 4.474531926e-07f, 3.166507904e-07f, 1.858593688e-07f, 5.507915326e-08f, -7.568963102e-08f, -2.064467588e-07f, -3.371920048e-07f, -4.679251439e-07f, -5.986459509e-07f,
--7.293542009e-07f, -8.600496687e-07f, -9.907321294e-07f, -1.121401358e-06f, -1.252057129e-06f, -1.382699219e-06f, -1.513327402e-06f, -1.643941453e-06f, -1.774541149e-06f, -1.905126263e-06f,
--2.035696572e-06f, -2.166251850e-06f, -2.296791874e-06f, -2.427316418e-06f, -2.557825259e-06f, -2.688318171e-06f, -2.818794931e-06f, -2.949255315e-06f, -3.079699097e-06f, -3.210126053e-06f,
--3.340535961e-06f, -3.470928594e-06f, -3.601303730e-06f, -3.731661144e-06f, -3.862000612e-06f, -3.992321911e-06f, -4.122624816e-06f, -4.252909104e-06f, -4.383174551e-06f, -4.513420932e-06f,
--4.643648025e-06f, -4.773855607e-06f, -4.904043452e-06f, -5.034211338e-06f, -5.164359041e-06f, -5.294486339e-06f, -5.424593007e-06f, -5.554678822e-06f, -5.684743561e-06f, -5.814787001e-06f,
--5.944808919e-06f, -6.074809092e-06f, -6.204787296e-06f, -6.334743309e-06f, -6.464676908e-06f, -6.594587870e-06f, -6.724475973e-06f, -6.854340992e-06f, -6.984182707e-06f, -7.114000894e-06f,
--7.243795331e-06f, -7.373565795e-06f, -7.503312063e-06f, -7.633033915e-06f, -7.762731126e-06f, -7.892403476e-06f, -8.022050741e-06f, -8.151672701e-06f, -8.281269131e-06f, -8.410839812e-06f,
--8.540384520e-06f, -8.669903035e-06f, -8.799395133e-06f, -8.928860594e-06f, -9.058299196e-06f, -9.187710717e-06f, -9.317094936e-06f, -9.446451631e-06f, -9.575780581e-06f, -9.705081565e-06f,
--9.834354361e-06f, -9.963598748e-06f, -1.009281450e-05f, -1.022200141e-05f, -1.035115925e-05f, -1.048028779e-05f, -1.060938681e-05f, -1.073845611e-05f, -1.086749544e-05f, -1.099650461e-05f,
--1.112548337e-05f, -1.125443152e-05f, -1.138334883e-05f, -1.151223509e-05f, -1.164109006e-05f, -1.176991354e-05f, -1.189870530e-05f, -1.202746513e-05f, -1.215619279e-05f, -1.228488808e-05f,
--1.241355076e-05f, -1.254218063e-05f, -1.267077747e-05f, -1.279934105e-05f, -1.292787115e-05f, -1.305636755e-05f, -1.318483004e-05f, -1.331325840e-05f, -1.344165240e-05f, -1.357001183e-05f,
--1.369833647e-05f, -1.382662609e-05f, -1.395488049e-05f, -1.408309944e-05f, -1.421128272e-05f, -1.433943012e-05f, -1.446754141e-05f, -1.459561638e-05f, -1.472365481e-05f, -1.485165648e-05f,
--1.497962117e-05f, -1.510754867e-05f, -1.523543875e-05f, -1.536329120e-05f, -1.549110580e-05f, -1.561888234e-05f, -1.574662059e-05f, -1.587432033e-05f, -1.600198136e-05f, -1.612960344e-05f,
--1.625718638e-05f, -1.638472994e-05f, -1.651223391e-05f, -1.663969807e-05f, -1.676712221e-05f, -1.689450611e-05f, -1.702184955e-05f, -1.714915232e-05f, -1.727641419e-05f, -1.740363496e-05f,
--1.753081441e-05f, -1.765795231e-05f, -1.778504846e-05f, -1.791210263e-05f, -1.803911461e-05f, -1.816608419e-05f, -1.829301115e-05f, -1.841989527e-05f, -1.854673634e-05f, -1.867353414e-05f,
--1.880028846e-05f, -1.892699908e-05f, -1.905366578e-05f, -1.918028835e-05f, -1.930686658e-05f, -1.943340025e-05f, -1.955988914e-05f, -1.968633304e-05f, -1.981273174e-05f, -1.993908501e-05f,
--2.006539266e-05f, -2.019165445e-05f, -2.031787018e-05f, -2.044403963e-05f, -2.057016259e-05f, -2.069623885e-05f, -2.082226818e-05f, -2.094825038e-05f, -2.107418524e-05f, -2.120007253e-05f,
--2.132591204e-05f, -2.145170357e-05f, -2.157744690e-05f, -2.170314181e-05f, -2.182878809e-05f, -2.195438554e-05f, -2.207993392e-05f, -2.220543304e-05f, -2.233088268e-05f, -2.245628263e-05f,
--2.258163267e-05f, -2.270693259e-05f, -2.283218219e-05f, -2.295738124e-05f, -2.308252953e-05f, -2.320762686e-05f, -2.333267301e-05f, -2.345766777e-05f, -2.358261093e-05f, -2.370750227e-05f,
--2.383234159e-05f, -2.395712867e-05f, -2.408186331e-05f, -2.420654528e-05f, -2.433117438e-05f, -2.445575041e-05f, -2.458027314e-05f, -2.470474236e-05f, -2.482915788e-05f, -2.495351947e-05f,
--2.507782692e-05f, -2.520208003e-05f, -2.532627859e-05f, -2.545042238e-05f, -2.557451119e-05f, -2.569854482e-05f, -2.582252306e-05f, -2.594644569e-05f, -2.607031251e-05f, -2.619412330e-05f,
--2.631787786e-05f, -2.644157599e-05f, -2.656521746e-05f, -2.668880207e-05f, -2.681232961e-05f, -2.693579987e-05f, -2.705921265e-05f, -2.718256774e-05f, -2.730586492e-05f, -2.742910400e-05f,
--2.755228475e-05f, -2.767540698e-05f, -2.779847047e-05f, -2.792147502e-05f, -2.804442042e-05f, -2.816730647e-05f, -2.829013295e-05f, -2.841289965e-05f, -2.853560638e-05f, -2.865825292e-05f,
--2.878083907e-05f, -2.890336462e-05f, -2.902582937e-05f, -2.914823310e-05f, -2.927057561e-05f, -2.939285669e-05f, -2.951507614e-05f, -2.963723376e-05f, -2.975932933e-05f, -2.988136265e-05f,
--3.000333352e-05f, -3.012524173e-05f, -3.024708707e-05f, -3.036886934e-05f, -3.049058833e-05f, -3.061224384e-05f, -3.073383567e-05f, -3.085536360e-05f, -3.097682744e-05f, -3.109822698e-05f,
--3.121956201e-05f, -3.134083233e-05f, -3.146203775e-05f, -3.158317804e-05f, -3.170425302e-05f, -3.182526247e-05f, -3.194620619e-05f, -3.206708398e-05f, -3.218789563e-05f, -3.230864095e-05f,
--3.242931973e-05f, -3.254993176e-05f, -3.267047685e-05f, -3.279095478e-05f, -3.291136537e-05f, -3.303170840e-05f, -3.315198367e-05f, -3.327219099e-05f, -3.339233014e-05f, -3.351240093e-05f,
--3.363240316e-05f, -3.375233662e-05f, -3.387220112e-05f, -3.399199644e-05f, -3.411172240e-05f, -3.423137878e-05f, -3.435096540e-05f, -3.447048204e-05f, -3.458992851e-05f, -3.470930460e-05f,
--3.482861012e-05f, -3.494784487e-05f, -3.506700865e-05f, -3.518610125e-05f, -3.530512247e-05f, -3.542407212e-05f, -3.554295000e-05f, -3.566175591e-05f, -3.578048965e-05f, -3.589915101e-05f,
--3.601773981e-05f, -3.613625584e-05f, -3.625469890e-05f, -3.637306880e-05f, -3.649136533e-05f, -3.660958830e-05f, -3.672773751e-05f, -3.684581277e-05f, -3.696381387e-05f, -3.708174061e-05f,
--3.719959281e-05f, -3.731737025e-05f, -3.743507276e-05f, -3.755270012e-05f, -3.767025214e-05f, -3.778772862e-05f, -3.790512938e-05f, -3.802245420e-05f, -3.813970290e-05f, -3.825687528e-05f,
--3.837397114e-05f, -3.849099029e-05f, -3.860793253e-05f, -3.872479766e-05f, -3.884158550e-05f, -3.895829584e-05f, -3.907492849e-05f, -3.919148325e-05f, -3.930795994e-05f, -3.942435835e-05f,
--3.954067830e-05f, -3.965691958e-05f, -3.977308200e-05f, -3.988916537e-05f, -4.000516950e-05f, -4.012109419e-05f, -4.023693924e-05f, -4.035270447e-05f, -4.046838968e-05f, -4.058399468e-05f,
--4.069951927e-05f, -4.081496327e-05f, -4.093032647e-05f, -4.104560869e-05f, -4.116080974e-05f, -4.127592942e-05f, -4.139096754e-05f, -4.150592391e-05f, -4.162079833e-05f, -4.173559063e-05f,
--4.185030059e-05f, -4.196492804e-05f, -4.207947278e-05f, -4.219393462e-05f, -4.230831338e-05f, -4.242260885e-05f, -4.253682085e-05f, -4.265094919e-05f, -4.276499368e-05f, -4.287895413e-05f,
--4.299283035e-05f, -4.310662214e-05f, -4.322032933e-05f, -4.333395172e-05f, -4.344748913e-05f, -4.356094135e-05f, -4.367430821e-05f, -4.378758952e-05f, -4.390078508e-05f, -4.401389471e-05f,
--4.412691822e-05f, -4.423985543e-05f, -4.435270614e-05f, -4.446547017e-05f, -4.457814733e-05f, -4.469073743e-05f, -4.480324029e-05f, -4.491565571e-05f, -4.502798352e-05f, -4.514022352e-05f,
--4.525237554e-05f, -4.536443937e-05f, -4.547641485e-05f, -4.558830177e-05f, -4.570009996e-05f, -4.581180922e-05f, -4.592342938e-05f, -4.603496025e-05f, -4.614640165e-05f, -4.625775338e-05f,
--4.636901527e-05f, -4.648018712e-05f, -4.659126876e-05f, -4.670226000e-05f, -4.681316066e-05f, -4.692397055e-05f, -4.703468949e-05f, -4.714531730e-05f, -4.725585378e-05f, -4.736629877e-05f,
--4.747665207e-05f, -4.758691351e-05f, -4.769708290e-05f, -4.780716005e-05f, -4.791714479e-05f, -4.802703694e-05f, -4.813683630e-05f, -4.824654271e-05f, -4.835615597e-05f, -4.846567591e-05f,
--4.857510235e-05f, -4.868443510e-05f, -4.879367399e-05f, -4.890281882e-05f, -4.901186943e-05f, -4.912082564e-05f, -4.922968725e-05f, -4.933845410e-05f, -4.944712600e-05f, -4.955570277e-05f,
--4.966418423e-05f, -4.977257021e-05f, -4.988086052e-05f, -4.998905499e-05f, -5.009715343e-05f, -5.020515568e-05f, -5.031306154e-05f, -5.042087085e-05f, -5.052858342e-05f, -5.063619907e-05f,
--5.074371764e-05f, -5.085113893e-05f, -5.095846278e-05f, -5.106568901e-05f, -5.117281744e-05f, -5.127984788e-05f, -5.138678018e-05f, -5.149361415e-05f, -5.160034961e-05f, -5.170698638e-05f,
--5.181352430e-05f, -5.191996319e-05f, -5.202630287e-05f, -5.213254316e-05f, -5.223868390e-05f, -5.234472490e-05f, -5.245066600e-05f, -5.255650701e-05f, -5.266224776e-05f, -5.276788808e-05f,
--5.287342780e-05f, -5.297886674e-05f, -5.308420472e-05f, -5.318944158e-05f, -5.329457714e-05f, -5.339961123e-05f, -5.350454368e-05f, -5.360937430e-05f, -5.371410294e-05f, -5.381872942e-05f,
--5.392325356e-05f, -5.402767520e-05f, -5.413199416e-05f, -5.423621027e-05f, -5.434032336e-05f, -5.444433326e-05f, -5.454823980e-05f, -5.465204281e-05f, -5.475574211e-05f, -5.485933754e-05f,
--5.496282893e-05f, -5.506621611e-05f, -5.516949890e-05f, -5.527267714e-05f, -5.537575066e-05f, -5.547871929e-05f, -5.558158286e-05f, -5.568434120e-05f, -5.578699415e-05f, -5.588954153e-05f,
--5.599198317e-05f, -5.609431892e-05f, -5.619654860e-05f, -5.629867204e-05f, -5.640068908e-05f, -5.650259955e-05f, -5.660440328e-05f, -5.670610011e-05f, -5.680768987e-05f, -5.690917239e-05f,
--5.701054751e-05f, -5.711181505e-05f, -5.721297487e-05f, -5.731402678e-05f, -5.741497063e-05f, -5.751580625e-05f, -5.761653347e-05f, -5.771715214e-05f, -5.781766208e-05f, -5.791806313e-05f,
--5.801835512e-05f, -5.811853791e-05f, -5.821861131e-05f, -5.831857516e-05f, -5.841842931e-05f, -5.851817359e-05f, -5.861780784e-05f, -5.871733189e-05f, -5.881674558e-05f, -5.891604875e-05f,
--5.901524124e-05f, -5.911432288e-05f, -5.921329352e-05f, -5.931215299e-05f, -5.941090114e-05f, -5.950953779e-05f, -5.960806279e-05f, -5.970647598e-05f, -5.980477721e-05f, -5.990296629e-05f,
--6.000104309e-05f, -6.009900744e-05f, -6.019685917e-05f, -6.029459814e-05f, -6.039222417e-05f, -6.048973712e-05f, -6.058713682e-05f, -6.068442312e-05f, -6.078159585e-05f, -6.087865486e-05f,
--6.097559999e-05f, -6.107243108e-05f, -6.116914797e-05f, -6.126575052e-05f, -6.136223856e-05f, -6.145861192e-05f, -6.155487047e-05f, -6.165101404e-05f, -6.174704247e-05f, -6.184295562e-05f,
--6.193875331e-05f, -6.203443540e-05f, -6.213000174e-05f, -6.222545216e-05f, -6.232078652e-05f, -6.241600465e-05f, -6.251110640e-05f, -6.260609163e-05f, -6.270096017e-05f, -6.279571187e-05f,
--6.289034657e-05f, -6.298486414e-05f, -6.307926440e-05f, -6.317354721e-05f, -6.326771241e-05f, -6.336175986e-05f, -6.345568940e-05f, -6.354950088e-05f, -6.364319414e-05f, -6.373676904e-05f,
--6.383022542e-05f, -6.392356313e-05f, -6.401678202e-05f, -6.410988195e-05f, -6.420286275e-05f, -6.429572429e-05f, -6.438846640e-05f, -6.448108894e-05f, -6.457359176e-05f, -6.466597471e-05f,
--6.475823765e-05f, -6.485038041e-05f, -6.494240286e-05f, -6.503430484e-05f, -6.512608621e-05f, -6.521774682e-05f, -6.530928651e-05f, -6.540070515e-05f, -6.549200259e-05f, -6.558317867e-05f,
--6.567423325e-05f, -6.576516619e-05f, -6.585597733e-05f, -6.594666654e-05f, -6.603723366e-05f, -6.612767855e-05f, -6.621800106e-05f, -6.630820105e-05f, -6.639827838e-05f, -6.648823289e-05f,
--6.657806444e-05f, -6.666777289e-05f, -6.675735810e-05f, -6.684681992e-05f, -6.693615820e-05f, -6.702537280e-05f, -6.711446359e-05f, -6.720343041e-05f, -6.729227312e-05f, -6.738099158e-05f,
--6.746958565e-05f, -6.755805519e-05f, -6.764640005e-05f, -6.773462009e-05f, -6.782271517e-05f, -6.791068515e-05f, -6.799852988e-05f, -6.808624923e-05f, -6.817384306e-05f, -6.826131123e-05f,
--6.834865359e-05f, -6.843587000e-05f, -6.852296033e-05f, -6.860992443e-05f, -6.869676217e-05f, -6.878347341e-05f, -6.887005801e-05f, -6.895651583e-05f, -6.904284673e-05f, -6.912905057e-05f,
--6.921512722e-05f, -6.930107653e-05f, -6.938689838e-05f, -6.947259262e-05f, -6.955815912e-05f, -6.964359773e-05f, -6.972890833e-05f, -6.981409078e-05f, -6.989914493e-05f, -6.998407066e-05f,
--7.006886783e-05f, -7.015353631e-05f, -7.023807595e-05f, -7.032248663e-05f, -7.040676821e-05f, -7.049092055e-05f, -7.057494352e-05f, -7.065883699e-05f, -7.074260082e-05f, -7.082623488e-05f,
--7.090973904e-05f, -7.099311316e-05f, -7.107635712e-05f, -7.115947077e-05f, -7.124245399e-05f, -7.132530664e-05f, -7.140802859e-05f, -7.149061971e-05f, -7.157307988e-05f, -7.165540895e-05f,
--7.173760680e-05f, -7.181967329e-05f, -7.190160830e-05f, -7.198341170e-05f, -7.206508336e-05f, -7.214662314e-05f, -7.222803092e-05f, -7.230930656e-05f, -7.239044995e-05f, -7.247146094e-05f,
--7.255233942e-05f, -7.263308525e-05f, -7.271369831e-05f, -7.279417847e-05f, -7.287452560e-05f, -7.295473957e-05f, -7.303482025e-05f, -7.311476753e-05f, -7.319458127e-05f, -7.327426135e-05f,
--7.335380763e-05f, -7.343322000e-05f, -7.351249834e-05f, -7.359164250e-05f, -7.367065238e-05f, -7.374952784e-05f, -7.382826876e-05f, -7.390687501e-05f, -7.398534648e-05f, -7.406368303e-05f,
--7.414188455e-05f, -7.421995091e-05f, -7.429788198e-05f, -7.437567765e-05f, -7.445333779e-05f, -7.453086228e-05f, -7.460825100e-05f, -7.468550383e-05f, -7.476262064e-05f, -7.483960131e-05f,
--7.491644572e-05f, -7.499315375e-05f, -7.506972529e-05f, -7.514616020e-05f, -7.522245837e-05f, -7.529861968e-05f, -7.537464401e-05f, -7.545053124e-05f, -7.552628125e-05f, -7.560189393e-05f,
--7.567736915e-05f, -7.575270679e-05f, -7.582790674e-05f, -7.590296888e-05f, -7.597789309e-05f, -7.605267926e-05f, -7.612732726e-05f, -7.620183698e-05f, -7.627620830e-05f, -7.635044112e-05f,
--7.642453530e-05f, -7.649849073e-05f, -7.657230731e-05f, -7.664598491e-05f, -7.671952342e-05f, -7.679292272e-05f, -7.686618270e-05f, -7.693930324e-05f, -7.701228424e-05f, -7.708512557e-05f,
--7.715782712e-05f, -7.723038878e-05f, -7.730281044e-05f, -7.737509199e-05f, -7.744723330e-05f, -7.751923427e-05f, -7.759109479e-05f, -7.766281474e-05f, -7.773439401e-05f, -7.780583249e-05f,
--7.787713008e-05f, -7.794828665e-05f, -7.801930210e-05f, -7.809017632e-05f, -7.816090920e-05f, -7.823150062e-05f, -7.830195049e-05f, -7.837225868e-05f, -7.844242509e-05f, -7.851244962e-05f,
--7.858233214e-05f, -7.865207256e-05f, -7.872167077e-05f, -7.879112665e-05f, -7.886044011e-05f, -7.892961103e-05f, -7.899863930e-05f, -7.906752483e-05f, -7.913626749e-05f, -7.920486720e-05f,
--7.927332383e-05f, -7.934163729e-05f, -7.940980747e-05f, -7.947783426e-05f, -7.954571757e-05f, -7.961345727e-05f, -7.968105328e-05f, -7.974850548e-05f, -7.981581377e-05f, -7.988297806e-05f,
--7.994999822e-05f, -8.001687417e-05f, -8.008360579e-05f, -8.015019299e-05f, -8.021663567e-05f, -8.028293371e-05f, -8.034908703e-05f, -8.041509551e-05f, -8.048095906e-05f, -8.054667757e-05f,
--8.061225095e-05f, -8.067767909e-05f, -8.074296190e-05f, -8.080809926e-05f, -8.087309109e-05f, -8.093793729e-05f, -8.100263775e-05f, -8.106719237e-05f, -8.113160106e-05f, -8.119586372e-05f,
--8.125998025e-05f, -8.132395055e-05f, -8.138777453e-05f, -8.145145208e-05f, -8.151498311e-05f, -8.157836752e-05f, -8.164160522e-05f, -8.170469611e-05f, -8.176764010e-05f, -8.183043708e-05f,
--8.189308696e-05f, -8.195558965e-05f, -8.201794504e-05f, -8.208015306e-05f, -8.214221360e-05f, -8.220412656e-05f, -8.226589186e-05f, -8.232750940e-05f, -8.238897908e-05f, -8.245030082e-05f,
--8.251147452e-05f, -8.257250008e-05f, -8.263337742e-05f, -8.269410645e-05f, -8.275468706e-05f, -8.281511917e-05f, -8.287540269e-05f, -8.293553753e-05f, -8.299552359e-05f, -8.305536078e-05f,
--8.311504902e-05f, -8.317458822e-05f, -8.323397828e-05f, -8.329321911e-05f, -8.335231063e-05f, -8.341125275e-05f, -8.347004538e-05f, -8.352868842e-05f, -8.358718180e-05f, -8.364552542e-05f,
--8.370371919e-05f, -8.376176304e-05f, -8.381965686e-05f, -8.387740058e-05f, -8.393499411e-05f, -8.399243736e-05f, -8.404973025e-05f, -8.410687268e-05f, -8.416386458e-05f, -8.422070585e-05f,
--8.427739642e-05f, -8.433393620e-05f, -8.439032511e-05f, -8.444656305e-05f, -8.450264995e-05f, -8.455858572e-05f, -8.461437029e-05f, -8.467000356e-05f, -8.472548545e-05f, -8.478081588e-05f,
--8.483599477e-05f, -8.489102204e-05f, -8.494589760e-05f, -8.500062138e-05f, -8.505519328e-05f, -8.510961324e-05f, -8.516388117e-05f, -8.521799699e-05f, -8.527196062e-05f, -8.532577197e-05f,
--8.537943098e-05f, -8.543293756e-05f, -8.548629163e-05f, -8.553949312e-05f, -8.559254193e-05f, -8.564543801e-05f, -8.569818126e-05f, -8.575077161e-05f, -8.580320899e-05f, -8.585549331e-05f,
--8.590762450e-05f, -8.595960248e-05f, -8.601142718e-05f, -8.606309852e-05f, -8.611461642e-05f, -8.616598082e-05f, -8.621719162e-05f, -8.626824876e-05f, -8.631915217e-05f, -8.636990177e-05f,
--8.642049748e-05f, -8.647093923e-05f, -8.652122695e-05f, -8.657136056e-05f, -8.662133999e-05f, -8.667116518e-05f, -8.672083603e-05f, -8.677035249e-05f, -8.681971449e-05f, -8.686892194e-05f,
--8.691797478e-05f, -8.696687294e-05f, -8.701561634e-05f, -8.706420492e-05f, -8.711263860e-05f, -8.716091732e-05f, -8.720904101e-05f, -8.725700959e-05f, -8.730482299e-05f, -8.735248116e-05f,
--8.739998401e-05f, -8.744733148e-05f, -8.749452351e-05f, -8.754156002e-05f, -8.758844095e-05f, -8.763516622e-05f, -8.768173578e-05f, -8.772814956e-05f, -8.777440748e-05f, -8.782050949e-05f,
--8.786645551e-05f, -8.791224549e-05f, -8.795787935e-05f, -8.800335703e-05f, -8.804867847e-05f, -8.809384359e-05f, -8.813885235e-05f, -8.818370467e-05f, -8.822840049e-05f, -8.827293974e-05f,
--8.831732237e-05f, -8.836154831e-05f, -8.840561749e-05f, -8.844952986e-05f, -8.849328535e-05f, -8.853688390e-05f, -8.858032546e-05f, -8.862360995e-05f, -8.866673731e-05f, -8.870970750e-05f,
--8.875252044e-05f, -8.879517608e-05f, -8.883767435e-05f, -8.888001520e-05f, -8.892219856e-05f, -8.896422439e-05f, -8.900609261e-05f, -8.904780318e-05f, -8.908935602e-05f, -8.913075109e-05f,
--8.917198833e-05f, -8.921306768e-05f, -8.925398909e-05f, -8.929475248e-05f, -8.933535782e-05f, -8.937580504e-05f, -8.941609409e-05f, -8.945622491e-05f, -8.949619745e-05f, -8.953601165e-05f,
--8.957566745e-05f, -8.961516480e-05f, -8.965450366e-05f, -8.969368395e-05f, -8.973270564e-05f, -8.977156866e-05f, -8.981027297e-05f, -8.984881850e-05f, -8.988720521e-05f, -8.992543305e-05f,
--8.996350196e-05f, -9.000141189e-05f, -9.003916279e-05f, -9.007675461e-05f, -9.011418730e-05f, -9.015146081e-05f, -9.018857508e-05f, -9.022553007e-05f, -9.026232572e-05f, -9.029896199e-05f,
--9.033543884e-05f, -9.037175619e-05f, -9.040791402e-05f, -9.044391227e-05f, -9.047975090e-05f, -9.051542985e-05f, -9.055094908e-05f, -9.058630854e-05f, -9.062150818e-05f, -9.065654797e-05f,
--9.069142784e-05f, -9.072614775e-05f, -9.076070767e-05f, -9.079510754e-05f, -9.082934732e-05f, -9.086342695e-05f, -9.089734641e-05f, -9.093110564e-05f, -9.096470460e-05f, -9.099814325e-05f,
--9.103142154e-05f, -9.106453942e-05f, -9.109749686e-05f, -9.113029382e-05f, -9.116293024e-05f, -9.119540609e-05f, -9.122772133e-05f, -9.125987591e-05f, -9.129186980e-05f, -9.132370294e-05f,
--9.135537531e-05f, -9.138688686e-05f, -9.141823754e-05f, -9.144942733e-05f, -9.148045618e-05f, -9.151132405e-05f, -9.154203090e-05f, -9.157257669e-05f, -9.160296139e-05f, -9.163318495e-05f,
--9.166324735e-05f, -9.169314853e-05f, -9.172288847e-05f, -9.175246712e-05f, -9.178188445e-05f, -9.181114042e-05f, -9.184023500e-05f, -9.186916815e-05f, -9.189793983e-05f, -9.192655002e-05f,
--9.195499866e-05f, -9.198328574e-05f, -9.201141121e-05f, -9.203937504e-05f, -9.206717719e-05f, -9.209481764e-05f, -9.212229634e-05f, -9.214961327e-05f, -9.217676840e-05f, -9.220376168e-05f,
--9.223059309e-05f, -9.225726260e-05f, -9.228377017e-05f, -9.231011577e-05f, -9.233629937e-05f, -9.236232094e-05f, -9.238818046e-05f, -9.241387788e-05f, -9.243941318e-05f, -9.246478633e-05f,
--9.248999729e-05f, -9.251504605e-05f, -9.253993257e-05f, -9.256465683e-05f, -9.258921878e-05f, -9.261361842e-05f, -9.263785570e-05f, -9.266193060e-05f, -9.268584310e-05f, -9.270959316e-05f,
--9.273318077e-05f, -9.275660588e-05f, -9.277986849e-05f, -9.280296855e-05f, -9.282590605e-05f, -9.284868097e-05f, -9.287129327e-05f, -9.289374293e-05f, -9.291602992e-05f, -9.293815423e-05f,
--9.296011583e-05f, -9.298191469e-05f, -9.300355080e-05f, -9.302502412e-05f, -9.304633464e-05f, -9.306748234e-05f, -9.308846718e-05f, -9.310928916e-05f, -9.312994824e-05f, -9.315044442e-05f,
--9.317077765e-05f, -9.319094794e-05f, -9.321095524e-05f, -9.323079955e-05f, -9.325048085e-05f, -9.326999911e-05f, -9.328935432e-05f, -9.330854645e-05f, -9.332757550e-05f, -9.334644143e-05f,
--9.336514423e-05f, -9.338368389e-05f, -9.340206038e-05f, -9.342027369e-05f, -9.343832381e-05f, -9.345621070e-05f, -9.347393437e-05f, -9.349149479e-05f, -9.350889194e-05f, -9.352612582e-05f,
--9.354319640e-05f, -9.356010367e-05f, -9.357684762e-05f, -9.359342823e-05f, -9.360984549e-05f, -9.362609937e-05f, -9.364218988e-05f, -9.365811700e-05f, -9.367388070e-05f, -9.368948099e-05f,
--9.370491784e-05f, -9.372019126e-05f, -9.373530121e-05f, -9.375024770e-05f, -9.376503070e-05f, -9.377965022e-05f, -9.379410623e-05f, -9.380839874e-05f, -9.382252772e-05f, -9.383649317e-05f,
--9.385029508e-05f, -9.386393343e-05f, -9.387740823e-05f, -9.389071946e-05f, -9.390386711e-05f, -9.391685118e-05f, -9.392967165e-05f, -9.394232852e-05f, -9.395482178e-05f, -9.396715143e-05f,
--9.397931745e-05f, -9.399131985e-05f, -9.400315861e-05f, -9.401483373e-05f, -9.402634520e-05f, -9.403769302e-05f, -9.404887719e-05f, -9.405989769e-05f, -9.407075452e-05f, -9.408144769e-05f,
--9.409197717e-05f, -9.410234298e-05f, -9.411254511e-05f, -9.412258356e-05f, -9.413245831e-05f, -9.414216938e-05f, -9.415171675e-05f, -9.416110042e-05f, -9.417032040e-05f, -9.417937669e-05f,
--9.418826927e-05f, -9.419699815e-05f, -9.420556334e-05f, -9.421396482e-05f, -9.422220260e-05f, -9.423027668e-05f, -9.423818707e-05f, -9.424593375e-05f, -9.425351673e-05f, -9.426093602e-05f,
--9.426819161e-05f, -9.427528351e-05f, -9.428221172e-05f, -9.428897624e-05f, -9.429557708e-05f, -9.430201424e-05f, -9.430828771e-05f, -9.431439751e-05f, -9.432034364e-05f, -9.432612610e-05f,
--9.433174490e-05f, -9.433720005e-05f, -9.434249154e-05f, -9.434761938e-05f, -9.435258358e-05f, -9.435738415e-05f, -9.436202109e-05f, -9.436649440e-05f, -9.437080410e-05f, -9.437495019e-05f,
--9.437893268e-05f, -9.438275158e-05f, -9.438640689e-05f, -9.438989862e-05f, -9.439322678e-05f, -9.439639138e-05f, -9.439939243e-05f, -9.440222994e-05f, -9.440490391e-05f, -9.440741437e-05f,
--9.440976131e-05f, -9.441194475e-05f, -9.441396469e-05f, -9.441582116e-05f, -9.441751416e-05f, -9.441904370e-05f, -9.442040980e-05f, -9.442161246e-05f, -9.442265170e-05f, -9.442352753e-05f,
--9.442423997e-05f, -9.442478903e-05f, -9.442517472e-05f, -9.442539705e-05f, -9.442545604e-05f, -9.442535171e-05f, -9.442508407e-05f, -9.442465313e-05f, -9.442405890e-05f, -9.442330142e-05f,
--9.442238068e-05f, -9.442129671e-05f, -9.442004952e-05f, -9.441863913e-05f, -9.441706556e-05f, -9.441532883e-05f, -9.441342894e-05f, -9.441136592e-05f, -9.440913979e-05f, -9.440675056e-05f,
--9.440419826e-05f, -9.440148290e-05f, -9.439860450e-05f, -9.439556309e-05f, -9.439235867e-05f, -9.438899128e-05f, -9.438546093e-05f, -9.438176763e-05f, -9.437791143e-05f, -9.437389232e-05f,
--9.436971035e-05f, -9.436536551e-05f, -9.436085785e-05f, -9.435618738e-05f, -9.435135413e-05f, -9.434635811e-05f, -9.434119935e-05f, -9.433587787e-05f, -9.433039370e-05f, -9.432474686e-05f,
--9.431893738e-05f, -9.431296527e-05f, -9.430683057e-05f, -9.430053330e-05f, -9.429407349e-05f, -9.428745115e-05f, -9.428066632e-05f, -9.427371903e-05f, -9.426660929e-05f, -9.425933714e-05f,
--9.425190260e-05f, -9.424430570e-05f, -9.423654647e-05f, -9.422862493e-05f, -9.422054112e-05f, -9.421229505e-05f, -9.420388677e-05f, -9.419531630e-05f, -9.418658367e-05f, -9.417768890e-05f,
--9.416863204e-05f, -9.415941310e-05f, -9.415003212e-05f, -9.414048913e-05f, -9.413078416e-05f, -9.412091724e-05f, -9.411088840e-05f, -9.410069768e-05f, -9.409034510e-05f, -9.407983070e-05f,
--9.406915452e-05f, -9.405831657e-05f, -9.404731691e-05f, -9.403615555e-05f, -9.402483254e-05f, -9.401334791e-05f, -9.400170169e-05f, -9.398989392e-05f, -9.397792463e-05f, -9.396579385e-05f,
--9.395350163e-05f, -9.394104800e-05f, -9.392843299e-05f, -9.391565663e-05f, -9.390271898e-05f, -9.388962006e-05f, -9.387635991e-05f, -9.386293856e-05f, -9.384935606e-05f, -9.383561244e-05f,
--9.382170775e-05f, -9.380764201e-05f, -9.379341527e-05f, -9.377902757e-05f, -9.376447894e-05f, -9.374976943e-05f, -9.373489907e-05f, -9.371986791e-05f, -9.370467598e-05f, -9.368932333e-05f,
--9.367381000e-05f, -9.365813602e-05f, -9.364230145e-05f, -9.362630631e-05f, -9.361015066e-05f, -9.359383453e-05f, -9.357735797e-05f, -9.356072102e-05f, -9.354392373e-05f, -9.352696613e-05f,
--9.350984827e-05f, -9.349257019e-05f, -9.347513195e-05f, -9.345753357e-05f, -9.343977512e-05f, -9.342185662e-05f, -9.340377813e-05f, -9.338553970e-05f, -9.336714137e-05f, -9.334858318e-05f,
--9.332986518e-05f, -9.331098742e-05f, -9.329194994e-05f, -9.327275280e-05f, -9.325339603e-05f, -9.323387969e-05f, -9.321420383e-05f, -9.319436849e-05f, -9.317437372e-05f, -9.315421957e-05f,
--9.313390609e-05f, -9.311343333e-05f, -9.309280134e-05f, -9.307201016e-05f, -9.305105986e-05f, -9.302995047e-05f, -9.300868205e-05f, -9.298725465e-05f, -9.296566833e-05f, -9.294392312e-05f,
--9.292201909e-05f, -9.289995629e-05f, -9.287773477e-05f, -9.285535457e-05f, -9.283281576e-05f, -9.281011839e-05f, -9.278726251e-05f, -9.276424818e-05f, -9.274107544e-05f, -9.271774436e-05f,
--9.269425498e-05f, -9.267060736e-05f, -9.264680156e-05f, -9.262283763e-05f, -9.259871563e-05f, -9.257443561e-05f, -9.254999764e-05f, -9.252540175e-05f, -9.250064802e-05f, -9.247573650e-05f,
--9.245066725e-05f, -9.242544031e-05f, -9.240005576e-05f, -9.237451365e-05f, -9.234881404e-05f, -9.232295698e-05f, -9.229694253e-05f, -9.227077076e-05f, -9.224444173e-05f, -9.221795548e-05f,
--9.219131209e-05f, -9.216451161e-05f, -9.213755410e-05f, -9.211043962e-05f, -9.208316824e-05f, -9.205574001e-05f, -9.202815500e-05f, -9.200041327e-05f, -9.197251488e-05f, -9.194445989e-05f,
--9.191624837e-05f, -9.188788037e-05f, -9.185935597e-05f, -9.183067521e-05f, -9.180183818e-05f, -9.177284492e-05f, -9.174369551e-05f, -9.171439002e-05f, -9.168492849e-05f, -9.165531100e-05f,
--9.162553762e-05f, -9.159560841e-05f, -9.156552343e-05f, -9.153528275e-05f, -9.150488644e-05f, -9.147433457e-05f, -9.144362719e-05f, -9.141276438e-05f, -9.138174621e-05f, -9.135057273e-05f,
--9.131924403e-05f, -9.128776017e-05f, -9.125612121e-05f, -9.122432722e-05f, -9.119237828e-05f, -9.116027445e-05f, -9.112801580e-05f, -9.109560240e-05f, -9.106303433e-05f, -9.103031164e-05f,
--9.099743442e-05f, -9.096440273e-05f, -9.093121664e-05f, -9.089787623e-05f, -9.086438156e-05f, -9.083073271e-05f, -9.079692975e-05f, -9.076297275e-05f, -9.072886178e-05f, -9.069459692e-05f,
--9.066017824e-05f, -9.062560581e-05f, -9.059087971e-05f, -9.055600001e-05f, -9.052096678e-05f, -9.048578010e-05f, -9.045044005e-05f, -9.041494669e-05f, -9.037930010e-05f, -9.034350036e-05f,
--9.030754755e-05f, -9.027144173e-05f, -9.023518299e-05f, -9.019877141e-05f, -9.016220705e-05f, -9.012548999e-05f, -9.008862032e-05f, -9.005159811e-05f, -9.001442343e-05f, -8.997709637e-05f,
--8.993961700e-05f, -8.990198541e-05f, -8.986420166e-05f, -8.982626585e-05f, -8.978817804e-05f, -8.974993832e-05f, -8.971154677e-05f, -8.967300346e-05f, -8.963430849e-05f, -8.959546192e-05f,
--8.955646384e-05f, -8.951731433e-05f, -8.947801347e-05f, -8.943856134e-05f, -8.939895803e-05f, -8.935920361e-05f, -8.931929817e-05f, -8.927924179e-05f, -8.923903456e-05f, -8.919867655e-05f,
--8.915816785e-05f, -8.911750855e-05f, -8.907669872e-05f, -8.903573845e-05f, -8.899462783e-05f, -8.895336694e-05f, -8.891195586e-05f, -8.887039468e-05f, -8.882868349e-05f, -8.878682237e-05f,
--8.874481140e-05f, -8.870265067e-05f, -8.866034028e-05f, -8.861788030e-05f, -8.857527082e-05f, -8.853251192e-05f, -8.848960371e-05f, -8.844654626e-05f, -8.840333966e-05f, -8.835998399e-05f,
--8.831647936e-05f, -8.827282584e-05f, -8.822902353e-05f, -8.818507251e-05f, -8.814097287e-05f, -8.809672471e-05f, -8.805232811e-05f, -8.800778316e-05f, -8.796308995e-05f, -8.791824858e-05f,
--8.787325913e-05f, -8.782812170e-05f, -8.778283637e-05f, -8.773740324e-05f, -8.769182240e-05f, -8.764609394e-05f, -8.760021796e-05f, -8.755419454e-05f, -8.750802378e-05f, -8.746170577e-05f,
--8.741524061e-05f, -8.736862839e-05f, -8.732186920e-05f, -8.727496314e-05f, -8.722791029e-05f, -8.718071076e-05f, -8.713336465e-05f, -8.708587203e-05f, -8.703823302e-05f, -8.699044770e-05f,
--8.694251618e-05f, -8.689443854e-05f, -8.684621488e-05f, -8.679784531e-05f, -8.674932991e-05f, -8.670066878e-05f, -8.665186203e-05f, -8.660290974e-05f, -8.655381202e-05f, -8.650456896e-05f,
--8.645518066e-05f, -8.640564723e-05f, -8.635596875e-05f, -8.630614533e-05f, -8.625617707e-05f, -8.620606406e-05f, -8.615580641e-05f, -8.610540421e-05f, -8.605485757e-05f, -8.600416658e-05f,
--8.595333135e-05f, -8.590235198e-05f, -8.585122857e-05f, -8.579996121e-05f, -8.574855002e-05f, -8.569699509e-05f, -8.564529652e-05f, -8.559345442e-05f, -8.554146889e-05f, -8.548934004e-05f,
--8.543706795e-05f, -8.538465275e-05f, -8.533209453e-05f, -8.527939339e-05f, -8.522654944e-05f, -8.517356279e-05f, -8.512043353e-05f, -8.506716178e-05f, -8.501374763e-05f, -8.496019119e-05f,
--8.490649258e-05f, -8.485265188e-05f, -8.479866922e-05f, -8.474454469e-05f, -8.469027840e-05f, -8.463587046e-05f, -8.458132097e-05f, -8.452663005e-05f, -8.447179779e-05f, -8.441682431e-05f,
--8.436170972e-05f, -8.430645412e-05f, -8.425105761e-05f, -8.419552032e-05f, -8.413984234e-05f, -8.408402379e-05f, -8.402806477e-05f, -8.397196540e-05f, -8.391572578e-05f, -8.385934602e-05f,
--8.380282624e-05f, -8.374616654e-05f, -8.368936704e-05f, -8.363242784e-05f, -8.357534906e-05f, -8.351813081e-05f, -8.346077319e-05f, -8.340327632e-05f, -8.334564032e-05f, -8.328786529e-05f,
--8.322995135e-05f, -8.317189861e-05f, -8.311370718e-05f, -8.305537717e-05f, -8.299690870e-05f, -8.293830189e-05f, -8.287955684e-05f, -8.282067367e-05f, -8.276165249e-05f, -8.270249342e-05f,
--8.264319658e-05f, -8.258376207e-05f, -8.252419001e-05f, -8.246448052e-05f, -8.240463372e-05f, -8.234464971e-05f, -8.228452863e-05f, -8.222427057e-05f, -8.216387566e-05f, -8.210334401e-05f,
--8.204267575e-05f, -8.198187098e-05f, -8.192092984e-05f, -8.185985242e-05f, -8.179863886e-05f, -8.173728926e-05f, -8.167580376e-05f, -8.161418246e-05f, -8.155242548e-05f, -8.149053295e-05f,
--8.142850498e-05f, -8.136634170e-05f, -8.130404322e-05f, -8.124160965e-05f, -8.117904114e-05f, -8.111633778e-05f, -8.105349970e-05f, -8.099052703e-05f, -8.092741989e-05f, -8.086417839e-05f,
--8.080080265e-05f, -8.073729281e-05f, -8.067364897e-05f, -8.060987127e-05f, -8.054595982e-05f, -8.048191475e-05f, -8.041773618e-05f, -8.035342423e-05f, -8.028897903e-05f, -8.022440070e-05f,
--8.015968936e-05f, -8.009484513e-05f, -8.002986815e-05f, -7.996475853e-05f, -7.989951641e-05f, -7.983414189e-05f, -7.976863512e-05f, -7.970299621e-05f, -7.963722529e-05f, -7.957132248e-05f,
--7.950528792e-05f, -7.943912172e-05f, -7.937282401e-05f, -7.930639493e-05f, -7.923983459e-05f, -7.917314312e-05f, -7.910632066e-05f, -7.903936732e-05f, -7.897228324e-05f, -7.890506854e-05f,
--7.883772334e-05f, -7.877024779e-05f, -7.870264201e-05f, -7.863490612e-05f, -7.856704025e-05f, -7.849904454e-05f, -7.843091911e-05f, -7.836266409e-05f, -7.829427962e-05f, -7.822576582e-05f,
--7.815712281e-05f, -7.808835074e-05f, -7.801944973e-05f, -7.795041992e-05f, -7.788126143e-05f, -7.781197439e-05f, -7.774255894e-05f, -7.767301521e-05f, -7.760334333e-05f, -7.753354343e-05f,
--7.746361564e-05f, -7.739356010e-05f, -7.732337694e-05f, -7.725306629e-05f, -7.718262828e-05f, -7.711206305e-05f, -7.704137074e-05f, -7.697055147e-05f, -7.689960537e-05f, -7.682853259e-05f,
--7.675733326e-05f, -7.668600751e-05f, -7.661455547e-05f, -7.654297729e-05f, -7.647127309e-05f, -7.639944301e-05f, -7.632748719e-05f, -7.625540577e-05f, -7.618319887e-05f, -7.611086663e-05f,
--7.603840920e-05f, -7.596582671e-05f, -7.589311928e-05f, -7.582028707e-05f, -7.574733021e-05f, -7.567424884e-05f, -7.560104308e-05f, -7.552771309e-05f, -7.545425900e-05f, -7.538068094e-05f,
--7.530697906e-05f, -7.523315349e-05f, -7.515920438e-05f, -7.508513186e-05f, -7.501093606e-05f, -7.493661714e-05f, -7.486217523e-05f, -7.478761047e-05f, -7.471292299e-05f, -7.463811295e-05f,
--7.456318048e-05f, -7.448812571e-05f, -7.441294880e-05f, -7.433764988e-05f, -7.426222910e-05f, -7.418668658e-05f, -7.411102249e-05f, -7.403523695e-05f, -7.395933011e-05f, -7.388330212e-05f,
--7.380715311e-05f, -7.373088322e-05f, -7.365449261e-05f, -7.357798141e-05f, -7.350134976e-05f, -7.342459782e-05f, -7.334772571e-05f, -7.327073360e-05f, -7.319362161e-05f, -7.311638990e-05f,
--7.303903860e-05f, -7.296156787e-05f, -7.288397785e-05f, -7.280626868e-05f, -7.272844050e-05f, -7.265049347e-05f, -7.257242773e-05f, -7.249424343e-05f, -7.241594070e-05f, -7.233751970e-05f,
--7.225898057e-05f, -7.218032346e-05f, -7.210154852e-05f, -7.202265588e-05f, -7.194364571e-05f, -7.186451814e-05f, -7.178527333e-05f, -7.170591142e-05f, -7.162643255e-05f, -7.154683689e-05f,
--7.146712457e-05f, -7.138729574e-05f, -7.130735055e-05f, -7.122728916e-05f, -7.114711170e-05f, -7.106681833e-05f, -7.098640920e-05f, -7.090588446e-05f, -7.082524425e-05f, -7.074448874e-05f,
--7.066361805e-05f, -7.058263236e-05f, -7.050153180e-05f, -7.042031653e-05f, -7.033898670e-05f, -7.025754245e-05f, -7.017598395e-05f, -7.009431134e-05f, -7.001252477e-05f, -6.993062440e-05f,
--6.984861038e-05f, -6.976648285e-05f, -6.968424198e-05f, -6.960188790e-05f, -6.951942079e-05f, -6.943684078e-05f, -6.935414804e-05f, -6.927134271e-05f, -6.918842495e-05f, -6.910539491e-05f,
--6.902225274e-05f, -6.893899861e-05f, -6.885563266e-05f, -6.877215504e-05f, -6.868856592e-05f, -6.860486544e-05f, -6.852105377e-05f, -6.843713105e-05f, -6.835309744e-05f, -6.826895310e-05f,
--6.818469819e-05f, -6.810033284e-05f, -6.801585724e-05f, -6.793127152e-05f, -6.784657585e-05f, -6.776177038e-05f, -6.767685526e-05f, -6.759183067e-05f, -6.750669674e-05f, -6.742145365e-05f,
--6.733610154e-05f, -6.725064057e-05f, -6.716507091e-05f, -6.707939270e-05f, -6.699360611e-05f, -6.690771130e-05f, -6.682170842e-05f, -6.673559763e-05f, -6.664937909e-05f, -6.656305296e-05f,
--6.647661940e-05f, -6.639007857e-05f, -6.630343062e-05f, -6.621667572e-05f, -6.612981403e-05f, -6.604284570e-05f, -6.595577089e-05f, -6.586858978e-05f, -6.578130250e-05f, -6.569390924e-05f,
--6.560641014e-05f, -6.551880537e-05f, -6.543109508e-05f, -6.534327945e-05f, -6.525535863e-05f, -6.516733278e-05f, -6.507920207e-05f, -6.499096665e-05f, -6.490262670e-05f, -6.481418236e-05f,
--6.472563380e-05f, -6.463698119e-05f, -6.454822469e-05f, -6.445936446e-05f, -6.437040067e-05f, -6.428133347e-05f, -6.419216303e-05f, -6.410288951e-05f, -6.401351309e-05f, -6.392403391e-05f,
--6.383445215e-05f, -6.374476797e-05f, -6.365498153e-05f, -6.356509300e-05f, -6.347510255e-05f, -6.338501033e-05f, -6.329481652e-05f, -6.320452127e-05f, -6.311412475e-05f, -6.302362714e-05f,
--6.293302859e-05f, -6.284232927e-05f, -6.275152934e-05f, -6.266062898e-05f, -6.256962834e-05f, -6.247852760e-05f, -6.238732692e-05f, -6.229602647e-05f, -6.220462641e-05f, -6.211312691e-05f,
--6.202152815e-05f, -6.192983028e-05f, -6.183803347e-05f, -6.174613789e-05f, -6.165414372e-05f, -6.156205111e-05f, -6.146986023e-05f, -6.137757126e-05f, -6.128518436e-05f, -6.119269971e-05f,
--6.110011746e-05f, -6.100743779e-05f, -6.091466086e-05f, -6.082178686e-05f, -6.072881594e-05f, -6.063574827e-05f, -6.054258403e-05f, -6.044932338e-05f, -6.035596650e-05f, -6.026251356e-05f,
--6.016896471e-05f, -6.007532015e-05f, -5.998158003e-05f, -5.988774453e-05f, -5.979381381e-05f, -5.969978806e-05f, -5.960566743e-05f, -5.951145210e-05f, -5.941714225e-05f, -5.932273804e-05f,
--5.922823965e-05f, -5.913364725e-05f, -5.903896100e-05f, -5.894418109e-05f, -5.884930768e-05f, -5.875434095e-05f, -5.865928107e-05f, -5.856412821e-05f, -5.846888255e-05f, -5.837354425e-05f,
--5.827811350e-05f, -5.818259046e-05f, -5.808697531e-05f, -5.799126822e-05f, -5.789546937e-05f, -5.779957893e-05f, -5.770359707e-05f, -5.760752398e-05f, -5.751135981e-05f, -5.741510475e-05f,
--5.731875897e-05f, -5.722232265e-05f, -5.712579596e-05f, -5.702917908e-05f, -5.693247218e-05f, -5.683567544e-05f, -5.673878902e-05f, -5.664181312e-05f, -5.654474790e-05f, -5.644759354e-05f,
--5.635035022e-05f, -5.625301811e-05f, -5.615559739e-05f, -5.605808823e-05f, -5.596049082e-05f, -5.586280532e-05f, -5.576503192e-05f, -5.566717079e-05f, -5.556922211e-05f, -5.547118606e-05f,
--5.537306281e-05f, -5.527485254e-05f, -5.517655544e-05f, -5.507817167e-05f, -5.497970141e-05f, -5.488114485e-05f, -5.478250216e-05f, -5.468377352e-05f, -5.458495911e-05f, -5.448605910e-05f,
--5.438707368e-05f, -5.428800303e-05f, -5.418884732e-05f, -5.408960673e-05f, -5.399028144e-05f, -5.389087164e-05f, -5.379137749e-05f, -5.369179919e-05f, -5.359213691e-05f, -5.349239083e-05f,
--5.339256113e-05f, -5.329264799e-05f, -5.319265159e-05f, -5.309257211e-05f, -5.299240973e-05f, -5.289216464e-05f, -5.279183701e-05f, -5.269142703e-05f, -5.259093487e-05f, -5.249036072e-05f,
--5.238970475e-05f, -5.228896716e-05f, -5.218814811e-05f, -5.208724780e-05f, -5.198626641e-05f, -5.188520411e-05f, -5.178406109e-05f, -5.168283753e-05f, -5.158153362e-05f, -5.148014953e-05f,
--5.137868545e-05f, -5.127714156e-05f, -5.117551804e-05f, -5.107381508e-05f, -5.097203286e-05f, -5.087017156e-05f, -5.076823138e-05f, -5.066621248e-05f, -5.056411505e-05f, -5.046193928e-05f,
--5.035968535e-05f, -5.025735345e-05f, -5.015494375e-05f, -5.005245645e-05f, -4.994989172e-05f, -4.984724976e-05f, -4.974453074e-05f, -4.964173485e-05f, -4.953886228e-05f, -4.943591321e-05f,
--4.933288782e-05f, -4.922978631e-05f, -4.912660885e-05f, -4.902335563e-05f, -4.892002683e-05f, -4.881662265e-05f, -4.871314326e-05f, -4.860958886e-05f, -4.850595963e-05f, -4.840225575e-05f,
--4.829847741e-05f, -4.819462480e-05f, -4.809069810e-05f, -4.798669751e-05f, -4.788262320e-05f, -4.777847536e-05f, -4.767425418e-05f, -4.756995985e-05f, -4.746559255e-05f, -4.736115248e-05f,
--4.725663981e-05f, -4.715205474e-05f, -4.704739745e-05f, -4.694266813e-05f, -4.683786697e-05f, -4.673299415e-05f, -4.662804987e-05f, -4.652303431e-05f, -4.641794766e-05f, -4.631279010e-05f,
--4.620756183e-05f, -4.610226304e-05f, -4.599689391e-05f, -4.589145463e-05f, -4.578594539e-05f, -4.568036639e-05f, -4.557471779e-05f, -4.546899981e-05f, -4.536321262e-05f, -4.525735642e-05f,
--4.515143139e-05f, -4.504543772e-05f, -4.493937561e-05f, -4.483324525e-05f, -4.472704681e-05f, -4.462078050e-05f, -4.451444650e-05f, -4.440804500e-05f, -4.430157620e-05f, -4.419504028e-05f,
--4.408843743e-05f, -4.398176784e-05f, -4.387503171e-05f, -4.376822923e-05f, -4.366136058e-05f, -4.355442596e-05f, -4.344742555e-05f, -4.334035955e-05f, -4.323322816e-05f, -4.312603155e-05f,
--4.301876992e-05f, -4.291144347e-05f, -4.280405239e-05f, -4.269659686e-05f, -4.258907707e-05f, -4.248149323e-05f, -4.237384552e-05f, -4.226613413e-05f, -4.215835926e-05f, -4.205052110e-05f,
--4.194261984e-05f, -4.183465567e-05f, -4.172662878e-05f, -4.161853937e-05f, -4.151038764e-05f, -4.140217376e-05f, -4.129389794e-05f, -4.118556037e-05f, -4.107716124e-05f, -4.096870075e-05f,
--4.086017908e-05f, -4.075159643e-05f, -4.064295300e-05f, -4.053424897e-05f, -4.042548455e-05f, -4.031665992e-05f, -4.020777528e-05f, -4.009883082e-05f, -3.998982673e-05f, -3.988076322e-05f,
--3.977164047e-05f, -3.966245868e-05f, -3.955321804e-05f, -3.944391874e-05f, -3.933456099e-05f, -3.922514497e-05f, -3.911567089e-05f, -3.900613892e-05f, -3.889654928e-05f, -3.878690215e-05f,
--3.867719773e-05f, -3.856743621e-05f, -3.845761779e-05f, -3.834774266e-05f, -3.823781102e-05f, -3.812782307e-05f, -3.801777900e-05f, -3.790767900e-05f, -3.779752327e-05f, -3.768731200e-05f,
--3.757704540e-05f, -3.746672366e-05f, -3.735634697e-05f, -3.724591553e-05f, -3.713542953e-05f, -3.702488917e-05f, -3.691429465e-05f, -3.680364617e-05f, -3.669294391e-05f, -3.658218808e-05f,
--3.647137887e-05f, -3.636051648e-05f, -3.624960111e-05f, -3.613863295e-05f, -3.602761220e-05f, -3.591653905e-05f, -3.580541370e-05f, -3.569423636e-05f, -3.558300721e-05f, -3.547172645e-05f,
--3.536039429e-05f, -3.524901091e-05f, -3.513757652e-05f, -3.502609131e-05f, -3.491455548e-05f, -3.480296923e-05f, -3.469133275e-05f, -3.457964625e-05f, -3.446790991e-05f, -3.435612395e-05f,
--3.424428855e-05f, -3.413240391e-05f, -3.402047024e-05f, -3.390848773e-05f, -3.379645657e-05f, -3.368437697e-05f, -3.357224913e-05f, -3.346007323e-05f, -3.334784949e-05f, -3.323557810e-05f,
--3.312325926e-05f, -3.301089316e-05f, -3.289848001e-05f, -3.278602001e-05f, -3.267351334e-05f, -3.256096022e-05f, -3.244836084e-05f, -3.233571540e-05f, -3.222302410e-05f, -3.211028713e-05f,
--3.199750470e-05f, -3.188467701e-05f, -3.177180425e-05f, -3.165888663e-05f, -3.154592434e-05f, -3.143291759e-05f, -3.131986657e-05f, -3.120677148e-05f, -3.109363252e-05f, -3.098044989e-05f,
--3.086722380e-05f, -3.075395444e-05f, -3.064064201e-05f, -3.052728671e-05f, -3.041388874e-05f, -3.030044830e-05f, -3.018696559e-05f, -3.007344082e-05f, -2.995987418e-05f, -2.984626586e-05f,
--2.973261608e-05f, -2.961892504e-05f, -2.950519292e-05f, -2.939141994e-05f, -2.927760629e-05f, -2.916375218e-05f, -2.904985780e-05f, -2.893592336e-05f, -2.882194905e-05f, -2.870793508e-05f,
--2.859388165e-05f, -2.847978896e-05f, -2.836565720e-05f, -2.825148659e-05f, -2.813727732e-05f, -2.802302959e-05f, -2.790874361e-05f, -2.779441957e-05f, -2.768005768e-05f, -2.756565813e-05f,
--2.745122113e-05f, -2.733674689e-05f, -2.722223559e-05f, -2.710768745e-05f, -2.699310266e-05f, -2.687848143e-05f, -2.676382396e-05f, -2.664913044e-05f, -2.653440109e-05f, -2.641963610e-05f,
--2.630483567e-05f, -2.619000001e-05f, -2.607512932e-05f, -2.596022379e-05f, -2.584528364e-05f, -2.573030907e-05f, -2.561530026e-05f, -2.550025744e-05f, -2.538518080e-05f, -2.527007053e-05f,
--2.515492686e-05f, -2.503974997e-05f, -2.492454006e-05f, -2.480929735e-05f, -2.469402203e-05f, -2.457871431e-05f, -2.446337439e-05f, -2.434800247e-05f, -2.423259874e-05f, -2.411716343e-05f,
--2.400169672e-05f, -2.388619883e-05f, -2.377066994e-05f, -2.365511028e-05f, -2.353952003e-05f, -2.342389940e-05f, -2.330824860e-05f, -2.319256783e-05f, -2.307685728e-05f, -2.296111717e-05f,
--2.284534769e-05f, -2.272954905e-05f, -2.261372146e-05f, -2.249786510e-05f, -2.238198020e-05f, -2.226606695e-05f, -2.215012554e-05f, -2.203415620e-05f, -2.191815912e-05f, -2.180213450e-05f,
--2.168608254e-05f, -2.157000346e-05f, -2.145389745e-05f, -2.133776471e-05f, -2.122160546e-05f, -2.110541988e-05f, -2.098920820e-05f, -2.087297060e-05f, -2.075670730e-05f, -2.064041849e-05f,
--2.052410438e-05f, -2.040776518e-05f, -2.029140108e-05f, -2.017501230e-05f, -2.005859903e-05f, -1.994216147e-05f, -1.982569984e-05f, -1.970921434e-05f, -1.959270516e-05f, -1.947617251e-05f,
--1.935961660e-05f, -1.924303764e-05f, -1.912643581e-05f, -1.900981133e-05f, -1.889316441e-05f, -1.877649524e-05f, -1.865980403e-05f, -1.854309098e-05f, -1.842635630e-05f, -1.830960019e-05f,
--1.819282285e-05f, -1.807602449e-05f, -1.795920532e-05f, -1.784236553e-05f, -1.772550533e-05f, -1.760862493e-05f, -1.749172453e-05f, -1.737480433e-05f, -1.725786453e-05f, -1.714090535e-05f,
--1.702392698e-05f, -1.690692964e-05f, -1.678991351e-05f, -1.667287881e-05f, -1.655582575e-05f, -1.643875452e-05f, -1.632166533e-05f, -1.620455838e-05f, -1.608743388e-05f, -1.597029204e-05f,
--1.585313305e-05f, -1.573595712e-05f, -1.561876446e-05f, -1.550155527e-05f, -1.538432975e-05f, -1.526708811e-05f, -1.514983055e-05f, -1.503255728e-05f, -1.491526850e-05f, -1.479796442e-05f,
--1.468064523e-05f, -1.456331115e-05f, -1.444596238e-05f, -1.432859912e-05f, -1.421122158e-05f, -1.409382996e-05f, -1.397642447e-05f, -1.385900531e-05f, -1.374157268e-05f, -1.362412679e-05f,
--1.350666784e-05f, -1.338919604e-05f, -1.327171160e-05f, -1.315421471e-05f, -1.303670558e-05f, -1.291918442e-05f, -1.280165142e-05f, -1.268410681e-05f, -1.256655077e-05f, -1.244898351e-05f,
--1.233140524e-05f, -1.221381617e-05f, -1.209621649e-05f, -1.197860641e-05f, -1.186098614e-05f, -1.174335587e-05f, -1.162571582e-05f, -1.150806619e-05f, -1.139040718e-05f, -1.127273900e-05f,
--1.115506186e-05f, -1.103737594e-05f, -1.091968147e-05f, -1.080197865e-05f, -1.068426767e-05f, -1.056654875e-05f, -1.044882208e-05f, -1.033108788e-05f, -1.021334635e-05f, -1.009559768e-05f,
--9.977842098e-06f, -9.860079791e-06f, -9.742310969e-06f, -9.624535836e-06f, -9.506754596e-06f, -9.388967453e-06f, -9.271174613e-06f, -9.153376279e-06f, -9.035572655e-06f, -8.917763947e-06f,
--8.799950357e-06f, -8.682132091e-06f, -8.564309353e-06f, -8.446482347e-06f, -8.328651277e-06f, -8.210816347e-06f, -8.092977762e-06f, -7.975135727e-06f, -7.857290444e-06f, -7.739442119e-06f,
--7.621590955e-06f, -7.503737157e-06f, -7.385880929e-06f, -7.268022474e-06f, -7.150161998e-06f, -7.032299704e-06f, -6.914435797e-06f, -6.796570479e-06f, -6.678703957e-06f, -6.560836432e-06f,
--6.442968111e-06f, -6.325099196e-06f, -6.207229891e-06f, -6.089360401e-06f, -5.971490929e-06f, -5.853621680e-06f, -5.735752857e-06f, -5.617884665e-06f, -5.500017306e-06f, -5.382150986e-06f,
--5.264285907e-06f, -5.146422274e-06f, -5.028560291e-06f, -4.910700160e-06f, -4.792842087e-06f, -4.674986275e-06f, -4.557132927e-06f, -4.439282247e-06f, -4.321434439e-06f, -4.203589707e-06f,
--4.085748254e-06f, -3.967910283e-06f, -3.850075999e-06f, -3.732245605e-06f, -3.614419304e-06f, -3.496597300e-06f, -3.378779796e-06f, -3.260966997e-06f, -3.143159104e-06f, -3.025356322e-06f,
--2.907558854e-06f, -2.789766904e-06f, -2.671980674e-06f, -2.554200368e-06f, -2.436426189e-06f, -2.318658341e-06f, -2.200897027e-06f, -2.083142449e-06f, -1.965394811e-06f, -1.847654317e-06f,
--1.729921168e-06f, -1.612195569e-06f, -1.494477722e-06f, -1.376767831e-06f, -1.259066097e-06f, -1.141372725e-06f, -1.023687916e-06f, -9.060118746e-07f, -7.883448027e-07f, -6.706869033e-07f,
--5.530383792e-07f, -4.353994329e-07f, -3.177702674e-07f, -2.001510851e-07f, -8.254208878e-08f, 3.505651907e-08f, 1.526445359e-07f, 2.702217591e-07f, 3.877879863e-07f, 5.053430151e-07f,
-6.228866430e-07f, 7.404186677e-07f, 8.579388868e-07f, 9.754470982e-07f, 1.092943099e-06f, 1.210426688e-06f, 1.327897663e-06f, 1.445355821e-06f, 1.562800960e-06f, 1.680232879e-06f,
-1.797651375e-06f, 1.915056246e-06f, 2.032447291e-06f, 2.149824307e-06f, 2.267187093e-06f, 2.384535447e-06f, 2.501869167e-06f, 2.619188051e-06f, 2.736491898e-06f, 2.853780507e-06f,
-2.971053675e-06f, 3.088311201e-06f, 3.205552884e-06f, 3.322778521e-06f, 3.439987913e-06f, 3.557180857e-06f, 3.674357152e-06f, 3.791516597e-06f, 3.908658990e-06f, 4.025784131e-06f,
-4.142891819e-06f, 4.259981851e-06f, 4.377054028e-06f, 4.494108148e-06f, 4.611144011e-06f, 4.728161415e-06f, 4.845160160e-06f, 4.962140045e-06f, 5.079100869e-06f, 5.196042432e-06f,
-5.312964532e-06f, 5.429866970e-06f, 5.546749545e-06f, 5.663612056e-06f, 5.780454304e-06f, 5.897276087e-06f, 6.014077205e-06f, 6.130857458e-06f, 6.247616647e-06f, 6.364354570e-06f,
-6.481071028e-06f, 6.597765820e-06f, 6.714438748e-06f, 6.831089610e-06f, 6.947718207e-06f, 7.064324339e-06f, 7.180907806e-06f, 7.297468409e-06f, 7.414005949e-06f, 7.530520224e-06f,
-7.647011037e-06f, 7.763478187e-06f, 7.879921476e-06f, 7.996340703e-06f, 8.112735669e-06f, 8.229106176e-06f, 8.345452024e-06f, 8.461773014e-06f, 8.578068947e-06f, 8.694339624e-06f,
-8.810584846e-06f, 8.926804414e-06f, 9.042998130e-06f, 9.159165795e-06f, 9.275307209e-06f, 9.391422175e-06f, 9.507510494e-06f, 9.623571967e-06f, 9.739606396e-06f, 9.855613583e-06f,
-9.971593329e-06f, 1.008754544e-05f, 1.020346971e-05f, 1.031936594e-05f, 1.043523394e-05f, 1.055107352e-05f, 1.066688446e-05f, 1.078266657e-05f, 1.089841966e-05f, 1.101414353e-05f,
-1.112983798e-05f, 1.124550281e-05f, 1.136113783e-05f, 1.147674283e-05f, 1.159231763e-05f, 1.170786202e-05f, 1.182337580e-05f, 1.193885879e-05f, 1.205431077e-05f, 1.216973156e-05f,
-1.228512096e-05f, 1.240047877e-05f, 1.251580479e-05f, 1.263109883e-05f, 1.274636069e-05f, 1.286159017e-05f, 1.297678709e-05f, 1.309195123e-05f, 1.320708241e-05f, 1.332218043e-05f,
-1.343724510e-05f, 1.355227620e-05f, 1.366727356e-05f, 1.378223698e-05f, 1.389716625e-05f, 1.401206119e-05f, 1.412692159e-05f, 1.424174726e-05f, 1.435653801e-05f, 1.447129365e-05f,
-1.458601396e-05f, 1.470069877e-05f, 1.481534787e-05f, 1.492996107e-05f, 1.504453817e-05f, 1.515907899e-05f, 1.527358332e-05f, 1.538805096e-05f, 1.550248174e-05f, 1.561687544e-05f,
-1.573123188e-05f, 1.584555086e-05f, 1.595983218e-05f, 1.607407566e-05f, 1.618828110e-05f, 1.630244829e-05f, 1.641657706e-05f, 1.653066721e-05f, 1.664471853e-05f, 1.675873085e-05f,
-1.687270395e-05f, 1.698663766e-05f, 1.710053177e-05f, 1.721438610e-05f, 1.732820045e-05f, 1.744197462e-05f, 1.755570843e-05f, 1.766940167e-05f, 1.778305417e-05f, 1.789666571e-05f,
-1.801023612e-05f, 1.812376520e-05f, 1.823725275e-05f, 1.835069858e-05f, 1.846410251e-05f, 1.857746433e-05f, 1.869078385e-05f, 1.880406090e-05f, 1.891729526e-05f, 1.903048675e-05f,
-1.914363517e-05f, 1.925674034e-05f, 1.936980207e-05f, 1.948282015e-05f, 1.959579441e-05f, 1.970872464e-05f, 1.982161066e-05f, 1.993445228e-05f, 2.004724930e-05f, 2.016000153e-05f,
-2.027270878e-05f, 2.038537087e-05f, 2.049798759e-05f, 2.061055876e-05f, 2.072308419e-05f, 2.083556369e-05f, 2.094799707e-05f, 2.106038414e-05f, 2.117272470e-05f, 2.128501856e-05f,
-2.139726555e-05f, 2.150946545e-05f, 2.162161810e-05f, 2.173372329e-05f, 2.184578084e-05f, 2.195779056e-05f, 2.206975225e-05f, 2.218166573e-05f, 2.229353081e-05f, 2.240534731e-05f,
-2.251711502e-05f, 2.262883376e-05f, 2.274050334e-05f, 2.285212358e-05f, 2.296369429e-05f, 2.307521527e-05f, 2.318668634e-05f, 2.329810731e-05f, 2.340947799e-05f, 2.352079819e-05f,
-2.363206773e-05f, 2.374328641e-05f, 2.385445406e-05f, 2.396557047e-05f, 2.407663547e-05f, 2.418764887e-05f, 2.429861047e-05f, 2.440952010e-05f, 2.452037756e-05f, 2.463118267e-05f,
-2.474193524e-05f, 2.485263508e-05f, 2.496328200e-05f, 2.507387583e-05f, 2.518441637e-05f, 2.529490343e-05f, 2.540533684e-05f, 2.551571640e-05f, 2.562604192e-05f, 2.573631323e-05f,
-2.584653014e-05f, 2.595669245e-05f, 2.606679999e-05f, 2.617685257e-05f, 2.628685000e-05f, 2.639679209e-05f, 2.650667867e-05f, 2.661650955e-05f, 2.672628454e-05f, 2.683600346e-05f,
-2.694566611e-05f, 2.705527233e-05f, 2.716482192e-05f, 2.727431470e-05f, 2.738375048e-05f, 2.749312908e-05f, 2.760245032e-05f, 2.771171401e-05f, 2.782091997e-05f, 2.793006802e-05f,
-2.803915796e-05f, 2.814818962e-05f, 2.825716282e-05f, 2.836607736e-05f, 2.847493307e-05f, 2.858372977e-05f, 2.869246726e-05f, 2.880114538e-05f, 2.890976393e-05f, 2.901832273e-05f,
-2.912682161e-05f, 2.923526037e-05f, 2.934363884e-05f, 2.945195683e-05f, 2.956021417e-05f, 2.966841066e-05f, 2.977654613e-05f, 2.988462040e-05f, 2.999263328e-05f, 3.010058460e-05f,
-3.020847417e-05f, 3.031630181e-05f, 3.042406734e-05f, 3.053177058e-05f, 3.063941135e-05f, 3.074698947e-05f, 3.085450475e-05f, 3.096195702e-05f, 3.106934610e-05f, 3.117667180e-05f,
-3.128393396e-05f, 3.139113237e-05f, 3.149826688e-05f, 3.160533729e-05f, 3.171234343e-05f, 3.181928512e-05f, 3.192616217e-05f, 3.203297442e-05f, 3.213972168e-05f, 3.224640377e-05f,
-3.235302051e-05f, 3.245957173e-05f, 3.256605724e-05f, 3.267247688e-05f, 3.277883045e-05f, 3.288511778e-05f, 3.299133870e-05f, 3.309749302e-05f, 3.320358057e-05f, 3.330960117e-05f,
-3.341555465e-05f, 3.352144082e-05f, 3.362725951e-05f, 3.373301054e-05f, 3.383869373e-05f, 3.394430892e-05f, 3.404985591e-05f, 3.415533454e-05f, 3.426074463e-05f, 3.436608600e-05f,
-3.447135847e-05f, 3.457656188e-05f, 3.468169604e-05f, 3.478676078e-05f, 3.489175592e-05f, 3.499668129e-05f, 3.510153671e-05f, 3.520632201e-05f, 3.531103701e-05f, 3.541568153e-05f,
-3.552025541e-05f, 3.562475847e-05f, 3.572919053e-05f, 3.583355142e-05f, 3.593784097e-05f, 3.604205899e-05f, 3.614620533e-05f, 3.625027979e-05f, 3.635428222e-05f, 3.645821243e-05f,
-3.656207025e-05f, 3.666585552e-05f, 3.676956805e-05f, 3.687320767e-05f, 3.697677421e-05f, 3.708026750e-05f, 3.718368737e-05f, 3.728703364e-05f, 3.739030614e-05f, 3.749350471e-05f,
-3.759662915e-05f, 3.769967932e-05f, 3.780265502e-05f, 3.790555610e-05f, 3.800838238e-05f, 3.811113369e-05f, 3.821380986e-05f, 3.831641071e-05f, 3.841893608e-05f, 3.852138580e-05f,
-3.862375969e-05f, 3.872605759e-05f, 3.882827933e-05f, 3.893042473e-05f, 3.903249362e-05f, 3.913448584e-05f, 3.923640121e-05f, 3.933823958e-05f, 3.944000076e-05f, 3.954168458e-05f,
-3.964329089e-05f, 3.974481951e-05f, 3.984627026e-05f, 3.994764299e-05f, 4.004893753e-05f, 4.015015370e-05f, 4.025129134e-05f, 4.035235028e-05f, 4.045333035e-05f, 4.055423139e-05f,
-4.065505322e-05f, 4.075579569e-05f, 4.085645862e-05f, 4.095704184e-05f, 4.105754519e-05f, 4.115796850e-05f, 4.125831161e-05f, 4.135857435e-05f, 4.145875655e-05f, 4.155885805e-05f,
-4.165887868e-05f, 4.175881827e-05f, 4.185867666e-05f, 4.195845369e-05f, 4.205814919e-05f, 4.215776298e-05f, 4.225729492e-05f, 4.235674483e-05f, 4.245611255e-05f, 4.255539791e-05f,
-4.265460076e-05f, 4.275372091e-05f, 4.285275822e-05f, 4.295171252e-05f, 4.305058364e-05f, 4.314937142e-05f, 4.324807570e-05f, 4.334669631e-05f, 4.344523309e-05f, 4.354368588e-05f,
-4.364205451e-05f, 4.374033883e-05f, 4.383853866e-05f, 4.393665385e-05f, 4.403468424e-05f, 4.413262965e-05f, 4.423048994e-05f, 4.432826494e-05f, 4.442595449e-05f, 4.452355842e-05f,
-4.462107658e-05f, 4.471850880e-05f, 4.481585493e-05f, 4.491311480e-05f, 4.501028825e-05f, 4.510737512e-05f, 4.520437525e-05f, 4.530128849e-05f, 4.539811466e-05f, 4.549485362e-05f,
-4.559150520e-05f, 4.568806924e-05f, 4.578454559e-05f, 4.588093408e-05f, 4.597723456e-05f, 4.607344686e-05f, 4.616957084e-05f, 4.626560632e-05f, 4.636155315e-05f, 4.645741118e-05f,
-4.655318024e-05f, 4.664886019e-05f, 4.674445085e-05f, 4.683995207e-05f, 4.693536371e-05f, 4.703068559e-05f, 4.712591756e-05f, 4.722105947e-05f, 4.731611115e-05f, 4.741107246e-05f,
-4.750594324e-05f, 4.760072333e-05f, 4.769541257e-05f, 4.779001080e-05f, 4.788451789e-05f, 4.797893366e-05f, 4.807325796e-05f, 4.816749064e-05f, 4.826163154e-05f, 4.835568052e-05f,
-4.844963740e-05f, 4.854350205e-05f, 4.863727430e-05f, 4.873095400e-05f, 4.882454100e-05f, 4.891803514e-05f, 4.901143627e-05f, 4.910474424e-05f, 4.919795890e-05f, 4.929108009e-05f,
-4.938410765e-05f, 4.947704144e-05f, 4.956988131e-05f, 4.966262709e-05f, 4.975527865e-05f, 4.984783582e-05f, 4.994029846e-05f, 5.003266641e-05f, 5.012493953e-05f, 5.021711766e-05f,
-5.030920065e-05f, 5.040118835e-05f, 5.049308061e-05f, 5.058487728e-05f, 5.067657820e-05f, 5.076818324e-05f, 5.085969223e-05f, 5.095110504e-05f, 5.104242150e-05f, 5.113364148e-05f,
-5.122476481e-05f, 5.131579136e-05f, 5.140672097e-05f, 5.149755350e-05f, 5.158828879e-05f, 5.167892670e-05f, 5.176946708e-05f, 5.185990978e-05f, 5.195025466e-05f, 5.204050156e-05f,
-5.213065034e-05f, 5.222070086e-05f, 5.231065296e-05f, 5.240050650e-05f, 5.249026133e-05f, 5.257991730e-05f, 5.266947428e-05f, 5.275893211e-05f, 5.284829064e-05f, 5.293754974e-05f,
-5.302670925e-05f, 5.311576904e-05f, 5.320472895e-05f, 5.329358884e-05f, 5.338234856e-05f, 5.347100798e-05f, 5.355956695e-05f, 5.364802531e-05f, 5.373638294e-05f, 5.382463968e-05f,
-5.391279539e-05f, 5.400084993e-05f, 5.408880315e-05f, 5.417665492e-05f, 5.426440508e-05f, 5.435205350e-05f, 5.443960003e-05f, 5.452704454e-05f, 5.461438687e-05f, 5.470162689e-05f,
-5.478876445e-05f, 5.487579942e-05f, 5.496273165e-05f, 5.504956100e-05f, 5.513628733e-05f, 5.522291050e-05f, 5.530943037e-05f, 5.539584680e-05f, 5.548215964e-05f, 5.556836876e-05f,
-5.565447402e-05f, 5.574047528e-05f, 5.582637240e-05f, 5.591216524e-05f, 5.599785365e-05f, 5.608343751e-05f, 5.616891667e-05f, 5.625429100e-05f, 5.633956035e-05f, 5.642472459e-05f,
-5.650978358e-05f, 5.659473719e-05f, 5.667958527e-05f, 5.676432768e-05f, 5.684896430e-05f, 5.693349498e-05f, 5.701791958e-05f, 5.710223798e-05f, 5.718645003e-05f, 5.727055560e-05f,
-5.735455455e-05f, 5.743844675e-05f, 5.752223205e-05f, 5.760591033e-05f, 5.768948145e-05f, 5.777294528e-05f, 5.785630168e-05f, 5.793955051e-05f, 5.802269164e-05f, 5.810572494e-05f,
-5.818865027e-05f, 5.827146751e-05f, 5.835417650e-05f, 5.843677713e-05f, 5.851926926e-05f, 5.860165276e-05f, 5.868392749e-05f, 5.876609332e-05f, 5.884815011e-05f, 5.893009775e-05f,
-5.901193608e-05f, 5.909366500e-05f, 5.917528435e-05f, 5.925679401e-05f, 5.933819385e-05f, 5.941948373e-05f, 5.950066353e-05f, 5.958173312e-05f, 5.966269237e-05f, 5.974354114e-05f,
-5.982427930e-05f, 5.990490673e-05f, 5.998542330e-05f, 6.006582887e-05f, 6.014612332e-05f, 6.022630652e-05f, 6.030637834e-05f, 6.038633865e-05f, 6.046618733e-05f, 6.054592424e-05f,
-6.062554925e-05f, 6.070506225e-05f, 6.078446310e-05f, 6.086375167e-05f, 6.094292784e-05f, 6.102199148e-05f, 6.110094246e-05f, 6.117978066e-05f, 6.125850596e-05f, 6.133711821e-05f,
-6.141561731e-05f, 6.149400312e-05f, 6.157227552e-05f, 6.165043438e-05f, 6.172847957e-05f, 6.180641099e-05f, 6.188422848e-05f, 6.196193195e-05f, 6.203952125e-05f, 6.211699627e-05f,
-6.219435688e-05f, 6.227160296e-05f, 6.234873438e-05f, 6.242575103e-05f, 6.250265277e-05f, 6.257943950e-05f, 6.265611107e-05f, 6.273266738e-05f, 6.280910829e-05f, 6.288543369e-05f,
-6.296164346e-05f, 6.303773748e-05f, 6.311371561e-05f, 6.318957775e-05f, 6.326532377e-05f, 6.334095355e-05f, 6.341646696e-05f, 6.349186390e-05f, 6.356714424e-05f, 6.364230786e-05f,
-6.371735464e-05f, 6.379228446e-05f, 6.386709720e-05f, 6.394179275e-05f, 6.401637098e-05f, 6.409083177e-05f, 6.416517502e-05f, 6.423940059e-05f, 6.431350837e-05f, 6.438749825e-05f,
-6.446137011e-05f, 6.453512382e-05f, 6.460875928e-05f, 6.468227636e-05f, 6.475567496e-05f, 6.482895494e-05f, 6.490211620e-05f, 6.497515862e-05f, 6.504808209e-05f, 6.512088649e-05f,
-6.519357170e-05f, 6.526613761e-05f, 6.533858410e-05f, 6.541091107e-05f, 6.548311839e-05f, 6.555520595e-05f, 6.562717364e-05f, 6.569902134e-05f, 6.577074894e-05f, 6.584235633e-05f,
-6.591384339e-05f, 6.598521001e-05f, 6.605645608e-05f, 6.612758149e-05f, 6.619858612e-05f, 6.626946986e-05f, 6.634023260e-05f, 6.641087423e-05f, 6.648139464e-05f, 6.655179371e-05f,
-6.662207133e-05f, 6.669222740e-05f, 6.676226180e-05f, 6.683217443e-05f, 6.690196517e-05f, 6.697163391e-05f, 6.704118055e-05f, 6.711060497e-05f, 6.717990707e-05f, 6.724908673e-05f,
-6.731814385e-05f, 6.738707832e-05f, 6.745589004e-05f, 6.752457888e-05f, 6.759314475e-05f, 6.766158754e-05f, 6.772990714e-05f, 6.779810344e-05f, 6.786617634e-05f, 6.793412573e-05f,
-6.800195150e-05f, 6.806965354e-05f, 6.813723176e-05f, 6.820468605e-05f, 6.827201629e-05f, 6.833922239e-05f, 6.840630423e-05f, 6.847326172e-05f, 6.854009475e-05f, 6.860680322e-05f,
-6.867338701e-05f, 6.873984604e-05f, 6.880618018e-05f, 6.887238935e-05f, 6.893847343e-05f, 6.900443233e-05f, 6.907026593e-05f, 6.913597414e-05f, 6.920155686e-05f, 6.926701398e-05f,
-6.933234541e-05f, 6.939755103e-05f, 6.946263075e-05f, 6.952758446e-05f, 6.959241207e-05f, 6.965711348e-05f, 6.972168858e-05f, 6.978613727e-05f, 6.985045946e-05f, 6.991465504e-05f,
-6.997872391e-05f, 7.004266598e-05f, 7.010648115e-05f, 7.017016931e-05f, 7.023373037e-05f, 7.029716422e-05f, 7.036047078e-05f, 7.042364994e-05f, 7.048670161e-05f, 7.054962568e-05f,
-7.061242206e-05f, 7.067509065e-05f, 7.073763136e-05f, 7.080004409e-05f, 7.086232874e-05f, 7.092448522e-05f, 7.098651343e-05f, 7.104841327e-05f, 7.111018465e-05f, 7.117182747e-05f,
-7.123334164e-05f, 7.129472707e-05f, 7.135598365e-05f, 7.141711130e-05f, 7.147810992e-05f, 7.153897941e-05f, 7.159971969e-05f, 7.166033066e-05f, 7.172081222e-05f, 7.178116428e-05f,
-7.184138676e-05f, 7.190147955e-05f, 7.196144257e-05f, 7.202127572e-05f, 7.208097892e-05f, 7.214055206e-05f, 7.219999506e-05f, 7.225930783e-05f, 7.231849027e-05f, 7.237754230e-05f,
-7.243646383e-05f, 7.249525476e-05f, 7.255391500e-05f, 7.261244447e-05f, 7.267084308e-05f, 7.272911073e-05f, 7.278724734e-05f, 7.284525282e-05f, 7.290312708e-05f, 7.296087003e-05f,
-7.301848159e-05f, 7.307596166e-05f, 7.313331016e-05f, 7.319052700e-05f, 7.324761209e-05f, 7.330456535e-05f, 7.336138669e-05f, 7.341807602e-05f, 7.347463326e-05f, 7.353105832e-05f,
-7.358735112e-05f, 7.364351157e-05f, 7.369953958e-05f, 7.375543507e-05f, 7.381119796e-05f, 7.386682816e-05f, 7.392232559e-05f, 7.397769015e-05f, 7.403292178e-05f, 7.408802038e-05f,
-7.414298587e-05f, 7.419781817e-05f, 7.425251719e-05f, 7.430708286e-05f, 7.436151509e-05f, 7.441581379e-05f, 7.446997889e-05f, 7.452401031e-05f, 7.457790796e-05f, 7.463167176e-05f,
-7.468530163e-05f, 7.473879749e-05f, 7.479215927e-05f, 7.484538687e-05f, 7.489848022e-05f, 7.495143924e-05f, 7.500426384e-05f, 7.505695397e-05f, 7.510950952e-05f, 7.516193042e-05f,
-7.521421660e-05f, 7.526636797e-05f, 7.531838447e-05f, 7.537026600e-05f, 7.542201249e-05f, 7.547362387e-05f, 7.552510006e-05f, 7.557644098e-05f, 7.562764655e-05f, 7.567871670e-05f,
-7.572965135e-05f, 7.578045043e-05f, 7.583111385e-05f, 7.588164155e-05f, 7.593203345e-05f, 7.598228948e-05f, 7.603240955e-05f, 7.608239360e-05f, 7.613224155e-05f, 7.618195333e-05f,
-7.623152886e-05f, 7.628096807e-05f, 7.633027089e-05f, 7.637943724e-05f, 7.642846705e-05f, 7.647736024e-05f, 7.652611676e-05f, 7.657473652e-05f, 7.662321944e-05f, 7.667156547e-05f,
-7.671977453e-05f, 7.676784655e-05f, 7.681578145e-05f, 7.686357917e-05f, 7.691123964e-05f, 7.695876278e-05f, 7.700614852e-05f, 7.705339681e-05f, 7.710050756e-05f, 7.714748071e-05f,
-7.719431618e-05f, 7.724101392e-05f, 7.728757385e-05f, 7.733399591e-05f, 7.738028002e-05f, 7.742642611e-05f, 7.747243413e-05f, 7.751830400e-05f, 7.756403566e-05f, 7.760962904e-05f,
-7.765508408e-05f, 7.770040070e-05f, 7.774557884e-05f, 7.779061843e-05f, 7.783551942e-05f, 7.788028174e-05f, 7.792490531e-05f, 7.796939008e-05f, 7.801373598e-05f, 7.805794294e-05f,
-7.810201091e-05f, 7.814593982e-05f, 7.818972960e-05f, 7.823338020e-05f, 7.827689154e-05f, 7.832026357e-05f, 7.836349623e-05f, 7.840658944e-05f, 7.844954316e-05f, 7.849235732e-05f,
-7.853503185e-05f, 7.857756669e-05f, 7.861996179e-05f, 7.866221709e-05f, 7.870433252e-05f, 7.874630801e-05f, 7.878814353e-05f, 7.882983899e-05f, 7.887139435e-05f, 7.891280954e-05f,
-7.895408451e-05f, 7.899521919e-05f, 7.903621353e-05f, 7.907706747e-05f, 7.911778096e-05f, 7.915835392e-05f, 7.919878631e-05f, 7.923907807e-05f, 7.927922914e-05f, 7.931923947e-05f,
-7.935910899e-05f, 7.939883766e-05f, 7.943842541e-05f, 7.947787220e-05f, 7.951717795e-05f, 7.955634263e-05f, 7.959536617e-05f, 7.963424852e-05f, 7.967298962e-05f, 7.971158943e-05f,
-7.975004788e-05f, 7.978836492e-05f, 7.982654050e-05f, 7.986457457e-05f, 7.990246707e-05f, 7.994021796e-05f, 7.997782716e-05f, 8.001529465e-05f, 8.005262035e-05f, 8.008980423e-05f,
-8.012684623e-05f, 8.016374629e-05f, 8.020050437e-05f, 8.023712042e-05f, 8.027359439e-05f, 8.030992622e-05f, 8.034611586e-05f, 8.038216327e-05f, 8.041806840e-05f, 8.045383119e-05f,
-8.048945160e-05f, 8.052492958e-05f, 8.056026508e-05f, 8.059545806e-05f, 8.063050845e-05f, 8.066541623e-05f, 8.070018133e-05f, 8.073480371e-05f, 8.076928332e-05f, 8.080362013e-05f,
-8.083781407e-05f, 8.087186511e-05f, 8.090577320e-05f, 8.093953829e-05f, 8.097316034e-05f, 8.100663930e-05f, 8.103997513e-05f, 8.107316777e-05f, 8.110621720e-05f, 8.113912336e-05f,
-8.117188621e-05f, 8.120450570e-05f, 8.123698180e-05f, 8.126931445e-05f, 8.130150362e-05f, 8.133354927e-05f, 8.136545134e-05f, 8.139720980e-05f, 8.142882461e-05f, 8.146029572e-05f,
-8.149162310e-05f, 8.152280670e-05f, 8.155384647e-05f, 8.158474239e-05f, 8.161549441e-05f, 8.164610248e-05f, 8.167656658e-05f, 8.170688665e-05f, 8.173706267e-05f, 8.176709458e-05f,
-8.179698236e-05f, 8.182672596e-05f, 8.185632534e-05f, 8.188578047e-05f, 8.191509131e-05f, 8.194425782e-05f, 8.197327996e-05f, 8.200215769e-05f, 8.203089099e-05f, 8.205947981e-05f,
-8.208792411e-05f, 8.211622387e-05f, 8.214437904e-05f, 8.217238958e-05f, 8.220025547e-05f, 8.222797666e-05f, 8.225555313e-05f, 8.228298484e-05f, 8.231027175e-05f, 8.233741383e-05f,
-8.236441104e-05f, 8.239126335e-05f, 8.241797074e-05f, 8.244453316e-05f, 8.247095058e-05f, 8.249722297e-05f, 8.252335029e-05f, 8.254933252e-05f, 8.257516963e-05f, 8.260086158e-05f,
-8.262640833e-05f, 8.265180987e-05f, 8.267706615e-05f, 8.270217715e-05f, 8.272714284e-05f, 8.275196319e-05f, 8.277663816e-05f, 8.280116773e-05f, 8.282555187e-05f, 8.284979054e-05f,
-8.287388373e-05f, 8.289783140e-05f, 8.292163352e-05f, 8.294529007e-05f, 8.296880102e-05f, 8.299216633e-05f, 8.301538599e-05f, 8.303845997e-05f, 8.306138823e-05f, 8.308417076e-05f,
-8.310680752e-05f, 8.312929849e-05f, 8.315164365e-05f, 8.317384296e-05f, 8.319589641e-05f, 8.321780397e-05f, 8.323956561e-05f, 8.326118130e-05f, 8.328265104e-05f, 8.330397478e-05f,
-8.332515252e-05f, 8.334618421e-05f, 8.336706985e-05f, 8.338780940e-05f, 8.340840285e-05f, 8.342885017e-05f, 8.344915135e-05f, 8.346930635e-05f, 8.348931515e-05f, 8.350917774e-05f,
-8.352889410e-05f, 8.354846420e-05f, 8.356788802e-05f, 8.358716554e-05f, 8.360629674e-05f, 8.362528161e-05f, 8.364412012e-05f, 8.366281225e-05f, 8.368135798e-05f, 8.369975730e-05f,
-8.371801019e-05f, 8.373611662e-05f, 8.375407658e-05f, 8.377189005e-05f, 8.378955702e-05f, 8.380707747e-05f, 8.382445137e-05f, 8.384167872e-05f, 8.385875949e-05f, 8.387569367e-05f,
-8.389248125e-05f, 8.390912220e-05f, 8.392561652e-05f, 8.394196418e-05f, 8.395816518e-05f, 8.397421949e-05f, 8.399012711e-05f, 8.400588801e-05f, 8.402150219e-05f, 8.403696962e-05f,
-8.405229031e-05f, 8.406746423e-05f, 8.408249137e-05f, 8.409737171e-05f, 8.411210526e-05f, 8.412669198e-05f, 8.414113188e-05f, 8.415542493e-05f, 8.416957114e-05f, 8.418357048e-05f,
-8.419742294e-05f, 8.421112852e-05f, 8.422468721e-05f, 8.423809899e-05f, 8.425136385e-05f, 8.426448179e-05f, 8.427745279e-05f, 8.429027685e-05f, 8.430295395e-05f, 8.431548410e-05f,
-8.432786727e-05f, 8.434010347e-05f, 8.435219268e-05f, 8.436413489e-05f, 8.437593011e-05f, 8.438757831e-05f, 8.439907950e-05f, 8.441043367e-05f, 8.442164081e-05f, 8.443270092e-05f,
-8.444361398e-05f, 8.445438000e-05f, 8.446499897e-05f, 8.447547088e-05f, 8.448579573e-05f, 8.449597351e-05f, 8.450600423e-05f, 8.451588786e-05f, 8.452562442e-05f, 8.453521390e-05f,
-8.454465630e-05f, 8.455395160e-05f, 8.456309982e-05f, 8.457210094e-05f, 8.458095496e-05f, 8.458966189e-05f, 8.459822172e-05f, 8.460663444e-05f, 8.461490007e-05f, 8.462301859e-05f,
-8.463099000e-05f, 8.463881431e-05f, 8.464649152e-05f, 8.465402162e-05f, 8.466140461e-05f, 8.466864050e-05f, 8.467572929e-05f, 8.468267097e-05f, 8.468946556e-05f, 8.469611304e-05f,
-8.470261342e-05f, 8.470896671e-05f, 8.471517291e-05f, 8.472123201e-05f, 8.472714402e-05f, 8.473290895e-05f, 8.473852680e-05f, 8.474399757e-05f, 8.474932126e-05f, 8.475449788e-05f,
-8.475952744e-05f, 8.476440993e-05f, 8.476914537e-05f, 8.477373375e-05f, 8.477817509e-05f, 8.478246939e-05f, 8.478661665e-05f, 8.479061688e-05f, 8.479447009e-05f, 8.479817628e-05f,
-8.480173546e-05f, 8.480514764e-05f, 8.480841283e-05f, 8.481153103e-05f, 8.481450225e-05f, 8.481732649e-05f, 8.482000378e-05f, 8.482253411e-05f, 8.482491749e-05f, 8.482715394e-05f,
-8.482924346e-05f, 8.483118607e-05f, 8.483298176e-05f, 8.483463056e-05f, 8.483613247e-05f, 8.483748751e-05f, 8.483869568e-05f, 8.483975700e-05f, 8.484067147e-05f, 8.484143911e-05f,
-8.484205994e-05f, 8.484253395e-05f, 8.484286117e-05f, 8.484304161e-05f, 8.484307528e-05f, 8.484296220e-05f, 8.484270237e-05f, 8.484229581e-05f, 8.484174254e-05f, 8.484104257e-05f,
-8.484019591e-05f, 8.483920258e-05f, 8.483806260e-05f, 8.483677597e-05f, 8.483534272e-05f, 8.483376286e-05f, 8.483203640e-05f, 8.483016337e-05f, 8.482814377e-05f, 8.482597763e-05f,
-8.482366496e-05f, 8.482120578e-05f, 8.481860011e-05f, 8.481584796e-05f, 8.481294936e-05f, 8.480990431e-05f, 8.480671285e-05f, 8.480337498e-05f, 8.479989074e-05f, 8.479626012e-05f,
-8.479248317e-05f, 8.478855988e-05f, 8.478449030e-05f, 8.478027443e-05f, 8.477591230e-05f, 8.477140392e-05f, 8.476674932e-05f, 8.476194852e-05f, 8.475700154e-05f, 8.475190841e-05f,
-8.474666914e-05f, 8.474128375e-05f, 8.473575228e-05f, 8.473007474e-05f, 8.472425115e-05f, 8.471828154e-05f, 8.471216593e-05f, 8.470590435e-05f, 8.469949682e-05f, 8.469294336e-05f,
-8.468624400e-05f, 8.467939876e-05f, 8.467240768e-05f, 8.466527076e-05f, 8.465798805e-05f, 8.465055955e-05f, 8.464298531e-05f, 8.463526535e-05f, 8.462739969e-05f, 8.461938836e-05f,
-8.461123139e-05f, 8.460292880e-05f, 8.459448062e-05f, 8.458588689e-05f, 8.457714762e-05f, 8.456826285e-05f, 8.455923260e-05f, 8.455005691e-05f, 8.454073579e-05f, 8.453126929e-05f,
-8.452165743e-05f, 8.451190025e-05f, 8.450199776e-05f, 8.449195000e-05f, 8.448175701e-05f, 8.447141880e-05f, 8.446093543e-05f, 8.445030690e-05f, 8.443953326e-05f, 8.442861454e-05f,
-8.441755077e-05f, 8.440634198e-05f, 8.439498821e-05f, 8.438348948e-05f, 8.437184583e-05f, 8.436005730e-05f, 8.434812392e-05f, 8.433604571e-05f, 8.432382272e-05f, 8.431145498e-05f,
-8.429894252e-05f, 8.428628538e-05f, 8.427348359e-05f, 8.426053719e-05f, 8.424744622e-05f, 8.423421070e-05f, 8.422083068e-05f, 8.420730619e-05f, 8.419363727e-05f, 8.417982395e-05f,
-8.416586628e-05f, 8.415176428e-05f, 8.413751800e-05f, 8.412312748e-05f, 8.410859274e-05f, 8.409391384e-05f, 8.407909080e-05f, 8.406412367e-05f, 8.404901249e-05f, 8.403375729e-05f,
-8.401835812e-05f, 8.400281501e-05f, 8.398712801e-05f, 8.397129715e-05f, 8.395532247e-05f, 8.393920402e-05f, 8.392294184e-05f, 8.390653596e-05f, 8.388998643e-05f, 8.387329329e-05f,
-8.385645659e-05f, 8.383947635e-05f, 8.382235264e-05f, 8.380508548e-05f, 8.378767493e-05f, 8.377012102e-05f, 8.375242380e-05f, 8.373458331e-05f, 8.371659959e-05f, 8.369847270e-05f,
-8.368020267e-05f, 8.366178955e-05f, 8.364323338e-05f, 8.362453421e-05f, 8.360569208e-05f, 8.358670705e-05f, 8.356757914e-05f, 8.354830842e-05f, 8.352889493e-05f, 8.350933871e-05f,
-8.348963981e-05f, 8.346979828e-05f, 8.344981416e-05f, 8.342968750e-05f, 8.340941835e-05f, 8.338900677e-05f, 8.336845278e-05f, 8.334775645e-05f, 8.332691783e-05f, 8.330593695e-05f,
-8.328481388e-05f, 8.326354866e-05f, 8.324214134e-05f, 8.322059196e-05f, 8.319890059e-05f, 8.317706727e-05f, 8.315509205e-05f, 8.313297498e-05f, 8.311071611e-05f, 8.308831550e-05f,
-8.306577319e-05f, 8.304308924e-05f, 8.302026370e-05f, 8.299729662e-05f, 8.297418806e-05f, 8.295093806e-05f, 8.292754669e-05f, 8.290401398e-05f, 8.288034001e-05f, 8.285652481e-05f,
-8.283256845e-05f, 8.280847098e-05f, 8.278423245e-05f, 8.275985292e-05f, 8.273533244e-05f, 8.271067107e-05f, 8.268586887e-05f, 8.266092588e-05f, 8.263584217e-05f, 8.261061779e-05f,
-8.258525279e-05f, 8.255974724e-05f, 8.253410119e-05f, 8.250831470e-05f, 8.248238782e-05f, 8.245632062e-05f, 8.243011315e-05f, 8.240376546e-05f, 8.237727763e-05f, 8.235064969e-05f,
-8.232388173e-05f, 8.229697378e-05f, 8.226992592e-05f, 8.224273820e-05f, 8.221541068e-05f, 8.218794342e-05f, 8.216033648e-05f, 8.213258992e-05f, 8.210470381e-05f, 8.207667820e-05f,
-8.204851315e-05f, 8.202020873e-05f, 8.199176500e-05f, 8.196318202e-05f, 8.193445984e-05f, 8.190559854e-05f, 8.187659818e-05f, 8.184745882e-05f, 8.181818051e-05f, 8.178876333e-05f,
-8.175920734e-05f, 8.172951260e-05f, 8.169967918e-05f, 8.166970714e-05f, 8.163959654e-05f, 8.160934745e-05f, 8.157895994e-05f, 8.154843406e-05f, 8.151776989e-05f, 8.148696749e-05f,
-8.145602692e-05f, 8.142494825e-05f, 8.139373156e-05f, 8.136237689e-05f, 8.133088433e-05f, 8.129925394e-05f, 8.126748578e-05f, 8.123557993e-05f, 8.120353644e-05f, 8.117135539e-05f,
-8.113903685e-05f, 8.110658089e-05f, 8.107398756e-05f, 8.104125695e-05f, 8.100838912e-05f, 8.097538414e-05f, 8.094224208e-05f, 8.090896301e-05f, 8.087554700e-05f, 8.084199412e-05f,
-8.080830444e-05f, 8.077447803e-05f, 8.074051496e-05f, 8.070641531e-05f, 8.067217913e-05f, 8.063780652e-05f, 8.060329753e-05f, 8.056865224e-05f, 8.053387073e-05f, 8.049895305e-05f,
-8.046389930e-05f, 8.042870953e-05f, 8.039338383e-05f, 8.035792227e-05f, 8.032232491e-05f, 8.028659184e-05f, 8.025072313e-05f, 8.021471885e-05f, 8.017857908e-05f, 8.014230388e-05f,
-8.010589335e-05f, 8.006934755e-05f, 8.003266655e-05f, 7.999585044e-05f, 7.995889929e-05f, 7.992181317e-05f, 7.988459217e-05f, 7.984723635e-05f, 7.980974580e-05f, 7.977212059e-05f,
-7.973436080e-05f, 7.969646651e-05f, 7.965843779e-05f, 7.962027473e-05f, 7.958197739e-05f, 7.954354587e-05f, 7.950498023e-05f, 7.946628056e-05f, 7.942744693e-05f, 7.938847943e-05f,
-7.934937813e-05f, 7.931014312e-05f, 7.927077448e-05f, 7.923127227e-05f, 7.919163660e-05f, 7.915186752e-05f, 7.911196514e-05f, 7.907192952e-05f, 7.903176075e-05f, 7.899145891e-05f,
-7.895102409e-05f, 7.891045635e-05f, 7.886975580e-05f, 7.882892250e-05f, 7.878795655e-05f, 7.874685801e-05f, 7.870562699e-05f, 7.866426356e-05f, 7.862276780e-05f, 7.858113980e-05f,
-7.853937964e-05f, 7.849748741e-05f, 7.845546319e-05f, 7.841330706e-05f, 7.837101911e-05f, 7.832859943e-05f, 7.828604810e-05f, 7.824336521e-05f, 7.820055084e-05f, 7.815760507e-05f,
-7.811452800e-05f, 7.807131971e-05f, 7.802798029e-05f, 7.798450982e-05f, 7.794090839e-05f, 7.789717609e-05f, 7.785331301e-05f, 7.780931923e-05f, 7.776519484e-05f, 7.772093993e-05f,
-7.767655459e-05f, 7.763203891e-05f, 7.758739297e-05f, 7.754261686e-05f, 7.749771068e-05f, 7.745267451e-05f, 7.740750845e-05f, 7.736221258e-05f, 7.731678699e-05f, 7.727123177e-05f,
-7.722554702e-05f, 7.717973282e-05f, 7.713378927e-05f, 7.708771645e-05f, 7.704151446e-05f, 7.699518340e-05f, 7.694872334e-05f, 7.690213438e-05f, 7.685541663e-05f, 7.680857016e-05f,
-7.676159507e-05f, 7.671449146e-05f, 7.666725941e-05f, 7.661989902e-05f, 7.657241039e-05f, 7.652479360e-05f, 7.647704876e-05f, 7.642917595e-05f, 7.638117528e-05f, 7.633304682e-05f,
-7.628479069e-05f, 7.623640697e-05f, 7.618789577e-05f, 7.613925716e-05f, 7.609049126e-05f, 7.604159816e-05f, 7.599257795e-05f, 7.594343073e-05f, 7.589415659e-05f, 7.584475564e-05f,
-7.579522797e-05f, 7.574557367e-05f, 7.569579285e-05f, 7.564588560e-05f, 7.559585202e-05f, 7.554569221e-05f, 7.549540626e-05f, 7.544499428e-05f, 7.539445636e-05f, 7.534379260e-05f,
-7.529300311e-05f, 7.524208797e-05f, 7.519104729e-05f, 7.513988118e-05f, 7.508858972e-05f, 7.503717302e-05f, 7.498563118e-05f, 7.493396430e-05f, 7.488217248e-05f, 7.483025582e-05f,
-7.477821442e-05f, 7.472604839e-05f, 7.467375783e-05f, 7.462134283e-05f, 7.456880350e-05f, 7.451613994e-05f, 7.446335226e-05f, 7.441044055e-05f, 7.435740492e-05f, 7.430424548e-05f,
-7.425096231e-05f, 7.419755554e-05f, 7.414402526e-05f, 7.409037158e-05f, 7.403659459e-05f, 7.398269441e-05f, 7.392867114e-05f, 7.387452489e-05f, 7.382025575e-05f, 7.376586383e-05f,
-7.371134924e-05f, 7.365671209e-05f, 7.360195247e-05f, 7.354707050e-05f, 7.349206628e-05f, 7.343693992e-05f, 7.338169152e-05f, 7.332632120e-05f, 7.327082905e-05f, 7.321521518e-05f,
-7.315947971e-05f, 7.310362274e-05f, 7.304764437e-05f, 7.299154472e-05f, 7.293532389e-05f, 7.287898199e-05f, 7.282251913e-05f, 7.276593542e-05f, 7.270923096e-05f, 7.265240587e-05f,
-7.259546026e-05f, 7.253839423e-05f, 7.248120790e-05f, 7.242390137e-05f, 7.236647475e-05f, 7.230892816e-05f, 7.225126170e-05f, 7.219347549e-05f, 7.213556963e-05f, 7.207754424e-05f,
-7.201939943e-05f, 7.196113531e-05f, 7.190275199e-05f, 7.184424958e-05f, 7.178562820e-05f, 7.172688796e-05f, 7.166802897e-05f, 7.160905134e-05f, 7.154995518e-05f, 7.149074061e-05f,
-7.143140775e-05f, 7.137195670e-05f, 7.131238757e-05f, 7.125270049e-05f, 7.119289557e-05f, 7.113297291e-05f, 7.107293264e-05f, 7.101277487e-05f, 7.095249971e-05f, 7.089210728e-05f,
-7.083159770e-05f, 7.077097107e-05f, 7.071022752e-05f, 7.064936716e-05f, 7.058839011e-05f, 7.052729648e-05f, 7.046608638e-05f, 7.040475994e-05f, 7.034331727e-05f, 7.028175850e-05f,
-7.022008372e-05f, 7.015829307e-05f, 7.009638666e-05f, 7.003436461e-05f, 6.997222703e-05f, 6.990997405e-05f, 6.984760577e-05f, 6.978512233e-05f, 6.972252384e-05f, 6.965981041e-05f,
-6.959698217e-05f, 6.953403923e-05f, 6.947098172e-05f, 6.940780976e-05f, 6.934452345e-05f, 6.928112293e-05f, 6.921760832e-05f, 6.915397973e-05f, 6.909023728e-05f, 6.902638109e-05f,
-6.896241130e-05f, 6.889832801e-05f, 6.883413134e-05f, 6.876982143e-05f, 6.870539838e-05f, 6.864086233e-05f, 6.857621340e-05f, 6.851145169e-05f, 6.844657735e-05f, 6.838159049e-05f,
-6.831649123e-05f, 6.825127970e-05f, 6.818595602e-05f, 6.812052031e-05f, 6.805497270e-05f, 6.798931331e-05f, 6.792354226e-05f, 6.785765967e-05f, 6.779166568e-05f, 6.772556041e-05f,
-6.765934397e-05f, 6.759301650e-05f, 6.752657812e-05f, 6.746002895e-05f, 6.739336912e-05f, 6.732659876e-05f, 6.725971799e-05f, 6.719272693e-05f, 6.712562572e-05f, 6.705841447e-05f,
-6.699109332e-05f, 6.692366239e-05f, 6.685612181e-05f, 6.678847170e-05f, 6.672071220e-05f, 6.665284342e-05f, 6.658486550e-05f, 6.651677856e-05f, 6.644858273e-05f, 6.638027814e-05f,
-6.631186492e-05f, 6.624334319e-05f, 6.617471309e-05f, 6.610597474e-05f, 6.603712827e-05f, 6.596817381e-05f, 6.589911149e-05f, 6.582994143e-05f, 6.576066378e-05f, 6.569127865e-05f,
-6.562178618e-05f, 6.555218649e-05f, 6.548247972e-05f, 6.541266600e-05f, 6.534274546e-05f, 6.527271823e-05f, 6.520258443e-05f, 6.513234421e-05f, 6.506199769e-05f, 6.499154500e-05f,
-6.492098627e-05f, 6.485032164e-05f, 6.477955124e-05f, 6.470867520e-05f, 6.463769365e-05f, 6.456660672e-05f, 6.449541455e-05f, 6.442411728e-05f, 6.435271502e-05f, 6.428120792e-05f,
-6.420959611e-05f, 6.413787972e-05f, 6.406605889e-05f, 6.399413375e-05f, 6.392210443e-05f, 6.384997107e-05f, 6.377773380e-05f, 6.370539275e-05f, 6.363294807e-05f, 6.356039988e-05f,
-6.348774833e-05f, 6.341499354e-05f, 6.334213565e-05f, 6.326917479e-05f, 6.319611111e-05f, 6.312294474e-05f, 6.304967581e-05f, 6.297630446e-05f, 6.290283082e-05f, 6.282925504e-05f,
-6.275557724e-05f, 6.268179757e-05f, 6.260791616e-05f, 6.253393316e-05f, 6.245984868e-05f, 6.238566289e-05f, 6.231137590e-05f, 6.223698786e-05f, 6.216249891e-05f, 6.208790919e-05f,
-6.201321883e-05f, 6.193842797e-05f, 6.186353675e-05f, 6.178854531e-05f, 6.171345378e-05f, 6.163826232e-05f, 6.156297105e-05f, 6.148758011e-05f, 6.141208965e-05f, 6.133649980e-05f,
-6.126081071e-05f, 6.118502251e-05f, 6.110913535e-05f, 6.103314936e-05f, 6.095706468e-05f, 6.088088146e-05f, 6.080459984e-05f, 6.072821995e-05f, 6.065174195e-05f, 6.057516596e-05f,
-6.049849213e-05f, 6.042172060e-05f, 6.034485152e-05f, 6.026788503e-05f, 6.019082126e-05f, 6.011366036e-05f, 6.003640247e-05f, 5.995904774e-05f, 5.988159631e-05f, 5.980404831e-05f,
-5.972640390e-05f, 5.964866322e-05f, 5.957082640e-05f, 5.949289360e-05f, 5.941486495e-05f, 5.933674061e-05f, 5.925852071e-05f, 5.918020539e-05f, 5.910179481e-05f, 5.902328910e-05f,
-5.894468842e-05f, 5.886599290e-05f, 5.878720269e-05f, 5.870831794e-05f, 5.862933878e-05f, 5.855026537e-05f, 5.847109786e-05f, 5.839183637e-05f, 5.831248107e-05f, 5.823303210e-05f,
-5.815348960e-05f, 5.807385373e-05f, 5.799412461e-05f, 5.791430241e-05f, 5.783438727e-05f, 5.775437934e-05f, 5.767427875e-05f, 5.759408567e-05f, 5.751380023e-05f, 5.743342259e-05f,
-5.735295289e-05f, 5.727239128e-05f, 5.719173790e-05f, 5.711099291e-05f, 5.703015645e-05f, 5.694922868e-05f, 5.686820973e-05f, 5.678709976e-05f, 5.670589891e-05f, 5.662460734e-05f,
-5.654322520e-05f, 5.646175262e-05f, 5.638018977e-05f, 5.629853679e-05f, 5.621679383e-05f, 5.613496104e-05f, 5.605303857e-05f, 5.597102657e-05f, 5.588892519e-05f, 5.580673459e-05f,
-5.572445490e-05f, 5.564208628e-05f, 5.555962888e-05f, 5.547708286e-05f, 5.539444836e-05f, 5.531172553e-05f, 5.522891453e-05f, 5.514601550e-05f, 5.506302860e-05f, 5.497995399e-05f,
-5.489679180e-05f, 5.481354219e-05f, 5.473020532e-05f, 5.464678134e-05f, 5.456327040e-05f, 5.447967265e-05f, 5.439598824e-05f, 5.431221733e-05f, 5.422836007e-05f, 5.414441661e-05f,
-5.406038711e-05f, 5.397627172e-05f, 5.389207058e-05f, 5.380778387e-05f, 5.372341172e-05f, 5.363895430e-05f, 5.355441175e-05f, 5.346978423e-05f, 5.338507190e-05f, 5.330027491e-05f,
-5.321539341e-05f, 5.313042756e-05f, 5.304537752e-05f, 5.296024343e-05f, 5.287502545e-05f, 5.278972374e-05f, 5.270433845e-05f, 5.261886974e-05f, 5.253331777e-05f, 5.244768268e-05f,
-5.236196464e-05f, 5.227616380e-05f, 5.219028032e-05f, 5.210431435e-05f, 5.201826605e-05f, 5.193213557e-05f, 5.184592308e-05f, 5.175962872e-05f, 5.167325266e-05f, 5.158679505e-05f,
-5.150025605e-05f, 5.141363582e-05f, 5.132693451e-05f, 5.124015228e-05f, 5.115328928e-05f, 5.106634569e-05f, 5.097932165e-05f, 5.089221732e-05f, 5.080503286e-05f, 5.071776842e-05f,
-5.063042418e-05f, 5.054300027e-05f, 5.045549687e-05f, 5.036791414e-05f, 5.028025222e-05f, 5.019251128e-05f, 5.010469148e-05f, 5.001679297e-05f, 4.992881592e-05f, 4.984076049e-05f,
-4.975262683e-05f, 4.966441511e-05f, 4.957612548e-05f, 4.948775811e-05f, 4.939931315e-05f, 4.931079076e-05f, 4.922219111e-05f, 4.913351436e-05f, 4.904476065e-05f, 4.895593017e-05f,
-4.886702306e-05f, 4.877803949e-05f, 4.868897962e-05f, 4.859984360e-05f, 4.851063161e-05f, 4.842134379e-05f, 4.833198033e-05f, 4.824254136e-05f, 4.815302706e-05f, 4.806343759e-05f,
-4.797377311e-05f, 4.788403378e-05f, 4.779421976e-05f, 4.770433122e-05f, 4.761436832e-05f, 4.752433122e-05f, 4.743422008e-05f, 4.734403506e-05f, 4.725377634e-05f, 4.716344406e-05f,
-4.707303840e-05f, 4.698255952e-05f, 4.689200758e-05f, 4.680138274e-05f, 4.671068517e-05f, 4.661991503e-05f, 4.652907248e-05f, 4.643815770e-05f, 4.634717083e-05f, 4.625611205e-05f,
-4.616498152e-05f, 4.607377941e-05f, 4.598250587e-05f, 4.589116108e-05f, 4.579974519e-05f, 4.570825838e-05f, 4.561670080e-05f, 4.552507262e-05f, 4.543337402e-05f, 4.534160514e-05f,
-4.524976616e-05f, 4.515785724e-05f, 4.506587855e-05f, 4.497383025e-05f, 4.488171251e-05f, 4.478952550e-05f, 4.469726938e-05f, 4.460494431e-05f, 4.451255046e-05f, 4.442008800e-05f,
-4.432755710e-05f, 4.423495792e-05f, 4.414229062e-05f, 4.404955538e-05f, 4.395675235e-05f, 4.386388172e-05f, 4.377094364e-05f, 4.367793828e-05f, 4.358486580e-05f, 4.349172639e-05f,
-4.339852019e-05f, 4.330524738e-05f, 4.321190813e-05f, 4.311850261e-05f, 4.302503097e-05f, 4.293149340e-05f, 4.283789005e-05f, 4.274422110e-05f, 4.265048672e-05f, 4.255668706e-05f,
-4.246282231e-05f, 4.236889262e-05f, 4.227489817e-05f, 4.218083913e-05f, 4.208671565e-05f, 4.199252793e-05f, 4.189827611e-05f, 4.180396037e-05f, 4.170958088e-05f, 4.161513781e-05f,
-4.152063133e-05f, 4.142606161e-05f, 4.133142881e-05f, 4.123673310e-05f, 4.114197466e-05f, 4.104715366e-05f, 4.095227026e-05f, 4.085732464e-05f, 4.076231696e-05f, 4.066724739e-05f,
-4.057211611e-05f, 4.047692328e-05f, 4.038166908e-05f, 4.028635367e-05f, 4.019097723e-05f, 4.009553993e-05f, 4.000004193e-05f, 3.990448341e-05f, 3.980886454e-05f, 3.971318549e-05f,
-3.961744643e-05f, 3.952164754e-05f, 3.942578897e-05f, 3.932987091e-05f, 3.923389352e-05f, 3.913785699e-05f, 3.904176147e-05f, 3.894560714e-05f, 3.884939417e-05f, 3.875312273e-05f,
-3.865679301e-05f, 3.856040515e-05f, 3.846395935e-05f, 3.836745577e-05f, 3.827089459e-05f, 3.817427597e-05f, 3.807760009e-05f, 3.798086712e-05f, 3.788407724e-05f, 3.778723061e-05f,
-3.769032741e-05f, 3.759336781e-05f, 3.749635199e-05f, 3.739928011e-05f, 3.730215236e-05f, 3.720496890e-05f, 3.710772990e-05f, 3.701043555e-05f, 3.691308601e-05f, 3.681568146e-05f,
-3.671822207e-05f, 3.662070801e-05f, 3.652313947e-05f, 3.642551660e-05f, 3.632783959e-05f, 3.623010861e-05f, 3.613232383e-05f, 3.603448544e-05f, 3.593659359e-05f, 3.583864847e-05f,
-3.574065025e-05f, 3.564259910e-05f, 3.554449521e-05f, 3.544633873e-05f, 3.534812986e-05f, 3.524986876e-05f, 3.515155561e-05f, 3.505319058e-05f, 3.495477385e-05f, 3.485630559e-05f,
-3.475778598e-05f, 3.465921519e-05f, 3.456059340e-05f, 3.446192078e-05f, 3.436319752e-05f, 3.426442377e-05f, 3.416559973e-05f, 3.406672556e-05f, 3.396780144e-05f, 3.386882755e-05f,
-3.376980406e-05f, 3.367073115e-05f, 3.357160899e-05f, 3.347243777e-05f, 3.337321765e-05f, 3.327394881e-05f, 3.317463143e-05f, 3.307526568e-05f, 3.297585175e-05f, 3.287638980e-05f,
-3.277688002e-05f, 3.267732258e-05f, 3.257771765e-05f, 3.247806542e-05f, 3.237836606e-05f, 3.227861975e-05f, 3.217882666e-05f, 3.207898697e-05f, 3.197910086e-05f, 3.187916850e-05f,
-3.177919008e-05f, 3.167916576e-05f, 3.157909574e-05f, 3.147898017e-05f, 3.137881925e-05f, 3.127861315e-05f, 3.117836204e-05f, 3.107806610e-05f, 3.097772552e-05f, 3.087734047e-05f,
-3.077691112e-05f, 3.067643766e-05f, 3.057592026e-05f, 3.047535910e-05f, 3.037475435e-05f, 3.027410621e-05f, 3.017341484e-05f, 3.007268042e-05f, 2.997190313e-05f, 2.987108315e-05f,
-2.977022066e-05f, 2.966931584e-05f, 2.956836886e-05f, 2.946737990e-05f, 2.936634914e-05f, 2.926527676e-05f, 2.916416294e-05f, 2.906300786e-05f, 2.896181170e-05f, 2.886057463e-05f,
-2.875929683e-05f, 2.865797849e-05f, 2.855661977e-05f, 2.845522087e-05f, 2.835378196e-05f, 2.825230322e-05f, 2.815078482e-05f, 2.804922696e-05f, 2.794762980e-05f, 2.784599352e-05f,
-2.774431831e-05f, 2.764260435e-05f, 2.754085181e-05f, 2.743906088e-05f, 2.733723173e-05f, 2.723536454e-05f, 2.713345949e-05f, 2.703151677e-05f, 2.692953655e-05f, 2.682751902e-05f,
-2.672546435e-05f, 2.662337271e-05f, 2.652124431e-05f, 2.641907930e-05f, 2.631687788e-05f, 2.621464022e-05f, 2.611236650e-05f, 2.601005690e-05f, 2.590771161e-05f, 2.580533081e-05f,
-2.570291466e-05f, 2.560046337e-05f, 2.549797709e-05f, 2.539545603e-05f, 2.529290034e-05f, 2.519031023e-05f, 2.508768586e-05f, 2.498502743e-05f, 2.488233510e-05f, 2.477960906e-05f,
-2.467684949e-05f, 2.457405657e-05f, 2.447123048e-05f, 2.436837141e-05f, 2.426547953e-05f, 2.416255502e-05f, 2.405959808e-05f, 2.395660887e-05f, 2.385358757e-05f, 2.375053438e-05f,
-2.364744947e-05f, 2.354433302e-05f, 2.344118521e-05f, 2.333800623e-05f, 2.323479626e-05f, 2.313155547e-05f, 2.302828405e-05f, 2.292498218e-05f, 2.282165004e-05f, 2.271828782e-05f,
-2.261489569e-05f, 2.251147384e-05f, 2.240802245e-05f, 2.230454169e-05f, 2.220103176e-05f, 2.209749283e-05f, 2.199392509e-05f, 2.189032871e-05f, 2.178670389e-05f, 2.168305079e-05f,
-2.157936961e-05f, 2.147566052e-05f, 2.137192370e-05f, 2.126815935e-05f, 2.116436764e-05f, 2.106054875e-05f, 2.095670286e-05f, 2.085283016e-05f, 2.074893084e-05f, 2.064500506e-05f,
-2.054105301e-05f, 2.043707489e-05f, 2.033307086e-05f, 2.022904111e-05f, 2.012498582e-05f, 2.002090518e-05f, 1.991679937e-05f, 1.981266857e-05f, 1.970851296e-05f, 1.960433272e-05f,
-1.950012804e-05f, 1.939589910e-05f, 1.929164609e-05f, 1.918736918e-05f, 1.908306856e-05f, 1.897874440e-05f, 1.887439691e-05f, 1.877002624e-05f, 1.866563260e-05f, 1.856121615e-05f,
-1.845677710e-05f, 1.835231560e-05f, 1.824783186e-05f, 1.814332605e-05f, 1.803879835e-05f, 1.793424895e-05f, 1.782967804e-05f, 1.772508578e-05f, 1.762047238e-05f, 1.751583800e-05f,
-1.741118284e-05f, 1.730650707e-05f, 1.720181088e-05f, 1.709709445e-05f, 1.699235796e-05f, 1.688760161e-05f, 1.678282556e-05f, 1.667803001e-05f, 1.657321514e-05f, 1.646838112e-05f,
-1.636352815e-05f, 1.625865640e-05f, 1.615376607e-05f, 1.604885733e-05f, 1.594393036e-05f, 1.583898535e-05f, 1.573402249e-05f, 1.562904195e-05f, 1.552404391e-05f, 1.541902858e-05f,
-1.531399611e-05f, 1.520894671e-05f, 1.510388054e-05f, 1.499879781e-05f, 1.489369868e-05f, 1.478858334e-05f, 1.468345198e-05f, 1.457830478e-05f, 1.447314191e-05f, 1.436796358e-05f,
-1.426276995e-05f, 1.415756122e-05f, 1.405233756e-05f, 1.394709916e-05f, 1.384184621e-05f, 1.373657888e-05f, 1.363129735e-05f, 1.352600183e-05f, 1.342069248e-05f, 1.331536948e-05f,
-1.321003304e-05f, 1.310468331e-05f, 1.299932050e-05f, 1.289394479e-05f, 1.278855635e-05f, 1.268315537e-05f, 1.257774204e-05f, 1.247231653e-05f, 1.236687903e-05f, 1.226142974e-05f,
-1.215596881e-05f, 1.205049646e-05f, 1.194501284e-05f, 1.183951816e-05f, 1.173401259e-05f, 1.162849631e-05f, 1.152296952e-05f, 1.141743239e-05f, 1.131188510e-05f, 1.120632785e-05f,
-1.110076081e-05f, 1.099518416e-05f, 1.088959810e-05f, 1.078400281e-05f, 1.067839846e-05f, 1.057278524e-05f, 1.046716334e-05f, 1.036153294e-05f, 1.025589422e-05f, 1.015024736e-05f,
-1.004459256e-05f, 9.938929990e-06f, 9.833259836e-06f, 9.727582282e-06f, 9.621897512e-06f, 9.516205709e-06f, 9.410507057e-06f, 9.304801739e-06f, 9.199089939e-06f, 9.093371840e-06f,
-8.987647626e-06f, 8.881917481e-06f, 8.776181587e-06f, 8.670440129e-06f, 8.564693289e-06f, 8.458941252e-06f, 8.353184200e-06f, 8.247422318e-06f, 8.141655788e-06f, 8.035884794e-06f,
-7.930109519e-06f, 7.824330148e-06f, 7.718546863e-06f, 7.612759847e-06f, 7.506969284e-06f, 7.401175358e-06f, 7.295378252e-06f, 7.189578149e-06f, 7.083775232e-06f, 6.977969685e-06f,
-6.872161692e-06f, 6.766351435e-06f, 6.660539097e-06f, 6.554724863e-06f, 6.448908915e-06f, 6.343091436e-06f, 6.237272610e-06f, 6.131452621e-06f, 6.025631650e-06f, 5.919809882e-06f,
-5.813987500e-06f, 5.708164686e-06f, 5.602341624e-06f, 5.496518497e-06f, 5.390695489e-06f, 5.284872782e-06f, 5.179050559e-06f, 5.073229003e-06f, 4.967408298e-06f, 4.861588627e-06f,
-4.755770172e-06f, 4.649953116e-06f, 4.544137643e-06f, 4.438323935e-06f, 4.332512176e-06f, 4.226702548e-06f, 4.120895234e-06f, 4.015090417e-06f, 3.909288280e-06f, 3.803489006e-06f,
-3.697692777e-06f, 3.591899777e-06f, 3.486110188e-06f, 3.380324192e-06f, 3.274541973e-06f, 3.168763714e-06f, 3.062989596e-06f, 2.957219803e-06f, 2.851454517e-06f, 2.745693920e-06f,
-2.639938196e-06f, 2.534187527e-06f, 2.428442096e-06f, 2.322702084e-06f, 2.216967675e-06f, 2.111239050e-06f, 2.005516393e-06f, 1.899799886e-06f, 1.794089711e-06f, 1.688386050e-06f,
-1.582689085e-06f, 1.476999000e-06f, 1.371315976e-06f, 1.265640195e-06f, 1.159971840e-06f, 1.054311093e-06f, 9.486581354e-07f, 8.430131501e-07f, 7.373763191e-07f, 6.317478241e-07f,
-5.261278474e-07f, 4.205165709e-07f, 3.149141765e-07f, 2.093208462e-07f, 1.037367618e-07f, -1.837894817e-09f, -1.074029418e-07f, -2.129581973e-07f, -3.185034797e-07f, -4.240386072e-07f,
--5.295633982e-07f, -6.350776708e-07f, -7.405812437e-07f, -8.460739351e-07f, -9.515555635e-07f, -1.057025947e-06f, -1.162484905e-06f, -1.267932256e-06f, -1.373367818e-06f, -1.478791409e-06f,
--1.584202849e-06f, -1.689601956e-06f, -1.794988549e-06f, -1.900362447e-06f, -2.005723468e-06f, -2.111071432e-06f, -2.216406157e-06f, -2.321727463e-06f, -2.427035167e-06f, -2.532329090e-06f,
--2.637609050e-06f, -2.742874866e-06f, -2.848126358e-06f, -2.953363345e-06f, -3.058585646e-06f, -3.163793079e-06f, -3.268985466e-06f, -3.374162624e-06f, -3.479324373e-06f, -3.584470534e-06f,
--3.689600924e-06f, -3.794715364e-06f, -3.899813673e-06f, -4.004895671e-06f, -4.109961178e-06f, -4.215010013e-06f, -4.320041996e-06f, -4.425056946e-06f, -4.530054684e-06f, -4.635035030e-06f,
--4.739997803e-06f, -4.844942824e-06f, -4.949869912e-06f, -5.054778887e-06f, -5.159669570e-06f, -5.264541781e-06f, -5.369395340e-06f, -5.474230067e-06f, -5.579045782e-06f, -5.683842307e-06f,
--5.788619461e-06f, -5.893377064e-06f, -5.998114938e-06f, -6.102832903e-06f, -6.207530780e-06f, -6.312208388e-06f, -6.416865550e-06f, -6.521502085e-06f, -6.626117814e-06f, -6.730712559e-06f,
--6.835286140e-06f, -6.939838378e-06f, -7.044369095e-06f, -7.148878111e-06f, -7.253365247e-06f, -7.357830326e-06f, -7.462273167e-06f, -7.566693592e-06f, -7.671091423e-06f, -7.775466481e-06f,
--7.879818587e-06f, -7.984147563e-06f, -8.088453231e-06f, -8.192735412e-06f, -8.296993928e-06f, -8.401228601e-06f, -8.505439252e-06f, -8.609625703e-06f, -8.713787777e-06f, -8.817925295e-06f,
--8.922038079e-06f, -9.026125951e-06f, -9.130188734e-06f, -9.234226250e-06f, -9.338238321e-06f, -9.442224769e-06f, -9.546185417e-06f, -9.650120087e-06f, -9.754028602e-06f, -9.857910784e-06f,
--9.961766456e-06f, -1.006559544e-05f, -1.016939756e-05f, -1.027317264e-05f, -1.037692050e-05f, -1.048064096e-05f, -1.058433385e-05f, -1.068799900e-05f, -1.079163621e-05f, -1.089524532e-05f,
--1.099882615e-05f, -1.110237853e-05f, -1.120590227e-05f, -1.130939720e-05f, -1.141286314e-05f, -1.151629993e-05f, -1.161970737e-05f, -1.172308530e-05f, -1.182643353e-05f, -1.192975190e-05f,
--1.203304023e-05f, -1.213629833e-05f, -1.223952604e-05f, -1.234272318e-05f, -1.244588957e-05f, -1.254902504e-05f, -1.265212941e-05f, -1.275520250e-05f, -1.285824415e-05f, -1.296125417e-05f,
--1.306423239e-05f, -1.316717863e-05f, -1.327009272e-05f, -1.337297449e-05f, -1.347582376e-05f, -1.357864034e-05f, -1.368142408e-05f, -1.378417479e-05f, -1.388689231e-05f, -1.398957644e-05f,
--1.409222703e-05f, -1.419484389e-05f, -1.429742685e-05f, -1.439997574e-05f, -1.450249038e-05f, -1.460497059e-05f, -1.470741621e-05f, -1.480982706e-05f, -1.491220297e-05f, -1.501454376e-05f,
--1.511684925e-05f, -1.521911928e-05f, -1.532135367e-05f, -1.542355224e-05f, -1.552571483e-05f, -1.562784126e-05f, -1.572993135e-05f, -1.583198494e-05f, -1.593400184e-05f, -1.603598189e-05f,
--1.613792491e-05f, -1.623983074e-05f, -1.634169919e-05f, -1.644353009e-05f, -1.654532328e-05f, -1.664707857e-05f, -1.674879580e-05f, -1.685047480e-05f, -1.695211538e-05f, -1.705371738e-05f,
--1.715528063e-05f, -1.725680496e-05f, -1.735829018e-05f, -1.745973614e-05f, -1.756114265e-05f, -1.766250955e-05f, -1.776383667e-05f, -1.786512382e-05f, -1.796637085e-05f, -1.806757758e-05f,
--1.816874383e-05f, -1.826986944e-05f, -1.837095424e-05f, -1.847199805e-05f, -1.857300071e-05f, -1.867396203e-05f, -1.877488186e-05f, -1.887576002e-05f, -1.897659633e-05f, -1.907739064e-05f,
--1.917814276e-05f, -1.927885254e-05f, -1.937951979e-05f, -1.948014434e-05f, -1.958072603e-05f, -1.968126469e-05f, -1.978176015e-05f, -1.988221223e-05f, -1.998262077e-05f, -2.008298560e-05f,
--2.018330654e-05f, -2.028358343e-05f, -2.038381610e-05f, -2.048400438e-05f, -2.058414810e-05f, -2.068424709e-05f, -2.078430118e-05f, -2.088431020e-05f, -2.098427398e-05f, -2.108419236e-05f,
--2.118406517e-05f, -2.128389223e-05f, -2.138367338e-05f, -2.148340845e-05f, -2.158309727e-05f, -2.168273967e-05f, -2.178233549e-05f, -2.188188456e-05f, -2.198138670e-05f, -2.208084176e-05f,
--2.218024956e-05f, -2.227960993e-05f, -2.237892271e-05f, -2.247818774e-05f, -2.257740483e-05f, -2.267657383e-05f, -2.277569457e-05f, -2.287476689e-05f, -2.297379060e-05f, -2.307276555e-05f,
--2.317169158e-05f, -2.327056850e-05f, -2.336939617e-05f, -2.346817440e-05f, -2.356690304e-05f, -2.366558192e-05f, -2.376421087e-05f, -2.386278972e-05f, -2.396131832e-05f, -2.405979649e-05f,
--2.415822406e-05f, -2.425660088e-05f, -2.435492677e-05f, -2.445320158e-05f, -2.455142513e-05f, -2.464959726e-05f, -2.474771781e-05f, -2.484578661e-05f, -2.494380349e-05f, -2.504176829e-05f,
--2.513968085e-05f, -2.523754100e-05f, -2.533534858e-05f, -2.543310341e-05f, -2.553080535e-05f, -2.562845422e-05f, -2.572604985e-05f, -2.582359210e-05f, -2.592108078e-05f, -2.601851574e-05f,
--2.611589681e-05f, -2.621322384e-05f, -2.631049665e-05f, -2.640771508e-05f, -2.650487898e-05f, -2.660198817e-05f, -2.669904250e-05f, -2.679604179e-05f, -2.689298589e-05f, -2.698987464e-05f,
--2.708670788e-05f, -2.718348543e-05f, -2.728020714e-05f, -2.737687284e-05f, -2.747348238e-05f, -2.757003559e-05f, -2.766653231e-05f, -2.776297238e-05f, -2.785935563e-05f, -2.795568191e-05f,
--2.805195105e-05f, -2.814816289e-05f, -2.824431727e-05f, -2.834041403e-05f, -2.843645300e-05f, -2.853243404e-05f, -2.862835697e-05f, -2.872422164e-05f, -2.882002788e-05f, -2.891577554e-05f,
--2.901146445e-05f, -2.910709445e-05f, -2.920266539e-05f, -2.929817710e-05f, -2.939362943e-05f, -2.948902221e-05f, -2.958435528e-05f, -2.967962849e-05f, -2.977484168e-05f, -2.986999468e-05f,
--2.996508734e-05f, -3.006011949e-05f, -3.015509099e-05f, -3.025000167e-05f, -3.034485137e-05f, -3.043963993e-05f, -3.053436720e-05f, -3.062903301e-05f, -3.072363721e-05f, -3.081817964e-05f,
--3.091266015e-05f, -3.100707856e-05f, -3.110143474e-05f, -3.119572851e-05f, -3.128995973e-05f, -3.138412823e-05f, -3.147823385e-05f, -3.157227645e-05f, -3.166625586e-05f, -3.176017193e-05f,
--3.185402449e-05f, -3.194781340e-05f, -3.204153849e-05f, -3.213519962e-05f, -3.222879661e-05f, -3.232232933e-05f, -3.241579760e-05f, -3.250920129e-05f, -3.260254022e-05f, -3.269581424e-05f,
--3.278902321e-05f, -3.288216696e-05f, -3.297524533e-05f, -3.306825818e-05f, -3.316120535e-05f, -3.325408668e-05f, -3.334690202e-05f, -3.343965122e-05f, -3.353233411e-05f, -3.362495055e-05f,
--3.371750038e-05f, -3.380998345e-05f, -3.390239960e-05f, -3.399474868e-05f, -3.408703053e-05f, -3.417924501e-05f, -3.427139196e-05f, -3.436347122e-05f, -3.445548264e-05f, -3.454742607e-05f,
--3.463930136e-05f, -3.473110835e-05f, -3.482284690e-05f, -3.491451684e-05f, -3.500611802e-05f, -3.509765030e-05f, -3.518911353e-05f, -3.528050754e-05f, -3.537183219e-05f, -3.546308732e-05f,
--3.555427280e-05f, -3.564538845e-05f, -3.573643413e-05f, -3.582740970e-05f, -3.591831500e-05f, -3.600914987e-05f, -3.609991417e-05f, -3.619060775e-05f, -3.628123046e-05f, -3.637178214e-05f,
--3.646226265e-05f, -3.655267184e-05f, -3.664300955e-05f, -3.673327564e-05f, -3.682346996e-05f, -3.691359235e-05f, -3.700364267e-05f, -3.709362077e-05f, -3.718352650e-05f, -3.727335971e-05f,
--3.736312025e-05f, -3.745280798e-05f, -3.754242274e-05f, -3.763196438e-05f, -3.772143277e-05f, -3.781082774e-05f, -3.790014916e-05f, -3.798939687e-05f, -3.807857072e-05f, -3.816767057e-05f,
--3.825669628e-05f, -3.834564769e-05f, -3.843452466e-05f, -3.852332703e-05f, -3.861205467e-05f, -3.870070742e-05f, -3.878928515e-05f, -3.887778770e-05f, -3.896621492e-05f, -3.905456668e-05f,
--3.914284282e-05f, -3.923104320e-05f, -3.931916767e-05f, -3.940721609e-05f, -3.949518831e-05f, -3.958308419e-05f, -3.967090358e-05f, -3.975864634e-05f, -3.984631232e-05f, -3.993390138e-05f,
--4.002141337e-05f, -4.010884815e-05f, -4.019620557e-05f, -4.028348550e-05f, -4.037068778e-05f, -4.045781227e-05f, -4.054485883e-05f, -4.063182731e-05f, -4.071871758e-05f, -4.080552949e-05f,
--4.089226289e-05f, -4.097891764e-05f, -4.106549360e-05f, -4.115199064e-05f, -4.123840859e-05f, -4.132474733e-05f, -4.141100671e-05f, -4.149718658e-05f, -4.158328682e-05f, -4.166930726e-05f,
--4.175524778e-05f, -4.184110823e-05f, -4.192688848e-05f, -4.201258837e-05f, -4.209820777e-05f, -4.218374654e-05f, -4.226920453e-05f, -4.235458161e-05f, -4.243987764e-05f, -4.252509247e-05f,
--4.261022597e-05f, -4.269527799e-05f, -4.278024840e-05f, -4.286513706e-05f, -4.294994382e-05f, -4.303466855e-05f, -4.311931111e-05f, -4.320387136e-05f, -4.328834916e-05f, -4.337274437e-05f,
--4.345705686e-05f, -4.354128648e-05f, -4.362543310e-05f, -4.370949658e-05f, -4.379347678e-05f, -4.387737356e-05f, -4.396118679e-05f, -4.404491633e-05f, -4.412856204e-05f, -4.421212378e-05f,
--4.429560142e-05f, -4.437899482e-05f, -4.446230385e-05f, -4.454552836e-05f, -4.462866823e-05f, -4.471172331e-05f, -4.479469346e-05f, -4.487757857e-05f, -4.496037848e-05f, -4.504309306e-05f,
--4.512572218e-05f, -4.520826570e-05f, -4.529072348e-05f, -4.537309540e-05f, -4.545538132e-05f, -4.553758110e-05f, -4.561969460e-05f, -4.570172170e-05f, -4.578366226e-05f, -4.586551615e-05f,
--4.594728323e-05f, -4.602896336e-05f, -4.611055643e-05f, -4.619206228e-05f, -4.627348080e-05f, -4.635481184e-05f, -4.643605527e-05f, -4.651721096e-05f, -4.659827878e-05f, -4.667925860e-05f,
--4.676015028e-05f, -4.684095370e-05f, -4.692166871e-05f, -4.700229520e-05f, -4.708283302e-05f, -4.716328204e-05f, -4.724364214e-05f, -4.732391319e-05f, -4.740409505e-05f, -4.748418759e-05f,
--4.756419068e-05f, -4.764410420e-05f, -4.772392800e-05f, -4.780366197e-05f, -4.788330597e-05f, -4.796285988e-05f, -4.804232355e-05f, -4.812169687e-05f, -4.820097971e-05f, -4.828017193e-05f,
--4.835927340e-05f, -4.843828401e-05f, -4.851720361e-05f, -4.859603209e-05f, -4.867476931e-05f, -4.875341515e-05f, -4.883196947e-05f, -4.891043216e-05f, -4.898880308e-05f, -4.906708210e-05f,
--4.914526910e-05f, -4.922336396e-05f, -4.930136654e-05f, -4.937927672e-05f, -4.945709437e-05f, -4.953481936e-05f, -4.961245158e-05f, -4.968999089e-05f, -4.976743717e-05f, -4.984479029e-05f,
--4.992205013e-05f, -4.999921656e-05f, -5.007628946e-05f, -5.015326870e-05f, -5.023015416e-05f, -5.030694571e-05f, -5.038364323e-05f, -5.046024660e-05f, -5.053675568e-05f, -5.061317037e-05f,
--5.068949053e-05f, -5.076571603e-05f, -5.084184677e-05f, -5.091788261e-05f, -5.099382343e-05f, -5.106966911e-05f, -5.114541952e-05f, -5.122107455e-05f, -5.129663407e-05f, -5.137209795e-05f,
--5.144746609e-05f, -5.152273835e-05f, -5.159791461e-05f, -5.167299476e-05f, -5.174797867e-05f, -5.182286621e-05f, -5.189765728e-05f, -5.197235175e-05f, -5.204694950e-05f, -5.212145040e-05f,
--5.219585435e-05f, -5.227016121e-05f, -5.234437087e-05f, -5.241848321e-05f, -5.249249811e-05f, -5.256641545e-05f, -5.264023512e-05f, -5.271395698e-05f, -5.278758093e-05f, -5.286110685e-05f,
--5.293453461e-05f, -5.300786411e-05f, -5.308109521e-05f, -5.315422781e-05f, -5.322726179e-05f, -5.330019702e-05f, -5.337303340e-05f, -5.344577080e-05f, -5.351840911e-05f, -5.359094821e-05f,
--5.366338798e-05f, -5.373572832e-05f, -5.380796909e-05f, -5.388011020e-05f, -5.395215151e-05f, -5.402409292e-05f, -5.409593431e-05f, -5.416767556e-05f, -5.423931657e-05f, -5.431085720e-05f,
--5.438229736e-05f, -5.445363693e-05f, -5.452487578e-05f, -5.459601382e-05f, -5.466705092e-05f, -5.473798696e-05f, -5.480882185e-05f, -5.487955545e-05f, -5.495018767e-05f, -5.502071839e-05f,
--5.509114748e-05f, -5.516147485e-05f, -5.523170038e-05f, -5.530182396e-05f, -5.537184547e-05f, -5.544176481e-05f, -5.551158185e-05f, -5.558129650e-05f, -5.565090863e-05f, -5.572041815e-05f,
--5.578982493e-05f, -5.585912886e-05f, -5.592832984e-05f, -5.599742776e-05f, -5.606642250e-05f, -5.613531396e-05f, -5.620410202e-05f, -5.627278658e-05f, -5.634136752e-05f, -5.640984474e-05f,
--5.647821813e-05f, -5.654648758e-05f, -5.661465298e-05f, -5.668271422e-05f, -5.675067120e-05f, -5.681852380e-05f, -5.688627192e-05f, -5.695391545e-05f, -5.702145428e-05f, -5.708888831e-05f,
--5.715621743e-05f, -5.722344153e-05f, -5.729056050e-05f, -5.735757424e-05f, -5.742448264e-05f, -5.749128560e-05f, -5.755798301e-05f, -5.762457476e-05f, -5.769106076e-05f, -5.775744088e-05f,
--5.782371503e-05f, -5.788988311e-05f, -5.795594500e-05f, -5.802190061e-05f, -5.808774982e-05f, -5.815349254e-05f, -5.821912867e-05f, -5.828465808e-05f, -5.835008070e-05f, -5.841539640e-05f,
--5.848060509e-05f, -5.854570666e-05f, -5.861070101e-05f, -5.867558804e-05f, -5.874036765e-05f, -5.880503973e-05f, -5.886960418e-05f, -5.893406090e-05f, -5.899840978e-05f, -5.906265074e-05f,
--5.912678366e-05f, -5.919080844e-05f, -5.925472498e-05f, -5.931853319e-05f, -5.938223296e-05f, -5.944582419e-05f, -5.950930678e-05f, -5.957268064e-05f, -5.963594565e-05f, -5.969910173e-05f,
--5.976214877e-05f, -5.982508667e-05f, -5.988791533e-05f, -5.995063467e-05f, -6.001324457e-05f, -6.007574494e-05f, -6.013813568e-05f, -6.020041669e-05f, -6.026258788e-05f, -6.032464915e-05f,
--6.038660039e-05f, -6.044844152e-05f, -6.051017244e-05f, -6.057179304e-05f, -6.063330324e-05f, -6.069470294e-05f, -6.075599203e-05f, -6.081717043e-05f, -6.087823804e-05f, -6.093919476e-05f,
--6.100004050e-05f, -6.106077516e-05f, -6.112139865e-05f, -6.118191087e-05f, -6.124231174e-05f, -6.130260114e-05f, -6.136277900e-05f, -6.142284521e-05f, -6.148279968e-05f, -6.154264233e-05f,
--6.160237304e-05f, -6.166199174e-05f, -6.172149834e-05f, -6.178089272e-05f, -6.184017481e-05f, -6.189934452e-05f, -6.195840174e-05f, -6.201734639e-05f, -6.207617838e-05f, -6.213489761e-05f,
--6.219350399e-05f, -6.225199744e-05f, -6.231037786e-05f, -6.236864516e-05f, -6.242679925e-05f, -6.248484004e-05f, -6.254276744e-05f, -6.260058135e-05f, -6.265828170e-05f, -6.271586839e-05f,
--6.277334134e-05f, -6.283070044e-05f, -6.288794562e-05f, -6.294507678e-05f, -6.300209384e-05f, -6.305899671e-05f, -6.311578530e-05f, -6.317245952e-05f, -6.322901928e-05f, -6.328546451e-05f,
--6.334179510e-05f, -6.339801098e-05f, -6.345411205e-05f, -6.351009824e-05f, -6.356596944e-05f, -6.362172559e-05f, -6.367736658e-05f, -6.373289235e-05f, -6.378830279e-05f, -6.384359782e-05f,
--6.389877737e-05f, -6.395384134e-05f, -6.400878965e-05f, -6.406362222e-05f, -6.411833896e-05f, -6.417293978e-05f, -6.422742461e-05f, -6.428179336e-05f, -6.433604594e-05f, -6.439018228e-05f,
--6.444420229e-05f, -6.449810588e-05f, -6.455189298e-05f, -6.460556350e-05f, -6.465911736e-05f, -6.471255448e-05f, -6.476587477e-05f, -6.481907816e-05f, -6.487216456e-05f, -6.492513390e-05f,
--6.497798608e-05f, -6.503072103e-05f, -6.508333868e-05f, -6.513583893e-05f, -6.518822171e-05f, -6.524048694e-05f, -6.529263454e-05f, -6.534466444e-05f, -6.539657654e-05f, -6.544837077e-05f,
--6.550004706e-05f, -6.555160532e-05f, -6.560304547e-05f, -6.565436745e-05f, -6.570557116e-05f, -6.575665654e-05f, -6.580762350e-05f, -6.585847197e-05f, -6.590920186e-05f, -6.595981311e-05f,
--6.601030564e-05f, -6.606067937e-05f, -6.611093421e-05f, -6.616107011e-05f, -6.621108698e-05f, -6.626098474e-05f, -6.631076332e-05f, -6.636042265e-05f, -6.640996265e-05f, -6.645938324e-05f,
--6.650868436e-05f, -6.655786592e-05f, -6.660692785e-05f, -6.665587008e-05f, -6.670469254e-05f, -6.675339514e-05f, -6.680197783e-05f, -6.685044051e-05f, -6.689878313e-05f, -6.694700561e-05f,
--6.699510787e-05f, -6.704308985e-05f, -6.709095147e-05f, -6.713869266e-05f, -6.718631335e-05f, -6.723381347e-05f, -6.728119294e-05f, -6.732845170e-05f, -6.737558967e-05f, -6.742260679e-05f,
--6.746950298e-05f, -6.751627817e-05f, -6.756293230e-05f, -6.760946529e-05f, -6.765587708e-05f, -6.770216759e-05f, -6.774833676e-05f, -6.779438451e-05f, -6.784031079e-05f, -6.788611551e-05f,
--6.793179862e-05f, -6.797736004e-05f, -6.802279971e-05f, -6.806811756e-05f, -6.811331352e-05f, -6.815838753e-05f, -6.820333951e-05f, -6.824816941e-05f, -6.829287715e-05f, -6.833746267e-05f,
--6.838192590e-05f, -6.842626678e-05f, -6.847048524e-05f, -6.851458122e-05f, -6.855855465e-05f, -6.860240547e-05f, -6.864613361e-05f, -6.868973900e-05f, -6.873322159e-05f, -6.877658131e-05f,
--6.881981809e-05f, -6.886293188e-05f, -6.890592260e-05f, -6.894879020e-05f, -6.899153461e-05f, -6.903415577e-05f, -6.907665362e-05f, -6.911902809e-05f, -6.916127913e-05f, -6.920340666e-05f,
--6.924541064e-05f, -6.928729100e-05f, -6.932904767e-05f, -6.937068059e-05f, -6.941218972e-05f, -6.945357498e-05f, -6.949483631e-05f, -6.953597365e-05f, -6.957698696e-05f, -6.961787615e-05f,
--6.965864118e-05f, -6.969928199e-05f, -6.973979852e-05f, -6.978019070e-05f, -6.982045849e-05f, -6.986060182e-05f, -6.990062063e-05f, -6.994051486e-05f, -6.998028447e-05f, -7.001992938e-05f,
--7.005944955e-05f, -7.009884492e-05f, -7.013811543e-05f, -7.017726102e-05f, -7.021628164e-05f, -7.025517723e-05f, -7.029394773e-05f, -7.033259309e-05f, -7.037111326e-05f, -7.040950818e-05f,
--7.044777779e-05f, -7.048592204e-05f, -7.052394087e-05f, -7.056183424e-05f, -7.059960208e-05f, -7.063724435e-05f, -7.067476098e-05f, -7.071215193e-05f, -7.074941714e-05f, -7.078655656e-05f,
--7.082357014e-05f, -7.086045782e-05f, -7.089721955e-05f, -7.093385528e-05f, -7.097036496e-05f, -7.100674854e-05f, -7.104300596e-05f, -7.107913717e-05f, -7.111514213e-05f, -7.115102078e-05f,
--7.118677306e-05f, -7.122239894e-05f, -7.125789837e-05f, -7.129327128e-05f, -7.132851763e-05f, -7.136363738e-05f, -7.139863047e-05f, -7.143349685e-05f, -7.146823648e-05f, -7.150284930e-05f,
--7.153733527e-05f, -7.157169434e-05f, -7.160592647e-05f, -7.164003160e-05f, -7.167400968e-05f, -7.170786068e-05f, -7.174158454e-05f, -7.177518122e-05f, -7.180865067e-05f, -7.184199284e-05f,
--7.187520769e-05f, -7.190829517e-05f, -7.194125523e-05f, -7.197408784e-05f, -7.200679295e-05f, -7.203937050e-05f, -7.207182046e-05f, -7.210414278e-05f, -7.213633742e-05f, -7.216840434e-05f,
--7.220034348e-05f, -7.223215481e-05f, -7.226383828e-05f, -7.229539385e-05f, -7.232682148e-05f, -7.235812112e-05f, -7.238929274e-05f, -7.242033628e-05f, -7.245125171e-05f, -7.248203899e-05f,
--7.251269807e-05f, -7.254322891e-05f, -7.257363148e-05f, -7.260390573e-05f, -7.263405161e-05f, -7.266406910e-05f, -7.269395814e-05f, -7.272371871e-05f, -7.275335076e-05f, -7.278285424e-05f,
--7.281222913e-05f, -7.284147538e-05f, -7.287059295e-05f, -7.289958181e-05f, -7.292844191e-05f, -7.295717322e-05f, -7.298577570e-05f, -7.301424932e-05f, -7.304259403e-05f, -7.307080979e-05f,
--7.309889658e-05f, -7.312685435e-05f, -7.315468307e-05f, -7.318238270e-05f, -7.320995320e-05f, -7.323739455e-05f, -7.326470670e-05f, -7.329188961e-05f, -7.331894326e-05f, -7.334586761e-05f,
--7.337266261e-05f, -7.339932825e-05f, -7.342586448e-05f, -7.345227128e-05f, -7.347854859e-05f, -7.350469640e-05f, -7.353071467e-05f, -7.355660337e-05f, -7.358236246e-05f, -7.360799191e-05f,
--7.363349169e-05f, -7.365886176e-05f, -7.368410210e-05f, -7.370921267e-05f, -7.373419344e-05f, -7.375904438e-05f, -7.378376546e-05f, -7.380835664e-05f, -7.383281790e-05f, -7.385714921e-05f,
--7.388135053e-05f, -7.390542184e-05f, -7.392936310e-05f, -7.395317430e-05f, -7.397685538e-05f, -7.400040634e-05f, -7.402382714e-05f, -7.404711774e-05f, -7.407027813e-05f, -7.409330828e-05f,
--7.411620814e-05f, -7.413897771e-05f, -7.416161695e-05f, -7.418412584e-05f, -7.420650434e-05f, -7.422875243e-05f, -7.425087008e-05f, -7.427285727e-05f, -7.429471397e-05f, -7.431644016e-05f,
--7.433803581e-05f, -7.435950089e-05f, -7.438083538e-05f, -7.440203925e-05f, -7.442311249e-05f, -7.444405506e-05f, -7.446486694e-05f, -7.448554810e-05f, -7.450609853e-05f, -7.452651820e-05f,
--7.454680708e-05f, -7.456696516e-05f, -7.458699240e-05f, -7.460688880e-05f, -7.462665431e-05f, -7.464628893e-05f, -7.466579264e-05f, -7.468516539e-05f, -7.470440719e-05f, -7.472351800e-05f,
--7.474249781e-05f, -7.476134659e-05f, -7.478006433e-05f, -7.479865099e-05f, -7.481710657e-05f, -7.483543105e-05f, -7.485362439e-05f, -7.487168659e-05f, -7.488961763e-05f, -7.490741748e-05f,
--7.492508612e-05f, -7.494262355e-05f, -7.496002973e-05f, -7.497730466e-05f, -7.499444831e-05f, -7.501146067e-05f, -7.502834171e-05f, -7.504509143e-05f, -7.506170980e-05f, -7.507819681e-05f,
--7.509455244e-05f, -7.511077668e-05f, -7.512686950e-05f, -7.514283090e-05f, -7.515866086e-05f, -7.517435935e-05f, -7.518992638e-05f, -7.520536192e-05f, -7.522066596e-05f, -7.523583847e-05f,
--7.525087946e-05f, -7.526578891e-05f, -7.528056679e-05f, -7.529521310e-05f, -7.530972783e-05f, -7.532411096e-05f, -7.533836248e-05f, -7.535248237e-05f, -7.536647063e-05f, -7.538032724e-05f,
--7.539405219e-05f, -7.540764546e-05f, -7.542110706e-05f, -7.543443695e-05f, -7.544763515e-05f, -7.546070162e-05f, -7.547363637e-05f, -7.548643938e-05f, -7.549911065e-05f, -7.551165016e-05f,
--7.552405790e-05f, -7.553633386e-05f, -7.554847804e-05f, -7.556049042e-05f, -7.557237100e-05f, -7.558411977e-05f, -7.559573672e-05f, -7.560722184e-05f, -7.561857513e-05f, -7.562979657e-05f,
--7.564088616e-05f, -7.565184390e-05f, -7.566266977e-05f, -7.567336377e-05f, -7.568392589e-05f, -7.569435613e-05f, -7.570465447e-05f, -7.571482093e-05f, -7.572485548e-05f, -7.573475812e-05f,
--7.574452886e-05f, -7.575416767e-05f, -7.576367457e-05f, -7.577304954e-05f, -7.578229258e-05f, -7.579140369e-05f, -7.580038287e-05f, -7.580923010e-05f, -7.581794539e-05f, -7.582652873e-05f,
--7.583498012e-05f, -7.584329956e-05f, -7.585148705e-05f, -7.585954258e-05f, -7.586746616e-05f, -7.587525777e-05f, -7.588291742e-05f, -7.589044511e-05f, -7.589784084e-05f, -7.590510461e-05f,
--7.591223641e-05f, -7.591923624e-05f, -7.592610411e-05f, -7.593284002e-05f, -7.593944396e-05f, -7.594591594e-05f, -7.595225596e-05f, -7.595846402e-05f, -7.596454011e-05f, -7.597048425e-05f,
--7.597629643e-05f, -7.598197666e-05f, -7.598752494e-05f, -7.599294126e-05f, -7.599822564e-05f, -7.600337808e-05f, -7.600839857e-05f, -7.601328713e-05f, -7.601804375e-05f, -7.602266845e-05f,
--7.602716121e-05f, -7.603152206e-05f, -7.603575099e-05f, -7.603984801e-05f, -7.604381312e-05f, -7.604764633e-05f, -7.605134764e-05f, -7.605491706e-05f, -7.605835460e-05f, -7.606166026e-05f,
--7.606483404e-05f, -7.606787596e-05f, -7.607078602e-05f, -7.607356423e-05f, -7.607621060e-05f, -7.607872513e-05f, -7.608110782e-05f, -7.608335870e-05f, -7.608547777e-05f, -7.608746503e-05f,
--7.608932049e-05f, -7.609104417e-05f, -7.609263606e-05f, -7.609409619e-05f, -7.609542456e-05f, -7.609662119e-05f, -7.609768607e-05f, -7.609861922e-05f, -7.609942065e-05f, -7.610009038e-05f,
--7.610062841e-05f, -7.610103475e-05f, -7.610130942e-05f, -7.610145242e-05f, -7.610146378e-05f, -7.610134349e-05f, -7.610109158e-05f, -7.610070805e-05f, -7.610019293e-05f, -7.609954621e-05f,
--7.609876792e-05f, -7.609785806e-05f, -7.609681666e-05f, -7.609564373e-05f, -7.609433927e-05f, -7.609290330e-05f, -7.609133585e-05f, -7.608963692e-05f, -7.608780652e-05f, -7.608584468e-05f,
--7.608375141e-05f, -7.608152673e-05f, -7.607917064e-05f, -7.607668317e-05f, -7.607406433e-05f, -7.607131415e-05f, -7.606843263e-05f, -7.606541979e-05f, -7.606227565e-05f, -7.605900023e-05f,
--7.605559355e-05f, -7.605205562e-05f, -7.604838646e-05f, -7.604458610e-05f, -7.604065454e-05f, -7.603659181e-05f, -7.603239792e-05f, -7.602807290e-05f, -7.602361677e-05f, -7.601902955e-05f,
--7.601431124e-05f, -7.600946189e-05f, -7.600448150e-05f, -7.599937009e-05f, -7.599412770e-05f, -7.598875433e-05f, -7.598325001e-05f, -7.597761476e-05f, -7.597184861e-05f, -7.596595157e-05f,
--7.595992367e-05f, -7.595376493e-05f, -7.594747537e-05f, -7.594105501e-05f, -7.593450389e-05f, -7.592782201e-05f, -7.592100941e-05f, -7.591406611e-05f, -7.590699213e-05f, -7.589978750e-05f,
--7.589245225e-05f, -7.588498638e-05f, -7.587738994e-05f, -7.586966295e-05f, -7.586180543e-05f, -7.585381740e-05f, -7.584569890e-05f, -7.583744995e-05f, -7.582907057e-05f, -7.582056079e-05f,
--7.581192064e-05f, -7.580315015e-05f, -7.579424934e-05f, -7.578521824e-05f, -7.577605688e-05f, -7.576676528e-05f, -7.575734348e-05f, -7.574779150e-05f, -7.573810936e-05f, -7.572829711e-05f,
--7.571835477e-05f, -7.570828236e-05f, -7.569807991e-05f, -7.568774747e-05f, -7.567728505e-05f, -7.566669268e-05f, -7.565597040e-05f, -7.564511824e-05f, -7.563413622e-05f, -7.562302438e-05f,
--7.561178275e-05f, -7.560041136e-05f, -7.558891024e-05f, -7.557727943e-05f, -7.556551895e-05f, -7.555362884e-05f, -7.554160913e-05f, -7.552945985e-05f, -7.551718104e-05f, -7.550477273e-05f,
--7.549223495e-05f, -7.547956774e-05f, -7.546677113e-05f, -7.545384515e-05f, -7.544078984e-05f, -7.542760523e-05f, -7.541429136e-05f, -7.540084827e-05f, -7.538727598e-05f, -7.537357453e-05f,
--7.535974396e-05f, -7.534578430e-05f, -7.533169560e-05f, -7.531747788e-05f, -7.530313118e-05f, -7.528865555e-05f, -7.527405101e-05f, -7.525931760e-05f, -7.524445536e-05f, -7.522946434e-05f,
--7.521434455e-05f, -7.519909605e-05f, -7.518371888e-05f, -7.516821306e-05f, -7.515257865e-05f, -7.513681567e-05f, -7.512092417e-05f, -7.510490418e-05f, -7.508875575e-05f, -7.507247892e-05f,
--7.505607372e-05f, -7.503954020e-05f, -7.502287840e-05f, -7.500608835e-05f, -7.498917010e-05f, -7.497212369e-05f, -7.495494915e-05f, -7.493764654e-05f, -7.492021589e-05f, -7.490265725e-05f,
--7.488497066e-05f, -7.486715615e-05f, -7.484921377e-05f, -7.483114358e-05f, -7.481294559e-05f, -7.479461987e-05f, -7.477616646e-05f, -7.475758539e-05f, -7.473887671e-05f, -7.472004047e-05f,
--7.470107671e-05f, -7.468198548e-05f, -7.466276682e-05f, -7.464342077e-05f, -7.462394737e-05f, -7.460434669e-05f, -7.458461875e-05f, -7.456476362e-05f, -7.454478132e-05f, -7.452467191e-05f,
--7.450443544e-05f, -7.448407195e-05f, -7.446358149e-05f, -7.444296411e-05f, -7.442221985e-05f, -7.440134876e-05f, -7.438035089e-05f, -7.435922628e-05f, -7.433797499e-05f, -7.431659707e-05f,
--7.429509255e-05f, -7.427346150e-05f, -7.425170395e-05f, -7.422981997e-05f, -7.420780959e-05f, -7.418567287e-05f, -7.416340986e-05f, -7.414102061e-05f, -7.411850516e-05f, -7.409586358e-05f,
--7.407309590e-05f, -7.405020218e-05f, -7.402718248e-05f, -7.400403684e-05f, -7.398076532e-05f, -7.395736796e-05f, -7.393384482e-05f, -7.391019595e-05f, -7.388642141e-05f, -7.386252124e-05f,
--7.383849550e-05f, -7.381434424e-05f, -7.379006752e-05f, -7.376566539e-05f, -7.374113790e-05f, -7.371648511e-05f, -7.369170706e-05f, -7.366680383e-05f, -7.364177545e-05f, -7.361662199e-05f,
--7.359134350e-05f, -7.356594003e-05f, -7.354041164e-05f, -7.351475839e-05f, -7.348898033e-05f, -7.346307752e-05f, -7.343705001e-05f, -7.341089786e-05f, -7.338462114e-05f, -7.335821988e-05f,
--7.333169416e-05f, -7.330504402e-05f, -7.327826953e-05f, -7.325137075e-05f, -7.322434773e-05f, -7.319720052e-05f, -7.316992920e-05f, -7.314253381e-05f, -7.311501442e-05f, -7.308737108e-05f,
--7.305960386e-05f, -7.303171281e-05f, -7.300369800e-05f, -7.297555947e-05f, -7.294729731e-05f, -7.291891155e-05f, -7.289040227e-05f, -7.286176952e-05f, -7.283301337e-05f, -7.280413387e-05f,
--7.277513109e-05f, -7.274600509e-05f, -7.271675594e-05f, -7.268738368e-05f, -7.265788839e-05f, -7.262827013e-05f, -7.259852896e-05f, -7.256866494e-05f, -7.253867813e-05f, -7.250856861e-05f,
--7.247833642e-05f, -7.244798164e-05f, -7.241750434e-05f, -7.238690456e-05f, -7.235618238e-05f, -7.232533787e-05f, -7.229437108e-05f, -7.226328208e-05f, -7.223207094e-05f, -7.220073773e-05f,
--7.216928250e-05f, -7.213770532e-05f, -7.210600626e-05f, -7.207418538e-05f, -7.204224276e-05f, -7.201017845e-05f, -7.197799253e-05f, -7.194568506e-05f, -7.191325611e-05f, -7.188070574e-05f,
--7.184803402e-05f, -7.181524103e-05f, -7.178232682e-05f, -7.174929147e-05f, -7.171613505e-05f, -7.168285762e-05f, -7.164945925e-05f, -7.161594001e-05f, -7.158229997e-05f, -7.154853920e-05f,
--7.151465777e-05f, -7.148065575e-05f, -7.144653320e-05f, -7.141229021e-05f, -7.137792683e-05f, -7.134344314e-05f, -7.130883921e-05f, -7.127411512e-05f, -7.123927092e-05f, -7.120430670e-05f,
--7.116922253e-05f, -7.113401847e-05f, -7.109869460e-05f, -7.106325099e-05f, -7.102768771e-05f, -7.099200484e-05f, -7.095620245e-05f, -7.092028061e-05f, -7.088423939e-05f, -7.084807887e-05f,
--7.081179912e-05f, -7.077540022e-05f, -7.073888224e-05f, -7.070224525e-05f, -7.066548932e-05f, -7.062861454e-05f, -7.059162098e-05f, -7.055450871e-05f, -7.051727780e-05f, -7.047992834e-05f,
--7.044246039e-05f, -7.040487404e-05f, -7.036716935e-05f, -7.032934641e-05f, -7.029140530e-05f, -7.025334608e-05f, -7.021516883e-05f, -7.017687364e-05f, -7.013846058e-05f, -7.009992972e-05f,
--7.006128115e-05f, -7.002251494e-05f, -6.998363116e-05f, -6.994462991e-05f, -6.990551125e-05f, -6.986627526e-05f, -6.982692203e-05f, -6.978745163e-05f, -6.974786414e-05f, -6.970815964e-05f,
--6.966833821e-05f, -6.962839993e-05f, -6.958834487e-05f, -6.954817313e-05f, -6.950788477e-05f, -6.946747989e-05f, -6.942695855e-05f, -6.938632085e-05f, -6.934556686e-05f, -6.930469666e-05f,
--6.926371034e-05f, -6.922260797e-05f, -6.918138964e-05f, -6.914005543e-05f, -6.909860543e-05f, -6.905703970e-05f, -6.901535835e-05f, -6.897356144e-05f, -6.893164907e-05f, -6.888962132e-05f,
--6.884747826e-05f, -6.880521999e-05f, -6.876284658e-05f, -6.872035812e-05f, -6.867775470e-05f, -6.863503640e-05f, -6.859220330e-05f, -6.854925548e-05f, -6.850619305e-05f, -6.846301606e-05f,
--6.841972463e-05f, -6.837631882e-05f, -6.833279872e-05f, -6.828916443e-05f, -6.824541602e-05f, -6.820155358e-05f, -6.815757720e-05f, -6.811348697e-05f, -6.806928297e-05f, -6.802496529e-05f,
--6.798053401e-05f, -6.793598923e-05f, -6.789133103e-05f, -6.784655949e-05f, -6.780167472e-05f, -6.775667678e-05f, -6.771156579e-05f, -6.766634181e-05f, -6.762100494e-05f, -6.757555527e-05f,
--6.752999289e-05f, -6.748431788e-05f, -6.743853034e-05f, -6.739263036e-05f, -6.734661802e-05f, -6.730049342e-05f, -6.725425665e-05f, -6.720790779e-05f, -6.716144694e-05f, -6.711487418e-05f,
--6.706818961e-05f, -6.702139332e-05f, -6.697448541e-05f, -6.692746595e-05f, -6.688033505e-05f, -6.683309279e-05f, -6.678573927e-05f, -6.673827458e-05f, -6.669069881e-05f, -6.664301206e-05f,
--6.659521441e-05f, -6.654730596e-05f, -6.649928681e-05f, -6.645115704e-05f, -6.640291675e-05f, -6.635456604e-05f, -6.630610499e-05f, -6.625753370e-05f, -6.620885227e-05f, -6.616006079e-05f,
--6.611115936e-05f, -6.606214806e-05f, -6.601302700e-05f, -6.596379626e-05f, -6.591445595e-05f, -6.586500616e-05f, -6.581544699e-05f, -6.576577852e-05f, -6.571600087e-05f, -6.566611411e-05f,
--6.561611836e-05f, -6.556601370e-05f, -6.551580024e-05f, -6.546547807e-05f, -6.541504728e-05f, -6.536450798e-05f, -6.531386025e-05f, -6.526310421e-05f, -6.521223995e-05f, -6.516126756e-05f,
--6.511018714e-05f, -6.505899880e-05f, -6.500770262e-05f, -6.495629872e-05f, -6.490478718e-05f, -6.485316811e-05f, -6.480144160e-05f, -6.474960776e-05f, -6.469766668e-05f, -6.464561847e-05f,
--6.459346322e-05f, -6.454120104e-05f, -6.448883202e-05f, -6.443635627e-05f, -6.438377388e-05f, -6.433108496e-05f, -6.427828961e-05f, -6.422538792e-05f, -6.417238001e-05f, -6.411926597e-05f,
--6.406604590e-05f, -6.401271990e-05f, -6.395928809e-05f, -6.390575055e-05f, -6.385210739e-05f, -6.379835872e-05f, -6.374450463e-05f, -6.369054524e-05f, -6.363648064e-05f, -6.358231093e-05f,
--6.352803622e-05f, -6.347365662e-05f, -6.341917222e-05f, -6.336458313e-05f, -6.330988946e-05f, -6.325509131e-05f, -6.320018878e-05f, -6.314518198e-05f, -6.309007101e-05f, -6.303485598e-05f,
--6.297953699e-05f, -6.292411415e-05f, -6.286858757e-05f, -6.281295734e-05f, -6.275722358e-05f, -6.270138639e-05f, -6.264544588e-05f, -6.258940215e-05f, -6.253325531e-05f, -6.247700547e-05f,
--6.242065273e-05f, -6.236419720e-05f, -6.230763899e-05f, -6.225097820e-05f, -6.219421494e-05f, -6.213734933e-05f, -6.208038146e-05f, -6.202331145e-05f, -6.196613941e-05f, -6.190886543e-05f,
--6.185148964e-05f, -6.179401213e-05f, -6.173643303e-05f, -6.167875243e-05f, -6.162097045e-05f, -6.156308719e-05f, -6.150510277e-05f, -6.144701729e-05f, -6.138883087e-05f, -6.133054361e-05f,
--6.127215563e-05f, -6.121366703e-05f, -6.115507792e-05f, -6.109638843e-05f, -6.103759865e-05f, -6.097870870e-05f, -6.091971868e-05f, -6.086062872e-05f, -6.080143892e-05f, -6.074214939e-05f,
--6.068276025e-05f, -6.062327160e-05f, -6.056368357e-05f, -6.050399625e-05f, -6.044420977e-05f, -6.038432423e-05f, -6.032433976e-05f, -6.026425645e-05f, -6.020407444e-05f, -6.014379381e-05f,
--6.008341471e-05f, -6.002293722e-05f, -5.996236148e-05f, -5.990168758e-05f, -5.984091566e-05f, -5.978004581e-05f, -5.971907817e-05f, -5.965801283e-05f, -5.959684991e-05f, -5.953558954e-05f,
--5.947423181e-05f, -5.941277686e-05f, -5.935122479e-05f, -5.928957573e-05f, -5.922782978e-05f, -5.916598706e-05f, -5.910404768e-05f, -5.904201177e-05f, -5.897987944e-05f, -5.891765081e-05f,
--5.885532599e-05f, -5.879290510e-05f, -5.873038825e-05f, -5.866777557e-05f, -5.860506717e-05f, -5.854226317e-05f, -5.847936368e-05f, -5.841636882e-05f, -5.835327872e-05f, -5.829009348e-05f,
--5.822681323e-05f, -5.816343808e-05f, -5.809996816e-05f, -5.803640358e-05f, -5.797274446e-05f, -5.790899092e-05f, -5.784514308e-05f, -5.778120106e-05f, -5.771716497e-05f, -5.765303494e-05f,
--5.758881108e-05f, -5.752449352e-05f, -5.746008238e-05f, -5.739557777e-05f, -5.733097982e-05f, -5.726628864e-05f, -5.720150436e-05f, -5.713662710e-05f, -5.707165697e-05f, -5.700659411e-05f,
--5.694143863e-05f, -5.687619064e-05f, -5.681085028e-05f, -5.674541767e-05f, -5.667989292e-05f, -5.661427616e-05f, -5.654856751e-05f, -5.648276709e-05f, -5.641687503e-05f, -5.635089145e-05f,
--5.628481646e-05f, -5.621865020e-05f, -5.615239278e-05f, -5.608604433e-05f, -5.601960497e-05f, -5.595307483e-05f, -5.588645402e-05f, -5.581974268e-05f, -5.575294093e-05f, -5.568604888e-05f,
--5.561906667e-05f, -5.555199441e-05f, -5.548483224e-05f, -5.541758028e-05f, -5.535023864e-05f, -5.528280746e-05f, -5.521528687e-05f, -5.514767698e-05f, -5.507997792e-05f, -5.501218982e-05f,
--5.494431280e-05f, -5.487634699e-05f, -5.480829251e-05f, -5.474014950e-05f, -5.467191806e-05f, -5.460359834e-05f, -5.453519046e-05f, -5.446669455e-05f, -5.439811072e-05f, -5.432943912e-05f,
--5.426067985e-05f, -5.419183307e-05f, -5.412289888e-05f, -5.405387741e-05f, -5.398476880e-05f, -5.391557318e-05f, -5.384629066e-05f, -5.377692138e-05f, -5.370746547e-05f, -5.363792305e-05f,
--5.356829425e-05f, -5.349857920e-05f, -5.342877803e-05f, -5.335889087e-05f, -5.328891784e-05f, -5.321885908e-05f, -5.314871472e-05f, -5.307848488e-05f, -5.300816969e-05f, -5.293776929e-05f,
--5.286728379e-05f, -5.279671334e-05f, -5.272605807e-05f, -5.265531809e-05f, -5.258449355e-05f, -5.251358457e-05f, -5.244259128e-05f, -5.237151382e-05f, -5.230035231e-05f, -5.222910689e-05f,
--5.215777768e-05f, -5.208636483e-05f, -5.201486845e-05f, -5.194328868e-05f, -5.187162565e-05f, -5.179987950e-05f, -5.172805035e-05f, -5.165613834e-05f, -5.158414360e-05f, -5.151206626e-05f,
--5.143990646e-05f, -5.136766432e-05f, -5.129533998e-05f, -5.122293357e-05f, -5.115044523e-05f, -5.107787509e-05f, -5.100522327e-05f, -5.093248992e-05f, -5.085967517e-05f, -5.078677914e-05f,
--5.071380199e-05f, -5.064074383e-05f, -5.056760480e-05f, -5.049438504e-05f, -5.042108468e-05f, -5.034770385e-05f, -5.027424269e-05f, -5.020070134e-05f, -5.012707992e-05f, -5.005337858e-05f,
--4.997959744e-05f, -4.990573665e-05f, -4.983179633e-05f, -4.975777663e-05f, -4.968367768e-05f, -4.960949961e-05f, -4.953524256e-05f, -4.946090666e-05f, -4.938649206e-05f, -4.931199888e-05f,
--4.923742727e-05f, -4.916277736e-05f, -4.908804928e-05f, -4.901324318e-05f, -4.893835918e-05f, -4.886339743e-05f, -4.878835807e-05f, -4.871324122e-05f, -4.863804704e-05f, -4.856277564e-05f,
--4.848742718e-05f, -4.841200179e-05f, -4.833649960e-05f, -4.826092076e-05f, -4.818526540e-05f, -4.810953366e-05f, -4.803372568e-05f, -4.795784159e-05f, -4.788188155e-05f, -4.780584567e-05f,
--4.772973411e-05f, -4.765354699e-05f, -4.757728447e-05f, -4.750094667e-05f, -4.742453374e-05f, -4.734804582e-05f, -4.727148305e-05f, -4.719484556e-05f, -4.711813349e-05f, -4.704134699e-05f,
--4.696448619e-05f, -4.688755123e-05f, -4.681054226e-05f, -4.673345942e-05f, -4.665630283e-05f, -4.657907266e-05f, -4.650176902e-05f, -4.642439207e-05f, -4.634694195e-05f, -4.626941880e-05f,
--4.619182275e-05f, -4.611415395e-05f, -4.603641254e-05f, -4.595859866e-05f, -4.588071245e-05f, -4.580275406e-05f, -4.572472362e-05f, -4.564662128e-05f, -4.556844718e-05f, -4.549020146e-05f,
--4.541188426e-05f, -4.533349572e-05f, -4.525503600e-05f, -4.517650522e-05f, -4.509790353e-05f, -4.501923108e-05f, -4.494048800e-05f, -4.486167445e-05f, -4.478279055e-05f, -4.470383647e-05f,
--4.462481233e-05f, -4.454571828e-05f, -4.446655447e-05f, -4.438732103e-05f, -4.430801812e-05f, -4.422864587e-05f, -4.414920443e-05f, -4.406969395e-05f, -4.399011456e-05f, -4.391046642e-05f,
--4.383074966e-05f, -4.375096443e-05f, -4.367111087e-05f, -4.359118913e-05f, -4.351119936e-05f, -4.343114169e-05f, -4.335101627e-05f, -4.327082326e-05f, -4.319056278e-05f, -4.311023500e-05f,
--4.302984004e-05f, -4.294937806e-05f, -4.286884921e-05f, -4.278825363e-05f, -4.270759146e-05f, -4.262686285e-05f, -4.254606795e-05f, -4.246520689e-05f, -4.238427984e-05f, -4.230328693e-05f,
--4.222222831e-05f, -4.214110413e-05f, -4.205991453e-05f, -4.197865967e-05f, -4.189733967e-05f, -4.181595470e-05f, -4.173450490e-05f, -4.165299042e-05f, -4.157141140e-05f, -4.148976799e-05f,
--4.140806034e-05f, -4.132628860e-05f, -4.124445291e-05f, -4.116255341e-05f, -4.108059027e-05f, -4.099856362e-05f, -4.091647362e-05f, -4.083432040e-05f, -4.075210413e-05f, -4.066982494e-05f,
--4.058748299e-05f, -4.050507842e-05f, -4.042261139e-05f, -4.034008203e-05f, -4.025749051e-05f, -4.017483696e-05f, -4.009212154e-05f, -4.000934440e-05f, -3.992650567e-05f, -3.984360553e-05f,
--3.976064410e-05f, -3.967762155e-05f, -3.959453802e-05f, -3.951139365e-05f, -3.942818861e-05f, -3.934492304e-05f, -3.926159708e-05f, -3.917821090e-05f, -3.909476463e-05f, -3.901125844e-05f,
--3.892769246e-05f, -3.884406685e-05f, -3.876038176e-05f, -3.867663733e-05f, -3.859283373e-05f, -3.850897110e-05f, -3.842504959e-05f, -3.834106935e-05f, -3.825703053e-05f, -3.817293329e-05f,
--3.808877776e-05f, -3.800456412e-05f, -3.792029250e-05f, -3.783596306e-05f, -3.775157594e-05f, -3.766713130e-05f, -3.758262930e-05f, -3.749807008e-05f, -3.741345379e-05f, -3.732878059e-05f,
--3.724405063e-05f, -3.715926405e-05f, -3.707442102e-05f, -3.698952168e-05f, -3.690456619e-05f, -3.681955469e-05f, -3.673448734e-05f, -3.664936430e-05f, -3.656418571e-05f, -3.647895173e-05f,
--3.639366251e-05f, -3.630831820e-05f, -3.622291896e-05f, -3.613746493e-05f, -3.605195628e-05f, -3.596639315e-05f, -3.588077570e-05f, -3.579510407e-05f, -3.570937844e-05f, -3.562359893e-05f,
--3.553776572e-05f, -3.545187896e-05f, -3.536593879e-05f, -3.527994537e-05f, -3.519389885e-05f, -3.510779940e-05f, -3.502164715e-05f, -3.493544228e-05f, -3.484918492e-05f, -3.476287524e-05f,
--3.467651338e-05f, -3.459009951e-05f, -3.450363378e-05f, -3.441711634e-05f, -3.433054734e-05f, -3.424392695e-05f, -3.415725531e-05f, -3.407053258e-05f, -3.398375892e-05f, -3.389693447e-05f,
--3.381005940e-05f, -3.372313386e-05f, -3.363615801e-05f, -3.354913199e-05f, -3.346205597e-05f, -3.337493010e-05f, -3.328775453e-05f, -3.320052943e-05f, -3.311325494e-05f, -3.302593123e-05f,
--3.293855844e-05f, -3.285113674e-05f, -3.276366627e-05f, -3.267614720e-05f, -3.258857969e-05f, -3.250096387e-05f, -3.241329993e-05f, -3.232558800e-05f, -3.223782825e-05f, -3.215002083e-05f,
--3.206216589e-05f, -3.197426360e-05f, -3.188631412e-05f, -3.179831759e-05f, -3.171027417e-05f, -3.162218403e-05f, -3.153404731e-05f, -3.144586418e-05f, -3.135763479e-05f, -3.126935930e-05f,
--3.118103786e-05f, -3.109267063e-05f, -3.100425778e-05f, -3.091579945e-05f, -3.082729580e-05f, -3.073874700e-05f, -3.065015319e-05f, -3.056151455e-05f, -3.047283121e-05f, -3.038410335e-05f,
--3.029533111e-05f, -3.020651466e-05f, -3.011765416e-05f, -3.002874976e-05f, -2.993980161e-05f, -2.985080989e-05f, -2.976177474e-05f, -2.967269633e-05f, -2.958357481e-05f, -2.949441033e-05f,
--2.940520307e-05f, -2.931595318e-05f, -2.922666081e-05f, -2.913732612e-05f, -2.904794927e-05f, -2.895853043e-05f, -2.886906975e-05f, -2.877956738e-05f, -2.869002349e-05f, -2.860043824e-05f,
--2.851081178e-05f, -2.842114428e-05f, -2.833143588e-05f, -2.824168676e-05f, -2.815189707e-05f, -2.806206697e-05f, -2.797219661e-05f, -2.788228617e-05f, -2.779233579e-05f, -2.770234564e-05f,
--2.761231587e-05f, -2.752224665e-05f, -2.743213814e-05f, -2.734199049e-05f, -2.725180386e-05f, -2.716157842e-05f, -2.707131432e-05f, -2.698101172e-05f, -2.689067079e-05f, -2.680029167e-05f,
--2.670987455e-05f, -2.661941956e-05f, -2.652892688e-05f, -2.643839666e-05f, -2.634782906e-05f, -2.625722425e-05f, -2.616658238e-05f, -2.607590361e-05f, -2.598518810e-05f, -2.589443603e-05f,
--2.580364753e-05f, -2.571282278e-05f, -2.562196194e-05f, -2.553106516e-05f, -2.544013261e-05f, -2.534916445e-05f, -2.525816083e-05f, -2.516712193e-05f, -2.507604789e-05f, -2.498493888e-05f,
--2.489379507e-05f, -2.480261661e-05f, -2.471140366e-05f, -2.462015639e-05f, -2.452887495e-05f, -2.443755950e-05f, -2.434621022e-05f, -2.425482725e-05f, -2.416341077e-05f, -2.407196092e-05f,
--2.398047788e-05f, -2.388896181e-05f, -2.379741285e-05f, -2.370583119e-05f, -2.361421697e-05f, -2.352257037e-05f, -2.343089153e-05f, -2.333918063e-05f, -2.324743782e-05f, -2.315566327e-05f,
--2.306385714e-05f, -2.297201959e-05f, -2.288015078e-05f, -2.278825087e-05f, -2.269632003e-05f, -2.260435842e-05f, -2.251236620e-05f, -2.242034353e-05f, -2.232829057e-05f, -2.223620749e-05f,
--2.214409444e-05f, -2.205195160e-05f, -2.195977911e-05f, -2.186757716e-05f, -2.177534588e-05f, -2.168308546e-05f, -2.159079605e-05f, -2.149847781e-05f, -2.140613091e-05f, -2.131375551e-05f,
--2.122135177e-05f, -2.112891985e-05f, -2.103645992e-05f, -2.094397214e-05f, -2.085145666e-05f, -2.075891367e-05f, -2.066634330e-05f, -2.057374574e-05f, -2.048112114e-05f, -2.038846967e-05f,
--2.029579148e-05f, -2.020308674e-05f, -2.011035562e-05f, -2.001759827e-05f, -1.992481487e-05f, -1.983200556e-05f, -1.973917052e-05f, -1.964630991e-05f, -1.955342389e-05f, -1.946051262e-05f,
--1.936757627e-05f, -1.927461500e-05f, -1.918162898e-05f, -1.908861836e-05f, -1.899558331e-05f, -1.890252400e-05f, -1.880944058e-05f, -1.871633322e-05f, -1.862320209e-05f, -1.853004734e-05f,
--1.843686914e-05f, -1.834366766e-05f, -1.825044305e-05f, -1.815719548e-05f, -1.806392512e-05f, -1.797063212e-05f, -1.787731666e-05f, -1.778397889e-05f, -1.769061897e-05f, -1.759723708e-05f,
--1.750383338e-05f, -1.741040802e-05f, -1.731696117e-05f, -1.722349300e-05f, -1.713000368e-05f, -1.703649335e-05f, -1.694296219e-05f, -1.684941036e-05f, -1.675583803e-05f, -1.666224536e-05f,
--1.656863251e-05f, -1.647499964e-05f, -1.638134693e-05f, -1.628767453e-05f, -1.619398261e-05f, -1.610027133e-05f, -1.600654085e-05f, -1.591279135e-05f, -1.581902298e-05f, -1.572523591e-05f,
--1.563143030e-05f, -1.553760631e-05f, -1.544376412e-05f, -1.534990388e-05f, -1.525602576e-05f, -1.516212992e-05f, -1.506821653e-05f, -1.497428574e-05f, -1.488033774e-05f, -1.478637267e-05f,
--1.469239070e-05f, -1.459839200e-05f, -1.450437674e-05f, -1.441034506e-05f, -1.431629715e-05f, -1.422223316e-05f, -1.412815326e-05f, -1.403405762e-05f, -1.393994639e-05f, -1.384581974e-05f,
--1.375167784e-05f, -1.365752084e-05f, -1.356334892e-05f, -1.346916224e-05f, -1.337496097e-05f, -1.328074526e-05f, -1.318651528e-05f, -1.309227119e-05f, -1.299801317e-05f, -1.290374137e-05f,
--1.280945596e-05f, -1.271515711e-05f, -1.262084497e-05f, -1.252651972e-05f, -1.243218151e-05f, -1.233783051e-05f, -1.224346689e-05f, -1.214909081e-05f, -1.205470243e-05f, -1.196030193e-05f,
--1.186588945e-05f, -1.177146518e-05f, -1.167702926e-05f, -1.158258188e-05f, -1.148812318e-05f, -1.139365334e-05f, -1.129917253e-05f, -1.120468089e-05f, -1.111017861e-05f, -1.101566584e-05f,
--1.092114275e-05f, -1.082660950e-05f, -1.073206626e-05f, -1.063751319e-05f, -1.054295046e-05f, -1.044837823e-05f, -1.035379667e-05f, -1.025920593e-05f, -1.016460620e-05f, -1.006999762e-05f,
--9.975380359e-06f, -9.880754591e-06f, -9.786120476e-06f, -9.691478179e-06f, -9.596827863e-06f, -9.502169694e-06f, -9.407503836e-06f, -9.312830454e-06f, -9.218149712e-06f, -9.123461774e-06f,
--9.028766805e-06f, -8.934064970e-06f, -8.839356433e-06f, -8.744641359e-06f, -8.649919911e-06f, -8.555192256e-06f, -8.460458556e-06f, -8.365718977e-06f, -8.270973684e-06f, -8.176222840e-06f,
--8.081466609e-06f, -7.986705158e-06f, -7.891938649e-06f, -7.797167248e-06f, -7.702391118e-06f, -7.607610425e-06f, -7.512825333e-06f, -7.418036006e-06f, -7.323242608e-06f, -7.228445305e-06f,
--7.133644260e-06f, -7.038839637e-06f, -6.944031602e-06f, -6.849220318e-06f, -6.754405951e-06f, -6.659588663e-06f, -6.564768621e-06f, -6.469945987e-06f, -6.375120926e-06f, -6.280293603e-06f,
--6.185464182e-06f, -6.090632827e-06f, -5.995799703e-06f, -5.900964973e-06f, -5.806128802e-06f, -5.711291355e-06f, -5.616452795e-06f, -5.521613287e-06f, -5.426772994e-06f, -5.331932082e-06f,
--5.237090713e-06f, -5.142249054e-06f, -5.047407266e-06f, -4.952565516e-06f, -4.857723966e-06f, -4.762882781e-06f, -4.668042125e-06f, -4.573202162e-06f, -4.478363056e-06f, -4.383524971e-06f,
--4.288688071e-06f, -4.193852521e-06f, -4.099018483e-06f, -4.004186123e-06f, -3.909355604e-06f, -3.814527089e-06f, -3.719700744e-06f, -3.624876731e-06f, -3.530055215e-06f, -3.435236359e-06f,
--3.340420328e-06f, -3.245607284e-06f, -3.150797393e-06f, -3.055990817e-06f, -2.961187721e-06f, -2.866388268e-06f, -2.771592622e-06f, -2.676800946e-06f, -2.582013404e-06f, -2.487230161e-06f,
--2.392451379e-06f, -2.297677221e-06f, -2.202907853e-06f, -2.108143437e-06f, -2.013384136e-06f, -1.918630115e-06f, -1.823881536e-06f, -1.729138564e-06f, -1.634401361e-06f, -1.539670091e-06f,
--1.444944918e-06f, -1.350226004e-06f, -1.255513513e-06f, -1.160807609e-06f, -1.066108454e-06f, -9.714162120e-07f, -8.767310461e-07f, -7.820531196e-07f, -6.873825955e-07f, -5.927196369e-07f,
--4.980644071e-07f, -4.034170690e-07f, -3.087777858e-07f, -2.141467204e-07f, -1.195240358e-07f, -2.490989501e-08f, 6.969553902e-08f, 1.642921034e-07f, 2.588796353e-07f, 3.534579718e-07f,
-4.480269502e-07f, 5.425864076e-07f, 6.371361813e-07f, 7.316761086e-07f, 8.262060268e-07f, 9.207257733e-07f, 1.015235185e-06f, 1.109734100e-06f, 1.204222356e-06f, 1.298699790e-06f,
-1.393166239e-06f, 1.487621541e-06f, 1.582065534e-06f, 1.676498054e-06f, 1.770918941e-06f, 1.865328032e-06f, 1.959725163e-06f, 2.054110174e-06f, 2.148482901e-06f, 2.242843184e-06f,
-2.337190858e-06f, 2.431525763e-06f, 2.525847737e-06f, 2.620156617e-06f, 2.714452241e-06f, 2.808734448e-06f, 2.903003075e-06f, 2.997257961e-06f, 3.091498943e-06f, 3.185725861e-06f,
-3.279938552e-06f, 3.374136854e-06f, 3.468320606e-06f, 3.562489647e-06f, 3.656643814e-06f, 3.750782946e-06f, 3.844906882e-06f, 3.939015460e-06f, 4.033108519e-06f, 4.127185897e-06f,
-4.221247433e-06f, 4.315292965e-06f, 4.409322333e-06f, 4.503335375e-06f, 4.597331931e-06f, 4.691311838e-06f, 4.785274935e-06f, 4.879221063e-06f, 4.973150059e-06f, 5.067061763e-06f,
-5.160956014e-06f, 5.254832651e-06f, 5.348691513e-06f, 5.442532439e-06f, 5.536355270e-06f, 5.630159843e-06f, 5.723945998e-06f, 5.817713576e-06f, 5.911462414e-06f, 6.005192354e-06f,
-6.098903234e-06f, 6.192594893e-06f, 6.286267172e-06f, 6.379919911e-06f, 6.473552948e-06f, 6.567166124e-06f, 6.660759279e-06f, 6.754332253e-06f, 6.847884885e-06f, 6.941417015e-06f,
-7.034928484e-06f, 7.128419132e-06f, 7.221888798e-06f, 7.315337323e-06f, 7.408764548e-06f, 7.502170312e-06f, 7.595554455e-06f, 7.688916819e-06f, 7.782257244e-06f, 7.875575570e-06f,
-7.968871638e-06f, 8.062145289e-06f, 8.155396362e-06f, 8.248624699e-06f, 8.341830141e-06f, 8.435012528e-06f, 8.528171701e-06f, 8.621307502e-06f, 8.714419771e-06f, 8.807508349e-06f,
-8.900573078e-06f, 8.993613798e-06f, 9.086630351e-06f, 9.179622578e-06f, 9.272590321e-06f, 9.365533420e-06f, 9.458451717e-06f, 9.551345054e-06f, 9.644213273e-06f, 9.737056214e-06f,
-9.829873720e-06f, 9.922665632e-06f, 1.001543179e-05f, 1.010817204e-05f, 1.020088623e-05f, 1.029357418e-05f, 1.038623575e-05f, 1.047887078e-05f, 1.057147911e-05f, 1.066406059e-05f,
-1.075661504e-05f, 1.084914233e-05f, 1.094164228e-05f, 1.103411475e-05f, 1.112655957e-05f, 1.121897658e-05f, 1.131136564e-05f, 1.140372658e-05f, 1.149605924e-05f, 1.158836348e-05f,
-1.168063912e-05f, 1.177288602e-05f, 1.186510401e-05f, 1.195729294e-05f, 1.204945266e-05f, 1.214158300e-05f, 1.223368381e-05f, 1.232575494e-05f, 1.241779622e-05f, 1.250980750e-05f,
-1.260178863e-05f, 1.269373944e-05f, 1.278565978e-05f, 1.287754950e-05f, 1.296940844e-05f, 1.306123644e-05f, 1.315303334e-05f, 1.324479900e-05f, 1.333653324e-05f, 1.342823593e-05f,
-1.351990690e-05f, 1.361154600e-05f, 1.370315307e-05f, 1.379472795e-05f, 1.388627050e-05f, 1.397778055e-05f, 1.406925795e-05f, 1.416070254e-05f, 1.425211418e-05f, 1.434349269e-05f,
-1.443483794e-05f, 1.452614976e-05f, 1.461742800e-05f, 1.470867250e-05f, 1.479988311e-05f, 1.489105968e-05f, 1.498220205e-05f, 1.507331006e-05f, 1.516438356e-05f, 1.525542240e-05f,
-1.534642643e-05f, 1.543739548e-05f, 1.552832940e-05f, 1.561922805e-05f, 1.571009126e-05f, 1.580091888e-05f, 1.589171076e-05f, 1.598246675e-05f, 1.607318668e-05f, 1.616387041e-05f,
-1.625451779e-05f, 1.634512865e-05f, 1.643570285e-05f, 1.652624023e-05f, 1.661674065e-05f, 1.670720394e-05f, 1.679762995e-05f, 1.688801853e-05f, 1.697836954e-05f, 1.706868280e-05f,
-1.715895818e-05f, 1.724919551e-05f, 1.733939466e-05f, 1.742955545e-05f, 1.751967775e-05f, 1.760976140e-05f, 1.769980624e-05f, 1.778981213e-05f, 1.787977891e-05f, 1.796970643e-05f,
-1.805959454e-05f, 1.814944308e-05f, 1.823925191e-05f, 1.832902088e-05f, 1.841874982e-05f, 1.850843859e-05f, 1.859808705e-05f, 1.868769503e-05f, 1.877726238e-05f, 1.886678896e-05f,
-1.895627461e-05f, 1.904571918e-05f, 1.913512253e-05f, 1.922448449e-05f, 1.931380492e-05f, 1.940308368e-05f, 1.949232060e-05f, 1.958151553e-05f, 1.967066834e-05f, 1.975977886e-05f,
-1.984884695e-05f, 1.993787245e-05f, 2.002685522e-05f, 2.011579511e-05f, 2.020469196e-05f, 2.029354563e-05f, 2.038235596e-05f, 2.047112281e-05f, 2.055984603e-05f, 2.064852546e-05f,
-2.073716097e-05f, 2.082575239e-05f, 2.091429959e-05f, 2.100280240e-05f, 2.109126068e-05f, 2.117967429e-05f, 2.126804307e-05f, 2.135636688e-05f, 2.144464556e-05f, 2.153287897e-05f,
-2.162106696e-05f, 2.170920938e-05f, 2.179730609e-05f, 2.188535693e-05f, 2.197336175e-05f, 2.206132041e-05f, 2.214923277e-05f, 2.223709866e-05f, 2.232491795e-05f, 2.241269049e-05f,
-2.250041612e-05f, 2.258809471e-05f, 2.267572610e-05f, 2.276331015e-05f, 2.285084671e-05f, 2.293833564e-05f, 2.302577678e-05f, 2.311316999e-05f, 2.320051512e-05f, 2.328781203e-05f,
-2.337506056e-05f, 2.346226058e-05f, 2.354941194e-05f, 2.363651448e-05f, 2.372356807e-05f, 2.381057256e-05f, 2.389752780e-05f, 2.398443364e-05f, 2.407128995e-05f, 2.415809656e-05f,
-2.424485335e-05f, 2.433156016e-05f, 2.441821685e-05f, 2.450482327e-05f, 2.459137928e-05f, 2.467788473e-05f, 2.476433947e-05f, 2.485074337e-05f, 2.493709628e-05f, 2.502339805e-05f,
-2.510964853e-05f, 2.519584759e-05f, 2.528199508e-05f, 2.536809086e-05f, 2.545413477e-05f, 2.554012668e-05f, 2.562606645e-05f, 2.571195392e-05f, 2.579778896e-05f, 2.588357142e-05f,
-2.596930115e-05f, 2.605497802e-05f, 2.614060188e-05f, 2.622617259e-05f, 2.631169001e-05f, 2.639715398e-05f, 2.648256437e-05f, 2.656792104e-05f, 2.665322384e-05f, 2.673847263e-05f,
-2.682366727e-05f, 2.690880762e-05f, 2.699389353e-05f, 2.707892485e-05f, 2.716390146e-05f, 2.724882321e-05f, 2.733368994e-05f, 2.741850154e-05f, 2.750325784e-05f, 2.758795871e-05f,
-2.767260401e-05f, 2.775719360e-05f, 2.784172734e-05f, 2.792620508e-05f, 2.801062668e-05f, 2.809499201e-05f, 2.817930092e-05f, 2.826355327e-05f, 2.834774892e-05f, 2.843188773e-05f,
-2.851596956e-05f, 2.859999427e-05f, 2.868396173e-05f, 2.876787178e-05f, 2.885172429e-05f, 2.893551912e-05f, 2.901925613e-05f, 2.910293519e-05f, 2.918655614e-05f, 2.927011886e-05f,
-2.935362320e-05f, 2.943706902e-05f, 2.952045619e-05f, 2.960378457e-05f, 2.968705401e-05f, 2.977026438e-05f, 2.985341554e-05f, 2.993650736e-05f, 3.001953968e-05f, 3.010251239e-05f,
-3.018542533e-05f, 3.026827836e-05f, 3.035107136e-05f, 3.043380419e-05f, 3.051647670e-05f, 3.059908876e-05f, 3.068164023e-05f, 3.076413098e-05f, 3.084656086e-05f, 3.092892974e-05f,
-3.101123748e-05f, 3.109348396e-05f, 3.117566902e-05f, 3.125779253e-05f, 3.133985436e-05f, 3.142185438e-05f, 3.150379243e-05f, 3.158566840e-05f, 3.166748214e-05f, 3.174923351e-05f,
-3.183092238e-05f, 3.191254863e-05f, 3.199411210e-05f, 3.207561266e-05f, 3.215705018e-05f, 3.223842453e-05f, 3.231973557e-05f, 3.240098316e-05f, 3.248216718e-05f, 3.256328747e-05f,
-3.264434392e-05f, 3.272533639e-05f, 3.280626473e-05f, 3.288712883e-05f, 3.296792854e-05f, 3.304866372e-05f, 3.312933426e-05f, 3.320994001e-05f, 3.329048084e-05f, 3.337095661e-05f,
-3.345136720e-05f, 3.353171246e-05f, 3.361199228e-05f, 3.369220650e-05f, 3.377235501e-05f, 3.385243767e-05f, 3.393245434e-05f, 3.401240490e-05f, 3.409228921e-05f, 3.417210714e-05f,
-3.425185855e-05f, 3.433154332e-05f, 3.441116132e-05f, 3.449071240e-05f, 3.457019645e-05f, 3.464961333e-05f, 3.472896291e-05f, 3.480824505e-05f, 3.488745963e-05f, 3.496660651e-05f,
-3.504568557e-05f, 3.512469668e-05f, 3.520363970e-05f, 3.528251450e-05f, 3.536132095e-05f, 3.544005893e-05f, 3.551872830e-05f, 3.559732894e-05f, 3.567586071e-05f, 3.575432348e-05f,
-3.583271713e-05f, 3.591104153e-05f, 3.598929654e-05f, 3.606748204e-05f, 3.614559790e-05f, 3.622364399e-05f, 3.630162018e-05f, 3.637952634e-05f, 3.645736235e-05f, 3.653512808e-05f,
-3.661282339e-05f, 3.669044816e-05f, 3.676800227e-05f, 3.684548559e-05f, 3.692289798e-05f, 3.700023932e-05f, 3.707750948e-05f, 3.715470834e-05f, 3.723183577e-05f, 3.730889164e-05f,
-3.738587583e-05f, 3.746278821e-05f, 3.753962864e-05f, 3.761639702e-05f, 3.769309320e-05f, 3.776971707e-05f, 3.784626850e-05f, 3.792274736e-05f, 3.799915352e-05f, 3.807548687e-05f,
-3.815174727e-05f, 3.822793461e-05f, 3.830404875e-05f, 3.838008957e-05f, 3.845605694e-05f, 3.853195075e-05f, 3.860777087e-05f, 3.868351716e-05f, 3.875918952e-05f, 3.883478781e-05f,
-3.891031191e-05f, 3.898576169e-05f, 3.906113704e-05f, 3.913643783e-05f, 3.921166393e-05f, 3.928681523e-05f, 3.936189159e-05f, 3.943689290e-05f, 3.951181904e-05f, 3.958666987e-05f,
-3.966144529e-05f, 3.973614516e-05f, 3.981076936e-05f, 3.988531778e-05f, 3.995979029e-05f, 4.003418676e-05f, 4.010850708e-05f, 4.018275112e-05f, 4.025691877e-05f, 4.033100990e-05f,
-4.040502439e-05f, 4.047896212e-05f, 4.055282297e-05f, 4.062660681e-05f, 4.070031354e-05f, 4.077394302e-05f, 4.084749514e-05f, 4.092096978e-05f, 4.099436681e-05f, 4.106768612e-05f,
-4.114092759e-05f, 4.121409110e-05f, 4.128717652e-05f, 4.136018375e-05f, 4.143311265e-05f, 4.150596312e-05f, 4.157873503e-05f, 4.165142826e-05f, 4.172404270e-05f, 4.179657823e-05f,
-4.186903472e-05f, 4.194141207e-05f, 4.201371015e-05f, 4.208592884e-05f, 4.215806803e-05f, 4.223012760e-05f, 4.230210744e-05f, 4.237400742e-05f, 4.244582743e-05f, 4.251756735e-05f,
-4.258922707e-05f, 4.266080646e-05f, 4.273230542e-05f, 4.280372382e-05f, 4.287506156e-05f, 4.294631850e-05f, 4.301749455e-05f, 4.308858958e-05f, 4.315960347e-05f, 4.323053612e-05f,
-4.330138740e-05f, 4.337215720e-05f, 4.344284541e-05f, 4.351345191e-05f, 4.358397659e-05f, 4.365441933e-05f, 4.372478002e-05f, 4.379505855e-05f, 4.386525479e-05f, 4.393536864e-05f,
-4.400539998e-05f, 4.407534870e-05f, 4.414521469e-05f, 4.421499783e-05f, 4.428469801e-05f, 4.435431511e-05f, 4.442384903e-05f, 4.449329965e-05f, 4.456266686e-05f, 4.463195054e-05f,
-4.470115059e-05f, 4.477026689e-05f, 4.483929933e-05f, 4.490824781e-05f, 4.497711219e-05f, 4.504589239e-05f, 4.511458827e-05f, 4.518319975e-05f, 4.525172669e-05f, 4.532016900e-05f,
-4.538852655e-05f, 4.545679925e-05f, 4.552498698e-05f, 4.559308963e-05f, 4.566110709e-05f, 4.572903925e-05f, 4.579688600e-05f, 4.586464724e-05f, 4.593232284e-05f, 4.599991271e-05f,
-4.606741674e-05f, 4.613483481e-05f, 4.620216681e-05f, 4.626941265e-05f, 4.633657220e-05f, 4.640364536e-05f, 4.647063203e-05f, 4.653753210e-05f, 4.660434545e-05f, 4.667107198e-05f,
-4.673771159e-05f, 4.680426416e-05f, 4.687072959e-05f, 4.693710777e-05f, 4.700339859e-05f, 4.706960196e-05f, 4.713571775e-05f, 4.720174587e-05f, 4.726768621e-05f, 4.733353867e-05f,
-4.739930313e-05f, 4.746497950e-05f, 4.753056766e-05f, 4.759606751e-05f, 4.766147894e-05f, 4.772680186e-05f, 4.779203616e-05f, 4.785718173e-05f, 4.792223846e-05f, 4.798720626e-05f,
-4.805208501e-05f, 4.811687462e-05f, 4.818157498e-05f, 4.824618599e-05f, 4.831070754e-05f, 4.837513953e-05f, 4.843948186e-05f, 4.850373442e-05f, 4.856789712e-05f, 4.863196984e-05f,
-4.869595249e-05f, 4.875984496e-05f, 4.882364715e-05f, 4.888735897e-05f, 4.895098030e-05f, 4.901451104e-05f, 4.907795110e-05f, 4.914130038e-05f, 4.920455876e-05f, 4.926772616e-05f,
-4.933080246e-05f, 4.939378758e-05f, 4.945668140e-05f, 4.951948383e-05f, 4.958219477e-05f, 4.964481412e-05f, 4.970734177e-05f, 4.976977764e-05f, 4.983212161e-05f, 4.989437359e-05f,
-4.995653349e-05f, 5.001860119e-05f, 5.008057661e-05f, 5.014245964e-05f, 5.020425019e-05f, 5.026594815e-05f, 5.032755344e-05f, 5.038906594e-05f, 5.045048557e-05f, 5.051181222e-05f,
-5.057304580e-05f, 5.063418621e-05f, 5.069523335e-05f, 5.075618713e-05f, 5.081704745e-05f, 5.087781422e-05f, 5.093848733e-05f, 5.099906669e-05f, 5.105955220e-05f, 5.111994377e-05f,
-5.118024131e-05f, 5.124044471e-05f, 5.130055388e-05f, 5.136056873e-05f, 5.142048916e-05f, 5.148031508e-05f, 5.154004638e-05f, 5.159968299e-05f, 5.165922479e-05f, 5.171867171e-05f,
-5.177802363e-05f, 5.183728048e-05f, 5.189644216e-05f, 5.195550857e-05f, 5.201447961e-05f, 5.207335521e-05f, 5.213213525e-05f, 5.219081966e-05f, 5.224940834e-05f, 5.230790119e-05f,
-5.236629812e-05f, 5.242459904e-05f, 5.248280387e-05f, 5.254091250e-05f, 5.259892484e-05f, 5.265684081e-05f, 5.271466031e-05f, 5.277238326e-05f, 5.283000955e-05f, 5.288753911e-05f,
-5.294497183e-05f, 5.300230764e-05f, 5.305954643e-05f, 5.311668812e-05f, 5.317373262e-05f, 5.323067984e-05f, 5.328752968e-05f, 5.334428207e-05f, 5.340093691e-05f, 5.345749412e-05f,
-5.351395359e-05f, 5.357031525e-05f, 5.362657901e-05f, 5.368274477e-05f, 5.373881246e-05f, 5.379478197e-05f, 5.385065324e-05f, 5.390642615e-05f, 5.396210064e-05f, 5.401767661e-05f,
-5.407315398e-05f, 5.412853265e-05f, 5.418381254e-05f, 5.423899357e-05f, 5.429407565e-05f, 5.434905869e-05f, 5.440394261e-05f, 5.445872732e-05f, 5.451341274e-05f, 5.456799877e-05f,
-5.462248534e-05f, 5.467687236e-05f, 5.473115975e-05f, 5.478534741e-05f, 5.483943527e-05f, 5.489342324e-05f, 5.494731124e-05f, 5.500109919e-05f, 5.505478699e-05f, 5.510837457e-05f,
-5.516186184e-05f, 5.521524872e-05f, 5.526853512e-05f, 5.532172097e-05f, 5.537480618e-05f, 5.542779067e-05f, 5.548067435e-05f, 5.553345715e-05f, 5.558613898e-05f, 5.563871976e-05f,
-5.569119940e-05f, 5.574357784e-05f, 5.579585498e-05f, 5.584803074e-05f, 5.590010505e-05f, 5.595207782e-05f, 5.600394897e-05f, 5.605571843e-05f, 5.610738611e-05f, 5.615895193e-05f,
-5.621041581e-05f, 5.626177767e-05f, 5.631303744e-05f, 5.636419503e-05f, 5.641525037e-05f, 5.646620337e-05f, 5.651705396e-05f, 5.656780206e-05f, 5.661844760e-05f, 5.666899048e-05f,
-5.671943064e-05f, 5.676976799e-05f, 5.682000247e-05f, 5.687013398e-05f, 5.692016247e-05f, 5.697008784e-05f, 5.701991002e-05f, 5.706962893e-05f, 5.711924451e-05f, 5.716875666e-05f,
-5.721816532e-05f, 5.726747041e-05f, 5.731667186e-05f, 5.736576958e-05f, 5.741476351e-05f, 5.746365356e-05f, 5.751243967e-05f, 5.756112176e-05f, 5.760969975e-05f, 5.765817357e-05f,
-5.770654314e-05f, 5.775480840e-05f, 5.780296926e-05f, 5.785102566e-05f, 5.789897752e-05f, 5.794682476e-05f, 5.799456732e-05f, 5.804220512e-05f, 5.808973809e-05f, 5.813716616e-05f,
-5.818448925e-05f, 5.823170729e-05f, 5.827882020e-05f, 5.832582793e-05f, 5.837273039e-05f, 5.841952752e-05f, 5.846621924e-05f, 5.851280549e-05f, 5.855928618e-05f, 5.860566126e-05f,
-5.865193065e-05f, 5.869809428e-05f, 5.874415208e-05f, 5.879010398e-05f, 5.883594991e-05f, 5.888168980e-05f, 5.892732358e-05f, 5.897285119e-05f, 5.901827255e-05f, 5.906358760e-05f,
-5.910879626e-05f, 5.915389847e-05f, 5.919889416e-05f, 5.924378327e-05f, 5.928856571e-05f, 5.933324144e-05f, 5.937781038e-05f, 5.942227245e-05f, 5.946662761e-05f, 5.951087577e-05f,
-5.955501687e-05f, 5.959905085e-05f, 5.964297764e-05f, 5.968679717e-05f, 5.973050938e-05f, 5.977411421e-05f, 5.981761157e-05f, 5.986100142e-05f, 5.990428369e-05f, 5.994745830e-05f,
-5.999052520e-05f, 6.003348433e-05f, 6.007633561e-05f, 6.011907898e-05f, 6.016171439e-05f, 6.020424175e-05f, 6.024666103e-05f, 6.028897214e-05f, 6.033117502e-05f, 6.037326962e-05f,
-6.041525587e-05f, 6.045713370e-05f, 6.049890306e-05f, 6.054056389e-05f, 6.058211611e-05f, 6.062355967e-05f, 6.066489451e-05f, 6.070612057e-05f, 6.074723778e-05f, 6.078824608e-05f,
-6.082914542e-05f, 6.086993573e-05f, 6.091061695e-05f, 6.095118902e-05f, 6.099165188e-05f, 6.103200548e-05f, 6.107224975e-05f, 6.111238462e-05f, 6.115241006e-05f, 6.119232598e-05f,
-6.123213234e-05f, 6.127182908e-05f, 6.131141613e-05f, 6.135089345e-05f, 6.139026096e-05f, 6.142951862e-05f, 6.146866637e-05f, 6.150770414e-05f, 6.154663189e-05f, 6.158544954e-05f,
-6.162415706e-05f, 6.166275437e-05f, 6.170124143e-05f, 6.173961818e-05f, 6.177788456e-05f, 6.181604051e-05f, 6.185408598e-05f, 6.189202092e-05f, 6.192984526e-05f, 6.196755896e-05f,
-6.200516195e-05f, 6.204265419e-05f, 6.208003562e-05f, 6.211730618e-05f, 6.215446583e-05f, 6.219151450e-05f, 6.222845214e-05f, 6.226527870e-05f, 6.230199413e-05f, 6.233859837e-05f,
-6.237509136e-05f, 6.241147307e-05f, 6.244774343e-05f, 6.248390239e-05f, 6.251994990e-05f, 6.255588591e-05f, 6.259171036e-05f, 6.262742321e-05f, 6.266302440e-05f, 6.269851388e-05f,
-6.273389160e-05f, 6.276915751e-05f, 6.280431156e-05f, 6.283935370e-05f, 6.287428387e-05f, 6.290910204e-05f, 6.294380814e-05f, 6.297840213e-05f, 6.301288396e-05f, 6.304725358e-05f,
-6.308151094e-05f, 6.311565600e-05f, 6.314968869e-05f, 6.318360898e-05f, 6.321741682e-05f, 6.325111216e-05f, 6.328469495e-05f, 6.331816514e-05f, 6.335152269e-05f, 6.338476754e-05f,
-6.341789966e-05f, 6.345091899e-05f, 6.348382549e-05f, 6.351661911e-05f, 6.354929981e-05f, 6.358186754e-05f, 6.361432225e-05f, 6.364666390e-05f, 6.367889243e-05f, 6.371100782e-05f,
-6.374301001e-05f, 6.377489896e-05f, 6.380667462e-05f, 6.383833694e-05f, 6.386988589e-05f, 6.390132142e-05f, 6.393264349e-05f, 6.396385205e-05f, 6.399494705e-05f, 6.402592847e-05f,
-6.405679624e-05f, 6.408755034e-05f, 6.411819071e-05f, 6.414871732e-05f, 6.417913012e-05f, 6.420942907e-05f, 6.423961413e-05f, 6.426968525e-05f, 6.429964240e-05f, 6.432948554e-05f,
-6.435921461e-05f, 6.438882959e-05f, 6.441833044e-05f, 6.444771710e-05f, 6.447698954e-05f, 6.450614773e-05f, 6.453519161e-05f, 6.456412116e-05f, 6.459293633e-05f, 6.462163709e-05f,
-6.465022338e-05f, 6.467869518e-05f, 6.470705245e-05f, 6.473529515e-05f, 6.476342324e-05f, 6.479143667e-05f, 6.481933543e-05f, 6.484711945e-05f, 6.487478872e-05f, 6.490234319e-05f,
-6.492978282e-05f, 6.495710759e-05f, 6.498431744e-05f, 6.501141235e-05f, 6.503839228e-05f, 6.506525719e-05f, 6.509200704e-05f, 6.511864181e-05f, 6.514516146e-05f, 6.517156594e-05f,
-6.519785523e-05f, 6.522402930e-05f, 6.525008810e-05f, 6.527603160e-05f, 6.530185977e-05f, 6.532757257e-05f, 6.535316998e-05f, 6.537865195e-05f, 6.540401845e-05f, 6.542926945e-05f,
-6.545440493e-05f, 6.547942483e-05f, 6.550432914e-05f, 6.552911782e-05f, 6.555379083e-05f, 6.557834816e-05f, 6.560278975e-05f, 6.562711559e-05f, 6.565132564e-05f, 6.567541987e-05f,
-6.569939824e-05f, 6.572326074e-05f, 6.574700732e-05f, 6.577063796e-05f, 6.579415263e-05f, 6.581755130e-05f, 6.584083393e-05f, 6.586400051e-05f, 6.588705099e-05f, 6.590998535e-05f,
-6.593280356e-05f, 6.595550559e-05f, 6.597809142e-05f, 6.600056102e-05f, 6.602291435e-05f, 6.604515139e-05f, 6.606727211e-05f, 6.608927649e-05f, 6.611116450e-05f, 6.613293610e-05f,
-6.615459128e-05f, 6.617613001e-05f, 6.619755226e-05f, 6.621885800e-05f, 6.624004721e-05f, 6.626111986e-05f, 6.628207593e-05f, 6.630291539e-05f, 6.632363821e-05f, 6.634424438e-05f,
-6.636473386e-05f, 6.638510664e-05f, 6.640536268e-05f, 6.642550196e-05f, 6.644552447e-05f, 6.646543017e-05f, 6.648521904e-05f, 6.650489106e-05f, 6.652444620e-05f, 6.654388445e-05f,
-6.656320578e-05f, 6.658241016e-05f, 6.660149758e-05f, 6.662046801e-05f, 6.663932143e-05f, 6.665805782e-05f, 6.667667716e-05f, 6.669517943e-05f, 6.671356459e-05f, 6.673183265e-05f,
-6.674998356e-05f, 6.676801732e-05f, 6.678593390e-05f, 6.680373329e-05f, 6.682141545e-05f, 6.683898038e-05f, 6.685642806e-05f, 6.687375845e-05f, 6.689097155e-05f, 6.690806734e-05f,
-6.692504580e-05f, 6.694190690e-05f, 6.695865063e-05f, 6.697527698e-05f, 6.699178592e-05f, 6.700817744e-05f, 6.702445152e-05f, 6.704060814e-05f, 6.705664729e-05f, 6.707256895e-05f,
-6.708837309e-05f, 6.710405972e-05f, 6.711962880e-05f, 6.713508033e-05f, 6.715041428e-05f, 6.716563065e-05f, 6.718072941e-05f, 6.719571056e-05f, 6.721057407e-05f, 6.722531993e-05f,
-6.723994813e-05f, 6.725445866e-05f, 6.726885149e-05f, 6.728312662e-05f, 6.729728402e-05f, 6.731132370e-05f, 6.732524563e-05f, 6.733904980e-05f, 6.735273620e-05f, 6.736630481e-05f,
-6.737975563e-05f, 6.739308864e-05f, 6.740630382e-05f, 6.741940118e-05f, 6.743238069e-05f, 6.744524234e-05f, 6.745798612e-05f, 6.747061203e-05f, 6.748312004e-05f, 6.749551015e-05f,
-6.750778236e-05f, 6.751993664e-05f, 6.753197299e-05f, 6.754389140e-05f, 6.755569186e-05f, 6.756737436e-05f, 6.757893889e-05f, 6.759038544e-05f, 6.760171401e-05f, 6.761292457e-05f,
-6.762401714e-05f, 6.763499169e-05f, 6.764584822e-05f, 6.765658672e-05f, 6.766720719e-05f, 6.767770962e-05f, 6.768809399e-05f, 6.769836031e-05f, 6.770850856e-05f, 6.771853874e-05f,
-6.772845084e-05f, 6.773824486e-05f, 6.774792080e-05f, 6.775747863e-05f, 6.776691837e-05f, 6.777624000e-05f, 6.778544352e-05f, 6.779452893e-05f, 6.780349621e-05f, 6.781234537e-05f,
-6.782107640e-05f, 6.782968929e-05f, 6.783818405e-05f, 6.784656067e-05f, 6.785481914e-05f, 6.786295947e-05f, 6.787098164e-05f, 6.787888566e-05f, 6.788667152e-05f, 6.789433923e-05f,
-6.790188877e-05f, 6.790932015e-05f, 6.791663337e-05f, 6.792382842e-05f, 6.793090530e-05f, 6.793786401e-05f, 6.794470455e-05f, 6.795142692e-05f, 6.795803111e-05f, 6.796451714e-05f,
-6.797088499e-05f, 6.797713467e-05f, 6.798326618e-05f, 6.798927951e-05f, 6.799517468e-05f, 6.800095167e-05f, 6.800661050e-05f, 6.801215115e-05f, 6.801757364e-05f, 6.802287796e-05f,
-6.802806412e-05f, 6.803313212e-05f, 6.803808196e-05f, 6.804291364e-05f, 6.804762717e-05f, 6.805222255e-05f, 6.805669978e-05f, 6.806105886e-05f, 6.806529981e-05f, 6.806942261e-05f,
-6.807342728e-05f, 6.807731382e-05f, 6.808108224e-05f, 6.808473254e-05f, 6.808826471e-05f, 6.809167878e-05f, 6.809497474e-05f, 6.809815260e-05f, 6.810121237e-05f, 6.810415404e-05f,
-6.810697763e-05f, 6.810968314e-05f, 6.811227058e-05f, 6.811473996e-05f, 6.811709128e-05f, 6.811932454e-05f, 6.812143977e-05f, 6.812343695e-05f, 6.812531611e-05f, 6.812707724e-05f,
-6.812872036e-05f, 6.813024548e-05f, 6.813165260e-05f, 6.813294173e-05f, 6.813411288e-05f, 6.813516606e-05f, 6.813610127e-05f, 6.813691854e-05f, 6.813761786e-05f, 6.813819925e-05f,
-6.813866272e-05f, 6.813900827e-05f, 6.813923593e-05f, 6.813934569e-05f, 6.813933757e-05f, 6.813921158e-05f, 6.813896773e-05f, 6.813860603e-05f, 6.813812650e-05f, 6.813752914e-05f,
-6.813681397e-05f, 6.813598101e-05f, 6.813503025e-05f, 6.813396172e-05f, 6.813277543e-05f, 6.813147139e-05f, 6.813004962e-05f, 6.812851012e-05f, 6.812685291e-05f, 6.812507801e-05f,
-6.812318543e-05f, 6.812117518e-05f, 6.811904728e-05f, 6.811680175e-05f, 6.811443859e-05f, 6.811195782e-05f, 6.810935946e-05f, 6.810664353e-05f, 6.810381003e-05f, 6.810085899e-05f,
-6.809779042e-05f, 6.809460434e-05f, 6.809130076e-05f, 6.808787970e-05f, 6.808434118e-05f, 6.808068521e-05f, 6.807691182e-05f, 6.807302101e-05f, 6.806901281e-05f, 6.806488724e-05f,
-6.806064430e-05f, 6.805628403e-05f, 6.805180644e-05f, 6.804721155e-05f, 6.804249937e-05f, 6.803766993e-05f, 6.803272325e-05f, 6.802765934e-05f, 6.802247822e-05f, 6.801717992e-05f,
-6.801176445e-05f, 6.800623184e-05f, 6.800058211e-05f, 6.799481527e-05f, 6.798893134e-05f, 6.798293036e-05f, 6.797681233e-05f, 6.797057729e-05f, 6.796422525e-05f, 6.795775623e-05f,
-6.795117026e-05f, 6.794446736e-05f, 6.793764755e-05f, 6.793071085e-05f, 6.792365729e-05f, 6.791648689e-05f, 6.790919968e-05f, 6.790179567e-05f, 6.789427489e-05f, 6.788663736e-05f,
-6.787888312e-05f, 6.787101218e-05f, 6.786302456e-05f, 6.785492030e-05f, 6.784669941e-05f, 6.783836193e-05f, 6.782990787e-05f, 6.782133727e-05f, 6.781265015e-05f, 6.780384652e-05f,
-6.779492644e-05f, 6.778588990e-05f, 6.777673695e-05f, 6.776746761e-05f, 6.775808191e-05f, 6.774857987e-05f, 6.773896153e-05f, 6.772922690e-05f, 6.771937602e-05f, 6.770940891e-05f,
-6.769932561e-05f, 6.768912613e-05f, 6.767881052e-05f, 6.766837879e-05f, 6.765783098e-05f, 6.764716712e-05f, 6.763638723e-05f, 6.762549135e-05f, 6.761447950e-05f, 6.760335172e-05f,
-6.759210803e-05f, 6.758074846e-05f, 6.756927305e-05f, 6.755768182e-05f, 6.754597481e-05f, 6.753415205e-05f, 6.752221357e-05f, 6.751015940e-05f, 6.749798957e-05f, 6.748570411e-05f,
-6.747330306e-05f, 6.746078645e-05f, 6.744815431e-05f, 6.743540667e-05f, 6.742254357e-05f, 6.740956504e-05f, 6.739647111e-05f, 6.738326181e-05f, 6.736993719e-05f, 6.735649726e-05f,
-6.734294208e-05f, 6.732927166e-05f, 6.731548606e-05f, 6.730158529e-05f, 6.728756939e-05f, 6.727343841e-05f, 6.725919237e-05f, 6.724483132e-05f, 6.723035528e-05f, 6.721576429e-05f,
-6.720105839e-05f, 6.718623761e-05f, 6.717130200e-05f, 6.715625158e-05f, 6.714108640e-05f, 6.712580648e-05f, 6.711041188e-05f, 6.709490262e-05f, 6.707927874e-05f, 6.706354028e-05f,
-6.704768728e-05f, 6.703171978e-05f, 6.701563782e-05f, 6.699944142e-05f, 6.698313064e-05f, 6.696670551e-05f, 6.695016607e-05f, 6.693351236e-05f, 6.691674442e-05f, 6.689986229e-05f,
-6.688286600e-05f, 6.686575561e-05f, 6.684853114e-05f, 6.683119264e-05f, 6.681374015e-05f, 6.679617372e-05f, 6.677849337e-05f, 6.676069916e-05f, 6.674279112e-05f, 6.672476930e-05f,
-6.670663373e-05f, 6.668838447e-05f, 6.667002155e-05f, 6.665154501e-05f, 6.663295490e-05f, 6.661425125e-05f, 6.659543412e-05f, 6.657650355e-05f, 6.655745958e-05f, 6.653830225e-05f,
-6.651903160e-05f, 6.649964769e-05f, 6.648015055e-05f, 6.646054022e-05f, 6.644081677e-05f, 6.642098022e-05f, 6.640103062e-05f, 6.638096802e-05f, 6.636079246e-05f, 6.634050399e-05f,
-6.632010266e-05f, 6.629958851e-05f, 6.627896158e-05f, 6.625822192e-05f, 6.623736959e-05f, 6.621640462e-05f, 6.619532706e-05f, 6.617413696e-05f, 6.615283436e-05f, 6.613141932e-05f,
-6.610989189e-05f, 6.608825210e-05f, 6.606650000e-05f, 6.604463566e-05f, 6.602265910e-05f, 6.600057039e-05f, 6.597836957e-05f, 6.595605668e-05f, 6.593363179e-05f, 6.591109493e-05f,
-6.588844616e-05f, 6.586568553e-05f, 6.584281308e-05f, 6.581982887e-05f, 6.579673295e-05f, 6.577352537e-05f, 6.575020617e-05f, 6.572677541e-05f, 6.570323314e-05f, 6.567957941e-05f,
-6.565581427e-05f, 6.563193778e-05f, 6.560794998e-05f, 6.558385093e-05f, 6.555964068e-05f, 6.553531928e-05f, 6.551088679e-05f, 6.548634325e-05f, 6.546168872e-05f, 6.543692325e-05f,
-6.541204690e-05f, 6.538705971e-05f, 6.536196176e-05f, 6.533675307e-05f, 6.531143372e-05f, 6.528600375e-05f, 6.526046322e-05f, 6.523481219e-05f, 6.520905070e-05f, 6.518317881e-05f,
-6.515719659e-05f, 6.513110407e-05f, 6.510490133e-05f, 6.507858841e-05f, 6.505216537e-05f, 6.502563226e-05f, 6.499898915e-05f, 6.497223609e-05f, 6.494537313e-05f, 6.491840034e-05f,
-6.489131776e-05f, 6.486412546e-05f, 6.483682350e-05f, 6.480941192e-05f, 6.478189080e-05f, 6.475426018e-05f, 6.472652012e-05f, 6.469867069e-05f, 6.467071194e-05f, 6.464264392e-05f,
-6.461446671e-05f, 6.458618036e-05f, 6.455778492e-05f, 6.452928045e-05f, 6.450066702e-05f, 6.447194469e-05f, 6.444311351e-05f, 6.441417355e-05f, 6.438512486e-05f, 6.435596751e-05f,
-6.432670156e-05f, 6.429732706e-05f, 6.426784408e-05f, 6.423825268e-05f, 6.420855291e-05f, 6.417874486e-05f, 6.414882856e-05f, 6.411880409e-05f, 6.408867151e-05f, 6.405843088e-05f,
-6.402808226e-05f, 6.399762571e-05f, 6.396706131e-05f, 6.393638910e-05f, 6.390560916e-05f, 6.387472154e-05f, 6.384372632e-05f, 6.381262355e-05f, 6.378141330e-05f, 6.375009563e-05f,
-6.371867060e-05f, 6.368713829e-05f, 6.365549876e-05f, 6.362375206e-05f, 6.359189827e-05f, 6.355993745e-05f, 6.352786966e-05f, 6.349569498e-05f, 6.346341346e-05f, 6.343102517e-05f,
-6.339853019e-05f, 6.336592856e-05f, 6.333322037e-05f, 6.330040568e-05f, 6.326748455e-05f, 6.323445706e-05f, 6.320132326e-05f, 6.316808322e-05f, 6.313473702e-05f, 6.310128472e-05f,
-6.306772639e-05f, 6.303406210e-05f, 6.300029191e-05f, 6.296641590e-05f, 6.293243412e-05f, 6.289834666e-05f, 6.286415357e-05f, 6.282985493e-05f, 6.279545081e-05f, 6.276094128e-05f,
-6.272632640e-05f, 6.269160625e-05f, 6.265678090e-05f, 6.262185041e-05f, 6.258681486e-05f, 6.255167431e-05f, 6.251642884e-05f, 6.248107852e-05f, 6.244562342e-05f, 6.241006361e-05f,
-6.237439916e-05f, 6.233863014e-05f, 6.230275663e-05f, 6.226677870e-05f, 6.223069641e-05f, 6.219450985e-05f, 6.215821907e-05f, 6.212182417e-05f, 6.208532520e-05f, 6.204872224e-05f,
-6.201201537e-05f, 6.197520465e-05f, 6.193829017e-05f, 6.190127199e-05f, 6.186415019e-05f, 6.182692484e-05f, 6.178959601e-05f, 6.175216379e-05f, 6.171462824e-05f, 6.167698944e-05f,
-6.163924747e-05f, 6.160140240e-05f, 6.156345430e-05f, 6.152540325e-05f, 6.148724932e-05f, 6.144899260e-05f, 6.141063315e-05f, 6.137217105e-05f, 6.133360639e-05f, 6.129493923e-05f,
-6.125616965e-05f, 6.121729772e-05f, 6.117832354e-05f, 6.113924716e-05f, 6.110006868e-05f, 6.106078816e-05f, 6.102140569e-05f, 6.098192133e-05f, 6.094233518e-05f, 6.090264730e-05f,
-6.086285778e-05f, 6.082296670e-05f, 6.078297413e-05f, 6.074288014e-05f, 6.070268483e-05f, 6.066238827e-05f, 6.062199054e-05f, 6.058149171e-05f, 6.054089187e-05f, 6.050019110e-05f,
-6.045938947e-05f, 6.041848708e-05f, 6.037748399e-05f, 6.033638028e-05f, 6.029517605e-05f, 6.025387136e-05f, 6.021246630e-05f, 6.017096096e-05f, 6.012935540e-05f, 6.008764972e-05f,
-6.004584399e-05f, 6.000393830e-05f, 5.996193273e-05f, 5.991982736e-05f, 5.987762227e-05f, 5.983531754e-05f, 5.979291327e-05f, 5.975040952e-05f, 5.970780638e-05f, 5.966510394e-05f,
-5.962230229e-05f, 5.957940149e-05f, 5.953640164e-05f, 5.949330281e-05f, 5.945010511e-05f, 5.940680859e-05f, 5.936341336e-05f, 5.931991950e-05f, 5.927632709e-05f, 5.923263621e-05f,
-5.918884695e-05f, 5.914495940e-05f, 5.910097363e-05f, 5.905688974e-05f, 5.901270781e-05f, 5.896842793e-05f, 5.892405018e-05f, 5.887957465e-05f, 5.883500142e-05f, 5.879033059e-05f,
-5.874556222e-05f, 5.870069643e-05f, 5.865573328e-05f, 5.861067287e-05f, 5.856551528e-05f, 5.852026061e-05f, 5.847490893e-05f, 5.842946034e-05f, 5.838391493e-05f, 5.833827277e-05f,
-5.829253397e-05f, 5.824669860e-05f, 5.820076676e-05f, 5.815473854e-05f, 5.810861402e-05f, 5.806239329e-05f, 5.801607644e-05f, 5.796966356e-05f, 5.792315475e-05f, 5.787655008e-05f,
-5.782984965e-05f, 5.778305355e-05f, 5.773616187e-05f, 5.768917469e-05f, 5.764209212e-05f, 5.759491423e-05f, 5.754764113e-05f, 5.750027289e-05f, 5.745280962e-05f, 5.740525140e-05f,
-5.735759832e-05f, 5.730985048e-05f, 5.726200796e-05f, 5.721407086e-05f, 5.716603927e-05f, 5.711791329e-05f, 5.706969299e-05f, 5.702137849e-05f, 5.697296986e-05f, 5.692446720e-05f,
-5.687587061e-05f, 5.682718017e-05f, 5.677839599e-05f, 5.672951814e-05f, 5.668054673e-05f, 5.663148186e-05f, 5.658232360e-05f, 5.653307206e-05f, 5.648372734e-05f, 5.643428952e-05f,
-5.638475870e-05f, 5.633513497e-05f, 5.628541843e-05f, 5.623560918e-05f, 5.618570730e-05f, 5.613571289e-05f, 5.608562606e-05f, 5.603544688e-05f, 5.598517547e-05f, 5.593481191e-05f,
-5.588435630e-05f, 5.583380874e-05f, 5.578316932e-05f, 5.573243814e-05f, 5.568161530e-05f, 5.563070088e-05f, 5.557969499e-05f, 5.552859773e-05f, 5.547740919e-05f, 5.542612947e-05f,
-5.537475867e-05f, 5.532329688e-05f, 5.527174420e-05f, 5.522010073e-05f, 5.516836657e-05f, 5.511654181e-05f, 5.506462656e-05f, 5.501262090e-05f, 5.496052495e-05f, 5.490833880e-05f,
-5.485606254e-05f, 5.480369628e-05f, 5.475124011e-05f, 5.469869414e-05f, 5.464605846e-05f, 5.459333317e-05f, 5.454051838e-05f, 5.448761418e-05f, 5.443462067e-05f, 5.438153796e-05f,
-5.432836613e-05f, 5.427510530e-05f, 5.422175557e-05f, 5.416831703e-05f, 5.411478978e-05f, 5.406117393e-05f, 5.400746957e-05f, 5.395367682e-05f, 5.389979576e-05f, 5.384582650e-05f,
-5.379176915e-05f, 5.373762380e-05f, 5.368339056e-05f, 5.362906952e-05f, 5.357466080e-05f, 5.352016449e-05f, 5.346558069e-05f, 5.341090952e-05f, 5.335615106e-05f, 5.330130543e-05f,
-5.324637272e-05f, 5.319135305e-05f, 5.313624650e-05f, 5.308105320e-05f, 5.302577323e-05f, 5.297040671e-05f, 5.291495374e-05f, 5.285941442e-05f, 5.280378886e-05f, 5.274807716e-05f,
-5.269227942e-05f, 5.263639575e-05f, 5.258042626e-05f, 5.252437105e-05f, 5.246823022e-05f, 5.241200388e-05f, 5.235569213e-05f, 5.229929509e-05f, 5.224281285e-05f, 5.218624553e-05f,
-5.212959322e-05f, 5.207285603e-05f, 5.201603408e-05f, 5.195912746e-05f, 5.190213628e-05f, 5.184506065e-05f, 5.178790068e-05f, 5.173065647e-05f, 5.167332813e-05f, 5.161591576e-05f,
-5.155841948e-05f, 5.150083939e-05f, 5.144317560e-05f, 5.138542821e-05f, 5.132759734e-05f, 5.126968309e-05f, 5.121168557e-05f, 5.115360489e-05f, 5.109544115e-05f, 5.103719447e-05f,
-5.097886495e-05f, 5.092045270e-05f, 5.086195783e-05f, 5.080338046e-05f, 5.074472068e-05f, 5.068597861e-05f, 5.062715435e-05f, 5.056824803e-05f, 5.050925974e-05f, 5.045018959e-05f,
-5.039103770e-05f, 5.033180418e-05f, 5.027248913e-05f, 5.021309267e-05f, 5.015361491e-05f, 5.009405595e-05f, 5.003441592e-05f, 4.997469491e-05f, 4.991489304e-05f, 4.985501042e-05f,
-4.979504716e-05f, 4.973500338e-05f, 4.967487918e-05f, 4.961467468e-05f, 4.955438998e-05f, 4.949402521e-05f, 4.943358046e-05f, 4.937305586e-05f, 4.931245152e-05f, 4.925176755e-05f,
-4.919100405e-05f, 4.913016115e-05f, 4.906923896e-05f, 4.900823758e-05f, 4.894715714e-05f, 4.888599774e-05f, 4.882475950e-05f, 4.876344253e-05f, 4.870204695e-05f, 4.864057286e-05f,
-4.857902039e-05f, 4.851738965e-05f, 4.845568074e-05f, 4.839389379e-05f, 4.833202891e-05f, 4.827008621e-05f, 4.820806580e-05f, 4.814596781e-05f, 4.808379235e-05f, 4.802153953e-05f,
-4.795920946e-05f, 4.789680227e-05f, 4.783431806e-05f, 4.777175696e-05f, 4.770911907e-05f, 4.764640452e-05f, 4.758361342e-05f, 4.752074588e-05f, 4.745780202e-05f, 4.739478196e-05f,
-4.733168581e-05f, 4.726851369e-05f, 4.720526571e-05f, 4.714194200e-05f, 4.707854267e-05f, 4.701506783e-05f, 4.695151761e-05f, 4.688789211e-05f, 4.682419147e-05f, 4.676041578e-05f,
-4.669656518e-05f, 4.663263978e-05f, 4.656863969e-05f, 4.650456504e-05f, 4.644041594e-05f, 4.637619251e-05f, 4.631189487e-05f, 4.624752313e-05f, 4.618307742e-05f, 4.611855786e-05f,
-4.605396455e-05f, 4.598929763e-05f, 4.592455720e-05f, 4.585974340e-05f, 4.579485633e-05f, 4.572989611e-05f, 4.566486288e-05f, 4.559975674e-05f, 4.553457781e-05f, 4.546932622e-05f,
-4.540400208e-05f, 4.533860551e-05f, 4.527313664e-05f, 4.520759558e-05f, 4.514198246e-05f, 4.507629739e-05f, 4.501054049e-05f, 4.494471189e-05f, 4.487881171e-05f, 4.481284006e-05f,
-4.474679707e-05f, 4.468068286e-05f, 4.461449754e-05f, 4.454824125e-05f, 4.448191410e-05f, 4.441551622e-05f, 4.434904771e-05f, 4.428250872e-05f, 4.421589935e-05f, 4.414921973e-05f,
-4.408246999e-05f, 4.401565024e-05f, 4.394876060e-05f, 4.388180121e-05f, 4.381477217e-05f, 4.374767362e-05f, 4.368050568e-05f, 4.361326846e-05f, 4.354596210e-05f, 4.347858671e-05f,
-4.341114242e-05f, 4.334362934e-05f, 4.327604762e-05f, 4.320839736e-05f, 4.314067869e-05f, 4.307289174e-05f, 4.300503662e-05f, 4.293711347e-05f, 4.286912240e-05f, 4.280106354e-05f,
-4.273293702e-05f, 4.266474296e-05f, 4.259648148e-05f, 4.252815270e-05f, 4.245975676e-05f, 4.239129377e-05f, 4.232276387e-05f, 4.225416717e-05f, 4.218550380e-05f, 4.211677389e-05f,
-4.204797756e-05f, 4.197911494e-05f, 4.191018614e-05f, 4.184119131e-05f, 4.177213056e-05f, 4.170300401e-05f, 4.163381180e-05f, 4.156455406e-05f, 4.149523089e-05f, 4.142584244e-05f,
-4.135638883e-05f, 4.128687019e-05f, 4.121728663e-05f, 4.114763829e-05f, 4.107792530e-05f, 4.100814778e-05f, 4.093830585e-05f, 4.086839966e-05f, 4.079842931e-05f, 4.072839494e-05f,
-4.065829668e-05f, 4.058813465e-05f, 4.051790898e-05f, 4.044761980e-05f, 4.037726723e-05f, 4.030685141e-05f, 4.023637246e-05f, 4.016583051e-05f, 4.009522568e-05f, 4.002455812e-05f,
-3.995382793e-05f, 3.988303526e-05f, 3.981218022e-05f, 3.974126296e-05f, 3.967028359e-05f, 3.959924224e-05f, 3.952813905e-05f, 3.945697415e-05f, 3.938574766e-05f, 3.931445970e-05f,
-3.924311042e-05f, 3.917169994e-05f, 3.910022838e-05f, 3.902869589e-05f, 3.895710258e-05f, 3.888544859e-05f, 3.881373405e-05f, 3.874195908e-05f, 3.867012382e-05f, 3.859822840e-05f,
-3.852627294e-05f, 3.845425758e-05f, 3.838218244e-05f, 3.831004767e-05f, 3.823785338e-05f, 3.816559971e-05f, 3.809328679e-05f, 3.802091475e-05f, 3.794848372e-05f, 3.787599383e-05f,
-3.780344521e-05f, 3.773083799e-05f, 3.765817231e-05f, 3.758544830e-05f, 3.751266608e-05f, 3.743982579e-05f, 3.736692756e-05f, 3.729397152e-05f, 3.722095780e-05f, 3.714788654e-05f,
-3.707475787e-05f, 3.700157191e-05f, 3.692832881e-05f, 3.685502869e-05f, 3.678167168e-05f, 3.670825792e-05f, 3.663478754e-05f, 3.656126067e-05f, 3.648767744e-05f, 3.641403800e-05f,
-3.634034246e-05f, 3.626659096e-05f, 3.619278365e-05f, 3.611892063e-05f, 3.604500206e-05f, 3.597102807e-05f, 3.589699878e-05f, 3.582291434e-05f, 3.574877486e-05f, 3.567458050e-05f,
-3.560033138e-05f, 3.552602763e-05f, 3.545166939e-05f, 3.537725680e-05f, 3.530278998e-05f, 3.522826907e-05f, 3.515369420e-05f, 3.507906552e-05f, 3.500438314e-05f, 3.492964722e-05f,
-3.485485787e-05f, 3.478001524e-05f, 3.470511946e-05f, 3.463017067e-05f, 3.455516899e-05f, 3.448011457e-05f, 3.440500754e-05f, 3.432984803e-05f, 3.425463618e-05f, 3.417937213e-05f,
-3.410405600e-05f, 3.402868794e-05f, 3.395326808e-05f, 3.387779655e-05f, 3.380227350e-05f, 3.372669905e-05f, 3.365107334e-05f, 3.357539651e-05f, 3.349966869e-05f, 3.342389002e-05f,
-3.334806064e-05f, 3.327218067e-05f, 3.319625026e-05f, 3.312026955e-05f, 3.304423867e-05f, 3.296815775e-05f, 3.289202693e-05f, 3.281584635e-05f, 3.273961615e-05f, 3.266333645e-05f,
-3.258700741e-05f, 3.251062915e-05f, 3.243420181e-05f, 3.235772552e-05f, 3.228120044e-05f, 3.220462668e-05f, 3.212800440e-05f, 3.205133372e-05f, 3.197461479e-05f, 3.189784773e-05f,
-3.182103270e-05f, 3.174416982e-05f, 3.166725923e-05f, 3.159030107e-05f, 3.151329549e-05f, 3.143624261e-05f, 3.135914257e-05f, 3.128199551e-05f, 3.120480158e-05f, 3.112756090e-05f,
-3.105027362e-05f, 3.097293987e-05f, 3.089555979e-05f, 3.081813352e-05f, 3.074066120e-05f, 3.066314297e-05f, 3.058557897e-05f, 3.050796932e-05f, 3.043031418e-05f, 3.035261369e-05f,
-3.027486797e-05f, 3.019707717e-05f, 3.011924142e-05f, 3.004136088e-05f, 2.996343567e-05f, 2.988546593e-05f, 2.980745181e-05f, 2.972939344e-05f, 2.965129096e-05f, 2.957314451e-05f,
-2.949495423e-05f, 2.941672027e-05f, 2.933844275e-05f, 2.926012182e-05f, 2.918175762e-05f, 2.910335029e-05f, 2.902489996e-05f, 2.894640679e-05f, 2.886787090e-05f, 2.878929244e-05f,
-2.871067155e-05f, 2.863200836e-05f, 2.855330302e-05f, 2.847455567e-05f, 2.839576645e-05f, 2.831693550e-05f, 2.823806295e-05f, 2.815914895e-05f, 2.808019365e-05f, 2.800119717e-05f,
-2.792215966e-05f, 2.784308127e-05f, 2.776396212e-05f, 2.768480237e-05f, 2.760560215e-05f, 2.752636161e-05f, 2.744708088e-05f, 2.736776011e-05f, 2.728839944e-05f, 2.720899900e-05f,
-2.712955894e-05f, 2.705007940e-05f, 2.697056053e-05f, 2.689100246e-05f, 2.681140533e-05f, 2.673176929e-05f, 2.665209447e-05f, 2.657238102e-05f, 2.649262909e-05f, 2.641283881e-05f,
-2.633301032e-05f, 2.625314376e-05f, 2.617323928e-05f, 2.609329702e-05f, 2.601331713e-05f, 2.593329973e-05f, 2.585324498e-05f, 2.577315302e-05f, 2.569302398e-05f, 2.561285802e-05f,
-2.553265527e-05f, 2.545241588e-05f, 2.537213998e-05f, 2.529182772e-05f, 2.521147925e-05f, 2.513109470e-05f, 2.505067422e-05f, 2.497021795e-05f, 2.488972603e-05f, 2.480919860e-05f,
-2.472863582e-05f, 2.464803781e-05f, 2.456740473e-05f, 2.448673672e-05f, 2.440603391e-05f, 2.432529646e-05f, 2.424452450e-05f, 2.416371818e-05f, 2.408287764e-05f, 2.400200302e-05f,
-2.392109447e-05f, 2.384015213e-05f, 2.375917615e-05f, 2.367816666e-05f, 2.359712382e-05f, 2.351604775e-05f, 2.343493862e-05f, 2.335379655e-05f, 2.327262170e-05f, 2.319141421e-05f,
-2.311017422e-05f, 2.302890187e-05f, 2.294759731e-05f, 2.286626069e-05f, 2.278489214e-05f, 2.270349181e-05f, 2.262205984e-05f, 2.254059638e-05f, 2.245910158e-05f, 2.237757557e-05f,
-2.229601850e-05f, 2.221443051e-05f, 2.213281175e-05f, 2.205116236e-05f, 2.196948249e-05f, 2.188777228e-05f, 2.180603187e-05f, 2.172426141e-05f, 2.164246104e-05f, 2.156063092e-05f,
-2.147877117e-05f, 2.139688195e-05f, 2.131496340e-05f, 2.123301567e-05f, 2.115103889e-05f, 2.106903322e-05f, 2.098699880e-05f, 2.090493578e-05f, 2.082284429e-05f, 2.074072448e-05f,
-2.065857650e-05f, 2.057640050e-05f, 2.049419661e-05f, 2.041196499e-05f, 2.032970577e-05f, 2.024741911e-05f, 2.016510514e-05f, 2.008276401e-05f, 2.000039587e-05f, 1.991800087e-05f,
-1.983557914e-05f, 1.975313083e-05f, 1.967065609e-05f, 1.958815507e-05f, 1.950562790e-05f, 1.942307474e-05f, 1.934049572e-05f, 1.925789100e-05f, 1.917526072e-05f, 1.909260503e-05f,
-1.900992406e-05f, 1.892721797e-05f, 1.884448690e-05f, 1.876173100e-05f, 1.867895041e-05f, 1.859614528e-05f, 1.851331575e-05f, 1.843046197e-05f, 1.834758409e-05f, 1.826468224e-05f,
-1.818175658e-05f, 1.809880726e-05f, 1.801583441e-05f, 1.793283818e-05f, 1.784981873e-05f, 1.776677619e-05f, 1.768371071e-05f, 1.760062243e-05f, 1.751751151e-05f, 1.743437809e-05f,
-1.735122232e-05f, 1.726804433e-05f, 1.718484428e-05f, 1.710162232e-05f, 1.701837858e-05f, 1.693511322e-05f, 1.685182637e-05f, 1.676851820e-05f, 1.668518884e-05f, 1.660183844e-05f,
-1.651846714e-05f, 1.643507510e-05f, 1.635166246e-05f, 1.626822936e-05f, 1.618477595e-05f, 1.610130238e-05f, 1.601780879e-05f, 1.593429533e-05f, 1.585076215e-05f, 1.576720939e-05f,
-1.568363720e-05f, 1.560004572e-05f, 1.551643511e-05f, 1.543280551e-05f, 1.534915706e-05f, 1.526548991e-05f, 1.518180421e-05f, 1.509810011e-05f, 1.501437775e-05f, 1.493063727e-05f,
-1.484687883e-05f, 1.476310257e-05f, 1.467930864e-05f, 1.459549719e-05f, 1.451166835e-05f, 1.442782228e-05f, 1.434395913e-05f, 1.426007904e-05f, 1.417618215e-05f, 1.409226862e-05f,
-1.400833860e-05f, 1.392439222e-05f, 1.384042963e-05f, 1.375645099e-05f, 1.367245644e-05f, 1.358844612e-05f, 1.350442018e-05f, 1.342037878e-05f, 1.333632205e-05f, 1.325225014e-05f,
-1.316816321e-05f, 1.308406139e-05f, 1.299994483e-05f, 1.291581369e-05f, 1.283166810e-05f, 1.274750822e-05f, 1.266333419e-05f, 1.257914616e-05f, 1.249494428e-05f, 1.241072869e-05f,
-1.232649954e-05f, 1.224225697e-05f, 1.215800114e-05f, 1.207373219e-05f, 1.198945027e-05f, 1.190515552e-05f, 1.182084810e-05f, 1.173652814e-05f, 1.165219580e-05f, 1.156785123e-05f,
-1.148349457e-05f, 1.139912596e-05f, 1.131474556e-05f, 1.123035351e-05f, 1.114594996e-05f, 1.106153505e-05f, 1.097710894e-05f, 1.089267177e-05f, 1.080822369e-05f, 1.072376484e-05f,
-1.063929538e-05f, 1.055481544e-05f, 1.047032518e-05f, 1.038582474e-05f, 1.030131428e-05f, 1.021679393e-05f, 1.013226385e-05f, 1.004772418e-05f, 9.963175068e-06f, 9.878616664e-06f,
-9.794049115e-06f, 9.709472566e-06f, 9.624887167e-06f, 9.540293062e-06f, 9.455690401e-06f, 9.371079329e-06f, 9.286459995e-06f, 9.201832545e-06f, 9.117197127e-06f, 9.032553888e-06f,
-8.947902975e-06f, 8.863244535e-06f, 8.778578716e-06f, 8.693905664e-06f, 8.609225527e-06f, 8.524538453e-06f, 8.439844588e-06f, 8.355144079e-06f, 8.270437074e-06f, 8.185723720e-06f,
-8.101004165e-06f, 8.016278554e-06f, 7.931547036e-06f, 7.846809758e-06f, 7.762066867e-06f, 7.677318509e-06f, 7.592564833e-06f, 7.507805986e-06f, 7.423042114e-06f, 7.338273365e-06f,
-7.253499885e-06f, 7.168721823e-06f, 7.083939325e-06f, 6.999152538e-06f, 6.914361609e-06f, 6.829566686e-06f, 6.744767916e-06f, 6.659965446e-06f, 6.575159422e-06f, 6.490349993e-06f,
-6.405537304e-06f, 6.320721504e-06f, 6.235902739e-06f, 6.151081156e-06f, 6.066256903e-06f, 5.981430126e-06f, 5.896600972e-06f, 5.811769589e-06f, 5.726936123e-06f, 5.642100721e-06f,
-5.557263531e-06f, 5.472424700e-06f, 5.387584374e-06f, 5.302742700e-06f, 5.217899825e-06f, 5.133055897e-06f, 5.048211062e-06f, 4.963365466e-06f, 4.878519258e-06f, 4.793672584e-06f,
-4.708825590e-06f, 4.623978424e-06f, 4.539131233e-06f, 4.454284162e-06f, 4.369437360e-06f, 4.284590973e-06f, 4.199745147e-06f, 4.114900030e-06f, 4.030055768e-06f, 3.945212508e-06f,
-3.860370397e-06f, 3.775529581e-06f, 3.690690207e-06f, 3.605852422e-06f, 3.521016372e-06f, 3.436182205e-06f, 3.351350066e-06f, 3.266520103e-06f, 3.181692461e-06f, 3.096867288e-06f,
-3.012044730e-06f, 2.927224934e-06f, 2.842408046e-06f, 2.757594212e-06f, 2.672783580e-06f, 2.587976295e-06f, 2.503172505e-06f, 2.418372355e-06f, 2.333575991e-06f, 2.248783561e-06f,
-2.163995211e-06f, 2.079211087e-06f, 1.994431335e-06f, 1.909656101e-06f, 1.824885533e-06f, 1.740119775e-06f, 1.655358975e-06f, 1.570603279e-06f, 1.485852832e-06f, 1.401107782e-06f,
-1.316368273e-06f, 1.231634453e-06f, 1.146906467e-06f, 1.062184462e-06f, 9.774685829e-07f, 8.927589764e-07f, 8.080557885e-07f, 7.233591650e-07f, 6.386692520e-07f, 5.539861953e-07f,
-4.693101410e-07f, 3.846412347e-07f, 2.999796225e-07f, 2.153254501e-07f, 1.306788633e-07f, 4.604000789e-08f, -3.859097038e-08f, -1.232139258e-07f, -2.078287127e-07f, -2.924351853e-07f,
--3.770331982e-07f, -4.616226056e-07f, -5.462032619e-07f, -6.307750217e-07f, -7.153377395e-07f, -7.998912696e-07f, -8.844354668e-07f, -9.689701854e-07f, -1.053495280e-06f, -1.138010606e-06f,
--1.222516017e-06f, -1.307011368e-06f, -1.391496514e-06f, -1.475971310e-06f, -1.560435610e-06f, -1.644889269e-06f, -1.729332142e-06f, -1.813764084e-06f, -1.898184950e-06f, -1.982594595e-06f,
--2.066992874e-06f, -2.151379641e-06f, -2.235754752e-06f, -2.320118062e-06f, -2.404469427e-06f, -2.488808700e-06f, -2.573135738e-06f, -2.657450395e-06f, -2.741752528e-06f, -2.826041990e-06f,
--2.910318638e-06f, -2.994582327e-06f, -3.078832911e-06f, -3.163070248e-06f, -3.247294192e-06f, -3.331504598e-06f, -3.415701322e-06f, -3.499884221e-06f, -3.584053148e-06f, -3.668207961e-06f,
--3.752348514e-06f, -3.836474664e-06f, -3.920586266e-06f, -4.004683176e-06f, -4.088765250e-06f, -4.172832344e-06f, -4.256884313e-06f, -4.340921015e-06f, -4.424942303e-06f, -4.508948036e-06f,
--4.592938068e-06f, -4.676912256e-06f, -4.760870457e-06f, -4.844812525e-06f, -4.928738319e-06f, -5.012647693e-06f, -5.096540504e-06f, -5.180416609e-06f, -5.264275864e-06f, -5.348118125e-06f,
--5.431943249e-06f, -5.515751093e-06f, -5.599541513e-06f, -5.683314366e-06f, -5.767069508e-06f, -5.850806796e-06f, -5.934526087e-06f, -6.018227238e-06f, -6.101910105e-06f, -6.185574546e-06f,
--6.269220417e-06f, -6.352847576e-06f, -6.436455879e-06f, -6.520045184e-06f, -6.603615348e-06f, -6.687166227e-06f, -6.770697679e-06f, -6.854209562e-06f, -6.937701733e-06f, -7.021174048e-06f,
--7.104626366e-06f, -7.188058544e-06f, -7.271470439e-06f, -7.354861909e-06f, -7.438232812e-06f, -7.521583006e-06f, -7.604912347e-06f, -7.688220694e-06f, -7.771507904e-06f, -7.854773836e-06f,
--7.938018347e-06f, -8.021241295e-06f, -8.104442539e-06f, -8.187621936e-06f, -8.270779344e-06f, -8.353914622e-06f, -8.437027628e-06f, -8.520118220e-06f, -8.603186256e-06f, -8.686231595e-06f,
--8.769254095e-06f, -8.852253615e-06f, -8.935230012e-06f, -9.018183147e-06f, -9.101112877e-06f, -9.184019061e-06f, -9.266901558e-06f, -9.349760227e-06f, -9.432594926e-06f, -9.515405514e-06f,
--9.598191851e-06f, -9.680953795e-06f, -9.763691206e-06f, -9.846403942e-06f, -9.929091862e-06f, -1.001175483e-05f, -1.009439270e-05f, -1.017700533e-05f, -1.025959258e-05f, -1.034215431e-05f,
--1.042469039e-05f, -1.050720066e-05f, -1.058968500e-05f, -1.067214326e-05f, -1.075457529e-05f, -1.083698097e-05f, -1.091936014e-05f, -1.100171267e-05f, -1.108403843e-05f, -1.116633726e-05f,
--1.124860903e-05f, -1.133085360e-05f, -1.141307084e-05f, -1.149526059e-05f, -1.157742272e-05f, -1.165955709e-05f, -1.174166357e-05f, -1.182374200e-05f, -1.190579226e-05f, -1.198781420e-05f,
--1.206980769e-05f, -1.215177258e-05f, -1.223370874e-05f, -1.231561602e-05f, -1.239749429e-05f, -1.247934341e-05f, -1.256116324e-05f, -1.264295364e-05f, -1.272471447e-05f, -1.280644559e-05f,
--1.288814687e-05f, -1.296981817e-05f, -1.305145934e-05f, -1.313307025e-05f, -1.321465076e-05f, -1.329620074e-05f, -1.337772003e-05f, -1.345920852e-05f, -1.354066605e-05f, -1.362209249e-05f,
--1.370348771e-05f, -1.378485155e-05f, -1.386618390e-05f, -1.394748460e-05f, -1.402875352e-05f, -1.410999053e-05f, -1.419119548e-05f, -1.427236824e-05f, -1.435350866e-05f, -1.443461663e-05f,
--1.451569198e-05f, -1.459673460e-05f, -1.467774433e-05f, -1.475872106e-05f, -1.483966462e-05f, -1.492057490e-05f, -1.500145175e-05f, -1.508229504e-05f, -1.516310463e-05f, -1.524388038e-05f,
--1.532462215e-05f, -1.540532982e-05f, -1.548600324e-05f, -1.556664228e-05f, -1.564724680e-05f, -1.572781666e-05f, -1.580835173e-05f, -1.588885187e-05f, -1.596931695e-05f, -1.604974683e-05f,
--1.613014137e-05f, -1.621050045e-05f, -1.629082391e-05f, -1.637111163e-05f, -1.645136348e-05f, -1.653157931e-05f, -1.661175899e-05f, -1.669190238e-05f, -1.677200936e-05f, -1.685207978e-05f,
--1.693211351e-05f, -1.701211042e-05f, -1.709207036e-05f, -1.717199321e-05f, -1.725187883e-05f, -1.733172709e-05f, -1.741153784e-05f, -1.749131097e-05f, -1.757104632e-05f, -1.765074377e-05f,
--1.773040318e-05f, -1.781002443e-05f, -1.788960736e-05f, -1.796915186e-05f, -1.804865778e-05f, -1.812812499e-05f, -1.820755337e-05f, -1.828694276e-05f, -1.836629305e-05f, -1.844560410e-05f,
--1.852487576e-05f, -1.860410792e-05f, -1.868330044e-05f, -1.876245318e-05f, -1.884156600e-05f, -1.892063879e-05f, -1.899967140e-05f, -1.907866370e-05f, -1.915761556e-05f, -1.923652684e-05f,
--1.931539742e-05f, -1.939422715e-05f, -1.947301592e-05f, -1.955176358e-05f, -1.963047000e-05f, -1.970913505e-05f, -1.978775859e-05f, -1.986634051e-05f, -1.994488066e-05f, -2.002337890e-05f,
--2.010183512e-05f, -2.018024918e-05f, -2.025862094e-05f, -2.033695028e-05f, -2.041523706e-05f, -2.049348115e-05f, -2.057168242e-05f, -2.064984074e-05f, -2.072795598e-05f, -2.080602800e-05f,
--2.088405668e-05f, -2.096204188e-05f, -2.103998348e-05f, -2.111788134e-05f, -2.119573533e-05f, -2.127354533e-05f, -2.135131119e-05f, -2.142903280e-05f, -2.150671001e-05f, -2.158434271e-05f,
--2.166193075e-05f, -2.173947402e-05f, -2.181697237e-05f, -2.189442569e-05f, -2.197183383e-05f, -2.204919668e-05f, -2.212651410e-05f, -2.220378595e-05f, -2.228101212e-05f, -2.235819247e-05f,
--2.243532688e-05f, -2.251241521e-05f, -2.258945733e-05f, -2.266645312e-05f, -2.274340245e-05f, -2.282030518e-05f, -2.289716120e-05f, -2.297397037e-05f, -2.305073256e-05f, -2.312744764e-05f,
--2.320411549e-05f, -2.328073597e-05f, -2.335730897e-05f, -2.343383435e-05f, -2.351031198e-05f, -2.358674173e-05f, -2.366312349e-05f, -2.373945711e-05f, -2.381574248e-05f, -2.389197946e-05f,
--2.396816793e-05f, -2.404430776e-05f, -2.412039883e-05f, -2.419644100e-05f, -2.427243415e-05f, -2.434837815e-05f, -2.442427288e-05f, -2.450011820e-05f, -2.457591400e-05f, -2.465166015e-05f,
--2.472735651e-05f, -2.480300297e-05f, -2.487859939e-05f, -2.495414565e-05f, -2.502964163e-05f, -2.510508720e-05f, -2.518048223e-05f, -2.525582660e-05f, -2.533112018e-05f, -2.540636285e-05f,
--2.548155447e-05f, -2.555669493e-05f, -2.563178411e-05f, -2.570682186e-05f, -2.578180808e-05f, -2.585674263e-05f, -2.593162540e-05f, -2.600645625e-05f, -2.608123506e-05f, -2.615596170e-05f,
--2.623063606e-05f, -2.630525801e-05f, -2.637982742e-05f, -2.645434416e-05f, -2.652880813e-05f, -2.660321919e-05f, -2.667757721e-05f, -2.675188208e-05f, -2.682613367e-05f, -2.690033185e-05f,
--2.697447651e-05f, -2.704856752e-05f, -2.712260476e-05f, -2.719658810e-05f, -2.727051743e-05f, -2.734439261e-05f, -2.741821352e-05f, -2.749198005e-05f, -2.756569208e-05f, -2.763934946e-05f,
--2.771295210e-05f, -2.778649986e-05f, -2.785999262e-05f, -2.793343026e-05f, -2.800681265e-05f, -2.808013968e-05f, -2.815341123e-05f, -2.822662717e-05f, -2.829978738e-05f, -2.837289174e-05f,
--2.844594013e-05f, -2.851893242e-05f, -2.859186851e-05f, -2.866474825e-05f, -2.873757154e-05f, -2.881033826e-05f, -2.888304828e-05f, -2.895570148e-05f, -2.902829774e-05f, -2.910083695e-05f,
--2.917331898e-05f, -2.924574371e-05f, -2.931811102e-05f, -2.939042079e-05f, -2.946267291e-05f, -2.953486725e-05f, -2.960700369e-05f, -2.967908212e-05f, -2.975110241e-05f, -2.982306445e-05f,
--2.989496811e-05f, -2.996681328e-05f, -3.003859984e-05f, -3.011032767e-05f, -3.018199665e-05f, -3.025360666e-05f, -3.032515759e-05f, -3.039664932e-05f, -3.046808172e-05f, -3.053945468e-05f,
--3.061076809e-05f, -3.068202182e-05f, -3.075321575e-05f, -3.082434978e-05f, -3.089542378e-05f, -3.096643763e-05f, -3.103739122e-05f, -3.110828443e-05f, -3.117911714e-05f, -3.124988924e-05f,
--3.132060061e-05f, -3.139125113e-05f, -3.146184068e-05f, -3.153236916e-05f, -3.160283644e-05f, -3.167324241e-05f, -3.174358695e-05f, -3.181386994e-05f, -3.188409127e-05f, -3.195425083e-05f,
--3.202434850e-05f, -3.209438416e-05f, -3.216435769e-05f, -3.223426899e-05f, -3.230411793e-05f, -3.237390441e-05f, -3.244362831e-05f, -3.251328950e-05f, -3.258288789e-05f, -3.265242334e-05f,
--3.272189576e-05f, -3.279130502e-05f, -3.286065101e-05f, -3.292993362e-05f, -3.299915273e-05f, -3.306830823e-05f, -3.313740000e-05f, -3.320642794e-05f, -3.327539192e-05f, -3.334429184e-05f,
--3.341312758e-05f, -3.348189903e-05f, -3.355060607e-05f, -3.361924859e-05f, -3.368782649e-05f, -3.375633964e-05f, -3.382478794e-05f, -3.389317127e-05f, -3.396148952e-05f, -3.402974258e-05f,
--3.409793033e-05f, -3.416605267e-05f, -3.423410948e-05f, -3.430210065e-05f, -3.437002607e-05f, -3.443788563e-05f, -3.450567922e-05f, -3.457340672e-05f, -3.464106803e-05f, -3.470866303e-05f,
--3.477619162e-05f, -3.484365368e-05f, -3.491104910e-05f, -3.497837777e-05f, -3.504563958e-05f, -3.511283443e-05f, -3.517996219e-05f, -3.524702277e-05f, -3.531401605e-05f, -3.538094192e-05f,
--3.544780028e-05f, -3.551459101e-05f, -3.558131400e-05f, -3.564796915e-05f, -3.571455635e-05f, -3.578107548e-05f, -3.584752644e-05f, -3.591390913e-05f, -3.598022342e-05f, -3.604646922e-05f,
--3.611264641e-05f, -3.617875489e-05f, -3.624479455e-05f, -3.631076528e-05f, -3.637666698e-05f, -3.644249953e-05f, -3.650826283e-05f, -3.657395678e-05f, -3.663958125e-05f, -3.670513616e-05f,
--3.677062138e-05f, -3.683603682e-05f, -3.690138237e-05f, -3.696665792e-05f, -3.703186336e-05f, -3.709699859e-05f, -3.716206350e-05f, -3.722705799e-05f, -3.729198195e-05f, -3.735683527e-05f,
--3.742161785e-05f, -3.748632959e-05f, -3.755097037e-05f, -3.761554010e-05f, -3.768003866e-05f, -3.774446596e-05f, -3.780882189e-05f, -3.787310634e-05f, -3.793731921e-05f, -3.800146039e-05f,
--3.806552979e-05f, -3.812952729e-05f, -3.819345279e-05f, -3.825730620e-05f, -3.832108739e-05f, -3.838479628e-05f, -3.844843276e-05f, -3.851199672e-05f, -3.857548807e-05f, -3.863890669e-05f,
--3.870225249e-05f, -3.876552536e-05f, -3.882872520e-05f, -3.889185191e-05f, -3.895490538e-05f, -3.901788552e-05f, -3.908079222e-05f, -3.914362537e-05f, -3.920638489e-05f, -3.926907066e-05f,
--3.933168258e-05f, -3.939422056e-05f, -3.945668449e-05f, -3.951907427e-05f, -3.958138980e-05f, -3.964363098e-05f, -3.970579770e-05f, -3.976788988e-05f, -3.982990740e-05f, -3.989185017e-05f,
--3.995371808e-05f, -4.001551104e-05f, -4.007722895e-05f, -4.013887170e-05f, -4.020043920e-05f, -4.026193135e-05f, -4.032334805e-05f, -4.038468919e-05f, -4.044595469e-05f, -4.050714444e-05f,
--4.056825834e-05f, -4.062929630e-05f, -4.069025821e-05f, -4.075114398e-05f, -4.081195351e-05f, -4.087268670e-05f, -4.093334345e-05f, -4.099392367e-05f, -4.105442725e-05f, -4.111485411e-05f,
--4.117520414e-05f, -4.123547724e-05f, -4.129567333e-05f, -4.135579229e-05f, -4.141583404e-05f, -4.147579848e-05f, -4.153568552e-05f, -4.159549504e-05f, -4.165522697e-05f, -4.171488120e-05f,
--4.177445764e-05f, -4.183395619e-05f, -4.189337676e-05f, -4.195271924e-05f, -4.201198355e-05f, -4.207116960e-05f, -4.213027728e-05f, -4.218930649e-05f, -4.224825716e-05f, -4.230712917e-05f,
--4.236592244e-05f, -4.242463688e-05f, -4.248327238e-05f, -4.254182885e-05f, -4.260030621e-05f, -4.265870435e-05f, -4.271702318e-05f, -4.277526262e-05f, -4.283342255e-05f, -4.289150291e-05f,
--4.294950358e-05f, -4.300742448e-05f, -4.306526551e-05f, -4.312302659e-05f, -4.318070761e-05f, -4.323830849e-05f, -4.329582914e-05f, -4.335326946e-05f, -4.341062936e-05f, -4.346790875e-05f,
--4.352510754e-05f, -4.358222564e-05f, -4.363926295e-05f, -4.369621938e-05f, -4.375309485e-05f, -4.380988926e-05f, -4.386660252e-05f, -4.392323454e-05f, -4.397978524e-05f, -4.403625451e-05f,
--4.409264228e-05f, -4.414894845e-05f, -4.420517293e-05f, -4.426131563e-05f, -4.431737646e-05f, -4.437335533e-05f, -4.442925216e-05f, -4.448506686e-05f, -4.454079933e-05f, -4.459644948e-05f,
--4.465201724e-05f, -4.470750251e-05f, -4.476290519e-05f, -4.481822522e-05f, -4.487346248e-05f, -4.492861691e-05f, -4.498368841e-05f, -4.503867689e-05f, -4.509358226e-05f, -4.514840445e-05f,
--4.520314336e-05f, -4.525779890e-05f, -4.531237099e-05f, -4.536685954e-05f, -4.542126446e-05f, -4.547558568e-05f, -4.552982310e-05f, -4.558397663e-05f, -4.563804620e-05f, -4.569203171e-05f,
--4.574593308e-05f, -4.579975022e-05f, -4.585348306e-05f, -4.590713150e-05f, -4.596069545e-05f, -4.601417485e-05f, -4.606756959e-05f, -4.612087960e-05f, -4.617410479e-05f, -4.622724508e-05f,
--4.628030038e-05f, -4.633327061e-05f, -4.638615568e-05f, -4.643895552e-05f, -4.649167004e-05f, -4.654429916e-05f, -4.659684278e-05f, -4.664930084e-05f, -4.670167325e-05f, -4.675395992e-05f,
--4.680616077e-05f, -4.685827572e-05f, -4.691030469e-05f, -4.696224760e-05f, -4.701410436e-05f, -4.706587489e-05f, -4.711755912e-05f, -4.716915696e-05f, -4.722066832e-05f, -4.727209313e-05f,
--4.732343131e-05f, -4.737468278e-05f, -4.742584745e-05f, -4.747692525e-05f, -4.752791610e-05f, -4.757881990e-05f, -4.762963660e-05f, -4.768036610e-05f, -4.773100833e-05f, -4.778156320e-05f,
--4.783203064e-05f, -4.788241057e-05f, -4.793270291e-05f, -4.798290758e-05f, -4.803302451e-05f, -4.808305360e-05f, -4.813299480e-05f, -4.818284801e-05f, -4.823261316e-05f, -4.828229017e-05f,
--4.833187896e-05f, -4.838137946e-05f, -4.843079160e-05f, -4.848011528e-05f, -4.852935044e-05f, -4.857849699e-05f, -4.862755487e-05f, -4.867652399e-05f, -4.872540428e-05f, -4.877419567e-05f,
--4.882289807e-05f, -4.887151141e-05f, -4.892003561e-05f, -4.896847061e-05f, -4.901681632e-05f, -4.906507266e-05f, -4.911323957e-05f, -4.916131697e-05f, -4.920930479e-05f, -4.925720294e-05f,
--4.930501136e-05f, -4.935272996e-05f, -4.940035869e-05f, -4.944789745e-05f, -4.949534619e-05f, -4.954270482e-05f, -4.958997327e-05f, -4.963715147e-05f, -4.968423935e-05f, -4.973123683e-05f,
--4.977814384e-05f, -4.982496030e-05f, -4.987168615e-05f, -4.991832131e-05f, -4.996486572e-05f, -5.001131929e-05f, -5.005768195e-05f, -5.010395364e-05f, -5.015013429e-05f, -5.019622381e-05f,
--5.024222215e-05f, -5.028812922e-05f, -5.033394497e-05f, -5.037966931e-05f, -5.042530218e-05f, -5.047084351e-05f, -5.051629323e-05f, -5.056165126e-05f, -5.060691754e-05f, -5.065209199e-05f,
--5.069717456e-05f, -5.074216516e-05f, -5.078706374e-05f, -5.083187021e-05f, -5.087658452e-05f, -5.092120659e-05f, -5.096573635e-05f, -5.101017374e-05f, -5.105451869e-05f, -5.109877113e-05f,
--5.114293099e-05f, -5.118699821e-05f, -5.123097271e-05f, -5.127485443e-05f, -5.131864331e-05f, -5.136233927e-05f, -5.140594225e-05f, -5.144945218e-05f, -5.149286899e-05f, -5.153619263e-05f,
--5.157942302e-05f, -5.162256009e-05f, -5.166560379e-05f, -5.170855404e-05f, -5.175141079e-05f, -5.179417395e-05f, -5.183684348e-05f, -5.187941930e-05f, -5.192190135e-05f, -5.196428957e-05f,
--5.200658388e-05f, -5.204878424e-05f, -5.209089056e-05f, -5.213290279e-05f, -5.217482087e-05f, -5.221664473e-05f, -5.225837430e-05f, -5.230000953e-05f, -5.234155035e-05f, -5.238299670e-05f,
--5.242434851e-05f, -5.246560573e-05f, -5.250676828e-05f, -5.254783611e-05f, -5.258880916e-05f, -5.262968736e-05f, -5.267047065e-05f, -5.271115897e-05f, -5.275175226e-05f, -5.279225046e-05f,
--5.283265351e-05f, -5.287296134e-05f, -5.291317389e-05f, -5.295329111e-05f, -5.299331293e-05f, -5.303323930e-05f, -5.307307015e-05f, -5.311280542e-05f, -5.315244505e-05f, -5.319198899e-05f,
--5.323143718e-05f, -5.327078955e-05f, -5.331004605e-05f, -5.334920661e-05f, -5.338827118e-05f, -5.342723970e-05f, -5.346611212e-05f, -5.350488837e-05f, -5.354356839e-05f, -5.358215214e-05f,
--5.362063954e-05f, -5.365903054e-05f, -5.369732509e-05f, -5.373552313e-05f, -5.377362460e-05f, -5.381162945e-05f, -5.384953761e-05f, -5.388734903e-05f, -5.392506366e-05f, -5.396268144e-05f,
--5.400020231e-05f, -5.403762622e-05f, -5.407495311e-05f, -5.411218292e-05f, -5.414931561e-05f, -5.418635111e-05f, -5.422328937e-05f, -5.426013034e-05f, -5.429687396e-05f, -5.433352018e-05f,
--5.437006894e-05f, -5.440652019e-05f, -5.444287388e-05f, -5.447912995e-05f, -5.451528834e-05f, -5.455134901e-05f, -5.458731190e-05f, -5.462317696e-05f, -5.465894414e-05f, -5.469461337e-05f,
--5.473018462e-05f, -5.476565783e-05f, -5.480103294e-05f, -5.483630991e-05f, -5.487148868e-05f, -5.490656920e-05f, -5.494155142e-05f, -5.497643528e-05f, -5.501122075e-05f, -5.504590776e-05f,
--5.508049626e-05f, -5.511498621e-05f, -5.514937756e-05f, -5.518367025e-05f, -5.521786423e-05f, -5.525195946e-05f, -5.528595588e-05f, -5.531985345e-05f, -5.535365212e-05f, -5.538735183e-05f,
--5.542095254e-05f, -5.545445419e-05f, -5.548785675e-05f, -5.552116016e-05f, -5.555436438e-05f, -5.558746934e-05f, -5.562047502e-05f, -5.565338136e-05f, -5.568618831e-05f, -5.571889582e-05f,
--5.575150386e-05f, -5.578401236e-05f, -5.581642129e-05f, -5.584873059e-05f, -5.588094023e-05f, -5.591305015e-05f, -5.594506031e-05f, -5.597697066e-05f, -5.600878116e-05f, -5.604049176e-05f,
--5.607210241e-05f, -5.610361307e-05f, -5.613502370e-05f, -5.616633426e-05f, -5.619754468e-05f, -5.622865494e-05f, -5.625966498e-05f, -5.629057477e-05f, -5.632138425e-05f, -5.635209339e-05f,
--5.638270214e-05f, -5.641321046e-05f, -5.644361830e-05f, -5.647392563e-05f, -5.650413239e-05f, -5.653423855e-05f, -5.656424406e-05f, -5.659414888e-05f, -5.662395297e-05f, -5.665365628e-05f,
--5.668325878e-05f, -5.671276042e-05f, -5.674216116e-05f, -5.677146097e-05f, -5.680065979e-05f, -5.682975759e-05f, -5.685875432e-05f, -5.688764995e-05f, -5.691644444e-05f, -5.694513774e-05f,
--5.697372982e-05f, -5.700222064e-05f, -5.703061015e-05f, -5.705889831e-05f, -5.708708509e-05f, -5.711517045e-05f, -5.714315435e-05f, -5.717103675e-05f, -5.719881761e-05f, -5.722649689e-05f,
--5.725407456e-05f, -5.728155057e-05f, -5.730892489e-05f, -5.733619748e-05f, -5.736336831e-05f, -5.739043733e-05f, -5.741740451e-05f, -5.744426980e-05f, -5.747103319e-05f, -5.749769462e-05f,
--5.752425406e-05f, -5.755071148e-05f, -5.757706684e-05f, -5.760332010e-05f, -5.762947123e-05f, -5.765552018e-05f, -5.768146694e-05f, -5.770731146e-05f, -5.773305370e-05f, -5.775869363e-05f,
--5.778423122e-05f, -5.780966643e-05f, -5.783499922e-05f, -5.786022958e-05f, -5.788535745e-05f, -5.791038280e-05f, -5.793530561e-05f, -5.796012583e-05f, -5.798484345e-05f, -5.800945841e-05f,
--5.803397069e-05f, -5.805838026e-05f, -5.808268708e-05f, -5.810689113e-05f, -5.813099236e-05f, -5.815499075e-05f, -5.817888627e-05f, -5.820267888e-05f, -5.822636856e-05f, -5.824995526e-05f,
--5.827343897e-05f, -5.829681964e-05f, -5.832009725e-05f, -5.834327178e-05f, -5.836634318e-05f, -5.838931142e-05f, -5.841217649e-05f, -5.843493834e-05f, -5.845759695e-05f, -5.848015229e-05f,
--5.850260433e-05f, -5.852495304e-05f, -5.854719839e-05f, -5.856934036e-05f, -5.859137890e-05f, -5.861331401e-05f, -5.863514564e-05f, -5.865687377e-05f, -5.867849838e-05f, -5.870001942e-05f,
--5.872143689e-05f, -5.874275074e-05f, -5.876396096e-05f, -5.878506751e-05f, -5.880607037e-05f, -5.882696952e-05f, -5.884776492e-05f, -5.886845655e-05f, -5.888904438e-05f, -5.890952839e-05f,
--5.892990856e-05f, -5.895018485e-05f, -5.897035724e-05f, -5.899042571e-05f, -5.901039023e-05f, -5.903025078e-05f, -5.905000733e-05f, -5.906965986e-05f, -5.908920834e-05f, -5.910865275e-05f,
--5.912799307e-05f, -5.914722927e-05f, -5.916636133e-05f, -5.918538923e-05f, -5.920431294e-05f, -5.922313244e-05f, -5.924184771e-05f, -5.926045872e-05f, -5.927896545e-05f, -5.929736788e-05f,
--5.931566600e-05f, -5.933385976e-05f, -5.935194917e-05f, -5.936993418e-05f, -5.938781479e-05f, -5.940559097e-05f, -5.942326270e-05f, -5.944082996e-05f, -5.945829273e-05f, -5.947565099e-05f,
--5.949290471e-05f, -5.951005389e-05f, -5.952709849e-05f, -5.954403850e-05f, -5.956087390e-05f, -5.957760468e-05f, -5.959423080e-05f, -5.961075226e-05f, -5.962716903e-05f, -5.964348109e-05f,
--5.965968843e-05f, -5.967579104e-05f, -5.969178888e-05f, -5.970768194e-05f, -5.972347022e-05f, -5.973915368e-05f, -5.975473231e-05f, -5.977020609e-05f, -5.978557501e-05f, -5.980083906e-05f,
--5.981599820e-05f, -5.983105244e-05f, -5.984600174e-05f, -5.986084610e-05f, -5.987558550e-05f, -5.989021993e-05f, -5.990474936e-05f, -5.991917379e-05f, -5.993349320e-05f, -5.994770757e-05f,
--5.996181689e-05f, -5.997582114e-05f, -5.998972031e-05f, -6.000351439e-05f, -6.001720337e-05f, -6.003078722e-05f, -6.004426594e-05f, -6.005763950e-05f, -6.007090791e-05f, -6.008407114e-05f,
--6.009712919e-05f, -6.011008203e-05f, -6.012292967e-05f, -6.013567207e-05f, -6.014830925e-05f, -6.016084117e-05f, -6.017326783e-05f, -6.018558922e-05f, -6.019780533e-05f, -6.020991614e-05f,
--6.022192165e-05f, -6.023382184e-05f, -6.024561670e-05f, -6.025730623e-05f, -6.026889041e-05f, -6.028036923e-05f, -6.029174268e-05f, -6.030301076e-05f, -6.031417345e-05f, -6.032523074e-05f,
--6.033618263e-05f, -6.034702910e-05f, -6.035777015e-05f, -6.036840577e-05f, -6.037893595e-05f, -6.038936068e-05f, -6.039967996e-05f, -6.040989377e-05f, -6.042000210e-05f, -6.043000496e-05f,
--6.043990233e-05f, -6.044969421e-05f, -6.045938059e-05f, -6.046896146e-05f, -6.047843681e-05f, -6.048780665e-05f, -6.049707096e-05f, -6.050622973e-05f, -6.051528297e-05f, -6.052423066e-05f,
--6.053307280e-05f, -6.054180939e-05f, -6.055044041e-05f, -6.055896587e-05f, -6.056738577e-05f, -6.057570008e-05f, -6.058390882e-05f, -6.059201197e-05f, -6.060000954e-05f, -6.060790152e-05f,
--6.061568790e-05f, -6.062336868e-05f, -6.063094386e-05f, -6.063841344e-05f, -6.064577741e-05f, -6.065303577e-05f, -6.066018851e-05f, -6.066723564e-05f, -6.067417716e-05f, -6.068101305e-05f,
--6.068774332e-05f, -6.069436797e-05f, -6.070088700e-05f, -6.070730040e-05f, -6.071360817e-05f, -6.071981032e-05f, -6.072590683e-05f, -6.073189772e-05f, -6.073778298e-05f, -6.074356261e-05f,
--6.074923661e-05f, -6.075480498e-05f, -6.076026772e-05f, -6.076562484e-05f, -6.077087632e-05f, -6.077602218e-05f, -6.078106241e-05f, -6.078599702e-05f, -6.079082601e-05f, -6.079554938e-05f,
--6.080016712e-05f, -6.080467925e-05f, -6.080908576e-05f, -6.081338666e-05f, -6.081758195e-05f, -6.082167164e-05f, -6.082565572e-05f, -6.082953419e-05f, -6.083330707e-05f, -6.083697436e-05f,
--6.084053605e-05f, -6.084399215e-05f, -6.084734268e-05f, -6.085058762e-05f, -6.085372699e-05f, -6.085676079e-05f, -6.085968902e-05f, -6.086251170e-05f, -6.086522882e-05f, -6.086784038e-05f,
--6.087034641e-05f, -6.087274689e-05f, -6.087504185e-05f, -6.087723127e-05f, -6.087931518e-05f, -6.088129357e-05f, -6.088316645e-05f, -6.088493383e-05f, -6.088659572e-05f, -6.088815212e-05f,
--6.088960304e-05f, -6.089094849e-05f, -6.089218848e-05f, -6.089332300e-05f, -6.089435208e-05f, -6.089527572e-05f, -6.089609393e-05f, -6.089680671e-05f, -6.089741408e-05f, -6.089791605e-05f,
--6.089831261e-05f, -6.089860379e-05f, -6.089878959e-05f, -6.089887003e-05f, -6.089884510e-05f, -6.089871483e-05f, -6.089847922e-05f, -6.089813828e-05f, -6.089769202e-05f, -6.089714046e-05f,
--6.089648360e-05f, -6.089572146e-05f, -6.089485404e-05f, -6.089388137e-05f, -6.089280344e-05f, -6.089162028e-05f, -6.089033189e-05f, -6.088893828e-05f, -6.088743948e-05f, -6.088583548e-05f,
--6.088412631e-05f, -6.088231197e-05f, -6.088039249e-05f, -6.087836787e-05f, -6.087623812e-05f, -6.087400327e-05f, -6.087166332e-05f, -6.086921829e-05f, -6.086666819e-05f, -6.086401304e-05f,
--6.086125284e-05f, -6.085838763e-05f, -6.085541740e-05f, -6.085234218e-05f, -6.084916199e-05f, -6.084587682e-05f, -6.084248672e-05f, -6.083899167e-05f, -6.083539172e-05f, -6.083168686e-05f,
--6.082787712e-05f, -6.082396252e-05f, -6.081994306e-05f, -6.081581877e-05f, -6.081158966e-05f, -6.080725576e-05f, -6.080281707e-05f, -6.079827362e-05f, -6.079362543e-05f, -6.078887250e-05f,
--6.078401487e-05f, -6.077905254e-05f, -6.077398555e-05f, -6.076881389e-05f, -6.076353760e-05f, -6.075815670e-05f, -6.075267120e-05f, -6.074708112e-05f, -6.074138648e-05f, -6.073558730e-05f,
--6.072968361e-05f, -6.072367541e-05f, -6.071756274e-05f, -6.071134561e-05f, -6.070502405e-05f, -6.069859806e-05f, -6.069206769e-05f, -6.068543293e-05f, -6.067869383e-05f, -6.067185039e-05f,
--6.066490265e-05f, -6.065785062e-05f, -6.065069432e-05f, -6.064343378e-05f, -6.063606902e-05f, -6.062860006e-05f, -6.062102693e-05f, -6.061334965e-05f, -6.060556823e-05f, -6.059768271e-05f,
--6.058969311e-05f, -6.058159945e-05f, -6.057340175e-05f, -6.056510005e-05f, -6.055669436e-05f, -6.054818470e-05f, -6.053957111e-05f, -6.053085361e-05f, -6.052203222e-05f, -6.051310697e-05f,
--6.050407787e-05f, -6.049494497e-05f, -6.048570828e-05f, -6.047636784e-05f, -6.046692365e-05f, -6.045737576e-05f, -6.044772419e-05f, -6.043796896e-05f, -6.042811011e-05f, -6.041814765e-05f,
--6.040808162e-05f, -6.039791204e-05f, -6.038763894e-05f, -6.037726235e-05f, -6.036678229e-05f, -6.035619880e-05f, -6.034551190e-05f, -6.033472162e-05f, -6.032382799e-05f, -6.031283103e-05f,
--6.030173078e-05f, -6.029052727e-05f, -6.027922052e-05f, -6.026781056e-05f, -6.025629743e-05f, -6.024468114e-05f, -6.023296174e-05f, -6.022113926e-05f, -6.020921371e-05f, -6.019718514e-05f,
--6.018505358e-05f, -6.017281905e-05f, -6.016048158e-05f, -6.014804121e-05f, -6.013549797e-05f, -6.012285189e-05f, -6.011010299e-05f, -6.009725133e-05f, -6.008429691e-05f, -6.007123978e-05f,
--6.005807998e-05f, -6.004481752e-05f, -6.003145245e-05f, -6.001798480e-05f, -6.000441459e-05f, -5.999074187e-05f, -5.997696667e-05f, -5.996308902e-05f, -5.994910895e-05f, -5.993502650e-05f,
--5.992084170e-05f, -5.990655459e-05f, -5.989216520e-05f, -5.987767357e-05f, -5.986307973e-05f, -5.984838371e-05f, -5.983358555e-05f, -5.981868529e-05f, -5.980368296e-05f, -5.978857859e-05f,
--5.977337223e-05f, -5.975806391e-05f, -5.974265366e-05f, -5.972714152e-05f, -5.971152753e-05f, -5.969581173e-05f, -5.967999414e-05f, -5.966407482e-05f, -5.964805379e-05f, -5.963193109e-05f,
--5.961570676e-05f, -5.959938084e-05f, -5.958295337e-05f, -5.956642438e-05f, -5.954979391e-05f, -5.953306201e-05f, -5.951622870e-05f, -5.949929403e-05f, -5.948225804e-05f, -5.946512076e-05f,
--5.944788224e-05f, -5.943054252e-05f, -5.941310162e-05f, -5.939555961e-05f, -5.937791650e-05f, -5.936017235e-05f, -5.934232720e-05f, -5.932438108e-05f, -5.930633403e-05f, -5.928818610e-05f,
--5.926993733e-05f, -5.925158776e-05f, -5.923313743e-05f, -5.921458638e-05f, -5.919593465e-05f, -5.917718229e-05f, -5.915832933e-05f, -5.913937582e-05f, -5.912032180e-05f, -5.910116732e-05f,
--5.908191241e-05f, -5.906255713e-05f, -5.904310150e-05f, -5.902354558e-05f, -5.900388941e-05f, -5.898413304e-05f, -5.896427649e-05f, -5.894431983e-05f, -5.892426310e-05f, -5.890410633e-05f,
--5.888384957e-05f, -5.886349287e-05f, -5.884303627e-05f, -5.882247982e-05f, -5.880182356e-05f, -5.878106754e-05f, -5.876021180e-05f, -5.873925639e-05f, -5.871820135e-05f, -5.869704673e-05f,
--5.867579258e-05f, -5.865443894e-05f, -5.863298585e-05f, -5.861143338e-05f, -5.858978155e-05f, -5.856803042e-05f, -5.854618004e-05f, -5.852423045e-05f, -5.850218170e-05f, -5.848003384e-05f,
--5.845778691e-05f, -5.843544097e-05f, -5.841299606e-05f, -5.839045222e-05f, -5.836780952e-05f, -5.834506799e-05f, -5.832222769e-05f, -5.829928866e-05f, -5.827625096e-05f, -5.825311463e-05f,
--5.822987972e-05f, -5.820654628e-05f, -5.818311436e-05f, -5.815958401e-05f, -5.813595529e-05f, -5.811222823e-05f, -5.808840290e-05f, -5.806447934e-05f, -5.804045761e-05f, -5.801633775e-05f,
--5.799211981e-05f, -5.796780385e-05f, -5.794338991e-05f, -5.791887806e-05f, -5.789426834e-05f, -5.786956080e-05f, -5.784475549e-05f, -5.781985247e-05f, -5.779485179e-05f, -5.776975351e-05f,
--5.774455766e-05f, -5.771926432e-05f, -5.769387352e-05f, -5.766838533e-05f, -5.764279980e-05f, -5.761711698e-05f, -5.759133692e-05f, -5.756545968e-05f, -5.753948531e-05f, -5.751341387e-05f,
--5.748724541e-05f, -5.746097998e-05f, -5.743461764e-05f, -5.740815845e-05f, -5.738160246e-05f, -5.735494972e-05f, -5.732820029e-05f, -5.730135423e-05f, -5.727441159e-05f, -5.724737243e-05f,
--5.722023680e-05f, -5.719300475e-05f, -5.716567636e-05f, -5.713825166e-05f, -5.711073073e-05f, -5.708311361e-05f, -5.705540036e-05f, -5.702759104e-05f, -5.699968570e-05f, -5.697168441e-05f,
--5.694358722e-05f, -5.691539419e-05f, -5.688710538e-05f, -5.685872084e-05f, -5.683024064e-05f, -5.680166483e-05f, -5.677299346e-05f, -5.674422661e-05f, -5.671536432e-05f, -5.668640666e-05f,
--5.665735369e-05f, -5.662820546e-05f, -5.659896204e-05f, -5.656962348e-05f, -5.654018984e-05f, -5.651066119e-05f, -5.648103759e-05f, -5.645131908e-05f, -5.642150574e-05f, -5.639159763e-05f,
--5.636159481e-05f, -5.633149733e-05f, -5.630130526e-05f, -5.627101866e-05f, -5.624063759e-05f, -5.621016211e-05f, -5.617959229e-05f, -5.614892818e-05f, -5.611816985e-05f, -5.608731736e-05f,
--5.605637077e-05f, -5.602533015e-05f, -5.599419556e-05f, -5.596296705e-05f, -5.593164470e-05f, -5.590022857e-05f, -5.586871872e-05f, -5.583711521e-05f, -5.580541810e-05f, -5.577362747e-05f,
--5.574174337e-05f, -5.570976587e-05f, -5.567769504e-05f, -5.564553093e-05f, -5.561327361e-05f, -5.558092315e-05f, -5.554847960e-05f, -5.551594305e-05f, -5.548331355e-05f, -5.545059116e-05f,
--5.541777595e-05f, -5.538486800e-05f, -5.535186735e-05f, -5.531877409e-05f, -5.528558827e-05f, -5.525230996e-05f, -5.521893923e-05f, -5.518547615e-05f, -5.515192077e-05f, -5.511827318e-05f,
--5.508453343e-05f, -5.505070159e-05f, -5.501677773e-05f, -5.498276192e-05f, -5.494865422e-05f, -5.491445470e-05f, -5.488016344e-05f, -5.484578049e-05f, -5.481130593e-05f, -5.477673982e-05f,
--5.474208224e-05f, -5.470733325e-05f, -5.467249292e-05f, -5.463756132e-05f, -5.460253852e-05f, -5.456742458e-05f, -5.453221959e-05f, -5.449692360e-05f, -5.446153669e-05f, -5.442605892e-05f,
--5.439049037e-05f, -5.435483111e-05f, -5.431908121e-05f, -5.428324073e-05f, -5.424730975e-05f, -5.421128834e-05f, -5.417517658e-05f, -5.413897452e-05f, -5.410268224e-05f, -5.406629982e-05f,
--5.402982733e-05f, -5.399326483e-05f, -5.395661240e-05f, -5.391987011e-05f, -5.388303803e-05f, -5.384611624e-05f, -5.380910480e-05f, -5.377200380e-05f, -5.373481330e-05f, -5.369753338e-05f,
--5.366016410e-05f, -5.362270554e-05f, -5.358515779e-05f, -5.354752089e-05f, -5.350979495e-05f, -5.347198001e-05f, -5.343407617e-05f, -5.339608349e-05f, -5.335800205e-05f, -5.331983193e-05f,
--5.328157319e-05f, -5.324322591e-05f, -5.320479016e-05f, -5.316626603e-05f, -5.312765359e-05f, -5.308895290e-05f, -5.305016406e-05f, -5.301128712e-05f, -5.297232218e-05f, -5.293326930e-05f,
--5.289412855e-05f, -5.285490003e-05f, -5.281558379e-05f, -5.277617993e-05f, -5.273668851e-05f, -5.269710961e-05f, -5.265744331e-05f, -5.261768968e-05f, -5.257784881e-05f, -5.253792077e-05f,
--5.249790563e-05f, -5.245780348e-05f, -5.241761439e-05f, -5.237733845e-05f, -5.233697572e-05f, -5.229652628e-05f, -5.225599022e-05f, -5.221536762e-05f, -5.217465854e-05f, -5.213386308e-05f,
--5.209298130e-05f, -5.205201329e-05f, -5.201095913e-05f, -5.196981890e-05f, -5.192859267e-05f, -5.188728052e-05f, -5.184588254e-05f, -5.180439881e-05f, -5.176282940e-05f, -5.172117439e-05f,
--5.167943387e-05f, -5.163760791e-05f, -5.159569660e-05f, -5.155370002e-05f, -5.151161824e-05f, -5.146945135e-05f, -5.142719943e-05f, -5.138486256e-05f, -5.134244082e-05f, -5.129993429e-05f,
--5.125734306e-05f, -5.121466721e-05f, -5.117190681e-05f, -5.112906195e-05f, -5.108613272e-05f, -5.104311919e-05f, -5.100002145e-05f, -5.095683958e-05f, -5.091357366e-05f, -5.087022378e-05f,
--5.082679001e-05f, -5.078327245e-05f, -5.073967117e-05f, -5.069598626e-05f, -5.065221780e-05f, -5.060836588e-05f, -5.056443058e-05f, -5.052041198e-05f, -5.047631016e-05f, -5.043212522e-05f,
--5.038785724e-05f, -5.034350629e-05f, -5.029907248e-05f, -5.025455587e-05f, -5.020995655e-05f, -5.016527462e-05f, -5.012051015e-05f, -5.007566323e-05f, -5.003073395e-05f, -4.998572239e-05f,
--4.994062863e-05f, -4.989545277e-05f, -4.985019489e-05f, -4.980485507e-05f, -4.975943340e-05f, -4.971392998e-05f, -4.966834487e-05f, -4.962267818e-05f, -4.957692998e-05f, -4.953110037e-05f,
--4.948518943e-05f, -4.943919725e-05f, -4.939312392e-05f, -4.934696952e-05f, -4.930073414e-05f, -4.925441787e-05f, -4.920802080e-05f, -4.916154301e-05f, -4.911498460e-05f, -4.906834564e-05f,
--4.902162624e-05f, -4.897482647e-05f, -4.892794643e-05f, -4.888098620e-05f, -4.883394588e-05f, -4.878682556e-05f, -4.873962531e-05f, -4.869234524e-05f, -4.864498543e-05f, -4.859754596e-05f,
--4.855002694e-05f, -4.850242845e-05f, -4.845475058e-05f, -4.840699342e-05f, -4.835915706e-05f, -4.831124159e-05f, -4.826324710e-05f, -4.821517369e-05f, -4.816702143e-05f, -4.811879043e-05f,
--4.807048077e-05f, -4.802209255e-05f, -4.797362586e-05f, -4.792508078e-05f, -4.787645741e-05f, -4.782775584e-05f, -4.777897617e-05f, -4.773011848e-05f, -4.768118286e-05f, -4.763216942e-05f,
--4.758307823e-05f, -4.753390940e-05f, -4.748466301e-05f, -4.743533917e-05f, -4.738593795e-05f, -4.733645945e-05f, -4.728690378e-05f, -4.723727101e-05f, -4.718756125e-05f, -4.713777458e-05f,
--4.708791110e-05f, -4.703797091e-05f, -4.698795409e-05f, -4.693786074e-05f, -4.688769096e-05f, -4.683744484e-05f, -4.678712247e-05f, -4.673672395e-05f, -4.668624937e-05f, -4.663569883e-05f,
--4.658507242e-05f, -4.653437023e-05f, -4.648359237e-05f, -4.643273892e-05f, -4.638180998e-05f, -4.633080565e-05f, -4.627972603e-05f, -4.622857120e-05f, -4.617734126e-05f, -4.612603631e-05f,
--4.607465645e-05f, -4.602320177e-05f, -4.597167237e-05f, -4.592006834e-05f, -4.586838978e-05f, -4.581663679e-05f, -4.576480946e-05f, -4.571290789e-05f, -4.566093218e-05f, -4.560888242e-05f,
--4.555675871e-05f, -4.550456115e-05f, -4.545228984e-05f, -4.539994487e-05f, -4.534752634e-05f, -4.529503435e-05f, -4.524246899e-05f, -4.518983037e-05f, -4.513711858e-05f, -4.508433372e-05f,
--4.503147589e-05f, -4.497854519e-05f, -4.492554171e-05f, -4.487246556e-05f, -4.481931683e-05f, -4.476609562e-05f, -4.471280203e-05f, -4.465943617e-05f, -4.460599812e-05f, -4.455248799e-05f,
--4.449890588e-05f, -4.444525189e-05f, -4.439152611e-05f, -4.433772865e-05f, -4.428385961e-05f, -4.422991909e-05f, -4.417590718e-05f, -4.412182399e-05f, -4.406766962e-05f, -4.401344417e-05f,
--4.395914773e-05f, -4.390478042e-05f, -4.385034233e-05f, -4.379583355e-05f, -4.374125420e-05f, -4.368660438e-05f, -4.363188418e-05f, -4.357709370e-05f, -4.352223306e-05f, -4.346730234e-05f,
--4.341230166e-05f, -4.335723110e-05f, -4.330209079e-05f, -4.324688081e-05f, -4.319160127e-05f, -4.313625227e-05f, -4.308083391e-05f, -4.302534631e-05f, -4.296978955e-05f, -4.291416374e-05f,
--4.285846899e-05f, -4.280270539e-05f, -4.274687306e-05f, -4.269097209e-05f, -4.263500258e-05f, -4.257896465e-05f, -4.252285839e-05f, -4.246668391e-05f, -4.241044131e-05f, -4.235413070e-05f,
--4.229775217e-05f, -4.224130584e-05f, -4.218479181e-05f, -4.212821017e-05f, -4.207156105e-05f, -4.201484453e-05f, -4.195806073e-05f, -4.190120974e-05f, -4.184429168e-05f, -4.178730665e-05f,
--4.173025476e-05f, -4.167313610e-05f, -4.161595079e-05f, -4.155869893e-05f, -4.150138062e-05f, -4.144399598e-05f, -4.138654510e-05f, -4.132902809e-05f, -4.127144506e-05f, -4.121379612e-05f,
--4.115608136e-05f, -4.109830090e-05f, -4.104045485e-05f, -4.098254330e-05f, -4.092456637e-05f, -4.086652415e-05f, -4.080841677e-05f, -4.075024432e-05f, -4.069200692e-05f, -4.063370466e-05f,
--4.057533766e-05f, -4.051690602e-05f, -4.045840985e-05f, -4.039984926e-05f, -4.034122436e-05f, -4.028253525e-05f, -4.022378204e-05f, -4.016496483e-05f, -4.010608375e-05f, -4.004713889e-05f,
--3.998813036e-05f, -3.992905827e-05f, -3.986992273e-05f, -3.981072384e-05f, -3.975146172e-05f, -3.969213648e-05f, -3.963274822e-05f, -3.957329705e-05f, -3.951378308e-05f, -3.945420642e-05f,
--3.939456718e-05f, -3.933486547e-05f, -3.927510139e-05f, -3.921527506e-05f, -3.915538659e-05f, -3.909543608e-05f, -3.903542365e-05f, -3.897534940e-05f, -3.891521345e-05f, -3.885501590e-05f,
--3.879475686e-05f, -3.873443645e-05f, -3.867405478e-05f, -3.861361195e-05f, -3.855310808e-05f, -3.849254327e-05f, -3.843191764e-05f, -3.837123130e-05f, -3.831048435e-05f, -3.824967692e-05f,
--3.818880910e-05f, -3.812788102e-05f, -3.806689278e-05f, -3.800584449e-05f, -3.794473627e-05f, -3.788356822e-05f, -3.782234047e-05f, -3.776105311e-05f, -3.769970626e-05f, -3.763830004e-05f,
--3.757683456e-05f, -3.751530992e-05f, -3.745372624e-05f, -3.739208363e-05f, -3.733038221e-05f, -3.726862208e-05f, -3.720680336e-05f, -3.714492616e-05f, -3.708299060e-05f, -3.702099678e-05f,
--3.695894483e-05f, -3.689683484e-05f, -3.683466694e-05f, -3.677244124e-05f, -3.671015785e-05f, -3.664781689e-05f, -3.658541847e-05f, -3.652296270e-05f, -3.646044969e-05f, -3.639787956e-05f,
--3.633525243e-05f, -3.627256840e-05f, -3.620982759e-05f, -3.614703012e-05f, -3.608417609e-05f, -3.602126563e-05f, -3.595829885e-05f, -3.589527585e-05f, -3.583219677e-05f, -3.576906170e-05f,
--3.570587077e-05f, -3.564262409e-05f, -3.557932177e-05f, -3.551596393e-05f, -3.545255069e-05f, -3.538908215e-05f, -3.532555844e-05f, -3.526197967e-05f, -3.519834595e-05f, -3.513465740e-05f,
--3.507091414e-05f, -3.500711628e-05f, -3.494326394e-05f, -3.487935723e-05f, -3.481539627e-05f, -3.475138117e-05f, -3.468731205e-05f, -3.462318903e-05f, -3.455901222e-05f, -3.449478173e-05f,
--3.443049770e-05f, -3.436616022e-05f, -3.430176942e-05f, -3.423732541e-05f, -3.417282832e-05f, -3.410827825e-05f, -3.404367533e-05f, -3.397901966e-05f, -3.391431138e-05f, -3.384955059e-05f,
--3.378473741e-05f, -3.371987195e-05f, -3.365495435e-05f, -3.358998471e-05f, -3.352496315e-05f, -3.345988979e-05f, -3.339476474e-05f, -3.332958813e-05f, -3.326436007e-05f, -3.319908067e-05f,
--3.313375007e-05f, -3.306836837e-05f, -3.300293569e-05f, -3.293745215e-05f, -3.287191787e-05f, -3.280633297e-05f, -3.274069757e-05f, -3.267501177e-05f, -3.260927571e-05f, -3.254348951e-05f,
--3.247765327e-05f, -3.241176712e-05f, -3.234583118e-05f, -3.227984556e-05f, -3.221381039e-05f, -3.214772578e-05f, -3.208159186e-05f, -3.201540873e-05f, -3.194917653e-05f, -3.188289537e-05f,
--3.181656537e-05f, -3.175018665e-05f, -3.168375933e-05f, -3.161728352e-05f, -3.155075936e-05f, -3.148418695e-05f, -3.141756642e-05f, -3.135089789e-05f, -3.128418148e-05f, -3.121741730e-05f,
--3.115060548e-05f, -3.108374614e-05f, -3.101683940e-05f, -3.094988538e-05f, -3.088288419e-05f, -3.081583597e-05f, -3.074874082e-05f, -3.068159888e-05f, -3.061441025e-05f, -3.054717507e-05f,
--3.047989345e-05f, -3.041256551e-05f, -3.034519138e-05f, -3.027777118e-05f, -3.021030502e-05f, -3.014279302e-05f, -3.007523532e-05f, -3.000763203e-05f, -2.993998326e-05f, -2.987228915e-05f,
--2.980454982e-05f, -2.973676538e-05f, -2.966893596e-05f, -2.960106168e-05f, -2.953314265e-05f, -2.946517901e-05f, -2.939717088e-05f, -2.932911837e-05f, -2.926102161e-05f, -2.919288072e-05f,
--2.912469583e-05f, -2.905646704e-05f, -2.898819450e-05f, -2.891987831e-05f, -2.885151861e-05f, -2.878311551e-05f, -2.871466914e-05f, -2.864617962e-05f, -2.857764707e-05f, -2.850907161e-05f,
--2.844045337e-05f, -2.837179247e-05f, -2.830308904e-05f, -2.823434319e-05f, -2.816555505e-05f, -2.809672474e-05f, -2.802785239e-05f, -2.795893812e-05f, -2.788998205e-05f, -2.782098430e-05f,
--2.775194500e-05f, -2.768286428e-05f, -2.761374225e-05f, -2.754457903e-05f, -2.747537477e-05f, -2.740612956e-05f, -2.733684355e-05f, -2.726751685e-05f, -2.719814959e-05f, -2.712874189e-05f,
--2.705929388e-05f, -2.698980568e-05f, -2.692027741e-05f, -2.685070920e-05f, -2.678110117e-05f, -2.671145344e-05f, -2.664176615e-05f, -2.657203941e-05f, -2.650227336e-05f, -2.643246810e-05f,
--2.636262378e-05f, -2.629274050e-05f, -2.622281841e-05f, -2.615285762e-05f, -2.608285825e-05f, -2.601282044e-05f, -2.594274430e-05f, -2.587262997e-05f, -2.580247756e-05f, -2.573228721e-05f,
--2.566205903e-05f, -2.559179315e-05f, -2.552148970e-05f, -2.545114881e-05f, -2.538077059e-05f, -2.531035517e-05f, -2.523990269e-05f, -2.516941326e-05f, -2.509888700e-05f, -2.502832406e-05f,
--2.495772454e-05f, -2.488708858e-05f, -2.481641630e-05f, -2.474570783e-05f, -2.467496329e-05f, -2.460418282e-05f, -2.453336653e-05f, -2.446251455e-05f, -2.439162701e-05f, -2.432070403e-05f,
--2.424974574e-05f, -2.417875227e-05f, -2.410772374e-05f, -2.403666027e-05f, -2.396556201e-05f, -2.389442906e-05f, -2.382326156e-05f, -2.375205964e-05f, -2.368082341e-05f, -2.360955301e-05f,
--2.353824857e-05f, -2.346691021e-05f, -2.339553805e-05f, -2.332413223e-05f, -2.325269287e-05f, -2.318122009e-05f, -2.310971403e-05f, -2.303817481e-05f, -2.296660256e-05f, -2.289499740e-05f,
--2.282335947e-05f, -2.275168888e-05f, -2.267998577e-05f, -2.260825027e-05f, -2.253648249e-05f, -2.246468258e-05f, -2.239285065e-05f, -2.232098683e-05f, -2.224909125e-05f, -2.217716404e-05f,
--2.210520533e-05f, -2.203321524e-05f, -2.196119389e-05f, -2.188914143e-05f, -2.181705797e-05f, -2.174494365e-05f, -2.167279858e-05f, -2.160062291e-05f, -2.152841675e-05f, -2.145618023e-05f,
--2.138391349e-05f, -2.131161665e-05f, -2.123928984e-05f, -2.116693318e-05f, -2.109454681e-05f, -2.102213085e-05f, -2.094968543e-05f, -2.087721068e-05f, -2.080470673e-05f, -2.073217370e-05f,
--2.065961173e-05f, -2.058702094e-05f, -2.051440146e-05f, -2.044175341e-05f, -2.036907694e-05f, -2.029637216e-05f, -2.022363920e-05f, -2.015087820e-05f, -2.007808928e-05f, -2.000527257e-05f,
--1.993242820e-05f, -1.985955629e-05f, -1.978665698e-05f, -1.971373040e-05f, -1.964077667e-05f, -1.956779592e-05f, -1.949478829e-05f, -1.942175389e-05f, -1.934869287e-05f, -1.927560534e-05f,
--1.920249144e-05f, -1.912935130e-05f, -1.905618504e-05f, -1.898299279e-05f, -1.890977470e-05f, -1.883653087e-05f, -1.876326144e-05f, -1.868996655e-05f, -1.861664632e-05f, -1.854330087e-05f,
--1.846993035e-05f, -1.839653488e-05f, -1.832311458e-05f, -1.824966959e-05f, -1.817620004e-05f, -1.810270605e-05f, -1.802918776e-05f, -1.795564530e-05f, -1.788207879e-05f, -1.780848836e-05f,
--1.773487415e-05f, -1.766123629e-05f, -1.758757490e-05f, -1.751389011e-05f, -1.744018205e-05f, -1.736645086e-05f, -1.729269666e-05f, -1.721891958e-05f, -1.714511976e-05f, -1.707129731e-05f,
--1.699745238e-05f, -1.692358510e-05f, -1.684969558e-05f, -1.677578397e-05f, -1.670185038e-05f, -1.662789497e-05f, -1.655391784e-05f, -1.647991913e-05f, -1.640589898e-05f, -1.633185751e-05f,
--1.625779486e-05f, -1.618371115e-05f, -1.610960651e-05f, -1.603548107e-05f, -1.596133497e-05f, -1.588716833e-05f, -1.581298129e-05f, -1.573877397e-05f, -1.566454650e-05f, -1.559029902e-05f,
--1.551603166e-05f, -1.544174455e-05f, -1.536743781e-05f, -1.529311158e-05f, -1.521876598e-05f, -1.514440116e-05f, -1.507001723e-05f, -1.499561433e-05f, -1.492119259e-05f, -1.484675215e-05f,
--1.477229312e-05f, -1.469781564e-05f, -1.462331985e-05f, -1.454880587e-05f, -1.447427384e-05f, -1.439972388e-05f, -1.432515612e-05f, -1.425057070e-05f, -1.417596775e-05f, -1.410134739e-05f,
--1.402670977e-05f, -1.395205500e-05f, -1.387738322e-05f, -1.380269457e-05f, -1.372798916e-05f, -1.365326714e-05f, -1.357852863e-05f, -1.350377376e-05f, -1.342900267e-05f, -1.335421549e-05f,
--1.327941234e-05f, -1.320459337e-05f, -1.312975869e-05f, -1.305490844e-05f, -1.298004275e-05f, -1.290516176e-05f, -1.283026559e-05f, -1.275535437e-05f, -1.268042824e-05f, -1.260548732e-05f,
--1.253053176e-05f, -1.245556167e-05f, -1.238057719e-05f, -1.230557845e-05f, -1.223056559e-05f, -1.215553873e-05f, -1.208049800e-05f, -1.200544354e-05f, -1.193037547e-05f, -1.185529394e-05f,
--1.178019906e-05f, -1.170509098e-05f, -1.162996981e-05f, -1.155483570e-05f, -1.147968877e-05f, -1.140452916e-05f, -1.132935700e-05f, -1.125417241e-05f, -1.117897554e-05f, -1.110376650e-05f,
--1.102854544e-05f, -1.095331248e-05f, -1.087806776e-05f, -1.080281140e-05f, -1.072754354e-05f, -1.065226431e-05f, -1.057697383e-05f, -1.050167226e-05f, -1.042635970e-05f, -1.035103630e-05f,
--1.027570218e-05f, -1.020035748e-05f, -1.012500233e-05f, -1.004963686e-05f, -9.974261201e-06f, -9.898875485e-06f, -9.823479843e-06f, -9.748074407e-06f, -9.672659308e-06f, -9.597234678e-06f,
--9.521800648e-06f, -9.446357349e-06f, -9.370904914e-06f, -9.295443472e-06f, -9.219973157e-06f, -9.144494098e-06f, -9.069006429e-06f, -8.993510280e-06f, -8.918005782e-06f, -8.842493068e-06f,
--8.766972268e-06f, -8.691443515e-06f, -8.615906939e-06f, -8.540362672e-06f, -8.464810845e-06f, -8.389251591e-06f, -8.313685040e-06f, -8.238111324e-06f, -8.162530575e-06f, -8.086942923e-06f,
--8.011348501e-06f, -7.935747439e-06f, -7.860139870e-06f, -7.784525925e-06f, -7.708905735e-06f, -7.633279432e-06f, -7.557647147e-06f, -7.482009011e-06f, -7.406365157e-06f, -7.330715715e-06f,
--7.255060817e-06f, -7.179400595e-06f, -7.103735180e-06f, -7.028064703e-06f, -6.952389296e-06f, -6.876709090e-06f, -6.801024217e-06f, -6.725334808e-06f, -6.649640994e-06f, -6.573942907e-06f,
--6.498240679e-06f, -6.422534441e-06f, -6.346824323e-06f, -6.271110459e-06f, -6.195392978e-06f, -6.119672013e-06f, -6.043947694e-06f, -5.968220154e-06f, -5.892489523e-06f, -5.816755932e-06f,
--5.741019514e-06f, -5.665280400e-06f, -5.589538720e-06f, -5.513794607e-06f, -5.438048191e-06f, -5.362299603e-06f, -5.286548976e-06f, -5.210796441e-06f, -5.135042128e-06f, -5.059286169e-06f,
--4.983528695e-06f, -4.907769837e-06f, -4.832009728e-06f, -4.756248497e-06f, -4.680486276e-06f, -4.604723197e-06f, -4.528959391e-06f, -4.453194988e-06f, -4.377430120e-06f, -4.301664918e-06f,
--4.225899514e-06f, -4.150134037e-06f, -4.074368621e-06f, -3.998603395e-06f, -3.922838491e-06f, -3.847074039e-06f, -3.771310172e-06f, -3.695547020e-06f, -3.619784713e-06f, -3.544023384e-06f,
--3.468263163e-06f, -3.392504181e-06f, -3.316746569e-06f, -3.240990458e-06f, -3.165235979e-06f, -3.089483263e-06f, -3.013732441e-06f, -2.937983644e-06f, -2.862237002e-06f, -2.786492648e-06f,
--2.710750710e-06f, -2.635011321e-06f, -2.559274611e-06f, -2.483540712e-06f, -2.407809753e-06f, -2.332081865e-06f, -2.256357180e-06f, -2.180635828e-06f, -2.104917940e-06f, -2.029203646e-06f,
--1.953493077e-06f, -1.877786365e-06f, -1.802083638e-06f, -1.726385029e-06f, -1.650690668e-06f, -1.575000685e-06f, -1.499315211e-06f, -1.423634377e-06f, -1.347958313e-06f, -1.272287149e-06f,
--1.196621016e-06f, -1.120960045e-06f, -1.045304365e-06f, -9.696541082e-07f, -8.940094040e-07f, -8.183703829e-07f, -7.427371754e-07f, -6.671099117e-07f, -5.914887222e-07f, -5.158737372e-07f,
--4.402650869e-07f, -3.646629016e-07f, -2.890673115e-07f, -2.134784469e-07f, -1.378964377e-07f, -6.232141437e-08f, 1.324649315e-08f, 8.880715472e-08f, 1.643604403e-07f, 2.399062197e-07f,
-3.154443630e-07f, 3.909747403e-07f, 4.664972214e-07f, 5.420116766e-07f, 6.175179758e-07f, 6.930159891e-07f, 7.685055867e-07f, 8.439866388e-07f, 9.194590155e-07f, 9.949225871e-07f,
-1.070377224e-06f, 1.145822796e-06f, 1.221259173e-06f, 1.296686227e-06f, 1.372103827e-06f, 1.447511844e-06f, 1.522910148e-06f, 1.598298609e-06f, 1.673677098e-06f, 1.749045486e-06f,
-1.824403643e-06f, 1.899751440e-06f, 1.975088747e-06f, 2.050415435e-06f, 2.125731374e-06f, 2.201036435e-06f, 2.276330490e-06f, 2.351613408e-06f, 2.426885060e-06f, 2.502145318e-06f,
-2.577394051e-06f, 2.652631132e-06f, 2.727856430e-06f, 2.803069818e-06f, 2.878271165e-06f, 2.953460342e-06f, 3.028637222e-06f, 3.103801674e-06f, 3.178953571e-06f, 3.254092782e-06f,
-3.329219180e-06f, 3.404332635e-06f, 3.479433019e-06f, 3.554520203e-06f, 3.629594058e-06f, 3.704654456e-06f, 3.779701268e-06f, 3.854734366e-06f, 3.929753620e-06f, 4.004758903e-06f,
-4.079750086e-06f, 4.154727040e-06f, 4.229689638e-06f, 4.304637750e-06f, 4.379571249e-06f, 4.454490006e-06f, 4.529393892e-06f, 4.604282781e-06f, 4.679156543e-06f, 4.754015050e-06f,
-4.828858175e-06f, 4.903685789e-06f, 4.978497764e-06f, 5.053293972e-06f, 5.128074286e-06f, 5.202838577e-06f, 5.277586717e-06f, 5.352318580e-06f, 5.427034036e-06f, 5.501732958e-06f,
-5.576415219e-06f, 5.651080691e-06f, 5.725729246e-06f, 5.800360757e-06f, 5.874975096e-06f, 5.949572136e-06f, 6.024151749e-06f, 6.098713807e-06f, 6.173258184e-06f, 6.247784753e-06f,
-6.322293385e-06f, 6.396783953e-06f, 6.471256331e-06f, 6.545710392e-06f, 6.620146007e-06f, 6.694563051e-06f, 6.768961396e-06f, 6.843340915e-06f, 6.917701481e-06f, 6.992042968e-06f,
-7.066365248e-06f, 7.140668194e-06f, 7.214951681e-06f, 7.289215581e-06f, 7.363459768e-06f, 7.437684114e-06f, 7.511888494e-06f, 7.586072781e-06f, 7.660236849e-06f, 7.734380571e-06f,
-7.808503820e-06f, 7.882606471e-06f, 7.956688396e-06f, 8.030749471e-06f, 8.104789568e-06f, 8.178808562e-06f, 8.252806327e-06f, 8.326782735e-06f, 8.400737663e-06f, 8.474670982e-06f,
-8.548582569e-06f, 8.622472296e-06f, 8.696340038e-06f, 8.770185670e-06f, 8.844009065e-06f, 8.917810098e-06f, 8.991588644e-06f, 9.065344576e-06f, 9.139077770e-06f, 9.212788099e-06f,
-9.286475439e-06f, 9.360139665e-06f, 9.433780650e-06f, 9.507398270e-06f, 9.580992400e-06f, 9.654562914e-06f, 9.728109687e-06f, 9.801632595e-06f, 9.875131512e-06f, 9.948606314e-06f,
-1.002205688e-05f, 1.009548307e-05f, 1.016888478e-05f, 1.024226187e-05f, 1.031561422e-05f, 1.038894171e-05f, 1.046224421e-05f, 1.053552160e-05f, 1.060877375e-05f, 1.068200054e-05f,
-1.075520184e-05f, 1.082837753e-05f, 1.090152749e-05f, 1.097465159e-05f, 1.104774971e-05f, 1.112082172e-05f, 1.119386750e-05f, 1.126688692e-05f, 1.133987987e-05f, 1.141284622e-05f,
-1.148578584e-05f, 1.155869861e-05f, 1.163158440e-05f, 1.170444311e-05f, 1.177727459e-05f, 1.185007872e-05f, 1.192285539e-05f, 1.199560447e-05f, 1.206832584e-05f, 1.214101937e-05f,
-1.221368494e-05f, 1.228632242e-05f, 1.235893170e-05f, 1.243151265e-05f, 1.250406515e-05f, 1.257658908e-05f, 1.264908430e-05f, 1.272155071e-05f, 1.279398818e-05f, 1.286639657e-05f,
-1.293877578e-05f, 1.301112568e-05f, 1.308344615e-05f, 1.315573706e-05f, 1.322799830e-05f, 1.330022973e-05f, 1.337243125e-05f, 1.344460272e-05f, 1.351674402e-05f, 1.358885503e-05f,
-1.366093564e-05f, 1.373298571e-05f, 1.380500513e-05f, 1.387699378e-05f, 1.394895152e-05f, 1.402087825e-05f, 1.409277384e-05f, 1.416463817e-05f, 1.423647112e-05f, 1.430827256e-05f,
-1.438004237e-05f, 1.445178044e-05f, 1.452348665e-05f, 1.459516086e-05f, 1.466680296e-05f, 1.473841284e-05f, 1.480999036e-05f, 1.488153541e-05f, 1.495304786e-05f, 1.502452761e-05f,
-1.509597452e-05f, 1.516738847e-05f, 1.523876935e-05f, 1.531011704e-05f, 1.538143140e-05f, 1.545271234e-05f, 1.552395971e-05f, 1.559517341e-05f, 1.566635332e-05f, 1.573749930e-05f,
-1.580861126e-05f, 1.587968905e-05f, 1.595073257e-05f, 1.602174170e-05f, 1.609271631e-05f, 1.616365628e-05f, 1.623456150e-05f, 1.630543185e-05f, 1.637626721e-05f, 1.644706745e-05f,
-1.651783247e-05f, 1.658856213e-05f, 1.665925632e-05f, 1.672991493e-05f, 1.680053783e-05f, 1.687112490e-05f, 1.694167603e-05f, 1.701219110e-05f, 1.708266998e-05f, 1.715311256e-05f,
-1.722351873e-05f, 1.729388836e-05f, 1.736422133e-05f, 1.743451753e-05f, 1.750477683e-05f, 1.757499913e-05f, 1.764518430e-05f, 1.771533223e-05f, 1.778544279e-05f, 1.785551587e-05f,
-1.792555135e-05f, 1.799554911e-05f, 1.806550904e-05f, 1.813543102e-05f, 1.820531493e-05f, 1.827516065e-05f, 1.834496807e-05f, 1.841473707e-05f, 1.848446754e-05f, 1.855415934e-05f,
-1.862381238e-05f, 1.869342653e-05f, 1.876300167e-05f, 1.883253769e-05f, 1.890203447e-05f, 1.897149190e-05f, 1.904090986e-05f, 1.911028823e-05f, 1.917962689e-05f, 1.924892573e-05f,
-1.931818464e-05f, 1.938740350e-05f, 1.945658219e-05f, 1.952572059e-05f, 1.959481859e-05f, 1.966387608e-05f, 1.973289294e-05f, 1.980186904e-05f, 1.987080429e-05f, 1.993969856e-05f,
-2.000855174e-05f, 2.007736371e-05f, 2.014613435e-05f, 2.021486356e-05f, 2.028355121e-05f, 2.035219719e-05f, 2.042080139e-05f, 2.048936370e-05f, 2.055788399e-05f, 2.062636215e-05f,
-2.069479807e-05f, 2.076319164e-05f, 2.083154274e-05f, 2.089985125e-05f, 2.096811706e-05f, 2.103634006e-05f, 2.110452013e-05f, 2.117265717e-05f, 2.124075104e-05f, 2.130880165e-05f,
-2.137680888e-05f, 2.144477262e-05f, 2.151269274e-05f, 2.158056914e-05f, 2.164840171e-05f, 2.171619033e-05f, 2.178393489e-05f, 2.185163527e-05f, 2.191929136e-05f, 2.198690306e-05f,
-2.205447024e-05f, 2.212199279e-05f, 2.218947061e-05f, 2.225690358e-05f, 2.232429158e-05f, 2.239163450e-05f, 2.245893224e-05f, 2.252618468e-05f, 2.259339171e-05f, 2.266055321e-05f,
-2.272766908e-05f, 2.279473920e-05f, 2.286176345e-05f, 2.292874174e-05f, 2.299567395e-05f, 2.306255996e-05f, 2.312939967e-05f, 2.319619296e-05f, 2.326293972e-05f, 2.332963984e-05f,
-2.339629322e-05f, 2.346289973e-05f, 2.352945927e-05f, 2.359597173e-05f, 2.366243700e-05f, 2.372885496e-05f, 2.379522551e-05f, 2.386154854e-05f, 2.392782393e-05f, 2.399405158e-05f,
-2.406023137e-05f, 2.412636320e-05f, 2.419244695e-05f, 2.425848252e-05f, 2.432446980e-05f, 2.439040867e-05f, 2.445629904e-05f, 2.452214078e-05f, 2.458793378e-05f, 2.465367795e-05f,
-2.471937317e-05f, 2.478501933e-05f, 2.485061632e-05f, 2.491616404e-05f, 2.498166237e-05f, 2.504711120e-05f, 2.511251044e-05f, 2.517785996e-05f, 2.524315967e-05f, 2.530840944e-05f,
-2.537360919e-05f, 2.543875879e-05f, 2.550385813e-05f, 2.556890712e-05f, 2.563390564e-05f, 2.569885359e-05f, 2.576375086e-05f, 2.582859733e-05f, 2.589339291e-05f, 2.595813748e-05f,
-2.602283094e-05f, 2.608747319e-05f, 2.615206411e-05f, 2.621660359e-05f, 2.628109154e-05f, 2.634552784e-05f, 2.640991239e-05f, 2.647424508e-05f, 2.653852580e-05f, 2.660275446e-05f,
-2.666693093e-05f, 2.673105513e-05f, 2.679512693e-05f, 2.685914624e-05f, 2.692311294e-05f, 2.698702694e-05f, 2.705088813e-05f, 2.711469640e-05f, 2.717845164e-05f, 2.724215376e-05f,
-2.730580264e-05f, 2.736939818e-05f, 2.743294028e-05f, 2.749642884e-05f, 2.755986373e-05f, 2.762324487e-05f, 2.768657215e-05f, 2.774984546e-05f, 2.781306470e-05f, 2.787622977e-05f,
-2.793934055e-05f, 2.800239695e-05f, 2.806539887e-05f, 2.812834619e-05f, 2.819123882e-05f, 2.825407664e-05f, 2.831685957e-05f, 2.837958749e-05f, 2.844226030e-05f, 2.850487790e-05f,
-2.856744019e-05f, 2.862994705e-05f, 2.869239840e-05f, 2.875479412e-05f, 2.881713411e-05f, 2.887941828e-05f, 2.894164651e-05f, 2.900381871e-05f, 2.906593478e-05f, 2.912799461e-05f,
-2.918999809e-05f, 2.925194514e-05f, 2.931383564e-05f, 2.937566950e-05f, 2.943744660e-05f, 2.949916686e-05f, 2.956083017e-05f, 2.962243643e-05f, 2.968398554e-05f, 2.974547739e-05f,
-2.980691189e-05f, 2.986828893e-05f, 2.992960842e-05f, 2.999087025e-05f, 3.005207433e-05f, 3.011322055e-05f, 3.017430881e-05f, 3.023533901e-05f, 3.029631105e-05f, 3.035722484e-05f,
-3.041808027e-05f, 3.047887724e-05f, 3.053961565e-05f, 3.060029541e-05f, 3.066091641e-05f, 3.072147856e-05f, 3.078198175e-05f, 3.084242589e-05f, 3.090281088e-05f, 3.096313661e-05f,
-3.102340300e-05f, 3.108360993e-05f, 3.114375732e-05f, 3.120384507e-05f, 3.126387307e-05f, 3.132384123e-05f, 3.138374945e-05f, 3.144359763e-05f, 3.150338568e-05f, 3.156311349e-05f,
-3.162278097e-05f, 3.168238803e-05f, 3.174193455e-05f, 3.180142046e-05f, 3.186084564e-05f, 3.192021001e-05f, 3.197951346e-05f, 3.203875591e-05f, 3.209793724e-05f, 3.215705737e-05f,
-3.221611620e-05f, 3.227511363e-05f, 3.233404957e-05f, 3.239292393e-05f, 3.245173659e-05f, 3.251048748e-05f, 3.256917648e-05f, 3.262780352e-05f, 3.268636849e-05f, 3.274487129e-05f,
-3.280331184e-05f, 3.286169003e-05f, 3.292000577e-05f, 3.297825897e-05f, 3.303644953e-05f, 3.309457735e-05f, 3.315264235e-05f, 3.321064443e-05f, 3.326858349e-05f, 3.332645944e-05f,
-3.338427218e-05f, 3.344202162e-05f, 3.349970768e-05f, 3.355733024e-05f, 3.361488922e-05f, 3.367238454e-05f, 3.372981608e-05f, 3.378718376e-05f, 3.384448749e-05f, 3.390172717e-05f,
-3.395890271e-05f, 3.401601402e-05f, 3.407306101e-05f, 3.413004357e-05f, 3.418696163e-05f, 3.424381508e-05f, 3.430060384e-05f, 3.435732782e-05f, 3.441398691e-05f, 3.447058103e-05f,
-3.452711009e-05f, 3.458357400e-05f, 3.463997266e-05f, 3.469630599e-05f, 3.475257389e-05f, 3.480877626e-05f, 3.486491303e-05f, 3.492098410e-05f, 3.497698937e-05f, 3.503292877e-05f,
-3.508880219e-05f, 3.514460955e-05f, 3.520035075e-05f, 3.525602571e-05f, 3.531163434e-05f, 3.536717654e-05f, 3.542265223e-05f, 3.547806132e-05f, 3.553340372e-05f, 3.558867933e-05f,
-3.564388808e-05f, 3.569902986e-05f, 3.575410459e-05f, 3.580911219e-05f, 3.586405256e-05f, 3.591892561e-05f, 3.597373127e-05f, 3.602846942e-05f, 3.608314000e-05f, 3.613774291e-05f,
-3.619227806e-05f, 3.624674537e-05f, 3.630114475e-05f, 3.635547610e-05f, 3.640973935e-05f, 3.646393441e-05f, 3.651806118e-05f, 3.657211958e-05f, 3.662610953e-05f, 3.668003093e-05f,
-3.673388371e-05f, 3.678766777e-05f, 3.684138302e-05f, 3.689502939e-05f, 3.694860678e-05f, 3.700211511e-05f, 3.705555429e-05f, 3.710892424e-05f, 3.716222486e-05f, 3.721545609e-05f,
-3.726861782e-05f, 3.732170998e-05f, 3.737473248e-05f, 3.742768523e-05f, 3.748056815e-05f, 3.753338116e-05f, 3.758612416e-05f, 3.763879708e-05f, 3.769139983e-05f, 3.774393233e-05f,
-3.779639449e-05f, 3.784878623e-05f, 3.790110746e-05f, 3.795335810e-05f, 3.800553807e-05f, 3.805764729e-05f, 3.810968566e-05f, 3.816165311e-05f, 3.821354955e-05f, 3.826537491e-05f,
-3.831712909e-05f, 3.836881201e-05f, 3.842042360e-05f, 3.847196377e-05f, 3.852343244e-05f, 3.857482952e-05f, 3.862615493e-05f, 3.867740860e-05f, 3.872859043e-05f, 3.877970035e-05f,
-3.883073828e-05f, 3.888170414e-05f, 3.893259783e-05f, 3.898341929e-05f, 3.903416843e-05f, 3.908484517e-05f, 3.913544944e-05f, 3.918598113e-05f, 3.923644019e-05f, 3.928682653e-05f,
-3.933714006e-05f, 3.938738072e-05f, 3.943754841e-05f, 3.948764305e-05f, 3.953766458e-05f, 3.958761291e-05f, 3.963748795e-05f, 3.968728964e-05f, 3.973701788e-05f, 3.978667261e-05f,
-3.983625374e-05f, 3.988576120e-05f, 3.993519490e-05f, 3.998455476e-05f, 4.003384072e-05f, 4.008305269e-05f, 4.013219059e-05f, 4.018125435e-05f, 4.023024388e-05f, 4.027915911e-05f,
-4.032799996e-05f, 4.037676636e-05f, 4.042545822e-05f, 4.047407548e-05f, 4.052261805e-05f, 4.057108585e-05f, 4.061947881e-05f, 4.066779686e-05f, 4.071603991e-05f, 4.076420789e-05f,
-4.081230073e-05f, 4.086031834e-05f, 4.090826066e-05f, 4.095612760e-05f, 4.100391910e-05f, 4.105163507e-05f, 4.109927543e-05f, 4.114684013e-05f, 4.119432907e-05f, 4.124174219e-05f,
-4.128907941e-05f, 4.133634065e-05f, 4.138352585e-05f, 4.143063492e-05f, 4.147766779e-05f, 4.152462439e-05f, 4.157150465e-05f, 4.161830848e-05f, 4.166503582e-05f, 4.171168660e-05f,
-4.175826074e-05f, 4.180475816e-05f, 4.185117879e-05f, 4.189752257e-05f, 4.194378941e-05f, 4.198997925e-05f, 4.203609201e-05f, 4.208212763e-05f, 4.212808601e-05f, 4.217396711e-05f,
-4.221977084e-05f, 4.226549713e-05f, 4.231114591e-05f, 4.235671711e-05f, 4.240221066e-05f, 4.244762648e-05f, 4.249296450e-05f, 4.253822467e-05f, 4.258340689e-05f, 4.262851110e-05f,
-4.267353724e-05f, 4.271848523e-05f, 4.276335500e-05f, 4.280814648e-05f, 4.285285960e-05f, 4.289749429e-05f, 4.294205049e-05f, 4.298652811e-05f, 4.303092710e-05f, 4.307524738e-05f,
-4.311948888e-05f, 4.316365154e-05f, 4.320773528e-05f, 4.325174004e-05f, 4.329566575e-05f, 4.333951234e-05f, 4.338327974e-05f, 4.342696789e-05f, 4.347057671e-05f, 4.351410614e-05f,
-4.355755611e-05f, 4.360092655e-05f, 4.364421740e-05f, 4.368742858e-05f, 4.373056004e-05f, 4.377361170e-05f, 4.381658349e-05f, 4.385947536e-05f, 4.390228723e-05f, 4.394501903e-05f,
-4.398767071e-05f, 4.403024219e-05f, 4.407273342e-05f, 4.411514431e-05f, 4.415747481e-05f, 4.419972486e-05f, 4.424189438e-05f, 4.428398331e-05f, 4.432599159e-05f, 4.436791914e-05f,
-4.440976592e-05f, 4.445153185e-05f, 4.449321686e-05f, 4.453482089e-05f, 4.457634389e-05f, 4.461778578e-05f, 4.465914650e-05f, 4.470042599e-05f, 4.474162417e-05f, 4.478274100e-05f,
-4.482377641e-05f, 4.486473033e-05f, 4.490560270e-05f, 4.494639345e-05f, 4.498710253e-05f, 4.502772987e-05f, 4.506827541e-05f, 4.510873909e-05f, 4.514912084e-05f, 4.518942061e-05f,
-4.522963832e-05f, 4.526977393e-05f, 4.530982736e-05f, 4.534979856e-05f, 4.538968746e-05f, 4.542949401e-05f, 4.546921814e-05f, 4.550885979e-05f, 4.554841891e-05f, 4.558789542e-05f,
-4.562728928e-05f, 4.566660041e-05f, 4.570582877e-05f, 4.574497428e-05f, 4.578403690e-05f, 4.582301655e-05f, 4.586191319e-05f, 4.590072675e-05f, 4.593945717e-05f, 4.597810439e-05f,
-4.601666836e-05f, 4.605514902e-05f, 4.609354630e-05f, 4.613186015e-05f, 4.617009051e-05f, 4.620823733e-05f, 4.624630054e-05f, 4.628428008e-05f, 4.632217591e-05f, 4.635998795e-05f,
-4.639771616e-05f, 4.643536048e-05f, 4.647292084e-05f, 4.651039720e-05f, 4.654778950e-05f, 4.658509767e-05f, 4.662232167e-05f, 4.665946143e-05f, 4.669651691e-05f, 4.673348803e-05f,
-4.677037476e-05f, 4.680717703e-05f, 4.684389478e-05f, 4.688052797e-05f, 4.691707654e-05f, 4.695354042e-05f, 4.698991957e-05f, 4.702621393e-05f, 4.706242345e-05f, 4.709854808e-05f,
-4.713458775e-05f, 4.717054241e-05f, 4.720641201e-05f, 4.724219650e-05f, 4.727789582e-05f, 4.731350992e-05f, 4.734903874e-05f, 4.738448224e-05f, 4.741984035e-05f, 4.745511303e-05f,
-4.749030023e-05f, 4.752540188e-05f, 4.756041794e-05f, 4.759534835e-05f, 4.763019307e-05f, 4.766495204e-05f, 4.769962520e-05f, 4.773421252e-05f, 4.776871393e-05f, 4.780312938e-05f,
-4.783745883e-05f, 4.787170222e-05f, 4.790585950e-05f, 4.793993061e-05f, 4.797391552e-05f, 4.800781417e-05f, 4.804162650e-05f, 4.807535247e-05f, 4.810899203e-05f, 4.814254513e-05f,
-4.817601172e-05f, 4.820939174e-05f, 4.824268515e-05f, 4.827589191e-05f, 4.830901195e-05f, 4.834204524e-05f, 4.837499172e-05f, 4.840785134e-05f, 4.844062406e-05f, 4.847330982e-05f,
-4.850590859e-05f, 4.853842030e-05f, 4.857084492e-05f, 4.860318240e-05f, 4.863543268e-05f, 4.866759572e-05f, 4.869967148e-05f, 4.873165990e-05f, 4.876356094e-05f, 4.879537455e-05f,
-4.882710069e-05f, 4.885873931e-05f, 4.889029036e-05f, 4.892175380e-05f, 4.895312957e-05f, 4.898441764e-05f, 4.901561796e-05f, 4.904673049e-05f, 4.907775517e-05f, 4.910869196e-05f,
-4.913954083e-05f, 4.917030171e-05f, 4.920097457e-05f, 4.923155937e-05f, 4.926205605e-05f, 4.929246458e-05f, 4.932278491e-05f, 4.935301700e-05f, 4.938316079e-05f, 4.941321626e-05f,
-4.944318335e-05f, 4.947306202e-05f, 4.950285224e-05f, 4.953255394e-05f, 4.956216710e-05f, 4.959169168e-05f, 4.962112761e-05f, 4.965047488e-05f, 4.967973342e-05f, 4.970890321e-05f,
-4.973798419e-05f, 4.976697633e-05f, 4.979587959e-05f, 4.982469392e-05f, 4.985341928e-05f, 4.988205564e-05f, 4.991060294e-05f, 4.993906116e-05f, 4.996743024e-05f, 4.999571015e-05f,
-5.002390085e-05f, 5.005200229e-05f, 5.008001445e-05f, 5.010793727e-05f, 5.013577072e-05f, 5.016351476e-05f, 5.019116934e-05f, 5.021873444e-05f, 5.024621001e-05f, 5.027359600e-05f,
-5.030089240e-05f, 5.032809914e-05f, 5.035521620e-05f, 5.038224354e-05f, 5.040918112e-05f, 5.043602890e-05f, 5.046278684e-05f, 5.048945491e-05f, 5.051603307e-05f, 5.054252127e-05f,
-5.056891949e-05f, 5.059522769e-05f, 5.062144583e-05f, 5.064757387e-05f, 5.067361178e-05f, 5.069955952e-05f, 5.072541705e-05f, 5.075118434e-05f, 5.077686135e-05f, 5.080244805e-05f,
-5.082794440e-05f, 5.085335036e-05f, 5.087866590e-05f, 5.090389099e-05f, 5.092902559e-05f, 5.095406966e-05f, 5.097902317e-05f, 5.100388609e-05f, 5.102865838e-05f, 5.105334001e-05f,
-5.107793094e-05f, 5.110243114e-05f, 5.112684058e-05f, 5.115115922e-05f, 5.117538703e-05f, 5.119952397e-05f, 5.122357002e-05f, 5.124752514e-05f, 5.127138929e-05f, 5.129516245e-05f,
-5.131884458e-05f, 5.134243565e-05f, 5.136593563e-05f, 5.138934448e-05f, 5.141266218e-05f, 5.143588869e-05f, 5.145902399e-05f, 5.148206803e-05f, 5.150502079e-05f, 5.152788224e-05f,
-5.155065235e-05f, 5.157333108e-05f, 5.159591841e-05f, 5.161841431e-05f, 5.164081874e-05f, 5.166313168e-05f, 5.168535309e-05f, 5.170748295e-05f, 5.172952122e-05f, 5.175146789e-05f,
-5.177332291e-05f, 5.179508626e-05f, 5.181675791e-05f, 5.183833783e-05f, 5.185982600e-05f, 5.188122238e-05f, 5.190252694e-05f, 5.192373967e-05f, 5.194486053e-05f, 5.196588949e-05f,
-5.198682652e-05f, 5.200767160e-05f, 5.202842471e-05f, 5.204908580e-05f, 5.206965487e-05f, 5.209013187e-05f, 5.211051679e-05f, 5.213080959e-05f, 5.215101026e-05f, 5.217111876e-05f,
-5.219113507e-05f, 5.221105916e-05f, 5.223089101e-05f, 5.225063059e-05f, 5.227027787e-05f, 5.228983284e-05f, 5.230929547e-05f, 5.232866573e-05f, 5.234794359e-05f, 5.236712904e-05f,
-5.238622204e-05f, 5.240522258e-05f, 5.242413063e-05f, 5.244294617e-05f, 5.246166917e-05f, 5.248029961e-05f, 5.249883746e-05f, 5.251728271e-05f, 5.253563532e-05f, 5.255389529e-05f,
-5.257206257e-05f, 5.259013716e-05f, 5.260811903e-05f, 5.262600816e-05f, 5.264380452e-05f, 5.266150809e-05f, 5.267911885e-05f, 5.269663679e-05f, 5.271406187e-05f, 5.273139408e-05f,
-5.274863340e-05f, 5.276577980e-05f, 5.278283327e-05f, 5.279979378e-05f, 5.281666131e-05f, 5.283343585e-05f, 5.285011737e-05f, 5.286670585e-05f, 5.288320128e-05f, 5.289960363e-05f,
-5.291591289e-05f, 5.293212903e-05f, 5.294825204e-05f, 5.296428189e-05f, 5.298021858e-05f, 5.299606207e-05f, 5.301181236e-05f, 5.302746941e-05f, 5.304303323e-05f, 5.305850378e-05f,
-5.307388105e-05f, 5.308916502e-05f, 5.310435567e-05f, 5.311945299e-05f, 5.313445696e-05f, 5.314936757e-05f, 5.316418479e-05f, 5.317890861e-05f, 5.319353901e-05f, 5.320807598e-05f,
-5.322251950e-05f, 5.323686955e-05f, 5.325112612e-05f, 5.326528919e-05f, 5.327935876e-05f, 5.329333479e-05f, 5.330721728e-05f, 5.332100621e-05f, 5.333470157e-05f, 5.334830334e-05f,
-5.336181150e-05f, 5.337522605e-05f, 5.338854697e-05f, 5.340177425e-05f, 5.341490786e-05f, 5.342794781e-05f, 5.344089406e-05f, 5.345374662e-05f, 5.346650547e-05f, 5.347917058e-05f,
-5.349174196e-05f, 5.350421959e-05f, 5.351660346e-05f, 5.352889354e-05f, 5.354108984e-05f, 5.355319234e-05f, 5.356520103e-05f, 5.357711589e-05f, 5.358893691e-05f, 5.360066409e-05f,
-5.361229741e-05f, 5.362383686e-05f, 5.363528242e-05f, 5.364663410e-05f, 5.365789187e-05f, 5.366905573e-05f, 5.368012567e-05f, 5.369110168e-05f, 5.370198374e-05f, 5.371277185e-05f,
-5.372346600e-05f, 5.373406617e-05f, 5.374457237e-05f, 5.375498457e-05f, 5.376530278e-05f, 5.377552697e-05f, 5.378565715e-05f, 5.379569331e-05f, 5.380563543e-05f, 5.381548351e-05f,
-5.382523754e-05f, 5.383489751e-05f, 5.384446342e-05f, 5.385393525e-05f, 5.386331301e-05f, 5.387259667e-05f, 5.388178625e-05f, 5.389088172e-05f, 5.389988309e-05f, 5.390879034e-05f,
-5.391760347e-05f, 5.392632247e-05f, 5.393494734e-05f, 5.394347807e-05f, 5.395191466e-05f, 5.396025710e-05f, 5.396850538e-05f, 5.397665950e-05f, 5.398471946e-05f, 5.399268524e-05f,
-5.400055685e-05f, 5.400833428e-05f, 5.401601753e-05f, 5.402360659e-05f, 5.403110146e-05f, 5.403850213e-05f, 5.404580860e-05f, 5.405302087e-05f, 5.406013892e-05f, 5.406716277e-05f,
-5.407409241e-05f, 5.408092783e-05f, 5.408766903e-05f, 5.409431601e-05f, 5.410086877e-05f, 5.410732730e-05f, 5.411369160e-05f, 5.411996167e-05f, 5.412613751e-05f, 5.413221911e-05f,
-5.413820648e-05f, 5.414409962e-05f, 5.414989851e-05f, 5.415560317e-05f, 5.416121359e-05f, 5.416672976e-05f, 5.417215170e-05f, 5.417747940e-05f, 5.418271285e-05f, 5.418785207e-05f,
-5.419289704e-05f, 5.419784778e-05f, 5.420270427e-05f, 5.420746653e-05f, 5.421213454e-05f, 5.421670832e-05f, 5.422118787e-05f, 5.422557318e-05f, 5.422986425e-05f, 5.423406110e-05f,
-5.423816371e-05f, 5.424217209e-05f, 5.424608625e-05f, 5.424990619e-05f, 5.425363191e-05f, 5.425726340e-05f, 5.426080069e-05f, 5.426424375e-05f, 5.426759261e-05f, 5.427084727e-05f,
-5.427400772e-05f, 5.427707397e-05f, 5.428004602e-05f, 5.428292389e-05f, 5.428570757e-05f, 5.428839706e-05f, 5.429099237e-05f, 5.429349352e-05f, 5.429590049e-05f, 5.429821329e-05f,
-5.430043194e-05f, 5.430255644e-05f, 5.430458678e-05f, 5.430652298e-05f, 5.430836505e-05f, 5.431011298e-05f, 5.431176678e-05f, 5.431332647e-05f, 5.431479205e-05f, 5.431616351e-05f,
-5.431744088e-05f, 5.431862416e-05f, 5.431971334e-05f, 5.432070845e-05f, 5.432160949e-05f, 5.432241647e-05f, 5.432312939e-05f, 5.432374826e-05f, 5.432427309e-05f, 5.432470388e-05f,
-5.432504066e-05f, 5.432528342e-05f, 5.432543217e-05f, 5.432548692e-05f, 5.432544768e-05f, 5.432531447e-05f, 5.432508728e-05f, 5.432476613e-05f, 5.432435103e-05f, 5.432384199e-05f,
-5.432323902e-05f, 5.432254212e-05f, 5.432175132e-05f, 5.432086661e-05f, 5.431988801e-05f, 5.431881553e-05f, 5.431764919e-05f, 5.431638898e-05f, 5.431503493e-05f, 5.431358704e-05f,
-5.431204533e-05f, 5.431040981e-05f, 5.430868049e-05f, 5.430685738e-05f, 5.430494049e-05f, 5.430292984e-05f, 5.430082544e-05f, 5.429862730e-05f, 5.429633543e-05f, 5.429394985e-05f,
-5.429147058e-05f, 5.428889761e-05f, 5.428623098e-05f, 5.428347068e-05f, 5.428061674e-05f, 5.427766917e-05f, 5.427462798e-05f, 5.427149319e-05f, 5.426826481e-05f, 5.426494286e-05f,
-5.426152735e-05f, 5.425801829e-05f, 5.425441571e-05f, 5.425071961e-05f, 5.424693002e-05f, 5.424304694e-05f, 5.423907039e-05f, 5.423500039e-05f, 5.423083696e-05f, 5.422658011e-05f,
-5.422222986e-05f, 5.421778622e-05f, 5.421324921e-05f, 5.420861885e-05f, 5.420389515e-05f, 5.419907814e-05f, 5.419416782e-05f, 5.418916422e-05f, 5.418406736e-05f, 5.417887725e-05f,
-5.417359390e-05f, 5.416821735e-05f, 5.416274760e-05f, 5.415718468e-05f, 5.415152860e-05f, 5.414577938e-05f, 5.413993705e-05f, 5.413400161e-05f, 5.412797310e-05f, 5.412185152e-05f,
-5.411563690e-05f, 5.410932926e-05f, 5.410292862e-05f, 5.409643500e-05f, 5.408984841e-05f, 5.408316889e-05f, 5.407639644e-05f, 5.406953110e-05f, 5.406257287e-05f, 5.405552178e-05f,
-5.404837786e-05f, 5.404114113e-05f, 5.403381159e-05f, 5.402638929e-05f, 5.401887424e-05f, 5.401126645e-05f, 5.400356596e-05f, 5.399577279e-05f, 5.398788695e-05f, 5.397990847e-05f,
-5.397183738e-05f, 5.396367369e-05f, 5.395541743e-05f, 5.394706863e-05f, 5.393862730e-05f, 5.393009347e-05f, 5.392146716e-05f, 5.391274840e-05f, 5.390393721e-05f, 5.389503361e-05f,
-5.388603764e-05f, 5.387694931e-05f, 5.386776864e-05f, 5.385849567e-05f, 5.384913042e-05f, 5.383967291e-05f, 5.383012317e-05f, 5.382048122e-05f, 5.381074710e-05f, 5.380092081e-05f,
-5.379100240e-05f, 5.378099189e-05f, 5.377088930e-05f, 5.376069466e-05f, 5.375040800e-05f, 5.374002933e-05f, 5.372955870e-05f, 5.371899613e-05f, 5.370834164e-05f, 5.369759526e-05f,
-5.368675702e-05f, 5.367582694e-05f, 5.366480506e-05f, 5.365369141e-05f, 5.364248600e-05f, 5.363118887e-05f, 5.361980004e-05f, 5.360831956e-05f, 5.359674743e-05f, 5.358508370e-05f,
-5.357332839e-05f, 5.356148153e-05f, 5.354954316e-05f, 5.353751329e-05f, 5.352539196e-05f, 5.351317920e-05f, 5.350087504e-05f, 5.348847951e-05f, 5.347599264e-05f, 5.346341446e-05f,
-5.345074500e-05f, 5.343798429e-05f, 5.342513236e-05f, 5.341218925e-05f, 5.339915498e-05f, 5.338602959e-05f, 5.337281310e-05f, 5.335950555e-05f, 5.334610698e-05f, 5.333261741e-05f,
-5.331903687e-05f, 5.330536540e-05f, 5.329160302e-05f, 5.327774979e-05f, 5.326380571e-05f, 5.324977083e-05f, 5.323564519e-05f, 5.322142881e-05f, 5.320712172e-05f, 5.319272397e-05f,
-5.317823558e-05f, 5.316365659e-05f, 5.314898703e-05f, 5.313422694e-05f, 5.311937635e-05f, 5.310443530e-05f, 5.308940381e-05f, 5.307428193e-05f, 5.305906969e-05f, 5.304376712e-05f,
-5.302837426e-05f, 5.301289115e-05f, 5.299731782e-05f, 5.298165430e-05f, 5.296590064e-05f, 5.295005687e-05f, 5.293412301e-05f, 5.291809912e-05f, 5.290198523e-05f, 5.288578137e-05f,
-5.286948758e-05f, 5.285310389e-05f, 5.283663035e-05f, 5.282006699e-05f, 5.280341385e-05f, 5.278667097e-05f, 5.276983838e-05f, 5.275291612e-05f, 5.273590423e-05f, 5.271880274e-05f,
-5.270161170e-05f, 5.268433115e-05f, 5.266696112e-05f, 5.264950165e-05f, 5.263195278e-05f, 5.261431455e-05f, 5.259658700e-05f, 5.257877016e-05f, 5.256086409e-05f, 5.254286880e-05f,
-5.252478436e-05f, 5.250661079e-05f, 5.248834814e-05f, 5.246999644e-05f, 5.245155574e-05f, 5.243302608e-05f, 5.241440750e-05f, 5.239570004e-05f, 5.237690373e-05f, 5.235801863e-05f,
-5.233904476e-05f, 5.231998219e-05f, 5.230083093e-05f, 5.228159105e-05f, 5.226226257e-05f, 5.224284554e-05f, 5.222334001e-05f, 5.220374601e-05f, 5.218406359e-05f, 5.216429278e-05f,
-5.214443364e-05f, 5.212448621e-05f, 5.210445053e-05f, 5.208432663e-05f, 5.206411458e-05f, 5.204381440e-05f, 5.202342614e-05f, 5.200294985e-05f, 5.198238557e-05f, 5.196173335e-05f,
-5.194099322e-05f, 5.192016524e-05f, 5.189924944e-05f, 5.187824588e-05f, 5.185715459e-05f, 5.183597563e-05f, 5.181470903e-05f, 5.179335484e-05f, 5.177191311e-05f, 5.175038389e-05f,
-5.172876721e-05f, 5.170706313e-05f, 5.168527169e-05f, 5.166339293e-05f, 5.164142691e-05f, 5.161937367e-05f, 5.159723326e-05f, 5.157500571e-05f, 5.155269109e-05f, 5.153028944e-05f,
-5.150780079e-05f, 5.148522521e-05f, 5.146256274e-05f, 5.143981343e-05f, 5.141697732e-05f, 5.139405446e-05f, 5.137104490e-05f, 5.134794869e-05f, 5.132476588e-05f, 5.130149651e-05f,
-5.127814063e-05f, 5.125469830e-05f, 5.123116956e-05f, 5.120755446e-05f, 5.118385305e-05f, 5.116006538e-05f, 5.113619149e-05f, 5.111223145e-05f, 5.108818529e-05f, 5.106405307e-05f,
-5.103983484e-05f, 5.101553065e-05f, 5.099114054e-05f, 5.096666458e-05f, 5.094210280e-05f, 5.091745527e-05f, 5.089272202e-05f, 5.086790312e-05f, 5.084299862e-05f, 5.081800855e-05f,
-5.079293299e-05f, 5.076777197e-05f, 5.074252555e-05f, 5.071719379e-05f, 5.069177673e-05f, 5.066627442e-05f, 5.064068693e-05f, 5.061501429e-05f, 5.058925657e-05f, 5.056341381e-05f,
-5.053748608e-05f, 5.051147342e-05f, 5.048537588e-05f, 5.045919352e-05f, 5.043292640e-05f, 5.040657456e-05f, 5.038013806e-05f, 5.035361696e-05f, 5.032701130e-05f, 5.030032115e-05f,
-5.027354655e-05f, 5.024668757e-05f, 5.021974425e-05f, 5.019271665e-05f, 5.016560482e-05f, 5.013840883e-05f, 5.011112872e-05f, 5.008376456e-05f, 5.005631639e-05f, 5.002878427e-05f,
-5.000116826e-05f, 4.997346841e-05f, 4.994568479e-05f, 4.991781744e-05f, 4.988986642e-05f, 4.986183179e-05f, 4.983371361e-05f, 4.980551193e-05f, 4.977722680e-05f, 4.974885830e-05f,
-4.972040647e-05f, 4.969187136e-05f, 4.966325305e-05f, 4.963455158e-05f, 4.960576701e-05f, 4.957689941e-05f, 4.954794882e-05f, 4.951891531e-05f, 4.948979894e-05f, 4.946059976e-05f,
-4.943131783e-05f, 4.940195322e-05f, 4.937250597e-05f, 4.934297615e-05f, 4.931336382e-05f, 4.928366904e-05f, 4.925389186e-05f, 4.922403235e-05f, 4.919409057e-05f, 4.916406657e-05f,
-4.913396041e-05f, 4.910377216e-05f, 4.907350188e-05f, 4.904314962e-05f, 4.901271544e-05f, 4.898219942e-05f, 4.895160160e-05f, 4.892092205e-05f, 4.889016083e-05f, 4.885931800e-05f,
-4.882839362e-05f, 4.879738775e-05f, 4.876630046e-05f, 4.873513181e-05f, 4.870388185e-05f, 4.867255065e-05f, 4.864113828e-05f, 4.860964479e-05f, 4.857807024e-05f, 4.854641471e-05f,
-4.851467824e-05f, 4.848286091e-05f, 4.845096278e-05f, 4.841898391e-05f, 4.838692436e-05f, 4.835478420e-05f, 4.832256349e-05f, 4.829026229e-05f, 4.825788067e-05f, 4.822541870e-05f,
-4.819287642e-05f, 4.816025392e-05f, 4.812755125e-05f, 4.809476847e-05f, 4.806190566e-05f, 4.802896288e-05f, 4.799594019e-05f, 4.796283765e-05f, 4.792965534e-05f, 4.789639331e-05f,
-4.786305163e-05f, 4.782963037e-05f, 4.779612960e-05f, 4.776254937e-05f, 4.772888976e-05f, 4.769515083e-05f, 4.766133264e-05f, 4.762743526e-05f, 4.759345877e-05f, 4.755940322e-05f,
-4.752526868e-05f, 4.749105522e-05f, 4.745676291e-05f, 4.742239180e-05f, 4.738794198e-05f, 4.735341350e-05f, 4.731880644e-05f, 4.728412086e-05f, 4.724935683e-05f, 4.721451441e-05f,
-4.717959368e-05f, 4.714459470e-05f, 4.710951755e-05f, 4.707436228e-05f, 4.703912897e-05f, 4.700381768e-05f, 4.696842849e-05f, 4.693296147e-05f, 4.689741667e-05f, 4.686179418e-05f,
-4.682609406e-05f, 4.679031638e-05f, 4.675446120e-05f, 4.671852861e-05f, 4.668251866e-05f, 4.664643144e-05f, 4.661026700e-05f, 4.657402541e-05f, 4.653770676e-05f, 4.650131111e-05f,
-4.646483852e-05f, 4.642828908e-05f, 4.639166284e-05f, 4.635495989e-05f, 4.631818029e-05f, 4.628132411e-05f, 4.624439142e-05f, 4.620738230e-05f, 4.617029682e-05f, 4.613313505e-05f,
-4.609589706e-05f, 4.605858292e-05f, 4.602119270e-05f, 4.598372648e-05f, 4.594618433e-05f, 4.590856632e-05f, 4.587087252e-05f, 4.583310301e-05f, 4.579525785e-05f, 4.575733713e-05f,
-4.571934091e-05f, 4.568126927e-05f, 4.564312228e-05f, 4.560490001e-05f, 4.556660254e-05f, 4.552822994e-05f, 4.548978228e-05f, 4.545125965e-05f, 4.541266210e-05f, 4.537398972e-05f,
-4.533524258e-05f, 4.529642076e-05f, 4.525752432e-05f, 4.521855335e-05f, 4.517950791e-05f, 4.514038809e-05f, 4.510119396e-05f, 4.506192559e-05f, 4.502258305e-05f, 4.498316643e-05f,
-4.494367580e-05f, 4.490411123e-05f, 4.486447281e-05f, 4.482476059e-05f, 4.478497467e-05f, 4.474511512e-05f, 4.470518201e-05f, 4.466517542e-05f, 4.462509542e-05f, 4.458494210e-05f,
-4.454471552e-05f, 4.450441578e-05f, 4.446404293e-05f, 4.442359706e-05f, 4.438307825e-05f, 4.434248658e-05f, 4.430182211e-05f, 4.426108494e-05f, 4.422027513e-05f, 4.417939276e-05f,
-4.413843791e-05f, 4.409741067e-05f, 4.405631110e-05f, 4.401513928e-05f, 4.397389530e-05f, 4.393257923e-05f, 4.389119115e-05f, 4.384973115e-05f, 4.380819928e-05f, 4.376659565e-05f,
-4.372492032e-05f, 4.368317337e-05f, 4.364135489e-05f, 4.359946495e-05f, 4.355750364e-05f, 4.351547103e-05f, 4.347336719e-05f, 4.343119222e-05f, 4.338894619e-05f, 4.334662918e-05f,
-4.330424128e-05f, 4.326178255e-05f, 4.321925309e-05f, 4.317665296e-05f, 4.313398227e-05f, 4.309124107e-05f, 4.304842946e-05f, 4.300554751e-05f, 4.296259531e-05f, 4.291957294e-05f,
-4.287648048e-05f, 4.283331800e-05f, 4.279008560e-05f, 4.274678335e-05f, 4.270341134e-05f, 4.265996964e-05f, 4.261645834e-05f, 4.257287752e-05f, 4.252922727e-05f, 4.248550766e-05f,
-4.244171877e-05f, 4.239786070e-05f, 4.235393351e-05f, 4.230993731e-05f, 4.226587216e-05f, 4.222173815e-05f, 4.217753537e-05f, 4.213326389e-05f, 4.208892380e-05f, 4.204451519e-05f,
-4.200003813e-05f, 4.195549271e-05f, 4.191087902e-05f, 4.186619714e-05f, 4.182144715e-05f, 4.177662913e-05f, 4.173174318e-05f, 4.168678937e-05f, 4.164176779e-05f, 4.159667852e-05f,
-4.155152165e-05f, 4.150629727e-05f, 4.146100545e-05f, 4.141564628e-05f, 4.137021985e-05f, 4.132472625e-05f, 4.127916555e-05f, 4.123353784e-05f, 4.118784321e-05f, 4.114208175e-05f,
-4.109625354e-05f, 4.105035866e-05f, 4.100439720e-05f, 4.095836926e-05f, 4.091227490e-05f, 4.086611423e-05f, 4.081988732e-05f, 4.077359426e-05f, 4.072723514e-05f, 4.068081005e-05f,
-4.063431907e-05f, 4.058776229e-05f, 4.054113979e-05f, 4.049445167e-05f, 4.044769801e-05f, 4.040087890e-05f, 4.035399442e-05f, 4.030704466e-05f, 4.026002972e-05f, 4.021294967e-05f,
-4.016580461e-05f, 4.011859462e-05f, 4.007131979e-05f, 4.002398021e-05f, 3.997657597e-05f, 3.992910715e-05f, 3.988157385e-05f, 3.983397615e-05f, 3.978631414e-05f, 3.973858792e-05f,
-3.969079756e-05f, 3.964294316e-05f, 3.959502480e-05f, 3.954704259e-05f, 3.949899659e-05f, 3.945088692e-05f, 3.940271364e-05f, 3.935447686e-05f, 3.930617666e-05f, 3.925781314e-05f,
-3.920938638e-05f, 3.916089647e-05f, 3.911234350e-05f, 3.906372757e-05f, 3.901504876e-05f, 3.896630716e-05f, 3.891750286e-05f, 3.886863596e-05f, 3.881970655e-05f, 3.877071471e-05f,
-3.872166054e-05f, 3.867254412e-05f, 3.862336556e-05f, 3.857412493e-05f, 3.852482233e-05f, 3.847545786e-05f, 3.842603160e-05f, 3.837654364e-05f, 3.832699408e-05f, 3.827738301e-05f,
-3.822771052e-05f, 3.817797670e-05f, 3.812818165e-05f, 3.807832545e-05f, 3.802840820e-05f, 3.797842999e-05f, 3.792839091e-05f, 3.787829106e-05f, 3.782813053e-05f, 3.777790941e-05f,
-3.772762779e-05f, 3.767728577e-05f, 3.762688344e-05f, 3.757642089e-05f, 3.752589822e-05f, 3.747531552e-05f, 3.742467287e-05f, 3.737397039e-05f, 3.732320815e-05f, 3.727238626e-05f,
-3.722150480e-05f, 3.717056388e-05f, 3.711956357e-05f, 3.706850399e-05f, 3.701738522e-05f, 3.696620736e-05f, 3.691497049e-05f, 3.686367473e-05f, 3.681232015e-05f, 3.676090686e-05f,
-3.670943494e-05f, 3.665790450e-05f, 3.660631563e-05f, 3.655466843e-05f, 3.650296298e-05f, 3.645119938e-05f, 3.639937774e-05f, 3.634749814e-05f, 3.629556068e-05f, 3.624356545e-05f,
-3.619151256e-05f, 3.613940209e-05f, 3.608723414e-05f, 3.603500881e-05f, 3.598272620e-05f, 3.593038640e-05f, 3.587798950e-05f, 3.582553561e-05f, 3.577302481e-05f, 3.572045721e-05f,
-3.566783290e-05f, 3.561515198e-05f, 3.556241454e-05f, 3.550962069e-05f, 3.545677051e-05f, 3.540386411e-05f, 3.535090158e-05f, 3.529788302e-05f, 3.524480853e-05f, 3.519167820e-05f,
-3.513849214e-05f, 3.508525043e-05f, 3.503195318e-05f, 3.497860048e-05f, 3.492519243e-05f, 3.487172913e-05f, 3.481821068e-05f, 3.476463718e-05f, 3.471100872e-05f, 3.465732540e-05f,
-3.460358732e-05f, 3.454979458e-05f, 3.449594727e-05f, 3.444204550e-05f, 3.438808936e-05f, 3.433407895e-05f, 3.428001438e-05f, 3.422589573e-05f, 3.417172312e-05f, 3.411749663e-05f,
-3.406321636e-05f, 3.400888243e-05f, 3.395449491e-05f, 3.390005392e-05f, 3.384555956e-05f, 3.379101192e-05f, 3.373641110e-05f, 3.368175720e-05f, 3.362705033e-05f, 3.357229057e-05f,
-3.351747804e-05f, 3.346261283e-05f, 3.340769505e-05f, 3.335272478e-05f, 3.329770214e-05f, 3.324262721e-05f, 3.318750012e-05f, 3.313232094e-05f, 3.307708979e-05f, 3.302180676e-05f,
-3.296647196e-05f, 3.291108548e-05f, 3.285564743e-05f, 3.280015791e-05f, 3.274461702e-05f, 3.268902486e-05f, 3.263338153e-05f, 3.257768713e-05f, 3.252194176e-05f, 3.246614553e-05f,
-3.241029853e-05f, 3.235440088e-05f, 3.229845266e-05f, 3.224245399e-05f, 3.218640495e-05f, 3.213030567e-05f, 3.207415623e-05f, 3.201795674e-05f, 3.196170730e-05f, 3.190540801e-05f,
-3.184905898e-05f, 3.179266031e-05f, 3.173621210e-05f, 3.167971445e-05f, 3.162316747e-05f, 3.156657125e-05f, 3.150992591e-05f, 3.145323154e-05f, 3.139648824e-05f, 3.133969613e-05f,
-3.128285530e-05f, 3.122596585e-05f, 3.116902790e-05f, 3.111204153e-05f, 3.105500686e-05f, 3.099792399e-05f, 3.094079302e-05f, 3.088361406e-05f, 3.082638720e-05f, 3.076911256e-05f,
-3.071179024e-05f, 3.065442034e-05f, 3.059700296e-05f, 3.053953821e-05f, 3.048202619e-05f, 3.042446701e-05f, 3.036686077e-05f, 3.030920757e-05f, 3.025150753e-05f, 3.019376073e-05f,
-3.013596730e-05f, 3.007812733e-05f, 3.002024093e-05f, 2.996230820e-05f, 2.990432924e-05f, 2.984630417e-05f, 2.978823308e-05f, 2.973011609e-05f, 2.967195329e-05f, 2.961374479e-05f,
-2.955549071e-05f, 2.949719113e-05f, 2.943884617e-05f, 2.938045593e-05f, 2.932202052e-05f, 2.926354005e-05f, 2.920501461e-05f, 2.914644432e-05f, 2.908782928e-05f, 2.902916960e-05f,
-2.897046538e-05f, 2.891171672e-05f, 2.885292374e-05f, 2.879408655e-05f, 2.873520523e-05f, 2.867627991e-05f, 2.861731069e-05f, 2.855829768e-05f, 2.849924097e-05f, 2.844014069e-05f,
-2.838099693e-05f, 2.832180980e-05f, 2.826257940e-05f, 2.820330585e-05f, 2.814398926e-05f, 2.808462972e-05f, 2.802522734e-05f, 2.796578224e-05f, 2.790629451e-05f, 2.784676428e-05f,
-2.778719163e-05f, 2.772757669e-05f, 2.766791955e-05f, 2.760822033e-05f, 2.754847913e-05f, 2.748869606e-05f, 2.742887122e-05f, 2.736900473e-05f, 2.730909670e-05f, 2.724914722e-05f,
-2.718915642e-05f, 2.712912438e-05f, 2.706905124e-05f, 2.700893708e-05f, 2.694878202e-05f, 2.688858617e-05f, 2.682834964e-05f, 2.676807253e-05f, 2.670775496e-05f, 2.664739702e-05f,
-2.658699883e-05f, 2.652656051e-05f, 2.646608214e-05f, 2.640556385e-05f, 2.634500575e-05f, 2.628440793e-05f, 2.622377052e-05f, 2.616309362e-05f, 2.610237733e-05f, 2.604162177e-05f,
-2.598082705e-05f, 2.591999327e-05f, 2.585912055e-05f, 2.579820899e-05f, 2.573725870e-05f, 2.567626980e-05f, 2.561524238e-05f, 2.555417657e-05f, 2.549307246e-05f, 2.543193017e-05f,
-2.537074982e-05f, 2.530953150e-05f, 2.524827533e-05f, 2.518698141e-05f, 2.512564987e-05f, 2.506428080e-05f, 2.500287432e-05f, 2.494143053e-05f, 2.487994955e-05f, 2.481843149e-05f,
-2.475687646e-05f, 2.469528456e-05f, 2.463365591e-05f, 2.457199062e-05f, 2.451028879e-05f, 2.444855054e-05f, 2.438677598e-05f, 2.432496523e-05f, 2.426311837e-05f, 2.420123554e-05f,
-2.413931684e-05f, 2.407736238e-05f, 2.401537228e-05f, 2.395334663e-05f, 2.389128556e-05f, 2.382918917e-05f, 2.376705758e-05f, 2.370489090e-05f, 2.364268923e-05f, 2.358045269e-05f,
-2.351818139e-05f, 2.345587543e-05f, 2.339353494e-05f, 2.333116003e-05f, 2.326875079e-05f, 2.320630736e-05f, 2.314382982e-05f, 2.308131831e-05f, 2.301877293e-05f, 2.295619379e-05f,
-2.289358100e-05f, 2.283093467e-05f, 2.276825493e-05f, 2.270554186e-05f, 2.264279560e-05f, 2.258001625e-05f, 2.251720393e-05f, 2.245435874e-05f, 2.239148079e-05f, 2.232857021e-05f,
-2.226562709e-05f, 2.220265156e-05f, 2.213964373e-05f, 2.207660370e-05f, 2.201353159e-05f, 2.195042752e-05f, 2.188729159e-05f, 2.182412391e-05f, 2.176092461e-05f, 2.169769378e-05f,
-2.163443155e-05f, 2.157113803e-05f, 2.150781333e-05f, 2.144445755e-05f, 2.138107083e-05f, 2.131765326e-05f, 2.125420496e-05f, 2.119072604e-05f, 2.112721662e-05f, 2.106367680e-05f,
-2.100010671e-05f, 2.093650646e-05f, 2.087287615e-05f, 2.080921590e-05f, 2.074552582e-05f, 2.068180603e-05f, 2.061805664e-05f, 2.055427776e-05f, 2.049046951e-05f, 2.042663200e-05f,
-2.036276534e-05f, 2.029886965e-05f, 2.023494504e-05f, 2.017099162e-05f, 2.010700950e-05f, 2.004299881e-05f, 1.997895965e-05f, 1.991489214e-05f, 1.985079638e-05f, 1.978667251e-05f,
-1.972252062e-05f, 1.965834083e-05f, 1.959413326e-05f, 1.952989802e-05f, 1.946563522e-05f, 1.940134498e-05f, 1.933702740e-05f, 1.927268262e-05f, 1.920831073e-05f, 1.914391186e-05f,
-1.907948612e-05f, 1.901503361e-05f, 1.895055446e-05f, 1.888604878e-05f, 1.882151669e-05f, 1.875695829e-05f, 1.869237371e-05f, 1.862776305e-05f, 1.856312643e-05f, 1.849846397e-05f,
-1.843377578e-05f, 1.836906198e-05f, 1.830432267e-05f, 1.823955797e-05f, 1.817476801e-05f, 1.810995288e-05f, 1.804511272e-05f, 1.798024762e-05f, 1.791535771e-05f, 1.785044311e-05f,
-1.778550392e-05f, 1.772054026e-05f, 1.765555224e-05f, 1.759053999e-05f, 1.752550361e-05f, 1.746044322e-05f, 1.739535893e-05f, 1.733025087e-05f, 1.726511914e-05f, 1.719996386e-05f,
-1.713478515e-05f, 1.706958312e-05f, 1.700435788e-05f, 1.693910955e-05f, 1.687383825e-05f, 1.680854409e-05f, 1.674322718e-05f, 1.667788765e-05f, 1.661252560e-05f, 1.654714115e-05f,
-1.648173442e-05f, 1.641630553e-05f, 1.635085458e-05f, 1.628538170e-05f, 1.621988699e-05f, 1.615437058e-05f, 1.608883258e-05f, 1.602327310e-05f, 1.595769227e-05f, 1.589209019e-05f,
-1.582646698e-05f, 1.576082276e-05f, 1.569515764e-05f, 1.562947175e-05f, 1.556376518e-05f, 1.549803807e-05f, 1.543229053e-05f, 1.536652266e-05f, 1.530073460e-05f, 1.523492644e-05f,
-1.516909832e-05f, 1.510325034e-05f, 1.503738262e-05f, 1.497149529e-05f, 1.490558844e-05f, 1.483966220e-05f, 1.477371669e-05f, 1.470775202e-05f, 1.464176830e-05f, 1.457576566e-05f,
-1.450974421e-05f, 1.444370406e-05f, 1.437764533e-05f, 1.431156814e-05f, 1.424547261e-05f, 1.417935884e-05f, 1.411322696e-05f, 1.404707709e-05f, 1.398090933e-05f, 1.391472380e-05f,
-1.384852063e-05f, 1.378229992e-05f, 1.371606180e-05f, 1.364980638e-05f, 1.358353377e-05f, 1.351724410e-05f, 1.345093747e-05f, 1.338461401e-05f, 1.331827384e-05f, 1.325191706e-05f,
-1.318554379e-05f, 1.311915416e-05f, 1.305274827e-05f, 1.298632625e-05f, 1.291988821e-05f, 1.285343427e-05f, 1.278696454e-05f, 1.272047914e-05f, 1.265397818e-05f, 1.258746179e-05f,
-1.252093009e-05f, 1.245438317e-05f, 1.238782118e-05f, 1.232124421e-05f, 1.225465239e-05f, 1.218804583e-05f, 1.212142465e-05f, 1.205478897e-05f, 1.198813890e-05f, 1.192147456e-05f,
-1.185479607e-05f, 1.178810355e-05f, 1.172139710e-05f, 1.165467686e-05f, 1.158794292e-05f, 1.152119542e-05f, 1.145443447e-05f, 1.138766018e-05f, 1.132087267e-05f, 1.125407206e-05f,
-1.118725847e-05f, 1.112043201e-05f, 1.105359280e-05f, 1.098674095e-05f, 1.091987659e-05f, 1.085299983e-05f, 1.078611079e-05f, 1.071920958e-05f, 1.065229632e-05f, 1.058537112e-05f,
-1.051843412e-05f, 1.045148541e-05f, 1.038452513e-05f, 1.031755338e-05f, 1.025057028e-05f, 1.018357595e-05f, 1.011657051e-05f, 1.004955408e-05f, 9.982526765e-06f, 9.915488689e-06f,
-9.848439968e-06f, 9.781380720e-06f, 9.714311061e-06f, 9.647231109e-06f, 9.580140980e-06f, 9.513040792e-06f, 9.445930662e-06f, 9.378810707e-06f, 9.311681044e-06f, 9.244541790e-06f,
-9.177393063e-06f, 9.110234979e-06f, 9.043067656e-06f, 8.975891210e-06f, 8.908705760e-06f, 8.841511421e-06f, 8.774308312e-06f, 8.707096549e-06f, 8.639876250e-06f, 8.572647532e-06f,
-8.505410511e-06f, 8.438165306e-06f, 8.370912033e-06f, 8.303650809e-06f, 8.236381752e-06f, 8.169104979e-06f, 8.101820607e-06f, 8.034528753e-06f, 7.967229534e-06f, 7.899923068e-06f,
-7.832609472e-06f, 7.765288863e-06f, 7.697961358e-06f, 7.630627074e-06f, 7.563286129e-06f, 7.495938640e-06f, 7.428584724e-06f, 7.361224497e-06f, 7.293858078e-06f, 7.226485584e-06f,
-7.159107132e-06f, 7.091722838e-06f, 7.024332820e-06f, 6.956937196e-06f, 6.889536083e-06f, 6.822129597e-06f, 6.754717855e-06f, 6.687300976e-06f, 6.619879077e-06f, 6.552452273e-06f,
-6.485020683e-06f, 6.417584424e-06f, 6.350143613e-06f, 6.282698367e-06f, 6.215248803e-06f, 6.147795039e-06f, 6.080337191e-06f, 6.012875377e-06f, 5.945409714e-06f, 5.877940319e-06f,
-5.810467309e-06f, 5.742990801e-06f, 5.675510912e-06f, 5.608027760e-06f, 5.540541462e-06f, 5.473052134e-06f, 5.405559895e-06f, 5.338064860e-06f, 5.270567147e-06f, 5.203066873e-06f,
-5.135564156e-06f, 5.068059111e-06f, 5.000551857e-06f, 4.933042510e-06f, 4.865531188e-06f, 4.798018007e-06f, 4.730503085e-06f, 4.662986538e-06f, 4.595468483e-06f, 4.527949038e-06f,
-4.460428320e-06f, 4.392906444e-06f, 4.325383530e-06f, 4.257859693e-06f, 4.190335050e-06f, 4.122809718e-06f, 4.055283815e-06f, 3.987757457e-06f, 3.920230761e-06f, 3.852703843e-06f,
-3.785176822e-06f, 3.717649814e-06f, 3.650122935e-06f, 3.582596303e-06f, 3.515070034e-06f, 3.447544245e-06f, 3.380019053e-06f, 3.312494575e-06f, 3.244970928e-06f, 3.177448227e-06f,
-3.109926592e-06f, 3.042406137e-06f, 2.974886979e-06f, 2.907369237e-06f, 2.839853025e-06f, 2.772338461e-06f, 2.704825662e-06f, 2.637314743e-06f, 2.569805823e-06f, 2.502299017e-06f,
-2.434794442e-06f, 2.367292215e-06f, 2.299792453e-06f, 2.232295271e-06f, 2.164800787e-06f, 2.097309117e-06f, 2.029820377e-06f, 1.962334685e-06f, 1.894852156e-06f, 1.827372907e-06f,
-1.759897055e-06f, 1.692424716e-06f, 1.624956006e-06f, 1.557491042e-06f, 1.490029941e-06f, 1.422572818e-06f, 1.355119790e-06f, 1.287670974e-06f, 1.220226485e-06f, 1.152786440e-06f,
-1.085350956e-06f, 1.017920148e-06f, 9.504941331e-07f, 8.830730272e-07f, 8.156569465e-07f, 7.482460072e-07f, 6.808403256e-07f, 6.134400178e-07f, 5.460451999e-07f, 4.786559880e-07f,
-4.112724983e-07f, 3.438948467e-07f, 2.765231493e-07f, 2.091575222e-07f, 1.417980813e-07f, 7.444494264e-08f, 7.098222190e-09f, -6.024196414e-08f, -1.275755004e-07f, -1.949022708e-07f,
--2.622221593e-07f, -3.295350502e-07f, -3.968408277e-07f, -4.641393759e-07f, -5.314305790e-07f, -5.987143214e-07f, -6.659904872e-07f, -7.332589609e-07f, -8.005196266e-07f, -8.677723688e-07f,
--9.350170719e-07f, -1.002253620e-06f, -1.069481898e-06f, -1.136701790e-06f, -1.203913181e-06f, -1.271115954e-06f, -1.338309996e-06f, -1.405495189e-06f, -1.472671419e-06f, -1.539838571e-06f,
--1.606996528e-06f, -1.674145176e-06f, -1.741284400e-06f, -1.808414083e-06f, -1.875534111e-06f, -1.942644369e-06f, -2.009744741e-06f, -2.076835112e-06f, -2.143915368e-06f, -2.210985392e-06f,
--2.278045070e-06f, -2.345094287e-06f, -2.412132927e-06f, -2.479160877e-06f, -2.546178020e-06f, -2.613184242e-06f, -2.680179428e-06f, -2.747163463e-06f, -2.814136232e-06f, -2.881097620e-06f,
--2.948047513e-06f, -3.014985796e-06f, -3.081912354e-06f, -3.148827073e-06f, -3.215729837e-06f, -3.282620532e-06f, -3.349499044e-06f, -3.416365258e-06f, -3.483219060e-06f, -3.550060334e-06f,
--3.616888966e-06f, -3.683704843e-06f, -3.750507850e-06f, -3.817297871e-06f, -3.884074794e-06f, -3.950838503e-06f, -4.017588885e-06f, -4.084325824e-06f, -4.151049208e-06f, -4.217758921e-06f,
--4.284454850e-06f, -4.351136881e-06f, -4.417804899e-06f, -4.484458790e-06f, -4.551098441e-06f, -4.617723738e-06f, -4.684334566e-06f, -4.750930812e-06f, -4.817512362e-06f, -4.884079102e-06f,
--4.950630918e-06f, -5.017167696e-06f, -5.083689324e-06f, -5.150195687e-06f, -5.216686671e-06f, -5.283162164e-06f, -5.349622051e-06f, -5.416066218e-06f, -5.482494554e-06f, -5.548906943e-06f,
--5.615303273e-06f, -5.681683431e-06f, -5.748047302e-06f, -5.814394774e-06f, -5.880725734e-06f, -5.947040068e-06f, -6.013337663e-06f, -6.079618406e-06f, -6.145882184e-06f, -6.212128884e-06f,
--6.278358393e-06f, -6.344570597e-06f, -6.410765385e-06f, -6.476942643e-06f, -6.543102259e-06f, -6.609244118e-06f, -6.675368110e-06f, -6.741474121e-06f, -6.807562038e-06f, -6.873631749e-06f,
--6.939683141e-06f, -7.005716102e-06f, -7.071730519e-06f, -7.137726280e-06f, -7.203703272e-06f, -7.269661384e-06f, -7.335600501e-06f, -7.401520514e-06f, -7.467421308e-06f, -7.533302772e-06f,
--7.599164794e-06f, -7.665007262e-06f, -7.730830064e-06f, -7.796633087e-06f, -7.862416220e-06f, -7.928179350e-06f, -7.993922367e-06f, -8.059645157e-06f, -8.125347610e-06f, -8.191029613e-06f,
--8.256691055e-06f, -8.322331825e-06f, -8.387951810e-06f, -8.453550899e-06f, -8.519128980e-06f, -8.584685943e-06f, -8.650221676e-06f, -8.715736066e-06f, -8.781229004e-06f, -8.846700377e-06f,
--8.912150075e-06f, -8.977577987e-06f, -9.042984001e-06f, -9.108368005e-06f, -9.173729890e-06f, -9.239069544e-06f, -9.304386857e-06f, -9.369681717e-06f, -9.434954013e-06f, -9.500203635e-06f,
--9.565430472e-06f, -9.630634414e-06f, -9.695815349e-06f, -9.760973168e-06f, -9.826107759e-06f, -9.891219012e-06f, -9.956306817e-06f, -1.002137106e-05f, -1.008641164e-05f, -1.015142844e-05f,
--1.021642135e-05f, -1.028139026e-05f, -1.034633506e-05f, -1.041125564e-05f, -1.047615189e-05f, -1.054102370e-05f, -1.060587096e-05f, -1.067069356e-05f, -1.073549139e-05f, -1.080026435e-05f,
--1.086501231e-05f, -1.092973518e-05f, -1.099443284e-05f, -1.105910518e-05f, -1.112375209e-05f, -1.118837347e-05f, -1.125296920e-05f, -1.131753918e-05f, -1.138208329e-05f, -1.144660143e-05f,
--1.151109349e-05f, -1.157555936e-05f, -1.163999892e-05f, -1.170441208e-05f, -1.176879872e-05f, -1.183315872e-05f, -1.189749200e-05f, -1.196179843e-05f, -1.202607790e-05f, -1.209033032e-05f,
--1.215455556e-05f, -1.221875352e-05f, -1.228292410e-05f, -1.234706717e-05f, -1.241118265e-05f, -1.247527041e-05f, -1.253933035e-05f, -1.260336236e-05f, -1.266736634e-05f, -1.273134217e-05f,
--1.279528974e-05f, -1.285920896e-05f, -1.292309970e-05f, -1.298696187e-05f, -1.305079535e-05f, -1.311460004e-05f, -1.317837584e-05f, -1.324212262e-05f, -1.330584029e-05f, -1.336952873e-05f,
--1.343318785e-05f, -1.349681753e-05f, -1.356041767e-05f, -1.362398815e-05f, -1.368752887e-05f, -1.375103973e-05f, -1.381452062e-05f, -1.387797142e-05f, -1.394139204e-05f, -1.400478237e-05f,
--1.406814229e-05f, -1.413147171e-05f, -1.419477051e-05f, -1.425803860e-05f, -1.432127585e-05f, -1.438448218e-05f, -1.444765746e-05f, -1.451080160e-05f, -1.457391449e-05f, -1.463699602e-05f,
--1.470004608e-05f, -1.476306457e-05f, -1.482605139e-05f, -1.488900642e-05f, -1.495192957e-05f, -1.501482072e-05f, -1.507767977e-05f, -1.514050662e-05f, -1.520330115e-05f, -1.526606327e-05f,
--1.532879287e-05f, -1.539148983e-05f, -1.545415407e-05f, -1.551678547e-05f, -1.557938392e-05f, -1.564194933e-05f, -1.570448158e-05f, -1.576698057e-05f, -1.582944620e-05f, -1.589187836e-05f,
--1.595427695e-05f, -1.601664186e-05f, -1.607897299e-05f, -1.614127023e-05f, -1.620353348e-05f, -1.626576263e-05f, -1.632795759e-05f, -1.639011823e-05f, -1.645224447e-05f, -1.651433620e-05f,
--1.657639331e-05f, -1.663841569e-05f, -1.670040325e-05f, -1.676235589e-05f, -1.682427348e-05f, -1.688615595e-05f, -1.694800317e-05f, -1.700981505e-05f, -1.707159148e-05f, -1.713333235e-05f,
--1.719503758e-05f, -1.725670705e-05f, -1.731834065e-05f, -1.737993829e-05f, -1.744149986e-05f, -1.750302527e-05f, -1.756451440e-05f, -1.762596715e-05f, -1.768738343e-05f, -1.774876312e-05f,
--1.781010613e-05f, -1.787141235e-05f, -1.793268168e-05f, -1.799391402e-05f, -1.805510926e-05f, -1.811626731e-05f, -1.817738806e-05f, -1.823847141e-05f, -1.829951725e-05f, -1.836052549e-05f,
--1.842149602e-05f, -1.848242875e-05f, -1.854332356e-05f, -1.860418036e-05f, -1.866499904e-05f, -1.872577951e-05f, -1.878652167e-05f, -1.884722540e-05f, -1.890789062e-05f, -1.896851721e-05f,
--1.902910508e-05f, -1.908965413e-05f, -1.915016425e-05f, -1.921063535e-05f, -1.927106732e-05f, -1.933146007e-05f, -1.939181349e-05f, -1.945212747e-05f, -1.951240193e-05f, -1.957263677e-05f,
--1.963283187e-05f, -1.969298714e-05f, -1.975310248e-05f, -1.981317779e-05f, -1.987321297e-05f, -1.993320792e-05f, -1.999316254e-05f, -2.005307673e-05f, -2.011295039e-05f, -2.017278341e-05f,
--2.023257571e-05f, -2.029232719e-05f, -2.035203773e-05f, -2.041170724e-05f, -2.047133563e-05f, -2.053092279e-05f, -2.059046863e-05f, -2.064997304e-05f, -2.070943593e-05f, -2.076885720e-05f,
--2.082823675e-05f, -2.088757447e-05f, -2.094687028e-05f, -2.100612408e-05f, -2.106533575e-05f, -2.112450522e-05f, -2.118363237e-05f, -2.124271711e-05f, -2.130175934e-05f, -2.136075897e-05f,
--2.141971589e-05f, -2.147863001e-05f, -2.153750124e-05f, -2.159632946e-05f, -2.165511459e-05f, -2.171385652e-05f, -2.177255517e-05f, -2.183121043e-05f, -2.188982220e-05f, -2.194839039e-05f,
--2.200691490e-05f, -2.206539564e-05f, -2.212383250e-05f, -2.218222539e-05f, -2.224057421e-05f, -2.229887888e-05f, -2.235713928e-05f, -2.241535532e-05f, -2.247352691e-05f, -2.253165395e-05f,
--2.258973635e-05f, -2.264777401e-05f, -2.270576682e-05f, -2.276371470e-05f, -2.282161756e-05f, -2.287947528e-05f, -2.293728779e-05f, -2.299505498e-05f, -2.305277675e-05f, -2.311045302e-05f,
--2.316808368e-05f, -2.322566865e-05f, -2.328320782e-05f, -2.334070110e-05f, -2.339814839e-05f, -2.345554961e-05f, -2.351290466e-05f, -2.357021343e-05f, -2.362747584e-05f, -2.368469180e-05f,
--2.374186120e-05f, -2.379898395e-05f, -2.385605996e-05f, -2.391308914e-05f, -2.397007139e-05f, -2.402700661e-05f, -2.408389472e-05f, -2.414073561e-05f, -2.419752920e-05f, -2.425427539e-05f,
--2.431097408e-05f, -2.436762520e-05f, -2.442422863e-05f, -2.448078428e-05f, -2.453729208e-05f, -2.459375191e-05f, -2.465016369e-05f, -2.470652733e-05f, -2.476284272e-05f, -2.481910979e-05f,
--2.487532843e-05f, -2.493149856e-05f, -2.498762008e-05f, -2.504369290e-05f, -2.509971692e-05f, -2.515569206e-05f, -2.521161822e-05f, -2.526749531e-05f, -2.532332324e-05f, -2.537910192e-05f,
--2.543483125e-05f, -2.549051114e-05f, -2.554614151e-05f, -2.560172225e-05f, -2.565725329e-05f, -2.571273452e-05f, -2.576816586e-05f, -2.582354721e-05f, -2.587887849e-05f, -2.593415960e-05f,
--2.598939046e-05f, -2.604457096e-05f, -2.609970103e-05f, -2.615478057e-05f, -2.620980949e-05f, -2.626478770e-05f, -2.631971511e-05f, -2.637459163e-05f, -2.642941717e-05f, -2.648419163e-05f,
--2.653891494e-05f, -2.659358700e-05f, -2.664820772e-05f, -2.670277701e-05f, -2.675729479e-05f, -2.681176095e-05f, -2.686617542e-05f, -2.692053810e-05f, -2.697484891e-05f, -2.702910775e-05f,
--2.708331454e-05f, -2.713746919e-05f, -2.719157161e-05f, -2.724562171e-05f, -2.729961941e-05f, -2.735356460e-05f, -2.740745722e-05f, -2.746129716e-05f, -2.751508434e-05f, -2.756881868e-05f,
--2.762250007e-05f, -2.767612845e-05f, -2.772970371e-05f, -2.778322578e-05f, -2.783669456e-05f, -2.789010996e-05f, -2.794347191e-05f, -2.799678030e-05f, -2.805003506e-05f, -2.810323610e-05f,
--2.815638333e-05f, -2.820947667e-05f, -2.826251602e-05f, -2.831550131e-05f, -2.836843244e-05f, -2.842130932e-05f, -2.847413189e-05f, -2.852690003e-05f, -2.857961368e-05f, -2.863227274e-05f,
--2.868487713e-05f, -2.873742676e-05f, -2.878992155e-05f, -2.884236141e-05f, -2.889474626e-05f, -2.894707601e-05f, -2.899935057e-05f, -2.905156987e-05f, -2.910373381e-05f, -2.915584231e-05f,
--2.920789529e-05f, -2.925989266e-05f, -2.931183433e-05f, -2.936372023e-05f, -2.941555026e-05f, -2.946732435e-05f, -2.951904241e-05f, -2.957070436e-05f, -2.962231010e-05f, -2.967385956e-05f,
--2.972535266e-05f, -2.977678931e-05f, -2.982816942e-05f, -2.987949292e-05f, -2.993075972e-05f, -2.998196973e-05f, -3.003312288e-05f, -3.008421908e-05f, -3.013525825e-05f, -3.018624030e-05f,
--3.023716515e-05f, -3.028803273e-05f, -3.033884294e-05f, -3.038959571e-05f, -3.044029095e-05f, -3.049092858e-05f, -3.054150852e-05f, -3.059203068e-05f, -3.064249499e-05f, -3.069290137e-05f,
--3.074324972e-05f, -3.079353998e-05f, -3.084377205e-05f, -3.089394586e-05f, -3.094406133e-05f, -3.099411838e-05f, -3.104411692e-05f, -3.109405687e-05f, -3.114393815e-05f, -3.119376069e-05f,
--3.124352440e-05f, -3.129322920e-05f, -3.134287501e-05f, -3.139246175e-05f, -3.144198935e-05f, -3.149145771e-05f, -3.154086677e-05f, -3.159021643e-05f, -3.163950663e-05f, -3.168873728e-05f,
--3.173790830e-05f, -3.178701962e-05f, -3.183607115e-05f, -3.188506282e-05f, -3.193399454e-05f, -3.198286624e-05f, -3.203167784e-05f, -3.208042926e-05f, -3.212912042e-05f, -3.217775124e-05f,
--3.222632165e-05f, -3.227483156e-05f, -3.232328091e-05f, -3.237166960e-05f, -3.241999757e-05f, -3.246826473e-05f, -3.251647101e-05f, -3.256461634e-05f, -3.261270062e-05f, -3.266072379e-05f,
--3.270868576e-05f, -3.275658647e-05f, -3.280442584e-05f, -3.285220378e-05f, -3.289992022e-05f, -3.294757508e-05f, -3.299516830e-05f, -3.304269978e-05f, -3.309016946e-05f, -3.313757726e-05f,
--3.318492310e-05f, -3.323220691e-05f, -3.327942861e-05f, -3.332658812e-05f, -3.337368538e-05f, -3.342072030e-05f, -3.346769281e-05f, -3.351460283e-05f, -3.356145030e-05f, -3.360823512e-05f,
--3.365495724e-05f, -3.370161657e-05f, -3.374821304e-05f, -3.379474658e-05f, -3.384121710e-05f, -3.388762455e-05f, -3.393396883e-05f, -3.398024989e-05f, -3.402646764e-05f, -3.407262201e-05f,
--3.411871292e-05f, -3.416474031e-05f, -3.421070410e-05f, -3.425660422e-05f, -3.430244059e-05f, -3.434821314e-05f, -3.439392179e-05f, -3.443956649e-05f, -3.448514714e-05f, -3.453066368e-05f,
--3.457611604e-05f, -3.462150414e-05f, -3.466682792e-05f, -3.471208729e-05f, -3.475728219e-05f, -3.480241255e-05f, -3.484747829e-05f, -3.489247934e-05f, -3.493741563e-05f, -3.498228710e-05f,
--3.502709366e-05f, -3.507183524e-05f, -3.511651179e-05f, -3.516112321e-05f, -3.520566945e-05f, -3.525015043e-05f, -3.529456609e-05f, -3.533891635e-05f, -3.538320113e-05f, -3.542742038e-05f,
--3.547157402e-05f, -3.551566199e-05f, -3.555968420e-05f, -3.560364059e-05f, -3.564753110e-05f, -3.569135564e-05f, -3.573511416e-05f, -3.577880659e-05f, -3.582243284e-05f, -3.586599287e-05f,
--3.590948659e-05f, -3.595291393e-05f, -3.599627484e-05f, -3.603956923e-05f, -3.608279705e-05f, -3.612595822e-05f, -3.616905268e-05f, -3.621208035e-05f, -3.625504117e-05f, -3.629793507e-05f,
--3.634076199e-05f, -3.638352185e-05f, -3.642621460e-05f, -3.646884015e-05f, -3.651139845e-05f, -3.655388942e-05f, -3.659631300e-05f, -3.663866913e-05f, -3.668095774e-05f, -3.672317875e-05f,
--3.676533211e-05f, -3.680741774e-05f, -3.684943558e-05f, -3.689138557e-05f, -3.693326764e-05f, -3.697508172e-05f, -3.701682775e-05f, -3.705850566e-05f, -3.710011538e-05f, -3.714165686e-05f,
--3.718313002e-05f, -3.722453480e-05f, -3.726587114e-05f, -3.730713897e-05f, -3.734833822e-05f, -3.738946883e-05f, -3.743053075e-05f, -3.747152389e-05f, -3.751244820e-05f, -3.755330361e-05f,
--3.759409007e-05f, -3.763480750e-05f, -3.767545584e-05f, -3.771603503e-05f, -3.775654501e-05f, -3.779698571e-05f, -3.783735707e-05f, -3.787765902e-05f, -3.791789151e-05f, -3.795805446e-05f,
--3.799814782e-05f, -3.803817153e-05f, -3.807812552e-05f, -3.811800973e-05f, -3.815782409e-05f, -3.819756855e-05f, -3.823724305e-05f, -3.827684751e-05f, -3.831638189e-05f, -3.835584611e-05f,
--3.839524012e-05f, -3.843456386e-05f, -3.847381726e-05f, -3.851300026e-05f, -3.855211281e-05f, -3.859115483e-05f, -3.863012628e-05f, -3.866902709e-05f, -3.870785719e-05f, -3.874661654e-05f,
--3.878530507e-05f, -3.882392271e-05f, -3.886246941e-05f, -3.890094512e-05f, -3.893934976e-05f, -3.897768329e-05f, -3.901594563e-05f, -3.905413674e-05f, -3.909225654e-05f, -3.913030500e-05f,
--3.916828203e-05f, -3.920618760e-05f, -3.924402163e-05f, -3.928178406e-05f, -3.931947485e-05f, -3.935709393e-05f, -3.939464125e-05f, -3.943211674e-05f, -3.946952035e-05f, -3.950685202e-05f,
--3.954411169e-05f, -3.958129931e-05f, -3.961841481e-05f, -3.965545815e-05f, -3.969242926e-05f, -3.972932808e-05f, -3.976615457e-05f, -3.980290866e-05f, -3.983959030e-05f, -3.987619943e-05f,
--3.991273599e-05f, -3.994919993e-05f, -3.998559119e-05f, -4.002190972e-05f, -4.005815546e-05f, -4.009432835e-05f, -4.013042834e-05f, -4.016645538e-05f, -4.020240941e-05f, -4.023829036e-05f,
--4.027409820e-05f, -4.030983286e-05f, -4.034549429e-05f, -4.038108244e-05f, -4.041659724e-05f, -4.045203865e-05f, -4.048740661e-05f, -4.052270107e-05f, -4.055792198e-05f, -4.059306927e-05f,
--4.062814290e-05f, -4.066314281e-05f, -4.069806895e-05f, -4.073292127e-05f, -4.076769971e-05f, -4.080240422e-05f, -4.083703475e-05f, -4.087159124e-05f, -4.090607364e-05f, -4.094048191e-05f,
--4.097481598e-05f, -4.100907580e-05f, -4.104326133e-05f, -4.107737251e-05f, -4.111140929e-05f, -4.114537161e-05f, -4.117925943e-05f, -4.121307270e-05f, -4.124681136e-05f, -4.128047536e-05f,
--4.131406466e-05f, -4.134757919e-05f, -4.138101892e-05f, -4.141438378e-05f, -4.144767373e-05f, -4.148088872e-05f, -4.151402870e-05f, -4.154709362e-05f, -4.158008343e-05f, -4.161299807e-05f,
--4.164583751e-05f, -4.167860168e-05f, -4.171129054e-05f, -4.174390405e-05f, -4.177644214e-05f, -4.180890478e-05f, -4.184129192e-05f, -4.187360350e-05f, -4.190583947e-05f, -4.193799980e-05f,
--4.197008442e-05f, -4.200209330e-05f, -4.203402638e-05f, -4.206588362e-05f, -4.209766497e-05f, -4.212937037e-05f, -4.216099979e-05f, -4.219255318e-05f, -4.222403049e-05f, -4.225543166e-05f,
--4.228675667e-05f, -4.231800545e-05f, -4.234917796e-05f, -4.238027416e-05f, -4.241129400e-05f, -4.244223743e-05f, -4.247310440e-05f, -4.250389488e-05f, -4.253460881e-05f, -4.256524615e-05f,
--4.259580685e-05f, -4.262629087e-05f, -4.265669817e-05f, -4.268702869e-05f, -4.271728240e-05f, -4.274745924e-05f, -4.277755917e-05f, -4.280758216e-05f, -4.283752815e-05f, -4.286739710e-05f,
--4.289718896e-05f, -4.292690369e-05f, -4.295654126e-05f, -4.298610160e-05f, -4.301558469e-05f, -4.304499048e-05f, -4.307431891e-05f, -4.310356996e-05f, -4.313274358e-05f, -4.316183972e-05f,
--4.319085834e-05f, -4.321979940e-05f, -4.324866285e-05f, -4.327744867e-05f, -4.330615679e-05f, -4.333478718e-05f, -4.336333980e-05f, -4.339181461e-05f, -4.342021156e-05f, -4.344853061e-05f,
--4.347677172e-05f, -4.350493486e-05f, -4.353301997e-05f, -4.356102702e-05f, -4.358895597e-05f, -4.361680677e-05f, -4.364457939e-05f, -4.367227379e-05f, -4.369988992e-05f, -4.372742774e-05f,
--4.375488722e-05f, -4.378226832e-05f, -4.380957099e-05f, -4.383679520e-05f, -4.386394090e-05f, -4.389100806e-05f, -4.391799664e-05f, -4.394490660e-05f, -4.397173789e-05f, -4.399849049e-05f,
--4.402516435e-05f, -4.405175944e-05f, -4.407827571e-05f, -4.410471312e-05f, -4.413107165e-05f, -4.415735125e-05f, -4.418355188e-05f, -4.420967351e-05f, -4.423571610e-05f, -4.426167961e-05f,
--4.428756400e-05f, -4.431336924e-05f, -4.433909530e-05f, -4.436474212e-05f, -4.439030968e-05f, -4.441579794e-05f, -4.444120687e-05f, -4.446653642e-05f, -4.449178657e-05f, -4.451695727e-05f,
--4.454204849e-05f, -4.456706019e-05f, -4.459199234e-05f, -4.461684491e-05f, -4.464161786e-05f, -4.466631114e-05f, -4.469092474e-05f, -4.471545861e-05f, -4.473991272e-05f, -4.476428703e-05f,
--4.478858151e-05f, -4.481279613e-05f, -4.483693084e-05f, -4.486098563e-05f, -4.488496045e-05f, -4.490885527e-05f, -4.493267005e-05f, -4.495640477e-05f, -4.498005939e-05f, -4.500363388e-05f,
--4.502712819e-05f, -4.505054231e-05f, -4.507387620e-05f, -4.509712982e-05f, -4.512030315e-05f, -4.514339615e-05f, -4.516640878e-05f, -4.518934103e-05f, -4.521219284e-05f, -4.523496420e-05f,
--4.525765508e-05f, -4.528026543e-05f, -4.530279523e-05f, -4.532524445e-05f, -4.534761306e-05f, -4.536990103e-05f, -4.539210831e-05f, -4.541423490e-05f, -4.543628075e-05f, -4.545824583e-05f,
--4.548013012e-05f, -4.550193358e-05f, -4.552365619e-05f, -4.554529791e-05f, -4.556685871e-05f, -4.558833858e-05f, -4.560973746e-05f, -4.563105535e-05f, -4.565229220e-05f, -4.567344800e-05f,
--4.569452270e-05f, -4.571551629e-05f, -4.573642873e-05f, -4.575726000e-05f, -4.577801006e-05f, -4.579867889e-05f, -4.581926647e-05f, -4.583977276e-05f, -4.586019774e-05f, -4.588054137e-05f,
--4.590080364e-05f, -4.592098451e-05f, -4.594108396e-05f, -4.596110196e-05f, -4.598103849e-05f, -4.600089351e-05f, -4.602066700e-05f, -4.604035894e-05f, -4.605996930e-05f, -4.607949805e-05f,
--4.609894517e-05f, -4.611831063e-05f, -4.613759441e-05f, -4.615679648e-05f, -4.617591681e-05f, -4.619495538e-05f, -4.621391217e-05f, -4.623278715e-05f, -4.625158030e-05f, -4.627029158e-05f,
--4.628892099e-05f, -4.630746848e-05f, -4.632593405e-05f, -4.634431766e-05f, -4.636261929e-05f, -4.638083892e-05f, -4.639897652e-05f, -4.641703207e-05f, -4.643500555e-05f, -4.645289693e-05f,
--4.647070620e-05f, -4.648843332e-05f, -4.650607828e-05f, -4.652364105e-05f, -4.654112161e-05f, -4.655851995e-05f, -4.657583602e-05f, -4.659306983e-05f, -4.661022133e-05f, -4.662729052e-05f,
--4.664427737e-05f, -4.666118185e-05f, -4.667800396e-05f, -4.669474365e-05f, -4.671140093e-05f, -4.672797576e-05f, -4.674446812e-05f, -4.676087800e-05f, -4.677720537e-05f, -4.679345021e-05f,
--4.680961250e-05f, -4.682569223e-05f, -4.684168937e-05f, -4.685760391e-05f, -4.687343582e-05f, -4.688918508e-05f, -4.690485168e-05f, -4.692043560e-05f, -4.693593681e-05f, -4.695135530e-05f,
--4.696669106e-05f, -4.698194405e-05f, -4.699711427e-05f, -4.701220170e-05f, -4.702720631e-05f, -4.704212809e-05f, -4.705696702e-05f, -4.707172309e-05f, -4.708639628e-05f, -4.710098656e-05f,
--4.711549393e-05f, -4.712991836e-05f, -4.714425984e-05f, -4.715851836e-05f, -4.717269388e-05f, -4.718678641e-05f, -4.720079592e-05f, -4.721472240e-05f, -4.722856583e-05f, -4.724232619e-05f,
--4.725600347e-05f, -4.726959766e-05f, -4.728310873e-05f, -4.729653668e-05f, -4.730988148e-05f, -4.732314313e-05f, -4.733632160e-05f, -4.734941689e-05f, -4.736242898e-05f, -4.737535785e-05f,
--4.738820349e-05f, -4.740096589e-05f, -4.741364503e-05f, -4.742624090e-05f, -4.743875349e-05f, -4.745118277e-05f, -4.746352874e-05f, -4.747579139e-05f, -4.748797070e-05f, -4.750006666e-05f,
--4.751207925e-05f, -4.752400847e-05f, -4.753585430e-05f, -4.754761672e-05f, -4.755929574e-05f, -4.757089132e-05f, -4.758240347e-05f, -4.759383217e-05f, -4.760517741e-05f, -4.761643918e-05f,
--4.762761746e-05f, -4.763871225e-05f, -4.764972353e-05f, -4.766065130e-05f, -4.767149553e-05f, -4.768225623e-05f, -4.769293338e-05f, -4.770352697e-05f, -4.771403699e-05f, -4.772446344e-05f,
--4.773480629e-05f, -4.774506555e-05f, -4.775524119e-05f, -4.776533322e-05f, -4.777534163e-05f, -4.778526639e-05f, -4.779510751e-05f, -4.780486498e-05f, -4.781453878e-05f, -4.782412892e-05f,
--4.783363537e-05f, -4.784305814e-05f, -4.785239721e-05f, -4.786165257e-05f, -4.787082422e-05f, -4.787991216e-05f, -4.788891637e-05f, -4.789783684e-05f, -4.790667357e-05f, -4.791542655e-05f,
--4.792409578e-05f, -4.793268124e-05f, -4.794118294e-05f, -4.794960086e-05f, -4.795793500e-05f, -4.796618535e-05f, -4.797435190e-05f, -4.798243466e-05f, -4.799043361e-05f, -4.799834874e-05f,
--4.800618006e-05f, -4.801392756e-05f, -4.802159123e-05f, -4.802917107e-05f, -4.803666707e-05f, -4.804407922e-05f, -4.805140753e-05f, -4.805865199e-05f, -4.806581260e-05f, -4.807288934e-05f,
--4.807988222e-05f, -4.808679123e-05f, -4.809361637e-05f, -4.810035763e-05f, -4.810701502e-05f, -4.811358852e-05f, -4.812007814e-05f, -4.812648387e-05f, -4.813280570e-05f, -4.813904365e-05f,
--4.814519770e-05f, -4.815126785e-05f, -4.815725409e-05f, -4.816315644e-05f, -4.816897488e-05f, -4.817470941e-05f, -4.818036003e-05f, -4.818592675e-05f, -4.819140955e-05f, -4.819680844e-05f,
--4.820212341e-05f, -4.820735447e-05f, -4.821250161e-05f, -4.821756484e-05f, -4.822254415e-05f, -4.822743954e-05f, -4.823225101e-05f, -4.823697857e-05f, -4.824162221e-05f, -4.824618193e-05f,
--4.825065773e-05f, -4.825504961e-05f, -4.825935758e-05f, -4.826358163e-05f, -4.826772177e-05f, -4.827177800e-05f, -4.827575031e-05f, -4.827963871e-05f, -4.828344320e-05f, -4.828716379e-05f,
--4.829080046e-05f, -4.829435324e-05f, -4.829782211e-05f, -4.830120708e-05f, -4.830450815e-05f, -4.830772533e-05f, -4.831085862e-05f, -4.831390801e-05f, -4.831687352e-05f, -4.831975515e-05f,
--4.832255289e-05f, -4.832526676e-05f, -4.832789676e-05f, -4.833044288e-05f, -4.833290514e-05f, -4.833528354e-05f, -4.833757808e-05f, -4.833978876e-05f, -4.834191560e-05f, -4.834395859e-05f,
--4.834591774e-05f, -4.834779305e-05f, -4.834958454e-05f, -4.835129220e-05f, -4.835291604e-05f, -4.835445606e-05f, -4.835591228e-05f, -4.835728469e-05f, -4.835857331e-05f, -4.835977813e-05f,
--4.836089917e-05f, -4.836193643e-05f, -4.836288991e-05f, -4.836375963e-05f, -4.836454560e-05f, -4.836524780e-05f, -4.836586627e-05f, -4.836640099e-05f, -4.836685198e-05f, -4.836721925e-05f,
--4.836750280e-05f, -4.836770265e-05f, -4.836781879e-05f, -4.836785124e-05f, -4.836780001e-05f, -4.836766510e-05f, -4.836744652e-05f, -4.836714429e-05f, -4.836675840e-05f, -4.836628887e-05f,
--4.836573571e-05f, -4.836509893e-05f, -4.836437853e-05f, -4.836357452e-05f, -4.836268692e-05f, -4.836171574e-05f, -4.836066098e-05f, -4.835952265e-05f, -4.835830077e-05f, -4.835699535e-05f,
--4.835560639e-05f, -4.835413390e-05f, -4.835257791e-05f, -4.835093841e-05f, -4.834921542e-05f, -4.834740894e-05f, -4.834551900e-05f, -4.834354561e-05f, -4.834148876e-05f, -4.833934848e-05f,
--4.833712478e-05f, -4.833481767e-05f, -4.833242716e-05f, -4.832995327e-05f, -4.832739600e-05f, -4.832475537e-05f, -4.832203140e-05f, -4.831922409e-05f, -4.831633345e-05f, -4.831335951e-05f,
--4.831030228e-05f, -4.830716176e-05f, -4.830393797e-05f, -4.830063092e-05f, -4.829724064e-05f, -4.829376713e-05f, -4.829021041e-05f, -4.828657049e-05f, -4.828284738e-05f, -4.827904110e-05f,
--4.827515168e-05f, -4.827117911e-05f, -4.826712341e-05f, -4.826298461e-05f, -4.825876271e-05f, -4.825445774e-05f, -4.825006970e-05f, -4.824559861e-05f, -4.824104449e-05f, -4.823640736e-05f,
--4.823168723e-05f, -4.822688411e-05f, -4.822199803e-05f, -4.821702899e-05f, -4.821197703e-05f, -4.820684215e-05f, -4.820162436e-05f, -4.819632370e-05f, -4.819094017e-05f, -4.818547380e-05f,
--4.817992459e-05f, -4.817429257e-05f, -4.816857776e-05f, -4.816278017e-05f, -4.815689982e-05f, -4.815093674e-05f, -4.814489093e-05f, -4.813876242e-05f, -4.813255122e-05f, -4.812625736e-05f,
--4.811988086e-05f, -4.811342172e-05f, -4.810687998e-05f, -4.810025565e-05f, -4.809354875e-05f, -4.808675930e-05f, -4.807988733e-05f, -4.807293284e-05f, -4.806589586e-05f, -4.805877642e-05f,
--4.805157453e-05f, -4.804429021e-05f, -4.803692348e-05f, -4.802947436e-05f, -4.802194288e-05f, -4.801432906e-05f, -4.800663291e-05f, -4.799885446e-05f, -4.799099373e-05f, -4.798305074e-05f,
--4.797502552e-05f, -4.796691808e-05f, -4.795872844e-05f, -4.795045664e-05f, -4.794210269e-05f, -4.793366661e-05f, -4.792514844e-05f, -4.791654818e-05f, -4.790786586e-05f, -4.789910151e-05f,
--4.789025515e-05f, -4.788132680e-05f, -4.787231649e-05f, -4.786322423e-05f, -4.785405006e-05f, -4.784479400e-05f, -4.783545607e-05f, -4.782603629e-05f, -4.781653470e-05f, -4.780695131e-05f,
--4.779728614e-05f, -4.778753924e-05f, -4.777771061e-05f, -4.776780028e-05f, -4.775780828e-05f, -4.774773464e-05f, -4.773757937e-05f, -4.772734252e-05f, -4.771702409e-05f, -4.770662412e-05f,
--4.769614263e-05f, -4.768557965e-05f, -4.767493520e-05f, -4.766420932e-05f, -4.765340202e-05f, -4.764251334e-05f, -4.763154331e-05f, -4.762049194e-05f, -4.760935926e-05f, -4.759814531e-05f,
--4.758685011e-05f, -4.757547368e-05f, -4.756401607e-05f, -4.755247728e-05f, -4.754085736e-05f, -4.752915632e-05f, -4.751737421e-05f, -4.750551104e-05f, -4.749356684e-05f, -4.748154165e-05f,
--4.746943548e-05f, -4.745724838e-05f, -4.744498037e-05f, -4.743263148e-05f, -4.742020173e-05f, -4.740769116e-05f, -4.739509980e-05f, -4.738242768e-05f, -4.736967482e-05f, -4.735684126e-05f,
--4.734392703e-05f, -4.733093215e-05f, -4.731785666e-05f, -4.730470059e-05f, -4.729146397e-05f, -4.727814683e-05f, -4.726474920e-05f, -4.725127111e-05f, -4.723771259e-05f, -4.722407367e-05f,
--4.721035440e-05f, -4.719655479e-05f, -4.718267487e-05f, -4.716871469e-05f, -4.715467428e-05f, -4.714055365e-05f, -4.712635286e-05f, -4.711207192e-05f, -4.709771088e-05f, -4.708326976e-05f,
--4.706874860e-05f, -4.705414743e-05f, -4.703946629e-05f, -4.702470520e-05f, -4.700986420e-05f, -4.699494333e-05f, -4.697994262e-05f, -4.696486209e-05f, -4.694970180e-05f, -4.693446176e-05f,
--4.691914202e-05f, -4.690374260e-05f, -4.688826355e-05f, -4.687270490e-05f, -4.685706667e-05f, -4.684134892e-05f, -4.682555167e-05f, -4.680967495e-05f, -4.679371881e-05f, -4.677768327e-05f,
--4.676156838e-05f, -4.674537416e-05f, -4.672910066e-05f, -4.671274792e-05f, -4.669631596e-05f, -4.667980482e-05f, -4.666321454e-05f, -4.664654516e-05f, -4.662979671e-05f, -4.661296923e-05f,
--4.659606275e-05f, -4.657907732e-05f, -4.656201297e-05f, -4.654486974e-05f, -4.652764766e-05f, -4.651034677e-05f, -4.649296712e-05f, -4.647550873e-05f, -4.645797165e-05f, -4.644035591e-05f,
--4.642266156e-05f, -4.640488863e-05f, -4.638703715e-05f, -4.636910717e-05f, -4.635109873e-05f, -4.633301187e-05f, -4.631484662e-05f, -4.629660302e-05f, -4.627828111e-05f, -4.625988094e-05f,
--4.624140254e-05f, -4.622284595e-05f, -4.620421121e-05f, -4.618549836e-05f, -4.616670745e-05f, -4.614783850e-05f, -4.612889157e-05f, -4.610986669e-05f, -4.609076390e-05f, -4.607158324e-05f,
--4.605232476e-05f, -4.603298849e-05f, -4.601357448e-05f, -4.599408277e-05f, -4.597451340e-05f, -4.595486640e-05f, -4.593514183e-05f, -4.591533973e-05f, -4.589546012e-05f, -4.587550307e-05f,
--4.585546860e-05f, -4.583535677e-05f, -4.581516761e-05f, -4.579490117e-05f, -4.577455749e-05f, -4.575413661e-05f, -4.573363858e-05f, -4.571306343e-05f, -4.569241122e-05f, -4.567168198e-05f,
--4.565087576e-05f, -4.562999260e-05f, -4.560903255e-05f, -4.558799565e-05f, -4.556688194e-05f, -4.554569146e-05f, -4.552442427e-05f, -4.550308041e-05f, -4.548165991e-05f, -4.546016283e-05f,
--4.543858921e-05f, -4.541693910e-05f, -4.539521253e-05f, -4.537340956e-05f, -4.535153023e-05f, -4.532957459e-05f, -4.530754267e-05f, -4.528543454e-05f, -4.526325022e-05f, -4.524098977e-05f,
--4.521865324e-05f, -4.519624067e-05f, -4.517375210e-05f, -4.515118759e-05f, -4.512854717e-05f, -4.510583091e-05f, -4.508303883e-05f, -4.506017100e-05f, -4.503722745e-05f, -4.501420823e-05f,
--4.499111340e-05f, -4.496794299e-05f, -4.494469706e-05f, -4.492137566e-05f, -4.489797883e-05f, -4.487450661e-05f, -4.485095906e-05f, -4.482733623e-05f, -4.480363816e-05f, -4.477986491e-05f,
--4.475601651e-05f, -4.473209303e-05f, -4.470809450e-05f, -4.468402098e-05f, -4.465987252e-05f, -4.463564916e-05f, -4.461135096e-05f, -4.458697796e-05f, -4.456253021e-05f, -4.453800777e-05f,
--4.451341068e-05f, -4.448873899e-05f, -4.446399276e-05f, -4.443917203e-05f, -4.441427685e-05f, -4.438930727e-05f, -4.436426335e-05f, -4.433914514e-05f, -4.431395268e-05f, -4.428868603e-05f,
--4.426334523e-05f, -4.423793035e-05f, -4.421244142e-05f, -4.418687850e-05f, -4.416124165e-05f, -4.413553092e-05f, -4.410974634e-05f, -4.408388799e-05f, -4.405795591e-05f, -4.403195015e-05f,
--4.400587076e-05f, -4.397971780e-05f, -4.395349132e-05f, -4.392719137e-05f, -4.390081801e-05f, -4.387437129e-05f, -4.384785125e-05f, -4.382125796e-05f, -4.379459147e-05f, -4.376785182e-05f,
--4.374103908e-05f, -4.371415330e-05f, -4.368719453e-05f, -4.366016282e-05f, -4.363305823e-05f, -4.360588082e-05f, -4.357863063e-05f, -4.355130772e-05f, -4.352391215e-05f, -4.349644397e-05f,
--4.346890323e-05f, -4.344129000e-05f, -4.341360432e-05f, -4.338584625e-05f, -4.335801584e-05f, -4.333011315e-05f, -4.330213824e-05f, -4.327409117e-05f, -4.324597197e-05f, -4.321778072e-05f,
--4.318951747e-05f, -4.316118227e-05f, -4.313277519e-05f, -4.310429627e-05f, -4.307574557e-05f, -4.304712315e-05f, -4.301842907e-05f, -4.298966338e-05f, -4.296082615e-05f, -4.293191741e-05f,
--4.290293725e-05f, -4.287388570e-05f, -4.284476283e-05f, -4.281556869e-05f, -4.278630335e-05f, -4.275696686e-05f, -4.272755928e-05f, -4.269808067e-05f, -4.266853108e-05f, -4.263891057e-05f,
--4.260921920e-05f, -4.257945703e-05f, -4.254962412e-05f, -4.251972053e-05f, -4.248974631e-05f, -4.245970152e-05f, -4.242958623e-05f, -4.239940049e-05f, -4.236914435e-05f, -4.233881789e-05f,
--4.230842116e-05f, -4.227795422e-05f, -4.224741713e-05f, -4.221680994e-05f, -4.218613272e-05f, -4.215538553e-05f, -4.212456843e-05f, -4.209368148e-05f, -4.206272474e-05f, -4.203169827e-05f,
--4.200060212e-05f, -4.196943637e-05f, -4.193820107e-05f, -4.190689628e-05f, -4.187552206e-05f, -4.184407848e-05f, -4.181256559e-05f, -4.178098346e-05f, -4.174933215e-05f, -4.171761172e-05f,
--4.168582223e-05f, -4.165396374e-05f, -4.162203632e-05f, -4.159004003e-05f, -4.155797493e-05f, -4.152584107e-05f, -4.149363854e-05f, -4.146136738e-05f, -4.142902765e-05f, -4.139661943e-05f,
--4.136414278e-05f, -4.133159775e-05f, -4.129898442e-05f, -4.126630283e-05f, -4.123355307e-05f, -4.120073519e-05f, -4.116784925e-05f, -4.113489531e-05f, -4.110187345e-05f, -4.106878373e-05f,
--4.103562620e-05f, -4.100240094e-05f, -4.096910800e-05f, -4.093574746e-05f, -4.090231937e-05f, -4.086882381e-05f, -4.083526083e-05f, -4.080163049e-05f, -4.076793288e-05f, -4.073416804e-05f,
--4.070033605e-05f, -4.066643697e-05f, -4.063247086e-05f, -4.059843779e-05f, -4.056433783e-05f, -4.053017105e-05f, -4.049593749e-05f, -4.046163725e-05f, -4.042727037e-05f, -4.039283692e-05f,
--4.035833698e-05f, -4.032377061e-05f, -4.028913787e-05f, -4.025443883e-05f, -4.021967355e-05f, -4.018484211e-05f, -4.014994457e-05f, -4.011498100e-05f, -4.007995146e-05f, -4.004485603e-05f,
--4.000969476e-05f, -3.997446773e-05f, -3.993917500e-05f, -3.990381664e-05f, -3.986839272e-05f, -3.983290331e-05f, -3.979734847e-05f, -3.976172827e-05f, -3.972604279e-05f, -3.969029208e-05f,
--3.965447622e-05f, -3.961859528e-05f, -3.958264931e-05f, -3.954663841e-05f, -3.951056262e-05f, -3.947442202e-05f, -3.943821668e-05f, -3.940194667e-05f, -3.936561205e-05f, -3.932921290e-05f,
--3.929274929e-05f, -3.925622128e-05f, -3.921962895e-05f, -3.918297236e-05f, -3.914625158e-05f, -3.910946669e-05f, -3.907261775e-05f, -3.903570484e-05f, -3.899872802e-05f, -3.896168736e-05f,
--3.892458294e-05f, -3.888741482e-05f, -3.885018308e-05f, -3.881288779e-05f, -3.877552901e-05f, -3.873810682e-05f, -3.870062129e-05f, -3.866307249e-05f, -3.862546050e-05f, -3.858778537e-05f,
--3.855004719e-05f, -3.851224603e-05f, -3.847438195e-05f, -3.843645503e-05f, -3.839846534e-05f, -3.836041296e-05f, -3.832229795e-05f, -3.828412039e-05f, -3.824588034e-05f, -3.820757789e-05f,
--3.816921311e-05f, -3.813078605e-05f, -3.809229681e-05f, -3.805374545e-05f, -3.801513205e-05f, -3.797645667e-05f, -3.793771939e-05f, -3.789892029e-05f, -3.786005943e-05f, -3.782113690e-05f,
--3.778215276e-05f, -3.774310708e-05f, -3.770399995e-05f, -3.766483143e-05f, -3.762560160e-05f, -3.758631053e-05f, -3.754695830e-05f, -3.750754498e-05f, -3.746807064e-05f, -3.742853537e-05f,
--3.738893923e-05f, -3.734928229e-05f, -3.730956464e-05f, -3.726978635e-05f, -3.722994748e-05f, -3.719004813e-05f, -3.715008836e-05f, -3.711006824e-05f, -3.706998786e-05f, -3.702984728e-05f,
--3.698964659e-05f, -3.694938586e-05f, -3.690906516e-05f, -3.686868457e-05f, -3.682824417e-05f, -3.678774403e-05f, -3.674718423e-05f, -3.670656484e-05f, -3.666588594e-05f, -3.662514760e-05f,
--3.658434991e-05f, -3.654349294e-05f, -3.650257677e-05f, -3.646160146e-05f, -3.642056711e-05f, -3.637947378e-05f, -3.633832155e-05f, -3.629711050e-05f, -3.625584071e-05f, -3.621451225e-05f,
--3.617312521e-05f, -3.613167965e-05f, -3.609017566e-05f, -3.604861332e-05f, -3.600699269e-05f, -3.596531386e-05f, -3.592357692e-05f, -3.588178192e-05f, -3.583992896e-05f, -3.579801811e-05f,
--3.575604945e-05f, -3.571402306e-05f, -3.567193901e-05f, -3.562979739e-05f, -3.558759827e-05f, -3.554534174e-05f, -3.550302786e-05f, -3.546065673e-05f, -3.541822841e-05f, -3.537574299e-05f,
--3.533320055e-05f, -3.529060116e-05f, -3.524794491e-05f, -3.520523188e-05f, -3.516246214e-05f, -3.511963577e-05f, -3.507675286e-05f, -3.503381348e-05f, -3.499081771e-05f, -3.494776564e-05f,
--3.490465734e-05f, -3.486149289e-05f, -3.481827238e-05f, -3.477499588e-05f, -3.473166348e-05f, -3.468827525e-05f, -3.464483127e-05f, -3.460133164e-05f, -3.455777642e-05f, -3.451416570e-05f,
--3.447049955e-05f, -3.442677807e-05f, -3.438300133e-05f, -3.433916941e-05f, -3.429528239e-05f, -3.425134036e-05f, -3.420734340e-05f, -3.416329158e-05f, -3.411918499e-05f, -3.407502371e-05f,
--3.403080783e-05f, -3.398653742e-05f, -3.394221257e-05f, -3.389783336e-05f, -3.385339987e-05f, -3.380891218e-05f, -3.376437038e-05f, -3.371977455e-05f, -3.367512477e-05f, -3.363042112e-05f,
--3.358566368e-05f, -3.354085255e-05f, -3.349598780e-05f, -3.345106951e-05f, -3.340609777e-05f, -3.336107266e-05f, -3.331599426e-05f, -3.327086267e-05f, -3.322567795e-05f, -3.318044019e-05f,
--3.313514949e-05f, -3.308980591e-05f, -3.304440955e-05f, -3.299896049e-05f, -3.295345881e-05f, -3.290790459e-05f, -3.286229793e-05f, -3.281663890e-05f, -3.277092759e-05f, -3.272516408e-05f,
--3.267934846e-05f, -3.263348082e-05f, -3.258756122e-05f, -3.254158977e-05f, -3.249556654e-05f, -3.244949163e-05f, -3.240336511e-05f, -3.235718707e-05f, -3.231095759e-05f, -3.226467676e-05f,
--3.221834467e-05f, -3.217196140e-05f, -3.212552703e-05f, -3.207904166e-05f, -3.203250536e-05f, -3.198591823e-05f, -3.193928034e-05f, -3.189259179e-05f, -3.184585265e-05f, -3.179906302e-05f,
--3.175222298e-05f, -3.170533262e-05f, -3.165839202e-05f, -3.161140128e-05f, -3.156436046e-05f, -3.151726967e-05f, -3.147012899e-05f, -3.142293850e-05f, -3.137569830e-05f, -3.132840846e-05f,
--3.128106908e-05f, -3.123368024e-05f, -3.118624203e-05f, -3.113875453e-05f, -3.109121784e-05f, -3.104363204e-05f, -3.099599721e-05f, -3.094831345e-05f, -3.090058084e-05f, -3.085279947e-05f,
--3.080496942e-05f, -3.075709079e-05f, -3.070916366e-05f, -3.066118812e-05f, -3.061316426e-05f, -3.056509217e-05f, -3.051697192e-05f, -3.046880362e-05f, -3.042058735e-05f, -3.037232319e-05f,
--3.032401124e-05f, -3.027565159e-05f, -3.022724432e-05f, -3.017878951e-05f, -3.013028727e-05f, -3.008173768e-05f, -3.003314082e-05f, -2.998449679e-05f, -2.993580567e-05f, -2.988706756e-05f,
--2.983828254e-05f, -2.978945070e-05f, -2.974057213e-05f, -2.969164692e-05f, -2.964267516e-05f, -2.959365694e-05f, -2.954459234e-05f, -2.949548146e-05f, -2.944632439e-05f, -2.939712122e-05f,
--2.934787203e-05f, -2.929857692e-05f, -2.924923597e-05f, -2.919984928e-05f, -2.915041694e-05f, -2.910093903e-05f, -2.905141565e-05f, -2.900184688e-05f, -2.895223282e-05f, -2.890257355e-05f,
--2.885286918e-05f, -2.880311978e-05f, -2.875332544e-05f, -2.870348627e-05f, -2.865360235e-05f, -2.860367376e-05f, -2.855370061e-05f, -2.850368298e-05f, -2.845362096e-05f, -2.840351465e-05f,
--2.835336413e-05f, -2.830316950e-05f, -2.825293084e-05f, -2.820264825e-05f, -2.815232183e-05f, -2.810195165e-05f, -2.805153782e-05f, -2.800108042e-05f, -2.795057954e-05f, -2.790003529e-05f,
--2.784944774e-05f, -2.779881700e-05f, -2.774814315e-05f, -2.769742628e-05f, -2.764666649e-05f, -2.759586387e-05f, -2.754501851e-05f, -2.749413051e-05f, -2.744319995e-05f, -2.739222693e-05f,
--2.734121154e-05f, -2.729015387e-05f, -2.723905402e-05f, -2.718791208e-05f, -2.713672814e-05f, -2.708550229e-05f, -2.703423462e-05f, -2.698292524e-05f, -2.693157423e-05f, -2.688018168e-05f,
--2.682874770e-05f, -2.677727236e-05f, -2.672575577e-05f, -2.667419802e-05f, -2.662259919e-05f, -2.657095939e-05f, -2.651927871e-05f, -2.646755724e-05f, -2.641579508e-05f, -2.636399231e-05f,
--2.631214904e-05f, -2.626026535e-05f, -2.620834134e-05f, -2.615637711e-05f, -2.610437274e-05f, -2.605232833e-05f, -2.600024398e-05f, -2.594811978e-05f, -2.589595582e-05f, -2.584375220e-05f,
--2.579150901e-05f, -2.573922635e-05f, -2.568690431e-05f, -2.563454298e-05f, -2.558214247e-05f, -2.552970285e-05f, -2.547722424e-05f, -2.542470672e-05f, -2.537215039e-05f, -2.531955534e-05f,
--2.526692167e-05f, -2.521424947e-05f, -2.516153884e-05f, -2.510878987e-05f, -2.505600266e-05f, -2.500317731e-05f, -2.495031390e-05f, -2.489741253e-05f, -2.484447331e-05f, -2.479149631e-05f,
--2.473848165e-05f, -2.468542941e-05f, -2.463233970e-05f, -2.457921260e-05f, -2.452604821e-05f, -2.447284662e-05f, -2.441960795e-05f, -2.436633227e-05f, -2.431301968e-05f, -2.425967029e-05f,
--2.420628418e-05f, -2.415286145e-05f, -2.409940221e-05f, -2.404590654e-05f, -2.399237454e-05f, -2.393880631e-05f, -2.388520194e-05f, -2.383156153e-05f, -2.377788518e-05f, -2.372417298e-05f,
--2.367042503e-05f, -2.361664142e-05f, -2.356282226e-05f, -2.350896764e-05f, -2.345507765e-05f, -2.340115240e-05f, -2.334719197e-05f, -2.329319647e-05f, -2.323916600e-05f, -2.318510064e-05f,
--2.313100050e-05f, -2.307686568e-05f, -2.302269627e-05f, -2.296849236e-05f, -2.291425407e-05f, -2.285998147e-05f, -2.280567468e-05f, -2.275133378e-05f, -2.269695888e-05f, -2.264255007e-05f,
--2.258810745e-05f, -2.253363112e-05f, -2.247912117e-05f, -2.242457771e-05f, -2.237000083e-05f, -2.231539062e-05f, -2.226074720e-05f, -2.220607064e-05f, -2.215136106e-05f, -2.209661855e-05f,
--2.204184321e-05f, -2.198703513e-05f, -2.193219441e-05f, -2.187732116e-05f, -2.182241547e-05f, -2.176747744e-05f, -2.171250716e-05f, -2.165750474e-05f, -2.160247028e-05f, -2.154740386e-05f,
--2.149230560e-05f, -2.143717558e-05f, -2.138201391e-05f, -2.132682069e-05f, -2.127159602e-05f, -2.121633998e-05f, -2.116105269e-05f, -2.110573424e-05f, -2.105038473e-05f, -2.099500426e-05f,
--2.093959292e-05f, -2.088415083e-05f, -2.082867806e-05f, -2.077317474e-05f, -2.071764094e-05f, -2.066207678e-05f, -2.060648235e-05f, -2.055085775e-05f, -2.049520309e-05f, -2.043951845e-05f,
--2.038380394e-05f, -2.032805966e-05f, -2.027228570e-05f, -2.021648218e-05f, -2.016064918e-05f, -2.010478681e-05f, -2.004889516e-05f, -1.999297434e-05f, -1.993702444e-05f, -1.988104557e-05f,
--1.982503782e-05f, -1.976900130e-05f, -1.971293610e-05f, -1.965684233e-05f, -1.960072008e-05f, -1.954456945e-05f, -1.948839055e-05f, -1.943218347e-05f, -1.937594832e-05f, -1.931968519e-05f,
--1.926339418e-05f, -1.920707540e-05f, -1.915072895e-05f, -1.909435491e-05f, -1.903795341e-05f, -1.898152453e-05f, -1.892506837e-05f, -1.886858504e-05f, -1.881207464e-05f, -1.875553727e-05f,
--1.869897302e-05f, -1.864238200e-05f, -1.858576432e-05f, -1.852912006e-05f, -1.847244933e-05f, -1.841575223e-05f, -1.835902886e-05f, -1.830227933e-05f, -1.824550373e-05f, -1.818870216e-05f,
--1.813187473e-05f, -1.807502153e-05f, -1.801814267e-05f, -1.796123825e-05f, -1.790430837e-05f, -1.784735312e-05f, -1.779037262e-05f, -1.773336696e-05f, -1.767633625e-05f, -1.761928057e-05f,
--1.756220005e-05f, -1.750509477e-05f, -1.744796484e-05f, -1.739081035e-05f, -1.733363142e-05f, -1.727642814e-05f, -1.721920062e-05f, -1.716194895e-05f, -1.710467323e-05f, -1.704737358e-05f,
--1.699005008e-05f, -1.693270284e-05f, -1.687533197e-05f, -1.681793756e-05f, -1.676051972e-05f, -1.670307855e-05f, -1.664561414e-05f, -1.658812661e-05f, -1.653061605e-05f, -1.647308256e-05f,
--1.641552625e-05f, -1.635794722e-05f, -1.630034557e-05f, -1.624272140e-05f, -1.618507481e-05f, -1.612740592e-05f, -1.606971481e-05f, -1.601200159e-05f, -1.595426636e-05f, -1.589650923e-05f,
--1.583873029e-05f, -1.578092966e-05f, -1.572310742e-05f, -1.566526369e-05f, -1.560739856e-05f, -1.554951214e-05f, -1.549160453e-05f, -1.543367583e-05f, -1.537572615e-05f, -1.531775558e-05f,
--1.525976424e-05f, -1.520175221e-05f, -1.514371961e-05f, -1.508566654e-05f, -1.502759310e-05f, -1.496949938e-05f, -1.491138551e-05f, -1.485325157e-05f, -1.479509767e-05f, -1.473692391e-05f,
--1.467873039e-05f, -1.462051723e-05f, -1.456228451e-05f, -1.450403235e-05f, -1.444576084e-05f, -1.438747009e-05f, -1.432916020e-05f, -1.427083127e-05f, -1.421248342e-05f, -1.415411673e-05f,
--1.409573131e-05f, -1.403732727e-05f, -1.397890471e-05f, -1.392046373e-05f, -1.386200444e-05f, -1.380352693e-05f, -1.374503131e-05f, -1.368651769e-05f, -1.362798616e-05f, -1.356943683e-05f,
--1.351086981e-05f, -1.345228519e-05f, -1.339368307e-05f, -1.333506358e-05f, -1.327642679e-05f, -1.321777283e-05f, -1.315910178e-05f, -1.310041376e-05f, -1.304170887e-05f, -1.298298721e-05f,
--1.292424889e-05f, -1.286549400e-05f, -1.280672266e-05f, -1.274793495e-05f, -1.268913100e-05f, -1.263031090e-05f, -1.257147475e-05f, -1.251262267e-05f, -1.245375474e-05f, -1.239487108e-05f,
--1.233597178e-05f, -1.227705696e-05f, -1.221812672e-05f, -1.215918115e-05f, -1.210022037e-05f, -1.204124447e-05f, -1.198225356e-05f, -1.192324775e-05f, -1.186422713e-05f, -1.180519182e-05f,
--1.174614190e-05f, -1.168707750e-05f, -1.162799871e-05f, -1.156890563e-05f, -1.150979837e-05f, -1.145067703e-05f, -1.139154172e-05f, -1.133239254e-05f, -1.127322960e-05f, -1.121405299e-05f,
--1.115486282e-05f, -1.109565920e-05f, -1.103644223e-05f, -1.097721201e-05f, -1.091796864e-05f, -1.085871224e-05f, -1.079944290e-05f, -1.074016073e-05f, -1.068086583e-05f, -1.062155831e-05f,
--1.056223827e-05f, -1.050290581e-05f, -1.044356104e-05f, -1.038420406e-05f, -1.032483497e-05f, -1.026545389e-05f, -1.020606090e-05f, -1.014665613e-05f, -1.008723967e-05f, -1.002781162e-05f,
--9.968372089e-06f, -9.908921184e-06f, -9.849459006e-06f, -9.789985660e-06f, -9.730501249e-06f, -9.671005878e-06f, -9.611499651e-06f, -9.551982671e-06f, -9.492455043e-06f, -9.432916870e-06f,
--9.373368258e-06f, -9.313809309e-06f, -9.254240129e-06f, -9.194660821e-06f, -9.135071489e-06f, -9.075472238e-06f, -9.015863171e-06f, -8.956244394e-06f, -8.896616009e-06f, -8.836978121e-06f,
--8.777330834e-06f, -8.717674253e-06f, -8.658008482e-06f, -8.598333624e-06f, -8.538649784e-06f, -8.478957066e-06f, -8.419255575e-06f, -8.359545414e-06f, -8.299826688e-06f, -8.240099501e-06f,
--8.180363957e-06f, -8.120620160e-06f, -8.060868215e-06f, -8.001108226e-06f, -7.941340297e-06f, -7.881564533e-06f, -7.821781036e-06f, -7.761989913e-06f, -7.702191267e-06f, -7.642385201e-06f,
--7.582571822e-06f, -7.522751232e-06f, -7.462923536e-06f, -7.403088839e-06f, -7.343247243e-06f, -7.283398855e-06f, -7.223543778e-06f, -7.163682116e-06f, -7.103813974e-06f, -7.043939455e-06f,
--6.984058665e-06f, -6.924171707e-06f, -6.864278685e-06f, -6.804379705e-06f, -6.744474869e-06f, -6.684564283e-06f, -6.624648051e-06f, -6.564726277e-06f, -6.504799065e-06f, -6.444866519e-06f,
--6.384928744e-06f, -6.324985844e-06f, -6.265037923e-06f, -6.205085086e-06f, -6.145127437e-06f, -6.085165079e-06f, -6.025198118e-06f, -5.965226658e-06f, -5.905250802e-06f, -5.845270655e-06f,
--5.785286321e-06f, -5.725297905e-06f, -5.665305511e-06f, -5.605309242e-06f, -5.545309204e-06f, -5.485305500e-06f, -5.425298235e-06f, -5.365287512e-06f, -5.305273437e-06f, -5.245256113e-06f,
--5.185235644e-06f, -5.125212135e-06f, -5.065185690e-06f, -5.005156413e-06f, -4.945124408e-06f, -4.885089779e-06f, -4.825052631e-06f, -4.765013068e-06f, -4.704971194e-06f, -4.644927113e-06f,
--4.584880928e-06f, -4.524832746e-06f, -4.464782668e-06f, -4.404730800e-06f, -4.344677246e-06f, -4.284622110e-06f, -4.224565495e-06f, -4.164507507e-06f, -4.104448249e-06f, -4.044387825e-06f,
--3.984326339e-06f, -3.924263895e-06f, -3.864200598e-06f, -3.804136551e-06f, -3.744071859e-06f, -3.684006625e-06f, -3.623940953e-06f, -3.563874948e-06f, -3.503808714e-06f, -3.443742354e-06f,
--3.383675972e-06f, -3.323609673e-06f, -3.263543560e-06f, -3.203477738e-06f, -3.143412310e-06f, -3.083347380e-06f, -3.023283052e-06f, -2.963219430e-06f, -2.903156618e-06f, -2.843094720e-06f,
--2.783033839e-06f, -2.722974080e-06f, -2.662915547e-06f, -2.602858342e-06f, -2.542802571e-06f, -2.482748336e-06f, -2.422695742e-06f, -2.362644892e-06f, -2.302595891e-06f, -2.242548841e-06f,
--2.182503847e-06f, -2.122461013e-06f, -2.062420441e-06f, -2.002382236e-06f, -1.942346502e-06f, -1.882313342e-06f, -1.822282859e-06f, -1.762255158e-06f, -1.702230342e-06f, -1.642208515e-06f,
--1.582189780e-06f, -1.522174241e-06f, -1.462162001e-06f, -1.402153164e-06f, -1.342147833e-06f, -1.282146113e-06f, -1.222148106e-06f, -1.162153916e-06f, -1.102163646e-06f, -1.042177401e-06f,
--9.821952821e-07f, -9.222173944e-07f, -8.622438408e-07f, -8.022747246e-07f, -7.423101493e-07f, -6.823502182e-07f, -6.223950346e-07f, -5.624447018e-07f, -5.024993231e-07f, -4.425590018e-07f,
--3.826238410e-07f, -3.226939442e-07f, -2.627694143e-07f, -2.028503547e-07f, -1.429368686e-07f, -8.302905895e-08f, -2.312702903e-08f, 3.676911809e-08f, 9.665927930e-08f, 1.565433516e-07f,
-2.164212318e-07f, 2.762928170e-07f, 3.361580042e-07f, 3.960166903e-07f, 4.558687724e-07f, 5.157141476e-07f, 5.755527129e-07f, 6.353843655e-07f, 6.952090024e-07f, 7.550265209e-07f,
-8.148368180e-07f, 8.746397910e-07f, 9.344353370e-07f, 9.942233534e-07f, 1.054003737e-06f, 1.113776386e-06f, 1.173541197e-06f, 1.233298068e-06f, 1.293046895e-06f, 1.352787577e-06f,
-1.412520010e-06f, 1.472244092e-06f, 1.531959721e-06f, 1.591666794e-06f, 1.651365208e-06f, 1.711054861e-06f, 1.770735651e-06f, 1.830407475e-06f, 1.890070231e-06f, 1.949723816e-06f,
-2.009368128e-06f, 2.069003065e-06f, 2.128628525e-06f, 2.188244404e-06f, 2.247850601e-06f, 2.307447014e-06f, 2.367033541e-06f, 2.426610079e-06f, 2.486176526e-06f, 2.545732781e-06f,
-2.605278740e-06f, 2.664814302e-06f, 2.724339366e-06f, 2.783853828e-06f, 2.843357588e-06f, 2.902850542e-06f, 2.962332590e-06f, 3.021803629e-06f, 3.081263557e-06f, 3.140712273e-06f,
-3.200149675e-06f, 3.259575661e-06f, 3.318990130e-06f, 3.378392979e-06f, 3.437784107e-06f, 3.497163412e-06f, 3.556530794e-06f, 3.615886149e-06f, 3.675229377e-06f, 3.734560376e-06f,
-3.793879045e-06f, 3.853185282e-06f, 3.912478986e-06f, 3.971760055e-06f, 4.031028388e-06f, 4.090283884e-06f, 4.149526441e-06f, 4.208755959e-06f, 4.267972335e-06f, 4.327175469e-06f,
-4.386365259e-06f, 4.445541605e-06f, 4.504704405e-06f, 4.563853559e-06f, 4.622988965e-06f, 4.682110522e-06f, 4.741218129e-06f, 4.800311685e-06f, 4.859391090e-06f, 4.918456243e-06f,
-4.977507042e-06f, 5.036543388e-06f, 5.095565178e-06f, 5.154572313e-06f, 5.213564692e-06f, 5.272542214e-06f, 5.331504779e-06f, 5.390452286e-06f, 5.449384634e-06f, 5.508301723e-06f,
-5.567203452e-06f, 5.626089722e-06f, 5.684960431e-06f, 5.743815479e-06f, 5.802654767e-06f, 5.861478193e-06f, 5.920285658e-06f, 5.979077060e-06f, 6.037852301e-06f, 6.096611280e-06f,
-6.155353897e-06f, 6.214080051e-06f, 6.272789643e-06f, 6.331482573e-06f, 6.390158741e-06f, 6.448818047e-06f, 6.507460390e-06f, 6.566085672e-06f, 6.624693793e-06f, 6.683284652e-06f,
-6.741858150e-06f, 6.800414188e-06f, 6.858952665e-06f, 6.917473483e-06f, 6.975976541e-06f, 7.034461740e-06f, 7.092928980e-06f, 7.151378163e-06f, 7.209809189e-06f, 7.268221958e-06f,
-7.326616372e-06f, 7.384992330e-06f, 7.443349734e-06f, 7.501688485e-06f, 7.560008483e-06f, 7.618309629e-06f, 7.676591825e-06f, 7.734854971e-06f, 7.793098968e-06f, 7.851323718e-06f,
-7.909529121e-06f, 7.967715079e-06f, 8.025881492e-06f, 8.084028263e-06f, 8.142155293e-06f, 8.200262482e-06f, 8.258349732e-06f, 8.316416945e-06f, 8.374464022e-06f, 8.432490865e-06f,
-8.490497375e-06f, 8.548483453e-06f, 8.606449002e-06f, 8.664393924e-06f, 8.722318119e-06f, 8.780221490e-06f, 8.838103938e-06f, 8.895965366e-06f, 8.953805675e-06f, 9.011624767e-06f,
-9.069422545e-06f, 9.127198910e-06f, 9.184953765e-06f, 9.242687011e-06f, 9.300398551e-06f, 9.358088288e-06f, 9.415756123e-06f, 9.473401958e-06f, 9.531025697e-06f, 9.588627242e-06f,
-9.646206495e-06f, 9.703763358e-06f, 9.761297735e-06f, 9.818809527e-06f, 9.876298639e-06f, 9.933764971e-06f, 9.991208428e-06f, 1.004862891e-05f, 1.010602633e-05f, 1.016340057e-05f,
-1.022075155e-05f, 1.027807918e-05f, 1.033538334e-05f, 1.039266395e-05f, 1.044992090e-05f, 1.050715411e-05f, 1.056436347e-05f, 1.062154889e-05f, 1.067871028e-05f, 1.073584752e-05f,
-1.079296054e-05f, 1.085004923e-05f, 1.090711349e-05f, 1.096415323e-05f, 1.102116836e-05f, 1.107815877e-05f, 1.113512437e-05f, 1.119206507e-05f, 1.124898076e-05f, 1.130587136e-05f,
-1.136273676e-05f, 1.141957688e-05f, 1.147639160e-05f, 1.153318085e-05f, 1.158994452e-05f, 1.164668252e-05f, 1.170339474e-05f, 1.176008111e-05f, 1.181674151e-05f, 1.187337586e-05f,
-1.192998406e-05f, 1.198656601e-05f, 1.204312162e-05f, 1.209965079e-05f, 1.215615343e-05f, 1.221262945e-05f, 1.226907874e-05f, 1.232550122e-05f, 1.238189678e-05f, 1.243826533e-05f,
-1.249460679e-05f, 1.255092104e-05f, 1.260720801e-05f, 1.266346759e-05f, 1.271969968e-05f, 1.277590421e-05f, 1.283208106e-05f, 1.288823014e-05f, 1.294435137e-05f, 1.300044464e-05f,
-1.305650987e-05f, 1.311254695e-05f, 1.316855580e-05f, 1.322453631e-05f, 1.328048841e-05f, 1.333641198e-05f, 1.339230694e-05f, 1.344817319e-05f, 1.350401065e-05f, 1.355981921e-05f,
-1.361559878e-05f, 1.367134927e-05f, 1.372707058e-05f, 1.378276263e-05f, 1.383842531e-05f, 1.389405854e-05f, 1.394966221e-05f, 1.400523625e-05f, 1.406078055e-05f, 1.411629502e-05f,
-1.417177957e-05f, 1.422723410e-05f, 1.428265853e-05f, 1.433805276e-05f, 1.439341669e-05f, 1.444875023e-05f, 1.450405330e-05f, 1.455932579e-05f, 1.461456762e-05f, 1.466977869e-05f,
-1.472495891e-05f, 1.478010818e-05f, 1.483522643e-05f, 1.489031354e-05f, 1.494536944e-05f, 1.500039402e-05f, 1.505538720e-05f, 1.511034889e-05f, 1.516527899e-05f, 1.522017740e-05f,
-1.527504405e-05f, 1.532987883e-05f, 1.538468166e-05f, 1.543945244e-05f, 1.549419108e-05f, 1.554889749e-05f, 1.560357158e-05f, 1.565821326e-05f, 1.571282243e-05f, 1.576739901e-05f,
-1.582194290e-05f, 1.587645401e-05f, 1.593093225e-05f, 1.598537753e-05f, 1.603978976e-05f, 1.609416885e-05f, 1.614851471e-05f, 1.620282724e-05f, 1.625710635e-05f, 1.631135197e-05f,
-1.636556398e-05f, 1.641974231e-05f, 1.647388686e-05f, 1.652799755e-05f, 1.658207428e-05f, 1.663611696e-05f, 1.669012551e-05f, 1.674409982e-05f, 1.679803982e-05f, 1.685194541e-05f,
-1.690581650e-05f, 1.695965301e-05f, 1.701345483e-05f, 1.706722189e-05f, 1.712095410e-05f, 1.717465136e-05f, 1.722831358e-05f, 1.728194068e-05f, 1.733553256e-05f, 1.738908914e-05f,
-1.744261032e-05f, 1.749609603e-05f, 1.754954616e-05f, 1.760296063e-05f, 1.765633936e-05f, 1.770968224e-05f, 1.776298920e-05f, 1.781626015e-05f, 1.786949499e-05f, 1.792269364e-05f,
-1.797585600e-05f, 1.802898200e-05f, 1.808207154e-05f, 1.813512453e-05f, 1.818814089e-05f, 1.824112053e-05f, 1.829406335e-05f, 1.834696928e-05f, 1.839983822e-05f, 1.845267009e-05f,
-1.850546480e-05f, 1.855822225e-05f, 1.861094237e-05f, 1.866362506e-05f, 1.871627024e-05f, 1.876887783e-05f, 1.882144772e-05f, 1.887397984e-05f, 1.892647410e-05f, 1.897893041e-05f,
-1.903134868e-05f, 1.908372883e-05f, 1.913607077e-05f, 1.918837442e-05f, 1.924063968e-05f, 1.929286647e-05f, 1.934505471e-05f, 1.939720430e-05f, 1.944931517e-05f, 1.950138722e-05f,
-1.955342036e-05f, 1.960541452e-05f, 1.965736961e-05f, 1.970928553e-05f, 1.976116221e-05f, 1.981299955e-05f, 1.986479748e-05f, 1.991655591e-05f, 1.996827474e-05f, 2.001995390e-05f,
-2.007159330e-05f, 2.012319285e-05f, 2.017475247e-05f, 2.022627208e-05f, 2.027775158e-05f, 2.032919090e-05f, 2.038058994e-05f, 2.043194863e-05f, 2.048326687e-05f, 2.053454459e-05f,
-2.058578170e-05f, 2.063697811e-05f, 2.068813374e-05f, 2.073924851e-05f, 2.079032232e-05f, 2.084135510e-05f, 2.089234677e-05f, 2.094329723e-05f, 2.099420640e-05f, 2.104507420e-05f,
-2.109590055e-05f, 2.114668536e-05f, 2.119742855e-05f, 2.124813004e-05f, 2.129878973e-05f, 2.134940755e-05f, 2.139998341e-05f, 2.145051724e-05f, 2.150100894e-05f, 2.155145843e-05f,
-2.160186564e-05f, 2.165223047e-05f, 2.170255285e-05f, 2.175283269e-05f, 2.180306991e-05f, 2.185326442e-05f, 2.190341615e-05f, 2.195352500e-05f, 2.200359091e-05f, 2.205361378e-05f,
-2.210359354e-05f, 2.215353009e-05f, 2.220342337e-05f, 2.225327328e-05f, 2.230307975e-05f, 2.235284269e-05f, 2.240256203e-05f, 2.245223767e-05f, 2.250186954e-05f, 2.255145756e-05f,
-2.260100164e-05f, 2.265050171e-05f, 2.269995767e-05f, 2.274936946e-05f, 2.279873699e-05f, 2.284806018e-05f, 2.289733895e-05f, 2.294657321e-05f, 2.299576289e-05f, 2.304490790e-05f,
-2.309400817e-05f, 2.314306362e-05f, 2.319207416e-05f, 2.324103971e-05f, 2.328996019e-05f, 2.333883553e-05f, 2.338766564e-05f, 2.343645044e-05f, 2.348518986e-05f, 2.353388381e-05f,
-2.358253221e-05f, 2.363113498e-05f, 2.367969205e-05f, 2.372820334e-05f, 2.377666876e-05f, 2.382508823e-05f, 2.387346168e-05f, 2.392178903e-05f, 2.397007019e-05f, 2.401830510e-05f,
-2.406649367e-05f, 2.411463581e-05f, 2.416273146e-05f, 2.421078054e-05f, 2.425878296e-05f, 2.430673864e-05f, 2.435464752e-05f, 2.440250950e-05f, 2.445032452e-05f, 2.449809249e-05f,
-2.454581334e-05f, 2.459348698e-05f, 2.464111335e-05f, 2.468869236e-05f, 2.473622393e-05f, 2.478370800e-05f, 2.483114447e-05f, 2.487853327e-05f, 2.492587433e-05f, 2.497316757e-05f,
-2.502041290e-05f, 2.506761026e-05f, 2.511475957e-05f, 2.516186075e-05f, 2.520891372e-05f, 2.525591841e-05f, 2.530287474e-05f, 2.534978263e-05f, 2.539664201e-05f, 2.544345280e-05f,
-2.549021493e-05f, 2.553692831e-05f, 2.558359288e-05f, 2.563020855e-05f, 2.567677525e-05f, 2.572329291e-05f, 2.576976145e-05f, 2.581618079e-05f, 2.586255086e-05f, 2.590887159e-05f,
-2.595514289e-05f, 2.600136469e-05f, 2.604753692e-05f, 2.609365951e-05f, 2.613973237e-05f, 2.618575543e-05f, 2.623172862e-05f, 2.627765187e-05f, 2.632352509e-05f, 2.636934822e-05f,
-2.641512118e-05f, 2.646084390e-05f, 2.650651629e-05f, 2.655213830e-05f, 2.659770983e-05f, 2.664323083e-05f, 2.668870121e-05f, 2.673412091e-05f, 2.677948984e-05f, 2.682480794e-05f,
-2.687007513e-05f, 2.691529134e-05f, 2.696045650e-05f, 2.700557053e-05f, 2.705063335e-05f, 2.709564490e-05f, 2.714060511e-05f, 2.718551390e-05f, 2.723037119e-05f, 2.727517692e-05f,
-2.731993102e-05f, 2.736463340e-05f, 2.740928400e-05f, 2.745388275e-05f, 2.749842958e-05f, 2.754292440e-05f, 2.758736716e-05f, 2.763175778e-05f, 2.767609618e-05f, 2.772038230e-05f,
-2.776461606e-05f, 2.780879739e-05f, 2.785292623e-05f, 2.789700250e-05f, 2.794102612e-05f, 2.798499704e-05f, 2.802891517e-05f, 2.807278044e-05f, 2.811659280e-05f, 2.816035216e-05f,
-2.820405845e-05f, 2.824771161e-05f, 2.829131156e-05f, 2.833485824e-05f, 2.837835157e-05f, 2.842179148e-05f, 2.846517791e-05f, 2.850851078e-05f, 2.855179003e-05f, 2.859501558e-05f,
-2.863818737e-05f, 2.868130532e-05f, 2.872436937e-05f, 2.876737945e-05f, 2.881033548e-05f, 2.885323741e-05f, 2.889608515e-05f, 2.893887865e-05f, 2.898161783e-05f, 2.902430263e-05f,
-2.906693297e-05f, 2.910950879e-05f, 2.915203002e-05f, 2.919449658e-05f, 2.923690843e-05f, 2.927926548e-05f, 2.932156766e-05f, 2.936381491e-05f, 2.940600717e-05f, 2.944814436e-05f,
-2.949022642e-05f, 2.953225327e-05f, 2.957422486e-05f, 2.961614112e-05f, 2.965800197e-05f, 2.969980735e-05f, 2.974155720e-05f, 2.978325144e-05f, 2.982489002e-05f, 2.986647286e-05f,
-2.990799989e-05f, 2.994947106e-05f, 2.999088629e-05f, 3.003224553e-05f, 3.007354869e-05f, 3.011479572e-05f, 3.015598656e-05f, 3.019712112e-05f, 3.023819936e-05f, 3.027922121e-05f,
-3.032018659e-05f, 3.036109544e-05f, 3.040194771e-05f, 3.044274332e-05f, 3.048348220e-05f, 3.052416430e-05f, 3.056478955e-05f, 3.060535788e-05f, 3.064586923e-05f, 3.068632354e-05f,
-3.072672074e-05f, 3.076706076e-05f, 3.080734355e-05f, 3.084756903e-05f, 3.088773715e-05f, 3.092784784e-05f, 3.096790103e-05f, 3.100789667e-05f, 3.104783469e-05f, 3.108771502e-05f,
-3.112753761e-05f, 3.116730239e-05f, 3.120700929e-05f, 3.124665826e-05f, 3.128624923e-05f, 3.132578213e-05f, 3.136525691e-05f, 3.140467351e-05f, 3.144403185e-05f, 3.148333188e-05f,
-3.152257354e-05f, 3.156175676e-05f, 3.160088149e-05f, 3.163994765e-05f, 3.167895519e-05f, 3.171790405e-05f, 3.175679416e-05f, 3.179562546e-05f, 3.183439790e-05f, 3.187311140e-05f,
-3.191176592e-05f, 3.195036138e-05f, 3.198889773e-05f, 3.202737491e-05f, 3.206579285e-05f, 3.210415150e-05f, 3.214245080e-05f, 3.218069067e-05f, 3.221887108e-05f, 3.225699194e-05f,
-3.229505321e-05f, 3.233305482e-05f, 3.237099672e-05f, 3.240887884e-05f, 3.244670112e-05f, 3.248446351e-05f, 3.252216595e-05f, 3.255980837e-05f, 3.259739072e-05f, 3.263491293e-05f,
-3.267237496e-05f, 3.270977674e-05f, 3.274711820e-05f, 3.278439930e-05f, 3.282161998e-05f, 3.285878017e-05f, 3.289587981e-05f, 3.293291886e-05f, 3.296989725e-05f, 3.300681492e-05f,
-3.304367181e-05f, 3.308046788e-05f, 3.311720305e-05f, 3.315387728e-05f, 3.319049050e-05f, 3.322704266e-05f, 3.326353369e-05f, 3.329996356e-05f, 3.333633218e-05f, 3.337263952e-05f,
-3.340888551e-05f, 3.344507010e-05f, 3.348119323e-05f, 3.351725484e-05f, 3.355325487e-05f, 3.358919328e-05f, 3.362507000e-05f, 3.366088498e-05f, 3.369663816e-05f, 3.373232949e-05f,
-3.376795891e-05f, 3.380352637e-05f, 3.383903180e-05f, 3.387447517e-05f, 3.390985640e-05f, 3.394517544e-05f, 3.398043225e-05f, 3.401562676e-05f, 3.405075892e-05f, 3.408582868e-05f,
-3.412083598e-05f, 3.415578077e-05f, 3.419066298e-05f, 3.422548258e-05f, 3.426023950e-05f, 3.429493369e-05f, 3.432956510e-05f, 3.436413367e-05f, 3.439863935e-05f, 3.443308209e-05f,
-3.446746182e-05f, 3.450177851e-05f, 3.453603209e-05f, 3.457022252e-05f, 3.460434974e-05f, 3.463841369e-05f, 3.467241433e-05f, 3.470635160e-05f, 3.474022545e-05f, 3.477403582e-05f,
-3.480778268e-05f, 3.484146595e-05f, 3.487508560e-05f, 3.490864156e-05f, 3.494213379e-05f, 3.497556224e-05f, 3.500892686e-05f, 3.504222758e-05f, 3.507546437e-05f, 3.510863716e-05f,
-3.514174592e-05f, 3.517479059e-05f, 3.520777111e-05f, 3.524068744e-05f, 3.527353952e-05f, 3.530632731e-05f, 3.533905076e-05f, 3.537170981e-05f, 3.540430442e-05f, 3.543683453e-05f,
-3.546930009e-05f, 3.550170106e-05f, 3.553403739e-05f, 3.556630902e-05f, 3.559851591e-05f, 3.563065801e-05f, 3.566273527e-05f, 3.569474763e-05f, 3.572669505e-05f, 3.575857749e-05f,
-3.579039489e-05f, 3.582214720e-05f, 3.585383438e-05f, 3.588545637e-05f, 3.591701313e-05f, 3.594850462e-05f, 3.597993077e-05f, 3.601129155e-05f, 3.604258691e-05f, 3.607381680e-05f,
-3.610498117e-05f, 3.613607997e-05f, 3.616711316e-05f, 3.619808069e-05f, 3.622898251e-05f, 3.625981858e-05f, 3.629058885e-05f, 3.632129326e-05f, 3.635193179e-05f, 3.638250437e-05f,
-3.641301097e-05f, 3.644345153e-05f, 3.647382602e-05f, 3.650413437e-05f, 3.653437656e-05f, 3.656455253e-05f, 3.659466223e-05f, 3.662470563e-05f, 3.665468267e-05f, 3.668459332e-05f,
-3.671443752e-05f, 3.674421523e-05f, 3.677392640e-05f, 3.680357100e-05f, 3.683314897e-05f, 3.686266028e-05f, 3.689210487e-05f, 3.692148270e-05f, 3.695079373e-05f, 3.698003792e-05f,
-3.700921522e-05f, 3.703832558e-05f, 3.706736897e-05f, 3.709634534e-05f, 3.712525464e-05f, 3.715409683e-05f, 3.718287188e-05f, 3.721157973e-05f, 3.724022034e-05f, 3.726879367e-05f,
-3.729729968e-05f, 3.732573833e-05f, 3.735410956e-05f, 3.738241335e-05f, 3.741064964e-05f, 3.743881840e-05f, 3.746691959e-05f, 3.749495315e-05f, 3.752291906e-05f, 3.755081726e-05f,
-3.757864771e-05f, 3.760641039e-05f, 3.763410523e-05f, 3.766173221e-05f, 3.768929128e-05f, 3.771678240e-05f, 3.774420553e-05f, 3.777156063e-05f, 3.779884766e-05f, 3.782606657e-05f,
-3.785321733e-05f, 3.788029990e-05f, 3.790731424e-05f, 3.793426030e-05f, 3.796113805e-05f, 3.798794745e-05f, 3.801468846e-05f, 3.804136103e-05f, 3.806796514e-05f, 3.809450073e-05f,
-3.812096777e-05f, 3.814736623e-05f, 3.817369606e-05f, 3.819995722e-05f, 3.822614968e-05f, 3.825227339e-05f, 3.827832833e-05f, 3.830431444e-05f, 3.833023170e-05f, 3.835608006e-05f,
-3.838185949e-05f, 3.840756994e-05f, 3.843321139e-05f, 3.845878379e-05f, 3.848428710e-05f, 3.850972130e-05f, 3.853508633e-05f, 3.856038217e-05f, 3.858560878e-05f, 3.861076612e-05f,
-3.863585415e-05f, 3.866087284e-05f, 3.868582215e-05f, 3.871070205e-05f, 3.873551249e-05f, 3.876025345e-05f, 3.878492489e-05f, 3.880952676e-05f, 3.883405904e-05f, 3.885852169e-05f,
-3.888291468e-05f, 3.890723796e-05f, 3.893149151e-05f, 3.895567529e-05f, 3.897978926e-05f, 3.900383339e-05f, 3.902780765e-05f, 3.905171199e-05f, 3.907554639e-05f, 3.909931081e-05f,
-3.912300522e-05f, 3.914662958e-05f, 3.917018386e-05f, 3.919366803e-05f, 3.921708205e-05f, 3.924042588e-05f, 3.926369950e-05f, 3.928690288e-05f, 3.931003597e-05f, 3.933309874e-05f,
-3.935609117e-05f, 3.937901321e-05f, 3.940186485e-05f, 3.942464603e-05f, 3.944735674e-05f, 3.946999694e-05f, 3.949256660e-05f, 3.951506568e-05f, 3.953749415e-05f, 3.955985199e-05f,
-3.958213915e-05f, 3.960435562e-05f, 3.962650135e-05f, 3.964857631e-05f, 3.967058048e-05f, 3.969251383e-05f, 3.971437631e-05f, 3.973616791e-05f, 3.975788859e-05f, 3.977953832e-05f,
-3.980111707e-05f, 3.982262481e-05f, 3.984406151e-05f, 3.986542713e-05f, 3.988672166e-05f, 3.990794506e-05f, 3.992909730e-05f, 3.995017834e-05f, 3.997118817e-05f, 3.999212675e-05f,
-4.001299406e-05f, 4.003379006e-05f, 4.005451472e-05f, 4.007516802e-05f, 4.009574992e-05f, 4.011626041e-05f, 4.013669944e-05f, 4.015706700e-05f, 4.017736305e-05f, 4.019758757e-05f,
-4.021774052e-05f, 4.023782189e-05f, 4.025783164e-05f, 4.027776974e-05f, 4.029763617e-05f, 4.031743091e-05f, 4.033715391e-05f, 4.035680517e-05f, 4.037638464e-05f, 4.039589230e-05f,
-4.041532813e-05f, 4.043469211e-05f, 4.045398419e-05f, 4.047320436e-05f, 4.049235259e-05f, 4.051142886e-05f, 4.053043314e-05f, 4.054936540e-05f, 4.056822562e-05f, 4.058701377e-05f,
-4.060572983e-05f, 4.062437377e-05f, 4.064294556e-05f, 4.066144519e-05f, 4.067987262e-05f, 4.069822784e-05f, 4.071651082e-05f, 4.073472152e-05f, 4.075285994e-05f, 4.077092604e-05f,
-4.078891980e-05f, 4.080684120e-05f, 4.082469021e-05f, 4.084246681e-05f, 4.086017098e-05f, 4.087780268e-05f, 4.089536191e-05f, 4.091284863e-05f, 4.093026283e-05f, 4.094760447e-05f,
-4.096487354e-05f, 4.098207002e-05f, 4.099919387e-05f, 4.101624509e-05f, 4.103322364e-05f, 4.105012951e-05f, 4.106696267e-05f, 4.108372310e-05f, 4.110041078e-05f, 4.111702569e-05f,
-4.113356780e-05f, 4.115003710e-05f, 4.116643356e-05f, 4.118275717e-05f, 4.119900789e-05f, 4.121518571e-05f, 4.123129062e-05f, 4.124732258e-05f, 4.126328158e-05f, 4.127916760e-05f,
-4.129498062e-05f, 4.131072062e-05f, 4.132638757e-05f, 4.134198146e-05f, 4.135750227e-05f, 4.137294997e-05f, 4.138832456e-05f, 4.140362601e-05f, 4.141885429e-05f, 4.143400940e-05f,
-4.144909131e-05f, 4.146410001e-05f, 4.147903546e-05f, 4.149389767e-05f, 4.150868660e-05f, 4.152340225e-05f, 4.153804458e-05f, 4.155261359e-05f, 4.156710926e-05f, 4.158153156e-05f,
-4.159588048e-05f, 4.161015600e-05f, 4.162435811e-05f, 4.163848679e-05f, 4.165254202e-05f, 4.166652378e-05f, 4.168043206e-05f, 4.169426684e-05f, 4.170802810e-05f, 4.172171583e-05f,
-4.173533001e-05f, 4.174887063e-05f, 4.176233766e-05f, 4.177573109e-05f, 4.178905092e-05f, 4.180229711e-05f, 4.181546965e-05f, 4.182856854e-05f, 4.184159375e-05f, 4.185454527e-05f,
-4.186742309e-05f, 4.188022718e-05f, 4.189295754e-05f, 4.190561414e-05f, 4.191819699e-05f, 4.193070605e-05f, 4.194314132e-05f, 4.195550278e-05f, 4.196779042e-05f, 4.198000422e-05f,
-4.199214417e-05f, 4.200421026e-05f, 4.201620247e-05f, 4.202812080e-05f, 4.203996521e-05f, 4.205173572e-05f, 4.206343229e-05f, 4.207505492e-05f, 4.208660359e-05f, 4.209807830e-05f,
-4.210947902e-05f, 4.212080576e-05f, 4.213205848e-05f, 4.214323719e-05f, 4.215434188e-05f, 4.216537252e-05f, 4.217632910e-05f, 4.218721163e-05f, 4.219802007e-05f, 4.220875443e-05f,
-4.221941470e-05f, 4.223000085e-05f, 4.224051288e-05f, 4.225095078e-05f, 4.226131454e-05f, 4.227160415e-05f, 4.228181959e-05f, 4.229196086e-05f, 4.230202795e-05f, 4.231202084e-05f,
-4.232193953e-05f, 4.233178401e-05f, 4.234155426e-05f, 4.235125029e-05f, 4.236087207e-05f, 4.237041960e-05f, 4.237989287e-05f, 4.238929187e-05f, 4.239861659e-05f, 4.240786703e-05f,
-4.241704317e-05f, 4.242614501e-05f, 4.243517253e-05f, 4.244412574e-05f, 4.245300462e-05f, 4.246180916e-05f, 4.247053935e-05f, 4.247919520e-05f, 4.248777668e-05f, 4.249628380e-05f,
-4.250471655e-05f, 4.251307491e-05f, 4.252135888e-05f, 4.252956846e-05f, 4.253770364e-05f, 4.254576441e-05f, 4.255375076e-05f, 4.256166269e-05f, 4.256950019e-05f, 4.257726326e-05f,
-4.258495189e-05f, 4.259256607e-05f, 4.260010580e-05f, 4.260757107e-05f, 4.261496188e-05f, 4.262227822e-05f, 4.262952009e-05f, 4.263668748e-05f, 4.264378038e-05f, 4.265079880e-05f,
-4.265774272e-05f, 4.266461214e-05f, 4.267140707e-05f, 4.267812748e-05f, 4.268477339e-05f, 4.269134477e-05f, 4.269784164e-05f, 4.270426399e-05f, 4.271061181e-05f, 4.271688510e-05f,
-4.272308386e-05f, 4.272920808e-05f, 4.273525776e-05f, 4.274123290e-05f, 4.274713349e-05f, 4.275295953e-05f, 4.275871102e-05f, 4.276438796e-05f, 4.276999034e-05f, 4.277551816e-05f,
-4.278097142e-05f, 4.278635012e-05f, 4.279165425e-05f, 4.279688382e-05f, 4.280203882e-05f, 4.280711925e-05f, 4.281212511e-05f, 4.281705640e-05f, 4.282191311e-05f, 4.282669525e-05f,
-4.283140281e-05f, 4.283603580e-05f, 4.284059422e-05f, 4.284507805e-05f, 4.284948731e-05f, 4.285382199e-05f, 4.285808209e-05f, 4.286226762e-05f, 4.286637857e-05f, 4.287041494e-05f,
-4.287437674e-05f, 4.287826396e-05f, 4.288207660e-05f, 4.288581467e-05f, 4.288947817e-05f, 4.289306709e-05f, 4.289658145e-05f, 4.290002123e-05f, 4.290338645e-05f, 4.290667710e-05f,
-4.290989318e-05f, 4.291303470e-05f, 4.291610166e-05f, 4.291909407e-05f, 4.292201191e-05f, 4.292485520e-05f, 4.292762394e-05f, 4.293031813e-05f, 4.293293777e-05f, 4.293548287e-05f,
-4.293795343e-05f, 4.294034946e-05f, 4.294267094e-05f, 4.294491790e-05f, 4.294709033e-05f, 4.294918824e-05f, 4.295121163e-05f, 4.295316050e-05f, 4.295503486e-05f, 4.295683471e-05f,
-4.295856006e-05f, 4.296021092e-05f, 4.296178727e-05f, 4.296328914e-05f, 4.296471652e-05f, 4.296606943e-05f, 4.296734786e-05f, 4.296855182e-05f, 4.296968131e-05f, 4.297073635e-05f,
-4.297171693e-05f, 4.297262307e-05f, 4.297345477e-05f, 4.297421203e-05f, 4.297489486e-05f, 4.297550327e-05f, 4.297603726e-05f, 4.297649684e-05f, 4.297688202e-05f, 4.297719280e-05f,
-4.297742919e-05f, 4.297759120e-05f, 4.297767883e-05f, 4.297769209e-05f, 4.297763100e-05f, 4.297749555e-05f, 4.297728575e-05f, 4.297700161e-05f, 4.297664315e-05f, 4.297621036e-05f,
-4.297570326e-05f, 4.297512185e-05f, 4.297446615e-05f, 4.297373615e-05f, 4.297293188e-05f, 4.297205333e-05f, 4.297110053e-05f, 4.297007346e-05f, 4.296897216e-05f, 4.296779662e-05f,
-4.296654685e-05f, 4.296522287e-05f, 4.296382468e-05f, 4.296235230e-05f, 4.296080573e-05f, 4.295918498e-05f, 4.295749007e-05f, 4.295572100e-05f, 4.295387778e-05f, 4.295196043e-05f,
-4.294996896e-05f, 4.294790337e-05f, 4.294576368e-05f, 4.294354990e-05f, 4.294126204e-05f, 4.293890011e-05f, 4.293646413e-05f, 4.293395410e-05f, 4.293137003e-05f, 4.292871194e-05f,
-4.292597984e-05f, 4.292317375e-05f, 4.292029367e-05f, 4.291733961e-05f, 4.291431160e-05f, 4.291120963e-05f, 4.290803373e-05f, 4.290478391e-05f, 4.290146018e-05f, 4.289806255e-05f,
-4.289459104e-05f, 4.289104566e-05f, 4.288742642e-05f, 4.288373334e-05f, 4.287996644e-05f, 4.287612571e-05f, 4.287221119e-05f, 4.286822287e-05f, 4.286416079e-05f, 4.286002495e-05f,
-4.285581536e-05f, 4.285153205e-05f, 4.284717502e-05f, 4.284274429e-05f, 4.283823987e-05f, 4.283366179e-05f, 4.282901005e-05f, 4.282428468e-05f, 4.281948568e-05f, 4.281461307e-05f,
-4.280966687e-05f, 4.280464710e-05f, 4.279955376e-05f, 4.279438689e-05f, 4.278914648e-05f, 4.278383257e-05f, 4.277844516e-05f, 4.277298427e-05f, 4.276744992e-05f, 4.276184213e-05f,
-4.275616091e-05f, 4.275040628e-05f, 4.274457826e-05f, 4.273867686e-05f, 4.273270210e-05f, 4.272665401e-05f, 4.272053259e-05f, 4.271433787e-05f, 4.270806986e-05f, 4.270172859e-05f,
-4.269531406e-05f, 4.268882630e-05f, 4.268226533e-05f, 4.267563117e-05f, 4.266892383e-05f, 4.266214334e-05f, 4.265528970e-05f, 4.264836295e-05f, 4.264136310e-05f, 4.263429017e-05f,
-4.262714418e-05f, 4.261992515e-05f, 4.261263310e-05f, 4.260526804e-05f, 4.259783001e-05f, 4.259031902e-05f, 4.258273508e-05f, 4.257507823e-05f, 4.256734848e-05f, 4.255954585e-05f,
-4.255167036e-05f, 4.254372203e-05f, 4.253570089e-05f, 4.252760695e-05f, 4.251944024e-05f, 4.251120078e-05f, 4.250288858e-05f, 4.249450368e-05f, 4.248604609e-05f, 4.247751583e-05f,
-4.246891293e-05f, 4.246023741e-05f, 4.245148930e-05f, 4.244266860e-05f, 4.243377535e-05f, 4.242480957e-05f, 4.241577128e-05f, 4.240666051e-05f, 4.239747727e-05f, 4.238822159e-05f,
-4.237889350e-05f, 4.236949301e-05f, 4.236002015e-05f, 4.235047495e-05f, 4.234085742e-05f, 4.233116760e-05f, 4.232140550e-05f, 4.231157116e-05f, 4.230166458e-05f, 4.229168581e-05f,
-4.228163485e-05f, 4.227151175e-05f, 4.226131652e-05f, 4.225104918e-05f, 4.224070977e-05f, 4.223029830e-05f, 4.221981481e-05f, 4.220925931e-05f, 4.219863183e-05f, 4.218793241e-05f,
-4.217716106e-05f, 4.216631781e-05f, 4.215540268e-05f, 4.214441571e-05f, 4.213335692e-05f, 4.212222633e-05f, 4.211102397e-05f, 4.209974987e-05f, 4.208840405e-05f, 4.207698655e-05f,
-4.206549738e-05f, 4.205393658e-05f, 4.204230417e-05f, 4.203060018e-05f, 4.201882464e-05f, 4.200697757e-05f, 4.199505900e-05f, 4.198306896e-05f, 4.197100749e-05f, 4.195887459e-05f,
-4.194667031e-05f, 4.193439468e-05f, 4.192204771e-05f, 4.190962944e-05f, 4.189713990e-05f, 4.188457912e-05f, 4.187194712e-05f, 4.185924393e-05f, 4.184646959e-05f, 4.183362412e-05f,
-4.182070756e-05f, 4.180771992e-05f, 4.179466125e-05f, 4.178153156e-05f, 4.176833090e-05f, 4.175505929e-05f, 4.174171675e-05f, 4.172830333e-05f, 4.171481905e-05f, 4.170126394e-05f,
-4.168763803e-05f, 4.167394135e-05f, 4.166017394e-05f, 4.164633582e-05f, 4.163242702e-05f, 4.161844759e-05f, 4.160439753e-05f, 4.159027690e-05f, 4.157608572e-05f, 4.156182402e-05f,
-4.154749184e-05f, 4.153308920e-05f, 4.151861613e-05f, 4.150407268e-05f, 4.148945887e-05f, 4.147477473e-05f, 4.146002030e-05f, 4.144519561e-05f, 4.143030069e-05f, 4.141533557e-05f,
-4.140030029e-05f, 4.138519488e-05f, 4.137001938e-05f, 4.135477381e-05f, 4.133945821e-05f, 4.132407262e-05f, 4.130861706e-05f, 4.129309158e-05f, 4.127749620e-05f, 4.126183096e-05f,
-4.124609589e-05f, 4.123029103e-05f, 4.121441641e-05f, 4.119847207e-05f, 4.118245803e-05f, 4.116637435e-05f, 4.115022104e-05f, 4.113399815e-05f, 4.111770570e-05f, 4.110134375e-05f,
-4.108491231e-05f, 4.106841143e-05f, 4.105184114e-05f, 4.103520147e-05f, 4.101849247e-05f, 4.100171417e-05f, 4.098486660e-05f, 4.096794981e-05f, 4.095096382e-05f, 4.093390867e-05f,
-4.091678440e-05f, 4.089959105e-05f, 4.088232865e-05f, 4.086499724e-05f, 4.084759685e-05f, 4.083012753e-05f, 4.081258931e-05f, 4.079498223e-05f, 4.077730632e-05f, 4.075956163e-05f,
-4.074174818e-05f, 4.072386603e-05f, 4.070591519e-05f, 4.068789573e-05f, 4.066980766e-05f, 4.065165103e-05f, 4.063342588e-05f, 4.061513225e-05f, 4.059677017e-05f, 4.057833969e-05f,
-4.055984084e-05f, 4.054127366e-05f, 4.052263818e-05f, 4.050393446e-05f, 4.048516253e-05f, 4.046632242e-05f, 4.044741418e-05f, 4.042843785e-05f, 4.040939347e-05f, 4.039028107e-05f,
-4.037110069e-05f, 4.035185238e-05f, 4.033253618e-05f, 4.031315213e-05f, 4.029370026e-05f, 4.027418061e-05f, 4.025459324e-05f, 4.023493817e-05f, 4.021521545e-05f, 4.019542512e-05f,
-4.017556723e-05f, 4.015564180e-05f, 4.013564889e-05f, 4.011558853e-05f, 4.009546077e-05f, 4.007526564e-05f, 4.005500320e-05f, 4.003467347e-05f, 4.001427651e-05f, 3.999381236e-05f,
-3.997328105e-05f, 3.995268263e-05f, 3.993201714e-05f, 3.991128463e-05f, 3.989048513e-05f, 3.986961869e-05f, 3.984868536e-05f, 3.982768517e-05f, 3.980661817e-05f, 3.978548440e-05f,
-3.976428390e-05f, 3.974301672e-05f, 3.972168291e-05f, 3.970028250e-05f, 3.967881553e-05f, 3.965728206e-05f, 3.963568213e-05f, 3.961401578e-05f, 3.959228305e-05f, 3.957048399e-05f,
-3.954861864e-05f, 3.952668706e-05f, 3.950468927e-05f, 3.948262533e-05f, 3.946049528e-05f, 3.943829917e-05f, 3.941603704e-05f, 3.939370894e-05f, 3.937131491e-05f, 3.934885500e-05f,
-3.932632925e-05f, 3.930373771e-05f, 3.928108042e-05f, 3.925835743e-05f, 3.923556879e-05f, 3.921271454e-05f, 3.918979473e-05f, 3.916680940e-05f, 3.914375861e-05f, 3.912064239e-05f,
-3.909746079e-05f, 3.907421386e-05f, 3.905090165e-05f, 3.902752421e-05f, 3.900408157e-05f, 3.898057379e-05f, 3.895700092e-05f, 3.893336300e-05f, 3.890966008e-05f, 3.888589221e-05f,
-3.886205943e-05f, 3.883816180e-05f, 3.881419935e-05f, 3.879017215e-05f, 3.876608023e-05f, 3.874192364e-05f, 3.871770244e-05f, 3.869341667e-05f, 3.866906638e-05f, 3.864465162e-05f,
-3.862017243e-05f, 3.859562887e-05f, 3.857102099e-05f, 3.854634883e-05f, 3.852161244e-05f, 3.849681188e-05f, 3.847194718e-05f, 3.844701841e-05f, 3.842202561e-05f, 3.839696883e-05f,
-3.837184812e-05f, 3.834666352e-05f, 3.832141510e-05f, 3.829610290e-05f, 3.827072697e-05f, 3.824528736e-05f, 3.821978412e-05f, 3.819421730e-05f, 3.816858695e-05f, 3.814289313e-05f,
-3.811713588e-05f, 3.809131525e-05f, 3.806543130e-05f, 3.803948408e-05f, 3.801347363e-05f, 3.798740001e-05f, 3.796126327e-05f, 3.793506347e-05f, 3.790880065e-05f, 3.788247486e-05f,
-3.785608617e-05f, 3.782963461e-05f, 3.780312024e-05f, 3.777654312e-05f, 3.774990329e-05f, 3.772320081e-05f, 3.769643573e-05f, 3.766960811e-05f, 3.764271799e-05f, 3.761576543e-05f,
-3.758875048e-05f, 3.756167320e-05f, 3.753453363e-05f, 3.750733184e-05f, 3.748006787e-05f, 3.745274177e-05f, 3.742535361e-05f, 3.739790344e-05f, 3.737039130e-05f, 3.734281725e-05f,
-3.731518135e-05f, 3.728748365e-05f, 3.725972421e-05f, 3.723190307e-05f, 3.720402030e-05f, 3.717607595e-05f, 3.714807006e-05f, 3.712000271e-05f, 3.709187393e-05f, 3.706368379e-05f,
-3.703543234e-05f, 3.700711964e-05f, 3.697874574e-05f, 3.695031069e-05f, 3.692181456e-05f, 3.689325740e-05f, 3.686463925e-05f, 3.683596019e-05f, 3.680722026e-05f, 3.677841952e-05f,
-3.674955803e-05f, 3.672063583e-05f, 3.669165300e-05f, 3.666260958e-05f, 3.663350563e-05f, 3.660434121e-05f, 3.657511637e-05f, 3.654583117e-05f, 3.651648567e-05f, 3.648707992e-05f,
-3.645761398e-05f, 3.642808791e-05f, 3.639850177e-05f, 3.636885561e-05f, 3.633914948e-05f, 3.630938346e-05f, 3.627955759e-05f, 3.624967193e-05f, 3.621972654e-05f, 3.618972147e-05f,
-3.615965679e-05f, 3.612953256e-05f, 3.609934883e-05f, 3.606910565e-05f, 3.603880310e-05f, 3.600844122e-05f, 3.597802007e-05f, 3.594753972e-05f, 3.591700022e-05f, 3.588640164e-05f,
-3.585574402e-05f, 3.582502743e-05f, 3.579425192e-05f, 3.576341757e-05f, 3.573252442e-05f, 3.570157254e-05f, 3.567056198e-05f, 3.563949280e-05f, 3.560836507e-05f, 3.557717885e-05f,
-3.554593419e-05f, 3.551463115e-05f, 3.548326979e-05f, 3.545185018e-05f, 3.542037237e-05f, 3.538883643e-05f, 3.535724241e-05f, 3.532559038e-05f, 3.529388039e-05f, 3.526211251e-05f,
-3.523028680e-05f, 3.519840331e-05f, 3.516646212e-05f, 3.513446327e-05f, 3.510240684e-05f, 3.507029287e-05f, 3.503812144e-05f, 3.500589261e-05f, 3.497360644e-05f, 3.494126298e-05f,
-3.490886230e-05f, 3.487640446e-05f, 3.484388953e-05f, 3.481131757e-05f, 3.477868863e-05f, 3.474600278e-05f, 3.471326009e-05f, 3.468046061e-05f, 3.464760440e-05f, 3.461469154e-05f,
-3.458172208e-05f, 3.454869608e-05f, 3.451561362e-05f, 3.448247474e-05f, 3.444927952e-05f, 3.441602801e-05f, 3.438272029e-05f, 3.434935640e-05f, 3.431593643e-05f, 3.428246042e-05f,
-3.424892845e-05f, 3.421534058e-05f, 3.418169686e-05f, 3.414799738e-05f, 3.411424218e-05f, 3.408043133e-05f, 3.404656490e-05f, 3.401264296e-05f, 3.397866555e-05f, 3.394463276e-05f,
-3.391054465e-05f, 3.387640127e-05f, 3.384220269e-05f, 3.380794898e-05f, 3.377364021e-05f, 3.373927643e-05f, 3.370485772e-05f, 3.367038413e-05f, 3.363585574e-05f, 3.360127261e-05f,
-3.356663480e-05f, 3.353194238e-05f, 3.349719541e-05f, 3.346239396e-05f, 3.342753810e-05f, 3.339262789e-05f, 3.335766340e-05f, 3.332264470e-05f, 3.328757184e-05f, 3.325244490e-05f,
-3.321726393e-05f, 3.318202902e-05f, 3.314674023e-05f, 3.311139761e-05f, 3.307600124e-05f, 3.304055119e-05f, 3.300504751e-05f, 3.296949029e-05f, 3.293387958e-05f, 3.289821545e-05f,
-3.286249797e-05f, 3.282672720e-05f, 3.279090322e-05f, 3.275502609e-05f, 3.271909588e-05f, 3.268311265e-05f, 3.264707648e-05f, 3.261098742e-05f, 3.257484556e-05f, 3.253865095e-05f,
-3.250240367e-05f, 3.246610378e-05f, 3.242975134e-05f, 3.239334644e-05f, 3.235688914e-05f, 3.232037950e-05f, 3.228381759e-05f, 3.224720348e-05f, 3.221053725e-05f, 3.217381896e-05f,
-3.213704867e-05f, 3.210022646e-05f, 3.206335240e-05f, 3.202642655e-05f, 3.198944898e-05f, 3.195241977e-05f, 3.191533898e-05f, 3.187820669e-05f, 3.184102295e-05f, 3.180378785e-05f,
-3.176650145e-05f, 3.172916381e-05f, 3.169177502e-05f, 3.165433513e-05f, 3.161684423e-05f, 3.157930238e-05f, 3.154170964e-05f, 3.150406610e-05f, 3.146637181e-05f, 3.142862686e-05f,
-3.139083130e-05f, 3.135298522e-05f, 3.131508868e-05f, 3.127714175e-05f, 3.123914451e-05f, 3.120109702e-05f, 3.116299935e-05f, 3.112485158e-05f, 3.108665378e-05f, 3.104840601e-05f,
-3.101010836e-05f, 3.097176088e-05f, 3.093336366e-05f, 3.089491676e-05f, 3.085642026e-05f, 3.081787422e-05f, 3.077927872e-05f, 3.074063383e-05f, 3.070193963e-05f, 3.066319617e-05f,
-3.062440354e-05f, 3.058556181e-05f, 3.054667105e-05f, 3.050773134e-05f, 3.046874273e-05f, 3.042970532e-05f, 3.039061916e-05f, 3.035148433e-05f, 3.031230091e-05f, 3.027306897e-05f,
-3.023378857e-05f, 3.019445980e-05f, 3.015508273e-05f, 3.011565742e-05f, 3.007618396e-05f, 3.003666241e-05f, 2.999709284e-05f, 2.995747534e-05f, 2.991780998e-05f, 2.987809682e-05f,
-2.983833594e-05f, 2.979852742e-05f, 2.975867133e-05f, 2.971876774e-05f, 2.967881673e-05f, 2.963881837e-05f, 2.959877274e-05f, 2.955867990e-05f, 2.951853993e-05f, 2.947835291e-05f,
-2.943811892e-05f, 2.939783801e-05f, 2.935751028e-05f, 2.931713580e-05f, 2.927671463e-05f, 2.923624685e-05f, 2.919573255e-05f, 2.915517178e-05f, 2.911456464e-05f, 2.907391119e-05f,
-2.903321150e-05f, 2.899246566e-05f, 2.895167374e-05f, 2.891083581e-05f, 2.886995195e-05f, 2.882902223e-05f, 2.878804673e-05f, 2.874702553e-05f, 2.870595870e-05f, 2.866484631e-05f,
-2.862368845e-05f, 2.858248518e-05f, 2.854123659e-05f, 2.849994275e-05f, 2.845860373e-05f, 2.841721962e-05f, 2.837579048e-05f, 2.833431640e-05f, 2.829279744e-05f, 2.825123370e-05f,
-2.820962523e-05f, 2.816797213e-05f, 2.812627446e-05f, 2.808453231e-05f, 2.804274574e-05f, 2.800091484e-05f, 2.795903969e-05f, 2.791712035e-05f, 2.787515691e-05f, 2.783314945e-05f,
-2.779109804e-05f, 2.774900275e-05f, 2.770686367e-05f, 2.766468088e-05f, 2.762245444e-05f, 2.758018445e-05f, 2.753787096e-05f, 2.749551408e-05f, 2.745311386e-05f, 2.741067039e-05f,
-2.736818374e-05f, 2.732565400e-05f, 2.728308125e-05f, 2.724046555e-05f, 2.719780699e-05f, 2.715510565e-05f, 2.711236160e-05f, 2.706957492e-05f, 2.702674570e-05f, 2.698387400e-05f,
-2.694095991e-05f, 2.689800351e-05f, 2.685500488e-05f, 2.681196408e-05f, 2.676888121e-05f, 2.672575634e-05f, 2.668258955e-05f, 2.663938092e-05f, 2.659613053e-05f, 2.655283846e-05f,
-2.650950478e-05f, 2.646612957e-05f, 2.642271292e-05f, 2.637925491e-05f, 2.633575561e-05f, 2.629221510e-05f, 2.624863346e-05f, 2.620501077e-05f, 2.616134712e-05f, 2.611764258e-05f,
-2.607389722e-05f, 2.603011114e-05f, 2.598628441e-05f, 2.594241711e-05f, 2.589850932e-05f, 2.585456111e-05f, 2.581057258e-05f, 2.576654380e-05f, 2.572247486e-05f, 2.567836582e-05f,
-2.563421677e-05f, 2.559002780e-05f, 2.554579898e-05f, 2.550153039e-05f, 2.545722212e-05f, 2.541287424e-05f, 2.536848683e-05f, 2.532405998e-05f, 2.527959377e-05f, 2.523508827e-05f,
-2.519054358e-05f, 2.514595976e-05f, 2.510133691e-05f, 2.505667509e-05f, 2.501197440e-05f, 2.496723492e-05f, 2.492245672e-05f, 2.487763988e-05f, 2.483278450e-05f, 2.478789064e-05f,
-2.474295840e-05f, 2.469798785e-05f, 2.465297908e-05f, 2.460793216e-05f, 2.456284718e-05f, 2.451772422e-05f, 2.447256336e-05f, 2.442736469e-05f, 2.438212828e-05f, 2.433685422e-05f,
-2.429154260e-05f, 2.424619348e-05f, 2.420080696e-05f, 2.415538312e-05f, 2.410992203e-05f, 2.406442379e-05f, 2.401888848e-05f, 2.397331617e-05f, 2.392770695e-05f, 2.388206090e-05f,
-2.383637810e-05f, 2.379065865e-05f, 2.374490261e-05f, 2.369911008e-05f, 2.365328114e-05f, 2.360741586e-05f, 2.356151434e-05f, 2.351557665e-05f, 2.346960288e-05f, 2.342359311e-05f,
-2.337754743e-05f, 2.333146592e-05f, 2.328534866e-05f, 2.323919573e-05f, 2.319300722e-05f, 2.314678321e-05f, 2.310052379e-05f, 2.305422904e-05f, 2.300789904e-05f, 2.296153388e-05f,
-2.291513364e-05f, 2.286869840e-05f, 2.282222825e-05f, 2.277572327e-05f, 2.272918355e-05f, 2.268260917e-05f, 2.263600021e-05f, 2.258935676e-05f, 2.254267891e-05f, 2.249596673e-05f,
-2.244922031e-05f, 2.240243974e-05f, 2.235562509e-05f, 2.230877647e-05f, 2.226189394e-05f, 2.221497759e-05f, 2.216802751e-05f, 2.212104379e-05f, 2.207402650e-05f, 2.202697573e-05f,
-2.197989157e-05f, 2.193277410e-05f, 2.188562341e-05f, 2.183843958e-05f, 2.179122270e-05f, 2.174397285e-05f, 2.169669011e-05f, 2.164937458e-05f, 2.160202633e-05f, 2.155464546e-05f,
-2.150723204e-05f, 2.145978617e-05f, 2.141230793e-05f, 2.136479739e-05f, 2.131725466e-05f, 2.126967981e-05f, 2.122207294e-05f, 2.117443412e-05f, 2.112676344e-05f, 2.107906098e-05f,
-2.103132684e-05f, 2.098356110e-05f, 2.093576385e-05f, 2.088793516e-05f, 2.084007513e-05f, 2.079218384e-05f, 2.074426139e-05f, 2.069630784e-05f, 2.064832330e-05f, 2.060030784e-05f,
-2.055226156e-05f, 2.050418454e-05f, 2.045607686e-05f, 2.040793861e-05f, 2.035976988e-05f, 2.031157076e-05f, 2.026334133e-05f, 2.021508168e-05f, 2.016679189e-05f, 2.011847205e-05f,
-2.007012225e-05f, 2.002174257e-05f, 1.997333311e-05f, 1.992489394e-05f, 1.987642516e-05f, 1.982792684e-05f, 1.977939909e-05f, 1.973084198e-05f, 1.968225561e-05f, 1.963364005e-05f,
-1.958499541e-05f, 1.953632175e-05f, 1.948761918e-05f, 1.943888777e-05f, 1.939012762e-05f, 1.934133881e-05f, 1.929252143e-05f, 1.924367557e-05f, 1.919480131e-05f, 1.914589875e-05f,
-1.909696796e-05f, 1.904800904e-05f, 1.899902208e-05f, 1.895000716e-05f, 1.890096437e-05f, 1.885189379e-05f, 1.880279553e-05f, 1.875366965e-05f, 1.870451626e-05f, 1.865533543e-05f,
-1.860612726e-05f, 1.855689184e-05f, 1.850762925e-05f, 1.845833957e-05f, 1.840902291e-05f, 1.835967934e-05f, 1.831030896e-05f, 1.826091185e-05f, 1.821148811e-05f, 1.816203781e-05f,
-1.811256105e-05f, 1.806305791e-05f, 1.801352849e-05f, 1.796397287e-05f, 1.791439115e-05f, 1.786478340e-05f, 1.781514972e-05f, 1.776549020e-05f, 1.771580492e-05f, 1.766609397e-05f,
-1.761635745e-05f, 1.756659544e-05f, 1.751680802e-05f, 1.746699530e-05f, 1.741715735e-05f, 1.736729427e-05f, 1.731740614e-05f, 1.726749306e-05f, 1.721755511e-05f, 1.716759238e-05f,
-1.711760496e-05f, 1.706759294e-05f, 1.701755641e-05f, 1.696749545e-05f, 1.691741016e-05f, 1.686730063e-05f, 1.681716694e-05f, 1.676700919e-05f, 1.671682746e-05f, 1.666662184e-05f,
-1.661639242e-05f, 1.656613930e-05f, 1.651586256e-05f, 1.646556228e-05f, 1.641523857e-05f, 1.636489150e-05f, 1.631452117e-05f, 1.626412767e-05f, 1.621371109e-05f, 1.616327151e-05f,
-1.611280903e-05f, 1.606232374e-05f, 1.601181572e-05f, 1.596128507e-05f, 1.591073188e-05f, 1.586015623e-05f, 1.580955821e-05f, 1.575893792e-05f, 1.570829544e-05f, 1.565763087e-05f,
-1.560694429e-05f, 1.555623580e-05f, 1.550550548e-05f, 1.545475342e-05f, 1.540397972e-05f, 1.535318447e-05f, 1.530236775e-05f, 1.525152965e-05f, 1.520067027e-05f, 1.514978969e-05f,
-1.509888801e-05f, 1.504796531e-05f, 1.499702169e-05f, 1.494605723e-05f, 1.489507203e-05f, 1.484406618e-05f, 1.479303977e-05f, 1.474199288e-05f, 1.469092561e-05f, 1.463983804e-05f,
-1.458873028e-05f, 1.453760241e-05f, 1.448645451e-05f, 1.443528669e-05f, 1.438409902e-05f, 1.433289161e-05f, 1.428166454e-05f, 1.423041790e-05f, 1.417915178e-05f, 1.412786628e-05f,
-1.407656149e-05f, 1.402523748e-05f, 1.397389437e-05f, 1.392253223e-05f, 1.387115116e-05f, 1.381975125e-05f, 1.376833259e-05f, 1.371689527e-05f, 1.366543938e-05f, 1.361396501e-05f,
-1.356247225e-05f, 1.351096120e-05f, 1.345943195e-05f, 1.340788458e-05f, 1.335631919e-05f, 1.330473586e-05f, 1.325313470e-05f, 1.320151578e-05f, 1.314987921e-05f, 1.309822507e-05f,
-1.304655346e-05f, 1.299486446e-05f, 1.294315816e-05f, 1.289143467e-05f, 1.283969406e-05f, 1.278793643e-05f, 1.273616188e-05f, 1.268437048e-05f, 1.263256234e-05f, 1.258073755e-05f,
-1.252889619e-05f, 1.247703837e-05f, 1.242516416e-05f, 1.237327366e-05f, 1.232136696e-05f, 1.226944416e-05f, 1.221750535e-05f, 1.216555061e-05f, 1.211358004e-05f, 1.206159373e-05f,
-1.200959177e-05f, 1.195757426e-05f, 1.190554128e-05f, 1.185349292e-05f, 1.180142929e-05f, 1.174935046e-05f, 1.169725654e-05f, 1.164514761e-05f, 1.159302376e-05f, 1.154088509e-05f,
-1.148873169e-05f, 1.143656365e-05f, 1.138438106e-05f, 1.133218401e-05f, 1.127997260e-05f, 1.122774692e-05f, 1.117550705e-05f, 1.112325310e-05f, 1.107098515e-05f, 1.101870329e-05f,
-1.096640763e-05f, 1.091409823e-05f, 1.086177521e-05f, 1.080943866e-05f, 1.075708865e-05f, 1.070472530e-05f, 1.065234868e-05f, 1.059995889e-05f, 1.054755602e-05f, 1.049514017e-05f,
-1.044271142e-05f, 1.039026987e-05f, 1.033781562e-05f, 1.028534874e-05f, 1.023286934e-05f, 1.018037751e-05f, 1.012787333e-05f, 1.007535691e-05f, 1.002282833e-05f, 9.970287681e-06f,
-9.917735062e-06f, 9.865170563e-06f, 9.812594275e-06f, 9.760006292e-06f, 9.707406704e-06f, 9.654795605e-06f, 9.602173086e-06f, 9.549539240e-06f, 9.496894159e-06f, 9.444237935e-06f,
-9.391570661e-06f, 9.338892428e-06f, 9.286203330e-06f, 9.233503458e-06f, 9.180792905e-06f, 9.128071762e-06f, 9.075340123e-06f, 9.022598079e-06f, 8.969845724e-06f, 8.917083149e-06f,
-8.864310446e-06f, 8.811527709e-06f, 8.758735029e-06f, 8.705932498e-06f, 8.653120210e-06f, 8.600298257e-06f, 8.547466730e-06f, 8.494625723e-06f, 8.441775328e-06f, 8.388915637e-06f,
-8.336046742e-06f, 8.283168737e-06f, 8.230281713e-06f, 8.177385763e-06f, 8.124480980e-06f, 8.071567456e-06f, 8.018645283e-06f, 7.965714554e-06f, 7.912775361e-06f, 7.859827797e-06f,
-7.806871955e-06f, 7.753907926e-06f, 7.700935803e-06f, 7.647955680e-06f, 7.594967648e-06f, 7.541971799e-06f, 7.488968227e-06f, 7.435957024e-06f, 7.382938283e-06f, 7.329912095e-06f,
-7.276878554e-06f, 7.223837752e-06f, 7.170789781e-06f, 7.117734735e-06f, 7.064672705e-06f, 7.011603785e-06f, 6.958528066e-06f, 6.905445642e-06f, 6.852356604e-06f, 6.799261046e-06f,
-6.746159060e-06f, 6.693050738e-06f, 6.639936174e-06f, 6.586815459e-06f, 6.533688687e-06f, 6.480555949e-06f, 6.427417339e-06f, 6.374272949e-06f, 6.321122872e-06f, 6.267967199e-06f,
-6.214806024e-06f, 6.161639440e-06f, 6.108467538e-06f, 6.055290412e-06f, 6.002108154e-06f, 5.948920856e-06f, 5.895728612e-06f, 5.842531513e-06f, 5.789329653e-06f, 5.736123123e-06f,
-5.682912017e-06f, 5.629696426e-06f, 5.576476445e-06f, 5.523252164e-06f, 5.470023677e-06f, 5.416791077e-06f, 5.363554455e-06f, 5.310313904e-06f, 5.257069518e-06f, 5.203821387e-06f,
-5.150569606e-06f, 5.097314267e-06f, 5.044055461e-06f, 4.990793282e-06f, 4.937527822e-06f, 4.884259174e-06f, 4.830987430e-06f, 4.777712683e-06f, 4.724435025e-06f, 4.671154549e-06f,
-4.617871347e-06f, 4.564585512e-06f, 4.511297137e-06f, 4.458006313e-06f, 4.404713133e-06f, 4.351417690e-06f, 4.298120076e-06f, 4.244820384e-06f, 4.191518707e-06f, 4.138215135e-06f,
-4.084909763e-06f, 4.031602683e-06f, 3.978293986e-06f, 3.924983766e-06f, 3.871672115e-06f, 3.818359125e-06f, 3.765044889e-06f, 3.711729499e-06f, 3.658413047e-06f, 3.605095627e-06f,
-3.551777329e-06f, 3.498458248e-06f, 3.445138474e-06f, 3.391818101e-06f, 3.338497221e-06f, 3.285175925e-06f, 3.231854308e-06f, 3.178532460e-06f, 3.125210474e-06f, 3.071888442e-06f,
-3.018566458e-06f, 2.965244612e-06f, 2.911922998e-06f, 2.858601707e-06f, 2.805280832e-06f, 2.751960466e-06f, 2.698640699e-06f, 2.645321625e-06f, 2.592003337e-06f, 2.538685925e-06f,
-2.485369482e-06f, 2.432054101e-06f, 2.378739873e-06f, 2.325426891e-06f, 2.272115247e-06f, 2.218805033e-06f, 2.165496342e-06f, 2.112189264e-06f, 2.058883893e-06f, 2.005580321e-06f,
-1.952278639e-06f, 1.898978940e-06f, 1.845681316e-06f, 1.792385859e-06f, 1.739092660e-06f, 1.685801813e-06f, 1.632513408e-06f, 1.579227538e-06f, 1.525944295e-06f, 1.472663771e-06f,
-1.419386057e-06f, 1.366111246e-06f, 1.312839430e-06f, 1.259570701e-06f, 1.206305150e-06f, 1.153042869e-06f, 1.099783950e-06f, 1.046528486e-06f, 9.932765673e-07f, 9.400282864e-07f,
-8.867837351e-07f, 8.335430050e-07f, 7.803061880e-07f, 7.270733759e-07f, 6.738446603e-07f, 6.206201330e-07f, 5.673998858e-07f, 5.141840102e-07f, 4.609725981e-07f, 4.077657409e-07f,
-3.545635305e-07f, 3.013660584e-07f, 2.481734162e-07f, 1.949856955e-07f, 1.418029878e-07f, 8.862538481e-08f, 3.545297796e-08f, -1.771414120e-08f, -7.087588118e-08f, -1.240321505e-07f,
--1.771828577e-07f, -2.303279113e-07f, -2.834672200e-07f, -3.366006922e-07f, -3.897282367e-07f, -4.428497620e-07f, -4.959651768e-07f, -5.490743898e-07f, -6.021773097e-07f, -6.552738451e-07f,
--7.083639049e-07f, -7.614473977e-07f, -8.145242324e-07f, -8.675943178e-07f, -9.206575626e-07f, -9.737138756e-07f, -1.026763166e-06f, -1.079805342e-06f, -1.132840313e-06f, -1.185867988e-06f,
--1.238888276e-06f, -1.291901086e-06f, -1.344906326e-06f, -1.397903906e-06f, -1.450893735e-06f, -1.503875722e-06f, -1.556849776e-06f, -1.609815806e-06f, -1.662773720e-06f, -1.715723430e-06f,
--1.768664842e-06f, -1.821597868e-06f, -1.874522415e-06f, -1.927438393e-06f, -1.980345712e-06f, -2.033244281e-06f, -2.086134008e-06f, -2.139014804e-06f, -2.191886577e-06f, -2.244749238e-06f,
--2.297602695e-06f, -2.350446858e-06f, -2.403281636e-06f, -2.456106940e-06f, -2.508922677e-06f, -2.561728759e-06f, -2.614525094e-06f, -2.667311593e-06f, -2.720088164e-06f, -2.772854717e-06f,
--2.825611162e-06f, -2.878357409e-06f, -2.931093368e-06f, -2.983818948e-06f, -3.036534058e-06f, -3.089238610e-06f, -3.141932512e-06f, -3.194615675e-06f, -3.247288008e-06f, -3.299949421e-06f,
--3.352599824e-06f, -3.405239128e-06f, -3.457867242e-06f, -3.510484076e-06f, -3.563089540e-06f, -3.615683545e-06f, -3.668266000e-06f, -3.720836816e-06f, -3.773395903e-06f, -3.825943170e-06f,
--3.878478529e-06f, -3.931001890e-06f, -3.983513162e-06f, -4.036012256e-06f, -4.088499082e-06f, -4.140973552e-06f, -4.193435575e-06f, -4.245885061e-06f, -4.298321921e-06f, -4.350746067e-06f,
--4.403157407e-06f, -4.455555853e-06f, -4.507941316e-06f, -4.560313705e-06f, -4.612672932e-06f, -4.665018908e-06f, -4.717351542e-06f, -4.769670746e-06f, -4.821976431e-06f, -4.874268508e-06f,
--4.926546886e-06f, -4.978811478e-06f, -5.031062194e-06f, -5.083298945e-06f, -5.135521642e-06f, -5.187730196e-06f, -5.239924518e-06f, -5.292104519e-06f, -5.344270110e-06f, -5.396421203e-06f,
--5.448557709e-06f, -5.500679538e-06f, -5.552786603e-06f, -5.604878814e-06f, -5.656956082e-06f, -5.709018320e-06f, -5.761065438e-06f, -5.813097348e-06f, -5.865113962e-06f, -5.917115190e-06f,
--5.969100945e-06f, -6.021071138e-06f, -6.073025680e-06f, -6.124964483e-06f, -6.176887460e-06f, -6.228794521e-06f, -6.280685578e-06f, -6.332560544e-06f, -6.384419329e-06f, -6.436261847e-06f,
--6.488088008e-06f, -6.539897725e-06f, -6.591690909e-06f, -6.643467473e-06f, -6.695227329e-06f, -6.746970389e-06f, -6.798696564e-06f, -6.850405768e-06f, -6.902097912e-06f, -6.953772908e-06f,
--7.005430670e-06f, -7.057071108e-06f, -7.108694136e-06f, -7.160299666e-06f, -7.211887610e-06f, -7.263457881e-06f, -7.315010391e-06f, -7.366545053e-06f, -7.418061779e-06f, -7.469560483e-06f,
--7.521041076e-06f, -7.572503472e-06f, -7.623947583e-06f, -7.675373321e-06f, -7.726780601e-06f, -7.778169334e-06f, -7.829539434e-06f, -7.880890814e-06f, -7.932223386e-06f, -7.983537064e-06f,
--8.034831760e-06f, -8.086107389e-06f, -8.137363862e-06f, -8.188601093e-06f, -8.239818996e-06f, -8.291017483e-06f, -8.342196469e-06f, -8.393355866e-06f, -8.444495588e-06f, -8.495615548e-06f,
--8.546715660e-06f, -8.597795837e-06f, -8.648855993e-06f, -8.699896041e-06f, -8.750915896e-06f, -8.801915471e-06f, -8.852894680e-06f, -8.903853436e-06f, -8.954791653e-06f, -9.005709246e-06f,
--9.056606128e-06f, -9.107482213e-06f, -9.158337415e-06f, -9.209171649e-06f, -9.259984828e-06f, -9.310776866e-06f, -9.361547678e-06f, -9.412297179e-06f, -9.463025282e-06f, -9.513731901e-06f,
--9.564416951e-06f, -9.615080347e-06f, -9.665722003e-06f, -9.716341834e-06f, -9.766939753e-06f, -9.817515676e-06f, -9.868069518e-06f, -9.918601193e-06f, -9.969110616e-06f, -1.001959770e-05f,
--1.007006236e-05f, -1.012050452e-05f, -1.017092408e-05f, -1.022132097e-05f, -1.027169509e-05f, -1.032204636e-05f, -1.037237471e-05f, -1.042268003e-05f, -1.047296226e-05f, -1.052322129e-05f,
--1.057345706e-05f, -1.062366947e-05f, -1.067385844e-05f, -1.072402388e-05f, -1.077416572e-05f, -1.082428386e-05f, -1.087437822e-05f, -1.092444872e-05f, -1.097449528e-05f, -1.102451780e-05f,
--1.107451621e-05f, -1.112449042e-05f, -1.117444034e-05f, -1.122436590e-05f, -1.127426700e-05f, -1.132414357e-05f, -1.137399553e-05f, -1.142382278e-05f, -1.147362524e-05f, -1.152340283e-05f,
--1.157315547e-05f, -1.162288307e-05f, -1.167258555e-05f, -1.172226282e-05f, -1.177191481e-05f, -1.182154142e-05f, -1.187114258e-05f, -1.192071820e-05f, -1.197026820e-05f, -1.201979250e-05f,
--1.206929100e-05f, -1.211876364e-05f, -1.216821032e-05f, -1.221763097e-05f, -1.226702549e-05f, -1.231639382e-05f, -1.236573585e-05f, -1.241505152e-05f, -1.246434074e-05f, -1.251360343e-05f,
--1.256283949e-05f, -1.261204886e-05f, -1.266123145e-05f, -1.271038718e-05f, -1.275951596e-05f, -1.280861771e-05f, -1.285769235e-05f, -1.290673979e-05f, -1.295575997e-05f, -1.300475278e-05f,
--1.305371816e-05f, -1.310265601e-05f, -1.315156626e-05f, -1.320044883e-05f, -1.324930363e-05f, -1.329813058e-05f, -1.334692960e-05f, -1.339570061e-05f, -1.344444352e-05f, -1.349315826e-05f,
--1.354184474e-05f, -1.359050289e-05f, -1.363913261e-05f, -1.368773384e-05f, -1.373630648e-05f, -1.378485046e-05f, -1.383336570e-05f, -1.388185211e-05f, -1.393030961e-05f, -1.397873813e-05f,
--1.402713757e-05f, -1.407550787e-05f, -1.412384894e-05f, -1.417216070e-05f, -1.422044307e-05f, -1.426869596e-05f, -1.431691930e-05f, -1.436511301e-05f, -1.441327701e-05f, -1.446141121e-05f,
--1.450951554e-05f, -1.455758991e-05f, -1.460563425e-05f, -1.465364848e-05f, -1.470163251e-05f, -1.474958626e-05f, -1.479750966e-05f, -1.484540263e-05f, -1.489326508e-05f, -1.494109693e-05f,
--1.498889812e-05f, -1.503666854e-05f, -1.508440814e-05f, -1.513211682e-05f, -1.517979451e-05f, -1.522744113e-05f, -1.527505660e-05f, -1.532264084e-05f, -1.537019377e-05f, -1.541771531e-05f,
--1.546520538e-05f, -1.551266390e-05f, -1.556009080e-05f, -1.560748600e-05f, -1.565484941e-05f, -1.570218096e-05f, -1.574948056e-05f, -1.579674815e-05f, -1.584398364e-05f, -1.589118696e-05f,
--1.593835801e-05f, -1.598549674e-05f, -1.603260305e-05f, -1.607967687e-05f, -1.612671813e-05f, -1.617372673e-05f, -1.622070262e-05f, -1.626764570e-05f, -1.631455589e-05f, -1.636143314e-05f,
--1.640827734e-05f, -1.645508843e-05f, -1.650186633e-05f, -1.654861096e-05f, -1.659532224e-05f, -1.664200010e-05f, -1.668864445e-05f, -1.673525523e-05f, -1.678183235e-05f, -1.682837573e-05f,
--1.687488531e-05f, -1.692136099e-05f, -1.696780272e-05f, -1.701421040e-05f, -1.706058396e-05f, -1.710692332e-05f, -1.715322841e-05f, -1.719949916e-05f, -1.724573547e-05f, -1.729193729e-05f,
--1.733810452e-05f, -1.738423710e-05f, -1.743033495e-05f, -1.747639799e-05f, -1.752242615e-05f, -1.756841934e-05f, -1.761437750e-05f, -1.766030055e-05f, -1.770618841e-05f, -1.775204100e-05f,
--1.779785826e-05f, -1.784364009e-05f, -1.788938644e-05f, -1.793509722e-05f, -1.798077235e-05f, -1.802641177e-05f, -1.807201540e-05f, -1.811758315e-05f, -1.816311496e-05f, -1.820861076e-05f,
--1.825407045e-05f, -1.829949398e-05f, -1.834488126e-05f, -1.839023223e-05f, -1.843554680e-05f, -1.848082490e-05f, -1.852606645e-05f, -1.857127139e-05f, -1.861643964e-05f, -1.866157111e-05f,
--1.870666575e-05f, -1.875172347e-05f, -1.879674420e-05f, -1.884172786e-05f, -1.888667439e-05f, -1.893158370e-05f, -1.897645573e-05f, -1.902129039e-05f, -1.906608762e-05f, -1.911084735e-05f,
--1.915556949e-05f, -1.920025397e-05f, -1.924490073e-05f, -1.928950968e-05f, -1.933408076e-05f, -1.937861388e-05f, -1.942310899e-05f, -1.946756600e-05f, -1.951198484e-05f, -1.955636543e-05f,
--1.960070772e-05f, -1.964501161e-05f, -1.968927704e-05f, -1.973350394e-05f, -1.977769224e-05f, -1.982184185e-05f, -1.986595272e-05f, -1.991002476e-05f, -1.995405790e-05f, -1.999805208e-05f,
--2.004200722e-05f, -2.008592324e-05f, -2.012980008e-05f, -2.017363766e-05f, -2.021743591e-05f, -2.026119476e-05f, -2.030491414e-05f, -2.034859398e-05f, -2.039223420e-05f, -2.043583473e-05f,
--2.047939550e-05f, -2.052291645e-05f, -2.056639749e-05f, -2.060983856e-05f, -2.065323959e-05f, -2.069660050e-05f, -2.073992122e-05f, -2.078320169e-05f, -2.082644183e-05f, -2.086964157e-05f,
--2.091280085e-05f, -2.095591958e-05f, -2.099899770e-05f, -2.104203514e-05f, -2.108503184e-05f, -2.112798771e-05f, -2.117090268e-05f, -2.121377670e-05f, -2.125660968e-05f, -2.129940156e-05f,
--2.134215227e-05f, -2.138486174e-05f, -2.142752990e-05f, -2.147015667e-05f, -2.151274200e-05f, -2.155528580e-05f, -2.159778802e-05f, -2.164024857e-05f, -2.168266740e-05f, -2.172504443e-05f,
--2.176737959e-05f, -2.180967281e-05f, -2.185192404e-05f, -2.189413318e-05f, -2.193630019e-05f, -2.197842498e-05f, -2.202050749e-05f, -2.206254766e-05f, -2.210454541e-05f, -2.214650067e-05f,
--2.218841338e-05f, -2.223028346e-05f, -2.227211086e-05f, -2.231389550e-05f, -2.235563731e-05f, -2.239733622e-05f, -2.243899218e-05f, -2.248060510e-05f, -2.252217493e-05f, -2.256370159e-05f,
--2.260518502e-05f, -2.264662515e-05f, -2.268802191e-05f, -2.272937524e-05f, -2.277068506e-05f, -2.281195132e-05f, -2.285317394e-05f, -2.289435285e-05f, -2.293548800e-05f, -2.297657931e-05f,
--2.301762671e-05f, -2.305863015e-05f, -2.309958955e-05f, -2.314050484e-05f, -2.318137597e-05f, -2.322220286e-05f, -2.326298545e-05f, -2.330372367e-05f, -2.334441745e-05f, -2.338506674e-05f,
--2.342567146e-05f, -2.346623155e-05f, -2.350674694e-05f, -2.354721756e-05f, -2.358764336e-05f, -2.362802427e-05f, -2.366836021e-05f, -2.370865113e-05f, -2.374889696e-05f, -2.378909764e-05f,
--2.382925309e-05f, -2.386936326e-05f, -2.390942808e-05f, -2.394944749e-05f, -2.398942141e-05f, -2.402934980e-05f, -2.406923257e-05f, -2.410906967e-05f, -2.414886103e-05f, -2.418860660e-05f,
--2.422830629e-05f, -2.426796006e-05f, -2.430756783e-05f, -2.434712955e-05f, -2.438664514e-05f, -2.442611455e-05f, -2.446553771e-05f, -2.450491455e-05f, -2.454424502e-05f, -2.458352905e-05f,
--2.462276658e-05f, -2.466195755e-05f, -2.470110188e-05f, -2.474019952e-05f, -2.477925041e-05f, -2.481825447e-05f, -2.485721166e-05f, -2.489612190e-05f, -2.493498514e-05f, -2.497380131e-05f,
--2.501257035e-05f, -2.505129219e-05f, -2.508996678e-05f, -2.512859405e-05f, -2.516717395e-05f, -2.520570639e-05f, -2.524419134e-05f, -2.528262872e-05f, -2.532101847e-05f, -2.535936053e-05f,
--2.539765485e-05f, -2.543590135e-05f, -2.547409997e-05f, -2.551225067e-05f, -2.555035336e-05f, -2.558840800e-05f, -2.562641452e-05f, -2.566437287e-05f, -2.570228297e-05f, -2.574014477e-05f,
--2.577795821e-05f, -2.581572323e-05f, -2.585343977e-05f, -2.589110776e-05f, -2.592872715e-05f, -2.596629788e-05f, -2.600381988e-05f, -2.604129310e-05f, -2.607871748e-05f, -2.611609296e-05f,
--2.615341947e-05f, -2.619069696e-05f, -2.622792536e-05f, -2.626510463e-05f, -2.630223469e-05f, -2.633931550e-05f, -2.637634698e-05f, -2.641332909e-05f, -2.645026175e-05f, -2.648714493e-05f,
--2.652397854e-05f, -2.656076254e-05f, -2.659749687e-05f, -2.663418147e-05f, -2.667081628e-05f, -2.670740124e-05f, -2.674393629e-05f, -2.678042137e-05f, -2.681685644e-05f, -2.685324142e-05f,
--2.688957627e-05f, -2.692586092e-05f, -2.696209531e-05f, -2.699827939e-05f, -2.703441310e-05f, -2.707049639e-05f, -2.710652919e-05f, -2.714251144e-05f, -2.717844310e-05f, -2.721432411e-05f,
--2.725015440e-05f, -2.728593392e-05f, -2.732166261e-05f, -2.735734042e-05f, -2.739296729e-05f, -2.742854317e-05f, -2.746406799e-05f, -2.749954170e-05f, -2.753496424e-05f, -2.757033557e-05f,
--2.760565561e-05f, -2.764092433e-05f, -2.767614165e-05f, -2.771130752e-05f, -2.774642190e-05f, -2.778148472e-05f, -2.781649593e-05f, -2.785145547e-05f, -2.788636329e-05f, -2.792121932e-05f,
--2.795602353e-05f, -2.799077585e-05f, -2.802547622e-05f, -2.806012460e-05f, -2.809472092e-05f, -2.812926514e-05f, -2.816375720e-05f, -2.819819704e-05f, -2.823258460e-05f, -2.826691985e-05f,
--2.830120271e-05f, -2.833543314e-05f, -2.836961109e-05f, -2.840373649e-05f, -2.843780930e-05f, -2.847182946e-05f, -2.850579692e-05f, -2.853971163e-05f, -2.857357352e-05f, -2.860738256e-05f,
--2.864113868e-05f, -2.867484183e-05f, -2.870849196e-05f, -2.874208901e-05f, -2.877563294e-05f, -2.880912369e-05f, -2.884256120e-05f, -2.887594544e-05f, -2.890927633e-05f, -2.894255384e-05f,
--2.897577790e-05f, -2.900894847e-05f, -2.904206549e-05f, -2.907512892e-05f, -2.910813870e-05f, -2.914109477e-05f, -2.917399710e-05f, -2.920684562e-05f, -2.923964028e-05f, -2.927238104e-05f,
--2.930506783e-05f, -2.933770062e-05f, -2.937027935e-05f, -2.940280397e-05f, -2.943527442e-05f, -2.946769066e-05f, -2.950005264e-05f, -2.953236031e-05f, -2.956461360e-05f, -2.959681249e-05f,
--2.962895691e-05f, -2.966104681e-05f, -2.969308215e-05f, -2.972506287e-05f, -2.975698893e-05f, -2.978886028e-05f, -2.982067686e-05f, -2.985243862e-05f, -2.988414552e-05f, -2.991579751e-05f,
--2.994739454e-05f, -2.997893655e-05f, -3.001042351e-05f, -3.004185536e-05f, -3.007323204e-05f, -3.010455353e-05f, -3.013581975e-05f, -3.016703067e-05f, -3.019818624e-05f, -3.022928641e-05f,
--3.026033113e-05f, -3.029132036e-05f, -3.032225404e-05f, -3.035313212e-05f, -3.038395456e-05f, -3.041472132e-05f, -3.044543234e-05f, -3.047608758e-05f, -3.050668698e-05f, -3.053723051e-05f,
--3.056771811e-05f, -3.059814974e-05f, -3.062852534e-05f, -3.065884489e-05f, -3.068910831e-05f, -3.071931558e-05f, -3.074946664e-05f, -3.077956145e-05f, -3.080959996e-05f, -3.083958212e-05f,
--3.086950788e-05f, -3.089937722e-05f, -3.092919006e-05f, -3.095894638e-05f, -3.098864612e-05f, -3.101828923e-05f, -3.104787568e-05f, -3.107740542e-05f, -3.110687840e-05f, -3.113629458e-05f,
--3.116565390e-05f, -3.119495634e-05f, -3.122420183e-05f, -3.125339034e-05f, -3.128252182e-05f, -3.131159623e-05f, -3.134061352e-05f, -3.136957365e-05f, -3.139847658e-05f, -3.142732225e-05f,
--3.145611062e-05f, -3.148484166e-05f, -3.151351532e-05f, -3.154213155e-05f, -3.157069031e-05f, -3.159919155e-05f, -3.162763524e-05f, -3.165602133e-05f, -3.168434977e-05f, -3.171262052e-05f,
--3.174083355e-05f, -3.176898880e-05f, -3.179708623e-05f, -3.182512581e-05f, -3.185310748e-05f, -3.188103121e-05f, -3.190889695e-05f, -3.193670466e-05f, -3.196445430e-05f, -3.199214583e-05f,
--3.201977920e-05f, -3.204735437e-05f, -3.207487130e-05f, -3.210232996e-05f, -3.212973028e-05f, -3.215707225e-05f, -3.218435581e-05f, -3.221158092e-05f, -3.223874754e-05f, -3.226585563e-05f,
--3.229290515e-05f, -3.231989607e-05f, -3.234682832e-05f, -3.237370189e-05f, -3.240051672e-05f, -3.242727278e-05f, -3.245397002e-05f, -3.248060841e-05f, -3.250718790e-05f, -3.253370846e-05f,
--3.256017004e-05f, -3.258657261e-05f, -3.261291613e-05f, -3.263920055e-05f, -3.266542583e-05f, -3.269159195e-05f, -3.271769885e-05f, -3.274374650e-05f, -3.276973486e-05f, -3.279566389e-05f,
--3.282153355e-05f, -3.284734380e-05f, -3.287309461e-05f, -3.289878593e-05f, -3.292441773e-05f, -3.294998997e-05f, -3.297550261e-05f, -3.300095561e-05f, -3.302634893e-05f, -3.305168255e-05f,
--3.307695641e-05f, -3.310217048e-05f, -3.312732472e-05f, -3.315241910e-05f, -3.317745358e-05f, -3.320242812e-05f, -3.322734268e-05f, -3.325219724e-05f, -3.327699174e-05f, -3.330172615e-05f,
--3.332640044e-05f, -3.335101457e-05f, -3.337556850e-05f, -3.340006220e-05f, -3.342449563e-05f, -3.344886875e-05f, -3.347318153e-05f, -3.349743394e-05f, -3.352162593e-05f, -3.354575747e-05f,
--3.356982853e-05f, -3.359383906e-05f, -3.361778904e-05f, -3.364167843e-05f, -3.366550719e-05f, -3.368927529e-05f, -3.371298269e-05f, -3.373662936e-05f, -3.376021526e-05f, -3.378374037e-05f,
--3.380720463e-05f, -3.383060803e-05f, -3.385395052e-05f, -3.387723208e-05f, -3.390045266e-05f, -3.392361223e-05f, -3.394671076e-05f, -3.396974822e-05f, -3.399272457e-05f, -3.401563978e-05f,
--3.403849381e-05f, -3.406128663e-05f, -3.408401822e-05f, -3.410668852e-05f, -3.412929752e-05f, -3.415184518e-05f, -3.417433146e-05f, -3.419675633e-05f, -3.421911977e-05f, -3.424142174e-05f,
--3.426366220e-05f, -3.428584112e-05f, -3.430795847e-05f, -3.433001423e-05f, -3.435200835e-05f, -3.437394081e-05f, -3.439581157e-05f, -3.441762060e-05f, -3.443936787e-05f, -3.446105336e-05f,
--3.448267702e-05f, -3.450423883e-05f, -3.452573875e-05f, -3.454717676e-05f, -3.456855282e-05f, -3.458986690e-05f, -3.461111898e-05f, -3.463230902e-05f, -3.465343699e-05f, -3.467450286e-05f,
--3.469550661e-05f, -3.471644819e-05f, -3.473732759e-05f, -3.475814477e-05f, -3.477889969e-05f, -3.479959235e-05f, -3.482022269e-05f, -3.484079069e-05f, -3.486129633e-05f, -3.488173958e-05f,
--3.490212040e-05f, -3.492243876e-05f, -3.494269465e-05f, -3.496288802e-05f, -3.498301885e-05f, -3.500308712e-05f, -3.502309279e-05f, -3.504303583e-05f, -3.506291622e-05f, -3.508273393e-05f,
--3.510248893e-05f, -3.512218119e-05f, -3.514181069e-05f, -3.516137739e-05f, -3.518088128e-05f, -3.520032232e-05f, -3.521970048e-05f, -3.523901574e-05f, -3.525826807e-05f, -3.527745745e-05f,
--3.529658384e-05f, -3.531564723e-05f, -3.533464758e-05f, -3.535358486e-05f, -3.537245906e-05f, -3.539127014e-05f, -3.541001808e-05f, -3.542870286e-05f, -3.544732444e-05f, -3.546588280e-05f,
--3.548437791e-05f, -3.550280976e-05f, -3.552117831e-05f, -3.553948354e-05f, -3.555772542e-05f, -3.557590393e-05f, -3.559401904e-05f, -3.561207073e-05f, -3.563005897e-05f, -3.564798374e-05f,
--3.566584502e-05f, -3.568364278e-05f, -3.570137699e-05f, -3.571904763e-05f, -3.573665468e-05f, -3.575419811e-05f, -3.577167790e-05f, -3.578909402e-05f, -3.580644646e-05f, -3.582373518e-05f,
--3.584096017e-05f, -3.585812139e-05f, -3.587521884e-05f, -3.589225248e-05f, -3.590922229e-05f, -3.592612825e-05f, -3.594297033e-05f, -3.595974852e-05f, -3.597646279e-05f, -3.599311312e-05f,
--3.600969948e-05f, -3.602622186e-05f, -3.604268022e-05f, -3.605907456e-05f, -3.607540484e-05f, -3.609167105e-05f, -3.610787316e-05f, -3.612401116e-05f, -3.614008501e-05f, -3.615609471e-05f,
--3.617204022e-05f, -3.618792153e-05f, -3.620373862e-05f, -3.621949146e-05f, -3.623518004e-05f, -3.625080433e-05f, -3.626636431e-05f, -3.628185997e-05f, -3.629729128e-05f, -3.631265822e-05f,
--3.632796077e-05f, -3.634319892e-05f, -3.635837264e-05f, -3.637348191e-05f, -3.638852672e-05f, -3.640350703e-05f, -3.641842285e-05f, -3.643327414e-05f, -3.644806088e-05f, -3.646278306e-05f,
--3.647744066e-05f, -3.649203366e-05f, -3.650656203e-05f, -3.652102577e-05f, -3.653542485e-05f, -3.654975926e-05f, -3.656402897e-05f, -3.657823398e-05f, -3.659237425e-05f, -3.660644977e-05f,
--3.662046053e-05f, -3.663440651e-05f, -3.664828768e-05f, -3.666210404e-05f, -3.667585556e-05f, -3.668954223e-05f, -3.670316403e-05f, -3.671672094e-05f, -3.673021295e-05f, -3.674364004e-05f,
--3.675700219e-05f, -3.677029939e-05f, -3.678353161e-05f, -3.679669885e-05f, -3.680980109e-05f, -3.682283831e-05f, -3.683581049e-05f, -3.684871763e-05f, -3.686155969e-05f, -3.687433668e-05f,
--3.688704856e-05f, -3.689969534e-05f, -3.691227698e-05f, -3.692479349e-05f, -3.693724483e-05f, -3.694963100e-05f, -3.696195198e-05f, -3.697420776e-05f, -3.698639832e-05f, -3.699852365e-05f,
--3.701058373e-05f, -3.702257855e-05f, -3.703450810e-05f, -3.704637235e-05f, -3.705817131e-05f, -3.706990495e-05f, -3.708157325e-05f, -3.709317622e-05f, -3.710471382e-05f, -3.711618606e-05f,
--3.712759291e-05f, -3.713893436e-05f, -3.715021040e-05f, -3.716142102e-05f, -3.717256621e-05f, -3.718364594e-05f, -3.719466022e-05f, -3.720560902e-05f, -3.721649233e-05f, -3.722731015e-05f,
--3.723806245e-05f, -3.724874924e-05f, -3.725937049e-05f, -3.726992619e-05f, -3.728041634e-05f, -3.729084092e-05f, -3.730119992e-05f, -3.731149333e-05f, -3.732172113e-05f, -3.733188332e-05f,
--3.734197989e-05f, -3.735201081e-05f, -3.736197610e-05f, -3.737187573e-05f, -3.738170968e-05f, -3.739147797e-05f, -3.740118056e-05f, -3.741081745e-05f, -3.742038864e-05f, -3.742989411e-05f,
--3.743933385e-05f, -3.744870786e-05f, -3.745801611e-05f, -3.746725861e-05f, -3.747643535e-05f, -3.748554631e-05f, -3.749459148e-05f, -3.750357086e-05f, -3.751248444e-05f, -3.752133221e-05f,
--3.753011416e-05f, -3.753883028e-05f, -3.754748056e-05f, -3.755606500e-05f, -3.756458359e-05f, -3.757303632e-05f, -3.758142317e-05f, -3.758974415e-05f, -3.759799925e-05f, -3.760618845e-05f,
--3.761431176e-05f, -3.762236915e-05f, -3.763036064e-05f, -3.763828620e-05f, -3.764614583e-05f, -3.765393953e-05f, -3.766166728e-05f, -3.766932909e-05f, -3.767692494e-05f, -3.768445483e-05f,
--3.769191875e-05f, -3.769931669e-05f, -3.770664866e-05f, -3.771391464e-05f, -3.772111462e-05f, -3.772824861e-05f, -3.773531659e-05f, -3.774231857e-05f, -3.774925452e-05f, -3.775612446e-05f,
--3.776292838e-05f, -3.776966626e-05f, -3.777633811e-05f, -3.778294391e-05f, -3.778948367e-05f, -3.779595738e-05f, -3.780236504e-05f, -3.780870664e-05f, -3.781498218e-05f, -3.782119164e-05f,
--3.782733504e-05f, -3.783341236e-05f, -3.783942361e-05f, -3.784536877e-05f, -3.785124784e-05f, -3.785706083e-05f, -3.786280772e-05f, -3.786848851e-05f, -3.787410321e-05f, -3.787965180e-05f,
--3.788513429e-05f, -3.789055067e-05f, -3.789590094e-05f, -3.790118510e-05f, -3.790640313e-05f, -3.791155506e-05f, -3.791664086e-05f, -3.792166054e-05f, -3.792661409e-05f, -3.793150152e-05f,
--3.793632282e-05f, -3.794107799e-05f, -3.794576703e-05f, -3.795038993e-05f, -3.795494670e-05f, -3.795943734e-05f, -3.796386184e-05f, -3.796822020e-05f, -3.797251243e-05f, -3.797673852e-05f,
--3.798089846e-05f, -3.798499227e-05f, -3.798901994e-05f, -3.799298146e-05f, -3.799687685e-05f, -3.800070610e-05f, -3.800446920e-05f, -3.800816616e-05f, -3.801179699e-05f, -3.801536167e-05f,
--3.801886022e-05f, -3.802229262e-05f, -3.802565889e-05f, -3.802895903e-05f, -3.803219302e-05f, -3.803536088e-05f, -3.803846261e-05f, -3.804149821e-05f, -3.804446767e-05f, -3.804737101e-05f,
--3.805020821e-05f, -3.805297930e-05f, -3.805568426e-05f, -3.805832309e-05f, -3.806089581e-05f, -3.806340241e-05f, -3.806584289e-05f, -3.806821727e-05f, -3.807052553e-05f, -3.807276768e-05f,
--3.807494373e-05f, -3.807705368e-05f, -3.807909753e-05f, -3.808107529e-05f, -3.808298695e-05f, -3.808483253e-05f, -3.808661202e-05f, -3.808832542e-05f, -3.808997275e-05f, -3.809155401e-05f,
--3.809306920e-05f, -3.809451832e-05f, -3.809590138e-05f, -3.809721838e-05f, -3.809846933e-05f, -3.809965423e-05f, -3.810077308e-05f, -3.810182590e-05f, -3.810281269e-05f, -3.810373344e-05f,
--3.810458817e-05f, -3.810537688e-05f, -3.810609958e-05f, -3.810675627e-05f, -3.810734696e-05f, -3.810787165e-05f, -3.810833035e-05f, -3.810872306e-05f, -3.810904980e-05f, -3.810931056e-05f,
--3.810950536e-05f, -3.810963419e-05f, -3.810969707e-05f, -3.810969401e-05f, -3.810962500e-05f, -3.810949006e-05f, -3.810928919e-05f, -3.810902241e-05f, -3.810868971e-05f, -3.810829110e-05f,
--3.810782660e-05f, -3.810729620e-05f, -3.810669993e-05f, -3.810603777e-05f, -3.810530975e-05f, -3.810451587e-05f, -3.810365614e-05f, -3.810273057e-05f, -3.810173916e-05f, -3.810068192e-05f,
--3.809955887e-05f, -3.809837001e-05f, -3.809711534e-05f, -3.809579489e-05f, -3.809440865e-05f, -3.809295664e-05f, -3.809143886e-05f, -3.808985533e-05f, -3.808820605e-05f, -3.808649103e-05f,
--3.808471029e-05f, -3.808286383e-05f, -3.808095167e-05f, -3.807897380e-05f, -3.807693025e-05f, -3.807482102e-05f, -3.807264613e-05f, -3.807040558e-05f, -3.806809938e-05f, -3.806572755e-05f,
--3.806329010e-05f, -3.806078703e-05f, -3.805821836e-05f, -3.805558410e-05f, -3.805288425e-05f, -3.805011884e-05f, -3.804728788e-05f, -3.804439136e-05f, -3.804142931e-05f, -3.803840174e-05f,
--3.803530866e-05f, -3.803215008e-05f, -3.802892602e-05f, -3.802563648e-05f, -3.802228148e-05f, -3.801886103e-05f, -3.801537514e-05f, -3.801182383e-05f, -3.800820711e-05f, -3.800452499e-05f,
--3.800077748e-05f, -3.799696460e-05f, -3.799308637e-05f, -3.798914278e-05f, -3.798513387e-05f, -3.798105964e-05f, -3.797692010e-05f, -3.797271527e-05f, -3.796844516e-05f, -3.796410979e-05f,
--3.795970917e-05f, -3.795524332e-05f, -3.795071224e-05f, -3.794611596e-05f, -3.794145449e-05f, -3.793672784e-05f, -3.793193603e-05f, -3.792707907e-05f, -3.792215698e-05f, -3.791716978e-05f,
--3.791211747e-05f, -3.790700008e-05f, -3.790181761e-05f, -3.789657009e-05f, -3.789125753e-05f, -3.788587994e-05f, -3.788043735e-05f, -3.787492977e-05f, -3.786935721e-05f, -3.786371969e-05f,
--3.785801723e-05f, -3.785224984e-05f, -3.784641754e-05f, -3.784052035e-05f, -3.783455828e-05f, -3.782853135e-05f, -3.782243958e-05f, -3.781628298e-05f, -3.781006158e-05f, -3.780377538e-05f,
--3.779742441e-05f, -3.779100868e-05f, -3.778452822e-05f, -3.777798303e-05f, -3.777137315e-05f, -3.776469858e-05f, -3.775795934e-05f, -3.775115545e-05f, -3.774428693e-05f, -3.773735381e-05f,
--3.773035608e-05f, -3.772329379e-05f, -3.771616694e-05f, -3.770897555e-05f, -3.770171965e-05f, -3.769439924e-05f, -3.768701436e-05f, -3.767956502e-05f, -3.767205124e-05f, -3.766447303e-05f,
--3.765683043e-05f, -3.764912344e-05f, -3.764135210e-05f, -3.763351641e-05f, -3.762561640e-05f, -3.761765208e-05f, -3.760962349e-05f, -3.760153064e-05f, -3.759337354e-05f, -3.758515223e-05f,
--3.757686672e-05f, -3.756851703e-05f, -3.756010318e-05f, -3.755162520e-05f, -3.754308310e-05f, -3.753447691e-05f, -3.752580665e-05f, -3.751707234e-05f, -3.750827400e-05f, -3.749941165e-05f,
--3.749048532e-05f, -3.748149502e-05f, -3.747244078e-05f, -3.746332263e-05f, -3.745414057e-05f, -3.744489465e-05f, -3.743558487e-05f, -3.742621126e-05f, -3.741677384e-05f, -3.740727265e-05f,
--3.739770769e-05f, -3.738807899e-05f, -3.737838658e-05f, -3.736863047e-05f, -3.735881070e-05f, -3.734892729e-05f, -3.733898025e-05f, -3.732896962e-05f, -3.731889541e-05f, -3.730875765e-05f,
--3.729855637e-05f, -3.728829159e-05f, -3.727796333e-05f, -3.726757161e-05f, -3.725711647e-05f, -3.724659792e-05f, -3.723601600e-05f, -3.722537071e-05f, -3.721466210e-05f, -3.720389019e-05f,
--3.719305499e-05f, -3.718215655e-05f, -3.717119487e-05f, -3.716016998e-05f, -3.714908192e-05f, -3.713793071e-05f, -3.712671637e-05f, -3.711543893e-05f, -3.710409841e-05f, -3.709269485e-05f,
--3.708122826e-05f, -3.706969867e-05f, -3.705810612e-05f, -3.704645062e-05f, -3.703473220e-05f, -3.702295089e-05f, -3.701110672e-05f, -3.699919971e-05f, -3.698722989e-05f, -3.697519729e-05f,
--3.696310193e-05f, -3.695094385e-05f, -3.693872306e-05f, -3.692643960e-05f, -3.691409349e-05f, -3.690168477e-05f, -3.688921345e-05f, -3.687667957e-05f, -3.686408316e-05f, -3.685142425e-05f,
--3.683870285e-05f, -3.682591900e-05f, -3.681307274e-05f, -3.680016408e-05f, -3.678719306e-05f, -3.677415970e-05f, -3.676106404e-05f, -3.674790610e-05f, -3.673468591e-05f, -3.672140350e-05f,
--3.670805890e-05f, -3.669465215e-05f, -3.668118326e-05f, -3.666765227e-05f, -3.665405921e-05f, -3.664040411e-05f, -3.662668700e-05f, -3.661290790e-05f, -3.659906686e-05f, -3.658516389e-05f,
--3.657119904e-05f, -3.655717232e-05f, -3.654308378e-05f, -3.652893343e-05f, -3.651472132e-05f, -3.650044747e-05f, -3.648611191e-05f, -3.647171468e-05f, -3.645725580e-05f, -3.644273532e-05f,
--3.642815325e-05f, -3.641350963e-05f, -3.639880449e-05f, -3.638403786e-05f, -3.636920979e-05f, -3.635432028e-05f, -3.633936939e-05f, -3.632435714e-05f, -3.630928356e-05f, -3.629414869e-05f,
--3.627895256e-05f, -3.626369520e-05f, -3.624837664e-05f, -3.623299692e-05f, -3.621755606e-05f, -3.620205411e-05f, -3.618649110e-05f, -3.617086705e-05f, -3.615518200e-05f, -3.613943599e-05f,
--3.612362905e-05f, -3.610776120e-05f, -3.609183250e-05f, -3.607584296e-05f, -3.605979263e-05f, -3.604368153e-05f, -3.602750970e-05f, -3.601127718e-05f, -3.599498400e-05f, -3.597863019e-05f,
--3.596221580e-05f, -3.594574084e-05f, -3.592920536e-05f, -3.591260940e-05f, -3.589595298e-05f, -3.587923614e-05f, -3.586245892e-05f, -3.584562136e-05f, -3.582872348e-05f, -3.581176532e-05f,
--3.579474693e-05f, -3.577766832e-05f, -3.576052955e-05f, -3.574333064e-05f, -3.572607164e-05f, -3.570875257e-05f, -3.569137348e-05f, -3.567393439e-05f, -3.565643535e-05f, -3.563887640e-05f,
--3.562125756e-05f, -3.560357888e-05f, -3.558584039e-05f, -3.556804213e-05f, -3.555018414e-05f, -3.553226645e-05f, -3.551428910e-05f, -3.549625212e-05f, -3.547815556e-05f, -3.545999946e-05f,
--3.544178384e-05f, -3.542350875e-05f, -3.540517422e-05f, -3.538678030e-05f, -3.536832701e-05f, -3.534981441e-05f, -3.533124252e-05f, -3.531261138e-05f, -3.529392104e-05f, -3.527517153e-05f,
--3.525636289e-05f, -3.523749515e-05f, -3.521856837e-05f, -3.519958257e-05f, -3.518053779e-05f, -3.516143408e-05f, -3.514227147e-05f, -3.512305000e-05f, -3.510376971e-05f, -3.508443064e-05f,
--3.506503283e-05f, -3.504557633e-05f, -3.502606116e-05f, -3.500648737e-05f, -3.498685499e-05f, -3.496716408e-05f, -3.494741466e-05f, -3.492760679e-05f, -3.490774049e-05f, -3.488781581e-05f,
--3.486783279e-05f, -3.484779147e-05f, -3.482769189e-05f, -3.480753409e-05f, -3.478731812e-05f, -3.476704401e-05f, -3.474671180e-05f, -3.472632154e-05f, -3.470587326e-05f, -3.468536702e-05f,
--3.466480284e-05f, -3.464418077e-05f, -3.462350085e-05f, -3.460276313e-05f, -3.458196765e-05f, -3.456111444e-05f, -3.454020355e-05f, -3.451923502e-05f, -3.449820890e-05f, -3.447712522e-05f,
--3.445598403e-05f, -3.443478537e-05f, -3.441352929e-05f, -3.439221582e-05f, -3.437084501e-05f, -3.434941690e-05f, -3.432793154e-05f, -3.430638896e-05f, -3.428478921e-05f, -3.426313234e-05f,
--3.424141838e-05f, -3.421964739e-05f, -3.419781940e-05f, -3.417593446e-05f, -3.415399260e-05f, -3.413199389e-05f, -3.410993835e-05f, -3.408782603e-05f, -3.406565698e-05f, -3.404343125e-05f,
--3.402114886e-05f, -3.399880988e-05f, -3.397641434e-05f, -3.395396229e-05f, -3.393145378e-05f, -3.390888884e-05f, -3.388626752e-05f, -3.386358987e-05f, -3.384085594e-05f, -3.381806576e-05f,
--3.379521938e-05f, -3.377231685e-05f, -3.374935822e-05f, -3.372634352e-05f, -3.370327281e-05f, -3.368014613e-05f, -3.365696353e-05f, -3.363372504e-05f, -3.361043072e-05f, -3.358708062e-05f,
--3.356367478e-05f, -3.354021324e-05f, -3.351669606e-05f, -3.349312327e-05f, -3.346949493e-05f, -3.344581108e-05f, -3.342207176e-05f, -3.339827703e-05f, -3.337442694e-05f, -3.335052152e-05f,
--3.332656083e-05f, -3.330254491e-05f, -3.327847381e-05f, -3.325434758e-05f, -3.323016626e-05f, -3.320592990e-05f, -3.318163856e-05f, -3.315729227e-05f, -3.313289108e-05f, -3.310843505e-05f,
--3.308392422e-05f, -3.305935864e-05f, -3.303473835e-05f, -3.301006341e-05f, -3.298533386e-05f, -3.296054976e-05f, -3.293571114e-05f, -3.291081806e-05f, -3.288587057e-05f, -3.286086872e-05f,
--3.283581255e-05f, -3.281070211e-05f, -3.278553746e-05f, -3.276031864e-05f, -3.273504570e-05f, -3.270971869e-05f, -3.268433765e-05f, -3.265890265e-05f, -3.263341373e-05f, -3.260787093e-05f,
--3.258227431e-05f, -3.255662392e-05f, -3.253091981e-05f, -3.250516202e-05f, -3.247935061e-05f, -3.245348563e-05f, -3.242756713e-05f, -3.240159515e-05f, -3.237556976e-05f, -3.234949099e-05f,
--3.232335890e-05f, -3.229717354e-05f, -3.227093496e-05f, -3.224464322e-05f, -3.221829836e-05f, -3.219190043e-05f, -3.216544948e-05f, -3.213894557e-05f, -3.211238875e-05f, -3.208577907e-05f,
--3.205911658e-05f, -3.203240132e-05f, -3.200563337e-05f, -3.197881275e-05f, -3.195193954e-05f, -3.192501377e-05f, -3.189803550e-05f, -3.187100479e-05f, -3.184392168e-05f, -3.181678622e-05f,
--3.178959848e-05f, -3.176235850e-05f, -3.173506633e-05f, -3.170772203e-05f, -3.168032564e-05f, -3.165287723e-05f, -3.162537685e-05f, -3.159782454e-05f, -3.157022036e-05f, -3.154256437e-05f,
--3.151485661e-05f, -3.148709714e-05f, -3.145928602e-05f, -3.143142329e-05f, -3.140350901e-05f, -3.137554324e-05f, -3.134752603e-05f, -3.131945742e-05f, -3.129133748e-05f, -3.126316626e-05f,
--3.123494382e-05f, -3.120667020e-05f, -3.117834546e-05f, -3.114996965e-05f, -3.112154284e-05f, -3.109306507e-05f, -3.106453640e-05f, -3.103595688e-05f, -3.100732657e-05f, -3.097864552e-05f,
--3.094991379e-05f, -3.092113143e-05f, -3.089229850e-05f, -3.086341506e-05f, -3.083448114e-05f, -3.080549683e-05f, -3.077646216e-05f, -3.074737719e-05f, -3.071824198e-05f, -3.068905659e-05f,
--3.065982106e-05f, -3.063053546e-05f, -3.060119985e-05f, -3.057181427e-05f, -3.054237878e-05f, -3.051289345e-05f, -3.048335831e-05f, -3.045377345e-05f, -3.042413889e-05f, -3.039445472e-05f,
--3.036472097e-05f, -3.033493771e-05f, -3.030510500e-05f, -3.027522288e-05f, -3.024529142e-05f, -3.021531068e-05f, -3.018528071e-05f, -3.015520156e-05f, -3.012507330e-05f, -3.009489599e-05f,
--3.006466967e-05f, -3.003439441e-05f, -3.000407026e-05f, -2.997369729e-05f, -2.994327554e-05f, -2.991280508e-05f, -2.988228597e-05f, -2.985171826e-05f, -2.982110201e-05f, -2.979043727e-05f,
--2.975972411e-05f, -2.972896259e-05f, -2.969815276e-05f, -2.966729468e-05f, -2.963638841e-05f, -2.960543401e-05f, -2.957443153e-05f, -2.954338104e-05f, -2.951228259e-05f, -2.948113624e-05f,
--2.944994205e-05f, -2.941870008e-05f, -2.938741039e-05f, -2.935607304e-05f, -2.932468809e-05f, -2.929325559e-05f, -2.926177560e-05f, -2.923024819e-05f, -2.919867341e-05f, -2.916705133e-05f,
--2.913538200e-05f, -2.910366548e-05f, -2.907190183e-05f, -2.904009112e-05f, -2.900823340e-05f, -2.897632873e-05f, -2.894437717e-05f, -2.891237878e-05f, -2.888033362e-05f, -2.884824176e-05f,
--2.881610325e-05f, -2.878391815e-05f, -2.875168653e-05f, -2.871940844e-05f, -2.868708394e-05f, -2.865471310e-05f, -2.862229597e-05f, -2.858983263e-05f, -2.855732312e-05f, -2.852476750e-05f,
--2.849216585e-05f, -2.845951822e-05f, -2.842682467e-05f, -2.839408526e-05f, -2.836130006e-05f, -2.832846912e-05f, -2.829559252e-05f, -2.826267030e-05f, -2.822970253e-05f, -2.819668927e-05f,
--2.816363059e-05f, -2.813052654e-05f, -2.809737720e-05f, -2.806418261e-05f, -2.803094284e-05f, -2.799765796e-05f, -2.796432803e-05f, -2.793095310e-05f, -2.789753324e-05f, -2.786406852e-05f,
--2.783055900e-05f, -2.779700473e-05f, -2.776340578e-05f, -2.772976222e-05f, -2.769607410e-05f, -2.766234150e-05f, -2.762856447e-05f, -2.759474307e-05f, -2.756087737e-05f, -2.752696743e-05f,
--2.749301332e-05f, -2.745901509e-05f, -2.742497282e-05f, -2.739088656e-05f, -2.735675638e-05f, -2.732258234e-05f, -2.728836451e-05f, -2.725410295e-05f, -2.721979772e-05f, -2.718544888e-05f,
--2.715105651e-05f, -2.711662066e-05f, -2.708214140e-05f, -2.704761880e-05f, -2.701305291e-05f, -2.697844380e-05f, -2.694379154e-05f, -2.690909619e-05f, -2.687435781e-05f, -2.683957647e-05f,
--2.680475224e-05f, -2.676988517e-05f, -2.673497534e-05f, -2.670002280e-05f, -2.666502763e-05f, -2.662998988e-05f, -2.659490963e-05f, -2.655978693e-05f, -2.652462186e-05f, -2.648941447e-05f,
--2.645416484e-05f, -2.641887303e-05f, -2.638353910e-05f, -2.634816312e-05f, -2.631274515e-05f, -2.627728527e-05f, -2.624178353e-05f, -2.620624000e-05f, -2.617065475e-05f, -2.613502784e-05f,
--2.609935935e-05f, -2.606364932e-05f, -2.602789784e-05f, -2.599210497e-05f, -2.595627077e-05f, -2.592039531e-05f, -2.588447866e-05f, -2.584852088e-05f, -2.581252204e-05f, -2.577648220e-05f,
--2.574040144e-05f, -2.570427981e-05f, -2.566811740e-05f, -2.563191425e-05f, -2.559567044e-05f, -2.555938604e-05f, -2.552306111e-05f, -2.548669572e-05f, -2.545028993e-05f, -2.541384383e-05f,
--2.537735746e-05f, -2.534083090e-05f, -2.530426422e-05f, -2.526765748e-05f, -2.523101075e-05f, -2.519432410e-05f, -2.515759759e-05f, -2.512083130e-05f, -2.508402529e-05f, -2.504717963e-05f,
--2.501029438e-05f, -2.497336962e-05f, -2.493640541e-05f, -2.489940183e-05f, -2.486235893e-05f, -2.482527678e-05f, -2.478815547e-05f, -2.475099504e-05f, -2.471379558e-05f, -2.467655715e-05f,
--2.463927981e-05f, -2.460196365e-05f, -2.456460871e-05f, -2.452721509e-05f, -2.448978283e-05f, -2.445231202e-05f, -2.441480271e-05f, -2.437725499e-05f, -2.433966891e-05f, -2.430204455e-05f,
--2.426438198e-05f, -2.422668126e-05f, -2.418894246e-05f, -2.415116566e-05f, -2.411335092e-05f, -2.407549831e-05f, -2.403760791e-05f, -2.399967977e-05f, -2.396171398e-05f, -2.392371060e-05f,
--2.388566969e-05f, -2.384759133e-05f, -2.380947560e-05f, -2.377132255e-05f, -2.373313226e-05f, -2.369490480e-05f, -2.365664024e-05f, -2.361833864e-05f, -2.358000009e-05f, -2.354162464e-05f,
--2.350321237e-05f, -2.346476335e-05f, -2.342627765e-05f, -2.338775534e-05f, -2.334919649e-05f, -2.331060118e-05f, -2.327196946e-05f, -2.323330141e-05f, -2.319459711e-05f, -2.315585662e-05f,
--2.311708001e-05f, -2.307826736e-05f, -2.303941873e-05f, -2.300053420e-05f, -2.296161384e-05f, -2.292265772e-05f, -2.288366590e-05f, -2.284463847e-05f, -2.280557549e-05f, -2.276647703e-05f,
--2.272734317e-05f, -2.268817397e-05f, -2.264896951e-05f, -2.260972985e-05f, -2.257045508e-05f, -2.253114526e-05f, -2.249180046e-05f, -2.245242076e-05f, -2.241300623e-05f, -2.237355693e-05f,
--2.233407294e-05f, -2.229455434e-05f, -2.225500119e-05f, -2.221541356e-05f, -2.217579154e-05f, -2.213613518e-05f, -2.209644457e-05f, -2.205671977e-05f, -2.201696086e-05f, -2.197716791e-05f,
--2.193734099e-05f, -2.189748017e-05f, -2.185758553e-05f, -2.181765714e-05f, -2.177769507e-05f, -2.173769939e-05f, -2.169767018e-05f, -2.165760752e-05f, -2.161751146e-05f, -2.157738209e-05f,
--2.153721947e-05f, -2.149702369e-05f, -2.145679481e-05f, -2.141653291e-05f, -2.137623806e-05f, -2.133591033e-05f, -2.129554979e-05f, -2.125515653e-05f, -2.121473061e-05f, -2.117427210e-05f,
--2.113378109e-05f, -2.109325764e-05f, -2.105270182e-05f, -2.101211371e-05f, -2.097149339e-05f, -2.093084092e-05f, -2.089015639e-05f, -2.084943985e-05f, -2.080869140e-05f, -2.076791110e-05f,
--2.072709902e-05f, -2.068625524e-05f, -2.064537984e-05f, -2.060447288e-05f, -2.056353445e-05f, -2.052256461e-05f, -2.048156344e-05f, -2.044053101e-05f, -2.039946740e-05f, -2.035837269e-05f,
--2.031724694e-05f, -2.027609023e-05f, -2.023490264e-05f, -2.019368424e-05f, -2.015243510e-05f, -2.011115530e-05f, -2.006984491e-05f, -2.002850402e-05f, -1.998713268e-05f, -1.994573098e-05f,
--1.990429900e-05f, -1.986283680e-05f, -1.982134446e-05f, -1.977982206e-05f, -1.973826967e-05f, -1.969668737e-05f, -1.965507523e-05f, -1.961343333e-05f, -1.957176174e-05f, -1.953006054e-05f,
--1.948832980e-05f, -1.944656959e-05f, -1.940478000e-05f, -1.936296110e-05f, -1.932111296e-05f, -1.927923566e-05f, -1.923732928e-05f, -1.919539388e-05f, -1.915342955e-05f, -1.911143637e-05f,
--1.906941439e-05f, -1.902736372e-05f, -1.898528441e-05f, -1.894317654e-05f, -1.890104019e-05f, -1.885887544e-05f, -1.881668236e-05f, -1.877446103e-05f, -1.873221152e-05f, -1.868993391e-05f,
--1.864762828e-05f, -1.860529470e-05f, -1.856293324e-05f, -1.852054399e-05f, -1.847812702e-05f, -1.843568241e-05f, -1.839321023e-05f, -1.835071055e-05f, -1.830818347e-05f, -1.826562904e-05f,
--1.822304736e-05f, -1.818043848e-05f, -1.813780250e-05f, -1.809513949e-05f, -1.805244952e-05f, -1.800973268e-05f, -1.796698903e-05f, -1.792421865e-05f, -1.788142163e-05f, -1.783859803e-05f,
--1.779574794e-05f, -1.775287143e-05f, -1.770996858e-05f, -1.766703947e-05f, -1.762408417e-05f, -1.758110276e-05f, -1.753809531e-05f, -1.749506191e-05f, -1.745200263e-05f, -1.740891755e-05f,
--1.736580674e-05f, -1.732267029e-05f, -1.727950826e-05f, -1.723632075e-05f, -1.719310782e-05f, -1.714986955e-05f, -1.710660602e-05f, -1.706331730e-05f, -1.702000349e-05f, -1.697666464e-05f,
--1.693330084e-05f, -1.688991217e-05f, -1.684649871e-05f, -1.680306053e-05f, -1.675959770e-05f, -1.671611032e-05f, -1.667259845e-05f, -1.662906218e-05f, -1.658550158e-05f, -1.654191672e-05f,
--1.649830770e-05f, -1.645467458e-05f, -1.641101744e-05f, -1.636733636e-05f, -1.632363142e-05f, -1.627990271e-05f, -1.623615028e-05f, -1.619237423e-05f, -1.614857463e-05f, -1.610475156e-05f,
--1.606090510e-05f, -1.601703533e-05f, -1.597314232e-05f, -1.592922616e-05f, -1.588528692e-05f, -1.584132467e-05f, -1.579733951e-05f, -1.575333150e-05f, -1.570930073e-05f, -1.566524727e-05f,
--1.562117121e-05f, -1.557707262e-05f, -1.553295157e-05f, -1.548880816e-05f, -1.544464245e-05f, -1.540045453e-05f, -1.535624447e-05f, -1.531201236e-05f, -1.526775827e-05f, -1.522348228e-05f,
--1.517918447e-05f, -1.513486492e-05f, -1.509052371e-05f, -1.504616092e-05f, -1.500177662e-05f, -1.495737090e-05f, -1.491294383e-05f, -1.486849549e-05f, -1.482402597e-05f, -1.477953533e-05f,
--1.473502367e-05f, -1.469049106e-05f, -1.464593758e-05f, -1.460136330e-05f, -1.455676831e-05f, -1.451215269e-05f, -1.446751652e-05f, -1.442285987e-05f, -1.437818283e-05f, -1.433348547e-05f,
--1.428876787e-05f, -1.424403012e-05f, -1.419927229e-05f, -1.415449447e-05f, -1.410969672e-05f, -1.406487914e-05f, -1.402004180e-05f, -1.397518478e-05f, -1.393030816e-05f, -1.388541202e-05f,
--1.384049644e-05f, -1.379556149e-05f, -1.375060727e-05f, -1.370563385e-05f, -1.366064131e-05f, -1.361562972e-05f, -1.357059917e-05f, -1.352554975e-05f, -1.348048152e-05f, -1.343539457e-05f,
--1.339028897e-05f, -1.334516482e-05f, -1.330002218e-05f, -1.325486114e-05f, -1.320968179e-05f, -1.316448418e-05f, -1.311926842e-05f, -1.307403458e-05f, -1.302878273e-05f, -1.298351297e-05f,
--1.293822536e-05f, -1.289292000e-05f, -1.284759695e-05f, -1.280225630e-05f, -1.275689813e-05f, -1.271152253e-05f, -1.266612956e-05f, -1.262071932e-05f, -1.257529188e-05f, -1.252984731e-05f,
--1.248438572e-05f, -1.243890716e-05f, -1.239341173e-05f, -1.234789950e-05f, -1.230237056e-05f, -1.225682498e-05f, -1.221126285e-05f, -1.216568424e-05f, -1.212008924e-05f, -1.207447792e-05f,
--1.202885038e-05f, -1.198320668e-05f, -1.193754691e-05f, -1.189187115e-05f, -1.184617948e-05f, -1.180047198e-05f, -1.175474874e-05f, -1.170900983e-05f, -1.166325533e-05f, -1.161748532e-05f,
--1.157169989e-05f, -1.152589912e-05f, -1.148008308e-05f, -1.143425186e-05f, -1.138840554e-05f, -1.134254420e-05f, -1.129666792e-05f, -1.125077677e-05f, -1.120487086e-05f, -1.115895024e-05f,
--1.111301501e-05f, -1.106706525e-05f, -1.102110103e-05f, -1.097512243e-05f, -1.092912955e-05f, -1.088312246e-05f, -1.083710123e-05f, -1.079106596e-05f, -1.074501672e-05f, -1.069895360e-05f,
--1.065287667e-05f, -1.060678601e-05f, -1.056068172e-05f, -1.051456386e-05f, -1.046843252e-05f, -1.042228778e-05f, -1.037612973e-05f, -1.032995844e-05f, -1.028377399e-05f, -1.023757647e-05f,
--1.019136596e-05f, -1.014514254e-05f, -1.009890628e-05f, -1.005265728e-05f, -1.000639561e-05f, -9.960121356e-06f, -9.913834597e-06f, -9.867535414e-06f, -9.821223890e-06f, -9.774900106e-06f,
--9.728564144e-06f, -9.682216084e-06f, -9.635856008e-06f, -9.589483998e-06f, -9.543100135e-06f, -9.496704501e-06f, -9.450297178e-06f, -9.403878246e-06f, -9.357447787e-06f, -9.311005883e-06f,
--9.264552616e-06f, -9.218088066e-06f, -9.171612317e-06f, -9.125125448e-06f, -9.078627542e-06f, -9.032118681e-06f, -8.985598945e-06f, -8.939068418e-06f, -8.892527180e-06f, -8.845975312e-06f,
--8.799412898e-06f, -8.752840017e-06f, -8.706256753e-06f, -8.659663187e-06f, -8.613059400e-06f, -8.566445474e-06f, -8.519821491e-06f, -8.473187533e-06f, -8.426543681e-06f, -8.379890017e-06f,
--8.333226624e-06f, -8.286553582e-06f, -8.239870973e-06f, -8.193178880e-06f, -8.146477383e-06f, -8.099766566e-06f, -8.053046509e-06f, -8.006317295e-06f, -7.959579005e-06f, -7.912831722e-06f,
--7.866075526e-06f, -7.819310500e-06f, -7.772536726e-06f, -7.725754285e-06f, -7.678963260e-06f, -7.632163732e-06f, -7.585355784e-06f, -7.538539496e-06f, -7.491714952e-06f, -7.444882232e-06f,
--7.398041419e-06f, -7.351192595e-06f, -7.304335842e-06f, -7.257471241e-06f, -7.210598875e-06f, -7.163718825e-06f, -7.116831173e-06f, -7.069936002e-06f, -7.023033393e-06f, -6.976123428e-06f,
--6.929206189e-06f, -6.882281759e-06f, -6.835350219e-06f, -6.788411650e-06f, -6.741466136e-06f, -6.694513758e-06f, -6.647554597e-06f, -6.600588737e-06f, -6.553616258e-06f, -6.506637244e-06f,
--6.459651776e-06f, -6.412659935e-06f, -6.365661805e-06f, -6.318657466e-06f, -6.271647001e-06f, -6.224630492e-06f, -6.177608022e-06f, -6.130579671e-06f, -6.083545522e-06f, -6.036505657e-06f,
--5.989460158e-06f, -5.942409108e-06f, -5.895352587e-06f, -5.848290678e-06f, -5.801223464e-06f, -5.754151025e-06f, -5.707073445e-06f, -5.659990805e-06f, -5.612903187e-06f, -5.565810673e-06f,
--5.518713345e-06f, -5.471611286e-06f, -5.424504577e-06f, -5.377393300e-06f, -5.330277537e-06f, -5.283157371e-06f, -5.236032883e-06f, -5.188904156e-06f, -5.141771270e-06f, -5.094634310e-06f,
--5.047493355e-06f, -5.000348489e-06f, -4.953199794e-06f, -4.906047351e-06f, -4.858891242e-06f, -4.811731550e-06f, -4.764568356e-06f, -4.717401743e-06f, -4.670231792e-06f, -4.623058586e-06f,
--4.575882206e-06f, -4.528702735e-06f, -4.481520254e-06f, -4.434334845e-06f, -4.387146591e-06f, -4.339955573e-06f, -4.292761874e-06f, -4.245565575e-06f, -4.198366758e-06f, -4.151165505e-06f,
--4.103961899e-06f, -4.056756021e-06f, -4.009547953e-06f, -3.962337777e-06f, -3.915125575e-06f, -3.867911429e-06f, -3.820695421e-06f, -3.773477633e-06f, -3.726258146e-06f, -3.679037043e-06f,
--3.631814406e-06f, -3.584590316e-06f, -3.537364855e-06f, -3.490138106e-06f, -3.442910149e-06f, -3.395681068e-06f, -3.348450944e-06f, -3.301219858e-06f, -3.253987893e-06f, -3.206755131e-06f,
--3.159521652e-06f, -3.112287540e-06f, -3.065052876e-06f, -3.017817742e-06f, -2.970582219e-06f, -2.923346390e-06f, -2.876110335e-06f, -2.828874138e-06f, -2.781637880e-06f, -2.734401642e-06f,
--2.687165507e-06f, -2.639929556e-06f, -2.592693870e-06f, -2.545458533e-06f, -2.498223624e-06f, -2.450989227e-06f, -2.403755422e-06f, -2.356522292e-06f, -2.309289918e-06f, -2.262058382e-06f,
--2.214827765e-06f, -2.167598150e-06f, -2.120369618e-06f, -2.073142250e-06f, -2.025916128e-06f, -1.978691334e-06f, -1.931467949e-06f, -1.884246055e-06f, -1.837025734e-06f, -1.789807067e-06f,
--1.742590136e-06f, -1.695375022e-06f, -1.648161807e-06f, -1.600950572e-06f, -1.553741399e-06f, -1.506534370e-06f, -1.459329565e-06f, -1.412127067e-06f, -1.364926957e-06f, -1.317729316e-06f,
--1.270534226e-06f, -1.223341768e-06f, -1.176152024e-06f, -1.128965075e-06f, -1.081781002e-06f, -1.034599888e-06f, -9.874218121e-07f, -9.402468572e-07f, -8.930751041e-07f, -8.459066344e-07f,
--7.987415292e-07f, -7.515798699e-07f, -7.044217377e-07f, -6.572672141e-07f, -6.101163801e-07f, -5.629693171e-07f, -5.158261062e-07f, -4.686868288e-07f, -4.215515659e-07f, -3.744203988e-07f,
--3.272934087e-07f, -2.801706767e-07f, -2.330522840e-07f, -1.859383116e-07f, -1.388288406e-07f, -9.172395226e-08f, -4.462372754e-08f, 2.471752495e-09f, 4.956240679e-08f, 9.664815432e-08f,
-1.437289141e-07f, 1.908046051e-07f, 2.378751464e-07f, 2.849404569e-07f, 3.320004559e-07f, 3.790550623e-07f, 4.261041952e-07f, 4.731477738e-07f, 5.201857172e-07f, 5.672179445e-07f,
-6.142443750e-07f, 6.612649277e-07f, 7.082795219e-07f, 7.552880768e-07f, 8.022905117e-07f, 8.492867458e-07f, 8.962766985e-07f, 9.432602889e-07f, 9.902374364e-07f, 1.037208060e-06f,
-1.084172080e-06f, 1.131129415e-06f, 1.178079985e-06f, 1.225023708e-06f, 1.271960505e-06f, 1.318890295e-06f, 1.365812998e-06f, 1.412728532e-06f, 1.459636817e-06f, 1.506537774e-06f,
-1.553431321e-06f, 1.600317378e-06f, 1.647195864e-06f, 1.694066700e-06f, 1.740929805e-06f, 1.787785099e-06f, 1.834632501e-06f, 1.881471931e-06f, 1.928303308e-06f, 1.975126553e-06f,
-2.021941586e-06f, 2.068748325e-06f, 2.115546691e-06f, 2.162336604e-06f, 2.209117984e-06f, 2.255890750e-06f, 2.302654823e-06f, 2.349410121e-06f, 2.396156567e-06f, 2.442894078e-06f,
-2.489622576e-06f, 2.536341980e-06f, 2.583052210e-06f, 2.629753187e-06f, 2.676444831e-06f, 2.723127061e-06f, 2.769799798e-06f, 2.816462962e-06f, 2.863116473e-06f, 2.909760252e-06f,
-2.956394218e-06f, 3.003018293e-06f, 3.049632395e-06f, 3.096236447e-06f, 3.142830367e-06f, 3.189414076e-06f, 3.235987496e-06f, 3.282550545e-06f, 3.329103145e-06f, 3.375645217e-06f,
-3.422176679e-06f, 3.468697454e-06f, 3.515207462e-06f, 3.561706623e-06f, 3.608194858e-06f, 3.654672087e-06f, 3.701138232e-06f, 3.747593213e-06f, 3.794036950e-06f, 3.840469365e-06f,
-3.886890378e-06f, 3.933299910e-06f, 3.979697881e-06f, 4.026084214e-06f, 4.072458828e-06f, 4.118821644e-06f, 4.165172584e-06f, 4.211511569e-06f, 4.257838519e-06f, 4.304153355e-06f,
-4.350455999e-06f, 4.396746372e-06f, 4.443024394e-06f, 4.489289987e-06f, 4.535543073e-06f, 4.581783571e-06f, 4.628011405e-06f, 4.674226494e-06f, 4.720428760e-06f, 4.766618124e-06f,
-4.812794509e-06f, 4.858957835e-06f, 4.905108023e-06f, 4.951244995e-06f, 4.997368673e-06f, 5.043478978e-06f, 5.089575832e-06f, 5.135659156e-06f, 5.181728872e-06f, 5.227784901e-06f,
-5.273827166e-06f, 5.319855587e-06f, 5.365870087e-06f, 5.411870587e-06f, 5.457857010e-06f, 5.503829276e-06f, 5.549787308e-06f, 5.595731029e-06f, 5.641660358e-06f, 5.687575220e-06f,
-5.733475535e-06f, 5.779361226e-06f, 5.825232214e-06f, 5.871088423e-06f, 5.916929773e-06f, 5.962756188e-06f, 6.008567589e-06f, 6.054363899e-06f, 6.100145039e-06f, 6.145910933e-06f,
-6.191661502e-06f, 6.237396669e-06f, 6.283116356e-06f, 6.328820486e-06f, 6.374508982e-06f, 6.420181764e-06f, 6.465838758e-06f, 6.511479884e-06f, 6.557105065e-06f, 6.602714225e-06f,
-6.648307285e-06f, 6.693884169e-06f, 6.739444799e-06f, 6.784989098e-06f, 6.830516989e-06f, 6.876028395e-06f, 6.921523239e-06f, 6.967001443e-06f, 7.012462930e-06f, 7.057907625e-06f,
-7.103335449e-06f, 7.148746325e-06f, 7.194140178e-06f, 7.239516930e-06f, 7.284876503e-06f, 7.330218823e-06f, 7.375543811e-06f, 7.420851391e-06f, 7.466141486e-06f, 7.511414020e-06f,
-7.556668917e-06f, 7.601906099e-06f, 7.647125491e-06f, 7.692327015e-06f, 7.737510595e-06f, 7.782676155e-06f, 7.827823619e-06f, 7.872952911e-06f, 7.918063953e-06f, 7.963156670e-06f,
-8.008230986e-06f, 8.053286824e-06f, 8.098324109e-06f, 8.143342764e-06f, 8.188342713e-06f, 8.233323881e-06f, 8.278286191e-06f, 8.323229567e-06f, 8.368153934e-06f, 8.413059216e-06f,
-8.457945337e-06f, 8.502812221e-06f, 8.547659793e-06f, 8.592487977e-06f, 8.637296697e-06f, 8.682085877e-06f, 8.726855443e-06f, 8.771605319e-06f, 8.816335429e-06f, 8.861045697e-06f,
-8.905736050e-06f, 8.950406410e-06f, 8.995056703e-06f, 9.039686854e-06f, 9.084296788e-06f, 9.128886428e-06f, 9.173455701e-06f, 9.218004531e-06f, 9.262532843e-06f, 9.307040562e-06f,
-9.351527614e-06f, 9.395993923e-06f, 9.440439414e-06f, 9.484864012e-06f, 9.529267644e-06f, 9.573650234e-06f, 9.618011707e-06f, 9.662351989e-06f, 9.706671006e-06f, 9.750968682e-06f,
-9.795244943e-06f, 9.839499715e-06f, 9.883732924e-06f, 9.927944494e-06f, 9.972134352e-06f, 1.001630242e-05f, 1.006044863e-05f, 1.010457291e-05f, 1.014867518e-05f, 1.019275536e-05f,
-1.023681339e-05f, 1.028084918e-05f, 1.032486267e-05f, 1.036885378e-05f, 1.041282244e-05f, 1.045676857e-05f, 1.050069210e-05f, 1.054459296e-05f, 1.058847106e-05f, 1.063232635e-05f,
-1.067615874e-05f, 1.071996817e-05f, 1.076375455e-05f, 1.080751781e-05f, 1.085125789e-05f, 1.089497470e-05f, 1.093866818e-05f, 1.098233825e-05f, 1.102598483e-05f, 1.106960787e-05f,
-1.111320727e-05f, 1.115678297e-05f, 1.120033490e-05f, 1.124386298e-05f, 1.128736714e-05f, 1.133084731e-05f, 1.137430341e-05f, 1.141773537e-05f, 1.146114312e-05f, 1.150452659e-05f,
-1.154788570e-05f, 1.159122038e-05f, 1.163453056e-05f, 1.167781617e-05f, 1.172107713e-05f, 1.176431337e-05f, 1.180752481e-05f, 1.185071140e-05f, 1.189387305e-05f, 1.193700969e-05f,
-1.198012125e-05f, 1.202320766e-05f, 1.206626885e-05f, 1.210930473e-05f, 1.215231526e-05f, 1.219530034e-05f, 1.223825991e-05f, 1.228119389e-05f, 1.232410223e-05f, 1.236698483e-05f,
-1.240984164e-05f, 1.245267257e-05f, 1.249547757e-05f, 1.253825655e-05f, 1.258100945e-05f, 1.262373619e-05f, 1.266643671e-05f, 1.270911093e-05f, 1.275175878e-05f, 1.279438018e-05f,
-1.283697508e-05f, 1.287954340e-05f, 1.292208506e-05f, 1.296459999e-05f, 1.300708814e-05f, 1.304954941e-05f, 1.309198375e-05f, 1.313439108e-05f, 1.317677134e-05f, 1.321912444e-05f,
-1.326145033e-05f, 1.330374893e-05f, 1.334602016e-05f, 1.338826397e-05f, 1.343048028e-05f, 1.347266901e-05f, 1.351483010e-05f, 1.355696349e-05f, 1.359906909e-05f, 1.364114683e-05f,
-1.368319666e-05f, 1.372521850e-05f, 1.376721227e-05f, 1.380917792e-05f, 1.385111536e-05f, 1.389302453e-05f, 1.393490537e-05f, 1.397675779e-05f, 1.401858173e-05f, 1.406037713e-05f,
-1.410214390e-05f, 1.414388199e-05f, 1.418559132e-05f, 1.422727183e-05f, 1.426892344e-05f, 1.431054608e-05f, 1.435213969e-05f, 1.439370420e-05f, 1.443523954e-05f, 1.447674564e-05f,
-1.451822243e-05f, 1.455966984e-05f, 1.460108780e-05f, 1.464247625e-05f, 1.468383511e-05f, 1.472516432e-05f, 1.476646381e-05f, 1.480773351e-05f, 1.484897335e-05f, 1.489018327e-05f,
-1.493136319e-05f, 1.497251305e-05f, 1.501363277e-05f, 1.505472230e-05f, 1.509578156e-05f, 1.513681049e-05f, 1.517780901e-05f, 1.521877706e-05f, 1.525971457e-05f, 1.530062148e-05f,
-1.534149771e-05f, 1.538234320e-05f, 1.542315788e-05f, 1.546394169e-05f, 1.550469455e-05f, 1.554541640e-05f, 1.558610717e-05f, 1.562676679e-05f, 1.566739520e-05f, 1.570799233e-05f,
-1.574855811e-05f, 1.578909248e-05f, 1.582959537e-05f, 1.587006671e-05f, 1.591050643e-05f, 1.595091447e-05f, 1.599129076e-05f, 1.603163524e-05f, 1.607194784e-05f, 1.611222848e-05f,
-1.615247712e-05f, 1.619269367e-05f, 1.623287807e-05f, 1.627303026e-05f, 1.631315017e-05f, 1.635323773e-05f, 1.639329289e-05f, 1.643331556e-05f, 1.647330569e-05f, 1.651326321e-05f,
-1.655318805e-05f, 1.659308015e-05f, 1.663293945e-05f, 1.667276587e-05f, 1.671255935e-05f, 1.675231983e-05f, 1.679204724e-05f, 1.683174151e-05f, 1.687140259e-05f, 1.691103039e-05f,
-1.695062487e-05f, 1.699018595e-05f, 1.702971358e-05f, 1.706920767e-05f, 1.710866818e-05f, 1.714809503e-05f, 1.718748815e-05f, 1.722684750e-05f, 1.726617299e-05f, 1.730546457e-05f,
-1.734472217e-05f, 1.738394573e-05f, 1.742313518e-05f, 1.746229046e-05f, 1.750141150e-05f, 1.754049824e-05f, 1.757955061e-05f, 1.761856856e-05f, 1.765755202e-05f, 1.769650091e-05f,
-1.773541519e-05f, 1.777429478e-05f, 1.781313962e-05f, 1.785194966e-05f, 1.789072481e-05f, 1.792946503e-05f, 1.796817024e-05f, 1.800684039e-05f, 1.804547541e-05f, 1.808407524e-05f,
-1.812263981e-05f, 1.816116906e-05f, 1.819966293e-05f, 1.823812136e-05f, 1.827654428e-05f, 1.831493162e-05f, 1.835328333e-05f, 1.839159935e-05f, 1.842987961e-05f, 1.846812404e-05f,
-1.850633260e-05f, 1.854450520e-05f, 1.858264180e-05f, 1.862074232e-05f, 1.865880671e-05f, 1.869683491e-05f, 1.873482685e-05f, 1.877278246e-05f, 1.881070170e-05f, 1.884858449e-05f,
-1.888643078e-05f, 1.892424050e-05f, 1.896201359e-05f, 1.899974999e-05f, 1.903744963e-05f, 1.907511247e-05f, 1.911273843e-05f, 1.915032745e-05f, 1.918787947e-05f, 1.922539444e-05f,
-1.926287228e-05f, 1.930031294e-05f, 1.933771637e-05f, 1.937508248e-05f, 1.941241124e-05f, 1.944970257e-05f, 1.948695641e-05f, 1.952417271e-05f, 1.956135140e-05f, 1.959849242e-05f,
-1.963559572e-05f, 1.967266123e-05f, 1.970968889e-05f, 1.974667864e-05f, 1.978363042e-05f, 1.982054417e-05f, 1.985741984e-05f, 1.989425736e-05f, 1.993105666e-05f, 1.996781770e-05f,
-2.000454042e-05f, 2.004122474e-05f, 2.007787062e-05f, 2.011447799e-05f, 2.015104679e-05f, 2.018757697e-05f, 2.022406847e-05f, 2.026052122e-05f, 2.029693517e-05f, 2.033331025e-05f,
-2.036964642e-05f, 2.040594360e-05f, 2.044220175e-05f, 2.047842079e-05f, 2.051460069e-05f, 2.055074136e-05f, 2.058684277e-05f, 2.062290484e-05f, 2.065892752e-05f, 2.069491075e-05f,
-2.073085448e-05f, 2.076675864e-05f, 2.080262318e-05f, 2.083844804e-05f, 2.087423316e-05f, 2.090997848e-05f, 2.094568395e-05f, 2.098134950e-05f, 2.101697509e-05f, 2.105256064e-05f,
-2.108810612e-05f, 2.112361145e-05f, 2.115907658e-05f, 2.119450145e-05f, 2.122988601e-05f, 2.126523019e-05f, 2.130053395e-05f, 2.133579723e-05f, 2.137101996e-05f, 2.140620209e-05f,
-2.144134357e-05f, 2.147644433e-05f, 2.151150433e-05f, 2.154652349e-05f, 2.158150178e-05f, 2.161643913e-05f, 2.165133549e-05f, 2.168619079e-05f, 2.172100499e-05f, 2.175577802e-05f,
-2.179050983e-05f, 2.182520037e-05f, 2.185984958e-05f, 2.189445741e-05f, 2.192902379e-05f, 2.196354867e-05f, 2.199803200e-05f, 2.203247372e-05f, 2.206687378e-05f, 2.210123212e-05f,
-2.213554868e-05f, 2.216982342e-05f, 2.220405627e-05f, 2.223824718e-05f, 2.227239610e-05f, 2.230650296e-05f, 2.234056773e-05f, 2.237459033e-05f, 2.240857072e-05f, 2.244250885e-05f,
-2.247640465e-05f, 2.251025808e-05f, 2.254406907e-05f, 2.257783758e-05f, 2.261156356e-05f, 2.264524693e-05f, 2.267888767e-05f, 2.271248570e-05f, 2.274604098e-05f, 2.277955345e-05f,
-2.281302305e-05f, 2.284644975e-05f, 2.287983347e-05f, 2.291317417e-05f, 2.294647180e-05f, 2.297972630e-05f, 2.301293761e-05f, 2.304610569e-05f, 2.307923049e-05f, 2.311231194e-05f,
-2.314535000e-05f, 2.317834461e-05f, 2.321129573e-05f, 2.324420329e-05f, 2.327706725e-05f, 2.330988755e-05f, 2.334266415e-05f, 2.337539698e-05f, 2.340808600e-05f, 2.344073116e-05f,
-2.347333239e-05f, 2.350588966e-05f, 2.353840291e-05f, 2.357087209e-05f, 2.360329714e-05f, 2.363567801e-05f, 2.366801466e-05f, 2.370030703e-05f, 2.373255507e-05f, 2.376475872e-05f,
-2.379691795e-05f, 2.382903269e-05f, 2.386110289e-05f, 2.389312851e-05f, 2.392510950e-05f, 2.395704579e-05f, 2.398893735e-05f, 2.402078412e-05f, 2.405258605e-05f, 2.408434309e-05f,
-2.411605519e-05f, 2.414772230e-05f, 2.417934437e-05f, 2.421092135e-05f, 2.424245319e-05f, 2.427393983e-05f, 2.430538124e-05f, 2.433677736e-05f, 2.436812813e-05f, 2.439943352e-05f,
-2.443069347e-05f, 2.446190793e-05f, 2.449307685e-05f, 2.452420019e-05f, 2.455527788e-05f, 2.458630990e-05f, 2.461729618e-05f, 2.464823667e-05f, 2.467913133e-05f, 2.470998012e-05f,
-2.474078297e-05f, 2.477153984e-05f, 2.480225069e-05f, 2.483291546e-05f, 2.486353411e-05f, 2.489410658e-05f, 2.492463284e-05f, 2.495511283e-05f, 2.498554650e-05f, 2.501593381e-05f,
-2.504627470e-05f, 2.507656914e-05f, 2.510681707e-05f, 2.513701844e-05f, 2.516717321e-05f, 2.519728133e-05f, 2.522734276e-05f, 2.525735744e-05f, 2.528732533e-05f, 2.531724637e-05f,
-2.534712054e-05f, 2.537694777e-05f, 2.540672802e-05f, 2.543646125e-05f, 2.546614740e-05f, 2.549578644e-05f, 2.552537831e-05f, 2.555492296e-05f, 2.558442036e-05f, 2.561387045e-05f,
-2.564327320e-05f, 2.567262854e-05f, 2.570193645e-05f, 2.573119686e-05f, 2.576040974e-05f, 2.578957504e-05f, 2.581869272e-05f, 2.584776272e-05f, 2.587678501e-05f, 2.590575954e-05f,
-2.593468626e-05f, 2.596356512e-05f, 2.599239609e-05f, 2.602117912e-05f, 2.604991416e-05f, 2.607860117e-05f, 2.610724010e-05f, 2.613583091e-05f, 2.616437356e-05f, 2.619286799e-05f,
-2.622131417e-05f, 2.624971205e-05f, 2.627806159e-05f, 2.630636274e-05f, 2.633461545e-05f, 2.636281970e-05f, 2.639097542e-05f, 2.641908258e-05f, 2.644714114e-05f, 2.647515104e-05f,
-2.650311225e-05f, 2.653102473e-05f, 2.655888842e-05f, 2.658670329e-05f, 2.661446930e-05f, 2.664218639e-05f, 2.666985453e-05f, 2.669747368e-05f, 2.672504379e-05f, 2.675256481e-05f,
-2.678003672e-05f, 2.680745945e-05f, 2.683483298e-05f, 2.686215726e-05f, 2.688943225e-05f, 2.691665790e-05f, 2.694383417e-05f, 2.697096102e-05f, 2.699803842e-05f, 2.702506631e-05f,
-2.705204465e-05f, 2.707897341e-05f, 2.710585254e-05f, 2.713268201e-05f, 2.715946176e-05f, 2.718619176e-05f, 2.721287197e-05f, 2.723950234e-05f, 2.726608284e-05f, 2.729261342e-05f,
-2.731909405e-05f, 2.734552468e-05f, 2.737190527e-05f, 2.739823579e-05f, 2.742451618e-05f, 2.745074642e-05f, 2.747692645e-05f, 2.750305625e-05f, 2.752913577e-05f, 2.755516496e-05f,
-2.758114380e-05f, 2.760707224e-05f, 2.763295024e-05f, 2.765877776e-05f, 2.768455477e-05f, 2.771028121e-05f, 2.773595706e-05f, 2.776158227e-05f, 2.778715681e-05f, 2.781268064e-05f,
-2.783815371e-05f, 2.786357598e-05f, 2.788894743e-05f, 2.791426801e-05f, 2.793953768e-05f, 2.796475640e-05f, 2.798992414e-05f, 2.801504085e-05f, 2.804010651e-05f, 2.806512106e-05f,
-2.809008447e-05f, 2.811499671e-05f, 2.813985774e-05f, 2.816466751e-05f, 2.818942600e-05f, 2.821413316e-05f, 2.823878895e-05f, 2.826339334e-05f, 2.828794630e-05f, 2.831244777e-05f,
-2.833689774e-05f, 2.836129615e-05f, 2.838564298e-05f, 2.840993818e-05f, 2.843418172e-05f, 2.845837357e-05f, 2.848251368e-05f, 2.850660202e-05f, 2.853063855e-05f, 2.855462324e-05f,
-2.857855605e-05f, 2.860243695e-05f, 2.862626589e-05f, 2.865004285e-05f, 2.867376779e-05f, 2.869744066e-05f, 2.872106144e-05f, 2.874463009e-05f, 2.876814658e-05f, 2.879161086e-05f,
-2.881502291e-05f, 2.883838269e-05f, 2.886169016e-05f, 2.888494529e-05f, 2.890814805e-05f, 2.893129839e-05f, 2.895439629e-05f, 2.897744171e-05f, 2.900043461e-05f, 2.902337497e-05f,
-2.904626274e-05f, 2.906909789e-05f, 2.909188039e-05f, 2.911461021e-05f, 2.913728731e-05f, 2.915991165e-05f, 2.918248321e-05f, 2.920500194e-05f, 2.922746783e-05f, 2.924988082e-05f,
-2.927224089e-05f, 2.929454801e-05f, 2.931680214e-05f, 2.933900325e-05f, 2.936115131e-05f, 2.938324628e-05f, 2.940528813e-05f, 2.942727683e-05f, 2.944921235e-05f, 2.947109464e-05f,
-2.949292369e-05f, 2.951469946e-05f, 2.953642191e-05f, 2.955809102e-05f, 2.957970675e-05f, 2.960126907e-05f, 2.962277794e-05f, 2.964423335e-05f, 2.966563524e-05f, 2.968698360e-05f,
-2.970827840e-05f, 2.972951959e-05f, 2.975070715e-05f, 2.977184106e-05f, 2.979292126e-05f, 2.981394775e-05f, 2.983492048e-05f, 2.985583942e-05f, 2.987670455e-05f, 2.989751583e-05f,
-2.991827323e-05f, 2.993897673e-05f, 2.995962628e-05f, 2.998022187e-05f, 3.000076346e-05f, 3.002125103e-05f, 3.004168453e-05f, 3.006206395e-05f, 3.008238925e-05f, 3.010266040e-05f,
-3.012287737e-05f, 3.014304014e-05f, 3.016314867e-05f, 3.018320294e-05f, 3.020320291e-05f, 3.022314856e-05f, 3.024303986e-05f, 3.026287678e-05f, 3.028265929e-05f, 3.030238736e-05f,
-3.032206096e-05f, 3.034168007e-05f, 3.036124466e-05f, 3.038075469e-05f, 3.040021014e-05f, 3.041961099e-05f, 3.043895720e-05f, 3.045824874e-05f, 3.047748560e-05f, 3.049666773e-05f,
-3.051579512e-05f, 3.053486774e-05f, 3.055388555e-05f, 3.057284853e-05f, 3.059175666e-05f, 3.061060990e-05f, 3.062940824e-05f, 3.064815163e-05f, 3.066684007e-05f, 3.068547351e-05f,
-3.070405193e-05f, 3.072257531e-05f, 3.074104363e-05f, 3.075945684e-05f, 3.077781493e-05f, 3.079611788e-05f, 3.081436565e-05f, 3.083255822e-05f, 3.085069556e-05f, 3.086877765e-05f,
-3.088680446e-05f, 3.090477597e-05f, 3.092269215e-05f, 3.094055298e-05f, 3.095835843e-05f, 3.097610847e-05f, 3.099380308e-05f, 3.101144224e-05f, 3.102902592e-05f, 3.104655410e-05f,
-3.106402675e-05f, 3.108144385e-05f, 3.109880537e-05f, 3.111611128e-05f, 3.113336157e-05f, 3.115055621e-05f, 3.116769518e-05f, 3.118477845e-05f, 3.120180600e-05f, 3.121877780e-05f,
-3.123569383e-05f, 3.125255407e-05f, 3.126935849e-05f, 3.128610708e-05f, 3.130279980e-05f, 3.131943663e-05f, 3.133601756e-05f, 3.135254255e-05f, 3.136901159e-05f, 3.138542465e-05f,
-3.140178172e-05f, 3.141808275e-05f, 3.143432775e-05f, 3.145051668e-05f, 3.146664951e-05f, 3.148272624e-05f, 3.149874683e-05f, 3.151471126e-05f, 3.153061952e-05f, 3.154647158e-05f,
-3.156226741e-05f, 3.157800701e-05f, 3.159369034e-05f, 3.160931738e-05f, 3.162488812e-05f, 3.164040253e-05f, 3.165586059e-05f, 3.167126228e-05f, 3.168660758e-05f, 3.170189647e-05f,
-3.171712892e-05f, 3.173230493e-05f, 3.174742446e-05f, 3.176248749e-05f, 3.177749402e-05f, 3.179244401e-05f, 3.180733744e-05f, 3.182217430e-05f, 3.183695457e-05f, 3.185167822e-05f,
-3.186634524e-05f, 3.188095561e-05f, 3.189550931e-05f, 3.191000631e-05f, 3.192444660e-05f, 3.193883016e-05f, 3.195315698e-05f, 3.196742702e-05f, 3.198164028e-05f, 3.199579674e-05f,
-3.200989636e-05f, 3.202393915e-05f, 3.203792507e-05f, 3.205185412e-05f, 3.206572627e-05f, 3.207954150e-05f, 3.209329980e-05f, 3.210700114e-05f, 3.212064552e-05f, 3.213423290e-05f,
-3.214776329e-05f, 3.216123665e-05f, 3.217465296e-05f, 3.218801223e-05f, 3.220131441e-05f, 3.221455951e-05f, 3.222774749e-05f, 3.224087835e-05f, 3.225395207e-05f, 3.226696863e-05f,
-3.227992801e-05f, 3.229283019e-05f, 3.230567517e-05f, 3.231846293e-05f, 3.233119344e-05f, 3.234386669e-05f, 3.235648267e-05f, 3.236904136e-05f, 3.238154274e-05f, 3.239398681e-05f,
-3.240637353e-05f, 3.241870290e-05f, 3.243097491e-05f, 3.244318953e-05f, 3.245534675e-05f, 3.246744656e-05f, 3.247948894e-05f, 3.249147388e-05f, 3.250340135e-05f, 3.251527136e-05f,
-3.252708388e-05f, 3.253883889e-05f, 3.255053639e-05f, 3.256217635e-05f, 3.257375877e-05f, 3.258528363e-05f, 3.259675092e-05f, 3.260816062e-05f, 3.261951272e-05f, 3.263080720e-05f,
-3.264204406e-05f, 3.265322327e-05f, 3.266434483e-05f, 3.267540872e-05f, 3.268641492e-05f, 3.269736344e-05f, 3.270825424e-05f, 3.271908732e-05f, 3.272986267e-05f, 3.274058027e-05f,
-3.275124012e-05f, 3.276184219e-05f, 3.277238647e-05f, 3.278287296e-05f, 3.279330165e-05f, 3.280367251e-05f, 3.281398554e-05f, 3.282424072e-05f, 3.283443805e-05f, 3.284457751e-05f,
-3.285465909e-05f, 3.286468278e-05f, 3.287464857e-05f, 3.288455644e-05f, 3.289440639e-05f, 3.290419840e-05f, 3.291393247e-05f, 3.292360857e-05f, 3.293322671e-05f, 3.294278687e-05f,
-3.295228904e-05f, 3.296173321e-05f, 3.297111937e-05f, 3.298044751e-05f, 3.298971762e-05f, 3.299892968e-05f, 3.300808369e-05f, 3.301717965e-05f, 3.302621753e-05f, 3.303519733e-05f,
-3.304411904e-05f, 3.305298266e-05f, 3.306178816e-05f, 3.307053555e-05f, 3.307922481e-05f, 3.308785593e-05f, 3.309642890e-05f, 3.310494373e-05f, 3.311340039e-05f, 3.312179888e-05f,
-3.313013919e-05f, 3.313842131e-05f, 3.314664523e-05f, 3.315481095e-05f, 3.316291845e-05f, 3.317096774e-05f, 3.317895879e-05f, 3.318689161e-05f, 3.319476619e-05f, 3.320258251e-05f,
-3.321034057e-05f, 3.321804036e-05f, 3.322568188e-05f, 3.323326512e-05f, 3.324079007e-05f, 3.324825673e-05f, 3.325566508e-05f, 3.326301512e-05f, 3.327030684e-05f, 3.327754024e-05f,
-3.328471532e-05f, 3.329183205e-05f, 3.329889045e-05f, 3.330589050e-05f, 3.331283219e-05f, 3.331971552e-05f, 3.332654048e-05f, 3.333330708e-05f, 3.334001529e-05f, 3.334666512e-05f,
-3.335325657e-05f, 3.335978962e-05f, 3.336626426e-05f, 3.337268051e-05f, 3.337903834e-05f, 3.338533776e-05f, 3.339157876e-05f, 3.339776134e-05f, 3.340388548e-05f, 3.340995120e-05f,
-3.341595847e-05f, 3.342190730e-05f, 3.342779769e-05f, 3.343362962e-05f, 3.343940310e-05f, 3.344511812e-05f, 3.345077468e-05f, 3.345637277e-05f, 3.346191239e-05f, 3.346739354e-05f,
-3.347281620e-05f, 3.347818039e-05f, 3.348348610e-05f, 3.348873331e-05f, 3.349392204e-05f, 3.349905227e-05f, 3.350412401e-05f, 3.350913725e-05f, 3.351409199e-05f, 3.351898822e-05f,
-3.352382595e-05f, 3.352860517e-05f, 3.353332588e-05f, 3.353798807e-05f, 3.354259175e-05f, 3.354713692e-05f, 3.355162356e-05f, 3.355605169e-05f, 3.356042129e-05f, 3.356473237e-05f,
-3.356898492e-05f, 3.357317895e-05f, 3.357731444e-05f, 3.358139141e-05f, 3.358540985e-05f, 3.358936976e-05f, 3.359327114e-05f, 3.359711399e-05f, 3.360089830e-05f, 3.360462408e-05f,
-3.360829133e-05f, 3.361190004e-05f, 3.361545021e-05f, 3.361894186e-05f, 3.362237497e-05f, 3.362574954e-05f, 3.362906558e-05f, 3.363232309e-05f, 3.363552206e-05f, 3.363866250e-05f,
-3.364174441e-05f, 3.364476778e-05f, 3.364773263e-05f, 3.365063894e-05f, 3.365348673e-05f, 3.365627599e-05f, 3.365900672e-05f, 3.366167893e-05f, 3.366429261e-05f, 3.366684777e-05f,
-3.366934441e-05f, 3.367178253e-05f, 3.367416214e-05f, 3.367648322e-05f, 3.367874580e-05f, 3.368094986e-05f, 3.368309542e-05f, 3.368518247e-05f, 3.368721101e-05f, 3.368918106e-05f,
-3.369109260e-05f, 3.369294565e-05f, 3.369474020e-05f, 3.369647627e-05f, 3.369815384e-05f, 3.369977294e-05f, 3.370133355e-05f, 3.370283568e-05f, 3.370427934e-05f, 3.370566453e-05f,
-3.370699125e-05f, 3.370825951e-05f, 3.370946930e-05f, 3.371062065e-05f, 3.371171354e-05f, 3.371274798e-05f, 3.371372398e-05f, 3.371464154e-05f, 3.371550067e-05f, 3.371630137e-05f,
-3.371704364e-05f, 3.371772749e-05f, 3.371835293e-05f, 3.371891995e-05f, 3.371942857e-05f, 3.371987879e-05f, 3.372027062e-05f, 3.372060405e-05f, 3.372087910e-05f, 3.372109577e-05f,
-3.372125407e-05f, 3.372135400e-05f, 3.372139557e-05f, 3.372137878e-05f, 3.372130364e-05f, 3.372117016e-05f, 3.372097834e-05f, 3.372072820e-05f, 3.372041972e-05f, 3.372005293e-05f,
-3.371962783e-05f, 3.371914442e-05f, 3.371860272e-05f, 3.371800272e-05f, 3.371734445e-05f, 3.371662789e-05f, 3.371585307e-05f, 3.371501998e-05f, 3.371412864e-05f, 3.371317906e-05f,
-3.371217123e-05f, 3.371110517e-05f, 3.370998089e-05f, 3.370879840e-05f, 3.370755769e-05f, 3.370625879e-05f, 3.370490170e-05f, 3.370348642e-05f, 3.370201297e-05f, 3.370048135e-05f,
-3.369889158e-05f, 3.369724366e-05f, 3.369553760e-05f, 3.369377340e-05f, 3.369195109e-05f, 3.369007067e-05f, 3.368813214e-05f, 3.368613551e-05f, 3.368408081e-05f, 3.368196803e-05f,
-3.367979718e-05f, 3.367756828e-05f, 3.367528133e-05f, 3.367293635e-05f, 3.367053334e-05f, 3.366807232e-05f, 3.366555329e-05f, 3.366297627e-05f, 3.366034127e-05f, 3.365764829e-05f,
-3.365489734e-05f, 3.365208845e-05f, 3.364922161e-05f, 3.364629685e-05f, 3.364331416e-05f, 3.364027356e-05f, 3.363717507e-05f, 3.363401870e-05f, 3.363080445e-05f, 3.362753233e-05f,
-3.362420237e-05f, 3.362081456e-05f, 3.361736893e-05f, 3.361386548e-05f, 3.361030423e-05f, 3.360668519e-05f, 3.360300837e-05f, 3.359927378e-05f, 3.359548144e-05f, 3.359163136e-05f,
-3.358772354e-05f, 3.358375801e-05f, 3.357973478e-05f, 3.357565386e-05f, 3.357151526e-05f, 3.356731899e-05f, 3.356306507e-05f, 3.355875352e-05f, 3.355438434e-05f, 3.354995755e-05f,
-3.354547316e-05f, 3.354093119e-05f, 3.353633165e-05f, 3.353167455e-05f, 3.352695991e-05f, 3.352218774e-05f, 3.351735806e-05f, 3.351247088e-05f, 3.350752621e-05f, 3.350252407e-05f,
-3.349746448e-05f, 3.349234745e-05f, 3.348717299e-05f, 3.348194112e-05f, 3.347665185e-05f, 3.347130520e-05f, 3.346590118e-05f, 3.346043982e-05f, 3.345492111e-05f, 3.344934509e-05f,
-3.344371177e-05f, 3.343802115e-05f, 3.343227326e-05f, 3.342646811e-05f, 3.342060573e-05f, 3.341468611e-05f, 3.340870929e-05f, 3.340267528e-05f, 3.339658409e-05f, 3.339043574e-05f,
-3.338423024e-05f, 3.337796762e-05f, 3.337164789e-05f, 3.336527106e-05f, 3.335883716e-05f, 3.335234620e-05f, 3.334579820e-05f, 3.333919317e-05f, 3.333253114e-05f, 3.332581211e-05f,
-3.331903612e-05f, 3.331220316e-05f, 3.330531327e-05f, 3.329836647e-05f, 3.329136276e-05f, 3.328430216e-05f, 3.327718470e-05f, 3.327001039e-05f, 3.326277926e-05f, 3.325549131e-05f,
-3.324814657e-05f, 3.324074506e-05f, 3.323328680e-05f, 3.322577179e-05f, 3.321820007e-05f, 3.321057166e-05f, 3.320288656e-05f, 3.319514480e-05f, 3.318734640e-05f, 3.317949138e-05f,
-3.317157976e-05f, 3.316361156e-05f, 3.315558679e-05f, 3.314750548e-05f, 3.313936765e-05f, 3.313117332e-05f, 3.312292250e-05f, 3.311461521e-05f, 3.310625149e-05f, 3.309783134e-05f,
-3.308935479e-05f, 3.308082186e-05f, 3.307223257e-05f, 3.306358694e-05f, 3.305488499e-05f, 3.304612674e-05f, 3.303731221e-05f, 3.302844142e-05f, 3.301951440e-05f, 3.301053117e-05f,
-3.300149174e-05f, 3.299239614e-05f, 3.298324439e-05f, 3.297403652e-05f, 3.296477253e-05f, 3.295545247e-05f, 3.294607634e-05f, 3.293664417e-05f, 3.292715598e-05f, 3.291761179e-05f,
-3.290801163e-05f, 3.289835552e-05f, 3.288864348e-05f, 3.287887553e-05f, 3.286905170e-05f, 3.285917201e-05f, 3.284923648e-05f, 3.283924514e-05f, 3.282919800e-05f, 3.281909509e-05f,
-3.280893644e-05f, 3.279872207e-05f, 3.278845200e-05f, 3.277812625e-05f, 3.276774485e-05f, 3.275730782e-05f, 3.274681519e-05f, 3.273626698e-05f, 3.272566321e-05f, 3.271500391e-05f,
-3.270428910e-05f, 3.269351881e-05f, 3.268269306e-05f, 3.267181187e-05f, 3.266087528e-05f, 3.264988329e-05f, 3.263883595e-05f, 3.262773327e-05f, 3.261657528e-05f, 3.260536201e-05f,
-3.259409347e-05f, 3.258276970e-05f, 3.257139072e-05f, 3.255995655e-05f, 3.254846722e-05f, 3.253692276e-05f, 3.252532319e-05f, 3.251366854e-05f, 3.250195884e-05f, 3.249019410e-05f,
-3.247837435e-05f, 3.246649963e-05f, 3.245456996e-05f, 3.244258536e-05f, 3.243054586e-05f, 3.241845149e-05f, 3.240630228e-05f, 3.239409824e-05f, 3.238183941e-05f, 3.236952582e-05f,
-3.235715748e-05f, 3.234473444e-05f, 3.233225671e-05f, 3.231972432e-05f, 3.230713730e-05f, 3.229449568e-05f, 3.228179949e-05f, 3.226904874e-05f, 3.225624348e-05f, 3.224338373e-05f,
-3.223046951e-05f, 3.221750086e-05f, 3.220447780e-05f, 3.219140035e-05f, 3.217826856e-05f, 3.216508244e-05f, 3.215184203e-05f, 3.213854736e-05f, 3.212519844e-05f, 3.211179532e-05f,
-3.209833802e-05f, 3.208482656e-05f, 3.207126099e-05f, 3.205764132e-05f, 3.204396758e-05f, 3.203023982e-05f, 3.201645804e-05f, 3.200262230e-05f, 3.198873260e-05f, 3.197478899e-05f,
-3.196079149e-05f, 3.194674014e-05f, 3.193263495e-05f, 3.191847597e-05f, 3.190426323e-05f, 3.188999674e-05f, 3.187567655e-05f, 3.186130268e-05f, 3.184687517e-05f, 3.183239404e-05f,
-3.181785933e-05f, 3.180327106e-05f, 3.178862927e-05f, 3.177393399e-05f, 3.175918525e-05f, 3.174438307e-05f, 3.172952750e-05f, 3.171461856e-05f, 3.169965628e-05f, 3.168464069e-05f,
-3.166957184e-05f, 3.165444974e-05f, 3.163927443e-05f, 3.162404594e-05f, 3.160876430e-05f, 3.159342955e-05f, 3.157804172e-05f, 3.156260084e-05f, 3.154710693e-05f, 3.153156005e-05f,
-3.151596020e-05f, 3.150030744e-05f, 3.148460179e-05f, 3.146884328e-05f, 3.145303195e-05f, 3.143716783e-05f, 3.142125095e-05f, 3.140528135e-05f, 3.138925905e-05f, 3.137318410e-05f,
-3.135705652e-05f, 3.134087635e-05f, 3.132464362e-05f, 3.130835837e-05f, 3.129202063e-05f, 3.127563043e-05f, 3.125918780e-05f, 3.124269279e-05f, 3.122614542e-05f, 3.120954573e-05f,
-3.119289375e-05f, 3.117618952e-05f, 3.115943307e-05f, 3.114262443e-05f, 3.112576365e-05f, 3.110885075e-05f, 3.109188577e-05f, 3.107486875e-05f, 3.105779971e-05f, 3.104067869e-05f,
-3.102350574e-05f, 3.100628088e-05f, 3.098900415e-05f, 3.097167558e-05f, 3.095429522e-05f, 3.093686309e-05f, 3.091937922e-05f, 3.090184367e-05f, 3.088425646e-05f, 3.086661763e-05f,
-3.084892720e-05f, 3.083118523e-05f, 3.081339175e-05f, 3.079554679e-05f, 3.077765038e-05f, 3.075970257e-05f, 3.074170340e-05f, 3.072365288e-05f, 3.070555108e-05f, 3.068739801e-05f,
-3.066919372e-05f, 3.065093824e-05f, 3.063263162e-05f, 3.061427388e-05f, 3.059586507e-05f, 3.057740522e-05f, 3.055889437e-05f, 3.054033256e-05f, 3.052171982e-05f, 3.050305620e-05f,
-3.048434172e-05f, 3.046557643e-05f, 3.044676036e-05f, 3.042789356e-05f, 3.040897606e-05f, 3.039000789e-05f, 3.037098910e-05f, 3.035191973e-05f, 3.033279981e-05f, 3.031362938e-05f,
-3.029440848e-05f, 3.027513715e-05f, 3.025581542e-05f, 3.023644335e-05f, 3.021702095e-05f, 3.019754828e-05f, 3.017802537e-05f, 3.015845226e-05f, 3.013882899e-05f, 3.011915560e-05f,
-3.009943213e-05f, 3.007965861e-05f, 3.005983510e-05f, 3.003996162e-05f, 3.002003821e-05f, 3.000006492e-05f, 2.998004179e-05f, 2.995996886e-05f, 2.993984615e-05f, 2.991967373e-05f,
-2.989945162e-05f, 2.987917986e-05f, 2.985885850e-05f, 2.983848758e-05f, 2.981806713e-05f, 2.979759720e-05f, 2.977707783e-05f, 2.975650905e-05f, 2.973589092e-05f, 2.971522346e-05f,
-2.969450673e-05f, 2.967374075e-05f, 2.965292558e-05f, 2.963206126e-05f, 2.961114781e-05f, 2.959018530e-05f, 2.956917375e-05f, 2.954811321e-05f, 2.952700372e-05f, 2.950584532e-05f,
-2.948463806e-05f, 2.946338197e-05f, 2.944207710e-05f, 2.942072349e-05f, 2.939932118e-05f, 2.937787022e-05f, 2.935637064e-05f, 2.933482249e-05f, 2.931322581e-05f, 2.929158064e-05f,
-2.926988703e-05f, 2.924814501e-05f, 2.922635464e-05f, 2.920451594e-05f, 2.918262898e-05f, 2.916069378e-05f, 2.913871040e-05f, 2.911667887e-05f, 2.909459923e-05f, 2.907247154e-05f,
-2.905029584e-05f, 2.902807216e-05f, 2.900580055e-05f, 2.898348106e-05f, 2.896111372e-05f, 2.893869859e-05f, 2.891623570e-05f, 2.889372511e-05f, 2.887116684e-05f, 2.884856096e-05f,
-2.882590750e-05f, 2.880320650e-05f, 2.878045801e-05f, 2.875766208e-05f, 2.873481874e-05f, 2.871192805e-05f, 2.868899005e-05f, 2.866600477e-05f, 2.864297228e-05f, 2.861989261e-05f,
-2.859676580e-05f, 2.857359190e-05f, 2.855037097e-05f, 2.852710303e-05f, 2.850378814e-05f, 2.848042634e-05f, 2.845701768e-05f, 2.843356220e-05f, 2.841005995e-05f, 2.838651097e-05f,
-2.836291532e-05f, 2.833927302e-05f, 2.831558414e-05f, 2.829184872e-05f, 2.826806679e-05f, 2.824423842e-05f, 2.822036364e-05f, 2.819644250e-05f, 2.817247505e-05f, 2.814846133e-05f,
-2.812440139e-05f, 2.810029527e-05f, 2.807614303e-05f, 2.805194471e-05f, 2.802770035e-05f, 2.800341001e-05f, 2.797907372e-05f, 2.795469154e-05f, 2.793026351e-05f, 2.790578969e-05f,
-2.788127011e-05f, 2.785670482e-05f, 2.783209388e-05f, 2.780743733e-05f, 2.778273521e-05f, 2.775798758e-05f, 2.773319447e-05f, 2.770835595e-05f, 2.768347205e-05f, 2.765854283e-05f,
-2.763356833e-05f, 2.760854861e-05f, 2.758348369e-05f, 2.755837365e-05f, 2.753321852e-05f, 2.750801835e-05f, 2.748277320e-05f, 2.745748310e-05f, 2.743214811e-05f, 2.740676828e-05f,
-2.738134366e-05f, 2.735587428e-05f, 2.733036021e-05f, 2.730480149e-05f, 2.727919817e-05f, 2.725355030e-05f, 2.722785793e-05f, 2.720212110e-05f, 2.717633988e-05f, 2.715051429e-05f,
-2.712464440e-05f, 2.709873026e-05f, 2.707277191e-05f, 2.704676940e-05f, 2.702072278e-05f, 2.699463211e-05f, 2.696849743e-05f, 2.694231879e-05f, 2.691609624e-05f, 2.688982984e-05f,
-2.686351963e-05f, 2.683716565e-05f, 2.681076797e-05f, 2.678432664e-05f, 2.675784169e-05f, 2.673131319e-05f, 2.670474118e-05f, 2.667812572e-05f, 2.665146685e-05f, 2.662476462e-05f,
-2.659801909e-05f, 2.657123031e-05f, 2.654439832e-05f, 2.651752319e-05f, 2.649060495e-05f, 2.646364366e-05f, 2.643663938e-05f, 2.640959214e-05f, 2.638250202e-05f, 2.635536904e-05f,
-2.632819328e-05f, 2.630097477e-05f, 2.627371357e-05f, 2.624640973e-05f, 2.621906331e-05f, 2.619167435e-05f, 2.616424291e-05f, 2.613676903e-05f, 2.610925278e-05f, 2.608169420e-05f,
-2.605409335e-05f, 2.602645027e-05f, 2.599876502e-05f, 2.597103765e-05f, 2.594326822e-05f, 2.591545677e-05f, 2.588760336e-05f, 2.585970804e-05f, 2.583177087e-05f, 2.580379189e-05f,
-2.577577116e-05f, 2.574770874e-05f, 2.571960466e-05f, 2.569145900e-05f, 2.566327180e-05f, 2.563504311e-05f, 2.560677299e-05f, 2.557846149e-05f, 2.555010867e-05f, 2.552171457e-05f,
-2.549327925e-05f, 2.546480277e-05f, 2.543628518e-05f, 2.540772652e-05f, 2.537912686e-05f, 2.535048625e-05f, 2.532180475e-05f, 2.529308240e-05f, 2.526431926e-05f, 2.523551538e-05f,
-2.520667083e-05f, 2.517778564e-05f, 2.514885988e-05f, 2.511989361e-05f, 2.509088687e-05f, 2.506183972e-05f, 2.503275222e-05f, 2.500362441e-05f, 2.497445636e-05f, 2.494524812e-05f,
-2.491599973e-05f, 2.488671127e-05f, 2.485738278e-05f, 2.482801432e-05f, 2.479860594e-05f, 2.476915770e-05f, 2.473966965e-05f, 2.471014185e-05f, 2.468057435e-05f, 2.465096721e-05f,
-2.462132049e-05f, 2.459163423e-05f, 2.456190850e-05f, 2.453214335e-05f, 2.450233884e-05f, 2.447249502e-05f, 2.444261194e-05f, 2.441268967e-05f, 2.438272826e-05f, 2.435272776e-05f,
-2.432268823e-05f, 2.429260973e-05f, 2.426249232e-05f, 2.423233604e-05f, 2.420214096e-05f, 2.417190713e-05f, 2.414163461e-05f, 2.411132345e-05f, 2.408097371e-05f, 2.405058546e-05f,
-2.402015873e-05f, 2.398969360e-05f, 2.395919012e-05f, 2.392864834e-05f, 2.389806832e-05f, 2.386745012e-05f, 2.383679379e-05f, 2.380609940e-05f, 2.377536699e-05f, 2.374459664e-05f,
-2.371378838e-05f, 2.368294229e-05f, 2.365205841e-05f, 2.362113682e-05f, 2.359017755e-05f, 2.355918067e-05f, 2.352814625e-05f, 2.349707433e-05f, 2.346596497e-05f, 2.343481823e-05f,
-2.340363417e-05f, 2.337241285e-05f, 2.334115433e-05f, 2.330985865e-05f, 2.327852589e-05f, 2.324715610e-05f, 2.321574933e-05f, 2.318430565e-05f, 2.315282511e-05f, 2.312130777e-05f,
-2.308975370e-05f, 2.305816294e-05f, 2.302653556e-05f, 2.299487161e-05f, 2.296317116e-05f, 2.293143426e-05f, 2.289966098e-05f, 2.286785136e-05f, 2.283600548e-05f, 2.280412338e-05f,
-2.277220513e-05f, 2.274025078e-05f, 2.270826040e-05f, 2.267623405e-05f, 2.264417177e-05f, 2.261207364e-05f, 2.257993972e-05f, 2.254777005e-05f, 2.251556471e-05f, 2.248332374e-05f,
-2.245104722e-05f, 2.241873519e-05f, 2.238638772e-05f, 2.235400487e-05f, 2.232158670e-05f, 2.228913327e-05f, 2.225664464e-05f, 2.222412086e-05f, 2.219156200e-05f, 2.215896812e-05f,
-2.212633928e-05f, 2.209367553e-05f, 2.206097694e-05f, 2.202824358e-05f, 2.199547549e-05f, 2.196267273e-05f, 2.192983538e-05f, 2.189696349e-05f, 2.186405712e-05f, 2.183111633e-05f,
-2.179814118e-05f, 2.176513173e-05f, 2.173208805e-05f, 2.169901018e-05f, 2.166589821e-05f, 2.163275218e-05f, 2.159957215e-05f, 2.156635819e-05f, 2.153311036e-05f, 2.149982872e-05f,
-2.146651333e-05f, 2.143316425e-05f, 2.139978154e-05f, 2.136636527e-05f, 2.133291549e-05f, 2.129943227e-05f, 2.126591567e-05f, 2.123236574e-05f, 2.119878256e-05f, 2.116516618e-05f,
-2.113151667e-05f, 2.109783408e-05f, 2.106411848e-05f, 2.103036993e-05f, 2.099658849e-05f, 2.096277422e-05f, 2.092892719e-05f, 2.089504746e-05f, 2.086113508e-05f, 2.082719013e-05f,
-2.079321266e-05f, 2.075920274e-05f, 2.072516042e-05f, 2.069108578e-05f, 2.065697886e-05f, 2.062283975e-05f, 2.058866849e-05f, 2.055446515e-05f, 2.052022979e-05f, 2.048596248e-05f,
-2.045166327e-05f, 2.041733224e-05f, 2.038296944e-05f, 2.034857493e-05f, 2.031414879e-05f, 2.027969106e-05f, 2.024520182e-05f, 2.021068113e-05f, 2.017612905e-05f, 2.014154564e-05f,
-2.010693097e-05f, 2.007228510e-05f, 2.003760810e-05f, 2.000290001e-05f, 1.996816092e-05f, 1.993339089e-05f, 1.989858996e-05f, 1.986375822e-05f, 1.982889572e-05f, 1.979400253e-05f,
-1.975907871e-05f, 1.972412433e-05f, 1.968913944e-05f, 1.965412411e-05f, 1.961907841e-05f, 1.958400240e-05f, 1.954889614e-05f, 1.951375970e-05f, 1.947859314e-05f, 1.944339653e-05f,
-1.940816992e-05f, 1.937291339e-05f, 1.933762700e-05f, 1.930231080e-05f, 1.926696487e-05f, 1.923158928e-05f, 1.919618407e-05f, 1.916074933e-05f, 1.912528511e-05f, 1.908979147e-05f,
-1.905426849e-05f, 1.901871623e-05f, 1.898313474e-05f, 1.894752411e-05f, 1.891188438e-05f, 1.887621563e-05f, 1.884051792e-05f, 1.880479131e-05f, 1.876903587e-05f, 1.873325167e-05f,
-1.869743877e-05f, 1.866159723e-05f, 1.862572712e-05f, 1.858982850e-05f, 1.855390145e-05f, 1.851794602e-05f, 1.848196228e-05f, 1.844595030e-05f, 1.840991013e-05f, 1.837384185e-05f,
-1.833774553e-05f, 1.830162122e-05f, 1.826546899e-05f, 1.822928891e-05f, 1.819308104e-05f, 1.815684545e-05f, 1.812058221e-05f, 1.808429137e-05f, 1.804797301e-05f, 1.801162720e-05f,
-1.797525399e-05f, 1.793885345e-05f, 1.790242565e-05f, 1.786597066e-05f, 1.782948853e-05f, 1.779297935e-05f, 1.775644316e-05f, 1.771988005e-05f, 1.768329007e-05f, 1.764667329e-05f,
-1.761002977e-05f, 1.757335959e-05f, 1.753666281e-05f, 1.749993950e-05f, 1.746318972e-05f, 1.742641354e-05f, 1.738961102e-05f, 1.735278223e-05f, 1.731592724e-05f, 1.727904612e-05f,
-1.724213892e-05f, 1.720520573e-05f, 1.716824659e-05f, 1.713126159e-05f, 1.709425079e-05f, 1.705721425e-05f, 1.702015204e-05f, 1.698306423e-05f, 1.694595089e-05f, 1.690881207e-05f,
-1.687164786e-05f, 1.683445831e-05f, 1.679724349e-05f, 1.676000348e-05f, 1.672273833e-05f, 1.668544811e-05f, 1.664813290e-05f, 1.661079275e-05f, 1.657342774e-05f, 1.653603793e-05f,
-1.649862339e-05f, 1.646118419e-05f, 1.642372040e-05f, 1.638623207e-05f, 1.634871929e-05f, 1.631118211e-05f, 1.627362061e-05f, 1.623603485e-05f, 1.619842490e-05f, 1.616079083e-05f,
-1.612313270e-05f, 1.608545058e-05f, 1.604774455e-05f, 1.601001466e-05f, 1.597226099e-05f, 1.593448361e-05f, 1.589668257e-05f, 1.585885796e-05f, 1.582100983e-05f, 1.578313826e-05f,
-1.574524331e-05f, 1.570732506e-05f, 1.566938356e-05f, 1.563141889e-05f, 1.559343112e-05f, 1.555542031e-05f, 1.551738653e-05f, 1.547932986e-05f, 1.544125035e-05f, 1.540314808e-05f,
-1.536502311e-05f, 1.532687552e-05f, 1.528870537e-05f, 1.525051274e-05f, 1.521229768e-05f, 1.517406026e-05f, 1.513580057e-05f, 1.509751866e-05f, 1.505921460e-05f, 1.502088846e-05f,
-1.498254032e-05f, 1.494417023e-05f, 1.490577827e-05f, 1.486736451e-05f, 1.482892901e-05f, 1.479047185e-05f, 1.475199309e-05f, 1.471349280e-05f, 1.467497105e-05f, 1.463642791e-05f,
-1.459786345e-05f, 1.455927774e-05f, 1.452067084e-05f, 1.448204283e-05f, 1.444339378e-05f, 1.440472375e-05f, 1.436603281e-05f, 1.432732103e-05f, 1.428858848e-05f, 1.424983524e-05f,
-1.421106136e-05f, 1.417226693e-05f, 1.413345200e-05f, 1.409461665e-05f, 1.405576094e-05f, 1.401688495e-05f, 1.397798875e-05f, 1.393907241e-05f, 1.390013598e-05f, 1.386117955e-05f,
-1.382220319e-05f, 1.378320696e-05f, 1.374419093e-05f, 1.370515517e-05f, 1.366609976e-05f, 1.362702475e-05f, 1.358793023e-05f, 1.354881626e-05f, 1.350968291e-05f, 1.347053025e-05f,
-1.343135835e-05f, 1.339216728e-05f, 1.335295711e-05f, 1.331372791e-05f, 1.327447975e-05f, 1.323521270e-05f, 1.319592683e-05f, 1.315662221e-05f, 1.311729891e-05f, 1.307795700e-05f,
-1.303859655e-05f, 1.299921762e-05f, 1.295982030e-05f, 1.292040465e-05f, 1.288097073e-05f, 1.284151863e-05f, 1.280204841e-05f, 1.276256014e-05f, 1.272305389e-05f, 1.268352973e-05f,
-1.264398773e-05f, 1.260442796e-05f, 1.256485050e-05f, 1.252525540e-05f, 1.248564275e-05f, 1.244601262e-05f, 1.240636506e-05f, 1.236670016e-05f, 1.232701799e-05f, 1.228731861e-05f,
-1.224760209e-05f, 1.220786852e-05f, 1.216811795e-05f, 1.212835045e-05f, 1.208856610e-05f, 1.204876498e-05f, 1.200894714e-05f, 1.196911266e-05f, 1.192926161e-05f, 1.188939406e-05f,
-1.184951009e-05f, 1.180960975e-05f, 1.176969313e-05f, 1.172976030e-05f, 1.168981132e-05f, 1.164984626e-05f, 1.160986520e-05f, 1.156986821e-05f, 1.152985536e-05f, 1.148982672e-05f,
-1.144978236e-05f, 1.140972235e-05f, 1.136964676e-05f, 1.132955566e-05f, 1.128944913e-05f, 1.124932724e-05f, 1.120919005e-05f, 1.116903764e-05f, 1.112887007e-05f, 1.108868743e-05f,
-1.104848978e-05f, 1.100827719e-05f, 1.096804973e-05f, 1.092780748e-05f, 1.088755050e-05f, 1.084727887e-05f, 1.080699266e-05f, 1.076669193e-05f, 1.072637677e-05f, 1.068604724e-05f,
-1.064570341e-05f, 1.060534536e-05f, 1.056497315e-05f, 1.052458686e-05f, 1.048418656e-05f, 1.044377232e-05f, 1.040334421e-05f, 1.036290230e-05f, 1.032244667e-05f, 1.028197738e-05f,
-1.024149451e-05f, 1.020099813e-05f, 1.016048831e-05f, 1.011996512e-05f, 1.007942863e-05f, 1.003887892e-05f, 9.998316056e-06f, 9.957740110e-06f, 9.917151153e-06f, 9.876549257e-06f,
-9.835934494e-06f, 9.795306936e-06f, 9.754666654e-06f, 9.714013720e-06f, 9.673348205e-06f, 9.632670182e-06f, 9.591979722e-06f, 9.551276896e-06f, 9.510561777e-06f, 9.469834437e-06f,
-9.429094946e-06f, 9.388343377e-06f, 9.347579802e-06f, 9.306804293e-06f, 9.266016920e-06f, 9.225217757e-06f, 9.184406875e-06f, 9.143584346e-06f, 9.102750242e-06f, 9.061904634e-06f,
-9.021047595e-06f, 8.980179196e-06f, 8.939299510e-06f, 8.898408608e-06f, 8.857506562e-06f, 8.816593445e-06f, 8.775669328e-06f, 8.734734284e-06f, 8.693788383e-06f, 8.652831699e-06f,
-8.611864304e-06f, 8.570886268e-06f, 8.529897665e-06f, 8.488898567e-06f, 8.447889045e-06f, 8.406869172e-06f, 8.365839019e-06f, 8.324798659e-06f, 8.283748165e-06f, 8.242687607e-06f,
-8.201617058e-06f, 8.160536591e-06f, 8.119446277e-06f, 8.078346189e-06f, 8.037236399e-06f, 7.996116978e-06f, 7.954988000e-06f, 7.913849536e-06f, 7.872701659e-06f, 7.831544441e-06f,
-7.790377953e-06f, 7.749202269e-06f, 7.708017460e-06f, 7.666823599e-06f, 7.625620758e-06f, 7.584409010e-06f, 7.543188426e-06f, 7.501959078e-06f, 7.460721040e-06f, 7.419474383e-06f,
-7.378219180e-06f, 7.336955503e-06f, 7.295683424e-06f, 7.254403016e-06f, 7.213114351e-06f, 7.171817501e-06f, 7.130512539e-06f, 7.089199537e-06f, 7.047878567e-06f, 7.006549703e-06f,
-6.965213015e-06f, 6.923868576e-06f, 6.882516460e-06f, 6.841156738e-06f, 6.799789482e-06f, 6.758414766e-06f, 6.717032661e-06f, 6.675643240e-06f, 6.634246575e-06f, 6.592842739e-06f,
-6.551431804e-06f, 6.510013843e-06f, 6.468588928e-06f, 6.427157131e-06f, 6.385718525e-06f, 6.344273182e-06f, 6.302821175e-06f, 6.261362577e-06f, 6.219897459e-06f, 6.178425894e-06f,
-6.136947955e-06f, 6.095463714e-06f, 6.053973244e-06f, 6.012476616e-06f, 5.970973905e-06f, 5.929465181e-06f, 5.887950518e-06f, 5.846429987e-06f, 5.804903663e-06f, 5.763371616e-06f,
-5.721833920e-06f, 5.680290646e-06f, 5.638741868e-06f, 5.597187659e-06f, 5.555628089e-06f, 5.514063233e-06f, 5.472493162e-06f, 5.430917949e-06f, 5.389337667e-06f, 5.347752388e-06f,
-5.306162184e-06f, 5.264567129e-06f, 5.222967294e-06f, 5.181362752e-06f, 5.139753575e-06f, 5.098139837e-06f, 5.056521610e-06f, 5.014898965e-06f, 4.973271977e-06f, 4.931640716e-06f,
-4.890005256e-06f, 4.848365670e-06f, 4.806722029e-06f, 4.765074407e-06f, 4.723422875e-06f, 4.681767506e-06f, 4.640108374e-06f, 4.598445550e-06f, 4.556779106e-06f, 4.515109116e-06f,
-4.473435652e-06f, 4.431758786e-06f, 4.390078591e-06f, 4.348395140e-06f, 4.306708504e-06f, 4.265018757e-06f, 4.223325970e-06f, 4.181630217e-06f, 4.139931570e-06f, 4.098230101e-06f,
-4.056525883e-06f, 4.014818989e-06f, 3.973109490e-06f, 3.931397460e-06f, 3.889682970e-06f, 3.847966093e-06f, 3.806246903e-06f, 3.764525470e-06f, 3.722801868e-06f, 3.681076169e-06f,
-3.639348446e-06f, 3.597618771e-06f, 3.555887216e-06f, 3.514153854e-06f, 3.472418758e-06f, 3.430681999e-06f, 3.388943650e-06f, 3.347203784e-06f, 3.305462473e-06f, 3.263719790e-06f,
-3.221975806e-06f, 3.180230595e-06f, 3.138484228e-06f, 3.096736779e-06f, 3.054988319e-06f, 3.013238920e-06f, 2.971488656e-06f, 2.929737599e-06f, 2.887985820e-06f, 2.846233393e-06f,
-2.804480389e-06f, 2.762726882e-06f, 2.720972942e-06f, 2.679218644e-06f, 2.637464058e-06f, 2.595709258e-06f, 2.553954315e-06f, 2.512199302e-06f, 2.470444291e-06f, 2.428689355e-06f,
-2.386934566e-06f, 2.345179995e-06f, 2.303425716e-06f, 2.261671801e-06f, 2.219918321e-06f, 2.178165349e-06f, 2.136412958e-06f, 2.094661219e-06f, 2.052910205e-06f, 2.011159987e-06f,
-1.969410639e-06f, 1.927662232e-06f, 1.885914839e-06f, 1.844168531e-06f, 1.802423382e-06f, 1.760679462e-06f, 1.718936844e-06f, 1.677195600e-06f, 1.635455803e-06f, 1.593717524e-06f,
-1.551980836e-06f, 1.510245810e-06f, 1.468512519e-06f, 1.426781035e-06f, 1.385051430e-06f, 1.343323776e-06f, 1.301598144e-06f, 1.259874608e-06f, 1.218153238e-06f, 1.176434108e-06f,
-1.134717289e-06f, 1.093002852e-06f, 1.051290870e-06f, 1.009581416e-06f, 9.678745599e-07f, 9.261703748e-07f, 8.844689324e-07f, 8.427703046e-07f, 8.010745632e-07f, 7.593817803e-07f,
-7.176920276e-07f, 6.760053770e-07f, 6.343219003e-07f, 5.926416694e-07f, 5.509647562e-07f, 5.092912323e-07f, 4.676211696e-07f, 4.259546400e-07f, 3.842917150e-07f, 3.426324666e-07f,
-3.009769664e-07f, 2.593252862e-07f, 2.176774977e-07f, 1.760336725e-07f, 1.343938824e-07f, 9.275819901e-08f, 5.112669399e-08f, 9.499438985e-09f, -3.212349438e-08f, -7.374203450e-08f,
--1.153561098e-07f, -1.569656487e-07f, -1.985705795e-07f, -2.401708309e-07f, -2.817663312e-07f, -3.233570089e-07f, -3.649427925e-07f, -4.065236106e-07f, -4.480993917e-07f, -4.896700642e-07f,
--5.312355569e-07f, -5.727957982e-07f, -6.143507168e-07f, -6.559002412e-07f, -6.974443001e-07f, -7.389828222e-07f, -7.805157361e-07f, -8.220429705e-07f, -8.635644541e-07f, -9.050801156e-07f,
--9.465898838e-07f, -9.880936873e-07f, -1.029591455e-06f, -1.071083116e-06f, -1.112568598e-06f, -1.154047831e-06f, -1.195520743e-06f, -1.236987264e-06f, -1.278447322e-06f, -1.319900846e-06f,
--1.361347765e-06f, -1.402788007e-06f, -1.444221503e-06f, -1.485648180e-06f, -1.527067969e-06f, -1.568480797e-06f, -1.609886594e-06f, -1.651285289e-06f, -1.692676810e-06f, -1.734061088e-06f,
--1.775438051e-06f, -1.816807629e-06f, -1.858169750e-06f, -1.899524343e-06f, -1.940871338e-06f, -1.982210665e-06f, -2.023542251e-06f, -2.064866027e-06f, -2.106181922e-06f, -2.147489865e-06f,
--2.188789785e-06f, -2.230081612e-06f, -2.271365276e-06f, -2.312640704e-06f, -2.353907828e-06f, -2.395166575e-06f, -2.436416877e-06f, -2.477658661e-06f, -2.518891859e-06f, -2.560116398e-06f,
--2.601332210e-06f, -2.642539222e-06f, -2.683737366e-06f, -2.724926570e-06f, -2.766106764e-06f, -2.807277877e-06f, -2.848439841e-06f, -2.889592583e-06f, -2.930736034e-06f, -2.971870123e-06f,
--3.012994781e-06f, -3.054109937e-06f, -3.095215521e-06f, -3.136311463e-06f, -3.177397692e-06f, -3.218474139e-06f, -3.259540733e-06f, -3.300597405e-06f, -3.341644084e-06f, -3.382680700e-06f,
--3.423707183e-06f, -3.464723464e-06f, -3.505729472e-06f, -3.546725137e-06f, -3.587710390e-06f, -3.628685161e-06f, -3.669649379e-06f, -3.710602976e-06f, -3.751545881e-06f, -3.792478024e-06f,
--3.833399336e-06f, -3.874309746e-06f, -3.915209187e-06f, -3.956097586e-06f, -3.996974876e-06f, -4.037840986e-06f, -4.078695847e-06f, -4.119539390e-06f, -4.160371544e-06f, -4.201192240e-06f,
--4.242001409e-06f, -4.282798981e-06f, -4.323584887e-06f, -4.364359058e-06f, -4.405121424e-06f, -4.445871915e-06f, -4.486610463e-06f, -4.527336998e-06f, -4.568051451e-06f, -4.608753753e-06f,
--4.649443834e-06f, -4.690121626e-06f, -4.730787059e-06f, -4.771440064e-06f, -4.812080572e-06f, -4.852708513e-06f, -4.893323820e-06f, -4.933926423e-06f, -4.974516253e-06f, -5.015093240e-06f,
--5.055657317e-06f, -5.096208414e-06f, -5.136746462e-06f, -5.177271393e-06f, -5.217783138e-06f, -5.258281628e-06f, -5.298766794e-06f, -5.339238567e-06f, -5.379696879e-06f, -5.420141662e-06f,
--5.460572847e-06f, -5.500990364e-06f, -5.541394146e-06f, -5.581784124e-06f, -5.622160229e-06f, -5.662522394e-06f, -5.702870549e-06f, -5.743204627e-06f, -5.783524558e-06f, -5.823830275e-06f,
--5.864121709e-06f, -5.904398793e-06f, -5.944661457e-06f, -5.984909633e-06f, -6.025143254e-06f, -6.065362252e-06f, -6.105566557e-06f, -6.145756103e-06f, -6.185930820e-06f, -6.226090642e-06f,
--6.266235500e-06f, -6.306365326e-06f, -6.346480052e-06f, -6.386579611e-06f, -6.426663934e-06f, -6.466732954e-06f, -6.506786602e-06f, -6.546824812e-06f, -6.586847516e-06f, -6.626854645e-06f,
--6.666846133e-06f, -6.706821911e-06f, -6.746781912e-06f, -6.786726069e-06f, -6.826654313e-06f, -6.866566578e-06f, -6.906462797e-06f, -6.946342901e-06f, -6.986206823e-06f, -7.026054496e-06f,
--7.065885853e-06f, -7.105700827e-06f, -7.145499349e-06f, -7.185281354e-06f, -7.225046774e-06f, -7.264795541e-06f, -7.304527590e-06f, -7.344242851e-06f, -7.383941260e-06f, -7.423622748e-06f,
--7.463287249e-06f, -7.502934696e-06f, -7.542565022e-06f, -7.582178160e-06f, -7.621774044e-06f, -7.661352606e-06f, -7.700913780e-06f, -7.740457499e-06f, -7.779983697e-06f, -7.819492308e-06f,
--7.858983263e-06f, -7.898456497e-06f, -7.937911944e-06f, -7.977349537e-06f, -8.016769210e-06f, -8.056170895e-06f, -8.095554528e-06f, -8.134920041e-06f, -8.174267369e-06f, -8.213596444e-06f,
--8.252907201e-06f, -8.292199575e-06f, -8.331473498e-06f, -8.370728904e-06f, -8.409965728e-06f, -8.449183904e-06f, -8.488383365e-06f, -8.527564046e-06f, -8.566725880e-06f, -8.605868803e-06f,
--8.644992748e-06f, -8.684097649e-06f, -8.723183442e-06f, -8.762250059e-06f, -8.801297436e-06f, -8.840325506e-06f, -8.879334205e-06f, -8.918323466e-06f, -8.957293225e-06f, -8.996243416e-06f,
--9.035173974e-06f, -9.074084832e-06f, -9.112975926e-06f, -9.151847191e-06f, -9.190698561e-06f, -9.229529972e-06f, -9.268341357e-06f, -9.307132652e-06f, -9.345903792e-06f, -9.384654712e-06f,
--9.423385347e-06f, -9.462095632e-06f, -9.500785502e-06f, -9.539454892e-06f, -9.578103737e-06f, -9.616731973e-06f, -9.655339535e-06f, -9.693926357e-06f, -9.732492377e-06f, -9.771037529e-06f,
--9.809561747e-06f, -9.848064969e-06f, -9.886547129e-06f, -9.925008164e-06f, -9.963448008e-06f, -1.000186660e-05f, -1.004026387e-05f, -1.007863975e-05f, -1.011699419e-05f, -1.015532712e-05f,
--1.019363847e-05f, -1.023192819e-05f, -1.027019619e-05f, -1.030844243e-05f, -1.034666684e-05f, -1.038486936e-05f, -1.042304991e-05f, -1.046120844e-05f, -1.049934488e-05f, -1.053745918e-05f,
--1.057555125e-05f, -1.061362105e-05f, -1.065166851e-05f, -1.068969357e-05f, -1.072769615e-05f, -1.076567620e-05f, -1.080363366e-05f, -1.084156846e-05f, -1.087948053e-05f, -1.091736982e-05f,
--1.095523626e-05f, -1.099307979e-05f, -1.103090035e-05f, -1.106869786e-05f, -1.110647228e-05f, -1.114422353e-05f, -1.118195155e-05f, -1.121965629e-05f, -1.125733767e-05f, -1.129499563e-05f,
--1.133263012e-05f, -1.137024107e-05f, -1.140782841e-05f, -1.144539208e-05f, -1.148293203e-05f, -1.152044819e-05f, -1.155794049e-05f, -1.159540888e-05f, -1.163285328e-05f, -1.167027365e-05f,
--1.170766991e-05f, -1.174504201e-05f, -1.178238988e-05f, -1.181971346e-05f, -1.185701269e-05f, -1.189428751e-05f, -1.193153785e-05f, -1.196876365e-05f, -1.200596485e-05f, -1.204314139e-05f,
--1.208029321e-05f, -1.211742024e-05f, -1.215452242e-05f, -1.219159970e-05f, -1.222865201e-05f, -1.226567928e-05f, -1.230268146e-05f, -1.233965849e-05f, -1.237661030e-05f, -1.241353684e-05f,
--1.245043804e-05f, -1.248731383e-05f, -1.252416417e-05f, -1.256098898e-05f, -1.259778821e-05f, -1.263456180e-05f, -1.267130968e-05f, -1.270803180e-05f, -1.274472809e-05f, -1.278139849e-05f,
--1.281804294e-05f, -1.285466138e-05f, -1.289125376e-05f, -1.292782000e-05f, -1.296436005e-05f, -1.300087385e-05f, -1.303736134e-05f, -1.307382246e-05f, -1.311025714e-05f, -1.314666533e-05f,
--1.318304696e-05f, -1.321940199e-05f, -1.325573033e-05f, -1.329203195e-05f, -1.332830677e-05f, -1.336455473e-05f, -1.340077579e-05f, -1.343696986e-05f, -1.347313691e-05f, -1.350927686e-05f,
--1.354538966e-05f, -1.358147524e-05f, -1.361753355e-05f, -1.365356453e-05f, -1.368956812e-05f, -1.372554426e-05f, -1.376149289e-05f, -1.379741394e-05f, -1.383330737e-05f, -1.386917311e-05f,
--1.390501110e-05f, -1.394082129e-05f, -1.397660360e-05f, -1.401235800e-05f, -1.404808441e-05f, -1.408378277e-05f, -1.411945304e-05f, -1.415509514e-05f, -1.419070903e-05f, -1.422629464e-05f,
--1.426185191e-05f, -1.429738078e-05f, -1.433288120e-05f, -1.436835311e-05f, -1.440379645e-05f, -1.443921116e-05f, -1.447459718e-05f, -1.450995446e-05f, -1.454528293e-05f, -1.458058254e-05f,
--1.461585323e-05f, -1.465109494e-05f, -1.468630761e-05f, -1.472149120e-05f, -1.475664562e-05f, -1.479177084e-05f, -1.482686680e-05f, -1.486193342e-05f, -1.489697067e-05f, -1.493197847e-05f,
--1.496695677e-05f, -1.500190552e-05f, -1.503682466e-05f, -1.507171413e-05f, -1.510657387e-05f, -1.514140382e-05f, -1.517620393e-05f, -1.521097414e-05f, -1.524571440e-05f, -1.528042464e-05f,
--1.531510482e-05f, -1.534975486e-05f, -1.538437472e-05f, -1.541896435e-05f, -1.545352367e-05f, -1.548805264e-05f, -1.552255120e-05f, -1.555701929e-05f, -1.559145686e-05f, -1.562586385e-05f,
--1.566024020e-05f, -1.569458586e-05f, -1.572890077e-05f, -1.576318487e-05f, -1.579743811e-05f, -1.583166044e-05f, -1.586585179e-05f, -1.590001211e-05f, -1.593414135e-05f, -1.596823944e-05f,
--1.600230634e-05f, -1.603634199e-05f, -1.607034632e-05f, -1.610431930e-05f, -1.613826085e-05f, -1.617217093e-05f, -1.620604948e-05f, -1.623989644e-05f, -1.627371176e-05f, -1.630749539e-05f,
--1.634124726e-05f, -1.637496733e-05f, -1.640865553e-05f, -1.644231182e-05f, -1.647593614e-05f, -1.650952843e-05f, -1.654308864e-05f, -1.657661672e-05f, -1.661011260e-05f, -1.664357624e-05f,
--1.667700757e-05f, -1.671040656e-05f, -1.674377313e-05f, -1.677710724e-05f, -1.681040884e-05f, -1.684367786e-05f, -1.687691425e-05f, -1.691011797e-05f, -1.694328895e-05f, -1.697642715e-05f,
--1.700953250e-05f, -1.704260495e-05f, -1.707564446e-05f, -1.710865096e-05f, -1.714162441e-05f, -1.717456474e-05f, -1.720747191e-05f, -1.724034586e-05f, -1.727318654e-05f, -1.730599390e-05f,
--1.733876788e-05f, -1.737150842e-05f, -1.740421548e-05f, -1.743688901e-05f, -1.746952894e-05f, -1.750213523e-05f, -1.753470782e-05f, -1.756724667e-05f, -1.759975171e-05f, -1.763222289e-05f,
--1.766466017e-05f, -1.769706349e-05f, -1.772943280e-05f, -1.776176804e-05f, -1.779406916e-05f, -1.782633611e-05f, -1.785856884e-05f, -1.789076729e-05f, -1.792293142e-05f, -1.795506117e-05f,
--1.798715649e-05f, -1.801921732e-05f, -1.805124362e-05f, -1.808323534e-05f, -1.811519241e-05f, -1.814711480e-05f, -1.817900244e-05f, -1.821085529e-05f, -1.824267330e-05f, -1.827445640e-05f,
--1.830620457e-05f, -1.833791773e-05f, -1.836959584e-05f, -1.840123885e-05f, -1.843284671e-05f, -1.846441936e-05f, -1.849595676e-05f, -1.852745886e-05f, -1.855892560e-05f, -1.859035693e-05f,
--1.862175280e-05f, -1.865311317e-05f, -1.868443797e-05f, -1.871572717e-05f, -1.874698071e-05f, -1.877819853e-05f, -1.880938060e-05f, -1.884052685e-05f, -1.887163725e-05f, -1.890271173e-05f,
--1.893375025e-05f, -1.896475276e-05f, -1.899571921e-05f, -1.902664955e-05f, -1.905754373e-05f, -1.908840169e-05f, -1.911922340e-05f, -1.915000880e-05f, -1.918075783e-05f, -1.921147046e-05f,
--1.924214664e-05f, -1.927278630e-05f, -1.930338941e-05f, -1.933395591e-05f, -1.936448576e-05f, -1.939497890e-05f, -1.942543529e-05f, -1.945585488e-05f, -1.948623762e-05f, -1.951658346e-05f,
--1.954689235e-05f, -1.957716425e-05f, -1.960739910e-05f, -1.963759686e-05f, -1.966775748e-05f, -1.969788090e-05f, -1.972796709e-05f, -1.975801599e-05f, -1.978802756e-05f, -1.981800174e-05f,
--1.984793849e-05f, -1.987783777e-05f, -1.990769951e-05f, -1.993752369e-05f, -1.996731024e-05f, -1.999705912e-05f, -2.002677028e-05f, -2.005644368e-05f, -2.008607927e-05f, -2.011567700e-05f,
--2.014523682e-05f, -2.017475869e-05f, -2.020424255e-05f, -2.023368837e-05f, -2.026309609e-05f, -2.029246568e-05f, -2.032179707e-05f, -2.035109022e-05f, -2.038034510e-05f, -2.040956164e-05f,
--2.043873981e-05f, -2.046787956e-05f, -2.049698084e-05f, -2.052604360e-05f, -2.055506780e-05f, -2.058405340e-05f, -2.061300034e-05f, -2.064190858e-05f, -2.067077808e-05f, -2.069960878e-05f,
--2.072840065e-05f, -2.075715363e-05f, -2.078586769e-05f, -2.081454277e-05f, -2.084317883e-05f, -2.087177583e-05f, -2.090033371e-05f, -2.092885244e-05f, -2.095733196e-05f, -2.098577224e-05f,
--2.101417323e-05f, -2.104253488e-05f, -2.107085715e-05f, -2.109913999e-05f, -2.112738336e-05f, -2.115558721e-05f, -2.118375150e-05f, -2.121187619e-05f, -2.123996122e-05f, -2.126800656e-05f,
--2.129601216e-05f, -2.132397798e-05f, -2.135190397e-05f, -2.137979009e-05f, -2.140763629e-05f, -2.143544253e-05f, -2.146320877e-05f, -2.149093495e-05f, -2.151862105e-05f, -2.154626701e-05f,
--2.157387280e-05f, -2.160143835e-05f, -2.162896365e-05f, -2.165644863e-05f, -2.168389326e-05f, -2.171129749e-05f, -2.173866129e-05f, -2.176598460e-05f, -2.179326739e-05f, -2.182050960e-05f,
--2.184771121e-05f, -2.187487216e-05f, -2.190199241e-05f, -2.192907192e-05f, -2.195611065e-05f, -2.198310856e-05f, -2.201006560e-05f, -2.203698172e-05f, -2.206385690e-05f, -2.209069108e-05f,
--2.211748422e-05f, -2.214423628e-05f, -2.217094723e-05f, -2.219761701e-05f, -2.222424558e-05f, -2.225083291e-05f, -2.227737895e-05f, -2.230388367e-05f, -2.233034701e-05f, -2.235676893e-05f,
--2.238314940e-05f, -2.240948838e-05f, -2.243578582e-05f, -2.246204168e-05f, -2.248825593e-05f, -2.251442851e-05f, -2.254055939e-05f, -2.256664853e-05f, -2.259269589e-05f, -2.261870142e-05f,
--2.264466509e-05f, -2.267058685e-05f, -2.269646667e-05f, -2.272230450e-05f, -2.274810031e-05f, -2.277385405e-05f, -2.279956568e-05f, -2.282523517e-05f, -2.285086247e-05f, -2.287644755e-05f,
--2.290199036e-05f, -2.292749086e-05f, -2.295294901e-05f, -2.297836478e-05f, -2.300373813e-05f, -2.302906901e-05f, -2.305435739e-05f, -2.307960322e-05f, -2.310480647e-05f, -2.312996710e-05f,
--2.315508507e-05f, -2.318016033e-05f, -2.320519286e-05f, -2.323018261e-05f, -2.325512955e-05f, -2.328003363e-05f, -2.330489482e-05f, -2.332971307e-05f, -2.335448835e-05f, -2.337922062e-05f,
--2.340390985e-05f, -2.342855599e-05f, -2.345315901e-05f, -2.347771886e-05f, -2.350223551e-05f, -2.352670893e-05f, -2.355113907e-05f, -2.357552590e-05f, -2.359986937e-05f, -2.362416946e-05f,
--2.364842612e-05f, -2.367263932e-05f, -2.369680901e-05f, -2.372093517e-05f, -2.374501775e-05f, -2.376905672e-05f, -2.379305204e-05f, -2.381700367e-05f, -2.384091157e-05f, -2.386477572e-05f,
--2.388859607e-05f, -2.391237259e-05f, -2.393610523e-05f, -2.395979397e-05f, -2.398343877e-05f, -2.400703958e-05f, -2.403059638e-05f, -2.405410913e-05f, -2.407757779e-05f, -2.410100232e-05f,
--2.412438270e-05f, -2.414771887e-05f, -2.417101082e-05f, -2.419425850e-05f, -2.421746187e-05f, -2.424062091e-05f, -2.426373557e-05f, -2.428680583e-05f, -2.430983164e-05f, -2.433281296e-05f,
--2.435574978e-05f, -2.437864204e-05f, -2.440148972e-05f, -2.442429278e-05f, -2.444705118e-05f, -2.446976489e-05f, -2.449243388e-05f, -2.451505811e-05f, -2.453763755e-05f, -2.456017216e-05f,
--2.458266191e-05f, -2.460510676e-05f, -2.462750668e-05f, -2.464986164e-05f, -2.467217160e-05f, -2.469443652e-05f, -2.471665638e-05f, -2.473883114e-05f, -2.476096077e-05f, -2.478304523e-05f,
--2.480508449e-05f, -2.482707851e-05f, -2.484902727e-05f, -2.487093073e-05f, -2.489278885e-05f, -2.491460160e-05f, -2.493636896e-05f, -2.495809088e-05f, -2.497976734e-05f, -2.500139830e-05f,
--2.502298373e-05f, -2.504452359e-05f, -2.506601786e-05f, -2.508746650e-05f, -2.510886947e-05f, -2.513022676e-05f, -2.515153832e-05f, -2.517280412e-05f, -2.519402413e-05f, -2.521519832e-05f,
--2.523632665e-05f, -2.525740911e-05f, -2.527844564e-05f, -2.529943623e-05f, -2.532038083e-05f, -2.534127942e-05f, -2.536213198e-05f, -2.538293845e-05f, -2.540369882e-05f, -2.542441306e-05f,
--2.544508113e-05f, -2.546570300e-05f, -2.548627864e-05f, -2.550680801e-05f, -2.552729110e-05f, -2.554772787e-05f, -2.556811829e-05f, -2.558846232e-05f, -2.560875994e-05f, -2.562901112e-05f,
--2.564921582e-05f, -2.566937402e-05f, -2.568948569e-05f, -2.570955080e-05f, -2.572956931e-05f, -2.574954120e-05f, -2.576946643e-05f, -2.578934499e-05f, -2.580917683e-05f, -2.582896193e-05f,
--2.584870026e-05f, -2.586839179e-05f, -2.588803649e-05f, -2.590763433e-05f, -2.592718529e-05f, -2.594668933e-05f, -2.596614643e-05f, -2.598555655e-05f, -2.600491967e-05f, -2.602423576e-05f,
--2.604350478e-05f, -2.606272673e-05f, -2.608190155e-05f, -2.610102923e-05f, -2.612010974e-05f, -2.613914305e-05f, -2.615812912e-05f, -2.617706795e-05f, -2.619595948e-05f, -2.621480371e-05f,
--2.623360059e-05f, -2.625235011e-05f, -2.627105223e-05f, -2.628970693e-05f, -2.630831418e-05f, -2.632687396e-05f, -2.634538623e-05f, -2.636385096e-05f, -2.638226814e-05f, -2.640063774e-05f,
--2.641895972e-05f, -2.643723407e-05f, -2.645546075e-05f, -2.647363973e-05f, -2.649177100e-05f, -2.650985453e-05f, -2.652789028e-05f, -2.654587824e-05f, -2.656381837e-05f, -2.658171065e-05f,
--2.659955506e-05f, -2.661735157e-05f, -2.663510015e-05f, -2.665280077e-05f, -2.667045342e-05f, -2.668805807e-05f, -2.670561468e-05f, -2.672312324e-05f, -2.674058372e-05f, -2.675799610e-05f,
--2.677536035e-05f, -2.679267644e-05f, -2.680994435e-05f, -2.682716405e-05f, -2.684433553e-05f, -2.686145875e-05f, -2.687853369e-05f, -2.689556033e-05f, -2.691253864e-05f, -2.692946859e-05f,
--2.694635018e-05f, -2.696318336e-05f, -2.697996811e-05f, -2.699670442e-05f, -2.701339225e-05f, -2.703003159e-05f, -2.704662241e-05f, -2.706316468e-05f, -2.707965839e-05f, -2.709610351e-05f,
--2.711250001e-05f, -2.712884787e-05f, -2.714514708e-05f, -2.716139760e-05f, -2.717759941e-05f, -2.719375249e-05f, -2.720985682e-05f, -2.722591238e-05f, -2.724191913e-05f, -2.725787707e-05f,
--2.727378616e-05f, -2.728964639e-05f, -2.730545773e-05f, -2.732122016e-05f, -2.733693366e-05f, -2.735259820e-05f, -2.736821377e-05f, -2.738378033e-05f, -2.739929788e-05f, -2.741476639e-05f,
--2.743018583e-05f, -2.744555619e-05f, -2.746087744e-05f, -2.747614956e-05f, -2.749137253e-05f, -2.750654634e-05f, -2.752167095e-05f, -2.753674635e-05f, -2.755177252e-05f, -2.756674943e-05f,
--2.758167706e-05f, -2.759655540e-05f, -2.761138443e-05f, -2.762616412e-05f, -2.764089445e-05f, -2.765557540e-05f, -2.767020696e-05f, -2.768478909e-05f, -2.769932179e-05f, -2.771380503e-05f,
--2.772823880e-05f, -2.774262306e-05f, -2.775695781e-05f, -2.777124302e-05f, -2.778547868e-05f, -2.779966476e-05f, -2.781380124e-05f, -2.782788811e-05f, -2.784192534e-05f, -2.785591292e-05f,
--2.786985083e-05f, -2.788373905e-05f, -2.789757756e-05f, -2.791136634e-05f, -2.792510538e-05f, -2.793879465e-05f, -2.795243413e-05f, -2.796602381e-05f, -2.797956367e-05f, -2.799305369e-05f,
--2.800649386e-05f, -2.801988415e-05f, -2.803322455e-05f, -2.804651503e-05f, -2.805975559e-05f, -2.807294620e-05f, -2.808608684e-05f, -2.809917751e-05f, -2.811221817e-05f, -2.812520882e-05f,
--2.813814944e-05f, -2.815104000e-05f, -2.816388050e-05f, -2.817667091e-05f, -2.818941122e-05f, -2.820210141e-05f, -2.821474147e-05f, -2.822733138e-05f, -2.823987111e-05f, -2.825236066e-05f,
--2.826480002e-05f, -2.827718915e-05f, -2.828952805e-05f, -2.830181670e-05f, -2.831405508e-05f, -2.832624319e-05f, -2.833838099e-05f, -2.835046848e-05f, -2.836250565e-05f, -2.837449247e-05f,
--2.838642892e-05f, -2.839831501e-05f, -2.841015070e-05f, -2.842193599e-05f, -2.843367086e-05f, -2.844535529e-05f, -2.845698927e-05f, -2.846857278e-05f, -2.848010582e-05f, -2.849158836e-05f,
--2.850302038e-05f, -2.851440189e-05f, -2.852573286e-05f, -2.853701327e-05f, -2.854824312e-05f, -2.855942238e-05f, -2.857055105e-05f, -2.858162911e-05f, -2.859265655e-05f, -2.860363335e-05f,
--2.861455950e-05f, -2.862543499e-05f, -2.863625980e-05f, -2.864703391e-05f, -2.865775733e-05f, -2.866843002e-05f, -2.867905199e-05f, -2.868962321e-05f, -2.870014367e-05f, -2.871061336e-05f,
--2.872103228e-05f, -2.873140039e-05f, -2.874171770e-05f, -2.875198419e-05f, -2.876219984e-05f, -2.877236465e-05f, -2.878247860e-05f, -2.879254169e-05f, -2.880255389e-05f, -2.881251519e-05f,
--2.882242559e-05f, -2.883228508e-05f, -2.884209363e-05f, -2.885185125e-05f, -2.886155791e-05f, -2.887121361e-05f, -2.888081833e-05f, -2.889037206e-05f, -2.889987480e-05f, -2.890932653e-05f,
--2.891872724e-05f, -2.892807692e-05f, -2.893737556e-05f, -2.894662314e-05f, -2.895581967e-05f, -2.896496511e-05f, -2.897405948e-05f, -2.898310275e-05f, -2.899209492e-05f, -2.900103597e-05f,
--2.900992589e-05f, -2.901876468e-05f, -2.902755233e-05f, -2.903628882e-05f, -2.904497415e-05f, -2.905360830e-05f, -2.906219127e-05f, -2.907072305e-05f, -2.907920362e-05f, -2.908763298e-05f,
--2.909601112e-05f, -2.910433803e-05f, -2.911261370e-05f, -2.912083812e-05f, -2.912901129e-05f, -2.913713319e-05f, -2.914520381e-05f, -2.915322315e-05f, -2.916119120e-05f, -2.916910795e-05f,
--2.917697340e-05f, -2.918478752e-05f, -2.919255032e-05f, -2.920026179e-05f, -2.920792191e-05f, -2.921553069e-05f, -2.922308811e-05f, -2.923059417e-05f, -2.923804885e-05f, -2.924545216e-05f,
--2.925280408e-05f, -2.926010461e-05f, -2.926735373e-05f, -2.927455145e-05f, -2.928169775e-05f, -2.928879262e-05f, -2.929583607e-05f, -2.930282808e-05f, -2.930976865e-05f, -2.931665777e-05f,
--2.932349544e-05f, -2.933028164e-05f, -2.933701637e-05f, -2.934369963e-05f, -2.935033141e-05f, -2.935691170e-05f, -2.936344049e-05f, -2.936991779e-05f, -2.937634358e-05f, -2.938271787e-05f,
--2.938904063e-05f, -2.939531188e-05f, -2.940153159e-05f, -2.940769978e-05f, -2.941381642e-05f, -2.941988152e-05f, -2.942589508e-05f, -2.943185708e-05f, -2.943776752e-05f, -2.944362640e-05f,
--2.944943372e-05f, -2.945518946e-05f, -2.946089362e-05f, -2.946654620e-05f, -2.947214720e-05f, -2.947769661e-05f, -2.948319442e-05f, -2.948864064e-05f, -2.949403525e-05f, -2.949937826e-05f,
--2.950466965e-05f, -2.950990944e-05f, -2.951509760e-05f, -2.952023415e-05f, -2.952531907e-05f, -2.953035236e-05f, -2.953533402e-05f, -2.954026405e-05f, -2.954514244e-05f, -2.954996919e-05f,
--2.955474429e-05f, -2.955946775e-05f, -2.956413957e-05f, -2.956875973e-05f, -2.957332823e-05f, -2.957784508e-05f, -2.958231027e-05f, -2.958672380e-05f, -2.959108566e-05f, -2.959539586e-05f,
--2.959965439e-05f, -2.960386126e-05f, -2.960801645e-05f, -2.961211996e-05f, -2.961617181e-05f, -2.962017197e-05f, -2.962412046e-05f, -2.962801727e-05f, -2.963186239e-05f, -2.963565584e-05f,
--2.963939760e-05f, -2.964308768e-05f, -2.964672607e-05f, -2.965031278e-05f, -2.965384780e-05f, -2.965733113e-05f, -2.966076278e-05f, -2.966414273e-05f, -2.966747100e-05f, -2.967074758e-05f,
--2.967397247e-05f, -2.967714566e-05f, -2.968026717e-05f, -2.968333699e-05f, -2.968635512e-05f, -2.968932156e-05f, -2.969223631e-05f, -2.969509937e-05f, -2.969791075e-05f, -2.970067043e-05f,
--2.970337843e-05f, -2.970603474e-05f, -2.970863937e-05f, -2.971119231e-05f, -2.971369357e-05f, -2.971614314e-05f, -2.971854104e-05f, -2.972088725e-05f, -2.972318179e-05f, -2.972542465e-05f,
--2.972761583e-05f, -2.972975534e-05f, -2.973184318e-05f, -2.973387934e-05f, -2.973586384e-05f, -2.973779667e-05f, -2.973967784e-05f, -2.974150734e-05f, -2.974328519e-05f, -2.974501138e-05f,
--2.974668591e-05f, -2.974830879e-05f, -2.974988001e-05f, -2.975139960e-05f, -2.975286753e-05f, -2.975428383e-05f, -2.975564848e-05f, -2.975696150e-05f, -2.975822289e-05f, -2.975943265e-05f,
--2.976059078e-05f, -2.976169729e-05f, -2.976275218e-05f, -2.976375546e-05f, -2.976470712e-05f, -2.976560718e-05f, -2.976645563e-05f, -2.976725248e-05f, -2.976799774e-05f, -2.976869140e-05f,
--2.976933347e-05f, -2.976992397e-05f, -2.977046288e-05f, -2.977095022e-05f, -2.977138599e-05f, -2.977177019e-05f, -2.977210283e-05f, -2.977238392e-05f, -2.977261346e-05f, -2.977279145e-05f,
--2.977291789e-05f, -2.977299281e-05f, -2.977301619e-05f, -2.977298805e-05f, -2.977290839e-05f, -2.977277722e-05f, -2.977259454e-05f, -2.977236035e-05f, -2.977207467e-05f, -2.977173750e-05f,
--2.977134884e-05f, -2.977090871e-05f, -2.977041710e-05f, -2.976987403e-05f, -2.976927949e-05f, -2.976863350e-05f, -2.976793607e-05f, -2.976718720e-05f, -2.976638689e-05f, -2.976553515e-05f,
--2.976463200e-05f, -2.976367743e-05f, -2.976267146e-05f, -2.976161409e-05f, -2.976050532e-05f, -2.975934518e-05f, -2.975813365e-05f, -2.975687076e-05f, -2.975555650e-05f, -2.975419090e-05f,
--2.975277394e-05f, -2.975130565e-05f, -2.974978602e-05f, -2.974821508e-05f, -2.974659282e-05f, -2.974491925e-05f, -2.974319438e-05f, -2.974141823e-05f, -2.973959080e-05f, -2.973771209e-05f,
--2.973578212e-05f, -2.973380089e-05f, -2.973176842e-05f, -2.972968471e-05f, -2.972754977e-05f, -2.972536361e-05f, -2.972312625e-05f, -2.972083768e-05f, -2.971849792e-05f, -2.971610698e-05f,
--2.971366487e-05f, -2.971117159e-05f, -2.970862716e-05f, -2.970603159e-05f, -2.970338488e-05f, -2.970068705e-05f, -2.969793810e-05f, -2.969513806e-05f, -2.969228692e-05f, -2.968938469e-05f,
--2.968643140e-05f, -2.968342704e-05f, -2.968037163e-05f, -2.967726518e-05f, -2.967410770e-05f, -2.967089920e-05f, -2.966763969e-05f, -2.966432919e-05f, -2.966096770e-05f, -2.965755523e-05f,
--2.965409180e-05f, -2.965057742e-05f, -2.964701210e-05f, -2.964339585e-05f, -2.963972868e-05f, -2.963601060e-05f, -2.963224163e-05f, -2.962842178e-05f, -2.962455106e-05f, -2.962062948e-05f,
--2.961665705e-05f, -2.961263379e-05f, -2.960855970e-05f, -2.960443481e-05f, -2.960025912e-05f, -2.959603265e-05f, -2.959175540e-05f, -2.958742740e-05f, -2.958304865e-05f, -2.957861916e-05f,
--2.957413896e-05f, -2.956960805e-05f, -2.956502645e-05f, -2.956039416e-05f, -2.955571121e-05f, -2.955097760e-05f, -2.954619336e-05f, -2.954135849e-05f, -2.953647300e-05f, -2.953153692e-05f,
--2.952655025e-05f, -2.952151301e-05f, -2.951642521e-05f, -2.951128687e-05f, -2.950609799e-05f, -2.950085861e-05f, -2.949556872e-05f, -2.949022835e-05f, -2.948483751e-05f, -2.947939621e-05f,
--2.947390447e-05f, -2.946836230e-05f, -2.946276972e-05f, -2.945712674e-05f, -2.945143338e-05f, -2.944568966e-05f, -2.943989558e-05f, -2.943405116e-05f, -2.942815643e-05f, -2.942221139e-05f,
--2.941621605e-05f, -2.941017045e-05f, -2.940407459e-05f, -2.939792848e-05f, -2.939173215e-05f, -2.938548560e-05f, -2.937918886e-05f, -2.937284195e-05f, -2.936644487e-05f, -2.935999764e-05f,
--2.935350029e-05f, -2.934695282e-05f, -2.934035526e-05f, -2.933370762e-05f, -2.932700991e-05f, -2.932026216e-05f, -2.931346438e-05f, -2.930661659e-05f, -2.929971880e-05f, -2.929277104e-05f,
--2.928577331e-05f, -2.927872564e-05f, -2.927162805e-05f, -2.926448055e-05f, -2.925728316e-05f, -2.925003589e-05f, -2.924273878e-05f, -2.923539182e-05f, -2.922799504e-05f, -2.922054847e-05f,
--2.921305211e-05f, -2.920550599e-05f, -2.919791012e-05f, -2.919026452e-05f, -2.918256921e-05f, -2.917482422e-05f, -2.916702955e-05f, -2.915918522e-05f, -2.915129127e-05f, -2.914334769e-05f,
--2.913535452e-05f, -2.912731178e-05f, -2.911921947e-05f, -2.911107762e-05f, -2.910288626e-05f, -2.909464539e-05f, -2.908635504e-05f, -2.907801523e-05f, -2.906962598e-05f, -2.906118731e-05f,
--2.905269923e-05f, -2.904416177e-05f, -2.903557495e-05f, -2.902693878e-05f, -2.901825330e-05f, -2.900951851e-05f, -2.900073444e-05f, -2.899190110e-05f, -2.898301853e-05f, -2.897408674e-05f,
--2.896510574e-05f, -2.895607557e-05f, -2.894699624e-05f, -2.893786777e-05f, -2.892869019e-05f, -2.891946351e-05f, -2.891018775e-05f, -2.890086295e-05f, -2.889148911e-05f, -2.888206626e-05f,
--2.887259442e-05f, -2.886307362e-05f, -2.885350387e-05f, -2.884388519e-05f, -2.883421762e-05f, -2.882450116e-05f, -2.881473584e-05f, -2.880492169e-05f, -2.879505873e-05f, -2.878514697e-05f,
--2.877518644e-05f, -2.876517717e-05f, -2.875511917e-05f, -2.874501247e-05f, -2.873485709e-05f, -2.872465306e-05f, -2.871440038e-05f, -2.870409910e-05f, -2.869374923e-05f, -2.868335080e-05f,
--2.867290382e-05f, -2.866240832e-05f, -2.865186433e-05f, -2.864127187e-05f, -2.863063095e-05f, -2.861994162e-05f, -2.860920388e-05f, -2.859841776e-05f, -2.858758329e-05f, -2.857670048e-05f,
--2.856576938e-05f, -2.855478998e-05f, -2.854376233e-05f, -2.853268645e-05f, -2.852156236e-05f, -2.851039008e-05f, -2.849916964e-05f, -2.848790106e-05f, -2.847658437e-05f, -2.846521960e-05f,
--2.845380676e-05f, -2.844234588e-05f, -2.843083699e-05f, -2.841928011e-05f, -2.840767527e-05f, -2.839602249e-05f, -2.838432180e-05f, -2.837257322e-05f, -2.836077678e-05f, -2.834893251e-05f,
--2.833704042e-05f, -2.832510054e-05f, -2.831311291e-05f, -2.830107755e-05f, -2.828899447e-05f, -2.827686372e-05f, -2.826468530e-05f, -2.825245926e-05f, -2.824018562e-05f, -2.822786439e-05f,
--2.821549562e-05f, -2.820307932e-05f, -2.819061553e-05f, -2.817810426e-05f, -2.816554554e-05f, -2.815293941e-05f, -2.814028589e-05f, -2.812758500e-05f, -2.811483678e-05f, -2.810204125e-05f,
--2.808919843e-05f, -2.807630835e-05f, -2.806337105e-05f, -2.805038655e-05f, -2.803735487e-05f, -2.802427604e-05f, -2.801115010e-05f, -2.799797707e-05f, -2.798475697e-05f, -2.797148984e-05f,
--2.795817570e-05f, -2.794481458e-05f, -2.793140650e-05f, -2.791795151e-05f, -2.790444962e-05f, -2.789090086e-05f, -2.787730527e-05f, -2.786366286e-05f, -2.784997368e-05f, -2.783623774e-05f,
--2.782245507e-05f, -2.780862571e-05f, -2.779474969e-05f, -2.778082703e-05f, -2.776685776e-05f, -2.775284191e-05f, -2.773877951e-05f, -2.772467058e-05f, -2.771051517e-05f, -2.769631330e-05f,
--2.768206499e-05f, -2.766777028e-05f, -2.765342919e-05f, -2.763904177e-05f, -2.762460802e-05f, -2.761012800e-05f, -2.759560172e-05f, -2.758102921e-05f, -2.756641051e-05f, -2.755174565e-05f,
--2.753703466e-05f, -2.752227756e-05f, -2.750747438e-05f, -2.749262517e-05f, -2.747772994e-05f, -2.746278873e-05f, -2.744780158e-05f, -2.743276850e-05f, -2.741768953e-05f, -2.740256471e-05f,
--2.738739405e-05f, -2.737217761e-05f, -2.735691539e-05f, -2.734160745e-05f, -2.732625380e-05f, -2.731085448e-05f, -2.729540953e-05f, -2.727991896e-05f, -2.726438282e-05f, -2.724880113e-05f,
--2.723317393e-05f, -2.721750126e-05f, -2.720178313e-05f, -2.718601958e-05f, -2.717021065e-05f, -2.715435637e-05f, -2.713845677e-05f, -2.712251188e-05f, -2.710652173e-05f, -2.709048637e-05f,
--2.707440581e-05f, -2.705828009e-05f, -2.704210924e-05f, -2.702589331e-05f, -2.700963231e-05f, -2.699332629e-05f, -2.697697527e-05f, -2.696057930e-05f, -2.694413839e-05f, -2.692765259e-05f,
--2.691112193e-05f, -2.689454644e-05f, -2.687792616e-05f, -2.686126111e-05f, -2.684455134e-05f, -2.682779688e-05f, -2.681099775e-05f, -2.679415400e-05f, -2.677726565e-05f, -2.676033275e-05f,
--2.674335532e-05f, -2.672633341e-05f, -2.670926703e-05f, -2.669215624e-05f, -2.667500105e-05f, -2.665780151e-05f, -2.664055766e-05f, -2.662326952e-05f, -2.660593713e-05f, -2.658856052e-05f,
--2.657113974e-05f, -2.655367480e-05f, -2.653616576e-05f, -2.651861264e-05f, -2.650101549e-05f, -2.648337432e-05f, -2.646568919e-05f, -2.644796012e-05f, -2.643018715e-05f, -2.641237032e-05f,
--2.639450965e-05f, -2.637660520e-05f, -2.635865698e-05f, -2.634066505e-05f, -2.632262943e-05f, -2.630455016e-05f, -2.628642727e-05f, -2.626826080e-05f, -2.625005079e-05f, -2.623179728e-05f,
--2.621350030e-05f, -2.619515988e-05f, -2.617677606e-05f, -2.615834888e-05f, -2.613987838e-05f, -2.612136459e-05f, -2.610280755e-05f, -2.608420729e-05f, -2.606556385e-05f, -2.604687728e-05f,
--2.602814760e-05f, -2.600937485e-05f, -2.599055907e-05f, -2.597170030e-05f, -2.595279857e-05f, -2.593385392e-05f, -2.591486639e-05f, -2.589583602e-05f, -2.587676284e-05f, -2.585764689e-05f,
--2.583848821e-05f, -2.581928683e-05f, -2.580004280e-05f, -2.578075615e-05f, -2.576142692e-05f, -2.574205515e-05f, -2.572264087e-05f, -2.570318413e-05f, -2.568368496e-05f, -2.566414340e-05f,
--2.564455949e-05f, -2.562493326e-05f, -2.560526476e-05f, -2.558555402e-05f, -2.556580108e-05f, -2.554600599e-05f, -2.552616878e-05f, -2.550628948e-05f, -2.548636814e-05f, -2.546640480e-05f,
--2.544639949e-05f, -2.542635226e-05f, -2.540626313e-05f, -2.538613217e-05f, -2.536595939e-05f, -2.534574485e-05f, -2.532548857e-05f, -2.530519061e-05f, -2.528485099e-05f, -2.526446977e-05f,
--2.524404697e-05f, -2.522358264e-05f, -2.520307682e-05f, -2.518252955e-05f, -2.516194086e-05f, -2.514131081e-05f, -2.512063942e-05f, -2.509992674e-05f, -2.507917281e-05f, -2.505837767e-05f,
--2.503754136e-05f, -2.501666392e-05f, -2.499574538e-05f, -2.497478580e-05f, -2.495378521e-05f, -2.493274365e-05f, -2.491166117e-05f, -2.489053780e-05f, -2.486937358e-05f, -2.484816856e-05f,
--2.482692277e-05f, -2.480563626e-05f, -2.478430907e-05f, -2.476294124e-05f, -2.474153282e-05f, -2.472008383e-05f, -2.469859433e-05f, -2.467706435e-05f, -2.465549394e-05f, -2.463388314e-05f,
--2.461223199e-05f, -2.459054053e-05f, -2.456880880e-05f, -2.454703686e-05f, -2.452522472e-05f, -2.450337245e-05f, -2.448148008e-05f, -2.445954765e-05f, -2.443757521e-05f, -2.441556280e-05f,
--2.439351046e-05f, -2.437141823e-05f, -2.434928615e-05f, -2.432711428e-05f, -2.430490264e-05f, -2.428265129e-05f, -2.426036026e-05f, -2.423802960e-05f, -2.421565936e-05f, -2.419324957e-05f,
--2.417080027e-05f, -2.414831152e-05f, -2.412578335e-05f, -2.410321580e-05f, -2.408060893e-05f, -2.405796277e-05f, -2.403527736e-05f, -2.401255276e-05f, -2.398978900e-05f, -2.396698612e-05f,
--2.394414418e-05f, -2.392126321e-05f, -2.389834326e-05f, -2.387538437e-05f, -2.385238659e-05f, -2.382934995e-05f, -2.380627451e-05f, -2.378316031e-05f, -2.376000739e-05f, -2.373681579e-05f,
--2.371358556e-05f, -2.369031675e-05f, -2.366700940e-05f, -2.364366355e-05f, -2.362027925e-05f, -2.359685654e-05f, -2.357339547e-05f, -2.354989607e-05f, -2.352635841e-05f, -2.350278251e-05f,
--2.347916844e-05f, -2.345551622e-05f, -2.343182591e-05f, -2.340809754e-05f, -2.338433118e-05f, -2.336052685e-05f, -2.333668462e-05f, -2.331280451e-05f, -2.328888658e-05f, -2.326493087e-05f,
--2.324093743e-05f, -2.321690630e-05f, -2.319283754e-05f, -2.316873117e-05f, -2.314458726e-05f, -2.312040584e-05f, -2.309618696e-05f, -2.307193068e-05f, -2.304763702e-05f, -2.302330604e-05f,
--2.299893780e-05f, -2.297453232e-05f, -2.295008966e-05f, -2.292560986e-05f, -2.290109298e-05f, -2.287653905e-05f, -2.285194812e-05f, -2.282732025e-05f, -2.280265547e-05f, -2.277795383e-05f,
--2.275321538e-05f, -2.272844017e-05f, -2.270362824e-05f, -2.267877964e-05f, -2.265389442e-05f, -2.262897263e-05f, -2.260401430e-05f, -2.257901949e-05f, -2.255398824e-05f, -2.252892061e-05f,
--2.250381664e-05f, -2.247867637e-05f, -2.245349986e-05f, -2.242828715e-05f, -2.240303829e-05f, -2.237775332e-05f, -2.235243230e-05f, -2.232707527e-05f, -2.230168228e-05f, -2.227625337e-05f,
--2.225078860e-05f, -2.222528802e-05f, -2.219975166e-05f, -2.217417958e-05f, -2.214857183e-05f, -2.212292846e-05f, -2.209724950e-05f, -2.207153502e-05f, -2.204578506e-05f, -2.201999967e-05f,
--2.199417889e-05f, -2.196832277e-05f, -2.194243137e-05f, -2.191650473e-05f, -2.189054291e-05f, -2.186454594e-05f, -2.183851387e-05f, -2.181244677e-05f, -2.178634467e-05f, -2.176020762e-05f,
--2.173403568e-05f, -2.170782889e-05f, -2.168158730e-05f, -2.165531096e-05f, -2.162899992e-05f, -2.160265422e-05f, -2.157627393e-05f, -2.154985908e-05f, -2.152340973e-05f, -2.149692593e-05f,
--2.147040772e-05f, -2.144385516e-05f, -2.141726829e-05f, -2.139064716e-05f, -2.136399183e-05f, -2.133730234e-05f, -2.131057875e-05f, -2.128382110e-05f, -2.125702944e-05f, -2.123020383e-05f,
--2.120334431e-05f, -2.117645093e-05f, -2.114952375e-05f, -2.112256281e-05f, -2.109556817e-05f, -2.106853986e-05f, -2.104147796e-05f, -2.101438250e-05f, -2.098725353e-05f, -2.096009111e-05f,
--2.093289529e-05f, -2.090566611e-05f, -2.087840363e-05f, -2.085110791e-05f, -2.082377898e-05f, -2.079641690e-05f, -2.076902172e-05f, -2.074159349e-05f, -2.071413227e-05f, -2.068663809e-05f,
--2.065911103e-05f, -2.063155112e-05f, -2.060395842e-05f, -2.057633298e-05f, -2.054867484e-05f, -2.052098407e-05f, -2.049326071e-05f, -2.046550482e-05f, -2.043771644e-05f, -2.040989563e-05f,
--2.038204243e-05f, -2.035415691e-05f, -2.032623911e-05f, -2.029828908e-05f, -2.027030688e-05f, -2.024229255e-05f, -2.021424616e-05f, -2.018616774e-05f, -2.015805736e-05f, -2.012991506e-05f,
--2.010174091e-05f, -2.007353494e-05f, -2.004529721e-05f, -2.001702778e-05f, -1.998872669e-05f, -1.996039400e-05f, -1.993202976e-05f, -1.990363403e-05f, -1.987520685e-05f, -1.984674828e-05f,
--1.981825837e-05f, -1.978973718e-05f, -1.976118475e-05f, -1.973260114e-05f, -1.970398640e-05f, -1.967534059e-05f, -1.964666375e-05f, -1.961795595e-05f, -1.958921722e-05f, -1.956044764e-05f,
--1.953164724e-05f, -1.950281609e-05f, -1.947395423e-05f, -1.944506173e-05f, -1.941613862e-05f, -1.938718497e-05f, -1.935820083e-05f, -1.932918625e-05f, -1.930014129e-05f, -1.927106599e-05f,
--1.924196042e-05f, -1.921282463e-05f, -1.918365866e-05f, -1.915446258e-05f, -1.912523644e-05f, -1.909598029e-05f, -1.906669418e-05f, -1.903737817e-05f, -1.900803232e-05f, -1.897865667e-05f,
--1.894925128e-05f, -1.891981621e-05f, -1.889035151e-05f, -1.886085723e-05f, -1.883133342e-05f, -1.880178015e-05f, -1.877219747e-05f, -1.874258542e-05f, -1.871294407e-05f, -1.868327347e-05f,
--1.865357367e-05f, -1.862384473e-05f, -1.859408670e-05f, -1.856429964e-05f, -1.853448360e-05f, -1.850463864e-05f, -1.847476481e-05f, -1.844486216e-05f, -1.841493076e-05f, -1.838497065e-05f,
--1.835498189e-05f, -1.832496454e-05f, -1.829491864e-05f, -1.826484427e-05f, -1.823474146e-05f, -1.820461028e-05f, -1.817445078e-05f, -1.814426301e-05f, -1.811404704e-05f, -1.808380291e-05f,
--1.805353069e-05f, -1.802323042e-05f, -1.799290216e-05f, -1.796254598e-05f, -1.793216191e-05f, -1.790175003e-05f, -1.787131038e-05f, -1.784084302e-05f, -1.781034801e-05f, -1.777982540e-05f,
--1.774927524e-05f, -1.771869760e-05f, -1.768809253e-05f, -1.765746009e-05f, -1.762680032e-05f, -1.759611330e-05f, -1.756539906e-05f, -1.753465768e-05f, -1.750388920e-05f, -1.747309368e-05f,
--1.744227118e-05f, -1.741142175e-05f, -1.738054545e-05f, -1.734964234e-05f, -1.731871248e-05f, -1.728775591e-05f, -1.725677269e-05f, -1.722576289e-05f, -1.719472656e-05f, -1.716366375e-05f,
--1.713257452e-05f, -1.710145893e-05f, -1.707031704e-05f, -1.703914889e-05f, -1.700795456e-05f, -1.697673409e-05f, -1.694548754e-05f, -1.691421497e-05f, -1.688291644e-05f, -1.685159200e-05f,
--1.682024170e-05f, -1.678886562e-05f, -1.675746380e-05f, -1.672603630e-05f, -1.669458317e-05f, -1.666310448e-05f, -1.663160029e-05f, -1.660007064e-05f, -1.656851560e-05f, -1.653693522e-05f,
--1.650532957e-05f, -1.647369869e-05f, -1.644204265e-05f, -1.641036150e-05f, -1.637865530e-05f, -1.634692412e-05f, -1.631516799e-05f, -1.628338700e-05f, -1.625158118e-05f, -1.621975060e-05f,
--1.618789532e-05f, -1.615601540e-05f, -1.612411088e-05f, -1.609218184e-05f, -1.606022833e-05f, -1.602825040e-05f, -1.599624811e-05f, -1.596422153e-05f, -1.593217071e-05f, -1.590009570e-05f,
--1.586799658e-05f, -1.583587338e-05f, -1.580372618e-05f, -1.577155503e-05f, -1.573935999e-05f, -1.570714111e-05f, -1.567489846e-05f, -1.564263210e-05f, -1.561034207e-05f, -1.557802845e-05f,
--1.554569129e-05f, -1.551333064e-05f, -1.548094657e-05f, -1.544853913e-05f, -1.541610839e-05f, -1.538365440e-05f, -1.535117722e-05f, -1.531867690e-05f, -1.528615352e-05f, -1.525360712e-05f,
--1.522103777e-05f, -1.518844552e-05f, -1.515583043e-05f, -1.512319257e-05f, -1.509053199e-05f, -1.505784874e-05f, -1.502514290e-05f, -1.499241451e-05f, -1.495966364e-05f, -1.492689035e-05f,
--1.489409469e-05f, -1.486127672e-05f, -1.482843651e-05f, -1.479557411e-05f, -1.476268958e-05f, -1.472978299e-05f, -1.469685438e-05f, -1.466390382e-05f, -1.463093138e-05f, -1.459793710e-05f,
--1.456492104e-05f, -1.453188328e-05f, -1.449882386e-05f, -1.446574285e-05f, -1.443264030e-05f, -1.439951628e-05f, -1.436637085e-05f, -1.433320406e-05f, -1.430001597e-05f, -1.426680665e-05f,
--1.423357615e-05f, -1.420032454e-05f, -1.416705187e-05f, -1.413375820e-05f, -1.410044360e-05f, -1.406710812e-05f, -1.403375182e-05f, -1.400037476e-05f, -1.396697701e-05f, -1.393355862e-05f,
--1.390011965e-05f, -1.386666017e-05f, -1.383318023e-05f, -1.379967989e-05f, -1.376615922e-05f, -1.373261827e-05f, -1.369905710e-05f, -1.366547578e-05f, -1.363187436e-05f, -1.359825291e-05f,
--1.356461148e-05f, -1.353095014e-05f, -1.349726894e-05f, -1.346356795e-05f, -1.342984722e-05f, -1.339610683e-05f, -1.336234682e-05f, -1.332856725e-05f, -1.329476820e-05f, -1.326094972e-05f,
--1.322711186e-05f, -1.319325470e-05f, -1.315937828e-05f, -1.312548268e-05f, -1.309156795e-05f, -1.305763416e-05f, -1.302368136e-05f, -1.298970961e-05f, -1.295571898e-05f, -1.292170953e-05f,
--1.288768131e-05f, -1.285363439e-05f, -1.281956883e-05f, -1.278548469e-05f, -1.275138203e-05f, -1.271726091e-05f, -1.268312140e-05f, -1.264896355e-05f, -1.261478743e-05f, -1.258059309e-05f,
--1.254638060e-05f, -1.251215002e-05f, -1.247790141e-05f, -1.244363483e-05f, -1.240935034e-05f, -1.237504800e-05f, -1.234072788e-05f, -1.230639004e-05f, -1.227203453e-05f, -1.223766142e-05f,
--1.220327078e-05f, -1.216886265e-05f, -1.213443711e-05f, -1.209999421e-05f, -1.206553401e-05f, -1.203105659e-05f, -1.199656199e-05f, -1.196205029e-05f, -1.192752153e-05f, -1.189297579e-05f,
--1.185841313e-05f, -1.182383360e-05f, -1.178923727e-05f, -1.175462420e-05f, -1.171999445e-05f, -1.168534808e-05f, -1.165068516e-05f, -1.161600575e-05f, -1.158130991e-05f, -1.154659769e-05f,
--1.151186917e-05f, -1.147712441e-05f, -1.144236346e-05f, -1.140758639e-05f, -1.137279325e-05f, -1.133798412e-05f, -1.130315906e-05f, -1.126831812e-05f, -1.123346137e-05f, -1.119858886e-05f,
--1.116370067e-05f, -1.112879686e-05f, -1.109387748e-05f, -1.105894260e-05f, -1.102399228e-05f, -1.098902658e-05f, -1.095404556e-05f, -1.091904930e-05f, -1.088403784e-05f, -1.084901125e-05f,
--1.081396960e-05f, -1.077891294e-05f, -1.074384134e-05f, -1.070875486e-05f, -1.067365356e-05f, -1.063853751e-05f, -1.060340677e-05f, -1.056826139e-05f, -1.053310145e-05f, -1.049792701e-05f,
--1.046273812e-05f, -1.042753484e-05f, -1.039231726e-05f, -1.035708541e-05f, -1.032183937e-05f, -1.028657921e-05f, -1.025130497e-05f, -1.021601673e-05f, -1.018071454e-05f, -1.014539848e-05f,
--1.011006860e-05f, -1.007472496e-05f, -1.003936763e-05f, -1.000399667e-05f, -9.968612144e-06f, -9.933214114e-06f, -9.897802641e-06f, -9.862377790e-06f, -9.826939623e-06f, -9.791488203e-06f,
--9.756023592e-06f, -9.720545853e-06f, -9.685055049e-06f, -9.649551244e-06f, -9.614034499e-06f, -9.578504877e-06f, -9.542962442e-06f, -9.507407257e-06f, -9.471839383e-06f, -9.436258885e-06f,
--9.400665825e-06f, -9.365060266e-06f, -9.329442271e-06f, -9.293811903e-06f, -9.258169225e-06f, -9.222514301e-06f, -9.186847192e-06f, -9.151167963e-06f, -9.115476675e-06f, -9.079773393e-06f,
--9.044058179e-06f, -9.008331097e-06f, -8.972592209e-06f, -8.936841579e-06f, -8.901079270e-06f, -8.865305345e-06f, -8.829519866e-06f, -8.793722898e-06f, -8.757914504e-06f, -8.722094747e-06f,
--8.686263689e-06f, -8.650421394e-06f, -8.614567926e-06f, -8.578703348e-06f, -8.542827722e-06f, -8.506941113e-06f, -8.471043583e-06f, -8.435135196e-06f, -8.399216016e-06f, -8.363286104e-06f,
--8.327345526e-06f, -8.291394344e-06f, -8.255432621e-06f, -8.219460421e-06f, -8.183477808e-06f, -8.147484844e-06f, -8.111481594e-06f, -8.075468120e-06f, -8.039444486e-06f, -8.003410755e-06f,
--7.967366991e-06f, -7.931313258e-06f, -7.895249618e-06f, -7.859176136e-06f, -7.823092875e-06f, -7.786999898e-06f, -7.750897269e-06f, -7.714785051e-06f, -7.678663308e-06f, -7.642532104e-06f,
--7.606391501e-06f, -7.570241565e-06f, -7.534082357e-06f, -7.497913942e-06f, -7.461736384e-06f, -7.425549745e-06f, -7.389354090e-06f, -7.353149483e-06f, -7.316935986e-06f, -7.280713663e-06f,
--7.244482579e-06f, -7.208242796e-06f, -7.171994379e-06f, -7.135737391e-06f, -7.099471896e-06f, -7.063197957e-06f, -7.026915639e-06f, -6.990625004e-06f, -6.954326117e-06f, -6.918019041e-06f,
--6.881703840e-06f, -6.845380578e-06f, -6.809049319e-06f, -6.772710126e-06f, -6.736363063e-06f, -6.700008193e-06f, -6.663645582e-06f, -6.627275291e-06f, -6.590897386e-06f, -6.554511930e-06f,
--6.518118986e-06f, -6.481718619e-06f, -6.445310892e-06f, -6.408895869e-06f, -6.372473614e-06f, -6.336044192e-06f, -6.299607664e-06f, -6.263164096e-06f, -6.226713552e-06f, -6.190256094e-06f,
--6.153791788e-06f, -6.117320696e-06f, -6.080842883e-06f, -6.044358413e-06f, -6.007867349e-06f, -5.971369755e-06f, -5.934865696e-06f, -5.898355235e-06f, -5.861838436e-06f, -5.825315362e-06f,
--5.788786079e-06f, -5.752250649e-06f, -5.715709137e-06f, -5.679161606e-06f, -5.642608121e-06f, -5.606048745e-06f, -5.569483542e-06f, -5.532912577e-06f, -5.496335912e-06f, -5.459753613e-06f,
--5.423165743e-06f, -5.386572365e-06f, -5.349973545e-06f, -5.313369345e-06f, -5.276759830e-06f, -5.240145063e-06f, -5.203525110e-06f, -5.166900033e-06f, -5.130269896e-06f, -5.093634764e-06f,
--5.056994701e-06f, -5.020349769e-06f, -4.983700035e-06f, -4.947045560e-06f, -4.910386410e-06f, -4.873722648e-06f, -4.837054339e-06f, -4.800381545e-06f, -4.763704332e-06f, -4.727022763e-06f,
--4.690336902e-06f, -4.653646814e-06f, -4.616952561e-06f, -4.580254208e-06f, -4.543551819e-06f, -4.506845459e-06f, -4.470135190e-06f, -4.433421077e-06f, -4.396703184e-06f, -4.359981575e-06f,
--4.323256314e-06f, -4.286527465e-06f, -4.249795091e-06f, -4.213059257e-06f, -4.176320027e-06f, -4.139577465e-06f, -4.102831634e-06f, -4.066082599e-06f, -4.029330424e-06f, -3.992575172e-06f,
--3.955816907e-06f, -3.919055694e-06f, -3.882291597e-06f, -3.845524679e-06f, -3.808755004e-06f, -3.771982637e-06f, -3.735207641e-06f, -3.698430080e-06f, -3.661650018e-06f, -3.624867520e-06f,
--3.588082648e-06f, -3.551295467e-06f, -3.514506042e-06f, -3.477714435e-06f, -3.440920711e-06f, -3.404124934e-06f, -3.367327167e-06f, -3.330527475e-06f, -3.293725921e-06f, -3.256922570e-06f,
--3.220117485e-06f, -3.183310730e-06f, -3.146502370e-06f, -3.109692467e-06f, -3.072881087e-06f, -3.036068292e-06f, -2.999254147e-06f, -2.962438715e-06f, -2.925622061e-06f, -2.888804248e-06f,
--2.851985340e-06f, -2.815165402e-06f, -2.778344496e-06f, -2.741522687e-06f, -2.704700039e-06f, -2.667876615e-06f, -2.631052479e-06f, -2.594227696e-06f, -2.557402328e-06f, -2.520576441e-06f,
--2.483750096e-06f, -2.446923360e-06f, -2.410096294e-06f, -2.373268963e-06f, -2.336441431e-06f, -2.299613762e-06f, -2.262786019e-06f, -2.225958266e-06f, -2.189130567e-06f, -2.152302986e-06f,
--2.115475586e-06f, -2.078648431e-06f, -2.041821585e-06f, -2.004995111e-06f, -1.968169074e-06f, -1.931343537e-06f, -1.894518564e-06f, -1.857694218e-06f, -1.820870563e-06f, -1.784047662e-06f,
--1.747225581e-06f, -1.710404381e-06f, -1.673584127e-06f, -1.636764883e-06f, -1.599946712e-06f, -1.563129677e-06f, -1.526313843e-06f, -1.489499273e-06f, -1.452686030e-06f, -1.415874178e-06f,
--1.379063782e-06f, -1.342254903e-06f, -1.305447606e-06f, -1.268641955e-06f, -1.231838013e-06f, -1.195035843e-06f, -1.158235509e-06f, -1.121437075e-06f, -1.084640604e-06f, -1.047846160e-06f,
--1.011053805e-06f, -9.742636046e-07f, -9.374756208e-07f, -9.006899175e-07f, -8.639065581e-07f, -8.271256061e-07f, -7.903471249e-07f, -7.535711779e-07f, -7.167978285e-07f, -6.800271401e-07f,
--6.432591761e-07f, -6.064939999e-07f, -5.697316748e-07f, -5.329722641e-07f, -4.962158312e-07f, -4.594624394e-07f, -4.227121521e-07f, -3.859650325e-07f, -3.492211439e-07f, -3.124805496e-07f,
--2.757433129e-07f, -2.390094969e-07f, -2.022791650e-07f, -1.655523804e-07f, -1.288292062e-07f, -9.210970568e-08f, -5.539394203e-08f, -1.868197841e-08f, 1.802612202e-08f, 5.473029612e-08f,
-9.143048075e-08f, 1.281266128e-07f, 1.648186292e-07f, 2.015064668e-07f, 2.381900625e-07f, 2.748693533e-07f, 3.115442761e-07f, 3.482147680e-07f, 3.848807658e-07f, 4.215422066e-07f,
-4.581990274e-07f, 4.948511652e-07f, 5.314985570e-07f, 5.681411400e-07f, 6.047788511e-07f, 6.414116274e-07f, 6.780394061e-07f, 7.146621243e-07f, 7.512797190e-07f, 7.878921275e-07f,
-8.244992869e-07f, 8.611011343e-07f, 8.976976071e-07f, 9.342886423e-07f, 9.708741772e-07f, 1.007454149e-06f, 1.044028495e-06f, 1.080597153e-06f, 1.117160059e-06f, 1.153717151e-06f,
-1.190268367e-06f, 1.226813643e-06f, 1.263352918e-06f, 1.299886128e-06f, 1.336413211e-06f, 1.372934104e-06f, 1.409448745e-06f, 1.445957071e-06f, 1.482459019e-06f, 1.518954528e-06f,
-1.555443534e-06f, 1.591925975e-06f, 1.628401789e-06f, 1.664870913e-06f, 1.701333285e-06f, 1.737788842e-06f, 1.774237522e-06f, 1.810679262e-06f, 1.847114001e-06f, 1.883541675e-06f,
-1.919962223e-06f, 1.956375583e-06f, 1.992781691e-06f, 2.029180486e-06f, 2.065571905e-06f, 2.101955887e-06f, 2.138332368e-06f, 2.174701287e-06f, 2.211062582e-06f, 2.247416191e-06f,
-2.283762051e-06f, 2.320100100e-06f, 2.356430277e-06f, 2.392752518e-06f, 2.429066763e-06f, 2.465372948e-06f, 2.501671013e-06f, 2.537960895e-06f, 2.574242532e-06f, 2.610515862e-06f,
-2.646780823e-06f, 2.683037354e-06f, 2.719285392e-06f, 2.755524876e-06f, 2.791755743e-06f, 2.827977933e-06f, 2.864191382e-06f, 2.900396030e-06f, 2.936591815e-06f, 2.972778675e-06f,
-3.008956547e-06f, 3.045125372e-06f, 3.081285086e-06f, 3.117435628e-06f, 3.153576937e-06f, 3.189708951e-06f, 3.225831609e-06f, 3.261944848e-06f, 3.298048608e-06f, 3.334142827e-06f,
-3.370227443e-06f, 3.406302395e-06f, 3.442367621e-06f, 3.478423061e-06f, 3.514468652e-06f, 3.550504334e-06f, 3.586530044e-06f, 3.622545723e-06f, 3.658551307e-06f, 3.694546737e-06f,
-3.730531951e-06f, 3.766506887e-06f, 3.802471485e-06f, 3.838425683e-06f, 3.874369420e-06f, 3.910302636e-06f, 3.946225268e-06f, 3.982137256e-06f, 4.018038539e-06f, 4.053929056e-06f,
-4.089808745e-06f, 4.125677546e-06f, 4.161535399e-06f, 4.197382241e-06f, 4.233218012e-06f, 4.269042652e-06f, 4.304856098e-06f, 4.340658292e-06f, 4.376449171e-06f, 4.412228675e-06f,
-4.447996743e-06f, 4.483753315e-06f, 4.519498329e-06f, 4.555231726e-06f, 4.590953445e-06f, 4.626663424e-06f, 4.662361603e-06f, 4.698047923e-06f, 4.733722321e-06f, 4.769384739e-06f,
-4.805035115e-06f, 4.840673388e-06f, 4.876299499e-06f, 4.911913387e-06f, 4.947514992e-06f, 4.983104253e-06f, 5.018681110e-06f, 5.054245503e-06f, 5.089797371e-06f, 5.125336655e-06f,
-5.160863294e-06f, 5.196377227e-06f, 5.231878396e-06f, 5.267366739e-06f, 5.302842197e-06f, 5.338304709e-06f, 5.373754215e-06f, 5.409190657e-06f, 5.444613973e-06f, 5.480024103e-06f,
-5.515420988e-06f, 5.550804568e-06f, 5.586174783e-06f, 5.621531573e-06f, 5.656874878e-06f, 5.692204639e-06f, 5.727520796e-06f, 5.762823289e-06f, 5.798112059e-06f, 5.833387045e-06f,
-5.868648189e-06f, 5.903895430e-06f, 5.939128710e-06f, 5.974347968e-06f, 6.009553145e-06f, 6.044744182e-06f, 6.079921019e-06f, 6.115083597e-06f, 6.150231856e-06f, 6.185365738e-06f,
-6.220485182e-06f, 6.255590130e-06f, 6.290680523e-06f, 6.325756300e-06f, 6.360817403e-06f, 6.395863773e-06f, 6.430895351e-06f, 6.465912077e-06f, 6.500913893e-06f, 6.535900740e-06f,
-6.570872558e-06f, 6.605829288e-06f, 6.640770873e-06f, 6.675697252e-06f, 6.710608366e-06f, 6.745504159e-06f, 6.780384569e-06f, 6.815249539e-06f, 6.850099010e-06f, 6.884932922e-06f,
-6.919751219e-06f, 6.954553840e-06f, 6.989340727e-06f, 7.024111823e-06f, 7.058867067e-06f, 7.093606402e-06f, 7.128329769e-06f, 7.163037111e-06f, 7.197728367e-06f, 7.232403481e-06f,
-7.267062393e-06f, 7.301705046e-06f, 7.336331381e-06f, 7.370941340e-06f, 7.405534865e-06f, 7.440111897e-06f, 7.474672379e-06f, 7.509216253e-06f, 7.543743460e-06f, 7.578253942e-06f,
-7.612747642e-06f, 7.647224501e-06f, 7.681684462e-06f, 7.716127467e-06f, 7.750553458e-06f, 7.784962376e-06f, 7.819354165e-06f, 7.853728767e-06f, 7.888086124e-06f, 7.922426177e-06f,
-7.956748871e-06f, 7.991054146e-06f, 8.025341947e-06f, 8.059612214e-06f, 8.093864890e-06f, 8.128099919e-06f, 8.162317243e-06f, 8.196516804e-06f, 8.230698545e-06f, 8.264862408e-06f,
-8.299008337e-06f, 8.333136275e-06f, 8.367246163e-06f, 8.401337946e-06f, 8.435411565e-06f, 8.469466965e-06f, 8.503504087e-06f, 8.537522874e-06f, 8.571523271e-06f, 8.605505219e-06f,
-8.639468663e-06f, 8.673413545e-06f, 8.707339808e-06f, 8.741247396e-06f, 8.775136251e-06f, 8.809006318e-06f, 8.842857540e-06f, 8.876689860e-06f, 8.910503221e-06f, 8.944297566e-06f,
-8.978072841e-06f, 9.011828987e-06f, 9.045565949e-06f, 9.079283670e-06f, 9.112982094e-06f, 9.146661164e-06f, 9.180320825e-06f, 9.213961019e-06f, 9.247581692e-06f, 9.281182786e-06f,
-9.314764246e-06f, 9.348326016e-06f, 9.381868039e-06f, 9.415390260e-06f, 9.448892623e-06f, 9.482375071e-06f, 9.515837549e-06f, 9.549280002e-06f, 9.582702373e-06f, 9.616104606e-06f,
-9.649486646e-06f, 9.682848438e-06f, 9.716189925e-06f, 9.749511053e-06f, 9.782811765e-06f, 9.816092006e-06f, 9.849351720e-06f, 9.882590853e-06f, 9.915809349e-06f, 9.949007152e-06f,
-9.982184208e-06f, 1.001534046e-05f, 1.004847586e-05f, 1.008159034e-05f, 1.011468385e-05f, 1.014775634e-05f, 1.018080775e-05f, 1.021383803e-05f, 1.024684712e-05f, 1.027983496e-05f,
-1.031280151e-05f, 1.034574670e-05f, 1.037867049e-05f, 1.041157281e-05f, 1.044445362e-05f, 1.047731286e-05f, 1.051015046e-05f, 1.054296639e-05f, 1.057576058e-05f, 1.060853299e-05f,
-1.064128354e-05f, 1.067401220e-05f, 1.070671891e-05f, 1.073940361e-05f, 1.077206624e-05f, 1.080470677e-05f, 1.083732512e-05f, 1.086992124e-05f, 1.090249509e-05f, 1.093504661e-05f,
-1.096757574e-05f, 1.100008243e-05f, 1.103256663e-05f, 1.106502827e-05f, 1.109746732e-05f, 1.112988371e-05f, 1.116227739e-05f, 1.119464831e-05f, 1.122699641e-05f, 1.125932165e-05f,
-1.129162395e-05f, 1.132390329e-05f, 1.135615959e-05f, 1.138839280e-05f, 1.142060288e-05f, 1.145278977e-05f, 1.148495342e-05f, 1.151709377e-05f, 1.154921077e-05f, 1.158130436e-05f,
-1.161337450e-05f, 1.164542113e-05f, 1.167744419e-05f, 1.170944364e-05f, 1.174141943e-05f, 1.177337149e-05f, 1.180529978e-05f, 1.183720424e-05f, 1.186908482e-05f, 1.190094147e-05f,
-1.193277413e-05f, 1.196458276e-05f, 1.199636730e-05f, 1.202812769e-05f, 1.205986390e-05f, 1.209157585e-05f, 1.212326350e-05f, 1.215492681e-05f, 1.218656571e-05f, 1.221818015e-05f,
-1.224977008e-05f, 1.228133546e-05f, 1.231287622e-05f, 1.234439232e-05f, 1.237588370e-05f, 1.240735032e-05f, 1.243879211e-05f, 1.247020903e-05f, 1.250160103e-05f, 1.253296805e-05f,
-1.256431005e-05f, 1.259562697e-05f, 1.262691876e-05f, 1.265818536e-05f, 1.268942674e-05f, 1.272064283e-05f, 1.275183358e-05f, 1.278299895e-05f, 1.281413887e-05f, 1.284525331e-05f,
-1.287634221e-05f, 1.290740552e-05f, 1.293844318e-05f, 1.296945515e-05f, 1.300044137e-05f, 1.303140180e-05f, 1.306233638e-05f, 1.309324507e-05f, 1.312412781e-05f, 1.315498454e-05f,
-1.318581523e-05f, 1.321661982e-05f, 1.324739826e-05f, 1.327815049e-05f, 1.330887648e-05f, 1.333957616e-05f, 1.337024949e-05f, 1.340089642e-05f, 1.343151689e-05f, 1.346211086e-05f,
-1.349267828e-05f, 1.352321910e-05f, 1.355373326e-05f, 1.358422071e-05f, 1.361468142e-05f, 1.364511532e-05f, 1.367552237e-05f, 1.370590251e-05f, 1.373625570e-05f, 1.376658189e-05f,
-1.379688103e-05f, 1.382715307e-05f, 1.385739795e-05f, 1.388761563e-05f, 1.391780607e-05f, 1.394796920e-05f, 1.397810499e-05f, 1.400821338e-05f, 1.403829432e-05f, 1.406834776e-05f,
-1.409837366e-05f, 1.412837197e-05f, 1.415834263e-05f, 1.418828560e-05f, 1.421820083e-05f, 1.424808826e-05f, 1.427794786e-05f, 1.430777957e-05f, 1.433758335e-05f, 1.436735914e-05f,
-1.439710689e-05f, 1.442682657e-05f, 1.445651811e-05f, 1.448618147e-05f, 1.451581661e-05f, 1.454542347e-05f, 1.457500201e-05f, 1.460455217e-05f, 1.463407392e-05f, 1.466356719e-05f,
-1.469303195e-05f, 1.472246815e-05f, 1.475187573e-05f, 1.478125465e-05f, 1.481060487e-05f, 1.483992633e-05f, 1.486921898e-05f, 1.489848279e-05f, 1.492771769e-05f, 1.495692365e-05f,
-1.498610062e-05f, 1.501524854e-05f, 1.504436738e-05f, 1.507345708e-05f, 1.510251760e-05f, 1.513154889e-05f, 1.516055089e-05f, 1.518952358e-05f, 1.521846689e-05f, 1.524738079e-05f,
-1.527626522e-05f, 1.530512013e-05f, 1.533394549e-05f, 1.536274124e-05f, 1.539150734e-05f, 1.542024374e-05f, 1.544895040e-05f, 1.547762726e-05f, 1.550627428e-05f, 1.553489142e-05f,
-1.556347862e-05f, 1.559203585e-05f, 1.562056305e-05f, 1.564906018e-05f, 1.567752720e-05f, 1.570596405e-05f, 1.573437070e-05f, 1.576274709e-05f, 1.579109317e-05f, 1.581940892e-05f,
-1.584769427e-05f, 1.587594918e-05f, 1.590417361e-05f, 1.593236751e-05f, 1.596053083e-05f, 1.598866353e-05f, 1.601676557e-05f, 1.604483690e-05f, 1.607287747e-05f, 1.610088724e-05f,
-1.612886616e-05f, 1.615681419e-05f, 1.618473128e-05f, 1.621261739e-05f, 1.624047247e-05f, 1.626829648e-05f, 1.629608938e-05f, 1.632385111e-05f, 1.635158163e-05f, 1.637928091e-05f,
-1.640694888e-05f, 1.643458552e-05f, 1.646219077e-05f, 1.648976459e-05f, 1.651730694e-05f, 1.654481777e-05f, 1.657229704e-05f, 1.659974470e-05f, 1.662716071e-05f, 1.665454502e-05f,
-1.668189760e-05f, 1.670921839e-05f, 1.673650736e-05f, 1.676376445e-05f, 1.679098963e-05f, 1.681818285e-05f, 1.684534407e-05f, 1.687247325e-05f, 1.689957033e-05f, 1.692663529e-05f,
-1.695366806e-05f, 1.698066862e-05f, 1.700763691e-05f, 1.703457290e-05f, 1.706147654e-05f, 1.708834778e-05f, 1.711518660e-05f, 1.714199293e-05f, 1.716876674e-05f, 1.719550798e-05f,
-1.722221662e-05f, 1.724889261e-05f, 1.727553591e-05f, 1.730214647e-05f, 1.732872425e-05f, 1.735526922e-05f, 1.738178132e-05f, 1.740826051e-05f, 1.743470676e-05f, 1.746112002e-05f,
-1.748750024e-05f, 1.751384739e-05f, 1.754016143e-05f, 1.756644230e-05f, 1.759268998e-05f, 1.761890441e-05f, 1.764508556e-05f, 1.767123339e-05f, 1.769734784e-05f, 1.772342889e-05f,
-1.774947648e-05f, 1.777549059e-05f, 1.780147116e-05f, 1.782741815e-05f, 1.785333153e-05f, 1.787921125e-05f, 1.790505727e-05f, 1.793086955e-05f, 1.795664805e-05f, 1.798239272e-05f,
-1.800810354e-05f, 1.803378044e-05f, 1.805942341e-05f, 1.808503238e-05f, 1.811060733e-05f, 1.813614822e-05f, 1.816165499e-05f, 1.818712762e-05f, 1.821256606e-05f, 1.823797026e-05f,
-1.826334020e-05f, 1.828867583e-05f, 1.831397711e-05f, 1.833924400e-05f, 1.836447646e-05f, 1.838967444e-05f, 1.841483792e-05f, 1.843996685e-05f, 1.846506118e-05f, 1.849012089e-05f,
-1.851514593e-05f, 1.854013626e-05f, 1.856509184e-05f, 1.859001263e-05f, 1.861489859e-05f, 1.863974969e-05f, 1.866456588e-05f, 1.868934712e-05f, 1.871409338e-05f, 1.873880462e-05f,
-1.876348079e-05f, 1.878812186e-05f, 1.881272779e-05f, 1.883729854e-05f, 1.886183407e-05f, 1.888633435e-05f, 1.891079933e-05f, 1.893522897e-05f, 1.895962324e-05f, 1.898398210e-05f,
-1.900830551e-05f, 1.903259343e-05f, 1.905684582e-05f, 1.908106265e-05f, 1.910524388e-05f, 1.912938947e-05f, 1.915349937e-05f, 1.917757356e-05f, 1.920161200e-05f, 1.922561464e-05f,
-1.924958145e-05f, 1.927351240e-05f, 1.929740744e-05f, 1.932126653e-05f, 1.934508965e-05f, 1.936887674e-05f, 1.939262778e-05f, 1.941634273e-05f, 1.944002155e-05f, 1.946366420e-05f,
-1.948727065e-05f, 1.951084086e-05f, 1.953437479e-05f, 1.955787240e-05f, 1.958133366e-05f, 1.960475853e-05f, 1.962814698e-05f, 1.965149897e-05f, 1.967481446e-05f, 1.969809341e-05f,
-1.972133579e-05f, 1.974454156e-05f, 1.976771069e-05f, 1.979084314e-05f, 1.981393888e-05f, 1.983699786e-05f, 1.986002005e-05f, 1.988300542e-05f, 1.990595393e-05f, 1.992886554e-05f,
-1.995174022e-05f, 1.997457794e-05f, 1.999737865e-05f, 2.002014232e-05f, 2.004286892e-05f, 2.006555841e-05f, 2.008821075e-05f, 2.011082592e-05f, 2.013340387e-05f, 2.015594457e-05f,
-2.017844798e-05f, 2.020091407e-05f, 2.022334281e-05f, 2.024573416e-05f, 2.026808808e-05f, 2.029040455e-05f, 2.031268352e-05f, 2.033492496e-05f, 2.035712884e-05f, 2.037929512e-05f,
-2.040142376e-05f, 2.042351475e-05f, 2.044556803e-05f, 2.046758357e-05f, 2.048956135e-05f, 2.051150132e-05f, 2.053340346e-05f, 2.055526773e-05f, 2.057709409e-05f, 2.059888251e-05f,
-2.062063297e-05f, 2.064234541e-05f, 2.066401982e-05f, 2.068565615e-05f, 2.070725438e-05f, 2.072881447e-05f, 2.075033639e-05f, 2.077182010e-05f, 2.079326557e-05f, 2.081467277e-05f,
-2.083604167e-05f, 2.085737222e-05f, 2.087866441e-05f, 2.089991819e-05f, 2.092113354e-05f, 2.094231042e-05f, 2.096344879e-05f, 2.098454863e-05f, 2.100560991e-05f, 2.102663259e-05f,
-2.104761663e-05f, 2.106856202e-05f, 2.108946871e-05f, 2.111033667e-05f, 2.113116587e-05f, 2.115195628e-05f, 2.117270786e-05f, 2.119342059e-05f, 2.121409444e-05f, 2.123472937e-05f,
-2.125532534e-05f, 2.127588234e-05f, 2.129640032e-05f, 2.131687926e-05f, 2.133731912e-05f, 2.135771988e-05f, 2.137808150e-05f, 2.139840395e-05f, 2.141868719e-05f, 2.143893121e-05f,
-2.145913597e-05f, 2.147930143e-05f, 2.149942757e-05f, 2.151951436e-05f, 2.153956176e-05f, 2.155956975e-05f, 2.157953829e-05f, 2.159946736e-05f, 2.161935692e-05f, 2.163920694e-05f,
-2.165901740e-05f, 2.167878826e-05f, 2.169851949e-05f, 2.171821107e-05f, 2.173786296e-05f, 2.175747513e-05f, 2.177704756e-05f, 2.179658022e-05f, 2.181607306e-05f, 2.183552608e-05f,
-2.185493923e-05f, 2.187431248e-05f, 2.189364581e-05f, 2.191293920e-05f, 2.193219260e-05f, 2.195140599e-05f, 2.197057934e-05f, 2.198971262e-05f, 2.200880580e-05f, 2.202785886e-05f,
-2.204687177e-05f, 2.206584449e-05f, 2.208477700e-05f, 2.210366927e-05f, 2.212252128e-05f, 2.214133298e-05f, 2.216010436e-05f, 2.217883539e-05f, 2.219752603e-05f, 2.221617627e-05f,
-2.223478607e-05f, 2.225335540e-05f, 2.227188424e-05f, 2.229037256e-05f, 2.230882033e-05f, 2.232722752e-05f, 2.234559411e-05f, 2.236392007e-05f, 2.238220537e-05f, 2.240044999e-05f,
-2.241865389e-05f, 2.243681705e-05f, 2.245493944e-05f, 2.247302104e-05f, 2.249106181e-05f, 2.250906174e-05f, 2.252702079e-05f, 2.254493895e-05f, 2.256281617e-05f, 2.258065243e-05f,
-2.259844772e-05f, 2.261620200e-05f, 2.263391524e-05f, 2.265158742e-05f, 2.266921852e-05f, 2.268680850e-05f, 2.270435734e-05f, 2.272186502e-05f, 2.273933150e-05f, 2.275675677e-05f,
-2.277414080e-05f, 2.279148356e-05f, 2.280878502e-05f, 2.282604516e-05f, 2.284326396e-05f, 2.286044139e-05f, 2.287757742e-05f, 2.289467204e-05f, 2.291172520e-05f, 2.292873689e-05f,
-2.294570709e-05f, 2.296263577e-05f, 2.297952290e-05f, 2.299636846e-05f, 2.301317242e-05f, 2.302993476e-05f, 2.304665546e-05f, 2.306333449e-05f, 2.307997182e-05f, 2.309656744e-05f,
-2.311312131e-05f, 2.312963342e-05f, 2.314610373e-05f, 2.316253223e-05f, 2.317891890e-05f, 2.319526369e-05f, 2.321156661e-05f, 2.322782761e-05f, 2.324404668e-05f, 2.326022378e-05f,
-2.327635891e-05f, 2.329245204e-05f, 2.330850313e-05f, 2.332451218e-05f, 2.334047915e-05f, 2.335640402e-05f, 2.337228677e-05f, 2.338812738e-05f, 2.340392582e-05f, 2.341968207e-05f,
-2.343539610e-05f, 2.345106791e-05f, 2.346669745e-05f, 2.348228472e-05f, 2.349782968e-05f, 2.351333232e-05f, 2.352879260e-05f, 2.354421052e-05f, 2.355958605e-05f, 2.357491917e-05f,
-2.359020984e-05f, 2.360545806e-05f, 2.362066380e-05f, 2.363582704e-05f, 2.365094775e-05f, 2.366602592e-05f, 2.368106153e-05f, 2.369605454e-05f, 2.371100495e-05f, 2.372591272e-05f,
-2.374077784e-05f, 2.375560029e-05f, 2.377038005e-05f, 2.378511709e-05f, 2.379981139e-05f, 2.381446294e-05f, 2.382907171e-05f, 2.384363767e-05f, 2.385816082e-05f, 2.387264113e-05f,
-2.388707858e-05f, 2.390147315e-05f, 2.391582482e-05f, 2.393013356e-05f, 2.394439937e-05f, 2.395862221e-05f, 2.397280207e-05f, 2.398693893e-05f, 2.400103276e-05f, 2.401508356e-05f,
-2.402909129e-05f, 2.404305595e-05f, 2.405697750e-05f, 2.407085593e-05f, 2.408469122e-05f, 2.409848336e-05f, 2.411223231e-05f, 2.412593807e-05f, 2.413960061e-05f, 2.415321992e-05f,
-2.416679597e-05f, 2.418032875e-05f, 2.419381824e-05f, 2.420726442e-05f, 2.422066726e-05f, 2.423402676e-05f, 2.424734290e-05f, 2.426061564e-05f, 2.427384499e-05f, 2.428703091e-05f,
-2.430017339e-05f, 2.431327242e-05f, 2.432632797e-05f, 2.433934002e-05f, 2.435230857e-05f, 2.436523358e-05f, 2.437811505e-05f, 2.439095295e-05f, 2.440374727e-05f, 2.441649799e-05f,
-2.442920509e-05f, 2.444186856e-05f, 2.445448837e-05f, 2.446706452e-05f, 2.447959698e-05f, 2.449208573e-05f, 2.450453077e-05f, 2.451693207e-05f, 2.452928961e-05f, 2.454160339e-05f,
-2.455387337e-05f, 2.456609956e-05f, 2.457828192e-05f, 2.459042044e-05f, 2.460251511e-05f, 2.461456592e-05f, 2.462657283e-05f, 2.463853585e-05f, 2.465045495e-05f, 2.466233011e-05f,
-2.467416132e-05f, 2.468594857e-05f, 2.469769184e-05f, 2.470939111e-05f, 2.472104637e-05f, 2.473265760e-05f, 2.474422479e-05f, 2.475574792e-05f, 2.476722697e-05f, 2.477866194e-05f,
-2.479005280e-05f, 2.480139954e-05f, 2.481270215e-05f, 2.482396062e-05f, 2.483517491e-05f, 2.484634503e-05f, 2.485747096e-05f, 2.486855268e-05f, 2.487959017e-05f, 2.489058344e-05f,
-2.490153245e-05f, 2.491243719e-05f, 2.492329766e-05f, 2.493411383e-05f, 2.494488570e-05f, 2.495561324e-05f, 2.496629645e-05f, 2.497693532e-05f, 2.498752982e-05f, 2.499807994e-05f,
-2.500858567e-05f, 2.501904701e-05f, 2.502946392e-05f, 2.503983641e-05f, 2.505016445e-05f, 2.506044804e-05f, 2.507068716e-05f, 2.508088180e-05f, 2.509103194e-05f, 2.510113757e-05f,
-2.511119869e-05f, 2.512121527e-05f, 2.513118731e-05f, 2.514111479e-05f, 2.515099769e-05f, 2.516083602e-05f, 2.517062975e-05f, 2.518037887e-05f, 2.519008337e-05f, 2.519974325e-05f,
-2.520935847e-05f, 2.521892905e-05f, 2.522845495e-05f, 2.523793618e-05f, 2.524737272e-05f, 2.525676455e-05f, 2.526611167e-05f, 2.527541407e-05f, 2.528467173e-05f, 2.529388464e-05f,
-2.530305280e-05f, 2.531217618e-05f, 2.532125478e-05f, 2.533028860e-05f, 2.533927761e-05f, 2.534822180e-05f, 2.535712117e-05f, 2.536597571e-05f, 2.537478540e-05f, 2.538355024e-05f,
-2.539227021e-05f, 2.540094531e-05f, 2.540957552e-05f, 2.541816083e-05f, 2.542670123e-05f, 2.543519672e-05f, 2.544364728e-05f, 2.545205291e-05f, 2.546041358e-05f, 2.546872931e-05f,
-2.547700006e-05f, 2.548522585e-05f, 2.549340664e-05f, 2.550154245e-05f, 2.550963325e-05f, 2.551767904e-05f, 2.552567981e-05f, 2.553363554e-05f, 2.554154624e-05f, 2.554941189e-05f,
-2.555723248e-05f, 2.556500801e-05f, 2.557273846e-05f, 2.558042383e-05f, 2.558806411e-05f, 2.559565929e-05f, 2.560320936e-05f, 2.561071431e-05f, 2.561817414e-05f, 2.562558883e-05f,
-2.563295839e-05f, 2.564028279e-05f, 2.564756204e-05f, 2.565479613e-05f, 2.566198504e-05f, 2.566912878e-05f, 2.567622732e-05f, 2.568328067e-05f, 2.569028882e-05f, 2.569725177e-05f,
-2.570416949e-05f, 2.571104199e-05f, 2.571786926e-05f, 2.572465129e-05f, 2.573138808e-05f, 2.573807961e-05f, 2.574472589e-05f, 2.575132690e-05f, 2.575788265e-05f, 2.576439311e-05f,
-2.577085829e-05f, 2.577727818e-05f, 2.578365277e-05f, 2.578998205e-05f, 2.579626603e-05f, 2.580250470e-05f, 2.580869804e-05f, 2.581484605e-05f, 2.582094873e-05f, 2.582700608e-05f,
-2.583301807e-05f, 2.583898472e-05f, 2.584490602e-05f, 2.585078195e-05f, 2.585661251e-05f, 2.586239771e-05f, 2.586813753e-05f, 2.587383196e-05f, 2.587948101e-05f, 2.588508467e-05f,
-2.589064293e-05f, 2.589615579e-05f, 2.590162325e-05f, 2.590704529e-05f, 2.591242192e-05f, 2.591775313e-05f, 2.592303892e-05f, 2.592827927e-05f, 2.593347420e-05f, 2.593862369e-05f,
-2.594372774e-05f, 2.594878634e-05f, 2.595379950e-05f, 2.595876720e-05f, 2.596368945e-05f, 2.596856623e-05f, 2.597339756e-05f, 2.597818341e-05f, 2.598292380e-05f, 2.598761872e-05f,
-2.599226815e-05f, 2.599687211e-05f, 2.600143058e-05f, 2.600594357e-05f, 2.601041107e-05f, 2.601483308e-05f, 2.601920959e-05f, 2.602354060e-05f, 2.602782612e-05f, 2.603206613e-05f,
-2.603626064e-05f, 2.604040964e-05f, 2.604451313e-05f, 2.604857110e-05f, 2.605258357e-05f, 2.605655051e-05f, 2.606047194e-05f, 2.606434785e-05f, 2.606817824e-05f, 2.607196310e-05f,
-2.607570244e-05f, 2.607939625e-05f, 2.608304453e-05f, 2.608664728e-05f, 2.609020450e-05f, 2.609371619e-05f, 2.609718234e-05f, 2.610060296e-05f, 2.610397804e-05f, 2.610730759e-05f,
-2.611059160e-05f, 2.611383006e-05f, 2.611702299e-05f, 2.612017038e-05f, 2.612327223e-05f, 2.612632854e-05f, 2.612933930e-05f, 2.613230452e-05f, 2.613522421e-05f, 2.613809834e-05f,
-2.614092694e-05f, 2.614370999e-05f, 2.614644750e-05f, 2.614913947e-05f, 2.615178590e-05f, 2.615438678e-05f, 2.615694212e-05f, 2.615945193e-05f, 2.616191619e-05f, 2.616433491e-05f,
-2.616670809e-05f, 2.616903573e-05f, 2.617131784e-05f, 2.617355441e-05f, 2.617574544e-05f, 2.617789094e-05f, 2.617999090e-05f, 2.618204533e-05f, 2.618405424e-05f, 2.618601761e-05f,
-2.618793545e-05f, 2.618980777e-05f, 2.619163456e-05f, 2.619341583e-05f, 2.619515158e-05f, 2.619684181e-05f, 2.619848652e-05f, 2.620008571e-05f, 2.620163939e-05f, 2.620314756e-05f,
-2.620461023e-05f, 2.620602738e-05f, 2.620739903e-05f, 2.620872518e-05f, 2.621000583e-05f, 2.621124098e-05f, 2.621243064e-05f, 2.621357481e-05f, 2.621467349e-05f, 2.621572668e-05f,
-2.621673439e-05f, 2.621769662e-05f, 2.621861338e-05f, 2.621948467e-05f, 2.622031048e-05f, 2.622109083e-05f, 2.622182572e-05f, 2.622251515e-05f, 2.622315912e-05f, 2.622375764e-05f,
-2.622431072e-05f, 2.622481835e-05f, 2.622528054e-05f, 2.622569730e-05f, 2.622606863e-05f, 2.622639453e-05f, 2.622667500e-05f, 2.622691006e-05f, 2.622709970e-05f, 2.622724394e-05f,
-2.622734276e-05f, 2.622739619e-05f, 2.622740423e-05f, 2.622736687e-05f, 2.622728413e-05f, 2.622715600e-05f, 2.622698251e-05f, 2.622676364e-05f, 2.622649940e-05f, 2.622618981e-05f,
-2.622583486e-05f, 2.622543456e-05f, 2.622498892e-05f, 2.622449794e-05f, 2.622396163e-05f, 2.622338000e-05f, 2.622275304e-05f, 2.622208077e-05f, 2.622136319e-05f, 2.622060031e-05f,
-2.621979213e-05f, 2.621893866e-05f, 2.621803991e-05f, 2.621709588e-05f, 2.621610658e-05f, 2.621507201e-05f, 2.621399219e-05f, 2.621286712e-05f, 2.621169680e-05f, 2.621048125e-05f,
-2.620922046e-05f, 2.620791445e-05f, 2.620656323e-05f, 2.620516680e-05f, 2.620372516e-05f, 2.620223833e-05f, 2.620070632e-05f, 2.619912912e-05f, 2.619750676e-05f, 2.619583923e-05f,
-2.619412654e-05f, 2.619236870e-05f, 2.619056572e-05f, 2.618871761e-05f, 2.618682438e-05f, 2.618488603e-05f, 2.618290257e-05f, 2.618087401e-05f, 2.617880036e-05f, 2.617668162e-05f,
-2.617451781e-05f, 2.617230893e-05f, 2.617005500e-05f, 2.616775601e-05f, 2.616541199e-05f, 2.616302293e-05f, 2.616058885e-05f, 2.615810976e-05f, 2.615558567e-05f, 2.615301657e-05f,
-2.615040250e-05f, 2.614774344e-05f, 2.614503942e-05f, 2.614229045e-05f, 2.613949652e-05f, 2.613665766e-05f, 2.613377386e-05f, 2.613084515e-05f, 2.612787153e-05f, 2.612485301e-05f,
-2.612178960e-05f, 2.611868132e-05f, 2.611552816e-05f, 2.611233015e-05f, 2.610908728e-05f, 2.610579958e-05f, 2.610246706e-05f, 2.609908971e-05f, 2.609566756e-05f, 2.609220062e-05f,
-2.608868889e-05f, 2.608513239e-05f, 2.608153112e-05f, 2.607788510e-05f, 2.607419435e-05f, 2.607045886e-05f, 2.606667866e-05f, 2.606285375e-05f, 2.605898414e-05f, 2.605506985e-05f,
-2.605111089e-05f, 2.604710726e-05f, 2.604305899e-05f, 2.603896608e-05f, 2.603482855e-05f, 2.603064640e-05f, 2.602641966e-05f, 2.602214832e-05f, 2.601783240e-05f, 2.601347193e-05f,
-2.600906689e-05f, 2.600461732e-05f, 2.600012323e-05f, 2.599558461e-05f, 2.599100150e-05f, 2.598637389e-05f, 2.598170181e-05f, 2.597698526e-05f, 2.597222426e-05f, 2.596741883e-05f,
-2.596256897e-05f, 2.595767470e-05f, 2.595273603e-05f, 2.594775297e-05f, 2.594272554e-05f, 2.593765376e-05f, 2.593253762e-05f, 2.592737716e-05f, 2.592217238e-05f, 2.591692330e-05f,
-2.591162992e-05f, 2.590629227e-05f, 2.590091036e-05f, 2.589548420e-05f, 2.589001381e-05f, 2.588449919e-05f, 2.587894037e-05f, 2.587333736e-05f, 2.586769018e-05f, 2.586199883e-05f,
-2.585626333e-05f, 2.585048370e-05f, 2.584465995e-05f, 2.583879210e-05f, 2.583288016e-05f, 2.582692415e-05f, 2.582092408e-05f, 2.581487996e-05f, 2.580879182e-05f, 2.580265966e-05f,
-2.579648351e-05f, 2.579026338e-05f, 2.578399927e-05f, 2.577769122e-05f, 2.577133923e-05f, 2.576494332e-05f, 2.575850351e-05f, 2.575201981e-05f, 2.574549224e-05f, 2.573892081e-05f,
-2.573230554e-05f, 2.572564645e-05f, 2.571894354e-05f, 2.571219685e-05f, 2.570540638e-05f, 2.569857216e-05f, 2.569169419e-05f, 2.568477250e-05f, 2.567780709e-05f, 2.567079800e-05f,
-2.566374523e-05f, 2.565664880e-05f, 2.564950873e-05f, 2.564232504e-05f, 2.563509773e-05f, 2.562782684e-05f, 2.562051238e-05f, 2.561315436e-05f, 2.560575280e-05f, 2.559830772e-05f,
-2.559081914e-05f, 2.558328707e-05f, 2.557571154e-05f, 2.556809255e-05f, 2.556043014e-05f, 2.555272431e-05f, 2.554497508e-05f, 2.553718247e-05f, 2.552934651e-05f, 2.552146720e-05f,
-2.551354457e-05f, 2.550557863e-05f, 2.549756941e-05f, 2.548951692e-05f, 2.548142118e-05f, 2.547328221e-05f, 2.546510003e-05f, 2.545687465e-05f, 2.544860610e-05f, 2.544029439e-05f,
-2.543193955e-05f, 2.542354159e-05f, 2.541510053e-05f, 2.540661639e-05f, 2.539808919e-05f, 2.538951896e-05f, 2.538090570e-05f, 2.537224944e-05f, 2.536355019e-05f, 2.535480799e-05f,
-2.534602284e-05f, 2.533719477e-05f, 2.532832380e-05f, 2.531940994e-05f, 2.531045322e-05f, 2.530145366e-05f, 2.529241128e-05f, 2.528332610e-05f, 2.527419813e-05f, 2.526502740e-05f,
-2.525581393e-05f, 2.524655774e-05f, 2.523725885e-05f, 2.522791728e-05f, 2.521853305e-05f, 2.520910619e-05f, 2.519963670e-05f, 2.519012463e-05f, 2.518056997e-05f, 2.517097277e-05f,
-2.516133303e-05f, 2.515165078e-05f, 2.514192604e-05f, 2.513215883e-05f, 2.512234918e-05f, 2.511249709e-05f, 2.510260261e-05f, 2.509266574e-05f, 2.508268652e-05f, 2.507266495e-05f,
-2.506260107e-05f, 2.505249489e-05f, 2.504234644e-05f, 2.503215574e-05f, 2.502192281e-05f, 2.501164767e-05f, 2.500133035e-05f, 2.499097087e-05f, 2.498056925e-05f, 2.497012551e-05f,
-2.495963968e-05f, 2.494911178e-05f, 2.493854183e-05f, 2.492792985e-05f, 2.491727587e-05f, 2.490657992e-05f, 2.489584200e-05f, 2.488506215e-05f, 2.487424039e-05f, 2.486337674e-05f,
-2.485247123e-05f, 2.484152388e-05f, 2.483053471e-05f, 2.481950374e-05f, 2.480843101e-05f, 2.479731653e-05f, 2.478616033e-05f, 2.477496243e-05f, 2.476372285e-05f, 2.475244162e-05f,
-2.474111876e-05f, 2.472975431e-05f, 2.471834827e-05f, 2.470690068e-05f, 2.469541155e-05f, 2.468388092e-05f, 2.467230881e-05f, 2.466069524e-05f, 2.464904024e-05f, 2.463734383e-05f,
-2.462560604e-05f, 2.461382689e-05f, 2.460200640e-05f, 2.459014461e-05f, 2.457824153e-05f, 2.456629720e-05f, 2.455431162e-05f, 2.454228485e-05f, 2.453021688e-05f, 2.451810776e-05f,
-2.450595751e-05f, 2.449376615e-05f, 2.448153371e-05f, 2.446926021e-05f, 2.445694568e-05f, 2.444459014e-05f, 2.443219363e-05f, 2.441975616e-05f, 2.440727777e-05f, 2.439475848e-05f,
-2.438219831e-05f, 2.436959729e-05f, 2.435695545e-05f, 2.434427281e-05f, 2.433154940e-05f, 2.431878525e-05f, 2.430598038e-05f, 2.429313482e-05f, 2.428024860e-05f, 2.426732174e-05f,
-2.425435426e-05f, 2.424134621e-05f, 2.422829759e-05f, 2.421520845e-05f, 2.420207881e-05f, 2.418890868e-05f, 2.417569811e-05f, 2.416244712e-05f, 2.414915573e-05f, 2.413582398e-05f,
-2.412245188e-05f, 2.410903948e-05f, 2.409558678e-05f, 2.408209384e-05f, 2.406856066e-05f, 2.405498728e-05f, 2.404137373e-05f, 2.402772003e-05f, 2.401402621e-05f, 2.400029231e-05f,
-2.398651834e-05f, 2.397270434e-05f, 2.395885033e-05f, 2.394495635e-05f, 2.393102241e-05f, 2.391704856e-05f, 2.390303481e-05f, 2.388898120e-05f, 2.387488776e-05f, 2.386075451e-05f,
-2.384658148e-05f, 2.383236871e-05f, 2.381811621e-05f, 2.380382403e-05f, 2.378949218e-05f, 2.377512070e-05f, 2.376070961e-05f, 2.374625895e-05f, 2.373176875e-05f, 2.371723903e-05f,
-2.370266982e-05f, 2.368806116e-05f, 2.367341307e-05f, 2.365872558e-05f, 2.364399873e-05f, 2.362923253e-05f, 2.361442703e-05f, 2.359958225e-05f, 2.358469822e-05f, 2.356977497e-05f,
-2.355481253e-05f, 2.353981094e-05f, 2.352477021e-05f, 2.350969039e-05f, 2.349457150e-05f, 2.347941357e-05f, 2.346421663e-05f, 2.344898072e-05f, 2.343370586e-05f, 2.341839209e-05f,
-2.340303943e-05f, 2.338764791e-05f, 2.337221758e-05f, 2.335674845e-05f, 2.334124056e-05f, 2.332569394e-05f, 2.331010862e-05f, 2.329448463e-05f, 2.327882201e-05f, 2.326312078e-05f,
-2.324738098e-05f, 2.323160263e-05f, 2.321578577e-05f, 2.319993043e-05f, 2.318403664e-05f, 2.316810444e-05f, 2.315213385e-05f, 2.313612491e-05f, 2.312007765e-05f, 2.310399209e-05f,
-2.308786828e-05f, 2.307170625e-05f, 2.305550602e-05f, 2.303926763e-05f, 2.302299111e-05f, 2.300667649e-05f, 2.299032381e-05f, 2.297393309e-05f, 2.295750438e-05f, 2.294103770e-05f,
-2.292453309e-05f, 2.290799057e-05f, 2.289141019e-05f, 2.287479196e-05f, 2.285813594e-05f, 2.284144214e-05f, 2.282471061e-05f, 2.280794137e-05f, 2.279113446e-05f, 2.277428991e-05f,
-2.275740776e-05f, 2.274048804e-05f, 2.272353077e-05f, 2.270653600e-05f, 2.268950376e-05f, 2.267243408e-05f, 2.265532700e-05f, 2.263818254e-05f, 2.262100075e-05f, 2.260378166e-05f,
-2.258652529e-05f, 2.256923169e-05f, 2.255190089e-05f, 2.253453292e-05f, 2.251712781e-05f, 2.249968561e-05f, 2.248220633e-05f, 2.246469003e-05f, 2.244713673e-05f, 2.242954647e-05f,
-2.241191928e-05f, 2.239425520e-05f, 2.237655426e-05f, 2.235881649e-05f, 2.234104193e-05f, 2.232323062e-05f, 2.230538259e-05f, 2.228749787e-05f, 2.226957650e-05f, 2.225161852e-05f,
-2.223362395e-05f, 2.221559284e-05f, 2.219752522e-05f, 2.217942112e-05f, 2.216128058e-05f, 2.214310364e-05f, 2.212489033e-05f, 2.210664069e-05f, 2.208835475e-05f, 2.207003254e-05f,
-2.205167411e-05f, 2.203327948e-05f, 2.201484870e-05f, 2.199638180e-05f, 2.197787882e-05f, 2.195933979e-05f, 2.194076474e-05f, 2.192215372e-05f, 2.190350676e-05f, 2.188482390e-05f,
-2.186610517e-05f, 2.184735060e-05f, 2.182856024e-05f, 2.180973413e-05f, 2.179087229e-05f, 2.177197476e-05f, 2.175304159e-05f, 2.173407280e-05f, 2.171506844e-05f, 2.169602853e-05f,
-2.167695313e-05f, 2.165784226e-05f, 2.163869596e-05f, 2.161951426e-05f, 2.160029722e-05f, 2.158104485e-05f, 2.156175721e-05f, 2.154243432e-05f, 2.152307623e-05f, 2.150368296e-05f,
-2.148425457e-05f, 2.146479108e-05f, 2.144529254e-05f, 2.142575897e-05f, 2.140619043e-05f, 2.138658694e-05f, 2.136694854e-05f, 2.134727528e-05f, 2.132756718e-05f, 2.130782429e-05f,
-2.128804665e-05f, 2.126823429e-05f, 2.124838725e-05f, 2.122850557e-05f, 2.120858929e-05f, 2.118863845e-05f, 2.116865307e-05f, 2.114863321e-05f, 2.112857891e-05f, 2.110849019e-05f,
-2.108836709e-05f, 2.106820967e-05f, 2.104801794e-05f, 2.102779196e-05f, 2.100753177e-05f, 2.098723739e-05f, 2.096690887e-05f, 2.094654626e-05f, 2.092614958e-05f, 2.090571887e-05f,
-2.088525418e-05f, 2.086475555e-05f, 2.084422300e-05f, 2.082365660e-05f, 2.080305636e-05f, 2.078242233e-05f, 2.076175456e-05f, 2.074105307e-05f, 2.072031792e-05f, 2.069954913e-05f,
-2.067874675e-05f, 2.065791082e-05f, 2.063704138e-05f, 2.061613847e-05f, 2.059520212e-05f, 2.057423238e-05f, 2.055322929e-05f, 2.053219289e-05f, 2.051112321e-05f, 2.049002030e-05f,
-2.046888419e-05f, 2.044771494e-05f, 2.042651257e-05f, 2.040527713e-05f, 2.038400866e-05f, 2.036270719e-05f, 2.034137278e-05f, 2.032000546e-05f, 2.029860526e-05f, 2.027717224e-05f,
-2.025570642e-05f, 2.023420786e-05f, 2.021267660e-05f, 2.019111266e-05f, 2.016951610e-05f, 2.014788696e-05f, 2.012622527e-05f, 2.010453108e-05f, 2.008280442e-05f, 2.006104535e-05f,
-2.003925390e-05f, 2.001743011e-05f, 1.999557402e-05f, 1.997368568e-05f, 1.995176512e-05f, 1.992981239e-05f, 1.990782752e-05f, 1.988581057e-05f, 1.986376157e-05f, 1.984168057e-05f,
-1.981956759e-05f, 1.979742270e-05f, 1.977524592e-05f, 1.975303730e-05f, 1.973079689e-05f, 1.970852472e-05f, 1.968622084e-05f, 1.966388528e-05f, 1.964151809e-05f, 1.961911932e-05f,
-1.959668900e-05f, 1.957422718e-05f, 1.955173390e-05f, 1.952920919e-05f, 1.950665312e-05f, 1.948406570e-05f, 1.946144700e-05f, 1.943879705e-05f, 1.941611589e-05f, 1.939340357e-05f,
-1.937066013e-05f, 1.934788560e-05f, 1.932508005e-05f, 1.930224350e-05f, 1.927937600e-05f, 1.925647759e-05f, 1.923354832e-05f, 1.921058823e-05f, 1.918759736e-05f, 1.916457576e-05f,
-1.914152347e-05f, 1.911844052e-05f, 1.909532697e-05f, 1.907218286e-05f, 1.904900824e-05f, 1.902580313e-05f, 1.900256760e-05f, 1.897930168e-05f, 1.895600541e-05f, 1.893267884e-05f,
-1.890932202e-05f, 1.888593498e-05f, 1.886251777e-05f, 1.883907043e-05f, 1.881559302e-05f, 1.879208556e-05f, 1.876854811e-05f, 1.874498071e-05f, 1.872138341e-05f, 1.869775624e-05f,
-1.867409926e-05f, 1.865041250e-05f, 1.862669601e-05f, 1.860294983e-05f, 1.857917401e-05f, 1.855536860e-05f, 1.853153364e-05f, 1.850766916e-05f, 1.848377522e-05f, 1.845985187e-05f,
-1.843589914e-05f, 1.841191708e-05f, 1.838790573e-05f, 1.836386515e-05f, 1.833979537e-05f, 1.831569644e-05f, 1.829156840e-05f, 1.826741130e-05f, 1.824322519e-05f, 1.821901010e-05f,
-1.819476609e-05f, 1.817049320e-05f, 1.814619147e-05f, 1.812186095e-05f, 1.809750169e-05f, 1.807311372e-05f, 1.804869710e-05f, 1.802425187e-05f, 1.799977808e-05f, 1.797527577e-05f,
-1.795074499e-05f, 1.792618578e-05f, 1.790159818e-05f, 1.787698225e-05f, 1.785233803e-05f, 1.782766557e-05f, 1.780296490e-05f, 1.777823609e-05f, 1.775347916e-05f, 1.772869418e-05f,
-1.770388117e-05f, 1.767904020e-05f, 1.765417130e-05f, 1.762927453e-05f, 1.760434993e-05f, 1.757939754e-05f, 1.755441741e-05f, 1.752940958e-05f, 1.750437411e-05f, 1.747931104e-05f,
-1.745422042e-05f, 1.742910229e-05f, 1.740395670e-05f, 1.737878369e-05f, 1.735358332e-05f, 1.732835562e-05f, 1.730310065e-05f, 1.727781845e-05f, 1.725250907e-05f, 1.722717255e-05f,
-1.720180895e-05f, 1.717641830e-05f, 1.715100066e-05f, 1.712555608e-05f, 1.710008459e-05f, 1.707458625e-05f, 1.704906110e-05f, 1.702350919e-05f, 1.699793057e-05f, 1.697232529e-05f,
-1.694669339e-05f, 1.692103492e-05f, 1.689534992e-05f, 1.686963845e-05f, 1.684390055e-05f, 1.681813627e-05f, 1.679234565e-05f, 1.676652875e-05f, 1.674068561e-05f, 1.671481628e-05f,
-1.668892081e-05f, 1.666299924e-05f, 1.663705162e-05f, 1.661107800e-05f, 1.658507843e-05f, 1.655905295e-05f, 1.653300162e-05f, 1.650692447e-05f, 1.648082157e-05f, 1.645469295e-05f,
-1.642853867e-05f, 1.640235877e-05f, 1.637615330e-05f, 1.634992231e-05f, 1.632366585e-05f, 1.629738396e-05f, 1.627107670e-05f, 1.624474410e-05f, 1.621838623e-05f, 1.619200313e-05f,
-1.616559484e-05f, 1.613916142e-05f, 1.611270291e-05f, 1.608621937e-05f, 1.605971084e-05f, 1.603317736e-05f, 1.600661900e-05f, 1.598003579e-05f, 1.595342778e-05f, 1.592679503e-05f,
-1.590013759e-05f, 1.587345549e-05f, 1.584674880e-05f, 1.582001756e-05f, 1.579326181e-05f, 1.576648161e-05f, 1.573967701e-05f, 1.571284805e-05f, 1.568599479e-05f, 1.565911728e-05f,
-1.563221555e-05f, 1.560528967e-05f, 1.557833968e-05f, 1.555136562e-05f, 1.552436756e-05f, 1.549734554e-05f, 1.547029961e-05f, 1.544322981e-05f, 1.541613620e-05f, 1.538901883e-05f,
-1.536187775e-05f, 1.533471300e-05f, 1.530752463e-05f, 1.528031271e-05f, 1.525307726e-05f, 1.522581835e-05f, 1.519853603e-05f, 1.517123033e-05f, 1.514390133e-05f, 1.511654905e-05f,
-1.508917356e-05f, 1.506177490e-05f, 1.503435313e-05f, 1.500690829e-05f, 1.497944043e-05f, 1.495194961e-05f, 1.492443587e-05f, 1.489689926e-05f, 1.486933983e-05f, 1.484175764e-05f,
-1.481415274e-05f, 1.478652516e-05f, 1.475887498e-05f, 1.473120222e-05f, 1.470350695e-05f, 1.467578922e-05f, 1.464804908e-05f, 1.462028657e-05f, 1.459250174e-05f, 1.456469466e-05f,
-1.453686536e-05f, 1.450901390e-05f, 1.448114033e-05f, 1.445324470e-05f, 1.442532706e-05f, 1.439738746e-05f, 1.436942595e-05f, 1.434144258e-05f, 1.431343741e-05f, 1.428541048e-05f,
-1.425736185e-05f, 1.422929157e-05f, 1.420119968e-05f, 1.417308624e-05f, 1.414495129e-05f, 1.411679490e-05f, 1.408861711e-05f, 1.406041797e-05f, 1.403219754e-05f, 1.400395585e-05f,
-1.397569298e-05f, 1.394740896e-05f, 1.391910385e-05f, 1.389077770e-05f, 1.386243055e-05f, 1.383406248e-05f, 1.380567351e-05f, 1.377726371e-05f, 1.374883312e-05f, 1.372038181e-05f,
-1.369190981e-05f, 1.366341718e-05f, 1.363490398e-05f, 1.360637025e-05f, 1.357781604e-05f, 1.354924141e-05f, 1.352064641e-05f, 1.349203109e-05f, 1.346339551e-05f, 1.343473970e-05f,
-1.340606374e-05f, 1.337736766e-05f, 1.334865152e-05f, 1.331991537e-05f, 1.329115926e-05f, 1.326238325e-05f, 1.323358739e-05f, 1.320477172e-05f, 1.317593631e-05f, 1.314708120e-05f,
-1.311820645e-05f, 1.308931210e-05f, 1.306039821e-05f, 1.303146483e-05f, 1.300251202e-05f, 1.297353983e-05f, 1.294454830e-05f, 1.291553749e-05f, 1.288650746e-05f, 1.285745825e-05f,
-1.282838992e-05f, 1.279930252e-05f, 1.277019610e-05f, 1.274107072e-05f, 1.271192642e-05f, 1.268276327e-05f, 1.265358130e-05f, 1.262438059e-05f, 1.259516117e-05f, 1.256592310e-05f,
-1.253666643e-05f, 1.250739122e-05f, 1.247809751e-05f, 1.244878537e-05f, 1.241945484e-05f, 1.239010598e-05f, 1.236073883e-05f, 1.233135346e-05f, 1.230194991e-05f, 1.227252824e-05f,
-1.224308851e-05f, 1.221363075e-05f, 1.218415503e-05f, 1.215466140e-05f, 1.212514992e-05f, 1.209562062e-05f, 1.206607358e-05f, 1.203650884e-05f, 1.200692645e-05f, 1.197732648e-05f,
-1.194770896e-05f, 1.191807395e-05f, 1.188842152e-05f, 1.185875170e-05f, 1.182906456e-05f, 1.179936015e-05f, 1.176963851e-05f, 1.173989971e-05f, 1.171014380e-05f, 1.168037082e-05f,
-1.165058084e-05f, 1.162077391e-05f, 1.159095008e-05f, 1.156110940e-05f, 1.153125193e-05f, 1.150137772e-05f, 1.147148683e-05f, 1.144157930e-05f, 1.141165520e-05f, 1.138171457e-05f,
-1.135175747e-05f, 1.132178395e-05f, 1.129179407e-05f, 1.126178788e-05f, 1.123176543e-05f, 1.120172678e-05f, 1.117167198e-05f, 1.114160109e-05f, 1.111151415e-05f, 1.108141123e-05f,
-1.105129237e-05f, 1.102115763e-05f, 1.099100707e-05f, 1.096084074e-05f, 1.093065869e-05f, 1.090046097e-05f, 1.087024764e-05f, 1.084001876e-05f, 1.080977438e-05f, 1.077951455e-05f,
-1.074923932e-05f, 1.071894875e-05f, 1.068864290e-05f, 1.065832182e-05f, 1.062798556e-05f, 1.059763417e-05f, 1.056726772e-05f, 1.053688625e-05f, 1.050648982e-05f, 1.047607849e-05f,
-1.044565230e-05f, 1.041521131e-05f, 1.038475559e-05f, 1.035428517e-05f, 1.032380011e-05f, 1.029330048e-05f, 1.026278632e-05f, 1.023225769e-05f, 1.020171464e-05f, 1.017115722e-05f,
-1.014058550e-05f, 1.010999953e-05f, 1.007939935e-05f, 1.004878503e-05f, 1.001815662e-05f, 9.987514178e-06f, 9.956857751e-06f, 9.926187397e-06f, 9.895503170e-06f, 9.864805126e-06f,
-9.834093320e-06f, 9.803367805e-06f, 9.772628636e-06f, 9.741875869e-06f, 9.711109557e-06f, 9.680329756e-06f, 9.649536520e-06f, 9.618729905e-06f, 9.587909964e-06f, 9.557076753e-06f,
-9.526230326e-06f, 9.495370739e-06f, 9.464498046e-06f, 9.433612302e-06f, 9.402713562e-06f, 9.371801881e-06f, 9.340877314e-06f, 9.309939915e-06f, 9.278989740e-06f, 9.248026843e-06f,
-9.217051280e-06f, 9.186063106e-06f, 9.155062376e-06f, 9.124049144e-06f, 9.093023465e-06f, 9.061985396e-06f, 9.030934990e-06f, 8.999872303e-06f, 8.968797390e-06f, 8.937710307e-06f,
-8.906611107e-06f, 8.875499847e-06f, 8.844376582e-06f, 8.813241367e-06f, 8.782094256e-06f, 8.750935306e-06f, 8.719764571e-06f, 8.688582107e-06f, 8.657387969e-06f, 8.626182212e-06f,
-8.594964892e-06f, 8.563736063e-06f, 8.532495782e-06f, 8.501244103e-06f, 8.469981081e-06f, 8.438706773e-06f, 8.407421233e-06f, 8.376124518e-06f, 8.344816681e-06f, 8.313497779e-06f,
-8.282167868e-06f, 8.250827002e-06f, 8.219475237e-06f, 8.188112628e-06f, 8.156739231e-06f, 8.125355102e-06f, 8.093960296e-06f, 8.062554868e-06f, 8.031138874e-06f, 7.999712369e-06f,
-7.968275410e-06f, 7.936828051e-06f, 7.905370348e-06f, 7.873902357e-06f, 7.842424133e-06f, 7.810935733e-06f, 7.779437211e-06f, 7.747928623e-06f, 7.716410025e-06f, 7.684881472e-06f,
-7.653343021e-06f, 7.621794726e-06f, 7.590236644e-06f, 7.558668830e-06f, 7.527091341e-06f, 7.495504231e-06f, 7.463907556e-06f, 7.432301372e-06f, 7.400685735e-06f, 7.369060701e-06f,
-7.337426326e-06f, 7.305782664e-06f, 7.274129773e-06f, 7.242467707e-06f, 7.210796523e-06f, 7.179116276e-06f, 7.147427023e-06f, 7.115728819e-06f, 7.084021719e-06f, 7.052305781e-06f,
-7.020581059e-06f, 6.988847610e-06f, 6.957105489e-06f, 6.925354752e-06f, 6.893595456e-06f, 6.861827656e-06f, 6.830051408e-06f, 6.798266768e-06f, 6.766473792e-06f, 6.734672536e-06f,
-6.702863056e-06f, 6.671045408e-06f, 6.639219647e-06f, 6.607385831e-06f, 6.575544014e-06f, 6.543694252e-06f, 6.511836603e-06f, 6.479971121e-06f, 6.448097864e-06f, 6.416216886e-06f,
-6.384328243e-06f, 6.352431993e-06f, 6.320528191e-06f, 6.288616893e-06f, 6.256698155e-06f, 6.224772033e-06f, 6.192838583e-06f, 6.160897862e-06f, 6.128949925e-06f, 6.096994828e-06f,
-6.065032628e-06f, 6.033063381e-06f, 6.001087143e-06f, 5.969103969e-06f, 5.937113917e-06f, 5.905117042e-06f, 5.873113400e-06f, 5.841103048e-06f, 5.809086041e-06f, 5.777062436e-06f,
-5.745032290e-06f, 5.712995657e-06f, 5.680952594e-06f, 5.648903158e-06f, 5.616847405e-06f, 5.584785391e-06f, 5.552717171e-06f, 5.520642803e-06f, 5.488562342e-06f, 5.456475845e-06f,
-5.424383368e-06f, 5.392284966e-06f, 5.360180698e-06f, 5.328070617e-06f, 5.295954781e-06f, 5.263833246e-06f, 5.231706069e-06f, 5.199573305e-06f, 5.167435010e-06f, 5.135291241e-06f,
-5.103142055e-06f, 5.070987507e-06f, 5.038827653e-06f, 5.006662551e-06f, 4.974492256e-06f, 4.942316824e-06f, 4.910136311e-06f, 4.877950775e-06f, 4.845760271e-06f, 4.813564856e-06f,
-4.781364585e-06f, 4.749159516e-06f, 4.716949703e-06f, 4.684735205e-06f, 4.652516076e-06f, 4.620292374e-06f, 4.588064154e-06f, 4.555831473e-06f, 4.523594387e-06f, 4.491352952e-06f,
-4.459107225e-06f, 4.426857262e-06f, 4.394603119e-06f, 4.362344853e-06f, 4.330082520e-06f, 4.297816176e-06f, 4.265545877e-06f, 4.233271680e-06f, 4.200993641e-06f, 4.168711817e-06f,
-4.136426263e-06f, 4.104137037e-06f, 4.071844193e-06f, 4.039547789e-06f, 4.007247881e-06f, 3.974944526e-06f, 3.942637779e-06f, 3.910327696e-06f, 3.878014335e-06f, 3.845697751e-06f,
-3.813378001e-06f, 3.781055141e-06f, 3.748729228e-06f, 3.716400317e-06f, 3.684068465e-06f, 3.651733728e-06f, 3.619396163e-06f, 3.587055825e-06f, 3.554712772e-06f, 3.522367059e-06f,
-3.490018743e-06f, 3.457667880e-06f, 3.425314527e-06f, 3.392958739e-06f, 3.360600572e-06f, 3.328240084e-06f, 3.295877331e-06f, 3.263512368e-06f, 3.231145252e-06f, 3.198776040e-06f,
-3.166404787e-06f, 3.134031550e-06f, 3.101656385e-06f, 3.069279348e-06f, 3.036900496e-06f, 3.004519885e-06f, 2.972137571e-06f, 2.939753611e-06f, 2.907368060e-06f, 2.874980975e-06f,
-2.842592413e-06f, 2.810202428e-06f, 2.777811079e-06f, 2.745418420e-06f, 2.713024508e-06f, 2.680629400e-06f, 2.648233151e-06f, 2.615835818e-06f, 2.583437457e-06f, 2.551038124e-06f,
-2.518637875e-06f, 2.486236767e-06f, 2.453834856e-06f, 2.421432198e-06f, 2.389028849e-06f, 2.356624865e-06f, 2.324220303e-06f, 2.291815218e-06f, 2.259409668e-06f, 2.227003707e-06f,
-2.194597393e-06f, 2.162190781e-06f, 2.129783927e-06f, 2.097376888e-06f, 2.064969720e-06f, 2.032562478e-06f, 2.000155220e-06f, 1.967748000e-06f, 1.935340876e-06f, 1.902933903e-06f,
-1.870527138e-06f, 1.838120636e-06f, 1.805714454e-06f, 1.773308647e-06f, 1.740903272e-06f, 1.708498385e-06f, 1.676094042e-06f, 1.643690298e-06f, 1.611287211e-06f, 1.578884835e-06f,
-1.546483228e-06f, 1.514082445e-06f, 1.481682541e-06f, 1.449283574e-06f, 1.416885599e-06f, 1.384488671e-06f, 1.352092848e-06f, 1.319698185e-06f, 1.287304738e-06f, 1.254912562e-06f,
-1.222521715e-06f, 1.190132251e-06f, 1.157744227e-06f, 1.125357699e-06f, 1.092972722e-06f, 1.060589353e-06f, 1.028207647e-06f, 9.958276609e-07f, 9.634494495e-07f, 9.310730692e-07f,
-8.986985758e-07f, 8.663260251e-07f, 8.339554730e-07f, 8.015869754e-07f, 7.692205880e-07f, 7.368563666e-07f, 7.044943672e-07f, 6.721346454e-07f, 6.397772570e-07f, 6.074222579e-07f,
-5.750697037e-07f, 5.427196503e-07f, 5.103721534e-07f, 4.780272688e-07f, 4.456850520e-07f, 4.133455589e-07f, 3.810088452e-07f, 3.486749665e-07f, 3.163439786e-07f, 2.840159371e-07f,
-2.516908976e-07f, 2.193689158e-07f, 1.870500474e-07f, 1.547343480e-07f, 1.224218731e-07f, 9.011267838e-08f, 5.780681945e-08f, 2.550435187e-08f, -6.794668805e-09f, -3.909018701e-08f,
--7.138214721e-08f, -1.036704939e-07f, -1.359551715e-07f, -1.682361245e-07f, -2.005132975e-07f, -2.327866350e-07f, -2.650560814e-07f, -2.973215814e-07f, -3.295830795e-07f, -3.618405203e-07f,
--3.940938484e-07f, -4.263430083e-07f, -4.585879446e-07f, -4.908286021e-07f, -5.230649253e-07f, -5.552968589e-07f, -5.875243475e-07f, -6.197473358e-07f, -6.519657685e-07f, -6.841795904e-07f,
--7.163887461e-07f, -7.485931804e-07f, -7.807928380e-07f, -8.129876637e-07f, -8.451776022e-07f, -8.773625984e-07f, -9.095425970e-07f, -9.417175429e-07f, -9.738873809e-07f, -1.006052056e-06f,
--1.038211513e-06f, -1.070365696e-06f, -1.102514551e-06f, -1.134658023e-06f, -1.166796056e-06f, -1.198928595e-06f, -1.231055586e-06f, -1.263176973e-06f, -1.295292701e-06f, -1.327402716e-06f,
--1.359506962e-06f, -1.391605384e-06f, -1.423697928e-06f, -1.455784538e-06f, -1.487865160e-06f, -1.519939738e-06f, -1.552008218e-06f, -1.584070545e-06f, -1.616126664e-06f, -1.648176520e-06f,
--1.680220059e-06f, -1.712257225e-06f, -1.744287964e-06f, -1.776312221e-06f, -1.808329941e-06f, -1.840341070e-06f, -1.872345552e-06f, -1.904343334e-06f, -1.936334360e-06f, -1.968318576e-06f,
--2.000295927e-06f, -2.032266359e-06f, -2.064229817e-06f, -2.096186245e-06f, -2.128135591e-06f, -2.160077799e-06f, -2.192012814e-06f, -2.223940583e-06f, -2.255861050e-06f, -2.287774162e-06f,
--2.319679863e-06f, -2.351578099e-06f, -2.383468816e-06f, -2.415351960e-06f, -2.447227476e-06f, -2.479095309e-06f, -2.510955405e-06f, -2.542807711e-06f, -2.574652171e-06f, -2.606488732e-06f,
--2.638317339e-06f, -2.670137937e-06f, -2.701950473e-06f, -2.733754893e-06f, -2.765551142e-06f, -2.797339166e-06f, -2.829118910e-06f, -2.860890322e-06f, -2.892653346e-06f, -2.924407929e-06f,
--2.956154016e-06f, -2.987891554e-06f, -3.019620488e-06f, -3.051340764e-06f, -3.083052329e-06f, -3.114755128e-06f, -3.146449108e-06f, -3.178134215e-06f, -3.209810394e-06f, -3.241477591e-06f,
--3.273135754e-06f, -3.304784828e-06f, -3.336424759e-06f, -3.368055494e-06f, -3.399676978e-06f, -3.431289158e-06f, -3.462891981e-06f, -3.494485391e-06f, -3.526069337e-06f, -3.557643764e-06f,
--3.589208618e-06f, -3.620763847e-06f, -3.652309395e-06f, -3.683845211e-06f, -3.715371239e-06f, -3.746887427e-06f, -3.778393721e-06f, -3.809890068e-06f, -3.841376414e-06f, -3.872852706e-06f,
--3.904318890e-06f, -3.935774913e-06f, -3.967220722e-06f, -3.998656262e-06f, -4.030081482e-06f, -4.061496327e-06f, -4.092900745e-06f, -4.124294682e-06f, -4.155678084e-06f, -4.187050900e-06f,
--4.218413074e-06f, -4.249764556e-06f, -4.281105290e-06f, -4.312435224e-06f, -4.343754306e-06f, -4.375062481e-06f, -4.406359697e-06f, -4.437645901e-06f, -4.468921040e-06f, -4.500185061e-06f,
--4.531437912e-06f, -4.562679538e-06f, -4.593909887e-06f, -4.625128907e-06f, -4.656336545e-06f, -4.687532747e-06f, -4.718717461e-06f, -4.749890635e-06f, -4.781052215e-06f, -4.812202149e-06f,
--4.843340383e-06f, -4.874466867e-06f, -4.905581546e-06f, -4.936684369e-06f, -4.967775282e-06f, -4.998854233e-06f, -5.029921170e-06f, -5.060976040e-06f, -5.092018791e-06f, -5.123049369e-06f,
--5.154067724e-06f, -5.185073802e-06f, -5.216067551e-06f, -5.247048919e-06f, -5.278017853e-06f, -5.308974302e-06f, -5.339918212e-06f, -5.370849532e-06f, -5.401768209e-06f, -5.432674192e-06f,
--5.463567428e-06f, -5.494447865e-06f, -5.525315450e-06f, -5.556170133e-06f, -5.587011861e-06f, -5.617840581e-06f, -5.648656243e-06f, -5.679458793e-06f, -5.710248180e-06f, -5.741024353e-06f,
--5.771787258e-06f, -5.802536845e-06f, -5.833273062e-06f, -5.863995857e-06f, -5.894705178e-06f, -5.925400973e-06f, -5.956083191e-06f, -5.986751780e-06f, -6.017406689e-06f, -6.048047865e-06f,
--6.078675257e-06f, -6.109288815e-06f, -6.139888485e-06f, -6.170474217e-06f, -6.201045960e-06f, -6.231603661e-06f, -6.262147270e-06f, -6.292676735e-06f, -6.323192005e-06f, -6.353693028e-06f,
--6.384179754e-06f, -6.414652130e-06f, -6.445110106e-06f, -6.475553631e-06f, -6.505982653e-06f, -6.536397121e-06f, -6.566796985e-06f, -6.597182193e-06f, -6.627552694e-06f, -6.657908437e-06f,
--6.688249371e-06f, -6.718575446e-06f, -6.748886609e-06f, -6.779182812e-06f, -6.809464001e-06f, -6.839730128e-06f, -6.869981141e-06f, -6.900216989e-06f, -6.930437621e-06f, -6.960642988e-06f,
--6.990833038e-06f, -7.021007720e-06f, -7.051166984e-06f, -7.081310780e-06f, -7.111439057e-06f, -7.141551765e-06f, -7.171648852e-06f, -7.201730269e-06f, -7.231795965e-06f, -7.261845890e-06f,
--7.291879994e-06f, -7.321898226e-06f, -7.351900535e-06f, -7.381886873e-06f, -7.411857188e-06f, -7.441811431e-06f, -7.471749550e-06f, -7.501671497e-06f, -7.531577221e-06f, -7.561466673e-06f,
--7.591339801e-06f, -7.621196556e-06f, -7.651036889e-06f, -7.680860749e-06f, -7.710668086e-06f, -7.740458852e-06f, -7.770232994e-06f, -7.799990465e-06f, -7.829731215e-06f, -7.859455193e-06f,
--7.889162350e-06f, -7.918852637e-06f, -7.948526003e-06f, -7.978182400e-06f, -8.007821777e-06f, -8.037444086e-06f, -8.067049276e-06f, -8.096637300e-06f, -8.126208106e-06f, -8.155761645e-06f,
--8.185297870e-06f, -8.214816729e-06f, -8.244318174e-06f, -8.273802156e-06f, -8.303268626e-06f, -8.332717534e-06f, -8.362148832e-06f, -8.391562469e-06f, -8.420958398e-06f, -8.450336570e-06f,
--8.479696934e-06f, -8.509039443e-06f, -8.538364048e-06f, -8.567670699e-06f, -8.596959348e-06f, -8.626229947e-06f, -8.655482446e-06f, -8.684716796e-06f, -8.713932950e-06f, -8.743130858e-06f,
--8.772310472e-06f, -8.801471743e-06f, -8.830614624e-06f, -8.859739064e-06f, -8.888845017e-06f, -8.917932433e-06f, -8.947001264e-06f, -8.976051462e-06f, -9.005082978e-06f, -9.034095765e-06f,
--9.063089774e-06f, -9.092064957e-06f, -9.121021266e-06f, -9.149958653e-06f, -9.178877069e-06f, -9.207776467e-06f, -9.236656798e-06f, -9.265518015e-06f, -9.294360070e-06f, -9.323182915e-06f,
--9.351986502e-06f, -9.380770784e-06f, -9.409535711e-06f, -9.438281238e-06f, -9.467007316e-06f, -9.495713898e-06f, -9.524400935e-06f, -9.553068381e-06f, -9.581716188e-06f, -9.610344309e-06f,
--9.638952695e-06f, -9.667541300e-06f, -9.696110076e-06f, -9.724658976e-06f, -9.753187952e-06f, -9.781696958e-06f, -9.810185946e-06f, -9.838654869e-06f, -9.867103680e-06f, -9.895532332e-06f,
--9.923940778e-06f, -9.952328970e-06f, -9.980696863e-06f, -1.000904441e-05f, -1.003737156e-05f, -1.006567827e-05f, -1.009396449e-05f, -1.012223018e-05f, -1.015047529e-05f, -1.017869977e-05f,
--1.020690357e-05f, -1.023508666e-05f, -1.026324897e-05f, -1.029139047e-05f, -1.031951112e-05f, -1.034761085e-05f, -1.037568963e-05f, -1.040374741e-05f, -1.043178415e-05f, -1.045979979e-05f,
--1.048779430e-05f, -1.051576762e-05f, -1.054371970e-05f, -1.057165052e-05f, -1.059956001e-05f, -1.062744813e-05f, -1.065531483e-05f, -1.068316007e-05f, -1.071098381e-05f, -1.073878600e-05f,
--1.076656658e-05f, -1.079432552e-05f, -1.082206278e-05f, -1.084977829e-05f, -1.087747203e-05f, -1.090514393e-05f, -1.093279397e-05f, -1.096042209e-05f, -1.098802824e-05f, -1.101561239e-05f,
--1.104317448e-05f, -1.107071447e-05f, -1.109823232e-05f, -1.112572797e-05f, -1.115320140e-05f, -1.118065254e-05f, -1.120808135e-05f, -1.123548780e-05f, -1.126287183e-05f, -1.129023339e-05f,
--1.131757246e-05f, -1.134488897e-05f, -1.137218289e-05f, -1.139945416e-05f, -1.142670276e-05f, -1.145392862e-05f, -1.148113171e-05f, -1.150831197e-05f, -1.153546938e-05f, -1.156260388e-05f,
--1.158971542e-05f, -1.161680397e-05f, -1.164386948e-05f, -1.167091190e-05f, -1.169793119e-05f, -1.172492730e-05f, -1.175190020e-05f, -1.177884983e-05f, -1.180577616e-05f, -1.183267914e-05f,
--1.185955872e-05f, -1.188641486e-05f, -1.191324752e-05f, -1.194005665e-05f, -1.196684221e-05f, -1.199360415e-05f, -1.202034244e-05f, -1.204705703e-05f, -1.207374786e-05f, -1.210041491e-05f,
--1.212705813e-05f, -1.215367747e-05f, -1.218027289e-05f, -1.220684434e-05f, -1.223339179e-05f, -1.225991519e-05f, -1.228641449e-05f, -1.231288966e-05f, -1.233934065e-05f, -1.236576741e-05f,
--1.239216991e-05f, -1.241854809e-05f, -1.244490193e-05f, -1.247123137e-05f, -1.249753637e-05f, -1.252381688e-05f, -1.255007288e-05f, -1.257630430e-05f, -1.260251112e-05f, -1.262869328e-05f,
--1.265485075e-05f, -1.268098348e-05f, -1.270709143e-05f, -1.273317456e-05f, -1.275923282e-05f, -1.278526617e-05f, -1.281127458e-05f, -1.283725799e-05f, -1.286321636e-05f, -1.288914966e-05f,
--1.291505784e-05f, -1.294094085e-05f, -1.296679867e-05f, -1.299263124e-05f, -1.301843852e-05f, -1.304422047e-05f, -1.306997705e-05f, -1.309570821e-05f, -1.312141392e-05f, -1.314709414e-05f,
--1.317274881e-05f, -1.319837791e-05f, -1.322398138e-05f, -1.324955919e-05f, -1.327511129e-05f, -1.330063765e-05f, -1.332613822e-05f, -1.335161296e-05f, -1.337706183e-05f, -1.340248479e-05f,
--1.342788180e-05f, -1.345325281e-05f, -1.347859779e-05f, -1.350391669e-05f, -1.352920947e-05f, -1.355447610e-05f, -1.357971652e-05f, -1.360493071e-05f, -1.363011861e-05f, -1.365528020e-05f,
--1.368041542e-05f, -1.370552424e-05f, -1.373060661e-05f, -1.375566250e-05f, -1.378069187e-05f, -1.380569467e-05f, -1.383067087e-05f, -1.385562041e-05f, -1.388054328e-05f, -1.390543941e-05f,
--1.393030878e-05f, -1.395515135e-05f, -1.397996706e-05f, -1.400475589e-05f, -1.402951780e-05f, -1.405425273e-05f, -1.407896066e-05f, -1.410364154e-05f, -1.412829534e-05f, -1.415292200e-05f,
--1.417752151e-05f, -1.420209380e-05f, -1.422663886e-05f, -1.425115662e-05f, -1.427564707e-05f, -1.430011015e-05f, -1.432454582e-05f, -1.434895406e-05f, -1.437333481e-05f, -1.439768804e-05f,
--1.442201371e-05f, -1.444631178e-05f, -1.447058221e-05f, -1.449482497e-05f, -1.451904001e-05f, -1.454322729e-05f, -1.456738678e-05f, -1.459151844e-05f, -1.461562223e-05f, -1.463969810e-05f,
--1.466374603e-05f, -1.468776596e-05f, -1.471175787e-05f, -1.473572172e-05f, -1.475965746e-05f, -1.478356507e-05f, -1.480744449e-05f, -1.483129569e-05f, -1.485511864e-05f, -1.487891329e-05f,
--1.490267961e-05f, -1.492641756e-05f, -1.495012710e-05f, -1.497380819e-05f, -1.499746080e-05f, -1.502108489e-05f, -1.504468041e-05f, -1.506824734e-05f, -1.509178563e-05f, -1.511529524e-05f,
--1.513877615e-05f, -1.516222831e-05f, -1.518565168e-05f, -1.520904622e-05f, -1.523241191e-05f, -1.525574870e-05f, -1.527905655e-05f, -1.530233543e-05f, -1.532558530e-05f, -1.534880612e-05f,
--1.537199786e-05f, -1.539516047e-05f, -1.541829393e-05f, -1.544139819e-05f, -1.546447323e-05f, -1.548751899e-05f, -1.551053545e-05f, -1.553352256e-05f, -1.555648030e-05f, -1.557940862e-05f,
--1.560230749e-05f, -1.562517687e-05f, -1.564801672e-05f, -1.567082702e-05f, -1.569360772e-05f, -1.571635878e-05f, -1.573908018e-05f, -1.576177187e-05f, -1.578443381e-05f, -1.580706598e-05f,
--1.582966834e-05f, -1.585224084e-05f, -1.587478346e-05f, -1.589729616e-05f, -1.591977890e-05f, -1.594223165e-05f, -1.596465437e-05f, -1.598704703e-05f, -1.600940958e-05f, -1.603174201e-05f,
--1.605404426e-05f, -1.607631630e-05f, -1.609855811e-05f, -1.612076964e-05f, -1.614295085e-05f, -1.616510172e-05f, -1.618722221e-05f, -1.620931229e-05f, -1.623137191e-05f, -1.625340104e-05f,
--1.627539965e-05f, -1.629736771e-05f, -1.631930518e-05f, -1.634121202e-05f, -1.636308820e-05f, -1.638493369e-05f, -1.640674844e-05f, -1.642853244e-05f, -1.645028563e-05f, -1.647200800e-05f,
--1.649369949e-05f, -1.651536009e-05f, -1.653698975e-05f, -1.655858844e-05f, -1.658015613e-05f, -1.660169278e-05f, -1.662319837e-05f, -1.664467284e-05f, -1.666611618e-05f, -1.668752835e-05f,
--1.670890931e-05f, -1.673025903e-05f, -1.675157747e-05f, -1.677286461e-05f, -1.679412041e-05f, -1.681534484e-05f, -1.683653786e-05f, -1.685769944e-05f, -1.687882955e-05f, -1.689992814e-05f,
--1.692099520e-05f, -1.694203069e-05f, -1.696303457e-05f, -1.698400681e-05f, -1.700494738e-05f, -1.702585625e-05f, -1.704673338e-05f, -1.706757874e-05f, -1.708839229e-05f, -1.710917401e-05f,
--1.712992387e-05f, -1.715064182e-05f, -1.717132784e-05f, -1.719198190e-05f, -1.721260395e-05f, -1.723319398e-05f, -1.725375195e-05f, -1.727427782e-05f, -1.729477157e-05f, -1.731523316e-05f,
--1.733566256e-05f, -1.735605974e-05f, -1.737642467e-05f, -1.739675731e-05f, -1.741705763e-05f, -1.743732560e-05f, -1.745756120e-05f, -1.747776438e-05f, -1.749793512e-05f, -1.751807339e-05f,
--1.753817915e-05f, -1.755825237e-05f, -1.757829302e-05f, -1.759830108e-05f, -1.761827650e-05f, -1.763821926e-05f, -1.765812933e-05f, -1.767800668e-05f, -1.769785127e-05f, -1.771766308e-05f,
--1.773744207e-05f, -1.775718821e-05f, -1.777690147e-05f, -1.779658183e-05f, -1.781622925e-05f, -1.783584370e-05f, -1.785542516e-05f, -1.787497358e-05f, -1.789448894e-05f, -1.791397121e-05f,
--1.793342036e-05f, -1.795283637e-05f, -1.797221919e-05f, -1.799156880e-05f, -1.801088517e-05f, -1.803016827e-05f, -1.804941807e-05f, -1.806863455e-05f, -1.808781766e-05f, -1.810696738e-05f,
--1.812608369e-05f, -1.814516655e-05f, -1.816421593e-05f, -1.818323181e-05f, -1.820221415e-05f, -1.822116292e-05f, -1.824007810e-05f, -1.825895966e-05f, -1.827780756e-05f, -1.829662178e-05f,
--1.831540230e-05f, -1.833414907e-05f, -1.835286208e-05f, -1.837154129e-05f, -1.839018667e-05f, -1.840879820e-05f, -1.842737585e-05f, -1.844591959e-05f, -1.846442939e-05f, -1.848290522e-05f,
--1.850134705e-05f, -1.851975486e-05f, -1.853812862e-05f, -1.855646830e-05f, -1.857477387e-05f, -1.859304530e-05f, -1.861128257e-05f, -1.862948564e-05f, -1.864765450e-05f, -1.866578911e-05f,
--1.868388944e-05f, -1.870195547e-05f, -1.871998716e-05f, -1.873798450e-05f, -1.875594746e-05f, -1.877387600e-05f, -1.879177010e-05f, -1.880962973e-05f, -1.882745487e-05f, -1.884524548e-05f,
--1.886300155e-05f, -1.888072304e-05f, -1.889840993e-05f, -1.891606219e-05f, -1.893367979e-05f, -1.895126271e-05f, -1.896881092e-05f, -1.898632439e-05f, -1.900380310e-05f, -1.902124702e-05f,
--1.903865612e-05f, -1.905603038e-05f, -1.907336977e-05f, -1.909067427e-05f, -1.910794385e-05f, -1.912517848e-05f, -1.914237813e-05f, -1.915954279e-05f, -1.917667242e-05f, -1.919376700e-05f,
--1.921082650e-05f, -1.922785090e-05f, -1.924484017e-05f, -1.926179429e-05f, -1.927871323e-05f, -1.929559697e-05f, -1.931244547e-05f, -1.932925872e-05f, -1.934603669e-05f, -1.936277935e-05f,
--1.937948668e-05f, -1.939615865e-05f, -1.941279524e-05f, -1.942939643e-05f, -1.944596219e-05f, -1.946249249e-05f, -1.947898730e-05f, -1.949544662e-05f, -1.951187040e-05f, -1.952825863e-05f,
--1.954461127e-05f, -1.956092832e-05f, -1.957720974e-05f, -1.959345550e-05f, -1.960966559e-05f, -1.962583997e-05f, -1.964197863e-05f, -1.965808155e-05f, -1.967414869e-05f, -1.969018003e-05f,
--1.970617555e-05f, -1.972213523e-05f, -1.973805904e-05f, -1.975394695e-05f, -1.976979895e-05f, -1.978561501e-05f, -1.980139511e-05f, -1.981713923e-05f, -1.983284733e-05f, -1.984851940e-05f,
--1.986415541e-05f, -1.987975535e-05f, -1.989531918e-05f, -1.991084689e-05f, -1.992633845e-05f, -1.994179384e-05f, -1.995721303e-05f, -1.997259601e-05f, -1.998794275e-05f, -2.000325322e-05f,
--2.001852742e-05f, -2.003376530e-05f, -2.004896685e-05f, -2.006413206e-05f, -2.007926089e-05f, -2.009435332e-05f, -2.010940933e-05f, -2.012442890e-05f, -2.013941201e-05f, -2.015435864e-05f,
--2.016926876e-05f, -2.018414235e-05f, -2.019897939e-05f, -2.021377985e-05f, -2.022854373e-05f, -2.024327099e-05f, -2.025796161e-05f, -2.027261557e-05f, -2.028723286e-05f, -2.030181344e-05f,
--2.031635730e-05f, -2.033086441e-05f, -2.034533477e-05f, -2.035976833e-05f, -2.037416509e-05f, -2.038852503e-05f, -2.040284811e-05f, -2.041713432e-05f, -2.043138365e-05f, -2.044559606e-05f,
--2.045977155e-05f, -2.047391008e-05f, -2.048801164e-05f, -2.050207620e-05f, -2.051610376e-05f, -2.053009428e-05f, -2.054404774e-05f, -2.055796414e-05f, -2.057184344e-05f, -2.058568562e-05f,
--2.059949068e-05f, -2.061325858e-05f, -2.062698930e-05f, -2.064068284e-05f, -2.065433916e-05f, -2.066795825e-05f, -2.068154008e-05f, -2.069508465e-05f, -2.070859192e-05f, -2.072206189e-05f,
--2.073549452e-05f, -2.074888981e-05f, -2.076224773e-05f, -2.077556826e-05f, -2.078885139e-05f, -2.080209709e-05f, -2.081530535e-05f, -2.082847615e-05f, -2.084160947e-05f, -2.085470529e-05f,
--2.086776358e-05f, -2.088078435e-05f, -2.089376755e-05f, -2.090671319e-05f, -2.091962123e-05f, -2.093249166e-05f, -2.094532446e-05f, -2.095811962e-05f, -2.097087711e-05f, -2.098359692e-05f,
--2.099627903e-05f, -2.100892342e-05f, -2.102153007e-05f, -2.103409897e-05f, -2.104663010e-05f, -2.105912344e-05f, -2.107157897e-05f, -2.108399668e-05f, -2.109637655e-05f, -2.110871856e-05f,
--2.112102269e-05f, -2.113328893e-05f, -2.114551726e-05f, -2.115770766e-05f, -2.116986012e-05f, -2.118197462e-05f, -2.119405113e-05f, -2.120608966e-05f, -2.121809017e-05f, -2.123005265e-05f,
--2.124197709e-05f, -2.125386347e-05f, -2.126571176e-05f, -2.127752197e-05f, -2.128929406e-05f, -2.130102803e-05f, -2.131272385e-05f, -2.132438152e-05f, -2.133600101e-05f, -2.134758231e-05f,
--2.135912540e-05f, -2.137063027e-05f, -2.138209690e-05f, -2.139352528e-05f, -2.140491539e-05f, -2.141626721e-05f, -2.142758073e-05f, -2.143885593e-05f, -2.145009281e-05f, -2.146129133e-05f,
--2.147245150e-05f, -2.148357328e-05f, -2.149465668e-05f, -2.150570166e-05f, -2.151670823e-05f, -2.152767635e-05f, -2.153860603e-05f, -2.154949724e-05f, -2.156034996e-05f, -2.157116419e-05f,
--2.158193991e-05f, -2.159267711e-05f, -2.160337576e-05f, -2.161403586e-05f, -2.162465740e-05f, -2.163524035e-05f, -2.164578470e-05f, -2.165629045e-05f, -2.166675757e-05f, -2.167718605e-05f,
--2.168757588e-05f, -2.169792704e-05f, -2.170823952e-05f, -2.171851331e-05f, -2.172874840e-05f, -2.173894476e-05f, -2.174910239e-05f, -2.175922127e-05f, -2.176930139e-05f, -2.177934273e-05f,
--2.178934529e-05f, -2.179930905e-05f, -2.180923400e-05f, -2.181912012e-05f, -2.182896740e-05f, -2.183877583e-05f, -2.184854540e-05f, -2.185827608e-05f, -2.186796788e-05f, -2.187762078e-05f,
--2.188723476e-05f, -2.189680981e-05f, -2.190634592e-05f, -2.191584309e-05f, -2.192530128e-05f, -2.193472050e-05f, -2.194410074e-05f, -2.195344197e-05f, -2.196274419e-05f, -2.197200738e-05f,
--2.198123154e-05f, -2.199041666e-05f, -2.199956271e-05f, -2.200866969e-05f, -2.201773759e-05f, -2.202676640e-05f, -2.203575610e-05f, -2.204470668e-05f, -2.205361814e-05f, -2.206249046e-05f,
--2.207132362e-05f, -2.208011763e-05f, -2.208887246e-05f, -2.209758811e-05f, -2.210626457e-05f, -2.211490182e-05f, -2.212349986e-05f, -2.213205867e-05f, -2.214057825e-05f, -2.214905857e-05f,
--2.215749964e-05f, -2.216590145e-05f, -2.217426397e-05f, -2.218258721e-05f, -2.219087115e-05f, -2.219911578e-05f, -2.220732109e-05f, -2.221548708e-05f, -2.222361372e-05f, -2.223170102e-05f,
--2.223974896e-05f, -2.224775753e-05f, -2.225572673e-05f, -2.226365654e-05f, -2.227154695e-05f, -2.227939796e-05f, -2.228720955e-05f, -2.229498172e-05f, -2.230271446e-05f, -2.231040776e-05f,
--2.231806160e-05f, -2.232567599e-05f, -2.233325090e-05f, -2.234078634e-05f, -2.234828229e-05f, -2.235573875e-05f, -2.236315570e-05f, -2.237053314e-05f, -2.237787106e-05f, -2.238516945e-05f,
--2.239242830e-05f, -2.239964761e-05f, -2.240682736e-05f, -2.241396755e-05f, -2.242106817e-05f, -2.242812922e-05f, -2.243515067e-05f, -2.244213253e-05f, -2.244907480e-05f, -2.245597745e-05f,
--2.246284048e-05f, -2.246966389e-05f, -2.247644767e-05f, -2.248319181e-05f, -2.248989630e-05f, -2.249656114e-05f, -2.250318631e-05f, -2.250977182e-05f, -2.251631765e-05f, -2.252282380e-05f,
--2.252929026e-05f, -2.253571702e-05f, -2.254210408e-05f, -2.254845143e-05f, -2.255475907e-05f, -2.256102698e-05f, -2.256725516e-05f, -2.257344360e-05f, -2.257959230e-05f, -2.258570125e-05f,
--2.259177045e-05f, -2.259779989e-05f, -2.260378955e-05f, -2.260973945e-05f, -2.261564956e-05f, -2.262151989e-05f, -2.262735043e-05f, -2.263314117e-05f, -2.263889211e-05f, -2.264460324e-05f,
--2.265027456e-05f, -2.265590605e-05f, -2.266149773e-05f, -2.266704957e-05f, -2.267256157e-05f, -2.267803374e-05f, -2.268346606e-05f, -2.268885853e-05f, -2.269421114e-05f, -2.269952390e-05f,
--2.270479678e-05f, -2.271002980e-05f, -2.271522294e-05f, -2.272037620e-05f, -2.272548958e-05f, -2.273056307e-05f, -2.273559666e-05f, -2.274059036e-05f, -2.274554416e-05f, -2.275045805e-05f,
--2.275533203e-05f, -2.276016609e-05f, -2.276496024e-05f, -2.276971446e-05f, -2.277442876e-05f, -2.277910313e-05f, -2.278373756e-05f, -2.278833206e-05f, -2.279288661e-05f, -2.279740122e-05f,
--2.280187588e-05f, -2.280631059e-05f, -2.281070535e-05f, -2.281506015e-05f, -2.281937498e-05f, -2.282364985e-05f, -2.282788476e-05f, -2.283207969e-05f, -2.283623465e-05f, -2.284034964e-05f,
--2.284442464e-05f, -2.284845966e-05f, -2.285245470e-05f, -2.285640976e-05f, -2.286032482e-05f, -2.286419989e-05f, -2.286803497e-05f, -2.287183005e-05f, -2.287558513e-05f, -2.287930021e-05f,
--2.288297529e-05f, -2.288661036e-05f, -2.289020543e-05f, -2.289376048e-05f, -2.289727553e-05f, -2.290075057e-05f, -2.290418559e-05f, -2.290758059e-05f, -2.291093558e-05f, -2.291425055e-05f,
--2.291752550e-05f, -2.292076043e-05f, -2.292395534e-05f, -2.292711022e-05f, -2.293022508e-05f, -2.293329992e-05f, -2.293633472e-05f, -2.293932950e-05f, -2.294228425e-05f, -2.294519897e-05f,
--2.294807367e-05f, -2.295090833e-05f, -2.295370296e-05f, -2.295645756e-05f, -2.295917212e-05f, -2.296184666e-05f, -2.296448116e-05f, -2.296707563e-05f, -2.296963007e-05f, -2.297214447e-05f,
--2.297461885e-05f, -2.297705319e-05f, -2.297944749e-05f, -2.298180177e-05f, -2.298411601e-05f, -2.298639022e-05f, -2.298862440e-05f, -2.299081855e-05f, -2.299297266e-05f, -2.299508675e-05f,
--2.299716081e-05f, -2.299919484e-05f, -2.300118885e-05f, -2.300314282e-05f, -2.300505678e-05f, -2.300693070e-05f, -2.300876461e-05f, -2.301055849e-05f, -2.301231235e-05f, -2.301402619e-05f,
--2.301570002e-05f, -2.301733383e-05f, -2.301892762e-05f, -2.302048140e-05f, -2.302199516e-05f, -2.302346892e-05f, -2.302490267e-05f, -2.302629641e-05f, -2.302765015e-05f, -2.302896389e-05f,
--2.303023762e-05f, -2.303147136e-05f, -2.303266510e-05f, -2.303381885e-05f, -2.303493260e-05f, -2.303600637e-05f, -2.303704015e-05f, -2.303803395e-05f, -2.303898776e-05f, -2.303990160e-05f,
--2.304077546e-05f, -2.304160935e-05f, -2.304240327e-05f, -2.304315722e-05f, -2.304387121e-05f, -2.304454523e-05f, -2.304517930e-05f, -2.304577342e-05f, -2.304632758e-05f, -2.304684180e-05f,
--2.304731607e-05f, -2.304775040e-05f, -2.304814480e-05f, -2.304849926e-05f, -2.304881379e-05f, -2.304908840e-05f, -2.304932308e-05f, -2.304951785e-05f, -2.304967270e-05f, -2.304978764e-05f,
--2.304986268e-05f, -2.304989781e-05f, -2.304989305e-05f, -2.304984840e-05f, -2.304976385e-05f, -2.304963943e-05f, -2.304947512e-05f, -2.304927094e-05f, -2.304902689e-05f, -2.304874297e-05f,
--2.304841919e-05f, -2.304805556e-05f, -2.304765208e-05f, -2.304720875e-05f, -2.304672558e-05f, -2.304620257e-05f, -2.304563974e-05f, -2.304503708e-05f, -2.304439460e-05f, -2.304371231e-05f,
--2.304299021e-05f, -2.304222831e-05f, -2.304142661e-05f, -2.304058512e-05f, -2.303970384e-05f, -2.303878278e-05f, -2.303782195e-05f, -2.303682135e-05f, -2.303578099e-05f, -2.303470088e-05f,
--2.303358101e-05f, -2.303242141e-05f, -2.303122206e-05f, -2.302998299e-05f, -2.302870419e-05f, -2.302738568e-05f, -2.302602745e-05f, -2.302462952e-05f, -2.302319189e-05f, -2.302171458e-05f,
--2.302019757e-05f, -2.301864090e-05f, -2.301704455e-05f, -2.301540854e-05f, -2.301373288e-05f, -2.301201756e-05f, -2.301026261e-05f, -2.300846802e-05f, -2.300663381e-05f, -2.300475998e-05f,
--2.300284654e-05f, -2.300089349e-05f, -2.299890085e-05f, -2.299686862e-05f, -2.299479681e-05f, -2.299268543e-05f, -2.299053449e-05f, -2.298834399e-05f, -2.298611394e-05f, -2.298384435e-05f,
--2.298153523e-05f, -2.297918658e-05f, -2.297679843e-05f, -2.297437076e-05f, -2.297190360e-05f, -2.296939695e-05f, -2.296685082e-05f, -2.296426521e-05f, -2.296164014e-05f, -2.295897562e-05f,
--2.295627166e-05f, -2.295352825e-05f, -2.295074542e-05f, -2.294792317e-05f, -2.294506152e-05f, -2.294216046e-05f, -2.293922001e-05f, -2.293624018e-05f, -2.293322098e-05f, -2.293016242e-05f,
--2.292706450e-05f, -2.292392724e-05f, -2.292075065e-05f, -2.291753474e-05f, -2.291427951e-05f, -2.291098498e-05f, -2.290765115e-05f, -2.290427805e-05f, -2.290086566e-05f, -2.289741402e-05f,
--2.289392312e-05f, -2.289039298e-05f, -2.288682361e-05f, -2.288321501e-05f, -2.287956721e-05f, -2.287588020e-05f, -2.287215400e-05f, -2.286838863e-05f, -2.286458409e-05f, -2.286074038e-05f,
--2.285685754e-05f, -2.285293555e-05f, -2.284897444e-05f, -2.284497422e-05f, -2.284093490e-05f, -2.283685648e-05f, -2.283273899e-05f, -2.282858243e-05f, -2.282438681e-05f, -2.282015214e-05f,
--2.281587845e-05f, -2.281156572e-05f, -2.280721399e-05f, -2.280282326e-05f, -2.279839355e-05f, -2.279392486e-05f, -2.278941721e-05f, -2.278487060e-05f, -2.278028506e-05f, -2.277566059e-05f,
--2.277099721e-05f, -2.276629492e-05f, -2.276155375e-05f, -2.275677370e-05f, -2.275195478e-05f, -2.274709701e-05f, -2.274220041e-05f, -2.273726497e-05f, -2.273229073e-05f, -2.272727768e-05f,
--2.272222585e-05f, -2.271713523e-05f, -2.271200586e-05f, -2.270683774e-05f, -2.270163088e-05f, -2.269638531e-05f, -2.269110102e-05f, -2.268577803e-05f, -2.268041637e-05f, -2.267501603e-05f,
--2.266957704e-05f, -2.266409941e-05f, -2.265858315e-05f, -2.265302828e-05f, -2.264743481e-05f, -2.264180275e-05f, -2.263613212e-05f, -2.263042293e-05f, -2.262467519e-05f, -2.261888893e-05f,
--2.261306415e-05f, -2.260720086e-05f, -2.260129909e-05f, -2.259535885e-05f, -2.258938015e-05f, -2.258336301e-05f, -2.257730744e-05f, -2.257121345e-05f, -2.256508106e-05f, -2.255891029e-05f,
--2.255270115e-05f, -2.254645365e-05f, -2.254016781e-05f, -2.253384365e-05f, -2.252748118e-05f, -2.252108041e-05f, -2.251464136e-05f, -2.250816405e-05f, -2.250164849e-05f, -2.249509470e-05f,
--2.248850269e-05f, -2.248187248e-05f, -2.247520408e-05f, -2.246849751e-05f, -2.246175279e-05f, -2.245496993e-05f, -2.244814894e-05f, -2.244128985e-05f, -2.243439266e-05f, -2.242745740e-05f,
--2.242048408e-05f, -2.241347272e-05f, -2.240642333e-05f, -2.239933593e-05f, -2.239221054e-05f, -2.238504717e-05f, -2.237784584e-05f, -2.237060657e-05f, -2.236332937e-05f, -2.235601426e-05f,
--2.234866125e-05f, -2.234127037e-05f, -2.233384163e-05f, -2.232637505e-05f, -2.231887064e-05f, -2.231132842e-05f, -2.230374840e-05f, -2.229613062e-05f, -2.228847508e-05f, -2.228078180e-05f,
--2.227305079e-05f, -2.226528208e-05f, -2.225747569e-05f, -2.224963162e-05f, -2.224174990e-05f, -2.223383055e-05f, -2.222587359e-05f, -2.221787902e-05f, -2.220984687e-05f, -2.220177717e-05f,
--2.219366991e-05f, -2.218552513e-05f, -2.217734285e-05f, -2.216912307e-05f, -2.216086582e-05f, -2.215257112e-05f, -2.214423899e-05f, -2.213586944e-05f, -2.212746249e-05f, -2.211901816e-05f,
--2.211053647e-05f, -2.210201745e-05f, -2.209346109e-05f, -2.208486744e-05f, -2.207623650e-05f, -2.206756830e-05f, -2.205886284e-05f, -2.205012017e-05f, -2.204134028e-05f, -2.203252320e-05f,
--2.202366896e-05f, -2.201477756e-05f, -2.200584904e-05f, -2.199688340e-05f, -2.198788067e-05f, -2.197884087e-05f, -2.196976401e-05f, -2.196065013e-05f, -2.195149923e-05f, -2.194231134e-05f,
--2.193308647e-05f, -2.192382466e-05f, -2.191452591e-05f, -2.190519024e-05f, -2.189581769e-05f, -2.188640826e-05f, -2.187696198e-05f, -2.186747887e-05f, -2.185795895e-05f, -2.184840224e-05f,
--2.183880876e-05f, -2.182917853e-05f, -2.181951157e-05f, -2.180980790e-05f, -2.180006754e-05f, -2.179029052e-05f, -2.178047686e-05f, -2.177062657e-05f, -2.176073967e-05f, -2.175081620e-05f,
--2.174085616e-05f, -2.173085958e-05f, -2.172082649e-05f, -2.171075690e-05f, -2.170065083e-05f, -2.169050831e-05f, -2.168032935e-05f, -2.167011399e-05f, -2.165986223e-05f, -2.164957411e-05f,
--2.163924964e-05f, -2.162888885e-05f, -2.161849176e-05f, -2.160805838e-05f, -2.159758875e-05f, -2.158708288e-05f, -2.157654080e-05f, -2.156596253e-05f, -2.155534809e-05f, -2.154469750e-05f,
--2.153401079e-05f, -2.152328797e-05f, -2.151252907e-05f, -2.150173412e-05f, -2.149090313e-05f, -2.148003614e-05f, -2.146913315e-05f, -2.145819420e-05f, -2.144721930e-05f, -2.143620848e-05f,
--2.142516177e-05f, -2.141407918e-05f, -2.140296074e-05f, -2.139180647e-05f, -2.138061640e-05f, -2.136939054e-05f, -2.135812893e-05f, -2.134683158e-05f, -2.133549852e-05f, -2.132412978e-05f,
--2.131272537e-05f, -2.130128532e-05f, -2.128980965e-05f, -2.127829839e-05f, -2.126675156e-05f, -2.125516918e-05f, -2.124355129e-05f, -2.123189789e-05f, -2.122020903e-05f, -2.120848471e-05f,
--2.119672497e-05f, -2.118492983e-05f, -2.117309931e-05f, -2.116123344e-05f, -2.114933224e-05f, -2.113739574e-05f, -2.112542396e-05f, -2.111341692e-05f, -2.110137466e-05f, -2.108929719e-05f,
--2.107718454e-05f, -2.106503673e-05f, -2.105285380e-05f, -2.104063576e-05f, -2.102838264e-05f, -2.101609446e-05f, -2.100377125e-05f, -2.099141304e-05f, -2.097901985e-05f, -2.096659171e-05f,
--2.095412863e-05f, -2.094163065e-05f, -2.092909779e-05f, -2.091653008e-05f, -2.090392755e-05f, -2.089129021e-05f, -2.087861809e-05f, -2.086591123e-05f, -2.085316964e-05f, -2.084039335e-05f,
--2.082758239e-05f, -2.081473678e-05f, -2.080185655e-05f, -2.078894173e-05f, -2.077599233e-05f, -2.076300840e-05f, -2.074998995e-05f, -2.073693701e-05f, -2.072384961e-05f, -2.071072777e-05f,
--2.069757152e-05f, -2.068438089e-05f, -2.067115589e-05f, -2.065789657e-05f, -2.064460295e-05f, -2.063127504e-05f, -2.061791289e-05f, -2.060451652e-05f, -2.059108594e-05f, -2.057762120e-05f,
--2.056412232e-05f, -2.055058932e-05f, -2.053702223e-05f, -2.052342108e-05f, -2.050978590e-05f, -2.049611671e-05f, -2.048241354e-05f, -2.046867642e-05f, -2.045490538e-05f, -2.044110044e-05f,
--2.042726163e-05f, -2.041338898e-05f, -2.039948252e-05f, -2.038554227e-05f, -2.037156827e-05f, -2.035756053e-05f, -2.034351909e-05f, -2.032944398e-05f, -2.031533522e-05f, -2.030119285e-05f,
--2.028701688e-05f, -2.027280736e-05f, -2.025856430e-05f, -2.024428773e-05f, -2.022997769e-05f, -2.021563420e-05f, -2.020125729e-05f, -2.018684699e-05f, -2.017240333e-05f, -2.015792634e-05f,
--2.014341604e-05f, -2.012887246e-05f, -2.011429564e-05f, -2.009968559e-05f, -2.008504236e-05f, -2.007036597e-05f, -2.005565645e-05f, -2.004091382e-05f, -2.002613812e-05f, -2.001132938e-05f,
--1.999648762e-05f, -1.998161287e-05f, -1.996670517e-05f, -1.995176455e-05f, -1.993679102e-05f, -1.992178463e-05f, -1.990674540e-05f, -1.989167336e-05f, -1.987656854e-05f, -1.986143098e-05f,
--1.984626069e-05f, -1.983105771e-05f, -1.981582208e-05f, -1.980055381e-05f, -1.978525295e-05f, -1.976991952e-05f, -1.975455354e-05f, -1.973915506e-05f, -1.972372410e-05f, -1.970826069e-05f,
--1.969276486e-05f, -1.967723665e-05f, -1.966167607e-05f, -1.964608317e-05f, -1.963045797e-05f, -1.961480051e-05f, -1.959911081e-05f, -1.958338890e-05f, -1.956763483e-05f, -1.955184861e-05f,
--1.953603027e-05f, -1.952017986e-05f, -1.950429739e-05f, -1.948838291e-05f, -1.947243644e-05f, -1.945645801e-05f, -1.944044765e-05f, -1.942440540e-05f, -1.940833128e-05f, -1.939222534e-05f,
--1.937608759e-05f, -1.935991807e-05f, -1.934371682e-05f, -1.932748386e-05f, -1.931121922e-05f, -1.929492294e-05f, -1.927859505e-05f, -1.926223558e-05f, -1.924584456e-05f, -1.922942202e-05f,
--1.921296800e-05f, -1.919648253e-05f, -1.917996564e-05f, -1.916341736e-05f, -1.914683772e-05f, -1.913022676e-05f, -1.911358450e-05f, -1.909691099e-05f, -1.908020625e-05f, -1.906347032e-05f,
--1.904670322e-05f, -1.902990499e-05f, -1.901307566e-05f, -1.899621527e-05f, -1.897932385e-05f, -1.896240142e-05f, -1.894544803e-05f, -1.892846371e-05f, -1.891144848e-05f, -1.889440238e-05f,
--1.887732545e-05f, -1.886021771e-05f, -1.884307921e-05f, -1.882590997e-05f, -1.880871002e-05f, -1.879147940e-05f, -1.877421815e-05f, -1.875692629e-05f, -1.873960386e-05f, -1.872225089e-05f,
--1.870486742e-05f, -1.868745347e-05f, -1.867000909e-05f, -1.865253431e-05f, -1.863502916e-05f, -1.861749366e-05f, -1.859992787e-05f, -1.858233181e-05f, -1.856470551e-05f, -1.854704901e-05f,
--1.852936234e-05f, -1.851164554e-05f, -1.849389864e-05f, -1.847612167e-05f, -1.845831467e-05f, -1.844047767e-05f, -1.842261071e-05f, -1.840471382e-05f, -1.838678704e-05f, -1.836883040e-05f,
--1.835084392e-05f, -1.833282766e-05f, -1.831478164e-05f, -1.829670590e-05f, -1.827860047e-05f, -1.826046538e-05f, -1.824230068e-05f, -1.822410639e-05f, -1.820588255e-05f, -1.818762920e-05f,
--1.816934636e-05f, -1.815103409e-05f, -1.813269240e-05f, -1.811432133e-05f, -1.809592093e-05f, -1.807749122e-05f, -1.805903224e-05f, -1.804054403e-05f, -1.802202662e-05f, -1.800348004e-05f,
--1.798490433e-05f, -1.796629953e-05f, -1.794766567e-05f, -1.792900279e-05f, -1.791031092e-05f, -1.789159010e-05f, -1.787284037e-05f, -1.785406175e-05f, -1.783525429e-05f, -1.781641802e-05f,
--1.779755297e-05f, -1.777865919e-05f, -1.775973670e-05f, -1.774078555e-05f, -1.772180577e-05f, -1.770279740e-05f, -1.768376047e-05f, -1.766469502e-05f, -1.764560108e-05f, -1.762647869e-05f,
--1.760732789e-05f, -1.758814871e-05f, -1.756894119e-05f, -1.754970537e-05f, -1.753044128e-05f, -1.751114896e-05f, -1.749182844e-05f, -1.747247976e-05f, -1.745310297e-05f, -1.743369808e-05f,
--1.741426515e-05f, -1.739480421e-05f, -1.737531529e-05f, -1.735579844e-05f, -1.733625368e-05f, -1.731668106e-05f, -1.729708061e-05f, -1.727745238e-05f, -1.725779638e-05f, -1.723811267e-05f,
--1.721840129e-05f, -1.719866226e-05f, -1.717889562e-05f, -1.715910142e-05f, -1.713927969e-05f, -1.711943046e-05f, -1.709955378e-05f, -1.707964968e-05f, -1.705971820e-05f, -1.703975938e-05f,
--1.701977325e-05f, -1.699975986e-05f, -1.697971923e-05f, -1.695965141e-05f, -1.693955643e-05f, -1.691943434e-05f, -1.689928517e-05f, -1.687910896e-05f, -1.685890574e-05f, -1.683867556e-05f,
--1.681841845e-05f, -1.679813445e-05f, -1.677782360e-05f, -1.675748594e-05f, -1.673712150e-05f, -1.671673032e-05f, -1.669631245e-05f, -1.667586791e-05f, -1.665539675e-05f, -1.663489901e-05f,
--1.661437472e-05f, -1.659382393e-05f, -1.657324666e-05f, -1.655264297e-05f, -1.653201288e-05f, -1.651135645e-05f, -1.649067369e-05f, -1.646996467e-05f, -1.644922940e-05f, -1.642846794e-05f,
--1.640768032e-05f, -1.638686657e-05f, -1.636602675e-05f, -1.634516089e-05f, -1.632426902e-05f, -1.630335118e-05f, -1.628240742e-05f, -1.626143778e-05f, -1.624044229e-05f, -1.621942098e-05f,
--1.619837392e-05f, -1.617730112e-05f, -1.615620263e-05f, -1.613507849e-05f, -1.611392874e-05f, -1.609275341e-05f, -1.607155256e-05f, -1.605032621e-05f, -1.602907441e-05f, -1.600779719e-05f,
--1.598649460e-05f, -1.596516668e-05f, -1.594381346e-05f, -1.592243498e-05f, -1.590103129e-05f, -1.587960243e-05f, -1.585814843e-05f, -1.583666933e-05f, -1.581516518e-05f, -1.579363601e-05f,
--1.577208187e-05f, -1.575050279e-05f, -1.572889881e-05f, -1.570726998e-05f, -1.568561633e-05f, -1.566393791e-05f, -1.564223476e-05f, -1.562050691e-05f, -1.559875440e-05f, -1.557697728e-05f,
--1.555517559e-05f, -1.553334937e-05f, -1.551149865e-05f, -1.548962348e-05f, -1.546772390e-05f, -1.544579994e-05f, -1.542385166e-05f, -1.540187909e-05f, -1.537988227e-05f, -1.535786124e-05f,
--1.533581605e-05f, -1.531374672e-05f, -1.529165332e-05f, -1.526953586e-05f, -1.524739441e-05f, -1.522522899e-05f, -1.520303965e-05f, -1.518082642e-05f, -1.515858936e-05f, -1.513632850e-05f,
--1.511404389e-05f, -1.509173555e-05f, -1.506940354e-05f, -1.504704790e-05f, -1.502466867e-05f, -1.500226588e-05f, -1.497983959e-05f, -1.495738982e-05f, -1.493491663e-05f, -1.491242006e-05f,
--1.488990014e-05f, -1.486735691e-05f, -1.484479043e-05f, -1.482220073e-05f, -1.479958785e-05f, -1.477695184e-05f, -1.475429273e-05f, -1.473161057e-05f, -1.470890539e-05f, -1.468617725e-05f,
--1.466342619e-05f, -1.464065224e-05f, -1.461785544e-05f, -1.459503585e-05f, -1.457219349e-05f, -1.454932842e-05f, -1.452644068e-05f, -1.450353030e-05f, -1.448059733e-05f, -1.445764181e-05f,
--1.443466379e-05f, -1.441166331e-05f, -1.438864040e-05f, -1.436559511e-05f, -1.434252749e-05f, -1.431943757e-05f, -1.429632540e-05f, -1.427319102e-05f, -1.425003447e-05f, -1.422685580e-05f,
--1.420365505e-05f, -1.418043225e-05f, -1.415718746e-05f, -1.413392072e-05f, -1.411063207e-05f, -1.408732154e-05f, -1.406398919e-05f, -1.404063506e-05f, -1.401725919e-05f, -1.399386162e-05f,
--1.397044240e-05f, -1.394700156e-05f, -1.392353916e-05f, -1.390005523e-05f, -1.387654981e-05f, -1.385302296e-05f, -1.382947471e-05f, -1.380590511e-05f, -1.378231420e-05f, -1.375870202e-05f,
--1.373506862e-05f, -1.371141404e-05f, -1.368773832e-05f, -1.366404150e-05f, -1.364032364e-05f, -1.361658476e-05f, -1.359282493e-05f, -1.356904417e-05f, -1.354524254e-05f, -1.352142007e-05f,
--1.349757682e-05f, -1.347371282e-05f, -1.344982811e-05f, -1.342592275e-05f, -1.340199677e-05f, -1.337805022e-05f, -1.335408314e-05f, -1.333009558e-05f, -1.330608758e-05f, -1.328205918e-05f,
--1.325801042e-05f, -1.323394136e-05f, -1.320985204e-05f, -1.318574249e-05f, -1.316161277e-05f, -1.313746291e-05f, -1.311329296e-05f, -1.308910297e-05f, -1.306489298e-05f, -1.304066303e-05f,
--1.301641317e-05f, -1.299214344e-05f, -1.296785388e-05f, -1.294354455e-05f, -1.291921548e-05f, -1.289486672e-05f, -1.287049831e-05f, -1.284611030e-05f, -1.282170273e-05f, -1.279727565e-05f,
--1.277282909e-05f, -1.274836312e-05f, -1.272387776e-05f, -1.269937306e-05f, -1.267484908e-05f, -1.265030584e-05f, -1.262574341e-05f, -1.260116182e-05f, -1.257656111e-05f, -1.255194134e-05f,
--1.252730254e-05f, -1.250264476e-05f, -1.247796805e-05f, -1.245327245e-05f, -1.242855801e-05f, -1.240382476e-05f, -1.237907276e-05f, -1.235430206e-05f, -1.232951268e-05f, -1.230470469e-05f,
--1.227987812e-05f, -1.225503303e-05f, -1.223016944e-05f, -1.220528742e-05f, -1.218038701e-05f, -1.215546824e-05f, -1.213053117e-05f, -1.210557584e-05f, -1.208060230e-05f, -1.205561059e-05f,
--1.203060075e-05f, -1.200557284e-05f, -1.198052689e-05f, -1.195546296e-05f, -1.193038109e-05f, -1.190528132e-05f, -1.188016369e-05f, -1.185502827e-05f, -1.182987508e-05f, -1.180470418e-05f,
--1.177951560e-05f, -1.175430941e-05f, -1.172908563e-05f, -1.170384433e-05f, -1.167858554e-05f, -1.165330930e-05f, -1.162801567e-05f, -1.160270469e-05f, -1.157737641e-05f, -1.155203087e-05f,
--1.152666811e-05f, -1.150128819e-05f, -1.147589115e-05f, -1.145047704e-05f, -1.142504589e-05f, -1.139959776e-05f, -1.137413270e-05f, -1.134865074e-05f, -1.132315194e-05f, -1.129763633e-05f,
--1.127210398e-05f, -1.124655492e-05f, -1.122098919e-05f, -1.119540685e-05f, -1.116980795e-05f, -1.114419252e-05f, -1.111856061e-05f, -1.109291227e-05f, -1.106724755e-05f, -1.104156649e-05f,
--1.101586914e-05f, -1.099015554e-05f, -1.096442575e-05f, -1.093867980e-05f, -1.091291774e-05f, -1.088713963e-05f, -1.086134550e-05f, -1.083553540e-05f, -1.080970939e-05f, -1.078386749e-05f,
--1.075800978e-05f, -1.073213628e-05f, -1.070624704e-05f, -1.068034212e-05f, -1.065442155e-05f, -1.062848539e-05f, -1.060253368e-05f, -1.057656647e-05f, -1.055058381e-05f, -1.052458573e-05f,
--1.049857230e-05f, -1.047254355e-05f, -1.044649953e-05f, -1.042044029e-05f, -1.039436588e-05f, -1.036827633e-05f, -1.034217171e-05f, -1.031605205e-05f, -1.028991741e-05f, -1.026376782e-05f,
--1.023760334e-05f, -1.021142402e-05f, -1.018522989e-05f, -1.015902102e-05f, -1.013279743e-05f, -1.010655919e-05f, -1.008030634e-05f, -1.005403892e-05f, -1.002775699e-05f, -1.000146058e-05f,
--9.975149757e-06f, -9.948824554e-06f, -9.922485021e-06f, -9.896131207e-06f, -9.869763159e-06f, -9.843380923e-06f, -9.816984548e-06f, -9.790574080e-06f, -9.764149566e-06f, -9.737711055e-06f,
--9.711258592e-06f, -9.684792226e-06f, -9.658312004e-06f, -9.631817974e-06f, -9.605310182e-06f, -9.578788676e-06f, -9.552253504e-06f, -9.525704713e-06f, -9.499142350e-06f, -9.472566463e-06f,
--9.445977099e-06f, -9.419374307e-06f, -9.392758133e-06f, -9.366128625e-06f, -9.339485831e-06f, -9.312829798e-06f, -9.286160574e-06f, -9.259478206e-06f, -9.232782743e-06f, -9.206074231e-06f,
--9.179352719e-06f, -9.152618254e-06f, -9.125870883e-06f, -9.099110656e-06f, -9.072337619e-06f, -9.045551820e-06f, -9.018753306e-06f, -8.991942127e-06f, -8.965118329e-06f, -8.938281961e-06f,
--8.911433070e-06f, -8.884571704e-06f, -8.857697911e-06f, -8.830811738e-06f, -8.803913235e-06f, -8.777002448e-06f, -8.750079426e-06f, -8.723144217e-06f, -8.696196868e-06f, -8.669237428e-06f,
--8.642265945e-06f, -8.615282466e-06f, -8.588287040e-06f, -8.561279715e-06f, -8.534260538e-06f, -8.507229559e-06f, -8.480186824e-06f, -8.453132383e-06f, -8.426066283e-06f, -8.398988573e-06f,
--8.371899300e-06f, -8.344798512e-06f, -8.317686259e-06f, -8.290562588e-06f, -8.263427548e-06f, -8.236281186e-06f, -8.209123551e-06f, -8.181954691e-06f, -8.154774654e-06f, -8.127583490e-06f,
--8.100381245e-06f, -8.073167969e-06f, -8.045943709e-06f, -8.018708514e-06f, -7.991462433e-06f, -7.964205514e-06f, -7.936937805e-06f, -7.909659354e-06f, -7.882370211e-06f, -7.855070422e-06f,
--7.827760038e-06f, -7.800439106e-06f, -7.773107675e-06f, -7.745765793e-06f, -7.718413509e-06f, -7.691050871e-06f, -7.663677928e-06f, -7.636294728e-06f, -7.608901320e-06f, -7.581497753e-06f,
--7.554084074e-06f, -7.526660334e-06f, -7.499226579e-06f, -7.471782859e-06f, -7.444329223e-06f, -7.416865718e-06f, -7.389392394e-06f, -7.361909300e-06f, -7.334416483e-06f, -7.306913994e-06f,
--7.279401879e-06f, -7.251880189e-06f, -7.224348971e-06f, -7.196808275e-06f, -7.169258149e-06f, -7.141698642e-06f, -7.114129803e-06f, -7.086551680e-06f, -7.058964322e-06f, -7.031367779e-06f,
--7.003762098e-06f, -6.976147329e-06f, -6.948523520e-06f, -6.920890721e-06f, -6.893248980e-06f, -6.865598345e-06f, -6.837938867e-06f, -6.810270593e-06f, -6.782593573e-06f, -6.754907856e-06f,
--6.727213489e-06f, -6.699510523e-06f, -6.671799006e-06f, -6.644078988e-06f, -6.616350516e-06f, -6.588613640e-06f, -6.560868410e-06f, -6.533114873e-06f, -6.505353079e-06f, -6.477583077e-06f,
--6.449804915e-06f, -6.422018644e-06f, -6.394224312e-06f, -6.366421967e-06f, -6.338611659e-06f, -6.310793437e-06f, -6.282967351e-06f, -6.255133448e-06f, -6.227291778e-06f, -6.199442390e-06f,
--6.171585334e-06f, -6.143720658e-06f, -6.115848411e-06f, -6.087968643e-06f, -6.060081402e-06f, -6.032186738e-06f, -6.004284700e-06f, -5.976375337e-06f, -5.948458698e-06f, -5.920534832e-06f,
--5.892603789e-06f, -5.864665617e-06f, -5.836720366e-06f, -5.808768084e-06f, -5.780808822e-06f, -5.752842628e-06f, -5.724869551e-06f, -5.696889641e-06f, -5.668902947e-06f, -5.640909518e-06f,
--5.612909403e-06f, -5.584902651e-06f, -5.556889312e-06f, -5.528869435e-06f, -5.500843069e-06f, -5.472810264e-06f, -5.444771068e-06f, -5.416725531e-06f, -5.388673703e-06f, -5.360615632e-06f,
--5.332551367e-06f, -5.304480958e-06f, -5.276404455e-06f, -5.248321906e-06f, -5.220233362e-06f, -5.192138870e-06f, -5.164038481e-06f, -5.135932243e-06f, -5.107820207e-06f, -5.079702421e-06f,
--5.051578935e-06f, -5.023449797e-06f, -4.995315058e-06f, -4.967174767e-06f, -4.939028973e-06f, -4.910877726e-06f, -4.882721074e-06f, -4.854559067e-06f, -4.826391754e-06f, -4.798219186e-06f,
--4.770041410e-06f, -4.741858477e-06f, -4.713670436e-06f, -4.685477337e-06f, -4.657279228e-06f, -4.629076159e-06f, -4.600868179e-06f, -4.572655338e-06f, -4.544437686e-06f, -4.516215271e-06f,
--4.487988143e-06f, -4.459756351e-06f, -4.431519946e-06f, -4.403278975e-06f, -4.375033489e-06f, -4.346783537e-06f, -4.318529168e-06f, -4.290270433e-06f, -4.262007379e-06f, -4.233740057e-06f,
--4.205468516e-06f, -4.177192806e-06f, -4.148912976e-06f, -4.120629075e-06f, -4.092341152e-06f, -4.064049258e-06f, -4.035753442e-06f, -4.007453752e-06f, -3.979150239e-06f, -3.950842952e-06f,
--3.922531941e-06f, -3.894217254e-06f, -3.865898941e-06f, -3.837577052e-06f, -3.809251636e-06f, -3.780922743e-06f, -3.752590422e-06f, -3.724254722e-06f, -3.695915692e-06f, -3.667573384e-06f,
--3.639227844e-06f, -3.610879124e-06f, -3.582527273e-06f, -3.554172340e-06f, -3.525814374e-06f, -3.497453425e-06f, -3.469089542e-06f, -3.440722776e-06f, -3.412353174e-06f, -3.383980787e-06f,
--3.355605665e-06f, -3.327227856e-06f, -3.298847410e-06f, -3.270464376e-06f, -3.242078804e-06f, -3.213690743e-06f, -3.185300244e-06f, -3.156907354e-06f, -3.128512124e-06f, -3.100114603e-06f,
--3.071714840e-06f, -3.043312886e-06f, -3.014908788e-06f, -2.986502597e-06f, -2.958094363e-06f, -2.929684134e-06f, -2.901271960e-06f, -2.872857890e-06f, -2.844441974e-06f, -2.816024262e-06f,
--2.787604801e-06f, -2.759183643e-06f, -2.730760837e-06f, -2.702336431e-06f, -2.673910475e-06f, -2.645483019e-06f, -2.617054112e-06f, -2.588623804e-06f, -2.560192143e-06f, -2.531759179e-06f,
--2.503324962e-06f, -2.474889541e-06f, -2.446452965e-06f, -2.418015284e-06f, -2.389576547e-06f, -2.361136803e-06f, -2.332696102e-06f, -2.304254493e-06f, -2.275812026e-06f, -2.247368749e-06f,
--2.218924712e-06f, -2.190479965e-06f, -2.162034557e-06f, -2.133588537e-06f, -2.105141954e-06f, -2.076694858e-06f, -2.048247299e-06f, -2.019799324e-06f, -1.991350985e-06f, -1.962902329e-06f,
--1.934453407e-06f, -1.906004268e-06f, -1.877554960e-06f, -1.849105533e-06f, -1.820656038e-06f, -1.792206521e-06f, -1.763757034e-06f, -1.735307625e-06f, -1.706858344e-06f, -1.678409239e-06f,
--1.649960361e-06f, -1.621511757e-06f, -1.593063479e-06f, -1.564615574e-06f, -1.536168091e-06f, -1.507721081e-06f, -1.479274593e-06f, -1.450828675e-06f, -1.422383377e-06f, -1.393938747e-06f,
--1.365494836e-06f, -1.337051693e-06f, -1.308609365e-06f, -1.280167904e-06f, -1.251727357e-06f, -1.223287774e-06f, -1.194849204e-06f, -1.166411697e-06f, -1.137975300e-06f, -1.109540065e-06f,
--1.081106039e-06f, -1.052673271e-06f, -1.024241812e-06f, -9.958117090e-07f, -9.673830123e-07f, -9.389557706e-07f, -9.105300330e-07f, -8.821058486e-07f, -8.536832664e-07f, -8.252623355e-07f,
--7.968431049e-07f, -7.684256236e-07f, -7.400099406e-07f, -7.115961050e-07f, -6.831841657e-07f, -6.547741717e-07f, -6.263661721e-07f, -5.979602158e-07f, -5.695563517e-07f, -5.411546289e-07f,
--5.127550962e-07f, -4.843578026e-07f, -4.559627970e-07f, -4.275701284e-07f, -3.991798456e-07f, -3.707919976e-07f, -3.424066332e-07f, -3.140238013e-07f, -2.856435509e-07f, -2.572659307e-07f,
--2.288909896e-07f, -2.005187765e-07f, -1.721493401e-07f, -1.437827294e-07f, -1.154189930e-07f, -8.705817988e-08f, -5.870033875e-08f, -3.034551840e-08f, -1.993767599e-09f, 2.635486489e-08f,
-5.470033033e-08f, 8.304257998e-08f, 1.113815651e-07f, 1.397172370e-07f, 1.680495470e-07f, 1.963784463e-07f, 2.247038864e-07f, 2.530258184e-07f, 2.813441938e-07f, 3.096589640e-07f,
-3.379700802e-07f, 3.662774939e-07f, 3.945811565e-07f, 4.228810192e-07f, 4.511770337e-07f, 4.794691512e-07f, 5.077573233e-07f, 5.360415013e-07f, 5.643216368e-07f, 5.925976812e-07f,
-6.208695860e-07f, 6.491373026e-07f, 6.774007827e-07f, 7.056599777e-07f, 7.339148391e-07f, 7.621653186e-07f, 7.904113676e-07f, 8.186529378e-07f, 8.468899807e-07f, 8.751224479e-07f,
-9.033502911e-07f, 9.315734619e-07f, 9.597919119e-07f, 9.880055927e-07f, 1.016214456e-06f, 1.044418454e-06f, 1.072617537e-06f, 1.100811659e-06f, 1.129000769e-06f, 1.157184821e-06f,
-1.185363765e-06f, 1.213537554e-06f, 1.241706140e-06f, 1.269869473e-06f, 1.298027507e-06f, 1.326180192e-06f, 1.354327482e-06f, 1.382469326e-06f, 1.410605678e-06f, 1.438736489e-06f,
-1.466861712e-06f, 1.494981297e-06f, 1.523095198e-06f, 1.551203365e-06f, 1.579305751e-06f, 1.607402308e-06f, 1.635492988e-06f, 1.663577743e-06f, 1.691656525e-06f, 1.719729285e-06f,
-1.747795977e-06f, 1.775856552e-06f, 1.803910961e-06f, 1.831959158e-06f, 1.860001094e-06f, 1.888036722e-06f, 1.916065993e-06f, 1.944088860e-06f, 1.972105275e-06f, 2.000115190e-06f,
-2.028118558e-06f, 2.056115330e-06f, 2.084105458e-06f, 2.112088896e-06f, 2.140065595e-06f, 2.168035508e-06f, 2.195998587e-06f, 2.223954784e-06f, 2.251904052e-06f, 2.279846343e-06f,
-2.307781609e-06f, 2.335709803e-06f, 2.363630877e-06f, 2.391544784e-06f, 2.419451476e-06f, 2.447350905e-06f, 2.475243025e-06f, 2.503127787e-06f, 2.531005144e-06f, 2.558875048e-06f,
-2.586737453e-06f, 2.614592311e-06f, 2.642439574e-06f, 2.670279195e-06f, 2.698111126e-06f, 2.725935321e-06f, 2.753751732e-06f, 2.781560311e-06f, 2.809361012e-06f, 2.837153786e-06f,
-2.864938588e-06f, 2.892715369e-06f, 2.920484082e-06f, 2.948244681e-06f, 2.975997117e-06f, 3.003741344e-06f, 3.031477315e-06f, 3.059204982e-06f, 3.086924299e-06f, 3.114635218e-06f,
-3.142337693e-06f, 3.170031676e-06f, 3.197717120e-06f, 3.225393978e-06f, 3.253062203e-06f, 3.280721749e-06f, 3.308372568e-06f, 3.336014613e-06f, 3.363647838e-06f, 3.391272196e-06f,
-3.418887639e-06f, 3.446494122e-06f, 3.474091596e-06f, 3.501680016e-06f, 3.529259335e-06f, 3.556829505e-06f, 3.584390480e-06f, 3.611942214e-06f, 3.639484659e-06f, 3.667017769e-06f,
-3.694541498e-06f, 3.722055798e-06f, 3.749560623e-06f, 3.777055927e-06f, 3.804541663e-06f, 3.832017784e-06f, 3.859484245e-06f, 3.886940997e-06f, 3.914387996e-06f, 3.941825194e-06f,
-3.969252544e-06f, 3.996670002e-06f, 4.024077520e-06f, 4.051475052e-06f, 4.078862551e-06f, 4.106239971e-06f, 4.133607266e-06f, 4.160964390e-06f, 4.188311297e-06f, 4.215647939e-06f,
-4.242974271e-06f, 4.270290248e-06f, 4.297595821e-06f, 4.324890946e-06f, 4.352175577e-06f, 4.379449667e-06f, 4.406713170e-06f, 4.433966040e-06f, 4.461208231e-06f, 4.488439697e-06f,
-4.515660393e-06f, 4.542870271e-06f, 4.570069287e-06f, 4.597257395e-06f, 4.624434547e-06f, 4.651600700e-06f, 4.678755806e-06f, 4.705899820e-06f, 4.733032696e-06f, 4.760154389e-06f,
-4.787264853e-06f, 4.814364041e-06f, 4.841451909e-06f, 4.868528411e-06f, 4.895593500e-06f, 4.922647132e-06f, 4.949689261e-06f, 4.976719841e-06f, 5.003738827e-06f, 5.030746173e-06f,
-5.057741834e-06f, 5.084725764e-06f, 5.111697918e-06f, 5.138658251e-06f, 5.165606716e-06f, 5.192543269e-06f, 5.219467865e-06f, 5.246380457e-06f, 5.273281002e-06f, 5.300169453e-06f,
-5.327045765e-06f, 5.353909893e-06f, 5.380761792e-06f, 5.407601417e-06f, 5.434428723e-06f, 5.461243664e-06f, 5.488046196e-06f, 5.514836273e-06f, 5.541613850e-06f, 5.568378883e-06f,
-5.595131326e-06f, 5.621871135e-06f, 5.648598265e-06f, 5.675312670e-06f, 5.702014306e-06f, 5.728703128e-06f, 5.755379091e-06f, 5.782042151e-06f, 5.808692262e-06f, 5.835329381e-06f,
-5.861953461e-06f, 5.888564460e-06f, 5.915162331e-06f, 5.941747030e-06f, 5.968318514e-06f, 5.994876736e-06f, 6.021421654e-06f, 6.047953221e-06f, 6.074471395e-06f, 6.100976129e-06f,
-6.127467380e-06f, 6.153945104e-06f, 6.180409256e-06f, 6.206859792e-06f, 6.233296667e-06f, 6.259719838e-06f, 6.286129259e-06f, 6.312524887e-06f, 6.338906678e-06f, 6.365274587e-06f,
-6.391628570e-06f, 6.417968584e-06f, 6.444294583e-06f, 6.470606525e-06f, 6.496904365e-06f, 6.523188058e-06f, 6.549457562e-06f, 6.575712832e-06f, 6.601953825e-06f, 6.628180495e-06f,
-6.654392801e-06f, 6.680590697e-06f, 6.706774140e-06f, 6.732943086e-06f, 6.759097492e-06f, 6.785237314e-06f, 6.811362508e-06f, 6.837473030e-06f, 6.863568837e-06f, 6.889649886e-06f,
-6.915716133e-06f, 6.941767534e-06f, 6.967804045e-06f, 6.993825625e-06f, 7.019832228e-06f, 7.045823812e-06f, 7.071800333e-06f, 7.097761748e-06f, 7.123708014e-06f, 7.149639087e-06f,
-7.175554925e-06f, 7.201455483e-06f, 7.227340719e-06f, 7.253210590e-06f, 7.279065052e-06f, 7.304904063e-06f, 7.330727580e-06f, 7.356535559e-06f, 7.382327957e-06f, 7.408104732e-06f,
-7.433865840e-06f, 7.459611239e-06f, 7.485340886e-06f, 7.511054739e-06f, 7.536752753e-06f, 7.562434887e-06f, 7.588101098e-06f, 7.613751343e-06f, 7.639385579e-06f, 7.665003764e-06f,
-7.690605855e-06f, 7.716191811e-06f, 7.741761587e-06f, 7.767315142e-06f, 7.792852433e-06f, 7.818373418e-06f, 7.843878054e-06f, 7.869366299e-06f, 7.894838111e-06f, 7.920293447e-06f,
-7.945732266e-06f, 7.971154524e-06f, 7.996560180e-06f, 8.021949192e-06f, 8.047321517e-06f, 8.072677113e-06f, 8.098015939e-06f, 8.123337952e-06f, 8.148643110e-06f, 8.173931371e-06f,
-8.199202694e-06f, 8.224457036e-06f, 8.249694355e-06f, 8.274914611e-06f, 8.300117760e-06f, 8.325303762e-06f, 8.350472574e-06f, 8.375624155e-06f, 8.400758463e-06f, 8.425875457e-06f,
-8.450975094e-06f, 8.476057334e-06f, 8.501122135e-06f, 8.526169455e-06f, 8.551199253e-06f, 8.576211488e-06f, 8.601206118e-06f, 8.626183102e-06f, 8.651142398e-06f, 8.676083966e-06f,
-8.701007763e-06f, 8.725913750e-06f, 8.750801884e-06f, 8.775672124e-06f, 8.800524430e-06f, 8.825358761e-06f, 8.850175074e-06f, 8.874973331e-06f, 8.899753488e-06f, 8.924515506e-06f,
-8.949259344e-06f, 8.973984960e-06f, 8.998692315e-06f, 9.023381367e-06f, 9.048052075e-06f, 9.072704399e-06f, 9.097338298e-06f, 9.121953731e-06f, 9.146550659e-06f, 9.171129040e-06f,
-9.195688834e-06f, 9.220230000e-06f, 9.244752498e-06f, 9.269256287e-06f, 9.293741328e-06f, 9.318207579e-06f, 9.342655001e-06f, 9.367083553e-06f, 9.391493196e-06f, 9.415883888e-06f,
-9.440255590e-06f, 9.464608261e-06f, 9.488941862e-06f, 9.513256353e-06f, 9.537551693e-06f, 9.561827843e-06f, 9.586084762e-06f, 9.610322411e-06f, 9.634540750e-06f, 9.658739739e-06f,
-9.682919338e-06f, 9.707079508e-06f, 9.731220209e-06f, 9.755341401e-06f, 9.779443045e-06f, 9.803525101e-06f, 9.827587529e-06f, 9.851630290e-06f, 9.875653345e-06f, 9.899656654e-06f,
-9.923640178e-06f, 9.947603877e-06f, 9.971547712e-06f, 9.995471644e-06f, 1.001937563e-05f, 1.004325964e-05f, 1.006712363e-05f, 1.009096756e-05f, 1.011479138e-05f, 1.013859507e-05f,
-1.016237859e-05f, 1.018614189e-05f, 1.020988493e-05f, 1.023360768e-05f, 1.025731009e-05f, 1.028099214e-05f, 1.030465377e-05f, 1.032829496e-05f, 1.035191566e-05f, 1.037551583e-05f,
-1.039909544e-05f, 1.042265444e-05f, 1.044619280e-05f, 1.046971048e-05f, 1.049320745e-05f, 1.051668365e-05f, 1.054013906e-05f, 1.056357364e-05f, 1.058698734e-05f, 1.061038014e-05f,
-1.063375198e-05f, 1.065710284e-05f, 1.068043267e-05f, 1.070374144e-05f, 1.072702911e-05f, 1.075029564e-05f, 1.077354100e-05f, 1.079676514e-05f, 1.081996802e-05f, 1.084314962e-05f,
-1.086630988e-05f, 1.088944878e-05f, 1.091256628e-05f, 1.093566234e-05f, 1.095873691e-05f, 1.098178997e-05f, 1.100482148e-05f, 1.102783139e-05f, 1.105081968e-05f, 1.107378629e-05f,
-1.109673121e-05f, 1.111965438e-05f, 1.114255577e-05f, 1.116543535e-05f, 1.118829307e-05f, 1.121112891e-05f, 1.123394282e-05f, 1.125673476e-05f, 1.127950470e-05f, 1.130225260e-05f,
-1.132497843e-05f, 1.134768214e-05f, 1.137036371e-05f, 1.139302309e-05f, 1.141566024e-05f, 1.143827514e-05f, 1.146086774e-05f, 1.148343801e-05f, 1.150598590e-05f, 1.152851140e-05f,
-1.155101444e-05f, 1.157349501e-05f, 1.159595307e-05f, 1.161838857e-05f, 1.164080148e-05f, 1.166319177e-05f, 1.168555940e-05f, 1.170790433e-05f, 1.173022652e-05f, 1.175252595e-05f,
-1.177480257e-05f, 1.179705635e-05f, 1.181928725e-05f, 1.184149524e-05f, 1.186368028e-05f, 1.188584233e-05f, 1.190798136e-05f, 1.193009734e-05f, 1.195219022e-05f, 1.197425997e-05f,
-1.199630656e-05f, 1.201832995e-05f, 1.204033010e-05f, 1.206230698e-05f, 1.208426056e-05f, 1.210619079e-05f, 1.212809765e-05f, 1.214998109e-05f, 1.217184108e-05f, 1.219367760e-05f,
-1.221549059e-05f, 1.223728003e-05f, 1.225904588e-05f, 1.228078811e-05f, 1.230250668e-05f, 1.232420155e-05f, 1.234587270e-05f, 1.236752008e-05f, 1.238914366e-05f, 1.241074341e-05f,
-1.243231929e-05f, 1.245387127e-05f, 1.247539931e-05f, 1.249690338e-05f, 1.251838344e-05f, 1.253983946e-05f, 1.256127140e-05f, 1.258267924e-05f, 1.260406293e-05f, 1.262542244e-05f,
-1.264675773e-05f, 1.266806878e-05f, 1.268935555e-05f, 1.271061800e-05f, 1.273185610e-05f, 1.275306982e-05f, 1.277425911e-05f, 1.279542396e-05f, 1.281656432e-05f, 1.283768016e-05f,
-1.285877144e-05f, 1.287983814e-05f, 1.290088021e-05f, 1.292189763e-05f, 1.294289037e-05f, 1.296385837e-05f, 1.298480163e-05f, 1.300572009e-05f, 1.302661373e-05f, 1.304748251e-05f,
-1.306832640e-05f, 1.308914537e-05f, 1.310993938e-05f, 1.313070840e-05f, 1.315145240e-05f, 1.317217134e-05f, 1.319286520e-05f, 1.321353393e-05f, 1.323417750e-05f, 1.325479589e-05f,
-1.327538905e-05f, 1.329595696e-05f, 1.331649959e-05f, 1.333701689e-05f, 1.335750884e-05f, 1.337797541e-05f, 1.339841655e-05f, 1.341883225e-05f, 1.343922247e-05f, 1.345958716e-05f,
-1.347992631e-05f, 1.350023988e-05f, 1.352052784e-05f, 1.354079015e-05f, 1.356102679e-05f, 1.358123771e-05f, 1.360142290e-05f, 1.362158231e-05f, 1.364171591e-05f, 1.366182368e-05f,
-1.368190557e-05f, 1.370196157e-05f, 1.372199163e-05f, 1.374199572e-05f, 1.376197382e-05f, 1.378192589e-05f, 1.380185190e-05f, 1.382175182e-05f, 1.384162561e-05f, 1.386147325e-05f,
-1.388129470e-05f, 1.390108993e-05f, 1.392085891e-05f, 1.394060161e-05f, 1.396031800e-05f, 1.398000805e-05f, 1.399967172e-05f, 1.401930899e-05f, 1.403891981e-05f, 1.405850418e-05f,
-1.407806204e-05f, 1.409759337e-05f, 1.411709814e-05f, 1.413657632e-05f, 1.415602788e-05f, 1.417545278e-05f, 1.419485100e-05f, 1.421422251e-05f, 1.423356727e-05f, 1.425288525e-05f,
-1.427217643e-05f, 1.429144078e-05f, 1.431067825e-05f, 1.432988883e-05f, 1.434907248e-05f, 1.436822918e-05f, 1.438735888e-05f, 1.440646157e-05f, 1.442553721e-05f, 1.444458577e-05f,
-1.446360722e-05f, 1.448260154e-05f, 1.450156868e-05f, 1.452050863e-05f, 1.453942135e-05f, 1.455830682e-05f, 1.457716499e-05f, 1.459599585e-05f, 1.461479936e-05f, 1.463357550e-05f,
-1.465232423e-05f, 1.467104553e-05f, 1.468973936e-05f, 1.470840570e-05f, 1.472704452e-05f, 1.474565578e-05f, 1.476423947e-05f, 1.478279554e-05f, 1.480132397e-05f, 1.481982474e-05f,
-1.483829781e-05f, 1.485674315e-05f, 1.487516073e-05f, 1.489355053e-05f, 1.491191252e-05f, 1.493024667e-05f, 1.494855295e-05f, 1.496683132e-05f, 1.498508178e-05f, 1.500330427e-05f,
-1.502149878e-05f, 1.503966528e-05f, 1.505780373e-05f, 1.507591412e-05f, 1.509399641e-05f, 1.511205057e-05f, 1.513007658e-05f, 1.514807441e-05f, 1.516604403e-05f, 1.518398540e-05f,
-1.520189852e-05f, 1.521978333e-05f, 1.523763983e-05f, 1.525546798e-05f, 1.527326774e-05f, 1.529103911e-05f, 1.530878204e-05f, 1.532649651e-05f, 1.534418249e-05f, 1.536183996e-05f,
-1.537946888e-05f, 1.539706924e-05f, 1.541464099e-05f, 1.543218413e-05f, 1.544969861e-05f, 1.546718441e-05f, 1.548464150e-05f, 1.550206986e-05f, 1.551946946e-05f, 1.553684028e-05f,
-1.555418228e-05f, 1.557149544e-05f, 1.558877973e-05f, 1.560603512e-05f, 1.562326160e-05f, 1.564045913e-05f, 1.565762768e-05f, 1.567476723e-05f, 1.569187776e-05f, 1.570895923e-05f,
-1.572601162e-05f, 1.574303490e-05f, 1.576002906e-05f, 1.577699405e-05f, 1.579392986e-05f, 1.581083645e-05f, 1.582771381e-05f, 1.584456191e-05f, 1.586138071e-05f, 1.587817021e-05f,
-1.589493036e-05f, 1.591166114e-05f, 1.592836253e-05f, 1.594503451e-05f, 1.596167704e-05f, 1.597829010e-05f, 1.599487366e-05f, 1.601142771e-05f, 1.602795221e-05f, 1.604444714e-05f,
-1.606091247e-05f, 1.607734818e-05f, 1.609375425e-05f, 1.611013064e-05f, 1.612647734e-05f, 1.614279431e-05f, 1.615908154e-05f, 1.617533899e-05f, 1.619156665e-05f, 1.620776449e-05f,
-1.622393248e-05f, 1.624007060e-05f, 1.625617883e-05f, 1.627225713e-05f, 1.628830549e-05f, 1.630432388e-05f, 1.632031228e-05f, 1.633627066e-05f, 1.635219900e-05f, 1.636809727e-05f,
-1.638396545e-05f, 1.639980351e-05f, 1.641561144e-05f, 1.643138920e-05f, 1.644713678e-05f, 1.646285414e-05f, 1.647854128e-05f, 1.649419815e-05f, 1.650982474e-05f, 1.652542102e-05f,
-1.654098698e-05f, 1.655652258e-05f, 1.657202780e-05f, 1.658750262e-05f, 1.660294703e-05f, 1.661836098e-05f, 1.663374446e-05f, 1.664909745e-05f, 1.666441992e-05f, 1.667971185e-05f,
-1.669497322e-05f, 1.671020400e-05f, 1.672540418e-05f, 1.674057372e-05f, 1.675571260e-05f, 1.677082081e-05f, 1.678589832e-05f, 1.680094510e-05f, 1.681596114e-05f, 1.683094641e-05f,
-1.684590089e-05f, 1.686082455e-05f, 1.687571738e-05f, 1.689057935e-05f, 1.690541044e-05f, 1.692021063e-05f, 1.693497989e-05f, 1.694971820e-05f, 1.696442555e-05f, 1.697910190e-05f,
-1.699374724e-05f, 1.700836154e-05f, 1.702294479e-05f, 1.703749696e-05f, 1.705201802e-05f, 1.706650797e-05f, 1.708096677e-05f, 1.709539440e-05f, 1.710979085e-05f, 1.712415608e-05f,
-1.713849009e-05f, 1.715279285e-05f, 1.716706433e-05f, 1.718130452e-05f, 1.719551339e-05f, 1.720969093e-05f, 1.722383711e-05f, 1.723795191e-05f, 1.725203531e-05f, 1.726608729e-05f,
-1.728010783e-05f, 1.729409691e-05f, 1.730805450e-05f, 1.732198059e-05f, 1.733587516e-05f, 1.734973818e-05f, 1.736356963e-05f, 1.737736950e-05f, 1.739113777e-05f, 1.740487441e-05f,
-1.741857940e-05f, 1.743225272e-05f, 1.744589436e-05f, 1.745950429e-05f, 1.747308249e-05f, 1.748662895e-05f, 1.750014363e-05f, 1.751362653e-05f, 1.752707763e-05f, 1.754049689e-05f,
-1.755388431e-05f, 1.756723987e-05f, 1.758056354e-05f, 1.759385530e-05f, 1.760711514e-05f, 1.762034303e-05f, 1.763353896e-05f, 1.764670291e-05f, 1.765983486e-05f, 1.767293478e-05f,
-1.768600266e-05f, 1.769903849e-05f, 1.771204223e-05f, 1.772501388e-05f, 1.773795341e-05f, 1.775086081e-05f, 1.776373605e-05f, 1.777657912e-05f, 1.778939000e-05f, 1.780216867e-05f,
-1.781491511e-05f, 1.782762930e-05f, 1.784031123e-05f, 1.785296087e-05f, 1.786557821e-05f, 1.787816323e-05f, 1.789071591e-05f, 1.790323623e-05f, 1.791572418e-05f, 1.792817973e-05f,
-1.794060288e-05f, 1.795299359e-05f, 1.796535186e-05f, 1.797767767e-05f, 1.798997099e-05f, 1.800223181e-05f, 1.801446011e-05f, 1.802665588e-05f, 1.803881910e-05f, 1.805094974e-05f,
-1.806304780e-05f, 1.807511325e-05f, 1.808714608e-05f, 1.809914627e-05f, 1.811111380e-05f, 1.812304866e-05f, 1.813495083e-05f, 1.814682029e-05f, 1.815865703e-05f, 1.817046102e-05f,
-1.818223226e-05f, 1.819397072e-05f, 1.820567639e-05f, 1.821734925e-05f, 1.822898928e-05f, 1.824059648e-05f, 1.825217081e-05f, 1.826371227e-05f, 1.827522084e-05f, 1.828669650e-05f,
-1.829813924e-05f, 1.830954904e-05f, 1.832092589e-05f, 1.833226976e-05f, 1.834358064e-05f, 1.835485852e-05f, 1.836610338e-05f, 1.837731521e-05f, 1.838849399e-05f, 1.839963969e-05f,
-1.841075232e-05f, 1.842183185e-05f, 1.843287826e-05f, 1.844389155e-05f, 1.845487169e-05f, 1.846581867e-05f, 1.847673247e-05f, 1.848761309e-05f, 1.849846050e-05f, 1.850927469e-05f,
-1.852005565e-05f, 1.853080335e-05f, 1.854151779e-05f, 1.855219895e-05f, 1.856284681e-05f, 1.857346136e-05f, 1.858404259e-05f, 1.859459048e-05f, 1.860510502e-05f, 1.861558618e-05f,
-1.862603397e-05f, 1.863644836e-05f, 1.864682933e-05f, 1.865717688e-05f, 1.866749099e-05f, 1.867777165e-05f, 1.868801884e-05f, 1.869823254e-05f, 1.870841275e-05f, 1.871855945e-05f,
-1.872867263e-05f, 1.873875226e-05f, 1.874879835e-05f, 1.875881087e-05f, 1.876878981e-05f, 1.877873516e-05f, 1.878864691e-05f, 1.879852503e-05f, 1.880836952e-05f, 1.881818037e-05f,
-1.882795755e-05f, 1.883770107e-05f, 1.884741090e-05f, 1.885708703e-05f, 1.886672945e-05f, 1.887633814e-05f, 1.888591309e-05f, 1.889545430e-05f, 1.890496174e-05f, 1.891443541e-05f,
-1.892387529e-05f, 1.893328136e-05f, 1.894265362e-05f, 1.895199206e-05f, 1.896129666e-05f, 1.897056741e-05f, 1.897980429e-05f, 1.898900730e-05f, 1.899817642e-05f, 1.900731164e-05f,
-1.901641295e-05f, 1.902548033e-05f, 1.903451378e-05f, 1.904351328e-05f, 1.905247882e-05f, 1.906141039e-05f, 1.907030798e-05f, 1.907917157e-05f, 1.908800116e-05f, 1.909679673e-05f,
-1.910555826e-05f, 1.911428576e-05f, 1.912297921e-05f, 1.913163859e-05f, 1.914026390e-05f, 1.914885513e-05f, 1.915741225e-05f, 1.916593527e-05f, 1.917442417e-05f, 1.918287894e-05f,
-1.919129957e-05f, 1.919968605e-05f, 1.920803837e-05f, 1.921635651e-05f, 1.922464047e-05f, 1.923289024e-05f, 1.924110580e-05f, 1.924928715e-05f, 1.925743427e-05f, 1.926554716e-05f,
-1.927362580e-05f, 1.928167018e-05f, 1.928968030e-05f, 1.929765615e-05f, 1.930559770e-05f, 1.931350496e-05f, 1.932137792e-05f, 1.932921656e-05f, 1.933702087e-05f, 1.934479085e-05f,
-1.935252648e-05f, 1.936022776e-05f, 1.936789467e-05f, 1.937552722e-05f, 1.938312537e-05f, 1.939068914e-05f, 1.939821850e-05f, 1.940571346e-05f, 1.941317399e-05f, 1.942060009e-05f,
-1.942799176e-05f, 1.943534898e-05f, 1.944267174e-05f, 1.944996004e-05f, 1.945721387e-05f, 1.946443321e-05f, 1.947161806e-05f, 1.947876841e-05f, 1.948588425e-05f, 1.949296558e-05f,
-1.950001238e-05f, 1.950702465e-05f, 1.951400237e-05f, 1.952094555e-05f, 1.952785417e-05f, 1.953472822e-05f, 1.954156770e-05f, 1.954837259e-05f, 1.955514289e-05f, 1.956187860e-05f,
-1.956857970e-05f, 1.957524618e-05f, 1.958187805e-05f, 1.958847528e-05f, 1.959503788e-05f, 1.960156583e-05f, 1.960805913e-05f, 1.961451777e-05f, 1.962094175e-05f, 1.962733105e-05f,
-1.963368567e-05f, 1.964000560e-05f, 1.964629084e-05f, 1.965254137e-05f, 1.965875720e-05f, 1.966493830e-05f, 1.967108469e-05f, 1.967719635e-05f, 1.968327326e-05f, 1.968931544e-05f,
-1.969532286e-05f, 1.970129553e-05f, 1.970723344e-05f, 1.971313658e-05f, 1.971900494e-05f, 1.972483852e-05f, 1.973063731e-05f, 1.973640130e-05f, 1.974213050e-05f, 1.974782489e-05f,
-1.975348446e-05f, 1.975910922e-05f, 1.976469915e-05f, 1.977025426e-05f, 1.977577452e-05f, 1.978125995e-05f, 1.978671053e-05f, 1.979212625e-05f, 1.979750712e-05f, 1.980285312e-05f,
-1.980816425e-05f, 1.981344051e-05f, 1.981868189e-05f, 1.982388838e-05f, 1.982905998e-05f, 1.983419669e-05f, 1.983929850e-05f, 1.984436540e-05f, 1.984939739e-05f, 1.985439447e-05f,
-1.985935663e-05f, 1.986428386e-05f, 1.986917616e-05f, 1.987403353e-05f, 1.987885596e-05f, 1.988364345e-05f, 1.988839599e-05f, 1.989311358e-05f, 1.989779621e-05f, 1.990244388e-05f,
-1.990705659e-05f, 1.991163433e-05f, 1.991617710e-05f, 1.992068489e-05f, 1.992515771e-05f, 1.992959553e-05f, 1.993399837e-05f, 1.993836622e-05f, 1.994269907e-05f, 1.994699692e-05f,
-1.995125977e-05f, 1.995548762e-05f, 1.995968045e-05f, 1.996383827e-05f, 1.996796108e-05f, 1.997204886e-05f, 1.997610163e-05f, 1.998011937e-05f, 1.998410207e-05f, 1.998804975e-05f,
-1.999196239e-05f, 1.999584000e-05f, 1.999968256e-05f, 2.000349008e-05f, 2.000726255e-05f, 2.001099998e-05f, 2.001470235e-05f, 2.001836967e-05f, 2.002200194e-05f, 2.002559914e-05f,
-2.002916129e-05f, 2.003268837e-05f, 2.003618039e-05f, 2.003963733e-05f, 2.004305921e-05f, 2.004644602e-05f, 2.004979775e-05f, 2.005311441e-05f, 2.005639599e-05f, 2.005964249e-05f,
-2.006285391e-05f, 2.006603025e-05f, 2.006917150e-05f, 2.007227767e-05f, 2.007534875e-05f, 2.007838474e-05f, 2.008138564e-05f, 2.008435145e-05f, 2.008728217e-05f, 2.009017779e-05f,
-2.009303832e-05f, 2.009586375e-05f, 2.009865409e-05f, 2.010140933e-05f, 2.010412946e-05f, 2.010681450e-05f, 2.010946444e-05f, 2.011207928e-05f, 2.011465902e-05f, 2.011720365e-05f,
-2.011971318e-05f, 2.012218761e-05f, 2.012462693e-05f, 2.012703115e-05f, 2.012940027e-05f, 2.013173428e-05f, 2.013403319e-05f, 2.013629699e-05f, 2.013852569e-05f, 2.014071928e-05f,
-2.014287777e-05f, 2.014500116e-05f, 2.014708944e-05f, 2.014914261e-05f, 2.015116069e-05f, 2.015314366e-05f, 2.015509152e-05f, 2.015700429e-05f, 2.015888195e-05f, 2.016072452e-05f,
-2.016253198e-05f, 2.016430434e-05f, 2.016604161e-05f, 2.016774378e-05f, 2.016941085e-05f, 2.017104282e-05f, 2.017263970e-05f, 2.017420149e-05f, 2.017572818e-05f, 2.017721979e-05f,
-2.017867630e-05f, 2.018009772e-05f, 2.018148406e-05f, 2.018283532e-05f, 2.018415148e-05f, 2.018543257e-05f, 2.018667858e-05f, 2.018788950e-05f, 2.018906535e-05f, 2.019020613e-05f,
-2.019131183e-05f, 2.019238246e-05f, 2.019341802e-05f, 2.019441852e-05f, 2.019538395e-05f, 2.019631431e-05f, 2.019720962e-05f, 2.019806987e-05f, 2.019889506e-05f, 2.019968520e-05f,
-2.020044028e-05f, 2.020116032e-05f, 2.020184532e-05f, 2.020249527e-05f, 2.020311018e-05f, 2.020369005e-05f, 2.020423489e-05f, 2.020474470e-05f, 2.020521948e-05f, 2.020565924e-05f,
-2.020606397e-05f, 2.020643368e-05f, 2.020676838e-05f, 2.020706807e-05f, 2.020733274e-05f, 2.020756241e-05f, 2.020775708e-05f, 2.020791675e-05f, 2.020804143e-05f, 2.020813111e-05f,
-2.020818581e-05f, 2.020820552e-05f, 2.020819025e-05f, 2.020814001e-05f, 2.020805479e-05f, 2.020793461e-05f, 2.020777946e-05f, 2.020758935e-05f, 2.020736429e-05f, 2.020710428e-05f,
-2.020680932e-05f, 2.020647941e-05f, 2.020611457e-05f, 2.020571480e-05f, 2.020528009e-05f, 2.020481046e-05f, 2.020430592e-05f, 2.020376645e-05f, 2.020319208e-05f, 2.020258280e-05f,
-2.020193862e-05f, 2.020125955e-05f, 2.020054558e-05f, 2.019979673e-05f, 2.019901300e-05f, 2.019819440e-05f, 2.019734093e-05f, 2.019645259e-05f, 2.019552939e-05f, 2.019457134e-05f,
-2.019357845e-05f, 2.019255071e-05f, 2.019148813e-05f, 2.019039072e-05f, 2.018925849e-05f, 2.018809144e-05f, 2.018688958e-05f, 2.018565291e-05f, 2.018438143e-05f, 2.018307517e-05f,
-2.018173411e-05f, 2.018035827e-05f, 2.017894765e-05f, 2.017750227e-05f, 2.017602212e-05f, 2.017450721e-05f, 2.017295755e-05f, 2.017137315e-05f, 2.016975400e-05f, 2.016810013e-05f,
-2.016641153e-05f, 2.016468822e-05f, 2.016293019e-05f, 2.016113746e-05f, 2.015931004e-05f, 2.015744792e-05f, 2.015555112e-05f, 2.015361965e-05f, 2.015165350e-05f, 2.014965270e-05f,
-2.014761724e-05f, 2.014554713e-05f, 2.014344238e-05f, 2.014130301e-05f, 2.013912901e-05f, 2.013692039e-05f, 2.013467716e-05f, 2.013239933e-05f, 2.013008691e-05f, 2.012773991e-05f,
-2.012535832e-05f, 2.012294217e-05f, 2.012049145e-05f, 2.011800619e-05f, 2.011548637e-05f, 2.011293202e-05f, 2.011034314e-05f, 2.010771974e-05f, 2.010506183e-05f, 2.010236941e-05f,
-2.009964250e-05f, 2.009688110e-05f, 2.009408522e-05f, 2.009125488e-05f, 2.008839007e-05f, 2.008549081e-05f, 2.008255711e-05f, 2.007958897e-05f, 2.007658641e-05f, 2.007354944e-05f,
-2.007047805e-05f, 2.006737227e-05f, 2.006423210e-05f, 2.006105755e-05f, 2.005784863e-05f, 2.005460535e-05f, 2.005132772e-05f, 2.004801574e-05f, 2.004466943e-05f, 2.004128881e-05f,
-2.003787386e-05f, 2.003442462e-05f, 2.003094108e-05f, 2.002742326e-05f, 2.002387116e-05f, 2.002028480e-05f, 2.001666419e-05f, 2.001300933e-05f, 2.000932024e-05f, 2.000559693e-05f,
-2.000183940e-05f, 1.999804767e-05f, 1.999422175e-05f, 1.999036165e-05f, 1.998646737e-05f, 1.998253893e-05f, 1.997857635e-05f, 1.997457962e-05f, 1.997054877e-05f, 1.996648379e-05f,
-1.996238471e-05f, 1.995825153e-05f, 1.995408427e-05f, 1.994988293e-05f, 1.994564753e-05f, 1.994137808e-05f, 1.993707459e-05f, 1.993273706e-05f, 1.992836552e-05f, 1.992395997e-05f,
-1.991952043e-05f, 1.991504690e-05f, 1.991053939e-05f, 1.990599793e-05f, 1.990142252e-05f, 1.989681316e-05f, 1.989216989e-05f, 1.988749270e-05f, 1.988278160e-05f, 1.987803662e-05f,
-1.987325775e-05f, 1.986844502e-05f, 1.986359844e-05f, 1.985871801e-05f, 1.985380376e-05f, 1.984885568e-05f, 1.984387380e-05f, 1.983885813e-05f, 1.983380868e-05f, 1.982872545e-05f,
-1.982360848e-05f, 1.981845776e-05f, 1.981327331e-05f, 1.980805514e-05f, 1.980280327e-05f, 1.979751770e-05f, 1.979219846e-05f, 1.978684555e-05f, 1.978145899e-05f, 1.977603879e-05f,
-1.977058496e-05f, 1.976509751e-05f, 1.975957647e-05f, 1.975402184e-05f, 1.974843364e-05f, 1.974281187e-05f, 1.973715656e-05f, 1.973146772e-05f, 1.972574535e-05f, 1.971998948e-05f,
-1.971420012e-05f, 1.970837728e-05f, 1.970252097e-05f, 1.969663122e-05f, 1.969070802e-05f, 1.968475141e-05f, 1.967876138e-05f, 1.967273796e-05f, 1.966668116e-05f, 1.966059099e-05f,
-1.965446747e-05f, 1.964831061e-05f, 1.964212043e-05f, 1.963589693e-05f, 1.962964015e-05f, 1.962335008e-05f, 1.961702675e-05f, 1.961067016e-05f, 1.960428035e-05f, 1.959785730e-05f,
-1.959140106e-05f, 1.958491162e-05f, 1.957838900e-05f, 1.957183322e-05f, 1.956524430e-05f, 1.955862224e-05f, 1.955196707e-05f, 1.954527879e-05f, 1.953855743e-05f, 1.953180300e-05f,
-1.952501551e-05f, 1.951819498e-05f, 1.951134143e-05f, 1.950445487e-05f, 1.949753532e-05f, 1.949058278e-05f, 1.948359729e-05f, 1.947657885e-05f, 1.946952748e-05f, 1.946244320e-05f,
-1.945532601e-05f, 1.944817595e-05f, 1.944099301e-05f, 1.943377723e-05f, 1.942652861e-05f, 1.941924718e-05f, 1.941193294e-05f, 1.940458592e-05f, 1.939720612e-05f, 1.938979358e-05f,
-1.938234830e-05f, 1.937487030e-05f, 1.936735959e-05f, 1.935981620e-05f, 1.935224014e-05f, 1.934463143e-05f, 1.933699008e-05f, 1.932931611e-05f, 1.932160954e-05f, 1.931387038e-05f,
-1.930609866e-05f, 1.929829438e-05f, 1.929045757e-05f, 1.928258824e-05f, 1.927468641e-05f, 1.926675210e-05f, 1.925878533e-05f, 1.925078610e-05f, 1.924275445e-05f, 1.923469038e-05f,
-1.922659392e-05f, 1.921846509e-05f, 1.921030389e-05f, 1.920211035e-05f, 1.919388448e-05f, 1.918562631e-05f, 1.917733585e-05f, 1.916901312e-05f, 1.916065814e-05f, 1.915227092e-05f,
-1.914385148e-05f, 1.913539985e-05f, 1.912691604e-05f, 1.911840007e-05f, 1.910985195e-05f, 1.910127171e-05f, 1.909265936e-05f, 1.908401492e-05f, 1.907533841e-05f, 1.906662985e-05f,
-1.905788926e-05f, 1.904911666e-05f, 1.904031206e-05f, 1.903147548e-05f, 1.902260695e-05f, 1.901370648e-05f, 1.900477409e-05f, 1.899580980e-05f, 1.898681363e-05f, 1.897778559e-05f,
-1.896872572e-05f, 1.895963402e-05f, 1.895051051e-05f, 1.894135522e-05f, 1.893216816e-05f, 1.892294936e-05f, 1.891369883e-05f, 1.890441660e-05f, 1.889510267e-05f, 1.888575708e-05f,
-1.887637984e-05f, 1.886697098e-05f, 1.885753050e-05f, 1.884805843e-05f, 1.883855480e-05f, 1.882901962e-05f, 1.881945290e-05f, 1.880985468e-05f, 1.880022497e-05f, 1.879056379e-05f,
-1.878087117e-05f, 1.877114711e-05f, 1.876139165e-05f, 1.875160480e-05f, 1.874178659e-05f, 1.873193703e-05f, 1.872205614e-05f, 1.871214394e-05f, 1.870220047e-05f, 1.869222573e-05f,
-1.868221974e-05f, 1.867218254e-05f, 1.866211413e-05f, 1.865201454e-05f, 1.864188379e-05f, 1.863172191e-05f, 1.862152890e-05f, 1.861130480e-05f, 1.860104963e-05f, 1.859076340e-05f,
-1.858044614e-05f, 1.857009786e-05f, 1.855971860e-05f, 1.854930837e-05f, 1.853886719e-05f, 1.852839509e-05f, 1.851789208e-05f, 1.850735819e-05f, 1.849679344e-05f, 1.848619785e-05f,
-1.847557145e-05f, 1.846491424e-05f, 1.845422627e-05f, 1.844350754e-05f, 1.843275809e-05f, 1.842197792e-05f, 1.841116707e-05f, 1.840032556e-05f, 1.838945341e-05f, 1.837855064e-05f,
-1.836761727e-05f, 1.835665333e-05f, 1.834565884e-05f, 1.833463381e-05f, 1.832357828e-05f, 1.831249227e-05f, 1.830137579e-05f, 1.829022888e-05f, 1.827905155e-05f, 1.826784382e-05f,
-1.825660573e-05f, 1.824533728e-05f, 1.823403852e-05f, 1.822270945e-05f, 1.821135010e-05f, 1.819996049e-05f, 1.818854065e-05f, 1.817709060e-05f, 1.816561037e-05f, 1.815409997e-05f,
-1.814255943e-05f, 1.813098878e-05f, 1.811938803e-05f, 1.810775721e-05f, 1.809609635e-05f, 1.808440546e-05f, 1.807268457e-05f, 1.806093371e-05f, 1.804915290e-05f, 1.803734215e-05f,
-1.802550151e-05f, 1.801363098e-05f, 1.800173059e-05f, 1.798980038e-05f, 1.797784035e-05f, 1.796585054e-05f, 1.795383097e-05f, 1.794178166e-05f, 1.792970264e-05f, 1.791759394e-05f,
-1.790545556e-05f, 1.789328755e-05f, 1.788108993e-05f, 1.786886271e-05f, 1.785660592e-05f, 1.784431960e-05f, 1.783200376e-05f, 1.781965842e-05f, 1.780728362e-05f, 1.779487937e-05f,
-1.778244571e-05f, 1.776998265e-05f, 1.775749022e-05f, 1.774496845e-05f, 1.773241736e-05f, 1.771983698e-05f, 1.770722733e-05f, 1.769458843e-05f, 1.768192032e-05f, 1.766922301e-05f,
-1.765649654e-05f, 1.764374092e-05f, 1.763095618e-05f, 1.761814235e-05f, 1.760529946e-05f, 1.759242752e-05f, 1.757952657e-05f, 1.756659663e-05f, 1.755363772e-05f, 1.754064988e-05f,
-1.752763312e-05f, 1.751458747e-05f, 1.750151296e-05f, 1.748840962e-05f, 1.747527747e-05f, 1.746211653e-05f, 1.744892684e-05f, 1.743570841e-05f, 1.742246128e-05f, 1.740918547e-05f,
-1.739588101e-05f, 1.738254791e-05f, 1.736918622e-05f, 1.735579595e-05f, 1.734237714e-05f, 1.732892980e-05f, 1.731545397e-05f, 1.730194967e-05f, 1.728841693e-05f, 1.727485577e-05f,
-1.726126622e-05f, 1.724764831e-05f, 1.723400207e-05f, 1.722032751e-05f, 1.720662468e-05f, 1.719289359e-05f, 1.717913427e-05f, 1.716534675e-05f, 1.715153106e-05f, 1.713768722e-05f,
-1.712381525e-05f, 1.710991520e-05f, 1.709598708e-05f, 1.708203093e-05f, 1.706804676e-05f, 1.705403461e-05f, 1.703999450e-05f, 1.702592646e-05f, 1.701183053e-05f, 1.699770671e-05f,
-1.698355506e-05f, 1.696937558e-05f, 1.695516831e-05f, 1.694093328e-05f, 1.692667052e-05f, 1.691238004e-05f, 1.689806189e-05f, 1.688371608e-05f, 1.686934265e-05f, 1.685494163e-05f,
-1.684051304e-05f, 1.682605690e-05f, 1.681157326e-05f, 1.679706213e-05f, 1.678252354e-05f, 1.676795753e-05f, 1.675336412e-05f, 1.673874334e-05f, 1.672409521e-05f, 1.670941977e-05f,
-1.669471705e-05f, 1.667998707e-05f, 1.666522986e-05f, 1.665044545e-05f, 1.663563387e-05f, 1.662079515e-05f, 1.660592931e-05f, 1.659103639e-05f, 1.657611641e-05f, 1.656116940e-05f,
-1.654619540e-05f, 1.653119443e-05f, 1.651616651e-05f, 1.650111169e-05f, 1.648602998e-05f, 1.647092142e-05f, 1.645578603e-05f, 1.644062385e-05f, 1.642543491e-05f, 1.641021923e-05f,
-1.639497684e-05f, 1.637970777e-05f, 1.636441205e-05f, 1.634908972e-05f, 1.633374080e-05f, 1.631836531e-05f, 1.630296330e-05f, 1.628753479e-05f, 1.627207980e-05f, 1.625659837e-05f,
-1.624109054e-05f, 1.622555632e-05f, 1.620999575e-05f, 1.619440885e-05f, 1.617879567e-05f, 1.616315622e-05f, 1.614749054e-05f, 1.613179866e-05f, 1.611608061e-05f, 1.610033642e-05f,
-1.608456611e-05f, 1.606876972e-05f, 1.605294729e-05f, 1.603709883e-05f, 1.602122438e-05f, 1.600532397e-05f, 1.598939763e-05f, 1.597344539e-05f, 1.595746729e-05f, 1.594146334e-05f,
-1.592543359e-05f, 1.590937806e-05f, 1.589329679e-05f, 1.587718980e-05f, 1.586105713e-05f, 1.584489880e-05f, 1.582871485e-05f, 1.581250530e-05f, 1.579627020e-05f, 1.578000957e-05f,
-1.576372343e-05f, 1.574741183e-05f, 1.573107479e-05f, 1.571471235e-05f, 1.569832453e-05f, 1.568191137e-05f, 1.566547289e-05f, 1.564900914e-05f, 1.563252013e-05f, 1.561600591e-05f,
-1.559946650e-05f, 1.558290193e-05f, 1.556631224e-05f, 1.554969746e-05f, 1.553305761e-05f, 1.551639274e-05f, 1.549970287e-05f, 1.548298804e-05f, 1.546624827e-05f, 1.544948359e-05f,
-1.543269405e-05f, 1.541587967e-05f, 1.539904048e-05f, 1.538217652e-05f, 1.536528781e-05f, 1.534837440e-05f, 1.533143630e-05f, 1.531447356e-05f, 1.529748620e-05f, 1.528047426e-05f,
-1.526343777e-05f, 1.524637676e-05f, 1.522929127e-05f, 1.521218132e-05f, 1.519504696e-05f, 1.517788820e-05f, 1.516070509e-05f, 1.514349765e-05f, 1.512626592e-05f, 1.510900994e-05f,
-1.509172972e-05f, 1.507442532e-05f, 1.505709675e-05f, 1.503974406e-05f, 1.502236727e-05f, 1.500496641e-05f, 1.498754153e-05f, 1.497009265e-05f, 1.495261981e-05f, 1.493512304e-05f,
-1.491760236e-05f, 1.490005783e-05f, 1.488248946e-05f, 1.486489729e-05f, 1.484728135e-05f, 1.482964169e-05f, 1.481197832e-05f, 1.479429129e-05f, 1.477658062e-05f, 1.475884636e-05f,
-1.474108853e-05f, 1.472330716e-05f, 1.470550230e-05f, 1.468767397e-05f, 1.466982221e-05f, 1.465194704e-05f, 1.463404852e-05f, 1.461612666e-05f, 1.459818150e-05f, 1.458021308e-05f,
-1.456222143e-05f, 1.454420658e-05f, 1.452616857e-05f, 1.450810742e-05f, 1.449002319e-05f, 1.447191589e-05f, 1.445378556e-05f, 1.443563224e-05f, 1.441745596e-05f, 1.439925675e-05f,
-1.438103465e-05f, 1.436278970e-05f, 1.434452192e-05f, 1.432623135e-05f, 1.430791803e-05f, 1.428958198e-05f, 1.427122325e-05f, 1.425284187e-05f, 1.423443787e-05f, 1.421601128e-05f,
-1.419756215e-05f, 1.417909050e-05f, 1.416059638e-05f, 1.414207980e-05f, 1.412354082e-05f, 1.410497946e-05f, 1.408639576e-05f, 1.406778975e-05f, 1.404916147e-05f, 1.403051095e-05f,
-1.401183823e-05f, 1.399314334e-05f, 1.397442632e-05f, 1.395568720e-05f, 1.393692602e-05f, 1.391814280e-05f, 1.389933760e-05f, 1.388051044e-05f, 1.386166135e-05f, 1.384279038e-05f,
-1.382389755e-05f, 1.380498290e-05f, 1.378604647e-05f, 1.376708830e-05f, 1.374810841e-05f, 1.372910685e-05f, 1.371008364e-05f, 1.369103883e-05f, 1.367197245e-05f, 1.365288453e-05f,
-1.363377511e-05f, 1.361464423e-05f, 1.359549192e-05f, 1.357631821e-05f, 1.355712315e-05f, 1.353790676e-05f, 1.351866909e-05f, 1.349941017e-05f, 1.348013003e-05f, 1.346082872e-05f,
-1.344150626e-05f, 1.342216269e-05f, 1.340279805e-05f, 1.338341238e-05f, 1.336400570e-05f, 1.334457806e-05f, 1.332512950e-05f, 1.330566004e-05f, 1.328616972e-05f, 1.326665859e-05f,
-1.324712667e-05f, 1.322757400e-05f, 1.320800063e-05f, 1.318840657e-05f, 1.316879188e-05f, 1.314915659e-05f, 1.312950072e-05f, 1.310982433e-05f, 1.309012745e-05f, 1.307041011e-05f,
-1.305067234e-05f, 1.303091419e-05f, 1.301113570e-05f, 1.299133689e-05f, 1.297151781e-05f, 1.295167849e-05f, 1.293181897e-05f, 1.291193928e-05f, 1.289203947e-05f, 1.287211956e-05f,
-1.285217960e-05f, 1.283221962e-05f, 1.281223966e-05f, 1.279223975e-05f, 1.277221994e-05f, 1.275218026e-05f, 1.273212074e-05f, 1.271204142e-05f, 1.269194235e-05f, 1.267182355e-05f,
-1.265168507e-05f, 1.263152694e-05f, 1.261134920e-05f, 1.259115188e-05f, 1.257093502e-05f, 1.255069867e-05f, 1.253044285e-05f, 1.251016761e-05f, 1.248987298e-05f, 1.246955899e-05f,
-1.244922570e-05f, 1.242887312e-05f, 1.240850131e-05f, 1.238811030e-05f, 1.236770012e-05f, 1.234727082e-05f, 1.232682242e-05f, 1.230635498e-05f, 1.228586852e-05f, 1.226536309e-05f,
-1.224483871e-05f, 1.222429544e-05f, 1.220373330e-05f, 1.218315234e-05f, 1.216255259e-05f, 1.214193408e-05f, 1.212129687e-05f, 1.210064098e-05f, 1.207996646e-05f, 1.205927334e-05f,
-1.203856165e-05f, 1.201783144e-05f, 1.199708275e-05f, 1.197631561e-05f, 1.195553007e-05f, 1.193472615e-05f, 1.191390390e-05f, 1.189306335e-05f, 1.187220455e-05f, 1.185132753e-05f,
-1.183043232e-05f, 1.180951898e-05f, 1.178858754e-05f, 1.176763802e-05f, 1.174667048e-05f, 1.172568496e-05f, 1.170468148e-05f, 1.168366009e-05f, 1.166262082e-05f, 1.164156372e-05f,
-1.162048883e-05f, 1.159939617e-05f, 1.157828580e-05f, 1.155715775e-05f, 1.153601205e-05f, 1.151484875e-05f, 1.149366788e-05f, 1.147246948e-05f, 1.145125360e-05f, 1.143002027e-05f,
-1.140876953e-05f, 1.138750141e-05f, 1.136621597e-05f, 1.134491322e-05f, 1.132359323e-05f, 1.130225601e-05f, 1.128090162e-05f, 1.125953009e-05f, 1.123814146e-05f, 1.121673577e-05f,
-1.119531305e-05f, 1.117387335e-05f, 1.115241671e-05f, 1.113094317e-05f, 1.110945275e-05f, 1.108794552e-05f, 1.106642149e-05f, 1.104488071e-05f, 1.102332323e-05f, 1.100174907e-05f,
-1.098015829e-05f, 1.095855091e-05f, 1.093692698e-05f, 1.091528654e-05f, 1.089362962e-05f, 1.087195627e-05f, 1.085026652e-05f, 1.082856042e-05f, 1.080683800e-05f, 1.078509931e-05f,
-1.076334438e-05f, 1.074157325e-05f, 1.071978596e-05f, 1.069798255e-05f, 1.067616306e-05f, 1.065432754e-05f, 1.063247601e-05f, 1.061060852e-05f, 1.058872512e-05f, 1.056682583e-05f,
-1.054491070e-05f, 1.052297977e-05f, 1.050103307e-05f, 1.047907066e-05f, 1.045709256e-05f, 1.043509882e-05f, 1.041308947e-05f, 1.039106457e-05f, 1.036902414e-05f, 1.034696823e-05f,
-1.032489687e-05f, 1.030281011e-05f, 1.028070799e-05f, 1.025859054e-05f, 1.023645782e-05f, 1.021430984e-05f, 1.019214667e-05f, 1.016996833e-05f, 1.014777487e-05f, 1.012556633e-05f,
-1.010334274e-05f, 1.008110415e-05f, 1.005885060e-05f, 1.003658213e-05f, 1.001429878e-05f, 9.992000580e-06f, 9.969687582e-06f, 9.947359824e-06f, 9.925017344e-06f, 9.902660185e-06f,
-9.880288385e-06f, 9.857901986e-06f, 9.835501027e-06f, 9.813085550e-06f, 9.790655594e-06f, 9.768211201e-06f, 9.745752410e-06f, 9.723279262e-06f, 9.700791798e-06f, 9.678290058e-06f,
-9.655774083e-06f, 9.633243913e-06f, 9.610699588e-06f, 9.588141151e-06f, 9.565568641e-06f, 9.542982098e-06f, 9.520381564e-06f, 9.497767079e-06f, 9.475138685e-06f, 9.452496421e-06f,
-9.429840328e-06f, 9.407170448e-06f, 9.384486821e-06f, 9.361789487e-06f, 9.339078489e-06f, 9.316353866e-06f, 9.293615659e-06f, 9.270863910e-06f, 9.248098659e-06f, 9.225319947e-06f,
-9.202527816e-06f, 9.179722305e-06f, 9.156903457e-06f, 9.134071312e-06f, 9.111225911e-06f, 9.088367295e-06f, 9.065495505e-06f, 9.042610583e-06f, 9.019712569e-06f, 8.996801505e-06f,
-8.973877432e-06f, 8.950940390e-06f, 8.927990422e-06f, 8.905027567e-06f, 8.882051869e-06f, 8.859063366e-06f, 8.836062102e-06f, 8.813048117e-06f, 8.790021452e-06f, 8.766982149e-06f,
-8.743930250e-06f, 8.720865794e-06f, 8.697788824e-06f, 8.674699382e-06f, 8.651597508e-06f, 8.628483243e-06f, 8.605356631e-06f, 8.582217710e-06f, 8.559066524e-06f, 8.535903114e-06f,
-8.512727521e-06f, 8.489539786e-06f, 8.466339951e-06f, 8.443128059e-06f, 8.419904149e-06f, 8.396668264e-06f, 8.373420446e-06f, 8.350160735e-06f, 8.326889174e-06f, 8.303605805e-06f,
-8.280310668e-06f, 8.257003805e-06f, 8.233685259e-06f, 8.210355071e-06f, 8.187013282e-06f, 8.163659935e-06f, 8.140295070e-06f, 8.116918731e-06f, 8.093530958e-06f, 8.070131793e-06f,
-8.046721278e-06f, 8.023299455e-06f, 7.999866366e-06f, 7.976422053e-06f, 7.952966557e-06f, 7.929499921e-06f, 7.906022186e-06f, 7.882533393e-06f, 7.859033586e-06f, 7.835522806e-06f,
-7.812001095e-06f, 7.788468495e-06f, 7.764925047e-06f, 7.741370794e-06f, 7.717805779e-06f, 7.694230042e-06f, 7.670643626e-06f, 7.647046572e-06f, 7.623438924e-06f, 7.599820723e-06f,
-7.576192011e-06f, 7.552552830e-06f, 7.528903223e-06f, 7.505243231e-06f, 7.481572896e-06f, 7.457892262e-06f, 7.434201369e-06f, 7.410500260e-06f, 7.386788978e-06f, 7.363067564e-06f,
-7.339336061e-06f, 7.315594510e-06f, 7.291842955e-06f, 7.268081437e-06f, 7.244309999e-06f, 7.220528683e-06f, 7.196737531e-06f, 7.172936586e-06f, 7.149125889e-06f, 7.125305484e-06f,
-7.101475412e-06f, 7.077635716e-06f, 7.053786439e-06f, 7.029927622e-06f, 7.006059308e-06f, 6.982181539e-06f, 6.958294358e-06f, 6.934397808e-06f, 6.910491930e-06f, 6.886576767e-06f,
-6.862652362e-06f, 6.838718757e-06f, 6.814775994e-06f, 6.790824116e-06f, 6.766863166e-06f, 6.742893186e-06f, 6.718914218e-06f, 6.694926306e-06f, 6.670929491e-06f, 6.646923816e-06f,
-6.622909324e-06f, 6.598886057e-06f, 6.574854059e-06f, 6.550813370e-06f, 6.526764035e-06f, 6.502706095e-06f, 6.478639594e-06f, 6.454564574e-06f, 6.430481077e-06f, 6.406389147e-06f,
-6.382288826e-06f, 6.358180156e-06f, 6.334063181e-06f, 6.309937942e-06f, 6.285804483e-06f, 6.261662847e-06f, 6.237513076e-06f, 6.213355213e-06f, 6.189189300e-06f, 6.165015381e-06f,
-6.140833498e-06f, 6.116643694e-06f, 6.092446011e-06f, 6.068240493e-06f, 6.044027183e-06f, 6.019806122e-06f, 5.995577354e-06f, 5.971340922e-06f, 5.947096869e-06f, 5.922845237e-06f,
-5.898586069e-06f, 5.874319408e-06f, 5.850045297e-06f, 5.825763779e-06f, 5.801474897e-06f, 5.777178693e-06f, 5.752875211e-06f, 5.728564493e-06f, 5.704246583e-06f, 5.679921523e-06f,
-5.655589356e-06f, 5.631250125e-06f, 5.606903873e-06f, 5.582550643e-06f, 5.558190478e-06f, 5.533823421e-06f, 5.509449514e-06f, 5.485068802e-06f, 5.460681327e-06f, 5.436287131e-06f,
-5.411886258e-06f, 5.387478751e-06f, 5.363064653e-06f, 5.338644006e-06f, 5.314216855e-06f, 5.289783241e-06f, 5.265343209e-06f, 5.240896800e-06f, 5.216444059e-06f, 5.191985027e-06f,
-5.167519749e-06f, 5.143048267e-06f, 5.118570625e-06f, 5.094086864e-06f, 5.069597030e-06f, 5.045101164e-06f, 5.020599309e-06f, 4.996091509e-06f, 4.971577808e-06f, 4.947058247e-06f,
-4.922532870e-06f, 4.898001721e-06f, 4.873464842e-06f, 4.848922276e-06f, 4.824374067e-06f, 4.799820258e-06f, 4.775260892e-06f, 4.750696012e-06f, 4.726125661e-06f, 4.701549883e-06f,
-4.676968720e-06f, 4.652382216e-06f, 4.627790414e-06f, 4.603193357e-06f, 4.578591088e-06f, 4.553983651e-06f, 4.529371089e-06f, 4.504753445e-06f, 4.480130761e-06f, 4.455503082e-06f,
-4.430870451e-06f, 4.406232910e-06f, 4.381590503e-06f, 4.356943273e-06f, 4.332291264e-06f, 4.307634518e-06f, 4.282973079e-06f, 4.258306991e-06f, 4.233636295e-06f, 4.208961036e-06f,
-4.184281257e-06f, 4.159597001e-06f, 4.134908312e-06f, 4.110215232e-06f, 4.085517804e-06f, 4.060816073e-06f, 4.036110081e-06f, 4.011399872e-06f, 3.986685489e-06f, 3.961966975e-06f,
-3.937244373e-06f, 3.912517727e-06f, 3.887787080e-06f, 3.863052475e-06f, 3.838313955e-06f, 3.813571565e-06f, 3.788825346e-06f, 3.764075343e-06f, 3.739321598e-06f, 3.714564156e-06f,
-3.689803058e-06f, 3.665038350e-06f, 3.640270073e-06f, 3.615498271e-06f, 3.590722987e-06f, 3.565944265e-06f, 3.541162149e-06f, 3.516376680e-06f, 3.491587903e-06f, 3.466795861e-06f,
-3.442000597e-06f, 3.417202155e-06f, 3.392400577e-06f, 3.367595908e-06f, 3.342788190e-06f, 3.317977467e-06f, 3.293163781e-06f, 3.268347177e-06f, 3.243527698e-06f, 3.218705387e-06f,
-3.193880286e-06f, 3.169052441e-06f, 3.144221893e-06f, 3.119388686e-06f, 3.094552864e-06f, 3.069714470e-06f, 3.044873546e-06f, 3.020030137e-06f, 2.995184286e-06f, 2.970336036e-06f,
-2.945485430e-06f, 2.920632511e-06f, 2.895777323e-06f, 2.870919910e-06f, 2.846060314e-06f, 2.821198579e-06f, 2.796334748e-06f, 2.771468864e-06f, 2.746600971e-06f, 2.721731112e-06f,
-2.696859330e-06f, 2.671985668e-06f, 2.647110171e-06f, 2.622232880e-06f, 2.597353840e-06f, 2.572473094e-06f, 2.547590684e-06f, 2.522706655e-06f, 2.497821049e-06f, 2.472933910e-06f,
-2.448045281e-06f, 2.423155205e-06f, 2.398263726e-06f, 2.373370887e-06f, 2.348476731e-06f, 2.323581301e-06f, 2.298684641e-06f, 2.273786794e-06f, 2.248887803e-06f, 2.223987711e-06f,
-2.199086562e-06f, 2.174184399e-06f, 2.149281265e-06f, 2.124377203e-06f, 2.099472257e-06f, 2.074566470e-06f, 2.049659884e-06f, 2.024752544e-06f, 1.999844493e-06f, 1.974935773e-06f,
-1.950026428e-06f, 1.925116501e-06f, 1.900206036e-06f, 1.875295075e-06f, 1.850383661e-06f, 1.825471839e-06f, 1.800559651e-06f, 1.775647140e-06f, 1.750734349e-06f, 1.725821323e-06f,
-1.700908102e-06f, 1.675994732e-06f, 1.651081256e-06f, 1.626167715e-06f, 1.601254154e-06f, 1.576340615e-06f, 1.551427143e-06f, 1.526513779e-06f, 1.501600567e-06f, 1.476687550e-06f,
-1.451774772e-06f, 1.426862275e-06f, 1.401950102e-06f, 1.377038297e-06f, 1.352126903e-06f, 1.327215962e-06f, 1.302305519e-06f, 1.277395615e-06f, 1.252486295e-06f, 1.227577600e-06f,
-1.202669575e-06f, 1.177762262e-06f, 1.152855705e-06f, 1.127949946e-06f, 1.103045028e-06f, 1.078140995e-06f, 1.053237889e-06f, 1.028335753e-06f, 1.003434632e-06f, 9.785345662e-07f,
-9.536356005e-07f, 9.287377772e-07f, 9.038411395e-07f, 8.789457303e-07f, 8.540515926e-07f, 8.291587693e-07f, 8.042673034e-07f, 7.793772379e-07f, 7.544886158e-07f, 7.296014799e-07f,
-7.047158731e-07f, 6.798318385e-07f, 6.549494190e-07f, 6.300686574e-07f, 6.051895966e-07f, 5.803122796e-07f, 5.554367492e-07f, 5.305630484e-07f, 5.056912199e-07f, 4.808213067e-07f,
-4.559533516e-07f, 4.310873974e-07f, 4.062234870e-07f, 3.813616633e-07f, 3.565019690e-07f, 3.316444470e-07f, 3.067891400e-07f, 2.819360909e-07f, 2.570853424e-07f, 2.322369374e-07f,
-2.073909186e-07f, 1.825473287e-07f, 1.577062106e-07f, 1.328676069e-07f, 1.080315604e-07f, 8.319811377e-08f, 5.836730982e-08f, 3.353919120e-08f, 8.713800614e-09f, -1.610881925e-08f,
--4.092862571e-08f, -6.574557610e-08f, -9.055962777e-08f, -1.153707381e-07f, -1.401788643e-07f, -1.649839640e-07f, -1.897859943e-07f, -2.145849129e-07f, -2.393806769e-07f, -2.641732439e-07f,
--2.889625712e-07f, -3.137486164e-07f, -3.385313367e-07f, -3.633106898e-07f, -3.880866331e-07f, -4.128591239e-07f, -4.376281199e-07f, -4.623935785e-07f, -4.871554573e-07f, -5.119137137e-07f,
--5.366683052e-07f, -5.614191895e-07f, -5.861663240e-07f, -6.109096663e-07f, -6.356491741e-07f, -6.603848048e-07f, -6.851165161e-07f, -7.098442656e-07f, -7.345680109e-07f, -7.592877097e-07f,
--7.840033195e-07f, -8.087147981e-07f, -8.334221031e-07f, -8.581251922e-07f, -8.828240230e-07f, -9.075185534e-07f, -9.322087409e-07f, -9.568945434e-07f, -9.815759185e-07f, -1.006252824e-06f,
--1.030925218e-06f, -1.055593058e-06f, -1.080256301e-06f, -1.104914906e-06f, -1.129568830e-06f, -1.154218032e-06f, -1.178862469e-06f, -1.203502098e-06f, -1.228136879e-06f, -1.252766768e-06f,
--1.277391723e-06f, -1.302011703e-06f, -1.326626665e-06f, -1.351236568e-06f, -1.375841369e-06f, -1.400441026e-06f, -1.425035497e-06f, -1.449624741e-06f, -1.474208714e-06f, -1.498787376e-06f,
--1.523360684e-06f, -1.547928596e-06f, -1.572491071e-06f, -1.597048066e-06f, -1.621599540e-06f, -1.646145450e-06f, -1.670685755e-06f, -1.695220412e-06f, -1.719749381e-06f, -1.744272619e-06f,
--1.768790084e-06f, -1.793301734e-06f, -1.817807528e-06f, -1.842307425e-06f, -1.866801381e-06f, -1.891289356e-06f, -1.915771307e-06f, -1.940247193e-06f, -1.964716973e-06f, -1.989180604e-06f,
--2.013638045e-06f, -2.038089254e-06f, -2.062534189e-06f, -2.086972810e-06f, -2.111405074e-06f, -2.135830939e-06f, -2.160250365e-06f, -2.184663309e-06f, -2.209069730e-06f, -2.233469587e-06f,
--2.257862838e-06f, -2.282249441e-06f, -2.306629355e-06f, -2.331002538e-06f, -2.355368950e-06f, -2.379728548e-06f, -2.404081291e-06f, -2.428427138e-06f, -2.452766048e-06f, -2.477097978e-06f,
--2.501422888e-06f, -2.525740737e-06f, -2.550051482e-06f, -2.574355083e-06f, -2.598651499e-06f, -2.622940687e-06f, -2.647222608e-06f, -2.671497219e-06f, -2.695764479e-06f, -2.720024348e-06f,
--2.744276784e-06f, -2.768521745e-06f, -2.792759192e-06f, -2.816989082e-06f, -2.841211374e-06f, -2.865426028e-06f, -2.889633002e-06f, -2.913832255e-06f, -2.938023746e-06f, -2.962207435e-06f,
--2.986383280e-06f, -3.010551240e-06f, -3.034711274e-06f, -3.058863341e-06f, -3.083007401e-06f, -3.107143412e-06f, -3.131271334e-06f, -3.155391125e-06f, -3.179502745e-06f, -3.203606153e-06f,
--3.227701308e-06f, -3.251788170e-06f, -3.275866697e-06f, -3.299936849e-06f, -3.323998584e-06f, -3.348051863e-06f, -3.372096645e-06f, -3.396132888e-06f, -3.420160553e-06f, -3.444179598e-06f,
--3.468189984e-06f, -3.492191668e-06f, -3.516184612e-06f, -3.540168773e-06f, -3.564144112e-06f, -3.588110589e-06f, -3.612068161e-06f, -3.636016790e-06f, -3.659956435e-06f, -3.683887055e-06f,
--3.707808609e-06f, -3.731721058e-06f, -3.755624361e-06f, -3.779518477e-06f, -3.803403367e-06f, -3.827278989e-06f, -3.851145305e-06f, -3.875002272e-06f, -3.898849851e-06f, -3.922688003e-06f,
--3.946516685e-06f, -3.970335860e-06f, -3.994145485e-06f, -4.017945521e-06f, -4.041735929e-06f, -4.065516667e-06f, -4.089287695e-06f, -4.113048975e-06f, -4.136800464e-06f, -4.160542125e-06f,
--4.184273916e-06f, -4.207995797e-06f, -4.231707729e-06f, -4.255409671e-06f, -4.279101584e-06f, -4.302783428e-06f, -4.326455162e-06f, -4.350116748e-06f, -4.373768145e-06f, -4.397409313e-06f,
--4.421040213e-06f, -4.444660804e-06f, -4.468271048e-06f, -4.491870903e-06f, -4.515460332e-06f, -4.539039293e-06f, -4.562607748e-06f, -4.586165656e-06f, -4.609712978e-06f, -4.633249675e-06f,
--4.656775706e-06f, -4.680291033e-06f, -4.703795616e-06f, -4.727289415e-06f, -4.750772390e-06f, -4.774244503e-06f, -4.797705714e-06f, -4.821155984e-06f, -4.844595273e-06f, -4.868023541e-06f,
--4.891440750e-06f, -4.914846860e-06f, -4.938241832e-06f, -4.961625626e-06f, -4.984998204e-06f, -5.008359526e-06f, -5.031709553e-06f, -5.055048245e-06f, -5.078375564e-06f, -5.101691471e-06f,
--5.124995926e-06f, -5.148288891e-06f, -5.171570325e-06f, -5.194840191e-06f, -5.218098449e-06f, -5.241345061e-06f, -5.264579987e-06f, -5.287803188e-06f, -5.311014625e-06f, -5.334214261e-06f,
--5.357402055e-06f, -5.380577969e-06f, -5.403741964e-06f, -5.426894001e-06f, -5.450034042e-06f, -5.473162048e-06f, -5.496277980e-06f, -5.519381800e-06f, -5.542473469e-06f, -5.565552947e-06f,
--5.588620198e-06f, -5.611675181e-06f, -5.634717859e-06f, -5.657748193e-06f, -5.680766144e-06f, -5.703771675e-06f, -5.726764746e-06f, -5.749745319e-06f, -5.772713356e-06f, -5.795668818e-06f,
--5.818611667e-06f, -5.841541865e-06f, -5.864459373e-06f, -5.887364154e-06f, -5.910256169e-06f, -5.933135379e-06f, -5.956001747e-06f, -5.978855234e-06f, -6.001695802e-06f, -6.024523414e-06f,
--6.047338031e-06f, -6.070139614e-06f, -6.092928127e-06f, -6.115703531e-06f, -6.138465787e-06f, -6.161214859e-06f, -6.183950708e-06f, -6.206673296e-06f, -6.229382586e-06f, -6.252078539e-06f,
--6.274761118e-06f, -6.297430285e-06f, -6.320086002e-06f, -6.342728232e-06f, -6.365356937e-06f, -6.387972078e-06f, -6.410573620e-06f, -6.433161523e-06f, -6.455735750e-06f, -6.478296265e-06f,
--6.500843028e-06f, -6.523376003e-06f, -6.545895153e-06f, -6.568400439e-06f, -6.590891825e-06f, -6.613369273e-06f, -6.635832745e-06f, -6.658282205e-06f, -6.680717614e-06f, -6.703138937e-06f,
--6.725546135e-06f, -6.747939171e-06f, -6.770318008e-06f, -6.792682609e-06f, -6.815032937e-06f, -6.837368955e-06f, -6.859690625e-06f, -6.881997911e-06f, -6.904290775e-06f, -6.926569181e-06f,
--6.948833091e-06f, -6.971082469e-06f, -6.993317278e-06f, -7.015537481e-06f, -7.037743041e-06f, -7.059933921e-06f, -7.082110085e-06f, -7.104271496e-06f, -7.126418116e-06f, -7.148549910e-06f,
--7.170666840e-06f, -7.192768871e-06f, -7.214855965e-06f, -7.236928085e-06f, -7.258985196e-06f, -7.281027261e-06f, -7.303054243e-06f, -7.325066106e-06f, -7.347062814e-06f, -7.369044329e-06f,
--7.391010616e-06f, -7.412961639e-06f, -7.434897360e-06f, -7.456817745e-06f, -7.478722756e-06f, -7.500612357e-06f, -7.522486513e-06f, -7.544345186e-06f, -7.566188342e-06f, -7.588015943e-06f,
--7.609827954e-06f, -7.631624339e-06f, -7.653405061e-06f, -7.675170086e-06f, -7.696919376e-06f, -7.718652896e-06f, -7.740370610e-06f, -7.762072483e-06f, -7.783758478e-06f, -7.805428560e-06f,
--7.827082693e-06f, -7.848720841e-06f, -7.870342968e-06f, -7.891949040e-06f, -7.913539020e-06f, -7.935112872e-06f, -7.956670562e-06f, -7.978212054e-06f, -7.999737311e-06f, -8.021246300e-06f,
--8.042738983e-06f, -8.064215327e-06f, -8.085675295e-06f, -8.107118853e-06f, -8.128545964e-06f, -8.149956595e-06f, -8.171350708e-06f, -8.192728270e-06f, -8.214089245e-06f, -8.235433598e-06f,
--8.256761294e-06f, -8.278072298e-06f, -8.299366575e-06f, -8.320644089e-06f, -8.341904806e-06f, -8.363148692e-06f, -8.384375710e-06f, -8.405585826e-06f, -8.426779006e-06f, -8.447955214e-06f,
--8.469114416e-06f, -8.490256577e-06f, -8.511381662e-06f, -8.532489638e-06f, -8.553580468e-06f, -8.574654118e-06f, -8.595710554e-06f, -8.616749742e-06f, -8.637771647e-06f, -8.658776234e-06f,
--8.679763469e-06f, -8.700733317e-06f, -8.721685745e-06f, -8.742620717e-06f, -8.763538200e-06f, -8.784438160e-06f, -8.805320561e-06f, -8.826185371e-06f, -8.847032554e-06f, -8.867862077e-06f,
--8.888673906e-06f, -8.909468005e-06f, -8.930244343e-06f, -8.951002884e-06f, -8.971743594e-06f, -8.992466440e-06f, -9.013171388e-06f, -9.033858404e-06f, -9.054527454e-06f, -9.075178504e-06f,
--9.095811521e-06f, -9.116426471e-06f, -9.137023320e-06f, -9.157602034e-06f, -9.178162580e-06f, -9.198704925e-06f, -9.219229035e-06f, -9.239734876e-06f, -9.260222416e-06f, -9.280691619e-06f,
--9.301142454e-06f, -9.321574887e-06f, -9.341988884e-06f, -9.362384412e-06f, -9.382761438e-06f, -9.403119929e-06f, -9.423459852e-06f, -9.443781173e-06f, -9.464083859e-06f, -9.484367877e-06f,
--9.504633195e-06f, -9.524879779e-06f, -9.545107597e-06f, -9.565316614e-06f, -9.585506799e-06f, -9.605678119e-06f, -9.625830541e-06f, -9.645964032e-06f, -9.666078559e-06f, -9.686174089e-06f,
--9.706250591e-06f, -9.726308031e-06f, -9.746346377e-06f, -9.766365596e-06f, -9.786365655e-06f, -9.806346523e-06f, -9.826308166e-06f, -9.846250553e-06f, -9.866173651e-06f, -9.886077427e-06f,
--9.905961850e-06f, -9.925826887e-06f, -9.945672506e-06f, -9.965498674e-06f, -9.985305360e-06f, -1.000509253e-05f, -1.002486016e-05f, -1.004460820e-05f, -1.006433664e-05f, -1.008404543e-05f,
--1.010373455e-05f, -1.012340396e-05f, -1.014305363e-05f, -1.016268354e-05f, -1.018229364e-05f, -1.020188390e-05f, -1.022145431e-05f, -1.024100481e-05f, -1.026053539e-05f, -1.028004601e-05f,
--1.029953663e-05f, -1.031900723e-05f, -1.033845778e-05f, -1.035788824e-05f, -1.037729858e-05f, -1.039668878e-05f, -1.041605879e-05f, -1.043540860e-05f, -1.045473816e-05f, -1.047404744e-05f,
--1.049333643e-05f, -1.051260507e-05f, -1.053185335e-05f, -1.055108123e-05f, -1.057028868e-05f, -1.058947567e-05f, -1.060864217e-05f, -1.062778815e-05f, -1.064691357e-05f, -1.066601841e-05f,
--1.068510264e-05f, -1.070416622e-05f, -1.072320913e-05f, -1.074223132e-05f, -1.076123279e-05f, -1.078021348e-05f, -1.079917337e-05f, -1.081811244e-05f, -1.083703065e-05f, -1.085592797e-05f,
--1.087480437e-05f, -1.089365981e-05f, -1.091249428e-05f, -1.093130774e-05f, -1.095010015e-05f, -1.096887150e-05f, -1.098762174e-05f, -1.100635085e-05f, -1.102505880e-05f, -1.104374556e-05f,
--1.106241109e-05f, -1.108105538e-05f, -1.109967838e-05f, -1.111828007e-05f, -1.113686042e-05f, -1.115541940e-05f, -1.117395698e-05f, -1.119247313e-05f, -1.121096782e-05f, -1.122944102e-05f,
--1.124789270e-05f, -1.126632283e-05f, -1.128473139e-05f, -1.130311834e-05f, -1.132148364e-05f, -1.133982729e-05f, -1.135814924e-05f, -1.137644946e-05f, -1.139472793e-05f, -1.141298461e-05f,
--1.143121948e-05f, -1.144943251e-05f, -1.146762367e-05f, -1.148579293e-05f, -1.150394027e-05f, -1.152206564e-05f, -1.154016903e-05f, -1.155825040e-05f, -1.157630972e-05f, -1.159434698e-05f,
--1.161236213e-05f, -1.163035515e-05f, -1.164832601e-05f, -1.166627468e-05f, -1.168420114e-05f, -1.170210535e-05f, -1.171998729e-05f, -1.173784693e-05f, -1.175568423e-05f, -1.177349918e-05f,
--1.179129174e-05f, -1.180906188e-05f, -1.182680958e-05f, -1.184453481e-05f, -1.186223754e-05f, -1.187991774e-05f, -1.189757539e-05f, -1.191521045e-05f, -1.193282289e-05f, -1.195041270e-05f,
--1.196797984e-05f, -1.198552428e-05f, -1.200304600e-05f, -1.202054497e-05f, -1.203802115e-05f, -1.205547454e-05f, -1.207290508e-05f, -1.209031276e-05f, -1.210769756e-05f, -1.212505943e-05f,
--1.214239836e-05f, -1.215971432e-05f, -1.217700728e-05f, -1.219427721e-05f, -1.221152409e-05f, -1.222874788e-05f, -1.224594857e-05f, -1.226312612e-05f, -1.228028051e-05f, -1.229741170e-05f,
--1.231451968e-05f, -1.233160442e-05f, -1.234866588e-05f, -1.236570404e-05f, -1.238271888e-05f, -1.239971037e-05f, -1.241667848e-05f, -1.243362318e-05f, -1.245054445e-05f, -1.246744226e-05f,
--1.248431659e-05f, -1.250116740e-05f, -1.251799467e-05f, -1.253479838e-05f, -1.255157850e-05f, -1.256833500e-05f, -1.258506785e-05f, -1.260177704e-05f, -1.261846252e-05f, -1.263512429e-05f,
--1.265176230e-05f, -1.266837654e-05f, -1.268496698e-05f, -1.270153358e-05f, -1.271807634e-05f, -1.273459522e-05f, -1.275109019e-05f, -1.276756122e-05f, -1.278400831e-05f, -1.280043140e-05f,
--1.281683049e-05f, -1.283320555e-05f, -1.284955654e-05f, -1.286588345e-05f, -1.288218625e-05f, -1.289846491e-05f, -1.291471941e-05f, -1.293094972e-05f, -1.294715581e-05f, -1.296333767e-05f,
--1.297949527e-05f, -1.299562857e-05f, -1.301173756e-05f, -1.302782222e-05f, -1.304388250e-05f, -1.305991840e-05f, -1.307592988e-05f, -1.309191693e-05f, -1.310787951e-05f, -1.312381760e-05f,
--1.313973117e-05f, -1.315562021e-05f, -1.317148468e-05f, -1.318732457e-05f, -1.320313984e-05f, -1.321893047e-05f, -1.323469644e-05f, -1.325043773e-05f, -1.326615430e-05f, -1.328184614e-05f,
--1.329751321e-05f, -1.331315551e-05f, -1.332877299e-05f, -1.334436564e-05f, -1.335993343e-05f, -1.337547634e-05f, -1.339099435e-05f, -1.340648743e-05f, -1.342195555e-05f, -1.343739870e-05f,
--1.345281684e-05f, -1.346820996e-05f, -1.348357803e-05f, -1.349892102e-05f, -1.351423892e-05f, -1.352953170e-05f, -1.354479934e-05f, -1.356004180e-05f, -1.357525908e-05f, -1.359045114e-05f,
--1.360561796e-05f, -1.362075953e-05f, -1.363587580e-05f, -1.365096677e-05f, -1.366603240e-05f, -1.368107269e-05f, -1.369608759e-05f, -1.371107709e-05f, -1.372604117e-05f, -1.374097980e-05f,
--1.375589296e-05f, -1.377078062e-05f, -1.378564277e-05f, -1.380047938e-05f, -1.381529043e-05f, -1.383007590e-05f, -1.384483575e-05f, -1.385956998e-05f, -1.387427855e-05f, -1.388896145e-05f,
--1.390361865e-05f, -1.391825013e-05f, -1.393285587e-05f, -1.394743584e-05f, -1.396199003e-05f, -1.397651840e-05f, -1.399102094e-05f, -1.400549763e-05f, -1.401994845e-05f, -1.403437336e-05f,
--1.404877235e-05f, -1.406314540e-05f, -1.407749249e-05f, -1.409181359e-05f, -1.410610868e-05f, -1.412037774e-05f, -1.413462075e-05f, -1.414883768e-05f, -1.416302852e-05f, -1.417719325e-05f,
--1.419133183e-05f, -1.420544426e-05f, -1.421953050e-05f, -1.423359054e-05f, -1.424762435e-05f, -1.426163192e-05f, -1.427561323e-05f, -1.428956824e-05f, -1.430349694e-05f, -1.431739932e-05f,
--1.433127534e-05f, -1.434512499e-05f, -1.435894824e-05f, -1.437274508e-05f, -1.438651549e-05f, -1.440025944e-05f, -1.441397691e-05f, -1.442766788e-05f, -1.444133233e-05f, -1.445497025e-05f,
--1.446858160e-05f, -1.448216637e-05f, -1.449572454e-05f, -1.450925609e-05f, -1.452276100e-05f, -1.453623924e-05f, -1.454969081e-05f, -1.456311566e-05f, -1.457651380e-05f, -1.458988519e-05f,
--1.460322982e-05f, -1.461654766e-05f, -1.462983870e-05f, -1.464310292e-05f, -1.465634029e-05f, -1.466955080e-05f, -1.468273442e-05f, -1.469589114e-05f, -1.470902094e-05f, -1.472212379e-05f,
--1.473519968e-05f, -1.474824859e-05f, -1.476127050e-05f, -1.477426539e-05f, -1.478723324e-05f, -1.480017402e-05f, -1.481308773e-05f, -1.482597434e-05f, -1.483883383e-05f, -1.485166618e-05f,
--1.486447138e-05f, -1.487724940e-05f, -1.489000023e-05f, -1.490272384e-05f, -1.491542022e-05f, -1.492808935e-05f, -1.494073121e-05f, -1.495334578e-05f, -1.496593304e-05f, -1.497849297e-05f,
--1.499102556e-05f, -1.500353079e-05f, -1.501600863e-05f, -1.502845907e-05f, -1.504088210e-05f, -1.505327768e-05f, -1.506564581e-05f, -1.507798647e-05f, -1.509029963e-05f, -1.510258528e-05f,
--1.511484340e-05f, -1.512707397e-05f, -1.513927698e-05f, -1.515145241e-05f, -1.516360023e-05f, -1.517572043e-05f, -1.518781300e-05f, -1.519987791e-05f, -1.521191515e-05f, -1.522392470e-05f,
--1.523590654e-05f, -1.524786065e-05f, -1.525978702e-05f, -1.527168563e-05f, -1.528355647e-05f, -1.529539950e-05f, -1.530721472e-05f, -1.531900212e-05f, -1.533076166e-05f, -1.534249334e-05f,
--1.535419714e-05f, -1.536587303e-05f, -1.537752102e-05f, -1.538914106e-05f, -1.540073316e-05f, -1.541229729e-05f, -1.542383344e-05f, -1.543534158e-05f, -1.544682171e-05f, -1.545827380e-05f,
--1.546969784e-05f, -1.548109382e-05f, -1.549246171e-05f, -1.550380149e-05f, -1.551511317e-05f, -1.552639670e-05f, -1.553765209e-05f, -1.554887931e-05f, -1.556007835e-05f, -1.557124919e-05f,
--1.558239181e-05f, -1.559350620e-05f, -1.560459235e-05f, -1.561565023e-05f, -1.562667984e-05f, -1.563768114e-05f, -1.564865414e-05f, -1.565959881e-05f, -1.567051514e-05f, -1.568140311e-05f,
--1.569226270e-05f, -1.570309391e-05f, -1.571389671e-05f, -1.572467109e-05f, -1.573541704e-05f, -1.574613453e-05f, -1.575682356e-05f, -1.576748410e-05f, -1.577811615e-05f, -1.578871968e-05f,
--1.579929469e-05f, -1.580984115e-05f, -1.582035906e-05f, -1.583084839e-05f, -1.584130914e-05f, -1.585174128e-05f, -1.586214481e-05f, -1.587251970e-05f, -1.588286595e-05f, -1.589318353e-05f,
--1.590347244e-05f, -1.591373266e-05f, -1.592396417e-05f, -1.593416696e-05f, -1.594434102e-05f, -1.595448633e-05f, -1.596460287e-05f, -1.597469064e-05f, -1.598474962e-05f, -1.599477979e-05f,
--1.600478114e-05f, -1.601475366e-05f, -1.602469733e-05f, -1.603461214e-05f, -1.604449807e-05f, -1.605435512e-05f, -1.606418326e-05f, -1.607398248e-05f, -1.608375277e-05f, -1.609349412e-05f,
--1.610320651e-05f, -1.611288993e-05f, -1.612254436e-05f, -1.613216979e-05f, -1.614176621e-05f, -1.615133361e-05f, -1.616087197e-05f, -1.617038127e-05f, -1.617986151e-05f, -1.618931268e-05f,
--1.619873475e-05f, -1.620812771e-05f, -1.621749156e-05f, -1.622682628e-05f, -1.623613186e-05f, -1.624540828e-05f, -1.625465553e-05f, -1.626387360e-05f, -1.627306248e-05f, -1.628222215e-05f,
--1.629135260e-05f, -1.630045381e-05f, -1.630952579e-05f, -1.631856851e-05f, -1.632758195e-05f, -1.633656612e-05f, -1.634552099e-05f, -1.635444656e-05f, -1.636334281e-05f, -1.637220973e-05f,
--1.638104731e-05f, -1.638985553e-05f, -1.639863439e-05f, -1.640738387e-05f, -1.641610396e-05f, -1.642479465e-05f, -1.643345592e-05f, -1.644208777e-05f, -1.645069019e-05f, -1.645926315e-05f,
--1.646780666e-05f, -1.647632069e-05f, -1.648480525e-05f, -1.649326031e-05f, -1.650168586e-05f, -1.651008190e-05f, -1.651844841e-05f, -1.652678538e-05f, -1.653509280e-05f, -1.654337066e-05f,
--1.655161894e-05f, -1.655983765e-05f, -1.656802676e-05f, -1.657618627e-05f, -1.658431616e-05f, -1.659241642e-05f, -1.660048705e-05f, -1.660852803e-05f, -1.661653936e-05f, -1.662452101e-05f,
--1.663247299e-05f, -1.664039527e-05f, -1.664828786e-05f, -1.665615073e-05f, -1.666398389e-05f, -1.667178731e-05f, -1.667956100e-05f, -1.668730493e-05f, -1.669501910e-05f, -1.670270351e-05f,
--1.671035813e-05f, -1.671798296e-05f, -1.672557799e-05f, -1.673314320e-05f, -1.674067860e-05f, -1.674818417e-05f, -1.675565990e-05f, -1.676310578e-05f, -1.677052181e-05f, -1.677790796e-05f,
--1.678526424e-05f, -1.679259063e-05f, -1.679988712e-05f, -1.680715371e-05f, -1.681439039e-05f, -1.682159714e-05f, -1.682877396e-05f, -1.683592083e-05f, -1.684303776e-05f, -1.685012472e-05f,
--1.685718172e-05f, -1.686420874e-05f, -1.687120577e-05f, -1.687817281e-05f, -1.688510985e-05f, -1.689201687e-05f, -1.689889387e-05f, -1.690574084e-05f, -1.691255778e-05f, -1.691934467e-05f,
--1.692610150e-05f, -1.693282827e-05f, -1.693952497e-05f, -1.694619159e-05f, -1.695282812e-05f, -1.695943456e-05f, -1.696601089e-05f, -1.697255712e-05f, -1.697907322e-05f, -1.698555919e-05f,
--1.699201503e-05f, -1.699844073e-05f, -1.700483628e-05f, -1.701120166e-05f, -1.701753689e-05f, -1.702384193e-05f, -1.703011680e-05f, -1.703636148e-05f, -1.704257596e-05f, -1.704876024e-05f,
--1.705491431e-05f, -1.706103816e-05f, -1.706713179e-05f, -1.707319518e-05f, -1.707922833e-05f, -1.708523124e-05f, -1.709120390e-05f, -1.709714629e-05f, -1.710305842e-05f, -1.710894027e-05f,
--1.711479184e-05f, -1.712061313e-05f, -1.712640412e-05f, -1.713216481e-05f, -1.713789519e-05f, -1.714359526e-05f, -1.714926501e-05f, -1.715490444e-05f, -1.716051353e-05f, -1.716609228e-05f,
--1.717164069e-05f, -1.717715874e-05f, -1.718264644e-05f, -1.718810377e-05f, -1.719353073e-05f, -1.719892732e-05f, -1.720429353e-05f, -1.720962935e-05f, -1.721493477e-05f, -1.722020980e-05f,
--1.722545442e-05f, -1.723066863e-05f, -1.723585243e-05f, -1.724100580e-05f, -1.724612875e-05f, -1.725122126e-05f, -1.725628334e-05f, -1.726131497e-05f, -1.726631616e-05f, -1.727128689e-05f,
--1.727622716e-05f, -1.728113697e-05f, -1.728601631e-05f, -1.729086517e-05f, -1.729568356e-05f, -1.730047146e-05f, -1.730522888e-05f, -1.730995580e-05f, -1.731465222e-05f, -1.731931814e-05f,
--1.732395355e-05f, -1.732855845e-05f, -1.733313284e-05f, -1.733767670e-05f, -1.734219004e-05f, -1.734667285e-05f, -1.735112512e-05f, -1.735554685e-05f, -1.735993805e-05f, -1.736429869e-05f,
--1.736862879e-05f, -1.737292832e-05f, -1.737719731e-05f, -1.738143572e-05f, -1.738564357e-05f, -1.738982085e-05f, -1.739396756e-05f, -1.739808369e-05f, -1.740216924e-05f, -1.740622420e-05f,
--1.741024857e-05f, -1.741424235e-05f, -1.741820553e-05f, -1.742213812e-05f, -1.742604010e-05f, -1.742991147e-05f, -1.743375224e-05f, -1.743756240e-05f, -1.744134194e-05f, -1.744509086e-05f,
--1.744880915e-05f, -1.745249683e-05f, -1.745615388e-05f, -1.745978029e-05f, -1.746337608e-05f, -1.746694122e-05f, -1.747047573e-05f, -1.747397960e-05f, -1.747745282e-05f, -1.748089540e-05f,
--1.748430733e-05f, -1.748768860e-05f, -1.749103923e-05f, -1.749435919e-05f, -1.749764850e-05f, -1.750090715e-05f, -1.750413513e-05f, -1.750733245e-05f, -1.751049911e-05f, -1.751363509e-05f,
--1.751674040e-05f, -1.751981504e-05f, -1.752285901e-05f, -1.752587230e-05f, -1.752885491e-05f, -1.753180684e-05f, -1.753472809e-05f, -1.753761865e-05f, -1.754047853e-05f, -1.754330773e-05f,
--1.754610624e-05f, -1.754887405e-05f, -1.755161118e-05f, -1.755431762e-05f, -1.755699336e-05f, -1.755963841e-05f, -1.756225277e-05f, -1.756483642e-05f, -1.756738938e-05f, -1.756991165e-05f,
--1.757240321e-05f, -1.757486408e-05f, -1.757729424e-05f, -1.757969370e-05f, -1.758206246e-05f, -1.758440052e-05f, -1.758670787e-05f, -1.758898452e-05f, -1.759123047e-05f, -1.759344571e-05f,
--1.759563025e-05f, -1.759778408e-05f, -1.759990720e-05f, -1.760199962e-05f, -1.760406134e-05f, -1.760609235e-05f, -1.760809265e-05f, -1.761006224e-05f, -1.761200113e-05f, -1.761390932e-05f,
--1.761578679e-05f, -1.761763357e-05f, -1.761944964e-05f, -1.762123500e-05f, -1.762298966e-05f, -1.762471361e-05f, -1.762640686e-05f, -1.762806941e-05f, -1.762970125e-05f, -1.763130240e-05f,
--1.763287284e-05f, -1.763441258e-05f, -1.763592162e-05f, -1.763739997e-05f, -1.763884761e-05f, -1.764026456e-05f, -1.764165082e-05f, -1.764300638e-05f, -1.764433124e-05f, -1.764562541e-05f,
--1.764688890e-05f, -1.764812169e-05f, -1.764932379e-05f, -1.765049521e-05f, -1.765163594e-05f, -1.765274599e-05f, -1.765382535e-05f, -1.765487403e-05f, -1.765589204e-05f, -1.765687936e-05f,
--1.765783601e-05f, -1.765876199e-05f, -1.765965729e-05f, -1.766052193e-05f, -1.766135589e-05f, -1.766215919e-05f, -1.766293183e-05f, -1.766367380e-05f, -1.766438511e-05f, -1.766506577e-05f,
--1.766571577e-05f, -1.766633512e-05f, -1.766692381e-05f, -1.766748186e-05f, -1.766800926e-05f, -1.766850602e-05f, -1.766897214e-05f, -1.766940762e-05f, -1.766981247e-05f, -1.767018668e-05f,
--1.767053027e-05f, -1.767084322e-05f, -1.767112556e-05f, -1.767137727e-05f, -1.767159837e-05f, -1.767178885e-05f, -1.767194872e-05f, -1.767207798e-05f, -1.767217663e-05f, -1.767224469e-05f,
--1.767228214e-05f, -1.767228901e-05f, -1.767226527e-05f, -1.767221096e-05f, -1.767212605e-05f, -1.767201057e-05f, -1.767186451e-05f, -1.767168787e-05f, -1.767148067e-05f, -1.767124290e-05f,
--1.767097456e-05f, -1.767067567e-05f, -1.767034623e-05f, -1.766998623e-05f, -1.766959569e-05f, -1.766917461e-05f, -1.766872299e-05f, -1.766824084e-05f, -1.766772815e-05f, -1.766718494e-05f,
--1.766661122e-05f, -1.766600697e-05f, -1.766537221e-05f, -1.766470695e-05f, -1.766401119e-05f, -1.766328492e-05f, -1.766252817e-05f, -1.766174092e-05f, -1.766092320e-05f, -1.766007499e-05f,
--1.765919631e-05f, -1.765828716e-05f, -1.765734755e-05f, -1.765637748e-05f, -1.765537696e-05f, -1.765434599e-05f, -1.765328457e-05f, -1.765219272e-05f, -1.765107044e-05f, -1.764991772e-05f,
--1.764873459e-05f, -1.764752104e-05f, -1.764627708e-05f, -1.764500272e-05f, -1.764369796e-05f, -1.764236280e-05f, -1.764099725e-05f, -1.763960133e-05f, -1.763817503e-05f, -1.763671835e-05f,
--1.763523132e-05f, -1.763371392e-05f, -1.763216617e-05f, -1.763058808e-05f, -1.762897965e-05f, -1.762734088e-05f, -1.762567179e-05f, -1.762397237e-05f, -1.762224264e-05f, -1.762048260e-05f,
--1.761869226e-05f, -1.761687163e-05f, -1.761502071e-05f, -1.761313950e-05f, -1.761122802e-05f, -1.760928627e-05f, -1.760731426e-05f, -1.760531199e-05f, -1.760327948e-05f, -1.760121673e-05f,
--1.759912374e-05f, -1.759700052e-05f, -1.759484709e-05f, -1.759266344e-05f, -1.759044958e-05f, -1.758820553e-05f, -1.758593129e-05f, -1.758362686e-05f, -1.758129226e-05f, -1.757892749e-05f,
--1.757653255e-05f, -1.757410747e-05f, -1.757165223e-05f, -1.756916686e-05f, -1.756665136e-05f, -1.756410574e-05f, -1.756153000e-05f, -1.755892415e-05f, -1.755628820e-05f, -1.755362216e-05f,
--1.755092604e-05f, -1.754819985e-05f, -1.754544359e-05f, -1.754265726e-05f, -1.753984089e-05f, -1.753699448e-05f, -1.753411803e-05f, -1.753121155e-05f, -1.752827506e-05f, -1.752530856e-05f,
--1.752231206e-05f, -1.751928557e-05f, -1.751622909e-05f, -1.751314264e-05f, -1.751002623e-05f, -1.750687986e-05f, -1.750370354e-05f, -1.750049728e-05f, -1.749726109e-05f, -1.749399498e-05f,
--1.749069896e-05f, -1.748737303e-05f, -1.748401722e-05f, -1.748063151e-05f, -1.747721594e-05f, -1.747377049e-05f, -1.747029519e-05f, -1.746679004e-05f, -1.746325506e-05f, -1.745969024e-05f,
--1.745609561e-05f, -1.745247117e-05f, -1.744881693e-05f, -1.744513290e-05f, -1.744141909e-05f, -1.743767550e-05f, -1.743390216e-05f, -1.743009907e-05f, -1.742626624e-05f, -1.742240368e-05f,
--1.741851139e-05f, -1.741458940e-05f, -1.741063771e-05f, -1.740665632e-05f, -1.740264526e-05f, -1.739860453e-05f, -1.739453413e-05f, -1.739043409e-05f, -1.738630442e-05f, -1.738214511e-05f,
--1.737795619e-05f, -1.737373766e-05f, -1.736948953e-05f, -1.736521182e-05f, -1.736090454e-05f, -1.735656769e-05f, -1.735220129e-05f, -1.734780535e-05f, -1.734337988e-05f, -1.733892488e-05f,
--1.733444038e-05f, -1.732992638e-05f, -1.732538290e-05f, -1.732080994e-05f, -1.731620751e-05f, -1.731157564e-05f, -1.730691432e-05f, -1.730222357e-05f, -1.729750340e-05f, -1.729275383e-05f,
--1.728797486e-05f, -1.728316651e-05f, -1.727832879e-05f, -1.727346170e-05f, -1.726856527e-05f, -1.726363950e-05f, -1.725868440e-05f, -1.725370000e-05f, -1.724868629e-05f, -1.724364329e-05f,
--1.723857102e-05f, -1.723346948e-05f, -1.722833868e-05f, -1.722317865e-05f, -1.721798939e-05f, -1.721277091e-05f, -1.720752323e-05f, -1.720224636e-05f, -1.719694031e-05f, -1.719160509e-05f,
--1.718624072e-05f, -1.718084721e-05f, -1.717542457e-05f, -1.716997282e-05f, -1.716449196e-05f, -1.715898201e-05f, -1.715344298e-05f, -1.714787489e-05f, -1.714227775e-05f, -1.713665157e-05f,
--1.713099636e-05f, -1.712531214e-05f, -1.711959892e-05f, -1.711385672e-05f, -1.710808554e-05f, -1.710228541e-05f, -1.709645632e-05f, -1.709059831e-05f, -1.708471137e-05f, -1.707879553e-05f,
--1.707285079e-05f, -1.706687718e-05f, -1.706087470e-05f, -1.705484337e-05f, -1.704878321e-05f, -1.704269421e-05f, -1.703657641e-05f, -1.703042981e-05f, -1.702425443e-05f, -1.701805028e-05f,
--1.701181738e-05f, -1.700555573e-05f, -1.699926536e-05f, -1.699294628e-05f, -1.698659850e-05f, -1.698022203e-05f, -1.697381689e-05f, -1.696738310e-05f, -1.696092067e-05f, -1.695442962e-05f,
--1.694790995e-05f, -1.694136168e-05f, -1.693478483e-05f, -1.692817941e-05f, -1.692154544e-05f, -1.691488293e-05f, -1.690819190e-05f, -1.690147236e-05f, -1.689472432e-05f, -1.688794781e-05f,
--1.688114283e-05f, -1.687430940e-05f, -1.686744753e-05f, -1.686055725e-05f, -1.685363856e-05f, -1.684669149e-05f, -1.683971604e-05f, -1.683271223e-05f, -1.682568008e-05f, -1.681861960e-05f,
--1.681153081e-05f, -1.680441373e-05f, -1.679726836e-05f, -1.679009473e-05f, -1.678289285e-05f, -1.677566273e-05f, -1.676840440e-05f, -1.676111786e-05f, -1.675380313e-05f, -1.674646024e-05f,
--1.673908919e-05f, -1.673169000e-05f, -1.672426269e-05f, -1.671680727e-05f, -1.670932376e-05f, -1.670181217e-05f, -1.669427253e-05f, -1.668670484e-05f, -1.667910913e-05f, -1.667148541e-05f,
--1.666383369e-05f, -1.665615400e-05f, -1.664844635e-05f, -1.664071076e-05f, -1.663294723e-05f, -1.662515580e-05f, -1.661733647e-05f, -1.660948926e-05f, -1.660161420e-05f, -1.659371129e-05f,
--1.658578055e-05f, -1.657782201e-05f, -1.656983567e-05f, -1.656182155e-05f, -1.655377968e-05f, -1.654571006e-05f, -1.653761272e-05f, -1.652948767e-05f, -1.652133493e-05f, -1.651315452e-05f,
--1.650494645e-05f, -1.649671074e-05f, -1.648844741e-05f, -1.648015648e-05f, -1.647183796e-05f, -1.646349187e-05f, -1.645511823e-05f, -1.644671706e-05f, -1.643828838e-05f, -1.642983219e-05f,
--1.642134852e-05f, -1.641283740e-05f, -1.640429882e-05f, -1.639573282e-05f, -1.638713941e-05f, -1.637851861e-05f, -1.636987044e-05f, -1.636119492e-05f, -1.635249205e-05f, -1.634376187e-05f,
--1.633500439e-05f, -1.632621963e-05f, -1.631740760e-05f, -1.630856833e-05f, -1.629970183e-05f, -1.629080812e-05f, -1.628188722e-05f, -1.627293915e-05f, -1.626396393e-05f, -1.625496158e-05f,
--1.624593211e-05f, -1.623687554e-05f, -1.622779189e-05f, -1.621868119e-05f, -1.620954344e-05f, -1.620037868e-05f, -1.619118691e-05f, -1.618196816e-05f, -1.617272244e-05f, -1.616344978e-05f,
--1.615415019e-05f, -1.614482369e-05f, -1.613547031e-05f, -1.612609006e-05f, -1.611668296e-05f, -1.610724902e-05f, -1.609778828e-05f, -1.608830075e-05f, -1.607878644e-05f, -1.606924539e-05f,
--1.605967760e-05f, -1.605008309e-05f, -1.604046190e-05f, -1.603081403e-05f, -1.602113950e-05f, -1.601143835e-05f, -1.600171057e-05f, -1.599195621e-05f, -1.598217527e-05f, -1.597236777e-05f,
--1.596253374e-05f, -1.595267320e-05f, -1.594278616e-05f, -1.593287264e-05f, -1.592293267e-05f, -1.591296627e-05f, -1.590297346e-05f, -1.589295425e-05f, -1.588290867e-05f, -1.587283673e-05f,
--1.586273846e-05f, -1.585261389e-05f, -1.584246302e-05f, -1.583228588e-05f, -1.582208249e-05f, -1.581185287e-05f, -1.580159704e-05f, -1.579131502e-05f, -1.578100684e-05f, -1.577067251e-05f,
--1.576031205e-05f, -1.574992549e-05f, -1.573951285e-05f, -1.572907414e-05f, -1.571860940e-05f, -1.570811863e-05f, -1.569760186e-05f, -1.568705912e-05f, -1.567649041e-05f, -1.566589578e-05f,
--1.565527522e-05f, -1.564462878e-05f, -1.563395646e-05f, -1.562325829e-05f, -1.561253430e-05f, -1.560178449e-05f, -1.559100890e-05f, -1.558020755e-05f, -1.556938046e-05f, -1.555852764e-05f,
--1.554764912e-05f, -1.553674493e-05f, -1.552581508e-05f, -1.551485960e-05f, -1.550387850e-05f, -1.549287182e-05f, -1.548183957e-05f, -1.547078177e-05f, -1.545969845e-05f, -1.544858962e-05f,
--1.543745532e-05f, -1.542629556e-05f, -1.541511036e-05f, -1.540389975e-05f, -1.539266375e-05f, -1.538140238e-05f, -1.537011567e-05f, -1.535880363e-05f, -1.534746629e-05f, -1.533610367e-05f,
--1.532471580e-05f, -1.531330269e-05f, -1.530186438e-05f, -1.529040087e-05f, -1.527891220e-05f, -1.526739838e-05f, -1.525585945e-05f, -1.524429542e-05f, -1.523270632e-05f, -1.522109216e-05f,
--1.520945297e-05f, -1.519778879e-05f, -1.518609961e-05f, -1.517438548e-05f, -1.516264642e-05f, -1.515088244e-05f, -1.513909357e-05f, -1.512727983e-05f, -1.511544125e-05f, -1.510357786e-05f,
--1.509168966e-05f, -1.507977669e-05f, -1.506783898e-05f, -1.505587653e-05f, -1.504388939e-05f, -1.503187756e-05f, -1.501984108e-05f, -1.500777997e-05f, -1.499569425e-05f, -1.498358395e-05f,
--1.497144908e-05f, -1.495928968e-05f, -1.494710577e-05f, -1.493489736e-05f, -1.492266449e-05f, -1.491040719e-05f, -1.489812546e-05f, -1.488581934e-05f, -1.487348885e-05f, -1.486113402e-05f,
--1.484875487e-05f, -1.483635142e-05f, -1.482392369e-05f, -1.481147172e-05f, -1.479899553e-05f, -1.478649514e-05f, -1.477397057e-05f, -1.476142185e-05f, -1.474884901e-05f, -1.473625206e-05f,
--1.472363104e-05f, -1.471098596e-05f, -1.469831686e-05f, -1.468562375e-05f, -1.467290667e-05f, -1.466016563e-05f, -1.464740067e-05f, -1.463461180e-05f, -1.462179905e-05f, -1.460896245e-05f,
--1.459610202e-05f, -1.458321778e-05f, -1.457030977e-05f, -1.455737800e-05f, -1.454442250e-05f, -1.453144330e-05f, -1.451844042e-05f, -1.450541388e-05f, -1.449236372e-05f, -1.447928995e-05f,
--1.446619261e-05f, -1.445307172e-05f, -1.443992729e-05f, -1.442675937e-05f, -1.441356797e-05f, -1.440035312e-05f, -1.438711485e-05f, -1.437385317e-05f, -1.436056812e-05f, -1.434725973e-05f,
--1.433392801e-05f, -1.432057300e-05f, -1.430719471e-05f, -1.429379318e-05f, -1.428036843e-05f, -1.426692049e-05f, -1.425344938e-05f, -1.423995513e-05f, -1.422643777e-05f, -1.421289731e-05f,
--1.419933379e-05f, -1.418574724e-05f, -1.417213767e-05f, -1.415850512e-05f, -1.414484961e-05f, -1.413117117e-05f, -1.411746982e-05f, -1.410374559e-05f, -1.408999851e-05f, -1.407622860e-05f,
--1.406243590e-05f, -1.404862041e-05f, -1.403478218e-05f, -1.402092123e-05f, -1.400703759e-05f, -1.399313128e-05f, -1.397920233e-05f, -1.396525076e-05f, -1.395127660e-05f, -1.393727989e-05f,
--1.392326064e-05f, -1.390921888e-05f, -1.389515465e-05f, -1.388106796e-05f, -1.386695884e-05f, -1.385282732e-05f, -1.383867344e-05f, -1.382449720e-05f, -1.381029865e-05f, -1.379607781e-05f,
--1.378183470e-05f, -1.376756936e-05f, -1.375328181e-05f, -1.373897207e-05f, -1.372464018e-05f, -1.371028616e-05f, -1.369591005e-05f, -1.368151186e-05f, -1.366709162e-05f, -1.365264937e-05f,
--1.363818512e-05f, -1.362369892e-05f, -1.360919077e-05f, -1.359466073e-05f, -1.358010880e-05f, -1.356553501e-05f, -1.355093941e-05f, -1.353632201e-05f, -1.352168283e-05f, -1.350702192e-05f,
--1.349233930e-05f, -1.347763498e-05f, -1.346290902e-05f, -1.344816142e-05f, -1.343339222e-05f, -1.341860145e-05f, -1.340378913e-05f, -1.338895529e-05f, -1.337409997e-05f, -1.335922318e-05f,
--1.334432496e-05f, -1.332940534e-05f, -1.331446434e-05f, -1.329950200e-05f, -1.328451833e-05f, -1.326951337e-05f, -1.325448715e-05f, -1.323943970e-05f, -1.322437104e-05f, -1.320928120e-05f,
--1.319417022e-05f, -1.317903811e-05f, -1.316388491e-05f, -1.314871065e-05f, -1.313351535e-05f, -1.311829905e-05f, -1.310306178e-05f, -1.308780355e-05f, -1.307252441e-05f, -1.305722437e-05f,
--1.304190347e-05f, -1.302656174e-05f, -1.301119921e-05f, -1.299581590e-05f, -1.298041185e-05f, -1.296498708e-05f, -1.294954162e-05f, -1.293407551e-05f, -1.291858876e-05f, -1.290308142e-05f,
--1.288755350e-05f, -1.287200504e-05f, -1.285643607e-05f, -1.284084662e-05f, -1.282523671e-05f, -1.280960638e-05f, -1.279395565e-05f, -1.277828456e-05f, -1.276259313e-05f, -1.274688139e-05f,
--1.273114938e-05f, -1.271539712e-05f, -1.269962464e-05f, -1.268383197e-05f, -1.266801915e-05f, -1.265218619e-05f, -1.263633314e-05f, -1.262046002e-05f, -1.260456685e-05f, -1.258865368e-05f,
--1.257272053e-05f, -1.255676742e-05f, -1.254079440e-05f, -1.252480148e-05f, -1.250878871e-05f, -1.249275610e-05f, -1.247670369e-05f, -1.246063152e-05f, -1.244453960e-05f, -1.242842797e-05f,
--1.241229666e-05f, -1.239614571e-05f, -1.237997513e-05f, -1.236378496e-05f, -1.234757523e-05f, -1.233134598e-05f, -1.231509723e-05f, -1.229882900e-05f, -1.228254134e-05f, -1.226623428e-05f,
--1.224990783e-05f, -1.223356204e-05f, -1.221719693e-05f, -1.220081254e-05f, -1.218440890e-05f, -1.216798602e-05f, -1.215154396e-05f, -1.213508273e-05f, -1.211860237e-05f, -1.210210291e-05f,
--1.208558438e-05f, -1.206904680e-05f, -1.205249022e-05f, -1.203591466e-05f, -1.201932015e-05f, -1.200270673e-05f, -1.198607442e-05f, -1.196942326e-05f, -1.195275327e-05f, -1.193606449e-05f,
--1.191935694e-05f, -1.190263067e-05f, -1.188588570e-05f, -1.186912206e-05f, -1.185233978e-05f, -1.183553889e-05f, -1.181871943e-05f, -1.180188143e-05f, -1.178502492e-05f, -1.176814992e-05f,
--1.175125647e-05f, -1.173434461e-05f, -1.171741436e-05f, -1.170046575e-05f, -1.168349882e-05f, -1.166651360e-05f, -1.164951011e-05f, -1.163248840e-05f, -1.161544849e-05f, -1.159839041e-05f,
--1.158131420e-05f, -1.156421988e-05f, -1.154710749e-05f, -1.152997707e-05f, -1.151282863e-05f, -1.149566222e-05f, -1.147847786e-05f, -1.146127559e-05f, -1.144405544e-05f, -1.142681744e-05f,
--1.140956163e-05f, -1.139228803e-05f, -1.137499667e-05f, -1.135768759e-05f, -1.134036083e-05f, -1.132301641e-05f, -1.130565436e-05f, -1.128827472e-05f, -1.127087751e-05f, -1.125346278e-05f,
--1.123603055e-05f, -1.121858086e-05f, -1.120111374e-05f, -1.118362921e-05f, -1.116612732e-05f, -1.114860809e-05f, -1.113107156e-05f, -1.111351775e-05f, -1.109594671e-05f, -1.107835846e-05f,
--1.106075304e-05f, -1.104313048e-05f, -1.102549081e-05f, -1.100783406e-05f, -1.099016027e-05f, -1.097246946e-05f, -1.095476168e-05f, -1.093703695e-05f, -1.091929531e-05f, -1.090153679e-05f,
--1.088376142e-05f, -1.086596923e-05f, -1.084816026e-05f, -1.083033455e-05f, -1.081249211e-05f, -1.079463299e-05f, -1.077675722e-05f, -1.075886483e-05f, -1.074095585e-05f, -1.072303032e-05f,
--1.070508828e-05f, -1.068712974e-05f, -1.066915475e-05f, -1.065116334e-05f, -1.063315554e-05f, -1.061513139e-05f, -1.059709091e-05f, -1.057903415e-05f, -1.056096113e-05f, -1.054287188e-05f,
--1.052476645e-05f, -1.050664487e-05f, -1.048850715e-05f, -1.047035335e-05f, -1.045218350e-05f, -1.043399762e-05f, -1.041579575e-05f, -1.039757792e-05f, -1.037934418e-05f, -1.036109454e-05f,
--1.034282904e-05f, -1.032454773e-05f, -1.030625062e-05f, -1.028793776e-05f, -1.026960917e-05f, -1.025126490e-05f, -1.023290497e-05f, -1.021452942e-05f, -1.019613829e-05f, -1.017773159e-05f,
--1.015930938e-05f, -1.014087168e-05f, -1.012241853e-05f, -1.010394996e-05f, -1.008546600e-05f, -1.006696669e-05f, -1.004845206e-05f, -1.002992214e-05f, -1.001137698e-05f, -9.992816600e-06f,
--9.974241036e-06f, -9.955650323e-06f, -9.937044495e-06f, -9.918423586e-06f, -9.899787630e-06f, -9.881136660e-06f, -9.862470712e-06f, -9.843789818e-06f, -9.825094013e-06f, -9.806383331e-06f,
--9.787657807e-06f, -9.768917473e-06f, -9.750162365e-06f, -9.731392516e-06f, -9.712607961e-06f, -9.693808734e-06f, -9.674994869e-06f, -9.656166401e-06f, -9.637323363e-06f, -9.618465791e-06f,
--9.599593717e-06f, -9.580707177e-06f, -9.561806205e-06f, -9.542890836e-06f, -9.523961103e-06f, -9.505017042e-06f, -9.486058686e-06f, -9.467086070e-06f, -9.448099229e-06f, -9.429098197e-06f,
--9.410083009e-06f, -9.391053699e-06f, -9.372010301e-06f, -9.352952851e-06f, -9.333881383e-06f, -9.314795931e-06f, -9.295696531e-06f, -9.276583216e-06f, -9.257456022e-06f, -9.238314984e-06f,
--9.219160135e-06f, -9.199991511e-06f, -9.180809147e-06f, -9.161613077e-06f, -9.142403336e-06f, -9.123179959e-06f, -9.103942981e-06f, -9.084692436e-06f, -9.065428360e-06f, -9.046150788e-06f,
--9.026859754e-06f, -9.007555293e-06f, -8.988237441e-06f, -8.968906231e-06f, -8.949561701e-06f, -8.930203883e-06f, -8.910832814e-06f, -8.891448528e-06f, -8.872051061e-06f, -8.852640447e-06f,
--8.833216722e-06f, -8.813779921e-06f, -8.794330079e-06f, -8.774867231e-06f, -8.755391413e-06f, -8.735902659e-06f, -8.716401004e-06f, -8.696886485e-06f, -8.677359137e-06f, -8.657818993e-06f,
--8.638266091e-06f, -8.618700465e-06f, -8.599122151e-06f, -8.579531183e-06f, -8.559927598e-06f, -8.540311430e-06f, -8.520682715e-06f, -8.501041489e-06f, -8.481387787e-06f, -8.461721645e-06f,
--8.442043097e-06f, -8.422352180e-06f, -8.402648928e-06f, -8.382933378e-06f, -8.363205565e-06f, -8.343465525e-06f, -8.323713292e-06f, -8.303948904e-06f, -8.284172395e-06f, -8.264383800e-06f,
--8.244583157e-06f, -8.224770500e-06f, -8.204945864e-06f, -8.185109287e-06f, -8.165260803e-06f, -8.145400448e-06f, -8.125528258e-06f, -8.105644268e-06f, -8.085748515e-06f, -8.065841035e-06f,
--8.045921862e-06f, -8.025991033e-06f, -8.006048584e-06f, -7.986094551e-06f, -7.966128969e-06f, -7.946151874e-06f, -7.926163303e-06f, -7.906163291e-06f, -7.886151875e-06f, -7.866129089e-06f,
--7.846094970e-06f, -7.826049555e-06f, -7.805992879e-06f, -7.785924978e-06f, -7.765845888e-06f, -7.745755645e-06f, -7.725654285e-06f, -7.705541845e-06f, -7.685418361e-06f, -7.665283868e-06f,
--7.645138402e-06f, -7.624982001e-06f, -7.604814699e-06f, -7.584636534e-06f, -7.564447541e-06f, -7.544247757e-06f, -7.524037217e-06f, -7.503815959e-06f, -7.483584017e-06f, -7.463341430e-06f,
--7.443088232e-06f, -7.422824460e-06f, -7.402550150e-06f, -7.382265340e-06f, -7.361970064e-06f, -7.341664360e-06f, -7.321348263e-06f, -7.301021810e-06f, -7.280685038e-06f, -7.260337983e-06f,
--7.239980682e-06f, -7.219613169e-06f, -7.199235484e-06f, -7.178847660e-06f, -7.158449736e-06f, -7.138041748e-06f, -7.117623731e-06f, -7.097195723e-06f, -7.076757760e-06f, -7.056309879e-06f,
--7.035852116e-06f, -7.015384508e-06f, -6.994907091e-06f, -6.974419902e-06f, -6.953922977e-06f, -6.933416354e-06f, -6.912900068e-06f, -6.892374157e-06f, -6.871838657e-06f, -6.851293604e-06f,
--6.830739036e-06f, -6.810174988e-06f, -6.789601499e-06f, -6.769018604e-06f, -6.748426340e-06f, -6.727824744e-06f, -6.707213852e-06f, -6.686593702e-06f, -6.665964331e-06f, -6.645325774e-06f,
--6.624678069e-06f, -6.604021252e-06f, -6.583355361e-06f, -6.562680432e-06f, -6.541996502e-06f, -6.521303608e-06f, -6.500601787e-06f, -6.479891075e-06f, -6.459171510e-06f, -6.438443128e-06f,
--6.417705967e-06f, -6.396960063e-06f, -6.376205453e-06f, -6.355442174e-06f, -6.334670263e-06f, -6.313889757e-06f, -6.293100693e-06f, -6.272303108e-06f, -6.251497039e-06f, -6.230682523e-06f,
--6.209859597e-06f, -6.189028298e-06f, -6.168188663e-06f, -6.147340729e-06f, -6.126484534e-06f, -6.105620113e-06f, -6.084747505e-06f, -6.063866746e-06f, -6.042977874e-06f, -6.022080925e-06f,
--6.001175936e-06f, -5.980262946e-06f, -5.959341991e-06f, -5.938413107e-06f, -5.917476333e-06f, -5.896531705e-06f, -5.875579261e-06f, -5.854619038e-06f, -5.833651072e-06f, -5.812675402e-06f,
--5.791692064e-06f, -5.770701096e-06f, -5.749702534e-06f, -5.728696416e-06f, -5.707682780e-06f, -5.686661662e-06f, -5.665633100e-06f, -5.644597131e-06f, -5.623553793e-06f, -5.602503122e-06f,
--5.581445156e-06f, -5.560379932e-06f, -5.539307488e-06f, -5.518227860e-06f, -5.497141087e-06f, -5.476047205e-06f, -5.454946252e-06f, -5.433838266e-06f, -5.412723283e-06f, -5.391601341e-06f,
--5.370472477e-06f, -5.349336729e-06f, -5.328194134e-06f, -5.307044730e-06f, -5.285888553e-06f, -5.264725642e-06f, -5.243556034e-06f, -5.222379766e-06f, -5.201196875e-06f, -5.180007400e-06f,
--5.158811377e-06f, -5.137608844e-06f, -5.116399838e-06f, -5.095184398e-06f, -5.073962560e-06f, -5.052734361e-06f, -5.031499840e-06f, -5.010259034e-06f, -4.989011981e-06f, -4.967758717e-06f,
--4.946499281e-06f, -4.925233709e-06f, -4.903962040e-06f, -4.882684311e-06f, -4.861400560e-06f, -4.840110824e-06f, -4.818815140e-06f, -4.797513547e-06f, -4.776206081e-06f, -4.754892781e-06f,
--4.733573684e-06f, -4.712248827e-06f, -4.690918249e-06f, -4.669581986e-06f, -4.648240076e-06f, -4.626892558e-06f, -4.605539468e-06f, -4.584180844e-06f, -4.562816724e-06f, -4.541447145e-06f,
--4.520072146e-06f, -4.498691763e-06f, -4.477306034e-06f, -4.455914998e-06f, -4.434518691e-06f, -4.413117151e-06f, -4.391710417e-06f, -4.370298525e-06f, -4.348881513e-06f, -4.327459419e-06f,
--4.306032282e-06f, -4.284600137e-06f, -4.263163023e-06f, -4.241720979e-06f, -4.220274040e-06f, -4.198822246e-06f, -4.177365634e-06f, -4.155904241e-06f, -4.134438106e-06f, -4.112967266e-06f,
--4.091491758e-06f, -4.070011621e-06f, -4.048526892e-06f, -4.027037609e-06f, -4.005543810e-06f, -3.984045532e-06f, -3.962542813e-06f, -3.941035691e-06f, -3.919524204e-06f, -3.898008390e-06f,
--3.876488285e-06f, -3.854963929e-06f, -3.833435358e-06f, -3.811902611e-06f, -3.790365724e-06f, -3.768824737e-06f, -3.747279687e-06f, -3.725730612e-06f, -3.704177548e-06f, -3.682620535e-06f,
--3.661059610e-06f, -3.639494811e-06f, -3.617926175e-06f, -3.596353740e-06f, -3.574777545e-06f, -3.553197626e-06f, -3.531614022e-06f, -3.510026771e-06f, -3.488435910e-06f, -3.466841477e-06f,
--3.445243510e-06f, -3.423642047e-06f, -3.402037126e-06f, -3.380428783e-06f, -3.358817058e-06f, -3.337201988e-06f, -3.315583611e-06f, -3.293961965e-06f, -3.272337087e-06f, -3.250709015e-06f,
--3.229077788e-06f, -3.207443442e-06f, -3.185806016e-06f, -3.164165548e-06f, -3.142522075e-06f, -3.120875636e-06f, -3.099226267e-06f, -3.077574008e-06f, -3.055918895e-06f, -3.034260967e-06f,
--3.012600261e-06f, -2.990936816e-06f, -2.969270668e-06f, -2.947601857e-06f, -2.925930419e-06f, -2.904256393e-06f, -2.882579816e-06f, -2.860900727e-06f, -2.839219163e-06f, -2.817535161e-06f,
--2.795848761e-06f, -2.774159999e-06f, -2.752468913e-06f, -2.730775542e-06f, -2.709079923e-06f, -2.687382094e-06f, -2.665682092e-06f, -2.643979956e-06f, -2.622275724e-06f, -2.600569433e-06f,
--2.578861121e-06f, -2.557150826e-06f, -2.535438586e-06f, -2.513724438e-06f, -2.492008420e-06f, -2.470290571e-06f, -2.448570928e-06f, -2.426849529e-06f, -2.405126412e-06f, -2.383401614e-06f,
--2.361675173e-06f, -2.339947128e-06f, -2.318217516e-06f, -2.296486374e-06f, -2.274753741e-06f, -2.253019655e-06f, -2.231284152e-06f, -2.209547272e-06f, -2.187809052e-06f, -2.166069529e-06f,
--2.144328741e-06f, -2.122586727e-06f, -2.100843524e-06f, -2.079099170e-06f, -2.057353703e-06f, -2.035607160e-06f, -2.013859579e-06f, -1.992110998e-06f, -1.970361455e-06f, -1.948610987e-06f,
--1.926859633e-06f, -1.905107430e-06f, -1.883354415e-06f, -1.861600628e-06f, -1.839846105e-06f, -1.818090884e-06f, -1.796335003e-06f, -1.774578499e-06f, -1.752821411e-06f, -1.731063777e-06f,
--1.709305633e-06f, -1.687547018e-06f, -1.665787969e-06f, -1.644028525e-06f, -1.622268722e-06f, -1.600508600e-06f, -1.578748194e-06f, -1.556987543e-06f, -1.535226686e-06f, -1.513465659e-06f,
--1.491704500e-06f, -1.469943247e-06f, -1.448181937e-06f, -1.426420609e-06f, -1.404659300e-06f, -1.382898048e-06f, -1.361136890e-06f, -1.339375864e-06f, -1.317615008e-06f, -1.295854359e-06f,
--1.274093955e-06f, -1.252333834e-06f, -1.230574034e-06f, -1.208814591e-06f, -1.187055544e-06f, -1.165296931e-06f, -1.143538788e-06f, -1.121781154e-06f, -1.100024067e-06f, -1.078267563e-06f,
--1.056511680e-06f, -1.034756457e-06f, -1.013001930e-06f, -9.912481381e-07f, -9.694951176e-07f, -9.477429066e-07f, -9.259915426e-07f, -9.042410632e-07f, -8.824915061e-07f, -8.607429086e-07f,
--8.389953085e-07f, -8.172487432e-07f, -7.955032504e-07f, -7.737588675e-07f, -7.520156321e-07f, -7.302735817e-07f, -7.085327538e-07f, -6.867931860e-07f, -6.650549158e-07f, -6.433179806e-07f,
--6.215824180e-07f, -5.998482654e-07f, -5.781155604e-07f, -5.563843403e-07f, -5.346546428e-07f, -5.129265051e-07f, -4.911999649e-07f, -4.694750595e-07f, -4.477518264e-07f, -4.260303029e-07f,
--4.043105267e-07f, -3.825925350e-07f, -3.608763652e-07f, -3.391620549e-07f, -3.174496413e-07f, -2.957391618e-07f, -2.740306539e-07f, -2.523241549e-07f, -2.306197022e-07f, -2.089173332e-07f,
--1.872170851e-07f, -1.655189953e-07f, -1.438231013e-07f, -1.221294402e-07f, -1.004380494e-07f, -7.874896624e-08f, -5.706222800e-08f, -3.537787198e-08f, -1.369593546e-08f, 7.983544288e-09f,
-2.966052999e-08f, 5.133498439e-08f, 7.300687023e-08f, 9.467615028e-08f, 1.163427873e-07f, 1.380067441e-07f, 1.596679833e-07f, 1.813264680e-07f, 2.029821607e-07f, 2.246350244e-07f,
-2.462850218e-07f, 2.679321159e-07f, 2.895762693e-07f, 3.112174450e-07f, 3.328556059e-07f, 3.544907148e-07f, 3.761227345e-07f, 3.977516280e-07f, 4.193773582e-07f, 4.409998880e-07f,
-4.626191802e-07f, 4.842351978e-07f, 5.058479038e-07f, 5.274572611e-07f, 5.490632326e-07f, 5.706657813e-07f, 5.922648702e-07f, 6.138604623e-07f, 6.354525205e-07f, 6.570410080e-07f,
-6.786258876e-07f, 7.002071224e-07f, 7.217846755e-07f, 7.433585099e-07f, 7.649285887e-07f, 7.864948749e-07f, 8.080573317e-07f, 8.296159220e-07f, 8.511706090e-07f, 8.727213559e-07f,
-8.942681257e-07f, 9.158108817e-07f, 9.373495868e-07f, 9.588842043e-07f, 9.804146974e-07f, 1.001941029e-06f, 1.023463163e-06f, 1.044981062e-06f, 1.066494689e-06f, 1.088004008e-06f,
-1.109508982e-06f, 1.131009573e-06f, 1.152505747e-06f, 1.173997464e-06f, 1.195484690e-06f, 1.216967387e-06f, 1.238445518e-06f, 1.259919047e-06f, 1.281387937e-06f, 1.302852152e-06f,
-1.324311654e-06f, 1.345766408e-06f, 1.367216377e-06f, 1.388661523e-06f, 1.410101811e-06f, 1.431537204e-06f, 1.452967665e-06f, 1.474393158e-06f, 1.495813645e-06f, 1.517229092e-06f,
-1.538639461e-06f, 1.560044715e-06f, 1.581444819e-06f, 1.602839735e-06f, 1.624229427e-06f, 1.645613859e-06f, 1.666992995e-06f, 1.688366797e-06f, 1.709735230e-06f, 1.731098257e-06f,
-1.752455841e-06f, 1.773807947e-06f, 1.795154538e-06f, 1.816495578e-06f, 1.837831030e-06f, 1.859160858e-06f, 1.880485026e-06f, 1.901803497e-06f, 1.923116235e-06f, 1.944423204e-06f,
-1.965724368e-06f, 1.987019690e-06f, 2.008309135e-06f, 2.029592665e-06f, 2.050870245e-06f, 2.072141839e-06f, 2.093407411e-06f, 2.114666923e-06f, 2.135920341e-06f, 2.157167628e-06f,
-2.178408748e-06f, 2.199643665e-06f, 2.220872343e-06f, 2.242094746e-06f, 2.263310837e-06f, 2.284520581e-06f, 2.305723942e-06f, 2.326920884e-06f, 2.348111370e-06f, 2.369295365e-06f,
-2.390472833e-06f, 2.411643738e-06f, 2.432808044e-06f, 2.453965715e-06f, 2.475116715e-06f, 2.496261008e-06f, 2.517398559e-06f, 2.538529332e-06f, 2.559653290e-06f, 2.580770399e-06f,
-2.601880621e-06f, 2.622983922e-06f, 2.644080266e-06f, 2.665169617e-06f, 2.686251939e-06f, 2.707327196e-06f, 2.728395354e-06f, 2.749456375e-06f, 2.770510225e-06f, 2.791556868e-06f,
-2.812596268e-06f, 2.833628389e-06f, 2.854653197e-06f, 2.875670655e-06f, 2.896680727e-06f, 2.917683379e-06f, 2.938678575e-06f, 2.959666280e-06f, 2.980646456e-06f, 3.001619071e-06f,
-3.022584087e-06f, 3.043541469e-06f, 3.064491183e-06f, 3.085433192e-06f, 3.106367461e-06f, 3.127293955e-06f, 3.148212639e-06f, 3.169123476e-06f, 3.190026433e-06f, 3.210921473e-06f,
-3.231808561e-06f, 3.252687662e-06f, 3.273558741e-06f, 3.294421762e-06f, 3.315276691e-06f, 3.336123491e-06f, 3.356962129e-06f, 3.377792568e-06f, 3.398614774e-06f, 3.419428711e-06f,
-3.440234345e-06f, 3.461031640e-06f, 3.481820561e-06f, 3.502601073e-06f, 3.523373142e-06f, 3.544136732e-06f, 3.564891807e-06f, 3.585638334e-06f, 3.606376277e-06f, 3.627105602e-06f,
-3.647826272e-06f, 3.668538255e-06f, 3.689241513e-06f, 3.709936014e-06f, 3.730621721e-06f, 3.751298601e-06f, 3.771966617e-06f, 3.792625736e-06f, 3.813275923e-06f, 3.833917143e-06f,
-3.854549361e-06f, 3.875172543e-06f, 3.895786653e-06f, 3.916391658e-06f, 3.936987522e-06f, 3.957574212e-06f, 3.978151691e-06f, 3.998719926e-06f, 4.019278883e-06f, 4.039828526e-06f,
-4.060368821e-06f, 4.080899733e-06f, 4.101421229e-06f, 4.121933273e-06f, 4.142435832e-06f, 4.162928870e-06f, 4.183412354e-06f, 4.203886249e-06f, 4.224350520e-06f, 4.244805134e-06f,
-4.265250055e-06f, 4.285685251e-06f, 4.306110685e-06f, 4.326526325e-06f, 4.346932136e-06f, 4.367328083e-06f, 4.387714132e-06f, 4.408090250e-06f, 4.428456403e-06f, 4.448812555e-06f,
-4.469158673e-06f, 4.489494723e-06f, 4.509820670e-06f, 4.530136481e-06f, 4.550442122e-06f, 4.570737559e-06f, 4.591022757e-06f, 4.611297683e-06f, 4.631562303e-06f, 4.651816582e-06f,
-4.672060488e-06f, 4.692293985e-06f, 4.712517041e-06f, 4.732729621e-06f, 4.752931692e-06f, 4.773123220e-06f, 4.793304171e-06f, 4.813474510e-06f, 4.833634206e-06f, 4.853783223e-06f,
-4.873921529e-06f, 4.894049089e-06f, 4.914165870e-06f, 4.934271839e-06f, 4.954366961e-06f, 4.974451203e-06f, 4.994524532e-06f, 5.014586914e-06f, 5.034638316e-06f, 5.054678704e-06f,
-5.074708044e-06f, 5.094726304e-06f, 5.114733449e-06f, 5.134729448e-06f, 5.154714265e-06f, 5.174687868e-06f, 5.194650223e-06f, 5.214601298e-06f, 5.234541059e-06f, 5.254469472e-06f,
-5.274386505e-06f, 5.294292125e-06f, 5.314186297e-06f, 5.334068989e-06f, 5.353940168e-06f, 5.373799801e-06f, 5.393647855e-06f, 5.413484296e-06f, 5.433309092e-06f, 5.453122209e-06f,
-5.472923616e-06f, 5.492713277e-06f, 5.512491162e-06f, 5.532257236e-06f, 5.552011468e-06f, 5.571753823e-06f, 5.591484270e-06f, 5.611202775e-06f, 5.630909306e-06f, 5.650603829e-06f,
-5.670286313e-06f, 5.689956725e-06f, 5.709615031e-06f, 5.729261199e-06f, 5.748895197e-06f, 5.768516992e-06f, 5.788126551e-06f, 5.807723841e-06f, 5.827308831e-06f, 5.846881488e-06f,
-5.866441778e-06f, 5.885989671e-06f, 5.905525133e-06f, 5.925048131e-06f, 5.944558634e-06f, 5.964056610e-06f, 5.983542025e-06f, 6.003014847e-06f, 6.022475045e-06f, 6.041922586e-06f,
-6.061357437e-06f, 6.080779567e-06f, 6.100188944e-06f, 6.119585534e-06f, 6.138969307e-06f, 6.158340229e-06f, 6.177698269e-06f, 6.197043395e-06f, 6.216375575e-06f, 6.235694777e-06f,
-6.255000969e-06f, 6.274294118e-06f, 6.293574193e-06f, 6.312841163e-06f, 6.332094994e-06f, 6.351335656e-06f, 6.370563116e-06f, 6.389777344e-06f, 6.408978306e-06f, 6.428165971e-06f,
-6.447340308e-06f, 6.466501285e-06f, 6.485648870e-06f, 6.504783031e-06f, 6.523903738e-06f, 6.543010957e-06f, 6.562104659e-06f, 6.581184811e-06f, 6.600251382e-06f, 6.619304340e-06f,
-6.638343654e-06f, 6.657369293e-06f, 6.676381225e-06f, 6.695379418e-06f, 6.714363842e-06f, 6.733334465e-06f, 6.752291256e-06f, 6.771234183e-06f, 6.790163216e-06f, 6.809078324e-06f,
-6.827979474e-06f, 6.846866636e-06f, 6.865739778e-06f, 6.884598871e-06f, 6.903443882e-06f, 6.922274781e-06f, 6.941091536e-06f, 6.959894117e-06f, 6.978682493e-06f, 6.997456633e-06f,
-7.016216505e-06f, 7.034962080e-06f, 7.053693326e-06f, 7.072410212e-06f, 7.091112708e-06f, 7.109800783e-06f, 7.128474406e-06f, 7.147133547e-06f, 7.165778174e-06f, 7.184408258e-06f,
-7.203023767e-06f, 7.221624672e-06f, 7.240210940e-06f, 7.258782543e-06f, 7.277339450e-06f, 7.295881629e-06f, 7.314409052e-06f, 7.332921686e-06f, 7.351419502e-06f, 7.369902470e-06f,
-7.388370559e-06f, 7.406823739e-06f, 7.425261980e-06f, 7.443685251e-06f, 7.462093523e-06f, 7.480486764e-06f, 7.498864946e-06f, 7.517228037e-06f, 7.535576009e-06f, 7.553908830e-06f,
-7.572226470e-06f, 7.590528901e-06f, 7.608816091e-06f, 7.627088012e-06f, 7.645344632e-06f, 7.663585922e-06f, 7.681811853e-06f, 7.700022394e-06f, 7.718217516e-06f, 7.736397189e-06f,
-7.754561383e-06f, 7.772710068e-06f, 7.790843216e-06f, 7.808960795e-06f, 7.827062778e-06f, 7.845149134e-06f, 7.863219833e-06f, 7.881274846e-06f, 7.899314144e-06f, 7.917337697e-06f,
-7.935345476e-06f, 7.953337451e-06f, 7.971313593e-06f, 7.989273873e-06f, 8.007218261e-06f, 8.025146729e-06f, 8.043059246e-06f, 8.060955784e-06f, 8.078836314e-06f, 8.096700806e-06f,
-8.114549232e-06f, 8.132381561e-06f, 8.150197766e-06f, 8.167997818e-06f, 8.185781686e-06f, 8.203549343e-06f, 8.221300759e-06f, 8.239035906e-06f, 8.256754755e-06f, 8.274457276e-06f,
-8.292143441e-06f, 8.309813222e-06f, 8.327466589e-06f, 8.345103514e-06f, 8.362723968e-06f, 8.380327923e-06f, 8.397915350e-06f, 8.415486220e-06f, 8.433040505e-06f, 8.450578177e-06f,
-8.468099206e-06f, 8.485603565e-06f, 8.503091225e-06f, 8.520562158e-06f, 8.538016335e-06f, 8.555453728e-06f, 8.572874309e-06f, 8.590278050e-06f, 8.607664921e-06f, 8.625034896e-06f,
-8.642387946e-06f, 8.659724043e-06f, 8.677043159e-06f, 8.694345265e-06f, 8.711630334e-06f, 8.728898338e-06f, 8.746149249e-06f, 8.763383039e-06f, 8.780599679e-06f, 8.797799143e-06f,
-8.814981402e-06f, 8.832146429e-06f, 8.849294195e-06f, 8.866424674e-06f, 8.883537837e-06f, 8.900633656e-06f, 8.917712105e-06f, 8.934773156e-06f, 8.951816780e-06f, 8.968842951e-06f,
-8.985851641e-06f, 9.002842822e-06f, 9.019816467e-06f, 9.036772549e-06f, 9.053711041e-06f, 9.070631914e-06f, 9.087535143e-06f, 9.104420698e-06f, 9.121288555e-06f, 9.138138684e-06f,
-9.154971059e-06f, 9.171785653e-06f, 9.188582439e-06f, 9.205361389e-06f, 9.222122477e-06f, 9.238865676e-06f, 9.255590959e-06f, 9.272298298e-06f, 9.288987668e-06f, 9.305659041e-06f,
-9.322312389e-06f, 9.338947688e-06f, 9.355564909e-06f, 9.372164027e-06f, 9.388745014e-06f, 9.405307843e-06f, 9.421852489e-06f, 9.438378925e-06f, 9.454887123e-06f, 9.471377058e-06f,
-9.487848704e-06f, 9.504302033e-06f, 9.520737019e-06f, 9.537153636e-06f, 9.553551858e-06f, 9.569931658e-06f, 9.586293011e-06f, 9.602635889e-06f, 9.618960267e-06f, 9.635266118e-06f,
-9.651553417e-06f, 9.667822137e-06f, 9.684072252e-06f, 9.700303737e-06f, 9.716516564e-06f, 9.732710710e-06f, 9.748886146e-06f, 9.765042849e-06f, 9.781180791e-06f, 9.797299947e-06f,
-9.813400291e-06f, 9.829481798e-06f, 9.845544441e-06f, 9.861588196e-06f, 9.877613036e-06f, 9.893618936e-06f, 9.909605870e-06f, 9.925573813e-06f, 9.941522740e-06f, 9.957452624e-06f,
-9.973363441e-06f, 9.989255165e-06f, 1.000512777e-05f, 1.002098123e-05f, 1.003681553e-05f, 1.005263063e-05f, 1.006842651e-05f, 1.008420315e-05f, 1.009996051e-05f, 1.011569859e-05f,
-1.013141734e-05f, 1.014711675e-05f, 1.016279679e-05f, 1.017845743e-05f, 1.019409866e-05f, 1.020972044e-05f, 1.022532275e-05f, 1.024090557e-05f, 1.025646887e-05f, 1.027201262e-05f,
-1.028753681e-05f, 1.030304141e-05f, 1.031852639e-05f, 1.033399172e-05f, 1.034943740e-05f, 1.036486338e-05f, 1.038026964e-05f, 1.039565617e-05f, 1.041102293e-05f, 1.042636990e-05f,
-1.044169706e-05f, 1.045700438e-05f, 1.047229184e-05f, 1.048755942e-05f, 1.050280709e-05f, 1.051803482e-05f, 1.053324260e-05f, 1.054843039e-05f, 1.056359818e-05f, 1.057874594e-05f,
-1.059387364e-05f, 1.060898127e-05f, 1.062406879e-05f, 1.063913619e-05f, 1.065418344e-05f, 1.066921052e-05f, 1.068421740e-05f, 1.069920406e-05f, 1.071417048e-05f, 1.072911663e-05f,
-1.074404249e-05f, 1.075894803e-05f, 1.077383324e-05f, 1.078869808e-05f, 1.080354254e-05f, 1.081836659e-05f, 1.083317021e-05f, 1.084795338e-05f, 1.086271607e-05f, 1.087745825e-05f,
-1.089217991e-05f, 1.090688103e-05f, 1.092156157e-05f, 1.093622152e-05f, 1.095086085e-05f, 1.096547954e-05f, 1.098007757e-05f, 1.099465492e-05f, 1.100921155e-05f, 1.102374746e-05f,
-1.103826261e-05f, 1.105275698e-05f, 1.106723055e-05f, 1.108168330e-05f, 1.109611521e-05f, 1.111052625e-05f, 1.112491639e-05f, 1.113928563e-05f, 1.115363393e-05f, 1.116796127e-05f,
-1.118226764e-05f, 1.119655300e-05f, 1.121081733e-05f, 1.122506062e-05f, 1.123928284e-05f, 1.125348397e-05f, 1.126766398e-05f, 1.128182286e-05f, 1.129596058e-05f, 1.131007712e-05f,
-1.132417246e-05f, 1.133824657e-05f, 1.135229944e-05f, 1.136633104e-05f, 1.138034135e-05f, 1.139433035e-05f, 1.140829802e-05f, 1.142224433e-05f, 1.143616927e-05f, 1.145007281e-05f,
-1.146395492e-05f, 1.147781560e-05f, 1.149165481e-05f, 1.150547254e-05f, 1.151926876e-05f, 1.153304346e-05f, 1.154679660e-05f, 1.156052818e-05f, 1.157423816e-05f, 1.158792653e-05f,
-1.160159327e-05f, 1.161523835e-05f, 1.162886176e-05f, 1.164246346e-05f, 1.165604345e-05f, 1.166960171e-05f, 1.168313820e-05f, 1.169665290e-05f, 1.171014581e-05f, 1.172361689e-05f,
-1.173706613e-05f, 1.175049351e-05f, 1.176389899e-05f, 1.177728258e-05f, 1.179064423e-05f, 1.180398394e-05f, 1.181730168e-05f, 1.183059743e-05f, 1.184387117e-05f, 1.185712289e-05f,
-1.187035255e-05f, 1.188356014e-05f, 1.189674564e-05f, 1.190990903e-05f, 1.192305029e-05f, 1.193616940e-05f, 1.194926633e-05f, 1.196234108e-05f, 1.197539361e-05f, 1.198842391e-05f,
-1.200143196e-05f, 1.201441773e-05f, 1.202738122e-05f, 1.204032239e-05f, 1.205324123e-05f, 1.206613772e-05f, 1.207901184e-05f, 1.209186356e-05f, 1.210469288e-05f, 1.211749977e-05f,
-1.213028420e-05f, 1.214304617e-05f, 1.215578565e-05f, 1.216850262e-05f, 1.218119706e-05f, 1.219386895e-05f, 1.220651828e-05f, 1.221914502e-05f, 1.223174916e-05f, 1.224433067e-05f,
-1.225688954e-05f, 1.226942574e-05f, 1.228193927e-05f, 1.229443009e-05f, 1.230689819e-05f, 1.231934356e-05f, 1.233176616e-05f, 1.234416599e-05f, 1.235654302e-05f, 1.236889724e-05f,
-1.238122863e-05f, 1.239353716e-05f, 1.240582282e-05f, 1.241808560e-05f, 1.243032546e-05f, 1.244254240e-05f, 1.245473640e-05f, 1.246690743e-05f, 1.247905548e-05f, 1.249118053e-05f,
-1.250328256e-05f, 1.251536155e-05f, 1.252741749e-05f, 1.253945035e-05f, 1.255146012e-05f, 1.256344678e-05f, 1.257541032e-05f, 1.258735071e-05f, 1.259926793e-05f, 1.261116197e-05f,
-1.262303282e-05f, 1.263488044e-05f, 1.264670483e-05f, 1.265850596e-05f, 1.267028383e-05f, 1.268203840e-05f, 1.269376967e-05f, 1.270547762e-05f, 1.271716222e-05f, 1.272882346e-05f,
-1.274046133e-05f, 1.275207580e-05f, 1.276366686e-05f, 1.277523449e-05f, 1.278677867e-05f, 1.279829939e-05f, 1.280979663e-05f, 1.282127037e-05f, 1.283272060e-05f, 1.284414729e-05f,
-1.285555043e-05f, 1.286693001e-05f, 1.287828600e-05f, 1.288961839e-05f, 1.290092716e-05f, 1.291221230e-05f, 1.292347379e-05f, 1.293471161e-05f, 1.294592574e-05f, 1.295711618e-05f,
-1.296828289e-05f, 1.297942587e-05f, 1.299054510e-05f, 1.300164056e-05f, 1.301271224e-05f, 1.302376011e-05f, 1.303478417e-05f, 1.304578440e-05f, 1.305676077e-05f, 1.306771328e-05f,
-1.307864191e-05f, 1.308954663e-05f, 1.310042745e-05f, 1.311128433e-05f, 1.312211726e-05f, 1.313292624e-05f, 1.314371123e-05f, 1.315447223e-05f, 1.316520922e-05f, 1.317592218e-05f,
-1.318661110e-05f, 1.319727596e-05f, 1.320791675e-05f, 1.321853345e-05f, 1.322912604e-05f, 1.323969451e-05f, 1.325023885e-05f, 1.326075904e-05f, 1.327125505e-05f, 1.328172689e-05f,
-1.329217453e-05f, 1.330259795e-05f, 1.331299715e-05f, 1.332337210e-05f, 1.333372280e-05f, 1.334404922e-05f, 1.335435135e-05f, 1.336462917e-05f, 1.337488268e-05f, 1.338511186e-05f,
-1.339531668e-05f, 1.340549714e-05f, 1.341565323e-05f, 1.342578492e-05f, 1.343589220e-05f, 1.344597506e-05f, 1.345603348e-05f, 1.346606745e-05f, 1.347607695e-05f, 1.348606197e-05f,
-1.349602250e-05f, 1.350595851e-05f, 1.351587000e-05f, 1.352575695e-05f, 1.353561935e-05f, 1.354545718e-05f, 1.355527043e-05f, 1.356505909e-05f, 1.357482313e-05f, 1.358456255e-05f,
-1.359427734e-05f, 1.360396747e-05f, 1.361363293e-05f, 1.362327371e-05f, 1.363288981e-05f, 1.364248119e-05f, 1.365204785e-05f, 1.366158978e-05f, 1.367110696e-05f, 1.368059937e-05f,
-1.369006701e-05f, 1.369950986e-05f, 1.370892791e-05f, 1.371832114e-05f, 1.372768954e-05f, 1.373703310e-05f, 1.374635180e-05f, 1.375564563e-05f, 1.376491458e-05f, 1.377415864e-05f,
-1.378337778e-05f, 1.379257200e-05f, 1.380174129e-05f, 1.381088562e-05f, 1.382000500e-05f, 1.382909940e-05f, 1.383816881e-05f, 1.384721323e-05f, 1.385623263e-05f, 1.386522700e-05f,
-1.387419634e-05f, 1.388314062e-05f, 1.389205984e-05f, 1.390095399e-05f, 1.390982305e-05f, 1.391866700e-05f, 1.392748584e-05f, 1.393627956e-05f, 1.394504814e-05f, 1.395379157e-05f,
-1.396250983e-05f, 1.397120292e-05f, 1.397987082e-05f, 1.398851352e-05f, 1.399713102e-05f, 1.400572328e-05f, 1.401429032e-05f, 1.402283210e-05f, 1.403134863e-05f, 1.403983988e-05f,
-1.404830585e-05f, 1.405674653e-05f, 1.406516190e-05f, 1.407355196e-05f, 1.408191668e-05f, 1.409025606e-05f, 1.409857009e-05f, 1.410685876e-05f, 1.411512205e-05f, 1.412335995e-05f,
-1.413157245e-05f, 1.413975955e-05f, 1.414792122e-05f, 1.415605746e-05f, 1.416416826e-05f, 1.417225360e-05f, 1.418031348e-05f, 1.418834789e-05f, 1.419635680e-05f, 1.420434022e-05f,
-1.421229812e-05f, 1.422023051e-05f, 1.422813737e-05f, 1.423601868e-05f, 1.424387444e-05f, 1.425170464e-05f, 1.425950926e-05f, 1.426728830e-05f, 1.427504175e-05f, 1.428276959e-05f,
-1.429047182e-05f, 1.429814841e-05f, 1.430579938e-05f, 1.431342469e-05f, 1.432102435e-05f, 1.432859834e-05f, 1.433614666e-05f, 1.434366928e-05f, 1.435116621e-05f, 1.435863743e-05f,
-1.436608294e-05f, 1.437350271e-05f, 1.438089675e-05f, 1.438826504e-05f, 1.439560758e-05f, 1.440292434e-05f, 1.441021534e-05f, 1.441748054e-05f, 1.442471995e-05f, 1.443193355e-05f,
-1.443912134e-05f, 1.444628331e-05f, 1.445341944e-05f, 1.446052973e-05f, 1.446761416e-05f, 1.447467274e-05f, 1.448170544e-05f, 1.448871226e-05f, 1.449569319e-05f, 1.450264823e-05f,
-1.450957736e-05f, 1.451648057e-05f, 1.452335785e-05f, 1.453020920e-05f, 1.453703461e-05f, 1.454383407e-05f, 1.455060756e-05f, 1.455735508e-05f, 1.456407663e-05f, 1.457077219e-05f,
-1.457744175e-05f, 1.458408531e-05f, 1.459070286e-05f, 1.459729438e-05f, 1.460385988e-05f, 1.461039934e-05f, 1.461691275e-05f, 1.462340011e-05f, 1.462986140e-05f, 1.463629662e-05f,
-1.464270577e-05f, 1.464908883e-05f, 1.465544579e-05f, 1.466177665e-05f, 1.466808139e-05f, 1.467436002e-05f, 1.468061252e-05f, 1.468683889e-05f, 1.469303911e-05f, 1.469921318e-05f,
-1.470536110e-05f, 1.471148285e-05f, 1.471757843e-05f, 1.472364782e-05f, 1.472969103e-05f, 1.473570804e-05f, 1.474169885e-05f, 1.474766345e-05f, 1.475360183e-05f, 1.475951398e-05f,
-1.476539990e-05f, 1.477125959e-05f, 1.477709302e-05f, 1.478290021e-05f, 1.478868113e-05f, 1.479443578e-05f, 1.480016416e-05f, 1.480586626e-05f, 1.481154207e-05f, 1.481719159e-05f,
-1.482281480e-05f, 1.482841171e-05f, 1.483398230e-05f, 1.483952656e-05f, 1.484504450e-05f, 1.485053611e-05f, 1.485600137e-05f, 1.486144028e-05f, 1.486685284e-05f, 1.487223904e-05f,
-1.487759888e-05f, 1.488293234e-05f, 1.488823942e-05f, 1.489352011e-05f, 1.489877442e-05f, 1.490400232e-05f, 1.490920382e-05f, 1.491437892e-05f, 1.491952759e-05f, 1.492464985e-05f,
-1.492974568e-05f, 1.493481507e-05f, 1.493985803e-05f, 1.494487454e-05f, 1.494986460e-05f, 1.495482821e-05f, 1.495976535e-05f, 1.496467603e-05f, 1.496956024e-05f, 1.497441797e-05f,
-1.497924921e-05f, 1.498405397e-05f, 1.498883223e-05f, 1.499358400e-05f, 1.499830926e-05f, 1.500300801e-05f, 1.500768025e-05f, 1.501232597e-05f, 1.501694516e-05f, 1.502153783e-05f,
-1.502610396e-05f, 1.503064355e-05f, 1.503515660e-05f, 1.503964310e-05f, 1.504410305e-05f, 1.504853644e-05f, 1.505294326e-05f, 1.505732352e-05f, 1.506167721e-05f, 1.506600433e-05f,
-1.507030486e-05f, 1.507457880e-05f, 1.507882616e-05f, 1.508304693e-05f, 1.508724109e-05f, 1.509140866e-05f, 1.509554962e-05f, 1.509966397e-05f, 1.510375170e-05f, 1.510781282e-05f,
-1.511184731e-05f, 1.511585518e-05f, 1.511983642e-05f, 1.512379103e-05f, 1.512771899e-05f, 1.513162032e-05f, 1.513549500e-05f, 1.513934303e-05f, 1.514316441e-05f, 1.514695914e-05f,
-1.515072720e-05f, 1.515446861e-05f, 1.515818334e-05f, 1.516187141e-05f, 1.516553280e-05f, 1.516916752e-05f, 1.517277556e-05f, 1.517635692e-05f, 1.517991159e-05f, 1.518343957e-05f,
-1.518694086e-05f, 1.519041546e-05f, 1.519386335e-05f, 1.519728455e-05f, 1.520067905e-05f, 1.520404684e-05f, 1.520738792e-05f, 1.521070228e-05f, 1.521398994e-05f, 1.521725087e-05f,
-1.522048509e-05f, 1.522369259e-05f, 1.522687336e-05f, 1.523002740e-05f, 1.523315472e-05f, 1.523625530e-05f, 1.523932915e-05f, 1.524237626e-05f, 1.524539664e-05f, 1.524839027e-05f,
-1.525135717e-05f, 1.525429731e-05f, 1.525721072e-05f, 1.526009737e-05f, 1.526295727e-05f, 1.526579042e-05f, 1.526859682e-05f, 1.527137646e-05f, 1.527412934e-05f, 1.527685546e-05f,
-1.527955482e-05f, 1.528222742e-05f, 1.528487326e-05f, 1.528749233e-05f, 1.529008463e-05f, 1.529265016e-05f, 1.529518893e-05f, 1.529770092e-05f, 1.530018614e-05f, 1.530264459e-05f,
-1.530507626e-05f, 1.530748116e-05f, 1.530985928e-05f, 1.531221062e-05f, 1.531453518e-05f, 1.531683296e-05f, 1.531910397e-05f, 1.532134819e-05f, 1.532356562e-05f, 1.532575628e-05f,
-1.532792015e-05f, 1.533005723e-05f, 1.533216754e-05f, 1.533425105e-05f, 1.533630778e-05f, 1.533833772e-05f, 1.534034088e-05f, 1.534231725e-05f, 1.534426683e-05f, 1.534618962e-05f,
-1.534808562e-05f, 1.534995484e-05f, 1.535179726e-05f, 1.535361290e-05f, 1.535540175e-05f, 1.535716381e-05f, 1.535889908e-05f, 1.536060756e-05f, 1.536228925e-05f, 1.536394416e-05f,
-1.536557227e-05f, 1.536717360e-05f, 1.536874814e-05f, 1.537029590e-05f, 1.537181686e-05f, 1.537331104e-05f, 1.537477844e-05f, 1.537621905e-05f, 1.537763287e-05f, 1.537901991e-05f,
-1.538038017e-05f, 1.538171365e-05f, 1.538302034e-05f, 1.538430025e-05f, 1.538555338e-05f, 1.538677973e-05f, 1.538797931e-05f, 1.538915210e-05f, 1.539029812e-05f, 1.539141737e-05f,
-1.539250984e-05f, 1.539357554e-05f, 1.539461446e-05f, 1.539562662e-05f, 1.539661201e-05f, 1.539757063e-05f, 1.539850248e-05f, 1.539940757e-05f, 1.540028590e-05f, 1.540113746e-05f,
-1.540196227e-05f, 1.540276031e-05f, 1.540353160e-05f, 1.540427614e-05f, 1.540499392e-05f, 1.540568495e-05f, 1.540634923e-05f, 1.540698677e-05f, 1.540759756e-05f, 1.540818160e-05f,
-1.540873891e-05f, 1.540926947e-05f, 1.540977330e-05f, 1.541025039e-05f, 1.541070075e-05f, 1.541112439e-05f, 1.541152129e-05f, 1.541189147e-05f, 1.541223492e-05f, 1.541255166e-05f,
-1.541284167e-05f, 1.541310497e-05f, 1.541334156e-05f, 1.541355144e-05f, 1.541373461e-05f, 1.541389108e-05f, 1.541402084e-05f, 1.541412391e-05f, 1.541420028e-05f, 1.541424995e-05f,
-1.541427294e-05f, 1.541426924e-05f, 1.541423886e-05f, 1.541418179e-05f, 1.541409805e-05f, 1.541398763e-05f, 1.541385054e-05f, 1.541368679e-05f, 1.541349637e-05f, 1.541327928e-05f,
-1.541303555e-05f, 1.541276515e-05f, 1.541246811e-05f, 1.541214442e-05f, 1.541179408e-05f, 1.541141711e-05f, 1.541101350e-05f, 1.541058326e-05f, 1.541012639e-05f, 1.540964290e-05f,
-1.540913278e-05f, 1.540859605e-05f, 1.540803271e-05f, 1.540744275e-05f, 1.540682620e-05f, 1.540618304e-05f, 1.540551329e-05f, 1.540481694e-05f, 1.540409401e-05f, 1.540334449e-05f,
-1.540256840e-05f, 1.540176573e-05f, 1.540093649e-05f, 1.540008069e-05f, 1.539919832e-05f, 1.539828940e-05f, 1.539735392e-05f, 1.539639190e-05f, 1.539540334e-05f, 1.539438824e-05f,
-1.539334661e-05f, 1.539227845e-05f, 1.539118376e-05f, 1.539006256e-05f, 1.538891485e-05f, 1.538774062e-05f, 1.538653990e-05f, 1.538531267e-05f, 1.538405896e-05f, 1.538277876e-05f,
-1.538147207e-05f, 1.538013891e-05f, 1.537877928e-05f, 1.537739318e-05f, 1.537598062e-05f, 1.537454161e-05f, 1.537307614e-05f, 1.537158423e-05f, 1.537006589e-05f, 1.536852111e-05f,
-1.536694991e-05f, 1.536535228e-05f, 1.536372824e-05f, 1.536207779e-05f, 1.536040094e-05f, 1.535869769e-05f, 1.535696805e-05f, 1.535521202e-05f, 1.535342961e-05f, 1.535162084e-05f,
-1.534978569e-05f, 1.534792418e-05f, 1.534603632e-05f, 1.534412211e-05f, 1.534218156e-05f, 1.534021467e-05f, 1.533822146e-05f, 1.533620192e-05f, 1.533415606e-05f, 1.533208390e-05f,
-1.532998544e-05f, 1.532786067e-05f, 1.532570962e-05f, 1.532353229e-05f, 1.532132868e-05f, 1.531909880e-05f, 1.531684266e-05f, 1.531456027e-05f, 1.531225162e-05f, 1.530991674e-05f,
-1.530755562e-05f, 1.530516828e-05f, 1.530275471e-05f, 1.530031493e-05f, 1.529784895e-05f, 1.529535677e-05f, 1.529283840e-05f, 1.529029385e-05f, 1.528772312e-05f, 1.528512622e-05f,
-1.528250316e-05f, 1.527985395e-05f, 1.527717859e-05f, 1.527447710e-05f, 1.527174947e-05f, 1.526899573e-05f, 1.526621586e-05f, 1.526340990e-05f, 1.526057783e-05f, 1.525771967e-05f,
-1.525483543e-05f, 1.525192511e-05f, 1.524898873e-05f, 1.524602628e-05f, 1.524303779e-05f, 1.524002325e-05f, 1.523698268e-05f, 1.523391609e-05f, 1.523082347e-05f, 1.522770485e-05f,
-1.522456023e-05f, 1.522138961e-05f, 1.521819301e-05f, 1.521497043e-05f, 1.521172189e-05f, 1.520844739e-05f, 1.520514694e-05f, 1.520182054e-05f, 1.519846822e-05f, 1.519508997e-05f,
-1.519168581e-05f, 1.518825574e-05f, 1.518479978e-05f, 1.518131793e-05f, 1.517781020e-05f, 1.517427660e-05f, 1.517071714e-05f, 1.516713183e-05f, 1.516352067e-05f, 1.515988369e-05f,
-1.515622088e-05f, 1.515253225e-05f, 1.514881782e-05f, 1.514507760e-05f, 1.514131159e-05f, 1.513751980e-05f, 1.513370225e-05f, 1.512985894e-05f, 1.512598988e-05f, 1.512209508e-05f,
-1.511817456e-05f, 1.511422831e-05f, 1.511025636e-05f, 1.510625871e-05f, 1.510223537e-05f, 1.509818635e-05f, 1.509411166e-05f, 1.509001131e-05f, 1.508588532e-05f, 1.508173368e-05f,
-1.507755642e-05f, 1.507335353e-05f, 1.506912504e-05f, 1.506487095e-05f, 1.506059128e-05f, 1.505628602e-05f, 1.505195520e-05f, 1.504759883e-05f, 1.504321690e-05f, 1.503880944e-05f,
-1.503437646e-05f, 1.502991796e-05f, 1.502543396e-05f, 1.502092447e-05f, 1.501638950e-05f, 1.501182905e-05f, 1.500724314e-05f, 1.500263178e-05f, 1.499799499e-05f, 1.499333277e-05f,
-1.498864513e-05f, 1.498393208e-05f, 1.497919364e-05f, 1.497442982e-05f, 1.496964063e-05f, 1.496482607e-05f, 1.495998617e-05f, 1.495512093e-05f, 1.495023036e-05f, 1.494531447e-05f,
-1.494037328e-05f, 1.493540680e-05f, 1.493041504e-05f, 1.492539800e-05f, 1.492035571e-05f, 1.491528818e-05f, 1.491019541e-05f, 1.490507741e-05f, 1.489993421e-05f, 1.489476580e-05f,
-1.488957221e-05f, 1.488435345e-05f, 1.487910952e-05f, 1.487384044e-05f, 1.486854622e-05f, 1.486322687e-05f, 1.485788240e-05f, 1.485251284e-05f, 1.484711818e-05f, 1.484169845e-05f,
-1.483625364e-05f, 1.483078379e-05f, 1.482528889e-05f, 1.481976896e-05f, 1.481422402e-05f, 1.480865407e-05f, 1.480305913e-05f, 1.479743921e-05f, 1.479179433e-05f, 1.478612449e-05f,
-1.478042971e-05f, 1.477471000e-05f, 1.476896538e-05f, 1.476319585e-05f, 1.475740144e-05f, 1.475158214e-05f, 1.474573799e-05f, 1.473986898e-05f, 1.473397513e-05f, 1.472805646e-05f,
-1.472211298e-05f, 1.471614469e-05f, 1.471015163e-05f, 1.470413379e-05f, 1.469809119e-05f, 1.469202385e-05f, 1.468593177e-05f, 1.467981498e-05f, 1.467367348e-05f, 1.466750729e-05f,
-1.466131642e-05f, 1.465510088e-05f, 1.464886070e-05f, 1.464259588e-05f, 1.463630643e-05f, 1.462999237e-05f, 1.462365372e-05f, 1.461729049e-05f, 1.461090268e-05f, 1.460449033e-05f,
-1.459805343e-05f, 1.459159200e-05f, 1.458510607e-05f, 1.457859563e-05f, 1.457206071e-05f, 1.456550132e-05f, 1.455891747e-05f, 1.455230918e-05f, 1.454567647e-05f, 1.453901934e-05f,
-1.453233781e-05f, 1.452563190e-05f, 1.451890162e-05f, 1.451214698e-05f, 1.450536800e-05f, 1.449856469e-05f, 1.449173708e-05f, 1.448488516e-05f, 1.447800896e-05f, 1.447110850e-05f,
-1.446418378e-05f, 1.445723482e-05f, 1.445026164e-05f, 1.444326425e-05f, 1.443624267e-05f, 1.442919691e-05f, 1.442212699e-05f, 1.441503291e-05f, 1.440791471e-05f, 1.440077238e-05f,
-1.439360595e-05f, 1.438641543e-05f, 1.437920084e-05f, 1.437196220e-05f, 1.436469951e-05f, 1.435741279e-05f, 1.435010206e-05f, 1.434276734e-05f, 1.433540864e-05f, 1.432802597e-05f,
-1.432061935e-05f, 1.431318880e-05f, 1.430573433e-05f, 1.429825595e-05f, 1.429075369e-05f, 1.428322756e-05f, 1.427567757e-05f, 1.426810375e-05f, 1.426050610e-05f, 1.425288464e-05f,
-1.424523939e-05f, 1.423757037e-05f, 1.422987759e-05f, 1.422216106e-05f, 1.421442080e-05f, 1.420665684e-05f, 1.419886918e-05f, 1.419105784e-05f, 1.418322283e-05f, 1.417536418e-05f,
-1.416748191e-05f, 1.415957601e-05f, 1.415164652e-05f, 1.414369345e-05f, 1.413571682e-05f, 1.412771664e-05f, 1.411969292e-05f, 1.411164570e-05f, 1.410357497e-05f, 1.409548076e-05f,
-1.408736309e-05f, 1.407922198e-05f, 1.407105743e-05f, 1.406286947e-05f, 1.405465811e-05f, 1.404642337e-05f, 1.403816526e-05f, 1.402988381e-05f, 1.402157904e-05f, 1.401325095e-05f,
-1.400489956e-05f, 1.399652490e-05f, 1.398812698e-05f, 1.397970581e-05f, 1.397126142e-05f, 1.396279382e-05f, 1.395430303e-05f, 1.394578907e-05f, 1.393725194e-05f, 1.392869168e-05f,
-1.392010830e-05f, 1.391150181e-05f, 1.390287224e-05f, 1.389421960e-05f, 1.388554391e-05f, 1.387684518e-05f, 1.386812344e-05f, 1.385937871e-05f, 1.385061099e-05f, 1.384182031e-05f,
-1.383300668e-05f, 1.382417013e-05f, 1.381531067e-05f, 1.380642832e-05f, 1.379752310e-05f, 1.378859502e-05f, 1.377964411e-05f, 1.377067037e-05f, 1.376167384e-05f, 1.375265453e-05f,
-1.374361245e-05f, 1.373454763e-05f, 1.372546008e-05f, 1.371634983e-05f, 1.370721688e-05f, 1.369806126e-05f, 1.368888299e-05f, 1.367968209e-05f, 1.367045857e-05f, 1.366121245e-05f,
-1.365194375e-05f, 1.364265249e-05f, 1.363333869e-05f, 1.362400237e-05f, 1.361464355e-05f, 1.360526224e-05f, 1.359585846e-05f, 1.358643224e-05f, 1.357698359e-05f, 1.356751253e-05f,
-1.355801907e-05f, 1.354850325e-05f, 1.353896508e-05f, 1.352940457e-05f, 1.351982175e-05f, 1.351021663e-05f, 1.350058924e-05f, 1.349093959e-05f, 1.348126770e-05f, 1.347157360e-05f,
-1.346185729e-05f, 1.345211881e-05f, 1.344235817e-05f, 1.343257539e-05f, 1.342277049e-05f, 1.341294349e-05f, 1.340309441e-05f, 1.339322326e-05f, 1.338333007e-05f, 1.337341486e-05f,
-1.336347765e-05f, 1.335351845e-05f, 1.334353730e-05f, 1.333353419e-05f, 1.332350917e-05f, 1.331346224e-05f, 1.330339343e-05f, 1.329330275e-05f, 1.328319023e-05f, 1.327305589e-05f,
-1.326289974e-05f, 1.325272181e-05f, 1.324252212e-05f, 1.323230068e-05f, 1.322205752e-05f, 1.321179266e-05f, 1.320150611e-05f, 1.319119791e-05f, 1.318086806e-05f, 1.317051659e-05f,
-1.316014352e-05f, 1.314974887e-05f, 1.313933266e-05f, 1.312889491e-05f, 1.311843564e-05f, 1.310795488e-05f, 1.309745264e-05f, 1.308692894e-05f, 1.307638380e-05f, 1.306581725e-05f,
-1.305522930e-05f, 1.304461999e-05f, 1.303398931e-05f, 1.302333731e-05f, 1.301266400e-05f, 1.300196939e-05f, 1.299125352e-05f, 1.298051639e-05f, 1.296975805e-05f, 1.295897849e-05f,
-1.294817775e-05f, 1.293735585e-05f, 1.292651280e-05f, 1.291564864e-05f, 1.290476337e-05f, 1.289385703e-05f, 1.288292963e-05f, 1.287198119e-05f, 1.286101174e-05f, 1.285002129e-05f,
-1.283900987e-05f, 1.282797751e-05f, 1.281692421e-05f, 1.280585001e-05f, 1.279475492e-05f, 1.278363897e-05f, 1.277250218e-05f, 1.276134456e-05f, 1.275016615e-05f, 1.273896696e-05f,
-1.272774702e-05f, 1.271650634e-05f, 1.270524495e-05f, 1.269396287e-05f, 1.268266013e-05f, 1.267133674e-05f, 1.265999272e-05f, 1.264862811e-05f, 1.263724291e-05f, 1.262583716e-05f,
-1.261441087e-05f, 1.260296407e-05f, 1.259149678e-05f, 1.258000902e-05f, 1.256850082e-05f, 1.255697219e-05f, 1.254542316e-05f, 1.253385375e-05f, 1.252226398e-05f, 1.251065388e-05f,
-1.249902346e-05f, 1.248737276e-05f, 1.247570179e-05f, 1.246401058e-05f, 1.245229914e-05f, 1.244056751e-05f, 1.242881570e-05f, 1.241704373e-05f, 1.240525163e-05f, 1.239343943e-05f,
-1.238160714e-05f, 1.236975479e-05f, 1.235788240e-05f, 1.234598999e-05f, 1.233407758e-05f, 1.232214521e-05f, 1.231019289e-05f, 1.229822064e-05f, 1.228622849e-05f, 1.227421646e-05f,
-1.226218458e-05f, 1.225013286e-05f, 1.223806134e-05f, 1.222597003e-05f, 1.221385895e-05f, 1.220172814e-05f, 1.218957761e-05f, 1.217740738e-05f, 1.216521749e-05f, 1.215300795e-05f,
-1.214077879e-05f, 1.212853002e-05f, 1.211626168e-05f, 1.210397379e-05f, 1.209166637e-05f, 1.207933945e-05f, 1.206699304e-05f, 1.205462718e-05f, 1.204224188e-05f, 1.202983717e-05f,
-1.201741307e-05f, 1.200496961e-05f, 1.199250681e-05f, 1.198002469e-05f, 1.196752329e-05f, 1.195500261e-05f, 1.194246269e-05f, 1.192990356e-05f, 1.191732522e-05f, 1.190472772e-05f,
-1.189211106e-05f, 1.187947528e-05f, 1.186682041e-05f, 1.185414645e-05f, 1.184145345e-05f, 1.182874142e-05f, 1.181601038e-05f, 1.180326037e-05f, 1.179049140e-05f, 1.177770350e-05f,
-1.176489670e-05f, 1.175207101e-05f, 1.173922647e-05f, 1.172636310e-05f, 1.171348091e-05f, 1.170057995e-05f, 1.168766022e-05f, 1.167472176e-05f, 1.166176459e-05f, 1.164878874e-05f,
-1.163579422e-05f, 1.162278107e-05f, 1.160974930e-05f, 1.159669895e-05f, 1.158363004e-05f, 1.157054259e-05f, 1.155743663e-05f, 1.154431218e-05f, 1.153116927e-05f, 1.151800792e-05f,
-1.150482816e-05f, 1.149163002e-05f, 1.147841350e-05f, 1.146517865e-05f, 1.145192549e-05f, 1.143865404e-05f, 1.142536433e-05f, 1.141205638e-05f, 1.139873022e-05f, 1.138538587e-05f,
-1.137202337e-05f, 1.135864272e-05f, 1.134524396e-05f, 1.133182712e-05f, 1.131839222e-05f, 1.130493928e-05f, 1.129146833e-05f, 1.127797940e-05f, 1.126447250e-05f, 1.125094768e-05f,
-1.123740495e-05f, 1.122384433e-05f, 1.121026586e-05f, 1.119666956e-05f, 1.118305545e-05f, 1.116942356e-05f, 1.115577392e-05f, 1.114210655e-05f, 1.112842147e-05f, 1.111471872e-05f,
-1.110099832e-05f, 1.108726029e-05f, 1.107350466e-05f, 1.105973146e-05f, 1.104594071e-05f, 1.103213244e-05f, 1.101830667e-05f, 1.100446343e-05f, 1.099060275e-05f, 1.097672465e-05f,
-1.096282916e-05f, 1.094891631e-05f, 1.093498611e-05f, 1.092103860e-05f, 1.090707380e-05f, 1.089309174e-05f, 1.087909245e-05f, 1.086507595e-05f, 1.085104226e-05f, 1.083699142e-05f,
-1.082292345e-05f, 1.080883838e-05f, 1.079473622e-05f, 1.078061702e-05f, 1.076648080e-05f, 1.075232757e-05f, 1.073815738e-05f, 1.072397024e-05f, 1.070976618e-05f, 1.069554523e-05f,
-1.068130741e-05f, 1.066705276e-05f, 1.065278129e-05f, 1.063849304e-05f, 1.062418803e-05f, 1.060986629e-05f, 1.059552785e-05f, 1.058117272e-05f, 1.056680095e-05f, 1.055241255e-05f,
-1.053800755e-05f, 1.052358598e-05f, 1.050914787e-05f, 1.049469324e-05f, 1.048022212e-05f, 1.046573454e-05f, 1.045123052e-05f, 1.043671009e-05f, 1.042217328e-05f, 1.040762012e-05f,
-1.039305063e-05f, 1.037846483e-05f, 1.036386277e-05f, 1.034924445e-05f, 1.033460992e-05f, 1.031995920e-05f, 1.030529231e-05f, 1.029060928e-05f, 1.027591015e-05f, 1.026119493e-05f,
-1.024646365e-05f, 1.023171635e-05f, 1.021695305e-05f, 1.020217377e-05f, 1.018737855e-05f, 1.017256741e-05f, 1.015774038e-05f, 1.014289749e-05f, 1.012803876e-05f, 1.011316422e-05f,
-1.009827391e-05f, 1.008336784e-05f, 1.006844604e-05f, 1.005350855e-05f, 1.003855539e-05f, 1.002358658e-05f, 1.000860216e-05f, 9.993602155e-06f, 9.978586591e-06f, 9.963555495e-06f,
-9.948508896e-06f, 9.933446822e-06f, 9.918369301e-06f, 9.903276360e-06f, 9.888168028e-06f, 9.873044332e-06f, 9.857905300e-06f, 9.842750961e-06f, 9.827581343e-06f, 9.812396472e-06f,
-9.797196379e-06f, 9.781981090e-06f, 9.766750633e-06f, 9.751505038e-06f, 9.736244332e-06f, 9.720968543e-06f, 9.705677699e-06f, 9.690371830e-06f, 9.675050962e-06f, 9.659715124e-06f,
-9.644364345e-06f, 9.628998653e-06f, 9.613618076e-06f, 9.598222643e-06f, 9.582812381e-06f, 9.567387320e-06f, 9.551947488e-06f, 9.536492913e-06f, 9.521023624e-06f, 9.505539649e-06f,
-9.490041017e-06f, 9.474527757e-06f, 9.458999896e-06f, 9.443457464e-06f, 9.427900489e-06f, 9.412328999e-06f, 9.396743025e-06f, 9.381142593e-06f, 9.365527733e-06f, 9.349898473e-06f,
-9.334254843e-06f, 9.318596871e-06f, 9.302924586e-06f, 9.287238016e-06f, 9.271537191e-06f, 9.255822139e-06f, 9.240092889e-06f, 9.224349471e-06f, 9.208591912e-06f, 9.192820242e-06f,
-9.177034491e-06f, 9.161234686e-06f, 9.145420857e-06f, 9.129593032e-06f, 9.113751242e-06f, 9.097895515e-06f, 9.082025880e-06f, 9.066142366e-06f, 9.050245002e-06f, 9.034333818e-06f,
-9.018408842e-06f, 9.002470105e-06f, 8.986517634e-06f, 8.970551459e-06f, 8.954571610e-06f, 8.938578116e-06f, 8.922571006e-06f, 8.906550309e-06f, 8.890516055e-06f, 8.874468273e-06f,
-8.858406992e-06f, 8.842332242e-06f, 8.826244052e-06f, 8.810142452e-06f, 8.794027471e-06f, 8.777899139e-06f, 8.761757484e-06f, 8.745602537e-06f, 8.729434327e-06f, 8.713252884e-06f,
-8.697058237e-06f, 8.680850415e-06f, 8.664629449e-06f, 8.648395368e-06f, 8.632148202e-06f, 8.615887980e-06f, 8.599614732e-06f, 8.583328487e-06f, 8.567029276e-06f, 8.550717129e-06f,
-8.534392074e-06f, 8.518054141e-06f, 8.501703362e-06f, 8.485339764e-06f, 8.468963379e-06f, 8.452574235e-06f, 8.436172364e-06f, 8.419757794e-06f, 8.403330555e-06f, 8.386890679e-06f,
-8.370438194e-06f, 8.353973130e-06f, 8.337495518e-06f, 8.321005387e-06f, 8.304502768e-06f, 8.287987690e-06f, 8.271460184e-06f, 8.254920279e-06f, 8.238368006e-06f, 8.221803395e-06f,
-8.205226476e-06f, 8.188637279e-06f, 8.172035835e-06f, 8.155422172e-06f, 8.138796323e-06f, 8.122158316e-06f, 8.105508182e-06f, 8.088845952e-06f, 8.072171655e-06f, 8.055485323e-06f,
-8.038786984e-06f, 8.022076670e-06f, 8.005354411e-06f, 7.988620237e-06f, 7.971874178e-06f, 7.955116266e-06f, 7.938346530e-06f, 7.921565000e-06f, 7.904771708e-06f, 7.887966684e-06f,
-7.871149957e-06f, 7.854321560e-06f, 7.837481521e-06f, 7.820629873e-06f, 7.803766644e-06f, 7.786891866e-06f, 7.770005570e-06f, 7.753107785e-06f, 7.736198543e-06f, 7.719277874e-06f,
-7.702345809e-06f, 7.685402379e-06f, 7.668447613e-06f, 7.651481544e-06f, 7.634504200e-06f, 7.617515614e-06f, 7.600515816e-06f, 7.583504837e-06f, 7.566482707e-06f, 7.549449458e-06f,
-7.532405119e-06f, 7.515349723e-06f, 7.498283299e-06f, 7.481205878e-06f, 7.464117492e-06f, 7.447018171e-06f, 7.429907947e-06f, 7.412786849e-06f, 7.395654910e-06f, 7.378512159e-06f,
-7.361358628e-06f, 7.344194348e-06f, 7.327019350e-06f, 7.309833665e-06f, 7.292637323e-06f, 7.275430357e-06f, 7.258212796e-06f, 7.240984672e-06f, 7.223746016e-06f, 7.206496860e-06f,
-7.189237233e-06f, 7.171967168e-06f, 7.154686695e-06f, 7.137395846e-06f, 7.120094652e-06f, 7.102783143e-06f, 7.085461352e-06f, 7.068129308e-06f, 7.050787045e-06f, 7.033434592e-06f,
-7.016071981e-06f, 6.998699243e-06f, 6.981316410e-06f, 6.963923513e-06f, 6.946520582e-06f, 6.929107651e-06f, 6.911684748e-06f, 6.894251907e-06f, 6.876809159e-06f, 6.859356534e-06f,
-6.841894064e-06f, 6.824421781e-06f, 6.806939715e-06f, 6.789447899e-06f, 6.771946364e-06f, 6.754435141e-06f, 6.736914262e-06f, 6.719383758e-06f, 6.701843661e-06f, 6.684294002e-06f,
-6.666734813e-06f, 6.649166124e-06f, 6.631587969e-06f, 6.614000378e-06f, 6.596403382e-06f, 6.578797014e-06f, 6.561181305e-06f, 6.543556287e-06f, 6.525921991e-06f, 6.508278449e-06f,
-6.490625692e-06f, 6.472963752e-06f, 6.455292661e-06f, 6.437612451e-06f, 6.419923153e-06f, 6.402224798e-06f, 6.384517419e-06f, 6.366801048e-06f, 6.349075715e-06f, 6.331341454e-06f,
-6.313598294e-06f, 6.295846269e-06f, 6.278085410e-06f, 6.260315749e-06f, 6.242537318e-06f, 6.224750148e-06f, 6.206954272e-06f, 6.189149720e-06f, 6.171336526e-06f, 6.153514720e-06f,
-6.135684335e-06f, 6.117845403e-06f, 6.099997955e-06f, 6.082142024e-06f, 6.064277641e-06f, 6.046404838e-06f, 6.028523647e-06f, 6.010634101e-06f, 5.992736230e-06f, 5.974830068e-06f,
-5.956915646e-06f, 5.938992995e-06f, 5.921062149e-06f, 5.903123139e-06f, 5.885175997e-06f, 5.867220755e-06f, 5.849257445e-06f, 5.831286100e-06f, 5.813306750e-06f, 5.795319429e-06f,
-5.777324169e-06f, 5.759321001e-06f, 5.741309957e-06f, 5.723291071e-06f, 5.705264373e-06f, 5.687229896e-06f, 5.669187673e-06f, 5.651137734e-06f, 5.633080114e-06f, 5.615014842e-06f,
-5.596941953e-06f, 5.578861478e-06f, 5.560773448e-06f, 5.542677898e-06f, 5.524574857e-06f, 5.506464360e-06f, 5.488346438e-06f, 5.470221123e-06f, 5.452088448e-06f, 5.433948445e-06f,
-5.415801146e-06f, 5.397646583e-06f, 5.379484789e-06f, 5.361315796e-06f, 5.343139636e-06f, 5.324956342e-06f, 5.306765946e-06f, 5.288568481e-06f, 5.270363977e-06f, 5.252152469e-06f,
-5.233933989e-06f, 5.215708568e-06f, 5.197476239e-06f, 5.179237035e-06f, 5.160990987e-06f, 5.142738129e-06f, 5.124478493e-06f, 5.106212111e-06f, 5.087939015e-06f, 5.069659238e-06f,
-5.051372813e-06f, 5.033079771e-06f, 5.014780146e-06f, 4.996473970e-06f, 4.978161275e-06f, 4.959842094e-06f, 4.941516459e-06f, 4.923184402e-06f, 4.904845957e-06f, 4.886501156e-06f,
-4.868150031e-06f, 4.849792614e-06f, 4.831428939e-06f, 4.813059038e-06f, 4.794682943e-06f, 4.776300687e-06f, 4.757912303e-06f, 4.739517823e-06f, 4.721117279e-06f, 4.702710704e-06f,
-4.684298132e-06f, 4.665879593e-06f, 4.647455122e-06f, 4.629024750e-06f, 4.610588511e-06f, 4.592146436e-06f, 4.573698559e-06f, 4.555244912e-06f, 4.536785527e-06f, 4.518320438e-06f,
-4.499849677e-06f, 4.481373277e-06f, 4.462891270e-06f, 4.444403689e-06f, 4.425910566e-06f, 4.407411935e-06f, 4.388907828e-06f, 4.370398278e-06f, 4.351883317e-06f, 4.333362978e-06f,
-4.314837294e-06f, 4.296306297e-06f, 4.277770021e-06f, 4.259228498e-06f, 4.240681760e-06f, 4.222129841e-06f, 4.203572773e-06f, 4.185010589e-06f, 4.166443321e-06f, 4.147871003e-06f,
-4.129293667e-06f, 4.110711346e-06f, 4.092124073e-06f, 4.073531880e-06f, 4.054934801e-06f, 4.036332867e-06f, 4.017726113e-06f, 3.999114570e-06f, 3.980498271e-06f, 3.961877250e-06f,
-3.943251538e-06f, 3.924621170e-06f, 3.905986177e-06f, 3.887346592e-06f, 3.868702449e-06f, 3.850053780e-06f, 3.831400618e-06f, 3.812742995e-06f, 3.794080945e-06f, 3.775414501e-06f,
-3.756743695e-06f, 3.738068560e-06f, 3.719389129e-06f, 3.700705435e-06f, 3.682017510e-06f, 3.663325388e-06f, 3.644629102e-06f, 3.625928684e-06f, 3.607224167e-06f, 3.588515584e-06f,
-3.569802968e-06f, 3.551086352e-06f, 3.532365768e-06f, 3.513641251e-06f, 3.494912831e-06f, 3.476180543e-06f, 3.457444420e-06f, 3.438704493e-06f, 3.419960797e-06f, 3.401213363e-06f,
-3.382462226e-06f, 3.363707417e-06f, 3.344948970e-06f, 3.326186918e-06f, 3.307421293e-06f, 3.288652129e-06f, 3.269879458e-06f, 3.251103313e-06f, 3.232323728e-06f, 3.213540735e-06f,
-3.194754367e-06f, 3.175964657e-06f, 3.157171638e-06f, 3.138375343e-06f, 3.119575805e-06f, 3.100773057e-06f, 3.081967131e-06f, 3.063158061e-06f, 3.044345880e-06f, 3.025530620e-06f,
-3.006712315e-06f, 2.987890998e-06f, 2.969066701e-06f, 2.950239457e-06f, 2.931409300e-06f, 2.912576262e-06f, 2.893740376e-06f, 2.874901675e-06f, 2.856060193e-06f, 2.837215962e-06f,
-2.818369015e-06f, 2.799519385e-06f, 2.780667105e-06f, 2.761812208e-06f, 2.742954727e-06f, 2.724094695e-06f, 2.705232145e-06f, 2.686367110e-06f, 2.667499623e-06f, 2.648629716e-06f,
-2.629757423e-06f, 2.610882777e-06f, 2.592005811e-06f, 2.573126557e-06f, 2.554245049e-06f, 2.535361320e-06f, 2.516475402e-06f, 2.497587329e-06f, 2.478697133e-06f, 2.459804848e-06f,
-2.440910506e-06f, 2.422014141e-06f, 2.403115785e-06f, 2.384215471e-06f, 2.365313233e-06f, 2.346409103e-06f, 2.327503114e-06f, 2.308595300e-06f, 2.289685693e-06f, 2.270774325e-06f,
-2.251861231e-06f, 2.232946443e-06f, 2.214029995e-06f, 2.195111918e-06f, 2.176192246e-06f, 2.157271012e-06f, 2.138348249e-06f, 2.119423989e-06f, 2.100498267e-06f, 2.081571114e-06f,
-2.062642564e-06f, 2.043712649e-06f, 2.024781403e-06f, 2.005848859e-06f, 1.986915049e-06f, 1.967980007e-06f, 1.949043765e-06f, 1.930106356e-06f, 1.911167814e-06f, 1.892228170e-06f,
-1.873287459e-06f, 1.854345713e-06f, 1.835402965e-06f, 1.816459248e-06f, 1.797514594e-06f, 1.778569038e-06f, 1.759622611e-06f, 1.740675346e-06f, 1.721727278e-06f, 1.702778437e-06f,
-1.683828858e-06f, 1.664878574e-06f, 1.645927616e-06f, 1.626976019e-06f, 1.608023814e-06f, 1.589071035e-06f, 1.570117716e-06f, 1.551163887e-06f, 1.532209584e-06f, 1.513254838e-06f,
-1.494299682e-06f, 1.475344149e-06f, 1.456388273e-06f, 1.437432085e-06f, 1.418475619e-06f, 1.399518908e-06f, 1.380561985e-06f, 1.361604882e-06f, 1.342647632e-06f, 1.323690269e-06f,
-1.304732824e-06f, 1.285775331e-06f, 1.266817823e-06f, 1.247860333e-06f, 1.228902893e-06f, 1.209945536e-06f, 1.190988295e-06f, 1.172031203e-06f, 1.153074293e-06f, 1.134117597e-06f,
-1.115161148e-06f, 1.096204980e-06f, 1.077249124e-06f, 1.058293614e-06f, 1.039338483e-06f, 1.020383763e-06f, 1.001429486e-06f, 9.824756873e-07f, 9.635223977e-07f, 9.445696506e-07f,
-9.256174786e-07f, 9.066659145e-07f, 8.877149911e-07f, 8.687647412e-07f, 8.498151974e-07f, 8.308663926e-07f, 8.119183594e-07f, 7.929711307e-07f, 7.740247390e-07f, 7.550792172e-07f,
-7.361345979e-07f, 7.171909139e-07f, 6.982481979e-07f, 6.793064826e-07f, 6.603658006e-07f, 6.414261847e-07f, 6.224876675e-07f, 6.035502817e-07f, 5.846140600e-07f, 5.656790350e-07f,
-5.467452395e-07f, 5.278127060e-07f, 5.088814673e-07f, 4.899515559e-07f, 4.710230044e-07f, 4.520958456e-07f, 4.331701120e-07f, 4.142458363e-07f, 3.953230511e-07f, 3.764017889e-07f,
-3.574820824e-07f, 3.385639641e-07f, 3.196474667e-07f, 3.007326227e-07f, 2.818194647e-07f, 2.629080253e-07f, 2.439983370e-07f, 2.250904323e-07f, 2.061843438e-07f, 1.872801041e-07f,
-1.683777457e-07f, 1.494773011e-07f, 1.305788028e-07f, 1.116822833e-07f, 9.278777511e-08f, 7.389531076e-08f, 5.500492273e-08f, 3.611664347e-08f, 1.723050548e-08f, -1.653458791e-09f,
--2.053521688e-08f, -3.941473634e-08f, -5.829198474e-08f, -7.716692962e-08f, -9.603953857e-08f, -1.149097792e-07f, -1.337776190e-07f, -1.526430257e-07f, -1.715059668e-07f, -1.903664100e-07f,
--2.092243229e-07f, -2.280796730e-07f, -2.469324281e-07f, -2.657825558e-07f, -2.846300238e-07f, -3.034747996e-07f, -3.223168510e-07f, -3.411561457e-07f, -3.599926514e-07f, -3.788263357e-07f,
--3.976571663e-07f, -4.164851110e-07f, -4.353101375e-07f, -4.541322135e-07f, -4.729513067e-07f, -4.917673850e-07f, -5.105804161e-07f, -5.293903676e-07f, -5.481972075e-07f, -5.670009035e-07f,
--5.858014234e-07f, -6.045987350e-07f, -6.233928061e-07f, -6.421836046e-07f, -6.609710982e-07f, -6.797552548e-07f, -6.985360423e-07f, -7.173134285e-07f, -7.360873813e-07f, -7.548578685e-07f,
--7.736248582e-07f, -7.923883181e-07f, -8.111482162e-07f, -8.299045203e-07f, -8.486571985e-07f, -8.674062187e-07f, -8.861515488e-07f, -9.048931567e-07f, -9.236310105e-07f, -9.423650781e-07f,
--9.610953276e-07f, -9.798217268e-07f, -9.985442439e-07f, -1.017262847e-06f, -1.035977504e-06f, -1.054688182e-06f, -1.073394851e-06f, -1.092097478e-06f, -1.110796031e-06f, -1.129490478e-06f,
--1.148180787e-06f, -1.166866927e-06f, -1.185548865e-06f, -1.204226570e-06f, -1.222900010e-06f, -1.241569153e-06f, -1.260233967e-06f, -1.278894420e-06f, -1.297550481e-06f, -1.316202117e-06f,
--1.334849297e-06f, -1.353491989e-06f, -1.372130162e-06f, -1.390763783e-06f, -1.409392821e-06f, -1.428017244e-06f, -1.446637021e-06f, -1.465252119e-06f, -1.483862507e-06f, -1.502468153e-06f,
--1.521069026e-06f, -1.539665094e-06f, -1.558256325e-06f, -1.576842688e-06f, -1.595424151e-06f, -1.614000682e-06f, -1.632572250e-06f, -1.651138823e-06f, -1.669700370e-06f, -1.688256859e-06f,
--1.706808258e-06f, -1.725354537e-06f, -1.743895662e-06f, -1.762431604e-06f, -1.780962330e-06f, -1.799487810e-06f, -1.818008010e-06f, -1.836522901e-06f, -1.855032450e-06f, -1.873536626e-06f,
--1.892035398e-06f, -1.910528734e-06f, -1.929016603e-06f, -1.947498974e-06f, -1.965975814e-06f, -1.984447094e-06f, -2.002912780e-06f, -2.021372843e-06f, -2.039827251e-06f, -2.058275972e-06f,
--2.076718975e-06f, -2.095156229e-06f, -2.113587703e-06f, -2.132013365e-06f, -2.150433184e-06f, -2.168847129e-06f, -2.187255168e-06f, -2.205657271e-06f, -2.224053407e-06f, -2.242443543e-06f,
--2.260827650e-06f, -2.279205695e-06f, -2.297577648e-06f, -2.315943478e-06f, -2.334303153e-06f, -2.352656643e-06f, -2.371003916e-06f, -2.389344941e-06f, -2.407679687e-06f, -2.426008124e-06f,
--2.444330220e-06f, -2.462645944e-06f, -2.480955265e-06f, -2.499258153e-06f, -2.517554575e-06f, -2.535844503e-06f, -2.554127903e-06f, -2.572404747e-06f, -2.590675001e-06f, -2.608938637e-06f,
--2.627195622e-06f, -2.645445927e-06f, -2.663689520e-06f, -2.681926370e-06f, -2.700156447e-06f, -2.718379719e-06f, -2.736596157e-06f, -2.754805729e-06f, -2.773008404e-06f, -2.791204153e-06f,
--2.809392943e-06f, -2.827574745e-06f, -2.845749527e-06f, -2.863917260e-06f, -2.882077912e-06f, -2.900231453e-06f, -2.918377852e-06f, -2.936517078e-06f, -2.954649102e-06f, -2.972773892e-06f,
--2.990891418e-06f, -3.009001649e-06f, -3.027104555e-06f, -3.045200105e-06f, -3.063288270e-06f, -3.081369017e-06f, -3.099442318e-06f, -3.117508141e-06f, -3.135566456e-06f, -3.153617232e-06f,
--3.171660440e-06f, -3.189696049e-06f, -3.207724029e-06f, -3.225744348e-06f, -3.243756978e-06f, -3.261761887e-06f, -3.279759045e-06f, -3.297748423e-06f, -3.315729989e-06f, -3.333703714e-06f,
--3.351669567e-06f, -3.369627518e-06f, -3.387577537e-06f, -3.405519594e-06f, -3.423453658e-06f, -3.441379700e-06f, -3.459297690e-06f, -3.477207596e-06f, -3.495109390e-06f, -3.513003041e-06f,
--3.530888519e-06f, -3.548765794e-06f, -3.566634836e-06f, -3.584495616e-06f, -3.602348102e-06f, -3.620192266e-06f, -3.638028076e-06f, -3.655855504e-06f, -3.673674520e-06f, -3.691485092e-06f,
--3.709287193e-06f, -3.727080791e-06f, -3.744865857e-06f, -3.762642362e-06f, -3.780410274e-06f, -3.798169566e-06f, -3.815920206e-06f, -3.833662165e-06f, -3.851395414e-06f, -3.869119922e-06f,
--3.886835660e-06f, -3.904542599e-06f, -3.922240708e-06f, -3.939929958e-06f, -3.957610320e-06f, -3.975281764e-06f, -3.992944260e-06f, -4.010597778e-06f, -4.028242290e-06f, -4.045877766e-06f,
--4.063504175e-06f, -4.081121490e-06f, -4.098729680e-06f, -4.116328715e-06f, -4.133918567e-06f, -4.151499207e-06f, -4.169070603e-06f, -4.186632728e-06f, -4.204185552e-06f, -4.221729046e-06f,
--4.239263180e-06f, -4.256787925e-06f, -4.274303252e-06f, -4.291809132e-06f, -4.309305534e-06f, -4.326792431e-06f, -4.344269793e-06f, -4.361737591e-06f, -4.379195796e-06f, -4.396644378e-06f,
--4.414083308e-06f, -4.431512558e-06f, -4.448932098e-06f, -4.466341899e-06f, -4.483741933e-06f, -4.501132170e-06f, -4.518512581e-06f, -4.535883137e-06f, -4.553243810e-06f, -4.570594571e-06f,
--4.587935390e-06f, -4.605266238e-06f, -4.622587088e-06f, -4.639897909e-06f, -4.657198674e-06f, -4.674489353e-06f, -4.691769917e-06f, -4.709040339e-06f, -4.726300588e-06f, -4.743550637e-06f,
--4.760790457e-06f, -4.778020019e-06f, -4.795239294e-06f, -4.812448254e-06f, -4.829646871e-06f, -4.846835115e-06f, -4.864012958e-06f, -4.881180371e-06f, -4.898337327e-06f, -4.915483796e-06f,
--4.932619750e-06f, -4.949745160e-06f, -4.966859999e-06f, -4.983964237e-06f, -5.001057847e-06f, -5.018140800e-06f, -5.035213067e-06f, -5.052274621e-06f, -5.069325433e-06f, -5.086365474e-06f,
--5.103394717e-06f, -5.120413133e-06f, -5.137420694e-06f, -5.154417372e-06f, -5.171403139e-06f, -5.188377966e-06f, -5.205341825e-06f, -5.222294689e-06f, -5.239236529e-06f, -5.256167317e-06f,
--5.273087026e-06f, -5.289995626e-06f, -5.306893090e-06f, -5.323779391e-06f, -5.340654500e-06f, -5.357518389e-06f, -5.374371030e-06f, -5.391212396e-06f, -5.408042458e-06f, -5.424861190e-06f,
--5.441668562e-06f, -5.458464547e-06f, -5.475249118e-06f, -5.492022247e-06f, -5.508783906e-06f, -5.525534066e-06f, -5.542272702e-06f, -5.558999785e-06f, -5.575715286e-06f, -5.592419180e-06f,
--5.609111438e-06f, -5.625792032e-06f, -5.642460936e-06f, -5.659118121e-06f, -5.675763560e-06f, -5.692397226e-06f, -5.709019091e-06f, -5.725629128e-06f, -5.742227309e-06f, -5.758813608e-06f,
--5.775387996e-06f, -5.791950446e-06f, -5.808500932e-06f, -5.825039425e-06f, -5.841565899e-06f, -5.858080326e-06f, -5.874582679e-06f, -5.891072932e-06f, -5.907551056e-06f, -5.924017025e-06f,
--5.940470811e-06f, -5.956912388e-06f, -5.973341729e-06f, -5.989758806e-06f, -6.006163592e-06f, -6.022556061e-06f, -6.038936185e-06f, -6.055303938e-06f, -6.071659293e-06f, -6.088002222e-06f,
--6.104332699e-06f, -6.120650698e-06f, -6.136956191e-06f, -6.153249151e-06f, -6.169529552e-06f, -6.185797367e-06f, -6.202052569e-06f, -6.218295132e-06f, -6.234525029e-06f, -6.250742234e-06f,
--6.266946719e-06f, -6.283138458e-06f, -6.299317425e-06f, -6.315483593e-06f, -6.331636935e-06f, -6.347777426e-06f, -6.363905038e-06f, -6.380019745e-06f, -6.396121522e-06f, -6.412210340e-06f,
--6.428286175e-06f, -6.444348999e-06f, -6.460398787e-06f, -6.476435512e-06f, -6.492459148e-06f, -6.508469669e-06f, -6.524467048e-06f, -6.540451259e-06f, -6.556422277e-06f, -6.572380074e-06f,
--6.588324626e-06f, -6.604255905e-06f, -6.620173887e-06f, -6.636078544e-06f, -6.651969850e-06f, -6.667847781e-06f, -6.683712310e-06f, -6.699563411e-06f, -6.715401057e-06f, -6.731225224e-06f,
--6.747035886e-06f, -6.762833016e-06f, -6.778616589e-06f, -6.794386579e-06f, -6.810142960e-06f, -6.825885707e-06f, -6.841614794e-06f, -6.857330196e-06f, -6.873031886e-06f, -6.888719839e-06f,
--6.904394029e-06f, -6.920054432e-06f, -6.935701021e-06f, -6.951333772e-06f, -6.966952657e-06f, -6.982557653e-06f, -6.998148734e-06f, -7.013725874e-06f, -7.029289048e-06f, -7.044838230e-06f,
--7.060373396e-06f, -7.075894520e-06f, -7.091401577e-06f, -7.106894541e-06f, -7.122373388e-06f, -7.137838092e-06f, -7.153288629e-06f, -7.168724972e-06f, -7.184147097e-06f, -7.199554980e-06f,
--7.214948594e-06f, -7.230327915e-06f, -7.245692918e-06f, -7.261043578e-06f, -7.276379870e-06f, -7.291701769e-06f, -7.307009250e-06f, -7.322302289e-06f, -7.337580861e-06f, -7.352844941e-06f,
--7.368094504e-06f, -7.383329525e-06f, -7.398549980e-06f, -7.413755844e-06f, -7.428947093e-06f, -7.444123702e-06f, -7.459285646e-06f, -7.474432901e-06f, -7.489565442e-06f, -7.504683244e-06f,
--7.519786284e-06f, -7.534874537e-06f, -7.549947978e-06f, -7.565006584e-06f, -7.580050329e-06f, -7.595079189e-06f, -7.610093141e-06f, -7.625092160e-06f, -7.640076221e-06f, -7.655045300e-06f,
--7.669999374e-06f, -7.684938418e-06f, -7.699862408e-06f, -7.714771320e-06f, -7.729665129e-06f, -7.744543813e-06f, -7.759407346e-06f, -7.774255705e-06f, -7.789088866e-06f, -7.803906805e-06f,
--7.818709497e-06f, -7.833496921e-06f, -7.848269050e-06f, -7.863025862e-06f, -7.877767333e-06f, -7.892493439e-06f, -7.907204157e-06f, -7.921899462e-06f, -7.936579331e-06f, -7.951243740e-06f,
--7.965892667e-06f, -7.980526086e-06f, -7.995143976e-06f, -8.009746311e-06f, -8.024333070e-06f, -8.038904227e-06f, -8.053459761e-06f, -8.067999647e-06f, -8.082523862e-06f, -8.097032384e-06f,
--8.111525187e-06f, -8.126002250e-06f, -8.140463549e-06f, -8.154909061e-06f, -8.169338762e-06f, -8.183752630e-06f, -8.198150642e-06f, -8.212532774e-06f, -8.226899003e-06f, -8.241249306e-06f,
--8.255583660e-06f, -8.269902043e-06f, -8.284204431e-06f, -8.298490802e-06f, -8.312761132e-06f, -8.327015399e-06f, -8.341253580e-06f, -8.355475652e-06f, -8.369681593e-06f, -8.383871379e-06f,
--8.398044988e-06f, -8.412202398e-06f, -8.426343585e-06f, -8.440468527e-06f, -8.454577202e-06f, -8.468669587e-06f, -8.482745659e-06f, -8.496805397e-06f, -8.510848777e-06f, -8.524875777e-06f,
--8.538886375e-06f, -8.552880549e-06f, -8.566858276e-06f, -8.580819533e-06f, -8.594764299e-06f, -8.608692552e-06f, -8.622604269e-06f, -8.636499427e-06f, -8.650378006e-06f, -8.664239983e-06f,
--8.678085335e-06f, -8.691914041e-06f, -8.705726078e-06f, -8.719521426e-06f, -8.733300061e-06f, -8.747061962e-06f, -8.760807107e-06f, -8.774535474e-06f, -8.788247041e-06f, -8.801941787e-06f,
--8.815619690e-06f, -8.829280728e-06f, -8.842924879e-06f, -8.856552122e-06f, -8.870162435e-06f, -8.883755796e-06f, -8.897332185e-06f, -8.910891579e-06f, -8.924433957e-06f, -8.937959297e-06f,
--8.951467578e-06f, -8.964958779e-06f, -8.978432878e-06f, -8.991889854e-06f, -9.005329686e-06f, -9.018752352e-06f, -9.032157831e-06f, -9.045546102e-06f, -9.058917144e-06f, -9.072270935e-06f,
--9.085607455e-06f, -9.098926682e-06f, -9.112228596e-06f, -9.125513175e-06f, -9.138780398e-06f, -9.152030245e-06f, -9.165262694e-06f, -9.178477724e-06f, -9.191675316e-06f, -9.204855447e-06f,
--9.218018098e-06f, -9.231163246e-06f, -9.244290873e-06f, -9.257400956e-06f, -9.270493476e-06f, -9.283568412e-06f, -9.296625743e-06f, -9.309665448e-06f, -9.322687507e-06f, -9.335691900e-06f,
--9.348678606e-06f, -9.361647605e-06f, -9.374598875e-06f, -9.387532398e-06f, -9.400448153e-06f, -9.413346118e-06f, -9.426226275e-06f, -9.439088603e-06f, -9.451933081e-06f, -9.464759690e-06f,
--9.477568409e-06f, -9.490359218e-06f, -9.503132098e-06f, -9.515887028e-06f, -9.528623988e-06f, -9.541342958e-06f, -9.554043918e-06f, -9.566726849e-06f, -9.579391731e-06f, -9.592038543e-06f,
--9.604667266e-06f, -9.617277881e-06f, -9.629870366e-06f, -9.642444704e-06f, -9.655000874e-06f, -9.667538856e-06f, -9.680058631e-06f, -9.692560180e-06f, -9.705043482e-06f, -9.717508519e-06f,
--9.729955271e-06f, -9.742383718e-06f, -9.754793841e-06f, -9.767185621e-06f, -9.779559039e-06f, -9.791914074e-06f, -9.804250709e-06f, -9.816568923e-06f, -9.828868698e-06f, -9.841150014e-06f,
--9.853412853e-06f, -9.865657194e-06f, -9.877883020e-06f, -9.890090311e-06f, -9.902279048e-06f, -9.914449213e-06f, -9.926600785e-06f, -9.938733748e-06f, -9.950848080e-06f, -9.962943765e-06f,
--9.975020783e-06f, -9.987079115e-06f, -9.999118742e-06f, -1.001113965e-05f, -1.002314181e-05f, -1.003512521e-05f, -1.004708984e-05f, -1.005903566e-05f, -1.007096267e-05f, -1.008287085e-05f,
--1.009476017e-05f, -1.010663063e-05f, -1.011848219e-05f, -1.013031485e-05f, -1.014212857e-05f, -1.015392336e-05f, -1.016569918e-05f, -1.017745602e-05f, -1.018919387e-05f, -1.020091269e-05f,
--1.021261249e-05f, -1.022429322e-05f, -1.023595489e-05f, -1.024759747e-05f, -1.025922094e-05f, -1.027082529e-05f, -1.028241049e-05f, -1.029397653e-05f, -1.030552340e-05f, -1.031705107e-05f,
--1.032855952e-05f, -1.034004875e-05f, -1.035151872e-05f, -1.036296943e-05f, -1.037440086e-05f, -1.038581298e-05f, -1.039720578e-05f, -1.040857925e-05f, -1.041993336e-05f, -1.043126810e-05f,
--1.044258345e-05f, -1.045387940e-05f, -1.046515592e-05f, -1.047641300e-05f, -1.048765062e-05f, -1.049886877e-05f, -1.051006742e-05f, -1.052124657e-05f, -1.053240619e-05f, -1.054354626e-05f,
--1.055466678e-05f, -1.056576771e-05f, -1.057684906e-05f, -1.058791079e-05f, -1.059895289e-05f, -1.060997535e-05f, -1.062097814e-05f, -1.063196126e-05f, -1.064292468e-05f, -1.065386839e-05f,
--1.066479237e-05f, -1.067569661e-05f, -1.068658108e-05f, -1.069744578e-05f, -1.070829068e-05f, -1.071911577e-05f, -1.072992103e-05f, -1.074070644e-05f, -1.075147200e-05f, -1.076221768e-05f,
--1.077294347e-05f, -1.078364934e-05f, -1.079433529e-05f, -1.080500130e-05f, -1.081564736e-05f, -1.082627343e-05f, -1.083687952e-05f, -1.084746560e-05f, -1.085803166e-05f, -1.086857768e-05f,
--1.087910365e-05f, -1.088960955e-05f, -1.090009536e-05f, -1.091056107e-05f, -1.092100666e-05f, -1.093143212e-05f, -1.094183743e-05f, -1.095222258e-05f, -1.096258754e-05f, -1.097293232e-05f,
--1.098325688e-05f, -1.099356121e-05f, -1.100384530e-05f, -1.101410913e-05f, -1.102435269e-05f, -1.103457597e-05f, -1.104477893e-05f, -1.105496158e-05f, -1.106512390e-05f, -1.107526587e-05f,
--1.108538747e-05f, -1.109548869e-05f, -1.110556952e-05f, -1.111562993e-05f, -1.112566992e-05f, -1.113568948e-05f, -1.114568857e-05f, -1.115566720e-05f, -1.116562534e-05f, -1.117556298e-05f,
--1.118548011e-05f, -1.119537671e-05f, -1.120525277e-05f, -1.121510826e-05f, -1.122494319e-05f, -1.123475752e-05f, -1.124455126e-05f, -1.125432437e-05f, -1.126407686e-05f, -1.127380870e-05f,
--1.128351988e-05f, -1.129321038e-05f, -1.130288019e-05f, -1.131252930e-05f, -1.132215770e-05f, -1.133176536e-05f, -1.134135227e-05f, -1.135091843e-05f, -1.136046381e-05f, -1.136998840e-05f,
--1.137949219e-05f, -1.138897516e-05f, -1.139843730e-05f, -1.140787860e-05f, -1.141729903e-05f, -1.142669860e-05f, -1.143607728e-05f, -1.144543506e-05f, -1.145477192e-05f, -1.146408786e-05f,
--1.147338286e-05f, -1.148265690e-05f, -1.149190997e-05f, -1.150114206e-05f, -1.151035316e-05f, -1.151954325e-05f, -1.152871231e-05f, -1.153786034e-05f, -1.154698732e-05f, -1.155609323e-05f,
--1.156517807e-05f, -1.157424182e-05f, -1.158328447e-05f, -1.159230601e-05f, -1.160130641e-05f, -1.161028567e-05f, -1.161924378e-05f, -1.162818072e-05f, -1.163709648e-05f, -1.164599104e-05f,
--1.165486440e-05f, -1.166371654e-05f, -1.167254744e-05f, -1.168135710e-05f, -1.169014551e-05f, -1.169891264e-05f, -1.170765848e-05f, -1.171638304e-05f, -1.172508628e-05f, -1.173376820e-05f,
--1.174242879e-05f, -1.175106803e-05f, -1.175968591e-05f, -1.176828242e-05f, -1.177685755e-05f, -1.178541128e-05f, -1.179394360e-05f, -1.180245450e-05f, -1.181094397e-05f, -1.181941199e-05f,
--1.182785856e-05f, -1.183628366e-05f, -1.184468727e-05f, -1.185306939e-05f, -1.186143001e-05f, -1.186976911e-05f, -1.187808668e-05f, -1.188638271e-05f, -1.189465719e-05f, -1.190291010e-05f,
--1.191114143e-05f, -1.191935118e-05f, -1.192753933e-05f, -1.193570586e-05f, -1.194385077e-05f, -1.195197405e-05f, -1.196007568e-05f, -1.196815565e-05f, -1.197621396e-05f, -1.198425058e-05f,
--1.199226551e-05f, -1.200025874e-05f, -1.200823025e-05f, -1.201618004e-05f, -1.202410809e-05f, -1.203201439e-05f, -1.203989893e-05f, -1.204776170e-05f, -1.205560269e-05f, -1.206342188e-05f,
--1.207121928e-05f, -1.207899486e-05f, -1.208674861e-05f, -1.209448052e-05f, -1.210219059e-05f, -1.210987880e-05f, -1.211754515e-05f, -1.212518961e-05f, -1.213281218e-05f, -1.214041285e-05f,
--1.214799161e-05f, -1.215554845e-05f, -1.216308336e-05f, -1.217059632e-05f, -1.217808733e-05f, -1.218555638e-05f, -1.219300345e-05f, -1.220042854e-05f, -1.220783163e-05f, -1.221521272e-05f,
--1.222257179e-05f, -1.222990884e-05f, -1.223722385e-05f, -1.224451681e-05f, -1.225178772e-05f, -1.225903657e-05f, -1.226626334e-05f, -1.227346802e-05f, -1.228065061e-05f, -1.228781109e-05f,
--1.229494946e-05f, -1.230206570e-05f, -1.230915981e-05f, -1.231623178e-05f, -1.232328159e-05f, -1.233030924e-05f, -1.233731471e-05f, -1.234429800e-05f, -1.235125910e-05f, -1.235819800e-05f,
--1.236511469e-05f, -1.237200916e-05f, -1.237888139e-05f, -1.238573139e-05f, -1.239255914e-05f, -1.239936463e-05f, -1.240614786e-05f, -1.241290881e-05f, -1.241964748e-05f, -1.242636385e-05f,
--1.243305792e-05f, -1.243972968e-05f, -1.244637911e-05f, -1.245300622e-05f, -1.245961099e-05f, -1.246619341e-05f, -1.247275348e-05f, -1.247929118e-05f, -1.248580650e-05f, -1.249229945e-05f,
--1.249877000e-05f, -1.250521815e-05f, -1.251164390e-05f, -1.251804723e-05f, -1.252442814e-05f, -1.253078661e-05f, -1.253712264e-05f, -1.254343622e-05f, -1.254972734e-05f, -1.255599599e-05f,
--1.256224217e-05f, -1.256846587e-05f, -1.257466708e-05f, -1.258084578e-05f, -1.258700198e-05f, -1.259313567e-05f, -1.259924683e-05f, -1.260533546e-05f, -1.261140155e-05f, -1.261744509e-05f,
--1.262346608e-05f, -1.262946451e-05f, -1.263544036e-05f, -1.264139364e-05f, -1.264732433e-05f, -1.265323243e-05f, -1.265911793e-05f, -1.266498082e-05f, -1.267082110e-05f, -1.267663875e-05f,
--1.268243377e-05f, -1.268820615e-05f, -1.269395588e-05f, -1.269968297e-05f, -1.270538739e-05f, -1.271106915e-05f, -1.271672823e-05f, -1.272236463e-05f, -1.272797834e-05f, -1.273356935e-05f,
--1.273913767e-05f, -1.274468327e-05f, -1.275020615e-05f, -1.275570632e-05f, -1.276118375e-05f, -1.276663844e-05f, -1.277207039e-05f, -1.277747959e-05f, -1.278286604e-05f, -1.278822972e-05f,
--1.279357062e-05f, -1.279888875e-05f, -1.280418410e-05f, -1.280945666e-05f, -1.281470642e-05f, -1.281993337e-05f, -1.282513752e-05f, -1.283031885e-05f, -1.283547736e-05f, -1.284061304e-05f,
--1.284572588e-05f, -1.285081589e-05f, -1.285588305e-05f, -1.286092735e-05f, -1.286594880e-05f, -1.287094738e-05f, -1.287592309e-05f, -1.288087592e-05f, -1.288580587e-05f, -1.289071293e-05f,
--1.289559709e-05f, -1.290045836e-05f, -1.290529672e-05f, -1.291011217e-05f, -1.291490470e-05f, -1.291967430e-05f, -1.292442098e-05f, -1.292914473e-05f, -1.293384553e-05f, -1.293852339e-05f,
--1.294317830e-05f, -1.294781025e-05f, -1.295241925e-05f, -1.295700527e-05f, -1.296156833e-05f, -1.296610840e-05f, -1.297062550e-05f, -1.297511961e-05f, -1.297959072e-05f, -1.298403884e-05f,
--1.298846396e-05f, -1.299286607e-05f, -1.299724516e-05f, -1.300160124e-05f, -1.300593430e-05f, -1.301024433e-05f, -1.301453133e-05f, -1.301879530e-05f, -1.302303622e-05f, -1.302725410e-05f,
--1.303144892e-05f, -1.303562070e-05f, -1.303976941e-05f, -1.304389506e-05f, -1.304799764e-05f, -1.305207715e-05f, -1.305613358e-05f, -1.306016694e-05f, -1.306417720e-05f, -1.306816438e-05f,
--1.307212846e-05f, -1.307606945e-05f, -1.307998733e-05f, -1.308388211e-05f, -1.308775377e-05f, -1.309160232e-05f, -1.309542776e-05f, -1.309923007e-05f, -1.310300926e-05f, -1.310676531e-05f,
--1.311049824e-05f, -1.311420802e-05f, -1.311789467e-05f, -1.312155817e-05f, -1.312519852e-05f, -1.312881572e-05f, -1.313240976e-05f, -1.313598065e-05f, -1.313952837e-05f, -1.314305293e-05f,
--1.314655432e-05f, -1.315003253e-05f, -1.315348757e-05f, -1.315691944e-05f, -1.316032812e-05f, -1.316371361e-05f, -1.316707591e-05f, -1.317041503e-05f, -1.317373095e-05f, -1.317702367e-05f,
--1.318029319e-05f, -1.318353950e-05f, -1.318676262e-05f, -1.318996252e-05f, -1.319313920e-05f, -1.319629268e-05f, -1.319942293e-05f, -1.320252997e-05f, -1.320561378e-05f, -1.320867437e-05f,
--1.321171173e-05f, -1.321472586e-05f, -1.321771675e-05f, -1.322068441e-05f, -1.322362883e-05f, -1.322655001e-05f, -1.322944795e-05f, -1.323232264e-05f, -1.323517409e-05f, -1.323800228e-05f,
--1.324080723e-05f, -1.324358892e-05f, -1.324634735e-05f, -1.324908253e-05f, -1.325179444e-05f, -1.325448310e-05f, -1.325714849e-05f, -1.325979061e-05f, -1.326240947e-05f, -1.326500506e-05f,
--1.326757738e-05f, -1.327012642e-05f, -1.327265219e-05f, -1.327515468e-05f, -1.327763390e-05f, -1.328008984e-05f, -1.328252249e-05f, -1.328493187e-05f, -1.328731796e-05f, -1.328968076e-05f,
--1.329202028e-05f, -1.329433651e-05f, -1.329662945e-05f, -1.329889910e-05f, -1.330114546e-05f, -1.330336853e-05f, -1.330556830e-05f, -1.330774478e-05f, -1.330989796e-05f, -1.331202785e-05f,
--1.331413444e-05f, -1.331621773e-05f, -1.331827772e-05f, -1.332031441e-05f, -1.332232780e-05f, -1.332431788e-05f, -1.332628467e-05f, -1.332822815e-05f, -1.333014833e-05f, -1.333204520e-05f,
--1.333391877e-05f, -1.333576903e-05f, -1.333759599e-05f, -1.333939964e-05f, -1.334117998e-05f, -1.334293702e-05f, -1.334467074e-05f, -1.334638116e-05f, -1.334806828e-05f, -1.334973208e-05f,
--1.335137258e-05f, -1.335298977e-05f, -1.335458365e-05f, -1.335615422e-05f, -1.335770148e-05f, -1.335922544e-05f, -1.336072608e-05f, -1.336220342e-05f, -1.336365745e-05f, -1.336508818e-05f,
--1.336649559e-05f, -1.336787970e-05f, -1.336924050e-05f, -1.337057800e-05f, -1.337189219e-05f, -1.337318307e-05f, -1.337445065e-05f, -1.337569493e-05f, -1.337691590e-05f, -1.337811357e-05f,
--1.337928793e-05f, -1.338043900e-05f, -1.338156676e-05f, -1.338267122e-05f, -1.338375239e-05f, -1.338481025e-05f, -1.338584482e-05f, -1.338685609e-05f, -1.338784406e-05f, -1.338880874e-05f,
--1.338975013e-05f, -1.339066822e-05f, -1.339156303e-05f, -1.339243454e-05f, -1.339328276e-05f, -1.339410770e-05f, -1.339490935e-05f, -1.339568771e-05f, -1.339644279e-05f, -1.339717459e-05f,
--1.339788311e-05f, -1.339856835e-05f, -1.339923031e-05f, -1.339986900e-05f, -1.340048441e-05f, -1.340107654e-05f, -1.340164541e-05f, -1.340219101e-05f, -1.340271334e-05f, -1.340321241e-05f,
--1.340368821e-05f, -1.340414075e-05f, -1.340457003e-05f, -1.340497605e-05f, -1.340535881e-05f, -1.340571833e-05f, -1.340605459e-05f, -1.340636760e-05f, -1.340665736e-05f, -1.340692388e-05f,
--1.340716716e-05f, -1.340738719e-05f, -1.340758399e-05f, -1.340775755e-05f, -1.340790788e-05f, -1.340803498e-05f, -1.340813885e-05f, -1.340821949e-05f, -1.340827691e-05f, -1.340831111e-05f,
--1.340832209e-05f, -1.340830986e-05f, -1.340827442e-05f, -1.340821576e-05f, -1.340813390e-05f, -1.340802883e-05f, -1.340790057e-05f, -1.340774910e-05f, -1.340757444e-05f, -1.340737659e-05f,
--1.340715555e-05f, -1.340691133e-05f, -1.340664392e-05f, -1.340635333e-05f, -1.340603957e-05f, -1.340570263e-05f, -1.340534253e-05f, -1.340495925e-05f, -1.340455282e-05f, -1.340412322e-05f,
--1.340367047e-05f, -1.340319457e-05f, -1.340269552e-05f, -1.340217332e-05f, -1.340162798e-05f, -1.340105950e-05f, -1.340046789e-05f, -1.339985315e-05f, -1.339921528e-05f, -1.339855429e-05f,
--1.339787018e-05f, -1.339716296e-05f, -1.339643262e-05f, -1.339567917e-05f, -1.339490263e-05f, -1.339410298e-05f, -1.339328024e-05f, -1.339243441e-05f, -1.339156549e-05f, -1.339067349e-05f,
--1.338975841e-05f, -1.338882026e-05f, -1.338785903e-05f, -1.338687475e-05f, -1.338586740e-05f, -1.338483699e-05f, -1.338378354e-05f, -1.338270703e-05f, -1.338160749e-05f, -1.338048490e-05f,
--1.337933929e-05f, -1.337817064e-05f, -1.337697897e-05f, -1.337576428e-05f, -1.337452658e-05f, -1.337326587e-05f, -1.337198215e-05f, -1.337067543e-05f, -1.336934572e-05f, -1.336799302e-05f,
--1.336661733e-05f, -1.336521867e-05f, -1.336379703e-05f, -1.336235242e-05f, -1.336088484e-05f, -1.335939431e-05f, -1.335788083e-05f, -1.335634439e-05f, -1.335478502e-05f, -1.335320270e-05f,
--1.335159746e-05f, -1.334996929e-05f, -1.334831819e-05f, -1.334664419e-05f, -1.334494727e-05f, -1.334322745e-05f, -1.334148473e-05f, -1.333971911e-05f, -1.333793061e-05f, -1.333611923e-05f,
--1.333428498e-05f, -1.333242785e-05f, -1.333054786e-05f, -1.332864501e-05f, -1.332671931e-05f, -1.332477077e-05f, -1.332279939e-05f, -1.332080517e-05f, -1.331878813e-05f, -1.331674826e-05f,
--1.331468558e-05f, -1.331260009e-05f, -1.331049180e-05f, -1.330836071e-05f, -1.330620684e-05f, -1.330403018e-05f, -1.330183074e-05f, -1.329960853e-05f, -1.329736356e-05f, -1.329509584e-05f,
--1.329280536e-05f, -1.329049214e-05f, -1.328815618e-05f, -1.328579749e-05f, -1.328341608e-05f, -1.328101195e-05f, -1.327858511e-05f, -1.327613556e-05f, -1.327366332e-05f, -1.327116840e-05f,
--1.326865079e-05f, -1.326611050e-05f, -1.326354755e-05f, -1.326096193e-05f, -1.325835366e-05f, -1.325572275e-05f, -1.325306919e-05f, -1.325039301e-05f, -1.324769419e-05f, -1.324497276e-05f,
--1.324222872e-05f, -1.323946208e-05f, -1.323667284e-05f, -1.323386102e-05f, -1.323102661e-05f, -1.322816964e-05f, -1.322529009e-05f, -1.322238799e-05f, -1.321946334e-05f, -1.321651615e-05f,
--1.321354642e-05f, -1.321055417e-05f, -1.320753940e-05f, -1.320450211e-05f, -1.320144233e-05f, -1.319836005e-05f, -1.319525528e-05f, -1.319212803e-05f, -1.318897832e-05f, -1.318580614e-05f,
--1.318261150e-05f, -1.317939442e-05f, -1.317615491e-05f, -1.317289296e-05f, -1.316960859e-05f, -1.316630180e-05f, -1.316297262e-05f, -1.315962103e-05f, -1.315624706e-05f, -1.315285071e-05f,
--1.314943198e-05f, -1.314599090e-05f, -1.314252746e-05f, -1.313904168e-05f, -1.313553355e-05f, -1.313200311e-05f, -1.312845034e-05f, -1.312487526e-05f, -1.312127788e-05f, -1.311765821e-05f,
--1.311401625e-05f, -1.311035202e-05f, -1.310666552e-05f, -1.310295677e-05f, -1.309922577e-05f, -1.309547253e-05f, -1.309169706e-05f, -1.308789937e-05f, -1.308407947e-05f, -1.308023737e-05f,
--1.307637307e-05f, -1.307248659e-05f, -1.306857794e-05f, -1.306464713e-05f, -1.306069415e-05f, -1.305671903e-05f, -1.305272178e-05f, -1.304870240e-05f, -1.304466090e-05f, -1.304059730e-05f,
--1.303651159e-05f, -1.303240380e-05f, -1.302827393e-05f, -1.302412199e-05f, -1.301994800e-05f, -1.301575195e-05f, -1.301153386e-05f, -1.300729375e-05f, -1.300303161e-05f, -1.299874747e-05f,
--1.299444133e-05f, -1.299011319e-05f, -1.298576308e-05f, -1.298139100e-05f, -1.297699696e-05f, -1.297258097e-05f, -1.296814305e-05f, -1.296368319e-05f, -1.295920142e-05f, -1.295469774e-05f,
--1.295017216e-05f, -1.294562470e-05f, -1.294105536e-05f, -1.293646415e-05f, -1.293185109e-05f, -1.292721618e-05f, -1.292255944e-05f, -1.291788088e-05f, -1.291318050e-05f, -1.290845833e-05f,
--1.290371436e-05f, -1.289894861e-05f, -1.289416109e-05f, -1.288935181e-05f, -1.288452078e-05f, -1.287966802e-05f, -1.287479353e-05f, -1.286989733e-05f, -1.286497942e-05f, -1.286003982e-05f,
--1.285507853e-05f, -1.285009558e-05f, -1.284509097e-05f, -1.284006471e-05f, -1.283501681e-05f, -1.282994729e-05f, -1.282485615e-05f, -1.281974341e-05f, -1.281460908e-05f, -1.280945316e-05f,
--1.280427568e-05f, -1.279907665e-05f, -1.279385606e-05f, -1.278861395e-05f, -1.278335031e-05f, -1.277806516e-05f, -1.277275851e-05f, -1.276743037e-05f, -1.276208076e-05f, -1.275670968e-05f,
--1.275131716e-05f, -1.274590319e-05f, -1.274046779e-05f, -1.273501098e-05f, -1.272953277e-05f, -1.272403316e-05f, -1.271851217e-05f, -1.271296982e-05f, -1.270740611e-05f, -1.270182105e-05f,
--1.269621467e-05f, -1.269058696e-05f, -1.268493795e-05f, -1.267926764e-05f, -1.267357605e-05f, -1.266786319e-05f, -1.266212907e-05f, -1.265637371e-05f, -1.265059712e-05f, -1.264479930e-05f,
--1.263898028e-05f, -1.263314006e-05f, -1.262727866e-05f, -1.262139609e-05f, -1.261549236e-05f, -1.260956749e-05f, -1.260362149e-05f, -1.259765437e-05f, -1.259166614e-05f, -1.258565682e-05f,
--1.257962642e-05f, -1.257357495e-05f, -1.256750243e-05f, -1.256140887e-05f, -1.255529428e-05f, -1.254915867e-05f, -1.254300206e-05f, -1.253682446e-05f, -1.253062589e-05f, -1.252440635e-05f,
--1.251816587e-05f, -1.251190445e-05f, -1.250562210e-05f, -1.249931885e-05f, -1.249299470e-05f, -1.248664967e-05f, -1.248028377e-05f, -1.247389701e-05f, -1.246748941e-05f, -1.246106099e-05f,
--1.245461175e-05f, -1.244814170e-05f, -1.244165087e-05f, -1.243513927e-05f, -1.242860691e-05f, -1.242205379e-05f, -1.241547995e-05f, -1.240888539e-05f, -1.240227012e-05f, -1.239563417e-05f,
--1.238897753e-05f, -1.238230023e-05f, -1.237560229e-05f, -1.236888370e-05f, -1.236214450e-05f, -1.235538469e-05f, -1.234860429e-05f, -1.234180331e-05f, -1.233498177e-05f, -1.232813967e-05f,
--1.232127704e-05f, -1.231439389e-05f, -1.230749023e-05f, -1.230056608e-05f, -1.229362145e-05f, -1.228665635e-05f, -1.227967081e-05f, -1.227266483e-05f, -1.226563843e-05f, -1.225859163e-05f,
--1.225152443e-05f, -1.224443686e-05f, -1.223732893e-05f, -1.223020065e-05f, -1.222305203e-05f, -1.221588310e-05f, -1.220869387e-05f, -1.220148435e-05f, -1.219425455e-05f, -1.218700450e-05f,
--1.217973421e-05f, -1.217244368e-05f, -1.216513295e-05f, -1.215780201e-05f, -1.215045090e-05f, -1.214307961e-05f, -1.213568817e-05f, -1.212827660e-05f, -1.212084490e-05f, -1.211339309e-05f,
--1.210592120e-05f, -1.209842923e-05f, -1.209091719e-05f, -1.208338511e-05f, -1.207583300e-05f, -1.206826088e-05f, -1.206066875e-05f, -1.205305665e-05f, -1.204542457e-05f, -1.203777254e-05f,
--1.203010057e-05f, -1.202240869e-05f, -1.201469689e-05f, -1.200696521e-05f, -1.199921365e-05f, -1.199144224e-05f, -1.198365098e-05f, -1.197583989e-05f, -1.196800900e-05f, -1.196015830e-05f,
--1.195228783e-05f, -1.194439760e-05f, -1.193648762e-05f, -1.192855790e-05f, -1.192060848e-05f, -1.191263935e-05f, -1.190465054e-05f, -1.189664206e-05f, -1.188861394e-05f, -1.188056618e-05f,
--1.187249880e-05f, -1.186441182e-05f, -1.185630525e-05f, -1.184817912e-05f, -1.184003343e-05f, -1.183186820e-05f, -1.182368346e-05f, -1.181547921e-05f, -1.180725548e-05f, -1.179901227e-05f,
--1.179074962e-05f, -1.178246752e-05f, -1.177416601e-05f, -1.176584509e-05f, -1.175750478e-05f, -1.174914510e-05f, -1.174076607e-05f, -1.173236771e-05f, -1.172395002e-05f, -1.171551303e-05f,
--1.170705676e-05f, -1.169858121e-05f, -1.169008642e-05f, -1.168157238e-05f, -1.167303913e-05f, -1.166448668e-05f, -1.165591505e-05f, -1.164732424e-05f, -1.163871429e-05f, -1.163008521e-05f,
--1.162143701e-05f, -1.161276971e-05f, -1.160408333e-05f, -1.159537789e-05f, -1.158665340e-05f, -1.157790988e-05f, -1.156914735e-05f, -1.156036582e-05f, -1.155156532e-05f, -1.154274586e-05f,
--1.153390746e-05f, -1.152505014e-05f, -1.151617391e-05f, -1.150727879e-05f, -1.149836479e-05f, -1.148943195e-05f, -1.148048027e-05f, -1.147150977e-05f, -1.146252047e-05f, -1.145351238e-05f,
--1.144448554e-05f, -1.143543994e-05f, -1.142637562e-05f, -1.141729259e-05f, -1.140819086e-05f, -1.139907046e-05f, -1.138993140e-05f, -1.138077370e-05f, -1.137159738e-05f, -1.136240246e-05f,
--1.135318895e-05f, -1.134395687e-05f, -1.133470625e-05f, -1.132543710e-05f, -1.131614943e-05f, -1.130684327e-05f, -1.129751864e-05f, -1.128817555e-05f, -1.127881402e-05f, -1.126943407e-05f,
--1.126003572e-05f, -1.125061898e-05f, -1.124118388e-05f, -1.123173043e-05f, -1.122225866e-05f, -1.121276857e-05f, -1.120326020e-05f, -1.119373355e-05f, -1.118418865e-05f, -1.117462551e-05f,
--1.116504416e-05f, -1.115544461e-05f, -1.114582689e-05f, -1.113619100e-05f, -1.112653697e-05f, -1.111686482e-05f, -1.110717457e-05f, -1.109746623e-05f, -1.108773983e-05f, -1.107799538e-05f,
--1.106823291e-05f, -1.105845242e-05f, -1.104865395e-05f, -1.103883751e-05f, -1.102900311e-05f, -1.101915079e-05f, -1.100928055e-05f, -1.099939242e-05f, -1.098948641e-05f, -1.097956255e-05f,
--1.096962086e-05f, -1.095966135e-05f, -1.094968404e-05f, -1.093968895e-05f, -1.092967611e-05f, -1.091964553e-05f, -1.090959723e-05f, -1.089953123e-05f, -1.088944755e-05f, -1.087934620e-05f,
--1.086922722e-05f, -1.085909062e-05f, -1.084893641e-05f, -1.083876463e-05f, -1.082857528e-05f, -1.081836839e-05f, -1.080814397e-05f, -1.079790206e-05f, -1.078764266e-05f, -1.077736579e-05f,
--1.076707148e-05f, -1.075675975e-05f, -1.074643062e-05f, -1.073608410e-05f, -1.072572022e-05f, -1.071533899e-05f, -1.070494045e-05f, -1.069452459e-05f, -1.068409146e-05f, -1.067364106e-05f,
--1.066317341e-05f, -1.065268855e-05f, -1.064218648e-05f, -1.063166723e-05f, -1.062113081e-05f, -1.061057726e-05f, -1.060000658e-05f, -1.058941880e-05f, -1.057881394e-05f, -1.056819202e-05f,
--1.055755306e-05f, -1.054689708e-05f, -1.053622410e-05f, -1.052553414e-05f, -1.051482722e-05f, -1.050410337e-05f, -1.049336259e-05f, -1.048260493e-05f, -1.047183038e-05f, -1.046103898e-05f,
--1.045023075e-05f, -1.043940570e-05f, -1.042856385e-05f, -1.041770524e-05f, -1.040682987e-05f, -1.039593778e-05f, -1.038502897e-05f, -1.037410347e-05f, -1.036316131e-05f, -1.035220250e-05f,
--1.034122706e-05f, -1.033023502e-05f, -1.031922639e-05f, -1.030820120e-05f, -1.029715947e-05f, -1.028610122e-05f, -1.027502646e-05f, -1.026393523e-05f, -1.025282754e-05f, -1.024170341e-05f,
--1.023056287e-05f, -1.021940594e-05f, -1.020823263e-05f, -1.019704297e-05f, -1.018583698e-05f, -1.017461468e-05f, -1.016337609e-05f, -1.015212124e-05f, -1.014085014e-05f, -1.012956282e-05f,
--1.011825930e-05f, -1.010693960e-05f, -1.009560374e-05f, -1.008425174e-05f, -1.007288362e-05f, -1.006149942e-05f, -1.005009914e-05f, -1.003868281e-05f, -1.002725045e-05f, -1.001580208e-05f,
--1.000433773e-05f, -9.992857410e-06f, -9.981361151e-06f, -9.969848972e-06f, -9.958320895e-06f, -9.946776941e-06f, -9.935217132e-06f, -9.923641491e-06f, -9.912050039e-06f, -9.900442797e-06f,
--9.888819789e-06f, -9.877181036e-06f, -9.865526560e-06f, -9.853856383e-06f, -9.842170528e-06f, -9.830469015e-06f, -9.818751868e-06f, -9.807019109e-06f, -9.795270759e-06f, -9.783506842e-06f,
--9.771727378e-06f, -9.759932391e-06f, -9.748121903e-06f, -9.736295935e-06f, -9.724454511e-06f, -9.712597652e-06f, -9.700725382e-06f, -9.688837722e-06f, -9.676934694e-06f, -9.665016322e-06f,
--9.653082628e-06f, -9.641133634e-06f, -9.629169362e-06f, -9.617189836e-06f, -9.605195078e-06f, -9.593185110e-06f, -9.581159955e-06f, -9.569119635e-06f, -9.557064174e-06f, -9.544993594e-06f,
--9.532907917e-06f, -9.520807167e-06f, -9.508691366e-06f, -9.496560537e-06f, -9.484414702e-06f, -9.472253885e-06f, -9.460078108e-06f, -9.447887395e-06f, -9.435681767e-06f, -9.423461249e-06f,
--9.411225862e-06f, -9.398975631e-06f, -9.386710577e-06f, -9.374430724e-06f, -9.362136095e-06f, -9.349826713e-06f, -9.337502601e-06f, -9.325163782e-06f, -9.312810279e-06f, -9.300442116e-06f,
--9.288059315e-06f, -9.275661900e-06f, -9.263249894e-06f, -9.250823320e-06f, -9.238382201e-06f, -9.225926561e-06f, -9.213456423e-06f, -9.200971810e-06f, -9.188472746e-06f, -9.175959253e-06f,
--9.163431356e-06f, -9.150889078e-06f, -9.138332442e-06f, -9.125761472e-06f, -9.113176191e-06f, -9.100576623e-06f, -9.087962790e-06f, -9.075334718e-06f, -9.062692428e-06f, -9.050035946e-06f,
--9.037365294e-06f, -9.024680496e-06f, -9.011981575e-06f, -8.999268556e-06f, -8.986541463e-06f, -8.973800318e-06f, -8.961045145e-06f, -8.948275969e-06f, -8.935492813e-06f, -8.922695700e-06f,
--8.909884656e-06f, -8.897059703e-06f, -8.884220865e-06f, -8.871368167e-06f, -8.858501631e-06f, -8.845621283e-06f, -8.832727146e-06f, -8.819819244e-06f, -8.806897601e-06f, -8.793962241e-06f,
--8.781013188e-06f, -8.768050467e-06f, -8.755074100e-06f, -8.742084113e-06f, -8.729080529e-06f, -8.716063373e-06f, -8.703032668e-06f, -8.689988439e-06f, -8.676930711e-06f, -8.663859507e-06f,
--8.650774851e-06f, -8.637676768e-06f, -8.624565282e-06f, -8.611440417e-06f, -8.598302199e-06f, -8.585150650e-06f, -8.571985795e-06f, -8.558807660e-06f, -8.545616268e-06f, -8.532411643e-06f,
--8.519193810e-06f, -8.505962794e-06f, -8.492718619e-06f, -8.479461309e-06f, -8.466190889e-06f, -8.452907384e-06f, -8.439610818e-06f, -8.426301216e-06f, -8.412978602e-06f, -8.399643001e-06f,
--8.386294438e-06f, -8.372932936e-06f, -8.359558522e-06f, -8.346171219e-06f, -8.332771053e-06f, -8.319358048e-06f, -8.305932228e-06f, -8.292493619e-06f, -8.279042246e-06f, -8.265578133e-06f,
--8.252101304e-06f, -8.238611786e-06f, -8.225109602e-06f, -8.211594778e-06f, -8.198067339e-06f, -8.184527309e-06f, -8.170974714e-06f, -8.157409578e-06f, -8.143831926e-06f, -8.130241784e-06f,
--8.116639176e-06f, -8.103024128e-06f, -8.089396664e-06f, -8.075756810e-06f, -8.062104590e-06f, -8.048440030e-06f, -8.034763155e-06f, -8.021073991e-06f, -8.007372561e-06f, -7.993658892e-06f,
--7.979933009e-06f, -7.966194937e-06f, -7.952444700e-06f, -7.938682326e-06f, -7.924907837e-06f, -7.911121261e-06f, -7.897322622e-06f, -7.883511946e-06f, -7.869689258e-06f, -7.855854583e-06f,
--7.842007946e-06f, -7.828149374e-06f, -7.814278892e-06f, -7.800396524e-06f, -7.786502297e-06f, -7.772596236e-06f, -7.758678366e-06f, -7.744748713e-06f, -7.730807302e-06f, -7.716854160e-06f,
--7.702889311e-06f, -7.688912781e-06f, -7.674924596e-06f, -7.660924782e-06f, -7.646913363e-06f, -7.632890366e-06f, -7.618855816e-06f, -7.604809740e-06f, -7.590752162e-06f, -7.576683108e-06f,
--7.562602604e-06f, -7.548510677e-06f, -7.534407351e-06f, -7.520292652e-06f, -7.506166607e-06f, -7.492029240e-06f, -7.477880579e-06f, -7.463720648e-06f, -7.449549474e-06f, -7.435367082e-06f,
--7.421173499e-06f, -7.406968750e-06f, -7.392752861e-06f, -7.378525858e-06f, -7.364287767e-06f, -7.350038615e-06f, -7.335778426e-06f, -7.321507228e-06f, -7.307225046e-06f, -7.292931906e-06f,
--7.278627834e-06f, -7.264312857e-06f, -7.249987000e-06f, -7.235650289e-06f, -7.221302752e-06f, -7.206944412e-06f, -7.192575298e-06f, -7.178195435e-06f, -7.163804849e-06f, -7.149403567e-06f,
--7.134991615e-06f, -7.120569018e-06f, -7.106135803e-06f, -7.091691997e-06f, -7.077237626e-06f, -7.062772716e-06f, -7.048297293e-06f, -7.033811383e-06f, -7.019315014e-06f, -7.004808211e-06f,
--6.990291001e-06f, -6.975763409e-06f, -6.961225464e-06f, -6.946677190e-06f, -6.932118614e-06f, -6.917549763e-06f, -6.902970664e-06f, -6.888381342e-06f, -6.873781824e-06f, -6.859172137e-06f,
--6.844552307e-06f, -6.829922361e-06f, -6.815282325e-06f, -6.800632226e-06f, -6.785972090e-06f, -6.771301945e-06f, -6.756621815e-06f, -6.741931730e-06f, -6.727231713e-06f, -6.712521794e-06f,
--6.697801997e-06f, -6.683072351e-06f, -6.668332880e-06f, -6.653583613e-06f, -6.638824576e-06f, -6.624055796e-06f, -6.609277298e-06f, -6.594489111e-06f, -6.579691261e-06f, -6.564883775e-06f,
--6.550066678e-06f, -6.535240000e-06f, -6.520403765e-06f, -6.505558001e-06f, -6.490702735e-06f, -6.475837994e-06f, -6.460963804e-06f, -6.446080192e-06f, -6.431187186e-06f, -6.416284812e-06f,
--6.401373097e-06f, -6.386452068e-06f, -6.371521752e-06f, -6.356582177e-06f, -6.341633368e-06f, -6.326675353e-06f, -6.311708159e-06f, -6.296731813e-06f, -6.281746342e-06f, -6.266751773e-06f,
--6.251748134e-06f, -6.236735450e-06f, -6.221713750e-06f, -6.206683060e-06f, -6.191643407e-06f, -6.176594819e-06f, -6.161537323e-06f, -6.146470946e-06f, -6.131395714e-06f, -6.116311656e-06f,
--6.101218798e-06f, -6.086117168e-06f, -6.071006792e-06f, -6.055887699e-06f, -6.040759914e-06f, -6.025623466e-06f, -6.010478382e-06f, -5.995324688e-06f, -5.980162413e-06f, -5.964991583e-06f,
--5.949812226e-06f, -5.934624369e-06f, -5.919428039e-06f, -5.904223265e-06f, -5.889010072e-06f, -5.873788488e-06f, -5.858558542e-06f, -5.843320260e-06f, -5.828073669e-06f, -5.812818797e-06f,
--5.797555671e-06f, -5.782284320e-06f, -5.767004769e-06f, -5.751717047e-06f, -5.736421182e-06f, -5.721117199e-06f, -5.705805128e-06f, -5.690484996e-06f, -5.675156829e-06f, -5.659820656e-06f,
--5.644476504e-06f, -5.629124401e-06f, -5.613764373e-06f, -5.598396450e-06f, -5.583020657e-06f, -5.567637024e-06f, -5.552245577e-06f, -5.536846343e-06f, -5.521439352e-06f, -5.506024629e-06f,
--5.490602204e-06f, -5.475172102e-06f, -5.459734353e-06f, -5.444288984e-06f, -5.428836022e-06f, -5.413375495e-06f, -5.397907431e-06f, -5.382431857e-06f, -5.366948801e-06f, -5.351458291e-06f,
--5.335960355e-06f, -5.320455020e-06f, -5.304942314e-06f, -5.289422265e-06f, -5.273894900e-06f, -5.258360248e-06f, -5.242818336e-06f, -5.227269192e-06f, -5.211712843e-06f, -5.196149318e-06f,
--5.180578644e-06f, -5.165000849e-06f, -5.149415961e-06f, -5.133824008e-06f, -5.118225017e-06f, -5.102619017e-06f, -5.087006035e-06f, -5.071386100e-06f, -5.055759238e-06f, -5.040125479e-06f,
--5.024484849e-06f, -5.008837378e-06f, -4.993183092e-06f, -4.977522019e-06f, -4.961854189e-06f, -4.946179628e-06f, -4.930498364e-06f, -4.914810426e-06f, -4.899115841e-06f, -4.883414637e-06f,
--4.867706843e-06f, -4.851992487e-06f, -4.836271596e-06f, -4.820544198e-06f, -4.804810321e-06f, -4.789069994e-06f, -4.773323245e-06f, -4.757570101e-06f, -4.741810590e-06f, -4.726044741e-06f,
--4.710272582e-06f, -4.694494141e-06f, -4.678709445e-06f, -4.662918524e-06f, -4.647121404e-06f, -4.631318114e-06f, -4.615508683e-06f, -4.599693138e-06f, -4.583871508e-06f, -4.568043820e-06f,
--4.552210102e-06f, -4.536370384e-06f, -4.520524693e-06f, -4.504673057e-06f, -4.488815504e-06f, -4.472952063e-06f, -4.457082762e-06f, -4.441207628e-06f, -4.425326691e-06f, -4.409439978e-06f,
--4.393547517e-06f, -4.377649337e-06f, -4.361745466e-06f, -4.345835932e-06f, -4.329920764e-06f, -4.313999989e-06f, -4.298073636e-06f, -4.282141733e-06f, -4.266204309e-06f, -4.250261391e-06f,
--4.234313009e-06f, -4.218359189e-06f, -4.202399961e-06f, -4.186435353e-06f, -4.170465392e-06f, -4.154490109e-06f, -4.138509529e-06f, -4.122523683e-06f, -4.106532598e-06f, -4.090536303e-06f,
--4.074534826e-06f, -4.058528195e-06f, -4.042516439e-06f, -4.026499586e-06f, -4.010477664e-06f, -3.994450702e-06f, -3.978418727e-06f, -3.962381770e-06f, -3.946339857e-06f, -3.930293017e-06f,
--3.914241279e-06f, -3.898184671e-06f, -3.882123221e-06f, -3.866056958e-06f, -3.849985910e-06f, -3.833910106e-06f, -3.817829574e-06f, -3.801744342e-06f, -3.785654439e-06f, -3.769559893e-06f,
--3.753460733e-06f, -3.737356987e-06f, -3.721248683e-06f, -3.705135851e-06f, -3.689018518e-06f, -3.672896713e-06f, -3.656770464e-06f, -3.640639800e-06f, -3.624504750e-06f, -3.608365341e-06f,
--3.592221602e-06f, -3.576073563e-06f, -3.559921250e-06f, -3.543764693e-06f, -3.527603921e-06f, -3.511438961e-06f, -3.495269842e-06f, -3.479096594e-06f, -3.462919243e-06f, -3.446737819e-06f,
--3.430552350e-06f, -3.414362865e-06f, -3.398169393e-06f, -3.381971961e-06f, -3.365770599e-06f, -3.349565334e-06f, -3.333356196e-06f, -3.317143213e-06f, -3.300926413e-06f, -3.284705825e-06f,
--3.268481478e-06f, -3.252253401e-06f, -3.236021621e-06f, -3.219786167e-06f, -3.203547068e-06f, -3.187304352e-06f, -3.171058048e-06f, -3.154808185e-06f, -3.138554791e-06f, -3.122297895e-06f,
--3.106037525e-06f, -3.089773710e-06f, -3.073506478e-06f, -3.057235858e-06f, -3.040961879e-06f, -3.024684569e-06f, -3.008403957e-06f, -2.992120072e-06f, -2.975832941e-06f, -2.959542594e-06f,
--2.943249059e-06f, -2.926952365e-06f, -2.910652540e-06f, -2.894349613e-06f, -2.878043613e-06f, -2.861734568e-06f, -2.845422507e-06f, -2.829107459e-06f, -2.812789451e-06f, -2.796468514e-06f,
--2.780144674e-06f, -2.763817962e-06f, -2.747488405e-06f, -2.731156032e-06f, -2.714820873e-06f, -2.698482954e-06f, -2.682142306e-06f, -2.665798957e-06f, -2.649452935e-06f, -2.633104268e-06f,
--2.616752987e-06f, -2.600399119e-06f, -2.584042693e-06f, -2.567683737e-06f, -2.551322280e-06f, -2.534958352e-06f, -2.518591979e-06f, -2.502223192e-06f, -2.485852019e-06f, -2.469478488e-06f,
--2.453102628e-06f, -2.436724468e-06f, -2.420344036e-06f, -2.403961361e-06f, -2.387576472e-06f, -2.371189397e-06f, -2.354800165e-06f, -2.338408805e-06f, -2.322015345e-06f, -2.305619813e-06f,
--2.289222240e-06f, -2.272822652e-06f, -2.256421079e-06f, -2.240017550e-06f, -2.223612093e-06f, -2.207204737e-06f, -2.190795510e-06f, -2.174384441e-06f, -2.157971559e-06f, -2.141556892e-06f,
--2.125140470e-06f, -2.108722320e-06f, -2.092302471e-06f, -2.075880952e-06f, -2.059457792e-06f, -2.043033019e-06f, -2.026606662e-06f, -2.010178750e-06f, -1.993749311e-06f, -1.977318373e-06f,
--1.960885966e-06f, -1.944452119e-06f, -1.928016859e-06f, -1.911580215e-06f, -1.895142216e-06f, -1.878702892e-06f, -1.862262269e-06f, -1.845820377e-06f, -1.829377245e-06f, -1.812932902e-06f,
--1.796487375e-06f, -1.780040693e-06f, -1.763592886e-06f, -1.747143981e-06f, -1.730694008e-06f, -1.714242995e-06f, -1.697790970e-06f, -1.681337963e-06f, -1.664884001e-06f, -1.648429114e-06f,
--1.631973330e-06f, -1.615516678e-06f, -1.599059186e-06f, -1.582600883e-06f, -1.566141798e-06f, -1.549681958e-06f, -1.533221394e-06f, -1.516760132e-06f, -1.500298203e-06f, -1.483835634e-06f,
--1.467372455e-06f, -1.450908693e-06f, -1.434444377e-06f, -1.417979537e-06f, -1.401514199e-06f, -1.385048394e-06f, -1.368582150e-06f, -1.352115495e-06f, -1.335648457e-06f, -1.319181066e-06f,
--1.302713350e-06f, -1.286245338e-06f, -1.269777058e-06f, -1.253308538e-06f, -1.236839807e-06f, -1.220370894e-06f, -1.203901828e-06f, -1.187432636e-06f, -1.170963348e-06f, -1.154493992e-06f,
--1.138024596e-06f, -1.121555189e-06f, -1.105085800e-06f, -1.088616457e-06f, -1.072147189e-06f, -1.055678023e-06f, -1.039208990e-06f, -1.022740116e-06f, -1.006271431e-06f, -9.898029639e-07f,
--9.733347419e-07f, -9.568667942e-07f, -9.403991491e-07f, -9.239318353e-07f, -9.074648811e-07f, -8.909983150e-07f, -8.745321656e-07f, -8.580664613e-07f, -8.416012306e-07f, -8.251365019e-07f,
--8.086723038e-07f, -7.922086646e-07f, -7.757456128e-07f, -7.592831769e-07f, -7.428213854e-07f, -7.263602666e-07f, -7.098998490e-07f, -6.934401610e-07f, -6.769812311e-07f, -6.605230877e-07f,
--6.440657592e-07f, -6.276092740e-07f, -6.111536606e-07f, -5.946989472e-07f, -5.782451624e-07f, -5.617923345e-07f, -5.453404920e-07f, -5.288896631e-07f, -5.124398763e-07f, -4.959911599e-07f,
--4.795435423e-07f, -4.630970519e-07f, -4.466517171e-07f, -4.302075661e-07f, -4.137646274e-07f, -3.973229293e-07f, -3.808825000e-07f, -3.644433680e-07f, -3.480055616e-07f, -3.315691090e-07f,
--3.151340387e-07f, -2.987003788e-07f, -2.822681577e-07f, -2.658374038e-07f, -2.494081452e-07f, -2.329804104e-07f, -2.165542274e-07f, -2.001296247e-07f, -1.837066305e-07f, -1.672852730e-07f,
--1.508655806e-07f, -1.344475813e-07f, -1.180313036e-07f, -1.016167756e-07f, -8.520402556e-08f, -6.879308169e-08f, -5.238397220e-08f, -3.597672531e-08f, -1.957136923e-08f, -3.167932140e-09f,
-1.323355776e-08f, 2.963307230e-08f, 4.603058330e-08f, 6.242606259e-08f, 7.881948200e-08f, 9.521081339e-08f, 1.116000286e-07f, 1.279870995e-07f, 1.443719980e-07f, 1.607546958e-07f,
-1.771351650e-07f, 1.935133774e-07f, 2.098893049e-07f, 2.262629193e-07f, 2.426341927e-07f, 2.590030969e-07f, 2.753696038e-07f, 2.917336854e-07f, 3.080953136e-07f, 3.244544604e-07f,
-3.408110977e-07f, 3.571651975e-07f, 3.735167317e-07f, 3.898656724e-07f, 4.062119915e-07f, 4.225556610e-07f, 4.388966529e-07f, 4.552349392e-07f, 4.715704919e-07f, 4.879032832e-07f,
-5.042332849e-07f, 5.205604691e-07f, 5.368848080e-07f, 5.532062735e-07f, 5.695248377e-07f, 5.858404727e-07f, 6.021531506e-07f, 6.184628435e-07f, 6.347695234e-07f, 6.510731625e-07f,
-6.673737329e-07f, 6.836712067e-07f, 6.999655561e-07f, 7.162567532e-07f, 7.325447701e-07f, 7.488295791e-07f, 7.651111522e-07f, 7.813894617e-07f, 7.976644797e-07f, 8.139361785e-07f,
-8.302045303e-07f, 8.464695072e-07f, 8.627310815e-07f, 8.789892255e-07f, 8.952439113e-07f, 9.114951112e-07f, 9.277427976e-07f, 9.439869426e-07f, 9.602275185e-07f, 9.764644977e-07f,
-9.926978523e-07f, 1.008927555e-06f, 1.025153578e-06f, 1.041375893e-06f, 1.057594473e-06f, 1.073809290e-06f, 1.090020316e-06f, 1.106227525e-06f, 1.122430888e-06f, 1.138630377e-06f,
-1.154825966e-06f, 1.171017626e-06f, 1.187205330e-06f, 1.203389050e-06f, 1.219568759e-06f, 1.235744429e-06f, 1.251916033e-06f, 1.268083543e-06f, 1.284246931e-06f, 1.300406171e-06f,
-1.316561234e-06f, 1.332712094e-06f, 1.348858721e-06f, 1.365001091e-06f, 1.381139173e-06f, 1.397272942e-06f, 1.413402370e-06f, 1.429527429e-06f, 1.445648093e-06f, 1.461764332e-06f,
-1.477876121e-06f, 1.493983432e-06f, 1.510086237e-06f, 1.526184509e-06f, 1.542278221e-06f, 1.558367346e-06f, 1.574451855e-06f, 1.590531722e-06f, 1.606606920e-06f, 1.622677420e-06f,
-1.638743197e-06f, 1.654804222e-06f, 1.670860468e-06f, 1.686911909e-06f, 1.702958516e-06f, 1.719000263e-06f, 1.735037123e-06f, 1.751069067e-06f, 1.767096070e-06f, 1.783118103e-06f,
-1.799135141e-06f, 1.815147154e-06f, 1.831154117e-06f, 1.847156003e-06f, 1.863152783e-06f, 1.879144432e-06f, 1.895130921e-06f, 1.911112225e-06f, 1.927088315e-06f, 1.943059165e-06f,
-1.959024747e-06f, 1.974985036e-06f, 1.990940003e-06f, 2.006889621e-06f, 2.022833865e-06f, 2.038772705e-06f, 2.054706117e-06f, 2.070634072e-06f, 2.086556544e-06f, 2.102473507e-06f,
-2.118384931e-06f, 2.134290792e-06f, 2.150191063e-06f, 2.166085715e-06f, 2.181974723e-06f, 2.197858059e-06f, 2.213735697e-06f, 2.229607610e-06f, 2.245473771e-06f, 2.261334154e-06f,
-2.277188731e-06f, 2.293037475e-06f, 2.308880361e-06f, 2.324717360e-06f, 2.340548447e-06f, 2.356373595e-06f, 2.372192777e-06f, 2.388005966e-06f, 2.403813136e-06f, 2.419614260e-06f,
-2.435409312e-06f, 2.451198263e-06f, 2.466981089e-06f, 2.482757763e-06f, 2.498528257e-06f, 2.514292546e-06f, 2.530050602e-06f, 2.545802400e-06f, 2.561547912e-06f, 2.577287112e-06f,
-2.593019974e-06f, 2.608746470e-06f, 2.624466576e-06f, 2.640180263e-06f, 2.655887506e-06f, 2.671588279e-06f, 2.687282554e-06f, 2.702970305e-06f, 2.718651507e-06f, 2.734326132e-06f,
-2.749994154e-06f, 2.765655547e-06f, 2.781310285e-06f, 2.796958340e-06f, 2.812599688e-06f, 2.828234301e-06f, 2.843862154e-06f, 2.859483219e-06f, 2.875097472e-06f, 2.890704884e-06f,
-2.906305431e-06f, 2.921899087e-06f, 2.937485824e-06f, 2.953065617e-06f, 2.968638439e-06f, 2.984204265e-06f, 2.999763068e-06f, 3.015314822e-06f, 3.030859502e-06f, 3.046397080e-06f,
-3.061927531e-06f, 3.077450829e-06f, 3.092966948e-06f, 3.108475862e-06f, 3.123977544e-06f, 3.139471970e-06f, 3.154959112e-06f, 3.170438945e-06f, 3.185911442e-06f, 3.201376579e-06f,
-3.216834329e-06f, 3.232284666e-06f, 3.247727564e-06f, 3.263162998e-06f, 3.278590941e-06f, 3.294011368e-06f, 3.309424253e-06f, 3.324829570e-06f, 3.340227293e-06f, 3.355617397e-06f,
-3.370999856e-06f, 3.386374643e-06f, 3.401741734e-06f, 3.417101103e-06f, 3.432452724e-06f, 3.447796570e-06f, 3.463132618e-06f, 3.478460840e-06f, 3.493781212e-06f, 3.509093708e-06f,
-3.524398302e-06f, 3.539694968e-06f, 3.554983681e-06f, 3.570264416e-06f, 3.585537147e-06f, 3.600801848e-06f, 3.616058495e-06f, 3.631307060e-06f, 3.646547520e-06f, 3.661779849e-06f,
-3.677004020e-06f, 3.692220010e-06f, 3.707427792e-06f, 3.722627341e-06f, 3.737818632e-06f, 3.753001639e-06f, 3.768176337e-06f, 3.783342701e-06f, 3.798500705e-06f, 3.813650325e-06f,
-3.828791534e-06f, 3.843924308e-06f, 3.859048622e-06f, 3.874164450e-06f, 3.889271768e-06f, 3.904370549e-06f, 3.919460769e-06f, 3.934542403e-06f, 3.949615426e-06f, 3.964679812e-06f,
-3.979735537e-06f, 3.994782575e-06f, 4.009820901e-06f, 4.024850491e-06f, 4.039871319e-06f, 4.054883361e-06f, 4.069886591e-06f, 4.084880985e-06f, 4.099866517e-06f, 4.114843163e-06f,
-4.129810898e-06f, 4.144769696e-06f, 4.159719534e-06f, 4.174660386e-06f, 4.189592228e-06f, 4.204515034e-06f, 4.219428780e-06f, 4.234333441e-06f, 4.249228992e-06f, 4.264115410e-06f,
-4.278992668e-06f, 4.293860742e-06f, 4.308719608e-06f, 4.323569242e-06f, 4.338409617e-06f, 4.353240710e-06f, 4.368062497e-06f, 4.382874951e-06f, 4.397678050e-06f, 4.412471769e-06f,
-4.427256083e-06f, 4.442030967e-06f, 4.456796397e-06f, 4.471552348e-06f, 4.486298797e-06f, 4.501035719e-06f, 4.515763089e-06f, 4.530480883e-06f, 4.545189077e-06f, 4.559887645e-06f,
-4.574576565e-06f, 4.589255812e-06f, 4.603925361e-06f, 4.618585188e-06f, 4.633235269e-06f, 4.647875580e-06f, 4.662506096e-06f, 4.677126793e-06f, 4.691737648e-06f, 4.706338636e-06f,
-4.720929733e-06f, 4.735510914e-06f, 4.750082156e-06f, 4.764643435e-06f, 4.779194726e-06f, 4.793736007e-06f, 4.808267251e-06f, 4.822788437e-06f, 4.837299539e-06f, 4.851800533e-06f,
-4.866291397e-06f, 4.880772106e-06f, 4.895242635e-06f, 4.909702962e-06f, 4.924153062e-06f, 4.938592912e-06f, 4.953022488e-06f, 4.967441765e-06f, 4.981850721e-06f, 4.996249332e-06f,
-5.010637573e-06f, 5.025015421e-06f, 5.039382853e-06f, 5.053739844e-06f, 5.068086372e-06f, 5.082422412e-06f, 5.096747941e-06f, 5.111062936e-06f, 5.125367373e-06f, 5.139661228e-06f,
-5.153944477e-06f, 5.168217099e-06f, 5.182479068e-06f, 5.196730361e-06f, 5.210970956e-06f, 5.225200828e-06f, 5.239419955e-06f, 5.253628312e-06f, 5.267825878e-06f, 5.282012627e-06f,
-5.296188538e-06f, 5.310353586e-06f, 5.324507749e-06f, 5.338651003e-06f, 5.352783325e-06f, 5.366904692e-06f, 5.381015081e-06f, 5.395114469e-06f, 5.409202832e-06f, 5.423280148e-06f,
-5.437346392e-06f, 5.451401544e-06f, 5.465445578e-06f, 5.479478473e-06f, 5.493500205e-06f, 5.507510751e-06f, 5.521510089e-06f, 5.535498195e-06f, 5.549475047e-06f, 5.563440622e-06f,
-5.577394896e-06f, 5.591337848e-06f, 5.605269454e-06f, 5.619189691e-06f, 5.633098537e-06f, 5.646995969e-06f, 5.660881964e-06f, 5.674756500e-06f, 5.688619554e-06f, 5.702471102e-06f,
-5.716311124e-06f, 5.730139596e-06f, 5.743956495e-06f, 5.757761799e-06f, 5.771555485e-06f, 5.785337531e-06f, 5.799107915e-06f, 5.812866613e-06f, 5.826613604e-06f, 5.840348865e-06f,
-5.854072373e-06f, 5.867784107e-06f, 5.881484044e-06f, 5.895172162e-06f, 5.908848437e-06f, 5.922512849e-06f, 5.936165375e-06f, 5.949805992e-06f, 5.963434678e-06f, 5.977051412e-06f,
-5.990656170e-06f, 6.004248931e-06f, 6.017829673e-06f, 6.031398374e-06f, 6.044955011e-06f, 6.058499563e-06f, 6.072032007e-06f, 6.085552322e-06f, 6.099060485e-06f, 6.112556475e-06f,
-6.126040270e-06f, 6.139511847e-06f, 6.152971185e-06f, 6.166418262e-06f, 6.179853056e-06f, 6.193275546e-06f, 6.206685709e-06f, 6.220083524e-06f, 6.233468969e-06f, 6.246842023e-06f,
-6.260202663e-06f, 6.273550868e-06f, 6.286886617e-06f, 6.300209887e-06f, 6.313520658e-06f, 6.326818907e-06f, 6.340104613e-06f, 6.353377755e-06f, 6.366638310e-06f, 6.379886259e-06f,
-6.393121578e-06f, 6.406344247e-06f, 6.419554245e-06f, 6.432751549e-06f, 6.445936140e-06f, 6.459107994e-06f, 6.472267091e-06f, 6.485413410e-06f, 6.498546930e-06f, 6.511667628e-06f,
-6.524775485e-06f, 6.537870479e-06f, 6.550952588e-06f, 6.564021792e-06f, 6.577078069e-06f, 6.590121399e-06f, 6.603151760e-06f, 6.616169132e-06f, 6.629173492e-06f, 6.642164822e-06f,
-6.655143098e-06f, 6.668108301e-06f, 6.681060410e-06f, 6.693999403e-06f, 6.706925260e-06f, 6.719837961e-06f, 6.732737483e-06f, 6.745623807e-06f, 6.758496912e-06f, 6.771356776e-06f,
-6.784203380e-06f, 6.797036703e-06f, 6.809856724e-06f, 6.822663421e-06f, 6.835456776e-06f, 6.848236767e-06f, 6.861003373e-06f, 6.873756575e-06f, 6.886496351e-06f, 6.899222682e-06f,
-6.911935546e-06f, 6.924634924e-06f, 6.937320794e-06f, 6.949993137e-06f, 6.962651932e-06f, 6.975297159e-06f, 6.987928798e-06f, 7.000546828e-06f, 7.013151230e-06f, 7.025741982e-06f,
-7.038319065e-06f, 7.050882458e-06f, 7.063432142e-06f, 7.075968096e-06f, 7.088490301e-06f, 7.100998736e-06f, 7.113493381e-06f, 7.125974216e-06f, 7.138441222e-06f, 7.150894377e-06f,
-7.163333663e-06f, 7.175759060e-06f, 7.188170547e-06f, 7.200568105e-06f, 7.212951714e-06f, 7.225321354e-06f, 7.237677006e-06f, 7.250018649e-06f, 7.262346264e-06f, 7.274659831e-06f,
-7.286959331e-06f, 7.299244745e-06f, 7.311516051e-06f, 7.323773231e-06f, 7.336016266e-06f, 7.348245135e-06f, 7.360459820e-06f, 7.372660300e-06f, 7.384846557e-06f, 7.397018571e-06f,
-7.409176322e-06f, 7.421319792e-06f, 7.433448960e-06f, 7.445563808e-06f, 7.457664316e-06f, 7.469750466e-06f, 7.481822237e-06f, 7.493879611e-06f, 7.505922568e-06f, 7.517951089e-06f,
-7.529965156e-06f, 7.541964749e-06f, 7.553949849e-06f, 7.565920437e-06f, 7.577876494e-06f, 7.589818001e-06f, 7.601744939e-06f, 7.613657290e-06f, 7.625555034e-06f, 7.637438152e-06f,
-7.649306625e-06f, 7.661160436e-06f, 7.672999564e-06f, 7.684823992e-06f, 7.696633700e-06f, 7.708428670e-06f, 7.720208884e-06f, 7.731974321e-06f, 7.743724965e-06f, 7.755460796e-06f,
-7.767181795e-06f, 7.778887945e-06f, 7.790579227e-06f, 7.802255621e-06f, 7.813917111e-06f, 7.825563676e-06f, 7.837195300e-06f, 7.848811963e-06f, 7.860413648e-06f, 7.872000336e-06f,
-7.883572008e-06f, 7.895128646e-06f, 7.906670233e-06f, 7.918196750e-06f, 7.929708178e-06f, 7.941204501e-06f, 7.952685698e-06f, 7.964151754e-06f, 7.975602648e-06f, 7.987038365e-06f,
-7.998458884e-06f, 8.009864189e-06f, 8.021254262e-06f, 8.032629084e-06f, 8.043988638e-06f, 8.055332905e-06f, 8.066661869e-06f, 8.077975511e-06f, 8.089273814e-06f, 8.100556759e-06f,
-8.111824329e-06f, 8.123076506e-06f, 8.134313273e-06f, 8.145534613e-06f, 8.156740506e-06f, 8.167930937e-06f, 8.179105887e-06f, 8.190265339e-06f, 8.201409275e-06f, 8.212537678e-06f,
-8.223650531e-06f, 8.234747815e-06f, 8.245829515e-06f, 8.256895612e-06f, 8.267946088e-06f, 8.278980928e-06f, 8.290000114e-06f, 8.301003627e-06f, 8.311991452e-06f, 8.322963571e-06f,
-8.333919967e-06f, 8.344860622e-06f, 8.355785521e-06f, 8.366694644e-06f, 8.377587977e-06f, 8.388465501e-06f, 8.399327200e-06f, 8.410173057e-06f, 8.421003054e-06f, 8.431817176e-06f,
-8.442615405e-06f, 8.453397724e-06f, 8.464164117e-06f, 8.474914567e-06f, 8.485649057e-06f, 8.496367570e-06f, 8.507070090e-06f, 8.517756600e-06f, 8.528427084e-06f, 8.539081525e-06f,
-8.549719906e-06f, 8.560342211e-06f, 8.570948424e-06f, 8.581538528e-06f, 8.592112506e-06f, 8.602670343e-06f, 8.613212021e-06f, 8.623737525e-06f, 8.634246838e-06f, 8.644739945e-06f,
-8.655216827e-06f, 8.665677471e-06f, 8.676121859e-06f, 8.686549974e-06f, 8.696961802e-06f, 8.707357326e-06f, 8.717736530e-06f, 8.728099398e-06f, 8.738445913e-06f, 8.748776061e-06f,
-8.759089824e-06f, 8.769387187e-06f, 8.779668135e-06f, 8.789932651e-06f, 8.800180720e-06f, 8.810412325e-06f, 8.820627451e-06f, 8.830826083e-06f, 8.841008204e-06f, 8.851173799e-06f,
-8.861322852e-06f, 8.871455348e-06f, 8.881571271e-06f, 8.891670605e-06f, 8.901753336e-06f, 8.911819447e-06f, 8.921868923e-06f, 8.931901749e-06f, 8.941917909e-06f, 8.951917388e-06f,
-8.961900171e-06f, 8.971866242e-06f, 8.981815586e-06f, 8.991748188e-06f, 9.001664032e-06f, 9.011563104e-06f, 9.021445388e-06f, 9.031310869e-06f, 9.041159533e-06f, 9.050991363e-06f,
-9.060806346e-06f, 9.070604465e-06f, 9.080385707e-06f, 9.090150056e-06f, 9.099897497e-06f, 9.109628015e-06f, 9.119341596e-06f, 9.129038225e-06f, 9.138717886e-06f, 9.148380566e-06f,
-9.158026250e-06f, 9.167654922e-06f, 9.177266569e-06f, 9.186861175e-06f, 9.196438726e-06f, 9.205999208e-06f, 9.215542606e-06f, 9.225068905e-06f, 9.234578091e-06f, 9.244070150e-06f,
-9.253545066e-06f, 9.263002827e-06f, 9.272443417e-06f, 9.281866823e-06f, 9.291273029e-06f, 9.300662022e-06f, 9.310033788e-06f, 9.319388311e-06f, 9.328725579e-06f, 9.338045577e-06f,
-9.347348291e-06f, 9.356633707e-06f, 9.365901811e-06f, 9.375152589e-06f, 9.384386026e-06f, 9.393602110e-06f, 9.402800826e-06f, 9.411982160e-06f, 9.421146099e-06f, 9.430292628e-06f,
-9.439421735e-06f, 9.448533404e-06f, 9.457627623e-06f, 9.466704378e-06f, 9.475763655e-06f, 9.484805440e-06f, 9.493829721e-06f, 9.502836483e-06f, 9.511825713e-06f, 9.520797398e-06f,
-9.529751524e-06f, 9.538688077e-06f, 9.547607044e-06f, 9.556508413e-06f, 9.565392169e-06f, 9.574258299e-06f, 9.583106791e-06f, 9.591937630e-06f, 9.600750804e-06f, 9.609546300e-06f,
-9.618324104e-06f, 9.627084203e-06f, 9.635826584e-06f, 9.644551235e-06f, 9.653258142e-06f, 9.661947292e-06f, 9.670618673e-06f, 9.679272271e-06f, 9.687908074e-06f, 9.696526068e-06f,
-9.705126241e-06f, 9.713708581e-06f, 9.722273074e-06f, 9.730819708e-06f, 9.739348470e-06f, 9.747859347e-06f, 9.756352327e-06f, 9.764827398e-06f, 9.773284546e-06f, 9.781723759e-06f,
-9.790145025e-06f, 9.798548332e-06f, 9.806933666e-06f, 9.815301016e-06f, 9.823650370e-06f, 9.831981714e-06f, 9.840295036e-06f, 9.848590326e-06f, 9.856867569e-06f, 9.865126754e-06f,
-9.873367869e-06f, 9.881590902e-06f, 9.889795840e-06f, 9.897982672e-06f, 9.906151386e-06f, 9.914301969e-06f, 9.922434410e-06f, 9.930548697e-06f, 9.938644817e-06f, 9.946722759e-06f,
-9.954782512e-06f, 9.962824063e-06f, 9.970847401e-06f, 9.978852513e-06f, 9.986839389e-06f, 9.994808016e-06f, 1.000275838e-05f, 1.001069048e-05f, 1.001860429e-05f, 1.002649981e-05f,
-1.003437702e-05f, 1.004223592e-05f, 1.005007648e-05f, 1.005789870e-05f, 1.006570258e-05f, 1.007348809e-05f, 1.008125522e-05f, 1.008900397e-05f, 1.009673432e-05f, 1.010444627e-05f,
-1.011213979e-05f, 1.011981489e-05f, 1.012747154e-05f, 1.013510974e-05f, 1.014272948e-05f, 1.015033074e-05f, 1.015791352e-05f, 1.016547780e-05f, 1.017302358e-05f, 1.018055083e-05f,
-1.018805956e-05f, 1.019554975e-05f, 1.020302138e-05f, 1.021047446e-05f, 1.021790896e-05f, 1.022532488e-05f, 1.023272221e-05f, 1.024010093e-05f, 1.024746104e-05f, 1.025480253e-05f,
-1.026212538e-05f, 1.026942958e-05f, 1.027671513e-05f, 1.028398201e-05f, 1.029123021e-05f, 1.029845973e-05f, 1.030567055e-05f, 1.031286266e-05f, 1.032003605e-05f, 1.032719072e-05f,
-1.033432664e-05f, 1.034144382e-05f, 1.034854224e-05f, 1.035562189e-05f, 1.036268276e-05f, 1.036972485e-05f, 1.037674813e-05f, 1.038375261e-05f, 1.039073827e-05f, 1.039770510e-05f,
-1.040465309e-05f, 1.041158223e-05f, 1.041849252e-05f, 1.042538394e-05f, 1.043225648e-05f, 1.043911014e-05f, 1.044594490e-05f, 1.045276075e-05f, 1.045955769e-05f, 1.046633570e-05f,
-1.047309478e-05f, 1.047983492e-05f, 1.048655610e-05f, 1.049325832e-05f, 1.049994157e-05f, 1.050660584e-05f, 1.051325111e-05f, 1.051987739e-05f, 1.052648466e-05f, 1.053307291e-05f,
-1.053964213e-05f, 1.054619232e-05f, 1.055272346e-05f, 1.055923554e-05f, 1.056572857e-05f, 1.057220252e-05f, 1.057865739e-05f, 1.058509317e-05f, 1.059150985e-05f, 1.059790742e-05f,
-1.060428588e-05f, 1.061064521e-05f, 1.061698540e-05f, 1.062330646e-05f, 1.062960836e-05f, 1.063589110e-05f, 1.064215468e-05f, 1.064839907e-05f, 1.065462428e-05f, 1.066083030e-05f,
-1.066701711e-05f, 1.067318471e-05f, 1.067933310e-05f, 1.068546225e-05f, 1.069157217e-05f, 1.069766285e-05f, 1.070373427e-05f, 1.070978643e-05f, 1.071581932e-05f, 1.072183294e-05f,
-1.072782726e-05f, 1.073380230e-05f, 1.073975803e-05f, 1.074569446e-05f, 1.075161157e-05f, 1.075750935e-05f, 1.076338780e-05f, 1.076924691e-05f, 1.077508667e-05f, 1.078090707e-05f,
-1.078670811e-05f, 1.079248977e-05f, 1.079825206e-05f, 1.080399495e-05f, 1.080971846e-05f, 1.081542256e-05f, 1.082110725e-05f, 1.082677252e-05f, 1.083241837e-05f, 1.083804478e-05f,
-1.084365175e-05f, 1.084923928e-05f, 1.085480735e-05f, 1.086035596e-05f, 1.086588510e-05f, 1.087139476e-05f, 1.087688494e-05f, 1.088235562e-05f, 1.088780681e-05f, 1.089323850e-05f,
-1.089865067e-05f, 1.090404332e-05f, 1.090941644e-05f, 1.091477003e-05f, 1.092010408e-05f, 1.092541859e-05f, 1.093071354e-05f, 1.093598892e-05f, 1.094124474e-05f, 1.094648099e-05f,
-1.095169765e-05f, 1.095689473e-05f, 1.096207221e-05f, 1.096723009e-05f, 1.097236837e-05f, 1.097748702e-05f, 1.098258606e-05f, 1.098766547e-05f, 1.099272525e-05f, 1.099776538e-05f,
-1.100278587e-05f, 1.100778671e-05f, 1.101276788e-05f, 1.101772939e-05f, 1.102267123e-05f, 1.102759340e-05f, 1.103249587e-05f, 1.103737866e-05f, 1.104224175e-05f, 1.104708514e-05f,
-1.105190882e-05f, 1.105671278e-05f, 1.106149703e-05f, 1.106626155e-05f, 1.107100633e-05f, 1.107573138e-05f, 1.108043668e-05f, 1.108512224e-05f, 1.108978804e-05f, 1.109443407e-05f,
-1.109906035e-05f, 1.110366684e-05f, 1.110825356e-05f, 1.111282050e-05f, 1.111736765e-05f, 1.112189500e-05f, 1.112640255e-05f, 1.113089030e-05f, 1.113535823e-05f, 1.113980635e-05f,
-1.114423465e-05f, 1.114864312e-05f, 1.115303176e-05f, 1.115740056e-05f, 1.116174952e-05f, 1.116607863e-05f, 1.117038789e-05f, 1.117467729e-05f, 1.117894682e-05f, 1.118319649e-05f,
-1.118742629e-05f, 1.119163620e-05f, 1.119582624e-05f, 1.119999638e-05f, 1.120414664e-05f, 1.120827699e-05f, 1.121238745e-05f, 1.121647799e-05f, 1.122054863e-05f, 1.122459935e-05f,
-1.122863015e-05f, 1.123264102e-05f, 1.123663196e-05f, 1.124060297e-05f, 1.124455404e-05f, 1.124848516e-05f, 1.125239634e-05f, 1.125628757e-05f, 1.126015883e-05f, 1.126401014e-05f,
-1.126784148e-05f, 1.127165286e-05f, 1.127544425e-05f, 1.127921568e-05f, 1.128296711e-05f, 1.128669857e-05f, 1.129041003e-05f, 1.129410150e-05f, 1.129777297e-05f, 1.130142443e-05f,
-1.130505589e-05f, 1.130866735e-05f, 1.131225878e-05f, 1.131583020e-05f, 1.131938160e-05f, 1.132291297e-05f, 1.132642432e-05f, 1.132991563e-05f, 1.133338691e-05f, 1.133683814e-05f,
-1.134026933e-05f, 1.134368048e-05f, 1.134707157e-05f, 1.135044261e-05f, 1.135379360e-05f, 1.135712452e-05f, 1.136043538e-05f, 1.136372617e-05f, 1.136699689e-05f, 1.137024753e-05f,
-1.137347810e-05f, 1.137668859e-05f, 1.137987899e-05f, 1.138304931e-05f, 1.138619954e-05f, 1.138932967e-05f, 1.139243971e-05f, 1.139552965e-05f, 1.139859949e-05f, 1.140164922e-05f,
-1.140467885e-05f, 1.140768837e-05f, 1.141067777e-05f, 1.141364706e-05f, 1.141659622e-05f, 1.141952527e-05f, 1.142243419e-05f, 1.142532299e-05f, 1.142819166e-05f, 1.143104019e-05f,
-1.143386859e-05f, 1.143667685e-05f, 1.143946498e-05f, 1.144223296e-05f, 1.144498080e-05f, 1.144770849e-05f, 1.145041604e-05f, 1.145310343e-05f, 1.145577067e-05f, 1.145841775e-05f,
-1.146104468e-05f, 1.146365145e-05f, 1.146623805e-05f, 1.146880449e-05f, 1.147135077e-05f, 1.147387688e-05f, 1.147638281e-05f, 1.147886858e-05f, 1.148133417e-05f, 1.148377959e-05f,
-1.148620483e-05f, 1.148860989e-05f, 1.149099477e-05f, 1.149335946e-05f, 1.149570398e-05f, 1.149802830e-05f, 1.150033244e-05f, 1.150261639e-05f, 1.150488015e-05f, 1.150712372e-05f,
-1.150934710e-05f, 1.151155027e-05f, 1.151373326e-05f, 1.151589604e-05f, 1.151803863e-05f, 1.152016102e-05f, 1.152226320e-05f, 1.152434518e-05f, 1.152640696e-05f, 1.152844853e-05f,
-1.153046990e-05f, 1.153247106e-05f, 1.153445201e-05f, 1.153641275e-05f, 1.153835328e-05f, 1.154027360e-05f, 1.154217371e-05f, 1.154405361e-05f, 1.154591329e-05f, 1.154775275e-05f,
-1.154957200e-05f, 1.155137104e-05f, 1.155314986e-05f, 1.155490846e-05f, 1.155664684e-05f, 1.155836501e-05f, 1.156006295e-05f, 1.156174068e-05f, 1.156339818e-05f, 1.156503547e-05f,
-1.156665253e-05f, 1.156824937e-05f, 1.156982599e-05f, 1.157138239e-05f, 1.157291856e-05f, 1.157443452e-05f, 1.157593025e-05f, 1.157740576e-05f, 1.157886104e-05f, 1.158029610e-05f,
-1.158171094e-05f, 1.158310556e-05f, 1.158447995e-05f, 1.158583412e-05f, 1.158716806e-05f, 1.158848179e-05f, 1.158977529e-05f, 1.159104856e-05f, 1.159230162e-05f, 1.159353445e-05f,
-1.159474706e-05f, 1.159593945e-05f, 1.159711162e-05f, 1.159826357e-05f, 1.159939529e-05f, 1.160050680e-05f, 1.160159809e-05f, 1.160266916e-05f, 1.160372001e-05f, 1.160475064e-05f,
-1.160576106e-05f, 1.160675126e-05f, 1.160772125e-05f, 1.160867102e-05f, 1.160960057e-05f, 1.161050991e-05f, 1.161139904e-05f, 1.161226796e-05f, 1.161311667e-05f, 1.161394517e-05f,
-1.161475346e-05f, 1.161554154e-05f, 1.161630942e-05f, 1.161705709e-05f, 1.161778455e-05f, 1.161849182e-05f, 1.161917888e-05f, 1.161984574e-05f, 1.162049240e-05f, 1.162111886e-05f,
-1.162172513e-05f, 1.162231120e-05f, 1.162287707e-05f, 1.162342276e-05f, 1.162394825e-05f, 1.162445356e-05f, 1.162493867e-05f, 1.162540360e-05f, 1.162584834e-05f, 1.162627291e-05f,
-1.162667728e-05f, 1.162706148e-05f, 1.162742551e-05f, 1.162776935e-05f, 1.162809302e-05f, 1.162839652e-05f, 1.162867985e-05f, 1.162894301e-05f, 1.162918600e-05f, 1.162940883e-05f,
-1.162961150e-05f, 1.162979400e-05f, 1.162995635e-05f, 1.163009854e-05f, 1.163022058e-05f, 1.163032246e-05f, 1.163040420e-05f, 1.163046578e-05f, 1.163050723e-05f, 1.163052853e-05f,
-1.163052969e-05f, 1.163051071e-05f, 1.163047159e-05f, 1.163041235e-05f, 1.163033297e-05f, 1.163023346e-05f, 1.163011383e-05f, 1.162997408e-05f, 1.162981420e-05f, 1.162963421e-05f,
-1.162943411e-05f, 1.162921389e-05f, 1.162897356e-05f, 1.162871313e-05f, 1.162843259e-05f, 1.162813196e-05f, 1.162781122e-05f, 1.162747039e-05f, 1.162710947e-05f, 1.162672847e-05f,
-1.162632737e-05f, 1.162590620e-05f, 1.162546494e-05f, 1.162500361e-05f, 1.162452220e-05f, 1.162402073e-05f, 1.162349919e-05f, 1.162295759e-05f, 1.162239592e-05f, 1.162181421e-05f,
-1.162121243e-05f, 1.162059061e-05f, 1.161994875e-05f, 1.161928684e-05f, 1.161860489e-05f, 1.161790291e-05f, 1.161718089e-05f, 1.161643885e-05f, 1.161567678e-05f, 1.161489470e-05f,
-1.161409259e-05f, 1.161327048e-05f, 1.161242835e-05f, 1.161156622e-05f, 1.161068409e-05f, 1.160978196e-05f, 1.160885983e-05f, 1.160791772e-05f, 1.160695562e-05f, 1.160597354e-05f,
-1.160497149e-05f, 1.160394946e-05f, 1.160290746e-05f, 1.160184550e-05f, 1.160076357e-05f, 1.159966169e-05f, 1.159853986e-05f, 1.159739808e-05f, 1.159623636e-05f, 1.159505470e-05f,
-1.159385311e-05f, 1.159263158e-05f, 1.159139013e-05f, 1.159012876e-05f, 1.158884747e-05f, 1.158754627e-05f, 1.158622517e-05f, 1.158488416e-05f, 1.158352326e-05f, 1.158214246e-05f,
-1.158074177e-05f, 1.157932120e-05f, 1.157788075e-05f, 1.157642043e-05f, 1.157494024e-05f, 1.157344019e-05f, 1.157192028e-05f, 1.157038051e-05f, 1.156882090e-05f, 1.156724144e-05f,
-1.156564215e-05f, 1.156402302e-05f, 1.156238406e-05f, 1.156072529e-05f, 1.155904669e-05f, 1.155734828e-05f, 1.155563007e-05f, 1.155389205e-05f, 1.155213424e-05f, 1.155035663e-05f,
-1.154855924e-05f, 1.154674208e-05f, 1.154490513e-05f, 1.154304842e-05f, 1.154117195e-05f, 1.153927572e-05f, 1.153735973e-05f, 1.153542400e-05f, 1.153346853e-05f, 1.153149333e-05f,
-1.152949840e-05f, 1.152748374e-05f, 1.152544937e-05f, 1.152339529e-05f, 1.152132150e-05f, 1.151922801e-05f, 1.151711483e-05f, 1.151498196e-05f, 1.151282941e-05f, 1.151065718e-05f,
-1.150846529e-05f, 1.150625373e-05f, 1.150402252e-05f, 1.150177166e-05f, 1.149950115e-05f, 1.149721100e-05f, 1.149490122e-05f, 1.149257182e-05f, 1.149022280e-05f, 1.148785417e-05f,
-1.148546593e-05f, 1.148305809e-05f, 1.148063066e-05f, 1.147818364e-05f, 1.147571705e-05f, 1.147323088e-05f, 1.147072514e-05f, 1.146819985e-05f, 1.146565500e-05f, 1.146309060e-05f,
-1.146050667e-05f, 1.145790320e-05f, 1.145528021e-05f, 1.145263770e-05f, 1.144997568e-05f, 1.144729415e-05f, 1.144459312e-05f, 1.144187261e-05f, 1.143913261e-05f, 1.143637313e-05f,
-1.143359418e-05f, 1.143079577e-05f, 1.142797791e-05f, 1.142514060e-05f, 1.142228384e-05f, 1.141940766e-05f, 1.141651204e-05f, 1.141359701e-05f, 1.141066257e-05f, 1.140770872e-05f,
-1.140473548e-05f, 1.140174285e-05f, 1.139873083e-05f, 1.139569945e-05f, 1.139264869e-05f, 1.138957858e-05f, 1.138648911e-05f, 1.138338031e-05f, 1.138025216e-05f, 1.137710469e-05f,
-1.137393790e-05f, 1.137075180e-05f, 1.136754639e-05f, 1.136432168e-05f, 1.136107769e-05f, 1.135781441e-05f, 1.135453187e-05f, 1.135123005e-05f, 1.134790898e-05f, 1.134456867e-05f,
-1.134120911e-05f, 1.133783032e-05f, 1.133443230e-05f, 1.133101507e-05f, 1.132757863e-05f, 1.132412299e-05f, 1.132064816e-05f, 1.131715415e-05f, 1.131364096e-05f, 1.131010860e-05f,
-1.130655709e-05f, 1.130298643e-05f, 1.129939663e-05f, 1.129578769e-05f, 1.129215963e-05f, 1.128851246e-05f, 1.128484618e-05f, 1.128116080e-05f, 1.127745633e-05f, 1.127373278e-05f,
-1.126999016e-05f, 1.126622848e-05f, 1.126244774e-05f, 1.125864796e-05f, 1.125482914e-05f, 1.125099130e-05f, 1.124713443e-05f, 1.124325856e-05f, 1.123936368e-05f, 1.123544981e-05f,
-1.123151696e-05f, 1.122756514e-05f, 1.122359435e-05f, 1.121960461e-05f, 1.121559592e-05f, 1.121156830e-05f, 1.120752174e-05f, 1.120345627e-05f, 1.119937189e-05f, 1.119526861e-05f,
-1.119114645e-05f, 1.118700540e-05f, 1.118284547e-05f, 1.117866669e-05f, 1.117446906e-05f, 1.117025258e-05f, 1.116601727e-05f, 1.116176313e-05f, 1.115749018e-05f, 1.115319843e-05f,
-1.114888788e-05f, 1.114455855e-05f, 1.114021044e-05f, 1.113584357e-05f, 1.113145794e-05f, 1.112705357e-05f, 1.112263046e-05f, 1.111818862e-05f, 1.111372807e-05f, 1.110924881e-05f,
-1.110475086e-05f, 1.110023422e-05f, 1.109569891e-05f, 1.109114493e-05f, 1.108657229e-05f, 1.108198101e-05f, 1.107737110e-05f, 1.107274256e-05f, 1.106809540e-05f, 1.106342964e-05f,
-1.105874529e-05f, 1.105404235e-05f, 1.104932084e-05f, 1.104458077e-05f, 1.103982214e-05f, 1.103504497e-05f, 1.103024927e-05f, 1.102543506e-05f, 1.102060233e-05f, 1.101575110e-05f,
-1.101088138e-05f, 1.100599318e-05f, 1.100108651e-05f, 1.099616139e-05f, 1.099121782e-05f, 1.098625582e-05f, 1.098127539e-05f, 1.097627655e-05f, 1.097125931e-05f, 1.096622367e-05f,
-1.096116965e-05f, 1.095609726e-05f, 1.095100652e-05f, 1.094589742e-05f, 1.094076999e-05f, 1.093562423e-05f, 1.093046016e-05f, 1.092527779e-05f, 1.092007712e-05f, 1.091485817e-05f,
-1.090962095e-05f, 1.090436547e-05f, 1.089909174e-05f, 1.089379978e-05f, 1.088848960e-05f, 1.088316120e-05f, 1.087781459e-05f, 1.087244980e-05f, 1.086706683e-05f, 1.086166569e-05f,
-1.085624640e-05f, 1.085080896e-05f, 1.084535339e-05f, 1.083987970e-05f, 1.083438790e-05f, 1.082887800e-05f, 1.082335001e-05f, 1.081780395e-05f, 1.081223983e-05f, 1.080665766e-05f,
-1.080105745e-05f, 1.079543921e-05f, 1.078980296e-05f, 1.078414870e-05f, 1.077847645e-05f, 1.077278623e-05f, 1.076707803e-05f, 1.076135189e-05f, 1.075560780e-05f, 1.074984577e-05f,
-1.074406583e-05f, 1.073826799e-05f, 1.073245225e-05f, 1.072661862e-05f, 1.072076713e-05f, 1.071489778e-05f, 1.070901058e-05f, 1.070310556e-05f, 1.069718271e-05f, 1.069124205e-05f,
-1.068528360e-05f, 1.067930736e-05f, 1.067331336e-05f, 1.066730159e-05f, 1.066127208e-05f, 1.065522484e-05f, 1.064915988e-05f, 1.064307720e-05f, 1.063697684e-05f, 1.063085879e-05f,
-1.062472307e-05f, 1.061856970e-05f, 1.061239868e-05f, 1.060621003e-05f, 1.060000376e-05f, 1.059377989e-05f, 1.058753842e-05f, 1.058127937e-05f, 1.057500276e-05f, 1.056870860e-05f,
-1.056239689e-05f, 1.055606765e-05f, 1.054972090e-05f, 1.054335665e-05f, 1.053697491e-05f, 1.053057570e-05f, 1.052415902e-05f, 1.051772490e-05f, 1.051127334e-05f, 1.050480435e-05f,
-1.049831796e-05f, 1.049181417e-05f, 1.048529301e-05f, 1.047875447e-05f, 1.047219857e-05f, 1.046562534e-05f, 1.045903477e-05f, 1.045242689e-05f, 1.044580171e-05f, 1.043915924e-05f,
-1.043249950e-05f, 1.042582250e-05f, 1.041912825e-05f, 1.041241676e-05f, 1.040568806e-05f, 1.039894215e-05f, 1.039217905e-05f, 1.038539877e-05f, 1.037860133e-05f, 1.037178673e-05f,
-1.036495500e-05f, 1.035810615e-05f, 1.035124018e-05f, 1.034435712e-05f, 1.033745698e-05f, 1.033053978e-05f, 1.032360552e-05f, 1.031665422e-05f, 1.030968590e-05f, 1.030270056e-05f,
-1.029569823e-05f, 1.028867892e-05f, 1.028164264e-05f, 1.027458940e-05f, 1.026751923e-05f, 1.026043213e-05f, 1.025332812e-05f, 1.024620721e-05f, 1.023906942e-05f, 1.023191477e-05f,
-1.022474325e-05f, 1.021755490e-05f, 1.021034973e-05f, 1.020312774e-05f, 1.019588896e-05f, 1.018863340e-05f, 1.018136108e-05f, 1.017407200e-05f, 1.016676618e-05f, 1.015944364e-05f,
-1.015210440e-05f, 1.014474846e-05f, 1.013737584e-05f, 1.012998656e-05f, 1.012258063e-05f, 1.011515807e-05f, 1.010771889e-05f, 1.010026310e-05f, 1.009279073e-05f, 1.008530178e-05f,
-1.007779627e-05f, 1.007027422e-05f, 1.006273563e-05f, 1.005518054e-05f, 1.004760894e-05f, 1.004002087e-05f, 1.003241632e-05f, 1.002479532e-05f, 1.001715788e-05f, 1.000950402e-05f,
-1.000183375e-05f, 9.994147085e-06f, 9.986444045e-06f, 9.978724642e-06f, 9.970988893e-06f, 9.963236813e-06f, 9.955468417e-06f, 9.947683720e-06f, 9.939882738e-06f, 9.932065487e-06f,
-9.924231982e-06f, 9.916382238e-06f, 9.908516271e-06f, 9.900634096e-06f, 9.892735730e-06f, 9.884821188e-06f, 9.876890485e-06f, 9.868943638e-06f, 9.860980661e-06f, 9.853001571e-06f,
-9.845006384e-06f, 9.836995114e-06f, 9.828967779e-06f, 9.820924394e-06f, 9.812864974e-06f, 9.804789536e-06f, 9.796698096e-06f, 9.788590669e-06f, 9.780467272e-06f, 9.772327920e-06f,
-9.764172630e-06f, 9.756001417e-06f, 9.747814298e-06f, 9.739611289e-06f, 9.731392406e-06f, 9.723157665e-06f, 9.714907081e-06f, 9.706640673e-06f, 9.698358455e-06f, 9.690060444e-06f,
-9.681746656e-06f, 9.673417108e-06f, 9.665071815e-06f, 9.656710795e-06f, 9.648334063e-06f, 9.639941637e-06f, 9.631533532e-06f, 9.623109764e-06f, 9.614670351e-06f, 9.606215309e-06f,
-9.597744655e-06f, 9.589258404e-06f, 9.580756574e-06f, 9.572239181e-06f, 9.563706242e-06f, 9.555157773e-06f, 9.546593791e-06f, 9.538014314e-06f, 9.529419356e-06f, 9.520808937e-06f,
-9.512183071e-06f, 9.503541776e-06f, 9.494885069e-06f, 9.486212967e-06f, 9.477525486e-06f, 9.468822644e-06f, 9.460104457e-06f, 9.451370942e-06f, 9.442622117e-06f, 9.433857998e-06f,
-9.425078602e-06f, 9.416283947e-06f, 9.407474049e-06f, 9.398648925e-06f, 9.389808594e-06f, 9.380953071e-06f, 9.372082374e-06f, 9.363196520e-06f, 9.354295527e-06f, 9.345379412e-06f,
-9.336448191e-06f, 9.327501883e-06f, 9.318540504e-06f, 9.309564072e-06f, 9.300572605e-06f, 9.291566119e-06f, 9.282544632e-06f, 9.273508162e-06f, 9.264456726e-06f, 9.255390341e-06f,
-9.246309026e-06f, 9.237212796e-06f, 9.228101671e-06f, 9.218975668e-06f, 9.209834804e-06f, 9.200679097e-06f, 9.191508564e-06f, 9.182323224e-06f, 9.173123094e-06f, 9.163908191e-06f,
-9.154678534e-06f, 9.145434140e-06f, 9.136175027e-06f, 9.126901212e-06f, 9.117612715e-06f, 9.108309552e-06f, 9.098991741e-06f, 9.089659301e-06f, 9.080312248e-06f, 9.070950603e-06f,
-9.061574381e-06f, 9.052183601e-06f, 9.042778282e-06f, 9.033358441e-06f, 9.023924096e-06f, 9.014475266e-06f, 9.005011968e-06f, 8.995534222e-06f, 8.986042043e-06f, 8.976535452e-06f,
-8.967014467e-06f, 8.957479104e-06f, 8.947929384e-06f, 8.938365323e-06f, 8.928786941e-06f, 8.919194256e-06f, 8.909587285e-06f, 8.899966048e-06f, 8.890330563e-06f, 8.880680848e-06f,
-8.871016921e-06f, 8.861338802e-06f, 8.851646508e-06f, 8.841940058e-06f, 8.832219471e-06f, 8.822484765e-06f, 8.812735958e-06f, 8.802973070e-06f, 8.793196119e-06f, 8.783405124e-06f,
-8.773600102e-06f, 8.763781074e-06f, 8.753948057e-06f, 8.744101070e-06f, 8.734240133e-06f, 8.724365263e-06f, 8.714476480e-06f, 8.704573802e-06f, 8.694657249e-06f, 8.684726839e-06f,
-8.674782590e-06f, 8.664824523e-06f, 8.654852655e-06f, 8.644867007e-06f, 8.634867596e-06f, 8.624854442e-06f, 8.614827563e-06f, 8.604786979e-06f, 8.594732709e-06f, 8.584664772e-06f,
-8.574583187e-06f, 8.564487973e-06f, 8.554379149e-06f, 8.544256735e-06f, 8.534120749e-06f, 8.523971211e-06f, 8.513808140e-06f, 8.503631555e-06f, 8.493441476e-06f, 8.483237922e-06f,
-8.473020911e-06f, 8.462790464e-06f, 8.452546600e-06f, 8.442289338e-06f, 8.432018697e-06f, 8.421734697e-06f, 8.411437358e-06f, 8.401126698e-06f, 8.390802738e-06f, 8.380465497e-06f,
-8.370114993e-06f, 8.359751248e-06f, 8.349374280e-06f, 8.338984109e-06f, 8.328580754e-06f, 8.318164236e-06f, 8.307734573e-06f, 8.297291786e-06f, 8.286835894e-06f, 8.276366917e-06f,
-8.265884875e-06f, 8.255389786e-06f, 8.244881672e-06f, 8.234360552e-06f, 8.223826445e-06f, 8.213279372e-06f, 8.202719352e-06f, 8.192146405e-06f, 8.181560551e-06f, 8.170961810e-06f,
-8.160350202e-06f, 8.149725747e-06f, 8.139088464e-06f, 8.128438375e-06f, 8.117775498e-06f, 8.107099853e-06f, 8.096411462e-06f, 8.085710343e-06f, 8.074996517e-06f, 8.064270005e-06f,
-8.053530825e-06f, 8.042778999e-06f, 8.032014546e-06f, 8.021237487e-06f, 8.010447841e-06f, 7.999645630e-06f, 7.988830872e-06f, 7.978003590e-06f, 7.967163802e-06f, 7.956311529e-06f,
-7.945446791e-06f, 7.934569609e-06f, 7.923680004e-06f, 7.912777994e-06f, 7.901863602e-06f, 7.890936846e-06f, 7.879997749e-06f, 7.869046329e-06f, 7.858082608e-06f, 7.847106606e-06f,
-7.836118343e-06f, 7.825117841e-06f, 7.814105119e-06f, 7.803080198e-06f, 7.792043099e-06f, 7.780993842e-06f, 7.769932449e-06f, 7.758858938e-06f, 7.747773332e-06f, 7.736675651e-06f,
-7.725565915e-06f, 7.714444146e-06f, 7.703310364e-06f, 7.692164589e-06f, 7.681006843e-06f, 7.669837146e-06f, 7.658655519e-06f, 7.647461983e-06f, 7.636256559e-06f, 7.625039267e-06f,
-7.613810129e-06f, 7.602569165e-06f, 7.591316396e-06f, 7.580051844e-06f, 7.568775528e-06f, 7.557487471e-06f, 7.546187692e-06f, 7.534876214e-06f, 7.523553056e-06f, 7.512218241e-06f,
-7.500871788e-06f, 7.489513720e-06f, 7.478144058e-06f, 7.466762821e-06f, 7.455370032e-06f, 7.443965711e-06f, 7.432549881e-06f, 7.421122561e-06f, 7.409683773e-06f, 7.398233539e-06f,
-7.386771879e-06f, 7.375298815e-06f, 7.363814368e-06f, 7.352318559e-06f, 7.340811410e-06f, 7.329292942e-06f, 7.317763176e-06f, 7.306222133e-06f, 7.294669836e-06f, 7.283106305e-06f,
-7.271531561e-06f, 7.259945627e-06f, 7.248348523e-06f, 7.236740271e-06f, 7.225120893e-06f, 7.213490409e-06f, 7.201848842e-06f, 7.190196213e-06f, 7.178532543e-06f, 7.166857854e-06f,
-7.155172168e-06f, 7.143475506e-06f, 7.131767889e-06f, 7.120049340e-06f, 7.108319880e-06f, 7.096579530e-06f, 7.084828313e-06f, 7.073066249e-06f, 7.061293361e-06f, 7.049509671e-06f,
-7.037715199e-06f, 7.025909968e-06f, 7.014094000e-06f, 7.002267316e-06f, 6.990429938e-06f, 6.978581888e-06f, 6.966723188e-06f, 6.954853859e-06f, 6.942973924e-06f, 6.931083404e-06f,
-6.919182321e-06f, 6.907270697e-06f, 6.895348554e-06f, 6.883415913e-06f, 6.871472798e-06f, 6.859519229e-06f, 6.847555230e-06f, 6.835580820e-06f, 6.823596024e-06f, 6.811600862e-06f,
-6.799595357e-06f, 6.787579531e-06f, 6.775553406e-06f, 6.763517004e-06f, 6.751470347e-06f, 6.739413457e-06f, 6.727346357e-06f, 6.715269068e-06f, 6.703181612e-06f, 6.691084013e-06f,
-6.678976291e-06f, 6.666858469e-06f, 6.654730570e-06f, 6.642592616e-06f, 6.630444628e-06f, 6.618286630e-06f, 6.606118643e-06f, 6.593940690e-06f, 6.581752792e-06f, 6.569554973e-06f,
-6.557347255e-06f, 6.545129660e-06f, 6.532902210e-06f, 6.520664927e-06f, 6.508417835e-06f, 6.496160956e-06f, 6.483894311e-06f, 6.471617924e-06f, 6.459331817e-06f, 6.447036012e-06f,
-6.434730531e-06f, 6.422415398e-06f, 6.410090635e-06f, 6.397756264e-06f, 6.385412308e-06f, 6.373058789e-06f, 6.360695731e-06f, 6.348323154e-06f, 6.335941083e-06f, 6.323549540e-06f,
-6.311148547e-06f, 6.298738126e-06f, 6.286318302e-06f, 6.273889095e-06f, 6.261450530e-06f, 6.249002628e-06f, 6.236545412e-06f, 6.224078906e-06f, 6.211603131e-06f, 6.199118110e-06f,
-6.186623867e-06f, 6.174120424e-06f, 6.161607803e-06f, 6.149086028e-06f, 6.136555121e-06f, 6.124015106e-06f, 6.111466004e-06f, 6.098907839e-06f, 6.086340634e-06f, 6.073764412e-06f,
-6.061179195e-06f, 6.048585006e-06f, 6.035981868e-06f, 6.023369805e-06f, 6.010748838e-06f, 5.998118992e-06f, 5.985480289e-06f, 5.972832751e-06f, 5.960176402e-06f, 5.947511266e-06f,
-5.934837364e-06f, 5.922154720e-06f, 5.909463358e-06f, 5.896763299e-06f, 5.884054567e-06f, 5.871337185e-06f, 5.858611177e-06f, 5.845876565e-06f, 5.833133372e-06f, 5.820381622e-06f,
-5.807621338e-06f, 5.794852542e-06f, 5.782075258e-06f, 5.769289510e-06f, 5.756495319e-06f, 5.743692711e-06f, 5.730881707e-06f, 5.718062330e-06f, 5.705234605e-06f, 5.692398554e-06f,
-5.679554201e-06f, 5.666701569e-06f, 5.653840681e-06f, 5.640971560e-06f, 5.628094230e-06f, 5.615208714e-06f, 5.602315035e-06f, 5.589413217e-06f, 5.576503283e-06f, 5.563585256e-06f,
-5.550659160e-06f, 5.537725018e-06f, 5.524782854e-06f, 5.511832690e-06f, 5.498874551e-06f, 5.485908459e-06f, 5.472934438e-06f, 5.459952512e-06f, 5.446962704e-06f, 5.433965037e-06f,
-5.420959535e-06f, 5.407946222e-06f, 5.394925121e-06f, 5.381896254e-06f, 5.368859647e-06f, 5.355815322e-06f, 5.342763304e-06f, 5.329703614e-06f, 5.316636278e-06f, 5.303561318e-06f,
-5.290478759e-06f, 5.277388623e-06f, 5.264290935e-06f, 5.251185718e-06f, 5.238072995e-06f, 5.224952791e-06f, 5.211825128e-06f, 5.198690031e-06f, 5.185547523e-06f, 5.172397628e-06f,
-5.159240370e-06f, 5.146075772e-06f, 5.132903857e-06f, 5.119724650e-06f, 5.106538175e-06f, 5.093344455e-06f, 5.080143513e-06f, 5.066935374e-06f, 5.053720061e-06f, 5.040497599e-06f,
-5.027268010e-06f, 5.014031319e-06f, 5.000787549e-06f, 4.987536724e-06f, 4.974278869e-06f, 4.961014006e-06f, 4.947742160e-06f, 4.934463355e-06f, 4.921177614e-06f, 4.907884961e-06f,
-4.894585420e-06f, 4.881279015e-06f, 4.867965770e-06f, 4.854645709e-06f, 4.841318855e-06f, 4.827985233e-06f, 4.814644867e-06f, 4.801297779e-06f, 4.787943996e-06f, 4.774583539e-06f,
-4.761216434e-06f, 4.747842704e-06f, 4.734462373e-06f, 4.721075466e-06f, 4.707682005e-06f, 4.694282016e-06f, 4.680875522e-06f, 4.667462547e-06f, 4.654043115e-06f, 4.640617251e-06f,
-4.627184978e-06f, 4.613746320e-06f, 4.600301301e-06f, 4.586849946e-06f, 4.573392279e-06f, 4.559928323e-06f, 4.546458103e-06f, 4.532981643e-06f, 4.519498966e-06f, 4.506010098e-06f,
-4.492515061e-06f, 4.479013881e-06f, 4.465506581e-06f, 4.451993186e-06f, 4.438473720e-06f, 4.424948206e-06f, 4.411416670e-06f, 4.397879134e-06f, 4.384335624e-06f, 4.370786164e-06f,
-4.357230777e-06f, 4.343669488e-06f, 4.330102322e-06f, 4.316529302e-06f, 4.302950452e-06f, 4.289365797e-06f, 4.275775362e-06f, 4.262179169e-06f, 4.248577245e-06f, 4.234969612e-06f,
-4.221356295e-06f, 4.207737318e-06f, 4.194112707e-06f, 4.180482484e-06f, 4.166846674e-06f, 4.153205302e-06f, 4.139558392e-06f, 4.125905968e-06f, 4.112248055e-06f, 4.098584676e-06f,
-4.084915857e-06f, 4.071241621e-06f, 4.057561993e-06f, 4.043876997e-06f, 4.030186658e-06f, 4.016490999e-06f, 4.002790046e-06f, 3.989083823e-06f, 3.975372354e-06f, 3.961655663e-06f,
-3.947933775e-06f, 3.934206714e-06f, 3.920474505e-06f, 3.906737172e-06f, 3.892994740e-06f, 3.879247232e-06f, 3.865494674e-06f, 3.851737090e-06f, 3.837974504e-06f, 3.824206940e-06f,
-3.810434424e-06f, 3.796656980e-06f, 3.782874631e-06f, 3.769087403e-06f, 3.755295320e-06f, 3.741498407e-06f, 3.727696688e-06f, 3.713890187e-06f, 3.700078929e-06f, 3.686262939e-06f,
-3.672442241e-06f, 3.658616859e-06f, 3.644786818e-06f, 3.630952143e-06f, 3.617112858e-06f, 3.603268988e-06f, 3.589420557e-06f, 3.575567590e-06f, 3.561710111e-06f, 3.547848145e-06f,
-3.533981716e-06f, 3.520110849e-06f, 3.506235569e-06f, 3.492355900e-06f, 3.478471867e-06f, 3.464583494e-06f, 3.450690806e-06f, 3.436793827e-06f, 3.422892582e-06f, 3.408987096e-06f,
-3.395077394e-06f, 3.381163499e-06f, 3.367245437e-06f, 3.353323231e-06f, 3.339396908e-06f, 3.325466491e-06f, 3.311532005e-06f, 3.297593474e-06f, 3.283650924e-06f, 3.269704379e-06f,
-3.255753863e-06f, 3.241799402e-06f, 3.227841020e-06f, 3.213878741e-06f, 3.199912590e-06f, 3.185942592e-06f, 3.171968771e-06f, 3.157991153e-06f, 3.144009762e-06f, 3.130024622e-06f,
-3.116035759e-06f, 3.102043196e-06f, 3.088046959e-06f, 3.074047073e-06f, 3.060043561e-06f, 3.046036450e-06f, 3.032025762e-06f, 3.018011524e-06f, 3.003993760e-06f, 2.989972494e-06f,
-2.975947751e-06f, 2.961919557e-06f, 2.947887935e-06f, 2.933852911e-06f, 2.919814509e-06f, 2.905772754e-06f, 2.891727670e-06f, 2.877679283e-06f, 2.863627617e-06f, 2.849572697e-06f,
-2.835514547e-06f, 2.821453193e-06f, 2.807388659e-06f, 2.793320970e-06f, 2.779250150e-06f, 2.765176225e-06f, 2.751099219e-06f, 2.737019157e-06f, 2.722936064e-06f, 2.708849964e-06f,
-2.694760882e-06f, 2.680668843e-06f, 2.666573872e-06f, 2.652475994e-06f, 2.638375232e-06f, 2.624271613e-06f, 2.610165161e-06f, 2.596055901e-06f, 2.581943857e-06f, 2.567829054e-06f,
-2.553711517e-06f, 2.539591271e-06f, 2.525468340e-06f, 2.511342750e-06f, 2.497214526e-06f, 2.483083691e-06f, 2.468950271e-06f, 2.454814290e-06f, 2.440675774e-06f, 2.426534748e-06f,
-2.412391235e-06f, 2.398245261e-06f, 2.384096850e-06f, 2.369946028e-06f, 2.355792820e-06f, 2.341637249e-06f, 2.327479341e-06f, 2.313319121e-06f, 2.299156614e-06f, 2.284991843e-06f,
-2.270824835e-06f, 2.256655614e-06f, 2.242484204e-06f, 2.228310631e-06f, 2.214134920e-06f, 2.199957095e-06f, 2.185777180e-06f, 2.171595202e-06f, 2.157411184e-06f, 2.143225152e-06f,
-2.129037130e-06f, 2.114847143e-06f, 2.100655216e-06f, 2.086461374e-06f, 2.072265642e-06f, 2.058068044e-06f, 2.043868605e-06f, 2.029667351e-06f, 2.015464305e-06f, 2.001259493e-06f,
-1.987052940e-06f, 1.972844670e-06f, 1.958634708e-06f, 1.944423079e-06f, 1.930209808e-06f, 1.915994920e-06f, 1.901778440e-06f, 1.887560391e-06f, 1.873340800e-06f, 1.859119691e-06f,
-1.844897089e-06f, 1.830673018e-06f, 1.816447504e-06f, 1.802220571e-06f, 1.787992244e-06f, 1.773762548e-06f, 1.759531508e-06f, 1.745299148e-06f, 1.731065494e-06f, 1.716830570e-06f,
-1.702594401e-06f, 1.688357012e-06f, 1.674118427e-06f, 1.659878672e-06f, 1.645637772e-06f, 1.631395750e-06f, 1.617152632e-06f, 1.602908443e-06f, 1.588663207e-06f, 1.574416950e-06f,
-1.560169696e-06f, 1.545921470e-06f, 1.531672297e-06f, 1.517422201e-06f, 1.503171207e-06f, 1.488919341e-06f, 1.474666626e-06f, 1.460413089e-06f, 1.446158753e-06f, 1.431903643e-06f,
-1.417647784e-06f, 1.403391201e-06f, 1.389133919e-06f, 1.374875963e-06f, 1.360617357e-06f, 1.346358125e-06f, 1.332098294e-06f, 1.317837887e-06f, 1.303576930e-06f, 1.289315447e-06f,
-1.275053463e-06f, 1.260791002e-06f, 1.246528090e-06f, 1.232264751e-06f, 1.218001011e-06f, 1.203736893e-06f, 1.189472422e-06f, 1.175207624e-06f, 1.160942523e-06f, 1.146677144e-06f,
-1.132411511e-06f, 1.118145649e-06f, 1.103879584e-06f, 1.089613339e-06f, 1.075346940e-06f, 1.061080412e-06f, 1.046813778e-06f, 1.032547064e-06f, 1.018280294e-06f, 1.004013494e-06f,
-9.897466870e-07f, 9.754798991e-07f, 9.612131545e-07f, 9.469464779e-07f, 9.326798942e-07f, 9.184134278e-07f, 9.041471037e-07f, 8.898809464e-07f, 8.756149807e-07f, 8.613492313e-07f,
-8.470837228e-07f, 8.328184799e-07f, 8.185535274e-07f, 8.042888899e-07f, 7.900245920e-07f, 7.757606585e-07f, 7.614971141e-07f, 7.472339833e-07f, 7.329712909e-07f, 7.187090615e-07f,
-7.044473197e-07f, 6.901860902e-07f, 6.759253978e-07f, 6.616652669e-07f, 6.474057222e-07f, 6.331467885e-07f, 6.188884902e-07f, 6.046308521e-07f, 5.903738987e-07f, 5.761176547e-07f,
-5.618621447e-07f, 5.476073933e-07f, 5.333534251e-07f, 5.191002647e-07f, 5.048479367e-07f, 4.905964657e-07f, 4.763458762e-07f, 4.620961930e-07f, 4.478474405e-07f, 4.335996433e-07f,
-4.193528260e-07f, 4.051070131e-07f, 3.908622293e-07f, 3.766184990e-07f, 3.623758468e-07f, 3.481342973e-07f, 3.338938750e-07f, 3.196546045e-07f, 3.054165102e-07f, 2.911796167e-07f,
-2.769439486e-07f, 2.627095303e-07f, 2.484763863e-07f, 2.342445412e-07f, 2.200140194e-07f, 2.057848455e-07f, 1.915570439e-07f, 1.773306391e-07f, 1.631056557e-07f, 1.488821180e-07f,
-1.346600505e-07f, 1.204394778e-07f, 1.062204242e-07f, 9.200291421e-08f, 7.778697229e-08f, 6.357262287e-08f, 4.935989038e-08f, 3.514879925e-08f, 2.093937391e-08f, 6.731638761e-09f,
--7.474381773e-09f, -2.167866329e-08f, -3.588118140e-08f, -5.008191169e-08f, -6.428082979e-08f, -7.847791132e-08f, -9.267313190e-08f, -1.068664672e-07f, -1.210578927e-07f, -1.352473843e-07f,
--1.494349174e-07f, -1.636204678e-07f, -1.778040112e-07f, -1.919855231e-07f, -2.061649794e-07f, -2.203423556e-07f, -2.345176274e-07f, -2.486907706e-07f, -2.628617608e-07f, -2.770305738e-07f,
--2.911971853e-07f, -3.053615710e-07f, -3.195237066e-07f, -3.336835678e-07f, -3.478411304e-07f, -3.619963702e-07f, -3.761492630e-07f, -3.902997843e-07f, -4.044479102e-07f, -4.185936162e-07f,
--4.327368783e-07f, -4.468776721e-07f, -4.610159736e-07f, -4.751517585e-07f, -4.892850025e-07f, -5.034156817e-07f, -5.175437717e-07f, -5.316692484e-07f, -5.457920876e-07f, -5.599122653e-07f,
--5.740297572e-07f, -5.881445393e-07f, -6.022565873e-07f, -6.163658772e-07f, -6.304723849e-07f, -6.445760863e-07f, -6.586769573e-07f, -6.727749737e-07f, -6.868701115e-07f, -7.009623467e-07f,
--7.150516552e-07f, -7.291380128e-07f, -7.432213957e-07f, -7.573017797e-07f, -7.713791407e-07f, -7.854534549e-07f, -7.995246981e-07f, -8.135928464e-07f, -8.276578757e-07f, -8.417197621e-07f,
--8.557784816e-07f, -8.698340101e-07f, -8.838863239e-07f, -8.979353988e-07f, -9.119812110e-07f, -9.260237364e-07f, -9.400629513e-07f, -9.540988316e-07f, -9.681313534e-07f, -9.821604929e-07f,
--9.961862261e-07f, -1.010208529e-06f, -1.024227378e-06f, -1.038242749e-06f, -1.052254619e-06f, -1.066262962e-06f, -1.080267757e-06f, -1.094268978e-06f, -1.108266602e-06f, -1.122260605e-06f,
--1.136250963e-06f, -1.150237653e-06f, -1.164220650e-06f, -1.178199931e-06f, -1.192175473e-06f, -1.206147251e-06f, -1.220115241e-06f, -1.234079421e-06f, -1.248039765e-06f, -1.261996251e-06f,
--1.275948855e-06f, -1.289897552e-06f, -1.303842320e-06f, -1.317783135e-06f, -1.331719973e-06f, -1.345652810e-06f, -1.359581622e-06f, -1.373506387e-06f, -1.387427080e-06f, -1.401343678e-06f,
--1.415256157e-06f, -1.429164493e-06f, -1.443068663e-06f, -1.456968644e-06f, -1.470864412e-06f, -1.484755942e-06f, -1.498643213e-06f, -1.512526199e-06f, -1.526404878e-06f, -1.540279227e-06f,
--1.554149220e-06f, -1.568014836e-06f, -1.581876050e-06f, -1.595732840e-06f, -1.609585181e-06f, -1.623433050e-06f, -1.637276424e-06f, -1.651115279e-06f, -1.664949592e-06f, -1.678779339e-06f,
--1.692604498e-06f, -1.706425044e-06f, -1.720240954e-06f, -1.734052205e-06f, -1.747858774e-06f, -1.761660637e-06f, -1.775457770e-06f, -1.789250151e-06f, -1.803037756e-06f, -1.816820562e-06f,
--1.830598546e-06f, -1.844371684e-06f, -1.858139953e-06f, -1.871903329e-06f, -1.885661790e-06f, -1.899415313e-06f, -1.913163873e-06f, -1.926907448e-06f, -1.940646015e-06f, -1.954379550e-06f,
--1.968108030e-06f, -1.981831432e-06f, -1.995549733e-06f, -2.009262910e-06f, -2.022970940e-06f, -2.036673798e-06f, -2.050371464e-06f, -2.064063912e-06f, -2.077751121e-06f, -2.091433067e-06f,
--2.105109726e-06f, -2.118781077e-06f, -2.132447096e-06f, -2.146107759e-06f, -2.159763045e-06f, -2.173412929e-06f, -2.187057389e-06f, -2.200696403e-06f, -2.214329946e-06f, -2.227957996e-06f,
--2.241580530e-06f, -2.255197525e-06f, -2.268808958e-06f, -2.282414807e-06f, -2.296015048e-06f, -2.309609658e-06f, -2.323198615e-06f, -2.336781896e-06f, -2.350359478e-06f, -2.363931337e-06f,
--2.377497453e-06f, -2.391057800e-06f, -2.404612358e-06f, -2.418161102e-06f, -2.431704010e-06f, -2.445241060e-06f, -2.458772228e-06f, -2.472297492e-06f, -2.485816830e-06f, -2.499330217e-06f,
--2.512837633e-06f, -2.526339054e-06f, -2.539834457e-06f, -2.553323820e-06f, -2.566807120e-06f, -2.580284335e-06f, -2.593755442e-06f, -2.607220418e-06f, -2.620679241e-06f, -2.634131888e-06f,
--2.647578336e-06f, -2.661018564e-06f, -2.674452548e-06f, -2.687880266e-06f, -2.701301696e-06f, -2.714716815e-06f, -2.728125600e-06f, -2.741528030e-06f, -2.754924081e-06f, -2.768313732e-06f,
--2.781696959e-06f, -2.795073740e-06f, -2.808444054e-06f, -2.821807877e-06f, -2.835165188e-06f, -2.848515963e-06f, -2.861860181e-06f, -2.875197819e-06f, -2.888528856e-06f, -2.901853267e-06f,
--2.915171033e-06f, -2.928482129e-06f, -2.941786534e-06f, -2.955084226e-06f, -2.968375182e-06f, -2.981659380e-06f, -2.994936799e-06f, -3.008207415e-06f, -3.021471207e-06f, -3.034728152e-06f,
--3.047978229e-06f, -3.061221414e-06f, -3.074457687e-06f, -3.087687026e-06f, -3.100909407e-06f, -3.114124808e-06f, -3.127333209e-06f, -3.140534587e-06f, -3.153728919e-06f, -3.166916184e-06f,
--3.180096360e-06f, -3.193269425e-06f, -3.206435357e-06f, -3.219594134e-06f, -3.232745733e-06f, -3.245890134e-06f, -3.259027314e-06f, -3.272157251e-06f, -3.285279924e-06f, -3.298395310e-06f,
--3.311503388e-06f, -3.324604136e-06f, -3.337697532e-06f, -3.350783555e-06f, -3.363862182e-06f, -3.376933391e-06f, -3.389997162e-06f, -3.403053472e-06f, -3.416102300e-06f, -3.429143624e-06f,
--3.442177422e-06f, -3.455203672e-06f, -3.468222353e-06f, -3.481233444e-06f, -3.494236922e-06f, -3.507232767e-06f, -3.520220956e-06f, -3.533201467e-06f, -3.546174281e-06f, -3.559139373e-06f,
--3.572096725e-06f, -3.585046313e-06f, -3.597988116e-06f, -3.610922113e-06f, -3.623848282e-06f, -3.636766602e-06f, -3.649677052e-06f, -3.662579610e-06f, -3.675474255e-06f, -3.688360964e-06f,
--3.701239718e-06f, -3.714110494e-06f, -3.726973272e-06f, -3.739828029e-06f, -3.752674745e-06f, -3.765513399e-06f, -3.778343968e-06f, -3.791166433e-06f, -3.803980771e-06f, -3.816786962e-06f,
--3.829584983e-06f, -3.842374815e-06f, -3.855156436e-06f, -3.867929824e-06f, -3.880694959e-06f, -3.893451819e-06f, -3.906200384e-06f, -3.918940632e-06f, -3.931672543e-06f, -3.944396094e-06f,
--3.957111266e-06f, -3.969818037e-06f, -3.982516386e-06f, -3.995206293e-06f, -4.007887735e-06f, -4.020560693e-06f, -4.033225146e-06f, -4.045881071e-06f, -4.058528450e-06f, -4.071167260e-06f,
--4.083797481e-06f, -4.096419092e-06f, -4.109032072e-06f, -4.121636400e-06f, -4.134232056e-06f, -4.146819019e-06f, -4.159397268e-06f, -4.171966783e-06f, -4.184527542e-06f, -4.197079525e-06f,
--4.209622711e-06f, -4.222157080e-06f, -4.234682611e-06f, -4.247199283e-06f, -4.259707076e-06f, -4.272205969e-06f, -4.284695942e-06f, -4.297176974e-06f, -4.309649044e-06f, -4.322112132e-06f,
--4.334566217e-06f, -4.347011280e-06f, -4.359447299e-06f, -4.371874254e-06f, -4.384292125e-06f, -4.396700891e-06f, -4.409100532e-06f, -4.421491027e-06f, -4.433872357e-06f, -4.446244500e-06f,
--4.458607437e-06f, -4.470961147e-06f, -4.483305609e-06f, -4.495640805e-06f, -4.507966713e-06f, -4.520283313e-06f, -4.532590584e-06f, -4.544888508e-06f, -4.557177063e-06f, -4.569456230e-06f,
--4.581725988e-06f, -4.593986317e-06f, -4.606237198e-06f, -4.618478609e-06f, -4.630710531e-06f, -4.642932944e-06f, -4.655145829e-06f, -4.667349164e-06f, -4.679542930e-06f, -4.691727107e-06f,
--4.703901675e-06f, -4.716066614e-06f, -4.728221904e-06f, -4.740367526e-06f, -4.752503459e-06f, -4.764629684e-06f, -4.776746180e-06f, -4.788852929e-06f, -4.800949909e-06f, -4.813037103e-06f,
--4.825114488e-06f, -4.837182047e-06f, -4.849239759e-06f, -4.861287604e-06f, -4.873325564e-06f, -4.885353617e-06f, -4.897371745e-06f, -4.909379928e-06f, -4.921378147e-06f, -4.933366381e-06f,
--4.945344611e-06f, -4.957312819e-06f, -4.969270983e-06f, -4.981219085e-06f, -4.993157105e-06f, -5.005085024e-06f, -5.017002822e-06f, -5.028910481e-06f, -5.040807979e-06f, -5.052695299e-06f,
--5.064572421e-06f, -5.076439325e-06f, -5.088295992e-06f, -5.100142403e-06f, -5.111978539e-06f, -5.123804380e-06f, -5.135619907e-06f, -5.147425101e-06f, -5.159219942e-06f, -5.171004412e-06f,
--5.182778492e-06f, -5.194542161e-06f, -5.206295402e-06f, -5.218038194e-06f, -5.229770520e-06f, -5.241492359e-06f, -5.253203694e-06f, -5.264904504e-06f, -5.276594771e-06f, -5.288274475e-06f,
--5.299943599e-06f, -5.311602122e-06f, -5.323250027e-06f, -5.334887294e-06f, -5.346513904e-06f, -5.358129839e-06f, -5.369735079e-06f, -5.381329607e-06f, -5.392913402e-06f, -5.404486446e-06f,
--5.416048721e-06f, -5.427600208e-06f, -5.439140888e-06f, -5.450670743e-06f, -5.462189753e-06f, -5.473697901e-06f, -5.485195167e-06f, -5.496681533e-06f, -5.508156980e-06f, -5.519621491e-06f,
--5.531075045e-06f, -5.542517626e-06f, -5.553949213e-06f, -5.565369790e-06f, -5.576779337e-06f, -5.588177836e-06f, -5.599565268e-06f, -5.610941616e-06f, -5.622306860e-06f, -5.633660983e-06f,
--5.645003966e-06f, -5.656335791e-06f, -5.667656440e-06f, -5.678965894e-06f, -5.690264135e-06f, -5.701551145e-06f, -5.712826905e-06f, -5.724091399e-06f, -5.735344606e-06f, -5.746586510e-06f,
--5.757817092e-06f, -5.769036335e-06f, -5.780244219e-06f, -5.791440727e-06f, -5.802625842e-06f, -5.813799544e-06f, -5.824961817e-06f, -5.836112641e-06f, -5.847252000e-06f, -5.858379875e-06f,
--5.869496249e-06f, -5.880601103e-06f, -5.891694419e-06f, -5.902776181e-06f, -5.913846369e-06f, -5.924904968e-06f, -5.935951957e-06f, -5.946987321e-06f, -5.958011040e-06f, -5.969023098e-06f,
--5.980023477e-06f, -5.991012159e-06f, -6.001989127e-06f, -6.012954363e-06f, -6.023907849e-06f, -6.034849568e-06f, -6.045779502e-06f, -6.056697634e-06f, -6.067603947e-06f, -6.078498422e-06f,
--6.089381043e-06f, -6.100251792e-06f, -6.111110651e-06f, -6.121957604e-06f, -6.132792633e-06f, -6.143615721e-06f, -6.154426850e-06f, -6.165226003e-06f, -6.176013163e-06f, -6.186788312e-06f,
--6.197551434e-06f, -6.208302511e-06f, -6.219041526e-06f, -6.229768463e-06f, -6.240483302e-06f, -6.251186029e-06f, -6.261876625e-06f, -6.272555074e-06f, -6.283221359e-06f, -6.293875462e-06f,
--6.304517367e-06f, -6.315147056e-06f, -6.325764513e-06f, -6.336369721e-06f, -6.346962663e-06f, -6.357543322e-06f, -6.368111682e-06f, -6.378667724e-06f, -6.389211434e-06f, -6.399742793e-06f,
--6.410261786e-06f, -6.420768395e-06f, -6.431262603e-06f, -6.441744395e-06f, -6.452213754e-06f, -6.462670662e-06f, -6.473115103e-06f, -6.483547061e-06f, -6.493966519e-06f, -6.504373461e-06f,
--6.514767869e-06f, -6.525149728e-06f, -6.535519022e-06f, -6.545875733e-06f, -6.556219845e-06f, -6.566551342e-06f, -6.576870208e-06f, -6.587176426e-06f, -6.597469980e-06f, -6.607750853e-06f,
--6.618019030e-06f, -6.628274494e-06f, -6.638517229e-06f, -6.648747218e-06f, -6.658964446e-06f, -6.669168896e-06f, -6.679360553e-06f, -6.689539399e-06f, -6.699705420e-06f, -6.709858598e-06f,
--6.719998919e-06f, -6.730126366e-06f, -6.740240922e-06f, -6.750342573e-06f, -6.760431302e-06f, -6.770507093e-06f, -6.780569930e-06f, -6.790619798e-06f, -6.800656681e-06f, -6.810680562e-06f,
--6.820691427e-06f, -6.830689259e-06f, -6.840674042e-06f, -6.850645761e-06f, -6.860604401e-06f, -6.870549945e-06f, -6.880482378e-06f, -6.890401684e-06f, -6.900307848e-06f, -6.910200854e-06f,
--6.920080687e-06f, -6.929947330e-06f, -6.939800770e-06f, -6.949640989e-06f, -6.959467974e-06f, -6.969281707e-06f, -6.979082175e-06f, -6.988869361e-06f, -6.998643250e-06f, -7.008403827e-06f,
--7.018151077e-06f, -7.027884985e-06f, -7.037605534e-06f, -7.047312710e-06f, -7.057006498e-06f, -7.066686883e-06f, -7.076353849e-06f, -7.086007381e-06f, -7.095647465e-06f, -7.105274084e-06f,
--7.114887225e-06f, -7.124486872e-06f, -7.134073010e-06f, -7.143645624e-06f, -7.153204700e-06f, -7.162750222e-06f, -7.172282175e-06f, -7.181800545e-06f, -7.191305317e-06f, -7.200796475e-06f,
--7.210274006e-06f, -7.219737894e-06f, -7.229188125e-06f, -7.238624684e-06f, -7.248047556e-06f, -7.257456727e-06f, -7.266852182e-06f, -7.276233906e-06f, -7.285601885e-06f, -7.294956104e-06f,
--7.304296549e-06f, -7.313623205e-06f, -7.322936058e-06f, -7.332235093e-06f, -7.341520296e-06f, -7.350791653e-06f, -7.360049149e-06f, -7.369292769e-06f, -7.378522500e-06f, -7.387738327e-06f,
--7.396940236e-06f, -7.406128212e-06f, -7.415302242e-06f, -7.424462312e-06f, -7.433608406e-06f, -7.442740511e-06f, -7.451858613e-06f, -7.460962698e-06f, -7.470052751e-06f, -7.479128759e-06f,
--7.488190707e-06f, -7.497238582e-06f, -7.506272370e-06f, -7.515292057e-06f, -7.524297628e-06f, -7.533289070e-06f, -7.542266369e-06f, -7.551229512e-06f, -7.560178484e-06f, -7.569113272e-06f,
--7.578033861e-06f, -7.586940239e-06f, -7.595832391e-06f, -7.604710305e-06f, -7.613573965e-06f, -7.622423359e-06f, -7.631258473e-06f, -7.640079293e-06f, -7.648885807e-06f, -7.657677999e-06f,
--7.666455858e-06f, -7.675219369e-06f, -7.683968519e-06f, -7.692703294e-06f, -7.701423682e-06f, -7.710129669e-06f, -7.718821241e-06f, -7.727498385e-06f, -7.736161089e-06f, -7.744809338e-06f,
--7.753443119e-06f, -7.762062420e-06f, -7.770667227e-06f, -7.779257527e-06f, -7.787833307e-06f, -7.796394554e-06f, -7.804941255e-06f, -7.813473396e-06f, -7.821990965e-06f, -7.830493949e-06f,
--7.838982334e-06f, -7.847456108e-06f, -7.855915259e-06f, -7.864359772e-06f, -7.872789636e-06f, -7.881204837e-06f, -7.889605363e-06f, -7.897991200e-06f, -7.906362337e-06f, -7.914718760e-06f,
--7.923060457e-06f, -7.931387415e-06f, -7.939699622e-06f, -7.947997064e-06f, -7.956279730e-06f, -7.964547606e-06f, -7.972800681e-06f, -7.981038941e-06f, -7.989262375e-06f, -7.997470969e-06f,
--8.005664712e-06f, -8.013843591e-06f, -8.022007594e-06f, -8.030156708e-06f, -8.038290921e-06f, -8.046410221e-06f, -8.054514596e-06f, -8.062604032e-06f, -8.070678519e-06f, -8.078738044e-06f,
--8.086782595e-06f, -8.094812160e-06f, -8.102826726e-06f, -8.110826281e-06f, -8.118810815e-06f, -8.126780314e-06f, -8.134734766e-06f, -8.142674160e-06f, -8.150598484e-06f, -8.158507726e-06f,
--8.166401873e-06f, -8.174280915e-06f, -8.182144839e-06f, -8.189993634e-06f, -8.197827288e-06f, -8.205645788e-06f, -8.213449124e-06f, -8.221237284e-06f, -8.229010256e-06f, -8.236768028e-06f,
--8.244510589e-06f, -8.252237928e-06f, -8.259950032e-06f, -8.267646891e-06f, -8.275328493e-06f, -8.282994826e-06f, -8.290645878e-06f, -8.298281640e-06f, -8.305902099e-06f, -8.313507243e-06f,
--8.321097062e-06f, -8.328671545e-06f, -8.336230680e-06f, -8.343774455e-06f, -8.351302860e-06f, -8.358815883e-06f, -8.366313514e-06f, -8.373795741e-06f, -8.381262554e-06f, -8.388713940e-06f,
--8.396149889e-06f, -8.403570391e-06f, -8.410975433e-06f, -8.418365006e-06f, -8.425739098e-06f, -8.433097698e-06f, -8.440440796e-06f, -8.447768381e-06f, -8.455080441e-06f, -8.462376967e-06f,
--8.469657947e-06f, -8.476923370e-06f, -8.484173227e-06f, -8.491407505e-06f, -8.498626196e-06f, -8.505829287e-06f, -8.513016769e-06f, -8.520188631e-06f, -8.527344863e-06f, -8.534485453e-06f,
--8.541610392e-06f, -8.548719669e-06f, -8.555813273e-06f, -8.562891195e-06f, -8.569953424e-06f, -8.576999949e-06f, -8.584030761e-06f, -8.591045849e-06f, -8.598045202e-06f, -8.605028812e-06f,
--8.611996666e-06f, -8.618948756e-06f, -8.625885071e-06f, -8.632805601e-06f, -8.639710337e-06f, -8.646599267e-06f, -8.653472382e-06f, -8.660329673e-06f, -8.667171128e-06f, -8.673996738e-06f,
--8.680806494e-06f, -8.687600385e-06f, -8.694378402e-06f, -8.701140535e-06f, -8.707886773e-06f, -8.714617108e-06f, -8.721331529e-06f, -8.728030027e-06f, -8.734712593e-06f, -8.741379215e-06f,
--8.748029886e-06f, -8.754664596e-06f, -8.761283334e-06f, -8.767886091e-06f, -8.774472858e-06f, -8.781043626e-06f, -8.787598384e-06f, -8.794137124e-06f, -8.800659837e-06f, -8.807166512e-06f,
--8.813657140e-06f, -8.820131713e-06f, -8.826590221e-06f, -8.833032655e-06f, -8.839459005e-06f, -8.845869263e-06f, -8.852263419e-06f, -8.858641464e-06f, -8.865003389e-06f, -8.871349185e-06f,
--8.877678843e-06f, -8.883992354e-06f, -8.890289709e-06f, -8.896570899e-06f, -8.902835916e-06f, -8.909084749e-06f, -8.915317391e-06f, -8.921533833e-06f, -8.927734066e-06f, -8.933918081e-06f,
--8.940085869e-06f, -8.946237422e-06f, -8.952372730e-06f, -8.958491787e-06f, -8.964594582e-06f, -8.970681107e-06f, -8.976751353e-06f, -8.982805313e-06f, -8.988842977e-06f, -8.994864338e-06f,
--9.000869386e-06f, -9.006858113e-06f, -9.012830511e-06f, -9.018786572e-06f, -9.024726287e-06f, -9.030649647e-06f, -9.036556646e-06f, -9.042447274e-06f, -9.048321523e-06f, -9.054179385e-06f,
--9.060020852e-06f, -9.065845916e-06f, -9.071654568e-06f, -9.077446801e-06f, -9.083222607e-06f, -9.088981977e-06f, -9.094724904e-06f, -9.100451379e-06f, -9.106161396e-06f, -9.111854945e-06f,
--9.117532020e-06f, -9.123192611e-06f, -9.128836712e-06f, -9.134464315e-06f, -9.140075412e-06f, -9.145669994e-06f, -9.151248056e-06f, -9.156809588e-06f, -9.162354584e-06f, -9.167883035e-06f,
--9.173394935e-06f, -9.178890275e-06f, -9.184369049e-06f, -9.189831248e-06f, -9.195276865e-06f, -9.200705894e-06f, -9.206118325e-06f, -9.211514153e-06f, -9.216893370e-06f, -9.222255968e-06f,
--9.227601940e-06f, -9.232931280e-06f, -9.238243979e-06f, -9.243540031e-06f, -9.248819428e-06f, -9.254082164e-06f, -9.259328232e-06f, -9.264557623e-06f, -9.269770332e-06f, -9.274966351e-06f,
--9.280145673e-06f, -9.285308292e-06f, -9.290454200e-06f, -9.295583391e-06f, -9.300695857e-06f, -9.305791593e-06f, -9.310870591e-06f, -9.315932844e-06f, -9.320978346e-06f, -9.326007090e-06f,
--9.331019069e-06f, -9.336014277e-06f, -9.340992707e-06f, -9.345954352e-06f, -9.350899207e-06f, -9.355827264e-06f, -9.360738517e-06f, -9.365632959e-06f, -9.370510585e-06f, -9.375371388e-06f,
--9.380215360e-06f, -9.385042497e-06f, -9.389852792e-06f, -9.394646238e-06f, -9.399422829e-06f, -9.404182559e-06f, -9.408925422e-06f, -9.413651412e-06f, -9.418360522e-06f, -9.423052747e-06f,
--9.427728080e-06f, -9.432386516e-06f, -9.437028047e-06f, -9.441652670e-06f, -9.446260376e-06f, -9.450851161e-06f, -9.455425019e-06f, -9.459981944e-06f, -9.464521929e-06f, -9.469044970e-06f,
--9.473551060e-06f, -9.478040194e-06f, -9.482512365e-06f, -9.486967569e-06f, -9.491405800e-06f, -9.495827052e-06f, -9.500231319e-06f, -9.504618596e-06f, -9.508988877e-06f, -9.513342158e-06f,
--9.517678431e-06f, -9.521997693e-06f, -9.526299938e-06f, -9.530585159e-06f, -9.534853353e-06f, -9.539104513e-06f, -9.543338634e-06f, -9.547555712e-06f, -9.551755740e-06f, -9.555938714e-06f,
--9.560104628e-06f, -9.564253478e-06f, -9.568385258e-06f, -9.572499963e-06f, -9.576597588e-06f, -9.580678129e-06f, -9.584741579e-06f, -9.588787935e-06f, -9.592817191e-06f, -9.596829343e-06f,
--9.600824385e-06f, -9.604802312e-06f, -9.608763121e-06f, -9.612706806e-06f, -9.616633362e-06f, -9.620542785e-06f, -9.624435070e-06f, -9.628310212e-06f, -9.632168207e-06f, -9.636009051e-06f,
--9.639832738e-06f, -9.643639264e-06f, -9.647428624e-06f, -9.651200815e-06f, -9.654955832e-06f, -9.658693670e-06f, -9.662414324e-06f, -9.666117792e-06f, -9.669804067e-06f, -9.673473147e-06f,
--9.677125027e-06f, -9.680759702e-06f, -9.684377168e-06f, -9.687977421e-06f, -9.691560458e-06f, -9.695126273e-06f, -9.698674864e-06f, -9.702206225e-06f, -9.705720353e-06f, -9.709217244e-06f,
--9.712696894e-06f, -9.716159299e-06f, -9.719604455e-06f, -9.723032358e-06f, -9.726443004e-06f, -9.729836391e-06f, -9.733212513e-06f, -9.736571367e-06f, -9.739912949e-06f, -9.743237257e-06f,
--9.746544285e-06f, -9.749834031e-06f, -9.753106491e-06f, -9.756361661e-06f, -9.759599538e-06f, -9.762820119e-06f, -9.766023399e-06f, -9.769209376e-06f, -9.772378046e-06f, -9.775529405e-06f,
--9.778663451e-06f, -9.781780180e-06f, -9.784879588e-06f, -9.787961673e-06f, -9.791026431e-06f, -9.794073860e-06f, -9.797103955e-06f, -9.800116714e-06f, -9.803112134e-06f, -9.806090212e-06f,
--9.809050944e-06f, -9.811994328e-06f, -9.814920360e-06f, -9.817829038e-06f, -9.820720359e-06f, -9.823594319e-06f, -9.826450917e-06f, -9.829290149e-06f, -9.832112013e-06f, -9.834916505e-06f,
--9.837703623e-06f, -9.840473364e-06f, -9.843225725e-06f, -9.845960705e-06f, -9.848678300e-06f, -9.851378508e-06f, -9.854061326e-06f, -9.856726751e-06f, -9.859374782e-06f, -9.862005416e-06f,
--9.864618649e-06f, -9.867214481e-06f, -9.869792908e-06f, -9.872353929e-06f, -9.874897540e-06f, -9.877423740e-06f, -9.879932526e-06f, -9.882423896e-06f, -9.884897849e-06f, -9.887354381e-06f,
--9.889793491e-06f, -9.892215177e-06f, -9.894619436e-06f, -9.897006266e-06f, -9.899375667e-06f, -9.901727634e-06f, -9.904062168e-06f, -9.906379265e-06f, -9.908678924e-06f, -9.910961143e-06f,
--9.913225920e-06f, -9.915473253e-06f, -9.917703141e-06f, -9.919915582e-06f, -9.922110574e-06f, -9.924288116e-06f, -9.926448205e-06f, -9.928590841e-06f, -9.930716022e-06f, -9.932823746e-06f,
--9.934914011e-06f, -9.936986817e-06f, -9.939042161e-06f, -9.941080043e-06f, -9.943100461e-06f, -9.945103413e-06f, -9.947088898e-06f, -9.949056915e-06f, -9.951007463e-06f, -9.952940541e-06f,
--9.954856147e-06f, -9.956754279e-06f, -9.958634938e-06f, -9.960498121e-06f, -9.962343828e-06f, -9.964172058e-06f, -9.965982809e-06f, -9.967776081e-06f, -9.969551873e-06f, -9.971310183e-06f,
--9.973051011e-06f, -9.974774356e-06f, -9.976480218e-06f, -9.978168594e-06f, -9.979839485e-06f, -9.981492890e-06f, -9.983128807e-06f, -9.984747237e-06f, -9.986348179e-06f, -9.987931632e-06f,
--9.989497595e-06f, -9.991046068e-06f, -9.992577051e-06f, -9.994090542e-06f, -9.995586542e-06f, -9.997065049e-06f, -9.998526064e-06f, -9.999969586e-06f, -1.000139562e-05f, -1.000280415e-05f,
--1.000419519e-05f, -1.000556874e-05f, -1.000692479e-05f, -1.000826335e-05f, -1.000958441e-05f, -1.001088798e-05f, -1.001217406e-05f, -1.001344264e-05f, -1.001469372e-05f, -1.001592731e-05f,
--1.001714340e-05f, -1.001834200e-05f, -1.001952310e-05f, -1.002068671e-05f, -1.002183282e-05f, -1.002296144e-05f, -1.002407256e-05f, -1.002516619e-05f, -1.002624233e-05f, -1.002730097e-05f,
--1.002834212e-05f, -1.002936578e-05f, -1.003037194e-05f, -1.003136061e-05f, -1.003233179e-05f, -1.003328547e-05f, -1.003422167e-05f, -1.003514038e-05f, -1.003604159e-05f, -1.003692532e-05f,
--1.003779156e-05f, -1.003864031e-05f, -1.003947157e-05f, -1.004028535e-05f, -1.004108164e-05f, -1.004186044e-05f, -1.004262176e-05f, -1.004336560e-05f, -1.004409196e-05f, -1.004480083e-05f,
--1.004549222e-05f, -1.004616613e-05f, -1.004682257e-05f, -1.004746152e-05f, -1.004808300e-05f, -1.004868700e-05f, -1.004927353e-05f, -1.004984258e-05f, -1.005039417e-05f, -1.005092828e-05f,
--1.005144492e-05f, -1.005194409e-05f, -1.005242579e-05f, -1.005289003e-05f, -1.005333680e-05f, -1.005376611e-05f, -1.005417796e-05f, -1.005457235e-05f, -1.005494928e-05f, -1.005530875e-05f,
--1.005565076e-05f, -1.005597532e-05f, -1.005628243e-05f, -1.005657208e-05f, -1.005684429e-05f, -1.005709904e-05f, -1.005733635e-05f, -1.005755622e-05f, -1.005775864e-05f, -1.005794362e-05f,
--1.005811117e-05f, -1.005826127e-05f, -1.005839394e-05f, -1.005850917e-05f, -1.005860698e-05f, -1.005868735e-05f, -1.005875030e-05f, -1.005879582e-05f, -1.005882391e-05f, -1.005883459e-05f,
--1.005882784e-05f, -1.005880368e-05f, -1.005876210e-05f, -1.005870311e-05f, -1.005862671e-05f, -1.005853290e-05f, -1.005842169e-05f, -1.005829307e-05f, -1.005814705e-05f, -1.005798363e-05f,
--1.005780281e-05f, -1.005760460e-05f, -1.005738900e-05f, -1.005715600e-05f, -1.005690563e-05f, -1.005663786e-05f, -1.005635272e-05f, -1.005605020e-05f, -1.005573030e-05f, -1.005539302e-05f,
--1.005503838e-05f, -1.005466637e-05f, -1.005427699e-05f, -1.005387025e-05f, -1.005344615e-05f, -1.005300469e-05f, -1.005254588e-05f, -1.005206972e-05f, -1.005157621e-05f, -1.005106536e-05f,
--1.005053716e-05f, -1.004999162e-05f, -1.004942875e-05f, -1.004884855e-05f, -1.004825101e-05f, -1.004763615e-05f, -1.004700397e-05f, -1.004635446e-05f, -1.004568764e-05f, -1.004500351e-05f,
--1.004430206e-05f, -1.004358331e-05f, -1.004284726e-05f, -1.004209390e-05f, -1.004132325e-05f, -1.004053530e-05f, -1.003973007e-05f, -1.003890755e-05f, -1.003806774e-05f, -1.003721066e-05f,
--1.003633630e-05f, -1.003544467e-05f, -1.003453577e-05f, -1.003360960e-05f, -1.003266618e-05f, -1.003170550e-05f, -1.003072756e-05f, -1.002973238e-05f, -1.002871995e-05f, -1.002769027e-05f,
--1.002664336e-05f, -1.002557922e-05f, -1.002449785e-05f, -1.002339925e-05f, -1.002228342e-05f, -1.002115038e-05f, -1.002000013e-05f, -1.001883267e-05f, -1.001764800e-05f, -1.001644613e-05f,
--1.001522706e-05f, -1.001399080e-05f, -1.001273735e-05f, -1.001146671e-05f, -1.001017890e-05f, -1.000887391e-05f, -1.000755175e-05f, -1.000621242e-05f, -1.000485593e-05f, -1.000348228e-05f,
--1.000209148e-05f, -1.000068352e-05f, -9.999258427e-06f, -9.997816189e-06f, -9.996356817e-06f, -9.994880313e-06f, -9.993386684e-06f, -9.991875933e-06f, -9.990348065e-06f, -9.988803085e-06f,
--9.987240998e-06f, -9.985661809e-06f, -9.984065521e-06f, -9.982452142e-06f, -9.980821674e-06f, -9.979174123e-06f, -9.977509495e-06f, -9.975827794e-06f, -9.974129024e-06f, -9.972413192e-06f,
--9.970680302e-06f, -9.968930359e-06f, -9.967163368e-06f, -9.965379335e-06f, -9.963578265e-06f, -9.961760162e-06f, -9.959925033e-06f, -9.958072882e-06f, -9.956203715e-06f, -9.954317537e-06f,
--9.952414353e-06f, -9.950494170e-06f, -9.948556991e-06f, -9.946602823e-06f, -9.944631671e-06f, -9.942643541e-06f, -9.940638438e-06f, -9.938616368e-06f, -9.936577336e-06f, -9.934521348e-06f,
--9.932448410e-06f, -9.930358527e-06f, -9.928251704e-06f, -9.926127949e-06f, -9.923987266e-06f, -9.921829661e-06f, -9.919655140e-06f, -9.917463709e-06f, -9.915255374e-06f, -9.913030141e-06f,
--9.910788015e-06f, -9.908529002e-06f, -9.906253110e-06f, -9.903960342e-06f, -9.901650707e-06f, -9.899324209e-06f, -9.896980855e-06f, -9.894620651e-06f, -9.892243602e-06f, -9.889849717e-06f,
--9.887438999e-06f, -9.885011457e-06f, -9.882567095e-06f, -9.880105921e-06f, -9.877627940e-06f, -9.875133159e-06f, -9.872621585e-06f, -9.870093223e-06f, -9.867548081e-06f, -9.864986165e-06f,
--9.862407480e-06f, -9.859812035e-06f, -9.857199834e-06f, -9.854570886e-06f, -9.851925196e-06f, -9.849262771e-06f, -9.846583618e-06f, -9.843887743e-06f, -9.841175154e-06f, -9.838445857e-06f,
--9.835699858e-06f, -9.832937165e-06f, -9.830157784e-06f, -9.827361723e-06f, -9.824548988e-06f, -9.821719586e-06f, -9.818873524e-06f, -9.816010809e-06f, -9.813131448e-06f, -9.810235448e-06f,
--9.807322816e-06f, -9.804393559e-06f, -9.801447685e-06f, -9.798485200e-06f, -9.795506112e-06f, -9.792510427e-06f, -9.789498154e-06f, -9.786469299e-06f, -9.783423870e-06f, -9.780361874e-06f,
--9.777283318e-06f, -9.774188209e-06f, -9.771076556e-06f, -9.767948365e-06f, -9.764803644e-06f, -9.761642400e-06f, -9.758464642e-06f, -9.755270376e-06f, -9.752059609e-06f, -9.748832351e-06f,
--9.745588607e-06f, -9.742328387e-06f, -9.739051697e-06f, -9.735758545e-06f, -9.732448939e-06f, -9.729122887e-06f, -9.725780397e-06f, -9.722421476e-06f, -9.719046132e-06f, -9.715654373e-06f,
--9.712246207e-06f, -9.708821642e-06f, -9.705380685e-06f, -9.701923345e-06f, -9.698449631e-06f, -9.694959549e-06f, -9.691453107e-06f, -9.687930315e-06f, -9.684391180e-06f, -9.680835710e-06f,
--9.677263914e-06f, -9.673675799e-06f, -9.670071373e-06f, -9.666450646e-06f, -9.662813625e-06f, -9.659160319e-06f, -9.655490736e-06f, -9.651804884e-06f, -9.648102772e-06f, -9.644384408e-06f,
--9.640649800e-06f, -9.636898958e-06f, -9.633131889e-06f, -9.629348602e-06f, -9.625549106e-06f, -9.621733409e-06f, -9.617901519e-06f, -9.614053446e-06f, -9.610189199e-06f, -9.606308784e-06f,
--9.602412213e-06f, -9.598499492e-06f, -9.594570632e-06f, -9.590625640e-06f, -9.586664526e-06f, -9.582687298e-06f, -9.578693965e-06f, -9.574684537e-06f, -9.570659022e-06f, -9.566617429e-06f,
--9.562559767e-06f, -9.558486045e-06f, -9.554396272e-06f, -9.550290457e-06f, -9.546168610e-06f, -9.542030738e-06f, -9.537876853e-06f, -9.533706962e-06f, -9.529521074e-06f, -9.525319200e-06f,
--9.521101348e-06f, -9.516867528e-06f, -9.512617749e-06f, -9.508352020e-06f, -9.504070350e-06f, -9.499772750e-06f, -9.495459227e-06f, -9.491129793e-06f, -9.486784455e-06f, -9.482423225e-06f,
--9.478046111e-06f, -9.473653122e-06f, -9.469244269e-06f, -9.464819561e-06f, -9.460379007e-06f, -9.455922617e-06f, -9.451450402e-06f, -9.446962370e-06f, -9.442458531e-06f, -9.437938895e-06f,
--9.433403472e-06f, -9.428852271e-06f, -9.424285303e-06f, -9.419702578e-06f, -9.415104104e-06f, -9.410489893e-06f, -9.405859953e-06f, -9.401214295e-06f, -9.396552930e-06f, -9.391875866e-06f,
--9.387183114e-06f, -9.382474685e-06f, -9.377750587e-06f, -9.373010832e-06f, -9.368255429e-06f, -9.363484388e-06f, -9.358697720e-06f, -9.353895436e-06f, -9.349077544e-06f, -9.344244056e-06f,
--9.339394981e-06f, -9.334530331e-06f, -9.329650115e-06f, -9.324754344e-06f, -9.319843028e-06f, -9.314916177e-06f, -9.309973803e-06f, -9.305015915e-06f, -9.300042524e-06f, -9.295053641e-06f,
--9.290049276e-06f, -9.285029439e-06f, -9.279994142e-06f, -9.274943395e-06f, -9.269877208e-06f, -9.264795592e-06f, -9.259698559e-06f, -9.254586117e-06f, -9.249458280e-06f, -9.244315056e-06f,
--9.239156458e-06f, -9.233982495e-06f, -9.228793180e-06f, -9.223588521e-06f, -9.218368531e-06f, -9.213133221e-06f, -9.207882601e-06f, -9.202616682e-06f, -9.197335476e-06f, -9.192038992e-06f,
--9.186727244e-06f, -9.181400241e-06f, -9.176057994e-06f, -9.170700515e-06f, -9.165327816e-06f, -9.159939906e-06f, -9.154536797e-06f, -9.149118501e-06f, -9.143685029e-06f, -9.138236392e-06f,
--9.132772602e-06f, -9.127293669e-06f, -9.121799605e-06f, -9.116290421e-06f, -9.110766130e-06f, -9.105226741e-06f, -9.099672268e-06f, -9.094102720e-06f, -9.088518111e-06f, -9.082918450e-06f,
--9.077303751e-06f, -9.071674023e-06f, -9.066029280e-06f, -9.060369533e-06f, -9.054694792e-06f, -9.049005071e-06f, -9.043300380e-06f, -9.037580732e-06f, -9.031846138e-06f, -9.026096610e-06f,
--9.020332159e-06f, -9.014552798e-06f, -9.008758539e-06f, -9.002949392e-06f, -8.997125371e-06f, -8.991286487e-06f, -8.985432752e-06f, -8.979564178e-06f, -8.973680777e-06f, -8.967782561e-06f,
--8.961869542e-06f, -8.955941732e-06f, -8.949999143e-06f, -8.944041788e-06f, -8.938069678e-06f, -8.932082826e-06f, -8.926081243e-06f, -8.920064943e-06f, -8.914033937e-06f, -8.907988237e-06f,
--8.901927856e-06f, -8.895852807e-06f, -8.889763100e-06f, -8.883658750e-06f, -8.877539768e-06f, -8.871406166e-06f, -8.865257958e-06f, -8.859095154e-06f, -8.852917769e-06f, -8.846725815e-06f,
--8.840519303e-06f, -8.834298247e-06f, -8.828062658e-06f, -8.821812551e-06f, -8.815547937e-06f, -8.809268829e-06f, -8.802975239e-06f, -8.796667181e-06f, -8.790344666e-06f, -8.784007709e-06f,
--8.777656320e-06f, -8.771290515e-06f, -8.764910304e-06f, -8.758515701e-06f, -8.752106719e-06f, -8.745683370e-06f, -8.739245669e-06f, -8.732793626e-06f, -8.726327256e-06f, -8.719846571e-06f,
--8.713351585e-06f, -8.706842310e-06f, -8.700318760e-06f, -8.693780947e-06f, -8.687228884e-06f, -8.680662585e-06f, -8.674082063e-06f, -8.667487331e-06f, -8.660878402e-06f, -8.654255290e-06f,
--8.647618007e-06f, -8.640966566e-06f, -8.634300982e-06f, -8.627621267e-06f, -8.620927435e-06f, -8.614219499e-06f, -8.607497472e-06f, -8.600761368e-06f, -8.594011200e-06f, -8.587246982e-06f,
--8.580468727e-06f, -8.573676448e-06f, -8.566870159e-06f, -8.560049874e-06f, -8.553215606e-06f, -8.546367368e-06f, -8.539505175e-06f, -8.532629040e-06f, -8.525738976e-06f, -8.518834997e-06f,
--8.511917117e-06f, -8.504985349e-06f, -8.498039708e-06f, -8.491080206e-06f, -8.484106858e-06f, -8.477119678e-06f, -8.470118679e-06f, -8.463103876e-06f, -8.456075281e-06f, -8.449032909e-06f,
--8.441976774e-06f, -8.434906889e-06f, -8.427823270e-06f, -8.420725928e-06f, -8.413614880e-06f, -8.406490138e-06f, -8.399351717e-06f, -8.392199630e-06f, -8.385033892e-06f, -8.377854517e-06f,
--8.370661519e-06f, -8.363454912e-06f, -8.356234711e-06f, -8.349000929e-06f, -8.341753580e-06f, -8.334492680e-06f, -8.327218242e-06f, -8.319930280e-06f, -8.312628809e-06f, -8.305313843e-06f,
--8.297985396e-06f, -8.290643483e-06f, -8.283288118e-06f, -8.275919316e-06f, -8.268537090e-06f, -8.261141456e-06f, -8.253732428e-06f, -8.246310021e-06f, -8.238874248e-06f, -8.231425124e-06f,
--8.223962665e-06f, -8.216486884e-06f, -8.208997796e-06f, -8.201495416e-06f, -8.193979758e-06f, -8.186450837e-06f, -8.178908668e-06f, -8.171353265e-06f, -8.163784644e-06f, -8.156202818e-06f,
--8.148607803e-06f, -8.140999613e-06f, -8.133378264e-06f, -8.125743769e-06f, -8.118096145e-06f, -8.110435405e-06f, -8.102761565e-06f, -8.095074640e-06f, -8.087374644e-06f, -8.079661592e-06f,
--8.071935500e-06f, -8.064196383e-06f, -8.056444254e-06f, -8.048679131e-06f, -8.040901026e-06f, -8.033109957e-06f, -8.025305937e-06f, -8.017488982e-06f, -8.009659107e-06f, -8.001816327e-06f,
--7.993960657e-06f, -7.986092113e-06f, -7.978210709e-06f, -7.970316462e-06f, -7.962409385e-06f, -7.954489496e-06f, -7.946556808e-06f, -7.938611337e-06f, -7.930653098e-06f, -7.922682108e-06f,
--7.914698381e-06f, -7.906701932e-06f, -7.898692777e-06f, -7.890670932e-06f, -7.882636412e-06f, -7.874589232e-06f, -7.866529408e-06f, -7.858456956e-06f, -7.850371891e-06f, -7.842274228e-06f,
--7.834163983e-06f, -7.826041172e-06f, -7.817905811e-06f, -7.809757915e-06f, -7.801597499e-06f, -7.793424579e-06f, -7.785239172e-06f, -7.777041293e-06f, -7.768830957e-06f, -7.760608180e-06f,
--7.752372979e-06f, -7.744125368e-06f, -7.735865364e-06f, -7.727592983e-06f, -7.719308240e-06f, -7.711011151e-06f, -7.702701732e-06f, -7.694380000e-06f, -7.686045970e-06f, -7.677699657e-06f,
--7.669341079e-06f, -7.660970250e-06f, -7.652587188e-06f, -7.644191907e-06f, -7.635784425e-06f, -7.627364757e-06f, -7.618932919e-06f, -7.610488927e-06f, -7.602032798e-06f, -7.593564547e-06f,
--7.585084192e-06f, -7.576591747e-06f, -7.568087229e-06f, -7.559570655e-06f, -7.551042041e-06f, -7.542501402e-06f, -7.533948756e-06f, -7.525384118e-06f, -7.516807505e-06f, -7.508218933e-06f,
--7.499618418e-06f, -7.491005978e-06f, -7.482381627e-06f, -7.473745384e-06f, -7.465097263e-06f, -7.456437282e-06f, -7.447765458e-06f, -7.439081805e-06f, -7.430386342e-06f, -7.421679084e-06f,
--7.412960049e-06f, -7.404229252e-06f, -7.395486710e-06f, -7.386732440e-06f, -7.377966458e-06f, -7.369188782e-06f, -7.360399427e-06f, -7.351598411e-06f, -7.342785750e-06f, -7.333961460e-06f,
--7.325125559e-06f, -7.316278064e-06f, -7.307418990e-06f, -7.298548355e-06f, -7.289666176e-06f, -7.280772469e-06f, -7.271867252e-06f, -7.262950540e-06f, -7.254022352e-06f, -7.245082703e-06f,
--7.236131611e-06f, -7.227169093e-06f, -7.218195166e-06f, -7.209209846e-06f, -7.200213150e-06f, -7.191205096e-06f, -7.182185701e-06f, -7.173154981e-06f, -7.164112954e-06f, -7.155059636e-06f,
--7.145995045e-06f, -7.136919198e-06f, -7.127832112e-06f, -7.118733804e-06f, -7.109624292e-06f, -7.100503592e-06f, -7.091371721e-06f, -7.082228697e-06f, -7.073074537e-06f, -7.063909259e-06f,
--7.054732879e-06f, -7.045545415e-06f, -7.036346884e-06f, -7.027137303e-06f, -7.017916690e-06f, -7.008685062e-06f, -6.999442436e-06f, -6.990188830e-06f, -6.980924261e-06f, -6.971648747e-06f,
--6.962362305e-06f, -6.953064952e-06f, -6.943756706e-06f, -6.934437584e-06f, -6.925107604e-06f, -6.915766784e-06f, -6.906415140e-06f, -6.897052691e-06f, -6.887679454e-06f, -6.878295446e-06f,
--6.868900685e-06f, -6.859495189e-06f, -6.850078976e-06f, -6.840652062e-06f, -6.831214466e-06f, -6.821766205e-06f, -6.812307298e-06f, -6.802837761e-06f, -6.793357612e-06f, -6.783866870e-06f,
--6.774365551e-06f, -6.764853675e-06f, -6.755331257e-06f, -6.745798317e-06f, -6.736254872e-06f, -6.726700940e-06f, -6.717136539e-06f, -6.707561686e-06f, -6.697976400e-06f, -6.688380698e-06f,
--6.678774598e-06f, -6.669158119e-06f, -6.659531278e-06f, -6.649894093e-06f, -6.640246582e-06f, -6.630588763e-06f, -6.620920655e-06f, -6.611242274e-06f, -6.601553640e-06f, -6.591854770e-06f,
--6.582145682e-06f, -6.572426395e-06f, -6.562696926e-06f, -6.552957294e-06f, -6.543207516e-06f, -6.533447611e-06f, -6.523677598e-06f, -6.513897493e-06f, -6.504107316e-06f, -6.494307085e-06f,
--6.484496817e-06f, -6.474676532e-06f, -6.464846246e-06f, -6.455005980e-06f, -6.445155750e-06f, -6.435295575e-06f, -6.425425474e-06f, -6.415545465e-06f, -6.405655566e-06f, -6.395755795e-06f,
--6.385846172e-06f, -6.375926713e-06f, -6.365997438e-06f, -6.356058366e-06f, -6.346109514e-06f, -6.336150900e-06f, -6.326182545e-06f, -6.316204465e-06f, -6.306216679e-06f, -6.296219207e-06f,
--6.286212066e-06f, -6.276195274e-06f, -6.266168852e-06f, -6.256132816e-06f, -6.246087186e-06f, -6.236031980e-06f, -6.225967217e-06f, -6.215892916e-06f, -6.205809095e-06f, -6.195715772e-06f,
--6.185612967e-06f, -6.175500697e-06f, -6.165378983e-06f, -6.155247842e-06f, -6.145107293e-06f, -6.134957356e-06f, -6.124798047e-06f, -6.114629388e-06f, -6.104451395e-06f, -6.094264089e-06f,
--6.084067487e-06f, -6.073861609e-06f, -6.063646473e-06f, -6.053422099e-06f, -6.043188504e-06f, -6.032945709e-06f, -6.022693732e-06f, -6.012432591e-06f, -6.002162306e-06f, -5.991882896e-06f,
--5.981594379e-06f, -5.971296775e-06f, -5.960990102e-06f, -5.950674380e-06f, -5.940349627e-06f, -5.930015863e-06f, -5.919673106e-06f, -5.909321376e-06f, -5.898960691e-06f, -5.888591071e-06f,
--5.878212535e-06f, -5.867825101e-06f, -5.857428789e-06f, -5.847023618e-06f, -5.836609608e-06f, -5.826186776e-06f, -5.815755143e-06f, -5.805314728e-06f, -5.794865549e-06f, -5.784407626e-06f,
--5.773940978e-06f, -5.763465625e-06f, -5.752981585e-06f, -5.742488878e-06f, -5.731987523e-06f, -5.721477539e-06f, -5.710958946e-06f, -5.700431763e-06f, -5.689896008e-06f, -5.679351703e-06f,
--5.668798865e-06f, -5.658237515e-06f, -5.647667670e-06f, -5.637089352e-06f, -5.626502579e-06f, -5.615907371e-06f, -5.605303747e-06f, -5.594691726e-06f, -5.584071328e-06f, -5.573442572e-06f,
--5.562805478e-06f, -5.552160066e-06f, -5.541506354e-06f, -5.530844362e-06f, -5.520174110e-06f, -5.509495617e-06f, -5.498808903e-06f, -5.488113987e-06f, -5.477410889e-06f, -5.466699629e-06f,
--5.455980225e-06f, -5.445252698e-06f, -5.434517066e-06f, -5.423773351e-06f, -5.413021571e-06f, -5.402261745e-06f, -5.391493895e-06f, -5.380718038e-06f, -5.369934196e-06f, -5.359142387e-06f,
--5.348342631e-06f, -5.337534948e-06f, -5.326719358e-06f, -5.315895880e-06f, -5.305064534e-06f, -5.294225340e-06f, -5.283378318e-06f, -5.272523487e-06f, -5.261660867e-06f, -5.250790478e-06f,
--5.239912340e-06f, -5.229026472e-06f, -5.218132895e-06f, -5.207231628e-06f, -5.196322690e-06f, -5.185406103e-06f, -5.174481885e-06f, -5.163550057e-06f, -5.152610639e-06f, -5.141663649e-06f,
--5.130709109e-06f, -5.119747038e-06f, -5.108777456e-06f, -5.097800384e-06f, -5.086815840e-06f, -5.075823845e-06f, -5.064824419e-06f, -5.053817582e-06f, -5.042803354e-06f, -5.031781755e-06f,
--5.020752804e-06f, -5.009716522e-06f, -4.998672930e-06f, -4.987622046e-06f, -4.976563892e-06f, -4.965498486e-06f, -4.954425849e-06f, -4.943346002e-06f, -4.932258964e-06f, -4.921164756e-06f,
--4.910063397e-06f, -4.898954908e-06f, -4.887839308e-06f, -4.876716618e-06f, -4.865586859e-06f, -4.854450049e-06f, -4.843306210e-06f, -4.832155362e-06f, -4.820997524e-06f, -4.809832718e-06f,
--4.798660962e-06f, -4.787482278e-06f, -4.776296686e-06f, -4.765104205e-06f, -4.753904856e-06f, -4.742698660e-06f, -4.731485636e-06f, -4.720265805e-06f, -4.709039188e-06f, -4.697805804e-06f,
--4.686565673e-06f, -4.675318817e-06f, -4.664065255e-06f, -4.652805008e-06f, -4.641538095e-06f, -4.630264539e-06f, -4.618984358e-06f, -4.607697573e-06f, -4.596404204e-06f, -4.585104273e-06f,
--4.573797798e-06f, -4.562484802e-06f, -4.551165303e-06f, -4.539839323e-06f, -4.528506882e-06f, -4.517168000e-06f, -4.505822698e-06f, -4.494470997e-06f, -4.483112916e-06f, -4.471748476e-06f,
--4.460377698e-06f, -4.449000602e-06f, -4.437617208e-06f, -4.426227538e-06f, -4.414831612e-06f, -4.403429449e-06f, -4.392021072e-06f, -4.380606499e-06f, -4.369185752e-06f, -4.357758852e-06f,
--4.346325819e-06f, -4.334886673e-06f, -4.323441435e-06f, -4.311990126e-06f, -4.300532766e-06f, -4.289069376e-06f, -4.277599976e-06f, -4.266124587e-06f, -4.254643230e-06f, -4.243155926e-06f,
--4.231662694e-06f, -4.220163556e-06f, -4.208658532e-06f, -4.197147643e-06f, -4.185630910e-06f, -4.174108353e-06f, -4.162579992e-06f, -4.151045850e-06f, -4.139505946e-06f, -4.127960301e-06f,
--4.116408935e-06f, -4.104851871e-06f, -4.093289127e-06f, -4.081720726e-06f, -4.070146687e-06f, -4.058567031e-06f, -4.046981780e-06f, -4.035390954e-06f, -4.023794574e-06f, -4.012192660e-06f,
--4.000585233e-06f, -3.988972315e-06f, -3.977353925e-06f, -3.965730086e-06f, -3.954100816e-06f, -3.942466139e-06f, -3.930826073e-06f, -3.919180640e-06f, -3.907529862e-06f, -3.895873758e-06f,
--3.884212350e-06f, -3.872545658e-06f, -3.860873703e-06f, -3.849196507e-06f, -3.837514090e-06f, -3.825826472e-06f, -3.814133676e-06f, -3.802435721e-06f, -3.790732629e-06f, -3.779024421e-06f,
--3.767311117e-06f, -3.755592739e-06f, -3.743869307e-06f, -3.732140842e-06f, -3.720407365e-06f, -3.708668898e-06f, -3.696925461e-06f, -3.685177075e-06f, -3.673423761e-06f, -3.661665540e-06f,
--3.649902433e-06f, -3.638134462e-06f, -3.626361646e-06f, -3.614584007e-06f, -3.602801567e-06f, -3.591014345e-06f, -3.579222364e-06f, -3.567425643e-06f, -3.555624205e-06f, -3.543818070e-06f,
--3.532007259e-06f, -3.520191793e-06f, -3.508371694e-06f, -3.496546982e-06f, -3.484717678e-06f, -3.472883804e-06f, -3.461045380e-06f, -3.449202428e-06f, -3.437354969e-06f, -3.425503023e-06f,
--3.413646612e-06f, -3.401785758e-06f, -3.389920480e-06f, -3.378050800e-06f, -3.366176740e-06f, -3.354298320e-06f, -3.342415562e-06f, -3.330528486e-06f, -3.318637115e-06f, -3.306741468e-06f,
--3.294841567e-06f, -3.282937433e-06f, -3.271029088e-06f, -3.259116552e-06f, -3.247199847e-06f, -3.235278994e-06f, -3.223354013e-06f, -3.211424927e-06f, -3.199491757e-06f, -3.187554523e-06f,
--3.175613246e-06f, -3.163667949e-06f, -3.151718651e-06f, -3.139765375e-06f, -3.127808142e-06f, -3.115846972e-06f, -3.103881887e-06f, -3.091912909e-06f, -3.079940058e-06f, -3.067963355e-06f,
--3.055982822e-06f, -3.043998481e-06f, -3.032010351e-06f, -3.020018456e-06f, -3.008022815e-06f, -2.996023450e-06f, -2.984020382e-06f, -2.972013633e-06f, -2.960003224e-06f, -2.947989176e-06f,
--2.935971510e-06f, -2.923950248e-06f, -2.911925411e-06f, -2.899897020e-06f, -2.887865096e-06f, -2.875829661e-06f, -2.863790737e-06f, -2.851748343e-06f, -2.839702502e-06f, -2.827653236e-06f,
--2.815600564e-06f, -2.803544509e-06f, -2.791485092e-06f, -2.779422334e-06f, -2.767356256e-06f, -2.755286880e-06f, -2.743214228e-06f, -2.731138320e-06f, -2.719059177e-06f, -2.706976822e-06f,
--2.694891275e-06f, -2.682802558e-06f, -2.670710692e-06f, -2.658615699e-06f, -2.646517599e-06f, -2.634416414e-06f, -2.622312166e-06f, -2.610204876e-06f, -2.598094565e-06f, -2.585981255e-06f,
--2.573864966e-06f, -2.561745721e-06f, -2.549623541e-06f, -2.537498446e-06f, -2.525370459e-06f, -2.513239601e-06f, -2.501105893e-06f, -2.488969356e-06f, -2.476830012e-06f, -2.464687883e-06f,
--2.452542989e-06f, -2.440395353e-06f, -2.428244995e-06f, -2.416091936e-06f, -2.403936199e-06f, -2.391777805e-06f, -2.379616774e-06f, -2.367453129e-06f, -2.355286891e-06f, -2.343118081e-06f,
--2.330946721e-06f, -2.318772831e-06f, -2.306596435e-06f, -2.294417552e-06f, -2.282236204e-06f, -2.270052413e-06f, -2.257866200e-06f, -2.245677587e-06f, -2.233486594e-06f, -2.221293244e-06f,
--2.209097558e-06f, -2.196899557e-06f, -2.184699262e-06f, -2.172496696e-06f, -2.160291879e-06f, -2.148084833e-06f, -2.135875579e-06f, -2.123664139e-06f, -2.111450534e-06f, -2.099234786e-06f,
--2.087016916e-06f, -2.074796945e-06f, -2.062574895e-06f, -2.050350788e-06f, -2.038124644e-06f, -2.025896486e-06f, -2.013666334e-06f, -2.001434211e-06f, -1.989200137e-06f, -1.976964134e-06f,
--1.964726223e-06f, -1.952486426e-06f, -1.940244765e-06f, -1.928001260e-06f, -1.915755934e-06f, -1.903508807e-06f, -1.891259901e-06f, -1.879009238e-06f, -1.866756839e-06f, -1.854502725e-06f,
--1.842246918e-06f, -1.829989439e-06f, -1.817730310e-06f, -1.805469553e-06f, -1.793207188e-06f, -1.780943237e-06f, -1.768677722e-06f, -1.756410663e-06f, -1.744142084e-06f, -1.731872004e-06f,
--1.719600445e-06f, -1.707327429e-06f, -1.695052978e-06f, -1.682777112e-06f, -1.670499853e-06f, -1.658221223e-06f, -1.645941243e-06f, -1.633659934e-06f, -1.621377319e-06f, -1.609093417e-06f,
--1.596808252e-06f, -1.584521844e-06f, -1.572234214e-06f, -1.559945385e-06f, -1.547655377e-06f, -1.535364212e-06f, -1.523071911e-06f, -1.510778497e-06f, -1.498483990e-06f, -1.486188412e-06f,
--1.473891784e-06f, -1.461594127e-06f, -1.449295464e-06f, -1.436995815e-06f, -1.424695202e-06f, -1.412393647e-06f, -1.400091170e-06f, -1.387787794e-06f, -1.375483540e-06f, -1.363178428e-06f,
--1.350872481e-06f, -1.338565720e-06f, -1.326258167e-06f, -1.313949842e-06f, -1.301640768e-06f, -1.289330965e-06f, -1.277020456e-06f, -1.264709261e-06f, -1.252397401e-06f, -1.240084900e-06f,
--1.227771777e-06f, -1.215458054e-06f, -1.203143753e-06f, -1.190828895e-06f, -1.178513501e-06f, -1.166197593e-06f, -1.153881192e-06f, -1.141564320e-06f, -1.129246998e-06f, -1.116929247e-06f,
--1.104611090e-06f, -1.092292546e-06f, -1.079973638e-06f, -1.067654387e-06f, -1.055334815e-06f, -1.043014942e-06f, -1.030694790e-06f, -1.018374381e-06f, -1.006053736e-06f, -9.937328766e-07f,
--9.814118236e-07f, -9.690905986e-07f, -9.567692230e-07f, -9.444477183e-07f, -9.321261057e-07f, -9.198044066e-07f, -9.074826425e-07f, -8.951608346e-07f, -8.828390044e-07f, -8.705171731e-07f,
--8.581953621e-07f, -8.458735928e-07f, -8.335518865e-07f, -8.212302646e-07f, -8.089087483e-07f, -7.965873591e-07f, -7.842661183e-07f, -7.719450472e-07f, -7.596241671e-07f, -7.473034994e-07f,
--7.349830654e-07f, -7.226628863e-07f, -7.103429836e-07f, -6.980233785e-07f, -6.857040924e-07f, -6.733851465e-07f, -6.610665622e-07f, -6.487483607e-07f, -6.364305634e-07f, -6.241131916e-07f,
--6.117962664e-07f, -5.994798093e-07f, -5.871638416e-07f, -5.748483844e-07f, -5.625334590e-07f, -5.502190869e-07f, -5.379052891e-07f, -5.255920870e-07f, -5.132795019e-07f, -5.009675549e-07f,
--4.886562674e-07f, -4.763456607e-07f, -4.640357558e-07f, -4.517265742e-07f, -4.394181370e-07f, -4.271104655e-07f, -4.148035809e-07f, -4.024975044e-07f, -3.901922573e-07f, -3.778878608e-07f,
--3.655843360e-07f, -3.532817043e-07f, -3.409799868e-07f, -3.286792047e-07f, -3.163793792e-07f, -3.040805315e-07f, -2.917826828e-07f, -2.794858543e-07f, -2.671900672e-07f, -2.548953426e-07f,
--2.426017018e-07f, -2.303091658e-07f, -2.180177559e-07f, -2.057274932e-07f, -1.934383988e-07f, -1.811504940e-07f, -1.688637998e-07f, -1.565783374e-07f, -1.442941280e-07f, -1.320111926e-07f,
--1.197295524e-07f, -1.074492285e-07f, -9.517024211e-08f, -8.289261420e-08f, -7.061636595e-08f, -5.834151844e-08f, -4.606809278e-08f, -3.379611006e-08f, -2.152559135e-08f, -9.256557755e-09f,
-3.010969665e-09f, 1.527696984e-08f, 2.754142169e-08f, 3.980430417e-08f, 5.206559622e-08f, 6.432527679e-08f, 7.658332484e-08f, 8.883971933e-08f, 1.010944392e-07f, 1.133474635e-07f,
-1.255987711e-07f, 1.378483411e-07f, 1.500961524e-07f, 1.623421840e-07f, 1.745864149e-07f, 1.868288242e-07f, 1.990693908e-07f, 2.113080938e-07f, 2.235449122e-07f, 2.357798249e-07f,
-2.480128112e-07f, 2.602438499e-07f, 2.724729201e-07f, 2.847000010e-07f, 2.969250715e-07f, 3.091481107e-07f, 3.213690977e-07f, 3.335880115e-07f, 3.458048314e-07f, 3.580195362e-07f,
-3.702321052e-07f, 3.824425174e-07f, 3.946507520e-07f, 4.068567881e-07f, 4.190606047e-07f, 4.312621811e-07f, 4.434614963e-07f, 4.556585294e-07f, 4.678532598e-07f, 4.800456664e-07f,
-4.922357285e-07f, 5.044234251e-07f, 5.166087356e-07f, 5.287916391e-07f, 5.409721147e-07f, 5.531501417e-07f, 5.653256993e-07f, 5.774987666e-07f, 5.896693229e-07f, 6.018373474e-07f,
-6.140028193e-07f, 6.261657180e-07f, 6.383260225e-07f, 6.504837122e-07f, 6.626387663e-07f, 6.747911641e-07f, 6.869408849e-07f, 6.990879079e-07f, 7.112322124e-07f, 7.233737778e-07f,
-7.355125832e-07f, 7.476486081e-07f, 7.597818317e-07f, 7.719122334e-07f, 7.840397925e-07f, 7.961644883e-07f, 8.082863002e-07f, 8.204052076e-07f, 8.325211897e-07f, 8.446342259e-07f,
-8.567442958e-07f, 8.688513785e-07f, 8.809554535e-07f, 8.930565003e-07f, 9.051544981e-07f, 9.172494265e-07f, 9.293412649e-07f, 9.414299926e-07f, 9.535155892e-07f, 9.655980340e-07f,
-9.776773065e-07f, 9.897533862e-07f, 1.001826253e-06f, 1.013895885e-06f, 1.025962263e-06f, 1.038025367e-06f, 1.050085174e-06f, 1.062141666e-06f, 1.074194822e-06f, 1.086244621e-06f,
-1.098291042e-06f, 1.110334066e-06f, 1.122373672e-06f, 1.134409839e-06f, 1.146442547e-06f, 1.158471775e-06f, 1.170497504e-06f, 1.182519712e-06f, 1.194538380e-06f, 1.206553486e-06f,
-1.218565011e-06f, 1.230572935e-06f, 1.242577236e-06f, 1.254577894e-06f, 1.266574890e-06f, 1.278568202e-06f, 1.290557811e-06f, 1.302543696e-06f, 1.314525837e-06f, 1.326504213e-06f,
-1.338478805e-06f, 1.350449592e-06f, 1.362416553e-06f, 1.374379669e-06f, 1.386338919e-06f, 1.398294283e-06f, 1.410245740e-06f, 1.422193272e-06f, 1.434136856e-06f, 1.446076473e-06f,
-1.458012104e-06f, 1.469943727e-06f, 1.481871322e-06f, 1.493794870e-06f, 1.505714350e-06f, 1.517629742e-06f, 1.529541026e-06f, 1.541448182e-06f, 1.553351189e-06f, 1.565250028e-06f,
-1.577144678e-06f, 1.589035120e-06f, 1.600921332e-06f, 1.612803296e-06f, 1.624680991e-06f, 1.636554398e-06f, 1.648423495e-06f, 1.660288263e-06f, 1.672148682e-06f, 1.684004732e-06f,
-1.695856393e-06f, 1.707703645e-06f, 1.719546468e-06f, 1.731384842e-06f, 1.743218747e-06f, 1.755048164e-06f, 1.766873071e-06f, 1.778693449e-06f, 1.790509279e-06f, 1.802320540e-06f,
-1.814127213e-06f, 1.825929278e-06f, 1.837726714e-06f, 1.849519501e-06f, 1.861307621e-06f, 1.873091053e-06f, 1.884869778e-06f, 1.896643775e-06f, 1.908413024e-06f, 1.920177507e-06f,
-1.931937202e-06f, 1.943692091e-06f, 1.955442153e-06f, 1.967187369e-06f, 1.978927719e-06f, 1.990663184e-06f, 2.002393743e-06f, 2.014119376e-06f, 2.025840065e-06f, 2.037555789e-06f,
-2.049266529e-06f, 2.060972265e-06f, 2.072672978e-06f, 2.084368647e-06f, 2.096059253e-06f, 2.107744777e-06f, 2.119425199e-06f, 2.131100499e-06f, 2.142770657e-06f, 2.154435655e-06f,
-2.166095472e-06f, 2.177750089e-06f, 2.189399487e-06f, 2.201043645e-06f, 2.212682545e-06f, 2.224316166e-06f, 2.235944490e-06f, 2.247567496e-06f, 2.259185166e-06f, 2.270797480e-06f,
-2.282404418e-06f, 2.294005962e-06f, 2.305602090e-06f, 2.317192785e-06f, 2.328778027e-06f, 2.340357795e-06f, 2.351932072e-06f, 2.363500838e-06f, 2.375064072e-06f, 2.386621756e-06f,
-2.398173871e-06f, 2.409720397e-06f, 2.421261315e-06f, 2.432796605e-06f, 2.444326249e-06f, 2.455850227e-06f, 2.467368519e-06f, 2.478881107e-06f, 2.490387971e-06f, 2.501889092e-06f,
-2.513384451e-06f, 2.524874028e-06f, 2.536357805e-06f, 2.547835762e-06f, 2.559307880e-06f, 2.570774140e-06f, 2.582234523e-06f, 2.593689009e-06f, 2.605137580e-06f, 2.616580216e-06f,
-2.628016899e-06f, 2.639447608e-06f, 2.650872326e-06f, 2.662291033e-06f, 2.673703711e-06f, 2.685110339e-06f, 2.696510899e-06f, 2.707905372e-06f, 2.719293739e-06f, 2.730675982e-06f,
-2.742052080e-06f, 2.753422016e-06f, 2.764785770e-06f, 2.776143323e-06f, 2.787494656e-06f, 2.798839751e-06f, 2.810178589e-06f, 2.821511150e-06f, 2.832837416e-06f, 2.844157369e-06f,
-2.855470988e-06f, 2.866778256e-06f, 2.878079153e-06f, 2.889373661e-06f, 2.900661762e-06f, 2.911943435e-06f, 2.923218663e-06f, 2.934487427e-06f, 2.945749707e-06f, 2.957005487e-06f,
-2.968254745e-06f, 2.979497465e-06f, 2.990733627e-06f, 3.001963212e-06f, 3.013186203e-06f, 3.024402580e-06f, 3.035612324e-06f, 3.046815418e-06f, 3.058011842e-06f, 3.069201579e-06f,
-3.080384608e-06f, 3.091560913e-06f, 3.102730474e-06f, 3.113893273e-06f, 3.125049291e-06f, 3.136198510e-06f, 3.147340911e-06f, 3.158476476e-06f, 3.169605187e-06f, 3.180727025e-06f,
-3.191841971e-06f, 3.202950007e-06f, 3.214051116e-06f, 3.225145277e-06f, 3.236232474e-06f, 3.247312688e-06f, 3.258385900e-06f, 3.269452092e-06f, 3.280511245e-06f, 3.291563343e-06f,
-3.302608365e-06f, 3.313646295e-06f, 3.324677113e-06f, 3.335700801e-06f, 3.346717342e-06f, 3.357726717e-06f, 3.368728908e-06f, 3.379723897e-06f, 3.390711665e-06f, 3.401692194e-06f,
-3.412665467e-06f, 3.423631465e-06f, 3.434590170e-06f, 3.445541564e-06f, 3.456485629e-06f, 3.467422347e-06f, 3.478351699e-06f, 3.489273668e-06f, 3.500188237e-06f, 3.511095386e-06f,
-3.521995097e-06f, 3.532887354e-06f, 3.543772138e-06f, 3.554649430e-06f, 3.565519214e-06f, 3.576381471e-06f, 3.587236183e-06f, 3.598083332e-06f, 3.608922901e-06f, 3.619754872e-06f,
-3.630579226e-06f, 3.641395947e-06f, 3.652205016e-06f, 3.663006415e-06f, 3.673800128e-06f, 3.684586135e-06f, 3.695364419e-06f, 3.706134963e-06f, 3.716897749e-06f, 3.727652759e-06f,
-3.738399975e-06f, 3.749139380e-06f, 3.759870957e-06f, 3.770594687e-06f, 3.781310553e-06f, 3.792018537e-06f, 3.802718622e-06f, 3.813410791e-06f, 3.824095025e-06f, 3.834771307e-06f,
-3.845439620e-06f, 3.856099946e-06f, 3.866752268e-06f, 3.877396568e-06f, 3.888032828e-06f, 3.898661032e-06f, 3.909281162e-06f, 3.919893201e-06f, 3.930497130e-06f, 3.941092934e-06f,
-3.951680594e-06f, 3.962260093e-06f, 3.972831413e-06f, 3.983394538e-06f, 3.993949451e-06f, 4.004496133e-06f, 4.015034568e-06f, 4.025564738e-06f, 4.036086627e-06f, 4.046600217e-06f,
-4.057105490e-06f, 4.067602430e-06f, 4.078091020e-06f, 4.088571242e-06f, 4.099043079e-06f, 4.109506514e-06f, 4.119961531e-06f, 4.130408111e-06f, 4.140846238e-06f, 4.151275896e-06f,
-4.161697066e-06f, 4.172109732e-06f, 4.182513876e-06f, 4.192909483e-06f, 4.203296535e-06f, 4.213675015e-06f, 4.224044906e-06f, 4.234406191e-06f, 4.244758853e-06f, 4.255102876e-06f,
-4.265438243e-06f, 4.275764936e-06f, 4.286082940e-06f, 4.296392236e-06f, 4.306692809e-06f, 4.316984641e-06f, 4.327267717e-06f, 4.337542018e-06f, 4.347807529e-06f, 4.358064233e-06f,
-4.368312113e-06f, 4.378551152e-06f, 4.388781334e-06f, 4.399002642e-06f, 4.409215060e-06f, 4.419418570e-06f, 4.429613157e-06f, 4.439798804e-06f, 4.449975494e-06f, 4.460143211e-06f,
-4.470301938e-06f, 4.480451659e-06f, 4.490592357e-06f, 4.500724016e-06f, 4.510846619e-06f, 4.520960150e-06f, 4.531064593e-06f, 4.541159932e-06f, 4.551246149e-06f, 4.561323228e-06f,
-4.571391154e-06f, 4.581449910e-06f, 4.591499479e-06f, 4.601539846e-06f, 4.611570994e-06f, 4.621592906e-06f, 4.631605567e-06f, 4.641608961e-06f, 4.651603071e-06f, 4.661587881e-06f,
-4.671563375e-06f, 4.681529537e-06f, 4.691486350e-06f, 4.701433799e-06f, 4.711371868e-06f, 4.721300540e-06f, 4.731219799e-06f, 4.741129630e-06f, 4.751030017e-06f, 4.760920943e-06f,
-4.770802392e-06f, 4.780674349e-06f, 4.790536798e-06f, 4.800389722e-06f, 4.810233106e-06f, 4.820066935e-06f, 4.829891191e-06f, 4.839705859e-06f, 4.849510924e-06f, 4.859306370e-06f,
-4.869092181e-06f, 4.878868340e-06f, 4.888634833e-06f, 4.898391644e-06f, 4.908138757e-06f, 4.917876156e-06f, 4.927603826e-06f, 4.937321751e-06f, 4.947029915e-06f, 4.956728302e-06f,
-4.966416898e-06f, 4.976095687e-06f, 4.985764653e-06f, 4.995423780e-06f, 5.005073053e-06f, 5.014712456e-06f, 5.024341975e-06f, 5.033961593e-06f, 5.043571296e-06f, 5.053171067e-06f,
-5.062760891e-06f, 5.072340754e-06f, 5.081910638e-06f, 5.091470531e-06f, 5.101020415e-06f, 5.110560275e-06f, 5.120090098e-06f, 5.129609866e-06f, 5.139119565e-06f, 5.148619179e-06f,
-5.158108694e-06f, 5.167588094e-06f, 5.177057364e-06f, 5.186516489e-06f, 5.195965454e-06f, 5.205404244e-06f, 5.214832843e-06f, 5.224251236e-06f, 5.233659409e-06f, 5.243057347e-06f,
-5.252445034e-06f, 5.261822455e-06f, 5.271189596e-06f, 5.280546441e-06f, 5.289892976e-06f, 5.299229185e-06f, 5.308555054e-06f, 5.317870568e-06f, 5.327175713e-06f, 5.336470472e-06f,
-5.345754832e-06f, 5.355028777e-06f, 5.364292293e-06f, 5.373545365e-06f, 5.382787979e-06f, 5.392020119e-06f, 5.401241771e-06f, 5.410452920e-06f, 5.419653552e-06f, 5.428843652e-06f,
-5.438023205e-06f, 5.447192197e-06f, 5.456350613e-06f, 5.465498439e-06f, 5.474635660e-06f, 5.483762261e-06f, 5.492878229e-06f, 5.501983548e-06f, 5.511078205e-06f, 5.520162184e-06f,
-5.529235471e-06f, 5.538298053e-06f, 5.547349914e-06f, 5.556391040e-06f, 5.565421417e-06f, 5.574441030e-06f, 5.583449866e-06f, 5.592447910e-06f, 5.601435148e-06f, 5.610411565e-06f,
-5.619377148e-06f, 5.628331882e-06f, 5.637275753e-06f, 5.646208746e-06f, 5.655130848e-06f, 5.664042045e-06f, 5.672942323e-06f, 5.681831667e-06f, 5.690710063e-06f, 5.699577498e-06f,
-5.708433957e-06f, 5.717279427e-06f, 5.726113893e-06f, 5.734937341e-06f, 5.743749759e-06f, 5.752551130e-06f, 5.761341443e-06f, 5.770120683e-06f, 5.778888836e-06f, 5.787645888e-06f,
-5.796391826e-06f, 5.805126635e-06f, 5.813850303e-06f, 5.822562815e-06f, 5.831264157e-06f, 5.839954317e-06f, 5.848633279e-06f, 5.857301032e-06f, 5.865957560e-06f, 5.874602850e-06f,
-5.883236890e-06f, 5.891859664e-06f, 5.900471161e-06f, 5.909071365e-06f, 5.917660264e-06f, 5.926237845e-06f, 5.934804093e-06f, 5.943358995e-06f, 5.951902538e-06f, 5.960434709e-06f,
-5.968955494e-06f, 5.977464880e-06f, 5.985962853e-06f, 5.994449401e-06f, 6.002924509e-06f, 6.011388165e-06f, 6.019840355e-06f, 6.028281067e-06f, 6.036710286e-06f, 6.045128001e-06f,
-6.053534197e-06f, 6.061928861e-06f, 6.070311981e-06f, 6.078683543e-06f, 6.087043535e-06f, 6.095391943e-06f, 6.103728754e-06f, 6.112053955e-06f, 6.120367533e-06f, 6.128669476e-06f,
-6.136959770e-06f, 6.145238402e-06f, 6.153505360e-06f, 6.161760630e-06f, 6.170004200e-06f, 6.178236058e-06f, 6.186456189e-06f, 6.194664582e-06f, 6.202861223e-06f, 6.211046100e-06f,
-6.219219201e-06f, 6.227380512e-06f, 6.235530020e-06f, 6.243667714e-06f, 6.251793581e-06f, 6.259907607e-06f, 6.268009780e-06f, 6.276100089e-06f, 6.284178519e-06f, 6.292245060e-06f,
-6.300299697e-06f, 6.308342419e-06f, 6.316373214e-06f, 6.324392068e-06f, 6.332398970e-06f, 6.340393907e-06f, 6.348376866e-06f, 6.356347836e-06f, 6.364306804e-06f, 6.372253758e-06f,
-6.380188685e-06f, 6.388111574e-06f, 6.396022411e-06f, 6.403921185e-06f, 6.411807884e-06f, 6.419682495e-06f, 6.427545007e-06f, 6.435395406e-06f, 6.443233682e-06f, 6.451059822e-06f,
-6.458873814e-06f, 6.466675646e-06f, 6.474465305e-06f, 6.482242781e-06f, 6.490008061e-06f, 6.497761133e-06f, 6.505501985e-06f, 6.513230605e-06f, 6.520946981e-06f, 6.528651103e-06f,
-6.536342956e-06f, 6.544022531e-06f, 6.551689815e-06f, 6.559344797e-06f, 6.566987464e-06f, 6.574617805e-06f, 6.582235808e-06f, 6.589841462e-06f, 6.597434755e-06f, 6.605015675e-06f,
-6.612584211e-06f, 6.620140352e-06f, 6.627684085e-06f, 6.635215399e-06f, 6.642734282e-06f, 6.650240724e-06f, 6.657734713e-06f, 6.665216237e-06f, 6.672685284e-06f, 6.680141844e-06f,
-6.687585905e-06f, 6.695017456e-06f, 6.702436486e-06f, 6.709842982e-06f, 6.717236935e-06f, 6.724618332e-06f, 6.731987162e-06f, 6.739343415e-06f, 6.746687078e-06f, 6.754018142e-06f,
-6.761336594e-06f, 6.768642424e-06f, 6.775935620e-06f, 6.783216172e-06f, 6.790484068e-06f, 6.797739298e-06f, 6.804981850e-06f, 6.812211714e-06f, 6.819428878e-06f, 6.826633332e-06f,
-6.833825064e-06f, 6.841004064e-06f, 6.848170321e-06f, 6.855323825e-06f, 6.862464563e-06f, 6.869592527e-06f, 6.876707704e-06f, 6.883810084e-06f, 6.890899656e-06f, 6.897976410e-06f,
-6.905040335e-06f, 6.912091421e-06f, 6.919129656e-06f, 6.926155030e-06f, 6.933167533e-06f, 6.940167154e-06f, 6.947153882e-06f, 6.954127707e-06f, 6.961088619e-06f, 6.968036607e-06f,
-6.974971661e-06f, 6.981893770e-06f, 6.988802924e-06f, 6.995699112e-06f, 7.002582325e-06f, 7.009452551e-06f, 7.016309781e-06f, 7.023154004e-06f, 7.029985211e-06f, 7.036803390e-06f,
-7.043608532e-06f, 7.050400626e-06f, 7.057179663e-06f, 7.063945632e-06f, 7.070698523e-06f, 7.077438327e-06f, 7.084165032e-06f, 7.090878630e-06f, 7.097579109e-06f, 7.104266461e-06f,
-7.110940674e-06f, 7.117601740e-06f, 7.124249648e-06f, 7.130884389e-06f, 7.137505952e-06f, 7.144114327e-06f, 7.150709506e-06f, 7.157291478e-06f, 7.163860233e-06f, 7.170415762e-06f,
-7.176958055e-06f, 7.183487102e-06f, 7.190002893e-06f, 7.196505420e-06f, 7.202994671e-06f, 7.209470639e-06f, 7.215933313e-06f, 7.222382683e-06f, 7.228818741e-06f, 7.235241476e-06f,
-7.241650879e-06f, 7.248046941e-06f, 7.254429653e-06f, 7.260799004e-06f, 7.267154986e-06f, 7.273497589e-06f, 7.279826804e-06f, 7.286142621e-06f, 7.292445032e-06f, 7.298734027e-06f,
-7.305009597e-06f, 7.311271732e-06f, 7.317520424e-06f, 7.323755663e-06f, 7.329977440e-06f, 7.336185747e-06f, 7.342380573e-06f, 7.348561911e-06f, 7.354729750e-06f, 7.360884082e-06f,
-7.367024898e-06f, 7.373152189e-06f, 7.379265947e-06f, 7.385366161e-06f, 7.391452824e-06f, 7.397525926e-06f, 7.403585458e-06f, 7.409631413e-06f, 7.415663780e-06f, 7.421682552e-06f,
-7.427687719e-06f, 7.433679273e-06f, 7.439657206e-06f, 7.445621507e-06f, 7.451572170e-06f, 7.457509184e-06f, 7.463432543e-06f, 7.469342236e-06f, 7.475238256e-06f, 7.481120594e-06f,
-7.486989242e-06f, 7.492844190e-06f, 7.498685432e-06f, 7.504512957e-06f, 7.510326759e-06f, 7.516126827e-06f, 7.521913156e-06f, 7.527685734e-06f, 7.533444556e-06f, 7.539189612e-06f,
-7.544920893e-06f, 7.550638393e-06f, 7.556342103e-06f, 7.562032013e-06f, 7.567708118e-06f, 7.573370407e-06f, 7.579018874e-06f, 7.584653510e-06f, 7.590274306e-06f, 7.595881256e-06f,
-7.601474351e-06f, 7.607053583e-06f, 7.612618945e-06f, 7.618170427e-06f, 7.623708023e-06f, 7.629231724e-06f, 7.634741523e-06f, 7.640237412e-06f, 7.645719383e-06f, 7.651187429e-06f,
-7.656641541e-06f, 7.662081711e-06f, 7.667507933e-06f, 7.672920199e-06f, 7.678318500e-06f, 7.683702830e-06f, 7.689073180e-06f, 7.694429544e-06f, 7.699771913e-06f, 7.705100280e-06f,
-7.710414637e-06f, 7.715714978e-06f, 7.721001295e-06f, 7.726273580e-06f, 7.731531826e-06f, 7.736776025e-06f, 7.742006171e-06f, 7.747222255e-06f, 7.752424271e-06f, 7.757612212e-06f,
-7.762786069e-06f, 7.767945837e-06f, 7.773091507e-06f, 7.778223073e-06f, 7.783340528e-06f, 7.788443863e-06f, 7.793533073e-06f, 7.798608151e-06f, 7.803669088e-06f, 7.808715879e-06f,
-7.813748516e-06f, 7.818766992e-06f, 7.823771301e-06f, 7.828761434e-06f, 7.833737387e-06f, 7.838699151e-06f, 7.843646720e-06f, 7.848580087e-06f, 7.853499246e-06f, 7.858404189e-06f,
-7.863294910e-06f, 7.868171402e-06f, 7.873033658e-06f, 7.877881673e-06f, 7.882715438e-06f, 7.887534948e-06f, 7.892340197e-06f, 7.897131176e-06f, 7.901907881e-06f, 7.906670304e-06f,
-7.911418439e-06f, 7.916152280e-06f, 7.920871819e-06f, 7.925577052e-06f, 7.930267971e-06f, 7.934944570e-06f, 7.939606842e-06f, 7.944254783e-06f, 7.948888384e-06f, 7.953507640e-06f,
-7.958112545e-06f, 7.962703093e-06f, 7.967279276e-06f, 7.971841091e-06f, 7.976388529e-06f, 7.980921585e-06f, 7.985440254e-06f, 7.989944528e-06f, 7.994434402e-06f, 7.998909870e-06f,
-8.003370927e-06f, 8.007817565e-06f, 8.012249779e-06f, 8.016667564e-06f, 8.021070914e-06f, 8.025459822e-06f, 8.029834282e-06f, 8.034194290e-06f, 8.038539839e-06f, 8.042870924e-06f,
-8.047187538e-06f, 8.051489677e-06f, 8.055777335e-06f, 8.060050505e-06f, 8.064309183e-06f, 8.068553362e-06f, 8.072783038e-06f, 8.076998204e-06f, 8.081198856e-06f, 8.085384987e-06f,
-8.089556593e-06f, 8.093713668e-06f, 8.097856206e-06f, 8.101984202e-06f, 8.106097651e-06f, 8.110196548e-06f, 8.114280887e-06f, 8.118350663e-06f, 8.122405871e-06f, 8.126446505e-06f,
-8.130472560e-06f, 8.134484032e-06f, 8.138480915e-06f, 8.142463204e-06f, 8.146430894e-06f, 8.150383979e-06f, 8.154322456e-06f, 8.158246318e-06f, 8.162155561e-06f, 8.166050180e-06f,
-8.169930170e-06f, 8.173795526e-06f, 8.177646243e-06f, 8.181482317e-06f, 8.185303742e-06f, 8.189110514e-06f, 8.192902628e-06f, 8.196680080e-06f, 8.200442864e-06f, 8.204190975e-06f,
-8.207924410e-06f, 8.211643164e-06f, 8.215347231e-06f, 8.219036608e-06f, 8.222711290e-06f, 8.226371272e-06f, 8.230016549e-06f, 8.233647119e-06f, 8.237262975e-06f, 8.240864113e-06f,
-8.244450529e-06f, 8.248022219e-06f, 8.251579179e-06f, 8.255121403e-06f, 8.258648888e-06f, 8.262161630e-06f, 8.265659623e-06f, 8.269142865e-06f, 8.272611350e-06f, 8.276065075e-06f,
-8.279504036e-06f, 8.282928228e-06f, 8.286337647e-06f, 8.289732289e-06f, 8.293112151e-06f, 8.296477227e-06f, 8.299827515e-06f, 8.303163010e-06f, 8.306483709e-06f, 8.309789606e-06f,
-8.313080700e-06f, 8.316356985e-06f, 8.319618457e-06f, 8.322865114e-06f, 8.326096951e-06f, 8.329313965e-06f, 8.332516151e-06f, 8.335703507e-06f, 8.338876028e-06f, 8.342033710e-06f,
-8.345176551e-06f, 8.348304547e-06f, 8.351417693e-06f, 8.354515987e-06f, 8.357599425e-06f, 8.360668003e-06f, 8.363721719e-06f, 8.366760568e-06f, 8.369784547e-06f, 8.372793653e-06f,
-8.375787883e-06f, 8.378767232e-06f, 8.381731699e-06f, 8.384681279e-06f, 8.387615969e-06f, 8.390535766e-06f, 8.393440668e-06f, 8.396330670e-06f, 8.399205769e-06f, 8.402065963e-06f,
-8.404911248e-06f, 8.407741622e-06f, 8.410557081e-06f, 8.413357622e-06f, 8.416143242e-06f, 8.418913939e-06f, 8.421669709e-06f, 8.424410549e-06f, 8.427136457e-06f, 8.429847430e-06f,
-8.432543465e-06f, 8.435224558e-06f, 8.437890708e-06f, 8.440541912e-06f, 8.443178166e-06f, 8.445799469e-06f, 8.448405817e-06f, 8.450997207e-06f, 8.453573638e-06f, 8.456135107e-06f,
-8.458681610e-06f, 8.461213146e-06f, 8.463729713e-06f, 8.466231306e-06f, 8.468717925e-06f, 8.471189566e-06f, 8.473646227e-06f, 8.476087906e-06f, 8.478514601e-06f, 8.480926308e-06f,
-8.483323027e-06f, 8.485704754e-06f, 8.488071487e-06f, 8.490423225e-06f, 8.492759964e-06f, 8.495081703e-06f, 8.497388439e-06f, 8.499680171e-06f, 8.501956896e-06f, 8.504218613e-06f,
-8.506465318e-06f, 8.508697011e-06f, 8.510913689e-06f, 8.513115350e-06f, 8.515301993e-06f, 8.517473615e-06f, 8.519630215e-06f, 8.521771790e-06f, 8.523898339e-06f, 8.526009860e-06f,
-8.528106351e-06f, 8.530187811e-06f, 8.532254237e-06f, 8.534305629e-06f, 8.536341984e-06f, 8.538363301e-06f, 8.540369578e-06f, 8.542360813e-06f, 8.544337006e-06f, 8.546298154e-06f,
-8.548244255e-06f, 8.550175310e-06f, 8.552091315e-06f, 8.553992269e-06f, 8.555878172e-06f, 8.557749022e-06f, 8.559604817e-06f, 8.561445555e-06f, 8.563271237e-06f, 8.565081860e-06f,
-8.566877424e-06f, 8.568657926e-06f, 8.570423366e-06f, 8.572173742e-06f, 8.573909055e-06f, 8.575629301e-06f, 8.577334481e-06f, 8.579024593e-06f, 8.580699636e-06f, 8.582359609e-06f,
-8.584004511e-06f, 8.585634341e-06f, 8.587249099e-06f, 8.588848783e-06f, 8.590433392e-06f, 8.592002926e-06f, 8.593557383e-06f, 8.595096764e-06f, 8.596621067e-06f, 8.598130291e-06f,
-8.599624435e-06f, 8.601103500e-06f, 8.602567484e-06f, 8.604016387e-06f, 8.605450207e-06f, 8.606868945e-06f, 8.608272600e-06f, 8.609661171e-06f, 8.611034658e-06f, 8.612393060e-06f,
-8.613736378e-06f, 8.615064609e-06f, 8.616377754e-06f, 8.617675813e-06f, 8.618958786e-06f, 8.620226671e-06f, 8.621479469e-06f, 8.622717179e-06f, 8.623939801e-06f, 8.625147335e-06f,
-8.626339780e-06f, 8.627517137e-06f, 8.628679406e-06f, 8.629826585e-06f, 8.630958676e-06f, 8.632075677e-06f, 8.633177590e-06f, 8.634264413e-06f, 8.635336147e-06f, 8.636392793e-06f,
-8.637434349e-06f, 8.638460816e-06f, 8.639472195e-06f, 8.640468485e-06f, 8.641449687e-06f, 8.642415800e-06f, 8.643366825e-06f, 8.644302762e-06f, 8.645223612e-06f, 8.646129375e-06f,
-8.647020050e-06f, 8.647895639e-06f, 8.648756142e-06f, 8.649601559e-06f, 8.650431890e-06f, 8.651247137e-06f, 8.652047299e-06f, 8.652832377e-06f, 8.653602371e-06f, 8.654357283e-06f,
-8.655097112e-06f, 8.655821860e-06f, 8.656531527e-06f, 8.657226113e-06f, 8.657905619e-06f, 8.658570047e-06f, 8.659219396e-06f, 8.659853667e-06f, 8.660472862e-06f, 8.661076981e-06f,
-8.661666025e-06f, 8.662239995e-06f, 8.662798891e-06f, 8.663342715e-06f, 8.663871468e-06f, 8.664385150e-06f, 8.664883762e-06f, 8.665367306e-06f, 8.665835783e-06f, 8.666289194e-06f,
-8.666727539e-06f, 8.667150820e-06f, 8.667559038e-06f, 8.667952194e-06f, 8.668330290e-06f, 8.668693327e-06f, 8.669041305e-06f, 8.669374227e-06f, 8.669692093e-06f, 8.669994905e-06f,
-8.670282664e-06f, 8.670555372e-06f, 8.670813030e-06f, 8.671055639e-06f, 8.671283202e-06f, 8.671495718e-06f, 8.671693191e-06f, 8.671875621e-06f, 8.672043010e-06f, 8.672195360e-06f,
-8.672332672e-06f, 8.672454948e-06f, 8.672562189e-06f, 8.672654398e-06f, 8.672731576e-06f, 8.672793724e-06f, 8.672840845e-06f, 8.672872941e-06f, 8.672890012e-06f, 8.672892062e-06f,
-8.672879091e-06f, 8.672851102e-06f, 8.672808097e-06f, 8.672750078e-06f, 8.672677046e-06f, 8.672589004e-06f, 8.672485954e-06f, 8.672367897e-06f, 8.672234836e-06f, 8.672086773e-06f,
-8.671923711e-06f, 8.671745650e-06f, 8.671552594e-06f, 8.671344545e-06f, 8.671121504e-06f, 8.670883475e-06f, 8.670630459e-06f, 8.670362459e-06f, 8.670079477e-06f, 8.669781515e-06f,
-8.669468577e-06f, 8.669140663e-06f, 8.668797778e-06f, 8.668439922e-06f, 8.668067099e-06f, 8.667679312e-06f, 8.667276562e-06f, 8.666858853e-06f, 8.666426186e-06f, 8.665978566e-06f,
-8.665515993e-06f, 8.665038471e-06f, 8.664546003e-06f, 8.664038591e-06f, 8.663516238e-06f, 8.662978948e-06f, 8.662426721e-06f, 8.661859563e-06f, 8.661277474e-06f, 8.660680459e-06f,
-8.660068520e-06f, 8.659441660e-06f, 8.658799882e-06f, 8.658143189e-06f, 8.657471584e-06f, 8.656785070e-06f, 8.656083650e-06f, 8.655367328e-06f, 8.654636105e-06f, 8.653889986e-06f,
-8.653128974e-06f, 8.652353071e-06f, 8.651562282e-06f, 8.650756608e-06f, 8.649936054e-06f, 8.649100623e-06f, 8.648250318e-06f, 8.647385143e-06f, 8.646505100e-06f, 8.645610193e-06f,
-8.644700426e-06f, 8.643775802e-06f, 8.642836325e-06f, 8.641881997e-06f, 8.640912823e-06f, 8.639928806e-06f, 8.638929950e-06f, 8.637916257e-06f, 8.636887733e-06f, 8.635844380e-06f,
-8.634786202e-06f, 8.633713203e-06f, 8.632625387e-06f, 8.631522757e-06f, 8.630405316e-06f, 8.629273070e-06f, 8.628126021e-06f, 8.626964174e-06f, 8.625787533e-06f, 8.624596100e-06f,
-8.623389881e-06f, 8.622168879e-06f, 8.620933097e-06f, 8.619682541e-06f, 8.618417215e-06f, 8.617137121e-06f, 8.615842264e-06f, 8.614532649e-06f, 8.613208280e-06f, 8.611869159e-06f,
-8.610515293e-06f, 8.609146685e-06f, 8.607763338e-06f, 8.606365259e-06f, 8.604952449e-06f, 8.603524915e-06f, 8.602082661e-06f, 8.600625689e-06f, 8.599154006e-06f, 8.597667616e-06f,
-8.596166522e-06f, 8.594650729e-06f, 8.593120242e-06f, 8.591575066e-06f, 8.590015204e-06f, 8.588440661e-06f, 8.586851443e-06f, 8.585247553e-06f, 8.583628996e-06f, 8.581995777e-06f,
-8.580347900e-06f, 8.578685370e-06f, 8.577008192e-06f, 8.575316371e-06f, 8.573609911e-06f, 8.571888817e-06f, 8.570153094e-06f, 8.568402747e-06f, 8.566637780e-06f, 8.564858200e-06f,
-8.563064009e-06f, 8.561255214e-06f, 8.559431820e-06f, 8.557593830e-06f, 8.555741252e-06f, 8.553874088e-06f, 8.551992345e-06f, 8.550096028e-06f, 8.548185141e-06f, 8.546259690e-06f,
-8.544319681e-06f, 8.542365117e-06f, 8.540396005e-06f, 8.538412349e-06f, 8.536414156e-06f, 8.534401429e-06f, 8.532374175e-06f, 8.530332399e-06f, 8.528276106e-06f, 8.526205302e-06f,
-8.524119992e-06f, 8.522020181e-06f, 8.519905875e-06f, 8.517777079e-06f, 8.515633799e-06f, 8.513476041e-06f, 8.511303810e-06f, 8.509117111e-06f, 8.506915950e-06f, 8.504700333e-06f,
-8.502470266e-06f, 8.500225753e-06f, 8.497966802e-06f, 8.495693417e-06f, 8.493405604e-06f, 8.491103369e-06f, 8.488786718e-06f, 8.486455657e-06f, 8.484110191e-06f, 8.481750327e-06f,
-8.479376070e-06f, 8.476987427e-06f, 8.474584402e-06f, 8.472167003e-06f, 8.469735234e-06f, 8.467289103e-06f, 8.464828615e-06f, 8.462353777e-06f, 8.459864593e-06f, 8.457361072e-06f,
-8.454843217e-06f, 8.452311037e-06f, 8.449764536e-06f, 8.447203722e-06f, 8.444628600e-06f, 8.442039176e-06f, 8.439435458e-06f, 8.436817451e-06f, 8.434185161e-06f, 8.431538595e-06f,
-8.428877760e-06f, 8.426202661e-06f, 8.423513305e-06f, 8.420809699e-06f, 8.418091849e-06f, 8.415359762e-06f, 8.412613444e-06f, 8.409852901e-06f, 8.407078140e-06f, 8.404289168e-06f,
-8.401485992e-06f, 8.398668618e-06f, 8.395837052e-06f, 8.392991302e-06f, 8.390131373e-06f, 8.387257274e-06f, 8.384369010e-06f, 8.381466589e-06f, 8.378550017e-06f, 8.375619300e-06f,
-8.372674447e-06f, 8.369715464e-06f, 8.366742357e-06f, 8.363755133e-06f, 8.360753800e-06f, 8.357738365e-06f, 8.354708834e-06f, 8.351665215e-06f, 8.348607514e-06f, 8.345535739e-06f,
-8.342449897e-06f, 8.339349994e-06f, 8.336236038e-06f, 8.333108037e-06f, 8.329965997e-06f, 8.326809925e-06f, 8.323639829e-06f, 8.320455716e-06f, 8.317257593e-06f, 8.314045468e-06f,
-8.310819348e-06f, 8.307579240e-06f, 8.304325152e-06f, 8.301057090e-06f, 8.297775064e-06f, 8.294479079e-06f, 8.291169143e-06f, 8.287845264e-06f, 8.284507450e-06f, 8.281155707e-06f,
-8.277790044e-06f, 8.274410468e-06f, 8.271016986e-06f, 8.267609607e-06f, 8.264188337e-06f, 8.260753185e-06f, 8.257304159e-06f, 8.253841265e-06f, 8.250364512e-06f, 8.246873908e-06f,
-8.243369460e-06f, 8.239851176e-06f, 8.236319064e-06f, 8.232773131e-06f, 8.229213387e-06f, 8.225639837e-06f, 8.222052492e-06f, 8.218451358e-06f, 8.214836443e-06f, 8.211207756e-06f,
-8.207565304e-06f, 8.203909095e-06f, 8.200239138e-06f, 8.196555441e-06f, 8.192858011e-06f, 8.189146858e-06f, 8.185421988e-06f, 8.181683410e-06f, 8.177931133e-06f, 8.174165165e-06f,
-8.170385513e-06f, 8.166592186e-06f, 8.162785193e-06f, 8.158964542e-06f, 8.155130241e-06f, 8.151282298e-06f, 8.147420722e-06f, 8.143545521e-06f, 8.139656704e-06f, 8.135754279e-06f,
-8.131838254e-06f, 8.127908638e-06f, 8.123965441e-06f, 8.120008669e-06f, 8.116038332e-06f, 8.112054438e-06f, 8.108056996e-06f, 8.104046014e-06f, 8.100021502e-06f, 8.095983468e-06f,
-8.091931920e-06f, 8.087866867e-06f, 8.083788318e-06f, 8.079696282e-06f, 8.075590768e-06f, 8.071471783e-06f, 8.067339338e-06f, 8.063193441e-06f, 8.059034101e-06f, 8.054861327e-06f,
-8.050675128e-06f, 8.046475512e-06f, 8.042262488e-06f, 8.038036067e-06f, 8.033796256e-06f, 8.029543064e-06f, 8.025276501e-06f, 8.020996576e-06f, 8.016703298e-06f, 8.012396676e-06f,
-8.008076719e-06f, 8.003743436e-06f, 7.999396837e-06f, 7.995036930e-06f, 7.990663726e-06f, 7.986277232e-06f, 7.981877459e-06f, 7.977464416e-06f, 7.973038111e-06f, 7.968598555e-06f,
-7.964145757e-06f, 7.959679726e-06f, 7.955200471e-06f, 7.950708002e-06f, 7.946202329e-06f, 7.941683460e-06f, 7.937151406e-06f, 7.932606175e-06f, 7.928047778e-06f, 7.923476224e-06f,
-7.918891523e-06f, 7.914293683e-06f, 7.909682715e-06f, 7.905058629e-06f, 7.900421434e-06f, 7.895771139e-06f, 7.891107755e-06f, 7.886431290e-06f, 7.881741756e-06f, 7.877039162e-06f,
-7.872323516e-06f, 7.867594831e-06f, 7.862853114e-06f, 7.858098376e-06f, 7.853330627e-06f, 7.848549877e-06f, 7.843756135e-06f, 7.838949412e-06f, 7.834129717e-06f, 7.829297061e-06f,
-7.824451454e-06f, 7.819592905e-06f, 7.814721425e-06f, 7.809837023e-06f, 7.804939710e-06f, 7.800029496e-06f, 7.795106391e-06f, 7.790170405e-06f, 7.785221548e-06f, 7.780259831e-06f,
-7.775285264e-06f, 7.770297857e-06f, 7.765297620e-06f, 7.760284563e-06f, 7.755258697e-06f, 7.750220032e-06f, 7.745168579e-06f, 7.740104348e-06f, 7.735027349e-06f, 7.729937592e-06f,
-7.724835088e-06f, 7.719719848e-06f, 7.714591882e-06f, 7.709451200e-06f, 7.704297814e-06f, 7.699131732e-06f, 7.693952967e-06f, 7.688761528e-06f, 7.683557427e-06f, 7.678340673e-06f,
-7.673111278e-06f, 7.667869252e-06f, 7.662614605e-06f, 7.657347349e-06f, 7.652067494e-06f, 7.646775051e-06f, 7.641470030e-06f, 7.636152443e-06f, 7.630822301e-06f, 7.625479613e-06f,
-7.620124391e-06f, 7.614756646e-06f, 7.609376388e-06f, 7.603983629e-06f, 7.598578379e-06f, 7.593160650e-06f, 7.587730452e-06f, 7.582287796e-06f, 7.576832693e-06f, 7.571365155e-06f,
-7.565885192e-06f, 7.560392815e-06f, 7.554888036e-06f, 7.549370866e-06f, 7.543841315e-06f, 7.538299395e-06f, 7.532745117e-06f, 7.527178492e-06f, 7.521599532e-06f, 7.516008247e-06f,
-7.510404649e-06f, 7.504788749e-06f, 7.499160558e-06f, 7.493520088e-06f, 7.487867351e-06f, 7.482202356e-06f, 7.476525116e-06f, 7.470835642e-06f, 7.465133946e-06f, 7.459420038e-06f,
-7.453693931e-06f, 7.447955636e-06f, 7.442205163e-06f, 7.436442526e-06f, 7.430667735e-06f, 7.424880801e-06f, 7.419081737e-06f, 7.413270554e-06f, 7.407447264e-06f, 7.401611877e-06f,
-7.395764407e-06f, 7.389904863e-06f, 7.384033259e-06f, 7.378149606e-06f, 7.372253915e-06f, 7.366346198e-06f, 7.360426468e-06f, 7.354494735e-06f, 7.348551012e-06f, 7.342595310e-06f,
-7.336627641e-06f, 7.330648017e-06f, 7.324656450e-06f, 7.318652952e-06f, 7.312637535e-06f, 7.306610210e-06f, 7.300570990e-06f, 7.294519886e-06f, 7.288456911e-06f, 7.282382076e-06f,
-7.276295394e-06f, 7.270196876e-06f, 7.264086535e-06f, 7.257964383e-06f, 7.251830431e-06f, 7.245684693e-06f, 7.239527179e-06f, 7.233357903e-06f, 7.227176876e-06f, 7.220984110e-06f,
-7.214779618e-06f, 7.208563413e-06f, 7.202335505e-06f, 7.196095908e-06f, 7.189844634e-06f, 7.183581694e-06f, 7.177307103e-06f, 7.171020871e-06f, 7.164723011e-06f, 7.158413535e-06f,
-7.152092457e-06f, 7.145759787e-06f, 7.139415540e-06f, 7.133059726e-06f, 7.126692359e-06f, 7.120313452e-06f, 7.113923016e-06f, 7.107521064e-06f, 7.101107609e-06f, 7.094682663e-06f,
-7.088246239e-06f, 7.081798349e-06f, 7.075339006e-06f, 7.068868224e-06f, 7.062386013e-06f, 7.055892388e-06f, 7.049387360e-06f, 7.042870943e-06f, 7.036343148e-06f, 7.029803990e-06f,
-7.023253480e-06f, 7.016691632e-06f, 7.010118458e-06f, 7.003533971e-06f, 6.996938184e-06f, 6.990331110e-06f, 6.983712761e-06f, 6.977083151e-06f, 6.970442292e-06f, 6.963790198e-06f,
-6.957126880e-06f, 6.950452353e-06f, 6.943766630e-06f, 6.937069722e-06f, 6.930361644e-06f, 6.923642408e-06f, 6.916912027e-06f, 6.910170514e-06f, 6.903417883e-06f, 6.896654147e-06f,
-6.889879318e-06f, 6.883093410e-06f, 6.876296436e-06f, 6.869488409e-06f, 6.862669342e-06f, 6.855839249e-06f, 6.848998143e-06f, 6.842146037e-06f, 6.835282943e-06f, 6.828408877e-06f,
-6.821523850e-06f, 6.814627877e-06f, 6.807720969e-06f, 6.800803142e-06f, 6.793874408e-06f, 6.786934780e-06f, 6.779984273e-06f, 6.773022898e-06f, 6.766050671e-06f, 6.759067603e-06f,
-6.752073710e-06f, 6.745069003e-06f, 6.738053498e-06f, 6.731027206e-06f, 6.723990143e-06f, 6.716942320e-06f, 6.709883753e-06f, 6.702814454e-06f, 6.695734436e-06f, 6.688643715e-06f,
-6.681542303e-06f, 6.674430214e-06f, 6.667307461e-06f, 6.660174059e-06f, 6.653030021e-06f, 6.645875361e-06f, 6.638710092e-06f, 6.631534228e-06f, 6.624347783e-06f, 6.617150771e-06f,
-6.609943206e-06f, 6.602725101e-06f, 6.595496470e-06f, 6.588257328e-06f, 6.581007687e-06f, 6.573747562e-06f, 6.566476967e-06f, 6.559195916e-06f, 6.551904422e-06f, 6.544602500e-06f,
-6.537290163e-06f, 6.529967426e-06f, 6.522634302e-06f, 6.515290806e-06f, 6.507936952e-06f, 6.500572753e-06f, 6.493198223e-06f, 6.485813378e-06f, 6.478418230e-06f, 6.471012794e-06f,
-6.463597085e-06f, 6.456171115e-06f, 6.448734900e-06f, 6.441288454e-06f, 6.433831790e-06f, 6.426364923e-06f, 6.418887868e-06f, 6.411400638e-06f, 6.403903247e-06f, 6.396395711e-06f,
-6.388878043e-06f, 6.381350257e-06f, 6.373812368e-06f, 6.366264391e-06f, 6.358706339e-06f, 6.351138227e-06f, 6.343560069e-06f, 6.335971880e-06f, 6.328373674e-06f, 6.320765466e-06f,
-6.313147270e-06f, 6.305519100e-06f, 6.297880971e-06f, 6.290232898e-06f, 6.282574894e-06f, 6.274906975e-06f, 6.267229155e-06f, 6.259541449e-06f, 6.251843870e-06f, 6.244136434e-06f,
-6.236419156e-06f, 6.228692050e-06f, 6.220955130e-06f, 6.213208411e-06f, 6.205451908e-06f, 6.197685636e-06f, 6.189909609e-06f, 6.182123842e-06f, 6.174328349e-06f, 6.166523146e-06f,
-6.158708247e-06f, 6.150883667e-06f, 6.143049420e-06f, 6.135205522e-06f, 6.127351987e-06f, 6.119488830e-06f, 6.111616067e-06f, 6.103733711e-06f, 6.095841777e-06f, 6.087940282e-06f,
-6.080029238e-06f, 6.072108662e-06f, 6.064178569e-06f, 6.056238972e-06f, 6.048289888e-06f, 6.040331331e-06f, 6.032363316e-06f, 6.024385858e-06f, 6.016398972e-06f, 6.008402673e-06f,
-6.000396977e-06f, 5.992381898e-06f, 5.984357451e-06f, 5.976323652e-06f, 5.968280515e-06f, 5.960228056e-06f, 5.952166290e-06f, 5.944095231e-06f, 5.936014896e-06f, 5.927925299e-06f,
-5.919826455e-06f, 5.911718380e-06f, 5.903601089e-06f, 5.895474597e-06f, 5.887338920e-06f, 5.879194072e-06f, 5.871040068e-06f, 5.862876925e-06f, 5.854704658e-06f, 5.846523281e-06f,
-5.838332810e-06f, 5.830133260e-06f, 5.821924648e-06f, 5.813706987e-06f, 5.805480294e-06f, 5.797244584e-06f, 5.788999873e-06f, 5.780746175e-06f, 5.772483506e-06f, 5.764211882e-06f,
-5.755931318e-06f, 5.747641829e-06f, 5.739343432e-06f, 5.731036141e-06f, 5.722719972e-06f, 5.714394941e-06f, 5.706061063e-06f, 5.697718354e-06f, 5.689366829e-06f, 5.681006504e-06f,
-5.672637395e-06f, 5.664259516e-06f, 5.655872884e-06f, 5.647477515e-06f, 5.639073424e-06f, 5.630660626e-06f, 5.622239137e-06f, 5.613808974e-06f, 5.605370151e-06f, 5.596922685e-06f,
-5.588466591e-06f, 5.580001885e-06f, 5.571528583e-06f, 5.563046700e-06f, 5.554556252e-06f, 5.546057255e-06f, 5.537549725e-06f, 5.529033678e-06f, 5.520509129e-06f, 5.511976095e-06f,
-5.503434590e-06f, 5.494884632e-06f, 5.486326236e-06f, 5.477759417e-06f, 5.469184192e-06f, 5.460600577e-06f, 5.452008588e-06f, 5.443408240e-06f, 5.434799549e-06f, 5.426182532e-06f,
-5.417557205e-06f, 5.408923582e-06f, 5.400281682e-06f, 5.391631518e-06f, 5.382973109e-06f, 5.374306469e-06f, 5.365631614e-06f, 5.356948561e-06f, 5.348257326e-06f, 5.339557925e-06f,
-5.330850373e-06f, 5.322134688e-06f, 5.313410885e-06f, 5.304678980e-06f, 5.295938990e-06f, 5.287190931e-06f, 5.278434818e-06f, 5.269670668e-06f, 5.260898498e-06f, 5.252118323e-06f,
-5.243330159e-06f, 5.234534024e-06f, 5.225729933e-06f, 5.216917902e-06f, 5.208097948e-06f, 5.199270087e-06f, 5.190434335e-06f, 5.181590708e-06f, 5.172739224e-06f, 5.163879898e-06f,
-5.155012746e-06f, 5.146137786e-06f, 5.137255032e-06f, 5.128364503e-06f, 5.119466213e-06f, 5.110560180e-06f, 5.101646419e-06f, 5.092724948e-06f, 5.083795783e-06f, 5.074858940e-06f,
-5.065914435e-06f, 5.056962286e-06f, 5.048002508e-06f, 5.039035118e-06f, 5.030060133e-06f, 5.021077569e-06f, 5.012087442e-06f, 5.003089770e-06f, 4.994084568e-06f, 4.985071854e-06f,
-4.976051643e-06f, 4.967023953e-06f, 4.957988799e-06f, 4.948946199e-06f, 4.939896170e-06f, 4.930838727e-06f, 4.921773887e-06f, 4.912701668e-06f, 4.903622085e-06f, 4.894535156e-06f,
-4.885440897e-06f, 4.876339324e-06f, 4.867230455e-06f, 4.858114307e-06f, 4.848990895e-06f, 4.839860236e-06f, 4.830722348e-06f, 4.821577247e-06f, 4.812424950e-06f, 4.803265473e-06f,
-4.794098834e-06f, 4.784925049e-06f, 4.775744135e-06f, 4.766556109e-06f, 4.757360987e-06f, 4.748158787e-06f, 4.738949525e-06f, 4.729733218e-06f, 4.720509883e-06f, 4.711279537e-06f,
-4.702042197e-06f, 4.692797879e-06f, 4.683546601e-06f, 4.674288380e-06f, 4.665023231e-06f, 4.655751173e-06f, 4.646472223e-06f, 4.637186396e-06f, 4.627893711e-06f, 4.618594183e-06f,
-4.609287831e-06f, 4.599974671e-06f, 4.590654720e-06f, 4.581327995e-06f, 4.571994513e-06f, 4.562654291e-06f, 4.553307347e-06f, 4.543953696e-06f, 4.534593357e-06f, 4.525226346e-06f,
-4.515852681e-06f, 4.506472378e-06f, 4.497085455e-06f, 4.487691928e-06f, 4.478291816e-06f, 4.468885134e-06f, 4.459471900e-06f, 4.450052132e-06f, 4.440625845e-06f, 4.431193059e-06f,
-4.421753789e-06f, 4.412308053e-06f, 4.402855868e-06f, 4.393397251e-06f, 4.383932219e-06f, 4.374460790e-06f, 4.364982982e-06f, 4.355498810e-06f, 4.346008292e-06f, 4.336511446e-06f,
-4.327008289e-06f, 4.317498838e-06f, 4.307983111e-06f, 4.298461124e-06f, 4.288932895e-06f, 4.279398442e-06f, 4.269857780e-06f, 4.260310929e-06f, 4.250757905e-06f, 4.241198726e-06f,
-4.231633408e-06f, 4.222061970e-06f, 4.212484429e-06f, 4.202900801e-06f, 4.193311105e-06f, 4.183715357e-06f, 4.174113575e-06f, 4.164505778e-06f, 4.154891981e-06f, 4.145272202e-06f,
-4.135646459e-06f, 4.126014769e-06f, 4.116377151e-06f, 4.106733620e-06f, 4.097084194e-06f, 4.087428892e-06f, 4.077767730e-06f, 4.068100727e-06f, 4.058427898e-06f, 4.048749263e-06f,
-4.039064838e-06f, 4.029374642e-06f, 4.019678690e-06f, 4.009977002e-06f, 4.000269595e-06f, 3.990556485e-06f, 3.980837692e-06f, 3.971113231e-06f, 3.961383122e-06f, 3.951647380e-06f,
-3.941906025e-06f, 3.932159073e-06f, 3.922406543e-06f, 3.912648451e-06f, 3.902884816e-06f, 3.893115654e-06f, 3.883340985e-06f, 3.873560824e-06f, 3.863775191e-06f, 3.853984102e-06f,
-3.844187575e-06f, 3.834385628e-06f, 3.824578279e-06f, 3.814765545e-06f, 3.804947444e-06f, 3.795123993e-06f, 3.785295211e-06f, 3.775461115e-06f, 3.765621722e-06f, 3.755777051e-06f,
-3.745927120e-06f, 3.736071945e-06f, 3.726211545e-06f, 3.716345937e-06f, 3.706475139e-06f, 3.696599170e-06f, 3.686718046e-06f, 3.676831785e-06f, 3.666940406e-06f, 3.657043925e-06f,
-3.647142362e-06f, 3.637235733e-06f, 3.627324057e-06f, 3.617407351e-06f, 3.607485633e-06f, 3.597558921e-06f, 3.587627232e-06f, 3.577690586e-06f, 3.567748998e-06f, 3.557802488e-06f,
-3.547851073e-06f, 3.537894772e-06f, 3.527933601e-06f, 3.517967578e-06f, 3.507996723e-06f, 3.498021052e-06f, 3.488040583e-06f, 3.478055335e-06f, 3.468065324e-06f, 3.458070571e-06f,
-3.448071091e-06f, 3.438066903e-06f, 3.428058025e-06f, 3.418044475e-06f, 3.408026271e-06f, 3.398003430e-06f, 3.387975971e-06f, 3.377943912e-06f, 3.367907271e-06f, 3.357866065e-06f,
-3.347820313e-06f, 3.337770032e-06f, 3.327715241e-06f, 3.317655958e-06f, 3.307592200e-06f, 3.297523985e-06f, 3.287451333e-06f, 3.277374259e-06f, 3.267292784e-06f, 3.257206924e-06f,
-3.247116698e-06f, 3.237022123e-06f, 3.226923219e-06f, 3.216820002e-06f, 3.206712491e-06f, 3.196600704e-06f, 3.186484658e-06f, 3.176364373e-06f, 3.166239866e-06f, 3.156111156e-06f,
-3.145978259e-06f, 3.135841195e-06f, 3.125699982e-06f, 3.115554637e-06f, 3.105405179e-06f, 3.095251625e-06f, 3.085093995e-06f, 3.074932305e-06f, 3.064766575e-06f, 3.054596822e-06f,
-3.044423064e-06f, 3.034245320e-06f, 3.024063608e-06f, 3.013877945e-06f, 3.003688351e-06f, 2.993494842e-06f, 2.983297438e-06f, 2.973096156e-06f, 2.962891015e-06f, 2.952682033e-06f,
-2.942469228e-06f, 2.932252618e-06f, 2.922032221e-06f, 2.911808056e-06f, 2.901580141e-06f, 2.891348493e-06f, 2.881113132e-06f, 2.870874075e-06f, 2.860631341e-06f, 2.850384947e-06f,
-2.840134913e-06f, 2.829881256e-06f, 2.819623994e-06f, 2.809363146e-06f, 2.799098729e-06f, 2.788830763e-06f, 2.778559266e-06f, 2.768284255e-06f, 2.758005749e-06f, 2.747723766e-06f,
-2.737438324e-06f, 2.727149442e-06f, 2.716857138e-06f, 2.706561431e-06f, 2.696262337e-06f, 2.685959877e-06f, 2.675654068e-06f, 2.665344928e-06f, 2.655032475e-06f, 2.644716729e-06f,
-2.634397706e-06f, 2.624075426e-06f, 2.613749907e-06f, 2.603421168e-06f, 2.593089225e-06f, 2.582754098e-06f, 2.572415805e-06f, 2.562074365e-06f, 2.551729795e-06f, 2.541382115e-06f,
-2.531031341e-06f, 2.520677493e-06f, 2.510320590e-06f, 2.499960648e-06f, 2.489597687e-06f, 2.479231726e-06f, 2.468862781e-06f, 2.458490872e-06f, 2.448116018e-06f, 2.437738235e-06f,
-2.427357544e-06f, 2.416973961e-06f, 2.406587506e-06f, 2.396198197e-06f, 2.385806052e-06f, 2.375411089e-06f, 2.365013328e-06f, 2.354612785e-06f, 2.344209481e-06f, 2.333803432e-06f,
-2.323394658e-06f, 2.312983177e-06f, 2.302569007e-06f, 2.292152167e-06f, 2.281732674e-06f, 2.271310548e-06f, 2.260885807e-06f, 2.250458469e-06f, 2.240028552e-06f, 2.229596076e-06f,
-2.219161058e-06f, 2.208723516e-06f, 2.198283470e-06f, 2.187840938e-06f, 2.177395937e-06f, 2.166948487e-06f, 2.156498606e-06f, 2.146046312e-06f, 2.135591623e-06f, 2.125134559e-06f,
-2.114675137e-06f, 2.104213376e-06f, 2.093749295e-06f, 2.083282911e-06f, 2.072814244e-06f, 2.062343311e-06f, 2.051870132e-06f, 2.041394724e-06f, 2.030917105e-06f, 2.020437296e-06f,
-2.009955313e-06f, 1.999471175e-06f, 1.988984901e-06f, 1.978496510e-06f, 1.968006019e-06f, 1.957513447e-06f, 1.947018812e-06f, 1.936522134e-06f, 1.926023430e-06f, 1.915522718e-06f,
-1.905020018e-06f, 1.894515348e-06f, 1.884008726e-06f, 1.873500171e-06f, 1.862989701e-06f, 1.852477334e-06f, 1.841963089e-06f, 1.831446985e-06f, 1.820929040e-06f, 1.810409273e-06f,
-1.799887701e-06f, 1.789364343e-06f, 1.778839219e-06f, 1.768312346e-06f, 1.757783742e-06f, 1.747253427e-06f, 1.736721418e-06f, 1.726187734e-06f, 1.715652394e-06f, 1.705115416e-06f,
-1.694576819e-06f, 1.684036621e-06f, 1.673494840e-06f, 1.662951495e-06f, 1.652406604e-06f, 1.641860187e-06f, 1.631312260e-06f, 1.620762844e-06f, 1.610211956e-06f, 1.599659615e-06f,
-1.589105839e-06f, 1.578550646e-06f, 1.567994056e-06f, 1.557436086e-06f, 1.546876756e-06f, 1.536316083e-06f, 1.525754086e-06f, 1.515190784e-06f, 1.504626195e-06f, 1.494060337e-06f,
-1.483493230e-06f, 1.472924891e-06f, 1.462355338e-06f, 1.451784591e-06f, 1.441212668e-06f, 1.430639587e-06f, 1.420065367e-06f, 1.409490026e-06f, 1.398913583e-06f, 1.388336057e-06f,
-1.377757464e-06f, 1.367177825e-06f, 1.356597158e-06f, 1.346015481e-06f, 1.335432812e-06f, 1.324849170e-06f, 1.314264573e-06f, 1.303679041e-06f, 1.293092591e-06f, 1.282505242e-06f,
-1.271917012e-06f, 1.261327920e-06f, 1.250737984e-06f, 1.240147223e-06f, 1.229555655e-06f, 1.218963298e-06f, 1.208370172e-06f, 1.197776294e-06f, 1.187181683e-06f, 1.176586358e-06f,
-1.165990336e-06f, 1.155393637e-06f, 1.144796279e-06f, 1.134198280e-06f, 1.123599658e-06f, 1.113000433e-06f, 1.102400622e-06f, 1.091800245e-06f, 1.081199318e-06f, 1.070597862e-06f,
-1.059995894e-06f, 1.049393433e-06f, 1.038790497e-06f, 1.028187105e-06f, 1.017583275e-06f, 1.006979025e-06f, 9.963743742e-07f, 9.857693409e-07f, 9.751639433e-07f, 9.645582000e-07f,
-9.539521294e-07f, 9.433457499e-07f, 9.327390799e-07f, 9.221321378e-07f, 9.115249420e-07f, 9.009175110e-07f, 8.903098631e-07f, 8.797020169e-07f, 8.690939906e-07f, 8.584858027e-07f,
-8.478774717e-07f, 8.372690158e-07f, 8.266604535e-07f, 8.160518033e-07f, 8.054430834e-07f, 7.948343123e-07f, 7.842255085e-07f, 7.736166901e-07f, 7.630078758e-07f, 7.523990838e-07f,
-7.417903325e-07f, 7.311816404e-07f, 7.205730257e-07f, 7.099645069e-07f, 6.993561024e-07f, 6.887478304e-07f, 6.781397094e-07f, 6.675317578e-07f, 6.569239939e-07f, 6.463164360e-07f,
-6.357091025e-07f, 6.251020119e-07f, 6.144951823e-07f, 6.038886323e-07f, 5.932823800e-07f, 5.826764439e-07f, 5.720708424e-07f, 5.614655936e-07f, 5.508607161e-07f, 5.402562281e-07f,
-5.296521479e-07f, 5.190484939e-07f, 5.084452843e-07f, 4.978425376e-07f, 4.872402720e-07f, 4.766385058e-07f, 4.660372574e-07f, 4.554365450e-07f, 4.448363870e-07f, 4.342368017e-07f,
-4.236378073e-07f, 4.130394222e-07f, 4.024416646e-07f, 3.918445528e-07f, 3.812481051e-07f, 3.706523399e-07f, 3.600572753e-07f, 3.494629296e-07f, 3.388693212e-07f, 3.282764682e-07f,
-3.176843890e-07f, 3.070931018e-07f, 2.965026248e-07f, 2.859129763e-07f, 2.753241746e-07f, 2.647362378e-07f, 2.541491844e-07f, 2.435630323e-07f, 2.329778000e-07f, 2.223935056e-07f,
-2.118101674e-07f, 2.012278035e-07f, 1.906464323e-07f, 1.800660718e-07f, 1.694867404e-07f, 1.589084561e-07f, 1.483312373e-07f, 1.377551021e-07f, 1.271800687e-07f, 1.166061553e-07f,
-1.060333801e-07f, 9.546176124e-08f, 8.489131690e-08f, 7.432206526e-08f, 6.375402448e-08f, 5.318721274e-08f, 4.262164818e-08f, 3.205734896e-08f, 2.149433322e-08f, 1.093261911e-08f,
-3.722247716e-10f, -1.018683166e-08f, -2.074453207e-08f, -3.130085831e-08f, -4.185579228e-08f, -5.240931585e-08f, -6.296141091e-08f, -7.351205936e-08f, -8.406124310e-08f, -9.460894402e-08f,
--1.051551440e-07f, -1.156998251e-07f, -1.262429690e-07f, -1.367845579e-07f, -1.473245735e-07f, -1.578629978e-07f, -1.683998127e-07f, -1.789350003e-07f, -1.894685423e-07f, -2.000004209e-07f,
--2.105306180e-07f, -2.210591154e-07f, -2.315858952e-07f, -2.421109394e-07f, -2.526342300e-07f, -2.631557488e-07f, -2.736754780e-07f, -2.841933995e-07f, -2.947094953e-07f, -3.052237474e-07f,
--3.157361378e-07f, -3.262466486e-07f, -3.367552617e-07f, -3.472619593e-07f, -3.577667233e-07f, -3.682695357e-07f, -3.787703787e-07f, -3.892692342e-07f, -3.997660844e-07f, -4.102609112e-07f,
--4.207536968e-07f, -4.312444232e-07f, -4.417330725e-07f, -4.522196269e-07f, -4.627040683e-07f, -4.731863789e-07f, -4.836665407e-07f, -4.941445360e-07f, -5.046203468e-07f, -5.150939552e-07f,
--5.255653434e-07f, -5.360344935e-07f, -5.465013876e-07f, -5.569660079e-07f, -5.674283365e-07f, -5.778883557e-07f, -5.883460474e-07f, -5.988013940e-07f, -6.092543777e-07f, -6.197049805e-07f,
--6.301531847e-07f, -6.405989724e-07f, -6.510423260e-07f, -6.614832275e-07f, -6.719216592e-07f, -6.823576034e-07f, -6.927910422e-07f, -7.032219579e-07f, -7.136503328e-07f, -7.240761490e-07f,
--7.344993889e-07f, -7.449200347e-07f, -7.553380687e-07f, -7.657534731e-07f, -7.761662302e-07f, -7.865763224e-07f, -7.969837318e-07f, -8.073884409e-07f, -8.177904320e-07f, -8.281896872e-07f,
--8.385861891e-07f, -8.489799199e-07f, -8.593708619e-07f, -8.697589974e-07f, -8.801443090e-07f, -8.905267788e-07f, -9.009063893e-07f, -9.112831228e-07f, -9.216569618e-07f, -9.320278885e-07f,
--9.423958855e-07f, -9.527609351e-07f, -9.631230197e-07f, -9.734821217e-07f, -9.838382236e-07f, -9.941913078e-07f, -1.004541357e-06f, -1.014888353e-06f, -1.025232279e-06f, -1.035573117e-06f,
--1.045910849e-06f, -1.056245458e-06f, -1.066576927e-06f, -1.076905238e-06f, -1.087230374e-06f, -1.097552317e-06f, -1.107871049e-06f, -1.118186553e-06f, -1.128498812e-06f, -1.138807808e-06f,
--1.149113524e-06f, -1.159415942e-06f, -1.169715044e-06f, -1.180010814e-06f, -1.190303235e-06f, -1.200592287e-06f, -1.210877955e-06f, -1.221160221e-06f, -1.231439067e-06f, -1.241714475e-06f,
--1.251986430e-06f, -1.262254913e-06f, -1.272519906e-06f, -1.282781394e-06f, -1.293039357e-06f, -1.303293779e-06f, -1.313544643e-06f, -1.323791931e-06f, -1.334035626e-06f, -1.344275711e-06f,
--1.354512168e-06f, -1.364744980e-06f, -1.374974130e-06f, -1.385199600e-06f, -1.395421374e-06f, -1.405639434e-06f, -1.415853762e-06f, -1.426064342e-06f, -1.436271157e-06f, -1.446474188e-06f,
--1.456673420e-06f, -1.466868834e-06f, -1.477060414e-06f, -1.487248142e-06f, -1.497432001e-06f, -1.507611975e-06f, -1.517788045e-06f, -1.527960195e-06f, -1.538128408e-06f, -1.548292666e-06f,
--1.558452952e-06f, -1.568609250e-06f, -1.578761542e-06f, -1.588909811e-06f, -1.599054041e-06f, -1.609194213e-06f, -1.619330311e-06f, -1.629462318e-06f, -1.639590216e-06f, -1.649713990e-06f,
--1.659833621e-06f, -1.669949093e-06f, -1.680060389e-06f, -1.690167491e-06f, -1.700270384e-06f, -1.710369049e-06f, -1.720463469e-06f, -1.730553629e-06f, -1.740639511e-06f, -1.750721097e-06f,
--1.760798372e-06f, -1.770871318e-06f, -1.780939918e-06f, -1.791004155e-06f, -1.801064013e-06f, -1.811119475e-06f, -1.821170523e-06f, -1.831217141e-06f, -1.841259311e-06f, -1.851297019e-06f,
--1.861330245e-06f, -1.871358974e-06f, -1.881383188e-06f, -1.891402872e-06f, -1.901418007e-06f, -1.911428578e-06f, -1.921434568e-06f, -1.931435959e-06f, -1.941432735e-06f, -1.951424880e-06f,
--1.961412376e-06f, -1.971395207e-06f, -1.981373356e-06f, -1.991346807e-06f, -2.001315542e-06f, -2.011279546e-06f, -2.021238800e-06f, -2.031193290e-06f, -2.041142998e-06f, -2.051087907e-06f,
--2.061028001e-06f, -2.070963263e-06f, -2.080893677e-06f, -2.090819226e-06f, -2.100739893e-06f, -2.110655663e-06f, -2.120566517e-06f, -2.130472440e-06f, -2.140373416e-06f, -2.150269427e-06f,
--2.160160457e-06f, -2.170046490e-06f, -2.179927510e-06f, -2.189803498e-06f, -2.199674440e-06f, -2.209540319e-06f, -2.219401118e-06f, -2.229256821e-06f, -2.239107411e-06f, -2.248952872e-06f,
--2.258793188e-06f, -2.268628342e-06f, -2.278458318e-06f, -2.288283099e-06f, -2.298102669e-06f, -2.307917011e-06f, -2.317726110e-06f, -2.327529949e-06f, -2.337328512e-06f, -2.347121782e-06f,
--2.356909743e-06f, -2.366692379e-06f, -2.376469673e-06f, -2.386241610e-06f, -2.396008172e-06f, -2.405769344e-06f, -2.415525110e-06f, -2.425275453e-06f, -2.435020357e-06f, -2.444759805e-06f,
--2.454493783e-06f, -2.464222273e-06f, -2.473945259e-06f, -2.483662725e-06f, -2.493374656e-06f, -2.503081034e-06f, -2.512781845e-06f, -2.522477070e-06f, -2.532166696e-06f, -2.541850705e-06f,
--2.551529081e-06f, -2.561201809e-06f, -2.570868872e-06f, -2.580530254e-06f, -2.590185940e-06f, -2.599835913e-06f, -2.609480157e-06f, -2.619118657e-06f, -2.628751396e-06f, -2.638378358e-06f,
--2.647999527e-06f, -2.657614888e-06f, -2.667224425e-06f, -2.676828121e-06f, -2.686425961e-06f, -2.696017928e-06f, -2.705604008e-06f, -2.715184183e-06f, -2.724758439e-06f, -2.734326760e-06f,
--2.743889128e-06f, -2.753445530e-06f, -2.762995948e-06f, -2.772540368e-06f, -2.782078773e-06f, -2.791611148e-06f, -2.801137476e-06f, -2.810657743e-06f, -2.820171932e-06f, -2.829680027e-06f,
--2.839182014e-06f, -2.848677875e-06f, -2.858167597e-06f, -2.867651162e-06f, -2.877128555e-06f, -2.886599761e-06f, -2.896064765e-06f, -2.905523549e-06f, -2.914976099e-06f, -2.924422400e-06f,
--2.933862435e-06f, -2.943296189e-06f, -2.952723646e-06f, -2.962144792e-06f, -2.971559609e-06f, -2.980968084e-06f, -2.990370200e-06f, -2.999765943e-06f, -3.009155295e-06f, -3.018538243e-06f,
--3.027914770e-06f, -3.037284861e-06f, -3.046648501e-06f, -3.056005674e-06f, -3.065356365e-06f, -3.074700559e-06f, -3.084038239e-06f, -3.093369392e-06f, -3.102694000e-06f, -3.112012050e-06f,
--3.121323526e-06f, -3.130628412e-06f, -3.139926694e-06f, -3.149218355e-06f, -3.158503381e-06f, -3.167781756e-06f, -3.177053466e-06f, -3.186318494e-06f, -3.195576827e-06f, -3.204828447e-06f,
--3.214073342e-06f, -3.223311494e-06f, -3.232542889e-06f, -3.241767513e-06f, -3.250985349e-06f, -3.260196382e-06f, -3.269400599e-06f, -3.278597983e-06f, -3.287788519e-06f, -3.296972192e-06f,
--3.306148988e-06f, -3.315318891e-06f, -3.324481887e-06f, -3.333637959e-06f, -3.342787094e-06f, -3.351929277e-06f, -3.361064491e-06f, -3.370192723e-06f, -3.379313957e-06f, -3.388428179e-06f,
--3.397535374e-06f, -3.406635526e-06f, -3.415728621e-06f, -3.424814645e-06f, -3.433893581e-06f, -3.442965415e-06f, -3.452030134e-06f, -3.461087720e-06f, -3.470138161e-06f, -3.479181441e-06f,
--3.488217545e-06f, -3.497246459e-06f, -3.506268168e-06f, -3.515282657e-06f, -3.524289911e-06f, -3.533289916e-06f, -3.542282657e-06f, -3.551268120e-06f, -3.560246290e-06f, -3.569217151e-06f,
--3.578180690e-06f, -3.587136892e-06f, -3.596085743e-06f, -3.605027227e-06f, -3.613961330e-06f, -3.622888038e-06f, -3.631807336e-06f, -3.640719210e-06f, -3.649623645e-06f, -3.658520626e-06f,
--3.667410140e-06f, -3.676292171e-06f, -3.685166705e-06f, -3.694033729e-06f, -3.702893227e-06f, -3.711745184e-06f, -3.720589588e-06f, -3.729426422e-06f, -3.738255674e-06f, -3.747077328e-06f,
--3.755891371e-06f, -3.764697787e-06f, -3.773496563e-06f, -3.782287684e-06f, -3.791071137e-06f, -3.799846906e-06f, -3.808614978e-06f, -3.817375338e-06f, -3.826127973e-06f, -3.834872867e-06f,
--3.843610008e-06f, -3.852339380e-06f, -3.861060970e-06f, -3.869774763e-06f, -3.878480745e-06f, -3.887178903e-06f, -3.895869222e-06f, -3.904551688e-06f, -3.913226286e-06f, -3.921893004e-06f,
--3.930551827e-06f, -3.939202741e-06f, -3.947845732e-06f, -3.956480786e-06f, -3.965107889e-06f, -3.973727027e-06f, -3.982338186e-06f, -3.990941352e-06f, -3.999536512e-06f, -4.008123652e-06f,
--4.016702757e-06f, -4.025273814e-06f, -4.033836808e-06f, -4.042391727e-06f, -4.050938557e-06f, -4.059477283e-06f, -4.068007891e-06f, -4.076530369e-06f, -4.085044702e-06f, -4.093550877e-06f,
--4.102048879e-06f, -4.110538696e-06f, -4.119020314e-06f, -4.127493718e-06f, -4.135958895e-06f, -4.144415832e-06f, -4.152864515e-06f, -4.161304931e-06f, -4.169737065e-06f, -4.178160905e-06f,
--4.186576436e-06f, -4.194983645e-06f, -4.203382519e-06f, -4.211773045e-06f, -4.220155208e-06f, -4.228528995e-06f, -4.236894393e-06f, -4.245251389e-06f, -4.253599968e-06f, -4.261940118e-06f,
--4.270271825e-06f, -4.278595076e-06f, -4.286909858e-06f, -4.295216156e-06f, -4.303513959e-06f, -4.311803252e-06f, -4.320084022e-06f, -4.328356256e-06f, -4.336619941e-06f, -4.344875063e-06f,
--4.353121609e-06f, -4.361359567e-06f, -4.369588922e-06f, -4.377809663e-06f, -4.386021774e-06f, -4.394225244e-06f, -4.402420060e-06f, -4.410606207e-06f, -4.418783674e-06f, -4.426952447e-06f,
--4.435112513e-06f, -4.443263858e-06f, -4.451406471e-06f, -4.459540338e-06f, -4.467665445e-06f, -4.475781781e-06f, -4.483889331e-06f, -4.491988084e-06f, -4.500078026e-06f, -4.508159144e-06f,
--4.516231426e-06f, -4.524294858e-06f, -4.532349428e-06f, -4.540395122e-06f, -4.548431929e-06f, -4.556459835e-06f, -4.564478827e-06f, -4.572488894e-06f, -4.580490021e-06f, -4.588482196e-06f,
--4.596465407e-06f, -4.604439640e-06f, -4.612404884e-06f, -4.620361126e-06f, -4.628308352e-06f, -4.636246550e-06f, -4.644175708e-06f, -4.652095813e-06f, -4.660006852e-06f, -4.667908814e-06f,
--4.675801684e-06f, -4.683685452e-06f, -4.691560103e-06f, -4.699425627e-06f, -4.707282010e-06f, -4.715129240e-06f, -4.722967304e-06f, -4.730796191e-06f, -4.738615887e-06f, -4.746426380e-06f,
--4.754227658e-06f, -4.762019709e-06f, -4.769802520e-06f, -4.777576079e-06f, -4.785340373e-06f, -4.793095391e-06f, -4.800841120e-06f, -4.808577548e-06f, -4.816304662e-06f, -4.824022451e-06f,
--4.831730902e-06f, -4.839430003e-06f, -4.847119742e-06f, -4.854800107e-06f, -4.862471085e-06f, -4.870132665e-06f, -4.877784835e-06f, -4.885427581e-06f, -4.893060893e-06f, -4.900684759e-06f,
--4.908299166e-06f, -4.915904102e-06f, -4.923499555e-06f, -4.931085514e-06f, -4.938661966e-06f, -4.946228900e-06f, -4.953786304e-06f, -4.961334165e-06f, -4.968872472e-06f, -4.976401213e-06f,
--4.983920376e-06f, -4.991429950e-06f, -4.998929922e-06f, -5.006420281e-06f, -5.013901015e-06f, -5.021372113e-06f, -5.028833562e-06f, -5.036285351e-06f, -5.043727468e-06f, -5.051159902e-06f,
--5.058582640e-06f, -5.065995672e-06f, -5.073398986e-06f, -5.080792569e-06f, -5.088176411e-06f, -5.095550500e-06f, -5.102914824e-06f, -5.110269373e-06f, -5.117614133e-06f, -5.124949095e-06f,
--5.132274246e-06f, -5.139589575e-06f, -5.146895070e-06f, -5.154190721e-06f, -5.161476515e-06f, -5.168752442e-06f, -5.176018489e-06f, -5.183274647e-06f, -5.190520902e-06f, -5.197757245e-06f,
--5.204983664e-06f, -5.212200147e-06f, -5.219406684e-06f, -5.226603262e-06f, -5.233789871e-06f, -5.240966501e-06f, -5.248133138e-06f, -5.255289773e-06f, -5.262436394e-06f, -5.269572990e-06f,
--5.276699551e-06f, -5.283816064e-06f, -5.290922519e-06f, -5.298018905e-06f, -5.305105211e-06f, -5.312181426e-06f, -5.319247539e-06f, -5.326303538e-06f, -5.333349414e-06f, -5.340385154e-06f,
--5.347410749e-06f, -5.354426187e-06f, -5.361431458e-06f, -5.368426549e-06f, -5.375411452e-06f, -5.382386155e-06f, -5.389350647e-06f, -5.396304917e-06f, -5.403248954e-06f, -5.410182749e-06f,
--5.417106290e-06f, -5.424019566e-06f, -5.430922567e-06f, -5.437815282e-06f, -5.444697701e-06f, -5.451569813e-06f, -5.458431607e-06f, -5.465283072e-06f, -5.472124199e-06f, -5.478954976e-06f,
--5.485775394e-06f, -5.492585441e-06f, -5.499385107e-06f, -5.506174382e-06f, -5.512953255e-06f, -5.519721716e-06f, -5.526479754e-06f, -5.533227360e-06f, -5.539964522e-06f, -5.546691230e-06f,
--5.553407474e-06f, -5.560113244e-06f, -5.566808529e-06f, -5.573493319e-06f, -5.580167605e-06f, -5.586831374e-06f, -5.593484619e-06f, -5.600127327e-06f, -5.606759489e-06f, -5.613381096e-06f,
--5.619992136e-06f, -5.626592600e-06f, -5.633182477e-06f, -5.639761758e-06f, -5.646330432e-06f, -5.652888490e-06f, -5.659435921e-06f, -5.665972716e-06f, -5.672498864e-06f, -5.679014355e-06f,
--5.685519180e-06f, -5.692013329e-06f, -5.698496792e-06f, -5.704969558e-06f, -5.711431618e-06f, -5.717882962e-06f, -5.724323581e-06f, -5.730753465e-06f, -5.737172603e-06f, -5.743580986e-06f,
--5.749978604e-06f, -5.756365448e-06f, -5.762741508e-06f, -5.769106774e-06f, -5.775461237e-06f, -5.781804887e-06f, -5.788137714e-06f, -5.794459708e-06f, -5.800770861e-06f, -5.807071162e-06f,
--5.813360602e-06f, -5.819639172e-06f, -5.825906862e-06f, -5.832163662e-06f, -5.838409564e-06f, -5.844644557e-06f, -5.850868632e-06f, -5.857081780e-06f, -5.863283992e-06f, -5.869475258e-06f,
--5.875655568e-06f, -5.881824914e-06f, -5.887983287e-06f, -5.894130676e-06f, -5.900267072e-06f, -5.906392467e-06f, -5.912506852e-06f, -5.918610216e-06f, -5.924702551e-06f, -5.930783848e-06f,
--5.936854097e-06f, -5.942913290e-06f, -5.948961417e-06f, -5.954998469e-06f, -5.961024438e-06f, -5.967039313e-06f, -5.973043087e-06f, -5.979035750e-06f, -5.985017293e-06f, -5.990987708e-06f,
--5.996946985e-06f, -6.002895115e-06f, -6.008832090e-06f, -6.014757900e-06f, -6.020672538e-06f, -6.026575993e-06f, -6.032468257e-06f, -6.038349322e-06f, -6.044219179e-06f, -6.050077818e-06f,
--6.055925232e-06f, -6.061761411e-06f, -6.067586346e-06f, -6.073400030e-06f, -6.079202454e-06f, -6.084993608e-06f, -6.090773485e-06f, -6.096542075e-06f, -6.102299370e-06f, -6.108045362e-06f,
--6.113780042e-06f, -6.119503402e-06f, -6.125215432e-06f, -6.130916126e-06f, -6.136605473e-06f, -6.142283466e-06f, -6.147950097e-06f, -6.153605357e-06f, -6.159249237e-06f, -6.164881730e-06f,
--6.170502827e-06f, -6.176112519e-06f, -6.181710799e-06f, -6.187297659e-06f, -6.192873089e-06f, -6.198437082e-06f, -6.203989630e-06f, -6.209530724e-06f, -6.215060356e-06f, -6.220578519e-06f,
--6.226085203e-06f, -6.231580402e-06f, -6.237064107e-06f, -6.242536309e-06f, -6.247997002e-06f, -6.253446176e-06f, -6.258883824e-06f, -6.264309939e-06f, -6.269724511e-06f, -6.275127533e-06f,
--6.280518998e-06f, -6.285898897e-06f, -6.291267222e-06f, -6.296623967e-06f, -6.301969122e-06f, -6.307302680e-06f, -6.312624633e-06f, -6.317934974e-06f, -6.323233695e-06f, -6.328520788e-06f,
--6.333796246e-06f, -6.339060060e-06f, -6.344312224e-06f, -6.349552729e-06f, -6.354781568e-06f, -6.359998733e-06f, -6.365204218e-06f, -6.370398013e-06f, -6.375580113e-06f, -6.380750509e-06f,
--6.385909193e-06f, -6.391056159e-06f, -6.396191399e-06f, -6.401314906e-06f, -6.406426671e-06f, -6.411526689e-06f, -6.416614951e-06f, -6.421691450e-06f, -6.426756179e-06f, -6.431809131e-06f,
--6.436850298e-06f, -6.441879673e-06f, -6.446897249e-06f, -6.451903019e-06f, -6.456896975e-06f, -6.461879110e-06f, -6.466849418e-06f, -6.471807891e-06f, -6.476754522e-06f, -6.481689304e-06f,
--6.486612230e-06f, -6.491523293e-06f, -6.496422486e-06f, -6.501309802e-06f, -6.506185234e-06f, -6.511048775e-06f, -6.515900418e-06f, -6.520740157e-06f, -6.525567983e-06f, -6.530383892e-06f,
--6.535187875e-06f, -6.539979926e-06f, -6.544760038e-06f, -6.549528205e-06f, -6.554284419e-06f, -6.559028674e-06f, -6.563760964e-06f, -6.568481281e-06f, -6.573189618e-06f, -6.577885971e-06f,
--6.582570330e-06f, -6.587242691e-06f, -6.591903047e-06f, -6.596551390e-06f, -6.601187715e-06f, -6.605812015e-06f, -6.610424283e-06f, -6.615024513e-06f, -6.619612699e-06f, -6.624188834e-06f,
--6.628752911e-06f, -6.633304925e-06f, -6.637844870e-06f, -6.642372737e-06f, -6.646888523e-06f, -6.651392219e-06f, -6.655883820e-06f, -6.660363320e-06f, -6.664830712e-06f, -6.669285991e-06f,
--6.673729149e-06f, -6.678160181e-06f, -6.682579081e-06f, -6.686985843e-06f, -6.691380460e-06f, -6.695762927e-06f, -6.700133237e-06f, -6.704491384e-06f, -6.708837363e-06f, -6.713171168e-06f,
--6.717492791e-06f, -6.721802229e-06f, -6.726099474e-06f, -6.730384520e-06f, -6.734657363e-06f, -6.738917996e-06f, -6.743166412e-06f, -6.747402607e-06f, -6.751626575e-06f, -6.755838310e-06f,
--6.760037805e-06f, -6.764225056e-06f, -6.768400057e-06f, -6.772562802e-06f, -6.776713285e-06f, -6.780851501e-06f, -6.784977444e-06f, -6.789091109e-06f, -6.793192489e-06f, -6.797281580e-06f,
--6.801358376e-06f, -6.805422872e-06f, -6.809475061e-06f, -6.813514939e-06f, -6.817542500e-06f, -6.821557738e-06f, -6.825560649e-06f, -6.829551227e-06f, -6.833529467e-06f, -6.837495362e-06f,
--6.841448909e-06f, -6.845390101e-06f, -6.849318934e-06f, -6.853235402e-06f, -6.857139500e-06f, -6.861031223e-06f, -6.864910565e-06f, -6.868777522e-06f, -6.872632089e-06f, -6.876474259e-06f,
--6.880304029e-06f, -6.884121393e-06f, -6.887926346e-06f, -6.891718883e-06f, -6.895499000e-06f, -6.899266690e-06f, -6.903021950e-06f, -6.906764774e-06f, -6.910495157e-06f, -6.914213095e-06f,
--6.917918583e-06f, -6.921611615e-06f, -6.925292188e-06f, -6.928960296e-06f, -6.932615934e-06f, -6.936259098e-06f, -6.939889783e-06f, -6.943507984e-06f, -6.947113697e-06f, -6.950706917e-06f,
--6.954287639e-06f, -6.957855859e-06f, -6.961411572e-06f, -6.964954773e-06f, -6.968485459e-06f, -6.972003624e-06f, -6.975509264e-06f, -6.979002375e-06f, -6.982482952e-06f, -6.985950991e-06f,
--6.989406486e-06f, -6.992849435e-06f, -6.996279832e-06f, -6.999697673e-06f, -7.003102955e-06f, -7.006495671e-06f, -7.009875819e-06f, -7.013243394e-06f, -7.016598392e-06f, -7.019940808e-06f,
--7.023270639e-06f, -7.026587880e-06f, -7.029892527e-06f, -7.033184576e-06f, -7.036464023e-06f, -7.039730863e-06f, -7.042985094e-06f, -7.046226710e-06f, -7.049455707e-06f, -7.052672083e-06f,
--7.055875832e-06f, -7.059066951e-06f, -7.062245436e-06f, -7.065411283e-06f, -7.068564489e-06f, -7.071705048e-06f, -7.074832958e-06f, -7.077948214e-06f, -7.081050814e-06f, -7.084140752e-06f,
--7.087218026e-06f, -7.090282632e-06f, -7.093334565e-06f, -7.096373823e-06f, -7.099400402e-06f, -7.102414297e-06f, -7.105415506e-06f, -7.108404025e-06f, -7.111379850e-06f, -7.114342978e-06f,
--7.117293405e-06f, -7.120231128e-06f, -7.123156143e-06f, -7.126068446e-06f, -7.128968036e-06f, -7.131854907e-06f, -7.134729057e-06f, -7.137590482e-06f, -7.140439179e-06f, -7.143275145e-06f,
--7.146098376e-06f, -7.148908869e-06f, -7.151706621e-06f, -7.154491629e-06f, -7.157263889e-06f, -7.160023398e-06f, -7.162770153e-06f, -7.165504152e-06f, -7.168225390e-06f, -7.170933864e-06f,
--7.173629573e-06f, -7.176312512e-06f, -7.178982679e-06f, -7.181640071e-06f, -7.184284684e-06f, -7.186916516e-06f, -7.189535563e-06f, -7.192141824e-06f, -7.194735294e-06f, -7.197315972e-06f,
--7.199883854e-06f, -7.202438937e-06f, -7.204981219e-06f, -7.207510698e-06f, -7.210027369e-06f, -7.212531231e-06f, -7.215022280e-06f, -7.217500514e-06f, -7.219965931e-06f, -7.222418528e-06f,
--7.224858302e-06f, -7.227285251e-06f, -7.229699371e-06f, -7.232100661e-06f, -7.234489118e-06f, -7.236864739e-06f, -7.239227522e-06f, -7.241577465e-06f, -7.243914565e-06f, -7.246238820e-06f,
--7.248550227e-06f, -7.250848783e-06f, -7.253134488e-06f, -7.255407337e-06f, -7.257667330e-06f, -7.259914463e-06f, -7.262148735e-06f, -7.264370143e-06f, -7.266578685e-06f, -7.268774359e-06f,
--7.270957162e-06f, -7.273127093e-06f, -7.275284150e-06f, -7.277428329e-06f, -7.279559630e-06f, -7.281678050e-06f, -7.283783588e-06f, -7.285876240e-06f, -7.287956006e-06f, -7.290022883e-06f,
--7.292076869e-06f, -7.294117963e-06f, -7.296146162e-06f, -7.298161465e-06f, -7.300163870e-06f, -7.302153375e-06f, -7.304129977e-06f, -7.306093677e-06f, -7.308044470e-06f, -7.309982357e-06f,
--7.311907335e-06f, -7.313819403e-06f, -7.315718558e-06f, -7.317604800e-06f, -7.319478126e-06f, -7.321338535e-06f, -7.323186026e-06f, -7.325020596e-06f, -7.326842245e-06f, -7.328650971e-06f,
--7.330446772e-06f, -7.332229647e-06f, -7.333999594e-06f, -7.335756613e-06f, -7.337500701e-06f, -7.339231857e-06f, -7.340950081e-06f, -7.342655370e-06f, -7.344347723e-06f, -7.346027140e-06f,
--7.347693618e-06f, -7.349347157e-06f, -7.350987755e-06f, -7.352615411e-06f, -7.354230124e-06f, -7.355831893e-06f, -7.357420717e-06f, -7.358996595e-06f, -7.360559525e-06f, -7.362109506e-06f,
--7.363646538e-06f, -7.365170620e-06f, -7.366681750e-06f, -7.368179927e-06f, -7.369665151e-06f, -7.371137421e-06f, -7.372596736e-06f, -7.374043094e-06f, -7.375476495e-06f, -7.376896939e-06f,
--7.378304424e-06f, -7.379698950e-06f, -7.381080515e-06f, -7.382449120e-06f, -7.383804763e-06f, -7.385147444e-06f, -7.386477162e-06f, -7.387793916e-06f, -7.389097706e-06f, -7.390388532e-06f,
--7.391666391e-06f, -7.392931285e-06f, -7.394183213e-06f, -7.395422173e-06f, -7.396648166e-06f, -7.397861191e-06f, -7.399061248e-06f, -7.400248336e-06f, -7.401422455e-06f, -7.402583604e-06f,
--7.403731783e-06f, -7.404866992e-06f, -7.405989230e-06f, -7.407098497e-06f, -7.408194794e-06f, -7.409278119e-06f, -7.410348472e-06f, -7.411405854e-06f, -7.412450263e-06f, -7.413481701e-06f,
--7.414500166e-06f, -7.415505659e-06f, -7.416498180e-06f, -7.417477728e-06f, -7.418444303e-06f, -7.419397906e-06f, -7.420338537e-06f, -7.421266195e-06f, -7.422180881e-06f, -7.423082594e-06f,
--7.423971335e-06f, -7.424847103e-06f, -7.425709900e-06f, -7.426559725e-06f, -7.427396579e-06f, -7.428220460e-06f, -7.429031371e-06f, -7.429829311e-06f, -7.430614280e-06f, -7.431386278e-06f,
--7.432145307e-06f, -7.432891366e-06f, -7.433624455e-06f, -7.434344576e-06f, -7.435051728e-06f, -7.435745912e-06f, -7.436427128e-06f, -7.437095377e-06f, -7.437750659e-06f, -7.438392975e-06f,
--7.439022326e-06f, -7.439638712e-06f, -7.440242133e-06f, -7.440832590e-06f, -7.441410084e-06f, -7.441974616e-06f, -7.442526185e-06f, -7.443064794e-06f, -7.443590442e-06f, -7.444103130e-06f,
--7.444602860e-06f, -7.445089631e-06f, -7.445563445e-06f, -7.446024303e-06f, -7.446472205e-06f, -7.446907152e-06f, -7.447329146e-06f, -7.447738186e-06f, -7.448134275e-06f, -7.448517412e-06f,
--7.448887600e-06f, -7.449244839e-06f, -7.449589129e-06f, -7.449920473e-06f, -7.450238871e-06f, -7.450544325e-06f, -7.450836835e-06f, -7.451116402e-06f, -7.451383029e-06f, -7.451636715e-06f,
--7.451877462e-06f, -7.452105272e-06f, -7.452320146e-06f, -7.452522084e-06f, -7.452711089e-06f, -7.452887161e-06f, -7.453050303e-06f, -7.453200514e-06f, -7.453337798e-06f, -7.453462154e-06f,
--7.453573585e-06f, -7.453672092e-06f, -7.453757677e-06f, -7.453830341e-06f, -7.453890085e-06f, -7.453936911e-06f, -7.453970821e-06f, -7.453991817e-06f, -7.453999899e-06f, -7.453995070e-06f,
--7.453977331e-06f, -7.453946684e-06f, -7.453903130e-06f, -7.453846672e-06f, -7.453777311e-06f, -7.453695048e-06f, -7.453599886e-06f, -7.453491827e-06f, -7.453370872e-06f, -7.453237023e-06f,
--7.453090283e-06f, -7.452930652e-06f, -7.452758133e-06f, -7.452572727e-06f, -7.452374438e-06f, -7.452163266e-06f, -7.451939215e-06f, -7.451702285e-06f, -7.451452478e-06f, -7.451189798e-06f,
--7.450914246e-06f, -7.450625824e-06f, -7.450324535e-06f, -7.450010380e-06f, -7.449683362e-06f, -7.449343482e-06f, -7.448990744e-06f, -7.448625149e-06f, -7.448246700e-06f, -7.447855399e-06f,
--7.447451249e-06f, -7.447034251e-06f, -7.446604408e-06f, -7.446161722e-06f, -7.445706196e-06f, -7.445237833e-06f, -7.444756634e-06f, -7.444262603e-06f, -7.443755741e-06f, -7.443236052e-06f,
--7.442703537e-06f, -7.442158200e-06f, -7.441600042e-06f, -7.441029067e-06f, -7.440445278e-06f, -7.439848676e-06f, -7.439239264e-06f, -7.438617046e-06f, -7.437982024e-06f, -7.437334200e-06f,
--7.436673578e-06f, -7.436000160e-06f, -7.435313949e-06f, -7.434614948e-06f, -7.433903160e-06f, -7.433178587e-06f, -7.432441232e-06f, -7.431691099e-06f, -7.430928191e-06f, -7.430152509e-06f,
--7.429364058e-06f, -7.428562840e-06f, -7.427748859e-06f, -7.426922116e-06f, -7.426082616e-06f, -7.425230362e-06f, -7.424365356e-06f, -7.423487602e-06f, -7.422597103e-06f, -7.421693862e-06f,
--7.420777882e-06f, -7.419849166e-06f, -7.418907718e-06f, -7.417953542e-06f, -7.416986639e-06f, -7.416007014e-06f, -7.415014670e-06f, -7.414009610e-06f, -7.412991838e-06f, -7.411961357e-06f,
--7.410918170e-06f, -7.409862282e-06f, -7.408793694e-06f, -7.407712411e-06f, -7.406618437e-06f, -7.405511774e-06f, -7.404392427e-06f, -7.403260399e-06f, -7.402115693e-06f, -7.400958313e-06f,
--7.399788264e-06f, -7.398605547e-06f, -7.397410168e-06f, -7.396202129e-06f, -7.394981435e-06f, -7.393748089e-06f, -7.392502095e-06f, -7.391243457e-06f, -7.389972178e-06f, -7.388688263e-06f,
--7.387391715e-06f, -7.386082539e-06f, -7.384760737e-06f, -7.383426314e-06f, -7.382079274e-06f, -7.380719621e-06f, -7.379347358e-06f, -7.377962490e-06f, -7.376565021e-06f, -7.375154955e-06f,
--7.373732296e-06f, -7.372297047e-06f, -7.370849214e-06f, -7.369388800e-06f, -7.367915809e-06f, -7.366430246e-06f, -7.364932114e-06f, -7.363421418e-06f, -7.361898163e-06f, -7.360362351e-06f,
--7.358813988e-06f, -7.357253079e-06f, -7.355679626e-06f, -7.354093635e-06f, -7.352495110e-06f, -7.350884055e-06f, -7.349260475e-06f, -7.347624374e-06f, -7.345975756e-06f, -7.344314627e-06f,
--7.342640990e-06f, -7.340954850e-06f, -7.339256212e-06f, -7.337545079e-06f, -7.335821458e-06f, -7.334085351e-06f, -7.332336765e-06f, -7.330575703e-06f, -7.328802170e-06f, -7.327016171e-06f,
--7.325217710e-06f, -7.323406792e-06f, -7.321583423e-06f, -7.319747606e-06f, -7.317899347e-06f, -7.316038649e-06f, -7.314165519e-06f, -7.312279961e-06f, -7.310381980e-06f, -7.308471581e-06f,
--7.306548768e-06f, -7.304613546e-06f, -7.302665921e-06f, -7.300705897e-06f, -7.298733480e-06f, -7.296748674e-06f, -7.294751485e-06f, -7.292741917e-06f, -7.290719976e-06f, -7.288685666e-06f,
--7.286638993e-06f, -7.284579962e-06f, -7.282508578e-06f, -7.280424847e-06f, -7.278328772e-06f, -7.276220361e-06f, -7.274099617e-06f, -7.271966546e-06f, -7.269821154e-06f, -7.267663446e-06f,
--7.265493426e-06f, -7.263311101e-06f, -7.261116476e-06f, -7.258909555e-06f, -7.256690346e-06f, -7.254458852e-06f, -7.252215079e-06f, -7.249959033e-06f, -7.247690720e-06f, -7.245410145e-06f,
--7.243117313e-06f, -7.240812229e-06f, -7.238494900e-06f, -7.236165332e-06f, -7.233823529e-06f, -7.231469497e-06f, -7.229103242e-06f, -7.226724770e-06f, -7.224334086e-06f, -7.221931196e-06f,
--7.219516106e-06f, -7.217088821e-06f, -7.214649348e-06f, -7.212197691e-06f, -7.209733858e-06f, -7.207257853e-06f, -7.204769682e-06f, -7.202269352e-06f, -7.199756869e-06f, -7.197232238e-06f,
--7.194695464e-06f, -7.192146555e-06f, -7.189585516e-06f, -7.187012353e-06f, -7.184427073e-06f, -7.181829680e-06f, -7.179220181e-06f, -7.176598583e-06f, -7.173964891e-06f, -7.171319112e-06f,
--7.168661251e-06f, -7.165991315e-06f, -7.163309310e-06f, -7.160615242e-06f, -7.157909118e-06f, -7.155190943e-06f, -7.152460724e-06f, -7.149718467e-06f, -7.146964178e-06f, -7.144197864e-06f,
--7.141419532e-06f, -7.138629186e-06f, -7.135826835e-06f, -7.133012484e-06f, -7.130186139e-06f, -7.127347808e-06f, -7.124497496e-06f, -7.121635210e-06f, -7.118760956e-06f, -7.115874742e-06f,
--7.112976573e-06f, -7.110066456e-06f, -7.107144398e-06f, -7.104210405e-06f, -7.101264484e-06f, -7.098306642e-06f, -7.095336885e-06f, -7.092355220e-06f, -7.089361653e-06f, -7.086356192e-06f,
--7.083338842e-06f, -7.080309612e-06f, -7.077268506e-06f, -7.074215534e-06f, -7.071150700e-06f, -7.068074013e-06f, -7.064985478e-06f, -7.061885103e-06f, -7.058772895e-06f, -7.055648860e-06f,
--7.052513006e-06f, -7.049365339e-06f, -7.046205866e-06f, -7.043034595e-06f, -7.039851532e-06f, -7.036656685e-06f, -7.033450060e-06f, -7.030231664e-06f, -7.027001506e-06f, -7.023759591e-06f,
--7.020505927e-06f, -7.017240520e-06f, -7.013963379e-06f, -7.010674511e-06f, -7.007373922e-06f, -7.004061620e-06f, -7.000737611e-06f, -6.997401904e-06f, -6.994054506e-06f, -6.990695424e-06f,
--6.987324665e-06f, -6.983942236e-06f, -6.980548145e-06f, -6.977142400e-06f, -6.973725007e-06f, -6.970295974e-06f, -6.966855309e-06f, -6.963403019e-06f, -6.959939111e-06f, -6.956463594e-06f,
--6.952976473e-06f, -6.949477758e-06f, -6.945967456e-06f, -6.942445573e-06f, -6.938912118e-06f, -6.935367099e-06f, -6.931810523e-06f, -6.928242397e-06f, -6.924662729e-06f, -6.921071528e-06f,
--6.917468800e-06f, -6.913854554e-06f, -6.910228796e-06f, -6.906591536e-06f, -6.902942780e-06f, -6.899282537e-06f, -6.895610814e-06f, -6.891927619e-06f, -6.888232961e-06f, -6.884526846e-06f,
--6.880809283e-06f, -6.877080279e-06f, -6.873339844e-06f, -6.869587983e-06f, -6.865824707e-06f, -6.862050021e-06f, -6.858263936e-06f, -6.854466458e-06f, -6.850657595e-06f, -6.846837357e-06f,
--6.843005750e-06f, -6.839162782e-06f, -6.835308463e-06f, -6.831442800e-06f, -6.827565801e-06f, -6.823677475e-06f, -6.819777829e-06f, -6.815866872e-06f, -6.811944612e-06f, -6.808011058e-06f,
--6.804066217e-06f, -6.800110098e-06f, -6.796142709e-06f, -6.792164059e-06f, -6.788174155e-06f, -6.784173007e-06f, -6.780160623e-06f, -6.776137010e-06f, -6.772102178e-06f, -6.768056134e-06f,
--6.763998888e-06f, -6.759930448e-06f, -6.755850822e-06f, -6.751760018e-06f, -6.747658046e-06f, -6.743544914e-06f, -6.739420630e-06f, -6.735285204e-06f, -6.731138642e-06f, -6.726980955e-06f,
--6.722812151e-06f, -6.718632238e-06f, -6.714441226e-06f, -6.710239122e-06f, -6.706025936e-06f, -6.701801676e-06f, -6.697566351e-06f, -6.693319970e-06f, -6.689062541e-06f, -6.684794074e-06f,
--6.680514577e-06f, -6.676224059e-06f, -6.671922528e-06f, -6.667609995e-06f, -6.663286467e-06f, -6.658951954e-06f, -6.654606464e-06f, -6.650250007e-06f, -6.645882590e-06f, -6.641504225e-06f,
--6.637114918e-06f, -6.632714680e-06f, -6.628303519e-06f, -6.623881445e-06f, -6.619448466e-06f, -6.615004592e-06f, -6.610549831e-06f, -6.606084193e-06f, -6.601607687e-06f, -6.597120323e-06f,
--6.592622108e-06f, -6.588113053e-06f, -6.583593166e-06f, -6.579062458e-06f, -6.574520936e-06f, -6.569968611e-06f, -6.565405492e-06f, -6.560831587e-06f, -6.556246907e-06f, -6.551651460e-06f,
--6.547045257e-06f, -6.542428305e-06f, -6.537800616e-06f, -6.533162197e-06f, -6.528513059e-06f, -6.523853211e-06f, -6.519182662e-06f, -6.514501423e-06f, -6.509809501e-06f, -6.505106908e-06f,
--6.500393652e-06f, -6.495669742e-06f, -6.490935189e-06f, -6.486190003e-06f, -6.481434192e-06f, -6.476667766e-06f, -6.471890735e-06f, -6.467103109e-06f, -6.462304896e-06f, -6.457496108e-06f,
--6.452676753e-06f, -6.447846842e-06f, -6.443006383e-06f, -6.438155387e-06f, -6.433293864e-06f, -6.428421823e-06f, -6.423539274e-06f, -6.418646227e-06f, -6.413742692e-06f, -6.408828678e-06f,
--6.403904196e-06f, -6.398969255e-06f, -6.394023865e-06f, -6.389068036e-06f, -6.384101779e-06f, -6.379125102e-06f, -6.374138017e-06f, -6.369140532e-06f, -6.364132658e-06f, -6.359114405e-06f,
--6.354085784e-06f, -6.349046803e-06f, -6.343997473e-06f, -6.338937805e-06f, -6.333867808e-06f, -6.328787492e-06f, -6.323696868e-06f, -6.318595945e-06f, -6.313484735e-06f, -6.308363246e-06f,
--6.303231490e-06f, -6.298089476e-06f, -6.292937214e-06f, -6.287774716e-06f, -6.282601991e-06f, -6.277419049e-06f, -6.272225901e-06f, -6.267022557e-06f, -6.261809028e-06f, -6.256585323e-06f,
--6.251351454e-06f, -6.246107430e-06f, -6.240853261e-06f, -6.235588959e-06f, -6.230314534e-06f, -6.225029996e-06f, -6.219735356e-06f, -6.214430624e-06f, -6.209115810e-06f, -6.203790925e-06f,
--6.198455980e-06f, -6.193110986e-06f, -6.187755951e-06f, -6.182390889e-06f, -6.177015808e-06f, -6.171630719e-06f, -6.166235634e-06f, -6.160830563e-06f, -6.155415515e-06f, -6.149990503e-06f,
--6.144555537e-06f, -6.139110627e-06f, -6.133655784e-06f, -6.128191019e-06f, -6.122716343e-06f, -6.117231767e-06f, -6.111737300e-06f, -6.106232954e-06f, -6.100718741e-06f, -6.095194669e-06f,
--6.089660752e-06f, -6.084116998e-06f, -6.078563420e-06f, -6.073000028e-06f, -6.067426833e-06f, -6.061843845e-06f, -6.056251077e-06f, -6.050648538e-06f, -6.045036241e-06f, -6.039414195e-06f,
--6.033782411e-06f, -6.028140902e-06f, -6.022489677e-06f, -6.016828748e-06f, -6.011158126e-06f, -6.005477822e-06f, -5.999787847e-06f, -5.994088212e-06f, -5.988378928e-06f, -5.982660007e-06f,
--5.976931459e-06f, -5.971193296e-06f, -5.965445529e-06f, -5.959688169e-06f, -5.953921228e-06f, -5.948144716e-06f, -5.942358645e-06f, -5.936563026e-06f, -5.930757870e-06f, -5.924943189e-06f,
--5.919118993e-06f, -5.913285295e-06f, -5.907442106e-06f, -5.901589436e-06f, -5.895727298e-06f, -5.889855703e-06f, -5.883974661e-06f, -5.878084185e-06f, -5.872184286e-06f, -5.866274975e-06f,
--5.860356264e-06f, -5.854428165e-06f, -5.848490688e-06f, -5.842543845e-06f, -5.836587648e-06f, -5.830622108e-06f, -5.824647237e-06f, -5.818663046e-06f, -5.812669548e-06f, -5.806666753e-06f,
--5.800654673e-06f, -5.794633319e-06f, -5.788602705e-06f, -5.782562840e-06f, -5.776513736e-06f, -5.770455407e-06f, -5.764387862e-06f, -5.758311114e-06f, -5.752225174e-06f, -5.746130055e-06f,
--5.740025767e-06f, -5.733912323e-06f, -5.727789735e-06f, -5.721658014e-06f, -5.715517172e-06f, -5.709367221e-06f, -5.703208172e-06f, -5.697040038e-06f, -5.690862831e-06f, -5.684676561e-06f,
--5.678481242e-06f, -5.672276885e-06f, -5.666063502e-06f, -5.659841105e-06f, -5.653609706e-06f, -5.647369317e-06f, -5.641119949e-06f, -5.634861615e-06f, -5.628594327e-06f, -5.622318097e-06f,
--5.616032937e-06f, -5.609738858e-06f, -5.603435873e-06f, -5.597123995e-06f, -5.590803234e-06f, -5.584473604e-06f, -5.578135116e-06f, -5.571787782e-06f, -5.565431615e-06f, -5.559066627e-06f,
--5.552692830e-06f, -5.546310235e-06f, -5.539918856e-06f, -5.533518704e-06f, -5.527109792e-06f, -5.520692132e-06f, -5.514265737e-06f, -5.507830617e-06f, -5.501386786e-06f, -5.494934257e-06f,
--5.488473040e-06f, -5.482003150e-06f, -5.475524597e-06f, -5.469037394e-06f, -5.462541554e-06f, -5.456037090e-06f, -5.449524012e-06f, -5.443002335e-06f, -5.436472069e-06f, -5.429933228e-06f,
--5.423385825e-06f, -5.416829871e-06f, -5.410265378e-06f, -5.403692361e-06f, -5.397110830e-06f, -5.390520799e-06f, -5.383922280e-06f, -5.377315285e-06f, -5.370699827e-06f, -5.364075919e-06f,
--5.357443573e-06f, -5.350802802e-06f, -5.344153618e-06f, -5.337496034e-06f, -5.330830063e-06f, -5.324155717e-06f, -5.317473009e-06f, -5.310781951e-06f, -5.304082557e-06f, -5.297374838e-06f,
--5.290658808e-06f, -5.283934480e-06f, -5.277201865e-06f, -5.270460977e-06f, -5.263711828e-06f, -5.256954432e-06f, -5.250188801e-06f, -5.243414948e-06f, -5.236632885e-06f, -5.229842626e-06f,
--5.223044183e-06f, -5.216237569e-06f, -5.209422797e-06f, -5.202599880e-06f, -5.195768830e-06f, -5.188929661e-06f, -5.182082386e-06f, -5.175227017e-06f, -5.168363567e-06f, -5.161492049e-06f,
--5.154612477e-06f, -5.147724863e-06f, -5.140829220e-06f, -5.133925561e-06f, -5.127013899e-06f, -5.120094247e-06f, -5.113166618e-06f, -5.106231026e-06f, -5.099287483e-06f, -5.092336002e-06f,
--5.085376596e-06f, -5.078409279e-06f, -5.071434063e-06f, -5.064450962e-06f, -5.057459989e-06f, -5.050461157e-06f, -5.043454479e-06f, -5.036439967e-06f, -5.029417637e-06f, -5.022387499e-06f,
--5.015349569e-06f, -5.008303858e-06f, -5.001250381e-06f, -4.994189150e-06f, -4.987120178e-06f, -4.980043479e-06f, -4.972959067e-06f, -4.965866954e-06f, -4.958767153e-06f, -4.951659678e-06f,
--4.944544543e-06f, -4.937421760e-06f, -4.930291344e-06f, -4.923153306e-06f, -4.916007661e-06f, -4.908854422e-06f, -4.901693603e-06f, -4.894525216e-06f, -4.887349275e-06f, -4.880165794e-06f,
--4.872974786e-06f, -4.865776264e-06f, -4.858570242e-06f, -4.851356734e-06f, -4.844135752e-06f, -4.836907310e-06f, -4.829671423e-06f, -4.822428102e-06f, -4.815177362e-06f, -4.807919217e-06f,
--4.800653679e-06f, -4.793380763e-06f, -4.786100482e-06f, -4.778812849e-06f, -4.771517878e-06f, -4.764215583e-06f, -4.756905977e-06f, -4.749589074e-06f, -4.742264887e-06f, -4.734933431e-06f,
--4.727594718e-06f, -4.720248763e-06f, -4.712895579e-06f, -4.705535179e-06f, -4.698167578e-06f, -4.690792789e-06f, -4.683410826e-06f, -4.676021703e-06f, -4.668625433e-06f, -4.661222030e-06f,
--4.653811508e-06f, -4.646393880e-06f, -4.638969161e-06f, -4.631537363e-06f, -4.624098502e-06f, -4.616652591e-06f, -4.609199642e-06f, -4.601739672e-06f, -4.594272692e-06f, -4.586798718e-06f,
--4.579317762e-06f, -4.571829839e-06f, -4.564334963e-06f, -4.556833147e-06f, -4.549324406e-06f, -4.541808753e-06f, -4.534286202e-06f, -4.526756768e-06f, -4.519220463e-06f, -4.511677303e-06f,
--4.504127300e-06f, -4.496570470e-06f, -4.489006825e-06f, -4.481436381e-06f, -4.473859150e-06f, -4.466275147e-06f, -4.458684387e-06f, -4.451086882e-06f, -4.443482647e-06f, -4.435871697e-06f,
--4.428254044e-06f, -4.420629704e-06f, -4.412998690e-06f, -4.405361016e-06f, -4.397716697e-06f, -4.390065747e-06f, -4.382408179e-06f, -4.374744008e-06f, -4.367073247e-06f, -4.359395912e-06f,
--4.351712017e-06f, -4.344021574e-06f, -4.336324599e-06f, -4.328621106e-06f, -4.320911109e-06f, -4.313194622e-06f, -4.305471660e-06f, -4.297742236e-06f, -4.290006365e-06f, -4.282264061e-06f,
--4.274515338e-06f, -4.266760211e-06f, -4.258998693e-06f, -4.251230800e-06f, -4.243456545e-06f, -4.235675943e-06f, -4.227889008e-06f, -4.220095754e-06f, -4.212296196e-06f, -4.204490347e-06f,
--4.196678223e-06f, -4.188859838e-06f, -4.181035206e-06f, -4.173204341e-06f, -4.165367258e-06f, -4.157523971e-06f, -4.149674494e-06f, -4.141818843e-06f, -4.133957030e-06f, -4.126089072e-06f,
--4.118214982e-06f, -4.110334774e-06f, -4.102448464e-06f, -4.094556065e-06f, -4.086657592e-06f, -4.078753059e-06f, -4.070842482e-06f, -4.062925874e-06f, -4.055003250e-06f, -4.047074624e-06f,
--4.039140012e-06f, -4.031199427e-06f, -4.023252883e-06f, -4.015300397e-06f, -4.007341982e-06f, -3.999377652e-06f, -3.991407422e-06f, -3.983431308e-06f, -3.975449323e-06f, -3.967461481e-06f,
--3.959467799e-06f, -3.951468289e-06f, -3.943462968e-06f, -3.935451849e-06f, -3.927434947e-06f, -3.919412277e-06f, -3.911383853e-06f, -3.903349690e-06f, -3.895309803e-06f, -3.887264206e-06f,
--3.879212914e-06f, -3.871155942e-06f, -3.863093305e-06f, -3.855025016e-06f, -3.846951092e-06f, -3.838871546e-06f, -3.830786393e-06f, -3.822695649e-06f, -3.814599327e-06f, -3.806497443e-06f,
--3.798390011e-06f, -3.790277046e-06f, -3.782158563e-06f, -3.774034577e-06f, -3.765905102e-06f, -3.757770153e-06f, -3.749629746e-06f, -3.741483894e-06f, -3.733332613e-06f, -3.725175917e-06f,
--3.717013822e-06f, -3.708846342e-06f, -3.700673491e-06f, -3.692495286e-06f, -3.684311741e-06f, -3.676122870e-06f, -3.667928688e-06f, -3.659729212e-06f, -3.651524454e-06f, -3.643314430e-06f,
--3.635099156e-06f, -3.626878646e-06f, -3.618652914e-06f, -3.610421977e-06f, -3.602185848e-06f, -3.593944543e-06f, -3.585698077e-06f, -3.577446464e-06f, -3.569189720e-06f, -3.560927859e-06f,
--3.552660898e-06f, -3.544388849e-06f, -3.536111730e-06f, -3.527829554e-06f, -3.519542336e-06f, -3.511250092e-06f, -3.502952837e-06f, -3.494650585e-06f, -3.486343352e-06f, -3.478031153e-06f,
--3.469714002e-06f, -3.461391915e-06f, -3.453064908e-06f, -3.444732994e-06f, -3.436396189e-06f, -3.428054508e-06f, -3.419707966e-06f, -3.411356579e-06f, -3.403000361e-06f, -3.394639328e-06f,
--3.386273494e-06f, -3.377902875e-06f, -3.369527486e-06f, -3.361147341e-06f, -3.352762457e-06f, -3.344372848e-06f, -3.335978530e-06f, -3.327579517e-06f, -3.319175825e-06f, -3.310767469e-06f,
--3.302354463e-06f, -3.293936825e-06f, -3.285514567e-06f, -3.277087706e-06f, -3.268656257e-06f, -3.260220236e-06f, -3.251779656e-06f, -3.243334534e-06f, -3.234884884e-06f, -3.226430723e-06f,
--3.217972065e-06f, -3.209508925e-06f, -3.201041319e-06f, -3.192569261e-06f, -3.184092768e-06f, -3.175611854e-06f, -3.167126535e-06f, -3.158636826e-06f, -3.150142743e-06f, -3.141644300e-06f,
--3.133141512e-06f, -3.124634396e-06f, -3.116122966e-06f, -3.107607239e-06f, -3.099087228e-06f, -3.090562949e-06f, -3.082034418e-06f, -3.073501651e-06f, -3.064964662e-06f, -3.056423466e-06f,
--3.047878079e-06f, -3.039328517e-06f, -3.030774795e-06f, -3.022216928e-06f, -3.013654931e-06f, -3.005088821e-06f, -2.996518611e-06f, -2.987944319e-06f, -2.979365958e-06f, -2.970783545e-06f,
--2.962197094e-06f, -2.953606622e-06f, -2.945012143e-06f, -2.936413674e-06f, -2.927811229e-06f, -2.919204824e-06f, -2.910594474e-06f, -2.901980195e-06f, -2.893362002e-06f, -2.884739911e-06f,
--2.876113937e-06f, -2.867484096e-06f, -2.858850402e-06f, -2.850212872e-06f, -2.841571521e-06f, -2.832926365e-06f, -2.824277418e-06f, -2.815624697e-06f, -2.806968216e-06f, -2.798307992e-06f,
--2.789644040e-06f, -2.780976375e-06f, -2.772305012e-06f, -2.763629969e-06f, -2.754951259e-06f, -2.746268898e-06f, -2.737582902e-06f, -2.728893287e-06f, -2.720200068e-06f, -2.711503260e-06f,
--2.702802879e-06f, -2.694098941e-06f, -2.685391460e-06f, -2.676680454e-06f, -2.667965936e-06f, -2.659247924e-06f, -2.650526432e-06f, -2.641801475e-06f, -2.633073070e-06f, -2.624341233e-06f,
--2.615605977e-06f, -2.606867320e-06f, -2.598125277e-06f, -2.589379863e-06f, -2.580631094e-06f, -2.571878986e-06f, -2.563123554e-06f, -2.554364813e-06f, -2.545602780e-06f, -2.536837470e-06f,
--2.528068899e-06f, -2.519297082e-06f, -2.510522034e-06f, -2.501743772e-06f, -2.492962312e-06f, -2.484177668e-06f, -2.475389856e-06f, -2.466598892e-06f, -2.457804792e-06f, -2.449007572e-06f,
--2.440207246e-06f, -2.431403831e-06f, -2.422597342e-06f, -2.413787796e-06f, -2.404975206e-06f, -2.396159590e-06f, -2.387340963e-06f, -2.378519341e-06f, -2.369694739e-06f, -2.360867173e-06f,
--2.352036658e-06f, -2.343203211e-06f, -2.334366847e-06f, -2.325527582e-06f, -2.316685431e-06f, -2.307840410e-06f, -2.298992535e-06f, -2.290141821e-06f, -2.281288285e-06f, -2.272431942e-06f,
--2.263572807e-06f, -2.254710897e-06f, -2.245846227e-06f, -2.236978812e-06f, -2.228108670e-06f, -2.219235814e-06f, -2.210360261e-06f, -2.201482028e-06f, -2.192601128e-06f, -2.183717579e-06f,
--2.174831396e-06f, -2.165942594e-06f, -2.157051190e-06f, -2.148157199e-06f, -2.139260637e-06f, -2.130361520e-06f, -2.121459863e-06f, -2.112555683e-06f, -2.103648994e-06f, -2.094739813e-06f,
--2.085828155e-06f, -2.076914037e-06f, -2.067997474e-06f, -2.059078481e-06f, -2.050157075e-06f, -2.041233272e-06f, -2.032307086e-06f, -2.023378535e-06f, -2.014447633e-06f, -2.005514396e-06f,
--1.996578841e-06f, -1.987640983e-06f, -1.978700837e-06f, -1.969758421e-06f, -1.960813748e-06f, -1.951866836e-06f, -1.942917700e-06f, -1.933966355e-06f, -1.925012819e-06f, -1.916057105e-06f,
--1.907099231e-06f, -1.898139212e-06f, -1.889177064e-06f, -1.880212802e-06f, -1.871246442e-06f, -1.862278001e-06f, -1.853307494e-06f, -1.844334937e-06f, -1.835360346e-06f, -1.826383736e-06f,
--1.817405123e-06f, -1.808424524e-06f, -1.799441953e-06f, -1.790457428e-06f, -1.781470963e-06f, -1.772482574e-06f, -1.763492278e-06f, -1.754500090e-06f, -1.745506025e-06f, -1.736510101e-06f,
--1.727512332e-06f, -1.718512735e-06f, -1.709511324e-06f, -1.700508117e-06f, -1.691503129e-06f, -1.682496376e-06f, -1.673487873e-06f, -1.664477637e-06f, -1.655465683e-06f, -1.646452028e-06f,
--1.637436686e-06f, -1.628419674e-06f, -1.619401008e-06f, -1.610380703e-06f, -1.601358776e-06f, -1.592335242e-06f, -1.583310117e-06f, -1.574283416e-06f, -1.565255157e-06f, -1.556225354e-06f,
--1.547194024e-06f, -1.538161182e-06f, -1.529126845e-06f, -1.520091027e-06f, -1.511053745e-06f, -1.502015015e-06f, -1.492974853e-06f, -1.483933274e-06f, -1.474890294e-06f, -1.465845929e-06f,
--1.456800196e-06f, -1.447753109e-06f, -1.438704685e-06f, -1.429654940e-06f, -1.420603889e-06f, -1.411551548e-06f, -1.402497933e-06f, -1.393443061e-06f, -1.384386946e-06f, -1.375329605e-06f,
--1.366271054e-06f, -1.357211308e-06f, -1.348150384e-06f, -1.339088296e-06f, -1.330025062e-06f, -1.320960696e-06f, -1.311895215e-06f, -1.302828635e-06f, -1.293760971e-06f, -1.284692240e-06f,
--1.275622456e-06f, -1.266551637e-06f, -1.257479797e-06f, -1.248406954e-06f, -1.239333121e-06f, -1.230258317e-06f, -1.221182555e-06f, -1.212105853e-06f, -1.203028226e-06f, -1.193949689e-06f,
--1.184870259e-06f, -1.175789952e-06f, -1.166708783e-06f, -1.157626769e-06f, -1.148543924e-06f, -1.139460266e-06f, -1.130375809e-06f, -1.121290570e-06f, -1.112204565e-06f, -1.103117809e-06f,
--1.094030318e-06f, -1.084942108e-06f, -1.075853195e-06f, -1.066763595e-06f, -1.057673324e-06f, -1.048582396e-06f, -1.039490830e-06f, -1.030398639e-06f, -1.021305840e-06f, -1.012212449e-06f,
--1.003118482e-06f, -9.940239538e-07f, -9.849288813e-07f, -9.758332798e-07f, -9.667371654e-07f, -9.576405537e-07f, -9.485434607e-07f, -9.394459022e-07f, -9.303478939e-07f, -9.212494518e-07f,
--9.121505917e-07f, -9.030513293e-07f, -8.939516805e-07f, -8.848516612e-07f, -8.757512871e-07f, -8.666505740e-07f, -8.575495379e-07f, -8.484481944e-07f, -8.393465595e-07f, -8.302446489e-07f,
--8.211424785e-07f, -8.120400640e-07f, -8.029374212e-07f, -7.938345660e-07f, -7.847315142e-07f, -7.756282816e-07f, -7.665248840e-07f, -7.574213371e-07f, -7.483176568e-07f, -7.392138589e-07f,
--7.301099592e-07f, -7.210059734e-07f, -7.119019174e-07f, -7.027978069e-07f, -6.936936578e-07f, -6.845894857e-07f, -6.754853066e-07f, -6.663811362e-07f, -6.572769902e-07f, -6.481728844e-07f,
--6.390688347e-07f, -6.299648567e-07f, -6.208609663e-07f, -6.117571793e-07f, -6.026535113e-07f, -5.935499782e-07f, -5.844465957e-07f, -5.753433795e-07f, -5.662403455e-07f, -5.571375094e-07f,
--5.480348869e-07f, -5.389324938e-07f, -5.298303459e-07f, -5.207284588e-07f, -5.116268484e-07f, -5.025255303e-07f, -4.934245204e-07f, -4.843238342e-07f, -4.752234877e-07f, -4.661234964e-07f,
--4.570238762e-07f, -4.479246427e-07f, -4.388258117e-07f, -4.297273989e-07f, -4.206294200e-07f, -4.115318907e-07f, -4.024348268e-07f, -3.933382439e-07f, -3.842421577e-07f, -3.751465840e-07f,
--3.660515384e-07f, -3.569570367e-07f, -3.478630945e-07f, -3.387697276e-07f, -3.296769515e-07f, -3.205847821e-07f, -3.114932349e-07f, -3.024023257e-07f, -2.933120701e-07f, -2.842224838e-07f,
--2.751335825e-07f, -2.660453818e-07f, -2.569578975e-07f, -2.478711450e-07f, -2.387851402e-07f, -2.296998987e-07f, -2.206154361e-07f, -2.115317680e-07f, -2.024489101e-07f, -1.933668781e-07f,
--1.842856876e-07f, -1.752053541e-07f, -1.661258934e-07f, -1.570473211e-07f, -1.479696527e-07f, -1.388929039e-07f, -1.298170903e-07f, -1.207422276e-07f, -1.116683313e-07f, -1.025954170e-07f,
--9.352350033e-08f, -8.445259690e-08f, -7.538272228e-08f, -6.631389207e-08f, -5.724612184e-08f, -4.817942718e-08f, -3.911382367e-08f, -3.004932687e-08f, -2.098595236e-08f, -1.192371569e-08f,
--2.862632438e-09f, 6.197281852e-09f, 1.525601163e-08f, 2.431354133e-08f, 3.336985543e-08f, 4.242493838e-08f, 5.147877464e-08f, 6.053134868e-08f, 6.958264498e-08f, 7.863264801e-08f,
-8.768134225e-08f, 9.672871219e-08f, 1.057747423e-07f, 1.148194171e-07f, 1.238627211e-07f, 1.329046388e-07f, 1.419451546e-07f, 1.509842532e-07f, 1.600219190e-07f, 1.690581365e-07f,
-1.780928903e-07f, 1.871261648e-07f, 1.961579447e-07f, 2.051882145e-07f, 2.142169587e-07f, 2.232441618e-07f, 2.322698084e-07f, 2.412938831e-07f, 2.503163704e-07f, 2.593372549e-07f,
-2.683565212e-07f, 2.773741538e-07f, 2.863901374e-07f, 2.954044564e-07f, 3.044170956e-07f, 3.134280395e-07f, 3.224372726e-07f, 3.314447797e-07f, 3.404505452e-07f, 3.494545539e-07f,
-3.584567904e-07f, 3.674572392e-07f, 3.764558850e-07f, 3.854527125e-07f, 3.944477063e-07f, 4.034408509e-07f, 4.124321312e-07f, 4.214215317e-07f, 4.304090371e-07f, 4.393946321e-07f,
-4.483783013e-07f, 4.573600294e-07f, 4.663398012e-07f, 4.753176012e-07f, 4.842934142e-07f, 4.932672249e-07f, 5.022390180e-07f, 5.112087782e-07f, 5.201764902e-07f, 5.291421387e-07f,
-5.381057085e-07f, 5.470671843e-07f, 5.560265509e-07f, 5.649837929e-07f, 5.739388951e-07f, 5.828918423e-07f, 5.918426193e-07f, 6.007912108e-07f, 6.097376015e-07f, 6.186817764e-07f,
-6.276237200e-07f, 6.365634173e-07f, 6.455008531e-07f, 6.544360120e-07f, 6.633688790e-07f, 6.722994389e-07f, 6.812276764e-07f, 6.901535765e-07f, 6.990771238e-07f, 7.079983034e-07f,
-7.169170999e-07f, 7.258334983e-07f, 7.347474834e-07f, 7.436590401e-07f, 7.525681533e-07f, 7.614748077e-07f, 7.703789884e-07f, 7.792806801e-07f, 7.881798679e-07f, 7.970765365e-07f,
-8.059706709e-07f, 8.148622560e-07f, 8.237512767e-07f, 8.326377180e-07f, 8.415215647e-07f, 8.504028019e-07f, 8.592814144e-07f, 8.681573872e-07f, 8.770307052e-07f, 8.859013535e-07f,
-8.947693170e-07f, 9.036345807e-07f, 9.124971295e-07f, 9.213569485e-07f, 9.302140226e-07f, 9.390683368e-07f, 9.479198763e-07f, 9.567686258e-07f, 9.656145706e-07f, 9.744576957e-07f,
-9.832979860e-07f, 9.921354266e-07f, 1.000970003e-06f, 1.009801699e-06f, 1.018630501e-06f, 1.027456393e-06f, 1.036279361e-06f, 1.045099390e-06f, 1.053916465e-06f, 1.062730570e-06f,
-1.071541692e-06f, 1.080349814e-06f, 1.089154923e-06f, 1.097957004e-06f, 1.106756041e-06f, 1.115552019e-06f, 1.124344924e-06f, 1.133134742e-06f, 1.141921456e-06f, 1.150705053e-06f,
-1.159485517e-06f, 1.168262834e-06f, 1.177036989e-06f, 1.185807967e-06f, 1.194575753e-06f, 1.203340333e-06f, 1.212101691e-06f, 1.220859813e-06f, 1.229614685e-06f, 1.238366291e-06f,
-1.247114617e-06f, 1.255859647e-06f, 1.264601368e-06f, 1.273339764e-06f, 1.282074822e-06f, 1.290806525e-06f, 1.299534859e-06f, 1.308259811e-06f, 1.316981364e-06f, 1.325699504e-06f,
-1.334414218e-06f, 1.343125489e-06f, 1.351833304e-06f, 1.360537647e-06f, 1.369238504e-06f, 1.377935861e-06f, 1.386629702e-06f, 1.395320014e-06f, 1.404006782e-06f, 1.412689990e-06f,
-1.421369625e-06f, 1.430045671e-06f, 1.438718115e-06f, 1.447386942e-06f, 1.456052136e-06f, 1.464713684e-06f, 1.473371572e-06f, 1.482025783e-06f, 1.490676305e-06f, 1.499323122e-06f,
-1.507966220e-06f, 1.516605585e-06f, 1.525241202e-06f, 1.533873056e-06f, 1.542501133e-06f, 1.551125418e-06f, 1.559745898e-06f, 1.568362558e-06f, 1.576975382e-06f, 1.585584357e-06f,
-1.594189469e-06f, 1.602790703e-06f, 1.611388044e-06f, 1.619981478e-06f, 1.628570991e-06f, 1.637156568e-06f, 1.645738196e-06f, 1.654315859e-06f, 1.662889543e-06f, 1.671459234e-06f,
-1.680024918e-06f, 1.688586580e-06f, 1.697144206e-06f, 1.705697782e-06f, 1.714247293e-06f, 1.722792725e-06f, 1.731334064e-06f, 1.739871295e-06f, 1.748404404e-06f, 1.756933378e-06f,
-1.765458201e-06f, 1.773978860e-06f, 1.782495340e-06f, 1.791007626e-06f, 1.799515706e-06f, 1.808019565e-06f, 1.816519187e-06f, 1.825014561e-06f, 1.833505670e-06f, 1.841992501e-06f,
-1.850475040e-06f, 1.858953272e-06f, 1.867427184e-06f, 1.875896761e-06f, 1.884361990e-06f, 1.892822855e-06f, 1.901279344e-06f, 1.909731441e-06f, 1.918179134e-06f, 1.926622407e-06f,
-1.935061246e-06f, 1.943495639e-06f, 1.951925570e-06f, 1.960351026e-06f, 1.968771992e-06f, 1.977188455e-06f, 1.985600400e-06f, 1.994007814e-06f, 2.002410683e-06f, 2.010808992e-06f,
-2.019202727e-06f, 2.027591876e-06f, 2.035976423e-06f, 2.044356355e-06f, 2.052731657e-06f, 2.061102317e-06f, 2.069468320e-06f, 2.077829651e-06f, 2.086186298e-06f, 2.094538247e-06f,
-2.102885483e-06f, 2.111227993e-06f, 2.119565762e-06f, 2.127898777e-06f, 2.136227025e-06f, 2.144550491e-06f, 2.152869161e-06f, 2.161183022e-06f, 2.169492060e-06f, 2.177796261e-06f,
-2.186095612e-06f, 2.194390098e-06f, 2.202679706e-06f, 2.210964423e-06f, 2.219244233e-06f, 2.227519125e-06f, 2.235789083e-06f, 2.244054095e-06f, 2.252314146e-06f, 2.260569223e-06f,
-2.268819313e-06f, 2.277064401e-06f, 2.285304475e-06f, 2.293539519e-06f, 2.301769522e-06f, 2.309994468e-06f, 2.318214345e-06f, 2.326429139e-06f, 2.334638836e-06f, 2.342843424e-06f,
-2.351042887e-06f, 2.359237213e-06f, 2.367426388e-06f, 2.375610399e-06f, 2.383789232e-06f, 2.391962874e-06f, 2.400131310e-06f, 2.408294529e-06f, 2.416452515e-06f, 2.424605256e-06f,
-2.432752739e-06f, 2.440894949e-06f, 2.449031874e-06f, 2.457163499e-06f, 2.465289813e-06f, 2.473410800e-06f, 2.481526448e-06f, 2.489636743e-06f, 2.497741673e-06f, 2.505841223e-06f,
-2.513935381e-06f, 2.522024132e-06f, 2.530107465e-06f, 2.538185364e-06f, 2.546257818e-06f, 2.554324813e-06f, 2.562386335e-06f, 2.570442371e-06f, 2.578492909e-06f, 2.586537934e-06f,
-2.594577434e-06f, 2.602611395e-06f, 2.610639804e-06f, 2.618662648e-06f, 2.626679914e-06f, 2.634691588e-06f, 2.642697658e-06f, 2.650698110e-06f, 2.658692932e-06f, 2.666682109e-06f,
-2.674665629e-06f, 2.682643479e-06f, 2.690615646e-06f, 2.698582116e-06f, 2.706542877e-06f, 2.714497915e-06f, 2.722447218e-06f, 2.730390772e-06f, 2.738328564e-06f, 2.746260582e-06f,
-2.754186812e-06f, 2.762107242e-06f, 2.770021858e-06f, 2.777930647e-06f, 2.785833597e-06f, 2.793730695e-06f, 2.801621927e-06f, 2.809507281e-06f, 2.817386744e-06f, 2.825260302e-06f,
-2.833127944e-06f, 2.840989656e-06f, 2.848845425e-06f, 2.856695238e-06f, 2.864539083e-06f, 2.872376947e-06f, 2.880208817e-06f, 2.888034681e-06f, 2.895854524e-06f, 2.903668335e-06f,
-2.911476102e-06f, 2.919277810e-06f, 2.927073447e-06f, 2.934863002e-06f, 2.942646460e-06f, 2.950423810e-06f, 2.958195038e-06f, 2.965960132e-06f, 2.973719079e-06f, 2.981471867e-06f,
-2.989218483e-06f, 2.996958914e-06f, 3.004693148e-06f, 3.012421172e-06f, 3.020142974e-06f, 3.027858540e-06f, 3.035567859e-06f, 3.043270918e-06f, 3.050967704e-06f, 3.058658204e-06f,
-3.066342407e-06f, 3.074020300e-06f, 3.081691870e-06f, 3.089357105e-06f, 3.097015992e-06f, 3.104668519e-06f, 3.112314674e-06f, 3.119954443e-06f, 3.127587815e-06f, 3.135214777e-06f,
-3.142835317e-06f, 3.150449423e-06f, 3.158057081e-06f, 3.165658281e-06f, 3.173253008e-06f, 3.180841252e-06f, 3.188423000e-06f, 3.195998239e-06f, 3.203566957e-06f, 3.211129142e-06f,
-3.218684782e-06f, 3.226233864e-06f, 3.233776376e-06f, 3.241312306e-06f, 3.248841642e-06f, 3.256364371e-06f, 3.263880482e-06f, 3.271389962e-06f, 3.278892799e-06f, 3.286388981e-06f,
-3.293878496e-06f, 3.301361331e-06f, 3.308837475e-06f, 3.316306916e-06f, 3.323769640e-06f, 3.331225638e-06f, 3.338674895e-06f, 3.346117401e-06f, 3.353553142e-06f, 3.360982108e-06f,
-3.368404287e-06f, 3.375819665e-06f, 3.383228232e-06f, 3.390629975e-06f, 3.398024882e-06f, 3.405412942e-06f, 3.412794142e-06f, 3.420168471e-06f, 3.427535917e-06f, 3.434896467e-06f,
-3.442250111e-06f, 3.449596835e-06f, 3.456936629e-06f, 3.464269481e-06f, 3.471595378e-06f, 3.478914308e-06f, 3.486226261e-06f, 3.493531225e-06f, 3.500829187e-06f, 3.508120135e-06f,
-3.515404059e-06f, 3.522680946e-06f, 3.529950785e-06f, 3.537213564e-06f, 3.544469272e-06f, 3.551717895e-06f, 3.558959424e-06f, 3.566193847e-06f, 3.573421151e-06f, 3.580641325e-06f,
-3.587854358e-06f, 3.595060238e-06f, 3.602258954e-06f, 3.609450493e-06f, 3.616634845e-06f, 3.623811998e-06f, 3.630981940e-06f, 3.638144660e-06f, 3.645300146e-06f, 3.652448387e-06f,
-3.659589372e-06f, 3.666723089e-06f, 3.673849526e-06f, 3.680968673e-06f, 3.688080517e-06f, 3.695185048e-06f, 3.702282254e-06f, 3.709372124e-06f, 3.716454646e-06f, 3.723529810e-06f,
-3.730597603e-06f, 3.737658014e-06f, 3.744711033e-06f, 3.751756648e-06f, 3.758794847e-06f, 3.765825620e-06f, 3.772848955e-06f, 3.779864841e-06f, 3.786873267e-06f, 3.793874222e-06f,
-3.800867694e-06f, 3.807853672e-06f, 3.814832146e-06f, 3.821803104e-06f, 3.828766535e-06f, 3.835722427e-06f, 3.842670771e-06f, 3.849611554e-06f, 3.856544766e-06f, 3.863470396e-06f,
-3.870388432e-06f, 3.877298864e-06f, 3.884201681e-06f, 3.891096871e-06f, 3.897984424e-06f, 3.904864329e-06f, 3.911736575e-06f, 3.918601151e-06f, 3.925458045e-06f, 3.932307248e-06f,
-3.939148748e-06f, 3.945982535e-06f, 3.952808597e-06f, 3.959626924e-06f, 3.966437505e-06f, 3.973240329e-06f, 3.980035385e-06f, 3.986822663e-06f, 3.993602152e-06f, 4.000373841e-06f,
-4.007137719e-06f, 4.013893776e-06f, 4.020642001e-06f, 4.027382383e-06f, 4.034114912e-06f, 4.040839577e-06f, 4.047556367e-06f, 4.054265272e-06f, 4.060966281e-06f, 4.067659384e-06f,
-4.074344570e-06f, 4.081021828e-06f, 4.087691148e-06f, 4.094352519e-06f, 4.101005931e-06f, 4.107651373e-06f, 4.114288836e-06f, 4.120918307e-06f, 4.127539778e-06f, 4.134153237e-06f,
-4.140758674e-06f, 4.147356079e-06f, 4.153945441e-06f, 4.160526751e-06f, 4.167099996e-06f, 4.173665168e-06f, 4.180222256e-06f, 4.186771249e-06f, 4.193312137e-06f, 4.199844911e-06f,
-4.206369559e-06f, 4.212886072e-06f, 4.219394439e-06f, 4.225894650e-06f, 4.232386694e-06f, 4.238870562e-06f, 4.245346244e-06f, 4.251813729e-06f, 4.258273007e-06f, 4.264724068e-06f,
-4.271166902e-06f, 4.277601499e-06f, 4.284027849e-06f, 4.290445941e-06f, 4.296855765e-06f, 4.303257313e-06f, 4.309650572e-06f, 4.316035535e-06f, 4.322412190e-06f, 4.328780527e-06f,
-4.335140537e-06f, 4.341492210e-06f, 4.347835535e-06f, 4.354170504e-06f, 4.360497105e-06f, 4.366815329e-06f, 4.373125167e-06f, 4.379426608e-06f, 4.385719642e-06f, 4.392004260e-06f,
-4.398280453e-06f, 4.404548209e-06f, 4.410807519e-06f, 4.417058375e-06f, 4.423300765e-06f, 4.429534680e-06f, 4.435760111e-06f, 4.441977047e-06f, 4.448185480e-06f, 4.454385399e-06f,
-4.460576795e-06f, 4.466759658e-06f, 4.472933979e-06f, 4.479099748e-06f, 4.485256955e-06f, 4.491405591e-06f, 4.497545646e-06f, 4.503677111e-06f, 4.509799977e-06f, 4.515914233e-06f,
-4.522019871e-06f, 4.528116880e-06f, 4.534205252e-06f, 4.540284977e-06f, 4.546356045e-06f, 4.552418448e-06f, 4.558472175e-06f, 4.564517218e-06f, 4.570553567e-06f, 4.576581212e-06f,
-4.582600145e-06f, 4.588610356e-06f, 4.594611836e-06f, 4.600604576e-06f, 4.606588566e-06f, 4.612563797e-06f, 4.618530260e-06f, 4.624487946e-06f, 4.630436845e-06f, 4.636376948e-06f,
-4.642308247e-06f, 4.648230732e-06f, 4.654144393e-06f, 4.660049223e-06f, 4.665945211e-06f, 4.671832349e-06f, 4.677710627e-06f, 4.683580037e-06f, 4.689440570e-06f, 4.695292216e-06f,
-4.701134967e-06f, 4.706968814e-06f, 4.712793747e-06f, 4.718609758e-06f, 4.724416837e-06f, 4.730214977e-06f, 4.736004167e-06f, 4.741784400e-06f, 4.747555666e-06f, 4.753317956e-06f,
-4.759071262e-06f, 4.764815575e-06f, 4.770550886e-06f, 4.776277187e-06f, 4.781994467e-06f, 4.787702720e-06f, 4.793401936e-06f, 4.799092106e-06f, 4.804773221e-06f, 4.810445274e-06f,
-4.816108255e-06f, 4.821762156e-06f, 4.827406968e-06f, 4.833042682e-06f, 4.838669291e-06f, 4.844286784e-06f, 4.849895155e-06f, 4.855494394e-06f, 4.861084493e-06f, 4.866665442e-06f,
-4.872237235e-06f, 4.877799862e-06f, 4.883353315e-06f, 4.888897585e-06f, 4.894432664e-06f, 4.899958544e-06f, 4.905475217e-06f, 4.910982673e-06f, 4.916480904e-06f, 4.921969903e-06f,
-4.927449661e-06f, 4.932920169e-06f, 4.938381420e-06f, 4.943833404e-06f, 4.949276115e-06f, 4.954709543e-06f, 4.960133681e-06f, 4.965548519e-06f, 4.970954051e-06f, 4.976350268e-06f,
-4.981737161e-06f, 4.987114723e-06f, 4.992482945e-06f, 4.997841820e-06f, 5.003191339e-06f, 5.008531495e-06f, 5.013862278e-06f, 5.019183682e-06f, 5.024495698e-06f, 5.029798319e-06f,
-5.035091535e-06f, 5.040375340e-06f, 5.045649726e-06f, 5.050914683e-06f, 5.056170206e-06f, 5.061416285e-06f, 5.066652913e-06f, 5.071880082e-06f, 5.077097784e-06f, 5.082306011e-06f,
-5.087504756e-06f, 5.092694011e-06f, 5.097873768e-06f, 5.103044019e-06f, 5.108204757e-06f, 5.113355973e-06f, 5.118497661e-06f, 5.123629812e-06f, 5.128752419e-06f, 5.133865474e-06f,
-5.138968970e-06f, 5.144062898e-06f, 5.149147253e-06f, 5.154222025e-06f, 5.159287207e-06f, 5.164342792e-06f, 5.169388772e-06f, 5.174425140e-06f, 5.179451889e-06f, 5.184469010e-06f,
-5.189476496e-06f, 5.194474341e-06f, 5.199462536e-06f, 5.204441074e-06f, 5.209409948e-06f, 5.214369150e-06f, 5.219318673e-06f, 5.224258511e-06f, 5.229188654e-06f, 5.234109097e-06f,
-5.239019832e-06f, 5.243920852e-06f, 5.248812149e-06f, 5.253693716e-06f, 5.258565546e-06f, 5.263427632e-06f, 5.268279967e-06f, 5.273122543e-06f, 5.277955354e-06f, 5.282778392e-06f,
-5.287591651e-06f, 5.292395123e-06f, 5.297188800e-06f, 5.301972677e-06f, 5.306746746e-06f, 5.311511001e-06f, 5.316265433e-06f, 5.321010036e-06f, 5.325744804e-06f, 5.330469729e-06f,
-5.335184804e-06f, 5.339890023e-06f, 5.344585378e-06f, 5.349270863e-06f, 5.353946472e-06f, 5.358612196e-06f, 5.363268029e-06f, 5.367913966e-06f, 5.372549997e-06f, 5.377176118e-06f,
-5.381792322e-06f, 5.386398600e-06f, 5.390994948e-06f, 5.395581358e-06f, 5.400157824e-06f, 5.404724338e-06f, 5.409280895e-06f, 5.413827488e-06f, 5.418364109e-06f, 5.422890754e-06f,
-5.427407414e-06f, 5.431914084e-06f, 5.436410757e-06f, 5.440897426e-06f, 5.445374085e-06f, 5.449840728e-06f, 5.454297348e-06f, 5.458743939e-06f, 5.463180494e-06f, 5.467607007e-06f,
-5.472023472e-06f, 5.476429882e-06f, 5.480826231e-06f, 5.485212512e-06f, 5.489588720e-06f, 5.493954848e-06f, 5.498310890e-06f, 5.502656839e-06f, 5.506992689e-06f, 5.511318435e-06f,
-5.515634069e-06f, 5.519939587e-06f, 5.524234981e-06f, 5.528520245e-06f, 5.532795374e-06f, 5.537060361e-06f, 5.541315201e-06f, 5.545559887e-06f, 5.549794412e-06f, 5.554018773e-06f,
-5.558232961e-06f, 5.562436971e-06f, 5.566630798e-06f, 5.570814435e-06f, 5.574987876e-06f, 5.579151116e-06f, 5.583304148e-06f, 5.587446967e-06f, 5.591579567e-06f, 5.595701942e-06f,
-5.599814086e-06f, 5.603915993e-06f, 5.608007659e-06f, 5.612089076e-06f, 5.616160239e-06f, 5.620221142e-06f, 5.624271781e-06f, 5.628312148e-06f, 5.632342239e-06f, 5.636362047e-06f,
-5.640371568e-06f, 5.644370795e-06f, 5.648359723e-06f, 5.652338347e-06f, 5.656306660e-06f, 5.660264657e-06f, 5.664212333e-06f, 5.668149683e-06f, 5.672076700e-06f, 5.675993379e-06f,
-5.679899716e-06f, 5.683795703e-06f, 5.687681337e-06f, 5.691556612e-06f, 5.695421522e-06f, 5.699276061e-06f, 5.703120226e-06f, 5.706954009e-06f, 5.710777407e-06f, 5.714590414e-06f,
-5.718393023e-06f, 5.722185232e-06f, 5.725967033e-06f, 5.729738422e-06f, 5.733499394e-06f, 5.737249943e-06f, 5.740990064e-06f, 5.744719753e-06f, 5.748439004e-06f, 5.752147812e-06f,
-5.755846172e-06f, 5.759534079e-06f, 5.763211528e-06f, 5.766878514e-06f, 5.770535031e-06f, 5.774181076e-06f, 5.777816643e-06f, 5.781441726e-06f, 5.785056322e-06f, 5.788660425e-06f,
-5.792254030e-06f, 5.795837133e-06f, 5.799409729e-06f, 5.802971812e-06f, 5.806523378e-06f, 5.810064423e-06f, 5.813594941e-06f, 5.817114928e-06f, 5.820624379e-06f, 5.824123289e-06f,
-5.827611654e-06f, 5.831089469e-06f, 5.834556729e-06f, 5.838013429e-06f, 5.841459566e-06f, 5.844895134e-06f, 5.848320129e-06f, 5.851734547e-06f, 5.855138382e-06f, 5.858531630e-06f,
-5.861914288e-06f, 5.865286349e-06f, 5.868647810e-06f, 5.871998667e-06f, 5.875338915e-06f, 5.878668549e-06f, 5.881987565e-06f, 5.885295959e-06f, 5.888593727e-06f, 5.891880864e-06f,
-5.895157365e-06f, 5.898423227e-06f, 5.901678445e-06f, 5.904923016e-06f, 5.908156934e-06f, 5.911380195e-06f, 5.914592796e-06f, 5.917794732e-06f, 5.920985999e-06f, 5.924166593e-06f,
-5.927336510e-06f, 5.930495745e-06f, 5.933644295e-06f, 5.936782156e-06f, 5.939909322e-06f, 5.943025792e-06f, 5.946131560e-06f, 5.949226622e-06f, 5.952310974e-06f, 5.955384614e-06f,
-5.958447536e-06f, 5.961499736e-06f, 5.964541211e-06f, 5.967571958e-06f, 5.970591971e-06f, 5.973601248e-06f, 5.976599784e-06f, 5.979587575e-06f, 5.982564619e-06f, 5.985530910e-06f,
-5.988486446e-06f, 5.991431223e-06f, 5.994365236e-06f, 5.997288483e-06f, 6.000200960e-06f, 6.003102662e-06f, 6.005993587e-06f, 6.008873730e-06f, 6.011743089e-06f, 6.014601659e-06f,
-6.017449437e-06f, 6.020286420e-06f, 6.023112603e-06f, 6.025927985e-06f, 6.028732560e-06f, 6.031526326e-06f, 6.034309279e-06f, 6.037081416e-06f, 6.039842733e-06f, 6.042593227e-06f,
-6.045332895e-06f, 6.048061733e-06f, 6.050779738e-06f, 6.053486907e-06f, 6.056183236e-06f, 6.058868722e-06f, 6.061543362e-06f, 6.064207153e-06f, 6.066860092e-06f, 6.069502174e-06f,
-6.072133398e-06f, 6.074753760e-06f, 6.077363257e-06f, 6.079961885e-06f, 6.082549642e-06f, 6.085126525e-06f, 6.087692531e-06f, 6.090247656e-06f, 6.092791897e-06f, 6.095325252e-06f,
-6.097847718e-06f, 6.100359291e-06f, 6.102859969e-06f, 6.105349749e-06f, 6.107828628e-06f, 6.110296602e-06f, 6.112753670e-06f, 6.115199828e-06f, 6.117635074e-06f, 6.120059405e-06f,
-6.122472817e-06f, 6.124875309e-06f, 6.127266877e-06f, 6.129647519e-06f, 6.132017232e-06f, 6.134376013e-06f, 6.136723860e-06f, 6.139060770e-06f, 6.141386740e-06f, 6.143701769e-06f,
-6.146005852e-06f, 6.148298988e-06f, 6.150581175e-06f, 6.152852409e-06f, 6.155112688e-06f, 6.157362010e-06f, 6.159600372e-06f, 6.161827771e-06f, 6.164044206e-06f, 6.166249674e-06f,
-6.168444172e-06f, 6.170627698e-06f, 6.172800251e-06f, 6.174961826e-06f, 6.177112423e-06f, 6.179252038e-06f, 6.181380670e-06f, 6.183498317e-06f, 6.185604975e-06f, 6.187700643e-06f,
-6.189785319e-06f, 6.191859001e-06f, 6.193921685e-06f, 6.195973371e-06f, 6.198014056e-06f, 6.200043738e-06f, 6.202062414e-06f, 6.204070084e-06f, 6.206066744e-06f, 6.208052393e-06f,
-6.210027029e-06f, 6.211990650e-06f, 6.213943253e-06f, 6.215884837e-06f, 6.217815400e-06f, 6.219734941e-06f, 6.221643456e-06f, 6.223540945e-06f, 6.225427405e-06f, 6.227302834e-06f,
-6.229167231e-06f, 6.231020595e-06f, 6.232862922e-06f, 6.234694213e-06f, 6.236514463e-06f, 6.238323673e-06f, 6.240121840e-06f, 6.241908963e-06f, 6.243685040e-06f, 6.245450069e-06f,
-6.247204049e-06f, 6.248946978e-06f, 6.250678855e-06f, 6.252399678e-06f, 6.254109445e-06f, 6.255808155e-06f, 6.257495807e-06f, 6.259172398e-06f, 6.260837928e-06f, 6.262492396e-06f,
-6.264135799e-06f, 6.265768136e-06f, 6.267389406e-06f, 6.268999608e-06f, 6.270598739e-06f, 6.272186800e-06f, 6.273763788e-06f, 6.275329703e-06f, 6.276884542e-06f, 6.278428305e-06f,
-6.279960991e-06f, 6.281482598e-06f, 6.282993125e-06f, 6.284492571e-06f, 6.285980935e-06f, 6.287458215e-06f, 6.288924411e-06f, 6.290379522e-06f, 6.291823546e-06f, 6.293256482e-06f,
-6.294678330e-06f, 6.296089087e-06f, 6.297488755e-06f, 6.298877330e-06f, 6.300254813e-06f, 6.301621202e-06f, 6.302976497e-06f, 6.304320696e-06f, 6.305653799e-06f, 6.306975805e-06f,
-6.308286713e-06f, 6.309586522e-06f, 6.310875232e-06f, 6.312152841e-06f, 6.313419349e-06f, 6.314674755e-06f, 6.315919059e-06f, 6.317152259e-06f, 6.318374355e-06f, 6.319585347e-06f,
-6.320785233e-06f, 6.321974014e-06f, 6.323151687e-06f, 6.324318254e-06f, 6.325473713e-06f, 6.326618064e-06f, 6.327751305e-06f, 6.328873438e-06f, 6.329984461e-06f, 6.331084373e-06f,
-6.332173175e-06f, 6.333250866e-06f, 6.334317445e-06f, 6.335372912e-06f, 6.336417267e-06f, 6.337450509e-06f, 6.338472638e-06f, 6.339483653e-06f, 6.340483555e-06f, 6.341472344e-06f,
-6.342450017e-06f, 6.343416577e-06f, 6.344372022e-06f, 6.345316352e-06f, 6.346249567e-06f, 6.347171666e-06f, 6.348082651e-06f, 6.348982520e-06f, 6.349871273e-06f, 6.350748911e-06f,
-6.351615432e-06f, 6.352470839e-06f, 6.353315129e-06f, 6.354148303e-06f, 6.354970362e-06f, 6.355781305e-06f, 6.356581132e-06f, 6.357369844e-06f, 6.358147440e-06f, 6.358913920e-06f,
-6.359669285e-06f, 6.360413535e-06f, 6.361146670e-06f, 6.361868690e-06f, 6.362579595e-06f, 6.363279386e-06f, 6.363968063e-06f, 6.364645626e-06f, 6.365312075e-06f, 6.365967411e-06f,
-6.366611634e-06f, 6.367244744e-06f, 6.367866742e-06f, 6.368477628e-06f, 6.369077402e-06f, 6.369666065e-06f, 6.370243617e-06f, 6.370810059e-06f, 6.371365392e-06f, 6.371909615e-06f,
-6.372442729e-06f, 6.372964735e-06f, 6.373475633e-06f, 6.373975424e-06f, 6.374464109e-06f, 6.374941687e-06f, 6.375408161e-06f, 6.375863529e-06f, 6.376307794e-06f, 6.376740955e-06f,
-6.377163013e-06f, 6.377573970e-06f, 6.377973826e-06f, 6.378362581e-06f, 6.378740236e-06f, 6.379106793e-06f, 6.379462251e-06f, 6.379806613e-06f, 6.380139878e-06f, 6.380462047e-06f,
-6.380773123e-06f, 6.381073104e-06f, 6.381361993e-06f, 6.381639790e-06f, 6.381906496e-06f, 6.382162112e-06f, 6.382406640e-06f, 6.382640079e-06f, 6.382862432e-06f, 6.383073700e-06f,
-6.383273883e-06f, 6.383462982e-06f, 6.383640999e-06f, 6.383807935e-06f, 6.383963790e-06f, 6.384108567e-06f, 6.384242267e-06f, 6.384364889e-06f, 6.384476437e-06f, 6.384576911e-06f,
-6.384666312e-06f, 6.384744641e-06f, 6.384811901e-06f, 6.384868091e-06f, 6.384913215e-06f, 6.384947272e-06f, 6.384970265e-06f, 6.384982194e-06f, 6.384983062e-06f, 6.384972870e-06f,
-6.384951618e-06f, 6.384919309e-06f, 6.384875945e-06f, 6.384821525e-06f, 6.384756053e-06f, 6.384679530e-06f, 6.384591957e-06f, 6.384493336e-06f, 6.384383669e-06f, 6.384262957e-06f,
-6.384131201e-06f, 6.383988404e-06f, 6.383834568e-06f, 6.383669693e-06f, 6.383493781e-06f, 6.383306836e-06f, 6.383108857e-06f, 6.382899847e-06f, 6.382679808e-06f, 6.382448742e-06f,
-6.382206650e-06f, 6.381953534e-06f, 6.381689397e-06f, 6.381414239e-06f, 6.381128064e-06f, 6.380830872e-06f, 6.380522666e-06f, 6.380203448e-06f, 6.379873220e-06f, 6.379531984e-06f,
-6.379179742e-06f, 6.378816496e-06f, 6.378442248e-06f, 6.378056999e-06f, 6.377660753e-06f, 6.377253512e-06f, 6.376835277e-06f, 6.376406050e-06f, 6.375965835e-06f, 6.375514632e-06f,
-6.375052445e-06f, 6.374579275e-06f, 6.374095125e-06f, 6.373599997e-06f, 6.373093894e-06f, 6.372576817e-06f, 6.372048769e-06f, 6.371509752e-06f, 6.370959769e-06f, 6.370398822e-06f,
-6.369826914e-06f, 6.369244046e-06f, 6.368650222e-06f, 6.368045444e-06f, 6.367429714e-06f, 6.366803035e-06f, 6.366165409e-06f, 6.365516839e-06f, 6.364857328e-06f, 6.364186878e-06f,
-6.363505491e-06f, 6.362813170e-06f, 6.362109919e-06f, 6.361395739e-06f, 6.360670633e-06f, 6.359934604e-06f, 6.359187654e-06f, 6.358429787e-06f, 6.357661005e-06f, 6.356881310e-06f,
-6.356090707e-06f, 6.355289196e-06f, 6.354476782e-06f, 6.353653467e-06f, 6.352819254e-06f, 6.351974145e-06f, 6.351118144e-06f, 6.350251254e-06f, 6.349373477e-06f, 6.348484817e-06f,
-6.347585276e-06f, 6.346674858e-06f, 6.345753565e-06f, 6.344821400e-06f, 6.343878367e-06f, 6.342924469e-06f, 6.341959708e-06f, 6.340984087e-06f, 6.339997611e-06f, 6.339000281e-06f,
-6.337992102e-06f, 6.336973076e-06f, 6.335943206e-06f, 6.334902496e-06f, 6.333850949e-06f, 6.332788568e-06f, 6.331715356e-06f, 6.330631317e-06f, 6.329536454e-06f, 6.328430770e-06f,
-6.327314269e-06f, 6.326186954e-06f, 6.325048828e-06f, 6.323899895e-06f, 6.322740158e-06f, 6.321569621e-06f, 6.320388286e-06f, 6.319196158e-06f, 6.317993240e-06f, 6.316779536e-06f,
-6.315555048e-06f, 6.314319781e-06f, 6.313073738e-06f, 6.311816923e-06f, 6.310549339e-06f, 6.309270989e-06f, 6.307981879e-06f, 6.306682010e-06f, 6.305371387e-06f, 6.304050013e-06f,
-6.302717893e-06f, 6.301375030e-06f, 6.300021427e-06f, 6.298657088e-06f, 6.297282018e-06f, 6.295896219e-06f, 6.294499696e-06f, 6.293092453e-06f, 6.291674493e-06f, 6.290245821e-06f,
-6.288806439e-06f, 6.287356353e-06f, 6.285895565e-06f, 6.284424081e-06f, 6.282941903e-06f, 6.281449036e-06f, 6.279945484e-06f, 6.278431250e-06f, 6.276906340e-06f, 6.275370756e-06f,
-6.273824504e-06f, 6.272267586e-06f, 6.270700007e-06f, 6.269121772e-06f, 6.267532884e-06f, 6.265933348e-06f, 6.264323167e-06f, 6.262702346e-06f, 6.261070889e-06f, 6.259428800e-06f,
-6.257776084e-06f, 6.256112745e-06f, 6.254438787e-06f, 6.252754214e-06f, 6.251059031e-06f, 6.249353242e-06f, 6.247636851e-06f, 6.245909863e-06f, 6.244172282e-06f, 6.242424113e-06f,
-6.240665359e-06f, 6.238896026e-06f, 6.237116117e-06f, 6.235325638e-06f, 6.233524593e-06f, 6.231712986e-06f, 6.229890822e-06f, 6.228058105e-06f, 6.226214840e-06f, 6.224361031e-06f,
-6.222496684e-06f, 6.220621802e-06f, 6.218736390e-06f, 6.216840454e-06f, 6.214933997e-06f, 6.213017025e-06f, 6.211089541e-06f, 6.209151551e-06f, 6.207203060e-06f, 6.205244072e-06f,
-6.203274592e-06f, 6.201294625e-06f, 6.199304175e-06f, 6.197303248e-06f, 6.195291848e-06f, 6.193269980e-06f, 6.191237650e-06f, 6.189194861e-06f, 6.187141619e-06f, 6.185077929e-06f,
-6.183003795e-06f, 6.180919223e-06f, 6.178824218e-06f, 6.176718784e-06f, 6.174602927e-06f, 6.172476652e-06f, 6.170339964e-06f, 6.168192867e-06f, 6.166035367e-06f, 6.163867469e-06f,
-6.161689179e-06f, 6.159500500e-06f, 6.157301439e-06f, 6.155092001e-06f, 6.152872190e-06f, 6.150642013e-06f, 6.148401474e-06f, 6.146150578e-06f, 6.143889331e-06f, 6.141617738e-06f,
-6.139335804e-06f, 6.137043535e-06f, 6.134740935e-06f, 6.132428011e-06f, 6.130104768e-06f, 6.127771211e-06f, 6.125427345e-06f, 6.123073176e-06f, 6.120708709e-06f, 6.118333950e-06f,
-6.115948904e-06f, 6.113553577e-06f, 6.111147974e-06f, 6.108732101e-06f, 6.106305963e-06f, 6.103869566e-06f, 6.101422915e-06f, 6.098966016e-06f, 6.096498875e-06f, 6.094021497e-06f,
-6.091533887e-06f, 6.089036053e-06f, 6.086527998e-06f, 6.084009729e-06f, 6.081481251e-06f, 6.078942571e-06f, 6.076393694e-06f, 6.073834625e-06f, 6.071265371e-06f, 6.068685938e-06f,
-6.066096330e-06f, 6.063496555e-06f, 6.060886617e-06f, 6.058266523e-06f, 6.055636278e-06f, 6.052995889e-06f, 6.050345361e-06f, 6.047684700e-06f, 6.045013913e-06f, 6.042333004e-06f,
-6.039641981e-06f, 6.036940849e-06f, 6.034229613e-06f, 6.031508282e-06f, 6.028776859e-06f, 6.026035351e-06f, 6.023283765e-06f, 6.020522106e-06f, 6.017750381e-06f, 6.014968595e-06f,
-6.012176755e-06f, 6.009374867e-06f, 6.006562937e-06f, 6.003740972e-06f, 6.000908977e-06f, 5.998066959e-06f, 5.995214923e-06f, 5.992352877e-06f, 5.989480827e-06f, 5.986598778e-06f,
-5.983706738e-06f, 5.980804711e-06f, 5.977892706e-06f, 5.974970728e-06f, 5.972038783e-06f, 5.969096878e-06f, 5.966145020e-06f, 5.963183214e-06f, 5.960211468e-06f, 5.957229787e-06f,
-5.954238178e-06f, 5.951236648e-06f, 5.948225203e-06f, 5.945203849e-06f, 5.942172594e-06f, 5.939131443e-06f, 5.936080404e-06f, 5.933019482e-06f, 5.929948685e-06f, 5.926868020e-06f,
-5.923777491e-06f, 5.920677108e-06f, 5.917566875e-06f, 5.914446800e-06f, 5.911316889e-06f, 5.908177150e-06f, 5.905027588e-06f, 5.901868212e-06f, 5.898699026e-06f, 5.895520039e-06f,
-5.892331256e-06f, 5.889132686e-06f, 5.885924334e-06f, 5.882706208e-06f, 5.879478314e-06f, 5.876240659e-06f, 5.872993250e-06f, 5.869736094e-06f, 5.866469198e-06f, 5.863192569e-06f,
-5.859906214e-06f, 5.856610140e-06f, 5.853304353e-06f, 5.849988862e-06f, 5.846663672e-06f, 5.843328791e-06f, 5.839984226e-06f, 5.836629984e-06f, 5.833266071e-06f, 5.829892497e-06f,
-5.826509266e-06f, 5.823116387e-06f, 5.819713866e-06f, 5.816301712e-06f, 5.812879930e-06f, 5.809448528e-06f, 5.806007513e-06f, 5.802556893e-06f, 5.799096675e-06f, 5.795626866e-06f,
-5.792147473e-06f, 5.788658504e-06f, 5.785159966e-06f, 5.781651866e-06f, 5.778134212e-06f, 5.774607010e-06f, 5.771070269e-06f, 5.767523996e-06f, 5.763968197e-06f, 5.760402881e-06f,
-5.756828055e-06f, 5.753243727e-06f, 5.749649903e-06f, 5.746046592e-06f, 5.742433800e-06f, 5.738811536e-06f, 5.735179806e-06f, 5.731538619e-06f, 5.727887982e-06f, 5.724227902e-06f,
-5.720558388e-06f, 5.716879446e-06f, 5.713191084e-06f, 5.709493311e-06f, 5.705786133e-06f, 5.702069558e-06f, 5.698343594e-06f, 5.694608248e-06f, 5.690863529e-06f, 5.687109444e-06f,
-5.683346001e-06f, 5.679573208e-06f, 5.675791071e-06f, 5.671999600e-06f, 5.668198802e-06f, 5.664388684e-06f, 5.660569255e-06f, 5.656740522e-06f, 5.652902493e-06f, 5.649055177e-06f,
-5.645198580e-06f, 5.641332712e-06f, 5.637457579e-06f, 5.633573190e-06f, 5.629679552e-06f, 5.625776675e-06f, 5.621864565e-06f, 5.617943230e-06f, 5.614012679e-06f, 5.610072920e-06f,
-5.606123961e-06f, 5.602165809e-06f, 5.598198474e-06f, 5.594221962e-06f, 5.590236282e-06f, 5.586241442e-06f, 5.582237451e-06f, 5.578224316e-06f, 5.574202045e-06f, 5.570170647e-06f,
-5.566130130e-06f, 5.562080503e-06f, 5.558021772e-06f, 5.553953947e-06f, 5.549877036e-06f, 5.545791047e-06f, 5.541695989e-06f, 5.537591869e-06f, 5.533478696e-06f, 5.529356478e-06f,
-5.525225224e-06f, 5.521084942e-06f, 5.516935640e-06f, 5.512777327e-06f, 5.508610011e-06f, 5.504433700e-06f, 5.500248404e-06f, 5.496054129e-06f, 5.491850886e-06f, 5.487638682e-06f,
-5.483417525e-06f, 5.479187425e-06f, 5.474948390e-06f, 5.470700427e-06f, 5.466443547e-06f, 5.462177757e-06f, 5.457903066e-06f, 5.453619482e-06f, 5.449327015e-06f, 5.445025672e-06f,
-5.440715462e-06f, 5.436396395e-06f, 5.432068478e-06f, 5.427731720e-06f, 5.423386131e-06f, 5.419031718e-06f, 5.414668490e-06f, 5.410296457e-06f, 5.405915626e-06f, 5.401526007e-06f,
-5.397127608e-06f, 5.392720438e-06f, 5.388304507e-06f, 5.383879822e-06f, 5.379446392e-06f, 5.375004227e-06f, 5.370553335e-06f, 5.366093725e-06f, 5.361625407e-06f, 5.357148388e-06f,
-5.352662677e-06f, 5.348168285e-06f, 5.343665219e-06f, 5.339153488e-06f, 5.334633103e-06f, 5.330104070e-06f, 5.325566400e-06f, 5.321020102e-06f, 5.316465184e-06f, 5.311901655e-06f,
-5.307329526e-06f, 5.302748803e-06f, 5.298159498e-06f, 5.293561618e-06f, 5.288955173e-06f, 5.284340172e-06f, 5.279716624e-06f, 5.275084539e-06f, 5.270443925e-06f, 5.265794791e-06f,
-5.261137147e-06f, 5.256471002e-06f, 5.251796366e-06f, 5.247113246e-06f, 5.242421653e-06f, 5.237721596e-06f, 5.233013085e-06f, 5.228296127e-06f, 5.223570733e-06f, 5.218836913e-06f,
-5.214094674e-06f, 5.209344027e-06f, 5.204584981e-06f, 5.199817545e-06f, 5.195041729e-06f, 5.190257543e-06f, 5.185464994e-06f, 5.180664093e-06f, 5.175854850e-06f, 5.171037273e-06f,
-5.166211373e-06f, 5.161377158e-06f, 5.156534638e-06f, 5.151683823e-06f, 5.146824722e-06f, 5.141957344e-06f, 5.137081700e-06f, 5.132197798e-06f, 5.127305648e-06f, 5.122405261e-06f,
-5.117496644e-06f, 5.112579809e-06f, 5.107654764e-06f, 5.102721519e-06f, 5.097780084e-06f, 5.092830468e-06f, 5.087872682e-06f, 5.082906734e-06f, 5.077932635e-06f, 5.072950394e-06f,
-5.067960021e-06f, 5.062961525e-06f, 5.057954917e-06f, 5.052940205e-06f, 5.047917401e-06f, 5.042886513e-06f, 5.037847551e-06f, 5.032800526e-06f, 5.027745446e-06f, 5.022682322e-06f,
-5.017611164e-06f, 5.012531982e-06f, 5.007444784e-06f, 5.002349582e-06f, 4.997246385e-06f, 4.992135203e-06f, 4.987016046e-06f, 4.981888924e-06f, 4.976753847e-06f, 4.971610824e-06f,
-4.966459866e-06f, 4.961300982e-06f, 4.956134183e-06f, 4.950959479e-06f, 4.945776880e-06f, 4.940586395e-06f, 4.935388034e-06f, 4.930181809e-06f, 4.924967728e-06f, 4.919745802e-06f,
-4.914516042e-06f, 4.909278456e-06f, 4.904033055e-06f, 4.898779850e-06f, 4.893518850e-06f, 4.888250065e-06f, 4.882973507e-06f, 4.877689184e-06f, 4.872397107e-06f, 4.867097287e-06f,
-4.861789733e-06f, 4.856474456e-06f, 4.851151465e-06f, 4.845820772e-06f, 4.840482386e-06f, 4.835136318e-06f, 4.829782578e-06f, 4.824421176e-06f, 4.819052123e-06f, 4.813675429e-06f,
-4.808291104e-06f, 4.802899158e-06f, 4.797499602e-06f, 4.792092446e-06f, 4.786677701e-06f, 4.781255378e-06f, 4.775825485e-06f, 4.770388034e-06f, 4.764943036e-06f, 4.759490500e-06f,
-4.754030437e-06f, 4.748562858e-06f, 4.743087773e-06f, 4.737605192e-06f, 4.732115127e-06f, 4.726617586e-06f, 4.721112582e-06f, 4.715600125e-06f, 4.710080224e-06f, 4.704552891e-06f,
-4.699018137e-06f, 4.693475971e-06f, 4.687926404e-06f, 4.682369447e-06f, 4.676805111e-06f, 4.671233406e-06f, 4.665654343e-06f, 4.660067932e-06f, 4.654474185e-06f, 4.648873111e-06f,
-4.643264721e-06f, 4.637649027e-06f, 4.632026038e-06f, 4.626395766e-06f, 4.620758221e-06f, 4.615113414e-06f, 4.609461356e-06f, 4.603802057e-06f, 4.598135528e-06f, 4.592461781e-06f,
-4.586780825e-06f, 4.581092672e-06f, 4.575397332e-06f, 4.569694816e-06f, 4.563985135e-06f, 4.558268300e-06f, 4.552544322e-06f, 4.546813212e-06f, 4.541074980e-06f, 4.535329637e-06f,
-4.529577194e-06f, 4.523817663e-06f, 4.518051054e-06f, 4.512277377e-06f, 4.506496645e-06f, 4.500708867e-06f, 4.494914056e-06f, 4.489112221e-06f, 4.483303374e-06f, 4.477487525e-06f,
-4.471664687e-06f, 4.465834869e-06f, 4.459998083e-06f, 4.454154340e-06f, 4.448303651e-06f, 4.442446027e-06f, 4.436581479e-06f, 4.430710018e-06f, 4.424831655e-06f, 4.418946401e-06f,
-4.413054268e-06f, 4.407155266e-06f, 4.401249407e-06f, 4.395336702e-06f, 4.389417162e-06f, 4.383490798e-06f, 4.377557621e-06f, 4.371617643e-06f, 4.365670874e-06f, 4.359717326e-06f,
-4.353757011e-06f, 4.347789938e-06f, 4.341816120e-06f, 4.335835568e-06f, 4.329848293e-06f, 4.323854306e-06f, 4.317853619e-06f, 4.311846243e-06f, 4.305832188e-06f, 4.299811468e-06f,
-4.293784092e-06f, 4.287750072e-06f, 4.281709419e-06f, 4.275662146e-06f, 4.269608262e-06f, 4.263547780e-06f, 4.257480711e-06f, 4.251407066e-06f, 4.245326856e-06f, 4.239240094e-06f,
-4.233146790e-06f, 4.227046957e-06f, 4.220940604e-06f, 4.214827744e-06f, 4.208708389e-06f, 4.202582549e-06f, 4.196450236e-06f, 4.190311462e-06f, 4.184166238e-06f, 4.178014576e-06f,
-4.171856487e-06f, 4.165691982e-06f, 4.159521074e-06f, 4.153343774e-06f, 4.147160092e-06f, 4.140970042e-06f, 4.134773634e-06f, 4.128570880e-06f, 4.122361792e-06f, 4.116146381e-06f,
-4.109924659e-06f, 4.103696637e-06f, 4.097462327e-06f, 4.091221741e-06f, 4.084974890e-06f, 4.078721786e-06f, 4.072462441e-06f, 4.066196866e-06f, 4.059925073e-06f, 4.053647074e-06f,
-4.047362880e-06f, 4.041072503e-06f, 4.034775956e-06f, 4.028473248e-06f, 4.022164393e-06f, 4.015849402e-06f, 4.009528287e-06f, 4.003201059e-06f, 3.996867731e-06f, 3.990528314e-06f,
-3.984182819e-06f, 3.977831260e-06f, 3.971473647e-06f, 3.965109992e-06f, 3.958740307e-06f, 3.952364605e-06f, 3.945982896e-06f, 3.939595193e-06f, 3.933201507e-06f, 3.926801851e-06f,
-3.920396236e-06f, 3.913984675e-06f, 3.907567178e-06f, 3.901143759e-06f, 3.894714428e-06f, 3.888279199e-06f, 3.881838082e-06f, 3.875391089e-06f, 3.868938234e-06f, 3.862479527e-06f,
-3.856014981e-06f, 3.849544607e-06f, 3.843068418e-06f, 3.836586425e-06f, 3.830098641e-06f, 3.823605078e-06f, 3.817105747e-06f, 3.810600660e-06f, 3.804089831e-06f, 3.797573270e-06f,
-3.791050989e-06f, 3.784523002e-06f, 3.777989319e-06f, 3.771449954e-06f, 3.764904917e-06f, 3.758354222e-06f, 3.751797880e-06f, 3.745235903e-06f, 3.738668303e-06f, 3.732095093e-06f,
-3.725516285e-06f, 3.718931891e-06f, 3.712341923e-06f, 3.705746392e-06f, 3.699145313e-06f, 3.692538695e-06f, 3.685926553e-06f, 3.679308897e-06f, 3.672685740e-06f, 3.666057095e-06f,
-3.659422973e-06f, 3.652783387e-06f, 3.646138349e-06f, 3.639487871e-06f, 3.632831965e-06f, 3.626170645e-06f, 3.619503921e-06f, 3.612831806e-06f, 3.606154313e-06f, 3.599471454e-06f,
-3.592783240e-06f, 3.586089685e-06f, 3.579390801e-06f, 3.572686600e-06f, 3.565977094e-06f, 3.559262296e-06f, 3.552542217e-06f, 3.545816872e-06f, 3.539086270e-06f, 3.532350426e-06f,
-3.525609351e-06f, 3.518863058e-06f, 3.512111560e-06f, 3.505354867e-06f, 3.498592994e-06f, 3.491825952e-06f, 3.485053754e-06f, 3.478276412e-06f, 3.471493939e-06f, 3.464706347e-06f,
-3.457913648e-06f, 3.451115855e-06f, 3.444312981e-06f, 3.437505038e-06f, 3.430692037e-06f, 3.423873993e-06f, 3.417050917e-06f, 3.410222822e-06f, 3.403389720e-06f, 3.396551624e-06f,
-3.389708546e-06f, 3.382860499e-06f, 3.376007496e-06f, 3.369149548e-06f, 3.362286669e-06f, 3.355418871e-06f, 3.348546166e-06f, 3.341668567e-06f, 3.334786087e-06f, 3.327898739e-06f,
-3.321006534e-06f, 3.314109485e-06f, 3.307207606e-06f, 3.300300908e-06f, 3.293389404e-06f, 3.286473108e-06f, 3.279552030e-06f, 3.272626185e-06f, 3.265695584e-06f, 3.258760241e-06f,
-3.251820168e-06f, 3.244875377e-06f, 3.237925882e-06f, 3.230971695e-06f, 3.224012828e-06f, 3.217049295e-06f, 3.210081108e-06f, 3.203108280e-06f, 3.196130823e-06f, 3.189148750e-06f,
-3.182162074e-06f, 3.175170807e-06f, 3.168174963e-06f, 3.161174554e-06f, 3.154169593e-06f, 3.147160092e-06f, 3.140146064e-06f, 3.133127522e-06f, 3.126104480e-06f, 3.119076948e-06f,
-3.112044941e-06f, 3.105008471e-06f, 3.097967551e-06f, 3.090922194e-06f, 3.083872412e-06f, 3.076818219e-06f, 3.069759626e-06f, 3.062696648e-06f, 3.055629296e-06f, 3.048557583e-06f,
-3.041481523e-06f, 3.034401129e-06f, 3.027316412e-06f, 3.020227387e-06f, 3.013134065e-06f, 3.006036459e-06f, 2.998934584e-06f, 2.991828450e-06f, 2.984718072e-06f, 2.977603463e-06f,
-2.970484634e-06f, 2.963361599e-06f, 2.956234371e-06f, 2.949102963e-06f, 2.941967387e-06f, 2.934827657e-06f, 2.927683786e-06f, 2.920535786e-06f, 2.913383670e-06f, 2.906227452e-06f,
-2.899067144e-06f, 2.891902759e-06f, 2.884734311e-06f, 2.877561811e-06f, 2.870385274e-06f, 2.863204712e-06f, 2.856020138e-06f, 2.848831564e-06f, 2.841639005e-06f, 2.834442473e-06f,
-2.827241982e-06f, 2.820037543e-06f, 2.812829170e-06f, 2.805616876e-06f, 2.798400674e-06f, 2.791180578e-06f, 2.783956599e-06f, 2.776728752e-06f, 2.769497049e-06f, 2.762261504e-06f,
-2.755022128e-06f, 2.747778936e-06f, 2.740531941e-06f, 2.733281155e-06f, 2.726026591e-06f, 2.718768263e-06f, 2.711506184e-06f, 2.704240367e-06f, 2.696970824e-06f, 2.689697570e-06f,
-2.682420616e-06f, 2.675139977e-06f, 2.667855665e-06f, 2.660567694e-06f, 2.653276076e-06f, 2.645980825e-06f, 2.638681953e-06f, 2.631379475e-06f, 2.624073402e-06f, 2.616763749e-06f,
-2.609450528e-06f, 2.602133752e-06f, 2.594813435e-06f, 2.587489590e-06f, 2.580162230e-06f, 2.572831368e-06f, 2.565497017e-06f, 2.558159191e-06f, 2.550817903e-06f, 2.543473165e-06f,
-2.536124991e-06f, 2.528773394e-06f, 2.521418388e-06f, 2.514059986e-06f, 2.506698200e-06f, 2.499333044e-06f, 2.491964532e-06f, 2.484592675e-06f, 2.477217489e-06f, 2.469838986e-06f,
-2.462457178e-06f, 2.455072080e-06f, 2.447683705e-06f, 2.440292065e-06f, 2.432897175e-06f, 2.425499046e-06f, 2.418097694e-06f, 2.410693130e-06f, 2.403285368e-06f, 2.395874422e-06f,
-2.388460304e-06f, 2.381043028e-06f, 2.373622608e-06f, 2.366199056e-06f, 2.358772385e-06f, 2.351342610e-06f, 2.343909743e-06f, 2.336473797e-06f, 2.329034786e-06f, 2.321592724e-06f,
-2.314147623e-06f, 2.306699497e-06f, 2.299248359e-06f, 2.291794223e-06f, 2.284337101e-06f, 2.276877007e-06f, 2.269413955e-06f, 2.261947957e-06f, 2.254479028e-06f, 2.247007180e-06f,
-2.239532427e-06f, 2.232054781e-06f, 2.224574257e-06f, 2.217090868e-06f, 2.209604628e-06f, 2.202115548e-06f, 2.194623644e-06f, 2.187128927e-06f, 2.179631412e-06f, 2.172131112e-06f,
-2.164628041e-06f, 2.157122211e-06f, 2.149613636e-06f, 2.142102330e-06f, 2.134588305e-06f, 2.127071575e-06f, 2.119552155e-06f, 2.112030056e-06f, 2.104505292e-06f, 2.096977877e-06f,
-2.089447825e-06f, 2.081915148e-06f, 2.074379860e-06f, 2.066841974e-06f, 2.059301504e-06f, 2.051758464e-06f, 2.044212865e-06f, 2.036664723e-06f, 2.029114051e-06f, 2.021560861e-06f,
-2.014005168e-06f, 2.006446984e-06f, 1.998886324e-06f, 1.991323200e-06f, 1.983757626e-06f, 1.976189616e-06f, 1.968619182e-06f, 1.961046339e-06f, 1.953471100e-06f, 1.945893478e-06f,
-1.938313487e-06f, 1.930731140e-06f, 1.923146450e-06f, 1.915559432e-06f, 1.907970098e-06f, 1.900378462e-06f, 1.892784538e-06f, 1.885188338e-06f, 1.877589877e-06f, 1.869989168e-06f,
-1.862386224e-06f, 1.854781059e-06f, 1.847173686e-06f, 1.839564119e-06f, 1.831952372e-06f, 1.824338457e-06f, 1.816722388e-06f, 1.809104179e-06f, 1.801483843e-06f, 1.793861394e-06f,
-1.786236845e-06f, 1.778610210e-06f, 1.770981502e-06f, 1.763350735e-06f, 1.755717922e-06f, 1.748083076e-06f, 1.740446212e-06f, 1.732807342e-06f, 1.725166481e-06f, 1.717523641e-06f,
-1.709878837e-06f, 1.702232081e-06f, 1.694583388e-06f, 1.686932770e-06f, 1.679280242e-06f, 1.671625816e-06f, 1.663969507e-06f, 1.656311327e-06f, 1.648651291e-06f, 1.640989412e-06f,
-1.633325703e-06f, 1.625660178e-06f, 1.617992851e-06f, 1.610323735e-06f, 1.602652843e-06f, 1.594980189e-06f, 1.587305787e-06f, 1.579629650e-06f, 1.571951792e-06f, 1.564272226e-06f,
-1.556590965e-06f, 1.548908024e-06f, 1.541223416e-06f, 1.533537154e-06f, 1.525849252e-06f, 1.518159723e-06f, 1.510468582e-06f, 1.502775841e-06f, 1.495081514e-06f, 1.487385615e-06f,
-1.479688157e-06f, 1.471989154e-06f, 1.464288619e-06f, 1.456586565e-06f, 1.448883008e-06f, 1.441177959e-06f, 1.433471433e-06f, 1.425763443e-06f, 1.418054002e-06f, 1.410343125e-06f,
-1.402630824e-06f, 1.394917114e-06f, 1.387202007e-06f, 1.379485518e-06f, 1.371767660e-06f, 1.364048446e-06f, 1.356327891e-06f, 1.348606007e-06f, 1.340882808e-06f, 1.333158308e-06f,
-1.325432521e-06f, 1.317705459e-06f, 1.309977137e-06f, 1.302247568e-06f, 1.294516766e-06f, 1.286784743e-06f, 1.279051515e-06f, 1.271317093e-06f, 1.263581493e-06f, 1.255844727e-06f,
-1.248106809e-06f, 1.240367752e-06f, 1.232627571e-06f, 1.224886278e-06f, 1.217143888e-06f, 1.209400413e-06f, 1.201655868e-06f, 1.193910266e-06f, 1.186163620e-06f, 1.178415945e-06f,
-1.170667253e-06f, 1.162917558e-06f, 1.155166874e-06f, 1.147415215e-06f, 1.139662593e-06f, 1.131909023e-06f, 1.124154518e-06f, 1.116399091e-06f, 1.108642757e-06f, 1.100885529e-06f,
-1.093127420e-06f, 1.085368443e-06f, 1.077608614e-06f, 1.069847944e-06f, 1.062086448e-06f, 1.054324139e-06f, 1.046561031e-06f, 1.038797137e-06f, 1.031032471e-06f, 1.023267046e-06f,
-1.015500876e-06f, 1.007733975e-06f, 9.999663558e-07f, 9.921980323e-07f, 9.844290181e-07f, 9.766593267e-07f, 9.688889716e-07f, 9.611179663e-07f, 9.533463246e-07f, 9.455740598e-07f,
-9.378011856e-07f, 9.300277156e-07f, 9.222536632e-07f, 9.144790420e-07f, 9.067038656e-07f, 8.989281476e-07f, 8.911519014e-07f, 8.833751407e-07f, 8.755978789e-07f, 8.678201297e-07f,
-8.600419066e-07f, 8.522632231e-07f, 8.444840928e-07f, 8.367045292e-07f, 8.289245459e-07f, 8.211441564e-07f, 8.133633742e-07f, 8.055822129e-07f, 7.978006861e-07f, 7.900188072e-07f,
-7.822365898e-07f, 7.744540474e-07f, 7.666711937e-07f, 7.588880420e-07f, 7.511046060e-07f, 7.433208991e-07f, 7.355369350e-07f, 7.277527271e-07f, 7.199682889e-07f, 7.121836340e-07f,
-7.043987760e-07f, 6.966137282e-07f, 6.888285043e-07f, 6.810431178e-07f, 6.732575821e-07f, 6.654719109e-07f, 6.576861176e-07f, 6.499002157e-07f, 6.421142187e-07f, 6.343281402e-07f,
-6.265419937e-07f, 6.187557926e-07f, 6.109695506e-07f, 6.031832809e-07f, 5.953969973e-07f, 5.876107132e-07f, 5.798244420e-07f, 5.720381973e-07f, 5.642519926e-07f, 5.564658413e-07f,
-5.486797570e-07f, 5.408937531e-07f, 5.331078432e-07f, 5.253220407e-07f, 5.175363590e-07f, 5.097508118e-07f, 5.019654124e-07f, 4.941801743e-07f, 4.863951111e-07f, 4.786102361e-07f,
-4.708255629e-07f, 4.630411049e-07f, 4.552568756e-07f, 4.474728884e-07f, 4.396891569e-07f, 4.319056944e-07f, 4.241225145e-07f, 4.163396306e-07f, 4.085570561e-07f, 4.007748045e-07f,
-3.929928892e-07f, 3.852113237e-07f, 3.774301215e-07f, 3.696492959e-07f, 3.618688604e-07f, 3.540888285e-07f, 3.463092135e-07f, 3.385300290e-07f, 3.307512883e-07f, 3.229730049e-07f,
-3.151951922e-07f, 3.074178636e-07f, 2.996410325e-07f, 2.918647123e-07f, 2.840889165e-07f, 2.763136585e-07f, 2.685389517e-07f, 2.607648095e-07f, 2.529912452e-07f, 2.452182723e-07f,
-2.374459042e-07f, 2.296741543e-07f, 2.219030360e-07f, 2.141325626e-07f, 2.063627475e-07f, 1.985936042e-07f, 1.908251460e-07f, 1.830573862e-07f, 1.752903384e-07f, 1.675240157e-07f,
-1.597584316e-07f, 1.519935995e-07f, 1.442295327e-07f, 1.364662446e-07f, 1.287037485e-07f, 1.209420578e-07f, 1.131811858e-07f, 1.054211459e-07f, 9.766195147e-08f, 8.990361576e-08f,
-8.214615214e-08f, 7.438957396e-08f, 6.663389453e-08f, 5.887912719e-08f, 5.112528526e-08f, 4.337238205e-08f, 3.562043089e-08f, 2.786944508e-08f, 2.011943794e-08f, 1.237042277e-08f,
-4.622412867e-09f, -3.124578460e-09f, -1.087053792e-08f, -1.861545222e-08f, -2.635930807e-08f, -3.410209220e-08f, -4.184379131e-08f, -4.958439213e-08f, -5.732388139e-08f, -6.506224581e-08f,
--7.279947214e-08f, -8.053554710e-08f, -8.827045745e-08f, -9.600418992e-08f, -1.037367313e-07f, -1.114680682e-07f, -1.191981876e-07f, -1.269270761e-07f, -1.346547205e-07f, -1.423811076e-07f,
--1.501062241e-07f, -1.578300568e-07f, -1.655525926e-07f, -1.732738181e-07f, -1.809937203e-07f, -1.887122857e-07f, -1.964295014e-07f, -2.041453540e-07f, -2.118598304e-07f, -2.195729174e-07f,
--2.272846017e-07f, -2.349948703e-07f, -2.427037099e-07f, -2.504111073e-07f, -2.581170494e-07f, -2.658215231e-07f, -2.735245151e-07f, -2.812260123e-07f, -2.889260015e-07f, -2.966244696e-07f,
--3.043214035e-07f, -3.120167900e-07f, -3.197106160e-07f, -3.274028683e-07f, -3.350935338e-07f, -3.427825995e-07f, -3.504700521e-07f, -3.581558785e-07f, -3.658400658e-07f, -3.735226006e-07f,
--3.812034701e-07f, -3.888826609e-07f, -3.965601602e-07f, -4.042359547e-07f, -4.119100315e-07f, -4.195823773e-07f, -4.272529792e-07f, -4.349218241e-07f, -4.425888989e-07f, -4.502541906e-07f,
--4.579176861e-07f, -4.655793724e-07f, -4.732392364e-07f, -4.808972650e-07f, -4.885534454e-07f, -4.962077643e-07f, -5.038602089e-07f, -5.115107660e-07f, -5.191594227e-07f, -5.268061660e-07f,
--5.344509829e-07f, -5.420938603e-07f, -5.497347853e-07f, -5.573737448e-07f, -5.650107260e-07f, -5.726457158e-07f, -5.802787012e-07f, -5.879096694e-07f, -5.955386072e-07f, -6.031655018e-07f,
--6.107903403e-07f, -6.184131096e-07f, -6.260337968e-07f, -6.336523891e-07f, -6.412688734e-07f, -6.488832368e-07f, -6.564954664e-07f, -6.641055494e-07f, -6.717134728e-07f, -6.793192236e-07f,
--6.869227891e-07f, -6.945241563e-07f, -7.021233122e-07f, -7.097202442e-07f, -7.173149391e-07f, -7.249073843e-07f, -7.324975668e-07f, -7.400854738e-07f, -7.476710924e-07f, -7.552544098e-07f,
--7.628354131e-07f, -7.704140895e-07f, -7.779904262e-07f, -7.855644103e-07f, -7.931360290e-07f, -8.007052695e-07f, -8.082721191e-07f, -8.158365648e-07f, -8.233985940e-07f, -8.309581937e-07f,
--8.385153513e-07f, -8.460700540e-07f, -8.536222889e-07f, -8.611720434e-07f, -8.687193046e-07f, -8.762640599e-07f, -8.838062963e-07f, -8.913460014e-07f, -8.988831622e-07f, -9.064177660e-07f,
--9.139498002e-07f, -9.214792520e-07f, -9.290061087e-07f, -9.365303576e-07f, -9.440519860e-07f, -9.515709812e-07f, -9.590873305e-07f, -9.666010213e-07f, -9.741120408e-07f, -9.816203765e-07f,
--9.891260156e-07f, -9.966289454e-07f, -1.004129153e-06f, -1.011626627e-06f, -1.019121353e-06f, -1.026613320e-06f, -1.034102514e-06f, -1.041588923e-06f, -1.049072535e-06f, -1.056553336e-06f,
--1.064031315e-06f, -1.071506458e-06f, -1.078978753e-06f, -1.086448188e-06f, -1.093914750e-06f, -1.101378425e-06f, -1.108839203e-06f, -1.116297070e-06f, -1.123752013e-06f, -1.131204021e-06f,
--1.138653080e-06f, -1.146099178e-06f, -1.153542303e-06f, -1.160982442e-06f, -1.168419582e-06f, -1.175853712e-06f, -1.183284818e-06f, -1.190712888e-06f, -1.198137909e-06f, -1.205559870e-06f,
--1.212978757e-06f, -1.220394559e-06f, -1.227807263e-06f, -1.235216855e-06f, -1.242623325e-06f, -1.250026659e-06f, -1.257426845e-06f, -1.264823871e-06f, -1.272217724e-06f, -1.279608392e-06f,
--1.286995863e-06f, -1.294380123e-06f, -1.301761161e-06f, -1.309138965e-06f, -1.316513521e-06f, -1.323884819e-06f, -1.331252844e-06f, -1.338617585e-06f, -1.345979030e-06f, -1.353337166e-06f,
--1.360691981e-06f, -1.368043463e-06f, -1.375391599e-06f, -1.382736377e-06f, -1.390077785e-06f, -1.397415810e-06f, -1.404750441e-06f, -1.412081664e-06f, -1.419409469e-06f, -1.426733841e-06f,
--1.434054770e-06f, -1.441372243e-06f, -1.448686247e-06f, -1.455996771e-06f, -1.463303802e-06f, -1.470607329e-06f, -1.477907338e-06f, -1.485203818e-06f, -1.492496757e-06f, -1.499786141e-06f,
--1.507071960e-06f, -1.514354202e-06f, -1.521632852e-06f, -1.528907901e-06f, -1.536179335e-06f, -1.543447143e-06f, -1.550711312e-06f, -1.557971831e-06f, -1.565228686e-06f, -1.572481867e-06f,
--1.579731360e-06f, -1.586977155e-06f, -1.594219238e-06f, -1.601457598e-06f, -1.608692223e-06f, -1.615923100e-06f, -1.623150218e-06f, -1.630373565e-06f, -1.637593128e-06f, -1.644808896e-06f,
--1.652020856e-06f, -1.659228996e-06f, -1.666433306e-06f, -1.673633772e-06f, -1.680830382e-06f, -1.688023125e-06f, -1.695211989e-06f, -1.702396962e-06f, -1.709578031e-06f, -1.716755185e-06f,
--1.723928412e-06f, -1.731097701e-06f, -1.738263038e-06f, -1.745424412e-06f, -1.752581812e-06f, -1.759735225e-06f, -1.766884640e-06f, -1.774030045e-06f, -1.781171427e-06f, -1.788308776e-06f,
--1.795442079e-06f, -1.802571324e-06f, -1.809696499e-06f, -1.816817593e-06f, -1.823934594e-06f, -1.831047491e-06f, -1.838156270e-06f, -1.845260921e-06f, -1.852361432e-06f, -1.859457791e-06f,
--1.866549987e-06f, -1.873638006e-06f, -1.880721839e-06f, -1.887801473e-06f, -1.894876896e-06f, -1.901948096e-06f, -1.909015063e-06f, -1.916077784e-06f, -1.923136247e-06f, -1.930190441e-06f,
--1.937240355e-06f, -1.944285976e-06f, -1.951327293e-06f, -1.958364295e-06f, -1.965396969e-06f, -1.972425304e-06f, -1.979449289e-06f, -1.986468911e-06f, -1.993484160e-06f, -2.000495024e-06f,
--2.007501490e-06f, -2.014503548e-06f, -2.021501186e-06f, -2.028494393e-06f, -2.035483157e-06f, -2.042467466e-06f, -2.049447308e-06f, -2.056422674e-06f, -2.063393550e-06f, -2.070359925e-06f,
--2.077321788e-06f, -2.084279128e-06f, -2.091231933e-06f, -2.098180191e-06f, -2.105123892e-06f, -2.112063023e-06f, -2.118997573e-06f, -2.125927531e-06f, -2.132852886e-06f, -2.139773625e-06f,
--2.146689738e-06f, -2.153601214e-06f, -2.160508040e-06f, -2.167410206e-06f, -2.174307700e-06f, -2.181200510e-06f, -2.188088627e-06f, -2.194972037e-06f, -2.201850731e-06f, -2.208724696e-06f,
--2.215593921e-06f, -2.222458396e-06f, -2.229318108e-06f, -2.236173046e-06f, -2.243023200e-06f, -2.249868558e-06f, -2.256709109e-06f, -2.263544841e-06f, -2.270375743e-06f, -2.277201805e-06f,
--2.284023015e-06f, -2.290839361e-06f, -2.297650833e-06f, -2.304457420e-06f, -2.311259110e-06f, -2.318055891e-06f, -2.324847754e-06f, -2.331634687e-06f, -2.338416679e-06f, -2.345193718e-06f,
--2.351965794e-06f, -2.358732895e-06f, -2.365495011e-06f, -2.372252131e-06f, -2.379004242e-06f, -2.385751335e-06f, -2.392493398e-06f, -2.399230420e-06f, -2.405962391e-06f, -2.412689299e-06f,
--2.419411133e-06f, -2.426127882e-06f, -2.432839536e-06f, -2.439546083e-06f, -2.446247512e-06f, -2.452943813e-06f, -2.459634974e-06f, -2.466320985e-06f, -2.473001835e-06f, -2.479677512e-06f,
--2.486348007e-06f, -2.493013307e-06f, -2.499673402e-06f, -2.506328282e-06f, -2.512977936e-06f, -2.519622352e-06f, -2.526261519e-06f, -2.532895428e-06f, -2.539524067e-06f, -2.546147426e-06f,
--2.552765493e-06f, -2.559378258e-06f, -2.565985710e-06f, -2.572587838e-06f, -2.579184632e-06f, -2.585776081e-06f, -2.592362174e-06f, -2.598942900e-06f, -2.605518250e-06f, -2.612088211e-06f,
--2.618652774e-06f, -2.625211927e-06f, -2.631765661e-06f, -2.638313964e-06f, -2.644856826e-06f, -2.651394236e-06f, -2.657926184e-06f, -2.664452659e-06f, -2.670973650e-06f, -2.677489147e-06f,
--2.683999139e-06f, -2.690503616e-06f, -2.697002567e-06f, -2.703495981e-06f, -2.709983849e-06f, -2.716466160e-06f, -2.722942902e-06f, -2.729414067e-06f, -2.735879642e-06f, -2.742339618e-06f,
--2.748793984e-06f, -2.755242730e-06f, -2.761685845e-06f, -2.768123320e-06f, -2.774555142e-06f, -2.780981303e-06f, -2.787401792e-06f, -2.793816598e-06f, -2.800225711e-06f, -2.806629120e-06f,
--2.813026816e-06f, -2.819418788e-06f, -2.825805025e-06f, -2.832185518e-06f, -2.838560256e-06f, -2.844929228e-06f, -2.851292425e-06f, -2.857649836e-06f, -2.864001452e-06f, -2.870347260e-06f,
--2.876687253e-06f, -2.883021418e-06f, -2.889349747e-06f, -2.895672228e-06f, -2.901988852e-06f, -2.908299609e-06f, -2.914604488e-06f, -2.920903479e-06f, -2.927196573e-06f, -2.933483758e-06f,
--2.939765025e-06f, -2.946040363e-06f, -2.952309764e-06f, -2.958573216e-06f, -2.964830709e-06f, -2.971082234e-06f, -2.977327780e-06f, -2.983567337e-06f, -2.989800896e-06f, -2.996028446e-06f,
--3.002249978e-06f, -3.008465480e-06f, -3.014674944e-06f, -3.020878360e-06f, -3.027075717e-06f, -3.033267005e-06f, -3.039452215e-06f, -3.045631337e-06f, -3.051804360e-06f, -3.057971276e-06f,
--3.064132073e-06f, -3.070286743e-06f, -3.076435274e-06f, -3.082577658e-06f, -3.088713885e-06f, -3.094843945e-06f, -3.100967827e-06f, -3.107085523e-06f, -3.113197022e-06f, -3.119302314e-06f,
--3.125401391e-06f, -3.131494241e-06f, -3.137580856e-06f, -3.143661226e-06f, -3.149735341e-06f, -3.155803190e-06f, -3.161864766e-06f, -3.167920057e-06f, -3.173969055e-06f, -3.180011749e-06f,
--3.186048130e-06f, -3.192078188e-06f, -3.198101914e-06f, -3.204119298e-06f, -3.210130331e-06f, -3.216135002e-06f, -3.222133303e-06f, -3.228125224e-06f, -3.234110755e-06f, -3.240089887e-06f,
--3.246062610e-06f, -3.252028915e-06f, -3.257988792e-06f, -3.263942231e-06f, -3.269889225e-06f, -3.275829761e-06f, -3.281763833e-06f, -3.287691429e-06f, -3.293612541e-06f, -3.299527159e-06f,
--3.305435274e-06f, -3.311336876e-06f, -3.317231956e-06f, -3.323120505e-06f, -3.329002514e-06f, -3.334877972e-06f, -3.340746871e-06f, -3.346609201e-06f, -3.352464954e-06f, -3.358314119e-06f,
--3.364156688e-06f, -3.369992651e-06f, -3.375821999e-06f, -3.381644724e-06f, -3.387460814e-06f, -3.393270263e-06f, -3.399073059e-06f, -3.404869195e-06f, -3.410658660e-06f, -3.416441446e-06f,
--3.422217544e-06f, -3.427986944e-06f, -3.433749638e-06f, -3.439505616e-06f, -3.445254869e-06f, -3.450997389e-06f, -3.456733165e-06f, -3.462462190e-06f, -3.468184453e-06f, -3.473899947e-06f,
--3.479608661e-06f, -3.485310587e-06f, -3.491005717e-06f, -3.496694040e-06f, -3.502375549e-06f, -3.508050233e-06f, -3.513718085e-06f, -3.519379095e-06f, -3.525033255e-06f, -3.530680555e-06f,
--3.536320986e-06f, -3.541954540e-06f, -3.547581209e-06f, -3.553200982e-06f, -3.558813851e-06f, -3.564419808e-06f, -3.570018843e-06f, -3.575610949e-06f, -3.581196115e-06f, -3.586774334e-06f,
--3.592345596e-06f, -3.597909893e-06f, -3.603467216e-06f, -3.609017557e-06f, -3.614560906e-06f, -3.620097255e-06f, -3.625626596e-06f, -3.631148919e-06f, -3.636664216e-06f, -3.642172479e-06f,
--3.647673699e-06f, -3.653167867e-06f, -3.658654974e-06f, -3.664135013e-06f, -3.669607974e-06f, -3.675073849e-06f, -3.680532629e-06f, -3.685984306e-06f, -3.691428872e-06f, -3.696866318e-06f,
--3.702296635e-06f, -3.707719815e-06f, -3.713135849e-06f, -3.718544730e-06f, -3.723946448e-06f, -3.729340996e-06f, -3.734728364e-06f, -3.740108545e-06f, -3.745481530e-06f, -3.750847310e-06f,
--3.756205878e-06f, -3.761557225e-06f, -3.766901343e-06f, -3.772238223e-06f, -3.777567858e-06f, -3.782890238e-06f, -3.788205356e-06f, -3.793513203e-06f, -3.798813771e-06f, -3.804107053e-06f,
--3.809393038e-06f, -3.814671721e-06f, -3.819943092e-06f, -3.825207143e-06f, -3.830463866e-06f, -3.835713252e-06f, -3.840955295e-06f, -3.846189985e-06f, -3.851417315e-06f, -3.856637276e-06f,
--3.861849861e-06f, -3.867055061e-06f, -3.872252868e-06f, -3.877443275e-06f, -3.882626273e-06f, -3.887801854e-06f, -3.892970010e-06f, -3.898130734e-06f, -3.903284017e-06f, -3.908429851e-06f,
--3.913568229e-06f, -3.918699143e-06f, -3.923822584e-06f, -3.928938545e-06f, -3.934047018e-06f, -3.939147994e-06f, -3.944241467e-06f, -3.949327429e-06f, -3.954405871e-06f, -3.959476785e-06f,
--3.964540165e-06f, -3.969596002e-06f, -3.974644288e-06f, -3.979685016e-06f, -3.984718178e-06f, -3.989743766e-06f, -3.994761773e-06f, -3.999772190e-06f, -4.004775011e-06f, -4.009770227e-06f,
--4.014757831e-06f, -4.019737815e-06f, -4.024710172e-06f, -4.029674893e-06f, -4.034631973e-06f, -4.039581401e-06f, -4.044523173e-06f, -4.049457279e-06f, -4.054383712e-06f, -4.059302465e-06f,
--4.064213530e-06f, -4.069116899e-06f, -4.074012566e-06f, -4.078900522e-06f, -4.083780761e-06f, -4.088653275e-06f, -4.093518056e-06f, -4.098375097e-06f, -4.103224391e-06f, -4.108065930e-06f,
--4.112899707e-06f, -4.117725715e-06f, -4.122543945e-06f, -4.127354392e-06f, -4.132157047e-06f, -4.136951904e-06f, -4.141738955e-06f, -4.146518192e-06f, -4.151289609e-06f, -4.156053198e-06f,
--4.160808953e-06f, -4.165556865e-06f, -4.170296928e-06f, -4.175029134e-06f, -4.179753477e-06f, -4.184469949e-06f, -4.189178544e-06f, -4.193879253e-06f, -4.198572070e-06f, -4.203256988e-06f,
--4.207934000e-06f, -4.212603098e-06f, -4.217264276e-06f, -4.221917527e-06f, -4.226562843e-06f, -4.231200218e-06f, -4.235829644e-06f, -4.240451116e-06f, -4.245064625e-06f, -4.249670164e-06f,
--4.254267728e-06f, -4.258857308e-06f, -4.263438899e-06f, -4.268012493e-06f, -4.272578083e-06f, -4.277135662e-06f, -4.281685224e-06f, -4.286226762e-06f, -4.290760269e-06f, -4.295285738e-06f,
--4.299803163e-06f, -4.304312536e-06f, -4.308813852e-06f, -4.313307102e-06f, -4.317792281e-06f, -4.322269382e-06f, -4.326738398e-06f, -4.331199322e-06f, -4.335652148e-06f, -4.340096869e-06f,
--4.344533479e-06f, -4.348961971e-06f, -4.353382338e-06f, -4.357794573e-06f, -4.362198671e-06f, -4.366594625e-06f, -4.370982427e-06f, -4.375362072e-06f, -4.379733554e-06f, -4.384096864e-06f,
--4.388451998e-06f, -4.392798949e-06f, -4.397137709e-06f, -4.401468274e-06f, -4.405790636e-06f, -4.410104788e-06f, -4.414410725e-06f, -4.418708441e-06f, -4.422997928e-06f, -4.427279181e-06f,
--4.431552193e-06f, -4.435816957e-06f, -4.440073469e-06f, -4.444321720e-06f, -4.448561706e-06f, -4.452793419e-06f, -4.457016854e-06f, -4.461232005e-06f, -4.465438864e-06f, -4.469637426e-06f,
--4.473827685e-06f, -4.478009635e-06f, -4.482183269e-06f, -4.486348581e-06f, -4.490505566e-06f, -4.494654217e-06f, -4.498794527e-06f, -4.502926492e-06f, -4.507050105e-06f, -4.511165359e-06f,
--4.515272250e-06f, -4.519370770e-06f, -4.523460914e-06f, -4.527542676e-06f, -4.531616050e-06f, -4.535681030e-06f, -4.539737610e-06f, -4.543785784e-06f, -4.547825547e-06f, -4.551856891e-06f,
--4.555879813e-06f, -4.559894305e-06f, -4.563900362e-06f, -4.567897977e-06f, -4.571887146e-06f, -4.575867863e-06f, -4.579840121e-06f, -4.583803915e-06f, -4.587759239e-06f, -4.591706087e-06f,
--4.595644454e-06f, -4.599574334e-06f, -4.603495722e-06f, -4.607408611e-06f, -4.611312996e-06f, -4.615208871e-06f, -4.619096231e-06f, -4.622975071e-06f, -4.626845383e-06f, -4.630707164e-06f,
--4.634560408e-06f, -4.638405108e-06f, -4.642241259e-06f, -4.646068856e-06f, -4.649887894e-06f, -4.653698367e-06f, -4.657500269e-06f, -4.661293594e-06f, -4.665078339e-06f, -4.668854496e-06f,
--4.672622062e-06f, -4.676381029e-06f, -4.680131394e-06f, -4.683873150e-06f, -4.687606292e-06f, -4.691330815e-06f, -4.695046714e-06f, -4.698753983e-06f, -4.702452618e-06f, -4.706142612e-06f,
--4.709823960e-06f, -4.713496658e-06f, -4.717160700e-06f, -4.720816081e-06f, -4.724462796e-06f, -4.728100839e-06f, -4.731730206e-06f, -4.735350891e-06f, -4.738962889e-06f, -4.742566195e-06f,
--4.746160805e-06f, -4.749746712e-06f, -4.753323912e-06f, -4.756892399e-06f, -4.760452170e-06f, -4.764003218e-06f, -4.767545539e-06f, -4.771079128e-06f, -4.774603980e-06f, -4.778120089e-06f,
--4.781627452e-06f, -4.785126062e-06f, -4.788615916e-06f, -4.792097008e-06f, -4.795569334e-06f, -4.799032888e-06f, -4.802487665e-06f, -4.805933662e-06f, -4.809370873e-06f, -4.812799293e-06f,
--4.816218917e-06f, -4.819629741e-06f, -4.823031761e-06f, -4.826424971e-06f, -4.829809366e-06f, -4.833184942e-06f, -4.836551695e-06f, -4.839909619e-06f, -4.843258710e-06f, -4.846598963e-06f,
--4.849930374e-06f, -4.853252939e-06f, -4.856566651e-06f, -4.859871508e-06f, -4.863167504e-06f, -4.866454635e-06f, -4.869732897e-06f, -4.873002284e-06f, -4.876262793e-06f, -4.879514418e-06f,
--4.882757156e-06f, -4.885991003e-06f, -4.889215952e-06f, -4.892432001e-06f, -4.895639145e-06f, -4.898837379e-06f, -4.902026700e-06f, -4.905207102e-06f, -4.908378581e-06f, -4.911541134e-06f,
--4.914694755e-06f, -4.917839442e-06f, -4.920975188e-06f, -4.924101990e-06f, -4.927219845e-06f, -4.930328746e-06f, -4.933428692e-06f, -4.936519676e-06f, -4.939601696e-06f, -4.942674747e-06f,
--4.945738824e-06f, -4.948793924e-06f, -4.951840043e-06f, -4.954877176e-06f, -4.957905320e-06f, -4.960924470e-06f, -4.963934622e-06f, -4.966935773e-06f, -4.969927918e-06f, -4.972911053e-06f,
--4.975885175e-06f, -4.978850280e-06f, -4.981806362e-06f, -4.984753420e-06f, -4.987691448e-06f, -4.990620443e-06f, -4.993540401e-06f, -4.996451317e-06f, -4.999353189e-06f, -5.002246013e-06f,
--5.005129784e-06f, -5.008004499e-06f, -5.010870154e-06f, -5.013726745e-06f, -5.016574269e-06f, -5.019412721e-06f, -5.022242099e-06f, -5.025062398e-06f, -5.027873614e-06f, -5.030675745e-06f,
--5.033468786e-06f, -5.036252734e-06f, -5.039027585e-06f, -5.041793336e-06f, -5.044549982e-06f, -5.047297522e-06f, -5.050035950e-06f, -5.052765263e-06f, -5.055485458e-06f, -5.058196532e-06f,
--5.060898480e-06f, -5.063591300e-06f, -5.066274988e-06f, -5.068949540e-06f, -5.071614953e-06f, -5.074271224e-06f, -5.076918350e-06f, -5.079556326e-06f, -5.082185150e-06f, -5.084804818e-06f,
--5.087415327e-06f, -5.090016674e-06f, -5.092608855e-06f, -5.095191867e-06f, -5.097765707e-06f, -5.100330371e-06f, -5.102885857e-06f, -5.105432161e-06f, -5.107969280e-06f, -5.110497211e-06f,
--5.113015951e-06f, -5.115525496e-06f, -5.118025843e-06f, -5.120516990e-06f, -5.122998932e-06f, -5.125471668e-06f, -5.127935194e-06f, -5.130389507e-06f, -5.132834604e-06f, -5.135270482e-06f,
--5.137697138e-06f, -5.140114569e-06f, -5.142522773e-06f, -5.144921745e-06f, -5.147311483e-06f, -5.149691985e-06f, -5.152063247e-06f, -5.154425266e-06f, -5.156778041e-06f, -5.159121567e-06f,
--5.161455842e-06f, -5.163780863e-06f, -5.166096627e-06f, -5.168403132e-06f, -5.170700375e-06f, -5.172988353e-06f, -5.175267064e-06f, -5.177536504e-06f, -5.179796671e-06f, -5.182047562e-06f,
--5.184289175e-06f, -5.186521507e-06f, -5.188744555e-06f, -5.190958317e-06f, -5.193162790e-06f, -5.195357972e-06f, -5.197543859e-06f, -5.199720450e-06f, -5.201887742e-06f, -5.204045732e-06f,
--5.206194418e-06f, -5.208333798e-06f, -5.210463868e-06f, -5.212584627e-06f, -5.214696072e-06f, -5.216798201e-06f, -5.218891011e-06f, -5.220974499e-06f, -5.223048665e-06f, -5.225113504e-06f,
--5.227169015e-06f, -5.229215196e-06f, -5.231252044e-06f, -5.233279556e-06f, -5.235297732e-06f, -5.237306567e-06f, -5.239306061e-06f, -5.241296211e-06f, -5.243277015e-06f, -5.245248470e-06f,
--5.247210574e-06f, -5.249163326e-06f, -5.251106723e-06f, -5.253040763e-06f, -5.254965443e-06f, -5.256880763e-06f, -5.258786719e-06f, -5.260683309e-06f, -5.262570533e-06f, -5.264448387e-06f,
--5.266316870e-06f, -5.268175979e-06f, -5.270025713e-06f, -5.271866069e-06f, -5.273697046e-06f, -5.275518643e-06f, -5.277330856e-06f, -5.279133684e-06f, -5.280927125e-06f, -5.282711178e-06f,
--5.284485840e-06f, -5.286251109e-06f, -5.288006985e-06f, -5.289753465e-06f, -5.291490546e-06f, -5.293218229e-06f, -5.294936510e-06f, -5.296645388e-06f, -5.298344862e-06f, -5.300034929e-06f,
--5.301715589e-06f, -5.303386838e-06f, -5.305048677e-06f, -5.306701102e-06f, -5.308344113e-06f, -5.309977708e-06f, -5.311601885e-06f, -5.313216643e-06f, -5.314821980e-06f, -5.316417895e-06f,
--5.318004386e-06f, -5.319581452e-06f, -5.321149091e-06f, -5.322707302e-06f, -5.324256083e-06f, -5.325795433e-06f, -5.327325350e-06f, -5.328845834e-06f, -5.330356882e-06f, -5.331858494e-06f,
--5.333350667e-06f, -5.334833402e-06f, -5.336306695e-06f, -5.337770547e-06f, -5.339224956e-06f, -5.340669920e-06f, -5.342105439e-06f, -5.343531510e-06f, -5.344948134e-06f, -5.346355308e-06f,
--5.347753032e-06f, -5.349141304e-06f, -5.350520124e-06f, -5.351889489e-06f, -5.353249399e-06f, -5.354599854e-06f, -5.355940851e-06f, -5.357272390e-06f, -5.358594469e-06f, -5.359907089e-06f,
--5.361210247e-06f, -5.362503942e-06f, -5.363788175e-06f, -5.365062943e-06f, -5.366328246e-06f, -5.367584082e-06f, -5.368830452e-06f, -5.370067354e-06f, -5.371294787e-06f, -5.372512750e-06f,
--5.373721243e-06f, -5.374920264e-06f, -5.376109813e-06f, -5.377289890e-06f, -5.378460492e-06f, -5.379621620e-06f, -5.380773273e-06f, -5.381915450e-06f, -5.383048150e-06f, -5.384171373e-06f,
--5.385285117e-06f, -5.386389383e-06f, -5.387484170e-06f, -5.388569476e-06f, -5.389645302e-06f, -5.390711647e-06f, -5.391768510e-06f, -5.392815890e-06f, -5.393853788e-06f, -5.394882202e-06f,
--5.395901133e-06f, -5.396910578e-06f, -5.397910539e-06f, -5.398901015e-06f, -5.399882004e-06f, -5.400853508e-06f, -5.401815524e-06f, -5.402768054e-06f, -5.403711096e-06f, -5.404644650e-06f,
--5.405568717e-06f, -5.406483294e-06f, -5.407388383e-06f, -5.408283982e-06f, -5.409170093e-06f, -5.410046713e-06f, -5.410913844e-06f, -5.411771484e-06f, -5.412619634e-06f, -5.413458294e-06f,
--5.414287462e-06f, -5.415107140e-06f, -5.415917327e-06f, -5.416718022e-06f, -5.417509226e-06f, -5.418290939e-06f, -5.419063160e-06f, -5.419825889e-06f, -5.420579127e-06f, -5.421322873e-06f,
--5.422057128e-06f, -5.422781890e-06f, -5.423497161e-06f, -5.424202941e-06f, -5.424899229e-06f, -5.425586025e-06f, -5.426263329e-06f, -5.426931143e-06f, -5.427589465e-06f, -5.428238296e-06f,
--5.428877636e-06f, -5.429507485e-06f, -5.430127843e-06f, -5.430738711e-06f, -5.431340089e-06f, -5.431931977e-06f, -5.432514375e-06f, -5.433087283e-06f, -5.433650702e-06f, -5.434204633e-06f,
--5.434749074e-06f, -5.435284027e-06f, -5.435809493e-06f, -5.436325470e-06f, -5.436831961e-06f, -5.437328965e-06f, -5.437816482e-06f, -5.438294513e-06f, -5.438763059e-06f, -5.439222119e-06f,
--5.439671695e-06f, -5.440111787e-06f, -5.440542395e-06f, -5.440963520e-06f, -5.441375162e-06f, -5.441777323e-06f, -5.442170001e-06f, -5.442553199e-06f, -5.442926917e-06f, -5.443291155e-06f,
--5.443645915e-06f, -5.443991195e-06f, -5.444326998e-06f, -5.444653325e-06f, -5.444970174e-06f, -5.445277549e-06f, -5.445575448e-06f, -5.445863874e-06f, -5.446142826e-06f, -5.446412305e-06f,
--5.446672313e-06f, -5.446922850e-06f, -5.447163917e-06f, -5.447395514e-06f, -5.447617644e-06f, -5.447830305e-06f, -5.448033500e-06f, -5.448227230e-06f, -5.448411495e-06f, -5.448586296e-06f,
--5.448751634e-06f, -5.448907510e-06f, -5.449053926e-06f, -5.449190881e-06f, -5.449318378e-06f, -5.449436417e-06f, -5.449545000e-06f, -5.449644127e-06f, -5.449733799e-06f, -5.449814018e-06f,
--5.449884784e-06f, -5.449946100e-06f, -5.449997965e-06f, -5.450040382e-06f, -5.450073351e-06f, -5.450096874e-06f, -5.450110951e-06f, -5.450115585e-06f, -5.450110776e-06f, -5.450096525e-06f,
--5.450072834e-06f, -5.450039705e-06f, -5.449997138e-06f, -5.449945135e-06f, -5.449883697e-06f, -5.449812825e-06f, -5.449732522e-06f, -5.449642788e-06f, -5.449543624e-06f, -5.449435033e-06f,
--5.449317016e-06f, -5.449189573e-06f, -5.449052708e-06f, -5.448906420e-06f, -5.448750712e-06f, -5.448585585e-06f, -5.448411041e-06f, -5.448227081e-06f, -5.448033707e-06f, -5.447830920e-06f,
--5.447618723e-06f, -5.447397116e-06f, -5.447166101e-06f, -5.446925681e-06f, -5.446675856e-06f, -5.446416629e-06f, -5.446148000e-06f, -5.445869972e-06f, -5.445582547e-06f, -5.445285726e-06f,
--5.444979512e-06f, -5.444663905e-06f, -5.444338907e-06f, -5.444004522e-06f, -5.443660749e-06f, -5.443307592e-06f, -5.442945052e-06f, -5.442573130e-06f, -5.442191830e-06f, -5.441801152e-06f,
--5.441401099e-06f, -5.440991673e-06f, -5.440572875e-06f, -5.440144707e-06f, -5.439707173e-06f, -5.439260273e-06f, -5.438804009e-06f, -5.438338384e-06f, -5.437863400e-06f, -5.437379059e-06f,
--5.436885362e-06f, -5.436382313e-06f, -5.435869913e-06f, -5.435348164e-06f, -5.434817068e-06f, -5.434276628e-06f, -5.433726846e-06f, -5.433167723e-06f, -5.432599263e-06f, -5.432021468e-06f,
--5.431434339e-06f, -5.430837879e-06f, -5.430232090e-06f, -5.429616975e-06f, -5.428992536e-06f, -5.428358775e-06f, -5.427715695e-06f, -5.427063297e-06f, -5.426401585e-06f, -5.425730560e-06f,
--5.425050226e-06f, -5.424360584e-06f, -5.423661637e-06f, -5.422953388e-06f, -5.422235838e-06f, -5.421508991e-06f, -5.420772849e-06f, -5.420027414e-06f, -5.419272689e-06f, -5.418508676e-06f,
--5.417735379e-06f, -5.416952799e-06f, -5.416160940e-06f, -5.415359804e-06f, -5.414549393e-06f, -5.413729710e-06f, -5.412900758e-06f, -5.412062539e-06f, -5.411215057e-06f, -5.410358314e-06f,
--5.409492312e-06f, -5.408617055e-06f, -5.407732545e-06f, -5.406838784e-06f, -5.405935777e-06f, -5.405023525e-06f, -5.404102031e-06f, -5.403171299e-06f, -5.402231330e-06f, -5.401282129e-06f,
--5.400323697e-06f, -5.399356038e-06f, -5.398379154e-06f, -5.397393049e-06f, -5.396397725e-06f, -5.395393186e-06f, -5.394379434e-06f, -5.393356473e-06f, -5.392324305e-06f, -5.391282933e-06f,
--5.390232361e-06f, -5.389172592e-06f, -5.388103628e-06f, -5.387025473e-06f, -5.385938129e-06f, -5.384841600e-06f, -5.383735890e-06f, -5.382621000e-06f, -5.381496935e-06f, -5.380363698e-06f,
--5.379221291e-06f, -5.378069718e-06f, -5.376908982e-06f, -5.375739087e-06f, -5.374560035e-06f, -5.373371830e-06f, -5.372174475e-06f, -5.370967974e-06f, -5.369752330e-06f, -5.368527546e-06f,
--5.367293625e-06f, -5.366050571e-06f, -5.364798388e-06f, -5.363537078e-06f, -5.362266645e-06f, -5.360987093e-06f, -5.359698424e-06f, -5.358400643e-06f, -5.357093753e-06f, -5.355777757e-06f,
--5.354452659e-06f, -5.353118463e-06f, -5.351775171e-06f, -5.350422788e-06f, -5.349061316e-06f, -5.347690761e-06f, -5.346311124e-06f, -5.344922410e-06f, -5.343524623e-06f, -5.342117766e-06f,
--5.340701842e-06f, -5.339276856e-06f, -5.337842811e-06f, -5.336399710e-06f, -5.334947559e-06f, -5.333486359e-06f, -5.332016115e-06f, -5.330536831e-06f, -5.329048511e-06f, -5.327551158e-06f,
--5.326044776e-06f, -5.324529368e-06f, -5.323004940e-06f, -5.321471494e-06f, -5.319929035e-06f, -5.318377566e-06f, -5.316817091e-06f, -5.315247615e-06f, -5.313669141e-06f, -5.312081672e-06f,
--5.310485214e-06f, -5.308879770e-06f, -5.307265343e-06f, -5.305641939e-06f, -5.304009560e-06f, -5.302368212e-06f, -5.300717898e-06f, -5.299058622e-06f, -5.297390388e-06f, -5.295713200e-06f,
--5.294027063e-06f, -5.292331980e-06f, -5.290627956e-06f, -5.288914995e-06f, -5.287193101e-06f, -5.285462278e-06f, -5.283722531e-06f, -5.281973863e-06f, -5.280216279e-06f, -5.278449783e-06f,
--5.276674379e-06f, -5.274890072e-06f, -5.273096866e-06f, -5.271294765e-06f, -5.269483773e-06f, -5.267663896e-06f, -5.265835136e-06f, -5.263997500e-06f, -5.262150990e-06f, -5.260295611e-06f,
--5.258431368e-06f, -5.256558266e-06f, -5.254676307e-06f, -5.252785498e-06f, -5.250885843e-06f, -5.248977345e-06f, -5.247060010e-06f, -5.245133842e-06f, -5.243198846e-06f, -5.241255025e-06f,
--5.239302385e-06f, -5.237340931e-06f, -5.235370666e-06f, -5.233391595e-06f, -5.231403723e-06f, -5.229407056e-06f, -5.227401596e-06f, -5.225387349e-06f, -5.223364320e-06f, -5.221332513e-06f,
--5.219291933e-06f, -5.217242584e-06f, -5.215184472e-06f, -5.213117602e-06f, -5.211041977e-06f, -5.208957602e-06f, -5.206864484e-06f, -5.204762625e-06f, -5.202652032e-06f, -5.200532708e-06f,
--5.198404660e-06f, -5.196267891e-06f, -5.194122406e-06f, -5.191968211e-06f, -5.189805310e-06f, -5.187633709e-06f, -5.185453411e-06f, -5.183264423e-06f, -5.181066748e-06f, -5.178860393e-06f,
--5.176645362e-06f, -5.174421660e-06f, -5.172189291e-06f, -5.169948262e-06f, -5.167698577e-06f, -5.165440241e-06f, -5.163173260e-06f, -5.160897638e-06f, -5.158613380e-06f, -5.156320492e-06f,
--5.154018979e-06f, -5.151708845e-06f, -5.149390097e-06f, -5.147062738e-06f, -5.144726775e-06f, -5.142382213e-06f, -5.140029057e-06f, -5.137667311e-06f, -5.135296982e-06f, -5.132918075e-06f,
--5.130530594e-06f, -5.128134545e-06f, -5.125729934e-06f, -5.123316766e-06f, -5.120895046e-06f, -5.118464779e-06f, -5.116025971e-06f, -5.113578627e-06f, -5.111122753e-06f, -5.108658353e-06f,
--5.106185434e-06f, -5.103704001e-06f, -5.101214059e-06f, -5.098715614e-06f, -5.096208671e-06f, -5.093693236e-06f, -5.091169314e-06f, -5.088636910e-06f, -5.086096031e-06f, -5.083546681e-06f,
--5.080988867e-06f, -5.078422594e-06f, -5.075847867e-06f, -5.073264693e-06f, -5.070673076e-06f, -5.068073022e-06f, -5.065464537e-06f, -5.062847627e-06f, -5.060222297e-06f, -5.057588553e-06f,
--5.054946401e-06f, -5.052295846e-06f, -5.049636895e-06f, -5.046969552e-06f, -5.044293823e-06f, -5.041609716e-06f, -5.038917234e-06f, -5.036216384e-06f, -5.033507172e-06f, -5.030789603e-06f,
--5.028063684e-06f, -5.025329420e-06f, -5.022586817e-06f, -5.019835881e-06f, -5.017076618e-06f, -5.014309034e-06f, -5.011533134e-06f, -5.008748925e-06f, -5.005956412e-06f, -5.003155602e-06f,
--5.000346501e-06f, -4.997529114e-06f, -4.994703447e-06f, -4.991869507e-06f, -4.989027299e-06f, -4.986176830e-06f, -4.983318106e-06f, -4.980451132e-06f, -4.977575915e-06f, -4.974692460e-06f,
--4.971800775e-06f, -4.968900864e-06f, -4.965992735e-06f, -4.963076393e-06f, -4.960151845e-06f, -4.957219096e-06f, -4.954278153e-06f, -4.951329022e-06f, -4.948371710e-06f, -4.945406222e-06f,
--4.942432564e-06f, -4.939450744e-06f, -4.936460767e-06f, -4.933462639e-06f, -4.930456367e-06f, -4.927441957e-06f, -4.924419416e-06f, -4.921388749e-06f, -4.918349964e-06f, -4.915303066e-06f,
--4.912248062e-06f, -4.909184958e-06f, -4.906113761e-06f, -4.903034477e-06f, -4.899947112e-06f, -4.896851673e-06f, -4.893748167e-06f, -4.890636599e-06f, -4.887516977e-06f, -4.884389306e-06f,
--4.881253594e-06f, -4.878109846e-06f, -4.874958070e-06f, -4.871798272e-06f, -4.868630459e-06f, -4.865454636e-06f, -4.862270811e-06f, -4.859078990e-06f, -4.855879180e-06f, -4.852671387e-06f,
--4.849455618e-06f, -4.846231880e-06f, -4.843000180e-06f, -4.839760523e-06f, -4.836512918e-06f, -4.833257369e-06f, -4.829993885e-06f, -4.826722472e-06f, -4.823443136e-06f, -4.820155884e-06f,
--4.816860724e-06f, -4.813557662e-06f, -4.810246704e-06f, -4.806927858e-06f, -4.803601130e-06f, -4.800266527e-06f, -4.796924056e-06f, -4.793573724e-06f, -4.790215537e-06f, -4.786849503e-06f,
--4.783475629e-06f, -4.780093921e-06f, -4.776704386e-06f, -4.773307031e-06f, -4.769901864e-06f, -4.766488890e-06f, -4.763068118e-06f, -4.759639554e-06f, -4.756203205e-06f, -4.752759077e-06f,
--4.749307179e-06f, -4.745847517e-06f, -4.742380098e-06f, -4.738904929e-06f, -4.735422017e-06f, -4.731931370e-06f, -4.728432994e-06f, -4.724926897e-06f, -4.721413085e-06f, -4.717891566e-06f,
--4.714362347e-06f, -4.710825435e-06f, -4.707280837e-06f, -4.703728561e-06f, -4.700168613e-06f, -4.696601001e-06f, -4.693025732e-06f, -4.689442814e-06f, -4.685852252e-06f, -4.682254056e-06f,
--4.678648231e-06f, -4.675034786e-06f, -4.671413727e-06f, -4.667785063e-06f, -4.664148799e-06f, -4.660504944e-06f, -4.656853505e-06f, -4.653194489e-06f, -4.649527903e-06f, -4.645853756e-06f,
--4.642172053e-06f, -4.638482804e-06f, -4.634786014e-06f, -4.631081693e-06f, -4.627369846e-06f, -4.623650481e-06f, -4.619923607e-06f, -4.616189230e-06f, -4.612447357e-06f, -4.608697997e-06f,
--4.604941157e-06f, -4.601176845e-06f, -4.597405067e-06f, -4.593625831e-06f, -4.589839146e-06f, -4.586045018e-06f, -4.582243456e-06f, -4.578434466e-06f, -4.574618056e-06f, -4.570794235e-06f,
--4.566963009e-06f, -4.563124386e-06f, -4.559278374e-06f, -4.555424981e-06f, -4.551564213e-06f, -4.547696080e-06f, -4.543820589e-06f, -4.539937746e-06f, -4.536047561e-06f, -4.532150040e-06f,
--4.528245192e-06f, -4.524333024e-06f, -4.520413545e-06f, -4.516486761e-06f, -4.512552680e-06f, -4.508611311e-06f, -4.504662661e-06f, -4.500706739e-06f, -4.496743551e-06f, -4.492773105e-06f,
--4.488795411e-06f, -4.484810475e-06f, -4.480818305e-06f, -4.476818909e-06f, -4.472812296e-06f, -4.468798472e-06f, -4.464777447e-06f, -4.460749227e-06f, -4.456713822e-06f, -4.452671238e-06f,
--4.448621484e-06f, -4.444564568e-06f, -4.440500497e-06f, -4.436429281e-06f, -4.432350926e-06f, -4.428265441e-06f, -4.424172834e-06f, -4.420073113e-06f, -4.415966286e-06f, -4.411852361e-06f,
--4.407731346e-06f, -4.403603250e-06f, -4.399468080e-06f, -4.395325844e-06f, -4.391176551e-06f, -4.387020209e-06f, -4.382856826e-06f, -4.378686410e-06f, -4.374508969e-06f, -4.370324511e-06f,
--4.366133046e-06f, -4.361934580e-06f, -4.357729122e-06f, -4.353516681e-06f, -4.349297264e-06f, -4.345070880e-06f, -4.340837537e-06f, -4.336597244e-06f, -4.332350008e-06f, -4.328095838e-06f,
--4.323834742e-06f, -4.319566729e-06f, -4.315291807e-06f, -4.311009984e-06f, -4.306721269e-06f, -4.302425670e-06f, -4.298123195e-06f, -4.293813853e-06f, -4.289497652e-06f, -4.285174600e-06f,
--4.280844707e-06f, -4.276507980e-06f, -4.272164427e-06f, -4.267814058e-06f, -4.263456881e-06f, -4.259092904e-06f, -4.254722135e-06f, -4.250344584e-06f, -4.245960258e-06f, -4.241569167e-06f,
--4.237171318e-06f, -4.232766720e-06f, -4.228355383e-06f, -4.223937313e-06f, -4.219512521e-06f, -4.215081014e-06f, -4.210642801e-06f, -4.206197891e-06f, -4.201746292e-06f, -4.197288013e-06f,
--4.192823063e-06f, -4.188351449e-06f, -4.183873182e-06f, -4.179388269e-06f, -4.174896719e-06f, -4.170398541e-06f, -4.165893744e-06f, -4.161382335e-06f, -4.156864325e-06f, -4.152339721e-06f,
--4.147808533e-06f, -4.143270769e-06f, -4.138726438e-06f, -4.134175548e-06f, -4.129618109e-06f, -4.125054129e-06f, -4.120483617e-06f, -4.115906582e-06f, -4.111323032e-06f, -4.106732977e-06f,
--4.102136425e-06f, -4.097533385e-06f, -4.092923867e-06f, -4.088307878e-06f, -4.083685428e-06f, -4.079056525e-06f, -4.074421179e-06f, -4.069779398e-06f, -4.065131192e-06f, -4.060476568e-06f,
--4.055815537e-06f, -4.051148107e-06f, -4.046474288e-06f, -4.041794087e-06f, -4.037107514e-06f, -4.032414578e-06f, -4.027715288e-06f, -4.023009653e-06f, -4.018297683e-06f, -4.013579385e-06f,
--4.008854769e-06f, -4.004123844e-06f, -3.999386620e-06f, -3.994643104e-06f, -3.989893307e-06f, -3.985137238e-06f, -3.980374904e-06f, -3.975606317e-06f, -3.970831484e-06f, -3.966050414e-06f,
--3.961263118e-06f, -3.956469604e-06f, -3.951669881e-06f, -3.946863958e-06f, -3.942051845e-06f, -3.937233550e-06f, -3.932409083e-06f, -3.927578454e-06f, -3.922741671e-06f, -3.917898743e-06f,
--3.913049680e-06f, -3.908194491e-06f, -3.903333185e-06f, -3.898465771e-06f, -3.893592260e-06f, -3.888712659e-06f, -3.883826978e-06f, -3.878935228e-06f, -3.874037416e-06f, -3.869133552e-06f,
--3.864223645e-06f, -3.859307706e-06f, -3.854385742e-06f, -3.849457764e-06f, -3.844523781e-06f, -3.839583802e-06f, -3.834637837e-06f, -3.829685895e-06f, -3.824727985e-06f, -3.819764117e-06f,
--3.814794300e-06f, -3.809818543e-06f, -3.804836857e-06f, -3.799849250e-06f, -3.794855731e-06f, -3.789856312e-06f, -3.784851000e-06f, -3.779839805e-06f, -3.774822737e-06f, -3.769799805e-06f,
--3.764771019e-06f, -3.759736389e-06f, -3.754695923e-06f, -3.749649631e-06f, -3.744597523e-06f, -3.739539609e-06f, -3.734475897e-06f, -3.729406398e-06f, -3.724331122e-06f, -3.719250076e-06f,
--3.714163272e-06f, -3.709070719e-06f, -3.703972426e-06f, -3.698868403e-06f, -3.693758660e-06f, -3.688643206e-06f, -3.683522051e-06f, -3.678395205e-06f, -3.673262677e-06f, -3.668124477e-06f,
--3.662980614e-06f, -3.657831098e-06f, -3.652675940e-06f, -3.647515148e-06f, -3.642348733e-06f, -3.637176703e-06f, -3.631999069e-06f, -3.626815841e-06f, -3.621627028e-06f, -3.616432640e-06f,
--3.611232687e-06f, -3.606027179e-06f, -3.600816124e-06f, -3.595599534e-06f, -3.590377418e-06f, -3.585149785e-06f, -3.579916646e-06f, -3.574678010e-06f, -3.569433887e-06f, -3.564184287e-06f,
--3.558929220e-06f, -3.553668696e-06f, -3.548402724e-06f, -3.543131314e-06f, -3.537854477e-06f, -3.532572222e-06f, -3.527284559e-06f, -3.521991497e-06f, -3.516693048e-06f, -3.511389220e-06f,
--3.506080024e-06f, -3.500765469e-06f, -3.495445566e-06f, -3.490120324e-06f, -3.484789754e-06f, -3.479453865e-06f, -3.474112668e-06f, -3.468766171e-06f, -3.463414387e-06f, -3.458057323e-06f,
--3.452694990e-06f, -3.447327399e-06f, -3.441954559e-06f, -3.436576481e-06f, -3.431193174e-06f, -3.425804648e-06f, -3.420410914e-06f, -3.415011981e-06f, -3.409607860e-06f, -3.404198560e-06f,
--3.398784092e-06f, -3.393364466e-06f, -3.387939692e-06f, -3.382509780e-06f, -3.377074739e-06f, -3.371634581e-06f, -3.366189316e-06f, -3.360738953e-06f, -3.355283502e-06f, -3.349822974e-06f,
--3.344357379e-06f, -3.338886727e-06f, -3.333411028e-06f, -3.327930293e-06f, -3.322444531e-06f, -3.316953753e-06f, -3.311457969e-06f, -3.305957189e-06f, -3.300451424e-06f, -3.294940683e-06f,
--3.289424977e-06f, -3.283904316e-06f, -3.278378710e-06f, -3.272848170e-06f, -3.267312705e-06f, -3.261772327e-06f, -3.256227044e-06f, -3.250676869e-06f, -3.245121810e-06f, -3.239561879e-06f,
--3.233997085e-06f, -3.228427439e-06f, -3.222852950e-06f, -3.217273631e-06f, -3.211689490e-06f, -3.206100538e-06f, -3.200506785e-06f, -3.194908242e-06f, -3.189304919e-06f, -3.183696827e-06f,
--3.178083976e-06f, -3.172466375e-06f, -3.166844037e-06f, -3.161216970e-06f, -3.155585185e-06f, -3.149948694e-06f, -3.144307505e-06f, -3.138661630e-06f, -3.133011079e-06f, -3.127355863e-06f,
--3.121695991e-06f, -3.116031475e-06f, -3.110362324e-06f, -3.104688550e-06f, -3.099010162e-06f, -3.093327172e-06f, -3.087639589e-06f, -3.081947424e-06f, -3.076250687e-06f, -3.070549390e-06f,
--3.064843543e-06f, -3.059133155e-06f, -3.053418238e-06f, -3.047698802e-06f, -3.041974858e-06f, -3.036246416e-06f, -3.030513486e-06f, -3.024776080e-06f, -3.019034208e-06f, -3.013287880e-06f,
--3.007537107e-06f, -3.001781899e-06f, -2.996022268e-06f, -2.990258223e-06f, -2.984489775e-06f, -2.978716935e-06f, -2.972939714e-06f, -2.967158122e-06f, -2.961372169e-06f, -2.955581867e-06f,
--2.949787225e-06f, -2.943988256e-06f, -2.938184968e-06f, -2.932377373e-06f, -2.926565482e-06f, -2.920749304e-06f, -2.914928852e-06f, -2.909104135e-06f, -2.903275164e-06f, -2.897441950e-06f,
--2.891604503e-06f, -2.885762835e-06f, -2.879916956e-06f, -2.874066876e-06f, -2.868212606e-06f, -2.862354158e-06f, -2.856491541e-06f, -2.850624766e-06f, -2.844753845e-06f, -2.838878788e-06f,
--2.832999606e-06f, -2.827116309e-06f, -2.821228908e-06f, -2.815337414e-06f, -2.809441838e-06f, -2.803542190e-06f, -2.797638482e-06f, -2.791730723e-06f, -2.785818926e-06f, -2.779903100e-06f,
--2.773983257e-06f, -2.768059407e-06f, -2.762131561e-06f, -2.756199729e-06f, -2.750263924e-06f, -2.744324155e-06f, -2.738380433e-06f, -2.732432770e-06f, -2.726481176e-06f, -2.720525661e-06f,
--2.714566237e-06f, -2.708602915e-06f, -2.702635706e-06f, -2.696664619e-06f, -2.690689667e-06f, -2.684710860e-06f, -2.678728210e-06f, -2.672741725e-06f, -2.666751419e-06f, -2.660757302e-06f,
--2.654759384e-06f, -2.648757676e-06f, -2.642752190e-06f, -2.636742936e-06f, -2.630729926e-06f, -2.624713170e-06f, -2.618692678e-06f, -2.612668463e-06f, -2.606640535e-06f, -2.600608905e-06f,
--2.594573584e-06f, -2.588534583e-06f, -2.582491913e-06f, -2.576445584e-06f, -2.570395609e-06f, -2.564341997e-06f, -2.558284760e-06f, -2.552223909e-06f, -2.546159454e-06f, -2.540091408e-06f,
--2.534019780e-06f, -2.527944582e-06f, -2.521865824e-06f, -2.515783519e-06f, -2.509697676e-06f, -2.503608307e-06f, -2.497515424e-06f, -2.491419036e-06f, -2.485319155e-06f, -2.479215792e-06f,
--2.473108959e-06f, -2.466998665e-06f, -2.460884923e-06f, -2.454767743e-06f, -2.448647136e-06f, -2.442523114e-06f, -2.436395687e-06f, -2.430264867e-06f, -2.424130665e-06f, -2.417993091e-06f,
--2.411852157e-06f, -2.405707874e-06f, -2.399560254e-06f, -2.393409306e-06f, -2.387255043e-06f, -2.381097475e-06f, -2.374936614e-06f, -2.368772470e-06f, -2.362605055e-06f, -2.356434380e-06f,
--2.350260457e-06f, -2.344083295e-06f, -2.337902907e-06f, -2.331719303e-06f, -2.325532495e-06f, -2.319342494e-06f, -2.313149311e-06f, -2.306952957e-06f, -2.300753443e-06f, -2.294550781e-06f,
--2.288344982e-06f, -2.282136056e-06f, -2.275924015e-06f, -2.269708871e-06f, -2.263490634e-06f, -2.257269316e-06f, -2.251044928e-06f, -2.244817481e-06f, -2.238586986e-06f, -2.232353454e-06f,
--2.226116897e-06f, -2.219877326e-06f, -2.213634753e-06f, -2.207389187e-06f, -2.201140642e-06f, -2.194889127e-06f, -2.188634654e-06f, -2.182377234e-06f, -2.176116880e-06f, -2.169853601e-06f,
--2.163587409e-06f, -2.157318315e-06f, -2.151046331e-06f, -2.144771468e-06f, -2.138493737e-06f, -2.132213149e-06f, -2.125929716e-06f, -2.119643449e-06f, -2.113354360e-06f, -2.107062458e-06f,
--2.100767757e-06f, -2.094470267e-06f, -2.088169999e-06f, -2.081866965e-06f, -2.075561176e-06f, -2.069252643e-06f, -2.062941378e-06f, -2.056627392e-06f, -2.050310696e-06f, -2.043991302e-06f,
--2.037669220e-06f, -2.031344463e-06f, -2.025017041e-06f, -2.018686966e-06f, -2.012354250e-06f, -2.006018903e-06f, -1.999680936e-06f, -1.993340362e-06f, -1.986997192e-06f, -1.980651437e-06f,
--1.974303107e-06f, -1.967952216e-06f, -1.961598773e-06f, -1.955242791e-06f, -1.948884281e-06f, -1.942523253e-06f, -1.936159720e-06f, -1.929793693e-06f, -1.923425183e-06f, -1.917054202e-06f,
--1.910680760e-06f, -1.904304870e-06f, -1.897926543e-06f, -1.891545790e-06f, -1.885162622e-06f, -1.878777051e-06f, -1.872389088e-06f, -1.865998746e-06f, -1.859606034e-06f, -1.853210965e-06f,
--1.846813549e-06f, -1.840413799e-06f, -1.834011726e-06f, -1.827607341e-06f, -1.821200655e-06f, -1.814791680e-06f, -1.808380428e-06f, -1.801966910e-06f, -1.795551137e-06f, -1.789133120e-06f,
--1.782712872e-06f, -1.776290403e-06f, -1.769865725e-06f, -1.763438849e-06f, -1.757009788e-06f, -1.750578552e-06f, -1.744145152e-06f, -1.737709601e-06f, -1.731271909e-06f, -1.724832088e-06f,
--1.718390150e-06f, -1.711946106e-06f, -1.705499967e-06f, -1.699051746e-06f, -1.692601452e-06f, -1.686149099e-06f, -1.679694697e-06f, -1.673238257e-06f, -1.666779792e-06f, -1.660319313e-06f,
--1.653856830e-06f, -1.647392357e-06f, -1.640925903e-06f, -1.634457481e-06f, -1.627987103e-06f, -1.621514779e-06f, -1.615040521e-06f, -1.608564340e-06f, -1.602086249e-06f, -1.595606258e-06f,
--1.589124379e-06f, -1.582640624e-06f, -1.576155003e-06f, -1.569667530e-06f, -1.563178214e-06f, -1.556687068e-06f, -1.550194102e-06f, -1.543699330e-06f, -1.537202761e-06f, -1.530704408e-06f,
--1.524204282e-06f, -1.517702394e-06f, -1.511198757e-06f, -1.504693381e-06f, -1.498186278e-06f, -1.491677460e-06f, -1.485166938e-06f, -1.478654724e-06f, -1.472140828e-06f, -1.465625264e-06f,
--1.459108042e-06f, -1.452589173e-06f, -1.446068670e-06f, -1.439546543e-06f, -1.433022805e-06f, -1.426497467e-06f, -1.419970540e-06f, -1.413442036e-06f, -1.406911966e-06f, -1.400380342e-06f,
--1.393847176e-06f, -1.387312479e-06f, -1.380776263e-06f, -1.374238538e-06f, -1.367699318e-06f, -1.361158612e-06f, -1.354616433e-06f, -1.348072793e-06f, -1.341527702e-06f, -1.334981173e-06f,
--1.328433217e-06f, -1.321883845e-06f, -1.315333069e-06f, -1.308780901e-06f, -1.302227351e-06f, -1.295672433e-06f, -1.289116156e-06f, -1.282558534e-06f, -1.275999577e-06f, -1.269439296e-06f,
--1.262877704e-06f, -1.256314812e-06f, -1.249750632e-06f, -1.243185174e-06f, -1.236618452e-06f, -1.230050475e-06f, -1.223481256e-06f, -1.216910807e-06f, -1.210339138e-06f, -1.203766262e-06f,
--1.197192190e-06f, -1.190616933e-06f, -1.184040504e-06f, -1.177462913e-06f, -1.170884173e-06f, -1.164304294e-06f, -1.157723288e-06f, -1.151141168e-06f, -1.144557944e-06f, -1.137973628e-06f,
--1.131388232e-06f, -1.124801767e-06f, -1.118214244e-06f, -1.111625676e-06f, -1.105036074e-06f, -1.098445449e-06f, -1.091853813e-06f, -1.085261178e-06f, -1.078667555e-06f, -1.072072956e-06f,
--1.065477392e-06f, -1.058880874e-06f, -1.052283416e-06f, -1.045685027e-06f, -1.039085719e-06f, -1.032485505e-06f, -1.025884396e-06f, -1.019282402e-06f, -1.012679537e-06f, -1.006075811e-06f,
--9.994712354e-07f, -9.928658227e-07f, -9.862595841e-07f, -9.796525311e-07f, -9.730446753e-07f, -9.664360283e-07f, -9.598266016e-07f, -9.532164068e-07f, -9.466054554e-07f, -9.399937591e-07f,
--9.333813294e-07f, -9.267681779e-07f, -9.201543161e-07f, -9.135397555e-07f, -9.069245078e-07f, -9.003085845e-07f, -8.936919972e-07f, -8.870747575e-07f, -8.804568768e-07f, -8.738383668e-07f,
--8.672192390e-07f, -8.605995050e-07f, -8.539791763e-07f, -8.473582645e-07f, -8.407367812e-07f, -8.341147379e-07f, -8.274921462e-07f, -8.208690176e-07f, -8.142453637e-07f, -8.076211961e-07f,
--8.009965262e-07f, -7.943713657e-07f, -7.877457261e-07f, -7.811196190e-07f, -7.744930559e-07f, -7.678660483e-07f, -7.612386078e-07f, -7.546107461e-07f, -7.479824745e-07f, -7.413538047e-07f,
--7.347247482e-07f, -7.280953165e-07f, -7.214655213e-07f, -7.148353740e-07f, -7.082048861e-07f, -7.015740694e-07f, -6.949429351e-07f, -6.883114950e-07f, -6.816797606e-07f, -6.750477433e-07f,
--6.684154548e-07f, -6.617829065e-07f, -6.551501100e-07f, -6.485170769e-07f, -6.418838186e-07f, -6.352503467e-07f, -6.286166728e-07f, -6.219828083e-07f, -6.153487648e-07f, -6.087145538e-07f,
--6.020801868e-07f, -5.954456755e-07f, -5.888110311e-07f, -5.821762654e-07f, -5.755413899e-07f, -5.689064160e-07f, -5.622713552e-07f, -5.556362191e-07f, -5.490010192e-07f, -5.423657670e-07f,
--5.357304741e-07f, -5.290951519e-07f, -5.224598119e-07f, -5.158244656e-07f, -5.091891246e-07f, -5.025538004e-07f, -4.959185044e-07f, -4.892832482e-07f, -4.826480433e-07f, -4.760129011e-07f,
--4.693778331e-07f, -4.627428509e-07f, -4.561079660e-07f, -4.494731898e-07f, -4.428385337e-07f, -4.362040095e-07f, -4.295696283e-07f, -4.229354019e-07f, -4.163013417e-07f, -4.096674590e-07f,
--4.030337655e-07f, -3.964002726e-07f, -3.897669918e-07f, -3.831339345e-07f, -3.765011122e-07f, -3.698685364e-07f, -3.632362185e-07f, -3.566041700e-07f, -3.499724025e-07f, -3.433409272e-07f,
--3.367097558e-07f, -3.300788996e-07f, -3.234483701e-07f, -3.168181788e-07f, -3.101883370e-07f, -3.035588564e-07f, -2.969297482e-07f, -2.903010240e-07f, -2.836726951e-07f, -2.770447731e-07f,
--2.704172694e-07f, -2.637901953e-07f, -2.571635624e-07f, -2.505373821e-07f, -2.439116657e-07f, -2.372864247e-07f, -2.306616706e-07f, -2.240374147e-07f, -2.174136685e-07f, -2.107904434e-07f,
--2.041677509e-07f, -1.975456022e-07f, -1.909240088e-07f, -1.843029822e-07f, -1.776825337e-07f, -1.710626747e-07f, -1.644434167e-07f, -1.578247710e-07f, -1.512067490e-07f, -1.445893621e-07f,
--1.379726218e-07f, -1.313565393e-07f, -1.247411261e-07f, -1.181263935e-07f, -1.115123529e-07f, -1.048990158e-07f, -9.828639337e-08f, -9.167449712e-08f, -8.506333837e-08f, -7.845292849e-08f,
--7.184327883e-08f, -6.523440075e-08f, -5.862630562e-08f, -5.201900477e-08f, -4.541250956e-08f, -3.880683134e-08f, -3.220198144e-08f, -2.559797121e-08f, -1.899481199e-08f, -1.239251510e-08f,
--5.791091877e-09f, 8.094463469e-10f, 7.409088250e-09f, 1.400782251e-08f, 2.060563781e-08f, 2.720252283e-08f, 3.379846627e-08f, 4.039345681e-08f, 4.698748314e-08f, 5.358053397e-08f,
-6.017259799e-08f, 6.676366391e-08f, 7.335372044e-08f, 7.994275628e-08f, 8.653076015e-08f, 9.311772077e-08f, 9.970362685e-08f, 1.062884671e-07f, 1.128722303e-07f, 1.194549052e-07f,
-1.260364804e-07f, 1.326169447e-07f, 1.391962869e-07f, 1.457744957e-07f, 1.523515599e-07f, 1.589274681e-07f, 1.655022093e-07f, 1.720757720e-07f, 1.786481451e-07f, 1.852193174e-07f,
-1.917892775e-07f, 1.983580144e-07f, 2.049255167e-07f, 2.114917733e-07f, 2.180567728e-07f, 2.246205042e-07f, 2.311829562e-07f, 2.377441176e-07f, 2.443039772e-07f, 2.508625238e-07f,
-2.574197462e-07f, 2.639756332e-07f, 2.705301736e-07f, 2.770833563e-07f, 2.836351701e-07f, 2.901856037e-07f, 2.967346461e-07f, 3.032822860e-07f, 3.098285124e-07f, 3.163733139e-07f,
-3.229166796e-07f, 3.294585981e-07f, 3.359990585e-07f, 3.425380495e-07f, 3.490755600e-07f, 3.556115788e-07f, 3.621460949e-07f, 3.686790971e-07f, 3.752105743e-07f, 3.817405154e-07f,
-3.882689092e-07f, 3.947957447e-07f, 4.013210107e-07f, 4.078446961e-07f, 4.143667899e-07f, 4.208872809e-07f, 4.274061581e-07f, 4.339234103e-07f, 4.404390266e-07f, 4.469529958e-07f,
-4.534653068e-07f, 4.599759486e-07f, 4.664849101e-07f, 4.729921803e-07f, 4.794977481e-07f, 4.860016025e-07f, 4.925037324e-07f, 4.990041267e-07f, 5.055027745e-07f, 5.119996647e-07f,
-5.184947863e-07f, 5.249881282e-07f, 5.314796795e-07f, 5.379694291e-07f, 5.444573660e-07f, 5.509434792e-07f, 5.574277578e-07f, 5.639101907e-07f, 5.703907669e-07f, 5.768694754e-07f,
-5.833463054e-07f, 5.898212457e-07f, 5.962942854e-07f, 6.027654136e-07f, 6.092346193e-07f, 6.157018916e-07f, 6.221672194e-07f, 6.286305919e-07f, 6.350919980e-07f, 6.415514270e-07f,
-6.480088677e-07f, 6.544643094e-07f, 6.609177410e-07f, 6.673691518e-07f, 6.738185306e-07f, 6.802658668e-07f, 6.867111492e-07f, 6.931543671e-07f, 6.995955096e-07f, 7.060345657e-07f,
-7.124715247e-07f, 7.189063755e-07f, 7.253391074e-07f, 7.317697094e-07f, 7.381981708e-07f, 7.446244806e-07f, 7.510486280e-07f, 7.574706022e-07f, 7.638903923e-07f, 7.703079875e-07f,
-7.767233770e-07f, 7.831365498e-07f, 7.895474953e-07f, 7.959562026e-07f, 8.023626609e-07f, 8.087668593e-07f, 8.151687872e-07f, 8.215684336e-07f, 8.279657879e-07f, 8.343608392e-07f,
-8.407535767e-07f, 8.471439897e-07f, 8.535320675e-07f, 8.599177992e-07f, 8.663011741e-07f, 8.726821814e-07f, 8.790608105e-07f, 8.854370505e-07f, 8.918108908e-07f, 8.981823206e-07f,
-9.045513292e-07f, 9.109179059e-07f, 9.172820400e-07f, 9.236437207e-07f, 9.300029374e-07f, 9.363596794e-07f, 9.427139360e-07f, 9.490656964e-07f, 9.554149502e-07f, 9.617616865e-07f,
-9.681058947e-07f, 9.744475641e-07f, 9.807866842e-07f, 9.871232442e-07f, 9.934572335e-07f, 9.997886415e-07f, 1.006117458e-06f, 1.012443671e-06f, 1.018767271e-06f, 1.025088248e-06f,
-1.031406590e-06f, 1.037722287e-06f, 1.044035329e-06f, 1.050345704e-06f, 1.056653403e-06f, 1.062958414e-06f, 1.069260727e-06f, 1.075560332e-06f, 1.081857218e-06f, 1.088151374e-06f,
-1.094442791e-06f, 1.100731456e-06f, 1.107017361e-06f, 1.113300493e-06f, 1.119580844e-06f, 1.125858402e-06f, 1.132133156e-06f, 1.138405097e-06f, 1.144674214e-06f, 1.150940496e-06f,
-1.157203932e-06f, 1.163464513e-06f, 1.169722228e-06f, 1.175977066e-06f, 1.182229018e-06f, 1.188478071e-06f, 1.194724217e-06f, 1.200967445e-06f, 1.207207743e-06f, 1.213445103e-06f,
-1.219679513e-06f, 1.225910962e-06f, 1.232139442e-06f, 1.238364940e-06f, 1.244587447e-06f, 1.250806953e-06f, 1.257023446e-06f, 1.263236917e-06f, 1.269447356e-06f, 1.275654751e-06f,
-1.281859093e-06f, 1.288060371e-06f, 1.294258575e-06f, 1.300453695e-06f, 1.306645720e-06f, 1.312834639e-06f, 1.319020444e-06f, 1.325203122e-06f, 1.331382665e-06f, 1.337559061e-06f,
-1.343732301e-06f, 1.349902374e-06f, 1.356069270e-06f, 1.362232978e-06f, 1.368393489e-06f, 1.374550792e-06f, 1.380704877e-06f, 1.386855733e-06f, 1.393003351e-06f, 1.399147720e-06f,
-1.405288830e-06f, 1.411426671e-06f, 1.417561232e-06f, 1.423692504e-06f, 1.429820476e-06f, 1.435945138e-06f, 1.442066480e-06f, 1.448184492e-06f, 1.454299163e-06f, 1.460410484e-06f,
-1.466518444e-06f, 1.472623033e-06f, 1.478724241e-06f, 1.484822058e-06f, 1.490916473e-06f, 1.497007477e-06f, 1.503095060e-06f, 1.509179212e-06f, 1.515259921e-06f, 1.521337179e-06f,
-1.527410975e-06f, 1.533481300e-06f, 1.539548142e-06f, 1.545611493e-06f, 1.551671342e-06f, 1.557727678e-06f, 1.563780493e-06f, 1.569829776e-06f, 1.575875516e-06f, 1.581917705e-06f,
-1.587956331e-06f, 1.593991386e-06f, 1.600022858e-06f, 1.606050739e-06f, 1.612075017e-06f, 1.618095684e-06f, 1.624112729e-06f, 1.630126142e-06f, 1.636135913e-06f, 1.642142033e-06f,
-1.648144491e-06f, 1.654143277e-06f, 1.660138383e-06f, 1.666129797e-06f, 1.672117509e-06f, 1.678101511e-06f, 1.684081792e-06f, 1.690058342e-06f, 1.696031152e-06f, 1.702000211e-06f,
-1.707965509e-06f, 1.713927038e-06f, 1.719884786e-06f, 1.725838745e-06f, 1.731788904e-06f, 1.737735254e-06f, 1.743677785e-06f, 1.749616486e-06f, 1.755551349e-06f, 1.761482364e-06f,
-1.767409520e-06f, 1.773332808e-06f, 1.779252218e-06f, 1.785167741e-06f, 1.791079366e-06f, 1.796987085e-06f, 1.802890886e-06f, 1.808790762e-06f, 1.814686701e-06f, 1.820578695e-06f,
-1.826466733e-06f, 1.832350806e-06f, 1.838230904e-06f, 1.844107018e-06f, 1.849979138e-06f, 1.855847254e-06f, 1.861711356e-06f, 1.867571436e-06f, 1.873427483e-06f, 1.879279488e-06f,
-1.885127441e-06f, 1.890971332e-06f, 1.896811153e-06f, 1.902646893e-06f, 1.908478543e-06f, 1.914306094e-06f, 1.920129535e-06f, 1.925948857e-06f, 1.931764051e-06f, 1.937575108e-06f,
-1.943382017e-06f, 1.949184769e-06f, 1.954983355e-06f, 1.960777765e-06f, 1.966567990e-06f, 1.972354020e-06f, 1.978135846e-06f, 1.983913458e-06f, 1.989686847e-06f, 1.995456003e-06f,
-2.001220918e-06f, 2.006981581e-06f, 2.012737983e-06f, 2.018490115e-06f, 2.024237968e-06f, 2.029981531e-06f, 2.035720797e-06f, 2.041455754e-06f, 2.047186394e-06f, 2.052912708e-06f,
-2.058634686e-06f, 2.064352319e-06f, 2.070065598e-06f, 2.075774513e-06f, 2.081479055e-06f, 2.087179214e-06f, 2.092874982e-06f, 2.098566349e-06f, 2.104253305e-06f, 2.109935842e-06f,
-2.115613951e-06f, 2.121287621e-06f, 2.126956845e-06f, 2.132621612e-06f, 2.138281913e-06f, 2.143937740e-06f, 2.149589082e-06f, 2.155235931e-06f, 2.160878278e-06f, 2.166516114e-06f,
-2.172149428e-06f, 2.177778213e-06f, 2.183402459e-06f, 2.189022156e-06f, 2.194637296e-06f, 2.200247870e-06f, 2.205853868e-06f, 2.211455282e-06f, 2.217052102e-06f, 2.222644319e-06f,
-2.228231925e-06f, 2.233814909e-06f, 2.239393264e-06f, 2.244966979e-06f, 2.250536047e-06f, 2.256100457e-06f, 2.261660201e-06f, 2.267215270e-06f, 2.272765656e-06f, 2.278311348e-06f,
-2.283852338e-06f, 2.289388617e-06f, 2.294920176e-06f, 2.300447006e-06f, 2.305969098e-06f, 2.311486443e-06f, 2.316999033e-06f, 2.322506858e-06f, 2.328009910e-06f, 2.333508179e-06f,
-2.339001657e-06f, 2.344490335e-06f, 2.349974203e-06f, 2.355453254e-06f, 2.360927478e-06f, 2.366396866e-06f, 2.371861410e-06f, 2.377321101e-06f, 2.382775930e-06f, 2.388225888e-06f,
-2.393670966e-06f, 2.399111156e-06f, 2.404546449e-06f, 2.409976836e-06f, 2.415402308e-06f, 2.420822857e-06f, 2.426238474e-06f, 2.431649150e-06f, 2.437054876e-06f, 2.442455644e-06f,
-2.447851445e-06f, 2.453242271e-06f, 2.458628112e-06f, 2.464008960e-06f, 2.469384807e-06f, 2.474755643e-06f, 2.480121460e-06f, 2.485482250e-06f, 2.490838004e-06f, 2.496188713e-06f,
-2.501534369e-06f, 2.506874963e-06f, 2.512210487e-06f, 2.517540931e-06f, 2.522866288e-06f, 2.528186549e-06f, 2.533501705e-06f, 2.538811748e-06f, 2.544116669e-06f, 2.549416460e-06f,
-2.554711113e-06f, 2.560000618e-06f, 2.565284968e-06f, 2.570564153e-06f, 2.575838166e-06f, 2.581106998e-06f, 2.586370641e-06f, 2.591629086e-06f, 2.596882324e-06f, 2.602130348e-06f,
-2.607373149e-06f, 2.612610718e-06f, 2.617843048e-06f, 2.623070130e-06f, 2.628291955e-06f, 2.633508515e-06f, 2.638719802e-06f, 2.643925808e-06f, 2.649126523e-06f, 2.654321941e-06f,
-2.659512052e-06f, 2.664696849e-06f, 2.669876323e-06f, 2.675050466e-06f, 2.680219269e-06f, 2.685382724e-06f, 2.690540824e-06f, 2.695693560e-06f, 2.700840923e-06f, 2.705982906e-06f,
-2.711119500e-06f, 2.716250697e-06f, 2.721376489e-06f, 2.726496869e-06f, 2.731611826e-06f, 2.736721355e-06f, 2.741825446e-06f, 2.746924091e-06f, 2.752017282e-06f, 2.757105012e-06f,
-2.762187271e-06f, 2.767264053e-06f, 2.772335348e-06f, 2.777401150e-06f, 2.782461449e-06f, 2.787516238e-06f, 2.792565509e-06f, 2.797609254e-06f, 2.802647465e-06f, 2.807680133e-06f,
-2.812707251e-06f, 2.817728812e-06f, 2.822744806e-06f, 2.827755226e-06f, 2.832760064e-06f, 2.837759313e-06f, 2.842752964e-06f, 2.847741009e-06f, 2.852723440e-06f, 2.857700250e-06f,
-2.862671431e-06f, 2.867636975e-06f, 2.872596874e-06f, 2.877551120e-06f, 2.882499705e-06f, 2.887442623e-06f, 2.892379863e-06f, 2.897311420e-06f, 2.902237285e-06f, 2.907157451e-06f,
-2.912071909e-06f, 2.916980652e-06f, 2.921883672e-06f, 2.926780962e-06f, 2.931672514e-06f, 2.936558320e-06f, 2.941438372e-06f, 2.946312663e-06f, 2.951181185e-06f, 2.956043930e-06f,
-2.960900891e-06f, 2.965752060e-06f, 2.970597430e-06f, 2.975436992e-06f, 2.980270740e-06f, 2.985098666e-06f, 2.989920761e-06f, 2.994737020e-06f, 2.999547433e-06f, 3.004351993e-06f,
-3.009150694e-06f, 3.013943527e-06f, 3.018730485e-06f, 3.023511560e-06f, 3.028286745e-06f, 3.033056032e-06f, 3.037819415e-06f, 3.042576885e-06f, 3.047328435e-06f, 3.052074057e-06f,
-3.056813745e-06f, 3.061547490e-06f, 3.066275286e-06f, 3.070997125e-06f, 3.075713000e-06f, 3.080422902e-06f, 3.085126826e-06f, 3.089824763e-06f, 3.094516707e-06f, 3.099202649e-06f,
-3.103882583e-06f, 3.108556501e-06f, 3.113224397e-06f, 3.117886262e-06f, 3.122542089e-06f, 3.127191872e-06f, 3.131835603e-06f, 3.136473274e-06f, 3.141104879e-06f, 3.145730411e-06f,
-3.150349861e-06f, 3.154963224e-06f, 3.159570491e-06f, 3.164171656e-06f, 3.168766712e-06f, 3.173355650e-06f, 3.177938466e-06f, 3.182515150e-06f, 3.187085696e-06f, 3.191650097e-06f,
-3.196208346e-06f, 3.200760436e-06f, 3.205306359e-06f, 3.209846110e-06f, 3.214379680e-06f, 3.218907062e-06f, 3.223428250e-06f, 3.227943237e-06f, 3.232452016e-06f, 3.236954579e-06f,
-3.241450920e-06f, 3.245941032e-06f, 3.250424907e-06f, 3.254902540e-06f, 3.259373922e-06f, 3.263839048e-06f, 3.268297909e-06f, 3.272750501e-06f, 3.277196814e-06f, 3.281636843e-06f,
-3.286070581e-06f, 3.290498021e-06f, 3.294919156e-06f, 3.299333980e-06f, 3.303742484e-06f, 3.308144664e-06f, 3.312540512e-06f, 3.316930020e-06f, 3.321313184e-06f, 3.325689995e-06f,
-3.330060447e-06f, 3.334424533e-06f, 3.338782247e-06f, 3.343133582e-06f, 3.347478530e-06f, 3.351817087e-06f, 3.356149245e-06f, 3.360474996e-06f, 3.364794336e-06f, 3.369107256e-06f,
-3.373413751e-06f, 3.377713814e-06f, 3.382007437e-06f, 3.386294616e-06f, 3.390575343e-06f, 3.394849611e-06f, 3.399117414e-06f, 3.403378746e-06f, 3.407633600e-06f, 3.411881970e-06f,
-3.416123848e-06f, 3.420359229e-06f, 3.424588107e-06f, 3.428810474e-06f, 3.433026324e-06f, 3.437235651e-06f, 3.441438448e-06f, 3.445634710e-06f, 3.449824429e-06f, 3.454007599e-06f,
-3.458184214e-06f, 3.462354268e-06f, 3.466517754e-06f, 3.470674666e-06f, 3.474824997e-06f, 3.478968742e-06f, 3.483105894e-06f, 3.487236446e-06f, 3.491360393e-06f, 3.495477728e-06f,
-3.499588445e-06f, 3.503692538e-06f, 3.507790000e-06f, 3.511880826e-06f, 3.515965009e-06f, 3.520042543e-06f, 3.524113421e-06f, 3.528177638e-06f, 3.532235188e-06f, 3.536286064e-06f,
-3.540330260e-06f, 3.544367771e-06f, 3.548398590e-06f, 3.552422710e-06f, 3.556440127e-06f, 3.560450833e-06f, 3.564454823e-06f, 3.568452091e-06f, 3.572442631e-06f, 3.576426437e-06f,
-3.580403502e-06f, 3.584373822e-06f, 3.588337389e-06f, 3.592294198e-06f, 3.596244243e-06f, 3.600187518e-06f, 3.604124018e-06f, 3.608053735e-06f, 3.611976665e-06f, 3.615892801e-06f,
-3.619802138e-06f, 3.623704670e-06f, 3.627600390e-06f, 3.631489294e-06f, 3.635371375e-06f, 3.639246627e-06f, 3.643115046e-06f, 3.646976624e-06f, 3.650831356e-06f, 3.654679236e-06f,
-3.658520260e-06f, 3.662354420e-06f, 3.666181711e-06f, 3.670002128e-06f, 3.673815665e-06f, 3.677622316e-06f, 3.681422075e-06f, 3.685214937e-06f, 3.689000897e-06f, 3.692779948e-06f,
-3.696552085e-06f, 3.700317302e-06f, 3.704075595e-06f, 3.707826956e-06f, 3.711571381e-06f, 3.715308865e-06f, 3.719039400e-06f, 3.722762983e-06f, 3.726479608e-06f, 3.730189268e-06f,
-3.733891960e-06f, 3.737587676e-06f, 3.741276412e-06f, 3.744958162e-06f, 3.748632921e-06f, 3.752300683e-06f, 3.755961443e-06f, 3.759615196e-06f, 3.763261936e-06f, 3.766901658e-06f,
-3.770534356e-06f, 3.774160025e-06f, 3.777778660e-06f, 3.781390256e-06f, 3.784994807e-06f, 3.788592308e-06f, 3.792182753e-06f, 3.795766138e-06f, 3.799342456e-06f, 3.802911704e-06f,
-3.806473875e-06f, 3.810028965e-06f, 3.813576968e-06f, 3.817117879e-06f, 3.820651693e-06f, 3.824178405e-06f, 3.827698009e-06f, 3.831210500e-06f, 3.834715874e-06f, 3.838214125e-06f,
-3.841705249e-06f, 3.845189239e-06f, 3.848666091e-06f, 3.852135800e-06f, 3.855598361e-06f, 3.859053769e-06f, 3.862502019e-06f, 3.865943105e-06f, 3.869377024e-06f, 3.872803769e-06f,
-3.876223336e-06f, 3.879635720e-06f, 3.883040916e-06f, 3.886438919e-06f, 3.889829724e-06f, 3.893213327e-06f, 3.896589722e-06f, 3.899958905e-06f, 3.903320870e-06f, 3.906675613e-06f,
-3.910023129e-06f, 3.913363413e-06f, 3.916696460e-06f, 3.920022266e-06f, 3.923340826e-06f, 3.926652135e-06f, 3.929956188e-06f, 3.933252981e-06f, 3.936542509e-06f, 3.939824766e-06f,
-3.943099749e-06f, 3.946367453e-06f, 3.949627873e-06f, 3.952881004e-06f, 3.956126842e-06f, 3.959365382e-06f, 3.962596620e-06f, 3.965820550e-06f, 3.969037169e-06f, 3.972246471e-06f,
-3.975448453e-06f, 3.978643109e-06f, 3.981830435e-06f, 3.985010427e-06f, 3.988183080e-06f, 3.991348389e-06f, 3.994506350e-06f, 3.997656959e-06f, 4.000800211e-06f, 4.003936102e-06f,
-4.007064626e-06f, 4.010185781e-06f, 4.013299561e-06f, 4.016405962e-06f, 4.019504980e-06f, 4.022596609e-06f, 4.025680847e-06f, 4.028757689e-06f, 4.031827129e-06f, 4.034889165e-06f,
-4.037943791e-06f, 4.040991003e-06f, 4.044030798e-06f, 4.047063170e-06f, 4.050088116e-06f, 4.053105631e-06f, 4.056115712e-06f, 4.059118353e-06f, 4.062113551e-06f, 4.065101302e-06f,
-4.068081601e-06f, 4.071054444e-06f, 4.074019827e-06f, 4.076977746e-06f, 4.079928197e-06f, 4.082871176e-06f, 4.085806679e-06f, 4.088734701e-06f, 4.091655239e-06f, 4.094568288e-06f,
-4.097473845e-06f, 4.100371905e-06f, 4.103262465e-06f, 4.106145520e-06f, 4.109021067e-06f, 4.111889101e-06f, 4.114749619e-06f, 4.117602616e-06f, 4.120448090e-06f, 4.123286035e-06f,
-4.126116448e-06f, 4.128939325e-06f, 4.131754663e-06f, 4.134562456e-06f, 4.137362703e-06f, 4.140155397e-06f, 4.142940537e-06f, 4.145718118e-06f, 4.148488136e-06f, 4.151250588e-06f,
-4.154005470e-06f, 4.156752777e-06f, 4.159492507e-06f, 4.162224655e-06f, 4.164949219e-06f, 4.167666193e-06f, 4.170375575e-06f, 4.173077361e-06f, 4.175771547e-06f, 4.178458130e-06f,
-4.181137106e-06f, 4.183808471e-06f, 4.186472221e-06f, 4.189128354e-06f, 4.191776866e-06f, 4.194417752e-06f, 4.197051011e-06f, 4.199676637e-06f, 4.202294627e-06f, 4.204904979e-06f,
-4.207507688e-06f, 4.210102751e-06f, 4.212690165e-06f, 4.215269926e-06f, 4.217842031e-06f, 4.220406476e-06f, 4.222963258e-06f, 4.225512373e-06f, 4.228053819e-06f, 4.230587591e-06f,
-4.233113687e-06f, 4.235632103e-06f, 4.238142835e-06f, 4.240645882e-06f, 4.243141238e-06f, 4.245628901e-06f, 4.248108868e-06f, 4.250581136e-06f, 4.253045700e-06f, 4.255502559e-06f,
-4.257951708e-06f, 4.260393145e-06f, 4.262826866e-06f, 4.265252869e-06f, 4.267671149e-06f, 4.270081705e-06f, 4.272484532e-06f, 4.274879628e-06f, 4.277266989e-06f, 4.279646613e-06f,
-4.282018497e-06f, 4.284382637e-06f, 4.286739030e-06f, 4.289087673e-06f, 4.291428564e-06f, 4.293761699e-06f, 4.296087076e-06f, 4.298404690e-06f, 4.300714541e-06f, 4.303016623e-06f,
-4.305310935e-06f, 4.307597474e-06f, 4.309876237e-06f, 4.312147220e-06f, 4.314410421e-06f, 4.316665837e-06f, 4.318913466e-06f, 4.321153304e-06f, 4.323385348e-06f, 4.325609596e-06f,
-4.327826046e-06f, 4.330034693e-06f, 4.332235536e-06f, 4.334428571e-06f, 4.336613797e-06f, 4.338791209e-06f, 4.340960807e-06f, 4.343122586e-06f, 4.345276544e-06f, 4.347422679e-06f,
-4.349560987e-06f, 4.351691467e-06f, 4.353814115e-06f, 4.355928930e-06f, 4.358035907e-06f, 4.360135046e-06f, 4.362226342e-06f, 4.364309794e-06f, 4.366385400e-06f, 4.368453156e-06f,
-4.370513060e-06f, 4.372565110e-06f, 4.374609302e-06f, 4.376645636e-06f, 4.378674107e-06f, 4.380694714e-06f, 4.382707455e-06f, 4.384712327e-06f, 4.386709326e-06f, 4.388698453e-06f,
-4.390679702e-06f, 4.392653073e-06f, 4.394618564e-06f, 4.396576170e-06f, 4.398525892e-06f, 4.400467725e-06f, 4.402401668e-06f, 4.404327719e-06f, 4.406245875e-06f, 4.408156133e-06f,
-4.410058493e-06f, 4.411952951e-06f, 4.413839506e-06f, 4.415718154e-06f, 4.417588895e-06f, 4.419451726e-06f, 4.421306644e-06f, 4.423153647e-06f, 4.424992734e-06f, 4.426823903e-06f,
-4.428647150e-06f, 4.430462475e-06f, 4.432269875e-06f, 4.434069348e-06f, 4.435860892e-06f, 4.437644505e-06f, 4.439420184e-06f, 4.441187929e-06f, 4.442947737e-06f, 4.444699606e-06f,
-4.446443533e-06f, 4.448179518e-06f, 4.449907558e-06f, 4.451627652e-06f, 4.453339797e-06f, 4.455043991e-06f, 4.456740233e-06f, 4.458428521e-06f, 4.460108853e-06f, 4.461781226e-06f,
-4.463445641e-06f, 4.465102093e-06f, 4.466750583e-06f, 4.468391107e-06f, 4.470023665e-06f, 4.471648254e-06f, 4.473264873e-06f, 4.474873520e-06f, 4.476474193e-06f, 4.478066891e-06f,
-4.479651612e-06f, 4.481228354e-06f, 4.482797116e-06f, 4.484357895e-06f, 4.485910692e-06f, 4.487455503e-06f, 4.488992327e-06f, 4.490521163e-06f, 4.492042010e-06f, 4.493554865e-06f,
-4.495059726e-06f, 4.496556594e-06f, 4.498045465e-06f, 4.499526339e-06f, 4.500999214e-06f, 4.502464089e-06f, 4.503920961e-06f, 4.505369831e-06f, 4.506810696e-06f, 4.508243554e-06f,
-4.509668406e-06f, 4.511085248e-06f, 4.512494080e-06f, 4.513894901e-06f, 4.515287709e-06f, 4.516672502e-06f, 4.518049280e-06f, 4.519418041e-06f, 4.520778784e-06f, 4.522131508e-06f,
-4.523476211e-06f, 4.524812892e-06f, 4.526141551e-06f, 4.527462185e-06f, 4.528774793e-06f, 4.530079375e-06f, 4.531375929e-06f, 4.532664455e-06f, 4.533944950e-06f, 4.535217414e-06f,
-4.536481845e-06f, 4.537738243e-06f, 4.538986607e-06f, 4.540226935e-06f, 4.541459227e-06f, 4.542683481e-06f, 4.543899696e-06f, 4.545107872e-06f, 4.546308007e-06f, 4.547500100e-06f,
-4.548684151e-06f, 4.549860158e-06f, 4.551028121e-06f, 4.552188038e-06f, 4.553339909e-06f, 4.554483733e-06f, 4.555619509e-06f, 4.556747235e-06f, 4.557866912e-06f, 4.558978538e-06f,
-4.560082113e-06f, 4.561177635e-06f, 4.562265105e-06f, 4.563344520e-06f, 4.564415881e-06f, 4.565479186e-06f, 4.566534435e-06f, 4.567581628e-06f, 4.568620762e-06f, 4.569651839e-06f,
-4.570674856e-06f, 4.571689814e-06f, 4.572696711e-06f, 4.573695548e-06f, 4.574686323e-06f, 4.575669036e-06f, 4.576643686e-06f, 4.577610272e-06f, 4.578568795e-06f, 4.579519253e-06f,
-4.580461646e-06f, 4.581395974e-06f, 4.582322235e-06f, 4.583240430e-06f, 4.584150558e-06f, 4.585052618e-06f, 4.585946610e-06f, 4.586832534e-06f, 4.587710389e-06f, 4.588580175e-06f,
-4.589441890e-06f, 4.590295536e-06f, 4.591141111e-06f, 4.591978616e-06f, 4.592808049e-06f, 4.593629411e-06f, 4.594442701e-06f, 4.595247918e-06f, 4.596045064e-06f, 4.596834136e-06f,
-4.597615136e-06f, 4.598388062e-06f, 4.599152915e-06f, 4.599909694e-06f, 4.600658400e-06f, 4.601399031e-06f, 4.602131588e-06f, 4.602856070e-06f, 4.603572478e-06f, 4.604280812e-06f,
-4.604981070e-06f, 4.605673254e-06f, 4.606357362e-06f, 4.607033396e-06f, 4.607701354e-06f, 4.608361237e-06f, 4.609013045e-06f, 4.609656777e-06f, 4.610292434e-06f, 4.610920016e-06f,
-4.611539522e-06f, 4.612150954e-06f, 4.612754310e-06f, 4.613349591e-06f, 4.613936796e-06f, 4.614515927e-06f, 4.615086983e-06f, 4.615649964e-06f, 4.616204871e-06f, 4.616751703e-06f,
-4.617290461e-06f, 4.617821144e-06f, 4.618343754e-06f, 4.618858290e-06f, 4.619364752e-06f, 4.619863141e-06f, 4.620353457e-06f, 4.620835700e-06f, 4.621309870e-06f, 4.621775968e-06f,
-4.622233994e-06f, 4.622683949e-06f, 4.623125832e-06f, 4.623559644e-06f, 4.623985385e-06f, 4.624403056e-06f, 4.624812658e-06f, 4.625214189e-06f, 4.625607652e-06f, 4.625993046e-06f,
-4.626370372e-06f, 4.626739629e-06f, 4.627100820e-06f, 4.627453944e-06f, 4.627799001e-06f, 4.628135993e-06f, 4.628464919e-06f, 4.628785780e-06f, 4.629098577e-06f, 4.629403311e-06f,
-4.629699981e-06f, 4.629988589e-06f, 4.630269135e-06f, 4.630541619e-06f, 4.630806043e-06f, 4.631062407e-06f, 4.631310712e-06f, 4.631550958e-06f, 4.631783145e-06f, 4.632007276e-06f,
-4.632223350e-06f, 4.632431368e-06f, 4.632631331e-06f, 4.632823240e-06f, 4.633007095e-06f, 4.633182897e-06f, 4.633350648e-06f, 4.633510347e-06f, 4.633661996e-06f, 4.633805595e-06f,
-4.633941146e-06f, 4.634068649e-06f, 4.634188105e-06f, 4.634299514e-06f, 4.634402879e-06f, 4.634498200e-06f, 4.634585477e-06f, 4.634664712e-06f, 4.634735906e-06f, 4.634799059e-06f,
-4.634854174e-06f, 4.634901249e-06f, 4.634940288e-06f, 4.634971290e-06f, 4.634994256e-06f, 4.635009189e-06f, 4.635016089e-06f, 4.635014956e-06f, 4.635005793e-06f, 4.634988599e-06f,
-4.634963378e-06f, 4.634930128e-06f, 4.634888852e-06f, 4.634839551e-06f, 4.634782226e-06f, 4.634716878e-06f, 4.634643509e-06f, 4.634562119e-06f, 4.634472710e-06f, 4.634375283e-06f,
-4.634269840e-06f, 4.634156381e-06f, 4.634034908e-06f, 4.633905423e-06f, 4.633767926e-06f, 4.633622419e-06f, 4.633468903e-06f, 4.633307380e-06f, 4.633137851e-06f, 4.632960317e-06f,
-4.632774780e-06f, 4.632581242e-06f, 4.632379703e-06f, 4.632170165e-06f, 4.631952630e-06f, 4.631727099e-06f, 4.631493573e-06f, 4.631252055e-06f, 4.631002545e-06f, 4.630745045e-06f,
-4.630479557e-06f, 4.630206082e-06f, 4.629924621e-06f, 4.629635177e-06f, 4.629337751e-06f, 4.629032345e-06f, 4.628718959e-06f, 4.628397597e-06f, 4.628068259e-06f, 4.627730947e-06f,
-4.627385662e-06f, 4.627032408e-06f, 4.626671184e-06f, 4.626301994e-06f, 4.625924838e-06f, 4.625539718e-06f, 4.625146637e-06f, 4.624745595e-06f, 4.624336596e-06f, 4.623919639e-06f,
-4.623494729e-06f, 4.623061865e-06f, 4.622621050e-06f, 4.622172286e-06f, 4.621715575e-06f, 4.621250918e-06f, 4.620778318e-06f, 4.620297777e-06f, 4.619809295e-06f, 4.619312876e-06f,
-4.618808522e-06f, 4.618296233e-06f, 4.617776012e-06f, 4.617247862e-06f, 4.616711784e-06f, 4.616167780e-06f, 4.615615852e-06f, 4.615056002e-06f, 4.614488233e-06f, 4.613912546e-06f,
-4.613328944e-06f, 4.612737428e-06f, 4.612138000e-06f, 4.611530664e-06f, 4.610915420e-06f, 4.610292272e-06f, 4.609661221e-06f, 4.609022269e-06f, 4.608375419e-06f, 4.607720672e-06f,
-4.607058032e-06f, 4.606387500e-06f, 4.605709078e-06f, 4.605022769e-06f, 4.604328576e-06f, 4.603626499e-06f, 4.602916542e-06f, 4.602198707e-06f, 4.601472997e-06f, 4.600739413e-06f,
-4.599997958e-06f, 4.599248634e-06f, 4.598491444e-06f, 4.597726390e-06f, 4.596953475e-06f, 4.596172700e-06f, 4.595384069e-06f, 4.594587584e-06f, 4.593783247e-06f, 4.592971060e-06f,
-4.592151027e-06f, 4.591323150e-06f, 4.590487430e-06f, 4.589643872e-06f, 4.588792477e-06f, 4.587933247e-06f, 4.587066186e-06f, 4.586191296e-06f, 4.585308580e-06f, 4.584418040e-06f,
-4.583519678e-06f, 4.582613498e-06f, 4.581699502e-06f, 4.580777693e-06f, 4.579848073e-06f, 4.578910645e-06f, 4.577965412e-06f, 4.577012377e-06f, 4.576051542e-06f, 4.575082909e-06f,
-4.574106483e-06f, 4.573122265e-06f, 4.572130258e-06f, 4.571130465e-06f, 4.570122889e-06f, 4.569107532e-06f, 4.568084398e-06f, 4.567053490e-06f, 4.566014809e-06f, 4.564968360e-06f,
-4.563914144e-06f, 4.562852166e-06f, 4.561782427e-06f, 4.560704930e-06f, 4.559619679e-06f, 4.558526677e-06f, 4.557425926e-06f, 4.556317430e-06f, 4.555201191e-06f, 4.554077213e-06f,
-4.552945498e-06f, 4.551806049e-06f, 4.550658870e-06f, 4.549503964e-06f, 4.548341333e-06f, 4.547170981e-06f, 4.545992910e-06f, 4.544807125e-06f, 4.543613627e-06f, 4.542412421e-06f,
-4.541203509e-06f, 4.539986894e-06f, 4.538762580e-06f, 4.537530570e-06f, 4.536290866e-06f, 4.535043473e-06f, 4.533788393e-06f, 4.532525630e-06f, 4.531255187e-06f, 4.529977067e-06f,
-4.528691273e-06f, 4.527397809e-06f, 4.526096678e-06f, 4.524787883e-06f, 4.523471428e-06f, 4.522147316e-06f, 4.520815550e-06f, 4.519476133e-06f, 4.518129070e-06f, 4.516774363e-06f,
-4.515412016e-06f, 4.514042032e-06f, 4.512664415e-06f, 4.511279168e-06f, 4.509886294e-06f, 4.508485797e-06f, 4.507077681e-06f, 4.505661949e-06f, 4.504238604e-06f, 4.502807650e-06f,
-4.501369091e-06f, 4.499922930e-06f, 4.498469170e-06f, 4.497007816e-06f, 4.495538870e-06f, 4.494062336e-06f, 4.492578219e-06f, 4.491086521e-06f, 4.489587246e-06f, 4.488080398e-06f,
-4.486565980e-06f, 4.485043997e-06f, 4.483514451e-06f, 4.481977347e-06f, 4.480432688e-06f, 4.478880477e-06f, 4.477320720e-06f, 4.475753419e-06f, 4.474178578e-06f, 4.472596201e-06f,
-4.471006291e-06f, 4.469408853e-06f, 4.467803891e-06f, 4.466191407e-06f, 4.464571406e-06f, 4.462943893e-06f, 4.461308869e-06f, 4.459666340e-06f, 4.458016310e-06f, 4.456358782e-06f,
-4.454693760e-06f, 4.453021248e-06f, 4.451341250e-06f, 4.449653770e-06f, 4.447958812e-06f, 4.446256380e-06f, 4.444546477e-06f, 4.442829109e-06f, 4.441104278e-06f, 4.439371989e-06f,
-4.437632246e-06f, 4.435885053e-06f, 4.434130414e-06f, 4.432368333e-06f, 4.430598814e-06f, 4.428821861e-06f, 4.427037479e-06f, 4.425245671e-06f, 4.423446441e-06f, 4.421639794e-06f,
-4.419825735e-06f, 4.418004266e-06f, 4.416175392e-06f, 4.414339118e-06f, 4.412495447e-06f, 4.410644384e-06f, 4.408785933e-06f, 4.406920098e-06f, 4.405046884e-06f, 4.403166295e-06f,
-4.401278334e-06f, 4.399383007e-06f, 4.397480318e-06f, 4.395570270e-06f, 4.393652869e-06f, 4.391728118e-06f, 4.389796023e-06f, 4.387856586e-06f, 4.385909814e-06f, 4.383955709e-06f,
-4.381994277e-06f, 4.380025521e-06f, 4.378049447e-06f, 4.376066059e-06f, 4.374075361e-06f, 4.372077357e-06f, 4.370072053e-06f, 4.368059452e-06f, 4.366039559e-06f, 4.364012379e-06f,
-4.361977916e-06f, 4.359936174e-06f, 4.357887158e-06f, 4.355830874e-06f, 4.353767324e-06f, 4.351696515e-06f, 4.349618449e-06f, 4.347533133e-06f, 4.345440571e-06f, 4.343340766e-06f,
-4.341233725e-06f, 4.339119451e-06f, 4.336997949e-06f, 4.334869225e-06f, 4.332733282e-06f, 4.330590125e-06f, 4.328439759e-06f, 4.326282189e-06f, 4.324117419e-06f, 4.321945454e-06f,
-4.319766300e-06f, 4.317579960e-06f, 4.315386439e-06f, 4.313185743e-06f, 4.310977876e-06f, 4.308762842e-06f, 4.306540648e-06f, 4.304311297e-06f, 4.302074794e-06f, 4.299831145e-06f,
-4.297580353e-06f, 4.295322425e-06f, 4.293057365e-06f, 4.290785177e-06f, 4.288505867e-06f, 4.286219440e-06f, 4.283925901e-06f, 4.281625254e-06f, 4.279317504e-06f, 4.277002657e-06f,
-4.274680718e-06f, 4.272351691e-06f, 4.270015582e-06f, 4.267672395e-06f, 4.265322135e-06f, 4.262964809e-06f, 4.260600420e-06f, 4.258228974e-06f, 4.255850475e-06f, 4.253464930e-06f,
-4.251072342e-06f, 4.248672718e-06f, 4.246266062e-06f, 4.243852380e-06f, 4.241431676e-06f, 4.239003955e-06f, 4.236569224e-06f, 4.234127487e-06f, 4.231678749e-06f, 4.229223016e-06f,
-4.226760292e-06f, 4.224290583e-06f, 4.221813895e-06f, 4.219330232e-06f, 4.216839599e-06f, 4.214342003e-06f, 4.211837448e-06f, 4.209325939e-06f, 4.206807483e-06f, 4.204282084e-06f,
-4.201749747e-06f, 4.199210478e-06f, 4.196664282e-06f, 4.194111165e-06f, 4.191551132e-06f, 4.188984189e-06f, 4.186410340e-06f, 4.183829591e-06f, 4.181241948e-06f, 4.178647417e-06f,
-4.176046001e-06f, 4.173437708e-06f, 4.170822542e-06f, 4.168200509e-06f, 4.165571614e-06f, 4.162935863e-06f, 4.160293262e-06f, 4.157643816e-06f, 4.154987530e-06f, 4.152324410e-06f,
-4.149654462e-06f, 4.146977691e-06f, 4.144294103e-06f, 4.141603703e-06f, 4.138906497e-06f, 4.136202491e-06f, 4.133491689e-06f, 4.130774099e-06f, 4.128049725e-06f, 4.125318573e-06f,
-4.122580649e-06f, 4.119835958e-06f, 4.117084507e-06f, 4.114326300e-06f, 4.111561344e-06f, 4.108789645e-06f, 4.106011207e-06f, 4.103226037e-06f, 4.100434141e-06f, 4.097635524e-06f,
-4.094830191e-06f, 4.092018150e-06f, 4.089199406e-06f, 4.086373964e-06f, 4.083541830e-06f, 4.080703010e-06f, 4.077857511e-06f, 4.075005337e-06f, 4.072146495e-06f, 4.069280990e-06f,
-4.066408829e-06f, 4.063530017e-06f, 4.060644561e-06f, 4.057752465e-06f, 4.054853737e-06f, 4.051948382e-06f, 4.049036405e-06f, 4.046117814e-06f, 4.043192613e-06f, 4.040260810e-06f,
-4.037322409e-06f, 4.034377418e-06f, 4.031425841e-06f, 4.028467685e-06f, 4.025502956e-06f, 4.022531660e-06f, 4.019553803e-06f, 4.016569391e-06f, 4.013578431e-06f, 4.010580928e-06f,
-4.007576888e-06f, 4.004566318e-06f, 4.001549223e-06f, 3.998525610e-06f, 3.995495485e-06f, 3.992458854e-06f, 3.989415723e-06f, 3.986366099e-06f, 3.983309987e-06f, 3.980247394e-06f,
-3.977178326e-06f, 3.974102789e-06f, 3.971020789e-06f, 3.967932333e-06f, 3.964837427e-06f, 3.961736077e-06f, 3.958628290e-06f, 3.955514071e-06f, 3.952393427e-06f, 3.949266365e-06f,
-3.946132889e-06f, 3.942993008e-06f, 3.939846727e-06f, 3.936694053e-06f, 3.933534991e-06f, 3.930369549e-06f, 3.927197732e-06f, 3.924019547e-06f, 3.920835001e-06f, 3.917644099e-06f,
-3.914446849e-06f, 3.911243256e-06f, 3.908033327e-06f, 3.904817069e-06f, 3.901594487e-06f, 3.898365589e-06f, 3.895130381e-06f, 3.891888869e-06f, 3.888641060e-06f, 3.885386960e-06f,
-3.882126577e-06f, 3.878859915e-06f, 3.875586982e-06f, 3.872307785e-06f, 3.869022329e-06f, 3.865730622e-06f, 3.862432671e-06f, 3.859128481e-06f, 3.855818059e-06f, 3.852501412e-06f,
-3.849178546e-06f, 3.845849468e-06f, 3.842514186e-06f, 3.839172704e-06f, 3.835825031e-06f, 3.832471172e-06f, 3.829111134e-06f, 3.825744925e-06f, 3.822372550e-06f, 3.818994016e-06f,
-3.815609331e-06f, 3.812218500e-06f, 3.808821531e-06f, 3.805418431e-06f, 3.802009205e-06f, 3.798593861e-06f, 3.795172405e-06f, 3.791744845e-06f, 3.788311187e-06f, 3.784871438e-06f,
-3.781425604e-06f, 3.777973693e-06f, 3.774515711e-06f, 3.771051666e-06f, 3.767581563e-06f, 3.764105410e-06f, 3.760623214e-06f, 3.757134982e-06f, 3.753640720e-06f, 3.750140435e-06f,
-3.746634135e-06f, 3.743121825e-06f, 3.739603514e-06f, 3.736079208e-06f, 3.732548914e-06f, 3.729012638e-06f, 3.725470389e-06f, 3.721922172e-06f, 3.718367995e-06f, 3.714807865e-06f,
-3.711241789e-06f, 3.707669773e-06f, 3.704091825e-06f, 3.700507952e-06f, 3.696918161e-06f, 3.693322459e-06f, 3.689720852e-06f, 3.686113349e-06f, 3.682499956e-06f, 3.678880679e-06f,
-3.675255527e-06f, 3.671624506e-06f, 3.667987624e-06f, 3.664344887e-06f, 3.660696303e-06f, 3.657041879e-06f, 3.653381621e-06f, 3.649715538e-06f, 3.646043636e-06f, 3.642365922e-06f,
-3.638682404e-06f, 3.634993088e-06f, 3.631297983e-06f, 3.627597095e-06f, 3.623890431e-06f, 3.620177999e-06f, 3.616459805e-06f, 3.612735858e-06f, 3.609006164e-06f, 3.605270730e-06f,
-3.601529565e-06f, 3.597782675e-06f, 3.594030067e-06f, 3.590271748e-06f, 3.586507727e-06f, 3.582738010e-06f, 3.578962605e-06f, 3.575181519e-06f, 3.571394759e-06f, 3.567602332e-06f,
-3.563804247e-06f, 3.560000510e-06f, 3.556191129e-06f, 3.552376112e-06f, 3.548555464e-06f, 3.544729195e-06f, 3.540897311e-06f, 3.537059820e-06f, 3.533216729e-06f, 3.529368045e-06f,
-3.525513777e-06f, 3.521653931e-06f, 3.517788516e-06f, 3.513917537e-06f, 3.510041004e-06f, 3.506158923e-06f, 3.502271302e-06f, 3.498378149e-06f, 3.494479470e-06f, 3.490575274e-06f,
-3.486665568e-06f, 3.482750360e-06f, 3.478829657e-06f, 3.474903466e-06f, 3.470971795e-06f, 3.467034653e-06f, 3.463092045e-06f, 3.459143981e-06f, 3.455190467e-06f, 3.451231512e-06f,
-3.447267122e-06f, 3.443297306e-06f, 3.439322070e-06f, 3.435341423e-06f, 3.431355373e-06f, 3.427363927e-06f, 3.423367092e-06f, 3.419364877e-06f, 3.415357288e-06f, 3.411344335e-06f,
-3.407326023e-06f, 3.403302362e-06f, 3.399273359e-06f, 3.395239021e-06f, 3.391199357e-06f, 3.387154373e-06f, 3.383104078e-06f, 3.379048480e-06f, 3.374987586e-06f, 3.370921404e-06f,
-3.366849942e-06f, 3.362773208e-06f, 3.358691209e-06f, 3.354603953e-06f, 3.350511448e-06f, 3.346413703e-06f, 3.342310723e-06f, 3.338202519e-06f, 3.334089096e-06f, 3.329970464e-06f,
-3.325846630e-06f, 3.321717602e-06f, 3.317583388e-06f, 3.313443996e-06f, 3.309299433e-06f, 3.305149707e-06f, 3.300994827e-06f, 3.296834801e-06f, 3.292669635e-06f, 3.288499339e-06f,
-3.284323920e-06f, 3.280143386e-06f, 3.275957745e-06f, 3.271767005e-06f, 3.267571174e-06f, 3.263370260e-06f, 3.259164270e-06f, 3.254953214e-06f, 3.250737099e-06f, 3.246515932e-06f,
-3.242289723e-06f, 3.238058478e-06f, 3.233822206e-06f, 3.229580916e-06f, 3.225334614e-06f, 3.221083310e-06f, 3.216827011e-06f, 3.212565725e-06f, 3.208299461e-06f, 3.204028226e-06f,
-3.199752028e-06f, 3.195470876e-06f, 3.191184778e-06f, 3.186893742e-06f, 3.182597775e-06f, 3.178296887e-06f, 3.173991085e-06f, 3.169680377e-06f, 3.165364772e-06f, 3.161044278e-06f,
-3.156718902e-06f, 3.152388653e-06f, 3.148053540e-06f, 3.143713570e-06f, 3.139368752e-06f, 3.135019093e-06f, 3.130664603e-06f, 3.126305289e-06f, 3.121941159e-06f, 3.117572222e-06f,
-3.113198485e-06f, 3.108819958e-06f, 3.104436649e-06f, 3.100048565e-06f, 3.095655715e-06f, 3.091258107e-06f, 3.086855750e-06f, 3.082448651e-06f, 3.078036820e-06f, 3.073620264e-06f,
-3.069198992e-06f, 3.064773012e-06f, 3.060342332e-06f, 3.055906961e-06f, 3.051466907e-06f, 3.047022178e-06f, 3.042572783e-06f, 3.038118730e-06f, 3.033660027e-06f, 3.029196684e-06f,
-3.024728707e-06f, 3.020256107e-06f, 3.015778890e-06f, 3.011297065e-06f, 3.006810642e-06f, 3.002319627e-06f, 2.997824030e-06f, 2.993323860e-06f, 2.988819123e-06f, 2.984309830e-06f,
-2.979795988e-06f, 2.975277606e-06f, 2.970754692e-06f, 2.966227255e-06f, 2.961695303e-06f, 2.957158845e-06f, 2.952617889e-06f, 2.948072444e-06f, 2.943522518e-06f, 2.938968120e-06f,
-2.934409258e-06f, 2.929845941e-06f, 2.925278177e-06f, 2.920705975e-06f, 2.916129343e-06f, 2.911548290e-06f, 2.906962825e-06f, 2.902372956e-06f, 2.897778691e-06f, 2.893180040e-06f,
-2.888577010e-06f, 2.883969610e-06f, 2.879357850e-06f, 2.874741737e-06f, 2.870121280e-06f, 2.865496488e-06f, 2.860867369e-06f, 2.856233932e-06f, 2.851596186e-06f, 2.846954139e-06f,
-2.842307800e-06f, 2.837657178e-06f, 2.833002281e-06f, 2.828343117e-06f, 2.823679696e-06f, 2.819012027e-06f, 2.814340117e-06f, 2.809663976e-06f, 2.804983612e-06f, 2.800299034e-06f,
-2.795610251e-06f, 2.790917271e-06f, 2.786220103e-06f, 2.781518757e-06f, 2.776813239e-06f, 2.772103560e-06f, 2.767389728e-06f, 2.762671752e-06f, 2.757949640e-06f, 2.753223402e-06f,
-2.748493046e-06f, 2.743758580e-06f, 2.739020014e-06f, 2.734277357e-06f, 2.729530617e-06f, 2.724779802e-06f, 2.720024923e-06f, 2.715265987e-06f, 2.710503003e-06f, 2.705735981e-06f,
-2.700964929e-06f, 2.696189856e-06f, 2.691410770e-06f, 2.686627681e-06f, 2.681840597e-06f, 2.677049528e-06f, 2.672254481e-06f, 2.667455467e-06f, 2.662652493e-06f, 2.657845570e-06f,
-2.653034704e-06f, 2.648219907e-06f, 2.643401185e-06f, 2.638578549e-06f, 2.633752008e-06f, 2.628921569e-06f, 2.624087242e-06f, 2.619249036e-06f, 2.614406960e-06f, 2.609561023e-06f,
-2.604711234e-06f, 2.599857601e-06f, 2.595000134e-06f, 2.590138841e-06f, 2.585273732e-06f, 2.580404816e-06f, 2.575532101e-06f, 2.570655596e-06f, 2.565775311e-06f, 2.560891254e-06f,
-2.556003434e-06f, 2.551111861e-06f, 2.546216543e-06f, 2.541317490e-06f, 2.536414710e-06f, 2.531508213e-06f, 2.526598007e-06f, 2.521684101e-06f, 2.516766505e-06f, 2.511845227e-06f,
-2.506920278e-06f, 2.501991664e-06f, 2.497059397e-06f, 2.492123484e-06f, 2.487183935e-06f, 2.482240758e-06f, 2.477293964e-06f, 2.472343561e-06f, 2.467389558e-06f, 2.462431964e-06f,
-2.457470788e-06f, 2.452506040e-06f, 2.447537728e-06f, 2.442565862e-06f, 2.437590450e-06f, 2.432611503e-06f, 2.427629028e-06f, 2.422643036e-06f, 2.417653534e-06f, 2.412660533e-06f,
-2.407664042e-06f, 2.402664069e-06f, 2.397660624e-06f, 2.392653715e-06f, 2.387643353e-06f, 2.382629547e-06f, 2.377612304e-06f, 2.372591635e-06f, 2.367567550e-06f, 2.362540056e-06f,
-2.357509163e-06f, 2.352474880e-06f, 2.347437218e-06f, 2.342396184e-06f, 2.337351788e-06f, 2.332304039e-06f, 2.327252946e-06f, 2.322198519e-06f, 2.317140767e-06f, 2.312079699e-06f,
-2.307015325e-06f, 2.301947653e-06f, 2.296876693e-06f, 2.291802453e-06f, 2.286724945e-06f, 2.281644175e-06f, 2.276560155e-06f, 2.271472892e-06f, 2.266382397e-06f, 2.261288679e-06f,
-2.256191746e-06f, 2.251091609e-06f, 2.245988276e-06f, 2.240881757e-06f, 2.235772061e-06f, 2.230659198e-06f, 2.225543176e-06f, 2.220424005e-06f, 2.215301694e-06f, 2.210176253e-06f,
-2.205047691e-06f, 2.199916017e-06f, 2.194781241e-06f, 2.189643371e-06f, 2.184502418e-06f, 2.179358391e-06f, 2.174211298e-06f, 2.169061150e-06f, 2.163907955e-06f, 2.158751724e-06f,
-2.153592464e-06f, 2.148430187e-06f, 2.143264900e-06f, 2.138096614e-06f, 2.132925338e-06f, 2.127751081e-06f, 2.122573853e-06f, 2.117393663e-06f, 2.112210520e-06f, 2.107024434e-06f,
-2.101835414e-06f, 2.096643470e-06f, 2.091448611e-06f, 2.086250846e-06f, 2.081050185e-06f, 2.075846637e-06f, 2.070640212e-06f, 2.065430919e-06f, 2.060218768e-06f, 2.055003767e-06f,
-2.049785927e-06f, 2.044565257e-06f, 2.039341766e-06f, 2.034115464e-06f, 2.028886360e-06f, 2.023654464e-06f, 2.018419785e-06f, 2.013182332e-06f, 2.007942115e-06f, 2.002699144e-06f,
-1.997453428e-06f, 1.992204976e-06f, 1.986953799e-06f, 1.981699904e-06f, 1.976443303e-06f, 1.971184004e-06f, 1.965922017e-06f, 1.960657351e-06f, 1.955390016e-06f, 1.950120022e-06f,
-1.944847377e-06f, 1.939572092e-06f, 1.934294176e-06f, 1.929013638e-06f, 1.923730488e-06f, 1.918444736e-06f, 1.913156390e-06f, 1.907865461e-06f, 1.902571958e-06f, 1.897275891e-06f,
-1.891977269e-06f, 1.886676102e-06f, 1.881372399e-06f, 1.876066169e-06f, 1.870757423e-06f, 1.865446170e-06f, 1.860132419e-06f, 1.854816181e-06f, 1.849497464e-06f, 1.844176278e-06f,
-1.838852632e-06f, 1.833526537e-06f, 1.828198002e-06f, 1.822867036e-06f, 1.817533649e-06f, 1.812197851e-06f, 1.806859651e-06f, 1.801519059e-06f, 1.796176084e-06f, 1.790830736e-06f,
-1.785483025e-06f, 1.780132960e-06f, 1.774780550e-06f, 1.769425806e-06f, 1.764068737e-06f, 1.758709352e-06f, 1.753347662e-06f, 1.747983675e-06f, 1.742617402e-06f, 1.737248852e-06f,
-1.731878035e-06f, 1.726504960e-06f, 1.721129636e-06f, 1.715752075e-06f, 1.710372285e-06f, 1.704990275e-06f, 1.699606056e-06f, 1.694219637e-06f, 1.688831028e-06f, 1.683440238e-06f,
-1.678047278e-06f, 1.672652156e-06f, 1.667254882e-06f, 1.661855467e-06f, 1.656453919e-06f, 1.651050248e-06f, 1.645644465e-06f, 1.640236578e-06f, 1.634826598e-06f, 1.629414533e-06f,
-1.624000395e-06f, 1.618584191e-06f, 1.613165933e-06f, 1.607745630e-06f, 1.602323291e-06f, 1.596898926e-06f, 1.591472544e-06f, 1.586044157e-06f, 1.580613772e-06f, 1.575181401e-06f,
-1.569747051e-06f, 1.564310735e-06f, 1.558872460e-06f, 1.553432237e-06f, 1.547990075e-06f, 1.542545984e-06f, 1.537099974e-06f, 1.531652055e-06f, 1.526202235e-06f, 1.520750526e-06f,
-1.515296936e-06f, 1.509841476e-06f, 1.504384154e-06f, 1.498924982e-06f, 1.493463968e-06f, 1.488001122e-06f, 1.482536454e-06f, 1.477069974e-06f, 1.471601691e-06f, 1.466131616e-06f,
-1.460659757e-06f, 1.455186125e-06f, 1.449710730e-06f, 1.444233580e-06f, 1.438754686e-06f, 1.433274058e-06f, 1.427791706e-06f, 1.422307638e-06f, 1.416821865e-06f, 1.411334397e-06f,
-1.405845243e-06f, 1.400354413e-06f, 1.394861917e-06f, 1.389367764e-06f, 1.383871965e-06f, 1.378374529e-06f, 1.372875466e-06f, 1.367374786e-06f, 1.361872497e-06f, 1.356368611e-06f,
-1.350863137e-06f, 1.345356085e-06f, 1.339847464e-06f, 1.334337285e-06f, 1.328825556e-06f, 1.323312288e-06f, 1.317797491e-06f, 1.312281174e-06f, 1.306763347e-06f, 1.301244020e-06f,
-1.295723202e-06f, 1.290200904e-06f, 1.284677135e-06f, 1.279151906e-06f, 1.273625225e-06f, 1.268097102e-06f, 1.262567548e-06f, 1.257036572e-06f, 1.251504184e-06f, 1.245970394e-06f,
-1.240435211e-06f, 1.234898646e-06f, 1.229360708e-06f, 1.223821406e-06f, 1.218280751e-06f, 1.212738753e-06f, 1.207195421e-06f, 1.201650765e-06f, 1.196104795e-06f, 1.190557521e-06f,
-1.185008952e-06f, 1.179459098e-06f, 1.173907970e-06f, 1.168355576e-06f, 1.162801927e-06f, 1.157247033e-06f, 1.151690902e-06f, 1.146133546e-06f, 1.140574974e-06f, 1.135015196e-06f,
-1.129454221e-06f, 1.123892059e-06f, 1.118328721e-06f, 1.112764215e-06f, 1.107198552e-06f, 1.101631742e-06f, 1.096063794e-06f, 1.090494719e-06f, 1.084924525e-06f, 1.079353224e-06f,
-1.073780824e-06f, 1.068207335e-06f, 1.062632768e-06f, 1.057057132e-06f, 1.051480436e-06f, 1.045902692e-06f, 1.040323908e-06f, 1.034744094e-06f, 1.029163261e-06f, 1.023581417e-06f,
-1.017998574e-06f, 1.012414740e-06f, 1.006829926e-06f, 1.001244140e-06f, 9.956573943e-07f, 9.900696972e-07f, 9.844810589e-07f, 9.788914891e-07f, 9.733009977e-07f, 9.677095946e-07f,
-9.621172895e-07f, 9.565240922e-07f, 9.509300127e-07f, 9.453350607e-07f, 9.397392460e-07f, 9.341425785e-07f, 9.285450679e-07f, 9.229467242e-07f, 9.173475571e-07f, 9.117475765e-07f,
-9.061467922e-07f, 9.005452139e-07f, 8.949428516e-07f, 8.893397151e-07f, 8.837358141e-07f, 8.781311586e-07f, 8.725257583e-07f, 8.669196230e-07f, 8.613127626e-07f, 8.557051869e-07f,
-8.500969057e-07f, 8.444879289e-07f, 8.388782662e-07f, 8.332679276e-07f, 8.276569228e-07f, 8.220452616e-07f, 8.164329538e-07f, 8.108200094e-07f, 8.052064380e-07f, 7.995922496e-07f,
-7.939774540e-07f, 7.883620609e-07f, 7.827460802e-07f, 7.771295217e-07f, 7.715123953e-07f, 7.658947107e-07f, 7.602764778e-07f, 7.546577064e-07f, 7.490384063e-07f, 7.434185873e-07f,
-7.377982592e-07f, 7.321774320e-07f, 7.265561153e-07f, 7.209343190e-07f, 7.153120530e-07f, 7.096893269e-07f, 7.040661507e-07f, 6.984425342e-07f, 6.928184871e-07f, 6.871940193e-07f,
-6.815691407e-07f, 6.759438609e-07f, 6.703181898e-07f, 6.646921373e-07f, 6.590657131e-07f, 6.534389271e-07f, 6.478117890e-07f, 6.421843087e-07f, 6.365564959e-07f, 6.309283606e-07f,
-6.252999124e-07f, 6.196711612e-07f, 6.140421168e-07f, 6.084127889e-07f, 6.027831875e-07f, 5.971533223e-07f, 5.915232030e-07f, 5.858928396e-07f, 5.802622417e-07f, 5.746314192e-07f,
-5.690003819e-07f, 5.633691396e-07f, 5.577377021e-07f, 5.521060791e-07f, 5.464742805e-07f, 5.408423160e-07f, 5.352101955e-07f, 5.295779287e-07f, 5.239455254e-07f, 5.183129954e-07f,
-5.126803485e-07f, 5.070475945e-07f, 5.014147432e-07f, 4.957818042e-07f, 4.901487875e-07f, 4.845157028e-07f, 4.788825599e-07f, 4.732493685e-07f, 4.676161385e-07f, 4.619828795e-07f,
-4.563496014e-07f, 4.507163140e-07f, 4.450830270e-07f, 4.394497502e-07f, 4.338164933e-07f, 4.281832662e-07f, 4.225500786e-07f, 4.169169402e-07f, 4.112838608e-07f, 4.056508502e-07f,
-4.000179181e-07f, 3.943850743e-07f, 3.887523286e-07f, 3.831196907e-07f, 3.774871703e-07f, 3.718547772e-07f, 3.662225212e-07f, 3.605904120e-07f, 3.549584593e-07f, 3.493266730e-07f,
-3.436950627e-07f, 3.380636381e-07f, 3.324324091e-07f, 3.268013854e-07f, 3.211705767e-07f, 3.155399927e-07f, 3.099096431e-07f, 3.042795378e-07f, 2.986496864e-07f, 2.930200986e-07f,
-2.873907842e-07f, 2.817617530e-07f, 2.761330146e-07f, 2.705045787e-07f, 2.648764551e-07f, 2.592486535e-07f, 2.536211835e-07f, 2.479940550e-07f, 2.423672777e-07f, 2.367408611e-07f,
-2.311148152e-07f, 2.254891494e-07f, 2.198638736e-07f, 2.142389975e-07f, 2.086145307e-07f, 2.029904830e-07f, 1.973668640e-07f, 1.917436835e-07f, 1.861209511e-07f, 1.804986765e-07f,
-1.748768694e-07f, 1.692555395e-07f, 1.636346964e-07f, 1.580143500e-07f, 1.523945097e-07f, 1.467751854e-07f, 1.411563866e-07f, 1.355381231e-07f, 1.299204045e-07f, 1.243032405e-07f,
-1.186866408e-07f, 1.130706150e-07f, 1.074551727e-07f, 1.018403237e-07f, 9.622607753e-08f, 9.061244392e-08f, 8.499943250e-08f, 7.938705292e-08f, 7.377531482e-08f, 6.816422785e-08f,
-6.255380164e-08f, 5.694404583e-08f, 5.133497006e-08f, 4.572658397e-08f, 4.011889717e-08f, 3.451191931e-08f, 2.890566000e-08f, 2.330012887e-08f, 1.769533554e-08f, 1.209128962e-08f,
-6.488000734e-09f, 8.854784917e-10f, -4.716267498e-09f, -1.031722763e-08f, -1.591739230e-08f, -2.151675190e-08f, -2.711529683e-08f, -3.271301751e-08f, -3.830990433e-08f, -4.390594771e-08f,
--4.950113806e-08f, -5.509546580e-08f, -6.068892133e-08f, -6.628149508e-08f, -7.187317749e-08f, -7.746395896e-08f, -8.305382994e-08f, -8.864278085e-08f, -9.423080212e-08f, -9.981788421e-08f,
--1.054040175e-07f, -1.109891926e-07f, -1.165733997e-07f, -1.221566295e-07f, -1.277388723e-07f, -1.333201186e-07f, -1.389003589e-07f, -1.444795835e-07f, -1.500577831e-07f, -1.556349480e-07f,
--1.612110688e-07f, -1.667861358e-07f, -1.723601396e-07f, -1.779330707e-07f, -1.835049196e-07f, -1.890756766e-07f, -1.946453324e-07f, -2.002138774e-07f, -2.057813021e-07f, -2.113475970e-07f,
--2.169127527e-07f, -2.224767595e-07f, -2.280396081e-07f, -2.336012890e-07f, -2.391617926e-07f, -2.447211095e-07f, -2.502792302e-07f, -2.558361452e-07f, -2.613918451e-07f, -2.669463204e-07f,
--2.724995617e-07f, -2.780515594e-07f, -2.836023042e-07f, -2.891517865e-07f, -2.946999969e-07f, -3.002469260e-07f, -3.057925644e-07f, -3.113369025e-07f, -3.168799310e-07f, -3.224216404e-07f,
--3.279620214e-07f, -3.335010644e-07f, -3.390387601e-07f, -3.445750990e-07f, -3.501100717e-07f, -3.556436689e-07f, -3.611758811e-07f, -3.667066989e-07f, -3.722361129e-07f, -3.777641137e-07f,
--3.832906920e-07f, -3.888158383e-07f, -3.943395432e-07f, -3.998617975e-07f, -4.053825916e-07f, -4.109019163e-07f, -4.164197622e-07f, -4.219361198e-07f, -4.274509799e-07f, -4.329643331e-07f,
--4.384761700e-07f, -4.439864813e-07f, -4.494952577e-07f, -4.550024897e-07f, -4.605081682e-07f, -4.660122836e-07f, -4.715148268e-07f, -4.770157883e-07f, -4.825151589e-07f, -4.880129292e-07f,
--4.935090900e-07f, -4.990036319e-07f, -5.044965456e-07f, -5.099878218e-07f, -5.154774513e-07f, -5.209654247e-07f, -5.264517327e-07f, -5.319363661e-07f, -5.374193156e-07f, -5.429005719e-07f,
--5.483801257e-07f, -5.538579678e-07f, -5.593340890e-07f, -5.648084798e-07f, -5.702811312e-07f, -5.757520338e-07f, -5.812211784e-07f, -5.866885558e-07f, -5.921541567e-07f, -5.976179719e-07f,
--6.030799921e-07f, -6.085402083e-07f, -6.139986110e-07f, -6.194551911e-07f, -6.249099395e-07f, -6.303628469e-07f, -6.358139040e-07f, -6.412631017e-07f, -6.467104309e-07f, -6.521558823e-07f,
--6.575994467e-07f, -6.630411150e-07f, -6.684808779e-07f, -6.739187264e-07f, -6.793546512e-07f, -6.847886432e-07f, -6.902206933e-07f, -6.956507922e-07f, -7.010789309e-07f, -7.065051002e-07f,
--7.119292909e-07f, -7.173514940e-07f, -7.227717003e-07f, -7.281899007e-07f, -7.336060860e-07f, -7.390202471e-07f, -7.444323751e-07f, -7.498424606e-07f, -7.552504947e-07f, -7.606564682e-07f,
--7.660603721e-07f, -7.714621973e-07f, -7.768619347e-07f, -7.822595752e-07f, -7.876551097e-07f, -7.930485292e-07f, -7.984398247e-07f, -8.038289870e-07f, -8.092160071e-07f, -8.146008761e-07f,
--8.199835847e-07f, -8.253641241e-07f, -8.307424851e-07f, -8.361186588e-07f, -8.414926361e-07f, -8.468644080e-07f, -8.522339656e-07f, -8.576012997e-07f, -8.629664014e-07f, -8.683292618e-07f,
--8.736898718e-07f, -8.790482223e-07f, -8.844043046e-07f, -8.897581095e-07f, -8.951096282e-07f, -9.004588516e-07f, -9.058057708e-07f, -9.111503768e-07f, -9.164926608e-07f, -9.218326137e-07f,
--9.271702266e-07f, -9.325054905e-07f, -9.378383967e-07f, -9.431689361e-07f, -9.484970998e-07f, -9.538228789e-07f, -9.591462645e-07f, -9.644672477e-07f, -9.697858196e-07f, -9.751019714e-07f,
--9.804156941e-07f, -9.857269789e-07f, -9.910358168e-07f, -9.963421991e-07f, -1.001646117e-06f, -1.006947561e-06f, -1.012246523e-06f, -1.017542994e-06f, -1.022836965e-06f, -1.028128428e-06f,
--1.033417373e-06f, -1.038703791e-06f, -1.043987674e-06f, -1.049269013e-06f, -1.054547799e-06f, -1.059824024e-06f, -1.065097678e-06f, -1.070368753e-06f, -1.075637240e-06f, -1.080903130e-06f,
--1.086166415e-06f, -1.091427085e-06f, -1.096685132e-06f, -1.101940548e-06f, -1.107193322e-06f, -1.112443448e-06f, -1.117690915e-06f, -1.122935716e-06f, -1.128177841e-06f, -1.133417282e-06f,
--1.138654030e-06f, -1.143888076e-06f, -1.149119412e-06f, -1.154348029e-06f, -1.159573918e-06f, -1.164797070e-06f, -1.170017478e-06f, -1.175235132e-06f, -1.180450023e-06f, -1.185662143e-06f,
--1.190871484e-06f, -1.196078036e-06f, -1.201281791e-06f, -1.206482740e-06f, -1.211680875e-06f, -1.216876187e-06f, -1.222068668e-06f, -1.227258308e-06f, -1.232445100e-06f, -1.237629034e-06f,
--1.242810102e-06f, -1.247988296e-06f, -1.253163607e-06f, -1.258336025e-06f, -1.263505544e-06f, -1.268672154e-06f, -1.273835846e-06f, -1.278996613e-06f, -1.284154445e-06f, -1.289309334e-06f,
--1.294461271e-06f, -1.299610249e-06f, -1.304756257e-06f, -1.309899289e-06f, -1.315039335e-06f, -1.320176387e-06f, -1.325310436e-06f, -1.330441475e-06f, -1.335569494e-06f, -1.340694484e-06f,
--1.345816438e-06f, -1.350935348e-06f, -1.356051203e-06f, -1.361163997e-06f, -1.366273721e-06f, -1.371380366e-06f, -1.376483924e-06f, -1.381584386e-06f, -1.386681744e-06f, -1.391775990e-06f,
--1.396867115e-06f, -1.401955110e-06f, -1.407039968e-06f, -1.412121681e-06f, -1.417200238e-06f, -1.422275633e-06f, -1.427347857e-06f, -1.432416902e-06f, -1.437482759e-06f, -1.442545419e-06f,
--1.447604875e-06f, -1.452661119e-06f, -1.457714141e-06f, -1.462763934e-06f, -1.467810489e-06f, -1.472853798e-06f, -1.477893853e-06f, -1.482930645e-06f, -1.487964166e-06f, -1.492994408e-06f,
--1.498021362e-06f, -1.503045021e-06f, -1.508065376e-06f, -1.513082419e-06f, -1.518096141e-06f, -1.523106535e-06f, -1.528113591e-06f, -1.533117303e-06f, -1.538117661e-06f, -1.543114657e-06f,
--1.548108284e-06f, -1.553098533e-06f, -1.558085396e-06f, -1.563068865e-06f, -1.568048931e-06f, -1.573025586e-06f, -1.577998823e-06f, -1.582968633e-06f, -1.587935007e-06f, -1.592897939e-06f,
--1.597857419e-06f, -1.602813439e-06f, -1.607765992e-06f, -1.612715070e-06f, -1.617660663e-06f, -1.622602765e-06f, -1.627541367e-06f, -1.632476461e-06f, -1.637408038e-06f, -1.642336092e-06f,
--1.647260613e-06f, -1.652181594e-06f, -1.657099027e-06f, -1.662012903e-06f, -1.666923215e-06f, -1.671829955e-06f, -1.676733114e-06f, -1.681632685e-06f, -1.686528659e-06f, -1.691421029e-06f,
--1.696309787e-06f, -1.701194924e-06f, -1.706076433e-06f, -1.710954305e-06f, -1.715828534e-06f, -1.720699110e-06f, -1.725566026e-06f, -1.730429274e-06f, -1.735288846e-06f, -1.740144734e-06f,
--1.744996931e-06f, -1.749845427e-06f, -1.754690216e-06f, -1.759531290e-06f, -1.764368640e-06f, -1.769202259e-06f, -1.774032139e-06f, -1.778858272e-06f, -1.783680650e-06f, -1.788499266e-06f,
--1.793314111e-06f, -1.798125177e-06f, -1.802932458e-06f, -1.807735945e-06f, -1.812535630e-06f, -1.817331505e-06f, -1.822123563e-06f, -1.826911796e-06f, -1.831696196e-06f, -1.836476756e-06f,
--1.841253467e-06f, -1.846026322e-06f, -1.850795314e-06f, -1.855560433e-06f, -1.860321673e-06f, -1.865079027e-06f, -1.869832485e-06f, -1.874582041e-06f, -1.879327687e-06f, -1.884069415e-06f,
--1.888807218e-06f, -1.893541087e-06f, -1.898271016e-06f, -1.902996996e-06f, -1.907719019e-06f, -1.912437080e-06f, -1.917151168e-06f, -1.921861278e-06f, -1.926567401e-06f, -1.931269530e-06f,
--1.935967657e-06f, -1.940661774e-06f, -1.945351875e-06f, -1.950037951e-06f, -1.954719994e-06f, -1.959397998e-06f, -1.964071955e-06f, -1.968741857e-06f, -1.973407696e-06f, -1.978069466e-06f,
--1.982727158e-06f, -1.987380766e-06f, -1.992030281e-06f, -1.996675696e-06f, -2.001317003e-06f, -2.005954196e-06f, -2.010587267e-06f, -2.015216207e-06f, -2.019841011e-06f, -2.024461669e-06f,
--2.029078176e-06f, -2.033690523e-06f, -2.038298703e-06f, -2.042902709e-06f, -2.047502533e-06f, -2.052098168e-06f, -2.056689606e-06f, -2.061276840e-06f, -2.065859863e-06f, -2.070438667e-06f,
--2.075013246e-06f, -2.079583590e-06f, -2.084149695e-06f, -2.088711551e-06f, -2.093269151e-06f, -2.097822490e-06f, -2.102371558e-06f, -2.106916349e-06f, -2.111456855e-06f, -2.115993069e-06f,
--2.120524985e-06f, -2.125052594e-06f, -2.129575889e-06f, -2.134094864e-06f, -2.138609510e-06f, -2.143119821e-06f, -2.147625790e-06f, -2.152127409e-06f, -2.156624670e-06f, -2.161117568e-06f,
--2.165606095e-06f, -2.170090243e-06f, -2.174570005e-06f, -2.179045374e-06f, -2.183516344e-06f, -2.187982906e-06f, -2.192445054e-06f, -2.196902781e-06f, -2.201356079e-06f, -2.205804942e-06f,
--2.210249362e-06f, -2.214689332e-06f, -2.219124846e-06f, -2.223555895e-06f, -2.227982474e-06f, -2.232404574e-06f, -2.236822189e-06f, -2.241235313e-06f, -2.245643937e-06f, -2.250048055e-06f,
--2.254447659e-06f, -2.258842744e-06f, -2.263233301e-06f, -2.267619325e-06f, -2.272000807e-06f, -2.276377741e-06f, -2.280750120e-06f, -2.285117936e-06f, -2.289481184e-06f, -2.293839857e-06f,
--2.298193946e-06f, -2.302543446e-06f, -2.306888349e-06f, -2.311228648e-06f, -2.315564337e-06f, -2.319895409e-06f, -2.324221857e-06f, -2.328543673e-06f, -2.332860852e-06f, -2.337173387e-06f,
--2.341481269e-06f, -2.345784494e-06f, -2.350083053e-06f, -2.354376940e-06f, -2.358666149e-06f, -2.362950672e-06f, -2.367230502e-06f, -2.371505634e-06f, -2.375776060e-06f, -2.380041773e-06f,
--2.384302767e-06f, -2.388559034e-06f, -2.392810569e-06f, -2.397057365e-06f, -2.401299414e-06f, -2.405536710e-06f, -2.409769247e-06f, -2.413997018e-06f, -2.418220015e-06f, -2.422438233e-06f,
--2.426651665e-06f, -2.430860304e-06f, -2.435064143e-06f, -2.439263177e-06f, -2.443457397e-06f, -2.447646798e-06f, -2.451831374e-06f, -2.456011116e-06f, -2.460186020e-06f, -2.464356078e-06f,
--2.468521284e-06f, -2.472681631e-06f, -2.476837112e-06f, -2.480987722e-06f, -2.485133453e-06f, -2.489274300e-06f, -2.493410255e-06f, -2.497541313e-06f, -2.501667466e-06f, -2.505788708e-06f,
--2.509905033e-06f, -2.514016434e-06f, -2.518122905e-06f, -2.522224440e-06f, -2.526321031e-06f, -2.530412674e-06f, -2.534499360e-06f, -2.538581084e-06f, -2.542657839e-06f, -2.546729619e-06f,
--2.550796418e-06f, -2.554858230e-06f, -2.558915047e-06f, -2.562966863e-06f, -2.567013673e-06f, -2.571055470e-06f, -2.575092248e-06f, -2.579124000e-06f, -2.583150720e-06f, -2.587172401e-06f,
--2.591189038e-06f, -2.595200625e-06f, -2.599207154e-06f, -2.603208620e-06f, -2.607205016e-06f, -2.611196337e-06f, -2.615182576e-06f, -2.619163727e-06f, -2.623139783e-06f, -2.627110739e-06f,
--2.631076588e-06f, -2.635037324e-06f, -2.638992941e-06f, -2.642943433e-06f, -2.646888794e-06f, -2.650829017e-06f, -2.654764096e-06f, -2.658694026e-06f, -2.662618801e-06f, -2.666538413e-06f,
--2.670452857e-06f, -2.674362128e-06f, -2.678266218e-06f, -2.682165122e-06f, -2.686058834e-06f, -2.689947348e-06f, -2.693830658e-06f, -2.697708758e-06f, -2.701581641e-06f, -2.705449302e-06f,
--2.709311735e-06f, -2.713168934e-06f, -2.717020893e-06f, -2.720867606e-06f, -2.724709066e-06f, -2.728545269e-06f, -2.732376208e-06f, -2.736201878e-06f, -2.740022271e-06f, -2.743837383e-06f,
--2.747647208e-06f, -2.751451740e-06f, -2.755250972e-06f, -2.759044899e-06f, -2.762833516e-06f, -2.766616815e-06f, -2.770394793e-06f, -2.774167442e-06f, -2.777934757e-06f, -2.781696732e-06f,
--2.785453362e-06f, -2.789204640e-06f, -2.792950560e-06f, -2.796691118e-06f, -2.800426308e-06f, -2.804156123e-06f, -2.807880557e-06f, -2.811599606e-06f, -2.815313264e-06f, -2.819021524e-06f,
--2.822724381e-06f, -2.826421830e-06f, -2.830113865e-06f, -2.833800479e-06f, -2.837481669e-06f, -2.841157427e-06f, -2.844827748e-06f, -2.848492627e-06f, -2.852152058e-06f, -2.855806036e-06f,
--2.859454554e-06f, -2.863097608e-06f, -2.866735191e-06f, -2.870367299e-06f, -2.873993925e-06f, -2.877615065e-06f, -2.881230712e-06f, -2.884840862e-06f, -2.888445508e-06f, -2.892044645e-06f,
--2.895638268e-06f, -2.899226371e-06f, -2.902808949e-06f, -2.906385997e-06f, -2.909957508e-06f, -2.913523477e-06f, -2.917083900e-06f, -2.920638771e-06f, -2.924188084e-06f, -2.927731833e-06f,
--2.931270014e-06f, -2.934802622e-06f, -2.938329650e-06f, -2.941851094e-06f, -2.945366948e-06f, -2.948877207e-06f, -2.952381865e-06f, -2.955880917e-06f, -2.959374359e-06f, -2.962862184e-06f,
--2.966344388e-06f, -2.969820965e-06f, -2.973291909e-06f, -2.976757217e-06f, -2.980216882e-06f, -2.983670899e-06f, -2.987119263e-06f, -2.990561969e-06f, -2.993999012e-06f, -2.997430386e-06f,
--3.000856087e-06f, -3.004276109e-06f, -3.007690446e-06f, -3.011099095e-06f, -3.014502050e-06f, -3.017899305e-06f, -3.021290856e-06f, -3.024676698e-06f, -3.028056825e-06f, -3.031431232e-06f,
--3.034799915e-06f, -3.038162868e-06f, -3.041520086e-06f, -3.044871565e-06f, -3.048217298e-06f, -3.051557282e-06f, -3.054891512e-06f, -3.058219981e-06f, -3.061542686e-06f, -3.064859621e-06f,
--3.068170782e-06f, -3.071476163e-06f, -3.074775759e-06f, -3.078069566e-06f, -3.081357579e-06f, -3.084639793e-06f, -3.087916202e-06f, -3.091186803e-06f, -3.094451590e-06f, -3.097710558e-06f,
--3.100963703e-06f, -3.104211019e-06f, -3.107452503e-06f, -3.110688148e-06f, -3.113917951e-06f, -3.117141906e-06f, -3.120360009e-06f, -3.123572255e-06f, -3.126778639e-06f, -3.129979156e-06f,
--3.133173802e-06f, -3.136362572e-06f, -3.139545462e-06f, -3.142722466e-06f, -3.145893580e-06f, -3.149058799e-06f, -3.152218118e-06f, -3.155371534e-06f, -3.158519041e-06f, -3.161660634e-06f,
--3.164796310e-06f, -3.167926063e-06f, -3.171049888e-06f, -3.174167782e-06f, -3.177279740e-06f, -3.180385756e-06f, -3.183485827e-06f, -3.186579948e-06f, -3.189668115e-06f, -3.192750322e-06f,
--3.195826566e-06f, -3.198896841e-06f, -3.201961144e-06f, -3.205019470e-06f, -3.208071815e-06f, -3.211118173e-06f, -3.214158541e-06f, -3.217192914e-06f, -3.220221287e-06f, -3.223243657e-06f,
--3.226260019e-06f, -3.229270368e-06f, -3.232274701e-06f, -3.235273012e-06f, -3.238265297e-06f, -3.241251552e-06f, -3.244231773e-06f, -3.247205956e-06f, -3.250174095e-06f, -3.253136187e-06f,
--3.256092228e-06f, -3.259042213e-06f, -3.261986137e-06f, -3.264923998e-06f, -3.267855789e-06f, -3.270781508e-06f, -3.273701150e-06f, -3.276614710e-06f, -3.279522185e-06f, -3.282423571e-06f,
--3.285318862e-06f, -3.288208055e-06f, -3.291091147e-06f, -3.293968131e-06f, -3.296839006e-06f, -3.299703765e-06f, -3.302562406e-06f, -3.305414925e-06f, -3.308261316e-06f, -3.311101576e-06f,
--3.313935701e-06f, -3.316763687e-06f, -3.319585530e-06f, -3.322401226e-06f, -3.325210771e-06f, -3.328014160e-06f, -3.330811390e-06f, -3.333602457e-06f, -3.336387356e-06f, -3.339166085e-06f,
--3.341938638e-06f, -3.344705012e-06f, -3.347465203e-06f, -3.350219207e-06f, -3.352967021e-06f, -3.355708640e-06f, -3.358444060e-06f, -3.361173277e-06f, -3.363896288e-06f, -3.366613089e-06f,
--3.369323676e-06f, -3.372028045e-06f, -3.374726192e-06f, -3.377418113e-06f, -3.380103806e-06f, -3.382783265e-06f, -3.385456487e-06f, -3.388123469e-06f, -3.390784206e-06f, -3.393438695e-06f,
--3.396086932e-06f, -3.398728914e-06f, -3.401364636e-06f, -3.403994095e-06f, -3.406617287e-06f, -3.409234210e-06f, -3.411844858e-06f, -3.414449228e-06f, -3.417047317e-06f, -3.419639121e-06f,
--3.422224637e-06f, -3.424803860e-06f, -3.427376788e-06f, -3.429943416e-06f, -3.432503742e-06f, -3.435057761e-06f, -3.437605469e-06f, -3.440146865e-06f, -3.442681943e-06f, -3.445210701e-06f,
--3.447733134e-06f, -3.450249240e-06f, -3.452759015e-06f, -3.455262456e-06f, -3.457759558e-06f, -3.460250319e-06f, -3.462734735e-06f, -3.465212803e-06f, -3.467684519e-06f, -3.470149880e-06f,
--3.472608882e-06f, -3.475061523e-06f, -3.477507798e-06f, -3.479947705e-06f, -3.482381240e-06f, -3.484808400e-06f, -3.487229181e-06f, -3.489643580e-06f, -3.492051595e-06f, -3.494453220e-06f,
--3.496848454e-06f, -3.499237293e-06f, -3.501619734e-06f, -3.503995773e-06f, -3.506365408e-06f, -3.508728634e-06f, -3.511085450e-06f, -3.513435851e-06f, -3.515779835e-06f, -3.518117398e-06f,
--3.520448538e-06f, -3.522773250e-06f, -3.525091533e-06f, -3.527403382e-06f, -3.529708795e-06f, -3.532007768e-06f, -3.534300299e-06f, -3.536586384e-06f, -3.538866021e-06f, -3.541139206e-06f,
--3.543405937e-06f, -3.545666209e-06f, -3.547920021e-06f, -3.550167369e-06f, -3.552408251e-06f, -3.554642662e-06f, -3.556870601e-06f, -3.559092064e-06f, -3.561307049e-06f, -3.563515552e-06f,
--3.565717571e-06f, -3.567913102e-06f, -3.570102143e-06f, -3.572284690e-06f, -3.574460742e-06f, -3.576630295e-06f, -3.578793346e-06f, -3.580949892e-06f, -3.583099931e-06f, -3.585243460e-06f,
--3.587380475e-06f, -3.589510975e-06f, -3.591634956e-06f, -3.593752416e-06f, -3.595863351e-06f, -3.597967760e-06f, -3.600065639e-06f, -3.602156985e-06f, -3.604241797e-06f, -3.606320070e-06f,
--3.608391804e-06f, -3.610456994e-06f, -3.612515638e-06f, -3.614567733e-06f, -3.616613278e-06f, -3.618652269e-06f, -3.620684703e-06f, -3.622710578e-06f, -3.624729892e-06f, -3.626742642e-06f,
--3.628748825e-06f, -3.630748438e-06f, -3.632741480e-06f, -3.634727948e-06f, -3.636707838e-06f, -3.638681149e-06f, -3.640647878e-06f, -3.642608023e-06f, -3.644561581e-06f, -3.646508549e-06f,
--3.648448926e-06f, -3.650382708e-06f, -3.652309894e-06f, -3.654230481e-06f, -3.656144466e-06f, -3.658051847e-06f, -3.659952622e-06f, -3.661846788e-06f, -3.663734343e-06f, -3.665615285e-06f,
--3.667489611e-06f, -3.669357320e-06f, -3.671218407e-06f, -3.673072872e-06f, -3.674920713e-06f, -3.676761926e-06f, -3.678596509e-06f, -3.680424461e-06f, -3.682245779e-06f, -3.684060460e-06f,
--3.685868504e-06f, -3.687669906e-06f, -3.689464666e-06f, -3.691252781e-06f, -3.693034248e-06f, -3.694809067e-06f, -3.696577233e-06f, -3.698338746e-06f, -3.700093604e-06f, -3.701841803e-06f,
--3.703583343e-06f, -3.705318221e-06f, -3.707046434e-06f, -3.708767981e-06f, -3.710482861e-06f, -3.712191069e-06f, -3.713892606e-06f, -3.715587468e-06f, -3.717275654e-06f, -3.718957161e-06f,
--3.720631989e-06f, -3.722300134e-06f, -3.723961594e-06f, -3.725616369e-06f, -3.727264456e-06f, -3.728905852e-06f, -3.730540557e-06f, -3.732168567e-06f, -3.733789882e-06f, -3.735404500e-06f,
--3.737012418e-06f, -3.738613634e-06f, -3.740208148e-06f, -3.741795956e-06f, -3.743377058e-06f, -3.744951451e-06f, -3.746519134e-06f, -3.748080105e-06f, -3.749634362e-06f, -3.751181903e-06f,
--3.752722726e-06f, -3.754256831e-06f, -3.755784214e-06f, -3.757304875e-06f, -3.758818812e-06f, -3.760326023e-06f, -3.761826506e-06f, -3.763320260e-06f, -3.764807283e-06f, -3.766287573e-06f,
--3.767761130e-06f, -3.769227950e-06f, -3.770688033e-06f, -3.772141377e-06f, -3.773587980e-06f, -3.775027841e-06f, -3.776460959e-06f, -3.777887331e-06f, -3.779306957e-06f, -3.780719834e-06f,
--3.782125961e-06f, -3.783525338e-06f, -3.784917961e-06f, -3.786303830e-06f, -3.787682944e-06f, -3.789055300e-06f, -3.790420898e-06f, -3.791779736e-06f, -3.793131812e-06f, -3.794477126e-06f,
--3.795815675e-06f, -3.797147459e-06f, -3.798472476e-06f, -3.799790725e-06f, -3.801102204e-06f, -3.802406912e-06f, -3.803704848e-06f, -3.804996011e-06f, -3.806280398e-06f, -3.807558010e-06f,
--3.808828844e-06f, -3.810092899e-06f, -3.811350175e-06f, -3.812600669e-06f, -3.813844381e-06f, -3.815081310e-06f, -3.816311454e-06f, -3.817534812e-06f, -3.818751383e-06f, -3.819961165e-06f,
--3.821164159e-06f, -3.822360361e-06f, -3.823549772e-06f, -3.824732391e-06f, -3.825908215e-06f, -3.827077245e-06f, -3.828239478e-06f, -3.829394915e-06f, -3.830543553e-06f, -3.831685392e-06f,
--3.832820431e-06f, -3.833948669e-06f, -3.835070104e-06f, -3.836184737e-06f, -3.837292565e-06f, -3.838393588e-06f, -3.839487804e-06f, -3.840575214e-06f, -3.841655816e-06f, -3.842729609e-06f,
--3.843796592e-06f, -3.844856764e-06f, -3.845910125e-06f, -3.846956673e-06f, -3.847996408e-06f, -3.849029329e-06f, -3.850055435e-06f, -3.851074725e-06f, -3.852087198e-06f, -3.853092854e-06f,
--3.854091691e-06f, -3.855083710e-06f, -3.856068909e-06f, -3.857047287e-06f, -3.858018844e-06f, -3.858983579e-06f, -3.859941491e-06f, -3.860892580e-06f, -3.861836845e-06f, -3.862774285e-06f,
--3.863704899e-06f, -3.864628688e-06f, -3.865545649e-06f, -3.866455783e-06f, -3.867359089e-06f, -3.868255567e-06f, -3.869145215e-06f, -3.870028034e-06f, -3.870904022e-06f, -3.871773179e-06f,
--3.872635504e-06f, -3.873490998e-06f, -3.874339659e-06f, -3.875181487e-06f, -3.876016481e-06f, -3.876844642e-06f, -3.877665967e-06f, -3.878480458e-06f, -3.879288113e-06f, -3.880088933e-06f,
--3.880882916e-06f, -3.881670062e-06f, -3.882450371e-06f, -3.883223843e-06f, -3.883990476e-06f, -3.884750272e-06f, -3.885503228e-06f, -3.886249346e-06f, -3.886988624e-06f, -3.887721062e-06f,
--3.888446661e-06f, -3.889165419e-06f, -3.889877337e-06f, -3.890582414e-06f, -3.891280650e-06f, -3.891972044e-06f, -3.892656597e-06f, -3.893334308e-06f, -3.894005176e-06f, -3.894669203e-06f,
--3.895326387e-06f, -3.895976729e-06f, -3.896620228e-06f, -3.897256883e-06f, -3.897886696e-06f, -3.898509666e-06f, -3.899125792e-06f, -3.899735074e-06f, -3.900337514e-06f, -3.900933109e-06f,
--3.901521861e-06f, -3.902103769e-06f, -3.902678833e-06f, -3.903247053e-06f, -3.903808430e-06f, -3.904362962e-06f, -3.904910651e-06f, -3.905451496e-06f, -3.905985497e-06f, -3.906512654e-06f,
--3.907032967e-06f, -3.907546436e-06f, -3.908053062e-06f, -3.908552845e-06f, -3.909045783e-06f, -3.909531879e-06f, -3.910011131e-06f, -3.910483540e-06f, -3.910949106e-06f, -3.911407829e-06f,
--3.911859710e-06f, -3.912304748e-06f, -3.912742944e-06f, -3.913174297e-06f, -3.913598809e-06f, -3.914016479e-06f, -3.914427308e-06f, -3.914831295e-06f, -3.915228441e-06f, -3.915618747e-06f,
--3.916002213e-06f, -3.916378838e-06f, -3.916748623e-06f, -3.917111569e-06f, -3.917467676e-06f, -3.917816945e-06f, -3.918159374e-06f, -3.918494966e-06f, -3.918823720e-06f, -3.919145637e-06f,
--3.919460716e-06f, -3.919768960e-06f, -3.920070367e-06f, -3.920364938e-06f, -3.920652675e-06f, -3.920933576e-06f, -3.921207644e-06f, -3.921474877e-06f, -3.921735278e-06f, -3.921988845e-06f,
--3.922235581e-06f, -3.922475485e-06f, -3.922708557e-06f, -3.922934799e-06f, -3.923154211e-06f, -3.923366793e-06f, -3.923572547e-06f, -3.923771472e-06f, -3.923963569e-06f, -3.924148840e-06f,
--3.924327284e-06f, -3.924498902e-06f, -3.924663696e-06f, -3.924821665e-06f, -3.924972810e-06f, -3.925117132e-06f, -3.925254631e-06f, -3.925385310e-06f, -3.925509167e-06f, -3.925626204e-06f,
--3.925736422e-06f, -3.925839821e-06f, -3.925936402e-06f, -3.926026166e-06f, -3.926109114e-06f, -3.926185246e-06f, -3.926254564e-06f, -3.926317068e-06f, -3.926372760e-06f, -3.926421639e-06f,
--3.926463706e-06f, -3.926498964e-06f, -3.926527412e-06f, -3.926549052e-06f, -3.926563884e-06f, -3.926571909e-06f, -3.926573129e-06f, -3.926567544e-06f, -3.926555155e-06f, -3.926535963e-06f,
--3.926509969e-06f, -3.926477175e-06f, -3.926437581e-06f, -3.926391188e-06f, -3.926337997e-06f, -3.926278009e-06f, -3.926211226e-06f, -3.926137648e-06f, -3.926057277e-06f, -3.925970113e-06f,
--3.925876158e-06f, -3.925775412e-06f, -3.925667878e-06f, -3.925553556e-06f, -3.925432447e-06f, -3.925304552e-06f, -3.925169873e-06f, -3.925028410e-06f, -3.924880166e-06f, -3.924725141e-06f,
--3.924563336e-06f, -3.924394752e-06f, -3.924219392e-06f, -3.924037255e-06f, -3.923848344e-06f, -3.923652660e-06f, -3.923450204e-06f, -3.923240976e-06f, -3.923024980e-06f, -3.922802215e-06f,
--3.922572683e-06f, -3.922336387e-06f, -3.922093325e-06f, -3.921843502e-06f, -3.921586917e-06f, -3.921323572e-06f, -3.921053468e-06f, -3.920776608e-06f, -3.920492991e-06f, -3.920202621e-06f,
--3.919905498e-06f, -3.919601623e-06f, -3.919290999e-06f, -3.918973626e-06f, -3.918649506e-06f, -3.918318641e-06f, -3.917981032e-06f, -3.917636681e-06f, -3.917285589e-06f, -3.916927758e-06f,
--3.916563190e-06f, -3.916191885e-06f, -3.915813846e-06f, -3.915429074e-06f, -3.915037571e-06f, -3.914639338e-06f, -3.914234377e-06f, -3.913822690e-06f, -3.913404278e-06f, -3.912979143e-06f,
--3.912547287e-06f, -3.912108711e-06f, -3.911663418e-06f, -3.911211408e-06f, -3.910752683e-06f, -3.910287246e-06f, -3.909815098e-06f, -3.909336241e-06f, -3.908850676e-06f, -3.908358406e-06f,
--3.907859431e-06f, -3.907353755e-06f, -3.906841378e-06f, -3.906322303e-06f, -3.905796532e-06f, -3.905264065e-06f, -3.904724906e-06f, -3.904179056e-06f, -3.903626516e-06f, -3.903067290e-06f,
--3.902501378e-06f, -3.901928783e-06f, -3.901349506e-06f, -3.900763550e-06f, -3.900170917e-06f, -3.899571608e-06f, -3.898965625e-06f, -3.898352970e-06f, -3.897733646e-06f, -3.897107655e-06f,
--3.896474998e-06f, -3.895835677e-06f, -3.895189695e-06f, -3.894537053e-06f, -3.893877754e-06f, -3.893211800e-06f, -3.892539192e-06f, -3.891859934e-06f, -3.891174026e-06f, -3.890481472e-06f,
--3.889782273e-06f, -3.889076431e-06f, -3.888363949e-06f, -3.887644828e-06f, -3.886919072e-06f, -3.886186682e-06f, -3.885447660e-06f, -3.884702008e-06f, -3.883949729e-06f, -3.883190826e-06f,
--3.882425299e-06f, -3.881653152e-06f, -3.880874387e-06f, -3.880089006e-06f, -3.879297011e-06f, -3.878498405e-06f, -3.877693190e-06f, -3.876881368e-06f, -3.876062942e-06f, -3.875237913e-06f,
--3.874406285e-06f, -3.873568060e-06f, -3.872723240e-06f, -3.871871827e-06f, -3.871013824e-06f, -3.870149234e-06f, -3.869278058e-06f, -3.868400300e-06f, -3.867515960e-06f, -3.866625044e-06f,
--3.865727551e-06f, -3.864823486e-06f, -3.863912850e-06f, -3.862995646e-06f, -3.862071876e-06f, -3.861141544e-06f, -3.860204651e-06f, -3.859261201e-06f, -3.858311195e-06f, -3.857354636e-06f,
--3.856391527e-06f, -3.855421871e-06f, -3.854445670e-06f, -3.853462926e-06f, -3.852473643e-06f, -3.851477822e-06f, -3.850475467e-06f, -3.849466580e-06f, -3.848451164e-06f, -3.847429222e-06f,
--3.846400756e-06f, -3.845365769e-06f, -3.844324263e-06f, -3.843276242e-06f, -3.842221708e-06f, -3.841160664e-06f, -3.840093113e-06f, -3.839019057e-06f, -3.837938499e-06f, -3.836851442e-06f,
--3.835757889e-06f, -3.834657842e-06f, -3.833551305e-06f, -3.832438280e-06f, -3.831318770e-06f, -3.830192778e-06f, -3.829060306e-06f, -3.827921359e-06f, -3.826775937e-06f, -3.825624046e-06f,
--3.824465686e-06f, -3.823300862e-06f, -3.822129576e-06f, -3.820951832e-06f, -3.819767631e-06f, -3.818576977e-06f, -3.817379874e-06f, -3.816176323e-06f, -3.814966328e-06f, -3.813749893e-06f,
--3.812527019e-06f, -3.811297710e-06f, -3.810061970e-06f, -3.808819801e-06f, -3.807571205e-06f, -3.806316187e-06f, -3.805054750e-06f, -3.803786896e-06f, -3.802512628e-06f, -3.801231950e-06f,
--3.799944865e-06f, -3.798651375e-06f, -3.797351485e-06f, -3.796045197e-06f, -3.794732514e-06f, -3.793413440e-06f, -3.792087977e-06f, -3.790756130e-06f, -3.789417900e-06f, -3.788073292e-06f,
--3.786722309e-06f, -3.785364953e-06f, -3.784001228e-06f, -3.782631138e-06f, -3.781254685e-06f, -3.779871873e-06f, -3.778482706e-06f, -3.777087186e-06f, -3.775685316e-06f, -3.774277101e-06f,
--3.772862543e-06f, -3.771441646e-06f, -3.770014413e-06f, -3.768580848e-06f, -3.767140953e-06f, -3.765694733e-06f, -3.764242191e-06f, -3.762783330e-06f, -3.761318153e-06f, -3.759846664e-06f,
--3.758368866e-06f, -3.756884764e-06f, -3.755394359e-06f, -3.753897657e-06f, -3.752394659e-06f, -3.750885371e-06f, -3.749369794e-06f, -3.747847934e-06f, -3.746319792e-06f, -3.744785374e-06f,
--3.743244682e-06f, -3.741697720e-06f, -3.740144491e-06f, -3.738584999e-06f, -3.737019248e-06f, -3.735447241e-06f, -3.733868983e-06f, -3.732284475e-06f, -3.730693723e-06f, -3.729096729e-06f,
--3.727493498e-06f, -3.725884033e-06f, -3.724268337e-06f, -3.722646415e-06f, -3.721018270e-06f, -3.719383906e-06f, -3.717743326e-06f, -3.716096534e-06f, -3.714443535e-06f, -3.712784331e-06f,
--3.711118926e-06f, -3.709447325e-06f, -3.707769530e-06f, -3.706085547e-06f, -3.704395378e-06f, -3.702699027e-06f, -3.700996498e-06f, -3.699287796e-06f, -3.697572923e-06f, -3.695851884e-06f,
--3.694124682e-06f, -3.692391322e-06f, -3.690651807e-06f, -3.688906141e-06f, -3.687154328e-06f, -3.685396372e-06f, -3.683632277e-06f, -3.681862046e-06f, -3.680085684e-06f, -3.678303195e-06f,
--3.676514583e-06f, -3.674719851e-06f, -3.672919003e-06f, -3.671112044e-06f, -3.669298978e-06f, -3.667479808e-06f, -3.665654539e-06f, -3.663823174e-06f, -3.661985717e-06f, -3.660142174e-06f,
--3.658292547e-06f, -3.656436841e-06f, -3.654575059e-06f, -3.652707207e-06f, -3.650833287e-06f, -3.648953305e-06f, -3.647067264e-06f, -3.645175168e-06f, -3.643277022e-06f, -3.641372829e-06f,
--3.639462594e-06f, -3.637546321e-06f, -3.635624014e-06f, -3.633695678e-06f, -3.631761316e-06f, -3.629820932e-06f, -3.627874532e-06f, -3.625922118e-06f, -3.623963696e-06f, -3.621999270e-06f,
--3.620028844e-06f, -3.618052421e-06f, -3.616070007e-06f, -3.614081606e-06f, -3.612087221e-06f, -3.610086858e-06f, -3.608080521e-06f, -3.606068213e-06f, -3.604049940e-06f, -3.602025705e-06f,
--3.599995513e-06f, -3.597959369e-06f, -3.595917276e-06f, -3.593869239e-06f, -3.591815263e-06f, -3.589755351e-06f, -3.587689509e-06f, -3.585617740e-06f, -3.583540049e-06f, -3.581456441e-06f,
--3.579366920e-06f, -3.577271490e-06f, -3.575170156e-06f, -3.573062923e-06f, -3.570949794e-06f, -3.568830775e-06f, -3.566705869e-06f, -3.564575082e-06f, -3.562438418e-06f, -3.560295881e-06f,
--3.558147476e-06f, -3.555993208e-06f, -3.553833081e-06f, -3.551667099e-06f, -3.549495268e-06f, -3.547317592e-06f, -3.545134075e-06f, -3.542944722e-06f, -3.540749537e-06f, -3.538548526e-06f,
--3.536341693e-06f, -3.534129042e-06f, -3.531910579e-06f, -3.529686308e-06f, -3.527456233e-06f, -3.525220359e-06f, -3.522978691e-06f, -3.520731234e-06f, -3.518477993e-06f, -3.516218971e-06f,
--3.513954174e-06f, -3.511683607e-06f, -3.509407274e-06f, -3.507125181e-06f, -3.504837331e-06f, -3.502543729e-06f, -3.500244382e-06f, -3.497939292e-06f, -3.495628465e-06f, -3.493311906e-06f,
--3.490989620e-06f, -3.488661612e-06f, -3.486327885e-06f, -3.483988446e-06f, -3.481643299e-06f, -3.479292449e-06f, -3.476935901e-06f, -3.474573659e-06f, -3.472205729e-06f, -3.469832116e-06f,
--3.467452824e-06f, -3.465067858e-06f, -3.462677224e-06f, -3.460280926e-06f, -3.457878969e-06f, -3.455471358e-06f, -3.453058098e-06f, -3.450639195e-06f, -3.448214652e-06f, -3.445784476e-06f,
--3.443348670e-06f, -3.440907241e-06f, -3.438460193e-06f, -3.436007532e-06f, -3.433549261e-06f, -3.431085387e-06f, -3.428615914e-06f, -3.426140847e-06f, -3.423660192e-06f, -3.421173954e-06f,
--3.418682137e-06f, -3.416184747e-06f, -3.413681789e-06f, -3.411173268e-06f, -3.408659190e-06f, -3.406139558e-06f, -3.403614379e-06f, -3.401083658e-06f, -3.398547400e-06f, -3.396005609e-06f,
--3.393458292e-06f, -3.390905453e-06f, -3.388347098e-06f, -3.385783231e-06f, -3.383213859e-06f, -3.380638985e-06f, -3.378058616e-06f, -3.375472757e-06f, -3.372881413e-06f, -3.370284590e-06f,
--3.367682292e-06f, -3.365074524e-06f, -3.362461293e-06f, -3.359842603e-06f, -3.357218460e-06f, -3.354588869e-06f, -3.351953835e-06f, -3.349313365e-06f, -3.346667462e-06f, -3.344016132e-06f,
--3.341359382e-06f, -3.338697216e-06f, -3.336029639e-06f, -3.333356657e-06f, -3.330678275e-06f, -3.327994499e-06f, -3.325305335e-06f, -3.322610787e-06f, -3.319910861e-06f, -3.317205562e-06f,
--3.314494896e-06f, -3.311778869e-06f, -3.309057486e-06f, -3.306330751e-06f, -3.303598672e-06f, -3.300861253e-06f, -3.298118499e-06f, -3.295370417e-06f, -3.292617012e-06f, -3.289858289e-06f,
--3.287094254e-06f, -3.284324913e-06f, -3.281550270e-06f, -3.278770332e-06f, -3.275985104e-06f, -3.273194592e-06f, -3.270398801e-06f, -3.267597736e-06f, -3.264791405e-06f, -3.261979811e-06f,
--3.259162961e-06f, -3.256340860e-06f, -3.253513515e-06f, -3.250680929e-06f, -3.247843111e-06f, -3.245000063e-06f, -3.242151794e-06f, -3.239298308e-06f, -3.236439611e-06f, -3.233575708e-06f,
--3.230706606e-06f, -3.227832309e-06f, -3.224952825e-06f, -3.222068158e-06f, -3.219178314e-06f, -3.216283299e-06f, -3.213383119e-06f, -3.210477779e-06f, -3.207567286e-06f, -3.204651644e-06f,
--3.201730861e-06f, -3.198804941e-06f, -3.195873890e-06f, -3.192937715e-06f, -3.189996420e-06f, -3.187050012e-06f, -3.184098497e-06f, -3.181141881e-06f, -3.178180169e-06f, -3.175213367e-06f,
--3.172241481e-06f, -3.169264517e-06f, -3.166282481e-06f, -3.163295379e-06f, -3.160303216e-06f, -3.157305999e-06f, -3.154303733e-06f, -3.151296424e-06f, -3.148284079e-06f, -3.145266703e-06f,
--3.142244302e-06f, -3.139216882e-06f, -3.136184450e-06f, -3.133147010e-06f, -3.130104569e-06f, -3.127057134e-06f, -3.124004709e-06f, -3.120947301e-06f, -3.117884916e-06f, -3.114817560e-06f,
--3.111745240e-06f, -3.108667960e-06f, -3.105585727e-06f, -3.102498548e-06f, -3.099406427e-06f, -3.096309372e-06f, -3.093207388e-06f, -3.090100482e-06f, -3.086988659e-06f, -3.083871925e-06f,
--3.080750288e-06f, -3.077623752e-06f, -3.074492323e-06f, -3.071356009e-06f, -3.068214815e-06f, -3.065068747e-06f, -3.061917812e-06f, -3.058762015e-06f, -3.055601363e-06f, -3.052435862e-06f,
--3.049265518e-06f, -3.046090337e-06f, -3.042910326e-06f, -3.039725490e-06f, -3.036535836e-06f, -3.033341370e-06f, -3.030142098e-06f, -3.026938027e-06f, -3.023729163e-06f, -3.020515511e-06f,
--3.017297079e-06f, -3.014073872e-06f, -3.010845897e-06f, -3.007613160e-06f, -3.004375667e-06f, -3.001133425e-06f, -2.997886440e-06f, -2.994634718e-06f, -2.991378265e-06f, -2.988117089e-06f,
--2.984851194e-06f, -2.981580588e-06f, -2.978305276e-06f, -2.975025266e-06f, -2.971740563e-06f, -2.968451174e-06f, -2.965157106e-06f, -2.961858363e-06f, -2.958554954e-06f, -2.955246884e-06f,
--2.951934160e-06f, -2.948616789e-06f, -2.945294775e-06f, -2.941968127e-06f, -2.938636850e-06f, -2.935300951e-06f, -2.931960436e-06f, -2.928615312e-06f, -2.925265585e-06f, -2.921911262e-06f,
--2.918552349e-06f, -2.915188852e-06f, -2.911820779e-06f, -2.908448135e-06f, -2.905070927e-06f, -2.901689162e-06f, -2.898302846e-06f, -2.894911985e-06f, -2.891516586e-06f, -2.888116656e-06f,
--2.884712202e-06f, -2.881303228e-06f, -2.877889744e-06f, -2.874471754e-06f, -2.871049265e-06f, -2.867622284e-06f, -2.864190818e-06f, -2.860754873e-06f, -2.857314456e-06f, -2.853869573e-06f,
--2.850420230e-06f, -2.846966436e-06f, -2.843508195e-06f, -2.840045516e-06f, -2.836578403e-06f, -2.833106865e-06f, -2.829630908e-06f, -2.826150537e-06f, -2.822665761e-06f, -2.819176586e-06f,
--2.815683018e-06f, -2.812185063e-06f, -2.808682730e-06f, -2.805176024e-06f, -2.801664952e-06f, -2.798149521e-06f, -2.794629737e-06f, -2.791105608e-06f, -2.787577139e-06f, -2.784044338e-06f,
--2.780507212e-06f, -2.776965767e-06f, -2.773420010e-06f, -2.769869947e-06f, -2.766315586e-06f, -2.762756934e-06f, -2.759193996e-06f, -2.755626780e-06f, -2.752055293e-06f, -2.748479541e-06f,
--2.744899531e-06f, -2.741315270e-06f, -2.737726765e-06f, -2.734134023e-06f, -2.730537050e-06f, -2.726935853e-06f, -2.723330440e-06f, -2.719720817e-06f, -2.716106990e-06f, -2.712488967e-06f,
--2.708866755e-06f, -2.705240360e-06f, -2.701609790e-06f, -2.697975051e-06f, -2.694336150e-06f, -2.690693094e-06f, -2.687045890e-06f, -2.683394545e-06f, -2.679739065e-06f, -2.676079458e-06f,
--2.672415731e-06f, -2.668747891e-06f, -2.665075944e-06f, -2.661399897e-06f, -2.657719758e-06f, -2.654035533e-06f, -2.650347229e-06f, -2.646654854e-06f, -2.642958414e-06f, -2.639257916e-06f,
--2.635553368e-06f, -2.631844776e-06f, -2.628132147e-06f, -2.624415488e-06f, -2.620694807e-06f, -2.616970109e-06f, -2.613241404e-06f, -2.609508696e-06f, -2.605771995e-06f, -2.602031305e-06f,
--2.598286635e-06f, -2.594537992e-06f, -2.590785382e-06f, -2.587028813e-06f, -2.583268292e-06f, -2.579503825e-06f, -2.575735421e-06f, -2.571963085e-06f, -2.568186826e-06f, -2.564406650e-06f,
--2.560622564e-06f, -2.556834576e-06f, -2.553042692e-06f, -2.549246920e-06f, -2.545447267e-06f, -2.541643740e-06f, -2.537836346e-06f, -2.534025092e-06f, -2.530209986e-06f, -2.526391034e-06f,
--2.522568244e-06f, -2.518741623e-06f, -2.514911179e-06f, -2.511076917e-06f, -2.507238846e-06f, -2.503396973e-06f, -2.499551304e-06f, -2.495701848e-06f, -2.491848611e-06f, -2.487991600e-06f,
--2.484130824e-06f, -2.480266288e-06f, -2.476398000e-06f, -2.472525968e-06f, -2.468650199e-06f, -2.464770699e-06f, -2.460887477e-06f, -2.457000539e-06f, -2.453109893e-06f, -2.449215546e-06f,
--2.445317505e-06f, -2.441415778e-06f, -2.437510372e-06f, -2.433601294e-06f, -2.429688551e-06f, -2.425772151e-06f, -2.421852101e-06f, -2.417928409e-06f, -2.414001081e-06f, -2.410070125e-06f,
--2.406135549e-06f, -2.402197359e-06f, -2.398255563e-06f, -2.394310169e-06f, -2.390361184e-06f, -2.386408614e-06f, -2.382452468e-06f, -2.378492753e-06f, -2.374529476e-06f, -2.370562644e-06f,
--2.366592266e-06f, -2.362618348e-06f, -2.358640898e-06f, -2.354659922e-06f, -2.350675430e-06f, -2.346687427e-06f, -2.342695922e-06f, -2.338700921e-06f, -2.334702433e-06f, -2.330700464e-06f,
--2.326695022e-06f, -2.322686115e-06f, -2.318673750e-06f, -2.314657934e-06f, -2.310638675e-06f, -2.306615981e-06f, -2.302589858e-06f, -2.298560314e-06f, -2.294527357e-06f, -2.290490994e-06f,
--2.286451233e-06f, -2.282408081e-06f, -2.278361546e-06f, -2.274311635e-06f, -2.270258356e-06f, -2.266201715e-06f, -2.262141722e-06f, -2.258078383e-06f, -2.254011705e-06f, -2.249941696e-06f,
--2.245868365e-06f, -2.241791717e-06f, -2.237711762e-06f, -2.233628506e-06f, -2.229541957e-06f, -2.225452122e-06f, -2.221359009e-06f, -2.217262626e-06f, -2.213162980e-06f, -2.209060079e-06f,
--2.204953930e-06f, -2.200844542e-06f, -2.196731920e-06f, -2.192616074e-06f, -2.188497010e-06f, -2.184374737e-06f, -2.180249262e-06f, -2.176120592e-06f, -2.171988735e-06f, -2.167853699e-06f,
--2.163715491e-06f, -2.159574119e-06f, -2.155429591e-06f, -2.151281914e-06f, -2.147131096e-06f, -2.142977145e-06f, -2.138820067e-06f, -2.134659872e-06f, -2.130496566e-06f, -2.126330157e-06f,
--2.122160653e-06f, -2.117988061e-06f, -2.113812390e-06f, -2.109633646e-06f, -2.105451838e-06f, -2.101266973e-06f, -2.097079059e-06f, -2.092888104e-06f, -2.088694114e-06f, -2.084497099e-06f,
--2.080297066e-06f, -2.076094022e-06f, -2.071887975e-06f, -2.067678933e-06f, -2.063466904e-06f, -2.059251894e-06f, -2.055033913e-06f, -2.050812968e-06f, -2.046589066e-06f, -2.042362216e-06f,
--2.038132424e-06f, -2.033899699e-06f, -2.029664049e-06f, -2.025425481e-06f, -2.021184003e-06f, -2.016939623e-06f, -2.012692348e-06f, -2.008442187e-06f, -2.004189147e-06f, -1.999933236e-06f,
--1.995674461e-06f, -1.991412831e-06f, -1.987148354e-06f, -1.982881036e-06f, -1.978610886e-06f, -1.974337913e-06f, -1.970062122e-06f, -1.965783523e-06f, -1.961502123e-06f, -1.957217930e-06f,
--1.952930952e-06f, -1.948641197e-06f, -1.944348672e-06f, -1.940053385e-06f, -1.935755344e-06f, -1.931454558e-06f, -1.927151033e-06f, -1.922844778e-06f, -1.918535801e-06f, -1.914224109e-06f,
--1.909909710e-06f, -1.905592612e-06f, -1.901272823e-06f, -1.896950352e-06f, -1.892625205e-06f, -1.888297390e-06f, -1.883966916e-06f, -1.879633791e-06f, -1.875298022e-06f, -1.870959617e-06f,
--1.866618584e-06f, -1.862274931e-06f, -1.857928666e-06f, -1.853579797e-06f, -1.849228332e-06f, -1.844874278e-06f, -1.840517644e-06f, -1.836158437e-06f, -1.831796666e-06f, -1.827432338e-06f,
--1.823065461e-06f, -1.818696044e-06f, -1.814324093e-06f, -1.809949618e-06f, -1.805572626e-06f, -1.801193124e-06f, -1.796811122e-06f, -1.792426627e-06f, -1.788039646e-06f, -1.783650188e-06f,
--1.779258261e-06f, -1.774863873e-06f, -1.770467031e-06f, -1.766067744e-06f, -1.761666020e-06f, -1.757261866e-06f, -1.752855291e-06f, -1.748446303e-06f, -1.744034909e-06f, -1.739621117e-06f,
--1.735204937e-06f, -1.730786375e-06f, -1.726365439e-06f, -1.721942138e-06f, -1.717516480e-06f, -1.713088472e-06f, -1.708658123e-06f, -1.704225440e-06f, -1.699790432e-06f, -1.695353107e-06f,
--1.690913473e-06f, -1.686471537e-06f, -1.682027308e-06f, -1.677580794e-06f, -1.673132002e-06f, -1.668680942e-06f, -1.664227620e-06f, -1.659772045e-06f, -1.655314226e-06f, -1.650854169e-06f,
--1.646391884e-06f, -1.641927377e-06f, -1.637460658e-06f, -1.632991734e-06f, -1.628520613e-06f, -1.624047304e-06f, -1.619571815e-06f, -1.615094153e-06f, -1.610614326e-06f, -1.606132343e-06f,
--1.601648212e-06f, -1.597161941e-06f, -1.592673538e-06f, -1.588183011e-06f, -1.583690368e-06f, -1.579195617e-06f, -1.574698766e-06f, -1.570199824e-06f, -1.565698798e-06f, -1.561195697e-06f,
--1.556690529e-06f, -1.552183302e-06f, -1.547674023e-06f, -1.543162701e-06f, -1.538649345e-06f, -1.534133962e-06f, -1.529616560e-06f, -1.525097148e-06f, -1.520575734e-06f, -1.516052325e-06f,
--1.511526930e-06f, -1.506999557e-06f, -1.502470214e-06f, -1.497938910e-06f, -1.493405652e-06f, -1.488870448e-06f, -1.484333308e-06f, -1.479794238e-06f, -1.475253247e-06f, -1.470710343e-06f,
--1.466165535e-06f, -1.461618830e-06f, -1.457070237e-06f, -1.452519763e-06f, -1.447967418e-06f, -1.443413208e-06f, -1.438857143e-06f, -1.434299230e-06f, -1.429739478e-06f, -1.425177894e-06f,
--1.420614487e-06f, -1.416049266e-06f, -1.411482238e-06f, -1.406913411e-06f, -1.402342794e-06f, -1.397770394e-06f, -1.393196221e-06f, -1.388620282e-06f, -1.384042585e-06f, -1.379463139e-06f,
--1.374881951e-06f, -1.370299031e-06f, -1.365714386e-06f, -1.361128024e-06f, -1.356539953e-06f, -1.351950182e-06f, -1.347358719e-06f, -1.342765573e-06f, -1.338170750e-06f, -1.333574261e-06f,
--1.328976112e-06f, -1.324376312e-06f, -1.319774869e-06f, -1.315171791e-06f, -1.310567087e-06f, -1.305960765e-06f, -1.301352833e-06f, -1.296743300e-06f, -1.292132172e-06f, -1.287519460e-06f,
--1.282905170e-06f, -1.278289312e-06f, -1.273671893e-06f, -1.269052922e-06f, -1.264432406e-06f, -1.259810355e-06f, -1.255186776e-06f, -1.250561678e-06f, -1.245935068e-06f, -1.241306955e-06f,
--1.236677348e-06f, -1.232046254e-06f, -1.227413682e-06f, -1.222779640e-06f, -1.218144136e-06f, -1.213507179e-06f, -1.208868777e-06f, -1.204228937e-06f, -1.199587669e-06f, -1.194944980e-06f,
--1.190300880e-06f, -1.185655375e-06f, -1.181008474e-06f, -1.176360186e-06f, -1.171710519e-06f, -1.167059481e-06f, -1.162407080e-06f, -1.157753324e-06f, -1.153098223e-06f, -1.148441784e-06f,
--1.143784015e-06f, -1.139124924e-06f, -1.134464521e-06f, -1.129802813e-06f, -1.125139808e-06f, -1.120475515e-06f, -1.115809942e-06f, -1.111143097e-06f, -1.106474989e-06f, -1.101805626e-06f,
--1.097135016e-06f, -1.092463167e-06f, -1.087790088e-06f, -1.083115786e-06f, -1.078440271e-06f, -1.073763551e-06f, -1.069085633e-06f, -1.064406527e-06f, -1.059726239e-06f, -1.055044780e-06f,
--1.050362156e-06f, -1.045678376e-06f, -1.040993449e-06f, -1.036307383e-06f, -1.031620186e-06f, -1.026931866e-06f, -1.022242432e-06f, -1.017551892e-06f, -1.012860254e-06f, -1.008167527e-06f,
--1.003473719e-06f, -9.987788372e-07f, -9.940828913e-07f, -9.893858891e-07f, -9.846878389e-07f, -9.799887491e-07f, -9.752886278e-07f, -9.705874835e-07f, -9.658853244e-07f, -9.611821588e-07f,
--9.564779951e-07f, -9.517728414e-07f, -9.470667062e-07f, -9.423595977e-07f, -9.376515242e-07f, -9.329424941e-07f, -9.282325156e-07f, -9.235215970e-07f, -9.188097467e-07f, -9.140969729e-07f,
--9.093832839e-07f, -9.046686882e-07f, -8.999531938e-07f, -8.952368093e-07f, -8.905195428e-07f, -8.858014027e-07f, -8.810823974e-07f, -8.763625350e-07f, -8.716418239e-07f, -8.669202724e-07f,
--8.621978889e-07f, -8.574746816e-07f, -8.527506588e-07f, -8.480258289e-07f, -8.433002002e-07f, -8.385737810e-07f, -8.338465795e-07f, -8.291186041e-07f, -8.243898631e-07f, -8.196603649e-07f,
--8.149301177e-07f, -8.101991298e-07f, -8.054674096e-07f, -8.007349653e-07f, -7.960018053e-07f, -7.912679379e-07f, -7.865333714e-07f, -7.817981141e-07f, -7.770621743e-07f, -7.723255604e-07f,
--7.675882806e-07f, -7.628503433e-07f, -7.581117567e-07f, -7.533725292e-07f, -7.486326691e-07f, -7.438921846e-07f, -7.391510842e-07f, -7.344093762e-07f, -7.296670687e-07f, -7.249241702e-07f,
--7.201806890e-07f, -7.154366333e-07f, -7.106920115e-07f, -7.059468319e-07f, -7.012011027e-07f, -6.964548324e-07f, -6.917080292e-07f, -6.869607015e-07f, -6.822128574e-07f, -6.774645054e-07f,
--6.727156538e-07f, -6.679663108e-07f, -6.632164847e-07f, -6.584661840e-07f, -6.537154168e-07f, -6.489641915e-07f, -6.442125164e-07f, -6.394603999e-07f, -6.347078501e-07f, -6.299548754e-07f,
--6.252014841e-07f, -6.204476846e-07f, -6.156934851e-07f, -6.109388939e-07f, -6.061839193e-07f, -6.014285696e-07f, -5.966728532e-07f, -5.919167784e-07f, -5.871603533e-07f, -5.824035864e-07f,
--5.776464859e-07f, -5.728890602e-07f, -5.681313175e-07f, -5.633732661e-07f, -5.586149143e-07f, -5.538562705e-07f, -5.490973429e-07f, -5.443381398e-07f, -5.395786694e-07f, -5.348189402e-07f,
--5.300589604e-07f, -5.252987383e-07f, -5.205382821e-07f, -5.157776002e-07f, -5.110167009e-07f, -5.062555924e-07f, -5.014942830e-07f, -4.967327811e-07f, -4.919710948e-07f, -4.872092326e-07f,
--4.824472026e-07f, -4.776850132e-07f, -4.729226726e-07f, -4.681601892e-07f, -4.633975711e-07f, -4.586348268e-07f, -4.538719644e-07f, -4.491089922e-07f, -4.443459186e-07f, -4.395827518e-07f,
--4.348195000e-07f, -4.300561716e-07f, -4.252927748e-07f, -4.205293179e-07f, -4.157658091e-07f, -4.110022568e-07f, -4.062386692e-07f, -4.014750546e-07f, -3.967114212e-07f, -3.919477773e-07f,
--3.871841311e-07f, -3.824204910e-07f, -3.776568652e-07f, -3.728932619e-07f, -3.681296895e-07f, -3.633661561e-07f, -3.586026700e-07f, -3.538392395e-07f, -3.490758729e-07f, -3.443125783e-07f,
--3.395493641e-07f, -3.347862385e-07f, -3.300232097e-07f, -3.252602860e-07f, -3.204974756e-07f, -3.157347869e-07f, -3.109722279e-07f, -3.062098070e-07f, -3.014475324e-07f, -2.966854124e-07f,
--2.919234552e-07f, -2.871616689e-07f, -2.824000620e-07f, -2.776386425e-07f, -2.728774188e-07f, -2.681163990e-07f, -2.633555914e-07f, -2.585950042e-07f, -2.538346456e-07f, -2.490745239e-07f,
--2.443146473e-07f, -2.395550240e-07f, -2.347956623e-07f, -2.300365702e-07f, -2.252777562e-07f, -2.205192283e-07f, -2.157609948e-07f, -2.110030639e-07f, -2.062454438e-07f, -2.014881428e-07f,
--1.967311689e-07f, -1.919745305e-07f, -1.872182358e-07f, -1.824622928e-07f, -1.777067100e-07f, -1.729514953e-07f, -1.681966571e-07f, -1.634422035e-07f, -1.586881427e-07f, -1.539344829e-07f,
--1.491812323e-07f, -1.444283991e-07f, -1.396759914e-07f, -1.349240175e-07f, -1.301724856e-07f, -1.254214037e-07f, -1.206707801e-07f, -1.159206230e-07f, -1.111709405e-07f, -1.064217409e-07f,
--1.016730322e-07f, -9.692482259e-08f, -9.217712034e-08f, -8.742993355e-08f, -8.268327040e-08f, -7.793713903e-08f, -7.319154762e-08f, -6.844650430e-08f, -6.370201724e-08f, -5.895809458e-08f,
--5.421474447e-08f, -4.947197506e-08f, -4.472979450e-08f, -3.998821092e-08f, -3.524723247e-08f, -3.050686727e-08f, -2.576712348e-08f, -2.102800921e-08f, -1.628953261e-08f, -1.155170180e-08f,
--6.814524901e-09f, -2.078010045e-09f, 2.657834651e-09f, 7.393001064e-09f, 1.212748108e-08f, 1.686126658e-08f, 2.159434946e-08f, 2.632672160e-08f, 3.105837490e-08f, 3.578930125e-08f,
-4.051949255e-08f, 4.524894070e-08f, 4.997763760e-08f, 5.470557516e-08f, 5.943274528e-08f, 6.415913987e-08f, 6.888475085e-08f, 7.360957012e-08f, 7.833358961e-08f, 8.305680124e-08f,
-8.777919692e-08f, 9.250076859e-08f, 9.722150816e-08f, 1.019414076e-07f, 1.066604588e-07f, 1.113786537e-07f, 1.160959842e-07f, 1.208124423e-07f, 1.255280200e-07f, 1.302427091e-07f,
-1.349565016e-07f, 1.396693896e-07f, 1.443813648e-07f, 1.490924193e-07f, 1.538025451e-07f, 1.585117341e-07f, 1.632199782e-07f, 1.679272695e-07f, 1.726335999e-07f, 1.773389614e-07f,
-1.820433459e-07f, 1.867467455e-07f, 1.914491521e-07f, 1.961505577e-07f, 2.008509543e-07f, 2.055503338e-07f, 2.102486884e-07f, 2.149460099e-07f, 2.196422903e-07f, 2.243375218e-07f,
-2.290316962e-07f, 2.337248056e-07f, 2.384168420e-07f, 2.431077974e-07f, 2.477976638e-07f, 2.524864333e-07f, 2.571740978e-07f, 2.618606495e-07f, 2.665460802e-07f, 2.712303821e-07f,
-2.759135472e-07f, 2.805955676e-07f, 2.852764352e-07f, 2.899561421e-07f, 2.946346804e-07f, 2.993120421e-07f, 3.039882192e-07f, 3.086632039e-07f, 3.133369882e-07f, 3.180095641e-07f,
-3.226809238e-07f, 3.273510592e-07f, 3.320199625e-07f, 3.366876258e-07f, 3.413540410e-07f, 3.460192004e-07f, 3.506830959e-07f, 3.553457197e-07f, 3.600070639e-07f, 3.646671206e-07f,
-3.693258818e-07f, 3.739833397e-07f, 3.786394864e-07f, 3.832943139e-07f, 3.879478145e-07f, 3.925999802e-07f, 3.972508031e-07f, 4.019002753e-07f, 4.065483891e-07f, 4.111951365e-07f,
-4.158405096e-07f, 4.204845007e-07f, 4.251271018e-07f, 4.297683050e-07f, 4.344081026e-07f, 4.390464866e-07f, 4.436834493e-07f, 4.483189828e-07f, 4.529530792e-07f, 4.575857308e-07f,
-4.622169296e-07f, 4.668466680e-07f, 4.714749379e-07f, 4.761017317e-07f, 4.807270415e-07f, 4.853508595e-07f, 4.899731779e-07f, 4.945939888e-07f, 4.992132846e-07f, 5.038310573e-07f,
-5.084472993e-07f, 5.130620026e-07f, 5.176751595e-07f, 5.222867623e-07f, 5.268968032e-07f, 5.315052743e-07f, 5.361121680e-07f, 5.407174764e-07f, 5.453211917e-07f, 5.499233064e-07f,
-5.545238124e-07f, 5.591227022e-07f, 5.637199680e-07f, 5.683156020e-07f, 5.729095965e-07f, 5.775019438e-07f, 5.820926360e-07f, 5.866816656e-07f, 5.912690248e-07f, 5.958547058e-07f,
-6.004387009e-07f, 6.050210025e-07f, 6.096016028e-07f, 6.141804941e-07f, 6.187576687e-07f, 6.233331189e-07f, 6.279068371e-07f, 6.324788155e-07f, 6.370490465e-07f, 6.416175224e-07f,
-6.461842355e-07f, 6.507491781e-07f, 6.553123426e-07f, 6.598737213e-07f, 6.644333065e-07f, 6.689910907e-07f, 6.735470661e-07f, 6.781012251e-07f, 6.826535601e-07f, 6.872040634e-07f,
-6.917527274e-07f, 6.962995444e-07f, 7.008445069e-07f, 7.053876073e-07f, 7.099288378e-07f, 7.144681909e-07f, 7.190056590e-07f, 7.235412345e-07f, 7.280749098e-07f, 7.326066773e-07f,
-7.371365294e-07f, 7.416644585e-07f, 7.461904571e-07f, 7.507145175e-07f, 7.552366323e-07f, 7.597567937e-07f, 7.642749943e-07f, 7.687912266e-07f, 7.733054828e-07f, 7.778177556e-07f,
-7.823280374e-07f, 7.868363206e-07f, 7.913425976e-07f, 7.958468610e-07f, 8.003491033e-07f, 8.048493168e-07f, 8.093474941e-07f, 8.138436277e-07f, 8.183377101e-07f, 8.228297338e-07f,
-8.273196912e-07f, 8.318075749e-07f, 8.362933774e-07f, 8.407770911e-07f, 8.452587087e-07f, 8.497382227e-07f, 8.542156255e-07f, 8.586909097e-07f, 8.631640679e-07f, 8.676350925e-07f,
-8.721039762e-07f, 8.765707115e-07f, 8.810352910e-07f, 8.854977071e-07f, 8.899579526e-07f, 8.944160198e-07f, 8.988719016e-07f, 9.033255903e-07f, 9.077770786e-07f, 9.122263592e-07f,
-9.166734245e-07f, 9.211182672e-07f, 9.255608799e-07f, 9.300012552e-07f, 9.344393858e-07f, 9.388752642e-07f, 9.433088830e-07f, 9.477402350e-07f, 9.521693127e-07f, 9.565961088e-07f,
-9.610206160e-07f, 9.654428268e-07f, 9.698627339e-07f, 9.742803300e-07f, 9.786956079e-07f, 9.831085600e-07f, 9.875191792e-07f, 9.919274580e-07f, 9.963333892e-07f, 1.000736966e-06f,
-1.005138180e-06f, 1.009537024e-06f, 1.013933492e-06f, 1.018327576e-06f, 1.022719268e-06f, 1.027108561e-06f, 1.031495449e-06f, 1.035879923e-06f, 1.040261977e-06f, 1.044641604e-06f,
-1.049018795e-06f, 1.053393544e-06f, 1.057765844e-06f, 1.062135686e-06f, 1.066503065e-06f, 1.070867973e-06f, 1.075230403e-06f, 1.079590347e-06f, 1.083947798e-06f, 1.088302749e-06f,
-1.092655193e-06f, 1.097005122e-06f, 1.101352530e-06f, 1.105697409e-06f, 1.110039753e-06f, 1.114379553e-06f, 1.118716803e-06f, 1.123051495e-06f, 1.127383623e-06f, 1.131713179e-06f,
-1.136040157e-06f, 1.140364548e-06f, 1.144686346e-06f, 1.149005544e-06f, 1.153322134e-06f, 1.157636110e-06f, 1.161947465e-06f, 1.166256190e-06f, 1.170562280e-06f, 1.174865727e-06f,
-1.179166524e-06f, 1.183464664e-06f, 1.187760140e-06f, 1.192052944e-06f, 1.196343070e-06f, 1.200630511e-06f, 1.204915259e-06f, 1.209197308e-06f, 1.213476651e-06f, 1.217753280e-06f,
-1.222027188e-06f, 1.226298369e-06f, 1.230566815e-06f, 1.234832519e-06f, 1.239095475e-06f, 1.243355675e-06f, 1.247613113e-06f, 1.251867780e-06f, 1.256119672e-06f, 1.260368779e-06f,
-1.264615097e-06f, 1.268858616e-06f, 1.273099331e-06f, 1.277337235e-06f, 1.281572320e-06f, 1.285804580e-06f, 1.290034008e-06f, 1.294260596e-06f, 1.298484338e-06f, 1.302705227e-06f,
-1.306923256e-06f, 1.311138419e-06f, 1.315350707e-06f, 1.319560115e-06f, 1.323766635e-06f, 1.327970261e-06f, 1.332170985e-06f, 1.336368802e-06f, 1.340563703e-06f, 1.344755682e-06f,
-1.348944732e-06f, 1.353130847e-06f, 1.357314019e-06f, 1.361494242e-06f, 1.365671509e-06f, 1.369845812e-06f, 1.374017146e-06f, 1.378185504e-06f, 1.382350878e-06f, 1.386513261e-06f,
-1.390672648e-06f, 1.394829031e-06f, 1.398982403e-06f, 1.403132758e-06f, 1.407280089e-06f, 1.411424389e-06f, 1.415565651e-06f, 1.419703869e-06f, 1.423839036e-06f, 1.427971145e-06f,
-1.432100189e-06f, 1.436226162e-06f, 1.440349057e-06f, 1.444468867e-06f, 1.448585585e-06f, 1.452699206e-06f, 1.456809721e-06f, 1.460917125e-06f, 1.465021411e-06f, 1.469122572e-06f,
-1.473220601e-06f, 1.477315493e-06f, 1.481407239e-06f, 1.485495833e-06f, 1.489581270e-06f, 1.493663542e-06f, 1.497742642e-06f, 1.501818564e-06f, 1.505891301e-06f, 1.509960847e-06f,
-1.514027196e-06f, 1.518090339e-06f, 1.522150272e-06f, 1.526206987e-06f, 1.530260478e-06f, 1.534310738e-06f, 1.538357760e-06f, 1.542401539e-06f, 1.546442067e-06f, 1.550479338e-06f,
-1.554513345e-06f, 1.558544083e-06f, 1.562571543e-06f, 1.566595721e-06f, 1.570616609e-06f, 1.574634200e-06f, 1.578648489e-06f, 1.582659469e-06f, 1.586667133e-06f, 1.590671475e-06f,
-1.594672489e-06f, 1.598670167e-06f, 1.602664504e-06f, 1.606655493e-06f, 1.610643127e-06f, 1.614627401e-06f, 1.618608307e-06f, 1.622585840e-06f, 1.626559992e-06f, 1.630530758e-06f,
-1.634498131e-06f, 1.638462105e-06f, 1.642422673e-06f, 1.646379828e-06f, 1.650333566e-06f, 1.654283878e-06f, 1.658230759e-06f, 1.662174203e-06f, 1.666114202e-06f, 1.670050752e-06f,
-1.673983844e-06f, 1.677913474e-06f, 1.681839635e-06f, 1.685762319e-06f, 1.689681522e-06f, 1.693597237e-06f, 1.697509458e-06f, 1.701418177e-06f, 1.705323390e-06f, 1.709225089e-06f,
-1.713123268e-06f, 1.717017922e-06f, 1.720909044e-06f, 1.724796627e-06f, 1.728680665e-06f, 1.732561153e-06f, 1.736438084e-06f, 1.740311451e-06f, 1.744181250e-06f, 1.748047472e-06f,
-1.751910112e-06f, 1.755769165e-06f, 1.759624623e-06f, 1.763476481e-06f, 1.767324732e-06f, 1.771169370e-06f, 1.775010390e-06f, 1.778847784e-06f, 1.782681547e-06f, 1.786511673e-06f,
-1.790338156e-06f, 1.794160989e-06f, 1.797980166e-06f, 1.801795681e-06f, 1.805607529e-06f, 1.809415703e-06f, 1.813220196e-06f, 1.817021004e-06f, 1.820818119e-06f, 1.824611536e-06f,
-1.828401249e-06f, 1.832187252e-06f, 1.835969538e-06f, 1.839748101e-06f, 1.843522937e-06f, 1.847294037e-06f, 1.851061398e-06f, 1.854825012e-06f, 1.858584873e-06f, 1.862340976e-06f,
-1.866093315e-06f, 1.869841883e-06f, 1.873586675e-06f, 1.877327685e-06f, 1.881064906e-06f, 1.884798333e-06f, 1.888527960e-06f, 1.892253781e-06f, 1.895975790e-06f, 1.899693981e-06f,
-1.903408349e-06f, 1.907118886e-06f, 1.910825588e-06f, 1.914528449e-06f, 1.918227462e-06f, 1.921922622e-06f, 1.925613923e-06f, 1.929301360e-06f, 1.932984925e-06f, 1.936664614e-06f,
-1.940340420e-06f, 1.944012338e-06f, 1.947680362e-06f, 1.951344487e-06f, 1.955004705e-06f, 1.958661012e-06f, 1.962313402e-06f, 1.965961869e-06f, 1.969606407e-06f, 1.973247011e-06f,
-1.976883674e-06f, 1.980516391e-06f, 1.984145156e-06f, 1.987769964e-06f, 1.991390809e-06f, 1.995007685e-06f, 1.998620586e-06f, 2.002229507e-06f, 2.005834441e-06f, 2.009435384e-06f,
-2.013032330e-06f, 2.016625272e-06f, 2.020214206e-06f, 2.023799125e-06f, 2.027380025e-06f, 2.030956899e-06f, 2.034529741e-06f, 2.038098546e-06f, 2.041663309e-06f, 2.045224024e-06f,
-2.048780685e-06f, 2.052333287e-06f, 2.055881824e-06f, 2.059426290e-06f, 2.062966681e-06f, 2.066502989e-06f, 2.070035211e-06f, 2.073563340e-06f, 2.077087370e-06f, 2.080607297e-06f,
-2.084123115e-06f, 2.087634818e-06f, 2.091142400e-06f, 2.094645857e-06f, 2.098145182e-06f, 2.101640371e-06f, 2.105131417e-06f, 2.108618316e-06f, 2.112101061e-06f, 2.115579648e-06f,
-2.119054071e-06f, 2.122524325e-06f, 2.125990403e-06f, 2.129452302e-06f, 2.132910014e-06f, 2.136363536e-06f, 2.139812860e-06f, 2.143257983e-06f, 2.146698899e-06f, 2.150135602e-06f,
-2.153568087e-06f, 2.156996349e-06f, 2.160420382e-06f, 2.163840181e-06f, 2.167255741e-06f, 2.170667056e-06f, 2.174074121e-06f, 2.177476931e-06f, 2.180875480e-06f, 2.184269763e-06f,
-2.187659775e-06f, 2.191045511e-06f, 2.194426965e-06f, 2.197804132e-06f, 2.201177007e-06f, 2.204545585e-06f, 2.207909860e-06f, 2.211269827e-06f, 2.214625481e-06f, 2.217976816e-06f,
-2.221323829e-06f, 2.224666512e-06f, 2.228004862e-06f, 2.231338873e-06f, 2.234668539e-06f, 2.237993856e-06f, 2.241314819e-06f, 2.244631422e-06f, 2.247943660e-06f, 2.251251529e-06f,
-2.254555022e-06f, 2.257854136e-06f, 2.261148864e-06f, 2.264439202e-06f, 2.267725145e-06f, 2.271006687e-06f, 2.274283824e-06f, 2.277556550e-06f, 2.280824860e-06f, 2.284088750e-06f,
-2.287348215e-06f, 2.290603248e-06f, 2.293853846e-06f, 2.297100004e-06f, 2.300341715e-06f, 2.303578976e-06f, 2.306811781e-06f, 2.310040126e-06f, 2.313264005e-06f, 2.316483414e-06f,
-2.319698347e-06f, 2.322908799e-06f, 2.326114766e-06f, 2.329316243e-06f, 2.332513225e-06f, 2.335705707e-06f, 2.338893684e-06f, 2.342077150e-06f, 2.345256103e-06f, 2.348430535e-06f,
-2.351600443e-06f, 2.354765822e-06f, 2.357926666e-06f, 2.361082972e-06f, 2.364234734e-06f, 2.367381947e-06f, 2.370524606e-06f, 2.373662708e-06f, 2.376796246e-06f, 2.379925217e-06f,
-2.383049615e-06f, 2.386169435e-06f, 2.389284674e-06f, 2.392395325e-06f, 2.395501385e-06f, 2.398602849e-06f, 2.401699711e-06f, 2.404791968e-06f, 2.407879614e-06f, 2.410962645e-06f,
-2.414041056e-06f, 2.417114843e-06f, 2.420184000e-06f, 2.423248524e-06f, 2.426308409e-06f, 2.429363651e-06f, 2.432414245e-06f, 2.435460187e-06f, 2.438501471e-06f, 2.441538094e-06f,
-2.444570051e-06f, 2.447597336e-06f, 2.450619947e-06f, 2.453637877e-06f, 2.456651123e-06f, 2.459659679e-06f, 2.462663542e-06f, 2.465662707e-06f, 2.468657168e-06f, 2.471646923e-06f,
-2.474631966e-06f, 2.477612292e-06f, 2.480587898e-06f, 2.483558779e-06f, 2.486524929e-06f, 2.489486346e-06f, 2.492443023e-06f, 2.495394958e-06f, 2.498342145e-06f, 2.501284580e-06f,
-2.504222259e-06f, 2.507155177e-06f, 2.510083329e-06f, 2.513006712e-06f, 2.515925321e-06f, 2.518839151e-06f, 2.521748199e-06f, 2.524652460e-06f, 2.527551929e-06f, 2.530446602e-06f,
-2.533336475e-06f, 2.536221543e-06f, 2.539101803e-06f, 2.541977249e-06f, 2.544847878e-06f, 2.547713686e-06f, 2.550574667e-06f, 2.553430818e-06f, 2.556282134e-06f, 2.559128612e-06f,
-2.561970247e-06f, 2.564807034e-06f, 2.567638970e-06f, 2.570466050e-06f, 2.573288270e-06f, 2.576105626e-06f, 2.578918114e-06f, 2.581725730e-06f, 2.584528468e-06f, 2.587326326e-06f,
-2.590119299e-06f, 2.592907382e-06f, 2.595690573e-06f, 2.598468866e-06f, 2.601242257e-06f, 2.604010743e-06f, 2.606774319e-06f, 2.609532981e-06f, 2.612286725e-06f, 2.615035548e-06f,
-2.617779444e-06f, 2.620518410e-06f, 2.623252442e-06f, 2.625981536e-06f, 2.628705688e-06f, 2.631424893e-06f, 2.634139149e-06f, 2.636848450e-06f, 2.639552792e-06f, 2.642252173e-06f,
-2.644946587e-06f, 2.647636032e-06f, 2.650320502e-06f, 2.652999994e-06f, 2.655674504e-06f, 2.658344028e-06f, 2.661008563e-06f, 2.663668103e-06f, 2.666322647e-06f, 2.668972188e-06f,
-2.671616724e-06f, 2.674256251e-06f, 2.676890765e-06f, 2.679520262e-06f, 2.682144738e-06f, 2.684764189e-06f, 2.687378612e-06f, 2.689988003e-06f, 2.692592357e-06f, 2.695191672e-06f,
-2.697785943e-06f, 2.700375166e-06f, 2.702959339e-06f, 2.705538456e-06f, 2.708112514e-06f, 2.710681510e-06f, 2.713245440e-06f, 2.715804300e-06f, 2.718358086e-06f, 2.720906795e-06f,
-2.723450423e-06f, 2.725988966e-06f, 2.728522421e-06f, 2.731050784e-06f, 2.733574051e-06f, 2.736092218e-06f, 2.738605283e-06f, 2.741113241e-06f, 2.743616088e-06f, 2.746113822e-06f,
-2.748606439e-06f, 2.751093934e-06f, 2.753576304e-06f, 2.756053547e-06f, 2.758525658e-06f, 2.760992633e-06f, 2.763454469e-06f, 2.765911163e-06f, 2.768362712e-06f, 2.770809110e-06f,
-2.773250356e-06f, 2.775686445e-06f, 2.778117375e-06f, 2.780543140e-06f, 2.782963740e-06f, 2.785379168e-06f, 2.787789423e-06f, 2.790194501e-06f, 2.792594398e-06f, 2.794989111e-06f,
-2.797378636e-06f, 2.799762971e-06f, 2.802142111e-06f, 2.804516054e-06f, 2.806884795e-06f, 2.809248332e-06f, 2.811606662e-06f, 2.813959780e-06f, 2.816307684e-06f, 2.818650370e-06f,
-2.820987835e-06f, 2.823320076e-06f, 2.825647088e-06f, 2.827968870e-06f, 2.830285418e-06f, 2.832596728e-06f, 2.834902798e-06f, 2.837203623e-06f, 2.839499201e-06f, 2.841789529e-06f,
-2.844074602e-06f, 2.846354419e-06f, 2.848628976e-06f, 2.850898270e-06f, 2.853162297e-06f, 2.855421054e-06f, 2.857674538e-06f, 2.859922747e-06f, 2.862165676e-06f, 2.864403323e-06f,
-2.866635685e-06f, 2.868862758e-06f, 2.871084539e-06f, 2.873301026e-06f, 2.875512215e-06f, 2.877718103e-06f, 2.879918687e-06f, 2.882113964e-06f, 2.884303931e-06f, 2.886488585e-06f,
-2.888667923e-06f, 2.890841942e-06f, 2.893010639e-06f, 2.895174010e-06f, 2.897332053e-06f, 2.899484766e-06f, 2.901632144e-06f, 2.903774185e-06f, 2.905910886e-06f, 2.908042244e-06f,
-2.910168256e-06f, 2.912288920e-06f, 2.914404232e-06f, 2.916514189e-06f, 2.918618788e-06f, 2.920718028e-06f, 2.922811904e-06f, 2.924900414e-06f, 2.926983555e-06f, 2.929061324e-06f,
-2.931133718e-06f, 2.933200735e-06f, 2.935262372e-06f, 2.937318626e-06f, 2.939369494e-06f, 2.941414973e-06f, 2.943455060e-06f, 2.945489754e-06f, 2.947519050e-06f, 2.949542947e-06f,
-2.951561441e-06f, 2.953574530e-06f, 2.955582212e-06f, 2.957584482e-06f, 2.959581340e-06f, 2.961572781e-06f, 2.963558804e-06f, 2.965539405e-06f, 2.967514582e-06f, 2.969484333e-06f,
-2.971448654e-06f, 2.973407544e-06f, 2.975360999e-06f, 2.977309017e-06f, 2.979251595e-06f, 2.981188730e-06f, 2.983120421e-06f, 2.985046665e-06f, 2.986967458e-06f, 2.988882799e-06f,
-2.990792684e-06f, 2.992697112e-06f, 2.994596080e-06f, 2.996489585e-06f, 2.998377625e-06f, 3.000260197e-06f, 3.002137299e-06f, 3.004008928e-06f, 3.005875082e-06f, 3.007735759e-06f,
-3.009590956e-06f, 3.011440670e-06f, 3.013284899e-06f, 3.015123642e-06f, 3.016956894e-06f, 3.018784654e-06f, 3.020606920e-06f, 3.022423690e-06f, 3.024234959e-06f, 3.026040728e-06f,
-3.027840992e-06f, 3.029635751e-06f, 3.031425001e-06f, 3.033208740e-06f, 3.034986965e-06f, 3.036759676e-06f, 3.038526868e-06f, 3.040288541e-06f, 3.042044691e-06f, 3.043795317e-06f,
-3.045540416e-06f, 3.047279986e-06f, 3.049014025e-06f, 3.050742531e-06f, 3.052465501e-06f, 3.054182932e-06f, 3.055894824e-06f, 3.057601174e-06f, 3.059301979e-06f, 3.060997238e-06f,
-3.062686948e-06f, 3.064371108e-06f, 3.066049714e-06f, 3.067722766e-06f, 3.069390260e-06f, 3.071052195e-06f, 3.072708569e-06f, 3.074359379e-06f, 3.076004624e-06f, 3.077644301e-06f,
-3.079278409e-06f, 3.080906945e-06f, 3.082529907e-06f, 3.084147294e-06f, 3.085759103e-06f, 3.087365333e-06f, 3.088965981e-06f, 3.090561045e-06f, 3.092150524e-06f, 3.093734415e-06f,
-3.095312717e-06f, 3.096885427e-06f, 3.098452544e-06f, 3.100014066e-06f, 3.101569990e-06f, 3.103120316e-06f, 3.104665040e-06f, 3.106204162e-06f, 3.107737679e-06f, 3.109265590e-06f,
-3.110787892e-06f, 3.112304584e-06f, 3.113815663e-06f, 3.115321129e-06f, 3.116820980e-06f, 3.118315213e-06f, 3.119803826e-06f, 3.121286819e-06f, 3.122764189e-06f, 3.124235934e-06f,
-3.125702053e-06f, 3.127162544e-06f, 3.128617405e-06f, 3.130066634e-06f, 3.131510231e-06f, 3.132948193e-06f, 3.134380518e-06f, 3.135807204e-06f, 3.137228251e-06f, 3.138643657e-06f,
-3.140053419e-06f, 3.141457536e-06f, 3.142856007e-06f, 3.144248830e-06f, 3.145636003e-06f, 3.147017525e-06f, 3.148393394e-06f, 3.149763608e-06f, 3.151128167e-06f, 3.152487068e-06f,
-3.153840310e-06f, 3.155187891e-06f, 3.156529810e-06f, 3.157866065e-06f, 3.159196655e-06f, 3.160521579e-06f, 3.161840834e-06f, 3.163154420e-06f, 3.164462334e-06f, 3.165764576e-06f,
-3.167061144e-06f, 3.168352037e-06f, 3.169637253e-06f, 3.170916790e-06f, 3.172190648e-06f, 3.173458824e-06f, 3.174721319e-06f, 3.175978129e-06f, 3.177229254e-06f, 3.178474693e-06f,
-3.179714443e-06f, 3.180948505e-06f, 3.182176876e-06f, 3.183399555e-06f, 3.184616541e-06f, 3.185827832e-06f, 3.187033428e-06f, 3.188233326e-06f, 3.189427527e-06f, 3.190616027e-06f,
-3.191798827e-06f, 3.192975925e-06f, 3.194147320e-06f, 3.195313010e-06f, 3.196472995e-06f, 3.197627273e-06f, 3.198775843e-06f, 3.199918703e-06f, 3.201055853e-06f, 3.202187292e-06f,
-3.203313018e-06f, 3.204433030e-06f, 3.205547327e-06f, 3.206655908e-06f, 3.207758772e-06f, 3.208855918e-06f, 3.209947345e-06f, 3.211033051e-06f, 3.212113036e-06f, 3.213187298e-06f,
-3.214255837e-06f, 3.215318651e-06f, 3.216375739e-06f, 3.217427101e-06f, 3.218472736e-06f, 3.219512641e-06f, 3.220546817e-06f, 3.221575263e-06f, 3.222597977e-06f, 3.223614959e-06f,
-3.224626207e-06f, 3.225631721e-06f, 3.226631500e-06f, 3.227625542e-06f, 3.228613848e-06f, 3.229596415e-06f, 3.230573244e-06f, 3.231544333e-06f, 3.232509681e-06f, 3.233469288e-06f,
-3.234423153e-06f, 3.235371274e-06f, 3.236313652e-06f, 3.237250285e-06f, 3.238181173e-06f, 3.239106314e-06f, 3.240025708e-06f, 3.240939354e-06f, 3.241847252e-06f, 3.242749401e-06f,
-3.243645799e-06f, 3.244536446e-06f, 3.245421342e-06f, 3.246300486e-06f, 3.247173876e-06f, 3.248041513e-06f, 3.248903396e-06f, 3.249759524e-06f, 3.250609896e-06f, 3.251454512e-06f,
-3.252293370e-06f, 3.253126472e-06f, 3.253953815e-06f, 3.254775399e-06f, 3.255591224e-06f, 3.256401289e-06f, 3.257205594e-06f, 3.258004137e-06f, 3.258796919e-06f, 3.259583938e-06f,
-3.260365195e-06f, 3.261140688e-06f, 3.261910418e-06f, 3.262674383e-06f, 3.263432583e-06f, 3.264185018e-06f, 3.264931688e-06f, 3.265672591e-06f, 3.266407727e-06f, 3.267137097e-06f,
-3.267860698e-06f, 3.268578532e-06f, 3.269290598e-06f, 3.269996894e-06f, 3.270697421e-06f, 3.271392179e-06f, 3.272081167e-06f, 3.272764384e-06f, 3.273441831e-06f, 3.274113506e-06f,
-3.274779410e-06f, 3.275439543e-06f, 3.276093903e-06f, 3.276742491e-06f, 3.277385307e-06f, 3.278022349e-06f, 3.278653619e-06f, 3.279279115e-06f, 3.279898837e-06f, 3.280512785e-06f,
-3.281120959e-06f, 3.281723359e-06f, 3.282319984e-06f, 3.282910834e-06f, 3.283495909e-06f, 3.284075209e-06f, 3.284648734e-06f, 3.285216483e-06f, 3.285778456e-06f, 3.286334653e-06f,
-3.286885075e-06f, 3.287429720e-06f, 3.287968589e-06f, 3.288501682e-06f, 3.289028998e-06f, 3.289550538e-06f, 3.290066301e-06f, 3.290576288e-06f, 3.291080498e-06f, 3.291578931e-06f,
-3.292071587e-06f, 3.292558467e-06f, 3.293039569e-06f, 3.293514895e-06f, 3.293984444e-06f, 3.294448216e-06f, 3.294906212e-06f, 3.295358431e-06f, 3.295804873e-06f, 3.296245538e-06f,
-3.296680427e-06f, 3.297109539e-06f, 3.297532875e-06f, 3.297950435e-06f, 3.298362218e-06f, 3.298768225e-06f, 3.299168457e-06f, 3.299562912e-06f, 3.299951592e-06f, 3.300334496e-06f,
-3.300711625e-06f, 3.301082979e-06f, 3.301448558e-06f, 3.301808362e-06f, 3.302162391e-06f, 3.302510646e-06f, 3.302853127e-06f, 3.303189834e-06f, 3.303520767e-06f, 3.303845927e-06f,
-3.304165314e-06f, 3.304478928e-06f, 3.304786769e-06f, 3.305088838e-06f, 3.305385135e-06f, 3.305675660e-06f, 3.305960414e-06f, 3.306239397e-06f, 3.306512609e-06f, 3.306780051e-06f,
-3.307041723e-06f, 3.307297626e-06f, 3.307547759e-06f, 3.307792123e-06f, 3.308030720e-06f, 3.308263548e-06f, 3.308490608e-06f, 3.308711902e-06f, 3.308927429e-06f, 3.309137190e-06f,
-3.309341185e-06f, 3.309539414e-06f, 3.309731879e-06f, 3.309918580e-06f, 3.310099517e-06f, 3.310274690e-06f, 3.310444101e-06f, 3.310607750e-06f, 3.310765637e-06f, 3.310917763e-06f,
-3.311064129e-06f, 3.311204734e-06f, 3.311339580e-06f, 3.311468668e-06f, 3.311591997e-06f, 3.311709569e-06f, 3.311821383e-06f, 3.311927442e-06f, 3.312027745e-06f, 3.312122292e-06f,
-3.312211086e-06f, 3.312294126e-06f, 3.312371412e-06f, 3.312442947e-06f, 3.312508730e-06f, 3.312568762e-06f, 3.312623044e-06f, 3.312671576e-06f, 3.312714360e-06f, 3.312751396e-06f,
-3.312782685e-06f, 3.312808227e-06f, 3.312828024e-06f, 3.312842076e-06f, 3.312850384e-06f, 3.312852949e-06f, 3.312849771e-06f, 3.312840852e-06f, 3.312826193e-06f, 3.312805793e-06f,
-3.312779654e-06f, 3.312747778e-06f, 3.312710164e-06f, 3.312666814e-06f, 3.312617728e-06f, 3.312562908e-06f, 3.312502354e-06f, 3.312436067e-06f, 3.312364049e-06f, 3.312286300e-06f,
-3.312202821e-06f, 3.312113613e-06f, 3.312018678e-06f, 3.311918015e-06f, 3.311811627e-06f, 3.311699514e-06f, 3.311581677e-06f, 3.311458117e-06f, 3.311328835e-06f, 3.311193832e-06f,
-3.311053110e-06f, 3.310906669e-06f, 3.310754511e-06f, 3.310596636e-06f, 3.310433046e-06f, 3.310263742e-06f, 3.310088724e-06f, 3.309907995e-06f, 3.309721554e-06f, 3.309529404e-06f,
-3.309331545e-06f, 3.309127979e-06f, 3.308918707e-06f, 3.308703729e-06f, 3.308483048e-06f, 3.308256664e-06f, 3.308024578e-06f, 3.307786793e-06f, 3.307543308e-06f, 3.307294126e-06f,
-3.307039247e-06f, 3.306778673e-06f, 3.306512405e-06f, 3.306240444e-06f, 3.305962792e-06f, 3.305679450e-06f, 3.305390419e-06f, 3.305095700e-06f, 3.304795296e-06f, 3.304489206e-06f,
-3.304177434e-06f, 3.303859979e-06f, 3.303536843e-06f, 3.303208028e-06f, 3.302873536e-06f, 3.302533366e-06f, 3.302187522e-06f, 3.301836004e-06f, 3.301478813e-06f, 3.301115952e-06f,
-3.300747421e-06f, 3.300373222e-06f, 3.299993357e-06f, 3.299607827e-06f, 3.299216633e-06f, 3.298819778e-06f, 3.298417262e-06f, 3.298009086e-06f, 3.297595254e-06f, 3.297175765e-06f,
-3.296750622e-06f, 3.296319826e-06f, 3.295883378e-06f, 3.295441281e-06f, 3.294993536e-06f, 3.294540145e-06f, 3.294081108e-06f, 3.293616428e-06f, 3.293146106e-06f, 3.292670144e-06f,
-3.292188544e-06f, 3.291701307e-06f, 3.291208434e-06f, 3.290709928e-06f, 3.290205791e-06f, 3.289696023e-06f, 3.289180627e-06f, 3.288659604e-06f, 3.288132956e-06f, 3.287600685e-06f,
-3.287062792e-06f, 3.286519279e-06f, 3.285970149e-06f, 3.285415402e-06f, 3.284855040e-06f, 3.284289066e-06f, 3.283717480e-06f, 3.283140286e-06f, 3.282557484e-06f, 3.281969077e-06f,
-3.281375066e-06f, 3.280775453e-06f, 3.280170240e-06f, 3.279559429e-06f, 3.278943022e-06f, 3.278321020e-06f, 3.277693426e-06f, 3.277060241e-06f, 3.276421467e-06f, 3.275777106e-06f,
-3.275127161e-06f, 3.274471632e-06f, 3.273810523e-06f, 3.273143834e-06f, 3.272471569e-06f, 3.271793728e-06f, 3.271110314e-06f, 3.270421329e-06f, 3.269726775e-06f, 3.269026653e-06f,
-3.268320966e-06f, 3.267609717e-06f, 3.266892906e-06f, 3.266170536e-06f, 3.265442609e-06f, 3.264709127e-06f, 3.263970092e-06f, 3.263225507e-06f, 3.262475372e-06f, 3.261719692e-06f,
-3.260958466e-06f, 3.260191699e-06f, 3.259419391e-06f, 3.258641545e-06f, 3.257858163e-06f, 3.257069247e-06f, 3.256274800e-06f, 3.255474823e-06f, 3.254669319e-06f, 3.253858290e-06f,
-3.253041738e-06f, 3.252219665e-06f, 3.251392074e-06f, 3.250558967e-06f, 3.249720346e-06f, 3.248876213e-06f, 3.248026570e-06f, 3.247171421e-06f, 3.246310766e-06f, 3.245444609e-06f,
-3.244572952e-06f, 3.243695796e-06f, 3.242813145e-06f, 3.241925001e-06f, 3.241031365e-06f, 3.240132241e-06f, 3.239227630e-06f, 3.238317536e-06f, 3.237401960e-06f, 3.236480904e-06f,
-3.235554372e-06f, 3.234622365e-06f, 3.233684886e-06f, 3.232741937e-06f, 3.231793522e-06f, 3.230839641e-06f, 3.229880298e-06f, 3.228915496e-06f, 3.227945235e-06f, 3.226969520e-06f,
-3.225988353e-06f, 3.225001735e-06f, 3.224009670e-06f, 3.223012160e-06f, 3.222009207e-06f, 3.221000815e-06f, 3.219986985e-06f, 3.218967720e-06f, 3.217943023e-06f, 3.216912896e-06f,
-3.215877342e-06f, 3.214836363e-06f, 3.213789962e-06f, 3.212738142e-06f, 3.211680905e-06f, 3.210618254e-06f, 3.209550191e-06f, 3.208476719e-06f, 3.207397841e-06f, 3.206313560e-06f,
-3.205223877e-06f, 3.204128796e-06f, 3.203028319e-06f, 3.201922450e-06f, 3.200811190e-06f, 3.199694542e-06f, 3.198572510e-06f, 3.197445096e-06f, 3.196312302e-06f, 3.195174131e-06f,
-3.194030587e-06f, 3.192881671e-06f, 3.191727388e-06f, 3.190567738e-06f, 3.189402726e-06f, 3.188232354e-06f, 3.187056624e-06f, 3.185875540e-06f, 3.184689105e-06f, 3.183497320e-06f,
-3.182300190e-06f, 3.181097717e-06f, 3.179889903e-06f, 3.178676753e-06f, 3.177458267e-06f, 3.176234451e-06f, 3.175005305e-06f, 3.173770834e-06f, 3.172531040e-06f, 3.171285925e-06f,
-3.170035494e-06f, 3.168779749e-06f, 3.167518692e-06f, 3.166252328e-06f, 3.164980658e-06f, 3.163703686e-06f, 3.162421414e-06f, 3.161133846e-06f, 3.159840985e-06f, 3.158542834e-06f,
-3.157239395e-06f, 3.155930673e-06f, 3.154616668e-06f, 3.153297386e-06f, 3.151972829e-06f, 3.150642999e-06f, 3.149307901e-06f, 3.147967536e-06f, 3.146621909e-06f, 3.145271022e-06f,
-3.143914878e-06f, 3.142553481e-06f, 3.141186833e-06f, 3.139814939e-06f, 3.138437799e-06f, 3.137055419e-06f, 3.135667801e-06f, 3.134274949e-06f, 3.132876865e-06f, 3.131473552e-06f,
-3.130065015e-06f, 3.128651255e-06f, 3.127232277e-06f, 3.125808083e-06f, 3.124378677e-06f, 3.122944061e-06f, 3.121504240e-06f, 3.120059217e-06f, 3.118608994e-06f, 3.117153575e-06f,
-3.115692963e-06f, 3.114227161e-06f, 3.112756174e-06f, 3.111280003e-06f, 3.109798653e-06f, 3.108312127e-06f, 3.106820428e-06f, 3.105323559e-06f, 3.103821523e-06f, 3.102314325e-06f,
-3.100801967e-06f, 3.099284453e-06f, 3.097761787e-06f, 3.096233970e-06f, 3.094701008e-06f, 3.093162903e-06f, 3.091619659e-06f, 3.090071279e-06f, 3.088517767e-06f, 3.086959125e-06f,
-3.085395358e-06f, 3.083826469e-06f, 3.082252462e-06f, 3.080673339e-06f, 3.079089105e-06f, 3.077499763e-06f, 3.075905315e-06f, 3.074305767e-06f, 3.072701121e-06f, 3.071091381e-06f,
-3.069476550e-06f, 3.067856633e-06f, 3.066231631e-06f, 3.064601550e-06f, 3.062966392e-06f, 3.061326162e-06f, 3.059680862e-06f, 3.058030496e-06f, 3.056375069e-06f, 3.054714583e-06f,
-3.053049042e-06f, 3.051378450e-06f, 3.049702810e-06f, 3.048022126e-06f, 3.046336402e-06f, 3.044645641e-06f, 3.042949847e-06f, 3.041249024e-06f, 3.039543175e-06f, 3.037832304e-06f,
-3.036116415e-06f, 3.034395511e-06f, 3.032669596e-06f, 3.030938674e-06f, 3.029202749e-06f, 3.027461824e-06f, 3.025715902e-06f, 3.023964989e-06f, 3.022209087e-06f, 3.020448201e-06f,
-3.018682333e-06f, 3.016911489e-06f, 3.015135671e-06f, 3.013354883e-06f, 3.011569130e-06f, 3.009778414e-06f, 3.007982741e-06f, 3.006182113e-06f, 3.004376535e-06f, 3.002566011e-06f,
-3.000750543e-06f, 2.998930137e-06f, 2.997104796e-06f, 2.995274523e-06f, 2.993439323e-06f, 2.991599200e-06f, 2.989754158e-06f, 2.987904200e-06f, 2.986049330e-06f, 2.984189553e-06f,
-2.982324872e-06f, 2.980455291e-06f, 2.978580814e-06f, 2.976701445e-06f, 2.974817189e-06f, 2.972928048e-06f, 2.971034028e-06f, 2.969135131e-06f, 2.967231363e-06f, 2.965322726e-06f,
-2.963409226e-06f, 2.961490865e-06f, 2.959567649e-06f, 2.957639581e-06f, 2.955706665e-06f, 2.953768905e-06f, 2.951826306e-06f, 2.949878871e-06f, 2.947926604e-06f, 2.945969510e-06f,
-2.944007592e-06f, 2.942040855e-06f, 2.940069303e-06f, 2.938092940e-06f, 2.936111770e-06f, 2.934125797e-06f, 2.932135026e-06f, 2.930139459e-06f, 2.928139103e-06f, 2.926133960e-06f,
-2.924124036e-06f, 2.922109333e-06f, 2.920089857e-06f, 2.918065611e-06f, 2.916036600e-06f, 2.914002828e-06f, 2.911964299e-06f, 2.909921017e-06f, 2.907872987e-06f, 2.905820213e-06f,
-2.903762699e-06f, 2.901700449e-06f, 2.899633468e-06f, 2.897561760e-06f, 2.895485329e-06f, 2.893404179e-06f, 2.891318315e-06f, 2.889227741e-06f, 2.887132462e-06f, 2.885032481e-06f,
-2.882927803e-06f, 2.880818432e-06f, 2.878704373e-06f, 2.876585630e-06f, 2.874462207e-06f, 2.872334109e-06f, 2.870201340e-06f, 2.868063904e-06f, 2.865921806e-06f, 2.863775051e-06f,
-2.861623642e-06f, 2.859467584e-06f, 2.857306881e-06f, 2.855141538e-06f, 2.852971560e-06f, 2.850796950e-06f, 2.848617713e-06f, 2.846433854e-06f, 2.844245377e-06f, 2.842052287e-06f,
-2.839854587e-06f, 2.837652283e-06f, 2.835445379e-06f, 2.833233879e-06f, 2.831017789e-06f, 2.828797111e-06f, 2.826571852e-06f, 2.824342015e-06f, 2.822107606e-06f, 2.819868627e-06f,
-2.817625085e-06f, 2.815376984e-06f, 2.813124327e-06f, 2.810867121e-06f, 2.808605369e-06f, 2.806339075e-06f, 2.804068246e-06f, 2.801792884e-06f, 2.799512995e-06f, 2.797228584e-06f,
-2.794939654e-06f, 2.792646211e-06f, 2.790348259e-06f, 2.788045803e-06f, 2.785738848e-06f, 2.783427397e-06f, 2.781111457e-06f, 2.778791031e-06f, 2.776466124e-06f, 2.774136740e-06f,
-2.771802886e-06f, 2.769464564e-06f, 2.767121781e-06f, 2.764774540e-06f, 2.762422846e-06f, 2.760066704e-06f, 2.757706120e-06f, 2.755341096e-06f, 2.752971639e-06f, 2.750597753e-06f,
-2.748219443e-06f, 2.745836713e-06f, 2.743449569e-06f, 2.741058015e-06f, 2.738662055e-06f, 2.736261695e-06f, 2.733856940e-06f, 2.731447794e-06f, 2.729034262e-06f, 2.726616349e-06f,
-2.724194060e-06f, 2.721767399e-06f, 2.719336372e-06f, 2.716900983e-06f, 2.714461237e-06f, 2.712017139e-06f, 2.709568694e-06f, 2.707115907e-06f, 2.704658782e-06f, 2.702197325e-06f,
-2.699731540e-06f, 2.697261433e-06f, 2.694787008e-06f, 2.692308270e-06f, 2.689825224e-06f, 2.687337874e-06f, 2.684846227e-06f, 2.682350287e-06f, 2.679850059e-06f, 2.677345547e-06f,
-2.674836757e-06f, 2.672323694e-06f, 2.669806362e-06f, 2.667284768e-06f, 2.664758914e-06f, 2.662228808e-06f, 2.659694453e-06f, 2.657155855e-06f, 2.654613018e-06f, 2.652065949e-06f,
-2.649514651e-06f, 2.646959130e-06f, 2.644399390e-06f, 2.641835438e-06f, 2.639267277e-06f, 2.636694914e-06f, 2.634118352e-06f, 2.631537598e-06f, 2.628952656e-06f, 2.626363531e-06f,
-2.623770229e-06f, 2.621172754e-06f, 2.618571112e-06f, 2.615965308e-06f, 2.613355346e-06f, 2.610741233e-06f, 2.608122972e-06f, 2.605500570e-06f, 2.602874032e-06f, 2.600243362e-06f,
-2.597608566e-06f, 2.594969648e-06f, 2.592326615e-06f, 2.589679471e-06f, 2.587028221e-06f, 2.584372872e-06f, 2.581713427e-06f, 2.579049892e-06f, 2.576382272e-06f, 2.573710573e-06f,
-2.571034799e-06f, 2.568354957e-06f, 2.565671050e-06f, 2.562983086e-06f, 2.560291067e-06f, 2.557595001e-06f, 2.554894892e-06f, 2.552190745e-06f, 2.549482566e-06f, 2.546770361e-06f,
-2.544054133e-06f, 2.541333889e-06f, 2.538609634e-06f, 2.535881373e-06f, 2.533149112e-06f, 2.530412856e-06f, 2.527672609e-06f, 2.524928379e-06f, 2.522180169e-06f, 2.519427985e-06f,
-2.516671833e-06f, 2.513911718e-06f, 2.511147645e-06f, 2.508379619e-06f, 2.505607647e-06f, 2.502831733e-06f, 2.500051883e-06f, 2.497268101e-06f, 2.494480395e-06f, 2.491688768e-06f,
-2.488893227e-06f, 2.486093777e-06f, 2.483290422e-06f, 2.480483170e-06f, 2.477672024e-06f, 2.474856991e-06f, 2.472038076e-06f, 2.469215284e-06f, 2.466388621e-06f, 2.463558093e-06f,
-2.460723704e-06f, 2.457885461e-06f, 2.455043368e-06f, 2.452197432e-06f, 2.449347657e-06f, 2.446494050e-06f, 2.443636615e-06f, 2.440775358e-06f, 2.437910286e-06f, 2.435041402e-06f,
-2.432168714e-06f, 2.429292226e-06f, 2.426411943e-06f, 2.423527873e-06f, 2.420640019e-06f, 2.417748387e-06f, 2.414852984e-06f, 2.411953815e-06f, 2.409050884e-06f, 2.406144199e-06f,
-2.403233764e-06f, 2.400319585e-06f, 2.397401668e-06f, 2.394480018e-06f, 2.391554640e-06f, 2.388625542e-06f, 2.385692727e-06f, 2.382756202e-06f, 2.379815972e-06f, 2.376872043e-06f,
-2.373924421e-06f, 2.370973111e-06f, 2.368018119e-06f, 2.365059451e-06f, 2.362097111e-06f, 2.359131107e-06f, 2.356161443e-06f, 2.353188126e-06f, 2.350211160e-06f, 2.347230552e-06f,
-2.344246308e-06f, 2.341258432e-06f, 2.338266932e-06f, 2.335271811e-06f, 2.332273077e-06f, 2.329270735e-06f, 2.326264790e-06f, 2.323255249e-06f, 2.320242117e-06f, 2.317225400e-06f,
-2.314205103e-06f, 2.311181233e-06f, 2.308153795e-06f, 2.305122795e-06f, 2.302088239e-06f, 2.299050132e-06f, 2.296008480e-06f, 2.292963289e-06f, 2.289914565e-06f, 2.286862314e-06f,
-2.283806541e-06f, 2.280747253e-06f, 2.277684455e-06f, 2.274618152e-06f, 2.271548351e-06f, 2.268475058e-06f, 2.265398278e-06f, 2.262318017e-06f, 2.259234282e-06f, 2.256147077e-06f,
-2.253056409e-06f, 2.249962284e-06f, 2.246864708e-06f, 2.243763685e-06f, 2.240659223e-06f, 2.237551327e-06f, 2.234440004e-06f, 2.231325258e-06f, 2.228207096e-06f, 2.225085524e-06f,
-2.221960547e-06f, 2.218832172e-06f, 2.215700405e-06f, 2.212565251e-06f, 2.209426716e-06f, 2.206284806e-06f, 2.203139528e-06f, 2.199990887e-06f, 2.196838889e-06f, 2.193683540e-06f,
-2.190524846e-06f, 2.187362814e-06f, 2.184197448e-06f, 2.181028755e-06f, 2.177856741e-06f, 2.174681412e-06f, 2.171502773e-06f, 2.168320832e-06f, 2.165135594e-06f, 2.161947064e-06f,
-2.158755249e-06f, 2.155560156e-06f, 2.152361789e-06f, 2.149160155e-06f, 2.145955260e-06f, 2.142747110e-06f, 2.139535711e-06f, 2.136321070e-06f, 2.133103191e-06f, 2.129882081e-06f,
-2.126657747e-06f, 2.123430194e-06f, 2.120199429e-06f, 2.116965457e-06f, 2.113728284e-06f, 2.110487917e-06f, 2.107244362e-06f, 2.103997625e-06f, 2.100747711e-06f, 2.097494627e-06f,
-2.094238380e-06f, 2.090978974e-06f, 2.087716417e-06f, 2.084450715e-06f, 2.081181872e-06f, 2.077909897e-06f, 2.074634794e-06f, 2.071356570e-06f, 2.068075231e-06f, 2.064790784e-06f,
-2.061503234e-06f, 2.058212587e-06f, 2.054918850e-06f, 2.051622029e-06f, 2.048322129e-06f, 2.045019158e-06f, 2.041713121e-06f, 2.038404025e-06f, 2.035091876e-06f, 2.031776679e-06f,
-2.028458441e-06f, 2.025137169e-06f, 2.021812868e-06f, 2.018485545e-06f, 2.015155206e-06f, 2.011821857e-06f, 2.008485504e-06f, 2.005146154e-06f, 2.001803813e-06f, 1.998458486e-06f,
-1.995110181e-06f, 1.991758903e-06f, 1.988404659e-06f, 1.985047455e-06f, 1.981687298e-06f, 1.978324192e-06f, 1.974958146e-06f, 1.971589165e-06f, 1.968217254e-06f, 1.964842422e-06f,
-1.961464673e-06f, 1.958084015e-06f, 1.954700453e-06f, 1.951313993e-06f, 1.947924643e-06f, 1.944532408e-06f, 1.941137294e-06f, 1.937739308e-06f, 1.934338457e-06f, 1.930934746e-06f,
-1.927528182e-06f, 1.924118772e-06f, 1.920706520e-06f, 1.917291435e-06f, 1.913873522e-06f, 1.910452787e-06f, 1.907029237e-06f, 1.903602878e-06f, 1.900173717e-06f, 1.896741760e-06f,
-1.893307013e-06f, 1.889869483e-06f, 1.886429176e-06f, 1.882986098e-06f, 1.879540256e-06f, 1.876091656e-06f, 1.872640305e-06f, 1.869186208e-06f, 1.865729373e-06f, 1.862269805e-06f,
-1.858807512e-06f, 1.855342499e-06f, 1.851874773e-06f, 1.848404340e-06f, 1.844931207e-06f, 1.841455380e-06f, 1.837976866e-06f, 1.834495671e-06f, 1.831011801e-06f, 1.827525263e-06f,
-1.824036063e-06f, 1.820544208e-06f, 1.817049704e-06f, 1.813552557e-06f, 1.810052775e-06f, 1.806550363e-06f, 1.803045328e-06f, 1.799537677e-06f, 1.796027416e-06f, 1.792514550e-06f,
-1.788999088e-06f, 1.785481035e-06f, 1.781960398e-06f, 1.778437183e-06f, 1.774911397e-06f, 1.771383046e-06f, 1.767852137e-06f, 1.764318676e-06f, 1.760782670e-06f, 1.757244125e-06f,
-1.753703048e-06f, 1.750159445e-06f, 1.746613323e-06f, 1.743064688e-06f, 1.739513547e-06f, 1.735959906e-06f, 1.732403772e-06f, 1.728845152e-06f, 1.725284052e-06f, 1.721720478e-06f,
-1.718154437e-06f, 1.714585935e-06f, 1.711014980e-06f, 1.707441577e-06f, 1.703865734e-06f, 1.700287456e-06f, 1.696706751e-06f, 1.693123624e-06f, 1.689538083e-06f, 1.685950134e-06f,
-1.682359784e-06f, 1.678767039e-06f, 1.675171905e-06f, 1.671574390e-06f, 1.667974500e-06f, 1.664372241e-06f, 1.660767621e-06f, 1.657160645e-06f, 1.653551321e-06f, 1.649939654e-06f,
-1.646325652e-06f, 1.642709321e-06f, 1.639090668e-06f, 1.635469699e-06f, 1.631846421e-06f, 1.628220841e-06f, 1.624592965e-06f, 1.620962800e-06f, 1.617330352e-06f, 1.613695629e-06f,
-1.610058636e-06f, 1.606419380e-06f, 1.602777869e-06f, 1.599134108e-06f, 1.595488105e-06f, 1.591839865e-06f, 1.588189397e-06f, 1.584536705e-06f, 1.580881798e-06f, 1.577224681e-06f,
-1.573565361e-06f, 1.569903845e-06f, 1.566240140e-06f, 1.562574252e-06f, 1.558906188e-06f, 1.555235955e-06f, 1.551563559e-06f, 1.547889007e-06f, 1.544212306e-06f, 1.540533462e-06f,
-1.536852482e-06f, 1.533169373e-06f, 1.529484142e-06f, 1.525796794e-06f, 1.522107338e-06f, 1.518415779e-06f, 1.514722125e-06f, 1.511026381e-06f, 1.507328555e-06f, 1.503628654e-06f,
-1.499926684e-06f, 1.496222651e-06f, 1.492516564e-06f, 1.488808427e-06f, 1.485098249e-06f, 1.481386035e-06f, 1.477671793e-06f, 1.473955530e-06f, 1.470237251e-06f, 1.466516964e-06f,
-1.462794676e-06f, 1.459070393e-06f, 1.455344121e-06f, 1.451615869e-06f, 1.447885642e-06f, 1.444153448e-06f, 1.440419292e-06f, 1.436683182e-06f, 1.432945125e-06f, 1.429205127e-06f,
-1.425463196e-06f, 1.421719337e-06f, 1.417973558e-06f, 1.414225865e-06f, 1.410476265e-06f, 1.406724766e-06f, 1.402971373e-06f, 1.399216094e-06f, 1.395458935e-06f, 1.391699903e-06f,
-1.387939005e-06f, 1.384176248e-06f, 1.380411638e-06f, 1.376645183e-06f, 1.372876889e-06f, 1.369106763e-06f, 1.365334811e-06f, 1.361561042e-06f, 1.357785460e-06f, 1.354008074e-06f,
-1.350228889e-06f, 1.346447914e-06f, 1.342665154e-06f, 1.338880616e-06f, 1.335094308e-06f, 1.331306236e-06f, 1.327516407e-06f, 1.323724828e-06f, 1.319931505e-06f, 1.316136445e-06f,
-1.312339656e-06f, 1.308541144e-06f, 1.304740916e-06f, 1.300938979e-06f, 1.297135339e-06f, 1.293330004e-06f, 1.289522980e-06f, 1.285714275e-06f, 1.281903894e-06f, 1.278091845e-06f,
-1.274278135e-06f, 1.270462771e-06f, 1.266645759e-06f, 1.262827106e-06f, 1.259006819e-06f, 1.255184906e-06f, 1.251361372e-06f, 1.247536225e-06f, 1.243709472e-06f, 1.239881120e-06f,
-1.236051174e-06f, 1.232219644e-06f, 1.228386534e-06f, 1.224551852e-06f, 1.220715605e-06f, 1.216877800e-06f, 1.213038444e-06f, 1.209197543e-06f, 1.205355104e-06f, 1.201511135e-06f,
-1.197665642e-06f, 1.193818633e-06f, 1.189970113e-06f, 1.186120090e-06f, 1.182268571e-06f, 1.178415563e-06f, 1.174561073e-06f, 1.170705106e-06f, 1.166847672e-06f, 1.162988775e-06f,
-1.159128424e-06f, 1.155266625e-06f, 1.151403385e-06f, 1.147538711e-06f, 1.143672610e-06f, 1.139805089e-06f, 1.135936155e-06f, 1.132065814e-06f, 1.128194073e-06f, 1.124320940e-06f,
-1.120446422e-06f, 1.116570524e-06f, 1.112693255e-06f, 1.108814622e-06f, 1.104934630e-06f, 1.101053287e-06f, 1.097170600e-06f, 1.093286576e-06f, 1.089401222e-06f, 1.085514545e-06f,
-1.081626551e-06f, 1.077737248e-06f, 1.073846643e-06f, 1.069954742e-06f, 1.066061552e-06f, 1.062167081e-06f, 1.058271335e-06f, 1.054374322e-06f, 1.050476047e-06f, 1.046576519e-06f,
-1.042675744e-06f, 1.038773729e-06f, 1.034870481e-06f, 1.030966007e-06f, 1.027060313e-06f, 1.023153408e-06f, 1.019245298e-06f, 1.015335989e-06f, 1.011425489e-06f, 1.007513804e-06f,
-1.003600943e-06f, 9.996869106e-07f, 9.957717151e-07f, 9.918553631e-07f, 9.879378615e-07f, 9.840192174e-07f, 9.800994378e-07f, 9.761785295e-07f, 9.722564995e-07f, 9.683333549e-07f,
-9.644091026e-07f, 9.604837495e-07f, 9.565573026e-07f, 9.526297689e-07f, 9.487011554e-07f, 9.447714690e-07f, 9.408407168e-07f, 9.369089056e-07f, 9.329760425e-07f, 9.290421344e-07f,
-9.251071883e-07f, 9.211712113e-07f, 9.172342102e-07f, 9.132961920e-07f, 9.093571638e-07f, 9.054171325e-07f, 9.014761051e-07f, 8.975340885e-07f, 8.935910898e-07f, 8.896471160e-07f,
-8.857021740e-07f, 8.817562708e-07f, 8.778094134e-07f, 8.738616088e-07f, 8.699128639e-07f, 8.659631858e-07f, 8.620125814e-07f, 8.580610578e-07f, 8.541086219e-07f, 8.501552807e-07f,
-8.462010412e-07f, 8.422459105e-07f, 8.382898953e-07f, 8.343330029e-07f, 8.303752402e-07f, 8.264166141e-07f, 8.224571316e-07f, 8.184967998e-07f, 8.145356257e-07f, 8.105736162e-07f,
-8.066107783e-07f, 8.026471191e-07f, 7.986826455e-07f, 7.947173645e-07f, 7.907512831e-07f, 7.867844084e-07f, 7.828167472e-07f, 7.788483067e-07f, 7.748790938e-07f, 7.709091155e-07f,
-7.669383788e-07f, 7.629668907e-07f, 7.589946583e-07f, 7.550216884e-07f, 7.510479881e-07f, 7.470735645e-07f, 7.430984244e-07f, 7.391225750e-07f, 7.351460232e-07f, 7.311687759e-07f,
-7.271908403e-07f, 7.232122234e-07f, 7.192329320e-07f, 7.152529732e-07f, 7.112723541e-07f, 7.072910816e-07f, 7.033091627e-07f, 6.993266044e-07f, 6.953434138e-07f, 6.913595978e-07f,
-6.873751634e-07f, 6.833901177e-07f, 6.794044676e-07f, 6.754182202e-07f, 6.714313824e-07f, 6.674439612e-07f, 6.634559637e-07f, 6.594673969e-07f, 6.554782677e-07f, 6.514885831e-07f,
-6.474983503e-07f, 6.435075761e-07f, 6.395162675e-07f, 6.355244316e-07f, 6.315320754e-07f, 6.275392059e-07f, 6.235458301e-07f, 6.195519549e-07f, 6.155575874e-07f, 6.115627346e-07f,
-6.075674034e-07f, 6.035716010e-07f, 5.995753342e-07f, 5.955786101e-07f, 5.915814357e-07f, 5.875838180e-07f, 5.835857640e-07f, 5.795872807e-07f, 5.755883750e-07f, 5.715890541e-07f,
-5.675893248e-07f, 5.635891942e-07f, 5.595886693e-07f, 5.555877570e-07f, 5.515864645e-07f, 5.475847986e-07f, 5.435827664e-07f, 5.395803748e-07f, 5.355776309e-07f, 5.315745417e-07f,
-5.275711141e-07f, 5.235673552e-07f, 5.195632719e-07f, 5.155588713e-07f, 5.115541603e-07f, 5.075491459e-07f, 5.035438351e-07f, 4.995382349e-07f, 4.955323524e-07f, 4.915261944e-07f,
-4.875197680e-07f, 4.835130802e-07f, 4.795061380e-07f, 4.754989483e-07f, 4.714915181e-07f, 4.674838545e-07f, 4.634759644e-07f, 4.594678548e-07f, 4.554595326e-07f, 4.514510050e-07f,
-4.474422788e-07f, 4.434333610e-07f, 4.394242586e-07f, 4.354149787e-07f, 4.314055281e-07f, 4.273959140e-07f, 4.233861431e-07f, 4.193762226e-07f, 4.153661594e-07f, 4.113559605e-07f,
-4.073456328e-07f, 4.033351834e-07f, 3.993246192e-07f, 3.953139471e-07f, 3.913031743e-07f, 3.872923076e-07f, 3.832813539e-07f, 3.792703204e-07f, 3.752592139e-07f, 3.712480414e-07f,
-3.672368099e-07f, 3.632255264e-07f, 3.592141978e-07f, 3.552028311e-07f, 3.511914332e-07f, 3.471800111e-07f, 3.431685719e-07f, 3.391571223e-07f, 3.351456695e-07f, 3.311342203e-07f,
-3.271227818e-07f, 3.231113608e-07f, 3.190999644e-07f, 3.150885995e-07f, 3.110772730e-07f, 3.070659919e-07f, 3.030547632e-07f, 2.990435938e-07f, 2.950324906e-07f, 2.910214607e-07f,
-2.870105109e-07f, 2.829996482e-07f, 2.789888795e-07f, 2.749782119e-07f, 2.709676521e-07f, 2.669572073e-07f, 2.629468843e-07f, 2.589366900e-07f, 2.549266314e-07f, 2.509167155e-07f,
-2.469069491e-07f, 2.428973393e-07f, 2.388878929e-07f, 2.348786168e-07f, 2.308695181e-07f, 2.268606036e-07f, 2.228518802e-07f, 2.188433550e-07f, 2.148350348e-07f, 2.108269265e-07f,
-2.068190370e-07f, 2.028113734e-07f, 1.988039424e-07f, 1.947967511e-07f, 1.907898063e-07f, 1.867831149e-07f, 1.827766840e-07f, 1.787705203e-07f, 1.747646308e-07f, 1.707590224e-07f,
-1.667537021e-07f, 1.627486766e-07f, 1.587439530e-07f, 1.547395381e-07f, 1.507354388e-07f, 1.467316621e-07f, 1.427282148e-07f, 1.387251038e-07f, 1.347223361e-07f, 1.307199185e-07f,
-1.267178578e-07f, 1.227161611e-07f, 1.187148352e-07f, 1.147138870e-07f, 1.107133233e-07f, 1.067131511e-07f, 1.027133773e-07f, 9.871400862e-08f, 9.471505207e-08f, 9.071651449e-08f,
-8.671840277e-08f, 8.272072377e-08f, 7.872348437e-08f, 7.472669145e-08f, 7.073035186e-08f, 6.673447247e-08f, 6.273906016e-08f, 5.874412179e-08f, 5.474966421e-08f, 5.075569429e-08f,
-4.676221888e-08f, 4.276924485e-08f, 3.877677905e-08f, 3.478482832e-08f, 3.079339953e-08f, 2.680249951e-08f, 2.281213512e-08f, 1.882231320e-08f, 1.483304060e-08f, 1.084432415e-08f,
-6.856170695e-09f, 2.868587072e-09f, -1.118419885e-09f, -5.104843341e-09f, -9.090676466e-09f, -1.307591243e-08f, -1.706054441e-08f, -2.104456557e-08f, -2.502796910e-08f, -2.901074818e-08f,
--3.299289597e-08f, -3.697440568e-08f, -4.095527048e-08f, -4.493548355e-08f, -4.891503810e-08f, -5.289392731e-08f, -5.687214438e-08f, -6.084968250e-08f, -6.482653487e-08f, -6.880269468e-08f,
--7.277815515e-08f, -7.675290948e-08f, -8.072695087e-08f, -8.470027254e-08f, -8.867286769e-08f, -9.264472953e-08f, -9.661585130e-08f, -1.005862262e-07f, -1.045558474e-07f, -1.085247083e-07f,
--1.124928019e-07f, -1.164601215e-07f, -1.204266605e-07f, -1.243924119e-07f, -1.283573690e-07f, -1.323215251e-07f, -1.362848734e-07f, -1.402474071e-07f, -1.442091195e-07f, -1.481700039e-07f,
--1.521300534e-07f, -1.560892614e-07f, -1.600476210e-07f, -1.640051256e-07f, -1.679617684e-07f, -1.719175427e-07f, -1.758724416e-07f, -1.798264586e-07f, -1.837795868e-07f, -1.877318196e-07f,
--1.916831502e-07f, -1.956335718e-07f, -1.995830778e-07f, -2.035316615e-07f, -2.074793161e-07f, -2.114260349e-07f, -2.153718112e-07f, -2.193166383e-07f, -2.232605094e-07f, -2.272034180e-07f,
--2.311453572e-07f, -2.350863204e-07f, -2.390263010e-07f, -2.429652921e-07f, -2.469032871e-07f, -2.508402794e-07f, -2.547762621e-07f, -2.587112288e-07f, -2.626451726e-07f, -2.665780869e-07f,
--2.705099651e-07f, -2.744408004e-07f, -2.783705862e-07f, -2.822993158e-07f, -2.862269826e-07f, -2.901535798e-07f, -2.940791010e-07f, -2.980035393e-07f, -3.019268882e-07f, -3.058491409e-07f,
--3.097702910e-07f, -3.136903316e-07f, -3.176092562e-07f, -3.215270581e-07f, -3.254437307e-07f, -3.293592674e-07f, -3.332736615e-07f, -3.371869065e-07f, -3.410989956e-07f, -3.450099223e-07f,
--3.489196800e-07f, -3.528282620e-07f, -3.567356618e-07f, -3.606418727e-07f, -3.645468881e-07f, -3.684507014e-07f, -3.723533061e-07f, -3.762546955e-07f, -3.801548631e-07f, -3.840538022e-07f,
--3.879515063e-07f, -3.918479687e-07f, -3.957431830e-07f, -3.996371425e-07f, -4.035298407e-07f, -4.074212709e-07f, -4.113114267e-07f, -4.152003014e-07f, -4.190878886e-07f, -4.229741815e-07f,
--4.268591738e-07f, -4.307428588e-07f, -4.346252300e-07f, -4.385062809e-07f, -4.423860048e-07f, -4.462643953e-07f, -4.501414459e-07f, -4.540171500e-07f, -4.578915010e-07f, -4.617644925e-07f,
--4.656361179e-07f, -4.695063708e-07f, -4.733752445e-07f, -4.772427326e-07f, -4.811088286e-07f, -4.849735260e-07f, -4.888368182e-07f, -4.926986989e-07f, -4.965591614e-07f, -5.004181993e-07f,
--5.042758061e-07f, -5.081319753e-07f, -5.119867005e-07f, -5.158399751e-07f, -5.196917928e-07f, -5.235421469e-07f, -5.273910311e-07f, -5.312384389e-07f, -5.350843638e-07f, -5.389287994e-07f,
--5.427717392e-07f, -5.466131768e-07f, -5.504531057e-07f, -5.542915195e-07f, -5.581284117e-07f, -5.619637760e-07f, -5.657976058e-07f, -5.696298948e-07f, -5.734606366e-07f, -5.772898246e-07f,
--5.811174525e-07f, -5.849435139e-07f, -5.887680024e-07f, -5.925909115e-07f, -5.964122349e-07f, -6.002319662e-07f, -6.040500989e-07f, -6.078666267e-07f, -6.116815432e-07f, -6.154948421e-07f,
--6.193065168e-07f, -6.231165611e-07f, -6.269249686e-07f, -6.307317328e-07f, -6.345368476e-07f, -6.383403064e-07f, -6.421421029e-07f, -6.459422309e-07f, -6.497406838e-07f, -6.535374554e-07f,
--6.573325394e-07f, -6.611259294e-07f, -6.649176190e-07f, -6.687076020e-07f, -6.724958719e-07f, -6.762824226e-07f, -6.800672476e-07f, -6.838503407e-07f, -6.876316956e-07f, -6.914113058e-07f,
--6.951891652e-07f, -6.989652675e-07f, -7.027396063e-07f, -7.065121753e-07f, -7.102829683e-07f, -7.140519790e-07f, -7.178192010e-07f, -7.215846282e-07f, -7.253482543e-07f, -7.291100730e-07f,
--7.328700779e-07f, -7.366282630e-07f, -7.403846218e-07f, -7.441391483e-07f, -7.478918360e-07f, -7.516426788e-07f, -7.553916705e-07f, -7.591388047e-07f, -7.628840754e-07f, -7.666274761e-07f,
--7.703690008e-07f, -7.741086432e-07f, -7.778463971e-07f, -7.815822563e-07f, -7.853162146e-07f, -7.890482657e-07f, -7.927784036e-07f, -7.965066219e-07f, -8.002329145e-07f, -8.039572753e-07f,
--8.076796980e-07f, -8.114001764e-07f, -8.151187045e-07f, -8.188352760e-07f, -8.225498847e-07f, -8.262625245e-07f, -8.299731893e-07f, -8.336818730e-07f, -8.373885692e-07f, -8.410932720e-07f,
--8.447959752e-07f, -8.484966726e-07f, -8.521953581e-07f, -8.558920257e-07f, -8.595866691e-07f, -8.632792823e-07f, -8.669698591e-07f, -8.706583935e-07f, -8.743448794e-07f, -8.780293106e-07f,
--8.817116810e-07f, -8.853919847e-07f, -8.890702154e-07f, -8.927463671e-07f, -8.964204338e-07f, -9.000924094e-07f, -9.037622877e-07f, -9.074300628e-07f, -9.110957286e-07f, -9.147592790e-07f,
--9.184207080e-07f, -9.220800095e-07f, -9.257371775e-07f, -9.293922060e-07f, -9.330450890e-07f, -9.366958204e-07f, -9.403443942e-07f, -9.439908043e-07f, -9.476350449e-07f, -9.512771098e-07f,
--9.549169931e-07f, -9.585546887e-07f, -9.621901908e-07f, -9.658234932e-07f, -9.694545900e-07f, -9.730834753e-07f, -9.767101430e-07f, -9.803345873e-07f, -9.839568020e-07f, -9.875767814e-07f,
--9.911945193e-07f, -9.948100099e-07f, -9.984232473e-07f, -1.002034225e-06f, -1.005642938e-06f, -1.009249380e-06f, -1.012853545e-06f, -1.016455427e-06f, -1.020055020e-06f, -1.023652319e-06f,
--1.027247316e-06f, -1.030840008e-06f, -1.034430386e-06f, -1.038018447e-06f, -1.041604183e-06f, -1.045187589e-06f, -1.048768659e-06f, -1.052347387e-06f, -1.055923767e-06f, -1.059497794e-06f,
--1.063069462e-06f, -1.066638764e-06f, -1.070205695e-06f, -1.073770249e-06f, -1.077332420e-06f, -1.080892202e-06f, -1.084449590e-06f, -1.088004578e-06f, -1.091557160e-06f, -1.095107329e-06f,
--1.098655081e-06f, -1.102200410e-06f, -1.105743309e-06f, -1.109283773e-06f, -1.112821795e-06f, -1.116357372e-06f, -1.119890496e-06f, -1.123421161e-06f, -1.126949363e-06f, -1.130475094e-06f,
--1.133998351e-06f, -1.137519126e-06f, -1.141037414e-06f, -1.144553209e-06f, -1.148066505e-06f, -1.151577298e-06f, -1.155085580e-06f, -1.158591347e-06f, -1.162094593e-06f, -1.165595311e-06f,
--1.169093496e-06f, -1.172589143e-06f, -1.176082246e-06f, -1.179572799e-06f, -1.183060797e-06f, -1.186546233e-06f, -1.190029102e-06f, -1.193509398e-06f, -1.196987117e-06f, -1.200462251e-06f,
--1.203934796e-06f, -1.207404746e-06f, -1.210872095e-06f, -1.214336837e-06f, -1.217798967e-06f, -1.221258480e-06f, -1.224715369e-06f, -1.228169629e-06f, -1.231621255e-06f, -1.235070240e-06f,
--1.238516580e-06f, -1.241960268e-06f, -1.245401300e-06f, -1.248839668e-06f, -1.252275369e-06f, -1.255708396e-06f, -1.259138744e-06f, -1.262566407e-06f, -1.265991379e-06f, -1.269413656e-06f,
--1.272833231e-06f, -1.276250100e-06f, -1.279664255e-06f, -1.283075693e-06f, -1.286484407e-06f, -1.289890392e-06f, -1.293293642e-06f, -1.296694153e-06f, -1.300091917e-06f, -1.303486931e-06f,
--1.306879188e-06f, -1.310268683e-06f, -1.313655410e-06f, -1.317039365e-06f, -1.320420541e-06f, -1.323798933e-06f, -1.327174535e-06f, -1.330547343e-06f, -1.333917350e-06f, -1.337284552e-06f,
--1.340648943e-06f, -1.344010517e-06f, -1.347369269e-06f, -1.350725193e-06f, -1.354078285e-06f, -1.357428539e-06f, -1.360775949e-06f, -1.364120510e-06f, -1.367462216e-06f, -1.370801063e-06f,
--1.374137044e-06f, -1.377470155e-06f, -1.380800391e-06f, -1.384127745e-06f, -1.387452212e-06f, -1.390773787e-06f, -1.394092465e-06f, -1.397408241e-06f, -1.400721108e-06f, -1.404031063e-06f,
--1.407338098e-06f, -1.410642210e-06f, -1.413943393e-06f, -1.417241641e-06f, -1.420536949e-06f, -1.423829313e-06f, -1.427118726e-06f, -1.430405183e-06f, -1.433688679e-06f, -1.436969210e-06f,
--1.440246768e-06f, -1.443521350e-06f, -1.446792951e-06f, -1.450061564e-06f, -1.453327184e-06f, -1.456589807e-06f, -1.459849428e-06f, -1.463106040e-06f, -1.466359639e-06f, -1.469610219e-06f,
--1.472857776e-06f, -1.476102304e-06f, -1.479343798e-06f, -1.482582252e-06f, -1.485817662e-06f, -1.489050023e-06f, -1.492279329e-06f, -1.495505575e-06f, -1.498728756e-06f, -1.501948867e-06f,
--1.505165902e-06f, -1.508379857e-06f, -1.511590727e-06f, -1.514798506e-06f, -1.518003189e-06f, -1.521204771e-06f, -1.524403247e-06f, -1.527598612e-06f, -1.530790860e-06f, -1.533979988e-06f,
--1.537165989e-06f, -1.540348859e-06f, -1.543528592e-06f, -1.546705184e-06f, -1.549878629e-06f, -1.553048922e-06f, -1.556216059e-06f, -1.559380034e-06f, -1.562540842e-06f, -1.565698479e-06f,
--1.568852939e-06f, -1.572004217e-06f, -1.575152308e-06f, -1.578297207e-06f, -1.581438910e-06f, -1.584577411e-06f, -1.587712705e-06f, -1.590844787e-06f, -1.593973653e-06f, -1.597099297e-06f,
--1.600221715e-06f, -1.603340901e-06f, -1.606456851e-06f, -1.609569559e-06f, -1.612679021e-06f, -1.615785232e-06f, -1.618888186e-06f, -1.621987880e-06f, -1.625084307e-06f, -1.628177464e-06f,
--1.631267345e-06f, -1.634353946e-06f, -1.637437261e-06f, -1.640517285e-06f, -1.643594014e-06f, -1.646667444e-06f, -1.649737568e-06f, -1.652804383e-06f, -1.655867883e-06f, -1.658928063e-06f,
--1.661984919e-06f, -1.665038447e-06f, -1.668088640e-06f, -1.671135495e-06f, -1.674179006e-06f, -1.677219169e-06f, -1.680255978e-06f, -1.683289430e-06f, -1.686319520e-06f, -1.689346242e-06f,
--1.692369592e-06f, -1.695389565e-06f, -1.698406156e-06f, -1.701419361e-06f, -1.704429175e-06f, -1.707435593e-06f, -1.710438611e-06f, -1.713438223e-06f, -1.716434425e-06f, -1.719427213e-06f,
--1.722416581e-06f, -1.725402526e-06f, -1.728385041e-06f, -1.731364124e-06f, -1.734339768e-06f, -1.737311969e-06f, -1.740280723e-06f, -1.743246025e-06f, -1.746207871e-06f, -1.749166255e-06f,
--1.752121173e-06f, -1.755072621e-06f, -1.758020594e-06f, -1.760965086e-06f, -1.763906095e-06f, -1.766843615e-06f, -1.769777641e-06f, -1.772708169e-06f, -1.775635194e-06f, -1.778558712e-06f,
--1.781478718e-06f, -1.784395208e-06f, -1.787308177e-06f, -1.790217621e-06f, -1.793123534e-06f, -1.796025914e-06f, -1.798924754e-06f, -1.801820050e-06f, -1.804711799e-06f, -1.807599995e-06f,
--1.810484634e-06f, -1.813365712e-06f, -1.816243224e-06f, -1.819117165e-06f, -1.821987531e-06f, -1.824854318e-06f, -1.827717521e-06f, -1.830577136e-06f, -1.833433159e-06f, -1.836285584e-06f,
--1.839134408e-06f, -1.841979625e-06f, -1.844821233e-06f, -1.847659225e-06f, -1.850493599e-06f, -1.853324348e-06f, -1.856151470e-06f, -1.858974960e-06f, -1.861794813e-06f, -1.864611025e-06f,
--1.867423592e-06f, -1.870232509e-06f, -1.873037772e-06f, -1.875839376e-06f, -1.878637318e-06f, -1.881431593e-06f, -1.884222196e-06f, -1.887009124e-06f, -1.889792372e-06f, -1.892571936e-06f,
--1.895347811e-06f, -1.898119993e-06f, -1.900888479e-06f, -1.903653263e-06f, -1.906414341e-06f, -1.909171710e-06f, -1.911925364e-06f, -1.914675301e-06f, -1.917421514e-06f, -1.920164001e-06f,
--1.922902758e-06f, -1.925637779e-06f, -1.928369060e-06f, -1.931096598e-06f, -1.933820389e-06f, -1.936540427e-06f, -1.939256709e-06f, -1.941969232e-06f, -1.944677989e-06f, -1.947382979e-06f,
--1.950084195e-06f, -1.952781635e-06f, -1.955475294e-06f, -1.958165168e-06f, -1.960851252e-06f, -1.963533544e-06f, -1.966212038e-06f, -1.968886730e-06f, -1.971557617e-06f, -1.974224695e-06f,
--1.976887959e-06f, -1.979547405e-06f, -1.982203029e-06f, -1.984854827e-06f, -1.987502796e-06f, -1.990146930e-06f, -1.992787227e-06f, -1.995423681e-06f, -1.998056290e-06f, -2.000685049e-06f,
--2.003309954e-06f, -2.005931000e-06f, -2.008548185e-06f, -2.011161504e-06f, -2.013770953e-06f, -2.016376528e-06f, -2.018978226e-06f, -2.021576041e-06f, -2.024169971e-06f, -2.026760012e-06f,
--2.029346159e-06f, -2.031928408e-06f, -2.034506756e-06f, -2.037081199e-06f, -2.039651732e-06f, -2.042218353e-06f, -2.044781057e-06f, -2.047339839e-06f, -2.049894698e-06f, -2.052445627e-06f,
--2.054992625e-06f, -2.057535686e-06f, -2.060074807e-06f, -2.062609984e-06f, -2.065141214e-06f, -2.067668492e-06f, -2.070191815e-06f, -2.072711178e-06f, -2.075226579e-06f, -2.077738013e-06f,
--2.080245477e-06f, -2.082748966e-06f, -2.085248478e-06f, -2.087744008e-06f, -2.090235552e-06f, -2.092723107e-06f, -2.095206669e-06f, -2.097686234e-06f, -2.100161799e-06f, -2.102633360e-06f,
--2.105100914e-06f, -2.107564455e-06f, -2.110023982e-06f, -2.112479489e-06f, -2.114930975e-06f, -2.117378434e-06f, -2.119821863e-06f, -2.122261258e-06f, -2.124696617e-06f, -2.127127935e-06f,
--2.129555208e-06f, -2.131978433e-06f, -2.134397607e-06f, -2.136812726e-06f, -2.139223785e-06f, -2.141630783e-06f, -2.144033714e-06f, -2.146432576e-06f, -2.148827364e-06f, -2.151218076e-06f,
--2.153604708e-06f, -2.155987256e-06f, -2.158365717e-06f, -2.160740087e-06f, -2.163110362e-06f, -2.165476540e-06f, -2.167838616e-06f, -2.170196588e-06f, -2.172550451e-06f, -2.174900202e-06f,
--2.177245838e-06f, -2.179587355e-06f, -2.181924750e-06f, -2.184258020e-06f, -2.186587160e-06f, -2.188912168e-06f, -2.191233039e-06f, -2.193549772e-06f, -2.195862361e-06f, -2.198170804e-06f,
--2.200475098e-06f, -2.202775239e-06f, -2.205071223e-06f, -2.207363047e-06f, -2.209650709e-06f, -2.211934204e-06f, -2.214213529e-06f, -2.216488681e-06f, -2.218759656e-06f, -2.221026452e-06f,
--2.223289064e-06f, -2.225547490e-06f, -2.227801726e-06f, -2.230051769e-06f, -2.232297616e-06f, -2.234539263e-06f, -2.236776707e-06f, -2.239009945e-06f, -2.241238974e-06f, -2.243463790e-06f,
--2.245684390e-06f, -2.247900771e-06f, -2.250112929e-06f, -2.252320862e-06f, -2.254524566e-06f, -2.256724038e-06f, -2.258919275e-06f, -2.261110274e-06f, -2.263297031e-06f, -2.265479543e-06f,
--2.267657807e-06f, -2.269831820e-06f, -2.272001579e-06f, -2.274167081e-06f, -2.276328322e-06f, -2.278485300e-06f, -2.280638011e-06f, -2.282786452e-06f, -2.284930620e-06f, -2.287070512e-06f,
--2.289206125e-06f, -2.291337455e-06f, -2.293464501e-06f, -2.295587258e-06f, -2.297705724e-06f, -2.299819895e-06f, -2.301929769e-06f, -2.304035343e-06f, -2.306136613e-06f, -2.308233576e-06f,
--2.310326230e-06f, -2.312414572e-06f, -2.314498598e-06f, -2.316578305e-06f, -2.318653691e-06f, -2.320724753e-06f, -2.322791487e-06f, -2.324853890e-06f, -2.326911961e-06f, -2.328965695e-06f,
--2.331015090e-06f, -2.333060144e-06f, -2.335100852e-06f, -2.337137212e-06f, -2.339169221e-06f, -2.341196877e-06f, -2.343220177e-06f, -2.345239117e-06f, -2.347253694e-06f, -2.349263907e-06f,
--2.351269751e-06f, -2.353271225e-06f, -2.355268325e-06f, -2.357261049e-06f, -2.359249393e-06f, -2.361233355e-06f, -2.363212933e-06f, -2.365188123e-06f, -2.367158922e-06f, -2.369125328e-06f,
--2.371087338e-06f, -2.373044949e-06f, -2.374998159e-06f, -2.376946965e-06f, -2.378891363e-06f, -2.380831352e-06f, -2.382766929e-06f, -2.384698090e-06f, -2.386624834e-06f, -2.388547157e-06f,
--2.390465056e-06f, -2.392378530e-06f, -2.394287576e-06f, -2.396192190e-06f, -2.398092370e-06f, -2.399988114e-06f, -2.401879418e-06f, -2.403766281e-06f, -2.405648700e-06f, -2.407526671e-06f,
--2.409400193e-06f, -2.411269262e-06f, -2.413133877e-06f, -2.414994034e-06f, -2.416849731e-06f, -2.418700966e-06f, -2.420547736e-06f, -2.422390038e-06f, -2.424227870e-06f, -2.426061229e-06f,
--2.427890113e-06f, -2.429714520e-06f, -2.431534446e-06f, -2.433349889e-06f, -2.435160847e-06f, -2.436967317e-06f, -2.438769297e-06f, -2.440566785e-06f, -2.442359777e-06f, -2.444148272e-06f,
--2.445932267e-06f, -2.447711759e-06f, -2.449486746e-06f, -2.451257226e-06f, -2.453023197e-06f, -2.454784655e-06f, -2.456541599e-06f, -2.458294026e-06f, -2.460041934e-06f, -2.461785320e-06f,
--2.463524182e-06f, -2.465258518e-06f, -2.466988325e-06f, -2.468713601e-06f, -2.470434343e-06f, -2.472150550e-06f, -2.473862220e-06f, -2.475569348e-06f, -2.477271935e-06f, -2.478969976e-06f,
--2.480663470e-06f, -2.482352415e-06f, -2.484036808e-06f, -2.485716647e-06f, -2.487391931e-06f, -2.489062655e-06f, -2.490728819e-06f, -2.492390421e-06f, -2.494047457e-06f, -2.495699926e-06f,
--2.497347825e-06f, -2.498991153e-06f, -2.500629907e-06f, -2.502264085e-06f, -2.503893684e-06f, -2.505518704e-06f, -2.507139141e-06f, -2.508754993e-06f, -2.510366259e-06f, -2.511972936e-06f,
--2.513575022e-06f, -2.515172515e-06f, -2.516765412e-06f, -2.518353713e-06f, -2.519937414e-06f, -2.521516513e-06f, -2.523091010e-06f, -2.524660900e-06f, -2.526226183e-06f, -2.527786857e-06f,
--2.529342919e-06f, -2.530894367e-06f, -2.532441200e-06f, -2.533983415e-06f, -2.535521010e-06f, -2.537053983e-06f, -2.538582333e-06f, -2.540106058e-06f, -2.541625154e-06f, -2.543139621e-06f,
--2.544649457e-06f, -2.546154660e-06f, -2.547655226e-06f, -2.549151156e-06f, -2.550642447e-06f, -2.552129096e-06f, -2.553611103e-06f, -2.555088464e-06f, -2.556561179e-06f, -2.558029245e-06f,
--2.559492661e-06f, -2.560951424e-06f, -2.562405534e-06f, -2.563854987e-06f, -2.565299782e-06f, -2.566739918e-06f, -2.568175392e-06f, -2.569606203e-06f, -2.571032349e-06f, -2.572453827e-06f,
--2.573870638e-06f, -2.575282777e-06f, -2.576690245e-06f, -2.578093039e-06f, -2.579491157e-06f, -2.580884597e-06f, -2.582273359e-06f, -2.583657439e-06f, -2.585036837e-06f, -2.586411551e-06f,
--2.587781578e-06f, -2.589146918e-06f, -2.590507569e-06f, -2.591863528e-06f, -2.593214795e-06f, -2.594561367e-06f, -2.595903244e-06f, -2.597240423e-06f, -2.598572902e-06f, -2.599900681e-06f,
--2.601223757e-06f, -2.602542129e-06f, -2.603855796e-06f, -2.605164755e-06f, -2.606469005e-06f, -2.607768545e-06f, -2.609063373e-06f, -2.610353487e-06f, -2.611638887e-06f, -2.612919569e-06f,
--2.614195534e-06f, -2.615466778e-06f, -2.616733302e-06f, -2.617995103e-06f, -2.619252180e-06f, -2.620504531e-06f, -2.621752155e-06f, -2.622995050e-06f, -2.624233215e-06f, -2.625466649e-06f,
--2.626695350e-06f, -2.627919316e-06f, -2.629138547e-06f, -2.630353040e-06f, -2.631562794e-06f, -2.632767809e-06f, -2.633968082e-06f, -2.635163612e-06f, -2.636354398e-06f, -2.637540439e-06f,
--2.638721732e-06f, -2.639898278e-06f, -2.641070073e-06f, -2.642237118e-06f, -2.643399410e-06f, -2.644556949e-06f, -2.645709733e-06f, -2.646857760e-06f, -2.648001030e-06f, -2.649139542e-06f,
--2.650273293e-06f, -2.651402283e-06f, -2.652526510e-06f, -2.653645974e-06f, -2.654760672e-06f, -2.655870604e-06f, -2.656975769e-06f, -2.658076164e-06f, -2.659171790e-06f, -2.660262645e-06f,
--2.661348727e-06f, -2.662430036e-06f, -2.663506570e-06f, -2.664578328e-06f, -2.665645309e-06f, -2.666707512e-06f, -2.667764936e-06f, -2.668817579e-06f, -2.669865440e-06f, -2.670908519e-06f,
--2.671946814e-06f, -2.672980325e-06f, -2.674009049e-06f, -2.675032986e-06f, -2.676052135e-06f, -2.677066495e-06f, -2.678076065e-06f, -2.679080843e-06f, -2.680080829e-06f, -2.681076022e-06f,
--2.682066420e-06f, -2.683052023e-06f, -2.684032830e-06f, -2.685008839e-06f, -2.685980050e-06f, -2.686946461e-06f, -2.687908072e-06f, -2.688864882e-06f, -2.689816890e-06f, -2.690764094e-06f,
--2.691706494e-06f, -2.692644089e-06f, -2.693576879e-06f, -2.694504861e-06f, -2.695428036e-06f, -2.696346401e-06f, -2.697259958e-06f, -2.698168704e-06f, -2.699072638e-06f, -2.699971761e-06f,
--2.700866070e-06f, -2.701755566e-06f, -2.702640247e-06f, -2.703520112e-06f, -2.704395161e-06f, -2.705265393e-06f, -2.706130807e-06f, -2.706991402e-06f, -2.707847178e-06f, -2.708698133e-06f,
--2.709544267e-06f, -2.710385580e-06f, -2.711222070e-06f, -2.712053737e-06f, -2.712880579e-06f, -2.713702597e-06f, -2.714519789e-06f, -2.715332155e-06f, -2.716139695e-06f, -2.716942406e-06f,
--2.717740290e-06f, -2.718533344e-06f, -2.719321569e-06f, -2.720104964e-06f, -2.720883528e-06f, -2.721657260e-06f, -2.722426160e-06f, -2.723190227e-06f, -2.723949461e-06f, -2.724703861e-06f,
--2.725453426e-06f, -2.726198156e-06f, -2.726938051e-06f, -2.727673109e-06f, -2.728403330e-06f, -2.729128713e-06f, -2.729849259e-06f, -2.730564966e-06f, -2.731275834e-06f, -2.731981862e-06f,
--2.732683050e-06f, -2.733379398e-06f, -2.734070904e-06f, -2.734757569e-06f, -2.735439392e-06f, -2.736116373e-06f, -2.736788510e-06f, -2.737455804e-06f, -2.738118254e-06f, -2.738775859e-06f,
--2.739428620e-06f, -2.740076536e-06f, -2.740719606e-06f, -2.741357830e-06f, -2.741991208e-06f, -2.742619739e-06f, -2.743243423e-06f, -2.743862259e-06f, -2.744476248e-06f, -2.745085388e-06f,
--2.745689680e-06f, -2.746289123e-06f, -2.746883716e-06f, -2.747473460e-06f, -2.748058354e-06f, -2.748638399e-06f, -2.749213592e-06f, -2.749783935e-06f, -2.750349427e-06f, -2.750910068e-06f,
--2.751465857e-06f, -2.752016794e-06f, -2.752562879e-06f, -2.753104112e-06f, -2.753640493e-06f, -2.754172021e-06f, -2.754698696e-06f, -2.755220518e-06f, -2.755737487e-06f, -2.756249602e-06f,
--2.756756864e-06f, -2.757259272e-06f, -2.757756825e-06f, -2.758249525e-06f, -2.758737371e-06f, -2.759220362e-06f, -2.759698499e-06f, -2.760171781e-06f, -2.760640208e-06f, -2.761103781e-06f,
--2.761562498e-06f, -2.762016361e-06f, -2.762465369e-06f, -2.762909521e-06f, -2.763348818e-06f, -2.763783261e-06f, -2.764212847e-06f, -2.764637579e-06f, -2.765057455e-06f, -2.765472476e-06f,
--2.765882642e-06f, -2.766287952e-06f, -2.766688408e-06f, -2.767084007e-06f, -2.767474752e-06f, -2.767860641e-06f, -2.768241675e-06f, -2.768617854e-06f, -2.768989179e-06f, -2.769355648e-06f,
--2.769717262e-06f, -2.770074021e-06f, -2.770425926e-06f, -2.770772976e-06f, -2.771115171e-06f, -2.771452512e-06f, -2.771784999e-06f, -2.772112632e-06f, -2.772435411e-06f, -2.772753336e-06f,
--2.773066408e-06f, -2.773374626e-06f, -2.773677991e-06f, -2.773976502e-06f, -2.774270161e-06f, -2.774558967e-06f, -2.774842921e-06f, -2.775122022e-06f, -2.775396271e-06f, -2.775665669e-06f,
--2.775930215e-06f, -2.776189910e-06f, -2.776444754e-06f, -2.776694747e-06f, -2.776939889e-06f, -2.777180182e-06f, -2.777415624e-06f, -2.777646217e-06f, -2.777871961e-06f, -2.778092856e-06f,
--2.778308902e-06f, -2.778520100e-06f, -2.778726451e-06f, -2.778927953e-06f, -2.779124609e-06f, -2.779316417e-06f, -2.779503380e-06f, -2.779685496e-06f, -2.779862766e-06f, -2.780035192e-06f,
--2.780202772e-06f, -2.780365509e-06f, -2.780523401e-06f, -2.780676450e-06f, -2.780824655e-06f, -2.780968019e-06f, -2.781106539e-06f, -2.781240219e-06f, -2.781369057e-06f, -2.781493054e-06f,
--2.781612212e-06f, -2.781726529e-06f, -2.781836008e-06f, -2.781940648e-06f, -2.782040449e-06f, -2.782135413e-06f, -2.782225541e-06f, -2.782310831e-06f, -2.782391286e-06f, -2.782466906e-06f,
--2.782537690e-06f, -2.782603641e-06f, -2.782664758e-06f, -2.782721042e-06f, -2.782772494e-06f, -2.782819114e-06f, -2.782860903e-06f, -2.782897861e-06f, -2.782929990e-06f, -2.782957290e-06f,
--2.782979761e-06f, -2.782997405e-06f, -2.783010221e-06f, -2.783018211e-06f, -2.783021375e-06f, -2.783019714e-06f, -2.783013229e-06f, -2.783001921e-06f, -2.782985789e-06f, -2.782964836e-06f,
--2.782939061e-06f, -2.782908465e-06f, -2.782873050e-06f, -2.782832816e-06f, -2.782787763e-06f, -2.782737893e-06f, -2.782683206e-06f, -2.782623704e-06f, -2.782559386e-06f, -2.782490254e-06f,
--2.782416308e-06f, -2.782337551e-06f, -2.782253981e-06f, -2.782165600e-06f, -2.782072410e-06f, -2.781974410e-06f, -2.781871602e-06f, -2.781763987e-06f, -2.781651565e-06f, -2.781534338e-06f,
--2.781412306e-06f, -2.781285470e-06f, -2.781153832e-06f, -2.781017391e-06f, -2.780876150e-06f, -2.780730109e-06f, -2.780579268e-06f, -2.780423630e-06f, -2.780263195e-06f, -2.780097963e-06f,
--2.779927937e-06f, -2.779753116e-06f, -2.779573503e-06f, -2.779389097e-06f, -2.779199900e-06f, -2.779005914e-06f, -2.778807138e-06f, -2.778603575e-06f, -2.778395224e-06f, -2.778182088e-06f,
--2.777964168e-06f, -2.777741464e-06f, -2.777513977e-06f, -2.777281709e-06f, -2.777044660e-06f, -2.776802833e-06f, -2.776556227e-06f, -2.776304844e-06f, -2.776048686e-06f, -2.775787753e-06f,
--2.775522047e-06f, -2.775251568e-06f, -2.774976318e-06f, -2.774696299e-06f, -2.774411510e-06f, -2.774121954e-06f, -2.773827632e-06f, -2.773528544e-06f, -2.773224693e-06f, -2.772916079e-06f,
--2.772602703e-06f, -2.772284567e-06f, -2.771961673e-06f, -2.771634020e-06f, -2.771301612e-06f, -2.770964448e-06f, -2.770622530e-06f, -2.770275860e-06f, -2.769924439e-06f, -2.769568267e-06f,
--2.769207347e-06f, -2.768841680e-06f, -2.768471267e-06f, -2.768096109e-06f, -2.767716208e-06f, -2.767331565e-06f, -2.766942182e-06f, -2.766548059e-06f, -2.766149199e-06f, -2.765745603e-06f,
--2.765337271e-06f, -2.764924206e-06f, -2.764506409e-06f, -2.764083881e-06f, -2.763656623e-06f, -2.763224638e-06f, -2.762787927e-06f, -2.762346490e-06f, -2.761900330e-06f, -2.761449448e-06f,
--2.760993846e-06f, -2.760533524e-06f, -2.760068485e-06f, -2.759598730e-06f, -2.759124261e-06f, -2.758645078e-06f, -2.758161184e-06f, -2.757672580e-06f, -2.757179268e-06f, -2.756681249e-06f,
--2.756178524e-06f, -2.755671096e-06f, -2.755158966e-06f, -2.754642135e-06f, -2.754120605e-06f, -2.753594378e-06f, -2.753063455e-06f, -2.752527837e-06f, -2.751987528e-06f, -2.751442527e-06f,
--2.750892838e-06f, -2.750338460e-06f, -2.749779397e-06f, -2.749215649e-06f, -2.748647219e-06f, -2.748074108e-06f, -2.747496317e-06f, -2.746913849e-06f, -2.746326706e-06f, -2.745734888e-06f,
--2.745138397e-06f, -2.744537236e-06f, -2.743931406e-06f, -2.743320909e-06f, -2.742705746e-06f, -2.742085919e-06f, -2.741461431e-06f, -2.740832282e-06f, -2.740198475e-06f, -2.739560012e-06f,
--2.738916893e-06f, -2.738269122e-06f, -2.737616699e-06f, -2.736959627e-06f, -2.736297907e-06f, -2.735631542e-06f, -2.734960533e-06f, -2.734284882e-06f, -2.733604590e-06f, -2.732919661e-06f,
--2.732230095e-06f, -2.731535894e-06f, -2.730837061e-06f, -2.730133597e-06f, -2.729425504e-06f, -2.728712784e-06f, -2.727995439e-06f, -2.727273471e-06f, -2.726546882e-06f, -2.725815673e-06f,
--2.725079848e-06f, -2.724339407e-06f, -2.723594353e-06f, -2.722844687e-06f, -2.722090412e-06f, -2.721331530e-06f, -2.720568042e-06f, -2.719799951e-06f, -2.719027259e-06f, -2.718249967e-06f,
--2.717468078e-06f, -2.716681593e-06f, -2.715890516e-06f, -2.715094847e-06f, -2.714294589e-06f, -2.713489744e-06f, -2.712680314e-06f, -2.711866301e-06f, -2.711047707e-06f, -2.710224535e-06f,
--2.709396786e-06f, -2.708564462e-06f, -2.707727567e-06f, -2.706886101e-06f, -2.706040066e-06f, -2.705189466e-06f, -2.704334302e-06f, -2.703474576e-06f, -2.702610291e-06f, -2.701741449e-06f,
--2.700868051e-06f, -2.699990101e-06f, -2.699107600e-06f, -2.698220550e-06f, -2.697328954e-06f, -2.696432813e-06f, -2.695532131e-06f, -2.694626909e-06f, -2.693717150e-06f, -2.692802856e-06f,
--2.691884029e-06f, -2.690960671e-06f, -2.690032785e-06f, -2.689100372e-06f, -2.688163436e-06f, -2.687221978e-06f, -2.686276002e-06f, -2.685325508e-06f, -2.684370500e-06f, -2.683410979e-06f,
--2.682446949e-06f, -2.681478411e-06f, -2.680505368e-06f, -2.679527821e-06f, -2.678545775e-06f, -2.677559230e-06f, -2.676568190e-06f, -2.675572656e-06f, -2.674572631e-06f, -2.673568117e-06f,
--2.672559118e-06f, -2.671545634e-06f, -2.670527670e-06f, -2.669505226e-06f, -2.668478306e-06f, -2.667446912e-06f, -2.666411046e-06f, -2.665370711e-06f, -2.664325910e-06f, -2.663276644e-06f,
--2.662222917e-06f, -2.661164730e-06f, -2.660102087e-06f, -2.659034989e-06f, -2.657963440e-06f, -2.656887442e-06f, -2.655806997e-06f, -2.654722107e-06f, -2.653632777e-06f, -2.652539007e-06f,
--2.651440801e-06f, -2.650338160e-06f, -2.649231089e-06f, -2.648119589e-06f, -2.647003662e-06f, -2.645883312e-06f, -2.644758541e-06f, -2.643629351e-06f, -2.642495746e-06f, -2.641357728e-06f,
--2.640215299e-06f, -2.639068462e-06f, -2.637917220e-06f, -2.636761575e-06f, -2.635601530e-06f, -2.634437088e-06f, -2.633268252e-06f, -2.632095023e-06f, -2.630917406e-06f, -2.629735401e-06f,
--2.628549013e-06f, -2.627358244e-06f, -2.626163096e-06f, -2.624963573e-06f, -2.623759676e-06f, -2.622551410e-06f, -2.621338775e-06f, -2.620121777e-06f, -2.618900416e-06f, -2.617674695e-06f,
--2.616444619e-06f, -2.615210189e-06f, -2.613971407e-06f, -2.612728278e-06f, -2.611480804e-06f, -2.610228987e-06f, -2.608972830e-06f, -2.607712336e-06f, -2.606447509e-06f, -2.605178350e-06f,
--2.603904863e-06f, -2.602627050e-06f, -2.601344915e-06f, -2.600058460e-06f, -2.598767688e-06f, -2.597472602e-06f, -2.596173205e-06f, -2.594869500e-06f, -2.593561489e-06f, -2.592249176e-06f,
--2.590932563e-06f, -2.589611654e-06f, -2.588286451e-06f, -2.586956958e-06f, -2.585623176e-06f, -2.584285110e-06f, -2.582942762e-06f, -2.581596135e-06f, -2.580245232e-06f, -2.578890056e-06f,
--2.577530610e-06f, -2.576166897e-06f, -2.574798920e-06f, -2.573426682e-06f, -2.572050186e-06f, -2.570669435e-06f, -2.569284433e-06f, -2.567895181e-06f, -2.566501683e-06f, -2.565103943e-06f,
--2.563701963e-06f, -2.562295746e-06f, -2.560885295e-06f, -2.559470614e-06f, -2.558051705e-06f, -2.556628572e-06f, -2.555201218e-06f, -2.553769646e-06f, -2.552333858e-06f, -2.550893859e-06f,
--2.549449650e-06f, -2.548001236e-06f, -2.546548619e-06f, -2.545091803e-06f, -2.543630791e-06f, -2.542165585e-06f, -2.540696190e-06f, -2.539222607e-06f, -2.537744841e-06f, -2.536262895e-06f,
--2.534776771e-06f, -2.533286474e-06f, -2.531792005e-06f, -2.530293369e-06f, -2.528790568e-06f, -2.527283606e-06f, -2.525772487e-06f, -2.524257212e-06f, -2.522737786e-06f, -2.521214212e-06f,
--2.519686493e-06f, -2.518154632e-06f, -2.516618632e-06f, -2.515078498e-06f, -2.513534232e-06f, -2.511985837e-06f, -2.510433317e-06f, -2.508876674e-06f, -2.507315913e-06f, -2.505751037e-06f,
--2.504182049e-06f, -2.502608952e-06f, -2.501031750e-06f, -2.499450446e-06f, -2.497865043e-06f, -2.496275545e-06f, -2.494681954e-06f, -2.493084276e-06f, -2.491482512e-06f, -2.489876666e-06f,
--2.488266742e-06f, -2.486652743e-06f, -2.485034672e-06f, -2.483412533e-06f, -2.481786330e-06f, -2.480156065e-06f, -2.478521742e-06f, -2.476883364e-06f, -2.475240936e-06f, -2.473594460e-06f,
--2.471943940e-06f, -2.470289379e-06f, -2.468630781e-06f, -2.466968149e-06f, -2.465301487e-06f, -2.463630798e-06f, -2.461956086e-06f, -2.460277355e-06f, -2.458594607e-06f, -2.456907846e-06f,
--2.455217076e-06f, -2.453522300e-06f, -2.451823523e-06f, -2.450120746e-06f, -2.448413975e-06f, -2.446703212e-06f, -2.444988461e-06f, -2.443269726e-06f, -2.441547010e-06f, -2.439820317e-06f,
--2.438089650e-06f, -2.436355013e-06f, -2.434616409e-06f, -2.432873843e-06f, -2.431127318e-06f, -2.429376837e-06f, -2.427622404e-06f, -2.425864022e-06f, -2.424101696e-06f, -2.422335429e-06f,
--2.420565224e-06f, -2.418791086e-06f, -2.417013017e-06f, -2.415231022e-06f, -2.413445105e-06f, -2.411655268e-06f, -2.409861515e-06f, -2.408063851e-06f, -2.406262279e-06f, -2.404456803e-06f,
--2.402647426e-06f, -2.400834153e-06f, -2.399016986e-06f, -2.397195929e-06f, -2.395370987e-06f, -2.393542163e-06f, -2.391709461e-06f, -2.389872885e-06f, -2.388032437e-06f, -2.386188123e-06f,
--2.384339946e-06f, -2.382487909e-06f, -2.380632017e-06f, -2.378772273e-06f, -2.376908681e-06f, -2.375041245e-06f, -2.373169968e-06f, -2.371294855e-06f, -2.369415909e-06f, -2.367533134e-06f,
--2.365646534e-06f, -2.363756113e-06f, -2.361861875e-06f, -2.359963823e-06f, -2.358061961e-06f, -2.356156294e-06f, -2.354246825e-06f, -2.352333557e-06f, -2.350416496e-06f, -2.348495644e-06f,
--2.346571006e-06f, -2.344642585e-06f, -2.342710386e-06f, -2.340774412e-06f, -2.338834667e-06f, -2.336891156e-06f, -2.334943882e-06f, -2.332992848e-06f, -2.331038060e-06f, -2.329079520e-06f,
--2.327117234e-06f, -2.325151204e-06f, -2.323181436e-06f, -2.321207932e-06f, -2.319230696e-06f, -2.317249734e-06f, -2.315265048e-06f, -2.313276643e-06f, -2.311284523e-06f, -2.309288692e-06f,
--2.307289153e-06f, -2.305285911e-06f, -2.303278970e-06f, -2.301268334e-06f, -2.299254006e-06f, -2.297235992e-06f, -2.295214294e-06f, -2.293188918e-06f, -2.291159867e-06f, -2.289127145e-06f,
--2.287090756e-06f, -2.285050704e-06f, -2.283006994e-06f, -2.280959629e-06f, -2.278908614e-06f, -2.276853952e-06f, -2.274795648e-06f, -2.272733707e-06f, -2.270668131e-06f, -2.268598925e-06f,
--2.266526094e-06f, -2.264449640e-06f, -2.262369570e-06f, -2.260285886e-06f, -2.258198593e-06f, -2.256107695e-06f, -2.254013196e-06f, -2.251915101e-06f, -2.249813413e-06f, -2.247708136e-06f,
--2.245599276e-06f, -2.243486835e-06f, -2.241370819e-06f, -2.239251231e-06f, -2.237128076e-06f, -2.235001358e-06f, -2.232871081e-06f, -2.230737249e-06f, -2.228599867e-06f, -2.226458939e-06f,
--2.224314468e-06f, -2.222166460e-06f, -2.220014918e-06f, -2.217859848e-06f, -2.215701252e-06f, -2.213539135e-06f, -2.211373502e-06f, -2.209204357e-06f, -2.207031705e-06f, -2.204855548e-06f,
--2.202675892e-06f, -2.200492742e-06f, -2.198306101e-06f, -2.196115973e-06f, -2.193922363e-06f, -2.191725276e-06f, -2.189524715e-06f, -2.187320685e-06f, -2.185113191e-06f, -2.182902236e-06f,
--2.180687825e-06f, -2.178469963e-06f, -2.176248653e-06f, -2.174023901e-06f, -2.171795710e-06f, -2.169564084e-06f, -2.167329029e-06f, -2.165090549e-06f, -2.162848647e-06f, -2.160603329e-06f,
--2.158354599e-06f, -2.156102460e-06f, -2.153846919e-06f, -2.151587978e-06f, -2.149325643e-06f, -2.147059918e-06f, -2.144790807e-06f, -2.142518315e-06f, -2.140242447e-06f, -2.137963205e-06f,
--2.135680596e-06f, -2.133394624e-06f, -2.131105292e-06f, -2.128812606e-06f, -2.126516571e-06f, -2.124217189e-06f, -2.121914467e-06f, -2.119608408e-06f, -2.117299016e-06f, -2.114986298e-06f,
--2.112670256e-06f, -2.110350896e-06f, -2.108028222e-06f, -2.105702238e-06f, -2.103372949e-06f, -2.101040360e-06f, -2.098704475e-06f, -2.096365299e-06f, -2.094022836e-06f, -2.091677090e-06f,
--2.089328067e-06f, -2.086975771e-06f, -2.084620206e-06f, -2.082261378e-06f, -2.079899289e-06f, -2.077533946e-06f, -2.075165353e-06f, -2.072793514e-06f, -2.070418434e-06f, -2.068040118e-06f,
--2.065658570e-06f, -2.063273794e-06f, -2.060885796e-06f, -2.058494580e-06f, -2.056100151e-06f, -2.053702513e-06f, -2.051301671e-06f, -2.048897629e-06f, -2.046490393e-06f, -2.044079966e-06f,
--2.041666354e-06f, -2.039249561e-06f, -2.036829592e-06f, -2.034406451e-06f, -2.031980144e-06f, -2.029550674e-06f, -2.027118047e-06f, -2.024682268e-06f, -2.022243340e-06f, -2.019801269e-06f,
--2.017356059e-06f, -2.014907715e-06f, -2.012456242e-06f, -2.010001644e-06f, -2.007543927e-06f, -2.005083095e-06f, -2.002619152e-06f, -2.000152104e-06f, -1.997681954e-06f, -1.995208709e-06f,
--1.992732372e-06f, -1.990252949e-06f, -1.987770444e-06f, -1.985284862e-06f, -1.982796207e-06f, -1.980304485e-06f, -1.977809701e-06f, -1.975311858e-06f, -1.972810962e-06f, -1.970307018e-06f,
--1.967800030e-06f, -1.965290003e-06f, -1.962776943e-06f, -1.960260853e-06f, -1.957741739e-06f, -1.955219605e-06f, -1.952694457e-06f, -1.950166298e-06f, -1.947635135e-06f, -1.945100972e-06f,
--1.942563813e-06f, -1.940023663e-06f, -1.937480528e-06f, -1.934934413e-06f, -1.932385321e-06f, -1.929833258e-06f, -1.927278229e-06f, -1.924720239e-06f, -1.922159292e-06f, -1.919595394e-06f,
--1.917028548e-06f, -1.914458762e-06f, -1.911886038e-06f, -1.909310382e-06f, -1.906731799e-06f, -1.904150294e-06f, -1.901565872e-06f, -1.898978538e-06f, -1.896388296e-06f, -1.893795151e-06f,
--1.891199109e-06f, -1.888600174e-06f, -1.885998352e-06f, -1.883393647e-06f, -1.880786064e-06f, -1.878175608e-06f, -1.875562285e-06f, -1.872946098e-06f, -1.870327054e-06f, -1.867705156e-06f,
--1.865080411e-06f, -1.862452822e-06f, -1.859822396e-06f, -1.857189136e-06f, -1.854553048e-06f, -1.851914137e-06f, -1.849272408e-06f, -1.846627866e-06f, -1.843980516e-06f, -1.841330363e-06f,
--1.838677412e-06f, -1.836021668e-06f, -1.833363136e-06f, -1.830701820e-06f, -1.828037727e-06f, -1.825370861e-06f, -1.822701227e-06f, -1.820028830e-06f, -1.817353676e-06f, -1.814675769e-06f,
--1.811995114e-06f, -1.809311716e-06f, -1.806625581e-06f, -1.803936714e-06f, -1.801245119e-06f, -1.798550801e-06f, -1.795853767e-06f, -1.793154020e-06f, -1.790451566e-06f, -1.787746410e-06f,
--1.785038558e-06f, -1.782328013e-06f, -1.779614782e-06f, -1.776898870e-06f, -1.774180280e-06f, -1.771459020e-06f, -1.768735093e-06f, -1.766008505e-06f, -1.763279261e-06f, -1.760547367e-06f,
--1.757812826e-06f, -1.755075645e-06f, -1.752335829e-06f, -1.749593382e-06f, -1.746848310e-06f, -1.744100619e-06f, -1.741350312e-06f, -1.738597396e-06f, -1.735841875e-06f, -1.733083755e-06f,
--1.730323040e-06f, -1.727559737e-06f, -1.724793850e-06f, -1.722025384e-06f, -1.719254345e-06f, -1.716480738e-06f, -1.713704567e-06f, -1.710925839e-06f, -1.708144558e-06f, -1.705360730e-06f,
--1.702574359e-06f, -1.699785452e-06f, -1.696994012e-06f, -1.694200046e-06f, -1.691403559e-06f, -1.688604555e-06f, -1.685803041e-06f, -1.682999021e-06f, -1.680192501e-06f, -1.677383485e-06f,
--1.674571980e-06f, -1.671757989e-06f, -1.668941520e-06f, -1.666122576e-06f, -1.663301163e-06f, -1.660477287e-06f, -1.657650952e-06f, -1.654822164e-06f, -1.651990928e-06f, -1.649157250e-06f,
--1.646321135e-06f, -1.643482587e-06f, -1.640641613e-06f, -1.637798217e-06f, -1.634952405e-06f, -1.632104183e-06f, -1.629253554e-06f, -1.626400526e-06f, -1.623545103e-06f, -1.620687290e-06f,
--1.617827093e-06f, -1.614964516e-06f, -1.612099566e-06f, -1.609232248e-06f, -1.606362567e-06f, -1.603490528e-06f, -1.600616137e-06f, -1.597739399e-06f, -1.594860319e-06f, -1.591978903e-06f,
--1.589095156e-06f, -1.586209083e-06f, -1.583320690e-06f, -1.580429982e-06f, -1.577536965e-06f, -1.574641644e-06f, -1.571744023e-06f, -1.568844109e-06f, -1.565941908e-06f, -1.563037423e-06f,
--1.560130661e-06f, -1.557221627e-06f, -1.554310327e-06f, -1.551396766e-06f, -1.548480948e-06f, -1.545562881e-06f, -1.542642568e-06f, -1.539720016e-06f, -1.536795230e-06f, -1.533868215e-06f,
--1.530938977e-06f, -1.528007520e-06f, -1.525073852e-06f, -1.522137976e-06f, -1.519199898e-06f, -1.516259624e-06f, -1.513317160e-06f, -1.510372510e-06f, -1.507425680e-06f, -1.504476676e-06f,
--1.501525502e-06f, -1.498572165e-06f, -1.495616670e-06f, -1.492659022e-06f, -1.489699227e-06f, -1.486737290e-06f, -1.483773217e-06f, -1.480807012e-06f, -1.477838683e-06f, -1.474868233e-06f,
--1.471895669e-06f, -1.468920996e-06f, -1.465944219e-06f, -1.462965344e-06f, -1.459984377e-06f, -1.457001322e-06f, -1.454016186e-06f, -1.451028974e-06f, -1.448039691e-06f, -1.445048344e-06f,
--1.442054936e-06f, -1.439059474e-06f, -1.436061964e-06f, -1.433062411e-06f, -1.430060820e-06f, -1.427057196e-06f, -1.424051547e-06f, -1.421043876e-06f, -1.418034190e-06f, -1.415022493e-06f,
--1.412008792e-06f, -1.408993093e-06f, -1.405975399e-06f, -1.402955718e-06f, -1.399934055e-06f, -1.396910414e-06f, -1.393884803e-06f, -1.390857225e-06f, -1.387827688e-06f, -1.384796195e-06f,
--1.381762754e-06f, -1.378727369e-06f, -1.375690046e-06f, -1.372650791e-06f, -1.369609609e-06f, -1.366566505e-06f, -1.363521486e-06f, -1.360474557e-06f, -1.357425723e-06f, -1.354374990e-06f,
--1.351322363e-06f, -1.348267849e-06f, -1.345211452e-06f, -1.342153179e-06f, -1.339093035e-06f, -1.336031025e-06f, -1.332967155e-06f, -1.329901431e-06f, -1.326833858e-06f, -1.323764442e-06f,
--1.320693188e-06f, -1.317620102e-06f, -1.314545190e-06f, -1.311468458e-06f, -1.308389910e-06f, -1.305309553e-06f, -1.302227392e-06f, -1.299143432e-06f, -1.296057680e-06f, -1.292970141e-06f,
--1.289880821e-06f, -1.286789724e-06f, -1.283696858e-06f, -1.280602227e-06f, -1.277505837e-06f, -1.274407694e-06f, -1.271307803e-06f, -1.268206171e-06f, -1.265102802e-06f, -1.261997702e-06f,
--1.258890877e-06f, -1.255782333e-06f, -1.252672075e-06f, -1.249560109e-06f, -1.246446441e-06f, -1.243331075e-06f, -1.240214019e-06f, -1.237095277e-06f, -1.233974856e-06f, -1.230852760e-06f,
--1.227728996e-06f, -1.224603569e-06f, -1.221476485e-06f, -1.218347749e-06f, -1.215217368e-06f, -1.212085346e-06f, -1.208951691e-06f, -1.205816406e-06f, -1.202679498e-06f, -1.199540973e-06f,
--1.196400837e-06f, -1.193259094e-06f, -1.190115751e-06f, -1.186970813e-06f, -1.183824287e-06f, -1.180676177e-06f, -1.177526490e-06f, -1.174375231e-06f, -1.171222406e-06f, -1.168068020e-06f,
--1.164912080e-06f, -1.161754590e-06f, -1.158595558e-06f, -1.155434988e-06f, -1.152272886e-06f, -1.149109258e-06f, -1.145944109e-06f, -1.142777446e-06f, -1.139609273e-06f, -1.136439598e-06f,
--1.133268425e-06f, -1.130095760e-06f, -1.126921609e-06f, -1.123745978e-06f, -1.120568872e-06f, -1.117390297e-06f, -1.114210259e-06f, -1.111028763e-06f, -1.107845816e-06f, -1.104661423e-06f,
--1.101475590e-06f, -1.098288322e-06f, -1.095099626e-06f, -1.091909507e-06f, -1.088717970e-06f, -1.085525022e-06f, -1.082330668e-06f, -1.079134914e-06f, -1.075937766e-06f, -1.072739230e-06f,
--1.069539311e-06f, -1.066338015e-06f, -1.063135348e-06f, -1.059931315e-06f, -1.056725923e-06f, -1.053519176e-06f, -1.050311082e-06f, -1.047101645e-06f, -1.043890872e-06f, -1.040678768e-06f,
--1.037465339e-06f, -1.034250591e-06f, -1.031034529e-06f, -1.027817159e-06f, -1.024598488e-06f, -1.021378520e-06f, -1.018157262e-06f, -1.014934719e-06f, -1.011710898e-06f, -1.008485803e-06f,
--1.005259442e-06f, -1.002031819e-06f, -9.988029397e-07f, -9.955728110e-07f, -9.923414382e-07f, -9.891088272e-07f, -9.858749836e-07f, -9.826399134e-07f, -9.794036222e-07f, -9.761661160e-07f,
--9.729274004e-07f, -9.696874814e-07f, -9.664463646e-07f, -9.632040560e-07f, -9.599605612e-07f, -9.567158862e-07f, -9.534700367e-07f, -9.502230185e-07f, -9.469748375e-07f, -9.437254994e-07f,
--9.404750100e-07f, -9.372233752e-07f, -9.339706008e-07f, -9.307166926e-07f, -9.274616564e-07f, -9.242054981e-07f, -9.209482234e-07f, -9.176898381e-07f, -9.144303482e-07f, -9.111697593e-07f,
--9.079080774e-07f, -9.046453083e-07f, -9.013814577e-07f, -8.981165315e-07f, -8.948505355e-07f, -8.915834756e-07f, -8.883153576e-07f, -8.850461873e-07f, -8.817759705e-07f, -8.785047131e-07f,
--8.752324209e-07f, -8.719590998e-07f, -8.686847555e-07f, -8.654093940e-07f, -8.621330209e-07f, -8.588556423e-07f, -8.555772638e-07f, -8.522978915e-07f, -8.490175310e-07f, -8.457361882e-07f,
--8.424538690e-07f, -8.391705793e-07f, -8.358863248e-07f, -8.326011114e-07f, -8.293149449e-07f, -8.260278312e-07f, -8.227397762e-07f, -8.194507857e-07f, -8.161608654e-07f, -8.128700214e-07f,
--8.095782594e-07f, -8.062855852e-07f, -8.029920048e-07f, -7.996975239e-07f, -7.964021485e-07f, -7.931058844e-07f, -7.898087374e-07f, -7.865107133e-07f, -7.832118181e-07f, -7.799120576e-07f,
--7.766114377e-07f, -7.733099641e-07f, -7.700076429e-07f, -7.667044797e-07f, -7.634004805e-07f, -7.600956511e-07f, -7.567899975e-07f, -7.534835254e-07f, -7.501762407e-07f, -7.468681492e-07f,
--7.435592569e-07f, -7.402495696e-07f, -7.369390932e-07f, -7.336278335e-07f, -7.303157963e-07f, -7.270029876e-07f, -7.236894132e-07f, -7.203750790e-07f, -7.170599909e-07f, -7.137441546e-07f,
--7.104275761e-07f, -7.071102613e-07f, -7.037922159e-07f, -7.004734459e-07f, -6.971539572e-07f, -6.938337555e-07f, -6.905128469e-07f, -6.871912370e-07f, -6.838689319e-07f, -6.805459374e-07f,
--6.772222593e-07f, -6.738979035e-07f, -6.705728759e-07f, -6.672471824e-07f, -6.639208288e-07f, -6.605938210e-07f, -6.572661649e-07f, -6.539378664e-07f, -6.506089312e-07f, -6.472793653e-07f,
--6.439491746e-07f, -6.406183649e-07f, -6.372869421e-07f, -6.339549121e-07f, -6.306222808e-07f, -6.272890539e-07f, -6.239552375e-07f, -6.206208373e-07f, -6.172858593e-07f, -6.139503093e-07f,
--6.106141932e-07f, -6.072775168e-07f, -6.039402861e-07f, -6.006025069e-07f, -5.972641850e-07f, -5.939253265e-07f, -5.905859370e-07f, -5.872460226e-07f, -5.839055891e-07f, -5.805646423e-07f,
--5.772231881e-07f, -5.738812324e-07f, -5.705387812e-07f, -5.671958401e-07f, -5.638524153e-07f, -5.605085124e-07f, -5.571641373e-07f, -5.538192961e-07f, -5.504739944e-07f, -5.471282383e-07f,
--5.437820335e-07f, -5.404353860e-07f, -5.370883016e-07f, -5.337407862e-07f, -5.303928456e-07f, -5.270444858e-07f, -5.236957126e-07f, -5.203465319e-07f, -5.169969496e-07f, -5.136469714e-07f,
--5.102966034e-07f, -5.069458514e-07f, -5.035947212e-07f, -5.002432187e-07f, -4.968913499e-07f, -4.935391204e-07f, -4.901865364e-07f, -4.868336035e-07f, -4.834803277e-07f, -4.801267148e-07f,
--4.767727708e-07f, -4.734185014e-07f, -4.700639127e-07f, -4.667090103e-07f, -4.633538002e-07f, -4.599982883e-07f, -4.566424804e-07f, -4.532863824e-07f, -4.499300002e-07f, -4.465733396e-07f,
--4.432164065e-07f, -4.398592068e-07f, -4.365017463e-07f, -4.331440309e-07f, -4.297860664e-07f, -4.264278588e-07f, -4.230694139e-07f, -4.197107375e-07f, -4.163518355e-07f, -4.129927138e-07f,
--4.096333783e-07f, -4.062738347e-07f, -4.029140891e-07f, -3.995541471e-07f, -3.961940147e-07f, -3.928336978e-07f, -3.894732022e-07f, -3.861125337e-07f, -3.827516982e-07f, -3.793907016e-07f,
--3.760295498e-07f, -3.726682485e-07f, -3.693068037e-07f, -3.659452212e-07f, -3.625835068e-07f, -3.592216664e-07f, -3.558597059e-07f, -3.524976311e-07f, -3.491354479e-07f, -3.457731621e-07f,
--3.424107795e-07f, -3.390483061e-07f, -3.356857476e-07f, -3.323231099e-07f, -3.289603988e-07f, -3.255976203e-07f, -3.222347801e-07f, -3.188718841e-07f, -3.155089382e-07f, -3.121459481e-07f,
--3.087829198e-07f, -3.054198590e-07f, -3.020567716e-07f, -2.986936635e-07f, -2.953305404e-07f, -2.919674083e-07f, -2.886042729e-07f, -2.852411401e-07f, -2.818780158e-07f, -2.785149057e-07f,
--2.751518158e-07f, -2.717887517e-07f, -2.684257195e-07f, -2.650627248e-07f, -2.616997736e-07f, -2.583368716e-07f, -2.549740247e-07f, -2.516112387e-07f, -2.482485195e-07f, -2.448858728e-07f,
--2.415233045e-07f, -2.381608205e-07f, -2.347984264e-07f, -2.314361283e-07f, -2.280739318e-07f, -2.247118428e-07f, -2.213498671e-07f, -2.179880106e-07f, -2.146262790e-07f, -2.112646782e-07f,
--2.079032139e-07f, -2.045418921e-07f, -2.011807184e-07f, -1.978196988e-07f, -1.944588390e-07f, -1.910981448e-07f, -1.877376221e-07f, -1.843772766e-07f, -1.810171142e-07f, -1.776571406e-07f,
--1.742973616e-07f, -1.709377832e-07f, -1.675784110e-07f, -1.642192508e-07f, -1.608603085e-07f, -1.575015899e-07f, -1.541431007e-07f, -1.507848467e-07f, -1.474268338e-07f, -1.440690677e-07f,
--1.407115542e-07f, -1.373542992e-07f, -1.339973083e-07f, -1.306405874e-07f, -1.272841422e-07f, -1.239279786e-07f, -1.205721023e-07f, -1.172165192e-07f, -1.138612349e-07f, -1.105062553e-07f,
--1.071515861e-07f, -1.037972332e-07f, -1.004432022e-07f, -9.708949899e-08f, -9.373612932e-08f, -9.038309896e-08f, -8.703041366e-08f, -8.367807921e-08f, -8.032610136e-08f, -7.697448587e-08f,
--7.362323851e-08f, -7.027236504e-08f, -6.692187122e-08f, -6.357176281e-08f, -6.022204555e-08f, -5.687272522e-08f, -5.352380755e-08f, -5.017529830e-08f, -4.682720323e-08f, -4.347952807e-08f,
--4.013227857e-08f, -3.678546049e-08f, -3.343907956e-08f, -3.009314153e-08f, -2.674765213e-08f, -2.340261710e-08f, -2.005804219e-08f, -1.671393312e-08f, -1.337029564e-08f, -1.002713546e-08f,
--6.684458329e-09f, -3.342269966e-09f, -5.761004996e-13f, 3.340617543e-09f, 6.681305240e-09f, 1.002148127e-08f, 1.336113991e-08f, 1.670027545e-08f, 2.003888216e-08f, 2.337695434e-08f,
-2.671448627e-08f, 3.005147224e-08f, 3.338790654e-08f, 3.672378346e-08f, 4.005909730e-08f, 4.339384236e-08f, 4.672801292e-08f, 5.006160330e-08f, 5.339460779e-08f, 5.672702070e-08f,
-6.005883633e-08f, 6.339004899e-08f, 6.672065300e-08f, 7.005064265e-08f, 7.338001226e-08f, 7.670875616e-08f, 8.003686865e-08f, 8.336434405e-08f, 8.669117669e-08f, 9.001736089e-08f,
-9.334289098e-08f, 9.666776127e-08f, 9.999196611e-08f, 1.033154998e-07f, 1.066383567e-07f, 1.099605312e-07f, 1.132820175e-07f, 1.166028100e-07f, 1.199229031e-07f, 1.232422911e-07f,
-1.265609683e-07f, 1.298789291e-07f, 1.331961679e-07f, 1.365126789e-07f, 1.398284566e-07f, 1.431434953e-07f, 1.464577894e-07f, 1.497713332e-07f, 1.530841210e-07f, 1.563961473e-07f,
-1.597074064e-07f, 1.630178927e-07f, 1.663276005e-07f, 1.696365243e-07f, 1.729446583e-07f, 1.762519971e-07f, 1.795585348e-07f, 1.828642661e-07f, 1.861691851e-07f, 1.894732864e-07f,
-1.927765642e-07f, 1.960790130e-07f, 1.993806272e-07f, 2.026814012e-07f, 2.059813294e-07f, 2.092804061e-07f, 2.125786258e-07f, 2.158759829e-07f, 2.191724717e-07f, 2.224680868e-07f,
-2.257628225e-07f, 2.290566732e-07f, 2.323496333e-07f, 2.356416973e-07f, 2.389328595e-07f, 2.422231145e-07f, 2.455124566e-07f, 2.488008803e-07f, 2.520883799e-07f, 2.553749499e-07f,
-2.586605848e-07f, 2.619452791e-07f, 2.652290270e-07f, 2.685118231e-07f, 2.717936618e-07f, 2.750745376e-07f, 2.783544450e-07f, 2.816333783e-07f, 2.849113320e-07f, 2.881883006e-07f,
-2.914642786e-07f, 2.947392604e-07f, 2.980132405e-07f, 3.012862133e-07f, 3.045581733e-07f, 3.078291150e-07f, 3.110990329e-07f, 3.143679215e-07f, 3.176357751e-07f, 3.209025884e-07f,
-3.241683558e-07f, 3.274330717e-07f, 3.306967308e-07f, 3.339593274e-07f, 3.372208561e-07f, 3.404813113e-07f, 3.437406877e-07f, 3.469989796e-07f, 3.502561816e-07f, 3.535122882e-07f,
-3.567672939e-07f, 3.600211932e-07f, 3.632739807e-07f, 3.665256508e-07f, 3.697761982e-07f, 3.730256173e-07f, 3.762739026e-07f, 3.795210487e-07f, 3.827670501e-07f, 3.860119013e-07f,
-3.892555970e-07f, 3.924981316e-07f, 3.957394997e-07f, 3.989796959e-07f, 4.022187146e-07f, 4.054565505e-07f, 4.086931980e-07f, 4.119286519e-07f, 4.151629066e-07f, 4.183959566e-07f,
-4.216277967e-07f, 4.248584212e-07f, 4.280878249e-07f, 4.313160023e-07f, 4.345429480e-07f, 4.377686565e-07f, 4.409931225e-07f, 4.442163405e-07f, 4.474383051e-07f, 4.506590110e-07f,
-4.538784527e-07f, 4.570966248e-07f, 4.603135220e-07f, 4.635291388e-07f, 4.667434698e-07f, 4.699565098e-07f, 4.731682532e-07f, 4.763786947e-07f, 4.795878289e-07f, 4.827956506e-07f,
-4.860021542e-07f, 4.892073344e-07f, 4.924111858e-07f, 4.956137032e-07f, 4.988148811e-07f, 5.020147142e-07f, 5.052131971e-07f, 5.084103246e-07f, 5.116060911e-07f, 5.148004915e-07f,
-5.179935203e-07f, 5.211851722e-07f, 5.243754419e-07f, 5.275643241e-07f, 5.307518134e-07f, 5.339379045e-07f, 5.371225921e-07f, 5.403058709e-07f, 5.434877356e-07f, 5.466681808e-07f,
-5.498472012e-07f, 5.530247916e-07f, 5.562009467e-07f, 5.593756611e-07f, 5.625489295e-07f, 5.657207467e-07f, 5.688911074e-07f, 5.720600062e-07f, 5.752274380e-07f, 5.783933974e-07f,
-5.815578792e-07f, 5.847208781e-07f, 5.878823888e-07f, 5.910424060e-07f, 5.942009246e-07f, 5.973579392e-07f, 6.005134446e-07f, 6.036674355e-07f, 6.068199068e-07f, 6.099708531e-07f,
-6.131202691e-07f, 6.162681498e-07f, 6.194144898e-07f, 6.225592840e-07f, 6.257025270e-07f, 6.288442137e-07f, 6.319843388e-07f, 6.351228972e-07f, 6.382598836e-07f, 6.413952928e-07f,
-6.445291196e-07f, 6.476613588e-07f, 6.507920052e-07f, 6.539210537e-07f, 6.570484989e-07f, 6.601743358e-07f, 6.632985592e-07f, 6.664211638e-07f, 6.695421445e-07f, 6.726614962e-07f,
-6.757792136e-07f, 6.788952916e-07f, 6.820097250e-07f, 6.851225087e-07f, 6.882336375e-07f, 6.913431063e-07f, 6.944509099e-07f, 6.975570432e-07f, 7.006615010e-07f, 7.037642782e-07f,
-7.068653696e-07f, 7.099647702e-07f, 7.130624749e-07f, 7.161584784e-07f, 7.192527756e-07f, 7.223453616e-07f, 7.254362311e-07f, 7.285253790e-07f, 7.316128002e-07f, 7.346984898e-07f,
-7.377824424e-07f, 7.408646531e-07f, 7.439451168e-07f, 7.470238283e-07f, 7.501007827e-07f, 7.531759747e-07f, 7.562493995e-07f, 7.593210518e-07f, 7.623909266e-07f, 7.654590189e-07f,
-7.685253236e-07f, 7.715898356e-07f, 7.746525500e-07f, 7.777134616e-07f, 7.807725654e-07f, 7.838298564e-07f, 7.868853295e-07f, 7.899389797e-07f, 7.929908020e-07f, 7.960407914e-07f,
-7.990889429e-07f, 8.021352513e-07f, 8.051797118e-07f, 8.082223193e-07f, 8.112630688e-07f, 8.143019553e-07f, 8.173389739e-07f, 8.203741194e-07f, 8.234073871e-07f, 8.264387717e-07f,
-8.294682685e-07f, 8.324958724e-07f, 8.355215784e-07f, 8.385453816e-07f, 8.415672769e-07f, 8.445872596e-07f, 8.476053245e-07f, 8.506214668e-07f, 8.536356815e-07f, 8.566479637e-07f,
-8.596583084e-07f, 8.626667106e-07f, 8.656731656e-07f, 8.686776682e-07f, 8.716802137e-07f, 8.746807971e-07f, 8.776794135e-07f, 8.806760579e-07f, 8.836707255e-07f, 8.866634114e-07f,
-8.896541107e-07f, 8.926428184e-07f, 8.956295297e-07f, 8.986142398e-07f, 9.015969437e-07f, 9.045776365e-07f, 9.075563134e-07f, 9.105329696e-07f, 9.135076001e-07f, 9.164802001e-07f,
-9.194507647e-07f, 9.224192892e-07f, 9.253857685e-07f, 9.283501980e-07f, 9.313125728e-07f, 9.342728880e-07f, 9.372311388e-07f, 9.401873204e-07f, 9.431414280e-07f, 9.460934567e-07f,
-9.490434018e-07f, 9.519912584e-07f, 9.549370217e-07f, 9.578806870e-07f, 9.608222494e-07f, 9.637617041e-07f, 9.666990465e-07f, 9.696342716e-07f, 9.725673747e-07f, 9.754983510e-07f,
-9.784271959e-07f, 9.813539044e-07f, 9.842784719e-07f, 9.872008935e-07f, 9.901211647e-07f, 9.930392805e-07f, 9.959552363e-07f, 9.988690273e-07f, 1.001780649e-06f, 1.004690096e-06f,
-1.007597364e-06f, 1.010502449e-06f, 1.013405345e-06f, 1.016306048e-06f, 1.019204554e-06f, 1.022100857e-06f, 1.024994952e-06f, 1.027886836e-06f, 1.030776503e-06f, 1.033663949e-06f,
-1.036549169e-06f, 1.039432158e-06f, 1.042312912e-06f, 1.045191427e-06f, 1.048067696e-06f, 1.050941716e-06f, 1.053813483e-06f, 1.056682991e-06f, 1.059550235e-06f, 1.062415212e-06f,
-1.065277917e-06f, 1.068138344e-06f, 1.070996489e-06f, 1.073852349e-06f, 1.076705917e-06f, 1.079557190e-06f, 1.082406162e-06f, 1.085252830e-06f, 1.088097189e-06f, 1.090939233e-06f,
-1.093778959e-06f, 1.096616362e-06f, 1.099451438e-06f, 1.102284181e-06f, 1.105114587e-06f, 1.107942652e-06f, 1.110768371e-06f, 1.113591739e-06f, 1.116412753e-06f, 1.119231407e-06f,
-1.122047697e-06f, 1.124861618e-06f, 1.127673166e-06f, 1.130482336e-06f, 1.133289124e-06f, 1.136093526e-06f, 1.138895536e-06f, 1.141695150e-06f, 1.144492364e-06f, 1.147287174e-06f,
-1.150079574e-06f, 1.152869561e-06f, 1.155657129e-06f, 1.158442275e-06f, 1.161224994e-06f, 1.164005281e-06f, 1.166783132e-06f, 1.169558542e-06f, 1.172331508e-06f, 1.175102024e-06f,
-1.177870087e-06f, 1.180635691e-06f, 1.183398832e-06f, 1.186159506e-06f, 1.188917709e-06f, 1.191673436e-06f, 1.194426682e-06f, 1.197177444e-06f, 1.199925716e-06f, 1.202671495e-06f,
-1.205414776e-06f, 1.208155555e-06f, 1.210893827e-06f, 1.213629588e-06f, 1.216362833e-06f, 1.219093558e-06f, 1.221821760e-06f, 1.224547432e-06f, 1.227270572e-06f, 1.229991175e-06f,
-1.232709236e-06f, 1.235424751e-06f, 1.238137716e-06f, 1.240848126e-06f, 1.243555977e-06f, 1.246261265e-06f, 1.248963986e-06f, 1.251664135e-06f, 1.254361707e-06f, 1.257056699e-06f,
-1.259749107e-06f, 1.262438925e-06f, 1.265126151e-06f, 1.267810778e-06f, 1.270492804e-06f, 1.273172224e-06f, 1.275849034e-06f, 1.278523228e-06f, 1.281194804e-06f, 1.283863757e-06f,
-1.286530083e-06f, 1.289193777e-06f, 1.291854835e-06f, 1.294513254e-06f, 1.297169028e-06f, 1.299822153e-06f, 1.302472626e-06f, 1.305120442e-06f, 1.307765598e-06f, 1.310408088e-06f,
-1.313047908e-06f, 1.315685055e-06f, 1.318319524e-06f, 1.320951311e-06f, 1.323580412e-06f, 1.326206823e-06f, 1.328830540e-06f, 1.331451558e-06f, 1.334069873e-06f, 1.336685481e-06f,
-1.339298379e-06f, 1.341908561e-06f, 1.344516024e-06f, 1.347120764e-06f, 1.349722776e-06f, 1.352322057e-06f, 1.354918602e-06f, 1.357512407e-06f, 1.360103469e-06f, 1.362691782e-06f,
-1.365277344e-06f, 1.367860149e-06f, 1.370440195e-06f, 1.373017476e-06f, 1.375591989e-06f, 1.378163729e-06f, 1.380732694e-06f, 1.383298878e-06f, 1.385862277e-06f, 1.388422888e-06f,
-1.390980706e-06f, 1.393535728e-06f, 1.396087950e-06f, 1.398637367e-06f, 1.401183975e-06f, 1.403727771e-06f, 1.406268750e-06f, 1.408806909e-06f, 1.411342243e-06f, 1.413874749e-06f,
-1.416404422e-06f, 1.418931259e-06f, 1.421455256e-06f, 1.423976408e-06f, 1.426494713e-06f, 1.429010164e-06f, 1.431522760e-06f, 1.434032496e-06f, 1.436539368e-06f, 1.439043371e-06f,
-1.441544503e-06f, 1.444042760e-06f, 1.446538136e-06f, 1.449030629e-06f, 1.451520235e-06f, 1.454006949e-06f, 1.456490768e-06f, 1.458971688e-06f, 1.461449705e-06f, 1.463924816e-06f,
-1.466397015e-06f, 1.468866300e-06f, 1.471332667e-06f, 1.473796112e-06f, 1.476256630e-06f, 1.478714219e-06f, 1.481168874e-06f, 1.483620591e-06f, 1.486069367e-06f, 1.488515198e-06f,
-1.490958080e-06f, 1.493398010e-06f, 1.495834983e-06f, 1.498268995e-06f, 1.500700044e-06f, 1.503128124e-06f, 1.505553233e-06f, 1.507975367e-06f, 1.510394521e-06f, 1.512810693e-06f,
-1.515223877e-06f, 1.517634072e-06f, 1.520041272e-06f, 1.522445475e-06f, 1.524846676e-06f, 1.527244872e-06f, 1.529640059e-06f, 1.532032233e-06f, 1.534421390e-06f, 1.536807528e-06f,
-1.539190642e-06f, 1.541570728e-06f, 1.543947784e-06f, 1.546321804e-06f, 1.548692786e-06f, 1.551060726e-06f, 1.553425620e-06f, 1.555787465e-06f, 1.558146257e-06f, 1.560501992e-06f,
-1.562854667e-06f, 1.565204278e-06f, 1.567550821e-06f, 1.569894293e-06f, 1.572234691e-06f, 1.574572010e-06f, 1.576906247e-06f, 1.579237398e-06f, 1.581565461e-06f, 1.583890430e-06f,
-1.586212304e-06f, 1.588531077e-06f, 1.590846748e-06f, 1.593159311e-06f, 1.595468764e-06f, 1.597775102e-06f, 1.600078324e-06f, 1.602378424e-06f, 1.604675399e-06f, 1.606969247e-06f,
-1.609259962e-06f, 1.611547543e-06f, 1.613831985e-06f, 1.616113285e-06f, 1.618391439e-06f, 1.620666444e-06f, 1.622938297e-06f, 1.625206993e-06f, 1.627472530e-06f, 1.629734904e-06f,
-1.631994112e-06f, 1.634250149e-06f, 1.636503014e-06f, 1.638752702e-06f, 1.640999209e-06f, 1.643242533e-06f, 1.645482670e-06f, 1.647719617e-06f, 1.649953370e-06f, 1.652183926e-06f,
-1.654411281e-06f, 1.656635432e-06f, 1.658856376e-06f, 1.661074109e-06f, 1.663288628e-06f, 1.665499930e-06f, 1.667708010e-06f, 1.669912867e-06f, 1.672114496e-06f, 1.674312895e-06f,
-1.676508059e-06f, 1.678699986e-06f, 1.680888672e-06f, 1.683074114e-06f, 1.685256308e-06f, 1.687435252e-06f, 1.689610942e-06f, 1.691783374e-06f, 1.693952546e-06f, 1.696118455e-06f,
-1.698281096e-06f, 1.700440466e-06f, 1.702596564e-06f, 1.704749384e-06f, 1.706898924e-06f, 1.709045181e-06f, 1.711188151e-06f, 1.713327832e-06f, 1.715464219e-06f, 1.717597310e-06f,
-1.719727102e-06f, 1.721853591e-06f, 1.723976775e-06f, 1.726096649e-06f, 1.728213211e-06f, 1.730326458e-06f, 1.732436387e-06f, 1.734542993e-06f, 1.736646275e-06f, 1.738746229e-06f,
-1.740842851e-06f, 1.742936140e-06f, 1.745026091e-06f, 1.747112701e-06f, 1.749195968e-06f, 1.751275888e-06f, 1.753352458e-06f, 1.755425675e-06f, 1.757495537e-06f, 1.759562039e-06f,
-1.761625178e-06f, 1.763684953e-06f, 1.765741359e-06f, 1.767794394e-06f, 1.769844054e-06f, 1.771890336e-06f, 1.773933238e-06f, 1.775972757e-06f, 1.778008889e-06f, 1.780041631e-06f,
-1.782070980e-06f, 1.784096934e-06f, 1.786119489e-06f, 1.788138643e-06f, 1.790154391e-06f, 1.792166732e-06f, 1.794175663e-06f, 1.796181180e-06f, 1.798183280e-06f, 1.800181960e-06f,
-1.802177218e-06f, 1.804169051e-06f, 1.806157455e-06f, 1.808142428e-06f, 1.810123967e-06f, 1.812102068e-06f, 1.814076730e-06f, 1.816047948e-06f, 1.818015721e-06f, 1.819980045e-06f,
-1.821940917e-06f, 1.823898334e-06f, 1.825852294e-06f, 1.827802794e-06f, 1.829749830e-06f, 1.831693401e-06f, 1.833633502e-06f, 1.835570132e-06f, 1.837503288e-06f, 1.839432966e-06f,
-1.841359163e-06f, 1.843281878e-06f, 1.845201107e-06f, 1.847116847e-06f, 1.849029095e-06f, 1.850937850e-06f, 1.852843107e-06f, 1.854744865e-06f, 1.856643120e-06f, 1.858537869e-06f,
-1.860429111e-06f, 1.862316841e-06f, 1.864201058e-06f, 1.866081759e-06f, 1.867958941e-06f, 1.869832600e-06f, 1.871702735e-06f, 1.873569343e-06f, 1.875432421e-06f, 1.877291967e-06f,
-1.879147977e-06f, 1.881000448e-06f, 1.882849380e-06f, 1.884694767e-06f, 1.886536609e-06f, 1.888374902e-06f, 1.890209643e-06f, 1.892040831e-06f, 1.893868462e-06f, 1.895692533e-06f,
-1.897513043e-06f, 1.899329988e-06f, 1.901143366e-06f, 1.902953174e-06f, 1.904759409e-06f, 1.906562070e-06f, 1.908361153e-06f, 1.910156656e-06f, 1.911948576e-06f, 1.913736911e-06f,
-1.915521658e-06f, 1.917302814e-06f, 1.919080378e-06f, 1.920854346e-06f, 1.922624716e-06f, 1.924391485e-06f, 1.926154651e-06f, 1.927914212e-06f, 1.929670164e-06f, 1.931422506e-06f,
-1.933171235e-06f, 1.934916348e-06f, 1.936657843e-06f, 1.938395717e-06f, 1.940129968e-06f, 1.941860594e-06f, 1.943587592e-06f, 1.945310959e-06f, 1.947030694e-06f, 1.948746793e-06f,
-1.950459254e-06f, 1.952168076e-06f, 1.953873254e-06f, 1.955574788e-06f, 1.957272674e-06f, 1.958966911e-06f, 1.960657495e-06f, 1.962344425e-06f, 1.964027697e-06f, 1.965707311e-06f,
-1.967383263e-06f, 1.969055550e-06f, 1.970724172e-06f, 1.972389124e-06f, 1.974050406e-06f, 1.975708014e-06f, 1.977361947e-06f, 1.979012201e-06f, 1.980658775e-06f, 1.982301667e-06f,
-1.983940873e-06f, 1.985576393e-06f, 1.987208222e-06f, 1.988836361e-06f, 1.990460804e-06f, 1.992081552e-06f, 1.993698601e-06f, 1.995311950e-06f, 1.996921595e-06f, 1.998527535e-06f,
-2.000129767e-06f, 2.001728290e-06f, 2.003323100e-06f, 2.004914197e-06f, 2.006501577e-06f, 2.008085239e-06f, 2.009665180e-06f, 2.011241397e-06f, 2.012813890e-06f, 2.014382656e-06f,
-2.015947692e-06f, 2.017508996e-06f, 2.019066567e-06f, 2.020620402e-06f, 2.022170499e-06f, 2.023716856e-06f, 2.025259470e-06f, 2.026798341e-06f, 2.028333464e-06f, 2.029864839e-06f,
-2.031392464e-06f, 2.032916336e-06f, 2.034436452e-06f, 2.035952812e-06f, 2.037465414e-06f, 2.038974254e-06f, 2.040479331e-06f, 2.041980642e-06f, 2.043478187e-06f, 2.044971963e-06f,
-2.046461967e-06f, 2.047948198e-06f, 2.049430654e-06f, 2.050909332e-06f, 2.052384232e-06f, 2.053855350e-06f, 2.055322685e-06f, 2.056786235e-06f, 2.058245997e-06f, 2.059701971e-06f,
-2.061154153e-06f, 2.062602543e-06f, 2.064047137e-06f, 2.065487935e-06f, 2.066924934e-06f, 2.068358132e-06f, 2.069787527e-06f, 2.071213118e-06f, 2.072634903e-06f, 2.074052879e-06f,
-2.075467044e-06f, 2.076877398e-06f, 2.078283938e-06f, 2.079686662e-06f, 2.081085568e-06f, 2.082480654e-06f, 2.083871920e-06f, 2.085259361e-06f, 2.086642978e-06f, 2.088022768e-06f,
-2.089398729e-06f, 2.090770860e-06f, 2.092139159e-06f, 2.093503623e-06f, 2.094864251e-06f, 2.096221042e-06f, 2.097573993e-06f, 2.098923103e-06f, 2.100268370e-06f, 2.101609792e-06f,
-2.102947368e-06f, 2.104281095e-06f, 2.105610972e-06f, 2.106936998e-06f, 2.108259170e-06f, 2.109577488e-06f, 2.110891948e-06f, 2.112202550e-06f, 2.113509291e-06f, 2.114812171e-06f,
-2.116111187e-06f, 2.117406337e-06f, 2.118697621e-06f, 2.119985036e-06f, 2.121268581e-06f, 2.122548255e-06f, 2.123824054e-06f, 2.125095978e-06f, 2.126364026e-06f, 2.127628195e-06f,
-2.128888485e-06f, 2.130144892e-06f, 2.131397417e-06f, 2.132646056e-06f, 2.133890810e-06f, 2.135131675e-06f, 2.136368651e-06f, 2.137601736e-06f, 2.138830928e-06f, 2.140056226e-06f,
-2.141277628e-06f, 2.142495133e-06f, 2.143708740e-06f, 2.144918446e-06f, 2.146124250e-06f, 2.147326151e-06f, 2.148524147e-06f, 2.149718237e-06f, 2.150908420e-06f, 2.152094693e-06f,
-2.153277055e-06f, 2.154455505e-06f, 2.155630042e-06f, 2.156800663e-06f, 2.157967368e-06f, 2.159130155e-06f, 2.160289023e-06f, 2.161443970e-06f, 2.162594994e-06f, 2.163742096e-06f,
-2.164885272e-06f, 2.166024521e-06f, 2.167159843e-06f, 2.168291236e-06f, 2.169418699e-06f, 2.170542229e-06f, 2.171661826e-06f, 2.172777489e-06f, 2.173889215e-06f, 2.174997005e-06f,
-2.176100856e-06f, 2.177200767e-06f, 2.178296736e-06f, 2.179388763e-06f, 2.180476847e-06f, 2.181560985e-06f, 2.182641177e-06f, 2.183717421e-06f, 2.184789716e-06f, 2.185858061e-06f,
-2.186922455e-06f, 2.187982895e-06f, 2.189039382e-06f, 2.190091914e-06f, 2.191140489e-06f, 2.192185106e-06f, 2.193225765e-06f, 2.194262463e-06f, 2.195295201e-06f, 2.196323975e-06f,
-2.197348786e-06f, 2.198369633e-06f, 2.199386513e-06f, 2.200399426e-06f, 2.201408370e-06f, 2.202413346e-06f, 2.203414350e-06f, 2.204411383e-06f, 2.205404443e-06f, 2.206393529e-06f,
-2.207378639e-06f, 2.208359774e-06f, 2.209336931e-06f, 2.210310110e-06f, 2.211279309e-06f, 2.212244527e-06f, 2.213205764e-06f, 2.214163018e-06f, 2.215116288e-06f, 2.216065574e-06f,
-2.217010873e-06f, 2.217952186e-06f, 2.218889510e-06f, 2.219822846e-06f, 2.220752191e-06f, 2.221677546e-06f, 2.222598908e-06f, 2.223516278e-06f, 2.224429653e-06f, 2.225339033e-06f,
-2.226244418e-06f, 2.227145805e-06f, 2.228043195e-06f, 2.228936585e-06f, 2.229825976e-06f, 2.230711366e-06f, 2.231592755e-06f, 2.232470141e-06f, 2.233343523e-06f, 2.234212901e-06f,
-2.235078273e-06f, 2.235939640e-06f, 2.236796999e-06f, 2.237650350e-06f, 2.238499693e-06f, 2.239345025e-06f, 2.240186347e-06f, 2.241023658e-06f, 2.241856956e-06f, 2.242686241e-06f,
-2.243511512e-06f, 2.244332768e-06f, 2.245150009e-06f, 2.245963233e-06f, 2.246772440e-06f, 2.247577629e-06f, 2.248378800e-06f, 2.249175950e-06f, 2.249969080e-06f, 2.250758189e-06f,
-2.251543277e-06f, 2.252324341e-06f, 2.253101382e-06f, 2.253874399e-06f, 2.254643391e-06f, 2.255408357e-06f, 2.256169297e-06f, 2.256926211e-06f, 2.257679096e-06f, 2.258427953e-06f,
-2.259172780e-06f, 2.259913578e-06f, 2.260650346e-06f, 2.261383082e-06f, 2.262111786e-06f, 2.262836458e-06f, 2.263557097e-06f, 2.264273702e-06f, 2.264986272e-06f, 2.265694808e-06f,
-2.266399308e-06f, 2.267099772e-06f, 2.267796198e-06f, 2.268488588e-06f, 2.269176939e-06f, 2.269861252e-06f, 2.270541525e-06f, 2.271217759e-06f, 2.271889952e-06f, 2.272558104e-06f,
-2.273222215e-06f, 2.273882284e-06f, 2.274538310e-06f, 2.275190294e-06f, 2.275838234e-06f, 2.276482129e-06f, 2.277121980e-06f, 2.277757786e-06f, 2.278389547e-06f, 2.279017261e-06f,
-2.279640929e-06f, 2.280260549e-06f, 2.280876123e-06f, 2.281487648e-06f, 2.282095125e-06f, 2.282698553e-06f, 2.283297932e-06f, 2.283893261e-06f, 2.284484540e-06f, 2.285071769e-06f,
-2.285654946e-06f, 2.286234073e-06f, 2.286809147e-06f, 2.287380170e-06f, 2.287947140e-06f, 2.288510057e-06f, 2.289068921e-06f, 2.289623731e-06f, 2.290174487e-06f, 2.290721189e-06f,
-2.291263837e-06f, 2.291802429e-06f, 2.292336967e-06f, 2.292867448e-06f, 2.293393874e-06f, 2.293916244e-06f, 2.294434557e-06f, 2.294948814e-06f, 2.295459013e-06f, 2.295965155e-06f,
-2.296467240e-06f, 2.296965267e-06f, 2.297459235e-06f, 2.297949146e-06f, 2.298434997e-06f, 2.298916790e-06f, 2.299394524e-06f, 2.299868199e-06f, 2.300337815e-06f, 2.300803370e-06f,
-2.301264866e-06f, 2.301722302e-06f, 2.302175678e-06f, 2.302624993e-06f, 2.303070248e-06f, 2.303511442e-06f, 2.303948575e-06f, 2.304381648e-06f, 2.304810659e-06f, 2.305235609e-06f,
-2.305656497e-06f, 2.306073324e-06f, 2.306486090e-06f, 2.306894794e-06f, 2.307299436e-06f, 2.307700016e-06f, 2.308096534e-06f, 2.308488990e-06f, 2.308877384e-06f, 2.309261716e-06f,
-2.309641986e-06f, 2.310018193e-06f, 2.310390338e-06f, 2.310758421e-06f, 2.311122441e-06f, 2.311482400e-06f, 2.311838295e-06f, 2.312190129e-06f, 2.312537900e-06f, 2.312881608e-06f,
-2.313221254e-06f, 2.313556838e-06f, 2.313888360e-06f, 2.314215819e-06f, 2.314539217e-06f, 2.314858552e-06f, 2.315173825e-06f, 2.315485036e-06f, 2.315792185e-06f, 2.316095272e-06f,
-2.316394297e-06f, 2.316689261e-06f, 2.316980163e-06f, 2.317267004e-06f, 2.317549783e-06f, 2.317828501e-06f, 2.318103158e-06f, 2.318373754e-06f, 2.318640290e-06f, 2.318902764e-06f,
-2.319161178e-06f, 2.319415532e-06f, 2.319665826e-06f, 2.319912060e-06f, 2.320154233e-06f, 2.320392348e-06f, 2.320626403e-06f, 2.320856398e-06f, 2.321082335e-06f, 2.321304213e-06f,
-2.321522033e-06f, 2.321735794e-06f, 2.321945497e-06f, 2.322151142e-06f, 2.322352730e-06f, 2.322550261e-06f, 2.322743735e-06f, 2.322933152e-06f, 2.323118512e-06f, 2.323299816e-06f,
-2.323477065e-06f, 2.323650258e-06f, 2.323819396e-06f, 2.323984479e-06f, 2.324145507e-06f, 2.324302481e-06f, 2.324455401e-06f, 2.324604268e-06f, 2.324749081e-06f, 2.324889842e-06f,
-2.325026550e-06f, 2.325159206e-06f, 2.325287811e-06f, 2.325412364e-06f, 2.325532866e-06f, 2.325649318e-06f, 2.325761720e-06f, 2.325870072e-06f, 2.325974375e-06f, 2.326074628e-06f,
-2.326170834e-06f, 2.326262992e-06f, 2.326351102e-06f, 2.326435165e-06f, 2.326515182e-06f, 2.326591152e-06f, 2.326663077e-06f, 2.326730957e-06f, 2.326794792e-06f, 2.326854583e-06f,
-2.326910331e-06f, 2.326962035e-06f, 2.327009697e-06f, 2.327053317e-06f, 2.327092896e-06f, 2.327128433e-06f, 2.327159930e-06f, 2.327187387e-06f, 2.327210805e-06f, 2.327230185e-06f,
-2.327245526e-06f, 2.327256829e-06f, 2.327264096e-06f, 2.327267326e-06f, 2.327266521e-06f, 2.327261680e-06f, 2.327252805e-06f, 2.327239896e-06f, 2.327222954e-06f, 2.327201979e-06f,
-2.327176972e-06f, 2.327147934e-06f, 2.327114865e-06f, 2.327077767e-06f, 2.327036639e-06f, 2.326991482e-06f, 2.326942297e-06f, 2.326889086e-06f, 2.326831847e-06f, 2.326770583e-06f,
-2.326705294e-06f, 2.326635980e-06f, 2.326562643e-06f, 2.326485283e-06f, 2.326403900e-06f, 2.326318497e-06f, 2.326229072e-06f, 2.326135628e-06f, 2.326038164e-06f, 2.325936682e-06f,
-2.325831183e-06f, 2.325721667e-06f, 2.325608135e-06f, 2.325490587e-06f, 2.325369026e-06f, 2.325243450e-06f, 2.325113863e-06f, 2.324980263e-06f, 2.324842652e-06f, 2.324701031e-06f,
-2.324555401e-06f, 2.324405762e-06f, 2.324252115e-06f, 2.324094462e-06f, 2.323932803e-06f, 2.323767139e-06f, 2.323597471e-06f, 2.323423800e-06f, 2.323246127e-06f, 2.323064452e-06f,
-2.322878777e-06f, 2.322689102e-06f, 2.322495429e-06f, 2.322297758e-06f, 2.322096090e-06f, 2.321890427e-06f, 2.321680769e-06f, 2.321467117e-06f, 2.321249473e-06f, 2.321027836e-06f,
-2.320802209e-06f, 2.320572592e-06f, 2.320338986e-06f, 2.320101392e-06f, 2.319859812e-06f, 2.319614246e-06f, 2.319364695e-06f, 2.319111160e-06f, 2.318853643e-06f, 2.318592144e-06f,
-2.318326664e-06f, 2.318057205e-06f, 2.317783767e-06f, 2.317506353e-06f, 2.317224962e-06f, 2.316939595e-06f, 2.316650255e-06f, 2.316356942e-06f, 2.316059657e-06f, 2.315758401e-06f,
-2.315453175e-06f, 2.315143981e-06f, 2.314830820e-06f, 2.314513693e-06f, 2.314192600e-06f, 2.313867544e-06f, 2.313538525e-06f, 2.313205544e-06f, 2.312868603e-06f, 2.312527703e-06f,
-2.312182845e-06f, 2.311834030e-06f, 2.311481259e-06f, 2.311124534e-06f, 2.310763856e-06f, 2.310399226e-06f, 2.310030645e-06f, 2.309658115e-06f, 2.309281637e-06f, 2.308901212e-06f,
-2.308516841e-06f, 2.308128525e-06f, 2.307736267e-06f, 2.307340066e-06f, 2.306939925e-06f, 2.306535845e-06f, 2.306127826e-06f, 2.305715871e-06f, 2.305299981e-06f, 2.304880156e-06f,
-2.304456399e-06f, 2.304028710e-06f, 2.303597091e-06f, 2.303161544e-06f, 2.302722069e-06f, 2.302278668e-06f, 2.301831342e-06f, 2.301380094e-06f, 2.300924923e-06f, 2.300465832e-06f,
-2.300002821e-06f, 2.299535893e-06f, 2.299065049e-06f, 2.298590289e-06f, 2.298111617e-06f, 2.297629032e-06f, 2.297142536e-06f, 2.296652131e-06f, 2.296157819e-06f, 2.295659600e-06f,
-2.295157477e-06f, 2.294651450e-06f, 2.294141521e-06f, 2.293627691e-06f, 2.293109963e-06f, 2.292588337e-06f, 2.292062816e-06f, 2.291533400e-06f, 2.291000090e-06f, 2.290462890e-06f,
-2.289921799e-06f, 2.289376821e-06f, 2.288827955e-06f, 2.288275204e-06f, 2.287718569e-06f, 2.287158052e-06f, 2.286593655e-06f, 2.286025378e-06f, 2.285453224e-06f, 2.284877194e-06f,
-2.284297290e-06f, 2.283713512e-06f, 2.283125864e-06f, 2.282534347e-06f, 2.281938961e-06f, 2.281339709e-06f, 2.280736592e-06f, 2.280129613e-06f, 2.279518772e-06f, 2.278904071e-06f,
-2.278285512e-06f, 2.277663097e-06f, 2.277036827e-06f, 2.276406704e-06f, 2.275772730e-06f, 2.275134905e-06f, 2.274493233e-06f, 2.273847714e-06f, 2.273198351e-06f, 2.272545145e-06f,
-2.271888098e-06f, 2.271227211e-06f, 2.270562486e-06f, 2.269893926e-06f, 2.269221531e-06f, 2.268545304e-06f, 2.267865245e-06f, 2.267181358e-06f, 2.266493644e-06f, 2.265802104e-06f,
-2.265106741e-06f, 2.264407555e-06f, 2.263704550e-06f, 2.262997726e-06f, 2.262287086e-06f, 2.261572631e-06f, 2.260854363e-06f, 2.260132284e-06f, 2.259406396e-06f, 2.258676700e-06f,
-2.257943199e-06f, 2.257205895e-06f, 2.256464788e-06f, 2.255719882e-06f, 2.254971178e-06f, 2.254218677e-06f, 2.253462382e-06f, 2.252702294e-06f, 2.251938416e-06f, 2.251170750e-06f,
-2.250399297e-06f, 2.249624058e-06f, 2.248845037e-06f, 2.248062235e-06f, 2.247275654e-06f, 2.246485296e-06f, 2.245691163e-06f, 2.244893257e-06f, 2.244091579e-06f, 2.243286132e-06f,
-2.242476918e-06f, 2.241663938e-06f, 2.240847195e-06f, 2.240026691e-06f, 2.239202427e-06f, 2.238374406e-06f, 2.237542630e-06f, 2.236707100e-06f, 2.235867819e-06f, 2.235024789e-06f,
-2.234178011e-06f, 2.233327489e-06f, 2.232473223e-06f, 2.231615216e-06f, 2.230753470e-06f, 2.229887986e-06f, 2.229018768e-06f, 2.228145818e-06f, 2.227269136e-06f, 2.226388726e-06f,
-2.225504589e-06f, 2.224616727e-06f, 2.223725143e-06f, 2.222829839e-06f, 2.221930817e-06f, 2.221028079e-06f, 2.220121627e-06f, 2.219211463e-06f, 2.218297589e-06f, 2.217380008e-06f,
-2.216458722e-06f, 2.215533732e-06f, 2.214605042e-06f, 2.213672653e-06f, 2.212736567e-06f, 2.211796787e-06f, 2.210853314e-06f, 2.209906152e-06f, 2.208955301e-06f, 2.208000765e-06f,
-2.207042546e-06f, 2.206080645e-06f, 2.205115066e-06f, 2.204145809e-06f, 2.203172879e-06f, 2.202196276e-06f, 2.201216003e-06f, 2.200232062e-06f, 2.199244456e-06f, 2.198253186e-06f,
-2.197258256e-06f, 2.196259667e-06f, 2.195257422e-06f, 2.194251522e-06f, 2.193241971e-06f, 2.192228771e-06f, 2.191211923e-06f, 2.190191431e-06f, 2.189167296e-06f, 2.188139521e-06f,
-2.187108108e-06f, 2.186073060e-06f, 2.185034378e-06f, 2.183992066e-06f, 2.182946125e-06f, 2.181896559e-06f, 2.180843369e-06f, 2.179786557e-06f, 2.178726126e-06f, 2.177662079e-06f,
-2.176594418e-06f, 2.175523146e-06f, 2.174448263e-06f, 2.173369774e-06f, 2.172287681e-06f, 2.171201985e-06f, 2.170112690e-06f, 2.169019798e-06f, 2.167923311e-06f, 2.166823232e-06f,
-2.165719563e-06f, 2.164612306e-06f, 2.163501465e-06f, 2.162387041e-06f, 2.161269037e-06f, 2.160147456e-06f, 2.159022300e-06f, 2.157893571e-06f, 2.156761273e-06f, 2.155625407e-06f,
-2.154485976e-06f, 2.153342982e-06f, 2.152196429e-06f, 2.151046318e-06f, 2.149892653e-06f, 2.148735435e-06f, 2.147574667e-06f, 2.146410352e-06f, 2.145242493e-06f, 2.144071092e-06f,
-2.142896151e-06f, 2.141717673e-06f, 2.140535661e-06f, 2.139350117e-06f, 2.138161044e-06f, 2.136968444e-06f, 2.135772320e-06f, 2.134572676e-06f, 2.133369512e-06f, 2.132162832e-06f,
-2.130952639e-06f, 2.129738935e-06f, 2.128521723e-06f, 2.127301005e-06f, 2.126076785e-06f, 2.124849064e-06f, 2.123617846e-06f, 2.122383133e-06f, 2.121144927e-06f, 2.119903232e-06f,
-2.118658050e-06f, 2.117409384e-06f, 2.116157237e-06f, 2.114901611e-06f, 2.113642508e-06f, 2.112379933e-06f, 2.111113886e-06f, 2.109844372e-06f, 2.108571393e-06f, 2.107294951e-06f,
-2.106015050e-06f, 2.104731691e-06f, 2.103444879e-06f, 2.102154615e-06f, 2.100860902e-06f, 2.099563744e-06f, 2.098263142e-06f, 2.096959100e-06f, 2.095651621e-06f, 2.094340706e-06f,
-2.093026360e-06f, 2.091708585e-06f, 2.090387383e-06f, 2.089062758e-06f, 2.087734712e-06f, 2.086403248e-06f, 2.085068369e-06f, 2.083730078e-06f, 2.082388378e-06f, 2.081043271e-06f,
-2.079694760e-06f, 2.078342848e-06f, 2.076987539e-06f, 2.075628834e-06f, 2.074266738e-06f, 2.072901252e-06f, 2.071532379e-06f, 2.070160123e-06f, 2.068784486e-06f, 2.067405472e-06f,
-2.066023082e-06f, 2.064637321e-06f, 2.063248191e-06f, 2.061855694e-06f, 2.060459835e-06f, 2.059060615e-06f, 2.057658038e-06f, 2.056252107e-06f, 2.054842824e-06f, 2.053430193e-06f,
-2.052014216e-06f, 2.050594897e-06f, 2.049172238e-06f, 2.047746243e-06f, 2.046316914e-06f, 2.044884254e-06f, 2.043448267e-06f, 2.042008956e-06f, 2.040566322e-06f, 2.039120371e-06f,
-2.037671103e-06f, 2.036218523e-06f, 2.034762634e-06f, 2.033303438e-06f, 2.031840938e-06f, 2.030375139e-06f, 2.028906041e-06f, 2.027433650e-06f, 2.025957967e-06f, 2.024478996e-06f,
-2.022996740e-06f, 2.021511202e-06f, 2.020022385e-06f, 2.018530292e-06f, 2.017034926e-06f, 2.015536290e-06f, 2.014034388e-06f, 2.012529222e-06f, 2.011020796e-06f, 2.009509113e-06f,
-2.007994176e-06f, 2.006475987e-06f, 2.004954550e-06f, 2.003429869e-06f, 2.001901946e-06f, 2.000370785e-06f, 1.998836388e-06f, 1.997298759e-06f, 1.995757901e-06f, 1.994213818e-06f,
-1.992666511e-06f, 1.991115985e-06f, 1.989562243e-06f, 1.988005287e-06f, 1.986445122e-06f, 1.984881750e-06f, 1.983315174e-06f, 1.981745398e-06f, 1.980172425e-06f, 1.978596258e-06f,
-1.977016900e-06f, 1.975434354e-06f, 1.973848625e-06f, 1.972259714e-06f, 1.970667626e-06f, 1.969072363e-06f, 1.967473929e-06f, 1.965872327e-06f, 1.964267560e-06f, 1.962659632e-06f,
-1.961048546e-06f, 1.959434304e-06f, 1.957816911e-06f, 1.956196370e-06f, 1.954572684e-06f, 1.952945855e-06f, 1.951315889e-06f, 1.949682787e-06f, 1.948046553e-06f, 1.946407191e-06f,
-1.944764704e-06f, 1.943119094e-06f, 1.941470367e-06f, 1.939818524e-06f, 1.938163569e-06f, 1.936505505e-06f, 1.934844337e-06f, 1.933180066e-06f, 1.931512698e-06f, 1.929842234e-06f,
-1.928168678e-06f, 1.926492034e-06f, 1.924812305e-06f, 1.923129495e-06f, 1.921443606e-06f, 1.919754642e-06f, 1.918062608e-06f, 1.916367505e-06f, 1.914669337e-06f, 1.912968109e-06f,
-1.911263822e-06f, 1.909556482e-06f, 1.907846090e-06f, 1.906132651e-06f, 1.904416168e-06f, 1.902696645e-06f, 1.900974084e-06f, 1.899248490e-06f, 1.897519865e-06f, 1.895788214e-06f,
-1.894053539e-06f, 1.892315845e-06f, 1.890575134e-06f, 1.888831410e-06f, 1.887084677e-06f, 1.885334938e-06f, 1.883582197e-06f, 1.881826457e-06f, 1.880067721e-06f, 1.878305994e-06f,
-1.876541278e-06f, 1.874773577e-06f, 1.873002895e-06f, 1.871229236e-06f, 1.869452602e-06f, 1.867672997e-06f, 1.865890425e-06f, 1.864104889e-06f, 1.862316394e-06f, 1.860524942e-06f,
-1.858730536e-06f, 1.856933182e-06f, 1.855132881e-06f, 1.853329639e-06f, 1.851523457e-06f, 1.849714341e-06f, 1.847902293e-06f, 1.846087317e-06f, 1.844269417e-06f, 1.842448596e-06f,
-1.840624858e-06f, 1.838798206e-06f, 1.836968645e-06f, 1.835136177e-06f, 1.833300807e-06f, 1.831462537e-06f, 1.829621373e-06f, 1.827777316e-06f, 1.825930371e-06f, 1.824080542e-06f,
-1.822227832e-06f, 1.820372245e-06f, 1.818513784e-06f, 1.816652454e-06f, 1.814788257e-06f, 1.812921198e-06f, 1.811051280e-06f, 1.809178507e-06f, 1.807302882e-06f, 1.805424410e-06f,
-1.803543094e-06f, 1.801658937e-06f, 1.799771943e-06f, 1.797882117e-06f, 1.795989461e-06f, 1.794093980e-06f, 1.792195677e-06f, 1.790294556e-06f, 1.788390621e-06f, 1.786483875e-06f,
-1.784574322e-06f, 1.782661965e-06f, 1.780746810e-06f, 1.778828859e-06f, 1.776908116e-06f, 1.774984585e-06f, 1.773058269e-06f, 1.771129173e-06f, 1.769197300e-06f, 1.767262654e-06f,
-1.765325239e-06f, 1.763385058e-06f, 1.761442115e-06f, 1.759496415e-06f, 1.757547960e-06f, 1.755596756e-06f, 1.753642804e-06f, 1.751686110e-06f, 1.749726678e-06f, 1.747764510e-06f,
-1.745799610e-06f, 1.743831984e-06f, 1.741861634e-06f, 1.739888564e-06f, 1.737912778e-06f, 1.735934280e-06f, 1.733953074e-06f, 1.731969164e-06f, 1.729982553e-06f, 1.727993246e-06f,
-1.726001245e-06f, 1.724006556e-06f, 1.722009182e-06f, 1.720009126e-06f, 1.718006394e-06f, 1.716000988e-06f, 1.713992912e-06f, 1.711982171e-06f, 1.709968768e-06f, 1.707952707e-06f,
-1.705933993e-06f, 1.703912628e-06f, 1.701888617e-06f, 1.699861964e-06f, 1.697832673e-06f, 1.695800748e-06f, 1.693766192e-06f, 1.691729009e-06f, 1.689689205e-06f, 1.687646781e-06f,
-1.685601743e-06f, 1.683554094e-06f, 1.681503839e-06f, 1.679450980e-06f, 1.677395523e-06f, 1.675337471e-06f, 1.673276828e-06f, 1.671213598e-06f, 1.669147785e-06f, 1.667079394e-06f,
-1.665008427e-06f, 1.662934889e-06f, 1.660858784e-06f, 1.658780116e-06f, 1.656698890e-06f, 1.654615108e-06f, 1.652528775e-06f, 1.650439895e-06f, 1.648348472e-06f, 1.646254511e-06f,
-1.644158014e-06f, 1.642058986e-06f, 1.639957432e-06f, 1.637853354e-06f, 1.635746758e-06f, 1.633637647e-06f, 1.631526026e-06f, 1.629411897e-06f, 1.627295266e-06f, 1.625176137e-06f,
-1.623054513e-06f, 1.620930398e-06f, 1.618803797e-06f, 1.616674714e-06f, 1.614543153e-06f, 1.612409117e-06f, 1.610272611e-06f, 1.608133640e-06f, 1.605992206e-06f, 1.603848315e-06f,
-1.601701969e-06f, 1.599553175e-06f, 1.597401934e-06f, 1.595248253e-06f, 1.593092134e-06f, 1.590933582e-06f, 1.588772601e-06f, 1.586609194e-06f, 1.584443367e-06f, 1.582275124e-06f,
-1.580104468e-06f, 1.577931403e-06f, 1.575755934e-06f, 1.573578065e-06f, 1.571397800e-06f, 1.569215143e-06f, 1.567030099e-06f, 1.564842671e-06f, 1.562652863e-06f, 1.560460681e-06f,
-1.558266127e-06f, 1.556069206e-06f, 1.553869923e-06f, 1.551668281e-06f, 1.549464285e-06f, 1.547257939e-06f, 1.545049247e-06f, 1.542838213e-06f, 1.540624841e-06f, 1.538409136e-06f,
-1.536191102e-06f, 1.533970743e-06f, 1.531748063e-06f, 1.529523067e-06f, 1.527295758e-06f, 1.525066142e-06f, 1.522834221e-06f, 1.520600000e-06f, 1.518363485e-06f, 1.516124678e-06f,
-1.513883584e-06f, 1.511640207e-06f, 1.509394552e-06f, 1.507146622e-06f, 1.504896423e-06f, 1.502643958e-06f, 1.500389231e-06f, 1.498132248e-06f, 1.495873011e-06f, 1.493611525e-06f,
-1.491347795e-06f, 1.489081825e-06f, 1.486813619e-06f, 1.484543182e-06f, 1.482270517e-06f, 1.479995629e-06f, 1.477718522e-06f, 1.475439201e-06f, 1.473157670e-06f, 1.470873933e-06f,
-1.468587994e-06f, 1.466299858e-06f, 1.464009529e-06f, 1.461717012e-06f, 1.459422310e-06f, 1.457125428e-06f, 1.454826370e-06f, 1.452525141e-06f, 1.450221745e-06f, 1.447916187e-06f,
-1.445608469e-06f, 1.443298598e-06f, 1.440986577e-06f, 1.438672411e-06f, 1.436356104e-06f, 1.434037660e-06f, 1.431717084e-06f, 1.429394380e-06f, 1.427069552e-06f, 1.424742605e-06f,
-1.422413543e-06f, 1.420082370e-06f, 1.417749092e-06f, 1.415413711e-06f, 1.413076233e-06f, 1.410736662e-06f, 1.408395003e-06f, 1.406051259e-06f, 1.403705435e-06f, 1.401357536e-06f,
-1.399007566e-06f, 1.396655529e-06f, 1.394301429e-06f, 1.391945272e-06f, 1.389587061e-06f, 1.387226802e-06f, 1.384864497e-06f, 1.382500152e-06f, 1.380133772e-06f, 1.377765360e-06f,
-1.375394920e-06f, 1.373022459e-06f, 1.370647979e-06f, 1.368271485e-06f, 1.365892982e-06f, 1.363512475e-06f, 1.361129966e-06f, 1.358745462e-06f, 1.356358966e-06f, 1.353970483e-06f,
-1.351580018e-06f, 1.349187574e-06f, 1.346793157e-06f, 1.344396770e-06f, 1.341998418e-06f, 1.339598107e-06f, 1.337195839e-06f, 1.334791619e-06f, 1.332385453e-06f, 1.329977345e-06f,
-1.327567298e-06f, 1.325155318e-06f, 1.322741408e-06f, 1.320325575e-06f, 1.317907821e-06f, 1.315488151e-06f, 1.313066571e-06f, 1.310643083e-06f, 1.308217694e-06f, 1.305790407e-06f,
-1.303361227e-06f, 1.300930159e-06f, 1.298497206e-06f, 1.296062374e-06f, 1.293625667e-06f, 1.291187089e-06f, 1.288746645e-06f, 1.286304340e-06f, 1.283860177e-06f, 1.281414163e-06f,
-1.278966300e-06f, 1.276516594e-06f, 1.274065049e-06f, 1.271611670e-06f, 1.269156461e-06f, 1.266699426e-06f, 1.264240571e-06f, 1.261779900e-06f, 1.259317418e-06f, 1.256853128e-06f,
-1.254387036e-06f, 1.251919145e-06f, 1.249449462e-06f, 1.246977989e-06f, 1.244504733e-06f, 1.242029696e-06f, 1.239552885e-06f, 1.237074303e-06f, 1.234593955e-06f, 1.232111846e-06f,
-1.229627979e-06f, 1.227142361e-06f, 1.224654995e-06f, 1.222165885e-06f, 1.219675038e-06f, 1.217182456e-06f, 1.214688145e-06f, 1.212192110e-06f, 1.209694354e-06f, 1.207194882e-06f,
-1.204693700e-06f, 1.202190812e-06f, 1.199686221e-06f, 1.197179934e-06f, 1.194671954e-06f, 1.192162286e-06f, 1.189650935e-06f, 1.187137906e-06f, 1.184623202e-06f, 1.182106829e-06f,
-1.179588791e-06f, 1.177069093e-06f, 1.174547739e-06f, 1.172024735e-06f, 1.169500084e-06f, 1.166973791e-06f, 1.164445862e-06f, 1.161916300e-06f, 1.159385110e-06f, 1.156852298e-06f,
-1.154317866e-06f, 1.151781822e-06f, 1.149244168e-06f, 1.146704909e-06f, 1.144164051e-06f, 1.141621597e-06f, 1.139077553e-06f, 1.136531923e-06f, 1.133984712e-06f, 1.131435924e-06f,
-1.128885564e-06f, 1.126333637e-06f, 1.123780148e-06f, 1.121225101e-06f, 1.118668500e-06f, 1.116110351e-06f, 1.113550658e-06f, 1.110989426e-06f, 1.108426660e-06f, 1.105862363e-06f,
-1.103296542e-06f, 1.100729200e-06f, 1.098160342e-06f, 1.095589973e-06f, 1.093018098e-06f, 1.090444722e-06f, 1.087869848e-06f, 1.085293482e-06f, 1.082715628e-06f, 1.080136292e-06f,
-1.077555477e-06f, 1.074973189e-06f, 1.072389432e-06f, 1.069804212e-06f, 1.067217531e-06f, 1.064629397e-06f, 1.062039812e-06f, 1.059448782e-06f, 1.056856311e-06f, 1.054262405e-06f,
-1.051667068e-06f, 1.049070305e-06f, 1.046472120e-06f, 1.043872518e-06f, 1.041271504e-06f, 1.038669082e-06f, 1.036065258e-06f, 1.033460036e-06f, 1.030853421e-06f, 1.028245417e-06f,
-1.025636030e-06f, 1.023025264e-06f, 1.020413123e-06f, 1.017799613e-06f, 1.015184738e-06f, 1.012568504e-06f, 1.009950914e-06f, 1.007331973e-06f, 1.004711687e-06f, 1.002090060e-06f,
-9.994670961e-07f, 9.968428012e-07f, 9.942171795e-07f, 9.915902359e-07f, 9.889619752e-07f, 9.863324020e-07f, 9.837015211e-07f, 9.810693373e-07f, 9.784358555e-07f, 9.758010802e-07f,
-9.731650164e-07f, 9.705276688e-07f, 9.678890421e-07f, 9.652491412e-07f, 9.626079707e-07f, 9.599655356e-07f, 9.573218406e-07f, 9.546768904e-07f, 9.520306898e-07f, 9.493832437e-07f,
-9.467345567e-07f, 9.440846338e-07f, 9.414334797e-07f, 9.387810991e-07f, 9.361274969e-07f, 9.334726779e-07f, 9.308166468e-07f, 9.281594085e-07f, 9.255009677e-07f, 9.228413293e-07f,
-9.201804980e-07f, 9.175184786e-07f, 9.148552760e-07f, 9.121908950e-07f, 9.095253403e-07f, 9.068586168e-07f, 9.041907293e-07f, 9.015216825e-07f, 8.988514814e-07f, 8.961801306e-07f,
-8.935076351e-07f, 8.908339996e-07f, 8.881592289e-07f, 8.854833279e-07f, 8.828063014e-07f, 8.801281542e-07f, 8.774488911e-07f, 8.747685169e-07f, 8.720870365e-07f, 8.694044547e-07f,
-8.667207763e-07f, 8.640360062e-07f, 8.613501491e-07f, 8.586632099e-07f, 8.559751934e-07f, 8.532861045e-07f, 8.505959480e-07f, 8.479047287e-07f, 8.452124514e-07f, 8.425191211e-07f,
-8.398247424e-07f, 8.371293204e-07f, 8.344328597e-07f, 8.317353653e-07f, 8.290368419e-07f, 8.263372945e-07f, 8.236367278e-07f, 8.209351468e-07f, 8.182325562e-07f, 8.155289609e-07f,
-8.128243658e-07f, 8.101187756e-07f, 8.074121953e-07f, 8.047046297e-07f, 8.019960836e-07f, 7.992865619e-07f, 7.965760695e-07f, 7.938646112e-07f, 7.911521918e-07f, 7.884388162e-07f,
-7.857244893e-07f, 7.830092159e-07f, 7.802930009e-07f, 7.775758492e-07f, 7.748577655e-07f, 7.721387548e-07f, 7.694188220e-07f, 7.666979718e-07f, 7.639762092e-07f, 7.612535389e-07f,
-7.585299660e-07f, 7.558054952e-07f, 7.530801314e-07f, 7.503538795e-07f, 7.476267443e-07f, 7.448987308e-07f, 7.421698437e-07f, 7.394400880e-07f, 7.367094685e-07f, 7.339779902e-07f,
-7.312456578e-07f, 7.285124762e-07f, 7.257784503e-07f, 7.230435851e-07f, 7.203078853e-07f, 7.175713559e-07f, 7.148340017e-07f, 7.120958276e-07f, 7.093568384e-07f, 7.066170392e-07f,
-7.038764346e-07f, 7.011350297e-07f, 6.983928293e-07f, 6.956498383e-07f, 6.929060615e-07f, 6.901615039e-07f, 6.874161703e-07f, 6.846700657e-07f, 6.819231948e-07f, 6.791755626e-07f,
-6.764271740e-07f, 6.736780339e-07f, 6.709281471e-07f, 6.681775185e-07f, 6.654261531e-07f, 6.626740556e-07f, 6.599212311e-07f, 6.571676843e-07f, 6.544134203e-07f, 6.516584437e-07f,
-6.489027597e-07f, 6.461463730e-07f, 6.433892886e-07f, 6.406315113e-07f, 6.378730460e-07f, 6.351138976e-07f, 6.323540711e-07f, 6.295935713e-07f, 6.268324031e-07f, 6.240705714e-07f,
-6.213080811e-07f, 6.185449370e-07f, 6.157811442e-07f, 6.130167075e-07f, 6.102516317e-07f, 6.074859218e-07f, 6.047195828e-07f, 6.019526193e-07f, 5.991850365e-07f, 5.964168391e-07f,
-5.936480322e-07f, 5.908786204e-07f, 5.881086089e-07f, 5.853380025e-07f, 5.825668060e-07f, 5.797950244e-07f, 5.770226625e-07f, 5.742497254e-07f, 5.714762178e-07f, 5.687021447e-07f,
-5.659275110e-07f, 5.631523215e-07f, 5.603765813e-07f, 5.576002952e-07f, 5.548234680e-07f, 5.520461047e-07f, 5.492682103e-07f, 5.464897895e-07f, 5.437108473e-07f, 5.409313887e-07f,
-5.381514185e-07f, 5.353709415e-07f, 5.325899628e-07f, 5.298084873e-07f, 5.270265197e-07f, 5.242440651e-07f, 5.214611283e-07f, 5.186777143e-07f, 5.158938279e-07f, 5.131094741e-07f,
-5.103246577e-07f, 5.075393837e-07f, 5.047536569e-07f, 5.019674824e-07f, 4.991808649e-07f, 4.963938093e-07f, 4.936063207e-07f, 4.908184038e-07f, 4.880300637e-07f, 4.852413051e-07f,
-4.824521331e-07f, 4.796625525e-07f, 4.768725681e-07f, 4.740821850e-07f, 4.712914081e-07f, 4.685002421e-07f, 4.657086921e-07f, 4.629167629e-07f, 4.601244595e-07f, 4.573317867e-07f,
-4.545387495e-07f, 4.517453527e-07f, 4.489516013e-07f, 4.461575001e-07f, 4.433630541e-07f, 4.405682682e-07f, 4.377731472e-07f, 4.349776962e-07f, 4.321819199e-07f, 4.293858233e-07f,
-4.265894112e-07f, 4.237926887e-07f, 4.209956605e-07f, 4.181983317e-07f, 4.154007070e-07f, 4.126027914e-07f, 4.098045899e-07f, 4.070061072e-07f, 4.042073483e-07f, 4.014083181e-07f,
-3.986090215e-07f, 3.958094634e-07f, 3.930096487e-07f, 3.902095823e-07f, 3.874092691e-07f, 3.846087140e-07f, 3.818079219e-07f, 3.790068977e-07f, 3.762056463e-07f, 3.734041725e-07f,
-3.706024813e-07f, 3.678005777e-07f, 3.649984663e-07f, 3.621961523e-07f, 3.593936404e-07f, 3.565909356e-07f, 3.537880428e-07f, 3.509849668e-07f, 3.481817125e-07f, 3.453782849e-07f,
-3.425746888e-07f, 3.397709291e-07f, 3.369670107e-07f, 3.341629386e-07f, 3.313587175e-07f, 3.285543525e-07f, 3.257498483e-07f, 3.229452098e-07f, 3.201404421e-07f, 3.173355498e-07f,
-3.145305380e-07f, 3.117254116e-07f, 3.089201753e-07f, 3.061148341e-07f, 3.033093929e-07f, 3.005038566e-07f, 2.976982300e-07f, 2.948925180e-07f, 2.920867256e-07f, 2.892808575e-07f,
-2.864749187e-07f, 2.836689141e-07f, 2.808628485e-07f, 2.780567269e-07f, 2.752505540e-07f, 2.724443349e-07f, 2.696380743e-07f, 2.668317771e-07f, 2.640254482e-07f, 2.612190925e-07f,
-2.584127149e-07f, 2.556063202e-07f, 2.527999134e-07f, 2.499934992e-07f, 2.471870826e-07f, 2.443806684e-07f, 2.415742615e-07f, 2.387678668e-07f, 2.359614891e-07f, 2.331551333e-07f,
-2.303488043e-07f, 2.275425070e-07f, 2.247362461e-07f, 2.219300267e-07f, 2.191238535e-07f, 2.163177313e-07f, 2.135116652e-07f, 2.107056599e-07f, 2.078997203e-07f, 2.050938512e-07f,
-2.022880575e-07f, 1.994823441e-07f, 1.966767159e-07f, 1.938711776e-07f, 1.910657342e-07f, 1.882603904e-07f, 1.854551512e-07f, 1.826500215e-07f, 1.798450059e-07f, 1.770401095e-07f,
-1.742353370e-07f, 1.714306934e-07f, 1.686261834e-07f, 1.658218119e-07f, 1.630175838e-07f, 1.602135038e-07f, 1.574095769e-07f, 1.546058079e-07f, 1.518022016e-07f, 1.489987629e-07f,
-1.461954966e-07f, 1.433924075e-07f, 1.405895005e-07f, 1.377867805e-07f, 1.349842522e-07f, 1.321819205e-07f, 1.293797903e-07f, 1.265778663e-07f, 1.237761534e-07f, 1.209746564e-07f,
-1.181733802e-07f, 1.153723295e-07f, 1.125715093e-07f, 1.097709243e-07f, 1.069705794e-07f, 1.041704794e-07f, 1.013706290e-07f, 9.857103324e-08f, 9.577169680e-08f, 9.297262453e-08f,
-9.017382126e-08f, 8.737529179e-08f, 8.457704094e-08f, 8.177907353e-08f, 7.898139437e-08f, 7.618400828e-08f, 7.338692005e-08f, 7.059013451e-08f, 6.779365647e-08f, 6.499749071e-08f,
-6.220164207e-08f, 5.940611533e-08f, 5.661091530e-08f, 5.381604679e-08f, 5.102151458e-08f, 4.822732349e-08f, 4.543347832e-08f, 4.263998384e-08f, 3.984684487e-08f, 3.705406620e-08f,
-3.426165262e-08f, 3.146960891e-08f, 2.867793987e-08f, 2.588665029e-08f, 2.309574496e-08f, 2.030522865e-08f, 1.751510616e-08f, 1.472538226e-08f, 1.193606174e-08f, 9.147149383e-09f,
-6.358649958e-09f, 3.570568245e-09f, 7.829090213e-10f, -2.004322941e-09f, -4.791122868e-09f, -7.577485990e-09f, -1.036340754e-08f, -1.314888274e-08f, -1.593390683e-08f, -1.871847505e-08f,
--2.150258263e-08f, -2.428622481e-08f, -2.706939683e-08f, -2.985209393e-08f, -3.263431135e-08f, -3.541604434e-08f, -3.819728815e-08f, -4.097803801e-08f, -4.375828918e-08f, -4.653803692e-08f,
--4.931727647e-08f, -5.209600308e-08f, -5.487421201e-08f, -5.765189853e-08f, -6.042905788e-08f, -6.320568533e-08f, -6.598177613e-08f, -6.875732556e-08f, -7.153232889e-08f, -7.430678136e-08f,
--7.708067826e-08f, -7.985401486e-08f, -8.262678642e-08f, -8.539898822e-08f, -8.817061554e-08f, -9.094166365e-08f, -9.371212784e-08f, -9.648200337e-08f, -9.925128555e-08f, -1.020199696e-07f,
--1.047880509e-07f, -1.075555247e-07f, -1.103223863e-07f, -1.130886309e-07f, -1.158542540e-07f, -1.186192506e-07f, -1.213836163e-07f, -1.241473462e-07f, -1.269104356e-07f, -1.296728799e-07f,
--1.324346744e-07f, -1.351958143e-07f, -1.379562951e-07f, -1.407161119e-07f, -1.434752601e-07f, -1.462337350e-07f, -1.489915319e-07f, -1.517486462e-07f, -1.545050732e-07f, -1.572608081e-07f,
--1.600158464e-07f, -1.627701832e-07f, -1.655238141e-07f, -1.682767342e-07f, -1.710289389e-07f, -1.737804236e-07f, -1.765311836e-07f, -1.792812142e-07f, -1.820305108e-07f, -1.847790686e-07f,
--1.875268831e-07f, -1.902739496e-07f, -1.930202634e-07f, -1.957658200e-07f, -1.985106145e-07f, -2.012546424e-07f, -2.039978991e-07f, -2.067403799e-07f, -2.094820801e-07f, -2.122229951e-07f,
--2.149631203e-07f, -2.177024511e-07f, -2.204409828e-07f, -2.231787108e-07f, -2.259156304e-07f, -2.286517370e-07f, -2.313870261e-07f, -2.341214929e-07f, -2.368551329e-07f, -2.395879414e-07f,
--2.423199138e-07f, -2.450510456e-07f, -2.477813321e-07f, -2.505107686e-07f, -2.532393507e-07f, -2.559670736e-07f, -2.586939328e-07f, -2.614199236e-07f, -2.641450416e-07f, -2.668692820e-07f,
--2.695926403e-07f, -2.723151119e-07f, -2.750366923e-07f, -2.777573767e-07f, -2.804771607e-07f, -2.831960396e-07f, -2.859140089e-07f, -2.886310640e-07f, -2.913472003e-07f, -2.940624133e-07f,
--2.967766983e-07f, -2.994900508e-07f, -3.022024663e-07f, -3.049139401e-07f, -3.076244678e-07f, -3.103340447e-07f, -3.130426663e-07f, -3.157503280e-07f, -3.184570253e-07f, -3.211627537e-07f,
--3.238675086e-07f, -3.265712854e-07f, -3.292740796e-07f, -3.319758866e-07f, -3.346767020e-07f, -3.373765212e-07f, -3.400753396e-07f, -3.427731528e-07f, -3.454699562e-07f, -3.481657452e-07f,
--3.508605153e-07f, -3.535542621e-07f, -3.562469810e-07f, -3.589386675e-07f, -3.616293171e-07f, -3.643189252e-07f, -3.670074874e-07f, -3.696949992e-07f, -3.723814560e-07f, -3.750668533e-07f,
--3.777511867e-07f, -3.804344517e-07f, -3.831166437e-07f, -3.857977582e-07f, -3.884777909e-07f, -3.911567371e-07f, -3.938345925e-07f, -3.965113525e-07f, -3.991870126e-07f, -4.018615685e-07f,
--4.045350155e-07f, -4.072073493e-07f, -4.098785653e-07f, -4.125486592e-07f, -4.152176263e-07f, -4.178854624e-07f, -4.205521629e-07f, -4.232177233e-07f, -4.258821393e-07f, -4.285454064e-07f,
--4.312075201e-07f, -4.338684759e-07f, -4.365282695e-07f, -4.391868964e-07f, -4.418443522e-07f, -4.445006324e-07f, -4.471557326e-07f, -4.498096483e-07f, -4.524623753e-07f, -4.551139089e-07f,
--4.577642449e-07f, -4.604133788e-07f, -4.630613061e-07f, -4.657080225e-07f, -4.683535236e-07f, -4.709978050e-07f, -4.736408622e-07f, -4.762826908e-07f, -4.789232865e-07f, -4.815626449e-07f,
--4.842007615e-07f, -4.868376321e-07f, -4.894732521e-07f, -4.921076173e-07f, -4.947407232e-07f, -4.973725654e-07f, -5.000031397e-07f, -5.026324415e-07f, -5.052604666e-07f, -5.078872106e-07f,
--5.105126691e-07f, -5.131368378e-07f, -5.157597123e-07f, -5.183812882e-07f, -5.210015613e-07f, -5.236205270e-07f, -5.262381812e-07f, -5.288545195e-07f, -5.314695375e-07f, -5.340832309e-07f,
--5.366955953e-07f, -5.393066264e-07f, -5.419163200e-07f, -5.445246716e-07f, -5.471316770e-07f, -5.497373319e-07f, -5.523416318e-07f, -5.549445726e-07f, -5.575461499e-07f, -5.601463593e-07f,
--5.627451967e-07f, -5.653426576e-07f, -5.679387379e-07f, -5.705334331e-07f, -5.731267391e-07f, -5.757186514e-07f, -5.783091659e-07f, -5.808982783e-07f, -5.834859843e-07f, -5.860722795e-07f,
--5.886571598e-07f, -5.912406209e-07f, -5.938226584e-07f, -5.964032682e-07f, -5.989824460e-07f, -6.015601874e-07f, -6.041364884e-07f, -6.067113445e-07f, -6.092847516e-07f, -6.118567055e-07f,
--6.144272018e-07f, -6.169962364e-07f, -6.195638049e-07f, -6.221299033e-07f, -6.246945272e-07f, -6.272576724e-07f, -6.298193348e-07f, -6.323795100e-07f, -6.349381939e-07f, -6.374953823e-07f,
--6.400510709e-07f, -6.426052555e-07f, -6.451579320e-07f, -6.477090962e-07f, -6.502587438e-07f, -6.528068707e-07f, -6.553534726e-07f, -6.578985454e-07f, -6.604420849e-07f, -6.629840869e-07f,
--6.655245473e-07f, -6.680634619e-07f, -6.706008264e-07f, -6.731366368e-07f, -6.756708889e-07f, -6.782035785e-07f, -6.807347014e-07f, -6.832642536e-07f, -6.857922308e-07f, -6.883186290e-07f,
--6.908434439e-07f, -6.933666714e-07f, -6.958883075e-07f, -6.984083479e-07f, -7.009267886e-07f, -7.034436253e-07f, -7.059588541e-07f, -7.084724707e-07f, -7.109844711e-07f, -7.134948511e-07f,
--7.160036067e-07f, -7.185107337e-07f, -7.210162281e-07f, -7.235200857e-07f, -7.260223024e-07f, -7.285228742e-07f, -7.310217969e-07f, -7.335190665e-07f, -7.360146789e-07f, -7.385086301e-07f,
--7.410009159e-07f, -7.434915323e-07f, -7.459804751e-07f, -7.484677405e-07f, -7.509533242e-07f, -7.534372223e-07f, -7.559194306e-07f, -7.583999452e-07f, -7.608787620e-07f, -7.633558770e-07f,
--7.658312860e-07f, -7.683049852e-07f, -7.707769703e-07f, -7.732472375e-07f, -7.757157828e-07f, -7.781826019e-07f, -7.806476911e-07f, -7.831110462e-07f, -7.855726632e-07f, -7.880325382e-07f,
--7.904906671e-07f, -7.929470460e-07f, -7.954016708e-07f, -7.978545375e-07f, -8.003056422e-07f, -8.027549809e-07f, -8.052025497e-07f, -8.076483444e-07f, -8.100923612e-07f, -8.125345961e-07f,
--8.149750451e-07f, -8.174137042e-07f, -8.198505696e-07f, -8.222856372e-07f, -8.247189031e-07f, -8.271503634e-07f, -8.295800141e-07f, -8.320078513e-07f, -8.344338710e-07f, -8.368580693e-07f,
--8.392804423e-07f, -8.417009860e-07f, -8.441196966e-07f, -8.465365701e-07f, -8.489516026e-07f, -8.513647903e-07f, -8.537761291e-07f, -8.561856152e-07f, -8.585932447e-07f, -8.609990138e-07f,
--8.634029184e-07f, -8.658049548e-07f, -8.682051190e-07f, -8.706034072e-07f, -8.729998155e-07f, -8.753943400e-07f, -8.777869769e-07f, -8.801777223e-07f, -8.825665724e-07f, -8.849535232e-07f,
--8.873385709e-07f, -8.897217118e-07f, -8.921029419e-07f, -8.944822574e-07f, -8.968596545e-07f, -8.992351293e-07f, -9.016086781e-07f, -9.039802969e-07f, -9.063499820e-07f, -9.087177296e-07f,
--9.110835358e-07f, -9.134473969e-07f, -9.158093090e-07f, -9.181692683e-07f, -9.205272711e-07f, -9.228833136e-07f, -9.252373919e-07f, -9.275895022e-07f, -9.299396409e-07f, -9.322878041e-07f,
--9.346339881e-07f, -9.369781890e-07f, -9.393204032e-07f, -9.416606268e-07f, -9.439988562e-07f, -9.463350875e-07f, -9.486693170e-07f, -9.510015409e-07f, -9.533317557e-07f, -9.556599573e-07f,
--9.579861423e-07f, -9.603103068e-07f, -9.626324471e-07f, -9.649525595e-07f, -9.672706403e-07f, -9.695866858e-07f, -9.719006922e-07f, -9.742126558e-07f, -9.765225731e-07f, -9.788304402e-07f,
--9.811362535e-07f, -9.834400093e-07f, -9.857417039e-07f, -9.880413336e-07f, -9.903388948e-07f, -9.926343837e-07f, -9.949277968e-07f, -9.972191304e-07f, -9.995083808e-07f, -1.001795544e-06f,
--1.004080617e-06f, -1.006363596e-06f, -1.008644477e-06f, -1.010923257e-06f, -1.013199932e-06f, -1.015474498e-06f, -1.017746952e-06f, -1.020017289e-06f, -1.022285508e-06f, -1.024551603e-06f,
--1.026815571e-06f, -1.029077409e-06f, -1.031337113e-06f, -1.033594680e-06f, -1.035850105e-06f, -1.038103386e-06f, -1.040354519e-06f, -1.042603499e-06f, -1.044850324e-06f, -1.047094991e-06f,
--1.049337494e-06f, -1.051577832e-06f, -1.053815999e-06f, -1.056051994e-06f, -1.058285812e-06f, -1.060517449e-06f, -1.062746903e-06f, -1.064974169e-06f, -1.067199244e-06f, -1.069422125e-06f,
--1.071642808e-06f, -1.073861290e-06f, -1.076077566e-06f, -1.078291634e-06f, -1.080503490e-06f, -1.082713130e-06f, -1.084920552e-06f, -1.087125751e-06f, -1.089328724e-06f, -1.091529467e-06f,
--1.093727978e-06f, -1.095924252e-06f, -1.098118287e-06f, -1.100310078e-06f, -1.102499622e-06f, -1.104686916e-06f, -1.106871956e-06f, -1.109054740e-06f, -1.111235262e-06f, -1.113413521e-06f,
--1.115589512e-06f, -1.117763233e-06f, -1.119934679e-06f, -1.122103847e-06f, -1.124270734e-06f, -1.126435337e-06f, -1.128597652e-06f, -1.130757675e-06f, -1.132915404e-06f, -1.135070835e-06f,
--1.137223964e-06f, -1.139374788e-06f, -1.141523304e-06f, -1.143669508e-06f, -1.145813398e-06f, -1.147954969e-06f, -1.150094218e-06f, -1.152231142e-06f, -1.154365738e-06f, -1.156498002e-06f,
--1.158627930e-06f, -1.160755521e-06f, -1.162880769e-06f, -1.165003673e-06f, -1.167124228e-06f, -1.169242431e-06f, -1.171358279e-06f, -1.173471769e-06f, -1.175582897e-06f, -1.177691660e-06f,
--1.179798055e-06f, -1.181902078e-06f, -1.184003726e-06f, -1.186102996e-06f, -1.188199885e-06f, -1.190294389e-06f, -1.192386505e-06f, -1.194476230e-06f, -1.196563561e-06f, -1.198648493e-06f,
--1.200731025e-06f, -1.202811153e-06f, -1.204888873e-06f, -1.206964182e-06f, -1.209037077e-06f, -1.211107556e-06f, -1.213175613e-06f, -1.215241248e-06f, -1.217304455e-06f, -1.219365233e-06f,
--1.221423577e-06f, -1.223479485e-06f, -1.225532953e-06f, -1.227583978e-06f, -1.229632558e-06f, -1.231678688e-06f, -1.233722366e-06f, -1.235763589e-06f, -1.237802352e-06f, -1.239838655e-06f,
--1.241872492e-06f, -1.243903860e-06f, -1.245932758e-06f, -1.247959181e-06f, -1.249983127e-06f, -1.252004592e-06f, -1.254023573e-06f, -1.256040068e-06f, -1.258054072e-06f, -1.260065583e-06f,
--1.262074598e-06f, -1.264081114e-06f, -1.266085127e-06f, -1.268086634e-06f, -1.270085633e-06f, -1.272082121e-06f, -1.274076093e-06f, -1.276067548e-06f, -1.278056481e-06f, -1.280042891e-06f,
--1.282026773e-06f, -1.284008126e-06f, -1.285986945e-06f, -1.287963228e-06f, -1.289936972e-06f, -1.291908174e-06f, -1.293876830e-06f, -1.295842938e-06f, -1.297806495e-06f, -1.299767497e-06f,
--1.301725942e-06f, -1.303681827e-06f, -1.305635148e-06f, -1.307585903e-06f, -1.309534088e-06f, -1.311479702e-06f, -1.313422739e-06f, -1.315363199e-06f, -1.317301077e-06f, -1.319236371e-06f,
--1.321169078e-06f, -1.323099195e-06f, -1.325026719e-06f, -1.326951646e-06f, -1.328873975e-06f, -1.330793702e-06f, -1.332710823e-06f, -1.334625338e-06f, -1.336537241e-06f, -1.338446531e-06f,
--1.340353204e-06f, -1.342257258e-06f, -1.344158690e-06f, -1.346057496e-06f, -1.347953674e-06f, -1.349847221e-06f, -1.351738135e-06f, -1.353626411e-06f, -1.355512048e-06f, -1.357395043e-06f,
--1.359275392e-06f, -1.361153093e-06f, -1.363028143e-06f, -1.364900539e-06f, -1.366770279e-06f, -1.368637358e-06f, -1.370501776e-06f, -1.372363528e-06f, -1.374222612e-06f, -1.376079025e-06f,
--1.377932765e-06f, -1.379783828e-06f, -1.381632212e-06f, -1.383477914e-06f, -1.385320931e-06f, -1.387161260e-06f, -1.388998899e-06f, -1.390833845e-06f, -1.392666094e-06f, -1.394495645e-06f,
--1.396322495e-06f, -1.398146640e-06f, -1.399968079e-06f, -1.401786807e-06f, -1.403602823e-06f, -1.405416124e-06f, -1.407226707e-06f, -1.409034570e-06f, -1.410839709e-06f, -1.412642122e-06f,
--1.414441806e-06f, -1.416238759e-06f, -1.418032977e-06f, -1.419824459e-06f, -1.421613201e-06f, -1.423399201e-06f, -1.425182455e-06f, -1.426962963e-06f, -1.428740720e-06f, -1.430515724e-06f,
--1.432287973e-06f, -1.434057463e-06f, -1.435824192e-06f, -1.437588158e-06f, -1.439349358e-06f, -1.441107789e-06f, -1.442863449e-06f, -1.444616335e-06f, -1.446366444e-06f, -1.448113774e-06f,
--1.449858322e-06f, -1.451600085e-06f, -1.453339062e-06f, -1.455075248e-06f, -1.456808643e-06f, -1.458539243e-06f, -1.460267046e-06f, -1.461992048e-06f, -1.463714249e-06f, -1.465433644e-06f,
--1.467150231e-06f, -1.468864009e-06f, -1.470574973e-06f, -1.472283123e-06f, -1.473988455e-06f, -1.475690966e-06f, -1.477390655e-06f, -1.479087519e-06f, -1.480781555e-06f, -1.482472760e-06f,
--1.484161133e-06f, -1.485846670e-06f, -1.487529370e-06f, -1.489209229e-06f, -1.490886245e-06f, -1.492560417e-06f, -1.494231740e-06f, -1.495900214e-06f, -1.497565835e-06f, -1.499228601e-06f,
--1.500888509e-06f, -1.502545558e-06f, -1.504199744e-06f, -1.505851065e-06f, -1.507499520e-06f, -1.509145104e-06f, -1.510787817e-06f, -1.512427655e-06f, -1.514064616e-06f, -1.515698698e-06f,
--1.517329898e-06f, -1.518958214e-06f, -1.520583644e-06f, -1.522206186e-06f, -1.523825835e-06f, -1.525442592e-06f, -1.527056453e-06f, -1.528667415e-06f, -1.530275477e-06f, -1.531880636e-06f,
--1.533482889e-06f, -1.535082235e-06f, -1.536678672e-06f, -1.538272196e-06f, -1.539862805e-06f, -1.541450498e-06f, -1.543035271e-06f, -1.544617123e-06f, -1.546196051e-06f, -1.547772053e-06f,
--1.549345127e-06f, -1.550915270e-06f, -1.552482481e-06f, -1.554046756e-06f, -1.555608094e-06f, -1.557166492e-06f, -1.558721948e-06f, -1.560274460e-06f, -1.561824026e-06f, -1.563370643e-06f,
--1.564914309e-06f, -1.566455023e-06f, -1.567992781e-06f, -1.569527581e-06f, -1.571059422e-06f, -1.572588300e-06f, -1.574114215e-06f, -1.575637164e-06f, -1.577157143e-06f, -1.578674153e-06f,
--1.580188189e-06f, -1.581699251e-06f, -1.583207335e-06f, -1.584712440e-06f, -1.586214563e-06f, -1.587713703e-06f, -1.589209857e-06f, -1.590703024e-06f, -1.592193200e-06f, -1.593680384e-06f,
--1.595164574e-06f, -1.596645767e-06f, -1.598123962e-06f, -1.599599156e-06f, -1.601071348e-06f, -1.602540535e-06f, -1.604006715e-06f, -1.605469886e-06f, -1.606930046e-06f, -1.608387193e-06f,
--1.609841325e-06f, -1.611292440e-06f, -1.612740535e-06f, -1.614185610e-06f, -1.615627660e-06f, -1.617066686e-06f, -1.618502684e-06f, -1.619935653e-06f, -1.621365590e-06f, -1.622792494e-06f,
--1.624216362e-06f, -1.625637193e-06f, -1.627054984e-06f, -1.628469734e-06f, -1.629881440e-06f, -1.631290102e-06f, -1.632695715e-06f, -1.634098280e-06f, -1.635497793e-06f, -1.636894252e-06f,
--1.638287657e-06f, -1.639678004e-06f, -1.641065292e-06f, -1.642449520e-06f, -1.643830684e-06f, -1.645208783e-06f, -1.646583816e-06f, -1.647955780e-06f, -1.649324673e-06f, -1.650690493e-06f,
--1.652053240e-06f, -1.653412909e-06f, -1.654769501e-06f, -1.656123013e-06f, -1.657473442e-06f, -1.658820788e-06f, -1.660165048e-06f, -1.661506221e-06f, -1.662844304e-06f, -1.664179296e-06f,
--1.665511195e-06f, -1.666839999e-06f, -1.668165707e-06f, -1.669488315e-06f, -1.670807824e-06f, -1.672124230e-06f, -1.673437532e-06f, -1.674747729e-06f, -1.676054818e-06f, -1.677358798e-06f,
--1.678659666e-06f, -1.679957421e-06f, -1.681252062e-06f, -1.682543587e-06f, -1.683831993e-06f, -1.685117279e-06f, -1.686399444e-06f, -1.687678485e-06f, -1.688954401e-06f, -1.690227190e-06f,
--1.691496850e-06f, -1.692763380e-06f, -1.694026778e-06f, -1.695287042e-06f, -1.696544171e-06f, -1.697798162e-06f, -1.699049015e-06f, -1.700296727e-06f, -1.701541296e-06f, -1.702782722e-06f,
--1.704021003e-06f, -1.705256136e-06f, -1.706488120e-06f, -1.707716953e-06f, -1.708942635e-06f, -1.710165162e-06f, -1.711384535e-06f, -1.712600750e-06f, -1.713813806e-06f, -1.715023702e-06f,
--1.716230436e-06f, -1.717434007e-06f, -1.718634412e-06f, -1.719831651e-06f, -1.721025721e-06f, -1.722216622e-06f, -1.723404350e-06f, -1.724588906e-06f, -1.725770288e-06f, -1.726948493e-06f,
--1.728123520e-06f, -1.729295368e-06f, -1.730464036e-06f, -1.731629521e-06f, -1.732791822e-06f, -1.733950937e-06f, -1.735106866e-06f, -1.736259607e-06f, -1.737409157e-06f, -1.738555516e-06f,
--1.739698682e-06f, -1.740838653e-06f, -1.741975429e-06f, -1.743109007e-06f, -1.744239387e-06f, -1.745366566e-06f, -1.746490543e-06f, -1.747611317e-06f, -1.748728887e-06f, -1.749843250e-06f,
--1.750954406e-06f, -1.752062352e-06f, -1.753167089e-06f, -1.754268613e-06f, -1.755366924e-06f, -1.756462021e-06f, -1.757553901e-06f, -1.758642564e-06f, -1.759728008e-06f, -1.760810232e-06f,
--1.761889234e-06f, -1.762965014e-06f, -1.764037569e-06f, -1.765106898e-06f, -1.766173000e-06f, -1.767235874e-06f, -1.768295517e-06f, -1.769351930e-06f, -1.770405110e-06f, -1.771455057e-06f,
--1.772501768e-06f, -1.773545244e-06f, -1.774585481e-06f, -1.775622479e-06f, -1.776656237e-06f, -1.777686754e-06f, -1.778714027e-06f, -1.779738056e-06f, -1.780758840e-06f, -1.781776377e-06f,
--1.782790666e-06f, -1.783801706e-06f, -1.784809496e-06f, -1.785814033e-06f, -1.786815318e-06f, -1.787813349e-06f, -1.788808124e-06f, -1.789799642e-06f, -1.790787903e-06f, -1.791772904e-06f,
--1.792754645e-06f, -1.793733125e-06f, -1.794708342e-06f, -1.795680295e-06f, -1.796648983e-06f, -1.797614405e-06f, -1.798576559e-06f, -1.799535445e-06f, -1.800491061e-06f, -1.801443407e-06f,
--1.802392480e-06f, -1.803338280e-06f, -1.804280806e-06f, -1.805220057e-06f, -1.806156030e-06f, -1.807088727e-06f, -1.808018144e-06f, -1.808944282e-06f, -1.809867139e-06f, -1.810786713e-06f,
--1.811703005e-06f, -1.812616012e-06f, -1.813525734e-06f, -1.814432170e-06f, -1.815335318e-06f, -1.816235178e-06f, -1.817131748e-06f, -1.818025027e-06f, -1.818915015e-06f, -1.819801711e-06f,
--1.820685112e-06f, -1.821565219e-06f, -1.822442030e-06f, -1.823315545e-06f, -1.824185761e-06f, -1.825052679e-06f, -1.825916297e-06f, -1.826776615e-06f, -1.827633631e-06f, -1.828487344e-06f,
--1.829337753e-06f, -1.830184858e-06f, -1.831028657e-06f, -1.831869150e-06f, -1.832706335e-06f, -1.833540212e-06f, -1.834370780e-06f, -1.835198037e-06f, -1.836021983e-06f, -1.836842617e-06f,
--1.837659938e-06f, -1.838473945e-06f, -1.839284638e-06f, -1.840092014e-06f, -1.840896074e-06f, -1.841696816e-06f, -1.842494241e-06f, -1.843288345e-06f, -1.844079130e-06f, -1.844866594e-06f,
--1.845650736e-06f, -1.846431555e-06f, -1.847209051e-06f, -1.847983223e-06f, -1.848754069e-06f, -1.849521590e-06f, -1.850285784e-06f, -1.851046650e-06f, -1.851804188e-06f, -1.852558396e-06f,
--1.853309275e-06f, -1.854056822e-06f, -1.854801039e-06f, -1.855541923e-06f, -1.856279474e-06f, -1.857013690e-06f, -1.857744573e-06f, -1.858472120e-06f, -1.859196331e-06f, -1.859917205e-06f,
--1.860634741e-06f, -1.861348939e-06f, -1.862059799e-06f, -1.862767318e-06f, -1.863471497e-06f, -1.864172335e-06f, -1.864869830e-06f, -1.865563984e-06f, -1.866254794e-06f, -1.866942260e-06f,
--1.867626382e-06f, -1.868307158e-06f, -1.868984589e-06f, -1.869658673e-06f, -1.870329409e-06f, -1.870996798e-06f, -1.871660838e-06f, -1.872321529e-06f, -1.872978871e-06f, -1.873632862e-06f,
--1.874283502e-06f, -1.874930790e-06f, -1.875574726e-06f, -1.876215310e-06f, -1.876852540e-06f, -1.877486416e-06f, -1.878116937e-06f, -1.878744103e-06f, -1.879367914e-06f, -1.879988368e-06f,
--1.880605465e-06f, -1.881219205e-06f, -1.881829588e-06f, -1.882436611e-06f, -1.883040276e-06f, -1.883640581e-06f, -1.884237526e-06f, -1.884831111e-06f, -1.885421335e-06f, -1.886008197e-06f,
--1.886591697e-06f, -1.887171834e-06f, -1.887748608e-06f, -1.888322019e-06f, -1.888892066e-06f, -1.889458749e-06f, -1.890022066e-06f, -1.890582018e-06f, -1.891138605e-06f, -1.891691825e-06f,
--1.892241678e-06f, -1.892788164e-06f, -1.893331283e-06f, -1.893871034e-06f, -1.894407416e-06f, -1.894940430e-06f, -1.895470074e-06f, -1.895996349e-06f, -1.896519254e-06f, -1.897038788e-06f,
--1.897554952e-06f, -1.898067744e-06f, -1.898577165e-06f, -1.899083215e-06f, -1.899585892e-06f, -1.900085196e-06f, -1.900581128e-06f, -1.901073686e-06f, -1.901562871e-06f, -1.902048682e-06f,
--1.902531119e-06f, -1.903010181e-06f, -1.903485869e-06f, -1.903958181e-06f, -1.904427118e-06f, -1.904892679e-06f, -1.905354865e-06f, -1.905813674e-06f, -1.906269106e-06f, -1.906721162e-06f,
--1.907169840e-06f, -1.907615142e-06f, -1.908057065e-06f, -1.908495611e-06f, -1.908930779e-06f, -1.909362569e-06f, -1.909790980e-06f, -1.910216012e-06f, -1.910637666e-06f, -1.911055940e-06f,
--1.911470835e-06f, -1.911882350e-06f, -1.912290486e-06f, -1.912695242e-06f, -1.913096618e-06f, -1.913494613e-06f, -1.913889228e-06f, -1.914280463e-06f, -1.914668317e-06f, -1.915052790e-06f,
--1.915433882e-06f, -1.915811592e-06f, -1.916185922e-06f, -1.916556870e-06f, -1.916924437e-06f, -1.917288621e-06f, -1.917649425e-06f, -1.918006846e-06f, -1.918360885e-06f, -1.918711543e-06f,
--1.919058818e-06f, -1.919402711e-06f, -1.919743222e-06f, -1.920080350e-06f, -1.920414097e-06f, -1.920744460e-06f, -1.921071441e-06f, -1.921395040e-06f, -1.921715256e-06f, -1.922032090e-06f,
--1.922345541e-06f, -1.922655609e-06f, -1.922962295e-06f, -1.923265598e-06f, -1.923565518e-06f, -1.923862056e-06f, -1.924155211e-06f, -1.924444983e-06f, -1.924731373e-06f, -1.925014380e-06f,
--1.925294005e-06f, -1.925570247e-06f, -1.925843107e-06f, -1.926112584e-06f, -1.926378680e-06f, -1.926641392e-06f, -1.926900723e-06f, -1.927156672e-06f, -1.927409238e-06f, -1.927658423e-06f,
--1.927904225e-06f, -1.928146646e-06f, -1.928385685e-06f, -1.928621343e-06f, -1.928853620e-06f, -1.929082515e-06f, -1.929308028e-06f, -1.929530161e-06f, -1.929748913e-06f, -1.929964284e-06f,
--1.930176275e-06f, -1.930384885e-06f, -1.930590115e-06f, -1.930791964e-06f, -1.930990434e-06f, -1.931185524e-06f, -1.931377235e-06f, -1.931565566e-06f, -1.931750518e-06f, -1.931932091e-06f,
--1.932110285e-06f, -1.932285100e-06f, -1.932456538e-06f, -1.932624597e-06f, -1.932789278e-06f, -1.932950582e-06f, -1.933108509e-06f, -1.933263058e-06f, -1.933414230e-06f, -1.933562026e-06f,
--1.933706446e-06f, -1.933847489e-06f, -1.933985157e-06f, -1.934119449e-06f, -1.934250366e-06f, -1.934377908e-06f, -1.934502076e-06f, -1.934622869e-06f, -1.934740288e-06f, -1.934854334e-06f,
--1.934965006e-06f, -1.935072305e-06f, -1.935176232e-06f, -1.935276786e-06f, -1.935373968e-06f, -1.935467779e-06f, -1.935558219e-06f, -1.935645287e-06f, -1.935728986e-06f, -1.935809314e-06f,
--1.935886272e-06f, -1.935959861e-06f, -1.936030081e-06f, -1.936096933e-06f, -1.936160416e-06f, -1.936220532e-06f, -1.936277280e-06f, -1.936330662e-06f, -1.936380677e-06f, -1.936427326e-06f,
--1.936470609e-06f, -1.936510528e-06f, -1.936547081e-06f, -1.936580271e-06f, -1.936610097e-06f, -1.936636559e-06f, -1.936659659e-06f, -1.936679396e-06f, -1.936695772e-06f, -1.936708786e-06f,
--1.936718440e-06f, -1.936724733e-06f, -1.936727667e-06f, -1.936727241e-06f, -1.936723456e-06f, -1.936716313e-06f, -1.936705813e-06f, -1.936691955e-06f, -1.936674741e-06f, -1.936654171e-06f,
--1.936630245e-06f, -1.936602964e-06f, -1.936572329e-06f, -1.936538340e-06f, -1.936500998e-06f, -1.936460304e-06f, -1.936416257e-06f, -1.936368859e-06f, -1.936318110e-06f, -1.936264011e-06f,
--1.936206562e-06f, -1.936145765e-06f, -1.936081619e-06f, -1.936014125e-06f, -1.935943284e-06f, -1.935869097e-06f, -1.935791564e-06f, -1.935710686e-06f, -1.935626464e-06f, -1.935538897e-06f,
--1.935447988e-06f, -1.935353736e-06f, -1.935256142e-06f, -1.935155208e-06f, -1.935050933e-06f, -1.934943318e-06f, -1.934832364e-06f, -1.934718072e-06f, -1.934600443e-06f, -1.934479477e-06f,
--1.934355174e-06f, -1.934227536e-06f, -1.934096564e-06f, -1.933962258e-06f, -1.933824619e-06f, -1.933683647e-06f, -1.933539344e-06f, -1.933391710e-06f, -1.933240746e-06f, -1.933086453e-06f,
--1.932928831e-06f, -1.932767882e-06f, -1.932603606e-06f, -1.932436003e-06f, -1.932265076e-06f, -1.932090824e-06f, -1.931913248e-06f, -1.931732349e-06f, -1.931548129e-06f, -1.931360587e-06f,
--1.931169726e-06f, -1.930975544e-06f, -1.930778044e-06f, -1.930577227e-06f, -1.930373092e-06f, -1.930165642e-06f, -1.929954876e-06f, -1.929740796e-06f, -1.929523403e-06f, -1.929302698e-06f,
--1.929078681e-06f, -1.928851353e-06f, -1.928620715e-06f, -1.928386769e-06f, -1.928149515e-06f, -1.927908954e-06f, -1.927665086e-06f, -1.927417914e-06f, -1.927167438e-06f, -1.926913658e-06f,
--1.926656576e-06f, -1.926396193e-06f, -1.926132509e-06f, -1.925865526e-06f, -1.925595245e-06f, -1.925321666e-06f, -1.925044791e-06f, -1.924764621e-06f, -1.924481156e-06f, -1.924194398e-06f,
--1.923904347e-06f, -1.923611005e-06f, -1.923314373e-06f, -1.923014451e-06f, -1.922711241e-06f, -1.922404744e-06f, -1.922094961e-06f, -1.921781892e-06f, -1.921465540e-06f, -1.921145904e-06f,
--1.920822986e-06f, -1.920496788e-06f, -1.920167309e-06f, -1.919834552e-06f, -1.919498518e-06f, -1.919159206e-06f, -1.918816620e-06f, -1.918470759e-06f, -1.918121624e-06f, -1.917769218e-06f,
--1.917413540e-06f, -1.917054593e-06f, -1.916692377e-06f, -1.916326893e-06f, -1.915958143e-06f, -1.915586128e-06f, -1.915210848e-06f, -1.914832306e-06f, -1.914450501e-06f, -1.914065436e-06f,
--1.913677112e-06f, -1.913285529e-06f, -1.912890689e-06f, -1.912492593e-06f, -1.912091243e-06f, -1.911686639e-06f, -1.911278783e-06f, -1.910867675e-06f, -1.910453318e-06f, -1.910035712e-06f,
--1.909614859e-06f, -1.909190759e-06f, -1.908763415e-06f, -1.908332827e-06f, -1.907898996e-06f, -1.907461925e-06f, -1.907021613e-06f, -1.906578063e-06f, -1.906131275e-06f, -1.905681252e-06f,
--1.905227993e-06f, -1.904771501e-06f, -1.904311777e-06f, -1.903848822e-06f, -1.903382637e-06f, -1.902913225e-06f, -1.902440585e-06f, -1.901964719e-06f, -1.901485629e-06f, -1.901003317e-06f,
--1.900517782e-06f, -1.900029027e-06f, -1.899537054e-06f, -1.899041863e-06f, -1.898543455e-06f, -1.898041833e-06f, -1.897536997e-06f, -1.897028949e-06f, -1.896517691e-06f, -1.896003223e-06f,
--1.895485547e-06f, -1.894964664e-06f, -1.894440577e-06f, -1.893913286e-06f, -1.893382792e-06f, -1.892849098e-06f, -1.892312204e-06f, -1.891772112e-06f, -1.891228823e-06f, -1.890682340e-06f,
--1.890132662e-06f, -1.889579793e-06f, -1.889023732e-06f, -1.888464482e-06f, -1.887902045e-06f, -1.887336421e-06f, -1.886767612e-06f, -1.886195619e-06f, -1.885620445e-06f, -1.885042090e-06f,
--1.884460557e-06f, -1.883875846e-06f, -1.883287959e-06f, -1.882696897e-06f, -1.882102663e-06f, -1.881505257e-06f, -1.880904682e-06f, -1.880300938e-06f, -1.879694027e-06f, -1.879083952e-06f,
--1.878470712e-06f, -1.877854311e-06f, -1.877234749e-06f, -1.876612028e-06f, -1.875986150e-06f, -1.875357115e-06f, -1.874724927e-06f, -1.874089586e-06f, -1.873451094e-06f, -1.872809453e-06f,
--1.872164663e-06f, -1.871516728e-06f, -1.870865648e-06f, -1.870211425e-06f, -1.869554060e-06f, -1.868893556e-06f, -1.868229914e-06f, -1.867563135e-06f, -1.866893222e-06f, -1.866220175e-06f,
--1.865543997e-06f, -1.864864689e-06f, -1.864182253e-06f, -1.863496691e-06f, -1.862808003e-06f, -1.862116193e-06f, -1.861421261e-06f, -1.860723209e-06f, -1.860022040e-06f, -1.859317754e-06f,
--1.858610353e-06f, -1.857899839e-06f, -1.857186215e-06f, -1.856469480e-06f, -1.855749639e-06f, -1.855026691e-06f, -1.854300638e-06f, -1.853571484e-06f, -1.852839228e-06f, -1.852103874e-06f,
--1.851365422e-06f, -1.850623875e-06f, -1.849879234e-06f, -1.849131501e-06f, -1.848380678e-06f, -1.847626766e-06f, -1.846869768e-06f, -1.846109685e-06f, -1.845346520e-06f, -1.844580273e-06f,
--1.843810946e-06f, -1.843038542e-06f, -1.842263063e-06f, -1.841484509e-06f, -1.840702884e-06f, -1.839918188e-06f, -1.839130424e-06f, -1.838339593e-06f, -1.837545697e-06f, -1.836748739e-06f,
--1.835948720e-06f, -1.835145641e-06f, -1.834339506e-06f, -1.833530315e-06f, -1.832718070e-06f, -1.831902774e-06f, -1.831084429e-06f, -1.830263035e-06f, -1.829438596e-06f, -1.828611112e-06f,
--1.827780587e-06f, -1.826947021e-06f, -1.826110417e-06f, -1.825270777e-06f, -1.824428102e-06f, -1.823582395e-06f, -1.822733658e-06f, -1.821881892e-06f, -1.821027099e-06f, -1.820169282e-06f,
--1.819308442e-06f, -1.818444581e-06f, -1.817577701e-06f, -1.816707805e-06f, -1.815834894e-06f, -1.814958970e-06f, -1.814080035e-06f, -1.813198092e-06f, -1.812313142e-06f, -1.811425186e-06f,
--1.810534229e-06f, -1.809640270e-06f, -1.808743312e-06f, -1.807843358e-06f, -1.806940409e-06f, -1.806034468e-06f, -1.805125536e-06f, -1.804213615e-06f, -1.803298707e-06f, -1.802380816e-06f,
--1.801459941e-06f, -1.800536087e-06f, -1.799609254e-06f, -1.798679445e-06f, -1.797746662e-06f, -1.796810906e-06f, -1.795872181e-06f, -1.794930488e-06f, -1.793985829e-06f, -1.793038207e-06f,
--1.792087623e-06f, -1.791134079e-06f, -1.790177578e-06f, -1.789218122e-06f, -1.788255713e-06f, -1.787290353e-06f, -1.786322045e-06f, -1.785350789e-06f, -1.784376589e-06f, -1.783399447e-06f,
--1.782419364e-06f, -1.781436344e-06f, -1.780450387e-06f, -1.779461497e-06f, -1.778469675e-06f, -1.777474924e-06f, -1.776477246e-06f, -1.775476642e-06f, -1.774473116e-06f, -1.773466670e-06f,
--1.772457305e-06f, -1.771445024e-06f, -1.770429828e-06f, -1.769411722e-06f, -1.768390705e-06f, -1.767366782e-06f, -1.766339953e-06f, -1.765310221e-06f, -1.764277589e-06f, -1.763242059e-06f,
--1.762203632e-06f, -1.761162312e-06f, -1.760118100e-06f, -1.759070998e-06f, -1.758021010e-06f, -1.756968137e-06f, -1.755912381e-06f, -1.754853746e-06f, -1.753792232e-06f, -1.752727843e-06f,
--1.751660580e-06f, -1.750590446e-06f, -1.749517444e-06f, -1.748441575e-06f, -1.747362842e-06f, -1.746281248e-06f, -1.745196794e-06f, -1.744109483e-06f, -1.743019317e-06f, -1.741926298e-06f,
--1.740830430e-06f, -1.739731714e-06f, -1.738630152e-06f, -1.737525748e-06f, -1.736418502e-06f, -1.735308419e-06f, -1.734195499e-06f, -1.733079746e-06f, -1.731961162e-06f, -1.730839749e-06f,
--1.729715509e-06f, -1.728588446e-06f, -1.727458561e-06f, -1.726325856e-06f, -1.725190335e-06f, -1.724052000e-06f, -1.722910852e-06f, -1.721766895e-06f, -1.720620131e-06f, -1.719470562e-06f,
--1.718318191e-06f, -1.717163020e-06f, -1.716005052e-06f, -1.714844289e-06f, -1.713680733e-06f, -1.712514387e-06f, -1.711345254e-06f, -1.710173336e-06f, -1.708998635e-06f, -1.707821153e-06f,
--1.706640894e-06f, -1.705457860e-06f, -1.704272054e-06f, -1.703083477e-06f, -1.701892132e-06f, -1.700698022e-06f, -1.699501150e-06f, -1.698301517e-06f, -1.697099126e-06f, -1.695893981e-06f,
--1.694686082e-06f, -1.693475434e-06f, -1.692262038e-06f, -1.691045897e-06f, -1.689827013e-06f, -1.688605390e-06f, -1.687381029e-06f, -1.686153933e-06f, -1.684924105e-06f, -1.683691548e-06f,
--1.682456263e-06f, -1.681218253e-06f, -1.679977522e-06f, -1.678734071e-06f, -1.677487903e-06f, -1.676239021e-06f, -1.674987427e-06f, -1.673733124e-06f, -1.672476115e-06f, -1.671216402e-06f,
--1.669953987e-06f, -1.668688874e-06f, -1.667421065e-06f, -1.666150562e-06f, -1.664877369e-06f, -1.663601488e-06f, -1.662322921e-06f, -1.661041671e-06f, -1.659757741e-06f, -1.658471133e-06f,
--1.657181850e-06f, -1.655889896e-06f, -1.654595271e-06f, -1.653297980e-06f, -1.651998024e-06f, -1.650695407e-06f, -1.649390131e-06f, -1.648082198e-06f, -1.646771612e-06f, -1.645458376e-06f,
--1.644142491e-06f, -1.642823960e-06f, -1.641502787e-06f, -1.640178974e-06f, -1.638852523e-06f, -1.637523438e-06f, -1.636191721e-06f, -1.634857375e-06f, -1.633520402e-06f, -1.632180805e-06f,
--1.630838588e-06f, -1.629493752e-06f, -1.628146301e-06f, -1.626796237e-06f, -1.625443563e-06f, -1.624088282e-06f, -1.622730396e-06f, -1.621369909e-06f, -1.620006822e-06f, -1.618641140e-06f,
--1.617272864e-06f, -1.615901997e-06f, -1.614528543e-06f, -1.613152503e-06f, -1.611773882e-06f, -1.610392680e-06f, -1.609008903e-06f, -1.607622551e-06f, -1.606233628e-06f, -1.604842137e-06f,
--1.603448081e-06f, -1.602051462e-06f, -1.600652284e-06f, -1.599250548e-06f, -1.597846259e-06f, -1.596439418e-06f, -1.595030028e-06f, -1.593618094e-06f, -1.592203616e-06f, -1.590786599e-06f,
--1.589367044e-06f, -1.587944956e-06f, -1.586520336e-06f, -1.585093188e-06f, -1.583663514e-06f, -1.582231317e-06f, -1.580796601e-06f, -1.579359368e-06f, -1.577919621e-06f, -1.576477363e-06f,
--1.575032596e-06f, -1.573585325e-06f, -1.572135551e-06f, -1.570683277e-06f, -1.569228507e-06f, -1.567771243e-06f, -1.566311488e-06f, -1.564849246e-06f, -1.563384519e-06f, -1.561917310e-06f,
--1.560447621e-06f, -1.558975457e-06f, -1.557500820e-06f, -1.556023712e-06f, -1.554544137e-06f, -1.553062098e-06f, -1.551577597e-06f, -1.550090638e-06f, -1.548601224e-06f, -1.547109357e-06f,
--1.545615041e-06f, -1.544118279e-06f, -1.542619073e-06f, -1.541117426e-06f, -1.539613342e-06f, -1.538106823e-06f, -1.536597873e-06f, -1.535086494e-06f, -1.533572690e-06f, -1.532056463e-06f,
--1.530537817e-06f, -1.529016754e-06f, -1.527493278e-06f, -1.525967392e-06f, -1.524439098e-06f, -1.522908399e-06f, -1.521375299e-06f, -1.519839801e-06f, -1.518301908e-06f, -1.516761622e-06f,
--1.515218948e-06f, -1.513673887e-06f, -1.512126443e-06f, -1.510576619e-06f, -1.509024418e-06f, -1.507469843e-06f, -1.505912898e-06f, -1.504353584e-06f, -1.502791906e-06f, -1.501227867e-06f,
--1.499661469e-06f, -1.498092715e-06f, -1.496521609e-06f, -1.494948154e-06f, -1.493372353e-06f, -1.491794209e-06f, -1.490213725e-06f, -1.488630905e-06f, -1.487045750e-06f, -1.485458265e-06f,
--1.483868453e-06f, -1.482276316e-06f, -1.480681858e-06f, -1.479085082e-06f, -1.477485991e-06f, -1.475884589e-06f, -1.474280877e-06f, -1.472674861e-06f, -1.471066542e-06f, -1.469455923e-06f,
--1.467843009e-06f, -1.466227802e-06f, -1.464610305e-06f, -1.462990522e-06f, -1.461368455e-06f, -1.459744108e-06f, -1.458117484e-06f, -1.456488586e-06f, -1.454857418e-06f, -1.453223982e-06f,
--1.451588281e-06f, -1.449950320e-06f, -1.448310101e-06f, -1.446667627e-06f, -1.445022902e-06f, -1.443375928e-06f, -1.441726710e-06f, -1.440075249e-06f, -1.438421550e-06f, -1.436765616e-06f,
--1.435107449e-06f, -1.433447054e-06f, -1.431784432e-06f, -1.430119589e-06f, -1.428452526e-06f, -1.426783247e-06f, -1.425111755e-06f, -1.423438054e-06f, -1.421762146e-06f, -1.420084036e-06f,
--1.418403726e-06f, -1.416721219e-06f, -1.415036519e-06f, -1.413349630e-06f, -1.411660553e-06f, -1.409969294e-06f, -1.408275854e-06f, -1.406580237e-06f, -1.404882447e-06f, -1.403182486e-06f,
--1.401480359e-06f, -1.399776067e-06f, -1.398069616e-06f, -1.396361007e-06f, -1.394650245e-06f, -1.392937332e-06f, -1.391222272e-06f, -1.389505068e-06f, -1.387785724e-06f, -1.386064243e-06f,
--1.384340627e-06f, -1.382614882e-06f, -1.380887008e-06f, -1.379157012e-06f, -1.377424894e-06f, -1.375690659e-06f, -1.373954311e-06f, -1.372215852e-06f, -1.370475286e-06f, -1.368732616e-06f,
--1.366987845e-06f, -1.365240978e-06f, -1.363492016e-06f, -1.361740965e-06f, -1.359987826e-06f, -1.358232604e-06f, -1.356475301e-06f, -1.354715922e-06f, -1.352954469e-06f, -1.351190946e-06f,
--1.349425356e-06f, -1.347657703e-06f, -1.345887990e-06f, -1.344116220e-06f, -1.342342398e-06f, -1.340566525e-06f, -1.338788606e-06f, -1.337008645e-06f, -1.335226643e-06f, -1.333442606e-06f,
--1.331656536e-06f, -1.329868437e-06f, -1.328078312e-06f, -1.326286164e-06f, -1.324491997e-06f, -1.322695815e-06f, -1.320897621e-06f, -1.319097418e-06f, -1.317295210e-06f, -1.315491000e-06f,
--1.313684791e-06f, -1.311876588e-06f, -1.310066393e-06f, -1.308254210e-06f, -1.306440043e-06f, -1.304623894e-06f, -1.302805768e-06f, -1.300985668e-06f, -1.299163597e-06f, -1.297339559e-06f,
--1.295513557e-06f, -1.293685595e-06f, -1.291855676e-06f, -1.290023804e-06f, -1.288189982e-06f, -1.286354214e-06f, -1.284516503e-06f, -1.282676853e-06f, -1.280835266e-06f, -1.278991748e-06f,
--1.277146300e-06f, -1.275298928e-06f, -1.273449633e-06f, -1.271598420e-06f, -1.269745293e-06f, -1.267890254e-06f, -1.266033307e-06f, -1.264174456e-06f, -1.262313705e-06f, -1.260451056e-06f,
--1.258586514e-06f, -1.256720081e-06f, -1.254851762e-06f, -1.252981560e-06f, -1.251109479e-06f, -1.249235522e-06f, -1.247359692e-06f, -1.245481993e-06f, -1.243602429e-06f, -1.241721004e-06f,
--1.239837720e-06f, -1.237952581e-06f, -1.236065592e-06f, -1.234176755e-06f, -1.232286074e-06f, -1.230393553e-06f, -1.228499195e-06f, -1.226603004e-06f, -1.224704984e-06f, -1.222805137e-06f,
--1.220903468e-06f, -1.218999980e-06f, -1.217094676e-06f, -1.215187562e-06f, -1.213278639e-06f, -1.211367911e-06f, -1.209455383e-06f, -1.207541057e-06f, -1.205624938e-06f, -1.203707029e-06f,
--1.201787333e-06f, -1.199865855e-06f, -1.197942597e-06f, -1.196017564e-06f, -1.194090758e-06f, -1.192162185e-06f, -1.190231846e-06f, -1.188299747e-06f, -1.186365890e-06f, -1.184430279e-06f,
--1.182492918e-06f, -1.180553811e-06f, -1.178612960e-06f, -1.176670371e-06f, -1.174726046e-06f, -1.172779988e-06f, -1.170832203e-06f, -1.168882692e-06f, -1.166931461e-06f, -1.164978513e-06f,
--1.163023850e-06f, -1.161067478e-06f, -1.159109399e-06f, -1.157149618e-06f, -1.155188137e-06f, -1.153224961e-06f, -1.151260094e-06f, -1.149293538e-06f, -1.147325299e-06f, -1.145355378e-06f,
--1.143383781e-06f, -1.141410510e-06f, -1.139435570e-06f, -1.137458964e-06f, -1.135480695e-06f, -1.133500768e-06f, -1.131519187e-06f, -1.129535954e-06f, -1.127551074e-06f, -1.125564550e-06f,
--1.123576386e-06f, -1.121586586e-06f, -1.119595153e-06f, -1.117602091e-06f, -1.115607404e-06f, -1.113611096e-06f, -1.111613170e-06f, -1.109613631e-06f, -1.107612480e-06f, -1.105609724e-06f,
--1.103605364e-06f, -1.101599406e-06f, -1.099591852e-06f, -1.097582707e-06f, -1.095571973e-06f, -1.093559656e-06f, -1.091545758e-06f, -1.089530284e-06f, -1.087513237e-06f, -1.085494620e-06f,
--1.083474438e-06f, -1.081452695e-06f, -1.079429394e-06f, -1.077404538e-06f, -1.075378132e-06f, -1.073350180e-06f, -1.071320685e-06f, -1.069289651e-06f, -1.067257081e-06f, -1.065222980e-06f,
--1.063187351e-06f, -1.061150198e-06f, -1.059111525e-06f, -1.057071336e-06f, -1.055029634e-06f, -1.052986423e-06f, -1.050941707e-06f, -1.048895490e-06f, -1.046847775e-06f, -1.044798567e-06f,
--1.042747868e-06f, -1.040695684e-06f, -1.038642017e-06f, -1.036586871e-06f, -1.034530251e-06f, -1.032472160e-06f, -1.030412602e-06f, -1.028351581e-06f, -1.026289100e-06f, -1.024225163e-06f,
--1.022159774e-06f, -1.020092938e-06f, -1.018024657e-06f, -1.015954936e-06f, -1.013883778e-06f, -1.011811187e-06f, -1.009737167e-06f, -1.007661723e-06f, -1.005584856e-06f, -1.003506573e-06f,
--1.001426876e-06f, -9.993457685e-07f, -9.972632554e-07f, -9.951793402e-07f, -9.930940267e-07f, -9.910073187e-07f, -9.889192200e-07f, -9.868297346e-07f, -9.847388662e-07f, -9.826466188e-07f,
--9.805529961e-07f, -9.784580020e-07f, -9.763616403e-07f, -9.742639150e-07f, -9.721648299e-07f, -9.700643888e-07f, -9.679625956e-07f, -9.658594541e-07f, -9.637549683e-07f, -9.616491419e-07f,
--9.595419789e-07f, -9.574334831e-07f, -9.553236584e-07f, -9.532125086e-07f, -9.511000377e-07f, -9.489862495e-07f, -9.468711479e-07f, -9.447547367e-07f, -9.426370199e-07f, -9.405180013e-07f,
--9.383976848e-07f, -9.362760744e-07f, -9.341531738e-07f, -9.320289870e-07f, -9.299035178e-07f, -9.277767702e-07f, -9.256487481e-07f, -9.235194553e-07f, -9.213888957e-07f, -9.192570733e-07f,
--9.171239919e-07f, -9.149896555e-07f, -9.128540679e-07f, -9.107172330e-07f, -9.085791548e-07f, -9.064398372e-07f, -9.042992840e-07f, -9.021574992e-07f, -9.000144867e-07f, -8.978702505e-07f,
--8.957247943e-07f, -8.935781222e-07f, -8.914302380e-07f, -8.892811458e-07f, -8.871308493e-07f, -8.849793525e-07f, -8.828266594e-07f, -8.806727739e-07f, -8.785176999e-07f, -8.763614413e-07f,
--8.742040020e-07f, -8.720453861e-07f, -8.698855973e-07f, -8.677246398e-07f, -8.655625173e-07f, -8.633992339e-07f, -8.612347934e-07f, -8.590691998e-07f, -8.569024571e-07f, -8.547345692e-07f,
--8.525655400e-07f, -8.503953735e-07f, -8.482240737e-07f, -8.460516444e-07f, -8.438780896e-07f, -8.417034133e-07f, -8.395276195e-07f, -8.373507120e-07f, -8.351726949e-07f, -8.329935721e-07f,
--8.308133475e-07f, -8.286320251e-07f, -8.264496090e-07f, -8.242661029e-07f, -8.220815109e-07f, -8.198958370e-07f, -8.177090852e-07f, -8.155212593e-07f, -8.133323634e-07f, -8.111424014e-07f,
--8.089513773e-07f, -8.067592951e-07f, -8.045661587e-07f, -8.023719721e-07f, -8.001767393e-07f, -7.979804643e-07f, -7.957831510e-07f, -7.935848035e-07f, -7.913854256e-07f, -7.891850215e-07f,
--7.869835950e-07f, -7.847811501e-07f, -7.825776909e-07f, -7.803732213e-07f, -7.781677453e-07f, -7.759612669e-07f, -7.737537901e-07f, -7.715453188e-07f, -7.693358571e-07f, -7.671254090e-07f,
--7.649139784e-07f, -7.627015694e-07f, -7.604881858e-07f, -7.582738319e-07f, -7.560585114e-07f, -7.538422285e-07f, -7.516249871e-07f, -7.494067912e-07f, -7.471876449e-07f, -7.449675521e-07f,
--7.427465168e-07f, -7.405245431e-07f, -7.383016349e-07f, -7.360777962e-07f, -7.338530312e-07f, -7.316273437e-07f, -7.294007378e-07f, -7.271732174e-07f, -7.249447867e-07f, -7.227154496e-07f,
--7.204852101e-07f, -7.182540722e-07f, -7.160220400e-07f, -7.137891175e-07f, -7.115553087e-07f, -7.093206176e-07f, -7.070850482e-07f, -7.048486045e-07f, -7.026112906e-07f, -7.003731106e-07f,
--6.981340683e-07f, -6.958941678e-07f, -6.936534132e-07f, -6.914118085e-07f, -6.891693577e-07f, -6.869260649e-07f, -6.846819340e-07f, -6.824369691e-07f, -6.801911742e-07f, -6.779445534e-07f,
--6.756971106e-07f, -6.734488500e-07f, -6.711997755e-07f, -6.689498912e-07f, -6.666992011e-07f, -6.644477092e-07f, -6.621954197e-07f, -6.599423364e-07f, -6.576884635e-07f, -6.554338050e-07f,
--6.531783650e-07f, -6.509221474e-07f, -6.486651563e-07f, -6.464073958e-07f, -6.441488698e-07f, -6.418895825e-07f, -6.396295379e-07f, -6.373687400e-07f, -6.351071929e-07f, -6.328449006e-07f,
--6.305818671e-07f, -6.283180965e-07f, -6.260535929e-07f, -6.237883603e-07f, -6.215224027e-07f, -6.192557242e-07f, -6.169883288e-07f, -6.147202207e-07f, -6.124514038e-07f, -6.101818821e-07f,
--6.079116598e-07f, -6.056407409e-07f, -6.033691295e-07f, -6.010968296e-07f, -5.988238452e-07f, -5.965501804e-07f, -5.942758393e-07f, -5.920008259e-07f, -5.897251443e-07f, -5.874487985e-07f,
--5.851717926e-07f, -5.828941306e-07f, -5.806158167e-07f, -5.783368548e-07f, -5.760572490e-07f, -5.737770034e-07f, -5.714961221e-07f, -5.692146090e-07f, -5.669324684e-07f, -5.646497041e-07f,
--5.623663203e-07f, -5.600823211e-07f, -5.577977105e-07f, -5.555124926e-07f, -5.532266714e-07f, -5.509402510e-07f, -5.486532354e-07f, -5.463656288e-07f, -5.440774352e-07f, -5.417886587e-07f,
--5.394993033e-07f, -5.372093730e-07f, -5.349188721e-07f, -5.326278044e-07f, -5.303361742e-07f, -5.280439854e-07f, -5.257512421e-07f, -5.234579484e-07f, -5.211641084e-07f, -5.188697262e-07f,
--5.165748057e-07f, -5.142793511e-07f, -5.119833665e-07f, -5.096868558e-07f, -5.073898233e-07f, -5.050922729e-07f, -5.027942087e-07f, -5.004956348e-07f, -4.981965553e-07f, -4.958969742e-07f,
--4.935968956e-07f, -4.912963237e-07f, -4.889952623e-07f, -4.866937157e-07f, -4.843916879e-07f, -4.820891830e-07f, -4.797862050e-07f, -4.774827580e-07f, -4.751788461e-07f, -4.728744734e-07f,
--4.705696439e-07f, -4.682643618e-07f, -4.659586310e-07f, -4.636524557e-07f, -4.613458399e-07f, -4.590387877e-07f, -4.567313032e-07f, -4.544233905e-07f, -4.521150536e-07f, -4.498062966e-07f,
--4.474971236e-07f, -4.451875387e-07f, -4.428775458e-07f, -4.405671492e-07f, -4.382563529e-07f, -4.359451609e-07f, -4.336335774e-07f, -4.313216064e-07f, -4.290092519e-07f, -4.266965182e-07f,
--4.243834091e-07f, -4.220699289e-07f, -4.197560815e-07f, -4.174418712e-07f, -4.151273018e-07f, -4.128123776e-07f, -4.104971025e-07f, -4.081814807e-07f, -4.058655163e-07f, -4.035492133e-07f,
--4.012325757e-07f, -3.989156077e-07f, -3.965983134e-07f, -3.942806967e-07f, -3.919627619e-07f, -3.896445129e-07f, -3.873259539e-07f, -3.850070889e-07f, -3.826879219e-07f, -3.803684571e-07f,
--3.780486986e-07f, -3.757286504e-07f, -3.734083165e-07f, -3.710877011e-07f, -3.687668083e-07f, -3.664456420e-07f, -3.641242064e-07f, -3.618025056e-07f, -3.594805436e-07f, -3.571583245e-07f,
--3.548358524e-07f, -3.525131313e-07f, -3.501901653e-07f, -3.478669585e-07f, -3.455435150e-07f, -3.432198388e-07f, -3.408959340e-07f, -3.385718047e-07f, -3.362474549e-07f, -3.339228887e-07f,
--3.315981102e-07f, -3.292731235e-07f, -3.269479326e-07f, -3.246225416e-07f, -3.222969545e-07f, -3.199711755e-07f, -3.176452086e-07f, -3.153190578e-07f, -3.129927273e-07f, -3.106662211e-07f,
--3.083395432e-07f, -3.060126978e-07f, -3.036856889e-07f, -3.013585206e-07f, -2.990311969e-07f, -2.967037219e-07f, -2.943760997e-07f, -2.920483343e-07f, -2.897204298e-07f, -2.873923902e-07f,
--2.850642197e-07f, -2.827359223e-07f, -2.804075020e-07f, -2.780789629e-07f, -2.757503091e-07f, -2.734215447e-07f, -2.710926736e-07f, -2.687637000e-07f, -2.664346279e-07f, -2.641054614e-07f,
--2.617762045e-07f, -2.594468613e-07f, -2.571174358e-07f, -2.547879322e-07f, -2.524583544e-07f, -2.501287066e-07f, -2.477989927e-07f, -2.454692169e-07f, -2.431393831e-07f, -2.408094955e-07f,
--2.384795581e-07f, -2.361495750e-07f, -2.338195501e-07f, -2.314894876e-07f, -2.291593915e-07f, -2.268292659e-07f, -2.244991148e-07f, -2.221689422e-07f, -2.198387523e-07f, -2.175085490e-07f,
--2.151783364e-07f, -2.128481185e-07f, -2.105178995e-07f, -2.081876833e-07f, -2.058574740e-07f, -2.035272756e-07f, -2.011970922e-07f, -1.988669278e-07f, -1.965367865e-07f, -1.942066724e-07f,
--1.918765893e-07f, -1.895465415e-07f, -1.872165328e-07f, -1.848865675e-07f, -1.825566495e-07f, -1.802267828e-07f, -1.778969715e-07f, -1.755672196e-07f, -1.732375312e-07f, -1.709079102e-07f,
--1.685783608e-07f, -1.662488870e-07f, -1.639194927e-07f, -1.615901821e-07f, -1.592609591e-07f, -1.569318278e-07f, -1.546027922e-07f, -1.522738564e-07f, -1.499450244e-07f, -1.476163001e-07f,
--1.452876877e-07f, -1.429591911e-07f, -1.406308144e-07f, -1.383025616e-07f, -1.359744367e-07f, -1.336464438e-07f, -1.313185869e-07f, -1.289908699e-07f, -1.266632969e-07f, -1.243358720e-07f,
--1.220085991e-07f, -1.196814823e-07f, -1.173545255e-07f, -1.150277329e-07f, -1.127011083e-07f, -1.103746559e-07f, -1.080483796e-07f, -1.057222834e-07f, -1.033963714e-07f, -1.010706475e-07f,
--9.874511587e-08f, -9.641978038e-08f, -9.409464507e-08f, -9.176971395e-08f, -8.944499103e-08f, -8.712048030e-08f, -8.479618578e-08f, -8.247211147e-08f, -8.014826135e-08f, -7.782463944e-08f,
--7.550124974e-08f, -7.317809623e-08f, -7.085518292e-08f, -6.853251380e-08f, -6.621009287e-08f, -6.388792411e-08f, -6.156601153e-08f, -5.924435911e-08f, -5.692297085e-08f, -5.460185072e-08f,
--5.228100273e-08f, -4.996043085e-08f, -4.764013907e-08f, -4.532013138e-08f, -4.300041176e-08f, -4.068098420e-08f, -3.836185266e-08f, -3.604302114e-08f, -3.372449362e-08f, -3.140627406e-08f,
--2.908836645e-08f, -2.677077476e-08f, -2.445350297e-08f, -2.213655505e-08f, -1.981993496e-08f, -1.750364670e-08f, -1.518769421e-08f, -1.287208147e-08f, -1.055681245e-08f, -8.241891109e-09f,
--5.927321417e-09f, -3.613107335e-09f, -1.299252826e-09f, 1.014238151e-09f, 3.327361634e-09f, 5.640113667e-09f, 7.952490291e-09f, 1.026448755e-08f, 1.257610149e-08f, 1.488732816e-08f,
-1.719816361e-08f, 1.950860389e-08f, 2.181864504e-08f, 2.412828311e-08f, 2.643751418e-08f, 2.874633427e-08f, 3.105473946e-08f, 3.336272581e-08f, 3.567028936e-08f, 3.797742618e-08f,
-4.028413233e-08f, 4.259040387e-08f, 4.489623687e-08f, 4.720162739e-08f, 4.950657151e-08f, 5.181106528e-08f, 5.411510478e-08f, 5.641868608e-08f, 5.872180525e-08f, 6.102445837e-08f,
-6.332664151e-08f, 6.562835075e-08f, 6.792958216e-08f, 7.023033184e-08f, 7.253059585e-08f, 7.483037028e-08f, 7.712965121e-08f, 7.942843473e-08f, 8.172671694e-08f, 8.402449391e-08f,
-8.632176173e-08f, 8.861851650e-08f, 9.091475432e-08f, 9.321047126e-08f, 9.550566344e-08f, 9.780032695e-08f, 1.000944579e-07f, 1.023880524e-07f, 1.046811065e-07f, 1.069736163e-07f,
-1.092655780e-07f, 1.115569876e-07f, 1.138478413e-07f, 1.161381351e-07f, 1.184278653e-07f, 1.207170278e-07f, 1.230056188e-07f, 1.252936344e-07f, 1.275810708e-07f, 1.298679241e-07f,
-1.321541903e-07f, 1.344398657e-07f, 1.367249462e-07f, 1.390094282e-07f, 1.412933076e-07f, 1.435765806e-07f, 1.458592434e-07f, 1.481412920e-07f, 1.504227227e-07f, 1.527035315e-07f,
-1.549837146e-07f, 1.572632681e-07f, 1.595421882e-07f, 1.618204710e-07f, 1.640981127e-07f, 1.663751094e-07f, 1.686514572e-07f, 1.709271523e-07f, 1.732021909e-07f, 1.754765691e-07f,
-1.777502830e-07f, 1.800233289e-07f, 1.822957028e-07f, 1.845674010e-07f, 1.868384196e-07f, 1.891087548e-07f, 1.913784026e-07f, 1.936473594e-07f, 1.959156213e-07f, 1.981831844e-07f,
-2.004500449e-07f, 2.027161990e-07f, 2.049816428e-07f, 2.072463726e-07f, 2.095103845e-07f, 2.117736748e-07f, 2.140362395e-07f, 2.162980749e-07f, 2.185591772e-07f, 2.208195425e-07f,
-2.230791671e-07f, 2.253380471e-07f, 2.275961787e-07f, 2.298535582e-07f, 2.321101817e-07f, 2.343660454e-07f, 2.366211456e-07f, 2.388754784e-07f, 2.411290401e-07f, 2.433818269e-07f,
-2.456338349e-07f, 2.478850603e-07f, 2.501354995e-07f, 2.523851486e-07f, 2.546340039e-07f, 2.568820614e-07f, 2.591293176e-07f, 2.613757686e-07f, 2.636214105e-07f, 2.658662398e-07f,
-2.681102525e-07f, 2.703534450e-07f, 2.725958134e-07f, 2.748373540e-07f, 2.770780630e-07f, 2.793179367e-07f, 2.815569713e-07f, 2.837951631e-07f, 2.860325083e-07f, 2.882690031e-07f,
-2.905046438e-07f, 2.927394267e-07f, 2.949733480e-07f, 2.972064040e-07f, 2.994385909e-07f, 3.016699051e-07f, 3.039003426e-07f, 3.061298999e-07f, 3.083585732e-07f, 3.105863587e-07f,
-3.128132528e-07f, 3.150392517e-07f, 3.172643517e-07f, 3.194885490e-07f, 3.217118400e-07f, 3.239342209e-07f, 3.261556880e-07f, 3.283762376e-07f, 3.305958660e-07f, 3.328145695e-07f,
-3.350323443e-07f, 3.372491869e-07f, 3.394650934e-07f, 3.416800601e-07f, 3.438940834e-07f, 3.461071597e-07f, 3.483192851e-07f, 3.505304559e-07f, 3.527406686e-07f, 3.549499194e-07f,
-3.571582047e-07f, 3.593655207e-07f, 3.615718638e-07f, 3.637772302e-07f, 3.659816164e-07f, 3.681850187e-07f, 3.703874333e-07f, 3.725888566e-07f, 3.747892850e-07f, 3.769887148e-07f,
-3.791871423e-07f, 3.813845638e-07f, 3.835809758e-07f, 3.857763745e-07f, 3.879707563e-07f, 3.901641176e-07f, 3.923564546e-07f, 3.945477639e-07f, 3.967380416e-07f, 3.989272842e-07f,
-4.011154881e-07f, 4.033026496e-07f, 4.054887650e-07f, 4.076738308e-07f, 4.098578433e-07f, 4.120407989e-07f, 4.142226940e-07f, 4.164035249e-07f, 4.185832880e-07f, 4.207619797e-07f,
-4.229395965e-07f, 4.251161346e-07f, 4.272915905e-07f, 4.294659606e-07f, 4.316392412e-07f, 4.338114289e-07f, 4.359825199e-07f, 4.381525106e-07f, 4.403213976e-07f, 4.424891771e-07f,
-4.446558456e-07f, 4.468213995e-07f, 4.489858353e-07f, 4.511491493e-07f, 4.533113380e-07f, 4.554723978e-07f, 4.576323251e-07f, 4.597911163e-07f, 4.619487680e-07f, 4.641052764e-07f,
-4.662606381e-07f, 4.684148495e-07f, 4.705679070e-07f, 4.727198071e-07f, 4.748705462e-07f, 4.770201208e-07f, 4.791685273e-07f, 4.813157622e-07f, 4.834618219e-07f, 4.856067029e-07f,
-4.877504017e-07f, 4.898929147e-07f, 4.920342384e-07f, 4.941743692e-07f, 4.963133037e-07f, 4.984510383e-07f, 5.005875694e-07f, 5.027228937e-07f, 5.048570075e-07f, 5.069899073e-07f,
-5.091215896e-07f, 5.112520510e-07f, 5.133812879e-07f, 5.155092968e-07f, 5.176360742e-07f, 5.197616166e-07f, 5.218859205e-07f, 5.240089824e-07f, 5.261307989e-07f, 5.282513664e-07f,
-5.303706815e-07f, 5.324887407e-07f, 5.346055404e-07f, 5.367210773e-07f, 5.388353478e-07f, 5.409483486e-07f, 5.430600760e-07f, 5.451705267e-07f, 5.472796971e-07f, 5.493875839e-07f,
-5.514941836e-07f, 5.535994926e-07f, 5.557035077e-07f, 5.578062252e-07f, 5.599076419e-07f, 5.620077541e-07f, 5.641065585e-07f, 5.662040517e-07f, 5.683002302e-07f, 5.703950906e-07f,
-5.724886295e-07f, 5.745808434e-07f, 5.766717288e-07f, 5.787612825e-07f, 5.808495010e-07f, 5.829363808e-07f, 5.850219185e-07f, 5.871061108e-07f, 5.891889542e-07f, 5.912704453e-07f,
-5.933505808e-07f, 5.954293572e-07f, 5.975067711e-07f, 5.995828192e-07f, 6.016574980e-07f, 6.037308042e-07f, 6.058027344e-07f, 6.078732852e-07f, 6.099424532e-07f, 6.120102351e-07f,
-6.140766275e-07f, 6.161416269e-07f, 6.182052302e-07f, 6.202674338e-07f, 6.223282345e-07f, 6.243876288e-07f, 6.264456135e-07f, 6.285021852e-07f, 6.305573404e-07f, 6.326110760e-07f,
-6.346633885e-07f, 6.367142746e-07f, 6.387637310e-07f, 6.408117543e-07f, 6.428583412e-07f, 6.449034884e-07f, 6.469471926e-07f, 6.489894504e-07f, 6.510302585e-07f, 6.530696137e-07f,
-6.551075125e-07f, 6.571439517e-07f, 6.591789280e-07f, 6.612124381e-07f, 6.632444787e-07f, 6.652750464e-07f, 6.673041381e-07f, 6.693317504e-07f, 6.713578800e-07f, 6.733825236e-07f,
-6.754056780e-07f, 6.774273399e-07f, 6.794475060e-07f, 6.814661730e-07f, 6.834833377e-07f, 6.854989968e-07f, 6.875131470e-07f, 6.895257851e-07f, 6.915369079e-07f, 6.935465120e-07f,
-6.955545943e-07f, 6.975611515e-07f, 6.995661803e-07f, 7.015696775e-07f, 7.035716398e-07f, 7.055720641e-07f, 7.075709471e-07f, 7.095682856e-07f, 7.115640764e-07f, 7.135583162e-07f,
-7.155510018e-07f, 7.175421300e-07f, 7.195316976e-07f, 7.215197013e-07f, 7.235061381e-07f, 7.254910047e-07f, 7.274742978e-07f, 7.294560143e-07f, 7.314361511e-07f, 7.334147048e-07f,
-7.353916724e-07f, 7.373670506e-07f, 7.393408363e-07f, 7.413130263e-07f, 7.432836174e-07f, 7.452526064e-07f, 7.472199903e-07f, 7.491857657e-07f, 7.511499297e-07f, 7.531124789e-07f,
-7.550734104e-07f, 7.570327208e-07f, 7.589904071e-07f, 7.609464661e-07f, 7.629008947e-07f, 7.648536898e-07f, 7.668048482e-07f, 7.687543668e-07f, 7.707022425e-07f, 7.726484721e-07f,
-7.745930525e-07f, 7.765359807e-07f, 7.784772534e-07f, 7.804168677e-07f, 7.823548203e-07f, 7.842911083e-07f, 7.862257284e-07f, 7.881586776e-07f, 7.900899528e-07f, 7.920195510e-07f,
-7.939474689e-07f, 7.958737037e-07f, 7.977982521e-07f, 7.997211110e-07f, 8.016422776e-07f, 8.035617486e-07f, 8.054795209e-07f, 8.073955916e-07f, 8.093099576e-07f, 8.112226159e-07f,
-8.131335633e-07f, 8.150427968e-07f, 8.169503134e-07f, 8.188561100e-07f, 8.207601837e-07f, 8.226625313e-07f, 8.245631499e-07f, 8.264620364e-07f, 8.283591879e-07f, 8.302546011e-07f,
-8.321482733e-07f, 8.340402013e-07f, 8.359303821e-07f, 8.378188128e-07f, 8.397054904e-07f, 8.415904117e-07f, 8.434735739e-07f, 8.453549740e-07f, 8.472346090e-07f, 8.491124758e-07f,
-8.509885715e-07f, 8.528628932e-07f, 8.547354378e-07f, 8.566062024e-07f, 8.584751840e-07f, 8.603423796e-07f, 8.622077864e-07f, 8.640714013e-07f, 8.659332214e-07f, 8.677932438e-07f,
-8.696514654e-07f, 8.715078834e-07f, 8.733624948e-07f, 8.752152967e-07f, 8.770662862e-07f, 8.789154603e-07f, 8.807628161e-07f, 8.826083507e-07f, 8.844520612e-07f, 8.862939446e-07f,
-8.881339981e-07f, 8.899722188e-07f, 8.918086036e-07f, 8.936431499e-07f, 8.954758546e-07f, 8.973067148e-07f, 8.991357278e-07f, 9.009628905e-07f, 9.027882002e-07f, 9.046116539e-07f,
-9.064332487e-07f, 9.082529819e-07f, 9.100708505e-07f, 9.118868517e-07f, 9.137009827e-07f, 9.155132404e-07f, 9.173236223e-07f, 9.191321252e-07f, 9.209387466e-07f, 9.227434834e-07f,
-9.245463328e-07f, 9.263472921e-07f, 9.281463585e-07f, 9.299435289e-07f, 9.317388008e-07f, 9.335321712e-07f, 9.353236373e-07f, 9.371131963e-07f, 9.389008455e-07f, 9.406865819e-07f,
-9.424704029e-07f, 9.442523057e-07f, 9.460322873e-07f, 9.478103451e-07f, 9.495864763e-07f, 9.513606781e-07f, 9.531329477e-07f, 9.549032823e-07f, 9.566716792e-07f, 9.584381356e-07f,
-9.602026488e-07f, 9.619652160e-07f, 9.637258345e-07f, 9.654845014e-07f, 9.672412141e-07f, 9.689959699e-07f, 9.707487659e-07f, 9.724995994e-07f, 9.742484678e-07f, 9.759953683e-07f,
-9.777402982e-07f, 9.794832547e-07f, 9.812242352e-07f, 9.829632369e-07f, 9.847002571e-07f, 9.864352932e-07f, 9.881683424e-07f, 9.898994020e-07f, 9.916284694e-07f, 9.933555419e-07f,
-9.950806167e-07f, 9.968036913e-07f, 9.985247629e-07f, 1.000243829e-06f, 1.001960886e-06f, 1.003675933e-06f, 1.005388966e-06f, 1.007099983e-06f, 1.008808981e-06f, 1.010515957e-06f,
-1.012220909e-06f, 1.013923834e-06f, 1.015624730e-06f, 1.017323593e-06f, 1.019020422e-06f, 1.020715214e-06f, 1.022407965e-06f, 1.024098674e-06f, 1.025787337e-06f, 1.027473953e-06f,
-1.029158518e-06f, 1.030841031e-06f, 1.032521487e-06f, 1.034199886e-06f, 1.035876223e-06f, 1.037550498e-06f, 1.039222706e-06f, 1.040892845e-06f, 1.042560914e-06f, 1.044226909e-06f,
-1.045890828e-06f, 1.047552668e-06f, 1.049212426e-06f, 1.050870101e-06f, 1.052525689e-06f, 1.054179188e-06f, 1.055830595e-06f, 1.057479909e-06f, 1.059127126e-06f, 1.060772244e-06f,
-1.062415260e-06f, 1.064056172e-06f, 1.065694977e-06f, 1.067331673e-06f, 1.068966257e-06f, 1.070598727e-06f, 1.072229081e-06f, 1.073857315e-06f, 1.075483427e-06f, 1.077107416e-06f,
-1.078729277e-06f, 1.080349010e-06f, 1.081966611e-06f, 1.083582077e-06f, 1.085195408e-06f, 1.086806599e-06f, 1.088415649e-06f, 1.090022554e-06f, 1.091627314e-06f, 1.093229925e-06f,
-1.094830384e-06f, 1.096428690e-06f, 1.098024839e-06f, 1.099618830e-06f, 1.101210660e-06f, 1.102800327e-06f, 1.104387827e-06f, 1.105973160e-06f, 1.107556322e-06f, 1.109137311e-06f,
-1.110716124e-06f, 1.112292759e-06f, 1.113867215e-06f, 1.115439487e-06f, 1.117009575e-06f, 1.118577475e-06f, 1.120143186e-06f, 1.121706704e-06f, 1.123268028e-06f, 1.124827155e-06f,
-1.126384083e-06f, 1.127938809e-06f, 1.129491332e-06f, 1.131041648e-06f, 1.132589755e-06f, 1.134135652e-06f, 1.135679335e-06f, 1.137220803e-06f, 1.138760052e-06f, 1.140297082e-06f,
-1.141831889e-06f, 1.143364471e-06f, 1.144894826e-06f, 1.146422951e-06f, 1.147948845e-06f, 1.149472504e-06f, 1.150993927e-06f, 1.152513112e-06f, 1.154030055e-06f, 1.155544756e-06f,
-1.157057210e-06f, 1.158567417e-06f, 1.160075375e-06f, 1.161581079e-06f, 1.163084530e-06f, 1.164585723e-06f, 1.166084657e-06f, 1.167581330e-06f, 1.169075740e-06f, 1.170567884e-06f,
-1.172057760e-06f, 1.173545365e-06f, 1.175030698e-06f, 1.176513757e-06f, 1.177994539e-06f, 1.179473041e-06f, 1.180949263e-06f, 1.182423200e-06f, 1.183894853e-06f, 1.185364217e-06f,
-1.186831291e-06f, 1.188296073e-06f, 1.189758561e-06f, 1.191218752e-06f, 1.192676644e-06f, 1.194132235e-06f, 1.195585523e-06f, 1.197036506e-06f, 1.198485182e-06f, 1.199931548e-06f,
-1.201375602e-06f, 1.202817342e-06f, 1.204256767e-06f, 1.205693873e-06f, 1.207128659e-06f, 1.208561123e-06f, 1.209991263e-06f, 1.211419075e-06f, 1.212844559e-06f, 1.214267713e-06f,
-1.215688533e-06f, 1.217107018e-06f, 1.218523167e-06f, 1.219936976e-06f, 1.221348444e-06f, 1.222757568e-06f, 1.224164347e-06f, 1.225568779e-06f, 1.226970861e-06f, 1.228370592e-06f,
-1.229767969e-06f, 1.231162990e-06f, 1.232555653e-06f, 1.233945957e-06f, 1.235333899e-06f, 1.236719477e-06f, 1.238102689e-06f, 1.239483533e-06f, 1.240862007e-06f, 1.242238109e-06f,
-1.243611837e-06f, 1.244983189e-06f, 1.246352164e-06f, 1.247718758e-06f, 1.249082970e-06f, 1.250444799e-06f, 1.251804241e-06f, 1.253161295e-06f, 1.254515960e-06f, 1.255868232e-06f,
-1.257218111e-06f, 1.258565594e-06f, 1.259910679e-06f, 1.261253365e-06f, 1.262593649e-06f, 1.263931529e-06f, 1.265267003e-06f, 1.266600070e-06f, 1.267930728e-06f, 1.269258974e-06f,
-1.270584807e-06f, 1.271908225e-06f, 1.273229226e-06f, 1.274547808e-06f, 1.275863969e-06f, 1.277177707e-06f, 1.278489020e-06f, 1.279797906e-06f, 1.281104365e-06f, 1.282408392e-06f,
-1.283709988e-06f, 1.285009149e-06f, 1.286305875e-06f, 1.287600162e-06f, 1.288892010e-06f, 1.290181416e-06f, 1.291468379e-06f, 1.292752897e-06f, 1.294034967e-06f, 1.295314588e-06f,
-1.296591759e-06f, 1.297866477e-06f, 1.299138741e-06f, 1.300408548e-06f, 1.301675898e-06f, 1.302940787e-06f, 1.304203215e-06f, 1.305463179e-06f, 1.306720678e-06f, 1.307975710e-06f,
-1.309228274e-06f, 1.310478366e-06f, 1.311725986e-06f, 1.312971132e-06f, 1.314213802e-06f, 1.315453994e-06f, 1.316691707e-06f, 1.317926939e-06f, 1.319159687e-06f, 1.320389951e-06f,
-1.321617728e-06f, 1.322843018e-06f, 1.324065817e-06f, 1.325286125e-06f, 1.326503939e-06f, 1.327719258e-06f, 1.328932080e-06f, 1.330142404e-06f, 1.331350228e-06f, 1.332555549e-06f,
-1.333758367e-06f, 1.334958680e-06f, 1.336156486e-06f, 1.337351783e-06f, 1.338544570e-06f, 1.339734845e-06f, 1.340922606e-06f, 1.342107851e-06f, 1.343290580e-06f, 1.344470790e-06f,
-1.345648480e-06f, 1.346823648e-06f, 1.347996292e-06f, 1.349166411e-06f, 1.350334003e-06f, 1.351499067e-06f, 1.352661600e-06f, 1.353821602e-06f, 1.354979071e-06f, 1.356134004e-06f,
-1.357286402e-06f, 1.358436260e-06f, 1.359583580e-06f, 1.360728358e-06f, 1.361870593e-06f, 1.363010283e-06f, 1.364147428e-06f, 1.365282025e-06f, 1.366414073e-06f, 1.367543570e-06f,
-1.368670514e-06f, 1.369794905e-06f, 1.370916741e-06f, 1.372036019e-06f, 1.373152740e-06f, 1.374266900e-06f, 1.375378498e-06f, 1.376487534e-06f, 1.377594005e-06f, 1.378697910e-06f,
-1.379799247e-06f, 1.380898016e-06f, 1.381994213e-06f, 1.383087839e-06f, 1.384178891e-06f, 1.385267368e-06f, 1.386353269e-06f, 1.387436591e-06f, 1.388517334e-06f, 1.389595496e-06f,
-1.390671076e-06f, 1.391744072e-06f, 1.392814482e-06f, 1.393882306e-06f, 1.394947542e-06f, 1.396010188e-06f, 1.397070242e-06f, 1.398127705e-06f, 1.399182573e-06f, 1.400234846e-06f,
-1.401284523e-06f, 1.402331601e-06f, 1.403376080e-06f, 1.404417958e-06f, 1.405457233e-06f, 1.406493905e-06f, 1.407527971e-06f, 1.408559431e-06f, 1.409588283e-06f, 1.410614526e-06f,
-1.411638158e-06f, 1.412659178e-06f, 1.413677585e-06f, 1.414693378e-06f, 1.415706554e-06f, 1.416717113e-06f, 1.417725053e-06f, 1.418730373e-06f, 1.419733071e-06f, 1.420733147e-06f,
-1.421730599e-06f, 1.422725426e-06f, 1.423717626e-06f, 1.424707198e-06f, 1.425694141e-06f, 1.426678453e-06f, 1.427660133e-06f, 1.428639180e-06f, 1.429615593e-06f, 1.430589371e-06f,
-1.431560511e-06f, 1.432529013e-06f, 1.433494876e-06f, 1.434458097e-06f, 1.435418677e-06f, 1.436376614e-06f, 1.437331906e-06f, 1.438284553e-06f, 1.439234552e-06f, 1.440181904e-06f,
-1.441126606e-06f, 1.442068657e-06f, 1.443008057e-06f, 1.443944803e-06f, 1.444878896e-06f, 1.445810333e-06f, 1.446739113e-06f, 1.447665236e-06f, 1.448588699e-06f, 1.449509503e-06f,
-1.450427645e-06f, 1.451343124e-06f, 1.452255940e-06f, 1.453166091e-06f, 1.454073576e-06f, 1.454978394e-06f, 1.455880543e-06f, 1.456780023e-06f, 1.457676833e-06f, 1.458570971e-06f,
-1.459462436e-06f, 1.460351227e-06f, 1.461237343e-06f, 1.462120782e-06f, 1.463001545e-06f, 1.463879629e-06f, 1.464755034e-06f, 1.465627758e-06f, 1.466497800e-06f, 1.467365160e-06f,
-1.468229836e-06f, 1.469091827e-06f, 1.469951132e-06f, 1.470807750e-06f, 1.471661679e-06f, 1.472512920e-06f, 1.473361471e-06f, 1.474207330e-06f, 1.475050497e-06f, 1.475890971e-06f,
-1.476728750e-06f, 1.477563834e-06f, 1.478396221e-06f, 1.479225912e-06f, 1.480052903e-06f, 1.480877196e-06f, 1.481698788e-06f, 1.482517678e-06f, 1.483333866e-06f, 1.484147351e-06f,
-1.484958131e-06f, 1.485766206e-06f, 1.486571575e-06f, 1.487374237e-06f, 1.488174190e-06f, 1.488971434e-06f, 1.489765967e-06f, 1.490557790e-06f, 1.491346901e-06f, 1.492133298e-06f,
-1.492916982e-06f, 1.493697951e-06f, 1.494476204e-06f, 1.495251741e-06f, 1.496024560e-06f, 1.496794660e-06f, 1.497562041e-06f, 1.498326701e-06f, 1.499088641e-06f, 1.499847858e-06f,
-1.500604353e-06f, 1.501358123e-06f, 1.502109169e-06f, 1.502857489e-06f, 1.503603083e-06f, 1.504345949e-06f, 1.505086087e-06f, 1.505823497e-06f, 1.506558176e-06f, 1.507290125e-06f,
-1.508019342e-06f, 1.508745826e-06f, 1.509469578e-06f, 1.510190595e-06f, 1.510908878e-06f, 1.511624425e-06f, 1.512337236e-06f, 1.513047309e-06f, 1.513754644e-06f, 1.514459241e-06f,
-1.515161098e-06f, 1.515860214e-06f, 1.516556589e-06f, 1.517250222e-06f, 1.517941113e-06f, 1.518629260e-06f, 1.519314663e-06f, 1.519997321e-06f, 1.520677233e-06f, 1.521354398e-06f,
-1.522028817e-06f, 1.522700487e-06f, 1.523369409e-06f, 1.524035581e-06f, 1.524699003e-06f, 1.525359675e-06f, 1.526017595e-06f, 1.526672762e-06f, 1.527325177e-06f, 1.527974838e-06f,
-1.528621745e-06f, 1.529265896e-06f, 1.529907292e-06f, 1.530545932e-06f, 1.531181814e-06f, 1.531814939e-06f, 1.532445306e-06f, 1.533072914e-06f, 1.533697761e-06f, 1.534319849e-06f,
-1.534939176e-06f, 1.535555741e-06f, 1.536169544e-06f, 1.536780584e-06f, 1.537388861e-06f, 1.537994373e-06f, 1.538597121e-06f, 1.539197104e-06f, 1.539794320e-06f, 1.540388771e-06f,
-1.540980454e-06f, 1.541569370e-06f, 1.542155517e-06f, 1.542738895e-06f, 1.543319505e-06f, 1.543897344e-06f, 1.544472413e-06f, 1.545044710e-06f, 1.545614236e-06f, 1.546180990e-06f,
-1.546744971e-06f, 1.547306179e-06f, 1.547864614e-06f, 1.548420274e-06f, 1.548973159e-06f, 1.549523269e-06f, 1.550070602e-06f, 1.550615160e-06f, 1.551156941e-06f, 1.551695944e-06f,
-1.552232170e-06f, 1.552765617e-06f, 1.553296286e-06f, 1.553824175e-06f, 1.554349284e-06f, 1.554871613e-06f, 1.555391162e-06f, 1.555907929e-06f, 1.556421915e-06f, 1.556933119e-06f,
-1.557441540e-06f, 1.557947178e-06f, 1.558450033e-06f, 1.558950104e-06f, 1.559447391e-06f, 1.559941893e-06f, 1.560433611e-06f, 1.560922542e-06f, 1.561408688e-06f, 1.561892048e-06f,
-1.562372621e-06f, 1.562850407e-06f, 1.563325405e-06f, 1.563797616e-06f, 1.564267039e-06f, 1.564733673e-06f, 1.565197518e-06f, 1.565658574e-06f, 1.566116840e-06f, 1.566572316e-06f,
-1.567025002e-06f, 1.567474897e-06f, 1.567922002e-06f, 1.568366315e-06f, 1.568807836e-06f, 1.569246565e-06f, 1.569682502e-06f, 1.570115647e-06f, 1.570545998e-06f, 1.570973556e-06f,
-1.571398321e-06f, 1.571820292e-06f, 1.572239469e-06f, 1.572655852e-06f, 1.573069440e-06f, 1.573480233e-06f, 1.573888230e-06f, 1.574293433e-06f, 1.574695840e-06f, 1.575095450e-06f,
-1.575492265e-06f, 1.575886283e-06f, 1.576277505e-06f, 1.576665929e-06f, 1.577051557e-06f, 1.577434387e-06f, 1.577814419e-06f, 1.578191654e-06f, 1.578566091e-06f, 1.578937729e-06f,
-1.579306569e-06f, 1.579672611e-06f, 1.580035854e-06f, 1.580396298e-06f, 1.580753942e-06f, 1.581108788e-06f, 1.581460834e-06f, 1.581810080e-06f, 1.582156527e-06f, 1.582500173e-06f,
-1.582841020e-06f, 1.583179066e-06f, 1.583514312e-06f, 1.583846757e-06f, 1.584176402e-06f, 1.584503245e-06f, 1.584827288e-06f, 1.585148530e-06f, 1.585466971e-06f, 1.585782611e-06f,
-1.586095449e-06f, 1.586405486e-06f, 1.586712722e-06f, 1.587017155e-06f, 1.587318787e-06f, 1.587617618e-06f, 1.587913646e-06f, 1.588206873e-06f, 1.588497298e-06f, 1.588784921e-06f,
-1.589069741e-06f, 1.589351760e-06f, 1.589630976e-06f, 1.589907390e-06f, 1.590181002e-06f, 1.590451812e-06f, 1.590719820e-06f, 1.590985025e-06f, 1.591247428e-06f, 1.591507029e-06f,
-1.591763827e-06f, 1.592017823e-06f, 1.592269017e-06f, 1.592517409e-06f, 1.592762998e-06f, 1.593005785e-06f, 1.593245770e-06f, 1.593482952e-06f, 1.593717333e-06f, 1.593948911e-06f,
-1.594177688e-06f, 1.594403662e-06f, 1.594626834e-06f, 1.594847205e-06f, 1.595064773e-06f, 1.595279540e-06f, 1.595491506e-06f, 1.595700669e-06f, 1.595907031e-06f, 1.596110592e-06f,
-1.596311352e-06f, 1.596509310e-06f, 1.596704467e-06f, 1.596896823e-06f, 1.597086378e-06f, 1.597273132e-06f, 1.597457086e-06f, 1.597638239e-06f, 1.597816592e-06f, 1.597992145e-06f,
-1.598164897e-06f, 1.598334849e-06f, 1.598502002e-06f, 1.598666355e-06f, 1.598827909e-06f, 1.598986663e-06f, 1.599142618e-06f, 1.599295774e-06f, 1.599446131e-06f, 1.599593690e-06f,
-1.599738450e-06f, 1.599880412e-06f, 1.600019576e-06f, 1.600155942e-06f, 1.600289511e-06f, 1.600420282e-06f, 1.600548256e-06f, 1.600673434e-06f, 1.600795814e-06f, 1.600915398e-06f,
-1.601032186e-06f, 1.601146177e-06f, 1.601257373e-06f, 1.601365774e-06f, 1.601471379e-06f, 1.601574190e-06f, 1.601674205e-06f, 1.601771427e-06f, 1.601865854e-06f, 1.601957487e-06f,
-1.602046327e-06f, 1.602132373e-06f, 1.602215627e-06f, 1.602296088e-06f, 1.602373756e-06f, 1.602448632e-06f, 1.602520717e-06f, 1.602590010e-06f, 1.602656512e-06f, 1.602720224e-06f,
-1.602781145e-06f, 1.602839276e-06f, 1.602894617e-06f, 1.602947169e-06f, 1.602996932e-06f, 1.603043906e-06f, 1.603088091e-06f, 1.603129489e-06f, 1.603168100e-06f, 1.603203923e-06f,
-1.603236959e-06f, 1.603267209e-06f, 1.603294673e-06f, 1.603319351e-06f, 1.603341245e-06f, 1.603360353e-06f, 1.603376677e-06f, 1.603390217e-06f, 1.603400973e-06f, 1.603408947e-06f,
-1.603414137e-06f, 1.603416546e-06f, 1.603416172e-06f, 1.603413017e-06f, 1.603407082e-06f, 1.603398365e-06f, 1.603386869e-06f, 1.603372594e-06f, 1.603355539e-06f, 1.603335705e-06f,
-1.603313094e-06f, 1.603287705e-06f, 1.603259539e-06f, 1.603228596e-06f, 1.603194877e-06f, 1.603158382e-06f, 1.603119112e-06f, 1.603077068e-06f, 1.603032250e-06f, 1.602984658e-06f,
-1.602934292e-06f, 1.602881155e-06f, 1.602825245e-06f, 1.602766564e-06f, 1.602705112e-06f, 1.602640890e-06f, 1.602573898e-06f, 1.602504137e-06f, 1.602431607e-06f, 1.602356308e-06f,
-1.602278243e-06f, 1.602197410e-06f, 1.602113811e-06f, 1.602027447e-06f, 1.601938317e-06f, 1.601846423e-06f, 1.601751764e-06f, 1.601654342e-06f, 1.601554158e-06f, 1.601451211e-06f,
-1.601345503e-06f, 1.601237034e-06f, 1.601125805e-06f, 1.601011816e-06f, 1.600895068e-06f, 1.600775562e-06f, 1.600653298e-06f, 1.600528277e-06f, 1.600400499e-06f, 1.600269966e-06f,
-1.600136678e-06f, 1.600000635e-06f, 1.599861839e-06f, 1.599720290e-06f, 1.599575988e-06f, 1.599428935e-06f, 1.599279131e-06f, 1.599126577e-06f, 1.598971273e-06f, 1.598813220e-06f,
-1.598652419e-06f, 1.598488871e-06f, 1.598322576e-06f, 1.598153535e-06f, 1.597981749e-06f, 1.597807219e-06f, 1.597629945e-06f, 1.597449928e-06f, 1.597267168e-06f, 1.597081667e-06f,
-1.596893426e-06f, 1.596702444e-06f, 1.596508724e-06f, 1.596312265e-06f, 1.596113068e-06f, 1.595911135e-06f, 1.595706465e-06f, 1.595499060e-06f, 1.595288921e-06f, 1.595076049e-06f,
-1.594860443e-06f, 1.594642105e-06f, 1.594421036e-06f, 1.594197237e-06f, 1.593970708e-06f, 1.593741451e-06f, 1.593509466e-06f, 1.593274753e-06f, 1.593037315e-06f, 1.592797151e-06f,
-1.592554262e-06f, 1.592308650e-06f, 1.592060315e-06f, 1.591809258e-06f, 1.591555481e-06f, 1.591298983e-06f, 1.591039765e-06f, 1.590777830e-06f, 1.590513177e-06f, 1.590245807e-06f,
-1.589975721e-06f, 1.589702921e-06f, 1.589427407e-06f, 1.589149180e-06f, 1.588868241e-06f, 1.588584591e-06f, 1.588298230e-06f, 1.588009160e-06f, 1.587717382e-06f, 1.587422897e-06f,
-1.587125705e-06f, 1.586825807e-06f, 1.586523205e-06f, 1.586217900e-06f, 1.585909891e-06f, 1.585599182e-06f, 1.585285771e-06f, 1.584969661e-06f, 1.584650852e-06f, 1.584329345e-06f,
-1.584005142e-06f, 1.583678242e-06f, 1.583348648e-06f, 1.583016361e-06f, 1.582681380e-06f, 1.582343708e-06f, 1.582003345e-06f, 1.581660293e-06f, 1.581314551e-06f, 1.580966122e-06f,
-1.580615007e-06f, 1.580261206e-06f, 1.579904721e-06f, 1.579545552e-06f, 1.579183700e-06f, 1.578819168e-06f, 1.578451955e-06f, 1.578082063e-06f, 1.577709492e-06f, 1.577334245e-06f,
-1.576956322e-06f, 1.576575724e-06f, 1.576192452e-06f, 1.575806507e-06f, 1.575417890e-06f, 1.575026604e-06f, 1.574632647e-06f, 1.574236023e-06f, 1.573836731e-06f, 1.573434774e-06f,
-1.573030151e-06f, 1.572622864e-06f, 1.572212915e-06f, 1.571800305e-06f, 1.571385034e-06f, 1.570967104e-06f, 1.570546515e-06f, 1.570123270e-06f, 1.569697369e-06f, 1.569268814e-06f,
-1.568837605e-06f, 1.568403744e-06f, 1.567967231e-06f, 1.567528069e-06f, 1.567086258e-06f, 1.566641800e-06f, 1.566194695e-06f, 1.565744946e-06f, 1.565292552e-06f, 1.564837516e-06f,
-1.564379838e-06f, 1.563919520e-06f, 1.563456563e-06f, 1.562990968e-06f, 1.562522737e-06f, 1.562051870e-06f, 1.561578369e-06f, 1.561102235e-06f, 1.560623470e-06f, 1.560142074e-06f,
-1.559658050e-06f, 1.559171397e-06f, 1.558682118e-06f, 1.558190214e-06f, 1.557695685e-06f, 1.557198534e-06f, 1.556698761e-06f, 1.556196369e-06f, 1.555691357e-06f, 1.555183728e-06f,
-1.554673482e-06f, 1.554160622e-06f, 1.553645148e-06f, 1.553127062e-06f, 1.552606364e-06f, 1.552083057e-06f, 1.551557142e-06f, 1.551028619e-06f, 1.550497491e-06f, 1.549963758e-06f,
-1.549427423e-06f, 1.548888486e-06f, 1.548346948e-06f, 1.547802812e-06f, 1.547256078e-06f, 1.546706747e-06f, 1.546154822e-06f, 1.545600304e-06f, 1.545043193e-06f, 1.544483492e-06f,
-1.543921201e-06f, 1.543356322e-06f, 1.542788857e-06f, 1.542218807e-06f, 1.541646173e-06f, 1.541070956e-06f, 1.540493159e-06f, 1.539912782e-06f, 1.539329827e-06f, 1.538744296e-06f,
-1.538156189e-06f, 1.537565509e-06f, 1.536972256e-06f, 1.536376432e-06f, 1.535778039e-06f, 1.535177078e-06f, 1.534573551e-06f, 1.533967458e-06f, 1.533358802e-06f, 1.532747583e-06f,
-1.532133804e-06f, 1.531517466e-06f, 1.530898570e-06f, 1.530277117e-06f, 1.529653110e-06f, 1.529026550e-06f, 1.528397438e-06f, 1.527765776e-06f, 1.527131565e-06f, 1.526494807e-06f,
-1.525855503e-06f, 1.525213655e-06f, 1.524569264e-06f, 1.523922332e-06f, 1.523272861e-06f, 1.522620851e-06f, 1.521966305e-06f, 1.521309224e-06f, 1.520649610e-06f, 1.519987463e-06f,
-1.519322787e-06f, 1.518655581e-06f, 1.517985848e-06f, 1.517313590e-06f, 1.516638808e-06f, 1.515961503e-06f, 1.515281677e-06f, 1.514599332e-06f, 1.513914469e-06f, 1.513227090e-06f,
-1.512537197e-06f, 1.511844791e-06f, 1.511149873e-06f, 1.510452445e-06f, 1.509752510e-06f, 1.509050068e-06f, 1.508345121e-06f, 1.507637671e-06f, 1.506927719e-06f, 1.506215268e-06f,
-1.505500318e-06f, 1.504782871e-06f, 1.504062929e-06f, 1.503340494e-06f, 1.502615567e-06f, 1.501888150e-06f, 1.501158245e-06f, 1.500425853e-06f, 1.499690976e-06f, 1.498953615e-06f,
-1.498213773e-06f, 1.497471451e-06f, 1.496726650e-06f, 1.495979373e-06f, 1.495229621e-06f, 1.494477395e-06f, 1.493722698e-06f, 1.492965531e-06f, 1.492205896e-06f, 1.491443795e-06f,
-1.490679229e-06f, 1.489912200e-06f, 1.489142709e-06f, 1.488370759e-06f, 1.487596352e-06f, 1.486819488e-06f, 1.486040170e-06f, 1.485258400e-06f, 1.484474178e-06f, 1.483687508e-06f,
-1.482898390e-06f, 1.482106827e-06f, 1.481312820e-06f, 1.480516372e-06f, 1.479717483e-06f, 1.478916155e-06f, 1.478112391e-06f, 1.477306192e-06f, 1.476497560e-06f, 1.475686497e-06f,
-1.474873004e-06f, 1.474057084e-06f, 1.473238737e-06f, 1.472417967e-06f, 1.471594775e-06f, 1.470769162e-06f, 1.469941130e-06f, 1.469110682e-06f, 1.468277819e-06f, 1.467442543e-06f,
-1.466604855e-06f, 1.465764758e-06f, 1.464922254e-06f, 1.464077344e-06f, 1.463230030e-06f, 1.462380314e-06f, 1.461528198e-06f, 1.460673683e-06f, 1.459816772e-06f, 1.458957467e-06f,
-1.458095769e-06f, 1.457231680e-06f, 1.456365202e-06f, 1.455496338e-06f, 1.454625088e-06f, 1.453751455e-06f, 1.452875441e-06f, 1.451997047e-06f, 1.451116276e-06f, 1.450233129e-06f,
-1.449347609e-06f, 1.448459716e-06f, 1.447569454e-06f, 1.446676825e-06f, 1.445781829e-06f, 1.444884469e-06f, 1.443984747e-06f, 1.443082665e-06f, 1.442178224e-06f, 1.441271428e-06f,
-1.440362277e-06f, 1.439450774e-06f, 1.438536920e-06f, 1.437620718e-06f, 1.436702170e-06f, 1.435781277e-06f, 1.434858041e-06f, 1.433932465e-06f, 1.433004551e-06f, 1.432074300e-06f,
-1.431141714e-06f, 1.430206796e-06f, 1.429269547e-06f, 1.428329970e-06f, 1.427388066e-06f, 1.426443838e-06f, 1.425497287e-06f, 1.424548416e-06f, 1.423597226e-06f, 1.422643719e-06f,
-1.421687899e-06f, 1.420729765e-06f, 1.419769322e-06f, 1.418806570e-06f, 1.417841512e-06f, 1.416874150e-06f, 1.415904485e-06f, 1.414932520e-06f, 1.413958257e-06f, 1.412981699e-06f,
-1.412002846e-06f, 1.411021701e-06f, 1.410038267e-06f, 1.409052545e-06f, 1.408064537e-06f, 1.407074246e-06f, 1.406081673e-06f, 1.405086821e-06f, 1.404089691e-06f, 1.403090286e-06f,
-1.402088609e-06f, 1.401084660e-06f, 1.400078442e-06f, 1.399069958e-06f, 1.398059209e-06f, 1.397046197e-06f, 1.396030925e-06f, 1.395013395e-06f, 1.393993608e-06f, 1.392971568e-06f,
-1.391947276e-06f, 1.390920734e-06f, 1.389891944e-06f, 1.388860909e-06f, 1.387827630e-06f, 1.386792111e-06f, 1.385754352e-06f, 1.384714357e-06f, 1.383672127e-06f, 1.382627665e-06f,
-1.381580972e-06f, 1.380532051e-06f, 1.379480905e-06f, 1.378427534e-06f, 1.377371942e-06f, 1.376314130e-06f, 1.375254102e-06f, 1.374191858e-06f, 1.373127401e-06f, 1.372060734e-06f,
-1.370991859e-06f, 1.369920777e-06f, 1.368847492e-06f, 1.367772005e-06f, 1.366694318e-06f, 1.365614434e-06f, 1.364532355e-06f, 1.363448083e-06f, 1.362361620e-06f, 1.361272969e-06f,
-1.360182132e-06f, 1.359089111e-06f, 1.357993909e-06f, 1.356896527e-06f, 1.355796968e-06f, 1.354695234e-06f, 1.353591328e-06f, 1.352485252e-06f, 1.351377007e-06f, 1.350266597e-06f,
-1.349154023e-06f, 1.348039288e-06f, 1.346922394e-06f, 1.345803343e-06f, 1.344682138e-06f, 1.343558781e-06f, 1.342433274e-06f, 1.341305620e-06f, 1.340175820e-06f, 1.339043878e-06f,
-1.337909795e-06f, 1.336773575e-06f, 1.335635218e-06f, 1.334494727e-06f, 1.333352106e-06f, 1.332207355e-06f, 1.331060478e-06f, 1.329911476e-06f, 1.328760353e-06f, 1.327607110e-06f,
-1.326451750e-06f, 1.325294275e-06f, 1.324134687e-06f, 1.322972989e-06f, 1.321809184e-06f, 1.320643273e-06f, 1.319475259e-06f, 1.318305144e-06f, 1.317132930e-06f, 1.315958621e-06f,
-1.314782218e-06f, 1.313603724e-06f, 1.312423141e-06f, 1.311240472e-06f, 1.310055718e-06f, 1.308868883e-06f, 1.307679969e-06f, 1.306488977e-06f, 1.305295912e-06f, 1.304100774e-06f,
-1.302903566e-06f, 1.301704292e-06f, 1.300502952e-06f, 1.299299550e-06f, 1.298094088e-06f, 1.296886568e-06f, 1.295676994e-06f, 1.294465366e-06f, 1.293251688e-06f, 1.292035963e-06f,
-1.290818192e-06f, 1.289598378e-06f, 1.288376524e-06f, 1.287152631e-06f, 1.285926703e-06f, 1.284698742e-06f, 1.283468750e-06f, 1.282236730e-06f, 1.281002685e-06f, 1.279766616e-06f,
-1.278528526e-06f, 1.277288417e-06f, 1.276046293e-06f, 1.274802156e-06f, 1.273556008e-06f, 1.272307851e-06f, 1.271057688e-06f, 1.269805522e-06f, 1.268551355e-06f, 1.267295190e-06f,
-1.266037029e-06f, 1.264776874e-06f, 1.263514729e-06f, 1.262250595e-06f, 1.260984475e-06f, 1.259716372e-06f, 1.258446288e-06f, 1.257174225e-06f, 1.255900187e-06f, 1.254624176e-06f,
-1.253346194e-06f, 1.252066244e-06f, 1.250784328e-06f, 1.249500450e-06f, 1.248214610e-06f, 1.246926813e-06f, 1.245637060e-06f, 1.244345354e-06f, 1.243051698e-06f, 1.241756095e-06f,
-1.240458546e-06f, 1.239159054e-06f, 1.237857622e-06f, 1.236554253e-06f, 1.235248949e-06f, 1.233941713e-06f, 1.232632547e-06f, 1.231321453e-06f, 1.230008435e-06f, 1.228693496e-06f,
-1.227376636e-06f, 1.226057860e-06f, 1.224737170e-06f, 1.223414568e-06f, 1.222090057e-06f, 1.220763640e-06f, 1.219435319e-06f, 1.218105097e-06f, 1.216772976e-06f, 1.215438959e-06f,
-1.214103050e-06f, 1.212765249e-06f, 1.211425560e-06f, 1.210083986e-06f, 1.208740529e-06f, 1.207395192e-06f, 1.206047978e-06f, 1.204698889e-06f, 1.203347927e-06f, 1.201995096e-06f,
-1.200640398e-06f, 1.199283836e-06f, 1.197925412e-06f, 1.196565129e-06f, 1.195202990e-06f, 1.193838997e-06f, 1.192473153e-06f, 1.191105461e-06f, 1.189735923e-06f, 1.188364543e-06f,
-1.186991322e-06f, 1.185616264e-06f, 1.184239370e-06f, 1.182860645e-06f, 1.181480090e-06f, 1.180097708e-06f, 1.178713502e-06f, 1.177327475e-06f, 1.175939629e-06f, 1.174549967e-06f,
-1.173158491e-06f, 1.171765206e-06f, 1.170370112e-06f, 1.168973213e-06f, 1.167574511e-06f, 1.166174010e-06f, 1.164771711e-06f, 1.163367619e-06f, 1.161961735e-06f, 1.160554062e-06f,
-1.159144603e-06f, 1.157733360e-06f, 1.156320337e-06f, 1.154905536e-06f, 1.153488960e-06f, 1.152070612e-06f, 1.150650494e-06f, 1.149228609e-06f, 1.147804959e-06f, 1.146379549e-06f,
-1.144952380e-06f, 1.143523455e-06f, 1.142092777e-06f, 1.140660348e-06f, 1.139226172e-06f, 1.137790251e-06f, 1.136352589e-06f, 1.134913187e-06f, 1.133472048e-06f, 1.132029176e-06f,
-1.130584573e-06f, 1.129138242e-06f, 1.127690186e-06f, 1.126240407e-06f, 1.124788908e-06f, 1.123335693e-06f, 1.121880763e-06f, 1.120424122e-06f, 1.118965772e-06f, 1.117505717e-06f,
-1.116043959e-06f, 1.114580501e-06f, 1.113115346e-06f, 1.111648496e-06f, 1.110179954e-06f, 1.108709724e-06f, 1.107237808e-06f, 1.105764209e-06f, 1.104288929e-06f, 1.102811972e-06f,
-1.101333340e-06f, 1.099853037e-06f, 1.098371064e-06f, 1.096887426e-06f, 1.095402124e-06f, 1.093915161e-06f, 1.092426541e-06f, 1.090936267e-06f, 1.089444340e-06f, 1.087950765e-06f,
-1.086455543e-06f, 1.084958678e-06f, 1.083460173e-06f, 1.081960030e-06f, 1.080458253e-06f, 1.078954843e-06f, 1.077449805e-06f, 1.075943141e-06f, 1.074434853e-06f, 1.072924945e-06f,
-1.071413420e-06f, 1.069900280e-06f, 1.068385529e-06f, 1.066869169e-06f, 1.065351203e-06f, 1.063831634e-06f, 1.062310465e-06f, 1.060787698e-06f, 1.059263338e-06f, 1.057737386e-06f,
-1.056209846e-06f, 1.054680720e-06f, 1.053150012e-06f, 1.051617724e-06f, 1.050083859e-06f, 1.048548420e-06f, 1.047011410e-06f, 1.045472832e-06f, 1.043932690e-06f, 1.042390984e-06f,
-1.040847720e-06f, 1.039302900e-06f, 1.037756526e-06f, 1.036208601e-06f, 1.034659129e-06f, 1.033108113e-06f, 1.031555554e-06f, 1.030001458e-06f, 1.028445825e-06f, 1.026888660e-06f,
-1.025329964e-06f, 1.023769742e-06f, 1.022207996e-06f, 1.020644729e-06f, 1.019079945e-06f, 1.017513645e-06f, 1.015945833e-06f, 1.014376511e-06f, 1.012805684e-06f, 1.011233354e-06f,
-1.009659523e-06f, 1.008084195e-06f, 1.006507373e-06f, 1.004929060e-06f, 1.003349258e-06f, 1.001767971e-06f, 1.000185202e-06f, 9.986009534e-07f, 9.970152286e-07f, 9.954280304e-07f,
-9.938393618e-07f, 9.922492260e-07f, 9.906576258e-07f, 9.890645642e-07f, 9.874700443e-07f, 9.858740690e-07f, 9.842766415e-07f, 9.826777646e-07f, 9.810774414e-07f, 9.794756749e-07f,
-9.778724681e-07f, 9.762678241e-07f, 9.746617458e-07f, 9.730542363e-07f, 9.714452986e-07f, 9.698349358e-07f, 9.682231507e-07f, 9.666099466e-07f, 9.649953264e-07f, 9.633792931e-07f,
-9.617618498e-07f, 9.601429995e-07f, 9.585227453e-07f, 9.569010901e-07f, 9.552780371e-07f, 9.536535893e-07f, 9.520277497e-07f, 9.504005214e-07f, 9.487719075e-07f, 9.471419109e-07f,
-9.455105348e-07f, 9.438777821e-07f, 9.422436560e-07f, 9.406081595e-07f, 9.389712957e-07f, 9.373330676e-07f, 9.356934783e-07f, 9.340525309e-07f, 9.324102285e-07f, 9.307665740e-07f,
-9.291215706e-07f, 9.274752214e-07f, 9.258275294e-07f, 9.241784978e-07f, 9.225281295e-07f, 9.208764277e-07f, 9.192233955e-07f, 9.175690359e-07f, 9.159133521e-07f, 9.142563471e-07f,
-9.125980240e-07f, 9.109383859e-07f, 9.092774359e-07f, 9.076151771e-07f, 9.059516126e-07f, 9.042867456e-07f, 9.026205790e-07f, 9.009531160e-07f, 8.992843597e-07f, 8.976143133e-07f,
-8.959429798e-07f, 8.942703623e-07f, 8.925964640e-07f, 8.909212879e-07f, 8.892448373e-07f, 8.875671151e-07f, 8.858881245e-07f, 8.842078687e-07f, 8.825263507e-07f, 8.808435738e-07f,
-8.791595409e-07f, 8.774742553e-07f, 8.757877201e-07f, 8.740999383e-07f, 8.724109132e-07f, 8.707206479e-07f, 8.690291454e-07f, 8.673364090e-07f, 8.656424418e-07f, 8.639472469e-07f,
-8.622508275e-07f, 8.605531867e-07f, 8.588543277e-07f, 8.571542535e-07f, 8.554529674e-07f, 8.537504725e-07f, 8.520467720e-07f, 8.503418690e-07f, 8.486357666e-07f, 8.469284681e-07f,
-8.452199765e-07f, 8.435102951e-07f, 8.417994270e-07f, 8.400873754e-07f, 8.383741433e-07f, 8.366597341e-07f, 8.349441509e-07f, 8.332273968e-07f, 8.315094750e-07f, 8.297903886e-07f,
-8.280701410e-07f, 8.263487351e-07f, 8.246261743e-07f, 8.229024616e-07f, 8.211776003e-07f, 8.194515936e-07f, 8.177244445e-07f, 8.159961564e-07f, 8.142667324e-07f, 8.125361757e-07f,
-8.108044894e-07f, 8.090716769e-07f, 8.073377411e-07f, 8.056026855e-07f, 8.038665130e-07f, 8.021292270e-07f, 8.003908307e-07f, 7.986513272e-07f, 7.969107197e-07f, 7.951690114e-07f,
-7.934262056e-07f, 7.916823055e-07f, 7.899373142e-07f, 7.881912349e-07f, 7.864440710e-07f, 7.846958255e-07f, 7.829465017e-07f, 7.811961028e-07f, 7.794446320e-07f, 7.776920925e-07f,
-7.759384876e-07f, 7.741838205e-07f, 7.724280943e-07f, 7.706713124e-07f, 7.689134778e-07f, 7.671545940e-07f, 7.653946640e-07f, 7.636336911e-07f, 7.618716785e-07f, 7.601086295e-07f,
-7.583445473e-07f, 7.565794351e-07f, 7.548132961e-07f, 7.530461336e-07f, 7.512779509e-07f, 7.495087511e-07f, 7.477385375e-07f, 7.459673133e-07f, 7.441950818e-07f, 7.424218462e-07f,
-7.406476098e-07f, 7.388723758e-07f, 7.370961474e-07f, 7.353189279e-07f, 7.335407205e-07f, 7.317615285e-07f, 7.299813551e-07f, 7.282002037e-07f, 7.264180773e-07f, 7.246349794e-07f,
-7.228509131e-07f, 7.210658817e-07f, 7.192798884e-07f, 7.174929366e-07f, 7.157050294e-07f, 7.139161701e-07f, 7.121263621e-07f, 7.103356085e-07f, 7.085439126e-07f, 7.067512777e-07f,
-7.049577070e-07f, 7.031632039e-07f, 7.013677715e-07f, 6.995714132e-07f, 6.977741322e-07f, 6.959759318e-07f, 6.941768153e-07f, 6.923767859e-07f, 6.905758469e-07f, 6.887740016e-07f,
-6.869712532e-07f, 6.851676051e-07f, 6.833630605e-07f, 6.815576227e-07f, 6.797512950e-07f, 6.779440806e-07f, 6.761359829e-07f, 6.743270051e-07f, 6.725171505e-07f, 6.707064224e-07f,
-6.688948240e-07f, 6.670823588e-07f, 6.652690298e-07f, 6.634548406e-07f, 6.616397942e-07f, 6.598238941e-07f, 6.580071435e-07f, 6.561895458e-07f, 6.543711041e-07f, 6.525518218e-07f,
-6.507317022e-07f, 6.489107486e-07f, 6.470889643e-07f, 6.452663526e-07f, 6.434429168e-07f, 6.416186601e-07f, 6.397935860e-07f, 6.379676976e-07f, 6.361409983e-07f, 6.343134915e-07f,
-6.324851803e-07f, 6.306560681e-07f, 6.288261583e-07f, 6.269954541e-07f, 6.251639588e-07f, 6.233316757e-07f, 6.214986082e-07f, 6.196647596e-07f, 6.178301331e-07f, 6.159947322e-07f,
-6.141585600e-07f, 6.123216199e-07f, 6.104839153e-07f, 6.086454494e-07f, 6.068062255e-07f, 6.049662470e-07f, 6.031255173e-07f, 6.012840395e-07f, 5.994418171e-07f, 5.975988533e-07f,
-5.957551515e-07f, 5.939107150e-07f, 5.920655471e-07f, 5.902196511e-07f, 5.883730305e-07f, 5.865256884e-07f, 5.846776282e-07f, 5.828288532e-07f, 5.809793669e-07f, 5.791291724e-07f,
-5.772782731e-07f, 5.754266724e-07f, 5.735743736e-07f, 5.717213800e-07f, 5.698676949e-07f, 5.680133217e-07f, 5.661582638e-07f, 5.643025243e-07f, 5.624461067e-07f, 5.605890144e-07f,
-5.587312505e-07f, 5.568728186e-07f, 5.550137218e-07f, 5.531539637e-07f, 5.512935474e-07f, 5.494324763e-07f, 5.475707538e-07f, 5.457083832e-07f, 5.438453678e-07f, 5.419817110e-07f,
-5.401174162e-07f, 5.382524866e-07f, 5.363869256e-07f, 5.345207365e-07f, 5.326539228e-07f, 5.307864877e-07f, 5.289184345e-07f, 5.270497667e-07f, 5.251804876e-07f, 5.233106005e-07f,
-5.214401087e-07f, 5.195690156e-07f, 5.176973246e-07f, 5.158250390e-07f, 5.139521622e-07f, 5.120786974e-07f, 5.102046481e-07f, 5.083300176e-07f, 5.064548093e-07f, 5.045790264e-07f,
-5.027026724e-07f, 5.008257506e-07f, 4.989482644e-07f, 4.970702171e-07f, 4.951916120e-07f, 4.933124525e-07f, 4.914327420e-07f, 4.895524838e-07f, 4.876716813e-07f, 4.857903378e-07f,
-4.839084567e-07f, 4.820260414e-07f, 4.801430951e-07f, 4.782596213e-07f, 4.763756233e-07f, 4.744911045e-07f, 4.726060682e-07f, 4.707205178e-07f, 4.688344566e-07f, 4.669478880e-07f,
-4.650608154e-07f, 4.631732421e-07f, 4.612851715e-07f, 4.593966069e-07f, 4.575075517e-07f, 4.556180092e-07f, 4.537279829e-07f, 4.518374761e-07f, 4.499464921e-07f, 4.480550343e-07f,
-4.461631060e-07f, 4.442707107e-07f, 4.423778517e-07f, 4.404845324e-07f, 4.385907560e-07f, 4.366965260e-07f, 4.348018458e-07f, 4.329067187e-07f, 4.310111480e-07f, 4.291151372e-07f,
-4.272186896e-07f, 4.253218085e-07f, 4.234244974e-07f, 4.215267596e-07f, 4.196285984e-07f, 4.177300172e-07f, 4.158310195e-07f, 4.139316085e-07f, 4.120317876e-07f, 4.101315602e-07f,
-4.082309296e-07f, 4.063298993e-07f, 4.044284726e-07f, 4.025266528e-07f, 4.006244433e-07f, 3.987218475e-07f, 3.968188688e-07f, 3.949155105e-07f, 3.930117760e-07f, 3.911076687e-07f,
-3.892031918e-07f, 3.872983489e-07f, 3.853931432e-07f, 3.834875782e-07f, 3.815816571e-07f, 3.796753834e-07f, 3.777687605e-07f, 3.758617916e-07f, 3.739544802e-07f, 3.720468297e-07f,
-3.701388433e-07f, 3.682305246e-07f, 3.663218767e-07f, 3.644129032e-07f, 3.625036074e-07f, 3.605939926e-07f, 3.586840622e-07f, 3.567738196e-07f, 3.548632682e-07f, 3.529524113e-07f,
-3.510412522e-07f, 3.491297945e-07f, 3.472180413e-07f, 3.453059962e-07f, 3.433936624e-07f, 3.414810433e-07f, 3.395681424e-07f, 3.376549629e-07f, 3.357415083e-07f, 3.338277818e-07f,
-3.319137869e-07f, 3.299995270e-07f, 3.280850054e-07f, 3.261702254e-07f, 3.242551905e-07f, 3.223399040e-07f, 3.204243693e-07f, 3.185085897e-07f, 3.165925687e-07f, 3.146763095e-07f,
-3.127598156e-07f, 3.108430902e-07f, 3.089261369e-07f, 3.070089589e-07f, 3.050915596e-07f, 3.031739424e-07f, 3.012561107e-07f, 2.993380677e-07f, 2.974198169e-07f, 2.955013617e-07f,
-2.935827054e-07f, 2.916638513e-07f, 2.897448029e-07f, 2.878255635e-07f, 2.859061365e-07f, 2.839865251e-07f, 2.820667329e-07f, 2.801467632e-07f, 2.782266192e-07f, 2.763063045e-07f,
-2.743858223e-07f, 2.724651760e-07f, 2.705443689e-07f, 2.686234045e-07f, 2.667022862e-07f, 2.647810171e-07f, 2.628596008e-07f, 2.609380406e-07f, 2.590163398e-07f, 2.570945018e-07f,
-2.551725300e-07f, 2.532504277e-07f, 2.513281983e-07f, 2.494058451e-07f, 2.474833716e-07f, 2.455607810e-07f, 2.436380767e-07f, 2.417152621e-07f, 2.397923405e-07f, 2.378693153e-07f,
-2.359461898e-07f, 2.340229675e-07f, 2.320996516e-07f, 2.301762456e-07f, 2.282527527e-07f, 2.263291763e-07f, 2.244055199e-07f, 2.224817866e-07f, 2.205579800e-07f, 2.186341032e-07f,
-2.167101598e-07f, 2.147861531e-07f, 2.128620863e-07f, 2.109379629e-07f, 2.090137862e-07f, 2.070895595e-07f, 2.051652863e-07f, 2.032409697e-07f, 2.013166133e-07f, 1.993922204e-07f,
-1.974677943e-07f, 1.955433383e-07f, 1.936188557e-07f, 1.916943501e-07f, 1.897698246e-07f, 1.878452827e-07f, 1.859207276e-07f, 1.839961628e-07f, 1.820715915e-07f, 1.801470171e-07f,
-1.782224430e-07f, 1.762978725e-07f, 1.743733090e-07f, 1.724487557e-07f, 1.705242161e-07f, 1.685996934e-07f, 1.666751910e-07f, 1.647507122e-07f, 1.628262605e-07f, 1.609018390e-07f,
-1.589774513e-07f, 1.570531005e-07f, 1.551287900e-07f, 1.532045232e-07f, 1.512803034e-07f, 1.493561340e-07f, 1.474320182e-07f, 1.455079594e-07f, 1.435839610e-07f, 1.416600262e-07f,
-1.397361584e-07f, 1.378123610e-07f, 1.358886372e-07f, 1.339649904e-07f, 1.320414239e-07f, 1.301179411e-07f, 1.281945453e-07f, 1.262712397e-07f, 1.243480278e-07f, 1.224249128e-07f,
-1.205018981e-07f, 1.185789870e-07f, 1.166561828e-07f, 1.147334888e-07f, 1.128109085e-07f, 1.108884450e-07f, 1.089661017e-07f, 1.070438820e-07f, 1.051217890e-07f, 1.031998263e-07f,
-1.012779970e-07f, 9.935630456e-08f, 9.743475220e-08f, 9.551334327e-08f, 9.359208108e-08f, 9.167096894e-08f, 8.975001017e-08f, 8.782920808e-08f, 8.590856598e-08f, 8.398808717e-08f,
-8.206777497e-08f, 8.014763269e-08f, 7.822766363e-08f, 7.630787109e-08f, 7.438825840e-08f, 7.246882885e-08f, 7.054958574e-08f, 6.863053237e-08f, 6.671167206e-08f, 6.479300810e-08f,
-6.287454379e-08f, 6.095628244e-08f, 5.903822733e-08f, 5.712038178e-08f, 5.520274907e-08f, 5.328533250e-08f, 5.136813537e-08f, 4.945116097e-08f, 4.753441259e-08f, 4.561789353e-08f,
-4.370160708e-08f, 4.178555653e-08f, 3.986974517e-08f, 3.795417629e-08f, 3.603885317e-08f, 3.412377911e-08f, 3.220895738e-08f, 3.029439127e-08f, 2.838008407e-08f, 2.646603907e-08f,
-2.455225953e-08f, 2.263874874e-08f, 2.072550999e-08f, 1.881254655e-08f, 1.689986169e-08f, 1.498745871e-08f, 1.307534086e-08f, 1.116351143e-08f, 9.251973690e-09f, 7.340730913e-09f,
-5.429786370e-09f, 3.519143333e-09f, 1.608805070e-09f, -3.012251495e-10f, -2.210944058e-09f, -4.120348390e-09f, -6.029434880e-09f, -7.938200263e-09f, -9.846641276e-09f, -1.175475466e-08f,
--1.366253715e-08f, -1.556998548e-08f, -1.747709641e-08f, -1.938386667e-08f, -2.129029300e-08f, -2.319637215e-08f, -2.510210087e-08f, -2.700747589e-08f, -2.891249398e-08f, -3.081715188e-08f,
--3.272144634e-08f, -3.462537411e-08f, -3.652893194e-08f, -3.843211659e-08f, -4.033492482e-08f, -4.223735337e-08f, -4.413939901e-08f, -4.604105849e-08f, -4.794232858e-08f, -4.984320604e-08f,
--5.174368762e-08f, -5.364377010e-08f, -5.554345023e-08f, -5.744272478e-08f, -5.934159053e-08f, -6.124004423e-08f, -6.313808265e-08f, -6.503570258e-08f, -6.693290078e-08f, -6.882967402e-08f,
--7.072601907e-08f, -7.262193272e-08f, -7.451741175e-08f, -7.641245292e-08f, -7.830705302e-08f, -8.020120883e-08f, -8.209491714e-08f, -8.398817471e-08f, -8.588097836e-08f, -8.777332484e-08f,
--8.966521097e-08f, -9.155663351e-08f, -9.344758927e-08f, -9.533807504e-08f, -9.722808760e-08f, -9.911762376e-08f, -1.010066803e-07f, -1.028952540e-07f, -1.047833417e-07f, -1.066709402e-07f,
--1.085580463e-07f, -1.104446568e-07f, -1.123307684e-07f, -1.142163781e-07f, -1.161014825e-07f, -1.179860786e-07f, -1.198701631e-07f, -1.217537328e-07f, -1.236367845e-07f, -1.255193151e-07f,
--1.274013214e-07f, -1.292828002e-07f, -1.311637482e-07f, -1.330441624e-07f, -1.349240396e-07f, -1.368033765e-07f, -1.386821700e-07f, -1.405604169e-07f, -1.424381140e-07f, -1.443152583e-07f,
--1.461918464e-07f, -1.480678752e-07f, -1.499433417e-07f, -1.518182425e-07f, -1.536925745e-07f, -1.555663346e-07f, -1.574395197e-07f, -1.593121264e-07f, -1.611841518e-07f, -1.630555926e-07f,
--1.649264457e-07f, -1.667967079e-07f, -1.686663760e-07f, -1.705354470e-07f, -1.724039177e-07f, -1.742717849e-07f, -1.761390454e-07f, -1.780056962e-07f, -1.798717341e-07f, -1.817371560e-07f,
--1.836019586e-07f, -1.854661389e-07f, -1.873296938e-07f, -1.891926200e-07f, -1.910549146e-07f, -1.929165742e-07f, -1.947775959e-07f, -1.966379764e-07f, -1.984977127e-07f, -2.003568016e-07f,
--2.022152400e-07f, -2.040730248e-07f, -2.059301528e-07f, -2.077866210e-07f, -2.096424261e-07f, -2.114975652e-07f, -2.133520351e-07f, -2.152058327e-07f, -2.170589548e-07f, -2.189113984e-07f,
--2.207631604e-07f, -2.226142376e-07f, -2.244646269e-07f, -2.263143253e-07f, -2.281633297e-07f, -2.300116368e-07f, -2.318592437e-07f, -2.337061473e-07f, -2.355523444e-07f, -2.373978320e-07f,
--2.392426070e-07f, -2.410866663e-07f, -2.429300067e-07f, -2.447726253e-07f, -2.466145189e-07f, -2.484556845e-07f, -2.502961189e-07f, -2.521358191e-07f, -2.539747821e-07f, -2.558130047e-07f,
--2.576504839e-07f, -2.594872165e-07f, -2.613231996e-07f, -2.631584301e-07f, -2.649929049e-07f, -2.668266209e-07f, -2.686595751e-07f, -2.704917644e-07f, -2.723231858e-07f, -2.741538362e-07f,
--2.759837125e-07f, -2.778128117e-07f, -2.796411308e-07f, -2.814686667e-07f, -2.832954163e-07f, -2.851213766e-07f, -2.869465446e-07f, -2.887709172e-07f, -2.905944914e-07f, -2.924172642e-07f,
--2.942392324e-07f, -2.960603932e-07f, -2.978807434e-07f, -2.997002800e-07f, -3.015189999e-07f, -3.033369003e-07f, -3.051539780e-07f, -3.069702300e-07f, -3.087856533e-07f, -3.106002449e-07f,
--3.124140017e-07f, -3.142269208e-07f, -3.160389991e-07f, -3.178502336e-07f, -3.196606214e-07f, -3.214701594e-07f, -3.232788445e-07f, -3.250866739e-07f, -3.268936445e-07f, -3.286997532e-07f,
--3.305049972e-07f, -3.323093734e-07f, -3.341128788e-07f, -3.359155105e-07f, -3.377172653e-07f, -3.395181405e-07f, -3.413181329e-07f, -3.431172395e-07f, -3.449154575e-07f, -3.467127838e-07f,
--3.485092155e-07f, -3.503047495e-07f, -3.520993830e-07f, -3.538931128e-07f, -3.556859361e-07f, -3.574778500e-07f, -3.592688513e-07f, -3.610589373e-07f, -3.628481048e-07f, -3.646363510e-07f,
--3.664236729e-07f, -3.682100675e-07f, -3.699955319e-07f, -3.717800632e-07f, -3.735636584e-07f, -3.753463145e-07f, -3.771280286e-07f, -3.789087978e-07f, -3.806886191e-07f, -3.824674896e-07f,
--3.842454063e-07f, -3.860223664e-07f, -3.877983668e-07f, -3.895734047e-07f, -3.913474772e-07f, -3.931205813e-07f, -3.948927140e-07f, -3.966638725e-07f, -3.984340539e-07f, -4.002032552e-07f,
--4.019714735e-07f, -4.037387060e-07f, -4.055049496e-07f, -4.072702016e-07f, -4.090344589e-07f, -4.107977187e-07f, -4.125599782e-07f, -4.143212343e-07f, -4.160814842e-07f, -4.178407250e-07f,
--4.195989538e-07f, -4.213561678e-07f, -4.231123639e-07f, -4.248675395e-07f, -4.266216915e-07f, -4.283748170e-07f, -4.301269134e-07f, -4.318779775e-07f, -4.336280066e-07f, -4.353769978e-07f,
--4.371249482e-07f, -4.388718550e-07f, -4.406177152e-07f, -4.423625261e-07f, -4.441062848e-07f, -4.458489884e-07f, -4.475906340e-07f, -4.493312189e-07f, -4.510707401e-07f, -4.528091948e-07f,
--4.545465802e-07f, -4.562828934e-07f, -4.580181315e-07f, -4.597522918e-07f, -4.614853715e-07f, -4.632173675e-07f, -4.649482773e-07f, -4.666780978e-07f, -4.684068263e-07f, -4.701344600e-07f,
--4.718609960e-07f, -4.735864315e-07f, -4.753107637e-07f, -4.770339898e-07f, -4.787561070e-07f, -4.804771124e-07f, -4.821970033e-07f, -4.839157768e-07f, -4.856334302e-07f, -4.873499606e-07f,
--4.890653652e-07f, -4.907796413e-07f, -4.924927860e-07f, -4.942047966e-07f, -4.959156703e-07f, -4.976254043e-07f, -4.993339958e-07f, -5.010414420e-07f, -5.027477401e-07f, -5.044528874e-07f,
--5.061568811e-07f, -5.078597184e-07f, -5.095613966e-07f, -5.112619128e-07f, -5.129612644e-07f, -5.146594486e-07f, -5.163564625e-07f, -5.180523035e-07f, -5.197469687e-07f, -5.214404555e-07f,
--5.231327611e-07f, -5.248238828e-07f, -5.265138177e-07f, -5.282025632e-07f, -5.298901165e-07f, -5.315764749e-07f, -5.332616356e-07f, -5.349455960e-07f, -5.366283532e-07f, -5.383099046e-07f,
--5.399902474e-07f, -5.416693789e-07f, -5.433472965e-07f, -5.450239973e-07f, -5.466994786e-07f, -5.483737379e-07f, -5.500467722e-07f, -5.517185790e-07f, -5.533891556e-07f, -5.550584991e-07f,
--5.567266070e-07f, -5.583934766e-07f, -5.600591051e-07f, -5.617234898e-07f, -5.633866281e-07f, -5.650485173e-07f, -5.667091547e-07f, -5.683685376e-07f, -5.700266634e-07f, -5.716835293e-07f,
--5.733391327e-07f, -5.749934709e-07f, -5.766465413e-07f, -5.782983412e-07f, -5.799488679e-07f, -5.815981188e-07f, -5.832460912e-07f, -5.848927825e-07f, -5.865381900e-07f, -5.881823110e-07f,
--5.898251430e-07f, -5.914666832e-07f, -5.931069291e-07f, -5.947458780e-07f, -5.963835272e-07f, -5.980198741e-07f, -5.996549162e-07f, -6.012886507e-07f, -6.029210751e-07f, -6.045521866e-07f,
--6.061819828e-07f, -6.078104610e-07f, -6.094376186e-07f, -6.110634529e-07f, -6.126879614e-07f, -6.143111414e-07f, -6.159329904e-07f, -6.175535058e-07f, -6.191726849e-07f, -6.207905251e-07f,
--6.224070239e-07f, -6.240221787e-07f, -6.256359869e-07f, -6.272484459e-07f, -6.288595532e-07f, -6.304693061e-07f, -6.320777020e-07f, -6.336847385e-07f, -6.352904129e-07f, -6.368947226e-07f,
--6.384976652e-07f, -6.400992380e-07f, -6.416994385e-07f, -6.432982642e-07f, -6.448957124e-07f, -6.464917806e-07f, -6.480864663e-07f, -6.496797670e-07f, -6.512716800e-07f, -6.528622029e-07f,
--6.544513331e-07f, -6.560390682e-07f, -6.576254054e-07f, -6.592103424e-07f, -6.607938766e-07f, -6.623760055e-07f, -6.639567266e-07f, -6.655360373e-07f, -6.671139352e-07f, -6.686904176e-07f,
--6.702654822e-07f, -6.718391264e-07f, -6.734113478e-07f, -6.749821437e-07f, -6.765515118e-07f, -6.781194495e-07f, -6.796859543e-07f, -6.812510238e-07f, -6.828146554e-07f, -6.843768468e-07f,
--6.859375953e-07f, -6.874968986e-07f, -6.890547542e-07f, -6.906111595e-07f, -6.921661121e-07f, -6.937196097e-07f, -6.952716496e-07f, -6.968222294e-07f, -6.983713468e-07f, -6.999189992e-07f,
--7.014651841e-07f, -7.030098993e-07f, -7.045531421e-07f, -7.060949101e-07f, -7.076352010e-07f, -7.091740123e-07f, -7.107113415e-07f, -7.122471863e-07f, -7.137815442e-07f, -7.153144127e-07f,
--7.168457895e-07f, -7.183756722e-07f, -7.199040582e-07f, -7.214309453e-07f, -7.229563311e-07f, -7.244802130e-07f, -7.260025887e-07f, -7.275234559e-07f, -7.290428120e-07f, -7.305606548e-07f,
--7.320769818e-07f, -7.335917907e-07f, -7.351050790e-07f, -7.366168444e-07f, -7.381270846e-07f, -7.396357970e-07f, -7.411429794e-07f, -7.426486294e-07f, -7.441527447e-07f, -7.456553228e-07f,
--7.471563614e-07f, -7.486558582e-07f, -7.501538108e-07f, -7.516502168e-07f, -7.531450739e-07f, -7.546383798e-07f, -7.561301321e-07f, -7.576203285e-07f, -7.591089667e-07f, -7.605960443e-07f,
--7.620815589e-07f, -7.635655083e-07f, -7.650478902e-07f, -7.665287022e-07f, -7.680079420e-07f, -7.694856073e-07f, -7.709616958e-07f, -7.724362052e-07f, -7.739091331e-07f, -7.753804774e-07f,
--7.768502356e-07f, -7.783184055e-07f, -7.797849848e-07f, -7.812499712e-07f, -7.827133624e-07f, -7.841751562e-07f, -7.856353503e-07f, -7.870939423e-07f, -7.885509301e-07f, -7.900063113e-07f,
--7.914600837e-07f, -7.929122451e-07f, -7.943627931e-07f, -7.958117255e-07f, -7.972590400e-07f, -7.987047345e-07f, -8.001488066e-07f, -8.015912542e-07f, -8.030320749e-07f, -8.044712666e-07f,
--8.059088270e-07f, -8.073447539e-07f, -8.087790450e-07f, -8.102116981e-07f, -8.116427111e-07f, -8.130720816e-07f, -8.144998076e-07f, -8.159258866e-07f, -8.173503167e-07f, -8.187730955e-07f,
--8.201942208e-07f, -8.216136905e-07f, -8.230315024e-07f, -8.244476542e-07f, -8.258621438e-07f, -8.272749690e-07f, -8.286861276e-07f, -8.300956174e-07f, -8.315034363e-07f, -8.329095821e-07f,
--8.343140525e-07f, -8.357168456e-07f, -8.371179590e-07f, -8.385173907e-07f, -8.399151384e-07f, -8.413112001e-07f, -8.427055735e-07f, -8.440982565e-07f, -8.454892471e-07f, -8.468785429e-07f,
--8.482661420e-07f, -8.496520422e-07f, -8.510362413e-07f, -8.524187372e-07f, -8.537995279e-07f, -8.551786111e-07f, -8.565559847e-07f, -8.579316467e-07f, -8.593055950e-07f, -8.606778274e-07f,
--8.620483418e-07f, -8.634171361e-07f, -8.647842083e-07f, -8.661495562e-07f, -8.675131778e-07f, -8.688750710e-07f, -8.702352336e-07f, -8.715936636e-07f, -8.729503590e-07f, -8.743053176e-07f,
--8.756585374e-07f, -8.770100163e-07f, -8.783597523e-07f, -8.797077432e-07f, -8.810539871e-07f, -8.823984819e-07f, -8.837412256e-07f, -8.850822160e-07f, -8.864214512e-07f, -8.877589291e-07f,
--8.890946476e-07f, -8.904286049e-07f, -8.917607987e-07f, -8.930912271e-07f, -8.944198881e-07f, -8.957467797e-07f, -8.970718997e-07f, -8.983952463e-07f, -8.997168174e-07f, -9.010366111e-07f,
--9.023546252e-07f, -9.036708578e-07f, -9.049853070e-07f, -9.062979706e-07f, -9.076088469e-07f, -9.089179336e-07f, -9.102252289e-07f, -9.115307309e-07f, -9.128344374e-07f, -9.141363466e-07f,
--9.154364565e-07f, -9.167347651e-07f, -9.180312704e-07f, -9.193259705e-07f, -9.206188635e-07f, -9.219099474e-07f, -9.231992202e-07f, -9.244866801e-07f, -9.257723250e-07f, -9.270561530e-07f,
--9.283381622e-07f, -9.296183507e-07f, -9.308967166e-07f, -9.321732579e-07f, -9.334479726e-07f, -9.347208590e-07f, -9.359919150e-07f, -9.372611388e-07f, -9.385285285e-07f, -9.397940821e-07f,
--9.410577978e-07f, -9.423196737e-07f, -9.435797078e-07f, -9.448378983e-07f, -9.460942434e-07f, -9.473487410e-07f, -9.486013894e-07f, -9.498521867e-07f, -9.511011310e-07f, -9.523482205e-07f,
--9.535934532e-07f, -9.548368274e-07f, -9.560783411e-07f, -9.573179925e-07f, -9.585557798e-07f, -9.597917011e-07f, -9.610257546e-07f, -9.622579384e-07f, -9.634882508e-07f, -9.647166898e-07f,
--9.659432537e-07f, -9.671679406e-07f, -9.683907487e-07f, -9.696116762e-07f, -9.708307213e-07f, -9.720478821e-07f, -9.732631569e-07f, -9.744765439e-07f, -9.756880412e-07f, -9.768976471e-07f,
--9.781053598e-07f, -9.793111774e-07f, -9.805150983e-07f, -9.817171206e-07f, -9.829172425e-07f, -9.841154623e-07f, -9.853117782e-07f, -9.865061885e-07f, -9.876986913e-07f, -9.888892850e-07f,
--9.900779677e-07f, -9.912647377e-07f, -9.924495932e-07f, -9.936325326e-07f, -9.948135541e-07f, -9.959926559e-07f, -9.971698363e-07f, -9.983450936e-07f, -9.995184260e-07f, -1.000689832e-06f,
--1.001859309e-06f, -1.003026857e-06f, -1.004192473e-06f, -1.005356155e-06f, -1.006517902e-06f, -1.007677713e-06f, -1.008835585e-06f, -1.009991516e-06f, -1.011145506e-06f, -1.012297552e-06f,
--1.013447653e-06f, -1.014595807e-06f, -1.015742012e-06f, -1.016886267e-06f, -1.018028570e-06f, -1.019168920e-06f, -1.020307314e-06f, -1.021443751e-06f, -1.022578229e-06f, -1.023710747e-06f,
--1.024841304e-06f, -1.025969896e-06f, -1.027096524e-06f, -1.028221184e-06f, -1.029343877e-06f, -1.030464599e-06f, -1.031583349e-06f, -1.032700126e-06f, -1.033814929e-06f, -1.034927754e-06f,
--1.036038602e-06f, -1.037147469e-06f, -1.038254356e-06f, -1.039359259e-06f, -1.040462178e-06f, -1.041563110e-06f, -1.042662055e-06f, -1.043759011e-06f, -1.044853975e-06f, -1.045946947e-06f,
--1.047037926e-06f, -1.048126908e-06f, -1.049213893e-06f, -1.050298880e-06f, -1.051381866e-06f, -1.052462850e-06f, -1.053541831e-06f, -1.054618807e-06f, -1.055693777e-06f, -1.056766738e-06f,
--1.057837690e-06f, -1.058906631e-06f, -1.059973559e-06f, -1.061038473e-06f, -1.062101372e-06f, -1.063162253e-06f, -1.064221115e-06f, -1.065277958e-06f, -1.066332778e-06f, -1.067385575e-06f,
--1.068436348e-06f, -1.069485095e-06f, -1.070531813e-06f, -1.071576503e-06f, -1.072619162e-06f, -1.073659789e-06f, -1.074698382e-06f, -1.075734940e-06f, -1.076769461e-06f, -1.077801945e-06f,
--1.078832389e-06f, -1.079860792e-06f, -1.080887153e-06f, -1.081911470e-06f, -1.082933741e-06f, -1.083953966e-06f, -1.084972143e-06f, -1.085988270e-06f, -1.087002346e-06f, -1.088014370e-06f,
--1.089024340e-06f, -1.090032255e-06f, -1.091038113e-06f, -1.092041913e-06f, -1.093043653e-06f, -1.094043332e-06f, -1.095040950e-06f, -1.096036503e-06f, -1.097029991e-06f, -1.098021413e-06f,
--1.099010767e-06f, -1.099998052e-06f, -1.100983266e-06f, -1.101966408e-06f, -1.102947477e-06f, -1.103926471e-06f, -1.104903389e-06f, -1.105878230e-06f, -1.106850992e-06f, -1.107821673e-06f,
--1.108790274e-06f, -1.109756791e-06f, -1.110721224e-06f, -1.111683572e-06f, -1.112643833e-06f, -1.113602006e-06f, -1.114558089e-06f, -1.115512081e-06f, -1.116463982e-06f, -1.117413789e-06f,
--1.118361501e-06f, -1.119307117e-06f, -1.120250636e-06f, -1.121192056e-06f, -1.122131377e-06f, -1.123068596e-06f, -1.124003713e-06f, -1.124936726e-06f, -1.125867634e-06f, -1.126796435e-06f,
--1.127723129e-06f, -1.128647714e-06f, -1.129570190e-06f, -1.130490553e-06f, -1.131408805e-06f, -1.132324942e-06f, -1.133238964e-06f, -1.134150870e-06f, -1.135060658e-06f, -1.135968328e-06f,
--1.136873877e-06f, -1.137777306e-06f, -1.138678611e-06f, -1.139577793e-06f, -1.140474850e-06f, -1.141369781e-06f, -1.142262585e-06f, -1.143153260e-06f, -1.144041806e-06f, -1.144928220e-06f,
--1.145812503e-06f, -1.146694652e-06f, -1.147574666e-06f, -1.148452545e-06f, -1.149328287e-06f, -1.150201891e-06f, -1.151073356e-06f, -1.151942681e-06f, -1.152809864e-06f, -1.153674905e-06f,
--1.154537801e-06f, -1.155398553e-06f, -1.156257159e-06f, -1.157113617e-06f, -1.157967927e-06f, -1.158820088e-06f, -1.159670098e-06f, -1.160517956e-06f, -1.161363661e-06f, -1.162207213e-06f,
--1.163048609e-06f, -1.163887849e-06f, -1.164724932e-06f, -1.165559856e-06f, -1.166392621e-06f, -1.167223225e-06f, -1.168051668e-06f, -1.168877948e-06f, -1.169702064e-06f, -1.170524015e-06f,
--1.171343800e-06f, -1.172161418e-06f, -1.172976868e-06f, -1.173790149e-06f, -1.174601259e-06f, -1.175410198e-06f, -1.176216965e-06f, -1.177021559e-06f, -1.177823978e-06f, -1.178624221e-06f,
--1.179422288e-06f, -1.180218178e-06f, -1.181011889e-06f, -1.181803420e-06f, -1.182592771e-06f, -1.183379940e-06f, -1.184164927e-06f, -1.184947730e-06f, -1.185728348e-06f, -1.186506781e-06f,
--1.187283027e-06f, -1.188057086e-06f, -1.188828956e-06f, -1.189598636e-06f, -1.190366126e-06f, -1.191131425e-06f, -1.191894530e-06f, -1.192655443e-06f, -1.193414161e-06f, -1.194170683e-06f,
--1.194925010e-06f, -1.195677139e-06f, -1.196427070e-06f, -1.197174801e-06f, -1.197920333e-06f, -1.198663663e-06f, -1.199404792e-06f, -1.200143718e-06f, -1.200880440e-06f, -1.201614957e-06f,
--1.202347268e-06f, -1.203077373e-06f, -1.203805271e-06f, -1.204530960e-06f, -1.205254440e-06f, -1.205975710e-06f, -1.206694768e-06f, -1.207411615e-06f, -1.208126249e-06f, -1.208838669e-06f,
--1.209548875e-06f, -1.210256865e-06f, -1.210962639e-06f, -1.211666196e-06f, -1.212367535e-06f, -1.213066655e-06f, -1.213763555e-06f, -1.214458235e-06f, -1.215150693e-06f, -1.215840929e-06f,
--1.216528942e-06f, -1.217214732e-06f, -1.217898296e-06f, -1.218579635e-06f, -1.219258747e-06f, -1.219935632e-06f, -1.220610290e-06f, -1.221282718e-06f, -1.221952917e-06f, -1.222620885e-06f,
--1.223286622e-06f, -1.223950128e-06f, -1.224611400e-06f, -1.225270439e-06f, -1.225927244e-06f, -1.226581813e-06f, -1.227234147e-06f, -1.227884244e-06f, -1.228532103e-06f, -1.229177725e-06f,
--1.229821107e-06f, -1.230462250e-06f, -1.231101152e-06f, -1.231737814e-06f, -1.232372233e-06f, -1.233004410e-06f, -1.233634343e-06f, -1.234262033e-06f, -1.234887477e-06f, -1.235510676e-06f,
--1.236131629e-06f, -1.236750335e-06f, -1.237366793e-06f, -1.237981003e-06f, -1.238592964e-06f, -1.239202675e-06f, -1.239810136e-06f, -1.240415345e-06f, -1.241018303e-06f, -1.241619008e-06f,
--1.242217461e-06f, -1.242813659e-06f, -1.243407603e-06f, -1.243999292e-06f, -1.244588724e-06f, -1.245175901e-06f, -1.245760820e-06f, -1.246343482e-06f, -1.246923885e-06f, -1.247502030e-06f,
--1.248077914e-06f, -1.248651539e-06f, -1.249222902e-06f, -1.249792004e-06f, -1.250358844e-06f, -1.250923421e-06f, -1.251485734e-06f, -1.252045784e-06f, -1.252603569e-06f, -1.253159089e-06f,
--1.253712343e-06f, -1.254263331e-06f, -1.254812052e-06f, -1.255358505e-06f, -1.255902691e-06f, -1.256444607e-06f, -1.256984255e-06f, -1.257521632e-06f, -1.258056739e-06f, -1.258589576e-06f,
--1.259120141e-06f, -1.259648434e-06f, -1.260174454e-06f, -1.260698201e-06f, -1.261219675e-06f, -1.261738874e-06f, -1.262255799e-06f, -1.262770448e-06f, -1.263282822e-06f, -1.263792920e-06f,
--1.264300741e-06f, -1.264806284e-06f, -1.265309550e-06f, -1.265810537e-06f, -1.266309246e-06f, -1.266805675e-06f, -1.267299825e-06f, -1.267791695e-06f, -1.268281283e-06f, -1.268768591e-06f,
--1.269253617e-06f, -1.269736361e-06f, -1.270216822e-06f, -1.270695000e-06f, -1.271170895e-06f, -1.271644505e-06f, -1.272115832e-06f, -1.272584873e-06f, -1.273051629e-06f, -1.273516100e-06f,
--1.273978284e-06f, -1.274438182e-06f, -1.274895793e-06f, -1.275351116e-06f, -1.275804152e-06f, -1.276254899e-06f, -1.276703357e-06f, -1.277149527e-06f, -1.277593407e-06f, -1.278034997e-06f,
--1.278474298e-06f, -1.278911307e-06f, -1.279346025e-06f, -1.279778453e-06f, -1.280208588e-06f, -1.280636431e-06f, -1.281061982e-06f, -1.281485240e-06f, -1.281906204e-06f, -1.282324875e-06f,
--1.282741252e-06f, -1.283155335e-06f, -1.283567124e-06f, -1.283976617e-06f, -1.284383815e-06f, -1.284788718e-06f, -1.285191324e-06f, -1.285591635e-06f, -1.285989648e-06f, -1.286385365e-06f,
--1.286778785e-06f, -1.287169907e-06f, -1.287558732e-06f, -1.287945258e-06f, -1.288329486e-06f, -1.288711415e-06f, -1.289091045e-06f, -1.289468376e-06f, -1.289843408e-06f, -1.290216140e-06f,
--1.290586571e-06f, -1.290954703e-06f, -1.291320533e-06f, -1.291684063e-06f, -1.292045292e-06f, -1.292404220e-06f, -1.292760846e-06f, -1.293115170e-06f, -1.293467192e-06f, -1.293816911e-06f,
--1.294164329e-06f, -1.294509443e-06f, -1.294852255e-06f, -1.295192763e-06f, -1.295530968e-06f, -1.295866869e-06f, -1.296200466e-06f, -1.296531760e-06f, -1.296860749e-06f, -1.297187434e-06f,
--1.297511814e-06f, -1.297833890e-06f, -1.298153660e-06f, -1.298471125e-06f, -1.298786286e-06f, -1.299099140e-06f, -1.299409689e-06f, -1.299717932e-06f, -1.300023870e-06f, -1.300327501e-06f,
--1.300628826e-06f, -1.300927844e-06f, -1.301224556e-06f, -1.301518961e-06f, -1.301811060e-06f, -1.302100851e-06f, -1.302388336e-06f, -1.302673513e-06f, -1.302956383e-06f, -1.303236946e-06f,
--1.303515201e-06f, -1.303791149e-06f, -1.304064788e-06f, -1.304336120e-06f, -1.304605145e-06f, -1.304871861e-06f, -1.305136269e-06f, -1.305398369e-06f, -1.305658161e-06f, -1.305915644e-06f,
--1.306170819e-06f, -1.306423686e-06f, -1.306674244e-06f, -1.306922494e-06f, -1.307168435e-06f, -1.307412067e-06f, -1.307653391e-06f, -1.307892406e-06f, -1.308129112e-06f, -1.308363510e-06f,
--1.308595599e-06f, -1.308825379e-06f, -1.309052850e-06f, -1.309278012e-06f, -1.309500865e-06f, -1.309721410e-06f, -1.309939645e-06f, -1.310155572e-06f, -1.310369190e-06f, -1.310580498e-06f,
--1.310789499e-06f, -1.310996190e-06f, -1.311200572e-06f, -1.311402646e-06f, -1.311602411e-06f, -1.311799867e-06f, -1.311995014e-06f, -1.312187853e-06f, -1.312378383e-06f, -1.312566605e-06f,
--1.312752518e-06f, -1.312936123e-06f, -1.313117419e-06f, -1.313296407e-06f, -1.313473087e-06f, -1.313647458e-06f, -1.313819522e-06f, -1.313989277e-06f, -1.314156725e-06f, -1.314321865e-06f,
--1.314484697e-06f, -1.314645221e-06f, -1.314803438e-06f, -1.314959347e-06f, -1.315112949e-06f, -1.315264244e-06f, -1.315413231e-06f, -1.315559912e-06f, -1.315704286e-06f, -1.315846353e-06f,
--1.315986114e-06f, -1.316123568e-06f, -1.316258715e-06f, -1.316391557e-06f, -1.316522093e-06f, -1.316650322e-06f, -1.316776246e-06f, -1.316899865e-06f, -1.317021178e-06f, -1.317140186e-06f,
--1.317256888e-06f, -1.317371286e-06f, -1.317483380e-06f, -1.317593168e-06f, -1.317700653e-06f, -1.317805833e-06f, -1.317908710e-06f, -1.318009282e-06f, -1.318107552e-06f, -1.318203518e-06f,
--1.318297180e-06f, -1.318388540e-06f, -1.318477598e-06f, -1.318564352e-06f, -1.318648805e-06f, -1.318730956e-06f, -1.318810805e-06f, -1.318888352e-06f, -1.318963599e-06f, -1.319036544e-06f,
--1.319107188e-06f, -1.319175532e-06f, -1.319241576e-06f, -1.319305320e-06f, -1.319366764e-06f, -1.319425909e-06f, -1.319482755e-06f, -1.319537301e-06f, -1.319589550e-06f, -1.319639499e-06f,
--1.319687151e-06f, -1.319732506e-06f, -1.319775562e-06f, -1.319816322e-06f, -1.319854785e-06f, -1.319890951e-06f, -1.319924822e-06f, -1.319956396e-06f, -1.319985675e-06f, -1.320012659e-06f,
--1.320037348e-06f, -1.320059742e-06f, -1.320079842e-06f, -1.320097648e-06f, -1.320113161e-06f, -1.320126381e-06f, -1.320137308e-06f, -1.320145942e-06f, -1.320152285e-06f, -1.320156335e-06f,
--1.320158095e-06f, -1.320157563e-06f, -1.320154741e-06f, -1.320149629e-06f, -1.320142227e-06f, -1.320132535e-06f, -1.320120555e-06f, -1.320106286e-06f, -1.320089728e-06f, -1.320070883e-06f,
--1.320049750e-06f, -1.320026331e-06f, -1.320000625e-06f, -1.319972632e-06f, -1.319942354e-06f, -1.319909791e-06f, -1.319874943e-06f, -1.319837810e-06f, -1.319798394e-06f, -1.319756694e-06f,
--1.319712711e-06f, -1.319666445e-06f, -1.319617897e-06f, -1.319567067e-06f, -1.319513956e-06f, -1.319458565e-06f, -1.319400893e-06f, -1.319340941e-06f, -1.319278710e-06f, -1.319214199e-06f,
--1.319147411e-06f, -1.319078345e-06f, -1.319007001e-06f, -1.318933380e-06f, -1.318857483e-06f, -1.318779311e-06f, -1.318698862e-06f, -1.318616139e-06f, -1.318531142e-06f, -1.318443871e-06f,
--1.318354326e-06f, -1.318262509e-06f, -1.318168419e-06f, -1.318072058e-06f, -1.317973426e-06f, -1.317872523e-06f, -1.317769350e-06f, -1.317663907e-06f, -1.317556196e-06f, -1.317446216e-06f,
--1.317333969e-06f, -1.317219454e-06f, -1.317102673e-06f, -1.316983625e-06f, -1.316862312e-06f, -1.316738734e-06f, -1.316612892e-06f, -1.316484786e-06f, -1.316354417e-06f, -1.316221785e-06f,
--1.316086891e-06f, -1.315949736e-06f, -1.315810321e-06f, -1.315668645e-06f, -1.315524710e-06f, -1.315378516e-06f, -1.315230063e-06f, -1.315079353e-06f, -1.314926386e-06f, -1.314771163e-06f,
--1.314613684e-06f, -1.314453950e-06f, -1.314291962e-06f, -1.314127720e-06f, -1.313961224e-06f, -1.313792477e-06f, -1.313621477e-06f, -1.313448227e-06f, -1.313272726e-06f, -1.313094975e-06f,
--1.312914976e-06f, -1.312732728e-06f, -1.312548232e-06f, -1.312361489e-06f, -1.312172500e-06f, -1.311981266e-06f, -1.311787786e-06f, -1.311592062e-06f, -1.311394095e-06f, -1.311193885e-06f,
--1.310991433e-06f, -1.310786740e-06f, -1.310579806e-06f, -1.310370632e-06f, -1.310159219e-06f, -1.309945568e-06f, -1.309729679e-06f, -1.309511553e-06f, -1.309291191e-06f, -1.309068593e-06f,
--1.308843761e-06f, -1.308616695e-06f, -1.308387396e-06f, -1.308155864e-06f, -1.307922101e-06f, -1.307686107e-06f, -1.307447883e-06f, -1.307207430e-06f, -1.306964748e-06f, -1.306719839e-06f,
--1.306472702e-06f, -1.306223340e-06f, -1.305971752e-06f, -1.305717940e-06f, -1.305461904e-06f, -1.305203645e-06f, -1.304943165e-06f, -1.304680462e-06f, -1.304415540e-06f, -1.304148398e-06f,
--1.303879037e-06f, -1.303607458e-06f, -1.303333663e-06f, -1.303057651e-06f, -1.302779423e-06f, -1.302498981e-06f, -1.302216325e-06f, -1.301931457e-06f, -1.301644376e-06f, -1.301355085e-06f,
--1.301063583e-06f, -1.300769872e-06f, -1.300473952e-06f, -1.300175825e-06f, -1.299875491e-06f, -1.299572951e-06f, -1.299268206e-06f, -1.298961257e-06f, -1.298652105e-06f, -1.298340751e-06f,
--1.298027195e-06f, -1.297711439e-06f, -1.297393483e-06f, -1.297073329e-06f, -1.296750977e-06f, -1.296426428e-06f, -1.296099683e-06f, -1.295770744e-06f, -1.295439610e-06f, -1.295106283e-06f,
--1.294770765e-06f, -1.294433055e-06f, -1.294093155e-06f, -1.293751065e-06f, -1.293406788e-06f, -1.293060322e-06f, -1.292711671e-06f, -1.292360834e-06f, -1.292007813e-06f, -1.291652608e-06f,
--1.291295221e-06f, -1.290935652e-06f, -1.290573903e-06f, -1.290209974e-06f, -1.289843866e-06f, -1.289475581e-06f, -1.289105120e-06f, -1.288732483e-06f, -1.288357671e-06f, -1.287980686e-06f,
--1.287601529e-06f, -1.287220199e-06f, -1.286836700e-06f, -1.286451031e-06f, -1.286063193e-06f, -1.285673188e-06f, -1.285281017e-06f, -1.284886681e-06f, -1.284490180e-06f, -1.284091516e-06f,
--1.283690689e-06f, -1.283287702e-06f, -1.282882555e-06f, -1.282475248e-06f, -1.282065784e-06f, -1.281654163e-06f, -1.281240385e-06f, -1.280824454e-06f, -1.280406368e-06f, -1.279986130e-06f,
--1.279563741e-06f, -1.279139201e-06f, -1.278712512e-06f, -1.278283674e-06f, -1.277852690e-06f, -1.277419560e-06f, -1.276984284e-06f, -1.276546865e-06f, -1.276107303e-06f, -1.275665600e-06f,
--1.275221756e-06f, -1.274775773e-06f, -1.274327652e-06f, -1.273877394e-06f, -1.273425000e-06f, -1.272970471e-06f, -1.272513808e-06f, -1.272055013e-06f, -1.271594087e-06f, -1.271131030e-06f,
--1.270665845e-06f, -1.270198531e-06f, -1.269729091e-06f, -1.269257526e-06f, -1.268783836e-06f, -1.268308023e-06f, -1.267830087e-06f, -1.267350032e-06f, -1.266867856e-06f, -1.266383562e-06f,
--1.265897151e-06f, -1.265408623e-06f, -1.264917981e-06f, -1.264425225e-06f, -1.263930357e-06f, -1.263433377e-06f, -1.262934288e-06f, -1.262433089e-06f, -1.261929783e-06f, -1.261424371e-06f,
--1.260916853e-06f, -1.260407232e-06f, -1.259895508e-06f, -1.259381682e-06f, -1.258865756e-06f, -1.258347732e-06f, -1.257827609e-06f, -1.257305390e-06f, -1.256781076e-06f, -1.256254668e-06f,
--1.255726167e-06f, -1.255195575e-06f, -1.254662893e-06f, -1.254128121e-06f, -1.253591262e-06f, -1.253052317e-06f, -1.252511287e-06f, -1.251968173e-06f, -1.251422976e-06f, -1.250875699e-06f,
--1.250326341e-06f, -1.249774905e-06f, -1.249221391e-06f, -1.248665802e-06f, -1.248108138e-06f, -1.247548400e-06f, -1.246986590e-06f, -1.246422710e-06f, -1.245856760e-06f, -1.245288743e-06f,
--1.244718658e-06f, -1.244146508e-06f, -1.243572294e-06f, -1.242996017e-06f, -1.242417679e-06f, -1.241837280e-06f, -1.241254823e-06f, -1.240670309e-06f, -1.240083738e-06f, -1.239495113e-06f,
--1.238904435e-06f, -1.238311705e-06f, -1.237716924e-06f, -1.237120094e-06f, -1.236521216e-06f, -1.235920292e-06f, -1.235317323e-06f, -1.234712310e-06f, -1.234105255e-06f, -1.233496159e-06f,
--1.232885023e-06f, -1.232271850e-06f, -1.231656640e-06f, -1.231039394e-06f, -1.230420115e-06f, -1.229798803e-06f, -1.229175460e-06f, -1.228550088e-06f, -1.227922687e-06f, -1.227293260e-06f,
--1.226661807e-06f, -1.226028330e-06f, -1.225392831e-06f, -1.224755311e-06f, -1.224115771e-06f, -1.223474214e-06f, -1.222830639e-06f, -1.222185049e-06f, -1.221537446e-06f, -1.220887830e-06f,
--1.220236203e-06f, -1.219582567e-06f, -1.218926923e-06f, -1.218269273e-06f, -1.217609617e-06f, -1.216947958e-06f, -1.216284297e-06f, -1.215618636e-06f, -1.214950975e-06f, -1.214281317e-06f,
--1.213609663e-06f, -1.212936014e-06f, -1.212260372e-06f, -1.211582739e-06f, -1.210903115e-06f, -1.210221503e-06f, -1.209537904e-06f, -1.208852319e-06f, -1.208164751e-06f, -1.207475200e-06f,
--1.206783668e-06f, -1.206090156e-06f, -1.205394667e-06f, -1.204697201e-06f, -1.203997761e-06f, -1.203296347e-06f, -1.202592962e-06f, -1.201887606e-06f, -1.201180282e-06f, -1.200470991e-06f,
--1.199759734e-06f, -1.199046513e-06f, -1.198331330e-06f, -1.197614186e-06f, -1.196895083e-06f, -1.196174022e-06f, -1.195451005e-06f, -1.194726033e-06f, -1.193999109e-06f, -1.193270233e-06f,
--1.192539407e-06f, -1.191806634e-06f, -1.191071913e-06f, -1.190335248e-06f, -1.189596640e-06f, -1.188856089e-06f, -1.188113599e-06f, -1.187369170e-06f, -1.186622804e-06f, -1.185874502e-06f,
--1.185124267e-06f, -1.184372100e-06f, -1.183618003e-06f, -1.182861976e-06f, -1.182104023e-06f, -1.181344144e-06f, -1.180582341e-06f, -1.179818616e-06f, -1.179052970e-06f, -1.178285405e-06f,
--1.177515923e-06f, -1.176744525e-06f, -1.175971213e-06f, -1.175195989e-06f, -1.174418854e-06f, -1.173639811e-06f, -1.172858859e-06f, -1.172076003e-06f, -1.171291242e-06f, -1.170504579e-06f,
--1.169716015e-06f, -1.168925552e-06f, -1.168133192e-06f, -1.167338937e-06f, -1.166542787e-06f, -1.165744746e-06f, -1.164944814e-06f, -1.164142993e-06f, -1.163339285e-06f, -1.162533692e-06f,
--1.161726215e-06f, -1.160916856e-06f, -1.160105617e-06f, -1.159292499e-06f, -1.158477505e-06f, -1.157660636e-06f, -1.156841893e-06f, -1.156021279e-06f, -1.155198795e-06f, -1.154374442e-06f,
--1.153548224e-06f, -1.152720141e-06f, -1.151890194e-06f, -1.151058387e-06f, -1.150224721e-06f, -1.149389197e-06f, -1.148551817e-06f, -1.147712582e-06f, -1.146871496e-06f, -1.146028559e-06f,
--1.145183773e-06f, -1.144337140e-06f, -1.143488662e-06f, -1.142638341e-06f, -1.141786178e-06f, -1.140932175e-06f, -1.140076334e-06f, -1.139218656e-06f, -1.138359144e-06f, -1.137497800e-06f,
--1.136634624e-06f, -1.135769619e-06f, -1.134902787e-06f, -1.134034130e-06f, -1.133163649e-06f, -1.132291346e-06f, -1.131417223e-06f, -1.130541281e-06f, -1.129663524e-06f, -1.128783951e-06f,
--1.127902566e-06f, -1.127019370e-06f, -1.126134365e-06f, -1.125247553e-06f, -1.124358935e-06f, -1.123468514e-06f, -1.122576291e-06f, -1.121682268e-06f, -1.120786447e-06f, -1.119888830e-06f,
--1.118989419e-06f, -1.118088215e-06f, -1.117185221e-06f, -1.116280438e-06f, -1.115373868e-06f, -1.114465513e-06f, -1.113555375e-06f, -1.112643456e-06f, -1.111729757e-06f, -1.110814281e-06f,
--1.109897029e-06f, -1.108978004e-06f, -1.108057207e-06f, -1.107134640e-06f, -1.106210305e-06f, -1.105284204e-06f, -1.104356338e-06f, -1.103426711e-06f, -1.102495322e-06f, -1.101562176e-06f,
--1.100627273e-06f, -1.099690615e-06f, -1.098752204e-06f, -1.097812043e-06f, -1.096870133e-06f, -1.095926476e-06f, -1.094981073e-06f, -1.094033928e-06f, -1.093085041e-06f, -1.092134416e-06f,
--1.091182053e-06f, -1.090227954e-06f, -1.089272122e-06f, -1.088314559e-06f, -1.087355266e-06f, -1.086394246e-06f, -1.085431500e-06f, -1.084467030e-06f, -1.083500839e-06f, -1.082532928e-06f,
--1.081563299e-06f, -1.080591955e-06f, -1.079618896e-06f, -1.078644126e-06f, -1.077667646e-06f, -1.076689458e-06f, -1.075709565e-06f, -1.074727967e-06f, -1.073744667e-06f, -1.072759668e-06f,
--1.071772970e-06f, -1.070784577e-06f, -1.069794490e-06f, -1.068802710e-06f, -1.067809241e-06f, -1.066814084e-06f, -1.065817241e-06f, -1.064818714e-06f, -1.063818505e-06f, -1.062816617e-06f,
--1.061813050e-06f, -1.060807808e-06f, -1.059800891e-06f, -1.058792303e-06f, -1.057782046e-06f, -1.056770120e-06f, -1.055756529e-06f, -1.054741274e-06f, -1.053724358e-06f, -1.052705782e-06f,
--1.051685548e-06f, -1.050663659e-06f, -1.049640117e-06f, -1.048614923e-06f, -1.047588080e-06f, -1.046559590e-06f, -1.045529454e-06f, -1.044497675e-06f, -1.043464256e-06f, -1.042429197e-06f,
--1.041392501e-06f, -1.040354171e-06f, -1.039314207e-06f, -1.038272613e-06f, -1.037229391e-06f, -1.036184541e-06f, -1.035138068e-06f, -1.034089972e-06f, -1.033040255e-06f, -1.031988921e-06f,
--1.030935970e-06f, -1.029881406e-06f, -1.028825229e-06f, -1.027767443e-06f, -1.026708049e-06f, -1.025647050e-06f, -1.024584447e-06f, -1.023520242e-06f, -1.022454439e-06f, -1.021387038e-06f,
--1.020318042e-06f, -1.019247454e-06f, -1.018175274e-06f, -1.017101506e-06f, -1.016026152e-06f, -1.014949213e-06f, -1.013870692e-06f, -1.012790591e-06f, -1.011708911e-06f, -1.010625656e-06f,
--1.009540828e-06f, -1.008454428e-06f, -1.007366458e-06f, -1.006276921e-06f, -1.005185819e-06f, -1.004093155e-06f, -1.002998929e-06f, -1.001903145e-06f, -1.000805804e-06f, -9.997069093e-07f,
--9.986064623e-07f, -9.975044653e-07f, -9.964009206e-07f, -9.952958303e-07f, -9.941891966e-07f, -9.930810216e-07f, -9.919713076e-07f, -9.908600567e-07f, -9.897472712e-07f, -9.886329531e-07f,
--9.875171047e-07f, -9.863997282e-07f, -9.852808258e-07f, -9.841603996e-07f, -9.830384520e-07f, -9.819149850e-07f, -9.807900009e-07f, -9.796635019e-07f, -9.785354901e-07f, -9.774059679e-07f,
--9.762749374e-07f, -9.751424009e-07f, -9.740083605e-07f, -9.728728185e-07f, -9.717357771e-07f, -9.705972385e-07f, -9.694572049e-07f, -9.683156786e-07f, -9.671726619e-07f, -9.660281569e-07f,
--9.648821658e-07f, -9.637346910e-07f, -9.625857346e-07f, -9.614352990e-07f, -9.602833862e-07f, -9.591299987e-07f, -9.579751386e-07f, -9.568188082e-07f, -9.556610097e-07f, -9.545017454e-07f,
--9.533410176e-07f, -9.521788285e-07f, -9.510151804e-07f, -9.498500755e-07f, -9.486835162e-07f, -9.475155046e-07f, -9.463460430e-07f, -9.451751338e-07f, -9.440027792e-07f, -9.428289814e-07f,
--9.416537428e-07f, -9.404770656e-07f, -9.392989522e-07f, -9.381194047e-07f, -9.369384256e-07f, -9.357560170e-07f, -9.345721812e-07f, -9.333869207e-07f, -9.322002376e-07f, -9.310121342e-07f,
--9.298226130e-07f, -9.286316760e-07f, -9.274393258e-07f, -9.262455645e-07f, -9.250503945e-07f, -9.238538181e-07f, -9.226558376e-07f, -9.214564553e-07f, -9.202556735e-07f, -9.190534946e-07f,
--9.178499209e-07f, -9.166449547e-07f, -9.154385982e-07f, -9.142308540e-07f, -9.130217242e-07f, -9.118112112e-07f, -9.105993174e-07f, -9.093860450e-07f, -9.081713965e-07f, -9.069553741e-07f,
--9.057379802e-07f, -9.045192172e-07f, -9.032990873e-07f, -9.020775929e-07f, -9.008547365e-07f, -8.996305202e-07f, -8.984049466e-07f, -8.971780179e-07f, -8.959497365e-07f, -8.947201047e-07f,
--8.934891249e-07f, -8.922567996e-07f, -8.910231309e-07f, -8.897881214e-07f, -8.885517733e-07f, -8.873140891e-07f, -8.860750712e-07f, -8.848347218e-07f, -8.835930434e-07f, -8.823500383e-07f,
--8.811057089e-07f, -8.798600577e-07f, -8.786130870e-07f, -8.773647991e-07f, -8.761151965e-07f, -8.748642816e-07f, -8.736120567e-07f, -8.723585243e-07f, -8.711036867e-07f, -8.698475464e-07f,
--8.685901056e-07f, -8.673313670e-07f, -8.660713327e-07f, -8.648100053e-07f, -8.635473872e-07f, -8.622834807e-07f, -8.610182882e-07f, -8.597518123e-07f, -8.584840552e-07f, -8.572150195e-07f,
--8.559447075e-07f, -8.546731216e-07f, -8.534002643e-07f, -8.521261380e-07f, -8.508507451e-07f, -8.495740880e-07f, -8.482961692e-07f, -8.470169911e-07f, -8.457365562e-07f, -8.444548668e-07f,
--8.431719254e-07f, -8.418877345e-07f, -8.406022964e-07f, -8.393156136e-07f, -8.380276886e-07f, -8.367385239e-07f, -8.354481217e-07f, -8.341564847e-07f, -8.328636152e-07f, -8.315695157e-07f,
--8.302741887e-07f, -8.289776365e-07f, -8.276798617e-07f, -8.263808668e-07f, -8.250806541e-07f, -8.237792262e-07f, -8.224765855e-07f, -8.211727344e-07f, -8.198676755e-07f, -8.185614112e-07f,
--8.172539440e-07f, -8.159452763e-07f, -8.146354107e-07f, -8.133243495e-07f, -8.120120953e-07f, -8.106986506e-07f, -8.093840178e-07f, -8.080681994e-07f, -8.067511979e-07f, -8.054330158e-07f,
--8.041136555e-07f, -8.027931197e-07f, -8.014714106e-07f, -8.001485309e-07f, -7.988244830e-07f, -7.974992695e-07f, -7.961728928e-07f, -7.948453554e-07f, -7.935166598e-07f, -7.921868085e-07f,
--7.908558041e-07f, -7.895236490e-07f, -7.881903457e-07f, -7.868558968e-07f, -7.855203047e-07f, -7.841835720e-07f, -7.828457012e-07f, -7.815066947e-07f, -7.801665552e-07f, -7.788252850e-07f,
--7.774828869e-07f, -7.761393631e-07f, -7.747947164e-07f, -7.734489491e-07f, -7.721020639e-07f, -7.707540632e-07f, -7.694049497e-07f, -7.680547257e-07f, -7.667033939e-07f, -7.653509567e-07f,
--7.639974168e-07f, -7.626427766e-07f, -7.612870386e-07f, -7.599302055e-07f, -7.585722798e-07f, -7.572132640e-07f, -7.558531606e-07f, -7.544919721e-07f, -7.531297012e-07f, -7.517663504e-07f,
--7.504019223e-07f, -7.490364193e-07f, -7.476698440e-07f, -7.463021990e-07f, -7.449334868e-07f, -7.435637101e-07f, -7.421928712e-07f, -7.408209729e-07f, -7.394480177e-07f, -7.380740080e-07f,
--7.366989466e-07f, -7.353228359e-07f, -7.339456786e-07f, -7.325674771e-07f, -7.311882341e-07f, -7.298079521e-07f, -7.284266337e-07f, -7.270442815e-07f, -7.256608980e-07f, -7.242764859e-07f,
--7.228910476e-07f, -7.215045858e-07f, -7.201171031e-07f, -7.187286020e-07f, -7.173390851e-07f, -7.159485550e-07f, -7.145570143e-07f, -7.131644656e-07f, -7.117709114e-07f, -7.103763543e-07f,
--7.089807970e-07f, -7.075842420e-07f, -7.061866920e-07f, -7.047881494e-07f, -7.033886170e-07f, -7.019880972e-07f, -7.005865928e-07f, -6.991841063e-07f, -6.977806402e-07f, -6.963761973e-07f,
--6.949707801e-07f, -6.935643912e-07f, -6.921570332e-07f, -6.907487087e-07f, -6.893394203e-07f, -6.879291707e-07f, -6.865179624e-07f, -6.851057981e-07f, -6.836926804e-07f, -6.822786118e-07f,
--6.808635951e-07f, -6.794476328e-07f, -6.780307275e-07f, -6.766128818e-07f, -6.751940985e-07f, -6.737743800e-07f, -6.723537291e-07f, -6.709321483e-07f, -6.695096402e-07f, -6.680862076e-07f,
--6.666618530e-07f, -6.652365790e-07f, -6.638103883e-07f, -6.623832835e-07f, -6.609552673e-07f, -6.595263422e-07f, -6.580965109e-07f, -6.566657761e-07f, -6.552341403e-07f, -6.538016063e-07f,
--6.523681766e-07f, -6.509338540e-07f, -6.494986409e-07f, -6.480625401e-07f, -6.466255543e-07f, -6.451876860e-07f, -6.437489379e-07f, -6.423093127e-07f, -6.408688130e-07f, -6.394274415e-07f,
--6.379852007e-07f, -6.365420934e-07f, -6.350981222e-07f, -6.336532897e-07f, -6.322075987e-07f, -6.307610517e-07f, -6.293136515e-07f, -6.278654006e-07f, -6.264163018e-07f, -6.249663577e-07f,
--6.235155709e-07f, -6.220639441e-07f, -6.206114800e-07f, -6.191581813e-07f, -6.177040506e-07f, -6.162490905e-07f, -6.147933038e-07f, -6.133366930e-07f, -6.118792610e-07f, -6.104210103e-07f,
--6.089619436e-07f, -6.075020636e-07f, -6.060413729e-07f, -6.045798743e-07f, -6.031175703e-07f, -6.016544638e-07f, -6.001905573e-07f, -5.987258535e-07f, -5.972603551e-07f, -5.957940648e-07f,
--5.943269853e-07f, -5.928591192e-07f, -5.913904693e-07f, -5.899210382e-07f, -5.884508285e-07f, -5.869798431e-07f, -5.855080845e-07f, -5.840355554e-07f, -5.825622586e-07f, -5.810881967e-07f,
--5.796133724e-07f, -5.781377884e-07f, -5.766614474e-07f, -5.751843521e-07f, -5.737065052e-07f, -5.722279093e-07f, -5.707485672e-07f, -5.692684815e-07f, -5.677876550e-07f, -5.663060904e-07f,
--5.648237903e-07f, -5.633407574e-07f, -5.618569945e-07f, -5.603725042e-07f, -5.588872893e-07f, -5.574013524e-07f, -5.559146962e-07f, -5.544273235e-07f, -5.529392370e-07f, -5.514504393e-07f,
--5.499609332e-07f, -5.484707213e-07f, -5.469798065e-07f, -5.454881913e-07f, -5.439958784e-07f, -5.425028707e-07f, -5.410091708e-07f, -5.395147815e-07f, -5.380197053e-07f, -5.365239451e-07f,
--5.350275036e-07f, -5.335303834e-07f, -5.320325873e-07f, -5.305341180e-07f, -5.290349783e-07f, -5.275351707e-07f, -5.260346982e-07f, -5.245335632e-07f, -5.230317687e-07f, -5.215293173e-07f,
--5.200262117e-07f, -5.185224546e-07f, -5.170180489e-07f, -5.155129971e-07f, -5.140073020e-07f, -5.125009663e-07f, -5.109939929e-07f, -5.094863843e-07f, -5.079781433e-07f, -5.064692726e-07f,
--5.049597750e-07f, -5.034496532e-07f, -5.019389099e-07f, -5.004275479e-07f, -4.989155699e-07f, -4.974029785e-07f, -4.958897766e-07f, -4.943759668e-07f, -4.928615520e-07f, -4.913465348e-07f,
--4.898309179e-07f, -4.883147041e-07f, -4.867978962e-07f, -4.852804969e-07f, -4.837625088e-07f, -4.822439348e-07f, -4.807247775e-07f, -4.792050398e-07f, -4.776847243e-07f, -4.761638337e-07f,
--4.746423709e-07f, -4.731203386e-07f, -4.715977395e-07f, -4.700745763e-07f, -4.685508518e-07f, -4.670265687e-07f, -4.655017298e-07f, -4.639763378e-07f, -4.624503954e-07f, -4.609239054e-07f,
--4.593968706e-07f, -4.578692936e-07f, -4.563411773e-07f, -4.548125244e-07f, -4.532833375e-07f, -4.517536195e-07f, -4.502233731e-07f, -4.486926011e-07f, -4.471613062e-07f, -4.456294911e-07f,
--4.440971587e-07f, -4.425643115e-07f, -4.410309525e-07f, -4.394970843e-07f, -4.379627097e-07f, -4.364278315e-07f, -4.348924523e-07f, -4.333565751e-07f, -4.318202024e-07f, -4.302833370e-07f,
--4.287459818e-07f, -4.272081394e-07f, -4.256698126e-07f, -4.241310042e-07f, -4.225917169e-07f, -4.210519535e-07f, -4.195117167e-07f, -4.179710093e-07f, -4.164298340e-07f, -4.148881937e-07f,
--4.133460909e-07f, -4.118035286e-07f, -4.102605095e-07f, -4.087170362e-07f, -4.071731117e-07f, -4.056287385e-07f, -4.040839196e-07f, -4.025386576e-07f, -4.009929554e-07f, -3.994468156e-07f,
--3.979002410e-07f, -3.963532345e-07f, -3.948057986e-07f, -3.932579363e-07f, -3.917096503e-07f, -3.901609433e-07f, -3.886118181e-07f, -3.870622774e-07f, -3.855123241e-07f, -3.839619608e-07f,
--3.824111904e-07f, -3.808600156e-07f, -3.793084391e-07f, -3.777564638e-07f, -3.762040923e-07f, -3.746513276e-07f, -3.730981722e-07f, -3.715446290e-07f, -3.699907008e-07f, -3.684363902e-07f,
--3.668817002e-07f, -3.653266334e-07f, -3.637711926e-07f, -3.622153805e-07f, -3.606592000e-07f, -3.591026538e-07f, -3.575457446e-07f, -3.559884753e-07f, -3.544308486e-07f, -3.528728673e-07f,
--3.513145340e-07f, -3.497558517e-07f, -3.481968230e-07f, -3.466374508e-07f, -3.450777378e-07f, -3.435176867e-07f, -3.419573003e-07f, -3.403965815e-07f, -3.388355329e-07f, -3.372741573e-07f,
--3.357124575e-07f, -3.341504363e-07f, -3.325880965e-07f, -3.310254407e-07f, -3.294624718e-07f, -3.278991925e-07f, -3.263356057e-07f, -3.247717140e-07f, -3.232075203e-07f, -3.216430272e-07f,
--3.200782377e-07f, -3.185131544e-07f, -3.169477801e-07f, -3.153821176e-07f, -3.138161696e-07f, -3.122499390e-07f, -3.106834284e-07f, -3.091166407e-07f, -3.075495786e-07f, -3.059822450e-07f,
--3.044146424e-07f, -3.028467739e-07f, -3.012786420e-07f, -2.997102496e-07f, -2.981415994e-07f, -2.965726942e-07f, -2.950035368e-07f, -2.934341300e-07f, -2.918644764e-07f, -2.902945790e-07f,
--2.887244404e-07f, -2.871540634e-07f, -2.855834507e-07f, -2.840126053e-07f, -2.824415297e-07f, -2.808702269e-07f, -2.792986995e-07f, -2.777269503e-07f, -2.761549822e-07f, -2.745827978e-07f,
--2.730103999e-07f, -2.714377913e-07f, -2.698649748e-07f, -2.682919531e-07f, -2.667187290e-07f, -2.651453053e-07f, -2.635716847e-07f, -2.619978700e-07f, -2.604238640e-07f, -2.588496694e-07f,
--2.572752890e-07f, -2.557007256e-07f, -2.541259819e-07f, -2.525510607e-07f, -2.509759648e-07f, -2.494006970e-07f, -2.478252599e-07f, -2.462496564e-07f, -2.446738892e-07f, -2.430979611e-07f,
--2.415218748e-07f, -2.399456332e-07f, -2.383692390e-07f, -2.367926949e-07f, -2.352160038e-07f, -2.336391683e-07f, -2.320621913e-07f, -2.304850755e-07f, -2.289078236e-07f, -2.273304385e-07f,
--2.257529229e-07f, -2.241752796e-07f, -2.225975113e-07f, -2.210196208e-07f, -2.194416108e-07f, -2.178634841e-07f, -2.162852435e-07f, -2.147068917e-07f, -2.131284316e-07f, -2.115498657e-07f,
--2.099711970e-07f, -2.083924282e-07f, -2.068135620e-07f, -2.052346012e-07f, -2.036555486e-07f, -2.020764068e-07f, -2.004971788e-07f, -1.989178672e-07f, -1.973384747e-07f, -1.957590042e-07f,
--1.941794584e-07f, -1.925998401e-07f, -1.910201520e-07f, -1.894403968e-07f, -1.878605774e-07f, -1.862806965e-07f, -1.847007568e-07f, -1.831207611e-07f, -1.815407122e-07f, -1.799606127e-07f,
--1.783804655e-07f, -1.768002734e-07f, -1.752200390e-07f, -1.736397651e-07f, -1.720594545e-07f, -1.704791099e-07f, -1.688987340e-07f, -1.673183297e-07f, -1.657378997e-07f, -1.641574467e-07f,
--1.625769735e-07f, -1.609964828e-07f, -1.594159774e-07f, -1.578354600e-07f, -1.562549333e-07f, -1.546744002e-07f, -1.530938634e-07f, -1.515133255e-07f, -1.499327894e-07f, -1.483522579e-07f,
--1.467717335e-07f, -1.451912192e-07f, -1.436107176e-07f, -1.420302315e-07f, -1.404497636e-07f, -1.388693167e-07f, -1.372888935e-07f, -1.357084967e-07f, -1.341281292e-07f, -1.325477936e-07f,
--1.309674926e-07f, -1.293872291e-07f, -1.278070057e-07f, -1.262268253e-07f, -1.246466904e-07f, -1.230666040e-07f, -1.214865686e-07f, -1.199065871e-07f, -1.183266622e-07f, -1.167467966e-07f,
--1.151669930e-07f, -1.135872543e-07f, -1.120075830e-07f, -1.104279820e-07f, -1.088484540e-07f, -1.072690017e-07f, -1.056896279e-07f, -1.041103352e-07f, -1.025311265e-07f, -1.009520044e-07f,
--9.937297168e-08f, -9.779403105e-08f, -9.621518526e-08f, -9.463643702e-08f, -9.305778906e-08f, -9.147924412e-08f, -8.990080490e-08f, -8.832247415e-08f, -8.674425458e-08f, -8.516614892e-08f,
--8.358815989e-08f, -8.201029020e-08f, -8.043254260e-08f, -7.885491978e-08f, -7.727742449e-08f, -7.570005942e-08f, -7.412282731e-08f, -7.254573087e-08f, -7.096877283e-08f, -6.939195588e-08f,
--6.781528276e-08f, -6.623875618e-08f, -6.466237884e-08f, -6.308615348e-08f, -6.151008279e-08f, -5.993416950e-08f, -5.835841631e-08f, -5.678282593e-08f, -5.520740108e-08f, -5.363214446e-08f,
--5.205705879e-08f, -5.048214677e-08f, -4.890741111e-08f, -4.733285451e-08f, -4.575847969e-08f, -4.418428934e-08f, -4.261028618e-08f, -4.103647289e-08f, -3.946285220e-08f, -3.788942679e-08f,
--3.631619938e-08f, -3.474317265e-08f, -3.317034932e-08f, -3.159773207e-08f, -3.002532361e-08f, -2.845312663e-08f, -2.688114384e-08f, -2.530937792e-08f, -2.373783157e-08f, -2.216650748e-08f,
--2.059540836e-08f, -1.902453688e-08f, -1.745389574e-08f, -1.588348763e-08f, -1.431331524e-08f, -1.274338127e-08f, -1.117368839e-08f, -9.604239291e-09f, -8.035036665e-09f, -6.466083195e-09f,
--4.897381565e-09f, -3.328934458e-09f, -1.760744557e-09f, -1.928145440e-10f, 1.374852901e-09f, 2.942255098e-09f, 4.509389367e-09f, 6.076253032e-09f, 7.642843413e-09f, 9.209157837e-09f,
-1.077519363e-08f, 1.234094811e-08f, 1.390641861e-08f, 1.547160245e-08f, 1.703649697e-08f, 1.860109950e-08f, 2.016540735e-08f, 2.172941788e-08f, 2.329312840e-08f, 2.485653625e-08f,
-2.641963877e-08f, 2.798243329e-08f, 2.954491714e-08f, 3.110708767e-08f, 3.266894221e-08f, 3.423047811e-08f, 3.579169269e-08f, 3.735258331e-08f, 3.891314730e-08f, 4.047338201e-08f,
-4.203328478e-08f, 4.359285296e-08f, 4.515208390e-08f, 4.671097493e-08f, 4.826952342e-08f, 4.982772670e-08f, 5.138558214e-08f, 5.294308707e-08f, 5.450023886e-08f, 5.605703485e-08f,
-5.761347241e-08f, 5.916954888e-08f, 6.072526163e-08f, 6.228060801e-08f, 6.383558538e-08f, 6.539019110e-08f, 6.694442254e-08f, 6.849827705e-08f, 7.005175199e-08f, 7.160484474e-08f,
-7.315755265e-08f, 7.470987310e-08f, 7.626180345e-08f, 7.781334108e-08f, 7.936448334e-08f, 8.091522761e-08f, 8.246557127e-08f, 8.401551169e-08f, 8.556504624e-08f, 8.711417229e-08f,
-8.866288723e-08f, 9.021118843e-08f, 9.175907328e-08f, 9.330653914e-08f, 9.485358341e-08f, 9.640020347e-08f, 9.794639669e-08f, 9.949216047e-08f, 1.010374922e-07f, 1.025823892e-07f,
-1.041268490e-07f, 1.056708689e-07f, 1.072144463e-07f, 1.087575785e-07f, 1.103002631e-07f, 1.118424973e-07f, 1.133842786e-07f, 1.149256043e-07f, 1.164664720e-07f, 1.180068789e-07f,
-1.195468224e-07f, 1.210863001e-07f, 1.226253092e-07f, 1.241638472e-07f, 1.257019115e-07f, 1.272394994e-07f, 1.287766085e-07f, 1.303132361e-07f, 1.318493796e-07f, 1.333850364e-07f,
-1.349202040e-07f, 1.364548797e-07f, 1.379890611e-07f, 1.395227454e-07f, 1.410559301e-07f, 1.425886126e-07f, 1.441207904e-07f, 1.456524609e-07f, 1.471836215e-07f, 1.487142696e-07f,
-1.502444027e-07f, 1.517740181e-07f, 1.533031133e-07f, 1.548316858e-07f, 1.563597329e-07f, 1.578872522e-07f, 1.594142410e-07f, 1.609406967e-07f, 1.624666169e-07f, 1.639919989e-07f,
-1.655168402e-07f, 1.670411382e-07f, 1.685648904e-07f, 1.700880942e-07f, 1.716107471e-07f, 1.731328465e-07f, 1.746543899e-07f, 1.761753746e-07f, 1.776957982e-07f, 1.792156581e-07f,
-1.807349518e-07f, 1.822536767e-07f, 1.837718303e-07f, 1.852894100e-07f, 1.868064132e-07f, 1.883228376e-07f, 1.898386804e-07f, 1.913539393e-07f, 1.928686116e-07f, 1.943826947e-07f,
-1.958961863e-07f, 1.974090837e-07f, 1.989213845e-07f, 2.004330860e-07f, 2.019441858e-07f, 2.034546813e-07f, 2.049645701e-07f, 2.064738495e-07f, 2.079825171e-07f, 2.094905704e-07f,
-2.109980068e-07f, 2.125048238e-07f, 2.140110190e-07f, 2.155165897e-07f, 2.170215336e-07f, 2.185258480e-07f, 2.200295304e-07f, 2.215325785e-07f, 2.230349896e-07f, 2.245367612e-07f,
-2.260378909e-07f, 2.275383761e-07f, 2.290382144e-07f, 2.305374033e-07f, 2.320359402e-07f, 2.335338226e-07f, 2.350310482e-07f, 2.365276143e-07f, 2.380235185e-07f, 2.395187583e-07f,
-2.410133312e-07f, 2.425072348e-07f, 2.440004664e-07f, 2.454930238e-07f, 2.469849043e-07f, 2.484761056e-07f, 2.499666251e-07f, 2.514564603e-07f, 2.529456088e-07f, 2.544340681e-07f,
-2.559218357e-07f, 2.574089093e-07f, 2.588952862e-07f, 2.603809640e-07f, 2.618659403e-07f, 2.633502127e-07f, 2.648337785e-07f, 2.663166355e-07f, 2.677987811e-07f, 2.692802129e-07f,
-2.707609283e-07f, 2.722409251e-07f, 2.737202007e-07f, 2.751987526e-07f, 2.766765785e-07f, 2.781536758e-07f, 2.796300421e-07f, 2.811056751e-07f, 2.825805722e-07f, 2.840547310e-07f,
-2.855281491e-07f, 2.870008240e-07f, 2.884727533e-07f, 2.899439345e-07f, 2.914143653e-07f, 2.928840432e-07f, 2.943529658e-07f, 2.958211307e-07f, 2.972885354e-07f, 2.987551775e-07f,
-3.002210545e-07f, 3.016861642e-07f, 3.031505040e-07f, 3.046140715e-07f, 3.060768644e-07f, 3.075388802e-07f, 3.090001165e-07f, 3.104605708e-07f, 3.119202409e-07f, 3.133791243e-07f,
-3.148372185e-07f, 3.162945212e-07f, 3.177510300e-07f, 3.192067425e-07f, 3.206616563e-07f, 3.221157689e-07f, 3.235690781e-07f, 3.250215814e-07f, 3.264732764e-07f, 3.279241607e-07f,
-3.293742320e-07f, 3.308234879e-07f, 3.322719259e-07f, 3.337195438e-07f, 3.351663391e-07f, 3.366123094e-07f, 3.380574525e-07f, 3.395017658e-07f, 3.409452471e-07f, 3.423878939e-07f,
-3.438297040e-07f, 3.452706749e-07f, 3.467108042e-07f, 3.481500897e-07f, 3.495885290e-07f, 3.510261196e-07f, 3.524628593e-07f, 3.538987457e-07f, 3.553337764e-07f, 3.567679491e-07f,
-3.582012615e-07f, 3.596337111e-07f, 3.610652957e-07f, 3.624960129e-07f, 3.639258604e-07f, 3.653548358e-07f, 3.667829368e-07f, 3.682101611e-07f, 3.696365063e-07f, 3.710619701e-07f,
-3.724865501e-07f, 3.739102441e-07f, 3.753330497e-07f, 3.767549647e-07f, 3.781759865e-07f, 3.795961131e-07f, 3.810153420e-07f, 3.824336709e-07f, 3.838510975e-07f, 3.852676195e-07f,
-3.866832346e-07f, 3.880979404e-07f, 3.895117348e-07f, 3.909246153e-07f, 3.923365797e-07f, 3.937476256e-07f, 3.951577509e-07f, 3.965669531e-07f, 3.979752300e-07f, 3.993825793e-07f,
-4.007889986e-07f, 4.021944859e-07f, 4.035990386e-07f, 4.050026546e-07f, 4.064053315e-07f, 4.078070672e-07f, 4.092078592e-07f, 4.106077054e-07f, 4.120066034e-07f, 4.134045511e-07f,
-4.148015460e-07f, 4.161975860e-07f, 4.175926688e-07f, 4.189867921e-07f, 4.203799537e-07f, 4.217721513e-07f, 4.231633826e-07f, 4.245536455e-07f, 4.259429375e-07f, 4.273312566e-07f,
-4.287186004e-07f, 4.301049666e-07f, 4.314903532e-07f, 4.328747577e-07f, 4.342581780e-07f, 4.356406119e-07f, 4.370220570e-07f, 4.384025112e-07f, 4.397819722e-07f, 4.411604378e-07f,
-4.425379057e-07f, 4.439143738e-07f, 4.452898399e-07f, 4.466643016e-07f, 4.480377568e-07f, 4.494102032e-07f, 4.507816388e-07f, 4.521520611e-07f, 4.535214680e-07f, 4.548898574e-07f,
-4.562572270e-07f, 4.576235746e-07f, 4.589888980e-07f, 4.603531949e-07f, 4.617164633e-07f, 4.630787009e-07f, 4.644399055e-07f, 4.658000749e-07f, 4.671592069e-07f, 4.685172994e-07f,
-4.698743502e-07f, 4.712303570e-07f, 4.725853177e-07f, 4.739392301e-07f, 4.752920921e-07f, 4.766439015e-07f, 4.779946560e-07f, 4.793443536e-07f, 4.806929920e-07f, 4.820405691e-07f,
-4.833870827e-07f, 4.847325307e-07f, 4.860769110e-07f, 4.874202212e-07f, 4.887624594e-07f, 4.901036233e-07f, 4.914437108e-07f, 4.927827198e-07f, 4.941206481e-07f, 4.954574935e-07f,
-4.967932540e-07f, 4.981279273e-07f, 4.994615114e-07f, 5.007940041e-07f, 5.021254033e-07f, 5.034557068e-07f, 5.047849126e-07f, 5.061130185e-07f, 5.074400223e-07f, 5.087659220e-07f,
-5.100907154e-07f, 5.114144005e-07f, 5.127369751e-07f, 5.140584370e-07f, 5.153787843e-07f, 5.166980147e-07f, 5.180161262e-07f, 5.193331167e-07f, 5.206489841e-07f, 5.219637262e-07f,
-5.232773411e-07f, 5.245898265e-07f, 5.259011804e-07f, 5.272114008e-07f, 5.285204854e-07f, 5.298284323e-07f, 5.311352394e-07f, 5.324409045e-07f, 5.337454257e-07f, 5.350488008e-07f,
-5.363510277e-07f, 5.376521045e-07f, 5.389520289e-07f, 5.402507990e-07f, 5.415484128e-07f, 5.428448680e-07f, 5.441401627e-07f, 5.454342949e-07f, 5.467272624e-07f, 5.480190633e-07f,
-5.493096954e-07f, 5.505991567e-07f, 5.518874452e-07f, 5.531745589e-07f, 5.544604957e-07f, 5.557452535e-07f, 5.570288304e-07f, 5.583112242e-07f, 5.595924331e-07f, 5.608724549e-07f,
-5.621512876e-07f, 5.634289292e-07f, 5.647053776e-07f, 5.659806310e-07f, 5.672546872e-07f, 5.685275442e-07f, 5.697992000e-07f, 5.710696527e-07f, 5.723389002e-07f, 5.736069404e-07f,
-5.748737715e-07f, 5.761393914e-07f, 5.774037982e-07f, 5.786669897e-07f, 5.799289641e-07f, 5.811897193e-07f, 5.824492534e-07f, 5.837075644e-07f, 5.849646502e-07f, 5.862205090e-07f,
-5.874751387e-07f, 5.887285374e-07f, 5.899807031e-07f, 5.912316339e-07f, 5.924813277e-07f, 5.937297826e-07f, 5.949769966e-07f, 5.962229678e-07f, 5.974676943e-07f, 5.987111740e-07f,
-5.999534051e-07f, 6.011943855e-07f, 6.024341133e-07f, 6.036725867e-07f, 6.049098036e-07f, 6.061457621e-07f, 6.073804602e-07f, 6.086138962e-07f, 6.098460679e-07f, 6.110769735e-07f,
-6.123066110e-07f, 6.135349786e-07f, 6.147620743e-07f, 6.159878962e-07f, 6.172124424e-07f, 6.184357109e-07f, 6.196576999e-07f, 6.208784075e-07f, 6.220978316e-07f, 6.233159706e-07f,
-6.245328223e-07f, 6.257483850e-07f, 6.269626568e-07f, 6.281756357e-07f, 6.293873199e-07f, 6.305977074e-07f, 6.318067964e-07f, 6.330145851e-07f, 6.342210715e-07f, 6.354262537e-07f,
-6.366301299e-07f, 6.378326982e-07f, 6.390339568e-07f, 6.402339037e-07f, 6.414325371e-07f, 6.426298552e-07f, 6.438258561e-07f, 6.450205379e-07f, 6.462138987e-07f, 6.474059368e-07f,
-6.485966503e-07f, 6.497860373e-07f, 6.509740960e-07f, 6.521608246e-07f, 6.533462211e-07f, 6.545302839e-07f, 6.557130109e-07f, 6.568944005e-07f, 6.580744508e-07f, 6.592531599e-07f,
-6.604305261e-07f, 6.616065475e-07f, 6.627812222e-07f, 6.639545486e-07f, 6.651265248e-07f, 6.662971489e-07f, 6.674664192e-07f, 6.686343338e-07f, 6.698008910e-07f, 6.709660889e-07f,
-6.721299258e-07f, 6.732923999e-07f, 6.744535094e-07f, 6.756132524e-07f, 6.767716273e-07f, 6.779286322e-07f, 6.790842653e-07f, 6.802385249e-07f, 6.813914092e-07f, 6.825429164e-07f,
-6.836930447e-07f, 6.848417925e-07f, 6.859891579e-07f, 6.871351391e-07f, 6.882797344e-07f, 6.894229421e-07f, 6.905647604e-07f, 6.917051876e-07f, 6.928442218e-07f, 6.939818614e-07f,
-6.951181046e-07f, 6.962529497e-07f, 6.973863949e-07f, 6.985184386e-07f, 6.996490789e-07f, 7.007783142e-07f, 7.019061426e-07f, 7.030325626e-07f, 7.041575724e-07f, 7.052811702e-07f,
-7.064033544e-07f, 7.075241232e-07f, 7.086434749e-07f, 7.097614079e-07f, 7.108779204e-07f, 7.119930107e-07f, 7.131066771e-07f, 7.142189179e-07f, 7.153297315e-07f, 7.164391161e-07f,
-7.175470701e-07f, 7.186535917e-07f, 7.197586794e-07f, 7.208623313e-07f, 7.219645459e-07f, 7.230653215e-07f, 7.241646563e-07f, 7.252625488e-07f, 7.263589972e-07f, 7.274540000e-07f,
-7.285475554e-07f, 7.296396617e-07f, 7.307303174e-07f, 7.318195208e-07f, 7.329072702e-07f, 7.339935641e-07f, 7.350784006e-07f, 7.361617783e-07f, 7.372436954e-07f, 7.383241504e-07f,
-7.394031416e-07f, 7.404806673e-07f, 7.415567261e-07f, 7.426313161e-07f, 7.437044359e-07f, 7.447760838e-07f, 7.458462581e-07f, 7.469149573e-07f, 7.479821798e-07f, 7.490479239e-07f,
-7.501121881e-07f, 7.511749708e-07f, 7.522362703e-07f, 7.532960850e-07f, 7.543544135e-07f, 7.554112540e-07f, 7.564666051e-07f, 7.575204650e-07f, 7.585728323e-07f, 7.596237054e-07f,
-7.606730826e-07f, 7.617209624e-07f, 7.627673433e-07f, 7.638122237e-07f, 7.648556020e-07f, 7.658974767e-07f, 7.669378462e-07f, 7.679767089e-07f, 7.690140633e-07f, 7.700499079e-07f,
-7.710842411e-07f, 7.721170613e-07f, 7.731483671e-07f, 7.741781568e-07f, 7.752064290e-07f, 7.762331822e-07f, 7.772584147e-07f, 7.782821251e-07f, 7.793043119e-07f, 7.803249734e-07f,
-7.813441083e-07f, 7.823617150e-07f, 7.833777920e-07f, 7.843923378e-07f, 7.854053508e-07f, 7.864168297e-07f, 7.874267728e-07f, 7.884351787e-07f, 7.894420458e-07f, 7.904473728e-07f,
-7.914511581e-07f, 7.924534002e-07f, 7.934540977e-07f, 7.944532490e-07f, 7.954508528e-07f, 7.964469074e-07f, 7.974414115e-07f, 7.984343636e-07f, 7.994257623e-07f, 8.004156059e-07f,
-8.014038932e-07f, 8.023906227e-07f, 8.033757928e-07f, 8.043594022e-07f, 8.053414494e-07f, 8.063219330e-07f, 8.073008514e-07f, 8.082782034e-07f, 8.092539874e-07f, 8.102282021e-07f,
-8.112008459e-07f, 8.121719175e-07f, 8.131414154e-07f, 8.141093383e-07f, 8.150756847e-07f, 8.160404532e-07f, 8.170036424e-07f, 8.179652508e-07f, 8.189252771e-07f, 8.198837199e-07f,
-8.208405778e-07f, 8.217958494e-07f, 8.227495333e-07f, 8.237016280e-07f, 8.246521323e-07f, 8.256010447e-07f, 8.265483639e-07f, 8.274940884e-07f, 8.284382170e-07f, 8.293807481e-07f,
-8.303216806e-07f, 8.312610129e-07f, 8.321987438e-07f, 8.331348718e-07f, 8.340693957e-07f, 8.350023140e-07f, 8.359336255e-07f, 8.368633287e-07f, 8.377914224e-07f, 8.387179051e-07f,
-8.396427756e-07f, 8.405660325e-07f, 8.414876745e-07f, 8.424077002e-07f, 8.433261084e-07f, 8.442428977e-07f, 8.451580667e-07f, 8.460716142e-07f, 8.469835389e-07f, 8.478938394e-07f,
-8.488025145e-07f, 8.497095628e-07f, 8.506149830e-07f, 8.515187739e-07f, 8.524209341e-07f, 8.533214623e-07f, 8.542203573e-07f, 8.551176178e-07f, 8.560132424e-07f, 8.569072300e-07f,
-8.577995792e-07f, 8.586902887e-07f, 8.595793574e-07f, 8.604667838e-07f, 8.613525668e-07f, 8.622367051e-07f, 8.631191975e-07f, 8.640000426e-07f, 8.648792392e-07f, 8.657567861e-07f,
-8.666326821e-07f, 8.675069258e-07f, 8.683795161e-07f, 8.692504517e-07f, 8.701197314e-07f, 8.709873539e-07f, 8.718533181e-07f, 8.727176226e-07f, 8.735802663e-07f, 8.744412480e-07f,
-8.753005664e-07f, 8.761582203e-07f, 8.770142085e-07f, 8.778685299e-07f, 8.787211832e-07f, 8.795721672e-07f, 8.804214807e-07f, 8.812691225e-07f, 8.821150914e-07f, 8.829593863e-07f,
-8.838020059e-07f, 8.846429492e-07f, 8.854822148e-07f, 8.863198016e-07f, 8.871557085e-07f, 8.879899343e-07f, 8.888224778e-07f, 8.896533379e-07f, 8.904825133e-07f, 8.913100030e-07f,
-8.921358058e-07f, 8.929599205e-07f, 8.937823460e-07f, 8.946030812e-07f, 8.954221248e-07f, 8.962394759e-07f, 8.970551331e-07f, 8.978690955e-07f, 8.986813619e-07f, 8.994919311e-07f,
-9.003008020e-07f, 9.011079736e-07f, 9.019134446e-07f, 9.027172140e-07f, 9.035192808e-07f, 9.043196436e-07f, 9.051183016e-07f, 9.059152535e-07f, 9.067104983e-07f, 9.075040348e-07f,
-9.082958621e-07f, 9.090859789e-07f, 9.098743843e-07f, 9.106610771e-07f, 9.114460563e-07f, 9.122293207e-07f, 9.130108694e-07f, 9.137907012e-07f, 9.145688151e-07f, 9.153452100e-07f,
-9.161198849e-07f, 9.168928386e-07f, 9.176640703e-07f, 9.184335787e-07f, 9.192013629e-07f, 9.199674218e-07f, 9.207317544e-07f, 9.214943596e-07f, 9.222552365e-07f, 9.230143839e-07f,
-9.237718008e-07f, 9.245274863e-07f, 9.252814393e-07f, 9.260336588e-07f, 9.267841438e-07f, 9.275328932e-07f, 9.282799061e-07f, 9.290251815e-07f, 9.297687183e-07f, 9.305105155e-07f,
-9.312505722e-07f, 9.319888874e-07f, 9.327254601e-07f, 9.334602892e-07f, 9.341933739e-07f, 9.349247131e-07f, 9.356543059e-07f, 9.363821512e-07f, 9.371082482e-07f, 9.378325958e-07f,
-9.385551931e-07f, 9.392760392e-07f, 9.399951330e-07f, 9.407124736e-07f, 9.414280601e-07f, 9.421418915e-07f, 9.428539669e-07f, 9.435642853e-07f, 9.442728459e-07f, 9.449796476e-07f,
-9.456846895e-07f, 9.463879708e-07f, 9.470894904e-07f, 9.477892475e-07f, 9.484872412e-07f, 9.491834705e-07f, 9.498779345e-07f, 9.505706323e-07f, 9.512615630e-07f, 9.519507258e-07f,
-9.526381196e-07f, 9.533237437e-07f, 9.540075970e-07f, 9.546896788e-07f, 9.553699882e-07f, 9.560485242e-07f, 9.567252860e-07f, 9.574002728e-07f, 9.580734835e-07f, 9.587449174e-07f,
-9.594145737e-07f, 9.600824513e-07f, 9.607485496e-07f, 9.614128676e-07f, 9.620754044e-07f, 9.627361593e-07f, 9.633951313e-07f, 9.640523197e-07f, 9.647077235e-07f, 9.653613420e-07f,
-9.660131744e-07f, 9.666632197e-07f, 9.673114772e-07f, 9.679579460e-07f, 9.686026254e-07f, 9.692455144e-07f, 9.698866123e-07f, 9.705259184e-07f, 9.711634316e-07f, 9.717991514e-07f,
-9.724330768e-07f, 9.730652070e-07f, 9.736955414e-07f, 9.743240790e-07f, 9.749508191e-07f, 9.755757609e-07f, 9.761989037e-07f, 9.768202466e-07f, 9.774397888e-07f, 9.780575297e-07f,
-9.786734684e-07f, 9.792876042e-07f, 9.798999362e-07f, 9.805104638e-07f, 9.811191862e-07f, 9.817261027e-07f, 9.823312124e-07f, 9.829345147e-07f, 9.835360088e-07f, 9.841356939e-07f,
-9.847335694e-07f, 9.853296344e-07f, 9.859238884e-07f, 9.865163304e-07f, 9.871069599e-07f, 9.876957761e-07f, 9.882827783e-07f, 9.888679657e-07f, 9.894513377e-07f, 9.900328935e-07f,
-9.906126325e-07f, 9.911905539e-07f, 9.917666571e-07f, 9.923409414e-07f, 9.929134060e-07f, 9.934840503e-07f, 9.940528736e-07f, 9.946198752e-07f, 9.951850545e-07f, 9.957484107e-07f,
-9.963099433e-07f, 9.968696514e-07f, 9.974275346e-07f, 9.979835920e-07f, 9.985378231e-07f, 9.990902272e-07f, 9.996408037e-07f, 1.000189552e-06f, 1.000736471e-06f, 1.001281561e-06f,
-1.001824820e-06f, 1.002366249e-06f, 1.002905846e-06f, 1.003443611e-06f, 1.003979543e-06f, 1.004513642e-06f, 1.005045907e-06f, 1.005576337e-06f, 1.006104932e-06f, 1.006631691e-06f,
-1.007156614e-06f, 1.007679700e-06f, 1.008200948e-06f, 1.008720358e-06f, 1.009237929e-06f, 1.009753661e-06f, 1.010267553e-06f, 1.010779604e-06f, 1.011289815e-06f, 1.011798183e-06f,
-1.012304709e-06f, 1.012809393e-06f, 1.013312233e-06f, 1.013813229e-06f, 1.014312380e-06f, 1.014809687e-06f, 1.015305147e-06f, 1.015798762e-06f, 1.016290530e-06f, 1.016780450e-06f,
-1.017268523e-06f, 1.017754748e-06f, 1.018239123e-06f, 1.018721649e-06f, 1.019202325e-06f, 1.019681151e-06f, 1.020158126e-06f, 1.020633249e-06f, 1.021106521e-06f, 1.021577940e-06f,
-1.022047505e-06f, 1.022515218e-06f, 1.022981076e-06f, 1.023445080e-06f, 1.023907229e-06f, 1.024367522e-06f, 1.024825959e-06f, 1.025282540e-06f, 1.025737264e-06f, 1.026190131e-06f,
-1.026641140e-06f, 1.027090290e-06f, 1.027537581e-06f, 1.027983014e-06f, 1.028426586e-06f, 1.028868299e-06f, 1.029308150e-06f, 1.029746141e-06f, 1.030182270e-06f, 1.030616537e-06f,
-1.031048942e-06f, 1.031479484e-06f, 1.031908162e-06f, 1.032334977e-06f, 1.032759928e-06f, 1.033183014e-06f, 1.033604235e-06f, 1.034023591e-06f, 1.034441081e-06f, 1.034856704e-06f,
-1.035270461e-06f, 1.035682351e-06f, 1.036092374e-06f, 1.036500529e-06f, 1.036906816e-06f, 1.037311234e-06f, 1.037713783e-06f, 1.038114462e-06f, 1.038513272e-06f, 1.038910212e-06f,
-1.039305281e-06f, 1.039698480e-06f, 1.040089807e-06f, 1.040479262e-06f, 1.040866846e-06f, 1.041252557e-06f, 1.041636396e-06f, 1.042018361e-06f, 1.042398454e-06f, 1.042776672e-06f,
-1.043153017e-06f, 1.043527487e-06f, 1.043900082e-06f, 1.044270803e-06f, 1.044639648e-06f, 1.045006617e-06f, 1.045371710e-06f, 1.045734927e-06f, 1.046096268e-06f, 1.046455731e-06f,
-1.046813317e-06f, 1.047169026e-06f, 1.047522856e-06f, 1.047874809e-06f, 1.048224883e-06f, 1.048573078e-06f, 1.048919395e-06f, 1.049263832e-06f, 1.049606389e-06f, 1.049947067e-06f,
-1.050285864e-06f, 1.050622781e-06f, 1.050957818e-06f, 1.051290973e-06f, 1.051622247e-06f, 1.051951640e-06f, 1.052279151e-06f, 1.052604780e-06f, 1.052928527e-06f, 1.053250392e-06f,
-1.053570374e-06f, 1.053888473e-06f, 1.054204688e-06f, 1.054519021e-06f, 1.054831469e-06f, 1.055142034e-06f, 1.055450715e-06f, 1.055757512e-06f, 1.056062424e-06f, 1.056365451e-06f,
-1.056666594e-06f, 1.056965851e-06f, 1.057263223e-06f, 1.057558710e-06f, 1.057852311e-06f, 1.058144026e-06f, 1.058433855e-06f, 1.058721797e-06f, 1.059007853e-06f, 1.059292023e-06f,
-1.059574306e-06f, 1.059854702e-06f, 1.060133211e-06f, 1.060409832e-06f, 1.060684566e-06f, 1.060957412e-06f, 1.061228371e-06f, 1.061497442e-06f, 1.061764624e-06f, 1.062029919e-06f,
-1.062293325e-06f, 1.062554843e-06f, 1.062814472e-06f, 1.063072212e-06f, 1.063328064e-06f, 1.063582026e-06f, 1.063834099e-06f, 1.064084283e-06f, 1.064332578e-06f, 1.064578983e-06f,
-1.064823499e-06f, 1.065066125e-06f, 1.065306862e-06f, 1.065545708e-06f, 1.065782664e-06f, 1.066017731e-06f, 1.066250907e-06f, 1.066482193e-06f, 1.066711589e-06f, 1.066939094e-06f,
-1.067164709e-06f, 1.067388433e-06f, 1.067610267e-06f, 1.067830210e-06f, 1.068048263e-06f, 1.068264424e-06f, 1.068478695e-06f, 1.068691075e-06f, 1.068901564e-06f, 1.069110162e-06f,
-1.069316869e-06f, 1.069521685e-06f, 1.069724610e-06f, 1.069925643e-06f, 1.070124786e-06f, 1.070322037e-06f, 1.070517397e-06f, 1.070710866e-06f, 1.070902444e-06f, 1.071092131e-06f,
-1.071279926e-06f, 1.071465830e-06f, 1.071649842e-06f, 1.071831964e-06f, 1.072012194e-06f, 1.072190533e-06f, 1.072366981e-06f, 1.072541537e-06f, 1.072714203e-06f, 1.072884977e-06f,
-1.073053860e-06f, 1.073220851e-06f, 1.073385952e-06f, 1.073549162e-06f, 1.073710480e-06f, 1.073869908e-06f, 1.074027445e-06f, 1.074183091e-06f, 1.074336846e-06f, 1.074488710e-06f,
-1.074638683e-06f, 1.074786766e-06f, 1.074932958e-06f, 1.075077260e-06f, 1.075219671e-06f, 1.075360192e-06f, 1.075498822e-06f, 1.075635563e-06f, 1.075770413e-06f, 1.075903373e-06f,
-1.076034443e-06f, 1.076163623e-06f, 1.076290913e-06f, 1.076416314e-06f, 1.076539825e-06f, 1.076661447e-06f, 1.076781179e-06f, 1.076899022e-06f, 1.077014976e-06f, 1.077129041e-06f,
-1.077241216e-06f, 1.077351504e-06f, 1.077459902e-06f, 1.077566412e-06f, 1.077671034e-06f, 1.077773767e-06f, 1.077874612e-06f, 1.077973570e-06f, 1.078070639e-06f, 1.078165821e-06f,
-1.078259116e-06f, 1.078350523e-06f, 1.078440043e-06f, 1.078527676e-06f, 1.078613422e-06f, 1.078697281e-06f, 1.078779254e-06f, 1.078859341e-06f, 1.078937541e-06f, 1.079013856e-06f,
-1.079088285e-06f, 1.079160828e-06f, 1.079231486e-06f, 1.079300258e-06f, 1.079367146e-06f, 1.079432149e-06f, 1.079495268e-06f, 1.079556502e-06f, 1.079615851e-06f, 1.079673317e-06f,
-1.079728900e-06f, 1.079782599e-06f, 1.079834414e-06f, 1.079884347e-06f, 1.079932396e-06f, 1.079978564e-06f, 1.080022848e-06f, 1.080065251e-06f, 1.080105772e-06f, 1.080144412e-06f,
-1.080181170e-06f, 1.080216047e-06f, 1.080249043e-06f, 1.080280159e-06f, 1.080309394e-06f, 1.080336750e-06f, 1.080362225e-06f, 1.080385822e-06f, 1.080407539e-06f, 1.080427377e-06f,
-1.080445337e-06f, 1.080461418e-06f, 1.080475621e-06f, 1.080487946e-06f, 1.080498394e-06f, 1.080506965e-06f, 1.080513659e-06f, 1.080518477e-06f, 1.080521418e-06f, 1.080522484e-06f,
-1.080521673e-06f, 1.080518988e-06f, 1.080514428e-06f, 1.080507993e-06f, 1.080499683e-06f, 1.080489500e-06f, 1.080477443e-06f, 1.080463513e-06f, 1.080447710e-06f, 1.080430034e-06f,
-1.080410487e-06f, 1.080389067e-06f, 1.080365775e-06f, 1.080340613e-06f, 1.080313580e-06f, 1.080284676e-06f, 1.080253902e-06f, 1.080221259e-06f, 1.080186746e-06f, 1.080150364e-06f,
-1.080112114e-06f, 1.080071995e-06f, 1.080030009e-06f, 1.079986155e-06f, 1.079940434e-06f, 1.079892847e-06f, 1.079843393e-06f, 1.079792074e-06f, 1.079738889e-06f, 1.079683839e-06f,
-1.079626925e-06f, 1.079568147e-06f, 1.079507504e-06f, 1.079444999e-06f, 1.079380630e-06f, 1.079314399e-06f, 1.079246306e-06f, 1.079176351e-06f, 1.079104536e-06f, 1.079030859e-06f,
-1.078955322e-06f, 1.078877926e-06f, 1.078798670e-06f, 1.078717555e-06f, 1.078634581e-06f, 1.078549750e-06f, 1.078463061e-06f, 1.078374515e-06f, 1.078284112e-06f, 1.078191853e-06f,
-1.078097739e-06f, 1.078001769e-06f, 1.077903945e-06f, 1.077804266e-06f, 1.077702734e-06f, 1.077599349e-06f, 1.077494110e-06f, 1.077387020e-06f, 1.077278078e-06f, 1.077167284e-06f,
-1.077054640e-06f, 1.076940146e-06f, 1.076823802e-06f, 1.076705608e-06f, 1.076585566e-06f, 1.076463676e-06f, 1.076339939e-06f, 1.076214354e-06f, 1.076086923e-06f, 1.075957645e-06f,
-1.075826522e-06f, 1.075693555e-06f, 1.075558743e-06f, 1.075422087e-06f, 1.075283587e-06f, 1.075143245e-06f, 1.075001061e-06f, 1.074857035e-06f, 1.074711169e-06f, 1.074563461e-06f,
-1.074413914e-06f, 1.074262527e-06f, 1.074109302e-06f, 1.073954239e-06f, 1.073797337e-06f, 1.073638599e-06f, 1.073478025e-06f, 1.073315614e-06f, 1.073151368e-06f, 1.072985288e-06f,
-1.072817374e-06f, 1.072647626e-06f, 1.072476045e-06f, 1.072302632e-06f, 1.072127388e-06f, 1.071950312e-06f, 1.071771407e-06f, 1.071590671e-06f, 1.071408106e-06f, 1.071223713e-06f,
-1.071037492e-06f, 1.070849444e-06f, 1.070659569e-06f, 1.070467868e-06f, 1.070274342e-06f, 1.070078991e-06f, 1.069881816e-06f, 1.069682818e-06f, 1.069481997e-06f, 1.069279354e-06f,
-1.069074889e-06f, 1.068868604e-06f, 1.068660499e-06f, 1.068450575e-06f, 1.068238832e-06f, 1.068025270e-06f, 1.067809892e-06f, 1.067592697e-06f, 1.067373685e-06f, 1.067152859e-06f,
-1.066930218e-06f, 1.066705763e-06f, 1.066479495e-06f, 1.066251414e-06f, 1.066021522e-06f, 1.065789818e-06f, 1.065556305e-06f, 1.065320981e-06f, 1.065083849e-06f, 1.064844908e-06f,
-1.064604160e-06f, 1.064361605e-06f, 1.064117244e-06f, 1.063871078e-06f, 1.063623107e-06f, 1.063373333e-06f, 1.063121755e-06f, 1.062868375e-06f, 1.062613193e-06f, 1.062356211e-06f,
-1.062097428e-06f, 1.061836846e-06f, 1.061574466e-06f, 1.061310287e-06f, 1.061044312e-06f, 1.060776540e-06f, 1.060506973e-06f, 1.060235611e-06f, 1.059962456e-06f, 1.059687507e-06f,
-1.059410765e-06f, 1.059132232e-06f, 1.058851908e-06f, 1.058569794e-06f, 1.058285891e-06f, 1.058000200e-06f, 1.057712721e-06f, 1.057423455e-06f, 1.057132403e-06f, 1.056839566e-06f,
-1.056544944e-06f, 1.056248539e-06f, 1.055950351e-06f, 1.055650381e-06f, 1.055348630e-06f, 1.055045099e-06f, 1.054739788e-06f, 1.054432699e-06f, 1.054123832e-06f, 1.053813188e-06f,
-1.053500767e-06f, 1.053186572e-06f, 1.052870602e-06f, 1.052552859e-06f, 1.052233343e-06f, 1.051912055e-06f, 1.051588996e-06f, 1.051264167e-06f, 1.050937569e-06f, 1.050609202e-06f,
-1.050279068e-06f, 1.049947167e-06f, 1.049613500e-06f, 1.049278069e-06f, 1.048940873e-06f, 1.048601915e-06f, 1.048261194e-06f, 1.047918712e-06f, 1.047574469e-06f, 1.047228467e-06f,
-1.046880707e-06f, 1.046531188e-06f, 1.046179913e-06f, 1.045826882e-06f, 1.045472096e-06f, 1.045115556e-06f, 1.044757262e-06f, 1.044397217e-06f, 1.044035420e-06f, 1.043671872e-06f,
-1.043306575e-06f, 1.042939530e-06f, 1.042570737e-06f, 1.042200198e-06f, 1.041827912e-06f, 1.041453882e-06f, 1.041078109e-06f, 1.040700592e-06f, 1.040321333e-06f, 1.039940334e-06f,
-1.039557594e-06f, 1.039173116e-06f, 1.038786899e-06f, 1.038398945e-06f, 1.038009255e-06f, 1.037617830e-06f, 1.037224671e-06f, 1.036829779e-06f, 1.036433154e-06f, 1.036034798e-06f,
-1.035634712e-06f, 1.035232896e-06f, 1.034829353e-06f, 1.034424082e-06f, 1.034017084e-06f, 1.033608362e-06f, 1.033197915e-06f, 1.032785745e-06f, 1.032371853e-06f, 1.031956239e-06f,
-1.031538906e-06f, 1.031119853e-06f, 1.030699082e-06f, 1.030276594e-06f, 1.029852389e-06f, 1.029426470e-06f, 1.028998836e-06f, 1.028569490e-06f, 1.028138431e-06f, 1.027705662e-06f,
-1.027271182e-06f, 1.026834994e-06f, 1.026397098e-06f, 1.025957495e-06f, 1.025516187e-06f, 1.025073173e-06f, 1.024628457e-06f, 1.024182037e-06f, 1.023733917e-06f, 1.023284096e-06f,
-1.022832575e-06f, 1.022379356e-06f, 1.021924441e-06f, 1.021467829e-06f, 1.021009522e-06f, 1.020549521e-06f, 1.020087828e-06f, 1.019624442e-06f, 1.019159366e-06f, 1.018692601e-06f,
-1.018224147e-06f, 1.017754005e-06f, 1.017282178e-06f, 1.016808665e-06f, 1.016333469e-06f, 1.015856589e-06f, 1.015378028e-06f, 1.014897786e-06f, 1.014415864e-06f, 1.013932264e-06f,
-1.013446987e-06f, 1.012960033e-06f, 1.012471405e-06f, 1.011981103e-06f, 1.011489128e-06f, 1.010995481e-06f, 1.010500164e-06f, 1.010003177e-06f, 1.009504522e-06f, 1.009004200e-06f,
-1.008502213e-06f, 1.007998560e-06f, 1.007493245e-06f, 1.006986266e-06f, 1.006477627e-06f, 1.005967327e-06f, 1.005455369e-06f, 1.004941752e-06f, 1.004426480e-06f, 1.003909551e-06f,
-1.003390969e-06f, 1.002870734e-06f, 1.002348847e-06f, 1.001825309e-06f, 1.001300122e-06f, 1.000773286e-06f, 1.000244804e-06f, 9.997146754e-07f, 9.991829024e-07f, 9.986494860e-07f,
-9.981144274e-07f, 9.975777277e-07f, 9.970393882e-07f, 9.964994101e-07f, 9.959577947e-07f, 9.954145431e-07f, 9.948696566e-07f, 9.943231364e-07f, 9.937749837e-07f, 9.932251997e-07f,
-9.926737858e-07f, 9.921207430e-07f, 9.915660728e-07f, 9.910097762e-07f, 9.904518546e-07f, 9.898923093e-07f, 9.893311413e-07f, 9.887683521e-07f, 9.882039428e-07f, 9.876379147e-07f,
-9.870702691e-07f, 9.865010073e-07f, 9.859301305e-07f, 9.853576399e-07f, 9.847835368e-07f, 9.842078226e-07f, 9.836304985e-07f, 9.830515658e-07f, 9.824710256e-07f, 9.818888795e-07f,
-9.813051285e-07f, 9.807197741e-07f, 9.801328174e-07f, 9.795442599e-07f, 9.789541027e-07f, 9.783623473e-07f, 9.777689948e-07f, 9.771740466e-07f, 9.765775040e-07f, 9.759793683e-07f,
-9.753796409e-07f, 9.747783230e-07f, 9.741754159e-07f, 9.735709210e-07f, 9.729648396e-07f, 9.723571730e-07f, 9.717479226e-07f, 9.711370896e-07f, 9.705246755e-07f, 9.699106815e-07f,
-9.692951089e-07f, 9.686779592e-07f, 9.680592337e-07f, 9.674389336e-07f, 9.668170604e-07f, 9.661936154e-07f, 9.655685999e-07f, 9.649420154e-07f, 9.643138631e-07f, 9.636841444e-07f,
-9.630528608e-07f, 9.624200134e-07f, 9.617856038e-07f, 9.611496333e-07f, 9.605121033e-07f, 9.598730150e-07f, 9.592323700e-07f, 9.585901696e-07f, 9.579464151e-07f, 9.573011080e-07f,
-9.566542497e-07f, 9.560058415e-07f, 9.553558848e-07f, 9.547043810e-07f, 9.540513315e-07f, 9.533967378e-07f, 9.527406011e-07f, 9.520829230e-07f, 9.514237048e-07f, 9.507629480e-07f,
-9.501006539e-07f, 9.494368239e-07f, 9.487714595e-07f, 9.481045622e-07f, 9.474361332e-07f, 9.467661741e-07f, 9.460946862e-07f, 9.454216711e-07f, 9.447471300e-07f, 9.440710645e-07f,
-9.433934760e-07f, 9.427143660e-07f, 9.420337358e-07f, 9.413515869e-07f, 9.406679208e-07f, 9.399827389e-07f, 9.392960427e-07f, 9.386078335e-07f, 9.379181129e-07f, 9.372268824e-07f,
-9.365341433e-07f, 9.358398972e-07f, 9.351441455e-07f, 9.344468896e-07f, 9.337481311e-07f, 9.330478714e-07f, 9.323461120e-07f, 9.316428543e-07f, 9.309380999e-07f, 9.302318502e-07f,
-9.295241068e-07f, 9.288148710e-07f, 9.281041444e-07f, 9.273919284e-07f, 9.266782246e-07f, 9.259630345e-07f, 9.252463596e-07f, 9.245282012e-07f, 9.238085611e-07f, 9.230874406e-07f,
-9.223648412e-07f, 9.216407646e-07f, 9.209152121e-07f, 9.201881853e-07f, 9.194596857e-07f, 9.187297149e-07f, 9.179982743e-07f, 9.172653655e-07f, 9.165309900e-07f, 9.157951493e-07f,
-9.150578449e-07f, 9.143190785e-07f, 9.135788515e-07f, 9.128371654e-07f, 9.120940219e-07f, 9.113494223e-07f, 9.106033684e-07f, 9.098558616e-07f, 9.091069034e-07f, 9.083564955e-07f,
-9.076046393e-07f, 9.068513365e-07f, 9.060965886e-07f, 9.053403971e-07f, 9.045827636e-07f, 9.038236897e-07f, 9.030631769e-07f, 9.023012268e-07f, 9.015378411e-07f, 9.007730211e-07f,
-9.000067686e-07f, 8.992390850e-07f, 8.984699721e-07f, 8.976994313e-07f, 8.969274642e-07f, 8.961540725e-07f, 8.953792577e-07f, 8.946030214e-07f, 8.938253652e-07f, 8.930462906e-07f,
-8.922657994e-07f, 8.914838931e-07f, 8.907005732e-07f, 8.899158415e-07f, 8.891296994e-07f, 8.883421486e-07f, 8.875531908e-07f, 8.867628275e-07f, 8.859710603e-07f, 8.851778908e-07f,
-8.843833208e-07f, 8.835873517e-07f, 8.827899853e-07f, 8.819912231e-07f, 8.811910668e-07f, 8.803895180e-07f, 8.795865783e-07f, 8.787822494e-07f, 8.779765328e-07f, 8.771694304e-07f,
-8.763609436e-07f, 8.755510741e-07f, 8.747398235e-07f, 8.739271936e-07f, 8.731131860e-07f, 8.722978022e-07f, 8.714810441e-07f, 8.706629131e-07f, 8.698434110e-07f, 8.690225395e-07f,
-8.682003001e-07f, 8.673766946e-07f, 8.665517246e-07f, 8.657253918e-07f, 8.648976979e-07f, 8.640686445e-07f, 8.632382333e-07f, 8.624064660e-07f, 8.615733442e-07f, 8.607388697e-07f,
-8.599030441e-07f, 8.590658691e-07f, 8.582273463e-07f, 8.573874776e-07f, 8.565462645e-07f, 8.557037088e-07f, 8.548598122e-07f, 8.540145763e-07f, 8.531680028e-07f, 8.523200935e-07f,
-8.514708501e-07f, 8.506202742e-07f, 8.497683675e-07f, 8.489151319e-07f, 8.480605689e-07f, 8.472046803e-07f, 8.463474678e-07f, 8.454889331e-07f, 8.446290780e-07f, 8.437679042e-07f,
-8.429054133e-07f, 8.420416071e-07f, 8.411764874e-07f, 8.403100559e-07f, 8.394423142e-07f, 8.385732642e-07f, 8.377029075e-07f, 8.368312459e-07f, 8.359582812e-07f, 8.350840151e-07f,
-8.342084492e-07f, 8.333315855e-07f, 8.324534255e-07f, 8.315739711e-07f, 8.306932240e-07f, 8.298111860e-07f, 8.289278588e-07f, 8.280432441e-07f, 8.271573438e-07f, 8.262701596e-07f,
-8.253816932e-07f, 8.244919465e-07f, 8.236009211e-07f, 8.227086189e-07f, 8.218150416e-07f, 8.209201910e-07f, 8.200240688e-07f, 8.191266769e-07f, 8.182280170e-07f, 8.173280909e-07f,
-8.164269004e-07f, 8.155244472e-07f, 8.146207332e-07f, 8.137157601e-07f, 8.128095297e-07f, 8.119020438e-07f, 8.109933042e-07f, 8.100833128e-07f, 8.091720712e-07f, 8.082595813e-07f,
-8.073458449e-07f, 8.064308638e-07f, 8.055146397e-07f, 8.045971746e-07f, 8.036784702e-07f, 8.027585283e-07f, 8.018373507e-07f, 8.009149393e-07f, 7.999912958e-07f, 7.990664221e-07f,
-7.981403199e-07f, 7.972129912e-07f, 7.962844377e-07f, 7.953546613e-07f, 7.944236637e-07f, 7.934914469e-07f, 7.925580126e-07f, 7.916233626e-07f, 7.906874989e-07f, 7.897504232e-07f,
-7.888121373e-07f, 7.878726432e-07f, 7.869319426e-07f, 7.859900374e-07f, 7.850469295e-07f, 7.841026206e-07f, 7.831571126e-07f, 7.822104075e-07f, 7.812625069e-07f, 7.803134128e-07f,
-7.793631271e-07f, 7.784116515e-07f, 7.774589880e-07f, 7.765051384e-07f, 7.755501046e-07f, 7.745938884e-07f, 7.736364917e-07f, 7.726779163e-07f, 7.717181642e-07f, 7.707572371e-07f,
-7.697951371e-07f, 7.688318658e-07f, 7.678674253e-07f, 7.669018174e-07f, 7.659350440e-07f, 7.649671069e-07f, 7.639980080e-07f, 7.630277493e-07f, 7.620563326e-07f, 7.610837597e-07f,
-7.601100327e-07f, 7.591351533e-07f, 7.581591234e-07f, 7.571819450e-07f, 7.562036200e-07f, 7.552241502e-07f, 7.542435376e-07f, 7.532617840e-07f, 7.522788913e-07f, 7.512948615e-07f,
-7.503096965e-07f, 7.493233981e-07f, 7.483359683e-07f, 7.473474090e-07f, 7.463577220e-07f, 7.453669094e-07f, 7.443749730e-07f, 7.433819147e-07f, 7.423877365e-07f, 7.413924402e-07f,
-7.403960279e-07f, 7.393985014e-07f, 7.383998626e-07f, 7.374001135e-07f, 7.363992560e-07f, 7.353972920e-07f, 7.343942235e-07f, 7.333900524e-07f, 7.323847806e-07f, 7.313784101e-07f,
-7.303709428e-07f, 7.293623806e-07f, 7.283527255e-07f, 7.273419795e-07f, 7.263301444e-07f, 7.253172222e-07f, 7.243032148e-07f, 7.232881243e-07f, 7.222719526e-07f, 7.212547015e-07f,
-7.202363731e-07f, 7.192169693e-07f, 7.181964922e-07f, 7.171749435e-07f, 7.161523253e-07f, 7.151286396e-07f, 7.141038883e-07f, 7.130780734e-07f, 7.120511968e-07f, 7.110232605e-07f,
-7.099942665e-07f, 7.089642168e-07f, 7.079331133e-07f, 7.069009579e-07f, 7.058677528e-07f, 7.048334998e-07f, 7.037982009e-07f, 7.027618581e-07f, 7.017244734e-07f, 7.006860487e-07f,
-6.996465861e-07f, 6.986060875e-07f, 6.975645550e-07f, 6.965219904e-07f, 6.954783958e-07f, 6.944337732e-07f, 6.933881246e-07f, 6.923414520e-07f, 6.912937573e-07f, 6.902450426e-07f,
-6.891953098e-07f, 6.881445610e-07f, 6.870927982e-07f, 6.860400233e-07f, 6.849862384e-07f, 6.839314454e-07f, 6.828756465e-07f, 6.818188435e-07f, 6.807610385e-07f, 6.797022335e-07f,
-6.786424305e-07f, 6.775816315e-07f, 6.765198386e-07f, 6.754570537e-07f, 6.743932789e-07f, 6.733285162e-07f, 6.722627676e-07f, 6.711960352e-07f, 6.701283209e-07f, 6.690596268e-07f,
-6.679899549e-07f, 6.669193072e-07f, 6.658476858e-07f, 6.647750927e-07f, 6.637015299e-07f, 6.626269995e-07f, 6.615515034e-07f, 6.604750438e-07f, 6.593976227e-07f, 6.583192420e-07f,
-6.572399039e-07f, 6.561596103e-07f, 6.550783634e-07f, 6.539961652e-07f, 6.529130176e-07f, 6.518289228e-07f, 6.507438828e-07f, 6.496578997e-07f, 6.485709754e-07f, 6.474831121e-07f,
-6.463943118e-07f, 6.453045765e-07f, 6.442139084e-07f, 6.431223094e-07f, 6.420297817e-07f, 6.409363272e-07f, 6.398419480e-07f, 6.387466463e-07f, 6.376504240e-07f, 6.365532832e-07f,
-6.354552261e-07f, 6.343562546e-07f, 6.332563708e-07f, 6.321555768e-07f, 6.310538746e-07f, 6.299512664e-07f, 6.288477542e-07f, 6.277433401e-07f, 6.266380261e-07f, 6.255318143e-07f,
-6.244247069e-07f, 6.233167058e-07f, 6.222078132e-07f, 6.210980311e-07f, 6.199873617e-07f, 6.188758069e-07f, 6.177633690e-07f, 6.166500499e-07f, 6.155358518e-07f, 6.144207767e-07f,
-6.133048268e-07f, 6.121880041e-07f, 6.110703107e-07f, 6.099517487e-07f, 6.088323203e-07f, 6.077120274e-07f, 6.065908722e-07f, 6.054688568e-07f, 6.043459833e-07f, 6.032222538e-07f,
-6.020976704e-07f, 6.009722351e-07f, 5.998459502e-07f, 5.987188176e-07f, 5.975908396e-07f, 5.964620181e-07f, 5.953323554e-07f, 5.942018535e-07f, 5.930705145e-07f, 5.919383405e-07f,
-5.908053337e-07f, 5.896714962e-07f, 5.885368300e-07f, 5.874013374e-07f, 5.862650203e-07f, 5.851278810e-07f, 5.839899215e-07f, 5.828511439e-07f, 5.817115505e-07f, 5.805711432e-07f,
-5.794299243e-07f, 5.782878958e-07f, 5.771450599e-07f, 5.760014186e-07f, 5.748569742e-07f, 5.737117287e-07f, 5.725656844e-07f, 5.714188432e-07f, 5.702712073e-07f, 5.691227790e-07f,
-5.679735602e-07f, 5.668235531e-07f, 5.656727599e-07f, 5.645211828e-07f, 5.633688237e-07f, 5.622156849e-07f, 5.610617686e-07f, 5.599070768e-07f, 5.587516117e-07f, 5.575953754e-07f,
-5.564383701e-07f, 5.552805979e-07f, 5.541220610e-07f, 5.529627615e-07f, 5.518027015e-07f, 5.506418833e-07f, 5.494803089e-07f, 5.483179804e-07f, 5.471549002e-07f, 5.459910702e-07f,
-5.448264927e-07f, 5.436611698e-07f, 5.424951037e-07f, 5.413282964e-07f, 5.401607502e-07f, 5.389924673e-07f, 5.378234497e-07f, 5.366536997e-07f, 5.354832194e-07f, 5.343120109e-07f,
-5.331400764e-07f, 5.319674182e-07f, 5.307940382e-07f, 5.296199388e-07f, 5.284451220e-07f, 5.272695901e-07f, 5.260933452e-07f, 5.249163894e-07f, 5.237387250e-07f, 5.225603541e-07f,
-5.213812789e-07f, 5.202015015e-07f, 5.190210241e-07f, 5.178398489e-07f, 5.166579781e-07f, 5.154754138e-07f, 5.142921582e-07f, 5.131082136e-07f, 5.119235819e-07f, 5.107382655e-07f,
-5.095522666e-07f, 5.083655872e-07f, 5.071782296e-07f, 5.059901960e-07f, 5.048014885e-07f, 5.036121093e-07f, 5.024220606e-07f, 5.012313446e-07f, 5.000399635e-07f, 4.988479194e-07f,
-4.976552145e-07f, 4.964618511e-07f, 4.952678314e-07f, 4.940731574e-07f, 4.928778314e-07f, 4.916818556e-07f, 4.904852321e-07f, 4.892879632e-07f, 4.880900511e-07f, 4.868914980e-07f,
-4.856923059e-07f, 4.844924772e-07f, 4.832920141e-07f, 4.820909186e-07f, 4.808891931e-07f, 4.796868397e-07f, 4.784838607e-07f, 4.772802581e-07f, 4.760760343e-07f, 4.748711913e-07f,
-4.736657315e-07f, 4.724596570e-07f, 4.712529701e-07f, 4.700456728e-07f, 4.688377675e-07f, 4.676292563e-07f, 4.664201414e-07f, 4.652104251e-07f, 4.640001096e-07f, 4.627891969e-07f,
-4.615776895e-07f, 4.603655894e-07f, 4.591528989e-07f, 4.579396202e-07f, 4.567257554e-07f, 4.555113069e-07f, 4.542962768e-07f, 4.530806673e-07f, 4.518644807e-07f, 4.506477191e-07f,
-4.494303848e-07f, 4.482124800e-07f, 4.469940069e-07f, 4.457749677e-07f, 4.445553647e-07f, 4.433351999e-07f, 4.421144758e-07f, 4.408931944e-07f, 4.396713580e-07f, 4.384489689e-07f,
-4.372260292e-07f, 4.360025411e-07f, 4.347785070e-07f, 4.335539289e-07f, 4.323288092e-07f, 4.311031500e-07f, 4.298769536e-07f, 4.286502222e-07f, 4.274229580e-07f, 4.261951633e-07f,
-4.249668402e-07f, 4.237379910e-07f, 4.225086180e-07f, 4.212787233e-07f, 4.200483091e-07f, 4.188173778e-07f, 4.175859315e-07f, 4.163539725e-07f, 4.151215030e-07f, 4.138885252e-07f,
-4.126550413e-07f, 4.114210536e-07f, 4.101865644e-07f, 4.089515758e-07f, 4.077160900e-07f, 4.064801094e-07f, 4.052436361e-07f, 4.040066725e-07f, 4.027692206e-07f, 4.015312828e-07f,
-4.002928612e-07f, 3.990539582e-07f, 3.978145759e-07f, 3.965747167e-07f, 3.953343827e-07f, 3.940935761e-07f, 3.928522992e-07f, 3.916105543e-07f, 3.903683436e-07f, 3.891256693e-07f,
-3.878825337e-07f, 3.866389389e-07f, 3.853948873e-07f, 3.841503811e-07f, 3.829054225e-07f, 3.816600138e-07f, 3.804141572e-07f, 3.791678550e-07f, 3.779211093e-07f, 3.766739225e-07f,
-3.754262968e-07f, 3.741782344e-07f, 3.729297376e-07f, 3.716808086e-07f, 3.704314496e-07f, 3.691816630e-07f, 3.679314509e-07f, 3.666808156e-07f, 3.654297594e-07f, 3.641782844e-07f,
-3.629263930e-07f, 3.616740874e-07f, 3.604213699e-07f, 3.591682426e-07f, 3.579147078e-07f, 3.566607678e-07f, 3.554064249e-07f, 3.541516812e-07f, 3.528965391e-07f, 3.516410007e-07f,
-3.503850684e-07f, 3.491287444e-07f, 3.478720309e-07f, 3.466149302e-07f, 3.453574445e-07f, 3.440995761e-07f, 3.428413273e-07f, 3.415827003e-07f, 3.403236973e-07f, 3.390643206e-07f,
-3.378045724e-07f, 3.365444551e-07f, 3.352839708e-07f, 3.340231218e-07f, 3.327619105e-07f, 3.315003389e-07f, 3.302384094e-07f, 3.289761243e-07f, 3.277134857e-07f, 3.264504960e-07f,
-3.251871574e-07f, 3.239234721e-07f, 3.226594425e-07f, 3.213950707e-07f, 3.201303590e-07f, 3.188653098e-07f, 3.175999251e-07f, 3.163342074e-07f, 3.150681588e-07f, 3.138017817e-07f,
-3.125350782e-07f, 3.112680506e-07f, 3.100007013e-07f, 3.087330323e-07f, 3.074650461e-07f, 3.061967448e-07f, 3.049281308e-07f, 3.036592062e-07f, 3.023899734e-07f, 3.011204346e-07f,
-2.998505920e-07f, 2.985804479e-07f, 2.973100047e-07f, 2.960392644e-07f, 2.947682295e-07f, 2.934969021e-07f, 2.922252845e-07f, 2.909533790e-07f, 2.896811878e-07f, 2.884087133e-07f,
-2.871359576e-07f, 2.858629230e-07f, 2.845896118e-07f, 2.833160262e-07f, 2.820421686e-07f, 2.807680411e-07f, 2.794936460e-07f, 2.782189856e-07f, 2.769440621e-07f, 2.756688779e-07f,
-2.743934351e-07f, 2.731177361e-07f, 2.718417830e-07f, 2.705655783e-07f, 2.692891240e-07f, 2.680124225e-07f, 2.667354760e-07f, 2.654582869e-07f, 2.641808573e-07f, 2.629031895e-07f,
-2.616252858e-07f, 2.603471485e-07f, 2.590687797e-07f, 2.577901819e-07f, 2.565113572e-07f, 2.552323078e-07f, 2.539530362e-07f, 2.526735444e-07f, 2.513938348e-07f, 2.501139097e-07f,
-2.488337713e-07f, 2.475534218e-07f, 2.462728636e-07f, 2.449920989e-07f, 2.437111299e-07f, 2.424299589e-07f, 2.411485883e-07f, 2.398670201e-07f, 2.385852567e-07f, 2.373033005e-07f,
-2.360211535e-07f, 2.347388181e-07f, 2.334562966e-07f, 2.321735911e-07f, 2.308907041e-07f, 2.296076376e-07f, 2.283243941e-07f, 2.270409757e-07f, 2.257573847e-07f, 2.244736234e-07f,
-2.231896940e-07f, 2.219055989e-07f, 2.206213402e-07f, 2.193369201e-07f, 2.180523411e-07f, 2.167676053e-07f, 2.154827150e-07f, 2.141976725e-07f, 2.129124800e-07f, 2.116271397e-07f,
-2.103416540e-07f, 2.090560251e-07f, 2.077702552e-07f, 2.064843467e-07f, 2.051983017e-07f, 2.039121226e-07f, 2.026258115e-07f, 2.013393708e-07f, 2.000528027e-07f, 1.987661095e-07f,
-1.974792934e-07f, 1.961923567e-07f, 1.949053016e-07f, 1.936181304e-07f, 1.923308454e-07f, 1.910434488e-07f, 1.897559428e-07f, 1.884683298e-07f, 1.871806120e-07f, 1.858927916e-07f,
-1.846048709e-07f, 1.833168521e-07f, 1.820287376e-07f, 1.807405295e-07f, 1.794522301e-07f, 1.781638417e-07f, 1.768753665e-07f, 1.755868069e-07f, 1.742981649e-07f, 1.730094430e-07f,
-1.717206432e-07f, 1.704317680e-07f, 1.691428195e-07f, 1.678538001e-07f, 1.665647119e-07f, 1.652755572e-07f, 1.639863382e-07f, 1.626970573e-07f, 1.614077167e-07f, 1.601183185e-07f,
-1.588288652e-07f, 1.575393588e-07f, 1.562498017e-07f, 1.549601962e-07f, 1.536705444e-07f, 1.523808486e-07f, 1.510911111e-07f, 1.498013341e-07f, 1.485115199e-07f, 1.472216707e-07f,
-1.459317887e-07f, 1.446418763e-07f, 1.433519356e-07f, 1.420619690e-07f, 1.407719785e-07f, 1.394819666e-07f, 1.381919354e-07f, 1.369018873e-07f, 1.356118243e-07f, 1.343217488e-07f,
-1.330316631e-07f, 1.317415693e-07f, 1.304514697e-07f, 1.291613666e-07f, 1.278712622e-07f, 1.265811587e-07f, 1.252910585e-07f, 1.240009636e-07f, 1.227108764e-07f, 1.214207991e-07f,
-1.201307340e-07f, 1.188406832e-07f, 1.175506491e-07f, 1.162606339e-07f, 1.149706397e-07f, 1.136806689e-07f, 1.123907237e-07f, 1.111008063e-07f, 1.098109190e-07f, 1.085210640e-07f,
-1.072312435e-07f, 1.059414598e-07f, 1.046517150e-07f, 1.033620116e-07f, 1.020723516e-07f, 1.007827373e-07f, 9.949317090e-08f, 9.820365471e-08f, 9.691419094e-08f, 9.562478181e-08f,
-9.433542955e-08f, 9.304613639e-08f, 9.175690457e-08f, 9.046773632e-08f, 8.917863385e-08f, 8.788959942e-08f, 8.660063523e-08f, 8.531174353e-08f, 8.402292654e-08f, 8.273418648e-08f,
-8.144552559e-08f, 8.015694609e-08f, 7.886845020e-08f, 7.758004015e-08f, 7.629171817e-08f, 7.500348648e-08f, 7.371534730e-08f, 7.242730286e-08f, 7.113935538e-08f, 6.985150708e-08f,
-6.856376018e-08f, 6.727611690e-08f, 6.598857947e-08f, 6.470115010e-08f, 6.341383101e-08f, 6.212662443e-08f, 6.083953256e-08f, 5.955255763e-08f, 5.826570185e-08f, 5.697896744e-08f,
-5.569235662e-08f, 5.440587160e-08f, 5.311951459e-08f, 5.183328781e-08f, 5.054719347e-08f, 4.926123379e-08f, 4.797541097e-08f, 4.668972723e-08f, 4.540418478e-08f, 4.411878583e-08f,
-4.283353258e-08f, 4.154842726e-08f, 4.026347205e-08f, 3.897866918e-08f, 3.769402086e-08f, 3.640952927e-08f, 3.512519664e-08f, 3.384102517e-08f, 3.255701705e-08f, 3.127317450e-08f,
-2.998949972e-08f, 2.870599491e-08f, 2.742266227e-08f, 2.613950400e-08f, 2.485652231e-08f, 2.357371939e-08f, 2.229109744e-08f, 2.100865866e-08f, 1.972640524e-08f, 1.844433939e-08f,
-1.716246331e-08f, 1.588077917e-08f, 1.459928919e-08f, 1.331799555e-08f, 1.203690045e-08f, 1.075600607e-08f, 9.475314621e-09f, 8.194828283e-09f, 6.914549247e-09f, 5.634479704e-09f,
-4.354621843e-09f, 3.074977851e-09f, 1.795549916e-09f, 5.163402239e-10f, -7.626490387e-10f, -2.041415687e-09f, -3.319957536e-09f, -4.598272404e-09f, -5.876358106e-09f, -7.154212462e-09f,
--8.431833289e-09f, -9.709218408e-09f, -1.098636564e-08f, -1.226327280e-08f, -1.353993772e-08f, -1.481635822e-08f, -1.609253211e-08f, -1.736845724e-08f, -1.864413141e-08f, -1.991955246e-08f,
--2.119471821e-08f, -2.246962650e-08f, -2.374427514e-08f, -2.501866198e-08f, -2.629278483e-08f, -2.756664153e-08f, -2.884022991e-08f, -3.011354781e-08f, -3.138659306e-08f, -3.265936348e-08f,
--3.393185693e-08f, -3.520407122e-08f, -3.647600421e-08f, -3.774765372e-08f, -3.901901760e-08f, -4.029009369e-08f, -4.156087982e-08f, -4.283137384e-08f, -4.410157359e-08f, -4.537147691e-08f,
--4.664108165e-08f, -4.791038564e-08f, -4.917938675e-08f, -5.044808281e-08f, -5.171647167e-08f, -5.298455117e-08f, -5.425231918e-08f, -5.551977353e-08f, -5.678691209e-08f, -5.805373269e-08f,
--5.932023320e-08f, -6.058641147e-08f, -6.185226535e-08f, -6.311779270e-08f, -6.438299138e-08f, -6.564785924e-08f, -6.691239414e-08f, -6.817659394e-08f, -6.944045651e-08f, -7.070397970e-08f,
--7.196716137e-08f, -7.322999939e-08f, -7.449249163e-08f, -7.575463595e-08f, -7.701643021e-08f, -7.827787228e-08f, -7.953896003e-08f, -8.079969133e-08f, -8.206006406e-08f, -8.332007607e-08f,
--8.457972525e-08f, -8.583900946e-08f, -8.709792659e-08f, -8.835647450e-08f, -8.961465107e-08f, -9.087245418e-08f, -9.212988171e-08f, -9.338693154e-08f, -9.464360154e-08f, -9.589988961e-08f,
--9.715579361e-08f, -9.841131144e-08f, -9.966644097e-08f, -1.009211801e-07f, -1.021755267e-07f, -1.034294787e-07f, -1.046830339e-07f, -1.059361903e-07f, -1.071889457e-07f, -1.084412981e-07f,
--1.096932453e-07f, -1.109447851e-07f, -1.121959156e-07f, -1.134466346e-07f, -1.146969400e-07f, -1.159468298e-07f, -1.171963017e-07f, -1.184453537e-07f, -1.196939837e-07f, -1.209421896e-07f,
--1.221899694e-07f, -1.234373208e-07f, -1.246842419e-07f, -1.259307305e-07f, -1.271767845e-07f, -1.284224019e-07f, -1.296675805e-07f, -1.309123183e-07f, -1.321566132e-07f, -1.334004631e-07f,
--1.346438658e-07f, -1.358868194e-07f, -1.371293218e-07f, -1.383713708e-07f, -1.396129644e-07f, -1.408541004e-07f, -1.420947770e-07f, -1.433349918e-07f, -1.445747429e-07f, -1.458140282e-07f,
--1.470528457e-07f, -1.482911931e-07f, -1.495290686e-07f, -1.507664700e-07f, -1.520033952e-07f, -1.532398421e-07f, -1.544758088e-07f, -1.557112931e-07f, -1.569462930e-07f, -1.581808064e-07f,
--1.594148313e-07f, -1.606483655e-07f, -1.618814071e-07f, -1.631139539e-07f, -1.643460040e-07f, -1.655775552e-07f, -1.668086055e-07f, -1.680391529e-07f, -1.692691953e-07f, -1.704987306e-07f,
--1.717277568e-07f, -1.729562719e-07f, -1.741842738e-07f, -1.754117604e-07f, -1.766387297e-07f, -1.778651798e-07f, -1.790911084e-07f, -1.803165137e-07f, -1.815413935e-07f, -1.827657458e-07f,
--1.839895686e-07f, -1.852128598e-07f, -1.864356174e-07f, -1.876578394e-07f, -1.888795237e-07f, -1.901006684e-07f, -1.913212713e-07f, -1.925413305e-07f, -1.937608439e-07f, -1.949798095e-07f,
--1.961982252e-07f, -1.974160892e-07f, -1.986333992e-07f, -1.998501534e-07f, -2.010663497e-07f, -2.022819860e-07f, -2.034970604e-07f, -2.047115709e-07f, -2.059255153e-07f, -2.071388918e-07f,
--2.083516983e-07f, -2.095639328e-07f, -2.107755933e-07f, -2.119866778e-07f, -2.131971843e-07f, -2.144071107e-07f, -2.156164551e-07f, -2.168252155e-07f, -2.180333899e-07f, -2.192409762e-07f,
--2.204479725e-07f, -2.216543767e-07f, -2.228601870e-07f, -2.240654013e-07f, -2.252700175e-07f, -2.264740338e-07f, -2.276774480e-07f, -2.288802584e-07f, -2.300824627e-07f, -2.312840591e-07f,
--2.324850456e-07f, -2.336854202e-07f, -2.348851809e-07f, -2.360843258e-07f, -2.372828528e-07f, -2.384807600e-07f, -2.396780454e-07f, -2.408747070e-07f, -2.420707429e-07f, -2.432661511e-07f,
--2.444609296e-07f, -2.456550765e-07f, -2.468485898e-07f, -2.480414675e-07f, -2.492337076e-07f, -2.504253082e-07f, -2.516162674e-07f, -2.528065832e-07f, -2.539962536e-07f, -2.551852766e-07f,
--2.563736504e-07f, -2.575613729e-07f, -2.587484422e-07f, -2.599348564e-07f, -2.611206134e-07f, -2.623057115e-07f, -2.634901485e-07f, -2.646739227e-07f, -2.658570319e-07f, -2.670394744e-07f,
--2.682212480e-07f, -2.694023510e-07f, -2.705827814e-07f, -2.717625372e-07f, -2.729416165e-07f, -2.741200174e-07f, -2.752977379e-07f, -2.764747761e-07f, -2.776511301e-07f, -2.788267979e-07f,
--2.800017777e-07f, -2.811760675e-07f, -2.823496654e-07f, -2.835225694e-07f, -2.846947777e-07f, -2.858662883e-07f, -2.870370993e-07f, -2.882072089e-07f, -2.893766150e-07f, -2.905453158e-07f,
--2.917133093e-07f, -2.928805938e-07f, -2.940471671e-07f, -2.952130276e-07f, -2.963781732e-07f, -2.975426020e-07f, -2.987063121e-07f, -2.998693018e-07f, -3.010315689e-07f, -3.021931117e-07f,
--3.033539283e-07f, -3.045140168e-07f, -3.056733752e-07f, -3.068320017e-07f, -3.079898945e-07f, -3.091470515e-07f, -3.103034710e-07f, -3.114591510e-07f, -3.126140897e-07f, -3.137682852e-07f,
--3.149217357e-07f, -3.160744391e-07f, -3.172263937e-07f, -3.183775977e-07f, -3.195280490e-07f, -3.206777459e-07f, -3.218266865e-07f, -3.229748689e-07f, -3.241222912e-07f, -3.252689516e-07f,
--3.264148483e-07f, -3.275599794e-07f, -3.287043429e-07f, -3.298479371e-07f, -3.309907602e-07f, -3.321328101e-07f, -3.332740852e-07f, -3.344145835e-07f, -3.355543032e-07f, -3.366932425e-07f,
--3.378313995e-07f, -3.389687724e-07f, -3.401053592e-07f, -3.412411583e-07f, -3.423761677e-07f, -3.435103857e-07f, -3.446438103e-07f, -3.457764398e-07f, -3.469082723e-07f, -3.480393059e-07f,
--3.491695390e-07f, -3.502989695e-07f, -3.514275958e-07f, -3.525554160e-07f, -3.536824282e-07f, -3.548086307e-07f, -3.559340216e-07f, -3.570585992e-07f, -3.581823615e-07f, -3.593053068e-07f,
--3.604274333e-07f, -3.615487392e-07f, -3.626692226e-07f, -3.637888818e-07f, -3.649077150e-07f, -3.660257203e-07f, -3.671428960e-07f, -3.682592402e-07f, -3.693747512e-07f, -3.704894272e-07f,
--3.716032663e-07f, -3.727162668e-07f, -3.738284269e-07f, -3.749397448e-07f, -3.760502188e-07f, -3.771598469e-07f, -3.782686276e-07f, -3.793765589e-07f, -3.804836391e-07f, -3.815898664e-07f,
--3.826952391e-07f, -3.837997553e-07f, -3.849034133e-07f, -3.860062114e-07f, -3.871081477e-07f, -3.882092205e-07f, -3.893094281e-07f, -3.904087686e-07f, -3.915072404e-07f, -3.926048416e-07f,
--3.937015704e-07f, -3.947974253e-07f, -3.958924043e-07f, -3.969865057e-07f, -3.980797279e-07f, -3.991720689e-07f, -4.002635272e-07f, -4.013541009e-07f, -4.024437883e-07f, -4.035325877e-07f,
--4.046204973e-07f, -4.057075154e-07f, -4.067936403e-07f, -4.078788701e-07f, -4.089632033e-07f, -4.100466380e-07f, -4.111291726e-07f, -4.122108053e-07f, -4.132915343e-07f, -4.143713581e-07f,
--4.154502747e-07f, -4.165282826e-07f, -4.176053801e-07f, -4.186815653e-07f, -4.197568365e-07f, -4.208311922e-07f, -4.219046305e-07f, -4.229771498e-07f, -4.240487484e-07f, -4.251194244e-07f,
--4.261891764e-07f, -4.272580025e-07f, -4.283259010e-07f, -4.293928703e-07f, -4.304589087e-07f, -4.315240144e-07f, -4.325881858e-07f, -4.336514212e-07f, -4.347137190e-07f, -4.357750773e-07f,
--4.368354946e-07f, -4.378949692e-07f, -4.389534994e-07f, -4.400110834e-07f, -4.410677197e-07f, -4.421234066e-07f, -4.431781423e-07f, -4.442319253e-07f, -4.452847539e-07f, -4.463366263e-07f,
--4.473875410e-07f, -4.484374963e-07f, -4.494864904e-07f, -4.505345218e-07f, -4.515815889e-07f, -4.526276898e-07f, -4.536728231e-07f, -4.547169871e-07f, -4.557601800e-07f, -4.568024003e-07f,
--4.578436463e-07f, -4.588839164e-07f, -4.599232089e-07f, -4.609615222e-07f, -4.619988547e-07f, -4.630352048e-07f, -4.640705707e-07f, -4.651049509e-07f, -4.661383438e-07f, -4.671707476e-07f,
--4.682021609e-07f, -4.692325820e-07f, -4.702620092e-07f, -4.712904409e-07f, -4.723178756e-07f, -4.733443116e-07f, -4.743697473e-07f, -4.753941811e-07f, -4.764176114e-07f, -4.774400366e-07f,
--4.784614551e-07f, -4.794818652e-07f, -4.805012654e-07f, -4.815196542e-07f, -4.825370298e-07f, -4.835533907e-07f, -4.845687353e-07f, -4.855830620e-07f, -4.865963693e-07f, -4.876086555e-07f,
--4.886199191e-07f, -4.896301585e-07f, -4.906393721e-07f, -4.916475583e-07f, -4.926547156e-07f, -4.936608424e-07f, -4.946659370e-07f, -4.956699981e-07f, -4.966730239e-07f, -4.976750130e-07f,
--4.986759637e-07f, -4.996758745e-07f, -5.006747438e-07f, -5.016725701e-07f, -5.026693519e-07f, -5.036650876e-07f, -5.046597756e-07f, -5.056534143e-07f, -5.066460023e-07f, -5.076375381e-07f,
--5.086280199e-07f, -5.096174464e-07f, -5.106058160e-07f, -5.115931271e-07f, -5.125793783e-07f, -5.135645679e-07f, -5.145486945e-07f, -5.155317565e-07f, -5.165137525e-07f, -5.174946808e-07f,
--5.184745400e-07f, -5.194533285e-07f, -5.204310449e-07f, -5.214076876e-07f, -5.223832551e-07f, -5.233577459e-07f, -5.243311585e-07f, -5.253034914e-07f, -5.262747431e-07f, -5.272449121e-07f,
--5.282139968e-07f, -5.291819959e-07f, -5.301489078e-07f, -5.311147309e-07f, -5.320794639e-07f, -5.330431052e-07f, -5.340056534e-07f, -5.349671069e-07f, -5.359274643e-07f, -5.368867241e-07f,
--5.378448849e-07f, -5.388019451e-07f, -5.397579032e-07f, -5.407127579e-07f, -5.416665076e-07f, -5.426191509e-07f, -5.435706863e-07f, -5.445211124e-07f, -5.454704276e-07f, -5.464186306e-07f,
--5.473657199e-07f, -5.483116940e-07f, -5.492565515e-07f, -5.502002909e-07f, -5.511429108e-07f, -5.520844097e-07f, -5.530247862e-07f, -5.539640389e-07f, -5.549021663e-07f, -5.558391670e-07f,
--5.567750395e-07f, -5.577097825e-07f, -5.586433944e-07f, -5.595758739e-07f, -5.605072196e-07f, -5.614374300e-07f, -5.623665037e-07f, -5.632944393e-07f, -5.642212353e-07f, -5.651468904e-07f,
--5.660714032e-07f, -5.669947722e-07f, -5.679169960e-07f, -5.688380732e-07f, -5.697580025e-07f, -5.706767824e-07f, -5.715944116e-07f, -5.725108885e-07f, -5.734262120e-07f, -5.743403804e-07f,
--5.752533926e-07f, -5.761652470e-07f, -5.770759423e-07f, -5.779854771e-07f, -5.788938500e-07f, -5.798010597e-07f, -5.807071048e-07f, -5.816119839e-07f, -5.825156957e-07f, -5.834182387e-07f,
--5.843196116e-07f, -5.852198131e-07f, -5.861188417e-07f, -5.870166962e-07f, -5.879133752e-07f, -5.888088772e-07f, -5.897032010e-07f, -5.905963453e-07f, -5.914883086e-07f, -5.923790896e-07f,
--5.932686870e-07f, -5.941570994e-07f, -5.950443255e-07f, -5.959303640e-07f, -5.968152135e-07f, -5.976988728e-07f, -5.985813404e-07f, -5.994626150e-07f, -6.003426953e-07f, -6.012215801e-07f,
--6.020992679e-07f, -6.029757575e-07f, -6.038510475e-07f, -6.047251367e-07f, -6.055980237e-07f, -6.064697072e-07f, -6.073401859e-07f, -6.082094585e-07f, -6.090775237e-07f, -6.099443802e-07f,
--6.108100267e-07f, -6.116744620e-07f, -6.125376846e-07f, -6.133996934e-07f, -6.142604870e-07f, -6.151200642e-07f, -6.159784237e-07f, -6.168355642e-07f, -6.176914844e-07f, -6.185461830e-07f,
--6.193996588e-07f, -6.202519105e-07f, -6.211029369e-07f, -6.219527366e-07f, -6.228013084e-07f, -6.236486511e-07f, -6.244947633e-07f, -6.253396439e-07f, -6.261832915e-07f, -6.270257050e-07f,
--6.278668830e-07f, -6.287068244e-07f, -6.295455278e-07f, -6.303829921e-07f, -6.312192159e-07f, -6.320541982e-07f, -6.328879375e-07f, -6.337204328e-07f, -6.345516827e-07f, -6.353816860e-07f,
--6.362104415e-07f, -6.370379481e-07f, -6.378642044e-07f, -6.386892092e-07f, -6.395129614e-07f, -6.403354596e-07f, -6.411567028e-07f, -6.419766897e-07f, -6.427954191e-07f, -6.436128897e-07f,
--6.444291004e-07f, -6.452440500e-07f, -6.460577373e-07f, -6.468701611e-07f, -6.476813202e-07f, -6.484912134e-07f, -6.492998395e-07f, -6.501071973e-07f, -6.509132857e-07f, -6.517181035e-07f,
--6.525216495e-07f, -6.533239225e-07f, -6.541249213e-07f, -6.549246448e-07f, -6.557230919e-07f, -6.565202612e-07f, -6.573161518e-07f, -6.581107623e-07f, -6.589040918e-07f, -6.596961389e-07f,
--6.604869026e-07f, -6.612763817e-07f, -6.620645751e-07f, -6.628514815e-07f, -6.636370999e-07f, -6.644214292e-07f, -6.652044681e-07f, -6.659862156e-07f, -6.667666704e-07f, -6.675458316e-07f,
--6.683236979e-07f, -6.691002683e-07f, -6.698755415e-07f, -6.706495165e-07f, -6.714221922e-07f, -6.721935675e-07f, -6.729636411e-07f, -6.737324121e-07f, -6.744998793e-07f, -6.752660416e-07f,
--6.760308979e-07f, -6.767944471e-07f, -6.775566880e-07f, -6.783176197e-07f, -6.790772410e-07f, -6.798355508e-07f, -6.805925480e-07f, -6.813482316e-07f, -6.821026004e-07f, -6.828556534e-07f,
--6.836073894e-07f, -6.843578075e-07f, -6.851069065e-07f, -6.858546854e-07f, -6.866011431e-07f, -6.873462785e-07f, -6.880900906e-07f, -6.888325782e-07f, -6.895737405e-07f, -6.903135761e-07f,
--6.910520843e-07f, -6.917892638e-07f, -6.925251136e-07f, -6.932596327e-07f, -6.939928201e-07f, -6.947246746e-07f, -6.954551953e-07f, -6.961843811e-07f, -6.969122310e-07f, -6.976387439e-07f,
--6.983639189e-07f, -6.990877548e-07f, -6.998102507e-07f, -7.005314056e-07f, -7.012512183e-07f, -7.019696880e-07f, -7.026868136e-07f, -7.034025941e-07f, -7.041170284e-07f, -7.048301156e-07f,
--7.055418546e-07f, -7.062522445e-07f, -7.069612843e-07f, -7.076689729e-07f, -7.083753094e-07f, -7.090802927e-07f, -7.097839220e-07f, -7.104861961e-07f, -7.111871142e-07f, -7.118866752e-07f,
--7.125848781e-07f, -7.132817220e-07f, -7.139772059e-07f, -7.146713288e-07f, -7.153640898e-07f, -7.160554879e-07f, -7.167455221e-07f, -7.174341915e-07f, -7.181214951e-07f, -7.188074319e-07f,
--7.194920010e-07f, -7.201752015e-07f, -7.208570324e-07f, -7.215374927e-07f, -7.222165815e-07f, -7.228942979e-07f, -7.235706409e-07f, -7.242456096e-07f, -7.249192031e-07f, -7.255914204e-07f,
--7.262622606e-07f, -7.269317227e-07f, -7.275998059e-07f, -7.282665093e-07f, -7.289318318e-07f, -7.295957726e-07f, -7.302583308e-07f, -7.309195055e-07f, -7.315792958e-07f, -7.322377006e-07f,
--7.328947193e-07f, -7.335503508e-07f, -7.342045943e-07f, -7.348574488e-07f, -7.355089135e-07f, -7.361589874e-07f, -7.368076698e-07f, -7.374549596e-07f, -7.381008561e-07f, -7.387453583e-07f,
--7.393884654e-07f, -7.400301765e-07f, -7.406704907e-07f, -7.413094072e-07f, -7.419469250e-07f, -7.425830434e-07f, -7.432177614e-07f, -7.438510782e-07f, -7.444829930e-07f, -7.451135048e-07f,
--7.457426129e-07f, -7.463703164e-07f, -7.469966144e-07f, -7.476215061e-07f, -7.482449907e-07f, -7.488670673e-07f, -7.494877351e-07f, -7.501069932e-07f, -7.507248409e-07f, -7.513412772e-07f,
--7.519563015e-07f, -7.525699127e-07f, -7.531821102e-07f, -7.537928931e-07f, -7.544022606e-07f, -7.550102119e-07f, -7.556167462e-07f, -7.562218626e-07f, -7.568255603e-07f, -7.574278387e-07f,
--7.580286968e-07f, -7.586281338e-07f, -7.592261491e-07f, -7.598227417e-07f, -7.604179109e-07f, -7.610116558e-07f, -7.616039759e-07f, -7.621948701e-07f, -7.627843378e-07f, -7.633723782e-07f,
--7.639589905e-07f, -7.645441740e-07f, -7.651279278e-07f, -7.657102513e-07f, -7.662911435e-07f, -7.668706039e-07f, -7.674486316e-07f, -7.680252259e-07f, -7.686003860e-07f, -7.691741111e-07f,
--7.697464006e-07f, -7.703172537e-07f, -7.708866696e-07f, -7.714546476e-07f, -7.720211870e-07f, -7.725862870e-07f, -7.731499469e-07f, -7.737121660e-07f, -7.742729435e-07f, -7.748322788e-07f,
--7.753901711e-07f, -7.759466196e-07f, -7.765016237e-07f, -7.770551827e-07f, -7.776072958e-07f, -7.781579624e-07f, -7.787071817e-07f, -7.792549530e-07f, -7.798012757e-07f, -7.803461490e-07f,
--7.808895722e-07f, -7.814315447e-07f, -7.819720658e-07f, -7.825111347e-07f, -7.830487509e-07f, -7.835849135e-07f, -7.841196220e-07f, -7.846528756e-07f, -7.851846738e-07f, -7.857150157e-07f,
--7.862439008e-07f, -7.867713284e-07f, -7.872972978e-07f, -7.878218084e-07f, -7.883448595e-07f, -7.888664504e-07f, -7.893865805e-07f, -7.899052492e-07f, -7.904224558e-07f, -7.909381996e-07f,
--7.914524801e-07f, -7.919652965e-07f, -7.924766483e-07f, -7.929865348e-07f, -7.934949554e-07f, -7.940019095e-07f, -7.945073963e-07f, -7.950114154e-07f, -7.955139661e-07f, -7.960150477e-07f,
--7.965146597e-07f, -7.970128015e-07f, -7.975094724e-07f, -7.980046718e-07f, -7.984983991e-07f, -7.989906538e-07f, -7.994814352e-07f, -7.999707427e-07f, -8.004585757e-07f, -8.009449337e-07f,
--8.014298161e-07f, -8.019132223e-07f, -8.023951516e-07f, -8.028756035e-07f, -8.033545775e-07f, -8.038320730e-07f, -8.043080893e-07f, -8.047826260e-07f, -8.052556824e-07f, -8.057272580e-07f,
--8.061973522e-07f, -8.066659645e-07f, -8.071330943e-07f, -8.075987411e-07f, -8.080629043e-07f, -8.085255834e-07f, -8.089867778e-07f, -8.094464870e-07f, -8.099047104e-07f, -8.103614475e-07f,
--8.108166978e-07f, -8.112704607e-07f, -8.117227357e-07f, -8.121735223e-07f, -8.126228200e-07f, -8.130706282e-07f, -8.135169464e-07f, -8.139617741e-07f, -8.144051108e-07f, -8.148469560e-07f,
--8.152873092e-07f, -8.157261699e-07f, -8.161635375e-07f, -8.165994116e-07f, -8.170337916e-07f, -8.174666772e-07f, -8.178980677e-07f, -8.183279627e-07f, -8.187563617e-07f, -8.191832643e-07f,
--8.196086699e-07f, -8.200325781e-07f, -8.204549884e-07f, -8.208759003e-07f, -8.212953134e-07f, -8.217132271e-07f, -8.221296411e-07f, -8.225445548e-07f, -8.229579679e-07f, -8.233698797e-07f,
--8.237802900e-07f, -8.241891982e-07f, -8.245966040e-07f, -8.250025067e-07f, -8.254069061e-07f, -8.258098016e-07f, -8.262111929e-07f, -8.266110795e-07f, -8.270094609e-07f, -8.274063367e-07f,
--8.278017066e-07f, -8.281955701e-07f, -8.285879267e-07f, -8.289787760e-07f, -8.293681177e-07f, -8.297559513e-07f, -8.301422764e-07f, -8.305270926e-07f, -8.309103995e-07f, -8.312921966e-07f,
--8.316724837e-07f, -8.320512602e-07f, -8.324285259e-07f, -8.328042803e-07f, -8.331785229e-07f, -8.335512535e-07f, -8.339224717e-07f, -8.342921770e-07f, -8.346603691e-07f, -8.350270477e-07f,
--8.353922122e-07f, -8.357558625e-07f, -8.361179980e-07f, -8.364786185e-07f, -8.368377236e-07f, -8.371953129e-07f, -8.375513860e-07f, -8.379059427e-07f, -8.382589825e-07f, -8.386105051e-07f,
--8.389605102e-07f, -8.393089974e-07f, -8.396559664e-07f, -8.400014168e-07f, -8.403453484e-07f, -8.406877607e-07f, -8.410286535e-07f, -8.413680264e-07f, -8.417058791e-07f, -8.420422112e-07f,
--8.423770226e-07f, -8.427103127e-07f, -8.430420814e-07f, -8.433723283e-07f, -8.437010532e-07f, -8.440282556e-07f, -8.443539353e-07f, -8.446780921e-07f, -8.450007255e-07f, -8.453218354e-07f,
--8.456414213e-07f, -8.459594831e-07f, -8.462760205e-07f, -8.465910331e-07f, -8.469045207e-07f, -8.472164830e-07f, -8.475269197e-07f, -8.478358306e-07f, -8.481432154e-07f, -8.484490738e-07f,
--8.487534055e-07f, -8.490562103e-07f, -8.493574880e-07f, -8.496572383e-07f, -8.499554608e-07f, -8.502521555e-07f, -8.505473219e-07f, -8.508409600e-07f, -8.511330694e-07f, -8.514236498e-07f,
--8.517127012e-07f, -8.520002231e-07f, -8.522862155e-07f, -8.525706780e-07f, -8.528536105e-07f, -8.531350126e-07f, -8.534148843e-07f, -8.536932252e-07f, -8.539700352e-07f, -8.542453140e-07f,
--8.545190614e-07f, -8.547912773e-07f, -8.550619614e-07f, -8.553311135e-07f, -8.555987335e-07f, -8.558648210e-07f, -8.561293760e-07f, -8.563923982e-07f, -8.566538875e-07f, -8.569138436e-07f,
--8.571722664e-07f, -8.574291557e-07f, -8.576845114e-07f, -8.579383331e-07f, -8.581906209e-07f, -8.584413744e-07f, -8.586905936e-07f, -8.589382782e-07f, -8.591844282e-07f, -8.594290433e-07f,
--8.596721233e-07f, -8.599136683e-07f, -8.601536779e-07f, -8.603921520e-07f, -8.606290906e-07f, -8.608644934e-07f, -8.610983603e-07f, -8.613306912e-07f, -8.615614859e-07f, -8.617907443e-07f,
--8.620184663e-07f, -8.622446518e-07f, -8.624693005e-07f, -8.626924125e-07f, -8.629139876e-07f, -8.631340256e-07f, -8.633525265e-07f, -8.635694902e-07f, -8.637849165e-07f, -8.639988053e-07f,
--8.642111565e-07f, -8.644219701e-07f, -8.646312459e-07f, -8.648389839e-07f, -8.650451839e-07f, -8.652498459e-07f, -8.654529697e-07f, -8.656545553e-07f, -8.658546027e-07f, -8.660531116e-07f,
--8.662500821e-07f, -8.664455142e-07f, -8.666394076e-07f, -8.668317623e-07f, -8.670225784e-07f, -8.672118556e-07f, -8.673995941e-07f, -8.675857936e-07f, -8.677704542e-07f, -8.679535757e-07f,
--8.681351582e-07f, -8.683152017e-07f, -8.684937059e-07f, -8.686706710e-07f, -8.688460969e-07f, -8.690199835e-07f, -8.691923309e-07f, -8.693631389e-07f, -8.695324076e-07f, -8.697001369e-07f,
--8.698663268e-07f, -8.700309773e-07f, -8.701940884e-07f, -8.703556600e-07f, -8.705156922e-07f, -8.706741850e-07f, -8.708311383e-07f, -8.709865521e-07f, -8.711404264e-07f, -8.712927613e-07f,
--8.714435567e-07f, -8.715928127e-07f, -8.717405292e-07f, -8.718867063e-07f, -8.720313440e-07f, -8.721744423e-07f, -8.723160012e-07f, -8.724560208e-07f, -8.725945010e-07f, -8.727314420e-07f,
--8.728668437e-07f, -8.730007061e-07f, -8.731330294e-07f, -8.732638135e-07f, -8.733930585e-07f, -8.735207645e-07f, -8.736469315e-07f, -8.737715594e-07f, -8.738946485e-07f, -8.740161987e-07f,
--8.741362101e-07f, -8.742546828e-07f, -8.743716168e-07f, -8.744870123e-07f, -8.746008691e-07f, -8.747131876e-07f, -8.748239676e-07f, -8.749332093e-07f, -8.750409128e-07f, -8.751470781e-07f,
--8.752517054e-07f, -8.753547947e-07f, -8.754563461e-07f, -8.755563597e-07f, -8.756548357e-07f, -8.757517740e-07f, -8.758471748e-07f, -8.759410383e-07f, -8.760333644e-07f, -8.761241534e-07f,
--8.762134053e-07f, -8.763011203e-07f, -8.763872984e-07f, -8.764719398e-07f, -8.765550447e-07f, -8.766366130e-07f, -8.767166451e-07f, -8.767951409e-07f, -8.768721006e-07f, -8.769475244e-07f,
--8.770214124e-07f, -8.770937648e-07f, -8.771645816e-07f, -8.772338631e-07f, -8.773016093e-07f, -8.773678205e-07f, -8.774324968e-07f, -8.774956383e-07f, -8.775572452e-07f, -8.776173176e-07f,
--8.776758558e-07f, -8.777328599e-07f, -8.777883301e-07f, -8.778422665e-07f, -8.778946693e-07f, -8.779455387e-07f, -8.779948749e-07f, -8.780426780e-07f, -8.780889483e-07f, -8.781336859e-07f,
--8.781768911e-07f, -8.782185639e-07f, -8.782587047e-07f, -8.782973136e-07f, -8.783343908e-07f, -8.783699365e-07f, -8.784039509e-07f, -8.784364343e-07f, -8.784673868e-07f, -8.784968087e-07f,
--8.785247001e-07f, -8.785510614e-07f, -8.785758927e-07f, -8.785991942e-07f, -8.786209662e-07f, -8.786412089e-07f, -8.786599226e-07f, -8.786771074e-07f, -8.786927637e-07f, -8.787068916e-07f,
--8.787194914e-07f, -8.787305633e-07f, -8.787401076e-07f, -8.787481246e-07f, -8.787546145e-07f, -8.787595776e-07f, -8.787630140e-07f, -8.787649242e-07f, -8.787653082e-07f, -8.787641665e-07f,
--8.787614993e-07f, -8.787573068e-07f, -8.787515894e-07f, -8.787443472e-07f, -8.787355807e-07f, -8.787252900e-07f, -8.787134755e-07f, -8.787001374e-07f, -8.786852760e-07f, -8.786688917e-07f,
--8.786509847e-07f, -8.786315553e-07f, -8.786106039e-07f, -8.785881306e-07f, -8.785641359e-07f, -8.785386201e-07f, -8.785115834e-07f, -8.784830261e-07f, -8.784529487e-07f, -8.784213513e-07f,
--8.783882344e-07f, -8.783535982e-07f, -8.783174431e-07f, -8.782797694e-07f, -8.782405775e-07f, -8.781998676e-07f, -8.781576401e-07f, -8.781138954e-07f, -8.780686337e-07f, -8.780218555e-07f,
--8.779735611e-07f, -8.779237509e-07f, -8.778724251e-07f, -8.778195841e-07f, -8.777652284e-07f, -8.777093582e-07f, -8.776519740e-07f, -8.775930760e-07f, -8.775326648e-07f, -8.774707405e-07f,
--8.774073036e-07f, -8.773423546e-07f, -8.772758936e-07f, -8.772079213e-07f, -8.771384378e-07f, -8.770674437e-07f, -8.769949392e-07f, -8.769209249e-07f, -8.768454010e-07f, -8.767683680e-07f,
--8.766898263e-07f, -8.766097763e-07f, -8.765282184e-07f, -8.764451529e-07f, -8.763605804e-07f, -8.762745011e-07f, -8.761869157e-07f, -8.760978243e-07f, -8.760072275e-07f, -8.759151257e-07f,
--8.758215193e-07f, -8.757264088e-07f, -8.756297945e-07f, -8.755316769e-07f, -8.754320565e-07f, -8.753309336e-07f, -8.752283087e-07f, -8.751241823e-07f, -8.750185548e-07f, -8.749114267e-07f,
--8.748027983e-07f, -8.746926702e-07f, -8.745810428e-07f, -8.744679165e-07f, -8.743532919e-07f, -8.742371694e-07f, -8.741195494e-07f, -8.740004324e-07f, -8.738798190e-07f, -8.737577095e-07f,
--8.736341044e-07f, -8.735090042e-07f, -8.733824094e-07f, -8.732543205e-07f, -8.731247380e-07f, -8.729936623e-07f, -8.728610940e-07f, -8.727270335e-07f, -8.725914813e-07f, -8.724544380e-07f,
--8.723159040e-07f, -8.721758798e-07f, -8.720343659e-07f, -8.718913629e-07f, -8.717468713e-07f, -8.716008915e-07f, -8.714534241e-07f, -8.713044696e-07f, -8.711540285e-07f, -8.710021013e-07f,
--8.708486887e-07f, -8.706937910e-07f, -8.705374088e-07f, -8.703795428e-07f, -8.702201933e-07f, -8.700593609e-07f, -8.698970462e-07f, -8.697332498e-07f, -8.695679721e-07f, -8.694012137e-07f,
--8.692329752e-07f, -8.690632571e-07f, -8.688920599e-07f, -8.687193843e-07f, -8.685452308e-07f, -8.683695999e-07f, -8.681924922e-07f, -8.680139083e-07f, -8.678338488e-07f, -8.676523142e-07f,
--8.674693051e-07f, -8.672848220e-07f, -8.670988657e-07f, -8.669114365e-07f, -8.667225352e-07f, -8.665321623e-07f, -8.663403184e-07f, -8.661470041e-07f, -8.659522200e-07f, -8.657559667e-07f,
--8.655582448e-07f, -8.653590548e-07f, -8.651583975e-07f, -8.649562733e-07f, -8.647526830e-07f, -8.645476270e-07f, -8.643411061e-07f, -8.641331209e-07f, -8.639236719e-07f, -8.637127598e-07f,
--8.635003853e-07f, -8.632865489e-07f, -8.630712512e-07f, -8.628544930e-07f, -8.626362748e-07f, -8.624165972e-07f, -8.621954610e-07f, -8.619728668e-07f, -8.617488151e-07f, -8.615233067e-07f,
--8.612963421e-07f, -8.610679222e-07f, -8.608380474e-07f, -8.606067184e-07f, -8.603739360e-07f, -8.601397007e-07f, -8.599040133e-07f, -8.596668744e-07f, -8.594282846e-07f, -8.591882447e-07f,
--8.589467552e-07f, -8.587038170e-07f, -8.584594306e-07f, -8.582135968e-07f, -8.579663162e-07f, -8.577175895e-07f, -8.574674173e-07f, -8.572158005e-07f, -8.569627397e-07f, -8.567082355e-07f,
--8.564522886e-07f, -8.561948999e-07f, -8.559360699e-07f, -8.556757994e-07f, -8.554140890e-07f, -8.551509396e-07f, -8.548863517e-07f, -8.546203261e-07f, -8.543528636e-07f, -8.540839648e-07f,
--8.538136305e-07f, -8.535418613e-07f, -8.532686581e-07f, -8.529940215e-07f, -8.527179523e-07f, -8.524404511e-07f, -8.521615188e-07f, -8.518811561e-07f, -8.515993637e-07f, -8.513161423e-07f,
--8.510314927e-07f, -8.507454157e-07f, -8.504579120e-07f, -8.501689823e-07f, -8.498786274e-07f, -8.495868480e-07f, -8.492936450e-07f, -8.489990190e-07f, -8.487029709e-07f, -8.484055013e-07f,
--8.481066111e-07f, -8.478063011e-07f, -8.475045719e-07f, -8.472014245e-07f, -8.468968595e-07f, -8.465908777e-07f, -8.462834800e-07f, -8.459746670e-07f, -8.456644397e-07f, -8.453527987e-07f,
--8.450397449e-07f, -8.447252790e-07f, -8.444094019e-07f, -8.440921144e-07f, -8.437734172e-07f, -8.434533112e-07f, -8.431317971e-07f, -8.428088758e-07f, -8.424845481e-07f, -8.421588147e-07f,
--8.418316766e-07f, -8.415031345e-07f, -8.411731892e-07f, -8.408418416e-07f, -8.405090924e-07f, -8.401749426e-07f, -8.398393929e-07f, -8.395024441e-07f, -8.391640972e-07f, -8.388243529e-07f,
--8.384832121e-07f, -8.381406755e-07f, -8.377967441e-07f, -8.374514187e-07f, -8.371047002e-07f, -8.367565893e-07f, -8.364070870e-07f, -8.360561940e-07f, -8.357039113e-07f, -8.353502397e-07f,
--8.349951801e-07f, -8.346387333e-07f, -8.342809001e-07f, -8.339216816e-07f, -8.335610784e-07f, -8.331990916e-07f, -8.328357219e-07f, -8.324709702e-07f, -8.321048375e-07f, -8.317373246e-07f,
--8.313684323e-07f, -8.309981616e-07f, -8.306265134e-07f, -8.302534885e-07f, -8.298790879e-07f, -8.295033123e-07f, -8.291261628e-07f, -8.287476402e-07f, -8.283677455e-07f, -8.279864794e-07f,
--8.276038430e-07f, -8.272198371e-07f, -8.268344627e-07f, -8.264477206e-07f, -8.260596117e-07f, -8.256701371e-07f, -8.252792976e-07f, -8.248870940e-07f, -8.244935275e-07f, -8.240985987e-07f,
--8.237023088e-07f, -8.233046586e-07f, -8.229056491e-07f, -8.225052811e-07f, -8.221035557e-07f, -8.217004737e-07f, -8.212960362e-07f, -8.208902439e-07f, -8.204830980e-07f, -8.200745993e-07f,
--8.196647488e-07f, -8.192535474e-07f, -8.188409961e-07f, -8.184270958e-07f, -8.180118475e-07f, -8.175952522e-07f, -8.171773108e-07f, -8.167580243e-07f, -8.163373937e-07f, -8.159154198e-07f,
--8.154921038e-07f, -8.150674465e-07f, -8.146414490e-07f, -8.142141121e-07f, -8.137854370e-07f, -8.133554245e-07f, -8.129240757e-07f, -8.124913915e-07f, -8.120573730e-07f, -8.116220211e-07f,
--8.111853368e-07f, -8.107473211e-07f, -8.103079750e-07f, -8.098672995e-07f, -8.094252956e-07f, -8.089819643e-07f, -8.085373066e-07f, -8.080913236e-07f, -8.076440161e-07f, -8.071953853e-07f,
--8.067454322e-07f, -8.062941577e-07f, -8.058415629e-07f, -8.053876488e-07f, -8.049324164e-07f, -8.044758668e-07f, -8.040180009e-07f, -8.035588199e-07f, -8.030983247e-07f, -8.026365163e-07f,
--8.021733959e-07f, -8.017089644e-07f, -8.012432229e-07f, -8.007761724e-07f, -8.003078139e-07f, -7.998381486e-07f, -7.993671774e-07f, -7.988949014e-07f, -7.984213216e-07f, -7.979464392e-07f,
--7.974702551e-07f, -7.969927704e-07f, -7.965139863e-07f, -7.960339036e-07f, -7.955525236e-07f, -7.950698472e-07f, -7.945858756e-07f, -7.941006098e-07f, -7.936140508e-07f, -7.931261998e-07f,
--7.926370579e-07f, -7.921466260e-07f, -7.916549054e-07f, -7.911618970e-07f, -7.906676019e-07f, -7.901720213e-07f, -7.896751563e-07f, -7.891770078e-07f, -7.886775771e-07f, -7.881768652e-07f,
--7.876748732e-07f, -7.871716021e-07f, -7.866670532e-07f, -7.861612275e-07f, -7.856541261e-07f, -7.851457501e-07f, -7.846361007e-07f, -7.841251789e-07f, -7.836129858e-07f, -7.830995226e-07f,
--7.825847904e-07f, -7.820687903e-07f, -7.815515234e-07f, -7.810329908e-07f, -7.805131937e-07f, -7.799921333e-07f, -7.794698105e-07f, -7.789462266e-07f, -7.784213827e-07f, -7.778952799e-07f,
--7.773679194e-07f, -7.768393022e-07f, -7.763094297e-07f, -7.757783028e-07f, -7.752459227e-07f, -7.747122906e-07f, -7.741774076e-07f, -7.736412749e-07f, -7.731038937e-07f, -7.725652650e-07f,
--7.720253900e-07f, -7.714842700e-07f, -7.709419060e-07f, -7.703982992e-07f, -7.698534508e-07f, -7.693073620e-07f, -7.687600339e-07f, -7.682114677e-07f, -7.676616645e-07f, -7.671106256e-07f,
--7.665583521e-07f, -7.660048452e-07f, -7.654501060e-07f, -7.648941359e-07f, -7.643369358e-07f, -7.637785071e-07f, -7.632188509e-07f, -7.626579684e-07f, -7.620958608e-07f, -7.615325292e-07f,
--7.609679750e-07f, -7.604021992e-07f, -7.598352032e-07f, -7.592669880e-07f, -7.586975549e-07f, -7.581269050e-07f, -7.575550397e-07f, -7.569819601e-07f, -7.564076674e-07f, -7.558321628e-07f,
--7.552554476e-07f, -7.546775229e-07f, -7.540983900e-07f, -7.535180501e-07f, -7.529365044e-07f, -7.523537542e-07f, -7.517698006e-07f, -7.511846450e-07f, -7.505982884e-07f, -7.500107323e-07f,
--7.494219777e-07f, -7.488320260e-07f, -7.482408783e-07f, -7.476485359e-07f, -7.470550001e-07f, -7.464602720e-07f, -7.458643530e-07f, -7.452672443e-07f, -7.446689471e-07f, -7.440694627e-07f,
--7.434687923e-07f, -7.428669372e-07f, -7.422638987e-07f, -7.416596779e-07f, -7.410542762e-07f, -7.404476948e-07f, -7.398399350e-07f, -7.392309981e-07f, -7.386208852e-07f, -7.380095978e-07f,
--7.373971369e-07f, -7.367835041e-07f, -7.361687004e-07f, -7.355527272e-07f, -7.349355857e-07f, -7.343172773e-07f, -7.336978032e-07f, -7.330771647e-07f, -7.324553630e-07f, -7.318323995e-07f,
--7.312082755e-07f, -7.305829923e-07f, -7.299565510e-07f, -7.293289531e-07f, -7.287001999e-07f, -7.280702925e-07f, -7.274392324e-07f, -7.268070208e-07f, -7.261736590e-07f, -7.255391484e-07f,
--7.249034902e-07f, -7.242666857e-07f, -7.236287363e-07f, -7.229896433e-07f, -7.223494080e-07f, -7.217080316e-07f, -7.210655156e-07f, -7.204218612e-07f, -7.197770697e-07f, -7.191311425e-07f,
--7.184840809e-07f, -7.178358863e-07f, -7.171865599e-07f, -7.165361030e-07f, -7.158845171e-07f, -7.152318034e-07f, -7.145779633e-07f, -7.139229981e-07f, -7.132669092e-07f, -7.126096979e-07f,
--7.119513654e-07f, -7.112919133e-07f, -7.106313428e-07f, -7.099696552e-07f, -7.093068520e-07f, -7.086429344e-07f, -7.079779038e-07f, -7.073117616e-07f, -7.066445091e-07f, -7.059761477e-07f,
--7.053066788e-07f, -7.046361036e-07f, -7.039644236e-07f, -7.032916401e-07f, -7.026177545e-07f, -7.019427681e-07f, -7.012666824e-07f, -7.005894987e-07f, -6.999112183e-07f, -6.992318426e-07f,
--6.985513731e-07f, -6.978698110e-07f, -6.971871579e-07f, -6.965034149e-07f, -6.958185836e-07f, -6.951326653e-07f, -6.944456614e-07f, -6.937575733e-07f, -6.930684023e-07f, -6.923781499e-07f,
--6.916868175e-07f, -6.909944064e-07f, -6.903009180e-07f, -6.896063538e-07f, -6.889107151e-07f, -6.882140033e-07f, -6.875162199e-07f, -6.868173661e-07f, -6.861174436e-07f, -6.854164536e-07f,
--6.847143975e-07f, -6.840112768e-07f, -6.833070929e-07f, -6.826018472e-07f, -6.818955410e-07f, -6.811881759e-07f, -6.804797532e-07f, -6.797702744e-07f, -6.790597408e-07f, -6.783481539e-07f,
--6.776355152e-07f, -6.769218260e-07f, -6.762070877e-07f, -6.754913019e-07f, -6.747744699e-07f, -6.740565932e-07f, -6.733376731e-07f, -6.726177112e-07f, -6.718967088e-07f, -6.711746674e-07f,
--6.704515885e-07f, -6.697274735e-07f, -6.690023237e-07f, -6.682761408e-07f, -6.675489260e-07f, -6.668206810e-07f, -6.660914070e-07f, -6.653611056e-07f, -6.646297782e-07f, -6.638974262e-07f,
--6.631640512e-07f, -6.624296546e-07f, -6.616942378e-07f, -6.609578022e-07f, -6.602203495e-07f, -6.594818809e-07f, -6.587423980e-07f, -6.580019023e-07f, -6.572603952e-07f, -6.565178781e-07f,
--6.557743526e-07f, -6.550298201e-07f, -6.542842821e-07f, -6.535377401e-07f, -6.527901955e-07f, -6.520416499e-07f, -6.512921046e-07f, -6.505415612e-07f, -6.497900212e-07f, -6.490374860e-07f,
--6.482839572e-07f, -6.475294361e-07f, -6.467739244e-07f, -6.460174234e-07f, -6.452599348e-07f, -6.445014599e-07f, -6.437420002e-07f, -6.429815574e-07f, -6.422201327e-07f, -6.414577279e-07f,
--6.406943443e-07f, -6.399299834e-07f, -6.391646468e-07f, -6.383983360e-07f, -6.376310524e-07f, -6.368627976e-07f, -6.360935731e-07f, -6.353233804e-07f, -6.345522209e-07f, -6.337800963e-07f,
--6.330070080e-07f, -6.322329576e-07f, -6.314579465e-07f, -6.306819762e-07f, -6.299050484e-07f, -6.291271645e-07f, -6.283483260e-07f, -6.275685344e-07f, -6.267877914e-07f, -6.260060984e-07f,
--6.252234568e-07f, -6.244398684e-07f, -6.236553345e-07f, -6.228698568e-07f, -6.220834368e-07f, -6.212960759e-07f, -6.205077757e-07f, -6.197185379e-07f, -6.189283638e-07f, -6.181372551e-07f,
--6.173452132e-07f, -6.165522398e-07f, -6.157583364e-07f, -6.149635044e-07f, -6.141677456e-07f, -6.133710613e-07f, -6.125734532e-07f, -6.117749228e-07f, -6.109754717e-07f, -6.101751014e-07f,
--6.093738134e-07f, -6.085716094e-07f, -6.077684909e-07f, -6.069644594e-07f, -6.061595165e-07f, -6.053536638e-07f, -6.045469028e-07f, -6.037392351e-07f, -6.029306622e-07f, -6.021211858e-07f,
--6.013108073e-07f, -6.004995284e-07f, -5.996873506e-07f, -5.988742755e-07f, -5.980603047e-07f, -5.972454398e-07f, -5.964296822e-07f, -5.956130337e-07f, -5.947954957e-07f, -5.939770699e-07f,
--5.931577578e-07f, -5.923375610e-07f, -5.915164811e-07f, -5.906945197e-07f, -5.898716784e-07f, -5.890479587e-07f, -5.882233622e-07f, -5.873978906e-07f, -5.865715454e-07f, -5.857443283e-07f,
--5.849162407e-07f, -5.840872843e-07f, -5.832574607e-07f, -5.824267716e-07f, -5.815952184e-07f, -5.807628028e-07f, -5.799295263e-07f, -5.790953907e-07f, -5.782603975e-07f, -5.774245482e-07f,
--5.765878446e-07f, -5.757502882e-07f, -5.749118806e-07f, -5.740726234e-07f, -5.732325182e-07f, -5.723915667e-07f, -5.715497704e-07f, -5.707071310e-07f, -5.698636501e-07f, -5.690193293e-07f,
--5.681741703e-07f, -5.673281745e-07f, -5.664813437e-07f, -5.656336795e-07f, -5.647851835e-07f, -5.639358573e-07f, -5.630857025e-07f, -5.622347208e-07f, -5.613829139e-07f, -5.605302832e-07f,
--5.596768305e-07f, -5.588225573e-07f, -5.579674654e-07f, -5.571115563e-07f, -5.562548317e-07f, -5.553972932e-07f, -5.545389425e-07f, -5.536797811e-07f, -5.528198108e-07f, -5.519590331e-07f,
--5.510974497e-07f, -5.502350623e-07f, -5.493718725e-07f, -5.485078818e-07f, -5.476430921e-07f, -5.467775048e-07f, -5.459111217e-07f, -5.450439445e-07f, -5.441759746e-07f, -5.433072139e-07f,
--5.424376640e-07f, -5.415673264e-07f, -5.406962030e-07f, -5.398242952e-07f, -5.389516048e-07f, -5.380781335e-07f, -5.372038828e-07f, -5.363288545e-07f, -5.354530501e-07f, -5.345764715e-07f,
--5.336991202e-07f, -5.328209978e-07f, -5.319421061e-07f, -5.310624468e-07f, -5.301820214e-07f, -5.293008316e-07f, -5.284188792e-07f, -5.275361658e-07f, -5.266526930e-07f, -5.257684625e-07f,
--5.248834761e-07f, -5.239977353e-07f, -5.231112419e-07f, -5.222239974e-07f, -5.213360037e-07f, -5.204472624e-07f, -5.195577751e-07f, -5.186675435e-07f, -5.177765694e-07f, -5.168848543e-07f,
--5.159924000e-07f, -5.150992082e-07f, -5.142052805e-07f, -5.133106186e-07f, -5.124152242e-07f, -5.115190991e-07f, -5.106222448e-07f, -5.097246631e-07f, -5.088263557e-07f, -5.079273242e-07f,
--5.070275704e-07f, -5.061270959e-07f, -5.052259024e-07f, -5.043239917e-07f, -5.034213654e-07f, -5.025180252e-07f, -5.016139728e-07f, -5.007092099e-07f, -4.998037383e-07f, -4.988975596e-07f,
--4.979906755e-07f, -4.970830877e-07f, -4.961747979e-07f, -4.952658078e-07f, -4.943561192e-07f, -4.934457337e-07f, -4.925346531e-07f, -4.916228790e-07f, -4.907104132e-07f, -4.897972573e-07f,
--4.888834131e-07f, -4.879688823e-07f, -4.870536666e-07f, -4.861377678e-07f, -4.852211874e-07f, -4.843039273e-07f, -4.833859891e-07f, -4.824673747e-07f, -4.815480856e-07f, -4.806281236e-07f,
--4.797074905e-07f, -4.787861879e-07f, -4.778642176e-07f, -4.769415812e-07f, -4.760182806e-07f, -4.750943174e-07f, -4.741696934e-07f, -4.732444103e-07f, -4.723184698e-07f, -4.713918736e-07f,
--4.704646235e-07f, -4.695367212e-07f, -4.686081684e-07f, -4.676789668e-07f, -4.667491183e-07f, -4.658186245e-07f, -4.648874871e-07f, -4.639557079e-07f, -4.630232886e-07f, -4.620902310e-07f,
--4.611565368e-07f, -4.602222077e-07f, -4.592872454e-07f, -4.583516518e-07f, -4.574154285e-07f, -4.564785772e-07f, -4.555410998e-07f, -4.546029980e-07f, -4.536642735e-07f, -4.527249280e-07f,
--4.517849633e-07f, -4.508443811e-07f, -4.499031832e-07f, -4.489613713e-07f, -4.480189472e-07f, -4.470759127e-07f, -4.461322694e-07f, -4.451880191e-07f, -4.442431636e-07f, -4.432977045e-07f,
--4.423516438e-07f, -4.414049831e-07f, -4.404577241e-07f, -4.395098687e-07f, -4.385614186e-07f, -4.376123755e-07f, -4.366627412e-07f, -4.357125174e-07f, -4.347617060e-07f, -4.338103086e-07f,
--4.328583270e-07f, -4.319057630e-07f, -4.309526183e-07f, -4.299988947e-07f, -4.290445940e-07f, -4.280897180e-07f, -4.271342683e-07f, -4.261782467e-07f, -4.252216551e-07f, -4.242644951e-07f,
--4.233067686e-07f, -4.223484773e-07f, -4.213896230e-07f, -4.204302074e-07f, -4.194702323e-07f, -4.185096995e-07f, -4.175486108e-07f, -4.165869679e-07f, -4.156247725e-07f, -4.146620265e-07f,
--4.136987317e-07f, -4.127348897e-07f, -4.117705025e-07f, -4.108055716e-07f, -4.098400991e-07f, -4.088740865e-07f, -4.079075357e-07f, -4.069404484e-07f, -4.059728265e-07f, -4.050046717e-07f,
--4.040359857e-07f, -4.030667705e-07f, -4.020970276e-07f, -4.011267590e-07f, -4.001559664e-07f, -3.991846516e-07f, -3.982128164e-07f, -3.972404625e-07f, -3.962675917e-07f, -3.952942059e-07f,
--3.943203067e-07f, -3.933458961e-07f, -3.923709757e-07f, -3.913955474e-07f, -3.904196129e-07f, -3.894431740e-07f, -3.884662326e-07f, -3.874887904e-07f, -3.865108491e-07f, -3.855324107e-07f,
--3.845534768e-07f, -3.835740493e-07f, -3.825941299e-07f, -3.816137205e-07f, -3.806328228e-07f, -3.796514387e-07f, -3.786695698e-07f, -3.776872181e-07f, -3.767043853e-07f, -3.757210732e-07f,
--3.747372837e-07f, -3.737530184e-07f, -3.727682792e-07f, -3.717830678e-07f, -3.707973862e-07f, -3.698112361e-07f, -3.688246192e-07f, -3.678375374e-07f, -3.668499925e-07f, -3.658619863e-07f,
--3.648735205e-07f, -3.638845971e-07f, -3.628952177e-07f, -3.619053842e-07f, -3.609150983e-07f, -3.599243620e-07f, -3.589331769e-07f, -3.579415450e-07f, -3.569494679e-07f, -3.559569476e-07f,
--3.549639857e-07f, -3.539705842e-07f, -3.529767447e-07f, -3.519824692e-07f, -3.509877594e-07f, -3.499926172e-07f, -3.489970443e-07f, -3.480010426e-07f, -3.470046138e-07f, -3.460077597e-07f,
--3.450104823e-07f, -3.440127832e-07f, -3.430146643e-07f, -3.420161275e-07f, -3.410171744e-07f, -3.400178070e-07f, -3.390180270e-07f, -3.380178363e-07f, -3.370172366e-07f, -3.360162299e-07f,
--3.350148178e-07f, -3.340130022e-07f, -3.330107849e-07f, -3.320081677e-07f, -3.310051525e-07f, -3.300017411e-07f, -3.289979352e-07f, -3.279937367e-07f, -3.269891474e-07f, -3.259841692e-07f,
--3.249788038e-07f, -3.239730530e-07f, -3.229669188e-07f, -3.219604028e-07f, -3.209535069e-07f, -3.199462329e-07f, -3.189385827e-07f, -3.179305581e-07f, -3.169221609e-07f, -3.159133928e-07f,
--3.149042558e-07f, -3.138947517e-07f, -3.128848822e-07f, -3.118746492e-07f, -3.108640545e-07f, -3.098530999e-07f, -3.088417873e-07f, -3.078301184e-07f, -3.068180952e-07f, -3.058057194e-07f,
--3.047929928e-07f, -3.037799173e-07f, -3.027664947e-07f, -3.017527268e-07f, -3.007386154e-07f, -2.997241625e-07f, -2.987093697e-07f, -2.976942389e-07f, -2.966787719e-07f, -2.956629706e-07f,
--2.946468369e-07f, -2.936303724e-07f, -2.926135791e-07f, -2.915964587e-07f, -2.905790131e-07f, -2.895612442e-07f, -2.885431537e-07f, -2.875247435e-07f, -2.865060154e-07f, -2.854869713e-07f,
--2.844676129e-07f, -2.834479421e-07f, -2.824279607e-07f, -2.814076706e-07f, -2.803870735e-07f, -2.793661714e-07f, -2.783449659e-07f, -2.773234591e-07f, -2.763016527e-07f, -2.752795485e-07f,
--2.742571483e-07f, -2.732344540e-07f, -2.722114675e-07f, -2.711881905e-07f, -2.701646249e-07f, -2.691407725e-07f, -2.681166351e-07f, -2.670922147e-07f, -2.660675129e-07f, -2.650425317e-07f,
--2.640172728e-07f, -2.629917382e-07f, -2.619659295e-07f, -2.609398488e-07f, -2.599134977e-07f, -2.588868782e-07f, -2.578599921e-07f, -2.568328411e-07f, -2.558054272e-07f, -2.547777522e-07f,
--2.537498179e-07f, -2.527216261e-07f, -2.516931786e-07f, -2.506644774e-07f, -2.496355242e-07f, -2.486063209e-07f, -2.475768693e-07f, -2.465471712e-07f, -2.455172285e-07f, -2.444870430e-07f,
--2.434566165e-07f, -2.424259510e-07f, -2.413950481e-07f, -2.403639098e-07f, -2.393325378e-07f, -2.383009341e-07f, -2.372691005e-07f, -2.362370387e-07f, -2.352047507e-07f, -2.341722382e-07f,
--2.331395031e-07f, -2.321065472e-07f, -2.310733724e-07f, -2.300399805e-07f, -2.290063733e-07f, -2.279725528e-07f, -2.269385206e-07f, -2.259042786e-07f, -2.248698288e-07f, -2.238351728e-07f,
--2.228003127e-07f, -2.217652501e-07f, -2.207299869e-07f, -2.196945250e-07f, -2.186588661e-07f, -2.176230123e-07f, -2.165869651e-07f, -2.155507266e-07f, -2.145142985e-07f, -2.134776827e-07f,
--2.124408810e-07f, -2.114038953e-07f, -2.103667273e-07f, -2.093293790e-07f, -2.082918521e-07f, -2.072541485e-07f, -2.062162701e-07f, -2.051782186e-07f, -2.041399959e-07f, -2.031016038e-07f,
--2.020630442e-07f, -2.010243190e-07f, -1.999854298e-07f, -1.989463787e-07f, -1.979071673e-07f, -1.968677976e-07f, -1.958282714e-07f, -1.947885906e-07f, -1.937487568e-07f, -1.927087721e-07f,
--1.916686382e-07f, -1.906283570e-07f, -1.895879302e-07f, -1.885473598e-07f, -1.875066476e-07f, -1.864657953e-07f, -1.854248049e-07f, -1.843836782e-07f, -1.833424170e-07f, -1.823010231e-07f,
--1.812594985e-07f, -1.802178448e-07f, -1.791760640e-07f, -1.781341578e-07f, -1.770921282e-07f, -1.760499769e-07f, -1.750077058e-07f, -1.739653167e-07f, -1.729228115e-07f, -1.718801919e-07f,
--1.708374599e-07f, -1.697946172e-07f, -1.687516657e-07f, -1.677086073e-07f, -1.666654436e-07f, -1.656221767e-07f, -1.645788083e-07f, -1.635353402e-07f, -1.624917743e-07f, -1.614481124e-07f,
--1.604043564e-07f, -1.593605080e-07f, -1.583165692e-07f, -1.572725417e-07f, -1.562284273e-07f, -1.551842280e-07f, -1.541399455e-07f, -1.530955816e-07f, -1.520511383e-07f, -1.510066173e-07f,
--1.499620204e-07f, -1.489173495e-07f, -1.478726065e-07f, -1.468277930e-07f, -1.457829111e-07f, -1.447379625e-07f, -1.436929490e-07f, -1.426478724e-07f, -1.416027347e-07f, -1.405575375e-07f,
--1.395122828e-07f, -1.384669724e-07f, -1.374216081e-07f, -1.363761917e-07f, -1.353307251e-07f, -1.342852100e-07f, -1.332396484e-07f, -1.321940420e-07f, -1.311483927e-07f, -1.301027022e-07f,
--1.290569725e-07f, -1.280112053e-07f, -1.269654025e-07f, -1.259195659e-07f, -1.248736973e-07f, -1.238277985e-07f, -1.227818714e-07f, -1.217359178e-07f, -1.206899395e-07f, -1.196439383e-07f,
--1.185979161e-07f, -1.175518747e-07f, -1.165058158e-07f, -1.154597414e-07f, -1.144136533e-07f, -1.133675532e-07f, -1.123214430e-07f, -1.112753245e-07f, -1.102291996e-07f, -1.091830700e-07f,
--1.081369375e-07f, -1.070908041e-07f, -1.060446715e-07f, -1.049985415e-07f, -1.039524160e-07f, -1.029062967e-07f, -1.018601855e-07f, -1.008140842e-07f, -9.976799465e-08f, -9.872191862e-08f,
--9.767585795e-08f, -9.662981446e-08f, -9.558378995e-08f, -9.453778624e-08f, -9.349180515e-08f, -9.244584849e-08f, -9.139991808e-08f, -9.035401574e-08f, -8.930814327e-08f, -8.826230248e-08f,
--8.721649520e-08f, -8.617072324e-08f, -8.512498840e-08f, -8.407929250e-08f, -8.303363735e-08f, -8.198802476e-08f, -8.094245655e-08f, -7.989693452e-08f, -7.885146048e-08f, -7.780603624e-08f,
--7.676066361e-08f, -7.571534440e-08f, -7.467008043e-08f, -7.362487348e-08f, -7.257972538e-08f, -7.153463793e-08f, -7.048961294e-08f, -6.944465221e-08f, -6.839975755e-08f, -6.735493077e-08f,
--6.631017366e-08f, -6.526548804e-08f, -6.422087570e-08f, -6.317633846e-08f, -6.213187810e-08f, -6.108749645e-08f, -6.004319529e-08f, -5.899897644e-08f, -5.795484168e-08f, -5.691079283e-08f,
--5.586683168e-08f, -5.482296003e-08f, -5.377917969e-08f, -5.273549244e-08f, -5.169190010e-08f, -5.064840445e-08f, -4.960500729e-08f, -4.856171043e-08f, -4.751851565e-08f, -4.647542475e-08f,
--4.543243954e-08f, -4.438956180e-08f, -4.334679332e-08f, -4.230413591e-08f, -4.126159135e-08f, -4.021916144e-08f, -3.917684798e-08f, -3.813465274e-08f, -3.709257753e-08f, -3.605062413e-08f,
--3.500879433e-08f, -3.396708993e-08f, -3.292551272e-08f, -3.188406447e-08f, -3.084274698e-08f, -2.980156205e-08f, -2.876051144e-08f, -2.771959696e-08f, -2.667882038e-08f, -2.563818350e-08f,
--2.459768809e-08f, -2.355733594e-08f, -2.251712884e-08f, -2.147706857e-08f, -2.043715690e-08f, -1.939739563e-08f, -1.835778653e-08f, -1.731833138e-08f, -1.627903197e-08f, -1.523989007e-08f,
--1.420090746e-08f, -1.316208593e-08f, -1.212342724e-08f, -1.108493318e-08f, -1.004660552e-08f, -9.008446041e-09f, -7.970456514e-09f, -6.932638715e-09f, -5.894994419e-09f, -4.857525398e-09f,
--3.820233427e-09f, -2.783120276e-09f, -1.746187719e-09f, -7.094375244e-10f, 3.271285358e-10f, 1.363508692e-09f, 2.399701176e-09f, 3.435704218e-09f, 4.471516052e-09f, 5.507134909e-09f,
-6.542559023e-09f, 7.577786629e-09f, 8.612815962e-09f, 9.647645256e-09f, 1.068227275e-08f, 1.171669667e-08f, 1.275091527e-08f, 1.378492678e-08f, 1.481872944e-08f, 1.585232149e-08f,
-1.688570117e-08f, 1.791886671e-08f, 1.895181637e-08f, 1.998454838e-08f, 2.101706099e-08f, 2.204935244e-08f, 2.308142097e-08f, 2.411326483e-08f, 2.514488227e-08f, 2.617627153e-08f,
-2.720743085e-08f, 2.823835850e-08f, 2.926905271e-08f, 3.029951173e-08f, 3.132973382e-08f, 3.235971722e-08f, 3.338946020e-08f, 3.441896099e-08f, 3.544821785e-08f, 3.647722904e-08f,
-3.750599280e-08f, 3.853450741e-08f, 3.956277110e-08f, 4.059078215e-08f, 4.161853879e-08f, 4.264603931e-08f, 4.367328194e-08f, 4.470026496e-08f, 4.572698661e-08f, 4.675344518e-08f,
-4.777963890e-08f, 4.880556606e-08f, 4.983122491e-08f, 5.085661371e-08f, 5.188173074e-08f, 5.290657425e-08f, 5.393114252e-08f, 5.495543381e-08f, 5.597944639e-08f, 5.700317852e-08f,
-5.802662849e-08f, 5.904979455e-08f, 6.007267499e-08f, 6.109526806e-08f, 6.211757206e-08f, 6.313958524e-08f, 6.416130589e-08f, 6.518273227e-08f, 6.620386267e-08f, 6.722469537e-08f,
-6.824522864e-08f, 6.926546075e-08f, 7.028539000e-08f, 7.130501466e-08f, 7.232433300e-08f, 7.334334332e-08f, 7.436204390e-08f, 7.538043302e-08f, 7.639850896e-08f, 7.741627001e-08f,
-7.843371446e-08f, 7.945084060e-08f, 8.046764670e-08f, 8.148413107e-08f, 8.250029199e-08f, 8.351612775e-08f, 8.453163664e-08f, 8.554681696e-08f, 8.656166699e-08f, 8.757618504e-08f,
-8.859036940e-08f, 8.960421836e-08f, 9.061773023e-08f, 9.163090329e-08f, 9.264373585e-08f, 9.365622620e-08f, 9.466837265e-08f, 9.568017351e-08f, 9.669162706e-08f, 9.770273162e-08f,
-9.871348548e-08f, 9.972388696e-08f, 1.007339344e-07f, 1.017436260e-07f, 1.027529601e-07f, 1.037619351e-07f, 1.047705493e-07f, 1.057788009e-07f, 1.067866883e-07f, 1.077942098e-07f,
-1.088013636e-07f, 1.098081482e-07f, 1.108145618e-07f, 1.118206028e-07f, 1.128262694e-07f, 1.138315600e-07f, 1.148364729e-07f, 1.158410064e-07f, 1.168451589e-07f, 1.178489286e-07f,
-1.188523139e-07f, 1.198553131e-07f, 1.208579246e-07f, 1.218601466e-07f, 1.228619775e-07f, 1.238634156e-07f, 1.248644592e-07f, 1.258651068e-07f, 1.268653565e-07f, 1.278652067e-07f,
-1.288646559e-07f, 1.298637022e-07f, 1.308623441e-07f, 1.318605798e-07f, 1.328584077e-07f, 1.338558262e-07f, 1.348528336e-07f, 1.358494282e-07f, 1.368456084e-07f, 1.378413724e-07f,
-1.388367188e-07f, 1.398316457e-07f, 1.408261515e-07f, 1.418202347e-07f, 1.428138934e-07f, 1.438071262e-07f, 1.447999312e-07f, 1.457923070e-07f, 1.467842518e-07f, 1.477757639e-07f,
-1.487668418e-07f, 1.497574838e-07f, 1.507476882e-07f, 1.517374534e-07f, 1.527267778e-07f, 1.537156597e-07f, 1.547040975e-07f, 1.556920895e-07f, 1.566796341e-07f, 1.576667296e-07f,
-1.586533745e-07f, 1.596395671e-07f, 1.606253057e-07f, 1.616105888e-07f, 1.625954146e-07f, 1.635797816e-07f, 1.645636881e-07f, 1.655471325e-07f, 1.665301132e-07f, 1.675126286e-07f,
-1.684946769e-07f, 1.694762567e-07f, 1.704573662e-07f, 1.714380039e-07f, 1.724181681e-07f, 1.733978573e-07f, 1.743770697e-07f, 1.753558038e-07f, 1.763340579e-07f, 1.773118305e-07f,
-1.782891199e-07f, 1.792659246e-07f, 1.802422428e-07f, 1.812180730e-07f, 1.821934136e-07f, 1.831682630e-07f, 1.841426196e-07f, 1.851164817e-07f, 1.860898478e-07f, 1.870627162e-07f,
-1.880350853e-07f, 1.890069537e-07f, 1.899783195e-07f, 1.909491813e-07f, 1.919195375e-07f, 1.928893864e-07f, 1.938587265e-07f, 1.948275561e-07f, 1.957958737e-07f, 1.967636777e-07f,
-1.977309665e-07f, 1.986977384e-07f, 1.996639920e-07f, 2.006297256e-07f, 2.015949376e-07f, 2.025596264e-07f, 2.035237906e-07f, 2.044874284e-07f, 2.054505383e-07f, 2.064131187e-07f,
-2.073751681e-07f, 2.083366848e-07f, 2.092976673e-07f, 2.102581140e-07f, 2.112180234e-07f, 2.121773938e-07f, 2.131362237e-07f, 2.140945115e-07f, 2.150522557e-07f, 2.160094547e-07f,
-2.169661069e-07f, 2.179222107e-07f, 2.188777646e-07f, 2.198327670e-07f, 2.207872164e-07f, 2.217411112e-07f, 2.226944498e-07f, 2.236472307e-07f, 2.245994524e-07f, 2.255511132e-07f,
-2.265022116e-07f, 2.274527461e-07f, 2.284027151e-07f, 2.293521170e-07f, 2.303009503e-07f, 2.312492136e-07f, 2.321969051e-07f, 2.331440234e-07f, 2.340905669e-07f, 2.350365341e-07f,
-2.359819234e-07f, 2.369267333e-07f, 2.378709623e-07f, 2.388146088e-07f, 2.397576713e-07f, 2.407001482e-07f, 2.416420381e-07f, 2.425833393e-07f, 2.435240504e-07f, 2.444641698e-07f,
-2.454036960e-07f, 2.463426274e-07f, 2.472809626e-07f, 2.482187000e-07f, 2.491558381e-07f, 2.500923753e-07f, 2.510283102e-07f, 2.519636413e-07f, 2.528983669e-07f, 2.538324856e-07f,
-2.547659959e-07f, 2.556988962e-07f, 2.566311851e-07f, 2.575628611e-07f, 2.584939225e-07f, 2.594243680e-07f, 2.603541960e-07f, 2.612834049e-07f, 2.622119934e-07f, 2.631399599e-07f,
-2.640673028e-07f, 2.649940208e-07f, 2.659201122e-07f, 2.668455756e-07f, 2.677704095e-07f, 2.686946125e-07f, 2.696181829e-07f, 2.705411193e-07f, 2.714634203e-07f, 2.723850842e-07f,
-2.733061098e-07f, 2.742264954e-07f, 2.751462395e-07f, 2.760653407e-07f, 2.769837976e-07f, 2.779016085e-07f, 2.788187721e-07f, 2.797352868e-07f, 2.806511513e-07f, 2.815663639e-07f,
-2.824809233e-07f, 2.833948279e-07f, 2.843080763e-07f, 2.852206671e-07f, 2.861325986e-07f, 2.870438696e-07f, 2.879544784e-07f, 2.888644238e-07f, 2.897737041e-07f, 2.906823179e-07f,
-2.915902638e-07f, 2.924975402e-07f, 2.934041459e-07f, 2.943100792e-07f, 2.952153387e-07f, 2.961199230e-07f, 2.970238307e-07f, 2.979270602e-07f, 2.988296102e-07f, 2.997314791e-07f,
-3.006326656e-07f, 3.015331682e-07f, 3.024329854e-07f, 3.033321158e-07f, 3.042305579e-07f, 3.051283104e-07f, 3.060253718e-07f, 3.069217406e-07f, 3.078174155e-07f, 3.087123949e-07f,
-3.096066775e-07f, 3.105002618e-07f, 3.113931464e-07f, 3.122853298e-07f, 3.131768107e-07f, 3.140675877e-07f, 3.149576592e-07f, 3.158470238e-07f, 3.167356802e-07f, 3.176236270e-07f,
-3.185108627e-07f, 3.193973858e-07f, 3.202831951e-07f, 3.211682890e-07f, 3.220526662e-07f, 3.229363252e-07f, 3.238192647e-07f, 3.247014832e-07f, 3.255829794e-07f, 3.264637518e-07f,
-3.273437990e-07f, 3.282231196e-07f, 3.291017123e-07f, 3.299795756e-07f, 3.308567082e-07f, 3.317331085e-07f, 3.326087754e-07f, 3.334837073e-07f, 3.343579028e-07f, 3.352313607e-07f,
-3.361040794e-07f, 3.369760576e-07f, 3.378472940e-07f, 3.387177871e-07f, 3.395875355e-07f, 3.404565380e-07f, 3.413247930e-07f, 3.421922993e-07f, 3.430590555e-07f, 3.439250601e-07f,
-3.447903118e-07f, 3.456548093e-07f, 3.465185511e-07f, 3.473815360e-07f, 3.482437625e-07f, 3.491052293e-07f, 3.499659350e-07f, 3.508258782e-07f, 3.516850577e-07f, 3.525434720e-07f,
-3.534011197e-07f, 3.542579996e-07f, 3.551141103e-07f, 3.559694505e-07f, 3.568240186e-07f, 3.576778136e-07f, 3.585308339e-07f, 3.593830782e-07f, 3.602345453e-07f, 3.610852337e-07f,
-3.619351421e-07f, 3.627842692e-07f, 3.636326137e-07f, 3.644801741e-07f, 3.653269493e-07f, 3.661729378e-07f, 3.670181382e-07f, 3.678625494e-07f, 3.687061700e-07f, 3.695489985e-07f,
-3.703910338e-07f, 3.712322745e-07f, 3.720727192e-07f, 3.729123667e-07f, 3.737512156e-07f, 3.745892646e-07f, 3.754265124e-07f, 3.762629577e-07f, 3.770985992e-07f, 3.779334356e-07f,
-3.787674655e-07f, 3.796006877e-07f, 3.804331009e-07f, 3.812647037e-07f, 3.820954948e-07f, 3.829254730e-07f, 3.837546369e-07f, 3.845829854e-07f, 3.854105169e-07f, 3.862372304e-07f,
-3.870631244e-07f, 3.878881977e-07f, 3.887124490e-07f, 3.895358771e-07f, 3.903584805e-07f, 3.911802582e-07f, 3.920012086e-07f, 3.928213307e-07f, 3.936406231e-07f, 3.944590846e-07f,
-3.952767138e-07f, 3.960935095e-07f, 3.969094704e-07f, 3.977245952e-07f, 3.985388828e-07f, 3.993523318e-07f, 4.001649409e-07f, 4.009767089e-07f, 4.017876346e-07f, 4.025977166e-07f,
-4.034069537e-07f, 4.042153447e-07f, 4.050228883e-07f, 4.058295833e-07f, 4.066354283e-07f, 4.074404223e-07f, 4.082445638e-07f, 4.090478517e-07f, 4.098502847e-07f, 4.106518616e-07f,
-4.114525811e-07f, 4.122524420e-07f, 4.130514431e-07f, 4.138495831e-07f, 4.146468608e-07f, 4.154432749e-07f, 4.162388243e-07f, 4.170335077e-07f, 4.178273239e-07f, 4.186202716e-07f,
-4.194123497e-07f, 4.202035568e-07f, 4.209938919e-07f, 4.217833536e-07f, 4.225719408e-07f, 4.233596522e-07f, 4.241464867e-07f, 4.249324429e-07f, 4.257175198e-07f, 4.265017161e-07f,
-4.272850305e-07f, 4.280674620e-07f, 4.288490092e-07f, 4.296296711e-07f, 4.304094463e-07f, 4.311883337e-07f, 4.319663321e-07f, 4.327434404e-07f, 4.335196572e-07f, 4.342949815e-07f,
-4.350694120e-07f, 4.358429475e-07f, 4.366155869e-07f, 4.373873290e-07f, 4.381581726e-07f, 4.389281166e-07f, 4.396971596e-07f, 4.404653007e-07f, 4.412325385e-07f, 4.419988720e-07f,
-4.427642999e-07f, 4.435288211e-07f, 4.442924345e-07f, 4.450551387e-07f, 4.458169328e-07f, 4.465778155e-07f, 4.473377857e-07f, 4.480968422e-07f, 4.488549839e-07f, 4.496122095e-07f,
-4.503685180e-07f, 4.511239082e-07f, 4.518783790e-07f, 4.526319292e-07f, 4.533845576e-07f, 4.541362631e-07f, 4.548870447e-07f, 4.556369010e-07f, 4.563858311e-07f, 4.571338337e-07f,
-4.578809078e-07f, 4.586270521e-07f, 4.593722656e-07f, 4.601165472e-07f, 4.608598957e-07f, 4.616023099e-07f, 4.623437888e-07f, 4.630843313e-07f, 4.638239362e-07f, 4.645626024e-07f,
-4.653003287e-07f, 4.660371142e-07f, 4.667729576e-07f, 4.675078579e-07f, 4.682418139e-07f, 4.689748245e-07f, 4.697068887e-07f, 4.704380053e-07f, 4.711681733e-07f, 4.718973914e-07f,
-4.726256587e-07f, 4.733529741e-07f, 4.740793364e-07f, 4.748047445e-07f, 4.755291974e-07f, 4.762526940e-07f, 4.769752331e-07f, 4.776968138e-07f, 4.784174348e-07f, 4.791370953e-07f,
-4.798557939e-07f, 4.805735298e-07f, 4.812903018e-07f, 4.820061088e-07f, 4.827209498e-07f, 4.834348236e-07f, 4.841477293e-07f, 4.848596658e-07f, 4.855706320e-07f, 4.862806267e-07f,
-4.869896491e-07f, 4.876976980e-07f, 4.884047724e-07f, 4.891108711e-07f, 4.898159932e-07f, 4.905201377e-07f, 4.912233033e-07f, 4.919254892e-07f, 4.926266943e-07f, 4.933269174e-07f,
-4.940261577e-07f, 4.947244140e-07f, 4.954216853e-07f, 4.961179706e-07f, 4.968132688e-07f, 4.975075789e-07f, 4.982008998e-07f, 4.988932307e-07f, 4.995845703e-07f, 5.002749178e-07f,
-5.009642720e-07f, 5.016526319e-07f, 5.023399967e-07f, 5.030263651e-07f, 5.037117362e-07f, 5.043961090e-07f, 5.050794826e-07f, 5.057618557e-07f, 5.064432276e-07f, 5.071235971e-07f,
-5.078029633e-07f, 5.084813251e-07f, 5.091586816e-07f, 5.098350317e-07f, 5.105103746e-07f, 5.111847091e-07f, 5.118580342e-07f, 5.125303491e-07f, 5.132016527e-07f, 5.138719440e-07f,
-5.145412220e-07f, 5.152094858e-07f, 5.158767344e-07f, 5.165429668e-07f, 5.172081820e-07f, 5.178723790e-07f, 5.185355569e-07f, 5.191977148e-07f, 5.198588515e-07f, 5.205189663e-07f,
-5.211780580e-07f, 5.218361258e-07f, 5.224931687e-07f, 5.231491857e-07f, 5.238041759e-07f, 5.244581383e-07f, 5.251110720e-07f, 5.257629760e-07f, 5.264138494e-07f, 5.270636912e-07f,
-5.277125004e-07f, 5.283602762e-07f, 5.290070176e-07f, 5.296527237e-07f, 5.302973935e-07f, 5.309410260e-07f, 5.315836204e-07f, 5.322251757e-07f, 5.328656911e-07f, 5.335051655e-07f,
-5.341435980e-07f, 5.347809877e-07f, 5.354173338e-07f, 5.360526352e-07f, 5.366868911e-07f, 5.373201006e-07f, 5.379522627e-07f, 5.385833765e-07f, 5.392134411e-07f, 5.398424556e-07f,
-5.404704192e-07f, 5.410973308e-07f, 5.417231896e-07f, 5.423479948e-07f, 5.429717453e-07f, 5.435944404e-07f, 5.442160791e-07f, 5.448366605e-07f, 5.454561837e-07f, 5.460746479e-07f,
-5.466920522e-07f, 5.473083956e-07f, 5.479236774e-07f, 5.485378966e-07f, 5.491510523e-07f, 5.497631437e-07f, 5.503741699e-07f, 5.509841300e-07f, 5.515930232e-07f, 5.522008486e-07f,
-5.528076053e-07f, 5.534132925e-07f, 5.540179092e-07f, 5.546214548e-07f, 5.552239282e-07f, 5.558253287e-07f, 5.564256553e-07f, 5.570249073e-07f, 5.576230837e-07f, 5.582201839e-07f,
-5.588162067e-07f, 5.594111516e-07f, 5.600050175e-07f, 5.605978038e-07f, 5.611895094e-07f, 5.617801337e-07f, 5.623696758e-07f, 5.629581347e-07f, 5.635455098e-07f, 5.641318002e-07f,
-5.647170050e-07f, 5.653011235e-07f, 5.658841548e-07f, 5.664660981e-07f, 5.670469526e-07f, 5.676267174e-07f, 5.682053918e-07f, 5.687829750e-07f, 5.693594661e-07f, 5.699348643e-07f,
-5.705091689e-07f, 5.710823790e-07f, 5.716544938e-07f, 5.722255126e-07f, 5.727954345e-07f, 5.733642587e-07f, 5.739319845e-07f, 5.744986111e-07f, 5.750641376e-07f, 5.756285633e-07f,
-5.761918874e-07f, 5.767541092e-07f, 5.773152278e-07f, 5.778752425e-07f, 5.784341525e-07f, 5.789919570e-07f, 5.795486552e-07f, 5.801042465e-07f, 5.806587299e-07f, 5.812121048e-07f,
-5.817643704e-07f, 5.823155259e-07f, 5.828655706e-07f, 5.834145037e-07f, 5.839623245e-07f, 5.845090322e-07f, 5.850546260e-07f, 5.855991053e-07f, 5.861424692e-07f, 5.866847170e-07f,
-5.872258480e-07f, 5.877658615e-07f, 5.883047566e-07f, 5.888425327e-07f, 5.893791891e-07f, 5.899147250e-07f, 5.904491396e-07f, 5.909824322e-07f, 5.915146022e-07f, 5.920456488e-07f,
-5.925755713e-07f, 5.931043689e-07f, 5.936320410e-07f, 5.941585867e-07f, 5.946840055e-07f, 5.952082966e-07f, 5.957314593e-07f, 5.962534929e-07f, 5.967743967e-07f, 5.972941699e-07f,
-5.978128119e-07f, 5.983303220e-07f, 5.988466995e-07f, 5.993619437e-07f, 5.998760539e-07f, 6.003890294e-07f, 6.009008696e-07f, 6.014115736e-07f, 6.019211409e-07f, 6.024295708e-07f,
-6.029368626e-07f, 6.034430157e-07f, 6.039480292e-07f, 6.044519027e-07f, 6.049546353e-07f, 6.054562265e-07f, 6.059566755e-07f, 6.064559817e-07f, 6.069541445e-07f, 6.074511632e-07f,
-6.079470371e-07f, 6.084417655e-07f, 6.089353479e-07f, 6.094277835e-07f, 6.099190717e-07f, 6.104092119e-07f, 6.108982034e-07f, 6.113860456e-07f, 6.118727379e-07f, 6.123582795e-07f,
-6.128426699e-07f, 6.133259084e-07f, 6.138079944e-07f, 6.142889272e-07f, 6.147687063e-07f, 6.152473310e-07f, 6.157248007e-07f, 6.162011147e-07f, 6.166762725e-07f, 6.171502734e-07f,
-6.176231169e-07f, 6.180948022e-07f, 6.185653288e-07f, 6.190346960e-07f, 6.195029034e-07f, 6.199699502e-07f, 6.204358358e-07f, 6.209005598e-07f, 6.213641213e-07f, 6.218265200e-07f,
-6.222877551e-07f, 6.227478261e-07f, 6.232067324e-07f, 6.236644734e-07f, 6.241210485e-07f, 6.245764571e-07f, 6.250306987e-07f, 6.254837726e-07f, 6.259356783e-07f, 6.263864153e-07f,
-6.268359829e-07f, 6.272843806e-07f, 6.277316077e-07f, 6.281776639e-07f, 6.286225484e-07f, 6.290662607e-07f, 6.295088002e-07f, 6.299501665e-07f, 6.303903589e-07f, 6.308293769e-07f,
-6.312672199e-07f, 6.317038874e-07f, 6.321393788e-07f, 6.325736936e-07f, 6.330068313e-07f, 6.334387913e-07f, 6.338695731e-07f, 6.342991761e-07f, 6.347275997e-07f, 6.351548436e-07f,
-6.355809071e-07f, 6.360057897e-07f, 6.364294909e-07f, 6.368520102e-07f, 6.372733470e-07f, 6.376935008e-07f, 6.381124711e-07f, 6.385302574e-07f, 6.389468592e-07f, 6.393622759e-07f,
-6.397765071e-07f, 6.401895523e-07f, 6.406014109e-07f, 6.410120824e-07f, 6.414215664e-07f, 6.418298623e-07f, 6.422369697e-07f, 6.426428881e-07f, 6.430476169e-07f, 6.434511557e-07f,
-6.438535040e-07f, 6.442546612e-07f, 6.446546271e-07f, 6.450534009e-07f, 6.454509823e-07f, 6.458473708e-07f, 6.462425660e-07f, 6.466365672e-07f, 6.470293742e-07f, 6.474209863e-07f,
-6.478114032e-07f, 6.482006244e-07f, 6.485886494e-07f, 6.489754778e-07f, 6.493611090e-07f, 6.497455427e-07f, 6.501287784e-07f, 6.505108157e-07f, 6.508916540e-07f, 6.512712930e-07f,
-6.516497322e-07f, 6.520269712e-07f, 6.524030095e-07f, 6.527778467e-07f, 6.531514823e-07f, 6.535239160e-07f, 6.538951473e-07f, 6.542651757e-07f, 6.546340009e-07f, 6.550016224e-07f,
-6.553680397e-07f, 6.557332526e-07f, 6.560972605e-07f, 6.564600631e-07f, 6.568216599e-07f, 6.571820505e-07f, 6.575412345e-07f, 6.578992115e-07f, 6.582559811e-07f, 6.586115429e-07f,
-6.589658965e-07f, 6.593190415e-07f, 6.596709775e-07f, 6.600217041e-07f, 6.603712209e-07f, 6.607195276e-07f, 6.610666236e-07f, 6.614125088e-07f, 6.617571826e-07f, 6.621006447e-07f,
-6.624428947e-07f, 6.627839323e-07f, 6.631237570e-07f, 6.634623686e-07f, 6.637997665e-07f, 6.641359505e-07f, 6.644709202e-07f, 6.648046752e-07f, 6.651372152e-07f, 6.654685398e-07f,
-6.657986487e-07f, 6.661275414e-07f, 6.664552177e-07f, 6.667816772e-07f, 6.671069195e-07f, 6.674309443e-07f, 6.677537513e-07f, 6.680753402e-07f, 6.683957104e-07f, 6.687148619e-07f,
-6.690327941e-07f, 6.693495068e-07f, 6.696649997e-07f, 6.699792724e-07f, 6.702923245e-07f, 6.706041559e-07f, 6.709147661e-07f, 6.712241548e-07f, 6.715323217e-07f, 6.718392665e-07f,
-6.721449889e-07f, 6.724494885e-07f, 6.727527652e-07f, 6.730548184e-07f, 6.733556481e-07f, 6.736552537e-07f, 6.739536352e-07f, 6.742507921e-07f, 6.745467241e-07f, 6.748414310e-07f,
-6.751349125e-07f, 6.754271683e-07f, 6.757181980e-07f, 6.760080015e-07f, 6.762965784e-07f, 6.765839285e-07f, 6.768700514e-07f, 6.771549469e-07f, 6.774386148e-07f, 6.777210547e-07f,
-6.780022664e-07f, 6.782822496e-07f, 6.785610041e-07f, 6.788385296e-07f, 6.791148257e-07f, 6.793898924e-07f, 6.796637293e-07f, 6.799363361e-07f, 6.802077127e-07f, 6.804778587e-07f,
-6.807467739e-07f, 6.810144581e-07f, 6.812809111e-07f, 6.815461325e-07f, 6.818101222e-07f, 6.820728798e-07f, 6.823344053e-07f, 6.825946983e-07f, 6.828537586e-07f, 6.831115860e-07f,
-6.833681803e-07f, 6.836235412e-07f, 6.838776685e-07f, 6.841305620e-07f, 6.843822216e-07f, 6.846326468e-07f, 6.848818377e-07f, 6.851297939e-07f, 6.853765152e-07f, 6.856220015e-07f,
-6.858662525e-07f, 6.861092680e-07f, 6.863510479e-07f, 6.865915919e-07f, 6.868308998e-07f, 6.870689715e-07f, 6.873058067e-07f, 6.875414053e-07f, 6.877757671e-07f, 6.880088919e-07f,
-6.882407795e-07f, 6.884714298e-07f, 6.887008425e-07f, 6.889290175e-07f, 6.891559546e-07f, 6.893816536e-07f, 6.896061145e-07f, 6.898293369e-07f, 6.900513208e-07f, 6.902720659e-07f,
-6.904915722e-07f, 6.907098395e-07f, 6.909268675e-07f, 6.911426563e-07f, 6.913572055e-07f, 6.915705151e-07f, 6.917825849e-07f, 6.919934148e-07f, 6.922030045e-07f, 6.924113541e-07f,
-6.926184633e-07f, 6.928243321e-07f, 6.930289602e-07f, 6.932323476e-07f, 6.934344940e-07f, 6.936353995e-07f, 6.938350639e-07f, 6.940334869e-07f, 6.942306686e-07f, 6.944266089e-07f,
-6.946213075e-07f, 6.948147643e-07f, 6.950069794e-07f, 6.951979525e-07f, 6.953876835e-07f, 6.955761724e-07f, 6.957634191e-07f, 6.959494233e-07f, 6.961341851e-07f, 6.963177044e-07f,
-6.964999810e-07f, 6.966810149e-07f, 6.968608059e-07f, 6.970393540e-07f, 6.972166592e-07f, 6.973927212e-07f, 6.975675401e-07f, 6.977411157e-07f, 6.979134480e-07f, 6.980845369e-07f,
-6.982543823e-07f, 6.984229842e-07f, 6.985903424e-07f, 6.987564571e-07f, 6.989213279e-07f, 6.990849550e-07f, 6.992473382e-07f, 6.994084775e-07f, 6.995683728e-07f, 6.997270241e-07f,
-6.998844314e-07f, 7.000405945e-07f, 7.001955134e-07f, 7.003491882e-07f, 7.005016186e-07f, 7.006528048e-07f, 7.008027467e-07f, 7.009514442e-07f, 7.010988973e-07f, 7.012451059e-07f,
-7.013900701e-07f, 7.015337899e-07f, 7.016762651e-07f, 7.018174957e-07f, 7.019574819e-07f, 7.020962234e-07f, 7.022337204e-07f, 7.023699728e-07f, 7.025049806e-07f, 7.026387437e-07f,
-7.027712622e-07f, 7.029025361e-07f, 7.030325654e-07f, 7.031613500e-07f, 7.032888900e-07f, 7.034151853e-07f, 7.035402361e-07f, 7.036640422e-07f, 7.037866037e-07f, 7.039079207e-07f,
-7.040279930e-07f, 7.041468208e-07f, 7.042644041e-07f, 7.043807428e-07f, 7.044958370e-07f, 7.046096868e-07f, 7.047222921e-07f, 7.048336530e-07f, 7.049437695e-07f, 7.050526417e-07f,
-7.051602696e-07f, 7.052666531e-07f, 7.053717925e-07f, 7.054756877e-07f, 7.055783387e-07f, 7.056797456e-07f, 7.057799085e-07f, 7.058788273e-07f, 7.059765023e-07f, 7.060729333e-07f,
-7.061681205e-07f, 7.062620640e-07f, 7.063547637e-07f, 7.064462198e-07f, 7.065364323e-07f, 7.066254013e-07f, 7.067131269e-07f, 7.067996091e-07f, 7.068848480e-07f, 7.069688437e-07f,
-7.070515963e-07f, 7.071331058e-07f, 7.072133724e-07f, 7.072923960e-07f, 7.073701769e-07f, 7.074467151e-07f, 7.075220106e-07f, 7.075960637e-07f, 7.076688743e-07f, 7.077404426e-07f,
-7.078107687e-07f, 7.078798526e-07f, 7.079476946e-07f, 7.080142946e-07f, 7.080796529e-07f, 7.081437694e-07f, 7.082066444e-07f, 7.082682779e-07f, 7.083286701e-07f, 7.083878211e-07f,
-7.084457310e-07f, 7.085023999e-07f, 7.085578280e-07f, 7.086120154e-07f, 7.086649622e-07f, 7.087166685e-07f, 7.087671345e-07f, 7.088163604e-07f, 7.088643462e-07f, 7.089110921e-07f,
-7.089565982e-07f, 7.090008647e-07f, 7.090438918e-07f, 7.090856796e-07f, 7.091262282e-07f, 7.091655378e-07f, 7.092036086e-07f, 7.092404407e-07f, 7.092760342e-07f, 7.093103894e-07f,
-7.093435064e-07f, 7.093753854e-07f, 7.094060265e-07f, 7.094354299e-07f, 7.094635958e-07f, 7.094905243e-07f, 7.095162157e-07f, 7.095406701e-07f, 7.095638877e-07f, 7.095858686e-07f,
-7.096066132e-07f, 7.096261215e-07f, 7.096443937e-07f, 7.096614301e-07f, 7.096772308e-07f, 7.096917961e-07f, 7.097051261e-07f, 7.097172210e-07f, 7.097280810e-07f, 7.097377064e-07f,
-7.097460973e-07f, 7.097532540e-07f, 7.097591767e-07f, 7.097638655e-07f, 7.097673207e-07f, 7.097695426e-07f, 7.097705313e-07f, 7.097702870e-07f, 7.097688100e-07f, 7.097661006e-07f,
-7.097621588e-07f, 7.097569851e-07f, 7.097505795e-07f, 7.097429424e-07f, 7.097340739e-07f, 7.097239744e-07f, 7.097126440e-07f, 7.097000830e-07f, 7.096862916e-07f, 7.096712702e-07f,
-7.096550188e-07f, 7.096375379e-07f, 7.096188276e-07f, 7.095988882e-07f, 7.095777199e-07f, 7.095553231e-07f, 7.095316980e-07f, 7.095068448e-07f, 7.094807638e-07f, 7.094534552e-07f,
-7.094249195e-07f, 7.093951567e-07f, 7.093641673e-07f, 7.093319514e-07f, 7.092985093e-07f, 7.092638414e-07f, 7.092279480e-07f, 7.091908292e-07f, 7.091524854e-07f, 7.091129168e-07f,
-7.090721239e-07f, 7.090301068e-07f, 7.089868658e-07f, 7.089424013e-07f, 7.088967136e-07f, 7.088498029e-07f, 7.088016696e-07f, 7.087523140e-07f, 7.087017363e-07f, 7.086499369e-07f,
-7.085969161e-07f, 7.085426742e-07f, 7.084872115e-07f, 7.084305283e-07f, 7.083726251e-07f, 7.083135020e-07f, 7.082531594e-07f, 7.081915977e-07f, 7.081288171e-07f, 7.080648180e-07f,
-7.079996008e-07f, 7.079331657e-07f, 7.078655131e-07f, 7.077966434e-07f, 7.077265568e-07f, 7.076552538e-07f, 7.075827346e-07f, 7.075089997e-07f, 7.074340493e-07f, 7.073578838e-07f,
-7.072805036e-07f, 7.072019090e-07f, 7.071221004e-07f, 7.070410782e-07f, 7.069588426e-07f, 7.068753941e-07f, 7.067907331e-07f, 7.067048598e-07f, 7.066177748e-07f, 7.065294782e-07f,
-7.064399706e-07f, 7.063492522e-07f, 7.062573236e-07f, 7.061641850e-07f, 7.060698368e-07f, 7.059742794e-07f, 7.058775132e-07f, 7.057795386e-07f, 7.056803560e-07f, 7.055799658e-07f,
-7.054783683e-07f, 7.053755640e-07f, 7.052715533e-07f, 7.051663365e-07f, 7.050599141e-07f, 7.049522864e-07f, 7.048434539e-07f, 7.047334170e-07f, 7.046221761e-07f, 7.045097316e-07f,
-7.043960839e-07f, 7.042812334e-07f, 7.041651806e-07f, 7.040479259e-07f, 7.039294696e-07f, 7.038098123e-07f, 7.036889544e-07f, 7.035668962e-07f, 7.034436382e-07f, 7.033191808e-07f,
-7.031935246e-07f, 7.030666698e-07f, 7.029386170e-07f, 7.028093665e-07f, 7.026789189e-07f, 7.025472746e-07f, 7.024144340e-07f, 7.022803976e-07f, 7.021451658e-07f, 7.020087391e-07f,
-7.018711179e-07f, 7.017323027e-07f, 7.015922939e-07f, 7.014510920e-07f, 7.013086975e-07f, 7.011651109e-07f, 7.010203325e-07f, 7.008743629e-07f, 7.007272025e-07f, 7.005788519e-07f,
-7.004293114e-07f, 7.002785816e-07f, 7.001266630e-07f, 6.999735559e-07f, 6.998192610e-07f, 6.996637786e-07f, 6.995071094e-07f, 6.993492537e-07f, 6.991902120e-07f, 6.990299849e-07f,
-6.988685728e-07f, 6.987059763e-07f, 6.985421958e-07f, 6.983772318e-07f, 6.982110849e-07f, 6.980437555e-07f, 6.978752442e-07f, 6.977055514e-07f, 6.975346776e-07f, 6.973626235e-07f,
-6.971893895e-07f, 6.970149760e-07f, 6.968393837e-07f, 6.966626130e-07f, 6.964846645e-07f, 6.963055387e-07f, 6.961252361e-07f, 6.959437573e-07f, 6.957611027e-07f, 6.955772729e-07f,
-6.953922685e-07f, 6.952060900e-07f, 6.950187378e-07f, 6.948302126e-07f, 6.946405150e-07f, 6.944496453e-07f, 6.942576042e-07f, 6.940643923e-07f, 6.938700100e-07f, 6.936744580e-07f,
-6.934777368e-07f, 6.932798468e-07f, 6.930807888e-07f, 6.928805633e-07f, 6.926791707e-07f, 6.924766118e-07f, 6.922728869e-07f, 6.920679968e-07f, 6.918619420e-07f, 6.916547230e-07f,
-6.914463404e-07f, 6.912367948e-07f, 6.910260868e-07f, 6.908142170e-07f, 6.906011859e-07f, 6.903869940e-07f, 6.901716421e-07f, 6.899551307e-07f, 6.897374603e-07f, 6.895186316e-07f,
-6.892986451e-07f, 6.890775015e-07f, 6.888552013e-07f, 6.886317452e-07f, 6.884071336e-07f, 6.881813674e-07f, 6.879544469e-07f, 6.877263729e-07f, 6.874971460e-07f, 6.872667667e-07f,
-6.870352357e-07f, 6.868025535e-07f, 6.865687209e-07f, 6.863337384e-07f, 6.860976066e-07f, 6.858603261e-07f, 6.856218976e-07f, 6.853823217e-07f, 6.851415991e-07f, 6.848997303e-07f,
-6.846567159e-07f, 6.844125567e-07f, 6.841672532e-07f, 6.839208061e-07f, 6.836732161e-07f, 6.834244836e-07f, 6.831746095e-07f, 6.829235943e-07f, 6.826714387e-07f, 6.824181433e-07f,
-6.821637088e-07f, 6.819081358e-07f, 6.816514250e-07f, 6.813935770e-07f, 6.811345926e-07f, 6.808744722e-07f, 6.806132167e-07f, 6.803508266e-07f, 6.800873027e-07f, 6.798226455e-07f,
-6.795568559e-07f, 6.792899343e-07f, 6.790218815e-07f, 6.787526983e-07f, 6.784823851e-07f, 6.782109428e-07f, 6.779383720e-07f, 6.776646734e-07f, 6.773898476e-07f, 6.771138954e-07f,
-6.768368174e-07f, 6.765586143e-07f, 6.762792868e-07f, 6.759988357e-07f, 6.757172615e-07f, 6.754345650e-07f, 6.751507469e-07f, 6.748658078e-07f, 6.745797486e-07f, 6.742925698e-07f,
-6.740042722e-07f, 6.737148565e-07f, 6.734243234e-07f, 6.731326736e-07f, 6.728399078e-07f, 6.725460267e-07f, 6.722510311e-07f, 6.719549216e-07f, 6.716576990e-07f, 6.713593640e-07f,
-6.710599174e-07f, 6.707593598e-07f, 6.704576919e-07f, 6.701549145e-07f, 6.698510284e-07f, 6.695460342e-07f, 6.692399327e-07f, 6.689327246e-07f, 6.686244107e-07f, 6.683149917e-07f,
-6.680044683e-07f, 6.676928413e-07f, 6.673801114e-07f, 6.670662793e-07f, 6.667513459e-07f, 6.664353119e-07f, 6.661181779e-07f, 6.657999448e-07f, 6.654806134e-07f, 6.651601843e-07f,
-6.648386583e-07f, 6.645160362e-07f, 6.641923188e-07f, 6.638675067e-07f, 6.635416009e-07f, 6.632146020e-07f, 6.628865108e-07f, 6.625573281e-07f, 6.622270547e-07f, 6.618956912e-07f,
-6.615632386e-07f, 6.612296976e-07f, 6.608950689e-07f, 6.605593533e-07f, 6.602225517e-07f, 6.598846647e-07f, 6.595456933e-07f, 6.592056381e-07f, 6.588645000e-07f, 6.585222798e-07f,
-6.581789782e-07f, 6.578345960e-07f, 6.574891341e-07f, 6.571425933e-07f, 6.567949742e-07f, 6.564462778e-07f, 6.560965049e-07f, 6.557456561e-07f, 6.553937325e-07f, 6.550407347e-07f,
-6.546866636e-07f, 6.543315199e-07f, 6.539753046e-07f, 6.536180183e-07f, 6.532596620e-07f, 6.529002364e-07f, 6.525397424e-07f, 6.521781808e-07f, 6.518155524e-07f, 6.514518581e-07f,
-6.510870986e-07f, 6.507212748e-07f, 6.503543875e-07f, 6.499864376e-07f, 6.496174258e-07f, 6.492473531e-07f, 6.488762203e-07f, 6.485040281e-07f, 6.481307775e-07f, 6.477564693e-07f,
-6.473811043e-07f, 6.470046834e-07f, 6.466272074e-07f, 6.462486772e-07f, 6.458690936e-07f, 6.454884575e-07f, 6.451067697e-07f, 6.447240311e-07f, 6.443402425e-07f, 6.439554048e-07f,
-6.435695189e-07f, 6.431825857e-07f, 6.427946059e-07f, 6.424055804e-07f, 6.420155102e-07f, 6.416243961e-07f, 6.412322389e-07f, 6.408390396e-07f, 6.404447990e-07f, 6.400495179e-07f,
-6.396531974e-07f, 6.392558381e-07f, 6.388574411e-07f, 6.384580072e-07f, 6.380575373e-07f, 6.376560322e-07f, 6.372534930e-07f, 6.368499203e-07f, 6.364453152e-07f, 6.360396786e-07f,
-6.356330112e-07f, 6.352253141e-07f, 6.348165881e-07f, 6.344068342e-07f, 6.339960531e-07f, 6.335842459e-07f, 6.331714134e-07f, 6.327575565e-07f, 6.323426762e-07f, 6.319267733e-07f,
-6.315098487e-07f, 6.310919035e-07f, 6.306729384e-07f, 6.302529544e-07f, 6.298319524e-07f, 6.294099333e-07f, 6.289868981e-07f, 6.285628477e-07f, 6.281377829e-07f, 6.277117048e-07f,
-6.272846143e-07f, 6.268565122e-07f, 6.264273995e-07f, 6.259972771e-07f, 6.255661460e-07f, 6.251340071e-07f, 6.247008613e-07f, 6.242667096e-07f, 6.238315530e-07f, 6.233953922e-07f,
-6.229582284e-07f, 6.225200624e-07f, 6.220808952e-07f, 6.216407277e-07f, 6.211995609e-07f, 6.207573957e-07f, 6.203142331e-07f, 6.198700741e-07f, 6.194249195e-07f, 6.189787704e-07f,
-6.185316276e-07f, 6.180834923e-07f, 6.176343652e-07f, 6.171842475e-07f, 6.167331399e-07f, 6.162810436e-07f, 6.158279595e-07f, 6.153738885e-07f, 6.149188317e-07f, 6.144627899e-07f,
-6.140057642e-07f, 6.135477556e-07f, 6.130887649e-07f, 6.126287933e-07f, 6.121678416e-07f, 6.117059109e-07f, 6.112430021e-07f, 6.107791162e-07f, 6.103142542e-07f, 6.098484171e-07f,
-6.093816059e-07f, 6.089138216e-07f, 6.084450651e-07f, 6.079753375e-07f, 6.075046398e-07f, 6.070329728e-07f, 6.065603378e-07f, 6.060867355e-07f, 6.056121671e-07f, 6.051366336e-07f,
-6.046601359e-07f, 6.041826750e-07f, 6.037042520e-07f, 6.032248679e-07f, 6.027445237e-07f, 6.022632203e-07f, 6.017809589e-07f, 6.012977403e-07f, 6.008135657e-07f, 6.003284361e-07f,
-5.998423524e-07f, 5.993553156e-07f, 5.988673269e-07f, 5.983783873e-07f, 5.978884976e-07f, 5.973976591e-07f, 5.969058726e-07f, 5.964131393e-07f, 5.959194602e-07f, 5.954248363e-07f,
-5.949292686e-07f, 5.944327581e-07f, 5.939353060e-07f, 5.934369132e-07f, 5.929375807e-07f, 5.924373097e-07f, 5.919361012e-07f, 5.914339561e-07f, 5.909308756e-07f, 5.904268607e-07f,
-5.899219125e-07f, 5.894160319e-07f, 5.889092200e-07f, 5.884014780e-07f, 5.878928068e-07f, 5.873832075e-07f, 5.868726812e-07f, 5.863612288e-07f, 5.858488516e-07f, 5.853355505e-07f,
-5.848213265e-07f, 5.843061809e-07f, 5.837901145e-07f, 5.832731286e-07f, 5.827552241e-07f, 5.822364021e-07f, 5.817166637e-07f, 5.811960100e-07f, 5.806744421e-07f, 5.801519609e-07f,
-5.796285676e-07f, 5.791042634e-07f, 5.785790491e-07f, 5.780529260e-07f, 5.775258951e-07f, 5.769979575e-07f, 5.764691142e-07f, 5.759393664e-07f, 5.754087152e-07f, 5.748771616e-07f,
-5.743447067e-07f, 5.738113517e-07f, 5.732770975e-07f, 5.727419454e-07f, 5.722058963e-07f, 5.716689515e-07f, 5.711311119e-07f, 5.705923787e-07f, 5.700527530e-07f, 5.695122360e-07f,
-5.689708286e-07f, 5.684285320e-07f, 5.678853473e-07f, 5.673412757e-07f, 5.667963181e-07f, 5.662504758e-07f, 5.657037499e-07f, 5.651561414e-07f, 5.646076515e-07f, 5.640582812e-07f,
-5.635080318e-07f, 5.629569043e-07f, 5.624048998e-07f, 5.618520195e-07f, 5.612982645e-07f, 5.607436359e-07f, 5.601881348e-07f, 5.596317624e-07f, 5.590745197e-07f, 5.585164080e-07f,
-5.579574283e-07f, 5.573975818e-07f, 5.568368697e-07f, 5.562752929e-07f, 5.557128527e-07f, 5.551495503e-07f, 5.545853867e-07f, 5.540203630e-07f, 5.534544805e-07f, 5.528877403e-07f,
-5.523201435e-07f, 5.517516913e-07f, 5.511823847e-07f, 5.506122250e-07f, 5.500412134e-07f, 5.494693508e-07f, 5.488966386e-07f, 5.483230778e-07f, 5.477486696e-07f, 5.471734151e-07f,
-5.465973156e-07f, 5.460203722e-07f, 5.454425860e-07f, 5.448639581e-07f, 5.442844898e-07f, 5.437041823e-07f, 5.431230365e-07f, 5.425410539e-07f, 5.419582354e-07f, 5.413745823e-07f,
-5.407900958e-07f, 5.402047769e-07f, 5.396186269e-07f, 5.390316470e-07f, 5.384438383e-07f, 5.378552020e-07f, 5.372657393e-07f, 5.366754513e-07f, 5.360843393e-07f, 5.354924043e-07f,
-5.348996476e-07f, 5.343060704e-07f, 5.337116739e-07f, 5.331164592e-07f, 5.325204275e-07f, 5.319235800e-07f, 5.313259179e-07f, 5.307274424e-07f, 5.301281547e-07f, 5.295280559e-07f,
-5.289271473e-07f, 5.283254301e-07f, 5.277229054e-07f, 5.271195744e-07f, 5.265154383e-07f, 5.259104984e-07f, 5.253047559e-07f, 5.246982119e-07f, 5.240908676e-07f, 5.234827242e-07f,
-5.228737830e-07f, 5.222640452e-07f, 5.216535119e-07f, 5.210421844e-07f, 5.204300638e-07f, 5.198171515e-07f, 5.192034485e-07f, 5.185889561e-07f, 5.179736756e-07f, 5.173576081e-07f,
-5.167407549e-07f, 5.161231171e-07f, 5.155046960e-07f, 5.148854928e-07f, 5.142655087e-07f, 5.136447450e-07f, 5.130232029e-07f, 5.124008836e-07f, 5.117777882e-07f, 5.111539182e-07f,
-5.105292746e-07f, 5.099038587e-07f, 5.092776717e-07f, 5.086507149e-07f, 5.080229895e-07f, 5.073944967e-07f, 5.067652378e-07f, 5.061352140e-07f, 5.055044265e-07f, 5.048728766e-07f,
-5.042405654e-07f, 5.036074944e-07f, 5.029736646e-07f, 5.023390773e-07f, 5.017037338e-07f, 5.010676354e-07f, 5.004307832e-07f, 4.997931785e-07f, 4.991548225e-07f, 4.985157166e-07f,
-4.978758619e-07f, 4.972352597e-07f, 4.965939112e-07f, 4.959518178e-07f, 4.953089806e-07f, 4.946654009e-07f, 4.940210800e-07f, 4.933760192e-07f, 4.927302196e-07f, 4.920836825e-07f,
-4.914364093e-07f, 4.907884011e-07f, 4.901396592e-07f, 4.894901850e-07f, 4.888399795e-07f, 4.881890442e-07f, 4.875373803e-07f, 4.868849890e-07f, 4.862318717e-07f, 4.855780295e-07f,
-4.849234638e-07f, 4.842681758e-07f, 4.836121669e-07f, 4.829554382e-07f, 4.822979910e-07f, 4.816398267e-07f, 4.809809465e-07f, 4.803213516e-07f, 4.796610434e-07f, 4.790000232e-07f,
-4.783382921e-07f, 4.776758516e-07f, 4.770127028e-07f, 4.763488471e-07f, 4.756842858e-07f, 4.750190201e-07f, 4.743530513e-07f, 4.736863807e-07f, 4.730190096e-07f, 4.723509393e-07f,
-4.716821711e-07f, 4.710127062e-07f, 4.703425461e-07f, 4.696716918e-07f, 4.690001448e-07f, 4.683279064e-07f, 4.676549778e-07f, 4.669813603e-07f, 4.663070552e-07f, 4.656320639e-07f,
-4.649563877e-07f, 4.642800277e-07f, 4.636029854e-07f, 4.629252621e-07f, 4.622468589e-07f, 4.615677774e-07f, 4.608880187e-07f, 4.602075841e-07f, 4.595264750e-07f, 4.588446927e-07f,
-4.581622385e-07f, 4.574791137e-07f, 4.567953195e-07f, 4.561108575e-07f, 4.554257287e-07f, 4.547399346e-07f, 4.540534764e-07f, 4.533663556e-07f, 4.526785733e-07f, 4.519901309e-07f,
-4.513010298e-07f, 4.506112712e-07f, 4.499208565e-07f, 4.492297870e-07f, 4.485380640e-07f, 4.478456889e-07f, 4.471526629e-07f, 4.464589874e-07f, 4.457646637e-07f, 4.450696932e-07f,
-4.443740771e-07f, 4.436778169e-07f, 4.429809137e-07f, 4.422833690e-07f, 4.415851841e-07f, 4.408863603e-07f, 4.401868990e-07f, 4.394868015e-07f, 4.387860691e-07f, 4.380847031e-07f,
-4.373827050e-07f, 4.366800759e-07f, 4.359768174e-07f, 4.352729306e-07f, 4.345684170e-07f, 4.338632779e-07f, 4.331575146e-07f, 4.324511285e-07f, 4.317441209e-07f, 4.310364932e-07f,
-4.303282467e-07f, 4.296193827e-07f, 4.289099026e-07f, 4.281998078e-07f, 4.274890995e-07f, 4.267777792e-07f, 4.260658482e-07f, 4.253533079e-07f, 4.246401595e-07f, 4.239264045e-07f,
-4.232120441e-07f, 4.224970799e-07f, 4.217815130e-07f, 4.210653449e-07f, 4.203485769e-07f, 4.196312104e-07f, 4.189132467e-07f, 4.181946872e-07f, 4.174755333e-07f, 4.167557862e-07f,
-4.160354475e-07f, 4.153145184e-07f, 4.145930002e-07f, 4.138708945e-07f, 4.131482024e-07f, 4.124249255e-07f, 4.117010650e-07f, 4.109766223e-07f, 4.102515989e-07f, 4.095259959e-07f,
-4.087998149e-07f, 4.080730572e-07f, 4.073457242e-07f, 4.066178172e-07f, 4.058893376e-07f, 4.051602868e-07f, 4.044306661e-07f, 4.037004770e-07f, 4.029697208e-07f, 4.022383988e-07f,
-4.015065125e-07f, 4.007740632e-07f, 4.000410524e-07f, 3.993074813e-07f, 3.985733514e-07f, 3.978386640e-07f, 3.971034206e-07f, 3.963676224e-07f, 3.956312710e-07f, 3.948943676e-07f,
-3.941569137e-07f, 3.934189106e-07f, 3.926803598e-07f, 3.919412625e-07f, 3.912016203e-07f, 3.904614344e-07f, 3.897207063e-07f, 3.889794374e-07f, 3.882376290e-07f, 3.874952825e-07f,
-3.867523994e-07f, 3.860089810e-07f, 3.852650287e-07f, 3.845205439e-07f, 3.837755279e-07f, 3.830299823e-07f, 3.822839084e-07f, 3.815373075e-07f, 3.807901811e-07f, 3.800425306e-07f,
-3.792943574e-07f, 3.785456628e-07f, 3.777964482e-07f, 3.770467152e-07f, 3.762964650e-07f, 3.755456990e-07f, 3.747944187e-07f, 3.740426255e-07f, 3.732903208e-07f, 3.725375059e-07f,
-3.717841823e-07f, 3.710303513e-07f, 3.702760145e-07f, 3.695211731e-07f, 3.687658286e-07f, 3.680099824e-07f, 3.672536359e-07f, 3.664967906e-07f, 3.657394477e-07f, 3.649816088e-07f,
-3.642232753e-07f, 3.634644484e-07f, 3.627051298e-07f, 3.619453207e-07f, 3.611850226e-07f, 3.604242369e-07f, 3.596629650e-07f, 3.589012083e-07f, 3.581389682e-07f, 3.573762462e-07f,
-3.566130437e-07f, 3.558493621e-07f, 3.550852028e-07f, 3.543205671e-07f, 3.535554567e-07f, 3.527898727e-07f, 3.520238168e-07f, 3.512572902e-07f, 3.504902945e-07f, 3.497228310e-07f,
-3.489549011e-07f, 3.481865063e-07f, 3.474176480e-07f, 3.466483277e-07f, 3.458785467e-07f, 3.451083064e-07f, 3.443376084e-07f, 3.435664539e-07f, 3.427948445e-07f, 3.420227816e-07f,
-3.412502666e-07f, 3.404773009e-07f, 3.397038859e-07f, 3.389300231e-07f, 3.381557140e-07f, 3.373809598e-07f, 3.366057622e-07f, 3.358301224e-07f, 3.350540419e-07f, 3.342775223e-07f,
-3.335005648e-07f, 3.327231709e-07f, 3.319453421e-07f, 3.311670797e-07f, 3.303883853e-07f, 3.296092603e-07f, 3.288297060e-07f, 3.280497240e-07f, 3.272693156e-07f, 3.264884823e-07f,
-3.257072256e-07f, 3.249255468e-07f, 3.241434474e-07f, 3.233609289e-07f, 3.225779927e-07f, 3.217946402e-07f, 3.210108728e-07f, 3.202266921e-07f, 3.194420994e-07f, 3.186570961e-07f,
-3.178716838e-07f, 3.170858639e-07f, 3.162996378e-07f, 3.155130069e-07f, 3.147259728e-07f, 3.139385367e-07f, 3.131507003e-07f, 3.123624649e-07f, 3.115738319e-07f, 3.107848029e-07f,
-3.099953792e-07f, 3.092055623e-07f, 3.084153537e-07f, 3.076247548e-07f, 3.068337670e-07f, 3.060423919e-07f, 3.052506307e-07f, 3.044584851e-07f, 3.036659564e-07f, 3.028730461e-07f,
-3.020797557e-07f, 3.012860865e-07f, 3.004920401e-07f, 2.996976178e-07f, 2.989028212e-07f, 2.981076517e-07f, 2.973121108e-07f, 2.965161998e-07f, 2.957199203e-07f, 2.949232737e-07f,
-2.941262614e-07f, 2.933288850e-07f, 2.925311458e-07f, 2.917330454e-07f, 2.909345851e-07f, 2.901357665e-07f, 2.893365909e-07f, 2.885370599e-07f, 2.877371749e-07f, 2.869369374e-07f,
-2.861363487e-07f, 2.853354104e-07f, 2.845341240e-07f, 2.837324908e-07f, 2.829305124e-07f, 2.821281902e-07f, 2.813255257e-07f, 2.805225203e-07f, 2.797191754e-07f, 2.789154926e-07f,
-2.781114733e-07f, 2.773071190e-07f, 2.765024311e-07f, 2.756974111e-07f, 2.748920604e-07f, 2.740863805e-07f, 2.732803729e-07f, 2.724740391e-07f, 2.716673804e-07f, 2.708603984e-07f,
-2.700530945e-07f, 2.692454702e-07f, 2.684375270e-07f, 2.676292663e-07f, 2.668206895e-07f, 2.660117982e-07f, 2.652025939e-07f, 2.643930779e-07f, 2.635832517e-07f, 2.627731168e-07f,
-2.619626747e-07f, 2.611519269e-07f, 2.603408748e-07f, 2.595295198e-07f, 2.587178635e-07f, 2.579059073e-07f, 2.570936526e-07f, 2.562811010e-07f, 2.554682540e-07f, 2.546551129e-07f,
-2.538416792e-07f, 2.530279545e-07f, 2.522139402e-07f, 2.513996377e-07f, 2.505850486e-07f, 2.497701742e-07f, 2.489550162e-07f, 2.481395758e-07f, 2.473238547e-07f, 2.465078543e-07f,
-2.456915760e-07f, 2.448750213e-07f, 2.440581917e-07f, 2.432410887e-07f, 2.424237138e-07f, 2.416060683e-07f, 2.407881539e-07f, 2.399699718e-07f, 2.391515238e-07f, 2.383328111e-07f,
-2.375138353e-07f, 2.366945978e-07f, 2.358751002e-07f, 2.350553438e-07f, 2.342353302e-07f, 2.334150609e-07f, 2.325945373e-07f, 2.317737609e-07f, 2.309527331e-07f, 2.301314555e-07f,
-2.293099295e-07f, 2.284881566e-07f, 2.276661382e-07f, 2.268438759e-07f, 2.260213711e-07f, 2.251986253e-07f, 2.243756400e-07f, 2.235524166e-07f, 2.227289567e-07f, 2.219052616e-07f,
-2.210813329e-07f, 2.202571721e-07f, 2.194327806e-07f, 2.186081598e-07f, 2.177833114e-07f, 2.169582367e-07f, 2.161329373e-07f, 2.153074146e-07f, 2.144816700e-07f, 2.136557052e-07f,
-2.128295214e-07f, 2.120031203e-07f, 2.111765033e-07f, 2.103496719e-07f, 2.095226275e-07f, 2.086953717e-07f, 2.078679058e-07f, 2.070402315e-07f, 2.062123501e-07f, 2.053842632e-07f,
-2.045559722e-07f, 2.037274786e-07f, 2.028987839e-07f, 2.020698895e-07f, 2.012407970e-07f, 2.004115078e-07f, 1.995820234e-07f, 1.987523453e-07f, 1.979224750e-07f, 1.970924138e-07f,
-1.962621634e-07f, 1.954317252e-07f, 1.946011007e-07f, 1.937702913e-07f, 1.929392986e-07f, 1.921081239e-07f, 1.912767689e-07f, 1.904452349e-07f, 1.896135235e-07f, 1.887816361e-07f,
-1.879495743e-07f, 1.871173394e-07f, 1.862849330e-07f, 1.854523565e-07f, 1.846196115e-07f, 1.837866994e-07f, 1.829536217e-07f, 1.821203798e-07f, 1.812869753e-07f, 1.804534096e-07f,
-1.796196843e-07f, 1.787858007e-07f, 1.779517604e-07f, 1.771175648e-07f, 1.762832155e-07f, 1.754487139e-07f, 1.746140615e-07f, 1.737792598e-07f, 1.729443102e-07f, 1.721092142e-07f,
-1.712739733e-07f, 1.704385891e-07f, 1.696030629e-07f, 1.687673962e-07f, 1.679315906e-07f, 1.670956475e-07f, 1.662595684e-07f, 1.654233547e-07f, 1.645870080e-07f, 1.637505298e-07f,
-1.629139214e-07f, 1.620771844e-07f, 1.612403203e-07f, 1.604033306e-07f, 1.595662166e-07f, 1.587289800e-07f, 1.578916222e-07f, 1.570541446e-07f, 1.562165488e-07f, 1.553788361e-07f,
-1.545410082e-07f, 1.537030665e-07f, 1.528650124e-07f, 1.520268475e-07f, 1.511885732e-07f, 1.503501909e-07f, 1.495117023e-07f, 1.486731087e-07f, 1.478344116e-07f, 1.469956125e-07f,
-1.461567130e-07f, 1.453177144e-07f, 1.444786182e-07f, 1.436394260e-07f, 1.428001391e-07f, 1.419607591e-07f, 1.411212875e-07f, 1.402817257e-07f, 1.394420753e-07f, 1.386023376e-07f,
-1.377625141e-07f, 1.369226065e-07f, 1.360826160e-07f, 1.352425442e-07f, 1.344023926e-07f, 1.335621627e-07f, 1.327218558e-07f, 1.318814736e-07f, 1.310410174e-07f, 1.302004888e-07f,
-1.293598892e-07f, 1.285192202e-07f, 1.276784831e-07f, 1.268376794e-07f, 1.259968107e-07f, 1.251558784e-07f, 1.243148840e-07f, 1.234738289e-07f, 1.226327146e-07f, 1.217915427e-07f,
-1.209503145e-07f, 1.201090316e-07f, 1.192676954e-07f, 1.184263074e-07f, 1.175848690e-07f, 1.167433818e-07f, 1.159018473e-07f, 1.150602668e-07f, 1.142186419e-07f, 1.133769740e-07f,
-1.125352646e-07f, 1.116935152e-07f, 1.108517273e-07f, 1.100099023e-07f, 1.091680417e-07f, 1.083261469e-07f, 1.074842195e-07f, 1.066422609e-07f, 1.058002725e-07f, 1.049582560e-07f,
-1.041162126e-07f, 1.032741439e-07f, 1.024320514e-07f, 1.015899365e-07f, 1.007478008e-07f, 9.990564554e-08f, 9.906347236e-08f, 9.822128268e-08f, 9.737907798e-08f, 9.653685972e-08f,
-9.569462937e-08f, 9.485238840e-08f, 9.401013827e-08f, 9.316788045e-08f, 9.232561641e-08f, 9.148334762e-08f, 9.064107553e-08f, 8.979880163e-08f, 8.895652736e-08f, 8.811425421e-08f,
-8.727198362e-08f, 8.642971708e-08f, 8.558745604e-08f, 8.474520197e-08f, 8.390295633e-08f, 8.306072058e-08f, 8.221849620e-08f, 8.137628464e-08f, 8.053408736e-08f, 7.969190583e-08f,
-7.884974151e-08f, 7.800759587e-08f, 7.716547036e-08f, 7.632336644e-08f, 7.548128559e-08f, 7.463922925e-08f, 7.379719889e-08f, 7.295519597e-08f, 7.211322194e-08f, 7.127127828e-08f,
-7.042936643e-08f, 6.958748786e-08f, 6.874564403e-08f, 6.790383639e-08f, 6.706206640e-08f, 6.622033552e-08f, 6.537864521e-08f, 6.453699692e-08f, 6.369539211e-08f, 6.285383223e-08f,
-6.201231875e-08f, 6.117085312e-08f, 6.032943679e-08f, 5.948807121e-08f, 5.864675785e-08f, 5.780549816e-08f, 5.696429359e-08f, 5.612314559e-08f, 5.528205562e-08f, 5.444102512e-08f,
-5.360005556e-08f, 5.275914838e-08f, 5.191830504e-08f, 5.107752699e-08f, 5.023681567e-08f, 4.939617254e-08f, 4.855559905e-08f, 4.771509664e-08f, 4.687466678e-08f, 4.603431089e-08f,
-4.519403045e-08f, 4.435382688e-08f, 4.351370164e-08f, 4.267365619e-08f, 4.183369195e-08f, 4.099381039e-08f, 4.015401294e-08f, 3.931430105e-08f, 3.847467617e-08f, 3.763513975e-08f,
-3.679569322e-08f, 3.595633803e-08f, 3.511707562e-08f, 3.427790744e-08f, 3.343883493e-08f, 3.259985954e-08f, 3.176098269e-08f, 3.092220584e-08f, 3.008353043e-08f, 2.924495789e-08f,
-2.840648967e-08f, 2.756812721e-08f, 2.672987194e-08f, 2.589172531e-08f, 2.505368874e-08f, 2.421576369e-08f, 2.337795159e-08f, 2.254025386e-08f, 2.170267196e-08f, 2.086520732e-08f,
-2.002786137e-08f, 1.919063554e-08f, 1.835353127e-08f, 1.751655000e-08f, 1.667969316e-08f, 1.584296218e-08f, 1.500635850e-08f, 1.416988354e-08f, 1.333353874e-08f, 1.249732553e-08f,
-1.166124533e-08f, 1.082529959e-08f, 9.989489731e-09f, 9.153817177e-09f, 8.318283361e-09f, 7.482889710e-09f, 6.647637653e-09f, 5.812528615e-09f, 4.977564024e-09f, 4.142745306e-09f,
-3.308073886e-09f, 2.473551189e-09f, 1.639178640e-09f, 8.049576632e-10f, -2.911031848e-11f, -8.630238820e-10f, -1.696781605e-09f, -2.530382066e-09f, -3.363823842e-09f, -4.197105514e-09f,
--5.030225662e-09f, -5.863182865e-09f, -6.695975704e-09f, -7.528602761e-09f, -8.361062618e-09f, -9.193353857e-09f, -1.002547506e-08f, -1.085742481e-08f, -1.168920170e-08f, -1.252080430e-08f,
--1.335223121e-08f, -1.418348101e-08f, -1.501455228e-08f, -1.584544361e-08f, -1.667615360e-08f, -1.750668082e-08f, -1.833702387e-08f, -1.916718133e-08f, -1.999715180e-08f, -2.082693387e-08f,
--2.165652612e-08f, -2.248592716e-08f, -2.331513557e-08f, -2.414414994e-08f, -2.497296887e-08f, -2.580159095e-08f, -2.663001477e-08f, -2.745823894e-08f, -2.828626205e-08f, -2.911408269e-08f,
--2.994169947e-08f, -3.076911097e-08f, -3.159631580e-08f, -3.242331256e-08f, -3.325009984e-08f, -3.407667625e-08f, -3.490304038e-08f, -3.572919085e-08f, -3.655512624e-08f, -3.738084517e-08f,
--3.820634623e-08f, -3.903162804e-08f, -3.985668919e-08f, -4.068152829e-08f, -4.150614395e-08f, -4.233053477e-08f, -4.315469936e-08f, -4.397863632e-08f, -4.480234428e-08f, -4.562582183e-08f,
--4.644906759e-08f, -4.727208016e-08f, -4.809485816e-08f, -4.891740020e-08f, -4.973970489e-08f, -5.056177084e-08f, -5.138359667e-08f, -5.220518100e-08f, -5.302652243e-08f, -5.384761959e-08f,
--5.466847109e-08f, -5.548907555e-08f, -5.630943158e-08f, -5.712953781e-08f, -5.794939285e-08f, -5.876899532e-08f, -5.958834385e-08f, -6.040743706e-08f, -6.122627356e-08f, -6.204485198e-08f,
--6.286317095e-08f, -6.368122908e-08f, -6.449902501e-08f, -6.531655735e-08f, -6.613382475e-08f, -6.695082581e-08f, -6.776755917e-08f, -6.858402346e-08f, -6.940021731e-08f, -7.021613935e-08f,
--7.103178820e-08f, -7.184716251e-08f, -7.266226089e-08f, -7.347708199e-08f, -7.429162444e-08f, -7.510588687e-08f, -7.591986792e-08f, -7.673356622e-08f, -7.754698041e-08f, -7.836010913e-08f,
--7.917295101e-08f, -7.998550470e-08f, -8.079776883e-08f, -8.160974204e-08f, -8.242142298e-08f, -8.323281029e-08f, -8.404390260e-08f, -8.485469857e-08f, -8.566519683e-08f, -8.647539604e-08f,
--8.728529483e-08f, -8.809489186e-08f, -8.890418577e-08f, -8.971317520e-08f, -9.052185882e-08f, -9.133023526e-08f, -9.213830318e-08f, -9.294606122e-08f, -9.375350805e-08f, -9.456064231e-08f,
--9.536746266e-08f, -9.617396775e-08f, -9.698015623e-08f, -9.778602677e-08f, -9.859157802e-08f, -9.939680863e-08f, -1.002017173e-07f, -1.010063026e-07f, -1.018105633e-07f, -1.026144979e-07f,
--1.034181053e-07f, -1.042213839e-07f, -1.050243326e-07f, -1.058269499e-07f, -1.066292345e-07f, -1.074311851e-07f, -1.082328004e-07f, -1.090340790e-07f, -1.098350196e-07f, -1.106356208e-07f,
--1.114358814e-07f, -1.122357999e-07f, -1.130353752e-07f, -1.138346057e-07f, -1.146334903e-07f, -1.154320276e-07f, -1.162302162e-07f, -1.170280549e-07f, -1.178255423e-07f, -1.186226771e-07f,
--1.194194580e-07f, -1.202158836e-07f, -1.210119526e-07f, -1.218076638e-07f, -1.226030157e-07f, -1.233980071e-07f, -1.241926367e-07f, -1.249869031e-07f, -1.257808051e-07f, -1.265743413e-07f,
--1.273675104e-07f, -1.281603110e-07f, -1.289527420e-07f, -1.297448019e-07f, -1.305364895e-07f, -1.313278034e-07f, -1.321187424e-07f, -1.329093051e-07f, -1.336994902e-07f, -1.344892965e-07f,
--1.352787226e-07f, -1.360677672e-07f, -1.368564290e-07f, -1.376447068e-07f, -1.384325991e-07f, -1.392201048e-07f, -1.400072225e-07f, -1.407939509e-07f, -1.415802887e-07f, -1.423662347e-07f,
--1.431517875e-07f, -1.439369458e-07f, -1.447217084e-07f, -1.455060739e-07f, -1.462900411e-07f, -1.470736087e-07f, -1.478567753e-07f, -1.486395398e-07f, -1.494219007e-07f, -1.502038569e-07f,
--1.509854070e-07f, -1.517665498e-07f, -1.525472839e-07f, -1.533276081e-07f, -1.541075211e-07f, -1.548870216e-07f, -1.556661084e-07f, -1.564447801e-07f, -1.572230355e-07f, -1.580008733e-07f,
--1.587782923e-07f, -1.595552911e-07f, -1.603318685e-07f, -1.611080232e-07f, -1.618837539e-07f, -1.626590594e-07f, -1.634339384e-07f, -1.642083896e-07f, -1.649824118e-07f, -1.657560037e-07f,
--1.665291640e-07f, -1.673018914e-07f, -1.680741848e-07f, -1.688460428e-07f, -1.696174641e-07f, -1.703884476e-07f, -1.711589919e-07f, -1.719290958e-07f, -1.726987580e-07f, -1.734679773e-07f,
--1.742367524e-07f, -1.750050821e-07f, -1.757729651e-07f, -1.765404001e-07f, -1.773073860e-07f, -1.780739214e-07f, -1.788400051e-07f, -1.796056358e-07f, -1.803708124e-07f, -1.811355335e-07f,
--1.818997979e-07f, -1.826636044e-07f, -1.834269517e-07f, -1.841898385e-07f, -1.849522637e-07f, -1.857142261e-07f, -1.864757242e-07f, -1.872367570e-07f, -1.879973231e-07f, -1.887574214e-07f,
--1.895170506e-07f, -1.902762095e-07f, -1.910348968e-07f, -1.917931113e-07f, -1.925508518e-07f, -1.933081170e-07f, -1.940649058e-07f, -1.948212168e-07f, -1.955770489e-07f, -1.963324008e-07f,
--1.970872713e-07f, -1.978416592e-07f, -1.985955633e-07f, -1.993489822e-07f, -2.001019149e-07f, -2.008543601e-07f, -2.016063166e-07f, -2.023577832e-07f, -2.031087585e-07f, -2.038592415e-07f,
--2.046092310e-07f, -2.053587256e-07f, -2.061077242e-07f, -2.068562256e-07f, -2.076042285e-07f, -2.083517318e-07f, -2.090987342e-07f, -2.098452346e-07f, -2.105912317e-07f, -2.113367244e-07f,
--2.120817114e-07f, -2.128261915e-07f, -2.135701635e-07f, -2.143136263e-07f, -2.150565785e-07f, -2.157990191e-07f, -2.165409469e-07f, -2.172823605e-07f, -2.180232589e-07f, -2.187636409e-07f,
--2.195035052e-07f, -2.202428506e-07f, -2.209816761e-07f, -2.217199803e-07f, -2.224577621e-07f, -2.231950203e-07f, -2.239317538e-07f, -2.246679613e-07f, -2.254036416e-07f, -2.261387936e-07f,
--2.268734161e-07f, -2.276075079e-07f, -2.283410678e-07f, -2.290740947e-07f, -2.298065874e-07f, -2.305385447e-07f, -2.312699654e-07f, -2.320008483e-07f, -2.327311924e-07f, -2.334609963e-07f,
--2.341902590e-07f, -2.349189793e-07f, -2.356471560e-07f, -2.363747879e-07f, -2.371018739e-07f, -2.378284128e-07f, -2.385544035e-07f, -2.392798447e-07f, -2.400047354e-07f, -2.407290744e-07f,
--2.414528604e-07f, -2.421760924e-07f, -2.428987693e-07f, -2.436208897e-07f, -2.443424527e-07f, -2.450634569e-07f, -2.457839014e-07f, -2.465037849e-07f, -2.472231063e-07f, -2.479418645e-07f,
--2.486600582e-07f, -2.493776864e-07f, -2.500947480e-07f, -2.508112416e-07f, -2.515271663e-07f, -2.522425209e-07f, -2.529573043e-07f, -2.536715152e-07f, -2.543851526e-07f, -2.550982154e-07f,
--2.558107023e-07f, -2.565226123e-07f, -2.572339443e-07f, -2.579446971e-07f, -2.586548695e-07f, -2.593644605e-07f, -2.600734690e-07f, -2.607818937e-07f, -2.614897336e-07f, -2.621969875e-07f,
--2.629036544e-07f, -2.636097331e-07f, -2.643152225e-07f, -2.650201215e-07f, -2.657244289e-07f, -2.664281436e-07f, -2.671312646e-07f, -2.678337907e-07f, -2.685357208e-07f, -2.692370537e-07f,
--2.699377885e-07f, -2.706379239e-07f, -2.713374589e-07f, -2.720363924e-07f, -2.727347232e-07f, -2.734324503e-07f, -2.741295725e-07f, -2.748260887e-07f, -2.755219980e-07f, -2.762172990e-07f,
--2.769119908e-07f, -2.776060723e-07f, -2.782995424e-07f, -2.789923999e-07f, -2.796846438e-07f, -2.803762730e-07f, -2.810672864e-07f, -2.817576829e-07f, -2.824474614e-07f, -2.831366209e-07f,
--2.838251602e-07f, -2.845130783e-07f, -2.852003741e-07f, -2.858870465e-07f, -2.865730945e-07f, -2.872585169e-07f, -2.879433126e-07f, -2.886274807e-07f, -2.893110200e-07f, -2.899939295e-07f,
--2.906762081e-07f, -2.913578546e-07f, -2.920388681e-07f, -2.927192475e-07f, -2.933989918e-07f, -2.940780997e-07f, -2.947565704e-07f, -2.954344027e-07f, -2.961115955e-07f, -2.967881479e-07f,
--2.974640586e-07f, -2.981393268e-07f, -2.988139514e-07f, -2.994879311e-07f, -3.001612652e-07f, -3.008339524e-07f, -3.015059917e-07f, -3.021773821e-07f, -3.028481225e-07f, -3.035182119e-07f,
--3.041876493e-07f, -3.048564335e-07f, -3.055245636e-07f, -3.061920385e-07f, -3.068588572e-07f, -3.075250186e-07f, -3.081905217e-07f, -3.088553655e-07f, -3.095195489e-07f, -3.101830709e-07f,
--3.108459304e-07f, -3.115081265e-07f, -3.121696581e-07f, -3.128305241e-07f, -3.134907236e-07f, -3.141502556e-07f, -3.148091189e-07f, -3.154673126e-07f, -3.161248357e-07f, -3.167816871e-07f,
--3.174378658e-07f, -3.180933708e-07f, -3.187482011e-07f, -3.194023557e-07f, -3.200558336e-07f, -3.207086337e-07f, -3.213607550e-07f, -3.220121966e-07f, -3.226629574e-07f, -3.233130364e-07f,
--3.239624327e-07f, -3.246111451e-07f, -3.252591728e-07f, -3.259065147e-07f, -3.265531697e-07f, -3.271991370e-07f, -3.278444156e-07f, -3.284890043e-07f, -3.291329023e-07f, -3.297761085e-07f,
--3.304186219e-07f, -3.310604416e-07f, -3.317015666e-07f, -3.323419959e-07f, -3.329817285e-07f, -3.336207633e-07f, -3.342590996e-07f, -3.348967361e-07f, -3.355336721e-07f, -3.361699064e-07f,
--3.368054382e-07f, -3.374402664e-07f, -3.380743901e-07f, -3.387078083e-07f, -3.393405200e-07f, -3.399725242e-07f, -3.406038201e-07f, -3.412344065e-07f, -3.418642827e-07f, -3.424934475e-07f,
--3.431219001e-07f, -3.437496394e-07f, -3.443766645e-07f, -3.450029745e-07f, -3.456285684e-07f, -3.462534453e-07f, -3.468776041e-07f, -3.475010439e-07f, -3.481237639e-07f, -3.487457629e-07f,
--3.493670402e-07f, -3.499875947e-07f, -3.506074255e-07f, -3.512265316e-07f, -3.518449122e-07f, -3.524625662e-07f, -3.530794927e-07f, -3.536956909e-07f, -3.543111597e-07f, -3.549258982e-07f,
--3.555399055e-07f, -3.561531806e-07f, -3.567657227e-07f, -3.573775307e-07f, -3.579886038e-07f, -3.585989411e-07f, -3.592085416e-07f, -3.598174043e-07f, -3.604255284e-07f, -3.610329130e-07f,
--3.616395571e-07f, -3.622454598e-07f, -3.628506202e-07f, -3.634550374e-07f, -3.640587104e-07f, -3.646616384e-07f, -3.652638204e-07f, -3.658652556e-07f, -3.664659430e-07f, -3.670658817e-07f,
--3.676650708e-07f, -3.682635094e-07f, -3.688611967e-07f, -3.694581316e-07f, -3.700543134e-07f, -3.706497411e-07f, -3.712444138e-07f, -3.718383306e-07f, -3.724314907e-07f, -3.730238931e-07f,
--3.736155369e-07f, -3.742064214e-07f, -3.747965455e-07f, -3.753859083e-07f, -3.759745091e-07f, -3.765623469e-07f, -3.771494209e-07f, -3.777357301e-07f, -3.783212738e-07f, -3.789060509e-07f,
--3.794900606e-07f, -3.800733022e-07f, -3.806557746e-07f, -3.812374770e-07f, -3.818184086e-07f, -3.823985685e-07f, -3.829779558e-07f, -3.835565696e-07f, -3.841344092e-07f, -3.847114735e-07f,
--3.852877619e-07f, -3.858632733e-07f, -3.864380070e-07f, -3.870119622e-07f, -3.875851378e-07f, -3.881575332e-07f, -3.887291474e-07f, -3.892999796e-07f, -3.898700289e-07f, -3.904392946e-07f,
--3.910077757e-07f, -3.915754714e-07f, -3.921423809e-07f, -3.927085033e-07f, -3.932738378e-07f, -3.938383836e-07f, -3.944021398e-07f, -3.949651056e-07f, -3.955272801e-07f, -3.960886626e-07f,
--3.966492522e-07f, -3.972090480e-07f, -3.977680493e-07f, -3.983262552e-07f, -3.988836649e-07f, -3.994402775e-07f, -3.999960924e-07f, -4.005511085e-07f, -4.011053252e-07f, -4.016587415e-07f,
--4.022113568e-07f, -4.027631701e-07f, -4.033141807e-07f, -4.038643878e-07f, -4.044137905e-07f, -4.049623880e-07f, -4.055101796e-07f, -4.060571645e-07f, -4.066033417e-07f, -4.071487106e-07f,
--4.076932703e-07f, -4.082370201e-07f, -4.087799591e-07f, -4.093220865e-07f, -4.098634017e-07f, -4.104039036e-07f, -4.109435917e-07f, -4.114824650e-07f, -4.120205229e-07f, -4.125577645e-07f,
--4.130941890e-07f, -4.136297957e-07f, -4.141645837e-07f, -4.146985524e-07f, -4.152317009e-07f, -4.157640284e-07f, -4.162955342e-07f, -4.168262175e-07f, -4.173560775e-07f, -4.178851135e-07f,
--4.184133247e-07f, -4.189407104e-07f, -4.194672697e-07f, -4.199930019e-07f, -4.205179062e-07f, -4.210419820e-07f, -4.215652283e-07f, -4.220876446e-07f, -4.226092300e-07f, -4.231299837e-07f,
--4.236499050e-07f, -4.241689933e-07f, -4.246872476e-07f, -4.252046673e-07f, -4.257212517e-07f, -4.262369999e-07f, -4.267519113e-07f, -4.272659850e-07f, -4.277792205e-07f, -4.282916168e-07f,
--4.288031734e-07f, -4.293138894e-07f, -4.298237642e-07f, -4.303327969e-07f, -4.308409869e-07f, -4.313483335e-07f, -4.318548358e-07f, -4.323604933e-07f, -4.328653051e-07f, -4.333692706e-07f,
--4.338723890e-07f, -4.343746597e-07f, -4.348760818e-07f, -4.353766547e-07f, -4.358763777e-07f, -4.363752500e-07f, -4.368732710e-07f, -4.373704399e-07f, -4.378667561e-07f, -4.383622188e-07f,
--4.388568273e-07f, -4.393505810e-07f, -4.398434791e-07f, -4.403355209e-07f, -4.408267057e-07f, -4.413170329e-07f, -4.418065018e-07f, -4.422951115e-07f, -4.427828616e-07f, -4.432697512e-07f,
--4.437557797e-07f, -4.442409464e-07f, -4.447252507e-07f, -4.452086917e-07f, -4.456912690e-07f, -4.461729817e-07f, -4.466538292e-07f, -4.471338108e-07f, -4.476129259e-07f, -4.480911738e-07f,
--4.485685538e-07f, -4.490450653e-07f, -4.495207075e-07f, -4.499954798e-07f, -4.504693816e-07f, -4.509424121e-07f, -4.514145708e-07f, -4.518858569e-07f, -4.523562699e-07f, -4.528258090e-07f,
--4.532944736e-07f, -4.537622630e-07f, -4.542291767e-07f, -4.546952139e-07f, -4.551603740e-07f, -4.556246563e-07f, -4.560880603e-07f, -4.565505852e-07f, -4.570122304e-07f, -4.574729954e-07f,
--4.579328793e-07f, -4.583918817e-07f, -4.588500019e-07f, -4.593072393e-07f, -4.597635931e-07f, -4.602190628e-07f, -4.606736478e-07f, -4.611273475e-07f, -4.615801611e-07f, -4.620320881e-07f,
--4.624831279e-07f, -4.629332798e-07f, -4.633825433e-07f, -4.638309177e-07f, -4.642784024e-07f, -4.647249967e-07f, -4.651707002e-07f, -4.656155121e-07f, -4.660594319e-07f, -4.665024589e-07f,
--4.669445926e-07f, -4.673858323e-07f, -4.678261775e-07f, -4.682656275e-07f, -4.687041818e-07f, -4.691418397e-07f, -4.695786007e-07f, -4.700144641e-07f, -4.704494295e-07f, -4.708834961e-07f,
--4.713166634e-07f, -4.717489308e-07f, -4.721802978e-07f, -4.726107637e-07f, -4.730403280e-07f, -4.734689900e-07f, -4.738967493e-07f, -4.743236052e-07f, -4.747495572e-07f, -4.751746046e-07f,
--4.755987470e-07f, -4.760219837e-07f, -4.764443142e-07f, -4.768657379e-07f, -4.772862543e-07f, -4.777058628e-07f, -4.781245628e-07f, -4.785423537e-07f, -4.789592351e-07f, -4.793752063e-07f,
--4.797902669e-07f, -4.802044161e-07f, -4.806176536e-07f, -4.810299788e-07f, -4.814413910e-07f, -4.818518898e-07f, -4.822614746e-07f, -4.826701449e-07f, -4.830779002e-07f, -4.834847398e-07f,
--4.838906633e-07f, -4.842956701e-07f, -4.846997597e-07f, -4.851029315e-07f, -4.855051851e-07f, -4.859065199e-07f, -4.863069354e-07f, -4.867064310e-07f, -4.871050062e-07f, -4.875026605e-07f,
--4.878993935e-07f, -4.882952045e-07f, -4.886900930e-07f, -4.890840586e-07f, -4.894771006e-07f, -4.898692188e-07f, -4.902604124e-07f, -4.906506809e-07f, -4.910400240e-07f, -4.914284411e-07f,
--4.918159316e-07f, -4.922024952e-07f, -4.925881311e-07f, -4.929728391e-07f, -4.933566186e-07f, -4.937394690e-07f, -4.941213900e-07f, -4.945023810e-07f, -4.948824414e-07f, -4.952615709e-07f,
--4.956397690e-07f, -4.960170351e-07f, -4.963933688e-07f, -4.967687696e-07f, -4.971432370e-07f, -4.975167706e-07f, -4.978893698e-07f, -4.982610342e-07f, -4.986317633e-07f, -4.990015567e-07f,
--4.993704139e-07f, -4.997383344e-07f, -5.001053177e-07f, -5.004713634e-07f, -5.008364711e-07f, -5.012006402e-07f, -5.015638703e-07f, -5.019261610e-07f, -5.022875118e-07f, -5.026479222e-07f,
--5.030073918e-07f, -5.033659201e-07f, -5.037235068e-07f, -5.040801513e-07f, -5.044358531e-07f, -5.047906120e-07f, -5.051444274e-07f, -5.054972988e-07f, -5.058492259e-07f, -5.062002082e-07f,
--5.065502453e-07f, -5.068993368e-07f, -5.072474821e-07f, -5.075946809e-07f, -5.079409328e-07f, -5.082862373e-07f, -5.086305940e-07f, -5.089740025e-07f, -5.093164623e-07f, -5.096579731e-07f,
--5.099985345e-07f, -5.103381459e-07f, -5.106768070e-07f, -5.110145175e-07f, -5.113512768e-07f, -5.116870846e-07f, -5.120219404e-07f, -5.123558439e-07f, -5.126887947e-07f, -5.130207923e-07f,
--5.133518364e-07f, -5.136819265e-07f, -5.140110623e-07f, -5.143392434e-07f, -5.146664693e-07f, -5.149927397e-07f, -5.153180543e-07f, -5.156424125e-07f, -5.159658140e-07f, -5.162882585e-07f,
--5.166097456e-07f, -5.169302748e-07f, -5.172498459e-07f, -5.175684583e-07f, -5.178861118e-07f, -5.182028060e-07f, -5.185185405e-07f, -5.188333149e-07f, -5.191471289e-07f, -5.194599820e-07f,
--5.197718741e-07f, -5.200828045e-07f, -5.203927731e-07f, -5.207017795e-07f, -5.210098232e-07f, -5.213169040e-07f, -5.216230214e-07f, -5.219281752e-07f, -5.222323650e-07f, -5.225355904e-07f,
--5.228378510e-07f, -5.231391467e-07f, -5.234394769e-07f, -5.237388413e-07f, -5.240372397e-07f, -5.243346717e-07f, -5.246311369e-07f, -5.249266349e-07f, -5.252211656e-07f, -5.255147285e-07f,
--5.258073233e-07f, -5.260989497e-07f, -5.263896073e-07f, -5.266792959e-07f, -5.269680151e-07f, -5.272557646e-07f, -5.275425440e-07f, -5.278283531e-07f, -5.281131915e-07f, -5.283970589e-07f,
--5.286799551e-07f, -5.289618796e-07f, -5.292428323e-07f, -5.295228127e-07f, -5.298018206e-07f, -5.300798556e-07f, -5.303569176e-07f, -5.306330061e-07f, -5.309081209e-07f, -5.311822616e-07f,
--5.314554281e-07f, -5.317276199e-07f, -5.319988368e-07f, -5.322690786e-07f, -5.325383448e-07f, -5.328066353e-07f, -5.330739498e-07f, -5.333402879e-07f, -5.336056494e-07f, -5.338700340e-07f,
--5.341334415e-07f, -5.343958715e-07f, -5.346573238e-07f, -5.349177981e-07f, -5.351772941e-07f, -5.354358117e-07f, -5.356933504e-07f, -5.359499101e-07f, -5.362054904e-07f, -5.364600912e-07f,
--5.367137121e-07f, -5.369663529e-07f, -5.372180134e-07f, -5.374686933e-07f, -5.377183923e-07f, -5.379671101e-07f, -5.382148467e-07f, -5.384616016e-07f, -5.387073746e-07f, -5.389521656e-07f,
--5.391959742e-07f, -5.394388003e-07f, -5.396806435e-07f, -5.399215036e-07f, -5.401613805e-07f, -5.404002739e-07f, -5.406381835e-07f, -5.408751091e-07f, -5.411110505e-07f, -5.413460074e-07f,
--5.415799797e-07f, -5.418129671e-07f, -5.420449694e-07f, -5.422759864e-07f, -5.425060178e-07f, -5.427350635e-07f, -5.429631232e-07f, -5.431901967e-07f, -5.434162838e-07f, -5.436413843e-07f,
--5.438654980e-07f, -5.440886247e-07f, -5.443107642e-07f, -5.445319163e-07f, -5.447520807e-07f, -5.449712573e-07f, -5.451894459e-07f, -5.454066463e-07f, -5.456228583e-07f, -5.458380816e-07f,
--5.460523163e-07f, -5.462655619e-07f, -5.464778184e-07f, -5.466890855e-07f, -5.468993631e-07f, -5.471086511e-07f, -5.473169491e-07f, -5.475242571e-07f, -5.477305748e-07f, -5.479359022e-07f,
--5.481402390e-07f, -5.483435850e-07f, -5.485459401e-07f, -5.487473041e-07f, -5.489476769e-07f, -5.491470583e-07f, -5.493454481e-07f, -5.495428461e-07f, -5.497392523e-07f, -5.499346664e-07f,
--5.501290884e-07f, -5.503225180e-07f, -5.505149551e-07f, -5.507063995e-07f, -5.508968512e-07f, -5.510863099e-07f, -5.512747755e-07f, -5.514622479e-07f, -5.516487269e-07f, -5.518342124e-07f,
--5.520187043e-07f, -5.522022024e-07f, -5.523847066e-07f, -5.525662168e-07f, -5.527467328e-07f, -5.529262545e-07f, -5.531047817e-07f, -5.532823145e-07f, -5.534588525e-07f, -5.536343958e-07f,
--5.538089441e-07f, -5.539824975e-07f, -5.541550557e-07f, -5.543266186e-07f, -5.544971862e-07f, -5.546667583e-07f, -5.548353348e-07f, -5.550029156e-07f, -5.551695006e-07f, -5.553350897e-07f,
--5.554996828e-07f, -5.556632798e-07f, -5.558258807e-07f, -5.559874852e-07f, -5.561480933e-07f, -5.563077050e-07f, -5.564663201e-07f, -5.566239385e-07f, -5.567805601e-07f, -5.569361850e-07f,
--5.570908129e-07f, -5.572444438e-07f, -5.573970777e-07f, -5.575487143e-07f, -5.576993538e-07f, -5.578489959e-07f, -5.579976407e-07f, -5.581452880e-07f, -5.582919377e-07f, -5.584375899e-07f,
--5.585822444e-07f, -5.587259012e-07f, -5.588685602e-07f, -5.590102214e-07f, -5.591508846e-07f, -5.592905499e-07f, -5.594292172e-07f, -5.595668864e-07f, -5.597035574e-07f, -5.598392303e-07f,
--5.599739050e-07f, -5.601075814e-07f, -5.602402594e-07f, -5.603719392e-07f, -5.605026205e-07f, -5.606323033e-07f, -5.607609877e-07f, -5.608886736e-07f, -5.610153609e-07f, -5.611410496e-07f,
--5.612657397e-07f, -5.613894312e-07f, -5.615121240e-07f, -5.616338181e-07f, -5.617545134e-07f, -5.618742100e-07f, -5.619929079e-07f, -5.621106069e-07f, -5.622273072e-07f, -5.623430086e-07f,
--5.624577112e-07f, -5.625714150e-07f, -5.626841199e-07f, -5.627958259e-07f, -5.629065331e-07f, -5.630162414e-07f, -5.631249508e-07f, -5.632326613e-07f, -5.633393729e-07f, -5.634450857e-07f,
--5.635497996e-07f, -5.636535146e-07f, -5.637562307e-07f, -5.638579480e-07f, -5.639586665e-07f, -5.640583861e-07f, -5.641571069e-07f, -5.642548289e-07f, -5.643515521e-07f, -5.644472766e-07f,
--5.645420023e-07f, -5.646357292e-07f, -5.647284575e-07f, -5.648201871e-07f, -5.649109181e-07f, -5.650006505e-07f, -5.650893842e-07f, -5.651771194e-07f, -5.652638562e-07f, -5.653495944e-07f,
--5.654343342e-07f, -5.655180756e-07f, -5.656008186e-07f, -5.656825633e-07f, -5.657633098e-07f, -5.658430580e-07f, -5.659218081e-07f, -5.659995600e-07f, -5.660763139e-07f, -5.661520697e-07f,
--5.662268276e-07f, -5.663005876e-07f, -5.663733497e-07f, -5.664451141e-07f, -5.665158807e-07f, -5.665856497e-07f, -5.666544211e-07f, -5.667221950e-07f, -5.667889714e-07f, -5.668547504e-07f,
--5.669195321e-07f, -5.669833166e-07f, -5.670461040e-07f, -5.671078942e-07f, -5.671686875e-07f, -5.672284838e-07f, -5.672872833e-07f, -5.673450861e-07f, -5.674018921e-07f, -5.674577016e-07f,
--5.675125147e-07f, -5.675663313e-07f, -5.676191516e-07f, -5.676709758e-07f, -5.677218038e-07f, -5.677716358e-07f, -5.678204719e-07f, -5.678683122e-07f, -5.679151568e-07f, -5.679610058e-07f,
--5.680058593e-07f, -5.680497174e-07f, -5.680925803e-07f, -5.681344480e-07f, -5.681753207e-07f, -5.682151984e-07f, -5.682540813e-07f, -5.682919696e-07f, -5.683288632e-07f, -5.683647625e-07f,
--5.683996674e-07f, -5.684335781e-07f, -5.684664947e-07f, -5.684984174e-07f, -5.685293463e-07f, -5.685592815e-07f, -5.685882232e-07f, -5.686161715e-07f, -5.686431265e-07f, -5.686690884e-07f,
--5.686940573e-07f, -5.687180334e-07f, -5.687410168e-07f, -5.687630076e-07f, -5.687840060e-07f, -5.688040122e-07f, -5.688230263e-07f, -5.688410485e-07f, -5.688580788e-07f, -5.688741175e-07f,
--5.688891648e-07f, -5.689032207e-07f, -5.689162855e-07f, -5.689283593e-07f, -5.689394422e-07f, -5.689495346e-07f, -5.689586364e-07f, -5.689667479e-07f, -5.689738693e-07f, -5.689800007e-07f,
--5.689851423e-07f, -5.689892942e-07f, -5.689924568e-07f, -5.689946301e-07f, -5.689958143e-07f, -5.689960096e-07f, -5.689952162e-07f, -5.689934343e-07f, -5.689906641e-07f, -5.689869057e-07f,
--5.689821594e-07f, -5.689764253e-07f, -5.689697037e-07f, -5.689619947e-07f, -5.689532985e-07f, -5.689436154e-07f, -5.689329456e-07f, -5.689212891e-07f, -5.689086464e-07f, -5.688950175e-07f,
--5.688804026e-07f, -5.688648021e-07f, -5.688482160e-07f, -5.688306447e-07f, -5.688120883e-07f, -5.687925470e-07f, -5.687720210e-07f, -5.687505107e-07f, -5.687280162e-07f, -5.687045376e-07f,
--5.686800754e-07f, -5.686546296e-07f, -5.686282006e-07f, -5.686007884e-07f, -5.685723935e-07f, -5.685430160e-07f, -5.685126561e-07f, -5.684813141e-07f, -5.684489902e-07f, -5.684156847e-07f,
--5.683813978e-07f, -5.683461297e-07f, -5.683098807e-07f, -5.682726511e-07f, -5.682344411e-07f, -5.681952509e-07f, -5.681550808e-07f, -5.681139311e-07f, -5.680718020e-07f, -5.680286937e-07f,
--5.679846066e-07f, -5.679395408e-07f, -5.678934967e-07f, -5.678464746e-07f, -5.677984746e-07f, -5.677494970e-07f, -5.676995422e-07f, -5.676486103e-07f, -5.675967017e-07f, -5.675438166e-07f,
--5.674899554e-07f, -5.674351182e-07f, -5.673793054e-07f, -5.673225173e-07f, -5.672647540e-07f, -5.672060160e-07f, -5.671463035e-07f, -5.670856168e-07f, -5.670239561e-07f, -5.669613218e-07f,
--5.668977142e-07f, -5.668331335e-07f, -5.667675801e-07f, -5.667010542e-07f, -5.666335562e-07f, -5.665650863e-07f, -5.664956448e-07f, -5.664252322e-07f, -5.663538485e-07f, -5.662814942e-07f,
--5.662081696e-07f, -5.661338750e-07f, -5.660586107e-07f, -5.659823770e-07f, -5.659051742e-07f, -5.658270026e-07f, -5.657478626e-07f, -5.656677545e-07f, -5.655866785e-07f, -5.655046351e-07f,
--5.654216246e-07f, -5.653376472e-07f, -5.652527033e-07f, -5.651667933e-07f, -5.650799174e-07f, -5.649920760e-07f, -5.649032695e-07f, -5.648134981e-07f, -5.647227623e-07f, -5.646310622e-07f,
--5.645383984e-07f, -5.644447711e-07f, -5.643501807e-07f, -5.642546274e-07f, -5.641581118e-07f, -5.640606341e-07f, -5.639621946e-07f, -5.638627938e-07f, -5.637624319e-07f, -5.636611094e-07f,
--5.635588266e-07f, -5.634555838e-07f, -5.633513814e-07f, -5.632462198e-07f, -5.631400993e-07f, -5.630330203e-07f, -5.629249832e-07f, -5.628159883e-07f, -5.627060360e-07f, -5.625951267e-07f,
--5.624832608e-07f, -5.623704386e-07f, -5.622566604e-07f, -5.621419268e-07f, -5.620262380e-07f, -5.619095945e-07f, -5.617919965e-07f, -5.616734446e-07f, -5.615539391e-07f, -5.614334804e-07f,
--5.613120688e-07f, -5.611897048e-07f, -5.610663887e-07f, -5.609421210e-07f, -5.608169021e-07f, -5.606907323e-07f, -5.605636120e-07f, -5.604355416e-07f, -5.603065216e-07f, -5.601765524e-07f,
--5.600456343e-07f, -5.599137678e-07f, -5.597809532e-07f, -5.596471910e-07f, -5.595124816e-07f, -5.593768253e-07f, -5.592402228e-07f, -5.591026742e-07f, -5.589641801e-07f, -5.588247408e-07f,
--5.586843569e-07f, -5.585430286e-07f, -5.584007565e-07f, -5.582575409e-07f, -5.581133824e-07f, -5.579682812e-07f, -5.578222379e-07f, -5.576752529e-07f, -5.575273266e-07f, -5.573784594e-07f,
--5.572286518e-07f, -5.570779042e-07f, -5.569262171e-07f, -5.567735909e-07f, -5.566200261e-07f, -5.564655230e-07f, -5.563100822e-07f, -5.561537040e-07f, -5.559963890e-07f, -5.558381376e-07f,
--5.556789502e-07f, -5.555188273e-07f, -5.553577693e-07f, -5.551957767e-07f, -5.550328500e-07f, -5.548689896e-07f, -5.547041959e-07f, -5.545384696e-07f, -5.543718109e-07f, -5.542042204e-07f,
--5.540356985e-07f, -5.538662457e-07f, -5.536958626e-07f, -5.535245494e-07f, -5.533523068e-07f, -5.531791352e-07f, -5.530050350e-07f, -5.528300069e-07f, -5.526540511e-07f, -5.524771683e-07f,
--5.522993588e-07f, -5.521206233e-07f, -5.519409621e-07f, -5.517603757e-07f, -5.515788647e-07f, -5.513964296e-07f, -5.512130707e-07f, -5.510287887e-07f, -5.508435840e-07f, -5.506574571e-07f,
--5.504704085e-07f, -5.502824387e-07f, -5.500935482e-07f, -5.499037376e-07f, -5.497130072e-07f, -5.495213577e-07f, -5.493287895e-07f, -5.491353031e-07f, -5.489408991e-07f, -5.487455779e-07f,
--5.485493401e-07f, -5.483521862e-07f, -5.481541167e-07f, -5.479551321e-07f, -5.477552330e-07f, -5.475544198e-07f, -5.473526930e-07f, -5.471500533e-07f, -5.469465011e-07f, -5.467420370e-07f,
--5.465366614e-07f, -5.463303750e-07f, -5.461231782e-07f, -5.459150716e-07f, -5.457060556e-07f, -5.454961310e-07f, -5.452852981e-07f, -5.450735575e-07f, -5.448609098e-07f, -5.446473555e-07f,
--5.444328951e-07f, -5.442175292e-07f, -5.440012584e-07f, -5.437840831e-07f, -5.435660040e-07f, -5.433470215e-07f, -5.431271363e-07f, -5.429063488e-07f, -5.426846597e-07f, -5.424620695e-07f,
--5.422385788e-07f, -5.420141880e-07f, -5.417888979e-07f, -5.415627088e-07f, -5.413356215e-07f, -5.411076364e-07f, -5.408787541e-07f, -5.406489753e-07f, -5.404183004e-07f, -5.401867300e-07f,
--5.399542648e-07f, -5.397209052e-07f, -5.394866519e-07f, -5.392515054e-07f, -5.390154664e-07f, -5.387785353e-07f, -5.385407128e-07f, -5.383019994e-07f, -5.380623958e-07f, -5.378219025e-07f,
--5.375805201e-07f, -5.373382492e-07f, -5.370950904e-07f, -5.368510443e-07f, -5.366061114e-07f, -5.363602924e-07f, -5.361135879e-07f, -5.358659984e-07f, -5.356175246e-07f, -5.353681670e-07f,
--5.351179263e-07f, -5.348668030e-07f, -5.346147978e-07f, -5.343619113e-07f, -5.341081440e-07f, -5.338534966e-07f, -5.335979697e-07f, -5.333415639e-07f, -5.330842798e-07f, -5.328261180e-07f,
--5.325670792e-07f, -5.323071639e-07f, -5.320463728e-07f, -5.317847065e-07f, -5.315221656e-07f, -5.312587508e-07f, -5.309944626e-07f, -5.307293017e-07f, -5.304632687e-07f, -5.301963642e-07f,
--5.299285889e-07f, -5.296599435e-07f, -5.293904284e-07f, -5.291200444e-07f, -5.288487921e-07f, -5.285766722e-07f, -5.283036852e-07f, -5.280298318e-07f, -5.277551127e-07f, -5.274795285e-07f,
--5.272030798e-07f, -5.269257673e-07f, -5.266475916e-07f, -5.263685534e-07f, -5.260886533e-07f, -5.258078920e-07f, -5.255262701e-07f, -5.252437883e-07f, -5.249604473e-07f, -5.246762476e-07f,
--5.243911900e-07f, -5.241052750e-07f, -5.238185035e-07f, -5.235308759e-07f, -5.232423930e-07f, -5.229530555e-07f, -5.226628640e-07f, -5.223718192e-07f, -5.220799218e-07f, -5.217871723e-07f,
--5.214935715e-07f, -5.211991201e-07f, -5.209038188e-07f, -5.206076681e-07f, -5.203106688e-07f, -5.200128216e-07f, -5.197141272e-07f, -5.194145861e-07f, -5.191141992e-07f, -5.188129670e-07f,
--5.185108903e-07f, -5.182079698e-07f, -5.179042061e-07f, -5.175995999e-07f, -5.172941519e-07f, -5.169878629e-07f, -5.166807334e-07f, -5.163727643e-07f, -5.160639561e-07f, -5.157543097e-07f,
--5.154438256e-07f, -5.151325046e-07f, -5.148203473e-07f, -5.145073546e-07f, -5.141935270e-07f, -5.138788654e-07f, -5.135633703e-07f, -5.132470425e-07f, -5.129298828e-07f, -5.126118917e-07f,
--5.122930701e-07f, -5.119734187e-07f, -5.116529380e-07f, -5.113316290e-07f, -5.110094922e-07f, -5.106865285e-07f, -5.103627385e-07f, -5.100381229e-07f, -5.097126824e-07f, -5.093864179e-07f,
--5.090593300e-07f, -5.087314194e-07f, -5.084026868e-07f, -5.080731331e-07f, -5.077427588e-07f, -5.074115648e-07f, -5.070795518e-07f, -5.067467205e-07f, -5.064130717e-07f, -5.060786060e-07f,
--5.057433243e-07f, -5.054072272e-07f, -5.050703154e-07f, -5.047325899e-07f, -5.043940512e-07f, -5.040547001e-07f, -5.037145374e-07f, -5.033735638e-07f, -5.030317800e-07f, -5.026891869e-07f,
--5.023457851e-07f, -5.020015754e-07f, -5.016565586e-07f, -5.013107354e-07f, -5.009641065e-07f, -5.006166728e-07f, -5.002684349e-07f, -4.999193937e-07f, -4.995695499e-07f, -4.992189042e-07f,
--4.988674575e-07f, -4.985152104e-07f, -4.981621638e-07f, -4.978083184e-07f, -4.974536749e-07f, -4.970982342e-07f, -4.967419971e-07f, -4.963849642e-07f, -4.960271363e-07f, -4.956685143e-07f,
--4.953090990e-07f, -4.949488909e-07f, -4.945878911e-07f, -4.942261002e-07f, -4.938635190e-07f, -4.935001483e-07f, -4.931359889e-07f, -4.927710415e-07f, -4.924053070e-07f, -4.920387861e-07f,
--4.916714797e-07f, -4.913033884e-07f, -4.909345132e-07f, -4.905648547e-07f, -4.901944138e-07f, -4.898231913e-07f, -4.894511879e-07f, -4.890784045e-07f, -4.887048419e-07f, -4.883305008e-07f,
--4.879553821e-07f, -4.875794865e-07f, -4.872028149e-07f, -4.868253680e-07f, -4.864471467e-07f, -4.860681518e-07f, -4.856883840e-07f, -4.853078443e-07f, -4.849265333e-07f, -4.845444519e-07f,
--4.841616009e-07f, -4.837779811e-07f, -4.833935934e-07f, -4.830084385e-07f, -4.826225173e-07f, -4.822358306e-07f, -4.818483791e-07f, -4.814601638e-07f, -4.810711854e-07f, -4.806814448e-07f,
--4.802909427e-07f, -4.798996801e-07f, -4.795076577e-07f, -4.791148764e-07f, -4.787213369e-07f, -4.783270402e-07f, -4.779319870e-07f, -4.775361781e-07f, -4.771396145e-07f, -4.767422969e-07f,
--4.763442262e-07f, -4.759454032e-07f, -4.755458288e-07f, -4.751455037e-07f, -4.747444289e-07f, -4.743426051e-07f, -4.739400332e-07f, -4.735367141e-07f, -4.731326486e-07f, -4.727278374e-07f,
--4.723222816e-07f, -4.719159819e-07f, -4.715089392e-07f, -4.711011543e-07f, -4.706926281e-07f, -4.702833614e-07f, -4.698733551e-07f, -4.694626100e-07f, -4.690511270e-07f, -4.686389070e-07f,
--4.682259507e-07f, -4.678122591e-07f, -4.673978330e-07f, -4.669826734e-07f, -4.665667809e-07f, -4.661501566e-07f, -4.657328012e-07f, -4.653147156e-07f, -4.648959008e-07f, -4.644763575e-07f,
--4.640560866e-07f, -4.636350891e-07f, -4.632133657e-07f, -4.627909174e-07f, -4.623677450e-07f, -4.619438494e-07f, -4.615192314e-07f, -4.610938920e-07f, -4.606678320e-07f, -4.602410523e-07f,
--4.598135538e-07f, -4.593853374e-07f, -4.589564038e-07f, -4.585267541e-07f, -4.580963891e-07f, -4.576653097e-07f, -4.572335168e-07f, -4.568010112e-07f, -4.563677939e-07f, -4.559338657e-07f,
--4.554992276e-07f, -4.550638804e-07f, -4.546278249e-07f, -4.541910622e-07f, -4.537535931e-07f, -4.533154185e-07f, -4.528765393e-07f, -4.524369563e-07f, -4.519966706e-07f, -4.515556829e-07f,
--4.511139942e-07f, -4.506716054e-07f, -4.502285174e-07f, -4.497847311e-07f, -4.493402474e-07f, -4.488950672e-07f, -4.484491914e-07f, -4.480026210e-07f, -4.475553568e-07f, -4.471073997e-07f,
--4.466587506e-07f, -4.462094105e-07f, -4.457593803e-07f, -4.453086609e-07f, -4.448572532e-07f, -4.444051581e-07f, -4.439523766e-07f, -4.434989095e-07f, -4.430447578e-07f, -4.425899224e-07f,
--4.421344042e-07f, -4.416782042e-07f, -4.412213232e-07f, -4.407637622e-07f, -4.403055221e-07f, -4.398466038e-07f, -4.393870084e-07f, -4.389267366e-07f, -4.384657894e-07f, -4.380041678e-07f,
--4.375418727e-07f, -4.370789050e-07f, -4.366152657e-07f, -4.361509556e-07f, -4.356859758e-07f, -4.352203271e-07f, -4.347540106e-07f, -4.342870270e-07f, -4.338193774e-07f, -4.333510628e-07f,
--4.328820840e-07f, -4.324124420e-07f, -4.319421378e-07f, -4.314711722e-07f, -4.309995463e-07f, -4.305272609e-07f, -4.300543171e-07f, -4.295807157e-07f, -4.291064578e-07f, -4.286315442e-07f,
--4.281559759e-07f, -4.276797540e-07f, -4.272028792e-07f, -4.267253527e-07f, -4.262471752e-07f, -4.257683479e-07f, -4.252888716e-07f, -4.248087473e-07f, -4.243279760e-07f, -4.238465586e-07f,
--4.233644961e-07f, -4.228817895e-07f, -4.223984396e-07f, -4.219144475e-07f, -4.214298142e-07f, -4.209445406e-07f, -4.204586276e-07f, -4.199720763e-07f, -4.194848875e-07f, -4.189970624e-07f,
--4.185086018e-07f, -4.180195067e-07f, -4.175297780e-07f, -4.170394169e-07f, -4.165484242e-07f, -4.160568008e-07f, -4.155645479e-07f, -4.150716663e-07f, -4.145781571e-07f, -4.140840211e-07f,
--4.135892595e-07f, -4.130938731e-07f, -4.125978630e-07f, -4.121012301e-07f, -4.116039754e-07f, -4.111061000e-07f, -4.106076047e-07f, -4.101084906e-07f, -4.096087586e-07f, -4.091084098e-07f,
--4.086074451e-07f, -4.081058656e-07f, -4.076036721e-07f, -4.071008658e-07f, -4.065974475e-07f, -4.060934183e-07f, -4.055887792e-07f, -4.050835312e-07f, -4.045776753e-07f, -4.040712124e-07f,
--4.035641435e-07f, -4.030564698e-07f, -4.025481921e-07f, -4.020393114e-07f, -4.015298288e-07f, -4.010197453e-07f, -4.005090618e-07f, -3.999977793e-07f, -3.994858990e-07f, -3.989734217e-07f,
--3.984603485e-07f, -3.979466804e-07f, -3.974324183e-07f, -3.969175634e-07f, -3.964021165e-07f, -3.958860788e-07f, -3.953694512e-07f, -3.948522348e-07f, -3.943344305e-07f, -3.938160393e-07f,
--3.932970623e-07f, -3.927775006e-07f, -3.922573550e-07f, -3.917366266e-07f, -3.912153165e-07f, -3.906934257e-07f, -3.901709551e-07f, -3.896479058e-07f, -3.891242788e-07f, -3.886000752e-07f,
--3.880752959e-07f, -3.875499420e-07f, -3.870240145e-07f, -3.864975145e-07f, -3.859704429e-07f, -3.854428008e-07f, -3.849145892e-07f, -3.843858091e-07f, -3.838564616e-07f, -3.833265476e-07f,
--3.827960683e-07f, -3.822650247e-07f, -3.817334177e-07f, -3.812012485e-07f, -3.806685180e-07f, -3.801352273e-07f, -3.796013774e-07f, -3.790669694e-07f, -3.785320043e-07f, -3.779964831e-07f,
--3.774604068e-07f, -3.769237766e-07f, -3.763865934e-07f, -3.758488583e-07f, -3.753105723e-07f, -3.747717365e-07f, -3.742323519e-07f, -3.736924195e-07f, -3.731519405e-07f, -3.726109158e-07f,
--3.720693464e-07f, -3.715272335e-07f, -3.709845781e-07f, -3.704413812e-07f, -3.698976439e-07f, -3.693533672e-07f, -3.688085522e-07f, -3.682631999e-07f, -3.677173114e-07f, -3.671708877e-07f,
--3.666239299e-07f, -3.660764391e-07f, -3.655284162e-07f, -3.649798623e-07f, -3.644307786e-07f, -3.638811660e-07f, -3.633310257e-07f, -3.627803586e-07f, -3.622291658e-07f, -3.616774485e-07f,
--3.611252076e-07f, -3.605724442e-07f, -3.600191593e-07f, -3.594653541e-07f, -3.589110296e-07f, -3.583561869e-07f, -3.578008270e-07f, -3.572449510e-07f, -3.566885599e-07f, -3.561316548e-07f,
--3.555742369e-07f, -3.550163071e-07f, -3.544578665e-07f, -3.538989163e-07f, -3.533394574e-07f, -3.527794909e-07f, -3.522190179e-07f, -3.516580395e-07f, -3.510965568e-07f, -3.505345708e-07f,
--3.499720826e-07f, -3.494090932e-07f, -3.488456039e-07f, -3.482816155e-07f, -3.477171292e-07f, -3.471521462e-07f, -3.465866673e-07f, -3.460206938e-07f, -3.454542268e-07f, -3.448872672e-07f,
--3.443198162e-07f, -3.437518748e-07f, -3.431834442e-07f, -3.426145254e-07f, -3.420451195e-07f, -3.414752276e-07f, -3.409048508e-07f, -3.403339901e-07f, -3.397626467e-07f, -3.391908216e-07f,
--3.386185159e-07f, -3.380457307e-07f, -3.374724671e-07f, -3.368987262e-07f, -3.363245091e-07f, -3.357498168e-07f, -3.351746505e-07f, -3.345990112e-07f, -3.340229000e-07f, -3.334463181e-07f,
--3.328692665e-07f, -3.322917463e-07f, -3.317137586e-07f, -3.311353045e-07f, -3.305563852e-07f, -3.299770016e-07f, -3.293971549e-07f, -3.288168462e-07f, -3.282360766e-07f, -3.276548472e-07f,
--3.270731590e-07f, -3.264910133e-07f, -3.259084110e-07f, -3.253253533e-07f, -3.247418413e-07f, -3.241578761e-07f, -3.235734588e-07f, -3.229885905e-07f, -3.224032723e-07f, -3.218175053e-07f,
--3.212312906e-07f, -3.206446293e-07f, -3.200575225e-07f, -3.194699714e-07f, -3.188819770e-07f, -3.182935405e-07f, -3.177046629e-07f, -3.171153453e-07f, -3.165255890e-07f, -3.159353949e-07f,
--3.153447642e-07f, -3.147536980e-07f, -3.141621974e-07f, -3.135702636e-07f, -3.129778976e-07f, -3.123851005e-07f, -3.117918735e-07f, -3.111982177e-07f, -3.106041342e-07f, -3.100096241e-07f,
--3.094146886e-07f, -3.088193287e-07f, -3.082235455e-07f, -3.076273402e-07f, -3.070307139e-07f, -3.064336678e-07f, -3.058362028e-07f, -3.052383203e-07f, -3.046400212e-07f, -3.040413067e-07f,
--3.034421779e-07f, -3.028426360e-07f, -3.022426820e-07f, -3.016423171e-07f, -3.010415424e-07f, -3.004403590e-07f, -2.998387681e-07f, -2.992367708e-07f, -2.986343682e-07f, -2.980315614e-07f,
--2.974283516e-07f, -2.968247399e-07f, -2.962207274e-07f, -2.956163152e-07f, -2.950115045e-07f, -2.944062964e-07f, -2.938006920e-07f, -2.931946924e-07f, -2.925882989e-07f, -2.919815125e-07f,
--2.913743343e-07f, -2.907667655e-07f, -2.901588072e-07f, -2.895504605e-07f, -2.889417267e-07f, -2.883326067e-07f, -2.877231018e-07f, -2.871132131e-07f, -2.865029416e-07f, -2.858922887e-07f,
--2.852812553e-07f, -2.846698426e-07f, -2.840580518e-07f, -2.834458840e-07f, -2.828333403e-07f, -2.822204219e-07f, -2.816071299e-07f, -2.809934654e-07f, -2.803794296e-07f, -2.797650236e-07f,
--2.791502487e-07f, -2.785351058e-07f, -2.779195961e-07f, -2.773037209e-07f, -2.766874812e-07f, -2.760708781e-07f, -2.754539129e-07f, -2.748365866e-07f, -2.742189004e-07f, -2.736008555e-07f,
--2.729824529e-07f, -2.723636939e-07f, -2.717445796e-07f, -2.711251111e-07f, -2.705052895e-07f, -2.698851161e-07f, -2.692645920e-07f, -2.686437182e-07f, -2.680224960e-07f, -2.674009265e-07f,
--2.667790109e-07f, -2.661567502e-07f, -2.655341457e-07f, -2.649111986e-07f, -2.642879098e-07f, -2.636642807e-07f, -2.630403123e-07f, -2.624160058e-07f, -2.617913624e-07f, -2.611663831e-07f,
--2.605410692e-07f, -2.599154219e-07f, -2.592894422e-07f, -2.586631313e-07f, -2.580364903e-07f, -2.574095205e-07f, -2.567822230e-07f, -2.561545989e-07f, -2.555266494e-07f, -2.548983756e-07f,
--2.542697787e-07f, -2.536408598e-07f, -2.530116202e-07f, -2.523820609e-07f, -2.517521832e-07f, -2.511219881e-07f, -2.504914769e-07f, -2.498606506e-07f, -2.492295105e-07f, -2.485980578e-07f,
--2.479662934e-07f, -2.473342187e-07f, -2.467018348e-07f, -2.460691429e-07f, -2.454361440e-07f, -2.448028394e-07f, -2.441692303e-07f, -2.435353177e-07f, -2.429011029e-07f, -2.422665870e-07f,
--2.416317712e-07f, -2.409966566e-07f, -2.403612444e-07f, -2.397255357e-07f, -2.390895318e-07f, -2.384532338e-07f, -2.378166428e-07f, -2.371797600e-07f, -2.365425867e-07f, -2.359051238e-07f,
--2.352673727e-07f, -2.346293345e-07f, -2.339910103e-07f, -2.333524012e-07f, -2.327135086e-07f, -2.320743335e-07f, -2.314348771e-07f, -2.307951406e-07f, -2.301551251e-07f, -2.295148319e-07f,
--2.288742620e-07f, -2.282334166e-07f, -2.275922969e-07f, -2.269509042e-07f, -2.263092394e-07f, -2.256673039e-07f, -2.250250988e-07f, -2.243826252e-07f, -2.237398844e-07f, -2.230968774e-07f,
--2.224536055e-07f, -2.218100699e-07f, -2.211662716e-07f, -2.205222119e-07f, -2.198778920e-07f, -2.192333130e-07f, -2.185884761e-07f, -2.179433824e-07f, -2.172980332e-07f, -2.166524295e-07f,
--2.160065727e-07f, -2.153604638e-07f, -2.147141040e-07f, -2.140674945e-07f, -2.134206365e-07f, -2.127735311e-07f, -2.121261796e-07f, -2.114785830e-07f, -2.108307426e-07f, -2.101826595e-07f,
--2.095343350e-07f, -2.088857701e-07f, -2.082369661e-07f, -2.075879242e-07f, -2.069386454e-07f, -2.062891311e-07f, -2.056393823e-07f, -2.049894002e-07f, -2.043391861e-07f, -2.036887410e-07f,
--2.030380662e-07f, -2.023871629e-07f, -2.017360322e-07f, -2.010846752e-07f, -2.004330933e-07f, -1.997812875e-07f, -1.991292591e-07f, -1.984770091e-07f, -1.978245388e-07f, -1.971718494e-07f,
--1.965189421e-07f, -1.958658179e-07f, -1.952124782e-07f, -1.945589240e-07f, -1.939051566e-07f, -1.932511771e-07f, -1.925969868e-07f, -1.919425867e-07f, -1.912879781e-07f, -1.906331621e-07f,
--1.899781400e-07f, -1.893229129e-07f, -1.886674820e-07f, -1.880118484e-07f, -1.873560134e-07f, -1.866999781e-07f, -1.860437438e-07f, -1.853873115e-07f, -1.847306825e-07f, -1.840738579e-07f,
--1.834168390e-07f, -1.827596269e-07f, -1.821022228e-07f, -1.814446279e-07f, -1.807868433e-07f, -1.801288702e-07f, -1.794707099e-07f, -1.788123635e-07f, -1.781538321e-07f, -1.774951170e-07f,
--1.768362194e-07f, -1.761771404e-07f, -1.755178812e-07f, -1.748584430e-07f, -1.741988270e-07f, -1.735390343e-07f, -1.728790661e-07f, -1.722189237e-07f, -1.715586082e-07f, -1.708981208e-07f,
--1.702374626e-07f, -1.695766349e-07f, -1.689156388e-07f, -1.682544756e-07f, -1.675931463e-07f, -1.669316522e-07f, -1.662699945e-07f, -1.656081743e-07f, -1.649461929e-07f, -1.642840514e-07f,
--1.636217510e-07f, -1.629592928e-07f, -1.622966781e-07f, -1.616339081e-07f, -1.609709839e-07f, -1.603079067e-07f, -1.596446778e-07f, -1.589812982e-07f, -1.583177691e-07f, -1.576540918e-07f,
--1.569902675e-07f, -1.563262973e-07f, -1.556621823e-07f, -1.549979239e-07f, -1.543335231e-07f, -1.536689812e-07f, -1.530042993e-07f, -1.523394786e-07f, -1.516745204e-07f, -1.510094257e-07f,
--1.503441958e-07f, -1.496788318e-07f, -1.490133350e-07f, -1.483477065e-07f, -1.476819475e-07f, -1.470160592e-07f, -1.463500428e-07f, -1.456838995e-07f, -1.450176303e-07f, -1.443512367e-07f,
--1.436847196e-07f, -1.430180803e-07f, -1.423513200e-07f, -1.416844398e-07f, -1.410174410e-07f, -1.403503248e-07f, -1.396830922e-07f, -1.390157446e-07f, -1.383482830e-07f, -1.376807087e-07f,
--1.370130228e-07f, -1.363452266e-07f, -1.356773212e-07f, -1.350093078e-07f, -1.343411875e-07f, -1.336729617e-07f, -1.330046314e-07f, -1.323361978e-07f, -1.316676621e-07f, -1.309990256e-07f,
--1.303302893e-07f, -1.296614545e-07f, -1.289925223e-07f, -1.283234940e-07f, -1.276543707e-07f, -1.269851536e-07f, -1.263158438e-07f, -1.256464427e-07f, -1.249769512e-07f, -1.243073708e-07f,
--1.236377024e-07f, -1.229679473e-07f, -1.222981067e-07f, -1.216281818e-07f, -1.209581737e-07f, -1.202880836e-07f, -1.196179127e-07f, -1.189476623e-07f, -1.182773334e-07f, -1.176069272e-07f,
--1.169364450e-07f, -1.162658879e-07f, -1.155952571e-07f, -1.149245538e-07f, -1.142537792e-07f, -1.135829344e-07f, -1.129120206e-07f, -1.122410390e-07f, -1.115699908e-07f, -1.108988772e-07f,
--1.102276993e-07f, -1.095564584e-07f, -1.088851556e-07f, -1.082137920e-07f, -1.075423690e-07f, -1.068708876e-07f, -1.061993490e-07f, -1.055277544e-07f, -1.048561050e-07f, -1.041844020e-07f,
--1.035126466e-07f, -1.028408398e-07f, -1.021689830e-07f, -1.014970773e-07f, -1.008251238e-07f, -1.001531238e-07f, -9.948107841e-08f, -9.880898883e-08f, -9.813685622e-08f, -9.746468178e-08f,
--9.679246668e-08f, -9.612021210e-08f, -9.544791921e-08f, -9.477558919e-08f, -9.410322323e-08f, -9.343082249e-08f, -9.275838816e-08f, -9.208592141e-08f, -9.141342342e-08f, -9.074089536e-08f,
--9.006833842e-08f, -8.939575377e-08f, -8.872314258e-08f, -8.805050603e-08f, -8.737784530e-08f, -8.670516156e-08f, -8.603245599e-08f, -8.535972976e-08f, -8.468698405e-08f, -8.401422004e-08f,
--8.334143889e-08f, -8.266864178e-08f, -8.199582989e-08f, -8.132300440e-08f, -8.065016646e-08f, -7.997731727e-08f, -7.930445799e-08f, -7.863158979e-08f, -7.795871385e-08f, -7.728583134e-08f,
--7.661294344e-08f, -7.594005131e-08f, -7.526715614e-08f, -7.459425908e-08f, -7.392136132e-08f, -7.324846402e-08f, -7.257556835e-08f, -7.190267549e-08f, -7.122978661e-08f, -7.055690288e-08f,
--6.988402547e-08f, -6.921115555e-08f, -6.853829428e-08f, -6.786544284e-08f, -6.719260241e-08f, -6.651977414e-08f, -6.584695920e-08f, -6.517415877e-08f, -6.450137402e-08f, -6.382860610e-08f,
--6.315585620e-08f, -6.248312547e-08f, -6.181041509e-08f, -6.113772622e-08f, -6.046506003e-08f, -5.979241769e-08f, -5.911980036e-08f, -5.844720921e-08f, -5.777464540e-08f, -5.710211010e-08f,
--5.642960448e-08f, -5.575712970e-08f, -5.508468693e-08f, -5.441227732e-08f, -5.373990205e-08f, -5.306756228e-08f, -5.239525917e-08f, -5.172299388e-08f, -5.105076759e-08f, -5.037858144e-08f,
--4.970643661e-08f, -4.903433426e-08f, -4.836227554e-08f, -4.769026162e-08f, -4.701829366e-08f, -4.634637283e-08f, -4.567450028e-08f, -4.500267717e-08f, -4.433090467e-08f, -4.365918393e-08f,
--4.298751611e-08f, -4.231590237e-08f, -4.164434387e-08f, -4.097284178e-08f, -4.030139724e-08f, -3.963001141e-08f, -3.895868546e-08f, -3.828742054e-08f, -3.761621781e-08f, -3.694507842e-08f,
--3.627400353e-08f, -3.560299430e-08f, -3.493205187e-08f, -3.426117742e-08f, -3.359037209e-08f, -3.291963703e-08f, -3.224897340e-08f, -3.157838236e-08f, -3.090786506e-08f, -3.023742265e-08f,
--2.956705628e-08f, -2.889676711e-08f, -2.822655629e-08f, -2.755642496e-08f, -2.688637429e-08f, -2.621640543e-08f, -2.554651951e-08f, -2.487671770e-08f, -2.420700115e-08f, -2.353737100e-08f,
--2.286782840e-08f, -2.219837450e-08f, -2.152901046e-08f, -2.085973741e-08f, -2.019055651e-08f, -1.952146890e-08f, -1.885247573e-08f, -1.818357815e-08f, -1.751477730e-08f, -1.684607433e-08f,
--1.617747038e-08f, -1.550896661e-08f, -1.484056414e-08f, -1.417226414e-08f, -1.350406774e-08f, -1.283597608e-08f, -1.216799031e-08f, -1.150011158e-08f, -1.083234101e-08f, -1.016467976e-08f,
--9.497128973e-09f, -8.829689779e-09f, -8.162363323e-09f, -7.495150745e-09f, -6.828053186e-09f, -6.161071784e-09f, -5.494207678e-09f, -4.827462007e-09f, -4.160835909e-09f, -3.494330522e-09f,
--2.827946982e-09f, -2.161686427e-09f, -1.495549992e-09f, -8.295388147e-10f, -1.636540294e-10f, 5.021032286e-10f, 1.167731825e-09f, 1.833230625e-09f, 2.498598495e-09f, 3.163834302e-09f,
-3.828936914e-09f, 4.493905197e-09f, 5.158738020e-09f, 5.823434251e-09f, 6.487992759e-09f, 7.152412415e-09f, 7.816692087e-09f, 8.480830646e-09f, 9.144826963e-09f, 9.808679909e-09f,
-1.047238836e-08f, 1.113595118e-08f, 1.179936724e-08f, 1.246263543e-08f, 1.312575460e-08f, 1.378872365e-08f, 1.445154143e-08f, 1.511420684e-08f, 1.577671873e-08f, 1.643907599e-08f,
-1.710127750e-08f, 1.776332213e-08f, 1.842520875e-08f, 1.908693626e-08f, 1.974850352e-08f, 2.040990941e-08f, 2.107115282e-08f, 2.173223262e-08f, 2.239314770e-08f, 2.305389693e-08f,
-2.371447920e-08f, 2.437489338e-08f, 2.503513837e-08f, 2.569521304e-08f, 2.635511628e-08f, 2.701484697e-08f, 2.767440400e-08f, 2.833378625e-08f, 2.899299261e-08f, 2.965202196e-08f,
-3.031087319e-08f, 3.096954518e-08f, 3.162803683e-08f, 3.228634702e-08f, 3.294447465e-08f, 3.360241859e-08f, 3.426017775e-08f, 3.491775100e-08f, 3.557513725e-08f, 3.623233538e-08f,
-3.688934428e-08f, 3.754616285e-08f, 3.820278999e-08f, 3.885922457e-08f, 3.951546551e-08f, 4.017151168e-08f, 4.082736200e-08f, 4.148301534e-08f, 4.213847062e-08f, 4.279372673e-08f,
-4.344878255e-08f, 4.410363701e-08f, 4.475828898e-08f, 4.541273737e-08f, 4.606698108e-08f, 4.672101901e-08f, 4.737485006e-08f, 4.802847314e-08f, 4.868188714e-08f, 4.933509096e-08f,
-4.998808352e-08f, 5.064086370e-08f, 5.129343043e-08f, 5.194578260e-08f, 5.259791911e-08f, 5.324983888e-08f, 5.390154082e-08f, 5.455302382e-08f, 5.520428679e-08f, 5.585532865e-08f,
-5.650614830e-08f, 5.715674466e-08f, 5.780711662e-08f, 5.845726312e-08f, 5.910718304e-08f, 5.975687532e-08f, 6.040633885e-08f, 6.105557255e-08f, 6.170457535e-08f, 6.235334614e-08f,
-6.300188385e-08f, 6.365018739e-08f, 6.429825568e-08f, 6.494608764e-08f, 6.559368218e-08f, 6.624103821e-08f, 6.688815467e-08f, 6.753503047e-08f, 6.818166452e-08f, 6.882805576e-08f,
-6.947420309e-08f, 7.012010545e-08f, 7.076576175e-08f, 7.141117092e-08f, 7.205633189e-08f, 7.270124357e-08f, 7.334590489e-08f, 7.399031478e-08f, 7.463447216e-08f, 7.527837596e-08f,
-7.592202511e-08f, 7.656541854e-08f, 7.720855518e-08f, 7.785143394e-08f, 7.849405378e-08f, 7.913641361e-08f, 7.977851237e-08f, 8.042034899e-08f, 8.106192240e-08f, 8.170323154e-08f,
-8.234427534e-08f, 8.298505274e-08f, 8.362556267e-08f, 8.426580406e-08f, 8.490577586e-08f, 8.554547701e-08f, 8.618490643e-08f, 8.682406307e-08f, 8.746294588e-08f, 8.810155378e-08f,
-8.873988572e-08f, 8.937794064e-08f, 9.001571749e-08f, 9.065321521e-08f, 9.129043274e-08f, 9.192736902e-08f, 9.256402301e-08f, 9.320039364e-08f, 9.383647986e-08f, 9.447228063e-08f,
-9.510779488e-08f, 9.574302157e-08f, 9.637795965e-08f, 9.701260806e-08f, 9.764696576e-08f, 9.828103170e-08f, 9.891480483e-08f, 9.954828410e-08f, 1.001814685e-07f, 1.008143569e-07f,
-1.014469483e-07f, 1.020792417e-07f, 1.027112360e-07f, 1.033429302e-07f, 1.039743232e-07f, 1.046054140e-07f, 1.052362016e-07f, 1.058666849e-07f, 1.064968628e-07f, 1.071267344e-07f,
-1.077562986e-07f, 1.083855543e-07f, 1.090145006e-07f, 1.096431363e-07f, 1.102714605e-07f, 1.108994721e-07f, 1.115271701e-07f, 1.121545535e-07f, 1.127816212e-07f, 1.134083721e-07f,
-1.140348053e-07f, 1.146609198e-07f, 1.152867145e-07f, 1.159121883e-07f, 1.165373403e-07f, 1.171621694e-07f, 1.177866745e-07f, 1.184108548e-07f, 1.190347091e-07f, 1.196582364e-07f,
-1.202814358e-07f, 1.209043060e-07f, 1.215268463e-07f, 1.221490555e-07f, 1.227709326e-07f, 1.233924766e-07f, 1.240136865e-07f, 1.246345612e-07f, 1.252550998e-07f, 1.258753012e-07f,
-1.264951644e-07f, 1.271146884e-07f, 1.277338723e-07f, 1.283527148e-07f, 1.289712152e-07f, 1.295893723e-07f, 1.302071851e-07f, 1.308246527e-07f, 1.314417740e-07f, 1.320585480e-07f,
-1.326749737e-07f, 1.332910501e-07f, 1.339067762e-07f, 1.345221510e-07f, 1.351371735e-07f, 1.357518427e-07f, 1.363661575e-07f, 1.369801171e-07f, 1.375937203e-07f, 1.382069662e-07f,
-1.388198538e-07f, 1.394323820e-07f, 1.400445500e-07f, 1.406563566e-07f, 1.412678009e-07f, 1.418788820e-07f, 1.424895987e-07f, 1.430999502e-07f, 1.437099353e-07f, 1.443195532e-07f,
-1.449288029e-07f, 1.455376832e-07f, 1.461461934e-07f, 1.467543323e-07f, 1.473620990e-07f, 1.479694925e-07f, 1.485765118e-07f, 1.491831559e-07f, 1.497894238e-07f, 1.503953147e-07f,
-1.510008274e-07f, 1.516059610e-07f, 1.522107145e-07f, 1.528150869e-07f, 1.534190773e-07f, 1.540226847e-07f, 1.546259081e-07f, 1.552287465e-07f, 1.558311989e-07f, 1.564332644e-07f,
-1.570349421e-07f, 1.576362308e-07f, 1.582371297e-07f, 1.588376378e-07f, 1.594377541e-07f, 1.600374776e-07f, 1.606368075e-07f, 1.612357426e-07f, 1.618342821e-07f, 1.624324249e-07f,
-1.630301702e-07f, 1.636275169e-07f, 1.642244640e-07f, 1.648210108e-07f, 1.654171560e-07f, 1.660128989e-07f, 1.666082384e-07f, 1.672031736e-07f, 1.677977035e-07f, 1.683918271e-07f,
-1.689855436e-07f, 1.695788519e-07f, 1.701717511e-07f, 1.707642403e-07f, 1.713563185e-07f, 1.719479847e-07f, 1.725392380e-07f, 1.731300774e-07f, 1.737205020e-07f, 1.743105109e-07f,
-1.749001030e-07f, 1.754892775e-07f, 1.760780334e-07f, 1.766663698e-07f, 1.772542857e-07f, 1.778417802e-07f, 1.784288523e-07f, 1.790155010e-07f, 1.796017256e-07f, 1.801875249e-07f,
-1.807728981e-07f, 1.813578443e-07f, 1.819423625e-07f, 1.825264517e-07f, 1.831101110e-07f, 1.836933396e-07f, 1.842761364e-07f, 1.848585005e-07f, 1.854404311e-07f, 1.860219271e-07f,
-1.866029877e-07f, 1.871836119e-07f, 1.877637987e-07f, 1.883435474e-07f, 1.889228569e-07f, 1.895017263e-07f, 1.900801546e-07f, 1.906581411e-07f, 1.912356847e-07f, 1.918127845e-07f,
-1.923894397e-07f, 1.929656492e-07f, 1.935414122e-07f, 1.941167278e-07f, 1.946915950e-07f, 1.952660129e-07f, 1.958399806e-07f, 1.964134973e-07f, 1.969865619e-07f, 1.975591736e-07f,
-1.981313315e-07f, 1.987030347e-07f, 1.992742821e-07f, 1.998450731e-07f, 2.004154066e-07f, 2.009852817e-07f, 2.015546975e-07f, 2.021236532e-07f, 2.026921478e-07f, 2.032601804e-07f,
-2.038277501e-07f, 2.043948561e-07f, 2.049614974e-07f, 2.055276731e-07f, 2.060933824e-07f, 2.066586243e-07f, 2.072233980e-07f, 2.077877025e-07f, 2.083515369e-07f, 2.089149005e-07f,
-2.094777922e-07f, 2.100402112e-07f, 2.106021566e-07f, 2.111636275e-07f, 2.117246231e-07f, 2.122851424e-07f, 2.128451845e-07f, 2.134047487e-07f, 2.139638339e-07f, 2.145224393e-07f,
-2.150805641e-07f, 2.156382073e-07f, 2.161953681e-07f, 2.167520456e-07f, 2.173082389e-07f, 2.178639472e-07f, 2.184191696e-07f, 2.189739051e-07f, 2.195281530e-07f, 2.200819123e-07f,
-2.206351822e-07f, 2.211879619e-07f, 2.217402504e-07f, 2.222920469e-07f, 2.228433505e-07f, 2.233941603e-07f, 2.239444755e-07f, 2.244942953e-07f, 2.250436187e-07f, 2.255924450e-07f,
-2.261407731e-07f, 2.266886024e-07f, 2.272359319e-07f, 2.277827608e-07f, 2.283290881e-07f, 2.288749132e-07f, 2.294202350e-07f, 2.299650528e-07f, 2.305093658e-07f, 2.310531729e-07f,
-2.315964735e-07f, 2.321392666e-07f, 2.326815515e-07f, 2.332233272e-07f, 2.337645929e-07f, 2.343053478e-07f, 2.348455910e-07f, 2.353853217e-07f, 2.359245391e-07f, 2.364632422e-07f,
-2.370014304e-07f, 2.375391026e-07f, 2.380762582e-07f, 2.386128962e-07f, 2.391490159e-07f, 2.396846163e-07f, 2.402196967e-07f, 2.407542562e-07f, 2.412882941e-07f, 2.418218094e-07f,
-2.423548013e-07f, 2.428872690e-07f, 2.434192118e-07f, 2.439506287e-07f, 2.444815189e-07f, 2.450118817e-07f, 2.455417161e-07f, 2.460710214e-07f, 2.465997968e-07f, 2.471280414e-07f,
-2.476557545e-07f, 2.481829351e-07f, 2.487095825e-07f, 2.492356959e-07f, 2.497612745e-07f, 2.502863174e-07f, 2.508108238e-07f, 2.513347930e-07f, 2.518582241e-07f, 2.523811163e-07f,
-2.529034688e-07f, 2.534252808e-07f, 2.539465515e-07f, 2.544672800e-07f, 2.549874657e-07f, 2.555071077e-07f, 2.560262052e-07f, 2.565447573e-07f, 2.570627633e-07f, 2.575802225e-07f,
-2.580971339e-07f, 2.586134969e-07f, 2.591293105e-07f, 2.596445741e-07f, 2.601592868e-07f, 2.606734479e-07f, 2.611870565e-07f, 2.617001119e-07f, 2.622126132e-07f, 2.627245598e-07f,
-2.632359507e-07f, 2.637467853e-07f, 2.642570627e-07f, 2.647667822e-07f, 2.652759430e-07f, 2.657845442e-07f, 2.662925852e-07f, 2.668000652e-07f, 2.673069833e-07f, 2.678133388e-07f,
-2.683191309e-07f, 2.688243589e-07f, 2.693290220e-07f, 2.698331194e-07f, 2.703366504e-07f, 2.708396141e-07f, 2.713420099e-07f, 2.718438368e-07f, 2.723450943e-07f, 2.728457815e-07f,
-2.733458977e-07f, 2.738454420e-07f, 2.743444138e-07f, 2.748428123e-07f, 2.753406367e-07f, 2.758378863e-07f, 2.763345602e-07f, 2.768306579e-07f, 2.773261784e-07f, 2.778211211e-07f,
-2.783154853e-07f, 2.788092700e-07f, 2.793024747e-07f, 2.797950985e-07f, 2.802871408e-07f, 2.807786007e-07f, 2.812694776e-07f, 2.817597706e-07f, 2.822494791e-07f, 2.827386023e-07f,
-2.832271395e-07f, 2.837150899e-07f, 2.842024528e-07f, 2.846892275e-07f, 2.851754131e-07f, 2.856610091e-07f, 2.861460146e-07f, 2.866304290e-07f, 2.871142515e-07f, 2.875974813e-07f,
-2.880801178e-07f, 2.885621602e-07f, 2.890436078e-07f, 2.895244599e-07f, 2.900047157e-07f, 2.904843746e-07f, 2.909634357e-07f, 2.914418985e-07f, 2.919197621e-07f, 2.923970259e-07f,
-2.928736891e-07f, 2.933497511e-07f, 2.938252111e-07f, 2.943000683e-07f, 2.947743222e-07f, 2.952479720e-07f, 2.957210169e-07f, 2.961934563e-07f, 2.966652895e-07f, 2.971365157e-07f,
-2.976071343e-07f, 2.980771445e-07f, 2.985465457e-07f, 2.990153372e-07f, 2.994835182e-07f, 2.999510881e-07f, 3.004180461e-07f, 3.008843916e-07f, 3.013501238e-07f, 3.018152422e-07f,
-3.022797459e-07f, 3.027436344e-07f, 3.032069068e-07f, 3.036695626e-07f, 3.041316010e-07f, 3.045930214e-07f, 3.050538230e-07f, 3.055140053e-07f, 3.059735674e-07f, 3.064325088e-07f,
-3.068908287e-07f, 3.073485264e-07f, 3.078056014e-07f, 3.082620529e-07f, 3.087178802e-07f, 3.091730827e-07f, 3.096276596e-07f, 3.100816104e-07f, 3.105349344e-07f, 3.109876308e-07f,
-3.114396991e-07f, 3.118911385e-07f, 3.123419485e-07f, 3.127921282e-07f, 3.132416771e-07f, 3.136905945e-07f, 3.141388798e-07f, 3.145865323e-07f, 3.150335512e-07f, 3.154799361e-07f,
-3.159256862e-07f, 3.163708008e-07f, 3.168152794e-07f, 3.172591212e-07f, 3.177023256e-07f, 3.181448920e-07f, 3.185868197e-07f, 3.190281081e-07f, 3.194687565e-07f, 3.199087643e-07f,
-3.203481309e-07f, 3.207868555e-07f, 3.212249376e-07f, 3.216623766e-07f, 3.220991717e-07f, 3.225353223e-07f, 3.229708279e-07f, 3.234056878e-07f, 3.238399013e-07f, 3.242734678e-07f,
-3.247063867e-07f, 3.251386574e-07f, 3.255702792e-07f, 3.260012515e-07f, 3.264315737e-07f, 3.268612451e-07f, 3.272902652e-07f, 3.277186333e-07f, 3.281463488e-07f, 3.285734110e-07f,
-3.289998195e-07f, 3.294255734e-07f, 3.298506723e-07f, 3.302751155e-07f, 3.306989025e-07f, 3.311220325e-07f, 3.315445050e-07f, 3.319663193e-07f, 3.323874749e-07f, 3.328079712e-07f,
-3.332278076e-07f, 3.336469834e-07f, 3.340654980e-07f, 3.344833509e-07f, 3.349005415e-07f, 3.353170691e-07f, 3.357329331e-07f, 3.361481331e-07f, 3.365626682e-07f, 3.369765381e-07f,
-3.373897420e-07f, 3.378022795e-07f, 3.382141498e-07f, 3.386253524e-07f, 3.390358868e-07f, 3.394457523e-07f, 3.398549483e-07f, 3.402634744e-07f, 3.406713298e-07f, 3.410785140e-07f,
-3.414850265e-07f, 3.418908666e-07f, 3.422960338e-07f, 3.427005275e-07f, 3.431043471e-07f, 3.435074921e-07f, 3.439099619e-07f, 3.443117559e-07f, 3.447128735e-07f, 3.451133142e-07f,
-3.455130774e-07f, 3.459121626e-07f, 3.463105691e-07f, 3.467082965e-07f, 3.471053441e-07f, 3.475017114e-07f, 3.478973979e-07f, 3.482924029e-07f, 3.486867260e-07f, 3.490803666e-07f,
-3.494733241e-07f, 3.498655979e-07f, 3.502571876e-07f, 3.506480925e-07f, 3.510383121e-07f, 3.514278460e-07f, 3.518166934e-07f, 3.522048540e-07f, 3.525923270e-07f, 3.529791121e-07f,
-3.533652086e-07f, 3.537506161e-07f, 3.541353339e-07f, 3.545193616e-07f, 3.549026986e-07f, 3.552853444e-07f, 3.556672984e-07f, 3.560485602e-07f, 3.564291291e-07f, 3.568090047e-07f,
-3.571881864e-07f, 3.575666737e-07f, 3.579444661e-07f, 3.583215630e-07f, 3.586979640e-07f, 3.590736685e-07f, 3.594486760e-07f, 3.598229859e-07f, 3.601965979e-07f, 3.605695112e-07f,
-3.609417255e-07f, 3.613132402e-07f, 3.616840548e-07f, 3.620541689e-07f, 3.624235818e-07f, 3.627922930e-07f, 3.631603022e-07f, 3.635276087e-07f, 3.638942121e-07f, 3.642601118e-07f,
-3.646253074e-07f, 3.649897984e-07f, 3.653535843e-07f, 3.657166645e-07f, 3.660790385e-07f, 3.664407060e-07f, 3.668016663e-07f, 3.671619191e-07f, 3.675214637e-07f, 3.678802998e-07f,
-3.682384267e-07f, 3.685958442e-07f, 3.689525515e-07f, 3.693085484e-07f, 3.696638342e-07f, 3.700184086e-07f, 3.703722709e-07f, 3.707254209e-07f, 3.710778579e-07f, 3.714295815e-07f,
-3.717805912e-07f, 3.721308866e-07f, 3.724804672e-07f, 3.728293325e-07f, 3.731774820e-07f, 3.735249153e-07f, 3.738716319e-07f, 3.742176313e-07f, 3.745629131e-07f, 3.749074769e-07f,
-3.752513221e-07f, 3.755944483e-07f, 3.759368550e-07f, 3.762785418e-07f, 3.766195083e-07f, 3.769597539e-07f, 3.772992783e-07f, 3.776380809e-07f, 3.779761613e-07f, 3.783135191e-07f,
-3.786501538e-07f, 3.789860650e-07f, 3.793212523e-07f, 3.796557151e-07f, 3.799894531e-07f, 3.803224658e-07f, 3.806547527e-07f, 3.809863135e-07f, 3.813171477e-07f, 3.816472548e-07f,
-3.819766344e-07f, 3.823052862e-07f, 3.826332096e-07f, 3.829604042e-07f, 3.832868697e-07f, 3.836126055e-07f, 3.839376113e-07f, 3.842618865e-07f, 3.845854309e-07f, 3.849082440e-07f,
-3.852303253e-07f, 3.855516745e-07f, 3.858722911e-07f, 3.861921747e-07f, 3.865113249e-07f, 3.868297413e-07f, 3.871474235e-07f, 3.874643710e-07f, 3.877805834e-07f, 3.880960604e-07f,
-3.884108015e-07f, 3.887248064e-07f, 3.890380745e-07f, 3.893506056e-07f, 3.896623993e-07f, 3.899734550e-07f, 3.902837724e-07f, 3.905933512e-07f, 3.909021909e-07f, 3.912102912e-07f,
-3.915176515e-07f, 3.918242717e-07f, 3.921301512e-07f, 3.924352896e-07f, 3.927396867e-07f, 3.930433419e-07f, 3.933462549e-07f, 3.936484254e-07f, 3.939498529e-07f, 3.942505371e-07f,
-3.945504776e-07f, 3.948496740e-07f, 3.951481259e-07f, 3.954458329e-07f, 3.957427948e-07f, 3.960390110e-07f, 3.963344813e-07f, 3.966292053e-07f, 3.969231826e-07f, 3.972164128e-07f,
-3.975088955e-07f, 3.978006305e-07f, 3.980916173e-07f, 3.983818556e-07f, 3.986713450e-07f, 3.989600852e-07f, 3.992480757e-07f, 3.995353163e-07f, 3.998218066e-07f, 4.001075463e-07f,
-4.003925349e-07f, 4.006767722e-07f, 4.009602577e-07f, 4.012429912e-07f, 4.015249723e-07f, 4.018062007e-07f, 4.020866759e-07f, 4.023663977e-07f, 4.026453657e-07f, 4.029235796e-07f,
-4.032010391e-07f, 4.034777438e-07f, 4.037536933e-07f, 4.040288874e-07f, 4.043033256e-07f, 4.045770078e-07f, 4.048499335e-07f, 4.051221024e-07f, 4.053935142e-07f, 4.056641686e-07f,
-4.059340652e-07f, 4.062032037e-07f, 4.064715838e-07f, 4.067392052e-07f, 4.070060675e-07f, 4.072721705e-07f, 4.075375138e-07f, 4.078020972e-07f, 4.080659202e-07f, 4.083289826e-07f,
-4.085912840e-07f, 4.088528243e-07f, 4.091136030e-07f, 4.093736198e-07f, 4.096328745e-07f, 4.098913667e-07f, 4.101490962e-07f, 4.104060626e-07f, 4.106622657e-07f, 4.109177051e-07f,
-4.111723805e-07f, 4.114262917e-07f, 4.116794383e-07f, 4.119318202e-07f, 4.121834368e-07f, 4.124342881e-07f, 4.126843737e-07f, 4.129336933e-07f, 4.131822466e-07f, 4.134300333e-07f,
-4.136770532e-07f, 4.139233060e-07f, 4.141687914e-07f, 4.144135090e-07f, 4.146574588e-07f, 4.149006403e-07f, 4.151430533e-07f, 4.153846975e-07f, 4.156255726e-07f, 4.158656785e-07f,
-4.161050147e-07f, 4.163435811e-07f, 4.165813773e-07f, 4.168184032e-07f, 4.170546584e-07f, 4.172901427e-07f, 4.175248559e-07f, 4.177587975e-07f, 4.179919676e-07f, 4.182243656e-07f,
-4.184559915e-07f, 4.186868449e-07f, 4.189169256e-07f, 4.191462333e-07f, 4.193747678e-07f, 4.196025289e-07f, 4.198295163e-07f, 4.200557297e-07f, 4.202811690e-07f, 4.205058338e-07f,
-4.207297239e-07f, 4.209528392e-07f, 4.211751793e-07f, 4.213967440e-07f, 4.216175331e-07f, 4.218375463e-07f, 4.220567834e-07f, 4.222752442e-07f, 4.224929285e-07f, 4.227098360e-07f,
-4.229259665e-07f, 4.231413198e-07f, 4.233558956e-07f, 4.235696938e-07f, 4.237827140e-07f, 4.239949562e-07f, 4.242064200e-07f, 4.244171052e-07f, 4.246270117e-07f, 4.248361393e-07f,
-4.250444876e-07f, 4.252520565e-07f, 4.254588458e-07f, 4.256648553e-07f, 4.258700848e-07f, 4.260745340e-07f, 4.262782028e-07f, 4.264810909e-07f, 4.266831982e-07f, 4.268845245e-07f,
-4.270850695e-07f, 4.272848331e-07f, 4.274838150e-07f, 4.276820151e-07f, 4.278794332e-07f, 4.280760691e-07f, 4.282719226e-07f, 4.284669934e-07f, 4.286612815e-07f, 4.288547867e-07f,
-4.290475086e-07f, 4.292394473e-07f, 4.294306024e-07f, 4.296209738e-07f, 4.298105614e-07f, 4.299993649e-07f, 4.301873841e-07f, 4.303746190e-07f, 4.305610693e-07f, 4.307467348e-07f,
-4.309316154e-07f, 4.311157109e-07f, 4.312990212e-07f, 4.314815460e-07f, 4.316632852e-07f, 4.318442387e-07f, 4.320244063e-07f, 4.322037878e-07f, 4.323823830e-07f, 4.325601919e-07f,
-4.327372142e-07f, 4.329134498e-07f, 4.330888985e-07f, 4.332635602e-07f, 4.334374348e-07f, 4.336105220e-07f, 4.337828218e-07f, 4.339543340e-07f, 4.341250584e-07f, 4.342949950e-07f,
-4.344641434e-07f, 4.346325037e-07f, 4.348000757e-07f, 4.349668592e-07f, 4.351328542e-07f, 4.352980603e-07f, 4.354624777e-07f, 4.356261060e-07f, 4.357889452e-07f, 4.359509951e-07f,
-4.361122556e-07f, 4.362727266e-07f, 4.364324080e-07f, 4.365912996e-07f, 4.367494013e-07f, 4.369067131e-07f, 4.370632346e-07f, 4.372189659e-07f, 4.373739069e-07f, 4.375280574e-07f,
-4.376814172e-07f, 4.378339864e-07f, 4.379857647e-07f, 4.381367521e-07f, 4.382869485e-07f, 4.384363537e-07f, 4.385849676e-07f, 4.387327902e-07f, 4.388798213e-07f, 4.390260609e-07f,
-4.391715088e-07f, 4.393161649e-07f, 4.394600291e-07f, 4.396031014e-07f, 4.397453817e-07f, 4.398868697e-07f, 4.400275656e-07f, 4.401674691e-07f, 4.403065802e-07f, 4.404448987e-07f,
-4.405824247e-07f, 4.407191580e-07f, 4.408550986e-07f, 4.409902462e-07f, 4.411246010e-07f, 4.412581627e-07f, 4.413909314e-07f, 4.415229069e-07f, 4.416540891e-07f, 4.417844781e-07f,
-4.419140737e-07f, 4.420428758e-07f, 4.421708843e-07f, 4.422980993e-07f, 4.424245206e-07f, 4.425501482e-07f, 4.426749820e-07f, 4.427990220e-07f, 4.429222680e-07f, 4.430447200e-07f,
-4.431663781e-07f, 4.432872420e-07f, 4.434073118e-07f, 4.435265873e-07f, 4.436450686e-07f, 4.437627557e-07f, 4.438796483e-07f, 4.439957466e-07f, 4.441110504e-07f, 4.442255597e-07f,
-4.443392744e-07f, 4.444521946e-07f, 4.445643201e-07f, 4.446756510e-07f, 4.447861872e-07f, 4.448959286e-07f, 4.450048752e-07f, 4.451130270e-07f, 4.452203840e-07f, 4.453269461e-07f,
-4.454327132e-07f, 4.455376854e-07f, 4.456418627e-07f, 4.457452449e-07f, 4.458478322e-07f, 4.459496244e-07f, 4.460506215e-07f, 4.461508235e-07f, 4.462502304e-07f, 4.463488422e-07f,
-4.464466589e-07f, 4.465436803e-07f, 4.466399067e-07f, 4.467353378e-07f, 4.468299737e-07f, 4.469238144e-07f, 4.470168599e-07f, 4.471091102e-07f, 4.472005653e-07f, 4.472912251e-07f,
-4.473810897e-07f, 4.474701590e-07f, 4.475584331e-07f, 4.476459120e-07f, 4.477325956e-07f, 4.478184840e-07f, 4.479035772e-07f, 4.479878752e-07f, 4.480713779e-07f, 4.481540855e-07f,
-4.482359978e-07f, 4.483171150e-07f, 4.483974371e-07f, 4.484769639e-07f, 4.485556957e-07f, 4.486336323e-07f, 4.487107739e-07f, 4.487871203e-07f, 4.488626718e-07f, 4.489374281e-07f,
-4.490113895e-07f, 4.490845559e-07f, 4.491569274e-07f, 4.492285039e-07f, 4.492992856e-07f, 4.493692724e-07f, 4.494384643e-07f, 4.495068615e-07f, 4.495744639e-07f, 4.496412716e-07f,
-4.497072847e-07f, 4.497725030e-07f, 4.498369268e-07f, 4.499005561e-07f, 4.499633908e-07f, 4.500254310e-07f, 4.500866769e-07f, 4.501471283e-07f, 4.502067855e-07f, 4.502656484e-07f,
-4.503237170e-07f, 4.503809915e-07f, 4.504374719e-07f, 4.504931582e-07f, 4.505480506e-07f, 4.506021490e-07f, 4.506554535e-07f, 4.507079642e-07f, 4.507596812e-07f, 4.508106045e-07f,
-4.508607342e-07f, 4.509100703e-07f, 4.509586129e-07f, 4.510063621e-07f, 4.510533180e-07f, 4.510994806e-07f, 4.511448501e-07f, 4.511894264e-07f, 4.512332096e-07f, 4.512761999e-07f,
-4.513183974e-07f, 4.513598020e-07f, 4.514004139e-07f, 4.514402332e-07f, 4.514792599e-07f, 4.515174942e-07f, 4.515549361e-07f, 4.515915857e-07f, 4.516274431e-07f, 4.516625084e-07f,
-4.516967817e-07f, 4.517302631e-07f, 4.517629526e-07f, 4.517948505e-07f, 4.518259567e-07f, 4.518562714e-07f, 4.518857947e-07f, 4.519145267e-07f, 4.519424675e-07f, 4.519696171e-07f,
-4.519959758e-07f, 4.520215435e-07f, 4.520463205e-07f, 4.520703069e-07f, 4.520935026e-07f, 4.521159079e-07f, 4.521375229e-07f, 4.521583477e-07f, 4.521783824e-07f, 4.521976271e-07f,
-4.522160820e-07f, 4.522337471e-07f, 4.522506226e-07f, 4.522667087e-07f, 4.522820054e-07f, 4.522965128e-07f, 4.523102312e-07f, 4.523231605e-07f, 4.523353011e-07f, 4.523466529e-07f,
-4.523572162e-07f, 4.523669910e-07f, 4.523759775e-07f, 4.523841759e-07f, 4.523915863e-07f, 4.523982087e-07f, 4.524040434e-07f, 4.524090906e-07f, 4.524133503e-07f, 4.524168226e-07f,
-4.524195078e-07f, 4.524214061e-07f, 4.524225174e-07f, 4.524228421e-07f, 4.524223802e-07f, 4.524211319e-07f, 4.524190973e-07f, 4.524162767e-07f, 4.524126701e-07f, 4.524082778e-07f,
-4.524030999e-07f, 4.523971365e-07f, 4.523903879e-07f, 4.523828541e-07f, 4.523745354e-07f, 4.523654319e-07f, 4.523555438e-07f, 4.523448713e-07f, 4.523334144e-07f, 4.523211735e-07f,
-4.523081487e-07f, 4.522943401e-07f, 4.522797480e-07f, 4.522643724e-07f, 4.522482137e-07f, 4.522312719e-07f, 4.522135473e-07f, 4.521950400e-07f, 4.521757502e-07f, 4.521556782e-07f,
-4.521348240e-07f, 4.521131880e-07f, 4.520907702e-07f, 4.520675708e-07f, 4.520435902e-07f, 4.520188283e-07f, 4.519932856e-07f, 4.519669621e-07f, 4.519398580e-07f, 4.519119735e-07f,
-4.518833090e-07f, 4.518538644e-07f, 4.518236402e-07f, 4.517926363e-07f, 4.517608532e-07f, 4.517282909e-07f, 4.516949497e-07f, 4.516608298e-07f, 4.516259313e-07f, 4.515902546e-07f,
-4.515537999e-07f, 4.515165672e-07f, 4.514785570e-07f, 4.514397693e-07f, 4.514002044e-07f, 4.513598625e-07f, 4.513187439e-07f, 4.512768488e-07f, 4.512341773e-07f, 4.511907297e-07f,
-4.511465063e-07f, 4.511015073e-07f, 4.510557329e-07f, 4.510091832e-07f, 4.509618587e-07f, 4.509137595e-07f, 4.508648858e-07f, 4.508152378e-07f, 4.507648159e-07f, 4.507136202e-07f,
-4.506616510e-07f, 4.506089086e-07f, 4.505553931e-07f, 4.505011048e-07f, 4.504460440e-07f, 4.503902109e-07f, 4.503336058e-07f, 4.502762289e-07f, 4.502180804e-07f, 4.501591606e-07f,
-4.500994698e-07f, 4.500390083e-07f, 4.499777762e-07f, 4.499157738e-07f, 4.498530014e-07f, 4.497894593e-07f, 4.497251476e-07f, 4.496600668e-07f, 4.495942170e-07f, 4.495275985e-07f,
-4.494602115e-07f, 4.493920564e-07f, 4.493231334e-07f, 4.492534428e-07f, 4.491829848e-07f, 4.491117598e-07f, 4.490397679e-07f, 4.489670095e-07f, 4.488934849e-07f, 4.488191942e-07f,
-4.487441379e-07f, 4.486683162e-07f, 4.485917293e-07f, 4.485143776e-07f, 4.484362613e-07f, 4.483573807e-07f, 4.482777361e-07f, 4.481973278e-07f, 4.481161561e-07f, 4.480342213e-07f,
-4.479515236e-07f, 4.478680634e-07f, 4.477838410e-07f, 4.476988566e-07f, 4.476131105e-07f, 4.475266031e-07f, 4.474393346e-07f, 4.473513054e-07f, 4.472625157e-07f, 4.471729658e-07f,
-4.470826561e-07f, 4.469915869e-07f, 4.468997585e-07f, 4.468071711e-07f, 4.467138251e-07f, 4.466197208e-07f, 4.465248585e-07f, 4.464292385e-07f, 4.463328611e-07f, 4.462357268e-07f,
-4.461378356e-07f, 4.460391881e-07f, 4.459397845e-07f, 4.458396251e-07f, 4.457387103e-07f, 4.456370403e-07f, 4.455346155e-07f, 4.454314363e-07f, 4.453275029e-07f, 4.452228157e-07f,
-4.451173750e-07f, 4.450111811e-07f, 4.449042345e-07f, 4.447965353e-07f, 4.446880839e-07f, 4.445788808e-07f, 4.444689262e-07f, 4.443582204e-07f, 4.442467638e-07f, 4.441345568e-07f,
-4.440215996e-07f, 4.439078926e-07f, 4.437934363e-07f, 4.436782308e-07f, 4.435622766e-07f, 4.434455740e-07f, 4.433281233e-07f, 4.432099250e-07f, 4.430909793e-07f, 4.429712866e-07f,
-4.428508474e-07f, 4.427296618e-07f, 4.426077303e-07f, 4.424850533e-07f, 4.423616310e-07f, 4.422374639e-07f, 4.421125524e-07f, 4.419868967e-07f, 4.418604973e-07f, 4.417333544e-07f,
-4.416054686e-07f, 4.414768401e-07f, 4.413474694e-07f, 4.412173567e-07f, 4.410865025e-07f, 4.409549072e-07f, 4.408225710e-07f, 4.406894944e-07f, 4.405556778e-07f, 4.404211216e-07f,
-4.402858260e-07f, 4.401497916e-07f, 4.400130186e-07f, 4.398755075e-07f, 4.397372587e-07f, 4.395982725e-07f, 4.394585493e-07f, 4.393180895e-07f, 4.391768935e-07f, 4.390349617e-07f,
-4.388922945e-07f, 4.387488922e-07f, 4.386047553e-07f, 4.384598842e-07f, 4.383142792e-07f, 4.381679408e-07f, 4.380208693e-07f, 4.378730652e-07f, 4.377245288e-07f, 4.375752606e-07f,
-4.374252609e-07f, 4.372745302e-07f, 4.371230689e-07f, 4.369708774e-07f, 4.368179560e-07f, 4.366643052e-07f, 4.365099254e-07f, 4.363548171e-07f, 4.361989805e-07f, 4.360424162e-07f,
-4.358851246e-07f, 4.357271060e-07f, 4.355683609e-07f, 4.354088898e-07f, 4.352486929e-07f, 4.350877708e-07f, 4.349261239e-07f, 4.347637526e-07f, 4.346006573e-07f, 4.344368384e-07f,
-4.342722964e-07f, 4.341070317e-07f, 4.339410448e-07f, 4.337743360e-07f, 4.336069058e-07f, 4.334387546e-07f, 4.332698829e-07f, 4.331002911e-07f, 4.329299796e-07f, 4.327589489e-07f,
-4.325871994e-07f, 4.324147315e-07f, 4.322415457e-07f, 4.320676425e-07f, 4.318930222e-07f, 4.317176854e-07f, 4.315416324e-07f, 4.313648638e-07f, 4.311873799e-07f, 4.310091812e-07f,
-4.308302681e-07f, 4.306506412e-07f, 4.304703008e-07f, 4.302892475e-07f, 4.301074817e-07f, 4.299250037e-07f, 4.297418142e-07f, 4.295579135e-07f, 4.293733021e-07f, 4.291879805e-07f,
-4.290019491e-07f, 4.288152083e-07f, 4.286277588e-07f, 4.284396009e-07f, 4.282507350e-07f, 4.280611617e-07f, 4.278708815e-07f, 4.276798947e-07f, 4.274882019e-07f, 4.272958035e-07f,
-4.271027001e-07f, 4.269088920e-07f, 4.267143798e-07f, 4.265191639e-07f, 4.263232449e-07f, 4.261266231e-07f, 4.259292992e-07f, 4.257312734e-07f, 4.255325464e-07f, 4.253331187e-07f,
-4.251329906e-07f, 4.249321628e-07f, 4.247306356e-07f, 4.245284096e-07f, 4.243254852e-07f, 4.241218630e-07f, 4.239175434e-07f, 4.237125270e-07f, 4.235068142e-07f, 4.233004055e-07f,
-4.230933014e-07f, 4.228855025e-07f, 4.226770091e-07f, 4.224678219e-07f, 4.222579413e-07f, 4.220473678e-07f, 4.218361019e-07f, 4.216241441e-07f, 4.214114949e-07f, 4.211981549e-07f,
-4.209841245e-07f, 4.207694043e-07f, 4.205539947e-07f, 4.203378963e-07f, 4.201211096e-07f, 4.199036350e-07f, 4.196854732e-07f, 4.194666245e-07f, 4.192470896e-07f, 4.190268690e-07f,
-4.188059631e-07f, 4.185843725e-07f, 4.183620978e-07f, 4.181391393e-07f, 4.179154977e-07f, 4.176911735e-07f, 4.174661672e-07f, 4.172404793e-07f, 4.170141103e-07f, 4.167870609e-07f,
-4.165593314e-07f, 4.163309225e-07f, 4.161018346e-07f, 4.158720684e-07f, 4.156416243e-07f, 4.154105029e-07f, 4.151787046e-07f, 4.149462301e-07f, 4.147130799e-07f, 4.144792545e-07f,
-4.142447545e-07f, 4.140095804e-07f, 4.137737327e-07f, 4.135372120e-07f, 4.133000188e-07f, 4.130621537e-07f, 4.128236172e-07f, 4.125844099e-07f, 4.123445323e-07f, 4.121039850e-07f,
-4.118627684e-07f, 4.116208833e-07f, 4.113783300e-07f, 4.111351093e-07f, 4.108912215e-07f, 4.106466674e-07f, 4.104014473e-07f, 4.101555620e-07f, 4.099090119e-07f, 4.096617977e-07f,
-4.094139198e-07f, 4.091653789e-07f, 4.089161754e-07f, 4.086663101e-07f, 4.084157833e-07f, 4.081645958e-07f, 4.079127480e-07f, 4.076602405e-07f, 4.074070740e-07f, 4.071532489e-07f,
-4.068987659e-07f, 4.066436255e-07f, 4.063878283e-07f, 4.061313748e-07f, 4.058742657e-07f, 4.056165015e-07f, 4.053580828e-07f, 4.050990101e-07f, 4.048392841e-07f, 4.045789054e-07f,
-4.043178744e-07f, 4.040561919e-07f, 4.037938583e-07f, 4.035308743e-07f, 4.032672405e-07f, 4.030029573e-07f, 4.027380255e-07f, 4.024724457e-07f, 4.022062183e-07f, 4.019393440e-07f,
-4.016718234e-07f, 4.014036571e-07f, 4.011348457e-07f, 4.008653897e-07f, 4.005952898e-07f, 4.003245466e-07f, 4.000531606e-07f, 3.997811325e-07f, 3.995084628e-07f, 3.992351522e-07f,
-3.989612012e-07f, 3.986866106e-07f, 3.984113807e-07f, 3.981355124e-07f, 3.978590061e-07f, 3.975818625e-07f, 3.973040823e-07f, 3.970256659e-07f, 3.967466140e-07f, 3.964669272e-07f,
-3.961866062e-07f, 3.959056516e-07f, 3.956240639e-07f, 3.953418437e-07f, 3.950589918e-07f, 3.947755086e-07f, 3.944913949e-07f, 3.942066513e-07f, 3.939212783e-07f, 3.936352766e-07f,
-3.933486468e-07f, 3.930613895e-07f, 3.927735054e-07f, 3.924849950e-07f, 3.921958591e-07f, 3.919060982e-07f, 3.916157129e-07f, 3.913247040e-07f, 3.910330719e-07f, 3.907408174e-07f,
-3.904479411e-07f, 3.901544436e-07f, 3.898603255e-07f, 3.895655875e-07f, 3.892702302e-07f, 3.889742543e-07f, 3.886776603e-07f, 3.883804490e-07f, 3.880826209e-07f, 3.877841768e-07f,
-3.874851172e-07f, 3.871854427e-07f, 3.868851541e-07f, 3.865842520e-07f, 3.862827370e-07f, 3.859806097e-07f, 3.856778709e-07f, 3.853745211e-07f, 3.850705610e-07f, 3.847659912e-07f,
-3.844608125e-07f, 3.841550254e-07f, 3.838486307e-07f, 3.835416289e-07f, 3.832340207e-07f, 3.829258067e-07f, 3.826169878e-07f, 3.823075643e-07f, 3.819975372e-07f, 3.816869069e-07f,
-3.813756742e-07f, 3.810638397e-07f, 3.807514041e-07f, 3.804383680e-07f, 3.801247321e-07f, 3.798104971e-07f, 3.794956637e-07f, 3.791802324e-07f, 3.788642040e-07f, 3.785475792e-07f,
-3.782303585e-07f, 3.779125427e-07f, 3.775941325e-07f, 3.772751285e-07f, 3.769555314e-07f, 3.766353418e-07f, 3.763145605e-07f, 3.759931881e-07f, 3.756712252e-07f, 3.753486727e-07f,
-3.750255311e-07f, 3.747018011e-07f, 3.743774834e-07f, 3.740525786e-07f, 3.737270876e-07f, 3.734010109e-07f, 3.730743492e-07f, 3.727471032e-07f, 3.724192737e-07f, 3.720908612e-07f,
-3.717618665e-07f, 3.714322902e-07f, 3.711021331e-07f, 3.707713958e-07f, 3.704400790e-07f, 3.701081835e-07f, 3.697757099e-07f, 3.694426588e-07f, 3.691090311e-07f, 3.687748273e-07f,
-3.684400483e-07f, 3.681046946e-07f, 3.677687670e-07f, 3.674322662e-07f, 3.670951928e-07f, 3.667575476e-07f, 3.664193313e-07f, 3.660805446e-07f, 3.657411881e-07f, 3.654012627e-07f,
-3.650607689e-07f, 3.647197075e-07f, 3.643780792e-07f, 3.640358847e-07f, 3.636931247e-07f, 3.633497999e-07f, 3.630059111e-07f, 3.626614589e-07f, 3.623164441e-07f, 3.619708673e-07f,
-3.616247293e-07f, 3.612780307e-07f, 3.609307724e-07f, 3.605829550e-07f, 3.602345792e-07f, 3.598856458e-07f, 3.595361554e-07f, 3.591861088e-07f, 3.588355067e-07f, 3.584843499e-07f,
-3.581326390e-07f, 3.577803747e-07f, 3.574275578e-07f, 3.570741891e-07f, 3.567202692e-07f, 3.563657988e-07f, 3.560107788e-07f, 3.556552097e-07f, 3.552990924e-07f, 3.549424276e-07f,
-3.545852159e-07f, 3.542274582e-07f, 3.538691551e-07f, 3.535103074e-07f, 3.531509159e-07f, 3.527909812e-07f, 3.524305041e-07f, 3.520694853e-07f, 3.517079256e-07f, 3.513458256e-07f,
-3.509831862e-07f, 3.506200081e-07f, 3.502562920e-07f, 3.498920386e-07f, 3.495272487e-07f, 3.491619231e-07f, 3.487960624e-07f, 3.484296674e-07f, 3.480627389e-07f, 3.476952776e-07f,
-3.473272842e-07f, 3.469587595e-07f, 3.465897043e-07f, 3.462201192e-07f, 3.458500051e-07f, 3.454793627e-07f, 3.451081927e-07f, 3.447364959e-07f, 3.443642730e-07f, 3.439915248e-07f,
-3.436182520e-07f, 3.432444554e-07f, 3.428701358e-07f, 3.424952939e-07f, 3.421199304e-07f, 3.417440462e-07f, 3.413676419e-07f, 3.409907183e-07f, 3.406132763e-07f, 3.402353164e-07f,
-3.398568396e-07f, 3.394778466e-07f, 3.390983381e-07f, 3.387183148e-07f, 3.383377777e-07f, 3.379567273e-07f, 3.375751646e-07f, 3.371930902e-07f, 3.368105049e-07f, 3.364274095e-07f,
-3.360438047e-07f, 3.356596914e-07f, 3.352750702e-07f, 3.348899421e-07f, 3.345043076e-07f, 3.341181677e-07f, 3.337315230e-07f, 3.333443743e-07f, 3.329567225e-07f, 3.325685683e-07f,
-3.321799125e-07f, 3.317907558e-07f, 3.314010990e-07f, 3.310109429e-07f, 3.306202883e-07f, 3.302291360e-07f, 3.298374867e-07f, 3.294453412e-07f, 3.290527003e-07f, 3.286595648e-07f,
-3.282659354e-07f, 3.278718130e-07f, 3.274771983e-07f, 3.270820921e-07f, 3.266864952e-07f, 3.262904084e-07f, 3.258938325e-07f, 3.254967682e-07f, 3.250992164e-07f, 3.247011778e-07f,
-3.243026532e-07f, 3.239036435e-07f, 3.235041493e-07f, 3.231041715e-07f, 3.227037110e-07f, 3.223027684e-07f, 3.219013445e-07f, 3.214994403e-07f, 3.210970564e-07f, 3.206941936e-07f,
-3.202908528e-07f, 3.198870348e-07f, 3.194827403e-07f, 3.190779701e-07f, 3.186727251e-07f, 3.182670060e-07f, 3.178608137e-07f, 3.174541489e-07f, 3.170470124e-07f, 3.166394052e-07f,
-3.162313278e-07f, 3.158227812e-07f, 3.154137662e-07f, 3.150042835e-07f, 3.145943340e-07f, 3.141839185e-07f, 3.137730377e-07f, 3.133616926e-07f, 3.129498838e-07f, 3.125376123e-07f,
-3.121248787e-07f, 3.117116840e-07f, 3.112980289e-07f, 3.108839143e-07f, 3.104693409e-07f, 3.100543096e-07f, 3.096388212e-07f, 3.092228765e-07f, 3.088064763e-07f, 3.083896214e-07f,
-3.079723126e-07f, 3.075545509e-07f, 3.071363369e-07f, 3.067176715e-07f, 3.062985555e-07f, 3.058789897e-07f, 3.054589750e-07f, 3.050385121e-07f, 3.046176020e-07f, 3.041962454e-07f,
-3.037744431e-07f, 3.033521959e-07f, 3.029295048e-07f, 3.025063704e-07f, 3.020827937e-07f, 3.016587754e-07f, 3.012343165e-07f, 3.008094176e-07f, 3.003840796e-07f, 2.999583035e-07f,
-2.995320899e-07f, 2.991054397e-07f, 2.986783538e-07f, 2.982508329e-07f, 2.978228780e-07f, 2.973944898e-07f, 2.969656692e-07f, 2.965364169e-07f, 2.961067339e-07f, 2.956766210e-07f,
-2.952460790e-07f, 2.948151087e-07f, 2.943837110e-07f, 2.939518867e-07f, 2.935196367e-07f, 2.930869617e-07f, 2.926538626e-07f, 2.922203403e-07f, 2.917863957e-07f, 2.913520294e-07f,
-2.909172424e-07f, 2.904820355e-07f, 2.900464096e-07f, 2.896103655e-07f, 2.891739040e-07f, 2.887370261e-07f, 2.882997324e-07f, 2.878620239e-07f, 2.874239014e-07f, 2.869853658e-07f,
-2.865464179e-07f, 2.861070585e-07f, 2.856672886e-07f, 2.852271089e-07f, 2.847865202e-07f, 2.843455235e-07f, 2.839041196e-07f, 2.834623094e-07f, 2.830200936e-07f, 2.825774732e-07f,
-2.821344489e-07f, 2.816910217e-07f, 2.812471924e-07f, 2.808029618e-07f, 2.803583309e-07f, 2.799133003e-07f, 2.794678711e-07f, 2.790220441e-07f, 2.785758200e-07f, 2.781291999e-07f,
-2.776821844e-07f, 2.772347746e-07f, 2.767869712e-07f, 2.763387751e-07f, 2.758901871e-07f, 2.754412082e-07f, 2.749918391e-07f, 2.745420808e-07f, 2.740919340e-07f, 2.736413997e-07f,
-2.731904788e-07f, 2.727391720e-07f, 2.722874802e-07f, 2.718354044e-07f, 2.713829453e-07f, 2.709301039e-07f, 2.704768810e-07f, 2.700232774e-07f, 2.695692940e-07f, 2.691149318e-07f,
-2.686601915e-07f, 2.682050740e-07f, 2.677495802e-07f, 2.672937109e-07f, 2.668374671e-07f, 2.663808496e-07f, 2.659238593e-07f, 2.654664970e-07f, 2.650087636e-07f, 2.645506600e-07f,
-2.640921870e-07f, 2.636333456e-07f, 2.631741365e-07f, 2.627145607e-07f, 2.622546190e-07f, 2.617943124e-07f, 2.613336416e-07f, 2.608726076e-07f, 2.604112112e-07f, 2.599494534e-07f,
-2.594873349e-07f, 2.590248567e-07f, 2.585620196e-07f, 2.580988245e-07f, 2.576352723e-07f, 2.571713639e-07f, 2.567071002e-07f, 2.562424819e-07f, 2.557775101e-07f, 2.553121856e-07f,
-2.548465092e-07f, 2.543804819e-07f, 2.539141045e-07f, 2.534473779e-07f, 2.529803030e-07f, 2.525128807e-07f, 2.520451118e-07f, 2.515769973e-07f, 2.511085380e-07f, 2.506397348e-07f,
-2.501705886e-07f, 2.497011003e-07f, 2.492312707e-07f, 2.487611008e-07f, 2.482905915e-07f, 2.478197435e-07f, 2.473485579e-07f, 2.468770354e-07f, 2.464051771e-07f, 2.459329837e-07f,
-2.454604562e-07f, 2.449875954e-07f, 2.445144023e-07f, 2.440408777e-07f, 2.435670225e-07f, 2.430928377e-07f, 2.426183240e-07f, 2.421434825e-07f, 2.416683139e-07f, 2.411928192e-07f,
-2.407169993e-07f, 2.402408550e-07f, 2.397643873e-07f, 2.392875971e-07f, 2.388104852e-07f, 2.383330525e-07f, 2.378553000e-07f, 2.373772285e-07f, 2.368988389e-07f, 2.364201322e-07f,
-2.359411092e-07f, 2.354617708e-07f, 2.349821179e-07f, 2.345021514e-07f, 2.340218722e-07f, 2.335412813e-07f, 2.330603794e-07f, 2.325791676e-07f, 2.320976467e-07f, 2.316158175e-07f,
-2.311336811e-07f, 2.306512383e-07f, 2.301684900e-07f, 2.296854371e-07f, 2.292020805e-07f, 2.287184212e-07f, 2.282344599e-07f, 2.277501977e-07f, 2.272656354e-07f, 2.267807739e-07f,
-2.262956141e-07f, 2.258101570e-07f, 2.253244034e-07f, 2.248383543e-07f, 2.243520105e-07f, 2.238653729e-07f, 2.233784425e-07f, 2.228912202e-07f, 2.224037069e-07f, 2.219159034e-07f,
-2.214278107e-07f, 2.209394297e-07f, 2.204507613e-07f, 2.199618065e-07f, 2.194725660e-07f, 2.189830409e-07f, 2.184932319e-07f, 2.180031402e-07f, 2.175127665e-07f, 2.170221117e-07f,
-2.165311769e-07f, 2.160399628e-07f, 2.155484704e-07f, 2.150567006e-07f, 2.145646543e-07f, 2.140723325e-07f, 2.135797360e-07f, 2.130868658e-07f, 2.125937227e-07f, 2.121003077e-07f,
-2.116066217e-07f, 2.111126656e-07f, 2.106184404e-07f, 2.101239468e-07f, 2.096291860e-07f, 2.091341586e-07f, 2.086388658e-07f, 2.081433084e-07f, 2.076474872e-07f, 2.071514033e-07f,
-2.066550576e-07f, 2.061584509e-07f, 2.056615842e-07f, 2.051644583e-07f, 2.046670743e-07f, 2.041694330e-07f, 2.036715354e-07f, 2.031733823e-07f, 2.026749747e-07f, 2.021763135e-07f,
-2.016773996e-07f, 2.011782339e-07f, 2.006788175e-07f, 2.001791511e-07f, 1.996792356e-07f, 1.991790722e-07f, 1.986786615e-07f, 1.981780046e-07f, 1.976771024e-07f, 1.971759558e-07f,
-1.966745657e-07f, 1.961729330e-07f, 1.956710587e-07f, 1.951689437e-07f, 1.946665890e-07f, 1.941639953e-07f, 1.936611637e-07f, 1.931580951e-07f, 1.926547904e-07f, 1.921512505e-07f,
-1.916474763e-07f, 1.911434688e-07f, 1.906392290e-07f, 1.901347576e-07f, 1.896300557e-07f, 1.891251242e-07f, 1.886199639e-07f, 1.881145759e-07f, 1.876089610e-07f, 1.871031202e-07f,
-1.865970544e-07f, 1.860907645e-07f, 1.855842515e-07f, 1.850775162e-07f, 1.845705597e-07f, 1.840633828e-07f, 1.835559864e-07f, 1.830483715e-07f, 1.825405391e-07f, 1.820324900e-07f,
-1.815242251e-07f, 1.810157454e-07f, 1.805070519e-07f, 1.799981454e-07f, 1.794890269e-07f, 1.789796974e-07f, 1.784701576e-07f, 1.779604086e-07f, 1.774504514e-07f, 1.769402867e-07f,
-1.764299156e-07f, 1.759193390e-07f, 1.754085578e-07f, 1.748975730e-07f, 1.743863854e-07f, 1.738749961e-07f, 1.733634059e-07f, 1.728516157e-07f, 1.723396266e-07f, 1.718274394e-07f,
-1.713150551e-07f, 1.708024745e-07f, 1.702896987e-07f, 1.697767286e-07f, 1.692635650e-07f, 1.687502090e-07f, 1.682366614e-07f, 1.677229233e-07f, 1.672089954e-07f, 1.666948788e-07f,
-1.661805744e-07f, 1.656660831e-07f, 1.651514059e-07f, 1.646365436e-07f, 1.641214973e-07f, 1.636062678e-07f, 1.630908561e-07f, 1.625752632e-07f, 1.620594899e-07f, 1.615435372e-07f,
-1.610274060e-07f, 1.605110973e-07f, 1.599946119e-07f, 1.594779509e-07f, 1.589611152e-07f, 1.584441057e-07f, 1.579269233e-07f, 1.574095690e-07f, 1.568920436e-07f, 1.563743483e-07f,
-1.558564838e-07f, 1.553384511e-07f, 1.548202511e-07f, 1.543018849e-07f, 1.537833532e-07f, 1.532646571e-07f, 1.527457975e-07f, 1.522267754e-07f, 1.517075916e-07f, 1.511882471e-07f,
-1.506687428e-07f, 1.501490797e-07f, 1.496292588e-07f, 1.491092808e-07f, 1.485891469e-07f, 1.480688579e-07f, 1.475484147e-07f, 1.470278183e-07f, 1.465070697e-07f, 1.459861697e-07f,
-1.454651194e-07f, 1.449439196e-07f, 1.444225712e-07f, 1.439010753e-07f, 1.433794328e-07f, 1.428576445e-07f, 1.423357115e-07f, 1.418136347e-07f, 1.412914150e-07f, 1.407690533e-07f,
-1.402465506e-07f, 1.397239078e-07f, 1.392011259e-07f, 1.386782058e-07f, 1.381551484e-07f, 1.376319547e-07f, 1.371086256e-07f, 1.365851621e-07f, 1.360615651e-07f, 1.355378355e-07f,
-1.350139743e-07f, 1.344899823e-07f, 1.339658607e-07f, 1.334416102e-07f, 1.329172318e-07f, 1.323927265e-07f, 1.318680953e-07f, 1.313433389e-07f, 1.308184584e-07f, 1.302934548e-07f,
-1.297683289e-07f, 1.292430817e-07f, 1.287177142e-07f, 1.281922272e-07f, 1.276666217e-07f, 1.271408987e-07f, 1.266150591e-07f, 1.260891039e-07f, 1.255630339e-07f, 1.250368501e-07f,
-1.245105534e-07f, 1.239841449e-07f, 1.234576253e-07f, 1.229309958e-07f, 1.224042571e-07f, 1.218774103e-07f, 1.213504563e-07f, 1.208233960e-07f, 1.202962304e-07f, 1.197689604e-07f,
-1.192415869e-07f, 1.187141109e-07f, 1.181865333e-07f, 1.176588551e-07f, 1.171310772e-07f, 1.166032005e-07f, 1.160752260e-07f, 1.155471546e-07f, 1.150189873e-07f, 1.144907250e-07f,
-1.139623686e-07f, 1.134339191e-07f, 1.129053774e-07f, 1.123767444e-07f, 1.118480212e-07f, 1.113192085e-07f, 1.107903075e-07f, 1.102613189e-07f, 1.097322438e-07f, 1.092030831e-07f,
-1.086738377e-07f, 1.081445085e-07f, 1.076150966e-07f, 1.070856028e-07f, 1.065560281e-07f, 1.060263734e-07f, 1.054966397e-07f, 1.049668278e-07f, 1.044369388e-07f, 1.039069736e-07f,
-1.033769330e-07f, 1.028468182e-07f, 1.023166299e-07f, 1.017863691e-07f, 1.012560368e-07f, 1.007256339e-07f, 1.001951613e-07f, 9.966462003e-08f, 9.913401096e-08f, 9.860333504e-08f,
-9.807259321e-08f, 9.754178641e-08f, 9.701091558e-08f, 9.647998165e-08f, 9.594898556e-08f, 9.541792825e-08f, 9.488681065e-08f, 9.435563371e-08f, 9.382439836e-08f, 9.329310553e-08f,
-9.276175617e-08f, 9.223035121e-08f, 9.169889158e-08f, 9.116737823e-08f, 9.063581209e-08f, 9.010419410e-08f, 8.957252520e-08f, 8.904080631e-08f, 8.850903838e-08f, 8.797722234e-08f,
-8.744535913e-08f, 8.691344968e-08f, 8.638149494e-08f, 8.584949583e-08f, 8.531745329e-08f, 8.478536826e-08f, 8.425324167e-08f, 8.372107446e-08f, 8.318886756e-08f, 8.265662191e-08f,
-8.212433844e-08f, 8.159201809e-08f, 8.105966179e-08f, 8.052727048e-08f, 7.999484509e-08f, 7.946238656e-08f, 7.892989581e-08f, 7.839737379e-08f, 7.786482143e-08f, 7.733223965e-08f,
-7.679962940e-08f, 7.626699161e-08f, 7.573432722e-08f, 7.520163714e-08f, 7.466892233e-08f, 7.413618370e-08f, 7.360342220e-08f, 7.307063876e-08f, 7.253783431e-08f, 7.200500977e-08f,
-7.147216609e-08f, 7.093930420e-08f, 7.040642502e-08f, 6.987352950e-08f, 6.934061855e-08f, 6.880769312e-08f, 6.827475413e-08f, 6.774180251e-08f, 6.720883920e-08f, 6.667586513e-08f,
-6.614288123e-08f, 6.560988842e-08f, 6.507688764e-08f, 6.454387982e-08f, 6.401086588e-08f, 6.347784676e-08f, 6.294482340e-08f, 6.241179670e-08f, 6.187876762e-08f, 6.134573707e-08f,
-6.081270598e-08f, 6.027967528e-08f, 5.974664591e-08f, 5.921361878e-08f, 5.868059484e-08f, 5.814757500e-08f, 5.761456019e-08f, 5.708155134e-08f, 5.654854938e-08f, 5.601555524e-08f,
-5.548256984e-08f, 5.494959410e-08f, 5.441662897e-08f, 5.388367535e-08f, 5.335073419e-08f, 5.281780639e-08f, 5.228489290e-08f, 5.175199463e-08f, 5.121911252e-08f, 5.068624748e-08f,
-5.015340044e-08f, 4.962057232e-08f, 4.908776406e-08f, 4.855497657e-08f, 4.802221078e-08f, 4.748946761e-08f, 4.695674799e-08f, 4.642405283e-08f, 4.589138307e-08f, 4.535873962e-08f,
-4.482612341e-08f, 4.429353536e-08f, 4.376097639e-08f, 4.322844743e-08f, 4.269594939e-08f, 4.216348321e-08f, 4.163104979e-08f, 4.109865006e-08f, 4.056628494e-08f, 4.003395535e-08f,
-3.950166221e-08f, 3.896940645e-08f, 3.843718898e-08f, 3.790501071e-08f, 3.737287258e-08f, 3.684077550e-08f, 3.630872039e-08f, 3.577670816e-08f, 3.524473974e-08f, 3.471281604e-08f,
-3.418093798e-08f, 3.364910648e-08f, 3.311732246e-08f, 3.258558683e-08f, 3.205390050e-08f, 3.152226441e-08f, 3.099067945e-08f, 3.045914656e-08f, 2.992766663e-08f, 2.939624060e-08f,
-2.886486937e-08f, 2.833355386e-08f, 2.780229498e-08f, 2.727109365e-08f, 2.673995078e-08f, 2.620886729e-08f, 2.567784408e-08f, 2.514688208e-08f, 2.461598219e-08f, 2.408514532e-08f,
-2.355437240e-08f, 2.302366433e-08f, 2.249302202e-08f, 2.196244638e-08f, 2.143193833e-08f, 2.090149878e-08f, 2.037112863e-08f, 1.984082880e-08f, 1.931060019e-08f, 1.878044372e-08f,
-1.825036030e-08f, 1.772035083e-08f, 1.719041622e-08f, 1.666055738e-08f, 1.613077523e-08f, 1.560107066e-08f, 1.507144458e-08f, 1.454189790e-08f, 1.401243154e-08f, 1.348304638e-08f,
-1.295374335e-08f, 1.242452334e-08f, 1.189538727e-08f, 1.136633603e-08f, 1.083737053e-08f, 1.030849168e-08f, 9.779700378e-09f, 9.250997529e-09f, 8.722384039e-09f, 8.193860808e-09f,
-7.665428741e-09f, 7.137088739e-09f, 6.608841705e-09f, 6.080688540e-09f, 5.552630146e-09f, 5.024667424e-09f, 4.496801275e-09f, 3.969032598e-09f, 3.441362295e-09f, 2.913791264e-09f,
-2.386320406e-09f, 1.858950618e-09f, 1.331682800e-09f, 8.045178501e-10f, 2.774566659e-10f, -2.494998550e-10f, -7.763508155e-10f, -1.303095319e-09f, -1.829732468e-09f, -2.356261367e-09f,
--2.882681121e-09f, -3.408990834e-09f, -3.935189611e-09f, -4.461276557e-09f, -4.987250779e-09f, -5.513111382e-09f, -6.038857472e-09f, -6.564488158e-09f, -7.090002546e-09f, -7.615399743e-09f,
--8.140678858e-09f, -8.665838999e-09f, -9.190879275e-09f, -9.715798795e-09f, -1.024059667e-08f, -1.076527201e-08f, -1.128982392e-08f, -1.181425151e-08f, -1.233855391e-08f, -1.286273021e-08f,
--1.338677953e-08f, -1.391070098e-08f, -1.443449367e-08f, -1.495815672e-08f, -1.548168925e-08f, -1.600509036e-08f, -1.652835917e-08f, -1.705149479e-08f, -1.757449634e-08f, -1.809736294e-08f,
--1.862009369e-08f, -1.914268773e-08f, -1.966514416e-08f, -2.018746210e-08f, -2.070964067e-08f, -2.123167899e-08f, -2.175357617e-08f, -2.227533133e-08f, -2.279694360e-08f, -2.331841210e-08f,
--2.383973594e-08f, -2.436091424e-08f, -2.488194612e-08f, -2.540283072e-08f, -2.592356714e-08f, -2.644415452e-08f, -2.696459196e-08f, -2.748487861e-08f, -2.800501357e-08f, -2.852499598e-08f,
--2.904482496e-08f, -2.956449964e-08f, -3.008401913e-08f, -3.060338257e-08f, -3.112258908e-08f, -3.164163779e-08f, -3.216052782e-08f, -3.267925831e-08f, -3.319782838e-08f, -3.371623716e-08f,
--3.423448378e-08f, -3.475256737e-08f, -3.527048706e-08f, -3.578824197e-08f, -3.630583125e-08f, -3.682325401e-08f, -3.734050940e-08f, -3.785759655e-08f, -3.837451458e-08f, -3.889126263e-08f,
--3.940783984e-08f, -3.992424533e-08f, -4.044047825e-08f, -4.095653773e-08f, -4.147242290e-08f, -4.198813290e-08f, -4.250366687e-08f, -4.301902394e-08f, -4.353420325e-08f, -4.404920394e-08f,
--4.456402514e-08f, -4.507866601e-08f, -4.559312566e-08f, -4.610740326e-08f, -4.662149793e-08f, -4.713540881e-08f, -4.764913505e-08f, -4.816267580e-08f, -4.867603018e-08f, -4.918919735e-08f,
--4.970217645e-08f, -5.021496662e-08f, -5.072756700e-08f, -5.123997675e-08f, -5.175219500e-08f, -5.226422091e-08f, -5.277605361e-08f, -5.328769226e-08f, -5.379913600e-08f, -5.431038398e-08f,
--5.482143535e-08f, -5.533228926e-08f, -5.584294486e-08f, -5.635340129e-08f, -5.686365771e-08f, -5.737371327e-08f, -5.788356712e-08f, -5.839321842e-08f, -5.890266630e-08f, -5.941190994e-08f,
--5.992094847e-08f, -6.042978106e-08f, -6.093840686e-08f, -6.144682503e-08f, -6.195503472e-08f, -6.246303508e-08f, -6.297082528e-08f, -6.347840446e-08f, -6.398577180e-08f, -6.449292645e-08f,
--6.499986756e-08f, -6.550659429e-08f, -6.601310581e-08f, -6.651940128e-08f, -6.702547985e-08f, -6.753134070e-08f, -6.803698297e-08f, -6.854240584e-08f, -6.904760846e-08f, -6.955259001e-08f,
--7.005734964e-08f, -7.056188651e-08f, -7.106619981e-08f, -7.157028869e-08f, -7.207415231e-08f, -7.257778985e-08f, -7.308120047e-08f, -7.358438334e-08f, -7.408733764e-08f, -7.459006252e-08f,
--7.509255716e-08f, -7.559482073e-08f, -7.609685241e-08f, -7.659865135e-08f, -7.710021674e-08f, -7.760154775e-08f, -7.810264355e-08f, -7.860350331e-08f, -7.910412621e-08f, -7.960451143e-08f,
--8.010465814e-08f, -8.060456551e-08f, -8.110423273e-08f, -8.160365897e-08f, -8.210284341e-08f, -8.260178522e-08f, -8.310048360e-08f, -8.359893770e-08f, -8.409714673e-08f, -8.459510985e-08f,
--8.509282626e-08f, -8.559029512e-08f, -8.608751563e-08f, -8.658448697e-08f, -8.708120831e-08f, -8.757767886e-08f, -8.807389778e-08f, -8.856986428e-08f, -8.906557752e-08f, -8.956103671e-08f,
--9.005624103e-08f, -9.055118966e-08f, -9.104588179e-08f, -9.154031662e-08f, -9.203449334e-08f, -9.252841113e-08f, -9.302206918e-08f, -9.351546669e-08f, -9.400860286e-08f, -9.450147687e-08f,
--9.499408791e-08f, -9.548643519e-08f, -9.597851789e-08f, -9.647033521e-08f, -9.696188636e-08f, -9.745317051e-08f, -9.794418688e-08f, -9.843493466e-08f, -9.892541305e-08f, -9.941562125e-08f,
--9.990555846e-08f, -1.003952239e-07f, -1.008846167e-07f, -1.013737361e-07f, -1.018625814e-07f, -1.023511517e-07f, -1.028394461e-07f, -1.033274641e-07f, -1.038152046e-07f, -1.043026670e-07f,
--1.047898504e-07f, -1.052767541e-07f, -1.057633772e-07f, -1.062497190e-07f, -1.067357787e-07f, -1.072215555e-07f, -1.077070485e-07f, -1.081922571e-07f, -1.086771803e-07f, -1.091618176e-07f,
--1.096461679e-07f, -1.101302306e-07f, -1.106140049e-07f, -1.110974899e-07f, -1.115806850e-07f, -1.120635893e-07f, -1.125462020e-07f, -1.130285223e-07f, -1.135105495e-07f, -1.139922828e-07f,
--1.144737215e-07f, -1.149548646e-07f, -1.154357115e-07f, -1.159162614e-07f, -1.163965134e-07f, -1.168764669e-07f, -1.173561210e-07f, -1.178354749e-07f, -1.183145280e-07f, -1.187932793e-07f,
--1.192717282e-07f, -1.197498739e-07f, -1.202277156e-07f, -1.207052525e-07f, -1.211824838e-07f, -1.216594088e-07f, -1.221360267e-07f, -1.226123368e-07f, -1.230883382e-07f, -1.235640303e-07f,
--1.240394121e-07f, -1.245144831e-07f, -1.249892424e-07f, -1.254636892e-07f, -1.259378227e-07f, -1.264116423e-07f, -1.268851472e-07f, -1.273583365e-07f, -1.278312096e-07f, -1.283037656e-07f,
--1.287760038e-07f, -1.292479235e-07f, -1.297195239e-07f, -1.301908042e-07f, -1.306617637e-07f, -1.311324016e-07f, -1.316027172e-07f, -1.320727097e-07f, -1.325423783e-07f, -1.330117223e-07f,
--1.334807410e-07f, -1.339494336e-07f, -1.344177993e-07f, -1.348858374e-07f, -1.353535472e-07f, -1.358209279e-07f, -1.362879787e-07f, -1.367546989e-07f, -1.372210877e-07f, -1.376871445e-07f,
--1.381528684e-07f, -1.386182587e-07f, -1.390833148e-07f, -1.395480357e-07f, -1.400124208e-07f, -1.404764694e-07f, -1.409401806e-07f, -1.414035539e-07f, -1.418665883e-07f, -1.423292833e-07f,
--1.427916379e-07f, -1.432536516e-07f, -1.437153236e-07f, -1.441766531e-07f, -1.446376394e-07f, -1.450982817e-07f, -1.455585794e-07f, -1.460185317e-07f, -1.464781379e-07f, -1.469373972e-07f,
--1.473963089e-07f, -1.478548723e-07f, -1.483130866e-07f, -1.487709511e-07f, -1.492284651e-07f, -1.496856279e-07f, -1.501424387e-07f, -1.505988969e-07f, -1.510550016e-07f, -1.515107522e-07f,
--1.519661479e-07f, -1.524211880e-07f, -1.528758719e-07f, -1.533301987e-07f, -1.537841677e-07f, -1.542377783e-07f, -1.546910297e-07f, -1.551439212e-07f, -1.555964521e-07f, -1.560486217e-07f,
--1.565004292e-07f, -1.569518739e-07f, -1.574029552e-07f, -1.578536722e-07f, -1.583040244e-07f, -1.587540110e-07f, -1.592036312e-07f, -1.596528844e-07f, -1.601017698e-07f, -1.605502868e-07f,
--1.609984346e-07f, -1.614462126e-07f, -1.618936199e-07f, -1.623406560e-07f, -1.627873202e-07f, -1.632336116e-07f, -1.636795296e-07f, -1.641250736e-07f, -1.645702427e-07f, -1.650150364e-07f,
--1.654594538e-07f, -1.659034944e-07f, -1.663471574e-07f, -1.667904420e-07f, -1.672333477e-07f, -1.676758737e-07f, -1.681180194e-07f, -1.685597839e-07f, -1.690011667e-07f, -1.694421671e-07f,
--1.698827843e-07f, -1.703230177e-07f, -1.707628665e-07f, -1.712023301e-07f, -1.716414078e-07f, -1.720800989e-07f, -1.725184027e-07f, -1.729563186e-07f, -1.733938458e-07f, -1.738309837e-07f,
--1.742677315e-07f, -1.747040887e-07f, -1.751400544e-07f, -1.755756281e-07f, -1.760108091e-07f, -1.764455966e-07f, -1.768799900e-07f, -1.773139886e-07f, -1.777475918e-07f, -1.781807988e-07f,
--1.786136090e-07f, -1.790460218e-07f, -1.794780363e-07f, -1.799096521e-07f, -1.803408683e-07f, -1.807716844e-07f, -1.812020996e-07f, -1.816321133e-07f, -1.820617248e-07f, -1.824909334e-07f,
--1.829197386e-07f, -1.833481395e-07f, -1.837761356e-07f, -1.842037262e-07f, -1.846309106e-07f, -1.850576882e-07f, -1.854840582e-07f, -1.859100201e-07f, -1.863355732e-07f, -1.867607168e-07f,
--1.871854502e-07f, -1.876097728e-07f, -1.880336840e-07f, -1.884571831e-07f, -1.888802694e-07f, -1.893029422e-07f, -1.897252010e-07f, -1.901470451e-07f, -1.905684737e-07f, -1.909894864e-07f,
--1.914100823e-07f, -1.918302610e-07f, -1.922500216e-07f, -1.926693636e-07f, -1.930882863e-07f, -1.935067892e-07f, -1.939248714e-07f, -1.943425324e-07f, -1.947597716e-07f, -1.951765883e-07f,
--1.955929819e-07f, -1.960089516e-07f, -1.964244970e-07f, -1.968396173e-07f, -1.972543119e-07f, -1.976685801e-07f, -1.980824214e-07f, -1.984958351e-07f, -1.989088206e-07f, -1.993213772e-07f,
--1.997335043e-07f, -2.001452012e-07f, -2.005564674e-07f, -2.009673022e-07f, -2.013777049e-07f, -2.017876750e-07f, -2.021972118e-07f, -2.026063147e-07f, -2.030149831e-07f, -2.034232163e-07f,
--2.038310137e-07f, -2.042383748e-07f, -2.046452988e-07f, -2.050517851e-07f, -2.054578332e-07f, -2.058634423e-07f, -2.062686120e-07f, -2.066733415e-07f, -2.070776303e-07f, -2.074814778e-07f,
--2.078848832e-07f, -2.082878461e-07f, -2.086903658e-07f, -2.090924416e-07f, -2.094940731e-07f, -2.098952595e-07f, -2.102960002e-07f, -2.106962947e-07f, -2.110961423e-07f, -2.114955425e-07f,
--2.118944946e-07f, -2.122929980e-07f, -2.126910521e-07f, -2.130886563e-07f, -2.134858100e-07f, -2.138825127e-07f, -2.142787636e-07f, -2.146745623e-07f, -2.150699080e-07f, -2.154648003e-07f,
--2.158592385e-07f, -2.162532220e-07f, -2.166467502e-07f, -2.170398226e-07f, -2.174324384e-07f, -2.178245973e-07f, -2.182162984e-07f, -2.186075414e-07f, -2.189983255e-07f, -2.193886502e-07f,
--2.197785148e-07f, -2.201679189e-07f, -2.205568618e-07f, -2.209453430e-07f, -2.213333618e-07f, -2.217209176e-07f, -2.221080099e-07f, -2.224946382e-07f, -2.228808018e-07f, -2.232665001e-07f,
--2.236517326e-07f, -2.240364986e-07f, -2.244207977e-07f, -2.248046292e-07f, -2.251879926e-07f, -2.255708872e-07f, -2.259533126e-07f, -2.263352681e-07f, -2.267167532e-07f, -2.270977673e-07f,
--2.274783098e-07f, -2.278583802e-07f, -2.282379778e-07f, -2.286171022e-07f, -2.289957528e-07f, -2.293739290e-07f, -2.297516302e-07f, -2.301288558e-07f, -2.305056054e-07f, -2.308818783e-07f,
--2.312576740e-07f, -2.316329920e-07f, -2.320078316e-07f, -2.323821923e-07f, -2.327560736e-07f, -2.331294749e-07f, -2.335023957e-07f, -2.338748353e-07f, -2.342467933e-07f, -2.346182691e-07f,
--2.349892621e-07f, -2.353597719e-07f, -2.357297977e-07f, -2.360993392e-07f, -2.364683957e-07f, -2.368369667e-07f, -2.372050517e-07f, -2.375726501e-07f, -2.379397614e-07f, -2.383063850e-07f,
--2.386725204e-07f, -2.390381670e-07f, -2.394033244e-07f, -2.397679919e-07f, -2.401321691e-07f, -2.404958554e-07f, -2.408590503e-07f, -2.412217531e-07f, -2.415839635e-07f, -2.419456809e-07f,
--2.423069047e-07f, -2.426676343e-07f, -2.430278694e-07f, -2.433876093e-07f, -2.437468536e-07f, -2.441056016e-07f, -2.444638529e-07f, -2.448216070e-07f, -2.451788633e-07f, -2.455356212e-07f,
--2.458918804e-07f, -2.462476402e-07f, -2.466029001e-07f, -2.469576597e-07f, -2.473119184e-07f, -2.476656757e-07f, -2.480189310e-07f, -2.483716839e-07f, -2.487239338e-07f, -2.490756803e-07f,
--2.494269227e-07f, -2.497776607e-07f, -2.501278937e-07f, -2.504776212e-07f, -2.508268426e-07f, -2.511755576e-07f, -2.515237654e-07f, -2.518714658e-07f, -2.522186581e-07f, -2.525653419e-07f,
--2.529115166e-07f, -2.532571818e-07f, -2.536023370e-07f, -2.539469816e-07f, -2.542911151e-07f, -2.546347371e-07f, -2.549778471e-07f, -2.553204446e-07f, -2.556625290e-07f, -2.560040999e-07f,
--2.563451568e-07f, -2.566856992e-07f, -2.570257266e-07f, -2.573652386e-07f, -2.577042346e-07f, -2.580427141e-07f, -2.583806767e-07f, -2.587181218e-07f, -2.590550491e-07f, -2.593914580e-07f,
--2.597273479e-07f, -2.600627186e-07f, -2.603975694e-07f, -2.607318999e-07f, -2.610657096e-07f, -2.613989980e-07f, -2.617317647e-07f, -2.620640092e-07f, -2.623957310e-07f, -2.627269296e-07f,
--2.630576046e-07f, -2.633877555e-07f, -2.637173818e-07f, -2.640464831e-07f, -2.643750588e-07f, -2.647031086e-07f, -2.650306319e-07f, -2.653576283e-07f, -2.656840974e-07f, -2.660100386e-07f,
--2.663354515e-07f, -2.666603356e-07f, -2.669846906e-07f, -2.673085158e-07f, -2.676318109e-07f, -2.679545755e-07f, -2.682768090e-07f, -2.685985109e-07f, -2.689196810e-07f, -2.692403186e-07f,
--2.695604233e-07f, -2.698799948e-07f, -2.701990325e-07f, -2.705175359e-07f, -2.708355048e-07f, -2.711529385e-07f, -2.714698366e-07f, -2.717861988e-07f, -2.721020246e-07f, -2.724173134e-07f,
--2.727320650e-07f, -2.730462788e-07f, -2.733599544e-07f, -2.736730913e-07f, -2.739856892e-07f, -2.742977476e-07f, -2.746092660e-07f, -2.749202441e-07f, -2.752306813e-07f, -2.755405773e-07f,
--2.758499316e-07f, -2.761587438e-07f, -2.764670135e-07f, -2.767747402e-07f, -2.770819236e-07f, -2.773885631e-07f, -2.776946584e-07f, -2.780002090e-07f, -2.783052145e-07f, -2.786096745e-07f,
--2.789135886e-07f, -2.792169564e-07f, -2.795197773e-07f, -2.798220511e-07f, -2.801237773e-07f, -2.804249555e-07f, -2.807255852e-07f, -2.810256661e-07f, -2.813251978e-07f, -2.816241798e-07f,
--2.819226117e-07f, -2.822204931e-07f, -2.825178236e-07f, -2.828146028e-07f, -2.831108303e-07f, -2.834065057e-07f, -2.837016286e-07f, -2.839961986e-07f, -2.842902152e-07f, -2.845836781e-07f,
--2.848765869e-07f, -2.851689412e-07f, -2.854607405e-07f, -2.857519845e-07f, -2.860426729e-07f, -2.863328051e-07f, -2.866223808e-07f, -2.869113996e-07f, -2.871998612e-07f, -2.874877650e-07f,
--2.877751108e-07f, -2.880618982e-07f, -2.883481267e-07f, -2.886337960e-07f, -2.889189057e-07f, -2.892034553e-07f, -2.894874446e-07f, -2.897708732e-07f, -2.900537406e-07f, -2.903360465e-07f,
--2.906177905e-07f, -2.908989722e-07f, -2.911795912e-07f, -2.914596473e-07f, -2.917391399e-07f, -2.920180688e-07f, -2.922964335e-07f, -2.925742336e-07f, -2.928514689e-07f, -2.931281390e-07f,
--2.934042434e-07f, -2.936797818e-07f, -2.939547538e-07f, -2.942291592e-07f, -2.945029974e-07f, -2.947762682e-07f, -2.950489711e-07f, -2.953211059e-07f, -2.955926722e-07f, -2.958636696e-07f,
--2.961340977e-07f, -2.964039562e-07f, -2.966732447e-07f, -2.969419629e-07f, -2.972101105e-07f, -2.974776870e-07f, -2.977446922e-07f, -2.980111256e-07f, -2.982769870e-07f, -2.985422759e-07f,
--2.988069921e-07f, -2.990711351e-07f, -2.993347047e-07f, -2.995977005e-07f, -2.998601222e-07f, -3.001219694e-07f, -3.003832417e-07f, -3.006439389e-07f, -3.009040606e-07f, -3.011636064e-07f,
--3.014225760e-07f, -3.016809692e-07f, -3.019387855e-07f, -3.021960246e-07f, -3.024526862e-07f, -3.027087700e-07f, -3.029642755e-07f, -3.032192026e-07f, -3.034735509e-07f, -3.037273200e-07f,
--3.039805096e-07f, -3.042331194e-07f, -3.044851491e-07f, -3.047365984e-07f, -3.049874669e-07f, -3.052377542e-07f, -3.054874602e-07f, -3.057365845e-07f, -3.059851267e-07f, -3.062330865e-07f,
--3.064804637e-07f, -3.067272579e-07f, -3.069734688e-07f, -3.072190960e-07f, -3.074641394e-07f, -3.077085985e-07f, -3.079524731e-07f, -3.081957628e-07f, -3.084384674e-07f, -3.086805865e-07f,
--3.089221199e-07f, -3.091630672e-07f, -3.094034281e-07f, -3.096432024e-07f, -3.098823897e-07f, -3.101209897e-07f, -3.103590022e-07f, -3.105964268e-07f, -3.108332633e-07f, -3.110695113e-07f,
--3.113051706e-07f, -3.115402408e-07f, -3.117747217e-07f, -3.120086131e-07f, -3.122419145e-07f, -3.124746257e-07f, -3.127067465e-07f, -3.129382765e-07f, -3.131692154e-07f, -3.133995630e-07f,
--3.136293191e-07f, -3.138584832e-07f, -3.140870552e-07f, -3.143150347e-07f, -3.145424215e-07f, -3.147692152e-07f, -3.149954157e-07f, -3.152210227e-07f, -3.154460358e-07f, -3.156704549e-07f,
--3.158942795e-07f, -3.161175095e-07f, -3.163401446e-07f, -3.165621846e-07f, -3.167836291e-07f, -3.170044779e-07f, -3.172247307e-07f, -3.174443873e-07f, -3.176634473e-07f, -3.178819107e-07f,
--3.180997770e-07f, -3.183170460e-07f, -3.185337175e-07f, -3.187497911e-07f, -3.189652668e-07f, -3.191801441e-07f, -3.193944229e-07f, -3.196081028e-07f, -3.198211837e-07f, -3.200336653e-07f,
--3.202455474e-07f, -3.204568296e-07f, -3.206675117e-07f, -3.208775936e-07f, -3.210870749e-07f, -3.212959554e-07f, -3.215042349e-07f, -3.217119131e-07f, -3.219189898e-07f, -3.221254647e-07f,
--3.223313376e-07f, -3.225366083e-07f, -3.227412766e-07f, -3.229453421e-07f, -3.231488047e-07f, -3.233516641e-07f, -3.235539202e-07f, -3.237555726e-07f, -3.239566211e-07f, -3.241570655e-07f,
--3.243569057e-07f, -3.245561413e-07f, -3.247547721e-07f, -3.249527979e-07f, -3.251502185e-07f, -3.253470337e-07f, -3.255432432e-07f, -3.257388469e-07f, -3.259338444e-07f, -3.261282357e-07f,
--3.263220204e-07f, -3.265151983e-07f, -3.267077694e-07f, -3.268997332e-07f, -3.270910897e-07f, -3.272818385e-07f, -3.274719796e-07f, -3.276615126e-07f, -3.278504375e-07f, -3.280387539e-07f,
--3.282264616e-07f, -3.284135606e-07f, -3.286000505e-07f, -3.287859311e-07f, -3.289712024e-07f, -3.291558639e-07f, -3.293399157e-07f, -3.295233574e-07f, -3.297061889e-07f, -3.298884099e-07f,
--3.300700204e-07f, -3.302510200e-07f, -3.304314086e-07f, -3.306111860e-07f, -3.307903520e-07f, -3.309689065e-07f, -3.311468491e-07f, -3.313241799e-07f, -3.315008985e-07f, -3.316770047e-07f,
--3.318524985e-07f, -3.320273796e-07f, -3.322016478e-07f, -3.323753030e-07f, -3.325483450e-07f, -3.327207735e-07f, -3.328925885e-07f, -3.330637897e-07f, -3.332343770e-07f, -3.334043502e-07f,
--3.335737091e-07f, -3.337424536e-07f, -3.339105835e-07f, -3.340780985e-07f, -3.342449987e-07f, -3.344112837e-07f, -3.345769534e-07f, -3.347420077e-07f, -3.349064464e-07f, -3.350702693e-07f,
--3.352334763e-07f, -3.353960671e-07f, -3.355580418e-07f, -3.357194000e-07f, -3.358801417e-07f, -3.360402666e-07f, -3.361997747e-07f, -3.363586657e-07f, -3.365169395e-07f, -3.366745961e-07f,
--3.368316351e-07f, -3.369880565e-07f, -3.371438601e-07f, -3.372990459e-07f, -3.374536135e-07f, -3.376075629e-07f, -3.377608940e-07f, -3.379136066e-07f, -3.380657005e-07f, -3.382171756e-07f,
--3.383680319e-07f, -3.385182690e-07f, -3.386678870e-07f, -3.388168857e-07f, -3.389652649e-07f, -3.391130244e-07f, -3.392601643e-07f, -3.394066843e-07f, -3.395525843e-07f, -3.396978642e-07f,
--3.398425239e-07f, -3.399865631e-07f, -3.401299819e-07f, -3.402727801e-07f, -3.404149575e-07f, -3.405565140e-07f, -3.406974496e-07f, -3.408377640e-07f, -3.409774572e-07f, -3.411165291e-07f,
--3.412549795e-07f, -3.413928083e-07f, -3.415300155e-07f, -3.416666008e-07f, -3.418025642e-07f, -3.419379056e-07f, -3.420726249e-07f, -3.422067219e-07f, -3.423401965e-07f, -3.424730487e-07f,
--3.426052783e-07f, -3.427368852e-07f, -3.428678694e-07f, -3.429982307e-07f, -3.431279690e-07f, -3.432570842e-07f, -3.433855763e-07f, -3.435134451e-07f, -3.436406905e-07f, -3.437673124e-07f,
--3.438933108e-07f, -3.440186855e-07f, -3.441434365e-07f, -3.442675636e-07f, -3.443910669e-07f, -3.445139460e-07f, -3.446362011e-07f, -3.447578320e-07f, -3.448788386e-07f, -3.449992209e-07f,
--3.451189787e-07f, -3.452381120e-07f, -3.453566206e-07f, -3.454745046e-07f, -3.455917638e-07f, -3.457083982e-07f, -3.458244076e-07f, -3.459397921e-07f, -3.460545515e-07f, -3.461686857e-07f,
--3.462821947e-07f, -3.463950784e-07f, -3.465073368e-07f, -3.466189697e-07f, -3.467299771e-07f, -3.468403590e-07f, -3.469501152e-07f, -3.470592458e-07f, -3.471677506e-07f, -3.472756295e-07f,
--3.473828826e-07f, -3.474895098e-07f, -3.475955109e-07f, -3.477008860e-07f, -3.478056350e-07f, -3.479097578e-07f, -3.480132544e-07f, -3.481161247e-07f, -3.482183686e-07f, -3.483199862e-07f,
--3.484209774e-07f, -3.485213420e-07f, -3.486210802e-07f, -3.487201917e-07f, -3.488186767e-07f, -3.489165349e-07f, -3.490137665e-07f, -3.491103713e-07f, -3.492063493e-07f, -3.493017005e-07f,
--3.493964248e-07f, -3.494905222e-07f, -3.495839926e-07f, -3.496768361e-07f, -3.497690525e-07f, -3.498606419e-07f, -3.499516042e-07f, -3.500419394e-07f, -3.501316474e-07f, -3.502207283e-07f,
--3.503091819e-07f, -3.503970083e-07f, -3.504842075e-07f, -3.505707794e-07f, -3.506567239e-07f, -3.507420412e-07f, -3.508267311e-07f, -3.509107936e-07f, -3.509942287e-07f, -3.510770364e-07f,
--3.511592167e-07f, -3.512407696e-07f, -3.513216950e-07f, -3.514019929e-07f, -3.514816633e-07f, -3.515607062e-07f, -3.516391217e-07f, -3.517169096e-07f, -3.517940700e-07f, -3.518706028e-07f,
--3.519465082e-07f, -3.520217859e-07f, -3.520964362e-07f, -3.521704588e-07f, -3.522438540e-07f, -3.523166216e-07f, -3.523887616e-07f, -3.524602741e-07f, -3.525311590e-07f, -3.526014164e-07f,
--3.526710462e-07f, -3.527400485e-07f, -3.528084233e-07f, -3.528761706e-07f, -3.529432903e-07f, -3.530097826e-07f, -3.530756474e-07f, -3.531408847e-07f, -3.532054945e-07f, -3.532694769e-07f,
--3.533328319e-07f, -3.533955594e-07f, -3.534576595e-07f, -3.535191323e-07f, -3.535799777e-07f, -3.536401958e-07f, -3.536997866e-07f, -3.537587500e-07f, -3.538170862e-07f, -3.538747952e-07f,
--3.539318769e-07f, -3.539883315e-07f, -3.540441589e-07f, -3.540993592e-07f, -3.541539324e-07f, -3.542078785e-07f, -3.542611976e-07f, -3.543138897e-07f, -3.543659548e-07f, -3.544173930e-07f,
--3.544682043e-07f, -3.545183888e-07f, -3.545679464e-07f, -3.546168773e-07f, -3.546651815e-07f, -3.547128590e-07f, -3.547599098e-07f, -3.548063340e-07f, -3.548521317e-07f, -3.548973029e-07f,
--3.549418477e-07f, -3.549857660e-07f, -3.550290580e-07f, -3.550717237e-07f, -3.551137631e-07f, -3.551551763e-07f, -3.551959634e-07f, -3.552361244e-07f, -3.552756594e-07f, -3.553145684e-07f,
--3.553528515e-07f, -3.553905088e-07f, -3.554275403e-07f, -3.554639460e-07f, -3.554997261e-07f, -3.555348806e-07f, -3.555694095e-07f, -3.556033130e-07f, -3.556365911e-07f, -3.556692439e-07f,
--3.557012714e-07f, -3.557326737e-07f, -3.557634509e-07f, -3.557936031e-07f, -3.558231303e-07f, -3.558520326e-07f, -3.558803101e-07f, -3.559079628e-07f, -3.559349909e-07f, -3.559613944e-07f,
--3.559871734e-07f, -3.560123280e-07f, -3.560368583e-07f, -3.560607643e-07f, -3.560840461e-07f, -3.561067039e-07f, -3.561287377e-07f, -3.561501475e-07f, -3.561709336e-07f, -3.561910959e-07f,
--3.562106346e-07f, -3.562295498e-07f, -3.562478415e-07f, -3.562655098e-07f, -3.562825550e-07f, -3.562989769e-07f, -3.563147758e-07f, -3.563299517e-07f, -3.563445048e-07f, -3.563584351e-07f,
--3.563717427e-07f, -3.563844278e-07f, -3.563964904e-07f, -3.564079307e-07f, -3.564187488e-07f, -3.564289447e-07f, -3.564385186e-07f, -3.564474705e-07f, -3.564558007e-07f, -3.564635092e-07f,
--3.564705961e-07f, -3.564770615e-07f, -3.564829056e-07f, -3.564881285e-07f, -3.564927302e-07f, -3.564967110e-07f, -3.565000708e-07f, -3.565028099e-07f, -3.565049284e-07f, -3.565064263e-07f,
--3.565073039e-07f, -3.565075612e-07f, -3.565071983e-07f, -3.565062155e-07f, -3.565046127e-07f, -3.565023902e-07f, -3.564995481e-07f, -3.564960864e-07f, -3.564920054e-07f, -3.564873052e-07f,
--3.564819858e-07f, -3.564760475e-07f, -3.564694904e-07f, -3.564623145e-07f, -3.564545202e-07f, -3.564461074e-07f, -3.564370763e-07f, -3.564274271e-07f, -3.564171599e-07f, -3.564062749e-07f,
--3.563947721e-07f, -3.563826518e-07f, -3.563699141e-07f, -3.563565591e-07f, -3.563425871e-07f, -3.563279980e-07f, -3.563127922e-07f, -3.562969696e-07f, -3.562805306e-07f, -3.562634752e-07f,
--3.562458036e-07f, -3.562275160e-07f, -3.562086125e-07f, -3.561890933e-07f, -3.561689585e-07f, -3.561482082e-07f, -3.561268428e-07f, -3.561048622e-07f, -3.560822668e-07f, -3.560590565e-07f,
--3.560352317e-07f, -3.560107924e-07f, -3.559857389e-07f, -3.559600713e-07f, -3.559337898e-07f, -3.559068946e-07f, -3.558793857e-07f, -3.558512635e-07f, -3.558225280e-07f, -3.557931794e-07f,
--3.557632180e-07f, -3.557326439e-07f, -3.557014573e-07f, -3.556696583e-07f, -3.556372471e-07f, -3.556042239e-07f, -3.555705890e-07f, -3.555363424e-07f, -3.555014844e-07f, -3.554660151e-07f,
--3.554299348e-07f, -3.553932436e-07f, -3.553559416e-07f, -3.553180292e-07f, -3.552795065e-07f, -3.552403737e-07f, -3.552006309e-07f, -3.551602784e-07f, -3.551193163e-07f, -3.550777450e-07f,
--3.550355644e-07f, -3.549927749e-07f, -3.549493767e-07f, -3.549053699e-07f, -3.548607547e-07f, -3.548155314e-07f, -3.547697002e-07f, -3.547232612e-07f, -3.546762146e-07f, -3.546285607e-07f,
--3.545802997e-07f, -3.545314318e-07f, -3.544819571e-07f, -3.544318760e-07f, -3.543811886e-07f, -3.543298950e-07f, -3.542779956e-07f, -3.542254906e-07f, -3.541723801e-07f, -3.541186644e-07f,
--3.540643437e-07f, -3.540094182e-07f, -3.539538881e-07f, -3.538977537e-07f, -3.538410151e-07f, -3.537836727e-07f, -3.537257265e-07f, -3.536671769e-07f, -3.536080240e-07f, -3.535482682e-07f,
--3.534879095e-07f, -3.534269483e-07f, -3.533653848e-07f, -3.533032191e-07f, -3.532404516e-07f, -3.531770825e-07f, -3.531131120e-07f, -3.530485402e-07f, -3.529833676e-07f, -3.529175943e-07f,
--3.528512205e-07f, -3.527842464e-07f, -3.527166724e-07f, -3.526484987e-07f, -3.525797254e-07f, -3.525103529e-07f, -3.524403814e-07f, -3.523698111e-07f, -3.522986422e-07f, -3.522268751e-07f,
--3.521545099e-07f, -3.520815470e-07f, -3.520079865e-07f, -3.519338287e-07f, -3.518590738e-07f, -3.517837222e-07f, -3.517077741e-07f, -3.516312296e-07f, -3.515540892e-07f, -3.514763530e-07f,
--3.513980212e-07f, -3.513190942e-07f, -3.512395722e-07f, -3.511594555e-07f, -3.510787443e-07f, -3.509974388e-07f, -3.509155394e-07f, -3.508330464e-07f, -3.507499599e-07f, -3.506662802e-07f,
--3.505820076e-07f, -3.504971425e-07f, -3.504116849e-07f, -3.503256353e-07f, -3.502389939e-07f, -3.501517609e-07f, -3.500639366e-07f, -3.499755214e-07f, -3.498865154e-07f, -3.497969190e-07f,
--3.497067324e-07f, -3.496159559e-07f, -3.495245898e-07f, -3.494326343e-07f, -3.493400898e-07f, -3.492469565e-07f, -3.491532347e-07f, -3.490589247e-07f, -3.489640268e-07f, -3.488685413e-07f,
--3.487724684e-07f, -3.486758084e-07f, -3.485785616e-07f, -3.484807284e-07f, -3.483823089e-07f, -3.482833035e-07f, -3.481837126e-07f, -3.480835362e-07f, -3.479827749e-07f, -3.478814288e-07f,
--3.477794983e-07f, -3.476769836e-07f, -3.475738851e-07f, -3.474702031e-07f, -3.473659378e-07f, -3.472610895e-07f, -3.471556586e-07f, -3.470496453e-07f, -3.469430501e-07f, -3.468358730e-07f,
--3.467281146e-07f, -3.466197750e-07f, -3.465108546e-07f, -3.464013537e-07f, -3.462912726e-07f, -3.461806116e-07f, -3.460693710e-07f, -3.459575512e-07f, -3.458451524e-07f, -3.457321749e-07f,
--3.456186191e-07f, -3.455044854e-07f, -3.453897739e-07f, -3.452744851e-07f, -3.451586192e-07f, -3.450421765e-07f, -3.449251575e-07f, -3.448075623e-07f, -3.446893914e-07f, -3.445706450e-07f,
--3.444513235e-07f, -3.443314272e-07f, -3.442109564e-07f, -3.440899115e-07f, -3.439682928e-07f, -3.438461005e-07f, -3.437233351e-07f, -3.435999969e-07f, -3.434760862e-07f, -3.433516033e-07f,
--3.432265486e-07f, -3.431009224e-07f, -3.429747250e-07f, -3.428479568e-07f, -3.427206181e-07f, -3.425927093e-07f, -3.424642306e-07f, -3.423351825e-07f, -3.422055653e-07f, -3.420753792e-07f,
--3.419446247e-07f, -3.418133022e-07f, -3.416814118e-07f, -3.415489541e-07f, -3.414159292e-07f, -3.412823377e-07f, -3.411481798e-07f, -3.410134559e-07f, -3.408781663e-07f, -3.407423114e-07f,
--3.406058915e-07f, -3.404689071e-07f, -3.403313583e-07f, -3.401932457e-07f, -3.400545695e-07f, -3.399153301e-07f, -3.397755279e-07f, -3.396351632e-07f, -3.394942364e-07f, -3.393527478e-07f,
--3.392106979e-07f, -3.390680869e-07f, -3.389249152e-07f, -3.387811832e-07f, -3.386368913e-07f, -3.384920398e-07f, -3.383466292e-07f, -3.382006596e-07f, -3.380541316e-07f, -3.379070455e-07f,
--3.377594017e-07f, -3.376112005e-07f, -3.374624423e-07f, -3.373131274e-07f, -3.371632564e-07f, -3.370128295e-07f, -3.368618471e-07f, -3.367103095e-07f, -3.365582172e-07f, -3.364055706e-07f,
--3.362523700e-07f, -3.360986158e-07f, -3.359443083e-07f, -3.357894481e-07f, -3.356340353e-07f, -3.354780705e-07f, -3.353215540e-07f, -3.351644862e-07f, -3.350068675e-07f, -3.348486983e-07f,
--3.346899789e-07f, -3.345307097e-07f, -3.343708912e-07f, -3.342105238e-07f, -3.340496077e-07f, -3.338881435e-07f, -3.337261314e-07f, -3.335635720e-07f, -3.334004655e-07f, -3.332368125e-07f,
--3.330726132e-07f, -3.329078681e-07f, -3.327425776e-07f, -3.325767421e-07f, -3.324103620e-07f, -3.322434376e-07f, -3.320759695e-07f, -3.319079579e-07f, -3.317394033e-07f, -3.315703061e-07f,
--3.314006667e-07f, -3.312304856e-07f, -3.310597630e-07f, -3.308884995e-07f, -3.307166954e-07f, -3.305443511e-07f, -3.303714671e-07f, -3.301980438e-07f, -3.300240815e-07f, -3.298495807e-07f,
--3.296745419e-07f, -3.294989653e-07f, -3.293228515e-07f, -3.291462009e-07f, -3.289690138e-07f, -3.287912907e-07f, -3.286130320e-07f, -3.284342381e-07f, -3.282549095e-07f, -3.280750466e-07f,
--3.278946497e-07f, -3.277137194e-07f, -3.275322560e-07f, -3.273502600e-07f, -3.271677317e-07f, -3.269846717e-07f, -3.268010803e-07f, -3.266169580e-07f, -3.264323053e-07f, -3.262471224e-07f,
--3.260614099e-07f, -3.258751682e-07f, -3.256883977e-07f, -3.255010989e-07f, -3.253132722e-07f, -3.251249180e-07f, -3.249360368e-07f, -3.247466290e-07f, -3.245566951e-07f, -3.243662354e-07f,
--3.241752505e-07f, -3.239837407e-07f, -3.237917065e-07f, -3.235991483e-07f, -3.234060667e-07f, -3.232124619e-07f, -3.230183346e-07f, -3.228236851e-07f, -3.226285138e-07f, -3.224328212e-07f,
--3.222366078e-07f, -3.220398741e-07f, -3.218426203e-07f, -3.216448471e-07f, -3.214465548e-07f, -3.212477440e-07f, -3.210484150e-07f, -3.208485683e-07f, -3.206482044e-07f, -3.204473238e-07f,
--3.202459268e-07f, -3.200440139e-07f, -3.198415856e-07f, -3.196386424e-07f, -3.194351847e-07f, -3.192312130e-07f, -3.190267277e-07f, -3.188217293e-07f, -3.186162183e-07f, -3.184101950e-07f,
--3.182036601e-07f, -3.179966139e-07f, -3.177890569e-07f, -3.175809896e-07f, -3.173724124e-07f, -3.171633259e-07f, -3.169537304e-07f, -3.167436265e-07f, -3.165330146e-07f, -3.163218952e-07f,
--3.161102688e-07f, -3.158981358e-07f, -3.156854967e-07f, -3.154723520e-07f, -3.152587021e-07f, -3.150445476e-07f, -3.148298889e-07f, -3.146147265e-07f, -3.143990609e-07f, -3.141828924e-07f,
--3.139662218e-07f, -3.137490493e-07f, -3.135313755e-07f, -3.133132009e-07f, -3.130945259e-07f, -3.128753511e-07f, -3.126556769e-07f, -3.124355037e-07f, -3.122148322e-07f, -3.119936628e-07f,
--3.117719959e-07f, -3.115498320e-07f, -3.113271717e-07f, -3.111040155e-07f, -3.108803637e-07f, -3.106562170e-07f, -3.104315757e-07f, -3.102064405e-07f, -3.099808117e-07f, -3.097546900e-07f,
--3.095280757e-07f, -3.093009694e-07f, -3.090733715e-07f, -3.088452826e-07f, -3.086167032e-07f, -3.083876338e-07f, -3.081580748e-07f, -3.079280268e-07f, -3.076974902e-07f, -3.074664656e-07f,
--3.072349535e-07f, -3.070029544e-07f, -3.067704687e-07f, -3.065374970e-07f, -3.063040398e-07f, -3.060700976e-07f, -3.058356709e-07f, -3.056007602e-07f, -3.053653660e-07f, -3.051294888e-07f,
--3.048931292e-07f, -3.046562876e-07f, -3.044189646e-07f, -3.041811606e-07f, -3.039428763e-07f, -3.037041120e-07f, -3.034648683e-07f, -3.032251458e-07f, -3.029849449e-07f, -3.027442661e-07f,
--3.025031101e-07f, -3.022614772e-07f, -3.020193680e-07f, -3.017767831e-07f, -3.015337229e-07f, -3.012901880e-07f, -3.010461789e-07f, -3.008016961e-07f, -3.005567402e-07f, -3.003113116e-07f,
--3.000654109e-07f, -2.998190386e-07f, -2.995721952e-07f, -2.993248814e-07f, -2.990770975e-07f, -2.988288441e-07f, -2.985801218e-07f, -2.983309310e-07f, -2.980812724e-07f, -2.978311464e-07f,
--2.975805536e-07f, -2.973294945e-07f, -2.970779696e-07f, -2.968259795e-07f, -2.965735247e-07f, -2.963206058e-07f, -2.960672232e-07f, -2.958133775e-07f, -2.955590693e-07f, -2.953042991e-07f,
--2.950490674e-07f, -2.947933747e-07f, -2.945372217e-07f, -2.942806088e-07f, -2.940235367e-07f, -2.937660057e-07f, -2.935080165e-07f, -2.932495697e-07f, -2.929906657e-07f, -2.927313051e-07f,
--2.924714884e-07f, -2.922112163e-07f, -2.919504892e-07f, -2.916893077e-07f, -2.914276723e-07f, -2.911655836e-07f, -2.909030422e-07f, -2.906400485e-07f, -2.903766032e-07f, -2.901127068e-07f,
--2.898483599e-07f, -2.895835629e-07f, -2.893183165e-07f, -2.890526212e-07f, -2.887864775e-07f, -2.885198861e-07f, -2.882528474e-07f, -2.879853621e-07f, -2.877174307e-07f, -2.874490537e-07f,
--2.871802317e-07f, -2.869109653e-07f, -2.866412550e-07f, -2.863711014e-07f, -2.861005051e-07f, -2.858294665e-07f, -2.855579863e-07f, -2.852860651e-07f, -2.850137034e-07f, -2.847409017e-07f,
--2.844676607e-07f, -2.841939809e-07f, -2.839198628e-07f, -2.836453071e-07f, -2.833703143e-07f, -2.830948849e-07f, -2.828190196e-07f, -2.825427189e-07f, -2.822659834e-07f, -2.819888136e-07f,
--2.817112101e-07f, -2.814331736e-07f, -2.811547045e-07f, -2.808758035e-07f, -2.805964711e-07f, -2.803167079e-07f, -2.800365144e-07f, -2.797558913e-07f, -2.794748391e-07f, -2.791933585e-07f,
--2.789114499e-07f, -2.786291140e-07f, -2.783463513e-07f, -2.780631624e-07f, -2.777795479e-07f, -2.774955085e-07f, -2.772110445e-07f, -2.769261568e-07f, -2.766408457e-07f, -2.763551120e-07f,
--2.760689562e-07f, -2.757823788e-07f, -2.754953806e-07f, -2.752079620e-07f, -2.749201236e-07f, -2.746318661e-07f, -2.743431900e-07f, -2.740540959e-07f, -2.737645844e-07f, -2.734746560e-07f,
--2.731843115e-07f, -2.728935514e-07f, -2.726023762e-07f, -2.723107865e-07f, -2.720187830e-07f, -2.717263663e-07f, -2.714335369e-07f, -2.711402954e-07f, -2.708466425e-07f, -2.705525787e-07f,
--2.702581046e-07f, -2.699632208e-07f, -2.696679280e-07f, -2.693722266e-07f, -2.690761174e-07f, -2.687796009e-07f, -2.684826777e-07f, -2.681853484e-07f, -2.678876137e-07f, -2.675894740e-07f,
--2.672909301e-07f, -2.669919825e-07f, -2.666926319e-07f, -2.663928788e-07f, -2.660927238e-07f, -2.657921675e-07f, -2.654912107e-07f, -2.651898537e-07f, -2.648880974e-07f, -2.645859422e-07f,
--2.642833888e-07f, -2.639804378e-07f, -2.636770898e-07f, -2.633733454e-07f, -2.630692052e-07f, -2.627646698e-07f, -2.624597399e-07f, -2.621544161e-07f, -2.618486989e-07f, -2.615425890e-07f,
--2.612360870e-07f, -2.609291936e-07f, -2.606219092e-07f, -2.603142346e-07f, -2.600061704e-07f, -2.596977171e-07f, -2.593888754e-07f, -2.590796460e-07f, -2.587700293e-07f, -2.584600262e-07f,
--2.581496371e-07f, -2.578388626e-07f, -2.575277035e-07f, -2.572161604e-07f, -2.569042337e-07f, -2.565919243e-07f, -2.562792327e-07f, -2.559661595e-07f, -2.556527053e-07f, -2.553388708e-07f,
--2.550246566e-07f, -2.547100633e-07f, -2.543950916e-07f, -2.540797420e-07f, -2.537640153e-07f, -2.534479120e-07f, -2.531314327e-07f, -2.528145781e-07f, -2.524973489e-07f, -2.521797456e-07f,
--2.518617689e-07f, -2.515434193e-07f, -2.512246977e-07f, -2.509056045e-07f, -2.505861404e-07f, -2.502663060e-07f, -2.499461020e-07f, -2.496255290e-07f, -2.493045877e-07f, -2.489832786e-07f,
--2.486616024e-07f, -2.483395598e-07f, -2.480171514e-07f, -2.476943777e-07f, -2.473712396e-07f, -2.470477375e-07f, -2.467238722e-07f, -2.463996442e-07f, -2.460750543e-07f, -2.457501030e-07f,
--2.454247910e-07f, -2.450991190e-07f, -2.447730875e-07f, -2.444466972e-07f, -2.441199488e-07f, -2.437928429e-07f, -2.434653802e-07f, -2.431375612e-07f, -2.428093867e-07f, -2.424808572e-07f,
--2.421519735e-07f, -2.418227362e-07f, -2.414931459e-07f, -2.411632032e-07f, -2.408329089e-07f, -2.405022635e-07f, -2.401712677e-07f, -2.398399222e-07f, -2.395082276e-07f, -2.391761846e-07f,
--2.388437938e-07f, -2.385110558e-07f, -2.381779714e-07f, -2.378445411e-07f, -2.375107656e-07f, -2.371766456e-07f, -2.368421817e-07f, -2.365073746e-07f, -2.361722249e-07f, -2.358367334e-07f,
--2.355009005e-07f, -2.351647270e-07f, -2.348282136e-07f, -2.344913609e-07f, -2.341541696e-07f, -2.338166403e-07f, -2.334787736e-07f, -2.331405703e-07f, -2.328020310e-07f, -2.324631564e-07f,
--2.321239471e-07f, -2.317844037e-07f, -2.314445270e-07f, -2.311043176e-07f, -2.307637761e-07f, -2.304229033e-07f, -2.300816997e-07f, -2.297401661e-07f, -2.293983031e-07f, -2.290561113e-07f,
--2.287135915e-07f, -2.283707443e-07f, -2.280275704e-07f, -2.276840704e-07f, -2.273402450e-07f, -2.269960948e-07f, -2.266516206e-07f, -2.263068230e-07f, -2.259617027e-07f, -2.256162602e-07f,
--2.252704964e-07f, -2.249244118e-07f, -2.245780072e-07f, -2.242312832e-07f, -2.238842405e-07f, -2.235368797e-07f, -2.231892015e-07f, -2.228412067e-07f, -2.224928958e-07f, -2.221442695e-07f,
--2.217953285e-07f, -2.214460735e-07f, -2.210965052e-07f, -2.207466242e-07f, -2.203964312e-07f, -2.200459269e-07f, -2.196951119e-07f, -2.193439869e-07f, -2.189925527e-07f, -2.186408098e-07f,
--2.182887590e-07f, -2.179364009e-07f, -2.175837362e-07f, -2.172307656e-07f, -2.168774898e-07f, -2.165239094e-07f, -2.161700252e-07f, -2.158158377e-07f, -2.154613478e-07f, -2.151065560e-07f,
--2.147514630e-07f, -2.143960696e-07f, -2.140403763e-07f, -2.136843840e-07f, -2.133280932e-07f, -2.129715047e-07f, -2.126146191e-07f, -2.122574371e-07f, -2.118999594e-07f, -2.115421868e-07f,
--2.111841197e-07f, -2.108257591e-07f, -2.104671054e-07f, -2.101081595e-07f, -2.097489221e-07f, -2.093893937e-07f, -2.090295751e-07f, -2.086694669e-07f, -2.083090699e-07f, -2.079483848e-07f,
--2.075874122e-07f, -2.072261528e-07f, -2.068646074e-07f, -2.065027765e-07f, -2.061406609e-07f, -2.057782613e-07f, -2.054155784e-07f, -2.050526128e-07f, -2.046893653e-07f, -2.043258365e-07f,
--2.039620271e-07f, -2.035979379e-07f, -2.032335695e-07f, -2.028689226e-07f, -2.025039979e-07f, -2.021387961e-07f, -2.017733179e-07f, -2.014075640e-07f, -2.010415351e-07f, -2.006752318e-07f,
--2.003086549e-07f, -1.999418051e-07f, -1.995746830e-07f, -1.992072894e-07f, -1.988396249e-07f, -1.984716903e-07f, -1.981034862e-07f, -1.977350134e-07f, -1.973662725e-07f, -1.969972642e-07f,
--1.966279893e-07f, -1.962584484e-07f, -1.958886423e-07f, -1.955185716e-07f, -1.951482370e-07f, -1.947776393e-07f, -1.944067790e-07f, -1.940356571e-07f, -1.936642740e-07f, -1.932926306e-07f,
--1.929207275e-07f, -1.925485655e-07f, -1.921761452e-07f, -1.918034673e-07f, -1.914305326e-07f, -1.910573418e-07f, -1.906838955e-07f, -1.903101944e-07f, -1.899362393e-07f, -1.895620309e-07f,
--1.891875698e-07f, -1.888128569e-07f, -1.884378927e-07f, -1.880626779e-07f, -1.876872134e-07f, -1.873114998e-07f, -1.869355377e-07f, -1.865593280e-07f, -1.861828713e-07f, -1.858061683e-07f,
--1.854292197e-07f, -1.850520263e-07f, -1.846745887e-07f, -1.842969077e-07f, -1.839189840e-07f, -1.835408182e-07f, -1.831624111e-07f, -1.827837633e-07f, -1.824048757e-07f, -1.820257489e-07f,
--1.816463836e-07f, -1.812667806e-07f, -1.808869404e-07f, -1.805068640e-07f, -1.801265518e-07f, -1.797460048e-07f, -1.793652236e-07f, -1.789842088e-07f, -1.786029613e-07f, -1.782214816e-07f,
--1.778397707e-07f, -1.774578290e-07f, -1.770756575e-07f, -1.766932567e-07f, -1.763106274e-07f, -1.759277703e-07f, -1.755446861e-07f, -1.751613755e-07f, -1.747778393e-07f, -1.743940782e-07f,
--1.740100928e-07f, -1.736258839e-07f, -1.732414523e-07f, -1.728567985e-07f, -1.724719234e-07f, -1.720868277e-07f, -1.717015120e-07f, -1.713159772e-07f, -1.709302238e-07f, -1.705442527e-07f,
--1.701580645e-07f, -1.697716600e-07f, -1.693850398e-07f, -1.689982048e-07f, -1.686111555e-07f, -1.682238929e-07f, -1.678364174e-07f, -1.674487300e-07f, -1.670608312e-07f, -1.666727218e-07f,
--1.662844026e-07f, -1.658958743e-07f, -1.655071375e-07f, -1.651181930e-07f, -1.647290415e-07f, -1.643396838e-07f, -1.639501205e-07f, -1.635603524e-07f, -1.631703802e-07f, -1.627802047e-07f,
--1.623898264e-07f, -1.619992463e-07f, -1.616084649e-07f, -1.612174831e-07f, -1.608263014e-07f, -1.604349208e-07f, -1.600433418e-07f, -1.596515653e-07f, -1.592595918e-07f, -1.588674223e-07f,
--1.584750573e-07f, -1.580824976e-07f, -1.576897439e-07f, -1.572967970e-07f, -1.569036575e-07f, -1.565103263e-07f, -1.561168040e-07f, -1.557230913e-07f, -1.553291890e-07f, -1.549350979e-07f,
--1.545408185e-07f, -1.541463517e-07f, -1.537516982e-07f, -1.533568587e-07f, -1.529618340e-07f, -1.525666247e-07f, -1.521712316e-07f, -1.517756554e-07f, -1.513798968e-07f, -1.509839566e-07f,
--1.505878356e-07f, -1.501915343e-07f, -1.497950536e-07f, -1.493983942e-07f, -1.490015568e-07f, -1.486045421e-07f, -1.482073510e-07f, -1.478099840e-07f, -1.474124419e-07f, -1.470147255e-07f,
--1.466168355e-07f, -1.462187726e-07f, -1.458205375e-07f, -1.454221310e-07f, -1.450235538e-07f, -1.446248067e-07f, -1.442258903e-07f, -1.438268054e-07f, -1.434275527e-07f, -1.430281330e-07f,
--1.426285470e-07f, -1.422287954e-07f, -1.418288789e-07f, -1.414287984e-07f, -1.410285544e-07f, -1.406281478e-07f, -1.402275792e-07f, -1.398268495e-07f, -1.394259593e-07f, -1.390249094e-07f,
--1.386237004e-07f, -1.382223332e-07f, -1.378208085e-07f, -1.374191270e-07f, -1.370172894e-07f, -1.366152964e-07f, -1.362131489e-07f, -1.358108475e-07f, -1.354083930e-07f, -1.350057860e-07f,
--1.346030274e-07f, -1.342001178e-07f, -1.337970581e-07f, -1.333938489e-07f, -1.329904909e-07f, -1.325869850e-07f, -1.321833317e-07f, -1.317795320e-07f, -1.313755864e-07f, -1.309714958e-07f,
--1.305672608e-07f, -1.301628823e-07f, -1.297583609e-07f, -1.293536973e-07f, -1.289488924e-07f, -1.285439468e-07f, -1.281388613e-07f, -1.277336366e-07f, -1.273282735e-07f, -1.269227726e-07f,
--1.265171348e-07f, -1.261113607e-07f, -1.257054511e-07f, -1.252994067e-07f, -1.248932283e-07f, -1.244869166e-07f, -1.240804723e-07f, -1.236738962e-07f, -1.232671890e-07f, -1.228603514e-07f,
--1.224533843e-07f, -1.220462882e-07f, -1.216390640e-07f, -1.212317123e-07f, -1.208242340e-07f, -1.204166298e-07f, -1.200089003e-07f, -1.196010464e-07f, -1.191930687e-07f, -1.187849681e-07f,
--1.183767452e-07f, -1.179684007e-07f, -1.175599355e-07f, -1.171513503e-07f, -1.167426457e-07f, -1.163338226e-07f, -1.159248816e-07f, -1.155158235e-07f, -1.151066491e-07f, -1.146973591e-07f,
--1.142879541e-07f, -1.138784351e-07f, -1.134688026e-07f, -1.130590574e-07f, -1.126492003e-07f, -1.122392320e-07f, -1.118291533e-07f, -1.114189648e-07f, -1.110086673e-07f, -1.105982616e-07f,
--1.101877484e-07f, -1.097771284e-07f, -1.093664024e-07f, -1.089555711e-07f, -1.085446352e-07f, -1.081335955e-07f, -1.077224528e-07f, -1.073112077e-07f, -1.068998610e-07f, -1.064884134e-07f,
--1.060768657e-07f, -1.056652186e-07f, -1.052534728e-07f, -1.048416292e-07f, -1.044296884e-07f, -1.040176511e-07f, -1.036055181e-07f, -1.031932902e-07f, -1.027809680e-07f, -1.023685524e-07f,
--1.019560440e-07f, -1.015434436e-07f, -1.011307520e-07f, -1.007179698e-07f, -1.003050978e-07f, -9.989213679e-08f, -9.947908745e-08f, -9.906595052e-08f, -9.865272676e-08f, -9.823941690e-08f,
--9.782602168e-08f, -9.741254184e-08f, -9.699897811e-08f, -9.658533123e-08f, -9.617160195e-08f, -9.575779099e-08f, -9.534389910e-08f, -9.492992702e-08f, -9.451587549e-08f, -9.410174524e-08f,
--9.368753701e-08f, -9.327325154e-08f, -9.285888957e-08f, -9.244445183e-08f, -9.202993907e-08f, -9.161535202e-08f, -9.120069143e-08f, -9.078595802e-08f, -9.037115254e-08f, -8.995627572e-08f,
--8.954132831e-08f, -8.912631104e-08f, -8.871122465e-08f, -8.829606987e-08f, -8.788084745e-08f, -8.746555812e-08f, -8.705020263e-08f, -8.663478170e-08f, -8.621929608e-08f, -8.580374650e-08f,
--8.538813371e-08f, -8.497245843e-08f, -8.455672142e-08f, -8.414092339e-08f, -8.372506510e-08f, -8.330914728e-08f, -8.289317067e-08f, -8.247713600e-08f, -8.206104401e-08f, -8.164489545e-08f,
--8.122869104e-08f, -8.081243152e-08f, -8.039611763e-08f, -7.997975011e-08f, -7.956332970e-08f, -7.914685713e-08f, -7.873033313e-08f, -7.831375845e-08f, -7.789713383e-08f, -7.748045999e-08f,
--7.706373768e-08f, -7.664696763e-08f, -7.623015058e-08f, -7.581328726e-08f, -7.539637842e-08f, -7.497942478e-08f, -7.456242709e-08f, -7.414538608e-08f, -7.372830248e-08f, -7.331117703e-08f,
--7.289401048e-08f, -7.247680354e-08f, -7.205955697e-08f, -7.164227149e-08f, -7.122494784e-08f, -7.080758676e-08f, -7.039018898e-08f, -6.997275523e-08f, -6.955528626e-08f, -6.913778280e-08f,
--6.872024557e-08f, -6.830267533e-08f, -6.788507279e-08f, -6.746743871e-08f, -6.704977380e-08f, -6.663207881e-08f, -6.621435447e-08f, -6.579660152e-08f, -6.537882068e-08f, -6.496101270e-08f,
--6.454317830e-08f, -6.412531823e-08f, -6.370743321e-08f, -6.328952397e-08f, -6.287159127e-08f, -6.245363581e-08f, -6.203565835e-08f, -6.161765961e-08f, -6.119964032e-08f, -6.078160122e-08f,
--6.036354305e-08f, -5.994546653e-08f, -5.952737239e-08f, -5.910926138e-08f, -5.869113422e-08f, -5.827299164e-08f, -5.785483438e-08f, -5.743666316e-08f, -5.701847873e-08f, -5.660028181e-08f,
--5.618207314e-08f, -5.576385344e-08f, -5.534562345e-08f, -5.492738389e-08f, -5.450913551e-08f, -5.409087903e-08f, -5.367261518e-08f, -5.325434469e-08f, -5.283606829e-08f, -5.241778672e-08f,
--5.199950070e-08f, -5.158121096e-08f, -5.116291824e-08f, -5.074462327e-08f, -5.032632676e-08f, -4.990802946e-08f, -4.948973210e-08f, -4.907143539e-08f, -4.865314008e-08f, -4.823484688e-08f,
--4.781655654e-08f, -4.739826977e-08f, -4.697998731e-08f, -4.656170988e-08f, -4.614343822e-08f, -4.572517305e-08f, -4.530691509e-08f, -4.488866509e-08f, -4.447042375e-08f, -4.405219182e-08f,
--4.363397002e-08f, -4.321575907e-08f, -4.279755970e-08f, -4.237937265e-08f, -4.196119863e-08f, -4.154303837e-08f, -4.112489260e-08f, -4.070676205e-08f, -4.028864744e-08f, -3.987054949e-08f,
--3.945246893e-08f, -3.903440649e-08f, -3.861636290e-08f, -3.819833886e-08f, -3.778033513e-08f, -3.736235240e-08f, -3.694439142e-08f, -3.652645290e-08f, -3.610853758e-08f, -3.569064616e-08f,
--3.527277938e-08f, -3.485493796e-08f, -3.443712263e-08f, -3.401933410e-08f, -3.360157310e-08f, -3.318384035e-08f, -3.276613657e-08f, -3.234846249e-08f, -3.193081883e-08f, -3.151320631e-08f,
--3.109562565e-08f, -3.067807758e-08f, -3.026056280e-08f, -2.984308206e-08f, -2.942563606e-08f, -2.900822553e-08f, -2.859085118e-08f, -2.817351375e-08f, -2.775621394e-08f, -2.733895248e-08f,
--2.692173008e-08f, -2.650454747e-08f, -2.608740537e-08f, -2.567030449e-08f, -2.525324555e-08f, -2.483622928e-08f, -2.441925638e-08f, -2.400232758e-08f, -2.358544360e-08f, -2.316860515e-08f,
--2.275181295e-08f, -2.233506772e-08f, -2.191837017e-08f, -2.150172103e-08f, -2.108512100e-08f, -2.066857080e-08f, -2.025207115e-08f, -1.983562277e-08f, -1.941922637e-08f, -1.900288266e-08f,
--1.858659237e-08f, -1.817035620e-08f, -1.775417486e-08f, -1.733804909e-08f, -1.692197958e-08f, -1.650596705e-08f, -1.609001222e-08f, -1.567411580e-08f, -1.525827850e-08f, -1.484250103e-08f,
--1.442678411e-08f, -1.401112845e-08f, -1.359553476e-08f, -1.318000375e-08f, -1.276453614e-08f, -1.234913263e-08f, -1.193379394e-08f, -1.151852078e-08f, -1.110331385e-08f, -1.068817387e-08f,
--1.027310155e-08f, -9.858097599e-09f, -9.443162723e-09f, -9.028297633e-09f, -8.613503037e-09f, -8.198779645e-09f, -7.784128164e-09f, -7.369549303e-09f, -6.955043769e-09f, -6.540612271e-09f,
--6.126255514e-09f, -5.711974207e-09f, -5.297769055e-09f, -4.883640765e-09f, -4.469590044e-09f, -4.055617596e-09f, -3.641724128e-09f, -3.227910345e-09f, -2.814176952e-09f, -2.400524653e-09f,
--1.986954152e-09f, -1.573466155e-09f, -1.160061364e-09f, -7.467404840e-10f, -3.335042170e-10f, 7.964673359e-11f, 4.927116652e-10f, 9.056898754e-10f, 1.318580662e-09f, 1.731383324e-09f,
-2.144097159e-09f, 2.556721466e-09f, 2.969255545e-09f, 3.381698695e-09f, 3.794050215e-09f, 4.206309406e-09f, 4.618475568e-09f, 5.030548002e-09f, 5.442526009e-09f, 5.854408889e-09f,
-6.266195946e-09f, 6.677886480e-09f, 7.089479794e-09f, 7.500975190e-09f, 7.912371971e-09f, 8.323669441e-09f, 8.734866903e-09f, 9.145963661e-09f, 9.556959018e-09f, 9.967852280e-09f,
-1.037864275e-08f, 1.078932974e-08f, 1.119991254e-08f, 1.161039047e-08f, 1.202076283e-08f, 1.243102893e-08f, 1.284118808e-08f, 1.325123958e-08f, 1.366118273e-08f, 1.407101685e-08f,
-1.448074125e-08f, 1.489035523e-08f, 1.529985811e-08f, 1.570924918e-08f, 1.611852777e-08f, 1.652769317e-08f, 1.693674471e-08f, 1.734568169e-08f, 1.775450342e-08f, 1.816320921e-08f,
-1.857179837e-08f, 1.898027023e-08f, 1.938862408e-08f, 1.979685924e-08f, 2.020497502e-08f, 2.061297075e-08f, 2.102084572e-08f, 2.142859926e-08f, 2.183623068e-08f, 2.224373929e-08f,
-2.265112440e-08f, 2.305838535e-08f, 2.346552143e-08f, 2.387253196e-08f, 2.427941627e-08f, 2.468617367e-08f, 2.509280348e-08f, 2.549930500e-08f, 2.590567757e-08f, 2.631192050e-08f,
-2.671803311e-08f, 2.712401471e-08f, 2.752986463e-08f, 2.793558219e-08f, 2.834116670e-08f, 2.874661749e-08f, 2.915193388e-08f, 2.955711519e-08f, 2.996216073e-08f, 3.036706984e-08f,
-3.077184184e-08f, 3.117647604e-08f, 3.158097178e-08f, 3.198532836e-08f, 3.238954513e-08f, 3.279362140e-08f, 3.319755649e-08f, 3.360134974e-08f, 3.400500047e-08f, 3.440850800e-08f,
-3.481187166e-08f, 3.521509077e-08f, 3.561816467e-08f, 3.602109268e-08f, 3.642387413e-08f, 3.682650834e-08f, 3.722899465e-08f, 3.763133239e-08f, 3.803352087e-08f, 3.843555944e-08f,
-3.883744743e-08f, 3.923918416e-08f, 3.964076896e-08f, 4.004220117e-08f, 4.044348012e-08f, 4.084460514e-08f, 4.124557556e-08f, 4.164639072e-08f, 4.204704994e-08f, 4.244755258e-08f,
-4.284789794e-08f, 4.324808538e-08f, 4.364811423e-08f, 4.404798382e-08f, 4.444769349e-08f, 4.484724258e-08f, 4.524663042e-08f, 4.564585634e-08f, 4.604491969e-08f, 4.644381981e-08f,
-4.684255603e-08f, 4.724112769e-08f, 4.763953413e-08f, 4.803777470e-08f, 4.843584872e-08f, 4.883375555e-08f, 4.923149452e-08f, 4.962906497e-08f, 5.002646625e-08f, 5.042369769e-08f,
-5.082075865e-08f, 5.121764846e-08f, 5.161436647e-08f, 5.201091202e-08f, 5.240728446e-08f, 5.280348312e-08f, 5.319950736e-08f, 5.359535653e-08f, 5.399102996e-08f, 5.438652701e-08f,
-5.478184702e-08f, 5.517698934e-08f, 5.557195331e-08f, 5.596673830e-08f, 5.636134363e-08f, 5.675576868e-08f, 5.715001277e-08f, 5.754407527e-08f, 5.793795552e-08f, 5.833165288e-08f,
-5.872516670e-08f, 5.911849633e-08f, 5.951164112e-08f, 5.990460042e-08f, 6.029737360e-08f, 6.068995999e-08f, 6.108235896e-08f, 6.147456987e-08f, 6.186659206e-08f, 6.225842489e-08f,
-6.265006773e-08f, 6.304151991e-08f, 6.343278081e-08f, 6.382384978e-08f, 6.421472618e-08f, 6.460540937e-08f, 6.499589870e-08f, 6.538619354e-08f, 6.577629324e-08f, 6.616619717e-08f,
-6.655590468e-08f, 6.694541514e-08f, 6.733472792e-08f, 6.772384236e-08f, 6.811275784e-08f, 6.850147372e-08f, 6.888998936e-08f, 6.927830412e-08f, 6.966641738e-08f, 7.005432849e-08f,
-7.044203683e-08f, 7.082954175e-08f, 7.121684263e-08f, 7.160393883e-08f, 7.199082972e-08f, 7.237751467e-08f, 7.276399304e-08f, 7.315026421e-08f, 7.353632755e-08f, 7.392218242e-08f,
-7.430782820e-08f, 7.469326425e-08f, 7.507848995e-08f, 7.546350468e-08f, 7.584830779e-08f, 7.623289868e-08f, 7.661727670e-08f, 7.700144124e-08f, 7.738539166e-08f, 7.776912735e-08f,
-7.815264769e-08f, 7.853595203e-08f, 7.891903977e-08f, 7.930191028e-08f, 7.968456293e-08f, 8.006699711e-08f, 8.044921220e-08f, 8.083120757e-08f, 8.121298260e-08f, 8.159453667e-08f,
-8.197586917e-08f, 8.235697947e-08f, 8.273786696e-08f, 8.311853102e-08f, 8.349897103e-08f, 8.387918638e-08f, 8.425917644e-08f, 8.463894061e-08f, 8.501847827e-08f, 8.539778880e-08f,
-8.577687159e-08f, 8.615572602e-08f, 8.653435149e-08f, 8.691274738e-08f, 8.729091308e-08f, 8.766884798e-08f, 8.804655146e-08f, 8.842402292e-08f, 8.880126175e-08f, 8.917826733e-08f,
-8.955503906e-08f, 8.993157633e-08f, 9.030787853e-08f, 9.068394506e-08f, 9.105977530e-08f, 9.143536866e-08f, 9.181072452e-08f, 9.218584229e-08f, 9.256072135e-08f, 9.293536111e-08f,
-9.330976096e-08f, 9.368392029e-08f, 9.405783851e-08f, 9.443151501e-08f, 9.480494919e-08f, 9.517814046e-08f, 9.555108821e-08f, 9.592379183e-08f, 9.629625075e-08f, 9.666846434e-08f,
-9.704043202e-08f, 9.741215319e-08f, 9.778362726e-08f, 9.815485362e-08f, 9.852583168e-08f, 9.889656084e-08f, 9.926704052e-08f, 9.963727011e-08f, 1.000072490e-07f, 1.003769767e-07f,
-1.007464525e-07f, 1.011156758e-07f, 1.014846461e-07f, 1.018533627e-07f, 1.022218252e-07f, 1.025900328e-07f, 1.029579850e-07f, 1.033256812e-07f, 1.036931208e-07f, 1.040603033e-07f,
-1.044272280e-07f, 1.047938944e-07f, 1.051603018e-07f, 1.055264498e-07f, 1.058923376e-07f, 1.062579648e-07f, 1.066233307e-07f, 1.069884348e-07f, 1.073532764e-07f, 1.077178550e-07f,
-1.080821701e-07f, 1.084462209e-07f, 1.088100071e-07f, 1.091735279e-07f, 1.095367828e-07f, 1.098997712e-07f, 1.102624925e-07f, 1.106249462e-07f, 1.109871317e-07f, 1.113490484e-07f,
-1.117106958e-07f, 1.120720732e-07f, 1.124331800e-07f, 1.127940158e-07f, 1.131545800e-07f, 1.135148719e-07f, 1.138748910e-07f, 1.142346368e-07f, 1.145941085e-07f, 1.149533058e-07f,
-1.153122280e-07f, 1.156708746e-07f, 1.160292449e-07f, 1.163873384e-07f, 1.167451546e-07f, 1.171026929e-07f, 1.174599527e-07f, 1.178169334e-07f, 1.181736346e-07f, 1.185300555e-07f,
-1.188861957e-07f, 1.192420547e-07f, 1.195976317e-07f, 1.199529263e-07f, 1.203079380e-07f, 1.206626660e-07f, 1.210171100e-07f, 1.213712694e-07f, 1.217251435e-07f, 1.220787318e-07f,
-1.224320338e-07f, 1.227850489e-07f, 1.231377765e-07f, 1.234902161e-07f, 1.238423672e-07f, 1.241942292e-07f, 1.245458015e-07f, 1.248970836e-07f, 1.252480749e-07f, 1.255987749e-07f,
-1.259491830e-07f, 1.262992987e-07f, 1.266491215e-07f, 1.269986507e-07f, 1.273478858e-07f, 1.276968264e-07f, 1.280454718e-07f, 1.283938214e-07f, 1.287418748e-07f, 1.290896314e-07f,
-1.294370907e-07f, 1.297842521e-07f, 1.301311150e-07f, 1.304776790e-07f, 1.308239434e-07f, 1.311699078e-07f, 1.315155717e-07f, 1.318609343e-07f, 1.322059953e-07f, 1.325507541e-07f,
-1.328952101e-07f, 1.332393628e-07f, 1.335832117e-07f, 1.339267563e-07f, 1.342699959e-07f, 1.346129301e-07f, 1.349555584e-07f, 1.352978801e-07f, 1.356398948e-07f, 1.359816020e-07f,
-1.363230010e-07f, 1.366640914e-07f, 1.370048727e-07f, 1.373453442e-07f, 1.376855056e-07f, 1.380253562e-07f, 1.383648955e-07f, 1.387041230e-07f, 1.390430382e-07f, 1.393816405e-07f,
-1.397199295e-07f, 1.400579046e-07f, 1.403955652e-07f, 1.407329109e-07f, 1.410699411e-07f, 1.414066553e-07f, 1.417430530e-07f, 1.420791337e-07f, 1.424148968e-07f, 1.427503418e-07f,
-1.430854682e-07f, 1.434202756e-07f, 1.437547633e-07f, 1.440889308e-07f, 1.444227777e-07f, 1.447563035e-07f, 1.450895075e-07f, 1.454223893e-07f, 1.457549484e-07f, 1.460871843e-07f,
-1.464190965e-07f, 1.467506843e-07f, 1.470819475e-07f, 1.474128853e-07f, 1.477434974e-07f, 1.480737832e-07f, 1.484037422e-07f, 1.487333739e-07f, 1.490626777e-07f, 1.493916533e-07f,
-1.497203000e-07f, 1.500486174e-07f, 1.503766050e-07f, 1.507042622e-07f, 1.510315886e-07f, 1.513585837e-07f, 1.516852469e-07f, 1.520115778e-07f, 1.523375759e-07f, 1.526632406e-07f,
-1.529885715e-07f, 1.533135681e-07f, 1.536382298e-07f, 1.539625562e-07f, 1.542865468e-07f, 1.546102010e-07f, 1.549335185e-07f, 1.552564986e-07f, 1.555791410e-07f, 1.559014451e-07f,
-1.562234103e-07f, 1.565450364e-07f, 1.568663226e-07f, 1.571872686e-07f, 1.575078739e-07f, 1.578281380e-07f, 1.581480603e-07f, 1.584676405e-07f, 1.587868779e-07f, 1.591057722e-07f,
-1.594243228e-07f, 1.597425293e-07f, 1.600603912e-07f, 1.603779080e-07f, 1.606950792e-07f, 1.610119043e-07f, 1.613283829e-07f, 1.616445145e-07f, 1.619602985e-07f, 1.622757346e-07f,
-1.625908222e-07f, 1.629055609e-07f, 1.632199502e-07f, 1.635339896e-07f, 1.638476786e-07f, 1.641610168e-07f, 1.644740037e-07f, 1.647866388e-07f, 1.650989217e-07f, 1.654108518e-07f,
-1.657224288e-07f, 1.660336521e-07f, 1.663445212e-07f, 1.666550358e-07f, 1.669651953e-07f, 1.672749993e-07f, 1.675844472e-07f, 1.678935387e-07f, 1.682022733e-07f, 1.685106505e-07f,
-1.688186699e-07f, 1.691263309e-07f, 1.694336331e-07f, 1.697405761e-07f, 1.700471594e-07f, 1.703533826e-07f, 1.706592451e-07f, 1.709647466e-07f, 1.712698865e-07f, 1.715746645e-07f,
-1.718790800e-07f, 1.721831326e-07f, 1.724868218e-07f, 1.727901473e-07f, 1.730931085e-07f, 1.733957049e-07f, 1.736979362e-07f, 1.739998019e-07f, 1.743013016e-07f, 1.746024347e-07f,
-1.749032009e-07f, 1.752035996e-07f, 1.755036305e-07f, 1.758032931e-07f, 1.761025870e-07f, 1.764015117e-07f, 1.767000667e-07f, 1.769982517e-07f, 1.772960661e-07f, 1.775935096e-07f,
-1.778905816e-07f, 1.781872818e-07f, 1.784836098e-07f, 1.787795650e-07f, 1.790751471e-07f, 1.793703555e-07f, 1.796651899e-07f, 1.799596499e-07f, 1.802537349e-07f, 1.805474447e-07f,
-1.808407786e-07f, 1.811337363e-07f, 1.814263174e-07f, 1.817185215e-07f, 1.820103480e-07f, 1.823017966e-07f, 1.825928668e-07f, 1.828835583e-07f, 1.831738705e-07f, 1.834638031e-07f,
-1.837533556e-07f, 1.840425277e-07f, 1.843313188e-07f, 1.846197285e-07f, 1.849077566e-07f, 1.851954024e-07f, 1.854826656e-07f, 1.857695458e-07f, 1.860560425e-07f, 1.863421554e-07f,
-1.866278840e-07f, 1.869132279e-07f, 1.871981866e-07f, 1.874827598e-07f, 1.877669471e-07f, 1.880507480e-07f, 1.883341621e-07f, 1.886171890e-07f, 1.888998284e-07f, 1.891820796e-07f,
-1.894639425e-07f, 1.897454165e-07f, 1.900265013e-07f, 1.903071964e-07f, 1.905875015e-07f, 1.908674161e-07f, 1.911469397e-07f, 1.914260722e-07f, 1.917048129e-07f, 1.919831615e-07f,
-1.922611176e-07f, 1.925386809e-07f, 1.928158508e-07f, 1.930926270e-07f, 1.933690092e-07f, 1.936449968e-07f, 1.939205895e-07f, 1.941957869e-07f, 1.944705887e-07f, 1.947449943e-07f,
-1.950190035e-07f, 1.952926157e-07f, 1.955658307e-07f, 1.958386481e-07f, 1.961110673e-07f, 1.963830881e-07f, 1.966547101e-07f, 1.969259328e-07f, 1.971967559e-07f, 1.974671790e-07f,
-1.977372017e-07f, 1.980068237e-07f, 1.982760444e-07f, 1.985448636e-07f, 1.988132808e-07f, 1.990812957e-07f, 1.993489080e-07f, 1.996161171e-07f, 1.998829227e-07f, 2.001493245e-07f,
-2.004153221e-07f, 2.006809150e-07f, 2.009461030e-07f, 2.012108855e-07f, 2.014752624e-07f, 2.017392331e-07f, 2.020027973e-07f, 2.022659547e-07f, 2.025287048e-07f, 2.027910473e-07f,
-2.030529818e-07f, 2.033145079e-07f, 2.035756253e-07f, 2.038363336e-07f, 2.040966325e-07f, 2.043565215e-07f, 2.046160003e-07f, 2.048750685e-07f, 2.051337258e-07f, 2.053919718e-07f,
-2.056498061e-07f, 2.059072284e-07f, 2.061642383e-07f, 2.064208354e-07f, 2.066770195e-07f, 2.069327900e-07f, 2.071881467e-07f, 2.074430893e-07f, 2.076976173e-07f, 2.079517303e-07f,
-2.082054282e-07f, 2.084587104e-07f, 2.087115766e-07f, 2.089640265e-07f, 2.092160597e-07f, 2.094676759e-07f, 2.097188747e-07f, 2.099696558e-07f, 2.102200188e-07f, 2.104699633e-07f,
-2.107194891e-07f, 2.109685958e-07f, 2.112172829e-07f, 2.114655503e-07f, 2.117133975e-07f, 2.119608242e-07f, 2.122078300e-07f, 2.124544147e-07f, 2.127005778e-07f, 2.129463190e-07f,
-2.131916380e-07f, 2.134365345e-07f, 2.136810081e-07f, 2.139250584e-07f, 2.141686852e-07f, 2.144118880e-07f, 2.146546667e-07f, 2.148970207e-07f, 2.151389499e-07f, 2.153804538e-07f,
-2.156215321e-07f, 2.158621845e-07f, 2.161024107e-07f, 2.163422104e-07f, 2.165815831e-07f, 2.168205286e-07f, 2.170590466e-07f, 2.172971367e-07f, 2.175347986e-07f, 2.177720320e-07f,
-2.180088366e-07f, 2.182452119e-07f, 2.184811578e-07f, 2.187166739e-07f, 2.189517598e-07f, 2.191864153e-07f, 2.194206400e-07f, 2.196544336e-07f, 2.198877959e-07f, 2.201207264e-07f,
-2.203532248e-07f, 2.205852909e-07f, 2.208169244e-07f, 2.210481248e-07f, 2.212788920e-07f, 2.215092255e-07f, 2.217391252e-07f, 2.219685906e-07f, 2.221976215e-07f, 2.224262175e-07f,
-2.226543784e-07f, 2.228821039e-07f, 2.231093936e-07f, 2.233362472e-07f, 2.235626644e-07f, 2.237886450e-07f, 2.240141886e-07f, 2.242392949e-07f, 2.244639637e-07f, 2.246881945e-07f,
-2.249119872e-07f, 2.251353414e-07f, 2.253582569e-07f, 2.255807333e-07f, 2.258027703e-07f, 2.260243676e-07f, 2.262455250e-07f, 2.264662422e-07f, 2.266865188e-07f, 2.269063546e-07f,
-2.271257492e-07f, 2.273447025e-07f, 2.275632140e-07f, 2.277812836e-07f, 2.279989108e-07f, 2.282160955e-07f, 2.284328374e-07f, 2.286491361e-07f, 2.288649915e-07f, 2.290804031e-07f,
-2.292953707e-07f, 2.295098941e-07f, 2.297239729e-07f, 2.299376069e-07f, 2.301507958e-07f, 2.303635393e-07f, 2.305758371e-07f, 2.307876890e-07f, 2.309990947e-07f, 2.312100539e-07f,
-2.314205664e-07f, 2.316306318e-07f, 2.318402499e-07f, 2.320494204e-07f, 2.322581431e-07f, 2.324664177e-07f, 2.326742438e-07f, 2.328816213e-07f, 2.330885499e-07f, 2.332950293e-07f,
-2.335010593e-07f, 2.337066395e-07f, 2.339117697e-07f, 2.341164497e-07f, 2.343206792e-07f, 2.345244579e-07f, 2.347277855e-07f, 2.349306619e-07f, 2.351330867e-07f, 2.353350598e-07f,
-2.355365807e-07f, 2.357376493e-07f, 2.359382654e-07f, 2.361384286e-07f, 2.363381387e-07f, 2.365373955e-07f, 2.367361987e-07f, 2.369345480e-07f, 2.371324433e-07f, 2.373298842e-07f,
-2.375268705e-07f, 2.377234020e-07f, 2.379194784e-07f, 2.381150994e-07f, 2.383102649e-07f, 2.385049746e-07f, 2.386992282e-07f, 2.388930254e-07f, 2.390863662e-07f, 2.392792501e-07f,
-2.394716770e-07f, 2.396636466e-07f, 2.398551587e-07f, 2.400462131e-07f, 2.402368094e-07f, 2.404269476e-07f, 2.406166273e-07f, 2.408058483e-07f, 2.409946104e-07f, 2.411829133e-07f,
-2.413707568e-07f, 2.415581407e-07f, 2.417450648e-07f, 2.419315287e-07f, 2.421175324e-07f, 2.423030755e-07f, 2.424881579e-07f, 2.426727793e-07f, 2.428569394e-07f, 2.430406381e-07f,
-2.432238752e-07f, 2.434066504e-07f, 2.435889634e-07f, 2.437708142e-07f, 2.439522024e-07f, 2.441331278e-07f, 2.443135903e-07f, 2.444935895e-07f, 2.446731253e-07f, 2.448521975e-07f,
-2.450308059e-07f, 2.452089502e-07f, 2.453866302e-07f, 2.455638457e-07f, 2.457405965e-07f, 2.459168825e-07f, 2.460927033e-07f, 2.462680588e-07f, 2.464429487e-07f, 2.466173729e-07f,
-2.467913312e-07f, 2.469648233e-07f, 2.471378490e-07f, 2.473104082e-07f, 2.474825006e-07f, 2.476541261e-07f, 2.478252843e-07f, 2.479959753e-07f, 2.481661986e-07f, 2.483359542e-07f,
-2.485052418e-07f, 2.486740613e-07f, 2.488424124e-07f, 2.490102950e-07f, 2.491777088e-07f, 2.493446537e-07f, 2.495111294e-07f, 2.496771359e-07f, 2.498426728e-07f, 2.500077400e-07f,
-2.501723373e-07f, 2.503364646e-07f, 2.505001216e-07f, 2.506633081e-07f, 2.508260240e-07f, 2.509882691e-07f, 2.511500431e-07f, 2.513113460e-07f, 2.514721775e-07f, 2.516325374e-07f,
-2.517924257e-07f, 2.519518420e-07f, 2.521107862e-07f, 2.522692581e-07f, 2.524272576e-07f, 2.525847845e-07f, 2.527418386e-07f, 2.528984197e-07f, 2.530545276e-07f, 2.532101623e-07f,
-2.533653234e-07f, 2.535200109e-07f, 2.536742246e-07f, 2.538279642e-07f, 2.539812297e-07f, 2.541340209e-07f, 2.542863376e-07f, 2.544381796e-07f, 2.545895467e-07f, 2.547404389e-07f,
-2.548908559e-07f, 2.550407976e-07f, 2.551902638e-07f, 2.553392543e-07f, 2.554877691e-07f, 2.556358079e-07f, 2.557833705e-07f, 2.559304569e-07f, 2.560770669e-07f, 2.562232003e-07f,
-2.563688569e-07f, 2.565140366e-07f, 2.566587393e-07f, 2.568029648e-07f, 2.569467130e-07f, 2.570899836e-07f, 2.572327766e-07f, 2.573750918e-07f, 2.575169290e-07f, 2.576582881e-07f,
-2.577991690e-07f, 2.579395715e-07f, 2.580794955e-07f, 2.582189409e-07f, 2.583579074e-07f, 2.584963949e-07f, 2.586344034e-07f, 2.587719326e-07f, 2.589089824e-07f, 2.590455528e-07f,
-2.591816434e-07f, 2.593172543e-07f, 2.594523853e-07f, 2.595870362e-07f, 2.597212070e-07f, 2.598548974e-07f, 2.599881073e-07f, 2.601208367e-07f, 2.602530853e-07f, 2.603848532e-07f,
-2.605161400e-07f, 2.606469457e-07f, 2.607772702e-07f, 2.609071134e-07f, 2.610364751e-07f, 2.611653551e-07f, 2.612937535e-07f, 2.614216700e-07f, 2.615491045e-07f, 2.616760570e-07f,
-2.618025272e-07f, 2.619285151e-07f, 2.620540206e-07f, 2.621790435e-07f, 2.623035837e-07f, 2.624276411e-07f, 2.625512156e-07f, 2.626743071e-07f, 2.627969154e-07f, 2.629190405e-07f,
-2.630406823e-07f, 2.631618406e-07f, 2.632825152e-07f, 2.634027063e-07f, 2.635224135e-07f, 2.636416368e-07f, 2.637603761e-07f, 2.638786313e-07f, 2.639964022e-07f, 2.641136889e-07f,
-2.642304911e-07f, 2.643468088e-07f, 2.644626419e-07f, 2.645779903e-07f, 2.646928538e-07f, 2.648072324e-07f, 2.649211260e-07f, 2.650345345e-07f, 2.651474577e-07f, 2.652598957e-07f,
-2.653718483e-07f, 2.654833153e-07f, 2.655942968e-07f, 2.657047926e-07f, 2.658148027e-07f, 2.659243269e-07f, 2.660333651e-07f, 2.661419174e-07f, 2.662499835e-07f, 2.663575634e-07f,
-2.664646570e-07f, 2.665712642e-07f, 2.666773850e-07f, 2.667830193e-07f, 2.668881669e-07f, 2.669928278e-07f, 2.670970020e-07f, 2.672006892e-07f, 2.673038896e-07f, 2.674066029e-07f,
-2.675088292e-07f, 2.676105683e-07f, 2.677118201e-07f, 2.678125846e-07f, 2.679128618e-07f, 2.680126514e-07f, 2.681119536e-07f, 2.682107681e-07f, 2.683090950e-07f, 2.684069342e-07f,
-2.685042855e-07f, 2.686011490e-07f, 2.686975245e-07f, 2.687934120e-07f, 2.688888114e-07f, 2.689837228e-07f, 2.690781459e-07f, 2.691720807e-07f, 2.692655273e-07f, 2.693584855e-07f,
-2.694509552e-07f, 2.695429364e-07f, 2.696344291e-07f, 2.697254332e-07f, 2.698159486e-07f, 2.699059753e-07f, 2.699955133e-07f, 2.700845624e-07f, 2.701731226e-07f, 2.702611939e-07f,
-2.703487762e-07f, 2.704358695e-07f, 2.705224737e-07f, 2.706085888e-07f, 2.706942148e-07f, 2.707793515e-07f, 2.708639989e-07f, 2.709481570e-07f, 2.710318258e-07f, 2.711150052e-07f,
-2.711976952e-07f, 2.712798957e-07f, 2.713616067e-07f, 2.714428281e-07f, 2.715235599e-07f, 2.716038021e-07f, 2.716835546e-07f, 2.717628174e-07f, 2.718415905e-07f, 2.719198739e-07f,
-2.719976674e-07f, 2.720749711e-07f, 2.721517849e-07f, 2.722281088e-07f, 2.723039428e-07f, 2.723792868e-07f, 2.724541408e-07f, 2.725285049e-07f, 2.726023789e-07f, 2.726757628e-07f,
-2.727486567e-07f, 2.728210604e-07f, 2.728929740e-07f, 2.729643975e-07f, 2.730353307e-07f, 2.731057738e-07f, 2.731757267e-07f, 2.732451893e-07f, 2.733141617e-07f, 2.733826438e-07f,
-2.734506356e-07f, 2.735181371e-07f, 2.735851483e-07f, 2.736516692e-07f, 2.737176998e-07f, 2.737832400e-07f, 2.738482898e-07f, 2.739128493e-07f, 2.739769183e-07f, 2.740404970e-07f,
-2.741035853e-07f, 2.741661832e-07f, 2.742282907e-07f, 2.742899078e-07f, 2.743510345e-07f, 2.744116707e-07f, 2.744718165e-07f, 2.745314720e-07f, 2.745906369e-07f, 2.746493115e-07f,
-2.747074956e-07f, 2.747651894e-07f, 2.748223927e-07f, 2.748791055e-07f, 2.749353280e-07f, 2.749910601e-07f, 2.750463018e-07f, 2.751010531e-07f, 2.751553140e-07f, 2.752090846e-07f,
-2.752623648e-07f, 2.753151546e-07f, 2.753674542e-07f, 2.754192633e-07f, 2.754705822e-07f, 2.755214108e-07f, 2.755717491e-07f, 2.756215971e-07f, 2.756709549e-07f, 2.757198224e-07f,
-2.757681998e-07f, 2.758160869e-07f, 2.758634839e-07f, 2.759103907e-07f, 2.759568073e-07f, 2.760027339e-07f, 2.760481704e-07f, 2.760931168e-07f, 2.761375732e-07f, 2.761815396e-07f,
-2.762250160e-07f, 2.762680024e-07f, 2.763104989e-07f, 2.763525055e-07f, 2.763940223e-07f, 2.764350492e-07f, 2.764755863e-07f, 2.765156337e-07f, 2.765551913e-07f, 2.765942592e-07f,
-2.766328374e-07f, 2.766709260e-07f, 2.767085250e-07f, 2.767456345e-07f, 2.767822544e-07f, 2.768183849e-07f, 2.768540259e-07f, 2.768891776e-07f, 2.769238399e-07f, 2.769580128e-07f,
-2.769916965e-07f, 2.770248910e-07f, 2.770575964e-07f, 2.770898125e-07f, 2.771215397e-07f, 2.771527777e-07f, 2.771835268e-07f, 2.772137870e-07f, 2.772435583e-07f, 2.772728407e-07f,
-2.773016344e-07f, 2.773299393e-07f, 2.773577556e-07f, 2.773850832e-07f, 2.774119223e-07f, 2.774382729e-07f, 2.774641350e-07f, 2.774895088e-07f, 2.775143942e-07f, 2.775387914e-07f,
-2.775627003e-07f, 2.775861211e-07f, 2.776090538e-07f, 2.776314985e-07f, 2.776534552e-07f, 2.776749241e-07f, 2.776959051e-07f, 2.777163983e-07f, 2.777364039e-07f, 2.777559218e-07f,
-2.777749522e-07f, 2.777934951e-07f, 2.778115506e-07f, 2.778291187e-07f, 2.778461996e-07f, 2.778627933e-07f, 2.778788998e-07f, 2.778945193e-07f, 2.779096518e-07f, 2.779242975e-07f,
-2.779384563e-07f, 2.779521284e-07f, 2.779653138e-07f, 2.779780127e-07f, 2.779902250e-07f, 2.780019509e-07f, 2.780131905e-07f, 2.780239439e-07f, 2.780342111e-07f, 2.780439922e-07f,
-2.780532873e-07f, 2.780620965e-07f, 2.780704198e-07f, 2.780782575e-07f, 2.780856095e-07f, 2.780924759e-07f, 2.780988569e-07f, 2.781047525e-07f, 2.781101629e-07f, 2.781150880e-07f,
-2.781195281e-07f, 2.781234831e-07f, 2.781269533e-07f, 2.781299386e-07f, 2.781324393e-07f, 2.781344553e-07f, 2.781359869e-07f, 2.781370340e-07f, 2.781375968e-07f, 2.781376754e-07f,
-2.781372700e-07f, 2.781363805e-07f, 2.781350071e-07f, 2.781331499e-07f, 2.781308091e-07f, 2.781279846e-07f, 2.781246767e-07f, 2.781208854e-07f, 2.781166109e-07f, 2.781118532e-07f,
-2.781066125e-07f, 2.781008889e-07f, 2.780946825e-07f, 2.780879933e-07f, 2.780808216e-07f, 2.780731674e-07f, 2.780650309e-07f, 2.780564121e-07f, 2.780473112e-07f, 2.780377284e-07f,
-2.780276636e-07f, 2.780171171e-07f, 2.780060889e-07f, 2.779945792e-07f, 2.779825881e-07f, 2.779701157e-07f, 2.779571622e-07f, 2.779437277e-07f, 2.779298122e-07f, 2.779154160e-07f,
-2.779005391e-07f, 2.778851817e-07f, 2.778693439e-07f, 2.778530259e-07f, 2.778362277e-07f, 2.778189496e-07f, 2.778011915e-07f, 2.777829537e-07f, 2.777642363e-07f, 2.777450395e-07f,
-2.777253633e-07f, 2.777052079e-07f, 2.776845735e-07f, 2.776634601e-07f, 2.776418680e-07f, 2.776197972e-07f, 2.775972479e-07f, 2.775742202e-07f, 2.775507143e-07f, 2.775267304e-07f,
-2.775022685e-07f, 2.774773288e-07f, 2.774519114e-07f, 2.774260166e-07f, 2.773996444e-07f, 2.773727950e-07f, 2.773454685e-07f, 2.773176651e-07f, 2.772893850e-07f, 2.772606282e-07f,
-2.772313950e-07f, 2.772016855e-07f, 2.771714998e-07f, 2.771408381e-07f, 2.771097006e-07f, 2.770780874e-07f, 2.770459986e-07f, 2.770134345e-07f, 2.769803951e-07f, 2.769468807e-07f,
-2.769128914e-07f, 2.768784273e-07f, 2.768434886e-07f, 2.768080756e-07f, 2.767721882e-07f, 2.767358268e-07f, 2.766989914e-07f, 2.766616823e-07f, 2.766238996e-07f, 2.765856434e-07f,
-2.765469140e-07f, 2.765077114e-07f, 2.764680360e-07f, 2.764278877e-07f, 2.763872669e-07f, 2.763461737e-07f, 2.763046082e-07f, 2.762625706e-07f, 2.762200612e-07f, 2.761770800e-07f,
-2.761336272e-07f, 2.760897031e-07f, 2.760453078e-07f, 2.760004415e-07f, 2.759551043e-07f, 2.759092964e-07f, 2.758630181e-07f, 2.758162694e-07f, 2.757690507e-07f, 2.757213620e-07f,
-2.756732035e-07f, 2.756245755e-07f, 2.755754780e-07f, 2.755259114e-07f, 2.754758757e-07f, 2.754253713e-07f, 2.753743981e-07f, 2.753229565e-07f, 2.752710467e-07f, 2.752186688e-07f,
-2.751658229e-07f, 2.751125094e-07f, 2.750587284e-07f, 2.750044801e-07f, 2.749497647e-07f, 2.748945823e-07f, 2.748389332e-07f, 2.747828176e-07f, 2.747262357e-07f, 2.746691876e-07f,
-2.746116736e-07f, 2.745536938e-07f, 2.744952485e-07f, 2.744363379e-07f, 2.743769621e-07f, 2.743171214e-07f, 2.742568160e-07f, 2.741960461e-07f, 2.741348118e-07f, 2.740731134e-07f,
-2.740109512e-07f, 2.739483252e-07f, 2.738852357e-07f, 2.738216829e-07f, 2.737576671e-07f, 2.736931884e-07f, 2.736282470e-07f, 2.735628432e-07f, 2.734969771e-07f, 2.734306491e-07f,
-2.733638592e-07f, 2.732966078e-07f, 2.732288949e-07f, 2.731607210e-07f, 2.730920860e-07f, 2.730229904e-07f, 2.729534342e-07f, 2.728834178e-07f, 2.728129413e-07f, 2.727420049e-07f,
-2.726706089e-07f, 2.725987535e-07f, 2.725264390e-07f, 2.724536655e-07f, 2.723804332e-07f, 2.723067425e-07f, 2.722325934e-07f, 2.721579863e-07f, 2.720829214e-07f, 2.720073989e-07f,
-2.719314190e-07f, 2.718549820e-07f, 2.717780881e-07f, 2.717007375e-07f, 2.716229304e-07f, 2.715446672e-07f, 2.714659480e-07f, 2.713867730e-07f, 2.713071425e-07f, 2.712270567e-07f,
-2.711465159e-07f, 2.710655203e-07f, 2.709840701e-07f, 2.709021657e-07f, 2.708198071e-07f, 2.707369947e-07f, 2.706537286e-07f, 2.705700093e-07f, 2.704858368e-07f, 2.704012114e-07f,
-2.703161334e-07f, 2.702306030e-07f, 2.701446205e-07f, 2.700581860e-07f, 2.699712999e-07f, 2.698839625e-07f, 2.697961738e-07f, 2.697079343e-07f, 2.696192441e-07f, 2.695301035e-07f,
-2.694405128e-07f, 2.693504721e-07f, 2.692599818e-07f, 2.691690421e-07f, 2.690776533e-07f, 2.689858156e-07f, 2.688935292e-07f, 2.688007945e-07f, 2.687076117e-07f, 2.686139810e-07f,
-2.685199027e-07f, 2.684253771e-07f, 2.683304044e-07f, 2.682349848e-07f, 2.681391188e-07f, 2.680428064e-07f, 2.679460480e-07f, 2.678488438e-07f, 2.677511941e-07f, 2.676530992e-07f,
-2.675545593e-07f, 2.674555746e-07f, 2.673561456e-07f, 2.672562724e-07f, 2.671559553e-07f, 2.670551945e-07f, 2.669539904e-07f, 2.668523432e-07f, 2.667502531e-07f, 2.666477205e-07f,
-2.665447457e-07f, 2.664413288e-07f, 2.663374702e-07f, 2.662331702e-07f, 2.661284290e-07f, 2.660232468e-07f, 2.659176241e-07f, 2.658115610e-07f, 2.657050579e-07f, 2.655981149e-07f,
-2.654907325e-07f, 2.653829108e-07f, 2.652746502e-07f, 2.651659509e-07f, 2.650568132e-07f, 2.649472375e-07f, 2.648372239e-07f, 2.647267728e-07f, 2.646158845e-07f, 2.645045592e-07f,
-2.643927973e-07f, 2.642805989e-07f, 2.641679645e-07f, 2.640548943e-07f, 2.639413886e-07f, 2.638274476e-07f, 2.637130717e-07f, 2.635982612e-07f, 2.634830163e-07f, 2.633673374e-07f,
-2.632512248e-07f, 2.631346786e-07f, 2.630176994e-07f, 2.629002872e-07f, 2.627824425e-07f, 2.626641654e-07f, 2.625454565e-07f, 2.624263158e-07f, 2.623067438e-07f, 2.621867406e-07f,
-2.620663068e-07f, 2.619454424e-07f, 2.618241478e-07f, 2.617024234e-07f, 2.615802695e-07f, 2.614576862e-07f, 2.613346740e-07f, 2.612112332e-07f, 2.610873640e-07f, 2.609630668e-07f,
-2.608383419e-07f, 2.607131895e-07f, 2.605876101e-07f, 2.604616038e-07f, 2.603351710e-07f, 2.602083121e-07f, 2.600810273e-07f, 2.599533170e-07f, 2.598251814e-07f, 2.596966209e-07f,
-2.595676357e-07f, 2.594382263e-07f, 2.593083929e-07f, 2.591781359e-07f, 2.590474555e-07f, 2.589163521e-07f, 2.587848259e-07f, 2.586528774e-07f, 2.585205068e-07f, 2.583877145e-07f,
-2.582545007e-07f, 2.581208659e-07f, 2.579868102e-07f, 2.578523341e-07f, 2.577174379e-07f, 2.575821218e-07f, 2.574463863e-07f, 2.573102316e-07f, 2.571736581e-07f, 2.570366661e-07f,
-2.568992559e-07f, 2.567614279e-07f, 2.566231824e-07f, 2.564845197e-07f, 2.563454401e-07f, 2.562059440e-07f, 2.560660317e-07f, 2.559257035e-07f, 2.557849598e-07f, 2.556438010e-07f,
-2.555022272e-07f, 2.553602390e-07f, 2.552178366e-07f, 2.550750203e-07f, 2.549317905e-07f, 2.547881476e-07f, 2.546440918e-07f, 2.544996235e-07f, 2.543547430e-07f, 2.542094508e-07f,
-2.540637470e-07f, 2.539176322e-07f, 2.537711065e-07f, 2.536241704e-07f, 2.534768242e-07f, 2.533290683e-07f, 2.531809029e-07f, 2.530323285e-07f, 2.528833453e-07f, 2.527339538e-07f,
-2.525841543e-07f, 2.524339471e-07f, 2.522833325e-07f, 2.521323110e-07f, 2.519808828e-07f, 2.518290484e-07f, 2.516768080e-07f, 2.515241621e-07f, 2.513711109e-07f, 2.512176549e-07f,
-2.510637944e-07f, 2.509095297e-07f, 2.507548612e-07f, 2.505997892e-07f, 2.504443142e-07f, 2.502884364e-07f, 2.501321563e-07f, 2.499754741e-07f, 2.498183903e-07f, 2.496609052e-07f,
-2.495030191e-07f, 2.493447325e-07f, 2.491860456e-07f, 2.490269589e-07f, 2.488674727e-07f, 2.487075874e-07f, 2.485473033e-07f, 2.483866209e-07f, 2.482255403e-07f, 2.480640621e-07f,
-2.479021867e-07f, 2.477399142e-07f, 2.475772453e-07f, 2.474141801e-07f, 2.472507191e-07f, 2.470868626e-07f, 2.469226110e-07f, 2.467579647e-07f, 2.465929241e-07f, 2.464274895e-07f,
-2.462616613e-07f, 2.460954399e-07f, 2.459288256e-07f, 2.457618188e-07f, 2.455944200e-07f, 2.454266294e-07f, 2.452584474e-07f, 2.450898745e-07f, 2.449209110e-07f, 2.447515572e-07f,
-2.445818136e-07f, 2.444116806e-07f, 2.442411584e-07f, 2.440702476e-07f, 2.438989484e-07f, 2.437272613e-07f, 2.435551867e-07f, 2.433827248e-07f, 2.432098762e-07f, 2.430366412e-07f,
-2.428630201e-07f, 2.426890134e-07f, 2.425146215e-07f, 2.423398447e-07f, 2.421646834e-07f, 2.419891380e-07f, 2.418132090e-07f, 2.416368966e-07f, 2.414602013e-07f, 2.412831234e-07f,
-2.411056634e-07f, 2.409278217e-07f, 2.407495986e-07f, 2.405709945e-07f, 2.403920099e-07f, 2.402126451e-07f, 2.400329005e-07f, 2.398527765e-07f, 2.396722735e-07f, 2.394913919e-07f,
-2.393101321e-07f, 2.391284945e-07f, 2.389464794e-07f, 2.387640874e-07f, 2.385813188e-07f, 2.383981739e-07f, 2.382146532e-07f, 2.380307571e-07f, 2.378464860e-07f, 2.376618403e-07f,
-2.374768204e-07f, 2.372914266e-07f, 2.371056595e-07f, 2.369195194e-07f, 2.367330066e-07f, 2.365461217e-07f, 2.363588650e-07f, 2.361712369e-07f, 2.359832379e-07f, 2.357948682e-07f,
-2.356061285e-07f, 2.354170189e-07f, 2.352275401e-07f, 2.350376923e-07f, 2.348474759e-07f, 2.346568915e-07f, 2.344659394e-07f, 2.342746200e-07f, 2.340829337e-07f, 2.338908809e-07f,
-2.336984621e-07f, 2.335056777e-07f, 2.333125280e-07f, 2.331190136e-07f, 2.329251347e-07f, 2.327308919e-07f, 2.325362855e-07f, 2.323413160e-07f, 2.321459837e-07f, 2.319502892e-07f,
-2.317542327e-07f, 2.315578148e-07f, 2.313610359e-07f, 2.311638963e-07f, 2.309663965e-07f, 2.307685370e-07f, 2.305703180e-07f, 2.303717402e-07f, 2.301728038e-07f, 2.299735093e-07f,
-2.297738572e-07f, 2.295738478e-07f, 2.293734816e-07f, 2.291727590e-07f, 2.289716805e-07f, 2.287702464e-07f, 2.285684572e-07f, 2.283663133e-07f, 2.281638152e-07f, 2.279609632e-07f,
-2.277577578e-07f, 2.275541995e-07f, 2.273502886e-07f, 2.271460257e-07f, 2.269414110e-07f, 2.267364451e-07f, 2.265311285e-07f, 2.263254614e-07f, 2.261194444e-07f, 2.259130779e-07f,
-2.257063623e-07f, 2.254992981e-07f, 2.252918856e-07f, 2.250841255e-07f, 2.248760179e-07f, 2.246675635e-07f, 2.244587627e-07f, 2.242496158e-07f, 2.240401234e-07f, 2.238302858e-07f,
-2.236201035e-07f, 2.234095770e-07f, 2.231987066e-07f, 2.229874929e-07f, 2.227759362e-07f, 2.225640371e-07f, 2.223517959e-07f, 2.221392131e-07f, 2.219262891e-07f, 2.217130245e-07f,
-2.214994195e-07f, 2.212854748e-07f, 2.210711906e-07f, 2.208565675e-07f, 2.206416060e-07f, 2.204263064e-07f, 2.202106692e-07f, 2.199946949e-07f, 2.197783838e-07f, 2.195617366e-07f,
-2.193447535e-07f, 2.191274351e-07f, 2.189097818e-07f, 2.186917941e-07f, 2.184734724e-07f, 2.182548171e-07f, 2.180358288e-07f, 2.178165078e-07f, 2.175968547e-07f, 2.173768698e-07f,
-2.171565537e-07f, 2.169359067e-07f, 2.167149294e-07f, 2.164936222e-07f, 2.162719856e-07f, 2.160500200e-07f, 2.158277258e-07f, 2.156051036e-07f, 2.153821537e-07f, 2.151588767e-07f,
-2.149352730e-07f, 2.147113431e-07f, 2.144870874e-07f, 2.142625064e-07f, 2.140376005e-07f, 2.138123703e-07f, 2.135868161e-07f, 2.133609385e-07f, 2.131347378e-07f, 2.129082147e-07f,
-2.126813694e-07f, 2.124542026e-07f, 2.122267146e-07f, 2.119989059e-07f, 2.117707770e-07f, 2.115423284e-07f, 2.113135605e-07f, 2.110844738e-07f, 2.108550687e-07f, 2.106253458e-07f,
-2.103953055e-07f, 2.101649482e-07f, 2.099342745e-07f, 2.097032848e-07f, 2.094719795e-07f, 2.092403592e-07f, 2.090084243e-07f, 2.087761753e-07f, 2.085436127e-07f, 2.083107369e-07f,
-2.080775484e-07f, 2.078440477e-07f, 2.076102352e-07f, 2.073761115e-07f, 2.071416770e-07f, 2.069069322e-07f, 2.066718775e-07f, 2.064365135e-07f, 2.062008406e-07f, 2.059648592e-07f,
-2.057285700e-07f, 2.054919732e-07f, 2.052550695e-07f, 2.050178593e-07f, 2.047803431e-07f, 2.045425214e-07f, 2.043043945e-07f, 2.040659631e-07f, 2.038272277e-07f, 2.035881886e-07f,
-2.033488463e-07f, 2.031092014e-07f, 2.028692544e-07f, 2.026290057e-07f, 2.023884557e-07f, 2.021476051e-07f, 2.019064542e-07f, 2.016650036e-07f, 2.014232537e-07f, 2.011812050e-07f,
-2.009388581e-07f, 2.006962134e-07f, 2.004532713e-07f, 2.002100324e-07f, 1.999664972e-07f, 1.997226661e-07f, 1.994785397e-07f, 1.992341183e-07f, 1.989894027e-07f, 1.987443931e-07f,
-1.984990901e-07f, 1.982534942e-07f, 1.980076059e-07f, 1.977614256e-07f, 1.975149539e-07f, 1.972681913e-07f, 1.970211382e-07f, 1.967737952e-07f, 1.965261627e-07f, 1.962782412e-07f,
-1.960300313e-07f, 1.957815333e-07f, 1.955327479e-07f, 1.952836755e-07f, 1.950343166e-07f, 1.947846717e-07f, 1.945347413e-07f, 1.942845259e-07f, 1.940340260e-07f, 1.937832421e-07f,
-1.935321747e-07f, 1.932808243e-07f, 1.930291913e-07f, 1.927772764e-07f, 1.925250799e-07f, 1.922726024e-07f, 1.920198444e-07f, 1.917668065e-07f, 1.915134890e-07f, 1.912598924e-07f,
-1.910060174e-07f, 1.907518644e-07f, 1.904974339e-07f, 1.902427264e-07f, 1.899877424e-07f, 1.897324824e-07f, 1.894769470e-07f, 1.892211365e-07f, 1.889650516e-07f, 1.887086927e-07f,
-1.884520604e-07f, 1.881951551e-07f, 1.879379773e-07f, 1.876805277e-07f, 1.874228065e-07f, 1.871648145e-07f, 1.869065521e-07f, 1.866480197e-07f, 1.863892179e-07f, 1.861301473e-07f,
-1.858708082e-07f, 1.856112013e-07f, 1.853513271e-07f, 1.850911860e-07f, 1.848307785e-07f, 1.845701053e-07f, 1.843091667e-07f, 1.840479633e-07f, 1.837864956e-07f, 1.835247641e-07f,
-1.832627694e-07f, 1.830005119e-07f, 1.827379922e-07f, 1.824752108e-07f, 1.822121682e-07f, 1.819488649e-07f, 1.816853014e-07f, 1.814214782e-07f, 1.811573959e-07f, 1.808930549e-07f,
-1.806284559e-07f, 1.803635992e-07f, 1.800984855e-07f, 1.798331152e-07f, 1.795674889e-07f, 1.793016071e-07f, 1.790354702e-07f, 1.787690789e-07f, 1.785024336e-07f, 1.782355348e-07f,
-1.779683831e-07f, 1.777009791e-07f, 1.774333231e-07f, 1.771654158e-07f, 1.768972576e-07f, 1.766288491e-07f, 1.763601908e-07f, 1.760912832e-07f, 1.758221269e-07f, 1.755527223e-07f,
-1.752830701e-07f, 1.750131706e-07f, 1.747430245e-07f, 1.744726322e-07f, 1.742019944e-07f, 1.739311114e-07f, 1.736599839e-07f, 1.733886124e-07f, 1.731169973e-07f, 1.728451393e-07f,
-1.725730388e-07f, 1.723006964e-07f, 1.720281125e-07f, 1.717552878e-07f, 1.714822228e-07f, 1.712089179e-07f, 1.709353737e-07f, 1.706615908e-07f, 1.703875697e-07f, 1.701133108e-07f,
-1.698388148e-07f, 1.695640821e-07f, 1.692891133e-07f, 1.690139089e-07f, 1.687384694e-07f, 1.684627955e-07f, 1.681868875e-07f, 1.679107461e-07f, 1.676343717e-07f, 1.673577650e-07f,
-1.670809264e-07f, 1.668038565e-07f, 1.665265557e-07f, 1.662490247e-07f, 1.659712640e-07f, 1.656932741e-07f, 1.654150555e-07f, 1.651366088e-07f, 1.648579345e-07f, 1.645790331e-07f,
-1.642999052e-07f, 1.640205514e-07f, 1.637409720e-07f, 1.634611678e-07f, 1.631811392e-07f, 1.629008867e-07f, 1.626204110e-07f, 1.623397124e-07f, 1.620587917e-07f, 1.617776492e-07f,
-1.614962856e-07f, 1.612147014e-07f, 1.609328971e-07f, 1.606508733e-07f, 1.603686305e-07f, 1.600861692e-07f, 1.598034900e-07f, 1.595205934e-07f, 1.592374800e-07f, 1.589541503e-07f,
-1.586706048e-07f, 1.583868441e-07f, 1.581028687e-07f, 1.578186792e-07f, 1.575342761e-07f, 1.572496600e-07f, 1.569648314e-07f, 1.566797908e-07f, 1.563945387e-07f, 1.561090758e-07f,
-1.558234026e-07f, 1.555375196e-07f, 1.552514273e-07f, 1.549651263e-07f, 1.546786172e-07f, 1.543919004e-07f, 1.541049766e-07f, 1.538178463e-07f, 1.535305099e-07f, 1.532429682e-07f,
-1.529552215e-07f, 1.526672706e-07f, 1.523791158e-07f, 1.520907578e-07f, 1.518021970e-07f, 1.515134342e-07f, 1.512244697e-07f, 1.509353041e-07f, 1.506459381e-07f, 1.503563721e-07f,
-1.500666067e-07f, 1.497766424e-07f, 1.494864797e-07f, 1.491961194e-07f, 1.489055618e-07f, 1.486148075e-07f, 1.483238571e-07f, 1.480327111e-07f, 1.477413701e-07f, 1.474498347e-07f,
-1.471581053e-07f, 1.468661826e-07f, 1.465740670e-07f, 1.462817592e-07f, 1.459892596e-07f, 1.456965689e-07f, 1.454036876e-07f, 1.451106162e-07f, 1.448173553e-07f, 1.445239055e-07f,
-1.442302672e-07f, 1.439364411e-07f, 1.436424277e-07f, 1.433482276e-07f, 1.430538413e-07f, 1.427592693e-07f, 1.424645122e-07f, 1.421695707e-07f, 1.418744451e-07f, 1.415791361e-07f,
-1.412836443e-07f, 1.409879702e-07f, 1.406921143e-07f, 1.403960771e-07f, 1.400998594e-07f, 1.398034616e-07f, 1.395068842e-07f, 1.392101279e-07f, 1.389131931e-07f, 1.386160805e-07f,
-1.383187905e-07f, 1.380213239e-07f, 1.377236810e-07f, 1.374258625e-07f, 1.371278689e-07f, 1.368297008e-07f, 1.365313587e-07f, 1.362328432e-07f, 1.359341549e-07f, 1.356352943e-07f,
-1.353362619e-07f, 1.350370584e-07f, 1.347376843e-07f, 1.344381401e-07f, 1.341384264e-07f, 1.338385438e-07f, 1.335384929e-07f, 1.332382741e-07f, 1.329378880e-07f, 1.326373353e-07f,
-1.323366164e-07f, 1.320357319e-07f, 1.317346825e-07f, 1.314334686e-07f, 1.311320907e-07f, 1.308305496e-07f, 1.305288457e-07f, 1.302269796e-07f, 1.299249518e-07f, 1.296227630e-07f,
-1.293204136e-07f, 1.290179043e-07f, 1.287152355e-07f, 1.284124080e-07f, 1.281094221e-07f, 1.278062786e-07f, 1.275029779e-07f, 1.271995206e-07f, 1.268959073e-07f, 1.265921386e-07f,
-1.262882149e-07f, 1.259841369e-07f, 1.256799052e-07f, 1.253755202e-07f, 1.250709826e-07f, 1.247662930e-07f, 1.244614518e-07f, 1.241564597e-07f, 1.238513172e-07f, 1.235460249e-07f,
-1.232405833e-07f, 1.229349931e-07f, 1.226292547e-07f, 1.223233688e-07f, 1.220173359e-07f, 1.217111565e-07f, 1.214048313e-07f, 1.210983608e-07f, 1.207917456e-07f, 1.204849863e-07f,
-1.201780833e-07f, 1.198710373e-07f, 1.195638488e-07f, 1.192565185e-07f, 1.189490468e-07f, 1.186414344e-07f, 1.183336818e-07f, 1.180257895e-07f, 1.177177582e-07f, 1.174095884e-07f,
-1.171012807e-07f, 1.167928356e-07f, 1.164842537e-07f, 1.161755356e-07f, 1.158666819e-07f, 1.155576930e-07f, 1.152485697e-07f, 1.149393124e-07f, 1.146299217e-07f, 1.143203983e-07f,
-1.140107425e-07f, 1.137009551e-07f, 1.133910366e-07f, 1.130809876e-07f, 1.127708086e-07f, 1.124605002e-07f, 1.121500630e-07f, 1.118394975e-07f, 1.115288044e-07f, 1.112179841e-07f,
-1.109070373e-07f, 1.105959644e-07f, 1.102847662e-07f, 1.099734432e-07f, 1.096619958e-07f, 1.093504248e-07f, 1.090387307e-07f, 1.087269140e-07f, 1.084149753e-07f, 1.081029151e-07f,
-1.077907342e-07f, 1.074784330e-07f, 1.071660120e-07f, 1.068534719e-07f, 1.065408133e-07f, 1.062280367e-07f, 1.059151426e-07f, 1.056021318e-07f, 1.052890046e-07f, 1.049757617e-07f,
-1.046624037e-07f, 1.043489311e-07f, 1.040353446e-07f, 1.037216446e-07f, 1.034078318e-07f, 1.030939067e-07f, 1.027798699e-07f, 1.024657219e-07f, 1.021514634e-07f, 1.018370949e-07f,
-1.015226171e-07f, 1.012080303e-07f, 1.008933353e-07f, 1.005785326e-07f, 1.002636228e-07f, 9.994860639e-08f, 9.963348403e-08f, 9.931825626e-08f, 9.900292366e-08f, 9.868748679e-08f,
-9.837194624e-08f, 9.805630258e-08f, 9.774055637e-08f, 9.742470819e-08f, 9.710875862e-08f, 9.679270822e-08f, 9.647655758e-08f, 9.616030726e-08f, 9.584395783e-08f, 9.552750988e-08f,
-9.521096397e-08f, 9.489432067e-08f, 9.457758057e-08f, 9.426074424e-08f, 9.394381224e-08f, 9.362678515e-08f, 9.330966355e-08f, 9.299244801e-08f, 9.267513910e-08f, 9.235773740e-08f,
-9.204024348e-08f, 9.172265792e-08f, 9.140498128e-08f, 9.108721415e-08f, 9.076935709e-08f, 9.045141068e-08f, 9.013337550e-08f, 8.981525212e-08f, 8.949704111e-08f, 8.917874305e-08f,
-8.886035851e-08f, 8.854188807e-08f, 8.822333229e-08f, 8.790469177e-08f, 8.758596706e-08f, 8.726715874e-08f, 8.694826739e-08f, 8.662929358e-08f, 8.631023789e-08f, 8.599110089e-08f,
-8.567188315e-08f, 8.535258526e-08f, 8.503320778e-08f, 8.471375128e-08f, 8.439421635e-08f, 8.407460356e-08f, 8.375491348e-08f, 8.343514668e-08f, 8.311530375e-08f, 8.279538525e-08f,
-8.247539177e-08f, 8.215532386e-08f, 8.183518212e-08f, 8.151496711e-08f, 8.119467941e-08f, 8.087431960e-08f, 8.055388824e-08f, 8.023338591e-08f, 7.991281319e-08f, 7.959217066e-08f,
-7.927145887e-08f, 7.895067842e-08f, 7.862982988e-08f, 7.830891381e-08f, 7.798793080e-08f, 7.766688142e-08f, 7.734576625e-08f, 7.702458585e-08f, 7.670334080e-08f, 7.638203168e-08f,
-7.606065907e-08f, 7.573922353e-08f, 7.541772564e-08f, 7.509616597e-08f, 7.477454511e-08f, 7.445286362e-08f, 7.413112208e-08f, 7.380932106e-08f, 7.348746114e-08f, 7.316554290e-08f,
-7.284356689e-08f, 7.252153371e-08f, 7.219944393e-08f, 7.187729811e-08f, 7.155509684e-08f, 7.123284068e-08f, 7.091053022e-08f, 7.058816602e-08f, 7.026574867e-08f, 6.994327872e-08f,
-6.962075677e-08f, 6.929818338e-08f, 6.897555912e-08f, 6.865288458e-08f, 6.833016032e-08f, 6.800738692e-08f, 6.768456495e-08f, 6.736169499e-08f, 6.703877760e-08f, 6.671581337e-08f,
-6.639280287e-08f, 6.606974667e-08f, 6.574664534e-08f, 6.542349946e-08f, 6.510030961e-08f, 6.477707634e-08f, 6.445380025e-08f, 6.413048190e-08f, 6.380712186e-08f, 6.348372072e-08f,
-6.316027903e-08f, 6.283679738e-08f, 6.251327634e-08f, 6.218971648e-08f, 6.186611837e-08f, 6.154248259e-08f, 6.121880972e-08f, 6.089510031e-08f, 6.057135495e-08f, 6.024757421e-08f,
-5.992375866e-08f, 5.959990887e-08f, 5.927602542e-08f, 5.895210888e-08f, 5.862815982e-08f, 5.830417881e-08f, 5.798016643e-08f, 5.765612325e-08f, 5.733204984e-08f, 5.700794676e-08f,
-5.668381461e-08f, 5.635965394e-08f, 5.603546533e-08f, 5.571124934e-08f, 5.538700656e-08f, 5.506273755e-08f, 5.473844289e-08f, 5.441412314e-08f, 5.408977888e-08f, 5.376541068e-08f,
-5.344101911e-08f, 5.311660474e-08f, 5.279216814e-08f, 5.246770989e-08f, 5.214323055e-08f, 5.181873069e-08f, 5.149421089e-08f, 5.116967172e-08f, 5.084511374e-08f, 5.052053753e-08f,
-5.019594366e-08f, 4.987133269e-08f, 4.954670521e-08f, 4.922206177e-08f, 4.889740295e-08f, 4.857272932e-08f, 4.824804144e-08f, 4.792333989e-08f, 4.759862524e-08f, 4.727389806e-08f,
-4.694915891e-08f, 4.662440837e-08f, 4.629964700e-08f, 4.597487537e-08f, 4.565009406e-08f, 4.532530363e-08f, 4.500050464e-08f, 4.467569768e-08f, 4.435088330e-08f, 4.402606208e-08f,
-4.370123459e-08f, 4.337640138e-08f, 4.305156304e-08f, 4.272672012e-08f, 4.240187320e-08f, 4.207702285e-08f, 4.175216962e-08f, 4.142731410e-08f, 4.110245684e-08f, 4.077759841e-08f,
-4.045273939e-08f, 4.012788033e-08f, 3.980302181e-08f, 3.947816439e-08f, 3.915330864e-08f, 3.882845513e-08f, 3.850360441e-08f, 3.817875706e-08f, 3.785391365e-08f, 3.752907474e-08f,
-3.720424089e-08f, 3.687941267e-08f, 3.655459065e-08f, 3.622977540e-08f, 3.590496747e-08f, 3.558016743e-08f, 3.525537585e-08f, 3.493059330e-08f, 3.460582033e-08f, 3.428105752e-08f,
-3.395630543e-08f, 3.363156461e-08f, 3.330683565e-08f, 3.298211909e-08f, 3.265741551e-08f, 3.233272546e-08f, 3.200804952e-08f, 3.168338824e-08f, 3.135874219e-08f, 3.103411193e-08f,
-3.070949803e-08f, 3.038490105e-08f, 3.006032154e-08f, 2.973576008e-08f, 2.941121723e-08f, 2.908669354e-08f, 2.876218959e-08f, 2.843770592e-08f, 2.811324312e-08f, 2.778880172e-08f,
-2.746438231e-08f, 2.713998543e-08f, 2.681561166e-08f, 2.649126154e-08f, 2.616693565e-08f, 2.584263454e-08f, 2.551835878e-08f, 2.519410891e-08f, 2.486988552e-08f, 2.454568914e-08f,
-2.422152036e-08f, 2.389737971e-08f, 2.357326777e-08f, 2.324918509e-08f, 2.292513224e-08f, 2.260110976e-08f, 2.227711823e-08f, 2.195315819e-08f, 2.162923021e-08f, 2.130533485e-08f,
-2.098147266e-08f, 2.065764421e-08f, 2.033385004e-08f, 2.001009072e-08f, 1.968636681e-08f, 1.936267885e-08f, 1.903902742e-08f, 1.871541306e-08f, 1.839183634e-08f, 1.806829781e-08f,
-1.774479802e-08f, 1.742133753e-08f, 1.709791690e-08f, 1.677453669e-08f, 1.645119744e-08f, 1.612789972e-08f, 1.580464408e-08f, 1.548143107e-08f, 1.515826125e-08f, 1.483513518e-08f,
-1.451205341e-08f, 1.418901649e-08f, 1.386602497e-08f, 1.354307942e-08f, 1.322018038e-08f, 1.289732841e-08f, 1.257452406e-08f, 1.225176789e-08f, 1.192906044e-08f, 1.160640227e-08f,
-1.128379393e-08f, 1.096123598e-08f, 1.063872896e-08f, 1.031627344e-08f, 9.993869948e-09f, 9.671519051e-09f, 9.349221296e-09f, 9.026977234e-09f, 8.704787416e-09f, 8.382652392e-09f,
-8.060572713e-09f, 7.738548928e-09f, 7.416581588e-09f, 7.094671243e-09f, 6.772818441e-09f, 6.451023732e-09f, 6.129287665e-09f, 5.807610789e-09f, 5.485993652e-09f, 5.164436802e-09f,
-4.842940788e-09f, 4.521506158e-09f, 4.200133459e-09f, 3.878823238e-09f, 3.557576044e-09f, 3.236392422e-09f, 2.915272920e-09f, 2.594218083e-09f, 2.273228459e-09f, 1.952304594e-09f,
-1.631447033e-09f, 1.310656321e-09f, 9.899330045e-10f, 6.692776283e-10f, 3.486907371e-10f, 2.817287574e-11f, -2.922754116e-10f, -6.126535806e-10f, -9.329610874e-10f, -1.253197388e-09f,
--1.573361940e-09f, -1.893454199e-09f, -2.213473623e-09f, -2.533419668e-09f, -2.853291793e-09f, -3.173089456e-09f, -3.492812113e-09f, -3.812459224e-09f, -4.132030247e-09f, -4.451524641e-09f,
--4.770941865e-09f, -5.090281378e-09f, -5.409542640e-09f, -5.728725110e-09f, -6.047828249e-09f, -6.366851517e-09f, -6.685794375e-09f, -7.004656282e-09f, -7.323436701e-09f, -7.642135093e-09f,
--7.960750919e-09f, -8.279283642e-09f, -8.597732722e-09f, -8.916097624e-09f, -9.234377808e-09f, -9.552572739e-09f, -9.870681880e-09f, -1.018870469e-08f, -1.050664064e-08f, -1.082448919e-08f,
--1.114224981e-08f, -1.145992195e-08f, -1.177750509e-08f, -1.209499869e-08f, -1.241240221e-08f, -1.272971513e-08f, -1.304693689e-08f, -1.336406699e-08f, -1.368110487e-08f, -1.399805000e-08f,
--1.431490186e-08f, -1.463165991e-08f, -1.494832361e-08f, -1.526489244e-08f, -1.558136586e-08f, -1.589774335e-08f, -1.621402436e-08f, -1.653020837e-08f, -1.684629485e-08f, -1.716228327e-08f,
--1.747817310e-08f, -1.779396381e-08f, -1.810965486e-08f, -1.842524573e-08f, -1.874073589e-08f, -1.905612482e-08f, -1.937141197e-08f, -1.968659683e-08f, -2.000167887e-08f, -2.031665756e-08f,
--2.063153237e-08f, -2.094630277e-08f, -2.126096824e-08f, -2.157552825e-08f, -2.188998228e-08f, -2.220432980e-08f, -2.251857028e-08f, -2.283270321e-08f, -2.314672804e-08f, -2.346064427e-08f,
--2.377445136e-08f, -2.408814879e-08f, -2.440173605e-08f, -2.471521259e-08f, -2.502857791e-08f, -2.534183148e-08f, -2.565497277e-08f, -2.596800126e-08f, -2.628091644e-08f, -2.659371778e-08f,
--2.690640476e-08f, -2.721897686e-08f, -2.753143356e-08f, -2.784377433e-08f, -2.815599867e-08f, -2.846810604e-08f, -2.878009593e-08f, -2.909196782e-08f, -2.940372119e-08f, -2.971535553e-08f,
--3.002687031e-08f, -3.033826502e-08f, -3.064953914e-08f, -3.096069215e-08f, -3.127172353e-08f, -3.158263278e-08f, -3.189341937e-08f, -3.220408279e-08f, -3.251462252e-08f, -3.282503805e-08f,
--3.313532887e-08f, -3.344549445e-08f, -3.375553428e-08f, -3.406544786e-08f, -3.437523466e-08f, -3.468489417e-08f, -3.499442589e-08f, -3.530382930e-08f, -3.561310388e-08f, -3.592224913e-08f,
--3.623126453e-08f, -3.654014957e-08f, -3.684890375e-08f, -3.715752654e-08f, -3.746601745e-08f, -3.777437596e-08f, -3.808260156e-08f, -3.839069374e-08f, -3.869865199e-08f, -3.900647582e-08f,
--3.931416470e-08f, -3.962171813e-08f, -3.992913560e-08f, -4.023641661e-08f, -4.054356065e-08f, -4.085056721e-08f, -4.115743579e-08f, -4.146416588e-08f, -4.177075697e-08f, -4.207720857e-08f,
--4.238352016e-08f, -4.268969125e-08f, -4.299572132e-08f, -4.330160988e-08f, -4.360735643e-08f, -4.391296045e-08f, -4.421842145e-08f, -4.452373892e-08f, -4.482891237e-08f, -4.513394129e-08f,
--4.543882518e-08f, -4.574356355e-08f, -4.604815588e-08f, -4.635260168e-08f, -4.665690046e-08f, -4.696105170e-08f, -4.726505492e-08f, -4.756890962e-08f, -4.787261529e-08f, -4.817617144e-08f,
--4.847957757e-08f, -4.878283319e-08f, -4.908593780e-08f, -4.938889090e-08f, -4.969169199e-08f, -4.999434059e-08f, -5.029683619e-08f, -5.059917830e-08f, -5.090136644e-08f, -5.120340009e-08f,
--5.150527877e-08f, -5.180700200e-08f, -5.210856926e-08f, -5.240998008e-08f, -5.271123395e-08f, -5.301233039e-08f, -5.331326891e-08f, -5.361404902e-08f, -5.391467022e-08f, -5.421513203e-08f,
--5.451543395e-08f, -5.481557549e-08f, -5.511555618e-08f, -5.541537551e-08f, -5.571503300e-08f, -5.601452817e-08f, -5.631386052e-08f, -5.661302956e-08f, -5.691203482e-08f, -5.721087581e-08f,
--5.750955203e-08f, -5.780806301e-08f, -5.810640826e-08f, -5.840458729e-08f, -5.870259962e-08f, -5.900044477e-08f, -5.929812225e-08f, -5.959563158e-08f, -5.989297228e-08f, -6.019014387e-08f,
--6.048714585e-08f, -6.078397776e-08f, -6.108063911e-08f, -6.137712942e-08f, -6.167344820e-08f, -6.196959499e-08f, -6.226556930e-08f, -6.256137065e-08f, -6.285699856e-08f, -6.315245256e-08f,
--6.344773216e-08f, -6.374283689e-08f, -6.403776628e-08f, -6.433251984e-08f, -6.462709710e-08f, -6.492149759e-08f, -6.521572082e-08f, -6.550976632e-08f, -6.580363363e-08f, -6.609732226e-08f,
--6.639083174e-08f, -6.668416160e-08f, -6.697731137e-08f, -6.727028057e-08f, -6.756306873e-08f, -6.785567537e-08f, -6.814810004e-08f, -6.844034225e-08f, -6.873240154e-08f, -6.902427744e-08f,
--6.931596947e-08f, -6.960747718e-08f, -6.989880008e-08f, -7.018993772e-08f, -7.048088961e-08f, -7.077165531e-08f, -7.106223433e-08f, -7.135262622e-08f, -7.164283051e-08f, -7.193284672e-08f,
--7.222267441e-08f, -7.251231309e-08f, -7.280176231e-08f, -7.309102160e-08f, -7.338009051e-08f, -7.366896856e-08f, -7.395765529e-08f, -7.424615025e-08f, -7.453445296e-08f, -7.482256298e-08f,
--7.511047983e-08f, -7.539820306e-08f, -7.568573221e-08f, -7.597306681e-08f, -7.626020641e-08f, -7.654715056e-08f, -7.683389878e-08f, -7.712045063e-08f, -7.740680565e-08f, -7.769296337e-08f,
--7.797892335e-08f, -7.826468513e-08f, -7.855024825e-08f, -7.883561225e-08f, -7.912077669e-08f, -7.940574111e-08f, -7.969050504e-08f, -7.997506805e-08f, -8.025942968e-08f, -8.054358947e-08f,
--8.082754698e-08f, -8.111130175e-08f, -8.139485332e-08f, -8.167820126e-08f, -8.196134511e-08f, -8.224428442e-08f, -8.252701874e-08f, -8.280954762e-08f, -8.309187062e-08f, -8.337398728e-08f,
--8.365589716e-08f, -8.393759981e-08f, -8.421909479e-08f, -8.450038165e-08f, -8.478145994e-08f, -8.506232922e-08f, -8.534298904e-08f, -8.562343896e-08f, -8.590367854e-08f, -8.618370733e-08f,
--8.646352489e-08f, -8.674313078e-08f, -8.702252455e-08f, -8.730170577e-08f, -8.758067399e-08f, -8.785942877e-08f, -8.813796968e-08f, -8.841629627e-08f, -8.869440810e-08f, -8.897230474e-08f,
--8.924998575e-08f, -8.952745069e-08f, -8.980469912e-08f, -9.008173060e-08f, -9.035854471e-08f, -9.063514100e-08f, -9.091151903e-08f, -9.118767839e-08f, -9.146361862e-08f, -9.173933930e-08f,
--9.201483999e-08f, -9.229012026e-08f, -9.256517967e-08f, -9.284001781e-08f, -9.311463422e-08f, -9.338902849e-08f, -9.366320019e-08f, -9.393714887e-08f, -9.421087412e-08f, -9.448437550e-08f,
--9.475765259e-08f, -9.503070495e-08f, -9.530353217e-08f, -9.557613381e-08f, -9.584850944e-08f, -9.612065864e-08f, -9.639258099e-08f, -9.666427606e-08f, -9.693574342e-08f, -9.720698266e-08f,
--9.747799334e-08f, -9.774877504e-08f, -9.801932734e-08f, -9.828964983e-08f, -9.855974207e-08f, -9.882960365e-08f, -9.909923414e-08f, -9.936863313e-08f, -9.963780019e-08f, -9.990673491e-08f,
--1.001754369e-07f, -1.004439057e-07f, -1.007121408e-07f, -1.009801420e-07f, -1.012479087e-07f, -1.015154406e-07f, -1.017827372e-07f, -1.020497982e-07f, -1.023166230e-07f, -1.025832114e-07f,
--1.028495628e-07f, -1.031156769e-07f, -1.033815532e-07f, -1.036471914e-07f, -1.039125910e-07f, -1.041777516e-07f, -1.044426728e-07f, -1.047073542e-07f, -1.049717955e-07f, -1.052359960e-07f,
--1.054999556e-07f, -1.057636737e-07f, -1.060271500e-07f, -1.062903840e-07f, -1.065533754e-07f, -1.068161237e-07f, -1.070786285e-07f, -1.073408894e-07f, -1.076029061e-07f, -1.078646781e-07f,
--1.081262050e-07f, -1.083874864e-07f, -1.086485219e-07f, -1.089093111e-07f, -1.091698536e-07f, -1.094301490e-07f, -1.096901969e-07f, -1.099499969e-07f, -1.102095487e-07f, -1.104688517e-07f,
--1.107279056e-07f, -1.109867100e-07f, -1.112452646e-07f, -1.115035689e-07f, -1.117616224e-07f, -1.120194249e-07f, -1.122769759e-07f, -1.125342751e-07f, -1.127913220e-07f, -1.130481162e-07f,
--1.133046574e-07f, -1.135609452e-07f, -1.138169791e-07f, -1.140727588e-07f, -1.143282839e-07f, -1.145835539e-07f, -1.148385686e-07f, -1.150933275e-07f, -1.153478302e-07f, -1.156020763e-07f,
--1.158560656e-07f, -1.161097974e-07f, -1.163632716e-07f, -1.166164876e-07f, -1.168694451e-07f, -1.171221438e-07f, -1.173745832e-07f, -1.176267629e-07f, -1.178786826e-07f, -1.181303419e-07f,
--1.183817404e-07f, -1.186328777e-07f, -1.188837535e-07f, -1.191343673e-07f, -1.193847188e-07f, -1.196348076e-07f, -1.198846333e-07f, -1.201341955e-07f, -1.203834940e-07f, -1.206325282e-07f,
--1.208812978e-07f, -1.211298024e-07f, -1.213780417e-07f, -1.216260153e-07f, -1.218737228e-07f, -1.221211638e-07f, -1.223683380e-07f, -1.226152449e-07f, -1.228618843e-07f, -1.231082557e-07f,
--1.233543588e-07f, -1.236001932e-07f, -1.238457585e-07f, -1.240910544e-07f, -1.243360804e-07f, -1.245808363e-07f, -1.248253216e-07f, -1.250695361e-07f, -1.253134792e-07f, -1.255571507e-07f,
--1.258005502e-07f, -1.260436772e-07f, -1.262865316e-07f, -1.265291128e-07f, -1.267714206e-07f, -1.270134545e-07f, -1.272552142e-07f, -1.274966994e-07f, -1.277379097e-07f, -1.279788446e-07f,
--1.282195039e-07f, -1.284598873e-07f, -1.286999942e-07f, -1.289398245e-07f, -1.291793776e-07f, -1.294186533e-07f, -1.296576513e-07f, -1.298963710e-07f, -1.301348123e-07f, -1.303729747e-07f,
--1.306108579e-07f, -1.308484615e-07f, -1.310857852e-07f, -1.313228286e-07f, -1.315595914e-07f, -1.317960732e-07f, -1.320322737e-07f, -1.322681925e-07f, -1.325038293e-07f, -1.327391837e-07f,
--1.329742553e-07f, -1.332090439e-07f, -1.334435490e-07f, -1.336777704e-07f, -1.339117076e-07f, -1.341453604e-07f, -1.343787284e-07f, -1.346118112e-07f, -1.348446085e-07f, -1.350771199e-07f,
--1.353093452e-07f, -1.355412839e-07f, -1.357729358e-07f, -1.360043004e-07f, -1.362353775e-07f, -1.364661667e-07f, -1.366966676e-07f, -1.369268800e-07f, -1.371568034e-07f, -1.373864376e-07f,
--1.376157822e-07f, -1.378448369e-07f, -1.380736013e-07f, -1.383020751e-07f, -1.385302580e-07f, -1.387581496e-07f, -1.389857496e-07f, -1.392130576e-07f, -1.394400734e-07f, -1.396667966e-07f,
--1.398932269e-07f, -1.401193638e-07f, -1.403452072e-07f, -1.405707567e-07f, -1.407960119e-07f, -1.410209725e-07f, -1.412456382e-07f, -1.414700087e-07f, -1.416940836e-07f, -1.419178626e-07f,
--1.421413454e-07f, -1.423645316e-07f, -1.425874210e-07f, -1.428100132e-07f, -1.430323078e-07f, -1.432543046e-07f, -1.434760033e-07f, -1.436974035e-07f, -1.439185048e-07f, -1.441393071e-07f,
--1.443598099e-07f, -1.445800129e-07f, -1.447999159e-07f, -1.450195184e-07f, -1.452388202e-07f, -1.454578210e-07f, -1.456765205e-07f, -1.458949183e-07f, -1.461130140e-07f, -1.463308075e-07f,
--1.465482984e-07f, -1.467654864e-07f, -1.469823711e-07f, -1.471989523e-07f, -1.474152296e-07f, -1.476312027e-07f, -1.478468713e-07f, -1.480622352e-07f, -1.482772940e-07f, -1.484920473e-07f,
--1.487064949e-07f, -1.489206365e-07f, -1.491344718e-07f, -1.493480004e-07f, -1.495612221e-07f, -1.497741366e-07f, -1.499867435e-07f, -1.501990425e-07f, -1.504110333e-07f, -1.506227158e-07f,
--1.508340894e-07f, -1.510451540e-07f, -1.512559092e-07f, -1.514663547e-07f, -1.516764903e-07f, -1.518863156e-07f, -1.520958304e-07f, -1.523050342e-07f, -1.525139270e-07f, -1.527225082e-07f,
--1.529307778e-07f, -1.531387352e-07f, -1.533463804e-07f, -1.535537129e-07f, -1.537607325e-07f, -1.539674388e-07f, -1.541738317e-07f, -1.543799107e-07f, -1.545856756e-07f, -1.547911262e-07f,
--1.549962621e-07f, -1.552010830e-07f, -1.554055887e-07f, -1.556097788e-07f, -1.558136531e-07f, -1.560172113e-07f, -1.562204531e-07f, -1.564233782e-07f, -1.566259863e-07f, -1.568282772e-07f,
--1.570302505e-07f, -1.572319060e-07f, -1.574332434e-07f, -1.576342625e-07f, -1.578349628e-07f, -1.580353442e-07f, -1.582354064e-07f, -1.584351491e-07f, -1.586345720e-07f, -1.588336749e-07f,
--1.590324573e-07f, -1.592309192e-07f, -1.594290602e-07f, -1.596268800e-07f, -1.598243784e-07f, -1.600215551e-07f, -1.602184097e-07f, -1.604149421e-07f, -1.606111520e-07f, -1.608070391e-07f,
--1.610026030e-07f, -1.611978437e-07f, -1.613927607e-07f, -1.615873538e-07f, -1.617816228e-07f, -1.619755673e-07f, -1.621691872e-07f, -1.623624821e-07f, -1.625554517e-07f, -1.627480959e-07f,
--1.629404143e-07f, -1.631324067e-07f, -1.633240728e-07f, -1.635154124e-07f, -1.637064251e-07f, -1.638971108e-07f, -1.640874692e-07f, -1.642774999e-07f, -1.644672028e-07f, -1.646565776e-07f,
--1.648456241e-07f, -1.650343419e-07f, -1.652227308e-07f, -1.654107905e-07f, -1.655985209e-07f, -1.657859216e-07f, -1.659729924e-07f, -1.661597331e-07f, -1.663461433e-07f, -1.665322229e-07f,
--1.667179715e-07f, -1.669033890e-07f, -1.670884750e-07f, -1.672732294e-07f, -1.674576519e-07f, -1.676417421e-07f, -1.678255000e-07f, -1.680089252e-07f, -1.681920175e-07f, -1.683747766e-07f,
--1.685572023e-07f, -1.687392943e-07f, -1.689210524e-07f, -1.691024765e-07f, -1.692835661e-07f, -1.694643211e-07f, -1.696447412e-07f, -1.698248262e-07f, -1.700045758e-07f, -1.701839899e-07f,
--1.703630681e-07f, -1.705418103e-07f, -1.707202161e-07f, -1.708982854e-07f, -1.710760179e-07f, -1.712534134e-07f, -1.714304717e-07f, -1.716071924e-07f, -1.717835755e-07f, -1.719596205e-07f,
--1.721353274e-07f, -1.723106958e-07f, -1.724857256e-07f, -1.726604165e-07f, -1.728347683e-07f, -1.730087808e-07f, -1.731824536e-07f, -1.733557867e-07f, -1.735287797e-07f, -1.737014324e-07f,
--1.738737447e-07f, -1.740457163e-07f, -1.742173469e-07f, -1.743886363e-07f, -1.745595844e-07f, -1.747301909e-07f, -1.749004555e-07f, -1.750703781e-07f, -1.752399583e-07f, -1.754091961e-07f,
--1.755780912e-07f, -1.757466433e-07f, -1.759148523e-07f, -1.760827179e-07f, -1.762502399e-07f, -1.764174181e-07f, -1.765842523e-07f, -1.767507422e-07f, -1.769168877e-07f, -1.770826885e-07f,
--1.772481444e-07f, -1.774132552e-07f, -1.775780207e-07f, -1.777424407e-07f, -1.779065149e-07f, -1.780702433e-07f, -1.782336254e-07f, -1.783966612e-07f, -1.785593504e-07f, -1.787216929e-07f,
--1.788836883e-07f, -1.790453366e-07f, -1.792066374e-07f, -1.793675907e-07f, -1.795281962e-07f, -1.796884536e-07f, -1.798483628e-07f, -1.800079236e-07f, -1.801671358e-07f, -1.803259992e-07f,
--1.804845135e-07f, -1.806426786e-07f, -1.808004943e-07f, -1.809579604e-07f, -1.811150767e-07f, -1.812718429e-07f, -1.814282590e-07f, -1.815843246e-07f, -1.817400396e-07f, -1.818954038e-07f,
--1.820504171e-07f, -1.822050791e-07f, -1.823593898e-07f, -1.825133489e-07f, -1.826669562e-07f, -1.828202116e-07f, -1.829731148e-07f, -1.831256658e-07f, -1.832778641e-07f, -1.834297098e-07f,
--1.835812026e-07f, -1.837323423e-07f, -1.838831287e-07f, -1.840335617e-07f, -1.841836410e-07f, -1.843333665e-07f, -1.844827380e-07f, -1.846317553e-07f, -1.847804182e-07f, -1.849287266e-07f,
--1.850766803e-07f, -1.852242790e-07f, -1.853715226e-07f, -1.855184110e-07f, -1.856649439e-07f, -1.858111211e-07f, -1.859569426e-07f, -1.861024081e-07f, -1.862475174e-07f, -1.863922704e-07f,
--1.865366669e-07f, -1.866807067e-07f, -1.868243896e-07f, -1.869677155e-07f, -1.871106842e-07f, -1.872532956e-07f, -1.873955494e-07f, -1.875374455e-07f, -1.876789837e-07f, -1.878201638e-07f,
--1.879609858e-07f, -1.881014493e-07f, -1.882415544e-07f, -1.883813007e-07f, -1.885206881e-07f, -1.886597165e-07f, -1.887983856e-07f, -1.889366954e-07f, -1.890746457e-07f, -1.892122363e-07f,
--1.893494670e-07f, -1.894863377e-07f, -1.896228482e-07f, -1.897589984e-07f, -1.898947881e-07f, -1.900302172e-07f, -1.901652854e-07f, -1.902999927e-07f, -1.904343389e-07f, -1.905683237e-07f,
--1.907019472e-07f, -1.908352091e-07f, -1.909681092e-07f, -1.911006474e-07f, -1.912328237e-07f, -1.913646377e-07f, -1.914960893e-07f, -1.916271785e-07f, -1.917579051e-07f, -1.918882688e-07f,
--1.920182696e-07f, -1.921479074e-07f, -1.922771819e-07f, -1.924060930e-07f, -1.925346406e-07f, -1.926628246e-07f, -1.927906447e-07f, -1.929181009e-07f, -1.930451930e-07f, -1.931719208e-07f,
--1.932982843e-07f, -1.934242833e-07f, -1.935499176e-07f, -1.936751871e-07f, -1.938000916e-07f, -1.939246311e-07f, -1.940488054e-07f, -1.941726144e-07f, -1.942960579e-07f, -1.944191357e-07f,
--1.945418478e-07f, -1.946641940e-07f, -1.947861742e-07f, -1.949077883e-07f, -1.950290361e-07f, -1.951499174e-07f, -1.952704322e-07f, -1.953905804e-07f, -1.955103617e-07f, -1.956297762e-07f,
--1.957488235e-07f, -1.958675037e-07f, -1.959858166e-07f, -1.961037620e-07f, -1.962213399e-07f, -1.963385501e-07f, -1.964553924e-07f, -1.965718669e-07f, -1.966879733e-07f, -1.968037115e-07f,
--1.969190814e-07f, -1.970340829e-07f, -1.971487159e-07f, -1.972629802e-07f, -1.973768758e-07f, -1.974904024e-07f, -1.976035601e-07f, -1.977163486e-07f, -1.978287679e-07f, -1.979408178e-07f,
--1.980524982e-07f, -1.981638091e-07f, -1.982747503e-07f, -1.983853217e-07f, -1.984955231e-07f, -1.986053546e-07f, -1.987148159e-07f, -1.988239069e-07f, -1.989326276e-07f, -1.990409778e-07f,
--1.991489574e-07f, -1.992565664e-07f, -1.993638046e-07f, -1.994706719e-07f, -1.995771682e-07f, -1.996832933e-07f, -1.997890473e-07f, -1.998944300e-07f, -1.999994413e-07f, -2.001040810e-07f,
--2.002083492e-07f, -2.003122456e-07f, -2.004157702e-07f, -2.005189229e-07f, -2.006217036e-07f, -2.007241122e-07f, -2.008261486e-07f, -2.009278127e-07f, -2.010291044e-07f, -2.011300237e-07f,
--2.012305703e-07f, -2.013307442e-07f, -2.014305454e-07f, -2.015299738e-07f, -2.016290292e-07f, -2.017277115e-07f, -2.018260207e-07f, -2.019239567e-07f, -2.020215194e-07f, -2.021187086e-07f,
--2.022155244e-07f, -2.023119666e-07f, -2.024080352e-07f, -2.025037300e-07f, -2.025990510e-07f, -2.026939981e-07f, -2.027885712e-07f, -2.028827702e-07f, -2.029765950e-07f, -2.030700456e-07f,
--2.031631219e-07f, -2.032558238e-07f, -2.033481512e-07f, -2.034401040e-07f, -2.035316822e-07f, -2.036228857e-07f, -2.037137144e-07f, -2.038041682e-07f, -2.038942471e-07f, -2.039839510e-07f,
--2.040732797e-07f, -2.041622334e-07f, -2.042508117e-07f, -2.043390148e-07f, -2.044268425e-07f, -2.045142947e-07f, -2.046013715e-07f, -2.046880726e-07f, -2.047743981e-07f, -2.048603478e-07f,
--2.049459218e-07f, -2.050311199e-07f, -2.051159421e-07f, -2.052003882e-07f, -2.052844584e-07f, -2.053681524e-07f, -2.054514702e-07f, -2.055344118e-07f, -2.056169771e-07f, -2.056991660e-07f,
--2.057809785e-07f, -2.058624145e-07f, -2.059434740e-07f, -2.060241568e-07f, -2.061044630e-07f, -2.061843925e-07f, -2.062639452e-07f, -2.063431211e-07f, -2.064219201e-07f, -2.065003421e-07f,
--2.065783872e-07f, -2.066560552e-07f, -2.067333461e-07f, -2.068102599e-07f, -2.068867964e-07f, -2.069629557e-07f, -2.070387377e-07f, -2.071141424e-07f, -2.071891696e-07f, -2.072638194e-07f,
--2.073380918e-07f, -2.074119865e-07f, -2.074855037e-07f, -2.075586433e-07f, -2.076314052e-07f, -2.077037893e-07f, -2.077757957e-07f, -2.078474243e-07f, -2.079186751e-07f, -2.079895479e-07f,
--2.080600429e-07f, -2.081301599e-07f, -2.081998988e-07f, -2.082692598e-07f, -2.083382426e-07f, -2.084068473e-07f, -2.084750739e-07f, -2.085429223e-07f, -2.086103925e-07f, -2.086774844e-07f,
--2.087441980e-07f, -2.088105333e-07f, -2.088764902e-07f, -2.089420687e-07f, -2.090072688e-07f, -2.090720905e-07f, -2.091365337e-07f, -2.092005984e-07f, -2.092642845e-07f, -2.093275921e-07f,
--2.093905211e-07f, -2.094530715e-07f, -2.095152432e-07f, -2.095770362e-07f, -2.096384506e-07f, -2.096994863e-07f, -2.097601432e-07f, -2.098204213e-07f, -2.098803207e-07f, -2.099398413e-07f,
--2.099989830e-07f, -2.100577459e-07f, -2.101161300e-07f, -2.101741351e-07f, -2.102317614e-07f, -2.102890087e-07f, -2.103458772e-07f, -2.104023666e-07f, -2.104584771e-07f, -2.105142087e-07f,
--2.105695612e-07f, -2.106245348e-07f, -2.106791293e-07f, -2.107333448e-07f, -2.107871813e-07f, -2.108406387e-07f, -2.108937171e-07f, -2.109464164e-07f, -2.109987366e-07f, -2.110506778e-07f,
--2.111022399e-07f, -2.111534228e-07f, -2.112042267e-07f, -2.112546515e-07f, -2.113046971e-07f, -2.113543637e-07f, -2.114036511e-07f, -2.114525594e-07f, -2.115010886e-07f, -2.115492387e-07f,
--2.115970097e-07f, -2.116444015e-07f, -2.116914143e-07f, -2.117380479e-07f, -2.117843024e-07f, -2.118301778e-07f, -2.118756740e-07f, -2.119207912e-07f, -2.119655293e-07f, -2.120098883e-07f,
--2.120538682e-07f, -2.120974690e-07f, -2.121406908e-07f, -2.121835335e-07f, -2.122259971e-07f, -2.122680817e-07f, -2.123097873e-07f, -2.123511138e-07f, -2.123920614e-07f, -2.124326299e-07f,
--2.124728194e-07f, -2.125126300e-07f, -2.125520616e-07f, -2.125911143e-07f, -2.126297881e-07f, -2.126680829e-07f, -2.127059989e-07f, -2.127435360e-07f, -2.127806942e-07f, -2.128174736e-07f,
--2.128538741e-07f, -2.128898959e-07f, -2.129255389e-07f, -2.129608031e-07f, -2.129956886e-07f, -2.130301954e-07f, -2.130643235e-07f, -2.130980730e-07f, -2.131314438e-07f, -2.131644360e-07f,
--2.131970496e-07f, -2.132292846e-07f, -2.132611411e-07f, -2.132926191e-07f, -2.133237187e-07f, -2.133544398e-07f, -2.133847824e-07f, -2.134147467e-07f, -2.134443327e-07f, -2.134735403e-07f,
--2.135023696e-07f, -2.135308207e-07f, -2.135588936e-07f, -2.135865882e-07f, -2.136139047e-07f, -2.136408431e-07f, -2.136674035e-07f, -2.136935858e-07f, -2.137193900e-07f, -2.137448164e-07f,
--2.137698648e-07f, -2.137945353e-07f, -2.138188279e-07f, -2.138427428e-07f, -2.138662799e-07f, -2.138894393e-07f, -2.139122210e-07f, -2.139346251e-07f, -2.139566516e-07f, -2.139783005e-07f,
--2.139995720e-07f, -2.140204660e-07f, -2.140409826e-07f, -2.140611219e-07f, -2.140808838e-07f, -2.141002685e-07f, -2.141192760e-07f, -2.141379063e-07f, -2.141561595e-07f, -2.141740357e-07f,
--2.141915349e-07f, -2.142086571e-07f, -2.142254024e-07f, -2.142417709e-07f, -2.142577626e-07f, -2.142733775e-07f, -2.142886158e-07f, -2.143034775e-07f, -2.143179626e-07f, -2.143320712e-07f,
--2.143458033e-07f, -2.143591591e-07f, -2.143721386e-07f, -2.143847418e-07f, -2.143969688e-07f, -2.144088196e-07f, -2.144202944e-07f, -2.144313931e-07f, -2.144421160e-07f, -2.144524629e-07f,
--2.144624340e-07f, -2.144720293e-07f, -2.144812490e-07f, -2.144900930e-07f, -2.144985615e-07f, -2.145066545e-07f, -2.145143721e-07f, -2.145217144e-07f, -2.145286814e-07f, -2.145352731e-07f,
--2.145414898e-07f, -2.145473313e-07f, -2.145527979e-07f, -2.145578896e-07f, -2.145626064e-07f, -2.145669485e-07f, -2.145709159e-07f, -2.145745086e-07f, -2.145777269e-07f, -2.145805706e-07f,
--2.145830400e-07f, -2.145851351e-07f, -2.145868560e-07f, -2.145882027e-07f, -2.145891754e-07f, -2.145897741e-07f, -2.145899988e-07f, -2.145898498e-07f, -2.145893270e-07f, -2.145884306e-07f,
--2.145871606e-07f, -2.145855172e-07f, -2.145835003e-07f, -2.145811102e-07f, -2.145783468e-07f, -2.145752102e-07f, -2.145717007e-07f, -2.145678182e-07f, -2.145635628e-07f, -2.145589346e-07f,
--2.145539337e-07f, -2.145485603e-07f, -2.145428143e-07f, -2.145366960e-07f, -2.145302053e-07f, -2.145233424e-07f, -2.145161074e-07f, -2.145085003e-07f, -2.145005213e-07f, -2.144921705e-07f,
--2.144834479e-07f, -2.144743536e-07f, -2.144648879e-07f, -2.144550506e-07f, -2.144448421e-07f, -2.144342622e-07f, -2.144233112e-07f, -2.144119892e-07f, -2.144002963e-07f, -2.143882324e-07f,
--2.143757979e-07f, -2.143629927e-07f, -2.143498170e-07f, -2.143362708e-07f, -2.143223544e-07f, -2.143080677e-07f, -2.142934109e-07f, -2.142783842e-07f, -2.142629875e-07f, -2.142472210e-07f,
--2.142310849e-07f, -2.142145792e-07f, -2.141977041e-07f, -2.141804596e-07f, -2.141628459e-07f, -2.141448631e-07f, -2.141265113e-07f, -2.141077906e-07f, -2.140887012e-07f, -2.140692430e-07f,
--2.140494164e-07f, -2.140292213e-07f, -2.140086579e-07f, -2.139877263e-07f, -2.139664266e-07f, -2.139447590e-07f, -2.139227235e-07f, -2.139003204e-07f, -2.138775496e-07f, -2.138544114e-07f,
--2.138309058e-07f, -2.138070330e-07f, -2.137827931e-07f, -2.137581862e-07f, -2.137332125e-07f, -2.137078720e-07f, -2.136821649e-07f, -2.136560914e-07f, -2.136296515e-07f, -2.136028454e-07f,
--2.135756731e-07f, -2.135481349e-07f, -2.135202309e-07f, -2.134919612e-07f, -2.134633259e-07f, -2.134343251e-07f, -2.134049590e-07f, -2.133752278e-07f, -2.133451315e-07f, -2.133146703e-07f,
--2.132838443e-07f, -2.132526536e-07f, -2.132210984e-07f, -2.131891789e-07f, -2.131568951e-07f, -2.131242473e-07f, -2.130912354e-07f, -2.130578598e-07f, -2.130241204e-07f, -2.129900176e-07f,
--2.129555513e-07f, -2.129207217e-07f, -2.128855290e-07f, -2.128499734e-07f, -2.128140549e-07f, -2.127777737e-07f, -2.127411299e-07f, -2.127041238e-07f, -2.126667554e-07f, -2.126290248e-07f,
--2.125909323e-07f, -2.125524780e-07f, -2.125136620e-07f, -2.124744845e-07f, -2.124349456e-07f, -2.123950455e-07f, -2.123547843e-07f, -2.123141621e-07f, -2.122731792e-07f, -2.122318357e-07f,
--2.121901317e-07f, -2.121480674e-07f, -2.121056429e-07f, -2.120628584e-07f, -2.120197140e-07f, -2.119762099e-07f, -2.119323463e-07f, -2.118881233e-07f, -2.118435411e-07f, -2.117985998e-07f,
--2.117532996e-07f, -2.117076406e-07f, -2.116616230e-07f, -2.116152470e-07f, -2.115685127e-07f, -2.115214203e-07f, -2.114739699e-07f, -2.114261617e-07f, -2.113779959e-07f, -2.113294727e-07f,
--2.112805921e-07f, -2.112313544e-07f, -2.111817598e-07f, -2.111318083e-07f, -2.110815002e-07f, -2.110308356e-07f, -2.109798147e-07f, -2.109284377e-07f, -2.108767047e-07f, -2.108246159e-07f,
--2.107721715e-07f, -2.107193716e-07f, -2.106662165e-07f, -2.106127062e-07f, -2.105588410e-07f, -2.105046210e-07f, -2.104500465e-07f, -2.103951175e-07f, -2.103398342e-07f, -2.102841969e-07f,
--2.102282057e-07f, -2.101718608e-07f, -2.101151623e-07f, -2.100581105e-07f, -2.100007055e-07f, -2.099429475e-07f, -2.098848367e-07f, -2.098263732e-07f, -2.097675572e-07f, -2.097083890e-07f,
--2.096488686e-07f, -2.095889964e-07f, -2.095287723e-07f, -2.094681968e-07f, -2.094072699e-07f, -2.093459917e-07f, -2.092843626e-07f, -2.092223827e-07f, -2.091600521e-07f, -2.090973711e-07f,
--2.090343398e-07f, -2.089709585e-07f, -2.089072273e-07f, -2.088431464e-07f, -2.087787160e-07f, -2.087139363e-07f, -2.086488075e-07f, -2.085833297e-07f, -2.085175032e-07f, -2.084513282e-07f,
--2.083848048e-07f, -2.083179333e-07f, -2.082507138e-07f, -2.081831465e-07f, -2.081152317e-07f, -2.080469694e-07f, -2.079783600e-07f, -2.079094037e-07f, -2.078401005e-07f, -2.077704508e-07f,
--2.077004546e-07f, -2.076301123e-07f, -2.075594240e-07f, -2.074883899e-07f, -2.074170102e-07f, -2.073452851e-07f, -2.072732149e-07f, -2.072007996e-07f, -2.071280396e-07f, -2.070549350e-07f,
--2.069814861e-07f, -2.069076929e-07f, -2.068335559e-07f, -2.067590750e-07f, -2.066842507e-07f, -2.066090829e-07f, -2.065335721e-07f, -2.064577183e-07f, -2.063815218e-07f, -2.063049828e-07f,
--2.062281016e-07f, -2.061508782e-07f, -2.060733129e-07f, -2.059954060e-07f, -2.059171577e-07f, -2.058385681e-07f, -2.057596375e-07f, -2.056803660e-07f, -2.056007540e-07f, -2.055208016e-07f,
--2.054405090e-07f, -2.053598765e-07f, -2.052789043e-07f, -2.051975925e-07f, -2.051159414e-07f, -2.050339513e-07f, -2.049516223e-07f, -2.048689546e-07f, -2.047859486e-07f, -2.047026043e-07f,
--2.046189220e-07f, -2.045349020e-07f, -2.044505445e-07f, -2.043658496e-07f, -2.042808176e-07f, -2.041954488e-07f, -2.041097433e-07f, -2.040237014e-07f, -2.039373233e-07f, -2.038506093e-07f,
--2.037635595e-07f, -2.036761741e-07f, -2.035884535e-07f, -2.035003979e-07f, -2.034120074e-07f, -2.033232823e-07f, -2.032342228e-07f, -2.031448291e-07f, -2.030551016e-07f, -2.029650404e-07f,
--2.028746457e-07f, -2.027839178e-07f, -2.026928570e-07f, -2.026014633e-07f, -2.025097372e-07f, -2.024176788e-07f, -2.023252883e-07f, -2.022325660e-07f, -2.021395121e-07f, -2.020461269e-07f,
--2.019524106e-07f, -2.018583634e-07f, -2.017639856e-07f, -2.016692774e-07f, -2.015742390e-07f, -2.014788707e-07f, -2.013831728e-07f, -2.012871454e-07f, -2.011907888e-07f, -2.010941033e-07f,
--2.009970891e-07f, -2.008997464e-07f, -2.008020755e-07f, -2.007040766e-07f, -2.006057500e-07f, -2.005070958e-07f, -2.004081145e-07f, -2.003088061e-07f, -2.002091710e-07f, -2.001092094e-07f,
--2.000089216e-07f, -1.999083077e-07f, -1.998073681e-07f, -1.997061029e-07f, -1.996045125e-07f, -1.995025971e-07f, -1.994003569e-07f, -1.992977922e-07f, -1.991949033e-07f, -1.990916903e-07f,
--1.989881536e-07f, -1.988842934e-07f, -1.987801099e-07f, -1.986756034e-07f, -1.985707742e-07f, -1.984656225e-07f, -1.983601486e-07f, -1.982543527e-07f, -1.981482351e-07f, -1.980417961e-07f,
--1.979350358e-07f, -1.978279546e-07f, -1.977205527e-07f, -1.976128304e-07f, -1.975047879e-07f, -1.973964255e-07f, -1.972877435e-07f, -1.971787420e-07f, -1.970694215e-07f, -1.969597821e-07f,
--1.968498241e-07f, -1.967395477e-07f, -1.966289533e-07f, -1.965180411e-07f, -1.964068113e-07f, -1.962952643e-07f, -1.961834002e-07f, -1.960712194e-07f, -1.959587221e-07f, -1.958459086e-07f,
--1.957327792e-07f, -1.956193341e-07f, -1.955055735e-07f, -1.953914979e-07f, -1.952771073e-07f, -1.951624022e-07f, -1.950473827e-07f, -1.949320492e-07f, -1.948164019e-07f, -1.947004411e-07f,
--1.945841670e-07f, -1.944675800e-07f, -1.943506802e-07f, -1.942334681e-07f, -1.941159438e-07f, -1.939981076e-07f, -1.938799598e-07f, -1.937615007e-07f, -1.936427306e-07f, -1.935236497e-07f,
--1.934042583e-07f, -1.932845567e-07f, -1.931645451e-07f, -1.930442239e-07f, -1.929235933e-07f, -1.928026536e-07f, -1.926814052e-07f, -1.925598481e-07f, -1.924379828e-07f, -1.923158096e-07f,
--1.921933286e-07f, -1.920705403e-07f, -1.919474448e-07f, -1.918240425e-07f, -1.917003336e-07f, -1.915763184e-07f, -1.914519973e-07f, -1.913273704e-07f, -1.912024381e-07f, -1.910772007e-07f,
--1.909516585e-07f, -1.908258117e-07f, -1.906996606e-07f, -1.905732056e-07f, -1.904464468e-07f, -1.903193847e-07f, -1.901920194e-07f, -1.900643514e-07f, -1.899363808e-07f, -1.898081079e-07f,
--1.896795331e-07f, -1.895506566e-07f, -1.894214788e-07f, -1.892919999e-07f, -1.891622202e-07f, -1.890321401e-07f, -1.889017597e-07f, -1.887710795e-07f, -1.886400996e-07f, -1.885088205e-07f,
--1.883772423e-07f, -1.882453654e-07f, -1.881131901e-07f, -1.879807167e-07f, -1.878479455e-07f, -1.877148767e-07f, -1.875815108e-07f, -1.874478479e-07f, -1.873138883e-07f, -1.871796325e-07f,
--1.870450806e-07f, -1.869102330e-07f, -1.867750900e-07f, -1.866396519e-07f, -1.865039190e-07f, -1.863678915e-07f, -1.862315698e-07f, -1.860949543e-07f, -1.859580451e-07f, -1.858208426e-07f,
--1.856833472e-07f, -1.855455590e-07f, -1.854074785e-07f, -1.852691059e-07f, -1.851304415e-07f, -1.849914857e-07f, -1.848522387e-07f, -1.847127009e-07f, -1.845728726e-07f, -1.844327540e-07f,
--1.842923455e-07f, -1.841516474e-07f, -1.840106600e-07f, -1.838693836e-07f, -1.837278186e-07f, -1.835859652e-07f, -1.834438237e-07f, -1.833013945e-07f, -1.831586779e-07f, -1.830156742e-07f,
--1.828723837e-07f, -1.827288067e-07f, -1.825849435e-07f, -1.824407945e-07f, -1.822963599e-07f, -1.821516402e-07f, -1.820066355e-07f, -1.818613462e-07f, -1.817157727e-07f, -1.815699152e-07f,
--1.814237741e-07f, -1.812773497e-07f, -1.811306422e-07f, -1.809836521e-07f, -1.808363797e-07f, -1.806888252e-07f, -1.805409890e-07f, -1.803928714e-07f, -1.802444727e-07f, -1.800957933e-07f,
--1.799468335e-07f, -1.797975935e-07f, -1.796480738e-07f, -1.794982746e-07f, -1.793481963e-07f, -1.791978392e-07f, -1.790472036e-07f, -1.788962898e-07f, -1.787450982e-07f, -1.785936291e-07f,
--1.784418828e-07f, -1.782898597e-07f, -1.781375600e-07f, -1.779849842e-07f, -1.778321324e-07f, -1.776790052e-07f, -1.775256027e-07f, -1.773719253e-07f, -1.772179734e-07f, -1.770637473e-07f,
--1.769092473e-07f, -1.767544737e-07f, -1.765994269e-07f, -1.764441072e-07f, -1.762885149e-07f, -1.761326504e-07f, -1.759765140e-07f, -1.758201060e-07f, -1.756634268e-07f, -1.755064768e-07f,
--1.753492561e-07f, -1.751917652e-07f, -1.750340045e-07f, -1.748759741e-07f, -1.747176746e-07f, -1.745591062e-07f, -1.744002692e-07f, -1.742411640e-07f, -1.740817910e-07f, -1.739221504e-07f,
--1.737622427e-07f, -1.736020680e-07f, -1.734416269e-07f, -1.732809196e-07f, -1.731199465e-07f, -1.729587078e-07f, -1.727972041e-07f, -1.726354355e-07f, -1.724734024e-07f, -1.723111052e-07f,
--1.721485442e-07f, -1.719857198e-07f, -1.718226323e-07f, -1.716592821e-07f, -1.714956694e-07f, -1.713317946e-07f, -1.711676582e-07f, -1.710032604e-07f, -1.708386015e-07f, -1.706736820e-07f,
--1.705085021e-07f, -1.703430622e-07f, -1.701773627e-07f, -1.700114039e-07f, -1.698451861e-07f, -1.696787098e-07f, -1.695119752e-07f, -1.693449827e-07f, -1.691777326e-07f, -1.690102253e-07f,
--1.688424612e-07f, -1.686744406e-07f, -1.685061638e-07f, -1.683376313e-07f, -1.681688433e-07f, -1.679998002e-07f, -1.678305023e-07f, -1.676609501e-07f, -1.674911438e-07f, -1.673210838e-07f,
--1.671507705e-07f, -1.669802043e-07f, -1.668093854e-07f, -1.666383142e-07f, -1.664669912e-07f, -1.662954165e-07f, -1.661235907e-07f, -1.659515141e-07f, -1.657791869e-07f, -1.656066096e-07f,
--1.654337826e-07f, -1.652607061e-07f, -1.650873806e-07f, -1.649138064e-07f, -1.647399838e-07f, -1.645659133e-07f, -1.643915951e-07f, -1.642170297e-07f, -1.640422174e-07f, -1.638671586e-07f,
--1.636918535e-07f, -1.635163027e-07f, -1.633405064e-07f, -1.631644650e-07f, -1.629881789e-07f, -1.628116484e-07f, -1.626348739e-07f, -1.624578558e-07f, -1.622805944e-07f, -1.621030901e-07f,
--1.619253432e-07f, -1.617473541e-07f, -1.615691233e-07f, -1.613906509e-07f, -1.612119375e-07f, -1.610329834e-07f, -1.608537889e-07f, -1.606743544e-07f, -1.604946803e-07f, -1.603147670e-07f,
--1.601346148e-07f, -1.599542240e-07f, -1.597735951e-07f, -1.595927285e-07f, -1.594116244e-07f, -1.592302832e-07f, -1.590487054e-07f, -1.588668913e-07f, -1.586848413e-07f, -1.585025557e-07f,
--1.583200350e-07f, -1.581372794e-07f, -1.579542893e-07f, -1.577710652e-07f, -1.575876074e-07f, -1.574039163e-07f, -1.572199922e-07f, -1.570358355e-07f, -1.568514467e-07f, -1.566668260e-07f,
--1.564819738e-07f, -1.562968906e-07f, -1.561115766e-07f, -1.559260323e-07f, -1.557402581e-07f, -1.555542543e-07f, -1.553680212e-07f, -1.551815594e-07f, -1.549948691e-07f, -1.548079507e-07f,
--1.546208046e-07f, -1.544334312e-07f, -1.542458309e-07f, -1.540580040e-07f, -1.538699509e-07f, -1.536816721e-07f, -1.534931678e-07f, -1.533044384e-07f, -1.531154844e-07f, -1.529263061e-07f,
--1.527369039e-07f, -1.525472782e-07f, -1.523574293e-07f, -1.521673577e-07f, -1.519770637e-07f, -1.517865478e-07f, -1.515958102e-07f, -1.514048514e-07f, -1.512136717e-07f, -1.510222716e-07f,
--1.508306514e-07f, -1.506388115e-07f, -1.504467522e-07f, -1.502544741e-07f, -1.500619774e-07f, -1.498692626e-07f, -1.496763300e-07f, -1.494831800e-07f, -1.492898130e-07f, -1.490962295e-07f,
--1.489024296e-07f, -1.487084140e-07f, -1.485141829e-07f, -1.483197367e-07f, -1.481250759e-07f, -1.479302008e-07f, -1.477351118e-07f, -1.475398092e-07f, -1.473442936e-07f, -1.471485652e-07f,
--1.469526245e-07f, -1.467564718e-07f, -1.465601076e-07f, -1.463635322e-07f, -1.461667460e-07f, -1.459697495e-07f, -1.457725429e-07f, -1.455751267e-07f, -1.453775014e-07f, -1.451796672e-07f,
--1.449816245e-07f, -1.447833739e-07f, -1.445849156e-07f, -1.443862500e-07f, -1.441873776e-07f, -1.439882987e-07f, -1.437890138e-07f, -1.435895231e-07f, -1.433898272e-07f, -1.431899265e-07f,
--1.429898212e-07f, -1.427895118e-07f, -1.425889987e-07f, -1.423882824e-07f, -1.421873631e-07f, -1.419862413e-07f, -1.417849174e-07f, -1.415833918e-07f, -1.413816649e-07f, -1.411797371e-07f,
--1.409776087e-07f, -1.407752802e-07f, -1.405727520e-07f, -1.403700244e-07f, -1.401670979e-07f, -1.399639729e-07f, -1.397606498e-07f, -1.395571289e-07f, -1.393534107e-07f, -1.391494956e-07f,
--1.389453839e-07f, -1.387410761e-07f, -1.385365726e-07f, -1.383318738e-07f, -1.381269800e-07f, -1.379218917e-07f, -1.377166093e-07f, -1.375111331e-07f, -1.373054637e-07f, -1.370996013e-07f,
--1.368935464e-07f, -1.366872994e-07f, -1.364808607e-07f, -1.362742307e-07f, -1.360674098e-07f, -1.358603985e-07f, -1.356531970e-07f, -1.354458058e-07f, -1.352382254e-07f, -1.350304560e-07f,
--1.348224983e-07f, -1.346143524e-07f, -1.344060189e-07f, -1.341974981e-07f, -1.339887905e-07f, -1.337798965e-07f, -1.335708164e-07f, -1.333615507e-07f, -1.331520998e-07f, -1.329424640e-07f,
--1.327326439e-07f, -1.325226398e-07f, -1.323124521e-07f, -1.321020812e-07f, -1.318915275e-07f, -1.316807915e-07f, -1.314698735e-07f, -1.312587740e-07f, -1.310474933e-07f, -1.308360320e-07f,
--1.306243903e-07f, -1.304125687e-07f, -1.302005676e-07f, -1.299883874e-07f, -1.297760286e-07f, -1.295634915e-07f, -1.293507766e-07f, -1.291378842e-07f, -1.289248148e-07f, -1.287115688e-07f,
--1.284981466e-07f, -1.282845485e-07f, -1.280707752e-07f, -1.278568268e-07f, -1.276427039e-07f, -1.274284069e-07f, -1.272139362e-07f, -1.269992921e-07f, -1.267844751e-07f, -1.265694857e-07f,
--1.263543242e-07f, -1.261389910e-07f, -1.259234866e-07f, -1.257078114e-07f, -1.254919658e-07f, -1.252759502e-07f, -1.250597650e-07f, -1.248434106e-07f, -1.246268875e-07f, -1.244101961e-07f,
--1.241933368e-07f, -1.239763099e-07f, -1.237591160e-07f, -1.235417554e-07f, -1.233242286e-07f, -1.231065360e-07f, -1.228886779e-07f, -1.226706549e-07f, -1.224524672e-07f, -1.222341155e-07f,
--1.220155999e-07f, -1.217969211e-07f, -1.215780794e-07f, -1.213590751e-07f, -1.211399089e-07f, -1.209205809e-07f, -1.207010918e-07f, -1.204814418e-07f, -1.202616315e-07f, -1.200416612e-07f,
--1.198215314e-07f, -1.196012424e-07f, -1.193807947e-07f, -1.191601888e-07f, -1.189394250e-07f, -1.187185037e-07f, -1.184974254e-07f, -1.182761906e-07f, -1.180547995e-07f, -1.178332527e-07f,
--1.176115506e-07f, -1.173896936e-07f, -1.171676820e-07f, -1.169455165e-07f, -1.167231972e-07f, -1.165007248e-07f, -1.162780996e-07f, -1.160553219e-07f, -1.158323924e-07f, -1.156093113e-07f,
--1.153860791e-07f, -1.151626962e-07f, -1.149391631e-07f, -1.147154802e-07f, -1.144916478e-07f, -1.142676665e-07f, -1.140435366e-07f, -1.138192586e-07f, -1.135948329e-07f, -1.133702599e-07f,
--1.131455400e-07f, -1.129206738e-07f, -1.126956615e-07f, -1.124705036e-07f, -1.122452006e-07f, -1.120197529e-07f, -1.117941608e-07f, -1.115684249e-07f, -1.113425456e-07f, -1.111165232e-07f,
--1.108903583e-07f, -1.106640511e-07f, -1.104376023e-07f, -1.102110121e-07f, -1.099842811e-07f, -1.097574096e-07f, -1.095303981e-07f, -1.093032469e-07f, -1.090759566e-07f, -1.088485276e-07f,
--1.086209603e-07f, -1.083932550e-07f, -1.081654124e-07f, -1.079374327e-07f, -1.077093164e-07f, -1.074810639e-07f, -1.072526757e-07f, -1.070241522e-07f, -1.067954938e-07f, -1.065667009e-07f,
--1.063377741e-07f, -1.061087136e-07f, -1.058795200e-07f, -1.056501937e-07f, -1.054207350e-07f, -1.051911445e-07f, -1.049614226e-07f, -1.047315697e-07f, -1.045015861e-07f, -1.042714725e-07f,
--1.040412291e-07f, -1.038108565e-07f, -1.035803549e-07f, -1.033497250e-07f, -1.031189671e-07f, -1.028880817e-07f, -1.026570691e-07f, -1.024259298e-07f, -1.021946643e-07f, -1.019632730e-07f,
--1.017317562e-07f, -1.015001145e-07f, -1.012683483e-07f, -1.010364580e-07f, -1.008044440e-07f, -1.005723068e-07f, -1.003400468e-07f, -1.001076644e-07f, -9.987516013e-08f, -9.964253435e-08f,
--9.940978751e-08f, -9.917692005e-08f, -9.894393239e-08f, -9.871082497e-08f, -9.847759824e-08f, -9.824425261e-08f, -9.801078853e-08f, -9.777720643e-08f, -9.754350674e-08f, -9.730968990e-08f,
--9.707575635e-08f, -9.684170651e-08f, -9.660754083e-08f, -9.637325974e-08f, -9.613886368e-08f, -9.590435307e-08f, -9.566972836e-08f, -9.543498998e-08f, -9.520013837e-08f, -9.496517396e-08f,
--9.473009719e-08f, -9.449490849e-08f, -9.425960831e-08f, -9.402419707e-08f, -9.378867521e-08f, -9.355304318e-08f, -9.331730140e-08f, -9.308145031e-08f, -9.284549035e-08f, -9.260942196e-08f,
--9.237324557e-08f, -9.213696162e-08f, -9.190057055e-08f, -9.166407279e-08f, -9.142746878e-08f, -9.119075896e-08f, -9.095394377e-08f, -9.071702364e-08f, -9.047999901e-08f, -9.024287032e-08f,
--9.000563800e-08f, -8.976830250e-08f, -8.953086425e-08f, -8.929332369e-08f, -8.905568126e-08f, -8.881793740e-08f, -8.858009254e-08f, -8.834214712e-08f, -8.810410158e-08f, -8.786595636e-08f,
--8.762771190e-08f, -8.738936863e-08f, -8.715092700e-08f, -8.691238745e-08f, -8.667375040e-08f, -8.643501631e-08f, -8.619618561e-08f, -8.595725873e-08f, -8.571823613e-08f, -8.547911823e-08f,
--8.523990548e-08f, -8.500059832e-08f, -8.476119718e-08f, -8.452170251e-08f, -8.428211474e-08f, -8.404243431e-08f, -8.380266167e-08f, -8.356279725e-08f, -8.332284150e-08f, -8.308279485e-08f,
--8.284265774e-08f, -8.260243061e-08f, -8.236211390e-08f, -8.212170806e-08f, -8.188121352e-08f, -8.164063073e-08f, -8.139996011e-08f, -8.115920212e-08f, -8.091835719e-08f, -8.067742577e-08f,
--8.043640829e-08f, -8.019530520e-08f, -7.995411693e-08f, -7.971284393e-08f, -7.947148663e-08f, -7.923004549e-08f, -7.898852092e-08f, -7.874691339e-08f, -7.850522333e-08f, -7.826345118e-08f,
--7.802159738e-08f, -7.777966237e-08f, -7.753764660e-08f, -7.729555050e-08f, -7.705337451e-08f, -7.681111908e-08f, -7.656878465e-08f, -7.632637166e-08f, -7.608388054e-08f, -7.584131175e-08f,
--7.559866572e-08f, -7.535594290e-08f, -7.511314372e-08f, -7.487026863e-08f, -7.462731806e-08f, -7.438429247e-08f, -7.414119228e-08f, -7.389801795e-08f, -7.365476991e-08f, -7.341144861e-08f,
--7.316805449e-08f, -7.292458798e-08f, -7.268104954e-08f, -7.243743959e-08f, -7.219375859e-08f, -7.195000698e-08f, -7.170618520e-08f, -7.146229368e-08f, -7.121833288e-08f, -7.097430323e-08f,
--7.073020517e-08f, -7.048603915e-08f, -7.024180561e-08f, -6.999750499e-08f, -6.975313774e-08f, -6.950870429e-08f, -6.926420508e-08f, -6.901964056e-08f, -6.877501118e-08f, -6.853031736e-08f,
--6.828555957e-08f, -6.804073822e-08f, -6.779585378e-08f, -6.755090668e-08f, -6.730589736e-08f, -6.706082626e-08f, -6.681569384e-08f, -6.657050052e-08f, -6.632524675e-08f, -6.607993298e-08f,
--6.583455964e-08f, -6.558912718e-08f, -6.534363604e-08f, -6.509808666e-08f, -6.485247948e-08f, -6.460681495e-08f, -6.436109351e-08f, -6.411531560e-08f, -6.386948167e-08f, -6.362359214e-08f,
--6.337764748e-08f, -6.313164811e-08f, -6.288559449e-08f, -6.263948704e-08f, -6.239332623e-08f, -6.214711248e-08f, -6.190084624e-08f, -6.165452795e-08f, -6.140815806e-08f, -6.116173700e-08f,
--6.091526522e-08f, -6.066874316e-08f, -6.042217126e-08f, -6.017554996e-08f, -5.992887971e-08f, -5.968216095e-08f, -5.943539412e-08f, -5.918857966e-08f, -5.894171802e-08f, -5.869480963e-08f,
--5.844785494e-08f, -5.820085439e-08f, -5.795380842e-08f, -5.770671747e-08f, -5.745958199e-08f, -5.721240241e-08f, -5.696517919e-08f, -5.671791275e-08f, -5.647060355e-08f, -5.622325202e-08f,
--5.597585861e-08f, -5.572842376e-08f, -5.548094790e-08f, -5.523343149e-08f, -5.498587496e-08f, -5.473827875e-08f, -5.449064330e-08f, -5.424296907e-08f, -5.399525648e-08f, -5.374750598e-08f,
--5.349971802e-08f, -5.325189302e-08f, -5.300403144e-08f, -5.275613372e-08f, -5.250820029e-08f, -5.226023160e-08f, -5.201222809e-08f, -5.176419020e-08f, -5.151611837e-08f, -5.126801304e-08f,
--5.101987466e-08f, -5.077170366e-08f, -5.052350048e-08f, -5.027526557e-08f, -5.002699937e-08f, -4.977870231e-08f, -4.953037485e-08f, -4.928201741e-08f, -4.903363045e-08f, -4.878521439e-08f,
--4.853676968e-08f, -4.828829677e-08f, -4.803979609e-08f, -4.779126808e-08f, -4.754271318e-08f, -4.729413184e-08f, -4.704552449e-08f, -4.679689158e-08f, -4.654823353e-08f, -4.629955081e-08f,
--4.605084383e-08f, -4.580211305e-08f, -4.555335891e-08f, -4.530458183e-08f, -4.505578228e-08f, -4.480696067e-08f, -4.455811746e-08f, -4.430925308e-08f, -4.406036797e-08f, -4.381146258e-08f,
--4.356253733e-08f, -4.331359268e-08f, -4.306462905e-08f, -4.281564690e-08f, -4.256664665e-08f, -4.231762875e-08f, -4.206859364e-08f, -4.181954175e-08f, -4.157047353e-08f, -4.132138941e-08f,
--4.107228983e-08f, -4.082317524e-08f, -4.057404606e-08f, -4.032490274e-08f, -4.007574571e-08f, -3.982657542e-08f, -3.957739231e-08f, -3.932819680e-08f, -3.907898935e-08f, -3.882977038e-08f,
--3.858054033e-08f, -3.833129965e-08f, -3.808204878e-08f, -3.783278814e-08f, -3.758351817e-08f, -3.733423933e-08f, -3.708495203e-08f, -3.683565672e-08f, -3.658635384e-08f, -3.633704382e-08f,
--3.608772711e-08f, -3.583840413e-08f, -3.558907533e-08f, -3.533974113e-08f, -3.509040199e-08f, -3.484105834e-08f, -3.459171060e-08f, -3.434235923e-08f, -3.409300465e-08f, -3.384364730e-08f,
--3.359428762e-08f, -3.334492604e-08f, -3.309556300e-08f, -3.284619894e-08f, -3.259683429e-08f, -3.234746949e-08f, -3.209810497e-08f, -3.184874118e-08f, -3.159937853e-08f, -3.135001748e-08f,
--3.110065845e-08f, -3.085130188e-08f, -3.060194821e-08f, -3.035259787e-08f, -3.010325129e-08f, -2.985390891e-08f, -2.960457117e-08f, -2.935523850e-08f, -2.910591133e-08f, -2.885659010e-08f,
--2.860727524e-08f, -2.835796719e-08f, -2.810866638e-08f, -2.785937324e-08f, -2.761008821e-08f, -2.736081172e-08f, -2.711154421e-08f, -2.686228611e-08f, -2.661303785e-08f, -2.636379987e-08f,
--2.611457259e-08f, -2.586535646e-08f, -2.561615190e-08f, -2.536695935e-08f, -2.511777923e-08f, -2.486861199e-08f, -2.461945806e-08f, -2.437031786e-08f, -2.412119183e-08f, -2.387208041e-08f,
--2.362298401e-08f, -2.337390308e-08f, -2.312483805e-08f, -2.287578935e-08f, -2.262675740e-08f, -2.237774265e-08f, -2.212874552e-08f, -2.187976644e-08f, -2.163080584e-08f, -2.138186416e-08f,
--2.113294183e-08f, -2.088403927e-08f, -2.063515691e-08f, -2.038629520e-08f, -2.013745455e-08f, -1.988863540e-08f, -1.963983817e-08f, -1.939106330e-08f, -1.914231121e-08f, -1.889358234e-08f,
--1.864487712e-08f, -1.839619596e-08f, -1.814753931e-08f, -1.789890760e-08f, -1.765030124e-08f, -1.740172067e-08f, -1.715316631e-08f, -1.690463861e-08f, -1.665613797e-08f, -1.640766484e-08f,
--1.615921964e-08f, -1.591080279e-08f, -1.566241473e-08f, -1.541405589e-08f, -1.516572668e-08f, -1.491742753e-08f, -1.466915889e-08f, -1.442092116e-08f, -1.417271478e-08f, -1.392454017e-08f,
--1.367639776e-08f, -1.342828798e-08f, -1.318021125e-08f, -1.293216800e-08f, -1.268415865e-08f, -1.243618364e-08f, -1.218824337e-08f, -1.194033829e-08f, -1.169246882e-08f, -1.144463537e-08f,
--1.119683838e-08f, -1.094907827e-08f, -1.070135546e-08f, -1.045367039e-08f, -1.020602346e-08f, -9.958415114e-09f, -9.710845767e-09f, -9.463315844e-09f, -9.215825770e-09f, -8.968375967e-09f,
--8.720966858e-09f, -8.473598867e-09f, -8.226272416e-09f, -7.978987929e-09f, -7.731745827e-09f, -7.484546532e-09f, -7.237390468e-09f, -6.990278056e-09f, -6.743209718e-09f, -6.496185875e-09f,
--6.249206949e-09f, -6.002273362e-09f, -5.755385534e-09f, -5.508543886e-09f, -5.261748840e-09f, -5.015000815e-09f, -4.768300233e-09f, -4.521647513e-09f, -4.275043075e-09f, -4.028487340e-09f,
--3.781980727e-09f, -3.535523655e-09f, -3.289116545e-09f, -3.042759814e-09f, -2.796453883e-09f, -2.550199170e-09f, -2.303996093e-09f, -2.057845071e-09f, -1.811746522e-09f, -1.565700864e-09f,
--1.319708516e-09f, -1.073769894e-09f, -8.278854161e-10f, -5.820554999e-10f, -3.362805624e-10f, -9.056102029e-11f, 1.551027095e-10f, 4.007102106e-10f, 6.462610665e-10f, 8.917548612e-10f,
-1.137191179e-09f, 1.382569603e-09f, 1.627889719e-09f, 1.873151111e-09f, 2.118353365e-09f, 2.363496064e-09f, 2.608578794e-09f, 2.853601141e-09f, 3.098562690e-09f, 3.343463028e-09f,
-3.588301740e-09f, 3.833078412e-09f, 4.077792630e-09f, 4.322443983e-09f, 4.567032055e-09f, 4.811556435e-09f, 5.056016710e-09f, 5.300412467e-09f, 5.544743293e-09f, 5.789008777e-09f,
-6.033208507e-09f, 6.277342071e-09f, 6.521409058e-09f, 6.765409055e-09f, 7.009341653e-09f, 7.253206440e-09f, 7.497003005e-09f, 7.740730939e-09f, 7.984389831e-09f, 8.227979271e-09f,
-8.471498848e-09f, 8.714948155e-09f, 8.958326780e-09f, 9.201634316e-09f, 9.444870352e-09f, 9.688034481e-09f, 9.931126294e-09f, 1.017414538e-08f, 1.041709134e-08f, 1.065996375e-08f,
-1.090276222e-08f, 1.114548633e-08f, 1.138813569e-08f, 1.163070987e-08f, 1.187320847e-08f, 1.211563109e-08f, 1.235797732e-08f, 1.260024676e-08f, 1.284243900e-08f, 1.308455363e-08f,
-1.332659025e-08f, 1.356854845e-08f, 1.381042783e-08f, 1.405222799e-08f, 1.429394851e-08f, 1.453558900e-08f, 1.477714905e-08f, 1.501862825e-08f, 1.526002621e-08f, 1.550134252e-08f,
-1.574257678e-08f, 1.598372858e-08f, 1.622479752e-08f, 1.646578321e-08f, 1.670668523e-08f, 1.694750319e-08f, 1.718823668e-08f, 1.742888530e-08f, 1.766944865e-08f, 1.790992634e-08f,
-1.815031795e-08f, 1.839062310e-08f, 1.863084137e-08f, 1.887097237e-08f, 1.911101571e-08f, 1.935097097e-08f, 1.959083776e-08f, 1.983061569e-08f, 2.007030435e-08f, 2.030990334e-08f,
-2.054941227e-08f, 2.078883074e-08f, 2.102815835e-08f, 2.126739470e-08f, 2.150653940e-08f, 2.174559205e-08f, 2.198455225e-08f, 2.222341961e-08f, 2.246219373e-08f, 2.270087421e-08f,
-2.293946066e-08f, 2.317795268e-08f, 2.341634988e-08f, 2.365465186e-08f, 2.389285823e-08f, 2.413096860e-08f, 2.436898256e-08f, 2.460689973e-08f, 2.484471971e-08f, 2.508244211e-08f,
-2.532006653e-08f, 2.555759259e-08f, 2.579501989e-08f, 2.603234803e-08f, 2.626957663e-08f, 2.650670529e-08f, 2.674373363e-08f, 2.698066124e-08f, 2.721748775e-08f, 2.745421275e-08f,
-2.769083586e-08f, 2.792735669e-08f, 2.816377485e-08f, 2.840008995e-08f, 2.863630160e-08f, 2.887240940e-08f, 2.910841298e-08f, 2.934431194e-08f, 2.958010589e-08f, 2.981579445e-08f,
-3.005137723e-08f, 3.028685384e-08f, 3.052222389e-08f, 3.075748700e-08f, 3.099264278e-08f, 3.122769084e-08f, 3.146263080e-08f, 3.169746227e-08f, 3.193218487e-08f, 3.216679821e-08f,
-3.240130190e-08f, 3.263569557e-08f, 3.286997882e-08f, 3.310415127e-08f, 3.333821254e-08f, 3.357216224e-08f, 3.380600000e-08f, 3.403972542e-08f, 3.427333813e-08f, 3.450683775e-08f,
-3.474022388e-08f, 3.497349615e-08f, 3.520665418e-08f, 3.543969759e-08f, 3.567262599e-08f, 3.590543900e-08f, 3.613813625e-08f, 3.637071735e-08f, 3.660318192e-08f, 3.683552959e-08f,
-3.706775997e-08f, 3.729987269e-08f, 3.753186737e-08f, 3.776374362e-08f, 3.799550107e-08f, 3.822713935e-08f, 3.845865807e-08f, 3.869005685e-08f, 3.892133533e-08f, 3.915249312e-08f,
-3.938352985e-08f, 3.961444514e-08f, 3.984523862e-08f, 4.007590990e-08f, 4.030645863e-08f, 4.053688441e-08f, 4.076718687e-08f, 4.099736565e-08f, 4.122742037e-08f, 4.145735064e-08f,
-4.168715611e-08f, 4.191683640e-08f, 4.214639113e-08f, 4.237581993e-08f, 4.260512243e-08f, 4.283429826e-08f, 4.306334705e-08f, 4.329226842e-08f, 4.352106200e-08f, 4.374972743e-08f,
-4.397826434e-08f, 4.420667234e-08f, 4.443495108e-08f, 4.466310018e-08f, 4.489111928e-08f, 4.511900801e-08f, 4.534676599e-08f, 4.557439286e-08f, 4.580188825e-08f, 4.602925180e-08f,
-4.625648314e-08f, 4.648358190e-08f, 4.671054771e-08f, 4.693738020e-08f, 4.716407902e-08f, 4.739064380e-08f, 4.761707417e-08f, 4.784336976e-08f, 4.806953021e-08f, 4.829555516e-08f,
-4.852144425e-08f, 4.874719710e-08f, 4.897281336e-08f, 4.919829266e-08f, 4.942363464e-08f, 4.964883894e-08f, 4.987390520e-08f, 5.009883304e-08f, 5.032362213e-08f, 5.054827208e-08f,
-5.077278254e-08f, 5.099715315e-08f, 5.122138356e-08f, 5.144547339e-08f, 5.166942229e-08f, 5.189322991e-08f, 5.211689588e-08f, 5.234041984e-08f, 5.256380144e-08f, 5.278704032e-08f,
-5.301013611e-08f, 5.323308847e-08f, 5.345589704e-08f, 5.367856146e-08f, 5.390108138e-08f, 5.412345643e-08f, 5.434568626e-08f, 5.456777052e-08f, 5.478970886e-08f, 5.501150091e-08f,
-5.523314633e-08f, 5.545464476e-08f, 5.567599585e-08f, 5.589719924e-08f, 5.611825458e-08f, 5.633916152e-08f, 5.655991971e-08f, 5.678052879e-08f, 5.700098842e-08f, 5.722129823e-08f,
-5.744145789e-08f, 5.766146705e-08f, 5.788132534e-08f, 5.810103242e-08f, 5.832058795e-08f, 5.853999157e-08f, 5.875924293e-08f, 5.897834169e-08f, 5.919728750e-08f, 5.941608001e-08f,
-5.963471887e-08f, 5.985320374e-08f, 6.007153427e-08f, 6.028971011e-08f, 6.050773092e-08f, 6.072559635e-08f, 6.094330606e-08f, 6.116085970e-08f, 6.137825693e-08f, 6.159549740e-08f,
-6.181258078e-08f, 6.202950671e-08f, 6.224627485e-08f, 6.246288486e-08f, 6.267933640e-08f, 6.289562913e-08f, 6.311176270e-08f, 6.332773677e-08f, 6.354355101e-08f, 6.375920507e-08f,
-6.397469861e-08f, 6.419003129e-08f, 6.440520278e-08f, 6.462021273e-08f, 6.483506080e-08f, 6.504974666e-08f, 6.526426996e-08f, 6.547863038e-08f, 6.569282757e-08f, 6.590686119e-08f,
-6.612073092e-08f, 6.633443640e-08f, 6.654797732e-08f, 6.676135332e-08f, 6.697456409e-08f, 6.718760927e-08f, 6.740048854e-08f, 6.761320157e-08f, 6.782574801e-08f, 6.803812754e-08f,
-6.825033983e-08f, 6.846238453e-08f, 6.867426133e-08f, 6.888596988e-08f, 6.909750985e-08f, 6.930888092e-08f, 6.952008276e-08f, 6.973111502e-08f, 6.994197739e-08f, 7.015266954e-08f,
-7.036319113e-08f, 7.057354183e-08f, 7.078372132e-08f, 7.099372927e-08f, 7.120356535e-08f, 7.141322924e-08f, 7.162272060e-08f, 7.183203911e-08f, 7.204118445e-08f, 7.225015628e-08f,
-7.245895429e-08f, 7.266757814e-08f, 7.287602752e-08f, 7.308430210e-08f, 7.329240155e-08f, 7.350032555e-08f, 7.370807378e-08f, 7.391564592e-08f, 7.412304164e-08f, 7.433026062e-08f,
-7.453730253e-08f, 7.474416707e-08f, 7.495085390e-08f, 7.515736271e-08f, 7.536369318e-08f, 7.556984498e-08f, 7.577581780e-08f, 7.598161132e-08f, 7.618722522e-08f, 7.639265917e-08f,
-7.659791288e-08f, 7.680298601e-08f, 7.700787824e-08f, 7.721258928e-08f, 7.741711878e-08f, 7.762146645e-08f, 7.782563196e-08f, 7.802961501e-08f, 7.823341527e-08f, 7.843703243e-08f,
-7.864046617e-08f, 7.884371619e-08f, 7.904678218e-08f, 7.924966380e-08f, 7.945236077e-08f, 7.965487276e-08f, 7.985719946e-08f, 8.005934056e-08f, 8.026129575e-08f, 8.046306472e-08f,
-8.066464717e-08f, 8.086604277e-08f, 8.106725122e-08f, 8.126827222e-08f, 8.146910545e-08f, 8.166975061e-08f, 8.187020738e-08f, 8.207047547e-08f, 8.227055456e-08f, 8.247044435e-08f,
-8.267014454e-08f, 8.286965481e-08f, 8.306897486e-08f, 8.326810439e-08f, 8.346704309e-08f, 8.366579066e-08f, 8.386434680e-08f, 8.406271120e-08f, 8.426088356e-08f, 8.445886358e-08f,
-8.465665095e-08f, 8.485424537e-08f, 8.505164655e-08f, 8.524885418e-08f, 8.544586796e-08f, 8.564268760e-08f, 8.583931278e-08f, 8.603574322e-08f, 8.623197862e-08f, 8.642801867e-08f,
-8.662386308e-08f, 8.681951155e-08f, 8.701496379e-08f, 8.721021949e-08f, 8.740527837e-08f, 8.760014012e-08f, 8.779480445e-08f, 8.798927107e-08f, 8.818353968e-08f, 8.837760999e-08f,
-8.857148170e-08f, 8.876515452e-08f, 8.895862815e-08f, 8.915190231e-08f, 8.934497671e-08f, 8.953785104e-08f, 8.973052503e-08f, 8.992299837e-08f, 9.011527079e-08f, 9.030734198e-08f,
-9.049921166e-08f, 9.069087954e-08f, 9.088234534e-08f, 9.107360875e-08f, 9.126466951e-08f, 9.145552731e-08f, 9.164618187e-08f, 9.183663291e-08f, 9.202688013e-08f, 9.221692326e-08f,
-9.240676200e-08f, 9.259639608e-08f, 9.278582521e-08f, 9.297504910e-08f, 9.316406747e-08f, 9.335288003e-08f, 9.354148651e-08f, 9.372988663e-08f, 9.391808009e-08f, 9.410606662e-08f,
-9.429384594e-08f, 9.448141777e-08f, 9.466878183e-08f, 9.485593783e-08f, 9.504288550e-08f, 9.522962455e-08f, 9.541615472e-08f, 9.560247572e-08f, 9.578858728e-08f, 9.597448911e-08f,
-9.616018095e-08f, 9.634566250e-08f, 9.653093351e-08f, 9.671599369e-08f, 9.690084277e-08f, 9.708548047e-08f, 9.726990652e-08f, 9.745412064e-08f, 9.763812257e-08f, 9.782191203e-08f,
-9.800548874e-08f, 9.818885244e-08f, 9.837200286e-08f, 9.855493971e-08f, 9.873766274e-08f, 9.892017167e-08f, 9.910246622e-08f, 9.928454615e-08f, 9.946641116e-08f, 9.964806100e-08f,
-9.982949540e-08f, 1.000107141e-07f, 1.001917168e-07f, 1.003725032e-07f, 1.005530732e-07f, 1.007334264e-07f, 1.009135625e-07f, 1.010934813e-07f, 1.012731826e-07f, 1.014526660e-07f,
-1.016319313e-07f, 1.018109783e-07f, 1.019898066e-07f, 1.021684160e-07f, 1.023468063e-07f, 1.025249772e-07f, 1.027029284e-07f, 1.028806597e-07f, 1.030581708e-07f, 1.032354614e-07f,
-1.034125313e-07f, 1.035893802e-07f, 1.037660080e-07f, 1.039424142e-07f, 1.041185987e-07f, 1.042945611e-07f, 1.044703014e-07f, 1.046458191e-07f, 1.048211140e-07f, 1.049961859e-07f,
-1.051710346e-07f, 1.053456597e-07f, 1.055200610e-07f, 1.056942383e-07f, 1.058681913e-07f, 1.060419197e-07f, 1.062154233e-07f, 1.063887019e-07f, 1.065617552e-07f, 1.067345829e-07f,
-1.069071849e-07f, 1.070795607e-07f, 1.072517103e-07f, 1.074236333e-07f, 1.075953296e-07f, 1.077667988e-07f, 1.079380406e-07f, 1.081090550e-07f, 1.082798416e-07f, 1.084504001e-07f,
-1.086207303e-07f, 1.087908321e-07f, 1.089607050e-07f, 1.091303489e-07f, 1.092997636e-07f, 1.094689488e-07f, 1.096379043e-07f, 1.098066297e-07f, 1.099751249e-07f, 1.101433897e-07f,
-1.103114237e-07f, 1.104792268e-07f, 1.106467987e-07f, 1.108141392e-07f, 1.109812480e-07f, 1.111481249e-07f, 1.113147696e-07f, 1.114811820e-07f, 1.116473617e-07f, 1.118133086e-07f,
-1.119790223e-07f, 1.121445028e-07f, 1.123097497e-07f, 1.124747627e-07f, 1.126395418e-07f, 1.128040865e-07f, 1.129683968e-07f, 1.131324723e-07f, 1.132963128e-07f, 1.134599182e-07f,
-1.136232881e-07f, 1.137864223e-07f, 1.139493207e-07f, 1.141119829e-07f, 1.142744087e-07f, 1.144365980e-07f, 1.145985504e-07f, 1.147602658e-07f, 1.149217439e-07f, 1.150829846e-07f,
-1.152439875e-07f, 1.154047524e-07f, 1.155652792e-07f, 1.157255675e-07f, 1.158856172e-07f, 1.160454281e-07f, 1.162049998e-07f, 1.163643323e-07f, 1.165234253e-07f, 1.166822784e-07f,
-1.168408917e-07f, 1.169992647e-07f, 1.171573973e-07f, 1.173152892e-07f, 1.174729403e-07f, 1.176303504e-07f, 1.177875191e-07f, 1.179444463e-07f, 1.181011317e-07f, 1.182575752e-07f,
-1.184137766e-07f, 1.185697355e-07f, 1.187254518e-07f, 1.188809254e-07f, 1.190361558e-07f, 1.191911430e-07f, 1.193458868e-07f, 1.195003868e-07f, 1.196546430e-07f, 1.198086551e-07f,
-1.199624228e-07f, 1.201159460e-07f, 1.202692244e-07f, 1.204222579e-07f, 1.205750462e-07f, 1.207275891e-07f, 1.208798864e-07f, 1.210319379e-07f, 1.211837435e-07f, 1.213353028e-07f,
-1.214866156e-07f, 1.216376818e-07f, 1.217885012e-07f, 1.219390736e-07f, 1.220893986e-07f, 1.222394763e-07f, 1.223893062e-07f, 1.225388883e-07f, 1.226882223e-07f, 1.228373080e-07f,
-1.229861452e-07f, 1.231347338e-07f, 1.232830734e-07f, 1.234311640e-07f, 1.235790052e-07f, 1.237265970e-07f, 1.238739391e-07f, 1.240210313e-07f, 1.241678734e-07f, 1.243144652e-07f,
-1.244608065e-07f, 1.246068971e-07f, 1.247527368e-07f, 1.248983255e-07f, 1.250436628e-07f, 1.251887487e-07f, 1.253335829e-07f, 1.254781653e-07f, 1.256224955e-07f, 1.257665736e-07f,
-1.259103991e-07f, 1.260539721e-07f, 1.261972922e-07f, 1.263403592e-07f, 1.264831731e-07f, 1.266257335e-07f, 1.267680403e-07f, 1.269100934e-07f, 1.270518924e-07f, 1.271934373e-07f,
-1.273347278e-07f, 1.274757638e-07f, 1.276165450e-07f, 1.277570713e-07f, 1.278973425e-07f, 1.280373584e-07f, 1.281771188e-07f, 1.283166235e-07f, 1.284558724e-07f, 1.285948653e-07f,
-1.287336019e-07f, 1.288720821e-07f, 1.290103057e-07f, 1.291482726e-07f, 1.292859825e-07f, 1.294234353e-07f, 1.295606307e-07f, 1.296975687e-07f, 1.298342490e-07f, 1.299706714e-07f,
-1.301068358e-07f, 1.302427420e-07f, 1.303783897e-07f, 1.305137790e-07f, 1.306489094e-07f, 1.307837810e-07f, 1.309183934e-07f, 1.310527466e-07f, 1.311868403e-07f, 1.313206744e-07f,
-1.314542487e-07f, 1.315875631e-07f, 1.317206173e-07f, 1.318534111e-07f, 1.319859445e-07f, 1.321182172e-07f, 1.322502291e-07f, 1.323819800e-07f, 1.325134697e-07f, 1.326446981e-07f,
-1.327756649e-07f, 1.329063701e-07f, 1.330368135e-07f, 1.331669948e-07f, 1.332969139e-07f, 1.334265707e-07f, 1.335559650e-07f, 1.336850965e-07f, 1.338139653e-07f, 1.339425710e-07f,
-1.340709136e-07f, 1.341989928e-07f, 1.343268085e-07f, 1.344543606e-07f, 1.345816488e-07f, 1.347086730e-07f, 1.348354331e-07f, 1.349619289e-07f, 1.350881602e-07f, 1.352141269e-07f,
-1.353398287e-07f, 1.354652657e-07f, 1.355904375e-07f, 1.357153441e-07f, 1.358399852e-07f, 1.359643608e-07f, 1.360884707e-07f, 1.362123146e-07f, 1.363358925e-07f, 1.364592042e-07f,
-1.365822496e-07f, 1.367050284e-07f, 1.368275406e-07f, 1.369497860e-07f, 1.370717644e-07f, 1.371934757e-07f, 1.373149197e-07f, 1.374360964e-07f, 1.375570054e-07f, 1.376776467e-07f,
-1.377980202e-07f, 1.379181257e-07f, 1.380379629e-07f, 1.381575319e-07f, 1.382768324e-07f, 1.383958644e-07f, 1.385146275e-07f, 1.386331218e-07f, 1.387513470e-07f, 1.388693031e-07f,
-1.389869898e-07f, 1.391044070e-07f, 1.392215547e-07f, 1.393384325e-07f, 1.394550405e-07f, 1.395713784e-07f, 1.396874462e-07f, 1.398032436e-07f, 1.399187705e-07f, 1.400340269e-07f,
-1.401490125e-07f, 1.402637272e-07f, 1.403781710e-07f, 1.404923435e-07f, 1.406062448e-07f, 1.407198746e-07f, 1.408332329e-07f, 1.409463195e-07f, 1.410591342e-07f, 1.411716770e-07f,
-1.412839476e-07f, 1.413959460e-07f, 1.415076721e-07f, 1.416191256e-07f, 1.417303066e-07f, 1.418412147e-07f, 1.419518500e-07f, 1.420622122e-07f, 1.421723013e-07f, 1.422821171e-07f,
-1.423916594e-07f, 1.425009282e-07f, 1.426099234e-07f, 1.427186448e-07f, 1.428270922e-07f, 1.429352656e-07f, 1.430431648e-07f, 1.431507897e-07f, 1.432581401e-07f, 1.433652161e-07f,
-1.434720173e-07f, 1.435785438e-07f, 1.436847953e-07f, 1.437907718e-07f, 1.438964731e-07f, 1.440018991e-07f, 1.441070497e-07f, 1.442119248e-07f, 1.443165243e-07f, 1.444208480e-07f,
-1.445248958e-07f, 1.446286676e-07f, 1.447321633e-07f, 1.448353827e-07f, 1.449383258e-07f, 1.450409924e-07f, 1.451433824e-07f, 1.452454957e-07f, 1.453473323e-07f, 1.454488918e-07f,
-1.455501744e-07f, 1.456511798e-07f, 1.457519079e-07f, 1.458523586e-07f, 1.459525319e-07f, 1.460524275e-07f, 1.461520454e-07f, 1.462513855e-07f, 1.463504477e-07f, 1.464492319e-07f,
-1.465477378e-07f, 1.466459656e-07f, 1.467439149e-07f, 1.468415858e-07f, 1.469389781e-07f, 1.470360917e-07f, 1.471329266e-07f, 1.472294825e-07f, 1.473257595e-07f, 1.474217573e-07f,
-1.475174759e-07f, 1.476129153e-07f, 1.477080752e-07f, 1.478029556e-07f, 1.478975564e-07f, 1.479918774e-07f, 1.480859187e-07f, 1.481796800e-07f, 1.482731614e-07f, 1.483663626e-07f,
-1.484592836e-07f, 1.485519243e-07f, 1.486442846e-07f, 1.487363644e-07f, 1.488281636e-07f, 1.489196821e-07f, 1.490109198e-07f, 1.491018766e-07f, 1.491925525e-07f, 1.492829473e-07f,
-1.493730609e-07f, 1.494628933e-07f, 1.495524443e-07f, 1.496417139e-07f, 1.497307019e-07f, 1.498194084e-07f, 1.499078331e-07f, 1.499959760e-07f, 1.500838370e-07f, 1.501714161e-07f,
-1.502587131e-07f, 1.503457279e-07f, 1.504324605e-07f, 1.505189108e-07f, 1.506050786e-07f, 1.506909640e-07f, 1.507765668e-07f, 1.508618869e-07f, 1.509469243e-07f, 1.510316788e-07f,
-1.511161504e-07f, 1.512003391e-07f, 1.512842446e-07f, 1.513678670e-07f, 1.514512061e-07f, 1.515342620e-07f, 1.516170344e-07f, 1.516995233e-07f, 1.517817287e-07f, 1.518636504e-07f,
-1.519452885e-07f, 1.520266427e-07f, 1.521077131e-07f, 1.521884995e-07f, 1.522690019e-07f, 1.523492203e-07f, 1.524291544e-07f, 1.525088043e-07f, 1.525881699e-07f, 1.526672511e-07f,
-1.527460479e-07f, 1.528245601e-07f, 1.529027877e-07f, 1.529807306e-07f, 1.530583888e-07f, 1.531357622e-07f, 1.532128506e-07f, 1.532896542e-07f, 1.533661727e-07f, 1.534424061e-07f,
-1.535183544e-07f, 1.535940174e-07f, 1.536693951e-07f, 1.537444875e-07f, 1.538192945e-07f, 1.538938160e-07f, 1.539680519e-07f, 1.540420023e-07f, 1.541156669e-07f, 1.541890458e-07f,
-1.542621389e-07f, 1.543349462e-07f, 1.544074675e-07f, 1.544797028e-07f, 1.545516521e-07f, 1.546233153e-07f, 1.546946924e-07f, 1.547657832e-07f, 1.548365877e-07f, 1.549071059e-07f,
-1.549773377e-07f, 1.550472830e-07f, 1.551169419e-07f, 1.551863142e-07f, 1.552553998e-07f, 1.553241988e-07f, 1.553927111e-07f, 1.554609366e-07f, 1.555288752e-07f, 1.555965270e-07f,
-1.556638919e-07f, 1.557309697e-07f, 1.557977605e-07f, 1.558642643e-07f, 1.559304809e-07f, 1.559964103e-07f, 1.560620525e-07f, 1.561274074e-07f, 1.561924749e-07f, 1.562572551e-07f,
-1.563217479e-07f, 1.563859532e-07f, 1.564498709e-07f, 1.565135012e-07f, 1.565768438e-07f, 1.566398987e-07f, 1.567026660e-07f, 1.567651455e-07f, 1.568273373e-07f, 1.568892412e-07f,
-1.569508573e-07f, 1.570121854e-07f, 1.570732257e-07f, 1.571339779e-07f, 1.571944421e-07f, 1.572546183e-07f, 1.573145063e-07f, 1.573741062e-07f, 1.574334180e-07f, 1.574924415e-07f,
-1.575511768e-07f, 1.576096237e-07f, 1.576677824e-07f, 1.577256527e-07f, 1.577832347e-07f, 1.578405282e-07f, 1.578975332e-07f, 1.579542498e-07f, 1.580106778e-07f, 1.580668173e-07f,
-1.581226682e-07f, 1.581782305e-07f, 1.582335041e-07f, 1.582884890e-07f, 1.583431853e-07f, 1.583975928e-07f, 1.584517116e-07f, 1.585055416e-07f, 1.585590827e-07f, 1.586123350e-07f,
-1.586652985e-07f, 1.587179730e-07f, 1.587703587e-07f, 1.588224554e-07f, 1.588742631e-07f, 1.589257818e-07f, 1.589770115e-07f, 1.590279522e-07f, 1.590786038e-07f, 1.591289664e-07f,
-1.591790398e-07f, 1.592288241e-07f, 1.592783193e-07f, 1.593275253e-07f, 1.593764422e-07f, 1.594250698e-07f, 1.594734082e-07f, 1.595214574e-07f, 1.595692173e-07f, 1.596166880e-07f,
-1.596638694e-07f, 1.597107615e-07f, 1.597573643e-07f, 1.598036777e-07f, 1.598497018e-07f, 1.598954366e-07f, 1.599408819e-07f, 1.599860379e-07f, 1.600309045e-07f, 1.600754818e-07f,
-1.601197696e-07f, 1.601637679e-07f, 1.602074769e-07f, 1.602508964e-07f, 1.602940264e-07f, 1.603368670e-07f, 1.603794181e-07f, 1.604216797e-07f, 1.604636519e-07f, 1.605053346e-07f,
-1.605467277e-07f, 1.605878314e-07f, 1.606286456e-07f, 1.606691703e-07f, 1.607094054e-07f, 1.607493511e-07f, 1.607890072e-07f, 1.608283738e-07f, 1.608674509e-07f, 1.609062385e-07f,
-1.609447365e-07f, 1.609829451e-07f, 1.610208641e-07f, 1.610584935e-07f, 1.610958335e-07f, 1.611328839e-07f, 1.611696449e-07f, 1.612061163e-07f, 1.612422982e-07f, 1.612781906e-07f,
-1.613137935e-07f, 1.613491069e-07f, 1.613841309e-07f, 1.614188653e-07f, 1.614533103e-07f, 1.614874658e-07f, 1.615213318e-07f, 1.615549084e-07f, 1.615881955e-07f, 1.616211932e-07f,
-1.616539015e-07f, 1.616863203e-07f, 1.617184498e-07f, 1.617502898e-07f, 1.617818405e-07f, 1.618131018e-07f, 1.618440737e-07f, 1.618747563e-07f, 1.619051495e-07f, 1.619352535e-07f,
-1.619650681e-07f, 1.619945934e-07f, 1.620238295e-07f, 1.620527763e-07f, 1.620814339e-07f, 1.621098022e-07f, 1.621378814e-07f, 1.621656713e-07f, 1.621931721e-07f, 1.622203837e-07f,
-1.622473063e-07f, 1.622739396e-07f, 1.623002840e-07f, 1.623263392e-07f, 1.623521054e-07f, 1.623775825e-07f, 1.624027707e-07f, 1.624276699e-07f, 1.624522801e-07f, 1.624766014e-07f,
-1.625006338e-07f, 1.625243773e-07f, 1.625478320e-07f, 1.625709978e-07f, 1.625938748e-07f, 1.626164630e-07f, 1.626387625e-07f, 1.626607733e-07f, 1.626824954e-07f, 1.627039288e-07f,
-1.627250736e-07f, 1.627459298e-07f, 1.627664974e-07f, 1.627867765e-07f, 1.628067671e-07f, 1.628264691e-07f, 1.628458828e-07f, 1.628650080e-07f, 1.628838449e-07f, 1.629023934e-07f,
-1.629206536e-07f, 1.629386255e-07f, 1.629563092e-07f, 1.629737047e-07f, 1.629908120e-07f, 1.630076312e-07f, 1.630241623e-07f, 1.630404054e-07f, 1.630563604e-07f, 1.630720275e-07f,
-1.630874066e-07f, 1.631024978e-07f, 1.631173012e-07f, 1.631318167e-07f, 1.631460445e-07f, 1.631599846e-07f, 1.631736370e-07f, 1.631870017e-07f, 1.632000788e-07f, 1.632128684e-07f,
-1.632253704e-07f, 1.632375850e-07f, 1.632495122e-07f, 1.632611520e-07f, 1.632725045e-07f, 1.632835696e-07f, 1.632943476e-07f, 1.633048384e-07f, 1.633150420e-07f, 1.633249585e-07f,
-1.633345880e-07f, 1.633439305e-07f, 1.633529861e-07f, 1.633617547e-07f, 1.633702366e-07f, 1.633784316e-07f, 1.633863399e-07f, 1.633939616e-07f, 1.634012966e-07f, 1.634083450e-07f,
-1.634151070e-07f, 1.634215824e-07f, 1.634277715e-07f, 1.634336742e-07f, 1.634392906e-07f, 1.634446207e-07f, 1.634496647e-07f, 1.634544226e-07f, 1.634588944e-07f, 1.634630802e-07f,
-1.634669800e-07f, 1.634705939e-07f, 1.634739221e-07f, 1.634769644e-07f, 1.634797211e-07f, 1.634821921e-07f, 1.634843775e-07f, 1.634862774e-07f, 1.634878918e-07f, 1.634892209e-07f,
-1.634902646e-07f, 1.634910231e-07f, 1.634914964e-07f, 1.634916845e-07f, 1.634915876e-07f, 1.634912056e-07f, 1.634905388e-07f, 1.634895870e-07f, 1.634883505e-07f, 1.634868292e-07f,
-1.634850233e-07f, 1.634829328e-07f, 1.634805578e-07f, 1.634778983e-07f, 1.634749544e-07f, 1.634717262e-07f, 1.634682138e-07f, 1.634644172e-07f, 1.634603366e-07f, 1.634559719e-07f,
-1.634513233e-07f, 1.634463908e-07f, 1.634411745e-07f, 1.634356745e-07f, 1.634298908e-07f, 1.634238236e-07f, 1.634174729e-07f, 1.634108387e-07f, 1.634039213e-07f, 1.633967205e-07f,
-1.633892366e-07f, 1.633814696e-07f, 1.633734196e-07f, 1.633650866e-07f, 1.633564708e-07f, 1.633475722e-07f, 1.633383909e-07f, 1.633289269e-07f, 1.633191805e-07f, 1.633091516e-07f,
-1.632988403e-07f, 1.632882467e-07f, 1.632773710e-07f, 1.632662131e-07f, 1.632547732e-07f, 1.632430513e-07f, 1.632310476e-07f, 1.632187621e-07f, 1.632061950e-07f, 1.631933462e-07f,
-1.631802159e-07f, 1.631668043e-07f, 1.631531112e-07f, 1.631391370e-07f, 1.631248816e-07f, 1.631103451e-07f, 1.630955276e-07f, 1.630804293e-07f, 1.630650502e-07f, 1.630493904e-07f,
-1.630334500e-07f, 1.630172291e-07f, 1.630007278e-07f, 1.629839461e-07f, 1.629668842e-07f, 1.629495422e-07f, 1.629319202e-07f, 1.629140182e-07f, 1.628958364e-07f, 1.628773748e-07f,
-1.628586336e-07f, 1.628396129e-07f, 1.628203127e-07f, 1.628007331e-07f, 1.627808743e-07f, 1.627607363e-07f, 1.627403193e-07f, 1.627196233e-07f, 1.626986485e-07f, 1.626773949e-07f,
-1.626558627e-07f, 1.626340519e-07f, 1.626119627e-07f, 1.625895952e-07f, 1.625669494e-07f, 1.625440255e-07f, 1.625208236e-07f, 1.624973438e-07f, 1.624735861e-07f, 1.624495507e-07f,
-1.624252378e-07f, 1.624006473e-07f, 1.623757795e-07f, 1.623506343e-07f, 1.623252121e-07f, 1.622995127e-07f, 1.622735364e-07f, 1.622472833e-07f, 1.622207534e-07f, 1.621939470e-07f,
-1.621668640e-07f, 1.621395046e-07f, 1.621118689e-07f, 1.620839571e-07f, 1.620557692e-07f, 1.620273054e-07f, 1.619985657e-07f, 1.619695504e-07f, 1.619402594e-07f, 1.619106930e-07f,
-1.618808511e-07f, 1.618507341e-07f, 1.618203419e-07f, 1.617896747e-07f, 1.617587325e-07f, 1.617275156e-07f, 1.616960241e-07f, 1.616642580e-07f, 1.616322175e-07f, 1.615999026e-07f,
-1.615673136e-07f, 1.615344506e-07f, 1.615013136e-07f, 1.614679027e-07f, 1.614342182e-07f, 1.614002601e-07f, 1.613660286e-07f, 1.613315237e-07f, 1.612967457e-07f, 1.612616945e-07f,
-1.612263704e-07f, 1.611907735e-07f, 1.611549039e-07f, 1.611187617e-07f, 1.610823470e-07f, 1.610456601e-07f, 1.610087009e-07f, 1.609714697e-07f, 1.609339665e-07f, 1.608961916e-07f,
-1.608581449e-07f, 1.608198267e-07f, 1.607812371e-07f, 1.607423762e-07f, 1.607032442e-07f, 1.606638411e-07f, 1.606241672e-07f, 1.605842225e-07f, 1.605440071e-07f, 1.605035213e-07f,
-1.604627651e-07f, 1.604217387e-07f, 1.603804422e-07f, 1.603388757e-07f, 1.602970395e-07f, 1.602549335e-07f, 1.602125580e-07f, 1.601699131e-07f, 1.601269990e-07f, 1.600838157e-07f,
-1.600403634e-07f, 1.599966422e-07f, 1.599526524e-07f, 1.599083939e-07f, 1.598638671e-07f, 1.598190719e-07f, 1.597740086e-07f, 1.597286772e-07f, 1.596830780e-07f, 1.596372111e-07f,
-1.595910766e-07f, 1.595446746e-07f, 1.594980054e-07f, 1.594510690e-07f, 1.594038655e-07f, 1.593563953e-07f, 1.593086582e-07f, 1.592606547e-07f, 1.592123847e-07f, 1.591638484e-07f,
-1.591150459e-07f, 1.590659775e-07f, 1.590166433e-07f, 1.589670434e-07f, 1.589171779e-07f, 1.588670470e-07f, 1.588166509e-07f, 1.587659897e-07f, 1.587150635e-07f, 1.586638726e-07f,
-1.586124170e-07f, 1.585606970e-07f, 1.585087126e-07f, 1.584564640e-07f, 1.584039514e-07f, 1.583511749e-07f, 1.582981347e-07f, 1.582448309e-07f, 1.581912637e-07f, 1.581374333e-07f,
-1.580833397e-07f, 1.580289832e-07f, 1.579743640e-07f, 1.579194821e-07f, 1.578643377e-07f, 1.578089310e-07f, 1.577532621e-07f, 1.576973312e-07f, 1.576411385e-07f, 1.575846842e-07f,
-1.575279683e-07f, 1.574709910e-07f, 1.574137525e-07f, 1.573562530e-07f, 1.572984926e-07f, 1.572404715e-07f, 1.571821899e-07f, 1.571236478e-07f, 1.570648456e-07f, 1.570057832e-07f,
-1.569464610e-07f, 1.568868790e-07f, 1.568270375e-07f, 1.567669366e-07f, 1.567065764e-07f, 1.566459571e-07f, 1.565850790e-07f, 1.565239421e-07f, 1.564625466e-07f, 1.564008927e-07f,
-1.563389806e-07f, 1.562768105e-07f, 1.562143824e-07f, 1.561516966e-07f, 1.560887532e-07f, 1.560255525e-07f, 1.559620945e-07f, 1.558983795e-07f, 1.558344076e-07f, 1.557701791e-07f,
-1.557056939e-07f, 1.556409525e-07f, 1.555759548e-07f, 1.555107012e-07f, 1.554451917e-07f, 1.553794265e-07f, 1.553134058e-07f, 1.552471299e-07f, 1.551805988e-07f, 1.551138127e-07f,
-1.550467719e-07f, 1.549794764e-07f, 1.549119265e-07f, 1.548441224e-07f, 1.547760642e-07f, 1.547077521e-07f, 1.546391863e-07f, 1.545703669e-07f, 1.545012942e-07f, 1.544319683e-07f,
-1.543623894e-07f, 1.542925577e-07f, 1.542224734e-07f, 1.541521366e-07f, 1.540815476e-07f, 1.540107064e-07f, 1.539396134e-07f, 1.538682686e-07f, 1.537966723e-07f, 1.537248246e-07f,
-1.536527258e-07f, 1.535803759e-07f, 1.535077753e-07f, 1.534349241e-07f, 1.533618224e-07f, 1.532884705e-07f, 1.532148685e-07f, 1.531410167e-07f, 1.530669152e-07f, 1.529925642e-07f,
-1.529179639e-07f, 1.528431145e-07f, 1.527680161e-07f, 1.526926690e-07f, 1.526170734e-07f, 1.525412294e-07f, 1.524651373e-07f, 1.523887972e-07f, 1.523122093e-07f, 1.522353738e-07f,
-1.521582909e-07f, 1.520809608e-07f, 1.520033837e-07f, 1.519255598e-07f, 1.518474892e-07f, 1.517691723e-07f, 1.516906090e-07f, 1.516117998e-07f, 1.515327447e-07f, 1.514534440e-07f,
-1.513738978e-07f, 1.512941063e-07f, 1.512140698e-07f, 1.511337884e-07f, 1.510532624e-07f, 1.509724919e-07f, 1.508914771e-07f, 1.508102183e-07f, 1.507287156e-07f, 1.506469692e-07f,
-1.505649794e-07f, 1.504827463e-07f, 1.504002701e-07f, 1.503175510e-07f, 1.502345893e-07f, 1.501513852e-07f, 1.500679387e-07f, 1.499842502e-07f, 1.499003199e-07f, 1.498161479e-07f,
-1.497317344e-07f, 1.496470798e-07f, 1.495621840e-07f, 1.494770475e-07f, 1.493916703e-07f, 1.493060527e-07f, 1.492201948e-07f, 1.491340970e-07f, 1.490477593e-07f, 1.489611821e-07f,
-1.488743655e-07f, 1.487873097e-07f, 1.487000149e-07f, 1.486124813e-07f, 1.485247092e-07f, 1.484366988e-07f, 1.483484502e-07f, 1.482599637e-07f, 1.481712395e-07f, 1.480822777e-07f,
-1.479930787e-07f, 1.479036426e-07f, 1.478139697e-07f, 1.477240600e-07f, 1.476339140e-07f, 1.475435317e-07f, 1.474529133e-07f, 1.473620592e-07f, 1.472709695e-07f, 1.471796444e-07f,
-1.470880842e-07f, 1.469962890e-07f, 1.469042591e-07f, 1.468119946e-07f, 1.467194959e-07f, 1.466267631e-07f, 1.465337964e-07f, 1.464405961e-07f, 1.463471623e-07f, 1.462534954e-07f,
-1.461595954e-07f, 1.460654627e-07f, 1.459710974e-07f, 1.458764998e-07f, 1.457816701e-07f, 1.456866085e-07f, 1.455913152e-07f, 1.454957905e-07f, 1.454000345e-07f, 1.453040475e-07f,
-1.452078298e-07f, 1.451113815e-07f, 1.450147028e-07f, 1.449177940e-07f, 1.448206553e-07f, 1.447232870e-07f, 1.446256892e-07f, 1.445278622e-07f, 1.444298061e-07f, 1.443315214e-07f,
-1.442330080e-07f, 1.441342664e-07f, 1.440352966e-07f, 1.439360990e-07f, 1.438366737e-07f, 1.437370211e-07f, 1.436371412e-07f, 1.435370344e-07f, 1.434367009e-07f, 1.433361408e-07f,
-1.432353545e-07f, 1.431343421e-07f, 1.430331040e-07f, 1.429316402e-07f, 1.428299511e-07f, 1.427280369e-07f, 1.426258978e-07f, 1.425235340e-07f, 1.424209458e-07f, 1.423181334e-07f,
-1.422150970e-07f, 1.421118369e-07f, 1.420083533e-07f, 1.419046465e-07f, 1.418007166e-07f, 1.416965639e-07f, 1.415921887e-07f, 1.414875911e-07f, 1.413827715e-07f, 1.412777299e-07f,
-1.411724668e-07f, 1.410669823e-07f, 1.409612766e-07f, 1.408553501e-07f, 1.407492028e-07f, 1.406428351e-07f, 1.405362473e-07f, 1.404294394e-07f, 1.403224119e-07f, 1.402151648e-07f,
-1.401076985e-07f, 1.400000132e-07f, 1.398921092e-07f, 1.397839866e-07f, 1.396756457e-07f, 1.395670868e-07f, 1.394583101e-07f, 1.393493158e-07f, 1.392401043e-07f, 1.391306756e-07f,
-1.390210301e-07f, 1.389111680e-07f, 1.388010896e-07f, 1.386907950e-07f, 1.385802846e-07f, 1.384695586e-07f, 1.383586172e-07f, 1.382474606e-07f, 1.381360892e-07f, 1.380245032e-07f,
-1.379127027e-07f, 1.378006881e-07f, 1.376884597e-07f, 1.375760175e-07f, 1.374633620e-07f, 1.373504932e-07f, 1.372374116e-07f, 1.371241173e-07f, 1.370106106e-07f, 1.368968917e-07f,
-1.367829609e-07f, 1.366688185e-07f, 1.365544646e-07f, 1.364398995e-07f, 1.363251235e-07f, 1.362101369e-07f, 1.360949398e-07f, 1.359795326e-07f, 1.358639154e-07f, 1.357480886e-07f,
-1.356320523e-07f, 1.355158069e-07f, 1.353993526e-07f, 1.352826896e-07f, 1.351658182e-07f, 1.350487387e-07f, 1.349314512e-07f, 1.348139562e-07f, 1.346962537e-07f, 1.345783441e-07f,
-1.344602276e-07f, 1.343419045e-07f, 1.342233750e-07f, 1.341046395e-07f, 1.339856980e-07f, 1.338665510e-07f, 1.337471986e-07f, 1.336276411e-07f, 1.335078788e-07f, 1.333879119e-07f,
-1.332677407e-07f, 1.331473655e-07f, 1.330267864e-07f, 1.329060038e-07f, 1.327850180e-07f, 1.326638291e-07f, 1.325424375e-07f, 1.324208433e-07f, 1.322990469e-07f, 1.321770486e-07f,
-1.320548485e-07f, 1.319324469e-07f, 1.318098442e-07f, 1.316870405e-07f, 1.315640362e-07f, 1.314408314e-07f, 1.313174265e-07f, 1.311938217e-07f, 1.310700173e-07f, 1.309460136e-07f,
-1.308218107e-07f, 1.306974090e-07f, 1.305728088e-07f, 1.304480102e-07f, 1.303230136e-07f, 1.301978193e-07f, 1.300724274e-07f, 1.299468383e-07f, 1.298210522e-07f, 1.296950694e-07f,
-1.295688902e-07f, 1.294425148e-07f, 1.293159435e-07f, 1.291891765e-07f, 1.290622142e-07f, 1.289350568e-07f, 1.288077045e-07f, 1.286801577e-07f, 1.285524166e-07f, 1.284244815e-07f,
-1.282963526e-07f, 1.281680302e-07f, 1.280395145e-07f, 1.279108060e-07f, 1.277819047e-07f, 1.276528111e-07f, 1.275235253e-07f, 1.273940477e-07f, 1.272643784e-07f, 1.271345178e-07f,
-1.270044662e-07f, 1.268742238e-07f, 1.267437909e-07f, 1.266131678e-07f, 1.264823547e-07f, 1.263513519e-07f, 1.262201598e-07f, 1.260887784e-07f, 1.259572083e-07f, 1.258254495e-07f,
-1.256935024e-07f, 1.255613673e-07f, 1.254290444e-07f, 1.252965340e-07f, 1.251638364e-07f, 1.250309519e-07f, 1.248978808e-07f, 1.247646232e-07f, 1.246311795e-07f, 1.244975500e-07f,
-1.243637350e-07f, 1.242297347e-07f, 1.240955494e-07f, 1.239611794e-07f, 1.238266249e-07f, 1.236918863e-07f, 1.235569638e-07f, 1.234218577e-07f, 1.232865683e-07f, 1.231510958e-07f,
-1.230154406e-07f, 1.228796029e-07f, 1.227435830e-07f, 1.226073811e-07f, 1.224709977e-07f, 1.223344329e-07f, 1.221976870e-07f, 1.220607603e-07f, 1.219236531e-07f, 1.217863656e-07f,
-1.216488983e-07f, 1.215112512e-07f, 1.213734248e-07f, 1.212354193e-07f, 1.210972350e-07f, 1.209588721e-07f, 1.208203310e-07f, 1.206816119e-07f, 1.205427152e-07f, 1.204036410e-07f,
-1.202643898e-07f, 1.201249617e-07f, 1.199853571e-07f, 1.198455763e-07f, 1.197056194e-07f, 1.195654869e-07f, 1.194251791e-07f, 1.192846961e-07f, 1.191440382e-07f, 1.190032059e-07f,
-1.188621993e-07f, 1.187210188e-07f, 1.185796646e-07f, 1.184381370e-07f, 1.182964363e-07f, 1.181545628e-07f, 1.180125168e-07f, 1.178702986e-07f, 1.177279084e-07f, 1.175853466e-07f,
-1.174426134e-07f, 1.172997092e-07f, 1.171566342e-07f, 1.170133887e-07f, 1.168699730e-07f, 1.167263875e-07f, 1.165826323e-07f, 1.164387077e-07f, 1.162946142e-07f, 1.161503519e-07f,
-1.160059212e-07f, 1.158613223e-07f, 1.157165555e-07f, 1.155716212e-07f, 1.154265196e-07f, 1.152812511e-07f, 1.151358158e-07f, 1.149902142e-07f, 1.148444464e-07f, 1.146985129e-07f,
-1.145524138e-07f, 1.144061495e-07f, 1.142597203e-07f, 1.141131265e-07f, 1.139663683e-07f, 1.138194461e-07f, 1.136723602e-07f, 1.135251108e-07f, 1.133776982e-07f, 1.132301228e-07f,
-1.130823849e-07f, 1.129344847e-07f, 1.127864225e-07f, 1.126381987e-07f, 1.124898135e-07f, 1.123412672e-07f, 1.121925602e-07f, 1.120436927e-07f, 1.118946650e-07f, 1.117454774e-07f,
-1.115961302e-07f, 1.114466238e-07f, 1.112969584e-07f, 1.111471343e-07f, 1.109971518e-07f, 1.108470113e-07f, 1.106967129e-07f, 1.105462571e-07f, 1.103956441e-07f, 1.102448742e-07f,
-1.100939477e-07f, 1.099428650e-07f, 1.097916262e-07f, 1.096402318e-07f, 1.094886821e-07f, 1.093369772e-07f, 1.091851176e-07f, 1.090331035e-07f, 1.088809352e-07f, 1.087286131e-07f,
-1.085761374e-07f, 1.084235084e-07f, 1.082707265e-07f, 1.081177919e-07f, 1.079647050e-07f, 1.078114661e-07f, 1.076580754e-07f, 1.075045332e-07f, 1.073508399e-07f, 1.071969958e-07f,
-1.070430012e-07f, 1.068888564e-07f, 1.067345616e-07f, 1.065801172e-07f, 1.064255236e-07f, 1.062707809e-07f, 1.061158895e-07f, 1.059608498e-07f, 1.058056619e-07f, 1.056503263e-07f,
-1.054948433e-07f, 1.053392130e-07f, 1.051834359e-07f, 1.050275123e-07f, 1.048714424e-07f, 1.047152266e-07f, 1.045588652e-07f, 1.044023585e-07f, 1.042457067e-07f, 1.040889103e-07f,
-1.039319695e-07f, 1.037748845e-07f, 1.036176558e-07f, 1.034602837e-07f, 1.033027684e-07f, 1.031451102e-07f, 1.029873095e-07f, 1.028293666e-07f, 1.026712818e-07f, 1.025130553e-07f,
-1.023546876e-07f, 1.021961788e-07f, 1.020375294e-07f, 1.018787397e-07f, 1.017198099e-07f, 1.015607403e-07f, 1.014015313e-07f, 1.012421832e-07f, 1.010826962e-07f, 1.009230708e-07f,
-1.007633072e-07f, 1.006034057e-07f, 1.004433667e-07f, 1.002831904e-07f, 1.001228772e-07f, 9.996242732e-08f, 9.980184116e-08f, 9.964111901e-08f, 9.948026117e-08f, 9.931926796e-08f,
-9.915813969e-08f, 9.899687668e-08f, 9.883547925e-08f, 9.867394769e-08f, 9.851228234e-08f, 9.835048350e-08f, 9.818855149e-08f, 9.802648662e-08f, 9.786428921e-08f, 9.770195958e-08f,
-9.753949803e-08f, 9.737690488e-08f, 9.721418046e-08f, 9.705132507e-08f, 9.688833903e-08f, 9.672522265e-08f, 9.656197626e-08f, 9.639860017e-08f, 9.623509469e-08f, 9.607146015e-08f,
-9.590769685e-08f, 9.574380512e-08f, 9.557978527e-08f, 9.541563763e-08f, 9.525136250e-08f, 9.508696020e-08f, 9.492243106e-08f, 9.475777538e-08f, 9.459299350e-08f, 9.442808572e-08f,
-9.426305236e-08f, 9.409789375e-08f, 9.393261020e-08f, 9.376720203e-08f, 9.360166956e-08f, 9.343601310e-08f, 9.327023299e-08f, 9.310432952e-08f, 9.293830304e-08f, 9.277215385e-08f,
-9.260588227e-08f, 9.243948863e-08f, 9.227297324e-08f, 9.210633642e-08f, 9.193957850e-08f, 9.177269980e-08f, 9.160570063e-08f, 9.143858131e-08f, 9.127134218e-08f, 9.110398354e-08f,
-9.093650571e-08f, 9.076890903e-08f, 9.060119381e-08f, 9.043336037e-08f, 9.026540904e-08f, 9.009734013e-08f, 8.992915397e-08f, 8.976085088e-08f, 8.959243118e-08f, 8.942389519e-08f,
-8.925524324e-08f, 8.908647565e-08f, 8.891759273e-08f, 8.874859482e-08f, 8.857948224e-08f, 8.841025531e-08f, 8.824091435e-08f, 8.807145969e-08f, 8.790189164e-08f, 8.773221054e-08f,
-8.756241670e-08f, 8.739251045e-08f, 8.722249212e-08f, 8.705236202e-08f, 8.688212049e-08f, 8.671176784e-08f, 8.654130440e-08f, 8.637073050e-08f, 8.620004645e-08f, 8.602925259e-08f,
-8.585834923e-08f, 8.568733671e-08f, 8.551621535e-08f, 8.534498547e-08f, 8.517364740e-08f, 8.500220146e-08f, 8.483064798e-08f, 8.465898729e-08f, 8.448721970e-08f, 8.431534555e-08f,
-8.414336517e-08f, 8.397127887e-08f, 8.379908699e-08f, 8.362678985e-08f, 8.345438777e-08f, 8.328188109e-08f, 8.310927012e-08f, 8.293655520e-08f, 8.276373666e-08f, 8.259081481e-08f,
-8.241779000e-08f, 8.224466253e-08f, 8.207143275e-08f, 8.189810097e-08f, 8.172466753e-08f, 8.155113275e-08f, 8.137749697e-08f, 8.120376050e-08f, 8.102992368e-08f, 8.085598683e-08f,
-8.068195028e-08f, 8.050781436e-08f, 8.033357940e-08f, 8.015924573e-08f, 7.998481367e-08f, 7.981028356e-08f, 7.963565571e-08f, 7.946093047e-08f, 7.928610815e-08f, 7.911118910e-08f,
-7.893617363e-08f, 7.876106207e-08f, 7.858585476e-08f, 7.841055202e-08f, 7.823515419e-08f, 7.805966159e-08f, 7.788407455e-08f, 7.770839340e-08f, 7.753261847e-08f, 7.735675009e-08f,
-7.718078860e-08f, 7.700473431e-08f, 7.682858756e-08f, 7.665234869e-08f, 7.647601801e-08f, 7.629959587e-08f, 7.612308258e-08f, 7.594647849e-08f, 7.576978392e-08f, 7.559299920e-08f,
-7.541612466e-08f, 7.523916064e-08f, 7.506210746e-08f, 7.488496546e-08f, 7.470773496e-08f, 7.453041631e-08f, 7.435300981e-08f, 7.417551582e-08f, 7.399793466e-08f, 7.382026666e-08f,
-7.364251215e-08f, 7.346467147e-08f, 7.328674495e-08f, 7.310873291e-08f, 7.293063569e-08f, 7.275245362e-08f, 7.257418704e-08f, 7.239583627e-08f, 7.221740165e-08f, 7.203888350e-08f,
-7.186028217e-08f, 7.168159798e-08f, 7.150283127e-08f, 7.132398236e-08f, 7.114505160e-08f, 7.096603930e-08f, 7.078694581e-08f, 7.060777146e-08f, 7.042851658e-08f, 7.024918150e-08f,
-7.006976655e-08f, 6.989027208e-08f, 6.971069840e-08f, 6.953104586e-08f, 6.935131479e-08f, 6.917150552e-08f, 6.899161837e-08f, 6.881165370e-08f, 6.863161182e-08f, 6.845149308e-08f,
-6.827129781e-08f, 6.809102633e-08f, 6.791067898e-08f, 6.773025611e-08f, 6.754975803e-08f, 6.736918508e-08f, 6.718853760e-08f, 6.700781593e-08f, 6.682702038e-08f, 6.664615131e-08f,
-6.646520904e-08f, 6.628419390e-08f, 6.610310623e-08f, 6.592194637e-08f, 6.574071464e-08f, 6.555941139e-08f, 6.537803694e-08f, 6.519659164e-08f, 6.501507581e-08f, 6.483348978e-08f,
-6.465183390e-08f, 6.447010850e-08f, 6.428831391e-08f, 6.410645046e-08f, 6.392451850e-08f, 6.374251835e-08f, 6.356045035e-08f, 6.337831484e-08f, 6.319611215e-08f, 6.301384260e-08f,
-6.283150655e-08f, 6.264910432e-08f, 6.246663625e-08f, 6.228410267e-08f, 6.210150392e-08f, 6.191884033e-08f, 6.173611224e-08f, 6.155331998e-08f, 6.137046389e-08f, 6.118754431e-08f,
-6.100456156e-08f, 6.082151598e-08f, 6.063840791e-08f, 6.045523768e-08f, 6.027200563e-08f, 6.008871210e-08f, 5.990535741e-08f, 5.972194191e-08f, 5.953846593e-08f, 5.935492980e-08f,
-5.917133386e-08f, 5.898767844e-08f, 5.880396389e-08f, 5.862019053e-08f, 5.843635871e-08f, 5.825246875e-08f, 5.806852099e-08f, 5.788451577e-08f, 5.770045343e-08f, 5.751633429e-08f,
-5.733215870e-08f, 5.714792699e-08f, 5.696363950e-08f, 5.677929655e-08f, 5.659489850e-08f, 5.641044567e-08f, 5.622593839e-08f, 5.604137701e-08f, 5.585676186e-08f, 5.567209328e-08f,
-5.548737159e-08f, 5.530259715e-08f, 5.511777027e-08f, 5.493289131e-08f, 5.474796059e-08f, 5.456297845e-08f, 5.437794522e-08f, 5.419286125e-08f, 5.400772687e-08f, 5.382254241e-08f,
-5.363730821e-08f, 5.345202460e-08f, 5.326669193e-08f, 5.308131052e-08f, 5.289588072e-08f, 5.271040285e-08f, 5.252487726e-08f, 5.233930428e-08f, 5.215368425e-08f, 5.196801750e-08f,
-5.178230437e-08f, 5.159654519e-08f, 5.141074030e-08f, 5.122489004e-08f, 5.103899474e-08f, 5.085305474e-08f, 5.066707037e-08f, 5.048104198e-08f, 5.029496988e-08f, 5.010885443e-08f,
-4.992269596e-08f, 4.973649480e-08f, 4.955025129e-08f, 4.936396576e-08f, 4.917763856e-08f, 4.899127001e-08f, 4.880486045e-08f, 4.861841023e-08f, 4.843191966e-08f, 4.824538910e-08f,
-4.805881887e-08f, 4.787220932e-08f, 4.768556077e-08f, 4.749887357e-08f, 4.731214804e-08f, 4.712538454e-08f, 4.693858338e-08f, 4.675174490e-08f, 4.656486945e-08f, 4.637795736e-08f,
-4.619100896e-08f, 4.600402459e-08f, 4.581700459e-08f, 4.562994929e-08f, 4.544285902e-08f, 4.525573412e-08f, 4.506857493e-08f, 4.488138179e-08f, 4.469415502e-08f, 4.450689497e-08f,
-4.431960197e-08f, 4.413227635e-08f, 4.394491845e-08f, 4.375752861e-08f, 4.357010716e-08f, 4.338265444e-08f, 4.319517078e-08f, 4.300765651e-08f, 4.282011198e-08f, 4.263253752e-08f,
-4.244493346e-08f, 4.225730014e-08f, 4.206963789e-08f, 4.188194705e-08f, 4.169422796e-08f, 4.150648095e-08f, 4.131870635e-08f, 4.113090450e-08f, 4.094307573e-08f, 4.075522038e-08f,
-4.056733879e-08f, 4.037943129e-08f, 4.019149821e-08f, 4.000353989e-08f, 3.981555667e-08f, 3.962754887e-08f, 3.943951684e-08f, 3.925146090e-08f, 3.906338140e-08f, 3.887527866e-08f,
-3.868715303e-08f, 3.849900484e-08f, 3.831083441e-08f, 3.812264209e-08f, 3.793442821e-08f, 3.774619311e-08f, 3.755793711e-08f, 3.736966056e-08f, 3.718136379e-08f, 3.699304712e-08f,
-3.680471091e-08f, 3.661635547e-08f, 3.642798115e-08f, 3.623958827e-08f, 3.605117718e-08f, 3.586274820e-08f, 3.567430167e-08f, 3.548583793e-08f, 3.529735731e-08f, 3.510886013e-08f,
-3.492034674e-08f, 3.473181747e-08f, 3.454327266e-08f, 3.435471262e-08f, 3.416613771e-08f, 3.397754825e-08f, 3.378894458e-08f, 3.360032702e-08f, 3.341169592e-08f, 3.322305161e-08f,
-3.303439441e-08f, 3.284572467e-08f, 3.265704271e-08f, 3.246834887e-08f, 3.227964348e-08f, 3.209092688e-08f, 3.190219939e-08f, 3.171346136e-08f, 3.152471310e-08f, 3.133595496e-08f,
-3.114718727e-08f, 3.095841036e-08f, 3.076962456e-08f, 3.058083020e-08f, 3.039202763e-08f, 3.020321716e-08f, 3.001439914e-08f, 2.982557389e-08f, 2.963674174e-08f, 2.944790303e-08f,
-2.925905810e-08f, 2.907020726e-08f, 2.888135086e-08f, 2.869248923e-08f, 2.850362269e-08f, 2.831475158e-08f, 2.812587623e-08f, 2.793699697e-08f, 2.774811413e-08f, 2.755922805e-08f,
-2.737033905e-08f, 2.718144747e-08f, 2.699255364e-08f, 2.680365789e-08f, 2.661476054e-08f, 2.642586194e-08f, 2.623696241e-08f, 2.604806228e-08f, 2.585916188e-08f, 2.567026155e-08f,
-2.548136160e-08f, 2.529246239e-08f, 2.510356422e-08f, 2.491466745e-08f, 2.472577238e-08f, 2.453687936e-08f, 2.434798872e-08f, 2.415910078e-08f, 2.397021587e-08f, 2.378133433e-08f,
-2.359245648e-08f, 2.340358265e-08f, 2.321471318e-08f, 2.302584839e-08f, 2.283698861e-08f, 2.264813417e-08f, 2.245928540e-08f, 2.227044263e-08f, 2.208160619e-08f, 2.189277640e-08f,
-2.170395360e-08f, 2.151513811e-08f, 2.132633027e-08f, 2.113753040e-08f, 2.094873882e-08f, 2.075995588e-08f, 2.057118189e-08f, 2.038241718e-08f, 2.019366209e-08f, 2.000491693e-08f,
-1.981618204e-08f, 1.962745775e-08f, 1.943874439e-08f, 1.925004227e-08f, 1.906135173e-08f, 1.887267310e-08f, 1.868400670e-08f, 1.849535286e-08f, 1.830671191e-08f, 1.811808417e-08f,
-1.792946997e-08f, 1.774086964e-08f, 1.755228351e-08f, 1.736371189e-08f, 1.717515512e-08f, 1.698661353e-08f, 1.679808743e-08f, 1.660957717e-08f, 1.642108305e-08f, 1.623260541e-08f,
-1.604414458e-08f, 1.585570087e-08f, 1.566727462e-08f, 1.547886615e-08f, 1.529047579e-08f, 1.510210385e-08f, 1.491375068e-08f, 1.472541658e-08f, 1.453710189e-08f, 1.434880693e-08f,
-1.416053203e-08f, 1.397227751e-08f, 1.378404369e-08f, 1.359583090e-08f, 1.340763947e-08f, 1.321946971e-08f, 1.303132196e-08f, 1.284319653e-08f, 1.265509375e-08f, 1.246701394e-08f,
-1.227895743e-08f, 1.209092454e-08f, 1.190291559e-08f, 1.171493091e-08f, 1.152697082e-08f, 1.133903565e-08f, 1.115112571e-08f, 1.096324132e-08f, 1.077538282e-08f, 1.058755052e-08f,
-1.039974475e-08f, 1.021196582e-08f, 1.002421406e-08f, 9.836489800e-09f, 9.648793350e-09f, 9.461125036e-09f, 9.273485179e-09f, 9.085874101e-09f, 8.898292123e-09f, 8.710739566e-09f,
-8.523216751e-09f, 8.335724000e-09f, 8.148261634e-09f, 7.960829972e-09f, 7.773429336e-09f, 7.586060045e-09f, 7.398722421e-09f, 7.211416784e-09f, 7.024143453e-09f, 6.836902748e-09f,
-6.649694990e-09f, 6.462520498e-09f, 6.275379591e-09f, 6.088272589e-09f, 5.901199811e-09f, 5.714161576e-09f, 5.527158204e-09f, 5.340190012e-09f, 5.153257320e-09f, 4.966360446e-09f,
-4.779499709e-09f, 4.592675427e-09f, 4.405887918e-09f, 4.219137501e-09f, 4.032424492e-09f, 3.845749210e-09f, 3.659111972e-09f, 3.472513096e-09f, 3.285952899e-09f, 3.099431698e-09f,
-2.912949810e-09f, 2.726507552e-09f, 2.540105242e-09f, 2.353743194e-09f, 2.167421726e-09f, 1.981141154e-09f, 1.794901795e-09f, 1.608703963e-09f, 1.422547976e-09f, 1.236434148e-09f,
-1.050362795e-09f, 8.643342328e-10f, 6.783487766e-10f, 4.924067412e-10f, 3.065084417e-10f, 1.206541928e-10f, -6.515569085e-11f, -2.509208947e-10f, -4.366411046e-10f, -6.223160062e-10f,
--8.079452856e-10f, -9.935286289e-10f, -1.179065722e-09f, -1.364556252e-09f, -1.549999906e-09f, -1.735396369e-09f, -1.920745330e-09f, -2.106046474e-09f, -2.291299490e-09f, -2.476504064e-09f,
--2.661659884e-09f, -2.846766639e-09f, -3.031824015e-09f, -3.216831701e-09f, -3.401789385e-09f, -3.586696756e-09f, -3.771553501e-09f, -3.956359311e-09f, -4.141113872e-09f, -4.325816876e-09f,
--4.510468010e-09f, -4.695066963e-09f, -4.879613427e-09f, -5.064107090e-09f, -5.248547642e-09f, -5.432934773e-09f, -5.617268173e-09f, -5.801547533e-09f, -5.985772543e-09f, -6.169942894e-09f,
--6.354058276e-09f, -6.538118382e-09f, -6.722122901e-09f, -6.906071525e-09f, -7.089963947e-09f, -7.273799857e-09f, -7.457578947e-09f, -7.641300910e-09f, -7.824965438e-09f, -8.008572223e-09f,
--8.192120957e-09f, -8.375611334e-09f, -8.559043047e-09f, -8.742415788e-09f, -8.925729251e-09f, -9.108983129e-09f, -9.292177116e-09f, -9.475310906e-09f, -9.658384193e-09f, -9.841396670e-09f,
--1.002434803e-08f, -1.020723798e-08f, -1.039006619e-08f, -1.057283238e-08f, -1.075553623e-08f, -1.093817744e-08f, -1.112075571e-08f, -1.130327073e-08f, -1.148572219e-08f, -1.166810980e-08f,
--1.185043324e-08f, -1.203269222e-08f, -1.221488644e-08f, -1.239701558e-08f, -1.257907935e-08f, -1.276107743e-08f, -1.294300954e-08f, -1.312487537e-08f, -1.330667461e-08f, -1.348840697e-08f,
--1.367007213e-08f, -1.385166981e-08f, -1.403319969e-08f, -1.421466148e-08f, -1.439605488e-08f, -1.457737958e-08f, -1.475863528e-08f, -1.493982168e-08f, -1.512093849e-08f, -1.530198540e-08f,
--1.548296211e-08f, -1.566386832e-08f, -1.584470374e-08f, -1.602546806e-08f, -1.620616098e-08f, -1.638678221e-08f, -1.656733145e-08f, -1.674780839e-08f, -1.692821274e-08f, -1.710854421e-08f,
--1.728880248e-08f, -1.746898727e-08f, -1.764909828e-08f, -1.782913521e-08f, -1.800909776e-08f, -1.818898563e-08f, -1.836879854e-08f, -1.854853617e-08f, -1.872819825e-08f, -1.890778446e-08f,
--1.908729451e-08f, -1.926672811e-08f, -1.944608497e-08f, -1.962536478e-08f, -1.980456725e-08f, -1.998369209e-08f, -2.016273900e-08f, -2.034170769e-08f, -2.052059786e-08f, -2.069940922e-08f,
--2.087814147e-08f, -2.105679432e-08f, -2.123536748e-08f, -2.141386066e-08f, -2.159227355e-08f, -2.177060587e-08f, -2.194885733e-08f, -2.212702763e-08f, -2.230511648e-08f, -2.248312359e-08f,
--2.266104867e-08f, -2.283889142e-08f, -2.301665155e-08f, -2.319432878e-08f, -2.337192280e-08f, -2.354943334e-08f, -2.372686010e-08f, -2.390420278e-08f, -2.408146111e-08f, -2.425863478e-08f,
--2.443572352e-08f, -2.461272702e-08f, -2.478964501e-08f, -2.496647719e-08f, -2.514322327e-08f, -2.531988297e-08f, -2.549645599e-08f, -2.567294205e-08f, -2.584934086e-08f, -2.602565213e-08f,
--2.620187558e-08f, -2.637801092e-08f, -2.655405785e-08f, -2.673001610e-08f, -2.690588538e-08f, -2.708166540e-08f, -2.725735587e-08f, -2.743295651e-08f, -2.760846704e-08f, -2.778388716e-08f,
--2.795921660e-08f, -2.813445506e-08f, -2.830960226e-08f, -2.848465793e-08f, -2.865962176e-08f, -2.883449349e-08f, -2.900927282e-08f, -2.918395948e-08f, -2.935855317e-08f, -2.953305362e-08f,
--2.970746054e-08f, -2.988177365e-08f, -3.005599267e-08f, -3.023011732e-08f, -3.040414730e-08f, -3.057808235e-08f, -3.075192218e-08f, -3.092566651e-08f, -3.109931506e-08f, -3.127286754e-08f,
--3.144632368e-08f, -3.161968319e-08f, -3.179294580e-08f, -3.196611123e-08f, -3.213917919e-08f, -3.231214941e-08f, -3.248502160e-08f, -3.265779550e-08f, -3.283047081e-08f, -3.300304726e-08f,
--3.317552458e-08f, -3.334790249e-08f, -3.352018070e-08f, -3.369235894e-08f, -3.386443693e-08f, -3.403641440e-08f, -3.420829107e-08f, -3.438006666e-08f, -3.455174090e-08f, -3.472331351e-08f,
--3.489478421e-08f, -3.506615273e-08f, -3.523741879e-08f, -3.540858213e-08f, -3.557964245e-08f, -3.575059950e-08f, -3.592145299e-08f, -3.609220265e-08f, -3.626284820e-08f, -3.643338939e-08f,
--3.660382592e-08f, -3.677415752e-08f, -3.694438393e-08f, -3.711450488e-08f, -3.728452008e-08f, -3.745442927e-08f, -3.762423217e-08f, -3.779392852e-08f, -3.796351804e-08f, -3.813300046e-08f,
--3.830237552e-08f, -3.847164293e-08f, -3.864080243e-08f, -3.880985375e-08f, -3.897879662e-08f, -3.914763078e-08f, -3.931635594e-08f, -3.948497184e-08f, -3.965347822e-08f, -3.982187480e-08f,
--3.999016132e-08f, -4.015833751e-08f, -4.032640310e-08f, -4.049435782e-08f, -4.066220141e-08f, -4.082993359e-08f, -4.099755411e-08f, -4.116506269e-08f, -4.133245908e-08f, -4.149974300e-08f,
--4.166691418e-08f, -4.183397237e-08f, -4.200091730e-08f, -4.216774869e-08f, -4.233446630e-08f, -4.250106985e-08f, -4.266755908e-08f, -4.283393373e-08f, -4.300019352e-08f, -4.316633821e-08f,
--4.333236752e-08f, -4.349828120e-08f, -4.366407897e-08f, -4.382976059e-08f, -4.399532578e-08f, -4.416077428e-08f, -4.432610584e-08f, -4.449132019e-08f, -4.465641708e-08f, -4.482139623e-08f,
--4.498625739e-08f, -4.515100031e-08f, -4.531562471e-08f, -4.548013034e-08f, -4.564451695e-08f, -4.580878427e-08f, -4.597293204e-08f, -4.613696001e-08f, -4.630086791e-08f, -4.646465550e-08f,
--4.662832250e-08f, -4.679186867e-08f, -4.695529375e-08f, -4.711859747e-08f, -4.728177960e-08f, -4.744483985e-08f, -4.760777799e-08f, -4.777059376e-08f, -4.793328689e-08f, -4.809585715e-08f,
--4.825830426e-08f, -4.842062797e-08f, -4.858282804e-08f, -4.874490421e-08f, -4.890685622e-08f, -4.906868382e-08f, -4.923038675e-08f, -4.939196477e-08f, -4.955341762e-08f, -4.971474505e-08f,
--4.987594681e-08f, -5.003702264e-08f, -5.019797229e-08f, -5.035879552e-08f, -5.051949207e-08f, -5.068006168e-08f, -5.084050412e-08f, -5.100081913e-08f, -5.116100646e-08f, -5.132106586e-08f,
--5.148099708e-08f, -5.164079987e-08f, -5.180047398e-08f, -5.196001917e-08f, -5.211943519e-08f, -5.227872179e-08f, -5.243787872e-08f, -5.259690573e-08f, -5.275580258e-08f, -5.291456902e-08f,
--5.307320480e-08f, -5.323170969e-08f, -5.339008342e-08f, -5.354832576e-08f, -5.370643647e-08f, -5.386441529e-08f, -5.402226198e-08f, -5.417997630e-08f, -5.433755800e-08f, -5.449500684e-08f,
--5.465232258e-08f, -5.480950497e-08f, -5.496655378e-08f, -5.512346874e-08f, -5.528024964e-08f, -5.543689622e-08f, -5.559340823e-08f, -5.574978545e-08f, -5.590602763e-08f, -5.606213452e-08f,
--5.621810589e-08f, -5.637394150e-08f, -5.652964111e-08f, -5.668520447e-08f, -5.684063135e-08f, -5.699592151e-08f, -5.715107471e-08f, -5.730609071e-08f, -5.746096928e-08f, -5.761571017e-08f,
--5.777031315e-08f, -5.792477797e-08f, -5.807910442e-08f, -5.823329224e-08f, -5.838734120e-08f, -5.854125106e-08f, -5.869502159e-08f, -5.884865256e-08f, -5.900214372e-08f, -5.915549485e-08f,
--5.930870570e-08f, -5.946177605e-08f, -5.961470566e-08f, -5.976749430e-08f, -5.992014173e-08f, -6.007264772e-08f, -6.022501204e-08f, -6.037723445e-08f, -6.052931472e-08f, -6.068125263e-08f,
--6.083304793e-08f, -6.098470040e-08f, -6.113620982e-08f, -6.128757593e-08f, -6.143879852e-08f, -6.158987736e-08f, -6.174081222e-08f, -6.189160286e-08f, -6.204224906e-08f, -6.219275059e-08f,
--6.234310722e-08f, -6.249331873e-08f, -6.264338488e-08f, -6.279330544e-08f, -6.294308020e-08f, -6.309270892e-08f, -6.324219137e-08f, -6.339152734e-08f, -6.354071659e-08f, -6.368975889e-08f,
--6.383865404e-08f, -6.398740178e-08f, -6.413600192e-08f, -6.428445421e-08f, -6.443275844e-08f, -6.458091437e-08f, -6.472892180e-08f, -6.487678049e-08f, -6.502449022e-08f, -6.517205077e-08f,
--6.531946192e-08f, -6.546672344e-08f, -6.561383512e-08f, -6.576079673e-08f, -6.590760805e-08f, -6.605426885e-08f, -6.620077893e-08f, -6.634713806e-08f, -6.649334602e-08f, -6.663940260e-08f,
--6.678530756e-08f, -6.693106070e-08f, -6.707666179e-08f, -6.722211062e-08f, -6.736740697e-08f, -6.751255061e-08f, -6.765754135e-08f, -6.780237895e-08f, -6.794706320e-08f, -6.809159389e-08f,
--6.823597080e-08f, -6.838019371e-08f, -6.852426241e-08f, -6.866817668e-08f, -6.881193631e-08f, -6.895554109e-08f, -6.909899080e-08f, -6.924228522e-08f, -6.938542415e-08f, -6.952840737e-08f,
--6.967123467e-08f, -6.981390583e-08f, -6.995642065e-08f, -7.009877891e-08f, -7.024098041e-08f, -7.038302492e-08f, -7.052491224e-08f, -7.066664217e-08f, -7.080821448e-08f, -7.094962897e-08f,
--7.109088543e-08f, -7.123198365e-08f, -7.137292343e-08f, -7.151370455e-08f, -7.165432680e-08f, -7.179478999e-08f, -7.193509389e-08f, -7.207523831e-08f, -7.221522304e-08f, -7.235504787e-08f,
--7.249471259e-08f, -7.263421700e-08f, -7.277356090e-08f, -7.291274407e-08f, -7.305176632e-08f, -7.319062744e-08f, -7.332932722e-08f, -7.346786547e-08f, -7.360624197e-08f, -7.374445653e-08f,
--7.388250894e-08f, -7.402039900e-08f, -7.415812651e-08f, -7.429569127e-08f, -7.443309307e-08f, -7.457033172e-08f, -7.470740700e-08f, -7.484431873e-08f, -7.498106671e-08f, -7.511765072e-08f,
--7.525407058e-08f, -7.539032609e-08f, -7.552641704e-08f, -7.566234324e-08f, -7.579810449e-08f, -7.593370058e-08f, -7.606913134e-08f, -7.620439655e-08f, -7.633949602e-08f, -7.647442955e-08f,
--7.660919696e-08f, -7.674379803e-08f, -7.687823259e-08f, -7.701250042e-08f, -7.714660135e-08f, -7.728053516e-08f, -7.741430168e-08f, -7.754790070e-08f, -7.768133203e-08f, -7.781459549e-08f,
--7.794769087e-08f, -7.808061798e-08f, -7.821337664e-08f, -7.834596664e-08f, -7.847838781e-08f, -7.861063995e-08f, -7.874272286e-08f, -7.887463637e-08f, -7.900638027e-08f, -7.913795438e-08f,
--7.926935850e-08f, -7.940059246e-08f, -7.953165607e-08f, -7.966254912e-08f, -7.979327144e-08f, -7.992382284e-08f, -8.005420314e-08f, -8.018441213e-08f, -8.031444965e-08f, -8.044431549e-08f,
--8.057400949e-08f, -8.070353144e-08f, -8.083288117e-08f, -8.096205850e-08f, -8.109106323e-08f, -8.121989518e-08f, -8.134855417e-08f, -8.147704002e-08f, -8.160535254e-08f, -8.173349155e-08f,
--8.186145687e-08f, -8.198924832e-08f, -8.211686571e-08f, -8.224430887e-08f, -8.237157760e-08f, -8.249867174e-08f, -8.262559111e-08f, -8.275233551e-08f, -8.287890478e-08f, -8.300529873e-08f,
--8.313151718e-08f, -8.325755997e-08f, -8.338342690e-08f, -8.350911780e-08f, -8.363463249e-08f, -8.375997080e-08f, -8.388513256e-08f, -8.401011757e-08f, -8.413492567e-08f, -8.425955669e-08f,
--8.438401044e-08f, -8.450828675e-08f, -8.463238545e-08f, -8.475630636e-08f, -8.488004931e-08f, -8.500361413e-08f, -8.512700064e-08f, -8.525020867e-08f, -8.537323805e-08f, -8.549608861e-08f,
--8.561876016e-08f, -8.574125255e-08f, -8.586356560e-08f, -8.598569915e-08f, -8.610765301e-08f, -8.622942702e-08f, -8.635102102e-08f, -8.647243483e-08f, -8.659366828e-08f, -8.671472120e-08f,
--8.683559343e-08f, -8.695628480e-08f, -8.707679514e-08f, -8.719712429e-08f, -8.731727207e-08f, -8.743723833e-08f, -8.755702288e-08f, -8.767662558e-08f, -8.779604626e-08f, -8.791528474e-08f,
--8.803434087e-08f, -8.815321448e-08f, -8.827190540e-08f, -8.839041348e-08f, -8.850873855e-08f, -8.862688045e-08f, -8.874483901e-08f, -8.886261408e-08f, -8.898020549e-08f, -8.909761308e-08f,
--8.921483669e-08f, -8.933187615e-08f, -8.944873132e-08f, -8.956540202e-08f, -8.968188811e-08f, -8.979818941e-08f, -8.991430577e-08f, -9.003023704e-08f, -9.014598306e-08f, -9.026154366e-08f,
--9.037691869e-08f, -9.049210799e-08f, -9.060711141e-08f, -9.072192880e-08f, -9.083655998e-08f, -9.095100482e-08f, -9.106526315e-08f, -9.117933481e-08f, -9.129321967e-08f, -9.140691755e-08f,
--9.152042831e-08f, -9.163375180e-08f, -9.174688785e-08f, -9.185983633e-08f, -9.197259707e-08f, -9.208516992e-08f, -9.219755474e-08f, -9.230975137e-08f, -9.242175966e-08f, -9.253357946e-08f,
--9.264521062e-08f, -9.275665300e-08f, -9.286790643e-08f, -9.297897078e-08f, -9.308984589e-08f, -9.320053162e-08f, -9.331102782e-08f, -9.342133434e-08f, -9.353145103e-08f, -9.364137775e-08f,
--9.375111435e-08f, -9.386066069e-08f, -9.397001662e-08f, -9.407918199e-08f, -9.418815666e-08f, -9.429694049e-08f, -9.440553332e-08f, -9.451393503e-08f, -9.462214545e-08f, -9.473016446e-08f,
--9.483799191e-08f, -9.494562765e-08f, -9.505307155e-08f, -9.516032346e-08f, -9.526738325e-08f, -9.537425076e-08f, -9.548092586e-08f, -9.558740842e-08f, -9.569369828e-08f, -9.579979532e-08f,
--9.590569939e-08f, -9.601141036e-08f, -9.611692808e-08f, -9.622225242e-08f, -9.632738324e-08f, -9.643232040e-08f, -9.653706377e-08f, -9.664161321e-08f, -9.674596859e-08f, -9.685012977e-08f,
--9.695409661e-08f, -9.705786898e-08f, -9.716144674e-08f, -9.726482977e-08f, -9.736801792e-08f, -9.747101107e-08f, -9.757380908e-08f, -9.767641182e-08f, -9.777881916e-08f, -9.788103096e-08f,
--9.798304709e-08f, -9.808486743e-08f, -9.818649184e-08f, -9.828792018e-08f, -9.838915235e-08f, -9.849018819e-08f, -9.859102758e-08f, -9.869167040e-08f, -9.879211652e-08f, -9.889236580e-08f,
--9.899241812e-08f, -9.909227336e-08f, -9.919193138e-08f, -9.929139206e-08f, -9.939065527e-08f, -9.948972089e-08f, -9.958858880e-08f, -9.968725886e-08f, -9.978573095e-08f, -9.988400495e-08f,
--9.998208073e-08f, -1.000799582e-07f, -1.001776372e-07f, -1.002751176e-07f, -1.003723992e-07f, -1.004694821e-07f, -1.005663660e-07f, -1.006630508e-07f, -1.007595365e-07f, -1.008558228e-07f,
--1.009519097e-07f, -1.010477971e-07f, -1.011434847e-07f, -1.012389726e-07f, -1.013342606e-07f, -1.014293485e-07f, -1.015242363e-07f, -1.016189238e-07f, -1.017134110e-07f, -1.018076976e-07f,
--1.019017837e-07f, -1.019956690e-07f, -1.020893534e-07f, -1.021828369e-07f, -1.022761194e-07f, -1.023692006e-07f, -1.024620805e-07f, -1.025547590e-07f, -1.026472360e-07f, -1.027395114e-07f,
--1.028315849e-07f, -1.029234567e-07f, -1.030151264e-07f, -1.031065940e-07f, -1.031978595e-07f, -1.032889226e-07f, -1.033797833e-07f, -1.034704415e-07f, -1.035608970e-07f, -1.036511498e-07f,
--1.037411997e-07f, -1.038310467e-07f, -1.039206906e-07f, -1.040101313e-07f, -1.040993687e-07f, -1.041884027e-07f, -1.042772332e-07f, -1.043658601e-07f, -1.044542833e-07f, -1.045425026e-07f,
--1.046305180e-07f, -1.047183294e-07f, -1.048059367e-07f, -1.048933397e-07f, -1.049805384e-07f, -1.050675327e-07f, -1.051543224e-07f, -1.052409074e-07f, -1.053272877e-07f, -1.054134632e-07f,
--1.054994337e-07f, -1.055851991e-07f, -1.056707594e-07f, -1.057561145e-07f, -1.058412641e-07f, -1.059262084e-07f, -1.060109471e-07f, -1.060954801e-07f, -1.061798074e-07f, -1.062639288e-07f,
--1.063478443e-07f, -1.064315538e-07f, -1.065150571e-07f, -1.065983542e-07f, -1.066814450e-07f, -1.067643293e-07f, -1.068470072e-07f, -1.069294784e-07f, -1.070117429e-07f, -1.070938006e-07f,
--1.071756515e-07f, -1.072572953e-07f, -1.073387321e-07f, -1.074199617e-07f, -1.075009840e-07f, -1.075817990e-07f, -1.076624065e-07f, -1.077428065e-07f, -1.078229989e-07f, -1.079029836e-07f,
--1.079827605e-07f, -1.080623294e-07f, -1.081416904e-07f, -1.082208434e-07f, -1.082997881e-07f, -1.083785246e-07f, -1.084570528e-07f, -1.085353726e-07f, -1.086134839e-07f, -1.086913865e-07f,
--1.087690805e-07f, -1.088465658e-07f, -1.089238422e-07f, -1.090009096e-07f, -1.090777681e-07f, -1.091544174e-07f, -1.092308576e-07f, -1.093070885e-07f, -1.093831100e-07f, -1.094589222e-07f,
--1.095345248e-07f, -1.096099178e-07f, -1.096851011e-07f, -1.097600747e-07f, -1.098348385e-07f, -1.099093923e-07f, -1.099837362e-07f, -1.100578700e-07f, -1.101317936e-07f, -1.102055070e-07f,
--1.102790101e-07f, -1.103523028e-07f, -1.104253851e-07f, -1.104982568e-07f, -1.105709179e-07f, -1.106433683e-07f, -1.107156080e-07f, -1.107876368e-07f, -1.108594547e-07f, -1.109310616e-07f,
--1.110024574e-07f, -1.110736421e-07f, -1.111446156e-07f, -1.112153778e-07f, -1.112859287e-07f, -1.113562681e-07f, -1.114263960e-07f, -1.114963124e-07f, -1.115660171e-07f, -1.116355101e-07f,
--1.117047914e-07f, -1.117738607e-07f, -1.118427182e-07f, -1.119113637e-07f, -1.119797971e-07f, -1.120480184e-07f, -1.121160275e-07f, -1.121838243e-07f, -1.122514088e-07f, -1.123187809e-07f,
--1.123859406e-07f, -1.124528877e-07f, -1.125196222e-07f, -1.125861441e-07f, -1.126524533e-07f, -1.127185497e-07f, -1.127844332e-07f, -1.128501038e-07f, -1.129155614e-07f, -1.129808060e-07f,
--1.130458376e-07f, -1.131106559e-07f, -1.131752610e-07f, -1.132396528e-07f, -1.133038313e-07f, -1.133677964e-07f, -1.134315480e-07f, -1.134950861e-07f, -1.135584106e-07f, -1.136215215e-07f,
--1.136844187e-07f, -1.137471021e-07f, -1.138095717e-07f, -1.138718274e-07f, -1.139338692e-07f, -1.139956970e-07f, -1.140573107e-07f, -1.141187104e-07f, -1.141798959e-07f, -1.142408672e-07f,
--1.143016242e-07f, -1.143621669e-07f, -1.144224953e-07f, -1.144826092e-07f, -1.145425086e-07f, -1.146021935e-07f, -1.146616639e-07f, -1.147209196e-07f, -1.147799606e-07f, -1.148387869e-07f,
--1.148973983e-07f, -1.149557950e-07f, -1.150139768e-07f, -1.150719436e-07f, -1.151296954e-07f, -1.151872323e-07f, -1.152445540e-07f, -1.153016606e-07f, -1.153585520e-07f, -1.154152282e-07f,
--1.154716891e-07f, -1.155279347e-07f, -1.155839650e-07f, -1.156397798e-07f, -1.156953792e-07f, -1.157507631e-07f, -1.158059315e-07f, -1.158608842e-07f, -1.159156213e-07f, -1.159701428e-07f,
--1.160244485e-07f, -1.160785385e-07f, -1.161324127e-07f, -1.161860710e-07f, -1.162395135e-07f, -1.162927400e-07f, -1.163457506e-07f, -1.163985452e-07f, -1.164511237e-07f, -1.165034861e-07f,
--1.165556324e-07f, -1.166075626e-07f, -1.166592765e-07f, -1.167107743e-07f, -1.167620557e-07f, -1.168131208e-07f, -1.168639696e-07f, -1.169146020e-07f, -1.169650180e-07f, -1.170152175e-07f,
--1.170652005e-07f, -1.171149671e-07f, -1.171645170e-07f, -1.172138504e-07f, -1.172629671e-07f, -1.173118672e-07f, -1.173605506e-07f, -1.174090172e-07f, -1.174572671e-07f, -1.175053002e-07f,
--1.175531165e-07f, -1.176007160e-07f, -1.176480985e-07f, -1.176952642e-07f, -1.177422129e-07f, -1.177889447e-07f, -1.178354594e-07f, -1.178817571e-07f, -1.179278378e-07f, -1.179737014e-07f,
--1.180193479e-07f, -1.180647772e-07f, -1.181099894e-07f, -1.181549844e-07f, -1.181997622e-07f, -1.182443227e-07f, -1.182886660e-07f, -1.183327920e-07f, -1.183767007e-07f, -1.184203920e-07f,
--1.184638660e-07f, -1.185071226e-07f, -1.185501618e-07f, -1.185929836e-07f, -1.186355879e-07f, -1.186779748e-07f, -1.187201441e-07f, -1.187620960e-07f, -1.188038303e-07f, -1.188453471e-07f,
--1.188866463e-07f, -1.189277279e-07f, -1.189685919e-07f, -1.190092382e-07f, -1.190496670e-07f, -1.190898780e-07f, -1.191298714e-07f, -1.191696471e-07f, -1.192092050e-07f, -1.192485453e-07f,
--1.192876678e-07f, -1.193265725e-07f, -1.193652594e-07f, -1.194037286e-07f, -1.194419800e-07f, -1.194800135e-07f, -1.195178292e-07f, -1.195554271e-07f, -1.195928071e-07f, -1.196299692e-07f,
--1.196669135e-07f, -1.197036399e-07f, -1.197401483e-07f, -1.197764389e-07f, -1.198125115e-07f, -1.198483662e-07f, -1.198840030e-07f, -1.199194218e-07f, -1.199546226e-07f, -1.199896055e-07f,
--1.200243704e-07f, -1.200589173e-07f, -1.200932462e-07f, -1.201273572e-07f, -1.201612501e-07f, -1.201949250e-07f, -1.202283819e-07f, -1.202616208e-07f, -1.202946416e-07f, -1.203274444e-07f,
--1.203600292e-07f, -1.203923960e-07f, -1.204245447e-07f, -1.204564753e-07f, -1.204881879e-07f, -1.205196825e-07f, -1.205509590e-07f, -1.205820175e-07f, -1.206128579e-07f, -1.206434802e-07f,
--1.206738845e-07f, -1.207040708e-07f, -1.207340390e-07f, -1.207637891e-07f, -1.207933212e-07f, -1.208226352e-07f, -1.208517312e-07f, -1.208806091e-07f, -1.209092691e-07f, -1.209377109e-07f,
--1.209659347e-07f, -1.209939405e-07f, -1.210217283e-07f, -1.210492981e-07f, -1.210766498e-07f, -1.211037835e-07f, -1.211306992e-07f, -1.211573969e-07f, -1.211838767e-07f, -1.212101384e-07f,
--1.212361821e-07f, -1.212620079e-07f, -1.212876158e-07f, -1.213130056e-07f, -1.213381776e-07f, -1.213631315e-07f, -1.213878676e-07f, -1.214123858e-07f, -1.214366860e-07f, -1.214607683e-07f,
--1.214846328e-07f, -1.215082794e-07f, -1.215317081e-07f, -1.215549190e-07f, -1.215779121e-07f, -1.216006873e-07f, -1.216232447e-07f, -1.216455844e-07f, -1.216677062e-07f, -1.216896103e-07f,
--1.217112966e-07f, -1.217327652e-07f, -1.217540161e-07f, -1.217750493e-07f, -1.217958648e-07f, -1.218164626e-07f, -1.218368427e-07f, -1.218570053e-07f, -1.218769502e-07f, -1.218966775e-07f,
--1.219161873e-07f, -1.219354794e-07f, -1.219545541e-07f, -1.219734112e-07f, -1.219920508e-07f, -1.220104729e-07f, -1.220286776e-07f, -1.220466649e-07f, -1.220644347e-07f, -1.220819871e-07f,
--1.220993222e-07f, -1.221164399e-07f, -1.221333403e-07f, -1.221500234e-07f, -1.221664892e-07f, -1.221827378e-07f, -1.221987691e-07f, -1.222145832e-07f, -1.222301802e-07f, -1.222455600e-07f,
--1.222607227e-07f, -1.222756683e-07f, -1.222903968e-07f, -1.223049082e-07f, -1.223192027e-07f, -1.223332802e-07f, -1.223471407e-07f, -1.223607843e-07f, -1.223742109e-07f, -1.223874207e-07f,
--1.224004137e-07f, -1.224131899e-07f, -1.224257493e-07f, -1.224380919e-07f, -1.224502178e-07f, -1.224621270e-07f, -1.224738196e-07f, -1.224852956e-07f, -1.224965549e-07f, -1.225075978e-07f,
--1.225184241e-07f, -1.225290339e-07f, -1.225394272e-07f, -1.225496042e-07f, -1.225595648e-07f, -1.225693090e-07f, -1.225788369e-07f, -1.225881485e-07f, -1.225972440e-07f, -1.226061232e-07f,
--1.226147862e-07f, -1.226232331e-07f, -1.226314640e-07f, -1.226394788e-07f, -1.226472776e-07f, -1.226548604e-07f, -1.226622273e-07f, -1.226693783e-07f, -1.226763134e-07f, -1.226830328e-07f,
--1.226895364e-07f, -1.226958242e-07f, -1.227018964e-07f, -1.227077529e-07f, -1.227133939e-07f, -1.227188193e-07f, -1.227240291e-07f, -1.227290236e-07f, -1.227338025e-07f, -1.227383662e-07f,
--1.227427144e-07f, -1.227468474e-07f, -1.227507652e-07f, -1.227544677e-07f, -1.227579551e-07f, -1.227612274e-07f, -1.227642847e-07f, -1.227671269e-07f, -1.227697542e-07f, -1.227721665e-07f,
--1.227743640e-07f, -1.227763467e-07f, -1.227781146e-07f, -1.227796678e-07f, -1.227810063e-07f, -1.227821302e-07f, -1.227830396e-07f, -1.227837344e-07f, -1.227842148e-07f, -1.227844808e-07f,
--1.227845324e-07f, -1.227843697e-07f, -1.227839927e-07f, -1.227834016e-07f, -1.227825963e-07f, -1.227815769e-07f, -1.227803434e-07f, -1.227788960e-07f, -1.227772347e-07f, -1.227753595e-07f,
--1.227732705e-07f, -1.227709677e-07f, -1.227684512e-07f, -1.227657210e-07f, -1.227627773e-07f, -1.227596200e-07f, -1.227562493e-07f, -1.227526651e-07f, -1.227488676e-07f, -1.227448568e-07f,
--1.227406328e-07f, -1.227361956e-07f, -1.227315452e-07f, -1.227266818e-07f, -1.227216054e-07f, -1.227163161e-07f, -1.227108139e-07f, -1.227050989e-07f, -1.226991711e-07f, -1.226930306e-07f,
--1.226866776e-07f, -1.226801119e-07f, -1.226733338e-07f, -1.226663432e-07f, -1.226591403e-07f, -1.226517250e-07f, -1.226440975e-07f, -1.226362579e-07f, -1.226282061e-07f, -1.226199423e-07f,
--1.226114666e-07f, -1.226027789e-07f, -1.225938793e-07f, -1.225847680e-07f, -1.225754450e-07f, -1.225659104e-07f, -1.225561642e-07f, -1.225462065e-07f, -1.225360374e-07f, -1.225256569e-07f,
--1.225150651e-07f, -1.225042621e-07f, -1.224932480e-07f, -1.224820227e-07f, -1.224705865e-07f, -1.224589394e-07f, -1.224470813e-07f, -1.224350125e-07f, -1.224227330e-07f, -1.224102429e-07f,
--1.223975421e-07f, -1.223846309e-07f, -1.223715093e-07f, -1.223581773e-07f, -1.223446350e-07f, -1.223308826e-07f, -1.223169200e-07f, -1.223027474e-07f, -1.222883648e-07f, -1.222737724e-07f,
--1.222589701e-07f, -1.222439581e-07f, -1.222287364e-07f, -1.222133052e-07f, -1.221976644e-07f, -1.221818142e-07f, -1.221657547e-07f, -1.221494860e-07f, -1.221330080e-07f, -1.221163210e-07f,
--1.220994249e-07f, -1.220823199e-07f, -1.220650060e-07f, -1.220474834e-07f, -1.220297520e-07f, -1.220118121e-07f, -1.219936636e-07f, -1.219753067e-07f, -1.219567414e-07f, -1.219379678e-07f,
--1.219189861e-07f, -1.218997962e-07f, -1.218803983e-07f, -1.218607925e-07f, -1.218409788e-07f, -1.218209573e-07f, -1.218007282e-07f, -1.217802914e-07f, -1.217596472e-07f, -1.217387955e-07f,
--1.217177365e-07f, -1.216964703e-07f, -1.216749969e-07f, -1.216533164e-07f, -1.216314289e-07f, -1.216093346e-07f, -1.215870334e-07f, -1.215645255e-07f, -1.215418111e-07f, -1.215188900e-07f,
--1.214957626e-07f, -1.214724288e-07f, -1.214488887e-07f, -1.214251425e-07f, -1.214011902e-07f, -1.213770319e-07f, -1.213526678e-07f, -1.213280978e-07f, -1.213033222e-07f, -1.212783409e-07f,
--1.212531541e-07f, -1.212277619e-07f, -1.212021644e-07f, -1.211763617e-07f, -1.211503538e-07f, -1.211241409e-07f, -1.210977231e-07f, -1.210711004e-07f, -1.210442730e-07f, -1.210172409e-07f,
--1.209900043e-07f, -1.209625632e-07f, -1.209349178e-07f, -1.209070681e-07f, -1.208790143e-07f, -1.208507564e-07f, -1.208222946e-07f, -1.207936289e-07f, -1.207647595e-07f, -1.207356864e-07f,
--1.207064097e-07f, -1.206769296e-07f, -1.206472462e-07f, -1.206173595e-07f, -1.205872696e-07f, -1.205569767e-07f, -1.205264809e-07f, -1.204957822e-07f, -1.204648808e-07f, -1.204337768e-07f,
--1.204024703e-07f, -1.203709613e-07f, -1.203392500e-07f, -1.203073365e-07f, -1.202752210e-07f, -1.202429034e-07f, -1.202103839e-07f, -1.201776626e-07f, -1.201447397e-07f, -1.201116152e-07f,
--1.200782892e-07f, -1.200447619e-07f, -1.200110334e-07f, -1.199771037e-07f, -1.199429729e-07f, -1.199086413e-07f, -1.198741089e-07f, -1.198393757e-07f, -1.198044420e-07f, -1.197693078e-07f,
--1.197339732e-07f, -1.196984383e-07f, -1.196627034e-07f, -1.196267684e-07f, -1.195906334e-07f, -1.195542987e-07f, -1.195177643e-07f, -1.194810303e-07f, -1.194440968e-07f, -1.194069640e-07f,
--1.193696319e-07f, -1.193321007e-07f, -1.192943705e-07f, -1.192564414e-07f, -1.192183136e-07f, -1.191799870e-07f, -1.191414619e-07f, -1.191027384e-07f, -1.190638166e-07f, -1.190246966e-07f,
--1.189853785e-07f, -1.189458624e-07f, -1.189061485e-07f, -1.188662369e-07f, -1.188261277e-07f, -1.187858209e-07f, -1.187453168e-07f, -1.187046155e-07f, -1.186637170e-07f, -1.186226216e-07f,
--1.185813292e-07f, -1.185398401e-07f, -1.184981543e-07f, -1.184562720e-07f, -1.184141933e-07f, -1.183719183e-07f, -1.183294472e-07f, -1.182867800e-07f, -1.182439169e-07f, -1.182008581e-07f,
--1.181576035e-07f, -1.181141535e-07f, -1.180705080e-07f, -1.180266672e-07f, -1.179826312e-07f, -1.179384002e-07f, -1.178939743e-07f, -1.178493537e-07f, -1.178045383e-07f, -1.177595284e-07f,
--1.177143241e-07f, -1.176689255e-07f, -1.176233328e-07f, -1.175775460e-07f, -1.175315654e-07f, -1.174853909e-07f, -1.174390228e-07f, -1.173924612e-07f, -1.173457063e-07f, -1.172987580e-07f,
--1.172516167e-07f, -1.172042823e-07f, -1.171567551e-07f, -1.171090352e-07f, -1.170611226e-07f, -1.170130176e-07f, -1.169647203e-07f, -1.169162307e-07f, -1.168675491e-07f, -1.168186755e-07f,
--1.167696101e-07f, -1.167203531e-07f, -1.166709045e-07f, -1.166212645e-07f, -1.165714332e-07f, -1.165214108e-07f, -1.164711974e-07f, -1.164207931e-07f, -1.163701981e-07f, -1.163194125e-07f,
--1.162684364e-07f, -1.162172700e-07f, -1.161659134e-07f, -1.161143668e-07f, -1.160626302e-07f, -1.160107039e-07f, -1.159585879e-07f, -1.159062825e-07f, -1.158537876e-07f, -1.158011036e-07f,
--1.157482304e-07f, -1.156951684e-07f, -1.156419175e-07f, -1.155884779e-07f, -1.155348498e-07f, -1.154810334e-07f, -1.154270287e-07f, -1.153728359e-07f, -1.153184551e-07f, -1.152638865e-07f,
--1.152091302e-07f, -1.151541864e-07f, -1.150990552e-07f, -1.150437368e-07f, -1.149882312e-07f, -1.149325387e-07f, -1.148766594e-07f, -1.148205934e-07f, -1.147643408e-07f, -1.147079019e-07f,
--1.146512767e-07f, -1.145944655e-07f, -1.145374683e-07f, -1.144802852e-07f, -1.144229166e-07f, -1.143653624e-07f, -1.143076228e-07f, -1.142496980e-07f, -1.141915882e-07f, -1.141332934e-07f,
--1.140748139e-07f, -1.140161497e-07f, -1.139573010e-07f, -1.138982680e-07f, -1.138390509e-07f, -1.137796497e-07f, -1.137200646e-07f, -1.136602958e-07f, -1.136003434e-07f, -1.135402075e-07f,
--1.134798884e-07f, -1.134193861e-07f, -1.133587009e-07f, -1.132978329e-07f, -1.132367821e-07f, -1.131755489e-07f, -1.131141332e-07f, -1.130525354e-07f, -1.129907555e-07f, -1.129287936e-07f,
--1.128666501e-07f, -1.128043249e-07f, -1.127418182e-07f, -1.126791303e-07f, -1.126162612e-07f, -1.125532111e-07f, -1.124899802e-07f, -1.124265686e-07f, -1.123629765e-07f, -1.122992040e-07f,
--1.122352514e-07f, -1.121711186e-07f, -1.121068060e-07f, -1.120423136e-07f, -1.119776417e-07f, -1.119127903e-07f, -1.118477597e-07f, -1.117825500e-07f, -1.117171613e-07f, -1.116515938e-07f,
--1.115858477e-07f, -1.115199231e-07f, -1.114538202e-07f, -1.113875392e-07f, -1.113210801e-07f, -1.112544433e-07f, -1.111876287e-07f, -1.111206367e-07f, -1.110534673e-07f, -1.109861207e-07f,
--1.109185971e-07f, -1.108508966e-07f, -1.107830195e-07f, -1.107149658e-07f, -1.106467357e-07f, -1.105783294e-07f, -1.105097471e-07f, -1.104409889e-07f, -1.103720549e-07f, -1.103029454e-07f,
--1.102336605e-07f, -1.101642004e-07f, -1.100945653e-07f, -1.100247552e-07f, -1.099547704e-07f, -1.098846110e-07f, -1.098142772e-07f, -1.097437692e-07f, -1.096730872e-07f, -1.096022312e-07f,
--1.095312015e-07f, -1.094599983e-07f, -1.093886216e-07f, -1.093170717e-07f, -1.092453488e-07f, -1.091734530e-07f, -1.091013844e-07f, -1.090291433e-07f, -1.089567298e-07f, -1.088841441e-07f,
--1.088113863e-07f, -1.087384567e-07f, -1.086653554e-07f, -1.085920825e-07f, -1.085186383e-07f, -1.084450228e-07f, -1.083712364e-07f, -1.082972791e-07f, -1.082231511e-07f, -1.081488527e-07f,
--1.080743838e-07f, -1.079997449e-07f, -1.079249359e-07f, -1.078499571e-07f, -1.077748087e-07f, -1.076994908e-07f, -1.076240037e-07f, -1.075483474e-07f, -1.074725221e-07f, -1.073965281e-07f,
--1.073203655e-07f, -1.072440345e-07f, -1.071675352e-07f, -1.070908679e-07f, -1.070140327e-07f, -1.069370297e-07f, -1.068598592e-07f, -1.067825214e-07f, -1.067050163e-07f, -1.066273443e-07f,
--1.065495054e-07f, -1.064714999e-07f, -1.063933279e-07f, -1.063149896e-07f, -1.062364852e-07f, -1.061578148e-07f, -1.060789787e-07f, -1.059999770e-07f, -1.059208098e-07f, -1.058414775e-07f,
--1.057619801e-07f, -1.056823179e-07f, -1.056024910e-07f, -1.055224995e-07f, -1.054423438e-07f, -1.053620239e-07f, -1.052815400e-07f, -1.052008924e-07f, -1.051200812e-07f, -1.050391066e-07f,
--1.049579687e-07f, -1.048766678e-07f, -1.047952040e-07f, -1.047135775e-07f, -1.046317886e-07f, -1.045498373e-07f, -1.044677239e-07f, -1.043854485e-07f, -1.043030114e-07f, -1.042204127e-07f,
--1.041376526e-07f, -1.040547313e-07f, -1.039716490e-07f, -1.038884058e-07f, -1.038050020e-07f, -1.037214377e-07f, -1.036377132e-07f, -1.035538285e-07f, -1.034697840e-07f, -1.033855797e-07f,
--1.033012159e-07f, -1.032166927e-07f, -1.031320104e-07f, -1.030471691e-07f, -1.029621690e-07f, -1.028770103e-07f, -1.027916933e-07f, -1.027062180e-07f, -1.026205846e-07f, -1.025347935e-07f,
--1.024488447e-07f, -1.023627384e-07f, -1.022764749e-07f, -1.021900543e-07f, -1.021034768e-07f, -1.020167426e-07f, -1.019298518e-07f, -1.018428048e-07f, -1.017556017e-07f, -1.016682426e-07f,
--1.015807277e-07f, -1.014930574e-07f, -1.014052316e-07f, -1.013172507e-07f, -1.012291149e-07f, -1.011408242e-07f, -1.010523790e-07f, -1.009637793e-07f, -1.008750255e-07f, -1.007861176e-07f,
--1.006970560e-07f, -1.006078407e-07f, -1.005184720e-07f, -1.004289501e-07f, -1.003392751e-07f, -1.002494473e-07f, -1.001594669e-07f, -1.000693340e-07f, -9.997904886e-08f, -9.988861166e-08f,
--9.979802260e-08f, -9.970728187e-08f, -9.961638968e-08f, -9.952534622e-08f, -9.943415168e-08f, -9.934280627e-08f, -9.925131018e-08f, -9.915966360e-08f, -9.906786675e-08f, -9.897591981e-08f,
--9.888382298e-08f, -9.879157647e-08f, -9.869918046e-08f, -9.860663517e-08f, -9.851394078e-08f, -9.842109751e-08f, -9.832810554e-08f, -9.823496507e-08f, -9.814167632e-08f, -9.804823948e-08f,
--9.795465474e-08f, -9.786092231e-08f, -9.776704239e-08f, -9.767301519e-08f, -9.757884089e-08f, -9.748451971e-08f, -9.739005185e-08f, -9.729543750e-08f, -9.720067688e-08f, -9.710577017e-08f,
--9.701071759e-08f, -9.691551934e-08f, -9.682017562e-08f, -9.672468663e-08f, -9.662905258e-08f, -9.653327367e-08f, -9.643735011e-08f, -9.634128209e-08f, -9.624506983e-08f, -9.614871352e-08f,
--9.605221338e-08f, -9.595556960e-08f, -9.585878239e-08f, -9.576185196e-08f, -9.566477851e-08f, -9.556756225e-08f, -9.547020338e-08f, -9.537270212e-08f, -9.527505865e-08f, -9.517727320e-08f,
--9.507934597e-08f, -9.498127717e-08f, -9.488306699e-08f, -9.478471566e-08f, -9.468622337e-08f, -9.458759034e-08f, -9.448881677e-08f, -9.438990287e-08f, -9.429084885e-08f, -9.419165492e-08f,
--9.409232128e-08f, -9.399284815e-08f, -9.389323573e-08f, -9.379348423e-08f, -9.369359386e-08f, -9.359356484e-08f, -9.349339737e-08f, -9.339309165e-08f, -9.329264791e-08f, -9.319206635e-08f,
--9.309134718e-08f, -9.299049062e-08f, -9.288949686e-08f, -9.278836613e-08f, -9.268709864e-08f, -9.258569460e-08f, -9.248415421e-08f, -9.238247769e-08f, -9.228066526e-08f, -9.217871712e-08f,
--9.207663348e-08f, -9.197441457e-08f, -9.187206059e-08f, -9.176957175e-08f, -9.166694828e-08f, -9.156419037e-08f, -9.146129825e-08f, -9.135827213e-08f, -9.125511222e-08f, -9.115181873e-08f,
--9.104839189e-08f, -9.094483190e-08f, -9.084113899e-08f, -9.073731335e-08f, -9.063335522e-08f, -9.052926480e-08f, -9.042504231e-08f, -9.032068796e-08f, -9.021620198e-08f, -9.011158457e-08f,
--9.000683595e-08f, -8.990195635e-08f, -8.979694597e-08f, -8.969180503e-08f, -8.958653374e-08f, -8.948113234e-08f, -8.937560102e-08f, -8.926994002e-08f, -8.916414954e-08f, -8.905822981e-08f,
--8.895218103e-08f, -8.884600344e-08f, -8.873969725e-08f, -8.863326267e-08f, -8.852669993e-08f, -8.842000924e-08f, -8.831319082e-08f, -8.820624490e-08f, -8.809917168e-08f, -8.799197139e-08f,
--8.788464426e-08f, -8.777719049e-08f, -8.766961031e-08f, -8.756190393e-08f, -8.745407159e-08f, -8.734611350e-08f, -8.723802987e-08f, -8.712982093e-08f, -8.702148691e-08f, -8.691302801e-08f,
--8.680444447e-08f, -8.669573650e-08f, -8.658690433e-08f, -8.647794817e-08f, -8.636886826e-08f, -8.625966480e-08f, -8.615033803e-08f, -8.604088816e-08f, -8.593131542e-08f, -8.582162002e-08f,
--8.571180221e-08f, -8.560186218e-08f, -8.549180018e-08f, -8.538161641e-08f, -8.527131112e-08f, -8.516088451e-08f, -8.505033681e-08f, -8.493966825e-08f, -8.482887905e-08f, -8.471796943e-08f,
--8.460693963e-08f, -8.449578985e-08f, -8.438452034e-08f, -8.427313130e-08f, -8.416162298e-08f, -8.404999558e-08f, -8.393824935e-08f, -8.382638449e-08f, -8.371440125e-08f, -8.360229984e-08f,
--8.349008049e-08f, -8.337774343e-08f, -8.326528888e-08f, -8.315271707e-08f, -8.304002822e-08f, -8.292722257e-08f, -8.281430033e-08f, -8.270126174e-08f, -8.258810703e-08f, -8.247483641e-08f,
--8.236145012e-08f, -8.224794838e-08f, -8.213433143e-08f, -8.202059948e-08f, -8.190675278e-08f, -8.179279154e-08f, -8.167871599e-08f, -8.156452637e-08f, -8.145022289e-08f, -8.133580580e-08f,
--8.122127531e-08f, -8.110663167e-08f, -8.099187509e-08f, -8.087700580e-08f, -8.076202404e-08f, -8.064693004e-08f, -8.053172401e-08f, -8.041640621e-08f, -8.030097684e-08f, -8.018543615e-08f,
--8.006978437e-08f, -7.995402171e-08f, -7.983814843e-08f, -7.972216474e-08f, -7.960607087e-08f, -7.948986706e-08f, -7.937355354e-08f, -7.925713054e-08f, -7.914059829e-08f, -7.902395703e-08f,
--7.890720697e-08f, -7.879034836e-08f, -7.867338143e-08f, -7.855630641e-08f, -7.843912353e-08f, -7.832183302e-08f, -7.820443511e-08f, -7.808693005e-08f, -7.796931805e-08f, -7.785159936e-08f,
--7.773377421e-08f, -7.761584282e-08f, -7.749780544e-08f, -7.737966229e-08f, -7.726141362e-08f, -7.714305964e-08f, -7.702460060e-08f, -7.690603673e-08f, -7.678736827e-08f, -7.666859544e-08f,
--7.654971848e-08f, -7.643073763e-08f, -7.631165313e-08f, -7.619246519e-08f, -7.607317407e-08f, -7.595377999e-08f, -7.583428319e-08f, -7.571468391e-08f, -7.559498237e-08f, -7.547517882e-08f,
--7.535527349e-08f, -7.523526662e-08f, -7.511515843e-08f, -7.499494918e-08f, -7.487463908e-08f, -7.475422839e-08f, -7.463371733e-08f, -7.451310614e-08f, -7.439239506e-08f, -7.427158432e-08f,
--7.415067417e-08f, -7.402966483e-08f, -7.390855654e-08f, -7.378734954e-08f, -7.366604408e-08f, -7.354464038e-08f, -7.342313868e-08f, -7.330153921e-08f, -7.317984223e-08f, -7.305804796e-08f,
--7.293615665e-08f, -7.281416852e-08f, -7.269208382e-08f, -7.256990279e-08f, -7.244762566e-08f, -7.232525267e-08f, -7.220278407e-08f, -7.208022008e-08f, -7.195756095e-08f, -7.183480692e-08f,
--7.171195822e-08f, -7.158901510e-08f, -7.146597779e-08f, -7.134284653e-08f, -7.121962156e-08f, -7.109630312e-08f, -7.097289146e-08f, -7.084938680e-08f, -7.072578939e-08f, -7.060209948e-08f,
--7.047831729e-08f, -7.035444307e-08f, -7.023047705e-08f, -7.010641949e-08f, -6.998227062e-08f, -6.985803067e-08f, -6.973369990e-08f, -6.960927853e-08f, -6.948476682e-08f, -6.936016500e-08f,
--6.923547331e-08f, -6.911069199e-08f, -6.898582129e-08f, -6.886086145e-08f, -6.873581270e-08f, -6.861067529e-08f, -6.848544946e-08f, -6.836013545e-08f, -6.823473351e-08f, -6.810924386e-08f,
--6.798366677e-08f, -6.785800246e-08f, -6.773225119e-08f, -6.760641318e-08f, -6.748048869e-08f, -6.735447796e-08f, -6.722838122e-08f, -6.710219873e-08f, -6.697593072e-08f, -6.684957744e-08f,
--6.672313913e-08f, -6.659661602e-08f, -6.647000838e-08f, -6.634331643e-08f, -6.621654042e-08f, -6.608968060e-08f, -6.596273721e-08f, -6.583571048e-08f, -6.570860067e-08f, -6.558140802e-08f,
--6.545413276e-08f, -6.532677516e-08f, -6.519933544e-08f, -6.507181385e-08f, -6.494421064e-08f, -6.481652605e-08f, -6.468876033e-08f, -6.456091371e-08f, -6.443298645e-08f, -6.430497878e-08f,
--6.417689096e-08f, -6.404872322e-08f, -6.392047581e-08f, -6.379214898e-08f, -6.366374296e-08f, -6.353525802e-08f, -6.340669438e-08f, -6.327805229e-08f, -6.314933201e-08f, -6.302053377e-08f,
--6.289165782e-08f, -6.276270440e-08f, -6.263367377e-08f, -6.250456616e-08f, -6.237538182e-08f, -6.224612100e-08f, -6.211678394e-08f, -6.198737089e-08f, -6.185788210e-08f, -6.172831780e-08f,
--6.159867825e-08f, -6.146896369e-08f, -6.133917437e-08f, -6.120931053e-08f, -6.107937243e-08f, -6.094936029e-08f, -6.081927439e-08f, -6.068911495e-08f, -6.055888222e-08f, -6.042857646e-08f,
--6.029819791e-08f, -6.016774681e-08f, -6.003722342e-08f, -5.990662797e-08f, -5.977596072e-08f, -5.964522191e-08f, -5.951441179e-08f, -5.938353061e-08f, -5.925257861e-08f, -5.912155605e-08f,
--5.899046316e-08f, -5.885930019e-08f, -5.872806740e-08f, -5.859676503e-08f, -5.846539333e-08f, -5.833395254e-08f, -5.820244292e-08f, -5.807086471e-08f, -5.793921815e-08f, -5.780750350e-08f,
--5.767572101e-08f, -5.754387092e-08f, -5.741195348e-08f, -5.727996893e-08f, -5.714791753e-08f, -5.701579953e-08f, -5.688361517e-08f, -5.675136469e-08f, -5.661904836e-08f, -5.648666641e-08f,
--5.635421910e-08f, -5.622170668e-08f, -5.608912938e-08f, -5.595648747e-08f, -5.582378119e-08f, -5.569101078e-08f, -5.555817651e-08f, -5.542527860e-08f, -5.529231733e-08f, -5.515929292e-08f,
--5.502620564e-08f, -5.489305573e-08f, -5.475984344e-08f, -5.462656902e-08f, -5.449323272e-08f, -5.435983478e-08f, -5.422637546e-08f, -5.409285501e-08f, -5.395927368e-08f, -5.382563170e-08f,
--5.369192935e-08f, -5.355816685e-08f, -5.342434447e-08f, -5.329046245e-08f, -5.315652104e-08f, -5.302252049e-08f, -5.288846106e-08f, -5.275434298e-08f, -5.262016652e-08f, -5.248593192e-08f,
--5.235163942e-08f, -5.221728929e-08f, -5.208288176e-08f, -5.194841710e-08f, -5.181389554e-08f, -5.167931735e-08f, -5.154468276e-08f, -5.140999203e-08f, -5.127524542e-08f, -5.114044316e-08f,
--5.100558551e-08f, -5.087067272e-08f, -5.073570504e-08f, -5.060068273e-08f, -5.046560602e-08f, -5.033047518e-08f, -5.019529044e-08f, -5.006005207e-08f, -4.992476031e-08f, -4.978941542e-08f,
--4.965401763e-08f, -4.951856722e-08f, -4.938306441e-08f, -4.924750947e-08f, -4.911190265e-08f, -4.897624419e-08f, -4.884053435e-08f, -4.870477337e-08f, -4.856896152e-08f, -4.843309903e-08f,
--4.829718617e-08f, -4.816122317e-08f, -4.802521030e-08f, -4.788914779e-08f, -4.775303591e-08f, -4.761687491e-08f, -4.748066503e-08f, -4.734440652e-08f, -4.720809964e-08f, -4.707174464e-08f,
--4.693534177e-08f, -4.679889128e-08f, -4.666239342e-08f, -4.652584844e-08f, -4.638925660e-08f, -4.625261813e-08f, -4.611593331e-08f, -4.597920237e-08f, -4.584242556e-08f, -4.570560315e-08f,
--4.556873538e-08f, -4.543182249e-08f, -4.529486475e-08f, -4.515786241e-08f, -4.502081571e-08f, -4.488372490e-08f, -4.474659024e-08f, -4.460941198e-08f, -4.447219037e-08f, -4.433492566e-08f,
--4.419761811e-08f, -4.406026796e-08f, -4.392287546e-08f, -4.378544087e-08f, -4.364796444e-08f, -4.351044642e-08f, -4.337288706e-08f, -4.323528662e-08f, -4.309764533e-08f, -4.295996347e-08f,
--4.282224127e-08f, -4.268447898e-08f, -4.254667687e-08f, -4.240883518e-08f, -4.227095416e-08f, -4.213303407e-08f, -4.199507515e-08f, -4.185707765e-08f, -4.171904184e-08f, -4.158096796e-08f,
--4.144285626e-08f, -4.130470699e-08f, -4.116652041e-08f, -4.102829676e-08f, -4.089003630e-08f, -4.075173928e-08f, -4.061340595e-08f, -4.047503657e-08f, -4.033663137e-08f, -4.019819063e-08f,
--4.005971458e-08f, -3.992120347e-08f, -3.978265757e-08f, -3.964407712e-08f, -3.950546237e-08f, -3.936681358e-08f, -3.922813100e-08f, -3.908941487e-08f, -3.895066545e-08f, -3.881188299e-08f,
--3.867306774e-08f, -3.853421996e-08f, -3.839533989e-08f, -3.825642778e-08f, -3.811748390e-08f, -3.797850848e-08f, -3.783950179e-08f, -3.770046407e-08f, -3.756139557e-08f, -3.742229655e-08f,
--3.728316725e-08f, -3.714400793e-08f, -3.700481884e-08f, -3.686560024e-08f, -3.672635236e-08f, -3.658707547e-08f, -3.644776981e-08f, -3.630843564e-08f, -3.616907321e-08f, -3.602968276e-08f,
--3.589026456e-08f, -3.575081885e-08f, -3.561134588e-08f, -3.547184590e-08f, -3.533231917e-08f, -3.519276594e-08f, -3.505318645e-08f, -3.491358096e-08f, -3.477394973e-08f, -3.463429299e-08f,
--3.449461101e-08f, -3.435490403e-08f, -3.421517230e-08f, -3.407541608e-08f, -3.393563562e-08f, -3.379583116e-08f, -3.365600297e-08f, -3.351615128e-08f, -3.337627635e-08f, -3.323637844e-08f,
--3.309645779e-08f, -3.295651465e-08f, -3.281654928e-08f, -3.267656192e-08f, -3.253655283e-08f, -3.239652225e-08f, -3.225647045e-08f, -3.211639766e-08f, -3.197630414e-08f, -3.183619014e-08f,
--3.169605591e-08f, -3.155590171e-08f, -3.141572777e-08f, -3.127553436e-08f, -3.113532172e-08f, -3.099509011e-08f, -3.085483977e-08f, -3.071457095e-08f, -3.057428391e-08f, -3.043397889e-08f,
--3.029365615e-08f, -3.015331594e-08f, -3.001295850e-08f, -2.987258409e-08f, -2.973219296e-08f, -2.959178536e-08f, -2.945136153e-08f, -2.931092173e-08f, -2.917046621e-08f, -2.902999522e-08f,
--2.888950900e-08f, -2.874900782e-08f, -2.860849191e-08f, -2.846796153e-08f, -2.832741692e-08f, -2.818685835e-08f, -2.804628605e-08f, -2.790570028e-08f, -2.776510129e-08f, -2.762448932e-08f,
--2.748386463e-08f, -2.734322747e-08f, -2.720257808e-08f, -2.706191672e-08f, -2.692124363e-08f, -2.678055907e-08f, -2.663986328e-08f, -2.649915652e-08f, -2.635843902e-08f, -2.621771105e-08f,
--2.607697285e-08f, -2.593622467e-08f, -2.579546676e-08f, -2.565469937e-08f, -2.551392274e-08f, -2.537313714e-08f, -2.523234279e-08f, -2.509153997e-08f, -2.495072890e-08f, -2.480990985e-08f,
--2.466908306e-08f, -2.452824878e-08f, -2.438740726e-08f, -2.424655874e-08f, -2.410570348e-08f, -2.396484173e-08f, -2.382397372e-08f, -2.368309972e-08f, -2.354221997e-08f, -2.340133471e-08f,
--2.326044421e-08f, -2.311954869e-08f, -2.297864842e-08f, -2.283774364e-08f, -2.269683460e-08f, -2.255592155e-08f, -2.241500473e-08f, -2.227408439e-08f, -2.213316078e-08f, -2.199223415e-08f,
--2.185130475e-08f, -2.171037282e-08f, -2.156943861e-08f, -2.142850237e-08f, -2.128756435e-08f, -2.114662479e-08f, -2.100568394e-08f, -2.086474205e-08f, -2.072379937e-08f, -2.058285614e-08f,
--2.044191261e-08f, -2.030096903e-08f, -2.016002564e-08f, -2.001908269e-08f, -1.987814043e-08f, -1.973719910e-08f, -1.959625896e-08f, -1.945532024e-08f, -1.931438320e-08f, -1.917344808e-08f,
--1.903251513e-08f, -1.889158459e-08f, -1.875065671e-08f, -1.860973174e-08f, -1.846880992e-08f, -1.832789151e-08f, -1.818697673e-08f, -1.804606585e-08f, -1.790515911e-08f, -1.776425675e-08f,
--1.762335902e-08f, -1.748246617e-08f, -1.734157843e-08f, -1.720069606e-08f, -1.705981931e-08f, -1.691894841e-08f, -1.677808361e-08f, -1.663722516e-08f, -1.649637330e-08f, -1.635552829e-08f,
--1.621469035e-08f, -1.607385975e-08f, -1.593303672e-08f, -1.579222150e-08f, -1.565141435e-08f, -1.551061551e-08f, -1.536982522e-08f, -1.522904373e-08f, -1.508827128e-08f, -1.494750811e-08f,
--1.480675448e-08f, -1.466601062e-08f, -1.452527678e-08f, -1.438455320e-08f, -1.424384013e-08f, -1.410313781e-08f, -1.396244648e-08f, -1.382176640e-08f, -1.368109779e-08f, -1.354044091e-08f,
--1.339979601e-08f, -1.325916331e-08f, -1.311854307e-08f, -1.297793553e-08f, -1.283734093e-08f, -1.269675952e-08f, -1.255619154e-08f, -1.241563723e-08f, -1.227509683e-08f, -1.213457060e-08f,
--1.199405876e-08f, -1.185356156e-08f, -1.171307925e-08f, -1.157261207e-08f, -1.143216026e-08f, -1.129172406e-08f, -1.115130372e-08f, -1.101089947e-08f, -1.087051156e-08f, -1.073014023e-08f,
--1.058978573e-08f, -1.044944829e-08f, -1.030912815e-08f, -1.016882556e-08f, -1.002854076e-08f, -9.888273994e-09f, -9.748025497e-09f, -9.607795512e-09f, -9.467584280e-09f, -9.327392044e-09f,
--9.187219043e-09f, -9.047065518e-09f, -8.906931711e-09f, -8.766817861e-09f, -8.626724209e-09f, -8.486650996e-09f, -8.346598462e-09f, -8.206566848e-09f, -8.066556392e-09f, -7.926567336e-09f,
--7.786599919e-09f, -7.646654382e-09f, -7.506730963e-09f, -7.366829902e-09f, -7.226951440e-09f, -7.087095815e-09f, -6.947263267e-09f, -6.807454035e-09f, -6.667668358e-09f, -6.527906475e-09f,
--6.388168625e-09f, -6.248455047e-09f, -6.108765980e-09f, -5.969101662e-09f, -5.829462332e-09f, -5.689848228e-09f, -5.550259589e-09f, -5.410696652e-09f, -5.271159656e-09f, -5.131648839e-09f,
--4.992164439e-09f, -4.852706693e-09f, -4.713275839e-09f, -4.573872114e-09f, -4.434495757e-09f, -4.295147005e-09f, -4.155826094e-09f, -4.016533262e-09f, -3.877268746e-09f, -3.738032782e-09f,
--3.598825609e-09f, -3.459647461e-09f, -3.320498577e-09f, -3.181379192e-09f, -3.042289542e-09f, -2.903229864e-09f, -2.764200395e-09f, -2.625201370e-09f, -2.486233024e-09f, -2.347295595e-09f,
--2.208389317e-09f, -2.069514426e-09f, -1.930671157e-09f, -1.791859747e-09f, -1.653080429e-09f, -1.514333440e-09f, -1.375619013e-09f, -1.236937385e-09f, -1.098288790e-09f, -9.596734617e-10f,
--8.210916357e-10f, -6.825435460e-10f, -5.440294270e-10f, -4.055495128e-10f, -2.671040375e-10f, -1.286932349e-10f, 9.682661028e-12f, 1.480234167e-10f, 2.863287986e-10f, 4.245985731e-10f,
-5.628325071e-10f, 7.010303672e-10f, 8.391919204e-10f, 9.773169338e-10f, 1.115405175e-09f, 1.253456410e-09f, 1.391470407e-09f, 1.529446934e-09f, 1.667385758e-09f, 1.805286647e-09f,
-1.943149369e-09f, 2.080973692e-09f, 2.218759385e-09f, 2.356506214e-09f, 2.494213950e-09f, 2.631882359e-09f, 2.769511212e-09f, 2.907100277e-09f, 3.044649323e-09f, 3.182158118e-09f,
-3.319626432e-09f, 3.457054035e-09f, 3.594440696e-09f, 3.731786184e-09f, 3.869090269e-09f, 4.006352721e-09f, 4.143573310e-09f, 4.280751805e-09f, 4.417887978e-09f, 4.554981599e-09f,
-4.692032438e-09f, 4.829040265e-09f, 4.966004852e-09f, 5.102925970e-09f, 5.239803388e-09f, 5.376636880e-09f, 5.513426215e-09f, 5.650171166e-09f, 5.786871503e-09f, 5.923527000e-09f,
-6.060137426e-09f, 6.196702555e-09f, 6.333222159e-09f, 6.469696010e-09f, 6.606123879e-09f, 6.742505541e-09f, 6.878840767e-09f, 7.015129330e-09f, 7.151371004e-09f, 7.287565561e-09f,
-7.423712774e-09f, 7.559812417e-09f, 7.695864264e-09f, 7.831868088e-09f, 7.967823663e-09f, 8.103730762e-09f, 8.239589161e-09f, 8.375398633e-09f, 8.511158952e-09f, 8.646869893e-09f,
-8.782531231e-09f, 8.918142740e-09f, 9.053704196e-09f, 9.189215373e-09f, 9.324676047e-09f, 9.460085993e-09f, 9.595444987e-09f, 9.730752804e-09f, 9.866009221e-09f, 1.000121401e-08f,
-1.013636695e-08f, 1.027146782e-08f, 1.040651640e-08f, 1.054151245e-08f, 1.067645576e-08f, 1.081134611e-08f, 1.094618327e-08f, 1.108096701e-08f, 1.121569712e-08f, 1.135037338e-08f,
-1.148499555e-08f, 1.161956342e-08f, 1.175407677e-08f, 1.188853537e-08f, 1.202293901e-08f, 1.215728746e-08f, 1.229158049e-08f, 1.242581789e-08f, 1.255999945e-08f, 1.269412492e-08f,
-1.282819410e-08f, 1.296220677e-08f, 1.309616270e-08f, 1.323006167e-08f, 1.336390347e-08f, 1.349768787e-08f, 1.363141465e-08f, 1.376508360e-08f, 1.389869449e-08f, 1.403224710e-08f,
-1.416574122e-08f, 1.429917662e-08f, 1.443255309e-08f, 1.456587041e-08f, 1.469912836e-08f, 1.483232672e-08f, 1.496546527e-08f, 1.509854380e-08f, 1.523156208e-08f, 1.536451991e-08f,
-1.549741705e-08f, 1.563025329e-08f, 1.576302843e-08f, 1.589574223e-08f, 1.602839448e-08f, 1.616098496e-08f, 1.629351347e-08f, 1.642597977e-08f, 1.655838367e-08f, 1.669072493e-08f,
-1.682300334e-08f, 1.695521869e-08f, 1.708737076e-08f, 1.721945933e-08f, 1.735148420e-08f, 1.748344514e-08f, 1.761534194e-08f, 1.774717439e-08f, 1.787894227e-08f, 1.801064536e-08f,
-1.814228345e-08f, 1.827385633e-08f, 1.840536378e-08f, 1.853680560e-08f, 1.866818156e-08f, 1.879949144e-08f, 1.893073505e-08f, 1.906191217e-08f, 1.919302257e-08f, 1.932406606e-08f,
-1.945504241e-08f, 1.958595141e-08f, 1.971679286e-08f, 1.984756654e-08f, 1.997827223e-08f, 2.010890973e-08f, 2.023947883e-08f, 2.036997931e-08f, 2.050041095e-08f, 2.063077356e-08f,
-2.076106692e-08f, 2.089129082e-08f, 2.102144504e-08f, 2.115152938e-08f, 2.128154363e-08f, 2.141148758e-08f, 2.154136101e-08f, 2.167116372e-08f, 2.180089550e-08f, 2.193055613e-08f,
-2.206014542e-08f, 2.218966314e-08f, 2.231910910e-08f, 2.244848308e-08f, 2.257778488e-08f, 2.270701428e-08f, 2.283617107e-08f, 2.296525506e-08f, 2.309426603e-08f, 2.322320378e-08f,
-2.335206809e-08f, 2.348085876e-08f, 2.360957559e-08f, 2.373821836e-08f, 2.386678687e-08f, 2.399528092e-08f, 2.412370029e-08f, 2.425204478e-08f, 2.438031418e-08f, 2.450850830e-08f,
-2.463662692e-08f, 2.476466983e-08f, 2.489263684e-08f, 2.502052774e-08f, 2.514834232e-08f, 2.527608038e-08f, 2.540374171e-08f, 2.553132611e-08f, 2.565883338e-08f, 2.578626331e-08f,
-2.591361569e-08f, 2.604089033e-08f, 2.616808703e-08f, 2.629520557e-08f, 2.642224575e-08f, 2.654920738e-08f, 2.667609025e-08f, 2.680289415e-08f, 2.692961889e-08f, 2.705626426e-08f,
-2.718283007e-08f, 2.730931610e-08f, 2.743572217e-08f, 2.756204806e-08f, 2.768829357e-08f, 2.781445851e-08f, 2.794054268e-08f, 2.806654587e-08f, 2.819246788e-08f, 2.831830852e-08f,
-2.844406758e-08f, 2.856974486e-08f, 2.869534017e-08f, 2.882085331e-08f, 2.894628407e-08f, 2.907163226e-08f, 2.919689768e-08f, 2.932208013e-08f, 2.944717941e-08f, 2.957219532e-08f,
-2.969712767e-08f, 2.982197626e-08f, 2.994674089e-08f, 3.007142136e-08f, 3.019601748e-08f, 3.032052904e-08f, 3.044495586e-08f, 3.056929774e-08f, 3.069355447e-08f, 3.081772587e-08f,
-3.094181174e-08f, 3.106581188e-08f, 3.118972609e-08f, 3.131355419e-08f, 3.143729597e-08f, 3.156095124e-08f, 3.168451981e-08f, 3.180800148e-08f, 3.193139605e-08f, 3.205470334e-08f,
-3.217792315e-08f, 3.230105529e-08f, 3.242409955e-08f, 3.254705576e-08f, 3.266992371e-08f, 3.279270321e-08f, 3.291539407e-08f, 3.303799611e-08f, 3.316050911e-08f, 3.328293290e-08f,
-3.340526728e-08f, 3.352751206e-08f, 3.364966705e-08f, 3.377173205e-08f, 3.389370688e-08f, 3.401559135e-08f, 3.413738526e-08f, 3.425908842e-08f, 3.438070065e-08f, 3.450222175e-08f,
-3.462365154e-08f, 3.474498982e-08f, 3.486623640e-08f, 3.498739110e-08f, 3.510845373e-08f, 3.522942409e-08f, 3.535030201e-08f, 3.547108728e-08f, 3.559177973e-08f, 3.571237916e-08f,
-3.583288539e-08f, 3.595329823e-08f, 3.607361749e-08f, 3.619384299e-08f, 3.631397454e-08f, 3.643401195e-08f, 3.655395503e-08f, 3.667380361e-08f, 3.679355748e-08f, 3.691321648e-08f,
-3.703278040e-08f, 3.715224908e-08f, 3.727162231e-08f, 3.739089992e-08f, 3.751008173e-08f, 3.762916754e-08f, 3.774815717e-08f, 3.786705044e-08f, 3.798584717e-08f, 3.810454717e-08f,
-3.822315026e-08f, 3.834165625e-08f, 3.846006497e-08f, 3.857837622e-08f, 3.869658983e-08f, 3.881470561e-08f, 3.893272339e-08f, 3.905064298e-08f, 3.916846419e-08f, 3.928618686e-08f,
-3.940381078e-08f, 3.952133580e-08f, 3.963876171e-08f, 3.975608836e-08f, 3.987331554e-08f, 3.999044309e-08f, 4.010747082e-08f, 4.022439855e-08f, 4.034122611e-08f, 4.045795331e-08f,
-4.057457998e-08f, 4.069110594e-08f, 4.080753100e-08f, 4.092385499e-08f, 4.104007774e-08f, 4.115619906e-08f, 4.127221877e-08f, 4.138813671e-08f, 4.150395268e-08f, 4.161966653e-08f,
-4.173527805e-08f, 4.185078709e-08f, 4.196619347e-08f, 4.208149700e-08f, 4.219669752e-08f, 4.231179484e-08f, 4.242678879e-08f, 4.254167921e-08f, 4.265646590e-08f, 4.277114870e-08f,
-4.288572743e-08f, 4.300020192e-08f, 4.311457200e-08f, 4.322883748e-08f, 4.334299820e-08f, 4.345705398e-08f, 4.357100466e-08f, 4.368485005e-08f, 4.379858998e-08f, 4.391222429e-08f,
-4.402575280e-08f, 4.413917533e-08f, 4.425249172e-08f, 4.436570179e-08f, 4.447880538e-08f, 4.459180231e-08f, 4.470469241e-08f, 4.481747551e-08f, 4.493015144e-08f, 4.504272003e-08f,
-4.515518111e-08f, 4.526753451e-08f, 4.537978006e-08f, 4.549191759e-08f, 4.560394693e-08f, 4.571586792e-08f, 4.582768038e-08f, 4.593938415e-08f, 4.605097906e-08f, 4.616246494e-08f,
-4.627384163e-08f, 4.638510894e-08f, 4.649626673e-08f, 4.660731482e-08f, 4.671825305e-08f, 4.682908124e-08f, 4.693979924e-08f, 4.705040687e-08f, 4.716090398e-08f, 4.727129039e-08f,
-4.738156594e-08f, 4.749173047e-08f, 4.760178380e-08f, 4.771172579e-08f, 4.782155625e-08f, 4.793127504e-08f, 4.804088197e-08f, 4.815037690e-08f, 4.825975965e-08f, 4.836903007e-08f,
-4.847818799e-08f, 4.858723325e-08f, 4.869616568e-08f, 4.880498513e-08f, 4.891369143e-08f, 4.902228442e-08f, 4.913076394e-08f, 4.923912983e-08f, 4.934738192e-08f, 4.945552006e-08f,
-4.956354409e-08f, 4.967145384e-08f, 4.977924916e-08f, 4.988692988e-08f, 4.999449585e-08f, 5.010194691e-08f, 5.020928289e-08f, 5.031650365e-08f, 5.042360901e-08f, 5.053059883e-08f,
-5.063747294e-08f, 5.074423119e-08f, 5.085087342e-08f, 5.095739947e-08f, 5.106380918e-08f, 5.117010241e-08f, 5.127627898e-08f, 5.138233875e-08f, 5.148828156e-08f, 5.159410726e-08f,
-5.169981568e-08f, 5.180540667e-08f, 5.191088008e-08f, 5.201623575e-08f, 5.212147354e-08f, 5.222659327e-08f, 5.233159481e-08f, 5.243647799e-08f, 5.254124266e-08f, 5.264588867e-08f,
-5.275041587e-08f, 5.285482409e-08f, 5.295911320e-08f, 5.306328304e-08f, 5.316733345e-08f, 5.327126429e-08f, 5.337507540e-08f, 5.347876663e-08f, 5.358233783e-08f, 5.368578885e-08f,
-5.378911954e-08f, 5.389232974e-08f, 5.399541931e-08f, 5.409838810e-08f, 5.420123596e-08f, 5.430396274e-08f, 5.440656829e-08f, 5.450905246e-08f, 5.461141510e-08f, 5.471365606e-08f,
-5.481577520e-08f, 5.491777237e-08f, 5.501964742e-08f, 5.512140020e-08f, 5.522303057e-08f, 5.532453838e-08f, 5.542592348e-08f, 5.552718572e-08f, 5.562832497e-08f, 5.572934107e-08f,
-5.583023388e-08f, 5.593100325e-08f, 5.603164905e-08f, 5.613217111e-08f, 5.623256930e-08f, 5.633284348e-08f, 5.643299350e-08f, 5.653301922e-08f, 5.663292049e-08f, 5.673269717e-08f,
-5.683234911e-08f, 5.693187619e-08f, 5.703127824e-08f, 5.713055513e-08f, 5.722970672e-08f, 5.732873287e-08f, 5.742763342e-08f, 5.752640826e-08f, 5.762505722e-08f, 5.772358018e-08f,
-5.782197699e-08f, 5.792024750e-08f, 5.801839159e-08f, 5.811640911e-08f, 5.821429992e-08f, 5.831206389e-08f, 5.840970086e-08f, 5.850721071e-08f, 5.860459330e-08f, 5.870184849e-08f,
-5.879897614e-08f, 5.889597611e-08f, 5.899284826e-08f, 5.908959247e-08f, 5.918620859e-08f, 5.928269648e-08f, 5.937905601e-08f, 5.947528704e-08f, 5.957138944e-08f, 5.966736307e-08f,
-5.976320780e-08f, 5.985892349e-08f, 5.995451000e-08f, 6.004996721e-08f, 6.014529497e-08f, 6.024049316e-08f, 6.033556164e-08f, 6.043050028e-08f, 6.052530893e-08f, 6.061998748e-08f,
-6.071453579e-08f, 6.080895372e-08f, 6.090324115e-08f, 6.099739794e-08f, 6.109142395e-08f, 6.118531907e-08f, 6.127908315e-08f, 6.137271607e-08f, 6.146621770e-08f, 6.155958790e-08f,
-6.165282655e-08f, 6.174593352e-08f, 6.183890867e-08f, 6.193175188e-08f, 6.202446301e-08f, 6.211704195e-08f, 6.220948856e-08f, 6.230180271e-08f, 6.239398428e-08f, 6.248603314e-08f,
-6.257794915e-08f, 6.266973220e-08f, 6.276138216e-08f, 6.285289890e-08f, 6.294428229e-08f, 6.303553221e-08f, 6.312664853e-08f, 6.321763112e-08f, 6.330847987e-08f, 6.339919464e-08f,
-6.348977532e-08f, 6.358022177e-08f, 6.367053388e-08f, 6.376071151e-08f, 6.385075456e-08f, 6.394066288e-08f, 6.403043636e-08f, 6.412007488e-08f, 6.420957831e-08f, 6.429894654e-08f,
-6.438817943e-08f, 6.447727687e-08f, 6.456623874e-08f, 6.465506492e-08f, 6.474375527e-08f, 6.483230969e-08f, 6.492072806e-08f, 6.500901025e-08f, 6.509715614e-08f, 6.518516562e-08f,
-6.527303855e-08f, 6.536077484e-08f, 6.544837435e-08f, 6.553583697e-08f, 6.562316258e-08f, 6.571035107e-08f, 6.579740230e-08f, 6.588431618e-08f, 6.597109257e-08f, 6.605773137e-08f,
-6.614423245e-08f, 6.623059570e-08f, 6.631682101e-08f, 6.640290826e-08f, 6.648885733e-08f, 6.657466810e-08f, 6.666034047e-08f, 6.674587432e-08f, 6.683126953e-08f, 6.691652599e-08f,
-6.700164359e-08f, 6.708662221e-08f, 6.717146173e-08f, 6.725616205e-08f, 6.734072306e-08f, 6.742514464e-08f, 6.750942667e-08f, 6.759356905e-08f, 6.767757167e-08f, 6.776143441e-08f,
-6.784515716e-08f, 6.792873981e-08f, 6.801218225e-08f, 6.809548438e-08f, 6.817864607e-08f, 6.826166723e-08f, 6.834454773e-08f, 6.842728748e-08f, 6.850988636e-08f, 6.859234427e-08f,
-6.867466109e-08f, 6.875683672e-08f, 6.883887105e-08f, 6.892076398e-08f, 6.900251538e-08f, 6.908412517e-08f, 6.916559323e-08f, 6.924691946e-08f, 6.932810374e-08f, 6.940914598e-08f,
-6.949004606e-08f, 6.957080389e-08f, 6.965141936e-08f, 6.973189236e-08f, 6.981222278e-08f, 6.989241053e-08f, 6.997245550e-08f, 7.005235759e-08f, 7.013211669e-08f, 7.021173270e-08f,
-7.029120552e-08f, 7.037053504e-08f, 7.044972117e-08f, 7.052876379e-08f, 7.060766281e-08f, 7.068641814e-08f, 7.076502965e-08f, 7.084349726e-08f, 7.092182087e-08f, 7.100000037e-08f,
-7.107803567e-08f, 7.115592666e-08f, 7.123367324e-08f, 7.131127533e-08f, 7.138873280e-08f, 7.146604558e-08f, 7.154321356e-08f, 7.162023664e-08f, 7.169711472e-08f, 7.177384771e-08f,
-7.185043551e-08f, 7.192687802e-08f, 7.200317515e-08f, 7.207932680e-08f, 7.215533287e-08f, 7.223119326e-08f, 7.230690789e-08f, 7.238247666e-08f, 7.245789947e-08f, 7.253317622e-08f,
-7.260830683e-08f, 7.268329120e-08f, 7.275812923e-08f, 7.283282083e-08f, 7.290736591e-08f, 7.298176438e-08f, 7.305601614e-08f, 7.313012109e-08f, 7.320407916e-08f, 7.327789024e-08f,
-7.335155424e-08f, 7.342507108e-08f, 7.349844065e-08f, 7.357166288e-08f, 7.364473767e-08f, 7.371766493e-08f, 7.379044457e-08f, 7.386307650e-08f, 7.393556063e-08f, 7.400789688e-08f,
-7.408008514e-08f, 7.415212535e-08f, 7.422401740e-08f, 7.429576120e-08f, 7.436735668e-08f, 7.443880375e-08f, 7.451010231e-08f, 7.458125228e-08f, 7.465225357e-08f, 7.472310610e-08f,
-7.479380978e-08f, 7.486436453e-08f, 7.493477026e-08f, 7.500502688e-08f, 7.507513432e-08f, 7.514509248e-08f, 7.521490128e-08f, 7.528456064e-08f, 7.535407047e-08f, 7.542343069e-08f,
-7.549264122e-08f, 7.556170198e-08f, 7.563061288e-08f, 7.569937384e-08f, 7.576798478e-08f, 7.583644561e-08f, 7.590475626e-08f, 7.597291664e-08f, 7.604092668e-08f, 7.610878628e-08f,
-7.617649538e-08f, 7.624405390e-08f, 7.631146174e-08f, 7.637871884e-08f, 7.644582512e-08f, 7.651278048e-08f, 7.657958487e-08f, 7.664623819e-08f, 7.671274038e-08f, 7.677909135e-08f,
-7.684529102e-08f, 7.691133932e-08f, 7.697723618e-08f, 7.704298151e-08f, 7.710857523e-08f, 7.717401729e-08f, 7.723930758e-08f, 7.730444606e-08f, 7.736943262e-08f, 7.743426721e-08f,
-7.749894975e-08f, 7.756348016e-08f, 7.762785837e-08f, 7.769208431e-08f, 7.775615789e-08f, 7.782007906e-08f, 7.788384774e-08f, 7.794746384e-08f, 7.801092731e-08f, 7.807423807e-08f,
-7.813739605e-08f, 7.820040117e-08f, 7.826325337e-08f, 7.832595258e-08f, 7.838849872e-08f, 7.845089172e-08f, 7.851313152e-08f, 7.857521804e-08f, 7.863715122e-08f, 7.869893099e-08f,
-7.876055727e-08f, 7.882203000e-08f, 7.888334911e-08f, 7.894451453e-08f, 7.900552620e-08f, 7.906638405e-08f, 7.912708801e-08f, 7.918763801e-08f, 7.924803399e-08f, 7.930827589e-08f,
-7.936836362e-08f, 7.942829714e-08f, 7.948807637e-08f, 7.954770125e-08f, 7.960717172e-08f, 7.966648771e-08f, 7.972564915e-08f, 7.978465599e-08f, 7.984350815e-08f, 7.990220558e-08f,
-7.996074821e-08f, 8.001913599e-08f, 8.007736884e-08f, 8.013544670e-08f, 8.019336952e-08f, 8.025113723e-08f, 8.030874977e-08f, 8.036620708e-08f, 8.042350910e-08f, 8.048065577e-08f,
-8.053764703e-08f, 8.059448281e-08f, 8.065116306e-08f, 8.070768773e-08f, 8.076405674e-08f, 8.082027005e-08f, 8.087632759e-08f, 8.093222930e-08f, 8.098797513e-08f, 8.104356503e-08f,
-8.109899892e-08f, 8.115427676e-08f, 8.120939850e-08f, 8.126436406e-08f, 8.131917340e-08f, 8.137382647e-08f, 8.142832319e-08f, 8.148266353e-08f, 8.153684743e-08f, 8.159087482e-08f,
-8.164474567e-08f, 8.169845990e-08f, 8.175201747e-08f, 8.180541833e-08f, 8.185866242e-08f, 8.191174970e-08f, 8.196468009e-08f, 8.201745356e-08f, 8.207007006e-08f, 8.212252952e-08f,
-8.217483191e-08f, 8.222697716e-08f, 8.227896523e-08f, 8.233079607e-08f, 8.238246962e-08f, 8.243398584e-08f, 8.248534467e-08f, 8.253654608e-08f, 8.258759000e-08f, 8.263847639e-08f,
-8.268920520e-08f, 8.273977638e-08f, 8.279018989e-08f, 8.284044568e-08f, 8.289054369e-08f, 8.294048389e-08f, 8.299026622e-08f, 8.303989064e-08f, 8.308935711e-08f, 8.313866557e-08f,
-8.318781598e-08f, 8.323680830e-08f, 8.328564248e-08f, 8.333431848e-08f, 8.338283624e-08f, 8.343119574e-08f, 8.347939692e-08f, 8.352743974e-08f, 8.357532415e-08f, 8.362305012e-08f,
-8.367061760e-08f, 8.371802655e-08f, 8.376527692e-08f, 8.381236868e-08f, 8.385930179e-08f, 8.390607619e-08f, 8.395269185e-08f, 8.399914874e-08f, 8.404544680e-08f, 8.409158600e-08f,
-8.413756630e-08f, 8.418338767e-08f, 8.422905005e-08f, 8.427455341e-08f, 8.431989772e-08f, 8.436508293e-08f, 8.441010901e-08f, 8.445497591e-08f, 8.449968361e-08f, 8.454423206e-08f,
-8.458862123e-08f, 8.463285108e-08f, 8.467692157e-08f, 8.472083267e-08f, 8.476458435e-08f, 8.480817656e-08f, 8.485160927e-08f, 8.489488244e-08f, 8.493799605e-08f, 8.498095006e-08f,
-8.502374443e-08f, 8.506637913e-08f, 8.510885413e-08f, 8.515116939e-08f, 8.519332488e-08f, 8.523532056e-08f, 8.527715642e-08f, 8.531883240e-08f, 8.536034849e-08f, 8.540170465e-08f,
-8.544290084e-08f, 8.548393705e-08f, 8.552481323e-08f, 8.556552936e-08f, 8.560608540e-08f, 8.564648134e-08f, 8.568671713e-08f, 8.572679275e-08f, 8.576670818e-08f, 8.580646337e-08f,
-8.584605831e-08f, 8.588549296e-08f, 8.592476730e-08f, 8.596388130e-08f, 8.600283493e-08f, 8.604162818e-08f, 8.608026100e-08f, 8.611873337e-08f, 8.615704527e-08f, 8.619519668e-08f,
-8.623318756e-08f, 8.627101789e-08f, 8.630868766e-08f, 8.634619682e-08f, 8.638354536e-08f, 8.642073326e-08f, 8.645776048e-08f, 8.649462702e-08f, 8.653133284e-08f, 8.656787792e-08f,
-8.660426224e-08f, 8.664048577e-08f, 8.667654850e-08f, 8.671245041e-08f, 8.674819147e-08f, 8.678377166e-08f, 8.681919095e-08f, 8.685444934e-08f, 8.688954680e-08f, 8.692448331e-08f,
-8.695925885e-08f, 8.699387340e-08f, 8.702832694e-08f, 8.706261946e-08f, 8.709675093e-08f, 8.713072134e-08f, 8.716453067e-08f, 8.719817889e-08f, 8.723166601e-08f, 8.726499199e-08f,
-8.729815682e-08f, 8.733116048e-08f, 8.736400296e-08f, 8.739668425e-08f, 8.742920432e-08f, 8.746156316e-08f, 8.749376076e-08f, 8.752579710e-08f, 8.755767217e-08f, 8.758938595e-08f,
-8.762093843e-08f, 8.765232959e-08f, 8.768355943e-08f, 8.771462793e-08f, 8.774553507e-08f, 8.777628085e-08f, 8.780686525e-08f, 8.783728826e-08f, 8.786754987e-08f, 8.789765007e-08f,
-8.792758885e-08f, 8.795736619e-08f, 8.798698209e-08f, 8.801643653e-08f, 8.804572951e-08f, 8.807486102e-08f, 8.810383104e-08f, 8.813263957e-08f, 8.816128661e-08f, 8.818977213e-08f,
-8.821809614e-08f, 8.824625862e-08f, 8.827425957e-08f, 8.830209898e-08f, 8.832977684e-08f, 8.835729315e-08f, 8.838464790e-08f, 8.841184109e-08f, 8.843887270e-08f, 8.846574274e-08f,
-8.849245120e-08f, 8.851899807e-08f, 8.854538335e-08f, 8.857160703e-08f, 8.859766911e-08f, 8.862356959e-08f, 8.864930847e-08f, 8.867488573e-08f, 8.870030138e-08f, 8.872555541e-08f,
-8.875064782e-08f, 8.877557862e-08f, 8.880034779e-08f, 8.882495534e-08f, 8.884940126e-08f, 8.887368556e-08f, 8.889780823e-08f, 8.892176927e-08f, 8.894556869e-08f, 8.896920648e-08f,
-8.899268265e-08f, 8.901599718e-08f, 8.903915010e-08f, 8.906214139e-08f, 8.908497106e-08f, 8.910763911e-08f, 8.913014554e-08f, 8.915249036e-08f, 8.917467357e-08f, 8.919669516e-08f,
-8.921855515e-08f, 8.924025354e-08f, 8.926179033e-08f, 8.928316553e-08f, 8.930437913e-08f, 8.932543116e-08f, 8.934632160e-08f, 8.936705047e-08f, 8.938761776e-08f, 8.940802350e-08f,
-8.942826768e-08f, 8.944835031e-08f, 8.946827139e-08f, 8.948803094e-08f, 8.950762896e-08f, 8.952706545e-08f, 8.954634043e-08f, 8.956545391e-08f, 8.958440589e-08f, 8.960319638e-08f,
-8.962182539e-08f, 8.964029293e-08f, 8.965859901e-08f, 8.967674364e-08f, 8.969472682e-08f, 8.971254858e-08f, 8.973020891e-08f, 8.974770784e-08f, 8.976504537e-08f, 8.978222151e-08f,
-8.979923628e-08f, 8.981608969e-08f, 8.983278175e-08f, 8.984931246e-08f, 8.986568186e-08f, 8.988188994e-08f, 8.989793673e-08f, 8.991382223e-08f, 8.992954646e-08f, 8.994510944e-08f,
-8.996051117e-08f, 8.997575168e-08f, 8.999083098e-08f, 9.000574908e-08f, 9.002050600e-08f, 9.003510176e-08f, 9.004953637e-08f, 9.006380986e-08f, 9.007792222e-08f, 9.009187349e-08f,
-9.010566368e-08f, 9.011929281e-08f, 9.013276089e-08f, 9.014606795e-08f, 9.015921400e-08f, 9.017219907e-08f, 9.018502316e-08f, 9.019768631e-08f, 9.021018852e-08f, 9.022252982e-08f,
-9.023471024e-08f, 9.024672978e-08f, 9.025858847e-08f, 9.027028634e-08f, 9.028182340e-08f, 9.029319968e-08f, 9.030441519e-08f, 9.031546996e-08f, 9.032636401e-08f, 9.033709737e-08f,
-9.034767005e-08f, 9.035808208e-08f, 9.036833349e-08f, 9.037842429e-08f, 9.038835452e-08f, 9.039812419e-08f, 9.040773333e-08f, 9.041718197e-08f, 9.042647013e-08f, 9.043559784e-08f,
-9.044456511e-08f, 9.045337199e-08f, 9.046201849e-08f, 9.047050464e-08f, 9.047883046e-08f, 9.048699600e-08f, 9.049500126e-08f, 9.050284628e-08f, 9.051053110e-08f, 9.051805572e-08f,
-9.052542019e-08f, 9.053262454e-08f, 9.053966878e-08f, 9.054655296e-08f, 9.055327710e-08f, 9.055984123e-08f, 9.056624538e-08f, 9.057248958e-08f, 9.057857387e-08f, 9.058449827e-08f,
-9.059026281e-08f, 9.059586752e-08f, 9.060131245e-08f, 9.060659761e-08f, 9.061172305e-08f, 9.061668879e-08f, 9.062149487e-08f, 9.062614132e-08f, 9.063062817e-08f, 9.063495546e-08f,
-9.063912322e-08f, 9.064313148e-08f, 9.064698029e-08f, 9.065066967e-08f, 9.065419966e-08f, 9.065757030e-08f, 9.066078162e-08f, 9.066383365e-08f, 9.066672644e-08f, 9.066946002e-08f,
-9.067203442e-08f, 9.067444969e-08f, 9.067670585e-08f, 9.067880296e-08f, 9.068074103e-08f, 9.068252013e-08f, 9.068414027e-08f, 9.068560150e-08f, 9.068690387e-08f, 9.068804740e-08f,
-9.068903213e-08f, 9.068985812e-08f, 9.069052539e-08f, 9.069103399e-08f, 9.069138396e-08f, 9.069157533e-08f, 9.069160816e-08f, 9.069148247e-08f, 9.069119832e-08f, 9.069075574e-08f,
-9.069015478e-08f, 9.068939547e-08f, 9.068847787e-08f, 9.068740201e-08f, 9.068616794e-08f, 9.068477569e-08f, 9.068322532e-08f, 9.068151687e-08f, 9.067965038e-08f, 9.067762590e-08f,
-9.067544347e-08f, 9.067310313e-08f, 9.067060494e-08f, 9.066794893e-08f, 9.066513516e-08f, 9.066216366e-08f, 9.065903449e-08f, 9.065574769e-08f, 9.065230331e-08f, 9.064870140e-08f,
-9.064494199e-08f, 9.064102515e-08f, 9.063695092e-08f, 9.063271935e-08f, 9.062833048e-08f, 9.062378436e-08f, 9.061908105e-08f, 9.061422059e-08f, 9.060920303e-08f, 9.060402842e-08f,
-9.059869682e-08f, 9.059320826e-08f, 9.058756281e-08f, 9.058176051e-08f, 9.057580142e-08f, 9.056968558e-08f, 9.056341305e-08f, 9.055698388e-08f, 9.055039812e-08f, 9.054365582e-08f,
-9.053675704e-08f, 9.052970183e-08f, 9.052249024e-08f, 9.051512233e-08f, 9.050759814e-08f, 9.049991774e-08f, 9.049208118e-08f, 9.048408851e-08f, 9.047593979e-08f, 9.046763507e-08f,
-9.045917440e-08f, 9.045055785e-08f, 9.044178547e-08f, 9.043285731e-08f, 9.042377343e-08f, 9.041453389e-08f, 9.040513875e-08f, 9.039558806e-08f, 9.038588187e-08f, 9.037602025e-08f,
-9.036600326e-08f, 9.035583095e-08f, 9.034550337e-08f, 9.033502060e-08f, 9.032438269e-08f, 9.031358969e-08f, 9.030264167e-08f, 9.029153869e-08f, 9.028028080e-08f, 9.026886807e-08f,
-9.025730056e-08f, 9.024557833e-08f, 9.023370143e-08f, 9.022166994e-08f, 9.020948390e-08f, 9.019714339e-08f, 9.018464846e-08f, 9.017199918e-08f, 9.015919561e-08f, 9.014623782e-08f,
-9.013312586e-08f, 9.011985979e-08f, 9.010643969e-08f, 9.009286562e-08f, 9.007913764e-08f, 9.006525581e-08f, 9.005122020e-08f, 9.003703087e-08f, 9.002268789e-08f, 9.000819133e-08f,
-8.999354125e-08f, 8.997873771e-08f, 8.996378078e-08f, 8.994867053e-08f, 8.993340703e-08f, 8.991799033e-08f, 8.990242052e-08f, 8.988669765e-08f, 8.987082179e-08f, 8.985479302e-08f,
-8.983861139e-08f, 8.982227698e-08f, 8.980578986e-08f, 8.978915009e-08f, 8.977235774e-08f, 8.975541289e-08f, 8.973831560e-08f, 8.972106595e-08f, 8.970366399e-08f, 8.968610981e-08f,
-8.966840347e-08f, 8.965054505e-08f, 8.963253461e-08f, 8.961437223e-08f, 8.959605798e-08f, 8.957759193e-08f, 8.955897415e-08f, 8.954020471e-08f, 8.952128369e-08f, 8.950221116e-08f,
-8.948298720e-08f, 8.946361187e-08f, 8.944408525e-08f, 8.942440741e-08f, 8.940457843e-08f, 8.938459839e-08f, 8.936446735e-08f, 8.934418539e-08f, 8.932375259e-08f, 8.930316901e-08f,
-8.928243475e-08f, 8.926154987e-08f, 8.924051445e-08f, 8.921932856e-08f, 8.919799229e-08f, 8.917650570e-08f, 8.915486888e-08f, 8.913308191e-08f, 8.911114485e-08f, 8.908905779e-08f,
-8.906682081e-08f, 8.904443398e-08f, 8.902189739e-08f, 8.899921110e-08f, 8.897637521e-08f, 8.895338978e-08f, 8.893025491e-08f, 8.890697066e-08f, 8.888353712e-08f, 8.885995437e-08f,
-8.883622249e-08f, 8.881234156e-08f, 8.878831166e-08f, 8.876413288e-08f, 8.873980528e-08f, 8.871532896e-08f, 8.869070400e-08f, 8.866593048e-08f, 8.864100847e-08f, 8.861593807e-08f,
-8.859071936e-08f, 8.856535242e-08f, 8.853983733e-08f, 8.851417418e-08f, 8.848836304e-08f, 8.846240401e-08f, 8.843629717e-08f, 8.841004261e-08f, 8.838364040e-08f, 8.835709063e-08f,
-8.833039339e-08f, 8.830354876e-08f, 8.827655684e-08f, 8.824941770e-08f, 8.822213142e-08f, 8.819469811e-08f, 8.816711784e-08f, 8.813939070e-08f, 8.811151678e-08f, 8.808349617e-08f,
-8.805532895e-08f, 8.802701520e-08f, 8.799855503e-08f, 8.796994852e-08f, 8.794119575e-08f, 8.791229681e-08f, 8.788325180e-08f, 8.785406080e-08f, 8.782472390e-08f, 8.779524119e-08f,
-8.776561277e-08f, 8.773583871e-08f, 8.770591912e-08f, 8.767585408e-08f, 8.764564369e-08f, 8.761528803e-08f, 8.758478719e-08f, 8.755414128e-08f, 8.752335037e-08f, 8.749241456e-08f,
-8.746133395e-08f, 8.743010862e-08f, 8.739873867e-08f, 8.736722420e-08f, 8.733556528e-08f, 8.730376203e-08f, 8.727181453e-08f, 8.723972287e-08f, 8.720748715e-08f, 8.717510747e-08f,
-8.714258391e-08f, 8.710991658e-08f, 8.707710557e-08f, 8.704415097e-08f, 8.701105288e-08f, 8.697781139e-08f, 8.694442661e-08f, 8.691089862e-08f, 8.687722752e-08f, 8.684341341e-08f,
-8.680945639e-08f, 8.677535655e-08f, 8.674111400e-08f, 8.670672882e-08f, 8.667220112e-08f, 8.663753099e-08f, 8.660271853e-08f, 8.656776384e-08f, 8.653266703e-08f, 8.649742818e-08f,
-8.646204740e-08f, 8.642652478e-08f, 8.639086043e-08f, 8.635505444e-08f, 8.631910692e-08f, 8.628301797e-08f, 8.624678768e-08f, 8.621041616e-08f, 8.617390350e-08f, 8.613724982e-08f,
-8.610045520e-08f, 8.606351976e-08f, 8.602644359e-08f, 8.598922679e-08f, 8.595186947e-08f, 8.591437173e-08f, 8.587673367e-08f, 8.583895540e-08f, 8.580103702e-08f, 8.576297863e-08f,
-8.572478033e-08f, 8.568644223e-08f, 8.564796443e-08f, 8.560934704e-08f, 8.557059017e-08f, 8.553169390e-08f, 8.549265836e-08f, 8.545348365e-08f, 8.541416986e-08f, 8.537471711e-08f,
-8.533512550e-08f, 8.529539514e-08f, 8.525552614e-08f, 8.521551860e-08f, 8.517537262e-08f, 8.513508831e-08f, 8.509466579e-08f, 8.505410516e-08f, 8.501340652e-08f, 8.497256998e-08f,
-8.493159565e-08f, 8.489048364e-08f, 8.484923406e-08f, 8.480784702e-08f, 8.476632262e-08f, 8.472466097e-08f, 8.468286219e-08f, 8.464092637e-08f, 8.459885364e-08f, 8.455664410e-08f,
-8.451429786e-08f, 8.447181503e-08f, 8.442919573e-08f, 8.438644005e-08f, 8.434354812e-08f, 8.430052004e-08f, 8.425735593e-08f, 8.421405589e-08f, 8.417062005e-08f, 8.412704850e-08f,
-8.408334136e-08f, 8.403949875e-08f, 8.399552078e-08f, 8.395140756e-08f, 8.390715920e-08f, 8.386277582e-08f, 8.381825752e-08f, 8.377360443e-08f, 8.372881665e-08f, 8.368389431e-08f,
-8.363883751e-08f, 8.359364637e-08f, 8.354832100e-08f, 8.350286153e-08f, 8.345726805e-08f, 8.341154070e-08f, 8.336567957e-08f, 8.331968480e-08f, 8.327355650e-08f, 8.322729477e-08f,
-8.318089974e-08f, 8.313437153e-08f, 8.308771025e-08f, 8.304091602e-08f, 8.299398895e-08f, 8.294692916e-08f, 8.289973677e-08f, 8.285241190e-08f, 8.280495467e-08f, 8.275736518e-08f,
-8.270964357e-08f, 8.266178995e-08f, 8.261380444e-08f, 8.256568715e-08f, 8.251743821e-08f, 8.246905774e-08f, 8.242054585e-08f, 8.237190267e-08f, 8.232312831e-08f, 8.227422290e-08f,
-8.222518655e-08f, 8.217601938e-08f, 8.212672153e-08f, 8.207729310e-08f, 8.202773421e-08f, 8.197804500e-08f, 8.192822558e-08f, 8.187827607e-08f, 8.182819659e-08f, 8.177798728e-08f,
-8.172764824e-08f, 8.167717960e-08f, 8.162658148e-08f, 8.157585401e-08f, 8.152499731e-08f, 8.147401151e-08f, 8.142289672e-08f, 8.137165306e-08f, 8.132028068e-08f, 8.126877968e-08f,
-8.121715019e-08f, 8.116539234e-08f, 8.111350625e-08f, 8.106149205e-08f, 8.100934985e-08f, 8.095707979e-08f, 8.090468200e-08f, 8.085215659e-08f, 8.079950369e-08f, 8.074672343e-08f,
-8.069381593e-08f, 8.064078133e-08f, 8.058761974e-08f, 8.053433130e-08f, 8.048091613e-08f, 8.042737435e-08f, 8.037370610e-08f, 8.031991151e-08f, 8.026599069e-08f, 8.021194378e-08f,
-8.015777091e-08f, 8.010347220e-08f, 8.004904779e-08f, 7.999449780e-08f, 7.993982236e-08f, 7.988502159e-08f, 7.983009564e-08f, 7.977504462e-08f, 7.971986867e-08f, 7.966456792e-08f,
-7.960914249e-08f, 7.955359252e-08f, 7.949791814e-08f, 7.944211947e-08f, 7.938619666e-08f, 7.933014982e-08f, 7.927397909e-08f, 7.921768461e-08f, 7.916126649e-08f, 7.910472488e-08f,
-7.904805991e-08f, 7.899127170e-08f, 7.893436040e-08f, 7.887732613e-08f, 7.882016902e-08f, 7.876288921e-08f, 7.870548682e-08f, 7.864796201e-08f, 7.859031488e-08f, 7.853254559e-08f,
-7.847465426e-08f, 7.841664103e-08f, 7.835850603e-08f, 7.830024940e-08f, 7.824187126e-08f, 7.818337176e-08f, 7.812475103e-08f, 7.806600920e-08f, 7.800714640e-08f, 7.794816278e-08f,
-7.788905847e-08f, 7.782983361e-08f, 7.777048832e-08f, 7.771102275e-08f, 7.765143703e-08f, 7.759173130e-08f, 7.753190570e-08f, 7.747196035e-08f, 7.741189541e-08f, 7.735171099e-08f,
-7.729140725e-08f, 7.723098432e-08f, 7.717044234e-08f, 7.710978144e-08f, 7.704900176e-08f, 7.698810344e-08f, 7.692708662e-08f, 7.686595144e-08f, 7.680469803e-08f, 7.674332653e-08f,
-7.668183709e-08f, 7.662022984e-08f, 7.655850492e-08f, 7.649666247e-08f, 7.643470263e-08f, 7.637262553e-08f, 7.631043133e-08f, 7.624812015e-08f, 7.618569215e-08f, 7.612314745e-08f,
-7.606048621e-08f, 7.599770855e-08f, 7.593481463e-08f, 7.587180458e-08f, 7.580867854e-08f, 7.574543666e-08f, 7.568207907e-08f, 7.561860593e-08f, 7.555501736e-08f, 7.549131352e-08f,
-7.542749454e-08f, 7.536356057e-08f, 7.529951174e-08f, 7.523534821e-08f, 7.517107012e-08f, 7.510667760e-08f, 7.504217080e-08f, 7.497754987e-08f, 7.491281495e-08f, 7.484796617e-08f,
-7.478300370e-08f, 7.471792766e-08f, 7.465273821e-08f, 7.458743548e-08f, 7.452201963e-08f, 7.445649080e-08f, 7.439084913e-08f, 7.432509476e-08f, 7.425922785e-08f, 7.419324853e-08f,
-7.412715696e-08f, 7.406095327e-08f, 7.399463762e-08f, 7.392821015e-08f, 7.386167101e-08f, 7.379502034e-08f, 7.372825829e-08f, 7.366138500e-08f, 7.359440063e-08f, 7.352730531e-08f,
-7.346009921e-08f, 7.339278245e-08f, 7.332535520e-08f, 7.325781759e-08f, 7.319016978e-08f, 7.312241192e-08f, 7.305454414e-08f, 7.298656661e-08f, 7.291847946e-08f, 7.285028285e-08f,
-7.278197693e-08f, 7.271356184e-08f, 7.264503773e-08f, 7.257640475e-08f, 7.250766306e-08f, 7.243881279e-08f, 7.236985411e-08f, 7.230078715e-08f, 7.223161208e-08f, 7.216232903e-08f,
-7.209293816e-08f, 7.202343963e-08f, 7.195383357e-08f, 7.188412014e-08f, 7.181429950e-08f, 7.174437179e-08f, 7.167433716e-08f, 7.160419576e-08f, 7.153394775e-08f, 7.146359328e-08f,
-7.139313250e-08f, 7.132256555e-08f, 7.125189260e-08f, 7.118111380e-08f, 7.111022929e-08f, 7.103923923e-08f, 7.096814377e-08f, 7.089694307e-08f, 7.082563727e-08f, 7.075422653e-08f,
-7.068271100e-08f, 7.061109085e-08f, 7.053936621e-08f, 7.046753724e-08f, 7.039560410e-08f, 7.032356694e-08f, 7.025142591e-08f, 7.017918118e-08f, 7.010683288e-08f, 7.003438118e-08f,
-6.996182624e-08f, 6.988916820e-08f, 6.981640722e-08f, 6.974354345e-08f, 6.967057706e-08f, 6.959750819e-08f, 6.952433701e-08f, 6.945106366e-08f, 6.937768830e-08f, 6.930421109e-08f,
-6.923063219e-08f, 6.915695174e-08f, 6.908316991e-08f, 6.900928686e-08f, 6.893530273e-08f, 6.886121769e-08f, 6.878703189e-08f, 6.871274549e-08f, 6.863835864e-08f, 6.856387151e-08f,
-6.848928425e-08f, 6.841459702e-08f, 6.833980997e-08f, 6.826492327e-08f, 6.818993707e-08f, 6.811485152e-08f, 6.803966679e-08f, 6.796438304e-08f, 6.788900042e-08f, 6.781351909e-08f,
-6.773793922e-08f, 6.766226095e-08f, 6.758648445e-08f, 6.751060988e-08f, 6.743463739e-08f, 6.735856715e-08f, 6.728239931e-08f, 6.720613404e-08f, 6.712977149e-08f, 6.705331182e-08f,
-6.697675520e-08f, 6.690010179e-08f, 6.682335173e-08f, 6.674650520e-08f, 6.666956236e-08f, 6.659252335e-08f, 6.651538836e-08f, 6.643815753e-08f, 6.636083103e-08f, 6.628340902e-08f,
-6.620589165e-08f, 6.612827910e-08f, 6.605057152e-08f, 6.597276907e-08f, 6.589487192e-08f, 6.581688023e-08f, 6.573879416e-08f, 6.566061386e-08f, 6.558233951e-08f, 6.550397127e-08f,
-6.542550929e-08f, 6.534695375e-08f, 6.526830480e-08f, 6.518956260e-08f, 6.511072732e-08f, 6.503179913e-08f, 6.495277818e-08f, 6.487366464e-08f, 6.479445867e-08f, 6.471516043e-08f,
-6.463577010e-08f, 6.455628783e-08f, 6.447671378e-08f, 6.439704813e-08f, 6.431729103e-08f, 6.423744264e-08f, 6.415750314e-08f, 6.407747269e-08f, 6.399735145e-08f, 6.391713959e-08f,
-6.383683727e-08f, 6.375644466e-08f, 6.367596192e-08f, 6.359538921e-08f, 6.351472671e-08f, 6.343397457e-08f, 6.335313297e-08f, 6.327220206e-08f, 6.319118202e-08f, 6.311007301e-08f,
-6.302887520e-08f, 6.294758874e-08f, 6.286621382e-08f, 6.278475059e-08f, 6.270319922e-08f, 6.262155988e-08f, 6.253983273e-08f, 6.245801794e-08f, 6.237611568e-08f, 6.229412612e-08f,
-6.221204941e-08f, 6.212988574e-08f, 6.204763526e-08f, 6.196529814e-08f, 6.188287456e-08f, 6.180036467e-08f, 6.171776865e-08f, 6.163508667e-08f, 6.155231888e-08f, 6.146946547e-08f,
-6.138652659e-08f, 6.130350242e-08f, 6.122039313e-08f, 6.113719887e-08f, 6.105391983e-08f, 6.097055617e-08f, 6.088710806e-08f, 6.080357567e-08f, 6.071995916e-08f, 6.063625871e-08f,
-6.055247449e-08f, 6.046860666e-08f, 6.038465539e-08f, 6.030062086e-08f, 6.021650322e-08f, 6.013230267e-08f, 6.004801935e-08f, 5.996365345e-08f, 5.987920513e-08f, 5.979467456e-08f,
-5.971006191e-08f, 5.962536736e-08f, 5.954059107e-08f, 5.945573322e-08f, 5.937079397e-08f, 5.928577349e-08f, 5.920067196e-08f, 5.911548955e-08f, 5.903022642e-08f, 5.894488276e-08f,
-5.885945872e-08f, 5.877395449e-08f, 5.868837022e-08f, 5.860270611e-08f, 5.851696230e-08f, 5.843113899e-08f, 5.834523633e-08f, 5.825925451e-08f, 5.817319369e-08f, 5.808705404e-08f,
-5.800083574e-08f, 5.791453896e-08f, 5.782816387e-08f, 5.774171065e-08f, 5.765517946e-08f, 5.756857048e-08f, 5.748188388e-08f, 5.739511984e-08f, 5.730827852e-08f, 5.722136011e-08f,
-5.713436477e-08f, 5.704729267e-08f, 5.696014400e-08f, 5.687291892e-08f, 5.678561760e-08f, 5.669824023e-08f, 5.661078697e-08f, 5.652325799e-08f, 5.643565348e-08f, 5.634797360e-08f,
-5.626021853e-08f, 5.617238845e-08f, 5.608448352e-08f, 5.599650392e-08f, 5.590844983e-08f, 5.582032141e-08f, 5.573211886e-08f, 5.564384233e-08f, 5.555549200e-08f, 5.546706805e-08f,
-5.537857065e-08f, 5.528999999e-08f, 5.520135622e-08f, 5.511263953e-08f, 5.502385010e-08f, 5.493498809e-08f, 5.484605369e-08f, 5.475704706e-08f, 5.466796839e-08f, 5.457881785e-08f,
-5.448959561e-08f, 5.440030186e-08f, 5.431093676e-08f, 5.422150049e-08f, 5.413199323e-08f, 5.404241516e-08f, 5.395276645e-08f, 5.386304727e-08f, 5.377325780e-08f, 5.368339823e-08f,
-5.359346872e-08f, 5.350346945e-08f, 5.341340060e-08f, 5.332326235e-08f, 5.323305486e-08f, 5.314277833e-08f, 5.305243292e-08f, 5.296201882e-08f, 5.287153619e-08f, 5.278098522e-08f,
-5.269036608e-08f, 5.259967895e-08f, 5.250892401e-08f, 5.241810144e-08f, 5.232721141e-08f, 5.223625410e-08f, 5.214522969e-08f, 5.205413835e-08f, 5.196298026e-08f, 5.187175561e-08f,
-5.178046457e-08f, 5.168910731e-08f, 5.159768401e-08f, 5.150619486e-08f, 5.141464003e-08f, 5.132301970e-08f, 5.123133405e-08f, 5.113958325e-08f, 5.104776749e-08f, 5.095588693e-08f,
-5.086394177e-08f, 5.077193218e-08f, 5.067985834e-08f, 5.058772042e-08f, 5.049551861e-08f, 5.040325309e-08f, 5.031092403e-08f, 5.021853161e-08f, 5.012607601e-08f, 5.003355742e-08f,
-4.994097600e-08f, 4.984833194e-08f, 4.975562542e-08f, 4.966285662e-08f, 4.957002572e-08f, 4.947713289e-08f, 4.938417832e-08f, 4.929116219e-08f, 4.919808467e-08f, 4.910494594e-08f,
-4.901174620e-08f, 4.891848560e-08f, 4.882516435e-08f, 4.873178260e-08f, 4.863834055e-08f, 4.854483838e-08f, 4.845127626e-08f, 4.835765438e-08f, 4.826397292e-08f, 4.817023205e-08f,
-4.807643195e-08f, 4.798257282e-08f, 4.788865482e-08f, 4.779467814e-08f, 4.770064295e-08f, 4.760654945e-08f, 4.751239781e-08f, 4.741818821e-08f, 4.732392082e-08f, 4.722959585e-08f,
-4.713521345e-08f, 4.704077382e-08f, 4.694627714e-08f, 4.685172358e-08f, 4.675711333e-08f, 4.666244656e-08f, 4.656772347e-08f, 4.647294423e-08f, 4.637810903e-08f, 4.628321803e-08f,
-4.618827143e-08f, 4.609326941e-08f, 4.599821215e-08f, 4.590309983e-08f, 4.580793263e-08f, 4.571271074e-08f, 4.561743433e-08f, 4.552210358e-08f, 4.542671869e-08f, 4.533127983e-08f,
-4.523578718e-08f, 4.514024092e-08f, 4.504464124e-08f, 4.494898832e-08f, 4.485328235e-08f, 4.475752349e-08f, 4.466171194e-08f, 4.456584788e-08f, 4.446993149e-08f, 4.437396295e-08f,
-4.427794244e-08f, 4.418187016e-08f, 4.408574627e-08f, 4.398957096e-08f, 4.389334442e-08f, 4.379706683e-08f, 4.370073837e-08f, 4.360435922e-08f, 4.350792956e-08f, 4.341144959e-08f,
-4.331491947e-08f, 4.321833940e-08f, 4.312170955e-08f, 4.302503012e-08f, 4.292830128e-08f, 4.283152321e-08f, 4.273469610e-08f, 4.263782013e-08f, 4.254089549e-08f, 4.244392236e-08f,
-4.234690091e-08f, 4.224983135e-08f, 4.215271384e-08f, 4.205554857e-08f, 4.195833572e-08f, 4.186107548e-08f, 4.176376804e-08f, 4.166641356e-08f, 4.156901225e-08f, 4.147156428e-08f,
-4.137406983e-08f, 4.127652909e-08f, 4.117894224e-08f, 4.108130947e-08f, 4.098363096e-08f, 4.088590689e-08f, 4.078813745e-08f, 4.069032282e-08f, 4.059246319e-08f, 4.049455873e-08f,
-4.039660963e-08f, 4.029861609e-08f, 4.020057827e-08f, 4.010249636e-08f, 4.000437055e-08f, 3.990620103e-08f, 3.980798797e-08f, 3.970973156e-08f, 3.961143198e-08f, 3.951308943e-08f,
-3.941470407e-08f, 3.931627610e-08f, 3.921780571e-08f, 3.911929307e-08f, 3.902073836e-08f, 3.892214178e-08f, 3.882350351e-08f, 3.872482373e-08f, 3.862610263e-08f, 3.852734038e-08f,
-3.842853719e-08f, 3.832969322e-08f, 3.823080866e-08f, 3.813188371e-08f, 3.803291854e-08f, 3.793391333e-08f, 3.783486828e-08f, 3.773578356e-08f, 3.763665936e-08f, 3.753749587e-08f,
-3.743829328e-08f, 3.733905175e-08f, 3.723977149e-08f, 3.714045266e-08f, 3.704109547e-08f, 3.694170009e-08f, 3.684226671e-08f, 3.674279552e-08f, 3.664328669e-08f, 3.654374041e-08f,
-3.644415687e-08f, 3.634453625e-08f, 3.624487874e-08f, 3.614518453e-08f, 3.604545379e-08f, 3.594568671e-08f, 3.584588347e-08f, 3.574604427e-08f, 3.564616928e-08f, 3.554625870e-08f,
-3.544631270e-08f, 3.534633147e-08f, 3.524631520e-08f, 3.514626407e-08f, 3.504617827e-08f, 3.494605798e-08f, 3.484590338e-08f, 3.474571466e-08f, 3.464549201e-08f, 3.454523562e-08f,
-3.444494565e-08f, 3.434462231e-08f, 3.424426578e-08f, 3.414387623e-08f, 3.404345387e-08f, 3.394299886e-08f, 3.384251141e-08f, 3.374199168e-08f, 3.364143987e-08f, 3.354085616e-08f,
-3.344024074e-08f, 3.333959380e-08f, 3.323891551e-08f, 3.313820606e-08f, 3.303746564e-08f, 3.293669444e-08f, 3.283589263e-08f, 3.273506041e-08f, 3.263419795e-08f, 3.253330545e-08f,
-3.243238309e-08f, 3.233143105e-08f, 3.223044952e-08f, 3.212943869e-08f, 3.202839873e-08f, 3.192732985e-08f, 3.182623221e-08f, 3.172510601e-08f, 3.162395142e-08f, 3.152276865e-08f,
-3.142155786e-08f, 3.132031925e-08f, 3.121905301e-08f, 3.111775931e-08f, 3.101643834e-08f, 3.091509029e-08f, 3.081371534e-08f, 3.071231368e-08f, 3.061088549e-08f, 3.050943096e-08f,
-3.040795027e-08f, 3.030644361e-08f, 3.020491117e-08f, 3.010335312e-08f, 3.000176966e-08f, 2.990016097e-08f, 2.979852723e-08f, 2.969686863e-08f, 2.959518536e-08f, 2.949347759e-08f,
-2.939174552e-08f, 2.928998933e-08f, 2.918820921e-08f, 2.908640533e-08f, 2.898457790e-08f, 2.888272708e-08f, 2.878085307e-08f, 2.867895605e-08f, 2.857703620e-08f, 2.847509372e-08f,
-2.837312878e-08f, 2.827114157e-08f, 2.816913228e-08f, 2.806710109e-08f, 2.796504819e-08f, 2.786297376e-08f, 2.776087799e-08f, 2.765876105e-08f, 2.755662315e-08f, 2.745446445e-08f,
-2.735228515e-08f, 2.725008543e-08f, 2.714786548e-08f, 2.704562548e-08f, 2.694336561e-08f, 2.684108607e-08f, 2.673878703e-08f, 2.663646868e-08f, 2.653413121e-08f, 2.643177480e-08f,
-2.632939963e-08f, 2.622700589e-08f, 2.612459377e-08f, 2.602216345e-08f, 2.591971511e-08f, 2.581724894e-08f, 2.571476512e-08f, 2.561226384e-08f, 2.550974529e-08f, 2.540720964e-08f,
-2.530465708e-08f, 2.520208781e-08f, 2.509950199e-08f, 2.499689982e-08f, 2.489428148e-08f, 2.479164716e-08f, 2.468899703e-08f, 2.458633129e-08f, 2.448365012e-08f, 2.438095370e-08f,
-2.427824222e-08f, 2.417551586e-08f, 2.407277481e-08f, 2.397001925e-08f, 2.386724936e-08f, 2.376446533e-08f, 2.366166735e-08f, 2.355885560e-08f, 2.345603025e-08f, 2.335319151e-08f,
-2.325033954e-08f, 2.314747454e-08f, 2.304459669e-08f, 2.294170617e-08f, 2.283880317e-08f, 2.273588786e-08f, 2.263296045e-08f, 2.253002110e-08f, 2.242707001e-08f, 2.232410735e-08f,
-2.222113332e-08f, 2.211814809e-08f, 2.201515185e-08f, 2.191214478e-08f, 2.180912707e-08f, 2.170609889e-08f, 2.160306045e-08f, 2.150001191e-08f, 2.139695346e-08f, 2.129388528e-08f,
-2.119080757e-08f, 2.108772049e-08f, 2.098462425e-08f, 2.088151901e-08f, 2.077840496e-08f, 2.067528229e-08f, 2.057215118e-08f, 2.046901182e-08f, 2.036586438e-08f, 2.026270904e-08f,
-2.015954601e-08f, 2.005637545e-08f, 1.995319754e-08f, 1.985001248e-08f, 1.974682045e-08f, 1.964362162e-08f, 1.954041619e-08f, 1.943720433e-08f, 1.933398623e-08f, 1.923076207e-08f,
-1.912753203e-08f, 1.902429630e-08f, 1.892105506e-08f, 1.881780849e-08f, 1.871455678e-08f, 1.861130010e-08f, 1.850803865e-08f, 1.840477260e-08f, 1.830150213e-08f, 1.819822743e-08f,
-1.809494868e-08f, 1.799166607e-08f, 1.788837977e-08f, 1.778508997e-08f, 1.768179684e-08f, 1.757850059e-08f, 1.747520137e-08f, 1.737189938e-08f, 1.726859481e-08f, 1.716528782e-08f,
-1.706197861e-08f, 1.695866735e-08f, 1.685535423e-08f, 1.675203943e-08f, 1.664872313e-08f, 1.654540551e-08f, 1.644208676e-08f, 1.633876705e-08f, 1.623544657e-08f, 1.613212551e-08f,
-1.602880403e-08f, 1.592548233e-08f, 1.582216058e-08f, 1.571883897e-08f, 1.561551768e-08f, 1.551219688e-08f, 1.540887677e-08f, 1.530555752e-08f, 1.520223931e-08f, 1.509892232e-08f,
-1.499560674e-08f, 1.489229275e-08f, 1.478898052e-08f, 1.468567024e-08f, 1.458236209e-08f, 1.447905626e-08f, 1.437575291e-08f, 1.427245223e-08f, 1.416915441e-08f, 1.406585961e-08f,
-1.396256804e-08f, 1.385927985e-08f, 1.375599524e-08f, 1.365271439e-08f, 1.354943747e-08f, 1.344616467e-08f, 1.334289616e-08f, 1.323963213e-08f, 1.313637276e-08f, 1.303311822e-08f,
-1.292986870e-08f, 1.282662437e-08f, 1.272338543e-08f, 1.262015203e-08f, 1.251692438e-08f, 1.241370264e-08f, 1.231048700e-08f, 1.220727763e-08f, 1.210407471e-08f, 1.200087844e-08f,
-1.189768897e-08f, 1.179450650e-08f, 1.169133120e-08f, 1.158816325e-08f, 1.148500284e-08f, 1.138185013e-08f, 1.127870532e-08f, 1.117556857e-08f, 1.107244007e-08f, 1.096931999e-08f,
-1.086620853e-08f, 1.076310584e-08f, 1.066001212e-08f, 1.055692754e-08f, 1.045385228e-08f, 1.035078652e-08f, 1.024773043e-08f, 1.014468420e-08f, 1.004164801e-08f, 9.938622024e-09f,
-9.835606431e-09f, 9.732601406e-09f, 9.629607127e-09f, 9.526623773e-09f, 9.423651522e-09f, 9.320690550e-09f, 9.217741037e-09f, 9.114803159e-09f, 9.011877095e-09f, 8.908963022e-09f,
-8.806061118e-09f, 8.703171560e-09f, 8.600294525e-09f, 8.497430191e-09f, 8.394578735e-09f, 8.291740334e-09f, 8.188915166e-09f, 8.086103407e-09f, 7.983305235e-09f, 7.880520826e-09f,
-7.777750357e-09f, 7.674994005e-09f, 7.572251946e-09f, 7.469524358e-09f, 7.366811416e-09f, 7.264113298e-09f, 7.161430179e-09f, 7.058762236e-09f, 6.956109645e-09f, 6.853472583e-09f,
-6.750851225e-09f, 6.648245747e-09f, 6.545656326e-09f, 6.443083137e-09f, 6.340526356e-09f, 6.237986159e-09f, 6.135462722e-09f, 6.032956219e-09f, 5.930466827e-09f, 5.827994721e-09f,
-5.725540076e-09f, 5.623103068e-09f, 5.520683871e-09f, 5.418282661e-09f, 5.315899613e-09f, 5.213534901e-09f, 5.111188701e-09f, 5.008861188e-09f, 4.906552536e-09f, 4.804262919e-09f,
-4.701992513e-09f, 4.599741491e-09f, 4.497510029e-09f, 4.395298300e-09f, 4.293106478e-09f, 4.190934739e-09f, 4.088783255e-09f, 3.986652201e-09f, 3.884541751e-09f, 3.782452078e-09f,
-3.680383357e-09f, 3.578335760e-09f, 3.476309462e-09f, 3.374304636e-09f, 3.272321455e-09f, 3.170360093e-09f, 3.068420722e-09f, 2.966503517e-09f, 2.864608649e-09f, 2.762736293e-09f,
-2.660886620e-09f, 2.559059804e-09f, 2.457256017e-09f, 2.355475433e-09f, 2.253718222e-09f, 2.151984559e-09f, 2.050274615e-09f, 1.948588563e-09f, 1.846926574e-09f, 1.745288821e-09f,
-1.643675476e-09f, 1.542086711e-09f, 1.440522697e-09f, 1.338983607e-09f, 1.237469611e-09f, 1.135980882e-09f, 1.034517591e-09f, 9.330799091e-10f, 8.316680079e-10f, 7.302820585e-10f,
-6.289222319e-10f, 5.275886993e-10f, 4.262816314e-10f, 3.250011991e-10f, 2.237475732e-10f, 1.225209243e-10f, 2.132142281e-11f, -7.985076068e-11f, -1.809954559e-10f, -2.821124925e-10f,
--3.832017004e-10f, -4.842629095e-10f, -5.852959498e-10f, -6.863006515e-10f, -7.872768447e-10f, -8.882243599e-10f, -9.891430273e-10f, -1.090032678e-09f, -1.190893141e-09f, -1.291724249e-09f,
--1.392525831e-09f, -1.493297720e-09f, -1.594039745e-09f, -1.694751738e-09f, -1.795433530e-09f, -1.896084953e-09f, -1.996705837e-09f, -2.097296015e-09f, -2.197855317e-09f, -2.298383576e-09f,
--2.398880623e-09f, -2.499346290e-09f, -2.599780409e-09f, -2.700182813e-09f, -2.800553333e-09f, -2.900891801e-09f, -3.001198051e-09f, -3.101471914e-09f, -3.201713224e-09f, -3.301921812e-09f,
--3.402097513e-09f, -3.502240157e-09f, -3.602349580e-09f, -3.702425613e-09f, -3.802468089e-09f, -3.902476843e-09f, -4.002451708e-09f, -4.102392517e-09f, -4.202299104e-09f, -4.302171302e-09f,
--4.402008946e-09f, -4.501811869e-09f, -4.601579905e-09f, -4.701312889e-09f, -4.801010654e-09f, -4.900673036e-09f, -5.000299869e-09f, -5.099890986e-09f, -5.199446224e-09f, -5.298965416e-09f,
--5.398448398e-09f, -5.497895005e-09f, -5.597305071e-09f, -5.696678433e-09f, -5.796014924e-09f, -5.895314382e-09f, -5.994576641e-09f, -6.093801537e-09f, -6.192988905e-09f, -6.292138583e-09f,
--6.391250405e-09f, -6.490324208e-09f, -6.589359828e-09f, -6.688357102e-09f, -6.787315865e-09f, -6.886235955e-09f, -6.985117207e-09f, -7.083959460e-09f, -7.182762549e-09f, -7.281526312e-09f,
--7.380250586e-09f, -7.478935209e-09f, -7.577580016e-09f, -7.676184847e-09f, -7.774749538e-09f, -7.873273927e-09f, -7.971757852e-09f, -8.070201152e-09f, -8.168603663e-09f, -8.266965224e-09f,
--8.365285674e-09f, -8.463564850e-09f, -8.561802592e-09f, -8.659998738e-09f, -8.758153126e-09f, -8.856265596e-09f, -8.954335987e-09f, -9.052364136e-09f, -9.150349885e-09f, -9.248293072e-09f,
--9.346193536e-09f, -9.444051117e-09f, -9.541865656e-09f, -9.639636990e-09f, -9.737364961e-09f, -9.835049409e-09f, -9.932690173e-09f, -1.003028709e-08f, -1.012784001e-08f, -1.022534877e-08f,
--1.032281320e-08f, -1.042023316e-08f, -1.051760847e-08f, -1.061493899e-08f, -1.071222455e-08f, -1.080946499e-08f, -1.090666015e-08f, -1.100380989e-08f, -1.110091403e-08f, -1.119797242e-08f,
--1.129498490e-08f, -1.139195132e-08f, -1.148887151e-08f, -1.158574532e-08f, -1.168257259e-08f, -1.177935316e-08f, -1.187608688e-08f, -1.197277358e-08f, -1.206941312e-08f, -1.216600533e-08f,
--1.226255006e-08f, -1.235904714e-08f, -1.245549644e-08f, -1.255189777e-08f, -1.264825100e-08f, -1.274455597e-08f, -1.284081251e-08f, -1.293702047e-08f, -1.303317970e-08f, -1.312929005e-08f,
--1.322535134e-08f, -1.332136344e-08f, -1.341732618e-08f, -1.351323941e-08f, -1.360910297e-08f, -1.370491671e-08f, -1.380068048e-08f, -1.389639412e-08f, -1.399205747e-08f, -1.408767038e-08f,
--1.418323270e-08f, -1.427874426e-08f, -1.437420493e-08f, -1.446961454e-08f, -1.456497294e-08f, -1.466027998e-08f, -1.475553550e-08f, -1.485073934e-08f, -1.494589137e-08f, -1.504099142e-08f,
--1.513603933e-08f, -1.523103497e-08f, -1.532597817e-08f, -1.542086878e-08f, -1.551570665e-08f, -1.561049163e-08f, -1.570522356e-08f, -1.579990229e-08f, -1.589452768e-08f, -1.598909956e-08f,
--1.608361779e-08f, -1.617808222e-08f, -1.627249269e-08f, -1.636684906e-08f, -1.646115116e-08f, -1.655539886e-08f, -1.664959200e-08f, -1.674373042e-08f, -1.683781399e-08f, -1.693184254e-08f,
--1.702581594e-08f, -1.711973402e-08f, -1.721359663e-08f, -1.730740364e-08f, -1.740115488e-08f, -1.749485022e-08f, -1.758848949e-08f, -1.768207255e-08f, -1.777559926e-08f, -1.786906945e-08f,
--1.796248299e-08f, -1.805583972e-08f, -1.814913950e-08f, -1.824238217e-08f, -1.833556759e-08f, -1.842869561e-08f, -1.852176609e-08f, -1.861477887e-08f, -1.870773380e-08f, -1.880063075e-08f,
--1.889346955e-08f, -1.898625007e-08f, -1.907897216e-08f, -1.917163567e-08f, -1.926424045e-08f, -1.935678635e-08f, -1.944927324e-08f, -1.954170096e-08f, -1.963406936e-08f, -1.972637831e-08f,
--1.981862764e-08f, -1.991081723e-08f, -2.000294692e-08f, -2.009501657e-08f, -2.018702603e-08f, -2.027897515e-08f, -2.037086380e-08f, -2.046269182e-08f, -2.055445907e-08f, -2.064616541e-08f,
--2.073781069e-08f, -2.082939477e-08f, -2.092091750e-08f, -2.101237874e-08f, -2.110377834e-08f, -2.119511617e-08f, -2.128639207e-08f, -2.137760590e-08f, -2.146875753e-08f, -2.155984680e-08f,
--2.165087358e-08f, -2.174183772e-08f, -2.183273907e-08f, -2.192357750e-08f, -2.201435286e-08f, -2.210506501e-08f, -2.219571381e-08f, -2.228629912e-08f, -2.237682079e-08f, -2.246727868e-08f,
--2.255767266e-08f, -2.264800257e-08f, -2.273826828e-08f, -2.282846965e-08f, -2.291860653e-08f, -2.300867879e-08f, -2.309868628e-08f, -2.318862886e-08f, -2.327850640e-08f, -2.336831875e-08f,
--2.345806577e-08f, -2.354774733e-08f, -2.363736328e-08f, -2.372691348e-08f, -2.381639780e-08f, -2.390581609e-08f, -2.399516821e-08f, -2.408445403e-08f, -2.417367341e-08f, -2.426282621e-08f,
--2.435191228e-08f, -2.444093150e-08f, -2.452988372e-08f, -2.461876881e-08f, -2.470758663e-08f, -2.479633703e-08f, -2.488501988e-08f, -2.497363505e-08f, -2.506218240e-08f, -2.515066179e-08f,
--2.523907308e-08f, -2.532741613e-08f, -2.541569082e-08f, -2.550389699e-08f, -2.559203453e-08f, -2.568010328e-08f, -2.576810312e-08f, -2.585603390e-08f, -2.594389550e-08f, -2.603168778e-08f,
--2.611941059e-08f, -2.620706382e-08f, -2.629464731e-08f, -2.638216094e-08f, -2.646960457e-08f, -2.655697807e-08f, -2.664428130e-08f, -2.673151413e-08f, -2.681867642e-08f, -2.690576804e-08f,
--2.699278886e-08f, -2.707973874e-08f, -2.716661754e-08f, -2.725342515e-08f, -2.734016141e-08f, -2.742682621e-08f, -2.751341940e-08f, -2.759994085e-08f, -2.768639044e-08f, -2.777276802e-08f,
--2.785907347e-08f, -2.794530666e-08f, -2.803146745e-08f, -2.811755570e-08f, -2.820357130e-08f, -2.828951411e-08f, -2.837538399e-08f, -2.846118082e-08f, -2.854690446e-08f, -2.863255479e-08f,
--2.871813167e-08f, -2.880363497e-08f, -2.888906457e-08f, -2.897442033e-08f, -2.905970212e-08f, -2.914490981e-08f, -2.923004328e-08f, -2.931510239e-08f, -2.940008702e-08f, -2.948499703e-08f,
--2.956983230e-08f, -2.965459270e-08f, -2.973927810e-08f, -2.982388836e-08f, -2.990842337e-08f, -2.999288300e-08f, -3.007726711e-08f, -3.016157558e-08f, -3.024580829e-08f, -3.032996509e-08f,
--3.041404588e-08f, -3.049805051e-08f, -3.058197887e-08f, -3.066583082e-08f, -3.074960625e-08f, -3.083330501e-08f, -3.091692699e-08f, -3.100047207e-08f, -3.108394011e-08f, -3.116733099e-08f,
--3.125064458e-08f, -3.133388076e-08f, -3.141703940e-08f, -3.150012039e-08f, -3.158312358e-08f, -3.166604887e-08f, -3.174889611e-08f, -3.183166520e-08f, -3.191435601e-08f, -3.199696840e-08f,
--3.207950227e-08f, -3.216195747e-08f, -3.224433390e-08f, -3.232663143e-08f, -3.240884993e-08f, -3.249098928e-08f, -3.257304936e-08f, -3.265503005e-08f, -3.273693121e-08f, -3.281875274e-08f,
--3.290049451e-08f, -3.298215640e-08f, -3.306373828e-08f, -3.314524004e-08f, -3.322666155e-08f, -3.330800268e-08f, -3.338926333e-08f, -3.347044337e-08f, -3.355154268e-08f, -3.363256113e-08f,
--3.371349862e-08f, -3.379435501e-08f, -3.387513018e-08f, -3.395582403e-08f, -3.403643642e-08f, -3.411696724e-08f, -3.419741637e-08f, -3.427778369e-08f, -3.435806909e-08f, -3.443827243e-08f,
--3.451839361e-08f, -3.459843250e-08f, -3.467838899e-08f, -3.475826296e-08f, -3.483805429e-08f, -3.491776286e-08f, -3.499738856e-08f, -3.507693127e-08f, -3.515639087e-08f, -3.523576725e-08f,
--3.531506028e-08f, -3.539426985e-08f, -3.547339585e-08f, -3.555243815e-08f, -3.563139665e-08f, -3.571027123e-08f, -3.578906176e-08f, -3.586776814e-08f, -3.594639025e-08f, -3.602492797e-08f,
--3.610338120e-08f, -3.618174980e-08f, -3.626003368e-08f, -3.633823271e-08f, -3.641634679e-08f, -3.649437579e-08f, -3.657231960e-08f, -3.665017811e-08f, -3.672795121e-08f, -3.680563878e-08f,
--3.688324071e-08f, -3.696075689e-08f, -3.703818720e-08f, -3.711553153e-08f, -3.719278976e-08f, -3.726996180e-08f, -3.734704751e-08f, -3.742404680e-08f, -3.750095955e-08f, -3.757778565e-08f,
--3.765452498e-08f, -3.773117744e-08f, -3.780774292e-08f, -3.788422130e-08f, -3.796061247e-08f, -3.803691633e-08f, -3.811313276e-08f, -3.818926165e-08f, -3.826530289e-08f, -3.834125637e-08f,
--3.841712199e-08f, -3.849289964e-08f, -3.856858920e-08f, -3.864419056e-08f, -3.871970362e-08f, -3.879512827e-08f, -3.887046440e-08f, -3.894571190e-08f, -3.902087067e-08f, -3.909594059e-08f,
--3.917092155e-08f, -3.924581346e-08f, -3.932061621e-08f, -3.939532968e-08f, -3.946995376e-08f, -3.954448836e-08f, -3.961893337e-08f, -3.969328868e-08f, -3.976755417e-08f, -3.984172976e-08f,
--3.991581533e-08f, -3.998981077e-08f, -4.006371599e-08f, -4.013753087e-08f, -4.021125531e-08f, -4.028488920e-08f, -4.035843245e-08f, -4.043188494e-08f, -4.050524657e-08f, -4.057851724e-08f,
--4.065169684e-08f, -4.072478528e-08f, -4.079778244e-08f, -4.087068822e-08f, -4.094350253e-08f, -4.101622525e-08f, -4.108885628e-08f, -4.116139552e-08f, -4.123384288e-08f, -4.130619824e-08f,
--4.137846151e-08f, -4.145063257e-08f, -4.152271134e-08f, -4.159469771e-08f, -4.166659158e-08f, -4.173839285e-08f, -4.181010141e-08f, -4.188171717e-08f, -4.195324002e-08f, -4.202466987e-08f,
--4.209600661e-08f, -4.216725015e-08f, -4.223840038e-08f, -4.230945721e-08f, -4.238042053e-08f, -4.245129025e-08f, -4.252206627e-08f, -4.259274849e-08f, -4.266333681e-08f, -4.273383113e-08f,
--4.280423135e-08f, -4.287453739e-08f, -4.294474912e-08f, -4.301486647e-08f, -4.308488934e-08f, -4.315481762e-08f, -4.322465121e-08f, -4.329439003e-08f, -4.336403398e-08f, -4.343358295e-08f,
--4.350303686e-08f, -4.357239560e-08f, -4.364165908e-08f, -4.371082721e-08f, -4.377989989e-08f, -4.384887702e-08f, -4.391775851e-08f, -4.398654426e-08f, -4.405523419e-08f, -4.412382819e-08f,
--4.419232617e-08f, -4.426072803e-08f, -4.432903369e-08f, -4.439724304e-08f, -4.446535601e-08f, -4.453337248e-08f, -4.460129237e-08f, -4.466911559e-08f, -4.473684204e-08f, -4.480447163e-08f,
--4.487200426e-08f, -4.493943986e-08f, -4.500677831e-08f, -4.507401954e-08f, -4.514116345e-08f, -4.520820995e-08f, -4.527515895e-08f, -4.534201035e-08f, -4.540876407e-08f, -4.547542001e-08f,
--4.554197809e-08f, -4.560843822e-08f, -4.567480030e-08f, -4.574106424e-08f, -4.580722996e-08f, -4.587329736e-08f, -4.593926636e-08f, -4.600513687e-08f, -4.607090880e-08f, -4.613658206e-08f,
--4.620215656e-08f, -4.626763221e-08f, -4.633300893e-08f, -4.639828662e-08f, -4.646346521e-08f, -4.652854460e-08f, -4.659352470e-08f, -4.665840543e-08f, -4.672318671e-08f, -4.678786844e-08f,
--4.685245053e-08f, -4.691693291e-08f, -4.698131549e-08f, -4.704559817e-08f, -4.710978088e-08f, -4.717386353e-08f, -4.723784603e-08f, -4.730172830e-08f, -4.736551026e-08f, -4.742919181e-08f,
--4.749277288e-08f, -4.755625338e-08f, -4.761963323e-08f, -4.768291234e-08f, -4.774609063e-08f, -4.780916801e-08f, -4.787214441e-08f, -4.793501974e-08f, -4.799779391e-08f, -4.806046685e-08f,
--4.812303847e-08f, -4.818550868e-08f, -4.824787742e-08f, -4.831014459e-08f, -4.837231011e-08f, -4.843437391e-08f, -4.849633590e-08f, -4.855819600e-08f, -4.861995412e-08f, -4.868161020e-08f,
--4.874316415e-08f, -4.880461588e-08f, -4.886596532e-08f, -4.892721239e-08f, -4.898835700e-08f, -4.904939909e-08f, -4.911033857e-08f, -4.917117535e-08f, -4.923190937e-08f, -4.929254055e-08f,
--4.935306880e-08f, -4.941349404e-08f, -4.947381621e-08f, -4.953403521e-08f, -4.959415098e-08f, -4.965416344e-08f, -4.971407250e-08f, -4.977387810e-08f, -4.983358016e-08f, -4.989317859e-08f,
--4.995267332e-08f, -5.001206428e-08f, -5.007135139e-08f, -5.013053458e-08f, -5.018961376e-08f, -5.024858887e-08f, -5.030745983e-08f, -5.036622656e-08f, -5.042488899e-08f, -5.048344704e-08f,
--5.054190065e-08f, -5.060024973e-08f, -5.065849421e-08f, -5.071663402e-08f, -5.077466909e-08f, -5.083259934e-08f, -5.089042469e-08f, -5.094814509e-08f, -5.100576044e-08f, -5.106327069e-08f,
--5.112067575e-08f, -5.117797556e-08f, -5.123517005e-08f, -5.129225913e-08f, -5.134924275e-08f, -5.140612083e-08f, -5.146289330e-08f, -5.151956009e-08f, -5.157612112e-08f, -5.163257633e-08f,
--5.168892565e-08f, -5.174516900e-08f, -5.180130632e-08f, -5.185733754e-08f, -5.191326259e-08f, -5.196908140e-08f, -5.202479389e-08f, -5.208040001e-08f, -5.213589968e-08f, -5.219129284e-08f,
--5.224657941e-08f, -5.230175933e-08f, -5.235683253e-08f, -5.241179894e-08f, -5.246665850e-08f, -5.252141114e-08f, -5.257605679e-08f, -5.263059538e-08f, -5.268502685e-08f, -5.273935114e-08f,
--5.279356817e-08f, -5.284767788e-08f, -5.290168021e-08f, -5.295557508e-08f, -5.300936244e-08f, -5.306304222e-08f, -5.311661436e-08f, -5.317007878e-08f, -5.322343542e-08f, -5.327668423e-08f,
--5.332982514e-08f, -5.338285808e-08f, -5.343578298e-08f, -5.348859980e-08f, -5.354130845e-08f, -5.359390889e-08f, -5.364640104e-08f, -5.369878485e-08f, -5.375106025e-08f, -5.380322719e-08f,
--5.385528558e-08f, -5.390723539e-08f, -5.395907654e-08f, -5.401080898e-08f, -5.406243264e-08f, -5.411394746e-08f, -5.416535338e-08f, -5.421665034e-08f, -5.426783828e-08f, -5.431891715e-08f,
--5.436988687e-08f, -5.442074740e-08f, -5.447149866e-08f, -5.452214061e-08f, -5.457267319e-08f, -5.462309632e-08f, -5.467340997e-08f, -5.472361406e-08f, -5.477370854e-08f, -5.482369335e-08f,
--5.487356844e-08f, -5.492333374e-08f, -5.497298921e-08f, -5.502253477e-08f, -5.507197038e-08f, -5.512129598e-08f, -5.517051151e-08f, -5.521961692e-08f, -5.526861214e-08f, -5.531749713e-08f,
--5.536627183e-08f, -5.541493618e-08f, -5.546349013e-08f, -5.551193362e-08f, -5.556026659e-08f, -5.560848901e-08f, -5.565660080e-08f, -5.570460191e-08f, -5.575249230e-08f, -5.580027190e-08f,
--5.584794066e-08f, -5.589549854e-08f, -5.594294547e-08f, -5.599028141e-08f, -5.603750630e-08f, -5.608462008e-08f, -5.613162271e-08f, -5.617851414e-08f, -5.622529431e-08f, -5.627196317e-08f,
--5.631852068e-08f, -5.636496676e-08f, -5.641130139e-08f, -5.645752450e-08f, -5.650363605e-08f, -5.654963599e-08f, -5.659552426e-08f, -5.664130081e-08f, -5.668696561e-08f, -5.673251858e-08f,
--5.677795970e-08f, -5.682328890e-08f, -5.686850614e-08f, -5.691361137e-08f, -5.695860455e-08f, -5.700348561e-08f, -5.704825452e-08f, -5.709291123e-08f, -5.713745569e-08f, -5.718188785e-08f,
--5.722620767e-08f, -5.727041510e-08f, -5.731451008e-08f, -5.735849259e-08f, -5.740236256e-08f, -5.744611995e-08f, -5.748976472e-08f, -5.753329682e-08f, -5.757671620e-08f, -5.762002283e-08f,
--5.766321665e-08f, -5.770629762e-08f, -5.774926569e-08f, -5.779212083e-08f, -5.783486298e-08f, -5.787749211e-08f, -5.792000816e-08f, -5.796241110e-08f, -5.800470088e-08f, -5.804687746e-08f,
--5.808894079e-08f, -5.813089084e-08f, -5.817272756e-08f, -5.821445090e-08f, -5.825606083e-08f, -5.829755730e-08f, -5.833894028e-08f, -5.838020972e-08f, -5.842136557e-08f, -5.846240781e-08f,
--5.850333638e-08f, -5.854415125e-08f, -5.858485237e-08f, -5.862543971e-08f, -5.866591323e-08f, -5.870627288e-08f, -5.874651863e-08f, -5.878665044e-08f, -5.882666826e-08f, -5.886657207e-08f,
--5.890636181e-08f, -5.894603746e-08f, -5.898559897e-08f, -5.902504630e-08f, -5.906437943e-08f, -5.910359830e-08f, -5.914270288e-08f, -5.918169314e-08f, -5.922056904e-08f, -5.925933054e-08f,
--5.929797760e-08f, -5.933651020e-08f, -5.937492828e-08f, -5.941323182e-08f, -5.945142078e-08f, -5.948949513e-08f, -5.952745482e-08f, -5.956529983e-08f, -5.960303012e-08f, -5.964064565e-08f,
--5.967814639e-08f, -5.971553231e-08f, -5.975280337e-08f, -5.978995954e-08f, -5.982700078e-08f, -5.986392706e-08f, -5.990073835e-08f, -5.993743462e-08f, -5.997401582e-08f, -6.001048194e-08f,
--6.004683293e-08f, -6.008306877e-08f, -6.011918942e-08f, -6.015519485e-08f, -6.019108503e-08f, -6.022685992e-08f, -6.026251951e-08f, -6.029806375e-08f, -6.033349261e-08f, -6.036880607e-08f,
--6.040400410e-08f, -6.043908666e-08f, -6.047405372e-08f, -6.050890526e-08f, -6.054364125e-08f, -6.057826165e-08f, -6.061276644e-08f, -6.064715559e-08f, -6.068142907e-08f, -6.071558685e-08f,
--6.074962890e-08f, -6.078355520e-08f, -6.081736572e-08f, -6.085106043e-08f, -6.088463930e-08f, -6.091810231e-08f, -6.095144943e-08f, -6.098468063e-08f, -6.101779588e-08f, -6.105079517e-08f,
--6.108367846e-08f, -6.111644573e-08f, -6.114909695e-08f, -6.118163210e-08f, -6.121405115e-08f, -6.124635408e-08f, -6.127854086e-08f, -6.131061146e-08f, -6.134256587e-08f, -6.137440407e-08f,
--6.140612601e-08f, -6.143773169e-08f, -6.146922108e-08f, -6.150059415e-08f, -6.153185088e-08f, -6.156299125e-08f, -6.159401524e-08f, -6.162492283e-08f, -6.165571398e-08f, -6.168638869e-08f,
--6.171694692e-08f, -6.174738866e-08f, -6.177771389e-08f, -6.180792258e-08f, -6.183801471e-08f, -6.186799027e-08f, -6.189784922e-08f, -6.192759156e-08f, -6.195721726e-08f, -6.198672631e-08f,
--6.201611867e-08f, -6.204539434e-08f, -6.207455329e-08f, -6.210359550e-08f, -6.213252096e-08f, -6.216132965e-08f, -6.219002155e-08f, -6.221859663e-08f, -6.224705489e-08f, -6.227539630e-08f,
--6.230362085e-08f, -6.233172852e-08f, -6.235971930e-08f, -6.238759316e-08f, -6.241535008e-08f, -6.244299006e-08f, -6.247051308e-08f, -6.249791911e-08f, -6.252520815e-08f, -6.255238018e-08f,
--6.257943518e-08f, -6.260637314e-08f, -6.263319405e-08f, -6.265989788e-08f, -6.268648462e-08f, -6.271295427e-08f, -6.273930679e-08f, -6.276554219e-08f, -6.279166045e-08f, -6.281766155e-08f,
--6.284354548e-08f, -6.286931223e-08f, -6.289496178e-08f, -6.292049413e-08f, -6.294590925e-08f, -6.297120714e-08f, -6.299638779e-08f, -6.302145117e-08f, -6.304639729e-08f, -6.307122613e-08f,
--6.309593768e-08f, -6.312053192e-08f, -6.314500886e-08f, -6.316936847e-08f, -6.319361074e-08f, -6.321773567e-08f, -6.324174325e-08f, -6.326563346e-08f, -6.328940629e-08f, -6.331306175e-08f,
--6.333659981e-08f, -6.336002047e-08f, -6.338332373e-08f, -6.340650956e-08f, -6.342957797e-08f, -6.345252894e-08f, -6.347536247e-08f, -6.349807855e-08f, -6.352067718e-08f, -6.354315833e-08f,
--6.356552202e-08f, -6.358776823e-08f, -6.360989695e-08f, -6.363190818e-08f, -6.365380192e-08f, -6.367557815e-08f, -6.369723687e-08f, -6.371877807e-08f, -6.374020175e-08f, -6.376150791e-08f,
--6.378269654e-08f, -6.380376763e-08f, -6.382472119e-08f, -6.384555719e-08f, -6.386627565e-08f, -6.388687656e-08f, -6.390735992e-08f, -6.392772571e-08f, -6.394797394e-08f, -6.396810460e-08f,
--6.398811770e-08f, -6.400801323e-08f, -6.402779118e-08f, -6.404745155e-08f, -6.406699435e-08f, -6.408641957e-08f, -6.410572721e-08f, -6.412491726e-08f, -6.414398973e-08f, -6.416294462e-08f,
--6.418178192e-08f, -6.420050164e-08f, -6.421910376e-08f, -6.423758831e-08f, -6.425595526e-08f, -6.427420463e-08f, -6.429233641e-08f, -6.431035061e-08f, -6.432824722e-08f, -6.434602625e-08f,
--6.436368770e-08f, -6.438123157e-08f, -6.439865786e-08f, -6.441596658e-08f, -6.443315771e-08f, -6.445023128e-08f, -6.446718728e-08f, -6.448402571e-08f, -6.450074658e-08f, -6.451734988e-08f,
--6.453383563e-08f, -6.455020382e-08f, -6.456645447e-08f, -6.458258757e-08f, -6.459860312e-08f, -6.461450114e-08f, -6.463028163e-08f, -6.464594459e-08f, -6.466149003e-08f, -6.467691794e-08f,
--6.469222835e-08f, -6.470742125e-08f, -6.472249665e-08f, -6.473745455e-08f, -6.475229497e-08f, -6.476701790e-08f, -6.478162336e-08f, -6.479611135e-08f, -6.481048188e-08f, -6.482473496e-08f,
--6.483887059e-08f, -6.485288878e-08f, -6.486678954e-08f, -6.488057287e-08f, -6.489423879e-08f, -6.490778731e-08f, -6.492121843e-08f, -6.493453216e-08f, -6.494772851e-08f, -6.496080750e-08f,
--6.497376912e-08f, -6.498661339e-08f, -6.499934032e-08f, -6.501194992e-08f, -6.502444220e-08f, -6.503681717e-08f, -6.504907485e-08f, -6.506121523e-08f, -6.507323834e-08f, -6.508514418e-08f,
--6.509693277e-08f, -6.510860412e-08f, -6.512015824e-08f, -6.513159514e-08f, -6.514291484e-08f, -6.515411734e-08f, -6.516520267e-08f, -6.517617083e-08f, -6.518702183e-08f, -6.519775570e-08f,
--6.520837244e-08f, -6.521887206e-08f, -6.522925459e-08f, -6.523952003e-08f, -6.524966841e-08f, -6.525969972e-08f, -6.526961400e-08f, -6.527941126e-08f, -6.528909150e-08f, -6.529865475e-08f,
--6.530810102e-08f, -6.531743032e-08f, -6.532664268e-08f, -6.533573811e-08f, -6.534471663e-08f, -6.535357825e-08f, -6.536232298e-08f, -6.537095085e-08f, -6.537946188e-08f, -6.538785608e-08f,
--6.539613347e-08f, -6.540429406e-08f, -6.541233788e-08f, -6.542026494e-08f, -6.542807526e-08f, -6.543576886e-08f, -6.544334577e-08f, -6.545080599e-08f, -6.545814954e-08f, -6.546537646e-08f,
--6.547248675e-08f, -6.547948044e-08f, -6.548635754e-08f, -6.549311808e-08f, -6.549976208e-08f, -6.550628956e-08f, -6.551270053e-08f, -6.551899503e-08f, -6.552517307e-08f, -6.553123467e-08f,
--6.553717985e-08f, -6.554300864e-08f, -6.554872106e-08f, -6.555431713e-08f, -6.555979687e-08f, -6.556516031e-08f, -6.557040747e-08f, -6.557553837e-08f, -6.558055304e-08f, -6.558545149e-08f,
--6.559023376e-08f, -6.559489986e-08f, -6.559944982e-08f, -6.560388367e-08f, -6.560820142e-08f, -6.561240311e-08f, -6.561648876e-08f, -6.562045839e-08f, -6.562431204e-08f, -6.562804971e-08f,
--6.563167145e-08f, -6.563517727e-08f, -6.563856720e-08f, -6.564184127e-08f, -6.564499951e-08f, -6.564804194e-08f, -6.565096858e-08f, -6.565377947e-08f, -6.565647464e-08f, -6.565905410e-08f,
--6.566151789e-08f, -6.566386604e-08f, -6.566609857e-08f, -6.566821551e-08f, -6.567021689e-08f, -6.567210274e-08f, -6.567387309e-08f, -6.567552796e-08f, -6.567706739e-08f, -6.567849141e-08f,
--6.567980004e-08f, -6.568099331e-08f, -6.568207126e-08f, -6.568303391e-08f, -6.568388130e-08f, -6.568461345e-08f, -6.568523040e-08f, -6.568573218e-08f, -6.568611881e-08f, -6.568639034e-08f,
--6.568654679e-08f, -6.568658819e-08f, -6.568651457e-08f, -6.568632597e-08f, -6.568602243e-08f, -6.568560396e-08f, -6.568507061e-08f, -6.568442241e-08f, -6.568365938e-08f, -6.568278157e-08f,
--6.568178901e-08f, -6.568068173e-08f, -6.567945977e-08f, -6.567812315e-08f, -6.567667192e-08f, -6.567510610e-08f, -6.567342574e-08f, -6.567163087e-08f, -6.566972152e-08f, -6.566769772e-08f,
--6.566555952e-08f, -6.566330695e-08f, -6.566094004e-08f, -6.565845883e-08f, -6.565586336e-08f, -6.565315366e-08f, -6.565032977e-08f, -6.564739173e-08f, -6.564433957e-08f, -6.564117333e-08f,
--6.563789305e-08f, -6.563449877e-08f, -6.563099052e-08f, -6.562736833e-08f, -6.562363226e-08f, -6.561978234e-08f, -6.561581860e-08f, -6.561174108e-08f, -6.560754983e-08f, -6.560324488e-08f,
--6.559882628e-08f, -6.559429405e-08f, -6.558964825e-08f, -6.558488890e-08f, -6.558001606e-08f, -6.557502975e-08f, -6.556993003e-08f, -6.556471693e-08f, -6.555939049e-08f, -6.555395076e-08f,
--6.554839777e-08f, -6.554273156e-08f, -6.553695218e-08f, -6.553105967e-08f, -6.552505408e-08f, -6.551893543e-08f, -6.551270378e-08f, -6.550635917e-08f, -6.549990164e-08f, -6.549333123e-08f,
--6.548664799e-08f, -6.547985196e-08f, -6.547294318e-08f, -6.546592170e-08f, -6.545878755e-08f, -6.545154079e-08f, -6.544418146e-08f, -6.543670960e-08f, -6.542912526e-08f, -6.542142848e-08f,
--6.541361931e-08f, -6.540569779e-08f, -6.539766397e-08f, -6.538951788e-08f, -6.538125959e-08f, -6.537288913e-08f, -6.536440655e-08f, -6.535581190e-08f, -6.534710522e-08f, -6.533828655e-08f,
--6.532935596e-08f, -6.532031347e-08f, -6.531115915e-08f, -6.530189303e-08f, -6.529251517e-08f, -6.528302561e-08f, -6.527342440e-08f, -6.526371159e-08f, -6.525388722e-08f, -6.524395135e-08f,
--6.523390402e-08f, -6.522374528e-08f, -6.521347519e-08f, -6.520309378e-08f, -6.519260112e-08f, -6.518199724e-08f, -6.517128220e-08f, -6.516045605e-08f, -6.514951884e-08f, -6.513847062e-08f,
--6.512731144e-08f, -6.511604134e-08f, -6.510466039e-08f, -6.509316863e-08f, -6.508156611e-08f, -6.506985288e-08f, -6.505802900e-08f, -6.504609452e-08f, -6.503404949e-08f, -6.502189395e-08f,
--6.500962797e-08f, -6.499725160e-08f, -6.498476489e-08f, -6.497216788e-08f, -6.495946064e-08f, -6.494664322e-08f, -6.493371566e-08f, -6.492067803e-08f, -6.490753038e-08f, -6.489427276e-08f,
--6.488090523e-08f, -6.486742783e-08f, -6.485384063e-08f, -6.484014368e-08f, -6.482633703e-08f, -6.481242074e-08f, -6.479839486e-08f, -6.478425945e-08f, -6.477001456e-08f, -6.475566026e-08f,
--6.474119658e-08f, -6.472662361e-08f, -6.471194137e-08f, -6.469714995e-08f, -6.468224938e-08f, -6.466723973e-08f, -6.465212105e-08f, -6.463689341e-08f, -6.462155685e-08f, -6.460611144e-08f,
--6.459055723e-08f, -6.457489429e-08f, -6.455912266e-08f, -6.454324241e-08f, -6.452725359e-08f, -6.451115627e-08f, -6.449495050e-08f, -6.447863635e-08f, -6.446221386e-08f, -6.444568310e-08f,
--6.442904413e-08f, -6.441229701e-08f, -6.439544180e-08f, -6.437847855e-08f, -6.436140734e-08f, -6.434422821e-08f, -6.432694123e-08f, -6.430954645e-08f, -6.429204395e-08f, -6.427443378e-08f,
--6.425671600e-08f, -6.423889068e-08f, -6.422095786e-08f, -6.420291763e-08f, -6.418477003e-08f, -6.416651513e-08f, -6.414815299e-08f, -6.412968368e-08f, -6.411110725e-08f, -6.409242377e-08f,
--6.407363331e-08f, -6.405473592e-08f, -6.403573167e-08f, -6.401662061e-08f, -6.399740283e-08f, -6.397807837e-08f, -6.395864731e-08f, -6.393910970e-08f, -6.391946561e-08f, -6.389971510e-08f,
--6.387985825e-08f, -6.385989511e-08f, -6.383982575e-08f, -6.381965023e-08f, -6.379936862e-08f, -6.377898099e-08f, -6.375848739e-08f, -6.373788791e-08f, -6.371718259e-08f, -6.369637151e-08f,
--6.367545473e-08f, -6.365443233e-08f, -6.363330436e-08f, -6.361207089e-08f, -6.359073200e-08f, -6.356928774e-08f, -6.354773819e-08f, -6.352608341e-08f, -6.350432346e-08f, -6.348245843e-08f,
--6.346048837e-08f, -6.343841335e-08f, -6.341623345e-08f, -6.339394872e-08f, -6.337155924e-08f, -6.334906508e-08f, -6.332646631e-08f, -6.330376299e-08f, -6.328095519e-08f, -6.325804299e-08f,
--6.323502645e-08f, -6.321190564e-08f, -6.318868063e-08f, -6.316535150e-08f, -6.314191831e-08f, -6.311838113e-08f, -6.309474004e-08f, -6.307099510e-08f, -6.304714639e-08f, -6.302319397e-08f,
--6.299913792e-08f, -6.297497831e-08f, -6.295071520e-08f, -6.292634868e-08f, -6.290187882e-08f, -6.287730568e-08f, -6.285262933e-08f, -6.282784986e-08f, -6.280296733e-08f, -6.277798182e-08f,
--6.275289339e-08f, -6.272770212e-08f, -6.270240809e-08f, -6.267701137e-08f, -6.265151203e-08f, -6.262591014e-08f, -6.260020578e-08f, -6.257439902e-08f, -6.254848993e-08f, -6.252247860e-08f,
--6.249636510e-08f, -6.247014949e-08f, -6.244383186e-08f, -6.241741227e-08f, -6.239089081e-08f, -6.236426755e-08f, -6.233754257e-08f, -6.231071593e-08f, -6.228378772e-08f, -6.225675801e-08f,
--6.222962688e-08f, -6.220239441e-08f, -6.217506066e-08f, -6.214762572e-08f, -6.212008967e-08f, -6.209245257e-08f, -6.206471452e-08f, -6.203687557e-08f, -6.200893582e-08f, -6.198089534e-08f,
--6.195275420e-08f, -6.192451249e-08f, -6.189617028e-08f, -6.186772765e-08f, -6.183918467e-08f, -6.181054144e-08f, -6.178179802e-08f, -6.175295449e-08f, -6.172401094e-08f, -6.169496744e-08f,
--6.166582406e-08f, -6.163658090e-08f, -6.160723803e-08f, -6.157779553e-08f, -6.154825348e-08f, -6.151861195e-08f, -6.148887103e-08f, -6.145903081e-08f, -6.142909135e-08f, -6.139905274e-08f,
--6.136891506e-08f, -6.133867840e-08f, -6.130834282e-08f, -6.127790842e-08f, -6.124737528e-08f, -6.121674347e-08f, -6.118601307e-08f, -6.115518418e-08f, -6.112425687e-08f, -6.109323122e-08f,
--6.106210732e-08f, -6.103088525e-08f, -6.099956508e-08f, -6.096814691e-08f, -6.093663082e-08f, -6.090501688e-08f, -6.087330518e-08f, -6.084149581e-08f, -6.080958885e-08f, -6.077758438e-08f,
--6.074548249e-08f, -6.071328325e-08f, -6.068098676e-08f, -6.064859310e-08f, -6.061610235e-08f, -6.058351459e-08f, -6.055082991e-08f, -6.051804841e-08f, -6.048517015e-08f, -6.045219522e-08f,
--6.041912372e-08f, -6.038595572e-08f, -6.035269132e-08f, -6.031933059e-08f, -6.028587362e-08f, -6.025232050e-08f, -6.021867132e-08f, -6.018492615e-08f, -6.015108510e-08f, -6.011714824e-08f,
--6.008311565e-08f, -6.004898744e-08f, -6.001476368e-08f, -5.998044446e-08f, -5.994602987e-08f, -5.991151999e-08f, -5.987691491e-08f, -5.984221473e-08f, -5.980741953e-08f, -5.977252939e-08f,
--5.973754440e-08f, -5.970246466e-08f, -5.966729025e-08f, -5.963202126e-08f, -5.959665777e-08f, -5.956119989e-08f, -5.952564768e-08f, -5.949000126e-08f, -5.945426070e-08f, -5.941842609e-08f,
--5.938249752e-08f, -5.934647508e-08f, -5.931035887e-08f, -5.927414897e-08f, -5.923784547e-08f, -5.920144847e-08f, -5.916495804e-08f, -5.912837429e-08f, -5.909169731e-08f, -5.905492717e-08f,
--5.901806399e-08f, -5.898110784e-08f, -5.894405881e-08f, -5.890691701e-08f, -5.886968251e-08f, -5.883235542e-08f, -5.879493582e-08f, -5.875742381e-08f, -5.871981947e-08f, -5.868212290e-08f,
--5.864433420e-08f, -5.860645345e-08f, -5.856848074e-08f, -5.853041618e-08f, -5.849225984e-08f, -5.845401184e-08f, -5.841567225e-08f, -5.837724117e-08f, -5.833871869e-08f, -5.830010492e-08f,
--5.826139993e-08f, -5.822260384e-08f, -5.818371672e-08f, -5.814473867e-08f, -5.810566979e-08f, -5.806651018e-08f, -5.802725992e-08f, -5.798791911e-08f, -5.794848785e-08f, -5.790896623e-08f,
--5.786935434e-08f, -5.782965229e-08f, -5.778986016e-08f, -5.774997805e-08f, -5.771000606e-08f, -5.766994428e-08f, -5.762979281e-08f, -5.758955174e-08f, -5.754922117e-08f, -5.750880120e-08f,
--5.746829192e-08f, -5.742769343e-08f, -5.738700583e-08f, -5.734622920e-08f, -5.730536366e-08f, -5.726440929e-08f, -5.722336620e-08f, -5.718223447e-08f, -5.714101422e-08f, -5.709970552e-08f,
--5.705830849e-08f, -5.701682322e-08f, -5.697524981e-08f, -5.693358836e-08f, -5.689183896e-08f, -5.685000171e-08f, -5.680807671e-08f, -5.676606406e-08f, -5.672396386e-08f, -5.668177620e-08f,
--5.663950119e-08f, -5.659713893e-08f, -5.655468951e-08f, -5.651215303e-08f, -5.646952959e-08f, -5.642681929e-08f, -5.638402224e-08f, -5.634113853e-08f, -5.629816825e-08f, -5.625511152e-08f,
--5.621196843e-08f, -5.616873908e-08f, -5.612542358e-08f, -5.608202201e-08f, -5.603853449e-08f, -5.599496111e-08f, -5.595130197e-08f, -5.590755718e-08f, -5.586372684e-08f, -5.581981104e-08f,
--5.577580990e-08f, -5.573172350e-08f, -5.568755196e-08f, -5.564329537e-08f, -5.559895383e-08f, -5.555452745e-08f, -5.551001634e-08f, -5.546542058e-08f, -5.542074029e-08f, -5.537597557e-08f,
--5.533112651e-08f, -5.528619323e-08f, -5.524117582e-08f, -5.519607439e-08f, -5.515088904e-08f, -5.510561987e-08f, -5.506026699e-08f, -5.501483051e-08f, -5.496931051e-08f, -5.492370712e-08f,
--5.487802042e-08f, -5.483225053e-08f, -5.478639756e-08f, -5.474046159e-08f, -5.469444274e-08f, -5.464834112e-08f, -5.460215682e-08f, -5.455588995e-08f, -5.450954062e-08f, -5.446310893e-08f,
--5.441659498e-08f, -5.436999889e-08f, -5.432332075e-08f, -5.427656067e-08f, -5.422971876e-08f, -5.418279512e-08f, -5.413578986e-08f, -5.408870309e-08f, -5.404153490e-08f, -5.399428541e-08f,
--5.394695472e-08f, -5.389954293e-08f, -5.385205016e-08f, -5.380447651e-08f, -5.375682209e-08f, -5.370908700e-08f, -5.366127136e-08f, -5.361337526e-08f, -5.356539881e-08f, -5.351734212e-08f,
--5.346920531e-08f, -5.342098847e-08f, -5.337269171e-08f, -5.332431514e-08f, -5.327585888e-08f, -5.322732302e-08f, -5.317870767e-08f, -5.313001294e-08f, -5.308123895e-08f, -5.303238579e-08f,
--5.298345358e-08f, -5.293444243e-08f, -5.288535244e-08f, -5.283618372e-08f, -5.278693638e-08f, -5.273761054e-08f, -5.268820629e-08f, -5.263872375e-08f, -5.258916303e-08f, -5.253952423e-08f,
--5.248980747e-08f, -5.244001286e-08f, -5.239014050e-08f, -5.234019050e-08f, -5.229016298e-08f, -5.224005805e-08f, -5.218987581e-08f, -5.213961637e-08f, -5.208927985e-08f, -5.203886636e-08f,
--5.198837600e-08f, -5.193780889e-08f, -5.188716513e-08f, -5.183644484e-08f, -5.178564814e-08f, -5.173477512e-08f, -5.168382590e-08f, -5.163280059e-08f, -5.158169931e-08f, -5.153052216e-08f,
--5.147926926e-08f, -5.142794072e-08f, -5.137653664e-08f, -5.132505715e-08f, -5.127350235e-08f, -5.122187236e-08f, -5.117016728e-08f, -5.111838723e-08f, -5.106653233e-08f, -5.101460268e-08f,
--5.096259839e-08f, -5.091051959e-08f, -5.085836638e-08f, -5.080613887e-08f, -5.075383718e-08f, -5.070146143e-08f, -5.064901171e-08f, -5.059648816e-08f, -5.054389087e-08f, -5.049121997e-08f,
--5.043847557e-08f, -5.038565777e-08f, -5.033276670e-08f, -5.027980248e-08f, -5.022676520e-08f, -5.017365499e-08f, -5.012047196e-08f, -5.006721623e-08f, -5.001388790e-08f, -4.996048710e-08f,
--4.990701394e-08f, -4.985346852e-08f, -4.979985098e-08f, -4.974616142e-08f, -4.969239996e-08f, -4.963856670e-08f, -4.958466178e-08f, -4.953068529e-08f, -4.947663737e-08f, -4.942251811e-08f,
--4.936832765e-08f, -4.931406609e-08f, -4.925973354e-08f, -4.920533014e-08f, -4.915085598e-08f, -4.909631119e-08f, -4.904169588e-08f, -4.898701017e-08f, -4.893225418e-08f, -4.887742801e-08f,
--4.882253180e-08f, -4.876756565e-08f, -4.871252968e-08f, -4.865742400e-08f, -4.860224874e-08f, -4.854700401e-08f, -4.849168993e-08f, -4.843630661e-08f, -4.838085417e-08f, -4.832533274e-08f,
--4.826974242e-08f, -4.821408333e-08f, -4.815835559e-08f, -4.810255932e-08f, -4.804669464e-08f, -4.799076166e-08f, -4.793476050e-08f, -4.787869128e-08f, -4.782255412e-08f, -4.776634913e-08f,
--4.771007644e-08f, -4.765373616e-08f, -4.759732840e-08f, -4.754085330e-08f, -4.748431096e-08f, -4.742770151e-08f, -4.737102506e-08f, -4.731428174e-08f, -4.725747165e-08f, -4.720059493e-08f,
--4.714365169e-08f, -4.708664204e-08f, -4.702956611e-08f, -4.697242402e-08f, -4.691521589e-08f, -4.685794183e-08f, -4.680060196e-08f, -4.674319641e-08f, -4.668572529e-08f, -4.662818873e-08f,
--4.657058684e-08f, -4.651291975e-08f, -4.645518757e-08f, -4.639739042e-08f, -4.633952843e-08f, -4.628160171e-08f, -4.622361038e-08f, -4.616555457e-08f, -4.610743440e-08f, -4.604924998e-08f,
--4.599100144e-08f, -4.593268889e-08f, -4.587431246e-08f, -4.581587227e-08f, -4.575736844e-08f, -4.569880109e-08f, -4.564017035e-08f, -4.558147632e-08f, -4.552271914e-08f, -4.546389893e-08f,
--4.540501580e-08f, -4.534606988e-08f, -4.528706129e-08f, -4.522799015e-08f, -4.516885659e-08f, -4.510966072e-08f, -4.505040267e-08f, -4.499108255e-08f, -4.493170050e-08f, -4.487225663e-08f,
--4.481275107e-08f, -4.475318393e-08f, -4.469355534e-08f, -4.463386542e-08f, -4.457411430e-08f, -4.451430210e-08f, -4.445442893e-08f, -4.439449493e-08f, -4.433450021e-08f, -4.427444491e-08f,
--4.421432913e-08f, -4.415415300e-08f, -4.409391665e-08f, -4.403362021e-08f, -4.397326378e-08f, -4.391284750e-08f, -4.385237149e-08f, -4.379183588e-08f, -4.373124078e-08f, -4.367058632e-08f,
--4.360987263e-08f, -4.354909982e-08f, -4.348826802e-08f, -4.342737736e-08f, -4.336642796e-08f, -4.330541994e-08f, -4.324435342e-08f, -4.318322854e-08f, -4.312204542e-08f, -4.306080417e-08f,
--4.299950492e-08f, -4.293814781e-08f, -4.287673294e-08f, -4.281526046e-08f, -4.275373047e-08f, -4.269214311e-08f, -4.263049850e-08f, -4.256879677e-08f, -4.250703804e-08f, -4.244522243e-08f,
--4.238335008e-08f, -4.232142109e-08f, -4.225943561e-08f, -4.219739376e-08f, -4.213529565e-08f, -4.207314143e-08f, -4.201093120e-08f, -4.194866510e-08f, -4.188634325e-08f, -4.182396578e-08f,
--4.176153281e-08f, -4.169904447e-08f, -4.163650089e-08f, -4.157390219e-08f, -4.151124849e-08f, -4.144853993e-08f, -4.138577662e-08f, -4.132295870e-08f, -4.126008629e-08f, -4.119715952e-08f,
--4.113417851e-08f, -4.107114339e-08f, -4.100805428e-08f, -4.094491132e-08f, -4.088171462e-08f, -4.081846432e-08f, -4.075516054e-08f, -4.069180341e-08f, -4.062839305e-08f, -4.056492959e-08f,
--4.050141317e-08f, -4.043784389e-08f, -4.037422190e-08f, -4.031054732e-08f, -4.024682028e-08f, -4.018304090e-08f, -4.011920930e-08f, -4.005532563e-08f, -3.999139000e-08f, -3.992740254e-08f,
--3.986336339e-08f, -3.979927265e-08f, -3.973513048e-08f, -3.967093698e-08f, -3.960669230e-08f, -3.954239655e-08f, -3.947804987e-08f, -3.941365238e-08f, -3.934920421e-08f, -3.928470549e-08f,
--3.922015634e-08f, -3.915555690e-08f, -3.909090729e-08f, -3.902620765e-08f, -3.896145809e-08f, -3.889665874e-08f, -3.883180975e-08f, -3.876691122e-08f, -3.870196330e-08f, -3.863696610e-08f,
--3.857191977e-08f, -3.850682442e-08f, -3.844168019e-08f, -3.837648720e-08f, -3.831124558e-08f, -3.824595546e-08f, -3.818061698e-08f, -3.811523025e-08f, -3.804979541e-08f, -3.798431259e-08f,
--3.791878191e-08f, -3.785320351e-08f, -3.778757751e-08f, -3.772190405e-08f, -3.765618324e-08f, -3.759041523e-08f, -3.752460013e-08f, -3.745873809e-08f, -3.739282922e-08f, -3.732687366e-08f,
--3.726087154e-08f, -3.719482299e-08f, -3.712872813e-08f, -3.706258710e-08f, -3.699640002e-08f, -3.693016703e-08f, -3.686388825e-08f, -3.679756382e-08f, -3.673119386e-08f, -3.666477851e-08f,
--3.659831789e-08f, -3.653181213e-08f, -3.646526137e-08f, -3.639866573e-08f, -3.633202534e-08f, -3.626534034e-08f, -3.619861085e-08f, -3.613183701e-08f, -3.606501894e-08f, -3.599815677e-08f,
--3.593125064e-08f, -3.586430068e-08f, -3.579730701e-08f, -3.573026976e-08f, -3.566318908e-08f, -3.559606507e-08f, -3.552889789e-08f, -3.546168765e-08f, -3.539443449e-08f, -3.532713854e-08f,
--3.525979993e-08f, -3.519241879e-08f, -3.512499526e-08f, -3.505752945e-08f, -3.499002150e-08f, -3.492247155e-08f, -3.485487973e-08f, -3.478724616e-08f, -3.471957097e-08f, -3.465185430e-08f,
--3.458409628e-08f, -3.451629705e-08f, -3.444845672e-08f, -3.438057543e-08f, -3.431265331e-08f, -3.424469050e-08f, -3.417668713e-08f, -3.410864332e-08f, -3.404055921e-08f, -3.397243493e-08f,
--3.390427061e-08f, -3.383606638e-08f, -3.376782237e-08f, -3.369953872e-08f, -3.363121556e-08f, -3.356285302e-08f, -3.349445122e-08f, -3.342601031e-08f, -3.335753041e-08f, -3.328901165e-08f,
--3.322045417e-08f, -3.315185810e-08f, -3.308322357e-08f, -3.301455071e-08f, -3.294583965e-08f, -3.287709053e-08f, -3.280830348e-08f, -3.273947862e-08f, -3.267061610e-08f, -3.260171604e-08f,
--3.253277857e-08f, -3.246380383e-08f, -3.239479196e-08f, -3.232574307e-08f, -3.225665731e-08f, -3.218753480e-08f, -3.211837568e-08f, -3.204918008e-08f, -3.197994813e-08f, -3.191067997e-08f,
--3.184137572e-08f, -3.177203553e-08f, -3.170265951e-08f, -3.163324781e-08f, -3.156380056e-08f, -3.149431788e-08f, -3.142479992e-08f, -3.135524680e-08f, -3.128565865e-08f, -3.121603562e-08f,
--3.114637782e-08f, -3.107668540e-08f, -3.100695848e-08f, -3.093719721e-08f, -3.086740170e-08f, -3.079757210e-08f, -3.072770854e-08f, -3.065781115e-08f, -3.058788006e-08f, -3.051791540e-08f,
--3.044791731e-08f, -3.037788593e-08f, -3.030782137e-08f, -3.023772379e-08f, -3.016759330e-08f, -3.009743004e-08f, -3.002723415e-08f, -2.995700576e-08f, -2.988674500e-08f, -2.981645200e-08f,
--2.974612690e-08f, -2.967576982e-08f, -2.960538091e-08f, -2.953496030e-08f, -2.946450812e-08f, -2.939402449e-08f, -2.932350957e-08f, -2.925296347e-08f, -2.918238633e-08f, -2.911177828e-08f,
--2.904113947e-08f, -2.897047001e-08f, -2.889977005e-08f, -2.882903971e-08f, -2.875827914e-08f, -2.868748846e-08f, -2.861666780e-08f, -2.854581731e-08f, -2.847493711e-08f, -2.840402733e-08f,
--2.833308812e-08f, -2.826211960e-08f, -2.819112190e-08f, -2.812009517e-08f, -2.804903953e-08f, -2.797795511e-08f, -2.790684206e-08f, -2.783570049e-08f, -2.776453056e-08f, -2.769333239e-08f,
--2.762210610e-08f, -2.755085185e-08f, -2.747956976e-08f, -2.740825996e-08f, -2.733692259e-08f, -2.726555778e-08f, -2.719416566e-08f, -2.712274637e-08f, -2.705130005e-08f, -2.697982682e-08f,
--2.690832682e-08f, -2.683680018e-08f, -2.676524703e-08f, -2.669366752e-08f, -2.662206177e-08f, -2.655042991e-08f, -2.647877209e-08f, -2.640708842e-08f, -2.633537906e-08f, -2.626364413e-08f,
--2.619188376e-08f, -2.612009809e-08f, -2.604828725e-08f, -2.597645138e-08f, -2.590459061e-08f, -2.583270507e-08f, -2.576079489e-08f, -2.568886022e-08f, -2.561690118e-08f, -2.554491791e-08f,
--2.547291054e-08f, -2.540087920e-08f, -2.532882403e-08f, -2.525674517e-08f, -2.518464274e-08f, -2.511251688e-08f, -2.504036773e-08f, -2.496819541e-08f, -2.489600006e-08f, -2.482378182e-08f,
--2.475154081e-08f, -2.467927718e-08f, -2.460699105e-08f, -2.453468257e-08f, -2.446235185e-08f, -2.438999905e-08f, -2.431762428e-08f, -2.424522769e-08f, -2.417280940e-08f, -2.410036956e-08f,
--2.402790830e-08f, -2.395542574e-08f, -2.388292203e-08f, -2.381039729e-08f, -2.373785166e-08f, -2.366528528e-08f, -2.359269828e-08f, -2.352009079e-08f, -2.344746294e-08f, -2.337481487e-08f,
--2.330214672e-08f, -2.322945861e-08f, -2.315675068e-08f, -2.308402307e-08f, -2.301127590e-08f, -2.293850932e-08f, -2.286572345e-08f, -2.279291843e-08f, -2.272009440e-08f, -2.264725147e-08f,
--2.257438980e-08f, -2.250150952e-08f, -2.242861075e-08f, -2.235569363e-08f, -2.228275829e-08f, -2.220980488e-08f, -2.213683351e-08f, -2.206384433e-08f, -2.199083747e-08f, -2.191781307e-08f,
--2.184477125e-08f, -2.177171215e-08f, -2.169863590e-08f, -2.162554264e-08f, -2.155243250e-08f, -2.147930562e-08f, -2.140616213e-08f, -2.133300215e-08f, -2.125982583e-08f, -2.118663330e-08f,
--2.111342470e-08f, -2.104020015e-08f, -2.096695978e-08f, -2.089370374e-08f, -2.082043216e-08f, -2.074714517e-08f, -2.067384290e-08f, -2.060052548e-08f, -2.052719306e-08f, -2.045384576e-08f,
--2.038048372e-08f, -2.030710707e-08f, -2.023371594e-08f, -2.016031047e-08f, -2.008689079e-08f, -2.001345704e-08f, -1.994000934e-08f, -1.986654783e-08f, -1.979307265e-08f, -1.971958393e-08f,
--1.964608179e-08f, -1.957256638e-08f, -1.949903783e-08f, -1.942549627e-08f, -1.935194183e-08f, -1.927837465e-08f, -1.920479485e-08f, -1.913120259e-08f, -1.905759798e-08f, -1.898398115e-08f,
--1.891035226e-08f, -1.883671141e-08f, -1.876305876e-08f, -1.868939443e-08f, -1.861571856e-08f, -1.854203127e-08f, -1.846833270e-08f, -1.839462299e-08f, -1.832090227e-08f, -1.824717067e-08f,
--1.817342832e-08f, -1.809967536e-08f, -1.802591191e-08f, -1.795213812e-08f, -1.787835412e-08f, -1.780456003e-08f, -1.773075600e-08f, -1.765694214e-08f, -1.758311861e-08f, -1.750928552e-08f,
--1.743544302e-08f, -1.736159123e-08f, -1.728773029e-08f, -1.721386033e-08f, -1.713998148e-08f, -1.706609387e-08f, -1.699219765e-08f, -1.691829294e-08f, -1.684437987e-08f, -1.677045858e-08f,
--1.669652919e-08f, -1.662259185e-08f, -1.654864668e-08f, -1.647469381e-08f, -1.640073339e-08f, -1.632676554e-08f, -1.625279039e-08f, -1.617880807e-08f, -1.610481873e-08f, -1.603082248e-08f,
--1.595681947e-08f, -1.588280982e-08f, -1.580879367e-08f, -1.573477115e-08f, -1.566074239e-08f, -1.558670753e-08f, -1.551266669e-08f, -1.543862001e-08f, -1.536456762e-08f, -1.529050965e-08f,
--1.521644624e-08f, -1.514237752e-08f, -1.506830361e-08f, -1.499422465e-08f, -1.492014078e-08f, -1.484605212e-08f, -1.477195880e-08f, -1.469786096e-08f, -1.462375874e-08f, -1.454965225e-08f,
--1.447554164e-08f, -1.440142703e-08f, -1.432730856e-08f, -1.425318636e-08f, -1.417906056e-08f, -1.410493129e-08f, -1.403079868e-08f, -1.395666286e-08f, -1.388252398e-08f, -1.380838215e-08f,
--1.373423751e-08f, -1.366009019e-08f, -1.358594032e-08f, -1.351178803e-08f, -1.343763346e-08f, -1.336347674e-08f, -1.328931799e-08f, -1.321515735e-08f, -1.314099495e-08f, -1.306683091e-08f,
--1.299266538e-08f, -1.291849849e-08f, -1.284433035e-08f, -1.277016112e-08f, -1.269599090e-08f, -1.262181984e-08f, -1.254764807e-08f, -1.247347572e-08f, -1.239930292e-08f, -1.232512980e-08f,
--1.225095648e-08f, -1.217678311e-08f, -1.210260981e-08f, -1.202843672e-08f, -1.195426395e-08f, -1.188009165e-08f, -1.180591994e-08f, -1.173174896e-08f, -1.165757883e-08f, -1.158340969e-08f,
--1.150924167e-08f, -1.143507489e-08f, -1.136090948e-08f, -1.128674558e-08f, -1.121258332e-08f, -1.113842283e-08f, -1.106426423e-08f, -1.099010766e-08f, -1.091595325e-08f, -1.084180113e-08f,
--1.076765142e-08f, -1.069350426e-08f, -1.061935977e-08f, -1.054521809e-08f, -1.047107935e-08f, -1.039694368e-08f, -1.032281120e-08f, -1.024868204e-08f, -1.017455635e-08f, -1.010043423e-08f,
--1.002631583e-08f, -9.952201277e-09f, -9.878090694e-09f, -9.803984214e-09f, -9.729881966e-09f, -9.655784079e-09f, -9.581690682e-09f, -9.507601906e-09f, -9.433517878e-09f, -9.359438728e-09f,
--9.285364585e-09f, -9.211295578e-09f, -9.137231837e-09f, -9.063173489e-09f, -8.989120664e-09f, -8.915073491e-09f, -8.841032099e-09f, -8.766996616e-09f, -8.692967171e-09f, -8.618943893e-09f,
--8.544926911e-09f, -8.470916352e-09f, -8.396912345e-09f, -8.322915019e-09f, -8.248924503e-09f, -8.174940924e-09f, -8.100964412e-09f, -8.026995093e-09f, -7.953033097e-09f, -7.879078552e-09f,
--7.805131585e-09f, -7.731192325e-09f, -7.657260900e-09f, -7.583337438e-09f, -7.509422067e-09f, -7.435514914e-09f, -7.361616108e-09f, -7.287725776e-09f, -7.213844046e-09f, -7.139971045e-09f,
--7.066106902e-09f, -6.992251743e-09f, -6.918405696e-09f, -6.844568890e-09f, -6.770741450e-09f, -6.696923505e-09f, -6.623115181e-09f, -6.549316607e-09f, -6.475527909e-09f, -6.401749214e-09f,
--6.327980649e-09f, -6.254222342e-09f, -6.180474419e-09f, -6.106737008e-09f, -6.033010234e-09f, -5.959294226e-09f, -5.885589109e-09f, -5.811895011e-09f, -5.738212058e-09f, -5.664540376e-09f,
--5.590880092e-09f, -5.517231333e-09f, -5.443594226e-09f, -5.369968895e-09f, -5.296355468e-09f, -5.222754071e-09f, -5.149164830e-09f, -5.075587872e-09f, -5.002023321e-09f, -4.928471305e-09f,
--4.854931949e-09f, -4.781405380e-09f, -4.707891722e-09f, -4.634391102e-09f, -4.560903645e-09f, -4.487429478e-09f, -4.413968725e-09f, -4.340521513e-09f, -4.267087966e-09f, -4.193668210e-09f,
--4.120262371e-09f, -4.046870574e-09f, -3.973492943e-09f, -3.900129605e-09f, -3.826780684e-09f, -3.753446306e-09f, -3.680126595e-09f, -3.606821676e-09f, -3.533531674e-09f, -3.460256714e-09f,
--3.386996921e-09f, -3.313752419e-09f, -3.240523333e-09f, -3.167309788e-09f, -3.094111908e-09f, -3.020929817e-09f, -2.947763640e-09f, -2.874613501e-09f, -2.801479524e-09f, -2.728361834e-09f,
--2.655260554e-09f, -2.582175809e-09f, -2.509107722e-09f, -2.436056418e-09f, -2.363022021e-09f, -2.290004653e-09f, -2.217004440e-09f, -2.144021504e-09f, -2.071055969e-09f, -1.998107958e-09f,
--1.925177596e-09f, -1.852265005e-09f, -1.779370308e-09f, -1.706493630e-09f, -1.633635093e-09f, -1.560794820e-09f, -1.487972934e-09f, -1.415169559e-09f, -1.342384817e-09f, -1.269618831e-09f,
--1.196871723e-09f, -1.124143617e-09f, -1.051434636e-09f, -9.787449008e-10f, -9.060745350e-10f, -8.334236608e-10f, -7.607924005e-10f, -6.881808766e-10f, -6.155892111e-10f, -5.430175262e-10f,
--4.704659440e-10f, -3.979345865e-10f, -3.254235756e-10f, -2.529330332e-10f, -1.804630812e-10f, -1.080138411e-10f, -3.558543463e-11f, 3.682201658e-11f, 1.092083911e-10f, 1.815735674e-10f,
-2.539174242e-10f, 3.262398402e-10f, 3.985406942e-10f, 4.708198650e-10f, 5.430772316e-10f, 6.153126730e-10f, 6.875260683e-10f, 7.597172966e-10f, 8.318862371e-10f, 9.040327691e-10f,
-9.761567721e-10f, 1.048258125e-09f, 1.120336709e-09f, 1.192392402e-09f, 1.264425083e-09f, 1.336434634e-09f, 1.408420934e-09f, 1.480383862e-09f, 1.552323299e-09f, 1.624239125e-09f,
-1.696131219e-09f, 1.767999463e-09f, 1.839843736e-09f, 1.911663918e-09f, 1.983459891e-09f, 2.055231534e-09f, 2.126978728e-09f, 2.198701355e-09f, 2.270399294e-09f, 2.342072426e-09f,
-2.413720633e-09f, 2.485343796e-09f, 2.556941794e-09f, 2.628514511e-09f, 2.700061826e-09f, 2.771583621e-09f, 2.843079777e-09f, 2.914550177e-09f, 2.985994701e-09f, 3.057413231e-09f,
-3.128805649e-09f, 3.200171836e-09f, 3.271511675e-09f, 3.342825047e-09f, 3.414111835e-09f, 3.485371920e-09f, 3.556605185e-09f, 3.627811511e-09f, 3.698990782e-09f, 3.770142880e-09f,
-3.841267687e-09f, 3.912365086e-09f, 3.983434959e-09f, 4.054477189e-09f, 4.125491660e-09f, 4.196478253e-09f, 4.267436852e-09f, 4.338367341e-09f, 4.409269602e-09f, 4.480143518e-09f,
-4.550988973e-09f, 4.621805851e-09f, 4.692594034e-09f, 4.763353407e-09f, 4.834083853e-09f, 4.904785255e-09f, 4.975457498e-09f, 5.046100466e-09f, 5.116714043e-09f, 5.187298112e-09f,
-5.257852558e-09f, 5.328377265e-09f, 5.398872118e-09f, 5.469337001e-09f, 5.539771799e-09f, 5.610176395e-09f, 5.680550675e-09f, 5.750894524e-09f, 5.821207827e-09f, 5.891490468e-09f,
-5.961742333e-09f, 6.031963306e-09f, 6.102153273e-09f, 6.172312120e-09f, 6.242439731e-09f, 6.312535992e-09f, 6.382600789e-09f, 6.452634008e-09f, 6.522635533e-09f, 6.592605252e-09f,
-6.662543049e-09f, 6.732448812e-09f, 6.802322425e-09f, 6.872163776e-09f, 6.941972751e-09f, 7.011749235e-09f, 7.081493117e-09f, 7.151204281e-09f, 7.220882614e-09f, 7.290528005e-09f,
-7.360140338e-09f, 7.429719502e-09f, 7.499265383e-09f, 7.568777868e-09f, 7.638256845e-09f, 7.707702201e-09f, 7.777113823e-09f, 7.846491599e-09f, 7.915835417e-09f, 7.985145163e-09f,
-8.054420726e-09f, 8.123661994e-09f, 8.192868854e-09f, 8.262041195e-09f, 8.331178904e-09f, 8.400281871e-09f, 8.469349983e-09f, 8.538383128e-09f, 8.607381196e-09f, 8.676344074e-09f,
-8.745271653e-09f, 8.814163819e-09f, 8.883020463e-09f, 8.951841473e-09f, 9.020626738e-09f, 9.089376147e-09f, 9.158089591e-09f, 9.226766957e-09f, 9.295408136e-09f, 9.364013017e-09f,
-9.432581490e-09f, 9.501113444e-09f, 9.569608770e-09f, 9.638067357e-09f, 9.706489095e-09f, 9.774873875e-09f, 9.843221586e-09f, 9.911532119e-09f, 9.979805365e-09f, 1.004804121e-08f,
-1.011623956e-08f, 1.018440028e-08f, 1.025252329e-08f, 1.032060845e-08f, 1.038865568e-08f, 1.045666485e-08f, 1.052463587e-08f, 1.059256861e-08f, 1.066046297e-08f, 1.072831885e-08f,
-1.079613614e-08f, 1.086391472e-08f, 1.093165449e-08f, 1.099935534e-08f, 1.106701717e-08f, 1.113463985e-08f, 1.120222330e-08f, 1.126976740e-08f, 1.133727203e-08f, 1.140473710e-08f,
-1.147216250e-08f, 1.153954812e-08f, 1.160689385e-08f, 1.167419959e-08f, 1.174146522e-08f, 1.180869064e-08f, 1.187587576e-08f, 1.194302044e-08f, 1.201012460e-08f, 1.207718813e-08f,
-1.214421091e-08f, 1.221119285e-08f, 1.227813383e-08f, 1.234503375e-08f, 1.241189251e-08f, 1.247870999e-08f, 1.254548610e-08f, 1.261222073e-08f, 1.267891376e-08f, 1.274556511e-08f,
-1.281217465e-08f, 1.287874229e-08f, 1.294526792e-08f, 1.301175143e-08f, 1.307819272e-08f, 1.314459170e-08f, 1.321094824e-08f, 1.327726224e-08f, 1.334353361e-08f, 1.340976224e-08f,
-1.347594802e-08f, 1.354209085e-08f, 1.360819063e-08f, 1.367424724e-08f, 1.374026059e-08f, 1.380623058e-08f, 1.387215710e-08f, 1.393804004e-08f, 1.400387930e-08f, 1.406967479e-08f,
-1.413542639e-08f, 1.420113400e-08f, 1.426679753e-08f, 1.433241686e-08f, 1.439799190e-08f, 1.446352254e-08f, 1.452900867e-08f, 1.459445021e-08f, 1.465984704e-08f, 1.472519906e-08f,
-1.479050617e-08f, 1.485576827e-08f, 1.492098526e-08f, 1.498615703e-08f, 1.505128348e-08f, 1.511636452e-08f, 1.518140003e-08f, 1.524638993e-08f, 1.531133410e-08f, 1.537623245e-08f,
-1.544108487e-08f, 1.550589126e-08f, 1.557065153e-08f, 1.563536557e-08f, 1.570003329e-08f, 1.576465457e-08f, 1.582922933e-08f, 1.589375746e-08f, 1.595823885e-08f, 1.602267342e-08f,
-1.608706106e-08f, 1.615140167e-08f, 1.621569515e-08f, 1.627994141e-08f, 1.634414033e-08f, 1.640829183e-08f, 1.647239581e-08f, 1.653645215e-08f, 1.660046078e-08f, 1.666442158e-08f,
-1.672833446e-08f, 1.679219931e-08f, 1.685601605e-08f, 1.691978457e-08f, 1.698350477e-08f, 1.704717656e-08f, 1.711079984e-08f, 1.717437451e-08f, 1.723790047e-08f, 1.730137762e-08f,
-1.736480587e-08f, 1.742818511e-08f, 1.749151526e-08f, 1.755479622e-08f, 1.761802788e-08f, 1.768121014e-08f, 1.774434293e-08f, 1.780742613e-08f, 1.787045964e-08f, 1.793344338e-08f,
-1.799637725e-08f, 1.805926115e-08f, 1.812209498e-08f, 1.818487865e-08f, 1.824761205e-08f, 1.831029511e-08f, 1.837292771e-08f, 1.843550977e-08f, 1.849804119e-08f, 1.856052187e-08f,
-1.862295172e-08f, 1.868533064e-08f, 1.874765853e-08f, 1.880993532e-08f, 1.887216088e-08f, 1.893433514e-08f, 1.899645800e-08f, 1.905852937e-08f, 1.912054914e-08f, 1.918251723e-08f,
-1.924443353e-08f, 1.930629797e-08f, 1.936811044e-08f, 1.942987085e-08f, 1.949157910e-08f, 1.955323511e-08f, 1.961483877e-08f, 1.967639000e-08f, 1.973788871e-08f, 1.979933479e-08f,
-1.986072816e-08f, 1.992206872e-08f, 1.998335638e-08f, 2.004459105e-08f, 2.010577264e-08f, 2.016690104e-08f, 2.022797619e-08f, 2.028899797e-08f, 2.034996629e-08f, 2.041088107e-08f,
-2.047174222e-08f, 2.053254964e-08f, 2.059330323e-08f, 2.065400292e-08f, 2.071464861e-08f, 2.077524020e-08f, 2.083577760e-08f, 2.089626074e-08f, 2.095668950e-08f, 2.101706381e-08f,
-2.107738357e-08f, 2.113764870e-08f, 2.119785910e-08f, 2.125801467e-08f, 2.131811535e-08f, 2.137816102e-08f, 2.143815161e-08f, 2.149808701e-08f, 2.155796716e-08f, 2.161779194e-08f,
-2.167756128e-08f, 2.173727509e-08f, 2.179693327e-08f, 2.185653574e-08f, 2.191608241e-08f, 2.197557319e-08f, 2.203500799e-08f, 2.209438672e-08f, 2.215370930e-08f, 2.221297564e-08f,
-2.227218564e-08f, 2.233133923e-08f, 2.239043630e-08f, 2.244947679e-08f, 2.250846059e-08f, 2.256738762e-08f, 2.262625780e-08f, 2.268507103e-08f, 2.274382723e-08f, 2.280252631e-08f,
-2.286116819e-08f, 2.291975277e-08f, 2.297827998e-08f, 2.303674973e-08f, 2.309516192e-08f, 2.315351648e-08f, 2.321181331e-08f, 2.327005234e-08f, 2.332823347e-08f, 2.338635663e-08f,
-2.344442171e-08f, 2.350242865e-08f, 2.356037735e-08f, 2.361826773e-08f, 2.367609971e-08f, 2.373387319e-08f, 2.379158810e-08f, 2.384924434e-08f, 2.390684185e-08f, 2.396438052e-08f,
-2.402186028e-08f, 2.407928104e-08f, 2.413664272e-08f, 2.419394524e-08f, 2.425118851e-08f, 2.430837244e-08f, 2.436549696e-08f, 2.442256199e-08f, 2.447956742e-08f, 2.453651320e-08f,
-2.459339922e-08f, 2.465022542e-08f, 2.470699170e-08f, 2.476369798e-08f, 2.482034419e-08f, 2.487693023e-08f, 2.493345603e-08f, 2.498992151e-08f, 2.504632658e-08f, 2.510267116e-08f,
-2.515895517e-08f, 2.521517853e-08f, 2.527134116e-08f, 2.532744297e-08f, 2.538348388e-08f, 2.543946382e-08f, 2.549538271e-08f, 2.555124045e-08f, 2.560703698e-08f, 2.566277221e-08f,
-2.571844605e-08f, 2.577405844e-08f, 2.582960929e-08f, 2.588509852e-08f, 2.594052605e-08f, 2.599589181e-08f, 2.605119570e-08f, 2.610643766e-08f, 2.616161760e-08f, 2.621673544e-08f,
-2.627179111e-08f, 2.632678453e-08f, 2.638171561e-08f, 2.643658428e-08f, 2.649139047e-08f, 2.654613408e-08f, 2.660081505e-08f, 2.665543330e-08f, 2.670998874e-08f, 2.676448130e-08f,
-2.681891091e-08f, 2.687327748e-08f, 2.692758094e-08f, 2.698182121e-08f, 2.703599821e-08f, 2.709011187e-08f, 2.714416212e-08f, 2.719814886e-08f, 2.725207203e-08f, 2.730593155e-08f,
-2.735972734e-08f, 2.741345933e-08f, 2.746712744e-08f, 2.752073160e-08f, 2.757427173e-08f, 2.762774775e-08f, 2.768115959e-08f, 2.773450718e-08f, 2.778779043e-08f, 2.784100928e-08f,
-2.789416364e-08f, 2.794725345e-08f, 2.800027863e-08f, 2.805323910e-08f, 2.810613479e-08f, 2.815896563e-08f, 2.821173154e-08f, 2.826443245e-08f, 2.831706828e-08f, 2.836963896e-08f,
-2.842214441e-08f, 2.847458457e-08f, 2.852695936e-08f, 2.857926871e-08f, 2.863151254e-08f, 2.868369078e-08f, 2.873580336e-08f, 2.878785020e-08f, 2.883983124e-08f, 2.889174639e-08f,
-2.894359560e-08f, 2.899537878e-08f, 2.904709586e-08f, 2.909874678e-08f, 2.915033146e-08f, 2.920184983e-08f, 2.925330182e-08f, 2.930468735e-08f, 2.935600636e-08f, 2.940725877e-08f,
-2.945844452e-08f, 2.950956353e-08f, 2.956061574e-08f, 2.961160106e-08f, 2.966251944e-08f, 2.971337080e-08f, 2.976415508e-08f, 2.981487219e-08f, 2.986552208e-08f, 2.991610467e-08f,
-2.996661989e-08f, 3.001706768e-08f, 3.006744797e-08f, 3.011776067e-08f, 3.016800574e-08f, 3.021818310e-08f, 3.026829267e-08f, 3.031833440e-08f, 3.036830821e-08f, 3.041821403e-08f,
-3.046805180e-08f, 3.051782145e-08f, 3.056752292e-08f, 3.061715612e-08f, 3.066672100e-08f, 3.071621750e-08f, 3.076564553e-08f, 3.081500504e-08f, 3.086429595e-08f, 3.091351821e-08f,
-3.096267174e-08f, 3.101175648e-08f, 3.106077236e-08f, 3.110971932e-08f, 3.115859729e-08f, 3.120740620e-08f, 3.125614598e-08f, 3.130481658e-08f, 3.135341793e-08f, 3.140194996e-08f,
-3.145041260e-08f, 3.149880580e-08f, 3.154712948e-08f, 3.159538359e-08f, 3.164356805e-08f, 3.169168280e-08f, 3.173972778e-08f, 3.178770292e-08f, 3.183560817e-08f, 3.188344345e-08f,
-3.193120870e-08f, 3.197890386e-08f, 3.202652887e-08f, 3.207408366e-08f, 3.212156816e-08f, 3.216898232e-08f, 3.221632608e-08f, 3.226359936e-08f, 3.231080211e-08f, 3.235793427e-08f,
-3.240499576e-08f, 3.245198654e-08f, 3.249890653e-08f, 3.254575569e-08f, 3.259253393e-08f, 3.263924121e-08f, 3.268587746e-08f, 3.273244262e-08f, 3.277893663e-08f, 3.282535942e-08f,
-3.287171094e-08f, 3.291799113e-08f, 3.296419993e-08f, 3.301033727e-08f, 3.305640309e-08f, 3.310239734e-08f, 3.314831995e-08f, 3.319417086e-08f, 3.323995002e-08f, 3.328565737e-08f,
-3.333129284e-08f, 3.337685638e-08f, 3.342234792e-08f, 3.346776742e-08f, 3.351311480e-08f, 3.355839001e-08f, 3.360359300e-08f, 3.364872370e-08f, 3.369378205e-08f, 3.373876800e-08f,
-3.378368149e-08f, 3.382852246e-08f, 3.387329085e-08f, 3.391798661e-08f, 3.396260968e-08f, 3.400716000e-08f, 3.405163751e-08f, 3.409604216e-08f, 3.414037389e-08f, 3.418463265e-08f,
-3.422881837e-08f, 3.427293100e-08f, 3.431697049e-08f, 3.436093677e-08f, 3.440482980e-08f, 3.444864951e-08f, 3.449239585e-08f, 3.453606877e-08f, 3.457966821e-08f, 3.462319411e-08f,
-3.466664642e-08f, 3.471002509e-08f, 3.475333005e-08f, 3.479656126e-08f, 3.483971867e-08f, 3.488280220e-08f, 3.492581182e-08f, 3.496874747e-08f, 3.501160909e-08f, 3.505439663e-08f,
-3.509711004e-08f, 3.513974926e-08f, 3.518231425e-08f, 3.522480493e-08f, 3.526722128e-08f, 3.530956322e-08f, 3.535183071e-08f, 3.539402369e-08f, 3.543614212e-08f, 3.547818594e-08f,
-3.552015510e-08f, 3.556204954e-08f, 3.560386922e-08f, 3.564561409e-08f, 3.568728408e-08f, 3.572887915e-08f, 3.577039925e-08f, 3.581184433e-08f, 3.585321434e-08f, 3.589450922e-08f,
-3.593572893e-08f, 3.597687341e-08f, 3.601794262e-08f, 3.605893650e-08f, 3.609985500e-08f, 3.614069808e-08f, 3.618146568e-08f, 3.622215776e-08f, 3.626277426e-08f, 3.630331514e-08f,
-3.634378034e-08f, 3.638416982e-08f, 3.642448353e-08f, 3.646472142e-08f, 3.650488345e-08f, 3.654496955e-08f, 3.658497969e-08f, 3.662491381e-08f, 3.666477188e-08f, 3.670455383e-08f,
-3.674425963e-08f, 3.678388922e-08f, 3.682344257e-08f, 3.686291961e-08f, 3.690232030e-08f, 3.694164460e-08f, 3.698089247e-08f, 3.702006384e-08f, 3.705915868e-08f, 3.709817695e-08f,
-3.713711858e-08f, 3.717598355e-08f, 3.721477179e-08f, 3.725348328e-08f, 3.729211795e-08f, 3.733067577e-08f, 3.736915669e-08f, 3.740756066e-08f, 3.744588764e-08f, 3.748413759e-08f,
-3.752231046e-08f, 3.756040621e-08f, 3.759842478e-08f, 3.763636615e-08f, 3.767423025e-08f, 3.771201706e-08f, 3.774972652e-08f, 3.778735859e-08f, 3.782491323e-08f, 3.786239039e-08f,
-3.789979004e-08f, 3.793711212e-08f, 3.797435660e-08f, 3.801152343e-08f, 3.804861257e-08f, 3.808562398e-08f, 3.812255762e-08f, 3.815941343e-08f, 3.819619139e-08f, 3.823289145e-08f,
-3.826951357e-08f, 3.830605770e-08f, 3.834252381e-08f, 3.837891185e-08f, 3.841522178e-08f, 3.845145356e-08f, 3.848760715e-08f, 3.852368252e-08f, 3.855967961e-08f, 3.859559839e-08f,
-3.863143882e-08f, 3.866720086e-08f, 3.870288447e-08f, 3.873848960e-08f, 3.877401623e-08f, 3.880946430e-08f, 3.884483379e-08f, 3.888012465e-08f, 3.891533684e-08f, 3.895047032e-08f,
-3.898552506e-08f, 3.902050102e-08f, 3.905539815e-08f, 3.909021643e-08f, 3.912495580e-08f, 3.915961624e-08f, 3.919419770e-08f, 3.922870016e-08f, 3.926312356e-08f, 3.929746788e-08f,
-3.933173307e-08f, 3.936591910e-08f, 3.940002594e-08f, 3.943405354e-08f, 3.946800187e-08f, 3.950187089e-08f, 3.953566057e-08f, 3.956937087e-08f, 3.960300175e-08f, 3.963655319e-08f,
-3.967002513e-08f, 3.970341755e-08f, 3.973673042e-08f, 3.976996369e-08f, 3.980311733e-08f, 3.983619131e-08f, 3.986918559e-08f, 3.990210014e-08f, 3.993493492e-08f, 3.996768990e-08f,
-4.000036504e-08f, 4.003296031e-08f, 4.006547568e-08f, 4.009791112e-08f, 4.013026658e-08f, 4.016254204e-08f, 4.019473746e-08f, 4.022685281e-08f, 4.025888806e-08f, 4.029084317e-08f,
-4.032271811e-08f, 4.035451285e-08f, 4.038622736e-08f, 4.041786160e-08f, 4.044941554e-08f, 4.048088916e-08f, 4.051228241e-08f, 4.054359527e-08f, 4.057482770e-08f, 4.060597968e-08f,
-4.063705117e-08f, 4.066804214e-08f, 4.069895257e-08f, 4.072978241e-08f, 4.076053165e-08f, 4.079120025e-08f, 4.082178817e-08f, 4.085229539e-08f, 4.088272189e-08f, 4.091306762e-08f,
-4.094333257e-08f, 4.097351669e-08f, 4.100361997e-08f, 4.103364236e-08f, 4.106358386e-08f, 4.109344441e-08f, 4.112322400e-08f, 4.115292260e-08f, 4.118254018e-08f, 4.121207671e-08f,
-4.124153216e-08f, 4.127090651e-08f, 4.130019972e-08f, 4.132941177e-08f, 4.135854263e-08f, 4.138759228e-08f, 4.141656069e-08f, 4.144544782e-08f, 4.147425366e-08f, 4.150297817e-08f,
-4.153162134e-08f, 4.156018313e-08f, 4.158866351e-08f, 4.161706247e-08f, 4.164537997e-08f, 4.167361599e-08f, 4.170177051e-08f, 4.172984349e-08f, 4.175783492e-08f, 4.178574477e-08f,
-4.181357300e-08f, 4.184131961e-08f, 4.186898456e-08f, 4.189656783e-08f, 4.192406939e-08f, 4.195148922e-08f, 4.197882730e-08f, 4.200608359e-08f, 4.203325809e-08f, 4.206035076e-08f,
-4.208736158e-08f, 4.211429053e-08f, 4.214113758e-08f, 4.216790272e-08f, 4.219458591e-08f, 4.222118714e-08f, 4.224770638e-08f, 4.227414361e-08f, 4.230049881e-08f, 4.232677195e-08f,
-4.235296302e-08f, 4.237907199e-08f, 4.240509884e-08f, 4.243104355e-08f, 4.245690610e-08f, 4.248268646e-08f, 4.250838462e-08f, 4.253400055e-08f, 4.255953423e-08f, 4.258498565e-08f,
-4.261035478e-08f, 4.263564160e-08f, 4.266084609e-08f, 4.268596824e-08f, 4.271100802e-08f, 4.273596541e-08f, 4.276084039e-08f, 4.278563294e-08f, 4.281034305e-08f, 4.283497069e-08f,
-4.285951585e-08f, 4.288397851e-08f, 4.290835864e-08f, 4.293265623e-08f, 4.295687127e-08f, 4.298100373e-08f, 4.300505359e-08f, 4.302902084e-08f, 4.305290546e-08f, 4.307670743e-08f,
-4.310042674e-08f, 4.312406336e-08f, 4.314761728e-08f, 4.317108849e-08f, 4.319447696e-08f, 4.321778268e-08f, 4.324100564e-08f, 4.326414581e-08f, 4.328720318e-08f, 4.331017774e-08f,
-4.333306946e-08f, 4.335587834e-08f, 4.337860435e-08f, 4.340124749e-08f, 4.342380773e-08f, 4.344628506e-08f, 4.346867947e-08f, 4.349099094e-08f, 4.351321946e-08f, 4.353536501e-08f,
-4.355742757e-08f, 4.357940714e-08f, 4.360130370e-08f, 4.362311723e-08f, 4.364484772e-08f, 4.366649516e-08f, 4.368805954e-08f, 4.370954083e-08f, 4.373093904e-08f, 4.375225414e-08f,
-4.377348612e-08f, 4.379463496e-08f, 4.381570067e-08f, 4.383668322e-08f, 4.385758260e-08f, 4.387839880e-08f, 4.389913180e-08f, 4.391978161e-08f, 4.394034819e-08f, 4.396083155e-08f,
-4.398123167e-08f, 4.400154854e-08f, 4.402178215e-08f, 4.404193248e-08f, 4.406199953e-08f, 4.408198329e-08f, 4.410188375e-08f, 4.412170089e-08f, 4.414143470e-08f, 4.416108518e-08f,
-4.418065232e-08f, 4.420013610e-08f, 4.421953651e-08f, 4.423885356e-08f, 4.425808722e-08f, 4.427723749e-08f, 4.429630436e-08f, 4.431528781e-08f, 4.433418785e-08f, 4.435300447e-08f,
-4.437173765e-08f, 4.439038738e-08f, 4.440895366e-08f, 4.442743649e-08f, 4.444583584e-08f, 4.446415173e-08f, 4.448238413e-08f, 4.450053304e-08f, 4.451859845e-08f, 4.453658036e-08f,
-4.455447876e-08f, 4.457229364e-08f, 4.459002500e-08f, 4.460767282e-08f, 4.462523712e-08f, 4.464271786e-08f, 4.466011506e-08f, 4.467742871e-08f, 4.469465879e-08f, 4.471180531e-08f,
-4.472886826e-08f, 4.474584763e-08f, 4.476274342e-08f, 4.477955562e-08f, 4.479628423e-08f, 4.481292925e-08f, 4.482949067e-08f, 4.484596848e-08f, 4.486236268e-08f, 4.487867327e-08f,
-4.489490025e-08f, 4.491104360e-08f, 4.492710333e-08f, 4.494307943e-08f, 4.495897190e-08f, 4.497478074e-08f, 4.499050594e-08f, 4.500614751e-08f, 4.502170542e-08f, 4.503717970e-08f,
-4.505257033e-08f, 4.506787731e-08f, 4.508310063e-08f, 4.509824031e-08f, 4.511329633e-08f, 4.512826869e-08f, 4.514315739e-08f, 4.515796243e-08f, 4.517268382e-08f, 4.518732154e-08f,
-4.520187560e-08f, 4.521634599e-08f, 4.523073272e-08f, 4.524503579e-08f, 4.525925519e-08f, 4.527339093e-08f, 4.528744300e-08f, 4.530141141e-08f, 4.531529615e-08f, 4.532909723e-08f,
-4.534281464e-08f, 4.535644839e-08f, 4.536999849e-08f, 4.538346491e-08f, 4.539684768e-08f, 4.541014680e-08f, 4.542336225e-08f, 4.543649405e-08f, 4.544954220e-08f, 4.546250669e-08f,
-4.547538753e-08f, 4.548818473e-08f, 4.550089829e-08f, 4.551352820e-08f, 4.552607447e-08f, 4.553853710e-08f, 4.555091610e-08f, 4.556321147e-08f, 4.557542321e-08f, 4.558755133e-08f,
-4.559959583e-08f, 4.561155671e-08f, 4.562343397e-08f, 4.563522763e-08f, 4.564693769e-08f, 4.565856414e-08f, 4.567010700e-08f, 4.568156626e-08f, 4.569294194e-08f, 4.570423403e-08f,
-4.571544255e-08f, 4.572656750e-08f, 4.573760888e-08f, 4.574856670e-08f, 4.575944096e-08f, 4.577023168e-08f, 4.578093885e-08f, 4.579156248e-08f, 4.580210258e-08f, 4.581255916e-08f,
-4.582293221e-08f, 4.583322176e-08f, 4.584342780e-08f, 4.585355034e-08f, 4.586358939e-08f, 4.587354495e-08f, 4.588341704e-08f, 4.589320566e-08f, 4.590291082e-08f, 4.591253252e-08f,
-4.592207078e-08f, 4.593152560e-08f, 4.594089699e-08f, 4.595018496e-08f, 4.595938951e-08f, 4.596851066e-08f, 4.597754842e-08f, 4.598650279e-08f, 4.599537379e-08f, 4.600416141e-08f,
-4.601286568e-08f, 4.602148660e-08f, 4.603002418e-08f, 4.603847843e-08f, 4.604684936e-08f, 4.605513698e-08f, 4.606334130e-08f, 4.607146233e-08f, 4.607950009e-08f, 4.608745457e-08f,
-4.609532581e-08f, 4.610311379e-08f, 4.611081854e-08f, 4.611844007e-08f, 4.612597839e-08f, 4.613343350e-08f, 4.614080543e-08f, 4.614809418e-08f, 4.615529977e-08f, 4.616242220e-08f,
-4.616946149e-08f, 4.617641766e-08f, 4.618329071e-08f, 4.619008066e-08f, 4.619678752e-08f, 4.620341130e-08f, 4.620995202e-08f, 4.621640969e-08f, 4.622278432e-08f, 4.622907593e-08f,
-4.623528453e-08f, 4.624141013e-08f, 4.624745275e-08f, 4.625341241e-08f, 4.625928911e-08f, 4.626508288e-08f, 4.627079371e-08f, 4.627642164e-08f, 4.628196668e-08f, 4.628742884e-08f,
-4.629280813e-08f, 4.629810457e-08f, 4.630331818e-08f, 4.630844897e-08f, 4.631349696e-08f, 4.631846216e-08f, 4.632334459e-08f, 4.632814427e-08f, 4.633286121e-08f, 4.633749543e-08f,
-4.634204694e-08f, 4.634651577e-08f, 4.635090192e-08f, 4.635520542e-08f, 4.635942628e-08f, 4.636356452e-08f, 4.636762016e-08f, 4.637159321e-08f, 4.637548370e-08f, 4.637929164e-08f,
-4.638301704e-08f, 4.638665994e-08f, 4.639022033e-08f, 4.639369825e-08f, 4.639709372e-08f, 4.640040674e-08f, 4.640363734e-08f, 4.640678554e-08f, 4.640985136e-08f, 4.641283482e-08f,
-4.641573593e-08f, 4.641855472e-08f, 4.642129120e-08f, 4.642394540e-08f, 4.642651733e-08f, 4.642900702e-08f, 4.643141448e-08f, 4.643373974e-08f, 4.643598282e-08f, 4.643814373e-08f,
-4.644022250e-08f, 4.644221915e-08f, 4.644413370e-08f, 4.644596617e-08f, 4.644771658e-08f, 4.644938496e-08f, 4.645097132e-08f, 4.645247569e-08f, 4.645389809e-08f, 4.645523853e-08f,
-4.645649706e-08f, 4.645767368e-08f, 4.645876841e-08f, 4.645978129e-08f, 4.646071233e-08f, 4.646156156e-08f, 4.646232900e-08f, 4.646301467e-08f, 4.646361859e-08f, 4.646414080e-08f,
-4.646458130e-08f, 4.646494014e-08f, 4.646521732e-08f, 4.646541288e-08f, 4.646552684e-08f, 4.646555922e-08f, 4.646551005e-08f, 4.646537935e-08f, 4.646516714e-08f, 4.646487346e-08f,
-4.646449832e-08f, 4.646404176e-08f, 4.646350379e-08f, 4.646288444e-08f, 4.646218374e-08f, 4.646140172e-08f, 4.646053839e-08f, 4.645959378e-08f, 4.645856793e-08f, 4.645746085e-08f,
-4.645627258e-08f, 4.645500314e-08f, 4.645365255e-08f, 4.645222085e-08f, 4.645070805e-08f, 4.644911419e-08f, 4.644743930e-08f, 4.644568340e-08f, 4.644384651e-08f, 4.644192867e-08f,
-4.643992991e-08f, 4.643785025e-08f, 4.643568971e-08f, 4.643344834e-08f, 4.643112615e-08f, 4.642872317e-08f, 4.642623944e-08f, 4.642367498e-08f, 4.642102981e-08f, 4.641830398e-08f,
-4.641549751e-08f, 4.641261042e-08f, 4.640964275e-08f, 4.640659452e-08f, 4.640346577e-08f, 4.640025652e-08f, 4.639696681e-08f, 4.639359667e-08f, 4.639014611e-08f, 4.638661519e-08f,
-4.638300392e-08f, 4.637931233e-08f, 4.637554046e-08f, 4.637168834e-08f, 4.636775600e-08f, 4.636374347e-08f, 4.635965077e-08f, 4.635547795e-08f, 4.635122503e-08f, 4.634689205e-08f,
-4.634247903e-08f, 4.633798602e-08f, 4.633341303e-08f, 4.632876010e-08f, 4.632402727e-08f, 4.631921456e-08f, 4.631432202e-08f, 4.630934966e-08f, 4.630429753e-08f, 4.629916566e-08f,
-4.629395408e-08f, 4.628866282e-08f, 4.628329192e-08f, 4.627784141e-08f, 4.627231133e-08f, 4.626670170e-08f, 4.626101256e-08f, 4.625524395e-08f, 4.624939590e-08f, 4.624346844e-08f,
-4.623746161e-08f, 4.623137544e-08f, 4.622520997e-08f, 4.621896523e-08f, 4.621264126e-08f, 4.620623809e-08f, 4.619975575e-08f, 4.619319429e-08f, 4.618655374e-08f, 4.617983412e-08f,
-4.617303549e-08f, 4.616615787e-08f, 4.615920130e-08f, 4.615216581e-08f, 4.614505145e-08f, 4.613785824e-08f, 4.613058624e-08f, 4.612323546e-08f, 4.611580595e-08f, 4.610829774e-08f,
-4.610071088e-08f, 4.609304539e-08f, 4.608530132e-08f, 4.607747871e-08f, 4.606957758e-08f, 4.606159799e-08f, 4.605353996e-08f, 4.604540353e-08f, 4.603718874e-08f, 4.602889564e-08f,
-4.602052425e-08f, 4.601207462e-08f, 4.600354678e-08f, 4.599494078e-08f, 4.598625665e-08f, 4.597749442e-08f, 4.596865415e-08f, 4.595973587e-08f, 4.595073962e-08f, 4.594166543e-08f,
-4.593251335e-08f, 4.592328342e-08f, 4.591397567e-08f, 4.590459015e-08f, 4.589512689e-08f, 4.588558594e-08f, 4.587596734e-08f, 4.586627113e-08f, 4.585649734e-08f, 4.584664602e-08f,
-4.583671720e-08f, 4.582671094e-08f, 4.581662727e-08f, 4.580646622e-08f, 4.579622786e-08f, 4.578591220e-08f, 4.577551930e-08f, 4.576504920e-08f, 4.575450194e-08f, 4.574387755e-08f,
-4.573317609e-08f, 4.572239760e-08f, 4.571154211e-08f, 4.570060967e-08f, 4.568960032e-08f, 4.567851411e-08f, 4.566735107e-08f, 4.565611126e-08f, 4.564479470e-08f, 4.563340146e-08f,
-4.562193156e-08f, 4.561038505e-08f, 4.559876198e-08f, 4.558706239e-08f, 4.557528633e-08f, 4.556343383e-08f, 4.555150494e-08f, 4.553949971e-08f, 4.552741817e-08f, 4.551526038e-08f,
-4.550302638e-08f, 4.549071621e-08f, 4.547832992e-08f, 4.546586755e-08f, 4.545332915e-08f, 4.544071475e-08f, 4.542802442e-08f, 4.541525819e-08f, 4.540241611e-08f, 4.538949822e-08f,
-4.537650457e-08f, 4.536343520e-08f, 4.535029017e-08f, 4.533706951e-08f, 4.532377327e-08f, 4.531040151e-08f, 4.529695426e-08f, 4.528343157e-08f, 4.526983349e-08f, 4.525616007e-08f,
-4.524241134e-08f, 4.522858737e-08f, 4.521468820e-08f, 4.520071386e-08f, 4.518666442e-08f, 4.517253992e-08f, 4.515834040e-08f, 4.514406592e-08f, 4.512971652e-08f, 4.511529225e-08f,
-4.510079315e-08f, 4.508621928e-08f, 4.507157068e-08f, 4.505684741e-08f, 4.504204951e-08f, 4.502717703e-08f, 4.501223001e-08f, 4.499720851e-08f, 4.498211258e-08f, 4.496694226e-08f,
-4.495169761e-08f, 4.493637867e-08f, 4.492098550e-08f, 4.490551813e-08f, 4.488997663e-08f, 4.487436104e-08f, 4.485867142e-08f, 4.484290780e-08f, 4.482707025e-08f, 4.481115881e-08f,
-4.479517354e-08f, 4.477911448e-08f, 4.476298168e-08f, 4.474677520e-08f, 4.473049508e-08f, 4.471414138e-08f, 4.469771414e-08f, 4.468121343e-08f, 4.466463929e-08f, 4.464799177e-08f,
-4.463127092e-08f, 4.461447679e-08f, 4.459760945e-08f, 4.458066893e-08f, 4.456365529e-08f, 4.454656859e-08f, 4.452940887e-08f, 4.451217618e-08f, 4.449487059e-08f, 4.447749214e-08f,
-4.446004089e-08f, 4.444251688e-08f, 4.442492017e-08f, 4.440725082e-08f, 4.438950887e-08f, 4.437169439e-08f, 4.435380741e-08f, 4.433584801e-08f, 4.431781622e-08f, 4.429971211e-08f,
-4.428153573e-08f, 4.426328713e-08f, 4.424496637e-08f, 4.422657349e-08f, 4.420810856e-08f, 4.418957163e-08f, 4.417096275e-08f, 4.415228198e-08f, 4.413352938e-08f, 4.411470499e-08f,
-4.409580887e-08f, 4.407684108e-08f, 4.405780167e-08f, 4.403869071e-08f, 4.401950823e-08f, 4.400025430e-08f, 4.398092898e-08f, 4.396153232e-08f, 4.394206437e-08f, 4.392252519e-08f,
-4.390291485e-08f, 4.388323338e-08f, 4.386348086e-08f, 4.384365733e-08f, 4.382376286e-08f, 4.380379749e-08f, 4.378376129e-08f, 4.376365432e-08f, 4.374347662e-08f, 4.372322827e-08f,
-4.370290930e-08f, 4.368251979e-08f, 4.366205978e-08f, 4.364152935e-08f, 4.362092853e-08f, 4.360025740e-08f, 4.357951600e-08f, 4.355870441e-08f, 4.353782267e-08f, 4.351687084e-08f,
-4.349584898e-08f, 4.347475715e-08f, 4.345359541e-08f, 4.343236381e-08f, 4.341106243e-08f, 4.338969130e-08f, 4.336825050e-08f, 4.334674008e-08f, 4.332516010e-08f, 4.330351062e-08f,
-4.328179169e-08f, 4.326000339e-08f, 4.323814577e-08f, 4.321621888e-08f, 4.319422279e-08f, 4.317215755e-08f, 4.315002324e-08f, 4.312781990e-08f, 4.310554759e-08f, 4.308320639e-08f,
-4.306079634e-08f, 4.303831751e-08f, 4.301576995e-08f, 4.299315374e-08f, 4.297046893e-08f, 4.294771557e-08f, 4.292489374e-08f, 4.290200349e-08f, 4.287904488e-08f, 4.285601798e-08f,
-4.283292285e-08f, 4.280975954e-08f, 4.278652812e-08f, 4.276322865e-08f, 4.273986120e-08f, 4.271642582e-08f, 4.269292257e-08f, 4.266935153e-08f, 4.264571274e-08f, 4.262200628e-08f,
-4.259823220e-08f, 4.257439057e-08f, 4.255048146e-08f, 4.252650491e-08f, 4.250246100e-08f, 4.247834979e-08f, 4.245417134e-08f, 4.242992571e-08f, 4.240561297e-08f, 4.238123318e-08f,
-4.235678641e-08f, 4.233227272e-08f, 4.230769216e-08f, 4.228304481e-08f, 4.225833073e-08f, 4.223354999e-08f, 4.220870264e-08f, 4.218378875e-08f, 4.215880838e-08f, 4.213376161e-08f,
-4.210864849e-08f, 4.208346908e-08f, 4.205822346e-08f, 4.203291169e-08f, 4.200753382e-08f, 4.198208994e-08f, 4.195658009e-08f, 4.193100436e-08f, 4.190536279e-08f, 4.187965546e-08f,
-4.185388244e-08f, 4.182804378e-08f, 4.180213956e-08f, 4.177616983e-08f, 4.175013467e-08f, 4.172403414e-08f, 4.169786831e-08f, 4.167163724e-08f, 4.164534100e-08f, 4.161897965e-08f,
-4.159255327e-08f, 4.156606191e-08f, 4.153950565e-08f, 4.151288454e-08f, 4.148619867e-08f, 4.145944809e-08f, 4.143263287e-08f, 4.140575307e-08f, 4.137880878e-08f, 4.135180004e-08f,
-4.132472693e-08f, 4.129758953e-08f, 4.127038788e-08f, 4.124312207e-08f, 4.121579215e-08f, 4.118839821e-08f, 4.116094030e-08f, 4.113341849e-08f, 4.110583285e-08f, 4.107818345e-08f,
-4.105047036e-08f, 4.102269364e-08f, 4.099485337e-08f, 4.096694961e-08f, 4.093898243e-08f, 4.091095189e-08f, 4.088285808e-08f, 4.085470106e-08f, 4.082648089e-08f, 4.079819764e-08f,
-4.076985139e-08f, 4.074144220e-08f, 4.071297015e-08f, 4.068443529e-08f, 4.065583771e-08f, 4.062717747e-08f, 4.059845464e-08f, 4.056966929e-08f, 4.054082149e-08f, 4.051191130e-08f,
-4.048293881e-08f, 4.045390408e-08f, 4.042480718e-08f, 4.039564818e-08f, 4.036642715e-08f, 4.033714416e-08f, 4.030779929e-08f, 4.027839259e-08f, 4.024892415e-08f, 4.021939404e-08f,
-4.018980231e-08f, 4.016014906e-08f, 4.013043434e-08f, 4.010065823e-08f, 4.007082080e-08f, 4.004092212e-08f, 4.001096226e-08f, 3.998094129e-08f, 3.995085929e-08f, 3.992071633e-08f,
-3.989051248e-08f, 3.986024780e-08f, 3.982992238e-08f, 3.979953628e-08f, 3.976908958e-08f, 3.973858235e-08f, 3.970801466e-08f, 3.967738658e-08f, 3.964669819e-08f, 3.961594956e-08f,
-3.958514076e-08f, 3.955427186e-08f, 3.952334293e-08f, 3.949235406e-08f, 3.946130531e-08f, 3.943019676e-08f, 3.939902847e-08f, 3.936780053e-08f, 3.933651300e-08f, 3.930516596e-08f,
-3.927375948e-08f, 3.924229363e-08f, 3.921076850e-08f, 3.917918415e-08f, 3.914754065e-08f, 3.911583809e-08f, 3.908407653e-08f, 3.905225604e-08f, 3.902037672e-08f, 3.898843861e-08f,
-3.895644181e-08f, 3.892438639e-08f, 3.889227241e-08f, 3.886009996e-08f, 3.882786911e-08f, 3.879557993e-08f, 3.876323250e-08f, 3.873082689e-08f, 3.869836318e-08f, 3.866584145e-08f,
-3.863326176e-08f, 3.860062420e-08f, 3.856792883e-08f, 3.853517574e-08f, 3.850236500e-08f, 3.846949669e-08f, 3.843657087e-08f, 3.840358764e-08f, 3.837054705e-08f, 3.833744919e-08f,
-3.830429414e-08f, 3.827108197e-08f, 3.823781275e-08f, 3.820448656e-08f, 3.817110349e-08f, 3.813766359e-08f, 3.810416696e-08f, 3.807061367e-08f, 3.803700379e-08f, 3.800333740e-08f,
-3.796961457e-08f, 3.793583539e-08f, 3.790199993e-08f, 3.786810827e-08f, 3.783416049e-08f, 3.780015665e-08f, 3.776609685e-08f, 3.773198115e-08f, 3.769780963e-08f, 3.766358238e-08f,
-3.762929946e-08f, 3.759496096e-08f, 3.756056695e-08f, 3.752611751e-08f, 3.749161272e-08f, 3.745705266e-08f, 3.742243740e-08f, 3.738776702e-08f, 3.735304161e-08f, 3.731826123e-08f,
-3.728342597e-08f, 3.724853590e-08f, 3.721359111e-08f, 3.717859167e-08f, 3.714353766e-08f, 3.710842916e-08f, 3.707326624e-08f, 3.703804899e-08f, 3.700277749e-08f, 3.696745181e-08f,
-3.693207203e-08f, 3.689663823e-08f, 3.686115050e-08f, 3.682560890e-08f, 3.679001352e-08f, 3.675436444e-08f, 3.671866174e-08f, 3.668290550e-08f, 3.664709579e-08f, 3.661123270e-08f,
-3.657531630e-08f, 3.653934668e-08f, 3.650332391e-08f, 3.646724808e-08f, 3.643111927e-08f, 3.639493754e-08f, 3.635870300e-08f, 3.632241571e-08f, 3.628607575e-08f, 3.624968321e-08f,
-3.621323816e-08f, 3.617674069e-08f, 3.614019088e-08f, 3.610358881e-08f, 3.606693455e-08f, 3.603022819e-08f, 3.599346981e-08f, 3.595665949e-08f, 3.591979731e-08f, 3.588288335e-08f,
-3.584591770e-08f, 3.580890043e-08f, 3.577183162e-08f, 3.573471136e-08f, 3.569753973e-08f, 3.566031681e-08f, 3.562304268e-08f, 3.558571742e-08f, 3.554834111e-08f, 3.551091384e-08f,
-3.547343568e-08f, 3.543590672e-08f, 3.539832705e-08f, 3.536069673e-08f, 3.532301586e-08f, 3.528528451e-08f, 3.524750278e-08f, 3.520967073e-08f, 3.517178845e-08f, 3.513385603e-08f,
-3.509587355e-08f, 3.505784109e-08f, 3.501975872e-08f, 3.498162655e-08f, 3.494344463e-08f, 3.490521307e-08f, 3.486693194e-08f, 3.482860133e-08f, 3.479022131e-08f, 3.475179198e-08f,
-3.471331341e-08f, 3.467478568e-08f, 3.463620888e-08f, 3.459758310e-08f, 3.455890841e-08f, 3.452018491e-08f, 3.448141266e-08f, 3.444259176e-08f, 3.440372229e-08f, 3.436480434e-08f,
-3.432583798e-08f, 3.428682330e-08f, 3.424776038e-08f, 3.420864932e-08f, 3.416949018e-08f, 3.413028306e-08f, 3.409102804e-08f, 3.405172520e-08f, 3.401237463e-08f, 3.397297641e-08f,
-3.393353063e-08f, 3.389403736e-08f, 3.385449670e-08f, 3.381490873e-08f, 3.377527353e-08f, 3.373559119e-08f, 3.369586179e-08f, 3.365608542e-08f, 3.361626216e-08f, 3.357639210e-08f,
-3.353647531e-08f, 3.349651189e-08f, 3.345650192e-08f, 3.341644549e-08f, 3.337634267e-08f, 3.333619356e-08f, 3.329599824e-08f, 3.325575680e-08f, 3.321546932e-08f, 3.317513588e-08f,
-3.313475657e-08f, 3.309433148e-08f, 3.305386070e-08f, 3.301334430e-08f, 3.297278237e-08f, 3.293217500e-08f, 3.289152228e-08f, 3.285082428e-08f, 3.281008110e-08f, 3.276929283e-08f,
-3.272845954e-08f, 3.268758132e-08f, 3.264665826e-08f, 3.260569045e-08f, 3.256467797e-08f, 3.252362091e-08f, 3.248251935e-08f, 3.244137338e-08f, 3.240018308e-08f, 3.235894855e-08f,
-3.231766987e-08f, 3.227634712e-08f, 3.223498040e-08f, 3.219356978e-08f, 3.215211536e-08f, 3.211061722e-08f, 3.206907545e-08f, 3.202749013e-08f, 3.198586136e-08f, 3.194418921e-08f,
-3.190247378e-08f, 3.186071515e-08f, 3.181891342e-08f, 3.177706866e-08f, 3.173518096e-08f, 3.169325041e-08f, 3.165127710e-08f, 3.160926112e-08f, 3.156720255e-08f, 3.152510148e-08f,
-3.148295800e-08f, 3.144077219e-08f, 3.139854415e-08f, 3.135627395e-08f, 3.131396170e-08f, 3.127160747e-08f, 3.122921135e-08f, 3.118677343e-08f, 3.114429380e-08f, 3.110177255e-08f,
-3.105920976e-08f, 3.101660552e-08f, 3.097395992e-08f, 3.093127306e-08f, 3.088854500e-08f, 3.084577586e-08f, 3.080296570e-08f, 3.076011463e-08f, 3.071722272e-08f, 3.067429007e-08f,
-3.063131677e-08f, 3.058830290e-08f, 3.054524855e-08f, 3.050215382e-08f, 3.045901878e-08f, 3.041584353e-08f, 3.037262816e-08f, 3.032937276e-08f, 3.028607741e-08f, 3.024274220e-08f,
-3.019936722e-08f, 3.015595256e-08f, 3.011249831e-08f, 3.006900456e-08f, 3.002547140e-08f, 2.998189891e-08f, 2.993828719e-08f, 2.989463633e-08f, 2.985094640e-08f, 2.980721751e-08f,
-2.976344974e-08f, 2.971964319e-08f, 2.967579793e-08f, 2.963191406e-08f, 2.958799167e-08f, 2.954403085e-08f, 2.950003169e-08f, 2.945599428e-08f, 2.941191870e-08f, 2.936780505e-08f,
-2.932365342e-08f, 2.927946389e-08f, 2.923523656e-08f, 2.919097151e-08f, 2.914666884e-08f, 2.910232863e-08f, 2.905795098e-08f, 2.901353597e-08f, 2.896908370e-08f, 2.892459425e-08f,
-2.888006772e-08f, 2.883550419e-08f, 2.879090376e-08f, 2.874626652e-08f, 2.870159254e-08f, 2.865688194e-08f, 2.861213479e-08f, 2.856735118e-08f, 2.852253121e-08f, 2.847767497e-08f,
-2.843278255e-08f, 2.838785403e-08f, 2.834288951e-08f, 2.829788909e-08f, 2.825285283e-08f, 2.820778085e-08f, 2.816267323e-08f, 2.811753006e-08f, 2.807235144e-08f, 2.802713744e-08f,
-2.798188817e-08f, 2.793660371e-08f, 2.789128416e-08f, 2.784592960e-08f, 2.780054013e-08f, 2.775511583e-08f, 2.770965681e-08f, 2.766416314e-08f, 2.761863493e-08f, 2.757307225e-08f,
-2.752747521e-08f, 2.748184390e-08f, 2.743617839e-08f, 2.739047880e-08f, 2.734474520e-08f, 2.729897769e-08f, 2.725317636e-08f, 2.720734130e-08f, 2.716147261e-08f, 2.711557037e-08f,
-2.706963467e-08f, 2.702366561e-08f, 2.697766328e-08f, 2.693162777e-08f, 2.688555917e-08f, 2.683945757e-08f, 2.679332307e-08f, 2.674715576e-08f, 2.670095572e-08f, 2.665472305e-08f,
-2.660845785e-08f, 2.656216020e-08f, 2.651583019e-08f, 2.646946792e-08f, 2.642307348e-08f, 2.637664696e-08f, 2.633018845e-08f, 2.628369805e-08f, 2.623717584e-08f, 2.619062192e-08f,
-2.614403638e-08f, 2.609741931e-08f, 2.605077081e-08f, 2.600409097e-08f, 2.595737987e-08f, 2.591063762e-08f, 2.586386430e-08f, 2.581706000e-08f, 2.577022482e-08f, 2.572335885e-08f,
-2.567646219e-08f, 2.562953491e-08f, 2.558257713e-08f, 2.553558892e-08f, 2.548857039e-08f, 2.544152162e-08f, 2.539444271e-08f, 2.534733374e-08f, 2.530019482e-08f, 2.525302603e-08f,
-2.520582747e-08f, 2.515859923e-08f, 2.511134140e-08f, 2.506405407e-08f, 2.501673734e-08f, 2.496939130e-08f, 2.492201604e-08f, 2.487461166e-08f, 2.482717825e-08f, 2.477971589e-08f,
-2.473222469e-08f, 2.468470474e-08f, 2.463715612e-08f, 2.458957894e-08f, 2.454197328e-08f, 2.449433925e-08f, 2.444667692e-08f, 2.439898639e-08f, 2.435126776e-08f, 2.430352112e-08f,
-2.425574657e-08f, 2.420794419e-08f, 2.416011407e-08f, 2.411225632e-08f, 2.406437103e-08f, 2.401645828e-08f, 2.396851817e-08f, 2.392055080e-08f, 2.387255626e-08f, 2.382453463e-08f,
-2.377648602e-08f, 2.372841052e-08f, 2.368030822e-08f, 2.363217921e-08f, 2.358402359e-08f, 2.353584145e-08f, 2.348763288e-08f, 2.343939798e-08f, 2.339113684e-08f, 2.334284955e-08f,
-2.329453621e-08f, 2.324619691e-08f, 2.319783174e-08f, 2.314944081e-08f, 2.310102419e-08f, 2.305258199e-08f, 2.300411429e-08f, 2.295562120e-08f, 2.290710280e-08f, 2.285855919e-08f,
-2.280999046e-08f, 2.276139671e-08f, 2.271277802e-08f, 2.266413450e-08f, 2.261546624e-08f, 2.256677333e-08f, 2.251805586e-08f, 2.246931392e-08f, 2.242054762e-08f, 2.237175705e-08f,
-2.232294229e-08f, 2.227410344e-08f, 2.222524060e-08f, 2.217635386e-08f, 2.212744332e-08f, 2.207850906e-08f, 2.202955118e-08f, 2.198056978e-08f, 2.193156495e-08f, 2.188253678e-08f,
-2.183348537e-08f, 2.178441080e-08f, 2.173531318e-08f, 2.168619260e-08f, 2.163704915e-08f, 2.158788293e-08f, 2.153869403e-08f, 2.148948254e-08f, 2.144024856e-08f, 2.139099218e-08f,
-2.134171350e-08f, 2.129241261e-08f, 2.124308960e-08f, 2.119374457e-08f, 2.114437761e-08f, 2.109498881e-08f, 2.104557828e-08f, 2.099614610e-08f, 2.094669237e-08f, 2.089721718e-08f,
-2.084772063e-08f, 2.079820280e-08f, 2.074866381e-08f, 2.069910373e-08f, 2.064952266e-08f, 2.059992070e-08f, 2.055029794e-08f, 2.050065447e-08f, 2.045099040e-08f, 2.040130580e-08f,
-2.035160079e-08f, 2.030187544e-08f, 2.025212987e-08f, 2.020236415e-08f, 2.015257838e-08f, 2.010277267e-08f, 2.005294710e-08f, 2.000310176e-08f, 1.995323675e-08f, 1.990335217e-08f,
-1.985344811e-08f, 1.980352467e-08f, 1.975358193e-08f, 1.970361999e-08f, 1.965363895e-08f, 1.960363890e-08f, 1.955361993e-08f, 1.950358214e-08f, 1.945352563e-08f, 1.940345049e-08f,
-1.935335680e-08f, 1.930324468e-08f, 1.925311420e-08f, 1.920296547e-08f, 1.915279857e-08f, 1.910261361e-08f, 1.905241068e-08f, 1.900218987e-08f, 1.895195128e-08f, 1.890169499e-08f,
-1.885142112e-08f, 1.880112974e-08f, 1.875082095e-08f, 1.870049485e-08f, 1.865015154e-08f, 1.859979110e-08f, 1.854941363e-08f, 1.849901922e-08f, 1.844860798e-08f, 1.839817999e-08f,
-1.834773535e-08f, 1.829727415e-08f, 1.824679648e-08f, 1.819630245e-08f, 1.814579214e-08f, 1.809526566e-08f, 1.804472308e-08f, 1.799416452e-08f, 1.794359005e-08f, 1.789299979e-08f,
-1.784239381e-08f, 1.779177222e-08f, 1.774113511e-08f, 1.769048258e-08f, 1.763981471e-08f, 1.758913161e-08f, 1.753843336e-08f, 1.748772007e-08f, 1.743699182e-08f, 1.738624871e-08f,
-1.733549084e-08f, 1.728471829e-08f, 1.723393117e-08f, 1.718312956e-08f, 1.713231357e-08f, 1.708148328e-08f, 1.703063879e-08f, 1.697978020e-08f, 1.692890759e-08f, 1.687802107e-08f,
-1.682712072e-08f, 1.677620665e-08f, 1.672527894e-08f, 1.667433769e-08f, 1.662338300e-08f, 1.657241495e-08f, 1.652143365e-08f, 1.647043919e-08f, 1.641943165e-08f, 1.636841114e-08f,
-1.631737775e-08f, 1.626633158e-08f, 1.621527271e-08f, 1.616420124e-08f, 1.611311728e-08f, 1.606202090e-08f, 1.601091220e-08f, 1.595979129e-08f, 1.590865825e-08f, 1.585751317e-08f,
-1.580635616e-08f, 1.575518730e-08f, 1.570400670e-08f, 1.565281443e-08f, 1.560161061e-08f, 1.555039531e-08f, 1.549916864e-08f, 1.544793070e-08f, 1.539668156e-08f, 1.534542134e-08f,
-1.529415012e-08f, 1.524286799e-08f, 1.519157505e-08f, 1.514027140e-08f, 1.508895713e-08f, 1.503763233e-08f, 1.498629710e-08f, 1.493495152e-08f, 1.488359571e-08f, 1.483222974e-08f,
-1.478085371e-08f, 1.472946772e-08f, 1.467807186e-08f, 1.462666622e-08f, 1.457525090e-08f, 1.452382600e-08f, 1.447239160e-08f, 1.442094780e-08f, 1.436949469e-08f, 1.431803237e-08f,
-1.426656094e-08f, 1.421508047e-08f, 1.416359108e-08f, 1.411209285e-08f, 1.406058588e-08f, 1.400907025e-08f, 1.395754608e-08f, 1.390601343e-08f, 1.385447243e-08f, 1.380292314e-08f,
-1.375136568e-08f, 1.369980013e-08f, 1.364822658e-08f, 1.359664514e-08f, 1.354505588e-08f, 1.349345892e-08f, 1.344185434e-08f, 1.339024223e-08f, 1.333862269e-08f, 1.328699581e-08f,
-1.323536169e-08f, 1.318372041e-08f, 1.313207208e-08f, 1.308041679e-08f, 1.302875462e-08f, 1.297708568e-08f, 1.292541005e-08f, 1.287372784e-08f, 1.282203912e-08f, 1.277034400e-08f,
-1.271864258e-08f, 1.266693493e-08f, 1.261522117e-08f, 1.256350137e-08f, 1.251177564e-08f, 1.246004406e-08f, 1.240830673e-08f, 1.235656375e-08f, 1.230481520e-08f, 1.225306118e-08f,
-1.220130179e-08f, 1.214953711e-08f, 1.209776724e-08f, 1.204599228e-08f, 1.199421231e-08f, 1.194242742e-08f, 1.189063772e-08f, 1.183884330e-08f, 1.178704424e-08f, 1.173524064e-08f,
-1.168343260e-08f, 1.163162020e-08f, 1.157980354e-08f, 1.152798272e-08f, 1.147615782e-08f, 1.142432894e-08f, 1.137249617e-08f, 1.132065961e-08f, 1.126881934e-08f, 1.121697547e-08f,
-1.116512807e-08f, 1.111327725e-08f, 1.106142310e-08f, 1.100956572e-08f, 1.095770518e-08f, 1.090584159e-08f, 1.085397504e-08f, 1.080210562e-08f, 1.075023343e-08f, 1.069835855e-08f,
-1.064648108e-08f, 1.059460112e-08f, 1.054271875e-08f, 1.049083406e-08f, 1.043894716e-08f, 1.038705812e-08f, 1.033516706e-08f, 1.028327404e-08f, 1.023137918e-08f, 1.017948256e-08f,
-1.012758427e-08f, 1.007568441e-08f, 1.002378306e-08f, 9.971880329e-09f, 9.919976298e-09f, 9.868071061e-09f, 9.816164712e-09f, 9.764257342e-09f, 9.712349043e-09f, 9.660439907e-09f,
-9.608530027e-09f, 9.556619494e-09f, 9.504708400e-09f, 9.452796838e-09f, 9.400884899e-09f, 9.348972675e-09f, 9.297060258e-09f, 9.245147740e-09f, 9.193235213e-09f, 9.141322768e-09f,
-9.089410498e-09f, 9.037498493e-09f, 8.985586847e-09f, 8.933675649e-09f, 8.881764993e-09f, 8.829854970e-09f, 8.777945671e-09f, 8.726037188e-09f, 8.674129612e-09f, 8.622223036e-09f,
-8.570317549e-09f, 8.518413245e-09f, 8.466510213e-09f, 8.414608547e-09f, 8.362708336e-09f, 8.310809673e-09f, 8.258912648e-09f, 8.207017354e-09f, 8.155123880e-09f, 8.103232319e-09f,
-8.051342761e-09f, 7.999455297e-09f, 7.947570020e-09f, 7.895687019e-09f, 7.843806386e-09f, 7.791928212e-09f, 7.740052588e-09f, 7.688179604e-09f, 7.636309352e-09f, 7.584441923e-09f,
-7.532577407e-09f, 7.480715895e-09f, 7.428857478e-09f, 7.377002247e-09f, 7.325150292e-09f, 7.273301704e-09f, 7.221456574e-09f, 7.169614992e-09f, 7.117777050e-09f, 7.065942836e-09f,
-7.014112443e-09f, 6.962285960e-09f, 6.910463477e-09f, 6.858645086e-09f, 6.806830877e-09f, 6.755020939e-09f, 6.703215364e-09f, 6.651414241e-09f, 6.599617661e-09f, 6.547825714e-09f,
-6.496038489e-09f, 6.444256078e-09f, 6.392478570e-09f, 6.340706055e-09f, 6.288938623e-09f, 6.237176365e-09f, 6.185419370e-09f, 6.133667727e-09f, 6.081921528e-09f, 6.030180861e-09f,
-5.978445817e-09f, 5.926716485e-09f, 5.874992954e-09f, 5.823275316e-09f, 5.771563658e-09f, 5.719858071e-09f, 5.668158645e-09f, 5.616465468e-09f, 5.564778630e-09f, 5.513098222e-09f,
-5.461424331e-09f, 5.409757048e-09f, 5.358096461e-09f, 5.306442661e-09f, 5.254795736e-09f, 5.203155775e-09f, 5.151522868e-09f, 5.099897104e-09f, 5.048278571e-09f, 4.996667360e-09f,
-4.945063558e-09f, 4.893467255e-09f, 4.841878539e-09f, 4.790297500e-09f, 4.738724227e-09f, 4.687158807e-09f, 4.635601331e-09f, 4.584051886e-09f, 4.532510561e-09f, 4.480977446e-09f,
-4.429452628e-09f, 4.377936195e-09f, 4.326428238e-09f, 4.274928843e-09f, 4.223438099e-09f, 4.171956096e-09f, 4.120482920e-09f, 4.069018660e-09f, 4.017563406e-09f, 3.966117243e-09f,
-3.914680262e-09f, 3.863252550e-09f, 3.811834195e-09f, 3.760425284e-09f, 3.709025907e-09f, 3.657636151e-09f, 3.606256104e-09f, 3.554885853e-09f, 3.503525487e-09f, 3.452175093e-09f,
-3.400834759e-09f, 3.349504572e-09f, 3.298184621e-09f, 3.246874992e-09f, 3.195575774e-09f, 3.144287054e-09f, 3.093008918e-09f, 3.041741456e-09f, 2.990484753e-09f, 2.939238897e-09f,
-2.888003976e-09f, 2.836780077e-09f, 2.785567286e-09f, 2.734365691e-09f, 2.683175379e-09f, 2.631996438e-09f, 2.580828953e-09f, 2.529673012e-09f, 2.478528702e-09f, 2.427396109e-09f,
-2.376275320e-09f, 2.325166423e-09f, 2.274069503e-09f, 2.222984648e-09f, 2.171911944e-09f, 2.120851477e-09f, 2.069803334e-09f, 2.018767602e-09f, 1.967744366e-09f, 1.916733713e-09f,
-1.865735730e-09f, 1.814750503e-09f, 1.763778117e-09f, 1.712818659e-09f, 1.661872215e-09f, 1.610938872e-09f, 1.560018714e-09f, 1.509111829e-09f, 1.458218301e-09f, 1.407338217e-09f,
-1.356471663e-09f, 1.305618724e-09f, 1.254779486e-09f, 1.203954034e-09f, 1.153142455e-09f, 1.102344833e-09f, 1.051561255e-09f, 1.000791805e-09f, 9.500365693e-10f, 8.992956328e-10f,
-8.485690810e-10f, 7.978569989e-10f, 7.471594718e-10f, 6.964765849e-10f, 6.458084231e-10f, 5.951550715e-10f, 5.445166150e-10f, 4.938931386e-10f, 4.432847270e-10f, 3.926914652e-10f,
-3.421134378e-10f, 2.915507296e-10f, 2.410034251e-10f, 1.904716089e-10f, 1.399553657e-10f, 8.945477985e-11f, 3.896993577e-11f, -1.149908214e-11f, -6.195218958e-11f, -1.123893023e-10f,
--1.628103361e-10f, -2.132152067e-10f, -2.636038302e-10f, -3.139761225e-10f, -3.643319996e-10f, -4.146713775e-10f, -4.649941724e-10f, -5.153003005e-10f, -5.655896779e-10f, -6.158622211e-10f,
--6.661178464e-10f, -7.163564701e-10f, -7.665780087e-10f, -8.167823787e-10f, -8.669694967e-10f, -9.171392794e-10f, -9.672916435e-10f, -1.017426506e-09f, -1.067543783e-09f, -1.117643391e-09f,
--1.167725249e-09f, -1.217789272e-09f, -1.267835377e-09f, -1.317863483e-09f, -1.367873505e-09f, -1.417865361e-09f, -1.467838969e-09f, -1.517794246e-09f, -1.567731108e-09f, -1.617649474e-09f,
--1.667549261e-09f, -1.717430387e-09f, -1.767292769e-09f, -1.817136324e-09f, -1.866960972e-09f, -1.916766628e-09f, -1.966553212e-09f, -2.016320641e-09f, -2.066068833e-09f, -2.115797706e-09f,
--2.165507179e-09f, -2.215197169e-09f, -2.264867594e-09f, -2.314518374e-09f, -2.364149425e-09f, -2.413760668e-09f, -2.463352019e-09f, -2.512923398e-09f, -2.562474723e-09f, -2.612005912e-09f,
--2.661516886e-09f, -2.711007561e-09f, -2.760477858e-09f, -2.809927694e-09f, -2.859356990e-09f, -2.908765663e-09f, -2.958153633e-09f, -3.007520819e-09f, -3.056867141e-09f, -3.106192517e-09f,
--3.155496867e-09f, -3.204780110e-09f, -3.254042166e-09f, -3.303282954e-09f, -3.352502394e-09f, -3.401700406e-09f, -3.450876908e-09f, -3.500031821e-09f, -3.549165065e-09f, -3.598276559e-09f,
--3.647366224e-09f, -3.696433980e-09f, -3.745479746e-09f, -3.794503442e-09f, -3.843504990e-09f, -3.892484309e-09f, -3.941441319e-09f, -3.990375941e-09f, -4.039288096e-09f, -4.088177704e-09f,
--4.137044685e-09f, -4.185888960e-09f, -4.234710450e-09f, -4.283509076e-09f, -4.332284758e-09f, -4.381037418e-09f, -4.429766977e-09f, -4.478473354e-09f, -4.527156473e-09f, -4.575816253e-09f,
--4.624452616e-09f, -4.673065484e-09f, -4.721654777e-09f, -4.770220418e-09f, -4.818762327e-09f, -4.867280427e-09f, -4.915774638e-09f, -4.964244883e-09f, -5.012691084e-09f, -5.061113162e-09f,
--5.109511039e-09f, -5.157884637e-09f, -5.206233879e-09f, -5.254558686e-09f, -5.302858980e-09f, -5.351134684e-09f, -5.399385721e-09f, -5.447612012e-09f, -5.495813479e-09f, -5.543990047e-09f,
--5.592141636e-09f, -5.640268171e-09f, -5.688369572e-09f, -5.736445764e-09f, -5.784496670e-09f, -5.832522211e-09f, -5.880522312e-09f, -5.928496894e-09f, -5.976445883e-09f, -6.024369199e-09f,
--6.072266768e-09f, -6.120138512e-09f, -6.167984354e-09f, -6.215804219e-09f, -6.263598030e-09f, -6.311365710e-09f, -6.359107183e-09f, -6.406822372e-09f, -6.454511203e-09f, -6.502173598e-09f,
--6.549809482e-09f, -6.597418779e-09f, -6.645001412e-09f, -6.692557306e-09f, -6.740086386e-09f, -6.787588576e-09f, -6.835063799e-09f, -6.882511981e-09f, -6.929933047e-09f, -6.977326920e-09f,
--7.024693525e-09f, -7.072032788e-09f, -7.119344633e-09f, -7.166628985e-09f, -7.213885769e-09f, -7.261114910e-09f, -7.308316334e-09f, -7.355489965e-09f, -7.402635729e-09f, -7.449753550e-09f,
--7.496843356e-09f, -7.543905070e-09f, -7.590938619e-09f, -7.637943929e-09f, -7.684920924e-09f, -7.731869532e-09f, -7.778789677e-09f, -7.825681285e-09f, -7.872544284e-09f, -7.919378598e-09f,
--7.966184154e-09f, -8.012960878e-09f, -8.059708697e-09f, -8.106427537e-09f, -8.153117324e-09f, -8.199777985e-09f, -8.246409447e-09f, -8.293011636e-09f, -8.339584478e-09f, -8.386127902e-09f,
--8.432641834e-09f, -8.479126200e-09f, -8.525580928e-09f, -8.572005945e-09f, -8.618401178e-09f, -8.664766555e-09f, -8.711102003e-09f, -8.757407449e-09f, -8.803682821e-09f, -8.849928046e-09f,
--8.896143052e-09f, -8.942327768e-09f, -8.988482120e-09f, -9.034606037e-09f, -9.080699446e-09f, -9.126762276e-09f, -9.172794455e-09f, -9.218795911e-09f, -9.264766572e-09f, -9.310706367e-09f,
--9.356615224e-09f, -9.402493071e-09f, -9.448339838e-09f, -9.494155453e-09f, -9.539939845e-09f, -9.585692942e-09f, -9.631414674e-09f, -9.677104969e-09f, -9.722763757e-09f, -9.768390966e-09f,
--9.813986526e-09f, -9.859550367e-09f, -9.905082417e-09f, -9.950582606e-09f, -9.996050864e-09f, -1.004148712e-08f, -1.008689130e-08f, -1.013226335e-08f, -1.017760317e-08f, -1.022291072e-08f,
--1.026818592e-08f, -1.031342869e-08f, -1.035863897e-08f, -1.040381668e-08f, -1.044896177e-08f, -1.049407416e-08f, -1.053915377e-08f, -1.058420054e-08f, -1.062921441e-08f, -1.067419530e-08f,
--1.071914313e-08f, -1.076405785e-08f, -1.080893939e-08f, -1.085378767e-08f, -1.089860263e-08f, -1.094338419e-08f, -1.098813229e-08f, -1.103284686e-08f, -1.107752784e-08f, -1.112217515e-08f,
--1.116678872e-08f, -1.121136849e-08f, -1.125591438e-08f, -1.130042634e-08f, -1.134490429e-08f, -1.138934816e-08f, -1.143375789e-08f, -1.147813341e-08f, -1.152247465e-08f, -1.156678154e-08f,
--1.161105401e-08f, -1.165529201e-08f, -1.169949545e-08f, -1.174366428e-08f, -1.178779843e-08f, -1.183189782e-08f, -1.187596240e-08f, -1.191999209e-08f, -1.196398683e-08f, -1.200794655e-08f,
--1.205187118e-08f, -1.209576067e-08f, -1.213961493e-08f, -1.218343391e-08f, -1.222721754e-08f, -1.227096575e-08f, -1.231467847e-08f, -1.235835565e-08f, -1.240199721e-08f, -1.244560309e-08f,
--1.248917322e-08f, -1.253270753e-08f, -1.257620597e-08f, -1.261966846e-08f, -1.266309494e-08f, -1.270648534e-08f, -1.274983960e-08f, -1.279315766e-08f, -1.283643944e-08f, -1.287968489e-08f,
--1.292289393e-08f, -1.296606651e-08f, -1.300920255e-08f, -1.305230200e-08f, -1.309536478e-08f, -1.313839084e-08f, -1.318138011e-08f, -1.322433253e-08f, -1.326724802e-08f, -1.331012653e-08f,
--1.335296800e-08f, -1.339577235e-08f, -1.343853952e-08f, -1.348126946e-08f, -1.352396209e-08f, -1.356661735e-08f, -1.360923518e-08f, -1.365181552e-08f, -1.369435830e-08f, -1.373686346e-08f,
--1.377933093e-08f, -1.382176066e-08f, -1.386415257e-08f, -1.390650661e-08f, -1.394882271e-08f, -1.399110082e-08f, -1.403334086e-08f, -1.407554277e-08f, -1.411770649e-08f, -1.415983197e-08f,
--1.420191913e-08f, -1.424396791e-08f, -1.428597826e-08f, -1.432795011e-08f, -1.436988339e-08f, -1.441177806e-08f, -1.445363403e-08f, -1.449545126e-08f, -1.453722968e-08f, -1.457896922e-08f,
--1.462066984e-08f, -1.466233146e-08f, -1.470395402e-08f, -1.474553747e-08f, -1.478708173e-08f, -1.482858676e-08f, -1.487005249e-08f, -1.491147886e-08f, -1.495286581e-08f, -1.499421327e-08f,
--1.503552119e-08f, -1.507678950e-08f, -1.511801816e-08f, -1.515920708e-08f, -1.520035622e-08f, -1.524146552e-08f, -1.528253491e-08f, -1.532356433e-08f, -1.536455373e-08f, -1.540550304e-08f,
--1.544641221e-08f, -1.548728117e-08f, -1.552810987e-08f, -1.556889825e-08f, -1.560964624e-08f, -1.565035379e-08f, -1.569102084e-08f, -1.573164732e-08f, -1.577223319e-08f, -1.581277837e-08f,
--1.585328282e-08f, -1.589374648e-08f, -1.593416927e-08f, -1.597455116e-08f, -1.601489207e-08f, -1.605519195e-08f, -1.609545074e-08f, -1.613566838e-08f, -1.617584482e-08f, -1.621597999e-08f,
--1.625607385e-08f, -1.629612632e-08f, -1.633613736e-08f, -1.637610690e-08f, -1.641603489e-08f, -1.645592127e-08f, -1.649576598e-08f, -1.653556897e-08f, -1.657533018e-08f, -1.661504955e-08f,
--1.665472702e-08f, -1.669436254e-08f, -1.673395605e-08f, -1.677350749e-08f, -1.681301681e-08f, -1.685248395e-08f, -1.689190886e-08f, -1.693129147e-08f, -1.697063174e-08f, -1.700992960e-08f,
--1.704918499e-08f, -1.708839788e-08f, -1.712756818e-08f, -1.716669586e-08f, -1.720578086e-08f, -1.724482312e-08f, -1.728382258e-08f, -1.732277918e-08f, -1.736169289e-08f, -1.740056363e-08f,
--1.743939135e-08f, -1.747817601e-08f, -1.751691753e-08f, -1.755561588e-08f, -1.759427099e-08f, -1.763288280e-08f, -1.767145127e-08f, -1.770997635e-08f, -1.774845796e-08f, -1.778689607e-08f,
--1.782529061e-08f, -1.786364154e-08f, -1.790194880e-08f, -1.794021233e-08f, -1.797843208e-08f, -1.801660800e-08f, -1.805474003e-08f, -1.809282813e-08f, -1.813087223e-08f, -1.816887228e-08f,
--1.820682823e-08f, -1.824474003e-08f, -1.828260763e-08f, -1.832043096e-08f, -1.835820998e-08f, -1.839594464e-08f, -1.843363488e-08f, -1.847128065e-08f, -1.850888190e-08f, -1.854643857e-08f,
--1.858395062e-08f, -1.862141798e-08f, -1.865884062e-08f, -1.869621847e-08f, -1.873355148e-08f, -1.877083961e-08f, -1.880808280e-08f, -1.884528099e-08f, -1.888243415e-08f, -1.891954221e-08f,
--1.895660512e-08f, -1.899362284e-08f, -1.903059532e-08f, -1.906752249e-08f, -1.910440431e-08f, -1.914124074e-08f, -1.917803171e-08f, -1.921477718e-08f, -1.925147710e-08f, -1.928813141e-08f,
--1.932474007e-08f, -1.936130303e-08f, -1.939782024e-08f, -1.943429164e-08f, -1.947071719e-08f, -1.950709683e-08f, -1.954343052e-08f, -1.957971821e-08f, -1.961595984e-08f, -1.965215538e-08f,
--1.968830476e-08f, -1.972440794e-08f, -1.976046487e-08f, -1.979647550e-08f, -1.983243978e-08f, -1.986835767e-08f, -1.990422911e-08f, -1.994005405e-08f, -1.997583246e-08f, -2.001156427e-08f,
--2.004724944e-08f, -2.008288792e-08f, -2.011847966e-08f, -2.015402462e-08f, -2.018952275e-08f, -2.022497400e-08f, -2.026037832e-08f, -2.029573566e-08f, -2.033104598e-08f, -2.036630922e-08f,
--2.040152535e-08f, -2.043669431e-08f, -2.047181606e-08f, -2.050689055e-08f, -2.054191773e-08f, -2.057689755e-08f, -2.061182998e-08f, -2.064671495e-08f, -2.068155243e-08f, -2.071634237e-08f,
--2.075108472e-08f, -2.078577944e-08f, -2.082042648e-08f, -2.085502579e-08f, -2.088957733e-08f, -2.092408105e-08f, -2.095853691e-08f, -2.099294485e-08f, -2.102730484e-08f, -2.106161683e-08f,
--2.109588077e-08f, -2.113009663e-08f, -2.116426434e-08f, -2.119838387e-08f, -2.123245517e-08f, -2.126647821e-08f, -2.130045292e-08f, -2.133437927e-08f, -2.136825722e-08f, -2.140208671e-08f,
--2.143586771e-08f, -2.146960017e-08f, -2.150328405e-08f, -2.153691930e-08f, -2.157050587e-08f, -2.160404373e-08f, -2.163753283e-08f, -2.167097312e-08f, -2.170436457e-08f, -2.173770713e-08f,
--2.177100075e-08f, -2.180424540e-08f, -2.183744102e-08f, -2.187058758e-08f, -2.190368503e-08f, -2.193673334e-08f, -2.196973245e-08f, -2.200268232e-08f, -2.203558292e-08f, -2.206843419e-08f,
--2.210123611e-08f, -2.213398862e-08f, -2.216669168e-08f, -2.219934525e-08f, -2.223194928e-08f, -2.226450375e-08f, -2.229700860e-08f, -2.232946379e-08f, -2.236186928e-08f, -2.239422504e-08f,
--2.242653101e-08f, -2.245878716e-08f, -2.249099344e-08f, -2.252314982e-08f, -2.255525626e-08f, -2.258731270e-08f, -2.261931912e-08f, -2.265127547e-08f, -2.268318171e-08f, -2.271503780e-08f,
--2.274684370e-08f, -2.277859937e-08f, -2.281030477e-08f, -2.284195986e-08f, -2.287356460e-08f, -2.290511894e-08f, -2.293662286e-08f, -2.296807631e-08f, -2.299947925e-08f, -2.303083164e-08f,
--2.306213344e-08f, -2.309338461e-08f, -2.312458512e-08f, -2.315573492e-08f, -2.318683398e-08f, -2.321788225e-08f, -2.324887970e-08f, -2.327982629e-08f, -2.331072198e-08f, -2.334156674e-08f,
--2.337236051e-08f, -2.340310328e-08f, -2.343379499e-08f, -2.346443561e-08f, -2.349502510e-08f, -2.352556342e-08f, -2.355605054e-08f, -2.358648642e-08f, -2.361687102e-08f, -2.364720430e-08f,
--2.367748623e-08f, -2.370771677e-08f, -2.373789588e-08f, -2.376802353e-08f, -2.379809967e-08f, -2.382812428e-08f, -2.385809731e-08f, -2.388801873e-08f, -2.391788849e-08f, -2.394770658e-08f,
--2.397747294e-08f, -2.400718755e-08f, -2.403685036e-08f, -2.406646135e-08f, -2.409602046e-08f, -2.412552768e-08f, -2.415498296e-08f, -2.418438627e-08f, -2.421373758e-08f, -2.424303683e-08f,
--2.427228402e-08f, -2.430147908e-08f, -2.433062200e-08f, -2.435971274e-08f, -2.438875126e-08f, -2.441773753e-08f, -2.444667151e-08f, -2.447555317e-08f, -2.450438247e-08f, -2.453315938e-08f,
--2.456188387e-08f, -2.459055590e-08f, -2.461917543e-08f, -2.464774244e-08f, -2.467625689e-08f, -2.470471875e-08f, -2.473312798e-08f, -2.476148455e-08f, -2.478978842e-08f, -2.481803957e-08f,
--2.484623795e-08f, -2.487438355e-08f, -2.490247631e-08f, -2.493051622e-08f, -2.495850323e-08f, -2.498643732e-08f, -2.501431846e-08f, -2.504214660e-08f, -2.506992172e-08f, -2.509764379e-08f,
--2.512531277e-08f, -2.515292863e-08f, -2.518049135e-08f, -2.520800088e-08f, -2.523545720e-08f, -2.526286027e-08f, -2.529021007e-08f, -2.531750656e-08f, -2.534474971e-08f, -2.537193948e-08f,
--2.539907586e-08f, -2.542615881e-08f, -2.545318829e-08f, -2.548016428e-08f, -2.550708675e-08f, -2.553395566e-08f, -2.556077098e-08f, -2.558753269e-08f, -2.561424075e-08f, -2.564089514e-08f,
--2.566749582e-08f, -2.569404277e-08f, -2.572053595e-08f, -2.574697534e-08f, -2.577336090e-08f, -2.579969260e-08f, -2.582597043e-08f, -2.585219434e-08f, -2.587836430e-08f, -2.590448030e-08f,
--2.593054230e-08f, -2.595655027e-08f, -2.598250418e-08f, -2.600840400e-08f, -2.603424971e-08f, -2.606004128e-08f, -2.608577867e-08f, -2.611146187e-08f, -2.613709084e-08f, -2.616266555e-08f,
--2.618818598e-08f, -2.621365210e-08f, -2.623906388e-08f, -2.626442129e-08f, -2.628972431e-08f, -2.631497291e-08f, -2.634016706e-08f, -2.636530673e-08f, -2.639039190e-08f, -2.641542254e-08f,
--2.644039863e-08f, -2.646532013e-08f, -2.649018702e-08f, -2.651499928e-08f, -2.653975687e-08f, -2.656445977e-08f, -2.658910796e-08f, -2.661370141e-08f, -2.663824009e-08f, -2.666272398e-08f,
--2.668715305e-08f, -2.671152727e-08f, -2.673584662e-08f, -2.676011108e-08f, -2.678432062e-08f, -2.680847521e-08f, -2.683257483e-08f, -2.685661946e-08f, -2.688060906e-08f, -2.690454362e-08f,
--2.692842310e-08f, -2.695224749e-08f, -2.697601677e-08f, -2.699973089e-08f, -2.702338985e-08f, -2.704699362e-08f, -2.707054217e-08f, -2.709403548e-08f, -2.711747352e-08f, -2.714085628e-08f,
--2.716418373e-08f, -2.718745584e-08f, -2.721067259e-08f, -2.723383396e-08f, -2.725693992e-08f, -2.727999045e-08f, -2.730298554e-08f, -2.732592515e-08f, -2.734880926e-08f, -2.737163785e-08f,
--2.739441090e-08f, -2.741712839e-08f, -2.743979029e-08f, -2.746239658e-08f, -2.748494723e-08f, -2.750744224e-08f, -2.752988156e-08f, -2.755226519e-08f, -2.757459311e-08f, -2.759686528e-08f,
--2.761908168e-08f, -2.764124231e-08f, -2.766334713e-08f, -2.768539612e-08f, -2.770738927e-08f, -2.772932655e-08f, -2.775120793e-08f, -2.777303341e-08f, -2.779480296e-08f, -2.781651656e-08f,
--2.783817418e-08f, -2.785977582e-08f, -2.788132144e-08f, -2.790281103e-08f, -2.792424456e-08f, -2.794562203e-08f, -2.796694340e-08f, -2.798820866e-08f, -2.800941779e-08f, -2.803057076e-08f,
--2.805166757e-08f, -2.807270819e-08f, -2.809369260e-08f, -2.811462078e-08f, -2.813549272e-08f, -2.815630838e-08f, -2.817706777e-08f, -2.819777085e-08f, -2.821841761e-08f, -2.823900803e-08f,
--2.825954209e-08f, -2.828001978e-08f, -2.830044107e-08f, -2.832080595e-08f, -2.834111439e-08f, -2.836136639e-08f, -2.838156193e-08f, -2.840170098e-08f, -2.842178352e-08f, -2.844180955e-08f,
--2.846177905e-08f, -2.848169199e-08f, -2.850154836e-08f, -2.852134814e-08f, -2.854109133e-08f, -2.856077789e-08f, -2.858040781e-08f, -2.859998108e-08f, -2.861949768e-08f, -2.863895759e-08f,
--2.865836080e-08f, -2.867770730e-08f, -2.869699705e-08f, -2.871623006e-08f, -2.873540630e-08f, -2.875452576e-08f, -2.877358842e-08f, -2.879259427e-08f, -2.881154329e-08f, -2.883043547e-08f,
--2.884927079e-08f, -2.886804923e-08f, -2.888677079e-08f, -2.890543544e-08f, -2.892404318e-08f, -2.894259398e-08f, -2.896108783e-08f, -2.897952473e-08f, -2.899790464e-08f, -2.901622757e-08f,
--2.903449350e-08f, -2.905270240e-08f, -2.907085427e-08f, -2.908894910e-08f, -2.910698687e-08f, -2.912496756e-08f, -2.914289117e-08f, -2.916075768e-08f, -2.917856708e-08f, -2.919631935e-08f,
--2.921401448e-08f, -2.923165246e-08f, -2.924923327e-08f, -2.926675691e-08f, -2.928422336e-08f, -2.930163260e-08f, -2.931898463e-08f, -2.933627944e-08f, -2.935351700e-08f, -2.937069731e-08f,
--2.938782036e-08f, -2.940488613e-08f, -2.942189462e-08f, -2.943884581e-08f, -2.945573969e-08f, -2.947257624e-08f, -2.948935547e-08f, -2.950607735e-08f, -2.952274187e-08f, -2.953934903e-08f,
--2.955589881e-08f, -2.957239121e-08f, -2.958882620e-08f, -2.960520379e-08f, -2.962152396e-08f, -2.963778669e-08f, -2.965399199e-08f, -2.967013984e-08f, -2.968623022e-08f, -2.970226314e-08f,
--2.971823857e-08f, -2.973415652e-08f, -2.975001697e-08f, -2.976581991e-08f, -2.978156532e-08f, -2.979725322e-08f, -2.981288357e-08f, -2.982845638e-08f, -2.984397163e-08f, -2.985942932e-08f,
--2.987482944e-08f, -2.989017198e-08f, -2.990545692e-08f, -2.992068427e-08f, -2.993585401e-08f, -2.995096614e-08f, -2.996602064e-08f, -2.998101751e-08f, -2.999595675e-08f, -3.001083833e-08f,
--3.002566226e-08f, -3.004042853e-08f, -3.005513713e-08f, -3.006978806e-08f, -3.008438129e-08f, -3.009891684e-08f, -3.011339469e-08f, -3.012781483e-08f, -3.014217726e-08f, -3.015648197e-08f,
--3.017072895e-08f, -3.018491820e-08f, -3.019904971e-08f, -3.021312348e-08f, -3.022713950e-08f, -3.024109775e-08f, -3.025499825e-08f, -3.026884097e-08f, -3.028262592e-08f, -3.029635308e-08f,
--3.031002246e-08f, -3.032363405e-08f, -3.033718784e-08f, -3.035068382e-08f, -3.036412200e-08f, -3.037750236e-08f, -3.039082491e-08f, -3.040408963e-08f, -3.041729652e-08f, -3.043044558e-08f,
--3.044353681e-08f, -3.045657019e-08f, -3.046954572e-08f, -3.048246341e-08f, -3.049532324e-08f, -3.050812521e-08f, -3.052086932e-08f, -3.053355556e-08f, -3.054618393e-08f, -3.055875443e-08f,
--3.057126705e-08f, -3.058372178e-08f, -3.059611864e-08f, -3.060845761e-08f, -3.062073868e-08f, -3.063296187e-08f, -3.064512716e-08f, -3.065723454e-08f, -3.066928403e-08f, -3.068127561e-08f,
--3.069320928e-08f, -3.070508505e-08f, -3.071690290e-08f, -3.072866284e-08f, -3.074036487e-08f, -3.075200897e-08f, -3.076359516e-08f, -3.077512342e-08f, -3.078659377e-08f, -3.079800618e-08f,
--3.080936067e-08f, -3.082065724e-08f, -3.083189587e-08f, -3.084307658e-08f, -3.085419935e-08f, -3.086526419e-08f, -3.087627110e-08f, -3.088722008e-08f, -3.089811112e-08f, -3.090894423e-08f,
--3.091971940e-08f, -3.093043664e-08f, -3.094109594e-08f, -3.095169731e-08f, -3.096224074e-08f, -3.097272624e-08f, -3.098315380e-08f, -3.099352342e-08f, -3.100383512e-08f, -3.101408887e-08f,
--3.102428470e-08f, -3.103442259e-08f, -3.104450255e-08f, -3.105452458e-08f, -3.106448868e-08f, -3.107439485e-08f, -3.108424310e-08f, -3.109403341e-08f, -3.110376581e-08f, -3.111344028e-08f,
--3.112305683e-08f, -3.113261545e-08f, -3.114211617e-08f, -3.115155896e-08f, -3.116094384e-08f, -3.117027081e-08f, -3.117953988e-08f, -3.118875103e-08f, -3.119790428e-08f, -3.120699963e-08f,
--3.121603708e-08f, -3.122501663e-08f, -3.123393829e-08f, -3.124280206e-08f, -3.125160794e-08f, -3.126035593e-08f, -3.126904605e-08f, -3.127767829e-08f, -3.128625265e-08f, -3.129476915e-08f,
--3.130322777e-08f, -3.131162854e-08f, -3.131997144e-08f, -3.132825649e-08f, -3.133648369e-08f, -3.134465305e-08f, -3.135276456e-08f, -3.136081823e-08f, -3.136881407e-08f, -3.137675208e-08f,
--3.138463227e-08f, -3.139245463e-08f, -3.140021918e-08f, -3.140792593e-08f, -3.141557487e-08f, -3.142316601e-08f, -3.143069935e-08f, -3.143817491e-08f, -3.144559269e-08f, -3.145295269e-08f,
--3.146025491e-08f, -3.146749938e-08f, -3.147468608e-08f, -3.148181503e-08f, -3.148888623e-08f, -3.149589969e-08f, -3.150285542e-08f, -3.150975341e-08f, -3.151659369e-08f, -3.152337625e-08f,
--3.153010110e-08f, -3.153676825e-08f, -3.154337771e-08f, -3.154992948e-08f, -3.155642357e-08f, -3.156285999e-08f, -3.156923874e-08f, -3.157555983e-08f, -3.158182327e-08f, -3.158802907e-08f,
--3.159417723e-08f, -3.160026776e-08f, -3.160630068e-08f, -3.161227598e-08f, -3.161819368e-08f, -3.162405379e-08f, -3.162985631e-08f, -3.163560125e-08f, -3.164128862e-08f, -3.164691843e-08f,
--3.165249069e-08f, -3.165800541e-08f, -3.166346259e-08f, -3.166886224e-08f, -3.167420438e-08f, -3.167948901e-08f, -3.168471614e-08f, -3.168988579e-08f, -3.169499796e-08f, -3.170005266e-08f,
--3.170504989e-08f, -3.170998968e-08f, -3.171487203e-08f, -3.171969695e-08f, -3.172446446e-08f, -3.172917455e-08f, -3.173382724e-08f, -3.173842255e-08f, -3.174296048e-08f, -3.174744104e-08f,
--3.175186424e-08f, -3.175623010e-08f, -3.176053863e-08f, -3.176478983e-08f, -3.176898372e-08f, -3.177312031e-08f, -3.177719961e-08f, -3.178122163e-08f, -3.178518638e-08f, -3.178909388e-08f,
--3.179294413e-08f, -3.179673716e-08f, -3.180047296e-08f, -3.180415156e-08f, -3.180777296e-08f, -3.181133718e-08f, -3.181484422e-08f, -3.181829411e-08f, -3.182168685e-08f, -3.182502246e-08f,
--3.182830095e-08f, -3.183152233e-08f, -3.183468662e-08f, -3.183779382e-08f, -3.184084396e-08f, -3.184383704e-08f, -3.184677307e-08f, -3.184965208e-08f, -3.185247407e-08f, -3.185523906e-08f,
--3.185794707e-08f, -3.186059809e-08f, -3.186319216e-08f, -3.186572928e-08f, -3.186820947e-08f, -3.187063274e-08f, -3.187299911e-08f, -3.187530858e-08f, -3.187756119e-08f, -3.187975693e-08f,
--3.188189582e-08f, -3.188397788e-08f, -3.188600313e-08f, -3.188797158e-08f, -3.188988324e-08f, -3.189173813e-08f, -3.189353626e-08f, -3.189527765e-08f, -3.189696232e-08f, -3.189859027e-08f,
--3.190016154e-08f, -3.190167612e-08f, -3.190313404e-08f, -3.190453532e-08f, -3.190587996e-08f, -3.190716799e-08f, -3.190839943e-08f, -3.190957428e-08f, -3.191069256e-08f, -3.191175429e-08f,
--3.191275950e-08f, -3.191370818e-08f, -3.191460037e-08f, -3.191543608e-08f, -3.191621532e-08f, -3.191693811e-08f, -3.191760447e-08f, -3.191821442e-08f, -3.191876797e-08f, -3.191926514e-08f,
--3.191970595e-08f, -3.192009042e-08f, -3.192041856e-08f, -3.192069039e-08f, -3.192090593e-08f, -3.192106520e-08f, -3.192116821e-08f, -3.192121499e-08f, -3.192120555e-08f, -3.192113991e-08f,
--3.192101809e-08f, -3.192084011e-08f, -3.192060599e-08f, -3.192031574e-08f, -3.191996938e-08f, -3.191956694e-08f, -3.191910842e-08f, -3.191859386e-08f, -3.191802327e-08f, -3.191739667e-08f,
--3.191671408e-08f, -3.191597552e-08f, -3.191518100e-08f, -3.191433056e-08f, -3.191342420e-08f, -3.191246194e-08f, -3.191144382e-08f, -3.191036984e-08f, -3.190924003e-08f, -3.190805441e-08f,
--3.190681300e-08f, -3.190551582e-08f, -3.190416288e-08f, -3.190275422e-08f, -3.190128985e-08f, -3.189976978e-08f, -3.189819405e-08f, -3.189656268e-08f, -3.189487568e-08f, -3.189313307e-08f,
--3.189133488e-08f, -3.188948113e-08f, -3.188757184e-08f, -3.188560703e-08f, -3.188358673e-08f, -3.188151095e-08f, -3.187937971e-08f, -3.187719305e-08f, -3.187495097e-08f, -3.187265351e-08f,
--3.187030068e-08f, -3.186789251e-08f, -3.186542902e-08f, -3.186291023e-08f, -3.186033617e-08f, -3.185770685e-08f, -3.185502231e-08f, -3.185228255e-08f, -3.184948762e-08f, -3.184663752e-08f,
--3.184373228e-08f, -3.184077193e-08f, -3.183775649e-08f, -3.183468597e-08f, -3.183156042e-08f, -3.182837984e-08f, -3.182514427e-08f, -3.182185372e-08f, -3.181850822e-08f, -3.181510780e-08f,
--3.181165247e-08f, -3.180814227e-08f, -3.180457721e-08f, -3.180095732e-08f, -3.179728263e-08f, -3.179355316e-08f, -3.178976893e-08f, -3.178592998e-08f, -3.178203631e-08f, -3.177808796e-08f,
--3.177408496e-08f, -3.177002732e-08f, -3.176591508e-08f, -3.176174826e-08f, -3.175752688e-08f, -3.175325097e-08f, -3.174892055e-08f, -3.174453566e-08f, -3.174009631e-08f, -3.173560253e-08f,
--3.173105435e-08f, -3.172645179e-08f, -3.172179489e-08f, -3.171708365e-08f, -3.171231812e-08f, -3.170749832e-08f, -3.170262427e-08f, -3.169769600e-08f, -3.169271354e-08f, -3.168767691e-08f,
--3.168258614e-08f, -3.167744126e-08f, -3.167224230e-08f, -3.166698927e-08f, -3.166168222e-08f, -3.165632115e-08f, -3.165090611e-08f, -3.164543712e-08f, -3.163991421e-08f, -3.163433740e-08f,
--3.162870673e-08f, -3.162302221e-08f, -3.161728388e-08f, -3.161149177e-08f, -3.160564590e-08f, -3.159974630e-08f, -3.159379300e-08f, -3.158778603e-08f, -3.158172541e-08f, -3.157561118e-08f,
--3.156944336e-08f, -3.156322199e-08f, -3.155694708e-08f, -3.155061867e-08f, -3.154423679e-08f, -3.153780146e-08f, -3.153131272e-08f, -3.152477059e-08f, -3.151817511e-08f, -3.151152630e-08f,
--3.150482419e-08f, -3.149806881e-08f, -3.149126020e-08f, -3.148439837e-08f, -3.147748336e-08f, -3.147051521e-08f, -3.146349393e-08f, -3.145641956e-08f, -3.144929213e-08f, -3.144211167e-08f,
--3.143487821e-08f, -3.142759178e-08f, -3.142025241e-08f, -3.141286013e-08f, -3.140541497e-08f, -3.139791696e-08f, -3.139036614e-08f, -3.138276253e-08f, -3.137510616e-08f, -3.136739707e-08f,
--3.135963528e-08f, -3.135182083e-08f, -3.134395374e-08f, -3.133603406e-08f, -3.132806181e-08f, -3.132003702e-08f, -3.131195972e-08f, -3.130382995e-08f, -3.129564773e-08f, -3.128741310e-08f,
--3.127912610e-08f, -3.127078674e-08f, -3.126239507e-08f, -3.125395112e-08f, -3.124545491e-08f, -3.123690649e-08f, -3.122830587e-08f, -3.121965311e-08f, -3.121094822e-08f, -3.120219124e-08f,
--3.119338221e-08f, -3.118452115e-08f, -3.117560810e-08f, -3.116664309e-08f, -3.115762616e-08f, -3.114855733e-08f, -3.113943665e-08f, -3.113026414e-08f, -3.112103983e-08f, -3.111176377e-08f,
--3.110243598e-08f, -3.109305650e-08f, -3.108362537e-08f, -3.107414260e-08f, -3.106460825e-08f, -3.105502234e-08f, -3.104538491e-08f, -3.103569598e-08f, -3.102595561e-08f, -3.101616381e-08f,
--3.100632062e-08f, -3.099642609e-08f, -3.098648023e-08f, -3.097648310e-08f, -3.096643471e-08f, -3.095633511e-08f, -3.094618434e-08f, -3.093598242e-08f, -3.092572939e-08f, -3.091542528e-08f,
--3.090507014e-08f, -3.089466399e-08f, -3.088420687e-08f, -3.087369882e-08f, -3.086313988e-08f, -3.085253007e-08f, -3.084186943e-08f, -3.083115801e-08f, -3.082039582e-08f, -3.080958292e-08f,
--3.079871934e-08f, -3.078780510e-08f, -3.077684026e-08f, -3.076582484e-08f, -3.075475888e-08f, -3.074364242e-08f, -3.073247549e-08f, -3.072125813e-08f, -3.070999037e-08f, -3.069867226e-08f,
--3.068730383e-08f, -3.067588512e-08f, -3.066441616e-08f, -3.065289699e-08f, -3.064132764e-08f, -3.062970816e-08f, -3.061803858e-08f, -3.060631894e-08f, -3.059454928e-08f, -3.058272962e-08f,
--3.057086002e-08f, -3.055894051e-08f, -3.054697112e-08f, -3.053495190e-08f, -3.052288288e-08f, -3.051076409e-08f, -3.049859558e-08f, -3.048637739e-08f, -3.047410955e-08f, -3.046179210e-08f,
--3.044942509e-08f, -3.043700853e-08f, -3.042454249e-08f, -3.041202699e-08f, -3.039946207e-08f, -3.038684777e-08f, -3.037418413e-08f, -3.036147120e-08f, -3.034870900e-08f, -3.033589757e-08f,
--3.032303696e-08f, -3.031012721e-08f, -3.029716835e-08f, -3.028416042e-08f, -3.027110347e-08f, -3.025799752e-08f, -3.024484263e-08f, -3.023163883e-08f, -3.021838616e-08f, -3.020508465e-08f,
--3.019173436e-08f, -3.017833532e-08f, -3.016488756e-08f, -3.015139114e-08f, -3.013784608e-08f, -3.012425243e-08f, -3.011061023e-08f, -3.009691952e-08f, -3.008318034e-08f, -3.006939273e-08f,
--3.005555673e-08f, -3.004167238e-08f, -3.002773973e-08f, -3.001375880e-08f, -2.999972965e-08f, -2.998565232e-08f, -2.997152683e-08f, -2.995735325e-08f, -2.994313160e-08f, -2.992886193e-08f,
--2.991454427e-08f, -2.990017868e-08f, -2.988576519e-08f, -2.987130384e-08f, -2.985679468e-08f, -2.984223775e-08f, -2.982763308e-08f, -2.981298072e-08f, -2.979828071e-08f, -2.978353309e-08f,
--2.976873791e-08f, -2.975389521e-08f, -2.973900502e-08f, -2.972406740e-08f, -2.970908238e-08f, -2.969405000e-08f, -2.967897032e-08f, -2.966384336e-08f, -2.964866918e-08f, -2.963344781e-08f,
--2.961817929e-08f, -2.960286368e-08f, -2.958750102e-08f, -2.957209133e-08f, -2.955663468e-08f, -2.954113110e-08f, -2.952558063e-08f, -2.950998332e-08f, -2.949433922e-08f, -2.947864835e-08f,
--2.946291078e-08f, -2.944712653e-08f, -2.943129567e-08f, -2.941541821e-08f, -2.939949422e-08f, -2.938352374e-08f, -2.936750680e-08f, -2.935144346e-08f, -2.933533375e-08f, -2.931917773e-08f,
--2.930297543e-08f, -2.928672690e-08f, -2.927043218e-08f, -2.925409131e-08f, -2.923770435e-08f, -2.922127133e-08f, -2.920479231e-08f, -2.918826732e-08f, -2.917169640e-08f, -2.915507961e-08f,
--2.913841699e-08f, -2.912170858e-08f, -2.910495443e-08f, -2.908815459e-08f, -2.907130909e-08f, -2.905441798e-08f, -2.903748131e-08f, -2.902049912e-08f, -2.900347146e-08f, -2.898639837e-08f,
--2.896927991e-08f, -2.895211610e-08f, -2.893490701e-08f, -2.891765267e-08f, -2.890035313e-08f, -2.888300844e-08f, -2.886561864e-08f, -2.884818378e-08f, -2.883070390e-08f, -2.881317905e-08f,
--2.879560928e-08f, -2.877799463e-08f, -2.876033514e-08f, -2.874263087e-08f, -2.872488186e-08f, -2.870708816e-08f, -2.868924981e-08f, -2.867136686e-08f, -2.865343935e-08f, -2.863546734e-08f,
--2.861745087e-08f, -2.859938998e-08f, -2.858128473e-08f, -2.856313515e-08f, -2.854494130e-08f, -2.852670323e-08f, -2.850842097e-08f, -2.849009459e-08f, -2.847172411e-08f, -2.845330960e-08f,
--2.843485110e-08f, -2.841634865e-08f, -2.839780231e-08f, -2.837921212e-08f, -2.836057813e-08f, -2.834190039e-08f, -2.832317893e-08f, -2.830441382e-08f, -2.828560511e-08f, -2.826675282e-08f,
--2.824785703e-08f, -2.822891776e-08f, -2.820993508e-08f, -2.819090903e-08f, -2.817183965e-08f, -2.815272700e-08f, -2.813357113e-08f, -2.811437207e-08f, -2.809512989e-08f, -2.807584463e-08f,
--2.805651633e-08f, -2.803714506e-08f, -2.801773084e-08f, -2.799827374e-08f, -2.797877381e-08f, -2.795923108e-08f, -2.793964561e-08f, -2.792001746e-08f, -2.790034666e-08f, -2.788063327e-08f,
--2.786087733e-08f, -2.784107890e-08f, -2.782123803e-08f, -2.780135476e-08f, -2.778142914e-08f, -2.776146123e-08f, -2.774145106e-08f, -2.772139870e-08f, -2.770130419e-08f, -2.768116759e-08f,
--2.766098893e-08f, -2.764076827e-08f, -2.762050567e-08f, -2.760020116e-08f, -2.757985481e-08f, -2.755946666e-08f, -2.753903675e-08f, -2.751856515e-08f, -2.749805190e-08f, -2.747749704e-08f,
--2.745690064e-08f, -2.743626275e-08f, -2.741558340e-08f, -2.739486266e-08f, -2.737410056e-08f, -2.735329718e-08f, -2.733245254e-08f, -2.731156672e-08f, -2.729063974e-08f, -2.726967168e-08f,
--2.724866257e-08f, -2.722761247e-08f, -2.720652143e-08f, -2.718538950e-08f, -2.716421673e-08f, -2.714300318e-08f, -2.712174889e-08f, -2.710045391e-08f, -2.707911830e-08f, -2.705774211e-08f,
--2.703632538e-08f, -2.701486818e-08f, -2.699337055e-08f, -2.697183255e-08f, -2.695025422e-08f, -2.692863561e-08f, -2.690697679e-08f, -2.688527780e-08f, -2.686353869e-08f, -2.684175951e-08f,
--2.681994032e-08f, -2.679808117e-08f, -2.677618212e-08f, -2.675424320e-08f, -2.673226448e-08f, -2.671024601e-08f, -2.668818783e-08f, -2.666609001e-08f, -2.664395259e-08f, -2.662177563e-08f,
--2.659955918e-08f, -2.657730330e-08f, -2.655500802e-08f, -2.653267342e-08f, -2.651029953e-08f, -2.648788642e-08f, -2.646543413e-08f, -2.644294272e-08f, -2.642041225e-08f, -2.639784275e-08f,
--2.637523430e-08f, -2.635258694e-08f, -2.632990072e-08f, -2.630717569e-08f, -2.628441192e-08f, -2.626160945e-08f, -2.623876834e-08f, -2.621588864e-08f, -2.619297040e-08f, -2.617001369e-08f,
--2.614701854e-08f, -2.612398501e-08f, -2.610091317e-08f, -2.607780306e-08f, -2.605465473e-08f, -2.603146824e-08f, -2.600824365e-08f, -2.598498100e-08f, -2.596168035e-08f, -2.593834177e-08f,
--2.591496529e-08f, -2.589155097e-08f, -2.586809887e-08f, -2.584460904e-08f, -2.582108154e-08f, -2.579751642e-08f, -2.577391374e-08f, -2.575027354e-08f, -2.572659589e-08f, -2.570288084e-08f,
--2.567912844e-08f, -2.565533875e-08f, -2.563151182e-08f, -2.560764770e-08f, -2.558374646e-08f, -2.555980815e-08f, -2.553583282e-08f, -2.551182052e-08f, -2.548777131e-08f, -2.546368525e-08f,
--2.543956240e-08f, -2.541540279e-08f, -2.539120650e-08f, -2.536697358e-08f, -2.534270408e-08f, -2.531839806e-08f, -2.529405556e-08f, -2.526967666e-08f, -2.524526140e-08f, -2.522080984e-08f,
--2.519632203e-08f, -2.517179804e-08f, -2.514723791e-08f, -2.512264170e-08f, -2.509800946e-08f, -2.507334126e-08f, -2.504863715e-08f, -2.502389718e-08f, -2.499912142e-08f, -2.497430991e-08f,
--2.494946271e-08f, -2.492457988e-08f, -2.489966147e-08f, -2.487470754e-08f, -2.484971816e-08f, -2.482469336e-08f, -2.479963321e-08f, -2.477453777e-08f, -2.474940709e-08f, -2.472424123e-08f,
--2.469904024e-08f, -2.467380418e-08f, -2.464853311e-08f, -2.462322708e-08f, -2.459788616e-08f, -2.457251039e-08f, -2.454709983e-08f, -2.452165455e-08f, -2.449617459e-08f, -2.447066002e-08f,
--2.444511089e-08f, -2.441952726e-08f, -2.439390918e-08f, -2.436825671e-08f, -2.434256992e-08f, -2.431684885e-08f, -2.429109356e-08f, -2.426530411e-08f, -2.423948056e-08f, -2.421362297e-08f,
--2.418773138e-08f, -2.416180587e-08f, -2.413584648e-08f, -2.410985328e-08f, -2.408382632e-08f, -2.405776566e-08f, -2.403167135e-08f, -2.400554346e-08f, -2.397938204e-08f, -2.395318715e-08f,
--2.392695885e-08f, -2.390069719e-08f, -2.387440224e-08f, -2.384807404e-08f, -2.382171267e-08f, -2.379531817e-08f, -2.376889060e-08f, -2.374243003e-08f, -2.371593651e-08f, -2.368941009e-08f,
--2.366285085e-08f, -2.363625882e-08f, -2.360963408e-08f, -2.358297668e-08f, -2.355628668e-08f, -2.352956414e-08f, -2.350280911e-08f, -2.347602166e-08f, -2.344920184e-08f, -2.342234971e-08f,
--2.339546533e-08f, -2.336854876e-08f, -2.334160006e-08f, -2.331461928e-08f, -2.328760649e-08f, -2.326056173e-08f, -2.323348508e-08f, -2.320637659e-08f, -2.317923632e-08f, -2.315206433e-08f,
--2.312486067e-08f, -2.309762541e-08f, -2.307035860e-08f, -2.304306030e-08f, -2.301573058e-08f, -2.298836949e-08f, -2.296097709e-08f, -2.293355344e-08f, -2.290609860e-08f, -2.287861263e-08f,
--2.285109558e-08f, -2.282354752e-08f, -2.279596851e-08f, -2.276835860e-08f, -2.274071786e-08f, -2.271304634e-08f, -2.268534411e-08f, -2.265761121e-08f, -2.262984772e-08f, -2.260205369e-08f,
--2.257422919e-08f, -2.254637426e-08f, -2.251848898e-08f, -2.249057339e-08f, -2.246262757e-08f, -2.243465156e-08f, -2.240664544e-08f, -2.237860926e-08f, -2.235054307e-08f, -2.232244695e-08f,
--2.229432094e-08f, -2.226616511e-08f, -2.223797953e-08f, -2.220976424e-08f, -2.218151931e-08f, -2.215324480e-08f, -2.212494077e-08f, -2.209660728e-08f, -2.206824439e-08f, -2.203985216e-08f,
--2.201143065e-08f, -2.198297993e-08f, -2.195450004e-08f, -2.192599105e-08f, -2.189745303e-08f, -2.186888603e-08f, -2.184029011e-08f, -2.181166534e-08f, -2.178301176e-08f, -2.175432946e-08f,
--2.172561847e-08f, -2.169687888e-08f, -2.166811073e-08f, -2.163931408e-08f, -2.161048900e-08f, -2.158163556e-08f, -2.155275380e-08f, -2.152384379e-08f, -2.149490559e-08f, -2.146593926e-08f,
--2.143694486e-08f, -2.140792246e-08f, -2.137887211e-08f, -2.134979388e-08f, -2.132068782e-08f, -2.129155400e-08f, -2.126239248e-08f, -2.123320332e-08f, -2.120398658e-08f, -2.117474232e-08f,
--2.114547060e-08f, -2.111617149e-08f, -2.108684504e-08f, -2.105749132e-08f, -2.102811038e-08f, -2.099870230e-08f, -2.096926712e-08f, -2.093980492e-08f, -2.091031575e-08f, -2.088079967e-08f,
--2.085125676e-08f, -2.082168705e-08f, -2.079209063e-08f, -2.076246755e-08f, -2.073281787e-08f, -2.070314166e-08f, -2.067343897e-08f, -2.064370986e-08f, -2.061395441e-08f, -2.058417267e-08f,
--2.055436470e-08f, -2.052453056e-08f, -2.049467032e-08f, -2.046478403e-08f, -2.043487177e-08f, -2.040493359e-08f, -2.037496955e-08f, -2.034497971e-08f, -2.031496414e-08f, -2.028492290e-08f,
--2.025485605e-08f, -2.022476366e-08f, -2.019464578e-08f, -2.016450248e-08f, -2.013433381e-08f, -2.010413985e-08f, -2.007392065e-08f, -2.004367628e-08f, -2.001340679e-08f, -1.998311225e-08f,
--1.995279273e-08f, -1.992244828e-08f, -1.989207897e-08f, -1.986168485e-08f, -1.983126600e-08f, -1.980082247e-08f, -1.977035433e-08f, -1.973986164e-08f, -1.970934445e-08f, -1.967880284e-08f,
--1.964823687e-08f, -1.961764659e-08f, -1.958703208e-08f, -1.955639339e-08f, -1.952573058e-08f, -1.949504373e-08f, -1.946433288e-08f, -1.943359811e-08f, -1.940283947e-08f, -1.937205704e-08f,
--1.934125086e-08f, -1.931042101e-08f, -1.927956755e-08f, -1.924869053e-08f, -1.921779003e-08f, -1.918686611e-08f, -1.915591882e-08f, -1.912494824e-08f, -1.909395442e-08f, -1.906293742e-08f,
--1.903189732e-08f, -1.900083417e-08f, -1.896974803e-08f, -1.893863897e-08f, -1.890750706e-08f, -1.887635235e-08f, -1.884517490e-08f, -1.881397479e-08f, -1.878275207e-08f, -1.875150681e-08f,
--1.872023907e-08f, -1.868894891e-08f, -1.865763640e-08f, -1.862630159e-08f, -1.859494456e-08f, -1.856356537e-08f, -1.853216407e-08f, -1.850074074e-08f, -1.846929543e-08f, -1.843782821e-08f,
--1.840633914e-08f, -1.837482829e-08f, -1.834329571e-08f, -1.831174148e-08f, -1.828016566e-08f, -1.824856830e-08f, -1.821694947e-08f, -1.818530924e-08f, -1.815364767e-08f, -1.812196482e-08f,
--1.809026076e-08f, -1.805853554e-08f, -1.802678924e-08f, -1.799502192e-08f, -1.796323363e-08f, -1.793142445e-08f, -1.789959444e-08f, -1.786774365e-08f, -1.783587216e-08f, -1.780398003e-08f,
--1.777206732e-08f, -1.774013409e-08f, -1.770818041e-08f, -1.767620635e-08f, -1.764421196e-08f, -1.761219731e-08f, -1.758016246e-08f, -1.754810748e-08f, -1.751603243e-08f, -1.748393738e-08f,
--1.745182238e-08f, -1.741968751e-08f, -1.738753282e-08f, -1.735535839e-08f, -1.732316426e-08f, -1.729095052e-08f, -1.725871721e-08f, -1.722646441e-08f, -1.719419218e-08f, -1.716190058e-08f,
--1.712958968e-08f, -1.709725954e-08f, -1.706491023e-08f, -1.703254180e-08f, -1.700015432e-08f, -1.696774787e-08f, -1.693532249e-08f, -1.690287826e-08f, -1.687041523e-08f, -1.683793348e-08f,
--1.680543307e-08f, -1.677291405e-08f, -1.674037650e-08f, -1.670782048e-08f, -1.667524606e-08f, -1.664265329e-08f, -1.661004224e-08f, -1.657741298e-08f, -1.654476556e-08f, -1.651210006e-08f,
--1.647941654e-08f, -1.644671506e-08f, -1.641399568e-08f, -1.638125848e-08f, -1.634850351e-08f, -1.631573083e-08f, -1.628294052e-08f, -1.625013264e-08f, -1.621730725e-08f, -1.618446442e-08f,
--1.615160420e-08f, -1.611872667e-08f, -1.608583189e-08f, -1.605291992e-08f, -1.601999082e-08f, -1.598704467e-08f, -1.595408152e-08f, -1.592110145e-08f, -1.588810450e-08f, -1.585509076e-08f,
--1.582206028e-08f, -1.578901312e-08f, -1.575594936e-08f, -1.572286905e-08f, -1.568977227e-08f, -1.565665906e-08f, -1.562352951e-08f, -1.559038367e-08f, -1.555722161e-08f, -1.552404339e-08f,
--1.549084908e-08f, -1.545763874e-08f, -1.542441243e-08f, -1.539117023e-08f, -1.535791218e-08f, -1.532463837e-08f, -1.529134885e-08f, -1.525804369e-08f, -1.522472295e-08f, -1.519138670e-08f,
--1.515803500e-08f, -1.512466791e-08f, -1.509128551e-08f, -1.505788785e-08f, -1.502447500e-08f, -1.499104702e-08f, -1.495760399e-08f, -1.492414595e-08f, -1.489067298e-08f, -1.485718515e-08f,
--1.482368251e-08f, -1.479016513e-08f, -1.475663308e-08f, -1.472308641e-08f, -1.468952521e-08f, -1.465594952e-08f, -1.462235941e-08f, -1.458875496e-08f, -1.455513621e-08f, -1.452150325e-08f,
--1.448785613e-08f, -1.445419491e-08f, -1.442051967e-08f, -1.438683046e-08f, -1.435312735e-08f, -1.431941041e-08f, -1.428567969e-08f, -1.425193527e-08f, -1.421817721e-08f, -1.418440558e-08f,
--1.415062043e-08f, -1.411682184e-08f, -1.408300986e-08f, -1.404918456e-08f, -1.401534602e-08f, -1.398149428e-08f, -1.394762942e-08f, -1.391375150e-08f, -1.387986058e-08f, -1.384595674e-08f,
--1.381204003e-08f, -1.377811052e-08f, -1.374416827e-08f, -1.371021335e-08f, -1.367624582e-08f, -1.364226576e-08f, -1.360827321e-08f, -1.357426825e-08f, -1.354025095e-08f, -1.350622136e-08f,
--1.347217955e-08f, -1.343812559e-08f, -1.340405953e-08f, -1.336998145e-08f, -1.333589142e-08f, -1.330178948e-08f, -1.326767572e-08f, -1.323355019e-08f, -1.319941295e-08f, -1.316526408e-08f,
--1.313110364e-08f, -1.309693169e-08f, -1.306274829e-08f, -1.302855352e-08f, -1.299434743e-08f, -1.296013010e-08f, -1.292590158e-08f, -1.289166194e-08f, -1.285741124e-08f, -1.282314955e-08f,
--1.278887694e-08f, -1.275459347e-08f, -1.272029919e-08f, -1.268599419e-08f, -1.265167852e-08f, -1.261735225e-08f, -1.258301543e-08f, -1.254866815e-08f, -1.251431045e-08f, -1.247994241e-08f,
--1.244556409e-08f, -1.241117555e-08f, -1.237677687e-08f, -1.234236809e-08f, -1.230794930e-08f, -1.227352055e-08f, -1.223908190e-08f, -1.220463343e-08f, -1.217017520e-08f, -1.213570726e-08f,
--1.210122969e-08f, -1.206674256e-08f, -1.203224591e-08f, -1.199773983e-08f, -1.196322437e-08f, -1.192869960e-08f, -1.189416558e-08f, -1.185962238e-08f, -1.182507006e-08f, -1.179050869e-08f,
--1.175593833e-08f, -1.172135904e-08f, -1.168677090e-08f, -1.165217396e-08f, -1.161756829e-08f, -1.158295395e-08f, -1.154833101e-08f, -1.151369954e-08f, -1.147905959e-08f, -1.144441123e-08f,
--1.140975453e-08f, -1.137508955e-08f, -1.134041635e-08f, -1.130573500e-08f, -1.127104557e-08f, -1.123634811e-08f, -1.120164270e-08f, -1.116692939e-08f, -1.113220826e-08f, -1.109747936e-08f,
--1.106274276e-08f, -1.102799852e-08f, -1.099324672e-08f, -1.095848741e-08f, -1.092372065e-08f, -1.088894652e-08f, -1.085416507e-08f, -1.081937637e-08f, -1.078458049e-08f, -1.074977749e-08f,
--1.071496743e-08f, -1.068015038e-08f, -1.064532640e-08f, -1.061049555e-08f, -1.057565791e-08f, -1.054081353e-08f, -1.050596248e-08f, -1.047110483e-08f, -1.043624063e-08f, -1.040136995e-08f,
--1.036649286e-08f, -1.033160942e-08f, -1.029671969e-08f, -1.026182374e-08f, -1.022692163e-08f, -1.019201343e-08f, -1.015709921e-08f, -1.012217901e-08f, -1.008725292e-08f, -1.005232098e-08f,
--1.001738328e-08f, -9.982439866e-09f, -9.947490808e-09f, -9.912536170e-09f, -9.877576015e-09f, -9.842610407e-09f, -9.807639412e-09f, -9.772663091e-09f, -9.737681510e-09f, -9.702694733e-09f,
--9.667702823e-09f, -9.632705845e-09f, -9.597703862e-09f, -9.562696938e-09f, -9.527685138e-09f, -9.492668525e-09f, -9.457647163e-09f, -9.422621116e-09f, -9.387590448e-09f, -9.352555222e-09f,
--9.317515503e-09f, -9.282471354e-09f, -9.247422840e-09f, -9.212370024e-09f, -9.177312969e-09f, -9.142251740e-09f, -9.107186400e-09f, -9.072117013e-09f, -9.037043644e-09f, -9.001966354e-09f,
--8.966885209e-09f, -8.931800272e-09f, -8.896711606e-09f, -8.861619276e-09f, -8.826523345e-09f, -8.791423876e-09f, -8.756320933e-09f, -8.721214580e-09f, -8.686104880e-09f, -8.650991897e-09f,
--8.615875695e-09f, -8.580756337e-09f, -8.545633886e-09f, -8.510508406e-09f, -8.475379961e-09f, -8.440248613e-09f, -8.405114428e-09f, -8.369977467e-09f, -8.334837794e-09f, -8.299695473e-09f,
--8.264550567e-09f, -8.229403140e-09f, -8.194253254e-09f, -8.159100974e-09f, -8.123946362e-09f, -8.088789482e-09f, -8.053630397e-09f, -8.018469170e-09f, -7.983305865e-09f, -7.948140545e-09f,
--7.912973273e-09f, -7.877804113e-09f, -7.842633126e-09f, -7.807460378e-09f, -7.772285930e-09f, -7.737109846e-09f, -7.701932189e-09f, -7.666753022e-09f, -7.631572409e-09f, -7.596390411e-09f,
--7.561207093e-09f, -7.526022517e-09f, -7.490836746e-09f, -7.455649844e-09f, -7.420461873e-09f, -7.385272896e-09f, -7.350082976e-09f, -7.314892176e-09f, -7.279700559e-09f, -7.244508187e-09f,
--7.209315124e-09f, -7.174121433e-09f, -7.138927176e-09f, -7.103732415e-09f, -7.068537215e-09f, -7.033341636e-09f, -6.998145743e-09f, -6.962949598e-09f, -6.927753264e-09f, -6.892556802e-09f,
--6.857360276e-09f, -6.822163749e-09f, -6.786967283e-09f, -6.751770941e-09f, -6.716574784e-09f, -6.681378877e-09f, -6.646183280e-09f, -6.610988057e-09f, -6.575793271e-09f, -6.540598983e-09f,
--6.505405256e-09f, -6.470212152e-09f, -6.435019734e-09f, -6.399828064e-09f, -6.364637205e-09f, -6.329447218e-09f, -6.294258167e-09f, -6.259070113e-09f, -6.223883118e-09f, -6.188697245e-09f,
--6.153512557e-09f, -6.118329114e-09f, -6.083146979e-09f, -6.047966215e-09f, -6.012786884e-09f, -5.977609047e-09f, -5.942432766e-09f, -5.907258105e-09f, -5.872085124e-09f, -5.836913885e-09f,
--5.801744451e-09f, -5.766576884e-09f, -5.731411245e-09f, -5.696247597e-09f, -5.661086000e-09f, -5.625926518e-09f, -5.590769212e-09f, -5.555614143e-09f, -5.520461373e-09f, -5.485310965e-09f,
--5.450162979e-09f, -5.415017478e-09f, -5.379874523e-09f, -5.344734176e-09f, -5.309596498e-09f, -5.274461551e-09f, -5.239329397e-09f, -5.204200097e-09f, -5.169073712e-09f, -5.133950305e-09f,
--5.098829936e-09f, -5.063712666e-09f, -5.028598559e-09f, -4.993487673e-09f, -4.958380072e-09f, -4.923275816e-09f, -4.888174967e-09f, -4.853077586e-09f, -4.817983734e-09f, -4.782893472e-09f,
--4.747806862e-09f, -4.712723965e-09f, -4.677644841e-09f, -4.642569552e-09f, -4.607498160e-09f, -4.572430724e-09f, -4.537367306e-09f, -4.502307968e-09f, -4.467252769e-09f, -4.432201772e-09f,
--4.397155036e-09f, -4.362112623e-09f, -4.327074594e-09f, -4.292041009e-09f, -4.257011930e-09f, -4.221987416e-09f, -4.186967529e-09f, -4.151952329e-09f, -4.116941878e-09f, -4.081936235e-09f,
--4.046935462e-09f, -4.011939618e-09f, -3.976948766e-09f, -3.941962964e-09f, -3.906982273e-09f, -3.872006755e-09f, -3.837036469e-09f, -3.802071476e-09f, -3.767111836e-09f, -3.732157610e-09f,
--3.697208858e-09f, -3.662265640e-09f, -3.627328016e-09f, -3.592396047e-09f, -3.557469793e-09f, -3.522549314e-09f, -3.487634670e-09f, -3.452725922e-09f, -3.417823129e-09f, -3.382926351e-09f,
--3.348035649e-09f, -3.313151082e-09f, -3.278272710e-09f, -3.243400594e-09f, -3.208534793e-09f, -3.173675367e-09f, -3.138822376e-09f, -3.103975880e-09f, -3.069135938e-09f, -3.034302610e-09f,
--2.999475956e-09f, -2.964656035e-09f, -2.929842907e-09f, -2.895036633e-09f, -2.860237270e-09f, -2.825444880e-09f, -2.790659520e-09f, -2.755881252e-09f, -2.721110133e-09f, -2.686346225e-09f,
--2.651589585e-09f, -2.616840273e-09f, -2.582098350e-09f, -2.547363873e-09f, -2.512636902e-09f, -2.477917497e-09f, -2.443205716e-09f, -2.408501619e-09f, -2.373805264e-09f, -2.339116711e-09f,
--2.304436020e-09f, -2.269763248e-09f, -2.235098454e-09f, -2.200441699e-09f, -2.165793040e-09f, -2.131152537e-09f, -2.096520247e-09f, -2.061896231e-09f, -2.027280547e-09f, -1.992673254e-09f,
--1.958074409e-09f, -1.923484073e-09f, -1.888902303e-09f, -1.854329158e-09f, -1.819764697e-09f, -1.785208978e-09f, -1.750662060e-09f, -1.716124000e-09f, -1.681594858e-09f, -1.647074692e-09f,
--1.612563561e-09f, -1.578061521e-09f, -1.543568633e-09f, -1.509084953e-09f, -1.474610540e-09f, -1.440145453e-09f, -1.405689749e-09f, -1.371243486e-09f, -1.336806723e-09f, -1.302379518e-09f,
--1.267961928e-09f, -1.233554011e-09f, -1.199155826e-09f, -1.164767430e-09f, -1.130388880e-09f, -1.096020236e-09f, -1.061661554e-09f, -1.027312892e-09f, -9.929743076e-10f, -9.586458590e-10f,
--9.243276035e-10f, -8.900195985e-10f, -8.557219017e-10f, -8.214345705e-10f, -7.871576624e-10f, -7.528912347e-10f, -7.186353448e-10f, -6.843900500e-10f, -6.501554077e-10f, -6.159314750e-10f,
--5.817183091e-10f, -5.475159673e-10f, -5.133245067e-10f, -4.791439843e-10f, -4.449744573e-10f, -4.108159825e-10f, -3.766686171e-10f, -3.425324179e-10f, -3.084074417e-10f, -2.742937456e-10f,
--2.401913863e-10f, -2.061004205e-10f, -1.720209050e-10f, -1.379528966e-10f, -1.038964518e-10f, -6.985162720e-11f, -3.581847950e-11f, -1.797065166e-12f, 3.221255929e-11f, 6.621033742e-11f,
-1.001962128e-10f, 1.341701291e-10f, 1.681320299e-10f, 2.020818590e-10f, 2.360195601e-10f, 2.699450770e-10f, 3.038583535e-10f, 3.377593336e-10f, 3.716479610e-10f, 4.055241798e-10f,
-4.393879340e-10f, 4.732391676e-10f, 5.070778247e-10f, 5.409038494e-10f, 5.747171859e-10f, 6.085177783e-10f, 6.423055710e-10f, 6.760805082e-10f, 7.098425342e-10f, 7.435915934e-10f,
-7.773276303e-10f, 8.110505892e-10f, 8.447604148e-10f, 8.784570514e-10f, 9.121404438e-10f, 9.458105365e-10f, 9.794672743e-10f, 1.013110602e-09f, 1.046740464e-09f, 1.080356805e-09f,
-1.113959570e-09f, 1.147548705e-09f, 1.181124153e-09f, 1.214685860e-09f, 1.248233771e-09f, 1.281767831e-09f, 1.315287986e-09f, 1.348794179e-09f, 1.382286357e-09f, 1.415764465e-09f,
-1.449228447e-09f, 1.482678250e-09f, 1.516113818e-09f, 1.549535098e-09f, 1.582942033e-09f, 1.616334571e-09f, 1.649712657e-09f, 1.683076235e-09f, 1.716425253e-09f, 1.749759655e-09f,
-1.783079387e-09f, 1.816384394e-09f, 1.849674624e-09f, 1.882950021e-09f, 1.916210532e-09f, 1.949456102e-09f, 1.982686678e-09f, 2.015902205e-09f, 2.049102630e-09f, 2.082287898e-09f,
-2.115457956e-09f, 2.148612751e-09f, 2.181752227e-09f, 2.214876333e-09f, 2.247985013e-09f, 2.281078215e-09f, 2.314155885e-09f, 2.347217969e-09f, 2.380264414e-09f, 2.413295167e-09f,
-2.446310174e-09f, 2.479309381e-09f, 2.512292736e-09f, 2.545260186e-09f, 2.578211677e-09f, 2.611147155e-09f, 2.644066569e-09f, 2.676969865e-09f, 2.709856989e-09f, 2.742727890e-09f,
-2.775582513e-09f, 2.808420807e-09f, 2.841242718e-09f, 2.874048194e-09f, 2.906837182e-09f, 2.939609630e-09f, 2.972365484e-09f, 3.005104692e-09f, 3.037827202e-09f, 3.070532961e-09f,
-3.103221917e-09f, 3.135894017e-09f, 3.168549209e-09f, 3.201187441e-09f, 3.233808661e-09f, 3.266412816e-09f, 3.298999854e-09f, 3.331569723e-09f, 3.364122372e-09f, 3.396657748e-09f,
-3.429175799e-09f, 3.461676473e-09f, 3.494159719e-09f, 3.526625485e-09f, 3.559073718e-09f, 3.591504368e-09f, 3.623917383e-09f, 3.656312710e-09f, 3.688690300e-09f, 3.721050099e-09f,
-3.753392057e-09f, 3.785716122e-09f, 3.818022243e-09f, 3.850310368e-09f, 3.882580447e-09f, 3.914832428e-09f, 3.947066260e-09f, 3.979281892e-09f, 4.011479273e-09f, 4.043658352e-09f,
-4.075819078e-09f, 4.107961399e-09f, 4.140085266e-09f, 4.172190628e-09f, 4.204277433e-09f, 4.236345631e-09f, 4.268395171e-09f, 4.300426003e-09f, 4.332438077e-09f, 4.364431341e-09f,
-4.396405746e-09f, 4.428361240e-09f, 4.460297774e-09f, 4.492215297e-09f, 4.524113760e-09f, 4.555993111e-09f, 4.587853301e-09f, 4.619694280e-09f, 4.651515998e-09f, 4.683318404e-09f,
-4.715101449e-09f, 4.746865083e-09f, 4.778609257e-09f, 4.810333919e-09f, 4.842039022e-09f, 4.873724514e-09f, 4.905390346e-09f, 4.937036470e-09f, 4.968662835e-09f, 5.000269391e-09f,
-5.031856091e-09f, 5.063422883e-09f, 5.094969719e-09f, 5.126496550e-09f, 5.158003326e-09f, 5.189489999e-09f, 5.220956519e-09f, 5.252402837e-09f, 5.283828904e-09f, 5.315234671e-09f,
-5.346620090e-09f, 5.377985112e-09f, 5.409329687e-09f, 5.440653768e-09f, 5.471957305e-09f, 5.503240250e-09f, 5.534502554e-09f, 5.565744169e-09f, 5.596965047e-09f, 5.628165139e-09f,
-5.659344396e-09f, 5.690502771e-09f, 5.721640215e-09f, 5.752756680e-09f, 5.783852118e-09f, 5.814926481e-09f, 5.845979721e-09f, 5.877011789e-09f, 5.908022639e-09f, 5.939012222e-09f,
-5.969980490e-09f, 6.000927396e-09f, 6.031852892e-09f, 6.062756930e-09f, 6.093639463e-09f, 6.124500443e-09f, 6.155339823e-09f, 6.186157555e-09f, 6.216953593e-09f, 6.247727888e-09f,
-6.278480394e-09f, 6.309211063e-09f, 6.339919849e-09f, 6.370606703e-09f, 6.401271580e-09f, 6.431914432e-09f, 6.462535212e-09f, 6.493133873e-09f, 6.523710370e-09f, 6.554264654e-09f,
-6.584796679e-09f, 6.615306399e-09f, 6.645793767e-09f, 6.676258736e-09f, 6.706701260e-09f, 6.737121294e-09f, 6.767518789e-09f, 6.797893700e-09f, 6.828245982e-09f, 6.858575586e-09f,
-6.888882469e-09f, 6.919166582e-09f, 6.949427882e-09f, 6.979666320e-09f, 7.009881853e-09f, 7.040074433e-09f, 7.070244015e-09f, 7.100390553e-09f, 7.130514002e-09f, 7.160614316e-09f,
-7.190691449e-09f, 7.220745356e-09f, 7.250775992e-09f, 7.280783311e-09f, 7.310767268e-09f, 7.340727817e-09f, 7.370664914e-09f, 7.400578513e-09f, 7.430468569e-09f, 7.460335037e-09f,
-7.490177872e-09f, 7.519997030e-09f, 7.549792465e-09f, 7.579564132e-09f, 7.609311988e-09f, 7.639035986e-09f, 7.668736083e-09f, 7.698412234e-09f, 7.728064394e-09f, 7.757692520e-09f,
-7.787296566e-09f, 7.816876488e-09f, 7.846432242e-09f, 7.875963784e-09f, 7.905471070e-09f, 7.934954055e-09f, 7.964412696e-09f, 7.993846948e-09f, 8.023256768e-09f, 8.052642112e-09f,
-8.082002935e-09f, 8.111339195e-09f, 8.140650847e-09f, 8.169937848e-09f, 8.199200155e-09f, 8.228437723e-09f, 8.257650509e-09f, 8.286838471e-09f, 8.316001564e-09f, 8.345139746e-09f,
-8.374252973e-09f, 8.403341202e-09f, 8.432404390e-09f, 8.461442493e-09f, 8.490455470e-09f, 8.519443277e-09f, 8.548405871e-09f, 8.577343209e-09f, 8.606255249e-09f, 8.635141948e-09f,
-8.664003264e-09f, 8.692839153e-09f, 8.721649574e-09f, 8.750434483e-09f, 8.779193839e-09f, 8.807927600e-09f, 8.836635722e-09f, 8.865318164e-09f, 8.893974884e-09f, 8.922605840e-09f,
-8.951210989e-09f, 8.979790290e-09f, 9.008343701e-09f, 9.036871180e-09f, 9.065372685e-09f, 9.093848174e-09f, 9.122297607e-09f, 9.150720941e-09f, 9.179118134e-09f, 9.207489146e-09f,
-9.235833935e-09f, 9.264152460e-09f, 9.292444679e-09f, 9.320710551e-09f, 9.348950035e-09f, 9.377163090e-09f, 9.405349675e-09f, 9.433509749e-09f, 9.461643271e-09f, 9.489750201e-09f,
-9.517830496e-09f, 9.545884118e-09f, 9.573911024e-09f, 9.601911175e-09f, 9.629884530e-09f, 9.657831049e-09f, 9.685750690e-09f, 9.713643414e-09f, 9.741509181e-09f, 9.769347950e-09f,
-9.797159681e-09f, 9.824944334e-09f, 9.852701870e-09f, 9.880432247e-09f, 9.908135426e-09f, 9.935811367e-09f, 9.963460031e-09f, 9.991081378e-09f, 1.001867537e-08f, 1.004624196e-08f,
-1.007378112e-08f, 1.010129280e-08f, 1.012877697e-08f, 1.015623358e-08f, 1.018366260e-08f, 1.021106399e-08f, 1.023843770e-08f, 1.026578371e-08f, 1.029310196e-08f, 1.032039243e-08f,
-1.034765506e-08f, 1.037488983e-08f, 1.040209670e-08f, 1.042927562e-08f, 1.045642656e-08f, 1.048354948e-08f, 1.051064433e-08f, 1.053771109e-08f, 1.056474972e-08f, 1.059176016e-08f,
-1.061874240e-08f, 1.064569638e-08f, 1.067262207e-08f, 1.069951944e-08f, 1.072638844e-08f, 1.075322904e-08f, 1.078004119e-08f, 1.080682487e-08f, 1.083358003e-08f, 1.086030663e-08f,
-1.088700464e-08f, 1.091367402e-08f, 1.094031474e-08f, 1.096692675e-08f, 1.099351001e-08f, 1.102006450e-08f, 1.104659017e-08f, 1.107308699e-08f, 1.109955492e-08f, 1.112599392e-08f,
-1.115240395e-08f, 1.117878498e-08f, 1.120513698e-08f, 1.123145989e-08f, 1.125775370e-08f, 1.128401836e-08f, 1.131025383e-08f, 1.133646008e-08f, 1.136263707e-08f, 1.138878477e-08f,
-1.141490313e-08f, 1.144099213e-08f, 1.146705172e-08f, 1.149308188e-08f, 1.151908256e-08f, 1.154505372e-08f, 1.157099534e-08f, 1.159690738e-08f, 1.162278980e-08f, 1.164864256e-08f,
-1.167446563e-08f, 1.170025898e-08f, 1.172602256e-08f, 1.175175635e-08f, 1.177746030e-08f, 1.180313438e-08f, 1.182877857e-08f, 1.185439281e-08f, 1.187997708e-08f, 1.190553134e-08f,
-1.193105556e-08f, 1.195654970e-08f, 1.198201372e-08f, 1.200744760e-08f, 1.203285129e-08f, 1.205822477e-08f, 1.208356799e-08f, 1.210888093e-08f, 1.213416354e-08f, 1.215941580e-08f,
-1.218463767e-08f, 1.220982912e-08f, 1.223499010e-08f, 1.226012060e-08f, 1.228522056e-08f, 1.231028997e-08f, 1.233532878e-08f, 1.236033696e-08f, 1.238531448e-08f, 1.241026130e-08f,
-1.243517740e-08f, 1.246006273e-08f, 1.248491726e-08f, 1.250974096e-08f, 1.253453380e-08f, 1.255929574e-08f, 1.258402675e-08f, 1.260872680e-08f, 1.263339585e-08f, 1.265803387e-08f,
-1.268264082e-08f, 1.270721668e-08f, 1.273176142e-08f, 1.275627499e-08f, 1.278075736e-08f, 1.280520851e-08f, 1.282962840e-08f, 1.285401700e-08f, 1.287837427e-08f, 1.290270018e-08f,
-1.292699471e-08f, 1.295125781e-08f, 1.297548946e-08f, 1.299968963e-08f, 1.302385828e-08f, 1.304799537e-08f, 1.307210089e-08f, 1.309617479e-08f, 1.312021704e-08f, 1.314422762e-08f,
-1.316820649e-08f, 1.319215362e-08f, 1.321606897e-08f, 1.323995252e-08f, 1.326380424e-08f, 1.328762409e-08f, 1.331141205e-08f, 1.333516807e-08f, 1.335889214e-08f, 1.338258421e-08f,
-1.340624427e-08f, 1.342987227e-08f, 1.345346818e-08f, 1.347703198e-08f, 1.350056364e-08f, 1.352406312e-08f, 1.354753040e-08f, 1.357096544e-08f, 1.359436821e-08f, 1.361773868e-08f,
-1.364107683e-08f, 1.366438262e-08f, 1.368765602e-08f, 1.371089700e-08f, 1.373410554e-08f, 1.375728159e-08f, 1.378042514e-08f, 1.380353615e-08f, 1.382661459e-08f, 1.384966044e-08f,
-1.387267366e-08f, 1.389565422e-08f, 1.391860210e-08f, 1.394151726e-08f, 1.396439967e-08f, 1.398724932e-08f, 1.401006616e-08f, 1.403285016e-08f, 1.405560131e-08f, 1.407831957e-08f,
-1.410100490e-08f, 1.412365729e-08f, 1.414627671e-08f, 1.416886311e-08f, 1.419141649e-08f, 1.421393680e-08f, 1.423642402e-08f, 1.425887812e-08f, 1.428129907e-08f, 1.430368685e-08f,
-1.432604142e-08f, 1.434836276e-08f, 1.437065084e-08f, 1.439290563e-08f, 1.441512710e-08f, 1.443731523e-08f, 1.445946999e-08f, 1.448159134e-08f, 1.450367927e-08f, 1.452573375e-08f,
-1.454775474e-08f, 1.456974222e-08f, 1.459169617e-08f, 1.461361655e-08f, 1.463550333e-08f, 1.465735650e-08f, 1.467917602e-08f, 1.470096187e-08f, 1.472271402e-08f, 1.474443244e-08f,
-1.476611711e-08f, 1.478776800e-08f, 1.480938507e-08f, 1.483096832e-08f, 1.485251770e-08f, 1.487403320e-08f, 1.489551478e-08f, 1.491696243e-08f, 1.493837610e-08f, 1.495975579e-08f,
-1.498110146e-08f, 1.500241308e-08f, 1.502369063e-08f, 1.504493409e-08f, 1.506614342e-08f, 1.508731861e-08f, 1.510845962e-08f, 1.512956643e-08f, 1.515063902e-08f, 1.517167736e-08f,
-1.519268142e-08f, 1.521365118e-08f, 1.523458661e-08f, 1.525548770e-08f, 1.527635440e-08f, 1.529718671e-08f, 1.531798458e-08f, 1.533874801e-08f, 1.535947696e-08f, 1.538017141e-08f,
-1.540083133e-08f, 1.542145670e-08f, 1.544204750e-08f, 1.546260370e-08f, 1.548312527e-08f, 1.550361219e-08f, 1.552406444e-08f, 1.554448200e-08f, 1.556486483e-08f, 1.558521292e-08f,
-1.560552624e-08f, 1.562580476e-08f, 1.564604847e-08f, 1.566625734e-08f, 1.568643134e-08f, 1.570657046e-08f, 1.572667466e-08f, 1.574674393e-08f, 1.576677824e-08f, 1.578677757e-08f,
-1.580674189e-08f, 1.582667118e-08f, 1.584656542e-08f, 1.586642459e-08f, 1.588624866e-08f, 1.590603761e-08f, 1.592579141e-08f, 1.594551005e-08f, 1.596519350e-08f, 1.598484174e-08f,
-1.600445474e-08f, 1.602403249e-08f, 1.604357495e-08f, 1.606308212e-08f, 1.608255396e-08f, 1.610199046e-08f, 1.612139158e-08f, 1.614075732e-08f, 1.616008764e-08f, 1.617938253e-08f,
-1.619864197e-08f, 1.621786592e-08f, 1.623705438e-08f, 1.625620731e-08f, 1.627532470e-08f, 1.629440653e-08f, 1.631345277e-08f, 1.633246340e-08f, 1.635143840e-08f, 1.637037776e-08f,
-1.638928144e-08f, 1.640814943e-08f, 1.642698171e-08f, 1.644577826e-08f, 1.646453905e-08f, 1.648326406e-08f, 1.650195328e-08f, 1.652060668e-08f, 1.653922424e-08f, 1.655780594e-08f,
-1.657635177e-08f, 1.659486170e-08f, 1.661333570e-08f, 1.663177377e-08f, 1.665017588e-08f, 1.666854201e-08f, 1.668687214e-08f, 1.670516625e-08f, 1.672342432e-08f, 1.674164633e-08f,
-1.675983226e-08f, 1.677798209e-08f, 1.679609581e-08f, 1.681417338e-08f, 1.683221480e-08f, 1.685022004e-08f, 1.686818909e-08f, 1.688612192e-08f, 1.690401852e-08f, 1.692187886e-08f,
-1.693970294e-08f, 1.695749072e-08f, 1.697524219e-08f, 1.699295733e-08f, 1.701063612e-08f, 1.702827855e-08f, 1.704588459e-08f, 1.706345423e-08f, 1.708098745e-08f, 1.709848423e-08f,
-1.711594455e-08f, 1.713336839e-08f, 1.715075574e-08f, 1.716810657e-08f, 1.718542088e-08f, 1.720269864e-08f, 1.721993982e-08f, 1.723714443e-08f, 1.725431243e-08f, 1.727144382e-08f,
-1.728853856e-08f, 1.730559665e-08f, 1.732261807e-08f, 1.733960280e-08f, 1.735655082e-08f, 1.737346212e-08f, 1.739033668e-08f, 1.740717448e-08f, 1.742397550e-08f, 1.744073974e-08f,
-1.745746716e-08f, 1.747415776e-08f, 1.749081151e-08f, 1.750742841e-08f, 1.752400843e-08f, 1.754055156e-08f, 1.755705778e-08f, 1.757352707e-08f, 1.758995943e-08f, 1.760635483e-08f,
-1.762271325e-08f, 1.763903468e-08f, 1.765531911e-08f, 1.767156652e-08f, 1.768777689e-08f, 1.770395021e-08f, 1.772008646e-08f, 1.773618562e-08f, 1.775224769e-08f, 1.776827264e-08f,
-1.778426045e-08f, 1.780021113e-08f, 1.781612464e-08f, 1.783200097e-08f, 1.784784012e-08f, 1.786364206e-08f, 1.787940677e-08f, 1.789513425e-08f, 1.791082448e-08f, 1.792647744e-08f,
-1.794209312e-08f, 1.795767151e-08f, 1.797321259e-08f, 1.798871634e-08f, 1.800418275e-08f, 1.801961181e-08f, 1.803500351e-08f, 1.805035782e-08f, 1.806567474e-08f, 1.808095424e-08f,
-1.809619633e-08f, 1.811140097e-08f, 1.812656817e-08f, 1.814169790e-08f, 1.815679015e-08f, 1.817184491e-08f, 1.818686217e-08f, 1.820184190e-08f, 1.821678410e-08f, 1.823168876e-08f,
-1.824655586e-08f, 1.826138538e-08f, 1.827617732e-08f, 1.829093167e-08f, 1.830564840e-08f, 1.832032750e-08f, 1.833496897e-08f, 1.834957279e-08f, 1.836413895e-08f, 1.837866743e-08f,
-1.839315823e-08f, 1.840761132e-08f, 1.842202671e-08f, 1.843640437e-08f, 1.845074429e-08f, 1.846504646e-08f, 1.847931087e-08f, 1.849353751e-08f, 1.850772637e-08f, 1.852187742e-08f,
-1.853599067e-08f, 1.855006610e-08f, 1.856410370e-08f, 1.857810345e-08f, 1.859206535e-08f, 1.860598938e-08f, 1.861987554e-08f, 1.863372380e-08f, 1.864753417e-08f, 1.866130662e-08f,
-1.867504115e-08f, 1.868873775e-08f, 1.870239640e-08f, 1.871601710e-08f, 1.872959983e-08f, 1.874314459e-08f, 1.875665136e-08f, 1.877012013e-08f, 1.878355089e-08f, 1.879694363e-08f,
-1.881029834e-08f, 1.882361502e-08f, 1.883689364e-08f, 1.885013421e-08f, 1.886333670e-08f, 1.887650112e-08f, 1.888962744e-08f, 1.890271567e-08f, 1.891576578e-08f, 1.892877778e-08f,
-1.894175165e-08f, 1.895468738e-08f, 1.896758496e-08f, 1.898044439e-08f, 1.899326565e-08f, 1.900604873e-08f, 1.901879363e-08f, 1.903150033e-08f, 1.904416883e-08f, 1.905679912e-08f,
-1.906939119e-08f, 1.908194503e-08f, 1.909446063e-08f, 1.910693798e-08f, 1.911937708e-08f, 1.913177791e-08f, 1.914414047e-08f, 1.915646474e-08f, 1.916875073e-08f, 1.918099842e-08f,
-1.919320781e-08f, 1.920537888e-08f, 1.921751162e-08f, 1.922960604e-08f, 1.924166212e-08f, 1.925367985e-08f, 1.926565923e-08f, 1.927760025e-08f, 1.928950290e-08f, 1.930136717e-08f,
-1.931319306e-08f, 1.932498055e-08f, 1.933672965e-08f, 1.934844034e-08f, 1.936011262e-08f, 1.937174648e-08f, 1.938334191e-08f, 1.939489891e-08f, 1.940641746e-08f, 1.941789757e-08f,
-1.942933922e-08f, 1.944074241e-08f, 1.945210713e-08f, 1.946343338e-08f, 1.947472115e-08f, 1.948597043e-08f, 1.949718121e-08f, 1.950835350e-08f, 1.951948728e-08f, 1.953058254e-08f,
-1.954163929e-08f, 1.955265751e-08f, 1.956363721e-08f, 1.957457836e-08f, 1.958548098e-08f, 1.959634505e-08f, 1.960717056e-08f, 1.961795752e-08f, 1.962870591e-08f, 1.963941573e-08f,
-1.965008698e-08f, 1.966071964e-08f, 1.967131372e-08f, 1.968186922e-08f, 1.969238611e-08f, 1.970286441e-08f, 1.971330410e-08f, 1.972370518e-08f, 1.973406764e-08f, 1.974439149e-08f,
-1.975467671e-08f, 1.976492330e-08f, 1.977513126e-08f, 1.978530058e-08f, 1.979543126e-08f, 1.980552329e-08f, 1.981557667e-08f, 1.982559140e-08f, 1.983556747e-08f, 1.984550487e-08f,
-1.985540361e-08f, 1.986526368e-08f, 1.987508508e-08f, 1.988486780e-08f, 1.989461183e-08f, 1.990431718e-08f, 1.991398385e-08f, 1.992361182e-08f, 1.993320109e-08f, 1.994275167e-08f,
-1.995226355e-08f, 1.996173672e-08f, 1.997117118e-08f, 1.998056694e-08f, 1.998992398e-08f, 1.999924230e-08f, 2.000852190e-08f, 2.001776278e-08f, 2.002696494e-08f, 2.003612837e-08f,
-2.004525307e-08f, 2.005433904e-08f, 2.006338627e-08f, 2.007239477e-08f, 2.008136452e-08f, 2.009029554e-08f, 2.009918782e-08f, 2.010804134e-08f, 2.011685613e-08f, 2.012563216e-08f,
-2.013436944e-08f, 2.014306797e-08f, 2.015172775e-08f, 2.016034877e-08f, 2.016893103e-08f, 2.017747453e-08f, 2.018597928e-08f, 2.019444526e-08f, 2.020287248e-08f, 2.021126094e-08f,
-2.021961063e-08f, 2.022792156e-08f, 2.023619372e-08f, 2.024442711e-08f, 2.025262174e-08f, 2.026077760e-08f, 2.026889468e-08f, 2.027697300e-08f, 2.028501255e-08f, 2.029301332e-08f,
-2.030097532e-08f, 2.030889855e-08f, 2.031678301e-08f, 2.032462870e-08f, 2.033243561e-08f, 2.034020376e-08f, 2.034793313e-08f, 2.035562372e-08f, 2.036327555e-08f, 2.037088860e-08f,
-2.037846288e-08f, 2.038599840e-08f, 2.039349514e-08f, 2.040095311e-08f, 2.040837231e-08f, 2.041575274e-08f, 2.042309440e-08f, 2.043039730e-08f, 2.043766143e-08f, 2.044488679e-08f,
-2.045207339e-08f, 2.045922123e-08f, 2.046633031e-08f, 2.047340062e-08f, 2.048043217e-08f, 2.048742497e-08f, 2.049437901e-08f, 2.050129429e-08f, 2.050817082e-08f, 2.051500860e-08f,
-2.052180762e-08f, 2.052856790e-08f, 2.053528943e-08f, 2.054197222e-08f, 2.054861626e-08f, 2.055522156e-08f, 2.056178813e-08f, 2.056831595e-08f, 2.057480504e-08f, 2.058125541e-08f,
-2.058766704e-08f, 2.059403994e-08f, 2.060037412e-08f, 2.060666957e-08f, 2.061292631e-08f, 2.061914433e-08f, 2.062532364e-08f, 2.063146424e-08f, 2.063756612e-08f, 2.064362931e-08f,
-2.064965379e-08f, 2.065563957e-08f, 2.066158666e-08f, 2.066749505e-08f, 2.067336476e-08f, 2.067919578e-08f, 2.068498812e-08f, 2.069074178e-08f, 2.069645677e-08f, 2.070213308e-08f,
-2.070777073e-08f, 2.071336971e-08f, 2.071893004e-08f, 2.072445171e-08f, 2.072993473e-08f, 2.073537910e-08f, 2.074078482e-08f, 2.074615191e-08f, 2.075148037e-08f, 2.075677019e-08f,
-2.076202139e-08f, 2.076723396e-08f, 2.077240792e-08f, 2.077754327e-08f, 2.078264001e-08f, 2.078769815e-08f, 2.079271769e-08f, 2.079769864e-08f, 2.080264100e-08f, 2.080754477e-08f,
-2.081240997e-08f, 2.081723660e-08f, 2.082202466e-08f, 2.082677416e-08f, 2.083148510e-08f, 2.083615749e-08f, 2.084079134e-08f, 2.084538664e-08f, 2.084994342e-08f, 2.085446166e-08f,
-2.085894138e-08f, 2.086338259e-08f, 2.086778528e-08f, 2.087214947e-08f, 2.087647516e-08f, 2.088076236e-08f, 2.088501107e-08f, 2.088922130e-08f, 2.089339306e-08f, 2.089752635e-08f,
-2.090162118e-08f, 2.090567756e-08f, 2.090969549e-08f, 2.091367497e-08f, 2.091761603e-08f, 2.092151865e-08f, 2.092538286e-08f, 2.092920865e-08f, 2.093299603e-08f, 2.093674502e-08f,
-2.094045561e-08f, 2.094412782e-08f, 2.094776165e-08f, 2.095135711e-08f, 2.095491421e-08f, 2.095843295e-08f, 2.096191334e-08f, 2.096535539e-08f, 2.096875911e-08f, 2.097212451e-08f,
-2.097545159e-08f, 2.097874035e-08f, 2.098199082e-08f, 2.098520299e-08f, 2.098837688e-08f, 2.099151249e-08f, 2.099460983e-08f, 2.099766892e-08f, 2.100068974e-08f, 2.100367233e-08f,
-2.100661668e-08f, 2.100952280e-08f, 2.101239070e-08f, 2.101522040e-08f, 2.101801189e-08f, 2.102076519e-08f, 2.102348031e-08f, 2.102615725e-08f, 2.102879603e-08f, 2.103139665e-08f,
-2.103395912e-08f, 2.103648346e-08f, 2.103896967e-08f, 2.104141775e-08f, 2.104382773e-08f, 2.104619961e-08f, 2.104853340e-08f, 2.105082910e-08f, 2.105308673e-08f, 2.105530630e-08f,
-2.105748782e-08f, 2.105963130e-08f, 2.106173674e-08f, 2.106380416e-08f, 2.106583357e-08f, 2.106782497e-08f, 2.106977839e-08f, 2.107169382e-08f, 2.107357128e-08f, 2.107541077e-08f,
-2.107721232e-08f, 2.107897593e-08f, 2.108070160e-08f, 2.108238936e-08f, 2.108403921e-08f, 2.108565116e-08f, 2.108722522e-08f, 2.108876141e-08f, 2.109025973e-08f, 2.109172020e-08f,
-2.109314282e-08f, 2.109452761e-08f, 2.109587458e-08f, 2.109718374e-08f, 2.109845511e-08f, 2.109968868e-08f, 2.110088448e-08f, 2.110204252e-08f, 2.110316281e-08f, 2.110424535e-08f,
-2.110529017e-08f, 2.110629726e-08f, 2.110726666e-08f, 2.110819835e-08f, 2.110909237e-08f, 2.110994872e-08f, 2.111076741e-08f, 2.111154846e-08f, 2.111229187e-08f, 2.111299766e-08f,
-2.111366585e-08f, 2.111429643e-08f, 2.111488944e-08f, 2.111544487e-08f, 2.111596275e-08f, 2.111644307e-08f, 2.111688587e-08f, 2.111729115e-08f, 2.111765892e-08f, 2.111798919e-08f,
-2.111828198e-08f, 2.111853731e-08f, 2.111875518e-08f, 2.111893561e-08f, 2.111907860e-08f, 2.111918419e-08f, 2.111925237e-08f, 2.111928316e-08f, 2.111927658e-08f, 2.111923263e-08f,
-2.111915134e-08f, 2.111903271e-08f, 2.111887676e-08f, 2.111868351e-08f, 2.111845296e-08f, 2.111818513e-08f, 2.111788004e-08f, 2.111753769e-08f, 2.111715811e-08f, 2.111674131e-08f,
-2.111628730e-08f, 2.111579609e-08f, 2.111526770e-08f, 2.111470215e-08f, 2.111409944e-08f, 2.111345960e-08f, 2.111278264e-08f, 2.111206857e-08f, 2.111131741e-08f, 2.111052917e-08f,
-2.110970387e-08f, 2.110884151e-08f, 2.110794213e-08f, 2.110700573e-08f, 2.110603232e-08f, 2.110502193e-08f, 2.110397456e-08f, 2.110289024e-08f, 2.110176897e-08f, 2.110061078e-08f,
-2.109941568e-08f, 2.109818368e-08f, 2.109691480e-08f, 2.109560905e-08f, 2.109426646e-08f, 2.109288704e-08f, 2.109147079e-08f, 2.109001775e-08f, 2.108852792e-08f, 2.108700132e-08f,
-2.108543797e-08f, 2.108383788e-08f, 2.108220107e-08f, 2.108052756e-08f, 2.107881735e-08f, 2.107707048e-08f, 2.107528695e-08f, 2.107346678e-08f, 2.107160999e-08f, 2.106971659e-08f,
-2.106778660e-08f, 2.106582004e-08f, 2.106381692e-08f, 2.106177727e-08f, 2.105970109e-08f, 2.105758841e-08f, 2.105543924e-08f, 2.105325360e-08f, 2.105103150e-08f, 2.104877297e-08f,
-2.104647802e-08f, 2.104414667e-08f, 2.104177893e-08f, 2.103937483e-08f, 2.103693437e-08f, 2.103445759e-08f, 2.103194449e-08f, 2.102939509e-08f, 2.102680941e-08f, 2.102418747e-08f,
-2.102152929e-08f, 2.101883488e-08f, 2.101610427e-08f, 2.101333747e-08f, 2.101053449e-08f, 2.100769536e-08f, 2.100482010e-08f, 2.100190872e-08f, 2.099896124e-08f, 2.099597768e-08f,
-2.099295806e-08f, 2.098990239e-08f, 2.098681070e-08f, 2.098368301e-08f, 2.098051933e-08f, 2.097731968e-08f, 2.097408408e-08f, 2.097081255e-08f, 2.096750510e-08f, 2.096416177e-08f,
-2.096078256e-08f, 2.095736749e-08f, 2.095391659e-08f, 2.095042987e-08f, 2.094690736e-08f, 2.094334907e-08f, 2.093975501e-08f, 2.093612522e-08f, 2.093245971e-08f, 2.092875850e-08f,
-2.092502161e-08f, 2.092124906e-08f, 2.091744086e-08f, 2.091359705e-08f, 2.090971763e-08f, 2.090580264e-08f, 2.090185207e-08f, 2.089786597e-08f, 2.089384435e-08f, 2.088978722e-08f,
-2.088569462e-08f, 2.088156655e-08f, 2.087740304e-08f, 2.087320411e-08f, 2.086896978e-08f, 2.086470007e-08f, 2.086039500e-08f, 2.085605460e-08f, 2.085167887e-08f, 2.084726785e-08f,
-2.084282155e-08f, 2.083833999e-08f, 2.083382320e-08f, 2.082927120e-08f, 2.082468400e-08f, 2.082006163e-08f, 2.081540411e-08f, 2.081071146e-08f, 2.080598370e-08f, 2.080122085e-08f,
-2.079642294e-08f, 2.079158998e-08f, 2.078672200e-08f, 2.078181901e-08f, 2.077688105e-08f, 2.077190813e-08f, 2.076690027e-08f, 2.076185749e-08f, 2.075677982e-08f, 2.075166728e-08f,
-2.074651989e-08f, 2.074133766e-08f, 2.073612064e-08f, 2.073086883e-08f, 2.072558225e-08f, 2.072026094e-08f, 2.071490491e-08f, 2.070951418e-08f, 2.070408878e-08f, 2.069862872e-08f,
-2.069313404e-08f, 2.068760476e-08f, 2.068204088e-08f, 2.067644245e-08f, 2.067080948e-08f, 2.066514199e-08f, 2.065944001e-08f, 2.065370356e-08f, 2.064793266e-08f, 2.064212734e-08f,
-2.063628761e-08f, 2.063041351e-08f, 2.062450505e-08f, 2.061856226e-08f, 2.061258515e-08f, 2.060657376e-08f, 2.060052811e-08f, 2.059444822e-08f, 2.058833411e-08f, 2.058218581e-08f,
-2.057600334e-08f, 2.056978672e-08f, 2.056353598e-08f, 2.055725114e-08f, 2.055093223e-08f, 2.054457926e-08f, 2.053819227e-08f, 2.053177127e-08f, 2.052531630e-08f, 2.051882737e-08f,
-2.051230450e-08f, 2.050574773e-08f, 2.049915707e-08f, 2.049253256e-08f, 2.048587420e-08f, 2.047918204e-08f, 2.047245609e-08f, 2.046569638e-08f, 2.045890293e-08f, 2.045207577e-08f,
-2.044521491e-08f, 2.043832040e-08f, 2.043139224e-08f, 2.042443046e-08f, 2.041743510e-08f, 2.041040617e-08f, 2.040334370e-08f, 2.039624772e-08f, 2.038911824e-08f, 2.038195530e-08f,
-2.037475891e-08f, 2.036752911e-08f, 2.036026592e-08f, 2.035296936e-08f, 2.034563946e-08f, 2.033827625e-08f, 2.033087975e-08f, 2.032344998e-08f, 2.031598698e-08f, 2.030849076e-08f,
-2.030096135e-08f, 2.029339878e-08f, 2.028580307e-08f, 2.027817426e-08f, 2.027051235e-08f, 2.026281739e-08f, 2.025508940e-08f, 2.024732839e-08f, 2.023953441e-08f, 2.023170747e-08f,
-2.022384760e-08f, 2.021595482e-08f, 2.020802917e-08f, 2.020007067e-08f, 2.019207934e-08f, 2.018405521e-08f, 2.017599832e-08f, 2.016790867e-08f, 2.015978631e-08f, 2.015163125e-08f,
-2.014344353e-08f, 2.013522316e-08f, 2.012697018e-08f, 2.011868462e-08f, 2.011036650e-08f, 2.010201584e-08f, 2.009363268e-08f, 2.008521704e-08f, 2.007676894e-08f, 2.006828842e-08f,
-2.005977551e-08f, 2.005123022e-08f, 2.004265258e-08f, 2.003404263e-08f, 2.002540039e-08f, 2.001672589e-08f, 2.000801915e-08f, 1.999928021e-08f, 1.999050908e-08f, 1.998170581e-08f,
-1.997287040e-08f, 1.996400290e-08f, 1.995510333e-08f, 1.994617172e-08f, 1.993720809e-08f, 1.992821247e-08f, 1.991918490e-08f, 1.991012539e-08f, 1.990103398e-08f, 1.989191070e-08f,
-1.988275556e-08f, 1.987356861e-08f, 1.986434987e-08f, 1.985509936e-08f, 1.984581712e-08f, 1.983650317e-08f, 1.982715755e-08f, 1.981778027e-08f, 1.980837137e-08f, 1.979893088e-08f,
-1.978945882e-08f, 1.977995523e-08f, 1.977042013e-08f, 1.976085355e-08f, 1.975125551e-08f, 1.974162606e-08f, 1.973196521e-08f, 1.972227300e-08f, 1.971254946e-08f, 1.970279460e-08f,
-1.969300847e-08f, 1.968319109e-08f, 1.967334250e-08f, 1.966346271e-08f, 1.965355175e-08f, 1.964360967e-08f, 1.963363648e-08f, 1.962363222e-08f, 1.961359692e-08f, 1.960353060e-08f,
-1.959343329e-08f, 1.958330503e-08f, 1.957314584e-08f, 1.956295575e-08f, 1.955273479e-08f, 1.954248300e-08f, 1.953220040e-08f, 1.952188701e-08f, 1.951154288e-08f, 1.950116803e-08f,
-1.949076249e-08f, 1.948032629e-08f, 1.946985947e-08f, 1.945936204e-08f, 1.944883404e-08f, 1.943827550e-08f, 1.942768645e-08f, 1.941706692e-08f, 1.940641694e-08f, 1.939573655e-08f,
-1.938502576e-08f, 1.937428462e-08f, 1.936351315e-08f, 1.935271138e-08f, 1.934187934e-08f, 1.933101707e-08f, 1.932012459e-08f, 1.930920193e-08f, 1.929824913e-08f, 1.928726622e-08f,
-1.927625322e-08f, 1.926521017e-08f, 1.925413710e-08f, 1.924303403e-08f, 1.923190101e-08f, 1.922073805e-08f, 1.920954520e-08f, 1.919832248e-08f, 1.918706992e-08f, 1.917578756e-08f,
-1.916447542e-08f, 1.915313354e-08f, 1.914176195e-08f, 1.913036068e-08f, 1.911892976e-08f, 1.910746922e-08f, 1.909597910e-08f, 1.908445942e-08f, 1.907291022e-08f, 1.906133152e-08f,
-1.904972336e-08f, 1.903808578e-08f, 1.902641880e-08f, 1.901472245e-08f, 1.900299677e-08f, 1.899124179e-08f, 1.897945753e-08f, 1.896764404e-08f, 1.895580134e-08f, 1.894392947e-08f,
-1.893202845e-08f, 1.892009833e-08f, 1.890813912e-08f, 1.889615087e-08f, 1.888413361e-08f, 1.887208736e-08f, 1.886001216e-08f, 1.884790805e-08f, 1.883577505e-08f, 1.882361320e-08f,
-1.881142252e-08f, 1.879920306e-08f, 1.878695484e-08f, 1.877467790e-08f, 1.876237227e-08f, 1.875003798e-08f, 1.873767507e-08f, 1.872528356e-08f, 1.871286349e-08f, 1.870041490e-08f,
-1.868793781e-08f, 1.867543226e-08f, 1.866289828e-08f, 1.865033590e-08f, 1.863774516e-08f, 1.862512609e-08f, 1.861247873e-08f, 1.859980310e-08f, 1.858709924e-08f, 1.857436718e-08f,
-1.856160695e-08f, 1.854881860e-08f, 1.853600214e-08f, 1.852315763e-08f, 1.851028508e-08f, 1.849738453e-08f, 1.848445602e-08f, 1.847149957e-08f, 1.845851523e-08f, 1.844550302e-08f,
-1.843246299e-08f, 1.841939515e-08f, 1.840629955e-08f, 1.839317623e-08f, 1.838002520e-08f, 1.836684652e-08f, 1.835364020e-08f, 1.834040629e-08f, 1.832714482e-08f, 1.831385582e-08f,
-1.830053933e-08f, 1.828719538e-08f, 1.827382401e-08f, 1.826042524e-08f, 1.824699912e-08f, 1.823354567e-08f, 1.822006493e-08f, 1.820655694e-08f, 1.819302173e-08f, 1.817945934e-08f,
-1.816586979e-08f, 1.815225312e-08f, 1.813860937e-08f, 1.812493858e-08f, 1.811124077e-08f, 1.809751597e-08f, 1.808376424e-08f, 1.806998559e-08f, 1.805618007e-08f, 1.804234770e-08f,
-1.802848853e-08f, 1.801460259e-08f, 1.800068990e-08f, 1.798675052e-08f, 1.797278447e-08f, 1.795879178e-08f, 1.794477250e-08f, 1.793072665e-08f, 1.791665428e-08f, 1.790255541e-08f,
-1.788843009e-08f, 1.787427834e-08f, 1.786010020e-08f, 1.784589571e-08f, 1.783166490e-08f, 1.781740781e-08f, 1.780312448e-08f, 1.778881493e-08f, 1.777447920e-08f, 1.776011733e-08f,
-1.774572936e-08f, 1.773131531e-08f, 1.771687523e-08f, 1.770240915e-08f, 1.768791711e-08f, 1.767339913e-08f, 1.765885527e-08f, 1.764428554e-08f, 1.762968999e-08f, 1.761506866e-08f,
-1.760042158e-08f, 1.758574878e-08f, 1.757105030e-08f, 1.755632618e-08f, 1.754157645e-08f, 1.752680115e-08f, 1.751200032e-08f, 1.749717398e-08f, 1.748232218e-08f, 1.746744495e-08f,
-1.745254233e-08f, 1.743761436e-08f, 1.742266106e-08f, 1.740768249e-08f, 1.739267866e-08f, 1.737764962e-08f, 1.736259541e-08f, 1.734751606e-08f, 1.733241161e-08f, 1.731728209e-08f,
-1.730212754e-08f, 1.728694800e-08f, 1.727174350e-08f, 1.725651408e-08f, 1.724125978e-08f, 1.722598063e-08f, 1.721067666e-08f, 1.719534793e-08f, 1.717999445e-08f, 1.716461628e-08f,
-1.714921344e-08f, 1.713378597e-08f, 1.711833392e-08f, 1.710285730e-08f, 1.708735617e-08f, 1.707183056e-08f, 1.705628051e-08f, 1.704070605e-08f, 1.702510722e-08f, 1.700948405e-08f,
-1.699383659e-08f, 1.697816488e-08f, 1.696246894e-08f, 1.694674881e-08f, 1.693100454e-08f, 1.691523615e-08f, 1.689944369e-08f, 1.688362720e-08f, 1.686778671e-08f, 1.685192225e-08f,
-1.683603387e-08f, 1.682012161e-08f, 1.680418549e-08f, 1.678822556e-08f, 1.677224186e-08f, 1.675623441e-08f, 1.674020327e-08f, 1.672414847e-08f, 1.670807003e-08f, 1.669196802e-08f,
-1.667584245e-08f, 1.665969337e-08f, 1.664352081e-08f, 1.662732482e-08f, 1.661110542e-08f, 1.659486267e-08f, 1.657859659e-08f, 1.656230722e-08f, 1.654599461e-08f, 1.652965879e-08f,
-1.651329979e-08f, 1.649691766e-08f, 1.648051243e-08f, 1.646408414e-08f, 1.644763283e-08f, 1.643115853e-08f, 1.641466129e-08f, 1.639814115e-08f, 1.638159813e-08f, 1.636503229e-08f,
-1.634844365e-08f, 1.633183225e-08f, 1.631519814e-08f, 1.629854136e-08f, 1.628186193e-08f, 1.626515990e-08f, 1.624843530e-08f, 1.623168818e-08f, 1.621491858e-08f, 1.619812652e-08f,
-1.618131206e-08f, 1.616447522e-08f, 1.614761606e-08f, 1.613073459e-08f, 1.611383087e-08f, 1.609690493e-08f, 1.607995682e-08f, 1.606298656e-08f, 1.604599420e-08f, 1.602897978e-08f,
-1.601194333e-08f, 1.599488490e-08f, 1.597780452e-08f, 1.596070223e-08f, 1.594357807e-08f, 1.592643208e-08f, 1.590926430e-08f, 1.589207476e-08f, 1.587486351e-08f, 1.585763059e-08f,
-1.584037602e-08f, 1.582309986e-08f, 1.580580215e-08f, 1.578848291e-08f, 1.577114219e-08f, 1.575378003e-08f, 1.573639646e-08f, 1.571899154e-08f, 1.570156529e-08f, 1.568411775e-08f,
-1.566664897e-08f, 1.564915898e-08f, 1.563164782e-08f, 1.561411553e-08f, 1.559656216e-08f, 1.557898773e-08f, 1.556139229e-08f, 1.554377588e-08f, 1.552613854e-08f, 1.550848031e-08f,
-1.549080122e-08f, 1.547310132e-08f, 1.545538065e-08f, 1.543763924e-08f, 1.541987713e-08f, 1.540209437e-08f, 1.538429099e-08f, 1.536646704e-08f, 1.534862255e-08f, 1.533075756e-08f,
-1.531287211e-08f, 1.529496624e-08f, 1.527703999e-08f, 1.525909341e-08f, 1.524112652e-08f, 1.522313938e-08f, 1.520513202e-08f, 1.518710447e-08f, 1.516905679e-08f, 1.515098900e-08f,
-1.513290115e-08f, 1.511479329e-08f, 1.509666544e-08f, 1.507851765e-08f, 1.506034996e-08f, 1.504216241e-08f, 1.502395503e-08f, 1.500572788e-08f, 1.498748098e-08f, 1.496921439e-08f,
-1.495092813e-08f, 1.493262225e-08f, 1.491429679e-08f, 1.489595179e-08f, 1.487758728e-08f, 1.485920332e-08f, 1.484079994e-08f, 1.482237717e-08f, 1.480393507e-08f, 1.478547367e-08f,
-1.476699300e-08f, 1.474849312e-08f, 1.472997406e-08f, 1.471143586e-08f, 1.469287856e-08f, 1.467430221e-08f, 1.465570683e-08f, 1.463709248e-08f, 1.461845919e-08f, 1.459980701e-08f,
-1.458113597e-08f, 1.456244612e-08f, 1.454373748e-08f, 1.452501012e-08f, 1.450626406e-08f, 1.448749935e-08f, 1.446871602e-08f, 1.444991413e-08f, 1.443109370e-08f, 1.441225478e-08f,
-1.439339741e-08f, 1.437452163e-08f, 1.435562748e-08f, 1.433671500e-08f, 1.431778424e-08f, 1.429883523e-08f, 1.427986801e-08f, 1.426088262e-08f, 1.424187912e-08f, 1.422285752e-08f,
-1.420381789e-08f, 1.418476025e-08f, 1.416568466e-08f, 1.414659114e-08f, 1.412747974e-08f, 1.410835050e-08f, 1.408920347e-08f, 1.407003868e-08f, 1.405085617e-08f, 1.403165599e-08f,
-1.401243817e-08f, 1.399320277e-08f, 1.397394981e-08f, 1.395467934e-08f, 1.393539139e-08f, 1.391608603e-08f, 1.389676327e-08f, 1.387742317e-08f, 1.385806576e-08f, 1.383869109e-08f,
-1.381929919e-08f, 1.379989011e-08f, 1.378046390e-08f, 1.376102058e-08f, 1.374156020e-08f, 1.372208281e-08f, 1.370258844e-08f, 1.368307714e-08f, 1.366354894e-08f, 1.364400390e-08f,
-1.362444204e-08f, 1.360486341e-08f, 1.358526805e-08f, 1.356565601e-08f, 1.354602732e-08f, 1.352638203e-08f, 1.350672018e-08f, 1.348704181e-08f, 1.346734695e-08f, 1.344763566e-08f,
-1.342790797e-08f, 1.340816393e-08f, 1.338840357e-08f, 1.336862694e-08f, 1.334883408e-08f, 1.332902503e-08f, 1.330919983e-08f, 1.328935853e-08f, 1.326950116e-08f, 1.324962777e-08f,
-1.322973839e-08f, 1.320983308e-08f, 1.318991187e-08f, 1.316997481e-08f, 1.315002193e-08f, 1.313005327e-08f, 1.311006888e-08f, 1.309006881e-08f, 1.307005309e-08f, 1.305002176e-08f,
-1.302997486e-08f, 1.300991244e-08f, 1.298983454e-08f, 1.296974121e-08f, 1.294963247e-08f, 1.292950838e-08f, 1.290936897e-08f, 1.288921430e-08f, 1.286904439e-08f, 1.284885929e-08f,
-1.282865905e-08f, 1.280844370e-08f, 1.278821329e-08f, 1.276796786e-08f, 1.274770745e-08f, 1.272743210e-08f, 1.270714186e-08f, 1.268683676e-08f, 1.266651685e-08f, 1.264618218e-08f,
-1.262583277e-08f, 1.260546868e-08f, 1.258508995e-08f, 1.256469661e-08f, 1.254428872e-08f, 1.252386630e-08f, 1.250342942e-08f, 1.248297810e-08f, 1.246251238e-08f, 1.244203232e-08f,
-1.242153795e-08f, 1.240102932e-08f, 1.238050646e-08f, 1.235996942e-08f, 1.233941825e-08f, 1.231885297e-08f, 1.229827364e-08f, 1.227768030e-08f, 1.225707299e-08f, 1.223645175e-08f,
-1.221581663e-08f, 1.219516766e-08f, 1.217450489e-08f, 1.215382836e-08f, 1.213313811e-08f, 1.211243419e-08f, 1.209171664e-08f, 1.207098549e-08f, 1.205024080e-08f, 1.202948260e-08f,
-1.200871094e-08f, 1.198792585e-08f, 1.196712739e-08f, 1.194631559e-08f, 1.192549050e-08f, 1.190465215e-08f, 1.188380059e-08f, 1.186293587e-08f, 1.184205802e-08f, 1.182116709e-08f,
-1.180026311e-08f, 1.177934614e-08f, 1.175841622e-08f, 1.173747338e-08f, 1.171651766e-08f, 1.169554912e-08f, 1.167456780e-08f, 1.165357373e-08f, 1.163256695e-08f, 1.161154752e-08f,
-1.159051547e-08f, 1.156947085e-08f, 1.154841370e-08f, 1.152734405e-08f, 1.150626196e-08f, 1.148516747e-08f, 1.146406061e-08f, 1.144294144e-08f, 1.142180998e-08f, 1.140066629e-08f,
-1.137951041e-08f, 1.135834238e-08f, 1.133716225e-08f, 1.131597005e-08f, 1.129476582e-08f, 1.127354962e-08f, 1.125232148e-08f, 1.123108145e-08f, 1.120982956e-08f, 1.118856586e-08f,
-1.116729040e-08f, 1.114600321e-08f, 1.112470434e-08f, 1.110339384e-08f, 1.108207173e-08f, 1.106073807e-08f, 1.103939290e-08f, 1.101803626e-08f, 1.099666820e-08f, 1.097528875e-08f,
-1.095389796e-08f, 1.093249587e-08f, 1.091108253e-08f, 1.088965797e-08f, 1.086822224e-08f, 1.084677538e-08f, 1.082531744e-08f, 1.080384846e-08f, 1.078236847e-08f, 1.076087753e-08f,
-1.073937567e-08f, 1.071786294e-08f, 1.069633938e-08f, 1.067480504e-08f, 1.065325995e-08f, 1.063170415e-08f, 1.061013770e-08f, 1.058856064e-08f, 1.056697300e-08f, 1.054537482e-08f,
-1.052376616e-08f, 1.050214706e-08f, 1.048051755e-08f, 1.045887768e-08f, 1.043722750e-08f, 1.041556704e-08f, 1.039389634e-08f, 1.037221546e-08f, 1.035052443e-08f, 1.032882330e-08f,
-1.030711210e-08f, 1.028539089e-08f, 1.026365970e-08f, 1.024191858e-08f, 1.022016757e-08f, 1.019840671e-08f, 1.017663604e-08f, 1.015485561e-08f, 1.013306546e-08f, 1.011126564e-08f,
-1.008945618e-08f, 1.006763713e-08f, 1.004580853e-08f, 1.002397043e-08f, 1.000212286e-08f, 9.980265873e-09f, 9.958399506e-09f, 9.936523805e-09f, 9.914638811e-09f, 9.892744568e-09f,
-9.870841118e-09f, 9.848928504e-09f, 9.827006768e-09f, 9.805075954e-09f, 9.783136104e-09f, 9.761187261e-09f, 9.739229467e-09f, 9.717262765e-09f, 9.695287199e-09f, 9.673302810e-09f,
-9.651309642e-09f, 9.629307737e-09f, 9.607297139e-09f, 9.585277888e-09f, 9.563250030e-09f, 9.541213605e-09f, 9.519168658e-09f, 9.497115230e-09f, 9.475053364e-09f, 9.452983104e-09f,
-9.430904492e-09f, 9.408817570e-09f, 9.386722382e-09f, 9.364618969e-09f, 9.342507376e-09f, 9.320387644e-09f, 9.298259816e-09f, 9.276123935e-09f, 9.253980044e-09f, 9.231828186e-09f,
-9.209668403e-09f, 9.187500737e-09f, 9.165325232e-09f, 9.143141931e-09f, 9.120950875e-09f, 9.098752109e-09f, 9.076545673e-09f, 9.054331612e-09f, 9.032109968e-09f, 9.009880784e-09f,
-8.987644101e-09f, 8.965399964e-09f, 8.943148414e-09f, 8.920889495e-09f, 8.898623249e-09f, 8.876349719e-09f, 8.854068947e-09f, 8.831780976e-09f, 8.809485849e-09f, 8.787183609e-09f,
-8.764874297e-09f, 8.742557958e-09f, 8.720234633e-09f, 8.697904366e-09f, 8.675567198e-09f, 8.653223172e-09f, 8.630872332e-09f, 8.608514720e-09f, 8.586150378e-09f, 8.563779349e-09f,
-8.541401676e-09f, 8.519017402e-09f, 8.496626568e-09f, 8.474229218e-09f, 8.451825394e-09f, 8.429415139e-09f, 8.406998496e-09f, 8.384575507e-09f, 8.362146214e-09f, 8.339710661e-09f,
-8.317268890e-09f, 8.294820943e-09f, 8.272366864e-09f, 8.249906694e-09f, 8.227440476e-09f, 8.204968253e-09f, 8.182490068e-09f, 8.160005962e-09f, 8.137515979e-09f, 8.115020161e-09f,
-8.092518551e-09f, 8.070011191e-09f, 8.047498124e-09f, 8.024979391e-09f, 8.002455037e-09f, 7.979925103e-09f, 7.957389632e-09f, 7.934848665e-09f, 7.912302247e-09f, 7.889750419e-09f,
-7.867193224e-09f, 7.844630704e-09f, 7.822062902e-09f, 7.799489860e-09f, 7.776911621e-09f, 7.754328227e-09f, 7.731739720e-09f, 7.709146144e-09f, 7.686547540e-09f, 7.663943951e-09f,
-7.641335419e-09f, 7.618721987e-09f, 7.596103697e-09f, 7.573480592e-09f, 7.550852713e-09f, 7.528220104e-09f, 7.505582807e-09f, 7.482940863e-09f, 7.460294317e-09f, 7.437643209e-09f,
-7.414987582e-09f, 7.392327478e-09f, 7.369662941e-09f, 7.346994011e-09f, 7.324320733e-09f, 7.301643147e-09f, 7.278961296e-09f, 7.256275222e-09f, 7.233584968e-09f, 7.210890576e-09f,
-7.188192089e-09f, 7.165489548e-09f, 7.142782995e-09f, 7.120072474e-09f, 7.097358026e-09f, 7.074639693e-09f, 7.051917518e-09f, 7.029191543e-09f, 7.006461810e-09f, 6.983728361e-09f,
-6.960991238e-09f, 6.938250485e-09f, 6.915506142e-09f, 6.892758252e-09f, 6.870006857e-09f, 6.847251999e-09f, 6.824493721e-09f, 6.801732064e-09f, 6.778967071e-09f, 6.756198784e-09f,
-6.733427244e-09f, 6.710652494e-09f, 6.687874576e-09f, 6.665093532e-09f, 6.642309404e-09f, 6.619522234e-09f, 6.596732064e-09f, 6.573938936e-09f, 6.551142893e-09f, 6.528343975e-09f,
-6.505542226e-09f, 6.482737686e-09f, 6.459930399e-09f, 6.437120405e-09f, 6.414307748e-09f, 6.391492468e-09f, 6.368674608e-09f, 6.345854210e-09f, 6.323031315e-09f, 6.300205966e-09f,
-6.277378204e-09f, 6.254548071e-09f, 6.231715610e-09f, 6.208880861e-09f, 6.186043867e-09f, 6.163204669e-09f, 6.140363310e-09f, 6.117519831e-09f, 6.094674274e-09f, 6.071826680e-09f,
-6.048977092e-09f, 6.026125552e-09f, 6.003272100e-09f, 5.980416778e-09f, 5.957559629e-09f, 5.934700694e-09f, 5.911840015e-09f, 5.888977634e-09f, 5.866113591e-09f, 5.843247929e-09f,
-5.820380689e-09f, 5.797511913e-09f, 5.774641643e-09f, 5.751769920e-09f, 5.728896786e-09f, 5.706022282e-09f, 5.683146450e-09f, 5.660269332e-09f, 5.637390968e-09f, 5.614511401e-09f,
-5.591630671e-09f, 5.568748821e-09f, 5.545865893e-09f, 5.522981926e-09f, 5.500096963e-09f, 5.477211046e-09f, 5.454324215e-09f, 5.431436512e-09f, 5.408547979e-09f, 5.385658657e-09f,
-5.362768587e-09f, 5.339877810e-09f, 5.316986369e-09f, 5.294094303e-09f, 5.271201655e-09f, 5.248308466e-09f, 5.225414777e-09f, 5.202520630e-09f, 5.179626065e-09f, 5.156731124e-09f,
-5.133835848e-09f, 5.110940278e-09f, 5.088044455e-09f, 5.065148422e-09f, 5.042252218e-09f, 5.019355885e-09f, 4.996459464e-09f, 4.973562996e-09f, 4.950666522e-09f, 4.927770084e-09f,
-4.904873722e-09f, 4.881977478e-09f, 4.859081392e-09f, 4.836185506e-09f, 4.813289860e-09f, 4.790394496e-09f, 4.767499454e-09f, 4.744604776e-09f, 4.721710501e-09f, 4.698816673e-09f,
-4.675923330e-09f, 4.653030515e-09f, 4.630138267e-09f, 4.607246628e-09f, 4.584355639e-09f, 4.561465341e-09f, 4.538575773e-09f, 4.515686978e-09f, 4.492798996e-09f, 4.469911867e-09f,
-4.447025633e-09f, 4.424140333e-09f, 4.401256010e-09f, 4.378372702e-09f, 4.355490452e-09f, 4.332609300e-09f, 4.309729286e-09f, 4.286850452e-09f, 4.263972836e-09f, 4.241096482e-09f,
-4.218221427e-09f, 4.195347715e-09f, 4.172475384e-09f, 4.149604475e-09f, 4.126735030e-09f, 4.103867087e-09f, 4.081000689e-09f, 4.058135875e-09f, 4.035272685e-09f, 4.012411161e-09f,
-3.989551342e-09f, 3.966693269e-09f, 3.943836982e-09f, 3.920982521e-09f, 3.898129928e-09f, 3.875279241e-09f, 3.852430502e-09f, 3.829583751e-09f, 3.806739028e-09f, 3.783896372e-09f,
-3.761055825e-09f, 3.738217427e-09f, 3.715381217e-09f, 3.692547236e-09f, 3.669715524e-09f, 3.646886121e-09f, 3.624059067e-09f, 3.601234402e-09f, 3.578412166e-09f, 3.555592400e-09f,
-3.532775143e-09f, 3.509960435e-09f, 3.487148317e-09f, 3.464338827e-09f, 3.441532007e-09f, 3.418727895e-09f, 3.395926533e-09f, 3.373127959e-09f, 3.350332214e-09f, 3.327539337e-09f,
-3.304749369e-09f, 3.281962349e-09f, 3.259178316e-09f, 3.236397311e-09f, 3.213619373e-09f, 3.190844542e-09f, 3.168072858e-09f, 3.145304360e-09f, 3.122539088e-09f, 3.099777081e-09f,
-3.077018380e-09f, 3.054263024e-09f, 3.031511052e-09f, 3.008762503e-09f, 2.986017418e-09f, 2.963275836e-09f, 2.940537796e-09f, 2.917803338e-09f, 2.895072501e-09f, 2.872345325e-09f,
-2.849621849e-09f, 2.826902112e-09f, 2.804186154e-09f, 2.781474014e-09f, 2.758765732e-09f, 2.736061345e-09f, 2.713360895e-09f, 2.690664420e-09f, 2.667971959e-09f, 2.645283552e-09f,
-2.622599238e-09f, 2.599919055e-09f, 2.577243043e-09f, 2.554571241e-09f, 2.531903689e-09f, 2.509240425e-09f, 2.486581487e-09f, 2.463926916e-09f, 2.441276751e-09f, 2.418631029e-09f,
-2.395989791e-09f, 2.373353074e-09f, 2.350720919e-09f, 2.328093363e-09f, 2.305470447e-09f, 2.282852207e-09f, 2.260238684e-09f, 2.237629916e-09f, 2.215025942e-09f, 2.192426800e-09f,
-2.169832530e-09f, 2.147243170e-09f, 2.124658758e-09f, 2.102079334e-09f, 2.079504935e-09f, 2.056935601e-09f, 2.034371370e-09f, 2.011812281e-09f, 1.989258371e-09f, 1.966709681e-09f,
-1.944166247e-09f, 1.921628109e-09f, 1.899095305e-09f, 1.876567873e-09f, 1.854045852e-09f, 1.831529280e-09f, 1.809018196e-09f, 1.786512637e-09f, 1.764012643e-09f, 1.741518250e-09f,
-1.719029498e-09f, 1.696546425e-09f, 1.674069068e-09f, 1.651597467e-09f, 1.629131658e-09f, 1.606671681e-09f, 1.584217574e-09f, 1.561769373e-09f, 1.539327118e-09f, 1.516890847e-09f,
-1.494460597e-09f, 1.472036406e-09f, 1.449618312e-09f, 1.427206354e-09f, 1.404800568e-09f, 1.382400994e-09f, 1.360007668e-09f, 1.337620629e-09f, 1.315239914e-09f, 1.292865561e-09f,
-1.270497608e-09f, 1.248136093e-09f, 1.225781052e-09f, 1.203432524e-09f, 1.181090547e-09f, 1.158755158e-09f, 1.136426394e-09f, 1.114104293e-09f, 1.091788893e-09f, 1.069480231e-09f,
-1.047178345e-09f, 1.024883271e-09f, 1.002595048e-09f, 9.803137127e-10f, 9.580393024e-10f, 9.357718546e-10f, 9.135114066e-10f, 8.912579955e-10f, 8.690116588e-10f, 8.467724335e-10f,
-8.245403568e-10f, 8.023154660e-10f, 7.800977982e-10f, 7.578873905e-10f, 7.356842799e-10f, 7.134885035e-10f, 6.913000984e-10f, 6.691191015e-10f, 6.469455499e-10f, 6.247794804e-10f,
-6.026209300e-10f, 5.804699355e-10f, 5.583265339e-10f, 5.361907620e-10f, 5.140626565e-10f, 4.919422543e-10f, 4.698295921e-10f, 4.477247066e-10f, 4.256276345e-10f, 4.035384125e-10f,
-3.814570772e-10f, 3.593836653e-10f, 3.373182133e-10f, 3.152607577e-10f, 2.932113351e-10f, 2.711699820e-10f, 2.491367349e-10f, 2.271116302e-10f, 2.050947042e-10f, 1.830859935e-10f,
-1.610855342e-10f, 1.390933629e-10f, 1.171095156e-10f, 9.513402883e-11f, 7.316693868e-11f, 5.120828140e-11f, 2.925809316e-11f, 7.316410108e-12f, -1.461673163e-11f, -3.654129597e-11f,
--5.845724685e-11f, -8.036454823e-11f, -1.022631641e-10f, -1.241530585e-10f, -1.460341955e-10f, -1.679065392e-10f, -1.897700536e-10f, -2.116247030e-10f, -2.334704515e-10f, -2.553072633e-10f,
--2.771351027e-10f, -2.989539339e-10f, -3.207637211e-10f, -3.425644288e-10f, -3.643560213e-10f, -3.861384630e-10f, -4.079117182e-10f, -4.296757515e-10f, -4.514305273e-10f, -4.731760101e-10f,
--4.949121645e-10f, -5.166389549e-10f, -5.383563461e-10f, -5.600643027e-10f, -5.817627892e-10f, -6.034517704e-10f, -6.251312111e-10f, -6.468010759e-10f, -6.684613297e-10f, -6.901119372e-10f,
--7.117528633e-10f, -7.333840729e-10f, -7.550055309e-10f, -7.766172022e-10f, -7.982190518e-10f, -8.198110447e-10f, -8.413931459e-10f, -8.629653204e-10f, -8.845275335e-10f, -9.060797502e-10f,
--9.276219356e-10f, -9.491540549e-10f, -9.706760735e-10f, -9.921879564e-10f, -1.013689669e-09f, -1.035181177e-09f, -1.056662445e-09f, -1.078133438e-09f, -1.099594123e-09f, -1.121044465e-09f,
--1.142484428e-09f, -1.163913979e-09f, -1.185333084e-09f, -1.206741707e-09f, -1.228139814e-09f, -1.249527371e-09f, -1.270904343e-09f, -1.292270697e-09f, -1.313626398e-09f, -1.334971412e-09f,
--1.356305704e-09f, -1.377629241e-09f, -1.398941988e-09f, -1.420243911e-09f, -1.441534977e-09f, -1.462815150e-09f, -1.484084397e-09f, -1.505342684e-09f, -1.526589978e-09f, -1.547826244e-09f,
--1.569051448e-09f, -1.590265556e-09f, -1.611468536e-09f, -1.632660352e-09f, -1.653840971e-09f, -1.675010360e-09f, -1.696168484e-09f, -1.717315311e-09f, -1.738450806e-09f, -1.759574937e-09f,
--1.780687668e-09f, -1.801788968e-09f, -1.822878802e-09f, -1.843957137e-09f, -1.865023939e-09f, -1.886079176e-09f, -1.907122813e-09f, -1.928154819e-09f, -1.949175158e-09f, -1.970183798e-09f,
--1.991180707e-09f, -2.012165850e-09f, -2.033139194e-09f, -2.054100707e-09f, -2.075050356e-09f, -2.095988106e-09f, -2.116913926e-09f, -2.137827782e-09f, -2.158729642e-09f, -2.179619472e-09f,
--2.200497240e-09f, -2.221362913e-09f, -2.242216458e-09f, -2.263057842e-09f, -2.283887033e-09f, -2.304703998e-09f, -2.325508703e-09f, -2.346301118e-09f, -2.367081208e-09f, -2.387848942e-09f,
--2.408604287e-09f, -2.429347210e-09f, -2.450077680e-09f, -2.470795663e-09f, -2.491501127e-09f, -2.512194040e-09f, -2.532874370e-09f, -2.553542084e-09f, -2.574197150e-09f, -2.594839536e-09f,
--2.615469210e-09f, -2.636086139e-09f, -2.656690292e-09f, -2.677281636e-09f, -2.697860140e-09f, -2.718425771e-09f, -2.738978498e-09f, -2.759518288e-09f, -2.780045110e-09f, -2.800558932e-09f,
--2.821059722e-09f, -2.841547448e-09f, -2.862022079e-09f, -2.882483583e-09f, -2.902931927e-09f, -2.923367082e-09f, -2.943789014e-09f, -2.964197693e-09f, -2.984593086e-09f, -3.004975163e-09f,
--3.025343892e-09f, -3.045699242e-09f, -3.066041181e-09f, -3.086369677e-09f, -3.106684701e-09f, -3.126986219e-09f, -3.147274202e-09f, -3.167548617e-09f, -3.187809434e-09f, -3.208056622e-09f,
--3.228290149e-09f, -3.248509985e-09f, -3.268716098e-09f, -3.288908457e-09f, -3.309087032e-09f, -3.329251792e-09f, -3.349402706e-09f, -3.369539743e-09f, -3.389662871e-09f, -3.409772062e-09f,
--3.429867283e-09f, -3.449948504e-09f, -3.470015694e-09f, -3.490068824e-09f, -3.510107861e-09f, -3.530132776e-09f, -3.550143539e-09f, -3.570140118e-09f, -3.590122484e-09f, -3.610090606e-09f,
--3.630044453e-09f, -3.649983996e-09f, -3.669909204e-09f, -3.689820047e-09f, -3.709716495e-09f, -3.729598517e-09f, -3.749466083e-09f, -3.769319164e-09f, -3.789157729e-09f, -3.808981749e-09f,
--3.828791193e-09f, -3.848586031e-09f, -3.868366234e-09f, -3.888131772e-09f, -3.907882615e-09f, -3.927618733e-09f, -3.947340096e-09f, -3.967046675e-09f, -3.986738440e-09f, -4.006415361e-09f,
--4.026077410e-09f, -4.045724556e-09f, -4.065356769e-09f, -4.084974021e-09f, -4.104576282e-09f, -4.124163523e-09f, -4.143735714e-09f, -4.163292825e-09f, -4.182834829e-09f, -4.202361694e-09f,
--4.221873393e-09f, -4.241369896e-09f, -4.260851174e-09f, -4.280317198e-09f, -4.299767939e-09f, -4.319203368e-09f, -4.338623455e-09f, -4.358028173e-09f, -4.377417492e-09f, -4.396791383e-09f,
--4.416149817e-09f, -4.435492766e-09f, -4.454820201e-09f, -4.474132093e-09f, -4.493428414e-09f, -4.512709136e-09f, -4.531974228e-09f, -4.551223664e-09f, -4.570457413e-09f, -4.589675449e-09f,
--4.608877743e-09f, -4.628064266e-09f, -4.647234990e-09f, -4.666389886e-09f, -4.685528927e-09f, -4.704652084e-09f, -4.723759329e-09f, -4.742850633e-09f, -4.761925970e-09f, -4.780985310e-09f,
--4.800028626e-09f, -4.819055890e-09f, -4.838067074e-09f, -4.857062149e-09f, -4.876041089e-09f, -4.895003864e-09f, -4.913950449e-09f, -4.932880814e-09f, -4.951794932e-09f, -4.970692776e-09f,
--4.989574317e-09f, -5.008439529e-09f, -5.027288383e-09f, -5.046120853e-09f, -5.064936910e-09f, -5.083736528e-09f, -5.102519679e-09f, -5.121286336e-09f, -5.140036470e-09f, -5.158770057e-09f,
--5.177487067e-09f, -5.196187473e-09f, -5.214871250e-09f, -5.233538369e-09f, -5.252188803e-09f, -5.270822527e-09f, -5.289439511e-09f, -5.308039731e-09f, -5.326623158e-09f, -5.345189766e-09f,
--5.363739528e-09f, -5.382272418e-09f, -5.400788408e-09f, -5.419287472e-09f, -5.437769584e-09f, -5.456234716e-09f, -5.474682843e-09f, -5.493113938e-09f, -5.511527973e-09f, -5.529924924e-09f,
--5.548304763e-09f, -5.566667464e-09f, -5.585013000e-09f, -5.603341347e-09f, -5.621652476e-09f, -5.639946363e-09f, -5.658222981e-09f, -5.676482304e-09f, -5.694724305e-09f, -5.712948960e-09f,
--5.731156241e-09f, -5.749346123e-09f, -5.767518580e-09f, -5.785673587e-09f, -5.803811117e-09f, -5.821931144e-09f, -5.840033643e-09f, -5.858118589e-09f, -5.876185955e-09f, -5.894235717e-09f,
--5.912267847e-09f, -5.930282322e-09f, -5.948279115e-09f, -5.966258201e-09f, -5.984219555e-09f, -6.002163151e-09f, -6.020088965e-09f, -6.037996970e-09f, -6.055887141e-09f, -6.073759454e-09f,
--6.091613883e-09f, -6.109450403e-09f, -6.127268990e-09f, -6.145069617e-09f, -6.162852261e-09f, -6.180616896e-09f, -6.198363497e-09f, -6.216092040e-09f, -6.233802499e-09f, -6.251494851e-09f,
--6.269169069e-09f, -6.286825131e-09f, -6.304463010e-09f, -6.322082682e-09f, -6.339684124e-09f, -6.357267310e-09f, -6.374832215e-09f, -6.392378817e-09f, -6.409907089e-09f, -6.427417008e-09f,
--6.444908550e-09f, -6.462381690e-09f, -6.479836404e-09f, -6.497272668e-09f, -6.514690458e-09f, -6.532089749e-09f, -6.549470519e-09f, -6.566832742e-09f, -6.584176395e-09f, -6.601501454e-09f,
--6.618807894e-09f, -6.636095694e-09f, -6.653364827e-09f, -6.670615272e-09f, -6.687847003e-09f, -6.705059998e-09f, -6.722254233e-09f, -6.739429685e-09f, -6.756586329e-09f, -6.773724142e-09f,
--6.790843102e-09f, -6.807943184e-09f, -6.825024365e-09f, -6.842086622e-09f, -6.859129932e-09f, -6.876154271e-09f, -6.893159617e-09f, -6.910145946e-09f, -6.927113235e-09f, -6.944061461e-09f,
--6.960990601e-09f, -6.977900633e-09f, -6.994791533e-09f, -7.011663278e-09f, -7.028515846e-09f, -7.045349214e-09f, -7.062163359e-09f, -7.078958258e-09f, -7.095733890e-09f, -7.112490230e-09f,
--7.129227258e-09f, -7.145944949e-09f, -7.162643282e-09f, -7.179322235e-09f, -7.195981785e-09f, -7.212621909e-09f, -7.229242585e-09f, -7.245843792e-09f, -7.262425507e-09f, -7.278987707e-09f,
--7.295530371e-09f, -7.312053477e-09f, -7.328557002e-09f, -7.345040925e-09f, -7.361505224e-09f, -7.377949876e-09f, -7.394374861e-09f, -7.410780155e-09f, -7.427165738e-09f, -7.443531588e-09f,
--7.459877683e-09f, -7.476204001e-09f, -7.492510521e-09f, -7.508797221e-09f, -7.525064080e-09f, -7.541311077e-09f, -7.557538189e-09f, -7.573745397e-09f, -7.589932677e-09f, -7.606100010e-09f,
--7.622247373e-09f, -7.638374747e-09f, -7.654482108e-09f, -7.670569437e-09f, -7.686636713e-09f, -7.702683914e-09f, -7.718711020e-09f, -7.734718009e-09f, -7.750704861e-09f, -7.766671554e-09f,
--7.782618069e-09f, -7.798544384e-09f, -7.814450479e-09f, -7.830336333e-09f, -7.846201926e-09f, -7.862047236e-09f, -7.877872244e-09f, -7.893676929e-09f, -7.909461271e-09f, -7.925225248e-09f,
--7.940968842e-09f, -7.956692031e-09f, -7.972394796e-09f, -7.988077115e-09f, -8.003738970e-09f, -8.019380340e-09f, -8.035001204e-09f, -8.050601544e-09f, -8.066181338e-09f, -8.081740567e-09f,
--8.097279212e-09f, -8.112797252e-09f, -8.128294667e-09f, -8.143771438e-09f, -8.159227545e-09f, -8.174662969e-09f, -8.190077690e-09f, -8.205471688e-09f, -8.220844943e-09f, -8.236197437e-09f,
--8.251529150e-09f, -8.266840062e-09f, -8.282130155e-09f, -8.297399408e-09f, -8.312647804e-09f, -8.327875321e-09f, -8.343081942e-09f, -8.358267648e-09f, -8.373432418e-09f, -8.388576235e-09f,
--8.403699079e-09f, -8.418800931e-09f, -8.433881772e-09f, -8.448941585e-09f, -8.463980349e-09f, -8.478998046e-09f, -8.493994657e-09f, -8.508970165e-09f, -8.523924549e-09f, -8.538857792e-09f,
--8.553769875e-09f, -8.568660780e-09f, -8.583530488e-09f, -8.598378981e-09f, -8.613206240e-09f, -8.628012248e-09f, -8.642796986e-09f, -8.657560435e-09f, -8.672302578e-09f, -8.687023397e-09f,
--8.701722873e-09f, -8.716400989e-09f, -8.731057726e-09f, -8.745693067e-09f, -8.760306994e-09f, -8.774899489e-09f, -8.789470534e-09f, -8.804020112e-09f, -8.818548204e-09f, -8.833054794e-09f,
--8.847539863e-09f, -8.862003394e-09f, -8.876445370e-09f, -8.890865772e-09f, -8.905264585e-09f, -8.919641790e-09f, -8.933997369e-09f, -8.948331307e-09f, -8.962643585e-09f, -8.976934186e-09f,
--8.991203094e-09f, -9.005450291e-09f, -9.019675760e-09f, -9.033879484e-09f, -9.048061446e-09f, -9.062221629e-09f, -9.076360017e-09f, -9.090476593e-09f, -9.104571339e-09f, -9.118644240e-09f,
--9.132695278e-09f, -9.146724437e-09f, -9.160731700e-09f, -9.174717051e-09f, -9.188680473e-09f, -9.202621950e-09f, -9.216541466e-09f, -9.230439004e-09f, -9.244314547e-09f, -9.258168080e-09f,
--9.271999587e-09f, -9.285809051e-09f, -9.299596456e-09f, -9.313361786e-09f, -9.327105025e-09f, -9.340826157e-09f, -9.354525166e-09f, -9.368202036e-09f, -9.381856752e-09f, -9.395489298e-09f,
--9.409099658e-09f, -9.422687815e-09f, -9.436253756e-09f, -9.449797463e-09f, -9.463318922e-09f, -9.476818117e-09f, -9.490295032e-09f, -9.503749653e-09f, -9.517181963e-09f, -9.530591947e-09f,
--9.543979591e-09f, -9.557344878e-09f, -9.570687795e-09f, -9.584008324e-09f, -9.597306453e-09f, -9.610582165e-09f, -9.623835445e-09f, -9.637066279e-09f, -9.650274651e-09f, -9.663460548e-09f,
--9.676623953e-09f, -9.689764853e-09f, -9.702883232e-09f, -9.715979076e-09f, -9.729052370e-09f, -9.742103100e-09f, -9.755131251e-09f, -9.768136809e-09f, -9.781119759e-09f, -9.794080087e-09f,
--9.807017779e-09f, -9.819932819e-09f, -9.832825195e-09f, -9.845694892e-09f, -9.858541895e-09f, -9.871366191e-09f, -9.884167765e-09f, -9.896946604e-09f, -9.909702693e-09f, -9.922436019e-09f,
--9.935146568e-09f, -9.947834326e-09f, -9.960499279e-09f, -9.973141413e-09f, -9.985760716e-09f, -9.998357172e-09f, -1.001093077e-08f, -1.002348149e-08f, -1.003600933e-08f, -1.004851427e-08f,
--1.006099629e-08f, -1.007345539e-08f, -1.008589155e-08f, -1.009830475e-08f, -1.011069499e-08f, -1.012306225e-08f, -1.013540651e-08f, -1.014772777e-08f, -1.016002602e-08f, -1.017230123e-08f,
--1.018455339e-08f, -1.019678250e-08f, -1.020898853e-08f, -1.022117149e-08f, -1.023333135e-08f, -1.024546810e-08f, -1.025758172e-08f, -1.026967222e-08f, -1.028173957e-08f, -1.029378375e-08f,
--1.030580477e-08f, -1.031780261e-08f, -1.032977724e-08f, -1.034172867e-08f, -1.035365688e-08f, -1.036556186e-08f, -1.037744359e-08f, -1.038930206e-08f, -1.040113727e-08f, -1.041294919e-08f,
--1.042473782e-08f, -1.043650314e-08f, -1.044824515e-08f, -1.045996383e-08f, -1.047165917e-08f, -1.048333115e-08f, -1.049497977e-08f, -1.050660502e-08f, -1.051820687e-08f, -1.052978533e-08f,
--1.054134038e-08f, -1.055287201e-08f, -1.056438020e-08f, -1.057586495e-08f, -1.058732624e-08f, -1.059876406e-08f, -1.061017841e-08f, -1.062156926e-08f, -1.063293662e-08f, -1.064428046e-08f,
--1.065560078e-08f, -1.066689757e-08f, -1.067817081e-08f, -1.068942049e-08f, -1.070064661e-08f, -1.071184915e-08f, -1.072302810e-08f, -1.073418346e-08f, -1.074531520e-08f, -1.075642332e-08f,
--1.076750781e-08f, -1.077856867e-08f, -1.078960587e-08f, -1.080061940e-08f, -1.081160927e-08f, -1.082257545e-08f, -1.083351794e-08f, -1.084443672e-08f, -1.085533179e-08f, -1.086620314e-08f,
--1.087705075e-08f, -1.088787462e-08f, -1.089867474e-08f, -1.090945109e-08f, -1.092020366e-08f, -1.093093246e-08f, -1.094163746e-08f, -1.095231865e-08f, -1.096297604e-08f, -1.097360960e-08f,
--1.098421933e-08f, -1.099480522e-08f, -1.100536725e-08f, -1.101590543e-08f, -1.102641973e-08f, -1.103691016e-08f, -1.104737669e-08f, -1.105781933e-08f, -1.106823806e-08f, -1.107863287e-08f,
--1.108900376e-08f, -1.109935071e-08f, -1.110967372e-08f, -1.111997278e-08f, -1.113024787e-08f, -1.114049899e-08f, -1.115072613e-08f, -1.116092929e-08f, -1.117110844e-08f, -1.118126359e-08f,
--1.119139473e-08f, -1.120150184e-08f, -1.121158492e-08f, -1.122164396e-08f, -1.123167895e-08f, -1.124168988e-08f, -1.125167675e-08f, -1.126163954e-08f, -1.127157825e-08f, -1.128149287e-08f,
--1.129138339e-08f, -1.130124981e-08f, -1.131109211e-08f, -1.132091028e-08f, -1.133070432e-08f, -1.134047423e-08f, -1.135021998e-08f, -1.135994159e-08f, -1.136963903e-08f, -1.137931229e-08f,
--1.138896138e-08f, -1.139858629e-08f, -1.140818700e-08f, -1.141776350e-08f, -1.142731580e-08f, -1.143684389e-08f, -1.144634775e-08f, -1.145582737e-08f, -1.146528276e-08f, -1.147471391e-08f,
--1.148412080e-08f, -1.149350343e-08f, -1.150286179e-08f, -1.151219588e-08f, -1.152150568e-08f, -1.153079120e-08f, -1.154005242e-08f, -1.154928934e-08f, -1.155850195e-08f, -1.156769024e-08f,
--1.157685421e-08f, -1.158599385e-08f, -1.159510915e-08f, -1.160420011e-08f, -1.161326672e-08f, -1.162230897e-08f, -1.163132686e-08f, -1.164032038e-08f, -1.164928952e-08f, -1.165823428e-08f,
--1.166715466e-08f, -1.167605064e-08f, -1.168492221e-08f, -1.169376938e-08f, -1.170259214e-08f, -1.171139048e-08f, -1.172016439e-08f, -1.172891387e-08f, -1.173763891e-08f, -1.174633951e-08f,
--1.175501566e-08f, -1.176366736e-08f, -1.177229459e-08f, -1.178089736e-08f, -1.178947566e-08f, -1.179802947e-08f, -1.180655881e-08f, -1.181506365e-08f, -1.182354400e-08f, -1.183199986e-08f,
--1.184043120e-08f, -1.184883804e-08f, -1.185722036e-08f, -1.186557816e-08f, -1.187391143e-08f, -1.188222017e-08f, -1.189050438e-08f, -1.189876404e-08f, -1.190699916e-08f, -1.191520972e-08f,
--1.192339573e-08f, -1.193155718e-08f, -1.193969406e-08f, -1.194780637e-08f, -1.195589411e-08f, -1.196395726e-08f, -1.197199583e-08f, -1.198000981e-08f, -1.198799920e-08f, -1.199596399e-08f,
--1.200390417e-08f, -1.201181975e-08f, -1.201971072e-08f, -1.202757707e-08f, -1.203541879e-08f, -1.204323590e-08f, -1.205102837e-08f, -1.205879622e-08f, -1.206653942e-08f, -1.207425799e-08f,
--1.208195191e-08f, -1.208962118e-08f, -1.209726580e-08f, -1.210488576e-08f, -1.211248106e-08f, -1.212005170e-08f, -1.212759767e-08f, -1.213511897e-08f, -1.214261559e-08f, -1.215008754e-08f,
--1.215753480e-08f, -1.216495738e-08f, -1.217235526e-08f, -1.217972846e-08f, -1.218707696e-08f, -1.219440076e-08f, -1.220169986e-08f, -1.220897425e-08f, -1.221622393e-08f, -1.222344890e-08f,
--1.223064916e-08f, -1.223782470e-08f, -1.224497552e-08f, -1.225210161e-08f, -1.225920298e-08f, -1.226627962e-08f, -1.227333153e-08f, -1.228035870e-08f, -1.228736113e-08f, -1.229433883e-08f,
--1.230129178e-08f, -1.230821998e-08f, -1.231512344e-08f, -1.232200215e-08f, -1.232885610e-08f, -1.233568530e-08f, -1.234248974e-08f, -1.234926943e-08f, -1.235602435e-08f, -1.236275450e-08f,
--1.236945989e-08f, -1.237614052e-08f, -1.238279637e-08f, -1.238942745e-08f, -1.239603375e-08f, -1.240261528e-08f, -1.240917203e-08f, -1.241570401e-08f, -1.242221120e-08f, -1.242869360e-08f,
--1.243515122e-08f, -1.244158406e-08f, -1.244799211e-08f, -1.245437536e-08f, -1.246073383e-08f, -1.246706750e-08f, -1.247337638e-08f, -1.247966047e-08f, -1.248591975e-08f, -1.249215424e-08f,
--1.249836393e-08f, -1.250454882e-08f, -1.251070891e-08f, -1.251684420e-08f, -1.252295468e-08f, -1.252904036e-08f, -1.253510123e-08f, -1.254113730e-08f, -1.254714856e-08f, -1.255313501e-08f,
--1.255909665e-08f, -1.256503348e-08f, -1.257094551e-08f, -1.257683272e-08f, -1.258269512e-08f, -1.258853271e-08f, -1.259434549e-08f, -1.260013345e-08f, -1.260589660e-08f, -1.261163494e-08f,
--1.261734846e-08f, -1.262303717e-08f, -1.262870107e-08f, -1.263434015e-08f, -1.263995441e-08f, -1.264554386e-08f, -1.265110850e-08f, -1.265664832e-08f, -1.266216333e-08f, -1.266765353e-08f,
--1.267311891e-08f, -1.267855947e-08f, -1.268397522e-08f, -1.268936616e-08f, -1.269473228e-08f, -1.270007360e-08f, -1.270539009e-08f, -1.271068178e-08f, -1.271594866e-08f, -1.272119072e-08f,
--1.272640798e-08f, -1.273160042e-08f, -1.273676806e-08f, -1.274191089e-08f, -1.274702891e-08f, -1.275212212e-08f, -1.275719053e-08f, -1.276223413e-08f, -1.276725293e-08f, -1.277224693e-08f,
--1.277721612e-08f, -1.278216052e-08f, -1.278708011e-08f, -1.279197491e-08f, -1.279684491e-08f, -1.280169011e-08f, -1.280651052e-08f, -1.281130614e-08f, -1.281607697e-08f, -1.282082300e-08f,
--1.282554425e-08f, -1.283024070e-08f, -1.283491238e-08f, -1.283955927e-08f, -1.284418137e-08f, -1.284877870e-08f, -1.285335125e-08f, -1.285789902e-08f, -1.286242201e-08f, -1.286692023e-08f,
--1.287139369e-08f, -1.287584237e-08f, -1.288026628e-08f, -1.288466543e-08f, -1.288903982e-08f, -1.289338944e-08f, -1.289771431e-08f, -1.290201442e-08f, -1.290628978e-08f, -1.291054038e-08f,
--1.291476624e-08f, -1.291896734e-08f, -1.292314371e-08f, -1.292729533e-08f, -1.293142221e-08f, -1.293552436e-08f, -1.293960177e-08f, -1.294365445e-08f, -1.294768241e-08f, -1.295168563e-08f,
--1.295566414e-08f, -1.295961792e-08f, -1.296354699e-08f, -1.296745134e-08f, -1.297133098e-08f, -1.297518591e-08f, -1.297901614e-08f, -1.298282166e-08f, -1.298660249e-08f, -1.299035862e-08f,
--1.299409006e-08f, -1.299779681e-08f, -1.300147888e-08f, -1.300513626e-08f, -1.300876896e-08f, -1.301237699e-08f, -1.301596035e-08f, -1.301951904e-08f, -1.302305306e-08f, -1.302656243e-08f,
--1.303004713e-08f, -1.303350719e-08f, -1.303694259e-08f, -1.304035335e-08f, -1.304373947e-08f, -1.304710094e-08f, -1.305043779e-08f, -1.305375000e-08f, -1.305703759e-08f, -1.306030056e-08f,
--1.306353891e-08f, -1.306675265e-08f, -1.306994177e-08f, -1.307310630e-08f, -1.307624622e-08f, -1.307936154e-08f, -1.308245228e-08f, -1.308551842e-08f, -1.308855998e-08f, -1.309157697e-08f,
--1.309456938e-08f, -1.309753722e-08f, -1.310048050e-08f, -1.310339922e-08f, -1.310629338e-08f, -1.310916299e-08f, -1.311200806e-08f, -1.311482859e-08f, -1.311762458e-08f, -1.312039604e-08f,
--1.312314297e-08f, -1.312586538e-08f, -1.312856328e-08f, -1.313123667e-08f, -1.313388555e-08f, -1.313650994e-08f, -1.313910982e-08f, -1.314168522e-08f, -1.314423614e-08f, -1.314676257e-08f,
--1.314926454e-08f, -1.315174203e-08f, -1.315419506e-08f, -1.315662364e-08f, -1.315902776e-08f, -1.316140744e-08f, -1.316376268e-08f, -1.316609349e-08f, -1.316839987e-08f, -1.317068182e-08f,
--1.317293936e-08f, -1.317517249e-08f, -1.317738121e-08f, -1.317956554e-08f, -1.318172547e-08f, -1.318386101e-08f, -1.318597218e-08f, -1.318805897e-08f, -1.319012139e-08f, -1.319215945e-08f,
--1.319417315e-08f, -1.319616251e-08f, -1.319812752e-08f, -1.320006819e-08f, -1.320198454e-08f, -1.320387656e-08f, -1.320574426e-08f, -1.320758766e-08f, -1.320940675e-08f, -1.321120154e-08f,
--1.321297204e-08f, -1.321471826e-08f, -1.321644020e-08f, -1.321813787e-08f, -1.321981127e-08f, -1.322146043e-08f, -1.322308533e-08f, -1.322468598e-08f, -1.322626241e-08f, -1.322781460e-08f,
--1.322934257e-08f, -1.323084633e-08f, -1.323232589e-08f, -1.323378124e-08f, -1.323521240e-08f, -1.323661937e-08f, -1.323800217e-08f, -1.323936079e-08f, -1.324069526e-08f, -1.324200556e-08f,
--1.324329172e-08f, -1.324455374e-08f, -1.324579163e-08f, -1.324700539e-08f, -1.324819504e-08f, -1.324936057e-08f, -1.325050200e-08f, -1.325161934e-08f, -1.325271259e-08f, -1.325378177e-08f,
--1.325482687e-08f, -1.325584791e-08f, -1.325684490e-08f, -1.325781784e-08f, -1.325876674e-08f, -1.325969161e-08f, -1.326059246e-08f, -1.326146929e-08f, -1.326232212e-08f, -1.326315096e-08f,
--1.326395580e-08f, -1.326473667e-08f, -1.326549356e-08f, -1.326622649e-08f, -1.326693546e-08f, -1.326762048e-08f, -1.326828157e-08f, -1.326891873e-08f, -1.326953197e-08f, -1.327012130e-08f,
--1.327068672e-08f, -1.327122825e-08f, -1.327174589e-08f, -1.327223966e-08f, -1.327270956e-08f, -1.327315560e-08f, -1.327357779e-08f, -1.327397614e-08f, -1.327435065e-08f, -1.327470135e-08f,
--1.327502823e-08f, -1.327533131e-08f, -1.327561059e-08f, -1.327586608e-08f, -1.327609780e-08f, -1.327630575e-08f, -1.327648995e-08f, -1.327665039e-08f, -1.327678710e-08f, -1.327690008e-08f,
--1.327698933e-08f, -1.327705488e-08f, -1.327709673e-08f, -1.327711488e-08f, -1.327710936e-08f, -1.327708016e-08f, -1.327702730e-08f, -1.327695079e-08f, -1.327685063e-08f, -1.327672685e-08f,
--1.327657944e-08f, -1.327640842e-08f, -1.327621380e-08f, -1.327599558e-08f, -1.327575378e-08f, -1.327548841e-08f, -1.327519948e-08f, -1.327488700e-08f, -1.327455097e-08f, -1.327419142e-08f,
--1.327380834e-08f, -1.327340176e-08f, -1.327297167e-08f, -1.327251809e-08f, -1.327204104e-08f, -1.327154051e-08f, -1.327101653e-08f, -1.327046910e-08f, -1.326989823e-08f, -1.326930394e-08f,
--1.326868623e-08f, -1.326804512e-08f, -1.326738061e-08f, -1.326669273e-08f, -1.326598146e-08f, -1.326524684e-08f, -1.326448887e-08f, -1.326370756e-08f, -1.326290291e-08f, -1.326207496e-08f,
--1.326122369e-08f, -1.326034913e-08f, -1.325945129e-08f, -1.325853017e-08f, -1.325758580e-08f, -1.325661817e-08f, -1.325562730e-08f, -1.325461321e-08f, -1.325357590e-08f, -1.325251539e-08f,
--1.325143168e-08f, -1.325032479e-08f, -1.324919473e-08f, -1.324804152e-08f, -1.324686515e-08f, -1.324566565e-08f, -1.324444303e-08f, -1.324319730e-08f, -1.324192846e-08f, -1.324063654e-08f,
--1.323932154e-08f, -1.323798348e-08f, -1.323662237e-08f, -1.323523821e-08f, -1.323383103e-08f, -1.323240083e-08f, -1.323094762e-08f, -1.322947142e-08f, -1.322797225e-08f, -1.322645010e-08f,
--1.322490500e-08f, -1.322333696e-08f, -1.322174598e-08f, -1.322013209e-08f, -1.321849529e-08f, -1.321683559e-08f, -1.321515302e-08f, -1.321344757e-08f, -1.321171927e-08f, -1.320996813e-08f,
--1.320819415e-08f, -1.320639735e-08f, -1.320457775e-08f, -1.320273536e-08f, -1.320087018e-08f, -1.319898224e-08f, -1.319707154e-08f, -1.319513810e-08f, -1.319318193e-08f, -1.319120304e-08f,
--1.318920145e-08f, -1.318717717e-08f, -1.318513022e-08f, -1.318306059e-08f, -1.318096832e-08f, -1.317885341e-08f, -1.317671587e-08f, -1.317455573e-08f, -1.317237298e-08f, -1.317016765e-08f,
--1.316793975e-08f, -1.316568928e-08f, -1.316341628e-08f, -1.316112074e-08f, -1.315880268e-08f, -1.315646212e-08f, -1.315409907e-08f, -1.315171354e-08f, -1.314930555e-08f, -1.314687510e-08f,
--1.314442222e-08f, -1.314194692e-08f, -1.313944920e-08f, -1.313692910e-08f, -1.313438660e-08f, -1.313182175e-08f, -1.312923454e-08f, -1.312662498e-08f, -1.312399311e-08f, -1.312133892e-08f,
--1.311866243e-08f, -1.311596366e-08f, -1.311324262e-08f, -1.311049932e-08f, -1.310773378e-08f, -1.310494602e-08f, -1.310213604e-08f, -1.309930386e-08f, -1.309644950e-08f, -1.309357297e-08f,
--1.309067428e-08f, -1.308775345e-08f, -1.308481050e-08f, -1.308184543e-08f, -1.307885826e-08f, -1.307584901e-08f, -1.307281770e-08f, -1.306976432e-08f, -1.306668891e-08f, -1.306359148e-08f,
--1.306047203e-08f, -1.305733059e-08f, -1.305416717e-08f, -1.305098178e-08f, -1.304777444e-08f, -1.304454517e-08f, -1.304129398e-08f, -1.303802088e-08f, -1.303472588e-08f, -1.303140902e-08f,
--1.302807029e-08f, -1.302470972e-08f, -1.302132731e-08f, -1.301792309e-08f, -1.301449707e-08f, -1.301104926e-08f, -1.300757969e-08f, -1.300408836e-08f, -1.300057529e-08f, -1.299704050e-08f,
--1.299348400e-08f, -1.298990581e-08f, -1.298630593e-08f, -1.298268440e-08f, -1.297904122e-08f, -1.297537641e-08f, -1.297168999e-08f, -1.296798196e-08f, -1.296425235e-08f, -1.296050118e-08f,
--1.295672845e-08f, -1.295293418e-08f, -1.294911839e-08f, -1.294528110e-08f, -1.294142232e-08f, -1.293754207e-08f, -1.293364036e-08f, -1.292971720e-08f, -1.292577262e-08f, -1.292180664e-08f,
--1.291781926e-08f, -1.291381050e-08f, -1.290978038e-08f, -1.290572891e-08f, -1.290165612e-08f, -1.289756202e-08f, -1.289344661e-08f, -1.288930993e-08f, -1.288515199e-08f, -1.288097280e-08f,
--1.287677237e-08f, -1.287255073e-08f, -1.286830790e-08f, -1.286404388e-08f, -1.285975870e-08f, -1.285545237e-08f, -1.285112491e-08f, -1.284677633e-08f, -1.284240666e-08f, -1.283801590e-08f,
--1.283360407e-08f, -1.282917120e-08f, -1.282471730e-08f, -1.282024238e-08f, -1.281574647e-08f, -1.281122957e-08f, -1.280669171e-08f, -1.280213290e-08f, -1.279755316e-08f, -1.279295251e-08f,
--1.278833096e-08f, -1.278368853e-08f, -1.277902524e-08f, -1.277434111e-08f, -1.276963614e-08f, -1.276491037e-08f, -1.276016380e-08f, -1.275539646e-08f, -1.275060836e-08f, -1.274579951e-08f,
--1.274096994e-08f, -1.273611967e-08f, -1.273124870e-08f, -1.272635707e-08f, -1.272144477e-08f, -1.271651184e-08f, -1.271155830e-08f, -1.270658414e-08f, -1.270158941e-08f, -1.269657411e-08f,
--1.269153825e-08f, -1.268648187e-08f, -1.268140497e-08f, -1.267630758e-08f, -1.267118971e-08f, -1.266605137e-08f, -1.266089260e-08f, -1.265571340e-08f, -1.265051379e-08f, -1.264529379e-08f,
--1.264005342e-08f, -1.263479270e-08f, -1.262951165e-08f, -1.262421027e-08f, -1.261888860e-08f, -1.261354665e-08f, -1.260818443e-08f, -1.260280197e-08f, -1.259739928e-08f, -1.259197638e-08f,
--1.258653330e-08f, -1.258107004e-08f, -1.257558663e-08f, -1.257008308e-08f, -1.256455942e-08f, -1.255901565e-08f, -1.255345181e-08f, -1.254786791e-08f, -1.254226396e-08f, -1.253663999e-08f,
--1.253099601e-08f, -1.252533204e-08f, -1.251964811e-08f, -1.251394422e-08f, -1.250822041e-08f, -1.250247668e-08f, -1.249671306e-08f, -1.249092956e-08f, -1.248512620e-08f, -1.247930301e-08f,
--1.247346000e-08f, -1.246759718e-08f, -1.246171459e-08f, -1.245581223e-08f, -1.244989013e-08f, -1.244394831e-08f, -1.243798678e-08f, -1.243200556e-08f, -1.242600467e-08f, -1.241998414e-08f,
--1.241394398e-08f, -1.240788421e-08f, -1.240180484e-08f, -1.239570591e-08f, -1.238958742e-08f, -1.238344940e-08f, -1.237729187e-08f, -1.237111484e-08f, -1.236491833e-08f, -1.235870237e-08f,
--1.235246697e-08f, -1.234621216e-08f, -1.233993794e-08f, -1.233364435e-08f, -1.232733140e-08f, -1.232099911e-08f, -1.231464750e-08f, -1.230827659e-08f, -1.230188640e-08f, -1.229547695e-08f,
--1.228904826e-08f, -1.228260035e-08f, -1.227613323e-08f, -1.226964693e-08f, -1.226314147e-08f, -1.225661687e-08f, -1.225007315e-08f, -1.224351032e-08f, -1.223692841e-08f, -1.223032743e-08f,
--1.222370742e-08f, -1.221706838e-08f, -1.221041033e-08f, -1.220373330e-08f, -1.219703731e-08f, -1.219032238e-08f, -1.218358853e-08f, -1.217683577e-08f, -1.217006412e-08f, -1.216327362e-08f,
--1.215646427e-08f, -1.214963610e-08f, -1.214278913e-08f, -1.213592338e-08f, -1.212903887e-08f, -1.212213561e-08f, -1.211521364e-08f, -1.210827296e-08f, -1.210131361e-08f, -1.209433559e-08f,
--1.208733894e-08f, -1.208032367e-08f, -1.207328980e-08f, -1.206623735e-08f, -1.205916634e-08f, -1.205207680e-08f, -1.204496875e-08f, -1.203784219e-08f, -1.203069717e-08f, -1.202353369e-08f,
--1.201635178e-08f, -1.200915145e-08f, -1.200193274e-08f, -1.199469565e-08f, -1.198744021e-08f, -1.198016645e-08f, -1.197287437e-08f, -1.196556401e-08f, -1.195823538e-08f, -1.195088851e-08f,
--1.194352341e-08f, -1.193614011e-08f, -1.192873863e-08f, -1.192131898e-08f, -1.191388120e-08f, -1.190642530e-08f, -1.189895129e-08f, -1.189145921e-08f, -1.188394908e-08f, -1.187642091e-08f,
--1.186887472e-08f, -1.186131055e-08f, -1.185372840e-08f, -1.184612831e-08f, -1.183851028e-08f, -1.183087435e-08f, -1.182322053e-08f, -1.181554885e-08f, -1.180785933e-08f, -1.180015198e-08f,
--1.179242683e-08f, -1.178468391e-08f, -1.177692323e-08f, -1.176914481e-08f, -1.176134868e-08f, -1.175353485e-08f, -1.174570336e-08f, -1.173785421e-08f, -1.172998744e-08f, -1.172210307e-08f,
--1.171420110e-08f, -1.170628158e-08f, -1.169834451e-08f, -1.169038993e-08f, -1.168241785e-08f, -1.167442829e-08f, -1.166642128e-08f, -1.165839684e-08f, -1.165035499e-08f, -1.164229575e-08f,
--1.163421914e-08f, -1.162612519e-08f, -1.161801392e-08f, -1.160988535e-08f, -1.160173949e-08f, -1.159357639e-08f, -1.158539605e-08f, -1.157719849e-08f, -1.156898375e-08f, -1.156075184e-08f,
--1.155250278e-08f, -1.154423660e-08f, -1.153595332e-08f, -1.152765296e-08f, -1.151933554e-08f, -1.151100109e-08f, -1.150264962e-08f, -1.149428117e-08f, -1.148589575e-08f, -1.147749338e-08f,
--1.146907409e-08f, -1.146063790e-08f, -1.145218483e-08f, -1.144371490e-08f, -1.143522814e-08f, -1.142672457e-08f, -1.141820421e-08f, -1.140966709e-08f, -1.140111322e-08f, -1.139254263e-08f,
--1.138395534e-08f, -1.137535138e-08f, -1.136673077e-08f, -1.135809352e-08f, -1.134943967e-08f, -1.134076923e-08f, -1.133208223e-08f, -1.132337869e-08f, -1.131465863e-08f, -1.130592208e-08f,
--1.129716906e-08f, -1.128839959e-08f, -1.127961369e-08f, -1.127081139e-08f, -1.126199271e-08f, -1.125315767e-08f, -1.124430630e-08f, -1.123543862e-08f, -1.122655465e-08f, -1.121765442e-08f,
--1.120873794e-08f, -1.119980524e-08f, -1.119085635e-08f, -1.118189128e-08f, -1.117291007e-08f, -1.116391273e-08f, -1.115489928e-08f, -1.114586975e-08f, -1.113682417e-08f, -1.112776255e-08f,
--1.111868492e-08f, -1.110959130e-08f, -1.110048172e-08f, -1.109135619e-08f, -1.108221475e-08f, -1.107305741e-08f, -1.106388420e-08f, -1.105469514e-08f, -1.104549026e-08f, -1.103626958e-08f,
--1.102703311e-08f, -1.101778090e-08f, -1.100851295e-08f, -1.099922929e-08f, -1.098992995e-08f, -1.098061495e-08f, -1.097128431e-08f, -1.096193806e-08f, -1.095257622e-08f, -1.094319881e-08f,
--1.093380586e-08f, -1.092439738e-08f, -1.091497341e-08f, -1.090553397e-08f, -1.089607908e-08f, -1.088660877e-08f, -1.087712305e-08f, -1.086762196e-08f, -1.085810551e-08f, -1.084857374e-08f,
--1.083902665e-08f, -1.082946429e-08f, -1.081988666e-08f, -1.081029380e-08f, -1.080068573e-08f, -1.079106247e-08f, -1.078142405e-08f, -1.077177049e-08f, -1.076210182e-08f, -1.075241805e-08f,
--1.074271921e-08f, -1.073300533e-08f, -1.072327643e-08f, -1.071353254e-08f, -1.070377367e-08f, -1.069399986e-08f, -1.068421112e-08f, -1.067440748e-08f, -1.066458897e-08f, -1.065475560e-08f,
--1.064490741e-08f, -1.063504442e-08f, -1.062516665e-08f, -1.061527412e-08f, -1.060536686e-08f, -1.059544489e-08f, -1.058550825e-08f, -1.057555694e-08f, -1.056559100e-08f, -1.055561045e-08f,
--1.054561532e-08f, -1.053560562e-08f, -1.052558139e-08f, -1.051554265e-08f, -1.050548942e-08f, -1.049542173e-08f, -1.048533959e-08f, -1.047524305e-08f, -1.046513211e-08f, -1.045500681e-08f,
--1.044486716e-08f, -1.043471320e-08f, -1.042454495e-08f, -1.041436242e-08f, -1.040416566e-08f, -1.039395468e-08f, -1.038372950e-08f, -1.037349015e-08f, -1.036323666e-08f, -1.035296904e-08f,
--1.034268734e-08f, -1.033239156e-08f, -1.032208173e-08f, -1.031175788e-08f, -1.030142004e-08f, -1.029106822e-08f, -1.028070245e-08f, -1.027032276e-08f, -1.025992917e-08f, -1.024952171e-08f,
--1.023910040e-08f, -1.022866527e-08f, -1.021821634e-08f, -1.020775363e-08f, -1.019727717e-08f, -1.018678699e-08f, -1.017628311e-08f, -1.016576555e-08f, -1.015523434e-08f, -1.014468951e-08f,
--1.013413108e-08f, -1.012355907e-08f, -1.011297351e-08f, -1.010237443e-08f, -1.009176185e-08f, -1.008113579e-08f, -1.007049628e-08f, -1.005984334e-08f, -1.004917700e-08f, -1.003849729e-08f,
--1.002780423e-08f, -1.001709784e-08f, -1.000637816e-08f, -9.995645193e-09f, -9.984898980e-09f, -9.974139543e-09f, -9.963366906e-09f, -9.952581095e-09f, -9.941782134e-09f, -9.930970049e-09f,
--9.920144865e-09f, -9.909306607e-09f, -9.898455301e-09f, -9.887590971e-09f, -9.876713644e-09f, -9.865823343e-09f, -9.854920095e-09f, -9.844003925e-09f, -9.833074858e-09f, -9.822132920e-09f,
--9.811178135e-09f, -9.800210530e-09f, -9.789230129e-09f, -9.778236957e-09f, -9.767231041e-09f, -9.756212406e-09f, -9.745181076e-09f, -9.734137078e-09f, -9.723080437e-09f, -9.712011179e-09f,
--9.700929328e-09f, -9.689834910e-09f, -9.678727951e-09f, -9.667608477e-09f, -9.656476512e-09f, -9.645332082e-09f, -9.634175214e-09f, -9.623005931e-09f, -9.611824261e-09f, -9.600630228e-09f,
--9.589423858e-09f, -9.578205177e-09f, -9.566974210e-09f, -9.555730983e-09f, -9.544475522e-09f, -9.533207852e-09f, -9.521927998e-09f, -9.510635987e-09f, -9.499331845e-09f, -9.488015596e-09f,
--9.476687267e-09f, -9.465346883e-09f, -9.453994470e-09f, -9.442630053e-09f, -9.431253660e-09f, -9.419865314e-09f, -9.408465043e-09f, -9.397052871e-09f, -9.385628825e-09f, -9.374192930e-09f,
--9.362745213e-09f, -9.351285698e-09f, -9.339814412e-09f, -9.328331381e-09f, -9.316836631e-09f, -9.305330187e-09f, -9.293812075e-09f, -9.282282322e-09f, -9.270740952e-09f, -9.259187993e-09f,
--9.247623469e-09f, -9.236047408e-09f, -9.224459834e-09f, -9.212860774e-09f, -9.201250253e-09f, -9.189628299e-09f, -9.177994935e-09f, -9.166350190e-09f, -9.154694088e-09f, -9.143026656e-09f,
--9.131347919e-09f, -9.119657905e-09f, -9.107956638e-09f, -9.096244144e-09f, -9.084520451e-09f, -9.072785583e-09f, -9.061039568e-09f, -9.049282430e-09f, -9.037514197e-09f, -9.025734894e-09f,
--9.013944548e-09f, -9.002143184e-09f, -8.990330829e-09f, -8.978507508e-09f, -8.966673249e-09f, -8.954828077e-09f, -8.942972018e-09f, -8.931105098e-09f, -8.919227344e-09f, -8.907338782e-09f,
--8.895439439e-09f, -8.883529339e-09f, -8.871608510e-09f, -8.859676978e-09f, -8.847734769e-09f, -8.835781909e-09f, -8.823818425e-09f, -8.811844342e-09f, -8.799859688e-09f, -8.787864488e-09f,
--8.775858768e-09f, -8.763842556e-09f, -8.751815877e-09f, -8.739778757e-09f, -8.727731223e-09f, -8.715673302e-09f, -8.703605019e-09f, -8.691526401e-09f, -8.679437475e-09f, -8.667338266e-09f,
--8.655228801e-09f, -8.643109107e-09f, -8.630979209e-09f, -8.618839135e-09f, -8.606688910e-09f, -8.594528562e-09f, -8.582358115e-09f, -8.570177598e-09f, -8.557987036e-09f, -8.545786456e-09f,
--8.533575884e-09f, -8.521355347e-09f, -8.509124871e-09f, -8.496884482e-09f, -8.484634208e-09f, -8.472374074e-09f, -8.460104107e-09f, -8.447824334e-09f, -8.435534781e-09f, -8.423235474e-09f,
--8.410926441e-09f, -8.398607707e-09f, -8.386279300e-09f, -8.373941245e-09f, -8.361593569e-09f, -8.349236299e-09f, -8.336869462e-09f, -8.324493084e-09f, -8.312107191e-09f, -8.299711810e-09f,
--8.287306968e-09f, -8.274892691e-09f, -8.262469006e-09f, -8.250035939e-09f, -8.237593518e-09f, -8.225141768e-09f, -8.212680717e-09f, -8.200210391e-09f, -8.187730816e-09f, -8.175242019e-09f,
--8.162744027e-09f, -8.150236867e-09f, -8.137720565e-09f, -8.125195148e-09f, -8.112660642e-09f, -8.100117075e-09f, -8.087564472e-09f, -8.075002861e-09f, -8.062432268e-09f, -8.049852721e-09f,
--8.037264244e-09f, -8.024666866e-09f, -8.012060614e-09f, -7.999445512e-09f, -7.986821590e-09f, -7.974188872e-09f, -7.961547387e-09f, -7.948897160e-09f, -7.936238219e-09f, -7.923570589e-09f,
--7.910894299e-09f, -7.898209374e-09f, -7.885515842e-09f, -7.872813729e-09f, -7.860103062e-09f, -7.847383867e-09f, -7.834656173e-09f, -7.821920004e-09f, -7.809175388e-09f, -7.796422353e-09f,
--7.783660924e-09f, -7.770891128e-09f, -7.758112993e-09f, -7.745326544e-09f, -7.732531810e-09f, -7.719728816e-09f, -7.706917590e-09f, -7.694098158e-09f, -7.681270547e-09f, -7.668434784e-09f,
--7.655590896e-09f, -7.642738909e-09f, -7.629878851e-09f, -7.617010748e-09f, -7.604134628e-09f, -7.591250516e-09f, -7.578358441e-09f, -7.565458428e-09f, -7.552550504e-09f, -7.539634698e-09f,
--7.526711034e-09f, -7.513779541e-09f, -7.500840244e-09f, -7.487893172e-09f, -7.474938350e-09f, -7.461975806e-09f, -7.449005567e-09f, -7.436027659e-09f, -7.423042109e-09f, -7.410048945e-09f,
--7.397048193e-09f, -7.384039880e-09f, -7.371024033e-09f, -7.358000678e-09f, -7.344969844e-09f, -7.331931556e-09f, -7.318885841e-09f, -7.305832727e-09f, -7.292772241e-09f, -7.279704408e-09f,
--7.266629257e-09f, -7.253546814e-09f, -7.240457107e-09f, -7.227360161e-09f, -7.214256004e-09f, -7.201144663e-09f, -7.188026164e-09f, -7.174900536e-09f, -7.161767804e-09f, -7.148627995e-09f,
--7.135481137e-09f, -7.122327257e-09f, -7.109166381e-09f, -7.095998536e-09f, -7.082823750e-09f, -7.069642048e-09f, -7.056453459e-09f, -7.043258009e-09f, -7.030055726e-09f, -7.016846635e-09f,
--7.003630764e-09f, -6.990408140e-09f, -6.977178790e-09f, -6.963942740e-09f, -6.950700019e-09f, -6.937450652e-09f, -6.924194667e-09f, -6.910932090e-09f, -6.897662949e-09f, -6.884387271e-09f,
--6.871105082e-09f, -6.857816410e-09f, -6.844521281e-09f, -6.831219722e-09f, -6.817911761e-09f, -6.804597424e-09f, -6.791276739e-09f, -6.777949731e-09f, -6.764616429e-09f, -6.751276859e-09f,
--6.737931048e-09f, -6.724579023e-09f, -6.711220812e-09f, -6.697856440e-09f, -6.684485935e-09f, -6.671109324e-09f, -6.657726634e-09f, -6.644337892e-09f, -6.630943125e-09f, -6.617542360e-09f,
--6.604135623e-09f, -6.590722942e-09f, -6.577304343e-09f, -6.563879855e-09f, -6.550449503e-09f, -6.537013314e-09f, -6.523571316e-09f, -6.510123535e-09f, -6.496669999e-09f, -6.483210734e-09f,
--6.469745767e-09f, -6.456275126e-09f, -6.442798837e-09f, -6.429316927e-09f, -6.415829423e-09f, -6.402336352e-09f, -6.388837741e-09f, -6.375333617e-09f, -6.361824007e-09f, -6.348308938e-09f,
--6.334788437e-09f, -6.321262530e-09f, -6.307731245e-09f, -6.294194609e-09f, -6.280652648e-09f, -6.267105390e-09f, -6.253552861e-09f, -6.239995088e-09f, -6.226432099e-09f, -6.212863920e-09f,
--6.199290578e-09f, -6.185712100e-09f, -6.172128513e-09f, -6.158539844e-09f, -6.144946119e-09f, -6.131347367e-09f, -6.117743613e-09f, -6.104134884e-09f, -6.090521208e-09f, -6.076902611e-09f,
--6.063279121e-09f, -6.049650764e-09f, -6.036017566e-09f, -6.022379556e-09f, -6.008736760e-09f, -5.995089204e-09f, -5.981436916e-09f, -5.967779922e-09f, -5.954118250e-09f, -5.940451926e-09f,
--5.926780977e-09f, -5.913105430e-09f, -5.899425312e-09f, -5.885740650e-09f, -5.872051471e-09f, -5.858357801e-09f, -5.844659667e-09f, -5.830957097e-09f, -5.817250116e-09f, -5.803538752e-09f,
--5.789823033e-09f, -5.776102983e-09f, -5.762378632e-09f, -5.748650004e-09f, -5.734917128e-09f, -5.721180029e-09f, -5.707438735e-09f, -5.693693273e-09f, -5.679943669e-09f, -5.666189950e-09f,
--5.652432144e-09f, -5.638670276e-09f, -5.624904373e-09f, -5.611134464e-09f, -5.597360573e-09f, -5.583582728e-09f, -5.569800956e-09f, -5.556015284e-09f, -5.542225738e-09f, -5.528432345e-09f,
--5.514635132e-09f, -5.500834125e-09f, -5.487029352e-09f, -5.473220839e-09f, -5.459408613e-09f, -5.445592701e-09f, -5.431773129e-09f, -5.417949924e-09f, -5.404123113e-09f, -5.390292723e-09f,
--5.376458779e-09f, -5.362621310e-09f, -5.348780342e-09f, -5.334935901e-09f, -5.321088014e-09f, -5.307236708e-09f, -5.293382009e-09f, -5.279523945e-09f, -5.265662542e-09f, -5.251797826e-09f,
--5.237929824e-09f, -5.224058563e-09f, -5.210184070e-09f, -5.196306371e-09f, -5.182425493e-09f, -5.168541463e-09f, -5.154654306e-09f, -5.140764051e-09f, -5.126870723e-09f, -5.112974348e-09f,
--5.099074955e-09f, -5.085172569e-09f, -5.071267216e-09f, -5.057358924e-09f, -5.043447719e-09f, -5.029533628e-09f, -5.015616677e-09f, -5.001696893e-09f, -4.987774302e-09f, -4.973848931e-09f,
--4.959920806e-09f, -4.945989955e-09f, -4.932056403e-09f, -4.918120177e-09f, -4.904181304e-09f, -4.890239810e-09f, -4.876295721e-09f, -4.862349065e-09f, -4.848399868e-09f, -4.834448155e-09f,
--4.820493955e-09f, -4.806537292e-09f, -4.792578194e-09f, -4.778616687e-09f, -4.764652798e-09f, -4.750686553e-09f, -4.736717978e-09f, -4.722747100e-09f, -4.708773946e-09f, -4.694798541e-09f,
--4.680820913e-09f, -4.666841087e-09f, -4.652859090e-09f, -4.638874948e-09f, -4.624888689e-09f, -4.610900337e-09f, -4.596909920e-09f, -4.582917464e-09f, -4.568922996e-09f, -4.554926540e-09f,
--4.540928125e-09f, -4.526927777e-09f, -4.512925521e-09f, -4.498921383e-09f, -4.484915392e-09f, -4.470907571e-09f, -4.456897949e-09f, -4.442886551e-09f, -4.428873403e-09f, -4.414858533e-09f,
--4.400841965e-09f, -4.386823726e-09f, -4.372803843e-09f, -4.358782342e-09f, -4.344759249e-09f, -4.330734590e-09f, -4.316708391e-09f, -4.302680679e-09f, -4.288651480e-09f, -4.274620820e-09f,
--4.260588726e-09f, -4.246555222e-09f, -4.232520337e-09f, -4.218484095e-09f, -4.204446523e-09f, -4.190407647e-09f, -4.176367493e-09f, -4.162326087e-09f, -4.148283456e-09f, -4.134239625e-09f,
--4.120194621e-09f, -4.106148470e-09f, -4.092101197e-09f, -4.078052829e-09f, -4.064003392e-09f, -4.049952912e-09f, -4.035901415e-09f, -4.021848927e-09f, -4.007795474e-09f, -3.993741083e-09f,
--3.979685778e-09f, -3.965629586e-09f, -3.951572533e-09f, -3.937514645e-09f, -3.923455949e-09f, -3.909396469e-09f, -3.895336232e-09f, -3.881275263e-09f, -3.867213590e-09f, -3.853151237e-09f,
--3.839088231e-09f, -3.825024597e-09f, -3.810960362e-09f, -3.796895550e-09f, -3.782830189e-09f, -3.768764304e-09f, -3.754697921e-09f, -3.740631065e-09f, -3.726563762e-09f, -3.712496039e-09f,
--3.698427921e-09f, -3.684359434e-09f, -3.670290603e-09f, -3.656221455e-09f, -3.642152015e-09f, -3.628082309e-09f, -3.614012363e-09f, -3.599942202e-09f, -3.585871852e-09f, -3.571801339e-09f,
--3.557730689e-09f, -3.543659926e-09f, -3.529589078e-09f, -3.515518169e-09f, -3.501447226e-09f, -3.487376273e-09f, -3.473305337e-09f, -3.459234443e-09f, -3.445163617e-09f, -3.431092884e-09f,
--3.417022270e-09f, -3.402951800e-09f, -3.388881501e-09f, -3.374811397e-09f, -3.360741514e-09f, -3.346671878e-09f, -3.332602514e-09f, -3.318533448e-09f, -3.304464706e-09f, -3.290396312e-09f,
--3.276328292e-09f, -3.262260671e-09f, -3.248193476e-09f, -3.234126732e-09f, -3.220060463e-09f, -3.205994696e-09f, -3.191929455e-09f, -3.177864767e-09f, -3.163800656e-09f, -3.149737149e-09f,
--3.135674269e-09f, -3.121612043e-09f, -3.107550496e-09f, -3.093489654e-09f, -3.079429541e-09f, -3.065370183e-09f, -3.051311605e-09f, -3.037253832e-09f, -3.023196890e-09f, -3.009140804e-09f,
--2.995085600e-09f, -2.981031301e-09f, -2.966977934e-09f, -2.952925524e-09f, -2.938874096e-09f, -2.924823676e-09f, -2.910774287e-09f, -2.896725956e-09f, -2.882678707e-09f, -2.868632567e-09f,
--2.854587559e-09f, -2.840543708e-09f, -2.826501041e-09f, -2.812459582e-09f, -2.798419356e-09f, -2.784380388e-09f, -2.770342704e-09f, -2.756306327e-09f, -2.742271284e-09f, -2.728237598e-09f,
--2.714205296e-09f, -2.700174402e-09f, -2.686144942e-09f, -2.672116939e-09f, -2.658090419e-09f, -2.644065406e-09f, -2.630041927e-09f, -2.616020005e-09f, -2.601999666e-09f, -2.587980933e-09f,
--2.573963833e-09f, -2.559948390e-09f, -2.545934629e-09f, -2.531922574e-09f, -2.517912251e-09f, -2.503903684e-09f, -2.489896898e-09f, -2.475891917e-09f, -2.461888767e-09f, -2.447887471e-09f,
--2.433888056e-09f, -2.419890545e-09f, -2.405894963e-09f, -2.391901335e-09f, -2.377909685e-09f, -2.363920038e-09f, -2.349932419e-09f, -2.335946853e-09f, -2.321963363e-09f, -2.307981974e-09f,
--2.294002712e-09f, -2.280025600e-09f, -2.266050663e-09f, -2.252077926e-09f, -2.238107412e-09f, -2.224139147e-09f, -2.210173156e-09f, -2.196209461e-09f, -2.182248089e-09f, -2.168289063e-09f,
--2.154332407e-09f, -2.140378147e-09f, -2.126426306e-09f, -2.112476910e-09f, -2.098529981e-09f, -2.084585545e-09f, -2.070643625e-09f, -2.056704247e-09f, -2.042767435e-09f, -2.028833212e-09f,
--2.014901603e-09f, -2.000972632e-09f, -1.987046324e-09f, -1.973122702e-09f, -1.959201791e-09f, -1.945283616e-09f, -1.931368199e-09f, -1.917455566e-09f, -1.903545740e-09f, -1.889638746e-09f,
--1.875734608e-09f, -1.861833349e-09f, -1.847934994e-09f, -1.834039567e-09f, -1.820147092e-09f, -1.806257593e-09f, -1.792371094e-09f, -1.778487619e-09f, -1.764607192e-09f, -1.750729837e-09f,
--1.736855578e-09f, -1.722984438e-09f, -1.709116442e-09f, -1.695251614e-09f, -1.681389977e-09f, -1.667531556e-09f, -1.653676373e-09f, -1.639824454e-09f, -1.625975821e-09f, -1.612130499e-09f,
--1.598288512e-09f, -1.584449882e-09f, -1.570614635e-09f, -1.556782793e-09f, -1.542954380e-09f, -1.529129420e-09f, -1.515307937e-09f, -1.501489955e-09f, -1.487675496e-09f, -1.473864585e-09f,
--1.460057245e-09f, -1.446253500e-09f, -1.432453374e-09f, -1.418656890e-09f, -1.404864071e-09f, -1.391074941e-09f, -1.377289524e-09f, -1.363507842e-09f, -1.349729921e-09f, -1.335955782e-09f,
--1.322185450e-09f, -1.308418947e-09f, -1.294656298e-09f, -1.280897526e-09f, -1.267142654e-09f, -1.253391705e-09f, -1.239644702e-09f, -1.225901670e-09f, -1.212162631e-09f, -1.198427609e-09f,
--1.184696627e-09f, -1.170969708e-09f, -1.157246875e-09f, -1.143528152e-09f, -1.129813562e-09f, -1.116103127e-09f, -1.102396872e-09f, -1.088694819e-09f, -1.074996992e-09f, -1.061303413e-09f,
--1.047614105e-09f, -1.033929093e-09f, -1.020248398e-09f, -1.006572044e-09f, -9.929000534e-10f, -9.792324499e-10f, -9.655692561e-10f, -9.519104951e-10f, -9.382561898e-10f, -9.246063631e-10f,
--9.109610379e-10f, -8.973202372e-10f, -8.836839837e-10f, -8.700523003e-10f, -8.564252100e-10f, -8.428027354e-10f, -8.291848994e-10f, -8.155717248e-10f, -8.019632343e-10f, -7.883594507e-10f,
--7.747603967e-10f, -7.611660950e-10f, -7.475765683e-10f, -7.339918393e-10f, -7.204119305e-10f, -7.068368647e-10f, -6.932666645e-10f, -6.797013524e-10f, -6.661409510e-10f, -6.525854829e-10f,
--6.390349705e-10f, -6.254894366e-10f, -6.119489034e-10f, -5.984133935e-10f, -5.848829294e-10f, -5.713575335e-10f, -5.578372283e-10f, -5.443220360e-10f, -5.308119792e-10f, -5.173070801e-10f,
--5.038073611e-10f, -4.903128446e-10f, -4.768235528e-10f, -4.633395081e-10f, -4.498607326e-10f, -4.363872487e-10f, -4.229190786e-10f, -4.094562444e-10f, -3.959987684e-10f, -3.825466727e-10f,
--3.690999796e-10f, -3.556587110e-10f, -3.422228892e-10f, -3.287925362e-10f, -3.153676740e-10f, -3.019483248e-10f, -2.885345106e-10f, -2.751262533e-10f, -2.617235750e-10f, -2.483264976e-10f,
--2.349350431e-10f, -2.215492335e-10f, -2.081690905e-10f, -1.947946362e-10f, -1.814258924e-10f, -1.680628809e-10f, -1.547056236e-10f, -1.413541422e-10f, -1.280084586e-10f, -1.146685946e-10f,
--1.013345718e-10f, -8.800641207e-11f, -7.468413705e-11f, -6.136776843e-11f, -4.805732789e-11f, -3.475283708e-11f, -2.145431761e-11f, -8.161791107e-12f, 5.124720860e-12f, 1.840519672e-11f,
-3.167961493e-11f, 4.494795397e-11f, 5.821019233e-11f, 7.146630853e-11f, 8.471628111e-11f, 9.796008864e-11f, 1.111977097e-10f, 1.244291228e-10f, 1.376543068e-10f, 1.508732401e-10f,
-1.640859014e-10f, 1.772922695e-10f, 1.904923230e-10f, 2.036860407e-10f, 2.168734013e-10f, 2.300543836e-10f, 2.432289664e-10f, 2.563971285e-10f, 2.695588487e-10f, 2.827141058e-10f,
-2.958628789e-10f, 3.090051466e-10f, 3.221408880e-10f, 3.352700821e-10f, 3.483927077e-10f, 3.615087438e-10f, 3.746181695e-10f, 3.877209638e-10f, 4.008171057e-10f, 4.139065742e-10f,
-4.269893486e-10f, 4.400654078e-10f, 4.531347311e-10f, 4.661972975e-10f, 4.792530863e-10f, 4.923020767e-10f, 5.053442478e-10f, 5.183795789e-10f, 5.314080493e-10f, 5.444296382e-10f,
-5.574443251e-10f, 5.704520891e-10f, 5.834529096e-10f, 5.964467661e-10f, 6.094336379e-10f, 6.224135044e-10f, 6.353863450e-10f, 6.483521393e-10f, 6.613108667e-10f, 6.742625068e-10f,
-6.872070389e-10f, 7.001444428e-10f, 7.130746979e-10f, 7.259977838e-10f, 7.389136803e-10f, 7.518223668e-10f, 7.647238231e-10f, 7.776180288e-10f, 7.905049637e-10f, 8.033846075e-10f,
-8.162569399e-10f, 8.291219408e-10f, 8.419795898e-10f, 8.548298668e-10f, 8.676727517e-10f, 8.805082243e-10f, 8.933362645e-10f, 9.061568523e-10f, 9.189699674e-10f, 9.317755900e-10f,
-9.445737000e-10f, 9.573642773e-10f, 9.701473020e-10f, 9.829227541e-10f, 9.956906137e-10f, 1.008450861e-09f, 1.021203476e-09f, 1.033948439e-09f, 1.046685729e-09f, 1.059415328e-09f,
-1.072137216e-09f, 1.084851372e-09f, 1.097557776e-09f, 1.110256410e-09f, 1.122947254e-09f, 1.135630287e-09f, 1.148305490e-09f, 1.160972844e-09f, 1.173632328e-09f, 1.186283924e-09f,
-1.198927612e-09f, 1.211563371e-09f, 1.224191184e-09f, 1.236811029e-09f, 1.249422888e-09f, 1.262026742e-09f, 1.274622570e-09f, 1.287210353e-09f, 1.299790073e-09f, 1.312361709e-09f,
-1.324925243e-09f, 1.337480654e-09f, 1.350027925e-09f, 1.362567035e-09f, 1.375097965e-09f, 1.387620696e-09f, 1.400135209e-09f, 1.412641485e-09f, 1.425139504e-09f, 1.437629248e-09f,
-1.450110697e-09f, 1.462583833e-09f, 1.475048635e-09f, 1.487505086e-09f, 1.499953166e-09f, 1.512392856e-09f, 1.524824138e-09f, 1.537246992e-09f, 1.549661399e-09f, 1.562067341e-09f,
-1.574464799e-09f, 1.586853753e-09f, 1.599234186e-09f, 1.611606078e-09f, 1.623969411e-09f, 1.636324165e-09f, 1.648670323e-09f, 1.661007864e-09f, 1.673336772e-09f, 1.685657027e-09f,
-1.697968610e-09f, 1.710271503e-09f, 1.722565688e-09f, 1.734851145e-09f, 1.747127857e-09f, 1.759395805e-09f, 1.771654970e-09f, 1.783905333e-09f, 1.796146878e-09f, 1.808379584e-09f,
-1.820603434e-09f, 1.832818410e-09f, 1.845024492e-09f, 1.857221664e-09f, 1.869409906e-09f, 1.881589200e-09f, 1.893759528e-09f, 1.905920872e-09f, 1.918073214e-09f, 1.930216535e-09f,
-1.942350818e-09f, 1.954476044e-09f, 1.966592195e-09f, 1.978699254e-09f, 1.990797201e-09f, 2.002886020e-09f, 2.014965692e-09f, 2.027036199e-09f, 2.039097524e-09f, 2.051149648e-09f,
-2.063192554e-09f, 2.075226223e-09f, 2.087250638e-09f, 2.099265782e-09f, 2.111271635e-09f, 2.123268182e-09f, 2.135255403e-09f, 2.147233281e-09f, 2.159201799e-09f, 2.171160938e-09f,
-2.183110682e-09f, 2.195051013e-09f, 2.206981912e-09f, 2.218903363e-09f, 2.230815348e-09f, 2.242717850e-09f, 2.254610851e-09f, 2.266494333e-09f, 2.278368279e-09f, 2.290232672e-09f,
-2.302087495e-09f, 2.313932729e-09f, 2.325768359e-09f, 2.337594366e-09f, 2.349410733e-09f, 2.361217443e-09f, 2.373014478e-09f, 2.384801823e-09f, 2.396579458e-09f, 2.408347368e-09f,
-2.420105535e-09f, 2.431853942e-09f, 2.443592573e-09f, 2.455321409e-09f, 2.467040434e-09f, 2.478749631e-09f, 2.490448983e-09f, 2.502138473e-09f, 2.513818084e-09f, 2.525487800e-09f,
-2.537147602e-09f, 2.548797476e-09f, 2.560437404e-09f, 2.572067368e-09f, 2.583687353e-09f, 2.595297341e-09f, 2.606897316e-09f, 2.618487262e-09f, 2.630067160e-09f, 2.641636996e-09f,
-2.653196752e-09f, 2.664746412e-09f, 2.676285959e-09f, 2.687815377e-09f, 2.699334649e-09f, 2.710843759e-09f, 2.722342690e-09f, 2.733831426e-09f, 2.745309951e-09f, 2.756778248e-09f,
-2.768236300e-09f, 2.779684092e-09f, 2.791121607e-09f, 2.802548830e-09f, 2.813965743e-09f, 2.825372330e-09f, 2.836768576e-09f, 2.848154465e-09f, 2.859529979e-09f, 2.870895103e-09f,
-2.882249822e-09f, 2.893594118e-09f, 2.904927976e-09f, 2.916251380e-09f, 2.927564314e-09f, 2.938866762e-09f, 2.950158708e-09f, 2.961440137e-09f, 2.972711031e-09f, 2.983971377e-09f,
-2.995221157e-09f, 3.006460356e-09f, 3.017688958e-09f, 3.028906947e-09f, 3.040114309e-09f, 3.051311026e-09f, 3.062497084e-09f, 3.073672467e-09f, 3.084837159e-09f, 3.095991145e-09f,
-3.107134409e-09f, 3.118266936e-09f, 3.129388710e-09f, 3.140499715e-09f, 3.151599937e-09f, 3.162689360e-09f, 3.173767969e-09f, 3.184835747e-09f, 3.195892680e-09f, 3.206938753e-09f,
-3.217973951e-09f, 3.228998257e-09f, 3.240011657e-09f, 3.251014136e-09f, 3.262005678e-09f, 3.272986269e-09f, 3.283955893e-09f, 3.294914535e-09f, 3.305862181e-09f, 3.316798814e-09f,
-3.327724421e-09f, 3.338638986e-09f, 3.349542494e-09f, 3.360434930e-09f, 3.371316280e-09f, 3.382186528e-09f, 3.393045660e-09f, 3.403893661e-09f, 3.414730516e-09f, 3.425556211e-09f,
-3.436370730e-09f, 3.447174059e-09f, 3.457966183e-09f, 3.468747089e-09f, 3.479516760e-09f, 3.490275183e-09f, 3.501022342e-09f, 3.511758224e-09f, 3.522482814e-09f, 3.533196097e-09f,
-3.543898060e-09f, 3.554588687e-09f, 3.565267964e-09f, 3.575935876e-09f, 3.586592411e-09f, 3.597237552e-09f, 3.607871286e-09f, 3.618493599e-09f, 3.629104476e-09f, 3.639703903e-09f,
-3.650291867e-09f, 3.660868352e-09f, 3.671433345e-09f, 3.681986831e-09f, 3.692528798e-09f, 3.703059229e-09f, 3.713578113e-09f, 3.724085433e-09f, 3.734581178e-09f, 3.745065332e-09f,
-3.755537882e-09f, 3.765998814e-09f, 3.776448114e-09f, 3.786885768e-09f, 3.797311762e-09f, 3.807726084e-09f, 3.818128718e-09f, 3.828519652e-09f, 3.838898871e-09f, 3.849266363e-09f,
-3.859622113e-09f, 3.869966107e-09f, 3.880298333e-09f, 3.890618776e-09f, 3.900927424e-09f, 3.911224262e-09f, 3.921509278e-09f, 3.931782457e-09f, 3.942043787e-09f, 3.952293254e-09f,
-3.962530845e-09f, 3.972756546e-09f, 3.982970344e-09f, 3.993172227e-09f, 4.003362180e-09f, 4.013540190e-09f, 4.023706245e-09f, 4.033860331e-09f, 4.044002435e-09f, 4.054132543e-09f,
-4.064250644e-09f, 4.074356724e-09f, 4.084450770e-09f, 4.094532768e-09f, 4.104602707e-09f, 4.114660573e-09f, 4.124706352e-09f, 4.134740034e-09f, 4.144761603e-09f, 4.154771049e-09f,
-4.164768357e-09f, 4.174753515e-09f, 4.184726511e-09f, 4.194687332e-09f, 4.204635965e-09f, 4.214572397e-09f, 4.224496616e-09f, 4.234408610e-09f, 4.244308365e-09f, 4.254195869e-09f,
-4.264071111e-09f, 4.273934076e-09f, 4.283784754e-09f, 4.293623130e-09f, 4.303449194e-09f, 4.313262933e-09f, 4.323064334e-09f, 4.332853385e-09f, 4.342630074e-09f, 4.352394389e-09f,
-4.362146317e-09f, 4.371885847e-09f, 4.381612965e-09f, 4.391327661e-09f, 4.401029921e-09f, 4.410719734e-09f, 4.420397088e-09f, 4.430061971e-09f, 4.439714371e-09f, 4.449354275e-09f,
-4.458981672e-09f, 4.468596551e-09f, 4.478198899e-09f, 4.487788704e-09f, 4.497365954e-09f, 4.506930639e-09f, 4.516482745e-09f, 4.526022262e-09f, 4.535549177e-09f, 4.545063480e-09f,
-4.554565158e-09f, 4.564054199e-09f, 4.573530593e-09f, 4.582994327e-09f, 4.592445390e-09f, 4.601883771e-09f, 4.611309459e-09f, 4.620722440e-09f, 4.630122706e-09f, 4.639510243e-09f,
-4.648885040e-09f, 4.658247088e-09f, 4.667596373e-09f, 4.676932884e-09f, 4.686256612e-09f, 4.695567543e-09f, 4.704865668e-09f, 4.714150975e-09f, 4.723423453e-09f, 4.732683090e-09f,
-4.741929876e-09f, 4.751163800e-09f, 4.760384851e-09f, 4.769593018e-09f, 4.778788289e-09f, 4.787970654e-09f, 4.797140102e-09f, 4.806296623e-09f, 4.815440204e-09f, 4.824570837e-09f,
-4.833688509e-09f, 4.842793210e-09f, 4.851884930e-09f, 4.860963657e-09f, 4.870029381e-09f, 4.879082091e-09f, 4.888121778e-09f, 4.897148430e-09f, 4.906162036e-09f, 4.915162586e-09f,
-4.924150071e-09f, 4.933124478e-09f, 4.942085799e-09f, 4.951034022e-09f, 4.959969137e-09f, 4.968891134e-09f, 4.977800002e-09f, 4.986695731e-09f, 4.995578312e-09f, 5.004447733e-09f,
-5.013303985e-09f, 5.022147057e-09f, 5.030976940e-09f, 5.039793622e-09f, 5.048597095e-09f, 5.057387348e-09f, 5.066164371e-09f, 5.074928154e-09f, 5.083678687e-09f, 5.092415961e-09f,
-5.101139965e-09f, 5.109850689e-09f, 5.118548124e-09f, 5.127232260e-09f, 5.135903086e-09f, 5.144560594e-09f, 5.153204774e-09f, 5.161835615e-09f, 5.170453109e-09f, 5.179057246e-09f,
-5.187648015e-09f, 5.196225408e-09f, 5.204789415e-09f, 5.213340026e-09f, 5.221877232e-09f, 5.230401023e-09f, 5.238911390e-09f, 5.247408325e-09f, 5.255891816e-09f, 5.264361855e-09f,
-5.272818433e-09f, 5.281261540e-09f, 5.289691167e-09f, 5.298107305e-09f, 5.306509945e-09f, 5.314899077e-09f, 5.323274693e-09f, 5.331636783e-09f, 5.339985338e-09f, 5.348320349e-09f,
-5.356641807e-09f, 5.364949704e-09f, 5.373244030e-09f, 5.381524776e-09f, 5.389791933e-09f, 5.398045493e-09f, 5.406285446e-09f, 5.414511785e-09f, 5.422724499e-09f, 5.430923581e-09f,
-5.439109021e-09f, 5.447280812e-09f, 5.455438943e-09f, 5.463583407e-09f, 5.471714195e-09f, 5.479831299e-09f, 5.487934709e-09f, 5.496024418e-09f, 5.504100417e-09f, 5.512162697e-09f,
-5.520211250e-09f, 5.528246068e-09f, 5.536267142e-09f, 5.544274464e-09f, 5.552268026e-09f, 5.560247818e-09f, 5.568213834e-09f, 5.576166065e-09f, 5.584104502e-09f, 5.592029138e-09f,
-5.599939964e-09f, 5.607836973e-09f, 5.615720155e-09f, 5.623589504e-09f, 5.631445011e-09f, 5.639286668e-09f, 5.647114467e-09f, 5.654928400e-09f, 5.662728460e-09f, 5.670514638e-09f,
-5.678286927e-09f, 5.686045319e-09f, 5.693789805e-09f, 5.701520379e-09f, 5.709237033e-09f, 5.716939758e-09f, 5.724628548e-09f, 5.732303394e-09f, 5.739964289e-09f, 5.747611226e-09f,
-5.755244197e-09f, 5.762863194e-09f, 5.770468209e-09f, 5.778059237e-09f, 5.785636268e-09f, 5.793199295e-09f, 5.800748312e-09f, 5.808283311e-09f, 5.815804285e-09f, 5.823311226e-09f,
-5.830804126e-09f, 5.838282980e-09f, 5.845747779e-09f, 5.853198517e-09f, 5.860635186e-09f, 5.868057780e-09f, 5.875466290e-09f, 5.882860711e-09f, 5.890241035e-09f, 5.897607255e-09f,
-5.904959364e-09f, 5.912297355e-09f, 5.919621222e-09f, 5.926930958e-09f, 5.934226555e-09f, 5.941508006e-09f, 5.948775306e-09f, 5.956028447e-09f, 5.963267423e-09f, 5.970492227e-09f,
-5.977702852e-09f, 5.984899292e-09f, 5.992081539e-09f, 5.999249589e-09f, 6.006403433e-09f, 6.013543065e-09f, 6.020668480e-09f, 6.027779669e-09f, 6.034876628e-09f, 6.041959350e-09f,
-6.049027828e-09f, 6.056082056e-09f, 6.063122027e-09f, 6.070147736e-09f, 6.077159176e-09f, 6.084156341e-09f, 6.091139225e-09f, 6.098107821e-09f, 6.105062124e-09f, 6.112002127e-09f,
-6.118927824e-09f, 6.125839210e-09f, 6.132736278e-09f, 6.139619022e-09f, 6.146487436e-09f, 6.153341514e-09f, 6.160181252e-09f, 6.167006641e-09f, 6.173817678e-09f, 6.180614355e-09f,
-6.187396668e-09f, 6.194164610e-09f, 6.200918176e-09f, 6.207657360e-09f, 6.214382156e-09f, 6.221092559e-09f, 6.227788563e-09f, 6.234470163e-09f, 6.241137353e-09f, 6.247790128e-09f,
-6.254428481e-09f, 6.261052408e-09f, 6.267661904e-09f, 6.274256962e-09f, 6.280837577e-09f, 6.287403745e-09f, 6.293955459e-09f, 6.300492715e-09f, 6.307015508e-09f, 6.313523831e-09f,
-6.320017680e-09f, 6.326497050e-09f, 6.332961935e-09f, 6.339412332e-09f, 6.345848233e-09f, 6.352269635e-09f, 6.358676532e-09f, 6.365068920e-09f, 6.371446793e-09f, 6.377810146e-09f,
-6.384158975e-09f, 6.390493275e-09f, 6.396813041e-09f, 6.403118268e-09f, 6.409408952e-09f, 6.415685087e-09f, 6.421946668e-09f, 6.428193693e-09f, 6.434426154e-09f, 6.440644049e-09f,
-6.446847372e-09f, 6.453036118e-09f, 6.459210284e-09f, 6.465369864e-09f, 6.471514855e-09f, 6.477645252e-09f, 6.483761050e-09f, 6.489862244e-09f, 6.495948832e-09f, 6.502020807e-09f,
-6.508078167e-09f, 6.514120906e-09f, 6.520149021e-09f, 6.526162506e-09f, 6.532161359e-09f, 6.538145575e-09f, 6.544115149e-09f, 6.550070078e-09f, 6.556010358e-09f, 6.561935984e-09f,
-6.567846952e-09f, 6.573743259e-09f, 6.579624901e-09f, 6.585491873e-09f, 6.591344172e-09f, 6.597181794e-09f, 6.603004735e-09f, 6.608812991e-09f, 6.614606558e-09f, 6.620385433e-09f,
-6.626149612e-09f, 6.631899092e-09f, 6.637633868e-09f, 6.643353936e-09f, 6.649059295e-09f, 6.654749939e-09f, 6.660425865e-09f, 6.666087070e-09f, 6.671733550e-09f, 6.677365302e-09f,
-6.682982323e-09f, 6.688584608e-09f, 6.694172155e-09f, 6.699744960e-09f, 6.705303020e-09f, 6.710846332e-09f, 6.716374892e-09f, 6.721888697e-09f, 6.727387744e-09f, 6.732872030e-09f,
-6.738341552e-09f, 6.743796306e-09f, 6.749236289e-09f, 6.754661499e-09f, 6.760071933e-09f, 6.765467586e-09f, 6.770848457e-09f, 6.776214543e-09f, 6.781565840e-09f, 6.786902346e-09f,
-6.792224058e-09f, 6.797530972e-09f, 6.802823087e-09f, 6.808100400e-09f, 6.813362907e-09f, 6.818610606e-09f, 6.823843495e-09f, 6.829061570e-09f, 6.834264829e-09f, 6.839453270e-09f,
-6.844626890e-09f, 6.849785686e-09f, 6.854929656e-09f, 6.860058798e-09f, 6.865173109e-09f, 6.870272586e-09f, 6.875357227e-09f, 6.880427030e-09f, 6.885481993e-09f, 6.890522113e-09f,
-6.895547387e-09f, 6.900557815e-09f, 6.905553393e-09f, 6.910534119e-09f, 6.915499992e-09f, 6.920451008e-09f, 6.925387166e-09f, 6.930308464e-09f, 6.935214900e-09f, 6.940106472e-09f,
-6.944983178e-09f, 6.949845015e-09f, 6.954691982e-09f, 6.959524077e-09f, 6.964341299e-09f, 6.969143645e-09f, 6.973931113e-09f, 6.978703702e-09f, 6.983461410e-09f, 6.988204235e-09f,
-6.992932176e-09f, 6.997645230e-09f, 7.002343397e-09f, 7.007026674e-09f, 7.011695061e-09f, 7.016348555e-09f, 7.020987155e-09f, 7.025610859e-09f, 7.030219667e-09f, 7.034813575e-09f,
-7.039392585e-09f, 7.043956692e-09f, 7.048505898e-09f, 7.053040199e-09f, 7.057559595e-09f, 7.062064085e-09f, 7.066553666e-09f, 7.071028339e-09f, 7.075488102e-09f, 7.079932954e-09f,
-7.084362893e-09f, 7.088777918e-09f, 7.093178029e-09f, 7.097563225e-09f, 7.101933504e-09f, 7.106288865e-09f, 7.110629308e-09f, 7.114954831e-09f, 7.119265434e-09f, 7.123561115e-09f,
-7.127841874e-09f, 7.132107711e-09f, 7.136358624e-09f, 7.140594612e-09f, 7.144815675e-09f, 7.149021812e-09f, 7.153213023e-09f, 7.157389306e-09f, 7.161550662e-09f, 7.165697089e-09f,
-7.169828587e-09f, 7.173945156e-09f, 7.178046795e-09f, 7.182133503e-09f, 7.186205280e-09f, 7.190262126e-09f, 7.194304041e-09f, 7.198331023e-09f, 7.202343072e-09f, 7.206340189e-09f,
-7.210322373e-09f, 7.214289624e-09f, 7.218241941e-09f, 7.222179324e-09f, 7.226101774e-09f, 7.230009289e-09f, 7.233901870e-09f, 7.237779518e-09f, 7.241642231e-09f, 7.245490009e-09f,
-7.249322854e-09f, 7.253140764e-09f, 7.256943740e-09f, 7.260731782e-09f, 7.264504890e-09f, 7.268263064e-09f, 7.272006304e-09f, 7.275734611e-09f, 7.279447985e-09f, 7.283146426e-09f,
-7.286829934e-09f, 7.290498509e-09f, 7.294152153e-09f, 7.297790865e-09f, 7.301414645e-09f, 7.305023495e-09f, 7.308617414e-09f, 7.312196403e-09f, 7.315760463e-09f, 7.319309594e-09f,
-7.322843796e-09f, 7.326363071e-09f, 7.329867418e-09f, 7.333356839e-09f, 7.336831334e-09f, 7.340290904e-09f, 7.343735549e-09f, 7.347165271e-09f, 7.350580070e-09f, 7.353979946e-09f,
-7.357364902e-09f, 7.360734937e-09f, 7.364090052e-09f, 7.367430249e-09f, 7.370755528e-09f, 7.374065891e-09f, 7.377361338e-09f, 7.380641870e-09f, 7.383907488e-09f, 7.387158195e-09f,
-7.390393989e-09f, 7.393614874e-09f, 7.396820849e-09f, 7.400011916e-09f, 7.403188077e-09f, 7.406349332e-09f, 7.409495683e-09f, 7.412627131e-09f, 7.415743678e-09f, 7.418845324e-09f,
-7.421932072e-09f, 7.425003922e-09f, 7.428060877e-09f, 7.431102936e-09f, 7.434130103e-09f, 7.437142379e-09f, 7.440139764e-09f, 7.443122261e-09f, 7.446089871e-09f, 7.449042596e-09f,
-7.451980438e-09f, 7.454903398e-09f, 7.457811478e-09f, 7.460704679e-09f, 7.463583004e-09f, 7.466446454e-09f, 7.469295032e-09f, 7.472128738e-09f, 7.474947574e-09f, 7.477751544e-09f,
-7.480540648e-09f, 7.483314888e-09f, 7.486074267e-09f, 7.488818787e-09f, 7.491548449e-09f, 7.494263256e-09f, 7.496963209e-09f, 7.499648311e-09f, 7.502318564e-09f, 7.504973971e-09f,
-7.507614532e-09f, 7.510240251e-09f, 7.512851130e-09f, 7.515447171e-09f, 7.518028376e-09f, 7.520594748e-09f, 7.523146290e-09f, 7.525683002e-09f, 7.528204888e-09f, 7.530711951e-09f,
-7.533204192e-09f, 7.535681615e-09f, 7.538144221e-09f, 7.540592014e-09f, 7.543024995e-09f, 7.545443168e-09f, 7.547846535e-09f, 7.550235099e-09f, 7.552608862e-09f, 7.554967827e-09f,
-7.557311997e-09f, 7.559641375e-09f, 7.561955962e-09f, 7.564255764e-09f, 7.566540781e-09f, 7.568811017e-09f, 7.571066474e-09f, 7.573307157e-09f, 7.575533067e-09f, 7.577744207e-09f,
-7.579940581e-09f, 7.582122192e-09f, 7.584289042e-09f, 7.586441135e-09f, 7.588578474e-09f, 7.590701062e-09f, 7.592808901e-09f, 7.594901996e-09f, 7.596980350e-09f, 7.599043965e-09f,
-7.601092845e-09f, 7.603126993e-09f, 7.605146412e-09f, 7.607151107e-09f, 7.609141080e-09f, 7.611116334e-09f, 7.613076873e-09f, 7.615022701e-09f, 7.616953821e-09f, 7.618870236e-09f,
-7.620771949e-09f, 7.622658966e-09f, 7.624531288e-09f, 7.626388920e-09f, 7.628231865e-09f, 7.630060127e-09f, 7.631873710e-09f, 7.633672616e-09f, 7.635456851e-09f, 7.637226417e-09f,
-7.638981319e-09f, 7.640721560e-09f, 7.642447144e-09f, 7.644158075e-09f, 7.645854357e-09f, 7.647535994e-09f, 7.649202989e-09f, 7.650855347e-09f, 7.652493072e-09f, 7.654116167e-09f,
-7.655724636e-09f, 7.657318485e-09f, 7.658897716e-09f, 7.660462333e-09f, 7.662012342e-09f, 7.663547746e-09f, 7.665068550e-09f, 7.666574756e-09f, 7.668066371e-09f, 7.669543398e-09f,
-7.671005841e-09f, 7.672453704e-09f, 7.673886993e-09f, 7.675305711e-09f, 7.676709862e-09f, 7.678099452e-09f, 7.679474484e-09f, 7.680834963e-09f, 7.682180894e-09f, 7.683512281e-09f,
-7.684829128e-09f, 7.686131440e-09f, 7.687419222e-09f, 7.688692479e-09f, 7.689951214e-09f, 7.691195433e-09f, 7.692425140e-09f, 7.693640340e-09f, 7.694841038e-09f, 7.696027239e-09f,
-7.697198947e-09f, 7.698356166e-09f, 7.699498903e-09f, 7.700627162e-09f, 7.701740947e-09f, 7.702840264e-09f, 7.703925118e-09f, 7.704995513e-09f, 7.706051454e-09f, 7.707092947e-09f,
-7.708119997e-09f, 7.709132608e-09f, 7.710130786e-09f, 7.711114536e-09f, 7.712083863e-09f, 7.713038771e-09f, 7.713979267e-09f, 7.714905356e-09f, 7.715817042e-09f, 7.716714331e-09f,
-7.717597229e-09f, 7.718465740e-09f, 7.719319870e-09f, 7.720159625e-09f, 7.720985009e-09f, 7.721796028e-09f, 7.722592687e-09f, 7.723374993e-09f, 7.724142949e-09f, 7.724896563e-09f,
-7.725635840e-09f, 7.726360784e-09f, 7.727071402e-09f, 7.727767699e-09f, 7.728449681e-09f, 7.729117353e-09f, 7.729770722e-09f, 7.730409792e-09f, 7.731034570e-09f, 7.731645061e-09f,
-7.732241271e-09f, 7.732823206e-09f, 7.733390872e-09f, 7.733944274e-09f, 7.734483419e-09f, 7.735008312e-09f, 7.735518959e-09f, 7.736015367e-09f, 7.736497540e-09f, 7.736965486e-09f,
-7.737419209e-09f, 7.737858717e-09f, 7.738284015e-09f, 7.738695109e-09f, 7.739092006e-09f, 7.739474711e-09f, 7.739843231e-09f, 7.740197572e-09f, 7.740537739e-09f, 7.740863740e-09f,
-7.741175581e-09f, 7.741473267e-09f, 7.741756805e-09f, 7.742026202e-09f, 7.742281463e-09f, 7.742522596e-09f, 7.742749606e-09f, 7.742962500e-09f, 7.743161284e-09f, 7.743345966e-09f,
-7.743516550e-09f, 7.743673044e-09f, 7.743815455e-09f, 7.743943788e-09f, 7.744058051e-09f, 7.744158250e-09f, 7.744244392e-09f, 7.744316483e-09f, 7.744374530e-09f, 7.744418540e-09f,
-7.744448519e-09f, 7.744464475e-09f, 7.744466413e-09f, 7.744454341e-09f, 7.744428266e-09f, 7.744388193e-09f, 7.744334132e-09f, 7.744266087e-09f, 7.744184066e-09f, 7.744088076e-09f,
-7.743978124e-09f, 7.743854217e-09f, 7.743716362e-09f, 7.743564565e-09f, 7.743398835e-09f, 7.743219177e-09f, 7.743025600e-09f, 7.742818109e-09f, 7.742596713e-09f, 7.742361419e-09f,
-7.742112233e-09f, 7.741849163e-09f, 7.741572215e-09f, 7.741281399e-09f, 7.740976719e-09f, 7.740658185e-09f, 7.740325802e-09f, 7.739979580e-09f, 7.739619524e-09f, 7.739245642e-09f,
-7.738857942e-09f, 7.738456431e-09f, 7.738041116e-09f, 7.737612006e-09f, 7.737169107e-09f, 7.736712427e-09f, 7.736241973e-09f, 7.735757754e-09f, 7.735259776e-09f, 7.734748047e-09f,
-7.734222576e-09f, 7.733683369e-09f, 7.733130434e-09f, 7.732563779e-09f, 7.731983412e-09f, 7.731389340e-09f, 7.730781571e-09f, 7.730160114e-09f, 7.729524975e-09f, 7.728876162e-09f,
-7.728213684e-09f, 7.727537548e-09f, 7.726847762e-09f, 7.726144335e-09f, 7.725427273e-09f, 7.724696585e-09f, 7.723952280e-09f, 7.723194364e-09f, 7.722422846e-09f, 7.721637735e-09f,
-7.720839037e-09f, 7.720026762e-09f, 7.719200916e-09f, 7.718361510e-09f, 7.717508549e-09f, 7.716642044e-09f, 7.715762002e-09f, 7.714868430e-09f, 7.713961339e-09f, 7.713040734e-09f,
-7.712106626e-09f, 7.711159022e-09f, 7.710197931e-09f, 7.709223360e-09f, 7.708235319e-09f, 7.707233816e-09f, 7.706218858e-09f, 7.705190456e-09f, 7.704148616e-09f, 7.703093348e-09f,
-7.702024659e-09f, 7.700942560e-09f, 7.699847057e-09f, 7.698738160e-09f, 7.697615877e-09f, 7.696480216e-09f, 7.695331187e-09f, 7.694168799e-09f, 7.692993059e-09f, 7.691803976e-09f,
-7.690601559e-09f, 7.689385818e-09f, 7.688156760e-09f, 7.686914394e-09f, 7.685658729e-09f, 7.684389775e-09f, 7.683107539e-09f, 7.681812031e-09f, 7.680503259e-09f, 7.679181233e-09f,
-7.677845961e-09f, 7.676497453e-09f, 7.675135716e-09f, 7.673760761e-09f, 7.672372597e-09f, 7.670971231e-09f, 7.669556674e-09f, 7.668128934e-09f, 7.666688020e-09f, 7.665233942e-09f,
-7.663766709e-09f, 7.662286329e-09f, 7.660792813e-09f, 7.659286168e-09f, 7.657766405e-09f, 7.656233533e-09f, 7.654687560e-09f, 7.653128497e-09f, 7.651556351e-09f, 7.649971134e-09f,
-7.648372853e-09f, 7.646761519e-09f, 7.645137141e-09f, 7.643499728e-09f, 7.641849289e-09f, 7.640185834e-09f, 7.638509372e-09f, 7.636819914e-09f, 7.635117468e-09f, 7.633402043e-09f,
-7.631673650e-09f, 7.629932298e-09f, 7.628177996e-09f, 7.626410755e-09f, 7.624630583e-09f, 7.622837490e-09f, 7.621031487e-09f, 7.619212582e-09f, 7.617380785e-09f, 7.615536106e-09f,
-7.613678555e-09f, 7.611808142e-09f, 7.609924876e-09f, 7.608028767e-09f, 7.606119824e-09f, 7.604198058e-09f, 7.602263479e-09f, 7.600316096e-09f, 7.598355920e-09f, 7.596382959e-09f,
-7.594397225e-09f, 7.592398726e-09f, 7.590387474e-09f, 7.588363477e-09f, 7.586326746e-09f, 7.584277292e-09f, 7.582215123e-09f, 7.580140250e-09f, 7.578052684e-09f, 7.575952433e-09f,
-7.573839509e-09f, 7.571713922e-09f, 7.569575680e-09f, 7.567424796e-09f, 7.565261279e-09f, 7.563085139e-09f, 7.560896386e-09f, 7.558695030e-09f, 7.556481083e-09f, 7.554254554e-09f,
-7.552015453e-09f, 7.549763791e-09f, 7.547499579e-09f, 7.545222825e-09f, 7.542933542e-09f, 7.540631739e-09f, 7.538317426e-09f, 7.535990615e-09f, 7.533651315e-09f, 7.531299537e-09f,
-7.528935292e-09f, 7.526558589e-09f, 7.524169441e-09f, 7.521767856e-09f, 7.519353846e-09f, 7.516927421e-09f, 7.514488592e-09f, 7.512037369e-09f, 7.509573764e-09f, 7.507097786e-09f,
-7.504609447e-09f, 7.502108756e-09f, 7.499595726e-09f, 7.497070366e-09f, 7.494532687e-09f, 7.491982700e-09f, 7.489420417e-09f, 7.486845846e-09f, 7.484259000e-09f, 7.481659890e-09f,
-7.479048525e-09f, 7.476424918e-09f, 7.473789078e-09f, 7.471141017e-09f, 7.468480746e-09f, 7.465808275e-09f, 7.463123616e-09f, 7.460426780e-09f, 7.457717777e-09f, 7.454996619e-09f,
-7.452263316e-09f, 7.449517880e-09f, 7.446760322e-09f, 7.443990653e-09f, 7.441208883e-09f, 7.438415025e-09f, 7.435609088e-09f, 7.432791085e-09f, 7.429961027e-09f, 7.427118924e-09f,
-7.424264788e-09f, 7.421398630e-09f, 7.418520461e-09f, 7.415630293e-09f, 7.412728137e-09f, 7.409814004e-09f, 7.406887905e-09f, 7.403949853e-09f, 7.400999857e-09f, 7.398037930e-09f,
-7.395064083e-09f, 7.392078327e-09f, 7.389080673e-09f, 7.386071134e-09f, 7.383049720e-09f, 7.380016444e-09f, 7.376971316e-09f, 7.373914348e-09f, 7.370845551e-09f, 7.367764937e-09f,
-7.364672518e-09f, 7.361568305e-09f, 7.358452310e-09f, 7.355324544e-09f, 7.352185019e-09f, 7.349033747e-09f, 7.345870739e-09f, 7.342696006e-09f, 7.339509561e-09f, 7.336311416e-09f,
-7.333101581e-09f, 7.329880069e-09f, 7.326646892e-09f, 7.323402060e-09f, 7.320145587e-09f, 7.316877483e-09f, 7.313597761e-09f, 7.310306433e-09f, 7.307003509e-09f, 7.303689003e-09f,
-7.300362926e-09f, 7.297025289e-09f, 7.293676105e-09f, 7.290315386e-09f, 7.286943144e-09f, 7.283559390e-09f, 7.280164137e-09f, 7.276757396e-09f, 7.273339180e-09f, 7.269909500e-09f,
-7.266468370e-09f, 7.263015799e-09f, 7.259551802e-09f, 7.256076389e-09f, 7.252589573e-09f, 7.249091366e-09f, 7.245581780e-09f, 7.242060828e-09f, 7.238528521e-09f, 7.234984872e-09f,
-7.231429892e-09f, 7.227863595e-09f, 7.224285991e-09f, 7.220697095e-09f, 7.217096917e-09f, 7.213485470e-09f, 7.209862766e-09f, 7.206228818e-09f, 7.202583638e-09f, 7.198927238e-09f,
-7.195259630e-09f, 7.191580828e-09f, 7.187890843e-09f, 7.184189688e-09f, 7.180477375e-09f, 7.176753916e-09f, 7.173019324e-09f, 7.169273612e-09f, 7.165516792e-09f, 7.161748876e-09f,
-7.157969877e-09f, 7.154179807e-09f, 7.150378680e-09f, 7.146566506e-09f, 7.142743300e-09f, 7.138909074e-09f, 7.135063839e-09f, 7.131207610e-09f, 7.127340397e-09f, 7.123462215e-09f,
-7.119573076e-09f, 7.115672992e-09f, 7.111761975e-09f, 7.107840040e-09f, 7.103907198e-09f, 7.099963462e-09f, 7.096008845e-09f, 7.092043359e-09f, 7.088067018e-09f, 7.084079834e-09f,
-7.080081820e-09f, 7.076072988e-09f, 7.072053353e-09f, 7.068022925e-09f, 7.063981719e-09f, 7.059929747e-09f, 7.055867021e-09f, 7.051793556e-09f, 7.047709363e-09f, 7.043614456e-09f,
-7.039508848e-09f, 7.035392551e-09f, 7.031265579e-09f, 7.027127944e-09f, 7.022979660e-09f, 7.018820739e-09f, 7.014651194e-09f, 7.010471039e-09f, 7.006280287e-09f, 7.002078950e-09f,
-6.997867042e-09f, 6.993644575e-09f, 6.989411564e-09f, 6.985168020e-09f, 6.980913958e-09f, 6.976649389e-09f, 6.972374328e-09f, 6.968088788e-09f, 6.963792781e-09f, 6.959486321e-09f,
-6.955169422e-09f, 6.950842095e-09f, 6.946504356e-09f, 6.942156216e-09f, 6.937797689e-09f, 6.933428788e-09f, 6.929049527e-09f, 6.924659919e-09f, 6.920259977e-09f, 6.915849715e-09f,
-6.911429146e-09f, 6.906998282e-09f, 6.902557139e-09f, 6.898105728e-09f, 6.893644064e-09f, 6.889172160e-09f, 6.884690028e-09f, 6.880197684e-09f, 6.875695139e-09f, 6.871182408e-09f,
-6.866659504e-09f, 6.862126440e-09f, 6.857583230e-09f, 6.853029888e-09f, 6.848466426e-09f, 6.843892859e-09f, 6.839309201e-09f, 6.834715463e-09f, 6.830111661e-09f, 6.825497808e-09f,
-6.820873917e-09f, 6.816240001e-09f, 6.811596076e-09f, 6.806942153e-09f, 6.802278247e-09f, 6.797604372e-09f, 6.792920541e-09f, 6.788226768e-09f, 6.783523066e-09f, 6.778809449e-09f,
-6.774085932e-09f, 6.769352526e-09f, 6.764609248e-09f, 6.759856109e-09f, 6.755093124e-09f, 6.750320307e-09f, 6.745537672e-09f, 6.740745231e-09f, 6.735943000e-09f, 6.731130992e-09f,
-6.726309220e-09f, 6.721477699e-09f, 6.716636442e-09f, 6.711785463e-09f, 6.706924777e-09f, 6.702054397e-09f, 6.697174337e-09f, 6.692284610e-09f, 6.687385231e-09f, 6.682476214e-09f,
-6.677557573e-09f, 6.672629322e-09f, 6.667691474e-09f, 6.662744043e-09f, 6.657787044e-09f, 6.652820491e-09f, 6.647844398e-09f, 6.642858778e-09f, 6.637863645e-09f, 6.632859015e-09f,
-6.627844900e-09f, 6.622821315e-09f, 6.617788275e-09f, 6.612745792e-09f, 6.607693881e-09f, 6.602632557e-09f, 6.597561833e-09f, 6.592481723e-09f, 6.587392243e-09f, 6.582293405e-09f,
-6.577185224e-09f, 6.572067714e-09f, 6.566940890e-09f, 6.561804766e-09f, 6.556659355e-09f, 6.551504672e-09f, 6.546340732e-09f, 6.541167548e-09f, 6.535985135e-09f, 6.530793507e-09f,
-6.525592678e-09f, 6.520382663e-09f, 6.515163476e-09f, 6.509935131e-09f, 6.504697643e-09f, 6.499451026e-09f, 6.494195293e-09f, 6.488930461e-09f, 6.483656542e-09f, 6.478373552e-09f,
-6.473081504e-09f, 6.467780414e-09f, 6.462470295e-09f, 6.457151162e-09f, 6.451823029e-09f, 6.446485911e-09f, 6.441139822e-09f, 6.435784777e-09f, 6.430420790e-09f, 6.425047876e-09f,
-6.419666048e-09f, 6.414275322e-09f, 6.408875713e-09f, 6.403467234e-09f, 6.398049899e-09f, 6.392623725e-09f, 6.387188725e-09f, 6.381744913e-09f, 6.376292305e-09f, 6.370830915e-09f,
-6.365360757e-09f, 6.359881846e-09f, 6.354394196e-09f, 6.348897823e-09f, 6.343392741e-09f, 6.337878964e-09f, 6.332356507e-09f, 6.326825385e-09f, 6.321285613e-09f, 6.315737204e-09f,
-6.310180174e-09f, 6.304614538e-09f, 6.299040310e-09f, 6.293457504e-09f, 6.287866136e-09f, 6.282266220e-09f, 6.276657772e-09f, 6.271040804e-09f, 6.265415334e-09f, 6.259781374e-09f,
-6.254138941e-09f, 6.248488048e-09f, 6.242828711e-09f, 6.237160944e-09f, 6.231484762e-09f, 6.225800180e-09f, 6.220107212e-09f, 6.214405875e-09f, 6.208696181e-09f, 6.202978147e-09f,
-6.197251787e-09f, 6.191517116e-09f, 6.185774148e-09f, 6.180022899e-09f, 6.174263384e-09f, 6.168495617e-09f, 6.162719614e-09f, 6.156935389e-09f, 6.151142957e-09f, 6.145342333e-09f,
-6.139533532e-09f, 6.133716569e-09f, 6.127891458e-09f, 6.122058216e-09f, 6.116216857e-09f, 6.110367395e-09f, 6.104509846e-09f, 6.098644225e-09f, 6.092770547e-09f, 6.086888826e-09f,
-6.080999079e-09f, 6.075101319e-09f, 6.069195562e-09f, 6.063281822e-09f, 6.057360116e-09f, 6.051430458e-09f, 6.045492862e-09f, 6.039547345e-09f, 6.033593921e-09f, 6.027632606e-09f,
-6.021663413e-09f, 6.015686359e-09f, 6.009701459e-09f, 6.003708727e-09f, 5.997708179e-09f, 5.991699830e-09f, 5.985683695e-09f, 5.979659790e-09f, 5.973628128e-09f, 5.967588727e-09f,
-5.961541599e-09f, 5.955486762e-09f, 5.949424230e-09f, 5.943354018e-09f, 5.937276141e-09f, 5.931190615e-09f, 5.925097454e-09f, 5.918996675e-09f, 5.912888292e-09f, 5.906772321e-09f,
-5.900648776e-09f, 5.894517673e-09f, 5.888379027e-09f, 5.882232854e-09f, 5.876079168e-09f, 5.869917986e-09f, 5.863749322e-09f, 5.857573191e-09f, 5.851389609e-09f, 5.845198591e-09f,
-5.839000153e-09f, 5.832794309e-09f, 5.826581076e-09f, 5.820360468e-09f, 5.814132500e-09f, 5.807897189e-09f, 5.801654549e-09f, 5.795404596e-09f, 5.789147345e-09f, 5.782882811e-09f,
-5.776611010e-09f, 5.770331958e-09f, 5.764045669e-09f, 5.757752158e-09f, 5.751451443e-09f, 5.745143537e-09f, 5.738828456e-09f, 5.732506215e-09f, 5.726176831e-09f, 5.719840318e-09f,
-5.713496692e-09f, 5.707145968e-09f, 5.700788162e-09f, 5.694423289e-09f, 5.688051365e-09f, 5.681672404e-09f, 5.675286423e-09f, 5.668893437e-09f, 5.662493462e-09f, 5.656086513e-09f,
-5.649672605e-09f, 5.643251753e-09f, 5.636823975e-09f, 5.630389284e-09f, 5.623947697e-09f, 5.617499228e-09f, 5.611043894e-09f, 5.604581710e-09f, 5.598112692e-09f, 5.591636854e-09f,
-5.585154213e-09f, 5.578664785e-09f, 5.572168583e-09f, 5.565665626e-09f, 5.559155927e-09f, 5.552639502e-09f, 5.546116367e-09f, 5.539586538e-09f, 5.533050030e-09f, 5.526506858e-09f,
-5.519957039e-09f, 5.513400587e-09f, 5.506837520e-09f, 5.500267851e-09f, 5.493691596e-09f, 5.487108773e-09f, 5.480519395e-09f, 5.473923478e-09f, 5.467321039e-09f, 5.460712092e-09f,
-5.454096654e-09f, 5.447474740e-09f, 5.440846366e-09f, 5.434211547e-09f, 5.427570299e-09f, 5.420922638e-09f, 5.414268579e-09f, 5.407608139e-09f, 5.400941332e-09f, 5.394268174e-09f,
-5.387588681e-09f, 5.380902870e-09f, 5.374210754e-09f, 5.367512351e-09f, 5.360807676e-09f, 5.354096744e-09f, 5.347379571e-09f, 5.340656174e-09f, 5.333926567e-09f, 5.327190766e-09f,
-5.320448788e-09f, 5.313700648e-09f, 5.306946361e-09f, 5.300185943e-09f, 5.293419411e-09f, 5.286646779e-09f, 5.279868064e-09f, 5.273083281e-09f, 5.266292447e-09f, 5.259495576e-09f,
-5.252692685e-09f, 5.245883789e-09f, 5.239068904e-09f, 5.232248046e-09f, 5.225421231e-09f, 5.218588474e-09f, 5.211749792e-09f, 5.204905200e-09f, 5.198054713e-09f, 5.191198348e-09f,
-5.184336121e-09f, 5.177468046e-09f, 5.170594141e-09f, 5.163714421e-09f, 5.156828901e-09f, 5.149937598e-09f, 5.143040527e-09f, 5.136137704e-09f, 5.129229145e-09f, 5.122314865e-09f,
-5.115394882e-09f, 5.108469210e-09f, 5.101537865e-09f, 5.094600863e-09f, 5.087658220e-09f, 5.080709951e-09f, 5.073756074e-09f, 5.066796603e-09f, 5.059831554e-09f, 5.052860943e-09f,
-5.045884787e-09f, 5.038903100e-09f, 5.031915899e-09f, 5.024923200e-09f, 5.017925018e-09f, 5.010921369e-09f, 5.003912270e-09f, 4.996897736e-09f, 4.989877783e-09f, 4.982852427e-09f,
-4.975821683e-09f, 4.968785568e-09f, 4.961744098e-09f, 4.954697288e-09f, 4.947645155e-09f, 4.940587714e-09f, 4.933524980e-09f, 4.926456971e-09f, 4.919383702e-09f, 4.912305188e-09f,
-4.905221447e-09f, 4.898132492e-09f, 4.891038342e-09f, 4.883939011e-09f, 4.876834515e-09f, 4.869724870e-09f, 4.862610093e-09f, 4.855490199e-09f, 4.848365204e-09f, 4.841235124e-09f,
-4.834099974e-09f, 4.826959772e-09f, 4.819814532e-09f, 4.812664271e-09f, 4.805509005e-09f, 4.798348749e-09f, 4.791183519e-09f, 4.784013332e-09f, 4.776838203e-09f, 4.769658149e-09f,
-4.762473185e-09f, 4.755283327e-09f, 4.748088591e-09f, 4.740888993e-09f, 4.733684549e-09f, 4.726475275e-09f, 4.719261187e-09f, 4.712042301e-09f, 4.704818632e-09f, 4.697590198e-09f,
-4.690357013e-09f, 4.683119093e-09f, 4.675876456e-09f, 4.668629116e-09f, 4.661377089e-09f, 4.654120392e-09f, 4.646859040e-09f, 4.639593050e-09f, 4.632322437e-09f, 4.625047217e-09f,
-4.617767407e-09f, 4.610483022e-09f, 4.603194078e-09f, 4.595900591e-09f, 4.588602578e-09f, 4.581300054e-09f, 4.573993034e-09f, 4.566681536e-09f, 4.559365575e-09f, 4.552045166e-09f,
-4.544720327e-09f, 4.537391073e-09f, 4.530057419e-09f, 4.522719382e-09f, 4.515376979e-09f, 4.508030224e-09f, 4.500679133e-09f, 4.493323724e-09f, 4.485964011e-09f, 4.478600011e-09f,
-4.471231740e-09f, 4.463859213e-09f, 4.456482447e-09f, 4.449101457e-09f, 4.441716260e-09f, 4.434326872e-09f, 4.426933308e-09f, 4.419535584e-09f, 4.412133717e-09f, 4.404727722e-09f,
-4.397317616e-09f, 4.389903414e-09f, 4.382485133e-09f, 4.375062787e-09f, 4.367636394e-09f, 4.360205970e-09f, 4.352771529e-09f, 4.345333089e-09f, 4.337890665e-09f, 4.330444273e-09f,
-4.322993929e-09f, 4.315539649e-09f, 4.308081449e-09f, 4.300619346e-09f, 4.293153354e-09f, 4.285683490e-09f, 4.278209770e-09f, 4.270732210e-09f, 4.263250826e-09f, 4.255765634e-09f,
-4.248276649e-09f, 4.240783888e-09f, 4.233287367e-09f, 4.225787101e-09f, 4.218283107e-09f, 4.210775401e-09f, 4.203263998e-09f, 4.195748915e-09f, 4.188230167e-09f, 4.180707771e-09f,
-4.173181742e-09f, 4.165652096e-09f, 4.158118850e-09f, 4.150582018e-09f, 4.143041618e-09f, 4.135497665e-09f, 4.127950175e-09f, 4.120399165e-09f, 4.112844649e-09f, 4.105286644e-09f,
-4.097725165e-09f, 4.090160230e-09f, 4.082591853e-09f, 4.075020051e-09f, 4.067444840e-09f, 4.059866235e-09f, 4.052284253e-09f, 4.044698909e-09f, 4.037110219e-09f, 4.029518200e-09f,
-4.021922867e-09f, 4.014324236e-09f, 4.006722323e-09f, 3.999117143e-09f, 3.991508714e-09f, 3.983897051e-09f, 3.976282169e-09f, 3.968664085e-09f, 3.961042815e-09f, 3.953418374e-09f,
-3.945790778e-09f, 3.938160044e-09f, 3.930526187e-09f, 3.922889223e-09f, 3.915249167e-09f, 3.907606037e-09f, 3.899959848e-09f, 3.892310615e-09f, 3.884658355e-09f, 3.877003083e-09f,
-3.869344816e-09f, 3.861683569e-09f, 3.854019358e-09f, 3.846352199e-09f, 3.838682108e-09f, 3.831009100e-09f, 3.823333192e-09f, 3.815654400e-09f, 3.807972739e-09f, 3.800288226e-09f,
-3.792600875e-09f, 3.784910704e-09f, 3.777217727e-09f, 3.769521961e-09f, 3.761823421e-09f, 3.754122124e-09f, 3.746418085e-09f, 3.738711320e-09f, 3.731001846e-09f, 3.723289676e-09f,
-3.715574829e-09f, 3.707857319e-09f, 3.700137162e-09f, 3.692414374e-09f, 3.684688971e-09f, 3.676960969e-09f, 3.669230384e-09f, 3.661497231e-09f, 3.653761526e-09f, 3.646023285e-09f,
-3.638282524e-09f, 3.630539258e-09f, 3.622793504e-09f, 3.615045277e-09f, 3.607294593e-09f, 3.599541468e-09f, 3.591785918e-09f, 3.584027958e-09f, 3.576267604e-09f, 3.568504871e-09f,
-3.560739777e-09f, 3.552972336e-09f, 3.545202565e-09f, 3.537430478e-09f, 3.529656092e-09f, 3.521879423e-09f, 3.514100486e-09f, 3.506319297e-09f, 3.498535871e-09f, 3.490750226e-09f,
-3.482962375e-09f, 3.475172336e-09f, 3.467380123e-09f, 3.459585752e-09f, 3.451789240e-09f, 3.443990602e-09f, 3.436189853e-09f, 3.428387010e-09f, 3.420582087e-09f, 3.412775102e-09f,
-3.404966069e-09f, 3.397155004e-09f, 3.389341922e-09f, 3.381526840e-09f, 3.373709774e-09f, 3.365890738e-09f, 3.358069749e-09f, 3.350246822e-09f, 3.342421973e-09f, 3.334595217e-09f,
-3.326766571e-09f, 3.318936050e-09f, 3.311103669e-09f, 3.303269444e-09f, 3.295433391e-09f, 3.287595525e-09f, 3.279755863e-09f, 3.271914419e-09f, 3.264071209e-09f, 3.256226249e-09f,
-3.248379555e-09f, 3.240531142e-09f, 3.232681026e-09f, 3.224829222e-09f, 3.216975746e-09f, 3.209120614e-09f, 3.201263841e-09f, 3.193405442e-09f, 3.185545434e-09f, 3.177683832e-09f,
-3.169820651e-09f, 3.161955907e-09f, 3.154089616e-09f, 3.146221792e-09f, 3.138352453e-09f, 3.130481612e-09f, 3.122609286e-09f, 3.114735491e-09f, 3.106860241e-09f, 3.098983553e-09f,
-3.091105441e-09f, 3.083225922e-09f, 3.075345010e-09f, 3.067462722e-09f, 3.059579073e-09f, 3.051694078e-09f, 3.043807753e-09f, 3.035920113e-09f, 3.028031174e-09f, 3.020140951e-09f,
-3.012249460e-09f, 3.004356716e-09f, 2.996462735e-09f, 2.988567532e-09f, 2.980671122e-09f, 2.972773521e-09f, 2.964874745e-09f, 2.956974808e-09f, 2.949073727e-09f, 2.941171516e-09f,
-2.933268191e-09f, 2.925363768e-09f, 2.917458261e-09f, 2.909551687e-09f, 2.901644060e-09f, 2.893735397e-09f, 2.885825711e-09f, 2.877915020e-09f, 2.870003337e-09f, 2.862090679e-09f,
-2.854177061e-09f, 2.846262498e-09f, 2.838347006e-09f, 2.830430599e-09f, 2.822513294e-09f, 2.814595104e-09f, 2.806676047e-09f, 2.798756137e-09f, 2.790835389e-09f, 2.782913819e-09f,
-2.774991442e-09f, 2.767068273e-09f, 2.759144328e-09f, 2.751219621e-09f, 2.743294169e-09f, 2.735367986e-09f, 2.727441087e-09f, 2.719513489e-09f, 2.711585205e-09f, 2.703656252e-09f,
-2.695726644e-09f, 2.687796397e-09f, 2.679865526e-09f, 2.671934046e-09f, 2.664001972e-09f, 2.656069321e-09f, 2.648136105e-09f, 2.640202342e-09f, 2.632268046e-09f, 2.624333232e-09f,
-2.616397915e-09f, 2.608462112e-09f, 2.600525835e-09f, 2.592589102e-09f, 2.584651927e-09f, 2.576714325e-09f, 2.568776311e-09f, 2.560837900e-09f, 2.552899108e-09f, 2.544959949e-09f,
-2.537020439e-09f, 2.529080593e-09f, 2.521140426e-09f, 2.513199952e-09f, 2.505259188e-09f, 2.497318147e-09f, 2.489376846e-09f, 2.481435298e-09f, 2.473493520e-09f, 2.465551526e-09f,
-2.457609331e-09f, 2.449666950e-09f, 2.441724398e-09f, 2.433781691e-09f, 2.425838842e-09f, 2.417895868e-09f, 2.409952783e-09f, 2.402009602e-09f, 2.394066341e-09f, 2.386123013e-09f,
-2.378179634e-09f, 2.370236219e-09f, 2.362292783e-09f, 2.354349340e-09f, 2.346405907e-09f, 2.338462496e-09f, 2.330519125e-09f, 2.322575806e-09f, 2.314632556e-09f, 2.306689389e-09f,
-2.298746320e-09f, 2.290803364e-09f, 2.282860536e-09f, 2.274917850e-09f, 2.266975322e-09f, 2.259032965e-09f, 2.251090796e-09f, 2.243148829e-09f, 2.235207078e-09f, 2.227265559e-09f,
-2.219324286e-09f, 2.211383274e-09f, 2.203442538e-09f, 2.195502092e-09f, 2.187561952e-09f, 2.179622132e-09f, 2.171682647e-09f, 2.163743511e-09f, 2.155804739e-09f, 2.147866347e-09f,
-2.139928348e-09f, 2.131990757e-09f, 2.124053590e-09f, 2.116116861e-09f, 2.108180583e-09f, 2.100244774e-09f, 2.092309445e-09f, 2.084374614e-09f, 2.076440293e-09f, 2.068506498e-09f,
-2.060573243e-09f, 2.052640543e-09f, 2.044708413e-09f, 2.036776867e-09f, 2.028845920e-09f, 2.020915586e-09f, 2.012985880e-09f, 2.005056816e-09f, 1.997128409e-09f, 1.989200674e-09f,
-1.981273625e-09f, 1.973347277e-09f, 1.965421644e-09f, 1.957496740e-09f, 1.949572581e-09f, 1.941649180e-09f, 1.933726552e-09f, 1.925804712e-09f, 1.917883674e-09f, 1.909963453e-09f,
-1.902044062e-09f, 1.894125517e-09f, 1.886207832e-09f, 1.878291021e-09f, 1.870375099e-09f, 1.862460080e-09f, 1.854545979e-09f, 1.846632809e-09f, 1.838720585e-09f, 1.830809322e-09f,
-1.822899035e-09f, 1.814989736e-09f, 1.807081441e-09f, 1.799174164e-09f, 1.791267920e-09f, 1.783362722e-09f, 1.775458584e-09f, 1.767555523e-09f, 1.759653550e-09f, 1.751752682e-09f,
-1.743852931e-09f, 1.735954313e-09f, 1.728056841e-09f, 1.720160530e-09f, 1.712265394e-09f, 1.704371448e-09f, 1.696478704e-09f, 1.688587179e-09f, 1.680696885e-09f, 1.672807837e-09f,
-1.664920049e-09f, 1.657033536e-09f, 1.649148311e-09f, 1.641264388e-09f, 1.633381783e-09f, 1.625500508e-09f, 1.617620578e-09f, 1.609742007e-09f, 1.601864809e-09f, 1.593988999e-09f,
-1.586114590e-09f, 1.578241596e-09f, 1.570370032e-09f, 1.562499911e-09f, 1.554631247e-09f, 1.546764055e-09f, 1.538898349e-09f, 1.531034142e-09f, 1.523171448e-09f, 1.515310282e-09f,
-1.507450658e-09f, 1.499592589e-09f, 1.491736089e-09f, 1.483881172e-09f, 1.476027853e-09f, 1.468176145e-09f, 1.460326062e-09f, 1.452477618e-09f, 1.444630826e-09f, 1.436785702e-09f,
-1.428942258e-09f, 1.421100508e-09f, 1.413260467e-09f, 1.405422148e-09f, 1.397585564e-09f, 1.389750731e-09f, 1.381917661e-09f, 1.374086368e-09f, 1.366256867e-09f, 1.358429170e-09f,
-1.350603292e-09f, 1.342779247e-09f, 1.334957047e-09f, 1.327136708e-09f, 1.319318242e-09f, 1.311501663e-09f, 1.303686986e-09f, 1.295874223e-09f, 1.288063388e-09f, 1.280254496e-09f,
-1.272447559e-09f, 1.264642592e-09f, 1.256839608e-09f, 1.249038620e-09f, 1.241239642e-09f, 1.233442688e-09f, 1.225647772e-09f, 1.217854907e-09f, 1.210064106e-09f, 1.202275383e-09f,
-1.194488752e-09f, 1.186704226e-09f, 1.178921819e-09f, 1.171141544e-09f, 1.163363414e-09f, 1.155587444e-09f, 1.147813647e-09f, 1.140042035e-09f, 1.132272624e-09f, 1.124505425e-09f,
-1.116740453e-09f, 1.108977721e-09f, 1.101217242e-09f, 1.093459030e-09f, 1.085703098e-09f, 1.077949459e-09f, 1.070198128e-09f, 1.062449116e-09f, 1.054702438e-09f, 1.046958107e-09f,
-1.039216136e-09f, 1.031476539e-09f, 1.023739329e-09f, 1.016004518e-09f, 1.008272121e-09f, 1.000542151e-09f, 9.928146205e-10f, 9.850895432e-10f, 9.773669322e-10f, 9.696468009e-10f,
-9.619291623e-10f, 9.542140297e-10f, 9.465014162e-10f, 9.387913351e-10f, 9.310837995e-10f, 9.233788225e-10f, 9.156764173e-10f, 9.079765970e-10f, 9.002793747e-10f, 8.925847634e-10f,
-8.848927764e-10f, 8.772034267e-10f, 8.695167273e-10f, 8.618326913e-10f, 8.541513317e-10f, 8.464726616e-10f, 8.387966939e-10f, 8.311234417e-10f, 8.234529180e-10f, 8.157851358e-10f,
-8.081201079e-10f, 8.004578475e-10f, 7.927983673e-10f, 7.851416804e-10f, 7.774877997e-10f, 7.698367381e-10f, 7.621885084e-10f, 7.545431236e-10f, 7.469005965e-10f, 7.392609400e-10f,
-7.316241670e-10f, 7.239902902e-10f, 7.163593226e-10f, 7.087312768e-10f, 7.011061657e-10f, 6.934840022e-10f, 6.858647989e-10f, 6.782485686e-10f, 6.706353241e-10f, 6.630250781e-10f,
-6.554178433e-10f, 6.478136325e-10f, 6.402124583e-10f, 6.326143335e-10f, 6.250192706e-10f, 6.174272824e-10f, 6.098383816e-10f, 6.022525807e-10f, 5.946698923e-10f, 5.870903292e-10f,
-5.795139038e-10f, 5.719406288e-10f, 5.643705168e-10f, 5.568035802e-10f, 5.492398317e-10f, 5.416792838e-10f, 5.341219491e-10f, 5.265678399e-10f, 5.190169688e-10f, 5.114693484e-10f,
-5.039249910e-10f, 4.963839092e-10f, 4.888461154e-10f, 4.813116219e-10f, 4.737804413e-10f, 4.662525859e-10f, 4.587280682e-10f, 4.512069005e-10f, 4.436890952e-10f, 4.361746646e-10f,
-4.286636211e-10f, 4.211559771e-10f, 4.136517447e-10f, 4.061509364e-10f, 3.986535644e-10f, 3.911596410e-10f, 3.836691785e-10f, 3.761821892e-10f, 3.686986851e-10f, 3.612186787e-10f,
-3.537421821e-10f, 3.462692074e-10f, 3.387997670e-10f, 3.313338729e-10f, 3.238715373e-10f, 3.164127723e-10f, 3.089575902e-10f, 3.015060030e-10f, 2.940580228e-10f, 2.866136617e-10f,
-2.791729318e-10f, 2.717358452e-10f, 2.643024139e-10f, 2.568726500e-10f, 2.494465654e-10f, 2.420241722e-10f, 2.346054824e-10f, 2.271905080e-10f, 2.197792610e-10f, 2.123717532e-10f,
-2.049679968e-10f, 1.975680035e-10f, 1.901717853e-10f, 1.827793541e-10f, 1.753907219e-10f, 1.680059004e-10f, 1.606249016e-10f, 1.532477373e-10f, 1.458744193e-10f, 1.385049595e-10f,
-1.311393697e-10f, 1.237776616e-10f, 1.164198471e-10f, 1.090659379e-10f, 1.017159458e-10f, 9.436988248e-11f, 8.702775973e-11f, 7.968958925e-11f, 7.235538272e-11f, 6.502515185e-11f,
-5.769890829e-11f, 5.037666372e-11f, 4.305842978e-11f, 3.574421809e-11f, 2.843404027e-11f, 2.112790794e-11f, 1.382583267e-11f, 6.527826049e-12f, -7.661003671e-13f, -8.055935030e-12f,
--1.534166640e-11f, -2.262328297e-11f, -2.990077322e-11f, -3.717412567e-11f, -4.444332883e-11f, -5.170837125e-11f, -5.896924147e-11f, -6.622592805e-11f, -7.347841958e-11f, -8.072670465e-11f,
--8.797077187e-11f, -9.521060984e-11f, -1.024462072e-10f, -1.096775526e-10f, -1.169046348e-10f, -1.241274423e-10f, -1.313459639e-10f, -1.385601883e-10f, -1.457701042e-10f, -1.529757004e-10f,
--1.601769655e-10f, -1.673738884e-10f, -1.745664578e-10f, -1.817546625e-10f, -1.889384914e-10f, -1.961179332e-10f, -2.032929768e-10f, -2.104636110e-10f, -2.176298248e-10f, -2.247916069e-10f,
--2.319489462e-10f, -2.391018318e-10f, -2.462502524e-10f, -2.533941970e-10f, -2.605336547e-10f, -2.676686142e-10f, -2.747990647e-10f, -2.819249951e-10f, -2.890463945e-10f, -2.961632517e-10f,
--3.032755560e-10f, -3.103832963e-10f, -3.174864617e-10f, -3.245850413e-10f, -3.316790241e-10f, -3.387683993e-10f, -3.458531561e-10f, -3.529332835e-10f, -3.600087707e-10f, -3.670796069e-10f,
--3.741457813e-10f, -3.812072830e-10f, -3.882641012e-10f, -3.953162253e-10f, -4.023636444e-10f, -4.094063478e-10f, -4.164443248e-10f, -4.234775647e-10f, -4.305060567e-10f, -4.375297901e-10f,
--4.445487544e-10f, -4.515629388e-10f, -4.585723328e-10f, -4.655769256e-10f, -4.725767068e-10f, -4.795716656e-10f, -4.865617915e-10f, -4.935470740e-10f, -5.005275024e-10f, -5.075030663e-10f,
--5.144737552e-10f, -5.214395585e-10f, -5.284004657e-10f, -5.353564664e-10f, -5.423075502e-10f, -5.492537065e-10f, -5.561949249e-10f, -5.631311951e-10f, -5.700625066e-10f, -5.769888490e-10f,
--5.839102120e-10f, -5.908265853e-10f, -5.977379584e-10f, -6.046443211e-10f, -6.115456630e-10f, -6.184419739e-10f, -6.253332434e-10f, -6.322194614e-10f, -6.391006176e-10f, -6.459767017e-10f,
--6.528477035e-10f, -6.597136128e-10f, -6.665744194e-10f, -6.734301133e-10f, -6.802806841e-10f, -6.871261218e-10f, -6.939664162e-10f, -7.008015572e-10f, -7.076315348e-10f, -7.144563388e-10f,
--7.212759593e-10f, -7.280903860e-10f, -7.348996091e-10f, -7.417036185e-10f, -7.485024041e-10f, -7.552959561e-10f, -7.620842644e-10f, -7.688673190e-10f, -7.756451101e-10f, -7.824176277e-10f,
--7.891848619e-10f, -7.959468028e-10f, -8.027034405e-10f, -8.094547652e-10f, -8.162007670e-10f, -8.229414361e-10f, -8.296767626e-10f, -8.364067368e-10f, -8.431313489e-10f, -8.498505891e-10f,
--8.565644476e-10f, -8.632729147e-10f, -8.699759808e-10f, -8.766736360e-10f, -8.833658707e-10f, -8.900526753e-10f, -8.967340400e-10f, -9.034099552e-10f, -9.100804112e-10f, -9.167453986e-10f,
--9.234049076e-10f, -9.300589287e-10f, -9.367074523e-10f, -9.433504689e-10f, -9.499879690e-10f, -9.566199429e-10f, -9.632463813e-10f, -9.698672746e-10f, -9.764826133e-10f, -9.830923880e-10f,
--9.896965893e-10f, -9.962952078e-10f, -1.002888234e-09f, -1.009475658e-09f, -1.016057472e-09f, -1.022633665e-09f, -1.029204228e-09f, -1.035769152e-09f, -1.042328428e-09f, -1.048882046e-09f,
--1.055429997e-09f, -1.061972272e-09f, -1.068508862e-09f, -1.075039757e-09f, -1.081564947e-09f, -1.088084425e-09f, -1.094598180e-09f, -1.101106204e-09f, -1.107608487e-09f, -1.114105021e-09f,
--1.120595795e-09f, -1.127080801e-09f, -1.133560031e-09f, -1.140033474e-09f, -1.146501122e-09f, -1.152962966e-09f, -1.159418996e-09f, -1.165869204e-09f, -1.172313581e-09f, -1.178752117e-09f,
--1.185184804e-09f, -1.191611633e-09f, -1.198032595e-09f, -1.204447681e-09f, -1.210856882e-09f, -1.217260189e-09f, -1.223657594e-09f, -1.230049087e-09f, -1.236434660e-09f, -1.242814303e-09f,
--1.249188008e-09f, -1.255555767e-09f, -1.261917570e-09f, -1.268273409e-09f, -1.274623275e-09f, -1.280967160e-09f, -1.287305054e-09f, -1.293636948e-09f, -1.299962835e-09f, -1.306282706e-09f,
--1.312596551e-09f, -1.318904363e-09f, -1.325206133e-09f, -1.331501851e-09f, -1.337791510e-09f, -1.344075102e-09f, -1.350352616e-09f, -1.356624046e-09f, -1.362889382e-09f, -1.369148616e-09f,
--1.375401739e-09f, -1.381648744e-09f, -1.387889621e-09f, -1.394124362e-09f, -1.400352959e-09f, -1.406575403e-09f, -1.412791687e-09f, -1.419001800e-09f, -1.425205737e-09f, -1.431403487e-09f,
--1.437595042e-09f, -1.443780395e-09f, -1.449959538e-09f, -1.456132461e-09f, -1.462299156e-09f, -1.468459616e-09f, -1.474613832e-09f, -1.480761796e-09f, -1.486903500e-09f, -1.493038935e-09f,
--1.499168094e-09f, -1.505290968e-09f, -1.511407549e-09f, -1.517517830e-09f, -1.523621801e-09f, -1.529719456e-09f, -1.535810785e-09f, -1.541895782e-09f, -1.547974437e-09f, -1.554046743e-09f,
--1.560112692e-09f, -1.566172277e-09f, -1.572225488e-09f, -1.578272318e-09f, -1.584312759e-09f, -1.590346804e-09f, -1.596374444e-09f, -1.602395672e-09f, -1.608410480e-09f, -1.614418859e-09f,
--1.620420802e-09f, -1.626416302e-09f, -1.632405350e-09f, -1.638387939e-09f, -1.644364061e-09f, -1.650333708e-09f, -1.656296873e-09f, -1.662253547e-09f, -1.668203724e-09f, -1.674147396e-09f,
--1.680084554e-09f, -1.686015191e-09f, -1.691939300e-09f, -1.697856874e-09f, -1.703767903e-09f, -1.709672382e-09f, -1.715570302e-09f, -1.721461655e-09f, -1.727346436e-09f, -1.733224634e-09f,
--1.739096245e-09f, -1.744961259e-09f, -1.750819670e-09f, -1.756671469e-09f, -1.762516651e-09f, -1.768355206e-09f, -1.774187129e-09f, -1.780012411e-09f, -1.785831045e-09f, -1.791643024e-09f,
--1.797448341e-09f, -1.803246987e-09f, -1.809038957e-09f, -1.814824243e-09f, -1.820602837e-09f, -1.826374732e-09f, -1.832139921e-09f, -1.837898397e-09f, -1.843650153e-09f, -1.849395181e-09f,
--1.855133475e-09f, -1.860865027e-09f, -1.866589830e-09f, -1.872307878e-09f, -1.878019162e-09f, -1.883723676e-09f, -1.889421413e-09f, -1.895112366e-09f, -1.900796528e-09f, -1.906473892e-09f,
--1.912144451e-09f, -1.917808198e-09f, -1.923465126e-09f, -1.929115228e-09f, -1.934758497e-09f, -1.940394927e-09f, -1.946024510e-09f, -1.951647240e-09f, -1.957263109e-09f, -1.962872112e-09f,
--1.968474241e-09f, -1.974069489e-09f, -1.979657850e-09f, -1.985239317e-09f, -1.990813883e-09f, -1.996381541e-09f, -2.001942285e-09f, -2.007496109e-09f, -2.013043004e-09f, -2.018582966e-09f,
--2.024115987e-09f, -2.029642060e-09f, -2.035161179e-09f, -2.040673338e-09f, -2.046178529e-09f, -2.051676747e-09f, -2.057167985e-09f, -2.062652235e-09f, -2.068129493e-09f, -2.073599751e-09f,
--2.079063002e-09f, -2.084519241e-09f, -2.089968461e-09f, -2.095410656e-09f, -2.100845819e-09f, -2.106273943e-09f, -2.111695023e-09f, -2.117109052e-09f, -2.122516024e-09f, -2.127915933e-09f,
--2.133308771e-09f, -2.138694534e-09f, -2.144073214e-09f, -2.149444806e-09f, -2.154809303e-09f, -2.160166699e-09f, -2.165516988e-09f, -2.170860163e-09f, -2.176196220e-09f, -2.181525150e-09f,
--2.186846949e-09f, -2.192161610e-09f, -2.197469128e-09f, -2.202769495e-09f, -2.208062706e-09f, -2.213348756e-09f, -2.218627637e-09f, -2.223899345e-09f, -2.229163872e-09f, -2.234421214e-09f,
--2.239671363e-09f, -2.244914315e-09f, -2.250150064e-09f, -2.255378602e-09f, -2.260599926e-09f, -2.265814027e-09f, -2.271020902e-09f, -2.276220544e-09f, -2.281412947e-09f, -2.286598106e-09f,
--2.291776014e-09f, -2.296946666e-09f, -2.302110056e-09f, -2.307266179e-09f, -2.312415029e-09f, -2.317556599e-09f, -2.322690886e-09f, -2.327817882e-09f, -2.332937582e-09f, -2.338049980e-09f,
--2.343155072e-09f, -2.348252851e-09f, -2.353343312e-09f, -2.358426449e-09f, -2.363502257e-09f, -2.368570730e-09f, -2.373631863e-09f, -2.378685650e-09f, -2.383732086e-09f, -2.388771166e-09f,
--2.393802883e-09f, -2.398827233e-09f, -2.403844210e-09f, -2.408853809e-09f, -2.413856025e-09f, -2.418850851e-09f, -2.423838283e-09f, -2.428818316e-09f, -2.433790944e-09f, -2.438756162e-09f,
--2.443713965e-09f, -2.448664347e-09f, -2.453607303e-09f, -2.458542829e-09f, -2.463470918e-09f, -2.468391566e-09f, -2.473304768e-09f, -2.478210518e-09f, -2.483108811e-09f, -2.487999643e-09f,
--2.492883008e-09f, -2.497758901e-09f, -2.502627317e-09f, -2.507488251e-09f, -2.512341698e-09f, -2.517187653e-09f, -2.522026112e-09f, -2.526857068e-09f, -2.531680518e-09f, -2.536496456e-09f,
--2.541304877e-09f, -2.546105777e-09f, -2.550899150e-09f, -2.555684992e-09f, -2.560463299e-09f, -2.565234064e-09f, -2.569997283e-09f, -2.574752953e-09f, -2.579501066e-09f, -2.584241620e-09f,
--2.588974610e-09f, -2.593700030e-09f, -2.598417876e-09f, -2.603128143e-09f, -2.607830826e-09f, -2.612525922e-09f, -2.617213425e-09f, -2.621893330e-09f, -2.626565634e-09f, -2.631230331e-09f,
--2.635887418e-09f, -2.640536888e-09f, -2.645178739e-09f, -2.649812965e-09f, -2.654439562e-09f, -2.659058526e-09f, -2.663669851e-09f, -2.668273535e-09f, -2.672869571e-09f, -2.677457956e-09f,
--2.682038686e-09f, -2.686611755e-09f, -2.691177161e-09f, -2.695734897e-09f, -2.700284961e-09f, -2.704827348e-09f, -2.709362053e-09f, -2.713889072e-09f, -2.718408401e-09f, -2.722920036e-09f,
--2.727423972e-09f, -2.731920206e-09f, -2.736408734e-09f, -2.740889550e-09f, -2.745362651e-09f, -2.749828033e-09f, -2.754285691e-09f, -2.758735622e-09f, -2.763177822e-09f, -2.767612286e-09f,
--2.772039011e-09f, -2.776457992e-09f, -2.780869225e-09f, -2.785272707e-09f, -2.789668433e-09f, -2.794056400e-09f, -2.798436604e-09f, -2.802809040e-09f, -2.807173705e-09f, -2.811530595e-09f,
--2.815879706e-09f, -2.820221034e-09f, -2.824554576e-09f, -2.828880327e-09f, -2.833198284e-09f, -2.837508443e-09f, -2.841810800e-09f, -2.846105352e-09f, -2.850392095e-09f, -2.854671024e-09f,
--2.858942138e-09f, -2.863205430e-09f, -2.867460900e-09f, -2.871708541e-09f, -2.875948351e-09f, -2.880180327e-09f, -2.884404464e-09f, -2.888620760e-09f, -2.892829209e-09f, -2.897029810e-09f,
--2.901222559e-09f, -2.905407451e-09f, -2.909584484e-09f, -2.913753654e-09f, -2.917914958e-09f, -2.922068392e-09f, -2.926213953e-09f, -2.930351637e-09f, -2.934481441e-09f, -2.938603362e-09f,
--2.942717396e-09f, -2.946823540e-09f, -2.950921791e-09f, -2.955012145e-09f, -2.959094599e-09f, -2.963169151e-09f, -2.967235796e-09f, -2.971294531e-09f, -2.975345354e-09f, -2.979388260e-09f,
--2.983423248e-09f, -2.987450313e-09f, -2.991469453e-09f, -2.995480664e-09f, -2.999483944e-09f, -3.003479289e-09f, -3.007466696e-09f, -3.011446162e-09f, -3.015417685e-09f, -3.019381261e-09f,
--3.023336886e-09f, -3.027284560e-09f, -3.031224277e-09f, -3.035156035e-09f, -3.039079832e-09f, -3.042995664e-09f, -3.046903529e-09f, -3.050803424e-09f, -3.054695345e-09f, -3.058579290e-09f,
--3.062455257e-09f, -3.066323242e-09f, -3.070183242e-09f, -3.074035255e-09f, -3.077879278e-09f, -3.081715309e-09f, -3.085543344e-09f, -3.089363381e-09f, -3.093175417e-09f, -3.096979449e-09f,
--3.100775476e-09f, -3.104563494e-09f, -3.108343500e-09f, -3.112115492e-09f, -3.115879468e-09f, -3.119635425e-09f, -3.123383360e-09f, -3.127123270e-09f, -3.130855154e-09f, -3.134579009e-09f,
--3.138294832e-09f, -3.142002621e-09f, -3.145702374e-09f, -3.149394087e-09f, -3.153077759e-09f, -3.156753387e-09f, -3.160420969e-09f, -3.164080502e-09f, -3.167731984e-09f, -3.171375414e-09f,
--3.175010787e-09f, -3.178638103e-09f, -3.182257358e-09f, -3.185868552e-09f, -3.189471680e-09f, -3.193066742e-09f, -3.196653735e-09f, -3.200232656e-09f, -3.203803505e-09f, -3.207366277e-09f,
--3.210920972e-09f, -3.214467587e-09f, -3.218006120e-09f, -3.221536569e-09f, -3.225058933e-09f, -3.228573207e-09f, -3.232079392e-09f, -3.235577485e-09f, -3.239067483e-09f, -3.242549386e-09f,
--3.246023190e-09f, -3.249488894e-09f, -3.252946496e-09f, -3.256395994e-09f, -3.259837386e-09f, -3.263270671e-09f, -3.266695846e-09f, -3.270112910e-09f, -3.273521860e-09f, -3.276922695e-09f,
--3.280315414e-09f, -3.283700013e-09f, -3.287076493e-09f, -3.290444850e-09f, -3.293805083e-09f, -3.297157191e-09f, -3.300501171e-09f, -3.303837023e-09f, -3.307164743e-09f, -3.310484332e-09f,
--3.313795786e-09f, -3.317099105e-09f, -3.320394287e-09f, -3.323681331e-09f, -3.326960234e-09f, -3.330230995e-09f, -3.333493613e-09f, -3.336748086e-09f, -3.339994412e-09f, -3.343232591e-09f,
--3.346462621e-09f, -3.349684500e-09f, -3.352898226e-09f, -3.356103800e-09f, -3.359301218e-09f, -3.362490480e-09f, -3.365671584e-09f, -3.368844530e-09f, -3.372009314e-09f, -3.375165938e-09f,
--3.378314398e-09f, -3.381454694e-09f, -3.384586825e-09f, -3.387710789e-09f, -3.390826585e-09f, -3.393934212e-09f, -3.397033668e-09f, -3.400124953e-09f, -3.403208066e-09f, -3.406283004e-09f,
--3.409349768e-09f, -3.412408355e-09f, -3.415458766e-09f, -3.418500998e-09f, -3.421535051e-09f, -3.424560924e-09f, -3.427578615e-09f, -3.430588124e-09f, -3.433589450e-09f, -3.436582591e-09f,
--3.439567547e-09f, -3.442544317e-09f, -3.445512900e-09f, -3.448473295e-09f, -3.451425501e-09f, -3.454369517e-09f, -3.457305342e-09f, -3.460232976e-09f, -3.463152418e-09f, -3.466063666e-09f,
--3.468966721e-09f, -3.471861581e-09f, -3.474748245e-09f, -3.477626713e-09f, -3.480496985e-09f, -3.483359058e-09f, -3.486212934e-09f, -3.489058610e-09f, -3.491896087e-09f, -3.494725363e-09f,
--3.497546439e-09f, -3.500359313e-09f, -3.503163985e-09f, -3.505960454e-09f, -3.508748720e-09f, -3.511528782e-09f, -3.514300640e-09f, -3.517064293e-09f, -3.519819741e-09f, -3.522566982e-09f,
--3.525306018e-09f, -3.528036847e-09f, -3.530759469e-09f, -3.533473883e-09f, -3.536180089e-09f, -3.538878087e-09f, -3.541567876e-09f, -3.544249456e-09f, -3.546922827e-09f, -3.549587988e-09f,
--3.552244939e-09f, -3.554893680e-09f, -3.557534211e-09f, -3.560166530e-09f, -3.562790639e-09f, -3.565406536e-09f, -3.568014222e-09f, -3.570613697e-09f, -3.573204959e-09f, -3.575788010e-09f,
--3.578362849e-09f, -3.580929475e-09f, -3.583487889e-09f, -3.586038091e-09f, -3.588580081e-09f, -3.591113858e-09f, -3.593639422e-09f, -3.596156774e-09f, -3.598665913e-09f, -3.601166840e-09f,
--3.603659555e-09f, -3.606144056e-09f, -3.608620346e-09f, -3.611088423e-09f, -3.613548288e-09f, -3.615999941e-09f, -3.618443382e-09f, -3.620878611e-09f, -3.623305628e-09f, -3.625724434e-09f,
--3.628135028e-09f, -3.630537412e-09f, -3.632931584e-09f, -3.635317546e-09f, -3.637695297e-09f, -3.640064839e-09f, -3.642426170e-09f, -3.644779292e-09f, -3.647124204e-09f, -3.649460908e-09f,
--3.651789403e-09f, -3.654109690e-09f, -3.656421770e-09f, -3.658725641e-09f, -3.661021306e-09f, -3.663308764e-09f, -3.665588017e-09f, -3.667859063e-09f, -3.670121904e-09f, -3.672376541e-09f,
--3.674622973e-09f, -3.676861202e-09f, -3.679091228e-09f, -3.681313051e-09f, -3.683526672e-09f, -3.685732092e-09f, -3.687929311e-09f, -3.690118330e-09f, -3.692299150e-09f, -3.694471770e-09f,
--3.696636192e-09f, -3.698792417e-09f, -3.700940445e-09f, -3.703080277e-09f, -3.705211914e-09f, -3.707335356e-09f, -3.709450604e-09f, -3.711557659e-09f, -3.713656522e-09f, -3.715747193e-09f,
--3.717829673e-09f, -3.719903964e-09f, -3.721970066e-09f, -3.724027980e-09f, -3.726077707e-09f, -3.728119247e-09f, -3.730152602e-09f, -3.732177772e-09f, -3.734194760e-09f, -3.736203564e-09f,
--3.738204187e-09f, -3.740196630e-09f, -3.742180893e-09f, -3.744156977e-09f, -3.746124885e-09f, -3.748084615e-09f, -3.750036171e-09f, -3.751979552e-09f, -3.753914760e-09f, -3.755841797e-09f,
--3.757760662e-09f, -3.759671358e-09f, -3.761573885e-09f, -3.763468245e-09f, -3.765354439e-09f, -3.767232468e-09f, -3.769102333e-09f, -3.770964035e-09f, -3.772817577e-09f, -3.774662959e-09f,
--3.776500182e-09f, -3.778329248e-09f, -3.780150158e-09f, -3.781962913e-09f, -3.783767515e-09f, -3.785563965e-09f, -3.787352264e-09f, -3.789132415e-09f, -3.790904418e-09f, -3.792668274e-09f,
--3.794423986e-09f, -3.796171554e-09f, -3.797910981e-09f, -3.799642267e-09f, -3.801365414e-09f, -3.803080424e-09f, -3.804787298e-09f, -3.806486037e-09f, -3.808176645e-09f, -3.809859120e-09f,
--3.811533467e-09f, -3.813199685e-09f, -3.814857778e-09f, -3.816507745e-09f, -3.818149590e-09f, -3.819783314e-09f, -3.821408917e-09f, -3.823026403e-09f, -3.824635773e-09f, -3.826237028e-09f,
--3.827830171e-09f, -3.829415203e-09f, -3.830992125e-09f, -3.832560941e-09f, -3.834121650e-09f, -3.835674256e-09f, -3.837218761e-09f, -3.838755165e-09f, -3.840283471e-09f, -3.841803681e-09f,
--3.843315796e-09f, -3.844819819e-09f, -3.846315751e-09f, -3.847803595e-09f, -3.849283353e-09f, -3.850755025e-09f, -3.852218615e-09f, -3.853674125e-09f, -3.855121556e-09f, -3.856560910e-09f,
--3.857992190e-09f, -3.859415397e-09f, -3.860830534e-09f, -3.862237603e-09f, -3.863636605e-09f, -3.865027543e-09f, -3.866410420e-09f, -3.867785237e-09f, -3.869151996e-09f, -3.870510700e-09f,
--3.871861350e-09f, -3.873203950e-09f, -3.874538500e-09f, -3.875865005e-09f, -3.877183465e-09f, -3.878493882e-09f, -3.879796261e-09f, -3.881090602e-09f, -3.882376907e-09f, -3.883655180e-09f,
--3.884925423e-09f, -3.886187637e-09f, -3.887441826e-09f, -3.888687991e-09f, -3.889926136e-09f, -3.891156262e-09f, -3.892378372e-09f, -3.893592468e-09f, -3.894798554e-09f, -3.895996630e-09f,
--3.897186701e-09f, -3.898368767e-09f, -3.899542833e-09f, -3.900708900e-09f, -3.901866971e-09f, -3.903017048e-09f, -3.904159134e-09f, -3.905293233e-09f, -3.906419345e-09f, -3.907537474e-09f,
--3.908647623e-09f, -3.909749793e-09f, -3.910843989e-09f, -3.911930212e-09f, -3.913008465e-09f, -3.914078752e-09f, -3.915141073e-09f, -3.916195434e-09f, -3.917241835e-09f, -3.918280280e-09f,
--3.919310772e-09f, -3.920333313e-09f, -3.921347906e-09f, -3.922354554e-09f, -3.923353261e-09f, -3.924344028e-09f, -3.925326858e-09f, -3.926301755e-09f, -3.927268721e-09f, -3.928227760e-09f,
--3.929178874e-09f, -3.930122066e-09f, -3.931057339e-09f, -3.931984696e-09f, -3.932904139e-09f, -3.933815673e-09f, -3.934719300e-09f, -3.935615023e-09f, -3.936502845e-09f, -3.937382769e-09f,
--3.938254798e-09f, -3.939118935e-09f, -3.939975184e-09f, -3.940823546e-09f, -3.941664027e-09f, -3.942496628e-09f, -3.943321352e-09f, -3.944138204e-09f, -3.944947186e-09f, -3.945748301e-09f,
--3.946541552e-09f, -3.947326943e-09f, -3.948104477e-09f, -3.948874158e-09f, -3.949635987e-09f, -3.950389969e-09f, -3.951136107e-09f, -3.951874405e-09f, -3.952604865e-09f, -3.953327490e-09f,
--3.954042285e-09f, -3.954749253e-09f, -3.955448396e-09f, -3.956139719e-09f, -3.956823224e-09f, -3.957498915e-09f, -3.958166796e-09f, -3.958826870e-09f, -3.959479140e-09f, -3.960123610e-09f,
--3.960760283e-09f, -3.961389163e-09f, -3.962010253e-09f, -3.962623557e-09f, -3.963229078e-09f, -3.963826820e-09f, -3.964416786e-09f, -3.964998980e-09f, -3.965573406e-09f, -3.966140067e-09f,
--3.966698967e-09f, -3.967250109e-09f, -3.967793497e-09f, -3.968329134e-09f, -3.968857025e-09f, -3.969377173e-09f, -3.969889581e-09f, -3.970394254e-09f, -3.970891195e-09f, -3.971380407e-09f,
--3.971861895e-09f, -3.972335662e-09f, -3.972801713e-09f, -3.973260050e-09f, -3.973710677e-09f, -3.974153599e-09f, -3.974588819e-09f, -3.975016341e-09f, -3.975436169e-09f, -3.975848307e-09f,
--3.976252758e-09f, -3.976649527e-09f, -3.977038617e-09f, -3.977420033e-09f, -3.977793777e-09f, -3.978159855e-09f, -3.978518270e-09f, -3.978869026e-09f, -3.979212127e-09f, -3.979547577e-09f,
--3.979875380e-09f, -3.980195540e-09f, -3.980508061e-09f, -3.980812947e-09f, -3.981110202e-09f, -3.981399830e-09f, -3.981681836e-09f, -3.981956223e-09f, -3.982222995e-09f, -3.982482157e-09f,
--3.982733713e-09f, -3.982977666e-09f, -3.983214022e-09f, -3.983442784e-09f, -3.983663956e-09f, -3.983877542e-09f, -3.984083547e-09f, -3.984281976e-09f, -3.984472831e-09f, -3.984656118e-09f,
--3.984831840e-09f, -3.985000003e-09f, -3.985160610e-09f, -3.985313665e-09f, -3.985459173e-09f, -3.985597138e-09f, -3.985727565e-09f, -3.985850457e-09f, -3.985965820e-09f, -3.986073657e-09f,
--3.986173973e-09f, -3.986266773e-09f, -3.986352060e-09f, -3.986429839e-09f, -3.986500115e-09f, -3.986562892e-09f, -3.986618174e-09f, -3.986665966e-09f, -3.986706273e-09f, -3.986739099e-09f,
--3.986764448e-09f, -3.986782324e-09f, -3.986792734e-09f, -3.986795680e-09f, -3.986791168e-09f, -3.986779202e-09f, -3.986759787e-09f, -3.986732927e-09f, -3.986698627e-09f, -3.986656891e-09f,
--3.986607725e-09f, -3.986551132e-09f, -3.986487118e-09f, -3.986415686e-09f, -3.986336843e-09f, -3.986250592e-09f, -3.986156938e-09f, -3.986055886e-09f, -3.985947441e-09f, -3.985831606e-09f,
--3.985708388e-09f, -3.985577791e-09f, -3.985439819e-09f, -3.985294478e-09f, -3.985141772e-09f, -3.984981706e-09f, -3.984814285e-09f, -3.984639513e-09f, -3.984457396e-09f, -3.984267938e-09f,
--3.984071144e-09f, -3.983867020e-09f, -3.983655569e-09f, -3.983436797e-09f, -3.983210709e-09f, -3.982977310e-09f, -3.982736604e-09f, -3.982488597e-09f, -3.982233294e-09f, -3.981970699e-09f,
--3.981700818e-09f, -3.981423655e-09f, -3.981139215e-09f, -3.980847504e-09f, -3.980548527e-09f, -3.980242288e-09f, -3.979928793e-09f, -3.979608047e-09f, -3.979280055e-09f, -3.978944821e-09f,
--3.978602352e-09f, -3.978252651e-09f, -3.977895725e-09f, -3.977531578e-09f, -3.977160216e-09f, -3.976781643e-09f, -3.976395865e-09f, -3.976002887e-09f, -3.975602715e-09f, -3.975195353e-09f,
--3.974780806e-09f, -3.974359080e-09f, -3.973930181e-09f, -3.973494113e-09f, -3.973050881e-09f, -3.972600491e-09f, -3.972142949e-09f, -3.971678259e-09f, -3.971206426e-09f, -3.970727457e-09f,
--3.970241356e-09f, -3.969748129e-09f, -3.969247781e-09f, -3.968740317e-09f, -3.968225743e-09f, -3.967704065e-09f, -3.967175287e-09f, -3.966639415e-09f, -3.966096454e-09f, -3.965546410e-09f,
--3.964989289e-09f, -3.964425095e-09f, -3.963853835e-09f, -3.963275513e-09f, -3.962690135e-09f, -3.962097707e-09f, -3.961498234e-09f, -3.960891722e-09f, -3.960278176e-09f, -3.959657602e-09f,
--3.959030005e-09f, -3.958395390e-09f, -3.957753764e-09f, -3.957105133e-09f, -3.956449500e-09f, -3.955786873e-09f, -3.955117257e-09f, -3.954440657e-09f, -3.953757079e-09f, -3.953066529e-09f,
--3.952369012e-09f, -3.951664534e-09f, -3.950953101e-09f, -3.950234718e-09f, -3.949509391e-09f, -3.948777126e-09f, -3.948037928e-09f, -3.947291804e-09f, -3.946538759e-09f, -3.945778798e-09f,
--3.945011928e-09f, -3.944238154e-09f, -3.943457482e-09f, -3.942669918e-09f, -3.941875468e-09f, -3.941074137e-09f, -3.940265931e-09f, -3.939450856e-09f, -3.938628918e-09f, -3.937800123e-09f,
--3.936964477e-09f, -3.936121985e-09f, -3.935272654e-09f, -3.934416488e-09f, -3.933553496e-09f, -3.932683681e-09f, -3.931807050e-09f, -3.930923609e-09f, -3.930033365e-09f, -3.929136322e-09f,
--3.928232487e-09f, -3.927321865e-09f, -3.926404464e-09f, -3.925480288e-09f, -3.924549345e-09f, -3.923611639e-09f, -3.922667177e-09f, -3.921715965e-09f, -3.920758008e-09f, -3.919793314e-09f,
--3.918821888e-09f, -3.917843736e-09f, -3.916858865e-09f, -3.915867279e-09f, -3.914868987e-09f, -3.913863992e-09f, -3.912852303e-09f, -3.911833924e-09f, -3.910808862e-09f, -3.909777124e-09f,
--3.908738714e-09f, -3.907693640e-09f, -3.906641908e-09f, -3.905583524e-09f, -3.904518493e-09f, -3.903446823e-09f, -3.902368520e-09f, -3.901283589e-09f, -3.900192037e-09f, -3.899093871e-09f,
--3.897989096e-09f, -3.896877719e-09f, -3.895759745e-09f, -3.894635182e-09f, -3.893504036e-09f, -3.892366313e-09f, -3.891222019e-09f, -3.890071160e-09f, -3.888913744e-09f, -3.887749776e-09f,
--3.886579262e-09f, -3.885402210e-09f, -3.884218625e-09f, -3.883028513e-09f, -3.881831882e-09f, -3.880628738e-09f, -3.879419086e-09f, -3.878202934e-09f, -3.876980288e-09f, -3.875751154e-09f,
--3.874515538e-09f, -3.873273448e-09f, -3.872024890e-09f, -3.870769870e-09f, -3.869508394e-09f, -3.868240470e-09f, -3.866966103e-09f, -3.865685301e-09f, -3.864398069e-09f, -3.863104414e-09f,
--3.861804343e-09f, -3.860497862e-09f, -3.859184979e-09f, -3.857865698e-09f, -3.856540028e-09f, -3.855207975e-09f, -3.853869544e-09f, -3.852524744e-09f, -3.851173579e-09f, -3.849816058e-09f,
--3.848452187e-09f, -3.847081972e-09f, -3.845705420e-09f, -3.844322537e-09f, -3.842933331e-09f, -3.841537808e-09f, -3.840135974e-09f, -3.838727837e-09f, -3.837313403e-09f, -3.835892679e-09f,
--3.834465671e-09f, -3.833032387e-09f, -3.831592832e-09f, -3.830147014e-09f, -3.828694940e-09f, -3.827236616e-09f, -3.825772048e-09f, -3.824301245e-09f, -3.822824212e-09f, -3.821340957e-09f,
--3.819851486e-09f, -3.818355805e-09f, -3.816853923e-09f, -3.815345845e-09f, -3.813831579e-09f, -3.812311131e-09f, -3.810784508e-09f, -3.809251717e-09f, -3.807712765e-09f, -3.806167659e-09f,
--3.804616406e-09f, -3.803059012e-09f, -3.801495485e-09f, -3.799925831e-09f, -3.798350058e-09f, -3.796768172e-09f, -3.795180180e-09f, -3.793586089e-09f, -3.791985906e-09f, -3.790379639e-09f,
--3.788767293e-09f, -3.787148877e-09f, -3.785524397e-09f, -3.783893859e-09f, -3.782257272e-09f, -3.780614642e-09f, -3.778965975e-09f, -3.777311280e-09f, -3.775650563e-09f, -3.773983831e-09f,
--3.772311092e-09f, -3.770632352e-09f, -3.768947618e-09f, -3.767256897e-09f, -3.765560197e-09f, -3.763857525e-09f, -3.762148887e-09f, -3.760434291e-09f, -3.758713744e-09f, -3.756987254e-09f,
--3.755254826e-09f, -3.753516469e-09f, -3.751772189e-09f, -3.750021994e-09f, -3.748265890e-09f, -3.746503886e-09f, -3.744735987e-09f, -3.742962202e-09f, -3.741182538e-09f, -3.739397001e-09f,
--3.737605599e-09f, -3.735808340e-09f, -3.734005229e-09f, -3.732196276e-09f, -3.730381486e-09f, -3.728560867e-09f, -3.726734427e-09f, -3.724902172e-09f, -3.723064110e-09f, -3.721220248e-09f,
--3.719370594e-09f, -3.717515154e-09f, -3.715653936e-09f, -3.713786948e-09f, -3.711914196e-09f, -3.710035688e-09f, -3.708151432e-09f, -3.706261434e-09f, -3.704365702e-09f, -3.702464243e-09f,
--3.700557065e-09f, -3.698644175e-09f, -3.696725580e-09f, -3.694801288e-09f, -3.692871306e-09f, -3.690935642e-09f, -3.688994303e-09f, -3.687047296e-09f, -3.685094629e-09f, -3.683136308e-09f,
--3.681172343e-09f, -3.679202740e-09f, -3.677227506e-09f, -3.675246648e-09f, -3.673260176e-09f, -3.671268095e-09f, -3.669270413e-09f, -3.667267138e-09f, -3.665258278e-09f, -3.663243839e-09f,
--3.661223830e-09f, -3.659198257e-09f, -3.657167128e-09f, -3.655130451e-09f, -3.653088234e-09f, -3.651040483e-09f, -3.648987207e-09f, -3.646928412e-09f, -3.644864107e-09f, -3.642794299e-09f,
--3.640718996e-09f, -3.638638204e-09f, -3.636551933e-09f, -3.634460188e-09f, -3.632362979e-09f, -3.630260312e-09f, -3.628152195e-09f, -3.626038636e-09f, -3.623919642e-09f, -3.621795220e-09f,
--3.619665380e-09f, -3.617530128e-09f, -3.615389471e-09f, -3.613243418e-09f, -3.611091976e-09f, -3.608935153e-09f, -3.606772956e-09f, -3.604605393e-09f, -3.602432473e-09f, -3.600254201e-09f,
--3.598070587e-09f, -3.595881638e-09f, -3.593687361e-09f, -3.591487764e-09f, -3.589282856e-09f, -3.587072643e-09f, -3.584857134e-09f, -3.582636335e-09f, -3.580410256e-09f, -3.578178903e-09f,
--3.575942285e-09f, -3.573700409e-09f, -3.571453283e-09f, -3.569200915e-09f, -3.566943312e-09f, -3.564680482e-09f, -3.562412433e-09f, -3.560139173e-09f, -3.557860710e-09f, -3.555577052e-09f,
--3.553288205e-09f, -3.550994179e-09f, -3.548694980e-09f, -3.546390617e-09f, -3.544081098e-09f, -3.541766430e-09f, -3.539446622e-09f, -3.537121680e-09f, -3.534791614e-09f, -3.532456430e-09f,
--3.530116137e-09f, -3.527770742e-09f, -3.525420254e-09f, -3.523064681e-09f, -3.520704029e-09f, -3.518338308e-09f, -3.515967524e-09f, -3.513591687e-09f, -3.511210803e-09f, -3.508824881e-09f,
--3.506433929e-09f, -3.504037954e-09f, -3.501636965e-09f, -3.499230970e-09f, -3.496819976e-09f, -3.494403991e-09f, -3.491983023e-09f, -3.489557081e-09f, -3.487126172e-09f, -3.484690305e-09f,
--3.482249486e-09f, -3.479803725e-09f, -3.477353029e-09f, -3.474897406e-09f, -3.472436864e-09f, -3.469971412e-09f, -3.467501056e-09f, -3.465025806e-09f, -3.462545669e-09f, -3.460060653e-09f,
--3.457570767e-09f, -3.455076018e-09f, -3.452576414e-09f, -3.450071964e-09f, -3.447562675e-09f, -3.445048555e-09f, -3.442529614e-09f, -3.440005857e-09f, -3.437477295e-09f, -3.434943934e-09f,
--3.432405783e-09f, -3.429862850e-09f, -3.427315143e-09f, -3.424762670e-09f, -3.422205439e-09f, -3.419643459e-09f, -3.417076737e-09f, -3.414505281e-09f, -3.411929100e-09f, -3.409348202e-09f,
--3.406762595e-09f, -3.404172287e-09f, -3.401577286e-09f, -3.398977600e-09f, -3.396373238e-09f, -3.393764207e-09f, -3.391150516e-09f, -3.388532173e-09f, -3.385909186e-09f, -3.383281564e-09f,
--3.380649313e-09f, -3.378012444e-09f, -3.375370963e-09f, -3.372724879e-09f, -3.370074200e-09f, -3.367418935e-09f, -3.364759091e-09f, -3.362094676e-09f, -3.359425700e-09f, -3.356752170e-09f,
--3.354074094e-09f, -3.351391481e-09f, -3.348704339e-09f, -3.346012676e-09f, -3.343316500e-09f, -3.340615819e-09f, -3.337910642e-09f, -3.335200978e-09f, -3.332486833e-09f, -3.329768217e-09f,
--3.327045138e-09f, -3.324317604e-09f, -3.321585623e-09f, -3.318849204e-09f, -3.316108355e-09f, -3.313363083e-09f, -3.310613399e-09f, -3.307859308e-09f, -3.305100821e-09f, -3.302337945e-09f,
--3.299570689e-09f, -3.296799060e-09f, -3.294023068e-09f, -3.291242720e-09f, -3.288458025e-09f, -3.285668991e-09f, -3.282875627e-09f, -3.280077940e-09f, -3.277275940e-09f, -3.274469634e-09f,
--3.271659030e-09f, -3.268844138e-09f, -3.266024965e-09f, -3.263201520e-09f, -3.260373811e-09f, -3.257541847e-09f, -3.254705635e-09f, -3.251865185e-09f, -3.249020504e-09f, -3.246171601e-09f,
--3.243318485e-09f, -3.240461163e-09f, -3.237599644e-09f, -3.234733937e-09f, -3.231864050e-09f, -3.228989991e-09f, -3.226111768e-09f, -3.223229391e-09f, -3.220342867e-09f, -3.217452205e-09f,
--3.214557413e-09f, -3.211658499e-09f, -3.208755473e-09f, -3.205848342e-09f, -3.202937115e-09f, -3.200021801e-09f, -3.197102407e-09f, -3.194178942e-09f, -3.191251415e-09f, -3.188319834e-09f,
--3.185384207e-09f, -3.182444544e-09f, -3.179500852e-09f, -3.176553139e-09f, -3.173601415e-09f, -3.170645687e-09f, -3.167685965e-09f, -3.164722256e-09f, -3.161754570e-09f, -3.158782914e-09f,
--3.155807297e-09f, -3.152827727e-09f, -3.149844214e-09f, -3.146856765e-09f, -3.143865389e-09f, -3.140870094e-09f, -3.137870889e-09f, -3.134867783e-09f, -3.131860784e-09f, -3.128849899e-09f,
--3.125835139e-09f, -3.122816511e-09f, -3.119794024e-09f, -3.116767687e-09f, -3.113737507e-09f, -3.110703494e-09f, -3.107665656e-09f, -3.104624001e-09f, -3.101578538e-09f, -3.098529275e-09f,
--3.095476222e-09f, -3.092419386e-09f, -3.089358776e-09f, -3.086294400e-09f, -3.083226268e-09f, -3.080154388e-09f, -3.077078767e-09f, -3.073999416e-09f, -3.070916341e-09f, -3.067829553e-09f,
--3.064739059e-09f, -3.061644868e-09f, -3.058546988e-09f, -3.055445428e-09f, -3.052340197e-09f, -3.049231303e-09f, -3.046118755e-09f, -3.043002561e-09f, -3.039882730e-09f, -3.036759270e-09f,
--3.033632190e-09f, -3.030501499e-09f, -3.027367205e-09f, -3.024229317e-09f, -3.021087843e-09f, -3.017942791e-09f, -3.014794172e-09f, -3.011641992e-09f, -3.008486261e-09f, -3.005326987e-09f,
--3.002164179e-09f, -2.998997845e-09f, -2.995827995e-09f, -2.992654636e-09f, -2.989477777e-09f, -2.986297427e-09f, -2.983113594e-09f, -2.979926288e-09f, -2.976735516e-09f, -2.973541287e-09f,
--2.970343610e-09f, -2.967142493e-09f, -2.963937946e-09f, -2.960729976e-09f, -2.957518592e-09f, -2.954303804e-09f, -2.951085619e-09f, -2.947864046e-09f, -2.944639094e-09f, -2.941410771e-09f,
--2.938179086e-09f, -2.934944048e-09f, -2.931705666e-09f, -2.928463947e-09f, -2.925218901e-09f, -2.921970535e-09f, -2.918718860e-09f, -2.915463883e-09f, -2.912205614e-09f, -2.908944060e-09f,
--2.905679230e-09f, -2.902411134e-09f, -2.899139779e-09f, -2.895865175e-09f, -2.892587329e-09f, -2.889306251e-09f, -2.886021950e-09f, -2.882734433e-09f, -2.879443710e-09f, -2.876149789e-09f,
--2.872852679e-09f, -2.869552389e-09f, -2.866248927e-09f, -2.862942301e-09f, -2.859632522e-09f, -2.856319596e-09f, -2.853003533e-09f, -2.849684342e-09f, -2.846362031e-09f, -2.843036609e-09f,
--2.839708084e-09f, -2.836376466e-09f, -2.833041762e-09f, -2.829703982e-09f, -2.826363134e-09f, -2.823019227e-09f, -2.819672269e-09f, -2.816322270e-09f, -2.812969238e-09f, -2.809613181e-09f,
--2.806254108e-09f, -2.802892029e-09f, -2.799526951e-09f, -2.796158883e-09f, -2.792787834e-09f, -2.789413813e-09f, -2.786036828e-09f, -2.782656888e-09f, -2.779274002e-09f, -2.775888178e-09f,
--2.772499425e-09f, -2.769107752e-09f, -2.765713167e-09f, -2.762315680e-09f, -2.758915298e-09f, -2.755512031e-09f, -2.752105887e-09f, -2.748696874e-09f, -2.745285003e-09f, -2.741870280e-09f,
--2.738452716e-09f, -2.735032318e-09f, -2.731609095e-09f, -2.728183057e-09f, -2.724754211e-09f, -2.721322566e-09f, -2.717888132e-09f, -2.714450916e-09f, -2.711010928e-09f, -2.707568176e-09f,
--2.704122668e-09f, -2.700674415e-09f, -2.697223423e-09f, -2.693769703e-09f, -2.690313262e-09f, -2.686854109e-09f, -2.683392254e-09f, -2.679927704e-09f, -2.676460469e-09f, -2.672990556e-09f,
--2.669517976e-09f, -2.666042736e-09f, -2.662564845e-09f, -2.659084312e-09f, -2.655601146e-09f, -2.652115355e-09f, -2.648626947e-09f, -2.645135933e-09f, -2.641642320e-09f, -2.638146117e-09f,
--2.634647333e-09f, -2.631145976e-09f, -2.627642056e-09f, -2.624135580e-09f, -2.620626558e-09f, -2.617114998e-09f, -2.613600909e-09f, -2.610084299e-09f, -2.606565178e-09f, -2.603043554e-09f,
--2.599519436e-09f, -2.595992832e-09f, -2.592463751e-09f, -2.588932202e-09f, -2.585398194e-09f, -2.581861735e-09f, -2.578322833e-09f, -2.574781498e-09f, -2.571237739e-09f, -2.567691563e-09f,
--2.564142980e-09f, -2.560591999e-09f, -2.557038627e-09f, -2.553482874e-09f, -2.549924749e-09f, -2.546364259e-09f, -2.542801415e-09f, -2.539236224e-09f, -2.535668695e-09f, -2.532098837e-09f,
--2.528526658e-09f, -2.524952168e-09f, -2.521375375e-09f, -2.517796287e-09f, -2.514214913e-09f, -2.510631263e-09f, -2.507045344e-09f, -2.503457165e-09f, -2.499866735e-09f, -2.496274063e-09f,
--2.492679158e-09f, -2.489082027e-09f, -2.485482681e-09f, -2.481881126e-09f, -2.478277373e-09f, -2.474671429e-09f, -2.471063304e-09f, -2.467453006e-09f, -2.463840544e-09f, -2.460225926e-09f,
--2.456609161e-09f, -2.452990258e-09f, -2.449369225e-09f, -2.445746072e-09f, -2.442120806e-09f, -2.438493437e-09f, -2.434863973e-09f, -2.431232422e-09f, -2.427598795e-09f, -2.423963098e-09f,
--2.420325341e-09f, -2.416685532e-09f, -2.413043680e-09f, -2.409399795e-09f, -2.405753883e-09f, -2.402105955e-09f, -2.398456018e-09f, -2.394804082e-09f, -2.391150154e-09f, -2.387494245e-09f,
--2.383836361e-09f, -2.380176513e-09f, -2.376514708e-09f, -2.372850955e-09f, -2.369185263e-09f, -2.365517641e-09f, -2.361848097e-09f, -2.358176639e-09f, -2.354503277e-09f, -2.350828019e-09f,
--2.347150874e-09f, -2.343471850e-09f, -2.339790956e-09f, -2.336108201e-09f, -2.332423593e-09f, -2.328737141e-09f, -2.325048853e-09f, -2.321358738e-09f, -2.317666805e-09f, -2.313973063e-09f,
--2.310277519e-09f, -2.306580183e-09f, -2.302881063e-09f, -2.299180168e-09f, -2.295477506e-09f, -2.291773086e-09f, -2.288066917e-09f, -2.284359007e-09f, -2.280649365e-09f, -2.276937999e-09f,
--2.273224919e-09f, -2.269510132e-09f, -2.265793647e-09f, -2.262075473e-09f, -2.258355619e-09f, -2.254634092e-09f, -2.250910902e-09f, -2.247186057e-09f, -2.243459567e-09f, -2.239731438e-09f,
--2.236001680e-09f, -2.232270302e-09f, -2.228537312e-09f, -2.224802719e-09f, -2.221066531e-09f, -2.217328757e-09f, -2.213589405e-09f, -2.209848484e-09f, -2.206106002e-09f, -2.202361969e-09f,
--2.198616392e-09f, -2.194869281e-09f, -2.191120643e-09f, -2.187370488e-09f, -2.183618823e-09f, -2.179865658e-09f, -2.176111001e-09f, -2.172354861e-09f, -2.168597245e-09f, -2.164838163e-09f,
--2.161077623e-09f, -2.157315634e-09f, -2.153552204e-09f, -2.149787342e-09f, -2.146021056e-09f, -2.142253354e-09f, -2.138484247e-09f, -2.134713740e-09f, -2.130941845e-09f, -2.127168568e-09f,
--2.123393918e-09f, -2.119617905e-09f, -2.115840536e-09f, -2.112061819e-09f, -2.108281765e-09f, -2.104500380e-09f, -2.100717673e-09f, -2.096933654e-09f, -2.093148329e-09f, -2.089361709e-09f,
--2.085573801e-09f, -2.081784614e-09f, -2.077994157e-09f, -2.074202437e-09f, -2.070409463e-09f, -2.066615245e-09f, -2.062819789e-09f, -2.059023105e-09f, -2.055225202e-09f, -2.051426087e-09f,
--2.047625769e-09f, -2.043824257e-09f, -2.040021559e-09f, -2.036217683e-09f, -2.032412638e-09f, -2.028606433e-09f, -2.024799076e-09f, -2.020990574e-09f, -2.017180938e-09f, -2.013370174e-09f,
--2.009558293e-09f, -2.005745301e-09f, -2.001931207e-09f, -1.998116021e-09f, -1.994299750e-09f, -1.990482402e-09f, -1.986663987e-09f, -1.982844512e-09f, -1.979023986e-09f, -1.975202417e-09f,
--1.971379814e-09f, -1.967556185e-09f, -1.963731539e-09f, -1.959905883e-09f, -1.956079227e-09f, -1.952251579e-09f, -1.948422946e-09f, -1.944593339e-09f, -1.940762763e-09f, -1.936931230e-09f,
--1.933098745e-09f, -1.929265319e-09f, -1.925430959e-09f, -1.921595673e-09f, -1.917759471e-09f, -1.913922360e-09f, -1.910084348e-09f, -1.906245445e-09f, -1.902405658e-09f, -1.898564996e-09f,
--1.894723467e-09f, -1.890881079e-09f, -1.887037841e-09f, -1.883193761e-09f, -1.879348848e-09f, -1.875503109e-09f, -1.871656553e-09f, -1.867809189e-09f, -1.863961024e-09f, -1.860112067e-09f,
--1.856262326e-09f, -1.852411810e-09f, -1.848560526e-09f, -1.844708484e-09f, -1.840855691e-09f, -1.837002156e-09f, -1.833147887e-09f, -1.829292892e-09f, -1.825437179e-09f, -1.821580758e-09f,
--1.817723635e-09f, -1.813865820e-09f, -1.810007320e-09f, -1.806148144e-09f, -1.802288300e-09f, -1.798427796e-09f, -1.794566641e-09f, -1.790704842e-09f, -1.786842409e-09f, -1.782979349e-09f,
--1.779115670e-09f, -1.775251381e-09f, -1.771386490e-09f, -1.767521005e-09f, -1.763654934e-09f, -1.759788286e-09f, -1.755921068e-09f, -1.752053289e-09f, -1.748184958e-09f, -1.744316082e-09f,
--1.740446669e-09f, -1.736576728e-09f, -1.732706266e-09f, -1.728835293e-09f, -1.724963816e-09f, -1.721091843e-09f, -1.717219383e-09f, -1.713346443e-09f, -1.709473033e-09f, -1.705599159e-09f,
--1.701724830e-09f, -1.697850055e-09f, -1.693974840e-09f, -1.690099196e-09f, -1.686223129e-09f, -1.682346648e-09f, -1.678469760e-09f, -1.674592475e-09f, -1.670714799e-09f, -1.666836742e-09f,
--1.662958311e-09f, -1.659079515e-09f, -1.655200361e-09f, -1.651320858e-09f, -1.647441013e-09f, -1.643560835e-09f, -1.639680332e-09f, -1.635799512e-09f, -1.631918382e-09f, -1.628036952e-09f,
--1.624155228e-09f, -1.620273220e-09f, -1.616390935e-09f, -1.612508381e-09f, -1.608625567e-09f, -1.604742499e-09f, -1.600859187e-09f, -1.596975638e-09f, -1.593091861e-09f, -1.589207863e-09f,
--1.585323652e-09f, -1.581439237e-09f, -1.577554625e-09f, -1.573669824e-09f, -1.569784843e-09f, -1.565899689e-09f, -1.562014370e-09f, -1.558128895e-09f, -1.554243271e-09f, -1.550357506e-09f,
--1.546471609e-09f, -1.542585586e-09f, -1.538699447e-09f, -1.534813199e-09f, -1.530926850e-09f, -1.527040407e-09f, -1.523153880e-09f, -1.519267275e-09f, -1.515380601e-09f, -1.511493866e-09f,
--1.507607078e-09f, -1.503720243e-09f, -1.499833372e-09f, -1.495946470e-09f, -1.492059547e-09f, -1.488172609e-09f, -1.484285666e-09f, -1.480398724e-09f, -1.476511793e-09f, -1.472624878e-09f,
--1.468737990e-09f, -1.464851134e-09f, -1.460964320e-09f, -1.457077554e-09f, -1.453190846e-09f, -1.449304202e-09f, -1.445417630e-09f, -1.441531139e-09f, -1.437644736e-09f, -1.433758429e-09f,
--1.429872226e-09f, -1.425986135e-09f, -1.422100162e-09f, -1.418214318e-09f, -1.414328608e-09f, -1.410443040e-09f, -1.406557624e-09f, -1.402672365e-09f, -1.398787273e-09f, -1.394902355e-09f,
--1.391017618e-09f, -1.387133071e-09f, -1.383248720e-09f, -1.379364575e-09f, -1.375480642e-09f, -1.371596930e-09f, -1.367713446e-09f, -1.363830197e-09f, -1.359947192e-09f, -1.356064438e-09f,
--1.352181943e-09f, -1.348299715e-09f, -1.344417761e-09f, -1.340536089e-09f, -1.336654707e-09f, -1.332773622e-09f, -1.328892842e-09f, -1.325012375e-09f, -1.321132228e-09f, -1.317252409e-09f,
--1.313372926e-09f, -1.309493786e-09f, -1.305614998e-09f, -1.301736567e-09f, -1.297858503e-09f, -1.293980813e-09f, -1.290103505e-09f, -1.286226585e-09f, -1.282350062e-09f, -1.278473943e-09f,
--1.274598237e-09f, -1.270722949e-09f, -1.266848089e-09f, -1.262973663e-09f, -1.259099680e-09f, -1.255226146e-09f, -1.251353069e-09f, -1.247480458e-09f, -1.243608318e-09f, -1.239736659e-09f,
--1.235865487e-09f, -1.231994810e-09f, -1.228124636e-09f, -1.224254972e-09f, -1.220385825e-09f, -1.216517204e-09f, -1.212649115e-09f, -1.208781566e-09f, -1.204914564e-09f, -1.201048118e-09f,
--1.197182234e-09f, -1.193316920e-09f, -1.189452184e-09f, -1.185588032e-09f, -1.181724473e-09f, -1.177861514e-09f, -1.173999161e-09f, -1.170137424e-09f, -1.166276308e-09f, -1.162415822e-09f,
--1.158555974e-09f, -1.154696769e-09f, -1.150838216e-09f, -1.146980322e-09f, -1.143123095e-09f, -1.139266542e-09f, -1.135410670e-09f, -1.131555487e-09f, -1.127700999e-09f, -1.123847215e-09f,
--1.119994142e-09f, -1.116141787e-09f, -1.112290158e-09f, -1.108439261e-09f, -1.104589104e-09f, -1.100739695e-09f, -1.096891040e-09f, -1.093043148e-09f, -1.089196024e-09f, -1.085349678e-09f,
--1.081504115e-09f, -1.077659344e-09f, -1.073815371e-09f, -1.069972204e-09f, -1.066129850e-09f, -1.062288316e-09f, -1.058447610e-09f, -1.054607739e-09f, -1.050768709e-09f, -1.046930529e-09f,
--1.043093205e-09f, -1.039256746e-09f, -1.035421157e-09f, -1.031586446e-09f, -1.027752620e-09f, -1.023919687e-09f, -1.020087654e-09f, -1.016256528e-09f, -1.012426315e-09f, -1.008597024e-09f,
--1.004768661e-09f, -1.000941234e-09f, -9.971147499e-10f, -9.932892153e-10f, -9.894646377e-10f, -9.856410242e-10f, -9.818183819e-10f, -9.779967180e-10f, -9.741760395e-10f, -9.703563535e-10f,
--9.665376672e-10f, -9.627199877e-10f, -9.589033219e-10f, -9.550876770e-10f, -9.512730601e-10f, -9.474594782e-10f, -9.436469384e-10f, -9.398354477e-10f, -9.360250131e-10f, -9.322156418e-10f,
--9.284073406e-10f, -9.246001167e-10f, -9.207939771e-10f, -9.169889287e-10f, -9.131849785e-10f, -9.093821336e-10f, -9.055804010e-10f, -9.017797876e-10f, -8.979803003e-10f, -8.941819462e-10f,
--8.903847322e-10f, -8.865886653e-10f, -8.827937524e-10f, -8.790000004e-10f, -8.752074163e-10f, -8.714160070e-10f, -8.676257794e-10f, -8.638367405e-10f, -8.600488970e-10f, -8.562622560e-10f,
--8.524768243e-10f, -8.486926088e-10f, -8.449096163e-10f, -8.411278538e-10f, -8.373473281e-10f, -8.335680460e-10f, -8.297900145e-10f, -8.260132402e-10f, -8.222377301e-10f, -8.184634910e-10f,
--8.146905297e-10f, -8.109188531e-10f, -8.071484678e-10f, -8.033793808e-10f, -7.996115987e-10f, -7.958451285e-10f, -7.920799768e-10f, -7.883161504e-10f, -7.845536561e-10f, -7.807925007e-10f,
--7.770326908e-10f, -7.732742333e-10f, -7.695171349e-10f, -7.657614022e-10f, -7.620070420e-10f, -7.582540610e-10f, -7.545024659e-10f, -7.507522634e-10f, -7.470034603e-10f, -7.432560630e-10f,
--7.395100785e-10f, -7.357655132e-10f, -7.320223739e-10f, -7.282806672e-10f, -7.245403998e-10f, -7.208015783e-10f, -7.170642093e-10f, -7.133282994e-10f, -7.095938553e-10f, -7.058608836e-10f,
--7.021293909e-10f, -6.983993836e-10f, -6.946708686e-10f, -6.909438522e-10f, -6.872183412e-10f, -6.834943419e-10f, -6.797718611e-10f, -6.760509052e-10f, -6.723314809e-10f, -6.686135945e-10f,
--6.648972527e-10f, -6.611824619e-10f, -6.574692287e-10f, -6.537575595e-10f, -6.500474610e-10f, -6.463389394e-10f, -6.426320014e-10f, -6.389266534e-10f, -6.352229019e-10f, -6.315207533e-10f,
--6.278202140e-10f, -6.241212905e-10f, -6.204239893e-10f, -6.167283167e-10f, -6.130342792e-10f, -6.093418833e-10f, -6.056511351e-10f, -6.019620413e-10f, -5.982746082e-10f, -5.945888421e-10f,
--5.909047494e-10f, -5.872223365e-10f, -5.835416098e-10f, -5.798625755e-10f, -5.761852401e-10f, -5.725096098e-10f, -5.688356910e-10f, -5.651634901e-10f, -5.614930132e-10f, -5.578242668e-10f,
--5.541572570e-10f, -5.504919903e-10f, -5.468284728e-10f, -5.431667109e-10f, -5.395067107e-10f, -5.358484787e-10f, -5.321920209e-10f, -5.285373437e-10f, -5.248844532e-10f, -5.212333558e-10f,
--5.175840575e-10f, -5.139365647e-10f, -5.102908835e-10f, -5.066470201e-10f, -5.030049807e-10f, -4.993647714e-10f, -4.957263985e-10f, -4.920898681e-10f, -4.884551864e-10f, -4.848223594e-10f,
--4.811913933e-10f, -4.775622943e-10f, -4.739350685e-10f, -4.703097219e-10f, -4.666862608e-10f, -4.630646911e-10f, -4.594450190e-10f, -4.558272505e-10f, -4.522113917e-10f, -4.485974488e-10f,
--4.449854276e-10f, -4.413753344e-10f, -4.377671751e-10f, -4.341609557e-10f, -4.305566823e-10f, -4.269543609e-10f, -4.233539975e-10f, -4.197555981e-10f, -4.161591686e-10f, -4.125647152e-10f,
--4.089722437e-10f, -4.053817601e-10f, -4.017932703e-10f, -3.982067804e-10f, -3.946222962e-10f, -3.910398237e-10f, -3.874593689e-10f, -3.838809375e-10f, -3.803045356e-10f, -3.767301690e-10f,
--3.731578437e-10f, -3.695875655e-10f, -3.660193403e-10f, -3.624531739e-10f, -3.588890723e-10f, -3.553270412e-10f, -3.517670865e-10f, -3.482092141e-10f, -3.446534297e-10f, -3.410997392e-10f,
--3.375481484e-10f, -3.339986632e-10f, -3.304512892e-10f, -3.269060323e-10f, -3.233628982e-10f, -3.198218927e-10f, -3.162830217e-10f, -3.127462907e-10f, -3.092117056e-10f, -3.056792722e-10f,
--3.021489960e-10f, -2.986208829e-10f, -2.950949386e-10f, -2.915711687e-10f, -2.880495789e-10f, -2.845301750e-10f, -2.810129626e-10f, -2.774979474e-10f, -2.739851350e-10f, -2.704745311e-10f,
--2.669661413e-10f, -2.634599713e-10f, -2.599560266e-10f, -2.564543130e-10f, -2.529548359e-10f, -2.494576011e-10f, -2.459626140e-10f, -2.424698804e-10f, -2.389794056e-10f, -2.354911954e-10f,
--2.320052553e-10f, -2.285215908e-10f, -2.250402074e-10f, -2.215611108e-10f, -2.180843063e-10f, -2.146097996e-10f, -2.111375961e-10f, -2.076677013e-10f, -2.042001207e-10f, -2.007348599e-10f,
--1.972719242e-10f, -1.938113191e-10f, -1.903530501e-10f, -1.868971226e-10f, -1.834435421e-10f, -1.799923140e-10f, -1.765434437e-10f, -1.730969366e-10f, -1.696527982e-10f, -1.662110337e-10f,
--1.627716487e-10f, -1.593346484e-10f, -1.559000383e-10f, -1.524678237e-10f, -1.490380099e-10f, -1.456106023e-10f, -1.421856062e-10f, -1.387630270e-10f, -1.353428700e-10f, -1.319251404e-10f,
--1.285098436e-10f, -1.250969848e-10f, -1.216865694e-10f, -1.182786025e-10f, -1.148730896e-10f, -1.114700358e-10f, -1.080694463e-10f, -1.046713264e-10f, -1.012756814e-10f, -9.788251641e-11f,
--9.449183669e-11f, -9.110364743e-11f, -8.771795382e-11f, -8.433476105e-11f, -8.095407428e-11f, -7.757589870e-11f, -7.420023945e-11f, -7.082710167e-11f, -6.745649053e-11f, -6.408841113e-11f,
--6.072286860e-11f, -5.735986806e-11f, -5.399941461e-11f, -5.064151335e-11f, -4.728616936e-11f, -4.393338771e-11f, -4.058317348e-11f, -3.723553173e-11f, -3.389046751e-11f, -3.054798585e-11f,
--2.720809180e-11f, -2.387079037e-11f, -2.053608658e-11f, -1.720398544e-11f, -1.387449194e-11f, -1.054761107e-11f, -7.223347816e-12f, -3.901707142e-12f, -3.901707142e-12f
-};
diff --git a/intern/audaspace/intern/AUD_LinearResampleFactory.cpp b/intern/audaspace/intern/AUD_LinearResampleFactory.cpp
deleted file mode 100644
index cd573f1047c..00000000000
--- a/intern/audaspace/intern/AUD_LinearResampleFactory.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_LinearResampleFactory.cpp
- * \ingroup audaspaceintern
- */
-
-
-#include "AUD_LinearResampleFactory.h"
-#include "AUD_LinearResampleReader.h"
-
-AUD_LinearResampleFactory::AUD_LinearResampleFactory(boost::shared_ptr<AUD_IFactory> factory,
- AUD_DeviceSpecs specs) :
- AUD_MixerFactory(factory, specs)
-{
-}
-
-boost::shared_ptr<AUD_IReader> AUD_LinearResampleFactory::createReader()
-{
- return boost::shared_ptr<AUD_IReader>(new AUD_LinearResampleReader(getReader(), m_specs.specs));
-}
diff --git a/intern/audaspace/intern/AUD_LinearResampleFactory.h b/intern/audaspace/intern/AUD_LinearResampleFactory.h
deleted file mode 100644
index ceb29ef2edd..00000000000
--- a/intern/audaspace/intern/AUD_LinearResampleFactory.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_LinearResampleFactory.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_LINEARRESAMPLEFACTORY_H__
-#define __AUD_LINEARRESAMPLEFACTORY_H__
-
-#include "AUD_MixerFactory.h"
-
-/**
- * This factory creates a resampling reader that does simple linear resampling.
- */
-class AUD_LinearResampleFactory : public AUD_MixerFactory
-{
-private:
- // hide copy constructor and operator=
- AUD_LinearResampleFactory(const AUD_LinearResampleFactory&);
- AUD_LinearResampleFactory& operator=(const AUD_LinearResampleFactory&);
-
-public:
- /**
- * Creates a new factory.
- * \param factory The input factory.
- * \param specs The target specifications.
- */
- AUD_LinearResampleFactory(boost::shared_ptr<AUD_IFactory> factory, AUD_DeviceSpecs specs);
-
- virtual boost::shared_ptr<AUD_IReader> createReader();
-};
-
-#endif //__AUD_LINEARRESAMPLEFACTORY_H__
diff --git a/intern/audaspace/intern/AUD_LinearResampleReader.cpp b/intern/audaspace/intern/AUD_LinearResampleReader.cpp
deleted file mode 100644
index b342b8f31fb..00000000000
--- a/intern/audaspace/intern/AUD_LinearResampleReader.cpp
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_LinearResampleReader.cpp
- * \ingroup audaspaceintern
- */
-
-
-#include "AUD_LinearResampleReader.h"
-
-#include <cmath>
-#include <cstring>
-
-#define CC m_channels + channel
-
-AUD_LinearResampleReader::AUD_LinearResampleReader(boost::shared_ptr<AUD_IReader> reader,
- AUD_Specs specs) :
- AUD_ResampleReader(reader, specs.rate),
- m_channels(reader->getSpecs().channels),
- m_cache_pos(0),
- m_cache_ok(false)
-{
- specs.channels = m_channels;
- m_cache.resize(2 * AUD_SAMPLE_SIZE(specs));
-}
-
-void AUD_LinearResampleReader::seek(int position)
-{
- position = floor(position * double(m_reader->getSpecs().rate) / double(m_rate));
- m_reader->seek(position);
- m_cache_ok = false;
- m_cache_pos = 0;
-}
-
-int AUD_LinearResampleReader::getLength() const
-{
- return floor(m_reader->getLength() * double(m_rate) / double(m_reader->getSpecs().rate));
-}
-
-int AUD_LinearResampleReader::getPosition() const
-{
- return floor((m_reader->getPosition() + (m_cache_ok ? m_cache_pos - 1 : 0))
- * m_rate / m_reader->getSpecs().rate);
-}
-
-AUD_Specs AUD_LinearResampleReader::getSpecs() const
-{
- AUD_Specs specs = m_reader->getSpecs();
- specs.rate = m_rate;
- return specs;
-}
-
-void AUD_LinearResampleReader::read(int& length, bool& eos, sample_t* buffer)
-{
- if(length == 0)
- return;
-
- AUD_Specs specs = m_reader->getSpecs();
-
- int samplesize = AUD_SAMPLE_SIZE(specs);
- int size = length;
- float factor = m_rate / m_reader->getSpecs().rate;
- float spos = 0.0f;
- sample_t low, high;
- eos = false;
-
- // check for channels changed
-
- if(specs.channels != m_channels)
- {
- m_cache.resize(2 * samplesize);
- m_channels = specs.channels;
- m_cache_ok = false;
- }
-
- if(factor == 1 && (!m_cache_ok || m_cache_pos == 1))
- {
- // can read directly!
- m_reader->read(length, eos, buffer);
-
- if(length > 0)
- {
- memcpy(m_cache.getBuffer() + m_channels, buffer + m_channels * (length - 1), samplesize);
- m_cache_pos = 1;
- m_cache_ok = true;
- }
-
- return;
- }
-
- int len;
- sample_t* buf;
-
- if(m_cache_ok)
- {
- int need = ceil(length / factor + m_cache_pos) - 1;
-
- len = need;
-
- m_buffer.assureSize((len + 2) * samplesize);
- buf = m_buffer.getBuffer();
-
- memcpy(buf, m_cache.getBuffer(), 2 * samplesize);
- m_reader->read(len, eos, buf + 2 * m_channels);
-
- if(len < need)
- length = floor((len + 1 - m_cache_pos) * factor);
- }
- else
- {
- m_cache_pos = 1 - 1 / factor;
-
- int need = ceil(length / factor + m_cache_pos);
-
- len = need;
-
- m_buffer.assureSize((len + 1) * samplesize);
- buf = m_buffer.getBuffer();
-
- memset(buf, 0, samplesize);
- m_reader->read(len, eos, buf + m_channels);
-
- if(len == 0)
- {
- length = 0;
- return;
- }
-
- if(len < need)
- {
- length = floor((len - m_cache_pos) * factor);
- }
-
- m_cache_ok = true;
- }
-
- if(length == 0)
- return;
-
- for(int channel = 0; channel < m_channels; channel++)
- {
- for(int i = 0; i < length; i++)
- {
- spos = (i + 1) / factor + m_cache_pos;
-
- low = buf[(int)floor(spos) * CC];
- high = buf[(int)ceil(spos) * CC];
-
- buffer[i * CC] = low + (spos - floor(spos)) * (high - low);
- }
- }
-
- if(floor(spos) == spos)
- {
- memcpy(m_cache.getBuffer() + m_channels, buf + int(floor(spos)) * m_channels, samplesize);
- m_cache_pos = 1;
- }
- else
- {
- memcpy(m_cache.getBuffer(), buf + int(floor(spos)) * m_channels, 2 * samplesize);
- m_cache_pos = spos - floor(spos);
- }
-
- eos &= length < size;
-}
diff --git a/intern/audaspace/intern/AUD_LinearResampleReader.h b/intern/audaspace/intern/AUD_LinearResampleReader.h
deleted file mode 100644
index 9beea251c07..00000000000
--- a/intern/audaspace/intern/AUD_LinearResampleReader.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_LinearResampleReader.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_LINEARRESAMPLEREADER_H__
-#define __AUD_LINEARRESAMPLEREADER_H__
-
-#include "AUD_ResampleReader.h"
-#include "AUD_Buffer.h"
-
-/**
- * This resampling reader does simple first-order hold resampling.
- */
-class AUD_LinearResampleReader : public AUD_ResampleReader
-{
-private:
- /**
- * The reader channels.
- */
- AUD_Channels m_channels;
-
- /**
- * The position in the cache.
- */
- float m_cache_pos;
-
- /**
- * The sound output buffer.
- */
- AUD_Buffer m_buffer;
-
- /**
- * The input caching buffer.
- */
- AUD_Buffer m_cache;
-
- /**
- * Whether the cache contains valid data.
- */
- bool m_cache_ok;
-
- // hide copy constructor and operator=
- AUD_LinearResampleReader(const AUD_LinearResampleReader&);
- AUD_LinearResampleReader& operator=(const AUD_LinearResampleReader&);
-
-public:
- /**
- * Creates a resampling reader.
- * \param reader The reader to mix.
- * \param specs The target specification.
- */
- AUD_LinearResampleReader(boost::shared_ptr<AUD_IReader> reader, AUD_Specs specs);
-
- virtual void seek(int position);
- virtual int getLength() const;
- virtual int getPosition() const;
- virtual AUD_Specs getSpecs() const;
- virtual void read(int& length, bool& eos, sample_t* buffer);
-};
-
-#endif //__AUD_LINEARRESAMPLEREADER_H__
diff --git a/intern/audaspace/intern/AUD_Mixer.cpp b/intern/audaspace/intern/AUD_Mixer.cpp
deleted file mode 100644
index 78dfaddd27a..00000000000
--- a/intern/audaspace/intern/AUD_Mixer.cpp
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_Mixer.cpp
- * \ingroup audaspaceintern
- */
-
-
-#include "AUD_Mixer.h"
-#include "AUD_IReader.h"
-
-#include <cstring>
-
-AUD_Mixer::AUD_Mixer(AUD_DeviceSpecs specs) :
- m_specs(specs)
-{
- switch(m_specs.format)
- {
- case AUD_FORMAT_U8:
- m_convert = AUD_convert_float_u8;
- break;
- case AUD_FORMAT_S16:
- m_convert = AUD_convert_float_s16;
- break;
- case AUD_FORMAT_S24:
-
-#ifdef __BIG_ENDIAN__
- m_convert = AUD_convert_float_s24_be;
-#else
- m_convert = AUD_convert_float_s24_le;
-#endif
- break;
- case AUD_FORMAT_S32:
- m_convert = AUD_convert_float_s32;
- break;
- case AUD_FORMAT_FLOAT32:
- m_convert = AUD_convert_copy<float>;
- break;
- case AUD_FORMAT_FLOAT64:
- m_convert = AUD_convert_float_double;
- break;
- default:
- break;
- }
-}
-
-AUD_DeviceSpecs AUD_Mixer::getSpecs() const
-{
- return m_specs;
-}
-
-void AUD_Mixer::setSpecs(AUD_Specs specs)
-{
- m_specs.specs = specs;
-}
-
-void AUD_Mixer::clear(int length)
-{
- m_buffer.assureSize(length * m_specs.channels * AUD_SAMPLE_SIZE(m_specs));
-
- m_length = length;
-
- memset(m_buffer.getBuffer(), 0, length * m_specs.channels * AUD_SAMPLE_SIZE(m_specs));
-}
-
-void AUD_Mixer::mix(sample_t* buffer, int start, int length, float volume)
-{
- sample_t* out = m_buffer.getBuffer();
-
- length = (AUD_MIN(m_length, length + start) - start) * m_specs.channels;
- start *= m_specs.channels;
-
- for(int i = 0; i < length; i++)
- out[i + start] += buffer[i] * volume;
-}
-
-void AUD_Mixer::mix(sample_t* buffer, int start, int length, float volume_to, float volume_from)
-{
- sample_t* out = m_buffer.getBuffer();
-
- length = (std::min(m_length, length + start) - start);
-
- for(int i = 0; i < length; i++)
- {
- float volume = volume_from * (1.0f - i / float(length)) + volume_to * (i / float(length));
-
- for(int c = 0; c < m_specs.channels; c++)
- out[(i + start) * m_specs.channels + c] += buffer[i * m_specs.channels + c] * volume;
- }
-}
-
-void AUD_Mixer::read(data_t* buffer, float volume)
-{
- sample_t* out = m_buffer.getBuffer();
-
- for(int i = 0; i < m_length * m_specs.channels; i++)
- out[i] *= volume;
-
- m_convert(buffer, (data_t*) out, m_length * m_specs.channels);
-}
diff --git a/intern/audaspace/intern/AUD_Mixer.h b/intern/audaspace/intern/AUD_Mixer.h
deleted file mode 100644
index 0735fee715b..00000000000
--- a/intern/audaspace/intern/AUD_Mixer.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_Mixer.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_MIXER_H__
-#define __AUD_MIXER_H__
-
-#include "AUD_ConverterFunctions.h"
-#include "AUD_Buffer.h"
-class AUD_IReader;
-
-#include <boost/shared_ptr.hpp>
-
-/**
- * This abstract class is able to mix audiosignals with same channel count
- * and sample rate and convert it to a specific output format.
- */
-class AUD_Mixer
-{
-protected:
- /**
- * The output specification.
- */
- AUD_DeviceSpecs m_specs;
-
- /**
- * The length of the mixing buffer.
- */
- int m_length;
-
- /**
- * The mixing buffer.
- */
- AUD_Buffer m_buffer;
-
- /**
- * Converter function.
- */
- AUD_convert_f m_convert;
-
-public:
- /**
- * Creates the mixer.
- */
- AUD_Mixer(AUD_DeviceSpecs specs);
-
- /**
- * Destroys the mixer.
- */
- virtual ~AUD_Mixer() {}
-
- /**
- * Returns the target specification for superposing.
- * \return The target specification.
- */
- AUD_DeviceSpecs getSpecs() const;
-
- /**
- * Sets the target specification for superposing.
- * \param specs The target specification.
- */
- void setSpecs(AUD_Specs specs);
-
- /**
- * Mixes a buffer.
- * \param buffer The buffer to superpose.
- * \param start The start sample of the buffer.
- * \param length The length of the buffer in samples.
- * \param volume The mixing volume. Must be a value between 0.0 and 1.0.
- */
- void mix(sample_t* buffer, int start, int length, float volume);
-
- void mix(sample_t* buffer, int start, int length, float volume_to, float volume_from);
-
- /**
- * Writes the mixing buffer into an output buffer.
- * \param buffer The target buffer for superposing.
- * \param volume The mixing volume. Must be a value between 0.0 and 1.0.
- */
- void read(data_t* buffer, float volume);
-
- /**
- * Clears the mixing buffer.
- * \param length The length of the buffer in samples.
- */
- void clear(int length);
-};
-
-#endif //__AUD_MIXER_H__
diff --git a/intern/audaspace/intern/AUD_MixerFactory.cpp b/intern/audaspace/intern/AUD_MixerFactory.cpp
deleted file mode 100644
index f3f00ea2cb6..00000000000
--- a/intern/audaspace/intern/AUD_MixerFactory.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_MixerFactory.cpp
- * \ingroup audaspaceintern
- */
-
-
-#include "AUD_MixerFactory.h"
-#include "AUD_IReader.h"
-
-boost::shared_ptr<AUD_IReader> AUD_MixerFactory::getReader() const
-{
- return m_factory->createReader();
-}
-
-AUD_MixerFactory::AUD_MixerFactory(boost::shared_ptr<AUD_IFactory> factory,
- AUD_DeviceSpecs specs) :
- m_specs(specs), m_factory(factory)
-{
-}
-
-AUD_DeviceSpecs AUD_MixerFactory::getSpecs() const
-{
- return m_specs;
-}
-
-boost::shared_ptr<AUD_IFactory> AUD_MixerFactory::getFactory() const
-{
- return m_factory;
-}
diff --git a/intern/audaspace/intern/AUD_MixerFactory.h b/intern/audaspace/intern/AUD_MixerFactory.h
deleted file mode 100644
index 1d2b6a4cc91..00000000000
--- a/intern/audaspace/intern/AUD_MixerFactory.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_MixerFactory.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_MIXERFACTORY_H__
-#define __AUD_MIXERFACTORY_H__
-
-#include "AUD_IFactory.h"
-
-/**
- * This factory is a base class for all mixer factories.
- */
-class AUD_MixerFactory : public AUD_IFactory
-{
-protected:
- /**
- * The target specification for resampling.
- */
- const AUD_DeviceSpecs m_specs;
-
- /**
- * If there is no reader it is created out of this factory.
- */
- boost::shared_ptr<AUD_IFactory> m_factory;
-
- /**
- * Returns the reader created out of the factory.
- * This method can be used for the createReader function of the implementing
- * classes.
- * \return The reader to mix.
- */
- boost::shared_ptr<AUD_IReader> getReader() const;
-
-public:
- /**
- * Creates a new factory.
- * \param factory The factory to create the readers to mix out of.
- * \param specs The target specification.
- */
- AUD_MixerFactory(boost::shared_ptr<AUD_IFactory> factory, AUD_DeviceSpecs specs);
-
- /**
- * Returns the target specification for resampling.
- */
- AUD_DeviceSpecs getSpecs() const;
-
- /**
- * Returns the saved factory.
- * \return The factory.
- */
- boost::shared_ptr<AUD_IFactory> getFactory() const;
-};
-
-#endif //__AUD_MIXERFACTORY_H__
diff --git a/intern/audaspace/intern/AUD_MutexLock.h b/intern/audaspace/intern/AUD_MutexLock.h
deleted file mode 100644
index b6f6d2b4334..00000000000
--- a/intern/audaspace/intern/AUD_MutexLock.h
+++ /dev/null
@@ -1,24 +0,0 @@
-#ifndef AUD_MUTEXLOCK_H
-#define AUD_MUTEXLOCK_H
-
-#include "AUD_ILockable.h"
-
-class AUD_MutexLock
-{
-public:
- inline AUD_MutexLock(AUD_ILockable& lockable) :
- lockable(lockable)
- {
- lockable.lock();
- }
-
- inline ~AUD_MutexLock()
- {
- lockable.unlock();
- }
-
-private:
- AUD_ILockable& lockable;
-};
-
-#endif // AUD_MUTEXLOCK_H
diff --git a/intern/audaspace/intern/AUD_NULLDevice.cpp b/intern/audaspace/intern/AUD_NULLDevice.cpp
deleted file mode 100644
index 98a0d324c61..00000000000
--- a/intern/audaspace/intern/AUD_NULLDevice.cpp
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_NULLDevice.cpp
- * \ingroup audaspaceintern
- */
-
-
-#include <limits>
-
-#include "AUD_NULLDevice.h"
-
-AUD_NULLDevice::AUD_NULLHandle::AUD_NULLHandle()
-{
-}
-
-bool AUD_NULLDevice::AUD_NULLHandle::pause()
-{
- return false;
-}
-
-bool AUD_NULLDevice::AUD_NULLHandle::resume()
-{
- return false;
-}
-
-bool AUD_NULLDevice::AUD_NULLHandle::stop()
-{
- return false;
-}
-
-bool AUD_NULLDevice::AUD_NULLHandle::getKeep()
-{
- return false;
-}
-
-bool AUD_NULLDevice::AUD_NULLHandle::setKeep(bool keep)
-{
- return false;
-}
-
-bool AUD_NULLDevice::AUD_NULLHandle::seek(float position)
-{
- return false;
-}
-
-float AUD_NULLDevice::AUD_NULLHandle::getPosition()
-{
- return std::numeric_limits<float>::quiet_NaN();
-}
-
-AUD_Status AUD_NULLDevice::AUD_NULLHandle::getStatus()
-{
- return AUD_STATUS_INVALID;
-}
-
-float AUD_NULLDevice::AUD_NULLHandle::getVolume()
-{
- return std::numeric_limits<float>::quiet_NaN();
-}
-
-bool AUD_NULLDevice::AUD_NULLHandle::setVolume(float volume)
-{
- return false;
-}
-
-float AUD_NULLDevice::AUD_NULLHandle::getPitch()
-{
- return std::numeric_limits<float>::quiet_NaN();
-}
-
-bool AUD_NULLDevice::AUD_NULLHandle::setPitch(float pitch)
-{
- return false;
-}
-
-int AUD_NULLDevice::AUD_NULLHandle::getLoopCount()
-{
- return 0;
-}
-
-bool AUD_NULLDevice::AUD_NULLHandle::setLoopCount(int count)
-{
- return false;
-}
-
-bool AUD_NULLDevice::AUD_NULLHandle::setStopCallback(stopCallback callback, void* data)
-{
- return false;
-}
-
-AUD_NULLDevice::AUD_NULLDevice()
-{
-}
-
-AUD_NULLDevice::~AUD_NULLDevice()
-{
-}
-
-AUD_DeviceSpecs AUD_NULLDevice::getSpecs() const
-{
- AUD_DeviceSpecs specs;
- specs.channels = AUD_CHANNELS_INVALID;
- specs.format = AUD_FORMAT_INVALID;
- specs.rate = AUD_RATE_INVALID;
- return specs;
-}
-
-boost::shared_ptr<AUD_IHandle> AUD_NULLDevice::play(boost::shared_ptr<AUD_IReader> reader, bool keep)
-{
- return boost::shared_ptr<AUD_IHandle>(new AUD_NULLHandle());
-}
-
-boost::shared_ptr<AUD_IHandle> AUD_NULLDevice::play(boost::shared_ptr<AUD_IFactory> factory, bool keep)
-{
- return boost::shared_ptr<AUD_IHandle>(new AUD_NULLHandle());
-}
-
-void AUD_NULLDevice::stopAll()
-{
-}
-
-void AUD_NULLDevice::lock()
-{
-}
-
-void AUD_NULLDevice::unlock()
-{
-}
-
-float AUD_NULLDevice::getVolume() const
-{
- return std::numeric_limits<float>::quiet_NaN();
-}
-
-void AUD_NULLDevice::setVolume(float volume)
-{
-}
diff --git a/intern/audaspace/intern/AUD_NULLDevice.h b/intern/audaspace/intern/AUD_NULLDevice.h
deleted file mode 100644
index ae1435bbeea..00000000000
--- a/intern/audaspace/intern/AUD_NULLDevice.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_NULLDevice.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_NULLDEVICE_H__
-#define __AUD_NULLDEVICE_H__
-
-#include "AUD_IReader.h"
-#include "AUD_IDevice.h"
-#include "AUD_IHandle.h"
-
-/**
- * This device plays nothing.
- */
-class AUD_NULLDevice : public AUD_IDevice
-{
-private:
- class AUD_NULLHandle : public AUD_IHandle
- {
- public:
-
- AUD_NULLHandle();
-
- virtual ~AUD_NULLHandle() {}
- virtual bool pause();
- virtual bool resume();
- virtual bool stop();
- virtual bool getKeep();
- virtual bool setKeep(bool keep);
- virtual bool seek(float position);
- virtual float getPosition();
- virtual AUD_Status getStatus();
- virtual float getVolume();
- virtual bool setVolume(float volume);
- virtual float getPitch();
- virtual bool setPitch(float pitch);
- virtual int getLoopCount();
- virtual bool setLoopCount(int count);
- virtual bool setStopCallback(stopCallback callback = 0, void* data = 0);
- };
-public:
- /**
- * Creates a new NULL device.
- */
- AUD_NULLDevice();
-
- virtual ~AUD_NULLDevice();
-
- virtual AUD_DeviceSpecs getSpecs() const;
- virtual boost::shared_ptr<AUD_IHandle> play(boost::shared_ptr<AUD_IReader> reader, bool keep = false);
- virtual boost::shared_ptr<AUD_IHandle> play(boost::shared_ptr<AUD_IFactory> factory, bool keep = false);
- virtual void stopAll();
- virtual void lock();
- virtual void unlock();
- virtual float getVolume() const;
- virtual void setVolume(float volume);
-};
-
-#endif //__AUD_NULLDEVICE_H__
diff --git a/intern/audaspace/intern/AUD_ReadDevice.cpp b/intern/audaspace/intern/AUD_ReadDevice.cpp
deleted file mode 100644
index bab6ce4f001..00000000000
--- a/intern/audaspace/intern/AUD_ReadDevice.cpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_ReadDevice.cpp
- * \ingroup audaspaceintern
- */
-
-
-#include "AUD_ReadDevice.h"
-#include "AUD_IReader.h"
-
-#include <cstring>
-
-AUD_ReadDevice::AUD_ReadDevice(AUD_DeviceSpecs specs) :
- m_playing(false)
-{
- m_specs = specs;
-
- create();
-}
-
-AUD_ReadDevice::AUD_ReadDevice(AUD_Specs specs) :
- m_playing(false)
-{
- m_specs.specs = specs;
- m_specs.format = AUD_FORMAT_FLOAT32;
-
- create();
-}
-
-AUD_ReadDevice::~AUD_ReadDevice()
-{
- destroy();
-}
-
-bool AUD_ReadDevice::read(data_t* buffer, int length)
-{
- if(m_playing)
- mix(buffer, length);
- else
- if(m_specs.format == AUD_FORMAT_U8)
- memset(buffer, 0x80, length * AUD_DEVICE_SAMPLE_SIZE(m_specs));
- else
- memset(buffer, 0, length * AUD_DEVICE_SAMPLE_SIZE(m_specs));
- return m_playing;
-}
-
-void AUD_ReadDevice::changeSpecs(AUD_Specs specs)
-{
- if(!AUD_COMPARE_SPECS(specs, m_specs.specs))
- setSpecs(specs);
-}
-
-void AUD_ReadDevice::playing(bool playing)
-{
- m_playing = playing;
-}
diff --git a/intern/audaspace/intern/AUD_ReadDevice.h b/intern/audaspace/intern/AUD_ReadDevice.h
deleted file mode 100644
index 0f077fe5d7e..00000000000
--- a/intern/audaspace/intern/AUD_ReadDevice.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_ReadDevice.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_READDEVICE_H__
-#define __AUD_READDEVICE_H__
-
-#include "AUD_SoftwareDevice.h"
-
-/**
- * This device enables to let the user read raw data out of it.
- */
-class AUD_ReadDevice : public AUD_SoftwareDevice
-{
-private:
- /**
- * Whether the device currently.
- */
- bool m_playing;
-
- // hide copy constructor and operator=
- AUD_ReadDevice(const AUD_ReadDevice&);
- AUD_ReadDevice& operator=(const AUD_ReadDevice&);
-
-protected:
- virtual void playing(bool playing);
-
-public:
- /**
- * Creates a new read device.
- * \param specs The wanted audio specification.
- */
- AUD_ReadDevice(AUD_DeviceSpecs specs);
-
- /**
- * Creates a new read device.
- * \param specs The wanted audio specification.
- */
- AUD_ReadDevice(AUD_Specs specs);
-
- /**
- * Closes the device.
- */
- virtual ~AUD_ReadDevice();
-
- /**
- * Reads the next bytes into the supplied buffer.
- * \param buffer The target buffer.
- * \param length The length in samples to be filled.
- * \return True if the reading succeeded, false if there are no sounds
- * played back currently, in that case the buffer is filled with
- * silence.
- */
- bool read(data_t* buffer, int length);
-
- /**
- * Changes the output specification.
- * \param specs The new audio data specification.
- */
- void changeSpecs(AUD_Specs specs);
-};
-
-#endif //__AUD_READDEVICE_H__
diff --git a/intern/audaspace/intern/AUD_ResampleFactory.h b/intern/audaspace/intern/AUD_ResampleFactory.h
deleted file mode 100644
index 11f8dc15f03..00000000000
--- a/intern/audaspace/intern/AUD_ResampleFactory.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_ResampleFactory.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_RESAMPLEFACTORY_H__
-#define __AUD_RESAMPLEFACTORY_H__
-
-#include "AUD_MixerFactory.h"
-
-typedef AUD_MixerFactory AUD_ResampleFactory;
-
-#endif //__AUD_RESAMPLEFACTORY_H__
diff --git a/intern/audaspace/intern/AUD_ResampleReader.cpp b/intern/audaspace/intern/AUD_ResampleReader.cpp
deleted file mode 100644
index 4b247ffd862..00000000000
--- a/intern/audaspace/intern/AUD_ResampleReader.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_ResampleReader.cpp
- * \ingroup audaspaceintern
- */
-
-
-#include "AUD_ResampleReader.h"
-
-AUD_ResampleReader::AUD_ResampleReader(boost::shared_ptr<AUD_IReader> reader, AUD_SampleRate rate) :
- AUD_EffectReader(reader), m_rate(rate)
-{
-}
-
-void AUD_ResampleReader::setRate(AUD_SampleRate rate)
-{
- m_rate = rate;
-}
-
-AUD_SampleRate AUD_ResampleReader::getRate()
-{
- return m_rate;
-}
diff --git a/intern/audaspace/intern/AUD_ResampleReader.h b/intern/audaspace/intern/AUD_ResampleReader.h
deleted file mode 100644
index 7e21989bfa8..00000000000
--- a/intern/audaspace/intern/AUD_ResampleReader.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_ResampleReader.h
- * \ingroup audaspaceintern
- */
-
-#ifndef __AUD_RESAMPLEREADER_H__
-#define __AUD_RESAMPLEREADER_H__
-
-#include "AUD_EffectReader.h"
-
-/**
- * This is the base class for all resampling readers.
- */
-class AUD_ResampleReader : public AUD_EffectReader
-{
-protected:
- /**
- * The target sampling rate.
- */
- AUD_SampleRate m_rate;
-
- /**
- * Creates a resampling reader.
- * \param reader The reader to mix.
- * \param rate The target sampling rate.
- */
- AUD_ResampleReader(boost::shared_ptr<AUD_IReader> reader, AUD_SampleRate rate);
-
-public:
- /**
- * Sets the sample rate.
- * \param rate The target sampling rate.
- */
- virtual void setRate(AUD_SampleRate rate);
-
- /**
- * Retrieves the sample rate.
- * \return The target sampling rate.
- */
- virtual AUD_SampleRate getRate();
-};
-
-#endif // __AUD_RESAMPLEREADER_H__
diff --git a/intern/audaspace/intern/AUD_Sequencer.cpp b/intern/audaspace/intern/AUD_Sequencer.cpp
deleted file mode 100644
index ddcf97e2ea1..00000000000
--- a/intern/audaspace/intern/AUD_Sequencer.cpp
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_Sequencer.cpp
- * \ingroup audaspaceintern
- */
-
-
-#include "AUD_Sequencer.h"
-#include "AUD_SequencerReader.h"
-#include "AUD_3DMath.h"
-#include "AUD_MutexLock.h"
-
-AUD_Sequencer::AUD_Sequencer(AUD_Specs specs, float fps, bool muted) :
- m_specs(specs),
- m_status(0),
- m_entry_status(0),
- m_id(0),
- m_muted(muted),
- m_fps(fps),
- m_speed_of_sound(343.3f),
- m_doppler_factor(1),
- m_distance_model(AUD_DISTANCE_MODEL_INVERSE_CLAMPED),
- m_volume(1, 1.0f),
- m_location(3),
- m_orientation(4)
-{
- AUD_Quaternion q;
- m_orientation.write(q.get());
- float f = 1;
- m_volume.write(&f);
-
- pthread_mutexattr_t attr;
- pthread_mutexattr_init(&attr);
- pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
-
- pthread_mutex_init(&m_mutex, &attr);
-
- pthread_mutexattr_destroy(&attr);
-}
-
-AUD_Sequencer::~AUD_Sequencer()
-{
- pthread_mutex_destroy(&m_mutex);
-}
-
-void AUD_Sequencer::lock()
-{
- pthread_mutex_lock(&m_mutex);
-}
-
-void AUD_Sequencer::unlock()
-{
- pthread_mutex_unlock(&m_mutex);
-}
-
-void AUD_Sequencer::setSpecs(AUD_Specs specs)
-{
- AUD_MutexLock lock(*this);
-
- m_specs = specs;
- m_status++;
-}
-
-void AUD_Sequencer::setFPS(float fps)
-{
- AUD_MutexLock lock(*this);
-
- m_fps = fps;
-}
-
-void AUD_Sequencer::mute(bool muted)
-{
- AUD_MutexLock lock(*this);
-
- m_muted = muted;
-}
-
-bool AUD_Sequencer::getMute() const
-{
- return m_muted;
-}
-
-float AUD_Sequencer::getSpeedOfSound() const
-{
- return m_speed_of_sound;
-}
-
-void AUD_Sequencer::setSpeedOfSound(float speed)
-{
- AUD_MutexLock lock(*this);
-
- m_speed_of_sound = speed;
- m_status++;
-}
-
-float AUD_Sequencer::getDopplerFactor() const
-{
- return m_doppler_factor;
-}
-
-void AUD_Sequencer::setDopplerFactor(float factor)
-{
- AUD_MutexLock lock(*this);
-
- m_doppler_factor = factor;
- m_status++;
-}
-
-AUD_DistanceModel AUD_Sequencer::getDistanceModel() const
-{
- return m_distance_model;
-}
-
-void AUD_Sequencer::setDistanceModel(AUD_DistanceModel model)
-{
- AUD_MutexLock lock(*this);
-
- m_distance_model = model;
- m_status++;
-}
-
-AUD_AnimateableProperty* AUD_Sequencer::getAnimProperty(AUD_AnimateablePropertyType type)
-{
- switch(type)
- {
- case AUD_AP_VOLUME:
- return &m_volume;
- case AUD_AP_LOCATION:
- return &m_location;
- case AUD_AP_ORIENTATION:
- return &m_orientation;
- default:
- return NULL;
- }
-}
-
-boost::shared_ptr<AUD_SequencerEntry> AUD_Sequencer::add(boost::shared_ptr<AUD_IFactory> sound, float begin, float end, float skip)
-{
- AUD_MutexLock lock(*this);
-
- boost::shared_ptr<AUD_SequencerEntry> entry = boost::shared_ptr<AUD_SequencerEntry>(new AUD_SequencerEntry(sound, begin, end, skip, m_id++));
-
- m_entries.push_back(entry);
- m_entry_status++;
-
- return entry;
-}
-
-void AUD_Sequencer::remove(boost::shared_ptr<AUD_SequencerEntry> entry)
-{
- AUD_MutexLock lock(*this);
-
- m_entries.remove(entry);
- m_entry_status++;
-}
diff --git a/intern/audaspace/intern/AUD_Sequencer.h b/intern/audaspace/intern/AUD_Sequencer.h
deleted file mode 100644
index 1066eeae8e3..00000000000
--- a/intern/audaspace/intern/AUD_Sequencer.h
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_Sequencer.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_SEQUENCER_H__
-#define __AUD_SEQUENCER_H__
-
-#include "AUD_AnimateableProperty.h"
-#include "AUD_IFactory.h"
-#include "AUD_ILockable.h"
-
-#include <list>
-#include <pthread.h>
-
-class AUD_SequencerEntry;
-
-/**
- * This class represents sequenced entries to play a sound scene.
- */
-class AUD_Sequencer : public AUD_ILockable
-{
- friend class AUD_SequencerReader;
-private:
- /// The target specification.
- AUD_Specs m_specs;
-
- /// The status of the sequence. Changes every time a non-animated parameter changes.
- int m_status;
-
- /// The entry status. Changes every time an entry is removed or added.
- int m_entry_status;
-
- /// The next unused ID for the entries.
- int m_id;
-
- /// The sequenced entries.
- std::list<boost::shared_ptr<AUD_SequencerEntry> > m_entries;
-
- /// Whether the whole scene is muted.
- bool m_muted;
-
- /// The FPS of the scene.
- float m_fps;
-
- /// Speed of Sound.
- float m_speed_of_sound;
-
- /// Doppler factor.
- float m_doppler_factor;
-
- /// Distance model.
- AUD_DistanceModel m_distance_model;
-
- /// The animated volume.
- AUD_AnimateableProperty m_volume;
-
- /// The animated listener location.
- AUD_AnimateableProperty m_location;
-
- /// The animated listener orientation.
- AUD_AnimateableProperty m_orientation;
-
- /// The mutex for locking.
- pthread_mutex_t m_mutex;
-
- // hide copy constructor and operator=
- AUD_Sequencer(const AUD_Sequencer&);
- AUD_Sequencer& operator=(const AUD_Sequencer&);
-
-public:
- /**
- * Creates a new sound scene.
- * \param specs The output audio data specification.
- * \param fps The FPS of the scene.
- * \param muted Whether the whole scene is muted.
- */
- AUD_Sequencer(AUD_Specs specs, float fps, bool muted);
- virtual ~AUD_Sequencer();
-
- /**
- * Locks the sequence.
- */
- virtual void lock();
-
- /**
- * Unlocks the previously locked sequence.
- */
- virtual void unlock();
-
- /**
- * Sets the audio output specification.
- * \param specs The new specification.
- */
- void setSpecs(AUD_Specs specs);
-
- /**
- * Sets the scene's FPS.
- * \param fps The new FPS.
- */
- void setFPS(float fps);
-
- /**
- * Sets the muting state of the scene.
- * \param muted Whether the scene is muted.
- */
- void mute(bool muted);
-
- /**
- * Retrieves the muting state of the scene.
- * \return Whether the scene is muted.
- */
- bool getMute() const;
-
- /**
- * Retrieves the speed of sound.
- * This value is needed for doppler effect calculation.
- * \return The speed of sound.
- */
- float getSpeedOfSound() const;
-
- /**
- * Sets the speed of sound.
- * This value is needed for doppler effect calculation.
- * \param speed The new speed of sound.
- */
- void setSpeedOfSound(float speed);
-
- /**
- * Retrieves the doppler factor.
- * This value is a scaling factor for the velocity vectors of sources and
- * listener which is used while calculating the doppler effect.
- * \return The doppler factor.
- */
- float getDopplerFactor() const;
-
- /**
- * Sets the doppler factor.
- * This value is a scaling factor for the velocity vectors of sources and
- * listener which is used while calculating the doppler effect.
- * \param factor The new doppler factor.
- */
- void setDopplerFactor(float factor);
-
- /**
- * Retrieves the distance model.
- * \return The distance model.
- */
- AUD_DistanceModel getDistanceModel() const;
-
- /**
- * Sets the distance model.
- * \param model distance model.
- */
- void setDistanceModel(AUD_DistanceModel model);
-
- /**
- * Retrieves one of the animated properties of the sequence.
- * \param type Which animated property to retrieve.
- * \return A pointer to the animated property, valid as long as the
- * sequence is.
- */
- AUD_AnimateableProperty* getAnimProperty(AUD_AnimateablePropertyType type);
-
- /**
- * Adds a new entry to the scene.
- * \param sound The sound this entry should play.
- * \param begin The start time.
- * \param end The end time or a negative value if determined by the sound.
- * \param skip How much seconds should be skipped at the beginning.
- * \return The entry added.
- */
- boost::shared_ptr<AUD_SequencerEntry> add(boost::shared_ptr<AUD_IFactory> sound, float begin, float end, float skip);
-
- /**
- * Removes an entry from the scene.
- * \param entry The entry to remove.
- */
- void remove(boost::shared_ptr<AUD_SequencerEntry> entry);
-};
-
-#endif //__AUD_SEQUENCER_H__
diff --git a/intern/audaspace/intern/AUD_SequencerEntry.cpp b/intern/audaspace/intern/AUD_SequencerEntry.cpp
deleted file mode 100644
index 6ef8479cdb8..00000000000
--- a/intern/audaspace/intern/AUD_SequencerEntry.cpp
+++ /dev/null
@@ -1,319 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_SequencerEntry.cpp
- * \ingroup audaspaceintern
- */
-
-
-#include "AUD_SequencerEntry.h"
-#include "AUD_SequencerReader.h"
-#include "AUD_MutexLock.h"
-
-#include <cmath>
-#include <limits>
-
-AUD_SequencerEntry::AUD_SequencerEntry(boost::shared_ptr<AUD_IFactory> sound, float begin, float end, float skip, int id) :
- m_status(0),
- m_pos_status(1),
- m_sound_status(0),
- m_id(id),
- m_sound(sound),
- m_begin(begin),
- m_end(end),
- m_skip(skip),
- m_muted(false),
- m_relative(true),
- m_volume_max(1.0f),
- m_volume_min(0),
- m_distance_max(std::numeric_limits<float>::max()),
- m_distance_reference(1.0f),
- m_attenuation(1.0f),
- m_cone_angle_outer(360),
- m_cone_angle_inner(360),
- m_cone_volume_outer(0),
- m_volume(1, 1.0f),
- m_pitch(1, 1.0f),
- m_location(3),
- m_orientation(4)
-{
- AUD_Quaternion q;
- m_orientation.write(q.get());
- float f = 1;
- m_volume.write(&f);
- m_pitch.write(&f);
-
- pthread_mutexattr_t attr;
- pthread_mutexattr_init(&attr);
- pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
-
- pthread_mutex_init(&m_mutex, &attr);
-
- pthread_mutexattr_destroy(&attr);
-}
-
-AUD_SequencerEntry::~AUD_SequencerEntry()
-{
- pthread_mutex_destroy(&m_mutex);
-}
-
-void AUD_SequencerEntry::lock()
-{
- pthread_mutex_lock(&m_mutex);
-}
-
-void AUD_SequencerEntry::unlock()
-{
- pthread_mutex_unlock(&m_mutex);
-}
-
-void AUD_SequencerEntry::setSound(boost::shared_ptr<AUD_IFactory> sound)
-{
- AUD_MutexLock lock(*this);
-
- if(m_sound.get() != sound.get())
- {
- m_sound = sound;
- m_sound_status++;
- }
-}
-
-void AUD_SequencerEntry::move(float begin, float end, float skip)
-{
- AUD_MutexLock lock(*this);
-
- if(m_begin != begin || m_skip != skip || m_end != end)
- {
- m_begin = begin;
- m_skip = skip;
- m_end = end;
- m_pos_status++;
- }
-}
-
-void AUD_SequencerEntry::mute(bool mute)
-{
- AUD_MutexLock lock(*this);
-
- m_muted = mute;
-}
-
-int AUD_SequencerEntry::getID() const
-{
- return m_id;
-}
-
-AUD_AnimateableProperty* AUD_SequencerEntry::getAnimProperty(AUD_AnimateablePropertyType type)
-{
- switch(type)
- {
- case AUD_AP_VOLUME:
- return &m_volume;
- case AUD_AP_PITCH:
- return &m_pitch;
- case AUD_AP_PANNING:
- return &m_panning;
- case AUD_AP_LOCATION:
- return &m_location;
- case AUD_AP_ORIENTATION:
- return &m_orientation;
- default:
- return NULL;
- }
-}
-
-void AUD_SequencerEntry::updateAll(float volume_max, float volume_min, float distance_max,
- float distance_reference, float attenuation, float cone_angle_outer,
- float cone_angle_inner, float cone_volume_outer)
-{
- AUD_MutexLock lock(*this);
-
- if(volume_max != m_volume_max)
- {
- m_volume_max = volume_max;
- m_status++;
- }
-
- if(volume_min != m_volume_min)
- {
- m_volume_min = volume_min;
- m_status++;
- }
-
- if(distance_max != m_distance_max)
- {
- m_distance_max = distance_max;
- m_status++;
- }
-
- if(distance_reference != m_distance_reference)
- {
- m_distance_reference = distance_reference;
- m_status++;
- }
-
- if(attenuation != m_attenuation)
- {
- m_attenuation = attenuation;
- m_status++;
- }
-
- if(cone_angle_outer != m_cone_angle_outer)
- {
- m_cone_angle_outer = cone_angle_outer;
- m_status++;
- }
-
- if(cone_angle_inner != m_cone_angle_inner)
- {
- m_cone_angle_inner = cone_angle_inner;
- m_status++;
- }
-
- if(cone_volume_outer != m_cone_volume_outer)
- {
- m_cone_volume_outer = cone_volume_outer;
- m_status++;
- }
-}
-
-bool AUD_SequencerEntry::isRelative()
-{
- return m_relative;
-}
-
-void AUD_SequencerEntry::setRelative(bool relative)
-{
- AUD_MutexLock lock(*this);
-
- if(m_relative != relative)
- {
- m_relative = relative;
- m_status++;
- }
-}
-
-float AUD_SequencerEntry::getVolumeMaximum()
-{
- return m_volume_max;
-}
-
-void AUD_SequencerEntry::setVolumeMaximum(float volume)
-{
- AUD_MutexLock lock(*this);
-
- m_volume_max = volume;
- m_status++;
-}
-
-float AUD_SequencerEntry::getVolumeMinimum()
-{
- return m_volume_min;
-}
-
-void AUD_SequencerEntry::setVolumeMinimum(float volume)
-{
- AUD_MutexLock lock(*this);
-
- m_volume_min = volume;
- m_status++;
-}
-
-float AUD_SequencerEntry::getDistanceMaximum()
-{
- return m_distance_max;
-}
-
-void AUD_SequencerEntry::setDistanceMaximum(float distance)
-{
- AUD_MutexLock lock(*this);
-
- m_distance_max = distance;
- m_status++;
-}
-
-float AUD_SequencerEntry::getDistanceReference()
-{
- return m_distance_reference;
-}
-
-void AUD_SequencerEntry::setDistanceReference(float distance)
-{
- AUD_MutexLock lock(*this);
-
- m_distance_reference = distance;
- m_status++;
-}
-
-float AUD_SequencerEntry::getAttenuation()
-{
- return m_attenuation;
-}
-
-void AUD_SequencerEntry::setAttenuation(float factor)
-{
- AUD_MutexLock lock(*this);
-
- m_attenuation = factor;
- m_status++;
-}
-
-float AUD_SequencerEntry::getConeAngleOuter()
-{
- return m_cone_angle_outer;
-}
-
-void AUD_SequencerEntry::setConeAngleOuter(float angle)
-{
- AUD_MutexLock lock(*this);
-
- m_cone_angle_outer = angle;
- m_status++;
-}
-
-float AUD_SequencerEntry::getConeAngleInner()
-{
- return m_cone_angle_inner;
-}
-
-void AUD_SequencerEntry::setConeAngleInner(float angle)
-{
- AUD_MutexLock lock(*this);
-
- m_cone_angle_inner = angle;
- m_status++;
-}
-
-float AUD_SequencerEntry::getConeVolumeOuter()
-{
- return m_cone_volume_outer;
-}
-
-void AUD_SequencerEntry::setConeVolumeOuter(float volume)
-{
- AUD_MutexLock lock(*this);
-
- m_cone_volume_outer = volume;
- m_status++;
-}
diff --git a/intern/audaspace/intern/AUD_SequencerEntry.h b/intern/audaspace/intern/AUD_SequencerEntry.h
deleted file mode 100644
index aa1edebfc2f..00000000000
--- a/intern/audaspace/intern/AUD_SequencerEntry.h
+++ /dev/null
@@ -1,319 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_SequencerEntry.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_SEQUENCERENTRY_H__
-#define __AUD_SEQUENCERENTRY_H__
-
-#include "AUD_AnimateableProperty.h"
-#include "AUD_IFactory.h"
-#include "AUD_ILockable.h"
-
-#include <pthread.h>
-#include <boost/shared_ptr.hpp>
-
-/**
- * This class represents a sequenced entry in a sequencer factory.
- */
-class AUD_SequencerEntry : public AUD_ILockable
-{
- friend class AUD_SequencerHandle;
-private:
- /// The status of the entry. Changes every time a non-animated parameter changes.
- int m_status;
-
- /// The positional status of the entry. Changes every time the entry is moved.
- int m_pos_status;
-
- /// The sound status, changed when the sound is changed.
- int m_sound_status;
-
- /// The unique (regarding the factory) ID of the entry.
- int m_id;
-
- /// The sound this entry plays.
- boost::shared_ptr<AUD_IFactory> m_sound;
-
- /// The begin time.
- float m_begin;
-
- /// The end time.
- float m_end;
-
- /// How many seconds are skipped at the beginning.
- float m_skip;
-
- /// Whether the entry is muted.
- bool m_muted;
-
- /// Whether the position to the listener is relative or absolute
- bool m_relative;
-
- /// Maximum volume.
- float m_volume_max;
-
- /// Minimum volume.
- float m_volume_min;
-
- /// Maximum distance.
- float m_distance_max;
-
- /// Reference distance;
- float m_distance_reference;
-
- /// Attenuation
- float m_attenuation;
-
- /// Cone outer angle.
- float m_cone_angle_outer;
-
- /// Cone inner angle.
- float m_cone_angle_inner;
-
- /// Cone outer volume.
- float m_cone_volume_outer;
-
- /// The mutex for locking.
- pthread_mutex_t m_mutex;
-
- /// The animated volume.
- AUD_AnimateableProperty m_volume;
-
- /// The animated panning.
- AUD_AnimateableProperty m_panning;
-
- /// The animated pitch.
- AUD_AnimateableProperty m_pitch;
-
- /// The animated location.
- AUD_AnimateableProperty m_location;
-
- /// The animated orientation.
- AUD_AnimateableProperty m_orientation;
-
-public:
- /**
- * Creates a new sequenced entry.
- * \param sound The sound this entry should play.
- * \param begin The start time.
- * \param end The end time or a negative value if determined by the sound.
- * \param skip How much seconds should be skipped at the beginning.
- * \param id The ID of the entry.
- */
- AUD_SequencerEntry(boost::shared_ptr<AUD_IFactory> sound, float begin, float end, float skip, int id);
- virtual ~AUD_SequencerEntry();
-
- /**
- * Locks the entry.
- */
- virtual void lock();
-
- /**
- * Unlocks the previously locked entry.
- */
- virtual void unlock();
-
- /**
- * Sets the sound of the entry.
- * \param sound The new sound.
- */
- void setSound(boost::shared_ptr<AUD_IFactory> sound);
-
- /**
- * Moves the entry.
- * \param begin The new start time.
- * \param end The new end time or a negative value if unknown.
- * \param skip How many seconds to skip at the beginning.
- */
- void move(float begin, float end, float skip);
-
- /**
- * Sets the muting state of the entry.
- * \param mute Whether the entry should be muted or not.
- */
- void mute(bool mute);
-
- /**
- * Retrieves the ID of the entry.
- * \return The ID of the entry.
- */
- int getID() const;
-
- /**
- * Retrieves one of the animated properties of the entry.
- * \param type Which animated property to retrieve.
- * \return A pointer to the animated property, valid as long as the
- * entry is.
- */
- AUD_AnimateableProperty* getAnimProperty(AUD_AnimateablePropertyType type);
-
- /**
- * Updates all non-animated parameters of the entry.
- * \param volume_max The maximum volume.
- * \param volume_min The minimum volume.
- * \param distance_max The maximum distance.
- * \param distance_reference The reference distance.
- * \param attenuation The attenuation.
- * \param cone_angle_outer The outer cone opening angle.
- * \param cone_angle_inner The inner cone opening angle.
- * \param cone_volume_outer The volume outside the outer cone.
- */
- void updateAll(float volume_max, float volume_min, float distance_max,
- float distance_reference, float attenuation, float cone_angle_outer,
- float cone_angle_inner, float cone_volume_outer);
-
- /**
- * Checks whether the source location, velocity and orientation are relative
- * to the listener.
- * \return Whether the source is relative.
- */
- bool isRelative();
-
- /**
- * Sets whether the source location, velocity and orientation are relative
- * to the listener.
- * \param relative Whether the source is relative.
- * \return Whether the action succeeded.
- */
- void setRelative(bool relative);
-
- /**
- * Retrieves the maximum volume of a source.
- * \return The maximum volume.
- */
- float getVolumeMaximum();
-
- /**
- * Sets the maximum volume of a source.
- * \param volume The new maximum volume.
- * \return Whether the action succeeded.
- */
- void setVolumeMaximum(float volume);
-
- /**
- * Retrieves the minimum volume of a source.
- * \return The minimum volume.
- */
- float getVolumeMinimum();
-
- /**
- * Sets the minimum volume of a source.
- * \param volume The new minimum volume.
- * \return Whether the action succeeded.
- */
- void setVolumeMinimum(float volume);
-
- /**
- * Retrieves the maximum distance of a source.
- * If a source is further away from the reader than this distance, the
- * volume will automatically be set to 0.
- * \return The maximum distance.
- */
- float getDistanceMaximum();
-
- /**
- * Sets the maximum distance of a source.
- * If a source is further away from the reader than this distance, the
- * volume will automatically be set to 0.
- * \param distance The new maximum distance.
- * \return Whether the action succeeded.
- */
- void setDistanceMaximum(float distance);
-
- /**
- * Retrieves the reference distance of a source.
- * \return The reference distance.
- */
- float getDistanceReference();
-
- /**
- * Sets the reference distance of a source.
- * \param distance The new reference distance.
- * \return Whether the action succeeded.
- */
- void setDistanceReference(float distance);
-
- /**
- * Retrieves the attenuation of a source.
- * \return The attenuation.
- */
- float getAttenuation();
-
- /**
- * Sets the attenuation of a source.
- * This value is used for distance calculation.
- * \param factor The new attenuation.
- * \return Whether the action succeeded.
- */
- void setAttenuation(float factor);
-
- /**
- * Retrieves the outer angle of the cone of a source.
- * \return The outer angle of the cone.
- */
- float getConeAngleOuter();
-
- /**
- * Sets the outer angle of the cone of a source.
- * \param angle The new outer angle of the cone.
- * \return Whether the action succeeded.
- */
- void setConeAngleOuter(float angle);
-
- /**
- * Retrieves the inner angle of the cone of a source.
- * \return The inner angle of the cone.
- */
- float getConeAngleInner();
-
- /**
- * Sets the inner angle of the cone of a source.
- * \param angle The new inner angle of the cone.
- * \return Whether the action succeeded.
- */
- void setConeAngleInner(float angle);
-
- /**
- * Retrieves the outer volume of the cone of a source.
- * The volume between inner and outer angle is interpolated between inner
- * volume and this value.
- * \return The outer volume of the cone.
- */
- float getConeVolumeOuter();
-
- /**
- * Sets the outer volume of the cone of a source.
- * The volume between inner and outer angle is interpolated between inner
- * volume and this value.
- * \param volume The new outer volume of the cone.
- * \return Whether the action succeeded.
- */
- void setConeVolumeOuter(float volume);
-};
-
-#endif //__AUD_SEQUENCERENTRY_H__
diff --git a/intern/audaspace/intern/AUD_SequencerFactory.cpp b/intern/audaspace/intern/AUD_SequencerFactory.cpp
deleted file mode 100644
index f6076603c2b..00000000000
--- a/intern/audaspace/intern/AUD_SequencerFactory.cpp
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_SequencerFactory.cpp
- * \ingroup audaspaceintern
- */
-
-
-#include "AUD_SequencerFactory.h"
-#include "AUD_SequencerReader.h"
-#include "AUD_3DMath.h"
-#include "AUD_MutexLock.h"
-
-AUD_SequencerFactory::AUD_SequencerFactory(AUD_Specs specs, float fps, bool muted)
-{
- m_sequence = boost::shared_ptr<AUD_Sequencer>(new AUD_Sequencer(specs, fps, muted));
-}
-
-/*void AUD_SequencerFactory::lock()
-{
- pthread_mutex_lock(&m_mutex);
-}
-
-void AUD_SequencerFactory::unlock()
-{
- pthread_mutex_unlock(&m_mutex);
-}*/
-
-void AUD_SequencerFactory::setSpecs(AUD_Specs specs)
-{
- m_sequence->setSpecs(specs);
-}
-
-void AUD_SequencerFactory::setFPS(float fps)
-{
- m_sequence->setFPS(fps);
-}
-
-void AUD_SequencerFactory::mute(bool muted)
-{
- m_sequence->mute(muted);
-}
-
-bool AUD_SequencerFactory::getMute() const
-{
- return m_sequence->getMute();
-}
-
-float AUD_SequencerFactory::getSpeedOfSound() const
-{
- return m_sequence->getSpeedOfSound();
-}
-
-void AUD_SequencerFactory::setSpeedOfSound(float speed)
-{
- m_sequence->setSpeedOfSound(speed);
-}
-
-float AUD_SequencerFactory::getDopplerFactor() const
-{
- return m_sequence->getDopplerFactor();
-}
-
-void AUD_SequencerFactory::setDopplerFactor(float factor)
-{
- m_sequence->setDopplerFactor(factor);
-}
-
-AUD_DistanceModel AUD_SequencerFactory::getDistanceModel() const
-{
- return m_sequence->getDistanceModel();
-}
-
-void AUD_SequencerFactory::setDistanceModel(AUD_DistanceModel model)
-{
- m_sequence->setDistanceModel(model);
-}
-
-AUD_AnimateableProperty* AUD_SequencerFactory::getAnimProperty(AUD_AnimateablePropertyType type)
-{
- return m_sequence->getAnimProperty(type);
-}
-
-boost::shared_ptr<AUD_SequencerEntry> AUD_SequencerFactory::add(boost::shared_ptr<AUD_IFactory> sound, float begin, float end, float skip)
-{
- return m_sequence->add(sound, begin, end, skip);
-}
-
-void AUD_SequencerFactory::remove(boost::shared_ptr<AUD_SequencerEntry> entry)
-{
- m_sequence->remove(entry);
-}
-
-boost::shared_ptr<AUD_IReader> AUD_SequencerFactory::createQualityReader()
-{
- return boost::shared_ptr<AUD_IReader>(new AUD_SequencerReader(m_sequence, true));
-}
-
-boost::shared_ptr<AUD_IReader> AUD_SequencerFactory::createReader()
-{
- return boost::shared_ptr<AUD_IReader>(new AUD_SequencerReader(m_sequence));
-}
diff --git a/intern/audaspace/intern/AUD_SequencerFactory.h b/intern/audaspace/intern/AUD_SequencerFactory.h
deleted file mode 100644
index 3ef847d4b34..00000000000
--- a/intern/audaspace/intern/AUD_SequencerFactory.h
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_SequencerFactory.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_SEQUENCERFACTORY_H__
-#define __AUD_SEQUENCERFACTORY_H__
-
-#include "AUD_IFactory.h"
-#include "AUD_AnimateableProperty.h"
-//#include "AUD_ILockable.h"
-#include "AUD_Sequencer.h"
-
-#include <list>
-#include <pthread.h>
-
-class AUD_SequencerEntry;
-
-/**
- * This factory represents sequenced entries to play a sound scene.
- */
-class AUD_SequencerFactory : public AUD_IFactory//, public AUD_ILockable
-{
- friend class AUD_SequencerReader;
-private:
- /// The sequence.
- boost::shared_ptr<AUD_Sequencer> m_sequence;
-
- // hide copy constructor and operator=
- AUD_SequencerFactory(const AUD_SequencerFactory&);
- AUD_SequencerFactory& operator=(const AUD_SequencerFactory&);
-
-public:
- /**
- * Creates a new sound scene.
- * \param specs The output audio data specification.
- * \param fps The FPS of the scene.
- * \param muted Whether the whole scene is muted.
- */
- AUD_SequencerFactory(AUD_Specs specs, float fps, bool muted);
-
-#if 0
- /**
- * Locks the factory.
- */
- virtual void lock();
-
- /**
- * Unlocks the previously locked factory.
- */
- virtual void unlock();
-#endif
-
- /**
- * Sets the audio output specification.
- * \param specs The new specification.
- */
- void setSpecs(AUD_Specs specs);
-
- /**
- * Sets the scene's FPS.
- * \param fps The new FPS.
- */
- void setFPS(float fps);
-
- /**
- * Sets the muting state of the scene.
- * \param muted Whether the scene is muted.
- */
- void mute(bool muted);
-
- /**
- * Retrieves the muting state of the scene.
- * \return Whether the scene is muted.
- */
- bool getMute() const;
-
- /**
- * Retrieves the speed of sound.
- * This value is needed for doppler effect calculation.
- * \return The speed of sound.
- */
- float getSpeedOfSound() const;
-
- /**
- * Sets the speed of sound.
- * This value is needed for doppler effect calculation.
- * \param speed The new speed of sound.
- */
- void setSpeedOfSound(float speed);
-
- /**
- * Retrieves the doppler factor.
- * This value is a scaling factor for the velocity vectors of sources and
- * listener which is used while calculating the doppler effect.
- * \return The doppler factor.
- */
- float getDopplerFactor() const;
-
- /**
- * Sets the doppler factor.
- * This value is a scaling factor for the velocity vectors of sources and
- * listener which is used while calculating the doppler effect.
- * \param factor The new doppler factor.
- */
- void setDopplerFactor(float factor);
-
- /**
- * Retrieves the distance model.
- * \return The distance model.
- */
- AUD_DistanceModel getDistanceModel() const;
-
- /**
- * Sets the distance model.
- * \param model distance model.
- */
- void setDistanceModel(AUD_DistanceModel model);
-
- /**
- * Retrieves one of the animated properties of the factory.
- * \param type Which animated property to retrieve.
- * \return A pointer to the animated property, valid as long as the
- * factory is.
- */
- AUD_AnimateableProperty* getAnimProperty(AUD_AnimateablePropertyType type);
-
- /**
- * Adds a new entry to the scene.
- * \param sound The sound this entry should play.
- * \param begin The start time.
- * \param end The end time or a negative value if determined by the sound.
- * \param skip How much seconds should be skipped at the beginning.
- * \return The entry added.
- */
- boost::shared_ptr<AUD_SequencerEntry> add(boost::shared_ptr<AUD_IFactory> sound, float begin, float end, float skip);
-
- /**
- * Removes an entry from the scene.
- * \param entry The entry to remove.
- */
- void remove(boost::shared_ptr<AUD_SequencerEntry> entry);
-
- /**
- * Creates a new reader with high quality resampling.
- * \return The new reader.
- */
- boost::shared_ptr<AUD_IReader> createQualityReader();
-
- virtual boost::shared_ptr<AUD_IReader> createReader();
-};
-
-#endif //__AUD_SEQUENCERFACTORY_H__
diff --git a/intern/audaspace/intern/AUD_SequencerHandle.cpp b/intern/audaspace/intern/AUD_SequencerHandle.cpp
deleted file mode 100644
index aa742f7b8db..00000000000
--- a/intern/audaspace/intern/AUD_SequencerHandle.cpp
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_SequencerHandle.cpp
- * \ingroup audaspaceintern
- */
-
-
-#include "AUD_SequencerHandle.h"
-#include "AUD_ReadDevice.h"
-#include "AUD_MutexLock.h"
-
-#define KEEP_TIME 10
-
-void AUD_SequencerHandle::start()
-{
- // we already tried to start, aborting
- if(!m_valid)
- return;
-
- // in case the sound is playing, we need to stop first
- stop();
-
- AUD_MutexLock lock(*m_entry);
-
- // let's try playing
- if(m_entry->m_sound.get())
- {
- try
- {
- m_handle = m_device.play(m_entry->m_sound, true);
- m_3dhandle = boost::dynamic_pointer_cast<AUD_I3DHandle>(m_handle);
- }
- catch(AUD_Exception&)
- {
- // handle stays invalid in case we get an exception
- }
-
- // after starting we have to set the properties, so let's ensure that
- m_status--;
- }
-
- // if the sound could not be played, we invalidate
- m_valid = m_handle.get();
-}
-
-bool AUD_SequencerHandle::updatePosition(float position)
-{
- AUD_MutexLock lock(*m_entry);
-
- if(m_handle.get())
- {
- // we currently have a handle, let's check where we are
- if(position >= m_entry->m_end)
- {
- if(position >= m_entry->m_end + KEEP_TIME)
- // far end, stopping
- stop();
- else
- {
- // close end, just pausing
- m_handle->pause();
- return true;
- }
- }
- else if(position >= m_entry->m_begin)
- {
- // inside, resuming
- m_handle->resume();
- return true;
- }
- else
- {
- if(position < m_entry->m_begin - KEEP_TIME)
- // far beginning, stopping
- stop();
- else
- {
- // close beginning, just pausing
- m_handle->pause();
- return true;
- }
- }
- }
- else
- {
- // we don't have a handle, let's start if we should be playing
- if(position >= m_entry->m_begin && position <= m_entry->m_end)
- {
- start();
- return m_valid;
- }
- }
-
- return false;
-}
-
-AUD_SequencerHandle::AUD_SequencerHandle(boost::shared_ptr<AUD_SequencerEntry> entry, AUD_ReadDevice& device) :
- m_entry(entry),
- m_valid(true),
- m_status(0),
- m_pos_status(0),
- m_sound_status(0),
- m_device(device)
-{
-}
-
-AUD_SequencerHandle::~AUD_SequencerHandle()
-{
- stop();
-}
-
-int AUD_SequencerHandle::compare(boost::shared_ptr<AUD_SequencerEntry> entry) const
-{
- if(m_entry->getID() < entry->getID())
- return -1;
- else if(m_entry->getID() == entry->getID())
- return 0;
- return 1;
-}
-
-void AUD_SequencerHandle::stop()
-{
- if(m_handle.get())
- m_handle->stop();
- m_handle = boost::shared_ptr<AUD_IHandle>();
- m_3dhandle = boost::shared_ptr<AUD_I3DHandle>();
-}
-
-void AUD_SequencerHandle::update(float position, float frame, float fps)
-{
- if(m_sound_status != m_entry->m_sound_status)
- {
- // if a new sound has been set, it's possible to get valid again!
- m_sound_status = m_entry->m_sound_status;
- m_valid = true;
-
- // stop whatever sound has been playing
- stop();
-
- // seek starts and seeks to the correct position
- if(!seek(position))
- // no handle, aborting
- return;
- }
- else
- {
- if(!m_valid)
- // invalid, aborting
- return;
-
- if(m_handle.get())
- {
- // we have a handle, let's update the position
- if(!updatePosition(position))
- // lost handle, aborting
- return;
- }
- else
- {
- // we don't have a handle, let's see if we can start
- if(!seek(position))
- return;
- }
- }
-
- AUD_MutexLock lock(*m_entry);
- if(m_pos_status != m_entry->m_pos_status)
- {
- m_pos_status = m_entry->m_pos_status;
-
- // position changed, need to seek
- if(!seek(position))
- // lost handle, aborting
- return;
- }
-
- // so far everything alright and handle is there, let's keep going
-
- if(m_status != m_entry->m_status)
- {
- m_status = m_entry->m_status;
-
- m_3dhandle->setRelative(m_entry->m_relative);
- m_3dhandle->setVolumeMaximum(m_entry->m_volume_max);
- m_3dhandle->setVolumeMinimum(m_entry->m_volume_min);
- m_3dhandle->setDistanceMaximum(m_entry->m_distance_max);
- m_3dhandle->setDistanceReference(m_entry->m_distance_reference);
- m_3dhandle->setAttenuation(m_entry->m_attenuation);
- m_3dhandle->setConeAngleOuter(m_entry->m_cone_angle_outer);
- m_3dhandle->setConeAngleInner(m_entry->m_cone_angle_inner);
- m_3dhandle->setConeVolumeOuter(m_entry->m_cone_volume_outer);
- }
-
- float value;
-
- m_entry->m_volume.read(frame, &value);
- m_handle->setVolume(value);
- m_entry->m_pitch.read(frame, &value);
- m_handle->setPitch(value);
- m_entry->m_panning.read(frame, &value);
- AUD_SoftwareDevice::setPanning(m_handle.get(), value);
-
- AUD_Vector3 v, v2;
- AUD_Quaternion q;
-
- m_entry->m_orientation.read(frame, q.get());
- m_3dhandle->setSourceOrientation(q);
- m_entry->m_location.read(frame, v.get());
- m_3dhandle->setSourceLocation(v);
- m_entry->m_location.read(frame + 1, v2.get());
- v2 -= v;
- m_3dhandle->setSourceVelocity(v2 * fps);
-
- if(m_entry->m_muted)
- m_handle->setVolume(0);
-}
-
-bool AUD_SequencerHandle::seek(float position)
-{
- if(!m_valid)
- // sound not valid, aborting
- return false;
-
- if(!updatePosition(position))
- // no handle, aborting
- return false;
-
- AUD_MutexLock lock(*m_entry);
- float seekpos = position - m_entry->m_begin;
- if(seekpos < 0)
- seekpos = 0;
- seekpos += m_entry->m_skip;
- m_handle->setPitch(1.0f);
- m_handle->seek(seekpos);
-
- return true;
-}
diff --git a/intern/audaspace/intern/AUD_SequencerHandle.h b/intern/audaspace/intern/AUD_SequencerHandle.h
deleted file mode 100644
index 306df4a84b9..00000000000
--- a/intern/audaspace/intern/AUD_SequencerHandle.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_SequencerHandle.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_SEQUENCERHANDLE_H__
-#define __AUD_SEQUENCERHANDLE_H__
-
-#include "AUD_SequencerEntry.h"
-#include "AUD_IHandle.h"
-#include "AUD_I3DHandle.h"
-
-class AUD_ReadDevice;
-
-/**
- * Represents a playing sequenced entry.
- */
-class AUD_SequencerHandle
-{
-private:
- /// The entry this handle belongs to.
- boost::shared_ptr<AUD_SequencerEntry> m_entry;
-
- /// The handle in the read device.
- boost::shared_ptr<AUD_IHandle> m_handle;
-
- /// The 3D handle in the read device.
- boost::shared_ptr<AUD_I3DHandle> m_3dhandle;
-
- /// Whether the sound is playable.
- bool m_valid;
-
- /// The last read status from the entry.
- int m_status;
-
- /// The last position status from the entry.
- int m_pos_status;
-
- /// The last sound status from the entry.
- int m_sound_status;
-
- /// The read device this handle is played on.
- AUD_ReadDevice& m_device;
-
- /**
- * Starts playing back the handle.
- */
- void start();
-
- /**
- * Updates the handle state depending on position.
- * \param position Current playback position in seconds.
- * \return Whether the handle is valid.
- */
- bool updatePosition(float position);
-
-public:
- /**
- * Creates a new sequenced handle.
- * \param entry The entry this handle plays.
- * \param device The read device to play on.
- */
- AUD_SequencerHandle(boost::shared_ptr<AUD_SequencerEntry> entry, AUD_ReadDevice& device);
-
- /**
- * Destroys the handle.
- */
- ~AUD_SequencerHandle();
-
- /**
- * Compares whether this handle is playing the same entry as supplied.
- * \param entry The entry to compare to.
- * \return Whether the entries ID is smaller, equal or bigger.
- */
- int compare(boost::shared_ptr<AUD_SequencerEntry> entry) const;
-
- /**
- * Stops playing back the handle.
- */
- void stop();
-
- /**
- * Updates the handle for playback.
- * \param position The current time during playback.
- * \param frame The current frame during playback.
- * \param fps The animation frames per second.
- */
- void update(float position, float frame, float fps);
-
- /**
- * Seeks the handle to a specific time position.
- * \param position The time to seek to.
- * \return Whether the handle is valid.
- */
- bool seek(float position);
-};
-
-#endif //__AUD_SEQUENCERHANDLE_H__
diff --git a/intern/audaspace/intern/AUD_SequencerReader.cpp b/intern/audaspace/intern/AUD_SequencerReader.cpp
deleted file mode 100644
index aef93cd3896..00000000000
--- a/intern/audaspace/intern/AUD_SequencerReader.cpp
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_SequencerReader.cpp
- * \ingroup audaspaceintern
- */
-
-
-#include "AUD_SequencerReader.h"
-#include "AUD_MutexLock.h"
-
-typedef std::list<boost::shared_ptr<AUD_SequencerHandle> >::iterator AUD_HandleIterator;
-typedef std::list<boost::shared_ptr<AUD_SequencerEntry> >::iterator AUD_EntryIterator;
-
-AUD_SequencerReader::AUD_SequencerReader(boost::shared_ptr<AUD_Sequencer> sequence, bool quality) :
- m_position(0), m_device(sequence->m_specs), m_sequence(sequence), m_status(0), m_entry_status(0)
-{
- m_device.setQuality(quality);
-}
-
-AUD_SequencerReader::~AUD_SequencerReader()
-{
-}
-
-bool AUD_SequencerReader::isSeekable() const
-{
- return true;
-}
-
-void AUD_SequencerReader::seek(int position)
-{
- if(position < 0)
- return;
-
- m_position = position;
-
- for(AUD_HandleIterator it = m_handles.begin(); it != m_handles.end(); it++)
- {
- (*it)->seek(position / m_sequence->m_specs.rate);
- }
-}
-
-int AUD_SequencerReader::getLength() const
-{
- return -1;
-}
-
-int AUD_SequencerReader::getPosition() const
-{
- return m_position;
-}
-
-AUD_Specs AUD_SequencerReader::getSpecs() const
-{
- return m_sequence->m_specs;
-}
-
-void AUD_SequencerReader::read(int& length, bool& eos, sample_t* buffer)
-{
- AUD_MutexLock lock(*m_sequence);
-
- if(m_sequence->m_status != m_status)
- {
- m_device.changeSpecs(m_sequence->m_specs);
- m_device.setSpeedOfSound(m_sequence->m_speed_of_sound);
- m_device.setDistanceModel(m_sequence->m_distance_model);
- m_device.setDopplerFactor(m_sequence->m_doppler_factor);
-
- m_status = m_sequence->m_status;
- }
-
- if(m_sequence->m_entry_status != m_entry_status)
- {
- std::list<boost::shared_ptr<AUD_SequencerHandle> > handles;
-
- AUD_HandleIterator hit = m_handles.begin();
- AUD_EntryIterator eit = m_sequence->m_entries.begin();
-
- int result;
- boost::shared_ptr<AUD_SequencerHandle> handle;
-
- while(hit != m_handles.end() && eit != m_sequence->m_entries.end())
- {
- handle = *hit;
- boost::shared_ptr<AUD_SequencerEntry> entry = *eit;
-
- result = handle->compare(entry);
-
- if(result < 0)
- {
- try
- {
- handle = boost::shared_ptr<AUD_SequencerHandle>(new AUD_SequencerHandle(entry, m_device));
- handles.push_back(handle);
- }
- catch(AUD_Exception&)
- {
- }
- eit++;
- }
- else if(result == 0)
- {
- handles.push_back(handle);
- hit++;
- eit++;
- }
- else
- {
- handle->stop();
- hit++;
- }
- }
-
- while(hit != m_handles.end())
- {
- (*hit)->stop();
- hit++;
- }
-
- while(eit != m_sequence->m_entries.end())
- {
- try
- {
- handle = boost::shared_ptr<AUD_SequencerHandle>(new AUD_SequencerHandle(*eit, m_device));
- handles.push_back(handle);
- }
- catch(AUD_Exception&)
- {
- }
- eit++;
- }
-
- m_handles = handles;
-
- m_entry_status = m_sequence->m_entry_status;
- }
-
- AUD_Specs specs = m_sequence->m_specs;
- int pos = 0;
- float time = float(m_position) / float(specs.rate);
- float volume, frame;
- int len, cfra;
- AUD_Vector3 v, v2;
- AUD_Quaternion q;
-
-
- while(pos < length)
- {
- frame = time * m_sequence->m_fps;
- cfra = int(floor(frame));
-
- len = int(ceil((cfra + 1) / m_sequence->m_fps * specs.rate)) - m_position;
- len = AUD_MIN(length - pos, len);
- len = AUD_MAX(len, 1);
-
- for(AUD_HandleIterator it = m_handles.begin(); it != m_handles.end(); it++)
- {
- (*it)->update(time, frame, m_sequence->m_fps);
- }
-
- m_sequence->m_volume.read(frame, &volume);
- if(m_sequence->m_muted)
- volume = 0.0f;
- m_device.setVolume(volume);
-
- m_sequence->m_orientation.read(frame, q.get());
- m_device.setListenerOrientation(q);
- m_sequence->m_location.read(frame, v.get());
- m_device.setListenerLocation(v);
- m_sequence->m_location.read(frame + 1, v2.get());
- v2 -= v;
- m_device.setListenerVelocity(v2 * m_sequence->m_fps);
-
- m_device.read(reinterpret_cast<data_t*>(buffer + specs.channels * pos), len);
-
- pos += len;
- time += float(len) / float(specs.rate);
- }
-
- m_position += length;
-
- eos = false;
-}
diff --git a/intern/audaspace/intern/AUD_SequencerReader.h b/intern/audaspace/intern/AUD_SequencerReader.h
deleted file mode 100644
index 6b3dbc9313e..00000000000
--- a/intern/audaspace/intern/AUD_SequencerReader.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_SequencerReader.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_SEQUENCERREADER_H__
-#define __AUD_SEQUENCERREADER_H__
-
-#include "AUD_IReader.h"
-#include "AUD_ReadDevice.h"
-#include "AUD_Sequencer.h"
-#include "AUD_SequencerHandle.h"
-
-/**
- * This reader plays back sequenced entries.
- */
-class AUD_SequencerReader : public AUD_IReader
-{
-private:
- /**
- * The current position.
- */
- int m_position;
-
- /**
- * The read device used to mix the sounds correctly.
- */
- AUD_ReadDevice m_device;
-
- /**
- * Saves the sequence the reader belongs to.
- */
- boost::shared_ptr<AUD_Sequencer> m_sequence;
-
- /**
- * The list of playback handles for the entries.
- */
- std::list<boost::shared_ptr<AUD_SequencerHandle> > m_handles;
-
- /**
- * Last status read from the sequence.
- */
- int m_status;
-
- /**
- * Last entry status read from the sequence.
- */
- int m_entry_status;
-
- // hide copy constructor and operator=
- AUD_SequencerReader(const AUD_SequencerReader&);
- AUD_SequencerReader& operator=(const AUD_SequencerReader&);
-
-public:
- /**
- * Creates a resampling reader.
- * \param reader The reader to mix.
- * \param specs The target specification.
- */
- AUD_SequencerReader(boost::shared_ptr<AUD_Sequencer> sequence, bool quality = false);
-
- /**
- * Destroys the reader.
- */
- ~AUD_SequencerReader();
-
- virtual bool isSeekable() const;
- virtual void seek(int position);
- virtual int getLength() const;
- virtual int getPosition() const;
- virtual AUD_Specs getSpecs() const;
- virtual void read(int& length, bool& eos, sample_t* buffer);
-};
-
-#endif //__AUD_SEQUENCERREADER_H__
diff --git a/intern/audaspace/intern/AUD_SilenceFactory.cpp b/intern/audaspace/intern/AUD_SilenceFactory.cpp
deleted file mode 100644
index 85034b316ca..00000000000
--- a/intern/audaspace/intern/AUD_SilenceFactory.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_SilenceFactory.cpp
- * \ingroup audaspaceintern
- */
-
-
-#include "AUD_SilenceFactory.h"
-#include "AUD_SilenceReader.h"
-#include "AUD_Space.h"
-
-AUD_SilenceFactory::AUD_SilenceFactory()
-{
-}
-
-boost::shared_ptr<AUD_IReader> AUD_SilenceFactory::createReader()
-{
- return boost::shared_ptr<AUD_IReader>(new AUD_SilenceReader());
-}
diff --git a/intern/audaspace/intern/AUD_SilenceFactory.h b/intern/audaspace/intern/AUD_SilenceFactory.h
deleted file mode 100644
index de62a2f94fc..00000000000
--- a/intern/audaspace/intern/AUD_SilenceFactory.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_SilenceFactory.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_SILENCEFACTORY_H__
-#define __AUD_SILENCEFACTORY_H__
-
-#include "AUD_IFactory.h"
-
-/**
- * This factory creates a reader that plays silence.
- */
-class AUD_SilenceFactory : public AUD_IFactory
-{
-private:
- // hide copy constructor and operator=
- AUD_SilenceFactory(const AUD_SilenceFactory&);
- AUD_SilenceFactory& operator=(const AUD_SilenceFactory&);
-
-public:
- /**
- * Creates a new silence factory.
- */
- AUD_SilenceFactory();
-
- virtual boost::shared_ptr<AUD_IReader> createReader();
-};
-
-#endif //__AUD_SILENCEFACTORY_H__
diff --git a/intern/audaspace/intern/AUD_SilenceReader.cpp b/intern/audaspace/intern/AUD_SilenceReader.cpp
deleted file mode 100644
index 5d7e83f7f09..00000000000
--- a/intern/audaspace/intern/AUD_SilenceReader.cpp
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_SilenceReader.cpp
- * \ingroup audaspaceintern
- */
-
-
-#include "AUD_SilenceReader.h"
-
-#include <cstring>
-
-AUD_SilenceReader::AUD_SilenceReader() :
- m_position(0)
-{
-}
-
-bool AUD_SilenceReader::isSeekable() const
-{
- return true;
-}
-
-void AUD_SilenceReader::seek(int position)
-{
- m_position = position;
-}
-
-int AUD_SilenceReader::getLength() const
-{
- return -1;
-}
-
-int AUD_SilenceReader::getPosition() const
-{
- return m_position;
-}
-
-AUD_Specs AUD_SilenceReader::getSpecs() const
-{
- AUD_Specs specs;
- specs.rate = AUD_RATE_48000;
- specs.channels = AUD_CHANNELS_MONO;
- return specs;
-}
-
-void AUD_SilenceReader::read(int& length, bool& eos, sample_t* buffer)
-{
- memset(buffer, 0, length * sizeof(sample_t));
- m_position += length;
- eos = false;
-}
diff --git a/intern/audaspace/intern/AUD_SilenceReader.h b/intern/audaspace/intern/AUD_SilenceReader.h
deleted file mode 100644
index cac56a0861b..00000000000
--- a/intern/audaspace/intern/AUD_SilenceReader.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_SilenceReader.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_SILENCEREADER_H__
-#define __AUD_SILENCEREADER_H__
-
-#include "AUD_IReader.h"
-#include "AUD_Buffer.h"
-
-/**
- * This class is used for silence playback.
- * The signal generated is 44.1kHz mono.
- */
-class AUD_SilenceReader : public AUD_IReader
-{
-private:
- /**
- * The current position in samples.
- */
- int m_position;
-
- // hide copy constructor and operator=
- AUD_SilenceReader(const AUD_SilenceReader&);
- AUD_SilenceReader& operator=(const AUD_SilenceReader&);
-
-public:
- /**
- * Creates a new reader.
- */
- AUD_SilenceReader();
-
- virtual bool isSeekable() const;
- virtual void seek(int position);
- virtual int getLength() const;
- virtual int getPosition() const;
- virtual AUD_Specs getSpecs() const;
- virtual void read(int& length, bool& eos, sample_t* buffer);
-};
-
-#endif //__AUD_SILENCEREADER_H__
diff --git a/intern/audaspace/intern/AUD_SinusFactory.cpp b/intern/audaspace/intern/AUD_SinusFactory.cpp
deleted file mode 100644
index 2b9742cc90c..00000000000
--- a/intern/audaspace/intern/AUD_SinusFactory.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_SinusFactory.cpp
- * \ingroup audaspaceintern
- */
-
-
-#include "AUD_SinusFactory.h"
-#include "AUD_SinusReader.h"
-#include "AUD_Space.h"
-
-AUD_SinusFactory::AUD_SinusFactory(float frequency, AUD_SampleRate sampleRate) :
- m_frequency(frequency),
- m_sampleRate(sampleRate)
-{
-}
-
-float AUD_SinusFactory::getFrequency() const
-{
- return m_frequency;
-}
-
-boost::shared_ptr<AUD_IReader> AUD_SinusFactory::createReader()
-{
- return boost::shared_ptr<AUD_IReader>(new AUD_SinusReader(m_frequency, m_sampleRate));
-}
diff --git a/intern/audaspace/intern/AUD_SinusFactory.h b/intern/audaspace/intern/AUD_SinusFactory.h
deleted file mode 100644
index c8d409a4aff..00000000000
--- a/intern/audaspace/intern/AUD_SinusFactory.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_SinusFactory.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_SINUSFACTORY_H__
-#define __AUD_SINUSFACTORY_H__
-
-#include "AUD_IFactory.h"
-
-/**
- * This factory creates a reader that plays a sine tone.
- */
-class AUD_SinusFactory : public AUD_IFactory
-{
-private:
- /**
- * The frequence of the sine wave.
- */
- const float m_frequency;
-
- /**
- * The target sample rate for output.
- */
- const AUD_SampleRate m_sampleRate;
-
- // hide copy constructor and operator=
- AUD_SinusFactory(const AUD_SinusFactory&);
- AUD_SinusFactory& operator=(const AUD_SinusFactory&);
-
-public:
- /**
- * Creates a new sine factory.
- * \param frequency The desired frequency.
- * \param sampleRate The target sample rate for playback.
- */
- AUD_SinusFactory(float frequency,
- AUD_SampleRate sampleRate = AUD_RATE_48000);
-
- /**
- * Returns the frequency of the sine wave.
- */
- float getFrequency() const;
-
- virtual boost::shared_ptr<AUD_IReader> createReader();
-};
-
-#endif //__AUD_SINUSFACTORY_H__
diff --git a/intern/audaspace/intern/AUD_SinusReader.cpp b/intern/audaspace/intern/AUD_SinusReader.cpp
deleted file mode 100644
index 2e89126bd7b..00000000000
--- a/intern/audaspace/intern/AUD_SinusReader.cpp
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_SinusReader.cpp
- * \ingroup audaspaceintern
- */
-
-
-#include "AUD_SinusReader.h"
-
-#include <cmath>
-
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-
-AUD_SinusReader::AUD_SinusReader(float frequency, AUD_SampleRate sampleRate) :
- m_frequency(frequency),
- m_position(0),
- m_sampleRate(sampleRate)
-{
-}
-
-bool AUD_SinusReader::isSeekable() const
-{
- return true;
-}
-
-void AUD_SinusReader::seek(int position)
-{
- m_position = position;
-}
-
-int AUD_SinusReader::getLength() const
-{
- return -1;
-}
-
-int AUD_SinusReader::getPosition() const
-{
- return m_position;
-}
-
-AUD_Specs AUD_SinusReader::getSpecs() const
-{
- AUD_Specs specs;
- specs.rate = m_sampleRate;
- specs.channels = AUD_CHANNELS_MONO;
- return specs;
-}
-
-void AUD_SinusReader::read(int& length, bool& eos, sample_t* buffer)
-{
- // fill with sine data
- for(int i = 0; i < length; i++)
- {
- buffer[i] = sin((m_position + i) * 2 * M_PI * m_frequency / m_sampleRate);
- }
-
- m_position += length;
- eos = false;
-}
diff --git a/intern/audaspace/intern/AUD_SinusReader.h b/intern/audaspace/intern/AUD_SinusReader.h
deleted file mode 100644
index 50487ea94aa..00000000000
--- a/intern/audaspace/intern/AUD_SinusReader.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_SinusReader.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_SINUSREADER_H__
-#define __AUD_SINUSREADER_H__
-
-#include "AUD_IReader.h"
-#include "AUD_Buffer.h"
-
-/**
- * This class is used for sine tone playback.
- * The sample rate can be specified, the signal is mono.
- */
-class AUD_SinusReader : public AUD_IReader
-{
-private:
- /**
- * The frequency of the sine wave.
- */
- const float m_frequency;
-
- /**
- * The current position in samples.
- */
- int m_position;
-
- /**
- * The sample rate for the output.
- */
- const AUD_SampleRate m_sampleRate;
-
- // hide copy constructor and operator=
- AUD_SinusReader(const AUD_SinusReader&);
- AUD_SinusReader& operator=(const AUD_SinusReader&);
-
-public:
- /**
- * Creates a new reader.
- * \param frequency The frequency of the sine wave.
- * \param sampleRate The output sample rate.
- */
- AUD_SinusReader(float frequency, AUD_SampleRate sampleRate);
-
- virtual bool isSeekable() const;
- virtual void seek(int position);
- virtual int getLength() const;
- virtual int getPosition() const;
- virtual AUD_Specs getSpecs() const;
- virtual void read(int& length, bool& eos, sample_t* buffer);
-};
-
-#endif //__AUD_SINUSREADER_H__
diff --git a/intern/audaspace/intern/AUD_SoftwareDevice.cpp b/intern/audaspace/intern/AUD_SoftwareDevice.cpp
deleted file mode 100644
index 10e42a82b76..00000000000
--- a/intern/audaspace/intern/AUD_SoftwareDevice.cpp
+++ /dev/null
@@ -1,995 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_SoftwareDevice.cpp
- * \ingroup audaspaceintern
- */
-
-
-#include "AUD_SoftwareDevice.h"
-#include "AUD_IReader.h"
-#include "AUD_Mixer.h"
-#include "AUD_IFactory.h"
-#include "AUD_JOSResampleReader.h"
-#include "AUD_LinearResampleReader.h"
-#include "AUD_MutexLock.h"
-
-#include <cstring>
-#include <cmath>
-#include <limits>
-
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-
-typedef enum
-{
- AUD_RENDER_DISTANCE = 0x01,
- AUD_RENDER_DOPPLER = 0x02,
- AUD_RENDER_CONE = 0x04,
- AUD_RENDER_VOLUME = 0x08
-} AUD_RenderFlags;
-
-#define AUD_PITCH_MAX 10
-
-/******************************************************************************/
-/********************** AUD_SoftwareHandle Handle Code ************************/
-/******************************************************************************/
-
-bool AUD_SoftwareDevice::AUD_SoftwareHandle::pause(bool keep)
-{
- if(m_status)
- {
- AUD_MutexLock lock(*m_device);
-
- if(m_status == AUD_STATUS_PLAYING)
- {
- for(AUD_HandleIterator it = m_device->m_playingSounds.begin(); it != m_device->m_playingSounds.end(); it++)
- {
- if(it->get() == this)
- {
- boost::shared_ptr<AUD_SoftwareHandle> This = *it;
-
- m_device->m_playingSounds.erase(it);
- m_device->m_pausedSounds.push_back(This);
-
- if(m_device->m_playingSounds.empty())
- m_device->playing(m_device->m_playback = false);
-
- m_status = keep ? AUD_STATUS_STOPPED : AUD_STATUS_PAUSED;
-
- return true;
- }
- }
- }
- }
-
- return false;
-}
-
-AUD_SoftwareDevice::AUD_SoftwareHandle::AUD_SoftwareHandle(AUD_SoftwareDevice* device, boost::shared_ptr<AUD_IReader> reader, boost::shared_ptr<AUD_PitchReader> pitch, boost::shared_ptr<AUD_ResampleReader> resampler, boost::shared_ptr<AUD_ChannelMapperReader> mapper, bool keep) :
- m_reader(reader), m_pitch(pitch), m_resampler(resampler), m_mapper(mapper), m_keep(keep), m_user_pitch(1.0f), m_user_volume(1.0f), m_user_pan(0.0f), m_volume(0.0f), m_old_volume(0.0f), m_loopcount(0),
- m_relative(true), m_volume_max(1.0f), m_volume_min(0), m_distance_max(std::numeric_limits<float>::max()),
- m_distance_reference(1.0f), m_attenuation(1.0f), m_cone_angle_outer(M_PI), m_cone_angle_inner(M_PI), m_cone_volume_outer(0),
- m_flags(AUD_RENDER_CONE), m_stop(NULL), m_stop_data(NULL), m_status(AUD_STATUS_PLAYING), m_device(device)
-{
-}
-
-void AUD_SoftwareDevice::AUD_SoftwareHandle::update()
-{
- int flags = 0;
-
- m_old_volume = m_volume;
-
- AUD_Vector3 SL;
- if(m_relative)
- SL = -m_location;
- else
- SL = m_device->m_location - m_location;
- float distance = SL * SL;
-
- if(distance > 0)
- distance = sqrt(distance);
- else
- flags |= AUD_RENDER_DOPPLER | AUD_RENDER_DISTANCE;
-
- if(m_pitch->getSpecs().channels != AUD_CHANNELS_MONO)
- {
- m_volume = m_user_volume;
- m_pitch->setPitch(m_user_pitch);
- return;
- }
-
- flags = ~(flags | m_flags | m_device->m_flags);
-
- // Doppler and Pitch
-
- if(flags & AUD_RENDER_DOPPLER)
- {
- float vls;
- if(m_relative)
- vls = 0;
- else
- vls = SL * m_device->m_velocity / distance;
- float vss = SL * m_velocity / distance;
- float max = m_device->m_speed_of_sound / m_device->m_doppler_factor;
- if(vss >= max)
- {
- m_pitch->setPitch(AUD_PITCH_MAX);
- }
- else
- {
- if(vls > max)
- vls = max;
-
- m_pitch->setPitch((m_device->m_speed_of_sound - m_device->m_doppler_factor * vls) / (m_device->m_speed_of_sound - m_device->m_doppler_factor * vss) * m_user_pitch);
- }
- }
- else
- m_pitch->setPitch(m_user_pitch);
-
- if(flags & AUD_RENDER_VOLUME)
- {
- // Distance
-
- if(flags & AUD_RENDER_DISTANCE)
- {
- if(m_device->m_distance_model == AUD_DISTANCE_MODEL_INVERSE_CLAMPED ||
- m_device->m_distance_model == AUD_DISTANCE_MODEL_LINEAR_CLAMPED ||
- m_device->m_distance_model == AUD_DISTANCE_MODEL_EXPONENT_CLAMPED)
- {
- distance = AUD_MAX(AUD_MIN(m_distance_max, distance), m_distance_reference);
- }
-
- switch(m_device->m_distance_model)
- {
- case AUD_DISTANCE_MODEL_INVERSE:
- case AUD_DISTANCE_MODEL_INVERSE_CLAMPED:
- m_volume = m_distance_reference / (m_distance_reference + m_attenuation * (distance - m_distance_reference));
- break;
- case AUD_DISTANCE_MODEL_LINEAR:
- case AUD_DISTANCE_MODEL_LINEAR_CLAMPED:
- {
- float temp = m_distance_max - m_distance_reference;
- if(temp == 0)
- {
- if(distance > m_distance_reference)
- m_volume = 0.0f;
- else
- m_volume = 1.0f;
- }
- else
- m_volume = 1.0f - m_attenuation * (distance - m_distance_reference) / (m_distance_max - m_distance_reference);
- break;
- }
- case AUD_DISTANCE_MODEL_EXPONENT:
- case AUD_DISTANCE_MODEL_EXPONENT_CLAMPED:
- if(m_distance_reference == 0)
- m_volume = 0;
- else
- m_volume = pow(distance / m_distance_reference, -m_attenuation);
- break;
- default:
- m_volume = 1.0f;
- }
- }
- else
- m_volume = 1.0f;
-
- // Cone
-
- if(flags & AUD_RENDER_CONE)
- {
- AUD_Vector3 SZ = m_orientation.getLookAt();
-
- float phi = acos(float(SZ * SL / (SZ.length() * SL.length())));
- float t = (phi - m_cone_angle_inner)/(m_cone_angle_outer - m_cone_angle_inner);
-
- if(t > 0)
- {
- if(t > 1)
- m_volume *= m_cone_volume_outer;
- else
- m_volume *= 1 + t * (m_cone_volume_outer - 1);
- }
- }
-
- if(m_volume > m_volume_max)
- m_volume = m_volume_max;
- else if(m_volume < m_volume_min)
- m_volume = m_volume_min;
-
- // Volume
-
- m_volume *= m_user_volume;
- }
-
- // 3D Cue
-
- AUD_Quaternion orientation;
-
- if(!m_relative)
- orientation = m_device->m_orientation;
-
- AUD_Vector3 Z = orientation.getLookAt();
- AUD_Vector3 N = orientation.getUp();
- AUD_Vector3 A = N * ((SL * N) / (N * N)) - SL;
-
- float Asquare = A * A;
-
- if(Asquare > 0)
- {
- float phi = acos(float(Z * A / (Z.length() * sqrt(Asquare))));
- if(N.cross(Z) * A > 0)
- phi = -phi;
-
- m_mapper->setMonoAngle(phi);
- }
- else
- m_mapper->setMonoAngle(m_relative ? m_user_pan * M_PI / 2.0 : 0);
-}
-
-void AUD_SoftwareDevice::AUD_SoftwareHandle::setSpecs(AUD_Specs specs)
-{
- m_mapper->setChannels(specs.channels);
- m_resampler->setRate(specs.rate);
-}
-
-bool AUD_SoftwareDevice::AUD_SoftwareHandle::pause()
-{
- return pause(false);
-}
-
-bool AUD_SoftwareDevice::AUD_SoftwareHandle::resume()
-{
- if(m_status)
- {
- AUD_MutexLock lock(*m_device);
-
- if(m_status == AUD_STATUS_PAUSED)
- {
- for(AUD_HandleIterator it = m_device->m_pausedSounds.begin(); it != m_device->m_pausedSounds.end(); it++)
- {
- if(it->get() == this)
- {
- boost::shared_ptr<AUD_SoftwareHandle> This = *it;
-
- m_device->m_pausedSounds.erase(it);
-
- m_device->m_playingSounds.push_back(This);
-
- if(!m_device->m_playback)
- m_device->playing(m_device->m_playback = true);
- m_status = AUD_STATUS_PLAYING;
-
- return true;
- }
- }
- }
-
- }
-
- return false;
-}
-
-bool AUD_SoftwareDevice::AUD_SoftwareHandle::stop()
-{
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return false;
-
- m_status = AUD_STATUS_INVALID;
-
- for(AUD_HandleIterator it = m_device->m_playingSounds.begin(); it != m_device->m_playingSounds.end(); it++)
- {
- if(it->get() == this)
- {
- boost::shared_ptr<AUD_SoftwareHandle> This = *it;
-
- m_device->m_playingSounds.erase(it);
-
- if(m_device->m_playingSounds.empty())
- m_device->playing(m_device->m_playback = false);
-
- return true;
- }
- }
-
- for(AUD_HandleIterator it = m_device->m_pausedSounds.begin(); it != m_device->m_pausedSounds.end(); it++)
- {
- if(it->get() == this)
- {
- m_device->m_pausedSounds.erase(it);
- return true;
- }
- }
-
- return false;
-}
-
-bool AUD_SoftwareDevice::AUD_SoftwareHandle::getKeep()
-{
- if(m_status)
- return m_keep;
-
- return false;
-}
-
-bool AUD_SoftwareDevice::AUD_SoftwareHandle::setKeep(bool keep)
-{
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return false;
-
- m_keep = keep;
-
- return true;
-}
-
-bool AUD_SoftwareDevice::AUD_SoftwareHandle::seek(float position)
-{
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return false;
-
- m_pitch->setPitch(m_user_pitch);
- m_reader->seek((int)(position * m_reader->getSpecs().rate));
-
- if(m_status == AUD_STATUS_STOPPED)
- m_status = AUD_STATUS_PAUSED;
-
- return true;
-}
-
-float AUD_SoftwareDevice::AUD_SoftwareHandle::getPosition()
-{
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return 0.0f;
-
- float position = m_reader->getPosition() / (float)m_device->m_specs.rate;
-
- return position;
-}
-
-AUD_Status AUD_SoftwareDevice::AUD_SoftwareHandle::getStatus()
-{
- return m_status;
-}
-
-float AUD_SoftwareDevice::AUD_SoftwareHandle::getVolume()
-{
- return m_user_volume;
-}
-
-bool AUD_SoftwareDevice::AUD_SoftwareHandle::setVolume(float volume)
-{
- if(!m_status)
- return false;
- m_user_volume = volume;
-
- if(volume == 0)
- {
- m_old_volume = m_volume = volume;
- m_flags |= AUD_RENDER_VOLUME;
- }
- else
- m_flags &= ~AUD_RENDER_VOLUME;
-
- return true;
-}
-
-float AUD_SoftwareDevice::AUD_SoftwareHandle::getPitch()
-{
- return m_user_pitch;
-}
-
-bool AUD_SoftwareDevice::AUD_SoftwareHandle::setPitch(float pitch)
-{
- if(!m_status)
- return false;
- if(pitch <= 0)
- pitch = 1;
- m_user_pitch = pitch;
- return true;
-}
-
-int AUD_SoftwareDevice::AUD_SoftwareHandle::getLoopCount()
-{
- if(!m_status)
- return 0;
- return m_loopcount;
-}
-
-bool AUD_SoftwareDevice::AUD_SoftwareHandle::setLoopCount(int count)
-{
- if(!m_status)
- return false;
-
- if(m_status == AUD_STATUS_STOPPED && (count > m_loopcount || count < 0))
- m_status = AUD_STATUS_PAUSED;
-
- m_loopcount = count;
-
- return true;
-}
-
-bool AUD_SoftwareDevice::AUD_SoftwareHandle::setStopCallback(stopCallback callback, void* data)
-{
- if(!m_status)
- return false;
-
- AUD_MutexLock lock(*m_device);
-
- if(!m_status)
- return false;
-
- m_stop = callback;
- m_stop_data = data;
-
- return true;
-}
-
-
-
-/******************************************************************************/
-/******************** AUD_SoftwareHandle 3DHandle Code ************************/
-/******************************************************************************/
-
-AUD_Vector3 AUD_SoftwareDevice::AUD_SoftwareHandle::getSourceLocation()
-{
- if(!m_status)
- return AUD_Vector3();
-
- return m_location;
-}
-
-bool AUD_SoftwareDevice::AUD_SoftwareHandle::setSourceLocation(const AUD_Vector3& location)
-{
- if(!m_status)
- return false;
-
- m_location = location;
-
- return true;
-}
-
-AUD_Vector3 AUD_SoftwareDevice::AUD_SoftwareHandle::getSourceVelocity()
-{
- if(!m_status)
- return AUD_Vector3();
-
- return m_velocity;
-}
-
-bool AUD_SoftwareDevice::AUD_SoftwareHandle::setSourceVelocity(const AUD_Vector3& velocity)
-{
- if(!m_status)
- return false;
-
- m_velocity = velocity;
-
- return true;
-}
-
-AUD_Quaternion AUD_SoftwareDevice::AUD_SoftwareHandle::getSourceOrientation()
-{
- if(!m_status)
- return AUD_Quaternion();
-
- return m_orientation;
-}
-
-bool AUD_SoftwareDevice::AUD_SoftwareHandle::setSourceOrientation(const AUD_Quaternion& orientation)
-{
- if(!m_status)
- return false;
-
- m_orientation = orientation;
-
- return true;
-}
-
-bool AUD_SoftwareDevice::AUD_SoftwareHandle::isRelative()
-{
- if(!m_status)
- return false;
-
- return m_relative;
-}
-
-bool AUD_SoftwareDevice::AUD_SoftwareHandle::setRelative(bool relative)
-{
- if(!m_status)
- return false;
-
- m_relative = relative;
-
- return true;
-}
-
-float AUD_SoftwareDevice::AUD_SoftwareHandle::getVolumeMaximum()
-{
- if(!m_status)
- return std::numeric_limits<float>::quiet_NaN();
-
- return m_volume_max;
-}
-
-bool AUD_SoftwareDevice::AUD_SoftwareHandle::setVolumeMaximum(float volume)
-{
- if(!m_status)
- return false;
-
- m_volume_max = volume;
-
- return true;
-}
-
-float AUD_SoftwareDevice::AUD_SoftwareHandle::getVolumeMinimum()
-{
- if(!m_status)
- return std::numeric_limits<float>::quiet_NaN();
-
- return m_volume_min;
-}
-
-bool AUD_SoftwareDevice::AUD_SoftwareHandle::setVolumeMinimum(float volume)
-{
- if(!m_status)
- return false;
-
- m_volume_min = volume;
-
- return true;
-}
-
-float AUD_SoftwareDevice::AUD_SoftwareHandle::getDistanceMaximum()
-{
- if(!m_status)
- return std::numeric_limits<float>::quiet_NaN();
-
- return m_distance_max;
-}
-
-bool AUD_SoftwareDevice::AUD_SoftwareHandle::setDistanceMaximum(float distance)
-{
- if(!m_status)
- return false;
-
- m_distance_max = distance;
-
- return true;
-}
-
-float AUD_SoftwareDevice::AUD_SoftwareHandle::getDistanceReference()
-{
- if(!m_status)
- return std::numeric_limits<float>::quiet_NaN();
-
- return m_distance_reference;
-}
-
-bool AUD_SoftwareDevice::AUD_SoftwareHandle::setDistanceReference(float distance)
-{
- if(!m_status)
- return false;
-
- m_distance_reference = distance;
-
- return true;
-}
-
-float AUD_SoftwareDevice::AUD_SoftwareHandle::getAttenuation()
-{
- if(!m_status)
- return std::numeric_limits<float>::quiet_NaN();
-
- return m_attenuation;
-}
-
-bool AUD_SoftwareDevice::AUD_SoftwareHandle::setAttenuation(float factor)
-{
- if(!m_status)
- return false;
-
- m_attenuation = factor;
-
- if(factor == 0)
- m_flags |= AUD_RENDER_DISTANCE;
- else
- m_flags &= ~AUD_RENDER_DISTANCE;
-
- return true;
-}
-
-float AUD_SoftwareDevice::AUD_SoftwareHandle::getConeAngleOuter()
-{
- if(!m_status)
- return std::numeric_limits<float>::quiet_NaN();
-
- return m_cone_angle_outer * 360.0f / M_PI;
-}
-
-bool AUD_SoftwareDevice::AUD_SoftwareHandle::setConeAngleOuter(float angle)
-{
- if(!m_status)
- return false;
-
- m_cone_angle_outer = angle * M_PI / 360.0f;
-
- return true;
-}
-
-float AUD_SoftwareDevice::AUD_SoftwareHandle::getConeAngleInner()
-{
- if(!m_status)
- return std::numeric_limits<float>::quiet_NaN();
-
- return m_cone_angle_inner * 360.0f / M_PI;
-}
-
-bool AUD_SoftwareDevice::AUD_SoftwareHandle::setConeAngleInner(float angle)
-{
- if(!m_status)
- return false;
-
- if(angle >= 360)
- m_flags |= AUD_RENDER_CONE;
- else
- m_flags &= ~AUD_RENDER_CONE;
-
- m_cone_angle_inner = angle * M_PI / 360.0f;
-
- return true;
-}
-
-float AUD_SoftwareDevice::AUD_SoftwareHandle::getConeVolumeOuter()
-{
- if(!m_status)
- return std::numeric_limits<float>::quiet_NaN();
-
- return m_cone_volume_outer;
-}
-
-bool AUD_SoftwareDevice::AUD_SoftwareHandle::setConeVolumeOuter(float volume)
-{
- if(!m_status)
- return false;
-
- m_cone_volume_outer = volume;
-
- return true;
-}
-
-/******************************************************************************/
-/**************************** IDevice Code ************************************/
-/******************************************************************************/
-
-void AUD_SoftwareDevice::create()
-{
- m_playback = false;
- m_volume = 1.0f;
- m_mixer = boost::shared_ptr<AUD_Mixer>(new AUD_Mixer(m_specs));
- m_speed_of_sound = 343.3f;
- m_doppler_factor = 1.0f;
- m_distance_model = AUD_DISTANCE_MODEL_INVERSE_CLAMPED;
- m_flags = 0;
- m_quality = false;
-
- pthread_mutexattr_t attr;
- pthread_mutexattr_init(&attr);
- pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
-
- pthread_mutex_init(&m_mutex, &attr);
-
- pthread_mutexattr_destroy(&attr);
-}
-
-void AUD_SoftwareDevice::destroy()
-{
- if(m_playback)
- playing(m_playback = false);
-
- while(!m_playingSounds.empty())
- m_playingSounds.front()->stop();
-
- while(!m_pausedSounds.empty())
- m_pausedSounds.front()->stop();
-
- pthread_mutex_destroy(&m_mutex);
-}
-
-void AUD_SoftwareDevice::mix(data_t* buffer, int length)
-{
- m_buffer.assureSize(length * AUD_SAMPLE_SIZE(m_specs));
-
- AUD_MutexLock lock(*this);
-
- {
- boost::shared_ptr<AUD_SoftwareDevice::AUD_SoftwareHandle> sound;
- int len;
- int pos;
- bool eos;
- std::list<boost::shared_ptr<AUD_SoftwareDevice::AUD_SoftwareHandle> > stopSounds;
- std::list<boost::shared_ptr<AUD_SoftwareDevice::AUD_SoftwareHandle> > pauseSounds;
- sample_t* buf = m_buffer.getBuffer();
-
- m_mixer->clear(length);
-
- // for all sounds
- AUD_HandleIterator it = m_playingSounds.begin();
- while(it != m_playingSounds.end())
- {
- sound = *it;
- // increment the iterator to make sure it's valid,
- // in case the sound gets deleted after stopping
- ++it;
-
- // get the buffer from the source
- pos = 0;
- len = length;
-
- // update 3D Info
- sound->update();
-
- sound->m_reader->read(len, eos, buf);
-
- // in case of looping
- while(pos + len < length && sound->m_loopcount && eos)
- {
- m_mixer->mix(buf, pos, len, sound->m_volume, sound->m_old_volume);
-
- pos += len;
-
- if(sound->m_loopcount > 0)
- sound->m_loopcount--;
-
- sound->m_reader->seek(0);
-
- len = length - pos;
- sound->m_reader->read(len, eos, buf);
-
- // prevent endless loop
- if(!len)
- break;
- }
-
- m_mixer->mix(buf, pos, len, sound->m_volume, sound->m_old_volume);
-
- // in case the end of the sound is reached
- if(eos && !sound->m_loopcount)
- {
- if(sound->m_stop)
- sound->m_stop(sound->m_stop_data);
-
- if(sound->m_keep)
- pauseSounds.push_back(sound);
- else
- stopSounds.push_back(sound);
- }
- }
-
- // superpose
- m_mixer->read(buffer, m_volume);
-
- // cleanup
- for(it = pauseSounds.begin(); it != pauseSounds.end(); it++)
- (*it)->pause(true);
-
- for(it = stopSounds.begin(); it != stopSounds.end(); it++)
- (*it)->stop();
-
- pauseSounds.clear();
- stopSounds.clear();
- }
-}
-
-void AUD_SoftwareDevice::setPanning(AUD_IHandle* handle, float pan)
-{
- AUD_SoftwareDevice::AUD_SoftwareHandle* h = dynamic_cast<AUD_SoftwareDevice::AUD_SoftwareHandle*>(handle);
- h->m_user_pan = pan;
-}
-
-void AUD_SoftwareDevice::setQuality(bool quality)
-{
- m_quality = quality;
-}
-
-void AUD_SoftwareDevice::setSpecs(AUD_Specs specs)
-{
- m_specs.specs = specs;
- m_mixer->setSpecs(specs);
-
- for(AUD_HandleIterator it = m_playingSounds.begin(); it != m_playingSounds.end(); it++)
- {
- (*it)->setSpecs(specs);
- }
-}
-
-AUD_DeviceSpecs AUD_SoftwareDevice::getSpecs() const
-{
- return m_specs;
-}
-
-boost::shared_ptr<AUD_IHandle> AUD_SoftwareDevice::play(boost::shared_ptr<AUD_IReader> reader, bool keep)
-{
- // prepare the reader
- // pitch
-
- boost::shared_ptr<AUD_PitchReader> pitch = boost::shared_ptr<AUD_PitchReader>(new AUD_PitchReader(reader, 1));
- reader = boost::shared_ptr<AUD_IReader>(pitch);
-
- boost::shared_ptr<AUD_ResampleReader> resampler;
-
- // resample
- if(m_quality)
- resampler = boost::shared_ptr<AUD_ResampleReader>(new AUD_JOSResampleReader(reader, m_specs.specs));
- else
- resampler = boost::shared_ptr<AUD_ResampleReader>(new AUD_LinearResampleReader(reader, m_specs.specs));
- reader = boost::shared_ptr<AUD_IReader>(resampler);
-
- // rechannel
- boost::shared_ptr<AUD_ChannelMapperReader> mapper = boost::shared_ptr<AUD_ChannelMapperReader>(new AUD_ChannelMapperReader(reader, m_specs.channels));
- reader = boost::shared_ptr<AUD_IReader>(mapper);
-
- if(!reader.get())
- return boost::shared_ptr<AUD_IHandle>();
-
- // play sound
- boost::shared_ptr<AUD_SoftwareDevice::AUD_SoftwareHandle> sound = boost::shared_ptr<AUD_SoftwareDevice::AUD_SoftwareHandle>(new AUD_SoftwareDevice::AUD_SoftwareHandle(this, reader, pitch, resampler, mapper, keep));
-
- AUD_MutexLock lock(*this);
-
- m_playingSounds.push_back(sound);
-
- if(!m_playback)
- playing(m_playback = true);
-
- return boost::shared_ptr<AUD_IHandle>(sound);
-}
-
-boost::shared_ptr<AUD_IHandle> AUD_SoftwareDevice::play(boost::shared_ptr<AUD_IFactory> factory, bool keep)
-{
- return play(factory->createReader(), keep);
-}
-
-void AUD_SoftwareDevice::stopAll()
-{
- AUD_MutexLock lock(*this);
-
- while(!m_playingSounds.empty())
- m_playingSounds.front()->stop();
-
- while(!m_pausedSounds.empty())
- m_pausedSounds.front()->stop();
-}
-
-void AUD_SoftwareDevice::lock()
-{
- pthread_mutex_lock(&m_mutex);
-}
-
-void AUD_SoftwareDevice::unlock()
-{
- pthread_mutex_unlock(&m_mutex);
-}
-
-float AUD_SoftwareDevice::getVolume() const
-{
- return m_volume;
-}
-
-void AUD_SoftwareDevice::setVolume(float volume)
-{
- m_volume = volume;
-}
-
-/******************************************************************************/
-/**************************** 3D Device Code **********************************/
-/******************************************************************************/
-
-AUD_Vector3 AUD_SoftwareDevice::getListenerLocation() const
-{
- return m_location;
-}
-
-void AUD_SoftwareDevice::setListenerLocation(const AUD_Vector3& location)
-{
- m_location = location;
-}
-
-AUD_Vector3 AUD_SoftwareDevice::getListenerVelocity() const
-{
- return m_velocity;
-}
-
-void AUD_SoftwareDevice::setListenerVelocity(const AUD_Vector3& velocity)
-{
- m_velocity = velocity;
-}
-
-AUD_Quaternion AUD_SoftwareDevice::getListenerOrientation() const
-{
- return m_orientation;
-}
-
-void AUD_SoftwareDevice::setListenerOrientation(const AUD_Quaternion& orientation)
-{
- m_orientation = orientation;
-}
-
-float AUD_SoftwareDevice::getSpeedOfSound() const
-{
- return m_speed_of_sound;
-}
-
-void AUD_SoftwareDevice::setSpeedOfSound(float speed)
-{
- m_speed_of_sound = speed;
-}
-
-float AUD_SoftwareDevice::getDopplerFactor() const
-{
- return m_doppler_factor;
-}
-
-void AUD_SoftwareDevice::setDopplerFactor(float factor)
-{
- m_doppler_factor = factor;
- if(factor == 0)
- m_flags |= AUD_RENDER_DOPPLER;
- else
- m_flags &= ~AUD_RENDER_DOPPLER;
-}
-
-AUD_DistanceModel AUD_SoftwareDevice::getDistanceModel() const
-{
- return m_distance_model;
-}
-
-void AUD_SoftwareDevice::setDistanceModel(AUD_DistanceModel model)
-{
- m_distance_model = model;
- if(model == AUD_DISTANCE_MODEL_INVALID)
- m_flags |= AUD_RENDER_DISTANCE;
- else
- m_flags &= ~AUD_RENDER_DISTANCE;
-}
diff --git a/intern/audaspace/intern/AUD_SoftwareDevice.h b/intern/audaspace/intern/AUD_SoftwareDevice.h
deleted file mode 100644
index 54e49c87b27..00000000000
--- a/intern/audaspace/intern/AUD_SoftwareDevice.h
+++ /dev/null
@@ -1,348 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_SoftwareDevice.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_SOFTWAREDEVICE_H__
-#define __AUD_SOFTWAREDEVICE_H__
-
-#include "AUD_IDevice.h"
-#include "AUD_IHandle.h"
-#include "AUD_I3DDevice.h"
-#include "AUD_I3DHandle.h"
-#include "AUD_Mixer.h"
-#include "AUD_Buffer.h"
-#include "AUD_PitchReader.h"
-#include "AUD_ResampleReader.h"
-#include "AUD_ChannelMapperReader.h"
-
-#include <list>
-#include <pthread.h>
-
-/**
- * This device plays is a generic device with software mixing.
- * Classes implementing this have to:
- * - Implement the playing function.
- * - Prepare the m_specs, m_mixer variables.
- * - Call the create and destroy functions.
- * - Call the mix function to retrieve their audio data.
- */
-class AUD_SoftwareDevice : public AUD_IDevice, public AUD_I3DDevice
-{
-protected:
- /// Saves the data for playback.
- class AUD_SoftwareHandle : public AUD_IHandle, public AUD_I3DHandle
- {
- public:
- /// The reader source.
- boost::shared_ptr<AUD_IReader> m_reader;
-
- /// The pitch reader in between.
- boost::shared_ptr<AUD_PitchReader> m_pitch;
-
- /// The resample reader in between.
- boost::shared_ptr<AUD_ResampleReader> m_resampler;
-
- /// The channel mapper reader in between.
- boost::shared_ptr<AUD_ChannelMapperReader> m_mapper;
-
- /// Whether to keep the source if end of it is reached.
- bool m_keep;
-
- /// The user set pitch of the source.
- float m_user_pitch;
-
- /// The user set volume of the source.
- float m_user_volume;
-
- /// The user set panning for non-3D sources
- float m_user_pan;
-
- /// The calculated final volume of the source.
- float m_volume;
- float m_old_volume;
-
- /// The loop count of the source.
- int m_loopcount;
-
- /// Location in 3D Space.
- AUD_Vector3 m_location;
-
- /// Velocity in 3D Space.
- AUD_Vector3 m_velocity;
-
- /// Orientation in 3D Space.
- AUD_Quaternion m_orientation;
-
- /// Whether the position to the listener is relative or absolute
- bool m_relative;
-
- /// Maximum volume.
- float m_volume_max;
-
- /// Minimum volume.
- float m_volume_min;
-
- /// Maximum distance.
- float m_distance_max;
-
- /// Reference distance;
- float m_distance_reference;
-
- /// Attenuation
- float m_attenuation;
-
- /// Cone outer angle.
- float m_cone_angle_outer;
-
- /// Cone inner angle.
- float m_cone_angle_inner;
-
- /// Cone outer volume.
- float m_cone_volume_outer;
-
- /// Rendering flags
- int m_flags;
-
- /// The stop callback.
- stopCallback m_stop;
-
- /// Stop callback data.
- void* m_stop_data;
-
- /// Current status of the handle
- AUD_Status m_status;
-
- /// Own device.
- AUD_SoftwareDevice* m_device;
-
- bool pause(bool keep);
-
- public:
-
- /**
- * Creates a new software handle.
- * \param device The device this handle is from.
- * \param reader The reader to play.
- * \param pitch The pitch reader.
- * \param resampler The resampling reader.
- * \param mapper The channel mapping reader.
- * \param keep Whether to keep the handle when the sound ends.
- */
- AUD_SoftwareHandle(AUD_SoftwareDevice* device, boost::shared_ptr<AUD_IReader> reader, boost::shared_ptr<AUD_PitchReader> pitch, boost::shared_ptr<AUD_ResampleReader> resampler, boost::shared_ptr<AUD_ChannelMapperReader> mapper, bool keep);
-
- /**
- * Updates the handle's playback parameters.
- */
- void update();
-
- /**
- * Sets the audio output specification of the readers.
- * \param sepcs The output specification.
- */
- void setSpecs(AUD_Specs specs);
-
- virtual ~AUD_SoftwareHandle() {}
- virtual bool pause();
- virtual bool resume();
- virtual bool stop();
- virtual bool getKeep();
- virtual bool setKeep(bool keep);
- virtual bool seek(float position);
- virtual float getPosition();
- virtual AUD_Status getStatus();
- virtual float getVolume();
- virtual bool setVolume(float volume);
- virtual float getPitch();
- virtual bool setPitch(float pitch);
- virtual int getLoopCount();
- virtual bool setLoopCount(int count);
- virtual bool setStopCallback(stopCallback callback = 0, void* data = 0);
-
- virtual AUD_Vector3 getSourceLocation();
- virtual bool setSourceLocation(const AUD_Vector3& location);
- virtual AUD_Vector3 getSourceVelocity();
- virtual bool setSourceVelocity(const AUD_Vector3& velocity);
- virtual AUD_Quaternion getSourceOrientation();
- virtual bool setSourceOrientation(const AUD_Quaternion& orientation);
- virtual bool isRelative();
- virtual bool setRelative(bool relative);
- virtual float getVolumeMaximum();
- virtual bool setVolumeMaximum(float volume);
- virtual float getVolumeMinimum();
- virtual bool setVolumeMinimum(float volume);
- virtual float getDistanceMaximum();
- virtual bool setDistanceMaximum(float distance);
- virtual float getDistanceReference();
- virtual bool setDistanceReference(float distance);
- virtual float getAttenuation();
- virtual bool setAttenuation(float factor);
- virtual float getConeAngleOuter();
- virtual bool setConeAngleOuter(float angle);
- virtual float getConeAngleInner();
- virtual bool setConeAngleInner(float angle);
- virtual float getConeVolumeOuter();
- virtual bool setConeVolumeOuter(float volume);
- };
-
- typedef std::list<boost::shared_ptr<AUD_SoftwareHandle> >::iterator AUD_HandleIterator;
-
- /**
- * The specification of the device.
- */
- AUD_DeviceSpecs m_specs;
-
- /**
- * The mixer.
- */
- boost::shared_ptr<AUD_Mixer> m_mixer;
-
- /**
- * Whether to do high or low quality resampling.
- */
- bool m_quality;
-
- /**
- * Initializes member variables.
- */
- void create();
-
- /**
- * Uninitializes member variables.
- */
- void destroy();
-
- /**
- * Mixes the next samples into the buffer.
- * \param buffer The target buffer.
- * \param length The length in samples to be filled.
- */
- void mix(data_t* buffer, int length);
-
- /**
- * This function tells the device, to start or pause playback.
- * \param playing True if device should playback.
- */
- virtual void playing(bool playing)=0;
-
- /**
- * Sets the audio output specification of the device.
- * \param sepcs The output specification.
- */
- void setSpecs(AUD_Specs specs);
-
-private:
- /**
- * The reading buffer.
- */
- AUD_Buffer m_buffer;
-
- /**
- * The list of sounds that are currently playing.
- */
- std::list<boost::shared_ptr<AUD_SoftwareHandle> > m_playingSounds;
-
- /**
- * The list of sounds that are currently paused.
- */
- std::list<boost::shared_ptr<AUD_SoftwareHandle> > m_pausedSounds;
-
- /**
- * Whether there is currently playback.
- */
- bool m_playback;
-
- /**
- * The mutex for locking.
- */
- pthread_mutex_t m_mutex;
-
- /**
- * The overall volume of the device.
- */
- float m_volume;
-
- /// Listener location.
- AUD_Vector3 m_location;
-
- /// Listener velocity.
- AUD_Vector3 m_velocity;
-
- /// Listener orientation.
- AUD_Quaternion m_orientation;
-
- /// Speed of Sound.
- float m_speed_of_sound;
-
- /// Doppler factor.
- float m_doppler_factor;
-
- /// Distance model.
- AUD_DistanceModel m_distance_model;
-
- /// Rendering flags
- int m_flags;
-
-public:
-
- /**
- * Sets the panning of a specific handle.
- * \param handle The handle to set the panning from.
- * \param pan The new panning value, should be in the range [-2, 2].
- */
- static void setPanning(AUD_IHandle* handle, float pan);
-
- /**
- * Sets the resampling quality.
- * \param quality Low (false) or high (true) quality.
- */
- void setQuality(bool quality);
-
- virtual AUD_DeviceSpecs getSpecs() const;
- virtual boost::shared_ptr<AUD_IHandle> play(boost::shared_ptr<AUD_IReader> reader, bool keep = false);
- virtual boost::shared_ptr<AUD_IHandle> play(boost::shared_ptr<AUD_IFactory> factory, bool keep = false);
- virtual void stopAll();
- virtual void lock();
- virtual void unlock();
- virtual float getVolume() const;
- virtual void setVolume(float volume);
-
- virtual AUD_Vector3 getListenerLocation() const;
- virtual void setListenerLocation(const AUD_Vector3& location);
- virtual AUD_Vector3 getListenerVelocity() const;
- virtual void setListenerVelocity(const AUD_Vector3& velocity);
- virtual AUD_Quaternion getListenerOrientation() const;
- virtual void setListenerOrientation(const AUD_Quaternion& orientation);
- virtual float getSpeedOfSound() const;
- virtual void setSpeedOfSound(float speed);
- virtual float getDopplerFactor() const;
- virtual void setDopplerFactor(float factor);
- virtual AUD_DistanceModel getDistanceModel() const;
- virtual void setDistanceModel(AUD_DistanceModel model);
-};
-
-#endif //__AUD_SOFTWAREDEVICE_H__
diff --git a/intern/audaspace/intern/AUD_Space.h b/intern/audaspace/intern/AUD_Space.h
deleted file mode 100644
index 26bbdc5a8f7..00000000000
--- a/intern/audaspace/intern/AUD_Space.h
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_Space.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_SPACE_H__
-#define __AUD_SPACE_H__
-
-/// The size of a format in bytes.
-#define AUD_FORMAT_SIZE(format) (format & 0x0F)
-/// The size of a sample in the specified device format in bytes.
-#define AUD_DEVICE_SAMPLE_SIZE(specs) (specs.channels * (specs.format & 0x0F))
-/// The size of a sample in the specified format in bytes.
-#define AUD_SAMPLE_SIZE(specs) (specs.channels * sizeof(sample_t))
-/// Throws a AUD_Exception with the provided error code.
-#define AUD_THROW(exception, errorstr) { AUD_Exception e; e.error = exception; e.str = errorstr; throw e; }
-
-/// Compares two audio data specifications.
-#define AUD_COMPARE_SPECS(s1, s2) ((s1.rate == s2.rate) && (s1.channels == s2.channels))
-
-/// Returns the bit for a channel mask.
-#define AUD_CHANNEL_BIT(channel) (0x01 << channel)
-
-/// Returns the smaller of the two values.
-#define AUD_MIN(a, b) (((a) < (b)) ? (a) : (b))
-/// Returns the bigger of the two values.
-#define AUD_MAX(a, b) (((a) > (b)) ? (a) : (b))
-
-// 5 sec * 48000 samples/sec * 4 bytes/sample * 6 channels
-/// The size by which a buffer should be resized if the final extent is unknown.
-#define AUD_BUFFER_RESIZE_BYTES 5760000
-
-/// The default playback buffer size of a device.
-#define AUD_DEFAULT_BUFFER_SIZE 1024
-
-/**
- * The format of a sample.
- * The last 4 bit save the byte count of the format.
- */
-typedef enum
-{
- AUD_FORMAT_INVALID = 0x00, /// Invalid sample format.
- AUD_FORMAT_U8 = 0x01, /// 1 byte unsigned byte.
- AUD_FORMAT_S16 = 0x12, /// 2 byte signed integer.
- AUD_FORMAT_S24 = 0x13, /// 3 byte signed integer.
- AUD_FORMAT_S32 = 0x14, /// 4 byte signed integer.
- AUD_FORMAT_FLOAT32 = 0x24, /// 4 byte float.
- AUD_FORMAT_FLOAT64 = 0x28 /// 8 byte float.
-} AUD_SampleFormat;
-
-/// The channel count.
-typedef enum
-{
- AUD_CHANNELS_INVALID = 0, /// Invalid channel count.
- AUD_CHANNELS_MONO = 1, /// Mono.
- AUD_CHANNELS_STEREO = 2, /// Stereo.
- AUD_CHANNELS_STEREO_LFE = 3, /// Stereo with LFE channel.
- AUD_CHANNELS_SURROUND4 = 4, /// 4 channel surround sound.
- AUD_CHANNELS_SURROUND5 = 5, /// 5 channel surround sound.
- AUD_CHANNELS_SURROUND51 = 6, /// 5.1 surround sound.
- AUD_CHANNELS_SURROUND61 = 7, /// 6.1 surround sound.
- AUD_CHANNELS_SURROUND71 = 8 /// 7.1 surround sound.
-} AUD_Channels;
-
-/// The channel names.
-typedef enum
-{
- AUD_CHANNEL_FRONT_LEFT = 0,
- AUD_CHANNEL_FRONT_RIGHT,
- AUD_CHANNEL_FRONT_CENTER,
- AUD_CHANNEL_LFE,
- AUD_CHANNEL_REAR_LEFT,
- AUD_CHANNEL_REAR_RIGHT,
- AUD_CHANNEL_REAR_CENTER,
- AUD_CHANNEL_SIDE_LEFT,
- AUD_CHANNEL_SIDE_RIGHT,
- AUD_CHANNEL_MAX
-} AUD_Channel;
-
-/**
- * The sample rate tells how many samples are played back within one second.
- * Some exotic formats may use other sample rates than provided here.
- */
-typedef enum
-{
- AUD_RATE_INVALID = 0, /// Invalid sample rate.
- AUD_RATE_8000 = 8000, /// 8000 Hz.
- AUD_RATE_16000 = 16000, /// 16000 Hz.
- AUD_RATE_11025 = 11025, /// 11025 Hz.
- AUD_RATE_22050 = 22050, /// 22050 Hz.
- AUD_RATE_32000 = 32000, /// 32000 Hz.
- AUD_RATE_44100 = 44100, /// 44100 Hz.
- AUD_RATE_48000 = 48000, /// 48000 Hz.
- AUD_RATE_88200 = 88200, /// 88200 Hz.
- AUD_RATE_96000 = 96000, /// 96000 Hz.
- AUD_RATE_192000 = 192000 /// 192000 Hz.
-} AUD_DefaultSampleRate;
-
-/// Status of a playback handle.
-typedef enum
-{
- AUD_STATUS_INVALID = 0, /// Invalid handle. Maybe due to stopping.
- AUD_STATUS_PLAYING, /// Sound is playing.
- AUD_STATUS_PAUSED, /// Sound is being paused.
- AUD_STATUS_STOPPED /// Sound is stopped but kept in the device.
-} AUD_Status;
-
-/// Error codes for exceptions (C++ library) or for return values (C API).
-typedef enum
-{
- AUD_NO_ERROR = 0,
- AUD_ERROR_SPECS,
- AUD_ERROR_PROPS,
- AUD_ERROR_FILE,
- AUD_ERROR_SRC,
- AUD_ERROR_FFMPEG,
- AUD_ERROR_OPENAL,
- AUD_ERROR_SDL,
- AUD_ERROR_JACK
-} AUD_Error;
-
-/// Fading types.
-typedef enum
-{
- AUD_FADE_IN,
- AUD_FADE_OUT
-} AUD_FadeType;
-
-/// Possible distance models for the 3D device.
-typedef enum
-{
- AUD_DISTANCE_MODEL_INVALID = 0,
- AUD_DISTANCE_MODEL_INVERSE,
- AUD_DISTANCE_MODEL_INVERSE_CLAMPED,
- AUD_DISTANCE_MODEL_LINEAR,
- AUD_DISTANCE_MODEL_LINEAR_CLAMPED,
- AUD_DISTANCE_MODEL_EXPONENT,
- AUD_DISTANCE_MODEL_EXPONENT_CLAMPED
-} AUD_DistanceModel;
-
-/// Possible animatable properties for Sequencer Factories and Entries.
-typedef enum
-{
- AUD_AP_VOLUME,
- AUD_AP_PANNING,
- AUD_AP_PITCH,
- AUD_AP_LOCATION,
- AUD_AP_ORIENTATION
-} AUD_AnimateablePropertyType;
-
-/// Container formats for writers.
-typedef enum
-{
- AUD_CONTAINER_INVALID = 0,
- AUD_CONTAINER_AC3,
- AUD_CONTAINER_FLAC,
- AUD_CONTAINER_MATROSKA,
- AUD_CONTAINER_MP2,
- AUD_CONTAINER_MP3,
- AUD_CONTAINER_OGG,
- AUD_CONTAINER_WAV
-} AUD_Container;
-
-/// Audio codecs for writers.
-typedef enum
-{
- AUD_CODEC_INVALID = 0,
- AUD_CODEC_AAC,
- AUD_CODEC_AC3,
- AUD_CODEC_FLAC,
- AUD_CODEC_MP2,
- AUD_CODEC_MP3,
- AUD_CODEC_PCM,
- AUD_CODEC_VORBIS
-} AUD_Codec;
-
-/// Sample type.(float samples)
-typedef float sample_t;
-
-/// Sample data type (format samples)
-typedef unsigned char data_t;
-
-/// Sample rate type.
-typedef double AUD_SampleRate;
-
-/// Specification of a sound source.
-typedef struct
-{
- /// Sample rate in Hz.
- AUD_SampleRate rate;
-
- /// Channel count.
- AUD_Channels channels;
-} AUD_Specs;
-
-/// Specification of a sound device.
-typedef struct
-{
- /// Sample format.
- AUD_SampleFormat format;
-
- union
- {
- struct
- {
- /// Sample rate in Hz.
- AUD_SampleRate rate;
-
- /// Channel count.
- AUD_Channels channels;
- };
- AUD_Specs specs;
- };
-} AUD_DeviceSpecs;
-
-/// Exception structure.
-typedef struct
-{
- /**
- * Error code.
- * \see AUD_Error
- */
- AUD_Error error;
-
- /**
- * Error string.
- */
- const char* str;
-
- // void* userData; - for the case it is needed someday
-} AUD_Exception;
-
-#endif //__AUD_SPACE_H__
diff --git a/intern/audaspace/intern/AUD_StreamBufferFactory.cpp b/intern/audaspace/intern/AUD_StreamBufferFactory.cpp
deleted file mode 100644
index daa714aeec3..00000000000
--- a/intern/audaspace/intern/AUD_StreamBufferFactory.cpp
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_StreamBufferFactory.cpp
- * \ingroup audaspaceintern
- */
-
-
-#include "AUD_StreamBufferFactory.h"
-#include "AUD_BufferReader.h"
-#include "AUD_Buffer.h"
-
-#include <cstring>
-
-AUD_StreamBufferFactory::AUD_StreamBufferFactory(boost::shared_ptr<AUD_IFactory> factory) :
- m_buffer(new AUD_Buffer())
-{
- boost::shared_ptr<AUD_IReader> reader = factory->createReader();
-
- m_specs = reader->getSpecs();
-
- int sample_size = AUD_SAMPLE_SIZE(m_specs);
- int length;
- int index = 0;
- bool eos = false;
-
- // get an approximated size if possible
- int size = reader->getLength();
-
- if(size <= 0)
- size = AUD_BUFFER_RESIZE_BYTES / sample_size;
- else
- size += m_specs.rate;
-
- // as long as the end of the stream is not reached
- while(!eos)
- {
- // increase
- m_buffer->resize(size*sample_size, true);
-
- // read more
- length = size-index;
- reader->read(length, eos, m_buffer->getBuffer() + index * m_specs.channels);
- if(index == m_buffer->getSize() / sample_size)
- size += AUD_BUFFER_RESIZE_BYTES / sample_size;
- index += length;
- }
-
- m_buffer->resize(index * sample_size, true);
-}
-
-boost::shared_ptr<AUD_IReader> AUD_StreamBufferFactory::createReader()
-{
- return boost::shared_ptr<AUD_IReader>(new AUD_BufferReader(m_buffer, m_specs));
-}
diff --git a/intern/audaspace/intern/AUD_StreamBufferFactory.h b/intern/audaspace/intern/AUD_StreamBufferFactory.h
deleted file mode 100644
index 1bcd73d59b6..00000000000
--- a/intern/audaspace/intern/AUD_StreamBufferFactory.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/intern/AUD_StreamBufferFactory.h
- * \ingroup audaspaceintern
- */
-
-
-#ifndef __AUD_STREAMBUFFERFACTORY_H__
-#define __AUD_STREAMBUFFERFACTORY_H__
-
-#include "AUD_IFactory.h"
-#include "AUD_Buffer.h"
-
-#include <boost/shared_ptr.hpp>
-
-/**
- * This factory creates a buffer out of a reader. This way normally streamed
- * sound sources can be loaded into memory for buffered playback.
- */
-class AUD_StreamBufferFactory : public AUD_IFactory
-{
-private:
- /**
- * The buffer that holds the audio data.
- */
- boost::shared_ptr<AUD_Buffer> m_buffer;
-
- /**
- * The specification of the samples.
- */
- AUD_Specs m_specs;
-
- // hide copy constructor and operator=
- AUD_StreamBufferFactory(const AUD_StreamBufferFactory&);
- AUD_StreamBufferFactory& operator=(const AUD_StreamBufferFactory&);
-
-public:
- /**
- * Creates the factory and reads the reader created by the factory supplied
- * to the buffer.
- * \param factory The factory that creates the reader for buffering.
- * \exception AUD_Exception Thrown if the reader cannot be created.
- */
- AUD_StreamBufferFactory(boost::shared_ptr<AUD_IFactory> factory);
-
- virtual boost::shared_ptr<AUD_IReader> createReader();
-};
-
-#endif //__AUD_STREAMBUFFERFACTORY_H__
diff --git a/intern/audaspace/jack/AUD_JackDevice.cpp b/intern/audaspace/jack/AUD_JackDevice.cpp
deleted file mode 100644
index cfbf80ac110..00000000000
--- a/intern/audaspace/jack/AUD_JackDevice.cpp
+++ /dev/null
@@ -1,348 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/jack/AUD_JackDevice.cpp
- * \ingroup audjack
- */
-
-#include "AUD_JackDevice.h"
-#include "AUD_IReader.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-
-void* AUD_JackDevice::runMixingThread(void* device)
-{
- ((AUD_JackDevice*)device)->updateRingBuffers();
- return NULL;
-}
-
-void AUD_JackDevice::updateRingBuffers()
-{
- size_t size, temp;
- unsigned int samplesize = AUD_SAMPLE_SIZE(m_specs);
- unsigned int i, j;
- unsigned int channels = m_specs.channels;
- sample_t* buffer = m_buffer.getBuffer();
- float* deinterleave = m_deinterleavebuf.getBuffer();
- jack_transport_state_t state;
- jack_position_t position;
-
- pthread_mutex_lock(&m_mixingLock);
- while(m_valid)
- {
- if(m_sync > 1)
- {
- if(m_syncFunc)
- {
- state = AUD_jack_transport_query(m_client, &position);
- m_syncFunc(m_syncFuncData, state != JackTransportStopped, position.frame / (float) m_specs.rate);
- }
-
- for(i = 0; i < channels; i++)
- AUD_jack_ringbuffer_reset(m_ringbuffers[i]);
- }
-
- size = AUD_jack_ringbuffer_write_space(m_ringbuffers[0]);
- for(i = 1; i < channels; i++)
- if((temp = AUD_jack_ringbuffer_write_space(m_ringbuffers[i])) < size)
- size = temp;
-
- while(size > samplesize)
- {
- size /= samplesize;
- mix((data_t*)buffer, size);
- for(i = 0; i < channels; i++)
- {
- for(j = 0; j < size; j++)
- deinterleave[i * size + j] = buffer[i + j * channels];
- AUD_jack_ringbuffer_write(m_ringbuffers[i], (char*)(deinterleave + i * size), size * sizeof(float));
- }
-
- size = AUD_jack_ringbuffer_write_space(m_ringbuffers[0]);
- for(i = 1; i < channels; i++)
- if((temp = AUD_jack_ringbuffer_write_space(m_ringbuffers[i])) < size)
- size = temp;
- }
-
- if(m_sync > 1)
- {
- m_sync = 3;
- }
-
- pthread_cond_wait(&m_mixingCondition, &m_mixingLock);
- }
- pthread_mutex_unlock(&m_mixingLock);
-}
-
-int AUD_JackDevice::jack_mix(jack_nframes_t length, void *data)
-{
- AUD_JackDevice* device = (AUD_JackDevice*)data;
- unsigned int i;
- int count = device->m_specs.channels;
- char* buffer;
-
- if(device->m_sync)
- {
- // play silence while syncing
- for(unsigned int i = 0; i < count; i++)
- memset(AUD_jack_port_get_buffer(device->m_ports[i], length), 0, length * sizeof(float));
- }
- else
- {
- size_t temp;
- size_t readsamples = AUD_jack_ringbuffer_read_space(device->m_ringbuffers[0]);
- for(i = 1; i < count; i++)
- if((temp = AUD_jack_ringbuffer_read_space(device->m_ringbuffers[i])) < readsamples)
- readsamples = temp;
-
- readsamples = AUD_MIN(readsamples / sizeof(float), length);
-
- for(unsigned int i = 0; i < count; i++)
- {
- buffer = (char*)AUD_jack_port_get_buffer(device->m_ports[i], length);
- AUD_jack_ringbuffer_read(device->m_ringbuffers[i], buffer, readsamples * sizeof(float));
- if(readsamples < length)
- memset(buffer + readsamples * sizeof(float), 0, (length - readsamples) * sizeof(float));
- }
-
- if(pthread_mutex_trylock(&(device->m_mixingLock)) == 0)
- {
- pthread_cond_signal(&(device->m_mixingCondition));
- pthread_mutex_unlock(&(device->m_mixingLock));
- }
- }
-
- return 0;
-}
-
-int AUD_JackDevice::jack_sync(jack_transport_state_t state, jack_position_t* pos, void* data)
-{
- AUD_JackDevice* device = (AUD_JackDevice*)data;
-
- if(state == JackTransportStopped)
- return 1;
-
- if(pthread_mutex_trylock(&(device->m_mixingLock)) == 0)
- {
- if(device->m_sync > 2)
- {
- if(device->m_sync == 3)
- {
- device->m_sync = 0;
- pthread_mutex_unlock(&(device->m_mixingLock));
- return 1;
- }
- }
- else
- {
- device->m_sync = 2;
- pthread_cond_signal(&(device->m_mixingCondition));
- }
- pthread_mutex_unlock(&(device->m_mixingLock));
- }
- else if(!device->m_sync)
- device->m_sync = 1;
-
- return 0;
-}
-
-void AUD_JackDevice::jack_shutdown(void *data)
-{
- AUD_JackDevice* device = (AUD_JackDevice*)data;
- device->m_valid = false;
-}
-
-static const char* clientopen_error = "AUD_JackDevice: Couldn't connect to "
- "jack server.";
-static const char* port_error = "AUD_JackDevice: Couldn't create output port.";
-static const char* activate_error = "AUD_JackDevice: Couldn't activate the "
- "client.";
-
-AUD_JackDevice::AUD_JackDevice(std::string name, AUD_DeviceSpecs specs, int buffersize)
-{
- if(specs.channels == AUD_CHANNELS_INVALID)
- specs.channels = AUD_CHANNELS_STEREO;
-
- // jack uses floats
- m_specs = specs;
- m_specs.format = AUD_FORMAT_FLOAT32;
-
- jack_options_t options = JackNullOption;
- jack_status_t status;
-
- // open client
- m_client = AUD_jack_client_open(name.c_str(), options, &status);
- if(m_client == NULL)
- AUD_THROW(AUD_ERROR_JACK, clientopen_error);
-
- // set callbacks
- AUD_jack_set_process_callback(m_client, AUD_JackDevice::jack_mix, this);
- AUD_jack_on_shutdown(m_client, AUD_JackDevice::jack_shutdown, this);
- AUD_jack_set_sync_callback(m_client, AUD_JackDevice::jack_sync, this);
-
- // register our output channels which are called ports in jack
- m_ports = new jack_port_t*[m_specs.channels];
-
- try
- {
- char portname[64];
- for(int i = 0; i < m_specs.channels; i++)
- {
- sprintf(portname, "out %d", i+1);
- m_ports[i] = AUD_jack_port_register(m_client, portname,
- JACK_DEFAULT_AUDIO_TYPE,
- JackPortIsOutput, 0);
- if(m_ports[i] == NULL)
- AUD_THROW(AUD_ERROR_JACK, port_error);
- }
- }
- catch(AUD_Exception&)
- {
- AUD_jack_client_close(m_client);
- delete[] m_ports;
- throw;
- }
-
- m_specs.rate = (AUD_SampleRate)AUD_jack_get_sample_rate(m_client);
-
- buffersize *= sizeof(sample_t);
- m_ringbuffers = new jack_ringbuffer_t*[specs.channels];
- for(unsigned int i = 0; i < specs.channels; i++)
- m_ringbuffers[i] = AUD_jack_ringbuffer_create(buffersize);
- buffersize *= specs.channels;
- m_deinterleavebuf.resize(buffersize);
- m_buffer.resize(buffersize);
-
- create();
-
- m_valid = true;
- m_sync = 0;
- m_syncFunc = NULL;
- m_nextState = m_state = AUD_jack_transport_query(m_client, NULL);
-
- pthread_mutex_init(&m_mixingLock, NULL);
- pthread_cond_init(&m_mixingCondition, NULL);
-
- // activate the client
- if(AUD_jack_activate(m_client))
- {
- AUD_jack_client_close(m_client);
- delete[] m_ports;
- for(unsigned int i = 0; i < specs.channels; i++)
- AUD_jack_ringbuffer_free(m_ringbuffers[i]);
- delete[] m_ringbuffers;
- pthread_mutex_destroy(&m_mixingLock);
- pthread_cond_destroy(&m_mixingCondition);
- destroy();
-
- AUD_THROW(AUD_ERROR_JACK, activate_error);
- }
-
- const char** ports = AUD_jack_get_ports(m_client, NULL, NULL,
- JackPortIsPhysical | JackPortIsInput);
- if(ports != NULL)
- {
- for(int i = 0; i < m_specs.channels && ports[i]; i++)
- AUD_jack_connect(m_client, AUD_jack_port_name(m_ports[i]), ports[i]);
-
- free(ports);
- }
-
- pthread_attr_t attr;
- pthread_attr_init(&attr);
- pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
-
- pthread_create(&m_mixingThread, &attr, runMixingThread, this);
-
- pthread_attr_destroy(&attr);
-}
-
-AUD_JackDevice::~AUD_JackDevice()
-{
- if(m_valid)
- AUD_jack_client_close(m_client);
- m_valid = false;
-
- delete[] m_ports;
-
- pthread_mutex_lock(&m_mixingLock);
- pthread_cond_signal(&m_mixingCondition);
- pthread_mutex_unlock(&m_mixingLock);
- pthread_join(m_mixingThread, NULL);
-
- pthread_cond_destroy(&m_mixingCondition);
- pthread_mutex_destroy(&m_mixingLock);
- for(unsigned int i = 0; i < m_specs.channels; i++)
- AUD_jack_ringbuffer_free(m_ringbuffers[i]);
- delete[] m_ringbuffers;
-
- destroy();
-}
-
-void AUD_JackDevice::playing(bool playing)
-{
- // Do nothing.
-}
-
-void AUD_JackDevice::startPlayback()
-{
- AUD_jack_transport_start(m_client);
- m_nextState = JackTransportRolling;
-}
-
-void AUD_JackDevice::stopPlayback()
-{
- AUD_jack_transport_stop(m_client);
- m_nextState = JackTransportStopped;
-}
-
-void AUD_JackDevice::seekPlayback(float time)
-{
- if(time >= 0.0f)
- AUD_jack_transport_locate(m_client, time * m_specs.rate);
-}
-
-void AUD_JackDevice::setSyncCallback(AUD_syncFunction sync, void* data)
-{
- m_syncFunc = sync;
- m_syncFuncData = data;
-}
-
-float AUD_JackDevice::getPlaybackPosition()
-{
- jack_position_t position;
- AUD_jack_transport_query(m_client, &position);
- return position.frame / (float) m_specs.rate;
-}
-
-bool AUD_JackDevice::doesPlayback()
-{
- jack_transport_state_t state = AUD_jack_transport_query(m_client, NULL);
-
- if(state != m_state)
- m_nextState = m_state = state;
-
- return m_nextState != JackTransportStopped;
-}
diff --git a/intern/audaspace/jack/AUD_JackDevice.h b/intern/audaspace/jack/AUD_JackDevice.h
deleted file mode 100644
index ccf3bfd6341..00000000000
--- a/intern/audaspace/jack/AUD_JackDevice.h
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/jack/AUD_JackDevice.h
- * \ingroup audjack
- */
-
-
-#ifndef __AUD_JACKDEVICE_H__
-#define __AUD_JACKDEVICE_H__
-
-
-#include "AUD_SoftwareDevice.h"
-#include "AUD_Buffer.h"
-
-#include <string>
-
-#include <AUD_JackLibrary.h>
-
-typedef void (*AUD_syncFunction)(void*, int, float);
-
-/**
- * This device plays back through JACK.
- */
-class AUD_JackDevice : public AUD_SoftwareDevice
-{
-private:
- /**
- * The output ports of jack.
- */
- jack_port_t** m_ports;
-
- /**
- * The jack client.
- */
- jack_client_t* m_client;
-
- /**
- * The output buffer.
- */
- AUD_Buffer m_buffer;
-
- /**
- * The deinterleaving buffer.
- */
- AUD_Buffer m_deinterleavebuf;
-
- jack_ringbuffer_t** m_ringbuffers;
-
- /**
- * Whether the device is valid.
- */
- bool m_valid;
-
- /**
- * Invalidates the jack device.
- * \param data The jack device that gets invalidet by jack.
- */
- static void jack_shutdown(void *data);
-
- /**
- * Mixes the next bytes into the buffer.
- * \param length The length in samples to be filled.
- * \param data A pointer to the jack device.
- * \return 0 what shows success.
- */
- static int jack_mix(jack_nframes_t length, void *data);
-
- static int jack_sync(jack_transport_state_t state, jack_position_t* pos, void* data);
-
- /**
- * Next JACK Transport state (-1 if not expected to change).
- */
- jack_transport_state_t m_nextState;
-
- /**
- * Current jack transport status.
- */
- jack_transport_state_t m_state;
-
- /**
- * Syncronisation state.
- */
- int m_sync;
-
- /**
- * External syncronisation callback function.
- */
- AUD_syncFunction m_syncFunc;
-
- /**
- * Data for the sync function.
- */
- void* m_syncFuncData;
-
- /**
- * The mixing thread.
- */
- pthread_t m_mixingThread;
-
- /**
- * Mutex for mixing.
- */
- pthread_mutex_t m_mixingLock;
-
- /**
- * Condition for mixing.
- */
- pthread_cond_t m_mixingCondition;
-
- /**
- * Mixing thread function.
- * \param device The this pointer.
- * \return NULL.
- */
- static void* runMixingThread(void* device);
-
- /**
- * Updates the ring buffers.
- */
- void updateRingBuffers();
-
- // hide copy constructor and operator=
- AUD_JackDevice(const AUD_JackDevice&);
- AUD_JackDevice& operator=(const AUD_JackDevice&);
-
-protected:
- virtual void playing(bool playing);
-
-public:
- /**
- * Creates a JACK client for audio output.
- * \param name The client name.
- * \param specs The wanted audio specification, where only the channel count
- * is important.
- * \param buffersize The size of the internal buffer.
- * \exception AUD_Exception Thrown if the audio device cannot be opened.
- */
- AUD_JackDevice(std::string name, AUD_DeviceSpecs specs, int buffersize = AUD_DEFAULT_BUFFER_SIZE);
-
- /**
- * Closes the JACK client.
- */
- virtual ~AUD_JackDevice();
-
- /**
- * Starts jack transport playback.
- */
- void startPlayback();
-
- /**
- * Stops jack transport playback.
- */
- void stopPlayback();
-
- /**
- * Seeks jack transport playback.
- * \param time The time to seek to.
- */
- void seekPlayback(float time);
-
- /**
- * Sets the sync callback for jack transport playback.
- * \param sync The callback function.
- * \param data The data for the function.
- */
- void setSyncCallback(AUD_syncFunction sync, void* data);
-
- /**
- * Retrieves the jack transport playback time.
- * \return The current time position.
- */
- float getPlaybackPosition();
-
- /**
- * Returns whether jack transport plays back.
- * \return Whether jack transport plays back.
- */
- bool doesPlayback();
-};
-
-#endif //__AUD_JACKDEVICE_H__
diff --git a/intern/audaspace/jack/AUD_JackLibrary.cpp b/intern/audaspace/jack/AUD_JackLibrary.cpp
deleted file mode 100644
index 9ed6862bbb9..00000000000
--- a/intern/audaspace/jack/AUD_JackLibrary.cpp
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2013 Blender Foundation
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/jack/AUD_JackLibrary.cpp
- * \ingroup audjack
- */
-
-#define AUD_JACK_LIBRARY_IMPL
-
-#include "AUD_JackLibrary.h"
-
-#ifdef WITH_JACK_DYNLOAD
-# include <dlfcn.h>
-# include <stdio.h>
-#endif
-
-#ifdef WITH_JACK_DYNLOAD
-static void *jack_handle = NULL;
-#endif
-
-static bool jack_supported = false;
-
-void AUD_jack_init(void)
-{
-#ifdef WITH_JACK_DYNLOAD
- const char *names[] = {"libjack.so",
- "libjack.so.0",
- "libjack.so.1",
- "libjack.so.2",
- NULL};
- int index = 0;
- while (names[index] != NULL) {
- jack_handle = dlopen(names[index], RTLD_LAZY);
- if (jack_handle != NULL) {
- // Found existing library.
- break;
- }
- ++index;
- }
-
- if (!jack_handle) {
- return;
- }
-
-# define JACK_SYMBOL(sym) \
- { \
- char *error; \
- *(void **) (&(AUD_##sym)) = dlsym(jack_handle, #sym); \
- if ((error = dlerror()) != NULL) { \
- fprintf(stderr, "%s\n", error); \
- return; \
- } \
- } (void)0
-
- dlerror(); /* Clear any existing error */
-#else // WITH_JACK_DYNLOAD
-# define JACK_SYMBOL(sym) AUD_##sym = sym
-#endif // WITH_JACK_DYNLOAD
-
- JACK_SYMBOL(jack_transport_query);
- JACK_SYMBOL(jack_transport_locate);
-
- JACK_SYMBOL(jack_transport_start);
- JACK_SYMBOL(jack_transport_stop);
-
- JACK_SYMBOL(jack_ringbuffer_reset);
- JACK_SYMBOL(jack_ringbuffer_write);
- JACK_SYMBOL(jack_ringbuffer_write_space);
- JACK_SYMBOL(jack_ringbuffer_write_advance);
- JACK_SYMBOL(jack_ringbuffer_read);
- JACK_SYMBOL(jack_ringbuffer_create);
- JACK_SYMBOL(jack_ringbuffer_free);
- JACK_SYMBOL(jack_ringbuffer_read_space);
- JACK_SYMBOL(jack_set_sync_callback);
-
- JACK_SYMBOL(jack_port_get_buffer);
-
- JACK_SYMBOL(jack_client_open);
- JACK_SYMBOL(jack_set_process_callback);
- JACK_SYMBOL(jack_on_shutdown);
- JACK_SYMBOL(jack_port_register);
- JACK_SYMBOL(jack_client_close);
- JACK_SYMBOL(jack_get_sample_rate);
- JACK_SYMBOL(jack_activate);
- JACK_SYMBOL(jack_get_ports);
- JACK_SYMBOL(jack_port_name);
- JACK_SYMBOL(jack_connect);
-
- jack_supported = true;
-
-#undef JACK_SYMBOL
-}
-
-void AUD_jack_exit(void)
-{
-#ifdef WITH_JACK_DYNLOAD
- if (jack_handle) {
- dlclose(jack_handle);
- }
-#endif
- jack_supported = false;
-}
-
-bool AUD_jack_supported(void)
-{
- return jack_supported;
-}
diff --git a/intern/audaspace/jack/AUD_JackLibrary.h b/intern/audaspace/jack/AUD_JackLibrary.h
deleted file mode 100644
index d74d9ba8021..00000000000
--- a/intern/audaspace/jack/AUD_JackLibrary.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2013 Blender Foundation
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/jack/AUD_JackLibrary.cpp
- * \ingroup audjack
- */
-
-#ifndef __AUD_JACKLIBRARY__
-#define __AUD_JACKLIBRARY__
-
-#if defined(__APPLE__) // always first include for jack weaklinking !
-#include <weakjack.h>
-#endif
-
-#include <jack.h>
-#include <ringbuffer.h>
-
-#ifdef AUD_JACK_LIBRARY_IMPL
-# define JACK_SYM
-#else
-# define JACK_SYM extern
-#endif
-
-/* All loadable JACK sumbols, prototypes from original jack.h */
-
-JACK_SYM jack_transport_state_t (*AUD_jack_transport_query) (
- const jack_client_t *client,
- jack_position_t *pos);
-
-JACK_SYM int (*AUD_jack_transport_locate) (jack_client_t *client,
- jack_nframes_t frame);
-
-JACK_SYM void (*AUD_jack_transport_start) (jack_client_t *client);
-JACK_SYM void (*AUD_jack_transport_stop) (jack_client_t *client);
-
-JACK_SYM void (*AUD_jack_ringbuffer_reset) (jack_ringbuffer_t *rb);
-JACK_SYM size_t (*AUD_jack_ringbuffer_write) (jack_ringbuffer_t *rb,
- const char *src, size_t cnt);
-JACK_SYM size_t (*AUD_jack_ringbuffer_write_space) (const jack_ringbuffer_t *rb);
-JACK_SYM void (*AUD_jack_ringbuffer_write_advance) (jack_ringbuffer_t *rb,
- size_t cnt);
-JACK_SYM size_t (*AUD_jack_ringbuffer_read) (jack_ringbuffer_t *rb, char *dest,
- size_t cnt);
-JACK_SYM jack_ringbuffer_t *(*AUD_jack_ringbuffer_create) (size_t sz);
-JACK_SYM void (*AUD_jack_ringbuffer_free) (jack_ringbuffer_t *rb);
-JACK_SYM size_t (*AUD_jack_ringbuffer_read_space) (const jack_ringbuffer_t *rb);
-JACK_SYM int (*AUD_jack_set_sync_callback) (jack_client_t *client,
- JackSyncCallback sync_callback,
- void *arg);
-
-JACK_SYM void *(*AUD_jack_port_get_buffer) (jack_port_t *, jack_nframes_t);
-
-JACK_SYM jack_client_t *(*AUD_jack_client_open) (const char *client_name,
- jack_options_t options,
- jack_status_t *status, ...);
-JACK_SYM int (*AUD_jack_set_process_callback) (jack_client_t *client,
- JackProcessCallback process_callback, void *arg);
-JACK_SYM void (*AUD_jack_on_shutdown) (jack_client_t *client,
- JackShutdownCallback function, void *arg);
-JACK_SYM jack_port_t *(*AUD_jack_port_register) (jack_client_t *client,
- const char *port_name,
- const char *port_type,
- unsigned long flags,
- unsigned long buffer_size);
-JACK_SYM int (*AUD_jack_client_close) (jack_client_t *client);
-JACK_SYM jack_nframes_t (*AUD_jack_get_sample_rate) (jack_client_t *);
-JACK_SYM int (*AUD_jack_activate) (jack_client_t *client);
-JACK_SYM const char **(*AUD_jack_get_ports) (jack_client_t *,
- const char *port_name_pattern,
- const char *type_name_pattern,
- unsigned long flags);
-JACK_SYM const char *(*AUD_jack_port_name) (const jack_port_t *port);
-JACK_SYM int (*AUD_jack_connect) (jack_client_t *,
- const char *source_port,
- const char *destination_port);
-
-/* Public API */
-
-void AUD_jack_init(void);
-void AUD_jack_exit(void);
-bool AUD_jack_supported(void);
-
-#endif // __AUD_JACKLIBRARY__
diff --git a/intern/audaspace/sndfile/AUD_SndFileFactory.cpp b/intern/audaspace/sndfile/AUD_SndFileFactory.cpp
deleted file mode 100644
index 106b2937a06..00000000000
--- a/intern/audaspace/sndfile/AUD_SndFileFactory.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/sndfile/AUD_SndFileFactory.cpp
- * \ingroup audsndfile
- */
-
-
-#include "AUD_SndFileFactory.h"
-#include "AUD_SndFileReader.h"
-
-#include <cstring>
-
-AUD_SndFileFactory::AUD_SndFileFactory(std::string filename) :
- m_filename(filename)
-{
-}
-
-AUD_SndFileFactory::AUD_SndFileFactory(const data_t* buffer, int size) :
- m_buffer(new AUD_Buffer(size))
-{
- memcpy(m_buffer->getBuffer(), buffer, size);
-}
-
-boost::shared_ptr<AUD_IReader> AUD_SndFileFactory::createReader()
-{
- if(m_buffer.get())
- return boost::shared_ptr<AUD_IReader>(new AUD_SndFileReader(m_buffer));
- else
- return boost::shared_ptr<AUD_IReader>(new AUD_SndFileReader(m_filename));
-}
diff --git a/intern/audaspace/sndfile/AUD_SndFileFactory.h b/intern/audaspace/sndfile/AUD_SndFileFactory.h
deleted file mode 100644
index bc96325d6eb..00000000000
--- a/intern/audaspace/sndfile/AUD_SndFileFactory.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/sndfile/AUD_SndFileFactory.h
- * \ingroup audsndfile
- */
-
-
-#ifndef __AUD_SNDFILEFACTORY_H__
-#define __AUD_SNDFILEFACTORY_H__
-
-#include "AUD_IFactory.h"
-#include "AUD_Buffer.h"
-
-#include <string>
-#include <boost/shared_ptr.hpp>
-
-/**
- * This factory reads a sound file via libsndfile.
- */
-class AUD_SndFileFactory : public AUD_IFactory
-{
-private:
- /**
- * The filename of the sound source file.
- */
- std::string m_filename;
-
- /**
- * The buffer to read from.
- */
- boost::shared_ptr<AUD_Buffer> m_buffer;
-
- // hide copy constructor and operator=
- AUD_SndFileFactory(const AUD_SndFileFactory&);
- AUD_SndFileFactory& operator=(const AUD_SndFileFactory&);
-
-public:
- /**
- * Creates a new factory.
- * \param filename The sound file path.
- */
- AUD_SndFileFactory(std::string filename);
-
- /**
- * Creates a new factory.
- * \param buffer The buffer to read from.
- * \param size The size of the buffer.
- */
- AUD_SndFileFactory(const data_t* buffer, int size);
-
- virtual boost::shared_ptr<AUD_IReader> createReader();
-};
-
-#endif //__AUD_SNDFILEFACTORY_H__
diff --git a/intern/audaspace/sndfile/AUD_SndFileReader.cpp b/intern/audaspace/sndfile/AUD_SndFileReader.cpp
deleted file mode 100644
index aaee814f56b..00000000000
--- a/intern/audaspace/sndfile/AUD_SndFileReader.cpp
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/sndfile/AUD_SndFileReader.cpp
- * \ingroup audsndfile
- */
-
-
-#include "AUD_SndFileReader.h"
-
-#include <cstring>
-
-sf_count_t AUD_SndFileReader::vio_get_filelen(void *user_data)
-{
- AUD_SndFileReader* reader = (AUD_SndFileReader*)user_data;
- return reader->m_membuffer->getSize();
-}
-
-sf_count_t AUD_SndFileReader::vio_seek(sf_count_t offset, int whence,
- void *user_data)
-{
- AUD_SndFileReader* reader = (AUD_SndFileReader*)user_data;
-
- switch(whence)
- {
- case SEEK_SET:
- reader->m_memoffset = offset;
- break;
- case SEEK_CUR:
- reader->m_memoffset = reader->m_memoffset + offset;
- break;
- case SEEK_END:
- reader->m_memoffset = reader->m_membuffer->getSize() + offset;
- break;
- }
-
- return reader->m_memoffset;
-}
-
-sf_count_t AUD_SndFileReader::vio_read(void *ptr, sf_count_t count,
- void *user_data)
-{
- AUD_SndFileReader* reader = (AUD_SndFileReader*)user_data;
-
- if(reader->m_memoffset + count > reader->m_membuffer->getSize())
- count = reader->m_membuffer->getSize() - reader->m_memoffset;
-
- memcpy(ptr, ((data_t*)reader->m_membuffer->getBuffer()) +
- reader->m_memoffset, count);
- reader->m_memoffset += count;
-
- return count;
-}
-
-sf_count_t AUD_SndFileReader::vio_tell(void *user_data)
-{
- AUD_SndFileReader* reader = (AUD_SndFileReader*)user_data;
-
- return reader->m_memoffset;
-}
-
-static const char* fileopen_error = "AUD_SndFileReader: File couldn't be "
- "read.";
-
-AUD_SndFileReader::AUD_SndFileReader(std::string filename) :
- m_position(0)
-{
- SF_INFO sfinfo;
-
- sfinfo.format = 0;
- m_sndfile = sf_open(filename.c_str(), SFM_READ, &sfinfo);
-
- if(!m_sndfile)
- AUD_THROW(AUD_ERROR_FILE, fileopen_error);
-
- m_specs.channels = (AUD_Channels) sfinfo.channels;
- m_specs.rate = (AUD_SampleRate) sfinfo.samplerate;
- m_length = sfinfo.frames;
- m_seekable = sfinfo.seekable;
-}
-
-AUD_SndFileReader::AUD_SndFileReader(boost::shared_ptr<AUD_Buffer> buffer) :
- m_position(0),
- m_membuffer(buffer),
- m_memoffset(0)
-{
- m_vio.get_filelen = vio_get_filelen;
- m_vio.read = vio_read;
- m_vio.seek = vio_seek;
- m_vio.tell = vio_tell;
- m_vio.write = NULL;
-
- SF_INFO sfinfo;
-
- sfinfo.format = 0;
- m_sndfile = sf_open_virtual(&m_vio, SFM_READ, &sfinfo, this);
-
- if(!m_sndfile)
- AUD_THROW(AUD_ERROR_FILE, fileopen_error);
-
- m_specs.channels = (AUD_Channels) sfinfo.channels;
- m_specs.rate = (AUD_SampleRate) sfinfo.samplerate;
- m_length = sfinfo.frames;
- m_seekable = sfinfo.seekable;
-}
-
-AUD_SndFileReader::~AUD_SndFileReader()
-{
- sf_close(m_sndfile);
-}
-
-bool AUD_SndFileReader::isSeekable() const
-{
- return m_seekable;
-}
-
-void AUD_SndFileReader::seek(int position)
-{
- if(m_seekable)
- {
- position = sf_seek(m_sndfile, position, SEEK_SET);
- m_position = position;
- }
-}
-
-int AUD_SndFileReader::getLength() const
-{
- return m_length;
-}
-
-int AUD_SndFileReader::getPosition() const
-{
- return m_position;
-}
-
-AUD_Specs AUD_SndFileReader::getSpecs() const
-{
- return m_specs;
-}
-
-void AUD_SndFileReader::read(int& length, bool& eos, sample_t* buffer)
-{
- int olen = length;
-
- length = sf_readf_float(m_sndfile, buffer, length);
-
- m_position += length;
-
- eos = length < olen;
-}
diff --git a/intern/audaspace/sndfile/AUD_SndFileReader.h b/intern/audaspace/sndfile/AUD_SndFileReader.h
deleted file mode 100644
index 5cac5051ee2..00000000000
--- a/intern/audaspace/sndfile/AUD_SndFileReader.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/sndfile/AUD_SndFileReader.h
- * \ingroup audsndfile
- */
-
-
-#ifndef __AUD_SNDFILEREADER_H__
-#define __AUD_SNDFILEREADER_H__
-
-#include "AUD_IReader.h"
-#include "AUD_Buffer.h"
-
-#include <string>
-#include <sndfile.h>
-#include <boost/shared_ptr.hpp>
-
-typedef sf_count_t (*sf_read_f)(SNDFILE *sndfile, void *ptr, sf_count_t frames);
-
-/**
- * This class reads a sound file via libsndfile.
- */
-class AUD_SndFileReader : public AUD_IReader
-{
-private:
- /**
- * The current position in samples.
- */
- int m_position;
-
- /**
- * The sample count in the file.
- */
- int m_length;
-
- /**
- * Whether the file is seekable.
- */
- bool m_seekable;
-
- /**
- * The specification of the audio data.
- */
- AUD_Specs m_specs;
-
- /**
- * The sndfile.
- */
- SNDFILE* m_sndfile;
-
- /**
- * The virtual IO structure for memory file reading.
- */
- SF_VIRTUAL_IO m_vio;
-
- /**
- * The pointer to the memory file.
- */
- boost::shared_ptr<AUD_Buffer> m_membuffer;
-
- /**
- * The current reading pointer of the memory file.
- */
- int m_memoffset;
-
- // Functions for libsndfile virtual IO functionality
- static sf_count_t vio_get_filelen(void *user_data);
- static sf_count_t vio_seek(sf_count_t offset, int whence, void *user_data);
- static sf_count_t vio_read(void *ptr, sf_count_t count, void *user_data);
- static sf_count_t vio_tell(void *user_data);
-
- // hide copy constructor and operator=
- AUD_SndFileReader(const AUD_SndFileReader&);
- AUD_SndFileReader& operator=(const AUD_SndFileReader&);
-
-public:
- /**
- * Creates a new reader.
- * \param filename The path to the file to be read.
- * \exception AUD_Exception Thrown if the file specified does not exist or
- * cannot be read with libsndfile.
- */
- AUD_SndFileReader(std::string filename);
-
- /**
- * Creates a new reader.
- * \param buffer The buffer to read from.
- * \exception AUD_Exception Thrown if the buffer specified cannot be read
- * with libsndfile.
- */
- AUD_SndFileReader(boost::shared_ptr<AUD_Buffer> buffer);
-
- /**
- * Destroys the reader and closes the file.
- */
- virtual ~AUD_SndFileReader();
-
- virtual bool isSeekable() const;
- virtual void seek(int position);
- virtual int getLength() const;
- virtual int getPosition() const;
- virtual AUD_Specs getSpecs() const;
- virtual void read(int& length, bool& eos, sample_t* buffer);
-};
-
-#endif //__AUD_SNDFILEREADER_H__
diff --git a/intern/audaspace/sndfile/AUD_SndFileWriter.cpp b/intern/audaspace/sndfile/AUD_SndFileWriter.cpp
deleted file mode 100644
index da3464751cb..00000000000
--- a/intern/audaspace/sndfile/AUD_SndFileWriter.cpp
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/sndfile/AUD_SndFileWriter.cpp
- * \ingroup audsndfile
- */
-
-
-#include "AUD_SndFileWriter.h"
-
-#include <cstring>
-
-static const char* fileopen_error = "AUD_SndFileWriter: File couldn't be written.";
-static const char* format_error = "AUD_SndFileWriter: Unsupported format.";
-
-AUD_SndFileWriter::AUD_SndFileWriter(std::string filename, AUD_DeviceSpecs specs,
- AUD_Container format, AUD_Codec codec, unsigned int bitrate) :
- m_specs(specs)
-{
- SF_INFO sfinfo;
-
- sfinfo.channels = specs.channels;
- sfinfo.samplerate = int(specs.rate);
-
- switch(format)
- {
- case AUD_CONTAINER_FLAC:
- sfinfo.format = SF_FORMAT_FLAC;
- switch(specs.format)
- {
- case AUD_FORMAT_S16:
- sfinfo.format |= SF_FORMAT_PCM_16;
- break;
- case AUD_FORMAT_S24:
- sfinfo.format |= SF_FORMAT_PCM_24;
- break;
- case AUD_FORMAT_S32:
- sfinfo.format |= SF_FORMAT_PCM_32;
- break;
- case AUD_FORMAT_FLOAT32:
- sfinfo.format |= SF_FORMAT_FLOAT;
- break;
- case AUD_FORMAT_FLOAT64:
- sfinfo.format |= SF_FORMAT_DOUBLE;
- break;
- default:
- sfinfo.format = 0;
- break;
- }
- break;
- case AUD_CONTAINER_OGG:
- if(codec == AUD_CODEC_VORBIS)
- sfinfo.format = SF_FORMAT_OGG | SF_FORMAT_VORBIS;
- else
- sfinfo.format = 0;
- break;
- case AUD_CONTAINER_WAV:
- sfinfo.format = SF_FORMAT_WAV;
- switch(specs.format)
- {
- case AUD_FORMAT_U8:
- sfinfo.format |= SF_FORMAT_PCM_U8;
- break;
- case AUD_FORMAT_S16:
- sfinfo.format |= SF_FORMAT_PCM_16;
- break;
- case AUD_FORMAT_S24:
- sfinfo.format |= SF_FORMAT_PCM_24;
- break;
- case AUD_FORMAT_S32:
- sfinfo.format |= SF_FORMAT_PCM_32;
- break;
- case AUD_FORMAT_FLOAT32:
- sfinfo.format |= SF_FORMAT_FLOAT;
- break;
- case AUD_FORMAT_FLOAT64:
- sfinfo.format |= SF_FORMAT_DOUBLE;
- break;
- default:
- sfinfo.format = 0;
- break;
- }
- break;
- default:
- sfinfo.format = 0;
- break;
- }
-
- if(sfinfo.format == 0)
- AUD_THROW(AUD_ERROR_SPECS, format_error);
-
- m_sndfile = sf_open(filename.c_str(), SFM_WRITE, &sfinfo);
-
- if(!m_sndfile)
- AUD_THROW(AUD_ERROR_FILE, fileopen_error);
-}
-
-AUD_SndFileWriter::~AUD_SndFileWriter()
-{
- sf_close(m_sndfile);
-}
-
-int AUD_SndFileWriter::getPosition() const
-{
- return m_position;
-}
-
-AUD_DeviceSpecs AUD_SndFileWriter::getSpecs() const
-{
- return m_specs;
-}
-
-void AUD_SndFileWriter::write(unsigned int length, sample_t* buffer)
-{
- length = sf_writef_float(m_sndfile, buffer, length);
-
- m_position += length;
-}
diff --git a/intern/audaspace/sndfile/AUD_SndFileWriter.h b/intern/audaspace/sndfile/AUD_SndFileWriter.h
deleted file mode 100644
index 0cadbd19a09..00000000000
--- a/intern/audaspace/sndfile/AUD_SndFileWriter.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * Copyright 2009-2011 Jörg Hermann Müller
- *
- * This file is part of AudaSpace.
- *
- * Audaspace is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * AudaSpace is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Audaspace; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file audaspace/sndfile/AUD_SndFileWriter.h
- * \ingroup audsndfile
- */
-
-
-#ifndef __AUD_SNDFILEWRITER_H__
-#define __AUD_SNDFILEWRITER_H__
-
-#include "AUD_IWriter.h"
-
-#include <string>
-#include <sndfile.h>
-
-/**
- * This class writes a sound file via libsndfile.
- */
-class AUD_SndFileWriter : public AUD_IWriter
-{
-private:
- /**
- * The current position in samples.
- */
- int m_position;
-
- /**
- * The specification of the audio data.
- */
- AUD_DeviceSpecs m_specs;
-
- /**
- * The sndfile.
- */
- SNDFILE* m_sndfile;
-
- // hide copy constructor and operator=
- AUD_SndFileWriter(const AUD_SndFileWriter&);
- AUD_SndFileWriter& operator=(const AUD_SndFileWriter&);
-
-public:
- /**
- * Creates a new writer.
- * \param filename The path to the file to be read.
- * \param specs The file's audio specification.
- * \param format The file's container format.
- * \param codec The codec used for encoding the audio data.
- * \param bitrate The bitrate for encoding.
- * \exception AUD_Exception Thrown if the file specified cannot be written
- * with libsndfile.
- */
- AUD_SndFileWriter(std::string filename, AUD_DeviceSpecs specs, AUD_Container format, AUD_Codec codec, unsigned int bitrate);
-
- /**
- * Destroys the writer and closes the file.
- */
- virtual ~AUD_SndFileWriter();
-
- virtual int getPosition() const;
- virtual AUD_DeviceSpecs getSpecs() const;
- virtual void write(unsigned int length, sample_t* buffer);
-};
-
-#endif //__AUD_SNDFILEWRITER_H__
diff --git a/intern/cycles/app/io_export_cycles_xml.py b/intern/cycles/app/io_export_cycles_xml.py
index 7d6d85f88af..d02487aefa4 100644
--- a/intern/cycles/app/io_export_cycles_xml.py
+++ b/intern/cycles/app/io_export_cycles_xml.py
@@ -66,8 +66,7 @@ class RenderButtonsPanel():
@classmethod
def poll(self, context):
- rd = context.scene.render
- return rd.engine == 'CYCLES'
+ return context.engine == 'CYCLES'
class PHYSICS_PT_fluid_export(RenderButtonsPanel, bpy.types.Panel):
diff --git a/intern/cycles/blender/addon/__init__.py b/intern/cycles/blender/addon/__init__.py
index a2d6262fb20..1cb7835d14d 100644
--- a/intern/cycles/blender/addon/__init__.py
+++ b/intern/cycles/blender/addon/__init__.py
@@ -19,7 +19,7 @@
bl_info = {
"name": "Cycles Render Engine",
"author": "",
- "blender": (2, 76, 0),
+ "blender": (2, 80, 0),
"location": "Info header, render engine menu",
"description": "Cycles Render Engine integration",
"warning": "",
@@ -66,21 +66,21 @@ class CyclesRender(bpy.types.RenderEngine):
engine.free(self)
# final render
- def update(self, data, scene):
+ def update(self, data, depsgraph, scene):
if not self.session:
if self.is_preview:
cscene = bpy.context.scene.cycles
use_osl = cscene.shading_system and cscene.device == 'CPU'
- engine.create(self, data, scene,
+ engine.create(self, data, depsgraph, scene,
None, None, None, use_osl)
else:
- engine.create(self, data, scene)
+ engine.create(self, data, depsgraph, scene)
else:
engine.reset(self, data, scene)
- def render(self, scene):
- engine.render(self)
+ def render_to_image(self, depsgraph):
+ engine.render(self, depsgraph)
def bake(self, scene, obj, pass_type, pass_filter, object_id, pixel_array, num_pixels, depth, result):
engine.bake(self, obj, pass_type, pass_filter, object_id, pixel_array, num_pixels, depth, result)
@@ -88,12 +88,12 @@ class CyclesRender(bpy.types.RenderEngine):
# viewport render
def view_update(self, context):
if not self.session:
- engine.create(self, context.blend_data, context.scene,
+ engine.create(self, context.blend_data, context.depsgraph, context.scene,
context.region, context.space_data, context.region_data)
engine.update(self, context.blend_data, context.scene)
- def view_draw(self, context):
- engine.draw(self, context.region, context.space_data, context.region_data)
+ def render_to_view(self, context):
+ engine.draw(self, context.depsgraph, context.region, context.space_data, context.region_data)
def update_script_node(self, node):
if engine.with_osl():
diff --git a/intern/cycles/blender/addon/engine.py b/intern/cycles/blender/addon/engine.py
index 1f97eff9bd0..cbc21b79da8 100644
--- a/intern/cycles/blender/addon/engine.py
+++ b/intern/cycles/blender/addon/engine.py
@@ -123,12 +123,13 @@ def exit():
_cycles.exit()
-def create(engine, data, scene, region=None, v3d=None, rv3d=None, preview_osl=False):
+def create(engine, data, depsgraph, scene, region=None, v3d=None, rv3d=None, preview_osl=False):
import bpy
import _cycles
data = data.as_pointer()
userpref = bpy.context.user_preferences.as_pointer()
+ depsgraph = depsgraph.as_pointer()
scene = scene.as_pointer()
if region:
region = region.as_pointer()
@@ -142,7 +143,8 @@ def create(engine, data, scene, region=None, v3d=None, rv3d=None, preview_osl=Fa
else:
_cycles.debug_flags_reset()
- engine.session = _cycles.create(engine.as_pointer(), userpref, data, scene, region, v3d, rv3d, preview_osl)
+ engine.session = _cycles.create(
+ engine.as_pointer(), userpref, data, depsgraph, scene, region, v3d, rv3d, preview_osl)
def free(engine):
@@ -153,7 +155,7 @@ def free(engine):
del engine.session
-def render(engine):
+def render(engine, depsgraph):
import _cycles
if hasattr(engine, "session"):
_cycles.render(engine.session)
@@ -178,13 +180,14 @@ def update(engine, data, scene):
_cycles.sync(engine.session)
-def draw(engine, region, v3d, rv3d):
+def draw(engine, depsgraph, region, v3d, rv3d):
import _cycles
+ depsgraph = depsgraph.as_pointer()
v3d = v3d.as_pointer()
rv3d = rv3d.as_pointer()
# draw render image
- _cycles.draw(engine.session, v3d, rv3d)
+ _cycles.draw(engine.session, depsgraph, v3d, rv3d)
def available_devices():
diff --git a/intern/cycles/blender/addon/properties.py b/intern/cycles/blender/addon/properties.py
index 62aea8790af..fb7530f8663 100644
--- a/intern/cycles/blender/addon/properties.py
+++ b/intern/cycles/blender/addon/properties.py
@@ -200,12 +200,6 @@ class CyclesRenderSettings(bpy.types.PropertyGroup):
description="Pause all viewport preview renders",
default=False,
)
- cls.preview_active_layer = BoolProperty(
- name="Preview Active Layer",
- description="Preview active render layer in viewport",
- default=False,
- )
-
cls.aa_samples = IntProperty(
name="AA Samples",
description="Number of antialiasing samples to render for each pixel",
@@ -1200,15 +1194,15 @@ class CyclesCurveRenderSettings(bpy.types.PropertyGroup):
def update_render_passes(self, context):
scene = context.scene
rd = scene.render
- rl = rd.layers.active
- rl.update_render_passes()
+ view_layer = scene.view_layers.active
+ view_layer.update_render_passes()
class CyclesRenderLayerSettings(bpy.types.PropertyGroup):
@classmethod
def register(cls):
- bpy.types.SceneRenderLayer.cycles = PointerProperty(
- name="Cycles SceneRenderLayer Settings",
- description="Cycles SceneRenderLayer Settings",
+ bpy.types.ViewLayer.cycles = PointerProperty(
+ name="Cycles ViewLayer Settings",
+ description="Cycles ViewLayer Settings",
type=cls,
)
cls.pass_debug_bvh_traversed_nodes = BoolProperty(
@@ -1332,7 +1326,7 @@ class CyclesRenderLayerSettings(bpy.types.PropertyGroup):
@classmethod
def unregister(cls):
- del bpy.types.SceneRenderLayer.cycles
+ del bpy.types.ViewLayer.cycles
class CyclesCurveSettings(bpy.types.PropertyGroup):
diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py
index e3076a8ec2c..d5f72654c72 100644
--- a/intern/cycles/blender/addon/ui.py
+++ b/intern/cycles/blender/addon/ui.py
@@ -17,6 +17,7 @@
# <pep8 compliant>
import bpy
+from bpy_extras.node_utils import find_node_input, find_output_node
from bpy.types import (
Panel,
@@ -49,8 +50,7 @@ class CyclesButtonsPanel:
@classmethod
def poll(cls, context):
- rd = context.scene.render
- return rd.engine in cls.COMPAT_ENGINES
+ return context.scene.view_render.engine in cls.COMPAT_ENGINES
def get_device_type(context):
@@ -204,13 +204,6 @@ class CYCLES_RENDER_PT_sampling(CyclesButtonsPanel, Panel):
col.prop(cscene, "sample_all_lights_indirect")
layout.row().prop(cscene, "sampling_pattern", text="Pattern")
-
- for rl in scene.render.layers:
- if rl.samples > 0:
- layout.separator()
- layout.row().prop(cscene, "use_layer_samples")
- break
-
draw_samples_info(layout, context)
@@ -415,8 +408,8 @@ class CYCLES_RENDER_PT_performance(CyclesButtonsPanel, Panel):
subsub = sub.column()
subsub.active = not rd.use_save_buffers
- for rl in rd.layers:
- if rl.cycles.use_denoising:
+ for view_layer in scene.view_layers:
+ if view_layer.cycles.use_denoising:
subsub.active = False
subsub.prop(cscene, "use_progressive_refine")
@@ -445,7 +438,7 @@ class CYCLES_RENDER_PT_performance(CyclesButtonsPanel, Panel):
class CYCLES_RENDER_PT_layer_options(CyclesButtonsPanel, Panel):
bl_label = "Layer"
- bl_context = "render_layer"
+ bl_context = "view_layer"
def draw(self, context):
layout = self.layout
@@ -453,40 +446,22 @@ class CYCLES_RENDER_PT_layer_options(CyclesButtonsPanel, Panel):
scene = context.scene
rd = scene.render
- rl = rd.layers.active
-
- split = layout.split()
-
- col = split.column()
- col.prop(scene, "layers", text="Scene")
- col.prop(rl, "layers_exclude", text="Exclude")
-
- col = split.column()
- col.prop(rl, "layers", text="Layer")
- col.prop(rl, "layers_zmask", text="Mask Layer")
+ view_layer = scene.view_layers.active
- split = layout.split()
-
- col = split.column()
- col.label(text="Material:")
- col.prop(rl, "material_override", text="")
- col.separator()
- col.prop(rl, "samples")
-
- col = split.column()
- col.prop(rl, "use_sky", "Use Environment")
- col.prop(rl, "use_ao", "Use AO")
- col.prop(rl, "use_solid", "Use Surfaces")
- col.prop(rl, "use_strand", "Use Hair")
+ col = layout.column()
+ col.prop(view_layer, "use_sky", "Use Environment")
+ col.prop(view_layer, "use_ao", "Use AO")
+ col.prop(view_layer, "use_solid", "Use Surfaces")
+ col.prop(view_layer, "use_strand", "Use Hair")
if with_freestyle:
row = col.row()
- row.prop(rl, "use_freestyle", "Use Freestyle")
+ row.prop(view_layer, "use_freestyle", "Use Freestyle")
row.active = rd.use_freestyle
class CYCLES_RENDER_PT_layer_passes(CyclesButtonsPanel, Panel):
bl_label = "Passes"
- bl_context = "render_layer"
+ bl_context = "view_layer"
bl_options = {'DEFAULT_CLOSED'}
def draw(self, context):
@@ -496,76 +471,76 @@ class CYCLES_RENDER_PT_layer_passes(CyclesButtonsPanel, Panel):
scene = context.scene
rd = scene.render
- rl = rd.layers.active
- crl = rl.cycles
+ view_layer = scene.view_layers.active
+ cycles_view_layer = view_layer.cycles
split = layout.split()
col = split.column()
- col.prop(rl, "use_pass_combined")
- col.prop(rl, "use_pass_z")
- col.prop(rl, "use_pass_mist")
- col.prop(rl, "use_pass_normal")
+ col.prop(view_layer, "use_pass_combined")
+ col.prop(view_layer, "use_pass_z")
+ col.prop(view_layer, "use_pass_mist")
+ col.prop(view_layer, "use_pass_normal")
row = col.row()
- row.prop(rl, "use_pass_vector")
+ row.prop(view_layer, "use_pass_vector")
row.active = not rd.use_motion_blur
- col.prop(rl, "use_pass_uv")
- col.prop(rl, "use_pass_object_index")
- col.prop(rl, "use_pass_material_index")
+ col.prop(view_layer, "use_pass_uv")
+ col.prop(view_layer, "use_pass_object_index")
+ col.prop(view_layer, "use_pass_material_index")
col.separator()
- col.prop(rl, "use_pass_shadow")
- col.prop(rl, "use_pass_ambient_occlusion")
+ col.prop(view_layer, "use_pass_shadow")
+ col.prop(view_layer, "use_pass_ambient_occlusion")
col.separator()
- col.prop(rl, "pass_alpha_threshold")
+ col.prop(view_layer, "pass_alpha_threshold")
col = split.column()
col.label(text="Diffuse:")
row = col.row(align=True)
- row.prop(rl, "use_pass_diffuse_direct", text="Direct", toggle=True)
- row.prop(rl, "use_pass_diffuse_indirect", text="Indirect", toggle=True)
- row.prop(rl, "use_pass_diffuse_color", text="Color", toggle=True)
+ row.prop(view_layer, "use_pass_diffuse_direct", text="Direct", toggle=True)
+ row.prop(view_layer, "use_pass_diffuse_indirect", text="Indirect", toggle=True)
+ row.prop(view_layer, "use_pass_diffuse_color", text="Color", toggle=True)
col.label(text="Glossy:")
row = col.row(align=True)
- row.prop(rl, "use_pass_glossy_direct", text="Direct", toggle=True)
- row.prop(rl, "use_pass_glossy_indirect", text="Indirect", toggle=True)
- row.prop(rl, "use_pass_glossy_color", text="Color", toggle=True)
+ row.prop(view_layer, "use_pass_glossy_direct", text="Direct", toggle=True)
+ row.prop(view_layer, "use_pass_glossy_indirect", text="Indirect", toggle=True)
+ row.prop(view_layer, "use_pass_glossy_color", text="Color", toggle=True)
col.label(text="Transmission:")
row = col.row(align=True)
- row.prop(rl, "use_pass_transmission_direct", text="Direct", toggle=True)
- row.prop(rl, "use_pass_transmission_indirect", text="Indirect", toggle=True)
- row.prop(rl, "use_pass_transmission_color", text="Color", toggle=True)
+ row.prop(view_layer, "use_pass_transmission_direct", text="Direct", toggle=True)
+ row.prop(view_layer, "use_pass_transmission_indirect", text="Indirect", toggle=True)
+ row.prop(view_layer, "use_pass_transmission_color", text="Color", toggle=True)
col.label(text="Subsurface:")
row = col.row(align=True)
- row.prop(rl, "use_pass_subsurface_direct", text="Direct", toggle=True)
- row.prop(rl, "use_pass_subsurface_indirect", text="Indirect", toggle=True)
- row.prop(rl, "use_pass_subsurface_color", text="Color", toggle=True)
+ row.prop(view_layer, "use_pass_subsurface_direct", text="Direct", toggle=True)
+ row.prop(view_layer, "use_pass_subsurface_indirect", text="Indirect", toggle=True)
+ row.prop(view_layer, "use_pass_subsurface_color", text="Color", toggle=True)
col.label(text="Volume:")
row = col.row(align=True)
- row.prop(crl, "use_pass_volume_direct", text="Direct", toggle=True)
- row.prop(crl, "use_pass_volume_indirect", text="Indirect", toggle=True)
+ row.prop(cycles_view_layer, "use_pass_volume_direct", text="Direct", toggle=True)
+ row.prop(cycles_view_layer, "use_pass_volume_indirect", text="Indirect", toggle=True)
col.separator()
- col.prop(rl, "use_pass_emit", text="Emission")
- col.prop(rl, "use_pass_environment")
+ col.prop(view_layer, "use_pass_emit", text="Emission")
+ col.prop(view_layer, "use_pass_environment")
if context.scene.cycles.feature_set == 'EXPERIMENTAL':
col.separator()
sub = col.column()
- sub.active = crl.use_denoising
- sub.prop(crl, "denoising_store_passes", text="Denoising")
+ sub.active = cycles_view_layer.use_denoising
+ sub.prop(cycles_view_layer, "denoising_store_passes", text="Denoising")
col = layout.column()
- col.prop(crl, "pass_debug_render_time")
+ col.prop(cycles_view_layer, "pass_debug_render_time")
if _cycles.with_cycles_debug:
- col.prop(crl, "pass_debug_bvh_traversed_nodes")
- col.prop(crl, "pass_debug_bvh_traversed_instances")
- col.prop(crl, "pass_debug_bvh_intersections")
- col.prop(crl, "pass_debug_ray_bounces")
+ col.prop(cycles_view_layer, "pass_debug_bvh_traversed_nodes")
+ col.prop(cycles_view_layer, "pass_debug_bvh_traversed_instances")
+ col.prop(cycles_view_layer, "pass_debug_bvh_intersections")
+ col.prop(cycles_view_layer, "pass_debug_ray_bounces")
class CYCLES_RENDER_PT_views(CyclesButtonsPanel, Panel):
bl_label = "Views"
- bl_context = "render_layer"
+ bl_context = "view_layer"
bl_options = {'DEFAULT_CLOSED'}
def draw_header(self, context):
@@ -587,7 +562,7 @@ class CYCLES_RENDER_PT_views(CyclesButtonsPanel, Panel):
if basic_stereo:
row = layout.row()
- row.template_list("RENDERLAYER_UL_renderviews", "name", rd, "stereo_views", rd.views, "active_index", rows=2)
+ row.template_list("VIEWLAYER_UL_renderviews", "name", rd, "stereo_views", rd.views, "active_index", rows=2)
row = layout.row()
row.label(text="File Suffix:")
@@ -595,7 +570,7 @@ class CYCLES_RENDER_PT_views(CyclesButtonsPanel, Panel):
else:
row = layout.row()
- row.template_list("RENDERLAYER_UL_renderviews", "name", rd, "views", rd.views, "active_index", rows=2)
+ row.template_list("VIEWLAYER_UL_renderviews", "name", rd, "views", rd.views, "active_index", rows=2)
col = row.column(align=True)
col.operator("scene.render_view_add", icon='ZOOMIN', text="")
@@ -608,66 +583,65 @@ class CYCLES_RENDER_PT_views(CyclesButtonsPanel, Panel):
class CYCLES_RENDER_PT_denoising(CyclesButtonsPanel, Panel):
bl_label = "Denoising"
- bl_context = "render_layer"
+ bl_context = "view_layer"
bl_options = {'DEFAULT_CLOSED'}
def draw_header(self, context):
- rd = context.scene.render
- rl = rd.layers.active
- crl = rl.cycles
- cscene = context.scene.cycles
+ scene = context.scene
+ view_layer = scene.view_layers.active
+ cycles_view_layer = view_layer.cycles
+ cscene = scene.cycles
layout = self.layout
- layout.prop(crl, "use_denoising", text="")
+ layout.prop(cycles_view_layer, "use_denoising", text="")
def draw(self, context):
layout = self.layout
scene = context.scene
cscene = scene.cycles
- rd = scene.render
- rl = rd.layers.active
- crl = rl.cycles
+ view_layer = scene.view_layers.active
+ cycles_view_layer = view_layer.cycles
- layout.active = crl.use_denoising
+ layout.active = cycles_view_layer.use_denoising
split = layout.split()
col = split.column()
sub = col.column(align=True)
- sub.prop(crl, "denoising_radius", text="Radius")
- sub.prop(crl, "denoising_strength", slider=True, text="Strength")
+ sub.prop(cycles_view_layer, "denoising_radius", text="Radius")
+ sub.prop(cycles_view_layer, "denoising_strength", slider=True, text="Strength")
col = split.column()
sub = col.column(align=True)
- sub.prop(crl, "denoising_feature_strength", slider=True, text="Feature Strength")
- sub.prop(crl, "denoising_relative_pca")
+ sub.prop(cycles_view_layer, "denoising_feature_strength", slider=True, text="Feature Strength")
+ sub.prop(cycles_view_layer, "denoising_relative_pca")
layout.separator()
row = layout.row()
row.label(text="Diffuse:")
sub = row.row(align=True)
- sub.prop(crl, "denoising_diffuse_direct", text="Direct", toggle=True)
- sub.prop(crl, "denoising_diffuse_indirect", text="Indirect", toggle=True)
+ sub.prop(cycles_view_layer, "denoising_diffuse_direct", text="Direct", toggle=True)
+ sub.prop(cycles_view_layer, "denoising_diffuse_indirect", text="Indirect", toggle=True)
row = layout.row()
row.label(text="Glossy:")
sub = row.row(align=True)
- sub.prop(crl, "denoising_glossy_direct", text="Direct", toggle=True)
- sub.prop(crl, "denoising_glossy_indirect", text="Indirect", toggle=True)
+ sub.prop(cycles_view_layer, "denoising_glossy_direct", text="Direct", toggle=True)
+ sub.prop(cycles_view_layer, "denoising_glossy_indirect", text="Indirect", toggle=True)
row = layout.row()
row.label(text="Transmission:")
sub = row.row(align=True)
- sub.prop(crl, "denoising_transmission_direct", text="Direct", toggle=True)
- sub.prop(crl, "denoising_transmission_indirect", text="Indirect", toggle=True)
+ sub.prop(cycles_view_layer, "denoising_transmission_direct", text="Direct", toggle=True)
+ sub.prop(cycles_view_layer, "denoising_transmission_indirect", text="Indirect", toggle=True)
row = layout.row()
row.label(text="Subsurface:")
sub = row.row(align=True)
- sub.prop(crl, "denoising_subsurface_direct", text="Direct", toggle=True)
- sub.prop(crl, "denoising_subsurface_indirect", text="Indirect", toggle=True)
+ sub.prop(cycles_view_layer, "denoising_subsurface_direct", text="Direct", toggle=True)
+ sub.prop(cycles_view_layer, "denoising_subsurface_indirect", text="Indirect", toggle=True)
class CYCLES_PT_post_processing(CyclesButtonsPanel, Panel):
@@ -918,43 +892,22 @@ class CYCLES_OT_use_shading_nodes(Operator):
return {'FINISHED'}
-def find_node(material, nodetype):
- if material and material.node_tree:
- ntree = material.node_tree
-
- active_output_node = None
- for node in ntree.nodes:
- if getattr(node, "type", None) == nodetype:
- if getattr(node, "is_active_output", True):
- return node
- if not active_output_node:
- active_output_node = node
- return active_output_node
-
- return None
-
-
-def find_node_input(node, name):
- for input in node.inputs:
- if input.name == name:
- return input
-
- return None
-
-
-def panel_node_draw(layout, id_data, output_type, input_name):
+def panel_node_draw(layout, id_data, output_types, input_name):
if not id_data.use_nodes:
layout.operator("cycles.use_shading_nodes", icon='NODETREE')
return False
ntree = id_data.node_tree
- node = find_node(id_data, output_type)
- if not node:
- layout.label(text="No output node")
- else:
+ node = find_output_node(ntree, output_types)
+ if node:
input = find_node_input(node, input_name)
- layout.template_node_view(ntree, node, input)
+ if input:
+ layout.template_node_view(ntree, node, input)
+ else:
+ layout.label(text="Incompatible output node")
+ else:
+ layout.label(text="No output node")
return True
@@ -1043,7 +996,7 @@ class CYCLES_LAMP_PT_nodes(CyclesButtonsPanel, Panel):
layout = self.layout
lamp = context.lamp
- if not panel_node_draw(layout, lamp, 'OUTPUT_LAMP', 'Surface'):
+ if not panel_node_draw(layout, lamp, ('OUTPUT_LAMP',), 'Surface'):
layout.prop(lamp, "color")
@@ -1098,7 +1051,7 @@ class CYCLES_WORLD_PT_surface(CyclesButtonsPanel, Panel):
world = context.world
- if not panel_node_draw(layout, world, 'OUTPUT_WORLD', 'Surface'):
+ if not panel_node_draw(layout, world, ('OUTPUT_WORLD',), 'Surface'):
layout.prop(world, "horizon_color", text="Color")
@@ -1116,7 +1069,7 @@ class CYCLES_WORLD_PT_volume(CyclesButtonsPanel, Panel):
layout = self.layout
world = context.world
- panel_node_draw(layout, world, 'OUTPUT_WORLD', 'Volume')
+ panel_node_draw(layout, world, ('OUTPUT_WORLD',), 'Volume')
class CYCLES_WORLD_PT_ambient_occlusion(CyclesButtonsPanel, Panel):
@@ -1153,8 +1106,8 @@ class CYCLES_WORLD_PT_mist(CyclesButtonsPanel, Panel):
def poll(cls, context):
if CyclesButtonsPanel.poll(context):
if context.world:
- for rl in context.scene.render.layers:
- if rl.use_pass_mist:
+ for view_layer in context.scene.view_layers:
+ if view_layer.use_pass_mist:
return True
return False
@@ -1261,7 +1214,7 @@ class CYCLES_MATERIAL_PT_surface(CyclesButtonsPanel, Panel):
layout = self.layout
mat = context.material
- if not panel_node_draw(layout, mat, 'OUTPUT_MATERIAL', 'Surface'):
+ if not panel_node_draw(layout, mat, ('OUTPUT_MATERIAL', 'OUTPUT_EEVEE_MATERIAL'), 'Surface'):
layout.prop(mat, "diffuse_color")
@@ -1281,7 +1234,7 @@ class CYCLES_MATERIAL_PT_volume(CyclesButtonsPanel, Panel):
mat = context.material
# cmat = mat.cycles
- panel_node_draw(layout, mat, 'OUTPUT_MATERIAL', 'Volume')
+ panel_node_draw(layout, mat, ('OUTPUT_MATERIAL', 'OUTPUT_EEVEE_MATERIAL'), 'Volume')
class CYCLES_MATERIAL_PT_displacement(CyclesButtonsPanel, Panel):
@@ -1297,7 +1250,7 @@ class CYCLES_MATERIAL_PT_displacement(CyclesButtonsPanel, Panel):
layout = self.layout
mat = context.material
- panel_node_draw(layout, mat, 'OUTPUT_MATERIAL', 'Displacement')
+ panel_node_draw(layout, mat, ('OUTPUT_MATERIAL', 'OUTPUT_EEVEE_MATERIAL'), 'Displacement')
class CYCLES_MATERIAL_PT_settings(CyclesButtonsPanel, Panel):
@@ -1706,6 +1659,7 @@ class CYCLES_SCENE_PT_simplify(CyclesButtonsPanel, Panel):
row.prop(rd, "simplify_subdivision", text="Viewport")
row.prop(rd, "simplify_subdivision_render", text="Render")
+
col = layout.column(align=True)
col.label(text="Child Particles")
row = col.row(align=True)
@@ -1745,7 +1699,7 @@ def draw_device(self, context):
scene = context.scene
layout = self.layout
- if scene.render.engine == 'CYCLES':
+ if context.engine == 'CYCLES':
from . import engine
cscene = scene.cycles
@@ -1765,14 +1719,11 @@ def draw_pause(self, context):
layout = self.layout
scene = context.scene
- if scene.render.engine == "CYCLES":
+ if context.engine == "CYCLES":
view = context.space_data
- if view.viewport_shade == 'RENDERED':
- cscene = scene.cycles
- layername = scene.render.layers.active.name
- layout.prop(cscene, "preview_pause", icon="PAUSE", text="")
- layout.prop(cscene, "preview_active_layer", icon="RENDERLAYERS", text=layername)
+ cscene = scene.cycles
+ layout.prop(cscene, "preview_pause", icon="PAUSE", text="")
def get_panels():
@@ -1805,9 +1756,9 @@ def get_panels():
'MATERIAL_PT_volume_options',
'MATERIAL_PT_volume_shading',
'MATERIAL_PT_volume_transp',
- 'RENDERLAYER_PT_layer_options',
- 'RENDERLAYER_PT_layer_passes',
- 'RENDERLAYER_PT_views',
+ 'VIEWLAYER_PT_layer_options',
+ 'VIEWLAYER_PT_layer_passes',
+ 'VIEWLAYER_PT_views',
'RENDER_PT_antialiasing',
'RENDER_PT_bake',
'RENDER_PT_motion_blur',
diff --git a/intern/cycles/blender/addon/version_update.py b/intern/cycles/blender/addon/version_update.py
index 400d6dac454..12f1cec4ac9 100644
--- a/intern/cycles/blender/addon/version_update.py
+++ b/intern/cycles/blender/addon/version_update.py
@@ -363,7 +363,8 @@ def do_versions(self):
if not cscene.is_property_set("sample_clamp_indirect"):
cscene.sample_clamp_indirect = 0.0
- if bpy.data.version <= (2, 79, 1):
+ if bpy.data.version <= (2, 79, 1) or \
+ (bpy.data.version >= (2, 80, 0) and bpy.data.version <= (2, 80, 3)):
displacement_nodes_insert()
if bpy.data.version <= (2, 79, 2):
diff --git a/intern/cycles/blender/blender_curves.cpp b/intern/cycles/blender/blender_curves.cpp
index 42b985305ea..5ed021aa1e4 100644
--- a/intern/cycles/blender/blender_curves.cpp
+++ b/intern/cycles/blender/blender_curves.cpp
@@ -325,14 +325,14 @@ static bool ObtainCacheParticleVcol(Mesh *mesh,
return true;
}
-static void set_resolution(BL::Object *b_ob, BL::Scene *scene, bool render)
+static void set_resolution(BL::Object *b_ob, BL::Scene *scene, BL::ViewLayer *view_layer, bool render)
{
BL::Object::modifiers_iterator b_mod;
for(b_ob->modifiers.begin(b_mod); b_mod != b_ob->modifiers.end(); ++b_mod) {
if((b_mod->type() == b_mod->type_PARTICLE_SYSTEM) && ((b_mod->show_viewport()) || (b_mod->show_render()))) {
BL::ParticleSystemModifier psmd((const PointerRNA)b_mod->ptr);
BL::ParticleSystem b_psys((const PointerRNA)psmd.particle_system().ptr);
- b_psys.set_resolution(*scene, *b_ob, (render)? 2: 1);
+ b_psys.set_resolution(*scene, *view_layer, *b_ob, (render)? 2: 1);
}
}
}
@@ -894,7 +894,8 @@ void BlenderSync::sync_curves(Mesh *mesh,
/* obtain general settings */
const bool use_curves = scene->curve_system_manager->use_curves;
- if(!(use_curves && b_ob.mode() != b_ob.mode_PARTICLE_EDIT)) {
+ /* TODO/OBMODE, make cycles mode aware. */
+ if(!(use_curves /* && b_ob.mode() != b_ob.mode_PARTICLE_EDIT */ )) {
if(!motion)
mesh->compute_bounds();
return;
@@ -912,7 +913,7 @@ void BlenderSync::sync_curves(Mesh *mesh,
ParticleCurveData CData;
if(!preview)
- set_resolution(&b_ob, &b_scene, true);
+ set_resolution(&b_ob, &b_scene, &b_view_layer, true);
ObtainCacheParticleData(mesh, &b_mesh, &b_ob, &CData, !preview);
@@ -1057,7 +1058,7 @@ void BlenderSync::sync_curves(Mesh *mesh,
}
if(!preview)
- set_resolution(&b_ob, &b_scene, false);
+ set_resolution(&b_ob, &b_scene, &b_view_layer, false);
mesh->compute_bounds();
}
diff --git a/intern/cycles/blender/blender_mesh.cpp b/intern/cycles/blender/blender_mesh.cpp
index 6f1c49774f2..df1b1a4ca10 100644
--- a/intern/cycles/blender/blender_mesh.cpp
+++ b/intern/cycles/blender/blender_mesh.cpp
@@ -557,7 +557,7 @@ static void attr_create_subd_uv_map(Scene *scene,
int i = 0;
for(b_mesh.uv_layers.begin(l); l != b_mesh.uv_layers.end(); ++l, ++i) {
- bool active_render = b_mesh.uv_textures[i].active_render();
+ bool active_render = l->active_render();
AttributeStandard uv_std = (active_render)? ATTR_STD_UV: ATTR_STD_NONE;
ustring uv_name = ustring(l->name().c_str());
AttributeStandard tangent_std = (active_render)? ATTR_STD_UV_TANGENT
@@ -1066,6 +1066,7 @@ static void sync_mesh_fluid_motion(BL::Object& b_ob, Scene *scene, Mesh *mesh)
}
Mesh *BlenderSync::sync_mesh(BL::Object& b_ob,
+ BL::Object& b_ob_instance,
bool object_updated,
bool hide_tris)
{
@@ -1079,8 +1080,8 @@ Mesh *BlenderSync::sync_mesh(BL::Object& b_ob,
/* test if we can instance or if the object is modified */
BL::ID b_ob_data = b_ob.data();
- BL::ID key = (BKE_object_is_modified(b_ob))? b_ob: b_ob_data;
- BL::Material material_override = render_layer.material_override;
+ BL::ID key = (BKE_object_is_modified(b_ob))? b_ob_instance: b_ob_data;
+ BL::Material material_override = view_layer.material_override;
/* find shader indices */
vector<Shader*> used_shaders;
@@ -1105,10 +1106,10 @@ Mesh *BlenderSync::sync_mesh(BL::Object& b_ob,
/* test if we need to sync */
int requested_geometry_flags = Mesh::GEOMETRY_NONE;
- if(render_layer.use_surfaces) {
+ if(view_layer.use_surfaces) {
requested_geometry_flags |= Mesh::GEOMETRY_TRIANGLES;
}
- if(render_layer.use_hair) {
+ if(view_layer.use_hair) {
requested_geometry_flags |= Mesh::GEOMETRY_CURVES;
}
Mesh *mesh;
@@ -1183,13 +1184,14 @@ Mesh *BlenderSync::sync_mesh(BL::Object& b_ob,
BL::Mesh b_mesh = object_to_mesh(b_data,
b_ob,
b_scene,
+ b_view_layer,
true,
!preview,
need_undeformed,
mesh->subdivision_type);
if(b_mesh) {
- if(render_layer.use_surfaces && !hide_tris) {
+ if(view_layer.use_surfaces && !hide_tris) {
if(mesh->subdivision_type != Mesh::SUBDIVISION_NONE)
create_subd_mesh(scene, mesh, b_ob, b_mesh, used_shaders,
dicing_rate, max_subdivisions);
@@ -1199,7 +1201,7 @@ Mesh *BlenderSync::sync_mesh(BL::Object& b_ob,
create_mesh_volume_attributes(scene, b_ob, mesh, b_scene.frame_current());
}
- if(render_layer.use_hair && mesh->subdivision_type == Mesh::SUBDIVISION_NONE)
+ if(view_layer.use_hair && mesh->subdivision_type == Mesh::SUBDIVISION_NONE)
sync_curves(mesh, b_mesh, b_ob, false);
if(can_free_caches) {
@@ -1297,6 +1299,7 @@ void BlenderSync::sync_mesh_motion(BL::Object& b_ob,
b_mesh = object_to_mesh(b_data,
b_ob,
b_scene,
+ b_view_layer,
true,
!preview,
false,
diff --git a/intern/cycles/blender/blender_object.cpp b/intern/cycles/blender/blender_object.cpp
index 38ef1bc5249..6564eea4767 100644
--- a/intern/cycles/blender/blender_object.cpp
+++ b/intern/cycles/blender/blender_object.cpp
@@ -112,13 +112,14 @@ static uint object_ray_visibility(BL::Object& b_ob)
void BlenderSync::sync_light(BL::Object& b_parent,
int persistent_id[OBJECT_PERSISTENT_ID_SIZE],
BL::Object& b_ob,
- BL::DupliObject& b_dupli_ob,
+ BL::Object& b_ob_instance,
+ int random_id,
Transform& tfm,
bool *use_portal)
{
/* test if we need to sync */
Light *light;
- ObjectKey key(b_parent, persistent_id, b_ob);
+ ObjectKey key(b_parent, persistent_id, b_ob_instance);
if(!light_map.sync(&light, b_ob, b_parent, key)) {
if(light->is_portal)
@@ -194,8 +195,8 @@ void BlenderSync::sync_light(BL::Object& b_parent,
light->max_bounces = get_int(clamp, "max_bounces");
- if(b_dupli_ob) {
- light->random_id = b_dupli_ob.random_id();
+ if(b_ob != b_ob_instance) {
+ light->random_id = random_id;
}
else {
light->random_id = hash_int_2d(hash_string(b_ob.name().c_str()), 0);
@@ -262,24 +263,42 @@ void BlenderSync::sync_background_light(bool use_portal)
/* Object */
-Object *BlenderSync::sync_object(BL::Object& b_parent,
- int persistent_id[OBJECT_PERSISTENT_ID_SIZE],
- BL::DupliObject& b_dupli_ob,
- Transform& tfm,
+Object *BlenderSync::sync_object(BL::Depsgraph::duplis_iterator& b_dupli_iter,
uint layer_flag,
float motion_time,
bool hide_tris,
BlenderObjectCulling& culling,
bool *use_portal)
{
- BL::Object b_ob = (b_dupli_ob ? b_dupli_ob.object() : b_parent);
- bool motion = motion_time != 0.0f;
-
+ const bool is_instance = b_dupli_iter->is_instance();
+ BL::Object b_ob = b_dupli_iter->object();
+ BL::Object b_parent = is_instance ? b_dupli_iter->parent()
+ : b_dupli_iter->object();
+ BL::Object b_ob_instance = is_instance ? b_dupli_iter->instance_object()
+ : b_ob;
+ const bool motion = motion_time != 0.0f;
+ /*const*/ Transform tfm = get_transform(b_ob.matrix_world());
+ int *persistent_id = NULL;
+ BL::Array<int, OBJECT_PERSISTENT_ID_SIZE> persistent_id_array;
+ if(is_instance) {
+ persistent_id_array = b_dupli_iter->persistent_id();
+ persistent_id = persistent_id_array.data;
+ }
+
/* light is handled separately */
if(object_is_light(b_ob)) {
/* don't use lamps for excluded layers used as mask layer */
- if(!motion && !((layer_flag & render_layer.holdout_layer) && (layer_flag & render_layer.exclude_layer)))
- sync_light(b_parent, persistent_id, b_ob, b_dupli_ob, tfm, use_portal);
+ if(!motion && !((layer_flag & view_layer.holdout_layer) &&
+ (layer_flag & view_layer.exclude_layer)))
+ {
+ sync_light(b_parent,
+ persistent_id,
+ b_ob,
+ b_ob_instance,
+ is_instance ? b_dupli_iter->random_id() : 0,
+ tfm,
+ use_portal);
+ }
return NULL;
}
@@ -296,7 +315,7 @@ Object *BlenderSync::sync_object(BL::Object& b_parent,
/* Visibility flags for both parent and child. */
PointerRNA cobject = RNA_pointer_get(&b_ob.ptr, "cycles");
- bool use_holdout = (layer_flag & render_layer.holdout_layer) != 0 ||
+ bool use_holdout = (layer_flag & view_layer.holdout_layer) != 0 ||
get_boolean(cobject, "is_holdout");
uint visibility = object_ray_visibility(b_ob) & PATH_RAY_ALL_VISIBILITY;
@@ -305,12 +324,12 @@ Object *BlenderSync::sync_object(BL::Object& b_parent,
}
/* Make holdout objects on excluded layer invisible for non-camera rays. */
- if(use_holdout && (layer_flag & render_layer.exclude_layer)) {
+ if(use_holdout && (layer_flag & view_layer.exclude_layer)) {
visibility &= ~(PATH_RAY_ALL_VISIBILITY - PATH_RAY_CAMERA);
}
/* Hide objects not on render layer from camera rays. */
- if(!(layer_flag & render_layer.layer)) {
+ if(!(layer_flag & view_layer.layer)) {
visibility &= ~PATH_RAY_CAMERA;
}
@@ -320,7 +339,7 @@ Object *BlenderSync::sync_object(BL::Object& b_parent,
}
/* key to lookup object */
- ObjectKey key(b_parent, persistent_id, b_ob);
+ ObjectKey key(b_parent, persistent_id, b_ob_instance);
Object *object;
/* motion vector case */
@@ -360,7 +379,7 @@ Object *BlenderSync::sync_object(BL::Object& b_parent,
object_updated = true;
/* mesh sync */
- object->mesh = sync_mesh(b_ob, object_updated, hide_tris);
+ object->mesh = sync_mesh(b_ob, b_ob_instance, object_updated, hide_tris);
/* special case not tracked by object update flags */
@@ -412,10 +431,10 @@ Object *BlenderSync::sync_object(BL::Object& b_parent,
}
/* dupli texture coordinates and random_id */
- if(b_dupli_ob) {
- object->dupli_generated = 0.5f*get_float3(b_dupli_ob.orco()) - make_float3(0.5f, 0.5f, 0.5f);
- object->dupli_uv = get_float2(b_dupli_ob.uv());
- object->random_id = b_dupli_ob.random_id();
+ if(is_instance) {
+ object->dupli_generated = 0.5f*get_float3(b_dupli_iter->orco()) - make_float3(0.5f, 0.5f, 0.5f);
+ object->dupli_uv = get_float2(b_dupli_iter->uv());
+ object->random_id = b_dupli_iter->random_id();
}
else {
object->dupli_generated = make_float3(0.0f, 0.0f, 0.0f);
@@ -450,6 +469,7 @@ static bool object_render_hide(BL::Object& b_ob,
BL::Object::particle_systems_iterator b_psys;
bool hair_present = false;
+ bool has_particles = false;
bool show_emitter = false;
bool hide_emitter = false;
bool hide_as_dupli_parent = false;
@@ -459,20 +479,17 @@ static bool object_render_hide(BL::Object& b_ob,
if((b_psys->settings().render_type() == BL::ParticleSettings::render_type_PATH) &&
(b_psys->settings().type()==BL::ParticleSettings::type_HAIR))
hair_present = true;
-
- if(b_psys->settings().use_render_emitter())
- show_emitter = true;
- else
- hide_emitter = true;
+ has_particles = true;
}
- if(show_emitter)
- hide_emitter = false;
-
- /* duplicators hidden by default, except dupliframes which duplicate self */
- if(b_ob.is_duplicator())
- if(top_level || b_ob.dupli_type() != BL::Object::dupli_type_FRAMES)
+ if(has_particles) {
+ show_emitter = b_ob.show_duplicator_for_render();
+ hide_emitter = !show_emitter;
+ } else if(b_ob.is_duplicator()) {
+ if(top_level || b_ob.show_duplicator_for_render()) {
hide_as_dupli_parent = true;
+ }
+ }
/* hide original object for duplis */
BL::Object parent = b_ob.parent();
@@ -501,19 +518,11 @@ static bool object_render_hide(BL::Object& b_ob,
}
}
-static bool object_render_hide_duplis(BL::Object& b_ob)
-{
- BL::Object parent = b_ob.parent();
-
- return (parent && object_render_hide_original(b_ob.type(), parent.dupli_type()));
-}
-
/* Object Loop */
void BlenderSync::sync_objects(float motion_time)
{
/* layer data */
- uint scene_layer = render_layer.scene_layer;
bool motion = motion_time != 0.0f;
if(!motion) {
@@ -532,100 +541,38 @@ void BlenderSync::sync_objects(float motion_time)
BlenderObjectCulling culling(scene, b_scene);
/* object loop */
- BL::Scene::object_bases_iterator b_base;
- BL::Scene b_sce = b_scene;
- /* modifier result type (not exposed as enum in C++ API)
- * 1 : DAG_EVAL_PREVIEW
- * 2 : DAG_EVAL_RENDER
- */
- int dupli_settings = (render_layer.use_viewport_visibility) ? 1 : 2;
-
bool cancel = false;
bool use_portal = false;
- uint layer_override = get_layer(b_engine.layer_override());
- for(; b_sce && !cancel; b_sce = b_sce.background_set()) {
- /* Render layer's scene_layer is affected by local view already,
- * which is not a desired behavior here.
- */
- uint scene_layers = layer_override ? layer_override : get_layer(b_scene.layers());
- for(b_sce.object_bases.begin(b_base); b_base != b_sce.object_bases.end() && !cancel; ++b_base) {
- BL::Object b_ob = b_base->object();
- bool hide = (render_layer.use_viewport_visibility)? b_ob.hide(): b_ob.hide_render();
- uint ob_layer = get_layer(b_base->layers(),
- b_base->layers_local_view(),
- object_is_light(b_ob),
- scene_layers);
- hide = hide || !(ob_layer & scene_layer);
-
- if(!hide) {
- progress.set_sync_status("Synchronizing object", b_ob.name());
-
- /* load per-object culling data */
- culling.init_object(scene, b_ob);
-
- if(b_ob.is_duplicator() && !object_render_hide_duplis(b_ob)) {
- /* dupli objects */
- b_ob.dupli_list_create(b_scene, dupli_settings);
-
- BL::Object::dupli_list_iterator b_dup;
-
- for(b_ob.dupli_list.begin(b_dup); b_dup != b_ob.dupli_list.end(); ++b_dup) {
- Transform tfm = get_transform(b_dup->matrix());
- BL::Object b_dup_ob = b_dup->object();
- bool dup_hide = (render_layer.use_viewport_visibility)? b_dup_ob.hide(): b_dup_ob.hide_render();
- bool in_dupli_group = (b_dup->type() == BL::DupliObject::type_GROUP);
- bool hide_tris;
-
- if(!(b_dup->hide() || dup_hide || object_render_hide(b_dup_ob, false, in_dupli_group, hide_tris))) {
- /* the persistent_id allows us to match dupli objects
- * between frames and updates */
- BL::Array<int, OBJECT_PERSISTENT_ID_SIZE> persistent_id = b_dup->persistent_id();
-
- /* sync object and mesh or light data */
- Object *object = sync_object(b_ob,
- persistent_id.data,
- *b_dup,
- tfm,
- ob_layer,
- motion_time,
- hide_tris,
- culling,
- &use_portal);
-
- /* sync possible particle data, note particle_id
- * starts counting at 1, first is dummy particle */
- if(!motion && object) {
- sync_dupli_particle(b_ob, *b_dup, object);
- }
-
- }
- }
-
- b_ob.dupli_list_clear();
- }
+ BL::Depsgraph::duplis_iterator b_dupli_iter;
+ for(b_depsgraph.duplis.begin(b_dupli_iter);
+ b_dupli_iter != b_depsgraph.duplis.end() && !cancel;
+ ++b_dupli_iter)
+ {
+ BL::Object b_ob = b_dupli_iter->object();
+ if(!b_ob.is_visible()) {
+ continue;
+ }
- /* test if object needs to be hidden */
- bool hide_tris;
-
- if(!object_render_hide(b_ob, true, true, hide_tris)) {
- /* object itself */
- Transform tfm = get_transform(b_ob.matrix_world());
- BL::DupliObject b_empty_dupli_ob(PointerRNA_NULL);
- sync_object(b_ob,
- NULL,
- b_empty_dupli_ob,
- tfm,
- ob_layer,
- motion_time,
- hide_tris,
- culling,
- &use_portal);
- }
- }
+ progress.set_sync_status("Synchronizing object", b_ob.name());
- cancel = progress.get_cancel();
- }
+ /* load per-object culling data */
+ culling.init_object(scene, b_ob);
+
+ /* test if object needs to be hidden */
+ bool hide_tris;
+
+ if(!object_render_hide(b_ob, true, true, hide_tris)) {
+ /* object itself */
+ sync_object(b_dupli_iter,
+ ~(0), /* until we get rid of layers */
+ motion_time,
+ hide_tris,
+ culling,
+ &use_portal);
+ }
+
+ cancel = progress.get_cancel();
}
progress.set_sync_status("");
diff --git a/intern/cycles/blender/blender_python.cpp b/intern/cycles/blender/blender_python.cpp
index 792597cbad5..9ade27d57d7 100644
--- a/intern/cycles/blender/blender_python.cpp
+++ b/intern/cycles/blender/blender_python.cpp
@@ -203,10 +203,10 @@ static PyObject *exit_func(PyObject * /*self*/, PyObject * /*args*/)
static PyObject *create_func(PyObject * /*self*/, PyObject *args)
{
- PyObject *pyengine, *pyuserpref, *pydata, *pyscene, *pyregion, *pyv3d, *pyrv3d;
+ PyObject *pyengine, *pyuserpref, *pydata, *pygraph, *pyscene, *pyregion, *pyv3d, *pyrv3d;
int preview_osl;
- if(!PyArg_ParseTuple(args, "OOOOOOOi", &pyengine, &pyuserpref, &pydata, &pyscene,
+ if(!PyArg_ParseTuple(args, "OOOOOOOOi", &pyengine, &pyuserpref, &pydata, &pygraph, &pyscene,
&pyregion, &pyv3d, &pyrv3d, &preview_osl))
{
return NULL;
@@ -225,6 +225,10 @@ static PyObject *create_func(PyObject * /*self*/, PyObject *args)
RNA_main_pointer_create((Main*)PyLong_AsVoidPtr(pydata), &dataptr);
BL::BlendData data(dataptr);
+ PointerRNA graphptr;
+ RNA_id_pointer_create((ID*)PyLong_AsVoidPtr(pygraph), &graphptr);
+ BL::Depsgraph graph(graphptr);
+
PointerRNA sceneptr;
RNA_id_pointer_create((ID*)PyLong_AsVoidPtr(pyscene), &sceneptr);
BL::Scene scene(sceneptr);
@@ -249,7 +253,7 @@ static PyObject *create_func(PyObject * /*self*/, PyObject *args)
int width = region.width();
int height = region.height();
- session = new BlenderSession(engine, userpref, data, scene, v3d, rv3d, width, height);
+ session = new BlenderSession(engine, userpref, data, graph, scene, v3d, rv3d, width, height);
}
else {
/* override some settings for preview */
@@ -261,7 +265,7 @@ static PyObject *create_func(PyObject * /*self*/, PyObject *args)
}
/* offline session or preview render */
- session = new BlenderSession(engine, userpref, data, scene);
+ session = new BlenderSession(engine, userpref, data, graph, scene);
}
python_thread_state_save(&session->python_thread_state);
@@ -327,9 +331,9 @@ static PyObject *bake_func(PyObject * /*self*/, PyObject *args)
static PyObject *draw_func(PyObject * /*self*/, PyObject *args)
{
- PyObject *pysession, *pyv3d, *pyrv3d;
+ PyObject *pysession, *pygraph, *pyv3d, *pyrv3d;
- if(!PyArg_ParseTuple(args, "OOO", &pysession, &pyv3d, &pyrv3d))
+ if(!PyArg_ParseTuple(args, "OOOO", &pysession, &pygraph, &pyv3d, &pyrv3d))
return NULL;
BlenderSession *session = (BlenderSession*)PyLong_AsVoidPtr(pysession);
diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp
index d9301125641..60e49161be2 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -52,12 +52,15 @@ int BlenderSession::end_resumable_chunk = 0;
BlenderSession::BlenderSession(BL::RenderEngine& b_engine,
BL::UserPreferences& b_userpref,
BL::BlendData& b_data,
+ BL::Depsgraph& b_depsgraph,
BL::Scene& b_scene)
: b_engine(b_engine),
b_userpref(b_userpref),
b_data(b_data),
b_render(b_engine.render()),
+ b_depsgraph(b_depsgraph),
b_scene(b_scene),
+ b_view_layer(b_engine.view_layer()),
b_v3d(PointerRNA_NULL),
b_rv3d(PointerRNA_NULL),
python_thread_state(NULL)
@@ -76,6 +79,7 @@ BlenderSession::BlenderSession(BL::RenderEngine& b_engine,
BlenderSession::BlenderSession(BL::RenderEngine& b_engine,
BL::UserPreferences& b_userpref,
BL::BlendData& b_data,
+ BL::Depsgraph& b_depsgraph,
BL::Scene& b_scene,
BL::SpaceView3D& b_v3d,
BL::RegionView3D& b_rv3d,
@@ -84,7 +88,9 @@ BlenderSession::BlenderSession(BL::RenderEngine& b_engine,
b_userpref(b_userpref),
b_data(b_data),
b_render(b_scene.render()),
+ b_depsgraph(b_depsgraph),
b_scene(b_scene),
+ b_view_layer(b_engine.view_layer()),
b_v3d(b_v3d),
b_rv3d(b_rv3d),
width(width),
@@ -142,7 +148,7 @@ void BlenderSession::create_session()
session->scene = scene;
/* create sync */
- sync = new BlenderSync(b_engine, b_data, b_scene, scene, !background, session->progress);
+ sync = new BlenderSync(b_engine, b_data, b_depsgraph, b_scene, scene, !background, session->progress);
BL::Object b_camera_override(b_engine.camera_override());
if(b_v3d) {
if(session_pause == false) {
@@ -159,7 +165,7 @@ void BlenderSession::create_session()
else {
/* for final render we will do full data sync per render layer, only
* do some basic syncing here, no objects or materials for speed */
- sync->sync_render_layers(b_v3d, NULL);
+ sync->sync_view_layers(b_v3d, NULL);
sync->sync_integrator();
sync->sync_camera(b_render, b_camera_override, width, height, "");
}
@@ -211,12 +217,12 @@ void BlenderSession::reset_session(BL::BlendData& b_data_, BL::Scene& b_scene_)
session->stats.mem_peak = session->stats.mem_used;
/* sync object should be re-created */
- sync = new BlenderSync(b_engine, b_data, b_scene, scene, !background, session->progress);
+ sync = new BlenderSync(b_engine, b_data, b_depsgraph, b_scene, scene, !background, session->progress);
/* for final render we will do full data sync per render layer, only
* do some basic syncing here, no objects or materials for speed */
BL::Object b_camera_override(b_engine.camera_override());
- sync->sync_render_layers(b_v3d, NULL);
+ sync->sync_view_layers(b_v3d, NULL);
sync->sync_integrator();
sync->sync_camera(b_render, b_camera_override, width, height, "");
@@ -377,14 +383,13 @@ void BlenderSession::render()
BufferParams buffer_params = BlenderSync::get_buffer_params(b_render, b_v3d, b_rv3d, scene->camera, width, height);
/* render each layer */
- BL::RenderSettings r = b_scene.render();
- BL::RenderSettings::layers_iterator b_layer_iter;
+ BL::Scene::view_layers_iterator b_layer_iter;
BL::RenderResult::views_iterator b_view_iter;
/* We do some special meta attributes when we only have single layer. */
- const bool is_single_layer = (r.layers.length() == 1);
+ const bool is_single_layer = (b_scene.view_layers.length() == 1);
- for(r.layers.begin(b_layer_iter); b_layer_iter != r.layers.end(); ++b_layer_iter) {
+ for(b_scene.view_layers.begin(b_layer_iter); b_layer_iter != b_scene.view_layers.end(); ++b_layer_iter) {
b_rlay_name = b_layer_iter->name();
/* temporary render result to find needed passes and views */
@@ -1306,7 +1311,7 @@ bool BlenderSession::builtin_image_float_pixels(const string &builtin_name,
BL::ShaderNodeTexPointDensity b_point_density_node(b_node);
int length;
int settings = background ? 1 : 0; /* 1 - render settings, 0 - vewport settings. */
- b_point_density_node.calc_point_density(b_scene, settings, &length, &pixels);
+ b_point_density_node.calc_point_density(b_scene, b_view_layer, settings, &length, &pixels);
}
}
diff --git a/intern/cycles/blender/blender_session.h b/intern/cycles/blender/blender_session.h
index cbd2303d282..8694c9499b8 100644
--- a/intern/cycles/blender/blender_session.h
+++ b/intern/cycles/blender/blender_session.h
@@ -36,11 +36,13 @@ public:
BlenderSession(BL::RenderEngine& b_engine,
BL::UserPreferences& b_userpref,
BL::BlendData& b_data,
+ BL::Depsgraph& b_depsgraph,
BL::Scene& b_scene);
BlenderSession(BL::RenderEngine& b_engine,
BL::UserPreferences& b_userpref,
BL::BlendData& b_data,
+ BL::Depsgraph& b_depsgraph,
BL::Scene& b_scene,
BL::SpaceView3D& b_v3d,
BL::RegionView3D& b_rv3d,
@@ -104,7 +106,9 @@ public:
BL::UserPreferences b_userpref;
BL::BlendData b_data;
BL::RenderSettings b_render;
+ BL::Depsgraph b_depsgraph;
BL::Scene b_scene;
+ BL::ViewLayer b_view_layer;
BL::SpaceView3D b_v3d;
BL::RegionView3D b_rv3d;
string b_rlay_name;
diff --git a/intern/cycles/blender/blender_shader.cpp b/intern/cycles/blender/blender_shader.cpp
index ac1eba85dbb..d4c34d52011 100644
--- a/intern/cycles/blender/blender_shader.cpp
+++ b/intern/cycles/blender/blender_shader.cpp
@@ -231,17 +231,11 @@ static void get_tex_mapping(TextureMapping *mapping,
mapping->max = get_float3(b_mapping.max());
}
-static bool is_output_node(BL::Node& b_node)
-{
- return (b_node.is_a(&RNA_ShaderNodeOutputMaterial)
- || b_node.is_a(&RNA_ShaderNodeOutputWorld)
- || b_node.is_a(&RNA_ShaderNodeOutputLamp));
-}
-
static ShaderNode *add_node(Scene *scene,
BL::RenderEngine& b_engine,
BL::BlendData& b_data,
BL::Scene& b_scene,
+ BL::ViewLayer b_view_layer,
const bool background,
ShaderGraph *graph,
BL::ShaderNodeTree& b_ntree,
@@ -838,7 +832,7 @@ static ShaderNode *add_node(Scene *scene,
/* TODO(sergey): Use more proper update flag. */
if(true) {
- b_point_density_node.cache_point_density(b_scene, settings);
+ b_point_density_node.cache_point_density(b_scene, b_view_layer, settings);
scene->image_manager->tag_reload_image(
point_density->filename.string(),
point_density->builtin_data,
@@ -856,7 +850,7 @@ static ShaderNode *add_node(Scene *scene,
BL::Object b_ob(b_point_density_node.object());
if(b_ob) {
float3 loc, size;
- point_density_texture_space(b_scene,
+ point_density_texture_space(b_scene, b_view_layer,
b_point_density_node,
settings,
loc,
@@ -968,10 +962,36 @@ static ShaderOutput *node_find_output_by_name(ShaderNode *node,
return node->output(name.c_str());
}
+static BL::ShaderNode find_output_node(BL::ShaderNodeTree& b_ntree)
+{
+ BL::ShaderNodeTree::nodes_iterator b_node;
+ BL::ShaderNode output_node(PointerRNA_NULL);
+
+ for(b_ntree.nodes.begin(b_node); b_node != b_ntree.nodes.end(); ++b_node) {
+ BL::ShaderNodeOutputMaterial b_output_node(*b_node);
+
+ if (b_output_node.is_a(&RNA_ShaderNodeOutputMaterial) ||
+ b_output_node.is_a(&RNA_ShaderNodeOutputWorld) ||
+ b_output_node.is_a(&RNA_ShaderNodeOutputLamp)) {
+ /* regular Cycles output node */
+ if(b_output_node.is_active_output()) {
+ output_node = b_output_node;
+ break;
+ }
+ else if(!output_node.ptr.data) {
+ output_node = b_output_node;
+ }
+ }
+ }
+
+ return output_node;
+}
+
static void add_nodes(Scene *scene,
BL::RenderEngine& b_engine,
BL::BlendData& b_data,
BL::Scene& b_scene,
+ BL::ViewLayer& b_view_layer,
const bool background,
ShaderGraph *graph,
BL::ShaderNodeTree& b_ntree,
@@ -987,23 +1007,7 @@ static void add_nodes(Scene *scene,
BL::Node::outputs_iterator b_output;
/* find the node to use for output if there are multiple */
- bool found_active_output = false;
- BL::ShaderNode output_node(PointerRNA_NULL);
-
- for(b_ntree.nodes.begin(b_node); b_node != b_ntree.nodes.end(); ++b_node) {
- if(is_output_node(*b_node)) {
- BL::ShaderNodeOutputMaterial b_output_node(*b_node);
-
- if(b_output_node.is_active_output()) {
- output_node = b_output_node;
- found_active_output = true;
- break;
- }
- else if(!output_node.ptr.data && !found_active_output) {
- output_node = b_output_node;
- }
- }
- }
+ BL::ShaderNode output_node = find_output_node(b_ntree);
/* add nodes */
for(b_ntree.nodes.begin(b_node); b_node != b_ntree.nodes.end(); ++b_node) {
@@ -1062,6 +1066,7 @@ static void add_nodes(Scene *scene,
b_engine,
b_data,
b_scene,
+ b_view_layer,
background,
graph,
b_group_ntree,
@@ -1100,10 +1105,8 @@ static void add_nodes(Scene *scene,
else {
ShaderNode *node = NULL;
- if(is_output_node(*b_node)) {
- if(b_node->ptr.data == output_node.ptr.data) {
- node = graph->output();
- }
+ if(b_node->ptr.data == output_node.ptr.data) {
+ node = graph->output();
}
else {
BL::ShaderNode b_shader_node(*b_node);
@@ -1111,6 +1114,7 @@ static void add_nodes(Scene *scene,
b_engine,
b_data,
b_scene,
+ b_view_layer,
background,
graph,
b_ntree,
@@ -1174,6 +1178,7 @@ static void add_nodes(Scene *scene,
BL::RenderEngine& b_engine,
BL::BlendData& b_data,
BL::Scene& b_scene,
+ BL::ViewLayer& b_view_layer,
const bool background,
ShaderGraph *graph,
BL::ShaderNodeTree& b_ntree)
@@ -1183,6 +1188,7 @@ static void add_nodes(Scene *scene,
b_engine,
b_data,
b_scene,
+ b_view_layer,
background,
graph,
b_ntree,
@@ -1196,13 +1202,18 @@ void BlenderSync::sync_materials(bool update_all)
{
shader_map.set_default(scene->default_surface);
- /* material loop */
- BL::BlendData::materials_iterator b_mat;
-
TaskPool pool;
set<Shader*> updated_shaders;
- for(b_data.materials.begin(b_mat); b_mat != b_data.materials.end(); ++b_mat) {
+ /* material loop */
+ BL::BlendData::materials_iterator b_mat_orig;
+ for(b_data.materials.begin(b_mat_orig);
+ b_mat_orig != b_data.materials.end();
+ ++b_mat_orig)
+ {
+ /* TODO(sergey): Iterate over evaluated data rather than using mapping. */
+ BL::Material b_mat_(b_depsgraph.evaluated_id_get(*b_mat_orig));
+ BL::Material *b_mat = &b_mat_;
Shader *shader;
/* test if we need to sync */
@@ -1216,7 +1227,7 @@ void BlenderSync::sync_materials(bool update_all)
if(b_mat->use_nodes() && b_mat->node_tree()) {
BL::ShaderNodeTree b_ntree(b_mat->node_tree());
- add_nodes(scene, b_engine, b_data, b_scene, !preview, graph, b_ntree);
+ add_nodes(scene, b_engine, b_data, b_scene, b_view_layer, !preview, graph, b_ntree);
}
else {
DiffuseBsdfNode *diffuse = new DiffuseBsdfNode();
@@ -1287,7 +1298,7 @@ void BlenderSync::sync_world(bool update_all)
if(b_world && b_world.use_nodes() && b_world.node_tree()) {
BL::ShaderNodeTree b_ntree(b_world.node_tree());
- add_nodes(scene, b_engine, b_data, b_scene, !preview, graph, b_ntree);
+ add_nodes(scene, b_engine, b_data, b_scene, b_view_layer, !preview, graph, b_ntree);
/* volume */
PointerRNA cworld = RNA_pointer_get(&b_world.ptr, "cycles");
@@ -1355,8 +1366,8 @@ void BlenderSync::sync_world(bool update_all)
background->transparent_roughness_threshold = 0.0f;
}
- background->use_shader = render_layer.use_background_shader;
- background->use_ao = background->use_ao && render_layer.use_background_ao;
+ background->use_shader = view_layer.use_background_shader;
+ background->use_ao = background->use_ao && view_layer.use_background_ao;
if(background->modified(prevbackground))
background->tag_update(scene);
@@ -1369,9 +1380,14 @@ void BlenderSync::sync_lamps(bool update_all)
shader_map.set_default(scene->default_light);
/* lamp loop */
- BL::BlendData::lamps_iterator b_lamp;
-
- for(b_data.lamps.begin(b_lamp); b_lamp != b_data.lamps.end(); ++b_lamp) {
+ BL::BlendData::lamps_iterator b_lamp_orig;
+ for(b_data.lamps.begin(b_lamp_orig);
+ b_lamp_orig != b_data.lamps.end();
+ ++b_lamp_orig)
+ {
+ /* TODO(sergey): Iterate over evaluated data rather than using mapping. */
+ BL::Lamp b_lamp_(b_depsgraph.evaluated_id_get(*b_lamp_orig));
+ BL::Lamp *b_lamp = &b_lamp_;
Shader *shader;
/* test if we need to sync */
@@ -1384,7 +1400,7 @@ void BlenderSync::sync_lamps(bool update_all)
BL::ShaderNodeTree b_ntree(b_lamp->node_tree());
- add_nodes(scene, b_engine, b_data, b_scene, !preview, graph, b_ntree);
+ add_nodes(scene, b_engine, b_data, b_scene, b_view_layer, !preview, graph, b_ntree);
}
else {
float strength = 1.0f;
diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp
index 283aa5600fd..08d76582f03 100644
--- a/intern/cycles/blender/blender_sync.cpp
+++ b/intern/cycles/blender/blender_sync.cpp
@@ -44,13 +44,16 @@ CCL_NAMESPACE_BEGIN
BlenderSync::BlenderSync(BL::RenderEngine& b_engine,
BL::BlendData& b_data,
+ BL::Depsgraph& b_depsgraph,
BL::Scene& b_scene,
Scene *scene,
bool preview,
Progress &progress)
: b_engine(b_engine),
b_data(b_data),
+ b_depsgraph(b_depsgraph),
b_scene(b_scene),
+ b_view_layer(b_engine.view_layer()),
shader_map(&scene->shaders),
object_map(&scene->objects),
mesh_map(&scene->meshes),
@@ -195,7 +198,7 @@ void BlenderSync::sync_data(BL::RenderSettings& b_render,
void **python_thread_state,
const char *layer)
{
- sync_render_layers(b_v3d, layer);
+ sync_view_layers(b_v3d, layer);
sync_integrator();
sync_film();
sync_shaders();
@@ -369,71 +372,43 @@ void BlenderSync::sync_film()
/* Render Layer */
-void BlenderSync::sync_render_layers(BL::SpaceView3D& b_v3d, const char *layer)
+void BlenderSync::sync_view_layers(BL::SpaceView3D& b_v3d, const char *layer)
{
- PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
string layername;
/* 3d view */
if(b_v3d) {
- if(RNA_boolean_get(&cscene, "preview_active_layer")) {
- BL::RenderLayers layers(b_scene.render().ptr);
- layername = layers.active().name();
- layer = layername.c_str();
- }
- else {
- render_layer.scene_layer = get_layer(b_v3d.layers(), b_v3d.layers_local_view());
- render_layer.layer = render_layer.scene_layer;
- render_layer.exclude_layer = 0;
- render_layer.holdout_layer = 0;
- render_layer.material_override = PointerRNA_NULL;
- render_layer.use_background_shader = true;
- render_layer.use_background_ao = true;
- render_layer.use_hair = true;
- render_layer.use_surfaces = true;
- render_layer.use_viewport_visibility = true;
- render_layer.samples = 0;
- render_layer.bound_samples = false;
- return;
- }
+ layername = b_scene.view_layers.active().name();
+ layer = layername.c_str();
}
/* render layer */
- BL::RenderSettings r = b_scene.render();
- BL::RenderSettings::layers_iterator b_rlay;
- int use_layer_samples = get_enum(cscene, "use_layer_samples");
+ BL::Scene::view_layers_iterator b_view_layer;
bool first_layer = true;
uint layer_override = get_layer(b_engine.layer_override());
- uint scene_layers = layer_override ? layer_override : get_layer(b_scene.layers());
-
- for(r.layers.begin(b_rlay); b_rlay != r.layers.end(); ++b_rlay) {
- if((!layer && first_layer) || (layer && b_rlay->name() == layer)) {
- render_layer.name = b_rlay->name();
-
- render_layer.holdout_layer = get_layer(b_rlay->layers_zmask());
- render_layer.exclude_layer = get_layer(b_rlay->layers_exclude());
-
- render_layer.scene_layer = scene_layers & ~render_layer.exclude_layer;
- render_layer.scene_layer |= render_layer.exclude_layer & render_layer.holdout_layer;
-
- render_layer.layer = get_layer(b_rlay->layers());
- render_layer.layer |= render_layer.holdout_layer;
-
- render_layer.material_override = b_rlay->material_override();
- render_layer.use_background_shader = b_rlay->use_sky();
- render_layer.use_background_ao = b_rlay->use_ao();
- render_layer.use_surfaces = b_rlay->use_solid();
- render_layer.use_hair = b_rlay->use_strand();
- render_layer.use_viewport_visibility = false;
-
- render_layer.bound_samples = (use_layer_samples == 1);
- if(use_layer_samples != 2) {
- int samples = b_rlay->samples();
- if(get_boolean(cscene, "use_square_samples"))
- render_layer.samples = samples * samples;
- else
- render_layer.samples = samples;
- }
+ uint view_layers = layer_override ? layer_override : get_layer(b_scene.layers());
+
+ for(b_scene.view_layers.begin(b_view_layer); b_view_layer != b_scene.view_layers.end(); ++b_view_layer) {
+ if((!layer && first_layer) || (layer && b_view_layer->name() == layer)) {
+ view_layer.name = b_view_layer->name();
+
+ view_layer.holdout_layer = 0;
+ view_layer.exclude_layer = 0;
+
+ view_layer.view_layer = view_layers & ~view_layer.exclude_layer;
+ view_layer.view_layer |= view_layer.exclude_layer & view_layer.holdout_layer;
+
+ view_layer.layer = (1 << 20) - 1;
+ view_layer.layer |= view_layer.holdout_layer;
+
+ view_layer.material_override = PointerRNA_NULL;
+ view_layer.use_background_shader = b_view_layer->use_sky();
+ view_layer.use_background_ao = b_view_layer->use_ao();
+ view_layer.use_surfaces = b_view_layer->use_solid();
+ view_layer.use_hair = b_view_layer->use_strand();
+
+ view_layer.bound_samples = false;
+ view_layer.samples = 0;
}
first_layer = false;
@@ -547,7 +522,7 @@ int BlenderSync::get_denoising_pass(BL::RenderPass& b_pass)
}
array<Pass> BlenderSync::sync_render_passes(BL::RenderLayer& b_rlay,
- BL::SceneRenderLayer& b_srlay,
+ BL::ViewLayer& b_view_layer,
const SessionParams &session_params)
{
array<Pass> passes;
@@ -570,49 +545,49 @@ array<Pass> BlenderSync::sync_render_passes(BL::RenderLayer& b_rlay,
Pass::add(pass_type, passes);
}
- PointerRNA crp = RNA_pointer_get(&b_srlay.ptr, "cycles");
+ PointerRNA crp = RNA_pointer_get(&b_view_layer.ptr, "cycles");
if(get_boolean(crp, "denoising_store_passes") &&
get_boolean(crp, "use_denoising"))
{
- b_engine.add_pass("Denoising Normal", 3, "XYZ", b_srlay.name().c_str());
- b_engine.add_pass("Denoising Normal Variance", 3, "XYZ", b_srlay.name().c_str());
- b_engine.add_pass("Denoising Albedo", 3, "RGB", b_srlay.name().c_str());
- b_engine.add_pass("Denoising Albedo Variance", 3, "RGB", b_srlay.name().c_str());
- b_engine.add_pass("Denoising Depth", 1, "Z", b_srlay.name().c_str());
- b_engine.add_pass("Denoising Depth Variance", 1, "Z", b_srlay.name().c_str());
- b_engine.add_pass("Denoising Shadow A", 3, "XYV", b_srlay.name().c_str());
- b_engine.add_pass("Denoising Shadow B", 3, "XYV", b_srlay.name().c_str());
- b_engine.add_pass("Denoising Image", 3, "RGB", b_srlay.name().c_str());
- b_engine.add_pass("Denoising Image Variance", 3, "RGB", b_srlay.name().c_str());
+ b_engine.add_pass("Denoising Normal", 3, "XYZ", b_view_layer.name().c_str());
+ b_engine.add_pass("Denoising Normal Variance", 3, "XYZ", b_view_layer.name().c_str());
+ b_engine.add_pass("Denoising Albedo", 3, "RGB", b_view_layer.name().c_str());
+ b_engine.add_pass("Denoising Albedo Variance", 3, "RGB", b_view_layer.name().c_str());
+ b_engine.add_pass("Denoising Depth", 1, "Z", b_view_layer.name().c_str());
+ b_engine.add_pass("Denoising Depth Variance", 1, "Z", b_view_layer.name().c_str());
+ b_engine.add_pass("Denoising Shadow A", 3, "XYV", b_view_layer.name().c_str());
+ b_engine.add_pass("Denoising Shadow B", 3, "XYV", b_view_layer.name().c_str());
+ b_engine.add_pass("Denoising Image", 3, "RGB", b_view_layer.name().c_str());
+ b_engine.add_pass("Denoising Image Variance", 3, "RGB", b_view_layer.name().c_str());
}
#ifdef __KERNEL_DEBUG__
if(get_boolean(crp, "pass_debug_bvh_traversed_nodes")) {
- b_engine.add_pass("Debug BVH Traversed Nodes", 1, "X", b_srlay.name().c_str());
+ b_engine.add_pass("Debug BVH Traversed Nodes", 1, "X", b_view_layer.name().c_str());
Pass::add(PASS_BVH_TRAVERSED_NODES, passes);
}
if(get_boolean(crp, "pass_debug_bvh_traversed_instances")) {
- b_engine.add_pass("Debug BVH Traversed Instances", 1, "X", b_srlay.name().c_str());
+ b_engine.add_pass("Debug BVH Traversed Instances", 1, "X", b_view_layer.name().c_str());
Pass::add(PASS_BVH_TRAVERSED_INSTANCES, passes);
}
if(get_boolean(crp, "pass_debug_bvh_intersections")) {
- b_engine.add_pass("Debug BVH Intersections", 1, "X", b_srlay.name().c_str());
+ b_engine.add_pass("Debug BVH Intersections", 1, "X", b_view_layer.name().c_str());
Pass::add(PASS_BVH_INTERSECTIONS, passes);
}
if(get_boolean(crp, "pass_debug_ray_bounces")) {
- b_engine.add_pass("Debug Ray Bounces", 1, "X", b_srlay.name().c_str());
+ b_engine.add_pass("Debug Ray Bounces", 1, "X", b_view_layer.name().c_str());
Pass::add(PASS_RAY_BOUNCES, passes);
}
#endif
if(get_boolean(crp, "pass_debug_render_time")) {
- b_engine.add_pass("Debug Render Time", 1, "X", b_srlay.name().c_str());
+ b_engine.add_pass("Debug Render Time", 1, "X", b_view_layer.name().c_str());
Pass::add(PASS_RENDER_TIME, passes);
}
if(get_boolean(crp, "use_pass_volume_direct")) {
- b_engine.add_pass("VolumeDir", 3, "RGB", b_srlay.name().c_str());
+ b_engine.add_pass("VolumeDir", 3, "RGB", b_view_layer.name().c_str());
Pass::add(PASS_VOLUME_DIRECT, passes);
}
if(get_boolean(crp, "use_pass_volume_indirect")) {
- b_engine.add_pass("VolumeInd", 3, "RGB", b_srlay.name().c_str());
+ b_engine.add_pass("VolumeInd", 3, "RGB", b_view_layer.name().c_str());
Pass::add(PASS_VOLUME_INDIRECT, passes);
}
@@ -841,9 +816,9 @@ SessionParams BlenderSync::get_session_params(BL::RenderEngine& b_engine,
!b_r.use_save_buffers();
if(params.progressive_refine) {
- BL::RenderSettings::layers_iterator b_rlay;
- for(b_r.layers.begin(b_rlay); b_rlay != b_r.layers.end(); ++b_rlay) {
- PointerRNA crl = RNA_pointer_get(&b_rlay->ptr, "cycles");
+ BL::Scene::view_layers_iterator b_view_layer;
+ for(b_scene.view_layers.begin(b_view_layer); b_view_layer != b_scene.view_layers.end(); ++b_view_layer) {
+ PointerRNA crl = RNA_pointer_get(&b_view_layer->ptr, "cycles");
if(get_boolean(crl, "use_denoising")) {
params.progressive_refine = false;
}
@@ -871,17 +846,8 @@ SessionParams BlenderSync::get_session_params(BL::RenderEngine& b_engine,
params.shadingsystem = SHADINGSYSTEM_OSL;
/* color managagement */
-#ifdef GLEW_MX
- /* When using GLEW MX we need to check whether we've got an OpenGL
- * context for current window. This is because command line rendering
- * doesn't have OpenGL context actually.
- */
- if(glewGetContext() != NULL)
-#endif
- {
- params.display_buffer_linear = GLEW_ARB_half_float_pixel &&
- b_engine.support_display_space_shader(b_scene);
- }
+ params.display_buffer_linear = GLEW_ARB_half_float_pixel &&
+ b_engine.support_display_space_shader(b_scene);
if(b_engine.is_preview()) {
/* For preview rendering we're using same timeout as
diff --git a/intern/cycles/blender/blender_sync.h b/intern/cycles/blender/blender_sync.h
index e7b71ae9310..c4dd17714be 100644
--- a/intern/cycles/blender/blender_sync.h
+++ b/intern/cycles/blender/blender_sync.h
@@ -43,6 +43,7 @@ class Mesh;
class Object;
class ParticleSystem;
class Scene;
+class ViewLayer;
class Shader;
class ShaderGraph;
class ShaderNode;
@@ -51,6 +52,7 @@ class BlenderSync {
public:
BlenderSync(BL::RenderEngine& b_engine,
BL::BlendData& b_data,
+ BL::Depsgraph& b_graph,
BL::Scene& b_scene,
Scene *scene,
bool preview,
@@ -65,9 +67,9 @@ public:
int width, int height,
void **python_thread_state,
const char *layer = 0);
- void sync_render_layers(BL::SpaceView3D& b_v3d, const char *layer);
- array<Pass> sync_render_passes(BL::RenderLayer& b_rlay,
- BL::SceneRenderLayer& b_srlay,
+ void sync_view_layers(BL::SpaceView3D& b_v3d, const char *layer);
+ array<Pass> sync_render_passes(BL::RenderLayer& b_render_layer,
+ BL::ViewLayer& b_view_layer,
const SessionParams &session_params);
void sync_integrator();
void sync_camera(BL::RenderSettings& b_render,
@@ -77,8 +79,8 @@ public:
void sync_view(BL::SpaceView3D& b_v3d,
BL::RegionView3D& b_rv3d,
int width, int height);
- inline int get_layer_samples() { return render_layer.samples; }
- inline int get_layer_bound_samples() { return render_layer.bound_samples; }
+ inline int get_layer_samples() { return view_layer.samples; }
+ inline int get_layer_bound_samples() { return view_layer.bound_samples; }
/* get parameters */
static SceneParams get_scene_params(BL::Scene& b_scene,
@@ -113,16 +115,16 @@ private:
void sync_curve_settings();
void sync_nodes(Shader *shader, BL::ShaderNodeTree& b_ntree);
- Mesh *sync_mesh(BL::Object& b_ob, bool object_updated, bool hide_tris);
+ Mesh *sync_mesh(BL::Object& b_ob,
+ BL::Object& b_ob_instance,
+ bool object_updated,
+ bool hide_tris);
void sync_curves(Mesh *mesh,
BL::Mesh& b_mesh,
BL::Object& b_ob,
bool motion,
int time_index = 0);
- Object *sync_object(BL::Object& b_parent,
- int persistent_id[OBJECT_PERSISTENT_ID_SIZE],
- BL::DupliObject& b_dupli_ob,
- Transform& tfm,
+ Object *sync_object(BL::Depsgraph::duplis_iterator& b_dupli_iter,
uint layer_flag,
float motion_time,
bool hide_tris,
@@ -131,7 +133,8 @@ private:
void sync_light(BL::Object& b_parent,
int persistent_id[OBJECT_PERSISTENT_ID_SIZE],
BL::Object& b_ob,
- BL::DupliObject& b_dupli_ob,
+ BL::Object& b_ob_instance,
+ int random_id,
Transform& tfm,
bool *use_portal);
void sync_background_light(bool use_portal);
@@ -160,7 +163,9 @@ private:
/* variables */
BL::RenderEngine b_engine;
BL::BlendData b_data;
+ BL::Depsgraph b_depsgraph;
BL::Scene b_scene;
+ BL::ViewLayer b_view_layer;
id_map<void*, Shader> shader_map;
id_map<ObjectKey, Object> object_map;
@@ -182,31 +187,29 @@ private:
struct RenderLayerInfo {
RenderLayerInfo()
- : scene_layer(0), layer(0),
+ : view_layer(0), layer(0),
holdout_layer(0), exclude_layer(0),
material_override(PointerRNA_NULL),
use_background_shader(true),
use_background_ao(true),
use_surfaces(true),
use_hair(true),
- use_viewport_visibility(false),
samples(0), bound_samples(false)
{}
string name;
- uint scene_layer;
- uint layer;
- uint holdout_layer;
- uint exclude_layer;
- BL::Material material_override;
+ uint view_layer;
+ uint layer; /* This can be safely removed from Cycles. */
+ uint holdout_layer; /* This can be safely removed from Cycles. */
+ uint exclude_layer; /* This can be safely removed from Cycles. */
+ BL::Material material_override; /* This can be safely removed from Cycles. */
bool use_background_shader;
bool use_background_ao;
bool use_surfaces;
bool use_hair;
- bool use_viewport_visibility;
- int samples;
- bool bound_samples;
- } render_layer;
+ int samples; /* This can be safely removed from Cycles. */
+ bool bound_samples; /* This can be safely removed from Cycles. */
+ } view_layer;
Progress &progress;
};
diff --git a/intern/cycles/blender/blender_texture.cpp b/intern/cycles/blender/blender_texture.cpp
index b2e27b76189..3b06fb720de 100644
--- a/intern/cycles/blender/blender_texture.cpp
+++ b/intern/cycles/blender/blender_texture.cpp
@@ -34,7 +34,7 @@ void density_texture_space_invert(float3& loc,
} /* namespace */
-void point_density_texture_space(BL::Scene& b_scene,
+void point_density_texture_space(BL::Scene& b_scene, BL::ViewLayer& b_view_layer,
BL::ShaderNodeTexPointDensity& b_point_density_node,
int settings,
float3& loc,
@@ -48,6 +48,7 @@ void point_density_texture_space(BL::Scene& b_scene,
}
float3 min, max;
b_point_density_node.calc_point_density_minmax(b_scene,
+ b_view_layer,
settings,
&min[0],
&max[0]);
diff --git a/intern/cycles/blender/blender_texture.h b/intern/cycles/blender/blender_texture.h
index 734231a85ec..3d4b8739d49 100644
--- a/intern/cycles/blender/blender_texture.h
+++ b/intern/cycles/blender/blender_texture.h
@@ -22,7 +22,7 @@
CCL_NAMESPACE_BEGIN
-void point_density_texture_space(BL::Scene& b_scene,
+void point_density_texture_space(BL::Scene& b_scene, BL::ViewLayer& b_view_layer,
BL::ShaderNodeTexPointDensity& b_point_density_node,
const int settings,
float3& loc,
diff --git a/intern/cycles/blender/blender_util.h b/intern/cycles/blender/blender_util.h
index 363e19f7a20..a813a09f38a 100644
--- a/intern/cycles/blender/blender_util.h
+++ b/intern/cycles/blender/blender_util.h
@@ -46,6 +46,7 @@ void python_thread_state_restore(void **python_thread_state);
static inline BL::Mesh object_to_mesh(BL::BlendData& data,
BL::Object& object,
BL::Scene& scene,
+ BL::ViewLayer view_layer,
bool apply_modifiers,
bool render,
bool calc_undeformed,
@@ -64,7 +65,7 @@ static inline BL::Mesh object_to_mesh(BL::BlendData& data,
subsurf_mod.show_viewport(false);
}
- BL::Mesh me = data.meshes.new_from_object(scene, object, apply_modifiers, (render)? 2: 1, false, calc_undeformed);
+ BL::Mesh me = data.meshes.new_from_object(scene, view_layer, object, apply_modifiers, (render)? 2: 1, false, calc_undeformed);
if(subdivision_type != Mesh::SUBDIVISION_NONE) {
BL::Modifier subsurf_mod = object.modifiers[object.modifiers.length()-1];
@@ -306,7 +307,7 @@ static inline uint get_layer(const BL::Array<int, 20>& array)
static inline uint get_layer(const BL::Array<int, 20>& array,
const BL::Array<int, 8>& local_array,
bool is_light = false,
- uint scene_layers = (1 << 20) - 1)
+ uint view_layers = (1 << 20) - 1)
{
uint layer = 0;
@@ -318,7 +319,7 @@ static inline uint get_layer(const BL::Array<int, 20>& array,
/* Consider light is visible if it was visible without layer
* override, which matches behavior of Blender Internal.
*/
- if(layer & scene_layers) {
+ if(layer & view_layers) {
for(uint i = 0; i < 8; i++)
layer |= (1 << (20+i));
}
diff --git a/intern/cycles/device/device.cpp b/intern/cycles/device/device.cpp
index 1ec0bc3e1c6..56649a7e363 100644
--- a/intern/cycles/device/device.cpp
+++ b/intern/cycles/device/device.cpp
@@ -78,132 +78,275 @@ std::ostream& operator <<(std::ostream &os,
Device::~Device()
{
- if(!background && vertex_buffer != 0) {
- glDeleteBuffers(1, &vertex_buffer);
+ if(!background) {
+ if(vertex_buffer != 0) {
+ glDeleteBuffers(1, &vertex_buffer);
+ }
+ if(fallback_shader_program != 0) {
+ glDeleteProgram(fallback_shader_program);
+ }
}
}
-void Device::draw_pixels(device_memory& rgba, int y, int w, int h, int dx, int dy, int width, int height, bool transparent,
- const DeviceDrawParams &draw_params)
+/* TODO move shaders to standalone .glsl file. */
+const char *FALLBACK_VERTEX_SHADER =
+"#version 330\n"
+"uniform vec2 fullscreen;\n"
+"in vec2 texCoord;\n"
+"in vec2 pos;\n"
+"out vec2 texCoord_interp;\n"
+"\n"
+"vec2 normalize_coordinates()\n"
+"{\n"
+" return (vec2(2.0) * (pos / fullscreen)) - vec2(1.0);\n"
+"}\n"
+"\n"
+"void main()\n"
+"{\n"
+" gl_Position = vec4(normalize_coordinates(), 0.0, 1.0);\n"
+" texCoord_interp = texCoord;\n"
+"}\n\0";
+
+const char *FALLBACK_FRAGMENT_SHADER =
+"#version 330\n"
+"uniform sampler2D image_texture;\n"
+"in vec2 texCoord_interp;\n"
+"out vec4 fragColor;\n"
+"\n"
+"void main()\n"
+"{\n"
+" fragColor = texture(image_texture, texCoord_interp);\n"
+"}\n\0";
+
+static void shader_print_errors(const char *task, const char *log, const char *code)
{
- assert(rgba.type == MEM_PIXELS);
+ LOG(ERROR) << "Shader: " << task << " error:";
+ LOG(ERROR) << "===== shader string ====";
- mem_copy_from(rgba, y, w, h, rgba.memory_elements_size(1));
+ stringstream stream(code);
+ string partial;
- if(transparent) {
- glEnable(GL_BLEND);
- glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
+ int line = 1;
+ while(getline(stream, partial, '\n')) {
+ if(line < 10) {
+ LOG(ERROR) << " " << line << " " << partial;
+ }
+ else {
+ LOG(ERROR) << line << " " << partial;
+ }
+ line++;
}
+ LOG(ERROR) << log;
+}
- glColor3f(1.0f, 1.0f, 1.0f);
+static int bind_fallback_shader(void)
+{
+ GLint status;
+ GLchar log[5000];
+ GLsizei length = 0;
+ GLuint program = 0;
- if(rgba.data_type == TYPE_HALF) {
- /* for multi devices, this assumes the inefficient method that we allocate
- * all pixels on the device even though we only render to a subset */
- GLhalf *host_pointer = (GLhalf*)rgba.host_pointer;
- float vbuffer[16], *basep;
- float *vp = NULL;
-
- host_pointer += 4*y*w;
-
- /* draw half float texture, GLSL shader for display transform assumed to be bound */
- GLuint texid;
- glGenTextures(1, &texid);
- glBindTexture(GL_TEXTURE_2D, texid);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F_ARB, w, h, 0, GL_RGBA, GL_HALF_FLOAT, host_pointer);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
-
- glEnable(GL_TEXTURE_2D);
-
- if(draw_params.bind_display_space_shader_cb) {
- draw_params.bind_display_space_shader_cb();
+ struct Shader {
+ const char *source;
+ GLenum type;
+ } shaders[2] = {
+ {FALLBACK_VERTEX_SHADER, GL_VERTEX_SHADER},
+ {FALLBACK_FRAGMENT_SHADER, GL_FRAGMENT_SHADER}
+ };
+
+ program = glCreateProgram();
+
+ for(int i = 0; i < 2; i++) {
+ GLuint shader = glCreateShader(shaders[i].type);
+
+ string source_str = shaders[i].source;
+ const char *c_str = source_str.c_str();
+
+ glShaderSource(shader, 1, &c_str, NULL);
+ glCompileShader(shader);
+
+ glGetShaderiv(shader, GL_COMPILE_STATUS, &status);
+
+ if(!status) {
+ glGetShaderInfoLog(shader, sizeof(log), &length, log);
+ shader_print_errors("compile", log, c_str);
+ return 0;
}
- if(GLEW_VERSION_1_5) {
- if(!vertex_buffer)
- glGenBuffers(1, &vertex_buffer);
+ glAttachShader(program, shader);
+ }
+
+ /* Link output. */
+ glBindFragDataLocation(program, 0, "fragColor");
- glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);
- /* invalidate old contents - avoids stalling if buffer is still waiting in queue to be rendered */
- glBufferData(GL_ARRAY_BUFFER, 16 * sizeof(float), NULL, GL_STREAM_DRAW);
+ /* Link and error check. */
+ glLinkProgram(program);
+
+ glGetProgramiv(program, GL_LINK_STATUS, &status);
+ if(!status) {
+ glGetShaderInfoLog(program, sizeof(log), &length, log);
+ shader_print_errors("linking", log, FALLBACK_VERTEX_SHADER);
+ shader_print_errors("linking", log, FALLBACK_FRAGMENT_SHADER);
+ return 0;
+ }
+
+ return program;
+}
+
+bool Device::bind_fallback_display_space_shader(const float width, const float height)
+{
+ if(fallback_status == FALLBACK_SHADER_STATUS_ERROR) {
+ return false;
+ }
- vp = (float *)glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
+ if(fallback_status == FALLBACK_SHADER_STATUS_NONE) {
+ fallback_shader_program = bind_fallback_shader();
+ fallback_status = FALLBACK_SHADER_STATUS_ERROR;
- basep = NULL;
+ if (fallback_shader_program == 0) {
+ return false;
}
- else {
- basep = vbuffer;
- vp = vbuffer;
+
+ glUseProgram(fallback_shader_program);
+ image_texture_location = glGetUniformLocation(fallback_shader_program, "image_texture");
+ if(image_texture_location < 0) {
+ LOG(ERROR) << "Shader doesn't containt the 'image_texture' uniform.";
+ return false;
}
- if(vp) {
- /* texture coordinate - vertex pair */
- vp[0] = 0.0f;
- vp[1] = 0.0f;
- vp[2] = dx;
- vp[3] = dy;
-
- vp[4] = 1.0f;
- vp[5] = 0.0f;
- vp[6] = (float)width + dx;
- vp[7] = dy;
-
- vp[8] = 1.0f;
- vp[9] = 1.0f;
- vp[10] = (float)width + dx;
- vp[11] = (float)height + dy;
-
- vp[12] = 0.0f;
- vp[13] = 1.0f;
- vp[14] = dx;
- vp[15] = (float)height + dy;
-
- if(vertex_buffer)
- glUnmapBuffer(GL_ARRAY_BUFFER);
+ fullscreen_location = glGetUniformLocation(fallback_shader_program, "fullscreen");
+ if(fullscreen_location < 0) {
+ LOG(ERROR) << "Shader doesn't containt the 'fullscreen' uniform.";
+ return false;
}
- glTexCoordPointer(2, GL_FLOAT, 4 * sizeof(float), basep);
- glVertexPointer(2, GL_FLOAT, 4 * sizeof(float), ((char *)basep) + 2 * sizeof(float));
+ fallback_status = FALLBACK_SHADER_STATUS_SUCCESS;
+ }
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_TEXTURE_COORD_ARRAY);
+ /* Run this every time. */
+ glUseProgram(fallback_shader_program);
+ glUniform1i(image_texture_location, 0);
+ glUniform2f(fullscreen_location, width, height);
+ return true;
+}
- glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
+void Device::draw_pixels(
+ device_memory& rgba, int y,
+ int w, int h, int width, int height,
+ int dx, int dy, int dw, int dh,
+ bool transparent, const DeviceDrawParams &draw_params)
+{
+ const bool use_fallback_shader = (draw_params.bind_display_space_shader_cb == NULL);
- glDisableClientState(GL_TEXTURE_COORD_ARRAY);
- glDisableClientState(GL_VERTEX_ARRAY);
+ assert(rgba.type == MEM_PIXELS);
+ mem_copy_from(rgba, y, w, h, rgba.memory_elements_size(1));
- if(vertex_buffer) {
- glBindBuffer(GL_ARRAY_BUFFER, 0);
- }
+ GLuint texid;
+ glGenTextures(1, &texid);
+ glBindTexture(GL_TEXTURE_2D, texid);
- if(draw_params.unbind_display_space_shader_cb) {
- draw_params.unbind_display_space_shader_cb();
- }
+ if(rgba.data_type == TYPE_HALF) {
+ GLhalf *data_pointer = (GLhalf*)rgba.host_pointer;
+ data_pointer += 4 * y * w;
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F_ARB, w, h, 0, GL_RGBA, GL_HALF_FLOAT, data_pointer);
+ }
+ else {
+ uint8_t *data_pointer = (uint8_t*)rgba.host_pointer;
+ data_pointer += 4 * y * w;
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, data_pointer);
+ }
+
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+
+ if(transparent) {
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
+ }
- glBindTexture(GL_TEXTURE_2D, 0);
- glDisable(GL_TEXTURE_2D);
- glDeleteTextures(1, &texid);
+ GLint shader_program;
+ if(use_fallback_shader) {
+ if (!bind_fallback_display_space_shader(dw, dh)) {
+ return;
+ }
+ shader_program = fallback_shader_program;
}
else {
- /* fallback for old graphics cards that don't support GLSL, half float,
- * and non-power-of-two textures */
- glPixelZoom((float)width/(float)w, (float)height/(float)h);
- glRasterPos2f(dx, dy);
+ draw_params.bind_display_space_shader_cb();
+ glGetIntegerv(GL_CURRENT_PROGRAM, &shader_program);
+ }
+
+ if(!vertex_buffer) {
+ glGenBuffers(1, &vertex_buffer);
+ }
+
+ glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);
+ /* invalidate old contents - avoids stalling if buffer is still waiting in queue to be rendered */
+ glBufferData(GL_ARRAY_BUFFER, 16 * sizeof(float), NULL, GL_STREAM_DRAW);
+
+ float *vpointer = (float *)glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
- uint8_t *pixels = (uint8_t*)rgba.host_pointer;
+ if(vpointer) {
+ /* texture coordinate - vertex pair */
+ vpointer[0] = 0.0f;
+ vpointer[1] = 0.0f;
+ vpointer[2] = dx;
+ vpointer[3] = dy;
- pixels += 4*y*w;
+ vpointer[4] = 1.0f;
+ vpointer[5] = 0.0f;
+ vpointer[6] = (float)width + dx;
+ vpointer[7] = dy;
- glDrawPixels(w, h, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
+ vpointer[8] = 1.0f;
+ vpointer[9] = 1.0f;
+ vpointer[10] = (float)width + dx;
+ vpointer[11] = (float)height + dy;
- glRasterPos2f(0.0f, 0.0f);
- glPixelZoom(1.0f, 1.0f);
+ vpointer[12] = 0.0f;
+ vpointer[13] = 1.0f;
+ vpointer[14] = dx;
+ vpointer[15] = (float)height + dy;
+
+ if(vertex_buffer) {
+ glUnmapBuffer(GL_ARRAY_BUFFER);
+ }
+ }
+
+ GLuint vertex_array_object;
+ GLuint position_attribute, texcoord_attribute;
+
+ glGenVertexArrays(1, &vertex_array_object);
+ glBindVertexArray(vertex_array_object);
+
+ texcoord_attribute = glGetAttribLocation(shader_program, "texCoord");
+ position_attribute = glGetAttribLocation(shader_program, "pos");
+
+ glEnableVertexAttribArray(texcoord_attribute);
+ glEnableVertexAttribArray(position_attribute);
+
+ glVertexAttribPointer(texcoord_attribute, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (const GLvoid *)0);
+ glVertexAttribPointer(position_attribute, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (const GLvoid *)(sizeof(float) * 2));
+
+ glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
+
+ if(vertex_buffer) {
+ glBindBuffer(GL_ARRAY_BUFFER, 0);
}
- if(transparent)
+ if(use_fallback_shader) {
+ glUseProgram(0);
+ }
+ else {
+ draw_params.unbind_display_space_shader_cb();
+ }
+
+ glBindTexture(GL_TEXTURE_2D, 0);
+ glDeleteTextures(1, &texid);
+
+ if(transparent) {
glDisable(GL_BLEND);
+ }
}
Device *Device::create(DeviceInfo& info, Stats &stats, bool background)
diff --git a/intern/cycles/device/device.h b/intern/cycles/device/device.h
index 555fd5ec2d2..be4b9a7e972 100644
--- a/intern/cycles/device/device.h
+++ b/intern/cycles/device/device.h
@@ -251,13 +251,26 @@ struct DeviceDrawParams {
class Device {
friend class device_sub_ptr;
protected:
- Device(DeviceInfo& info_, Stats &stats_, bool background) : background(background), vertex_buffer(0), info(info_), stats(stats_) {}
+ enum {
+ FALLBACK_SHADER_STATUS_NONE = 0,
+ FALLBACK_SHADER_STATUS_ERROR,
+ FALLBACK_SHADER_STATUS_SUCCESS,
+ };
+
+ Device(DeviceInfo& info_, Stats &stats_, bool background) : background(background),
+ vertex_buffer(0),
+ fallback_status(FALLBACK_SHADER_STATUS_NONE), fallback_shader_program(0),
+ info(info_), stats(stats_) {}
bool background;
string error_msg;
/* used for real time display */
unsigned int vertex_buffer;
+ int fallback_status, fallback_shader_program;
+ int image_texture_location, fullscreen_location;
+
+ bool bind_fallback_display_space_shader(const float width, const float height);
virtual device_ptr mem_alloc_sub_ptr(device_memory& /*mem*/, int /*offset*/, int /*size*/)
{
@@ -308,9 +321,10 @@ public:
virtual void task_cancel() = 0;
/* opengl drawing */
- virtual void draw_pixels(device_memory& mem, int y, int w, int h,
- int dx, int dy, int width, int height, bool transparent,
- const DeviceDrawParams &draw_params);
+ virtual void draw_pixels(device_memory& mem, int y,
+ int w, int h, int width, int height,
+ int dx, int dy, int dw, int dh,
+ bool transparent, const DeviceDrawParams &draw_params);
#ifdef WITH_NETWORK
/* networking */
diff --git a/intern/cycles/device/device_cuda.cpp b/intern/cycles/device/device_cuda.cpp
index dfedf922ca9..64295838f0c 100644
--- a/intern/cycles/device/device_cuda.cpp
+++ b/intern/cycles/device/device_cuda.cpp
@@ -2008,12 +2008,16 @@ public:
}
}
- void draw_pixels(device_memory& mem, int y, int w, int h, int dx, int dy, int width, int height, bool transparent,
+ void draw_pixels(
+ device_memory& mem, int y,
+ int w, int h, int width, int height,
+ int dx, int dy, int dw, int dh, bool transparent,
const DeviceDrawParams &draw_params)
{
assert(mem.type == MEM_PIXELS);
if(!background) {
+ const bool use_fallback_shader = (draw_params.bind_display_space_shader_cb == NULL);
PixelMem pmem = pixel_mem_map[mem.device_pointer];
float *vpointer;
@@ -2030,27 +2034,34 @@ public:
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, pmem.cuPBO);
glBindTexture(GL_TEXTURE_2D, pmem.cuTexId);
- if(mem.data_type == TYPE_HALF)
+ if(mem.data_type == TYPE_HALF) {
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, w, h, GL_RGBA, GL_HALF_FLOAT, (void*)offset);
- else
+ }
+ else {
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, (void*)offset);
+ }
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
- glEnable(GL_TEXTURE_2D);
-
if(transparent) {
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
}
- glColor3f(1.0f, 1.0f, 1.0f);
-
- if(draw_params.bind_display_space_shader_cb) {
+ GLint shader_program;
+ if(use_fallback_shader) {
+ if(!bind_fallback_display_space_shader(dw, dh)) {
+ return;
+ }
+ shader_program = fallback_shader_program;
+ }
+ else {
draw_params.bind_display_space_shader_cb();
+ glGetIntegerv(GL_CURRENT_PROGRAM, &shader_program);
}
- if(!vertex_buffer)
+ if(!vertex_buffer) {
glGenBuffers(1, &vertex_buffer);
+ }
glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);
/* invalidate old contents - avoids stalling if buffer is still waiting in queue to be rendered */
@@ -2083,33 +2094,40 @@ public:
glUnmapBuffer(GL_ARRAY_BUFFER);
}
- glTexCoordPointer(2, GL_FLOAT, 4 * sizeof(float), 0);
- glVertexPointer(2, GL_FLOAT, 4 * sizeof(float), (char *)NULL + 2 * sizeof(float));
+ GLuint vertex_array_object;
+ GLuint position_attribute, texcoord_attribute;
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_TEXTURE_COORD_ARRAY);
+ glGenVertexArrays(1, &vertex_array_object);
+ glBindVertexArray(vertex_array_object);
- glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
+ texcoord_attribute = glGetAttribLocation(shader_program, "texCoord");
+ position_attribute = glGetAttribLocation(shader_program, "pos");
- glDisableClientState(GL_TEXTURE_COORD_ARRAY);
- glDisableClientState(GL_VERTEX_ARRAY);
+ glEnableVertexAttribArray(texcoord_attribute);
+ glEnableVertexAttribArray(position_attribute);
- glBindBuffer(GL_ARRAY_BUFFER, 0);
+ glVertexAttribPointer(texcoord_attribute, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (const GLvoid *)0);
+ glVertexAttribPointer(position_attribute, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (const GLvoid *)(sizeof(float) * 2));
+
+ glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
- if(draw_params.unbind_display_space_shader_cb) {
+ if(use_fallback_shader) {
+ glUseProgram(0);
+ }
+ else {
draw_params.unbind_display_space_shader_cb();
}
- if(transparent)
+ if(transparent) {
glDisable(GL_BLEND);
+ }
glBindTexture(GL_TEXTURE_2D, 0);
- glDisable(GL_TEXTURE_2D);
return;
}
- Device::draw_pixels(mem, y, w, h, dx, dy, width, height, transparent, draw_params);
+ Device::draw_pixels(mem, y, w, h, width, height, dx, dy, dw, dh, transparent, draw_params);
}
void thread_run(DeviceTask *task)
diff --git a/intern/cycles/device/device_multi.cpp b/intern/cycles/device/device_multi.cpp
index 3a4c08b6eb2..91507e6be0c 100644
--- a/intern/cycles/device/device_multi.cpp
+++ b/intern/cycles/device/device_multi.cpp
@@ -216,8 +216,11 @@ public:
sub.device->const_copy_to(name, host, size);
}
- void draw_pixels(device_memory& rgba, int y, int w, int h, int dx, int dy, int width, int height, bool transparent,
- const DeviceDrawParams &draw_params)
+ void draw_pixels(
+ device_memory& rgba, int y,
+ int w, int h, int width, int height,
+ int dx, int dy, int dw, int dh,
+ bool transparent, const DeviceDrawParams &draw_params)
{
device_ptr key = rgba.device_pointer;
int i = 0, sub_h = h/devices.size();
@@ -231,7 +234,7 @@ public:
/* adjust math for w/width */
rgba.device_pointer = sub.ptr_map[key];
- sub.device->draw_pixels(rgba, sy, w, sh, dx, sdy, width, sheight, transparent, draw_params);
+ sub.device->draw_pixels(rgba, sy, w, sh, width, sheight, dx, sdy, dw, dh, transparent, draw_params);
i++;
}
diff --git a/intern/cycles/render/buffers.cpp b/intern/cycles/render/buffers.cpp
index 84d10cc477e..e4931a6317c 100644
--- a/intern/cycles/render/buffers.cpp
+++ b/intern/cycles/render/buffers.cpp
@@ -439,7 +439,11 @@ void DisplayBuffer::draw(Device *device, const DeviceDrawParams& draw_params)
device_memory& rgba = (half_float)? (device_memory&)rgba_half:
(device_memory&)rgba_byte;
- device->draw_pixels(rgba, 0, draw_width, draw_height, params.full_x, params.full_y, params.width, params.height, transparent, draw_params);
+ device->draw_pixels(
+ rgba, 0,
+ draw_width, draw_height, params.width, params.height,
+ params.full_x, params.full_y, params.full_width, params.full_height,
+ transparent, draw_params);
}
}
diff --git a/intern/cycles/util/util_opengl.h b/intern/cycles/util/util_opengl.h
index 0b5462e0a09..7a8d5eec1f9 100644
--- a/intern/cycles/util/util_opengl.h
+++ b/intern/cycles/util/util_opengl.h
@@ -20,12 +20,6 @@
/* OpenGL header includes, used everywhere we use OpenGL, to deal with
* platform differences in one central place. */
-#ifdef WITH_GLEW_MX
-# include "glew-mx.h"
-#else
-# include <GL/glew.h>
-# define mxCreateContext() glewInit()
-# define mxMakeCurrentContext(x) (x)
-#endif
+#include <GL/glew.h>
#endif /* __UTIL_OPENGL_H__ */
diff --git a/intern/cycles/util/util_view.cpp b/intern/cycles/util/util_view.cpp
index 10d86167921..7b453d123b8 100644
--- a/intern/cycles/util/util_view.cpp
+++ b/intern/cycles/util/util_view.cpp
@@ -252,7 +252,7 @@ void view_main_loop(const char *title, int width, int height,
glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow(title);
- mxMakeCurrentContext(mxCreateContext());
+ glewInit();
view_reshape(width, height);
diff --git a/intern/elbeem/intern/solver_control.cpp b/intern/elbeem/intern/solver_control.cpp
index c3015b82f0a..d7ed1a5a7ef 100644
--- a/intern/elbeem/intern/solver_control.cpp
+++ b/intern/elbeem/intern/solver_control.cpp
@@ -873,156 +873,4 @@ LbmFsgrSolver::handleCpdata()
// warning, may return before
}
-#if LBM_USE_GUI==1
-
-#define USE_GLUTILITIES
-#include "../gui/gui_utilities.h"
-
-void LbmFsgrSolver::cpDebugDisplay(int dispset)
-{
- for(int cpssi=0; cpssi<(int)mpControl->mCons.size(); cpssi++) {
- ControlParticles *cparts = mpControl->mCons[cpssi]->mCparts;
- //ControlParticles *cpmotion = mpControl->mCons[cpssi]->mCpmotion;
- // display cp parts
- const bool cpCubes = false;
- const bool cpDots = true;
- const bool cpCpdist = true;
- const bool cpHideIna = true;
- glShadeModel(GL_FLAT);
- glDisable( GL_LIGHTING ); // dont light lines
-
- // dot influence
- if((mpControl->mDebugCpscale>0.) && cpDots) {
- glPointSize(mpControl->mDebugCpscale * 8.);
- glBegin(GL_POINTS);
- for(int i=0; i<cparts->getSize(); i++) {
- if((cpHideIna)&&( (cparts->getParticle(i)->influence<=0.) || (cparts->getParticle(i)->size<=0.) )) continue;
- ntlVec3Gfx org( vec2G(cparts->getParticle(i)->pos ) );
- //LbmFloat halfsize = 0.5;
- LbmFloat scale = cparts->getParticle(i)->densityWeight;
- //glColor4f( scale,scale,scale,scale );
- glColor4f( 0.,scale,0.,scale );
- glVertex3f( org[0],org[1],org[2] );
- //errMsg("lbmDebugDisplay","CP "<<i<<" at "<<org); // DEBUG
- }
- glEnd();
- }
-
- // cp positions
- if((mpControl->mDebugCpscale>0.) && cpDots) {
- glPointSize(mpControl->mDebugCpscale * 3.);
- glBegin(GL_POINTS);
- glColor3f( 0,1,0 );
- }
- for(int i=0; i<cparts->getSize(); i++) {
- if((cpHideIna)&&( (cparts->getParticle(i)->influence<=0.) || (cparts->getParticle(i)->size<=0.) )) continue;
- ntlVec3Gfx org( vec2G(cparts->getParticle(i)->pos ) );
- LbmFloat halfsize = 0.5;
- LbmFloat scale = cparts->getRadiusAtt() * cparts->getParticle(i)->densityWeight;
- if(cpCubes){ glLineWidth( 1 );
- glColor3f( 1,1,1 );
- ntlVec3Gfx s = org-(halfsize * (scale));
- ntlVec3Gfx e = org+(halfsize * (scale));
- drawCubeWire( s,e ); }
- if((mpControl->mDebugCpscale>0.) && cpDots) {
- glVertex3f( org[0],org[1],org[2] );
- }
- }
- if(cpDots) glEnd();
-
- if(mpControl->mDebugAvgVelScale>0.) {
- const float scale = mpControl->mDebugAvgVelScale;
-
- glColor3f( 1.0,1.0,1 );
- glBegin(GL_LINES);
- for(int i=0; i<cparts->getSize(); i++) {
- if((cpHideIna)&&( (cparts->getParticle(i)->influence<=0.) || (cparts->getParticle(i)->size<=0.) )) continue;
- ntlVec3Gfx org( vec2G(cparts->getParticle(i)->pos ) );
-
- //errMsg("CPAVGVEL","i"<<i<<" pos"<<org<<" av"<<cparts->getParticle(i)->avgVel);// DEBUG
- float dx = cparts->getParticle(i)->avgVel[0];
- float dy = cparts->getParticle(i)->avgVel[1];
- float dz = cparts->getParticle(i)->avgVel[2];
- dx *= scale; dy *= scale; dz *= scale;
- glVertex3f( org[0],org[1],org[2] );
- glVertex3f( org[0]+dx,org[1]+dy,org[2]+dz );
- }
- glEnd();
- } // */
-
- if( (LBMDIM==2) && (cpCpdist) ) {
-
- // debug, for use of e.g. LBMGET_FORCE LbmControlData *mpControl = this;
-# define TESTGET_FORCE(lev,i,j,k) mpControl->mCpForces[lev][ ((k*mLevel[lev].lSizey)+j)*mLevel[lev].lSizex+i ]
-
- glBegin(GL_LINES);
- //const int lev=0;
- for(int lev=0; lev<=mMaxRefine; lev++) {
- FSGR_FORIJK_BOUNDS(lev) {
- LbmVec pos = LbmVec(
- ((mvGeoEnd[0]-mvGeoStart[0])/(LbmFloat)mLevel[lev].lSizex) * ((LbmFloat)i+0.5) + mvGeoStart[0],
- ((mvGeoEnd[1]-mvGeoStart[1])/(LbmFloat)mLevel[lev].lSizey) * ((LbmFloat)j+0.5) + mvGeoStart[1],
- ((mvGeoEnd[2]-mvGeoStart[2])/(LbmFloat)mLevel[lev].lSizez) * ((LbmFloat)k+0.5) + mvGeoStart[2] );
- if(LBMDIM==2) pos[2] = ((mvGeoEnd[2]-mvGeoStart[2])*0.5 + mvGeoStart[2]);
-
- if((mpControl->mDebugMaxdScale>0.) && (TESTGET_FORCE(lev,i,j,k).weightAtt<=0.) )
- if(TESTGET_FORCE(lev,i,j,k).maxDistance>=0.)
- if(TESTGET_FORCE(lev,i,j,k).maxDistance<CPF_MAXDINIT ) {
- const float scale = mpControl->mDebugMaxdScale*10001.;
- float dx = TESTGET_FORCE(lev,i,j,k).forceMaxd[0];
- float dy = TESTGET_FORCE(lev,i,j,k).forceMaxd[1];
- float dz = TESTGET_FORCE(lev,i,j,k).forceMaxd[2];
- dx *= scale; dy *= scale; dz *= scale;
- glColor3f( 0,1,0 );
- glVertex3f( pos[0],pos[1],pos[2] );
- glVertex3f( pos[0]+dx,pos[1]+dy,pos[2]+dz );
- } // */
- if((mpControl->mDebugAttScale>0.) && (TESTGET_FORCE(lev,i,j,k).weightAtt>0.)) {
- const float scale = mpControl->mDebugAttScale*100011.;
- float dx = TESTGET_FORCE(lev,i,j,k).forceAtt[0];
- float dy = TESTGET_FORCE(lev,i,j,k).forceAtt[1];
- float dz = TESTGET_FORCE(lev,i,j,k).forceAtt[2];
- dx *= scale; dy *= scale; dz *= scale;
- glColor3f( 1,0,0 );
- glVertex3f( pos[0],pos[1],pos[2] );
- glVertex3f( pos[0]+dx,pos[1]+dy,pos[2]+dz );
- } // */
- // why check maxDistance?
- if((mpControl->mDebugVelScale>0.) && (TESTGET_FORCE(lev,i,j,k).maxDistance+TESTGET_FORCE(lev,i,j,k).weightVel>0.)) {
- float scale = mpControl->mDebugVelScale*1.;
- float wvscale = TESTGET_FORCE(lev,i,j,k).weightVel;
- float dx = TESTGET_FORCE(lev,i,j,k).forceVel[0];
- float dy = TESTGET_FORCE(lev,i,j,k).forceVel[1];
- float dz = TESTGET_FORCE(lev,i,j,k).forceVel[2];
- scale *= wvscale;
- dx *= scale; dy *= scale; dz *= scale;
- glColor3f( 0.2,0.2,1 );
- glVertex3f( pos[0],pos[1],pos[2] );
- glVertex3f( pos[0]+dx,pos[1]+dy,pos[2]+dz );
- } // */
- if((mpControl->mDebugCompavScale>0.) && (TESTGET_FORCE(lev,i,j,k).compAvWeight>0.)) {
- const float scale = mpControl->mDebugCompavScale*1.;
- float dx = TESTGET_FORCE(lev,i,j,k).compAv[0];
- float dy = TESTGET_FORCE(lev,i,j,k).compAv[1];
- float dz = TESTGET_FORCE(lev,i,j,k).compAv[2];
- dx *= scale; dy *= scale; dz *= scale;
- glColor3f( 0.2,0.2,1 );
- glVertex3f( pos[0],pos[1],pos[2] );
- glVertex3f( pos[0]+dx,pos[1]+dy,pos[2]+dz );
- } // */
- } // att,maxd
- }
- glEnd();
- }
- } // cpssi
-
- //fprintf(stderr,"BLA\n");
- glEnable( GL_LIGHTING ); // dont light lines
- glShadeModel(GL_SMOOTH);
-}
-
-#else // LBM_USE_GUI==1
void LbmFsgrSolver::cpDebugDisplay(int dispset) { }
-#endif // LBM_USE_GUI==1
-
-
diff --git a/intern/elbeem/intern/solver_util.cpp b/intern/elbeem/intern/solver_util.cpp
index f0c7bce2b4e..4bcc3640d72 100644
--- a/intern/elbeem/intern/solver_util.cpp
+++ b/intern/elbeem/intern/solver_util.cpp
@@ -1677,223 +1677,6 @@ LbmFloat& LbmFsgrSolver::debRAC(LbmFloat* s,int l) {
* GUI&debugging functions
*****************************************************************************/
-
-#if LBM_USE_GUI==1
-#define USE_GLUTILITIES
-#include "../gui/gui_utilities.h"
-
-//! display a single node
-void LbmFsgrSolver::debugDisplayNode(int dispset, CellIdentifierInterface* cell ) {
- //debugOut(" DD: "<<cell->getAsString() , 10);
- ntlVec3Gfx org = this->getCellOrigin( cell );
- ntlVec3Gfx halfsize = this->getCellSize( cell );
- int set = this->getCellSet( cell );
- //debugOut(" DD: "<<cell->getAsString()<<" "<< (dispset->type) , 10);
-
- bool showcell = true;
- int linewidth = 1;
- ntlColor col(0.5);
- LbmFloat cscale = 1.0; //dispset->scale;
-
-#define DRAWDISPCUBE(col,scale) \
- { glLineWidth( linewidth ); \
- glColor3f( (col)[0], (col)[1], (col)[2]); \
- ntlVec3Gfx s = org-(halfsize * (scale)); \
- ntlVec3Gfx e = org+(halfsize * (scale)); \
- drawCubeWire( s,e ); }
-
- CellFlagType flag = this->getCellFlag(cell, set );
- // always check types
- if(flag& CFInvalid ) { if(!guiShowInvalid ) return; }
- if(flag& CFUnused ) { if(!guiShowInvalid ) return; }
- if(flag& CFEmpty ) { if(!guiShowEmpty ) return; }
- if(flag& CFInter ) { if(!guiShowInterface) return; }
- if(flag& CFNoDelete ) { if(!guiShowNoDelete ) return; }
- if(flag& CFBnd ) { if(!guiShowBnd ) return; }
-
- // only dismiss one of these types
- if(flag& CFGrFromCoarse) { if(!guiShowCoarseInner ) return; } // inner not really interesting
- else
- if(flag& CFGrFromFine) { if(!guiShowCoarseBorder ) return; }
- else
- if(flag& CFFluid ) { if(!guiShowFluid ) return; }
-
- switch(dispset) {
- case FLUIDDISPNothing: {
- showcell = false;
- } break;
- case FLUIDDISPCelltypes: {
- cscale = 0.5;
-
- if(flag& CFNoDelete) { // debug, mark nodel cells
- ntlColor ccol(0.7,0.0,0.0);
- DRAWDISPCUBE(ccol, 0.1);
- }
- if(flag& CFPersistMask) { // mark persistent flags
- ntlColor ccol(0.5);
- DRAWDISPCUBE(ccol, 0.125);
- }
- if(flag& CFNoBndFluid) { // mark persistent flags
- ntlColor ccol(0,0,1);
- DRAWDISPCUBE(ccol, 0.075);
- }
-
- if(flag& CFInvalid) {
- cscale = 0.50;
- col = ntlColor(0.0,0,0.0);
- }
- else if(flag& CFBnd) {
- cscale = 0.59;
- col = ntlColor(0.4);
- }
-
- else if(flag& CFInter) {
- cscale = 0.55;
- col = ntlColor(0,1,1);
-
- } else if(flag& CFGrFromCoarse) {
- // draw as - with marker
- ntlColor col2(0.0,1.0,0.3);
- DRAWDISPCUBE(col2, 0.1);
- cscale = 0.5;
- showcell=false; // DEBUG
- }
- else if(flag& CFFluid) {
- cscale = 0.5;
- if(flag& CFGrToFine) {
- ntlColor col2(0.5,0.0,0.5);
- DRAWDISPCUBE(col2, 0.1);
- col = ntlColor(0,0,1);
- }
- if(flag& CFGrFromFine) {
- ntlColor col2(1.0,1.0,0.0);
- DRAWDISPCUBE(col2, 0.1);
- col = ntlColor(0,0,1);
- } else if(flag& CFGrFromCoarse) {
- // draw as fluid with marker
- ntlColor col2(0.0,1.0,0.3);
- DRAWDISPCUBE(col2, 0.1);
- col = ntlColor(0,0,1);
- } else {
- col = ntlColor(0,0,1);
- }
- }
- else if(flag& CFEmpty) {
- showcell=false;
- }
-
- } break;
- case FLUIDDISPVelocities: {
- // dont use cube display
- LbmVec vel = this->getCellVelocity( cell, set );
- glBegin(GL_LINES);
- glColor3f( 0.0,0.0,0.0 );
- glVertex3f( org[0], org[1], org[2] );
- org += vec2G(vel * 10.0 * cscale);
- glColor3f( 1.0,1.0,1.0 );
- glVertex3f( org[0], org[1], org[2] );
- glEnd();
- showcell = false;
- } break;
- case FLUIDDISPCellfills: {
- cscale = 0.5;
- if(flag& CFFluid) {
- cscale = 0.75;
- col = ntlColor(0,0,0.5);
- }
- else if(flag& CFInter) {
- cscale = 0.75 * this->getCellMass(cell,set);
- col = ntlColor(0,1,1);
- }
- else {
- showcell=false;
- }
-
- if( ABS(this->getCellMass(cell,set)) < 10.0 ) {
- cscale = 0.75 * this->getCellMass(cell,set);
- } else {
- showcell = false;
- }
- if(cscale>0.0) {
- col = ntlColor(0,1,1);
- } else {
- col = ntlColor(1,1,0);
- }
- // TODO
- } break;
- case FLUIDDISPDensity: {
- LbmFloat rho = this->getCellDensity(cell,set);
- cscale = rho*rho * 0.25;
- col = ntlColor( MIN(0.5+cscale,1.0) , MIN(0.0+cscale,1.0), MIN(0.0+cscale,1.0) );
- cscale *= 2.0;
- } break;
- case FLUIDDISPGrid: {
- cscale = 0.59;
- col = ntlColor(1.0);
- } break;
- default: {
- cscale = 0.5;
- col = ntlColor(1.0,0.0,0.0);
- } break;
- }
-
- if(!showcell) return;
- if(cscale==0.0) return; // dont draw zero values
- DRAWDISPCUBE(col, cscale);
-}
-
-//! debug display function
-// D has to implement the CellIterator interface
-void LbmFsgrSolver::lbmDebugDisplay(int dispset) {
- // DEBUG always display testdata
-#if LBM_INCLUDE_TESTSOLVERS==1
- if(mUseTestdata){
- cpDebugDisplay(dispset);
- mpTest->testDebugDisplay(dispset);
- }
-#endif // LBM_INCLUDE_TESTSOLVERS==1
- if(dispset<=FLUIDDISPNothing) return;
- //if(!dispset->on) return;
- glDisable( GL_LIGHTING ); // dont light lines
-
-#if LBM_INCLUDE_TESTSOLVERS==1
- if((!mUseTestdata)|| (mUseTestdata)&&(mpTest->mFarfMode<=0)) {
-#endif // LBM_INCLUDE_TESTSOLVERS==1
-
- LbmFsgrSolver::CellIdentifier cid = this->getFirstCell();
- for(; this->noEndCell( cid );
- this->advanceCell( cid ) ) {
- this->debugDisplayNode(dispset, cid );
- }
- delete cid;
-
-#if LBM_INCLUDE_TESTSOLVERS==1
- } // 3d check
-#endif // LBM_INCLUDE_TESTSOLVERS==1
-
- glEnable( GL_LIGHTING ); // dont light lines
-}
-
-//! debug display function
-// D has to implement the CellIterator interface
-void LbmFsgrSolver::lbmMarkedCellDisplay() {
- //fluidDispSettings dispset;
- // trick - display marked cells as grid displa -> white, big
- int dispset = FLUIDDISPGrid;
- glDisable( GL_LIGHTING ); // dont light lines
-
- LbmFsgrSolver::CellIdentifier cid = this->markedGetFirstCell();
- while(cid) {
- this->debugDisplayNode(dispset, cid );
- cid = this->markedAdvanceCell();
- }
- delete cid;
-
- glEnable( GL_LIGHTING ); // dont light lines
-}
-
-#endif // LBM_USE_GUI==1
-
//! display a single node
void LbmFsgrSolver::debugPrintNodeInfo(CellIdentifierInterface* cell, int forceSet) {
//string printInfo,
diff --git a/intern/gawain/CMakeLists.txt b/intern/gawain/CMakeLists.txt
new file mode 100644
index 00000000000..9924daa8cd1
--- /dev/null
+++ b/intern/gawain/CMakeLists.txt
@@ -0,0 +1,40 @@
+
+set(INC
+ gawain
+)
+
+set(INC_SYS
+ ${GLEW_INCLUDE_PATH}
+)
+
+set(SRC
+ src/gwn_attr_binding.c
+ src/gwn_batch.c
+ src/gwn_element.c
+ src/gwn_buffer_id.cpp
+ src/gwn_immediate.c
+ src/gwn_imm_util.c
+ src/gwn_primitive.c
+ src/gwn_shader_interface.c
+ src/gwn_vertex_buffer.c
+ src/gwn_vertex_format.c
+
+ gawain/gwn_attr_binding.h
+ gawain/gwn_attr_binding_private.h
+ gawain/gwn_batch.h
+ gawain/gwn_buffer_id.h
+ gawain/gwn_common.h
+ gawain/gwn_element.h
+ gawain/gwn_imm_util.h
+ gawain/gwn_immediate.h
+ gawain/gwn_primitive.h
+ gawain/gwn_primitive_private.h
+ gawain/gwn_shader_interface.h
+ gawain/gwn_vertex_buffer.h
+ gawain/gwn_vertex_format.h
+ gawain/gwn_vertex_format_private.h
+)
+
+add_definitions(${GL_DEFINITIONS})
+
+blender_add_lib(bf_intern_gawain "${SRC}" "${INC}" "${INC_SYS}")
diff --git a/intern/gawain/gawain/gwn_attr_binding.h b/intern/gawain/gawain/gwn_attr_binding.h
new file mode 100644
index 00000000000..a209e1c4f0f
--- /dev/null
+++ b/intern/gawain/gawain/gwn_attr_binding.h
@@ -0,0 +1,19 @@
+
+// Gawain vertex attribute binding
+//
+// This code is part of the Gawain library, with modifications
+// specific to integration with Blender.
+//
+// Copyright 2016 Mike Erwin
+//
+// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of
+// the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
+#pragma once
+
+#include "gwn_common.h"
+
+typedef struct Gwn_AttrBinding {
+ uint64_t loc_bits; // store 4 bits for each of the 16 attribs
+ uint16_t enabled_bits; // 1 bit for each attrib
+} Gwn_AttrBinding;
diff --git a/intern/gawain/gawain/gwn_attr_binding_private.h b/intern/gawain/gawain/gwn_attr_binding_private.h
new file mode 100644
index 00000000000..300945d464b
--- /dev/null
+++ b/intern/gawain/gawain/gwn_attr_binding_private.h
@@ -0,0 +1,20 @@
+
+// Gawain vertex attribute binding
+//
+// This code is part of the Gawain library, with modifications
+// specific to integration with Blender.
+//
+// Copyright 2017 Mike Erwin
+//
+// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of
+// the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
+#pragma once
+
+#include "gwn_vertex_format.h"
+#include "gwn_shader_interface.h"
+
+void AttribBinding_clear(Gwn_AttrBinding*);
+
+void get_attrib_locations(const Gwn_VertFormat*, Gwn_AttrBinding*, const Gwn_ShaderInterface*);
+unsigned read_attrib_location(const Gwn_AttrBinding*, unsigned a_idx);
diff --git a/intern/gawain/gawain/gwn_batch.h b/intern/gawain/gawain/gwn_batch.h
new file mode 100644
index 00000000000..b2b2f00a5a1
--- /dev/null
+++ b/intern/gawain/gawain/gwn_batch.h
@@ -0,0 +1,139 @@
+
+// Gawain geometry batch
+//
+// This code is part of the Gawain library, with modifications
+// specific to integration with Blender.
+//
+// Copyright 2016 Mike Erwin
+//
+// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of
+// the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
+#pragma once
+
+#include "gwn_vertex_buffer.h"
+#include "gwn_element.h"
+#include "gwn_shader_interface.h"
+
+typedef enum {
+ GWN_BATCH_READY_TO_FORMAT,
+ GWN_BATCH_READY_TO_BUILD,
+ GWN_BATCH_BUILDING,
+ GWN_BATCH_READY_TO_DRAW
+} Gwn_BatchPhase;
+
+#define GWN_BATCH_VBO_MAX_LEN 3
+
+typedef struct Gwn_Batch {
+ // geometry
+ Gwn_VertBuf* verts[GWN_BATCH_VBO_MAX_LEN]; // verts[0] is required, others can be NULL
+ Gwn_IndexBuf* elem; // NULL if element list not needed
+ Gwn_PrimType prim_type;
+ GLenum gl_prim_type;
+
+ // book-keeping
+ GLuint vao_id; // remembers all geometry state (vertex attrib bindings & element buffer)
+ Gwn_BatchPhase phase;
+ bool program_dirty;
+ bool program_in_use;
+ unsigned owns_flag;
+
+ // state
+ GLuint program;
+ const Gwn_ShaderInterface* interface;
+} Gwn_Batch;
+
+enum {
+ GWN_BATCH_OWNS_VBO = (1 << 0),
+ /* each vbo index gets bit-shifted */
+ GWN_BATCH_OWNS_INDEX = (1 << 31),
+};
+
+Gwn_Batch* GWN_batch_create_ex(Gwn_PrimType, Gwn_VertBuf*, Gwn_IndexBuf*, unsigned owns_flag);
+void GWN_batch_init_ex(Gwn_Batch*, Gwn_PrimType, Gwn_VertBuf*, Gwn_IndexBuf*, unsigned owns_flag);
+
+#define GWN_batch_create(prim, verts, elem) \
+ GWN_batch_create_ex(prim, verts, elem, 0)
+#define GWN_batch_init(batch, prim, verts, elem) \
+ GWN_batch_init_ex(batch, prim, verts, elem, 0)
+
+void GWN_batch_discard(Gwn_Batch*); // verts & elem are not discarded
+
+int GWN_batch_vertbuf_add_ex(Gwn_Batch*, Gwn_VertBuf*, bool own_vbo);
+
+#define GWN_batch_vertbuf_add(batch, verts) \
+ GWN_batch_vertbuf_add_ex(batch, verts, false)
+
+void GWN_batch_program_set(Gwn_Batch*, GLuint program, const Gwn_ShaderInterface*);
+void GWN_batch_program_unset(Gwn_Batch*);
+// Entire batch draws with one shader program, but can be redrawn later with another program.
+// Vertex shader's inputs must be compatible with the batch's vertex format.
+
+void GWN_batch_program_use_begin(Gwn_Batch*); // call before Batch_Uniform (temp hack?)
+void GWN_batch_program_use_end(Gwn_Batch*);
+
+void GWN_batch_uniform_1i(Gwn_Batch*, const char* name, int value);
+void GWN_batch_uniform_1b(Gwn_Batch*, const char* name, bool value);
+void GWN_batch_uniform_1f(Gwn_Batch*, const char* name, float value);
+void GWN_batch_uniform_2f(Gwn_Batch*, const char* name, float x, float y);
+void GWN_batch_uniform_3f(Gwn_Batch*, const char* name, float x, float y, float z);
+void GWN_batch_uniform_4f(Gwn_Batch*, const char* name, float x, float y, float z, float w);
+void GWN_batch_uniform_2fv(Gwn_Batch*, const char* name, const float data[2]);
+void GWN_batch_uniform_3fv(Gwn_Batch*, const char* name, const float data[3]);
+void GWN_batch_uniform_4fv(Gwn_Batch*, const char* name, const float data[4]);
+
+void GWN_batch_draw(Gwn_Batch*);
+
+
+// clement : temp stuff
+void GWN_batch_draw_stupid(Gwn_Batch*, int v_first, int v_count);
+void GWN_batch_draw_stupid_instanced(Gwn_Batch*, unsigned int instance_vbo, int instance_first, int instance_count,
+ int attrib_nbr, int attrib_stride, int attrib_loc[16], int attrib_size[16]);
+void GWN_batch_draw_stupid_instanced_with_batch(Gwn_Batch*, Gwn_Batch*);
+
+
+
+
+
+#if 0 // future plans
+
+// Can multiple batches share a Gwn_VertBuf? Use ref count?
+
+
+// We often need a batch with its own data, to be created and discarded together.
+// WithOwn variants reduce number of system allocations.
+
+typedef struct BatchWithOwnVertexBuffer {
+ Gwn_Batch batch;
+ Gwn_VertBuf verts; // link batch.verts to this
+} BatchWithOwnVertexBuffer;
+
+typedef struct BatchWithOwnElementList {
+ Gwn_Batch batch;
+ Gwn_IndexBuf elem; // link batch.elem to this
+} BatchWithOwnElementList;
+
+typedef struct BatchWithOwnVertexBufferAndElementList {
+ Gwn_Batch batch;
+ Gwn_IndexBuf elem; // link batch.elem to this
+ Gwn_VertBuf verts; // link batch.verts to this
+} BatchWithOwnVertexBufferAndElementList;
+
+Gwn_Batch* create_BatchWithOwnVertexBuffer(Gwn_PrimType, Gwn_VertFormat*, unsigned v_ct, Gwn_IndexBuf*);
+Gwn_Batch* create_BatchWithOwnElementList(Gwn_PrimType, Gwn_VertBuf*, unsigned prim_ct);
+Gwn_Batch* create_BatchWithOwnVertexBufferAndElementList(Gwn_PrimType, Gwn_VertFormat*, unsigned v_ct, unsigned prim_ct);
+// verts: shared, own
+// elem: none, shared, own
+Gwn_Batch* create_BatchInGeneral(Gwn_PrimType, VertexBufferStuff, ElementListStuff);
+
+#endif // future plans
+
+
+/* Macros */
+
+#define GWN_BATCH_DISCARD_SAFE(batch) do { \
+ if (batch != NULL) { \
+ GWN_batch_discard(batch); \
+ batch = NULL; \
+ } \
+} while (0)
diff --git a/intern/gawain/gawain/gwn_buffer_id.h b/intern/gawain/gawain/gwn_buffer_id.h
new file mode 100644
index 00000000000..db5df99f526
--- /dev/null
+++ b/intern/gawain/gawain/gwn_buffer_id.h
@@ -0,0 +1,34 @@
+
+// Gawain buffer IDs
+//
+// This code is part of the Gawain library, with modifications
+// specific to integration with Blender.
+//
+// Copyright 2016 Mike Erwin
+//
+// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of
+// the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
+#pragma once
+
+// Manage GL buffer IDs in a thread-safe way
+// Use these instead of glGenBuffers & its friends
+// - alloc must be called from main thread
+// - free can be called from any thread
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "gwn_common.h"
+
+GLuint GWN_buf_id_alloc(void);
+void GWN_buf_id_free(GLuint buffer_id);
+
+GLuint GWN_vao_alloc(void);
+void GWN_vao_free(GLuint vao_id);
+
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/intern/gawain/gawain/gwn_common.h b/intern/gawain/gawain/gwn_common.h
new file mode 100644
index 00000000000..e96a3b5c2a2
--- /dev/null
+++ b/intern/gawain/gawain/gwn_common.h
@@ -0,0 +1,34 @@
+
+// Gawain common #defines and #includes
+//
+// This code is part of the Gawain library, with modifications
+// specific to integration with Blender.
+//
+// Copyright 2016 Mike Erwin
+//
+// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of
+// the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
+#pragma once
+
+#if defined(NDEBUG)
+ #define TRUST_NO_ONE 0
+#else
+ // strict error checking, enabled for debug builds during early development
+ #define TRUST_NO_ONE 1
+#endif
+
+#include <GL/glew.h>
+#include <stdbool.h>
+#include <stdint.h>
+
+#if TRUST_NO_ONE
+ #include <assert.h>
+#endif
+
+/* GWN_INLINE */
+#if defined(_MSC_VER)
+# define GWN_INLINE static __forceinline
+#else
+# define GWN_INLINE static inline __attribute__((always_inline)) __attribute__((__unused__))
+#endif \ No newline at end of file
diff --git a/intern/gawain/gawain/gwn_element.h b/intern/gawain/gawain/gwn_element.h
new file mode 100644
index 00000000000..3081305769f
--- /dev/null
+++ b/intern/gawain/gawain/gwn_element.h
@@ -0,0 +1,75 @@
+
+// Gawain element list (AKA index buffer)
+//
+// This code is part of the Gawain library, with modifications
+// specific to integration with Blender.
+//
+// Copyright 2016 Mike Erwin
+//
+// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of
+// the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
+#pragma once
+
+#include "gwn_primitive.h"
+
+#define GWN_TRACK_INDEX_RANGE 1
+
+typedef enum {
+ GWN_INDEX_U8, // GL has this, Vulkan does not
+ GWN_INDEX_U16,
+ GWN_INDEX_U32
+} Gwn_IndexBufType;
+
+typedef struct Gwn_IndexBuf {
+ unsigned index_ct;
+#if GWN_TRACK_INDEX_RANGE
+ Gwn_IndexBufType index_type;
+ GLenum gl_index_type;
+ unsigned min_index;
+ unsigned max_index;
+ unsigned base_index;
+#endif
+ void* data; // NULL indicates data in VRAM (unmapped) or not yet allocated
+ GLuint vbo_id; // 0 indicates not yet sent to VRAM
+} Gwn_IndexBuf;
+
+void GWN_indexbuf_use(Gwn_IndexBuf*);
+unsigned GWN_indexbuf_size_get(const Gwn_IndexBuf*);
+
+typedef struct Gwn_IndexBufBuilder {
+ unsigned max_allowed_index;
+ unsigned max_index_ct;
+ unsigned index_ct;
+ Gwn_PrimType prim_type;
+ unsigned* data;
+} Gwn_IndexBufBuilder;
+
+// supported primitives:
+// GWN_PRIM_POINTS
+// GWN_PRIM_LINES
+// GWN_PRIM_TRIS
+
+void GWN_indexbuf_init(Gwn_IndexBufBuilder*, Gwn_PrimType, unsigned prim_ct, unsigned vertex_ct);
+//void GWN_indexbuf_init_custom(Gwn_IndexBufBuilder*, Gwn_PrimType, unsigned index_ct, unsigned vertex_ct);
+
+void GWN_indexbuf_add_generic_vert(Gwn_IndexBufBuilder*, unsigned v);
+
+void GWN_indexbuf_add_point_vert(Gwn_IndexBufBuilder*, unsigned v);
+void GWN_indexbuf_add_line_verts(Gwn_IndexBufBuilder*, unsigned v1, unsigned v2);
+void GWN_indexbuf_add_tri_verts(Gwn_IndexBufBuilder*, unsigned v1, unsigned v2, unsigned v3);
+
+Gwn_IndexBuf* GWN_indexbuf_build(Gwn_IndexBufBuilder*);
+void GWN_indexbuf_build_in_place(Gwn_IndexBufBuilder*, Gwn_IndexBuf*);
+
+void GWN_indexbuf_discard(Gwn_IndexBuf*);
+
+
+/* Macros */
+
+#define GWN_INDEXBUF_DISCARD_SAFE(elem) do { \
+ if (elem != NULL) { \
+ GWN_indexbuf_discard(elem); \
+ elem = NULL; \
+ } \
+} while (0)
diff --git a/intern/gawain/gawain/gwn_imm_util.h b/intern/gawain/gawain/gwn_imm_util.h
new file mode 100644
index 00000000000..730bd7c1a3c
--- /dev/null
+++ b/intern/gawain/gawain/gwn_imm_util.h
@@ -0,0 +1,18 @@
+
+// Gawain immediate mode drawing utilities
+//
+// This code is part of the Gawain library, with modifications
+// specific to integration with Blender.
+//
+// Copyright 2016 Mike Erwin
+//
+// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of
+// the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
+#pragma once
+
+
+// Draw 2D rectangles (replaces glRect functions)
+// caller is reponsible for vertex format & shader
+void immRectf(unsigned pos, float x1, float y1, float x2, float y2);
+void immRecti(unsigned pos, int x1, int y1, int x2, int y2);
diff --git a/intern/gawain/gawain/gwn_immediate.h b/intern/gawain/gawain/gwn_immediate.h
new file mode 100644
index 00000000000..386b26b63b1
--- /dev/null
+++ b/intern/gawain/gawain/gwn_immediate.h
@@ -0,0 +1,119 @@
+
+// Gawain immediate mode work-alike
+//
+// This code is part of the Gawain library, with modifications
+// specific to integration with Blender.
+//
+// Copyright 2016 Mike Erwin
+//
+// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of
+// the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
+#pragma once
+
+#include "gwn_vertex_format.h"
+#include "gwn_primitive.h"
+#include "gwn_shader_interface.h"
+
+#define IMM_BATCH_COMBO 1
+
+
+Gwn_VertFormat* immVertexFormat(void); // returns a cleared vertex format, ready for add_attrib
+
+void immBindProgram(GLuint program, const Gwn_ShaderInterface*); // every immBegin must have a program bound first
+void immUnbindProgram(void); // call after your last immEnd, or before binding another program
+
+void immBegin(Gwn_PrimType, unsigned vertex_ct); // must supply exactly vertex_ct vertices
+void immBeginAtMost(Gwn_PrimType, unsigned max_vertex_ct); // can supply fewer vertices
+void immEnd(void); // finishes and draws
+
+#if IMM_BATCH_COMBO
+#include "gwn_batch.h"
+// immBegin a batch, then use standard immFunctions as usual.
+// immEnd will finalize the batch instead of drawing.
+// Then you can draw it as many times as you like! Partially replaces the need for display lists.
+Gwn_Batch* immBeginBatch(Gwn_PrimType, unsigned vertex_ct);
+Gwn_Batch* immBeginBatchAtMost(Gwn_PrimType, unsigned vertex_ct);
+#endif
+
+
+// provide attribute values that can change per vertex
+// first vertex after immBegin must have all its attributes specified
+// skipped attributes will continue using the previous value for that attrib_id
+void immAttrib1f(unsigned attrib_id, float x);
+void immAttrib2f(unsigned attrib_id, float x, float y);
+void immAttrib3f(unsigned attrib_id, float x, float y, float z);
+void immAttrib4f(unsigned attrib_id, float x, float y, float z, float w);
+
+void immAttrib2i(unsigned attrib_id, int x, int y);
+
+void immAttrib1u(unsigned attrib_id, unsigned x);
+
+void immAttrib2s(unsigned attrib_id, short x, short y);
+
+void immAttrib2fv(unsigned attrib_id, const float data[2]);
+void immAttrib3fv(unsigned attrib_id, const float data[3]);
+void immAttrib4fv(unsigned attrib_id, const float data[4]);
+
+void immAttrib3ub(unsigned attrib_id, unsigned char r, unsigned char g, unsigned char b);
+void immAttrib4ub(unsigned attrib_id, unsigned char r, unsigned char g, unsigned char b, unsigned char a);
+
+void immAttrib3ubv(unsigned attrib_id, const unsigned char data[4]);
+void immAttrib4ubv(unsigned attrib_id, const unsigned char data[4]);
+
+// explicitly skip an attribute
+// this advanced option kills automatic value copying for this attrib_id
+void immSkipAttrib(unsigned attrib_id);
+
+
+// provide one last attribute value & end the current vertex
+// this is most often used for 2D or 3D position (similar to glVertex)
+void immVertex2f(unsigned attrib_id, float x, float y);
+void immVertex3f(unsigned attrib_id, float x, float y, float z);
+
+void immVertex2i(unsigned attrib_id, int x, int y);
+
+void immVertex2s(unsigned attrib_id, short x, short y);
+
+void immVertex2fv(unsigned attrib_id, const float data[2]);
+void immVertex3fv(unsigned attrib_id, const float data[3]);
+
+void immVertex2iv(unsigned attrib_id, const int data[2]);
+
+
+// provide uniform values that don't change for the entire draw call
+void immUniform1i(const char* name, int x);
+void immUniform4iv(const char* name, const int data[4]);
+void immUniform1f(const char* name, float x);
+void immUniform2f(const char* name, float x, float y);
+void immUniform2fv(const char* name, const float data[2]);
+void immUniform3f(const char* name, float x, float y, float z);
+void immUniform3fv(const char* name, const float data[3]);
+void immUniformArray3fv(const char* name, const float *data, int count);
+void immUniform4f(const char* name, float x, float y, float z, float w);
+void immUniform4fv(const char* name, const float data[4]);
+void immUniformArray4fv(const char* bare_name, const float *data, int count);
+void immUniformMatrix4fv(const char* name, const float data[4][4]);
+
+
+// convenience functions for setting "uniform vec4 color"
+// the rgb functions have implicit alpha = 1.0
+void immUniformColor4f(float r, float g, float b, float a);
+void immUniformColor4fv(const float rgba[4]);
+void immUniformColor3f(float r, float g, float b);
+void immUniformColor3fv(const float rgb[3]);
+void immUniformColor3fvAlpha(const float rgb[3], float a);
+
+void immUniformColor3ub(unsigned char r, unsigned char g, unsigned char b);
+void immUniformColor4ub(unsigned char r, unsigned char g, unsigned char b, unsigned char a);
+void immUniformColor3ubv(const unsigned char rgb[3]);
+void immUniformColor3ubvAlpha(const unsigned char rgb[3], unsigned char a);
+void immUniformColor4ubv(const unsigned char rgba[4]);
+
+
+// these are called by the system -- not part of drawing API
+
+void immInit(void);
+void immActivate(void);
+void immDeactivate(void);
+void immDestroy(void);
diff --git a/intern/gawain/gawain/gwn_primitive.h b/intern/gawain/gawain/gwn_primitive.h
new file mode 100644
index 00000000000..5e5b8019889
--- /dev/null
+++ b/intern/gawain/gawain/gwn_primitive.h
@@ -0,0 +1,40 @@
+
+// Gawain geometric primitives
+//
+// This code is part of the Gawain library, with modifications
+// specific to integration with Blender.
+//
+// Copyright 2017 Mike Erwin
+//
+// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of
+// the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
+#pragma once
+
+#include "gwn_common.h"
+
+typedef enum {
+ GWN_PRIM_POINTS,
+ GWN_PRIM_LINES,
+ GWN_PRIM_TRIS,
+ GWN_PRIM_LINE_STRIP,
+ GWN_PRIM_LINE_LOOP, // GL has this, Vulkan does not
+ GWN_PRIM_TRI_STRIP,
+ GWN_PRIM_TRI_FAN,
+
+ GWN_PRIM_LINE_STRIP_ADJ,
+
+ GWN_PRIM_NONE
+} Gwn_PrimType;
+
+// what types of primitives does each shader expect?
+typedef enum {
+ GWN_PRIM_CLASS_NONE = 0,
+ GWN_PRIM_CLASS_POINT = (1 << 0),
+ GWN_PRIM_CLASS_LINE = (1 << 1),
+ GWN_PRIM_CLASS_SURFACE = (1 << 2),
+ GWN_PRIM_CLASS_ANY = GWN_PRIM_CLASS_POINT | GWN_PRIM_CLASS_LINE | GWN_PRIM_CLASS_SURFACE
+} Gwn_PrimClass;
+
+Gwn_PrimClass GWN_primtype_class(Gwn_PrimType);
+bool GWN_primtype_belongs_to_class(Gwn_PrimType, Gwn_PrimClass);
diff --git a/intern/gawain/gawain/gwn_primitive_private.h b/intern/gawain/gawain/gwn_primitive_private.h
new file mode 100644
index 00000000000..d959cd89852
--- /dev/null
+++ b/intern/gawain/gawain/gwn_primitive_private.h
@@ -0,0 +1,14 @@
+
+// Gawain geometric primitives (private interface for use inside Gawain)
+//
+// This code is part of the Gawain library, with modifications
+// specific to integration with Blender.
+//
+// Copyright 2017 Mike Erwin
+//
+// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of
+// the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
+#pragma once
+
+GLenum convert_prim_type_to_gl(Gwn_PrimType);
diff --git a/intern/gawain/gawain/gwn_shader_interface.h b/intern/gawain/gawain/gwn_shader_interface.h
new file mode 100644
index 00000000000..345ad8d389b
--- /dev/null
+++ b/intern/gawain/gawain/gwn_shader_interface.h
@@ -0,0 +1,74 @@
+
+// Gawain shader interface (C --> GLSL)
+//
+// This code is part of the Gawain library, with modifications
+// specific to integration with Blender.
+//
+// Copyright 2017 Mike Erwin
+//
+// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of
+// the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
+#pragma once
+
+#include "gwn_common.h"
+
+typedef enum {
+ GWN_UNIFORM_NONE = 0, // uninitialized/unknown
+
+ GWN_UNIFORM_MODEL, // mat4 ModelMatrix
+ GWN_UNIFORM_VIEW, // mat4 ViewMatrix
+ GWN_UNIFORM_MODELVIEW, // mat4 ModelViewMatrix
+ GWN_UNIFORM_PROJECTION, // mat4 ProjectionMatrix
+ GWN_UNIFORM_VIEWPROJECTION, // mat4 ViewProjectionMatrix
+ GWN_UNIFORM_MVP, // mat4 ModelViewProjectionMatrix
+
+ GWN_UNIFORM_MODEL_INV, // mat4 ModelMatrixInverse
+ GWN_UNIFORM_VIEW_INV, // mat4 ViewMatrixInverse
+ GWN_UNIFORM_MODELVIEW_INV, // mat4 ModelViewMatrixInverse
+ GWN_UNIFORM_PROJECTION_INV, // mat4 ProjectionMatrixInverse
+ GWN_UNIFORM_VIEWPROJECTION_INV, // mat4 ViewProjectionMatrixInverse
+
+ GWN_UNIFORM_NORMAL, // mat3 NormalMatrix
+ GWN_UNIFORM_WORLDNORMAL, // mat3 WorldNormalMatrix
+ GWN_UNIFORM_CAMERATEXCO, // vec4 CameraTexCoFactors
+ GWN_UNIFORM_ORCO, // vec3 OrcoTexCoFactors[]
+ GWN_UNIFORM_CLIPPLANES, // vec4 ClipPlanes[]
+
+ GWN_UNIFORM_COLOR, // vec4 color
+ GWN_UNIFORM_EYE, // vec3 eye
+
+ GWN_UNIFORM_CUSTOM, // custom uniform, not one of the above built-ins
+
+ GWN_NUM_UNIFORMS, // Special value, denotes number of builtin uniforms.
+} Gwn_UniformBuiltin;
+
+typedef struct Gwn_ShaderInput {
+ struct Gwn_ShaderInput* next;
+ uint32_t name_offset;
+ unsigned name_hash;
+ Gwn_UniformBuiltin builtin_type; // only for uniform inputs
+ GLenum gl_type; // only for attrib inputs
+ GLint size; // only for attrib inputs
+ GLint location;
+} Gwn_ShaderInput;
+
+#define GWN_NUM_SHADERINTERFACE_BUCKETS 257
+
+typedef struct Gwn_ShaderInterface {
+ GLint program;
+ uint32_t name_buffer_offset;
+ Gwn_ShaderInput* attrib_buckets[GWN_NUM_SHADERINTERFACE_BUCKETS];
+ Gwn_ShaderInput* uniform_buckets[GWN_NUM_SHADERINTERFACE_BUCKETS];
+ Gwn_ShaderInput* ubo_buckets[GWN_NUM_SHADERINTERFACE_BUCKETS];
+ Gwn_ShaderInput* builtin_uniforms[GWN_NUM_UNIFORMS];
+ char* name_buffer;
+} Gwn_ShaderInterface;
+
+Gwn_ShaderInterface* GWN_shaderinterface_create(GLint program_id);
+void GWN_shaderinterface_discard(Gwn_ShaderInterface*);
+
+const Gwn_ShaderInput* GWN_shaderinterface_uniform(const Gwn_ShaderInterface*, const char* name);
+const Gwn_ShaderInput* GWN_shaderinterface_uniform_builtin(const Gwn_ShaderInterface*, Gwn_UniformBuiltin);
+const Gwn_ShaderInput* GWN_shaderinterface_ubo(const Gwn_ShaderInterface*, const char* name);
+const Gwn_ShaderInput* GWN_shaderinterface_attr(const Gwn_ShaderInterface*, const char* name);
diff --git a/intern/gawain/gawain/gwn_vertex_buffer.h b/intern/gawain/gawain/gwn_vertex_buffer.h
new file mode 100644
index 00000000000..50a4e1aa2f6
--- /dev/null
+++ b/intern/gawain/gawain/gwn_vertex_buffer.h
@@ -0,0 +1,110 @@
+
+// Gawain vertex buffer
+//
+// This code is part of the Gawain library, with modifications
+// specific to integration with Blender.
+//
+// Copyright 2016 Mike Erwin
+//
+// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of
+// the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
+#pragma once
+
+#include "gwn_vertex_format.h"
+
+// How to create a Gwn_VertBuf:
+// 1) verts = GWN_vertbuf_create() or GWN_vertbuf_init(verts)
+// 2) GWN_vertformat_attr_add(verts->format, ...)
+// 3) GWN_vertbuf_data_alloc(verts, vertex_ct) <-- finalizes/packs vertex format
+// 4) GWN_vertbuf_attr_fill(verts, pos, application_pos_buffer)
+
+// Is Gwn_VertBuf always used as part of a Gwn_Batch?
+
+typedef struct Gwn_VertBuf {
+ Gwn_VertFormat format;
+ unsigned vertex_ct;
+ bool own_data; // does gawain own the data an is able to free it
+ GLubyte* data; // NULL indicates data in VRAM (unmapped) or not yet allocated
+ GLuint vbo_id; // 0 indicates not yet sent to VRAM
+} Gwn_VertBuf;
+
+Gwn_VertBuf* GWN_vertbuf_create(void);
+Gwn_VertBuf* GWN_vertbuf_create_with_format(const Gwn_VertFormat*);
+
+void GWN_vertbuf_clear(Gwn_VertBuf* verts);
+void GWN_vertbuf_discard(Gwn_VertBuf*);
+
+void GWN_vertbuf_init(Gwn_VertBuf*);
+void GWN_vertbuf_init_with_format(Gwn_VertBuf*, const Gwn_VertFormat*);
+
+unsigned GWN_vertbuf_size_get(const Gwn_VertBuf*);
+void GWN_vertbuf_data_alloc(Gwn_VertBuf*, unsigned v_ct);
+void GWN_vertbuf_data_set(Gwn_VertBuf*, unsigned v_ct, void* data, bool pass_ownership);
+void GWN_vertbuf_data_resize(Gwn_VertBuf*, unsigned v_ct);
+
+// The most important set_attrib variant is the untyped one. Get it right first.
+// It takes a void* so the app developer is responsible for matching their app data types
+// to the vertex attribute's type and component count. They're in control of both, so this
+// should not be a problem.
+
+void GWN_vertbuf_attr_set(Gwn_VertBuf*, unsigned a_idx, unsigned v_idx, const void* data);
+void GWN_vertbuf_attr_fill(Gwn_VertBuf*, unsigned a_idx, const void* data); // tightly packed, non interleaved input data
+void GWN_vertbuf_attr_fill_stride(Gwn_VertBuf*, unsigned a_idx, unsigned stride, const void* data);
+
+// For low level access only
+typedef struct Gwn_VertBufRaw {
+ unsigned size;
+ unsigned stride;
+ GLubyte* data;
+ GLubyte* data_init;
+#if TRUST_NO_ONE
+ // Only for overflow check
+ GLubyte* _data_end;
+#endif
+} Gwn_VertBufRaw;
+
+GWN_INLINE void *GWN_vertbuf_raw_step(Gwn_VertBufRaw *a)
+ {
+ GLubyte* data = a->data;
+ a->data += a->stride;
+#if TRUST_NO_ONE
+ assert(data < a->_data_end);
+#endif
+ return (void *)data;
+ }
+
+GWN_INLINE unsigned GWN_vertbuf_raw_used(Gwn_VertBufRaw *a)
+ {
+ return ((a->data - a->data_init) / a->stride);
+ }
+
+void GWN_vertbuf_attr_get_raw_data(Gwn_VertBuf*, unsigned a_idx, Gwn_VertBufRaw *access);
+
+// TODO: decide whether to keep the functions below
+// doesn't immediate mode satisfy these needs?
+
+// void setAttrib1f(unsigned a_idx, unsigned v_idx, float x);
+// void setAttrib2f(unsigned a_idx, unsigned v_idx, float x, float y);
+// void setAttrib3f(unsigned a_idx, unsigned v_idx, float x, float y, float z);
+// void setAttrib4f(unsigned a_idx, unsigned v_idx, float x, float y, float z, float w);
+//
+// void setAttrib3ub(unsigned a_idx, unsigned v_idx, unsigned char r, unsigned char g, unsigned char b);
+// void setAttrib4ub(unsigned a_idx, unsigned v_idx, unsigned char r, unsigned char g, unsigned char b, unsigned char a);
+
+void GWN_vertbuf_use(Gwn_VertBuf*);
+
+
+// Metrics
+
+unsigned GWN_vertbuf_get_memory_usage(void);
+
+
+// Macros
+
+#define GWN_VERTBUF_DISCARD_SAFE(verts) do { \
+ if (verts != NULL) { \
+ GWN_vertbuf_discard(verts); \
+ verts = NULL; \
+ } \
+} while (0)
diff --git a/intern/gawain/gawain/gwn_vertex_format.h b/intern/gawain/gawain/gwn_vertex_format.h
new file mode 100644
index 00000000000..348e6399afa
--- /dev/null
+++ b/intern/gawain/gawain/gwn_vertex_format.h
@@ -0,0 +1,78 @@
+
+// Gawain vertex format
+//
+// This code is part of the Gawain library, with modifications
+// specific to integration with Blender.
+//
+// Copyright 2016 Mike Erwin
+//
+// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of
+// the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
+#pragma once
+
+#include "gwn_common.h"
+
+#define GWN_VERT_ATTR_MAX_LEN 16
+#define MAX_ATTRIB_NAMES 3
+#define GWN_VERT_ATTR_NAME_AVERAGE_LEN 11
+#define GWN_VERT_ATTR_NAMES_BUF_LEN ((GWN_VERT_ATTR_NAME_AVERAGE_LEN + 1) * GWN_VERT_ATTR_MAX_LEN)
+
+typedef enum {
+ GWN_COMP_I8,
+ GWN_COMP_U8,
+ GWN_COMP_I16,
+ GWN_COMP_U16,
+ GWN_COMP_I32,
+ GWN_COMP_U32,
+
+ GWN_COMP_F32,
+
+ GWN_COMP_I10
+} Gwn_VertCompType;
+
+typedef enum {
+ GWN_FETCH_FLOAT,
+ GWN_FETCH_INT,
+ GWN_FETCH_INT_TO_FLOAT_UNIT, // 127 (ubyte) -> 0.5 (and so on for other int types)
+ GWN_FETCH_INT_TO_FLOAT // 127 (any int type) -> 127.0
+} Gwn_VertFetchMode;
+
+typedef struct Gwn_VertAttr {
+ Gwn_VertCompType comp_type;
+ unsigned gl_comp_type;
+ unsigned comp_ct; // 1 to 4
+ unsigned sz; // size in bytes, 1 to 16
+ unsigned offset; // from beginning of vertex, in bytes
+ Gwn_VertFetchMode fetch_mode;
+ const char* name[MAX_ATTRIB_NAMES];
+ unsigned name_ct;
+} Gwn_VertAttr;
+
+typedef struct Gwn_VertFormat {
+ unsigned attrib_ct; // 0 to 16 (GWN_VERT_ATTR_MAX_LEN)
+ unsigned name_ct; // total count of active vertex attrib
+ unsigned stride; // stride in bytes, 1 to 256
+ bool packed;
+ Gwn_VertAttr attribs[GWN_VERT_ATTR_MAX_LEN]; // TODO: variable-size attribs array
+ char names[GWN_VERT_ATTR_NAMES_BUF_LEN];
+ unsigned name_offset;
+} Gwn_VertFormat;
+
+void GWN_vertformat_clear(Gwn_VertFormat*);
+void GWN_vertformat_copy(Gwn_VertFormat* dest, const Gwn_VertFormat* src);
+
+unsigned GWN_vertformat_attr_add(Gwn_VertFormat*, const char* name, Gwn_VertCompType, unsigned comp_ct, Gwn_VertFetchMode);
+void GWN_vertformat_alias_add(Gwn_VertFormat*, const char* alias);
+
+// format conversion
+
+typedef struct Gwn_PackedNormal {
+ int x : 10;
+ int y : 10;
+ int z : 10;
+ int w : 2; // 0 by default, can manually set to { -2, -1, 0, 1 }
+} Gwn_PackedNormal;
+
+Gwn_PackedNormal GWN_normal_convert_i10_v3(const float data[3]);
+Gwn_PackedNormal GWN_normal_convert_i10_s3(const short data[3]);
diff --git a/intern/gawain/gawain/gwn_vertex_format_private.h b/intern/gawain/gawain/gwn_vertex_format_private.h
new file mode 100644
index 00000000000..c1a0f734eda
--- /dev/null
+++ b/intern/gawain/gawain/gwn_vertex_format_private.h
@@ -0,0 +1,16 @@
+
+// Gawain vertex format (private interface for use inside Gawain)
+//
+// This code is part of the Gawain library, with modifications
+// specific to integration with Blender.
+//
+// Copyright 2016-2017 Mike Erwin
+//
+// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of
+// the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
+#pragma once
+
+void VertexFormat_pack(Gwn_VertFormat*);
+unsigned padding(unsigned offset, unsigned alignment);
+unsigned vertex_buffer_size(const Gwn_VertFormat*, unsigned vertex_ct);
diff --git a/intern/gawain/src/gwn_attr_binding.c b/intern/gawain/src/gwn_attr_binding.c
new file mode 100644
index 00000000000..7647a927b1e
--- /dev/null
+++ b/intern/gawain/src/gwn_attr_binding.c
@@ -0,0 +1,70 @@
+
+// Gawain vertex attribute binding
+//
+// This code is part of the Gawain library, with modifications
+// specific to integration with Blender.
+//
+// Copyright 2016 Mike Erwin
+//
+// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of
+// the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
+#include "gwn_attr_binding.h"
+#include "gwn_attr_binding_private.h"
+#include <stddef.h>
+
+#if GWN_VERT_ATTR_MAX_LEN != 16
+ #error "attrib binding code assumes GWN_VERT_ATTR_MAX_LEN = 16"
+#endif
+
+void AttribBinding_clear(Gwn_AttrBinding* binding)
+ {
+ binding->loc_bits = 0;
+ binding->enabled_bits = 0;
+ }
+
+unsigned read_attrib_location(const Gwn_AttrBinding* binding, unsigned a_idx)
+ {
+#if TRUST_NO_ONE
+ assert(a_idx < GWN_VERT_ATTR_MAX_LEN);
+ assert(binding->enabled_bits & (1 << a_idx));
+#endif
+
+ return (binding->loc_bits >> (4 * a_idx)) & 0xF;
+ }
+
+static void write_attrib_location(Gwn_AttrBinding* binding, unsigned a_idx, unsigned location)
+ {
+#if TRUST_NO_ONE
+ assert(a_idx < GWN_VERT_ATTR_MAX_LEN);
+ assert(location < GWN_VERT_ATTR_MAX_LEN);
+#endif
+
+ const unsigned shift = 4 * a_idx;
+ const uint64_t mask = ((uint64_t)0xF) << shift;
+ // overwrite this attrib's previous location
+ binding->loc_bits = (binding->loc_bits & ~mask) | (location << shift);
+ // mark this attrib as enabled
+ binding->enabled_bits |= 1 << a_idx;
+ }
+
+void get_attrib_locations(const Gwn_VertFormat* format, Gwn_AttrBinding* binding, const Gwn_ShaderInterface* shaderface)
+ {
+ AttribBinding_clear(binding);
+
+ for (unsigned a_idx = 0; a_idx < format->attrib_ct; ++a_idx)
+ {
+ const Gwn_VertAttr* a = format->attribs + a_idx;
+ for (unsigned n_idx = 0; n_idx < a->name_ct; ++n_idx)
+ {
+ const Gwn_ShaderInput* input = GWN_shaderinterface_attr(shaderface, a->name[n_idx]);
+
+#if TRUST_NO_ONE
+ assert(input != NULL);
+ // TODO: make this a recoverable runtime error? indicates mismatch between vertex format and program
+#endif
+
+ write_attrib_location(binding, a_idx, input->location);
+ }
+ }
+ }
diff --git a/intern/gawain/src/gwn_batch.c b/intern/gawain/src/gwn_batch.c
new file mode 100644
index 00000000000..3b7cdd1fa8d
--- /dev/null
+++ b/intern/gawain/src/gwn_batch.c
@@ -0,0 +1,484 @@
+
+// Gawain geometry batch
+//
+// This code is part of the Gawain library, with modifications
+// specific to integration with Blender.
+//
+// Copyright 2016 Mike Erwin
+//
+// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of
+// the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
+#include "gwn_batch.h"
+#include "gwn_buffer_id.h"
+#include "gwn_primitive_private.h"
+#include <stdlib.h>
+
+// necessary functions from matrix API
+extern void gpuBindMatrices(const Gwn_ShaderInterface* shaderface);
+extern bool gpuMatricesDirty(void); // how best to use this here?
+
+Gwn_Batch* GWN_batch_create_ex(
+ Gwn_PrimType prim_type, Gwn_VertBuf* verts, Gwn_IndexBuf* elem,
+ unsigned owns_flag)
+ {
+ Gwn_Batch* batch = calloc(1, sizeof(Gwn_Batch));
+
+ GWN_batch_init_ex(batch, prim_type, verts, elem, owns_flag);
+
+ return batch;
+ }
+
+void GWN_batch_init_ex(
+ Gwn_Batch* batch, Gwn_PrimType prim_type, Gwn_VertBuf* verts, Gwn_IndexBuf* elem,
+ unsigned owns_flag)
+ {
+#if TRUST_NO_ONE
+ assert(verts != NULL);
+#endif
+
+ batch->verts[0] = verts;
+ for (int v = 1; v < GWN_BATCH_VBO_MAX_LEN; ++v)
+ batch->verts[v] = NULL;
+ batch->elem = elem;
+ batch->prim_type = prim_type;
+ batch->gl_prim_type = convert_prim_type_to_gl(prim_type);
+ batch->phase = GWN_BATCH_READY_TO_DRAW;
+ batch->owns_flag = owns_flag;
+ }
+
+void GWN_batch_discard(Gwn_Batch* batch)
+ {
+ if (batch->owns_flag & GWN_BATCH_OWNS_INDEX)
+ GWN_indexbuf_discard(batch->elem);
+
+ if ((batch->owns_flag & ~GWN_BATCH_OWNS_INDEX) != 0)
+ {
+ for (int v = 0; v < GWN_BATCH_VBO_MAX_LEN; ++v)
+ {
+ if (batch->verts[v] == NULL)
+ break;
+ if (batch->owns_flag & (1 << v))
+ GWN_vertbuf_discard(batch->verts[v]);
+ }
+ }
+
+ if (batch->vao_id)
+ GWN_vao_free(batch->vao_id);
+
+ free(batch);
+ }
+
+int GWN_batch_vertbuf_add_ex(
+ Gwn_Batch* batch, Gwn_VertBuf* verts,
+ bool own_vbo)
+ {
+ for (unsigned v = 0; v < GWN_BATCH_VBO_MAX_LEN; ++v)
+ {
+ if (batch->verts[v] == NULL)
+ {
+#if TRUST_NO_ONE
+ // for now all VertexBuffers must have same vertex_ct
+ assert(verts->vertex_ct == batch->verts[0]->vertex_ct);
+ // in the near future we will enable instanced attribs which have their own vertex_ct
+#endif
+ batch->verts[v] = verts;
+ // TODO: mark dirty so we can keep attrib bindings up-to-date
+ if (own_vbo)
+ batch->owns_flag |= (1 << v);
+ return v;
+ }
+ }
+
+ // we only make it this far if there is no room for another Gwn_VertBuf
+#if TRUST_NO_ONE
+ assert(false);
+#endif
+ return -1;
+ }
+
+void GWN_batch_program_set(Gwn_Batch* batch, GLuint program, const Gwn_ShaderInterface* shaderface)
+ {
+#if TRUST_NO_ONE
+ assert(glIsProgram(program));
+#endif
+
+ batch->program = program;
+ batch->interface = shaderface;
+ batch->program_dirty = true;
+
+ GWN_batch_program_use_begin(batch); // hack! to make Batch_Uniform* simpler
+ }
+
+// fclem : hack !
+// we need this because we don't want to unbind the shader between drawcalls
+// but we still want the correct shader to be bound outside the draw manager
+void GWN_batch_program_unset(Gwn_Batch* batch)
+ {
+ batch->program_in_use = false;
+ }
+
+static void Batch_update_program_bindings(Gwn_Batch* batch, unsigned int v_first)
+ {
+ // disable all as a precaution
+ // why are we not using prev_attrib_enabled_bits?? see immediate.c
+ for (unsigned a_idx = 0; a_idx < GWN_VERT_ATTR_MAX_LEN; ++a_idx)
+ glDisableVertexAttribArray(a_idx);
+
+ for (int v = 0; v < GWN_BATCH_VBO_MAX_LEN; ++v)
+ {
+ Gwn_VertBuf* verts = batch->verts[v];
+ if (verts == NULL)
+ break;
+
+ const Gwn_VertFormat* format = &verts->format;
+
+ const unsigned attrib_ct = format->attrib_ct;
+ const unsigned stride = format->stride;
+
+ GWN_vertbuf_use(verts);
+
+ for (unsigned a_idx = 0; a_idx < attrib_ct; ++a_idx)
+ {
+ const Gwn_VertAttr* a = format->attribs + a_idx;
+
+ const GLvoid* pointer = (const GLubyte*)0 + a->offset + v_first * stride;
+
+ for (unsigned n_idx = 0; n_idx < a->name_ct; ++n_idx)
+ {
+ const Gwn_ShaderInput* input = GWN_shaderinterface_attr(batch->interface, a->name[n_idx]);
+
+ if (input == NULL) continue;
+
+ glEnableVertexAttribArray(input->location);
+
+ switch (a->fetch_mode)
+ {
+ case GWN_FETCH_FLOAT:
+ case GWN_FETCH_INT_TO_FLOAT:
+ glVertexAttribPointer(input->location, a->comp_ct, a->gl_comp_type, GL_FALSE, stride, pointer);
+ break;
+ case GWN_FETCH_INT_TO_FLOAT_UNIT:
+ glVertexAttribPointer(input->location, a->comp_ct, a->gl_comp_type, GL_TRUE, stride, pointer);
+ break;
+ case GWN_FETCH_INT:
+ glVertexAttribIPointer(input->location, a->comp_ct, a->gl_comp_type, stride, pointer);
+ }
+ }
+ }
+ }
+
+ batch->program_dirty = false;
+ }
+
+void GWN_batch_program_use_begin(Gwn_Batch* batch)
+ {
+ // NOTE: use_program & done_using_program are fragile, depend on staying in sync with
+ // the GL context's active program. use_program doesn't mark other programs as "not used".
+ // TODO: make not fragile (somehow)
+
+ if (!batch->program_in_use)
+ {
+ glUseProgram(batch->program);
+ batch->program_in_use = true;
+ }
+ }
+
+void GWN_batch_program_use_end(Gwn_Batch* batch)
+ {
+ if (batch->program_in_use)
+ {
+ glUseProgram(0);
+ batch->program_in_use = false;
+ }
+ }
+
+#if TRUST_NO_ONE
+ #define GET_UNIFORM const Gwn_ShaderInput* uniform = GWN_shaderinterface_uniform(batch->interface, name); assert(uniform);
+#else
+ #define GET_UNIFORM const Gwn_ShaderInput* uniform = GWN_shaderinterface_uniform(batch->interface, name);
+#endif
+
+void GWN_batch_uniform_1i(Gwn_Batch* batch, const char* name, int value)
+ {
+ GET_UNIFORM
+ glUniform1i(uniform->location, value);
+ }
+
+void GWN_batch_uniform_1b(Gwn_Batch* batch, const char* name, bool value)
+ {
+ GET_UNIFORM
+ glUniform1i(uniform->location, value ? GL_TRUE : GL_FALSE);
+ }
+
+void GWN_batch_uniform_2f(Gwn_Batch* batch, const char* name, float x, float y)
+ {
+ GET_UNIFORM
+ glUniform2f(uniform->location, x, y);
+ }
+
+void GWN_batch_uniform_3f(Gwn_Batch* batch, const char* name, float x, float y, float z)
+ {
+ GET_UNIFORM
+ glUniform3f(uniform->location, x, y, z);
+ }
+
+void GWN_batch_uniform_4f(Gwn_Batch* batch, const char* name, float x, float y, float z, float w)
+ {
+ GET_UNIFORM
+ glUniform4f(uniform->location, x, y, z, w);
+ }
+
+void GWN_batch_uniform_1f(Gwn_Batch* batch, const char* name, float x)
+ {
+ GET_UNIFORM
+ glUniform1f(uniform->location, x);
+ }
+
+void GWN_batch_uniform_2fv(Gwn_Batch* batch, const char* name, const float data[2])
+ {
+ GET_UNIFORM
+ glUniform2fv(uniform->location, 1, data);
+ }
+
+void GWN_batch_uniform_3fv(Gwn_Batch* batch, const char* name, const float data[3])
+ {
+ GET_UNIFORM
+ glUniform3fv(uniform->location, 1, data);
+ }
+
+void GWN_batch_uniform_4fv(Gwn_Batch* batch, const char* name, const float data[4])
+ {
+ GET_UNIFORM
+ glUniform4fv(uniform->location, 1, data);
+ }
+
+static void Batch_prime(Gwn_Batch* batch)
+ {
+ batch->vao_id = GWN_vao_alloc();
+ glBindVertexArray(batch->vao_id);
+
+ for (int v = 0; v < GWN_BATCH_VBO_MAX_LEN; ++v)
+ {
+ if (batch->verts[v] == NULL)
+ break;
+ GWN_vertbuf_use(batch->verts[v]);
+ }
+
+ if (batch->elem)
+ GWN_indexbuf_use(batch->elem);
+
+ // vertex attribs and element list remain bound to this VAO
+ }
+
+void GWN_batch_draw(Gwn_Batch* batch)
+ {
+#if TRUST_NO_ONE
+ assert(batch->phase == GWN_BATCH_READY_TO_DRAW);
+ assert(glIsProgram(batch->program));
+#endif
+
+ if (batch->vao_id)
+ glBindVertexArray(batch->vao_id);
+ else
+ Batch_prime(batch);
+
+ if (batch->program_dirty)
+ Batch_update_program_bindings(batch, 0);
+
+ GWN_batch_program_use_begin(batch);
+
+ gpuBindMatrices(batch->interface);
+
+ if (batch->elem)
+ {
+ const Gwn_IndexBuf* el = batch->elem;
+
+#if GWN_TRACK_INDEX_RANGE
+ if (el->base_index)
+ glDrawRangeElementsBaseVertex(batch->gl_prim_type, el->min_index, el->max_index, el->index_ct, el->gl_index_type, 0, el->base_index);
+ else
+ glDrawRangeElements(batch->gl_prim_type, el->min_index, el->max_index, el->index_ct, el->gl_index_type, 0);
+#else
+ glDrawElements(batch->gl_prim_type, el->index_ct, GL_UNSIGNED_INT, 0);
+#endif
+ }
+ else
+ glDrawArrays(batch->gl_prim_type, 0, batch->verts[0]->vertex_ct);
+
+ GWN_batch_program_use_end(batch);
+ glBindVertexArray(0);
+ }
+
+
+
+// clement : temp stuff
+void GWN_batch_draw_stupid(Gwn_Batch* batch, int v_first, int v_count)
+ {
+ if (batch->vao_id)
+ glBindVertexArray(batch->vao_id);
+ else
+ Batch_prime(batch);
+
+ if (batch->program_dirty)
+ Batch_update_program_bindings(batch, v_first);
+
+ // GWN_batch_program_use_begin(batch);
+
+ //gpuBindMatrices(batch->program);
+
+ // Infer lenght if vertex count is not given
+ if (v_count == 0) {
+ v_count = (batch->elem) ? batch->elem->index_ct : batch->verts[0]->vertex_ct;
+ }
+
+ if (batch->elem)
+ {
+ const Gwn_IndexBuf* el = batch->elem;
+
+#if GWN_TRACK_INDEX_RANGE
+ if (el->base_index)
+ glDrawRangeElementsBaseVertex(batch->gl_prim_type, el->min_index, el->max_index, v_count, el->gl_index_type, 0, el->base_index);
+ else
+ glDrawRangeElements(batch->gl_prim_type, el->min_index, el->max_index, v_count, el->gl_index_type, 0);
+#else
+ glDrawElements(batch->gl_prim_type, v_count, GL_UNSIGNED_INT, 0);
+#endif
+ }
+ else
+ glDrawArrays(batch->gl_prim_type, 0, v_count);
+
+ // GWN_batch_program_use_end(batch);
+ glBindVertexArray(0);
+ }
+
+// clement : temp stuff
+void GWN_batch_draw_stupid_instanced(Gwn_Batch* batch, unsigned int instance_vbo, int instance_first, int instance_count,
+ int attrib_nbr, int attrib_stride, int attrib_size[16], int attrib_loc[16])
+ {
+ if (batch->vao_id)
+ glBindVertexArray(batch->vao_id);
+ else
+ Batch_prime(batch);
+
+ if (batch->program_dirty)
+ Batch_update_program_bindings(batch, 0);
+
+ glBindBuffer(GL_ARRAY_BUFFER, instance_vbo);
+ int ptr_ofs = instance_first * attrib_stride;
+ for (int i = 0; i < attrib_nbr; ++i)
+ {
+ int size = attrib_size[i];
+ int loc = attrib_loc[i];
+ int atr_ofs = 0;
+
+ while (size > 0)
+ {
+ glEnableVertexAttribArray(loc + atr_ofs);
+ glVertexAttribPointer(loc + atr_ofs, (size > 4) ? 4 : size, GL_FLOAT, GL_FALSE,
+ sizeof(float) * attrib_stride, (GLvoid*)(sizeof(float) * ptr_ofs));
+ glVertexAttribDivisor(loc + atr_ofs, 1);
+ atr_ofs++;
+ ptr_ofs += (size > 4) ? 4 : size;
+ size -= 4;
+ }
+ }
+ glBindBuffer(GL_ARRAY_BUFFER, 0);
+
+ // GWN_batch_program_use_begin(batch);
+
+ //gpuBindMatrices(batch->program);
+
+ if (batch->elem)
+ {
+ const Gwn_IndexBuf* el = batch->elem;
+#if GWN_TRACK_INDEX_RANGE
+ glDrawElementsInstancedBaseVertex(batch->gl_prim_type, el->index_ct, el->gl_index_type, 0, instance_count, el->base_index);
+#else
+ glDrawElementsInstanced(batch->gl_prim_type, el->index_ct, GL_UNSIGNED_INT, 0, instance_count);
+#endif
+ }
+ else
+ glDrawArraysInstanced(batch->gl_prim_type, 0, batch->verts[0]->vertex_ct, instance_count);
+
+ // Reset divisor to prevent messing the next draw
+ for (unsigned a_idx = 0; a_idx < GWN_VERT_ATTR_MAX_LEN; ++a_idx)
+ glVertexAttribDivisor(a_idx, 0);
+
+ // GWN_batch_program_use_end(batch);
+ glBindVertexArray(0);
+ }
+
+void GWN_batch_draw_stupid_instanced_with_batch(Gwn_Batch* batch_instanced, Gwn_Batch* batch_instancing)
+ {
+ if (batch_instanced->vao_id)
+ glBindVertexArray(batch_instanced->vao_id);
+ else
+ Batch_prime(batch_instanced);
+
+ if (batch_instanced->program_dirty)
+ Batch_update_program_bindings(batch_instanced, 0);
+
+ Gwn_VertBuf* verts = batch_instancing->verts[0];
+
+ const Gwn_VertFormat* format = &verts->format;
+
+ const unsigned attrib_ct = format->attrib_ct;
+ const unsigned stride = format->stride;
+
+ GWN_vertbuf_use(verts);
+
+ for (unsigned a_idx = 0; a_idx < attrib_ct; ++a_idx)
+ {
+ const Gwn_VertAttr* a = format->attribs + a_idx;
+
+ const GLvoid* pointer = (const GLubyte*)0 + a->offset;
+
+ for (unsigned n_idx = 0; n_idx < a->name_ct; ++n_idx)
+ {
+ const Gwn_ShaderInput* input = GWN_shaderinterface_attr(batch_instanced->interface, a->name[n_idx]);
+
+ if (input == NULL) continue;
+
+ glEnableVertexAttribArray(input->location);
+ glVertexAttribDivisor(input->location, 1);
+
+ switch (a->fetch_mode)
+ {
+ case GWN_FETCH_FLOAT:
+ case GWN_FETCH_INT_TO_FLOAT:
+ glVertexAttribPointer(input->location, a->comp_ct, a->gl_comp_type, GL_FALSE, stride, pointer);
+ break;
+ case GWN_FETCH_INT_TO_FLOAT_UNIT:
+ glVertexAttribPointer(input->location, a->comp_ct, a->gl_comp_type, GL_TRUE, stride, pointer);
+ break;
+ case GWN_FETCH_INT:
+ glVertexAttribIPointer(input->location, a->comp_ct, a->gl_comp_type, stride, pointer);
+ }
+ }
+ }
+
+ // GWN_batch_program_use_begin(batch);
+
+ //gpuBindMatrices(batch->program);
+
+ if (batch_instanced->elem)
+ {
+ const Gwn_IndexBuf* el = batch_instanced->elem;
+
+#if GWN_TRACK_INDEX_RANGE
+ glDrawElementsInstancedBaseVertex(batch_instanced->gl_prim_type, el->index_ct, el->gl_index_type, 0, verts->vertex_ct, el->base_index);
+#else
+ glDrawElementsInstanced(batch_instanced->gl_prim_type, el->index_ct, GL_UNSIGNED_INT, 0, verts->vertex_ct);
+#endif
+ }
+ else
+ glDrawArraysInstanced(batch_instanced->gl_prim_type, 0, batch_instanced->verts[0]->vertex_ct, verts->vertex_ct);
+
+ // Reset divisor to prevent messing the next draw
+ for (unsigned a_idx = 0; a_idx < GWN_VERT_ATTR_MAX_LEN; ++a_idx)
+ glVertexAttribDivisor(a_idx, 0);
+
+ // GWN_batch_program_use_end(batch);
+ glBindVertexArray(0);
+ }
diff --git a/intern/gawain/src/gwn_buffer_id.cpp b/intern/gawain/src/gwn_buffer_id.cpp
new file mode 100644
index 00000000000..a93c3950d29
--- /dev/null
+++ b/intern/gawain/src/gwn_buffer_id.cpp
@@ -0,0 +1,115 @@
+
+// Gawain buffer IDs
+//
+// This code is part of the Gawain library, with modifications
+// specific to integration with Blender.
+//
+// Copyright 2016 Mike Erwin
+//
+// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of
+// the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.#include "buffer_id.h"
+
+#include "gwn_buffer_id.h"
+#include <mutex>
+#include <vector>
+
+#define ORPHAN_DEBUG 0
+
+#if ORPHAN_DEBUG
+ #include <cstdio>
+#endif
+
+static std::vector<GLuint> orphaned_buffer_ids;
+static std::vector<GLuint> orphaned_vao_ids;
+
+static std::mutex orphan_mutex;
+
+extern "C" {
+extern int BLI_thread_is_main(void); // Blender-specific function
+}
+
+static bool thread_is_main()
+ {
+ // "main" here means the GL context's thread
+ return BLI_thread_is_main();
+ }
+
+GLuint GWN_buf_id_alloc()
+ {
+#if TRUST_NO_ONE
+ assert(thread_is_main());
+#endif
+
+ // delete orphaned IDs
+ orphan_mutex.lock();
+ if (!orphaned_buffer_ids.empty())
+ {
+ const auto orphaned_buffer_ct = (unsigned)orphaned_buffer_ids.size();
+#if ORPHAN_DEBUG
+ printf("deleting %u orphaned VBO%s\n", orphaned_buffer_ct, orphaned_buffer_ct == 1 ? "" : "s");
+#endif
+ glDeleteBuffers(orphaned_buffer_ct, orphaned_buffer_ids.data());
+ orphaned_buffer_ids.clear();
+ }
+ orphan_mutex.unlock();
+
+ GLuint new_buffer_id = 0;
+ glGenBuffers(1, &new_buffer_id);
+ return new_buffer_id;
+ }
+
+void GWN_buf_id_free(GLuint buffer_id)
+ {
+ if (thread_is_main())
+ glDeleteBuffers(1, &buffer_id);
+ else
+ {
+ // add this ID to the orphaned list
+ orphan_mutex.lock();
+#if ORPHAN_DEBUG
+ printf("orphaning VBO %u\n", buffer_id);
+#endif
+ orphaned_buffer_ids.emplace_back(buffer_id);
+ orphan_mutex.unlock();
+ }
+ }
+
+GLuint GWN_vao_alloc()
+ {
+#if TRUST_NO_ONE
+ assert(thread_is_main());
+#endif
+
+ // delete orphaned IDs
+ orphan_mutex.lock();
+ if (!orphaned_vao_ids.empty())
+ {
+ const auto orphaned_vao_ct = (unsigned)orphaned_vao_ids.size();
+#if ORPHAN_DEBUG
+ printf("deleting %u orphaned VAO%s\n", orphaned_vao_ct, orphaned_vao_ct == 1 ? "" : "s");
+#endif
+ glDeleteVertexArrays(orphaned_vao_ct, orphaned_vao_ids.data());
+ orphaned_vao_ids.clear();
+ }
+ orphan_mutex.unlock();
+
+ GLuint new_vao_id = 0;
+ glGenVertexArrays(1, &new_vao_id);
+ return new_vao_id;
+ }
+
+void GWN_vao_free(GLuint vao_id)
+ {
+ if (thread_is_main())
+ glDeleteVertexArrays(1, &vao_id);
+ else
+ {
+ // add this ID to the orphaned list
+ orphan_mutex.lock();
+#if ORPHAN_DEBUG
+ printf("orphaning VAO %u\n", vao_id);
+#endif
+ orphaned_vao_ids.emplace_back(vao_id);
+ orphan_mutex.unlock();
+ }
+ }
diff --git a/intern/gawain/src/gwn_element.c b/intern/gawain/src/gwn_element.c
new file mode 100644
index 00000000000..f31b64fa232
--- /dev/null
+++ b/intern/gawain/src/gwn_element.c
@@ -0,0 +1,295 @@
+
+// Gawain element list (AKA index buffer)
+//
+// This code is part of the Gawain library, with modifications
+// specific to integration with Blender.
+//
+// Copyright 2016 Mike Erwin
+//
+// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of
+// the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
+#include "gwn_element.h"
+#include "gwn_buffer_id.h"
+#include <stdlib.h>
+
+#define KEEP_SINGLE_COPY 1
+
+static GLenum convert_index_type_to_gl(Gwn_IndexBufType type)
+ {
+ static const GLenum table[] = {
+ [GWN_INDEX_U8] = GL_UNSIGNED_BYTE, // GL has this, Vulkan does not
+ [GWN_INDEX_U16] = GL_UNSIGNED_SHORT,
+ [GWN_INDEX_U32] = GL_UNSIGNED_INT
+ };
+ return table[type];
+ }
+
+unsigned GWN_indexbuf_size_get(const Gwn_IndexBuf* elem)
+ {
+#if GWN_TRACK_INDEX_RANGE
+ static const unsigned table[] = {
+ [GWN_INDEX_U8] = sizeof(GLubyte), // GL has this, Vulkan does not
+ [GWN_INDEX_U16] = sizeof(GLushort),
+ [GWN_INDEX_U32] = sizeof(GLuint)
+ };
+ return elem->index_ct * table[elem->index_type];
+#else
+ return elem->index_ct * sizeof(GLuint);
+#endif
+ }
+
+static void ElementList_prime(Gwn_IndexBuf* elem)
+ {
+ elem->vbo_id = GWN_buf_id_alloc();
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, elem->vbo_id);
+ // fill with delicious data & send to GPU the first time only
+ glBufferData(GL_ELEMENT_ARRAY_BUFFER, GWN_indexbuf_size_get(elem), elem->data, GL_STATIC_DRAW);
+
+#if KEEP_SINGLE_COPY
+ // now that GL has a copy, discard original
+ free(elem->data);
+ elem->data = NULL;
+#endif
+ }
+
+void GWN_indexbuf_use(Gwn_IndexBuf* elem)
+ {
+ if (elem->vbo_id)
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, elem->vbo_id);
+ else
+ ElementList_prime(elem);
+ }
+
+void GWN_indexbuf_init(Gwn_IndexBufBuilder* builder, Gwn_PrimType prim_type, unsigned prim_ct, unsigned vertex_ct)
+ {
+ unsigned verts_per_prim = 0;
+ switch (prim_type)
+ {
+ case GWN_PRIM_POINTS:
+ verts_per_prim = 1;
+ break;
+ case GWN_PRIM_LINES:
+ verts_per_prim = 2;
+ break;
+ case GWN_PRIM_TRIS:
+ verts_per_prim = 3;
+ break;
+ default:
+#if TRUST_NO_ONE
+ assert(false);
+#endif
+ return;
+ }
+
+ builder->max_allowed_index = vertex_ct - 1;
+ builder->max_index_ct = prim_ct * verts_per_prim;
+ builder->index_ct = 0; // start empty
+ builder->prim_type = prim_type;
+ builder->data = calloc(builder->max_index_ct, sizeof(unsigned));
+ }
+
+void GWN_indexbuf_add_generic_vert(Gwn_IndexBufBuilder* builder, unsigned v)
+ {
+#if TRUST_NO_ONE
+ assert(builder->data != NULL);
+ assert(builder->index_ct < builder->max_index_ct);
+ assert(v <= builder->max_allowed_index);
+#endif
+
+ builder->data[builder->index_ct++] = v;
+ }
+
+void GWN_indexbuf_add_point_vert(Gwn_IndexBufBuilder* builder, unsigned v)
+ {
+#if TRUST_NO_ONE
+ assert(builder->prim_type == GWN_PRIM_POINTS);
+#endif
+
+ GWN_indexbuf_add_generic_vert(builder, v);
+ }
+
+void GWN_indexbuf_add_line_verts(Gwn_IndexBufBuilder* builder, unsigned v1, unsigned v2)
+ {
+#if TRUST_NO_ONE
+ assert(builder->prim_type == GWN_PRIM_LINES);
+ assert(v1 != v2);
+#endif
+
+ GWN_indexbuf_add_generic_vert(builder, v1);
+ GWN_indexbuf_add_generic_vert(builder, v2);
+ }
+
+void GWN_indexbuf_add_tri_verts(Gwn_IndexBufBuilder* builder, unsigned v1, unsigned v2, unsigned v3)
+ {
+#if TRUST_NO_ONE
+ assert(builder->prim_type == GWN_PRIM_TRIS);
+ assert(v1 != v2 && v2 != v3 && v3 != v1);
+#endif
+
+ GWN_indexbuf_add_generic_vert(builder, v1);
+ GWN_indexbuf_add_generic_vert(builder, v2);
+ GWN_indexbuf_add_generic_vert(builder, v3);
+ }
+
+#if GWN_TRACK_INDEX_RANGE
+// Everything remains 32 bit while building to keep things simple.
+// Find min/max after, then convert to smallest index type possible.
+
+static unsigned index_range(const unsigned values[], unsigned value_ct, unsigned* min_out, unsigned* max_out)
+ {
+ if (value_ct == 0)
+ {
+ *min_out = 0;
+ *max_out = 0;
+ return 0;
+ }
+ unsigned min_value = values[0];
+ unsigned max_value = values[0];
+ for (unsigned i = 1; i < value_ct; ++i)
+ {
+ const unsigned value = values[i];
+ if (value < min_value)
+ min_value = value;
+ else if (value > max_value)
+ max_value = value;
+ }
+ *min_out = min_value;
+ *max_out = max_value;
+ return max_value - min_value;
+ }
+
+static void squeeze_indices_byte(const unsigned values[], Gwn_IndexBuf* elem)
+ {
+ const unsigned index_ct = elem->index_ct;
+ GLubyte* data = malloc(index_ct * sizeof(GLubyte));
+
+ if (elem->max_index > 0xFF)
+ {
+ const unsigned base = elem->min_index;
+
+ elem->base_index = base;
+ elem->min_index = 0;
+ elem->max_index -= base;
+
+ for (unsigned i = 0; i < index_ct; ++i)
+ data[i] = (GLubyte)(values[i] - base);
+ }
+ else
+ {
+ elem->base_index = 0;
+
+ for (unsigned i = 0; i < index_ct; ++i)
+ data[i] = (GLubyte)(values[i]);
+ }
+
+ elem->data = data;
+ }
+
+static void squeeze_indices_short(const unsigned values[], Gwn_IndexBuf* elem)
+ {
+ const unsigned index_ct = elem->index_ct;
+ GLushort* data = malloc(index_ct * sizeof(GLushort));
+
+ if (elem->max_index > 0xFFFF)
+ {
+ const unsigned base = elem->min_index;
+
+ elem->base_index = base;
+ elem->min_index = 0;
+ elem->max_index -= base;
+
+ for (unsigned i = 0; i < index_ct; ++i)
+ data[i] = (GLushort)(values[i] - base);
+ }
+ else
+ {
+ elem->base_index = 0;
+
+ for (unsigned i = 0; i < index_ct; ++i)
+ data[i] = (GLushort)(values[i]);
+ }
+
+ elem->data = data;
+ }
+
+#endif // GWN_TRACK_INDEX_RANGE
+
+Gwn_IndexBuf* GWN_indexbuf_build(Gwn_IndexBufBuilder* builder)
+ {
+ Gwn_IndexBuf* elem = calloc(1, sizeof(Gwn_IndexBuf));
+ GWN_indexbuf_build_in_place(builder, elem);
+ return elem;
+ }
+
+void GWN_indexbuf_build_in_place(Gwn_IndexBufBuilder* builder, Gwn_IndexBuf* elem)
+ {
+#if TRUST_NO_ONE
+ assert(builder->data != NULL);
+#endif
+
+ elem->index_ct = builder->index_ct;
+
+#if GWN_TRACK_INDEX_RANGE
+ const unsigned range = index_range(builder->data, builder->index_ct, &elem->min_index, &elem->max_index);
+
+ if (range <= 0xFF)
+ {
+ elem->index_type = GWN_INDEX_U8;
+ squeeze_indices_byte(builder->data, elem);
+ }
+ else if (range <= 0xFFFF)
+ {
+ elem->index_type = GWN_INDEX_U16;
+ squeeze_indices_short(builder->data, elem);
+ }
+ else
+ {
+ elem->index_type = GWN_INDEX_U32;
+ elem->base_index = 0;
+
+ if (builder->index_ct < builder->max_index_ct)
+ {
+ builder->data = realloc(builder->data, builder->index_ct * sizeof(unsigned));
+ // TODO: realloc only if index_ct is much smaller than max_index_ct
+ }
+
+ elem->data = builder->data;
+ }
+
+ elem->gl_index_type = convert_index_type_to_gl(elem->index_type);
+#else
+ if (builder->index_ct < builder->max_index_ct)
+ {
+ builder->data = realloc(builder->data, builder->index_ct * sizeof(unsigned));
+ // TODO: realloc only if index_ct is much smaller than max_index_ct
+ }
+
+ elem->data = builder->data;
+#endif
+
+ // elem->data will never be *larger* than builder->data... how about converting
+ // in place to avoid extra allocation?
+
+ elem->vbo_id = 0;
+ // TODO: create GL buffer object directly, based on an input flag
+
+ // discard builder (one-time use)
+ if (builder->data != elem->data)
+ free(builder->data);
+ builder->data = NULL;
+ // other fields are safe to leave
+ }
+
+void GWN_indexbuf_discard(Gwn_IndexBuf* elem)
+ {
+ if (elem->vbo_id)
+ GWN_buf_id_free(elem->vbo_id);
+#if KEEP_SINGLE_COPY
+ else
+#endif
+ if (elem->data)
+ free(elem->data);
+
+ free(elem);
+ }
diff --git a/intern/gawain/src/gwn_imm_util.c b/intern/gawain/src/gwn_imm_util.c
new file mode 100644
index 00000000000..45d8a7036e8
--- /dev/null
+++ b/intern/gawain/src/gwn_imm_util.c
@@ -0,0 +1,46 @@
+
+// Gawain immediate mode drawing utilities
+//
+// This code is part of the Gawain library, with modifications
+// specific to integration with Blender.
+//
+// Copyright 2016 Mike Erwin
+//
+// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of
+// the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
+#include "gwn_imm_util.h"
+#include "gwn_immediate.h"
+
+
+void immRectf(unsigned pos, float x1, float y1, float x2, float y2)
+ {
+ immBegin(GWN_PRIM_TRI_FAN, 4);
+ immVertex2f(pos, x1, y1);
+ immVertex2f(pos, x2, y1);
+ immVertex2f(pos, x2, y2);
+ immVertex2f(pos, x1, y2);
+ immEnd();
+ }
+
+void immRecti(unsigned pos, int x1, int y1, int x2, int y2)
+ {
+ immBegin(GWN_PRIM_TRI_FAN, 4);
+ immVertex2i(pos, x1, y1);
+ immVertex2i(pos, x2, y1);
+ immVertex2i(pos, x2, y2);
+ immVertex2i(pos, x1, y2);
+ immEnd();
+ }
+
+#if 0 // more complete version in case we want that
+void immRecti_complete(int x1, int y1, int x2, int y2, const float color[4])
+ {
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned pos = add_attrib(format, "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor4fv(color);
+ immRecti(pos, x1, y1, x2, y2);
+ immUnbindProgram();
+ }
+#endif
diff --git a/intern/gawain/src/gwn_immediate.c b/intern/gawain/src/gwn_immediate.c
new file mode 100644
index 00000000000..1c0776d1bbf
--- /dev/null
+++ b/intern/gawain/src/gwn_immediate.c
@@ -0,0 +1,919 @@
+
+// Gawain immediate mode work-alike
+//
+// This code is part of the Gawain library, with modifications
+// specific to integration with Blender.
+//
+// Copyright 2016 Mike Erwin
+//
+// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of
+// the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
+#include "gwn_immediate.h"
+#include "gwn_buffer_id.h"
+#include "gwn_attr_binding.h"
+#include "gwn_attr_binding_private.h"
+#include "gwn_vertex_format_private.h"
+#include "gwn_primitive_private.h"
+#include <string.h>
+
+// necessary functions from matrix API
+extern void gpuBindMatrices(const Gwn_ShaderInterface*);
+extern bool gpuMatricesDirty(void);
+
+typedef struct {
+ // TODO: organize this struct by frequency of change (run-time)
+
+#if IMM_BATCH_COMBO
+ Gwn_Batch* batch;
+#endif
+
+ // current draw call
+ GLubyte* buffer_data;
+ unsigned buffer_offset;
+ unsigned buffer_bytes_mapped;
+ unsigned vertex_ct;
+ bool strict_vertex_ct;
+ Gwn_PrimType prim_type;
+
+ Gwn_VertFormat vertex_format;
+
+ // current vertex
+ unsigned vertex_idx;
+ GLubyte* vertex_data;
+ uint16_t unassigned_attrib_bits; // which attributes of current vertex have not been given values?
+
+ GLuint vbo_id;
+ GLuint vao_id;
+
+ GLuint bound_program;
+ const Gwn_ShaderInterface* shader_interface;
+ Gwn_AttrBinding attrib_binding;
+ uint16_t prev_enabled_attrib_bits; // <-- only affects this VAO, so we're ok
+} Immediate;
+
+// size of internal buffer -- make this adjustable?
+#define IMM_BUFFER_SIZE (4 * 1024 * 1024)
+
+static bool initialized = false;
+static Immediate imm;
+
+void immInit(void)
+ {
+#if TRUST_NO_ONE
+ assert(!initialized);
+#endif
+
+ memset(&imm, 0, sizeof(Immediate));
+
+ imm.vbo_id = GWN_buf_id_alloc();
+ glBindBuffer(GL_ARRAY_BUFFER, imm.vbo_id);
+ glBufferData(GL_ARRAY_BUFFER, IMM_BUFFER_SIZE, NULL, GL_DYNAMIC_DRAW);
+
+ imm.prim_type = GWN_PRIM_NONE;
+ imm.strict_vertex_ct = true;
+
+ glBindBuffer(GL_ARRAY_BUFFER, 0);
+ initialized = true;
+
+ immActivate();
+ }
+
+void immActivate(void)
+ {
+#if TRUST_NO_ONE
+ assert(initialized);
+ assert(imm.prim_type == GWN_PRIM_NONE); // make sure we're not between a Begin/End pair
+ assert(imm.vao_id == 0);
+#endif
+
+ imm.vao_id = GWN_vao_alloc();
+ }
+
+void immDeactivate(void)
+ {
+#if TRUST_NO_ONE
+ assert(initialized);
+ assert(imm.prim_type == GWN_PRIM_NONE); // make sure we're not between a Begin/End pair
+ assert(imm.vao_id != 0);
+#endif
+
+ GWN_vao_free(imm.vao_id);
+ imm.vao_id = 0;
+ imm.prev_enabled_attrib_bits = 0;
+ }
+
+void immDestroy(void)
+ {
+ immDeactivate();
+ GWN_buf_id_free(imm.vbo_id);
+ initialized = false;
+ }
+
+Gwn_VertFormat* immVertexFormat(void)
+ {
+ GWN_vertformat_clear(&imm.vertex_format);
+ return &imm.vertex_format;
+ }
+
+void immBindProgram(GLuint program, const Gwn_ShaderInterface* shaderface)
+ {
+#if TRUST_NO_ONE
+ assert(imm.bound_program == 0);
+ assert(glIsProgram(program));
+#endif
+
+ imm.bound_program = program;
+ imm.shader_interface = shaderface;
+
+ if (!imm.vertex_format.packed)
+ VertexFormat_pack(&imm.vertex_format);
+
+ glUseProgram(program);
+ get_attrib_locations(&imm.vertex_format, &imm.attrib_binding, shaderface);
+ gpuBindMatrices(shaderface);
+ }
+
+void immUnbindProgram(void)
+ {
+#if TRUST_NO_ONE
+ assert(imm.bound_program != 0);
+#endif
+
+ glUseProgram(0);
+ imm.bound_program = 0;
+ }
+
+#if TRUST_NO_ONE
+static bool vertex_count_makes_sense_for_primitive(unsigned vertex_ct, Gwn_PrimType prim_type)
+ {
+ // does vertex_ct make sense for this primitive type?
+ if (vertex_ct == 0)
+ return false;
+
+ switch (prim_type)
+ {
+ case GWN_PRIM_POINTS:
+ return true;
+ case GWN_PRIM_LINES:
+ return vertex_ct % 2 == 0;
+ case GWN_PRIM_LINE_STRIP:
+ case GWN_PRIM_LINE_LOOP:
+ return vertex_ct >= 2;
+ case GWN_PRIM_LINE_STRIP_ADJ:
+ return vertex_ct >= 4;
+ case GWN_PRIM_TRIS:
+ return vertex_ct % 3 == 0;
+ case GWN_PRIM_TRI_STRIP:
+ case GWN_PRIM_TRI_FAN:
+ return vertex_ct >= 3;
+ default:
+ return false;
+ }
+ }
+#endif
+
+void immBegin(Gwn_PrimType prim_type, unsigned vertex_ct)
+ {
+#if TRUST_NO_ONE
+ assert(initialized);
+ assert(imm.prim_type == GWN_PRIM_NONE); // make sure we haven't already begun
+ assert(vertex_count_makes_sense_for_primitive(vertex_ct, prim_type));
+#endif
+
+ imm.prim_type = prim_type;
+ imm.vertex_ct = vertex_ct;
+ imm.vertex_idx = 0;
+ imm.unassigned_attrib_bits = imm.attrib_binding.enabled_bits;
+
+ // how many bytes do we need for this draw call?
+ const unsigned bytes_needed = vertex_buffer_size(&imm.vertex_format, vertex_ct);
+
+#if TRUST_NO_ONE
+ assert(bytes_needed <= IMM_BUFFER_SIZE);
+#endif
+
+ glBindBuffer(GL_ARRAY_BUFFER, imm.vbo_id);
+
+ // does the current buffer have enough room?
+ const unsigned available_bytes = IMM_BUFFER_SIZE - imm.buffer_offset;
+ // ensure vertex data is aligned
+ const unsigned pre_padding = padding(imm.buffer_offset, imm.vertex_format.stride); // might waste a little space, but it's safe
+ if ((bytes_needed + pre_padding) <= available_bytes)
+ imm.buffer_offset += pre_padding;
+ else
+ {
+ // orphan this buffer & start with a fresh one
+#if 1
+ // this method works on all platforms, old & new
+ glBufferData(GL_ARRAY_BUFFER, IMM_BUFFER_SIZE, NULL, GL_DYNAMIC_DRAW);
+#else
+ // TODO: use other (more recent) methods after thorough testing
+ if (GLEW_VERSION_4_3 || GLEW_ARB_invalidate_subdata)
+ glInvalidateBufferData(imm.vbo_id);
+ else
+ {
+ // glitches!
+// glMapBufferRange(GL_ARRAY_BUFFER, 0, IMM_BUFFER_SIZE, GL_MAP_INVALIDATE_BUFFER_BIT);
+
+ // works
+// glMapBufferRange(GL_ARRAY_BUFFER, 0, IMM_BUFFER_SIZE,
+// GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT | GL_MAP_UNSYNCHRONIZED_BIT | GL_MAP_FLUSH_EXPLICIT_BIT);
+// glUnmapBuffer(GL_ARRAY_BUFFER);
+
+ // also works
+ glBufferData(GL_ARRAY_BUFFER, IMM_BUFFER_SIZE, NULL, GL_DYNAMIC_DRAW);
+ }
+#endif
+
+ imm.buffer_offset = 0;
+ }
+
+// printf("mapping %u to %u\n", imm.buffer_offset, imm.buffer_offset + bytes_needed - 1);
+
+ imm.buffer_data = glMapBufferRange(GL_ARRAY_BUFFER, imm.buffer_offset, bytes_needed,
+ GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT | (imm.strict_vertex_ct ? 0 : GL_MAP_FLUSH_EXPLICIT_BIT));
+
+#if TRUST_NO_ONE
+ assert(imm.buffer_data != NULL);
+#endif
+
+ imm.buffer_bytes_mapped = bytes_needed;
+ imm.vertex_data = imm.buffer_data;
+ }
+
+void immBeginAtMost(Gwn_PrimType prim_type, unsigned vertex_ct)
+ {
+#if TRUST_NO_ONE
+ assert(vertex_ct > 0);
+#endif
+
+ imm.strict_vertex_ct = false;
+ immBegin(prim_type, vertex_ct);
+ }
+
+#if IMM_BATCH_COMBO
+
+Gwn_Batch* immBeginBatch(Gwn_PrimType prim_type, unsigned vertex_ct)
+ {
+#if TRUST_NO_ONE
+ assert(initialized);
+ assert(imm.prim_type == GWN_PRIM_NONE); // make sure we haven't already begun
+ assert(vertex_count_makes_sense_for_primitive(vertex_ct, prim_type));
+#endif
+
+ imm.prim_type = prim_type;
+ imm.vertex_ct = vertex_ct;
+ imm.vertex_idx = 0;
+ imm.unassigned_attrib_bits = imm.attrib_binding.enabled_bits;
+
+ Gwn_VertBuf* verts = GWN_vertbuf_create_with_format(&imm.vertex_format);
+ GWN_vertbuf_data_alloc(verts, vertex_ct);
+
+ imm.buffer_bytes_mapped = GWN_vertbuf_size_get(verts);
+ imm.vertex_data = verts->data;
+
+ imm.batch = GWN_batch_create(prim_type, verts, NULL);
+ imm.batch->phase = GWN_BATCH_BUILDING;
+
+ GWN_batch_program_set(imm.batch, imm.bound_program, imm.shader_interface);
+
+ return imm.batch;
+ }
+
+Gwn_Batch* immBeginBatchAtMost(Gwn_PrimType prim_type, unsigned vertex_ct)
+ {
+ imm.strict_vertex_ct = false;
+ return immBeginBatch(prim_type, vertex_ct);
+ }
+
+#endif // IMM_BATCH_COMBO
+
+static void immDrawSetup(void)
+ {
+ // set up VAO -- can be done during Begin or End really
+ glBindVertexArray(imm.vao_id);
+
+ // enable/disable vertex attribs as needed
+ if (imm.attrib_binding.enabled_bits != imm.prev_enabled_attrib_bits)
+ {
+ for (unsigned loc = 0; loc < GWN_VERT_ATTR_MAX_LEN; ++loc)
+ {
+ bool is_enabled = imm.attrib_binding.enabled_bits & (1 << loc);
+ bool was_enabled = imm.prev_enabled_attrib_bits & (1 << loc);
+
+ if (is_enabled && !was_enabled)
+ {
+// printf("enabling attrib %u\n", loc);
+ glEnableVertexAttribArray(loc);
+ }
+ else if (was_enabled && !is_enabled)
+ {
+// printf("disabling attrib %u\n", loc);
+ glDisableVertexAttribArray(loc);
+ }
+ }
+
+ imm.prev_enabled_attrib_bits = imm.attrib_binding.enabled_bits;
+ }
+
+ const unsigned stride = imm.vertex_format.stride;
+
+ for (unsigned a_idx = 0; a_idx < imm.vertex_format.attrib_ct; ++a_idx)
+ {
+ const Gwn_VertAttr* a = imm.vertex_format.attribs + a_idx;
+
+ const unsigned offset = imm.buffer_offset + a->offset;
+ const GLvoid* pointer = (const GLubyte*)0 + offset;
+
+ const unsigned loc = read_attrib_location(&imm.attrib_binding, a_idx);
+
+// printf("specifying attrib %u '%s' with offset %u, stride %u\n", loc, a->name, offset, stride);
+
+ switch (a->fetch_mode)
+ {
+ case GWN_FETCH_FLOAT:
+ case GWN_FETCH_INT_TO_FLOAT:
+ glVertexAttribPointer(loc, a->comp_ct, a->gl_comp_type, GL_FALSE, stride, pointer);
+ break;
+ case GWN_FETCH_INT_TO_FLOAT_UNIT:
+ glVertexAttribPointer(loc, a->comp_ct, a->gl_comp_type, GL_TRUE, stride, pointer);
+ break;
+ case GWN_FETCH_INT:
+ glVertexAttribIPointer(loc, a->comp_ct, a->gl_comp_type, stride, pointer);
+ }
+ }
+
+ if (gpuMatricesDirty())
+ gpuBindMatrices(imm.shader_interface);
+ }
+
+void immEnd(void)
+ {
+#if TRUST_NO_ONE
+ assert(imm.prim_type != GWN_PRIM_NONE); // make sure we're between a Begin/End pair
+#endif
+
+ unsigned buffer_bytes_used;
+ if (imm.strict_vertex_ct)
+ {
+#if TRUST_NO_ONE
+ assert(imm.vertex_idx == imm.vertex_ct); // with all vertices defined
+#endif
+ buffer_bytes_used = imm.buffer_bytes_mapped;
+ }
+ else
+ {
+#if TRUST_NO_ONE
+ assert(imm.vertex_idx <= imm.vertex_ct);
+#endif
+ // printf("used %u of %u verts,", imm.vertex_idx, imm.vertex_ct);
+ if (imm.vertex_idx == imm.vertex_ct)
+ {
+ buffer_bytes_used = imm.buffer_bytes_mapped;
+ }
+ else
+ {
+#if TRUST_NO_ONE
+ assert(imm.vertex_idx == 0 || vertex_count_makes_sense_for_primitive(imm.vertex_idx, imm.prim_type));
+#endif
+ imm.vertex_ct = imm.vertex_idx;
+ buffer_bytes_used = vertex_buffer_size(&imm.vertex_format, imm.vertex_ct);
+ // unused buffer bytes are available to the next immBegin
+ // printf(" %u of %u bytes\n", buffer_bytes_used, imm.buffer_bytes_mapped);
+ }
+
+ // tell OpenGL what range was modified so it doesn't copy the whole mapped range
+ // printf("flushing %u to %u\n", imm.buffer_offset, imm.buffer_offset + buffer_bytes_used - 1);
+ glFlushMappedBufferRange(GL_ARRAY_BUFFER, 0, buffer_bytes_used);
+ }
+
+#if IMM_BATCH_COMBO
+ if (imm.batch)
+ {
+ if (buffer_bytes_used != imm.buffer_bytes_mapped)
+ {
+ GWN_vertbuf_data_resize(imm.batch->verts[0], imm.vertex_ct);
+ // TODO: resize only if vertex count is much smaller
+ }
+
+ imm.batch->phase = GWN_BATCH_READY_TO_DRAW;
+ imm.batch = NULL; // don't free, batch belongs to caller
+ }
+ else
+#endif
+ {
+ glUnmapBuffer(GL_ARRAY_BUFFER);
+
+ if (imm.vertex_ct > 0)
+ {
+ immDrawSetup();
+ glDrawArrays(convert_prim_type_to_gl(imm.prim_type), 0, imm.vertex_ct);
+ }
+
+ glBindBuffer(GL_ARRAY_BUFFER, 0);
+ glBindVertexArray(0);
+
+ // prep for next immBegin
+ imm.buffer_offset += buffer_bytes_used;
+ }
+
+ // prep for next immBegin
+ imm.prim_type = GWN_PRIM_NONE;
+ imm.strict_vertex_ct = true;
+ }
+
+static void setAttribValueBit(unsigned attrib_id)
+ {
+ uint16_t mask = 1 << attrib_id;
+
+#if TRUST_NO_ONE
+ assert(imm.unassigned_attrib_bits & mask); // not already set
+#endif
+
+ imm.unassigned_attrib_bits &= ~mask;
+ }
+
+
+// --- generic attribute functions ---
+
+void immAttrib1f(unsigned attrib_id, float x)
+ {
+ Gwn_VertAttr* attrib = imm.vertex_format.attribs + attrib_id;
+
+#if TRUST_NO_ONE
+ assert(attrib_id < imm.vertex_format.attrib_ct);
+ assert(attrib->comp_type == GWN_COMP_F32);
+ assert(attrib->comp_ct == 1);
+ assert(imm.vertex_idx < imm.vertex_ct);
+ assert(imm.prim_type != GWN_PRIM_NONE); // make sure we're between a Begin/End pair
+#endif
+
+ setAttribValueBit(attrib_id);
+
+ float* data = (float*)(imm.vertex_data + attrib->offset);
+// printf("%s %td %p\n", __FUNCTION__, (GLubyte*)data - imm.buffer_data, data);
+
+ data[0] = x;
+ }
+
+void immAttrib2f(unsigned attrib_id, float x, float y)
+ {
+ Gwn_VertAttr* attrib = imm.vertex_format.attribs + attrib_id;
+
+#if TRUST_NO_ONE
+ assert(attrib_id < imm.vertex_format.attrib_ct);
+ assert(attrib->comp_type == GWN_COMP_F32);
+ assert(attrib->comp_ct == 2);
+ assert(imm.vertex_idx < imm.vertex_ct);
+ assert(imm.prim_type != GWN_PRIM_NONE); // make sure we're between a Begin/End pair
+#endif
+
+ setAttribValueBit(attrib_id);
+
+ float* data = (float*)(imm.vertex_data + attrib->offset);
+// printf("%s %td %p\n", __FUNCTION__, (GLubyte*)data - imm.buffer_data, data);
+
+ data[0] = x;
+ data[1] = y;
+ }
+
+void immAttrib3f(unsigned attrib_id, float x, float y, float z)
+ {
+ Gwn_VertAttr* attrib = imm.vertex_format.attribs + attrib_id;
+
+#if TRUST_NO_ONE
+ assert(attrib_id < imm.vertex_format.attrib_ct);
+ assert(attrib->comp_type == GWN_COMP_F32);
+ assert(attrib->comp_ct == 3);
+ assert(imm.vertex_idx < imm.vertex_ct);
+ assert(imm.prim_type != GWN_PRIM_NONE); // make sure we're between a Begin/End pair
+#endif
+
+ setAttribValueBit(attrib_id);
+
+ float* data = (float*)(imm.vertex_data + attrib->offset);
+// printf("%s %td %p\n", __FUNCTION__, (GLubyte*)data - imm.buffer_data, data);
+
+ data[0] = x;
+ data[1] = y;
+ data[2] = z;
+ }
+
+void immAttrib4f(unsigned attrib_id, float x, float y, float z, float w)
+ {
+ Gwn_VertAttr* attrib = imm.vertex_format.attribs + attrib_id;
+
+#if TRUST_NO_ONE
+ assert(attrib_id < imm.vertex_format.attrib_ct);
+ assert(attrib->comp_type == GWN_COMP_F32);
+ assert(attrib->comp_ct == 4);
+ assert(imm.vertex_idx < imm.vertex_ct);
+ assert(imm.prim_type != GWN_PRIM_NONE); // make sure we're between a Begin/End pair
+#endif
+
+ setAttribValueBit(attrib_id);
+
+ float* data = (float*)(imm.vertex_data + attrib->offset);
+// printf("%s %td %p\n", __FUNCTION__, (GLubyte*)data - imm.buffer_data, data);
+
+ data[0] = x;
+ data[1] = y;
+ data[2] = z;
+ data[3] = w;
+ }
+
+void immAttrib1u(unsigned attrib_id, unsigned x)
+ {
+ Gwn_VertAttr* attrib = imm.vertex_format.attribs + attrib_id;
+
+#if TRUST_NO_ONE
+ assert(attrib_id < imm.vertex_format.attrib_ct);
+ assert(attrib->comp_type == GWN_COMP_U32);
+ assert(attrib->comp_ct == 1);
+ assert(imm.vertex_idx < imm.vertex_ct);
+ assert(imm.prim_type != GWN_PRIM_NONE); // make sure we're between a Begin/End pair
+#endif
+
+ setAttribValueBit(attrib_id);
+
+ unsigned* data = (unsigned*)(imm.vertex_data + attrib->offset);
+
+ data[0] = x;
+ }
+
+void immAttrib2i(unsigned attrib_id, int x, int y)
+ {
+ Gwn_VertAttr* attrib = imm.vertex_format.attribs + attrib_id;
+
+#if TRUST_NO_ONE
+ assert(attrib_id < imm.vertex_format.attrib_ct);
+ assert(attrib->comp_type == GWN_COMP_I32);
+ assert(attrib->comp_ct == 2);
+ assert(imm.vertex_idx < imm.vertex_ct);
+ assert(imm.prim_type != GWN_PRIM_NONE); // make sure we're between a Begin/End pair
+#endif
+
+ setAttribValueBit(attrib_id);
+
+ int* data = (int*)(imm.vertex_data + attrib->offset);
+
+ data[0] = x;
+ data[1] = y;
+ }
+
+void immAttrib2s(unsigned attrib_id, short x, short y)
+ {
+ Gwn_VertAttr* attrib = imm.vertex_format.attribs + attrib_id;
+
+#if TRUST_NO_ONE
+ assert(attrib_id < imm.vertex_format.attrib_ct);
+ assert(attrib->comp_type == GWN_COMP_I16);
+ assert(attrib->comp_ct == 2);
+ assert(imm.vertex_idx < imm.vertex_ct);
+ assert(imm.prim_type != GWN_PRIM_NONE); // make sure we're between a Begin/End pair
+#endif
+
+ setAttribValueBit(attrib_id);
+
+ short* data = (short*)(imm.vertex_data + attrib->offset);
+
+ data[0] = x;
+ data[1] = y;
+ }
+
+void immAttrib2fv(unsigned attrib_id, const float data[2])
+ {
+ immAttrib2f(attrib_id, data[0], data[1]);
+ }
+
+void immAttrib3fv(unsigned attrib_id, const float data[3])
+ {
+ immAttrib3f(attrib_id, data[0], data[1], data[2]);
+ }
+
+void immAttrib4fv(unsigned attrib_id, const float data[4])
+ {
+ immAttrib4f(attrib_id, data[0], data[1], data[2], data[3]);
+ }
+
+void immAttrib3ub(unsigned attrib_id, unsigned char r, unsigned char g, unsigned char b)
+ {
+ Gwn_VertAttr* attrib = imm.vertex_format.attribs + attrib_id;
+
+#if TRUST_NO_ONE
+ assert(attrib_id < imm.vertex_format.attrib_ct);
+ assert(attrib->comp_type == GWN_COMP_U8);
+ assert(attrib->comp_ct == 3);
+ assert(imm.vertex_idx < imm.vertex_ct);
+ assert(imm.prim_type != GWN_PRIM_NONE); // make sure we're between a Begin/End pair
+#endif
+
+ setAttribValueBit(attrib_id);
+
+ GLubyte* data = imm.vertex_data + attrib->offset;
+// printf("%s %td %p\n", __FUNCTION__, data - imm.buffer_data, data);
+
+ data[0] = r;
+ data[1] = g;
+ data[2] = b;
+ }
+
+void immAttrib4ub(unsigned attrib_id, unsigned char r, unsigned char g, unsigned char b, unsigned char a)
+ {
+ Gwn_VertAttr* attrib = imm.vertex_format.attribs + attrib_id;
+
+#if TRUST_NO_ONE
+ assert(attrib_id < imm.vertex_format.attrib_ct);
+ assert(attrib->comp_type == GWN_COMP_U8);
+ assert(attrib->comp_ct == 4);
+ assert(imm.vertex_idx < imm.vertex_ct);
+ assert(imm.prim_type != GWN_PRIM_NONE); // make sure we're between a Begin/End pair
+#endif
+
+ setAttribValueBit(attrib_id);
+
+ GLubyte* data = imm.vertex_data + attrib->offset;
+// printf("%s %td %p\n", __FUNCTION__, data - imm.buffer_data, data);
+
+ data[0] = r;
+ data[1] = g;
+ data[2] = b;
+ data[3] = a;
+ }
+
+void immAttrib3ubv(unsigned attrib_id, const unsigned char data[3])
+ {
+ immAttrib3ub(attrib_id, data[0], data[1], data[2]);
+ }
+
+void immAttrib4ubv(unsigned attrib_id, const unsigned char data[4])
+ {
+ immAttrib4ub(attrib_id, data[0], data[1], data[2], data[3]);
+ }
+
+void immSkipAttrib(unsigned attrib_id)
+ {
+#if TRUST_NO_ONE
+ assert(attrib_id < imm.vertex_format.attrib_ct);
+ assert(imm.vertex_idx < imm.vertex_ct);
+ assert(imm.prim_type != GWN_PRIM_NONE); // make sure we're between a Begin/End pair
+#endif
+
+ setAttribValueBit(attrib_id);
+ }
+
+static void immEndVertex(void) // and move on to the next vertex
+ {
+#if TRUST_NO_ONE
+ assert(imm.prim_type != GWN_PRIM_NONE); // make sure we're between a Begin/End pair
+ assert(imm.vertex_idx < imm.vertex_ct);
+#endif
+
+ // have all attribs been assigned values?
+ // if not, copy value from previous vertex
+ if (imm.unassigned_attrib_bits)
+ {
+#if TRUST_NO_ONE
+ assert(imm.vertex_idx > 0); // first vertex must have all attribs specified
+#endif
+
+ for (unsigned a_idx = 0; a_idx < imm.vertex_format.attrib_ct; ++a_idx)
+ {
+ if ((imm.unassigned_attrib_bits >> a_idx) & 1)
+ {
+ const Gwn_VertAttr* a = imm.vertex_format.attribs + a_idx;
+
+// printf("copying %s from vertex %u to %u\n", a->name, imm.vertex_idx - 1, imm.vertex_idx);
+
+ GLubyte* data = imm.vertex_data + a->offset;
+ memcpy(data, data - imm.vertex_format.stride, a->sz);
+ // TODO: consolidate copy of adjacent attributes
+ }
+ }
+ }
+
+ imm.vertex_idx++;
+ imm.vertex_data += imm.vertex_format.stride;
+ imm.unassigned_attrib_bits = imm.attrib_binding.enabled_bits;
+ }
+
+void immVertex2f(unsigned attrib_id, float x, float y)
+ {
+ immAttrib2f(attrib_id, x, y);
+ immEndVertex();
+ }
+
+void immVertex3f(unsigned attrib_id, float x, float y, float z)
+ {
+ immAttrib3f(attrib_id, x, y, z);
+ immEndVertex();
+ }
+
+void immVertex2i(unsigned attrib_id, int x, int y)
+ {
+ immAttrib2i(attrib_id, x, y);
+ immEndVertex();
+ }
+
+void immVertex2s(unsigned attrib_id, short x, short y)
+ {
+ immAttrib2s(attrib_id, x, y);
+ immEndVertex();
+ }
+
+void immVertex2fv(unsigned attrib_id, const float data[2])
+ {
+ immAttrib2f(attrib_id, data[0], data[1]);
+ immEndVertex();
+ }
+
+void immVertex3fv(unsigned attrib_id, const float data[3])
+ {
+ immAttrib3f(attrib_id, data[0], data[1], data[2]);
+ immEndVertex();
+ }
+
+void immVertex2iv(unsigned attrib_id, const int data[2])
+ {
+ immAttrib2i(attrib_id, data[0], data[1]);
+ immEndVertex();
+ }
+
+
+// --- generic uniform functions ---
+
+#if 0
+ #if TRUST_NO_ONE
+ #define GET_UNIFORM const Gwn_ShaderInput* uniform = GWN_shaderinterface_uniform(imm.shader_interface, name); assert(uniform);
+ #else
+ #define GET_UNIFORM const Gwn_ShaderInput* uniform = GWN_shaderinterface_uniform(imm.shader_interface, name);
+ #endif
+#else
+ // NOTE: It is possible to have uniform fully optimized out from the shader.
+ // In this case we can't assert failure or allow NULL-pointer dereference.
+ // TODO(sergey): How can we detect existing-but-optimized-out uniform but still
+ // catch typos in uniform names passed to immUniform*() functions?
+ #define GET_UNIFORM const Gwn_ShaderInput* uniform = GWN_shaderinterface_uniform(imm.shader_interface, name); if (uniform == NULL) return;
+#endif
+
+void immUniform1f(const char* name, float x)
+ {
+ GET_UNIFORM
+ glUniform1f(uniform->location, x);
+ }
+
+void immUniform2f(const char* name, float x, float y)
+ {
+ GET_UNIFORM
+ glUniform2f(uniform->location, x, y);
+ }
+
+void immUniform2fv(const char* name, const float data[2])
+ {
+ GET_UNIFORM
+ glUniform2fv(uniform->location, 1, data);
+ }
+
+void immUniform3f(const char* name, float x, float y, float z)
+ {
+ GET_UNIFORM
+ glUniform3f(uniform->location, x, y, z);
+ }
+
+void immUniform3fv(const char* name, const float data[3])
+ {
+ GET_UNIFORM
+ glUniform3fv(uniform->location, 1, data);
+ }
+
+// can increase this limit or move to another file
+#define MAX_UNIFORM_NAME_LEN 60
+
+void immUniformArray3fv(const char* bare_name, const float *data, int count)
+ {
+ // look up "name[0]" when given "name"
+ const size_t len = strlen(bare_name);
+#if TRUST_NO_ONE
+ assert(len <= MAX_UNIFORM_NAME_LEN);
+#endif
+ char name[MAX_UNIFORM_NAME_LEN];
+ strcpy(name, bare_name);
+ name[len + 0] = '[';
+ name[len + 1] = '0';
+ name[len + 2] = ']';
+ name[len + 3] = '\0';
+
+ GET_UNIFORM
+ glUniform3fv(uniform->location, count, data);
+ }
+
+void immUniform4f(const char* name, float x, float y, float z, float w)
+ {
+ GET_UNIFORM
+ glUniform4f(uniform->location, x, y, z, w);
+ }
+
+void immUniform4fv(const char* name, const float data[4])
+ {
+ GET_UNIFORM
+ glUniform4fv(uniform->location, 1, data);
+ }
+
+void immUniformArray4fv(const char* bare_name, const float *data, int count)
+ {
+ // look up "name[0]" when given "name"
+ const size_t len = strlen(bare_name);
+#if TRUST_NO_ONE
+ assert(len <= MAX_UNIFORM_NAME_LEN);
+#endif
+ char name[MAX_UNIFORM_NAME_LEN];
+ strcpy(name, bare_name);
+ name[len + 0] = '[';
+ name[len + 1] = '0';
+ name[len + 2] = ']';
+ name[len + 3] = '\0';
+
+ GET_UNIFORM
+ glUniform4fv(uniform->location, count, data);
+ }
+
+void immUniformMatrix4fv(const char* name, const float data[4][4])
+ {
+ GET_UNIFORM
+ glUniformMatrix4fv(uniform->location, 1, GL_FALSE, (float *)data);
+ }
+
+void immUniform1i(const char* name, int x)
+ {
+ GET_UNIFORM
+ glUniform1i(uniform->location, x);
+ }
+
+void immUniform4iv(const char* name, const int data[4])
+ {
+ GET_UNIFORM
+ glUniform4iv(uniform->location, 1, data);
+ }
+
+// --- convenience functions for setting "uniform vec4 color" ---
+
+void immUniformColor4f(float r, float g, float b, float a)
+ {
+ const Gwn_ShaderInput* uniform = GWN_shaderinterface_uniform_builtin(imm.shader_interface, GWN_UNIFORM_COLOR);
+
+#if TRUST_NO_ONE
+ assert(uniform != NULL);
+#endif
+
+ glUniform4f(uniform->location, r, g, b, a);
+ }
+
+void immUniformColor4fv(const float rgba[4])
+ {
+ immUniformColor4f(rgba[0], rgba[1], rgba[2], rgba[3]);
+ }
+
+void immUniformColor3f(float r, float g, float b)
+ {
+ immUniformColor4f(r, g, b, 1.0f);
+ }
+
+void immUniformColor3fv(const float rgb[3])
+ {
+ immUniformColor4f(rgb[0], rgb[1], rgb[2], 1.0f);
+ }
+
+void immUniformColor3fvAlpha(const float rgb[3], float a)
+ {
+ immUniformColor4f(rgb[0], rgb[1], rgb[2], a);
+ }
+
+// TODO: v-- treat as sRGB? --v
+
+void immUniformColor3ub(unsigned char r, unsigned char g, unsigned char b)
+ {
+ const float scale = 1.0f / 255.0f;
+ immUniformColor4f(scale * r, scale * g, scale * b, 1.0f);
+ }
+
+void immUniformColor4ub(unsigned char r, unsigned char g, unsigned char b, unsigned char a)
+ {
+ const float scale = 1.0f / 255.0f;
+ immUniformColor4f(scale * r, scale * g, scale * b, scale * a);
+ }
+
+void immUniformColor3ubv(const unsigned char rgb[3])
+ {
+ immUniformColor3ub(rgb[0], rgb[1], rgb[2]);
+ }
+
+void immUniformColor3ubvAlpha(const unsigned char rgb[3], unsigned char alpha)
+ {
+ immUniformColor4ub(rgb[0], rgb[1], rgb[2], alpha);
+ }
+
+void immUniformColor4ubv(const unsigned char rgba[4])
+ {
+ immUniformColor4ub(rgba[0], rgba[1], rgba[2], rgba[3]);
+ }
diff --git a/intern/gawain/src/gwn_primitive.c b/intern/gawain/src/gwn_primitive.c
new file mode 100644
index 00000000000..b206b3ae1b3
--- /dev/null
+++ b/intern/gawain/src/gwn_primitive.c
@@ -0,0 +1,63 @@
+
+// Gawain geometric primitives
+//
+// This code is part of the Gawain library, with modifications
+// specific to integration with Blender.
+//
+// Copyright 2017 Mike Erwin
+//
+// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of
+// the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
+#include "gwn_primitive.h"
+#include "gwn_primitive_private.h"
+
+Gwn_PrimClass GWN_primtype_class(Gwn_PrimType prim_type)
+ {
+ static const Gwn_PrimClass classes[] =
+ {
+ [GWN_PRIM_POINTS] = GWN_PRIM_CLASS_POINT,
+ [GWN_PRIM_LINES] = GWN_PRIM_CLASS_LINE,
+ [GWN_PRIM_LINE_STRIP] = GWN_PRIM_CLASS_LINE,
+ [GWN_PRIM_LINE_LOOP] = GWN_PRIM_CLASS_LINE,
+ [GWN_PRIM_TRIS] = GWN_PRIM_CLASS_SURFACE,
+ [GWN_PRIM_TRI_STRIP] = GWN_PRIM_CLASS_SURFACE,
+ [GWN_PRIM_TRI_FAN] = GWN_PRIM_CLASS_SURFACE,
+
+ [GWN_PRIM_LINE_STRIP_ADJ] = GWN_PRIM_CLASS_LINE,
+
+ [GWN_PRIM_NONE] = GWN_PRIM_CLASS_NONE
+ };
+
+ return classes[prim_type];
+ }
+
+bool GWN_primtype_belongs_to_class(Gwn_PrimType prim_type, Gwn_PrimClass prim_class)
+ {
+ if (prim_class == GWN_PRIM_CLASS_NONE && prim_type == GWN_PRIM_NONE)
+ return true;
+
+ return prim_class & GWN_primtype_class(prim_type);
+ }
+
+GLenum convert_prim_type_to_gl(Gwn_PrimType prim_type)
+ {
+#if TRUST_NO_ONE
+ assert(prim_type != GWN_PRIM_NONE);
+#endif
+
+ static const GLenum table[] =
+ {
+ [GWN_PRIM_POINTS] = GL_POINTS,
+ [GWN_PRIM_LINES] = GL_LINES,
+ [GWN_PRIM_LINE_STRIP] = GL_LINE_STRIP,
+ [GWN_PRIM_LINE_LOOP] = GL_LINE_LOOP,
+ [GWN_PRIM_TRIS] = GWN_PRIM_CLASS_SURFACE,
+ [GWN_PRIM_TRI_STRIP] = GL_TRIANGLE_STRIP,
+ [GWN_PRIM_TRI_FAN] = GL_TRIANGLE_FAN,
+
+ [GWN_PRIM_LINE_STRIP_ADJ] = GL_LINE_STRIP_ADJACENCY,
+ };
+
+ return table[prim_type];
+ }
diff --git a/intern/gawain/src/gwn_shader_interface.c b/intern/gawain/src/gwn_shader_interface.c
new file mode 100644
index 00000000000..1fb941f9225
--- /dev/null
+++ b/intern/gawain/src/gwn_shader_interface.c
@@ -0,0 +1,311 @@
+
+// Gawain shader interface (C --> GLSL)
+//
+// This code is part of the Gawain library, with modifications
+// specific to integration with Blender.
+//
+// Copyright 2017 Mike Erwin
+//
+// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of
+// the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
+#include "gwn_shader_interface.h"
+#include <stdlib.h>
+#include <stddef.h>
+#include <string.h>
+
+#define DEBUG_SHADER_INTERFACE 0
+
+#if DEBUG_SHADER_INTERFACE
+ #include <stdio.h>
+#endif
+
+static const char* BuiltinUniform_name(Gwn_UniformBuiltin u)
+ {
+ static const char* names[] =
+ {
+ [GWN_UNIFORM_NONE] = NULL,
+
+ [GWN_UNIFORM_MODEL] = "ModelMatrix",
+ [GWN_UNIFORM_VIEW] = "ViewMatrix",
+ [GWN_UNIFORM_MODELVIEW] = "ModelViewMatrix",
+ [GWN_UNIFORM_PROJECTION] = "ProjectionMatrix",
+ [GWN_UNIFORM_VIEWPROJECTION] = "ViewProjectionMatrix",
+ [GWN_UNIFORM_MVP] = "ModelViewProjectionMatrix",
+
+ [GWN_UNIFORM_MODEL_INV] = "ModelMatrixInverse",
+ [GWN_UNIFORM_VIEW_INV] = "ViewMatrixInverse",
+ [GWN_UNIFORM_MODELVIEW_INV] = "ModelViewMatrixInverse",
+ [GWN_UNIFORM_PROJECTION_INV] = "ProjectionMatrixInverse",
+ [GWN_UNIFORM_VIEWPROJECTION_INV] = "ViewProjectionMatrixInverse",
+
+ [GWN_UNIFORM_NORMAL] = "NormalMatrix",
+ [GWN_UNIFORM_WORLDNORMAL] = "WorldNormalMatrix",
+ [GWN_UNIFORM_CAMERATEXCO] = "CameraTexCoFactors",
+ [GWN_UNIFORM_ORCO] = "OrcoTexCoFactors",
+ [GWN_UNIFORM_CLIPPLANES] = "ClipPlanes",
+
+ [GWN_UNIFORM_COLOR] = "color",
+ [GWN_UNIFORM_EYE] = "eye",
+
+ [GWN_UNIFORM_CUSTOM] = NULL,
+ [GWN_NUM_UNIFORMS] = NULL,
+ };
+
+ return names[u];
+ }
+
+GWN_INLINE bool match(const char* a, const char* b)
+ {
+ return strcmp(a, b) == 0;
+ }
+
+GWN_INLINE unsigned hash_string(const char *str)
+ {
+ unsigned i = 0, c;
+
+ while ((c = *str++))
+ {
+ i = i * 37 + c;
+ }
+
+ return i;
+ }
+
+GWN_INLINE void set_input_name(Gwn_ShaderInterface* shaderface, Gwn_ShaderInput* input,
+ const char* name, uint32_t name_len)
+ {
+ input->name_offset = shaderface->name_buffer_offset;
+ input->name_hash = hash_string(name);
+ shaderface->name_buffer_offset += name_len + 1; // include NULL terminator
+ }
+
+GWN_INLINE void shader_input_to_bucket(Gwn_ShaderInput* input,
+ Gwn_ShaderInput* buckets[GWN_NUM_SHADERINTERFACE_BUCKETS])
+ {
+ const unsigned bucket_index = input->name_hash % GWN_NUM_SHADERINTERFACE_BUCKETS;
+ input->next = buckets[bucket_index];
+ buckets[bucket_index] = input;
+ }
+
+GWN_INLINE const Gwn_ShaderInput* buckets_lookup(Gwn_ShaderInput* const buckets[GWN_NUM_SHADERINTERFACE_BUCKETS],
+ const char *name_buffer, const char *name)
+ {
+ const unsigned name_hash = hash_string(name);
+ const unsigned bucket_index = name_hash % GWN_NUM_SHADERINTERFACE_BUCKETS;
+ const Gwn_ShaderInput* input = buckets[bucket_index];
+ if (input == NULL)
+ {
+ // Requested uniform is not found at all.
+ return NULL;
+ }
+ // Optimization bit: if there is no hash collision detected when constructing shader interface
+ // it means we can only request the single possible uniform. Surely, it's possible we request
+ // uniform which causes hash collision, but that will be detected in debug builds.
+ if (input->next == NULL)
+ {
+ if (name_hash == input->name_hash)
+ {
+#if TRUST_NO_ONE
+ assert(match(name_buffer + input->name_offset, name));
+#endif
+ return input;
+ }
+ return NULL;
+ }
+ // Work through possible collisions.
+ const Gwn_ShaderInput* next = input;
+ while (next != NULL)
+ {
+ input = next;
+ next = input->next;
+
+ if (input->name_hash != name_hash)
+ {
+ continue;
+ }
+ if (match(name_buffer + input->name_offset, name))
+ {
+ return input;
+ }
+ }
+ return NULL; // not found
+ }
+
+GWN_INLINE void buckets_free(Gwn_ShaderInput* buckets[GWN_NUM_SHADERINTERFACE_BUCKETS])
+ {
+ for (unsigned bucket_index = 0; bucket_index < GWN_NUM_SHADERINTERFACE_BUCKETS; ++bucket_index)
+ {
+ Gwn_ShaderInput *input = buckets[bucket_index];
+ while (input != NULL)
+ {
+ Gwn_ShaderInput *input_next = input->next;
+ free(input);
+ input = input_next;
+ }
+ }
+ }
+
+static bool setup_builtin_uniform(Gwn_ShaderInput* input, const char* name)
+ {
+ // TODO: reject DOUBLE, IMAGE, ATOMIC_COUNTER gl_types
+
+ // detect built-in uniforms (name must match)
+ for (Gwn_UniformBuiltin u = GWN_UNIFORM_NONE + 1; u < GWN_UNIFORM_CUSTOM; ++u)
+ {
+ const char* builtin_name = BuiltinUniform_name(u);
+ if (match(name, builtin_name))
+ {
+ input->builtin_type = u;
+ return true;
+ }
+ }
+
+ input->builtin_type = GWN_UNIFORM_CUSTOM;
+ return false;
+ }
+
+static const Gwn_ShaderInput* add_uniform(Gwn_ShaderInterface* shaderface, const char* name)
+ {
+ Gwn_ShaderInput* input = malloc(sizeof(Gwn_ShaderInput));
+
+ input->location = glGetUniformLocation(shaderface->program, name);
+
+ unsigned name_len = strlen(name);
+ shaderface->name_buffer = realloc(shaderface->name_buffer, shaderface->name_buffer_offset + name_len + 1); // include NULL terminator
+ char* name_buffer = shaderface->name_buffer + shaderface->name_buffer_offset;
+ strcpy(name_buffer, name);
+
+ set_input_name(shaderface, input, name, name_len);
+ setup_builtin_uniform(input, name);
+
+ shader_input_to_bucket(input, shaderface->uniform_buckets);
+ if (input->builtin_type != GWN_UNIFORM_NONE &&
+ input->builtin_type != GWN_UNIFORM_CUSTOM)
+ {
+ shaderface->builtin_uniforms[input->builtin_type] = input;
+ }
+#if DEBUG_SHADER_INTERFACE
+ printf("Gwn_ShaderInterface %p, program %d, uniform[] '%s' at location %d\n", shaderface, shaderface->program, name, input->location);
+#endif
+ return input;
+ }
+
+Gwn_ShaderInterface* GWN_shaderinterface_create(GLint program)
+ {
+ Gwn_ShaderInterface* shaderface = calloc(1, sizeof(Gwn_ShaderInterface));
+ shaderface->program = program;
+
+#if DEBUG_SHADER_INTERFACE
+ printf("%s {\n", __func__); // enter function
+ printf("Gwn_ShaderInterface %p, program %d\n", shaderface, program);
+#endif
+
+ GLint max_attrib_name_len, attrib_ct;
+ glGetProgramiv(program, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &max_attrib_name_len);
+ glGetProgramiv(program, GL_ACTIVE_ATTRIBUTES, &attrib_ct);
+
+ GLint max_ubo_name_len, ubo_ct;
+ glGetProgramiv(program, GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH, &max_ubo_name_len);
+ glGetProgramiv(program, GL_ACTIVE_UNIFORM_BLOCKS, &ubo_ct);
+
+ const uint32_t name_buffer_len = attrib_ct * max_attrib_name_len + ubo_ct * max_ubo_name_len;
+ shaderface->name_buffer = malloc(name_buffer_len);
+
+ // Attributes
+ for (uint32_t i = 0; i < attrib_ct; ++i)
+ {
+ Gwn_ShaderInput* input = malloc(sizeof(Gwn_ShaderInput));
+ GLsizei remaining_buffer = name_buffer_len - shaderface->name_buffer_offset;
+ char* name = shaderface->name_buffer + shaderface->name_buffer_offset;
+ GLsizei name_len = 0;
+
+ glGetActiveAttrib(program, i, remaining_buffer, &name_len, &input->size, &input->gl_type, name);
+
+ // TODO: reject DOUBLE gl_types
+
+ input->location = glGetAttribLocation(program, name);
+
+ set_input_name(shaderface, input, name, name_len);
+
+ shader_input_to_bucket(input, shaderface->attrib_buckets);
+
+#if DEBUG_SHADER_INTERFACE
+ printf("attrib[%u] '%s' at location %d\n", i, name, input->location);
+#endif
+ }
+
+ // Uniform Blocks
+ for (uint32_t i = 0; i < ubo_ct; ++i)
+ {
+ Gwn_ShaderInput* input = malloc(sizeof(Gwn_ShaderInput));
+ GLsizei remaining_buffer = name_buffer_len - shaderface->name_buffer_offset;
+ char* name = shaderface->name_buffer + shaderface->name_buffer_offset;
+ GLsizei name_len = 0;
+
+ glGetActiveUniformBlockName(program, i, remaining_buffer, &name_len, name);
+
+ input->location = i;
+
+ set_input_name(shaderface, input, name, name_len);
+
+ shader_input_to_bucket(input, shaderface->ubo_buckets);
+
+#if DEBUG_SHADER_INTERFACE
+ printf("attrib[%u] '%s' at location %d\n", i, name, input->location);
+#endif
+ }
+
+ return shaderface;
+ }
+
+void GWN_shaderinterface_discard(Gwn_ShaderInterface* shaderface)
+ {
+ // Free memory used by buckets and has entries.
+ buckets_free(shaderface->uniform_buckets);
+ buckets_free(shaderface->attrib_buckets);
+ buckets_free(shaderface->ubo_buckets);
+ // Free memory used by name_buffer.
+ free(shaderface->name_buffer);
+ // Free memory used by shader interface by its self.
+ free(shaderface);
+ }
+
+const Gwn_ShaderInput* GWN_shaderinterface_uniform(const Gwn_ShaderInterface* shaderface, const char* name)
+ {
+ // TODO: Warn if we find a matching builtin, since these can be looked up much quicker.
+ const Gwn_ShaderInput* input = buckets_lookup(shaderface->uniform_buckets, shaderface->name_buffer, name);
+
+ // If input is not found add it so it's found next time.
+ if (input == NULL)
+ input = add_uniform((Gwn_ShaderInterface*)shaderface, name);
+
+ return (input->location != -1) ? input : NULL;
+ }
+
+const Gwn_ShaderInput* GWN_shaderinterface_uniform_builtin(const Gwn_ShaderInterface* shaderface, Gwn_UniformBuiltin builtin)
+ {
+#if TRUST_NO_ONE
+ assert(builtin != GWN_UNIFORM_NONE);
+ assert(builtin != GWN_UNIFORM_CUSTOM);
+ assert(builtin != GWN_NUM_UNIFORMS);
+#endif
+
+ const Gwn_ShaderInput* input = shaderface->builtin_uniforms[builtin];
+
+ // If input is not found add it so it's found next time.
+ if (input == NULL)
+ input = add_uniform((Gwn_ShaderInterface*)shaderface, BuiltinUniform_name(builtin));
+
+ return (input->location != -1) ? input : NULL;
+ }
+
+const Gwn_ShaderInput* GWN_shaderinterface_ubo(const Gwn_ShaderInterface* shaderface, const char* name)
+ {
+ return buckets_lookup(shaderface->ubo_buckets, shaderface->name_buffer, name);
+ }
+
+const Gwn_ShaderInput* GWN_shaderinterface_attr(const Gwn_ShaderInterface* shaderface, const char* name)
+ {
+ return buckets_lookup(shaderface->attrib_buckets, shaderface->name_buffer, name);
+ }
diff --git a/intern/gawain/src/gwn_vertex_buffer.c b/intern/gawain/src/gwn_vertex_buffer.c
new file mode 100644
index 00000000000..2bab0bc378b
--- /dev/null
+++ b/intern/gawain/src/gwn_vertex_buffer.c
@@ -0,0 +1,242 @@
+
+// Gawain vertex buffer
+//
+// This code is part of the Gawain library, with modifications
+// specific to integration with Blender.
+//
+// Copyright 2016 Mike Erwin
+//
+// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of
+// the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
+#include "gwn_vertex_buffer.h"
+#include "gwn_buffer_id.h"
+#include "gwn_vertex_format_private.h"
+#include <stdlib.h>
+#include <string.h>
+
+#define KEEP_SINGLE_COPY 1
+
+static unsigned vbo_memory_usage;
+
+Gwn_VertBuf* GWN_vertbuf_create(void)
+ {
+ Gwn_VertBuf* verts = malloc(sizeof(Gwn_VertBuf));
+ GWN_vertbuf_init(verts);
+ return verts;
+ }
+
+Gwn_VertBuf* GWN_vertbuf_create_with_format(const Gwn_VertFormat* format)
+ {
+ Gwn_VertBuf* verts = GWN_vertbuf_create();
+ GWN_vertformat_copy(&verts->format, format);
+ if (!format->packed)
+ VertexFormat_pack(&verts->format);
+ return verts;
+
+ // this function might seem redundant, but there is potential for memory savings here...
+ // TODO: implement those memory savings
+ }
+
+void GWN_vertbuf_init(Gwn_VertBuf* verts)
+ {
+ memset(verts, 0, sizeof(Gwn_VertBuf));
+ }
+
+void GWN_vertbuf_init_with_format(Gwn_VertBuf* verts, const Gwn_VertFormat* format)
+ {
+ GWN_vertbuf_init(verts);
+ GWN_vertformat_copy(&verts->format, format);
+ if (!format->packed)
+ VertexFormat_pack(&verts->format);
+ }
+
+/**
+ * Like #GWN_vertbuf_discard but doesn't free.
+ */
+void GWN_vertbuf_clear(Gwn_VertBuf* verts)
+ {
+ if (verts->vbo_id) {
+ GWN_buf_id_free(verts->vbo_id);
+ vbo_memory_usage -= GWN_vertbuf_size_get(verts);
+ }
+#if KEEP_SINGLE_COPY
+ else
+#endif
+ if (verts->data && verts->own_data)
+ {
+ free(verts->data);
+ verts->data = NULL;
+ }
+ }
+
+void GWN_vertbuf_discard(Gwn_VertBuf* verts)
+ {
+ if (verts->vbo_id)
+ {
+ GWN_buf_id_free(verts->vbo_id);
+ vbo_memory_usage -= GWN_vertbuf_size_get(verts);
+ }
+#if KEEP_SINGLE_COPY
+ else
+#endif
+ if (verts->data && verts->own_data)
+ {
+ free(verts->data);
+ }
+
+
+ free(verts);
+ }
+
+unsigned GWN_vertbuf_size_get(const Gwn_VertBuf* verts)
+ {
+ return vertex_buffer_size(&verts->format, verts->vertex_ct);
+ }
+
+void GWN_vertbuf_data_alloc(Gwn_VertBuf* verts, unsigned v_ct)
+ {
+ Gwn_VertFormat* format = &verts->format;
+ if (!format->packed)
+ VertexFormat_pack(format);
+
+ verts->vertex_ct = v_ct;
+ verts->own_data = true;
+
+ // Data initially lives in main memory. Will be transferred to VRAM when we "prime" it.
+ verts->data = malloc(GWN_vertbuf_size_get(verts));
+ }
+
+void GWN_vertbuf_data_set(Gwn_VertBuf* verts, unsigned v_ct, void* data, bool pass_ownership)
+ {
+ Gwn_VertFormat* format = &verts->format;
+ if (!format->packed)
+ VertexFormat_pack(format);
+
+ verts->vertex_ct = v_ct;
+ verts->own_data = pass_ownership;
+
+ // Data initially lives in main memory. Will be transferred to VRAM when we "prime" it.
+ verts->data = data;
+ }
+
+void GWN_vertbuf_data_resize(Gwn_VertBuf* verts, unsigned v_ct)
+ {
+#if TRUST_NO_ONE
+ assert(verts->vertex_ct != v_ct); // allow this?
+ assert(verts->data != NULL); // has already been allocated
+ assert(verts->vbo_id == 0); // has not been sent to VRAM
+#endif
+
+ verts->vertex_ct = v_ct;
+ verts->data = realloc(verts->data, GWN_vertbuf_size_get(verts));
+ // TODO: skip realloc if v_ct < existing vertex count
+ // extra space will be reclaimed, and never sent to VRAM (see VertexBuffer_prime)
+ }
+
+void GWN_vertbuf_attr_set(Gwn_VertBuf* verts, unsigned a_idx, unsigned v_idx, const void* data)
+ {
+ const Gwn_VertFormat* format = &verts->format;
+ const Gwn_VertAttr* a = format->attribs + a_idx;
+
+#if TRUST_NO_ONE
+ assert(a_idx < format->attrib_ct);
+ assert(v_idx < verts->vertex_ct);
+ assert(verts->data != NULL); // data must be in main mem
+#endif
+
+ memcpy((GLubyte*)verts->data + a->offset + v_idx * format->stride, data, a->sz);
+ }
+
+void GWN_vertbuf_attr_fill(Gwn_VertBuf* verts, unsigned a_idx, const void* data)
+ {
+ const Gwn_VertFormat* format = &verts->format;
+ const Gwn_VertAttr* a = format->attribs + a_idx;
+
+#if TRUST_NO_ONE
+ assert(a_idx < format->attrib_ct);
+#endif
+
+ const unsigned stride = a->sz; // tightly packed input data
+
+ GWN_vertbuf_attr_fill_stride(verts, a_idx, stride, data);
+ }
+
+void GWN_vertbuf_attr_fill_stride(Gwn_VertBuf* verts, unsigned a_idx, unsigned stride, const void* data)
+ {
+ const Gwn_VertFormat* format = &verts->format;
+ const Gwn_VertAttr* a = format->attribs + a_idx;
+
+#if TRUST_NO_ONE
+ assert(a_idx < format->attrib_ct);
+ assert(verts->data != NULL); // data must be in main mem
+#endif
+
+ const unsigned vertex_ct = verts->vertex_ct;
+
+ if (format->attrib_ct == 1 && stride == format->stride)
+ {
+ // we can copy it all at once
+ memcpy(verts->data, data, vertex_ct * a->sz);
+ }
+ else
+ {
+ // we must copy it per vertex
+ for (unsigned v = 0; v < vertex_ct; ++v)
+ memcpy((GLubyte*)verts->data + a->offset + v * format->stride, (const GLubyte*)data + v * stride, a->sz);
+ }
+ }
+
+void GWN_vertbuf_attr_get_raw_data(Gwn_VertBuf* verts, unsigned a_idx, Gwn_VertBufRaw *access)
+ {
+ const Gwn_VertFormat* format = &verts->format;
+ const Gwn_VertAttr* a = format->attribs + a_idx;
+
+#if TRUST_NO_ONE
+ assert(a_idx < format->attrib_ct);
+ assert(verts->data != NULL); // data must be in main mem
+#endif
+
+ access->size = a->sz;
+ access->stride = format->stride;
+ access->data = (GLubyte*)verts->data + a->offset;
+ access->data_init = access->data;
+#if TRUST_NO_ONE
+ access->_data_end = access->data_init + (size_t)(verts->vertex_ct * format->stride);
+#endif
+ }
+
+
+static void VertexBuffer_prime(Gwn_VertBuf* verts)
+ {
+ const unsigned buffer_sz = GWN_vertbuf_size_get(verts);
+
+ verts->vbo_id = GWN_buf_id_alloc();
+ glBindBuffer(GL_ARRAY_BUFFER, verts->vbo_id);
+ // fill with delicious data & send to GPU the first time only
+ glBufferData(GL_ARRAY_BUFFER, buffer_sz, verts->data, GL_STATIC_DRAW);
+
+ vbo_memory_usage += buffer_sz;
+
+#if KEEP_SINGLE_COPY
+ // now that GL has a copy, discard original
+ if (verts->own_data)
+ {
+ free(verts->data);
+ verts->data = NULL;
+ }
+#endif
+ }
+
+void GWN_vertbuf_use(Gwn_VertBuf* verts)
+ {
+ if (verts->vbo_id)
+ glBindBuffer(GL_ARRAY_BUFFER, verts->vbo_id);
+ else
+ VertexBuffer_prime(verts);
+ }
+
+unsigned GWN_vertbuf_get_memory_usage(void)
+ {
+ return vbo_memory_usage;
+ }
diff --git a/intern/gawain/src/gwn_vertex_format.c b/intern/gawain/src/gwn_vertex_format.c
new file mode 100644
index 00000000000..d6367935703
--- /dev/null
+++ b/intern/gawain/src/gwn_vertex_format.c
@@ -0,0 +1,296 @@
+
+// Gawain vertex format
+//
+// This code is part of the Gawain library, with modifications
+// specific to integration with Blender.
+//
+// Copyright 2016 Mike Erwin
+//
+// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of
+// the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
+#include "gwn_vertex_format.h"
+#include "gwn_vertex_format_private.h"
+#include <stddef.h>
+#include <string.h>
+
+#define PACK_DEBUG 0
+
+#if PACK_DEBUG
+ #include <stdio.h>
+#endif
+
+void GWN_vertformat_clear(Gwn_VertFormat* format)
+ {
+#if TRUST_NO_ONE
+ memset(format, 0, sizeof(Gwn_VertFormat));
+#else
+ format->attrib_ct = 0;
+ format->packed = false;
+ format->name_offset = 0;
+ format->name_ct = 0;
+
+ for (unsigned i = 0; i < GWN_VERT_ATTR_MAX_LEN; i++)
+ {
+ format->attribs[i].name_ct = 0;
+ }
+#endif
+ }
+
+void GWN_vertformat_copy(Gwn_VertFormat* dest, const Gwn_VertFormat* src)
+ {
+ // copy regular struct fields
+ memcpy(dest, src, sizeof(Gwn_VertFormat));
+
+ for (unsigned i = 0; i < dest->attrib_ct; i++)
+ {
+ dest->attribs[i].name_ct = dest->attribs[i].name_ct;
+ for (unsigned j = 0; j < dest->attribs[i].name_ct; j++)
+ {
+ dest->attribs[i].name[j] = (char *)dest + (src->attribs[i].name[j] - ((char *)src));
+ }
+ }
+ }
+
+static GLenum convert_comp_type_to_gl(Gwn_VertCompType type)
+ {
+ static const GLenum table[] = {
+ [GWN_COMP_I8] = GL_BYTE,
+ [GWN_COMP_U8] = GL_UNSIGNED_BYTE,
+ [GWN_COMP_I16] = GL_SHORT,
+ [GWN_COMP_U16] = GL_UNSIGNED_SHORT,
+ [GWN_COMP_I32] = GL_INT,
+ [GWN_COMP_U32] = GL_UNSIGNED_INT,
+
+ [GWN_COMP_F32] = GL_FLOAT,
+
+ [GWN_COMP_I10] = GL_INT_2_10_10_10_REV
+ };
+ return table[type];
+ }
+
+static unsigned comp_sz(Gwn_VertCompType type)
+ {
+#if TRUST_NO_ONE
+ assert(type <= GWN_COMP_F32); // other types have irregular sizes (not bytes)
+#endif
+
+ const GLubyte sizes[] = {1,1,2,2,4,4,4};
+ return sizes[type];
+ }
+
+static unsigned attrib_sz(const Gwn_VertAttr *a)
+ {
+ if (a->comp_type == GWN_COMP_I10)
+ return 4; // always packed as 10_10_10_2
+
+ return a->comp_ct * comp_sz(a->comp_type);
+ }
+
+static unsigned attrib_align(const Gwn_VertAttr *a)
+ {
+ if (a->comp_type == GWN_COMP_I10)
+ return 4; // always packed as 10_10_10_2
+
+ unsigned c = comp_sz(a->comp_type);
+ if (a->comp_ct == 3 && c <= 2)
+ return 4 * c; // AMD HW can't fetch these well, so pad it out (other vendors too?)
+ else
+ return c; // most fetches are ok if components are naturally aligned
+ }
+
+unsigned vertex_buffer_size(const Gwn_VertFormat* format, unsigned vertex_ct)
+ {
+#if TRUST_NO_ONE
+ assert(format->packed && format->stride > 0);
+#endif
+
+ return format->stride * vertex_ct;
+ }
+
+static const char* copy_attrib_name(Gwn_VertFormat* format, const char* name)
+ {
+ // strncpy does 110% of what we need; let's do exactly 100%
+ char* name_copy = format->names + format->name_offset;
+ unsigned available = GWN_VERT_ATTR_NAMES_BUF_LEN - format->name_offset;
+ bool terminated = false;
+
+ for (unsigned i = 0; i < available; ++i)
+ {
+ const char c = name[i];
+ name_copy[i] = c;
+ if (c == '\0')
+ {
+ terminated = true;
+ format->name_offset += (i + 1);
+ break;
+ }
+ }
+
+#if TRUST_NO_ONE
+ assert(terminated);
+ assert(format->name_offset <= GWN_VERT_ATTR_NAMES_BUF_LEN);
+#else
+ (void)terminated;
+#endif
+
+ return name_copy;
+ }
+
+unsigned GWN_vertformat_attr_add(Gwn_VertFormat* format, const char* name, Gwn_VertCompType comp_type, unsigned comp_ct, Gwn_VertFetchMode fetch_mode)
+ {
+#if TRUST_NO_ONE
+ assert(format->name_ct < GWN_VERT_ATTR_MAX_LEN); // there's room for more
+ assert(format->attrib_ct < GWN_VERT_ATTR_MAX_LEN); // there's room for more
+ assert(!format->packed); // packed means frozen/locked
+ assert(comp_ct >= 1 && comp_ct <= 4);
+ switch (comp_type)
+ {
+ case GWN_COMP_F32:
+ // float type can only kept as float
+ assert(fetch_mode == GWN_FETCH_FLOAT);
+ break;
+ case GWN_COMP_I10:
+ // 10_10_10 format intended for normals (xyz) or colors (rgb)
+ // extra component packed.w can be manually set to { -2, -1, 0, 1 }
+ assert(comp_ct == 3 || comp_ct == 4);
+ assert(fetch_mode == GWN_FETCH_INT_TO_FLOAT_UNIT); // not strictly required, may relax later
+ break;
+ default:
+ // integer types can be kept as int or converted/normalized to float
+ assert(fetch_mode != GWN_FETCH_FLOAT);
+ }
+#endif
+ format->name_ct++; // multiname support
+
+ const unsigned attrib_id = format->attrib_ct++;
+ Gwn_VertAttr* attrib = format->attribs + attrib_id;
+
+ attrib->name[attrib->name_ct++] = copy_attrib_name(format, name);
+ attrib->comp_type = comp_type;
+ attrib->gl_comp_type = convert_comp_type_to_gl(comp_type);
+ attrib->comp_ct = (comp_type == GWN_COMP_I10) ? 4 : comp_ct; // system needs 10_10_10_2 to be 4 or BGRA
+ attrib->sz = attrib_sz(attrib);
+ attrib->offset = 0; // offsets & stride are calculated later (during pack)
+ attrib->fetch_mode = fetch_mode;
+
+ return attrib_id;
+ }
+
+void GWN_vertformat_alias_add(Gwn_VertFormat* format, const char* alias)
+ {
+ Gwn_VertAttr* attrib = format->attribs + (format->attrib_ct - 1);
+#if TRUST_NO_ONE
+ assert(format->name_ct < GWN_VERT_ATTR_MAX_LEN); // there's room for more
+ assert(attrib->name_ct < MAX_ATTRIB_NAMES);
+#endif
+ format->name_ct++; // multiname support
+ attrib->name[attrib->name_ct++] = copy_attrib_name(format, alias);
+ }
+
+unsigned padding(unsigned offset, unsigned alignment)
+ {
+ const unsigned mod = offset % alignment;
+ return (mod == 0) ? 0 : (alignment - mod);
+ }
+
+#if PACK_DEBUG
+static void show_pack(unsigned a_idx, unsigned sz, unsigned pad)
+ {
+ const char c = 'A' + a_idx;
+ for (unsigned i = 0; i < pad; ++i)
+ putchar('-');
+ for (unsigned i = 0; i < sz; ++i)
+ putchar(c);
+ }
+#endif
+
+void VertexFormat_pack(Gwn_VertFormat* format)
+ {
+ // for now, attributes are packed in the order they were added,
+ // making sure each attrib is naturally aligned (add padding where necessary)
+
+ // later we can implement more efficient packing w/ reordering
+ // (keep attrib ID order, adjust their offsets to reorder in buffer)
+
+ // TODO:
+ // realloc just enough to hold the final combo string. And just enough to
+ // hold used attribs, not all 16.
+
+ Gwn_VertAttr* a0 = format->attribs + 0;
+ a0->offset = 0;
+ unsigned offset = a0->sz;
+
+#if PACK_DEBUG
+ show_pack(0, a0->sz, 0);
+#endif
+
+ for (unsigned a_idx = 1; a_idx < format->attrib_ct; ++a_idx)
+ {
+ Gwn_VertAttr* a = format->attribs + a_idx;
+ unsigned mid_padding = padding(offset, attrib_align(a));
+ offset += mid_padding;
+ a->offset = offset;
+ offset += a->sz;
+
+#if PACK_DEBUG
+ show_pack(a_idx, a->sz, mid_padding);
+#endif
+ }
+
+ unsigned end_padding = padding(offset, attrib_align(a0));
+
+#if PACK_DEBUG
+ show_pack(0, 0, end_padding);
+ putchar('\n');
+#endif
+
+ format->stride = offset + end_padding;
+ format->packed = true;
+ }
+
+
+// OpenGL ES packs in a different order as desktop GL but component conversion is the same.
+// Of the code here, only struct Gwn_PackedNormal needs to change.
+
+#define SIGNED_INT_10_MAX 511
+#define SIGNED_INT_10_MIN -512
+
+static int clampi(int x, int min_allowed, int max_allowed)
+ {
+#if TRUST_NO_ONE
+ assert(min_allowed <= max_allowed);
+#endif
+
+ if (x < min_allowed)
+ return min_allowed;
+ else if (x > max_allowed)
+ return max_allowed;
+ else
+ return x;
+ }
+
+static int quantize(float x)
+ {
+ int qx = x * 511.0f;
+ return clampi(qx, SIGNED_INT_10_MIN, SIGNED_INT_10_MAX);
+ }
+
+static int convert_i16(short x)
+ {
+ // 16-bit signed --> 10-bit signed
+ return x >> 6;
+ // TODO: round?
+ }
+
+Gwn_PackedNormal GWN_normal_convert_i10_v3(const float data[3])
+ {
+ Gwn_PackedNormal n = { .x = quantize(data[0]), .y = quantize(data[1]), .z = quantize(data[2]) };
+ return n;
+ }
+
+Gwn_PackedNormal GWN_normal_convert_i10_s3(const short data[3])
+ {
+ Gwn_PackedNormal n = { .x = convert_i16(data[0]), .y = convert_i16(data[1]), .z = convert_i16(data[2]) };
+ return n;
+ }
diff --git a/intern/ghost/intern/GHOST_Context.cpp b/intern/ghost/intern/GHOST_Context.cpp
index 72db17c4f56..823a476d244 100644
--- a/intern/ghost/intern/GHOST_Context.cpp
+++ b/intern/ghost/intern/GHOST_Context.cpp
@@ -143,11 +143,7 @@ bool win32_chk(bool result, const char *file, int line, const char *text)
void GHOST_Context::initContextGLEW()
{
- mxDestroyContext(m_mxContext); // no-op if m_mxContext is NULL
-
- mxMakeCurrentContext(mxCreateContext());
-
- m_mxContext = mxGetCurrentContext();
+ GLEW_CHK(glewInit());
}
diff --git a/intern/ghost/intern/GHOST_Context.h b/intern/ghost/intern/GHOST_Context.h
index 18d36c40e9c..8776fa4764f 100644
--- a/intern/ghost/intern/GHOST_Context.h
+++ b/intern/ghost/intern/GHOST_Context.h
@@ -50,15 +50,13 @@ public:
*/
GHOST_Context(bool stereoVisual, GHOST_TUns16 numOfAASamples)
: m_stereoVisual(stereoVisual),
- m_numOfAASamples(numOfAASamples),
- m_mxContext(NULL)
+ m_numOfAASamples(numOfAASamples)
{}
/**
* Destructor.
*/
virtual ~GHOST_Context() {
- mxDestroyContext(m_mxContext);
}
/**
@@ -128,19 +126,12 @@ public:
protected:
void initContextGLEW();
- inline void activateGLEW() const {
- mxMakeCurrentContext(m_mxContext);
- }
-
bool m_stereoVisual;
GHOST_TUns16 m_numOfAASamples;
static void initClearGL();
-private:
- MXContext *m_mxContext;
-
#ifdef WITH_CXX_GUARDEDALLOC
MEM_CXX_CLASS_ALLOC_FUNCS("GHOST:GHOST_Context")
#endif
diff --git a/intern/ghost/intern/GHOST_ContextCGL.h b/intern/ghost/intern/GHOST_ContextCGL.h
index dd49b81b561..6dcc4da0f0a 100644
--- a/intern/ghost/intern/GHOST_ContextCGL.h
+++ b/intern/ghost/intern/GHOST_ContextCGL.h
@@ -34,10 +34,6 @@
#include "GHOST_Context.h"
-//#define cglewGetContext() cglewContext
-//#include <GL/cglew.h>
-//extern "C" CGLEWContext *cglewContext;
-
#ifndef GHOST_OPENGL_CGL_CONTEXT_FLAGS
#define GHOST_OPENGL_CGL_CONTEXT_FLAGS 0
#endif
@@ -120,21 +116,14 @@ public:
*/
GHOST_TSuccess updateDrawingContext();
-//protected:
-// inline void activateCGLEW() const {
-// cglewContext = m_cglewContext;
-// }
-
private:
- //void initContextCGLEW()
-
/** The openGL view */
NSOpenGLView *m_openGLView;
/** The OpenGL drawing context */
NSOpenGLContext *m_openGLContext;
- //static CGLEWContext *s_cglewContext;
+ bool m_coreProfile;
const bool m_debug;
diff --git a/intern/ghost/intern/GHOST_ContextCGL.mm b/intern/ghost/intern/GHOST_ContextCGL.mm
index 03c45f9945b..03af3cc497e 100644
--- a/intern/ghost/intern/GHOST_ContextCGL.mm
+++ b/intern/ghost/intern/GHOST_ContextCGL.mm
@@ -63,6 +63,23 @@ GHOST_ContextCGL::GHOST_ContextCGL(
m_debug(contextFlags)
{
assert(openGLView != nil);
+
+ // for now be very strict about OpenGL version requested
+ switch (contextMajorVersion) {
+ case 2:
+ assert(contextMinorVersion == 1);
+ assert(contextProfileMask == 0);
+ m_coreProfile = false;
+ break;
+ case 3:
+ // Apple didn't implement 3.0 or 3.1
+ assert(contextMinorVersion == 2);
+ assert(contextProfileMask == GL_CONTEXT_CORE_PROFILE_BIT);
+ m_coreProfile = true;
+ break;
+ default:
+ assert(false);
+ }
}
@@ -142,9 +159,6 @@ GHOST_TSuccess GHOST_ContextCGL::activateDrawingContext()
if (m_openGLContext != nil) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[m_openGLContext makeCurrentContext];
-
- activateGLEW();
-
[pool drain];
return GHOST_kSuccess;
}
@@ -170,6 +184,7 @@ GHOST_TSuccess GHOST_ContextCGL::updateDrawingContext()
static void makeAttribList(
std::vector<NSOpenGLPixelFormatAttribute>& attribs,
+ bool coreProfile,
bool stereoVisual,
int numOfAASamples,
bool needAlpha,
@@ -178,6 +193,9 @@ static void makeAttribList(
{
attribs.clear();
+ attribs.push_back(NSOpenGLPFAOpenGLProfile);
+ attribs.push_back(coreProfile ? NSOpenGLProfileVersion3_2Core : NSOpenGLProfileVersionLegacy);
+
// Pixel Format Attributes for the windowed NSOpenGLContext
attribs.push_back(NSOpenGLPFADoubleBuffer);
@@ -190,15 +208,11 @@ static void makeAttribList(
attribs.push_back(NSOpenGLPFANoRecovery);
}
- /* Removed to allow 10.4 builds, and 2 GPUs rendering is not used anyway */
- //attribs.push_back(NSOpenGLPFAAllowOfflineRenderers);
+ attribs.push_back(NSOpenGLPFAAllowOfflineRenderers); // for automatic GPU switching
attribs.push_back(NSOpenGLPFADepthSize);
attribs.push_back((NSOpenGLPixelFormatAttribute) 32);
- attribs.push_back(NSOpenGLPFAAccumSize);
- attribs.push_back((NSOpenGLPixelFormatAttribute) 32);
-
if (stereoVisual)
attribs.push_back(NSOpenGLPFAStereo);
@@ -263,7 +277,7 @@ GHOST_TSuccess GHOST_ContextCGL::initializeDrawingContext()
NSOpenGLPixelFormat *pixelFormat;
// TODO: keep pixel format for subsequent windows/contexts instead of recreating each time
- makeAttribList(attribs, m_stereoVisual, m_numOfAASamples, needAlpha, needStencil, softwareGL);
+ makeAttribList(attribs, m_coreProfile, m_stereoVisual, m_numOfAASamples, needAlpha, needStencil, softwareGL);
pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:&attribs[0]];
@@ -274,7 +288,7 @@ GHOST_TSuccess GHOST_ContextCGL::initializeDrawingContext()
// (Now that I think about it, does WGL really require the code that it has for finding a lesser match?)
attribs.clear();
- makeAttribList(attribs, m_stereoVisual, 0, needAlpha, needStencil, softwareGL);
+ makeAttribList(attribs, m_coreProfile, m_stereoVisual, 0, needAlpha, needStencil, softwareGL);
pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:&attribs[0]];
}
@@ -316,7 +330,7 @@ GHOST_TSuccess GHOST_ContextCGL::initializeDrawingContext()
[m_openGLContext release];
// create software GL context
- makeAttribList(attribs, m_stereoVisual, m_numOfAASamples, needAlpha, needStencil, softwareGL);
+ makeAttribList(attribs, m_coreProfile, m_stereoVisual, m_numOfAASamples, needAlpha, needStencil, softwareGL);
pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:&attribs[0]];
m_openGLContext = [[NSOpenGLContext alloc] initWithFormat:pixelFormat shareContext:s_sharedOpenGLContext];
[pixelFormat release];
diff --git a/intern/ghost/intern/GHOST_ContextEGL.cpp b/intern/ghost/intern/GHOST_ContextEGL.cpp
index 520aa0fffb2..a591d9b7583 100644
--- a/intern/ghost/intern/GHOST_ContextEGL.cpp
+++ b/intern/ghost/intern/GHOST_ContextEGL.cpp
@@ -42,11 +42,6 @@
#include <cstring>
-#ifdef WITH_GLEW_MX
-EGLEWContext *eglewContext = NULL;
-#endif
-
-
#define CASE_CODE_RETURN_STR(code) case code: return #code;
static const char *get_egl_error_enum_string(EGLenum error)
@@ -168,13 +163,8 @@ static bool egl_chk(bool result, const char *file = NULL, int line = 0, const ch
static inline bool bindAPI(EGLenum api)
{
-#ifdef WITH_GLEW_MX
- if (eglewContext != NULL)
-#endif
- {
- if (EGLEW_VERSION_1_2) {
- return (EGL_CHK(eglBindAPI(api)) == EGL_TRUE);
- }
+ if (EGLEW_VERSION_1_2) {
+ return (EGL_CHK(eglBindAPI(api)) == EGL_TRUE);
}
return false;
@@ -238,9 +228,6 @@ GHOST_ContextEGL::GHOST_ContextEGL(
m_surface(EGL_NO_SURFACE),
m_display(EGL_NO_DISPLAY),
m_swap_interval(1),
-#ifdef WITH_GLEW_MX
- m_eglewContext(NULL),
-#endif
m_sharedContext(choose_api(api, s_gl_sharedContext, s_gles_sharedContext, s_vg_sharedContext)),
m_sharedCount (choose_api(api, s_gl_sharedCount, s_gles_sharedCount, s_vg_sharedCount))
{
@@ -252,7 +239,6 @@ GHOST_ContextEGL::GHOST_ContextEGL(
GHOST_ContextEGL::~GHOST_ContextEGL()
{
if (m_display != EGL_NO_DISPLAY) {
- activateEGLEW();
bindAPI(m_api);
@@ -276,10 +262,6 @@ GHOST_ContextEGL::~GHOST_ContextEGL()
EGL_CHK(::eglDestroySurface(m_display, m_surface));
EGL_CHK(::eglTerminate(m_display));
-
-#ifdef WITH_GLEW_MX
- delete m_eglewContext;
-#endif
}
}
@@ -321,9 +303,6 @@ GHOST_TSuccess GHOST_ContextEGL::getSwapInterval(int &intervalOut)
GHOST_TSuccess GHOST_ContextEGL::activateDrawingContext()
{
if (m_display) {
- activateEGLEW();
- activateGLEW();
-
bindAPI(m_api);
return EGL_CHK(::eglMakeCurrent(m_display, m_surface, m_surface, m_context)) ? GHOST_kSuccess : GHOST_kFailure;
@@ -336,14 +315,6 @@ GHOST_TSuccess GHOST_ContextEGL::activateDrawingContext()
void GHOST_ContextEGL::initContextEGLEW()
{
-#ifdef WITH_GLEW_MX
- eglewContext = new EGLEWContext;
- memset(eglewContext, 0, sizeof(EGLEWContext));
-
- delete m_eglewContext;
- m_eglewContext = eglewContext;
-#endif
-
if (GLEW_CHK(eglewInit(m_display)) != GLEW_OK)
fprintf(stderr, "Warning! EGLEW failed to initialize properly.\n");
}
diff --git a/intern/ghost/intern/GHOST_ContextEGL.h b/intern/ghost/intern/GHOST_ContextEGL.h
index 70c26c940fc..6dfb177f26d 100644
--- a/intern/ghost/intern/GHOST_ContextEGL.h
+++ b/intern/ghost/intern/GHOST_ContextEGL.h
@@ -34,17 +34,8 @@
#include "GHOST_Context.h"
-#ifdef WITH_GLEW_MX
-# define eglewGetContext() eglewContext
-#endif
-
#include <GL/eglew.h>
-#ifdef WITH_GLEW_MX
-extern "C" EGLEWContext *eglewContext;
-#endif
-
-
#ifndef GHOST_OPENGL_EGL_CONTEXT_FLAGS
#define GHOST_OPENGL_EGL_CONTEXT_FLAGS 0
#endif
@@ -116,13 +107,6 @@ public:
*/
GHOST_TSuccess getSwapInterval(int &intervalOut);
-protected:
- inline void activateEGLEW() const {
-#ifdef WITH_GLEW_MX
- eglewContext = m_eglewContext;
-#endif
- }
-
private:
void initContextEGLEW();
@@ -143,10 +127,6 @@ private:
EGLint m_swap_interval;
-#ifdef WITH_GLEW_MX
- EGLEWContext *m_eglewContext;
-#endif
-
EGLContext &m_sharedContext;
EGLint &m_sharedCount;
diff --git a/intern/ghost/intern/GHOST_ContextGLX.cpp b/intern/ghost/intern/GHOST_ContextGLX.cpp
index 9ac61db4041..061ac29945b 100644
--- a/intern/ghost/intern/GHOST_ContextGLX.cpp
+++ b/intern/ghost/intern/GHOST_ContextGLX.cpp
@@ -48,10 +48,6 @@ static GLuint _glewStrLen(const GLubyte *s);
static GLboolean _glewSearchExtension(const char *name, const GLubyte *start, const GLubyte *end);
#endif
-#ifdef WITH_GLEW_MX
-GLXEWContext *glxewContext = NULL;
-#endif
-
GLXContext GHOST_ContextGLX::s_sharedContext = None;
int GHOST_ContextGLX::s_sharedCount = 0;
@@ -61,7 +57,6 @@ GHOST_ContextGLX::GHOST_ContextGLX(
GHOST_TUns16 numOfAASamples,
Window window,
Display *display,
- XVisualInfo *visualInfo,
GLXFBConfig fbconfig,
int contextProfileMask,
int contextMajorVersion,
@@ -70,7 +65,6 @@ GHOST_ContextGLX::GHOST_ContextGLX(
int contextResetNotificationStrategy)
: GHOST_Context(stereoVisual, numOfAASamples),
m_display(display),
- m_visualInfo(visualInfo),
m_fbconfig(fbconfig),
m_window(window),
m_contextProfileMask(contextProfileMask),
@@ -79,10 +73,6 @@ GHOST_ContextGLX::GHOST_ContextGLX(
m_contextFlags(contextFlags),
m_contextResetNotificationStrategy(contextResetNotificationStrategy),
m_context(None)
-#ifdef WITH_GLEW_MX
- ,
- m_glxewContext(NULL)
-#endif
{
assert(m_window != 0);
assert(m_display != NULL);
@@ -92,8 +82,6 @@ GHOST_ContextGLX::GHOST_ContextGLX(
GHOST_ContextGLX::~GHOST_ContextGLX()
{
if (m_display != NULL) {
- activateGLXEW();
-
if (m_context != None) {
if (m_window != 0 && m_context == ::glXGetCurrentContext())
::glXMakeCurrent(m_display, None, NULL);
@@ -109,11 +97,6 @@ GHOST_ContextGLX::~GHOST_ContextGLX()
::glXDestroyContext(m_display, m_context);
}
}
-
-#ifdef WITH_GLEW_MX
- if (m_glxewContext)
- delete m_glxewContext;
-#endif
}
}
@@ -129,9 +112,6 @@ GHOST_TSuccess GHOST_ContextGLX::swapBuffers()
GHOST_TSuccess GHOST_ContextGLX::activateDrawingContext()
{
if (m_display) {
- activateGLXEW();
- activateGLEW();
-
return ::glXMakeCurrent(m_display, m_window, m_context) ? GHOST_kSuccess : GHOST_kFailure;
}
else {
@@ -141,15 +121,6 @@ GHOST_TSuccess GHOST_ContextGLX::activateDrawingContext()
void GHOST_ContextGLX::initContextGLXEW()
{
-#ifdef WITH_GLEW_MX
- glxewContext = new GLXEWContext;
- memset(glxewContext, 0, sizeof(GLXEWContext));
-
- if (m_glxewContext)
- delete m_glxewContext;
- m_glxewContext = glxewContext;
-#endif
-
initContextGLEW();
}
@@ -255,9 +226,6 @@ const bool GLXEW_ARB_create_context_robustness =
if (m_contextMajorVersion != 0) {
attribs[i++] = GLX_CONTEXT_MAJOR_VERSION_ARB;
attribs[i++] = m_contextMajorVersion;
- }
-
- if (m_contextMinorVersion != 0) {
attribs[i++] = GLX_CONTEXT_MINOR_VERSION_ARB;
attribs[i++] = m_contextMinorVersion;
}
@@ -300,8 +268,8 @@ const bool GLXEW_ARB_create_context_robustness =
}
}
else {
- /* Create legacy context */
- m_context = glXCreateContext(m_display, m_visualInfo, s_sharedContext, True);
+ /* Don't create legacy context */
+ fprintf(stderr, "Warning! GLX_ARB_create_context not available.\n");
}
GHOST_TSuccess success;
@@ -328,8 +296,14 @@ const bool GLXEW_ARB_create_context_robustness =
version = glGetString(GL_VERSION);
- if (!version || version[0] < '2' || ((version[0] == '2') && (version[2] < '1'))) {
- fprintf(stderr, "Error! Blender requires OpenGL 2.1 to run. Try updating your drivers.\n");
+#if 0 // enable this when Blender switches to 3.3 core profile
+ if (!version || version[0] < '3' || ((version[0] == '3') && (version[2] < '3'))) {
+ fprintf(stderr, "Error! Blender requires OpenGL 3.3 to run. Try updating your drivers.\n");
+#else
+ // with Mesa, the closest thing to 3.3 compatibility profile is 3.0
+ if (!version || version[0] < '3') {
+ fprintf(stderr, "Error! Blender requires OpenGL 3.0 (soon 3.3) to run. Try updating your drivers.\n");
+#endif
fflush(stderr);
/* ugly, but we get crashes unless a whole bunch of systems are patched. */
exit(0);
diff --git a/intern/ghost/intern/GHOST_ContextGLX.h b/intern/ghost/intern/GHOST_ContextGLX.h
index f0f010d1942..51fb1dd57dc 100644
--- a/intern/ghost/intern/GHOST_ContextGLX.h
+++ b/intern/ghost/intern/GHOST_ContextGLX.h
@@ -34,16 +34,8 @@
#include "GHOST_Context.h"
-#ifdef WITH_GLEW_MX
-# define glxewGetContext() glxewContext
-#endif
-
#include <GL/glxew.h>
-#ifdef WITH_GLEW_MX
-extern "C" GLXEWContext *glxewContext;
-#endif
-
#ifndef GHOST_OPENGL_GLX_CONTEXT_FLAGS
/* leave as convenience define for the future */
@@ -65,7 +57,6 @@ public:
GHOST_TUns16 numOfAASamples,
Window window,
Display *display,
- XVisualInfo *visualInfo,
GLXFBConfig fbconfig,
int contextProfileMask,
int contextMajorVersion,
@@ -117,18 +108,10 @@ public:
*/
GHOST_TSuccess getSwapInterval(int &intervalOut);
-protected:
- inline void activateGLXEW() const {
-#ifdef WITH_GLEW_MX
- glxewContext = m_glxewContext;
-#endif
- }
-
private:
void initContextGLXEW();
Display *m_display;
- XVisualInfo *m_visualInfo;
GLXFBConfig m_fbconfig;
Window m_window;
@@ -140,10 +123,6 @@ private:
GLXContext m_context;
-#ifdef WITH_GLEW_MX
- GLXEWContext *m_glxewContext;
-#endif
-
/** The first created OpenGL context (for sharing display lists) */
static GLXContext s_sharedContext;
static int s_sharedCount;
diff --git a/intern/ghost/intern/GHOST_ContextSDL.cpp b/intern/ghost/intern/GHOST_ContextSDL.cpp
index 39627fac899..7a02e9743c3 100644
--- a/intern/ghost/intern/GHOST_ContextSDL.cpp
+++ b/intern/ghost/intern/GHOST_ContextSDL.cpp
@@ -97,8 +97,6 @@ GHOST_TSuccess GHOST_ContextSDL::swapBuffers()
GHOST_TSuccess GHOST_ContextSDL::activateDrawingContext()
{
if (m_context) {
- activateGLEW();
-
return SDL_GL_MakeCurrent(m_window, m_context) ? GHOST_kSuccess : GHOST_kFailure;
}
else {
diff --git a/intern/ghost/intern/GHOST_ContextWGL.cpp b/intern/ghost/intern/GHOST_ContextWGL.cpp
index 64ee692797b..d2dd38878f7 100644
--- a/intern/ghost/intern/GHOST_ContextWGL.cpp
+++ b/intern/ghost/intern/GHOST_ContextWGL.cpp
@@ -40,10 +40,6 @@
#include <vector>
-#ifdef WITH_GLEW_MX
-WGLEWContext *wglewContext = NULL;
-#endif
-
HGLRC GHOST_ContextWGL::s_sharedHGLRC = NULL;
int GHOST_ContextWGL::s_sharedCount = 0;
@@ -82,10 +78,6 @@ GHOST_ContextWGL::GHOST_ContextWGL(
m_alphaBackground(alphaBackground),
m_contextResetNotificationStrategy(contextResetNotificationStrategy),
m_hGLRC(NULL)
-#ifdef WITH_GLEW_MX
- ,
- m_wglewContext(NULL)
-#endif
#ifndef NDEBUG
,
m_dummyVendor(NULL),
@@ -116,10 +108,6 @@ GHOST_ContextWGL::~GHOST_ContextWGL()
}
}
-#ifdef WITH_GLEW_MX
- delete m_wglewContext;
-#endif
-
#ifndef NDEBUG
free((void*)m_dummyRenderer);
free((void*)m_dummyVendor);
@@ -158,7 +146,6 @@ GHOST_TSuccess GHOST_ContextWGL::getSwapInterval(int &intervalOut)
GHOST_TSuccess GHOST_ContextWGL::activateDrawingContext()
{
if (WIN32_CHK(::wglMakeCurrent(m_hDC, m_hGLRC))) {
- activateGLEW();
return GHOST_kSuccess;
}
else {
@@ -338,15 +325,6 @@ void GHOST_ContextWGL::initContextWGLEW(PIXELFORMATDESCRIPTOR &preferredPFD)
int iPixelFormat;
-
-#ifdef WITH_GLEW_MX
- wglewContext = new WGLEWContext;
- memset(wglewContext, 0, sizeof(WGLEWContext));
-
- delete m_wglewContext;
- m_wglewContext = wglewContext;
-#endif
-
SetLastError(NO_ERROR);
prevHDC = ::wglGetCurrentDC();
@@ -385,13 +363,8 @@ void GHOST_ContextWGL::initContextWGLEW(PIXELFORMATDESCRIPTOR &preferredPFD)
if (!WIN32_CHK(::wglMakeCurrent(dummyHDC, dummyHGLRC)))
goto finalize;
-#ifdef WITH_GLEW_MX
- if (GLEW_CHK(wglewInit()) != GLEW_OK)
- fprintf(stderr, "Warning! WGLEW failed to initialize properly.\n");
-#else
if (GLEW_CHK(glewInit()) != GLEW_OK)
fprintf(stderr, "Warning! Dummy GLEW/WGLEW failed to initialize properly.\n");
-#endif
// the following are not technially WGLEW, but they also require a context to work
@@ -828,8 +801,6 @@ GHOST_TSuccess GHOST_ContextWGL::initializeDrawingContext()
return GHOST_kFailure;
}
- activateWGLEW();
-
if (WGLEW_ARB_create_context) {
int profileBitCore = m_contextProfileMask & WGL_CONTEXT_CORE_PROFILE_BIT_ARB;
int profileBitCompat = m_contextProfileMask & WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB;
@@ -907,21 +878,6 @@ GHOST_TSuccess GHOST_ContextWGL::initializeDrawingContext()
else
m_hGLRC = s_sharedHGLRC;
}
- else {
- if (m_contextProfileMask != 0)
- fprintf(stderr, "Warning! Legacy WGL is unable to select between OpenGL profiles.");
-
- if (m_contextMajorVersion != 0 || m_contextMinorVersion != 0)
- fprintf(stderr, "Warning! Legacy WGL is unable to select between OpenGL versions.");
-
- if (m_contextFlags != 0)
- fprintf(stderr, "Warning! Legacy WGL is unable to set context flags.");
-
- if (!s_singleContextMode || s_sharedHGLRC == NULL)
- m_hGLRC = ::wglCreateContext(m_hDC);
- else
- m_hGLRC = s_sharedHGLRC;
- }
if (!WIN32_CHK(m_hGLRC != NULL)) {
::wglMakeCurrent(prevHDC, prevHGLRC);
@@ -958,29 +914,6 @@ GHOST_TSuccess GHOST_ContextWGL::initializeDrawingContext()
reportContextString("Version", m_dummyVersion, version);
#endif
- if ((strcmp(vendor, "Microsoft Corporation") == 0 ||
- strcmp(renderer, "GDI Generic") == 0) && version[0] == '1' && version[2] == '1')
- {
- MessageBox(m_hWnd, "Your system does not use 3D hardware acceleration.\n"
- "Blender requires a graphics driver with OpenGL 2.1 support.\n\n"
- "This may be caused by:\n"
- "* A missing or faulty graphics driver installation.\n"
- " Blender needs a graphics card driver to work correctly.\n"
- "* Accessing Blender through a remote connection.\n"
- "* Using Blender through a virtual machine.\n\n"
- "The program will now close.",
- "Blender - Can't detect 3D hardware accelerated Driver!",
- MB_OK | MB_ICONERROR);
- exit(0);
- }
- else if (version[0] < '2' || (version[0] == '2' && version[2] < '1')) {
- MessageBox(m_hWnd, "Blender requires a graphics driver with OpenGL 2.1 support.\n\n"
- "The program will now close.",
- "Blender - Unsupported Graphics Driver!",
- MB_OK | MB_ICONERROR);
- exit(0);
- }
-
return GHOST_kSuccess;
}
@@ -994,3 +927,97 @@ GHOST_TSuccess GHOST_ContextWGL::releaseNativeHandles()
return success;
}
+
+/**
+ * For any given HDC you may call SetPixelFormat once
+ *
+ * So we better try to get the correct OpenGL version in a new window altogether, in case it fails.
+ * (see https://msdn.microsoft.com/en-us/library/windows/desktop/dd369049(v=vs.85).aspx)
+ */
+static bool TryOpenGLVersion(
+ HWND hwnd,
+ bool wantStereoVisual,
+ bool wantAlphaBackground,
+ GHOST_TUns16 wantNumOfAASamples,
+ int contextProfileMask,
+ bool debugContext,
+ int major, int minor)
+{
+ HWND dummyHWND = clone_window(hwnd, NULL);
+ if (dummyHWND == NULL) {
+ return false;
+ }
+
+ HDC dummyHDC = GetDC(dummyHWND);
+ if (dummyHDC == NULL) {
+ return false;
+ }
+
+ GHOST_ContextWGL * context = new GHOST_ContextWGL(
+ wantStereoVisual,
+ wantAlphaBackground,
+ wantNumOfAASamples,
+ dummyHWND,
+ dummyHDC,
+ contextProfileMask,
+ major, minor,
+ (debugContext ? WGL_CONTEXT_DEBUG_BIT_ARB : 0),
+ GHOST_OPENGL_WGL_RESET_NOTIFICATION_STRATEGY);
+
+ bool result = context->initializeDrawingContext();
+ delete context;
+
+ ReleaseDC(dummyHWND, dummyHDC);
+ DestroyWindow(dummyHWND);
+
+ return result;
+}
+
+GHOST_TSuccess GHOST_ContextWGL::getMaximumSupportedOpenGLVersion(
+ HWND hwnd,
+ bool wantStereoVisual,
+ bool wantAlphaBackground,
+ GHOST_TUns16 wantNumOfAASamples,
+ int contextProfileMask,
+ bool debugContext,
+ GHOST_TUns8 *r_major_version,
+ GHOST_TUns8 *r_minor_version)
+{
+ /* - AMD and Intel give us exactly this version
+ * - NVIDIA gives at least this version <-- desired behavior
+ * So we ask for 4.5, 4.4 ... 3.3 in descending order to get the best version on the user's system. */
+ for (int minor = 5; minor >= 0; --minor) {
+ if (TryOpenGLVersion(
+ hwnd,
+ wantStereoVisual,
+ wantAlphaBackground,
+ wantNumOfAASamples,
+ contextProfileMask,
+ debugContext,
+ 4, minor))
+ {
+ *r_major_version = 4;
+ *r_minor_version = minor;
+ return GHOST_kSuccess;
+ }
+ }
+
+ /* Fallback to OpenGL 3.3 */
+ if (TryOpenGLVersion(
+ hwnd,
+ wantStereoVisual,
+ wantAlphaBackground,
+ wantNumOfAASamples,
+ contextProfileMask,
+ debugContext,
+ 3, 3))
+ {
+ *r_major_version = 3;
+ *r_minor_version = 3;
+ return GHOST_kSuccess;
+ }
+
+ *r_major_version = 0;
+ *r_minor_version = 0;
+ return GHOST_kFailure;
+}
diff --git a/intern/ghost/intern/GHOST_ContextWGL.h b/intern/ghost/intern/GHOST_ContextWGL.h
index 580b4dcb82f..0d9986a0802 100644
--- a/intern/ghost/intern/GHOST_ContextWGL.h
+++ b/intern/ghost/intern/GHOST_ContextWGL.h
@@ -36,24 +36,8 @@
#include "GHOST_Context.h"
-#ifdef WITH_GLEW_MX
-#define wglewGetContext() wglewContext
-#endif
-
#include <GL/wglew.h>
-#ifdef WITH_GLEW_MX
-extern "C" WGLEWContext *wglewContext;
-#endif
-
-#ifndef GHOST_OPENGL_WGL_CONTEXT_FLAGS
-# ifdef WITH_GPU_DEBUG
-# define GHOST_OPENGL_WGL_CONTEXT_FLAGS WGL_CONTEXT_DEBUG_BIT_ARB
-# else
-# define GHOST_OPENGL_WGL_CONTEXT_FLAGS 0
-# endif
-#endif
-
#ifndef GHOST_OPENGL_WGL_RESET_NOTIFICATION_STRATEGY
#define GHOST_OPENGL_WGL_RESET_NOTIFICATION_STRATEGY 0
#endif
@@ -121,12 +105,19 @@ public:
*/
GHOST_TSuccess getSwapInterval(int &intervalOut);
-protected:
- inline void activateWGLEW() const {
-#ifdef WITH_GLEW_MX
- wglewContext = m_wglewContext;
-#endif
- }
+ /**
+ * Gets the maximum supported OpenGL context for the user hardware
+ * \return Whether major_version and minor_version resulted in a valid context.
+ */
+ static GHOST_TSuccess getMaximumSupportedOpenGLVersion(
+ HWND hwnd,
+ bool wantStereoVisual,
+ bool wantAlphaBackground,
+ GHOST_TUns16 wantNumOfAASamples,
+ int contextProfileMask,
+ bool debugContext,
+ GHOST_TUns8 *r_major_version,
+ GHOST_TUns8 *r_minor_version);
private:
int choose_pixel_format(
@@ -171,10 +162,6 @@ private:
const int m_contextResetNotificationStrategy;
HGLRC m_hGLRC;
-
-#ifdef WITH_GLEW_MX
- WGLEWContext *m_wglewContext;
-#endif
#ifndef NDEBUG
const char *m_dummyVendor;
diff --git a/intern/ghost/intern/GHOST_WindowCocoa.mm b/intern/ghost/intern/GHOST_WindowCocoa.mm
index 20060ac1267..309c19f92af 100644
--- a/intern/ghost/intern/GHOST_WindowCocoa.mm
+++ b/intern/ghost/intern/GHOST_WindowCocoa.mm
@@ -996,82 +996,23 @@ GHOST_TSuccess GHOST_WindowCocoa::setOrder(GHOST_TWindowOrder order)
GHOST_Context *GHOST_WindowCocoa::newDrawingContext(GHOST_TDrawingContextType type)
{
if (type == GHOST_kDrawingContextTypeOpenGL) {
-#if !defined(WITH_GL_EGL)
-#if defined(WITH_GL_PROFILE_CORE)
- GHOST_Context *context = new GHOST_ContextCGL(
- m_wantStereoVisual,
- m_wantNumOfAASamples,
- m_window,
- m_openGLView,
- GL_CONTEXT_CORE_PROFILE_BIT,
- 3, 2,
- GHOST_OPENGL_CGL_CONTEXT_FLAGS,
- GHOST_OPENGL_CGL_RESET_NOTIFICATION_STRATEGY);
-#elif defined(WITH_GL_PROFILE_ES20)
GHOST_Context *context = new GHOST_ContextCGL(
m_wantStereoVisual,
m_wantNumOfAASamples,
m_window,
m_openGLView,
- CGL_CONTEXT_ES2_PROFILE_BIT_EXT,
- 2, 0,
- GHOST_OPENGL_CGL_CONTEXT_FLAGS,
- GHOST_OPENGL_CGL_RESET_NOTIFICATION_STRATEGY);
-#elif defined(WITH_GL_PROFILE_COMPAT)
- GHOST_Context *context = new GHOST_ContextCGL(
- m_wantStereoVisual,
- m_wantNumOfAASamples,
- m_window,
- m_openGLView,
- 0, // profile bit
- 0, 0,
- m_debug_context,
- GHOST_OPENGL_CGL_RESET_NOTIFICATION_STRATEGY);
-#else
-# error
-#endif
-
-#else
#if defined(WITH_GL_PROFILE_CORE)
- GHOST_Context *context = new GHOST_ContextEGL(
- m_wantStereoVisual,
- m_wantNumOfAASamples,
- m_window,
- m_openGLView,
- EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT,
+ GL_CONTEXT_CORE_PROFILE_BIT,
3, 2,
- GHOST_OPENGL_EGL_CONTEXT_FLAGS,
- GHOST_OPENGL_EGL_RESET_NOTIFICATION_STRATEGY,
- EGL_OPENGL_API);
-#elif defined(WITH_GL_PROFILE_ES20)
- GHOST_Context *context = new GHOST_ContextEGL(
- m_wantStereoVisual,
- m_wantNumOfAASamples,
- m_window,
- m_openGLView,
- 0, // profile bit
- 2, 0,
- GHOST_OPENGL_EGL_CONTEXT_FLAGS,
- GHOST_OPENGL_EGL_RESET_NOTIFICATION_STRATEGY,
- EGL_OPENGL_ES_API);
-#elif defined(WITH_GL_PROFILE_COMPAT)
- GHOST_Context *context = new GHOST_ContextEGL(
- m_wantStereoVisual,
- m_wantNumOfAASamples,
- m_window,
- m_openGLView,
- 0, // profile bit
- 0, 0,
- GHOST_OPENGL_EGL_CONTEXT_FLAGS,
- GHOST_OPENGL_EGL_RESET_NOTIFICATION_STRATEGY,
- EGL_OPENGL_API);
#else
-# error
+ 0, // no profile bit
+ 2, 1,
#endif
+ GHOST_OPENGL_CGL_CONTEXT_FLAGS,
+ GHOST_OPENGL_CGL_RESET_NOTIFICATION_STRATEGY);
-#endif
if (context->initializeDrawingContext())
return context;
else
diff --git a/intern/ghost/intern/GHOST_WindowWin32.cpp b/intern/ghost/intern/GHOST_WindowWin32.cpp
index abf3c8672ff..ee0d7ef460c 100644
--- a/intern/ghost/intern/GHOST_WindowWin32.cpp
+++ b/intern/ghost/intern/GHOST_WindowWin32.cpp
@@ -619,101 +619,72 @@ GHOST_TSuccess GHOST_WindowWin32::invalidate()
GHOST_Context *GHOST_WindowWin32::newDrawingContext(GHOST_TDrawingContextType type)
{
if (type == GHOST_kDrawingContextTypeOpenGL) {
-#if !defined(WITH_GL_EGL)
+ GHOST_Context *context;
#if defined(WITH_GL_PROFILE_CORE)
- GHOST_Context *context = new GHOST_ContextWGL(
- m_wantStereoVisual,
- m_wantAlphaBackground,
- m_wantNumOfAASamples,
- m_hWnd,
- m_hDC,
- WGL_CONTEXT_CORE_PROFILE_BIT_ARB,
- 3, 2,
- GHOST_OPENGL_WGL_CONTEXT_FLAGS,
- GHOST_OPENGL_WGL_RESET_NOTIFICATION_STRATEGY);
-#elif defined(WITH_GL_PROFILE_ES20)
- GHOST_Context *context = new GHOST_ContextWGL(
- m_wantStereoVisual,
- m_wantAlphaBackground,
- m_wantNumOfAASamples,
- m_hWnd,
- m_hDC,
- WGL_CONTEXT_ES2_PROFILE_BIT_EXT,
- 2, 0,
- GHOST_OPENGL_WGL_CONTEXT_FLAGS,
- GHOST_OPENGL_WGL_RESET_NOTIFICATION_STRATEGY);
+ GHOST_TUns8 major, minor;
+
+ if (GHOST_ContextWGL::getMaximumSupportedOpenGLVersion(
+ m_hWnd,
+ m_wantStereoVisual,
+ m_wantAlphaBackground,
+ m_wantNumOfAASamples,
+ WGL_CONTEXT_CORE_PROFILE_BIT_ARB,
+ m_debug_context,
+ &major, &minor))
+ {
+ context = new GHOST_ContextWGL(
+ m_wantStereoVisual,
+ m_wantAlphaBackground,
+ m_wantNumOfAASamples,
+ m_hWnd,
+ m_hDC,
+ WGL_CONTEXT_CORE_PROFILE_BIT_ARB,
+ major, minor,
+ (m_debug_context ? WGL_CONTEXT_DEBUG_BIT_ARB : 0),
+ GHOST_OPENGL_WGL_RESET_NOTIFICATION_STRATEGY);
+
+ if (context->initializeDrawingContext()) {
+ return context;
+ }
+ else {
+ delete context;
+ }
+ }
+ else {
+ MessageBox(
+ m_hWnd,
+ "Blender requires a graphics driver with at least OpenGL 3.3 support.\n\n"
+ "The program will now close.",
+ "Blender - Unsupported Graphics Driver!",
+ MB_OK | MB_ICONERROR);
+ exit(0);
+ return NULL;
+ }
+
#elif defined(WITH_GL_PROFILE_COMPAT)
- GHOST_Context *context = new GHOST_ContextWGL(
+ // ask for 2.1 context, driver gives any GL version >= 2.1 (hopefully the latest compatibility profile)
+ // 2.1 ignores the profile bit & is incompatible with core profile
+ context = new GHOST_ContextWGL(
m_wantStereoVisual,
m_wantAlphaBackground,
m_wantNumOfAASamples,
m_hWnd,
m_hDC,
-#if 1
- 0, // profile bit
- 2, 1, // GL version requested
-#else
- // switch to this for Blender 2.8 development
- WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB,
- 3, 2,
-#endif
+ 0, // no profile bit
+ 2, 1,
(m_debug_context ? WGL_CONTEXT_DEBUG_BIT_ARB : 0),
GHOST_OPENGL_WGL_RESET_NOTIFICATION_STRATEGY);
#else
-# error
-#endif
-
-#else
-
-#if defined(WITH_GL_PROFILE_CORE)
- GHOST_Context *context = new GHOST_ContextEGL(
- m_wantStereoVisual,
- m_wantNumOfAASamples,
- m_hWnd,
- m_hDC,
- EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT,
- 3, 2,
- GHOST_OPENGL_EGL_CONTEXT_FLAGS,
- GHOST_OPENGL_EGL_RESET_NOTIFICATION_STRATEGY,
- EGL_OPENGL_API);
-#elif defined(WITH_GL_PROFILE_ES20)
- GHOST_Context *context = new GHOST_ContextEGL(
- m_wantStereoVisual,
- m_wantNumOfAASamples,
- m_hWnd,
- m_hDC,
- 0, // profile bit
- 2, 0,
- GHOST_OPENGL_EGL_CONTEXT_FLAGS,
- GHOST_OPENGL_EGL_RESET_NOTIFICATION_STRATEGY,
- EGL_OPENGL_ES_API);
-#elif defined(WITH_GL_PROFILE_COMPAT)
- GHOST_Context *context = new GHOST_ContextEGL(
- m_wantStereoVisual,
- m_wantNumOfAASamples,
- m_hWnd,
- m_hDC,
-#if 1
- 0, // profile bit
- 2, 1, // GL version requested
-#else
- // switch to this for Blender 2.8 development
- EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT,
- 3, 2,
-#endif
- GHOST_OPENGL_EGL_CONTEXT_FLAGS,
- GHOST_OPENGL_EGL_RESET_NOTIFICATION_STRATEGY,
- EGL_OPENGL_API);
-#else
-# error
+# error // must specify either core or compat at build time
#endif
-#endif
- if (context->initializeDrawingContext())
+ if (context->initializeDrawingContext()) {
return context;
- else
+ }
+ else {
delete context;
+ }
}
return NULL;
diff --git a/intern/ghost/intern/GHOST_WindowX11.cpp b/intern/ghost/intern/GHOST_WindowX11.cpp
index 1abdec37403..78a1c841934 100644
--- a/intern/ghost/intern/GHOST_WindowX11.cpp
+++ b/intern/ghost/intern/GHOST_WindowX11.cpp
@@ -1314,92 +1314,72 @@ GHOST_WindowX11::
GHOST_Context *GHOST_WindowX11::newDrawingContext(GHOST_TDrawingContextType type)
{
if (type == GHOST_kDrawingContextTypeOpenGL) {
-#if !defined(WITH_GL_EGL)
+
+ // During development:
+ // try 4.x compatibility profile
+ // try 3.3 compatibility profile
+ // fall back to 3.0 if needed
+ //
+ // Final Blender 2.8:
+ // try 4.x core profile
+ // try 3.3 core profile
+ // no fallbacks
#if defined(WITH_GL_PROFILE_CORE)
- GHOST_Context *context = new GHOST_ContextGLX(
- m_wantStereoVisual,
- m_wantNumOfAASamples,
- m_window,
- m_display,
- m_visualInfo,
- (GLXFBConfig)m_fbconfig,
- GLX_CONTEXT_CORE_PROFILE_BIT_ARB,
- 3, 2,
- GHOST_OPENGL_GLX_CONTEXT_FLAGS | (m_is_debug_context ? GLX_CONTEXT_DEBUG_BIT_ARB : 0),
- GHOST_OPENGL_GLX_RESET_NOTIFICATION_STRATEGY);
-#elif defined(WITH_GL_PROFILE_ES20)
- GHOST_Context *context = new GHOST_ContextGLX(
- m_wantStereoVisual,
- m_wantNumOfAASamples,
- m_window,
- m_display,
- m_visualInfo,
- (GLXFBConfig)m_fbconfig,
- GLX_CONTEXT_ES2_PROFILE_BIT_EXT,
- 2, 0,
- GHOST_OPENGL_GLX_CONTEXT_FLAGS | (m_is_debug_context ? GLX_CONTEXT_DEBUG_BIT_ARB : 0),
- GHOST_OPENGL_GLX_RESET_NOTIFICATION_STRATEGY);
+ {
+ const char *version_major = (char*)glewGetString(GLEW_VERSION_MAJOR);
+ if (version_major != NULL && version_major[0] == '1') {
+ fprintf(stderr, "Error: GLEW version 2.0 and above is required.\n");
+ abort();
+ }
+ }
+#endif
+
+ const int profile_mask =
+#if defined(WITH_GL_PROFILE_CORE)
+ GLX_CONTEXT_CORE_PROFILE_BIT_ARB;
#elif defined(WITH_GL_PROFILE_COMPAT)
- GHOST_Context *context = new GHOST_ContextGLX(
- m_wantStereoVisual,
- m_wantNumOfAASamples,
- m_window,
- m_display,
- m_visualInfo,
- (GLXFBConfig)m_fbconfig,
- 0, // profile bit
- 0, 0,
- GHOST_OPENGL_GLX_CONTEXT_FLAGS | (m_is_debug_context ? GLX_CONTEXT_DEBUG_BIT_ARB : 0),
- GHOST_OPENGL_GLX_RESET_NOTIFICATION_STRATEGY);
+ GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB;
#else
-# error
+# error // must specify either core or compat at build time
#endif
-#else
+ GHOST_Context *context;
+
+ for (int minor = 5; minor >= 0; --minor) {
+ context = new GHOST_ContextGLX(
+ m_wantStereoVisual,
+ m_wantNumOfAASamples,
+ m_window,
+ m_display,
+ (GLXFBConfig)m_fbconfig,
+ profile_mask,
+ 4, minor,
+ GHOST_OPENGL_GLX_CONTEXT_FLAGS | (m_is_debug_context ? GLX_CONTEXT_DEBUG_BIT_ARB : 0),
+ GHOST_OPENGL_GLX_RESET_NOTIFICATION_STRATEGY);
+
+ if (context->initializeDrawingContext())
+ return context;
+ else
+ delete context;
+ }
-#if defined(WITH_GL_PROFILE_CORE)
- GHOST_Context *context = new GHOST_ContextEGL(
- m_wantStereoVisual,
- m_wantNumOfAASamples,
- m_window,
- m_display,
- EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT,
- 3, 2,
- GHOST_OPENGL_EGL_CONTEXT_FLAGS,
- GHOST_OPENGL_EGL_RESET_NOTIFICATION_STRATEGY,
- EGL_OPENGL_API);
-#elif defined(WITH_GL_PROFILE_ES20)
- GHOST_Context *context = new GHOST_ContextEGL(
+ context = new GHOST_ContextGLX(
m_wantStereoVisual,
m_wantNumOfAASamples,
m_window,
m_display,
- 0, // profile bit
- 2, 0,
- GHOST_OPENGL_EGL_CONTEXT_FLAGS,
- GHOST_OPENGL_EGL_RESET_NOTIFICATION_STRATEGY,
- EGL_OPENGL_ES_API);
-#elif defined(WITH_GL_PROFILE_COMPAT)
- GHOST_Context *context = new GHOST_ContextEGL(
- m_wantStereoVisual,
- m_wantNumOfAASamples,
- m_window,
- m_display,
- 0, // profile bit
- 0, 0,
- GHOST_OPENGL_EGL_CONTEXT_FLAGS,
- GHOST_OPENGL_EGL_RESET_NOTIFICATION_STRATEGY,
- EGL_OPENGL_API);
-#else
-# error
-#endif
+ (GLXFBConfig)m_fbconfig,
+ profile_mask,
+ 3, 3,
+ GHOST_OPENGL_GLX_CONTEXT_FLAGS | (m_is_debug_context ? GLX_CONTEXT_DEBUG_BIT_ARB : 0),
+ GHOST_OPENGL_GLX_RESET_NOTIFICATION_STRATEGY);
-#endif
if (context->initializeDrawingContext())
return context;
else
delete context;
+
}
return NULL;
diff --git a/intern/ghost/test/CMakeLists.txt b/intern/ghost/test/CMakeLists.txt
index fb9ef621ecf..ef6e8915871 100644
--- a/intern/ghost/test/CMakeLists.txt
+++ b/intern/ghost/test/CMakeLists.txt
@@ -203,7 +203,6 @@ target_link_libraries(gears_c
glewmx_lib
string_lib
${OPENGL_gl_LIBRARY}
- ${OPENGL_glu_LIBRARY}
${PLATFORM_LINKLIBS}
)
@@ -217,7 +216,6 @@ target_link_libraries(gears_cpp
glewmx_lib
string_lib
${OPENGL_gl_LIBRARY}
- ${OPENGL_glu_LIBRARY}
${PLATFORM_LINKLIBS}
)
@@ -248,7 +246,6 @@ target_link_libraries(multitest_c
guardedalloc_lib
wcwidth_lib
${OPENGL_gl_LIBRARY}
- ${OPENGL_glu_LIBRARY}
${FREETYPE_LIBRARY}
${ZLIB_LIBRARIES}
${PLATFORM_LINKLIBS}
diff --git a/intern/glew-mx/glew-mx.h b/intern/glew-mx/glew-mx.h
index ed17ea4a0e6..86f48a1068d 100644
--- a/intern/glew-mx/glew-mx.h
+++ b/intern/glew-mx/glew-mx.h
@@ -49,12 +49,6 @@
#ifndef __GLEW_MX_H__
#define __GLEW_MX_H__
-#ifdef WITH_GLEW_MX
-/* glew itself expects this */
-# define GLEW_MX 1
-# define glewGetContext() (&(_mx_context->glew_context))
-#endif
-
#include <GL/glew.h>
@@ -62,39 +56,16 @@
extern "C" {
#endif
-/* MXContext is used instead of GLEWContext directly so that
- extending what data is held by a context is easier.
- */
-typedef struct MXContext {
-#ifdef WITH_GLEW_MX
- GLEWContext glew_context;
-#endif
-
- int reserved; /* structs need at least one member */
-
-} MXContext;
-
-#ifdef WITH_GLEW_MX
-extern MXContext *_mx_context;
-#endif
-
-
#include "intern/symbol-binding.h"
/* If compiling only for OpenGL 3.2 Core Profile then we should make sure
* no legacy API entries or symbolic constants are used.
*/
-#if defined(WITH_GL_PROFILE_CORE) && !defined(WITH_GL_PROFILE_COMPAT) && !defined(WITH_GL_PROFILE_ES20)
+#if (!defined(WITH_LEGACY_OPENGL)) || defined(WITH_GL_PROFILE_CORE) && !defined(WITH_GL_PROFILE_COMPAT) && !defined(WITH_GL_PROFILE_ES20)
# include "intern/gl-deprecated.h"
#endif
-
-MXContext *mxCreateContext (void);
-MXContext *mxGetCurrentContext (void);
-void mxMakeCurrentContext(MXContext *ctx);
-void mxDestroyContext (MXContext *ctx);
-
GLenum glew_chk(GLenum error, const char *file, int line, const char *text);
#ifndef NDEBUG
diff --git a/intern/glew-mx/intern/gl-deprecated.h b/intern/glew-mx/intern/gl-deprecated.h
index 1a23642fbfc..669fb83a644 100644
--- a/intern/glew-mx/intern/gl-deprecated.h
+++ b/intern/glew-mx/intern/gl-deprecated.h
@@ -841,6 +841,7 @@
#undef GL_SOURCE2_RGB
#define GL_SOURCE2_RGB DO_NOT_USE_GL_SOURCE2_RGB
+#if 0 /* Those are deprecated but still valid */
// Old Token Names 3.0
#undef GL_CLIP_PLANE0
#define GL_CLIP_PLANE0 USE_GL_CLIP_DISTANCE0
@@ -864,9 +865,6 @@
// Old Token Names 3.2
#undef GL_VERTEX_PROGRAM_POINT_SIZE
#define GL_VERTEX_PROGRAM_POINT_SIZE USE_GL_PROGRAM_POINT_SIZE
-
-// Old Token Names 4.1
-#undef GL_CURRENT_PROGRAM
-#define GL_CURRENT_PROGRAM DO_NOT_USE_GL_CURRENT_PROGRAM
+#endif
#endif /* __GL_DEPRECATED_H__ */
diff --git a/intern/glew-mx/intern/glew-mx.c b/intern/glew-mx/intern/glew-mx.c
index 6fbb1a7a2e2..9db2d233085 100644
--- a/intern/glew-mx/intern/glew-mx.c
+++ b/intern/glew-mx/intern/glew-mx.c
@@ -84,61 +84,3 @@ GLenum glew_chk(GLenum error, const char *file, int line, const char *text)
return error;
}
-
-
-#ifdef WITH_GLEW_MX
-MXContext *_mx_context = NULL;
-#endif
-
-
-MXContext *mxCreateContext(void)
-{
-#ifdef WITH_GLEW_MX
- MXContext* new_ctx = calloc(1, sizeof(MXContext));
-
- if (new_ctx != NULL) {
- MXContext* cur_ctx = _mx_context;
- _mx_context = new_ctx;
- GLEW_CHK(glewInit());
- _mx_context = cur_ctx;
- }
-
- return new_ctx;
-#else
- GLEW_CHK(glewInit());
- return NULL;
-#endif
-}
-
-
-MXContext *mxGetCurrentContext(void)
-{
-#ifdef WITH_GLEW_MX
- return _mx_context;
-#else
- return NULL;
-#endif
-}
-
-
-void mxMakeCurrentContext(MXContext *ctx)
-{
-#ifdef WITH_GLEW_MX
- _mx_context = ctx;
-#else
- (void)ctx;
-#endif
-}
-
-
-void mxDestroyContext(MXContext *ctx)
-{
-#ifdef WITH_GLEW_MX
- if (_mx_context == ctx)
- _mx_context = NULL;
-
- free(ctx);
-#else
- (void)ctx;
-#endif
-}
diff --git a/intern/itasc/FixedObject.hpp b/intern/itasc/FixedObject.hpp
index ad26e7cb2d6..e768157ed2b 100644
--- a/intern/itasc/FixedObject.hpp
+++ b/intern/itasc/FixedObject.hpp
@@ -21,7 +21,7 @@ public:
int addFrame(const std::string& name, const Frame& frame);
- virtual void updateCoordinates(const Timestamp& timestamp) {};
+ virtual void updateCoordinates(const struct EvaluationContext *eval_ctx, const Timestamp& timestamp) {};
virtual int addEndEffector(const std::string& name);
virtual bool finalize();
virtual const Frame& getPose(const unsigned int frameIndex);
diff --git a/intern/itasc/MovingFrame.cpp b/intern/itasc/MovingFrame.cpp
index 90ebe091eb5..83e15bb59d9 100644
--- a/intern/itasc/MovingFrame.cpp
+++ b/intern/itasc/MovingFrame.cpp
@@ -90,7 +90,7 @@ bool MovingFrame::setCallback(MovingFrameCallback _function, void* _param)
return true;
}
-void MovingFrame::updateCoordinates(const Timestamp& timestamp)
+void MovingFrame::updateCoordinates(const struct EvaluationContext *eval_ctx, const Timestamp& timestamp)
{
// don't compute the velocity during substepping, it is assumed constant.
if (!timestamp.substep) {
@@ -98,7 +98,7 @@ void MovingFrame::updateCoordinates(const Timestamp& timestamp)
if (!timestamp.reiterate) {
cacheAvail = popInternalFrame(timestamp.cacheTimestamp);
if (m_function)
- (*m_function)(timestamp, m_internalPose, m_nextPose, m_param);
+ (*m_function)(eval_ctx, timestamp, m_internalPose, m_nextPose, m_param);
}
// only compute velocity if we have a previous pose
if (cacheAvail && timestamp.interpolate) {
diff --git a/intern/itasc/MovingFrame.hpp b/intern/itasc/MovingFrame.hpp
index d2a956d7312..719e06b4bf7 100644
--- a/intern/itasc/MovingFrame.hpp
+++ b/intern/itasc/MovingFrame.hpp
@@ -11,10 +11,16 @@
#include "UncontrolledObject.hpp"
#include <vector>
+struct EvaluationContext;
namespace iTaSC{
-typedef bool (*MovingFrameCallback)(const Timestamp& timestamp, const Frame& _current, Frame& _next, void *param);
+typedef bool (*MovingFrameCallback)(
+ const struct EvaluationContext *eval_ctx,
+ const Timestamp& timestamp,
+ const Frame& _current,
+ Frame& _next,
+ void *param);
class MovingFrame: public UncontrolledObject {
public:
@@ -24,7 +30,7 @@ public:
bool setFrame(const Frame& frame);
bool setCallback(MovingFrameCallback _function, void* _param);
- virtual void updateCoordinates(const Timestamp& timestamp);
+ virtual void updateCoordinates(const struct EvaluationContext *eval_ctx, const Timestamp& timestamp);
virtual void updateKinematics(const Timestamp& timestamp);
virtual void pushCache(const Timestamp& timestamp);
virtual void initCache(Cache *_cache);
diff --git a/intern/itasc/Scene.cpp b/intern/itasc/Scene.cpp
index 5768a994970..93f316783ba 100644
--- a/intern/itasc/Scene.cpp
+++ b/intern/itasc/Scene.cpp
@@ -257,7 +257,7 @@ bool Scene::getConstraintPose(ConstraintSet* constraint, void *_param, KDL::Fram
return true;
}
-bool Scene::update(double timestamp, double timestep, unsigned int numsubstep, bool reiterate, bool cache, bool interpolate)
+bool Scene::update(const struct EvaluationContext *eval_ctx, double timestamp, double timestep, unsigned int numsubstep, bool reiterate, bool cache, bool interpolate)
{
// we must have valid timestep and timestamp
if (timestamp < KDL::epsilon || timestep < 0.0)
@@ -316,7 +316,7 @@ bool Scene::update(double timestamp, double timestep, unsigned int numsubstep, b
}
}
if (os->object->getType()==Object::UnControlled && ((UncontrolledObject*)os->object)->getNrOfCoordinates() != 0) {
- ((UncontrolledObject*)(os->object))->updateCoordinates(ts);
+ ((UncontrolledObject*)(os->object))->updateCoordinates(eval_ctx, ts);
if (!ts.substep) {
// velocity of uncontrolled object remains constant during substepping
project(m_xdot,os->coordinaterange) = ((UncontrolledObject*)(os->object))->getXudot();
diff --git a/intern/itasc/Scene.hpp b/intern/itasc/Scene.hpp
index 5ed031b543e..ebbec561a6e 100644
--- a/intern/itasc/Scene.hpp
+++ b/intern/itasc/Scene.hpp
@@ -39,7 +39,7 @@ public:
bool addSolver(Solver* _solver);
bool addCache(Cache* _cache);
bool initialize();
- bool update(double timestamp, double timestep, unsigned int numsubstep=1, bool reiterate=false, bool cache=true, bool interpolate=true);
+ bool update(const struct EvaluationContext *eval_ctx, double timestamp, double timestep, unsigned int numsubstep=1, bool reiterate=false, bool cache=true, bool interpolate=true);
bool setParam(SceneParam paramId, double value);
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
diff --git a/intern/itasc/UncontrolledObject.hpp b/intern/itasc/UncontrolledObject.hpp
index 81445538fa6..d932974a24d 100644
--- a/intern/itasc/UncontrolledObject.hpp
+++ b/intern/itasc/UncontrolledObject.hpp
@@ -11,6 +11,9 @@
#include "eigen_types.hpp"
#include "Object.hpp"
+
+struct EvaluationContext;
+
namespace iTaSC{
class UncontrolledObject: public Object {
@@ -26,7 +29,7 @@ public:
virtual void initialize(unsigned int _nu, unsigned int _nf);
virtual const e_matrix& getJu(unsigned int frameIndex) const;
virtual const e_vector& getXudot() const {return m_xudot;}
- virtual void updateCoordinates(const Timestamp& timestamp)=0;
+ virtual void updateCoordinates(const struct EvaluationContext *eval_ctx, const Timestamp& timestamp)=0;
virtual const unsigned int getNrOfCoordinates(){return m_nu;};
virtual const unsigned int getNrOfFrames(){return m_nf;};
diff --git a/intern/itasc/WorldObject.hpp b/intern/itasc/WorldObject.hpp
index 99756dcd684..9876090e128 100644
--- a/intern/itasc/WorldObject.hpp
+++ b/intern/itasc/WorldObject.hpp
@@ -16,7 +16,7 @@ public:
WorldObject();
virtual ~WorldObject();
- virtual void updateCoordinates(const Timestamp& timestamp) {};
+ virtual void updateCoordinates(const struct EvaluationContext *eval_ctx, const Timestamp& timestamp) {};
virtual void updateKinematics(const Timestamp& timestamp) {};
virtual void pushCache(const Timestamp& timestamp) {};
virtual void initCache(Cache *_cache) {};
diff --git a/intern/opencolorio/CMakeLists.txt b/intern/opencolorio/CMakeLists.txt
index 75e228933aa..2611477252a 100644
--- a/intern/opencolorio/CMakeLists.txt
+++ b/intern/opencolorio/CMakeLists.txt
@@ -27,6 +27,7 @@ set(INC
.
../glew-mx
../guardedalloc
+ ../gawain
../../source/blender/blenlib
)
@@ -66,6 +67,7 @@ if(WITH_OPENCOLORIO)
endif()
data_to_c_simple(gpu_shader_display_transform.glsl SRC)
+ data_to_c_simple(gpu_shader_display_transform_vertex.glsl SRC)
endif()
diff --git a/intern/opencolorio/gpu_shader_display_transform.glsl b/intern/opencolorio/gpu_shader_display_transform.glsl
index 853bf575582..f1dca04b823 100644
--- a/intern/opencolorio/gpu_shader_display_transform.glsl
+++ b/intern/opencolorio/gpu_shader_display_transform.glsl
@@ -5,10 +5,8 @@ uniform sampler3D lut3d_texture;
uniform float dither;
#endif
-#ifdef USE_TEXTURE_SIZE
-uniform float image_texture_width;
-uniform float image_texture_height;
-#endif
+in vec2 texCoord_interp;
+out vec4 fragColor;
#ifdef USE_CURVE_MAPPING
/* Curve mapping parameters
@@ -38,7 +36,7 @@ float read_curve_mapping(int table, int index)
* But is it actually correct to subtract 1 here?
*/
float texture_index = float(index) / float(curve_mapping_lut_size - 1);
- return texture1D(curve_mapping_texture, texture_index)[table];
+ return texture(curve_mapping_texture, texture_index)[table];
}
float curvemap_calc_extend(int table, float x, vec2 first, vec2 last)
@@ -119,11 +117,7 @@ float dither_random_value(vec2 co)
vec2 round_to_pixel(vec2 st)
{
vec2 result;
-#ifdef USE_TEXTURE_SIZE
- vec2 size = vec2(image_texture_width, image_texture_height);
-#else
vec2 size = textureSize(image_texture, 0);
-#endif
result.x = float(int(st.x * size.x)) / size.x;
result.y = float(int(st.y * size.y)) / size.y;
return result;
@@ -143,7 +137,7 @@ vec4 apply_dither(vec2 st, vec4 col)
void main()
{
- vec4 col = texture2D(image_texture, gl_TexCoord[0].st);
+ vec4 col = texture(image_texture, texCoord_interp.st);
#ifdef USE_CURVE_MAPPING
col = curvemapping_evaluate_premulRGBF(col);
#endif
@@ -165,8 +159,8 @@ void main()
vec4 result = OCIODisplay(col, lut3d_texture);
#ifdef USE_DITHER
- result = apply_dither(gl_TexCoord[0].st, result);
+ result = apply_dither(texCoord_interp.st, result);
#endif
- gl_FragColor = result;
+ fragColor = result;
}
diff --git a/intern/opencolorio/gpu_shader_display_transform_vertex.glsl b/intern/opencolorio/gpu_shader_display_transform_vertex.glsl
new file mode 100644
index 00000000000..054f7f3ec91
--- /dev/null
+++ b/intern/opencolorio/gpu_shader_display_transform_vertex.glsl
@@ -0,0 +1,12 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+
+in vec2 texCoord;
+in vec2 pos;
+out vec2 texCoord_interp;
+
+void main()
+{
+ gl_Position = ModelViewProjectionMatrix * vec4(pos.xy, 0.0f, 1.0f);
+ texCoord_interp = texCoord;
+}
diff --git a/intern/opencolorio/ocio_impl_glsl.cc b/intern/opencolorio/ocio_impl_glsl.cc
index bf91ea143da..08f3c15eb95 100644
--- a/intern/opencolorio/ocio_impl_glsl.cc
+++ b/intern/opencolorio/ocio_impl_glsl.cc
@@ -48,6 +48,9 @@
# pragma warning(pop)
#endif
+extern "C" {
+#include "gawain/gwn_immediate.h"
+}
using namespace OCIO_NAMESPACE;
@@ -58,6 +61,7 @@ using namespace OCIO_NAMESPACE;
static const int LUT3D_EDGE_SIZE = 64;
extern "C" char datatoc_gpu_shader_display_transform_glsl[];
+extern "C" char datatoc_gpu_shader_display_transform_vertex_glsl[];
/* **** OpenGL drawing routines using GLSL for color space transform ***** */
@@ -81,15 +85,15 @@ typedef struct OCIO_GLSLDrawState {
bool predivide_used;
- bool texture_size_used;
-
/* Cache */
std::string lut3dcacheid;
std::string shadercacheid;
/* GLSL stuff */
GLuint ocio_shader;
+ GLuint vert_shader;
GLuint program;
+ Gwn_ShaderInterface *shader_interface;
/* Previous OpenGL state. */
GLint last_texture, last_texture_unit;
@@ -116,14 +120,15 @@ static GLuint compileShaderText(GLenum shaderType, const char *text)
return shader;
}
-static GLuint linkShaders(GLuint ocio_shader)
+static GLuint linkShaders(GLuint ocio_shader, GLuint vert_shader)
{
- if (!ocio_shader)
+ if (!ocio_shader || !vert_shader)
return 0;
GLuint program = glCreateProgram();
glAttachShader(program, ocio_shader);
+ glAttachShader(program, vert_shader);
glLinkProgram(program);
@@ -233,17 +238,6 @@ bool OCIOImpl::supportGLSLDraw()
return GLEW_VERSION_3_0 || GLEW_ARB_texture_float;
}
-static bool supportGLSL13()
-{
- const char *version = (const char*)glGetString(GL_SHADING_LANGUAGE_VERSION);
- int major = 1, minor = 0;
-
- if (version && sscanf(version, "%d.%d", &major, &minor) == 2)
- return (major > 1 || (major == 1 && minor >= 30));
-
- return false;
-}
-
/**
* Setup OpenGL contexts for a transform defined by processor using GLSL
* All LUT allocating baking and shader compilation happens here.
@@ -339,15 +333,26 @@ bool OCIOImpl::setupGLSLDraw(OCIO_GLSLDrawState **state_r, OCIO_ConstProcessorRc
glDeleteShader(state->ocio_shader);
}
+ if (state->vert_shader) {
+ glDeleteShader(state->vert_shader);
+ }
+
+ /* Vertex shader */
+ std::ostringstream osv;
+
+ osv << "#version 330\n";
+ osv << datatoc_gpu_shader_display_transform_vertex_glsl;
+
+ state->vert_shader = compileShaderText(GL_VERTEX_SHADER, osv.str().c_str());
+
+ /* Fragment shader */
std::ostringstream os;
- if (supportGLSL13()) {
- os << "#version 130\n";
- }
- else {
- os << "#define USE_TEXTURE_SIZE\n";
- state->texture_size_used = use_dither;
- }
+ os << "#version 330\n";
+
+ /* Work around OpenColorIO not supporting latest GLSL yet. */
+ os << "#define texture2D texture\n";
+ os << "#define texture3D texture\n";
if (use_predivide) {
os << "#define USE_PREDIVIDE\n";
@@ -366,8 +371,15 @@ bool OCIOImpl::setupGLSLDraw(OCIO_GLSLDrawState **state_r, OCIO_ConstProcessorRc
state->ocio_shader = compileShaderText(GL_FRAGMENT_SHADER, os.str().c_str());
- if (state->ocio_shader) {
- state->program = linkShaders(state->ocio_shader);
+ if (state->ocio_shader && state->vert_shader) {
+ state->program = linkShaders(state->ocio_shader, state->vert_shader);
+ }
+
+ if (state->program) {
+ if (state->shader_interface) {
+ GWN_shaderinterface_discard(state->shader_interface);
+ }
+ state->shader_interface = GWN_shaderinterface_create(state->program);
}
state->curve_mapping_used = use_curve_mapping;
@@ -386,43 +398,42 @@ bool OCIOImpl::setupGLSLDraw(OCIO_GLSLDrawState **state_r, OCIO_ConstProcessorRc
glActiveTexture(GL_TEXTURE0);
- glUseProgram(state->program);
-
- glUniform1i(glGetUniformLocation(state->program, "image_texture"), 0);
- glUniform1i(glGetUniformLocation(state->program, "lut3d_texture"), 1);
-
- if (state->texture_size_used) {
- /* we use textureSize() if possible for best performance, if not
- * supported we query the size and pass it as uniform variables */
- GLint width, height;
-
- glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width);
- glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &height);
-
- glUniform1f(glGetUniformLocation(state->program, "image_texture_width"), (float)width);
- glUniform1f(glGetUniformLocation(state->program, "image_texture_height"), (float)height);
- }
+ /* IMM needs vertex format even if we don't draw with it.
+ *
+ * NOTE: The only reason why it's here is because of Cycles viewport.
+ * All other areas are managing their own vertex formats.
+ * Doing it here is probably harmless, but kind of stupid.
+ *
+ * TODO(sergey): Look into some nicer solution.
+ */
+ Gwn_VertFormat *format = immVertexFormat();
+ GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ GWN_vertformat_attr_add(format, "texCoord", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindProgram(state->program, state->shader_interface);
+
+ immUniform1i("image_texture", 0);
+ immUniform1i("lut3d_texture", 1);
if (use_dither) {
- glUniform1f(glGetUniformLocation(state->program, "dither"), dither);
+ immUniform1f("dither", dither);
}
if (use_curve_mapping) {
- glUniform1i(glGetUniformLocation(state->program, "curve_mapping_texture"), 2);
- glUniform1i(glGetUniformLocation(state->program, "curve_mapping_lut_size"), curve_mapping_settings->lut_size);
- glUniform4iv(glGetUniformLocation(state->program, "use_curve_mapping_extend_extrapolate"), 1, curve_mapping_settings->use_extend_extrapolate);
- glUniform4fv(glGetUniformLocation(state->program, "curve_mapping_mintable"), 1, curve_mapping_settings->mintable);
- glUniform4fv(glGetUniformLocation(state->program, "curve_mapping_range"), 1, curve_mapping_settings->range);
- glUniform4fv(glGetUniformLocation(state->program, "curve_mapping_ext_in_x"), 1, curve_mapping_settings->ext_in_x);
- glUniform4fv(glGetUniformLocation(state->program, "curve_mapping_ext_in_y"), 1, curve_mapping_settings->ext_in_y);
- glUniform4fv(glGetUniformLocation(state->program, "curve_mapping_ext_out_x"), 1, curve_mapping_settings->ext_out_x);
- glUniform4fv(glGetUniformLocation(state->program, "curve_mapping_ext_out_y"), 1, curve_mapping_settings->ext_out_y);
- glUniform4fv(glGetUniformLocation(state->program, "curve_mapping_first_x"), 1, curve_mapping_settings->first_x);
- glUniform4fv(glGetUniformLocation(state->program, "curve_mapping_first_y"), 1, curve_mapping_settings->first_y);
- glUniform4fv(glGetUniformLocation(state->program, "curve_mapping_last_x"), 1, curve_mapping_settings->last_x);
- glUniform4fv(glGetUniformLocation(state->program, "curve_mapping_last_y"), 1, curve_mapping_settings->last_y);
- glUniform3fv(glGetUniformLocation(state->program, "curve_mapping_black"), 1, curve_mapping_settings->black);
- glUniform3fv(glGetUniformLocation(state->program, "curve_mapping_bwmul"), 1, curve_mapping_settings->bwmul);
+ immUniform1i("curve_mapping_texture", 2);
+ immUniform1i("curve_mapping_lut_size", curve_mapping_settings->lut_size);
+ immUniform4iv("use_curve_mapping_extend_extrapolate", curve_mapping_settings->use_extend_extrapolate);
+ immUniform4fv("curve_mapping_mintable", curve_mapping_settings->mintable);
+ immUniform4fv("curve_mapping_range", curve_mapping_settings->range);
+ immUniform4fv("curve_mapping_ext_in_x", curve_mapping_settings->ext_in_x);
+ immUniform4fv("curve_mapping_ext_in_y", curve_mapping_settings->ext_in_y);
+ immUniform4fv("curve_mapping_ext_out_x", curve_mapping_settings->ext_out_x);
+ immUniform4fv("curve_mapping_ext_out_y", curve_mapping_settings->ext_out_y);
+ immUniform4fv("curve_mapping_first_x", curve_mapping_settings->first_x);
+ immUniform4fv("curve_mapping_first_y", curve_mapping_settings->first_y);
+ immUniform4fv("curve_mapping_last_x", curve_mapping_settings->last_x);
+ immUniform4fv("curve_mapping_last_y", curve_mapping_settings->last_y);
+ immUniform3fv("curve_mapping_black", curve_mapping_settings->black);
+ immUniform3fv("curve_mapping_bwmul", curve_mapping_settings->bwmul);
}
return true;
@@ -439,7 +450,7 @@ void OCIOImpl::finishGLSLDraw(OCIO_GLSLDrawState *state)
{
glActiveTexture(state->last_texture_unit);
glBindTexture(GL_TEXTURE_2D, state->last_texture);
- glUseProgram(0);
+ immUnbindProgram();
}
void OCIOImpl::freeGLState(struct OCIO_GLSLDrawState *state)
@@ -455,6 +466,9 @@ void OCIOImpl::freeGLState(struct OCIO_GLSLDrawState *state)
if (state->program)
glDeleteProgram(state->program);
+ if (state->shader_interface)
+ GWN_shaderinterface_discard(state->shader_interface);
+
if (state->ocio_shader)
glDeleteShader(state->ocio_shader);
diff --git a/intern/opensubdiv/gpu_shader_opensubdiv_geometry.glsl b/intern/opensubdiv/gpu_shader_opensubdiv_geometry.glsl
index 3a83d44a8be..b16a5cca733 100644
--- a/intern/opensubdiv/gpu_shader_opensubdiv_geometry.glsl
+++ b/intern/opensubdiv/gpu_shader_opensubdiv_geometry.glsl
@@ -29,22 +29,11 @@ struct VertexData {
vec2 uv;
};
-#if __VERSION__ >= 150
layout(lines_adjacency) in;
- #ifdef WIREFRAME
+#ifdef WIREFRAME
layout(line_strip, max_vertices = 8) out;
- #else
-layout(triangle_strip, max_vertices = 4) out;
- #endif
#else
- #extension GL_EXT_geometry_shader4: require
- /* application provides input/output layout info */
-#endif
-
-#if __VERSION__ < 140
- #extension GL_ARB_uniform_buffer_object: require
- #extension GL_ARB_texture_buffer_object: enable
- #extension GL_EXT_texture_buffer_object: enable
+layout(triangle_strip, max_vertices = 4) out;
#endif
uniform mat4 modelViewMatrix;
diff --git a/intern/opensubdiv/gpu_shader_opensubdiv_vertex.glsl b/intern/opensubdiv/gpu_shader_opensubdiv_vertex.glsl
index 6d3c06f59c9..6fcf5ad20cd 100644
--- a/intern/opensubdiv/gpu_shader_opensubdiv_vertex.glsl
+++ b/intern/opensubdiv/gpu_shader_opensubdiv_vertex.glsl
@@ -43,11 +43,4 @@ void main()
{
outpt.v.position = modelViewMatrix * position;
outpt.v.normal = normalize(normalMatrix * normal);
-
-#if __VERSION__ < 140
- /* Some compilers expects gl_Position to be written.
- * It's not needed once we explicitly switch to GLSL 1.40 or above.
- */
- gl_Position = outpt.v.position;
-#endif
}
diff --git a/intern/opensubdiv/opensubdiv_capi.cc b/intern/opensubdiv/opensubdiv_capi.cc
index 0a55a432cc6..bb865bc0e0f 100644
--- a/intern/opensubdiv/opensubdiv_capi.cc
+++ b/intern/opensubdiv/opensubdiv_capi.cc
@@ -412,19 +412,6 @@ const struct OpenSubdiv_TopologyRefinerDescr *openSubdiv_getGLMeshTopologyRefine
return gl_mesh->topology_refiner;
}
-int openSubdiv_supportGPUDisplay(void)
-{
- // TODO: simplify extension check once Blender adopts GL 3.2
- return openSubdiv_gpu_legacy_support() &&
- (GLEW_VERSION_3_2 ||
- (GLEW_VERSION_3_1 && GLEW_EXT_geometry_shader4) ||
- (GLEW_VERSION_3_0 &&
- GLEW_EXT_geometry_shader4 &&
- GLEW_ARB_uniform_buffer_object &&
- (GLEW_ARB_texture_buffer_object || GLEW_EXT_texture_buffer_object)));
- /* also ARB_explicit_attrib_location? */
-}
-
int openSubdiv_getVersionHex(void)
{
#if defined(OPENSUBDIV_VERSION_NUMBER)
diff --git a/intern/opensubdiv/opensubdiv_capi.h b/intern/opensubdiv/opensubdiv_capi.h
index 281bd3f010d..2c3fcee7dbb 100644
--- a/intern/opensubdiv/opensubdiv_capi.h
+++ b/intern/opensubdiv/opensubdiv_capi.h
@@ -146,11 +146,9 @@ void openSubdiv_osdGLAllocFVar(struct OpenSubdiv_TopologyRefinerDescr *topology_
void openSubdiv_osdGLDestroyFVar(OpenSubdiv_GLMesh *gl_mesh);
/* ** Utility functions ** */
-int openSubdiv_supportGPUDisplay(void);
int openSubdiv_getAvailableEvaluators(void);
-void openSubdiv_init(bool gpu_legacy_support);
+void openSubdiv_init(void);
void openSubdiv_cleanup(void);
-bool openSubdiv_gpu_legacy_support(void);
int openSubdiv_getVersionHex(void);
diff --git a/intern/opensubdiv/opensubdiv_gpu_capi.cc b/intern/opensubdiv/opensubdiv_gpu_capi.cc
index c36eaae1c6e..7d8085c1ff5 100644
--- a/intern/opensubdiv/opensubdiv_gpu_capi.cc
+++ b/intern/opensubdiv/opensubdiv_gpu_capi.cc
@@ -275,24 +275,6 @@ GLuint linkProgram(const char *version, const char *define)
glBindAttribLocation(program, 0, "position");
glBindAttribLocation(program, 1, "normal");
-
- if (!GLEW_VERSION_3_2) {
- /* provide input/output layout info */
- glProgramParameteriEXT(program,
- GL_GEOMETRY_INPUT_TYPE_EXT,
- GL_LINES_ADJACENCY_EXT);
-
- bool wireframe = strstr(define, "WIREFRAME") != NULL;
-
- glProgramParameteriEXT(program,
- GL_GEOMETRY_OUTPUT_TYPE_EXT,
- wireframe ? GL_LINE_STRIP : GL_TRIANGLE_STRIP);
-
- glProgramParameteriEXT(program,
- GL_GEOMETRY_VERTICES_OUT_EXT,
- 8);
- }
-
glLinkProgram(program);
glDeleteShader(vertexShader);
@@ -314,17 +296,26 @@ GLuint linkProgram(const char *version, const char *define)
glGetUniformBlockIndex(program, "Lighting"),
0);
- glProgramUniform1i(program,
- glGetUniformLocation(program, "texture_buffer"),
- 0); /* GL_TEXTURE0 */
+ if (GLEW_VERSION_4_1) {
+ glProgramUniform1i(program,
+ glGetUniformLocation(program, "texture_buffer"),
+ 0); /* GL_TEXTURE0 */
- glProgramUniform1i(program,
- glGetUniformLocation(program, "FVarDataOffsetBuffer"),
- 30); /* GL_TEXTURE30 */
+ glProgramUniform1i(program,
+ glGetUniformLocation(program, "FVarDataOffsetBuffer"),
+ 30); /* GL_TEXTURE30 */
- glProgramUniform1i(program,
- glGetUniformLocation(program, "FVarDataBuffer"),
- 31); /* GL_TEXTURE31 */
+ glProgramUniform1i(program,
+ glGetUniformLocation(program, "FVarDataBuffer"),
+ 31); /* GL_TEXTURE31 */
+ }
+ else {
+ glUseProgram(program);
+ glUniform1i(glGetUniformLocation(program, "texture_buffer"), 0); /* GL_TEXTURE0 */
+ glUniform1i(glGetUniformLocation(program, "FVarDataOffsetBuffer"), 30); /* GL_TEXTURE30 */
+ glUniform1i(glGetUniformLocation(program, "FVarDataBuffer"), 31); /* GL_TEXTURE31 */
+ glUseProgram(0);
+ }
return program;
}
@@ -353,10 +344,8 @@ void bindProgram(OpenSubdiv_GLMesh *gl_mesh, int program)
glBindBufferBase(GL_UNIFORM_BUFFER, 0, g_lighting_ub);
/* Color */
- GLboolean use_lighting;
- glGetBooleanv(GL_LIGHTING, &use_lighting);
-
- if (use_lighting) {
+ {
+ /* TODO: stop using glGetMaterial */
float color[4];
glGetMaterialfv(GL_FRONT, GL_DIFFUSE, color);
glUniform4fv(glGetUniformLocation(program, "diffuse"), 1, color);
@@ -367,11 +356,6 @@ void bindProgram(OpenSubdiv_GLMesh *gl_mesh, int program)
glGetMaterialfv(GL_FRONT, GL_SHININESS, color);
glUniform1f(glGetUniformLocation(program, "shininess"), color[0]);
}
- else {
- float color[4];
- glGetFloatv(GL_CURRENT_COLOR, color);
- glUniform4fv(glGetUniformLocation(program, "diffuse"), 1, color);
- }
/* Face-vertex data */
if (gl_mesh->fvar_data != NULL) {
@@ -409,11 +393,10 @@ bool openSubdiv_osdGLDisplayInit(void)
{
static bool need_init = true;
static bool init_success = false;
- if (need_init) {
- if (!openSubdiv_supportGPUDisplay()) {
- return false;
- }
+ if (need_init) {
+ /* TODO: update OSD drawing to OpenGL 3.3 core, then remove following line */
+ return false;
const char *version = "";
if (GLEW_VERSION_3_2) {
@@ -538,6 +521,7 @@ void openSubdiv_osdGLMeshDisplayPrepare(int use_osd_glsl,
g_lighting_data.num_enabled++;
}
+ /* TODO: stop using glGetLight */
glGetLightfv(GL_LIGHT0 + i,
GL_POSITION,
g_lighting_data.lights[i].position);
@@ -632,34 +616,27 @@ static GLuint prepare_patchDraw(OpenSubdiv_GLMesh *gl_mesh,
if (fill_quads) {
int model;
- GLboolean use_texture_2d, use_lighting;
+ GLboolean use_texture_2d;
glGetIntegerv(GL_SHADE_MODEL, &model);
glGetBooleanv(GL_TEXTURE_2D, &use_texture_2d);
- glGetBooleanv(GL_LIGHTING, &use_lighting);
+
if (model == GL_FLAT) {
if (use_texture_2d) {
- program = use_lighting
- ? g_flat_fill_texture2d_program
- : g_flat_fill_texture2d_shadeless_program;
+ program = g_flat_fill_texture2d_program;
}
else {
- program = use_lighting
- ? g_flat_fill_solid_program
- : g_flat_fill_solid_shadeless_program;
+ program = g_flat_fill_solid_program;
}
}
else {
if (use_texture_2d) {
- program = use_lighting
- ? g_smooth_fill_texture2d_program
- : g_smooth_fill_texture2d_shadeless_program;
+ program = g_smooth_fill_texture2d_program;
}
else {
- program = use_lighting
- ? g_smooth_fill_solid_program
- : g_smooth_fill_solid_shadeless_program;
+ program = g_smooth_fill_solid_program;
}
}
+
}
else {
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
diff --git a/intern/opensubdiv/opensubdiv_utils_capi.cc b/intern/opensubdiv/opensubdiv_utils_capi.cc
index ae5592367dd..72e3751e6b3 100644
--- a/intern/opensubdiv/opensubdiv_utils_capi.cc
+++ b/intern/opensubdiv/opensubdiv_utils_capi.cc
@@ -41,14 +41,8 @@
# include "opensubdiv_device_context_cuda.h"
#endif /* OPENSUBDIV_HAS_CUDA */
-static bool gpu_legacy_support_global = false;
-
int openSubdiv_getAvailableEvaluators(void)
{
- if (!openSubdiv_supportGPUDisplay()) {
- return 0;
- }
-
int flags = OPENSUBDIV_EVALUATOR_CPU;
#ifdef OPENSUBDIV_HAS_OPENMP
@@ -82,19 +76,13 @@ int openSubdiv_getAvailableEvaluators(void)
return flags;
}
-void openSubdiv_init(bool gpu_legacy_support)
+void openSubdiv_init(void)
{
/* Ensure all OpenGL strings are cached. */
(void)openSubdiv_getAvailableEvaluators();
- gpu_legacy_support_global = gpu_legacy_support;
}
void openSubdiv_cleanup(void)
{
openSubdiv_osdGLDisplayDeinit();
}
-
-bool openSubdiv_gpu_legacy_support(void)
-{
- return gpu_legacy_support_global;
-}
diff --git a/make.bat b/make.bat
index d6319ee8308..d00a9ecf711 100644
--- a/make.bat
+++ b/make.bat
@@ -105,7 +105,7 @@ if NOT "%1" == "" (
) else if "%1" == "update" (
svn up ../lib/*
git pull --rebase
- git submodule foreach git pull --rebase origin master
+ git submodule update --remote
goto EOF
) else if "%1" == "clean" (
set MUST_CLEAN=1
diff --git a/release/darwin/blender.app/Contents/Info.plist b/release/darwin/blender.app/Contents/Info.plist
index 0649a2075cd..92e8d8cc761 100644
--- a/release/darwin/blender.app/Contents/Info.plist
+++ b/release/darwin/blender.app/Contents/Info.plist
@@ -2,6 +2,8 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
+ <key>LSMinimumSystemVersion</key>
+ <string>10.9.0</string>
<key>CFBundleDocumentTypes</key>
<array>
<dict>
@@ -47,5 +49,7 @@
<string>NSApplication</string>
<key>NSHighResolutionCapable</key>
<true/>
+ <key>NSSupportsAutomaticGraphicsSwitching</key>
+ <true/>
</dict>
</plist>
diff --git a/release/datafiles/blender_icons.svg b/release/datafiles/blender_icons.svg
index a9c0fd431eb..44a1ebcbbf4 100644
--- a/release/datafiles/blender_icons.svg
+++ b/release/datafiles/blender_icons.svg
@@ -14,7 +14,7 @@
height="640"
id="svg2"
sodipodi:version="0.32"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
version="1.0"
sodipodi:docname="blender_icons.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
@@ -27,6 +27,21 @@
<defs
id="defs4">
<linearGradient
+ id="linearGradient18906">
+ <stop
+ id="stop18904"
+ offset="0"
+ style="stop-color:#ffb36b;stop-opacity:1" />
+ <stop
+ style="stop-color:#ff982a;stop-opacity:1;"
+ offset="0.6832175"
+ id="stop18902" />
+ <stop
+ id="stop18900"
+ offset="1"
+ style="stop-color:#b45d00;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
id="linearGradient31767"
inkscape:collect="always">
<stop
@@ -31346,13 +31361,14 @@
x1="189.76083"
y1="248.13905"
x2="116.05637"
- y2="183.6826" />
+ y2="183.6826"
+ gradientTransform="translate(335.99871,21.048284)" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient22562"
id="radialGradient23167-6"
gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.99220964,-0.12457927,0.11585516,0.92272644,-34.13325,22.766225)"
+ gradientTransform="matrix(0.5950386,-0.0747115,0.06947956,0.55336879,432.31142,44.44399)"
cx="-0.78262758"
cy="294.63174"
fx="-0.78262758"
@@ -31488,6 +31504,176 @@
offset="1"
id="stop3066" />
</linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient18906"
+ id="linearGradient14276"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-21)"
+ x1="59.622501"
+ y1="54.1525"
+ x2="60.981617"
+ y2="55.566177" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1610-2"
+ id="linearGradient14278"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-0.5,-21)"
+ x1="60.25"
+ y1="56.5"
+ x2="57.789688"
+ y2="54.130001" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient14829"
+ id="linearGradient14280"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-0.5,-21)"
+ x1="60.25"
+ y1="56.5"
+ x2="56"
+ y2="52.25" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient15859-1-3"
+ id="linearGradient14283"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-1.54625,-1)"
+ x1="63.666252"
+ y1="37.960625"
+ x2="60.676094"
+ y2="34.685287" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient63892"
+ id="linearGradient14285"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-21)"
+ x1="52.17437"
+ y1="65.644958"
+ x2="50.371208"
+ y2="62.960247" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient18134"
+ id="radialGradient53141-7"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.684011,0.3442329,-1.2972142,1.1562236,739.67527,-1155.7895)"
+ cx="975.50568"
+ cy="690.68732"
+ fx="975.50568"
+ fy="690.68732"
+ r="2.333364" />
+ <mask
+ maskUnits="userSpaceOnUse"
+ id="mask57450-1">
+ <rect
+ y="154.99899"
+ x="326.00305"
+ height="15"
+ width="15"
+ id="rect57452-3"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient57454);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
+ </mask>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient23974"
+ id="linearGradient18738"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8008385,0,0,0.821004,429.95027,-161.55482)"
+ x1="108.71671"
+ y1="171.25618"
+ x2="105.85706"
+ y2="168.04703" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient20756"
+ id="linearGradient18740"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8008385,0,0,0.8956408,540.31118,-183.20693)"
+ x1="-26.313976"
+ y1="178.07901"
+ x2="-28.432825"
+ y2="175.87964" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient319"
+ id="linearGradient18742"
+ gradientUnits="userSpaceOnUse"
+ x1="510.29913"
+ y1="-20.435461"
+ x2="505.9494"
+ y2="-17.546936" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient25108-1-0"
+ id="linearGradient18808"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-21)"
+ x1="59.622501"
+ y1="54.1525"
+ x2="60.981617"
+ y2="55.566177" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1610-2"
+ id="linearGradient18810"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-0.5,-21)"
+ x1="60.25"
+ y1="56.5"
+ x2="57.789688"
+ y2="54.130001" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient14829"
+ id="linearGradient18812"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-0.5,-21)"
+ x1="60.25"
+ y1="56.5"
+ x2="56"
+ y2="52.25" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32877-9-6-8"
+ id="linearGradient18814"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-1.54625,-1)"
+ x1="63.666252"
+ y1="37.960625"
+ x2="60.676094"
+ y2="34.685287" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient23974-3-78-2"
+ id="linearGradient18816"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-21)"
+ x1="52.17437"
+ y1="65.644958"
+ x2="50.371208"
+ y2="62.960247" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1610-6"
+ id="linearGradient33545"
+ gradientUnits="userSpaceOnUse"
+ x1="189.76083"
+ y1="248.13905"
+ x2="116.05637"
+ y2="183.6826" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9030"
+ id="linearGradient33547"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-6,1.4603138e-6)"
+ x1="474.84375"
+ y1="75"
+ x2="477.5"
+ y2="77.5" />
</defs>
<sodipodi:namedview
id="base"
@@ -31499,16 +31685,16 @@
objecttolerance="10000"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="19.997864"
- inkscape:cx="462.52244"
- inkscape:cy="435.14241"
+ inkscape:zoom="2.499733"
+ inkscape:cx="368.97199"
+ inkscape:cy="160.72383"
inkscape:document-units="px"
- inkscape:current-layer="g23149-4"
+ inkscape:current-layer="ICON_LIBRARY_DATA_DIRECT-3"
showgrid="true"
inkscape:window-width="1920"
- inkscape:window-height="1025"
- inkscape:window-x="-8"
- inkscape:window-y="-8"
+ inkscape:window-height="981"
+ inkscape:window-x="0"
+ inkscape:window-y="28"
inkscape:snap-nodes="true"
inkscape:snap-bbox="true"
showguides="true"
@@ -31534,8 +31720,8 @@
id="grid17394"
visible="true"
enabled="true"
- spacingx="0.25px"
- spacingy="0.25px"
+ spacingx="0.25"
+ spacingy="0.25"
empspacing="4"
color="#808080"
opacity="0.09803922"
@@ -31543,8 +31729,8 @@
empcolor="#7f7f7f"
empopacity="0.25098039"
snapvisiblegridlinesonly="true"
- originx="0px"
- originy="-2.7755576e-17px" />
+ originx="0"
+ originy="-2.7755576e-17" />
</sodipodi:namedview>
<metadata
id="metadata7">
@@ -39521,13 +39707,13 @@
<path
sodipodi:nodetypes="ccccccccc"
id="path29879-5-0-9-1"
- d="m 392.96689,241.84215 -0.56915,0 -3.5287,2.84782 0,1.13912 3.5287,2.84781 0.56915,0 0,-6.83475 0,0 0,0 z"
- style="color:#000000;fill:url(#radialGradient106344-5-2);fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient106433-4);stroke-width:0.66107476px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 392.96689,241.84215 h -0.56915 l -3.5287,2.84782 v 1.13912 l 3.5287,2.84781 h 0.56915 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient106344-5-2);fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient106433-4);stroke-width:0.66107476px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
id="path29881-5-6-0-4"
- d="m 392.96688,248.67221 -0.57173,0 -3.51515,-2.83619 -0.008,-1.21916"
+ d="m 392.96688,248.67221 h -0.57173 l -3.51515,-2.83619 -0.008,-1.21916"
style="fill:none;stroke:url(#linearGradient106307-2-4);stroke-width:0.66107482px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
@@ -39537,7 +39723,7 @@
height="16"
width="16"
id="rect24491-0"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
</g>
<g
style="display:inline;enable-background:new"
@@ -39554,7 +39740,7 @@
transform="translate(-320.42789,5.4177849)"
style="display:inline">
<rect
- style="opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate"
id="rect14717"
width="16"
height="16"
@@ -39585,7 +39771,7 @@
</g>
</g>
<rect
- style="opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:6;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:6;marker:none;enable-background:accumulate"
id="rect14727"
width="16"
height="16"
@@ -39597,8 +39783,8 @@
inkscape:export-ydpi="90" />
<path
inkscape:connector-curvature="0"
- style="fill:url(#linearGradient14800);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline"
- d="m 72.738774,294.91779 10.33334,0 0,14.99999 -13,0 -1e-5,-11.99999 2.66667,-3 z"
+ style="display:inline;fill:url(#linearGradient14800);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
+ d="m 72.738774,294.91779 h 10.33334 v 14.99999 h -13 l -1e-5,-11.99999 z"
id="path14729"
sodipodi:nodetypes="cccccc"
inkscape:export-filename="/home/georg/Arbeitsfläche/2012/Blender Coding/Patch #2a/icon_redone 4 (alpha).png"
@@ -39607,8 +39793,8 @@
<path
inkscape:connector-curvature="0"
id="path14731"
- style="fill:none;stroke:url(#linearGradient14802);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;display:inline"
- d="m 71.072114,299.41778 0,9.5 m 3.5,-13 7.5,0"
+ style="display:inline;fill:none;stroke:url(#linearGradient14802);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 71.072114,299.41778 v 9.5 m 3.5,-13 h 7.5"
sodipodi:nodetypes="cccc"
inkscape:export-filename="/home/georg/Arbeitsfläche/2012/Blender Coding/Patch #2a/icon_redone 4 (alpha).png"
inkscape:export-xdpi="90"
@@ -39617,8 +39803,8 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc"
id="path14733"
- d="m 69.572114,298.41778 4,0 0,-4 -4,4 z"
- style="fill:#ffffff;fill-opacity:0.75490196;fill-rule:evenodd;stroke:none;display:inline"
+ d="m 69.572114,298.41778 h 4 v -4 z"
+ style="display:inline;fill:#ffffff;fill-opacity:0.75490196;fill-rule:evenodd;stroke:none"
inkscape:export-filename="/home/georg/Arbeitsfläche/2012/Blender Coding/Patch #2a/icon_redone 4 (alpha).png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
@@ -39626,8 +39812,8 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc"
id="path14735"
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 70.072114,297.41779 0,12.49999 13,0 0,-14.99999 -10.5,0 -2.5,2.5 z"
+ style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 70.072114,297.41779 v 12.49999 h 13 v -14.99999 h -10.5 z"
inkscape:export-filename="/home/georg/Arbeitsfläche/2012/Blender Coding/Patch #2a/icon_redone 4 (alpha).png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
@@ -39641,7 +39827,7 @@
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect14739"
width="16"
height="16"
@@ -39655,82 +39841,68 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
d="M -15.594023,497.94339 -20.25,493.5"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.34386529;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.34386528;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path14745" />
- <path
+ <ellipse
transform="matrix(3.625,0,0,3.1690202,-67.8125,318.31703)"
- d="m 14.5,57.5 a 1,1.0000004 0 0 1 -1,1 1,1.0000004 0 0 1 -1,-1 1,1.0000004 0 0 1 1,-1 1,1.0000004 0 0 1 1,1 z"
- sodipodi:ry="1.0000004"
- sodipodi:rx="1"
- sodipodi:cy="57.5"
- sodipodi:cx="13.5"
id="path14747"
- style="fill:none;stroke:#000000;stroke-width:1.32768786;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.10397505;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1.32768786;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.10397505;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="13.5"
+ cy="57.5"
+ rx="1"
+ ry="1.0000004" />
<path
inkscape:connector-curvature="0"
id="path14749"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.34386529;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -25.5,496.5 7.5,0 m -8.5,5.00012 3.5,-3.5"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.34386528;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -25.5,496.5 h 7.5 m -8.5,5.00012 3.5,-3.5"
sodipodi:nodetypes="cccc" />
</g>
- <path
+ <circle
transform="matrix(3.5999897,0,0,3.1249932,-67.499871,320.6879)"
- d="m 14.5,57.5 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- sodipodi:ry="1"
- sodipodi:rx="1"
- sodipodi:cy="57.5"
- sodipodi:cx="13.5"
id="path14751"
- style="fill:none;stroke:url(#linearGradient14804);stroke-width:0.92424375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.10397505;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient14804);stroke-width:0.92424375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.10397505;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="13.5"
+ cy="57.5"
+ r="1" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc"
d="m -25.5,496.5 7.984366,-0.0226 M -26.5,501.50012 -21.5,496.5 m 5.996227,1.44466 L -20.25,493.5"
- style="fill:none;stroke:url(#linearGradient14806);stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.34386529;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient14806);stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.34386528;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path14753" />
- <path
- sodipodi:type="arc"
+ <circle
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path14755"
- sodipodi:cx="13.5"
- sodipodi:cy="57.5"
- sodipodi:rx="1"
- sodipodi:ry="1"
- d="m 14.5,57.5 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- transform="matrix(3.25,0,0,3.25,-62.875,313.125)" />
- <path
+ transform="matrix(3.25,0,0,3.25,-62.875,313.125)"
+ cx="13.5"
+ cy="57.5"
+ r="1" />
+ <circle
transform="matrix(2,0,0,2,-46,385)"
- d="m 14.5,57.5 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- sodipodi:ry="1"
- sodipodi:rx="1"
- sodipodi:cy="57.5"
- sodipodi:cx="13.5"
id="path14757"
style="fill:#2c5aa0;fill-opacity:1;fill-rule:nonzero;stroke:none"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient14808);stroke-width:0.22536004;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.10397505;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ cx="13.5"
+ cy="57.5"
+ r="1" />
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient14808);stroke-width:0.22536004;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.10397505;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path14759"
- sodipodi:cx="13.5"
- sodipodi:cy="57.5"
- sodipodi:rx="1"
- sodipodi:ry="1"
- d="m 14.5,57.5 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- transform="matrix(4.7519907,0,0,4.1435313,-83.051884,262.12196)" />
+ transform="matrix(4.7519907,0,0,4.1435313,-83.051884,262.12196)"
+ cx="13.5"
+ cy="57.5"
+ r="1" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc"
- d="m -20.515634,493.80534 c -0.07079,-0.45769 0.0843,-0.63855 0.5,-0.5 m -6.734366,7.94478 3.280183,-3.10926 m -2,-2 6.25,0"
+ d="m -20.515634,493.80534 c -0.07079,-0.45769 0.0843,-0.63855 0.5,-0.5 m -6.734366,7.94478 3.280183,-3.10926 m -2,-2 h 6.25"
style="fill:none;stroke:url(#linearGradient14810);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
id="path14761" />
</g>
</g>
<path
style="fill:none;stroke:url(#linearGradient20368);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
- d="m 74.072114,296.91778 0,2 -2,0"
+ d="m 74.072114,296.91778 v 2 h -2"
id="path14763"
inkscape:connector-curvature="0"
inkscape:export-filename="/home/georg/Arbeitsfläche/2012/Blender Coding/Patch #2a/icon_redone 4 (alpha).png"
@@ -39741,7 +39913,7 @@
id="ICON_SMOOTHCURVE"
transform="translate(0,2)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect18813"
width="16"
height="16"
@@ -39753,7 +39925,7 @@
style="display:inline">
<path
sodipodi:nodetypes="czc"
- style="fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 4.4999991,39.491912 c 4.0000009,0 3.4999969,-7 5.9999989,-7 2.500002,0 2.000002,7 5.999999,7"
id="path10122"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -39766,7 +39938,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path10124"
d="m 4.4999991,39.491912 c 4.0000009,0 3.4999969,-7 5.9999989,-7 2.500002,0 2.000002,7 5.999999,7"
- style="fill:none;stroke:#e6e6e6;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#e6e6e6;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="czc"
inkscape:connector-curvature="0" />
</g>
@@ -39775,7 +39947,7 @@
id="ICON_LINCURVE"
transform="translate(0,2)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect18821"
width="16"
height="16"
@@ -39786,7 +39958,7 @@
id="g10158"
style="display:inline">
<path
- style="fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="M 85.500006,38.5 90.478251,33.099997 95.456495,38.5"
id="path10160"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -39799,7 +39971,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path10162"
d="M 85.500006,38.5 90.478251,33.099997 95.456495,38.5"
- style="fill:none;stroke:#e6e6e6;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#e6e6e6;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -39812,7 +39984,7 @@
height="16"
width="16"
id="rect18819"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="translate(257.01612,148.99638)"
id="g10164"
@@ -39820,7 +39992,7 @@
<path
id="path10166"
d="M 65.500015,38.5 C 68.5,37 70,35 70.560871,31.5 71,35 72.5,37 75.621727,38.5"
- style="fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -39831,7 +40003,7 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="ccc"
- style="fill:none;stroke:#e6e6e6;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#e6e6e6;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="M 65.500015,38.5 C 68.5,37 70,35 70.560871,31.5 71,35 72.5,37 75.621727,38.5"
id="path10168"
inkscape:connector-curvature="0" />
@@ -39846,14 +40018,14 @@
height="16"
width="16"
id="rect18815"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="translate(255.01612,148.99638)"
id="g10170"
style="display:inline">
<path
sodipodi:type="arc"
- style="fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path10172"
sodipodi:cx="30.5"
sodipodi:cy="40"
@@ -39881,7 +40053,7 @@
sodipodi:cy="40"
sodipodi:cx="30.5"
id="path10174"
- style="fill:none;stroke:#e6e6e6;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#e6e6e6;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:type="arc" />
</g>
</g>
@@ -39889,7 +40061,7 @@
id="ICON_ROOTCURVE"
transform="translate(0,2)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect18817"
width="16"
height="16"
@@ -39909,7 +40081,7 @@
sodipodi:cy="40"
sodipodi:cx="30.5"
id="path10178"
- style="fill:none;stroke:#000000;stroke-width:2.65631413;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:2.65631413;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:type="arc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -39921,7 +40093,7 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:type="arc"
- style="fill:none;stroke:#e6e6e6;stroke-width:1.32815707;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#e6e6e6;stroke-width:1.32815707;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path10181"
sodipodi:cx="30.5"
sodipodi:cy="40"
@@ -39943,7 +40115,7 @@
height="16"
width="16"
id="rect18823"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="translate(0.01612368,-0.00361762)"
id="g10183"
@@ -39953,14 +40125,14 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path10185"
- d="m 104.5,37.503635 0,-4.000017 12,0 0,4"
- style="fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 104.5,37.503635 v -4.000017 h 12 v 4"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
- style="fill:none;stroke:#d7d7d7;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 104.5,37.503635 0,-4.000017 12,0 0,4"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#d7d7d7;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 104.5,37.503635 v -4.000017 h 12 v 4"
id="path10187"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -39973,7 +40145,7 @@
id="ICON_RNDCURVE"
transform="translate(260,151)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect18825"
width="16"
height="16"
@@ -39988,14 +40160,14 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cssssc"
- style="fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 124.5,39.491912 c 0.99099,0 0.85013,-1.626312 1.08378,-2.386485 0.35579,-1.15753 1.07105,-1.19962 1.4919,-0.197292 1.2357,2.943014 1.5163,-5.054472 2.42432,-6.416223 1.00014,-1.499896 0.90687,8.170836 3,4 1.95704,-3.899658 1.50039,4.999088 4,5"
id="path10191"
inkscape:connector-curvature="0" />
<path
id="path10193"
d="m 124.5,39.491912 c 0.99099,0 0.85013,-1.626312 1.08378,-2.386485 0.35579,-1.15753 1.07105,-1.19962 1.4919,-0.197292 1.2357,2.943014 1.5163,-5.054472 2.42432,-6.416223 1.00014,-1.499896 0.90687,8.170836 3,4 1.95704,-3.899658 1.50039,4.999088 4,5"
- style="fill:none;stroke:#e6e6e6;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#e6e6e6;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cssssc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -40012,53 +40184,47 @@
height="16"
width="16"
id="rect18831"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="translate(263.91329,149.04559)"
id="g11360"
style="display:inline">
<path
inkscape:connector-curvature="0"
- style="fill:url(#linearGradient37097);fill-opacity:1;fill-rule:nonzero;stroke:#11243e;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient37097);fill-opacity:1;fill-rule:nonzero;stroke:#11243e;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 190.07108,29.454411 c -3.02619,0 -5.48439,2.463313 -5.48438,5.5 0,3.036688 2.45819,5.500001 5.48438,5.5 3.02619,0 5.48437,-2.46331 5.48437,-5.5 0,-3.036689 -2.45818,-5.500001 -5.48437,-5.5 z m 0,2.98305 c 1.36546,0 2.53849,1.100464 2.53848,2.454803 0,1.354341 -1.17303,2.501413 -2.53848,2.501412 -1.36546,0 -2.47581,-1.14707 -2.47581,-2.501412 0,-1.354341 1.11035,-2.454805 2.47581,-2.454803 z"
id="path11362"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
sodipodi:nodetypes="csssccsssc" />
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path11364"
- style="fill:none;stroke:url(#linearGradient15782);stroke-width:1.77120221;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
- sodipodi:type="arc"
- transform="matrix(0.566689,0,0,-0.562497,115.2063,101.3747)" />
- <path
+ style="display:inline;fill:none;stroke:url(#linearGradient15782);stroke-width:1.77120221;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.566689,0,0,-0.562497,115.2063,101.3747)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.4330916,0,0,-0.424074,132.95389,85.01929)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient33681);stroke-width:2.33340454;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient33681);stroke-width:2.33340454;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path11366"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
id="ICON_PROP_ON"
transform="translate(0,2)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect18829"
width="16"
height="16"
@@ -40074,79 +40240,64 @@
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
transform="matrix(0.786268,0,0,0.7877987,82.392071,-41.848894)">
- <path
- sodipodi:type="arc"
- style="fill:url(#linearGradient37095);fill-opacity:1;fill-rule:nonzero;stroke:#11243e;stroke-width:1.16319752;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient37095);fill-opacity:1;fill-rule:nonzero;stroke:#11243e;stroke-width:1.16319752;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path11372"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(0.874026,0,0,0.873701,-3.948211,-5.552958)" />
- <path
+ transform="matrix(0.874026,0,0,0.873701,-3.948211,-5.552958)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path11374"
- style="fill:none;stroke:url(#linearGradient33700);stroke-width:3.20095801;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.398744,0,0,-0.395524,58.82401,144.1804)" />
+ style="fill:none;stroke:url(#linearGradient33700);stroke-width:3.20095801;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.398744,0,0,-0.395524,58.82401,144.1804)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path11376"
- style="fill:none;stroke:url(#linearGradient33666);stroke-width:5.31599474;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
- sodipodi:type="arc"
- transform="matrix(0.186538,0,0,-0.189699,145.3693,57.36304)" />
- <path
+ style="display:inline;fill:none;stroke:url(#linearGradient33666);stroke-width:5.31599474;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.186538,0,0,-0.189699,145.3693,57.36304)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.566689,0,0,-0.562497,95.23056,101.3747)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient33668);stroke-width:1.77120221;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient33668);stroke-width:1.77120221;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path11378"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.424906,0,0,-0.424074,114.01316,85.183325)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient33670);stroke-width:2.35577321;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient33670);stroke-width:2.35577321;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path11380"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
id="ICON_OUTLINER_OB_EMPTY"
transform="translate(0,128)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect17412"
width="16.000002"
height="16"
@@ -40162,43 +40313,40 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path17384"
- style="fill:none;stroke:#2c1700;stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
- d="m 330.02726,-62.5 4.63639,3 m -4.63639,-3 -4.63634,3 m 4.60909,-3 0,-6"
+ style="display:inline;fill:none;stroke:#2c1700;stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
+ d="m 330.02726,-62.5 4.63639,3 m -4.63639,-3 -4.63634,3 m 4.60909,-3 v -6"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccccccccc"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- style="fill:none;stroke:#2c1700;stroke-width:1.80000007;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- d="m 329,-70 0,2 1.99999,0 0,-2 L 329,-70 z m -5,10 10e-6,2 2,0 -10e-6,-2 -2,0 z m 9.99999,0 0,2 2,0 0,-2 -2,0 z"
+ style="fill:none;stroke:#2c1700;stroke-width:1.80000007;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 329,-70 v 2 h 1.99999 v -2 z m -5,10 10e-6,2 h 2 L 326,-60 Z m 9.99999,0 v 2 h 2 v -2 z"
id="path17386"
inkscape:connector-curvature="0" />
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
transform="matrix(1.0911926,0,0,1.176776,253.08415,-79.548088)"
- d="M 72,14.5 A 1.5,1.5 0 0 1 70.5,16 1.5,1.5 0 0 1 69,14.5 1.5,1.5 0 0 1 70.5,13 1.5,1.5 0 0 1 72,14.5 Z"
- sodipodi:ry="1.5"
- sodipodi:rx="1.5"
- sodipodi:cy="14.5"
- sodipodi:cx="70.5"
id="path17388"
- style="fill:url(#radialGradient12427);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- sodipodi:type="arc" />
+ style="display:inline;fill:url(#radialGradient12427);fill-opacity:1;fill-rule:nonzero;stroke:none"
+ cx="70.5"
+ cy="14.5"
+ r="1.5" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccc"
d="m 330.02726,-62.5 4.63639,3"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffddb9;stroke-width:1.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffddb9;stroke-width:1.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
id="path17390"
inkscape:connector-curvature="0" />
<path
- d="m 330.02724,-62.5 4.63639,3 m -4.63639,-3 -4.63634,3 m 4.60909,-3 0,-6"
- style="opacity:0.8;fill:none;stroke:url(#radialGradient12429);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ d="m 330.02724,-62.5 4.63639,3 m -4.63639,-3 -4.63634,3 m 4.60909,-3 v -6"
+ style="display:inline;opacity:0.8;fill:none;stroke:url(#radialGradient12429);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
id="path17392"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -40211,7 +40359,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="ccccc"
id="path17394"
- d="m 333.99999,-60 0,2 2,0 0,-2 -2,0 z"
+ d="m 333.99999,-60 v 2 h 2 v -2 z"
style="fill:#ffca91;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<path
@@ -40220,7 +40368,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccc"
id="path17396"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#be6200;stroke-width:1.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#be6200;stroke-width:1.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
d="m 330.02726,-62.5 -4.63634,3"
inkscape:connector-curvature="0" />
<path
@@ -40229,8 +40377,8 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cc"
id="path17398"
- style="fill:none;stroke:#ff921d;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
- d="m 330.00001,-62.5 0,-6"
+ style="display:inline;fill:none;stroke:#ff921d;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
+ d="m 330.00001,-62.5 v -6"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
@@ -40238,7 +40386,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="ccccc"
style="fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 329,-70 0,2 1.99999,0 0,-2 L 329,-70 z"
+ d="m 329,-70 v 2 h 1.99999 v -2 z"
id="path17400"
inkscape:connector-curvature="0" />
<path
@@ -40247,7 +40395,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="ccccc"
style="fill:#e07400;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 324.00001,-60 0,2 1.99999,0 0,-2 -1.99999,0 z"
+ d="m 324.00001,-60 v 2 H 326 v -2 z"
id="path17402"
inkscape:connector-curvature="0" />
<rect
@@ -40256,22 +40404,22 @@
height="3.5"
width="3.5000002"
id="rect17404"
- style="opacity:0.05;fill:#552c00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.05;fill:#552c00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.79999995;marker:none;enable-background:accumulate" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="ccc"
id="path17406"
- d="m 324.49999,-58.5 0,-1 1,0"
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1.00000083px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline"
+ d="m 324.49999,-58.5 v -1 h 1"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1.00000083px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- style="fill:#ffe680;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00000107px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 329.49999,-68.5 0,-0.967392 0.99998,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffe680;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00000107px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 329.49999,-68.5 v -0.967392 h 0.99998"
id="path17408"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
@@ -40281,17 +40429,17 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="ccc"
id="path17410"
- d="m 334.5,-58.499999 0,-1 1,0"
- style="opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00000107px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline"
+ d="m 334.5,-58.499999 v -1 h 1"
+ style="display:inline;opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00000107px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ style="display:inline;opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
d="m 334,-60.5 -3,-1.870665"
id="path17415"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.3;fill:#d4aa00;fill-opacity:1;fill-rule:evenodd;stroke:#784e21;stroke-width:1.00000036px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 333.5,-59.499999 0,-1 1,0"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:#d4aa00;fill-opacity:1;fill-rule:evenodd;stroke:#784e21;stroke-width:1.00000036px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 333.5,-59.499999 v -1 h 1"
id="path17417"
sodipodi:nodetypes="ccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -40304,8 +40452,8 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cc"
id="path17419"
- d="m 329.49999,-67.5 1,0"
- style="opacity:0.4;fill:#d4aa00;fill-opacity:1;fill-rule:evenodd;stroke:#8c5b27;stroke-width:1.00000107px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline"
+ d="m 329.49999,-67.5 h 1"
+ style="display:inline;opacity:0.4;fill:#d4aa00;fill-opacity:1;fill-rule:evenodd;stroke:#8c5b27;stroke-width:1.00000107px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
@@ -40313,8 +40461,8 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="ccc"
id="path17421"
- d="m 326.49995,-59.500011 0,-1 -1,0"
- style="opacity:0.4;fill:#d4aa00;fill-opacity:1;fill-rule:evenodd;stroke:#8c5b27;stroke-width:1.00000036px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline"
+ d="m 326.49995,-59.500011 v -1 h -1"
+ style="display:inline;opacity:0.4;fill:#d4aa00;fill-opacity:1;fill-rule:evenodd;stroke:#8c5b27;stroke-width:1.00000036px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
style="opacity:0.27999998;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
@@ -40323,7 +40471,7 @@
inkscape:connector-curvature="0" />
<path
id="path17425"
- d="m 329.5,-67.5 0,4"
+ d="m 329.5,-67.5 v 4"
style="opacity:0.25;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
@@ -40333,7 +40481,7 @@
height="2"
width="2"
id="rect17427"
- style="fill:#fff1d5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#fff1d5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.79999995;marker:none;enable-background:accumulate" />
</g>
</g>
<g
@@ -40347,7 +40495,7 @@
height="16"
width="16"
id="rect17065"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g24983">
<rect
@@ -40358,9 +40506,9 @@
height="3"
width="2.9998772"
id="rect17067"
- style="fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#2b1600;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#2b1600;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#2b1600;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#2b1600;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect17069"
width="2.9998772"
height="3"
@@ -40375,10 +40523,10 @@
sodipodi:nodetypes="csc"
id="path17071"
d="m 51,315 c 4.5365,0 8.5,-3 8.5,-6 0,-1.75 -1.25,-4 -5.5,-4"
- style="fill:none;stroke:#2b1600;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#2b1600;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#ffad55;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffad55;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 51,315 c 4.49647,0 8.5,-3 8.5,-6 0,-1.75 -1.25,-4 -5.5,-4"
id="path17073"
sodipodi:nodetypes="csc"
@@ -40393,7 +40541,7 @@
sodipodi:nodetypes="csc"
id="path17075"
d="m 51,315 c 4.49647,0 8.5,-3 8.5,-6 0,-1.75 -1.25,-4 -5.5,-4"
- style="fill:none;stroke:url(#linearGradient24436);stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient24436);stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
@@ -40401,10 +40549,10 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path17077"
d="m 51.999878,314 c -0.67541,0 -1.35081,10e-6 -2.02623,10e-6 0,0.66939 0,1.33877 0,2.00817 0.67542,0 1.35082,-10e-6 2.02623,-10e-6 0,-0.66939 0,-1.33878 0,-2.00817 z"
- style="fill:#ffca91;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffca91;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffad55;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffad55;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
d="m 55,304 c -0.65334,0 -1.30668,10e-6 -1.96003,10e-6 0,0.66667 0,1.33332 0,1.99999 0.65335,0 1.30669,-10e-6 1.96003,-10e-6 0,-0.66666 0,-1.33332 0,-1.99999 z"
id="path17081"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -40412,14 +40560,14 @@
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
- d="m 53.5,305.5 0,-1 1,0"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 53.5,305.5 v -1 h 1"
id="path17083"
inkscape:connector-curvature="0" />
<path
id="path17085"
- d="m 50.473648,315.5 0,-1 1,0"
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="m 50.473648,315.5 v -1 h 1"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
@@ -40427,7 +40575,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path17087"
d="m 53,315.66293 c -0.32001,0 -0.64002,-1e-5 -0.96003,-1e-5 0,-0.55431 0,-1.1086 0,-1.66292 0.32001,0 0.64002,10e-6 0.96003,10e-6 0,0.55431 0,1.10861 0,1.66292 z"
- style="opacity:0.25;fill:#783e00;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;opacity:0.25;fill:#783e00;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
@@ -40435,10 +40583,10 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path17089"
d="m 56,306.51208 c -0.32001,0 -0.64002,-1e-5 -0.96003,-1e-5 0,-0.63982 0,-1.27964 0,-1.91948 0.32001,0 0.64002,1e-5 0.96003,1e-5 0,0.63983 0,1.27966 0,1.91948 z"
- style="opacity:0.15;fill:#783e00;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;opacity:0.15;fill:#783e00;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.5;fill:#783e00;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;opacity:0.5;fill:#783e00;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 53,316 c -0.32001,0 -0.64002,0 -0.96003,0 0,-0.21055 0,-0.42107 0,-0.63162 0.32001,0 0.64002,0 0.96003,0 0,0.21055 0,0.42107 0,0.63162 z"
id="path17091"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -40451,7 +40599,7 @@
id="ICON_OUTLINER_DATA_CURVE"
transform="translate(0,128)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect17348"
width="16"
height="16"
@@ -40463,7 +40611,7 @@
id="g10677">
<g
id="g18285"
- style="opacity:0.7;display:inline"
+ style="display:inline;opacity:0.7"
transform="translate(-290.00001,409.99343)">
<path
inkscape:export-ydpi="90"
@@ -40472,10 +40620,10 @@
sodipodi:nodetypes="csc"
id="path18233"
d="m 341.00001,-115.99343 c 4.5365,0 8.49999,-2.75 8.49999,-5.75 0,-1.75 -1.25,-4 -5.5,-4"
- style="fill:none;stroke:#1a1a1a;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#1a1a1a;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#cccccc;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#cccccc;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 341.00001,-115.99343 c 4.49647,0 8.49999,-2.75 8.49999,-5.75 0,-1.75 -1.25,-4 -5.5,-4"
id="path18235"
sodipodi:nodetypes="csc"
@@ -40496,17 +40644,17 @@
height="3"
width="2.9998772"
id="rect17355"
- style="fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path17358"
d="m 241.02763,-115 c -0.66667,0 -1.33332,1e-5 -2,1e-5 0,0.66939 0,1.33877 0,2.00817 0.66668,0 1.33333,-10e-6 2,-10e-6 0,-0.66939 0,-1.33878 0,-2.00817 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<rect
- style="fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect17360"
width="2.9998772"
height="3"
@@ -40515,7 +40663,7 @@
ry="1.4999387"
rx="1.4999387" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
d="m 244.02763,-125 c -0.65334,0 -1.30668,1e-5 -1.96003,1e-5 0,0.66667 0,1.33332 0,1.99999 0.65335,0 1.30669,-1e-5 1.96003,-1e-5 0,-0.66666 0,-1.33332 0,-1.99999 z"
id="path17362"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -40529,7 +40677,7 @@
id="ICON_GHOST"
transform="translate(0,2)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect21362"
width="16"
height="16"
@@ -40548,35 +40696,35 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccccc"
id="path9891"
- d="m 210,135.5 6.5,0 0,11 -9,0 0,-8.5 2.5,-2.5 z"
- style="fill:url(#linearGradient21370);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient21372);stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline"
+ d="m 210,135.5 h 6.5 v 11 h -9 V 138 Z"
+ style="display:inline;fill:url(#linearGradient21370);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient21372);stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
inkscape:connector-curvature="0" />
<path
transform="matrix(1.2999758,0,0,1.2999988,271.54887,-199.56022)"
sodipodi:nodetypes="ccc"
id="path9893"
- style="opacity:0.7;fill:none;stroke:#000000;stroke-width:0.76923829px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1;display:inline;filter:url(#filter31351)"
+ style="display:inline;opacity:0.7;fill:none;stroke:#000000;stroke-width:0.76923829px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1;filter:url(#filter31351)"
d="M -48.500031,260.50809 -46.5,260.5 l -3.1e-5,-1.99191"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
id="path9895"
- d="m 207,138.99999 4,0 0,-4 -4,4 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+ d="m 207,138.99999 h 4 v -4 z"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 207.5,138 0,8.5 9,0 0,-11 -6.5,0 -2.5,2.5 z"
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 207.5,138 v 8.5 h 9 v -11 H 210 Z"
+ style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path9897"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
id="path9899"
- style="fill:none;stroke:url(#linearGradient21374);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
- d="m 208.5,139.49999 0,6.00001 m 3,-9.00001 4,0"
+ style="display:inline;fill:none;stroke:url(#linearGradient21374);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 208.5,139.49999 V 145.5 m 3,-9.00001 h 4"
inkscape:connector-curvature="0" />
</g>
<g
@@ -40584,8 +40732,8 @@
transform="translate(-4,-3)"
style="opacity:0.4">
<path
- style="fill:url(#linearGradient21364);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient21366);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline"
- d="m 210,135.5 6.5,0 0,11 -9,0 0,-8.5 2.5,-2.5 z"
+ style="display:inline;fill:url(#linearGradient21364);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient21366);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
+ d="m 210,135.5 h 6.5 v 11 h -9 V 138 Z"
id="path9879"
sodipodi:nodetypes="cccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -40594,29 +40742,29 @@
inkscape:connector-curvature="0" />
<path
d="M -48.500031,260.50809 -46.5,260.5 l -3.1e-5,-1.99191"
- style="opacity:0.7;fill:none;stroke:#000000;stroke-width:0.76923829px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1;display:inline;filter:url(#filter31351)"
+ style="display:inline;opacity:0.7;fill:none;stroke:#000000;stroke-width:0.76923829px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1;filter:url(#filter31351)"
id="path9881"
sodipodi:nodetypes="ccc"
transform="matrix(1.2999758,0,0,1.2999988,271.54887,-199.56022)"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
- d="m 207,138.99999 4,0 0,-4 -4,4 z"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="m 207,138.99999 h 4 v -4 z"
id="path9883"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccc"
id="path9885"
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 207.5,138 0,8.5 9,0 0,-11 -6.5,0 -2.5,2.5 z"
+ style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 207.5,138 v 8.5 h 9 v -11 H 210 Z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- d="m 208.5,139.49999 0,6.00001 m 3,-9.00001 4,0"
- style="fill:none;stroke:url(#linearGradient21368);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="M 208.5,139.49999 V 145.5 m 3,-9.00001 h 4"
+ style="display:inline;fill:none;stroke:url(#linearGradient21368);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
id="path9887"
inkscape:connector-curvature="0" />
</g>
@@ -40639,19 +40787,16 @@
</g>
<g
id="g21550">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path10205"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.38667691;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
- sodipodi:type="arc"
- transform="matrix(0.5769158,0,0,0.5769218,86.73182,118.78861)" />
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.38667691;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.5769158,0,0,0.5769218,86.73182,118.78861)"
+ cx="132"
+ cy="118"
+ r="8" />
<g
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
@@ -40659,32 +40804,26 @@
transform="matrix(0.769221,0,0,0.769229,59.2704,9.1909)"
id="g10207"
style="display:inline">
- <path
+ <circle
transform="matrix(0.75,0,0,0.75,29.5,135)"
- sodipodi:type="arc"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.38667703;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.38667703;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path10209"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(-0.683022,-0.07745026,0.0778507,-0.683064,209.4726,314.325)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path10211"
- style="opacity:0.4;fill:url(#linearGradient21641);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- sodipodi:type="arc" />
+ style="display:inline;opacity:0.4;fill:url(#linearGradient21641);fill-opacity:1;fill-rule:nonzero;stroke:none"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
inkscape:export-ydpi="90"
@@ -40694,13 +40833,13 @@
transform="translate(-215.99994,222.97281)"
style="display:inline">
<rect
- style="opacity:0.1;fill:none;stroke:#447cce;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;display:inline"
+ style="display:inline;opacity:0.1;fill:none;stroke:#447cce;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1"
id="rect10215"
width="3.0000761"
height="2.9999874"
x="372.49994"
y="-43.495766"
- transform="matrix(1,5.251142e-6,0,1,0,0)" />
+ transform="skewY(3.0086827e-4)" />
<rect
transform="matrix(1,-5.25127e-6,0,-1,0,0)"
y="40.991806"
@@ -40708,15 +40847,15 @@
height="2.0000756"
width="2.0000861"
id="rect10217"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline" />
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" />
<rect
- style="fill:#d5e5ff;fill-opacity:1;fill-rule:nonzero;stroke:#0055d4;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;display:inline"
+ style="display:inline;fill:#d5e5ff;fill-opacity:1;fill-rule:nonzero;stroke:#0055d4;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1"
id="rect10219"
width="3.0000761"
height="2.9999874"
x="372.49994"
y="-43.49577"
- transform="matrix(1,5.251142e-6,0,1,0,0)" />
+ transform="skewY(3.0086827e-4)" />
</g>
<g
style="display:inline"
@@ -40725,32 +40864,26 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path10224"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.91227174;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.7125226,0,0,0.7125021,34.447023,139.42475)" />
- <path
- sodipodi:type="arc"
- style="opacity:0.4;fill:url(#linearGradient21643);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.91227174;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.7125226,0,0,0.7125021,34.447023,139.42475)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
+ style="display:inline;opacity:0.4;fill:url(#linearGradient21643);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path10226"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(-0.683022,-0.07745026,0.0778507,-0.683064,209.4726,314.325)" />
+ transform="matrix(-0.683022,-0.07745026,0.0778507,-0.683064,209.4726,314.325)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
inkscape:export-ydpi="90"
@@ -40760,15 +40893,15 @@
transform="translate(-211.00001,228.97281)"
id="g10228">
<rect
- transform="matrix(1,5.251142e-6,0,1,0,0)"
+ transform="skewY(3.0086827e-4)"
y="-43.495766"
x="372.49994"
height="2.9999874"
width="3.0000761"
id="rect10230"
- style="opacity:0.1;fill:none;stroke:#447cce;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;display:inline" />
+ style="display:inline;opacity:0.1;fill:none;stroke:#447cce;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="rect10232"
width="2.0000861"
height="2.0000756"
@@ -40776,13 +40909,13 @@
y="40.991806"
transform="matrix(1,-5.25127e-6,0,-1,0,0)" />
<rect
- transform="matrix(1,5.251142e-6,0,1,0,0)"
+ transform="skewY(3.0086827e-4)"
y="-43.49577"
x="372.49994"
height="2.9999874"
width="3.0000761"
id="rect10234"
- style="fill:#d5e5ff;fill-opacity:1;fill-rule:nonzero;stroke:#0055d4;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;display:inline" />
+ style="display:inline;fill:#d5e5ff;fill-opacity:1;fill-rule:nonzero;stroke:#0055d4;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1" />
</g>
</g>
</g>
@@ -40790,7 +40923,7 @@
id="ICON_ROTATECENTER"
transform="translate(-1,1.9790001)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect21645"
width="16"
height="16"
@@ -40810,32 +40943,26 @@
transform="matrix(0.769221,0,0,0.769229,289.2704,-160.7881)"
id="g10238"
style="display:inline">
- <path
+ <circle
transform="matrix(0.75,0,0,0.75,29.5,135)"
- sodipodi:type="arc"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.38667703;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.38667703;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path10240"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(-0.683022,-0.07745026,0.0778507,-0.683064,209.4726,314.325)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path10242"
- style="opacity:0.4;fill:url(#linearGradient15590);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- sodipodi:type="arc" />
+ style="display:inline;opacity:0.4;fill:url(#linearGradient15590);fill-opacity:1;fill-rule:nonzero;stroke:none"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
style="display:inline"
@@ -40844,32 +40971,26 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path10246"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.38667703;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.75,0,0,0.75,29.5,135)" />
- <path
- sodipodi:type="arc"
- style="opacity:0.4;fill:url(#linearGradient15592);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.38667703;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.75,0,0,0.75,29.5,135)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
+ style="display:inline;opacity:0.4;fill:url(#linearGradient15592);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path10248"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(-0.683022,-0.07745026,0.0778507,-0.683064,209.4726,314.325)" />
+ transform="matrix(-0.683022,-0.07745026,0.0778507,-0.683064,209.4726,314.325)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
inkscape:export-ydpi="90"
@@ -40879,13 +41000,13 @@
transform="translate(16.000061,55.993807)"
style="display:inline">
<rect
- style="opacity:0.25;fill:none;stroke:#447cce;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;display:inline"
+ style="display:inline;opacity:0.25;fill:none;stroke:#447cce;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1"
id="rect10252"
width="3.0000761"
height="2.9999874"
x="372.49994"
y="-43.495766"
- transform="matrix(1,5.251142e-6,0,1,0,0)" />
+ transform="skewY(3.0086827e-4)" />
<rect
transform="matrix(1,-5.25127e-6,0,-1,0,0)"
y="40.991806"
@@ -40893,15 +41014,15 @@
height="2.0000756"
width="2.0000861"
id="rect10254"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline" />
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" />
<rect
- style="fill:#d5e5ff;fill-opacity:1;fill-rule:nonzero;stroke:#0055d4;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;display:inline"
+ style="display:inline;fill:#d5e5ff;fill-opacity:1;fill-rule:nonzero;stroke:#0055d4;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1"
id="rect10256"
width="3.0000761"
height="2.9999874"
x="372.49994"
y="-43.49577"
- transform="matrix(1,5.251142e-6,0,1,0,0)" />
+ transform="skewY(3.0086827e-4)" />
</g>
</g>
</g>
@@ -40927,52 +41048,43 @@
</g>
<g
id="g21602">
- <path
+ <circle
transform="matrix(0.5769158,0,0,0.5769218,128.71244,118.78864)"
- sodipodi:type="arc"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.38667691;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.38667691;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path10268"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
<g
- style="opacity:0.45;display:inline"
+ style="display:inline;opacity:0.45"
id="g10270"
transform="matrix(0.769221,0,0,0.769229,101.2704,9.19269)"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path10272"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.38667703;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.75,0,0,0.75,29.5,135)" />
- <path
- sodipodi:type="arc"
- style="opacity:0.4;fill:url(#linearGradient15594);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.38667703;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.75,0,0,0.75,29.5,135)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
+ style="display:inline;opacity:0.4;fill:url(#linearGradient15594);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path10275"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(-0.683022,-0.07745026,0.0778507,-0.683064,209.4726,314.325)" />
+ transform="matrix(-0.683022,-0.07745026,0.0778507,-0.683064,209.4726,314.325)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
inkscape:export-ydpi="90"
@@ -40981,52 +41093,46 @@
transform="matrix(0.769221,0,0,0.769229,106.0398,14.92349)"
id="g10277"
style="display:inline">
- <path
+ <circle
transform="matrix(0.7119136,0,0,0.7119136,34.527408,139.4942)"
- sodipodi:type="arc"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.91303903;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.91303903;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path10279"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(-0.683022,-0.07745026,0.0778507,-0.683064,209.4726,314.28576)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path10281"
- style="opacity:0.4;fill:url(#linearGradient15596);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- sodipodi:type="arc" />
+ style="display:inline;opacity:0.4;fill:url(#linearGradient15596);fill-opacity:1;fill-rule:nonzero;stroke:none"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<rect
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- transform="matrix(1,5.251142e-6,0,1,0,0)"
+ transform="skewY(3.0086827e-4)"
y="179.47975"
x="198.49991"
height="2.9999874"
width="3.0000761"
id="rect10283"
- style="opacity:0.05;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#6a6a6a;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;display:inline" />
+ style="display:inline;opacity:0.05;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#6a6a6a;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1" />
<rect
- style="opacity:0.1;fill:none;stroke:#447cce;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;display:inline"
+ style="display:inline;opacity:0.1;fill:none;stroke:#447cce;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1"
id="rect10285"
width="3.0000761"
height="2.9999874"
x="203.49991"
y="185.47972"
- transform="matrix(1,5.251142e-6,0,1,0,0)" />
+ transform="skewY(3.0086827e-4)" />
<rect
transform="matrix(1,-5.25127e-6,0,-1,0,0)"
y="-187.9819"
@@ -41034,22 +41140,22 @@
height="2.0000756"
width="2.0000861"
id="rect10287"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline" />
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" />
<rect
- style="fill:#d5e5ff;fill-opacity:1;fill-rule:nonzero;stroke:#0055d4;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;display:inline"
+ style="display:inline;fill:#d5e5ff;fill-opacity:1;fill-rule:nonzero;stroke:#0055d4;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1"
id="rect10289"
width="3.0000761"
height="2.9999874"
x="203.49991"
y="185.47972"
- transform="matrix(1,5.251142e-6,0,1,0,0)" />
+ transform="skewY(3.0086827e-4)" />
</g>
</g>
<g
id="ICON_CURSOR"
transform="translate(0,2)">
<rect
- style="opacity:0;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;opacity:0;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="rect10293"
width="16"
height="16"
@@ -41062,51 +41168,47 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 142.1,184.4 2.5,0 m -9.5,0 -2.5,0 m 6,-3.5 0,-2.5 m 0,9.5 0,2.5"
- style="fill:none;stroke:#000000;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 142.1,184.4 h 2.5 m -9.5,0 h -2.5 m 6,-3.5 v -2.5 m 0,9.5 v 2.5"
+ style="fill:none;stroke:#000000;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path10295"
inkscape:connector-curvature="0" />
- <path
+ <ellipse
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="M 141.08637,118 A 9.0863705,9.0860729 0 0 1 132,127.08607 9.0863705,9.0860729 0 0 1 122.91363,118 9.0863705,9.0860729 0 0 1 132,108.91393 9.0863705,9.0860729 0 0 1 141.08637,118 Z"
- sodipodi:ry="9.0860729"
- sodipodi:rx="9.0863705"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path10297"
- style="fill:none;stroke:#000000;stroke-width:8.3510685;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.383132,0,0,0.383237,88.0266,139.17807)" />
+ style="fill:none;stroke:#000000;stroke-width:8.3510685;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.383132,0,0,0.383237,88.0266,139.17807)"
+ cx="132"
+ cy="118"
+ rx="9.0863705"
+ ry="9.0860729" />
<path
id="path10299"
- style="fill:none;stroke:url(#radialGradient21517);stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 142.1,184.4 2.5,0 m -9.5,0 -2.5,0 m 6,-3.5 0,-2.5 m 0,9.5 0,2.5"
+ style="fill:none;stroke:url(#radialGradient21517);stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 142.1,184.4 h 2.5 m -9.5,0 h -2.5 m 6,-3.5 v -2.5 m 0,9.5 v 2.5"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
- <path
+ <ellipse
transform="matrix(0.383132,0,0,0.383237,88.0266,139.17807)"
- sodipodi:type="arc"
- style="fill:none;stroke:#ffffff;stroke-width:4.69747591;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:#ffffff;stroke-width:4.69747591;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path10301"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="9.0863705"
- sodipodi:ry="9.0860729"
- d="M 141.08637,118 A 9.0863705,9.0860729 0 0 1 132,127.08607 9.0863705,9.0860729 0 0 1 122.91363,118 9.0863705,9.0860729 0 0 1 132,108.91393 9.0863705,9.0860729 0 0 1 141.08637,118 Z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ rx="9.0863705"
+ ry="9.0860729" />
</g>
</g>
<g
id="ICON_LAYER_ACTIVE"
transform="translate(0,2)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect22465"
width="16"
height="16"
@@ -41117,7 +41219,7 @@
transform="translate(-38,43.987183)"
style="display:inline">
<rect
- style="fill:#f09432;fill-opacity:1;fill-rule:nonzero;stroke:#462400;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:6.18177886;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#f09432;fill-opacity:1;fill-rule:nonzero;stroke:#462400;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:6.18177891;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect14793"
width="4.0018005"
height="3.9871812"
@@ -41131,7 +41233,7 @@
height="2.012816"
width="1.9981995"
id="rect14795"
- style="fill:none;stroke:url(#linearGradient14841);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:6.18177886;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient14841);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:6.18177891;stroke-opacity:1;marker:none;enable-background:accumulate"
ry="0.49075836"
rx="0.49075836" />
</g>
@@ -41145,11 +41247,11 @@
height="16"
width="16"
id="rect22463"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g14927"
transform="translate(-39,43.987183)"
- style="opacity:0.9;display:inline">
+ style="display:inline;opacity:0.9">
<rect
ry="1.5045315"
rx="1.5045315"
@@ -41158,9 +41260,9 @@
height="3.9871812"
width="4.0018005"
id="rect14929"
- style="fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:6.18177886;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:6.18177891;stroke-opacity:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:none;stroke:url(#linearGradient14935);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:6.18177886;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient14935);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:6.18177891;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect14931"
width="1.9981995"
height="2.012816"
@@ -41179,7 +41281,7 @@
height="16"
width="16"
id="rect22331"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="translate(-81,-103)"
id="g22313"
@@ -41193,25 +41295,25 @@
<path
sodipodi:nodetypes="cssc"
d="m 430.45466,223.24999 c -2.76033,0 -5,1.88345 -5,3.25 0,1.5 2.5,3 5.5,3 0.15891,0 4,0.25 6,-2.5"
- style="fill:none;stroke:url(#linearGradient18896);stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:12.66808051;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient18896);stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:12.66808033;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path18757"
inkscape:connector-curvature="0" />
<path
id="path18762"
- style="fill:none;stroke:url(#linearGradient18898);stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:12.66808051;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient18898);stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:12.66808033;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 434.20466,226.49999 3.25115,2e-5 -10e-4,2.99998"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
</g>
<path
- d="m 433.25,226.5 3.25,0 0,2.99999"
- style="fill:none;stroke:url(#linearGradient18904);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 433.25,226.5 h 3.25 v 2.99999"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient18904);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path18764"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
<path
id="path18766"
- style="fill:none;stroke:url(#linearGradient18901);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient18901);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 429.5,223.25 c -2.76033,0 -5,1.88345 -5,3.25 0,1.5 2.5,3 5.5,3 0,0 4,0.25 6,-2.5"
sodipodi:nodetypes="cssc"
inkscape:connector-curvature="0" />
@@ -41221,48 +41323,46 @@
id="g18768">
<path
id="path18770"
- d="m 151,-240.5 c -2.48519,0 -4.49999,0.89481 -4.5,2 l 0,1 c 0,1.10519 2.0148,2 4.5,2 2.48519,0 4.5,-0.8948 4.5,-2 l 0,-1 c 0,-1.10519 -2.01481,-2 -4.5,-2 z"
- style="fill:url(#linearGradient18843);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.68242937;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 151,-240.5 c -2.48519,0 -4.49999,0.89481 -4.5,2 v 1 c 0,1.10519 2.0148,2 4.5,2 2.48519,0 4.5,-0.8948 4.5,-2 v -1 c 0,-1.10519 -2.01481,-2 -4.5,-2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient18843);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.68242937;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:url(#linearGradient18845);fill-opacity:1;fill-rule:nonzero;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient18845);fill-opacity:1;fill-rule:nonzero;marker:none;enable-background:accumulate"
d="m 151.00029,-243.51106 c -1.9309,0 -3.5,0.66961 -3.5,1.5 L 147.5,-240 c 0,0.83039 1.5691,1.5 3.5,1.5 1.9309,0 3.5,-0.66961 3.5,-1.5 l 2.9e-4,-2.01106 c 0,-0.83039 -1.5691,-1.5 -3.5,-1.5 z"
id="path18779"
sodipodi:nodetypes="cccsccc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient18848);stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 148.5,-241.75 0,2.70352 c 0.0622,0.056 0.19266,0.12733 0.40625,0.21875 0.46667,0.19974 1.2423,0.32773 2.09375,0.32773 0.85145,0 1.62708,-0.12799 2.09375,-0.32773 0.21359,-0.0914 0.34401,-0.16271 0.40625,-0.21875 l 0,-2.70352"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient18848);stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 148.5,-241.75 v 2.70352 c 0.0622,0.056 0.19266,0.12733 0.40625,0.21875 0.46667,0.19974 1.2423,0.32773 2.09375,0.32773 0.85145,0 1.62708,-0.12799 2.09375,-0.32773 0.21359,-0.0914 0.34401,-0.16271 0.40625,-0.21875 V -241.75"
id="path18787"
sodipodi:nodetypes="ccssscc"
inkscape:connector-curvature="0" />
- <path
- sodipodi:type="arc"
- style="fill:url(#linearGradient18850);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.73959124;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient18850);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.73959124;marker:none;enable-background:accumulate"
id="path18789"
- sodipodi:cx="108"
- sodipodi:cy="-222"
- sodipodi:rx="3.3084693"
- sodipodi:ry="1.2798798"
- d="M 111.30847,-222 A 3.3084693,1.2798798 0 0 1 108,-220.72012 3.3084693,1.2798798 0 0 1 104.69153,-222 3.3084693,1.2798798 0 0 1 108,-223.27988 3.3084693,1.2798798 0 0 1 111.30847,-222 Z"
- transform="matrix(1.0307577,0,0,0.9140456,39.651558,-39.251735)" />
+ transform="matrix(1.0307577,0,0,0.9140456,39.651558,-39.251735)"
+ cx="108"
+ cy="-222"
+ rx="3.3084693"
+ ry="1.2798798" />
<path
sodipodi:nodetypes="cssss"
id="path18791"
d="m 154.5,-239 c 0,0.18405 -0.0775,0.36038 -0.21919,0.52335 -0.49587,0.57019 -1.77826,0.97665 -3.28081,0.97665 -1.48659,0 -2.75767,-0.39787 -3.26474,-0.95854 C 147.58334,-238.62651 147.5,-238.80911 147.5,-239"
- style="fill:none;stroke:url(#linearGradient18852);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient18852);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
id="path18798"
- d="m 151,-243.5 c -1.9309,1e-5 -3.52661,0.41962 -3.52661,1.25001 L 147.5,-239.75 c -0.61542,0.34205 -1,0.77768 -1,1.25 l -0.0266,1.25001 c 0,1.10519 2.04141,1.74999 4.52661,1.74999 2.48519,0 4.47339,-0.64479 4.47339,-1.74999 L 155.5,-238.5 c 0,-0.47232 -0.38458,-0.90795 -1,-1.25 l -0.0266,-2.49999 c 0,-0.83038 -1.54249,-1.25001 -3.47339,-1.25001 l -1e-5,0 z"
- style="fill:none;stroke:#000000;stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 151,-243.5 c -1.9309,1e-5 -3.52661,0.41962 -3.52661,1.25001 L 147.5,-239.75 c -0.61542,0.34205 -1,0.77768 -1,1.25 l -0.0266,1.25001 c 0,1.10519 2.04141,1.74999 4.52661,1.74999 2.48519,0 4.47339,-0.64479 4.47339,-1.74999 L 155.5,-238.5 c 0,-0.47232 -0.38458,-0.90795 -1,-1.25 l -0.0266,-2.49999 c 0,-0.83038 -1.54249,-1.25001 -3.47339,-1.25001 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cccccsccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="csssc"
id="path18800"
d="m 148.5,-239.04648 c 0.0622,0.056 0.19266,0.12733 0.40625,0.21875 0.46667,0.19974 1.2423,0.32773 2.09375,0.32773 0.85145,0 1.62708,-0.12799 2.09375,-0.32773 0.21359,-0.0914 0.34401,-0.16271 0.40625,-0.21875"
- style="fill:none;stroke:#0066ff;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0066ff;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -41276,7 +41376,7 @@
height="16"
width="16"
id="rect22455"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="translate(-79,-103)"
id="g22283"
@@ -41286,81 +41386,79 @@
id="g17510">
<path
id="path17512"
- d="m 151,-240.5 c -2.48519,0 -4.49999,0.89481 -4.5,2 l 0,1 c 0,1.10519 2.0148,2 4.5,2 2.48519,0 4.5,-0.8948 4.5,-2 l 0,-1 c 0,-1.10519 -2.01481,-2 -4.5,-2 z"
- style="fill:url(#linearGradient17527);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.68242937;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 151,-240.5 c -2.48519,0 -4.49999,0.89481 -4.5,2 v 1 c 0,1.10519 2.0148,2 4.5,2 2.48519,0 4.5,-0.8948 4.5,-2 v -1 c 0,-1.10519 -2.01481,-2 -4.5,-2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient17527);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.68242937;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:url(#linearGradient17529);fill-opacity:1;fill-rule:nonzero;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient17529);fill-opacity:1;fill-rule:nonzero;marker:none;enable-background:accumulate"
d="m 151.00029,-243.51106 c -1.9309,0 -3.5,0.66961 -3.5,1.5 L 147.5,-240 c 0,0.83039 1.5691,1.5 3.5,1.5 1.9309,0 3.5,-0.66961 3.5,-1.5 l 2.9e-4,-2.01106 c 0,-0.83039 -1.5691,-1.5 -3.5,-1.5 z"
id="path17514"
sodipodi:nodetypes="cccsccc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient17531);stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 148.5,-241.75 0,2.70352 c 0.0622,0.056 0.19266,0.12733 0.40625,0.21875 0.46667,0.19974 1.2423,0.32773 2.09375,0.32773 0.85145,0 1.62708,-0.12799 2.09375,-0.32773 0.21359,-0.0914 0.34401,-0.16271 0.40625,-0.21875 l 0,-2.70352"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17531);stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 148.5,-241.75 v 2.70352 c 0.0622,0.056 0.19266,0.12733 0.40625,0.21875 0.46667,0.19974 1.2423,0.32773 2.09375,0.32773 0.85145,0 1.62708,-0.12799 2.09375,-0.32773 0.21359,-0.0914 0.34401,-0.16271 0.40625,-0.21875 V -241.75"
id="path17516"
sodipodi:nodetypes="ccssscc"
inkscape:connector-curvature="0" />
- <path
- sodipodi:type="arc"
- style="fill:url(#linearGradient17533);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.73959124;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient17533);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.73959124;marker:none;enable-background:accumulate"
id="path17518"
- sodipodi:cx="108"
- sodipodi:cy="-222"
- sodipodi:rx="3.3084693"
- sodipodi:ry="1.2798798"
- d="M 111.30847,-222 A 3.3084693,1.2798798 0 0 1 108,-220.72012 3.3084693,1.2798798 0 0 1 104.69153,-222 3.3084693,1.2798798 0 0 1 108,-223.27988 3.3084693,1.2798798 0 0 1 111.30847,-222 Z"
- transform="matrix(1.0307577,0,0,0.9140456,39.651558,-39.251735)" />
+ transform="matrix(1.0307577,0,0,0.9140456,39.651558,-39.251735)"
+ cx="108"
+ cy="-222"
+ rx="3.3084693"
+ ry="1.2798798" />
<path
sodipodi:nodetypes="cssss"
id="path17520"
d="m 154.5,-239 c 0,0.18405 -0.0775,0.36038 -0.21919,0.52335 -0.49587,0.57019 -1.77826,0.97665 -3.28081,0.97665 -1.48659,0 -2.75767,-0.39787 -3.26474,-0.95854 C 147.58334,-238.62651 147.5,-238.80911 147.5,-239"
- style="fill:none;stroke:url(#linearGradient17535);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17535);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
id="path17522"
- d="m 151,-243.5 c -1.9309,1e-5 -3.52661,0.41962 -3.52661,1.25001 L 147.5,-239.75 c -0.61542,0.34205 -1,0.77768 -1,1.25 l -0.0266,1.25001 c 0,1.10519 2.04141,1.74999 4.52661,1.74999 2.48519,0 4.47339,-0.64479 4.47339,-1.74999 L 155.5,-238.5 c 0,-0.47232 -0.38458,-0.90795 -1,-1.25 l -0.0266,-2.49999 c 0,-0.83038 -1.54249,-1.25001 -3.47339,-1.25001 l -1e-5,0 z"
- style="fill:none;stroke:#000000;stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 151,-243.5 c -1.9309,1e-5 -3.52661,0.41962 -3.52661,1.25001 L 147.5,-239.75 c -0.61542,0.34205 -1,0.77768 -1,1.25 l -0.0266,1.25001 c 0,1.10519 2.04141,1.74999 4.52661,1.74999 2.48519,0 4.47339,-0.64479 4.47339,-1.74999 L 155.5,-238.5 c 0,-0.47232 -0.38458,-0.90795 -1,-1.25 l -0.0266,-2.49999 c 0,-0.83038 -1.54249,-1.25001 -3.47339,-1.25001 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cccccsccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="csssc"
id="path17524"
d="m 148.5,-239.04648 c 0.0622,0.056 0.19266,0.12733 0.40625,0.21875 0.46667,0.19974 1.2423,0.32773 2.09375,0.32773 0.85145,0 1.62708,-0.12799 2.09375,-0.32773 0.21359,-0.0914 0.34401,-0.16271 0.40625,-0.21875"
- style="fill:none;stroke:#0066ff;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0066ff;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<g
id="g22254">
<g
- transform="translate(20.029029,0)"
+ transform="translate(20.029029)"
style="opacity:0.85"
id="g17822">
<path
d="m 446.75,226.25 -2.25,2.25 2.25,2.25 m 7.5,-4.5 2.25,2.25 -2.25,2.25"
- style="fill:none;stroke:url(#linearGradient17817);stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:12.66808051;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17817);stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:12.66808033;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path17811"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
id="path17809"
- d="m 444.54256,228.5 11.66489,0 0,0"
- style="fill:none;stroke:url(#linearGradient17819);stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:12.66808051;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 444.54256,228.5 h 11.66489 v 0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17819);stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:12.66808033;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<g
- transform="translate(20.029029,0)"
+ transform="translate(20.029029)"
id="g17801">
<path
sodipodi:nodetypes="cc"
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
- d="m 444.54256,228.5 11.95744,0"
+ d="M 444.54256,228.5 H 456.5"
id="path17024"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccc"
id="path17796"
- style="fill:none;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 446.75,226.25 -2.25,2.25 2.25,2.25 m 7.5,-4.5 2.25,2.25 -2.25,2.25"
inkscape:connector-curvature="0" />
</g>
@@ -41371,7 +41469,7 @@
id="ICON_NDOF_FLY"
transform="translate(0,2)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect22453"
width="16"
height="16"
@@ -41385,46 +41483,44 @@
id="g17482"
transform="translate(298.02661,466.04648)">
<path
- style="fill:url(#linearGradient17498);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.68242937;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 151,-240.5 c -2.48519,0 -4.49999,0.89481 -4.5,2 l 0,1 c 0,1.10519 2.0148,2 4.5,2 2.48519,0 4.5,-0.8948 4.5,-2 l 0,-1 c 0,-1.10519 -2.01481,-2 -4.5,-2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient17498);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.68242937;marker:none;enable-background:accumulate"
+ d="m 151,-240.5 c -2.48519,0 -4.49999,0.89481 -4.5,2 v 1 c 0,1.10519 2.0148,2 4.5,2 2.48519,0 4.5,-0.8948 4.5,-2 v -1 c 0,-1.10519 -2.01481,-2 -4.5,-2 z"
id="path17484"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccsccc"
id="path17486"
d="m 151.00029,-243.51106 c -1.9309,0 -3.5,0.66961 -3.5,1.5 L 147.5,-240 c 0,0.83039 1.5691,1.5 3.5,1.5 1.9309,0 3.5,-0.66961 3.5,-1.5 l 2.9e-4,-2.01106 c 0,-0.83039 -1.5691,-1.5 -3.5,-1.5 z"
- style="fill:url(#linearGradient17500);fill-opacity:1;fill-rule:nonzero;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient17500);fill-opacity:1;fill-rule:nonzero;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccssscc"
id="path17488"
- d="m 148.5,-241.75 0,2.70352 c 0.0622,0.056 0.19266,0.12733 0.40625,0.21875 0.46667,0.19974 1.2423,0.32773 2.09375,0.32773 0.85145,0 1.62708,-0.12799 2.09375,-0.32773 0.21359,-0.0914 0.34401,-0.16271 0.40625,-0.21875 l 0,-2.70352"
- style="fill:none;stroke:url(#linearGradient17502);stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 148.5,-241.75 v 2.70352 c 0.0622,0.056 0.19266,0.12733 0.40625,0.21875 0.46667,0.19974 1.2423,0.32773 2.09375,0.32773 0.85145,0 1.62708,-0.12799 2.09375,-0.32773 0.21359,-0.0914 0.34401,-0.16271 0.40625,-0.21875 V -241.75"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17502);stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
- <path
+ <ellipse
transform="matrix(1.0307577,0,0,0.9140456,39.651558,-39.251735)"
- d="M 111.30847,-222 A 3.3084693,1.2798798 0 0 1 108,-220.72012 3.3084693,1.2798798 0 0 1 104.69153,-222 3.3084693,1.2798798 0 0 1 108,-223.27988 3.3084693,1.2798798 0 0 1 111.30847,-222 Z"
- sodipodi:ry="1.2798798"
- sodipodi:rx="3.3084693"
- sodipodi:cy="-222"
- sodipodi:cx="108"
id="path17490"
- style="fill:url(#linearGradient17504);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.73959124;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient17504);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.73959124;marker:none;enable-background:accumulate"
+ cx="108"
+ cy="-222"
+ rx="3.3084693"
+ ry="1.2798798" />
<path
- style="fill:none;stroke:url(#linearGradient17506);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17506);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 154.5,-239 c 0,0.18405 -0.0775,0.36038 -0.21919,0.52335 -0.49587,0.57019 -1.77826,0.97665 -3.28081,0.97665 -1.48659,0 -2.75767,-0.39787 -3.26474,-0.95854 C 147.58334,-238.62651 147.5,-238.80911 147.5,-239"
id="path17492"
sodipodi:nodetypes="cssss"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccsccccc"
- style="fill:none;stroke:#000000;stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 151,-243.5 c -1.9309,1e-5 -3.52661,0.41962 -3.52661,1.25001 L 147.5,-239.75 c -0.61542,0.34205 -1,0.77768 -1,1.25 l -0.0266,1.25001 c 0,1.10519 2.04141,1.74999 4.52661,1.74999 2.48519,0 4.47339,-0.64479 4.47339,-1.74999 L 155.5,-238.5 c 0,-0.47232 -0.38458,-0.90795 -1,-1.25 l -0.0266,-2.49999 c 0,-0.83038 -1.54249,-1.25001 -3.47339,-1.25001 l -1e-5,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 151,-243.5 c -1.9309,1e-5 -3.52661,0.41962 -3.52661,1.25001 L 147.5,-239.75 c -0.61542,0.34205 -1,0.77768 -1,1.25 l -0.0266,1.25001 c 0,1.10519 2.04141,1.74999 4.52661,1.74999 2.48519,0 4.47339,-0.64479 4.47339,-1.74999 L 155.5,-238.5 c 0,-0.47232 -0.38458,-0.90795 -1,-1.25 l -0.0266,-2.49999 c 0,-0.83038 -1.54249,-1.25001 -3.47339,-1.25001 z"
id="path17494"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#0066ff;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0066ff;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 148.5,-239.04648 c 0.0622,0.056 0.19266,0.12733 0.40625,0.21875 0.46667,0.19974 1.2423,0.32773 2.09375,0.32773 0.85145,0 1.62708,-0.12799 2.09375,-0.32773 0.21359,-0.0914 0.34401,-0.16271 0.40625,-0.21875"
id="path17496"
sodipodi:nodetypes="csssc"
@@ -41433,7 +41529,7 @@
<g
id="g22250">
<path
- style="opacity:0.85;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.85;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 456.5,218.5 c -1.25,-1.5 -3.5,-1.5 -5,1 -1.5,-2.5 -3.75,-2.5 -5,-1"
id="path17828"
sodipodi:nodetypes="ccc"
@@ -41442,7 +41538,7 @@
sodipodi:nodetypes="ccc"
id="path17826"
d="m 456.5,218.5 c -1.25,-1.5 -3.5,-1.5 -5,1 -1.5,-2.5 -3.75,-2.5 -5,-1"
- style="fill:url(#linearGradient18213);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:url(#linearGradient18213);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -41451,7 +41547,7 @@
id="ICON_NDOF_DOM"
transform="translate(0,2)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect22457"
width="16"
height="16"
@@ -41467,8 +41563,8 @@
transform="matrix(0.927273,0,0,1,260.65455,106)">
<path
sodipodi:nodetypes="cccccc"
- d="m 70.499967,14.5 4.284298,2.5 m -4.284298,-2.5 -4.34315,2.5 m 4.313724,-2.5 0,-4.5"
- style="fill:none;stroke:#000000;stroke-width:3.42696857;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ d="m 70.499967,14.5 4.284298,2.5 m -4.284298,-2.5 -4.34315,2.5 m 4.313724,-2.5 V 10"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:3.42696857;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
id="path18028"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -41476,29 +41572,26 @@
inkscape:connector-curvature="0" />
<path
id="path18030"
- d="m 69.39211,8 0,2 2.156862,0 0,-2 -2.156862,0 z m -4.313742,8 1.8e-5,2 2.156862,0 -1.8e-5,-2 -2.156862,0 z m 8.627466,0 0,2 2.156862,0 0,-2 -2.156862,0 z"
- style="fill:#acc373;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.55771327;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ d="m 69.39211,8 v 2 h 2.156862 V 8 Z m -4.313742,8 1.8e-5,2 h 2.156862 l -1.8e-5,-2 z m 8.627466,0 v 2 h 2.156862 v -2 z"
+ style="fill:#acc373;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.55771327;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
sodipodi:nodetypes="ccccccccccccccc"
inkscape:connector-curvature="0" />
- <path
- sodipodi:type="arc"
- style="fill:url(#radialGradient23738);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ <circle
+ style="display:inline;fill:url(#radialGradient23738);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path18032"
- sodipodi:cx="70.5"
- sodipodi:cy="14.5"
- sodipodi:rx="1.5"
- sodipodi:ry="1.5"
- d="M 72,14.5 A 1.5,1.5 0 0 1 70.5,16 1.5,1.5 0 0 1 69,14.5 1.5,1.5 0 0 1 70.5,13 1.5,1.5 0 0 1 72,14.5 Z"
transform="matrix(1.176776,0,0,1.176776,-12.47787,-2.548088)"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="70.5"
+ cy="14.5"
+ r="1.5" />
<path
id="path18035"
- style="fill:none;stroke:#91ae42;stroke-width:2.07695079;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:none;stroke:#91ae42;stroke-width:2.07695079;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
d="M 70.470541,14.5 74.784265,17"
sodipodi:nodetypes="cc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -41507,7 +41600,7 @@
inkscape:connector-curvature="0" />
<path
style="fill:#91ae42;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 73.705834,16 0,2 2.156862,0 0,-2 -2.156862,0 z"
+ d="m 73.705834,16 v 2 h 2.156862 v -2 z"
id="path18037"
sodipodi:nodetypes="ccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -41516,7 +41609,7 @@
inkscape:connector-curvature="0" />
<path
id="path18039"
- d="m 69.39211,8 0,2 2.156862,0 0,-2 -2.156862,0 z"
+ d="m 69.39211,8 v 2 h 2.156862 V 8 Z"
style="fill:#4989e9;fill-opacity:1;fill-rule:nonzero;stroke:none"
sodipodi:nodetypes="ccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -41525,7 +41618,7 @@
inkscape:connector-curvature="0" />
<path
id="path18041"
- d="m 65.078405,16 0,2 2.156844,0 0,-2 -2.156844,0 z"
+ d="m 65.078405,16 v 2 h 2.156844 v -2 z"
style="fill:#ef6529;fill-opacity:1;fill-rule:nonzero;stroke:none"
sodipodi:nodetypes="ccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -41534,7 +41627,7 @@
inkscape:connector-curvature="0" />
<path
d="M 70.470541,14.5 66.156817,17"
- style="fill:none;stroke:#ef6529;stroke-width:2.07695079;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:none;stroke:#ef6529;stroke-width:2.07695079;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
id="path18043"
sodipodi:nodetypes="cc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -41542,30 +41635,27 @@
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- d="m 70.470541,14.5 0,-4.5"
- style="fill:none;stroke:#4989e9;stroke-width:2.07695079;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ d="M 70.470541,14.5 V 10"
+ style="display:inline;fill:none;stroke:#4989e9;stroke-width:2.07695079;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
id="path18045"
sodipodi:nodetypes="cc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
- <path
+ <circle
transform="matrix(0.699335,0,0,0.602252,21.19685,5.767346)"
- sodipodi:type="arc"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path18047"
- sodipodi:cx="70.5"
- sodipodi:cy="14.5"
- sodipodi:rx="1.5"
- sodipodi:ry="1.5"
- d="M 72,14.5 A 1.5,1.5 0 0 1 70.5,16 1.5,1.5 0 0 1 69,14.5 1.5,1.5 0 0 1 70.5,13 1.5,1.5 0 0 1 72,14.5 Z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="70.5"
+ cy="14.5"
+ r="1.5" />
<path
- style="opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1.03847623px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline"
- d="m 65.617602,17.5 0,-1 1.078431,0"
+ style="display:inline;opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1.03847623px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+ d="m 65.617602,17.5 v -1 h 1.078431"
id="path18049"
sodipodi:nodetypes="ccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -41575,15 +41665,15 @@
<path
sodipodi:nodetypes="ccc"
id="path18051"
- d="m 69.93132,9.5 0,-0.9673924 1.078413,0"
- style="opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1.03847599px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline"
+ d="M 69.93132,9.5 V 8.5326076 h 1.078413"
+ style="display:inline;opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1.03847599px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1.03847647px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline"
- d="m 74.24505,17.500004 0,-1 1.078431,0"
+ style="display:inline;opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1.03847647px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+ d="m 74.24505,17.500004 v -1 h 1.078431"
id="path18053"
sodipodi:nodetypes="ccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -41595,8 +41685,8 @@
transform="translate(-162,-102)"
id="g18124">
<path
- style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.70588235;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 495.5,226 c 0,0 0,-1.75 0,-1.75 0,-0.96333 -0.75,-1.75 -2,-1.75 -1.25,0 -2,0.78667 -2,1.75 l 0,1.75"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.70588235;marker:none;enable-background:accumulate"
+ d="m 495.5,226 c 0,0 0,-1.75 0,-1.75 0,-0.96333 -0.75,-1.75 -2,-1.75 -1.25,0 -2,0.78667 -2,1.75 V 226"
id="path18055"
sodipodi:nodetypes="csccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -41609,18 +41699,18 @@
height="5.0114956"
width="7.9999995"
id="rect18057"
- style="fill:url(#linearGradient23750);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.70588235;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23750);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.70588235;marker:none;enable-background:accumulate" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="csccc"
id="path18059"
- d="m 495.5,226 c 0,0 0,-1.75 0,-1.75 0,-0.96333 -0.75,-1.75 -2,-1.75 -1.25,0 -2,0.78667 -2,1.75 l 0,1.75"
- style="fill:none;stroke:url(#linearGradient23752);stroke-width:1.39999998;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ d="m 495.5,226 c 0,0 0,-1.75 0,-1.75 0,-0.96333 -0.75,-1.75 -2,-1.75 -1.25,0 -2,0.78667 -2,1.75 V 226"
+ style="fill:none;stroke:url(#linearGradient23752);stroke-width:1.39999998;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
inkscape:connector-curvature="0" />
<rect
- style="fill:none;stroke:url(#linearGradient23754);stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient23754);stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect18061"
width="6.0312495"
height="3.0344827"
@@ -41634,7 +41724,7 @@
id="ICON_ANIM_DATA"
transform="translate(168,65.000007)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect20632"
width="16"
height="16"
@@ -41649,14 +41739,14 @@
id="g10762">
<path
d="m 86.5,100.53983 4.342131,0.008 c 5.188235,0.0101 5.335295,-2.04831 3.335293,-4.04831 -0.964875,-0.964875 -4.5,-4 1.500002,-5 M 88.840543,97.588774 86.5,100.53983 M 88.828993,103.5 86.5,100.53983"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
id="path10764"
sodipodi:nodetypes="czszcccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="czszcccc"
id="path10766"
- style="fill:none;stroke:url(#linearGradient13991);stroke-width:1.50000143;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient13991);stroke-width:1.50000143;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:7.40000057;stroke-opacity:1"
d="m 86.5,100.53983 4.342131,0.008 C 96.03037,100.55844 96.17743,98.5 94.177424,96.5 c -0.964875,-0.964875 -4.5,-4 1.500002,-5 M 88.840543,97.588774 86.5,100.53983 M 88.828993,103.5 86.5,100.53983"
inkscape:connector-curvature="0" />
</g>
@@ -41670,7 +41760,7 @@
height="16"
width="16"
id="rect20642"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="translate(-29.016109,339.00751)"
id="g20606">
@@ -41682,8 +41772,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccc"
- style="fill:none;stroke:#000000;stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- d="m 429.9998,196.99249 0,1.625 c -0.53409,0.12195 -1.02562,0.33162 -1.46875,0.625 l -1.53125,-1.25 -1,1 1.25,1.53125 c -0.29338,0.44313 -0.50305,0.93466 -0.625,1.46875 l -1.625,0 0,2 1.625,0 c 0.12195,0.53409 0.33162,1.02562 0.625,1.46875 l -1.25,1.53125 1,1 1.53125,-1.25 c 0.44313,0.29338 0.93466,0.50305 1.46875,0.625 l 0,1.625 2,0 0,-1.625 c 0.53409,-0.12195 1.02562,-0.33162 1.46875,-0.625 l 1.53125,1.25 1,-1 -1.25,-1.53125 c 0.29338,-0.44313 0.50305,-0.93466 0.625,-1.46875 l 1.625,0 0,-2 -1.625,0 c -0.12195,-0.53409 -0.33162,-1.02562 -0.625,-1.46875 l 1.25,-1.53125 -1,-1 -1.53125,1.25 c -0.44313,-0.29338 -0.93466,-0.50305 -1.46875,-0.625 l 0,-1.625 -2,0 z m -1,4 4,0 0,4 -4,0 0,-4 z"
+ style="fill:none;stroke:#000000;stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 429.9998,196.99249 v 1.625 c -0.53409,0.12195 -1.02562,0.33162 -1.46875,0.625 l -1.53125,-1.25 -1,1 1.25,1.53125 c -0.29338,0.44313 -0.50305,0.93466 -0.625,1.46875 h -1.625 v 2 h 1.625 c 0.12195,0.53409 0.33162,1.02562 0.625,1.46875 l -1.25,1.53125 1,1 1.53125,-1.25 c 0.44313,0.29338 0.93466,0.50305 1.46875,0.625 v 1.625 h 2 v -1.625 c 0.53409,-0.12195 1.02562,-0.33162 1.46875,-0.625 l 1.53125,1.25 1,-1 -1.25,-1.53125 c 0.29338,-0.44313 0.50305,-0.93466 0.625,-1.46875 h 1.625 v -2 h -1.625 c -0.12195,-0.53409 -0.33162,-1.02562 -0.625,-1.46875 l 1.25,-1.53125 -1,-1 -1.53125,1.25 c -0.44313,-0.29338 -0.93466,-0.50305 -1.46875,-0.625 v -1.625 z m -1,4 h 4 v 4 h -4 z"
id="path10955"
inkscape:connector-curvature="0" />
<path
@@ -41692,12 +41782,12 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccc"
id="path10957"
- d="m 429.9998,196.99249 0,1.625 c -0.53409,0.12195 -1.02562,0.33162 -1.46875,0.625 l -1.53125,-1.25 -1,1 1.25,1.53125 c -0.29338,0.44313 -0.50305,0.93466 -0.625,1.46875 l -1.625,0 0,2 1.625,0 c 0.12195,0.53409 0.33162,1.02562 0.625,1.46875 l -1.25,1.53125 1,1 1.53125,-1.25 c 0.44313,0.29338 0.93466,0.50305 1.46875,0.625 l 0,1.625 2,0 0,-1.625 c 0.53409,-0.12195 1.02562,-0.33162 1.46875,-0.625 l 1.53125,1.25 1,-1 -1.25,-1.53125 c 0.29338,-0.44313 0.50305,-0.93466 0.625,-1.46875 l 1.625,0 0,-2 -1.625,0 c -0.12195,-0.53409 -0.33162,-1.02562 -0.625,-1.46875 l 1.5,-1.78125 -1,-1 -1.78125,1.5 c -0.44313,-0.29338 -0.93466,-0.50305 -1.46875,-0.625 l 0,-1.625 -2,0 z m -1,4 4,0 0,4 -4,0 0,-4 z"
+ d="m 429.9998,196.99249 v 1.625 c -0.53409,0.12195 -1.02562,0.33162 -1.46875,0.625 l -1.53125,-1.25 -1,1 1.25,1.53125 c -0.29338,0.44313 -0.50305,0.93466 -0.625,1.46875 h -1.625 v 2 h 1.625 c 0.12195,0.53409 0.33162,1.02562 0.625,1.46875 l -1.25,1.53125 1,1 1.53125,-1.25 c 0.44313,0.29338 0.93466,0.50305 1.46875,0.625 v 1.625 h 2 v -1.625 c 0.53409,-0.12195 1.02562,-0.33162 1.46875,-0.625 l 1.53125,1.25 1,-1 -1.25,-1.53125 c 0.29338,-0.44313 0.50305,-0.93466 0.625,-1.46875 h 1.625 v -2 h -1.625 c -0.12195,-0.53409 -0.33162,-1.02562 -0.625,-1.46875 l 1.5,-1.78125 -1,-1 -1.78125,1.5 c -0.44313,-0.29338 -0.93466,-0.50305 -1.46875,-0.625 v -1.625 z m -1,4 h 4 v 4 h -4 z"
style="fill:url(#linearGradient20796);fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<path
- d="m 434.9998,198.49249 -1.5,1.25 m -2,-2.25 -1,0 0,1.5 c -0.35104,0.0802 -1.01806,0.29269 -1.5172,0.50569 m -1.49,1.50752 c -0.20864,0.49552 -0.41426,1.14284 -0.4928,1.48679 l -1.5,0 0,1 m 1.5,-5 -0.5,0.5 m 1.25,6.5 -1.25,1.5 m 6.5,-5.5 0,3.5 -3.5,0 m -3,-6 0.5,-0.5 1.5,1.25"
- style="fill:none;stroke:#f9f9f9;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
+ d="m 434.9998,198.49249 -1.5,1.25 m -2,-2.25 h -1 v 1.5 c -0.35104,0.0802 -1.01806,0.29269 -1.5172,0.50569 m -1.49,1.50752 c -0.20864,0.49552 -0.41426,1.14284 -0.4928,1.48679 h -1.5 v 1 m 1.5,-5 -0.5,0.5 m 1.25,6.5 -1.25,1.5 m 6.5,-5.5 v 3.5 h -3.5 m -3,-6 0.5,-0.5 1.5,1.25"
+ style="fill:none;stroke:#f9f9f9;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
id="path10959"
inkscape:connector-curvature="0" />
</g>
@@ -41717,7 +41807,7 @@
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<path
- d="m 432.53795,204.5065 2.96201,0 m -2.96201,1.993 2.96201,0 m -2.96201,1.993 2.96201,0"
+ d="m 432.53795,204.5065 h 2.96201 m -2.96201,1.993 h 2.96201 m -2.96201,1.993 h 2.96201"
style="fill:none;stroke:#000000;stroke-width:0.99999988px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
id="path10965"
sodipodi:nodetypes="cccccc"
@@ -41733,7 +41823,7 @@
height="8.0067444"
width="7.0067482"
id="rect10967"
- style="fill:none;stroke:url(#linearGradient20798);stroke-width:0.99325603;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient20798);stroke-width:0.99325603;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
@@ -41744,7 +41834,7 @@
id="ICON_RADIO"
transform="translate(0,128.00001)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect20640"
width="16"
height="16"
@@ -41773,42 +41863,36 @@
transform="matrix(0.833341,0,0,0.829252,85.1747,-87.30584)"
id="g11083" />
<g
- style="stroke:#000000;stroke-width:1.13287878;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="stroke:#000000;stroke-width:1.13287878;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="g11085"
transform="matrix(0.833341,0,0,0.829252,85.1747,-87.30584)"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
- <path
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
+ <circle
id="path23208"
- style="fill:#dad727;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.92361271;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc"
+ style="display:inline;overflow:visible;visibility:visible;fill:#dad727;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.92361271;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(0.929498,0,0,0.910458,28.4835,116.0319)" />
- <path
+ transform="matrix(0.929498,0,0,0.910458,28.4835,116.0319)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.8580178,0,0,0.8424365,37.918882,124.05843)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- sodipodi:type="arc"
- style="fill:url(#linearGradient23215);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.92361271;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23215);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.92361271;marker:none;enable-background:accumulate"
id="path23213"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z" />
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<path
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 210.20333,98.981214 0,-1.914298 1.90698,0 0,1.914298 -1.90698,0 z"
+ d="m 210.20333,98.981214 v -1.914298 h 1.90698 v 1.914298 z"
id="path11089"
sodipodi:nodetypes="ccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -41824,7 +41908,7 @@
sodipodi:nodetypes="ccccc"
inkscape:transform-center-y="-3.3687892"
id="path11093"
- d="m 208.05857,93.345302 2.18641,2.891627 c 0.50125,-0.147037 1.16637,-0.122617 1.82389,-0.02056 l 2.18648,-2.87107 c -1.9067,-1.162873 -4.29008,-1.162873 -6.19678,0 l 0,3e-6 z"
+ d="m 208.05857,93.345302 2.18641,2.891627 c 0.50125,-0.147037 1.16637,-0.122617 1.82389,-0.02056 l 2.18648,-2.87107 c -1.9067,-1.162873 -4.29008,-1.162873 -6.19678,0 z"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<path
@@ -41834,7 +41918,7 @@
sodipodi:nodetypes="ccccc"
inkscape:transform-center-y="2.4548853"
id="path11095"
- d="m 208.53524,102.88086 1.43003,-3.336509 c -0.67737,-0.380664 -0.53518,-1.067385 -0.59136,-1.547136 l -3.93706,-4.21e-4 c 0,2.093176 1.43003,4.186346 3.09839,4.884066 l 0,0 0,0 0,0 z"
+ d="m 208.53524,102.88086 1.43003,-3.336509 c -0.67737,-0.380664 -0.53518,-1.067385 -0.59136,-1.547136 l -3.93706,-4.21e-4 c 0,2.093176 1.43003,4.186346 3.09839,4.884066 z"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:transform-center-x="3.3187399"
inkscape:connector-curvature="0" />
@@ -41852,19 +41936,17 @@
</g>
</g>
</g>
- <path
- d="M 139.7074,118 A 7.7074003,7.7241406 0 0 1 132,125.72414 7.7074003,7.7241406 0 0 1 124.2926,118 7.7074003,7.7241406 0 0 1 132,110.27586 7.7074003,7.7241406 0 0 1 139.7074,118 Z"
- sodipodi:ry="7.7241406"
- sodipodi:rx="7.7074003"
- sodipodi:cy="118"
- sodipodi:cx="132"
+ <ellipse
id="path11099"
- style="fill:none;stroke:url(#linearGradient13520);stroke-width:1.40287328;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
- sodipodi:type="arc"
+ style="display:inline;fill:none;stroke:url(#linearGradient13520);stroke-width:1.40287328;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(0.713599,0,0,0.712048,116.8049,13.97832)" />
+ transform="matrix(0.713599,0,0,0.712048,116.8049,13.97832)"
+ cx="132"
+ cy="118"
+ rx="7.7074003"
+ ry="7.7241406" />
<g
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
@@ -41879,7 +41961,7 @@
</g>
<g
id="g11107"
- style="opacity:0.3;display:inline"
+ style="display:inline;opacity:0.3"
transform="matrix(1.0489321,0,0,1.0749238,-10.489315,-7.3395414)">
<path
inkscape:export-ydpi="90"
@@ -41888,7 +41970,7 @@
sodipodi:nodetypes="ccccc"
inkscape:transform-center-y="-3.3687892"
id="path11109"
- d="m 208.05857,93.345302 2.18641,2.891627 c 0.50125,-0.147037 1.16637,-0.122617 1.82389,-0.02056 l 2.18648,-2.87107 c -1.9067,-1.162873 -4.29008,-1.162873 -6.19678,0 l 0,3e-6 z"
+ d="m 208.05857,93.345302 2.18641,2.891627 c 0.50125,-0.147037 1.16637,-0.122617 1.82389,-0.02056 l 2.18648,-2.87107 c -1.9067,-1.162873 -4.29008,-1.162873 -6.19678,0 z"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<path
@@ -41898,7 +41980,7 @@
sodipodi:nodetypes="ccccc"
inkscape:transform-center-y="2.4548853"
id="path11111"
- d="m 208.53524,102.88086 1.43003,-3.336509 c -0.67737,-0.380664 -0.53518,-1.067385 -0.59136,-1.547136 l -3.93706,-4.21e-4 c 0,2.093176 1.43003,4.186346 3.09839,4.884066 l 0,0 0,0 0,0 z"
+ d="m 208.53524,102.88086 1.43003,-3.336509 c -0.67737,-0.380664 -0.53518,-1.067385 -0.59136,-1.547136 l -3.93706,-4.21e-4 c 0,2.093176 1.43003,4.186346 3.09839,4.884066 z"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:transform-center-x="3.3187399"
inkscape:connector-curvature="0" />
@@ -41910,7 +41992,7 @@
id="ICON_BONE_DATA"
transform="translate(20,319.00001)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect21195"
width="16"
height="16"
@@ -41923,8 +42005,8 @@
<path
sodipodi:nodetypes="ccczcczccccscsccscscc"
id="path11067"
- d="m 85.658035,278.19867 c 1.5,0 2.00279,1.00232 2.00279,2.00232 l 1.14e-4,0.36297 c 0,0.75 -0.916764,1.9289 -1.666764,1.9289 -0.75,0 -0.858674,0.24559 -2.129469,-1.0252 -0.5,0 -0.22594,-2.3e-4 -0.72594,-2.3e-4 -1.269993,1.26999 -1.394591,1.02543 -2.144591,1.02543 -0.75,0 -1.681542,-1.18154 -1.681542,-1.93154 l -1.15e-4,-0.36297 c 0,-1 0.489879,-2.00105 1.989879,-2.00105 l -0.01948,-5.74221 c -1.5,0 -1.97318,-1.05691 -1.973496,-2.05693 l -1.14e-4,-0.36297 c 0,-0.75 0.855204,-1.89751 1.666764,-1.9289 0.71584,-0.0277 0.873337,-0.24811 2.144133,1.02268 l 0.725939,2.3e-4 c 1.088566,-1.08856 1.396658,-1.02291 2.129928,-1.02291 0.75,0 1.681542,1.18154 1.681542,1.93154 l 1.15e-4,0.36297 c 1.58e-4,0.5 -0.519172,2.05566 -2.019172,2.05566 l 0.01948,5.74221 -10e-7,0 0,0 0,0 z"
- style="fill:url(#linearGradient15748);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.821307;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 85.658035,278.19867 c 1.5,0 2.00279,1.00232 2.00279,2.00232 l 1.14e-4,0.36297 c 0,0.75 -0.916764,1.9289 -1.666764,1.9289 -0.75,0 -0.858674,0.24559 -2.129469,-1.0252 -0.5,0 -0.22594,-2.3e-4 -0.72594,-2.3e-4 -1.269993,1.26999 -1.394591,1.02543 -2.144591,1.02543 -0.75,0 -1.681542,-1.18154 -1.681542,-1.93154 l -1.15e-4,-0.36297 c 0,-1 0.489879,-2.00105 1.989879,-2.00105 l -0.01948,-5.74221 c -1.5,0 -1.97318,-1.05691 -1.973496,-2.05693 l -1.14e-4,-0.36297 c 0,-0.75 0.855204,-1.89751 1.666764,-1.9289 0.71584,-0.0277 0.873337,-0.24811 2.144133,1.02268 l 0.725939,2.3e-4 c 1.088566,-1.08856 1.396658,-1.02291 2.129928,-1.02291 0.75,0 1.681542,1.18154 1.681542,1.93154 l 1.15e-4,0.36297 c 1.58e-4,0.5 -0.519172,2.05566 -2.019172,2.05566 l 0.01948,5.74221 z"
+ style="fill:url(#linearGradient15748);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.821307;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#ffffff;stroke-width:1.02663434px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
@@ -41934,12 +42016,12 @@
inkscape:connector-curvature="0" />
<path
style="fill:#646464;fill-opacity:0.75;fill-rule:evenodd;stroke:#646464;stroke-width:1.02663434px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 85.299056,272.39639 -1,0"
+ d="m 85.299056,272.39639 h -1"
id="path11071"
inkscape:connector-curvature="0" />
<path
id="path11073"
- d="m 85.310309,278.21333 -1,0"
+ d="m 85.310309,278.21333 h -1"
style="fill:#646464;fill-opacity:0.75;fill-rule:evenodd;stroke:#646464;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
@@ -41958,12 +42040,12 @@
inkscape:connector-curvature="0" />
<path
style="opacity:0.6;fill:#646464;fill-opacity:0.75;fill-rule:evenodd;stroke:#646464;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 82.5437,278.0941 -1,0"
+ d="m 82.5437,278.0941 h -1"
id="path24290"
inkscape:connector-curvature="0" />
<path
id="path24294"
- d="m 82.532207,272.51355 -1,0"
+ d="m 82.532207,272.51355 h -1"
style="opacity:0.6;fill:#646464;fill-opacity:0.75;fill-rule:evenodd;stroke:#646464;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
@@ -41990,14 +42072,14 @@
height="16"
width="16"
id="rect24679"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g9450"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
transform="matrix(0.6171649,0,0,0.6170324,328.7006,73.30195)"
- style="opacity:0.8;display:inline">
+ style="display:inline;opacity:0.8">
<g
style="display:inline"
id="g9452"
@@ -42005,22 +42087,19 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path9454"
- style="fill:url(#linearGradient15446);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.00075221;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.872933,0,0,0.883992,56.29135,118.6984)" />
+ style="fill:url(#linearGradient15446);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.00075221;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.872933,0,0,0.883992,56.29135,118.6984)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<path
- d="m 134.19651,245.03757 -6.46038,0 m 3.23019,3.23013 0,-6.46025"
+ d="m 134.19651,245.03757 h -6.46038 m 3.23019,3.23013 v -6.46025"
style="fill:none;stroke:url(#linearGradient15448);stroke-width:4.86145973;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
id="path9456"
inkscape:connector-curvature="0" />
@@ -42029,8 +42108,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
sodipodi:nodetypes="cc"
- d="m 130.96632,248.2677 0,-6.46025"
- style="fill:none;stroke:#000000;stroke-width:2.10663271;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 130.96632,248.2677 v -6.46025"
+ style="fill:none;stroke:#000000;stroke-width:2.10663271;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path9458"
inkscape:connector-curvature="0" />
<g
@@ -42039,25 +42118,22 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
transform="matrix(0.784039,0,0,0.779055,-3.508124,71.29625)"
id="g9460"
- style="fill:none;stroke:url(#linearGradient15452);stroke-width:1.91174495;stroke-opacity:1;display:inline">
- <path
+ style="display:inline;fill:none;stroke:url(#linearGradient15452);stroke-width:1.91174495;stroke-opacity:1">
+ <circle
transform="matrix(0.8478042,0,0,0.8531716,59.60482,122.34129)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient15450);stroke-width:2.43795967;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient15450);stroke-width:2.43795967;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path9462"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<path
id="path9465"
- style="fill:none;stroke:#000000;stroke-width:2.10663271;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 134.19651,245.03757 -6.46038,0"
+ style="fill:none;stroke:#000000;stroke-width:2.10663271;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 134.19651,245.03757 h -6.46038"
sodipodi:nodetypes="cc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
@@ -42075,13 +42151,13 @@
height="16"
width="16"
id="rect24481"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="translate(1.7e-4,10.00012)"
id="g9996"
style="display:inline">
<path
- style="fill:#333333;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.91431391;marker:none;visibility:visible;display:inline;overflow:visible"
+ style="display:inline;overflow:visible;visibility:visible;fill:#333333;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.91431391;marker:none"
d="m 209.99983,115.99988 c 3.86419,0 6.99999,-3.13578 6.99999,-6.99996 0,-3.86418 -3.1358,-6.99997 -6.99999,-6.99997 -3.86419,0 -6.99998,3.13579 -6.99998,6.99997 0,3.86418 3.13579,6.99996 6.99998,6.99996 z m 0,-4.66664 c -1.45833,0 -2.33333,-0.875 -2.33333,-2.33332 0,-1.45833 0.875,-2.33332 2.33333,-2.33332 1.45833,0 2.33333,0.87499 2.33333,2.33332 0,1.45832 -0.875,2.33332 -2.33333,2.33332 z"
id="path9998"
sodipodi:nodetypes="csssccsssc"
@@ -42090,8 +42166,8 @@
id="g10000"
transform="matrix(-2.005135,0,0,-2.005129,595.3141,357.6101)">
<path
- style="fill:none;stroke:url(#linearGradient15578);stroke-width:0.59846401;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
- d="m 192.16369,120.79528 c -1.76189,0 -3.19179,1.42994 -3.1918,3.19182 0,1.76188 1.42991,3.19183 3.1918,3.19183 1.76188,0 3.19179,-1.42995 3.1918,-3.19183 0,-1.76188 -1.42992,-3.19182 -3.1918,-3.19182 l 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient15578);stroke-width:0.59846401;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
+ d="m 192.16369,120.79528 c -1.76189,0 -3.19179,1.42994 -3.1918,3.19182 0,1.76188 1.42991,3.19183 3.1918,3.19183 1.76188,0 3.19179,-1.42995 3.1918,-3.19183 0,-1.76188 -1.42992,-3.19182 -3.1918,-3.19182 z"
id="path10002"
sodipodi:nodetypes="csssc"
inkscape:connector-curvature="0" />
@@ -42099,7 +42175,7 @@
sodipodi:nodetypes="csssc"
id="path10004"
d="m 192.16376,122.51797 c -0.81098,0 -1.46916,0.65815 -1.46916,1.46907 0,0.81094 0.65818,1.46907 1.46916,1.46907 0.81097,0 1.46913,-0.65813 1.46913,-1.46907 0,-0.81092 -0.65816,-1.46907 -1.46913,-1.46907 z"
- style="fill:none;stroke:url(#linearGradient15580);stroke-width:0.59846407;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient15580);stroke-width:0.59846407;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -42116,13 +42192,13 @@
<path
sodipodi:nodetypes="ccccccccc"
id="path29879-5-0-9"
- d="m 392.96689,241.84215 -0.56915,0 -3.5287,2.84782 0,1.13912 3.5287,2.84781 0.56915,0 0,-6.83475 0,0 0,0 z"
- style="color:#000000;fill:url(#radialGradient106344-5);fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient106433);stroke-width:0.66107476px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 392.96689,241.84215 h -0.56915 l -3.5287,2.84782 v 1.13912 l 3.5287,2.84781 h 0.56915 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient106344-5);fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient106433);stroke-width:0.66107476px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
id="path29881-5-6-0"
- d="m 392.96688,248.67221 -0.57173,0 -3.51515,-2.83619 -0.008,-1.21916"
+ d="m 392.96688,248.67221 h -0.57173 l -3.51515,-2.83619 -0.008,-1.21916"
style="fill:none;stroke:url(#linearGradient106307-2);stroke-width:0.66107482px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
@@ -42132,13 +42208,13 @@
height="16"
width="16"
id="rect24491"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
</g>
<g
id="ICON_DOWNARROW">
<rect
- transform="matrix(0,1,-1,0,0,0)"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ transform="rotate(90)"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect29875"
width="16"
height="16"
@@ -42154,13 +42230,13 @@
<path
sodipodi:nodetypes="ccccccccc"
id="path29879"
- d="m 392.96689,241.84215 -0.56915,0 -3.5287,2.84782 0,1.13912 3.5287,2.84781 0.56915,0 0,-6.83475 0,0 0,0 z"
- style="color:#000000;fill:url(#linearGradient29884);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.58802557px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 392.96689,241.84215 h -0.56915 l -3.5287,2.84782 v 1.13912 l 3.5287,2.84781 h 0.56915 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient29884);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.58802557px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path29881"
- d="m 392.51157,247.53778 0,-4.93622 -3.18721,2.46812"
+ d="m 392.51157,247.53778 v -4.93622 l -3.18721,2.46812"
style="fill:none;stroke:url(#linearGradient29886);stroke-width:0.58802563px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
@@ -42175,27 +42251,24 @@
height="16"
width="16"
id="rect24489"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
+ <circle
transform="matrix(-0.248353,0.02816779,0.02830718,0.248422,140.45214,86.01031)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path10768"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- sodipodi:type="arc" />
+ style="display:inline;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
style="display:inline"
id="ICON_ZOOMOUT"
transform="translate(-112,487.00001)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect24479"
width="16"
height="16"
@@ -42206,7 +42279,7 @@
id="g10870"
style="display:inline">
<rect
- style="fill:url(#linearGradient15719);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:url(#linearGradient15719);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect10872"
width="11.000006"
height="2.9999976"
@@ -42238,14 +42311,14 @@
height="16"
width="16"
id="rect24477"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="translate(0.01612278,6)"
id="g10876"
style="display:inline">
<path
- style="fill:url(#linearGradient15723);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- d="m 225.48388,111.49999 4.01612,-0.008 -0.0161,-3.99192 3,0 0.0161,3.99192 3.98388,0.008 0,3 -3.98388,-0.008 -0.0161,4.008 -3,0 0.0161,-4.008 -4.01612,0.008 0,-3 z"
+ style="fill:url(#linearGradient15723);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 225.48388,111.49999 4.01612,-0.008 -0.0161,-3.99192 h 3 l 0.0161,3.99192 3.98388,0.008 v 3 l -3.98388,-0.008 -0.0161,4.008 h -3 l 0.0161,-4.008 -4.01612,0.008 z"
id="path10878"
sodipodi:nodetypes="ccccccccccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -42254,7 +42327,7 @@
inkscape:connector-curvature="0" />
<path
id="path10880"
- d="m 232.48388,112.49999 3,0 m -5,2 0,3 m 1,-9 -1,0 0.0161,3.99192 -4.01612,0.008 0.0242,1"
+ d="m 232.48388,112.49999 h 3 m -5,2 v 3 m 1,-9 h -1 l 0.0161,3.99192 -4.01612,0.008 0.0242,1"
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
sodipodi:nodetypes="ccccccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -42273,7 +42346,7 @@
height="16"
width="16"
id="rect24475"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g11344"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -42288,22 +42361,19 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path11348"
- style="fill:url(#linearGradient15774);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.06496322;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.872933,0,0,0.883992,56.29135,130.45005)" />
+ style="fill:url(#linearGradient15774);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.06496322;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.872933,0,0,0.883992,56.29135,130.45005)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<path
- d="m 134.19651,255.80467 -6.46038,0 m 3.23019,3.23013 0,-6.46025"
+ d="m 134.19651,255.80467 h -6.46038 m 3.23019,3.23013 v -6.46025"
style="fill:none;stroke:url(#linearGradient15776);stroke-width:3.2301569;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
id="path11350"
inkscape:connector-curvature="0" />
@@ -42312,8 +42382,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
sodipodi:nodetypes="cc"
- d="m 130.96632,259.0348 0,-6.46025"
- style="fill:none;stroke:#000000;stroke-width:1.07819378;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 130.96632,259.0348 v -6.46025"
+ style="fill:none;stroke:#000000;stroke-width:1.07819378;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path11352"
inkscape:connector-curvature="0" />
<g
@@ -42322,25 +42392,22 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
transform="matrix(0.784039,0,0,0.779055,-3.508124,71.29625)"
id="g11354"
- style="fill:none;stroke:url(#linearGradient15780);stroke-width:1.27024341;stroke-opacity:1;display:inline">
- <path
+ style="display:inline;fill:none;stroke:url(#linearGradient15780);stroke-width:1.27024341;stroke-opacity:1">
+ <circle
transform="matrix(0.858314,0,0,0.863791,58.21752,134.9089)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient15778);stroke-width:1.60000753;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient15778);stroke-width:1.60000753;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path11356"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<path
id="path11358"
- style="fill:none;stroke:#000000;stroke-width:1.07819378;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 134.19651,255.80467 -6.46038,0"
+ style="fill:none;stroke:#000000;stroke-width:1.07819378;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 134.19651,255.80467 h -6.46038"
sodipodi:nodetypes="cc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
@@ -42358,21 +42425,18 @@
height="16"
width="16"
id="rect24483"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
- transform="matrix(-1,0,0,-1,382.01612,238.00006)"
+ transform="rotate(180,191.00806,119.00003)"
id="g54036"
style="display:inline">
- <path
- sodipodi:type="arc"
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient16025);stroke-width:1.94115818;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient16025);stroke-width:1.94115818;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
id="path54038"
- sodipodi:cx="190.5"
- sodipodi:cy="119.5"
- sodipodi:rx="5.5"
- sodipodi:ry="5.5"
- d="m 196,119.5 a 5.5,5.5 0 0 1 -5.5,5.5 5.5,5.5 0 0 1 -5.5,-5.5 5.5,5.5 0 0 1 5.5,-5.5 5.5,5.5 0 0 1 5.5,5.5 z"
- transform="matrix(0.61819,0,0,0.618186,73.23488,45.12681)" />
+ transform="matrix(0.61819,0,0,0.618186,73.23488,45.12681)"
+ cx="190.5"
+ cy="119.5"
+ r="5.5" />
</g>
</g>
<g
@@ -42385,58 +42449,49 @@
height="16"
width="16"
id="rect24487"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g24576">
- <path
+ <circle
transform="matrix(1.4256767,0,0,1.4314068,-320.1963,68.175135)"
- d="M 333.29445,35.5 A 2.7944512,2.7944512 0 0 1 330.5,38.294451 2.7944512,2.7944512 0 0 1 327.70555,35.5 2.7944512,2.7944512 0 0 1 330.5,32.705549 2.7944512,2.7944512 0 0 1 333.29445,35.5 Z"
- sodipodi:ry="2.7944512"
- sodipodi:rx="2.7944512"
- sodipodi:cy="35.5"
- sodipodi:cx="330.5"
id="path15084"
- style="fill:#e6e6e6;fill-opacity:0.25490196;fill-rule:nonzero;stroke:none;display:inline"
- sodipodi:type="arc" />
- <path
+ style="display:inline;fill:#e6e6e6;fill-opacity:0.25490196;fill-rule:nonzero;stroke:none"
+ cx="330.5"
+ cy="35.5"
+ r="2.7944512" />
+ <circle
transform="matrix(1.2885487,0,0,1.2885617,-274.87525,73.246084)"
- d="M 334,35.5 A 3.5,3.5 0 0 1 330.5,39 3.5,3.5 0 0 1 327,35.5 3.5,3.5 0 0 1 330.5,32 3.5,3.5 0 0 1 334,35.5 Z"
- sodipodi:ry="3.5"
- sodipodi:rx="3.5"
- sodipodi:cy="35.5"
- sodipodi:cx="330.5"
id="path15086"
- style="opacity:0.4;fill:none;stroke:url(#linearGradient15122);stroke-width:0.77606368;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;display:inline"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="opacity:0.6;fill:none;stroke:url(#linearGradient15124);stroke-width:0.77608043;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;display:inline"
+ style="display:inline;opacity:0.4;fill:none;stroke:url(#linearGradient15122);stroke-width:0.77606368;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1"
+ cx="330.5"
+ cy="35.5"
+ r="3.5" />
+ <circle
+ style="display:inline;opacity:0.6;fill:none;stroke:url(#linearGradient15124);stroke-width:0.77608043;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1"
id="path15099"
- sodipodi:cx="330.5"
- sodipodi:cy="35.5"
- sodipodi:rx="3.5"
- sodipodi:ry="3.5"
- d="M 334,35.5 A 3.5,3.5 0 0 1 330.5,39 3.5,3.5 0 0 1 327,35.5 3.5,3.5 0 0 1 330.5,32 3.5,3.5 0 0 1 334,35.5 Z"
- transform="matrix(-1.288521,0,0,-1.2885339,576.8463,164.73299)" />
+ transform="matrix(-1.288521,0,0,-1.2885339,576.8463,164.73299)"
+ cx="330.5"
+ cy="35.5"
+ r="3.5" />
</g>
</g>
<g
- style="opacity:0.6;display:inline"
+ style="display:inline;opacity:0.6"
id="ICON_RIGHTARROW_THIN"
transform="translate(4,529.00001)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect24905"
width="16"
height="16"
x="43"
y="69" />
<g
- transform="translate(0.01612278,0)"
+ transform="translate(0.01612278)"
id="g10995"
style="display:inline">
<g
- style="fill:none;display:inline"
+ style="display:inline;fill:none"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -42444,20 +42499,20 @@
id="g10997">
<path
id="path10999"
- d="m 394.08819,237.85988 -6.57143,6.61322 6.57143,6.61322 1.23215,0 -10e-6,-13.22644 -1.23214,0 z"
- style="fill:none;stroke:#000000;stroke-width:1.64807379;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 394.08819,237.85988 -6.57143,6.61322 6.57143,6.61322 h 1.23215 l -10e-6,-13.22644 z"
+ style="fill:none;stroke:#000000;stroke-width:1.64807379;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
</g>
<path
id="path11001"
- d="m 49.233877,73.74999 3.75,3.75 -3.75,3.75 -0.25,0 0,-7.5 0.25,0 z"
- style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+ d="m 49.233877,73.74999 3.75,3.75 -3.75,3.75 h -0.25 v -7.5 z"
+ style="display:inline;fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.9;fill:none;stroke:#ffffff;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
- d="m 57.25,606.75 -3.75,3.75 -0.5,0"
+ style="display:inline;opacity:0.9;fill:none;stroke:#ffffff;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="M 57.25,606.75 53.5,610.5 H 53"
id="path35403"
sodipodi:nodetypes="cc"
transform="translate(-4.0161228,-529.00001)"
@@ -42469,7 +42524,7 @@
id="ICON_TRIA_DOWN"
transform="translate(28,550.00001)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect24909"
width="16"
height="16"
@@ -42477,21 +42532,21 @@
y="69" />
<g
style="display:inline"
- transform="matrix(0,-1,1,0,-153.98989,467.9919)"
+ transform="rotate(-90,157.001,310.9909)"
id="g11003"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<path
id="path11005"
- d="m 392.49192,239.48989 -5.00001,4.75 0,0.5 5.00001,4.75 1,0 0,-10 -1,0 z"
- style="color:#000000;fill:url(#linearGradient15742-5);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 392.49192,239.48989 -5.00001,4.75 v 0.5 l 5.00001,4.75 h 1 v -10 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient15742-5);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
id="path11007"
- d="m 392.49191,248.23989 0,-7.5"
+ d="m 392.49191,248.23989 v -7.5"
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
@@ -42501,7 +42556,7 @@
id="ICON_TRIA_RIGHT"
transform="translate(27,550.00001)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect24907"
width="16"
height="16"
@@ -42515,14 +42570,14 @@
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<path
- style="fill:url(#linearGradient15742);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 392.5,239.5 -4.98989,4.74999 0,0.5 4.98989,4.75001 1.01011,-1e-5 0.0368,-9.96874 L 392.5,239.5 z"
+ style="fill:url(#linearGradient15742);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 392.5,239.5 -4.98989,4.74999 v 0.5 L 392.5,249.5 l 1.01011,-1e-5 0.0368,-9.96874 z"
id="path11011"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:url(#linearGradient27860);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 392.51011,248.24999 0,-7.5 -4,3.75"
+ d="m 392.51011,248.24999 v -7.5 l -4,3.75"
id="path11013"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
@@ -42538,14 +42593,14 @@
height="16"
width="16"
id="rect25118"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g25451">
<g
id="use25367"
transform="translate(24.016123,6)">
<rect
- style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000036;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.3;marker:none;visibility:visible;display:inline;overflow:visible"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000036;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.30000001;stroke-opacity:1;marker:none"
id="rect25447"
width="1.0000005"
height="3.0000005"
@@ -42557,13 +42612,13 @@
height="3"
width="1"
id="rect25449"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.3;marker:none;visibility:visible;display:inline;overflow:visible" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.30000001;stroke-opacity:1;marker:none" />
</g>
<g
id="use25369"
transform="translate(28.016123,6)">
<rect
- style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000036;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.3;marker:none;visibility:visible;display:inline;overflow:visible"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000036;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.30000001;stroke-opacity:1;marker:none"
id="rect25441"
width="1.0000005"
height="3.0000005"
@@ -42575,7 +42630,7 @@
height="3"
width="1"
id="rect25443"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.3;marker:none;visibility:visible;display:inline;overflow:visible" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.30000001;stroke-opacity:1;marker:none" />
</g>
<rect
y="184.50003"
@@ -42583,9 +42638,9 @@
height="3.0000005"
width="1.0000005"
id="rect25373"
- style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000036;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.3;marker:none;visibility:visible;display:inline;overflow:visible" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000036;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.30000001;stroke-opacity:1;marker:none" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.3;marker:none;visibility:visible;display:inline;overflow:visible"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.30000001;stroke-opacity:1;marker:none"
id="rect25375"
width="1"
height="3"
@@ -42603,14 +42658,14 @@
height="16"
width="16"
id="rect25116"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g25401">
<g
id="use9783"
- transform="translate(4.0161228,0)">
+ transform="translate(4.0161228)">
<rect
- style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000036;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.3;marker:none;visibility:visible;display:inline;overflow:visible"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000036;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.30000001;stroke-opacity:1;marker:none"
id="rect25397"
width="1.0000005"
height="3.0000005"
@@ -42622,13 +42677,13 @@
height="3"
width="1"
id="rect25399"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.3;marker:none;visibility:visible;display:inline;overflow:visible" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.30000001;stroke-opacity:1;marker:none" />
</g>
<g
id="use9785"
- transform="translate(8.0161228,0)">
+ transform="translate(8.0161228)">
<rect
- style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000036;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.3;marker:none;visibility:visible;display:inline;overflow:visible"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000036;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.30000001;stroke-opacity:1;marker:none"
id="rect25391"
width="1.0000005"
height="3.0000005"
@@ -42640,13 +42695,13 @@
height="3"
width="1"
id="rect25393"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.3;marker:none;visibility:visible;display:inline;overflow:visible" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.30000001;stroke-opacity:1;marker:none" />
</g>
<g
id="g9787"
- transform="translate(0.01612278,0)">
+ transform="translate(0.01612278)">
<rect
- style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000036;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.3;marker:none;visibility:visible;display:inline;overflow:visible"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000036;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.30000001;stroke-opacity:1;marker:none"
id="rect9789"
width="1.0000005"
height="3.0000005"
@@ -42658,7 +42713,7 @@
height="3"
width="1"
id="rect9791"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.3;marker:none;visibility:visible;display:inline;overflow:visible" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.30000001;stroke-opacity:1;marker:none" />
</g>
</g>
</g>
@@ -42667,67 +42722,61 @@
id="ICON_AUTO"
transform="translate(93,445.00001)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect25526"
width="16"
height="16"
x="143"
y="153" />
<g
- transform="translate(0.01612278,0)"
+ transform="translate(0.01612278)"
id="g10844"
style="display:inline">
<path
style="fill:url(#linearGradient15699);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 144.5,163.5 13,0 0,-1 c 0,-2.25 -0.5,-3 -4,-3 -0.5,-1.25 -1.5,-3 -4,-3 l -1,0 c -3.75,0 -4,2.25 -4,5 l 0,2 z"
+ d="m 144.5,163.5 h 13 v -1 c 0,-2.25 -0.5,-3 -4,-3 -0.5,-1.25 -1.5,-3 -4,-3 h -1 c -3.75,0 -4,2.25 -4,5 z"
id="path10846"
sodipodi:nodetypes="ccscsccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
- <path
- sodipodi:type="arc"
- style="fill:url(#linearGradient15701);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.46666667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5"
+ <circle
+ style="fill:url(#linearGradient15701);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.46666667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1"
id="path10848"
- sodipodi:cx="147"
- sodipodi:cy="165"
- sodipodi:rx="1"
- sodipodi:ry="1"
- d="m 148,165 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
transform="matrix(1.5,0,0,1.5,-73.5,-83.5)"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="147"
+ cy="165"
+ r="1" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="csccc"
id="path10850"
- d="m 150,157.5 -1.5,0 c -3,0 -3,1.5 -3,5 m 10.99996,-0.71441 c 0,-1.60712 5e-5,-1.28559 -2.99996,-1.28559"
- style="fill:none;stroke:url(#linearGradient15703);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 150,157.5 h -1.5 c -3,0 -3,1.5 -3,5 m 10.99996,-0.71441 c 0,-1.60712 5e-5,-1.28559 -2.99996,-1.28559"
+ style="fill:none;stroke:url(#linearGradient15703);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
transform="matrix(1.5,0,0,1.5,-66.5,-83.5)"
- d="m 148,165 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- sodipodi:ry="1"
- sodipodi:rx="1"
- sodipodi:cy="165"
- sodipodi:cx="147"
id="path10852"
- style="fill:url(#linearGradient15705);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.46666667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5"
- sodipodi:type="arc" />
+ style="fill:url(#linearGradient15705);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.46666667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1"
+ cx="147"
+ cy="165"
+ r="1" />
</g>
</g>
<g
id="ICON_VIEWZOOM"
transform="translate(0,128.00001)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect25724"
width="16"
height="16"
@@ -42742,25 +42791,22 @@
sodipodi:nodetypes="cc"
id="path12027"
d="m 94.5,480.5 1.25,-1.25"
- style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
- <path
+ <circle
inkscape:transform-center-y="-6.245879"
inkscape:transform-center-x="-6.2091889"
- sodipodi:type="arc"
- style="fill:none;stroke:#000000;stroke-width:0.62898993;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:0.62898993;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
id="path12029"
- sodipodi:cx="258.5"
- sodipodi:cy="78.5"
- sodipodi:rx="3.5"
- sodipodi:ry="3.5"
- d="M 262,78.5 A 3.5,3.5 0 0 1 258.5,82 3.5,3.5 0 0 1 255,78.5 3.5,3.5 0 0 1 258.5,75 3.5,3.5 0 0 1 262,78.5 Z"
transform="matrix(-1.4308622,0,0,1.4308687,469.36987,363.18486)"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="258.5"
+ cy="78.5"
+ r="3.5" />
<path
- style="fill:none;stroke:#28170b;stroke-width:3.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#28170b;stroke-width:3.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 90.863188,484.13807 94.25,480.75"
id="path12031"
sodipodi:nodetypes="cc"
@@ -42769,7 +42815,7 @@
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#cccccc;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#cccccc;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 94.5,480.5 1.25,-1.25"
id="path12033"
sodipodi:nodetypes="cc"
@@ -42777,74 +42823,61 @@
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
transform="matrix(-1.4308622,0,0,1.4308687,469.36987,363.18486)"
- d="M 262,78.5 A 3.5,3.5 0 0 1 258.5,82 3.5,3.5 0 0 1 255,78.5 3.5,3.5 0 0 1 258.5,75 3.5,3.5 0 0 1 262,78.5 Z"
- sodipodi:ry="3.5"
- sodipodi:rx="3.5"
- sodipodi:cy="78.5"
- sodipodi:cx="258.5"
id="path35965"
- style="opacity:0.5;fill:url(#radialGradient35967);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.55910218;marker:none;display:inline"
- sodipodi:type="arc"
+ style="display:inline;opacity:0.5;fill:url(#radialGradient35967);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.55910218;marker:none"
inkscape:transform-center-x="-6.2091889"
- inkscape:transform-center-y="-6.245879" />
+ inkscape:transform-center-y="-6.245879"
+ cx="258.5"
+ cy="78.5"
+ r="3.5" />
<g
id="g12035"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
transform="matrix(1.0005769,0,0,0.9999104,-69.113516,270.01809)">
- <path
+ <circle
inkscape:transform-center-y="-4.9844055"
inkscape:transform-center-x="-4.9755572"
- sodipodi:type="arc"
- style="fill:url(#linearGradient35488);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient35490);stroke-width:0.87477797;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline"
+ style="display:inline;fill:url(#linearGradient35488);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient35490);stroke-width:0.87477797;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
id="path12037"
- sodipodi:cx="258.5"
- sodipodi:cy="78.5"
- sodipodi:rx="3.5"
- sodipodi:ry="3.5"
- d="M 262,78.5 A 3.5,3.5 0 0 1 258.5,82 3.5,3.5 0 0 1 255,78.5 3.5,3.5 0 0 1 258.5,75 3.5,3.5 0 0 1 262,78.5 Z"
- transform="matrix(-1.14287,0,0,1.142863,463.9317,115.7853)" />
+ transform="matrix(-1.14287,0,0,1.142863,463.9317,115.7853)"
+ cx="258.5"
+ cy="78.5"
+ r="3.5" />
<g
id="g35307">
- <path
+ <ellipse
transform="matrix(1.1162596,0,0,1.1065394,80.948334,-350.49863)"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path35287"
- style="opacity:0.25;fill:url(#radialGradient35492);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="opacity:0.25;fill:url(#radialGradient35494);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:url(#radialGradient35492);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:url(#radialGradient35494);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
id="path35289"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(-1.087144,-0.2518404,0.2525206,-1.0776772,126.97246,766.619)" />
+ transform="matrix(-1.087144,-0.2518404,0.2525206,-1.0776772,126.97246,766.619)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
</g>
- <path
+ <circle
inkscape:transform-center-y="-6.490455"
inkscape:transform-center-x="-3.3976162"
- d="m 65,135 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- sodipodi:ry="1"
- sodipodi:rx="1"
- sodipodi:cy="135"
- sodipodi:cx="64"
id="path12041"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74699998;marker:none;display:inline"
- sodipodi:type="arc"
- transform="matrix(0.993526,0,0,1.026234,103.4315,65.484747)" />
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74699998;marker:none"
+ transform="matrix(0.993526,0,0,1.026234,103.4315,65.484747)"
+ cx="64"
+ cy="135"
+ r="1" />
</g>
<path
inkscape:export-ydpi="90"
@@ -42853,10 +42886,10 @@
sodipodi:nodetypes="cc"
id="path12043"
d="m 90.75,484.25 3.5,-3.5"
- style="fill:none;stroke:#a05a2c;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#a05a2c;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 90.25,484 94,480.25"
id="path12045"
sodipodi:nodetypes="cc"
@@ -42871,7 +42904,7 @@
id="ICON_WORDWRAP_OFF"
transform="translate(-206,-205)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect21528"
width="16"
height="16"
@@ -42886,14 +42919,14 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path14451"
- d="m 17.51142,84.5 -13.988585,0 -0.011415,-14 14,0 0,14 z"
- style="fill:url(#linearGradient16063);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 17.51142,84.5 H 3.522835 L 3.51142,70.5 h 14 z"
+ style="fill:url(#linearGradient16063);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
id="path14523"
- style="fill:none;stroke:url(#linearGradient16067);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
- d="m 6.0097,77.5 6.00172,0 m 1,0 4,0 m -6,-2 6,0 m -3,-2 3,0 m -11.00172,0 7.00172,0 m -7.00172,2 4.00172,0"
+ style="display:inline;fill:none;stroke:url(#linearGradient16067);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 6.0097,77.5 h 6.00172 m 1,0 h 4 m -6,-2 h 6 m -3,-2 h 3 m -11.00172,0 h 7.00172 m -7.00172,2 h 4.00172"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -42902,7 +42935,7 @@
<path
sodipodi:nodetypes="ccccc"
style="fill:none;stroke:url(#linearGradient16069);stroke-width:0.99999976px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 16.51142,71.5 -12,0 0,12 12.000001,0 -10e-7,-12 0,0 0,0 0,0 z"
+ d="m 16.51142,71.5 h -12 v 12 h 12.000001 z"
id="path14459"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -42920,7 +42953,7 @@
height="16"
width="16"
id="rect21548"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g21749">
<g
@@ -42932,14 +42965,14 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path14500"
- d="m 17.51141,84.5 -14,0 -1e-7,-14 13.9814141,0 0.01859,14 -4e-6,0 z"
- style="fill:url(#linearGradient14511);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 17.51141,84.5 h -14 l -1e-7,-14 H 17.492824 l 0.01859,14 z"
+ style="fill:url(#linearGradient14511);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
style="fill:none;stroke:url(#linearGradient14517);stroke-width:0.99999976px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 16.51141,71.5 -12,0 0,12 12.000001,0 -10e-7,-12 z"
+ d="m 16.51141,71.5 h -12 v 12 h 12.000001 z"
id="path14508"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -42951,8 +42984,8 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- d="m 486,246.5 7.03916,0 m -2.03916,2 -5,0 m 0.0392,-6 5,0 m -5,-2 6,0 m -6,4 3,0"
- style="fill:none;stroke:url(#linearGradient21531);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ d="m 486,246.5 h 7.03916 M 491,248.5 h -5 m 0.0392,-6 h 5 m -5,-2 h 6 m -6,4 h 3"
+ style="display:inline;fill:none;stroke:url(#linearGradient21531);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path15300"
inkscape:connector-curvature="0" />
</g>
@@ -42962,7 +42995,7 @@
id="ICON_SYNTAX_ON"
transform="translate(97,5)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect21493"
width="16"
height="16"
@@ -42991,13 +43024,13 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path10975"
- d="m 356.53857,243.30784 -11.07692,0 0,-11.07699 11.07692,0 0,11.07699 z"
+ d="m 356.53857,243.30784 h -11.07692 v -11.07699 h 11.07692 z"
style="fill:url(#linearGradient15734);fill-opacity:1;fill-rule:evenodd;stroke:#333333;stroke-width:0.92307967px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
style="fill:none;stroke:#ffffff;stroke-width:0.92307913px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 346.38485,242.26935 -1.3e-4,-9.11543 9.14632,0"
+ d="m 346.38485,242.26935 -1.3e-4,-9.11543 h 9.14632"
id="path10977"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -43007,13 +43040,13 @@
</g>
<path
id="path10979"
- d="m 227,49 0,1 2,0 0,-1 -2,0 z m 2,1 0,1 -2,0 0,1 2,0 0,1 -2,0 0,1 2,0 1,0 0,-4 -1,0 z m -2,3 0,-1 -1,0 0,1 1,0 z"
- style="fill:#0055d4;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ d="m 227,49 v 1 h 2 v -1 z m 2,1 v 1 h -2 v 1 h 2 v 1 h -2 v 1 h 2 1 v -4 z m -2,3 v -1 h -1 v 1 z"
+ style="display:inline;fill:#0055d4;fill-opacity:1;fill-rule:nonzero;stroke:none"
sodipodi:nodetypes="cccccccccccccccccccccc"
inkscape:connector-curvature="0" />
<path
- style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- d="m 231,47 0,7 1,0 2,0 0,-1 -2,0 0,-2 2,0 0,-1 -2,0 0,-3 -1,0 z m 3,4 0,2 1,0 0,-2 -1,0 z"
+ style="display:inline;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 231,47 v 7 h 1 2 v -1 h -2 v -2 h 2 v -1 h -2 v -3 z m 3,4 v 2 h 1 v -2 z"
id="path10981"
sodipodi:nodetypes="ccccccccccccccccc"
inkscape:connector-curvature="0" />
@@ -43024,8 +43057,8 @@
transform="translate(219.98859,-43)">
<path
sodipodi:nodetypes="ccccc"
- style="fill:url(#linearGradient16150);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 17.51141,84.5 -14,0 -1e-7,-14 13.9814141,0 0.01859,14 -4e-6,0 z"
+ style="fill:url(#linearGradient16150);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 17.51141,84.5 h -14 l -1e-7,-14 H 17.492824 l 0.01859,14 z"
id="path16142"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -43036,20 +43069,20 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path16148"
- d="m 16.51141,71.5 -12,0 0,12 12.000001,0 -10e-7,-12 z"
+ d="m 16.51141,71.5 h -12 v 12 h 12.000001 z"
style="fill:none;stroke:url(#linearGradient16154);stroke-width:0.99999976px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
</g>
<path
id="path16156"
- d="m 227,33 0,1 2,0 0,-1 -2,0 z m 2,1 0,1 -2,0 0,1 2,0 0,1 -2,0 0,1 2,0 1,0 0,-4 -1,0 z m -2,3 0,-1 -1,0 0,1 1,0 z"
- style="fill:#0055d4;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ d="m 227,33 v 1 h 2 v -1 z m 2,1 v 1 h -2 v 1 h 2 v 1 h -2 v 1 h 2 1 v -4 z m -2,3 v -1 h -1 v 1 z"
+ style="display:inline;fill:#0055d4;fill-opacity:1;fill-rule:nonzero;stroke:none"
sodipodi:nodetypes="cccccccccccccccccccccc"
inkscape:connector-curvature="0" />
<path
- style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- d="m 231,31 0,7 1,0 2,0 0,-1 -2,0 0,-2 2,0 0,-1 -2,0 0,-3 -1,0 z m 3,4 0,2 1,0 0,-2 -1,0 z"
+ style="display:inline;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 231,31 v 7 h 1 2 v -1 h -2 v -2 h 2 v -1 h -2 v -3 z m 3,4 v 2 h 1 v -2 z"
id="path16158"
sodipodi:nodetypes="ccccccccccccccccc"
inkscape:connector-curvature="0" />
@@ -43065,7 +43098,7 @@
height="16"
width="16"
id="rect21491"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g21479">
<g
@@ -43085,7 +43118,7 @@
id="g10987">
<path
style="fill:url(#linearGradient15736);fill-opacity:1;fill-rule:evenodd;stroke:#333333;stroke-width:0.92307967px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 356.53857,243.30784 -11.07692,0 0,-11.07699 11.07692,0 0,11.07699 z"
+ d="m 356.53857,243.30784 h -11.07692 v -11.07699 h 11.07692 z"
id="path10989"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -43097,15 +43130,15 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path10991"
- d="m 346.38485,242.26935 -1.3e-4,-9.11543 9.14632,0"
+ d="m 346.38485,242.26935 -1.3e-4,-9.11543 h 9.14632"
style="fill:none;stroke:#ffffff;stroke-width:0.92307913px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
</g>
</g>
<path
- style="opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- d="m 231,47 0,7 1,0 2,0 0,-1 -2,0 0,-2 2,0 0,-1 -2,0 0,-3 -1,0 z m 3,4 0,2 1,0 0,-2 -1,0 z m -7,-2 0,1 2,0 0,-1 -2,0 z m 2,1 0,1 -2,0 0,1 2,0 0,1 -2,0 0,1 2,0 1,0 0,-4 -1,0 z m -2,3 0,-1 -1,0 0,1 1,0 z"
+ style="display:inline;opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 231,47 v 7 h 1 2 v -1 h -2 v -2 h 2 v -1 h -2 v -3 z m 3,4 v 2 h 1 v -2 z m -7,-2 v 1 h 2 v -1 z m 2,1 v 1 h -2 v 1 h 2 v 1 h -2 v 1 h 2 1 v -4 z m -2,3 v -1 h -1 v 1 z"
id="path10993"
inkscape:connector-curvature="0" />
</g>
@@ -43118,14 +43151,14 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path16162"
- d="m 17.51141,84.5 -14,0 -1e-7,-14 13.9814141,0 0.01859,14 -4e-6,0 z"
- style="fill:url(#linearGradient16170);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 17.51141,84.5 h -14 l -1e-7,-14 H 17.492824 l 0.01859,14 z"
+ style="fill:url(#linearGradient16170);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
style="fill:none;stroke:url(#linearGradient16174);stroke-width:0.99999976px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 16.51141,71.5 -12,0 -1e-6,12 12.000001,0 0,-12 z"
+ d="m 16.51141,71.5 h -12 l -1e-6,12 H 16.51141 Z"
id="path16168"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -43133,8 +43166,8 @@
inkscape:connector-curvature="0" />
</g>
<path
- style="opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- d="m 211,31 0,7 1,0 2,0 0,-1 -2,0 0,-2 2,0 0,-1 -2,0 0,-3 -1,0 z m 3,4 0,2 1,0 0,-2 -1,0 z m -7,-2 0,1 2,0 0,-1 -2,0 z m 2,1 0,1 -2,0 0,1 2,0 0,1 -2,0 0,1 2,0 1,0 0,-4 -1,0 z m -2,3 0,-1 -1,0 0,1 1,0 z"
+ style="display:inline;opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 211,31 v 7 h 1 2 v -1 h -2 v -2 h 2 v -1 h -2 v -3 z m 3,4 v 2 h 1 v -2 z m -7,-2 v 1 h 2 v -1 z m 2,1 v 1 h -2 v 1 h 2 v 1 h -2 v 1 h 2 1 v -4 z m -2,3 v -1 h -1 v 1 z"
id="path16178"
inkscape:connector-curvature="0" />
</g>
@@ -43143,7 +43176,7 @@
id="ICON_LINENUMBERS_ON"
transform="translate(0,2)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect21607"
width="16"
height="16"
@@ -43160,14 +43193,14 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path14940"
- d="m 17.51141,84.5 -14,0 -1e-7,-14 13.9814141,0 0.01859,14 -4e-6,0 z"
- style="fill:url(#linearGradient21902);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 17.51141,84.5 h -14 l -1e-7,-14 H 17.492824 l 0.01859,14 z"
+ style="fill:url(#linearGradient21902);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
style="fill:none;stroke:url(#linearGradient21904);stroke-width:0.99999976px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 16.51141,71.5 -12,0 0,12 12.000001,0 -10e-7,-12 z"
+ d="m 16.51141,71.5 h -12 v 12 h 12.000001 z"
id="path14942"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -43177,17 +43210,17 @@
<path
sodipodi:nodetypes="cccccccccccccccccccccccccccc"
id="path14947"
- d="m 366,33.03125 0,1 -1,0 0,1 1,0 0,2 1,0 0,-4 -1,0 z M 365,39 l 0,1 2.3295,0 0,-1 L 365,39 z m 2,1 0,1 1,0 0,-1 -1,0 z m 0.0594,1 -1.05938,0 0,1 -1,0 0,1 3,0 0,-1 -1.44062,0 0.5,-1 z"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 366,33.03125 v 1 h -1 v 1 h 1 v 2 h 1 v -4 z M 365,39 v 1 h 2.3295 v -1 z m 2,1 v 1 h 1 v -1 z m 0.0594,1 h -1.05938 v 1 h -1 v 1 h 3 v -1 h -1.44062 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 369,34 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m -4,2 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m -4,3 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m -4,2 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
+ d="m 369,34 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m -4,2 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m -4,3 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m -4,2 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z"
id="path14953"
inkscape:connector-curvature="0" />
<path
- style="fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 370,34 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m -4,2 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m -4,3 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m -4,2 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
+ d="m 370,34 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m -4,2 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m -4,3 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m -4,2 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z"
id="path14955"
inkscape:connector-curvature="0" />
</g>
@@ -43196,7 +43229,7 @@
id="ICON_LINENUMBERS_OFF"
transform="translate(0,2)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect21605"
width="16"
height="16"
@@ -43210,8 +43243,8 @@
transform="translate(337.98858,-40)">
<path
sodipodi:nodetypes="ccccc"
- style="fill:url(#linearGradient21862);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 17.500005,84.5 -13.988585,0 -1e-7,-14 14.0000001,0 -0.01141,14 -5e-6,0 0,0 0,0 z"
+ style="fill:url(#linearGradient21862);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 17.500005,84.5 H 3.51142 l -1e-7,-14 H 17.51142 l -0.01141,14 z"
id="path14929"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -43222,7 +43255,7 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path14933"
- d="m 16.51142,71.5 -12,0 0,12 12.000001,0 -10e-7,-12 0,0 0,0 0,0 z"
+ d="m 16.51142,71.5 h -12 v 12 h 12.000001 z"
style="fill:none;stroke:url(#linearGradient21864);stroke-width:0.99999976px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
@@ -43231,13 +43264,13 @@
id="g11949">
<path
id="path14967"
- d="m 344,34 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m -8,2 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m -8,3 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m -8,2 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z"
- style="fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 344,34 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m -8,2 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m -8,3 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m -8,2 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
id="path14971"
- d="m 345,34 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m -8,2 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m -8,3 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m -8,2 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z"
- style="fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 345,34 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m -8,2 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m -8,3 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m -8,2 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -43248,7 +43281,7 @@
id="ICON_MOD_CURVE">
<g
id="g22274"
- transform="translate(-30,0)">
+ transform="translate(-30)">
<rect
ry="0"
rx="0"
@@ -43257,9 +43290,9 @@
height="16"
width="16"
id="rect22276"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<path
- style="fill:none;stroke:#0b1728;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0b1728;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 204,-114 c 4.5365,0 8.5,-3 8.5,-6 0,-1.75 -1.25,-4 -5.5,-4"
id="path22282"
sodipodi:nodetypes="csc"
@@ -43268,7 +43301,7 @@
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<rect
- style="fill:#162d50;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#162d50;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect22278"
width="2.9998772"
height="3"
@@ -43284,7 +43317,7 @@
height="3"
width="2.9998772"
id="rect22280"
- style="fill:#162d50;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#162d50;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
@@ -43292,10 +43325,10 @@
sodipodi:nodetypes="csc"
id="path22284"
d="m 204,-114 c 4.49647,0 8.5,-3 8.5,-6 0,-1.75 -1.25,-4 -5.5,-4"
- style="fill:none;stroke:url(#linearGradient24098);stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient24098);stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:#afc6e9;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#afc6e9;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
d="m 205,-115 c -0.66667,0 -1.33332,1e-5 -2,1e-5 0,0.66939 0,1.33877 0,2.00817 0.66668,0 1.33333,-10e-6 2,-10e-6 0,-0.66939 0,-1.33878 0,-2.00817 z"
id="path22288"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -43308,18 +43341,18 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path22291"
d="m 208,-125 c -0.65334,0 -1.30668,1e-5 -1.96003,1e-5 0,0.66667 0,1.33332 0,1.99999 0.65335,0 1.30669,-1e-5 1.96003,-1e-5 0,-0.66666 0,-1.33332 0,-1.99999 z"
- style="fill:#87aade;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#87aade;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<path
- style="opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
- d="m 176.5,-123.5 0,-1 1,0"
+ style="display:inline;opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 176.5,-123.5 v -1 h 1"
id="path22293"
inkscape:connector-curvature="0" />
<path
id="path22295"
- d="m 173.5,-113.5 0,-1 1,0"
- style="opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="m 173.5,-113.5 v -1 h 1"
+ style="display:inline;opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
@@ -43327,7 +43360,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path22297"
d="m 176,-113.25657 c -0.33333,0 -0.66667,-1e-5 -1,-1e-5 0,-0.55431 0,-1.1086 0,-1.66292 0.33333,0 0.66667,1e-5 1,1e-5 0,0.55431 0,1.10861 0,1.66292 z"
- style="opacity:0.35;fill:#002255;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;opacity:0.35;fill:#002255;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
@@ -43335,10 +43368,10 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path22299"
d="m 179,-122.48792 c -0.32001,0 -0.64002,-1e-5 -0.96003,-1e-5 0,-0.63982 0,-1.27964 0,-1.91948 0.32001,0 0.64002,1e-5 0.96003,1e-5 0,0.63983 0,1.27966 0,1.91948 z"
- style="opacity:0.2;fill:#002255;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;opacity:0.2;fill:#002255;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.5;fill:#00112b;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;opacity:0.5;fill:#00112b;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 176,-113 c -0.33333,0 -0.66667,0 -1,0 0,-0.21055 0,-0.42107 0,-0.63162 0.33333,0 0.66667,0 1,0 0,0.21055 0,0.42107 0,0.63162 z"
id="path22302"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -43351,7 +43384,7 @@
id="ICON_MATPLANE"
transform="translate(-58,-17)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect31205"
width="16"
height="16"
@@ -43368,7 +43401,7 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- style="fill:url(#linearGradient15356);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80001998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:url(#linearGradient15356);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80001998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect9150"
width="12.995382"
height="13.003749"
@@ -43379,7 +43412,7 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
style="fill:none;stroke:url(#linearGradient15358);stroke-width:1.0000248px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 46.49945,103.49527 0,-11.002747 10.996287,0 0,11.002747 -10.996287,0 z"
+ d="M 46.49945,103.49527 V 92.492523 h 10.996287 v 11.002747 z"
id="path9152"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
@@ -43390,7 +43423,7 @@
id="ICON_MATSPHERE"
transform="translate(-57,-17)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect31207"
width="16"
height="16"
@@ -43403,52 +43436,43 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path9156"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.23686159;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.6969446,0,0,0.6900977,36.918531,141.69345)" />
- <path
- sodipodi:type="arc"
- style="opacity:0.8;fill:url(#linearGradient15360);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.23686159;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.6969446,0,0,0.6900977,36.918531,141.69345)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
+ style="display:inline;opacity:0.8;fill:url(#linearGradient15360);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path9158"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(-0.6391427,-0.07194179,0.07284933,-0.6344823,204.68584,307.47408)" />
- <path
+ transform="matrix(-0.6391427,-0.07194179,0.07284933,-0.6344823,204.68584,307.47408)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.5885088,0,0,0.5897133,51.241774,153.48488)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient15362);stroke-width:1.45605874;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient15362);stroke-width:1.45605874;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path9160"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
id="ICON_ALIASED"
transform="translate(0,2)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect31391"
width="16"
height="16"
@@ -43460,7 +43484,7 @@
style="display:inline">
<path
style="fill:none;stroke:none"
- d="M 186.2503,165.73428 C 185.16882,164.6489 184.5,163.15208 184.5,161.5 c 0,-3.312 2.688,-6 6,-6 1.65758,0 3.15886,0.67328 4.24511,1.76111 l -8.49481,8.47317 z"
+ d="M 186.2503,165.73428 C 185.16882,164.6489 184.5,163.15208 184.5,161.5 c 0,-3.312 2.688,-6 6,-6 1.65758,0 3.15886,0.67328 4.24511,1.76111 z"
id="path9976"
sodipodi:nodetypes="csscc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -43469,17 +43493,17 @@
inkscape:connector-curvature="0" />
<path
id="path23601"
- d="m 188,154 0,2 6,0 0,-2 -6,0 z m 6,2 0,2 1.96875,0 0,6 -1.96875,0 0,1.96875 -6,0 0,-1.96875 -2,0 0,2 2,0 0,1.96875 6,0 0,-1.96875 2,0 0,-2 1.96875,0 0,-6 -1.96875,0 0,-2 -2,0 z m -8,8 0,-6 -2,0 0,6 2,0 z m 0,-6 2,0 0,-2 -2,0 0,2 z"
- style="opacity:0.1;fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5"
+ d="m 188,154 v 2 h 6 v -2 z m 6,2 v 2 h 1.96875 v 6 H 194 v 1.96875 h -6 V 164 h -2 v 2 h 2 v 1.96875 h 6 V 166 h 2 v -2 h 1.96875 v -6 H 196 v -2 z m -8,8 v -6 h -2 v 6 z m 0,-6 h 2 v -2 h -2 z"
+ style="opacity:0.1;fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 188,154 0,2 6,0 0,-2 -6,0 z m 6,2 0,2 1.96875,0 0,6 -1.96875,0 0,1.96875 -6,0 0,-1.96875 -2,0 0,2 2,0 0,1.96875 6,0 0,-1.96875 2,0 0,-2 1.96875,0 0,-6 -1.96875,0 0,-2 -2,0 z m -8,8 0,-6 -2,0 0,6 2,0 z m 0,-6 2,0 0,-2 -2,0 0,2 z"
+ d="m 188,154 v 2 h 6 v -2 z m 6,2 v 2 h 1.96875 v 6 H 194 v 1.96875 h -6 V 164 h -2 v 2 h 2 v 1.96875 h 6 V 166 h 2 v -2 h 1.96875 v -6 H 196 v -2 z m -8,8 v -6 h -2 v 6 z m 0,-6 h 2 v -2 h -2 z"
id="path9978"
inkscape:connector-curvature="0" />
<path
style="opacity:0.8;fill:url(#linearGradient15574);fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 186,158 2,0 0,-2 6,0 0,2 2,0 0,6 -2,0 0,2 -6,0 0,-2 -2,0 0,-6 z"
+ d="m 186,158 h 2 v -2 h 6 v 2 h 2 v 6 h -2 v 2 h -6 v -2 h -2 z"
id="path9980"
sodipodi:nodetypes="ccccccccccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -43492,8 +43516,8 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="ccccccccccccc"
id="path23596"
- d="m 186.5,158.46875 2,0 0,-2 5,0 0,2 2,0 0,5 -2,0 0,2 -5,0 0,-2 -2,0 0,-5 z"
- style="opacity:0.8;fill:none;stroke:url(#linearGradient23599);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0.5"
+ d="m 186.5,158.46875 h 2 v -2 h 5 v 2 h 2 v 5 h -2 v 2 h -5 v -2 h -2 z"
+ style="opacity:0.8;fill:none;stroke:url(#linearGradient23599);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0.5;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -43502,7 +43526,7 @@
id="ICON_SEQ_LUMA_WAVEFORM"
transform="translate(-235,4)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect31425"
width="16"
height="16"
@@ -43520,12 +43544,12 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path10458"
- d="m 296.49991,-1.4999999 -13.00008,0 0,-12.9999991 13.00008,0 0,12.9999991 0,0 0,0 0,0 z"
- style="fill:url(#linearGradient15644);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 296.49991,-1.4999999 H 283.49983 V -14.499999 h 13.00008 z"
+ style="fill:url(#linearGradient15644);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:url(#linearGradient15646);stroke-width:1.00000036px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 284.50009,-2.5000021 0,-11.0000069 11.00001,0"
+ d="M 284.50009,-2.5000021 V -13.500009 h 11.00001"
id="path10460"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -43534,7 +43558,7 @@
<path
id="path10462"
style="fill:none;stroke:#ffffff;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
- d="m 286.42863,-12.4 -0.84311,0 m 2.83879,3 -0.83163,0 m 2.83056,3 -0.82626,0 m 2.78967,1 -0.80293,0 m 3.77084,1 -1.74082,0"
+ d="m 286.42863,-12.4 h -0.84311 m 2.83879,3 h -0.83163 m 2.83056,3 h -0.82626 m 2.78967,1 h -0.80293 m 3.77084,1 h -1.74082"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -43548,50 +43572,44 @@
height="16"
width="16"
id="rect31510"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="translate(0.01612278,-12)"
id="g10854"
style="display:inline">
<rect
- style="fill:url(#linearGradient15707);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;display:inline"
+ style="display:inline;fill:url(#linearGradient15707);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1"
id="rect10856"
width="12"
height="12"
x="324.50003"
y="41.500015" />
- <path
- sodipodi:type="arc"
- style="fill:url(#linearGradient15709);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ <circle
+ style="display:inline;fill:url(#linearGradient15709);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path10858"
- sodipodi:cx="330.5"
- sodipodi:cy="35.5"
- sodipodi:rx="3.5"
- sodipodi:ry="3.5"
- d="M 334,35.5 A 3.5,3.5 0 0 1 330.5,39 3.5,3.5 0 0 1 327,35.5 3.5,3.5 0 0 1 330.5,32 3.5,3.5 0 0 1 334,35.5 Z"
- transform="matrix(1.000048,0,0,0.999998,-0.01591645,12.000064)" />
- <path
- style="opacity:0.6;fill:none;stroke:url(#linearGradient15711);stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0.5;display:inline"
- d="m 335.50002,42.500013 -10,0 0,10 L 335.5,52.5 l 0,-10"
+ transform="matrix(1.000048,0,0,0.999998,-0.01591645,12.000064)"
+ cx="330.5"
+ cy="35.5"
+ r="3.5" />
+ <path
+ style="display:inline;opacity:0.6;fill:none;stroke:url(#linearGradient15711);stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0.5;stroke-opacity:1"
+ d="m 335.50002,42.500013 h -10 v 10 L 335.5,52.5 v -10"
id="path10860"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient15713);stroke-width:1.16669464;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;display:inline"
+ <circle
+ style="display:inline;fill:none;stroke:url(#linearGradient15713);stroke-width:1.16669464;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1"
id="path10862"
- sodipodi:cx="330.5"
- sodipodi:cy="35.5"
- sodipodi:rx="3.5"
- sodipodi:ry="3.5"
- d="M 334,35.5 A 3.5,3.5 0 0 1 330.5,39 3.5,3.5 0 0 1 327,35.5 3.5,3.5 0 0 1 330.5,32 3.5,3.5 0 0 1 334,35.5 Z"
- transform="matrix(0.857099,0,0,0.857147,47.22893,17.071296)" />
+ transform="matrix(0.857099,0,0,0.857147,47.22893,17.071296)"
+ cx="330.5"
+ cy="35.5"
+ r="3.5" />
</g>
</g>
<g
id="ICON_CLIPUV_HLT">
<g
- style="opacity:0.2;display:inline"
+ style="display:inline;opacity:0.2"
id="g27524"
transform="translate(39,130)">
<rect
@@ -43600,48 +43618,42 @@
height="16"
width="16"
id="rect27526"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="translate(0.01612278,-12)"
id="g27528"
style="display:inline">
<rect
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;display:inline"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1"
id="rect27530"
width="12"
height="12"
x="324.50003"
y="41.500015" />
- <path
- sodipodi:type="arc"
- style="fill:url(#linearGradient27540);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ <circle
+ style="display:inline;fill:url(#linearGradient27540);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path27532"
- sodipodi:cx="330.5"
- sodipodi:cy="35.5"
- sodipodi:rx="3.5"
- sodipodi:ry="3.5"
- d="M 334,35.5 A 3.5,3.5 0 0 1 330.5,39 3.5,3.5 0 0 1 327,35.5 3.5,3.5 0 0 1 330.5,32 3.5,3.5 0 0 1 334,35.5 Z"
- transform="matrix(1.000048,0,0,0.999998,-0.01591645,12.000064)" />
+ transform="matrix(1.000048,0,0,0.999998,-0.01591645,12.000064)"
+ cx="330.5"
+ cy="35.5"
+ r="3.5" />
<path
inkscape:connector-curvature="0"
- style="opacity:0.6;fill:none;stroke:url(#linearGradient27542);stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0.5;display:inline"
- d="m 335.50002,42.500013 -10,0 0,10 L 335.5,52.5 l 0,-10"
+ style="display:inline;opacity:0.6;fill:none;stroke:url(#linearGradient27542);stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0.5;stroke-opacity:1"
+ d="m 335.50002,42.500013 h -10 v 10 L 335.5,52.5 v -10"
id="path27534"
sodipodi:nodetypes="ccc" />
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient27544);stroke-width:1.16669464;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;display:inline"
+ <circle
+ style="display:inline;fill:none;stroke:url(#linearGradient27544);stroke-width:1.16669464;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1"
id="path27536"
- sodipodi:cx="330.5"
- sodipodi:cy="35.5"
- sodipodi:rx="3.5"
- sodipodi:ry="3.5"
- d="M 334,35.5 A 3.5,3.5 0 0 1 330.5,39 3.5,3.5 0 0 1 327,35.5 3.5,3.5 0 0 1 330.5,32 3.5,3.5 0 0 1 334,35.5 Z"
- transform="matrix(0.857099,0,0,0.857147,47.22893,17.071296)" />
+ transform="matrix(0.857099,0,0,0.857147,47.22893,17.071296)"
+ cx="330.5"
+ cy="35.5"
+ r="3.5" />
</g>
</g>
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect31513"
width="16"
height="16"
@@ -43651,33 +43663,27 @@
transform="translate(19.016123,130)"
id="g10864"
style="display:inline">
- <path
+ <circle
transform="matrix(1.142871,0,0,1.142855,-27.218817,-5.0713453)"
- d="M 334,35.5 A 3.5,3.5 0 0 1 330.5,39 3.5,3.5 0 0 1 327,35.5 3.5,3.5 0 0 1 330.5,32 3.5,3.5 0 0 1 334,35.5 Z"
- sodipodi:ry="3.5"
- sodipodi:rx="3.5"
- sodipodi:cy="35.5"
- sodipodi:cx="330.5"
id="path10866"
- style="fill:url(#linearGradient15715);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.87499601;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;display:inline"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient15717);stroke-width:1.16669464;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;display:inline"
+ style="display:inline;fill:url(#linearGradient15715);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.87499601;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1"
+ cx="330.5"
+ cy="35.5"
+ r="3.5" />
+ <circle
+ style="display:inline;fill:none;stroke:url(#linearGradient15717);stroke-width:1.16669464;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1"
id="path10868"
- sodipodi:cx="330.5"
- sodipodi:cy="35.5"
- sodipodi:rx="3.5"
- sodipodi:ry="3.5"
- d="M 334,35.5 A 3.5,3.5 0 0 1 330.5,39 3.5,3.5 0 0 1 327,35.5 3.5,3.5 0 0 1 330.5,32 3.5,3.5 0 0 1 334,35.5 Z"
- transform="matrix(0.857099,0,0,0.857147,67.228993,5.071249)" />
+ transform="matrix(0.857099,0,0,0.857147,67.228993,5.071249)"
+ cx="330.5"
+ cy="35.5"
+ r="3.5" />
</g>
</g>
<g
id="ICON_SEQ_HISTOGRAM"
transform="translate(63,2)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect31549"
width="16"
height="16"
@@ -43685,8 +43691,8 @@
y="8" />
<path
sodipodi:nodetypes="ccccc"
- style="fill:url(#linearGradient31664);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 40.499999,22.499999 -12.999999,0 0,-12.999999 12.982741,0 0.01726,12.999999 -2e-6,0 z"
+ style="fill:url(#linearGradient31664);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 40.499999,22.499999 H 27.5 V 9.5 h 12.982741 l 0.01726,12.999999 z"
id="path31555"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -43695,12 +43701,12 @@
<path
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccc"
id="path31559"
- d="M 36.5,11.548223 36.5,19 l 0,-7.451777 z M 37.5,16 l 0,3 0,-3 z m -3,-2 0,5 0,-5 z m 1,0 0,5 0,-5 z m -3,1 0,4 0,-4 z m 6,0 0,4 0,-4 z m -5,1 0,3 0,-3 z m -3,1 0,2 0,-2 z m 9,1.578539 0,0.421461 0,-0.421461 z M 31.5,18 l 0,1 0,-1 z m -3,-0.52573 0,1.52573 0,-1.52573 z m 1,1.087098 0,0.438632 0,-0.438632 z"
- style="fill:none;stroke:url(#linearGradient31666);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ d="M 36.5,11.548223 V 19 Z M 37.5,16 v 3 z m -3,-2 v 5 z m 1,0 v 5 z m -3,1 v 4 z m 6,0 v 4 z m -5,1 v 3 z m -3,1 v 2 z m 9,1.578539 V 19 Z M 31.5,18 v 1 z m -3,-0.52573 V 19 Z m 1,1.087098 V 19 Z"
+ style="display:inline;fill:none;stroke:url(#linearGradient31666);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient31672);stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
- d="m 28.5,19.5 11,0"
+ style="display:inline;fill:none;stroke:url(#linearGradient31672);stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 28.5,19.5 h 11"
id="path31670"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
@@ -43709,7 +43715,7 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path31557"
- d="m 39.5,10.500004 -11,0 0,11 11.000001,0 -10e-7,-11 z"
+ d="m 39.5,10.500004 h -11 v 11 h 11.000001 z"
style="fill:none;stroke:url(#linearGradient31668);stroke-width:0.99999976px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
@@ -43724,7 +43730,7 @@
height="16"
width="16"
id="rect31427"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="translate(0.01612278,-16)"
id="g13262"
@@ -43740,12 +43746,12 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path13266"
- d="m 296.49991,14.5 -13.00008,0 0,-12.999999 13.00008,0 0,12.999999 z"
- style="fill:url(#linearGradient31646);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 296.49991,14.5 H 283.49983 V 1.500001 h 13.00008 z"
+ style="fill:url(#linearGradient31646);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:url(#linearGradient31648);stroke-width:1.00000036px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 284.50009,13.499998 0,-11.000007 11.00001,0"
+ d="M 284.50009,13.499998 V 2.499991 h 11.00001"
id="path13268"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -43754,8 +43760,8 @@
</g>
<path
id="path13270"
- style="fill:none;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
- d="m 310,34 -3.5,-1.5 0,-5 3.5,-1.5 3.5,1.5 0,5 -3.5,1.5 z"
+ style="display:inline;fill:none;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 310,34 -3.5,-1.5 v -5 l 3.5,-1.5 3.5,1.5 v 5 z"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<g
@@ -43764,26 +43770,26 @@
style="stroke-width:1.10000002;stroke-miterlimit:4;stroke-dasharray:none">
<path
id="path13274"
- style="fill:none;stroke:url(#radialGradient31650);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
- d="m 310,44 -3.5,-1.5 0,-5 3.5,-1.5 3.5,1.5 0,5 -3.5,1.5 z"
+ style="display:inline;fill:none;stroke:url(#radialGradient31650);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 310,44 -3.5,-1.5 v -5 l 3.5,-1.5 3.5,1.5 v 5 z"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccc"
- d="m 310,44 -3.5,-1.5 0,-5 3.5,-1.5 3.5,1.5 0,5 -3.5,1.5 z"
- style="fill:none;stroke:url(#radialGradient31652);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ d="m 310,44 -3.5,-1.5 v -5 l 3.5,-1.5 3.5,1.5 v 5 z"
+ style="display:inline;fill:none;stroke:url(#radialGradient31652);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path13276"
inkscape:connector-curvature="0" />
<path
id="path13278"
- style="fill:none;stroke:url(#radialGradient31654);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
- d="m 310,44 -3.5,-1.5 0,-5 3.5,-1.5 3.5,1.5 0,5 -3.5,1.5 z"
+ style="display:inline;fill:none;stroke:url(#radialGradient31654);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 310,44 -3.5,-1.5 v -5 l 3.5,-1.5 3.5,1.5 v 5 z"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccc"
- d="m 309.98388,44 -3.5,-1.5 0,-5 3.5,-1.5 3.5,1.5 0,5 -3.5,1.5 z"
- style="fill:none;stroke:url(#radialGradient31656);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ d="m 309.98388,44 -3.5,-1.5 v -5 l 3.5,-1.5 3.5,1.5 v 5 z"
+ style="display:inline;fill:none;stroke:url(#radialGradient31656);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path13280"
inkscape:connector-curvature="0" />
</g>
@@ -43798,12 +43804,12 @@
height="16"
width="16"
id="rect31676"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g31678">
<rect
ry="0"
- style="fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect31680"
width="13.016124"
height="12.953857"
@@ -43815,17 +43821,17 @@
height="11.046139"
width="11.000001"
id="rect31682"
- style="fill:url(#linearGradient31694);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00207269;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient31694);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00207269;marker:none;enable-background:accumulate"
ry="0" />
<path
- style="fill:url(#linearGradient31696);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 49,430 0,3 3,0 0,-3 -3,0 z m 3,3 0,3 3,0 0,-3 -3,0 z m 3,0 3,0 0,-3 -3,0 0,3 z m 3,0 0,3 3,0 0,-3 -3,0 z m 0,3 -3,0 0,3 3,0 0,-3 z m 0,3 0,3 3,0 0,-3 -3,0 z m -3,0 -3,0 0,3 3,0 0,-3 z m -3,0 0,-3 -3,0 0,3 3,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient31696);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 49,430 v 3 h 3 v -3 z m 3,3 v 3 h 3 v -3 z m 3,0 h 3 v -3 h -3 z m 3,0 v 3 h 3 v -3 z m 0,3 h -3 v 3 h 3 z m 0,3 v 3 h 3 v -3 z m -3,0 h -3 v 3 h 3 z m -3,0 v -3 h -3 v 3 z"
id="path31684"
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccc"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:url(#linearGradient31698);stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 60.517703,430.5 -11.017704,0 0,11 11.017704,0 0,-11"
+ d="M 60.517703,430.5 H 49.499999 v 11 h 11.017704 v -11"
id="path31686"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
@@ -43840,14 +43846,14 @@
height="16"
width="16"
id="rect31906"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="translate(-64.983874,-102.97791)"
id="g14768"
style="display:inline">
<path
- style="fill:url(#linearGradient31932);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline"
- d="m 348.18876,112.47791 8.33334,0 0,13 -11,0 -1e-5,-10 2.66667,-3 0,0 0,0 0,0 z"
+ style="display:inline;fill:url(#linearGradient31932);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
+ d="m 348.18876,112.47791 h 8.33334 v 13 h -11 l -1e-5,-10 z"
id="path14575"
sodipodi:nodetypes="cccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -43855,13 +43861,13 @@
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- style="fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 349,114 0,2 2,0 0,-2 -2,0 z m 2,2 0,2 2,0 0,-2 -2,0 z m 2,0 2,0 0,-2 -2,0 0,2 z m 0,2 0,2 2,0 0,-2 -2,0 z m 0,2 -2,0 0,2 2,0 0,-2 z m 0,2 0,2 2,0 0,-2 -2,0 z m -2,0 -2,0 0,2 2,0 0,-2 z m -2,0 0,-2 -2,0 0,2 2,0 z m 0,-2 2,0 0,-2 -2,0 0,2 z m 0,-2 0,-2 -2,0 0,2 2,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
+ d="m 349,114 v 2 h 2 v -2 z m 2,2 v 2 h 2 v -2 z m 2,0 h 2 v -2 h -2 z m 0,2 v 2 h 2 v -2 z m 0,2 h -2 v 2 h 2 z m 0,2 v 2 h 2 v -2 z m -2,0 h -2 v 2 h 2 z m -2,0 v -2 h -2 v 2 z m 0,-2 h 2 v -2 h -2 z m 0,-2 v -2 h -2 v 2 z"
id="rect14548"
inkscape:connector-curvature="0" />
<path
d="M -48.500031,260.50809 -46.5,260.5 l -3.1e-5,-1.99191"
- style="opacity:0.7;fill:none;stroke:#000000;stroke-width:0.76923829px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1;display:inline;filter:url(#filter31351)"
+ style="display:inline;opacity:0.7;fill:none;stroke:#000000;stroke-width:0.76923829px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1;filter:url(#filter31351)"
id="path14579"
sodipodi:nodetypes="ccc"
transform="matrix(1.2999758,0,0,1.2999988,409.54887,-222.56021)"
@@ -43870,28 +43876,28 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- style="fill:none;stroke:url(#linearGradient31934);stroke-width:0.99999988px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient31934);stroke-width:0.99999988px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
d="m 354.58387,114.50843 -7.05183,-0.0551 0.007,9.11382"
id="path14581"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
- d="m 345,116 4,0 0,-4 -4,4 z"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="m 345,116 h 4 v -4 z"
id="path14583"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
- d="m 346.5,117.00001 0,7.5 m 3.5,-11 5.5,0"
- style="fill:none;stroke:url(#linearGradient31936);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="m 346.5,117.00001 v 7.5 m 3.5,-11 h 5.5"
+ style="display:inline;fill:none;stroke:url(#linearGradient31936);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
id="path14585"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccc"
id="path14587"
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 345.5221,114.97791 0,10.5 11,0 0,-13 -8.5,0 -2.5,2.5 z"
+ style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 345.5221,114.97791 v 10.5 h 11 v -13 h -8.5 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -43902,7 +43908,7 @@
id="ICON_MOD_WAVE"
transform="translate(0,2)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect31964"
width="16"
height="16"
@@ -43915,14 +43921,14 @@
<path
sodipodi:nodetypes="cczcccc"
id="path12801"
- d="m 2349.9523,841.94199 c 2.0093,-2.0093 3.5347,-3.43269 5.544,-5.44199 3.25,-3.25 9,-2 9,2 -4.5,-2.5 -7.044,3.94199 -0.544,3.94199 l 0,1.5 -14,0 0,-2 z"
+ d="m 2349.9523,841.94199 c 2.0093,-2.0093 3.5347,-3.43269 5.544,-5.44199 3.25,-3.25 9,-2 9,2 -4.5,-2.5 -7.044,3.94199 -0.544,3.94199 v 1.5 h -14 z"
style="opacity:0.8;fill:url(#linearGradient38692);fill-opacity:1;fill-rule:evenodd;stroke:none"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#0b1728;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#0b1728;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 2349.5,842.49627 c 1.9988,-1.99875 3.9535,-4.05552 5.9523,-6.05428 3.25,-3.25 9.044,-1.94199 9.044,2.05801 -4.5,-2.5 -6.544,4.94199 0,4"
id="path12805"
sodipodi:nodetypes="cczc"
@@ -43937,7 +43943,7 @@
sodipodi:nodetypes="ccs"
id="path12807"
d="m 2351,842.51381 c 1.67,-1.67002 3.34,-3.34005 5.0101,-5.01008 2.1922,-2.31174 5.9422,-2.81174 7.4422,-0.0617"
- style="fill:none;stroke:url(#radialGradient13900);stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:url(#radialGradient13900);stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -43950,7 +43956,7 @@
height="16"
width="16"
id="rect32039"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g13125">
<g
@@ -43969,16 +43975,16 @@
<path
sodipodi:nodetypes="ccccc"
id="path12815"
- d="m 253.9851,154.06144 0.0148,-7.98461 -5.97312,2.67692 c 0,2.37037 -0.0149,8.01803 -0.0149,8.53832 l 5.97323,-3.23063 -1e-5,0 z"
- style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+ d="m 253.9851,154.06144 0.0148,-7.98461 -5.97312,2.67692 c 0,2.37037 -0.0149,8.01803 -0.0149,8.53832 l 5.97323,-3.23063 z"
+ style="display:inline;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
- style="fill:#c9c9c9;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
- d="m 242.06842,154.06144 0,-8.21538 5.95834,2.90769 0,8.30769 -5.95834,-3 z"
+ style="display:inline;fill:#c9c9c9;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="m 242.06842,154.06144 v -8.21538 l 5.95834,2.90769 v 8.30769 z"
id="path12817"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -43986,8 +43992,8 @@
inkscape:connector-curvature="0" />
<path
id="path12819"
- d="m 242.06842,146.21529 5.95834,-2.67692 5.95834,2.67692 -5.95834,2.53846 -5.95834,-2.53846 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+ d="m 242.06842,146.21529 5.95834,-2.67692 5.95834,2.67692 -5.95834,2.53846 z"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:nodetypes="ccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -44000,8 +44006,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path12821"
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 209.98388,21.9 -6.5,-3.5 0,-8.5 m 6.5,12 6.5,-3.5 0,-8.5 m 0,0 -6.5,-2.75 -6.5,2.75"
+ style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 209.98388,21.9 -6.5,-3.5 V 9.9 m 6.5,12 6.5,-3.5 V 9.9 m 0,0 -6.5,-2.75 -6.5,2.75"
inkscape:connector-curvature="0" />
</g>
<g
@@ -44011,32 +44017,26 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path12825"
- style="fill:url(#linearGradient13112);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:1.60044813;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.8412876,0,0,0.8414582,16.661932,139.91818)" />
- <path
+ style="fill:url(#linearGradient13112);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:1.60044813;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.8412876,0,0,0.8414582,16.661932,139.91818)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.654253,0,0,0.6543912,41.350498,161.99208)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient13114);stroke-width:2.28663301;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient13114);stroke-width:2.28663301;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path27909"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
</g>
@@ -44044,7 +44044,7 @@
id="ICON_FACESEL_HLT"
transform="translate(-1e-5,127)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect12049"
width="16"
height="16"
@@ -44054,14 +44054,14 @@
transform="translate(-336.01611,233)"
id="g22979">
<path
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 391.01611,155 -6.00001,2.125 0,7.65625 6.00001,3.21875 6,-3.21875 0,-7.65625 -6,-2.125 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 391.01611,155 -6.00001,2.125 v 7.65625 l 6.00001,3.21875 6,-3.21875 V 157.125 Z"
id="path12053"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path12063"
- d="m 397.01609,164.76992 0,-7.6298 -6,-2.14012 c 0,2.58362 8.3e-4,12.47266 8.3e-4,13.03976 l 5.99917,-3.26984 0,0 0,0 0,0 z"
+ d="m 397.01609,164.76992 v -7.6298 l -6,-2.14012 c 0,2.58362 8.3e-4,12.47266 8.3e-4,13.03976 z"
style="fill:url(#linearGradient17712);fill-opacity:1;fill-rule:evenodd;stroke:none"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -44070,15 +44070,15 @@
<path
sodipodi:nodetypes="ccccc"
id="path12065"
- d="m 385.01609,164.75 0,-7.5 6,-2.25 c 0,2.37037 0,12.47971 0,13 l -6,-3.25 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99989706;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 385.01609,164.75 v -7.5 l 6,-2.25 c 0,2.37037 0,12.47971 0,13 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99989706;marker:none;enable-background:accumulate"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
id="path12067"
- d="m 385.01658,157.14012 6.00034,-2.17997 5.99917,2.17997 -5.99975,2.72493 -5.99976,-2.72493 z"
+ d="m 385.01658,157.14012 6.00034,-2.17997 5.99917,2.17997 -5.99975,2.72493 z"
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:nodetypes="ccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
@@ -44088,12 +44088,12 @@
<path
sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccc"
id="path12835"
- d="m 385.01612,158 0,2 2,0 0,-2 -2,0 z m 2,2 0,2 2,0 0,-2 -2,0 z m 2,0 2,0 0,-0.5 -2,-0.5 0,1 z m 0,2 0,2 2,0 0,-2 -2,0 z m 0,2 -2,0 0,2 2,0 0,-2 z m 0,2 0,1 2,1 0,-2 -2,0 z m -2,-2 0,-2 -2,0 0,2 2,0 z"
- style="fill:#c81700;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ d="m 385.01612,158 v 2 h 2 v -2 z m 2,2 v 2 h 2 v -2 z m 2,0 h 2 v -0.5 l -2,-0.5 z m 0,2 v 2 h 2 v -2 z m 0,2 h -2 v 2 h 2 z m 0,2 v 1 l 2,1 v -2 z m -2,-2 v -2 h -2 v 2 z"
+ style="display:inline;fill:#c81700;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:url(#linearGradient17714);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 385.51625,164.52217 0,-7.03525 5.49627,-2.01007 5.49628,2.01007 0,7.03525 -5.49628,3.01511 -5.49627,-3.01511 z"
+ d="m 385.51625,164.52217 v -7.03525 l 5.49627,-2.01007 5.49628,2.01007 v 7.03525 l -5.49628,3.01511 z"
id="path12069"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
@@ -44104,7 +44104,7 @@
id="ICON_SPACE3"
transform="translate(19,-17)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect23020"
width="16"
height="16"
@@ -44117,11 +44117,11 @@
<path
sodipodi:nodetypes="ccccc"
id="path9432"
- d="m 330.5,240.5 5,5 -5,5 -5,-5 5,-5 z"
- style="fill:url(#linearGradient15436);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5"
+ d="m 330.5,240.5 5,5 -5,5 -5,-5 z"
+ style="fill:url(#linearGradient15436);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5"
+ style="fill:none;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1"
d="m 327,245.5 3.5,-3.5"
id="path9434"
sodipodi:nodetypes="cc"
@@ -44138,14 +44138,14 @@
height="16"
width="16"
id="rect23018"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
style="display:inline"
transform="translate(0.04112278,0.02506982)"
id="g12077">
<path
- style="fill:url(#linearGradient52027);fill-opacity:1;fill-rule:nonzero;stroke:#341b00;stroke-width:0.85000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5"
- d="m 330.5,240.5 5,5 -5,5 -5,-5 5,-5 z"
+ style="fill:url(#linearGradient52027);fill-opacity:1;fill-rule:nonzero;stroke:#341b00;stroke-width:0.85000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1"
+ d="m 330.5,240.5 5,5 -5,5 -5,-5 z"
id="path12079"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
@@ -44153,7 +44153,7 @@
sodipodi:nodetypes="cc"
id="path12081"
d="m 327,245.5 3.5,-3.5"
- style="fill:none;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5"
+ style="fill:none;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -44167,7 +44167,7 @@
height="16"
width="16"
id="rect23010"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="matrix(0,1,1,0,-56.06114,-164)"
id="g13176"
@@ -44177,20 +44177,20 @@
style="display:inline">
<path
id="path13178"
- d="m 392.53018,240.5312 -1,0 -4,3.9688 4,4.0312 1,0 0,-8 z"
- style="opacity:0.2;fill:none;stroke:#ff982a;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 392.53018,240.5312 h -1 l -4,3.9688 4,4.0312 h 1 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:none;stroke:#ff982a;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccc"
- style="opacity:0.7;fill:none;stroke:#ff982a;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 392.5,240.5312 -1,0 -4,3.9688 4,4.0312 1,0 0,-8 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:none;stroke:#ff982a;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 392.5,240.5312 h -1 l -4,3.9688 4,4.0312 h 1 z"
id="path13180"
inkscape:connector-curvature="0" />
<path
id="path13182"
- d="m 392.5,240.5312 -1,0 -4,3.9688 4,4.0312 1,0 0,-8 z"
- style="fill:url(#linearGradient52023);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient13639);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 392.5,240.5312 h -1 l -4,3.9688 4,4.0312 h 1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient52023);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient13639);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
@@ -44206,7 +44206,7 @@
id="ICON_PMARKER_ACT"
transform="translate(35,4.96982)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect23012"
width="16"
height="16"
@@ -44221,20 +44221,20 @@
style="display:inline">
<path
id="path13218"
- d="m 395.53018,243.5312 -4,-4 -9,4 9,4 4,-4 z"
- style="opacity:0.2;fill:none;stroke:#ff982a;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 395.53018,243.5312 -4,-4 -9,4 9,4 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:none;stroke:#ff982a;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
- style="opacity:0.75;fill:none;stroke:#ff982a;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 395.5,243.5312 -4,-4 -9,4 9,4 4,-4 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.75;fill:none;stroke:#ff982a;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 395.5,243.5312 -4,-4 -9,4 9,4 z"
id="path13220"
inkscape:connector-curvature="0" />
<path
id="path13222"
- d="m 391.5,239.5312 -9,4 9,4 4,-4 -4,-4 z"
- style="fill:url(#linearGradient52025);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient14661);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 391.5,239.5312 -9,4 9,4 4,-4 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient52025);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient14661);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
@@ -44255,7 +44255,7 @@
height="16"
width="16"
id="rect23014"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
style="display:inline"
inkscape:export-ydpi="90"
@@ -44265,20 +44265,20 @@
transform="matrix(0,1,1,0,-15.015077,-166)">
<path
sodipodi:nodetypes="ccccc"
- style="opacity:0.2;fill:none;stroke:#ff982a;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 395.53018,243.5312 -4,-4 -9,4 9,4 4,-4 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:none;stroke:#ff982a;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 395.53018,243.5312 -4,-4 -9,4 9,4 z"
id="path13228"
inkscape:connector-curvature="0" />
<path
id="path13230"
- d="m 395.53018,243.5312 -4,-4 -9,4 9,4 4,-4 z"
- style="opacity:0.75;fill:none;stroke:#ff982a;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 395.53018,243.5312 -4,-4 -9,4 9,4 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.75;fill:none;stroke:#ff982a;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
- style="fill:url(#linearGradient15993);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient15995);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 391.5,239.5312 -9,4 9,4 4,-4 -4,-4 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient15993);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient15995);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 391.5,239.5312 -9,4 9,4 4,-4 z"
id="path13232"
inkscape:connector-curvature="0" />
<path
@@ -44299,7 +44299,7 @@
height="16"
width="16"
id="rect23016"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="matrix(0,1,1,0,4.9849228,-166)"
id="g13236"
@@ -44309,8 +44309,8 @@
style="display:inline">
<path
id="path13238"
- d="m 391.5,239.5312 -9,4 9,4 4,-4 -4,-4 z"
- style="fill:url(#linearGradient15997);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 391.5,239.5312 -9,4 9,4 4,-4 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient15997);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
@@ -44331,7 +44331,7 @@
height="16"
width="16"
id="rect23112"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
style="display:inline"
inkscape:export-ydpi="90"
@@ -44342,7 +44342,7 @@
<path
sodipodi:nodetypes="cccccc"
style="fill:url(#linearGradient15854);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 392.5,240.5312 -1,0 -4,3.9688 4,4.0312 1,0 0,-8 z"
+ d="m 392.5,240.5312 h -1 l -4,3.9688 4,4.0312 h 1 z"
id="path11749"
inkscape:connector-curvature="0" />
<path
@@ -44358,31 +44358,31 @@
id="ICON_FF"
transform="translate(-316,25)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect23130"
width="16"
height="16"
x="364"
y="195" />
<g
- transform="translate(0.01612278,0)"
+ transform="translate(0.01612278)"
id="g10790"
style="display:inline">
<path
- style="fill:url(#linearGradient15681);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 364.48388,198.5 0,9 1,0 5,-3.75 0,3.75 1,0 5.01612,-3.71875 0,3.71875 2,0 0,-9 -2,0 0,3.71875 -5.01612,-3.71875 -1,0 0,3.75 -5,-3.75 -1,0 z"
+ style="fill:url(#linearGradient15681);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 364.48388,198.5 v 9 h 1 l 5,-3.75 v 3.75 h 1 L 376.5,203.78125 V 207.5 h 2 v -9 h -2 v 3.71875 L 371.48388,198.5 h -1 v 3.75 l -5,-3.75 z"
id="path10792"
sodipodi:nodetypes="ccccccccccccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path10794"
- d="m 365.48388,206.5 0,-6.75 4.25,3.25"
+ d="m 365.48388,206.5 v -6.75 l 4.25,3.25"
style="fill:none;stroke:url(#linearGradient11764);stroke-width:0.99999952px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:url(#linearGradient11762);stroke-width:0.99999952px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 371.48388,206.5 0,-6.75 4.5,3.25"
+ d="m 371.48388,206.5 v -6.75 l 4.5,3.25"
id="path10796"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
@@ -44390,7 +44390,7 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- style="fill:none;stroke:#ffffff;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#ffffff;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 377.23388,206.75 0.0161,-7.5"
id="path10798"
sodipodi:nodetypes="cc"
@@ -44398,8 +44398,8 @@
<path
sodipodi:nodetypes="ccccc"
id="path11760"
- d="m 377.98388,200 -1.25,0 0,-1 1.25,0 0,1 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+ d="m 377.98388,200 h -1.25 v -1 h 1.25 z"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -44413,7 +44413,7 @@
height="16"
width="16"
id="rect23132"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="translate(0.01597308,0.03124949)"
inkscape:export-ydpi="90"
@@ -44428,8 +44428,8 @@
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<path
- style="fill:url(#linearGradient15683);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 365.53351,198.46875 -1,0 0,9 1,0 5,-3.75 0,3.75755 1,0 5.00539,-3.71875 0,3.71875 1.99461,0 0,-9 -1.99461,0 0,3.71875 -5.00539,-3.71875 -1,0 0,3.74245 -5,-3.75 z"
+ style="fill:url(#linearGradient15683);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 365.53351,198.46875 h -1 v 9 h 1 l 5,-3.75 v 3.75755 h 1 l 5.00539,-3.71875 v 3.71875 h 1.99461 v -9 h -1.99461 v 3.71875 l -5.00539,-3.71875 h -1 v 3.74245 z"
id="path10804"
sodipodi:nodetypes="ccccccccccccccccc"
inkscape:connector-curvature="0" />
@@ -44437,10 +44437,10 @@
sodipodi:nodetypes="cc"
id="path10806"
d="m 369.28351,202.71875 -3.5,-2.75"
- style="fill:none;stroke:#ffffff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#ffffff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#ffffff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#ffffff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 375.28351,202.71875 -3.5,-2.75"
id="path10808"
sodipodi:nodetypes="cc"
@@ -44448,15 +44448,15 @@
<path
sodipodi:nodetypes="ccccc"
id="path10986"
- d="m 377.03351,199.9763 1.25,0 0,-1 -1.25,0 0,1 z"
+ d="m 377.03351,199.9763 h 1.25 v -1 h -1.25 z"
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
</g>
<path
sodipodi:nodetypes="cc"
id="path10810"
- d="m 385.18529,206.7263 0,-7.5"
- style="fill:none;stroke:#ffffff;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 385.18529,206.7263 v -7.5"
+ style="fill:none;stroke:#ffffff;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -44473,7 +44473,7 @@
height="16"
width="16"
id="rect23128"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
style="display:inline"
id="g10812"
@@ -44482,14 +44482,14 @@
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<path
- style="color:#000000;fill:url(#linearGradient37396-1);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.58802557px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 392.96689,239.5639 -0.56915,0 -4.43932,4.36665 0,1.13912 4.43932,4.36665 0.56915,0 0,-9.87242 0,0 0,0 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient37396-1);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.58802557px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 392.96689,239.5639 h -0.56915 l -4.43932,4.36665 v 1.13912 l 4.43932,4.36665 h 0.56915 z"
id="path10814"
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:url(#linearGradient11766);stroke-width:0.58802563px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 392.51157,248.2972 0,-7.97389 -4.09783,3.98695"
+ d="m 392.51157,248.2972 v -7.97389 l -4.09783,3.98695"
id="path10816"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
@@ -44500,14 +44500,14 @@
id="ICON_PAUSE"
transform="translate(-194,25)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect23134"
width="16"
height="16"
x="283"
y="195" />
<g
- transform="translate(0.01612278,0)"
+ transform="translate(0.01612278)"
id="g10818"
style="display:inline">
<g
@@ -44524,14 +44524,14 @@
height="3"
width="11.000029"
id="rect10822"
- style="fill:url(#linearGradient15687);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:url(#linearGradient15687);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
transform="matrix(0,1,1,0,0,0)" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path10824"
- d="m 287.5,199.27782 0,-8.77775 1,-7e-5"
+ d="m 287.5,199.27782 v -8.77775 l 1,-7e-5"
style="fill:none;stroke:url(#linearGradient15689);stroke-width:1.00000012px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
@@ -44541,7 +44541,7 @@
id="g10826">
<rect
transform="matrix(0,1,1,0,0,0)"
- style="fill:url(#linearGradient15691);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:url(#linearGradient15691);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect10828"
width="11.000029"
height="3"
@@ -44555,7 +44555,7 @@
<path
sodipodi:nodetypes="ccc"
style="fill:none;stroke:url(#linearGradient15693);stroke-width:1.00000012px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 287.5,199.27782 0,-8.77775 1,-7e-5"
+ d="m 287.5,199.27782 v -8.77775 l 1,-7e-5"
id="path10830"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -44569,7 +44569,7 @@
id="ICON_REC"
transform="translate(-318,25)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect23126"
width="16"
height="16"
@@ -44589,19 +44589,16 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path11903"
- style="fill:url(#linearGradient13543);fill-opacity:1;fill-rule:nonzero;stroke:#552200;stroke-width:1.77777624;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.847956,0,0,0.858716,59.65221,121.6111)" />
+ style="fill:url(#linearGradient13543);fill-opacity:1;fill-rule:nonzero;stroke:#552200;stroke-width:1.77777624;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.847956,0,0,0.858716,59.65221,121.6111)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
inkscape:export-ydpi="90"
@@ -44609,20 +44606,17 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
transform="matrix(0.784039,0,0,0.779055,-3.508124,71.29625)"
id="g11905"
- style="fill:none;stroke:url(#linearGradient15878);stroke-width:1.65010214;stroke-opacity:1;display:inline">
- <path
+ style="display:inline;fill:none;stroke:url(#linearGradient15878);stroke-width:1.65010214;stroke-opacity:1">
+ <circle
transform="matrix(0.780492,0,0,0.786646,68.5413,130.1431)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient13545);stroke-width:2.28401804;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient13545);stroke-width:2.28401804;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path11907"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
</g>
@@ -44634,7 +44628,7 @@
height="16"
width="16"
id="rect23008"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
style="display:inline"
transform="translate(-71.046377,45.90625)"
@@ -44643,23 +44637,23 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="g11015">
<path
- style="fill:url(#linearGradient15744);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 205.54638,177.59375 -1,0 0,9 1,0 5,-3.75 0,3.75 1,0 5,-3.75 0,-1.5 -5,-3.75 -1,0 0,3.75 -5,-3.75 z"
+ style="fill:url(#linearGradient15744);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 205.54638,177.59375 h -1 v 9 h 1 l 5,-3.75 v 3.75 h 1 l 5,-3.75 v -1.5 l -5,-3.75 h -1 v 3.75 z"
id="path11017"
sodipodi:nodetypes="ccccccccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path11019"
- d="m 205.54638,185.34375 0,-6.5 4.25,3.25"
- style="fill:none;stroke:url(#linearGradient10982);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 205.54638,185.34375 v -6.5 l 4.25,3.25"
+ style="fill:none;stroke:url(#linearGradient10982);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient10984);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 211.54638,185.34375 0,-6.5 4,3"
+ style="fill:none;stroke:url(#linearGradient10984);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 211.54638,185.34375 v -6.5 l 4,3"
id="path11021"
sodipodi:nodetypes="ccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -44673,7 +44667,7 @@
id="ICON_PREV_KEYFRAME"
transform="translate(-74,46)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect23226"
width="16"
height="16"
@@ -44688,15 +44682,15 @@
id="g11023">
<path
id="path11025"
- d="m 205.57862,177.59375 -1,0 0,9 1,0 5,-3.75 0,3.75 1,0 5,-3.75 0,-1.5 -5,-3.75 -1,0 0,3.75 -5,-3.75 z"
- style="fill:url(#linearGradient15746);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 205.57862,177.59375 h -1 v 9 h 1 l 5,-3.75 v 3.75 h 1 l 5,-3.75 v -1.5 l -5,-3.75 h -1 v 3.75 z"
+ style="fill:url(#linearGradient15746);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="ccccccccccccc"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- style="fill:none;stroke:#ffffff;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#ffffff;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 209.57862,181.84375 -4,-3"
id="path11027"
sodipodi:nodetypes="cc"
@@ -44708,7 +44702,7 @@
sodipodi:nodetypes="cc"
id="path11029"
d="m 215.57862,181.84375 -4,-3"
- style="fill:none;stroke:#ffffff;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#ffffff;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -44720,7 +44714,7 @@
height="16"
width="16"
id="rect10527"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
@@ -44728,60 +44722,48 @@
transform="matrix(1.1658027,0,0,1.1657997,-11.289717,-221.05607)"
id="g10530"
style="display:inline">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path23603"
- style="opacity:0.1;fill:none;stroke:#ffffff;stroke-width:5.47410154;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.629932,0,0,0.6236653,45.764188,149.53247)" />
- <path
+ style="opacity:0.1;fill:none;stroke:#ffffff;stroke-width:5.47410154;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
transform="matrix(0.629932,0,0,0.6236653,45.764188,149.53247)"
- sodipodi:type="arc"
- style="fill:none;stroke:#000000;stroke-width:2.25806689;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
+ transform="matrix(0.629932,0,0,0.6236653,45.764188,149.53247)"
+ style="fill:none;stroke:#000000;stroke-width:2.25806689;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path10532"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
<g
id="g11317">
- <path
+ <circle
transform="matrix(-0.5326189,-0.05995148,0.06070777,-0.5287352,192.0574,293.4132)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path11331"
- style="opacity:0.8;fill:url(#linearGradient11333);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.6060524;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.8;fill:url(#linearGradient11333);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.6060524;marker:none;enable-background:accumulate"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.4812861,0,0,0.4822895,65.395173,166.1609)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient10540);stroke-width:1.78041101;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient10540);stroke-width:1.78041101;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path10536"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
</g>
@@ -44794,7 +44776,7 @@
height="16"
width="16"
id="rect16267"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
transform="scale(-1,1)" />
<g
id="g28079">
@@ -44803,13 +44785,13 @@
style="opacity:0.4">
<path
id="path51537"
- d="m 300.5,270.5 5,4 0,1 2,0 0,-1 6,-4 1,0 0,-2 -2,0 0,1 -11,0 0,-1 -2,0 0,2 1,0 z"
+ d="m 300.5,270.5 5,4 v 1 h 2 v -1 l 6,-4 h 1 v -2 h -2 v 1 h -11 v -1 h -2 v 2 z"
style="fill:#ffffff;fill-opacity:0.70588235;fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccccccccccccccc"
- d="m 299.5,268.5 0,2 2,10e-6 0,-2 -2,-10e-6 z m 13,0 0,2 2,10e-6 0,-2 -2,-10e-6 z m -7,4.99999 0,2 2,10e-6 0,-2 -2,-10e-6 z m 7,-3.99999 -11,0 m -0.75,1 4.75,3.878 m 2.08359,0.122 5.66641,-4"
- style="fill:none;stroke:url(#linearGradient28077);stroke-width:0.99999952;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;display:inline"
+ d="m 299.5,268.5 v 2 l 2,10e-6 v -2 z m 13,0 v 2 l 2,10e-6 v -2 z m -7,4.99999 v 2 l 2,10e-6 v -2 z m 7,-3.99999 h -11 m -0.75,1 4.75,3.878 m 2.08359,0.122 5.66641,-4"
+ style="display:inline;fill:none;stroke:url(#linearGradient28077);stroke-width:0.99999952;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1"
id="path16283"
inkscape:connector-curvature="0" />
</g>
@@ -44818,8 +44800,8 @@
transform="translate(501,-139)">
<path
id="path16269"
- d="m -200,401 12,0 -6.4,7.99999 L -200,401 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#162d50;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m -200,401 h 12 l -6.4,7.99999 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#162d50;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="cccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -44827,7 +44809,7 @@
inkscape:connector-curvature="0" />
<path
id="path16271"
- d="m -199.75,401 11.75,0 -6.5,7.99999 L -199.75,401 z"
+ d="M -199.75,401 H -188 l -6.5,7.99999 z"
style="fill:url(#linearGradient28057);fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:nodetypes="cccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
@@ -44839,19 +44821,19 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path16273"
- d="m -189.5,401.5 -9.25,0 4.25,6.5"
- style="opacity:0.87999998;fill:none;stroke:url(#linearGradient22970);stroke-width:1.00000036px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline"
+ d="m -189.5,401.5 h -9.25 l 4.25,6.5"
+ style="display:inline;opacity:0.87999998;fill:none;stroke:url(#linearGradient22970);stroke-width:1.00000036px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
<rect
- style="fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;display:inline"
+ style="display:inline;fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1"
id="rect16275"
width="2.0172491"
height="2.0328345"
x="-201.51724"
y="399.46716" />
<rect
- style="fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;display:inline"
+ style="display:inline;fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1"
id="rect16285"
width="2.0172396"
height="2.0000157"
@@ -44863,7 +44845,7 @@
height="2.0000157"
width="2.0172396"
id="rect16287"
- style="fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;display:inline" />
+ style="display:inline;fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1" />
</g>
</g>
</g>
@@ -44871,7 +44853,7 @@
id="ICON_MOD_UVPROJECT"
transform="translate(0,-18.999939)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect28314"
width="16"
height="16"
@@ -44888,13 +44870,13 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
sodipodi:nodetypes="ccccc"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient24395);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m -33,272.25 0,-7 6,2.75 0,7.25 -6,-3 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient24395);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m -33,272.25 v -7 l 6,2.75 v 7.25 z"
id="path28322"
inkscape:connector-curvature="0" />
<path
id="path28324"
- d="m -33,272.25 0,-7 6,2.75 0,7.25 -6,-3 z"
+ d="m -33,272.25 v -7 l 6,2.75 v 7.25 z"
style="fill:url(#linearGradient28532);fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:nodetypes="ccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
@@ -44904,8 +44886,8 @@
<path
sodipodi:nodetypes="cccc"
id="path28326"
- d="m -27.25,274.75 0,-6.5 -5.5,-2.5 0,6.25"
- style="fill:none;stroke:url(#linearGradient28530);stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ d="m -27.25,274.75 v -6.5 l -5.5,-2.5 V 272"
+ style="display:inline;fill:none;stroke:url(#linearGradient28530);stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
<g
@@ -44913,7 +44895,7 @@
style="opacity:0.8"
transform="translate(0.25,0.25)">
<path
- style="opacity:0.4;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.4;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 280,285.25 5.5,-2.5"
id="path28410"
sodipodi:nodetypes="cc"
@@ -44922,7 +44904,7 @@
sodipodi:nodetypes="cc"
id="path28376"
d="m 280,285.25 5.5,-2.5"
- style="fill:none;stroke:#ffc655;stroke-width:1px;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1;display:inline"
+ style="display:inline;fill:none;stroke:#ffc655;stroke-width:1px;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
<g
@@ -44931,21 +44913,21 @@
transform="translate(0,-7.5)">
<path
sodipodi:nodetypes="cc"
- style="opacity:0.4;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.4;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 286.5,296 5.5,-3"
id="path28420"
inkscape:connector-curvature="0" />
<path
id="path28422"
d="m 286.5,296 5.5,-3"
- style="fill:#ff8080;fill-rule:evenodd;stroke:#ffc655;stroke-width:1px;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1;display:inline"
+ style="display:inline;fill:#ff8080;fill-rule:evenodd;stroke:#ffc655;stroke-width:1px;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
</g>
<path
sodipodi:nodetypes="ccccc"
- style="fill:none;stroke:#0b1728;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 279.99999,292.9999 0,-7 6,2.75004 0,7.25 -6,-3.00004 z"
+ style="fill:none;stroke:#0b1728;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 279.99999,292.9999 v -7 l 6,2.75004 v 7.25 z"
id="path28328"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -44957,12 +44939,12 @@
<path
id="path28398"
d="m 286.5,296 5.5,-3"
- style="opacity:0.4;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.4;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
- style="fill:#ff8080;fill-rule:evenodd;stroke:#ffc655;stroke-width:1px;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1;display:inline"
+ style="display:inline;fill:#ff8080;fill-rule:evenodd;stroke:#ffc655;stroke-width:1px;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1"
d="m 286.5,296 5.5,-3"
id="path28374"
inkscape:connector-curvature="0" />
@@ -44977,22 +44959,22 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
id="path28342"
- d="m 441,123.99996 0,-7 6,2.75004 0,7.25 -6,-3.00004 z"
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:#162d50;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ d="m 441,123.99996 v -7 l 6,2.75004 V 127 Z"
+ style="display:inline;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:#162d50;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path28344"
- d="m 441.00001,124.00006 0,-7 6,2.74994 c 0,2.37037 0,6.72971 0,7.25 l -6,-2.99994 z"
- style="fill:url(#linearGradient28474);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.09488797;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 441.00001,124.00006 v -7 l 6,2.74994 c 0,2.37037 0,6.72971 0,7.25 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient28474);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.09488797;marker:none;enable-background:accumulate"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- style="fill:#22467e;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- d="m 441,117 0,2.25 2,0 0,-1.25 -2,-1 z m 2,2 0,2 2,0 0,-2 -2,0 z m 2,2 0,2 2,0 0,-2 -2,0 z m 0,2 -2,0 0,2 2,0 0,-2 z m 0,2 0,1.25 2,1 0,-2.25 -2,0 z m -2,-2 0,-2 -2,0 0,2 2,0 z"
+ style="display:inline;fill:#22467e;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 441,117 v 2.25 h 2 V 118 Z m 2,2 v 2 h 2 v -2 z m 2,2 v 2 h 2 v -2 z m 0,2 h -2 v 2 h 2 z m 0,2 v 1.25 l 2,1 V 125 Z m -2,-2 v -2 h -2 v 2 z"
id="path28346"
sodipodi:nodetypes="cccccccccccccccccccccccccccccc"
inkscape:connector-curvature="0" />
@@ -45000,8 +44982,8 @@
<path
sodipodi:nodetypes="cccc"
id="path28348"
- d="m 446.75,126.5 0,-6.5 -5.5,-2.5 0,6.25 5.5,2.75 z"
- style="fill:none;stroke:url(#linearGradient28528);stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 446.75,126.5 V 120 l -5.5,-2.5 v 6.25 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient28528);stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -45016,7 +44998,7 @@
height="16"
width="16"
id="rect12620"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g12622">
<g
@@ -45024,20 +45006,20 @@
id="g12624"
style="opacity:0.7">
<path
- style="fill:none;stroke:#1a1a1a;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 89.95451,104.01774 5,9.5 5,-9.5 -10,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#1a1a1a;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 89.95451,104.01774 5,9.5 5,-9.5 z"
id="path12626"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
id="path12628"
- d="m 89.95451,103.98095 5,9.5 5,-9.5 -10,0 z"
- style="fill:none;stroke:#cccccc;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 89.95451,103.98095 5,9.5 5,-9.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#cccccc;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<rect
- style="fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect12630"
width="2.9998772"
height="3"
@@ -45053,9 +45035,9 @@
height="3"
width="2.9998772"
id="rect12632"
- style="fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect12634"
width="2.9998772"
height="3"
@@ -45069,10 +45051,10 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path12636"
d="m 577.00046,-180.99998 c -0.6694,0 -1.3388,1e-5 -2.0082,1e-5 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-10e-6 2.0082,-10e-6 0,-0.66939 0,-1.33878 0,-2.00817 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 572.00029,-170.99999 c -0.6694,0 -1.3388,1e-5 -2.0082,1e-5 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-1e-5 2.0082,-1e-5 0,-0.66939 0,-1.33878 0,-2.00817 z"
id="path12638"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -45080,7 +45062,7 @@
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 567.00059,-180.99998 c -0.6694,0 -1.3388,1e-5 -2.0082,1e-5 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-10e-6 2.0082,-10e-6 0,-0.66939 0,-1.33878 0,-2.00817 z"
id="path12640"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -45096,7 +45078,7 @@
id="g12564"
transform="translate(-517,612.99998)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect12566"
width="16"
height="16"
@@ -45112,15 +45094,15 @@
height="3"
width="2.9998772"
id="rect12570"
- style="fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#2b1600;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#2b1600;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:#2b1600;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 546.00017,-179.49999 5,9.5 5,-9.5 -10,0 z"
+ style="fill:none;stroke:#2b1600;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 546.00017,-179.49999 5,9.5 5,-9.5 z"
id="path12572"
sodipodi:nodetypes="cccc" />
<rect
- style="fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#2b1600;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#2b1600;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect12574"
width="2.9998772"
height="3"
@@ -45136,16 +45118,16 @@
height="3"
width="2.9998772"
id="rect12576"
- style="fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#2b1600;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#2b1600;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc"
id="path12578"
- d="m 546.00017,-179.53678 5,9.5 5,-9.5 -10,0 z"
- style="fill:none;stroke:#ffad55;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m 546.00017,-179.53678 5,9.5 5,-9.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffad55;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
- style="fill:#ffca91;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;fill:#ffca91;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 557.00046,-180.99998 c -0.6694,0 -1.3388,1e-5 -2.0082,1e-5 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-10e-6 2.0082,-10e-6 0,-0.66939 0,-1.33878 0,-2.00817 z"
id="path12580"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -45158,7 +45140,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path12582"
d="m 552.00029,-170.99999 c -0.6694,0 -1.3388,1e-5 -2.0082,1e-5 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-1e-5 2.0082,-1e-5 0,-0.66939 0,-1.33878 0,-2.00817 z"
- style="fill:#ffca91;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline" />
+ style="display:inline;fill:#ffca91;fill-opacity:1;fill-rule:nonzero;stroke:none" />
<path
inkscape:connector-curvature="0"
inkscape:export-ydpi="90"
@@ -45166,28 +45148,28 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path12584"
d="m 547.00059,-180.99998 c -0.6694,0 -1.3388,1e-5 -2.0082,1e-5 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-10e-6 2.0082,-10e-6 0,-0.66939 0,-1.33878 0,-2.00817 z"
- style="fill:#ffca91;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline" />
+ style="display:inline;fill:#ffca91;fill-opacity:1;fill-rule:nonzero;stroke:none" />
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:url(#linearGradient12602);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 546.00017,-179.53678 5,9.5 5,-9.5 -10,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient12602);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 546.00017,-179.53678 5,9.5 5,-9.5 z"
id="path12586"
sodipodi:nodetypes="cccc" />
<path
inkscape:connector-curvature="0"
id="path12588"
- d="m 555.5,-179.5 0,-1 1,0"
- style="opacity:0.8;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
+ d="m 555.5,-179.5 v -1 h 1"
+ style="display:inline;opacity:0.8;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
- style="opacity:0.8;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
- d="m 545.5,-179.5 0,-1 1,0"
+ style="display:inline;opacity:0.8;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 545.5,-179.5 v -1 h 1"
id="path12590" />
<path
inkscape:connector-curvature="0"
id="path12592"
- d="m 550.5,-169.5 0,-1 1,0"
- style="opacity:0.8;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
+ d="m 550.5,-169.5 v -1 h 1"
+ style="display:inline;opacity:0.8;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
@@ -45195,8 +45177,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path12594"
- d="m 555,-180.34409 -0.96003,1e-5 0,2.34418 2.21003,-1e-4 0.36569,-1 -1.61569,0 0,-1.34409 z"
- style="opacity:0.2;fill:#964e00;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline" />
+ d="m 555,-180.34409 -0.96003,1e-5 v 2.34418 l 2.21003,-1e-4 0.36569,-1 H 555 Z"
+ style="display:inline;opacity:0.2;fill:#964e00;fill-opacity:1;fill-rule:nonzero;stroke:none" />
<path
inkscape:connector-curvature="0"
inkscape:export-ydpi="90"
@@ -45204,11 +45186,11 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path12596"
d="m 552,-172 c -0.65334,0 -1.30669,1e-5 -1.96003,1e-5 0,0.33321 0,0.66641 0,0.99963 0.65334,0 1.30669,0 1.96003,0 0,-0.33322 0,-0.66643 0,-0.99964 z"
- style="opacity:0.5;fill:#964e00;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline" />
+ style="display:inline;opacity:0.5;fill:#964e00;fill-opacity:1;fill-rule:nonzero;stroke:none" />
<path
inkscape:connector-curvature="0"
- style="opacity:0.2;fill:#964e00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 547.03997,-180.34409 0.96003,1e-5 0,2.34418 -0.96003,-1.0001 0,-1.34409 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:#964e00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
+ d="m 547.03997,-180.34409 0.96003,1e-5 v 2.34418 L 547.03997,-179 Z"
id="path12598"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -45221,8 +45203,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path12600"
- d="m 545.65591,-179 1e-5,0.96003 2.34418,0 L 547,-179 l -1.34409,0 z"
- style="opacity:0.5;fill:#964e00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m 545.65591,-179 1e-5,0.96003 h 2.34418 L 547,-179 Z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#964e00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate" />
</g>
</g>
<rect
@@ -45231,7 +45213,7 @@
height="16"
width="16"
id="rect12777"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
transform="scale(1,-1)" />
</g>
<g
@@ -45243,14 +45225,14 @@
height="16"
width="16"
id="rect12012"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
transform="scale(-1,1)" />
<g
id="g12045">
<path
sodipodi:nodetypes="ccccc"
- style="opacity:0.9;fill:#552200;fill-opacity:1;fill-rule:evenodd;stroke:#2b1600;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 218,313.25 c -0.99997,-6.5 5.99997,-2.75 4.99994,-9.25 l 5.00003,2 c 1,7 -6,2 -5,10 L 218,313.25 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.9;fill:#552200;fill-opacity:1;fill-rule:evenodd;stroke:#2b1600;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 218,313.25 c -0.99997,-6.5 5.99997,-2.75 4.99994,-9.25 l 5.00003,2 c 1,7 -6,2 -5,10 z"
id="path12014"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -45261,14 +45243,14 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
id="path12016"
- d="m 218,313.25 c -0.99997,-6.5 5.99997,-3.25 4.99994,-9.25 l 5.00003,2 c 1,7 -6,2 -5,10 L 218,313.25 z"
- style="opacity:0.95;fill:#ff9f37;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 218,313.25 c -0.99997,-6.5 5.99997,-3.25 4.99994,-9.25 l 5.00003,2 c 1,7 -6,2 -5,10 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.95;fill:#ff9f37;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
- style="opacity:0.75;fill:url(#radialGradient12116);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.88812488px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 218,313.25 c -0.99997,-6.5 5.99997,-3.25 4.99994,-9.25 l 5.00003,2 c 1,7 -6,2 -5,10 L 218,313.25 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.75;fill:url(#radialGradient12116);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.88812488px;marker:none;enable-background:accumulate"
+ d="m 218,313.25 c -0.99997,-6.5 5.99997,-3.25 4.99994,-9.25 l 5.00003,2 c 1,7 -6,2 -5,10 z"
id="path12020"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -45279,13 +45261,13 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
id="path12018"
- d="m 218,313.25 c -0.99997,-6.5 5.99997,-3.25 4.99994,-9.25 l 5.00003,2 c 1,7 -6,2 -5,10 L 218,313.25 z"
- style="opacity:0.7;fill:url(#linearGradient12114);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.88812488px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 218,313.25 c -0.99997,-6.5 5.99997,-3.25 4.99994,-9.25 l 5.00003,2 c 1,7 -6,2 -5,10 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:url(#linearGradient12114);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.88812488px;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
- style="opacity:0.75;fill:none;stroke:url(#linearGradient12118);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.75;fill:none;stroke:url(#linearGradient12118);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 223.24994,304.5 4.25003,1.75 c 1,5.75 -5.50003,2 -5.08025,8.84783 l -4.04773,-2.23212"
id="path12022"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
@@ -45298,7 +45280,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
id="path12024"
d="m 223.24994,304.5 4.25003,1.75"
- style="opacity:0.8;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.8;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
</g>
@@ -45308,7 +45290,7 @@
transform="translate(-20.999998,128)">
<rect
transform="scale(-1,1)"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect12147"
width="16.000032"
height="16"
@@ -45326,14 +45308,14 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
id="path12153"
- d="m 358.99997,-216.75 c -0.99997,-6.5 6.00003,-2.75 5,-9.25 L 369,-224 c 1,7 -6,2 -5,10 l -5.00003,-2.75 z"
- style="fill:none;stroke:#1a1a1a;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 358.99997,-216.75 c -0.99997,-6.5 6.00003,-2.75 5,-9.25 L 369,-224 c 1,7 -6,2 -5,10 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#1a1a1a;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
- style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 358.99997,-216.75 C 358,-223.25 365,-220 363.99997,-226 L 369,-224 c 1,7 -6,2 -5,10 l -5.00003,-2.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
+ d="M 358.99997,-216.75 C 358,-223.25 365,-220 363.99997,-226 L 369,-224 c 1,7 -6,2 -5,10 z"
id="path12155"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -45341,8 +45323,8 @@
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
- style="opacity:0.7;fill:url(#linearGradient12213);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.88812488px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 358.99997,-216.75 C 358,-223.25 365,-220 363.99997,-226 L 369,-224 c 1,7 -6,2 -5,10 l -5.00003,-2.75 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:url(#linearGradient12213);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.88812488px;marker:none;enable-background:accumulate"
+ d="M 358.99997,-216.75 C 358,-223.25 365,-220 363.99997,-226 L 369,-224 c 1,7 -6,2 -5,10 z"
id="path12157"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -45353,8 +45335,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
id="path12159"
- d="M 358.99997,-216.75 C 358,-223.25 365,-220 363.99997,-226 L 369,-224 c 1,7 -6,2 -5,10 l -5.00003,-2.75 z"
- style="opacity:0.75;fill:url(#radialGradient12215);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.88812488px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 358.99997,-216.75 C 358,-223.25 365,-220 363.99997,-226 L 369,-224 c 1,7 -6,2 -5,10 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.75;fill:url(#radialGradient12215);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.88812488px;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
@@ -45363,12 +45345,12 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
id="path12161"
d="m 364.24984,-225.5 4.25016,1.75 c 1,5.75 -5.50003,2 -5.08381,8.85761 l -4.04561,-2.26888"
- style="fill:none;stroke:url(#linearGradient12217);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient12217);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 364.24997,-225.5 4.25003,1.75"
id="path12163"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
@@ -45380,7 +45362,7 @@
transform="translate(-399.2499,383.75)"
id="g12165">
<rect
- style="fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect12167"
width="2.9998772"
height="3"
@@ -45389,7 +45371,7 @@
ry="1.4999387"
rx="1.4999387" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
d="m 394.24987,-98.75 c -0.66667,0 -1.33332,1e-5 -2,1e-5 0,0.66939 0,1.33877 0,2.00817 0.66668,0 1.33333,-10e-6 2,-10e-6 0,-0.66939 0,-1.33878 0,-2.00817 z"
id="path12169"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -45408,18 +45390,18 @@
height="3"
width="2.9998772"
id="rect12173"
- style="fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path12175"
d="m 395.24974,-97.75 c -0.66667,0 -1.33332,1e-5 -2,1e-5 0,0.666663 0,1.333317 0,1.99999 0.66668,0 1.33333,-1e-5 2,-1e-5 0,-0.666663 0,-1.333327 0,-1.99999 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<path
- style="opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
d="m -11.00003,286 c -0.66668,0 -1.33332,0 -2,0 0,-0.33334 0,-0.66666 0,-1 0.66668,0 1.33332,0 2,0 0,0.33334 0,0.66667 0,1 z"
id="path12177"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -45431,8 +45413,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path12179"
- d="m -7.00003,285.53933 c -0.33334,0 -0.66666,10e-6 -1,10e-6 0,0.82281 0,1.64561 0,2.46844 0.33334,0 0.66666,-1e-5 1,-1e-5 0,-0.82282 0,-1.64562 0,-2.46844 l 0,0 0,0 0,0 z"
- style="opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -7.00003,285.53933 c -0.33334,0 -0.66666,10e-6 -1,10e-6 0,0.82281 0,1.64561 0,2.46844 0.33334,0 0.66666,-1e-5 1,-1e-5 0,-0.82282 0,-1.64562 0,-2.46844 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
@@ -45440,10 +45422,10 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path12187"
d="m -9.972188,286 c -0.342621,0 -0.685221,0 -1.027842,0 0,-0.66873 0,-1.33742 0,-2.00616 0.342621,0 0.685221,0 1.027842,0 0,0.66874 0,1.33745 0,2.00616 z"
- style="opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
d="m -6.000162,287 c -0.33334,0 -0.66666,0 -1,0 0,0.33428 0,0.66856 0,1.00284 0.33334,0 0.66666,0 1,0 0,-0.33428 0,-0.66856 0,-1.00284 z"
id="path12239"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -45461,17 +45443,17 @@
height="16"
width="16"
id="rect28219"
- style="opacity:0;fill:#999999;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999875;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#999999;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999875;marker:none;enable-background:accumulate" />
<g
id="g24279">
<rect
- transform="matrix(1,5.257811e-6,0,1,0,0)"
+ transform="skewY(3.0125038e-4)"
y="261.49863"
x="258.5"
height="7.007431"
width="6.9999733"
id="rect28121"
- style="fill:url(#linearGradient24272);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;display:inline"
+ style="display:inline;fill:url(#linearGradient24272);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
@@ -45489,13 +45471,13 @@
height="7.1213336"
width="7.000011"
id="rect11482"
- style="fill:url(#linearGradient12305);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00755596;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;display:inline"
+ style="display:inline;fill:url(#linearGradient12305);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00755596;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<path
style="opacity:0.8;fill:none;stroke:#ffffff;stroke-width:1.00755763px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 184.49992,8.2651727 0,5.0306663 5,0.04519"
+ d="m 184.49992,8.2651727 v 5.0306663 l 5,0.04519"
id="path11484"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -45510,7 +45492,7 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- style="fill:url(#linearGradient12307);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.90680158;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;display:inline"
+ style="display:inline;fill:url(#linearGradient12307);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.90680158;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1"
id="rect11474"
width="6.9999948"
height="7.1137514"
@@ -45522,7 +45504,7 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path11476"
- d="m 184.49993,8.3103653 -1e-5,5.0230827 5,0"
+ d="m 184.49993,8.3103653 -1e-5,5.0230827 h 5"
style="opacity:0.8;fill:none;stroke:#ffffff;stroke-width:1.00755763px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
@@ -45532,17 +45514,17 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- style="fill:url(#linearGradient24277);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;display:inline"
+ style="display:inline;fill:url(#linearGradient24277);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1"
id="rect24275"
width="6.8437233"
height="6.8198147"
x="258.65625"
y="261.68613"
- transform="matrix(1,5.257811e-6,0,1,0,0)" />
+ transform="skewY(3.0125038e-4)" />
<path
sodipodi:nodetypes="ccccc"
style="opacity:0.8;fill:none;stroke:url(#linearGradient24268);stroke-width:1.00000036px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 259.5,267.5 0,-5 5,0 0,5 -5,0 z"
+ d="m 259.5,267.5 v -5 h 5 v 5 z"
id="path28123"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -45553,15 +45535,15 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path12295"
- d="m 266.5,265.5 0,3.94801 -4,0"
- style="opacity:0.2;fill:none;stroke:#162d50;stroke-width:1.00000036px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline"
+ d="m 266.5,265.5 v 3.94801 h -4"
+ style="display:inline;opacity:0.2;fill:none;stroke:#162d50;stroke-width:1.00000036px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
</g>
<g
id="ICON_FILTER">
<rect
- style="opacity:0;fill:#ffaaaa;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ffaaaa;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate"
id="rect11420"
width="16"
height="16"
@@ -45576,8 +45558,8 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc"
id="path11422"
- d="m 412,73.5 c -4.5,0 -7.25,0.75 -5.75,2.5 l 4.25,4.5 0,6.25 3,-2 0,-4.25 c 1.48333,-1.72541 2.75638,-2.81017 4.25,-4.5 1.5,-1.75 -1.25,-2.5 -5.75,-2.5 z"
- style="fill:url(#linearGradient16039);fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ d="m 412,73.5 c -4.5,0 -7.25,0.75 -5.75,2.5 l 4.25,4.5 v 6.25 l 3,-2 V 80.5 c 1.48333,-1.72541 2.75638,-2.81017 4.25,-4.5 1.5,-1.75 -1.25,-2.5 -5.75,-2.5 z"
+ style="fill:url(#linearGradient16039);fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="csssc"
@@ -45587,13 +45569,13 @@
<path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient16031);fill-rule:evenodd;stroke:none"
- d="m 410.89062,80.47656 0,5.75 2.20704,-1.585938 0,-4.164062 -0.40829,0 -1.79875,0 z"
+ d="m 410.89062,80.47656 v 5.75 l 2.20704,-1.585938 V 80.47656 h -0.40829 z"
id="path11426"
sodipodi:nodetypes="cccccc" />
<path
inkscape:connector-curvature="0"
style="opacity:0.15;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 412.5,85.25 0,-4.25"
+ d="M 412.5,85.25 V 81"
id="path11428"
sodipodi:nodetypes="cc" />
<path
@@ -45612,7 +45594,7 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
id="path12238"
- d="m 411.27412,80.5 2.13816,0"
+ d="m 411.27412,80.5 h 2.13816"
style="opacity:0.15;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
</g>
</g>
@@ -45624,7 +45606,7 @@
inkscape:export-ydpi="90"
style="display:inline">
<rect
- style="opacity:0;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;opacity:0;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="rect17377"
width="16"
height="16"
@@ -45633,30 +45615,30 @@
<g
transform="translate(73,-319.5)"
id="g17379"
- style="fill:#ffcc00;stroke:#000000;stroke-width:1.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;display:inline">
+ style="display:inline;fill:#ffcc00;stroke:#000000;stroke-width:1.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none">
<path
- style="fill:none;stroke:#2b1600;stroke-width:1.20000005;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m -169,233 0,1 1,0 0,10 -1,0 0,1 4,0 0,-1 -1,0 0,-4 3,0 0,1 1,0 0,-3 -1,0 0,1 -3,0 0,-5 5,0 0,1 1,0 0,-2 -8,0 -1,0 z"
+ style="fill:none;stroke:#2b1600;stroke-width:1.20000005;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m -169,233 v 1 h 1 v 10 h -1 v 1 h 4 v -1 h -1 v -4 h 3 v 1 h 1 v -3 h -1 v 1 h -3 v -5 h 5 v 1 h 1 v -2 h -8 z"
transform="translate(262.99997,326)"
id="rect17381"
sodipodi:nodetypes="cccccccccccccccccccccccc"
inkscape:connector-curvature="0" />
</g>
<g
- style="fill:#ffcc00;display:inline"
+ style="display:inline;fill:#ffcc00"
id="g17395"
transform="translate(73,-319.5)">
<path
style="fill:url(#linearGradient13699)"
- d="m -169,233 0,1 1,0 0,10 -1,0 0,1 4,0 0,-1 -1,0 0,-4 3,0 0,1 1,0 0,-3 -1,0 0,1 -3,0 0,-5 5,0 0,1 1,0 0,-2 -8,0 -1,0 z"
+ d="m -169,233 v 1 h 1 v 10 h -1 v 1 h 4 v -1 h -1 v -4 h 3 v 1 h 1 v -3 h -1 v 1 h -3 v -5 h 5 v 1 h 1 v -2 h -8 z"
id="rect17397"
sodipodi:nodetypes="cccccccccccccccccccccccc"
transform="translate(262.99997,326)"
inkscape:connector-curvature="0" />
</g>
<path
- style="opacity:0.85;fill:#ffffff;display:inline"
- d="m 198,304 0,1 0.5,0 0,-1 -0.5,0 z m 1,1 0,10 0.65625,0 0,-10 L 199,305 z m 7,0 0,1 0.5,0 0,-1 -0.5,0 z m -2,4 0,1 0.5,0 0,-1 -0.5,0 z m 0,2 0,1 0.5,0 0,-1 -0.5,0 z m -6,4 0,1 0.5,0 0,-1 -0.5,0 z"
+ style="display:inline;opacity:0.85;fill:#ffffff"
+ d="m 198,304 v 1 h 0.5 v -1 z m 1,1 v 10 h 0.65625 v -10 z m 7,0 v 1 h 0.5 v -1 z m -2,4 v 1 h 0.5 v -1 z m 0,2 v 1 h 0.5 v -1 z m -6,4 v 1 h 0.5 v -1 z"
id="path17411"
sodipodi:nodetypes="cccccccccccccccccccccccccccccc"
transform="translate(-31.000031,-64.5)"
@@ -45671,56 +45653,56 @@
height="16"
width="16"
id="rect14146"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
- transform="translate(36,0)"
+ transform="translate(36)"
id="g14148">
<path
sodipodi:nodetypes="cc"
id="path14151"
d="m -187,192 4,-4"
- style="fill:none;stroke:#162d50;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#162d50;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccc"
- d="m -191,198 0.76562,0.21876 4.73438,-4.71876 0,-3 -3,0 -4,4 -0.75,0.75 0.25,0.75 2,2 z"
- style="fill:url(#linearGradient14167);fill-opacity:1;fill-rule:evenodd;stroke:#162d50;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m -191,198 0.76562,0.21876 L -185.5,193.5 v -3 h -3 l -4,4 -0.75,0.75 0.25,0.75 z"
+ style="fill:url(#linearGradient14167);fill-opacity:1;fill-rule:evenodd;stroke:#162d50;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path14153"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
id="path14155"
d="m -190.5,197.5 -2,-2"
- style="opacity:0.8;fill:none;stroke:#ffffff;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.8;fill:none;stroke:#ffffff;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccccccccc"
id="path14157"
- d="m -179.48388,187.51562 c 2.75,-1.75 -1.25,-5.75 -3,-3 L -183,186.5 l -1.48388,0.0156 -0.26612,0.73438 -0.73388,0.26562 0.98388,-0.0156 0,1 1,1 1,0 0.0161,1.01562 0.23388,-0.76562 0.76612,-0.23438 L -181.5,188 l 2.01612,-0.48438 z"
- style="fill:url(#linearGradient14169);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m -179.48388,187.51562 c 2.75,-1.75 -1.25,-5.75 -3,-3 L -183,186.5 l -1.48388,0.0156 -0.26612,0.73438 -0.73388,0.26562 L -184.5,187.5 v 1 l 1,1 h 1 l 0.0161,1.01562 0.23388,-0.76562 0.76612,-0.23438 L -181.5,188 Z"
+ style="fill:url(#linearGradient14169);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient14171);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:url(#linearGradient14171);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m -186.5,191.5 2,-2"
id="path14159"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient14173);fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m -180,187.5 c 2.49911,-1.20238 -0.79146,-5.05796 -2.25,-2.75 l -0.75,1.75 -1.25,0.25 -0.75,0.75 2.75,2.75 0.75,-1 0,-1.25 1.5,-0.5 z"
+ d="m -180,187.5 c 2.49911,-1.20238 -0.79146,-5.05796 -2.25,-2.75 l -0.75,1.75 -1.25,0.25 -0.75,0.75 2.75,2.75 0.75,-1 V 188 Z"
id="path14161"
sodipodi:nodetypes="ccccccccc"
inkscape:connector-curvature="0" />
<path
id="path14163"
d="M -180.23388,184.53124 C -181.75937,183.83967 -182,185 -182.5,186.75 l -1.98388,0.53124"
- style="opacity:0.8;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.8;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
- style="opacity:0.85;fill:none;stroke:#ffffff;stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m -192.5,195.5 4.26612,-4.23438 1.75,0 2,-2"
+ style="opacity:0.85;fill:none;stroke:#ffffff;stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m -192.5,195.5 4.26612,-4.23438 h 1.75 l 2,-2"
id="path14165"
inkscape:connector-curvature="0" />
</g>
@@ -45729,7 +45711,7 @@
id="ICON_MATCUBE"
transform="translate(0,2)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect17322"
width="16"
height="16"
@@ -45741,14 +45723,14 @@
<path
sodipodi:nodetypes="ccccccc"
id="path17326"
- d="m -55,358.25 -6,-2.25 -6,2.25 0,7.5 6,3.25 6,-3.25 0,-7.5 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m -55,358.25 -6,-2.25 -6,2.25 v 7.5 l 6,3.25 6,-3.25 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path17328"
- d="m -55,365.75 0,-7.5 -6,2.75 c 0,2.58363 8.34e-4,7.47325 8.34e-4,8.04035 L -55,365.75 z"
- style="fill:url(#linearGradient17337);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89207077px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -55,365.75 v -7.5 l -6,2.75 c 0,2.58363 8.34e-4,7.47325 8.34e-4,8.04035 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient17337);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89207077px;marker:none;enable-background:accumulate"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -45756,7 +45738,7 @@
<path
sodipodi:nodetypes="ccccc"
style="fill:#c9c9c9;fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m -67,365.75 0,-7.5 6,2.75 8.34e-4,8.04035 L -67,365.75 z"
+ d="m -67,365.75 v -7.5 l 6,2.75 8.34e-4,8.04035 z"
id="path17330"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -45764,7 +45746,7 @@
inkscape:connector-curvature="0" />
<path
id="path17332"
- d="m -67,358.25 6,-2.25 6,2.25 -6,2.75 -6,-2.75 z"
+ d="m -67,358.25 6,-2.25 6,2.25 -6,2.75 z"
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:nodetypes="ccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
@@ -45773,7 +45755,7 @@
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:url(#linearGradient17339);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="M -66.499841,365.52276 -66.5,358.5 l 5.5,-2 5.5,2 0,7 -5.5,3 -5.499841,-2.97724 z"
+ d="M -66.499841,365.52276 -66.5,358.5 l 5.5,-2 5.5,2 v 7 l -5.5,3 z"
id="path17334"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
@@ -45790,7 +45772,7 @@
height="16"
width="16"
id="rect17612"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g17614">
<rect
@@ -45799,15 +45781,15 @@
height="2"
width="8"
id="rect17616"
- style="fill:none;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:2;marker:none;enable-background:accumulate" />
<g
transform="translate(191.9999,212.02134)"
id="g17618"
style="display:inline">
<path
sodipodi:nodetypes="ccccc"
- style="fill:url(#linearGradient17656);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 16.499049,83.47866 -12.999056,0 -10e-8,-12.97866 13.0114221,0 -0.01237,12.97866 4e-6,0 z"
+ style="fill:url(#linearGradient17656);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 16.499049,83.47866 H 3.499993 L 3.4999929,70.5 H 16.511415 l -0.01237,12.97866 z"
id="path17620"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -45815,7 +45797,7 @@
inkscape:connector-curvature="0" />
</g>
<rect
- style="fill:none;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
id="rect17622"
width="8"
height="2"
@@ -45827,20 +45809,20 @@
height="12"
width="12.000107"
id="rect17624"
- style="opacity:0.1;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;marker:none;enable-background:accumulate" />
<g
id="g17626"
transform="translate(-31.00024,484.0498)">
<path
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
- d="m 237.5,-198.52846 0,1 -8.99987,0"
+ d="m 237.5,-198.52846 v 1 h -8.99987"
id="path17628"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
id="path17630"
- d="m 228.55567,-198.51423 8.88878,0"
+ d="m 228.55567,-198.51423 h 8.88878"
style="fill:none;stroke:#4d4d4d;stroke-width:0.99999994px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
<g
@@ -45848,7 +45830,7 @@
transform="translate(-16.999997,0.9739989)">
<rect
transform="scale(-1,1)"
- style="fill:#d7e3f4;fill-opacity:1;fill-rule:evenodd;stroke:#5f8dd3;stroke-width:0.99999982;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#d7e3f4;fill-opacity:1;fill-rule:evenodd;stroke:#5f8dd3;stroke-width:0.99999982;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect17634"
width="2"
height="3.0120413"
@@ -45856,13 +45838,13 @@
y="-200.474" />
<path
id="path17636"
- d="m 251.49999,-197.47154 2,0 0,-3"
+ d="m 251.49999,-197.47154 h 2 v -3"
style="opacity:0.45;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
<path
style="opacity:0.1;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 251.99999,-196.47154 2.5,0 0,-3.5"
+ d="m 251.99999,-196.47154 h 2.5 v -3.5"
id="path17638"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
@@ -45874,7 +45856,7 @@
<path
sodipodi:nodetypes="ccc"
id="path17642"
- d="m 237.5,-192.60425 0,1 -8.99987,0.026"
+ d="m 237.5,-192.60425 v 1 l -8.99987,0.026"
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
@@ -45892,19 +45874,19 @@
height="2.9940825"
width="2.0000002"
id="rect17648"
- style="fill:#d7e3f4;fill-opacity:1;fill-rule:evenodd;stroke:#5f8dd3;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#d7e3f4;fill-opacity:1;fill-rule:evenodd;stroke:#5f8dd3;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
transform="scale(-1,1)" />
<path
id="path17650"
- d="m 249.49999,-191.52134 2,0 0,-3"
- style="opacity:0.45;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="m 249.49999,-191.52134 h 2 v -3"
+ style="display:inline;opacity:0.45;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path17652"
- d="m 250.01459,-190.52134 2.5,0 0,-3.5"
- style="opacity:0.1;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="m 250.01459,-190.52134 h 2.5 v -3.5"
+ style="display:inline;opacity:0.1;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -45914,8 +45896,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path17654"
- d="m 196.4999,294.5 0.0303,-11 11.01349,0 -0.0303,11 -11.01349,0 z"
- style="opacity:0.8;fill:none;stroke:url(#linearGradient17658);stroke-width:0.99999976px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline"
+ d="m 196.4999,294.5 0.0303,-11 h 11.01349 l -0.0303,11 z"
+ style="display:inline;opacity:0.8;fill:none;stroke:url(#linearGradient17658);stroke-width:0.99999976px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -45943,7 +45925,7 @@
height="9.0127392"
width="9.0127354"
id="rect16878"
- style="opacity:0.3;fill:none;stroke:url(#linearGradient12658);stroke-width:1.00002468;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="opacity:0.3;fill:none;stroke:url(#linearGradient12658);stroke-width:1.00002468;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -45953,14 +45935,14 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- style="opacity:0.4;fill:none;stroke:url(#linearGradient12655);stroke-width:1.00002468;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="opacity:0.4;fill:none;stroke:url(#linearGradient12655);stroke-width:1.00002468;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect16880"
width="9.0127354"
height="9.0127392"
x="-269.51276"
y="-482.5"
ry="0.83038348"
- transform="scale(-1,-1)" />
+ transform="scale(-1)" />
</g>
<g
id="ICON_CHECKBOX_HLT"
@@ -45969,7 +45951,7 @@
inkscape:export-ydpi="90"
transform="translate(0,128.00001)">
<g
- transform="translate(20.999991,0)"
+ transform="translate(20.999991)"
id="g13503">
<rect
inkscape:export-ydpi="90"
@@ -45990,7 +45972,7 @@
height="9.0127392"
width="9.0127354"
id="rect13507"
- style="opacity:0.3;fill:none;stroke:url(#linearGradient13511);stroke-width:1.00002468;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="opacity:0.3;fill:none;stroke:url(#linearGradient13511);stroke-width:1.00002468;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -46000,14 +45982,14 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- style="opacity:0.4;fill:none;stroke:url(#linearGradient13513);stroke-width:1.00002468;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="opacity:0.4;fill:none;stroke:url(#linearGradient13513);stroke-width:1.00002468;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect13509"
width="9.0127354"
height="9.0127392"
x="-269.51276"
y="-482.5"
ry="0.83038348"
- transform="scale(-1,-1)" />
+ transform="scale(-1)" />
</g>
<path
d="m 283.5,478.5 1.99999,2 m 3.75,-4.75 c -1.28654,1.14367 -2.78042,2.75628 -3.75,4.75"
@@ -46027,57 +46009,45 @@
height="16"
width="16"
id="rect13517"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g13519">
- <path
+ <circle
transform="matrix(1.4256767,0,0,1.4314068,-320.1963,68.175135)"
- d="M 333.29445,35.5 A 2.7944512,2.7944512 0 0 1 330.5,38.294451 2.7944512,2.7944512 0 0 1 327.70555,35.5 2.7944512,2.7944512 0 0 1 330.5,32.705549 2.7944512,2.7944512 0 0 1 333.29445,35.5 Z"
- sodipodi:ry="2.7944512"
- sodipodi:rx="2.7944512"
- sodipodi:cy="35.5"
- sodipodi:cx="330.5"
id="path13521"
- style="fill:#e6e6e6;fill-opacity:0.25490196;fill-rule:nonzero;stroke:none;display:inline"
- sodipodi:type="arc" />
- <path
+ style="display:inline;fill:#e6e6e6;fill-opacity:0.25490196;fill-rule:nonzero;stroke:none"
+ cx="330.5"
+ cy="35.5"
+ r="2.7944512" />
+ <circle
transform="matrix(1.2885487,0,0,1.2885617,-274.87525,73.246084)"
- d="M 334,35.5 A 3.5,3.5 0 0 1 330.5,39 3.5,3.5 0 0 1 327,35.5 3.5,3.5 0 0 1 330.5,32 3.5,3.5 0 0 1 334,35.5 Z"
- sodipodi:ry="3.5"
- sodipodi:rx="3.5"
- sodipodi:cy="35.5"
- sodipodi:cx="330.5"
id="path13523"
- style="opacity:0.4;fill:none;stroke:url(#linearGradient13527);stroke-width:0.77606368;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;display:inline"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="opacity:0.6;fill:none;stroke:url(#linearGradient13529);stroke-width:0.77608043;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;display:inline"
+ style="display:inline;opacity:0.4;fill:none;stroke:url(#linearGradient13527);stroke-width:0.77606368;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1"
+ cx="330.5"
+ cy="35.5"
+ r="3.5" />
+ <circle
+ style="display:inline;opacity:0.6;fill:none;stroke:url(#linearGradient13529);stroke-width:0.77608043;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1"
id="path13525"
- sodipodi:cx="330.5"
- sodipodi:cy="35.5"
- sodipodi:rx="3.5"
- sodipodi:ry="3.5"
- d="M 334,35.5 A 3.5,3.5 0 0 1 330.5,39 3.5,3.5 0 0 1 327,35.5 3.5,3.5 0 0 1 330.5,32 3.5,3.5 0 0 1 334,35.5 Z"
- transform="matrix(-1.288521,0,0,-1.2885339,576.8463,164.73299)" />
+ transform="matrix(-1.288521,0,0,-1.2885339,576.8463,164.73299)"
+ cx="330.5"
+ cy="35.5"
+ r="3.5" />
</g>
</g>
- <path
+ <circle
transform="matrix(0.8543143,0,0,0.8543231,3.66123,596.67148)"
- d="m 334,35.5 a 3.5,3.5 0 1 1 -7,0 3.5,3.5 0 1 1 7,0 z"
- sodipodi:ry="3.5"
- sodipodi:rx="3.5"
- sodipodi:cy="35.5"
- sodipodi:cx="330.5"
id="path15120"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- sodipodi:type="arc" />
+ style="display:inline;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ cx="330.5"
+ cy="35.5"
+ r="3.5" />
</g>
<g
id="ICON_MOD_EDGESPLIT"
transform="translate(0,2)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect18695"
width="16"
height="16"
@@ -46087,23 +46057,23 @@
id="g18697"
transform="translate(-86,370.75)">
<path
- style="fill:none;stroke:#0b1728;stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 330,-107.75 -5,2 0.0372,6.324398 5,2.71875 4.99999,-2.71875 L 335,-105.75 l -5,-2 z"
+ style="fill:none;stroke:#0b1728;stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 330,-107.75 -5,2 0.0372,6.324398 5,2.71875 4.99999,-2.71875 L 335,-105.75 Z"
id="path18699"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
id="path18719"
- d="m 330.03717,-107.6131 -5,1.875 0,6.312498 5,2.71875 4.99999,-2.71875 0,-6.312498 -4.99999,-1.875 z"
- style="fill:url(#linearGradient18721);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 330.03717,-107.6131 -5,1.875 v 6.312498 l 5,2.71875 4.99999,-2.71875 v -6.312498 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient18721);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<g
id="g18703"
transform="translate(179,-179)">
<path
id="path18707"
- d="m 146.0019,73.295281 5,-1.894157 5,1.894157 -5,2.073959 -5,-2.073959 z"
- style="fill:url(#linearGradient18728);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 146.0019,73.295281 5,-1.894157 5,1.894157 -5,2.073959 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient18728);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -46112,19 +46082,19 @@
</g>
<path
id="path18763"
- d="m 335,-105.5 -5,2 0,6.75 5,-2.75 0,-6 z"
- style="fill:url(#linearGradient18765);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+ d="m 335,-105.5 -5,2 v 6.75 l 5,-2.75 z"
+ style="display:inline;fill:url(#linearGradient18765);fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccc"
id="path18709"
- d="m 334.5,-105.25 0.002,5.587357 -4.5,2.480073 -4.5,-2.480073 -0.002,-5.587357 4.5,-1.75 4.5,1.75 z"
+ d="m 334.5,-105.25 0.002,5.587357 -4.5,2.480073 -4.5,-2.480073 L 325.5,-105.25 330,-107 Z"
style="fill:none;stroke:url(#linearGradient18712);stroke-width:0.99999982px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
id="path18758"
- style="opacity:0.8;fill:none;stroke:#d7e3f4;stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ style="display:inline;opacity:0.8;fill:none;stroke:#d7e3f4;stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 330.25,-103.25 3.25,-1.5"
sodipodi:nodetypes="cc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
@@ -46140,7 +46110,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
sodipodi:nodetypes="cc"
d="M 330.25,-103.25 335,-105.5"
- style="fill:#0b1728;fill-opacity:1;fill-rule:evenodd;stroke:#0b1728;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#0b1728;fill-opacity:1;fill-rule:evenodd;stroke:#0b1728;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path18760"
inkscape:connector-curvature="0" />
</g>
@@ -46154,63 +46124,57 @@
height="16"
width="16"
id="rect14326"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g14538">
<path
sodipodi:nodetypes="css"
id="path14330"
d="m 155.51612,249.67445 c 0,3.70073 8,3.70073 8,0 0,-2.71386 -4,-1.727 -4,-5.67444"
- style="fill:none;stroke:#0b1728;stroke-width:3.0999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ style="display:inline;fill:none;stroke:#0b1728;stroke-width:3.0999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
- <path
+ <ellipse
transform="matrix(0.8675713,0,0,-1.199958,80.598976,391.9948)"
- d="M 93.25,125 A 1.75,1.25 0 0 1 91.5,126.25 1.75,1.25 0 0 1 89.75,125 1.75,1.25 0 0 1 91.5,123.75 1.75,1.25 0 0 1 93.25,125 Z"
- sodipodi:ry="1.25"
- sodipodi:rx="1.75"
- sodipodi:cy="125"
- sodipodi:cx="91.5"
id="path14332"
- style="fill:#e6e6e6;fill-opacity:1;stroke:#0b1728;stroke-width:2.74424219;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
- sodipodi:type="arc" />
+ style="display:inline;fill:#e6e6e6;fill-opacity:1;stroke:#0b1728;stroke-width:2.74424219;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ cx="91.5"
+ cy="125"
+ rx="1.75"
+ ry="1.25" />
<path
- style="fill:none;stroke:url(#linearGradient14568);stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient14568);stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 155.51612,249.75002 c 0,3.75 8,3.75 8,0 0,-2.75 -4,-1.75 -4,-5.75"
id="path14334"
sodipodi:nodetypes="css"
inkscape:connector-curvature="0" />
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:1;stroke:url(#linearGradient14570);stroke-width:1.28417933;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ <ellipse
+ style="display:inline;fill:#000000;fill-opacity:1;stroke:url(#linearGradient14570);stroke-width:1.28417933;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path14336"
- sodipodi:cx="91.5"
- sodipodi:cy="125"
- sodipodi:rx="1.75"
- sodipodi:ry="1.25"
- d="M 93.25,125 A 1.75,1.25 0 0 1 91.5,126.25 1.75,1.25 0 0 1 89.75,125 1.75,1.25 0 0 1 91.5,123.75 1.75,1.25 0 0 1 93.25,125 Z"
- transform="matrix(0.8540253,0,0,-1.199954,81.814709,391.9942)" />
- <path
transform="matrix(0.8540253,0,0,-1.199954,81.814709,391.9942)"
- d="M 93.25,125 A 1.75,1.25 0 0 1 91.5,126.25 1.75,1.25 0 0 1 89.75,125 1.75,1.25 0 0 1 91.5,123.75 1.75,1.25 0 0 1 93.25,125 Z"
- sodipodi:ry="1.25"
- sodipodi:rx="1.75"
- sodipodi:cy="125"
- sodipodi:cx="91.5"
+ cx="91.5"
+ cy="125"
+ rx="1.75"
+ ry="1.25" />
+ <ellipse
+ transform="matrix(0.8540253,0,0,-1.199954,81.814709,391.9942)"
id="path14338"
- style="fill:none;stroke:url(#linearGradient14572);stroke-width:1.28417933;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
- sodipodi:type="arc" />
+ style="display:inline;fill:none;stroke:url(#linearGradient14572);stroke-width:1.28417933;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ cx="91.5"
+ cy="125"
+ rx="1.75"
+ ry="1.25" />
<rect
y="241"
x="158.99884"
height="2"
width="2.0011597"
id="rect14340"
- style="opacity:0.75;fill:#162d50;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.75;fill:#162d50;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="cs"
id="path14342"
d="m 155.95084,249.59135 c 0,3.34488 7.13055,3.34488 7.13055,0"
- style="opacity:0.45;fill:none;stroke:#ffffff;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ style="display:inline;opacity:0.45;fill:none;stroke:#ffffff;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -46218,7 +46182,7 @@
transform="translate(349,127.99988)"
id="ICON_BLENDER">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect26258"
width="16"
height="16"
@@ -46231,75 +46195,61 @@
<path
sodipodi:nodetypes="cc"
d="M -15.594023,497.94339 -20.25,493.5"
- style="fill:none;stroke:#28170b;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.34386529;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#28170b;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.34386528;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path26264"
inkscape:connector-curvature="0" />
- <path
+ <ellipse
transform="matrix(3.625,0,0,3.1690202,-67.8125,318.31703)"
- d="m 14.5,57.5 a 1,1.0000004 0 0 1 -1,1 1,1.0000004 0 0 1 -1,-1 1,1.0000004 0 0 1 1,-1 1,1.0000004 0 0 1 1,1 z"
- sodipodi:ry="1.0000004"
- sodipodi:rx="1"
- sodipodi:cy="57.5"
- sodipodi:cx="13.5"
id="path26266"
- style="fill:none;stroke:#28170b;stroke-width:1.32768786;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.10397505;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#28170b;stroke-width:1.32768786;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.10397505;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="13.5"
+ cy="57.5"
+ rx="1"
+ ry="1.0000004" />
<path
id="path26268"
- style="fill:none;stroke:#28170b;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.34386529;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -25.5,496.5 7.5,0 m -9.5,6 6,-6"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#28170b;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.34386528;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -25.5,496.5 h 7.5 m -9.5,6 6,-6"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
</g>
- <path
+ <circle
transform="matrix(3.5999897,0,0,3.1249932,-67.499871,320.6879)"
- d="m 14.5,57.5 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- sodipodi:ry="1"
- sodipodi:rx="1"
- sodipodi:cy="57.5"
- sodipodi:cx="13.5"
id="path26270"
- style="fill:none;stroke:url(#linearGradient26282);stroke-width:0.92424375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.10397505;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient26282);stroke-width:0.92424375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.10397505;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="13.5"
+ cy="57.5"
+ r="1" />
<path
sodipodi:nodetypes="cccccc"
d="m -25.5,496.5 7.984366,-0.0226 M -27.5,502.5 l 6,-6 m 5.996227,1.44466 L -20.25,493.5"
- style="fill:none;stroke:url(#linearGradient26284);stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.34386529;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient26284);stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.34386528;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path26272"
inkscape:connector-curvature="0" />
- <path
- sodipodi:type="arc"
+ <circle
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path26274"
- sodipodi:cx="13.5"
- sodipodi:cy="57.5"
- sodipodi:rx="1"
- sodipodi:ry="1"
- d="m 14.5,57.5 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- transform="matrix(3.25,0,0,3.25,-62.875,313.125)" />
- <path
+ transform="matrix(3.25,0,0,3.25,-62.875,313.125)"
+ cx="13.5"
+ cy="57.5"
+ r="1" />
+ <circle
transform="matrix(2,0,0,2,-46,385)"
- d="m 14.5,57.5 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- sodipodi:ry="1"
- sodipodi:rx="1"
- sodipodi:cy="57.5"
- sodipodi:cx="13.5"
id="path26276"
style="fill:#2c5aa0;fill-opacity:1;fill-rule:nonzero;stroke:none"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient26286);stroke-width:0.22536004;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.10397505;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ cx="13.5"
+ cy="57.5"
+ r="1" />
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient26286);stroke-width:0.22536004;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.10397505;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path26278"
- sodipodi:cx="13.5"
- sodipodi:cy="57.5"
- sodipodi:rx="1"
- sodipodi:ry="1"
- d="m 14.5,57.5 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- transform="matrix(4.7519907,0,0,4.1435313,-83.051884,262.12196)" />
+ transform="matrix(4.7519907,0,0,4.1435313,-83.051884,262.12196)"
+ cx="13.5"
+ cy="57.5"
+ r="1" />
<path
sodipodi:nodetypes="cccccc"
- d="m -20.515634,493.80534 c -0.07079,-0.45769 0.0843,-0.63855 0.5,-0.5 m -7.704183,9.08552 4.25,-4.25 m -2,-2 6.25,0"
+ d="m -20.515634,493.80534 c -0.07079,-0.45769 0.0843,-0.63855 0.5,-0.5 m -7.704183,9.08552 4.25,-4.25 m -2,-2 h 6.25"
style="fill:none;stroke:url(#linearGradient26288);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
id="path26280"
inkscape:connector-curvature="0" />
@@ -46309,7 +46259,7 @@
id="ICON_TEXTURE_DATA"
transform="translate(0,128.00001)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect15183"
width="16"
height="16"
@@ -46324,11 +46274,11 @@
height="12.953857"
width="13.016124"
id="rect15187"
- style="fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
ry="0" />
<rect
ry="0"
- style="fill:url(#linearGradient15195);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00207269;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient15195);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00207269;marker:none;enable-background:accumulate"
id="rect15189"
width="11.000001"
height="11.046139"
@@ -46337,13 +46287,13 @@
<path
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccc"
id="path15191"
- d="m 49,430 0,3 3,0 0,-3 -3,0 z m 3,3 0,3 3,0 0,-3 -3,0 z m 3,0 3,0 0,-3 -3,0 0,3 z m 3,0 0,3 3,0 0,-3 -3,0 z m 0,3 -3,0 0,3 3,0 0,-3 z m 0,3 0,3 3,0 0,-3 -3,0 z m -3,0 -3,0 0,3 3,0 0,-3 z m -3,0 0,-3 -3,0 0,3 3,0 z"
- style="fill:url(#linearGradient15209);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 49,430 v 3 h 3 v -3 z m 3,3 v 3 h 3 v -3 z m 3,0 h 3 v -3 h -3 z m 3,0 v 3 h 3 v -3 z m 0,3 h -3 v 3 h 3 z m 0,3 v 3 h 3 v -3 z m -3,0 h -3 v 3 h 3 z m -3,0 v -3 h -3 v 3 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient15209);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path15193"
- d="m 60.517703,430.5 -11.017704,0 0,11 11.017704,0 0,-11"
+ d="M 60.517703,430.5 H 49.499999 v 11 h 11.017704 v -11"
style="fill:none;stroke:url(#linearGradient15211);stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
@@ -46357,7 +46307,7 @@
height="16"
width="16"
id="rect15319"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g15351">
<rect
@@ -46366,14 +46316,14 @@
height="12.998481"
width="13"
id="rect15323"
- style="fill:url(#linearGradient15363);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:url(#linearGradient15363);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<path
sodipodi:nodetypes="ccc"
id="path15326"
- d="m 91.499805,357.49999 0,-10.99829 11.000195,0 0,10.99829 -11.000195,0 z"
+ d="M 91.499805,357.49999 V 346.5017 H 102.5 v 10.99829 z"
style="fill:none;stroke:url(#linearGradient15365);stroke-width:0.99999982px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -46385,8 +46335,8 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cszzcc"
id="path15332"
- d="m 103.5,353.27516 c -0.37083,-1.1875 -1.21031,-1.72293 -1.9,-1.72929 -1.39235,-0.0134 -1.47709,3.98814 -2.999997,4 -1.491657,0.0119 -2.001315,-7 -3.5,-7 -1.52993,-10e-4 -1.18608,5.00645 -3.5,4.97929 l -1,0"
- style="fill:none;stroke:url(#linearGradient15367);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ d="m 103.5,353.27516 c -0.37083,-1.1875 -1.21031,-1.72293 -1.9,-1.72929 -1.39235,-0.0134 -1.47709,3.98814 -2.999997,4 -1.491657,0.0119 -2.001315,-7 -3.5,-7 -1.52993,-10e-4 -1.18608,5.00645 -3.5,4.97929 h -1"
+ style="display:inline;fill:none;stroke:url(#linearGradient15367);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -46403,28 +46353,28 @@
height="16"
width="16"
id="rect15371"
- style="opacity:0;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline" />
+ style="display:inline;opacity:0;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
<g
- style="fill:#ffcc00;stroke:#000000;stroke-width:1.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;display:inline"
+ style="display:inline;fill:#ffcc00;stroke:#000000;stroke-width:1.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
id="g15373"
transform="translate(73,-319.5)">
<path
sodipodi:nodetypes="cccccccccccccccccccccccc"
id="path15375"
transform="translate(262.99997,326)"
- d="m -169,233 0,1 1,0 0,10 -1,0 0,1 4,0 0,-1 -1,0 0,-4 3,0 0,1 1,0 0,-3 -1,0 0,1 -3,0 0,-5 5,0 0,1 1,0 0,-2 -8,0 -1,0 z"
+ d="m -169,233 v 1 h 1 v 10 h -1 v 1 h 4 v -1 h -1 v -4 h 3 v 1 h 1 v -3 h -1 v 1 h -3 v -5 h 5 v 1 h 1 v -2 h -8 z"
style="fill:none;stroke:#000000;stroke-width:1.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
inkscape:connector-curvature="0" />
</g>
<g
transform="translate(73,-319.5)"
id="g15377"
- style="fill:#ffcc00;display:inline">
+ style="display:inline;fill:#ffcc00">
<path
sodipodi:nodetypes="cccccccccccccccccccccccc"
id="path15379"
transform="translate(262.99997,326)"
- d="m -169,233 0,1 1,0 0,10 -1,0 0,1 4,0 0,-1 -1,0 0,-4 3,0 0,1 1,0 0,-3 -1,0 0,1 -3,0 0,-5 5,0 0,1 1,0 0,-2 -8,0 -1,0 z"
+ d="m -169,233 v 1 h 1 v 10 h -1 v 1 h 4 v -1 h -1 v -4 h 3 v 1 h 1 v -3 h -1 v 1 h -3 v -5 h 5 v 1 h 1 v -2 h -8 z"
style="fill:url(#linearGradient15383)"
inkscape:connector-curvature="0" />
</g>
@@ -46432,8 +46382,8 @@
transform="translate(-31.000031,-64.5)"
sodipodi:nodetypes="cccccccccccccccccccccccccccccc"
id="path15381"
- d="m 198,304 0,1 0.5,0 0,-1 -0.5,0 z m 1,1 0,10 0.65625,0 0,-10 L 199,305 z m 7,0 0,1 0.5,0 0,-1 -0.5,0 z m -2,4 0,1 0.5,0 0,-1 -0.5,0 z m 0,2 0,1 0.5,0 0,-1 -0.5,0 z m -6,4 0,1 0.5,0 0,-1 -0.5,0 z"
- style="opacity:0.85;fill:#ffffff;display:inline"
+ d="m 198,304 v 1 h 0.5 v -1 z m 1,1 v 10 h 0.65625 v -10 z m 7,0 v 1 h 0.5 v -1 z m -2,4 v 1 h 0.5 v -1 z m 0,2 v 1 h 0.5 v -1 z m -6,4 v 1 h 0.5 v -1 z"
+ style="display:inline;opacity:0.85;fill:#ffffff"
inkscape:connector-curvature="0" />
</g>
<g
@@ -46445,7 +46395,7 @@
height="16"
width="16"
id="rect14357"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g14359"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -46456,12 +46406,12 @@
<path
sodipodi:nodetypes="czszcccc"
id="path14368"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
d="m 86.5,100.53983 4.342131,0.008 c 5.188235,0.0101 5.335295,-2.04831 3.335293,-4.04831 -0.964875,-0.964875 -4.5,-4 1.500002,-5 M 88.840543,97.588774 86.5,100.53983 M 88.828993,103.5 86.5,100.53983"
inkscape:connector-curvature="0" />
<path
d="m 86.5,100.53983 4.342131,0.008 C 96.03037,100.55844 96.17743,98.5 94.177424,96.5 c -0.964875,-0.964875 -4.5,-4 1.500002,-5 M 88.840543,97.588774 86.5,100.53983 M 88.828993,103.5 86.5,100.53983"
- style="fill:none;stroke:url(#linearGradient14377);stroke-width:1.50000143;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient14377);stroke-width:1.50000143;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:7.40000057;stroke-opacity:1"
id="path14375"
sodipodi:nodetypes="czszcccc"
inkscape:connector-curvature="0" />
@@ -46472,7 +46422,7 @@
id="ICON_SCENE"
transform="translate(0,64.000007)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect16520"
width="16"
height="16"
@@ -46489,17 +46439,17 @@
height="12"
width="15"
id="rect16524"
- style="fill:url(#linearGradient16638);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient16638);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
rx="1.7356256" />
<path
sodipodi:nodetypes="ccccccccc"
id="path16527"
- d="M 111,498.48148 111,504 c 0,0.56404 0.36784,1.00001 0.84375,1 l 12.3125,0 C 124.63216,505 125,504.56405 125,504 l 0,-5.51852 c -0.31371,0.37179 -0.76923,0.59259 -1.25,0.59259 l -11.5,0 c -0.48077,0 -0.93629,-0.2208 -1.25,-0.59259 z"
- style="fill:url(#linearGradient16640);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 111,498.48148 V 504 c 0,0.56404 0.36784,1.00001 0.84375,1 h 12.3125 C 124.63216,505 125,504.56405 125,504 v -5.51852 c -0.31371,0.37179 -0.76923,0.59259 -1.25,0.59259 h -11.5 c -0.48077,0 -0.93629,-0.2208 -1.25,-0.59259 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient16640);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<rect
rx="1.5817194"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect16530"
width="15"
height="2"
@@ -46507,7 +46457,7 @@
y="494.5"
ry="1" />
<rect
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect16532"
width="15"
height="12"
@@ -46515,16 +46465,14 @@
y="494.5"
ry="1.503511"
rx="1.503511" />
- <path
- sodipodi:type="arc"
- style="opacity:0.7;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.75859177;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.75859177;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path16535"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(1.3955004,0,0,1.2452423,11.18333,-121.72474)" />
+ transform="matrix(1.3955004,0,0,1.2452423,11.18333,-121.72474)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
<rect
rx="0.5078125"
ry="0.4910686"
@@ -46533,68 +46481,58 @@
height="10"
width="13.000001"
id="rect16537"
- style="opacity:0.25;fill:none;stroke:#ffffff;stroke-width:0.99999988;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:none;stroke:#ffffff;stroke-width:0.99999988;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
+ <ellipse
transform="matrix(1.5770887,0,0,1.5999841,-3.50675,-301.69208)"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path16540"
- style="opacity:0.1;fill:none;stroke:#000000;stroke-width:0.62952667;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient16642);stroke-width:0.97061968;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:none;stroke:#000000;stroke-width:0.62952667;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient16642);stroke-width:0.97061968;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path16542"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(1.1794014,0,0,0.8999954,27.50686,48.952303)" />
- <path
+ transform="matrix(1.1794014,0,0,0.8999954,27.50686,48.952303)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
transform="matrix(1.1827463,0,0,1.2,27.245789,-99.900024)"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path16544"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b3b3b3;stroke-width:0.83938956;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient16644);stroke-width:1.26754272;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b3b3b3;stroke-width:0.83938956;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient16644);stroke-width:1.26754272;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path16546"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(0.790122,0,0,0.787736,57.870479,107.05649)" />
+ transform="matrix(0.790122,0,0,0.787736,57.870479,107.05649)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
<g
id="g16548"
transform="matrix(0.7547901,0,0,1,59.021765,-1)">
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:#999999;stroke-width:2.89550138;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#999999;stroke-width:2.89550138;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path16550"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(0.7901234,0,0,0.2000006,9.8760061,395.5997)" />
+ transform="matrix(0.7901234,0,0,0.2000006,9.8760061,395.5997)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
<path
sodipodi:nodetypes="csccc"
id="path16554"
- d="m 69.505631,495.5 0,-0.50001 c 0,-0.276 0.896,-0.5 2,-0.5 1.104,0 2,0.224 2,0.5 l 0,0.50001"
- style="fill:none;stroke:#000000;stroke-width:1.15103066;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 69.505631,495.5 v -0.50001 c 0,-0.276 0.896,-0.5 2,-0.5 1.104,0 2,0.224 2,0.5 V 495.5"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1.15103066;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect16556"
width="2.6497433"
height="1"
@@ -46607,9 +46545,9 @@
height="1.5"
width="2"
id="rect16558"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:url(#radialGradient16646);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient16646);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate"
id="rect16562"
width="2"
height="1.5"
@@ -46621,47 +46559,39 @@
height="1"
width="1"
id="rect16564"
- style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:url(#radialGradient16648);stroke-width:0.67151165;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate" />
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#radialGradient16648);stroke-width:0.67151165;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path16566"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(1.1827463,0,0,1.2,27.245789,-99.900024)" />
- <path
+ transform="matrix(1.1827463,0,0,1.2,27.245789,-99.900024)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
transform="matrix(0.8888868,0,0,0.8862026,50.166822,57.626266)"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path16568"
- style="fill:url(#radialGradient16650);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient16650);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
id="path16570"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(0.1975308,0,0,0.1999991,103.0926,401.10045)" />
- <path
- sodipodi:type="arc"
- style="opacity:0.7;fill:url(#radialGradient32447);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.98985863;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ transform="matrix(0.1975308,0,0,0.1999991,103.0926,401.10045)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:url(#radialGradient32447);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.98985863;marker:none;enable-background:accumulate"
id="path32441"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(-0.8867575,0.06148883,-0.06130315,-0.8840797,219.44126,941.51187)" />
+ transform="matrix(-0.8867575,0.06148883,-0.06130315,-0.8840797,219.44126,941.51187)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
</g>
</g>
<g
@@ -46671,7 +46601,7 @@
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<rect
- style="opacity:0;fill:#ffaaaa;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ffaaaa;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect21291"
width="16"
height="16"
@@ -46688,17 +46618,17 @@
height="10"
width="12"
id="rect21295"
- style="fill:url(#linearGradient21776);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient21776);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
rx="1.5909902" />
<path
sodipodi:nodetypes="ccccccccc"
id="path21297"
- d="m 465.46685,13.40909 0,4.59375 c 0,0.56244 0.34142,0.99717 0.78315,0.99716 l 10.5,0.01065 c 0.44173,0 0.78315,-0.43471 0.78315,-0.99716 l 0,-4.59375 c -0.29118,0.37073 -0.71398,0.59091 -1.16022,0.59091 L 466.62707,14 c -0.44624,0 -0.86904,-0.22018 -1.16022,-0.59091 l 0,0 0,0 0,0 z"
- style="fill:url(#linearGradient21773);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 465.46685,13.40909 v 4.59375 c 0,0.56244 0.34142,0.99717 0.78315,0.99716 l 10.5,0.01065 c 0.44173,0 0.78315,-0.43471 0.78315,-0.99716 v -4.59375 c -0.29118,0.37073 -0.71398,0.59091 -1.16022,0.59091 L 466.62707,14 c -0.44624,0 -0.86904,-0.22018 -1.16022,-0.59091 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient21773);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<rect
rx="1.362712"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect21299"
width="12"
height="2.0056314"
@@ -46706,7 +46636,7 @@
y="10.494369"
ry="1.0028157" />
<rect
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect21301"
width="12"
height="10"
@@ -46722,28 +46652,26 @@
height="7.999999"
width="9.9998779"
id="rect21303"
- style="opacity:0.25;fill:none;stroke:#ffffff;stroke-width:0.99999988;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:none;stroke:#ffffff;stroke-width:0.99999988;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<g
id="g21305"
transform="matrix(0.7547901,0,0,1,414.01868,-484.99999)">
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:#999999;stroke-width:2.90780973;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#999999;stroke-width:2.90780973;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path21307"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(0.7834486,0,0,0.2000006,10.413535,395.5997)" />
+ transform="matrix(0.7834486,0,0,0.2000006,10.413535,395.5997)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
<path
sodipodi:nodetypes="csccc"
id="path21309"
- d="m 69.531013,495.51105 0,-0.50001 c 0,-0.276 0.890314,-0.5 1.987308,-0.5 1.096993,0 1.987307,0.224 1.987307,0.5 l 0,0.50001"
- style="fill:none;stroke:#000000;stroke-width:1.15103066;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 69.531013,495.51105 v -0.50001 c 0,-0.276 0.890314,-0.5 1.987308,-0.5 1.096993,0 1.987307,0.224 1.987307,0.5 v 0.50001"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1.15103066;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect21311"
width="2.6497409"
height="1"
@@ -46754,7 +46682,7 @@
transform="matrix(1,0,0,0.6666667,331,-319.00002)"
id="g21313">
<rect
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect21315"
width="2"
height="1.5"
@@ -46766,7 +46694,7 @@
height="1.5"
width="2"
id="rect21317"
- style="fill:url(#radialGradient21741);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient21741);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate" />
</g>
<rect
y="13"
@@ -46774,104 +46702,86 @@
height="1"
width="1"
id="rect21319"
- style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate" />
<g
id="g21804"
transform="translate(1.1408497e-7,0.5000446)">
- <path
+ <ellipse
transform="matrix(1.187982,0,0,1.0569758,379.83032,-513.21497)"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path21323"
- style="opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.89240623;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="opacity:0.25;fill:none;stroke:#000000;stroke-width:0.71801031;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.89240623;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:none;stroke:#000000;stroke-width:0.71801031;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path21325"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(1.3827154,0,0,1.4028327,364.1482,-688.72206)" />
- <path
+ transform="matrix(1.3827154,0,0,1.4028327,364.1482,-688.72206)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
transform="matrix(0.987526,0,0,0.8124641,394.9733,-392.80617)"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path21327"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient21814);stroke-width:1.11641002;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b3b3b3;stroke-width:1.00804472;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient21814);stroke-width:1.11641002;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b3b3b3;stroke-width:1.00804472;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path21329"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(0.9848328,0,0,0.9992585,395.19018,-485.12778)" />
- <path
+ transform="matrix(0.9848328,0,0,0.9992585,395.19018,-485.12778)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
transform="matrix(0.591154,0,0,0.5887513,425.87219,-279.05319)"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path21331"
- style="fill:none;stroke:url(#linearGradient21816);stroke-width:1.69505489;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient21816);stroke-width:1.69505489;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
transform="matrix(0.9913883,0,0,1.0058976,394.67318,-488.46061)"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path21333"
- style="fill:none;stroke:url(#radialGradient21818);stroke-width:0.80110824;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="opacity:0.7;fill:url(#radialGradient21820);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#radialGradient21818);stroke-width:0.80110824;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:url(#radialGradient21820);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
id="path21335"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(0.6941559,0,0,0.6920597,417.67198,-331.15708)" />
- <path
+ transform="matrix(0.6941559,0,0,0.6920597,417.67198,-331.15708)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
transform="matrix(0.1975308,0,0,0.1999991,456.0926,-84.399595)"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path21337"
- style="opacity:0.2;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
transform="matrix(-0.6760501,-0.1575078,0.1570322,-0.6740085,446.07727,367.34791)"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path22185"
- style="opacity:0.7;fill:url(#radialGradient22187);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:url(#radialGradient22187);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
</g>
<path
- style="opacity:0.05;fill:none;stroke:#ffffff;stroke-width:0.99999982;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 476.49997,11.941967 0,7.174103"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.05;fill:none;stroke:#ffffff;stroke-width:0.99999982;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 476.49997,11.941967 V 19.11607"
id="rect21642"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
@@ -46880,7 +46790,7 @@
<g
transform="translate(45,422.99999)"
id="ICON_RESTRICT_RENDER_ON"
- style="opacity:0.25;display:inline">
+ style="display:inline;opacity:0.25">
<rect
ry="0"
rx="0"
@@ -46889,11 +46799,11 @@
height="16"
width="16"
id="rect22104"
- style="opacity:0;fill:#ffaaaa;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ffaaaa;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<g
id="g22106">
<rect
- style="fill:url(#linearGradient22154);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient22154);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect22108"
width="12"
height="10"
@@ -46902,8 +46812,8 @@
ry="1.5909902"
rx="1.5909902" />
<path
- style="fill:url(#linearGradient22156);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 465,13.40909 0,4.59375 c 0,0.56244 0.36784,0.99717 0.84375,0.99716 l 11.3125,0.01065 c 0.47591,0 0.84375,-0.43471 0.84375,-0.99716 l 0,-4.59375 c -0.31371,0.37073 -0.76923,0.59091 -1.25,0.59091 L 466.25,14 c -0.48077,0 -0.93629,-0.22018 -1.25,-0.59091 l 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient22156);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 465,13.40909 v 4.59375 c 0,0.56244 0.36784,0.99717 0.84375,0.99716 l 11.3125,0.01065 c 0.47591,0 0.84375,-0.43471 0.84375,-0.99716 v -4.59375 c -0.31371,0.37073 -0.76923,0.59091 -1.25,0.59091 L 466.25,14 c -0.48077,0 -0.93629,-0.22018 -1.25,-0.59091 z"
id="path22110"
sodipodi:nodetypes="ccccccccc"
inkscape:connector-curvature="0" />
@@ -46914,7 +46824,7 @@
height="2"
width="13"
id="rect22112"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
rx="1.4762714" />
<rect
ry="1.3782184"
@@ -46923,10 +46833,10 @@
height="10"
width="12"
id="rect22114"
- style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
rx="1.3782184" />
<rect
- style="opacity:0.25;fill:none;stroke:#ffffff;stroke-width:0.99999988;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:none;stroke:#ffffff;stroke-width:0.99999988;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect22116"
width="9.9998779"
height="7.999999"
@@ -46937,19 +46847,17 @@
<g
transform="matrix(0.7547901,0,0,1,414.01868,-484.99999)"
id="g22118">
- <path
+ <ellipse
transform="matrix(0.7834486,0,0,0.2000006,10.413535,395.5997)"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path22120"
- style="fill:none;stroke:#999999;stroke-width:2.90780973;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- style="fill:none;stroke:#000000;stroke-width:1.15103066;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 69.531013,495.51105 0,-0.50001 c 0,-0.276 0.890314,-0.5 1.987308,-0.5 1.096993,0 1.987307,0.224 1.987307,0.5 l 0,0.50001"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#999999;stroke-width:2.90780973;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <path
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1.15103066;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 69.531013,495.51105 v -0.50001 c 0,-0.276 0.890314,-0.5 1.987308,-0.5 1.096993,0 1.987307,0.224 1.987307,0.5 v 0.50001"
id="path22122"
sodipodi:nodetypes="csccc"
inkscape:connector-curvature="0" />
@@ -46959,7 +46867,7 @@
height="1"
width="2.6497409"
id="rect22124"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
</g>
<g
id="g22126"
@@ -46970,9 +46878,9 @@
height="1.5"
width="2"
id="rect22128"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:url(#radialGradient22158);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient22158);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate"
id="rect22130"
width="2"
height="1.5"
@@ -46980,7 +46888,7 @@
y="496.5" />
</g>
<rect
- style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate"
id="rect22132"
width="1"
height="1"
@@ -46989,99 +46897,83 @@
<g
transform="translate(1.1408497e-7,0.5000446)"
id="g22134">
- <path
- sodipodi:type="arc"
- style="opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.89240623;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.89240623;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path22136"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(1.187982,0,0,1.0569758,379.83032,-513.21497)" />
- <path
+ transform="matrix(1.187982,0,0,1.0569758,379.83032,-513.21497)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
transform="matrix(1.3827154,0,0,1.4028327,364.1482,-688.72206)"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path22138"
- style="opacity:0.15;fill:none;stroke:#000000;stroke-width:0.71801031;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient22160);stroke-width:1.11641002;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.15;fill:none;stroke:#000000;stroke-width:0.71801031;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient22160);stroke-width:1.11641002;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path22140"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(0.987526,0,0,0.8124641,394.9733,-392.80617)" />
- <path
+ transform="matrix(0.987526,0,0,0.8124641,394.9733,-392.80617)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
transform="matrix(0.9848328,0,0,0.9992585,395.19018,-485.12778)"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path22142"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b3b3b3;stroke-width:1.00804472;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient22162);stroke-width:1.69505489;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b3b3b3;stroke-width:1.00804472;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient22162);stroke-width:1.69505489;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path22144"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(0.591154,0,0,0.5887513,425.87219,-279.05319)" />
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:url(#radialGradient22164);stroke-width:0.80110824;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ transform="matrix(0.591154,0,0,0.5887513,425.87219,-279.05319)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#radialGradient22164);stroke-width:0.80110824;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path22146"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(0.9913883,0,0,1.0058976,394.67318,-488.46061)" />
- <path
+ transform="matrix(0.9913883,0,0,1.0058976,394.67318,-488.46061)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
transform="matrix(0.6941559,0,0,0.6920597,417.84876,-330.91401)"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path22148"
- style="fill:url(#radialGradient22166);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient22166);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
id="path22150"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(0.1975308,0,0,0.1999991,456.07844,-84.89955)" />
+ transform="matrix(0.1975308,0,0,0.1999991,456.07844,-84.89955)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
</g>
<path
sodipodi:nodetypes="cc"
id="path22152"
- d="m 476.49997,11.941967 0,7.174103"
- style="opacity:0.05;fill:none;stroke:#ffffff;stroke-width:0.99999982;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 476.49997,11.941967 V 19.11607"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.05;fill:none;stroke:#ffffff;stroke-width:0.99999982;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
<g
transform="translate(-272,478.06251)"
id="ICON_OUTLINER_OB_CAMERA"
- style="opacity:0.98000004;display:inline"
+ style="display:inline;opacity:0.98000004"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<rect
@@ -47090,66 +46982,54 @@
height="16"
width="16"
id="rect30187"
- style="opacity:0;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
+ <circle
transform="matrix(1.3340954,0,0,1.3333333,-178.16901,-188.16667)"
- sodipodi:type="arc"
- style="fill:none;stroke:#2b1600;stroke-width:0.74978584;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#2b1600;stroke-width:0.74978584;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path30189"
- sodipodi:cx="443.5"
- sodipodi:cy="108.5"
- sodipodi:rx="3"
- sodipodi:ry="3"
- d="m 446.5,108.5 a 3,3 0 0 1 -3,3 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 3,3 z" />
- <path
- d="m 446.5,108.5 a 3,3 0 0 1 -3,3 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 3,3 z"
- sodipodi:ry="3"
- sodipodi:rx="3"
- sodipodi:cy="108.5"
- sodipodi:cx="443.5"
+ cx="443.5"
+ cy="108.5"
+ r="3" />
+ <circle
id="path30191"
- style="fill:none;stroke:#2b1600;stroke-width:0.74978584;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc"
- transform="matrix(1.3340954,0,0,1.3333333,-184.1736,-187.16666)" />
- <path
- d="m 446.5,108.5 a 3,3 0 0 1 -3,3 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 3,3 z"
- sodipodi:ry="3"
- sodipodi:rx="3"
- sodipodi:cy="108.5"
- sodipodi:cx="443.5"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#2b1600;stroke-width:0.74978584;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
+ transform="matrix(1.3340954,0,0,1.3333333,-184.1736,-187.16666)"
+ cx="443.5"
+ cy="108.5"
+ r="3" />
+ <circle
id="path30193"
- style="fill:url(#linearGradient24132);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.85464907;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc"
- transform="matrix(1.1662469,0,0,1.1666676,-103.72925,-170.08344)" />
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient24132);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.85464907;marker:none;enable-background:accumulate"
+ transform="matrix(1.1662469,0,0,1.1666676,-103.72925,-170.08344)"
+ cx="443.5"
+ cy="108.5"
+ r="3" />
<path
sodipodi:nodetypes="cccccccccccccccccc"
id="path30195"
- d="m 409.5,-39.50001 -2,2.000003 -2,0 0,2 2,0 0,1 1,1 5,7e-6 0,-1 2.99542,0 1.5,1 0.25,0 0,-5 -0.25,0 -1.5,1 -2.99542,0 0,-2 -4,-1e-5 0,0 0,0 0,0 z"
- style="fill:#f89a35;fill-opacity:1;fill-rule:nonzero;stroke:#2b1600;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 409.5,-39.50001 -2,2.000003 h -2 v 2 h 2 v 1 l 1,1 5,7e-6 v -1 h 2.99542 l 1.5,1 h 0.25 v -5 h -0.25 l -1.5,1 H 413.5 v -2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#f89a35;fill-opacity:1;fill-rule:nonzero;stroke:#2b1600;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:open="true"
- sodipodi:end="8.1340281"
+ sodipodi:end="1.8508428"
sodipodi:start="3.0449434"
transform="matrix(1.0812107,0,0,1.082338,-66.018179,-160.93645)"
sodipodi:type="arc"
- style="opacity:0.98000004;fill:none;stroke:url(#linearGradient30231);stroke-width:0.92440742;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.98000004;fill:none;stroke:url(#linearGradient30231);stroke-width:0.92440742;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path30197"
sodipodi:cx="443.5"
sodipodi:cy="108.5"
sodipodi:rx="3"
sodipodi:ry="3"
d="m 440.514,108.7895 a 3,3 0 0 1 1.83109,-3.05829 3,3 0 0 1 3.46157,0.85063 3,3 0 0 1 0.20507,3.55865 3,3 0 0 1 -3.34093,1.24264" />
- <path
+ <circle
transform="matrix(1.1662469,0,0,1.1666676,-109.73384,-169.08343)"
- sodipodi:type="arc"
- style="fill:url(#linearGradient30233);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.85464907;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient30233);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.85464907;marker:none;enable-background:accumulate"
id="path30199"
- sodipodi:cx="443.5"
- sodipodi:cy="108.5"
- sodipodi:rx="3"
- sodipodi:ry="3"
- d="m 446.5,108.5 a 3,3 0 0 1 -3,3 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 3,3 z" />
+ cx="443.5"
+ cy="108.5"
+ r="3" />
<path
sodipodi:open="true"
sodipodi:end="5.930273"
@@ -47160,7 +47040,7 @@
sodipodi:cy="108.5"
sodipodi:cx="443.5"
id="path30201"
- style="opacity:0.98000004;fill:none;stroke:url(#linearGradient30235);stroke-width:0.9380942;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.98000004;fill:none;stroke:url(#linearGradient30235);stroke-width:0.9380942;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:type="arc"
transform="matrix(1.0655819,0,0,1.0664004,-65.085308,-158.20716)" />
<rect
@@ -47169,36 +47049,30 @@
height="2.0000005"
width="4.0000658"
id="rect30203"
- style="fill:#c8955e;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
+ style="display:inline;overflow:visible;visibility:visible;fill:#c8955e;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
+ <circle
transform="matrix(0.3352674,0,0,0.3357219,258.80309,-78.928541)"
- sodipodi:type="arc"
- style="opacity:0.98000004;fill:none;stroke:url(#linearGradient30237);stroke-width:2.98067403;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.98000004;fill:none;stroke:url(#linearGradient30237);stroke-width:2.98067403;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path30205"
- sodipodi:cx="443.5"
- sodipodi:cy="108.5"
- sodipodi:rx="3"
- sodipodi:ry="3"
- d="m 446.5,108.5 a 3,3 0 0 1 -3,3 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 3,3 z" />
+ cx="443.5"
+ cy="108.5"
+ r="3" />
<rect
y="-43"
x="407"
height="1.0000002"
width="1"
id="rect30207"
- style="fill:#2b2200;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
- d="m 446.5,108.5 a 3,3 0 0 1 -3,3 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 3,3 z"
- sodipodi:ry="3"
- sodipodi:rx="3"
- sodipodi:cy="108.5"
- sodipodi:cx="443.5"
+ style="display:inline;overflow:visible;visibility:visible;fill:#2b2200;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
+ <circle
id="path30209"
- style="opacity:0.98000004;fill:none;stroke:url(#linearGradient30239);stroke-width:2.98067403;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc"
- transform="matrix(0.3352674,0,0,0.3357219,264.80311,-79.91866)" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.98000004;fill:none;stroke:url(#linearGradient30239);stroke-width:2.98067403;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
+ transform="matrix(0.3352674,0,0,0.3357219,264.80311,-79.91866)"
+ cx="443.5"
+ cy="108.5"
+ r="3" />
<rect
- style="fill:#2b2200;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#2b2200;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect30211"
width="1"
height="1.0000002"
@@ -47210,30 +47084,30 @@
height="2"
width="3.99542"
id="rect30213"
- style="fill:url(#linearGradient30241);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000024;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient30241);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000024;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="ccccc"
id="path30215"
- d="m 416.49542,-37 1.5,-1 0,4 -1.5,-1 0,-2 z"
- style="fill:url(#linearGradient30243);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000024;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 416.49542,-37 1.5,-1 v 4 l -1.5,-1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient30243);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000024;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path30217"
- d="m 415.99542,-37 1,-0.5 0,3 -1,-0.5 0,-2 z"
- style="fill:url(#linearGradient30245);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 415.99542,-37 1,-0.5 v 3 l -1,-0.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient30245);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:url(#linearGradient30247);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 413,-37 1,0 0,2 -1,0 0,-2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient30247);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 413,-37 h 1 v 2 h -1 z"
id="path30219"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccc"
id="path30221"
- d="m 409.75,-38.5 2.75,0 0,4 -4,0 0,-2.75 1.25,-1.25 z"
- style="fill:#ec8f2c;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient30249);stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 409.75,-38.5 h 2.75 v 4 h -4 v -2.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ec8f2c;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient30249);stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<rect
ry="1.2544428"
@@ -47242,17 +47116,17 @@
height="2.6761446"
width="2.8293107"
id="rect30223"
- style="opacity:0.6;fill:none;stroke:url(#linearGradient20217);stroke-width:1.00000024;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:none;stroke:url(#linearGradient20217);stroke-width:1.00000024;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
rx="1.2544428" />
<rect
- style="fill:#ffdbb5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000024;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffdbb5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000024;marker:none;enable-background:accumulate"
id="rect30225"
width="3"
height="1"
x="406"
y="-37.000008" />
<rect
- style="fill:#634321;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#634321;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect30227"
width="4"
height="1"
@@ -47260,49 +47134,40 @@
y="-40" />
</g>
<g
- style="opacity:0.98000004;display:inline"
+ style="display:inline;opacity:0.98000004"
id="ICON_OUTLINER_DATA_CAMERA"
transform="translate(-271.99542,457.0625)">
<rect
- style="opacity:0;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect30284"
width="16"
height="16"
x="403"
y="-48" />
- <path
- d="m 446.5,108.5 a 3,3 0 0 1 -3,3 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 3,3 z"
- sodipodi:ry="3"
- sodipodi:rx="3"
- sodipodi:cy="108.5"
- sodipodi:cx="443.5"
+ <circle
id="path30286"
- style="fill:none;stroke:#000000;stroke-width:0.74978584;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc"
- transform="matrix(1.3340954,0,0,1.3333333,-178.16901,-188.16667)" />
- <path
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:0.74978584;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
+ transform="matrix(1.3340954,0,0,1.3333333,-178.16901,-188.16667)"
+ cx="443.5"
+ cy="108.5"
+ r="3" />
+ <circle
transform="matrix(1.3340954,0,0,1.3333333,-184.1736,-187.16666)"
- sodipodi:type="arc"
- style="fill:none;stroke:#000000;stroke-width:0.74978584;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:0.74978584;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path30288"
- sodipodi:cx="443.5"
- sodipodi:cy="108.5"
- sodipodi:rx="3"
- sodipodi:ry="3"
- d="m 446.5,108.5 a 3,3 0 0 1 -3,3 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 3,3 z" />
- <path
+ cx="443.5"
+ cy="108.5"
+ r="3" />
+ <circle
transform="matrix(1.1662469,0,0,1.1666676,-103.72925,-170.08344)"
- sodipodi:type="arc"
- style="fill:url(#linearGradient30326);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.85464907;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient30326);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.85464907;marker:none;enable-background:accumulate"
id="path30290"
- sodipodi:cx="443.5"
- sodipodi:cy="108.5"
- sodipodi:rx="3"
- sodipodi:ry="3"
- d="m 446.5,108.5 a 3,3 0 0 1 -3,3 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 3,3 z" />
+ cx="443.5"
+ cy="108.5"
+ r="3" />
<path
- style="fill:#787878;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 407.5,-39.5 0,1.999993 -2,0 0,2 2,0 0,1 1,1 5,7e-6 0,-1 2.99542,0 1.5,1 0.25,0 0,-5 -0.25,0 -1.5,1 -2.99542,0 0,-2 -6,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#787878;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 407.5,-39.5 v 1.999993 h -2 v 2 h 2 v 1 l 1,1 5,7e-6 v -1 h 2.99542 l 1.5,1 h 0.25 v -5 h -0.25 l -1.5,1 H 413.5 v -2 z"
id="path30292"
sodipodi:nodetypes="cccccccccccccccccc"
inkscape:connector-curvature="0" />
@@ -47313,26 +47178,23 @@
sodipodi:cy="108.5"
sodipodi:cx="443.5"
id="path30294"
- style="opacity:0.98000004;fill:none;stroke:url(#linearGradient30328);stroke-width:0.92440742;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.98000004;fill:none;stroke:url(#linearGradient30328);stroke-width:0.92440742;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:type="arc"
transform="matrix(1.0812107,0,0,1.082338,-66.018179,-160.93645)"
sodipodi:start="3.0449434"
- sodipodi:end="8.1340281"
+ sodipodi:end="1.8508428"
sodipodi:open="true" />
- <path
- d="m 446.5,108.5 a 3,3 0 0 1 -3,3 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 3,3 z"
- sodipodi:ry="3"
- sodipodi:rx="3"
- sodipodi:cy="108.5"
- sodipodi:cx="443.5"
+ <circle
id="path30296"
- style="fill:url(#linearGradient30330);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.85464907;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc"
- transform="matrix(1.1662469,0,0,1.1666676,-109.73384,-169.08343)" />
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient30330);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.85464907;marker:none;enable-background:accumulate"
+ transform="matrix(1.1662469,0,0,1.1666676,-109.73384,-169.08343)"
+ cx="443.5"
+ cy="108.5"
+ r="3" />
<path
transform="matrix(1.0655819,0,0,1.0664004,-65.085308,-158.20716)"
sodipodi:type="arc"
- style="opacity:0.98000004;fill:none;stroke:url(#linearGradient30332);stroke-width:0.9380942;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.98000004;fill:none;stroke:url(#linearGradient30332);stroke-width:0.9380942;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path30298"
sodipodi:cx="443.5"
sodipodi:cy="108.5"
@@ -47343,79 +47205,73 @@
sodipodi:end="5.930273"
sodipodi:open="true" />
<rect
- style="fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect30300"
width="4.0000658"
height="2.0000005"
x="409"
y="-41" />
- <path
- d="m 446.5,108.5 a 3,3 0 0 1 -3,3 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 3,3 z"
- sodipodi:ry="3"
- sodipodi:rx="3"
- sodipodi:cy="108.5"
- sodipodi:cx="443.5"
+ <circle
id="path30302"
- style="opacity:0.98000004;fill:none;stroke:url(#linearGradient30334);stroke-width:2.98067403;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc"
- transform="matrix(0.3352674,0,0,0.3357219,258.80309,-78.928541)" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.98000004;fill:none;stroke:url(#linearGradient30334);stroke-width:2.98067403;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
+ transform="matrix(0.3352674,0,0,0.3357219,258.80309,-78.928541)"
+ cx="443.5"
+ cy="108.5"
+ r="3" />
<rect
- style="fill:#333333;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#333333;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect30304"
width="1"
height="1.0000002"
x="407"
y="-43" />
- <path
+ <circle
transform="matrix(0.3352674,0,0,0.3357219,264.80311,-79.91866)"
- sodipodi:type="arc"
- style="opacity:0.98000004;fill:none;stroke:url(#linearGradient30336);stroke-width:2.98067403;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.98000004;fill:none;stroke:url(#linearGradient30336);stroke-width:2.98067403;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path30306"
- sodipodi:cx="443.5"
- sodipodi:cy="108.5"
- sodipodi:rx="3"
- sodipodi:ry="3"
- d="m 446.5,108.5 a 3,3 0 0 1 -3,3 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 3,3 z" />
+ cx="443.5"
+ cy="108.5"
+ r="3" />
<rect
y="-43.99012"
x="413.00003"
height="1.0000002"
width="1"
id="rect30308"
- style="fill:#333333;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#333333;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:url(#linearGradient30338);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000024;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient30338);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000024;marker:none;enable-background:accumulate"
id="rect30310"
width="3.99542"
height="2"
x="413"
y="-37" />
<path
- style="fill:url(#linearGradient30340);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000024;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 416.49542,-37 1.5,-1 0,4 -1.5,-1 0,-2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient30340);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000024;marker:none;enable-background:accumulate"
+ d="m 416.49542,-37 1.5,-1 v 4 l -1.5,-1 z"
id="path30312"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
- style="fill:url(#linearGradient30342);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 415.99542,-37 1,-0.5 0,3 -1,-0.5 0,-2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient30342);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 415.99542,-37 1,-0.5 v 3 l -1,-0.5 z"
id="path30314"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path30316"
- d="m 413,-37 1,0 0,2 -1,0 0,-2 z"
- style="fill:url(#linearGradient30344);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 413,-37 h 1 v 2 h -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient30344);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient30346);stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 409.75,-38.5 2.75,0 0,4 -4,0 0,-2.75 1.25,-1.25 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient30346);stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 409.75,-38.5 h 2.75 v 4 h -4 v -2.75 z"
id="path30318"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.6;fill:none;stroke:url(#linearGradient30348);stroke-width:1.00000024;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:none;stroke:url(#linearGradient30348);stroke-width:1.00000024;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect30320"
width="2.8293107"
height="2.6761446"
@@ -47429,59 +47285,50 @@
height="1"
width="3"
id="rect30322"
- style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000024;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000024;marker:none;enable-background:accumulate" />
<rect
y="-40"
x="409"
height="1"
width="4"
id="rect30324"
- style="fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
</g>
<g
- style="opacity:0.98000004;display:inline"
+ style="display:inline;opacity:0.98000004"
id="ICON_CAMERA_DATA"
transform="translate(-145.99542,541.00002)">
<rect
- style="opacity:0;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect30352"
width="16"
height="16"
x="403"
y="-48" />
- <path
- d="m 446.5,108.5 a 3,3 0 0 1 -3,3 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 3,3 z"
- sodipodi:ry="3"
- sodipodi:rx="3"
- sodipodi:cy="108.5"
- sodipodi:cx="443.5"
+ <circle
id="path30354"
- style="fill:none;stroke:#000000;stroke-width:0.74978584;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc"
- transform="matrix(1.3340954,0,0,1.3333333,-178.16901,-188.16667)" />
- <path
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:0.74978584;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
+ transform="matrix(1.3340954,0,0,1.3333333,-178.16901,-188.16667)"
+ cx="443.5"
+ cy="108.5"
+ r="3" />
+ <circle
transform="matrix(1.3340954,0,0,1.3333333,-184.1736,-187.16666)"
- sodipodi:type="arc"
- style="fill:none;stroke:#000000;stroke-width:0.74978584;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:0.74978584;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path30356"
- sodipodi:cx="443.5"
- sodipodi:cy="108.5"
- sodipodi:rx="3"
- sodipodi:ry="3"
- d="m 446.5,108.5 a 3,3 0 0 1 -3,3 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 3,3 z" />
- <path
+ cx="443.5"
+ cy="108.5"
+ r="3" />
+ <circle
transform="matrix(1.1662469,0,0,1.1666676,-103.72925,-170.08344)"
- sodipodi:type="arc"
- style="fill:url(#linearGradient30394);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.85464907;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient30394);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.85464907;marker:none;enable-background:accumulate"
id="path30358"
- sodipodi:cx="443.5"
- sodipodi:cy="108.5"
- sodipodi:rx="3"
- sodipodi:ry="3"
- d="m 446.5,108.5 a 3,3 0 0 1 -3,3 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 3,3 z" />
+ cx="443.5"
+ cy="108.5"
+ r="3" />
<path
- style="fill:#787878;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 407.5,-39.5 0,1.999993 -2,0 0,2 2,0 0,1 1,1 5,7e-6 0,-1 2.99542,0 1.5,1 0.25,0 0,-5 -0.25,0 -1.5,1 -2.99542,0 0,-2 -6,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#787878;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 407.5,-39.5 v 1.999993 h -2 v 2 h 2 v 1 l 1,1 5,7e-6 v -1 h 2.99542 l 1.5,1 h 0.25 v -5 h -0.25 l -1.5,1 H 413.5 v -2 z"
id="path30360"
sodipodi:nodetypes="cccccccccccccccccc"
inkscape:connector-curvature="0" />
@@ -47492,26 +47339,23 @@
sodipodi:cy="108.5"
sodipodi:cx="443.5"
id="path30362"
- style="opacity:0.98000004;fill:none;stroke:url(#linearGradient30396);stroke-width:0.92440742;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.98000004;fill:none;stroke:url(#linearGradient30396);stroke-width:0.92440742;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:type="arc"
transform="matrix(1.0812107,0,0,1.082338,-66.018179,-160.93645)"
sodipodi:start="3.0449434"
- sodipodi:end="8.1340281"
+ sodipodi:end="1.8508428"
sodipodi:open="true" />
- <path
- d="m 446.5,108.5 a 3,3 0 0 1 -3,3 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 3,3 z"
- sodipodi:ry="3"
- sodipodi:rx="3"
- sodipodi:cy="108.5"
- sodipodi:cx="443.5"
+ <circle
id="path30364"
- style="fill:url(#linearGradient30398);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.85464907;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc"
- transform="matrix(1.1662469,0,0,1.1666676,-109.73384,-169.08343)" />
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient30398);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.85464907;marker:none;enable-background:accumulate"
+ transform="matrix(1.1662469,0,0,1.1666676,-109.73384,-169.08343)"
+ cx="443.5"
+ cy="108.5"
+ r="3" />
<path
transform="matrix(1.0655819,0,0,1.0664004,-65.085308,-158.20716)"
sodipodi:type="arc"
- style="opacity:0.98000004;fill:none;stroke:url(#linearGradient30400);stroke-width:0.9380942;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.98000004;fill:none;stroke:url(#linearGradient30400);stroke-width:0.9380942;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path30366"
sodipodi:cx="443.5"
sodipodi:cy="108.5"
@@ -47522,79 +47366,73 @@
sodipodi:end="5.930273"
sodipodi:open="true" />
<rect
- style="fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect30368"
width="4.0000658"
height="2.0000005"
x="409"
y="-41" />
- <path
- d="m 446.5,108.5 a 3,3 0 0 1 -3,3 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 3,3 z"
- sodipodi:ry="3"
- sodipodi:rx="3"
- sodipodi:cy="108.5"
- sodipodi:cx="443.5"
+ <circle
id="path30370"
- style="opacity:0.98000004;fill:none;stroke:url(#linearGradient30402);stroke-width:2.98067403;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc"
- transform="matrix(0.3352674,0,0,0.3357219,258.80309,-78.928541)" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.98000004;fill:none;stroke:url(#linearGradient30402);stroke-width:2.98067403;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
+ transform="matrix(0.3352674,0,0,0.3357219,258.80309,-78.928541)"
+ cx="443.5"
+ cy="108.5"
+ r="3" />
<rect
- style="fill:#333333;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#333333;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect30372"
width="1"
height="1.0000002"
x="407"
y="-43" />
- <path
+ <circle
transform="matrix(0.3352674,0,0,0.3357219,264.80311,-79.91866)"
- sodipodi:type="arc"
- style="opacity:0.98000004;fill:none;stroke:url(#linearGradient30404);stroke-width:2.98067403;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.98000004;fill:none;stroke:url(#linearGradient30404);stroke-width:2.98067403;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path30374"
- sodipodi:cx="443.5"
- sodipodi:cy="108.5"
- sodipodi:rx="3"
- sodipodi:ry="3"
- d="m 446.5,108.5 a 3,3 0 0 1 -3,3 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 3,3 z" />
+ cx="443.5"
+ cy="108.5"
+ r="3" />
<rect
y="-43.99012"
x="413.00003"
height="1.0000002"
width="1"
id="rect30376"
- style="fill:#333333;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#333333;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:url(#linearGradient30406);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000024;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient30406);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000024;marker:none;enable-background:accumulate"
id="rect30378"
width="3.99542"
height="2"
x="413"
y="-37" />
<path
- style="fill:url(#linearGradient30408);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000024;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 416.49542,-37 1.5,-1 0,4 -1.5,-1 0,-2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient30408);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000024;marker:none;enable-background:accumulate"
+ d="m 416.49542,-37 1.5,-1 v 4 l -1.5,-1 z"
id="path30380"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
- style="fill:url(#linearGradient30410);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 415.99542,-37 1,-0.5 0,3 -1,-0.5 0,-2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient30410);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 415.99542,-37 1,-0.5 v 3 l -1,-0.5 z"
id="path30382"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path30384"
- d="m 413,-37 1,0 0,2 -1,0 0,-2 z"
- style="fill:url(#linearGradient30412);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 413,-37 h 1 v 2 h -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient30412);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient30414);stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 409.75,-38.5 2.75,0 0,4 -4,0 0,-2.75 1.25,-1.25 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient30414);stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 409.75,-38.5 h 2.75 v 4 h -4 v -2.75 z"
id="path30386"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.6;fill:none;stroke:url(#linearGradient30416);stroke-width:1.00000024;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:none;stroke:url(#linearGradient30416);stroke-width:1.00000024;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect30388"
width="2.8293107"
height="2.6761446"
@@ -47608,14 +47446,14 @@
height="1"
width="3"
id="rect30390"
- style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000024;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000024;marker:none;enable-background:accumulate" />
<rect
y="-40"
x="409"
height="1"
width="4"
id="rect30392"
- style="fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
</g>
<g
id="ICON_IMAGE_RGB">
@@ -47625,12 +47463,12 @@
height="16"
width="16"
id="rect17352"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g40205">
<rect
ry="0"
- style="fill:#f2f2f2;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#f2f2f2;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect17356"
width="13.016124"
height="12.953857"
@@ -47642,7 +47480,7 @@
height="11.046139"
width="11.000001"
id="rect17358"
- style="fill:url(#linearGradient40202);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00207269;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient40202);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00207269;marker:none;enable-background:accumulate"
ry="0" />
<g
id="g40036"
@@ -47651,14 +47489,14 @@
transform="translate(-146.99999,417.99999)"
id="g39822">
<rect
- style="fill:#106386;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#106386;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate"
id="rect39628"
width="3"
height="3"
x="196"
y="12" />
<rect
- style="fill:#ba0036;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ba0036;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate"
id="rect39636"
width="3"
height="3"
@@ -47670,37 +47508,37 @@
height="3"
width="3"
id="rect39670"
- style="fill:#9f0022;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#9f0022;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate" />
<rect
y="15"
x="205"
height="3"
width="3"
id="rect39676"
- style="fill:#688c7f;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#688c7f;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate" />
<rect
y="18"
x="196"
height="3"
width="3"
id="rect39678"
- style="fill:#b77100;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#b77100;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate" />
<rect
y="21"
x="199"
height="3"
width="3"
id="rect39684"
- style="fill:#a67c58;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#a67c58;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate" />
<rect
- style="fill:#7a2537;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#7a2537;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate"
id="rect39686"
width="3"
height="3"
x="202"
y="18" />
<rect
- style="fill:#869c2b;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#869c2b;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate"
id="rect39692"
width="3"
height="3"
@@ -47711,7 +47549,7 @@
<path
inkscape:connector-curvature="0"
style="fill:none;stroke:url(#linearGradient40189);stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 207.51769,12.50001 -11.0177,0 0,11 11.0177,0 0,-11"
+ d="m 207.51769,12.50001 h -11.0177 v 11 h 11.0177 v -11"
id="path17363"
sodipodi:nodetypes="ccc" />
</g>
@@ -47725,17 +47563,17 @@
height="16"
width="16"
id="rect17382"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<rect
y="-20.509235"
x="228.04515"
height="13"
width="12.983856"
id="rect17384"
- style="fill:url(#linearGradient32749);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;display:inline" />
+ style="display:inline;fill:url(#linearGradient32749);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1" />
<rect
transform="translate(271.529,-379.00923)"
- style="fill:url(#linearGradient32751);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient32751);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect17387"
width="12"
height="12"
@@ -47745,15 +47583,15 @@
<path
sodipodi:nodetypes="ccc"
id="path17389"
- d="m 240.029,-19.509225 -10.98386,0 0,11.0000002 10.98384,-10e-6 0,-11.0000002"
- style="fill:none;stroke:url(#linearGradient32753);stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0.5;display:inline"
+ d="m 240.029,-19.509225 h -10.98386 v 11.0000002 l 10.98384,-10e-6 V -19.509235"
+ style="display:inline;fill:none;stroke:url(#linearGradient32753);stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0.5;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
<g
id="ICON_LOCKVIEW_ON"
transform="translate(339,-210)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect18439"
width="16"
height="16"
@@ -47777,8 +47615,8 @@
transform="translate(-80,-48)"
id="g18447">
<path
- style="fill:#d7d7d7;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 36.488585,166.3823 -0.25,1.1177 -9.499995,0 -1.25,-1.25 -5e-6,-10.75 11,0 0,10.8823 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#d7d7d7;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 36.488585,166.3823 -0.25,1.1177 H 26.73859 l -1.25,-1.25 -5e-6,-10.75 h 11 z"
id="path18449"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -47790,8 +47628,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path18451"
- d="m 34.988585,166.00001 -8,0 0,-1.00001 8,0 0,1.00001 z"
- style="fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 34.988585,166.00001 h -8 V 165 h 8 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
@@ -47799,8 +47637,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path18453"
- d="m 35.47469,156.50008 -8.986105,-8e-5 5e-6,10 8.999995,0 -0.01389,-9.99992 -5e-6,0 0,0 0,0 z"
- style="fill:none;stroke:url(#linearGradient17177);stroke-width:0.99999923px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 35.47469,156.50008 -8.986105,-8e-5 5e-6,10 h 8.999995 l -0.01389,-9.99992 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17177);stroke-width:0.99999923px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<rect
@@ -47812,7 +47650,7 @@
height="1.0000023"
width="1"
id="rect18455"
- style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<g
transform="matrix(1,0,0,-1,0,320)"
id="g18457"
@@ -47825,8 +47663,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path18459"
- d="m -101,181 -10,0 0,-8 10,0 0,8 z"
- style="opacity:0.5;fill:url(#radialGradient17179);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+ d="m -101,181 h -10 v -8 h 10 z"
+ style="display:inline;opacity:0.5;fill:url(#radialGradient17179);fill-opacity:1;fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
</g>
<g
@@ -47837,22 +47675,22 @@
transform="translate(-347,193.00032)">
<path
sodipodi:nodetypes="ccccccccccccsccc"
- style="fill:#e1e1e1;fill-opacity:1;fill-rule:nonzero;stroke:#1a1a1a;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 246.5,-15.5 c -1.65264,0 -3,1.347359 -3,3 l 0,2 c 0,1.6526411 1.34737,3 3,3 l 0,0 c 1.65264,0 3,-1.3473589 3,-3 l -0.0312,-1.96875 c 0,-1.652641 -1.31612,-3.03125 -2.96875,-3.03125 l 0,0 -5e-5,0 z m 0,2 c 0.554,0 1,0.446 1,1 l 0,2 c 0,0.554 -0.446,1 -1,1 -0.554,0 -1,-0.446 -1,-1 l 0,-2 c 0,-0.554 0.446,-1 1,-1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#e1e1e1;fill-opacity:1;fill-rule:nonzero;stroke:#1a1a1a;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 246.5,-15.5 c -1.65264,0 -3,1.347359 -3,3 v 2 c 0,1.6526411 1.34737,3 3,3 v 0 c 1.65264,0 3,-1.3473589 3,-3 l -0.0312,-1.96875 c 0,-1.652641 -1.31612,-3.03125 -2.96875,-3.03125 v 0 z m 0,2 c 0.554,0 1,0.446 1,1 v 2 c 0,0.554 -0.446,1 -1,1 -0.554,0 -1,-0.446 -1,-1 v -2 c 0,-0.554 0.446,-1 1,-1 z"
id="path18465"
inkscape:connector-curvature="0" />
<path
id="path18467"
- d="m 246.5,-19.5 c -1.65264,0 -3,1.347359 -3,3 l 0,2 c 0,1.652641 1.34737,3 3,3 l 0,0 c 1.65264,0 3,-1.347359 3,-3 l 0,-2 c 0,-1.652641 -1.34737,-3 -3,-3 l 0,0 z m 0,2 c 0.554,0 1,0.446 1,1 l 0,2 c 0,0.554 -0.446,1 -1,1 -0.554,0 -1,-0.446 -1,-1 l 0,-2 c 0,-0.554 0.446,-1 1,-1 z"
- style="fill:url(#radialGradient17181);fill-opacity:1;fill-rule:nonzero;stroke:#1a1a1a;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 246.5,-19.5 c -1.65264,0 -3,1.347359 -3,3 v 2 c 0,1.652641 1.34737,3 3,3 v 0 c 1.65264,0 3,-1.347359 3,-3 v -2 c 0,-1.652641 -1.34737,-3 -3,-3 z m 0,2 c 0.554,0 1,0.446 1,1 v 2 c 0,0.554 -0.446,1 -1,1 -0.554,0 -1,-0.446 -1,-1 v -2 c 0,-0.554 0.446,-1 1,-1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient17181);fill-opacity:1;fill-rule:nonzero;stroke:#1a1a1a;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccccccccsccc"
inkscape:connector-curvature="0" />
<path
- transform="translate(6,0)"
+ transform="translate(6)"
clip-path="url(#clipPath17188)"
id="path18473"
- d="m 240.5,-15.5 c -1.65264,0 -3,1.347359 -3,3 l 0,2 c 0,1.6526411 1.34737,3 3,3 l 0,0 c 1.65264,0 3,-1.3473589 3,-3 l -0.0312,-1.96875 c 0,-1.652641 -1.31612,-3.03125 -2.96875,-3.03125 l 0,0 -5e-5,0 z m 0,2 c 0.554,0 1,0.446 1,1 l 0,2 c 0,0.554 -0.446,1 -1,1 -0.554,0 -1,-0.446 -1,-1 l 0,-2 c 0,-0.554 0.446,-1 1,-1 z"
- style="fill:#d3d7cf;fill-opacity:1;fill-rule:nonzero;stroke:#1a1a1a;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 240.5,-15.5 c -1.65264,0 -3,1.347359 -3,3 v 2 c 0,1.6526411 1.34737,3 3,3 v 0 c 1.65264,0 3,-1.3473589 3,-3 l -0.0312,-1.96875 c 0,-1.652641 -1.31612,-3.03125 -2.96875,-3.03125 v 0 z m 0,2 c 0.554,0 1,0.446 1,1 v 2 c 0,0.554 -0.446,1 -1,1 -0.554,0 -1,-0.446 -1,-1 v -2 c 0,-0.554 0.446,-1 1,-1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#d3d7cf;fill-opacity:1;fill-rule:nonzero;stroke:#1a1a1a;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccccccccsccc"
inkscape:connector-curvature="0" />
<rect
@@ -47861,9 +47699,9 @@
height="2.5"
width="1"
id="rect18475"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect18477"
width="1"
height="1"
@@ -47898,13 +47736,13 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path18499"
- d="m 36.488585,166.3823 -0.25,1.1177 -9.499995,0 -1.25,-1.25 -5e-6,-10.75 11,0 0,10.8823 z"
- style="fill:#d7d7d7;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 36.488585,166.3823 -0.25,1.1177 H 26.73859 l -1.25,-1.25 -5e-6,-10.75 h 11 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#d7d7d7;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
- style="fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 34.988585,165.99999 -8,0 0,-1 8,0 0,1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;enable-background:accumulate"
+ d="m 34.988585,165.99999 h -8 v -1 h 8 z"
id="path18501"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -47912,15 +47750,15 @@
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
- style="fill:none;stroke:url(#linearGradient23914);stroke-width:0.99999923px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 35.47469,156.50008 -8.986105,-8e-5 5e-6,10 8.999995,0 -0.01389,-9.99992 -5e-6,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23914);stroke-width:0.99999923px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 35.47469,156.50008 -8.986105,-8e-5 5e-6,10 h 8.999995 l -0.01389,-9.99992 z"
id="path18503"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<rect
- style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect18505"
width="1"
height="1.000007"
@@ -47945,12 +47783,12 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path18511"
- d="m 76,164 -10,0 0,-9 10,0 0,9 z"
+ d="M 76,164 H 66 v -9 h 10 z"
style="opacity:0.8;fill:url(#radialGradient23916);fill-opacity:1;fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
<path
style="fill:url(#radialGradient23918);fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 76,164 -10,0 0,-9 10,0 0,9 z"
+ d="M 76,164 H 66 v -9 h 10 z"
id="path18513"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -47969,13 +47807,13 @@
mask="url(#mask13041)">
<path
id="path18521"
- d="m 279.46875,-11.53125 c -1.65264,0 -2.96875,1.316109 -2.96875,2.96875 l 0,1.0625 c 0,1.6526411 1.31612,2.96875 2.96875,2.96875 l 0.0625,0 c 1.65264,0 2.96875,-1.3161089 2.96875,-2.96875 l 0,-1.0625 c 0,-1.652641 -1.31612,-2.96875 -2.96875,-2.96875 l -0.0625,0 z M 279.5,-9.5 c 0.554,0 1,0.446 1,1 l 0,1 c 0,0.554 -0.446,1 -1,1 -0.554,0 -1,-0.446 -1,-1 l 0,-1 c 0,-0.554 0.446,-1 1,-1 z"
- style="fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#1a1a1a;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 279.46875,-11.53125 c -1.65264,0 -2.96875,1.316109 -2.96875,2.96875 V -7.5 c 0,1.6526411 1.31612,2.96875 2.96875,2.96875 h 0.0625 c 1.65264,0 2.96875,-1.3161089 2.96875,-2.96875 v -1.0625 c 0,-1.652641 -1.31612,-2.96875 -2.96875,-2.96875 z M 279.5,-9.5 c 0.554,0 1,0.446 1,1 v 1 c 0,0.554 -0.446,1 -1,1 -0.554,0 -1,-0.446 -1,-1 v -1 c 0,-0.554 0.446,-1 1,-1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#1a1a1a;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccccccccsccc"
mask="none"
inkscape:connector-curvature="0" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect18523"
width="1"
height="2.5"
@@ -47987,7 +47825,7 @@
height="1"
width="1"
id="rect18525"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
</g>
<g
id="g18527"
@@ -47995,8 +47833,8 @@
mask="url(#mask13052)">
<path
sodipodi:nodetypes="ccccccccccccsccc"
- style="fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#1a1a1a;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 279.46875,-11.53125 c -1.65264,0 -2.96875,1.316109 -2.96875,2.96875 l 0,1.0625 c 0,1.6526411 1.31612,2.96875 2.96875,2.96875 l 0.0625,0 c 1.65264,0 2.96875,-1.3161089 2.96875,-2.96875 l 0,-1.0625 c 0,-1.652641 -1.31612,-2.96875 -2.96875,-2.96875 l -0.0625,0 z M 279.5,-9.5 c 0.554,0 1,0.446 1,1 l 0,1 c 0,0.554 -0.446,1 -1,1 -0.554,0 -1,-0.446 -1,-1 l 0,-1 c 0,-0.554 0.446,-1 1,-1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#1a1a1a;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 279.46875,-11.53125 c -1.65264,0 -2.96875,1.316109 -2.96875,2.96875 V -7.5 c 0,1.6526411 1.31612,2.96875 2.96875,2.96875 h 0.0625 c 1.65264,0 2.96875,-1.3161089 2.96875,-2.96875 v -1.0625 c 0,-1.652641 -1.31612,-2.96875 -2.96875,-2.96875 z M 279.5,-9.5 c 0.554,0 1,0.446 1,1 v 1 c 0,0.554 -0.446,1 -1,1 -0.554,0 -1,-0.446 -1,-1 v -1 c 0,-0.554 0.446,-1 1,-1 z"
id="path18529"
inkscape:connector-curvature="0" />
<rect
@@ -48005,9 +47843,9 @@
height="2.5"
width="1"
id="rect18531"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect18533"
width="1"
height="1"
@@ -48028,13 +47866,13 @@
height="16"
width="16"
id="rect18661"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g18663">
<path
sodipodi:nodetypes="ccccccc"
- style="fill:url(#linearGradient18682);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 397.54124,84.25 -1.25,1.25 -10.5,0 -1.24999,-1.25 0,-11.75 12.99999,0 0,11.75 z"
+ style="fill:url(#linearGradient18682);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 397.54124,84.25 -1.25,1.25 h -10.5 l -1.24999,-1.25 V 72.5 h 12.99999 z"
id="path18665"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -48045,8 +47883,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path18667"
- d="m 396.04123,84.0185 -10,0 0,-1.0185 10,0 0,1.0185 z"
- style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 396.04123,84.0185 h -10 V 83 h 10 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<rect
@@ -48058,33 +47896,33 @@
height="0.99999702"
width="0.99998772"
id="rect18671"
- style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<g
transform="translate(-39.85994,-165.9815)"
id="g18674">
<path
sodipodi:nodetypes="csssccc"
- d="m 430.24956,241.60271 -0.86957,2.62878 c -1.04667,3.16416 -1.3885,3.86937 -2.40118,2.64949 -0.37662,-0.45369 -1.31958,0.42592 -0.85102,0.66654 2.9195,1.49927 3.83448,-0.99495 4.73215,-3.56602 l 0.75,-2.37879 -1.36038,0 0,0 0,0 0,0 z"
+ d="m 430.24956,241.60271 -0.86957,2.62878 c -1.04667,3.16416 -1.3885,3.86937 -2.40118,2.64949 -0.37662,-0.45369 -1.31958,0.42592 -0.85102,0.66654 2.9195,1.49927 3.83448,-0.99495 4.73215,-3.56602 l 0.75,-2.37879 z"
id="path18676"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.60000002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.60000002;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.60000002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 430.33455,240.97335 c -0.77131,0.0353 -1.46745,0.21844 -2.3658,0.6829 -0.74329,0.3843 -1.31497,1.26096 -1.28125,1.75 0.0247,0.35816 0.29068,0.65625 0.65625,0.65625 0.36558,0 0.6936,-0.30765 0.6781,-0.65797 C 428,242.91083 427.68952,243 427.84375,242.625 c 0.11839,-0.28788 0.47629,-0.71901 0.90625,-0.83455 0.61327,-0.1648 1.873,0.18401 2.5,0.20955 1.75215,0.0714 3.67097,-0.15759 4.5,-1 -0.24423,0.0241 -2.49503,0.0675 -2.75,0.0625 -1.06533,-0.0208 -1.89414,-0.12444 -2.66545,-0.0891 l 0,-5e-5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.60000002;marker:none;enable-background:accumulate"
+ d="m 430.33455,240.97335 c -0.77131,0.0353 -1.46745,0.21844 -2.3658,0.6829 -0.74329,0.3843 -1.31497,1.26096 -1.28125,1.75 0.0247,0.35816 0.29068,0.65625 0.65625,0.65625 0.36558,0 0.6936,-0.30765 0.6781,-0.65797 C 428,242.91083 427.68952,243 427.84375,242.625 c 0.11839,-0.28788 0.47629,-0.71901 0.90625,-0.83455 0.61327,-0.1648 1.873,0.18401 2.5,0.20955 1.75215,0.0714 3.67097,-0.15759 4.5,-1 -0.24423,0.0241 -2.49503,0.0675 -2.75,0.0625 -1.06533,-0.0208 -1.89414,-0.12444 -2.66545,-0.0891 z"
id="path18678"
sodipodi:nodetypes="cssssssscss"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccscc"
- d="m 430.47881,243.98149 c 1.25,0 2.77121,0.0774 3.52119,0.0185 -0.28977,0.34542 -1.08416,0.80085 -1.5,0.89651 -0.84895,0.19531 -2.02119,-0.033 -2.89006,0.0468 l 0.86887,-0.96184 0,3e-5 z"
+ d="m 430.47881,243.98149 c 1.25,0 2.77121,0.0774 3.52119,0.0185 -0.28977,0.34542 -1.08416,0.80085 -1.5,0.89651 -0.84895,0.19531 -2.02119,-0.033 -2.89006,0.0468 l 0.86887,-0.96184 z"
id="path18680"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.60000002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.60000002;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<path
sodipodi:nodetypes="cccc"
- style="fill:none;stroke:url(#linearGradient18690);stroke-width:0.99999923px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 396.54123,73.51858 -10.98611,-8e-5 -0.0139,11.00008 11,0 0,-11 10e-6,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient18690);stroke-width:0.99999923px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 396.54123,73.51858 -10.98611,-8e-5 -0.0139,11.00008 h 11 v -11 z"
id="path18688"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -48097,7 +47935,7 @@
id="ICON_FULLSCREEN"
style="display:inline">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect18740"
width="16"
height="16"
@@ -48106,9 +47944,9 @@
<g
style="display:inline"
id="g18742"
- transform="translate(0.01612278,0)">
+ transform="translate(0.01612278)">
<rect
- style="opacity:0.7;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;enable-background:accumulate"
id="rect38458"
width="11.999999"
height="9.0000172"
@@ -48119,8 +47957,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path18744"
- d="M 17.453876,82.25 16.233877,83.5 5.75,83.5 4.5,82.25 l -1e-7,-11.75 12.9652911,0 -0.01141,11.75 -5e-6,0 0,0 0,0 z"
- style="fill:url(#linearGradient18752);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 17.453876,82.25 16.233877,83.5 H 5.75 L 4.5,82.25 4.4999999,70.5 H 17.465291 l -0.01141,11.75 z"
+ style="fill:url(#linearGradient18752);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
@@ -48128,13 +47966,13 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path18746"
- d="M 15.983877,81.999998 7.7338772,82 l 0,-0.999998 8.2499998,-2e-6 0,0.999998 z"
- style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 15.983877,81.999998 7.7338772,82 V 81.000002 L 15.983877,81 Z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:url(#linearGradient18756);stroke-width:0.99999976px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="M 5.4838772,82.500001 5.511418,71.499938 16.483877,71.5 l 0,11 -10.9999998,10e-7 z"
+ d="M 5.4838772,82.500001 5.511418,71.499938 16.483877,71.5 v 11 z"
id="path18748"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -48142,7 +47980,7 @@
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<rect
- style="fill:#d40000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#d40000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect18750"
width="1"
height="1"
@@ -48158,7 +47996,7 @@
id="ICON_MENU_PANEL"
style="display:inline">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect18761"
width="16"
height="16"
@@ -48177,21 +48015,21 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path41276"
- d="m 56.511417,178.50003 -10,0 0,9 8.75,0 1.25,-1.25 0,-7.75 z"
- style="opacity:0.15;fill:#000000;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 56.511417,178.50003 h -10 v 9 h 8.75 l 1.25,-1.25 z"
+ style="opacity:0.15;fill:#000000;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path18765"
- d="m 55.011418,177.00004 -10.000001,-1e-5 0,9 10.000001,1e-5 0,-9 z"
+ d="m 55.011418,177.00004 -10.000001,-1e-5 v 9 l 10.000001,1e-5 z"
style="opacity:0.85;fill:url(#linearGradient18779);fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 55.501617,177.75004 -1.25,-1.25 -8.4902,-1e-5 -1.25,1.25 0,7.5 1.25,1.25 8.4902,1e-5 1.25,-1.25 0,-7.5 z"
+ style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 55.501617,177.75004 -1.25,-1.25 -8.4902,-1e-5 -1.25,1.25 v 7.5 l 1.25,1.25 8.4902,1e-5 1.25,-1.25 z"
id="path18767"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -48199,8 +48037,8 @@
sodipodi:nodetypes="ccccccccc"
inkscape:connector-curvature="0" />
<path
- style="fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 54.011419,178.00004 -8.000002,-1e-5 0,0.99996 8.000002,1e-5 0,-0.99996 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;enable-background:accumulate"
+ d="m 54.011419,178.00004 -8.000002,-1e-5 v 0.99996 l 8.000002,1e-5 z"
id="path18773"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -48214,8 +48052,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path18860"
- d="m 54.5098,177.5 0,8 -9,-1e-5 0,-8 9,1e-5 z"
- style="fill:none;stroke:url(#linearGradient18862);stroke-width:0.99999923px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline"
+ d="m 54.5098,177.5 v 8 l -9,-1e-5 v -8 z"
+ style="display:inline;fill:none;stroke:url(#linearGradient18862);stroke-width:0.99999923px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
<g
@@ -48227,20 +48065,20 @@
height="16"
width="16"
id="rect18694"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path18698"
- d="m -176.47247,352.5 -0.59149,0 -5.43604,0 0.0161,-6.00003 6.01141,0 0,6.00003 2e-5,0 0,0 0,0 z"
- style="fill:url(#linearGradient18846);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m -176.47247,352.5 h -0.59149 -5.43604 l 0.0161,-6.00003 h 6.01141 V 352.5 Z"
+ style="fill:url(#linearGradient18846);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccc"
- style="fill:url(#linearGradient18841);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m -176.5,358.5 -1,1 -3.73388,0 -1.25,-1.25 0,-5.74999 6.01141,0 L -176.5,358.5 z"
+ style="fill:url(#linearGradient18841);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m -176.5,358.5 -1,1 h -3.73388 l -1.25,-1.25 v -5.74999 h 6.01141 z"
id="path18702"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -48252,16 +48090,16 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path18710"
- d="m -169.5133,358.25 -1.2367,1.25 -4.75,0 -1,-1 0,-12 7.00001,0 -0.0133,11.75 -10e-6,0 z"
- style="fill:url(#linearGradient18831);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m -169.5133,358.25 -1.2367,1.25 h -4.75 l -1,-1 v -12 h 7.00001 l -0.0133,11.75 z"
+ style="fill:url(#linearGradient18831);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path18712"
- d="m -171,358 -4,0 0,-1.00004 4,0 0,1.00004 z"
- style="color:#000000;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -171,358 h -4 v -1.00004 h 4 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
@@ -48269,12 +48107,12 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path18718"
- d="m -177.5,353.5 0,5 -4,0 0,-5 4,0 z"
+ d="m -177.5,353.5 v 5 h -4 v -5 z"
style="fill:none;stroke:url(#linearGradient18823);stroke-width:0.99999923px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -178,358.00004 -3,0 0,-1.00004 3,0 0,1.00004 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m -178,358.00004 h -3 V 357 h 3 z"
id="path18850"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -48282,7 +48120,7 @@
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:url(#linearGradient18854);stroke-width:0.99999923px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m -170.5,347.5 0,11.00001 -5,0 0,-11.00001 5,0 z"
+ d="m -170.5,347.5 v 11.00001 h -5 V 347.5 Z"
id="path18852"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -48291,7 +48129,7 @@
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:url(#linearGradient18858);stroke-width:0.99999923px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m -177.5,347.50001 0,4 -4,0 0,-4 4,0 z"
+ d="m -177.5,347.50001 v 4 h -4 v -4 z"
id="path18856"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -48303,8 +48141,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path17395"
- d="m -178,358.00004 -3,0 0,-1.00004 3,0 0,1.00004 z"
- style="color:#000000;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -178,358.00004 h -3 V 357 h 3 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<g
@@ -48315,7 +48153,7 @@
id="g18875"
style="display:inline">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect18877"
width="16"
height="16"
@@ -48324,14 +48162,14 @@
<g
style="display:inline"
id="g18879"
- transform="translate(0.01612278,0)">
+ transform="translate(0.01612278)">
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path18881"
- d="M 17.453876,82.25 16.233877,83.5 5.75,83.5 4.5,82.25 l -1e-7,-11.75 12.9652911,0 -0.01141,11.75 -5e-6,0 0,0 0,0 z"
- style="fill:url(#linearGradient17222);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 17.453876,82.25 16.233877,83.5 H 5.75 L 4.5,82.25 4.4999999,70.5 H 17.465291 l -0.01141,11.75 z"
+ style="fill:url(#linearGradient17222);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="cccccccccc"
inkscape:connector-curvature="0" />
<path
@@ -48339,13 +48177,13 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path18883"
- d="M 15.983877,81.999998 5.9838772,82 l 0,-0.999998 9.9999998,-2e-6 0,0.999998 z"
+ d="M 15.983877,81.999998 5.9838772,82 V 81.000002 L 15.983877,81 Z"
style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:url(#linearGradient17224);stroke-width:0.99999976px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="M 5.4838772,82.500001 5.511418,71.499938 16.483877,71.5 l 0,11 -10.9999998,10e-7 z"
+ d="M 5.4838772,82.500001 5.511418,71.499938 16.483877,71.5 v 11 z"
id="path18885"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -48353,7 +48191,7 @@
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<rect
- style="fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect18887"
width="1"
height="1"
@@ -48368,7 +48206,7 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- d="m -197.50001,368.5 9,0 m -9,2 9,0 m -9,2 9,0"
+ d="m -197.50001,368.5 h 9 m -9,2 h 9 m -9,2 h 9"
style="fill:none;stroke:url(#linearGradient17226);stroke-width:0.9999994px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1"
id="path19108"
inkscape:connector-curvature="0" />
@@ -48386,15 +48224,15 @@
height="16"
width="16"
id="rect19071"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
- transform="translate(0.01612278,0)"
+ transform="translate(0.01612278)"
id="g19073"
style="display:inline">
<path
sodipodi:nodetypes="ccccccc"
- style="fill:url(#linearGradient17214);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="M 17.453876,82.25 16.233877,83.5 5.75,83.5 4.5,82.25 l -1e-7,-11.75 12.9652911,0 -0.01141,11.75 -5e-6,0 0,0 0,0 z"
+ style="fill:url(#linearGradient17214);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 17.453876,82.25 16.233877,83.5 H 5.75 L 4.5,82.25 4.4999999,70.5 H 17.465291 l -0.01141,11.75 z"
id="path19075"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -48403,7 +48241,7 @@
<path
sodipodi:nodetypes="ccccc"
style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="M 15.983877,81.999998 5.9838772,82 l 0,-0.999998 9.9999998,-2e-6 0,0.999998 z"
+ d="M 15.983877,81.999998 5.9838772,82 V 81.000002 L 15.983877,81 Z"
id="path19077"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -48415,7 +48253,7 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path19079"
- d="M 5.4838772,82.500001 5.511418,71.499938 16.483877,71.5 l 0,11 -10.9999998,10e-7 z"
+ d="M 5.4838772,82.500001 5.511418,71.499938 16.483877,71.5 v 11 z"
style="fill:none;stroke:url(#linearGradient17216);stroke-width:0.99999976px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
<rect
@@ -48427,13 +48265,13 @@
height="1"
width="1"
id="rect19081"
- style="fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
</g>
</g>
<path
id="path19112"
style="fill:none;stroke:url(#linearGradient17218);stroke-width:0.99999946px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1"
- d="m -173.49999,372.5 2,0 m -2,-2 2,0 m -2,-2 2,0"
+ d="m -173.49999,372.5 h 2 m -2,-2 h 2 m -2,-2 h 2"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -48442,13 +48280,13 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- d="m -180.5,372.5 3,0 m -3,-2 3,0 m -3,-2 3,0"
+ d="m -180.5,372.5 h 3 m -3,-2 h 3 m -3,-2 h 3"
style="fill:none;stroke:url(#linearGradient17220);stroke-width:0.99999952px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1"
id="path19116"
inkscape:connector-curvature="0" />
<path
- style="fill:#999999;fill-opacity:0.75;fill-rule:evenodd;stroke:#808080;stroke-width:0.99999928px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1;display:inline"
- d="m -175.39386,374.49044 0,-7.03646"
+ style="display:inline;fill:#999999;fill-opacity:0.75;fill-rule:evenodd;stroke:#808080;stroke-width:0.99999928px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1"
+ d="m -175.39386,374.49044 v -7.03646"
id="path19120"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -48460,8 +48298,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path19122"
- d="m -174.39384,374.5 0,-8.00012 2.89384,0"
- style="fill:none;stroke:#ffffff;stroke-width:0.9999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline"
+ d="m -174.39384,374.5 v -8.00012 H -171.5"
+ style="display:inline;fill:none;stroke:#ffffff;stroke-width:0.9999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
<g
@@ -48472,36 +48310,27 @@
<g
transform="translate(-340.00002,-121.00001)"
id="g20805">
- <path
- sodipodi:type="arc"
- style="opacity:0.1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#e9e9af;stroke-width:0.49999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#e9e9af;stroke-width:0.49999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path32699"
- sodipodi:cx="464.5"
- sodipodi:cy="192.5"
- sodipodi:rx="1.75"
- sodipodi:ry="1.75"
- d="m 466.25,192.5 a 1.75,1.75 0 0 1 -1.75,1.75 1.75,1.75 0 0 1 -1.75,-1.75 1.75,1.75 0 0 1 1.75,-1.75 1.75,1.75 0 0 1 1.75,1.75 z"
- transform="matrix(1.9999998,0,0,2.0000014,-462.99991,-192.00026)" />
- <path
+ transform="matrix(1.9999998,0,0,2.0000014,-462.99991,-192.00026)"
+ cx="464.5"
+ cy="192.5"
+ r="1.75" />
+ <circle
transform="matrix(1.4285718,0,0,1.4285718,-197.57158,-82.000059)"
- d="m 466.25,192.5 a 1.75,1.75 0 0 1 -1.75,1.75 1.75,1.75 0 0 1 -1.75,-1.75 1.75,1.75 0 0 1 1.75,-1.75 1.75,1.75 0 0 1 1.75,1.75 z"
- sodipodi:ry="1.75"
- sodipodi:rx="1.75"
- sodipodi:cy="192.5"
- sodipodi:cx="464.5"
id="path32701"
- style="opacity:0.4;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#e1e08a;stroke-width:0.69999987;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#adac2f;stroke-width:1.16666663;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.4;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#e1e08a;stroke-width:0.69999987;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="464.5"
+ cy="192.5"
+ r="1.75" />
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#adac2f;stroke-width:1.16666663;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path32703"
- sodipodi:cx="464.5"
- sodipodi:cy="192.5"
- sodipodi:rx="1.75"
- sodipodi:ry="1.75"
- d="m 466.25,192.5 a 1.75,1.75 0 0 1 -1.75,1.75 1.75,1.75 0 0 1 -1.75,-1.75 1.75,1.75 0 0 1 1.75,-1.75 1.75,1.75 0 0 1 1.75,1.75 z"
- transform="matrix(0.8571429,0,0,0.8571429,67.857123,27.999992)" />
+ transform="matrix(0.8571429,0,0,0.8571429,67.857123,27.999992)"
+ cx="464.5"
+ cy="192.5"
+ r="1.75" />
</g>
<rect
y="71"
@@ -48509,7 +48338,7 @@
height="2"
width="2"
id="rect20813"
- style="fill:#f4f4d7;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#f4f4d7;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
</g>
<g
id="g41392">
@@ -48517,82 +48346,71 @@
transform="translate(-456.00027,338.00001)"
id="g20782">
<path
- style="fill:url(#linearGradient23241);fill-opacity:1;fill-rule:nonzero;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 472.50029,156.5 c -1.9309,0 -3,0.66961 -3,1.5 l 0,7 c 0,0.83039 1.0691,1.5 3,1.5 1.9309,0 3,-0.66961 3,-1.5 l 0,-7 c 0,-0.83039 -1.0691,-1.5 -3,-1.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23241);fill-opacity:1;fill-rule:nonzero;marker:none;enable-background:accumulate"
+ d="m 472.50029,156.5 c -1.9309,0 -3,0.66961 -3,1.5 v 7 c 0,0.83039 1.0691,1.5 3,1.5 1.9309,0 3,-0.66961 3,-1.5 v -7 c 0,-0.83039 -1.0691,-1.5 -3,-1.5 z"
id="path20784"
sodipodi:nodetypes="cccsccc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient23243);stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 470.50029,158.5 0,6.45352 c 0,0.54648 1.28413,0.46583 2,0.54648 1,0 2,0 2,-0.55753 l 0,-6.45352"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23243);stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 470.50029,158.5 v 6.45352 c 0,0.54648 1.28413,0.46583 2,0.54648 1,0 2,0 2,-0.55753 v -6.45352"
id="path20786"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.7;fill:url(#radialGradient23245);fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 472.50029,156.5 c -1.9309,0 -3,0.5 -3,1.5 l 0,7 c 0,0.83039 1.0691,1.5 3,1.5 1.9309,0 3,-0.66961 3,-1.5 l 0,-7 c 0,-1 -1.0691,-1.5 -3,-1.5 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:url(#radialGradient23245);fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;enable-background:accumulate"
+ d="m 472.50029,156.5 c -1.9309,0 -3,0.5 -3,1.5 v 7 c 0,0.83039 1.0691,1.5 3,1.5 1.9309,0 3,-0.66961 3,-1.5 v -7 c 0,-1 -1.0691,-1.5 -3,-1.5 z"
id="path20788"
sodipodi:nodetypes="cccsccc"
inkscape:connector-curvature="0" />
- <path
- sodipodi:type="arc"
- style="fill:#eff6ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.73959124;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;fill:#eff6ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.73959124;marker:none;enable-background:accumulate"
id="path20790"
- sodipodi:cx="108"
- sodipodi:cy="-222"
- sodipodi:rx="3.3084693"
- sodipodi:ry="1.2798798"
- d="M 111.30847,-222 A 3.3084693,1.2798798 0 0 1 108,-220.72012 3.3084693,1.2798798 0 0 1 104.69153,-222 3.3084693,1.2798798 0 0 1 108,-223.27988 3.3084693,1.2798798 0 0 1 111.30847,-222 Z"
- transform="matrix(0.9067635,0,0,1.3047091,374.56954,447.97555)" />
+ transform="matrix(0.9067635,0,0,1.3047091,374.56954,447.97555)"
+ cx="108"
+ cy="-222"
+ rx="3.3084693"
+ ry="1.2798798" />
<path
sodipodi:nodetypes="cccsccc"
id="path20793"
- d="m 472.50029,156.5 c -1.9309,0 -3,0.5 -3,1.5 l 0,7 c 0,0.83039 1.0691,1.5 3,1.5 1.9309,0 3.00029,-0.75001 3,-1.5 l 0,-7 c 0,-1 -1.0691,-1.5 -3,-1.5 z"
- style="fill:none;stroke:#162d50;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 472.50029,156.5 c -1.9309,0 -3,0.5 -3,1.5 v 7 c 0,0.83039 1.0691,1.5 3,1.5 1.9309,0 3.00029,-0.75001 3,-1.5 v -7 c 0,-1 -1.0691,-1.5 -3,-1.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#162d50;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<g
transform="translate(-116.99998,424.00001)"
id="g32690">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path32692"
- style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.05875278;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.4371593,0,0,0.4371565,71.294972,28.418283)" />
- <path
+ style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.05875278;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.4371593,0,0,0.4371565,71.294972,28.418283)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(-0.3851128,-0.04237784,0.04389507,-0.3737467,174.55414,129.70537)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path32694"
- style="opacity:0.6;fill:url(#linearGradient23247);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- sodipodi:type="arc" />
- <path
+ style="display:inline;opacity:0.6;fill:url(#linearGradient23247);fill-opacity:1;fill-rule:nonzero;stroke:none"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path20801"
- style="fill:none;stroke:url(#linearGradient23250);stroke-width:3.99999762;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.3000001,0,0,0.3000002,89.398992,44.603723)" />
+ style="fill:none;stroke:url(#linearGradient23250);stroke-width:3.99999762;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.3000001,0,0,0.3000002,89.398992,44.603723)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<rect
y="493"
@@ -48600,7 +48418,7 @@
height="16"
width="16"
id="rect20815"
- style="fill:none;stroke:none;stroke-width:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:1.5;marker:none;enable-background:accumulate" />
</g>
</g>
<g
@@ -48612,12 +48430,12 @@
height="16"
width="16"
id="rect17125"
- style="opacity:0;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="czsccccccccccccccccccccccccccccs"
id="path17128"
- d="m -21.25,443.25 c -1.25,-1.25 -3.5,0.25 -7.5,4 -4,3.75 -5.25,6.25 -4,7.5 1.013195,1.01319 3.75,2.5 3.75,2.5 l 0.25,0 0,-0.25 -2.75,-3.5 1,-1 3.5,2.75 0.25,0 0,-0.25 -2.75,-3.5 1,-1 3.5,2.75 0.25,0 0,-0.25 -2.75,-3.5 1,-1 3.5,2.75 0.25,0 0,-0.25 -2.75,-3.5 1,-1 3.5,2.75 0.25,0 0,-0.25 -2.75,-3.5 1,-1 3.5,2.75 0.25,0 0,-0.25 c 0,0 -2,-3.25 -2.5,-3.75 z"
- style="fill:none;stroke:#000000;stroke-width:1.60000002;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -21.25,443.25 c -1.25,-1.25 -3.5,0.25 -7.5,4 -4,3.75 -5.25,6.25 -4,7.5 1.013195,1.01319 3.75,2.5 3.75,2.5 h 0.25 V 457 l -2.75,-3.5 1,-1 3.5,2.75 h 0.25 V 455 l -2.75,-3.5 1,-1 3.5,2.75 h 0.25 V 453 l -2.75,-3.5 1,-1 3.5,2.75 h 0.25 V 451 l -2.75,-3.5 1,-1 3.5,2.75 h 0.25 V 449 l -2.75,-3.5 1,-1 3.5,2.75 h 0.25 V 447 c 0,0 -2,-3.25 -2.5,-3.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1.60000002;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient17135);fill-rule:evenodd;stroke:none"
@@ -48626,7 +48444,7 @@
sodipodi:nodetypes="czsccccccccccccccccccccccs"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#ffffff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#ffffff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m -21.75,443.75 c -1,-1 -3.5,1 -6.5,4 -3,3 -5,5.5 -4,6.5"
id="path17133"
sodipodi:nodetypes="czs"
@@ -48640,7 +48458,7 @@
id="g17228"
style="display:inline">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect17230"
width="16"
height="16"
@@ -48649,14 +48467,14 @@
<g
style="display:inline"
id="g17232"
- transform="translate(0.01612278,0)">
+ transform="translate(0.01612278)">
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path17234"
- d="m 17.453876,82.25 -1.219999,1.25 -10.4999998,0 -1.25,-1.25 -1e-7,-11.75 12.9814139,0 -0.01141,11.75 -5e-6,0 0,0 0,0 z"
- style="fill:url(#linearGradient17242);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 17.453876,82.25 16.233877,83.5 H 5.7338772 l -1.25,-1.25 -1e-7,-11.75 H 17.465291 l -0.01141,11.75 z"
+ style="fill:url(#linearGradient17242);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
@@ -48664,13 +48482,13 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path17236"
- d="M 15.983877,81.999998 5.9838772,82 l 0,-0.999998 9.9999998,-2e-6 0,0.999998 z"
+ d="M 15.983877,81.999998 5.9838772,82 V 81.000002 L 15.983877,81 Z"
style="fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:url(#linearGradient17244);stroke-width:0.99999976px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 5.4838772,82.5 0,-11 10.9999998,0 0,11 -10.9999998,0 z"
+ d="m 5.4838772,82.5 v -11 H 16.483877 v 11 z"
id="path17238"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -48678,7 +48496,7 @@
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<rect
- style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect17240"
width="1"
height="1"
@@ -48690,14 +48508,14 @@
</g>
</g>
<g
- transform="translate(20.96875,0)"
+ transform="translate(20.96875)"
id="g17279">
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- d="m 450.70226,498 6.81386,0 m -4.98487,-2.5 -1.82899,2.5 m 1.82899,2.5 -1.82899,-2.5"
- style="fill:none;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ d="m 450.70226,498 h 6.81386 m -4.98487,-2.5 -1.82899,2.5 m 1.82899,2.5 -1.82899,-2.5"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
id="path17281"
sodipodi:nodetypes="czcccc"
inkscape:connector-curvature="0" />
@@ -48707,15 +48525,15 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cc"
id="path17283"
- style="fill:none;stroke:#ffffff;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:none;stroke:#ffffff;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
d="m 453.28125,496 -0.75,1"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- d="m 452.78125,499 4.76119,0"
- style="fill:none;stroke:#ffffff;stroke-width:0.50000006;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ d="m 452.78125,499 h 4.76119"
+ style="display:inline;fill:none;stroke:#ffffff;stroke-width:0.50000006;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
id="path17286"
sodipodi:nodetypes="cz"
inkscape:connector-curvature="0" />
@@ -48726,14 +48544,14 @@
id="ICON_GAME"
transform="translate(-10,466.00001)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect33081"
width="16"
height="16"
x="162"
y="90" />
<rect
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#1a1a1a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#1a1a1a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect33085"
width="2.5"
height="1.75"
@@ -48742,8 +48560,8 @@
<path
sodipodi:nodetypes="ccccccc"
id="path33087"
- d="m 164.99996,98.99998 6,-2.5 6,2.5 0,2.75 -5.99999,3.24999 -6.00001,-3.24999 0,-2.75 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 164.99996,98.99998 6,-2.5 6,2.5 v 2.75 l -5.99999,3.24999 -6.00001,-3.24999 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<rect
y="91.999977"
@@ -48751,10 +48569,10 @@
height="7"
width="2"
id="rect32743"
- style="opacity:0.96000001;fill:none;stroke:#1a1a1a;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.96000001;fill:none;stroke:#1a1a1a;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
id="path33091"
- d="m 164.99996,98.99998 6,-2.5 6,2.5 0,0.5 -6,3 -6,-2.93442 0,-0.56558 z"
+ d="m 164.99996,98.99998 6,-2.5 6,2.5 v 0.5 l -6,3 -6,-2.93442 z"
style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:nodetypes="ccccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
@@ -48764,7 +48582,7 @@
<path
sodipodi:nodetypes="ccccc"
style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 164.99997,101.74998 -1e-5,-2.25 6,3 0.01,2.49885 -6.00995,-3.24885 -4e-5,0 0,0 0,0 z"
+ d="m 164.99997,101.74998 -1e-5,-2.25 6,3 0.01,2.49885 -6.00995,-3.24885 z"
id="path33093"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -48773,14 +48591,14 @@
<path
sodipodi:nodetypes="ccccc"
id="path33095"
- d="m 176.99996,101.74998 0,-2.25 -6,3 c 0,2.58362 0,1.9329 0,2.5 l 6,-3.25 z"
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89207077px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 176.99996,101.74998 v -2.25 l -6,3 c 0,2.58362 0,1.9329 0,2.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89207077px;marker:none;enable-background:accumulate"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<rect
- style="fill:#aa0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#aa0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect33097"
width="2"
height="1"
@@ -48792,9 +48610,9 @@
height="1"
width="2"
id="rect32749"
- style="fill:#ff2a2a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff2a2a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="opacity:0.5;fill:#ffaaaa;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#ffaaaa;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect32751"
width="1"
height="2"
@@ -48803,31 +48621,28 @@
<path
sodipodi:nodetypes="cccccc"
id="path32753"
- d="m 165.49996,99.49998 0,0 0,2 5.5,3 5.5,-3 0,-2"
+ d="m 165.49996,99.49998 v 0 2 l 5.5,3 5.5,-3 v -2"
style="fill:none;stroke:url(#linearGradient22081);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
<g
transform="translate(-114.00004,-232.99999)"
id="g32755">
<rect
- style="opacity:0.3;fill:none;stroke:#1a1a1a;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:none;stroke:#1a1a1a;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect33103"
width="2"
height="3.9642856"
x="285"
y="328.03571" />
- <path
+ <circle
transform="matrix(1.6666708,0,0,1.6666633,-190.66784,-215.66559)"
- d="m 287.5,325 a 1.5,1.5 0 0 1 -1.5,1.5 1.5,1.5 0 0 1 -1.5,-1.5 1.5,1.5 0 0 1 1.5,-1.5 1.5,1.5 0 0 1 1.5,1.5 z"
- sodipodi:ry="1.5"
- sodipodi:rx="1.5"
- sodipodi:cy="325"
- sodipodi:cx="286"
id="path33105"
- style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#550000;stroke-width:0.59999985;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#550000;stroke-width:0.59999985;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="286"
+ cy="325"
+ r="1.5" />
<rect
- style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect32759"
width="2"
height="3.5000324"
@@ -48839,33 +48654,30 @@
height="3.5000324"
width="1"
id="rect32761"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
- sodipodi:type="arc"
- style="fill:url(#linearGradient32335);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.59999985;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient32335);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.59999985;marker:none;enable-background:accumulate"
id="path32763"
- sodipodi:cx="286"
- sodipodi:cy="325"
- sodipodi:rx="1.5"
- sodipodi:ry="1.5"
- d="m 287.5,325 a 1.5,1.5 0 0 1 -1.5,1.5 1.5,1.5 0 0 1 -1.5,-1.5 1.5,1.5 0 0 1 1.5,-1.5 1.5,1.5 0 0 1 1.5,1.5 z"
- transform="matrix(1.333351,0,0,1.333345,-95.338377,-107.33714)" />
+ transform="matrix(1.333351,0,0,1.333345,-95.338377,-107.33714)"
+ cx="286"
+ cy="325"
+ r="1.5" />
<rect
y="331"
x="284"
height="1"
width="1"
id="rect32765"
- style="opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect32767"
width="2"
height="1"
x="285"
y="332" />
<rect
- style="opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect32769"
width="1"
height="1"
@@ -48885,12 +48697,12 @@
mask="none"
sodipodi:nodetypes="cccc"
id="path21596"
- d="m 168.25,102.75 -0.75,0.75 c -1,1 -0.75,1 -2,1 l -2.25,0"
- style="opacity:0.7;fill:none;stroke:#1a1a1a;stroke-width:2.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 168.25,102.75 -0.75,0.75 c -1,1 -0.75,1 -2,1 h -2.25"
+ style="opacity:0.7;fill:none;stroke:#1a1a1a;stroke-width:2.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#ececec;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 168.25,102.75 -0.75,0.75 c -1.25,1.17188 -0.75,1 -2,1 l -3,0"
+ d="m 168.25,102.75 -0.75,0.75 c -1.25,1.17188 -0.75,1 -2,1 h -3"
id="path21594"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
@@ -48902,15 +48714,15 @@
<path
sodipodi:nodetypes="cccccc"
id="path32379"
- d="m 35.5,65.5 6,0 0,11 -9,0 0,-8 3,-3 z"
- style="fill:url(#linearGradient31964);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient31966);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline"
+ d="m 35.5,65.5 h 6 v 11 h -9 v -8 z"
+ style="display:inline;fill:url(#linearGradient31964);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient31966);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
inkscape:connector-curvature="0" />
<g
transform="translate(0,-10)"
id="g34026">
<path
- style="fill:url(#linearGradient31968);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient31970);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline"
- d="m 29.5,71.5 6,0 0,11 -9,0 0,-8 3,-3 z"
+ style="display:inline;fill:url(#linearGradient31968);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient31970);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
+ d="m 29.5,71.5 h 6 v 11 h -9 v -8 z"
id="path32383"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
@@ -48920,7 +48732,7 @@
height="8"
width="6.0303202"
id="rect32389"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<g
style="fill:#fa0000;fill-opacity:1"
transform="matrix(-1,0,0,1,217.99997,-167)"
@@ -48929,8 +48741,8 @@
style="fill:#fa0000;fill-opacity:1"
id="g32393">
<path
- style="fill:#b41500;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 187.03125,239 0,2 2,0 0,-2 -2,0 z m 2,2 0,2 2,0 0,-2 -2,0 z m 0,2 -2,0 0,2 2,0 0,-2 z m 0,2 0,2 2,0 0,-2 -2,0 z m -2,0 -2,0 0,2 2,0 0,-2 z m 0,-2 0,-2 -2,0 0,2 2,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#b41500;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
+ d="m 187.03125,239 v 2 h 2 v -2 z m 2,2 v 2 h 2 v -2 z m 0,2 h -2 v 2 h 2 z m 0,2 v 2 h 2 v -2 z m -2,0 h -2 v 2 h 2 z m 0,-2 v -2 h -2 v 2 z"
transform="matrix(-1,0,0,1,375.01609,1)"
id="path32395"
inkscape:connector-curvature="0" />
@@ -48958,7 +48770,7 @@
transform="matrix(1.499975,0,0,1.4959551,100.24881,-314.20841)"
sodipodi:nodetypes="ccc"
id="path32405"
- style="fill:none;stroke:#000000;stroke-width:0.66757292px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1;display:inline;filter:url(#filter23214)"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:0.66757292px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1;filter:url(#filter23214)"
d="M -48.500031,260.50809 -46.5,260.5 l -3.1e-5,-1.99191"
inkscape:connector-curvature="0" />
<path
@@ -48970,13 +48782,13 @@
<path
sodipodi:nodetypes="cccc"
id="path32409"
- d="m 25.99997,75.00809 4,0 0,-4 -4,4 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+ d="m 25.99997,75.00809 h 4 v -4 z"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
</g>
<path
- d="m 26.5,64 0,8.5 6,0 -0.01513,4 9.01513,0 0,-11 -5.98487,0 -0.01513,-4 -6.5,0 -2.5,2.5 z"
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ d="m 26.5,64 v 8.5 h 6 l -0.01513,4 H 41.5 v -11 H 35.51513 L 35.5,61.5 H 29 Z"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path32414"
sodipodi:nodetypes="cccccccccc"
inkscape:connector-curvature="0" />
@@ -48985,15 +48797,15 @@
id="g33249">
<path
sodipodi:nodetypes="cccccccccccccccccccc"
- style="fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.29999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 35,78 0,1 5,0 0,-1 -5,0 z m 0,2 0,1 5,0 0,-1 -5,0 z m -1,2 0,1 6,0 0,-1 -6,0 z m 5,2 0,1 1,0 0,-1 -1,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.29999995;marker:none;enable-background:accumulate"
+ d="m 35,78 v 1 h 5 v -1 z m 0,2 v 1 h 5 v -1 z m -1,2 v 1 h 6 v -1 z m 5,2 v 1 h 1 v -1 z"
transform="translate(158,125)"
id="rect33241"
inkscape:connector-curvature="0" />
</g>
<path
- d="m 33.5,73.25 0,2.25001 M 36.25,66.5 l 4.25,0"
- style="fill:none;stroke:url(#linearGradient31974);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="m 33.5,73.25 v 2.25001 M 36.25,66.5 h 4.25"
+ style="display:inline;fill:none;stroke:url(#linearGradient31974);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
id="path33301"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
@@ -49008,12 +48820,12 @@
height="16"
width="16"
id="rect22431"
- style="opacity:0;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;enable-background:accumulate" />
<g
id="g22433">
<path
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#2a2512;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m -32,17 7,-3 6,2.5 0,3.74998 -6.99999,3.74999 L -32,20.74998 -32,17 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#2a2512;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m -32,17 7,-3 6,2.5 v 3.74998 L -25.99999,23.99997 -32,20.74998 Z"
id="path22435"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
@@ -49023,23 +48835,23 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
sodipodi:nodetypes="ccccccc"
style="fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m -32,17 6,-2.5 6,2.5 0,0.5 -6,3 -6,-2.93442 L -32,17 z"
+ d="m -32,17 6,-2.5 6,2.5 v 0.5 l -6,3 -6,-2.93442 z"
id="path22437"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
- style="fill:#2c281a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89207077px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M -24.99004,20.99883 -25,14.00002 -32,17 l 3.5,1.75 3.50996,2.24883 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#2c281a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89207077px;marker:none;enable-background:accumulate"
+ d="M -24.99004,20.99883 -25,14.00002 -32,17 l 3.5,1.75 z"
id="path22439"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path22441"
- d="M -24.99004,20.99883 -25,14 l 6,2.5 -3.5,1.75 -2.49004,2.74883 0,0 0,0 0,0 z"
- style="fill:#716844;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M -24.99004,20.99883 -25,14 l 6,2.5 -3.5,1.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#716844;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -49055,22 +48867,22 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
id="path22445"
- d="M -31.99999,20.74998 -32,17.5 l 6,3 0.01,3.49883 -6.00995,-3.24885 -4e-5,0 0,0 0,0 z"
- style="fill:#c6b77c;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M -31.99999,20.74998 -32,17.5 l 6,3 0.01,3.49883 -6.00995,-3.24885 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#c6b77c;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
- style="fill:#595235;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -19,20.25 0,-3.24998 -7,3.49998 c 0,2.58362 0,2.93288 0,3.49998 L -19,20.25 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#595235;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
+ d="M -19,20.25 V 17.00002 L -26,20.5 c 0,2.58362 0,2.93288 0,3.49998 z"
id="path22447"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
style="opacity:0.96000001;fill:none;stroke:url(#linearGradient22455);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
- d="m -31.5,17.5 0,2.99998 5.5,3 6.5,-3.49998 0,-2.99998"
+ d="m -31.5,17.5 v 2.99998 l 5.5,3 L -19.5,20 v -2.99998"
id="path22449"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
@@ -49078,7 +48890,7 @@
sodipodi:nodetypes="ccc"
id="path22451"
d="m -31.5,17.5 5.5,3 6.5,-3.5"
- style="fill:none;stroke:url(#linearGradient22457);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:url(#linearGradient22457);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -49087,7 +48899,7 @@
id="ICON_HAIR"
transform="matrix(-1,0,0,1,269,-561)">
<rect
- style="opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect18472"
width="16"
height="16"
@@ -49099,12 +48911,12 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccccc"
d="m 169.51126,596.5 c 3.98874,3.75 3.98874,7.5 3.98874,9 m 1.01472,-11 c 3.48528,5 2.98528,9.5 2.98874,11 M 166.5,600.5 c 2,1 3,3 3.00692,5"
- style="fill:none;stroke:url(#linearGradient18478);stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:url(#linearGradient18478);stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path18474"
inkscape:connector-curvature="0" />
<path
id="path18476"
- style="fill:none;stroke:url(#linearGradient18480);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:url(#linearGradient18480);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 169.51126,596.5 c 3.98874,3.75 3.98874,7 3.98874,9 m 1.01472,-11 c 3.48528,5 2.98528,9.5 2.98874,11 M 166.5,600.5 c 2,1 3,3 3.00692,5"
sodipodi:nodetypes="cccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -49126,7 +48938,7 @@
height="3"
width="7.8166504"
id="rect22717"
- style="opacity:0.5;fill:url(#linearGradient22880);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:url(#linearGradient22880);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate" />
<rect
transform="scale(-1,1)"
y="83"
@@ -49134,7 +48946,7 @@
height="1"
width="8.9931746"
id="rect21783"
- style="fill:url(#linearGradient22848);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient22848);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate" />
<rect
transform="scale(-1,1)"
y="83"
@@ -49142,7 +48954,7 @@
height="1"
width="2"
id="rect22877"
- style="fill:#333333;fill-opacity:0.81960784;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#333333;fill-opacity:0.81960784;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
</g>
<g
style="opacity:0.8"
@@ -49153,14 +48965,14 @@
height="16"
width="16"
id="rect22589"
- style="opacity:0.05;fill:url(#radialGradient22838);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.05;fill:url(#radialGradient22838);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<g
id="g22619">
<path
sodipodi:nodetypes="csscccc"
id="path21775"
d="m 422.51387,74.4375 c 2.14278,1.6383 5.29475,5.652 6.25,7.5625 0.5,1 1.05394,1.01957 1.5,0 0.875,-2 3.25,-4.75 4.75,-6 l -3.5,-4 c -1.25,1.83839 -2,3.25 -2.75,4.63304 -1.71617,-1.72583 -4.35859,-3.39262 -6.25,-4.13304"
- style="fill:url(#linearGradient22840);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient22842);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient22840);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient22842);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -49171,7 +48983,7 @@
<path
sodipodi:nodetypes="cccc"
id="path21777"
- d="m 422.51387,73.5 c 1.93909,0.815624 4.07262,1.664731 6,4 l 0.75,0 c 0.82427,-1.547027 1.51287,-2.596571 2.16161,-3.5"
+ d="m 422.51387,73.5 c 1.93909,0.815624 4.07262,1.664731 6,4 h 0.75 c 0.82427,-1.547027 1.51287,-2.596571 2.16161,-3.5"
style="fill:none;stroke:url(#linearGradient22844);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
@@ -49190,32 +49002,26 @@
<g
id="g22592"
transform="translate(434.01387,-281)">
- <path
- sodipodi:type="arc"
- style="fill:url(#linearGradient22850);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.82784271;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient22850);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.82784271;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path21781"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(0.4380641,0,0,0.4372851,-57.820839,302.39978)" />
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient22852);stroke-width:4.11671448;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ transform="matrix(0.4380641,0,0,0.4372851,-57.820839,302.39978)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient22852);stroke-width:4.11671448;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path21785"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(-0.2913522,0,0,0.2916372,38.453823,319.58486)" />
+ transform="matrix(-0.2913522,0,0,0.2916372,38.453823,319.58486)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
</g>
@@ -49232,130 +49038,97 @@
height="16"
width="16"
id="rect34912"
- style="opacity:0;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.29999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.29999995;marker:none;enable-background:accumulate" />
<g
id="g35549">
<g
transform="translate(167,137)"
id="g34916">
- <path
+ <circle
transform="translate(58.032932,-27.838387)"
- d="M 3.5,-32 A 3.5,3.5 0 0 1 0,-28.5 3.5,3.5 0 0 1 -3.5,-32 3.5,3.5 0 0 1 0,-35.5 3.5,3.5 0 0 1 3.5,-32 Z"
- sodipodi:ry="3.5"
- sodipodi:rx="3.5"
- sodipodi:cy="-32"
- sodipodi:cx="0"
id="path34918"
- style="fill:none;stroke:#1a1a1a;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:#000000;stroke-width:0.56022131;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#1a1a1a;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="0"
+ cy="-32"
+ r="3.5" />
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:0.56022131;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path34920"
- sodipodi:cx="0"
- sodipodi:cy="-32"
- sodipodi:rx="3.5"
- sodipodi:ry="3.5"
- d="M 3.5,-32 A 3.5,3.5 0 0 1 0,-28.5 3.5,3.5 0 0 1 -3.5,-32 3.5,3.5 0 0 1 0,-35.5 3.5,3.5 0 0 1 3.5,-32 Z"
- transform="matrix(1.4285714,0,0,1.4274429,55.5,-11.825777)" />
+ transform="matrix(1.4285714,0,0,1.4274429,55.5,-11.825777)"
+ cx="0"
+ cy="-32"
+ r="3.5" />
</g>
<g
id="g34922"
transform="matrix(1.1068703,0,0,1.0981766,160.5341,122.19554)">
- <path
- sodipodi:type="arc"
- style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="path34924"
- sodipodi:cx="0"
- sodipodi:cy="-32"
- sodipodi:rx="3.5"
- sodipodi:ry="3.5"
- d="M 3.5,-32 A 3.5,3.5 0 0 1 0,-28.5 3.5,3.5 0 0 1 -3.5,-32 3.5,3.5 0 0 1 0,-35.5 3.5,3.5 0 0 1 3.5,-32 Z"
- transform="matrix(1.1751782,0,0,1.1751782,56.000001,-1.2882925)" />
- <path
+ transform="matrix(1.1751782,0,0,1.1751782,56.000001,-1.2882925)"
+ cx="0"
+ cy="-32"
+ r="3.5" />
+ <circle
transform="matrix(0.9994022,0,0,0.9994021,56.002092,-6.9152216)"
- d="M 3.5,-32 A 3.5,3.5 0 0 1 0,-28.5 3.5,3.5 0 0 1 -3.5,-32 3.5,3.5 0 0 1 0,-35.5 3.5,3.5 0 0 1 3.5,-32 Z"
- sodipodi:ry="3.5"
- sodipodi:rx="3.5"
- sodipodi:cy="-32"
- sodipodi:cx="0"
id="path34926"
- style="fill:none;stroke:url(#linearGradient35583);stroke-width:1.17982781;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient35585);stroke-width:1.16643703;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient35583);stroke-width:1.17982781;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="0"
+ cy="-32"
+ r="3.5" />
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient35585);stroke-width:1.16643703;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path34928"
- sodipodi:cx="0"
- sodipodi:cy="-32"
- sodipodi:rx="3.5"
- sodipodi:ry="3.5"
- d="M 3.5,-32 A 3.5,3.5 0 0 1 0,-28.5 3.5,3.5 0 0 1 -3.5,-32 3.5,3.5 0 0 1 0,-35.5 3.5,3.5 0 0 1 3.5,-32 Z"
- transform="matrix(0.774689,0,0,0.7805148,56.890573,-14.812697)" />
- <path
- sodipodi:type="arc"
- style="fill:url(#linearGradient35587);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99581552;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ transform="matrix(0.774689,0,0,0.7805148,56.890573,-14.812697)"
+ cx="0"
+ cy="-32"
+ r="3.5" />
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient35587);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99581552;marker:none;enable-background:accumulate"
id="path34930"
- sodipodi:cx="0"
- sodipodi:cy="-32"
- sodipodi:rx="3.5"
- sodipodi:ry="3.5"
- d="M 3.5,-32 A 3.5,3.5 0 0 1 0,-28.5 3.5,3.5 0 0 1 -3.5,-32 3.5,3.5 0 0 1 0,-35.5 3.5,3.5 0 0 1 3.5,-32 Z"
- transform="matrix(1.0042021,0,0,1.0042021,55.985293,-6.7448206)" />
- <path
+ transform="matrix(1.0042021,0,0,1.0042021,55.985293,-6.7448206)"
+ cx="0"
+ cy="-32"
+ r="3.5" />
+ <circle
transform="matrix(0.9108044,0,0,0.9108044,55.985293,-9.7335486)"
- d="M 3.5,-32 A 3.5,3.5 0 0 1 0,-28.5 3.5,3.5 0 0 1 -3.5,-32 3.5,3.5 0 0 1 0,-35.5 3.5,3.5 0 0 1 3.5,-32 Z"
- sodipodi:ry="3.5"
- sodipodi:rx="3.5"
- sodipodi:cy="-32"
- sodipodi:cx="0"
id="path34932"
- style="fill:url(#linearGradient35589);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99581552;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient35589);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99581552;marker:none;enable-background:accumulate"
+ cx="0"
+ cy="-32"
+ r="3.5" />
</g>
<g
transform="translate(167,137)"
id="g34934">
- <path
+ <circle
transform="matrix(0.8571429,0,0,0.8571429,58.032932,-32.409816)"
- d="M 3.5,-32 A 3.5,3.5 0 0 1 0,-28.5 3.5,3.5 0 0 1 -3.5,-32 3.5,3.5 0 0 1 0,-35.5 3.5,3.5 0 0 1 3.5,-32 Z"
- sodipodi:ry="3.5"
- sodipodi:rx="3.5"
- sodipodi:cy="-32"
- sodipodi:cx="0"
id="path34936"
- style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient35591);stroke-width:1.40000081;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ cx="0"
+ cy="-32"
+ r="3.5" />
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient35591);stroke-width:1.40000081;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path34938"
- sodipodi:cx="0"
- sodipodi:cy="-32"
- sodipodi:rx="3.5"
- sodipodi:ry="3.5"
- d="M 3.5,-32 A 3.5,3.5 0 0 1 0,-28.5 3.5,3.5 0 0 1 -3.5,-32 3.5,3.5 0 0 1 0,-35.5 3.5,3.5 0 0 1 3.5,-32 Z"
- transform="matrix(0.7142853,0,0,0.7142853,58.032932,-36.981258)" />
- <path
+ transform="matrix(0.7142853,0,0,0.7142853,58.032932,-36.981258)"
+ cx="0"
+ cy="-32"
+ r="3.5" />
+ <circle
transform="translate(58.032932,-27.838387)"
- d="M 3.5,-32 A 3.5,3.5 0 0 1 0,-28.5 3.5,3.5 0 0 1 -3.5,-32 3.5,3.5 0 0 1 0,-35.5 3.5,3.5 0 0 1 3.5,-32 Z"
- sodipodi:ry="3.5"
- sodipodi:rx="3.5"
- sodipodi:cy="-32"
- sodipodi:cx="0"
id="path34940"
- style="fill:none;stroke:url(#linearGradient35593);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="fill:url(#linearGradient35595);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient35593);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="0"
+ cy="-32"
+ r="3.5" />
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient35595);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="path34942"
- sodipodi:cx="0"
- sodipodi:cy="-32"
- sodipodi:rx="3.5"
- sodipodi:ry="3.5"
- d="M 3.5,-32 A 3.5,3.5 0 0 1 0,-28.5 3.5,3.5 0 0 1 -3.5,-32 3.5,3.5 0 0 1 0,-35.5 3.5,3.5 0 0 1 3.5,-32 Z"
- transform="matrix(0.8571429,0,0,0.8571429,58.032932,-32.409816)" />
+ transform="matrix(0.8571429,0,0,0.8571429,58.032932,-32.409816)"
+ cx="0"
+ cy="-32"
+ r="3.5" />
</g>
</g>
</g>
@@ -49372,20 +49145,20 @@
height="16"
width="16"
id="rect35714"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="translate(231.01612,149)"
id="g34102"
- style="opacity:0.96000001;display:inline">
+ style="display:inline;opacity:0.96000001">
<path
sodipodi:nodetypes="ccccccc"
id="path35717"
- d="m -187.24592,-178.75235 -5.0202,5.00235 -3,2 -1,-1 2,-3 5.0202,-5.00235 2,2 z"
+ d="m -187.24592,-178.75235 -5.0202,5.00235 -3,2 -1,-1 2,-3 5.0202,-5.00235 z"
style="fill:url(#linearGradient35740);fill-opacity:1;fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m -187.24592,-178.75235 -5.2702,5.25235 -3,2 -1,-1 2,-3 5.2702,-5.25235 2,2 z"
+ style="fill:none;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m -187.24592,-178.75235 -5.2702,5.25235 -3,2 -1,-1 2,-3 5.2702,-5.25235 z"
id="path34105"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
@@ -49393,43 +49166,43 @@
sodipodi:nodetypes="ccc"
id="path34107"
d="m -195.4858,-172.48532 1.46968,-2.51468 4.26612,-4.25"
- style="fill:none;stroke:#ffffff;stroke-width:0.85000002;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#ffffff;stroke-width:0.85000002;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
<path
id="path35721"
- d="m 44.5,-37.5 -2,2 1,1 -2,2 -4,0 -1,1 7,7 1,-1 0,-4 2,-2 1,1 1.5098,-1.5098 0.4902,-0.4902 -5,-5 z"
- style="fill:url(#linearGradient35742);fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 44.5,-37.5 -2,2 1,1 -2,2 h -4 l -1,1 7,7 1,-1 v -4 l 2,-2 1,1 1.5098,-1.5098 L 49.5,-32.5 Z"
+ style="fill:url(#linearGradient35742);fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="cccccccccccccc"
inkscape:connector-curvature="0" />
<path
id="path35723"
d="m 44.5,-29.5 -3,-3"
- style="fill:none;stroke:url(#linearGradient35744);stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:url(#linearGradient35744);stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
id="path35725"
d="m 46.5,-31.5 -3,-3"
- style="fill:none;stroke:url(#linearGradient35746);stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:url(#linearGradient35746);stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path35729"
- d="m 43.5,-33.5 -1.75,1.75 -4,0 -0.25,0.25"
- style="fill:none;stroke:#ffffff;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 43.5,-33.5 -1.75,1.75 h -4 l -0.25,0.25"
+ style="fill:none;stroke:#ffffff;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
id="path35731"
d="m 43.5,-35.5 1,-1"
- style="fill:none;stroke:#ffffff;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
id="path35733"
- d="m 42,-32 0,0 2,-2 2.5,2.5 -2,2 L 42,-32"
+ d="m 42,-32 v 0 l 2,-2 2.5,2.5 -2,2 L 42,-32"
style="fill:url(#linearGradient35750);fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient35752);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:url(#linearGradient35752);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 44.55,-36.45 3.95,3.95"
id="path34886"
sodipodi:nodetypes="cc"
@@ -49438,16 +49211,16 @@
sodipodi:nodetypes="cc"
id="path34890"
d="m 43.5,-35.5 3.715625,3.66875"
- style="fill:none;stroke:url(#linearGradient35754);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:url(#linearGradient35754);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient35756);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:url(#linearGradient35756);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 41.55,-31.45 2.2,2.2"
id="path34894"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.3;fill:none;stroke:#ffffff;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.3;fill:none;stroke:#ffffff;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 45.5,-31.5 -1.25,1.25"
id="path34906"
sodipodi:nodetypes="cc"
@@ -49456,11 +49229,11 @@
sodipodi:nodetypes="cc"
id="path34908"
d="M 48.65,-32.65 47.4,-31.4"
- style="opacity:0.3;fill:none;stroke:#ffffff;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.3;fill:none;stroke:#ffffff;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient35772);fill-rule:evenodd;stroke:none"
- d="m 41.5,-32.25 -4.25,0 6.5,6.25 0,-4"
+ d="m 41.5,-32.25 h -4.25 l 6.5,6.25 v -4"
id="path35770"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
@@ -49468,15 +49241,15 @@
sodipodi:nodetypes="cc"
id="path35727"
d="m 38.25,-31.25 5.5,5.5"
- style="fill:none;stroke:url(#linearGradient35748);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:url(#linearGradient35748);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
<g
- style="opacity:0.65;display:inline"
+ style="display:inline;opacity:0.65"
id="ICON_SNAP_OFF"
transform="translate(-334,109.04419)">
<path
- style="fill:#ff0000;fill-opacity:0.75;fill-rule:evenodd;stroke:url(#linearGradient68937);stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff0000;fill-opacity:0.75;fill-rule:evenodd;stroke:url(#linearGradient68937);stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 433.14375,58.950006 -2.75,2.75"
id="path11878"
sodipodi:nodetypes="cc"
@@ -49485,7 +49258,7 @@
sodipodi:nodetypes="cc"
id="path11880"
d="m 425.39375,56.700006 2.75,-2.75"
- style="fill:#ff0000;fill-opacity:0.75;fill-rule:evenodd;stroke:url(#linearGradient68939);stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ style="display:inline;fill:#ff0000;fill-opacity:0.75;fill-rule:evenodd;stroke:url(#linearGradient68939);stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<g
id="g11883"
@@ -49495,7 +49268,7 @@
sodipodi:nodetypes="czzc"
id="path11885"
d="m -32.20822,242.24999 2,-2 c 3.74999,-3.75 8.74999,1.25 5,5 l -2,2"
- style="fill:none;stroke:url(#linearGradient68941);stroke-width:2.20000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient68941);stroke-width:2.20000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<rect
y="48"
@@ -49503,7 +49276,7 @@
height="16"
width="16"
id="rect51637"
- style="opacity:0;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none" />
<g
transform="translate(440,-188)"
id="g11891">
@@ -49517,7 +49290,7 @@
sodipodi:nodetypes="csc"
id="path11897"
d="m -3.4321903,240.29419 c 0.82637,1.47069 0.7752067,3.63228 -0.8178097,5.23203 l -2.2237373,2.23314"
- style="opacity:0.3;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ style="display:inline;opacity:0.3;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -49528,10 +49301,10 @@
sodipodi:nodetypes="czs"
id="path11901"
d="m 425.25,55.75 4.25,-4.25 c 1.59639,-1.596386 4.02931,-1.32637 5.5,-0.5"
- style="fill:none;stroke:url(#linearGradient68943);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient68943);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient68945);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient68945);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 435,56 -4.75,4.75"
id="path11905"
sodipodi:nodetypes="cc"
@@ -49543,7 +49316,7 @@
id="ICON_SNAP_ON"
style="display:inline">
<rect
- style="opacity:0;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
id="rect11909"
width="16"
height="16"
@@ -49553,7 +49326,7 @@
id="g11911"
transform="translate(440,-187.9558)">
<path
- style="fill:none;stroke:#000000;stroke-width:3.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:3.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m -15,245 4.79178,-4.70581 c 3.7837908,-3.7159 8.7837908,1.2841 5,5 L -10,250"
id="path51649"
sodipodi:nodetypes="czzc"
@@ -49562,10 +49335,10 @@
sodipodi:nodetypes="czzc"
id="path51651"
d="m -14.5,244.5 4.29178,-4.20581 c 3.7877432,-3.71186 8.7877432,1.28814 5,5 L -9.5,249.5"
- style="fill:none;stroke:url(#linearGradient68947);stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient68947);stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:#ff0000;fill-opacity:0.75;fill-rule:evenodd;stroke:url(#linearGradient68949);stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff0000;fill-opacity:0.75;fill-rule:evenodd;stroke:url(#linearGradient68949);stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="M -6.75,246.75 -9.5,249.5"
id="path51653"
sodipodi:nodetypes="cc"
@@ -49574,16 +49347,16 @@
sodipodi:nodetypes="cc"
id="path51655"
d="m -14.5,244.5 2.75,-2.75"
- style="fill:#ff0000;fill-opacity:0.75;fill-rule:evenodd;stroke:url(#linearGradient68951);stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:#ff0000;fill-opacity:0.75;fill-rule:evenodd;stroke:url(#linearGradient68951);stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#481608;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#481608;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m -10.95822,242.99999 -2,-2"
id="path11922"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.85;fill:none;stroke:url(#linearGradient68953);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.85;fill:none;stroke:url(#linearGradient68953);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m -14.70822,243.74999 4.25,-4.25 c 1.5,-1.49999 3.5,-1.5 5,-0.75"
id="path11924"
sodipodi:nodetypes="czs"
@@ -49592,19 +49365,19 @@
sodipodi:nodetypes="cc"
id="path11926"
d="m -5.95822,247.99999 -2,-2"
- style="fill:none;stroke:#481608;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#481608;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
id="path11928"
d="m -4.95822,243.99999 -4.5,4.5"
- style="opacity:0.85;fill:none;stroke:url(#linearGradient68955);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.85;fill:none;stroke:url(#linearGradient68955);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cs"
id="path11930"
d="m -4.0503493,245.73202 c 1.5801026,-1.61251 1.6441797,-3.76134 0.8178097,-5.23203"
- style="opacity:0.1;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.1;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -49612,7 +49385,7 @@
id="ICON_SNAP_SURFACE"
transform="translate(21,-19)">
<g
- style="opacity:0.8;display:inline"
+ style="display:inline;opacity:0.8"
mask="url(#mask69005)"
transform="matrix(0.646567,0,0,0.644332,-233.54872,129.49706)"
id="g36675">
@@ -49623,45 +49396,36 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path36680"
- style="fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.14285731;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.7428442,0,0,0.7454212,30.426387,135.62554)" />
- <path
- sodipodi:type="arc"
- style="opacity:0.8;fill:url(#linearGradient51774);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.14285731;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.7428442,0,0,0.7454212,30.426387,135.62554)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
+ style="display:inline;opacity:0.8;fill:url(#linearGradient51774);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path36682"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(-0.6852904,-0.07823249,0.07810925,-0.6899628,209.72326,315.34566)" />
- <path
+ transform="matrix(-0.6852904,-0.07823249,0.07810925,-0.6899628,209.72326,315.34566)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path36684"
- style="fill:none;stroke:url(#linearGradient51776);stroke-width:1.33333385;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
- sodipodi:type="arc"
- transform="matrix(0.6367237,0,0,0.6389323,44.434295,148.19125)" />
+ style="display:inline;fill:none;stroke:url(#linearGradient51776);stroke-width:1.33333385;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.6367237,0,0,0.6389323,44.434295,148.19125)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
@@ -49669,7 +49433,7 @@
id="g51790"
style="display:inline">
<rect
- style="opacity:0;fill-opacity:1;display:inline"
+ style="display:inline;opacity:0;fill-opacity:1"
id="rect22754"
width="16"
height="16"
@@ -49680,11 +49444,11 @@
<path
sodipodi:nodetypes="czscc"
id="path22715"
- d="m 219.36593,351.65 0,-3.5 c 0,-2.025 1.25907,-2.525 2.50907,-2.525 1.25,0 2.5,0.5 2.49092,2.525 l 0,3.5"
- style="fill:none;stroke:#000000;stroke-width:3.79999995;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ d="m 219.36593,351.65 v -3.5 c 0,-2.025 1.25907,-2.525 2.50907,-2.525 1.25,0 2.5,0.5 2.49092,2.525 v 3.5"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:3.79999995;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient51804);stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient51804);stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 219.36593,351.65 0.009,-3.275 c 0.006,-2.25 1.24773,-2.74375 2.5,-2.75 1.25227,-0.006 2.5,0.5 2.50907,2.725 l -0.0182,3.3"
id="path22717"
sodipodi:nodetypes="czscc"
@@ -49692,41 +49456,41 @@
<path
sodipodi:nodetypes="cc"
id="path22719"
- d="m 224.35595,351.24375 0,0.53125"
- style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient51806);stroke-width:2.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 224.35595,351.24375 V 351.775"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient51806);stroke-width:2.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient51808);stroke-width:2.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 219.40595,351.72527 0,-0.50027"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient51808);stroke-width:2.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 219.40595,351.72527 V 351.225"
id="path22721"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
id="path22723"
- d="m 220.7625,350.275 -2,0"
- style="fill:none;stroke:#803300;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 220.7625,350.275 h -2"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#803300;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#803300;stroke-width:1.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 225.61593,350.15 -2.25,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#803300;stroke-width:1.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 225.61593,350.15 h -2.25"
id="path22725"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="czs"
id="path22727"
- d="m 218.61592,352.15 0,-4 c 0,-2.025 1.21963,-2.89049 2.75,-3.25"
- style="opacity:0.8;fill:none;stroke:url(#linearGradient51810);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ d="m 218.61592,352.15 v -4 c 0,-2.025 1.21963,-2.89049 2.75,-3.25"
+ style="display:inline;opacity:0.8;fill:none;stroke:url(#linearGradient51810);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.9;fill:none;stroke:url(#linearGradient51812);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
- d="m 223.61593,352.15 0,-3.75115 c 0,-1.35618 -0.49093,-2.02385 -1.24093,-2.02385"
+ style="display:inline;opacity:0.9;fill:none;stroke:url(#linearGradient51812);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 223.61593,352.15 v -3.75115 c 0,-1.35618 -0.49093,-2.02385 -1.24093,-2.02385"
id="path22730"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.05;fill:none;stroke:#000000;stroke-width:0.73376155;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ style="display:inline;opacity:0.05;fill:none;stroke:#000000;stroke-width:0.73376155;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 225.24243,350.48448 c -0.001,-0.14034 0.0155,-2.61281 0,-2.75 -0.10562,-0.93297 -0.53761,-1.74673 -1.11525,-2.29782"
id="path22732"
sodipodi:nodetypes="css"
@@ -49734,8 +49498,8 @@
<path
sodipodi:nodetypes="cc"
id="path22738"
- d="m 220.11593,347.65 0,3.125"
- style="opacity:0.02000002;fill:none;stroke:#000000;stroke-width:0.84999996;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ d="m 220.11593,347.65 v 3.125"
+ style="display:inline;opacity:0.02000002;fill:none;stroke:#000000;stroke-width:0.84999996;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -49750,7 +49514,7 @@
height="16"
width="16"
id="rect19373"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
style="opacity:0.6;stroke:#162d50"
id="g19375"
@@ -49762,7 +49526,7 @@
sodipodi:nodetypes="cc"
id="path19377"
d="m 253.41833,95.5 c 1.5,1.5 1.5,3.5 0,5"
- style="opacity:0.9;fill:none;stroke:#162d50;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.9;fill:none;stroke:#162d50;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
@@ -49771,7 +49535,7 @@
sodipodi:nodetypes="cc"
id="path19379"
d="m 255.41833,93.5 c 2.75,2.75 2.75,6.25 0,9"
- style="opacity:0.9;fill:none;stroke:#162d50;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.9;fill:none;stroke:#162d50;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
<path
@@ -49781,26 +49545,26 @@
sodipodi:nodetypes="cc"
id="path19381"
d="m 267.5,454.5 c 1.5,1.5 1.5,3.5 0,5"
- style="opacity:0.9;fill:none;stroke:#ffffff;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.9;fill:none;stroke:#ffffff;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
id="path19385"
- d="m 264.58167,451.5 -1.08167,0 -3,3 c 0,-0.554 -0.446,-1 -1,-1 l -1,0 c -0.554,0 -1,0.446 -1,1 l 0,5 c 0,0.554 0.446,1 1,1 l 1,0 c 0.554,0 1,-0.446 1,-1 l 3,3 1.08167,0 0,-11 z"
- style="fill:url(#linearGradient20275);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+ d="M 264.58167,451.5 H 263.5 l -3,3 c 0,-0.554 -0.446,-1 -1,-1 h -1 c -0.554,0 -1,0.446 -1,1 v 5 c 0,0.554 0.446,1 1,1 h 1 c 0.554,0 1,-0.446 1,-1 l 3,3 h 1.08167 z"
+ style="display:inline;fill:url(#linearGradient20275);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
sodipodi:nodetypes="ccccccccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
id="path19455"
- d="m 258.5,459.5 1,0 1,-1 3.25,3"
- style="fill:none;stroke:url(#linearGradient20309);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ d="m 258.5,459.5 h 1 l 1,-1 3.25,3"
+ style="display:inline;fill:none;stroke:url(#linearGradient20309);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- style="opacity:0.5;fill:none;stroke:url(#linearGradient20269);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 260.5,454.5 0,4.9091"
+ style="opacity:0.5;fill:none;stroke:url(#linearGradient20269);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 260.5,454.5 v 4.9091"
id="path19387"
inkscape:connector-curvature="0" />
<path
@@ -49809,7 +49573,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cc"
style="fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 258.5,455.5 1,0"
+ d="m 258.5,455.5 h 1"
id="path19389"
inkscape:connector-curvature="0" />
<path
@@ -49823,7 +49587,7 @@
inkscape:connector-curvature="0" />
<path
id="path19393"
- d="m 258.5,454.63598 1,0"
+ d="m 258.5,454.63598 h 1"
style="fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
sodipodi:nodetypes="cc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -49840,7 +49604,7 @@
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.9;fill:none;stroke:#ffffff;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.9;fill:none;stroke:#ffffff;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 269.5,452.5 c 2.75,2.75 2.75,6.25 0,9"
id="path19397"
sodipodi:nodetypes="cc"
@@ -49850,12 +49614,12 @@
inkscape:connector-curvature="0" />
<path
id="path20281"
- d="m 263.5,452.5 0,9"
+ d="m 263.5,452.5 v 9"
style="fill:none;stroke:url(#linearGradient20283);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:url(#linearGradient20303);stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
- d="m 258.5,454.3 0,5.4"
+ d="m 258.5,454.3 v 5.4"
id="path20301"
inkscape:connector-curvature="0" />
</g>
@@ -49868,7 +49632,7 @@
height="16"
width="16"
id="rect38641"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g36101">
<g
@@ -49880,14 +49644,14 @@
id="g38620">
<path
id="path38622"
- d="m 329.5,-108.25 -5.5,1.75 0,7.74988 6,2.09544 5,-2.84532 0,-6.75 -5.5,-2 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000167;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 329.5,-108.25 -5.5,1.75 v 7.74988 l 6,2.09544 5,-2.84532 v -6.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000167;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccc"
- style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 324,-99.00012 0,-7.49988 6,-1.75 0,11.5 -0.5,0.25 -5.5,-2.50012 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
+ d="M 324,-99.00012 V -106.5 l 6,-1.75 v 11.5 l -0.5,0.25 z"
id="path38624"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -49900,8 +49664,8 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
- style="fill:#787878;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 156,79.5 0,-7 -5,-1.75 0,11.5 5,-2.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#787878;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
+ d="m 156,79.5 v -7 l -5,-1.75 v 11.5 z"
id="path38628"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
@@ -49910,14 +49674,14 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
sodipodi:nodetypes="ccccc"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 145,72.5 5.5,-2 5.5,2 -5.5,2.5 -5.5,-2.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
+ d="m 145,72.5 5.5,-2 5.5,2 -5.5,2.5 z"
id="path38630"
inkscape:connector-curvature="0" />
</g>
<path
style="fill:none;stroke:url(#linearGradient38718);stroke-width:0.99999982px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 334.5,-106.5 0,6.75 -5,2.75 -5,-2.25012 0,-7.24988"
+ d="m 334.5,-106.5 v 6.75 l -5,2.75 -5,-2.25012 V -106.5"
id="path38632"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
@@ -49928,7 +49692,7 @@
id="path38634"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.19199997;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.19199997;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
id="rect38636"
width="1"
height="7.75"
@@ -49940,7 +49704,7 @@
height="7.75"
width="1"
id="rect22687"
- style="opacity:0.09599998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.09599998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate" />
</g>
<rect
rx="0"
@@ -49950,7 +49714,7 @@
height="3.0001416"
width="2.9999485"
id="rect38643"
- style="fill:none;stroke:#783e00;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#783e00;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<rect
rx="0"
ry="0"
@@ -49959,9 +49723,9 @@
height="3.0001416"
width="2.9999485"
id="rect38645"
- style="fill:none;stroke:#783e00;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#783e00;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:none;stroke:#783e00;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#783e00;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect38647"
width="2.9999485"
height="3.0001416"
@@ -49970,7 +49734,7 @@
ry="0"
rx="0" />
<rect
- style="fill:none;stroke:#783e00;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#783e00;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect38649"
width="2.9999485"
height="3.0001416"
@@ -49979,7 +49743,7 @@
ry="0"
rx="0" />
<rect
- style="opacity:0.06000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.06000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect38754"
width="3.9785564"
height="4"
@@ -49993,24 +49757,24 @@
height="2.0000772"
width="1.9999485"
id="rect39152"
- style="fill:#ffd4a5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffd4a5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="cccc"
id="rect28386"
- d="m 28,519.50001 -0.5,0 0,-3.00014 2.99995,0"
- style="fill:none;stroke:#462500;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 28,519.50001 h -0.5 v -3.00014 h 2.99995"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#462500;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#462500;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 28,524.50001 -0.5,0 0,3.00014 2.99995,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#462500;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 28,524.50001 h -0.5 v 3.00014 h 2.99995"
id="path28390"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
id="path28392"
- d="m 33.5,527.75001 -9e-5,1.75004 3.00014,0 -5e-5,-1.75004"
- style="fill:none;stroke:#462500;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 33.5,527.75001 -9e-5,1.75004 h 3.00014 l -5e-5,-1.75004"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#462500;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<rect
y="517.00006"
@@ -50018,9 +49782,9 @@
height="4"
width="3.9785564"
id="rect37868-0-2"
- style="opacity:0.12000002;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.12000002;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffd4a5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffd4a5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect28536"
width="1.9999485"
height="2.0000772"
@@ -50029,7 +49793,7 @@
ry="0"
rx="0" />
<rect
- style="fill:#ffd4a5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffd4a5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect28538"
width="1.9999485"
height="2.0000772"
@@ -50043,9 +49807,9 @@
height="1.9999889"
width="3.9785564"
id="rect38756"
- style="opacity:0.12000002;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.12000002;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffd4a5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffd4a5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect28540"
width="1.9999485"
height="2.0000772"
@@ -50059,7 +49823,7 @@
id="ICON_IMGDISPLAY"
transform="translate(-21,2)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect39088"
width="16"
height="16"
@@ -50080,14 +49844,14 @@
height="6"
width="5"
id="rect39115"
- style="fill:url(#linearGradient39281);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient39281);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<g
style="fill:#333333"
- transform="matrix(-1,0,0,-1,352,144)"
+ transform="rotate(180,176,72)"
id="g39117" />
<rect
ry="0"
- style="fill:none;stroke:url(#linearGradient39283);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient39283);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect39119"
width="2.9999952"
height="4.0000029"
@@ -50097,7 +49861,7 @@
<path
sodipodi:nodetypes="cccccc"
id="path39123"
- d="m 183.25,82.5 c 0.25,0 1.5,0 1.5,0 l -1.5,0 z m 0,2 1.5,0 -1.5,0 z"
+ d="m 183.25,82.5 c 0.25,0 1.5,0 1.5,0 z m 0,2 h 1.5 z"
style="fill:none;stroke:#333333;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
@@ -50108,7 +49872,7 @@
id="g39127"
transform="translate(8,8)">
<rect
- style="fill:url(#linearGradient39285);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient39285);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect39129"
width="5"
height="6"
@@ -50117,17 +49881,17 @@
ry="0" />
<g
id="g39131"
- transform="matrix(-1,0,0,-1,352,144)"
+ transform="rotate(180,176,72)"
style="fill:#333333" />
<path
- style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 177,73.02344 0,1 -1,0 0,-1 1,0 z m -1,1 0,1 -1,0 0,-1 1,0 z m -1,0 -1,0 0,-1 1,0 0,1 z m 0,1 0,1 -1,0 0,-1 1,0 z m 0,1 1,0 0,1 -1,0 0,-1 z m 0,1 0,1 -1,-1 1,0 z m 1,0 1,0 0,1 -1,0 0,-1 z m 1,0 0,-1 1,0 0,1 -1,0 z m 0,-1 -1,0 0,-1 1,0 0,1 z m 0,-1 0,-1 1,0 0,1 -1,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate"
+ d="m 177,73.02344 v 1 h -1 v -1 z m -1,1 v 1 h -1 v -1 z m -1,0 h -1 v -1 h 1 z m 0,1 v 1 h -1 v -1 z m 0,1 h 1 v 1 h -1 z m 0,1 v 1 l -1,-1 z m 1,0 h 1 v 1 h -1 z m 1,0 v -1 h 1 v 1 z m 0,-1 h -1 v -1 h 1 z m 0,-1 v -1 h 1 v 1 z"
id="rect39177"
sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient39287);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 174.52599,77.52344 0,-4.000002 2.99999,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient39287);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 174.52599,77.52344 v -4.000002 h 2.99999"
id="rect39133"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
@@ -50146,14 +49910,14 @@
height="6"
width="5"
id="rect39153"
- style="fill:url(#linearGradient39289);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient39289);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<g
style="fill:#333333"
- transform="matrix(-1,0,0,-1,352,144)"
+ transform="rotate(180,176,72)"
id="g39155" />
<rect
ry="0"
- style="fill:none;stroke:url(#linearGradient39291);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient39291);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect39157"
width="2.9999952"
height="4.0000029"
@@ -50162,13 +49926,13 @@
</g>
</g>
<g
- transform="translate(-7,0)"
+ transform="translate(-7)"
id="g39163">
<g
id="g39165"
transform="translate(8,8)">
<rect
- style="fill:url(#linearGradient39293);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient39293);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect39167"
width="5"
height="6"
@@ -50177,7 +49941,7 @@
ry="0" />
<g
id="g39169"
- transform="matrix(-1,0,0,-1,352,144)"
+ transform="rotate(180,176,72)"
style="fill:#333333" />
<rect
y="73.523438"
@@ -50185,7 +49949,7 @@
height="4.0000029"
width="2.9999952"
id="rect39171"
- style="fill:none;stroke:url(#linearGradient39295);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient39295);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
ry="0" />
</g>
</g>
@@ -50196,32 +49960,32 @@
transform="translate(168,-37)"
id="ICON_SNAP_VERTEX">
<g
- style="opacity:0.5;display:inline"
+ style="display:inline;opacity:0.5"
id="g39108"
transform="translate(69,-142)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect39110"
width="16"
height="16"
x="-64"
y="336" />
<g
- transform="translate(1,0)"
+ transform="translate(1)"
id="g39112">
<g
transform="translate(-386,446.5)"
id="g39114">
<path
id="path39116"
- d="m 329.5,-108.25 -5.5,2 0,6.75 5.5,3 5.5,-3 0,-6.75 -5.5,-2 z"
- style="fill:#552200;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 329.5,-108.25 -5.5,2 v 6.75 l 5.5,3 5.5,-3 v -6.75 z"
+ style="fill:#552200;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccc"
- style="fill:#c9c9c9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06898749px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 324,-99.5 0,-7 6,-1.75 0,11.5 -0.5,0.25 -5.5,-3 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#c9c9c9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06898749px;marker:none;enable-background:accumulate"
+ d="m 324,-99.5 v -7 l 6,-1.75 v 11.5 l -0.5,0.25 z"
id="path39118"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -50234,8 +49998,8 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
- style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89401144px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 156,79.5 0,-7 -5,-1.75 0,11.5 5,-2.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89401144px;marker:none;enable-background:accumulate"
+ d="m 156,79.5 v -7 l -5,-1.75 v 11.5 z"
id="path39122"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
@@ -50245,26 +50009,26 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
sodipodi:nodetypes="ccccc"
style="fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 145,72.5 5.5,-2 5.5,2 -5.5,2.5 -5.5,-2.5 z"
+ d="m 145,72.5 5.5,-2 5.5,2 -5.5,2.5 z"
id="path39124"
inkscape:connector-curvature="0" />
</g>
<path
style="fill:none;stroke:url(#linearGradient39008);stroke-width:0.99999982px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 334.5,-106.5 0,6.75 -5,2.75 -5,-2.75 0,-6.75"
+ d="m 334.5,-106.5 v 6.75 l -5,2.75 -5,-2.75 v -6.75"
id="path39126"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
</g>
<rect
- style="fill:url(#linearGradient39010);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient39010);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
id="rect39128"
width="1"
height="7.75"
x="-57"
y="342" />
<path
- style="fill:none;stroke:url(#linearGradient39012);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:url(#linearGradient39012);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m -61,340.65468 c 0,0 4.5,2 4.5,2 l 4.5,-2"
id="path39130"
sodipodi:nodetypes="ccc"
@@ -50277,14 +50041,14 @@
height="4"
width="3.9785564"
id="rect37868-0-11"
- style="opacity:0.12000002;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.12000002;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
y="204"
x="7.0214434"
height="3"
width="3.9785564"
id="rect37868-0-7"
- style="opacity:0.12000002;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.12000002;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<g
style="display:inline"
id="g39132"
@@ -50293,8 +50057,8 @@
id="g39134">
<path
id="path39136"
- d="m 115.18474,49.326679 0.0443,0 c 0.98532,0 1.77856,0.793241 1.77856,1.778566 l 0,1.46e-4 c 0,0.985326 -0.79324,1.778566 -1.77856,1.778566 l -0.0443,0 c -0.98533,0 -1.77857,-0.79324 -1.77857,-1.778566 l 0,-1.46e-4 c 0,-0.985325 0.79324,-1.778566 1.77857,-1.778566 z"
- style="fill:none;stroke:#000000;stroke-width:1.78961492;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 115.18474,49.326679 h 0.0443 c 0.98532,0 1.77856,0.793241 1.77856,1.778566 v 1.46e-4 c 0,0.985326 -0.79324,1.778566 -1.77856,1.778566 h -0.0443 c -0.98533,0 -1.77857,-0.79324 -1.77857,-1.778566 v -1.46e-4 c 0,-0.985325 0.79324,-1.778566 1.77857,-1.778566 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1.78961492;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
@@ -50302,15 +50066,15 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path39138"
d="m 116.40772,49.919572 c -0.80364,0 -1.60728,1.2e-5 -2.41092,1.2e-5 0,0.793735 0,1.587459 0,2.381206 0.80364,0 1.60728,-1.2e-5 2.41092,-1.2e-5 0,-0.793735 0,-1.587471 0,-2.381206 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#000000;stroke-width:1.78961492;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 115.18474,57.651268 0.0443,0 c 0.98532,0 1.77856,0.793241 1.77856,1.778566 l 0,1.46e-4 c 0,0.985326 -0.79324,1.778566 -1.77856,1.778566 l -0.0443,0 c -0.98533,0 -1.77857,-0.79324 -1.77857,-1.778566 l 0,-1.46e-4 c 0,-0.985325 0.79324,-1.778566 1.77857,-1.778566 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1.78961492;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 115.18474,57.651268 h 0.0443 c 0.98532,0 1.77856,0.793241 1.77856,1.778566 v 1.46e-4 c 0,0.985326 -0.79324,1.778566 -1.77856,1.778566 h -0.0443 c -0.98533,0 -1.77857,-0.79324 -1.77857,-1.778566 v -1.46e-4 c 0,-0.985325 0.79324,-1.778566 1.77857,-1.778566 z"
id="path37768"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 116.40772,58.244161 c -0.80364,0 -1.60728,1.2e-5 -2.41092,1.2e-5 0,0.793735 0,1.587459 0,2.381206 0.80364,0 1.60728,-1.2e-5 2.41092,-1.2e-5 0,-0.793735 0,-1.587471 0,-2.381206 z"
id="path37770"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -50327,24 +50091,24 @@
<g
transform="translate(90,-142)"
id="g39142"
- style="opacity:0.5;display:inline">
+ style="display:inline;opacity:0.5">
<rect
y="336"
x="-64"
height="16"
width="16"
id="rect39144"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g39146"
- transform="translate(1,0)">
+ transform="translate(1)">
<g
id="g39148"
transform="translate(-386,446.5)">
<path
sodipodi:nodetypes="ccccccc"
- style="fill:#552200;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 329.5,-108.25 -5.5,2 0,6.75 5.5,3 5.5,-3 0,-6.75 -5.5,-2 z"
+ style="fill:#552200;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 329.5,-108.25 -5.5,2 v 6.75 l 5.5,3 5.5,-3 v -6.75 z"
id="path39150"
inkscape:connector-curvature="0" />
<path
@@ -50352,8 +50116,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
id="path39152"
- d="m 324,-99.5 0,-7 6,-1.75 0,11.5 -0.5,0.25 -5.5,-3 z"
- style="fill:#c9c9c9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06898749px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 324,-99.5 v -7 l 6,-1.75 v 11.5 l -0.5,0.25 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#c9c9c9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06898749px;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<g
@@ -50362,15 +50126,15 @@
<path
sodipodi:nodetypes="ccccc"
id="path39156"
- d="m 156,79.5 0,-7 -5,-1.75 0,11.5 5,-2.75 z"
- style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89401144px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 156,79.5 v -7 l -5,-1.75 v 11.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89401144px;marker:none;enable-background:accumulate"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
id="path39158"
- d="m 145,72.5 5.5,-2 5.5,2 -5.5,2.5 -5.5,-2.5 z"
+ d="m 145,72.5 5.5,-2 5.5,2 -5.5,2.5 z"
style="fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:nodetypes="ccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
@@ -50381,7 +50145,7 @@
<path
sodipodi:nodetypes="ccccc"
id="path39160"
- d="m 334.5,-106.5 0,6.75 -5,2.75 -5,-2.75 0,-6.75"
+ d="m 334.5,-106.5 v 6.75 l -5,2.75 -5,-2.75 v -6.75"
style="fill:none;stroke:url(#linearGradient39014);stroke-width:0.99999982px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
@@ -50391,12 +50155,12 @@
height="7.75"
width="1"
id="rect39162"
- style="fill:url(#linearGradient39016);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient39016);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="ccc"
id="path39164"
d="m -61,340.65468 c 0,0 4.5,2 4.5,2 l 4.5,-2"
- style="fill:none;stroke:url(#linearGradient39018);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:url(#linearGradient39018);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -50406,48 +50170,48 @@
height="8"
width="2.0000007"
id="rect37868-0-14"
- style="opacity:0.12000002;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.12000002;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
y="201"
x="32.021442"
height="7"
width="3.9785564"
id="rect37868-0-3"
- style="opacity:0.12000002;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.12000002;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<g
transform="translate(-1081.9421,-238.02038)"
- style="fill:#ffeeaa;display:inline"
+ style="display:inline;fill:#ffeeaa"
id="g39166">
<rect
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- style="fill:#d5e5ff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;display:inline"
+ style="display:inline;fill:#d5e5ff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1"
id="rect39168"
width="1.9820247"
height="8.0116062"
x="1109.4872"
y="435.4964"
- transform="matrix(1,2.1226448e-5,0,1,0,0)" />
+ transform="skewY(0.00121619)" />
<rect
- transform="matrix(1,3.6759233e-5,0,1,0,0)"
+ transform="skewY(0.00210615)"
y="435.97955"
x="1109.958"
height="7.0000257"
width="0.99999994"
id="rect39170"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;display:inline"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<rect
- transform="matrix(1,2.1226448e-5,0,1,0,0)"
+ transform="skewY(0.00121619)"
y="438.49628"
x="1114.4713"
height="8.0116062"
width="1.9820247"
id="rect37773"
- style="fill:#d5e5ff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;display:inline"
+ style="display:inline;fill:#d5e5ff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
@@ -50455,13 +50219,13 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;display:inline"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero"
id="rect37775"
width="0.99999994"
height="7.0000257"
x="1114.9421"
y="438.97937"
- transform="matrix(1,3.6759233e-5,0,1,0,0)" />
+ transform="skewY(0.00210615)" />
</g>
</g>
<g
@@ -50469,32 +50233,32 @@
transform="translate(168,-37)"
id="ICON_SNAP_FACE">
<g
- style="opacity:0.5;display:inline"
+ style="display:inline;opacity:0.5"
id="g39174"
transform="translate(111,-142)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect39176"
width="16"
height="16"
x="-64"
y="336" />
<g
- transform="translate(1,0)"
+ transform="translate(1)"
id="g39178">
<g
transform="translate(-386,446.5)"
id="g39180">
<path
id="path39182"
- d="m 329.5,-108.25 -5.5,2 0,6.75 5.5,3 5.5,-3 0,-6.75 -5.5,-2 z"
- style="fill:#552200;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 329.5,-108.25 -5.5,2 v 6.75 l 5.5,3 5.5,-3 v -6.75 z"
+ style="fill:#552200;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccc"
- style="fill:#c9c9c9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06898749px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 324,-99.5 0,-7 6,-1.75 0,11.5 -0.5,0.25 -5.5,-3 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#c9c9c9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06898749px;marker:none;enable-background:accumulate"
+ d="m 324,-99.5 v -7 l 6,-1.75 v 11.5 l -0.5,0.25 z"
id="path39184"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -50507,8 +50271,8 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
- style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89401144px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 156,79.5 0,-7 -5,-1.75 0,11.5 5,-2.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89401144px;marker:none;enable-background:accumulate"
+ d="m 156,79.5 v -7 l -5,-1.75 v 11.5 z"
id="path39188"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
@@ -50518,26 +50282,26 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
sodipodi:nodetypes="ccccc"
style="fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 145,72.5 5.5,-2 5.5,2 -5.5,2.5 -5.5,-2.5 z"
+ d="m 145,72.5 5.5,-2 5.5,2 -5.5,2.5 z"
id="path39190"
inkscape:connector-curvature="0" />
</g>
<path
style="fill:none;stroke:url(#linearGradient39020);stroke-width:0.99999982px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 334.5,-106.5 0,6.75 -5,2.75 -5,-2.75 0,-6.75"
+ d="m 334.5,-106.5 v 6.75 l -5,2.75 -5,-2.75 v -6.75"
id="path39192"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
</g>
<rect
- style="fill:url(#linearGradient39022);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient39022);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
id="rect39194"
width="1"
height="7.75"
x="-57"
y="342" />
<path
- style="fill:none;stroke:url(#linearGradient39024);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:url(#linearGradient39024);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m -61,340.65468 c 0,0 4.5,2 4.5,2 l 4.5,-2"
id="path39196"
sodipodi:nodetypes="ccc"
@@ -50550,18 +50314,18 @@
height="7"
width="2.9785564"
id="rect37868-0-57"
- style="opacity:0.12000002;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.12000002;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<g
transform="translate(-1080.9861,-240)"
- style="fill:#ffeeaa;display:inline"
+ style="display:inline;fill:#ffeeaa"
id="g39198">
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path39200"
- d="m 1130.4859,445.25 0,-7.5 6,2.75 0,8 -6,-3.25 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient39026);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 1130.4859,445.25 v -7.5 l 6,2.75 v 8 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient39026);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
</g>
@@ -50575,7 +50339,7 @@
height="16"
width="16"
id="rect28809"
- style="opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate" />
<g
style="display:inline"
id="g23255"
@@ -50583,66 +50347,54 @@
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
transform="matrix(1.0004639,0,0,0.9963165,-69.122722,304.28985)">
- <path
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
+ <circle
id="path23257"
- style="fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.86138636;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc"
+ style="display:inline;overflow:visible;visibility:visible;fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.86138636;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(0.81218,0,0,0.815735,163.7897,-27.2907)" />
+ transform="matrix(0.81218,0,0,0.815735,163.7897,-27.2907)"
+ cx="132"
+ cy="118"
+ r="8" />
<path
- style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 270.98701,62.965769 0.0109,7.256732 c -1.99907,0 -3.99814,-0.250925 -6.00812,-1.234549 0,-3.324245 2.68676,-6.022183 5.99722,-6.022183 l 0,0 0,0 0,0 z m 0.0109,7.256732 c 1.99908,0 3.99815,-0.250925 5.98632,-1.234549 0,3.324245 -2.68675,6.022182 -5.99722,6.022182 l 0.0109,-4.787633 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
+ d="m 270.98701,62.965769 0.0109,7.256732 c -1.99907,0 -3.99814,-0.250925 -6.00812,-1.234549 0,-3.324245 2.68676,-6.022183 5.99722,-6.022183 z m 0.0109,7.256732 c 1.99908,0 3.99815,-0.250925 5.98632,-1.234549 0,3.324245 -2.68675,6.022182 -5.99722,6.022182 z"
id="path23259"
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0" />
- <path
- sodipodi:type="arc"
+ <circle
style="fill:url(#linearGradient23274);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path23261"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(0.749782,0,0,0.752489,172.03052,-19.77379)" />
- <path
+ transform="matrix(0.749782,0,0,0.752489,172.03052,-19.77379)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.749782,0,0,0.752489,172.03052,-19.77379)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path23263"
style="opacity:0.1;fill:url(#linearGradient23276);fill-opacity:1;fill-rule:nonzero;stroke:none"
- sodipodi:type="arc" />
- <path
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.624782,0,0,0.627489,188.53052,-5.0185058)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path23265"
style="opacity:0.8;fill:url(#linearGradient23278);fill-opacity:1;fill-rule:nonzero;stroke:none"
- sodipodi:type="arc" />
+ cx="132"
+ cy="118"
+ r="8" />
<path
- style="fill:none;stroke:#ffffff;stroke-width:1.40226042;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#ffffff;stroke-width:1.40226042;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 267.70545,67.406839 c 0.34141,-0.888253 0.96594,-1.399916 1.66978,-1.680902"
id="path23267"
sodipodi:nodetypes="cs"
@@ -50653,19 +50405,16 @@
d="m 274.98515,70.995347 c 0,0.953349 -1,1.906699 -2,1.906699"
style="opacity:0.6;fill:none;stroke:#ffe680;stroke-width:1.00161445px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;filter:url(#filter13996)"
inkscape:connector-curvature="0" />
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path23271"
- style="fill:none;stroke:url(#linearGradient23280);stroke-width:1.45689511;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
- sodipodi:type="arc"
- transform="matrix(0.6875,0,0,0.6875,180.25,-12.125)" />
+ style="display:inline;fill:none;stroke:url(#linearGradient23280);stroke-width:1.45689511;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.6875,0,0,0.6875,180.25,-12.125)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
@@ -50676,7 +50425,7 @@
height="15.99988"
width="16"
id="rect40163"
- style="opacity:0;fill:#f6d0a6;fill-opacity:1;fill-rule:evenodd;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#f6d0a6;fill-opacity:1;fill-rule:evenodd;marker:none;enable-background:accumulate" />
<g
id="g40089"
transform="translate(70,178)">
@@ -50685,8 +50434,8 @@
transform="translate(-386,446.5)">
<path
sodipodi:nodetypes="ccccccc"
- style="fill:#422200;fill-opacity:1;fill-rule:evenodd;stroke:#281500;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 329.5,-108.25 -5.5,2 0,6.75 5.5,3 5.5,-3 0,-6.75 -5.5,-2 z"
+ style="fill:#422200;fill-opacity:1;fill-rule:evenodd;stroke:#281500;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 329.5,-108.25 -5.5,2 v 6.75 l 5.5,3 5.5,-3 v -6.75 z"
id="path40093"
inkscape:connector-curvature="0" />
<path
@@ -50694,7 +50443,7 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
id="path40095"
- d="m 324,-99.5 0,-7 6,-1.75 0,11.5 -0.5,0.25 -5.5,-3 z"
+ d="m 324,-99.5 v -7 l 6,-1.75 v 11.5 l -0.5,0.25 z"
style="fill:#efa351;fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
@@ -50704,7 +50453,7 @@
<path
sodipodi:nodetypes="ccccc"
id="path40099"
- d="m 156,79.5 0,-7 -5,-1.75 0,11.5 5,-2.75 z"
+ d="m 156,79.5 v -7 l -5,-1.75 v 11.5 z"
style="fill:#915515;fill-opacity:1;fill-rule:evenodd;stroke:none"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -50712,7 +50461,7 @@
inkscape:connector-curvature="0" />
<path
id="path40101"
- d="m 145,72.5 5.5,-2 5.5,2 -5.5,2.5 -5.5,-2.5 z"
+ d="m 145,72.5 5.5,-2 5.5,2 -5.5,2.5 z"
style="fill:#f5ca9b;fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:nodetypes="ccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
@@ -50723,7 +50472,7 @@
<path
sodipodi:nodetypes="ccccc"
id="path40103"
- d="m 334.5,-106.5 0,6.75 -5,2.75 -5,-2.75 0,-6.75"
+ d="m 334.5,-106.5 v 6.75 l -5,2.75 -5,-2.75 v -6.75"
style="fill:none;stroke:url(#linearGradient40171);stroke-width:0.99999982px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
@@ -50733,12 +50482,12 @@
height="7.75"
width="1"
id="rect40106"
- style="fill:url(#linearGradient40173);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient40173);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="ccc"
id="path40109"
d="m -61,340.65468 c 0,0 4.5,2 4.5,2 l 4.5,-2"
- style="fill:none;stroke:url(#linearGradient40175);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:url(#linearGradient40175);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -50749,66 +50498,54 @@
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
transform="matrix(1.0004639,0,0,0.9963165,-237.12363,495.28986)">
- <path
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
+ <circle
id="path57401"
- style="fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.86138636;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc"
+ style="display:inline;overflow:visible;visibility:visible;fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.86138636;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(0.81218,0,0,0.815735,163.7897,-27.2907)" />
+ transform="matrix(0.81218,0,0,0.815735,163.7897,-27.2907)"
+ cx="132"
+ cy="118"
+ r="8" />
<path
- style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 270.98701,62.965769 0.0109,7.256732 c -1.99907,0 -3.99814,-0.250925 -6.00812,-1.234549 0,-3.324245 2.68676,-6.022183 5.99722,-6.022183 l 0,0 0,0 0,0 z m 0.0109,7.256732 c 1.99908,0 3.99815,-0.250925 5.98632,-1.234549 0,3.324245 -2.68675,6.022182 -5.99722,6.022182 l 0.0109,-4.787633 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
+ d="m 270.98701,62.965769 0.0109,7.256732 c -1.99907,0 -3.99814,-0.250925 -6.00812,-1.234549 0,-3.324245 2.68676,-6.022183 5.99722,-6.022183 z m 0.0109,7.256732 c 1.99908,0 3.99815,-0.250925 5.98632,-1.234549 0,3.324245 -2.68675,6.022182 -5.99722,6.022182 z"
id="path57403"
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0" />
- <path
- sodipodi:type="arc"
+ <circle
style="fill:url(#linearGradient57417);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path57405"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(0.749782,0,0,0.752489,172.03052,-19.77379)" />
- <path
+ transform="matrix(0.749782,0,0,0.752489,172.03052,-19.77379)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.749782,0,0,0.752489,172.03052,-19.77379)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path57407"
style="opacity:0.1;fill:url(#linearGradient57419);fill-opacity:1;fill-rule:nonzero;stroke:none"
- sodipodi:type="arc" />
- <path
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.624782,0,0,0.627489,188.53052,-5.0185058)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path57409"
style="opacity:0.8;fill:url(#linearGradient57421);fill-opacity:1;fill-rule:nonzero;stroke:none"
- sodipodi:type="arc" />
+ cx="132"
+ cy="118"
+ r="8" />
<path
- style="fill:none;stroke:#ffffff;stroke-width:1.40226042;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#ffffff;stroke-width:1.40226042;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 267.70545,67.406839 c 0.34141,-0.888253 0.96594,-1.399916 1.66978,-1.680902"
id="path57411"
sodipodi:nodetypes="cs"
@@ -50819,26 +50556,23 @@
d="m 274.98515,70.995347 c 0,0.953349 -1,1.906699 -2,1.906699"
style="opacity:0.6;fill:none;stroke:#ffe680;stroke-width:1.00161445px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;filter:url(#filter13996)"
inkscape:connector-curvature="0" />
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path57415"
- style="fill:none;stroke:url(#linearGradient57423);stroke-width:1.45689511;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
- sodipodi:type="arc"
- transform="matrix(0.6875,0,0,0.6875,180.25,-12.125)" />
+ style="display:inline;fill:none;stroke:url(#linearGradient57423);stroke-width:1.45689511;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.6875,0,0,0.6875,180.25,-12.125)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
style="display:inline"
id="ICON_MOD_CLOTH"
transform="translate(73,-15)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect22222"
width="16"
height="16"
@@ -50847,39 +50581,39 @@
<g
id="g22818">
<path
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- d="m -66.5,257.5 5,0 c 0,1 3,1 3,0 l 5,0 0,5 -2,0 -2.9e-4,8 -8.99971,-5e-5 0,-7.99995 -2,0 0,-5 z"
+ style="display:inline;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m -66.5,257.5 h 5 c 0,1 3,1 3,0 h 5 v 5 h -2 l -2.9e-4,8 -8.99971,-5e-5 V 262.5 h -2 z"
id="path22864"
sodipodi:nodetypes="ccccccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccccc"
id="rect22236"
- d="m -66.5,257.5 4.75,0 c -0.5,3.25 4,3.25 3.5,0 l 4.75,0 0,5 -2,0 -2.9e-4,8 -8.99971,-5e-5 0,-7.99995 -2,0 0,-5 z"
- style="fill:url(#linearGradient22905);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -66.5,257.5 h 4.75 c -0.5,3.25 4,3.25 3.5,0 h 4.75 v 5 h -2 l -2.9e-4,8 -8.99971,-5e-5 V 262.5 h -2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient22905);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:url(#linearGradient22891);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999863;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -66,258 4,0 c 0,2.5 4,2.5 4,0 l 4,0 0,4 -2,0 0,8 -8,0 0,-8 -2,0 0,-4 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient22891);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999863;marker:none;enable-background:accumulate"
+ d="m -66,258 h 4 c 0,2.5 4,2.5 4,0 h 4 v 4 h -2 v 8 h -8 v -8 h -2 z"
id="path23050"
sodipodi:nodetypes="ccccccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccc"
id="path23055"
- d="m -66,258 4,0 c 0,0.61505 0.242101,1.07878 0.607179,1.3912 L -61.5,259.5 -64,262 l -2,0 0,-4 z"
- style="fill:url(#linearGradient22893);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999863;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -66,258 h 4 c 0,0.61505 0.242101,1.07878 0.607179,1.3912 L -61.5,259.5 -64,262 h -2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient22893);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999863;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:url(#linearGradient22895);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999863;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -54,258 -4,0 c 0,0.61505 -0.242101,1.07878 -0.607179,1.3912 L -58.5,259.5 l 2.5,2.5 2,0 0,-4 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient22895);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999863;marker:none;enable-background:accumulate"
+ d="m -54,258 h -4 c 0,0.61505 -0.242101,1.07878 -0.607179,1.3912 L -58.5,259.5 -56,262 h 2 z"
id="path23059"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
style="opacity:0.7;fill:none;stroke:url(#linearGradient22897);stroke-width:1.00000012px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m -56.5,262.75 0,6.75 -7,0 0,-7.5"
+ d="m -56.5,262.75 v 6.75 h -7 V 262"
id="path22238"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -50890,7 +50624,7 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path22276"
- d="m -56.5,269.5 -7,0 m -2,-8 0,-3 m 11,0 0,3 m -8,-3 c 0.5,2.75 4.5,2.75 5,0"
+ d="m -56.5,269.5 h -7 m -2,-8 v -3 m 11,0 v 3 m -8,-3 c 0.5,2.75 4.5,2.75 5,0"
style="fill:none;stroke:url(#linearGradient22899);stroke-width:1.00000012px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0" />
@@ -50898,10 +50632,10 @@
sodipodi:nodetypes="cc"
id="path23065"
d="m -63.5,264.5 c 0.75,3.5 4.25,5.5 7,3"
- style="opacity:0.85;fill:none;stroke:url(#linearGradient22901);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:3.9000001;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.85;fill:none;stroke:url(#linearGradient22901);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:3.9000001;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.85;fill:none;stroke:url(#linearGradient22903);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:3.9000001;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.85;fill:none;stroke:url(#linearGradient22903);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:3.9000001;stroke-dasharray:none;stroke-opacity:1"
d="m -63.5,263.5 c 1,3.5 4.25,5.5 7,3"
id="path23063"
sodipodi:nodetypes="cc"
@@ -50911,15 +50645,15 @@
transform="translate(0,1)"
style="opacity:0.9">
<path
- style="opacity:0.4;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m -60.5,262.5 1,0 0,2.75"
+ style="opacity:0.4;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m -60.5,262.5 h 1 v 2.75"
id="path23069"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path23067"
- d="m -60.5,262.5 1,0 0,2.75"
+ d="m -60.5,262.5 h 1 v 2.75"
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
@@ -50930,7 +50664,7 @@
id="ICON_PLAY_AUDIO"
style="display:inline">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect22902"
width="16"
height="16"
@@ -50941,7 +50675,7 @@
id="g22904"
style="opacity:0.6;stroke:#162d50">
<path
- style="opacity:0.9;fill:none;stroke:#162d50;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.9;fill:none;stroke:#162d50;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 253.41833,95.5 c 1.5,1.5 1.5,3.5 0,5"
id="path22906"
sodipodi:nodetypes="cc"
@@ -50950,7 +50684,7 @@
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.9;fill:none;stroke:#162d50;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.9;fill:none;stroke:#162d50;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 255.41833,93.5 c 2.75,2.75 2.75,6.25 0,9"
id="path22908"
sodipodi:nodetypes="cc"
@@ -50960,7 +50694,7 @@
inkscape:connector-curvature="0" />
</g>
<path
- style="opacity:0.9;fill:none;stroke:#d5e5ff;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.9;fill:none;stroke:#d5e5ff;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 267.5,454.5 c 1.5,1.5 1.5,3.5 0,5"
id="path22910"
sodipodi:nodetypes="cc"
@@ -50970,27 +50704,27 @@
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccccccc"
- style="fill:url(#linearGradient22933);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
- d="m 264.58167,451.5 -1.08167,0 -3,3 c 0,-0.554 -0.446,-1 -1,-1 l -1,0 c -0.554,0 -1,0.446 -1,1 l 0,5 c 0,0.554 0.446,1 1,1 l 1,0 c 0.554,0 1,-0.446 1,-1 l 3,3 1.08167,0 0,-11 z"
+ style="display:inline;fill:url(#linearGradient22933);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 264.58167,451.5 H 263.5 l -3,3 c 0,-0.554 -0.446,-1 -1,-1 h -1 c -0.554,0 -1,0.446 -1,1 v 5 c 0,0.554 0.446,1 1,1 h 1 c 0.554,0 1,-0.446 1,-1 l 3,3 h 1.08167 z"
id="path22912"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient22935);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
- d="m 258.5,459.5 1,0 1,-1 3.25,3"
+ style="display:inline;fill:none;stroke:url(#linearGradient22935);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 258.5,459.5 h 1 l 1,-1 3.25,3"
id="path22914"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
id="path22916"
- d="m 260.5,454.5 0,4.9091"
- style="opacity:0.5;fill:none;stroke:url(#linearGradient22937);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 260.5,454.5 v 4.9091"
+ style="opacity:0.5;fill:none;stroke:url(#linearGradient22937);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
id="path22918"
- d="m 258.5,455.5 1,0"
+ d="m 258.5,455.5 h 1"
style="fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
sodipodi:nodetypes="cc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -51012,7 +50746,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cc"
style="fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 258.5,454.63598 1,0"
+ d="m 258.5,454.63598 h 1"
id="path22922"
inkscape:connector-curvature="0" />
<path
@@ -51031,16 +50765,16 @@
sodipodi:nodetypes="cc"
id="path22926"
d="m 269.5,452.5 c 2.75,2.75 2.75,6.25 0,9"
- style="opacity:0.9;fill:none;stroke:#d5e5ff;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.9;fill:none;stroke:#d5e5ff;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:url(#linearGradient22939);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
- d="m 263.5,452.5 0,9"
+ d="m 263.5,452.5 v 9"
id="path22928"
inkscape:connector-curvature="0" />
<path
id="path22931"
- d="m 258.5,454.3 0,5.4"
+ d="m 258.5,454.3 v 5.4"
style="fill:none;stroke:url(#linearGradient22941);stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
@@ -51054,49 +50788,47 @@
height="16"
width="16"
id="rect22167"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g23378">
<g
transform="translate(-36.00033,108.00006)"
id="g22183">
<path
- style="fill:url(#linearGradient23445);fill-opacity:1;fill-rule:nonzero;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 472.50029,156.5 c -1.9309,0 -3,0.66961 -3,1.5 l 0,8 c 0,0.83039 1.0691,1.5 3,1.5 1.9309,0 3,-0.66961 3,-1.5 l 0,-8 c 0,-0.83039 -1.0691,-1.5 -3,-1.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23445);fill-opacity:1;fill-rule:nonzero;marker:none;enable-background:accumulate"
+ d="m 472.50029,156.5 c -1.9309,0 -3,0.66961 -3,1.5 v 8 c 0,0.83039 1.0691,1.5 3,1.5 1.9309,0 3,-0.66961 3,-1.5 v -8 c 0,-0.83039 -1.0691,-1.5 -3,-1.5 z"
id="path22187"
sodipodi:nodetypes="cccsccc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient23447);stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 470.50029,158.5 0,7.51105 c 0,0.54648 1,0.54648 2,0.54648 1,0 2,0 2,-0.55753 l 0,-7.51105"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23447);stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 470.50029,158.5 v 7.51105 c 0,0.54648 1,0.54648 2,0.54648 1,0 2,0 2,-0.55753 v -7.51105"
id="path22189"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
- <path
- sodipodi:type="arc"
- style="fill:#eff6ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.73959124;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;fill:#eff6ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.73959124;marker:none;enable-background:accumulate"
id="path22199"
- sodipodi:cx="108"
- sodipodi:cy="-222"
- sodipodi:rx="3.3084693"
- sodipodi:ry="1.2798798"
- d="M 111.30847,-222 A 3.3084693,1.2798798 0 0 1 108,-220.72012 3.3084693,1.2798798 0 0 1 104.69153,-222 3.3084693,1.2798798 0 0 1 108,-223.27988 3.3084693,1.2798798 0 0 1 111.30847,-222 Z"
- transform="matrix(0.9067635,0,0,1.3047091,374.56954,447.97555)" />
+ transform="matrix(0.9067635,0,0,1.3047091,374.56954,447.97555)"
+ cx="108"
+ cy="-222"
+ rx="3.3084693"
+ ry="1.2798798" />
<path
sodipodi:nodetypes="cccsccc"
id="path22203"
- d="m 472.50029,156.5 c -1.9309,0 -3,0.5 -3,1.5 l 0,8 c 0,0.83039 1.0691,1.5 3,1.5 1.9309,0 3.00029,-0.75001 3,-1.5 l 0,-8 c 0,-1 -1.0691,-1.5 -3,-1.5 z"
- style="fill:none;stroke:#0b1728;stroke-width:0.80000001;stroke-miterlimit:4;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 472.50029,156.5 c -1.9309,0 -3,0.5 -3,1.5 v 8 c 0,0.83039 1.0691,1.5 3,1.5 1.9309,0 3.00029,-0.75001 3,-1.5 v -8 c 0,-1 -1.0691,-1.5 -3,-1.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0b1728;stroke-width:0.80000001;stroke-miterlimit:4;stroke-dasharray:none;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<path
sodipodi:nodetypes="cssc"
id="path23068"
- d="m 436.5,265.5 0,-0.75 c 0,-4.25 -7,-4.25 -7,0 l 0,2.75"
- style="opacity:0.55;fill:none;stroke:#0b1728;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 436.5,265.5 v -0.75 c 0,-4.25 -7,-4.25 -7,0 v 2.75"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.55;fill:none;stroke:#0b1728;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.1;fill:none;stroke:#e1e08e;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.39511889;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:none;stroke:#e1e08e;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.39511871;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect22214"
width="2.9999998"
height="3"
@@ -51105,14 +50837,14 @@
rx="1.2002208"
ry="1.2002208" />
<path
- style="opacity:0.6;fill:none;stroke:#0b1728;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 436.5,265.5 0,-0.75"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:none;stroke:#0b1728;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 436.5,265.5 v -0.75"
id="path23343"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#d7e3f4;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 436.5,265.5 0,-0.75 c 0,-4.25 -7,-4.25 -7,0 l 0,2.75"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#d7e3f4;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 436.5,265.5 v -0.75 c 0,-4.25 -7,-4.25 -7,0 v 2.75"
id="path22210"
sodipodi:nodetypes="cssc"
inkscape:connector-curvature="0" />
@@ -51123,7 +50855,7 @@
height="3"
width="3"
id="rect22216"
- style="opacity:0.4;fill:#a09f2c;fill-opacity:1;fill-rule:nonzero;stroke:#d6d562;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.39511889;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.4;fill:#a09f2c;fill-opacity:1;fill-rule:nonzero;stroke:#d6d562;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.39511871;stroke-opacity:1;marker:none;enable-background:accumulate"
ry="1.2002209" />
<path
inkscape:export-ydpi="90"
@@ -51131,10 +50863,10 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path23005"
d="m 427,266 c 0,-0.33336 10e-6,-0.6667 10e-6,-1.00006 0.33335,0 0.6667,0 1.00005,0 0,0.33336 -1e-5,0.6667 -1e-5,1.00006 -0.33335,0 -0.6667,0 -1.00005,0 z"
- style="opacity:0.7;fill:#8c8b25;fill-opacity:1;fill-rule:nonzero;stroke:#8c8b0a;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.39511889;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#8c8b25;fill-opacity:1;fill-rule:nonzero;stroke:#8c8b0a;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.39511871;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.7;fill:#8c8b25;fill-opacity:1;fill-rule:nonzero;stroke:#8c8b0a;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.39511889;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#8c8b25;fill-opacity:1;fill-rule:nonzero;stroke:#8c8b0a;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.39511871;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 427,270 c 0,-0.33336 10e-6,-0.6667 10e-6,-1.00006 0.33335,0 0.6667,0 1.00005,0 0,0.33336 -1e-5,0.6667 -1e-5,1.00006 -0.33335,0 -0.6667,0 -1.00005,0 z"
id="path23007"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -51147,10 +50879,10 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path23009"
d="m 430.99994,270 c 0,-0.33336 1e-5,-0.6667 1e-5,-1.00006 0.33335,0 0.6667,0 1.00005,0 0,0.33336 -10e-6,0.6667 -10e-6,1.00006 -0.33335,0 -0.6667,0 -1.00005,0 z"
- style="opacity:0.7;fill:#8c8b25;fill-opacity:1;fill-rule:nonzero;stroke:#8c8b0a;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.39511889;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#8c8b25;fill-opacity:1;fill-rule:nonzero;stroke:#8c8b0a;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.39511871;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.7;fill:#8c8b25;fill-opacity:1;fill-rule:nonzero;stroke:#8c8b0a;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.39511889;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#8c8b25;fill-opacity:1;fill-rule:nonzero;stroke:#8c8b0a;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.39511871;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 430.99994,266.00006 c 0,-0.33336 1e-5,-0.6667 1e-5,-1.00006 0.33335,0 0.6667,0 1.00005,0 0,0.33336 -10e-6,0.6667 -10e-6,1.00006 -0.33335,0 -0.6667,0 -1.00005,0 z"
id="path23012"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -51158,8 +50890,8 @@
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- style="fill:#545306;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 428.25,266.25 0.75,-0.75 1,0 0.75,0.75 0.75,0.75 0,1 -0.75,0.75 -0.75,0.75 -1,0 -0.75,-0.75 -0.75,-0.75 0,-1 0.75,-0.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#545306;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate"
+ d="M 428.25,266.25 429,265.5 h 1 l 0.75,0.75 0.75,0.75 v 1 l -0.75,0.75 -0.75,0.75 h -1 l -0.75,-0.75 -0.75,-0.75 v -1 z"
id="rect23002"
sodipodi:nodetypes="ccccccccccccc"
inkscape:connector-curvature="0" />
@@ -51180,7 +50912,7 @@
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
d="m 427,266 c 0,-0.33336 10e-6,-0.6667 10e-6,-1.00006 0.33335,0 0.6667,0 1.00005,0 0,0.33336 -1e-5,0.6667 -1e-5,1.00006 -0.33335,0 -0.6667,0 -1.00005,0 z"
id="path23312"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -51193,10 +50925,10 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path23314"
d="m 427,270 c 0,-0.33336 10e-6,-0.6667 10e-6,-1.00006 0.33335,0 0.6667,0 1.00005,0 0,0.33336 -1e-5,0.6667 -1e-5,1.00006 -0.33335,0 -0.6667,0 -1.00005,0 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
d="m 430.99994,270 c 0,-0.33336 1e-5,-0.6667 1e-5,-1.00006 0.33335,0 0.6667,0 1.00005,0 0,0.33336 -10e-6,0.6667 -10e-6,1.00006 -0.33335,0 -0.6667,0 -1.00005,0 z"
id="path23316"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -51209,7 +50941,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path23318"
d="m 430.99994,266.00006 c 0,-0.33336 1e-5,-0.6667 1e-5,-1.00006 0.33335,0 0.6667,0 1.00005,0 0,0.33336 -10e-6,0.6667 -10e-6,1.00006 -0.33335,0 -0.6667,0 -1.00005,0 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<g
style="opacity:0.65"
@@ -51223,11 +50955,11 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path23014"
d="m -38,351 c 0,-0.33336 1e-5,-0.6667 1e-5,-1.00006 0.33335,0 0.666699,0 1.000049,0 0,0.33336 -1e-5,0.6667 -1e-5,1.00006 -0.33335,0 -0.666699,0 -1.000049,0 z"
- style="fill:#8c8b25;fill-opacity:1;fill-rule:nonzero;stroke:#504f14;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.39511889;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#8c8b25;fill-opacity:1;fill-rule:nonzero;stroke:#504f14;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.39511871;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:#8c8b25;fill-opacity:1;fill-rule:nonzero;stroke:#504f14;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.39511889;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -32.000059,351 c 0,-0.33336 1e-5,-0.6667 1e-5,-1.00006 0.33335,0 0.666699,0 1.000049,0 0,0.33336 -10e-6,0.6667 -10e-6,1.00006 -0.33335,0 -0.666699,0 -1.000049,0 l 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#8c8b25;fill-opacity:1;fill-rule:nonzero;stroke:#504f14;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.39511871;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -32.000059,351 c 0,-0.33336 1e-5,-0.6667 1e-5,-1.00006 0.33335,0 0.666699,0 1.000049,0 0,0.33336 -10e-6,0.6667 -10e-6,1.00006 -0.33335,0 -0.666699,0 -1.000049,0 z"
id="path23016"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -51239,14 +50971,14 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path23018"
d="m -35,354 c 0,-0.33336 1e-5,-0.6667 1e-5,-1.00006 0.33335,0 0.666699,0 1.000049,0 0,0.33336 -1e-5,0.6667 -1e-5,1.00006 -0.33335,0 -0.666699,0 -1.000049,0 z"
- style="fill:#8c8b25;fill-opacity:1;fill-rule:nonzero;stroke:#504f14;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.39511889;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#8c8b25;fill-opacity:1;fill-rule:nonzero;stroke:#504f14;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.39511871;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<g
id="g23325"
style="fill:#ffffff;stroke:none">
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate"
d="m -38,351 c 0,-0.33336 1e-5,-0.6667 1e-5,-1.00006 0.33335,0 0.666699,0 1.000049,0 0,0.33336 -1e-5,0.6667 -1e-5,1.00006 -0.33335,0 -0.666699,0 -1.000049,0 z"
id="path23327"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -51258,11 +50990,11 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path23329"
- d="m -32.000059,351 c 0,-0.33336 1e-5,-0.6667 1e-5,-1.00006 0.33335,0 0.666699,0 1.000049,0 0,0.33336 -10e-6,0.6667 -10e-6,1.00006 -0.33335,0 -0.666699,0 -1.000049,0 l 0,0 0,0 0,0 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -32.000059,351 c 0,-0.33336 1e-5,-0.6667 1e-5,-1.00006 0.33335,0 0.666699,0 1.000049,0 0,0.33336 -10e-6,0.6667 -10e-6,1.00006 -0.33335,0 -0.666699,0 -1.000049,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate"
d="m -35,354 c 0,-0.33336 1e-5,-0.6667 1e-5,-1.00006 0.33335,0 0.666699,0 1.000049,0 0,0.33336 -1e-5,0.6667 -1e-5,1.00006 -0.33335,0 -0.666699,0 -1.000049,0 z"
id="path23331"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -51284,13 +51016,13 @@
id="g22355"
transform="translate(296.99995,249.99998)">
<rect
- transform="matrix(1,5.248259e-6,0,1,0,0)"
+ transform="skewY(3.0070309e-4)"
y="15.999177"
x="155.00008"
height="3.9999785"
width="4.0000005"
id="rect22359"
- style="fill:url(#linearGradient23531);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;fill:url(#linearGradient23531);fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
@@ -51298,19 +51030,19 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- style="fill:none;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;display:inline"
+ style="display:inline;fill:none;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1"
id="rect22365"
width="4.9999776"
height="4.9999595"
x="154.50008"
y="15.499179"
- transform="matrix(1,5.248259e-6,0,1,0,0)" />
+ transform="skewY(3.0070309e-4)" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path22367"
- d="m 155.50007,19.49999 -5.5e-4,-3.000005 2.99988,5e-6 6.8e-4,3 -3.00001,0 0,0 0,0 0,0 z"
+ d="m 155.50007,19.49999 -5.5e-4,-3.000005 2.99988,5e-6 6.8e-4,3 z"
style="opacity:0.8;fill:none;stroke:url(#linearGradient23533);stroke-width:1.00000012px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
@@ -51323,16 +51055,16 @@
id="g23429"
style="opacity:0.7">
<path
- style="fill:none;stroke:#214478;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 90.45451,103.98095 0,11 11,0 0,-11 -11,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#214478;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 90.45451,103.98095 v 11 h 11 v -11 z"
id="path23431"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path23433"
- d="m 90.45451,103.98095 0,11 11,0 0,-11 -11,0 z"
- style="fill:none;stroke:#afc6e9;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 90.45451,103.98095 v 11 h 11 v -11 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#afc6e9;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<g
@@ -51345,9 +51077,9 @@
height="3"
width="2.9998772"
id="rect23438"
- style="fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect23440"
width="2.9998772"
height="3"
@@ -51363,9 +51095,9 @@
height="3"
width="2.9998772"
id="rect23442"
- style="fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
- style="fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 273,294 c -0.6694,0 -1.3388,10e-6 -2.0082,10e-6 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-10e-6 2.0082,-10e-6 0,-0.66939 0,-1.33878 0,-2.00817 z"
id="path23444"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -51378,7 +51110,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path23446"
d="m 261,294 c -0.6694,0 -1.3388,10e-6 -2.0082,10e-6 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-10e-6 2.0082,-10e-6 0,-0.66939 0,-1.33878 0,-2.00817 z"
- style="fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
@@ -51386,10 +51118,10 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path23448"
d="m 261.00042,282.0368 c -0.6694,0 -1.3388,10e-6 -2.0082,10e-6 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-1e-5 2.0082,-1e-5 0,-0.66939 0,-1.33878 0,-2.00817 z"
- style="fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<rect
- style="fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect23450"
width="2.9998772"
height="3"
@@ -51403,7 +51135,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path23452"
d="m 273,282 c -0.6694,0 -1.3388,10e-6 -2.0082,10e-6 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-10e-6 2.0082,-10e-6 0,-0.66939 0,-1.33878 0,-2.00817 z"
- style="fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -51412,7 +51144,7 @@
id="ICON_MOD_BUILD"
transform="translate(0,2)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect31966"
width="16"
height="16"
@@ -51422,7 +51154,7 @@
transform="translate(0,21)"
id="g40631">
<rect
- style="fill:#87aade;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#87aade;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect40597"
width="5"
height="3"
@@ -51431,35 +51163,35 @@
<path
sodipodi:nodetypes="ccccccc"
id="path40599"
- d="m 48.5,244.5 5,0 0,3 8,0 0,6 -13,0 0,-9 z"
- style="fill:url(#linearGradient40965);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 48.5,244.5 h 5 v 3 h 8 v 6 h -13 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient40965);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccccccccc"
- d="m 49,250.5 12,0 m -4.5,-2.5 0,2.5 m -5,-2.5 0,2.5 m 2,2.5 0,-2.5 m 5,2.5 0,-2.5 m -5.5,-3 -4,0"
+ d="M 49,250.5 H 61 M 56.5,248 v 2.5 m -5,-2.5 v 2.5 m 2,2.5 v -2.5 m 5,2.5 v -2.5 m -5.5,-3 h -4"
style="fill:none;stroke:url(#linearGradient40967);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
id="path40601"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 48.5,244.5 5,0 0,3 8,0 0,6 -13,0 0,-9 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 48.5,244.5 h 5 v 3 h 8 v 6 h -13 z"
id="path40603"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
id="path40605"
- d="m 49.5,246.5 0,-1 3,0"
+ d="m 49.5,246.5 v -1 h 3"
style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 49.5,249.5 0,-1 1,0"
+ d="m 49.5,249.5 v -1 h 1"
id="path40615"
inkscape:connector-curvature="0" />
<path
style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 57.5,242.5 0,-1 3,0"
+ d="m 57.5,242.5 v -1 h 3"
id="use40619"
inkscape:connector-curvature="0" />
<use
@@ -51515,7 +51247,7 @@
height="16"
width="16"
id="rect40827"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
style="display:inline"
inkscape:export-ydpi="90"
@@ -51524,32 +51256,32 @@
id="g40829"
transform="translate(67.999923,253.00001)">
<path
- style="fill:url(#linearGradient40843);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- d="m 148.50005,9.5 7.00001,3.68e-5 1e-5,2.9999632 -4,0 0,4 -3.00002,0.0039 0,-7.00391 0,10e-6 z"
+ style="display:inline;fill:url(#linearGradient40843);fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 148.50005,9.5 7.00001,3.68e-5 1e-5,2.9999632 h -4 v 4 l -3.00002,0.0039 V 9.49999 Z"
id="path40831"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<rect
- transform="matrix(1,5.248259e-6,0,1,0,0)"
+ transform="skewY(3.0070309e-4)"
y="14.499187"
x="153.49606"
height="6.9999576"
width="7.004014"
id="rect40833"
- style="fill:url(#linearGradient40845);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;fill:url(#linearGradient40845);fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<path
sodipodi:nodetypes="ccccccc"
id="path40835"
- d="m 148.50005,9.5 7.00001,3.68e-5 1e-5,2.9999632 -4,0 0,4 -3.00002,0.0039 0,-7.00391 0,10e-6 z"
- style="fill:none;stroke:#0b1728;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;display:inline"
+ d="m 148.50005,9.5 7.00001,3.68e-5 1e-5,2.9999632 h -4 v 4 l -3.00002,0.0039 V 9.49999 Z"
+ style="display:inline;fill:none;stroke:#0b1728;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
- style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 149.50015,15.500012 7e-5,-5.000011 4.99993,0"
+ style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 149.50015,15.500012 7e-5,-5.000011 h 4.99993"
id="path40837"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -51559,19 +51291,19 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- style="fill:none;stroke:#0b1728;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;display:inline"
+ style="display:inline;fill:none;stroke:#0b1728;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1"
id="rect40839"
width="7.004014"
height="6.9999576"
x="153.49606"
y="14.499187"
- transform="matrix(1,5.248259e-6,0,1,0,0)" />
+ transform="skewY(3.0070309e-4)" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path40841"
- d="m 154.50063,20.499995 6e-5,-4.999998 4.99933,0 6e-5,4.999993 -4.99945,5e-6 z"
+ d="m 154.50063,20.499995 6e-5,-4.999998 h 4.99933 l 6e-5,4.999993 z"
style="opacity:0.7;fill:none;stroke:url(#linearGradient40847);stroke-width:1.00000012px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
@@ -51582,7 +51314,7 @@
transform="translate(404,214.02012)"
id="ICON_MOD_BEVEL">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect12989"
width="16"
height="16"
@@ -51599,7 +51331,7 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- style="opacity:0.35;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80001998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+ style="display:inline;opacity:0.35;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80001998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect13004"
width="10.996093"
height="11.004457"
@@ -51609,14 +51341,14 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- style="opacity:0.2;fill:none;stroke:url(#linearGradient23510);stroke-width:1.0000248px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline"
- d="m 46.499645,101.49618 0,-9.003652 8.996803,-0.0017 0,9.003642 -8.996803,0.002 0,-2.9e-4 0,0 0,0 z"
+ style="display:inline;opacity:0.2;fill:none;stroke:url(#linearGradient23510);stroke-width:1.0000248px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+ d="m 46.499645,101.49618 v -9.003652 l 8.996803,-0.0017 v 9.003642 l -8.996803,0.002 z"
id="path13009"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
- style="fill:url(#linearGradient23512);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80001998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40018745;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 53.247247,91.490409 3.248846,0.0015 0,11.002931 -10.996093,1e-5 0,-3.251316 7.747247,-7.753141 0,1.6e-5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23512);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80001998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40018749;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 53.247247,91.490409 3.248846,0.0015 V 102.49484 L 45.5,102.49485 v -3.251316 l 7.747247,-7.753141 z"
id="rect12993"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
@@ -51625,7 +51357,7 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
style="fill:none;stroke:url(#linearGradient23514);stroke-width:1.0000248px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 46.499451,101.49446 1.94e-4,-1.750708 7.247425,-7.252938 1.749378,0 10e-7,9.001936 -8.996998,0.002 0,-2.9e-4 0,0 0,0 z"
+ d="m 46.499451,101.49446 1.94e-4,-1.750708 7.247425,-7.252938 h 1.749378 l 10e-7,9.001936 -8.996998,0.002 z"
id="path12995"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
@@ -51635,8 +51367,8 @@
id="ICON_CONSTRAINT_DATA"
transform="translate(-42.01991,-103.9242)">
<rect
- transform="matrix(0,-1,1,0,0,0)"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ transform="rotate(-90)"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect23589"
width="16"
height="16"
@@ -51645,7 +51377,7 @@
<g
id="g23591">
<rect
- style="fill:none;stroke:#04090f;stroke-width:2.89999986;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#04090f;stroke-width:2.89999986;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect23594"
width="8.4671335"
height="5.6703448"
@@ -51653,7 +51385,7 @@
y="-559.34406"
ry="2.143424"
rx="2.1489482"
- transform="matrix(-0.7071068,0.7071068,-0.7071068,-0.7071068,0,0)" />
+ transform="rotate(135)" />
<rect
rx="2.1489475"
ry="2.1434233"
@@ -51662,16 +51394,16 @@
height="5.5734196"
width="8.5043812"
id="rect23596"
- style="fill:none;stroke:#04090f;stroke-width:2.89999986;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- transform="matrix(-0.7071068,0.7071068,-0.7071068,-0.7071068,0,0)" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#04090f;stroke-width:2.89999986;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
+ transform="rotate(135)" />
<path
- style="fill:none;stroke:url(#linearGradient24349);stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient24349);stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 411.51991,375.4242 -0.5,-0.5 c -0.69131,-0.69131 -0.87523,-2.06255 1.2e-4,-2.92851 l 3.01169,-2.97968 c 0.87526,-0.86596 2.29698,-0.69523 2.98828,-0.004 l 0.52541,0.52542"
id="path23598"
sodipodi:nodetypes="cssssc"
inkscape:connector-curvature="0" />
<path
- style="fill:#000000;fill-opacity:0.10736198;fill-rule:nonzero;stroke:#04090f;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.50000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:0.10736198;fill-rule:nonzero;stroke:#04090f;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 408.98474,371.9281 c 0.84182,-0.84182 2.19551,-0.84356 3.03517,-0.004"
id="path23561"
sodipodi:nodetypes="cc"
@@ -51680,22 +51412,22 @@
sodipodi:nodetypes="cssssc"
id="path24352"
d="m 411.51991,375.4242 -0.5,-0.5 c -0.69131,-0.69131 -0.87523,-2.06255 1.2e-4,-2.92851 l 3.01169,-2.97968 c 0.87526,-0.86596 2.29698,-0.69523 2.98828,-0.004 l 0.52541,0.52542"
- style="opacity:0.68999999;fill:none;stroke:url(#radialGradient24354);stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.68999999;fill:none;stroke:url(#radialGradient24354);stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
id="path23600"
- style="fill:none;stroke:url(#linearGradient24341);stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 407.52985,379.36839 c 0.5623,0.50813 1.81497,0.33519 2.49825,-0.3481 l 2.95063,-3.084 c 0.87062,-0.87061 0.69197,-2.30021 0.004,-2.98827 l -1.02382,-1.02382 c -0.69131,-0.69131 -2.11766,-0.86672 -2.98828,0.004 l -2.95063,3.08399 c -0.87062,0.87063 -0.62293,2.42889 -0.004,2.98829 l 1.51384,1.368 1e-5,-9e-5 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient24341);stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 407.52985,379.36839 c 0.5623,0.50813 1.81497,0.33519 2.49825,-0.3481 l 2.95063,-3.084 c 0.87062,-0.87061 0.69197,-2.30021 0.004,-2.98827 l -1.02382,-1.02382 c -0.69131,-0.69131 -2.11766,-0.86672 -2.98828,0.004 l -2.95063,3.08399 c -0.87062,0.87063 -0.62293,2.42889 -0.004,2.98829 l 1.51384,1.368 z"
sodipodi:nodetypes="ccccccczz"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccczz"
- d="m 407.52985,379.36839 c 0.5623,0.50813 1.81497,0.33519 2.49825,-0.3481 l 2.95063,-3.084 c 0.87062,-0.87061 0.69197,-2.30021 0.004,-2.98827 l -1.02382,-1.02382 c -0.69131,-0.69131 -2.11766,-0.86672 -2.98828,0.004 l -2.95063,3.08399 c -0.87062,0.87063 -0.62293,2.42889 -0.004,2.98829 l 1.51384,1.368 1e-5,-9e-5 0,0 0,0 z"
- style="fill:none;stroke:url(#radialGradient23610);stroke-width:1.60000002;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5"
+ d="m 407.52985,379.36839 c 0.5623,0.50813 1.81497,0.33519 2.49825,-0.3481 l 2.95063,-3.084 c 0.87062,-0.87061 0.69197,-2.30021 0.004,-2.98827 l -1.02382,-1.02382 c -0.69131,-0.69131 -2.11766,-0.86672 -2.98828,0.004 l -2.95063,3.08399 c -0.87062,0.87063 -0.62293,2.42889 -0.004,2.98829 l 1.51384,1.368 z"
+ style="fill:none;stroke:url(#radialGradient23610);stroke-width:1.60000002;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1"
id="path23602"
inkscape:connector-curvature="0" />
<path
- style="fill:#000000;fill-opacity:0.10736198;fill-rule:nonzero;stroke:#04090f;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.50000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:0.10736198;fill-rule:nonzero;stroke:#04090f;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 415.01991,375.9242 c -0.84182,0.84182 -2.16034,0.83966 -3,0"
id="path23563"
sodipodi:nodetypes="cc"
@@ -51704,7 +51436,7 @@
sodipodi:nodetypes="csssssc"
id="path23604"
d="m 417.52541,369.52542 0.49841,0.4984 c 0.68807,0.68805 0.86671,2.11766 -0.004,2.98828 l -2.99178,2.99178 c -0.68328,0.68328 -1.74799,0.71589 -2.49825,0.34809 -0.18628,-0.0913 -0.37463,-0.2925 -0.51148,-0.42936 l -0.7484,-0.74841"
- style="fill:none;stroke:url(#radialGradient23612);stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5"
+ style="fill:none;stroke:url(#radialGradient23612);stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -51717,20 +51449,20 @@
height="16"
width="16"
id="rect23587"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<rect
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- style="opacity:0.35;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+ style="display:inline;opacity:0.35;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect23591"
width="4.0000005"
height="15"
x="533.5"
y="260.5" />
<path
- style="fill:url(#linearGradient22847);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40018745;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 533.5,275.5 4,0 0,-1 c 0,-2.5 2,-5 5,-5 l 1,0 0,-4 -1,0 c -5.17135,0 -9,3.25 -9,9 l 0,1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient22847);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40018749;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 533.5,275.5 h 4 v -1 c 0,-2.5 2,-5 5,-5 h 1 v -4 h -1 c -5.17135,0 -9,3.25 -9,9 z"
id="path23595"
sodipodi:nodetypes="ccssccssc"
inkscape:connector-curvature="0" />
@@ -51738,8 +51470,8 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- style="opacity:0.2;fill:none;stroke:url(#linearGradient22849);stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline"
- d="m 534.50003,274.5 0,-12.99752 1.99998,-0.002 0,12.99752 -1.99998,0.002 z"
+ style="display:inline;opacity:0.2;fill:none;stroke:url(#linearGradient22849);stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+ d="m 534.50003,274.5 v -12.99752 l 1.99998,-0.002 V 274.498 Z"
id="path23593"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
@@ -51747,7 +51479,7 @@
sodipodi:nodetypes="cc"
id="path23709"
d="m 542.5,266.5 c -4.89085,0.22833 -7.75,2.75 -8,8"
- style="fill:none;stroke:url(#linearGradient22851);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient22851);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<g
@@ -51760,9 +51492,9 @@
height="16.000002"
width="16.000006"
id="rect23350"
- style="opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect23352"
width="16"
height="16"
@@ -51775,87 +51507,72 @@
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
transform="matrix(1.0004639,0,0,0.9963165,-237.11238,367.28985)">
- <path
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
+ <circle
id="path23356"
- style="fill:#724c4c;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.10749674;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc"
+ style="display:inline;overflow:visible;visibility:visible;fill:#724c4c;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.10749674;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(0.81218,0,0,0.815735,163.7897,-27.2907)" />
- <path
+ transform="matrix(0.81218,0,0,0.815735,163.7897,-27.2907)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.7480284,0,0,0.7480284,172.26025,-19.267349)"
- sodipodi:type="arc"
- style="fill:#f9f9f9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.16363633;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#f9f9f9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.16363633;marker:none;enable-background:accumulate"
id="path23358"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.7478104,0,0,0.7510504,172.29077,-19.598754)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path23360"
style="opacity:0.6;fill:url(#linearGradient23373);fill-opacity:1;fill-rule:nonzero;stroke:none"
- sodipodi:type="arc" />
+ cx="132"
+ cy="118"
+ r="8" />
<path
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccc"
id="path40668"
- d="m 269.98748,62.965763 c -1.39411,0.455357 -2.67784,0.634788 -4.24803,3.011091 l 2.24896,0 1.99907,-3.011091 0,0 0,0 0,0 z m 0.99954,0 0,3.011091 2.99861,0 -1.99908,-3.011091 -0.99953,0 z m 2.99861,3.011091 0.99953,3.011091 1.99907,0 c 0.006,-0.929403 -0.1914,-1.917894 -0.74965,-3.011091 l -2.24895,0 0,0 0,0 0,0 z m 0.99953,3.011091 -3.99814,0 0,3.011092 2.49884,0 1.4993,-3.011092 z m -3.99814,3.011092 -2.99861,0 1.99907,3.011091 0.99954,0 0,-3.011091 0,0 0,0 0,0 z m -2.99861,0 -0.99954,-3.011092 -1.99907,0 c -0.006,0.929404 0.1914,1.917895 0.74965,3.011092 l 2.24896,0 0,0 0,0 0,0 z m -0.99954,-3.011092 3.99815,0 0,-3.011091 -2.49884,0 -1.49931,3.011091 0,0 0,0 0,0 z m 7.24312,3.011092 -1.85125,3.011091 c 1.3675,-0.485137 2.19971,-0.728674 3.85384,-3.011091 l -2.00259,0 z"
- style="fill:url(#linearGradient23375);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 269.98748,62.965763 c -1.39411,0.455357 -2.67784,0.634788 -4.24803,3.011091 h 2.24896 z m 0.99954,0 v 3.011091 h 2.99861 l -1.99908,-3.011091 z m 2.99861,3.011091 0.99953,3.011091 h 1.99907 c 0.006,-0.929403 -0.1914,-1.917894 -0.74965,-3.011091 z m 0.99953,3.011091 h -3.99814 v 3.011092 h 2.49884 z m -3.99814,3.011092 h -2.99861 l 1.99907,3.011091 h 0.99954 z m -2.99861,0 -0.99954,-3.011092 h -1.99907 c -0.006,0.929404 0.1914,1.917895 0.74965,3.011092 z m -0.99954,-3.011092 h 3.99815 v -3.011091 h -2.49884 z m 7.24312,3.011092 -1.85125,3.011091 c 1.3675,-0.485137 2.19971,-0.728674 3.85384,-3.011091 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23375);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:#990d18;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 274.00069,72.011668 0.005,0.97479 -0.99045,0.01431 -0.0223,1.019377 -0.481,0.837285 c 0.77072,-0.321774 2.72643,-1.067855 3.69499,-2.816464 l -2.20604,-0.0293 -2e-4,2e-6 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#990d18;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 274.00069,72.011668 0.005,0.97479 -0.99045,0.01431 -0.0223,1.019377 -0.481,0.837285 c 0.77072,-0.321774 2.72643,-1.067855 3.69499,-2.816464 l -2.20604,-0.0293 z"
id="path23365"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
- <path
- sodipodi:type="arc"
+ <circle
style="opacity:0.4;fill:url(#linearGradient23377);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path40671"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(0.749782,0,0,0.752489,172.03052,-19.77379)" />
- <path
+ transform="matrix(0.749782,0,0,0.752489,172.03052,-19.77379)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path23369"
- style="fill:none;stroke:url(#linearGradient23379);stroke-width:1.14049816;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
- sodipodi:type="arc"
- transform="matrix(0.7010701,0,0,0.7040938,178.4346,-14.083074)" />
+ style="display:inline;fill:none;stroke:url(#linearGradient23379);stroke-width:1.14049816;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.7010701,0,0,0.7040938,178.4346,-14.083074)"
+ cx="132"
+ cy="118"
+ r="8" />
<path
id="path23371"
- d="m 268.98793,64.973163 0,0.407752 -0.93706,0 0,0.595945 -0.56224,0 0,1.003697 -0.49977,0 0,1.505546 0.99953,0 0,-1.505546 0.4373,0 0,-0.595945 0.56224,0 0,-0.407752 1.53054,0 0,-1.003697 -1.53054,0 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#aaccff;stroke-width:0;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 268.98793,64.973163 v 0.407752 h -0.93706 v 0.595945 h -0.56224 v 1.003697 h -0.49977 v 1.505546 h 0.99953 v -1.505546 h 0.4373 v -0.595945 h 0.56224 V 65.97686 h 1.53054 v -1.003697 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#aaccff;stroke-width:0;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -51868,14 +51585,14 @@
height="16"
width="16"
id="rect22743"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g22808">
<g
id="g23567">
<path
- style="fill:url(#linearGradient23565);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40018745;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 511.5,282.5 1.25,0 1.5,1 5.5,0 1.5,-1 1.25,0 0,8.25 c 0,6.25 -11,6.25 -11,0 l 0,-8.25 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23565);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40018749;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 511.5,282.5 h 1.25 l 1.5,1 h 5.5 l 1.5,-1 h 1.25 v 8.25 c 0,6.25 -11,6.25 -11,0 z"
id="path22751"
sodipodi:nodetypes="ccccccccc"
inkscape:connector-curvature="0" />
@@ -51884,7 +51601,7 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
style="fill:none;stroke:url(#linearGradient23562);stroke-width:0.99999982px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 512.5,291 0,-7.25 c 0.8354,1.24437 8.04784,1.12713 9,0 l 0,7.25 c 0,4.5 -9,4.5 -9,0 z"
+ d="m 512.5,291 v -7.25 c 0.8354,1.24437 8.04784,1.12713 9,0 V 291 c 0,4.5 -9,4.5 -9,0 z"
id="path22753"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
@@ -51900,19 +51617,19 @@
height="3"
width="3"
id="rect23592"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;enable-background:accumulate"
rx="1.0220957"
ry="1.1453303" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 518.8317,286 1.3366,0 c 0.46076,0 0.8317,0.49209 0.8317,1.10334 l 0,0.79332 C 521,288.50791 520.62906,289 520.1683,289 l -1.3366,0 C 518.37094,289 518,288.50791 518,287.89666 l 0,-0.79332 C 518,286.49209 518.37094,286 518.8317,286 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;enable-background:accumulate"
+ d="m 518.8317,286 h 1.3366 c 0.46076,0 0.8317,0.49209 0.8317,1.10334 v 0.79332 C 521,288.50791 520.62906,289 520.1683,289 h -1.3366 C 518.37094,289 518,288.50791 518,287.89666 v -0.79332 C 518,286.49209 518.37094,286 518.8317,286 Z"
id="rect23595"
inkscape:connector-curvature="0" />
</g>
<g
id="g23614">
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;enable-background:accumulate"
id="rect23599"
width="2"
height="2"
@@ -51924,9 +51641,9 @@
height="2"
width="4.5"
id="rect23601"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;enable-background:accumulate"
id="rect23607"
width="1.25"
height="2"
@@ -51935,8 +51652,8 @@
</g>
</g>
<path
- style="fill:#0b1728;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 514,287.25 1.25,-1.25 0.75,0 0,2 -2,0 0,-0.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#0b1728;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;enable-background:accumulate"
+ d="M 514,287.25 515.25,286 H 516 v 2 h -2 z"
id="rect23575"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
@@ -51946,24 +51663,24 @@
height="1"
width="1"
id="rect23577"
- style="fill:#162d50;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#162d50;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;enable-background:accumulate" />
<rect
- style="fill:#162d50;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#162d50;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;enable-background:accumulate"
id="rect23579"
width="4"
height="1"
x="515"
y="291" />
<rect
- style="fill:#162d50;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#162d50;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;enable-background:accumulate"
id="rect23583"
width="1"
height="1"
x="519"
y="290" />
<path
- style="fill:#0b1728;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 520,286 -0.75,0 -1.25,1.25 0,0.75 2,0 0,-2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#0b1728;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;marker:none;enable-background:accumulate"
+ d="m 520,286 h -0.75 L 518,287.25 V 288 h 2 z"
id="rect23597"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
@@ -51978,28 +51695,28 @@
id="g24005"
transform="translate(90,-142)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect24007"
width="16"
height="16"
x="-64"
y="336" />
<g
- transform="translate(1,0)"
+ transform="translate(1)"
id="g24009">
<g
transform="translate(-386,446.5)"
id="g24011">
<path
id="path24028"
- d="m 329.5,-108.25 -5.5,2 0,6.75 5.5,3 5.5,-3 0,-6.75 -5.5,-2 z"
- style="fill:#552200;fill-opacity:1;fill-rule:evenodd;stroke:#1a1a1a;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 329.5,-108.25 -5.5,2 v 6.75 l 5.5,3 5.5,-3 v -6.75 z"
+ style="fill:#552200;fill-opacity:1;fill-rule:evenodd;stroke:#1a1a1a;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccc"
- style="fill:#c9c9c9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06898749px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 324,-99.5 0,-7 6,-1.75 0,11.5 -0.5,0.25 -5.5,-3 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#c9c9c9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06898749px;marker:none;enable-background:accumulate"
+ d="m 324,-99.5 v -7 l 6,-1.75 v 11.5 l -0.5,0.25 z"
id="path24030"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -52012,8 +51729,8 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
- style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89401144px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 156,79.5 0,-7 -5,-1.75 0,11.5 5,-2.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89401144px;marker:none;enable-background:accumulate"
+ d="m 156,79.5 v -7 l -5,-1.75 v 11.5 z"
id="path24034"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
@@ -52023,48 +51740,48 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
sodipodi:nodetypes="ccccc"
style="fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 145,72.5 5.5,-2 5.5,2 -5.5,2.5 -5.5,-2.5 z"
+ d="m 145,72.5 5.5,-2 5.5,2 -5.5,2.5 z"
id="path24036"
inkscape:connector-curvature="0" />
</g>
<path
style="fill:none;stroke:url(#linearGradient24052);stroke-width:0.99999982px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 334.5,-106.5 0,6.75 -5,2.75 -5,-2.75 0,-6.75"
+ d="m 334.5,-106.5 v 6.75 l -5,2.75 -5,-2.75 v -6.75"
id="path24039"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
</g>
<rect
- style="fill:url(#linearGradient24054);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient24054);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
id="rect24041"
width="1"
height="7.75"
x="-57"
y="342" />
<path
- style="fill:none;stroke:url(#linearGradient24056);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:url(#linearGradient24056);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m -61,340.65468 c 0,0 4.5,2 4.5,2 l 4.5,-2"
id="path24044"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
<path
id="path24062"
- d="m 202.5,135.71875 -6,2.18085 0,7.36038 6,3.27127 6,-3.27127 0,-7.36038 -6,-2.18085 z"
- style="opacity:0.65;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline;enable-background:new"
+ d="m 202.5,135.71875 -6,2.18085 v 7.36038 l 6,3.27127 6,-3.27127 v -7.36038 z"
+ style="display:inline;opacity:0.65;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;enable-background:new"
sodipodi:nodetypes="ccccccc"
transform="translate(-259,202)"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccc"
- style="fill:none;stroke:url(#linearGradient24066);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
- d="m -56.5,337.71875 -6,2.18085 0,7.36038 6,3.27127 6,-3.27127 0,-7.36038 -6,-2.18085 z"
+ style="display:inline;fill:none;stroke:url(#linearGradient24066);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="m -56.5,337.71875 -6,2.18085 v 7.36038 l 6,3.27127 6,-3.27127 v -7.36038 z"
id="path24058"
inkscape:connector-curvature="0" />
</g>
</g>
<g
id="g24046"
- style="fill:#ffeeaa;display:inline"
+ style="display:inline;fill:#ffeeaa"
transform="translate(-1081.9421,-238.02038)" />
</g>
<g
@@ -52078,20 +51795,20 @@
transform="translate(43.04504,242.48228)"
id="g24228">
<path
- style="opacity:0.8;fill:none;stroke:#333333;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 90.45451,103.98095 0,7 7.00045,0.0368 0,-7 -7.00045,-0.0368 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.8;fill:none;stroke:#333333;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 90.45451,103.98095 v 7 l 7.00045,0.0368 v -7 z"
id="path24230"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path24232"
- d="m 90.45451,103.98095 4.5e-4,7.03677 7,0 -4.5e-4,-7.03677 -7,0 z"
- style="fill:#989898;fill-opacity:1;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 90.45451,103.98095 4.5e-4,7.03677 h 7 l -4.5e-4,-7.03677 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#989898;fill-opacity:1;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<rect
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect24234"
width="2.9998772"
height="3"
@@ -52107,9 +51824,9 @@
height="3"
width="2.9998772"
id="rect24236"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect24238"
width="2.9998772"
height="3"
@@ -52123,10 +51840,10 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path24240"
d="m 142.00027,353 c -0.6694,0 -1.3388,10e-6 -2.0082,10e-6 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-10e-6 2.0082,-10e-6 0,-0.66939 0,-1.33878 0,-2.00817 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 134.00042,353.00003 c -0.6694,0 -1.3388,1e-5 -2.0082,1e-5 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-1e-5 2.0082,-1e-5 0,-0.66939 0,-1.33878 0,-2.00817 z"
id="path24242"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -52134,7 +51851,7 @@
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 133.99997,345.00003 c -0.6694,0 -1.3388,1e-5 -2.0082,1e-5 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-1e-5 2.0082,-1e-5 0,-0.66939 0,-1.33878 0,-2.00817 z"
id="path24244"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -52149,9 +51866,9 @@
height="3"
width="2.9998772"
id="rect24246"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 142,345 c -0.6694,0 -1.3388,10e-6 -2.0082,10e-6 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-10e-6 2.0082,-10e-6 0,-0.66939 0,-1.33878 0,-2.00817 z"
id="path24248"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -52168,12 +51885,12 @@
<path
sodipodi:nodetypes="ccccc"
id="path24254"
- d="m 90.45451,103.98095 0,7 7.00045,0.0368 0,-7 -7.00045,-0.0368 z"
- style="opacity:0.8;fill:none;stroke:#333333;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 90.45451,103.98095 v 7 l 7.00045,0.0368 v -7 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.8;fill:none;stroke:#333333;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:#c3c3c3;fill-opacity:1;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 90.45451,103.98095 4.5e-4,7.03677 7,0 -4.5e-4,-7.03677 -7,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#c3c3c3;fill-opacity:1;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 90.45451,103.98095 4.5e-4,7.03677 h 7 l -4.5e-4,-7.03677 z"
id="path24256"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
@@ -52186,9 +51903,9 @@
height="3"
width="2.9998772"
id="rect24258"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect24260"
width="2.9998772"
height="3"
@@ -52204,9 +51921,9 @@
height="3"
width="2.9998772"
id="rect24262"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 142.00027,353 c -0.6694,0 -1.3388,10e-6 -2.0082,10e-6 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-10e-6 2.0082,-10e-6 0,-0.66939 0,-1.33878 0,-2.00817 z"
id="path24264"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -52219,7 +51936,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path24266"
d="m 134.00042,353.00003 c -0.6694,0 -1.3388,1e-5 -2.0082,1e-5 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-1e-5 2.0082,-1e-5 0,-0.66939 0,-1.33878 0,-2.00817 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
@@ -52227,10 +51944,10 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path24268"
d="m 133.99997,345.00003 c -0.6694,0 -1.3388,1e-5 -2.0082,1e-5 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-1e-5 2.0082,-1e-5 0,-0.66939 0,-1.33878 0,-2.00817 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<rect
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect24270"
width="2.9998772"
height="3"
@@ -52244,7 +51961,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path24272"
d="m 142,345 c -0.6694,0 -1.3388,10e-6 -2.0082,10e-6 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-10e-6 2.0082,-10e-6 0,-0.66939 0,-1.33878 0,-2.00817 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -52257,29 +51974,29 @@
height="16"
width="16"
id="rect23087"
- style="opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate" />
<g
id="g23937">
<path
sodipodi:nodetypes="cscc"
d="m 140,-21 c 1.125,1 3.5,0.25 3.5,-1 0,-1.5 0.47443,-1.637992 -2,-1.5 -0.1033,1.43128 -0.66697,1.819388 -1.5,2.5 z"
- style="fill:#999999;fill-rule:evenodd;stroke:#000000;stroke-width:0.55000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:#999999;fill-rule:evenodd;stroke:#000000;stroke-width:0.55000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path23906"
inkscape:connector-curvature="0" />
<path
id="path23099"
- style="fill:#e6e6e6;fill-rule:evenodd;stroke:#000000;stroke-width:0.55000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:#e6e6e6;fill-rule:evenodd;stroke:#000000;stroke-width:0.55000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 132,-21 c -1.125,1 -3.5,0.25 -3.5,-1 0,-1.5 -0.47443,-1.637992 2,-1.5 0.1033,1.43128 0.66697,1.819388 1.5,2.5 z"
sodipodi:nodetypes="cscc"
inkscape:connector-curvature="0" />
<path
id="path23090"
- style="fill:url(#linearGradient23971);fill-rule:evenodd;stroke:none;display:inline;enable-background:new"
- d="m 135.75,-25.5 -1.25,-2 -0.75,0 -3.25,2.75 0,1.25 c 0.15379,2.182132 1.3678,1.901463 3,4 l 0,4.5 c 0,1.5 1.5,1.5 2.5,1.5 1,0 2.5,0 2.5,-1.5 l 0,-4.5 c 1.62605,-2.090636 2.83897,-1.844587 3,-4 l 0,-1.25 -3.25,-2.75 -0.75,0 -1.25,2"
+ style="display:inline;fill:url(#linearGradient23971);fill-rule:evenodd;stroke:none;enable-background:new"
+ d="m 135.75,-25.5 -1.25,-2 h -0.75 l -3.25,2.75 v 1.25 c 0.15379,2.182132 1.3678,1.901463 3,4 v 4.5 c 0,1.5 1.5,1.5 2.5,1.5 1,0 2.5,0 2.5,-1.5 v -4.5 c 1.62605,-2.090636 2.83897,-1.844587 3,-4 v -1.25 l -3.25,-2.75 h -0.75 l -1.25,2"
sodipodi:nodetypes="cccccccsccccccc"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.8;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.8;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate"
id="rect23876"
width="2"
height="1"
@@ -52291,79 +52008,64 @@
height="2"
width="2.75"
id="rect23881"
- style="fill:url(#linearGradient24099);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient24099);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate"
ry="1"
rx="1" />
<rect
- style="fill:#f9f9f9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#f9f9f9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate"
id="rect23883"
width="2"
height="1"
x="135"
y="-21" />
- <path
- sodipodi:type="arc"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="path23902"
- sodipodi:cx="133"
- sodipodi:cy="-23"
- sodipodi:rx="1"
- sodipodi:ry="1"
- d="m 134,-23 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- transform="translate(0.5,-0.46875)" />
- <path
+ transform="translate(0.5,-0.46875)"
+ cx="133"
+ cy="-23"
+ r="1" />
+ <circle
transform="matrix(1.2143583,0,0,1.1512108,-28.054112,2.9290602)"
- d="m 134,-23 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- sodipodi:ry="1"
- sodipodi:rx="1"
- sodipodi:cy="-23"
- sodipodi:cx="133"
id="path23125"
- style="fill:none;stroke:url(#linearGradient23973);stroke-width:0.93034029;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23973);stroke-width:0.93034029;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="133"
+ cy="-23"
+ r="1" />
+ <circle
transform="matrix(0.8392157,0,0,0.8382979,21.884318,-4.2140957)"
- d="m 134,-23 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- sodipodi:ry="1"
- sodipodi:rx="1"
- sodipodi:cy="-23"
- sodipodi:cx="133"
id="path23900"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
+ cx="133"
+ cy="-23"
+ r="1" />
<rect
y="-15"
x="135"
height="1"
width="2"
id="rect23914"
- style="opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="ccccccccccccccccs"
- d="m 131.88556,-21.103144 c 0.4583,0.371362 1.00745,1.072735 1.61444,1.853144 l 0,3.75 c 0,1.5 1.5,2 2.5,2 1,0 2.5,-0.5 2.5,-2 l 0,-3.75 c 0.64842,-0.833678 1.23114,-1.545786 1.70766,-1.936772 M 130.5,-23.5 l 0,-1.25 3,-2.75 1,0 1.25,1.75 0.5,0 1.25,-1.75 1,0 3,2.75 0,1.25"
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
+ d="m 131.88556,-21.103144 c 0.4583,0.371362 1.00745,1.072735 1.61444,1.853144 v 3.75 c 0,1.5 1.5,2 2.5,2 1,0 2.5,-0.5 2.5,-2 v -3.75 c 0.64842,-0.833678 1.23114,-1.545786 1.70766,-1.936772 M 130.5,-23.5 v -1.25 l 3,-2.75 h 1 l 1.25,1.75 h 0.5 l 1.25,-1.75 h 1 l 3,2.75 v 1.25"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
id="path23924"
inkscape:connector-curvature="0" />
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient23975);stroke-width:0.94079971;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23975);stroke-width:0.94079971;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path23960"
- sodipodi:cx="133"
- sodipodi:cy="-23"
- sodipodi:rx="1"
- sodipodi:ry="1"
- d="m 134,-23 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- transform="matrix(1.2116904,0,0,1.1282344,-22.693138,2.3776257)" />
- <path
- sodipodi:type="arc"
- style="fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ transform="matrix(1.2116904,0,0,1.1282344,-22.693138,2.3776257)"
+ cx="133"
+ cy="-23"
+ r="1" />
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="path23970"
- sodipodi:cx="133"
- sodipodi:cy="-23"
- sodipodi:rx="1"
- sodipodi:ry="1"
- d="m 134,-23 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- transform="matrix(0.8392157,0,0,0.8382979,26.893134,-4.2140957)" />
+ transform="matrix(0.8392157,0,0,0.8382979,26.893134,-4.2140957)"
+ cx="133"
+ cy="-23"
+ r="1" />
<path
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
d="M 136.75,-24.75 138,-26.5"
@@ -52389,7 +52091,7 @@
id="ICON_MOD_SHRINKWRAP"
transform="translate(-21,-19)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect23149"
width="16"
height="16"
@@ -52406,8 +52108,8 @@
style="display:inline"
transform="matrix(-1.0003553,0,0,0.9995949,486.01617,193.04665)">
<path
- style="fill:url(#linearGradient24539);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.70001745;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40018745;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 55.496449,92.490815 4.998228,0.0015 -1e-6,6.000906 -4.998227,-4e-6 m -5.997869,0 -3.99858,10e-7 10e-7,-6.002432 3.998579,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient24539);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.70001745;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40018749;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 55.496449,92.490815 4.998228,0.0015 -1e-6,6.000906 -4.998227,-4e-6 m -5.997869,0 -3.99858,10e-7 10e-7,-6.002432 h 3.998579"
id="path24388"
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0" />
@@ -52416,7 +52118,7 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
style="fill:none;stroke:url(#linearGradient24541);stroke-width:1.0000248px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 55.496399,97.494124 3.998631,4.3e-4 10e-7,-4.003331 -3.998582,-3e-6 m -5.997771,-8.55e-4 -2.999032,8.54e-4 -1.96e-4,4.001622 2.99913,0"
+ d="m 55.496399,97.494124 3.998631,4.3e-4 10e-7,-4.003331 -3.998582,-3e-6 m -5.997771,-8.55e-4 -2.999032,8.54e-4 -1.96e-4,4.001622 h 2.99913"
id="path24390"
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0" />
@@ -52429,32 +52131,30 @@
sodipodi:nodetypes="cccsccc"
id="path23156"
d="m 472.50033,152.49994 c -1.9309,0 -3,0.66961 -3,1.5 L 469.50029,166 c 0,0.83039 1.0691,1.5 3,1.5 1.9309,0 3,-0.66961 3,-1.5 l 4e-5,-12.00006 c 0,-0.83039 -1.0691,-1.5 -3,-1.5 z"
- style="fill:url(#linearGradient24543);fill-opacity:1;fill-rule:nonzero;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient24543);fill-opacity:1;fill-rule:nonzero;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path23158"
d="m 470.50033,153.99994 -4e-5,12.01111 c 0,0.54648 1,0.54648 2,0.54648 1,0 2,0 2,-0.55753 l 4e-5,-12.01111"
- style="fill:none;stroke:url(#linearGradient24545);stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient24545);stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
- <path
+ <ellipse
transform="matrix(0.9067635,0,0,1.2421435,374.56954,430.00586)"
- d="M 111.30847,-222 A 3.3084693,1.2798798 0 0 1 108,-220.72012 3.3084693,1.2798798 0 0 1 104.69153,-222 3.3084693,1.2798798 0 0 1 108,-223.27988 3.3084693,1.2798798 0 0 1 111.30847,-222 Z"
- sodipodi:ry="1.2798798"
- sodipodi:rx="3.3084693"
- sodipodi:cy="-222"
- sodipodi:cx="108"
id="path23160"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.73959124;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.73959124;marker:none;enable-background:accumulate"
+ cx="108"
+ cy="-222"
+ rx="3.3084693"
+ ry="1.2798798" />
<path
- style="fill:none;stroke:#1a1a1a;stroke-width:0.69999999;stroke-miterlimit:4;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#1a1a1a;stroke-width:0.69999999;stroke-miterlimit:4;stroke-dasharray:none;marker:none;enable-background:accumulate"
d="m 472.50033,152.49994 c -0.62477,0 -1.15931,0.0523 -1.5966,0.15704 -0.91421,0.21887 -1.4034,0.66652 -1.4034,1.34296 L 469.50029,166 c 0,0.83039 1.0691,1.5 3,1.5 1.9309,0 3.00029,-0.75001 3,-1.5 l 4e-5,-12.00006 c 0,-1 -1.0691,-1.5 -3,-1.5 z"
id="path23163"
sodipodi:nodetypes="csccsccc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient24547);stroke-width:0.80000001;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient24547);stroke-width:0.80000001;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;marker:none;enable-background:accumulate"
d="m 469.50033,154 c 0,1.5 1.0691,1.5 3,1.5 1.9309,0 3,-0.25 3,-1.5"
id="path24484"
sodipodi:nodetypes="ccc"
@@ -52462,30 +52162,30 @@
</g>
<path
id="path24404"
- style="fill:url(#linearGradient24549);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient24549);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
d="m 436.5,292 c -2.9e-4,-0.74999 -2.9e-4,-6.75005 0,-6.00006 2.9e-4,0.74999 -1.0691,1.5 -3,1.5 -1.9309,0 -3,-0.66961 -3,-1.5 0,-0.83039 0,5.16967 0,6.00006 0,0.83039 1.0691,1.5 3,1.5 1.9309,0 3.00029,-0.75001 3,-1.5 z"
sodipodi:nodetypes="ccsccsc"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.3;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;marker:none;enable-background:accumulate"
d="m 430.75001,287.5 c 0,0.54447 0.98001,0.98352 2.75,0.98352 1.77,0 2.75027,-0.49177 2.75,-0.98352"
id="path24464"
sodipodi:nodetypes="csc"
inkscape:connector-curvature="0" />
<path
id="path24472"
- style="fill:none;stroke:url(#linearGradient24551);stroke-width:0.80000001;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 430.5,285.75 0,5.5 m 6,-5.5 0,5.5"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient24551);stroke-width:0.80000001;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;marker:none;enable-background:accumulate"
+ d="m 430.5,285.75 v 5.5 m 6,-5.5 v 5.5"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="csc"
id="path24424"
- d="m 430.5,285.5 0,0.5 c 0,0.83039 1.0691,1.5 3,1.5 1.9309,0 3.00029,-0.75001 3,-1.5 l 0,-0.5"
- style="fill:none;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 430.5,285.5 v 0.5 c 0,0.83039 1.0691,1.5 3,1.5 1.9309,0 3.00029,-0.75001 3,-1.5 v -0.5"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 430.5,291.5 0,0.75 c 0,0.75 1.0691,1.25 3,1.25 1.9309,0 3,-0.5 3,-1.25 l 0,-0.75"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;marker:none;enable-background:accumulate"
+ d="m 430.5,291.5 v 0.75 c 0,0.75 1.0691,1.25 3,1.25 1.9309,0 3,-0.5 3,-1.25 v -0.75"
id="path24470"
sodipodi:nodetypes="csccc"
inkscape:connector-curvature="0" />
@@ -52495,11 +52195,11 @@
id="ICON_MOD_CAST"
transform="translate(126,23)">
<g
- style="opacity:0.45;display:inline"
+ style="display:inline;opacity:0.45"
id="g23290"
transform="translate(216,191)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect23292"
width="16"
height="16"
@@ -52512,45 +52212,36 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path23297"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.98948926;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.6969446,0,0,0.6900977,36.918531,141.69345)" />
- <path
- sodipodi:type="arc"
- style="opacity:0.8;fill:url(#linearGradient24112);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.98948926;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.6969446,0,0,0.6900977,36.918531,141.69345)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
+ style="display:inline;opacity:0.8;fill:url(#linearGradient24112);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path23299"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(-0.6391427,-0.07194179,0.07284933,-0.6344823,204.68584,307.47408)" />
- <path
+ transform="matrix(-0.6391427,-0.07194179,0.07284933,-0.6344823,204.68584,307.47408)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.5885088,0,0,0.5897133,51.241774,153.48488)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient24114);stroke-width:1.45605874;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient24114);stroke-width:1.45605874;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path23301"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
@@ -52560,7 +52251,7 @@
<g
id="g24238">
<path
- style="opacity:0.7;fill:url(#linearGradient24116);fill-opacity:1;fill-rule:nonzero;stroke:#132747;stroke-width:0.69999999;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:url(#linearGradient24116);fill-opacity:1;fill-rule:nonzero;stroke:#132747;stroke-width:0.69999999;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 313.25,246.5 c -2.13129,3.51035 -4.20028,0.92659 -6.75,0 -2.5,-0.90852 -5.25,-1.69675 -5.75,-0.25 -1,3.5 1.75,8.25 6.25,8.25 4.5,0 7.25,-4.5 6.25,-8 z"
id="path24164"
sodipodi:nodetypes="csczc"
@@ -52569,7 +52260,7 @@
sodipodi:nodetypes="cc"
id="path24220"
d="M 301.49346,248.00351 C 300.75,245 304.5,246.75 307.5,247.5"
- style="fill:none;stroke:url(#linearGradient24118);stroke-width:1.00000083;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;display:inline;enable-background:new"
+ style="display:inline;fill:none;stroke:url(#linearGradient24118);stroke-width:1.00000083;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
</g>
<g
@@ -52580,41 +52271,35 @@
id="g24116"
style="display:inline;enable-background:new"
clip-path="url(#clipPath24168)">
- <path
+ <circle
transform="matrix(0.75,0,0,0.75,29.5,135)"
- sodipodi:type="arc"
- style="fill:url(#linearGradient24121);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.98504531;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient24121);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.98504531;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path24134"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.6352868,0,0,0.6352859,44.642106,148.53594)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient24123);stroke-width:1.45364487;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient24123);stroke-width:1.45364487;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path24144"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<path
sodipodi:nodetypes="cs"
id="path24166"
d="m 306.9667,246.52825 c -1.63301,1.38546 -3.26623,2.75322 -4.93069,1.49745"
- style="fill:none;stroke:#132747;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#132747;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 313.25,246.25 c -1,-3.5 -4.2097,-1.48101 -6.2833,0.27825"
id="path24198"
sodipodi:nodetypes="cs"
@@ -52626,7 +52311,7 @@
id="ICON_MOD_SOFT"
transform="translate(0,2)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect41109"
width="16"
height="16"
@@ -52643,16 +52328,16 @@
sodipodi:nodetypes="cc"
id="path41115"
d="m 195.7,12.34375 -8.21612,8.25"
- style="fill:none;stroke:#0b1728;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#0b1728;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<g
- transform="matrix(0.941788,0.336207,-0.336207,0.941788,16.5539,-62.39971)"
+ transform="rotate(19.645954,188.47399,16.604212)"
id="g41117">
<path
sodipodi:nodetypes="csccsc"
id="path41119"
d="m 191.82819,15.661146 c -2.50169,-2.892812 -3.51599,-3.257525 -5.63502,-2.501059 -1.55469,0.555005 -3.0441,1.883066 -4.82641,-0.135198 l 3.04462,-5.5995832 c 1.58362,1.6624741 2.57888,1.2029919 3.73322,0.7909034 1.64813,-0.5883624 2.98174,-0.5189446 6.10591,2.3329558"
- style="fill:url(#linearGradient41127);fill-opacity:1;fill-rule:evenodd;stroke:#0b1728;stroke-width:0.80000007;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:url(#linearGradient41127);fill-opacity:1;fill-rule:evenodd;stroke:#0b1728;stroke-width:0.80000007;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
style="opacity:0.8;fill:none;stroke:url(#linearGradient41129);stroke-width:0.85000008;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
@@ -52662,7 +52347,7 @@
inkscape:connector-curvature="0" />
</g>
<path
- style="fill:#6593d4;fill-opacity:1;fill-rule:evenodd;stroke:#87aade;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:#6593d4;fill-opacity:1;fill-rule:evenodd;stroke:#87aade;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 195.7,12.34375 -8.21612,8.25"
id="path41123"
sodipodi:nodetypes="cc"
@@ -52671,7 +52356,7 @@
sodipodi:nodetypes="cc"
id="path41125"
d="m 191.6399,15.190092 3.2987,-3.242382"
- style="opacity:0.5;fill:#6593d4;fill-opacity:1;fill-rule:evenodd;stroke:#2c5aa0;stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.5;fill:#6593d4;fill-opacity:1;fill-rule:evenodd;stroke:#2c5aa0;stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -52689,20 +52374,20 @@
height="16"
width="16"
id="rect41134"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g41136">
<path
id="path41138"
- style="fill:none;stroke:#000000;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 131.51612,200.41538 0,3.2 3,1.88462 2.75,-1.75 m -5.75,-0.62692 -3,2.37692 0,4 m 3,-9.08462 3,0.0846 2,-3 m -10.75,0.25 2.25,2.66538 3.5,0"
+ style="fill:none;stroke:#000000;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 131.51612,200.41538 v 3.2 l 3,1.88462 2.75,-1.75 m -5.75,-0.62692 -3,2.37692 v 4 m 3,-9.08462 3,0.0846 2,-3 m -10.75,0.25 2.25,2.66538 h 3.5"
sodipodi:nodetypes="ccccccccccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<rect
- style="fill:#acacac;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:#acacac;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect41140"
width="2"
height="1.9692308"
@@ -52726,8 +52411,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path41144"
- style="fill:none;stroke:url(#linearGradient41170);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 125.76612,197.75 2.25,2.75 3.5,0 m 0,0 0,3 3,2 2.75,-1.75 m -5.75,-0.62692 -3,2.37692 0,4 m 3,-9 3,0 2,-3"
+ style="fill:none;stroke:url(#linearGradient41170);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 125.76612,197.75 2.25,2.75 h 3.5 m 0,0 v 3 l 3,2 2.75,-1.75 m -5.75,-0.62692 -3,2.37692 v 4 m 3,-9 h 3 l 2,-3"
sodipodi:nodetypes="ccccccccccccc"
inkscape:connector-curvature="0" />
</g>
@@ -52737,7 +52422,7 @@
id="ICON_ARMATURE_DATA"
transform="translate(78,299.00001)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect41148"
width="16"
height="16"
@@ -52748,7 +52433,7 @@
transform="translate(0,-1)">
<path
id="path41152"
- style="fill:none;stroke:#000000;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 270.51612,199.5 -0.0161,2 1.75,4 1.25,3 m -3,-7 -1.75,4 -1.25,3"
sodipodi:nodetypes="ccccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -52756,7 +52441,7 @@
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<rect
- style="fill:none;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect41154"
width="2"
height="2"
@@ -52770,14 +52455,14 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="ccccccc"
- d="m 270.51612,199.5 3,0 2.75,0 m -11.5,0 2.75,0 3,0"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 270.51612,199.5 h 3 2.75 m -11.5,0 h 2.75 3"
+ style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path23087"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccccccc"
- d="m 270.51612,199.5 -0.0161,2 1.75,4 1.25,3 m -3,-7 -1.75,4 -1.25,3 m 3.01612,-9 3,0 2.75,0 m -11.5,0 2.75,0 3,0"
- style="fill:none;stroke:url(#linearGradient41172);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 270.51612,199.5 -0.0161,2 1.75,4 1.25,3 m -3,-7 -1.75,4 -1.25,3 m 3.01612,-9 h 3 2.75 m -11.5,0 h 2.75 3"
+ style="fill:none;stroke:url(#linearGradient41172);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path41157"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -52789,7 +52474,7 @@
height="2.75"
width="2.4999998"
id="rect41159"
- style="opacity:0.5;fill:none;stroke:url(#radialGradient41174);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="opacity:0.5;fill:none;stroke:url(#radialGradient41174);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
@@ -52810,7 +52495,7 @@
id="ICON_POSE_HLT"
style="display:inline;enable-background:new">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect42001"
width="16"
height="16"
@@ -52825,15 +52510,15 @@
id="g42059">
<path
id="path42061"
- style="fill:none;stroke:#000000;stroke-width:3.0999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 131.51612,200.41538 0,3.2 3,1.88462 2.75,-1.75 m -5.75,-0.62692 -3,2.37692 -0.002,3.68505 m 3.00187,-8.76967 3,0.0846 2,-3 m -10.75,0.25 2.25,2.66538 3.5,0"
+ style="fill:none;stroke:#000000;stroke-width:3.0999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 131.51612,200.41538 v 3.2 l 3,1.88462 2.75,-1.75 m -5.75,-0.62692 -3,2.37692 -0.002,3.68505 m 3.00187,-8.76967 3,0.0846 2,-3 m -10.75,0.25 2.25,2.66538 h 3.5"
sodipodi:nodetypes="ccccccccccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<rect
- style="fill:#acacac;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:#acacac;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect42063"
width="2"
height="1.9692308"
@@ -52857,8 +52542,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path42067"
- style="fill:none;stroke:url(#linearGradient42069);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 125.76612,197.75 2.25,2.75 3.5,0 m 0,0 0,3 3,2 2.75,-1.75 m -5.75,-0.62692 -3,2.37692 -0.002,3.68505 m 3.00187,-8.68505 3,0 2,-3"
+ style="fill:none;stroke:url(#linearGradient42069);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 125.76612,197.75 2.25,2.75 h 3.5 m 0,0 v 3 l 3,2 2.75,-1.75 m -5.75,-0.62692 -3,2.37692 -0.002,3.68505 M 131.51599,200.5 h 3 l 2,-3"
sodipodi:nodetypes="ccccccccccccc"
inkscape:connector-curvature="0" />
</g>
@@ -52871,8 +52556,8 @@
transform="translate(-1.999999,-8.9958)">
<path
id="path42019"
- d="m 145.99053,204.49753 0.0368,0 c 0.81818,0 1.47687,0.66665 1.47687,1.49473 l 0,1.2e-4 c 0,0.82808 -0.65869,1.49472 -1.47687,1.49472 l -0.0368,0 c -0.81819,0 -1.47687,-0.66664 -1.47687,-1.49472 l 0,-1.2e-4 c 0,-0.82808 0.65868,-1.49473 1.47687,-1.49473 z"
- style="fill:none;stroke:#964e00;stroke-width:1.49505997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 145.99053,204.49753 h 0.0368 c 0.81818,0 1.47687,0.66665 1.47687,1.49473 v 1.2e-4 c 0,0.82808 -0.65869,1.49472 -1.47687,1.49472 h -0.0368 c -0.81819,0 -1.47687,-0.66664 -1.47687,-1.49472 v -1.2e-4 c 0,-0.82808 0.65868,-1.49473 1.47687,-1.49473 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#964e00;stroke-width:1.49505997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
@@ -52880,19 +52565,19 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path42021"
d="m 147.00606,204.9958 c -0.66732,0 -1.33464,1e-5 -2.00196,1e-5 0,0.66707 0,1.33412 0,2.00119 0.66732,0 1.33464,-1e-5 2.00196,-1e-5 0,-0.66706 0,-1.33412 0,-2.00119 z"
- style="fill:#ffd4a5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffd4a5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<g
id="g42023"
transform="translate(0,-1)">
<path
- style="fill:none;stroke:#964e00;stroke-width:1.49505997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 156.00059,196.50173 0.0368,0 c 0.81818,0 1.47687,0.66665 1.47687,1.49473 l 0,1.2e-4 c 0,0.82808 -0.65869,1.49472 -1.47687,1.49472 l -0.0368,0 c -0.81819,0 -1.47687,-0.66664 -1.47687,-1.49472 l 0,-1.2e-4 c 0,-0.82808 0.65868,-1.49473 1.47687,-1.49473 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#964e00;stroke-width:1.49505997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 156.00059,196.50173 h 0.0368 c 0.81818,0 1.47687,0.66665 1.47687,1.49473 v 1.2e-4 c 0,0.82808 -0.65869,1.49472 -1.47687,1.49472 h -0.0368 c -0.81819,0 -1.47687,-0.66664 -1.47687,-1.49472 v -1.2e-4 c 0,-0.82808 0.65868,-1.49473 1.47687,-1.49473 z"
id="path42025"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffd4a5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffd4a5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
d="m 157.01612,197 c -0.66732,0 -1.33464,1e-5 -2.00196,1e-5 0,0.66707 0,1.33412 0,2.00119 0.66732,0 1.33464,-1e-5 2.00196,-1e-5 0,-0.66706 0,-1.33412 0,-2.00119 z"
id="path42027"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -52912,7 +52597,7 @@
height="16"
width="16"
id="rect42073"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="translate(0,-1)"
id="g42075">
@@ -52922,7 +52607,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="ccccccc"
d="m 270.51612,199.5 -0.0161,2 1.75,4 1.25,3 m -3,-7 -1.75,4 -1.25,3"
- style="fill:#162d50;fill-opacity:1;fill-rule:evenodd;stroke:#0b1728;stroke-width:3.0999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#162d50;fill-opacity:1;fill-rule:evenodd;stroke:#0b1728;stroke-width:3.0999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path42077"
inkscape:connector-curvature="0" />
<rect
@@ -52934,11 +52619,11 @@
height="2"
width="2"
id="rect42079"
- style="fill:none;stroke:#0b1728;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+ style="fill:none;stroke:#0b1728;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
id="path42081"
- style="fill:none;stroke:#0b1728;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 270.51612,199.5 3,0 2.75,0 m -11.5,0 2.75,0 3,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0b1728;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 270.51612,199.5 h 3 2.75 m -11.5,0 h 2.75 3"
sodipodi:nodetypes="ccccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -52949,15 +52634,15 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path42083"
- style="fill:none;stroke:url(#linearGradient42093);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 270.51612,199.5 -0.0161,2 1.75,4 1.25,3 m -3,-7 -1.75,4 -1.25,3 m 3.01612,-9 3,0 2.75,0 m -11.5,0 2.75,0 3,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient42093);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 270.51612,199.5 -0.0161,2 1.75,4 1.25,3 m -3,-7 -1.75,4 -1.25,3 m 3.01612,-9 h 3 2.75 m -11.5,0 h 2.75 3"
sodipodi:nodetypes="ccccccccccccc"
inkscape:connector-curvature="0" />
<rect
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- style="opacity:0.5;fill:none;stroke:url(#radialGradient42091);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="opacity:0.5;fill:none;stroke:url(#radialGradient42091);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect42085"
width="2.4999998"
height="2.75"
@@ -52967,7 +52652,7 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- style="fill:#c8d8f0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#c8d8f0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5;marker:none;enable-background:accumulate"
id="rect42087"
width="2"
height="2"
@@ -52985,7 +52670,7 @@
height="16"
width="16"
id="rect42097"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="translate(0,-1)"
id="g42099">
@@ -52995,7 +52680,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="ccccccc"
d="m 270.51612,199.5 -0.0161,2 1.75,4 1.25,3 m -3,-7 -1.75,4 -1.25,3"
- style="fill:none;stroke:#241300;stroke-width:3.0999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#241300;stroke-width:3.0999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path42101"
inkscape:connector-curvature="0" />
<rect
@@ -53007,11 +52692,11 @@
height="2"
width="2"
id="rect42103"
- style="fill:none;stroke:#2b1600;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+ style="fill:none;stroke:#2b1600;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
id="path42105"
- style="fill:none;stroke:#241300;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 270.51612,199.5 3,0 2.75,0 m -11.5,0 2.75,0 3,0"
+ style="fill:none;stroke:#241300;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 270.51612,199.5 h 3 2.75 m -11.5,0 h 2.75 3"
sodipodi:nodetypes="ccccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -53022,15 +52707,15 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path42107"
- style="fill:none;stroke:#ffad55;stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 270.51612,199.5 -0.0161,2 1.75,4 1.25,3 m -3,-7 -1.75,4 -1.25,3 m 3.01612,-9 3,0 2.75,0 m -11.5,0 2.75,0 3,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffad55;stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 270.51612,199.5 -0.0161,2 1.75,4 1.25,3 m -3,-7 -1.75,4 -1.25,3 m 3.01612,-9 h 3 2.75 m -11.5,0 h 2.75 3"
sodipodi:nodetypes="ccccccccccccc"
inkscape:connector-curvature="0" />
<rect
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- style="opacity:0.5;fill:none;stroke:url(#radialGradient42115);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="opacity:0.5;fill:none;stroke:url(#radialGradient42115);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect42109"
width="2.4999998"
height="2.75"
@@ -53040,7 +52725,7 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- style="fill:#ffb769;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffb769;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5;marker:none;enable-background:accumulate"
id="rect42111"
width="2"
height="2"
@@ -53048,8 +52733,8 @@
y="196" />
<path
sodipodi:nodetypes="ccccccccccccc"
- d="m 270.51612,199.5 -0.0161,2 1.75,4 1.25,3 m -3,-7 -1.75,4 -1.25,3 m 3.01612,-9 3,0 2.75,0 m -11.5,0 2.75,0 3,0"
- style="fill:none;stroke:url(#linearGradient42121);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 270.51612,199.5 -0.0161,2 1.75,4 1.25,3 m -3,-7 -1.75,4 -1.25,3 m 3.01612,-9 h 3 2.75 m -11.5,0 h 2.75 3"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient42121);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path42117"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -53062,7 +52747,7 @@
id="ICON_OUTLINER_DATA_POSE"
style="display:inline;enable-background:new">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect42125"
width="16"
height="16"
@@ -53079,8 +52764,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="ccccccccccccc"
- d="m 131.51612,200.41538 0,3.2 3,1.88462 2.75,-1.75 m -5.75,-0.62692 -3,2.37692 0,4 m 3,-9.08462 3,0.0846 2,-3 m -10.75,0.25 2.25,2.66538 3.5,0"
- style="fill:none;stroke:#1a1a1a;stroke-width:3.0999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 131.51612,200.41538 v 3.2 l 3,1.88462 2.75,-1.75 m -5.75,-0.62692 -3,2.37692 v 4 m 3,-9.08462 3,0.0846 2,-3 m -10.75,0.25 2.25,2.66538 h 3.5"
+ style="fill:none;stroke:#1a1a1a;stroke-width:3.0999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path42129"
inkscape:connector-curvature="0" />
<rect
@@ -53092,7 +52777,7 @@
height="1.9692308"
width="2"
id="rect42131"
- style="fill:#acacac;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+ style="fill:#acacac;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<rect
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
@@ -53105,8 +52790,8 @@
y="196.96924" />
<path
sodipodi:nodetypes="ccccccccccccc"
- d="m 125.76612,197.75 2.25,2.75 3.5,0 m 0,0 0,3 3,2 2.75,-1.75 m -5.75,-0.62692 -3,2.37692 0,4 m 3,-9 3,0 2,-3"
- style="fill:none;stroke:url(#linearGradient42155);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 125.76612,197.75 2.25,2.75 h 3.5 m 0,0 v 3 l 3,2 2.75,-1.75 m -5.75,-0.62692 -3,2.37692 v 4 m 3,-9 h 3 l 2,-3"
+ style="fill:none;stroke:url(#linearGradient42155);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path42135"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -53121,12 +52806,12 @@
id="g42163"
transform="translate(-1.999997,-8)">
<path
- style="fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 256,-137.52519 0.0368,0 c 0.81818,0 1.47687,0.66665 1.47687,1.49473 l 0,1.2e-4 c 0,0.82808 -0.65869,1.49472 -1.47687,1.49472 l -0.0368,0 c -0.81819,0 -1.47687,-0.66664 -1.47687,-1.49472 l 0,-1.2e-4 c 0,-0.82808 0.65868,-1.49473 1.47687,-1.49473 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 256,-137.52519 h 0.0368 c 0.81818,0 1.47687,0.66665 1.47687,1.49473 v 1.2e-4 c 0,0.82808 -0.65869,1.49472 -1.47687,1.49472 H 256 c -0.81819,0 -1.47687,-0.66664 -1.47687,-1.49472 v -1.2e-4 c 0,-0.82808 0.65868,-1.49473 1.47687,-1.49473 z"
id="path42165"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
d="m 257.01553,-137.02692 c -0.66732,0 -1.33464,1e-5 -2.00196,1e-5 0,0.66707 0,1.33412 0,2.00119 0.66732,0 1.33464,-1e-5 2.00196,-1e-5 0,-0.66706 0,-1.33412 0,-2.00119 z"
id="path42167"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -53138,8 +52823,8 @@
id="g42169">
<path
id="path42171"
- d="m 265.98447,-145.52519 0.0368,0 c 0.81818,0 1.47687,0.66665 1.47687,1.49473 l 0,1.2e-4 c 0,0.82808 -0.65869,1.49472 -1.47687,1.49472 l -0.0368,0 c -0.81819,0 -1.47687,-0.66664 -1.47687,-1.49472 l 0,-1.2e-4 c 0,-0.82808 0.65868,-1.49473 1.47687,-1.49473 z"
- style="fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 265.98447,-145.52519 h 0.0368 c 0.81818,0 1.47687,0.66665 1.47687,1.49473 v 1.2e-4 c 0,0.82808 -0.65869,1.49472 -1.47687,1.49472 h -0.0368 c -0.81819,0 -1.47687,-0.66664 -1.47687,-1.49472 v -1.2e-4 c 0,-0.82808 0.65868,-1.49473 1.47687,-1.49473 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
@@ -53147,7 +52832,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path42173"
d="m 267,-145.02692 c -0.66732,0 -1.33464,1e-5 -2.00196,1e-5 0,0.66707 0,1.33412 0,2.00119 0.66732,0 1.33464,-1e-5 2.00196,-1e-5 0,-0.66706 0,-1.33412 0,-2.00119 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -53158,14 +52843,14 @@
<g
transform="translate(-111,129)"
id="g42260"
- style="opacity:0.9;display:inline;enable-background:new">
+ style="display:inline;opacity:0.9;enable-background:new">
<rect
y="194"
x="263"
height="16"
width="16"
id="rect42262"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="translate(0,-1)"
id="g42264"
@@ -53176,7 +52861,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="ccccccc"
d="m 270.51612,199.5 -0.0161,2 1.75,4 1.25,3 m -3,-7 -1.75,4 -1.25,3"
- style="fill:none;stroke:#1a1a1a;stroke-width:3.0999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#1a1a1a;stroke-width:3.0999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path42266"
inkscape:connector-curvature="0" />
<rect
@@ -53188,11 +52873,11 @@
height="2"
width="2"
id="rect42268"
- style="fill:none;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+ style="fill:none;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
id="path42270"
- style="fill:none;stroke:#1a1a1a;stroke-width:3.0999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 270.51612,199.5 3,0 2.75,0 m -11.5,0 2.75,0 3,0"
+ style="fill:none;stroke:#1a1a1a;stroke-width:3.0999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 270.51612,199.5 h 3 2.75 m -11.5,0 h 2.75 3"
sodipodi:nodetypes="ccccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -53203,15 +52888,15 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path42272"
- style="fill:none;stroke:url(#linearGradient42290);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 270.51612,199.5 -0.0161,2 1.75,4 1.25,3 m -3,-7 -1.75,4 -1.25,3 m 3.01612,-9 3,0 2.75,0 m -11.5,0 2.75,0 3,0"
+ style="fill:none;stroke:url(#linearGradient42290);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 270.51612,199.5 -0.0161,2 1.75,4 1.25,3 m -3,-7 -1.75,4 -1.25,3 m 3.01612,-9 h 3 2.75 m -11.5,0 h 2.75 3"
sodipodi:nodetypes="ccccccccccccc"
inkscape:connector-curvature="0" />
<rect
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- style="opacity:0.5;fill:none;stroke:url(#radialGradient42292);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="opacity:0.5;fill:none;stroke:url(#radialGradient42292);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect42274"
width="2.4999998"
height="2.75"
@@ -53234,12 +52919,12 @@
id="g42278"
transform="translate(-83.0076,464.0087)">
<path
- style="fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 236.98447,-138.49827 0.0368,0 c 0.81818,0 1.47687,0.66665 1.47687,1.49473 l 0,1.2e-4 c 0,0.82808 -0.65869,1.49472 -1.47687,1.49472 l -0.0368,0 c -0.81819,0 -1.47687,-0.66664 -1.47687,-1.49472 l 0,-1.2e-4 c 0,-0.82808 0.65868,-1.49473 1.47687,-1.49473 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 236.98447,-138.49827 h 0.0368 c 0.81818,0 1.47687,0.66665 1.47687,1.49473 v 1.2e-4 c 0,0.82808 -0.65869,1.49472 -1.47687,1.49472 h -0.0368 c -0.81819,0 -1.47687,-0.66664 -1.47687,-1.49472 v -1.2e-4 c 0,-0.82808 0.65868,-1.49473 1.47687,-1.49473 z"
id="path42280"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
d="m 238,-138 c -0.66732,0 -1.33464,1e-5 -2.00196,1e-5 0,0.66707 0,1.33412 0,2.00119 0.66732,0 1.33464,-1e-5 2.00196,-1e-5 0,-0.66706 0,-1.33412 0,-2.00119 z"
id="path42282"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -53253,8 +52938,8 @@
transform="translate(-81,470)">
<path
id="path42286"
- d="m 246.98447,-144.49827 0.0368,0 c 0.81818,0 1.47687,0.66665 1.47687,1.49473 l 0,1.2e-4 c 0,0.82808 -0.65869,1.49472 -1.47687,1.49472 l -0.0368,0 c -0.81819,0 -1.47687,-0.66664 -1.47687,-1.49472 l 0,-1.2e-4 c 0,-0.82808 0.65868,-1.49473 1.47687,-1.49473 z"
- style="fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 246.98447,-144.49827 h 0.0368 c 0.81818,0 1.47687,0.66665 1.47687,1.49473 v 1.2e-4 c 0,0.82808 -0.65869,1.49472 -1.47687,1.49472 h -0.0368 c -0.81819,0 -1.47687,-0.66664 -1.47687,-1.49472 v -1.2e-4 c 0,-0.82808 0.65868,-1.49473 1.47687,-1.49473 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
@@ -53262,7 +52947,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path42288"
d="m 248,-144 c -0.66732,0 -1.33464,1e-5 -2.00196,1e-5 0,0.66707 0,1.33412 0,2.00119 0.66732,0 1.33464,-1e-5 2.00196,-1e-5 0,-0.66706 0,-1.33412 0,-2.00119 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -53279,7 +52964,7 @@
height="13"
width="13"
id="rect23677"
- style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
rx="1.767767" />
<g
style="display:inline"
@@ -53287,15 +52972,15 @@
transform="translate(45,357.99031)">
<path
sodipodi:nodetypes="ccccccccc"
- style="fill:url(#linearGradient23775);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 25,239.50969 0.5,-0.5 11,0 0.5,0.5 0,11 -0.5,0.5 -11,0 -0.5,-0.5 0,-11 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23775);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate"
+ d="m 25,239.50969 0.5,-0.5 h 11 l 0.5,0.5 v 11 l -0.5,0.5 h -11 l -0.5,-0.5 z"
id="path23673"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect23655"
width="16"
height="16"
@@ -53303,32 +52988,29 @@
y="237.00969" />
<path
style="fill:none;stroke:#ffffff;stroke-width:0.9999997px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 25.499991,250.49338 0,-11.00155 10.999993,0"
+ d="M 25.499991,250.49338 V 239.49183 H 36.499984"
id="path23447"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
</g>
- <path
+ <circle
transform="matrix(0.9,0,0,0.9,7.6,60.3)"
- d="M 80.166667,603 A 4.1666665,4.1666665 0 0 1 76,607.16667 4.1666665,4.1666665 0 0 1 71.833333,603 4.1666665,4.1666665 0 0 1 76,598.83333 4.1666665,4.1666665 0 0 1 80.166667,603 Z"
- sodipodi:ry="4.1666665"
- sodipodi:rx="4.1666665"
- sodipodi:cy="603"
- sodipodi:cx="76"
id="path23605"
- style="fill:#dad9d9;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient23777);stroke-width:0.8888889;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#dad9d9;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient23777);stroke-width:0.8888889;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="76"
+ cy="603"
+ r="4.1666665" />
<rect
y="602"
x="74"
height="2"
width="1"
id="rect23613"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect23615"
width="1"
height="2"
@@ -53344,7 +53026,7 @@
height="16"
width="16"
id="rect51640"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89401144px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89401144px;marker:none;enable-background:accumulate" />
<rect
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
@@ -53354,7 +53036,7 @@
height="16"
width="16"
id="rect18676"
- style="opacity:0;fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89401144px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89401144px;marker:none;enable-background:accumulate" />
<g
id="g23292">
<g
@@ -53365,29 +53047,29 @@
inkscape:transform-center-y="-1.75"
sodipodi:nodetypes="ccccccc"
id="use22458"
- d="m 229.97728,432.50003 0,0 -2.86364,-0.81818 -1.22727,0.20455 0,1.22727 1.22727,0.20455 2.86364,-0.81819 0,0 0,0 0,0 z"
- style="fill:none;stroke:url(#linearGradient23257);stroke-width:2.04545569;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 229.97728,432.50003 v 0 l -2.86364,-0.81818 -1.22727,0.20455 v 1.22727 l 1.22727,0.20455 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23257);stroke-width:2.04545569;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
inkscape:transform-center-y="-1.75"
sodipodi:nodetypes="ccccccc"
id="use22460"
- d="m 226.5,435.97731 0,0 0.81819,-2.86364 -0.20455,-1.22727 -1.22727,0 -0.20455,1.22727 0.81818,2.86364 0,0 0,0 0,0 z"
- style="fill:none;stroke:url(#linearGradient23254);stroke-width:2.04545569;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 226.5,435.97731 v 0 l 0.81819,-2.86364 -0.20455,-1.22727 h -1.22727 l -0.20455,1.22727 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23254);stroke-width:2.04545569;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
inkscape:transform-center-y="-1.75"
sodipodi:nodetypes="ccccccc"
id="use22462"
- d="m 223.02273,432.50003 0,0 2.86364,0.81819 1.22727,-0.20455 0,-1.22727 -1.22727,-0.20455 -2.86364,0.81818 0,0 0,0 0,0 z"
- style="fill:none;stroke:url(#linearGradient23251);stroke-width:2.04545569;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 223.02273,432.50003 v 0 l 2.86364,0.81819 1.22727,-0.20455 v -1.22727 l -1.22727,-0.20455 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23251);stroke-width:2.04545569;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
inkscape:transform-center-y="-1.75"
sodipodi:nodetypes="ccccccc"
id="path22465"
- d="m 226.5,429.02276 0,0 -0.81818,2.86364 0.20455,1.22727 1.22727,0 0.20455,-1.22727 -0.81819,-2.86364 0,0 0,0 0,0 z"
- style="fill:none;stroke:url(#linearGradient23248);stroke-width:2.04545569;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 226.5,429.02276 v 0 l -0.81818,2.86364 0.20455,1.22727 h 1.22727 l 0.20455,-1.22727 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23248);stroke-width:2.04545569;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<g
@@ -53395,29 +53077,29 @@
<path
inkscape:transform-center-y="-1.75"
id="path22585"
- d="m 226.09091,428.00003 -0.4091,3.68182 0.20455,1.43182 1.22727,0 0.20455,-1.43182 -0.40909,-3.68182 -0.81818,0 0,0 0,0 0,0 z"
- style="fill:url(#linearGradient23244);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 226.09091,428.00003 -0.4091,3.68182 0.20455,1.43182 h 1.22727 l 0.20455,-1.43182 -0.40909,-3.68182 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23244);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
inkscape:transform-center-y="-1.75"
id="use22587"
- d="m 231,432.09094 -3.68182,-0.40909 -1.43182,0.20454 0,1.22728 1.43182,0.20454 3.68182,-0.40909 0,-0.81818 0,0 0,0 0,0 z"
- style="fill:url(#linearGradient23239);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 231,432.09094 -3.68182,-0.40909 -1.43182,0.20454 v 1.22728 l 1.43182,0.20454 L 231,432.90912 Z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23239);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
inkscape:transform-center-y="-1.75"
id="use22589"
- d="m 226.09091,437.00003 -0.4091,-3.68182 0.20455,-1.43182 1.22727,0 0.20455,1.43182 -0.40909,3.68182 -0.81818,0 0,0 0,0 0,0 z"
- style="fill:url(#linearGradient23235);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 226.09091,437.00003 -0.4091,-3.68182 0.20455,-1.43182 h 1.22727 l 0.20455,1.43182 -0.40909,3.68182 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23235);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
inkscape:transform-center-y="-1.75"
id="use22591"
- d="m 221.99999,432.90912 3.68182,0.40909 1.43182,-0.20454 0,-1.22728 -1.43182,-0.20454 -3.68182,0.40909 0,0.81818 0,0 0,0 0,0 z"
- style="fill:url(#linearGradient23231);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 221.99999,432.90912 3.68182,0.40909 1.43182,-0.20454 v -1.22728 l -1.43182,-0.20454 -3.68182,0.40909 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23231);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
</g>
@@ -53430,10 +53112,10 @@
height="2.5"
width="1"
id="rect19148"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;enable-background:accumulate" />
<rect
- transform="matrix(0,1,-1,0,0,0)"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ transform="rotate(90)"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;enable-background:accumulate"
id="rect19150"
width="1"
height="2.5"
@@ -53450,29 +53132,29 @@
inkscape:transform-center-y="-1.75"
sodipodi:nodetypes="ccccccc"
id="use24185"
- d="m 224.75,442.5 0,0 -3.5,-0.75 -1.5,0 0,1.5 1.5,0 3.5,-0.75 z"
- style="fill:none;stroke:url(#linearGradient23177);stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 224.75,442.5 v 0 l -3.5,-0.75 h -1.5 v 1.5 h 1.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23177);stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
inkscape:transform-center-y="-1.75"
sodipodi:nodetypes="ccccccc"
id="use24187"
- d="m 220.5,446.75 0,0 0.75,-3.5 0,-1.5 -1.5,0 0.25,1.5 0.5,3.5 z"
- style="fill:none;stroke:url(#linearGradient23179);stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 220.5,446.75 v 0 l 0.75,-3.5 v -1.5 h -1.5 l 0.25,1.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23179);stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
inkscape:transform-center-y="-1.75"
sodipodi:nodetypes="ccccccc"
id="use24189"
- d="m 216.25,442.5 0,0 3.5,0.75 1.5,0 0,-1.5 -1.5,0 -3.5,0.75 z"
- style="fill:none;stroke:url(#linearGradient23181);stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 216.25,442.5 v 0 l 3.5,0.75 h 1.5 v -1.5 h -1.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23181);stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
inkscape:transform-center-y="-1.75"
sodipodi:nodetypes="ccccccc"
id="path24197"
- d="m 220.5,438 0,-0.15625 -0.75,3.90625 0,1.5 1.5,0 0,-1.5 -0.75,-3.75 z"
- style="fill:none;stroke:url(#linearGradient23183);stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 220.5,438 v -0.15625 l -0.75,3.90625 v 1.5 h 1.5 v -1.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23183);stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<g
@@ -53480,29 +53162,29 @@
<path
inkscape:transform-center-y="-1.75"
id="path24201"
- d="m 220,437 -0.5,4.5 0.25,1.75 1.5,0 0.25,-1.75 -0.5,-4.5 -1,0 z"
- style="fill:url(#linearGradient23185);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 220,437 -0.5,4.5 0.25,1.75 h 1.5 L 221.5,441.5 221,437 Z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23185);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
inkscape:transform-center-y="-1.75"
id="use24203"
- d="m 226,442 -4.5,-0.5 -1.75,0.25 0,1.5 1.75,0.25 4.5,-0.5 0,-1 z"
- style="fill:url(#linearGradient23187);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 226,442 -4.5,-0.5 -1.75,0.25 v 1.5 l 1.75,0.25 4.5,-0.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23187);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
inkscape:transform-center-y="-1.75"
id="use24205"
- d="m 220,448 -0.5,-4.5 0.25,-1.75 1.5,0 0.25,1.75 -0.5,4.5 -1,0 z"
- style="fill:url(#linearGradient23189);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 220,448 -0.5,-4.5 0.25,-1.75 h 1.5 l 0.25,1.75 -0.5,4.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23189);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
inkscape:transform-center-y="-1.75"
id="use24207"
- d="m 215,443 4.5,0.5 1.75,-0.25 0,-1.5 -1.75,-0.25 -4.5,0.5 0,1 z"
- style="fill:url(#linearGradient23191);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 215,443 4.5,0.5 1.75,-0.25 v -1.5 L 219.5,441.5 215,442 Z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23191);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
</g>
@@ -53515,10 +53197,10 @@
height="2.9999599"
width="1"
id="rect24211"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;enable-background:accumulate" />
<rect
- transform="matrix(0,1,-1,0,0,0)"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ transform="rotate(90)"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;enable-background:accumulate"
id="rect24213"
width="1"
height="3"
@@ -53533,26 +53215,26 @@
inkscape:transform-center-y="-1.25"
sodipodi:nodetypes="ccccccc"
id="path24226"
- d="m 218.75004,424.50004 -0.5,0 -0.50004,1.74996 0.25004,1.75004 1,0 0.24996,-1.75004 -0.49996,-1.74996 z"
- style="fill:none;stroke:url(#linearGradient22715);stroke-width:1.58491683;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 218.75004,424.50004 h -0.5 L 217.75,426.25 l 0.25004,1.75004 h 1 L 219.25,426.25 Z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient22715);stroke-width:1.58491683;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient22711);stroke-width:1.58491683;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 221.50004,427.75004 0,-0.5 -1.74996,-0.50004 -1.75004,0.25004 0,1 1.75004,0.24996 1.74996,-0.49996 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient22711);stroke-width:1.58491683;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 221.50004,427.75004 v -0.5 l -1.74996,-0.50004 -1.75004,0.25004 v 1 l 1.75004,0.24996 z"
id="use24228"
sodipodi:nodetypes="ccccccc"
inkscape:transform-center-y="-1.25"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient22707);stroke-width:1.58491683;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 215.50004,427.25004 0,0.5 1.74996,0.50004 1.75004,-0.25004 0,-1 -1.75004,-0.24996 -1.74996,0.49996 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient22707);stroke-width:1.58491683;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 215.50004,427.25004 v 0.5 l 1.74996,0.50004 1.75004,-0.25004 v -1 L 217.25,426.75008 Z"
id="use24230"
sodipodi:nodetypes="ccccccc"
inkscape:transform-center-y="-1.25"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient22704);stroke-width:1.58491683;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 218.25004,430.50004 0.5,0 0.50004,-1.74996 -0.25004,-1.75004 -1,0 -0.24996,1.75004 0.49996,1.74996 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient22704);stroke-width:1.58491683;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 218.25004,430.50004 h 0.5 l 0.50004,-1.74996 -0.25004,-1.75004 h -1 l -0.24996,1.75004 z"
id="use24232"
sodipodi:nodetypes="ccccccc"
inkscape:transform-center-y="-1.25"
@@ -53560,28 +53242,28 @@
<path
inkscape:transform-center-y="-1.49998"
id="path24236"
- d="m 218.00004,424.00004 -0.12109,2.86328 0.1211,1.13676 0.99999,-4e-5 0.125,-1.125 -0.125,-2.875 -1,0 0,0 0,0 0,0 z"
- style="fill:url(#linearGradient22701);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 218.00004,424.00004 -0.12109,2.86328 0.1211,1.13676 0.99999,-4e-5 0.125,-1.125 -0.125,-2.875 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient22701);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccc"
- style="fill:url(#linearGradient22698);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 222.00004,427.00004 -2.86328,-0.12109 -1.13676,0.12109 4e-5,1 1.125,0.125 2.875,-0.125 0,-1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient22698);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 222.00004,427.00004 -2.86328,-0.12109 -1.13676,0.12109 4e-5,1 1.125,0.125 2.875,-0.125 z"
id="use24238"
inkscape:transform-center-y="-1.49998"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccc"
- style="fill:url(#linearGradient22695);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 219.00004,431.00004 0.12109,-2.86328 -0.1211,-1.13676 -0.99999,4e-5 -0.125,1.125 0.125,2.875 1,0 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient22695);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 219.00004,431.00004 0.12109,-2.86328 -0.1211,-1.13676 -0.99999,4e-5 -0.125,1.125 0.125,2.875 z"
id="use24240"
inkscape:transform-center-y="-1.49998"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccc"
- style="fill:url(#linearGradient22692);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 215.00004,428.00004 2.86328,0.12109 1.13676,-0.12109 -4e-5,-1 -1.125,-0.125 -2.875,0.125 0,1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient22692);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 215.00004,428.00004 2.86328,0.12109 1.13676,-0.12109 -4e-5,-1 -1.125,-0.125 -2.875,0.125 z"
id="use24242"
inkscape:transform-center-y="-1.49998"
inkscape:connector-curvature="0" />
@@ -53594,10 +53276,10 @@
height="2"
width="1"
id="rect24249"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;enable-background:accumulate" />
<rect
- transform="matrix(0,1,-1,0,0,0)"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ transform="rotate(90)"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;enable-background:accumulate"
id="rect24251"
width="1"
height="2"
@@ -53615,26 +53297,26 @@
inkscape:transform-center-y="-1.75"
sodipodi:nodetypes="ccccccc"
id="use24445"
- d="m 230.20453,450.95187 0,0 -2.22727,-0.63574 -0.95454,0.15894 0,0.9536 0.95454,0.15893 2.22727,-0.63573 0,0 0,0 0,0 z"
- style="fill:none;stroke:url(#linearGradient23132);stroke-width:1.59012127;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 230.20453,450.95187 v 0 l -2.22727,-0.63574 -0.95454,0.15894 v 0.9536 l 0.95454,0.15893 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23132);stroke-width:1.59012127;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
inkscape:transform-center-y="-1.75"
sodipodi:nodetypes="ccccccc"
id="use24447"
- d="m 227.49999,453.65374 0,0 0.63637,-2.22507 -0.15909,-0.9536 -0.95455,0 -0.15909,0.9536 0.63636,2.22507 z"
- style="fill:none;stroke:url(#linearGradient23134);stroke-width:1.59012127;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 227.49999,453.65374 v 0 l 0.63637,-2.22507 -0.15909,-0.9536 h -0.95455 l -0.15909,0.9536 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23134);stroke-width:1.59012127;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
inkscape:transform-center-y="-1.75"
sodipodi:nodetypes="ccccccc"
id="use24449"
- d="m 224.79546,450.95187 0,0 2.22727,0.63574 0.95454,-0.15894 0,-0.9536 -0.95454,-0.15893 -2.22727,0.63573 0,0 0,0 0,0 z"
- style="fill:none;stroke:url(#linearGradient23136);stroke-width:1.59012127;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 224.79546,450.95187 v 0 l 2.22727,0.63574 0.95454,-0.15894 v -0.9536 l -0.95454,-0.15893 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23136);stroke-width:1.59012127;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient23138);stroke-width:1.59012127;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 227.5,448.25 0,0 -0.63637,2.22507 0.15909,0.9536 0.95455,0 0.15909,-0.9536 L 227.5,448.25 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23138);stroke-width:1.59012127;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 227.5,448.25 v 0 l -0.63637,2.22507 0.15909,0.9536 h 0.95455 l 0.15909,-0.9536 z"
id="path24452"
sodipodi:nodetypes="ccccccc"
inkscape:transform-center-y="-1.75"
@@ -53645,29 +53327,29 @@
<path
inkscape:transform-center-y="-1.75"
id="path22819"
- d="m 227.18182,441.00653 -0.31818,2.86081 0.15909,1.11253 0.95454,0 0.15909,-1.11253 -0.31818,-2.86081 -0.63636,0 0,0 0,0 0,0 z"
- style="fill:url(#linearGradient23140);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 227.18182,441.00653 -0.31818,2.86081 0.15909,1.11253 h 0.95454 l 0.15909,-1.11253 -0.31818,-2.86081 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23140);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
inkscape:transform-center-y="-1.75"
id="path22821"
- d="m 231,444.1852 -2.86364,-0.31786 -1.11363,0.15893 0,0.9536 1.11363,0.15894 2.86364,-0.31787 0,-0.63574 0,0 0,0 0,0 z"
- style="fill:url(#linearGradient23142);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 231,444.1852 -2.86364,-0.31786 -1.11363,0.15893 v 0.9536 l 1.11363,0.15894 L 231,444.82094 Z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23142);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
inkscape:transform-center-y="-1.75"
id="path22823"
- d="m 227.18182,447.99961 -0.31818,-2.8608 0.15909,-1.11254 0.95454,0 0.15909,1.11254 -0.31818,2.8608 -0.63636,0 0,0 0,0 0,0 z"
- style="fill:url(#linearGradient23144);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 227.18182,447.99961 -0.31818,-2.8608 0.15909,-1.11254 h 0.95454 l 0.15909,1.11254 -0.31818,2.8608 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23144);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
inkscape:transform-center-y="-1.75"
id="path22825"
- d="m 224.00001,444.82094 2.86363,0.31787 1.11363,-0.15894 0,-0.9536 -1.11363,-0.15893 -2.86363,0.31786 0,0.63574 0,0 0,0 0,0 z"
- style="fill:url(#linearGradient23147);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 224.00001,444.82094 2.86363,0.31787 1.11363,-0.15894 v -0.9536 l -1.11363,-0.15893 -2.86363,0.31786 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23147);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
</g>
@@ -53682,10 +53364,10 @@
height="2"
width="1"
id="rect24266"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;enable-background:accumulate" />
<rect
- transform="matrix(0,1,-1,0,0,0)"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ transform="rotate(90)"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;enable-background:accumulate"
id="rect24268"
width="1"
height="2"
@@ -53700,14 +53382,14 @@
id="ICON_PARTICLE_DATA"
transform="translate(62.999992,65.000007)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89401144px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89401144px;marker:none;enable-background:accumulate"
id="rect23417"
width="16"
height="16"
x="215"
y="427.99997" />
<rect
- style="opacity:0;fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89401144px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89401144px;marker:none;enable-background:accumulate"
id="rect23419"
width="16"
height="16"
@@ -53723,29 +53405,29 @@
<g
id="g23426">
<path
- style="fill:none;stroke:url(#linearGradient23563);stroke-width:2.04545569;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 229.97728,432.50003 0,0 -2.86364,-0.81818 -1.22727,0.20455 0,1.22727 1.22727,0.20455 2.86364,-0.81819 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23563);stroke-width:2.04545569;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 229.97728,432.50003 v 0 l -2.86364,-0.81818 -1.22727,0.20455 v 1.22727 l 1.22727,0.20455 z"
id="path23430"
sodipodi:nodetypes="ccccccc"
inkscape:transform-center-y="-1.75"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient23566);stroke-width:2.04545569;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 226.5,435.97731 0,0 0.81819,-2.86364 -0.20455,-1.22727 -1.22727,0 -0.20455,1.22727 0.81818,2.86364 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23566);stroke-width:2.04545569;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 226.5,435.97731 v 0 l 0.81819,-2.86364 -0.20455,-1.22727 h -1.22727 l -0.20455,1.22727 z"
id="path23432"
sodipodi:nodetypes="ccccccc"
inkscape:transform-center-y="-1.75"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient23568);stroke-width:2.04545569;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 223.02273,432.50003 0,0 2.86364,0.81819 1.22727,-0.20455 0,-1.22727 -1.22727,-0.20455 -2.86364,0.81818 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23568);stroke-width:2.04545569;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 223.02273,432.50003 v 0 l 2.86364,0.81819 1.22727,-0.20455 v -1.22727 l -1.22727,-0.20455 z"
id="path23434"
sodipodi:nodetypes="ccccccc"
inkscape:transform-center-y="-1.75"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient23570);stroke-width:2.04545569;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 226.5,429.02276 0,0 -0.81818,2.86364 0.20455,1.22727 1.22727,0 0.20455,-1.22727 -0.81819,-2.86364 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23570);stroke-width:2.04545569;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 226.5,429.02276 v 0 l -0.81818,2.86364 0.20455,1.22727 h 1.22727 l 0.20455,-1.22727 z"
id="path23437"
sodipodi:nodetypes="ccccccc"
inkscape:transform-center-y="-1.75"
@@ -53755,29 +53437,29 @@
id="g23439">
<path
sodipodi:nodetypes="ccccccc"
- style="fill:url(#linearGradient23572);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 226.09091,428.00003 -0.4091,3.68182 0.20455,1.43182 1.22727,0 0.20455,-1.43182 -0.40909,-3.68182 -0.81818,0 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23572);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 226.09091,428.00003 -0.4091,3.68182 0.20455,1.43182 h 1.22727 l 0.20455,-1.43182 -0.40909,-3.68182 z"
id="path23441"
inkscape:transform-center-y="-1.75"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccc"
- style="fill:url(#linearGradient23574);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 231,432.09094 -3.68182,-0.40909 -1.43182,0.20454 0,1.22728 1.43182,0.20454 3.68182,-0.40909 0,-0.81818 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23574);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 231,432.09094 -3.68182,-0.40909 -1.43182,0.20454 v 1.22728 l 1.43182,0.20454 L 231,432.90912 Z"
id="path23443"
inkscape:transform-center-y="-1.75"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccc"
- style="fill:url(#linearGradient23576);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 226.09091,437.00003 -0.4091,-3.68182 0.20455,-1.43182 1.22727,0 0.20455,1.43182 -0.40909,3.68182 -0.81818,0 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23576);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 226.09091,437.00003 -0.4091,-3.68182 0.20455,-1.43182 h 1.22727 l 0.20455,1.43182 -0.40909,3.68182 z"
id="path23449"
inkscape:transform-center-y="-1.75"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccc"
- style="fill:url(#linearGradient23578);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 221.99999,432.90912 3.68182,0.40909 1.43182,-0.20454 0,-1.22728 -1.43182,-0.20454 -3.68182,0.40909 0,0.81818 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23578);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 221.99999,432.90912 3.68182,0.40909 1.43182,-0.20454 v -1.22728 l -1.43182,-0.20454 -3.68182,0.40909 z"
id="path23453"
inkscape:transform-center-y="-1.75"
inkscape:connector-curvature="0" />
@@ -53786,7 +53468,7 @@
id="g23455"
transform="translate(141,-197.00002)">
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;enable-background:accumulate"
id="rect23457"
width="1"
height="2.5"
@@ -53798,8 +53480,8 @@
height="2.5"
width="1"
id="rect23463"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- transform="matrix(0,1,-1,0,0,0)" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;enable-background:accumulate"
+ transform="rotate(90)" />
</g>
</g>
<g
@@ -53808,29 +53490,29 @@
<g
id="g23467">
<path
- style="fill:none;stroke:url(#linearGradient23580);stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 224.75,442.5 0,0 -3.49999,-0.75 -1.50001,0 0,1.5 1.50001,0 3.49999,-0.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23580);stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 224.75,442.5 v 0 l -3.49999,-0.75 H 219.75 v 1.5 h 1.50001 z"
id="path23469"
sodipodi:nodetypes="ccccccc"
inkscape:transform-center-y="-1.75"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient23582);stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 220.5,446.75 0,0 0.75001,-3.5 -1e-5,-1.5 -1.5,0 1e-5,1.5 0.74999,3.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23582);stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 220.5,446.75 v 0 l 0.75001,-3.5 -1e-5,-1.5 h -1.5 l 1e-5,1.5 z"
id="path23472"
sodipodi:nodetypes="ccccccc"
inkscape:transform-center-y="-1.75"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient23587);stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 216.25,442.5 0,0 3.50001,0.75 1.49999,0 0,-1.5 -1.49999,0 -3.50001,0.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23587);stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 216.25,442.5 v 0 l 3.50001,0.75 H 221.25 v -1.5 h -1.49999 z"
id="path23474"
sodipodi:nodetypes="ccccccc"
inkscape:transform-center-y="-1.75"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient23589);stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 220.5,438.25 0,0 -0.74999,3.5 -1e-5,1.5 1.5,0 1e-5,-1.5 -0.75001,-3.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23589);stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 220.5,438.25 v 0 l -0.74999,3.5 -1e-5,1.5 h 1.5 l 1e-5,-1.5 z"
id="path23476"
sodipodi:nodetypes="ccccccc"
inkscape:transform-center-y="-1.75"
@@ -53840,29 +53522,29 @@
id="g23479">
<path
sodipodi:nodetypes="ccccccc"
- style="fill:url(#linearGradient23591);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 220,437 -0.5,4.5 0.25,1.75 1.5,0 0.25,-1.75 -0.5,-4.5 -1,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23591);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 220,437 -0.5,4.5 0.25,1.75 h 1.5 L 221.5,441.5 221,437 Z"
id="path23481"
inkscape:transform-center-y="-1.75"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccc"
- style="fill:url(#linearGradient23593);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 226,442 -4.5,-0.5 -1.75,0.25 0,1.5 1.75,0.25 4.5,-0.5 0,-1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23593);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 226,442 -4.5,-0.5 -1.75,0.25 v 1.5 l 1.75,0.25 4.5,-0.5 z"
id="path23484"
inkscape:transform-center-y="-1.75"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccc"
- style="fill:url(#linearGradient23597);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 220,448 -0.5,-4.5 0.25,-1.75 1.5,0 0.25,1.75 -0.5,4.5 -1,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23597);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 220,448 -0.5,-4.5 0.25,-1.75 h 1.5 l 0.25,1.75 -0.5,4.5 z"
id="path23486"
inkscape:transform-center-y="-1.75"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccc"
- style="fill:url(#linearGradient23600);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 215,443 4.5,0.5 1.75,-0.25 0,-1.5 -1.75,-0.25 -4.5,0.5 0,1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23600);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 215,443 4.5,0.5 1.75,-0.25 v -1.5 L 219.5,441.5 215,442 Z"
id="path23488"
inkscape:transform-center-y="-1.75"
inkscape:connector-curvature="0" />
@@ -53871,7 +53553,7 @@
id="g23491"
transform="translate(135,-187.00002)">
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;enable-background:accumulate"
id="rect23493"
width="1"
height="2.9999599"
@@ -53883,16 +53565,16 @@
height="3"
width="1"
id="rect23496"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- transform="matrix(0,1,-1,0,0,0)" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;enable-background:accumulate"
+ transform="rotate(90)" />
</g>
</g>
<g
transform="translate(0,4)"
id="g23498">
<path
- style="fill:none;stroke:url(#linearGradient23602);stroke-width:1.58491683;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 218.75004,424.50004 -0.5,0 -0.50004,1.74996 0.25004,1.75004 1,0 0.24996,-1.75004 -0.49996,-1.74996 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23602);stroke-width:1.58491683;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 218.75004,424.50004 h -0.5 L 217.75,426.25 l 0.25004,1.75004 h 1 L 219.25,426.25 Z"
id="path23500"
sodipodi:nodetypes="ccccccc"
inkscape:transform-center-y="-1.25"
@@ -53901,56 +53583,56 @@
inkscape:transform-center-y="-1.25"
sodipodi:nodetypes="ccccccc"
id="path23502"
- d="m 221.50004,427.75004 0,-0.5 -1.74996,-0.50004 -1.75004,0.25004 0,1 1.75004,0.24996 1.74996,-0.49996 z"
- style="fill:none;stroke:url(#linearGradient23606);stroke-width:1.58491683;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 221.50004,427.75004 v -0.5 l -1.74996,-0.50004 -1.75004,0.25004 v 1 l 1.75004,0.24996 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23606);stroke-width:1.58491683;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
inkscape:transform-center-y="-1.25"
sodipodi:nodetypes="ccccccc"
id="path23504"
- d="m 215.50004,427.25004 0,0.5 1.74996,0.50004 1.75004,-0.25004 0,-1 -1.75004,-0.24996 -1.74996,0.49996 z"
- style="fill:none;stroke:url(#linearGradient23608);stroke-width:1.58491683;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 215.50004,427.25004 v 0.5 l 1.74996,0.50004 1.75004,-0.25004 v -1 L 217.25,426.75008 Z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23608);stroke-width:1.58491683;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
inkscape:transform-center-y="-1.25"
sodipodi:nodetypes="ccccccc"
id="path23506"
- d="m 218.25004,430.50004 0.5,0 0.50004,-1.74996 -0.25004,-1.75004 -1,0 -0.24996,1.75004 0.49996,1.74996 z"
- style="fill:none;stroke:url(#linearGradient23610);stroke-width:1.58491683;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 218.25004,430.50004 h 0.5 l 0.50004,-1.74996 -0.25004,-1.75004 h -1 l -0.24996,1.75004 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23610);stroke-width:1.58491683;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccc"
- style="fill:url(#linearGradient23612);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 218.00004,424.00004 -0.12109,2.86328 0.1211,1.13676 0.99999,-4e-5 0.125,-1.125 -0.125,-2.875 -1,0 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23612);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 218.00004,424.00004 -0.12109,2.86328 0.1211,1.13676 0.99999,-4e-5 0.125,-1.125 -0.125,-2.875 z"
id="path23508"
inkscape:transform-center-y="-1.49998"
inkscape:connector-curvature="0" />
<path
inkscape:transform-center-y="-1.49998"
id="path23510"
- d="m 222.00004,427.00004 -2.86328,-0.12109 -1.13676,0.12109 4e-5,1 1.125,0.125 2.875,-0.125 0,-1 z"
- style="fill:url(#linearGradient23616);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 222.00004,427.00004 -2.86328,-0.12109 -1.13676,0.12109 4e-5,1 1.125,0.125 2.875,-0.125 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23616);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
inkscape:transform-center-y="-1.49998"
id="path23512"
- d="m 219.00004,431.00004 0.12109,-2.86328 -0.1211,-1.13676 -0.99999,4e-5 -0.125,1.125 0.125,2.875 1,0 0,0 0,0 0,0 z"
- style="fill:url(#linearGradient23618);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 219.00004,431.00004 0.12109,-2.86328 -0.1211,-1.13676 -0.99999,4e-5 -0.125,1.125 0.125,2.875 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23618);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
inkscape:transform-center-y="-1.49998"
id="path23514"
- d="m 215.00004,428.00004 2.86328,0.12109 1.13676,-0.12109 -4e-5,-1 -1.125,-0.125 -2.875,0.125 0,1 z"
- style="fill:url(#linearGradient23620);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 215.00004,428.00004 2.86328,0.12109 1.13676,-0.12109 -4e-5,-1 -1.125,-0.125 -2.875,0.125 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23620);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<g
id="g23517"
transform="translate(133.00004,-201.99996)">
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;enable-background:accumulate"
id="rect23520"
width="1"
height="2"
@@ -53962,8 +53644,8 @@
height="2"
width="1"
id="rect23522"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- transform="matrix(0,1,-1,0,0,0)" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;enable-background:accumulate"
+ transform="rotate(90)" />
</g>
</g>
<g
@@ -53973,22 +53655,22 @@
id="g23526"
transform="translate(0,-6.4549394)">
<path
- style="fill:none;stroke:url(#linearGradient23622);stroke-width:1.59012127;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 230.20453,450.95187 0,0 -2.22727,-0.63574 -0.95454,0.15894 0,0.9536 0.95454,0.15893 2.22727,-0.63573 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23622);stroke-width:1.59012127;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 230.20453,450.95187 v 0 l -2.22727,-0.63574 -0.95454,0.15894 v 0.9536 l 0.95454,0.15893 z"
id="path23529"
sodipodi:nodetypes="ccccccc"
inkscape:transform-center-y="-1.75"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient23624);stroke-width:1.59012127;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 227.49999,453.65374 0,0 0.63637,-2.22507 -0.15909,-0.9536 -0.95455,0 -0.15909,0.9536 0.63636,2.22507 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23624);stroke-width:1.59012127;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 227.49999,453.65374 v 0 l 0.63637,-2.22507 -0.15909,-0.9536 h -0.95455 l -0.15909,0.9536 z"
id="path23531"
sodipodi:nodetypes="ccccccc"
inkscape:transform-center-y="-1.75"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient23626);stroke-width:1.59012127;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 224.79546,450.95187 0,0 2.22727,0.63574 0.95454,-0.15894 0,-0.9536 -0.95454,-0.15893 -2.22727,0.63573 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23626);stroke-width:1.59012127;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 224.79546,450.95187 v 0 l 2.22727,0.63574 0.95454,-0.15894 v -0.9536 l -0.95454,-0.15893 z"
id="path23533"
sodipodi:nodetypes="ccccccc"
inkscape:transform-center-y="-1.75"
@@ -53997,37 +53679,37 @@
inkscape:transform-center-y="-1.75"
sodipodi:nodetypes="ccccccc"
id="path23535"
- d="m 227.5,448.25 0,0 -0.63637,2.22507 0.15909,0.9536 0.95455,0 0.15909,-0.9536 L 227.5,448.25 z"
- style="fill:none;stroke:url(#linearGradient23628);stroke-width:1.59012127;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 227.5,448.25 v 0 l -0.63637,2.22507 0.15909,0.9536 h 0.95455 l 0.15909,-0.9536 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23628);stroke-width:1.59012127;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<g
id="g23538">
<path
sodipodi:nodetypes="ccccccc"
- style="fill:url(#linearGradient23630);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 227.18182,441.00653 -0.31818,2.86081 0.15909,1.11253 0.95454,0 0.15909,-1.11253 -0.31818,-2.86081 -0.63636,0 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23630);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 227.18182,441.00653 -0.31818,2.86081 0.15909,1.11253 h 0.95454 l 0.15909,-1.11253 -0.31818,-2.86081 z"
id="path23541"
inkscape:transform-center-y="-1.75"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccc"
- style="fill:url(#linearGradient23632);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 231,444.1852 -2.86364,-0.31786 -1.11363,0.15893 0,0.9536 1.11363,0.15894 2.86364,-0.31787 0,-0.63574 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23632);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 231,444.1852 -2.86364,-0.31786 -1.11363,0.15893 v 0.9536 l 1.11363,0.15894 L 231,444.82094 Z"
id="path23544"
inkscape:transform-center-y="-1.75"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccc"
- style="fill:url(#linearGradient23635);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 227.18182,447.99961 -0.31818,-2.8608 0.15909,-1.11254 0.95454,0 0.15909,1.11254 -0.31818,2.8608 -0.63636,0 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23635);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 227.18182,447.99961 -0.31818,-2.8608 0.15909,-1.11254 h 0.95454 l 0.15909,1.11254 -0.31818,2.8608 z"
id="path23549"
inkscape:transform-center-y="-1.75"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccc"
- style="fill:url(#linearGradient23637);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 224.00001,444.82094 2.86363,0.31787 1.11363,-0.15894 0,-0.9536 -1.11363,-0.15893 -2.86363,0.31786 0,0.63574 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23637);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 224.00001,444.82094 2.86363,0.31787 1.11363,-0.15894 v -0.9536 l -1.11363,-0.15893 -2.86363,0.31786 z"
id="path23551"
inkscape:transform-center-y="-1.75"
inkscape:connector-curvature="0" />
@@ -54038,7 +53720,7 @@
id="g23557"
transform="translate(141.99999,-184.99353)">
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;enable-background:accumulate"
id="rect23559"
width="1"
height="2"
@@ -54050,8 +53732,8 @@
height="2"
width="1"
id="rect23561"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- transform="matrix(0,1,-1,0,0,0)" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;enable-background:accumulate"
+ transform="rotate(90)" />
</g>
</g>
</g>
@@ -54060,7 +53742,7 @@
<g
id="ICON_MOD_PARTICLES">
<rect
- style="opacity:0;fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89401144px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89401144px;marker:none;enable-background:accumulate"
id="rect23619"
width="16"
height="16"
@@ -54073,14 +53755,14 @@
id="g23639"
transform="translate(-21.000008,-166)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89401144px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89401144px;marker:none;enable-background:accumulate"
id="rect23641"
width="16"
height="16"
x="215"
y="427.99997" />
<rect
- style="opacity:0;fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89401144px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89401144px;marker:none;enable-background:accumulate"
id="rect23643"
width="16"
height="16"
@@ -54097,29 +53779,29 @@
id="g23649">
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:url(#linearGradient23797);stroke-width:2.04545569;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 229.97728,432.50003 0,0 -2.86364,-0.81818 -1.22727,0.20455 0,1.22727 1.22727,0.20455 2.86364,-0.81819 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23797);stroke-width:2.04545569;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 229.97728,432.50003 v 0 l -2.86364,-0.81818 -1.22727,0.20455 v 1.22727 l 1.22727,0.20455 z"
id="path23651"
sodipodi:nodetypes="ccccccc"
inkscape:transform-center-y="-1.75" />
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:url(#linearGradient23799);stroke-width:2.04545569;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 226.5,435.97731 0,0 0.81819,-2.86364 -0.20455,-1.22727 -1.22727,0 -0.20455,1.22727 0.81818,2.86364 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23799);stroke-width:2.04545569;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 226.5,435.97731 v 0 l 0.81819,-2.86364 -0.20455,-1.22727 h -1.22727 l -0.20455,1.22727 z"
id="path23653"
sodipodi:nodetypes="ccccccc"
inkscape:transform-center-y="-1.75" />
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:url(#linearGradient23801);stroke-width:2.04545569;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 223.02273,432.50003 0,0 2.86364,0.81819 1.22727,-0.20455 0,-1.22727 -1.22727,-0.20455 -2.86364,0.81818 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23801);stroke-width:2.04545569;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 223.02273,432.50003 v 0 l 2.86364,0.81819 1.22727,-0.20455 v -1.22727 l -1.22727,-0.20455 z"
id="path23655"
sodipodi:nodetypes="ccccccc"
inkscape:transform-center-y="-1.75" />
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:url(#linearGradient23803);stroke-width:2.04500008;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 226.5,429.02276 0,0 -0.81818,2.86364 0.20455,1.22727 1.22727,0 0.20455,-1.22727 -0.81819,-2.86364 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23803);stroke-width:2.04500008;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 226.5,429.02276 v 0 l -0.81818,2.86364 0.20455,1.22727 h 1.22727 l 0.20455,-1.22727 z"
id="path23668"
sodipodi:nodetypes="ccccccc"
inkscape:transform-center-y="-1.75" />
@@ -54129,29 +53811,29 @@
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
- style="fill:url(#linearGradient23805);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 226.09091,428.00003 -0.4091,3.68182 0.20455,1.43182 1.22727,0 0.20455,-1.43182 -0.40909,-3.68182 -0.81818,0 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23805);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 226.09091,428.00003 -0.4091,3.68182 0.20455,1.43182 h 1.22727 l 0.20455,-1.43182 -0.40909,-3.68182 z"
id="path23672"
inkscape:transform-center-y="-1.75" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
- style="fill:url(#linearGradient23807);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 231,432.09094 -3.68182,-0.40909 -1.43182,0.20454 0,1.22728 1.43182,0.20454 3.68182,-0.40909 0,-0.81818 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23807);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 231,432.09094 -3.68182,-0.40909 -1.43182,0.20454 v 1.22728 l 1.43182,0.20454 L 231,432.90912 Z"
id="path23674"
inkscape:transform-center-y="-1.75" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
- style="fill:url(#linearGradient23809);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 226.09091,437.00003 -0.4091,-3.68182 0.20455,-1.43182 1.22727,0 0.20455,1.43182 -0.40909,3.68182 -0.81818,0 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23809);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 226.09091,437.00003 -0.4091,-3.68182 0.20455,-1.43182 h 1.22727 l 0.20455,1.43182 -0.40909,3.68182 z"
id="path23676"
inkscape:transform-center-y="-1.75" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
- style="fill:url(#linearGradient23811);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 221.99999,432.90912 3.68182,0.40909 1.43182,-0.20454 0,-1.22728 -1.43182,-0.20454 -3.68182,0.40909 0,0.81818 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23811);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 221.99999,432.90912 3.68182,0.40909 1.43182,-0.20454 v -1.22728 l -1.43182,-0.20454 -3.68182,0.40909 z"
id="path23678"
inkscape:transform-center-y="-1.75" />
</g>
@@ -54159,7 +53841,7 @@
id="g23680"
transform="translate(141,-197.00002)">
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;enable-background:accumulate"
id="rect23682"
width="1"
height="2.5"
@@ -54171,8 +53853,8 @@
height="2.5"
width="1"
id="rect23684"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- transform="matrix(0,1,-1,0,0,0)" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;enable-background:accumulate"
+ transform="rotate(90)" />
</g>
</g>
<g
@@ -54182,29 +53864,29 @@
id="g23688">
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:url(#linearGradient23813);stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 224.75,442.5 0,0 -3.5,-1 -1.5,0.25 0,1.5 1.5,0.25 3.5,-1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23813);stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 224.75,442.5 v 0 l -3.5,-1 -1.5,0.25 v 1.5 l 1.5,0.25 z"
id="path23690"
sodipodi:nodetypes="ccccccc"
inkscape:transform-center-y="-1.75" />
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:url(#linearGradient23815);stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 220.5,446.75 0,0 0.75001,-3.5 -1e-5,-1.5 -1.5,0 1e-5,1.5 0.74999,3.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23815);stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 220.5,446.75 v 0 l 0.75001,-3.5 -1e-5,-1.5 h -1.5 l 1e-5,1.5 z"
id="path23692"
sodipodi:nodetypes="ccccccc"
inkscape:transform-center-y="-1.75" />
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:url(#linearGradient23817);stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 216.25,442.5 0,0 3.50001,0.75 1.49999,0 0,-1.5 -1.49999,0 -3.50001,0.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23817);stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 216.25,442.5 v 0 l 3.50001,0.75 H 221.25 v -1.5 h -1.49999 z"
id="path23695"
sodipodi:nodetypes="ccccccc"
inkscape:transform-center-y="-1.75" />
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:url(#linearGradient23819);stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 220.5,438.25 0,0 -0.74999,3.75 -1e-5,1.25 1.5,0 1e-5,-1.25 -0.75001,-3.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23819);stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 220.5,438.25 v 0 l -0.74999,3.75 -1e-5,1.25 h 1.5 l 1e-5,-1.25 z"
id="path23697"
sodipodi:nodetypes="ccccccc"
inkscape:transform-center-y="-1.75" />
@@ -54214,29 +53896,29 @@
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
- style="fill:url(#linearGradient23821);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 220,437 -0.5,4.5 0.25,1.75 1.5,0 0.25,-1.75 -0.5,-4.5 -1,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23821);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 220,437 -0.5,4.5 0.25,1.75 h 1.5 L 221.5,441.5 221,437 Z"
id="path23702"
inkscape:transform-center-y="-1.75" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
- style="fill:url(#linearGradient23823);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 226,442 -4.5,-0.5 -1.75,0.25 0,1.5 1.75,0.25 4.5,-0.5 0,-1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23823);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 226,442 -4.5,-0.5 -1.75,0.25 v 1.5 l 1.75,0.25 4.5,-0.5 z"
id="path23704"
inkscape:transform-center-y="-1.75" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
- style="fill:url(#linearGradient23825);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 220,448 -0.5,-4.5 0.25,-1.75 1.5,0 0.25,1.75 -0.5,4.5 -1,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23825);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 220,448 -0.5,-4.5 0.25,-1.75 h 1.5 l 0.25,1.75 -0.5,4.5 z"
id="path23706"
inkscape:transform-center-y="-1.75" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
- style="fill:url(#linearGradient23827);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 215,443 4.5,0.5 1.75,-0.25 0,-1.5 -1.75,-0.25 -4.5,0.5 0,1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23827);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 215,443 4.5,0.5 1.75,-0.25 v -1.5 L 219.5,441.5 215,442 Z"
id="path23708"
inkscape:transform-center-y="-1.75" />
</g>
@@ -54244,7 +53926,7 @@
id="g23713"
transform="translate(135,-187.00002)">
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;enable-background:accumulate"
id="rect23715"
width="1"
height="2.9999599"
@@ -54256,8 +53938,8 @@
height="3"
width="1"
id="rect23717"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- transform="matrix(0,1,-1,0,0,0)" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;enable-background:accumulate"
+ transform="rotate(90)" />
</g>
</g>
<g
@@ -54265,8 +53947,8 @@
id="g23719">
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:url(#linearGradient23829);stroke-width:1.58491683;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 218.75004,424.50004 -0.5,0 -0.50004,1.74996 0.25004,1.75004 1,0 0.24996,-1.75004 -0.49996,-1.74996 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23829);stroke-width:1.58491683;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 218.75004,424.50004 h -0.5 L 217.75,426.25 l 0.25004,1.75004 h 1 L 219.25,426.25 Z"
id="path23728"
sodipodi:nodetypes="ccccccc"
inkscape:transform-center-y="-1.25" />
@@ -54275,55 +53957,55 @@
inkscape:transform-center-y="-1.25"
sodipodi:nodetypes="ccccccc"
id="path23736"
- d="m 221.50004,427.75004 0,-0.5 -1.74996,-0.50004 -1.75004,0.25004 0,1 1.75004,0.24996 1.74996,-0.49996 z"
- style="fill:none;stroke:url(#linearGradient23831);stroke-width:1.58491683;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m 221.50004,427.75004 v -0.5 l -1.74996,-0.50004 -1.75004,0.25004 v 1 l 1.75004,0.24996 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23831);stroke-width:1.58491683;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
inkscape:transform-center-y="-1.25"
sodipodi:nodetypes="ccccccc"
id="path23738"
- d="m 215.50004,427.25004 0,0.5 1.74996,0.50004 1.75004,-0.25004 0,-1 -1.75004,-0.24996 -1.74996,0.49996 z"
- style="fill:none;stroke:url(#linearGradient23833);stroke-width:1.58491683;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m 215.50004,427.25004 v 0.5 l 1.74996,0.50004 1.75004,-0.25004 v -1 L 217.25,426.75008 Z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23833);stroke-width:1.58491683;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
inkscape:transform-center-y="-1.25"
sodipodi:nodetypes="ccccccc"
id="path23740"
- d="m 218.25004,430.50004 0.5,0 0.50004,-1.74996 -0.25004,-1.75004 -1,0 -0.24996,1.75004 0.49996,1.74996 z"
- style="fill:none;stroke:url(#linearGradient23835);stroke-width:1.58491683;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m 218.25004,430.50004 h 0.5 l 0.50004,-1.74996 -0.25004,-1.75004 h -1 l -0.24996,1.75004 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23835);stroke-width:1.58491683;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
- style="fill:url(#linearGradient23837);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 218.00004,424.00004 -0.12109,2.86328 0.1211,1.13676 0.99999,-4e-5 0.125,-1.125 -0.125,-2.875 -1,0 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23837);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 218.00004,424.00004 -0.12109,2.86328 0.1211,1.13676 0.99999,-4e-5 0.125,-1.125 -0.125,-2.875 z"
id="path23742"
inkscape:transform-center-y="-1.49998" />
<path
inkscape:connector-curvature="0"
inkscape:transform-center-y="-1.49998"
id="path23744"
- d="m 222.00004,427.00004 -2.86328,-0.12109 -1.13676,0.12109 4e-5,1 1.125,0.125 2.875,-0.125 0,-1 z"
- style="fill:url(#linearGradient23839);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 222.00004,427.00004 -2.86328,-0.12109 -1.13676,0.12109 4e-5,1 1.125,0.125 2.875,-0.125 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23839);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccc" />
<path
inkscape:connector-curvature="0"
inkscape:transform-center-y="-1.49998"
id="path23746"
- d="m 219.00004,431.00004 0.12109,-2.86328 -0.1211,-1.13676 -0.99999,4e-5 -0.125,1.125 0.125,2.875 1,0 0,0 0,0 0,0 z"
- style="fill:url(#linearGradient23841);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 219.00004,431.00004 0.12109,-2.86328 -0.1211,-1.13676 -0.99999,4e-5 -0.125,1.125 0.125,2.875 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23841);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccc" />
<path
inkscape:connector-curvature="0"
inkscape:transform-center-y="-1.49998"
id="path23748"
- d="m 215.00004,428.00004 2.86328,0.12109 1.13676,-0.12109 -4e-5,-1 -1.125,-0.125 -2.875,0.125 0,1 z"
- style="fill:url(#linearGradient23843);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 215.00004,428.00004 2.86328,0.12109 1.13676,-0.12109 -4e-5,-1 -1.125,-0.125 -2.875,0.125 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23843);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccc" />
<g
id="g23751"
transform="translate(133.00004,-201.99996)">
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;enable-background:accumulate"
id="rect23753"
width="1"
height="2"
@@ -54335,8 +54017,8 @@
height="2"
width="1"
id="rect23755"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- transform="matrix(0,1,-1,0,0,0)" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;enable-background:accumulate"
+ transform="rotate(90)" />
</g>
</g>
<g
@@ -54347,22 +54029,22 @@
transform="translate(0,-6.4549394)">
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:url(#linearGradient23845);stroke-width:1.59012127;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 230.20453,450.95187 0,0 -2.22727,-0.63574 -0.95454,0.15894 0,0.9536 0.95454,0.15893 2.22727,-0.63573 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23845);stroke-width:1.59012127;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 230.20453,450.95187 v 0 l -2.22727,-0.63574 -0.95454,0.15894 v 0.9536 l 0.95454,0.15893 z"
id="path23767"
sodipodi:nodetypes="ccccccc"
inkscape:transform-center-y="-1.75" />
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:url(#linearGradient23847);stroke-width:1.59012127;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 227.49999,453.65374 0,0 0.63637,-2.22507 -0.15909,-0.9536 -0.95455,0 -0.15909,0.9536 0.63636,2.22507 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23847);stroke-width:1.59012127;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 227.49999,453.65374 v 0 l 0.63637,-2.22507 -0.15909,-0.9536 h -0.95455 l -0.15909,0.9536 z"
id="path23770"
sodipodi:nodetypes="ccccccc"
inkscape:transform-center-y="-1.75" />
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:url(#linearGradient23849);stroke-width:1.59012127;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 224.79546,450.95187 0,0 2.22727,0.63574 0.95454,-0.15894 0,-0.9536 -0.95454,-0.15893 -2.22727,0.63573 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23849);stroke-width:1.59012127;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 224.79546,450.95187 v 0 l 2.22727,0.63574 0.95454,-0.15894 v -0.9536 l -0.95454,-0.15893 z"
id="path23774"
sodipodi:nodetypes="ccccccc"
inkscape:transform-center-y="-1.75" />
@@ -54371,37 +54053,37 @@
inkscape:transform-center-y="-1.75"
sodipodi:nodetypes="ccccccc"
id="path23776"
- d="m 227.5,448.25 0,0 -0.63637,2.22507 0.15909,0.9536 0.95455,0 0.15909,-0.9536 L 227.5,448.25 z"
- style="fill:none;stroke:url(#linearGradient23851);stroke-width:1.59012127;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m 227.5,448.25 v 0 l -0.63637,2.22507 0.15909,0.9536 h 0.95455 l 0.15909,-0.9536 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23851);stroke-width:1.59012127;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
</g>
<g
id="g23778">
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
- style="fill:url(#linearGradient23853);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 227.18182,441.00653 -0.31818,2.86081 0.15909,1.11253 0.95454,0 0.15909,-1.11253 -0.31818,-2.86081 -0.63636,0 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23853);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 227.18182,441.00653 -0.31818,2.86081 0.15909,1.11253 h 0.95454 l 0.15909,-1.11253 -0.31818,-2.86081 z"
id="path23780"
inkscape:transform-center-y="-1.75" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
- style="fill:url(#linearGradient23856);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 231,444.1852 -2.86364,-0.31786 -1.11363,0.15893 0,0.9536 1.11363,0.15894 2.86364,-0.31787 0,-0.63574 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23856);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 231,444.1852 -2.86364,-0.31786 -1.11363,0.15893 v 0.9536 l 1.11363,0.15894 L 231,444.82094 Z"
id="path23782"
inkscape:transform-center-y="-1.75" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
- style="fill:url(#linearGradient23858);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 227.18182,447.99961 -0.31818,-2.8608 0.15909,-1.11254 0.95454,0 0.15909,1.11254 -0.31818,2.8608 -0.63636,0 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23858);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 227.18182,447.99961 -0.31818,-2.8608 0.15909,-1.11254 h 0.95454 l 0.15909,1.11254 -0.31818,2.8608 z"
id="path23784"
inkscape:transform-center-y="-1.75" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
- style="fill:url(#linearGradient23860);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 224.00001,444.82094 2.86363,0.31787 1.11363,-0.15894 0,-0.9536 -1.11363,-0.15893 -2.86363,0.31786 0,0.63574 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23860);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 224.00001,444.82094 2.86363,0.31787 1.11363,-0.15894 v -0.9536 l -1.11363,-0.15893 -2.86363,0.31786 z"
id="path23786"
inkscape:transform-center-y="-1.75" />
</g>
@@ -54411,7 +54093,7 @@
id="g23791"
transform="translate(141.99999,-184.99353)">
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;enable-background:accumulate"
id="rect23793"
width="1"
height="2"
@@ -54423,8 +54105,8 @@
height="2"
width="1"
id="rect23795"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- transform="matrix(0,1,-1,0,0,0)" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;marker:none;enable-background:accumulate"
+ transform="rotate(90)" />
</g>
</g>
</g>
@@ -54443,13 +54125,13 @@
height="16"
width="16"
id="rect24298"
- style="opacity:0;fill:#cccccc;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#cccccc;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="translate(28.71596,210.64282)"
id="g41346"
style="display:inline">
<rect
- style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline;enable-background:new"
+ style="display:inline;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
id="rect41308"
width="14"
height="6.0000124"
@@ -54468,7 +54150,7 @@
height="4.00875"
width="12"
id="rect41626"
- style="fill:none;stroke:url(#linearGradient24317);stroke-width:1.00000048;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline;enable-background:new"
+ style="display:inline;fill:none;stroke:url(#linearGradient24317);stroke-width:1.00000048;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
@@ -54483,7 +54165,7 @@
height="4.9999971"
width="14"
id="rect41313"
- style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline;enable-background:new" />
+ style="display:inline;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" />
<rect
rx="0.97821051"
ry="0.97821051"
@@ -54492,12 +54174,12 @@
height="2.9999971"
width="12.000008"
id="rect41629"
- style="opacity:0.8;fill:none;stroke:url(#linearGradient24319);stroke-width:1.00000048;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline;enable-background:new"
+ style="display:inline;opacity:0.8;fill:none;stroke:url(#linearGradient24319);stroke-width:1.00000048;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<rect
- style="fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect41631"
width="8"
height="3.9999919"
@@ -54509,7 +54191,7 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- style="opacity:0.7;fill:none;stroke:url(#linearGradient24321);stroke-width:1.00000048;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline;enable-background:new"
+ style="display:inline;opacity:0.7;fill:none;stroke:url(#linearGradient24321);stroke-width:1.00000048;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
id="rect41633"
width="12.000008"
height="2.9999971"
@@ -54518,7 +54200,7 @@
ry="0.97821051"
rx="0.97821051" />
<rect
- style="opacity:0.6;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect41635"
width="0.99999988"
height="3.0000272"
@@ -54527,7 +54209,7 @@
rx="0"
ry="0" />
<g
- style="opacity:0.8;display:inline;enable-background:new"
+ style="display:inline;opacity:0.8;enable-background:new"
transform="matrix(-1,0,0,1,193.28404,-130.61032)"
id="g41637">
<g
@@ -54541,10 +54223,10 @@
height="1"
width="1"
id="rect41641"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
transform="matrix(-1,0,0,1,194,-1.1e-6)"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect24094"
width="1"
height="3"
@@ -54553,7 +54235,7 @@
rx="0"
ry="0" />
<rect
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect24096"
width="1"
height="1"
@@ -54569,7 +54251,7 @@
height="3"
width="1"
id="rect24098"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
</g>
</g>
</g>
@@ -54583,14 +54265,14 @@
height="16"
width="16"
id="rect24195"
- style="opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<g
transform="translate(-230,238.99245)"
id="g41674"
style="display:inline">
<path
- style="fill:url(#linearGradient24238);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 424.5,170.5 0,10.5 1.5,1.5 9.5,0 0,-11 -7,0 0,-1 -4,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient24238);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate"
+ d="M 424.5,170.5 V 181 l 1.5,1.5 h 9.5 v -11 h -7 v -1 z"
id="path24199"
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0" />
@@ -54606,12 +54288,12 @@
height="7.9999371"
width="7.0000038"
id="rect41679"
- style="fill:url(#linearGradient24276);fill-opacity:1;fill-rule:nonzero;stroke:#4d4d4d;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+ style="fill:url(#linearGradient24276);fill-opacity:1;fill-rule:nonzero;stroke:#4d4d4d;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<g
id="g41681">
<path
style="fill:#c80000;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 192,239 0,2 2,0 0,-2 -2,0 z m 2,2 0,2 2,0 0,-2 -2,0 z m 0,2 -2,0 0,2 2,0 0,-2 z m -2,0 0,-2 -2,0 0,2 2,0 z"
+ d="m 192,239 v 2 h 2 v -2 z m 2,2 v 2 h 2 v -2 z m 0,2 h -2 v 2 h 2 z m -2,0 v -2 h -2 v 2 z"
transform="translate(267,-117.99994)"
id="path41683"
inkscape:connector-curvature="0" />
@@ -54624,51 +54306,51 @@
height="5.9999981"
width="5.0000038"
id="rect41685"
- style="fill:none;stroke:url(#linearGradient24278);stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline" />
+ style="display:inline;fill:none;stroke:url(#linearGradient24278);stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
</g>
<path
- style="fill:#d1c595;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient24244);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 427.5,175.5 12,0.008 0,5.5 -1.5,1.49245 -12,0.008 0,-2 1.5,0 0,-5.00755 0,-9e-4 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#d1c595;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient24244);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 427.5,175.5 12,0.008 v 5.5 l -1.5,1.49245 -12,0.008 v -2 h 1.5 v -5.00755 z"
id="path41687"
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccc"
- style="opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
- d="m 426.5,181.5 -1.01563,-0.98437 0,-9.02344 2,0 0,1 2.17355,0.0154"
+ style="display:inline;opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 426.5,181.5 -1.01563,-0.98437 v -9.02344 h 2 v 1 l 2.17355,0.0154"
id="path41689"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
- style="opacity:0.18999999;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
- d="m 428,181.50755 9.5,0"
+ style="display:inline;opacity:0.18999999;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 428,181.50755 h 9.5"
id="path41691"
inkscape:connector-curvature="0" />
<path
id="path41693"
- d="m 438.5,176.50755 -10,-0.008 0,4.00755 -1.5,1.5 -1.5,-1.5"
- style="opacity:0.8;fill:none;stroke:url(#linearGradient24246);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="m 438.5,176.50755 -10,-0.008 v 4.00755 l -1.5,1.5 -1.5,-1.5"
+ style="display:inline;opacity:0.8;fill:none;stroke:url(#linearGradient24246);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
style="fill:#ffffff;fill-rule:evenodd;stroke:none"
- d="m 428,171.00755 0,2 -3,0 0,-2 3,0 z"
+ d="m 428,171.00755 v 2 h -3 v -2 z"
id="path24228"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<g
id="g24230"
transform="translate(270,-408)"
- style="fill:#d45500;fill-opacity:1;display:inline" />
+ style="display:inline;fill:#d45500;fill-opacity:1" />
<path
sodipodi:nodetypes="ccccccccccccc"
id="path24234"
- d="m 424.5,170.5 0,10.5 1.5,1.5 12,0.008 1.5,-1.49245 0,-5.5 -2,-0.008 0,-6 -7,0 0,2 -2,-0.008 0,-1 -4,0 0,4.5e-4 z"
- style="fill:none;stroke:#2a2512;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 424.5,170.5 V 181 l 1.5,1.5 12,0.008 1.5,-1.49245 v -5.5 l -2,-0.008 v -6 h -7 v 2 l -2,-0.008 v -1 h -4 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#2a2512;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.3;fill:none;stroke:#d40000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
- d="m 189.5,244.14308 0,-5.64308 7,0 0,5.64842"
+ style="display:inline;opacity:0.3;fill:none;stroke:#d40000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 189.5,244.14308 V 238.5 h 7 v 5.64842"
id="path41698"
sodipodi:nodetypes="cccc"
transform="translate(241,-68.99245)"
@@ -54682,7 +54364,7 @@
inkscape:export-ydpi="90"
transform="translate(0,128.00001)">
<rect
- style="opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect24152"
width="16"
height="16"
@@ -54693,8 +54375,8 @@
<path
sodipodi:nodetypes="cccccccc"
id="path41754"
- d="m 89.5,409.49245 0,10.5 1.5,1.5 9.5,0 0,-11 -7,0 0,-1 -4,0 z"
- style="fill:url(#linearGradient24374);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 89.5,409.49245 v 10.5 l 1.5,1.5 h 9.5 v -11 h -7 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient24374);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<g
style="display:inline"
@@ -54708,7 +54390,7 @@
height="7.9999371"
width="7.0000038"
id="rect24160"
- style="fill:url(#linearGradient41721);fill-opacity:1;fill-rule:nonzero;stroke:#333333;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+ style="fill:url(#linearGradient41721);fill-opacity:1;fill-rule:nonzero;stroke:#333333;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<rect
ry="0"
rx="0"
@@ -54717,58 +54399,58 @@
height="5.9999981"
width="5.0000038"
id="rect24162"
- style="fill:none;stroke:url(#linearGradient41723);stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline" />
+ style="display:inline;fill:none;stroke:url(#linearGradient41723);stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccc"
id="path41760"
- style="opacity:0.65;fill:none;stroke:#333333;stroke-width:0.9999997px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;display:inline"
- d="m 458.49992,122.50172 3.00006,0 m -3.00006,1.99301 3.00006,0"
+ style="display:inline;opacity:0.65;fill:none;stroke:#333333;stroke-width:0.9999997px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 458.49992,122.50172 h 3.00006 m -3.00006,1.99301 h 3.00006"
inkscape:connector-curvature="0" />
</g>
<path
sodipodi:nodetypes="cccccccc"
id="path41762"
- d="m 92.5,414.49245 12,0.008 0,5.5 -1.5,1.49245 -12,0.008 0,-2 1.5,0 0,-5.00755 0,-9e-4 z"
- style="fill:#d1c595;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient24367);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 92.5,414.49245 12,0.008 v 5.5 l -1.5,1.49245 -12,0.008 v -2 h 1.5 v -5.00755 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#d1c595;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient24367);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
id="path41764"
- d="m 91.5,420.49245 -1.01563,-0.98437 0,-9.02344 2,0 0,1 2.17355,0.0154"
- style="opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="m 91.5,420.49245 -1.01563,-0.98437 v -9.02344 h 2 v 1 l 2.17355,0.0154"
+ style="display:inline;opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
id="path41766"
- d="m 93,420.5 9.5,0"
- style="opacity:0.18999999;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="m 93,420.5 h 9.5"
+ style="display:inline;opacity:0.18999999;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
- style="opacity:0.8;fill:none;stroke:url(#linearGradient24362);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
- d="m 103.5,415.5 -10,-0.008 0,4.00755 -1.5,1.5 -1.5,-1.5"
+ style="display:inline;opacity:0.8;fill:none;stroke:url(#linearGradient24362);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 103.5,415.5 -10,-0.008 v 4.00755 l -1.5,1.5 -1.5,-1.5"
id="path41768"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path24174"
- d="m 93,410 0,2 -3,0 0,-2 3,0 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:none;display:inline"
+ d="m 93,410 v 2 h -3 v -2 z"
+ style="display:inline;fill:#ffffff;fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#2a2512;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 89.5,409.49245 0,10.5 1.5,1.5 12,0.008 1.5,-1.49245 0,-5.5 -2,-0.008 0,-6 -7,0 0,2 -2,-0.008 0,-1 -4,0 0,4.5e-4 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#2a2512;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 89.5,409.49245 v 10.5 l 1.5,1.5 12,0.008 1.5,-1.49245 v -5.5 l -2,-0.008 v -6 h -7 v 2 l -2,-0.008 v -1 h -4 z"
id="path24178"
sodipodi:nodetypes="ccccccccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
id="path24190"
- d="m 95.5,410.5 0,-2 7,0 0,5.92967"
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ d="m 95.5,410.5 v -2 h 7 v 5.92967"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -54781,12 +54463,12 @@
height="16"
width="16"
id="rect15876"
- style="opacity:0;fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:6;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:6;marker:none;enable-background:accumulate" />
<g
transform="translate(84,86)"
id="g22846">
<rect
- style="opacity:0;fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:6;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:6;marker:none;enable-background:accumulate"
id="rect22783"
width="16"
height="16"
@@ -54799,19 +54481,19 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="cssssssc"
id="path22788"
- d="m 38.5,327.9 c 0,1.37785 -0.5625,2.19999 -1.6875,3.29999 -1.125,1.1 0,3.3 -1.40625,3.3 l -2.8125,0 c -1.40625,0 -0.28125,-2.2 -1.40625,-3.3 -1.125,-1.1 -1.6875,-1.93254 -1.6875,-3.29999 0,-2.4288 2.016,-4.4 4.5,-4.4 2.484,0 4.5,1.9712 4.5,4.4 z"
+ d="m 38.5,327.9 c 0,1.37785 -0.5625,2.19999 -1.6875,3.29999 -1.125,1.1 0,3.3 -1.40625,3.3 h -2.8125 c -1.40625,0 -0.28125,-2.2 -1.40625,-3.3 -1.125,-1.1 -1.6875,-1.93254 -1.6875,-3.29999 0,-2.4288 2.016,-4.4 4.5,-4.4 2.484,0 4.5,1.9712 4.5,4.4 z"
style="opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" />
<path
inkscape:connector-curvature="0"
- style="opacity:0.9;fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- d="m 38.5,327.9 c 0,1.37785 -0.5625,2.19999 -1.6875,3.29999 -1.125,1.1 0,3.3 -1.40625,3.3 l -2.8125,0 c -1.40625,0 -0.28125,-2.2 -1.40625,-3.3 -1.125,-1.1 -1.6875,-1.93254 -1.6875,-3.29999 0,-2.4288 2.016,-4.4 4.5,-4.4 2.484,0 4.5,1.9712 4.5,4.4 z"
+ style="opacity:0.9;fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 38.5,327.9 c 0,1.37785 -0.5625,2.19999 -1.6875,3.29999 -1.125,1.1 0,3.3 -1.40625,3.3 h -2.8125 c -1.40625,0 -0.28125,-2.2 -1.40625,-3.3 -1.125,-1.1 -1.6875,-1.93254 -1.6875,-3.29999 0,-2.4288 2.016,-4.4 4.5,-4.4 2.484,0 4.5,1.9712 4.5,4.4 z"
id="path22790"
sodipodi:nodetypes="cssssssc" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc"
id="path22792"
- d="m 33,338 2,0 0,1 -2,-10e-6 L 33,338 z"
+ d="m 33,338 h 2 v 1 l -2,-10e-6 z"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
<rect
ry="0.765625"
@@ -54821,9 +54503,9 @@
height="4.75"
width="6"
id="rect22794"
- style="fill:#24221c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#24221c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#736c54;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#736c54;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect22796"
width="4"
height="3"
@@ -54839,7 +54521,7 @@
<path
inkscape:connector-curvature="0"
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 32.25,336.24999 1.25,0"
+ d="M 32.25,336.24999 H 33.5"
id="path22800"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -54847,13 +54529,13 @@
<path
inkscape:connector-curvature="0"
id="path22802"
- d="m 32.25,334.24999 1.25,0"
+ d="M 32.25,334.24999 H 33.5"
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<rect
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect22804"
width="0.25"
height="1"
@@ -54865,16 +54547,16 @@
height="1"
width="0.25"
id="rect22807"
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
y="336"
x="30.75"
height="1"
width="0.25"
id="rect22809"
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect22812"
width="0.25"
height="1"
@@ -54884,53 +54566,48 @@
sodipodi:type="inkscape:offset"
inkscape:radius="0.5"
inkscape:original="M 250.5 70.5 C 248.844 70.5 247.5 71.84032 247.5 73.5 C 247.5 74.394207 247.88111 75.199102 248.5 75.75 C 249.02979 76.22159 249.25 77.500001 249.5 77.5 C 249.75 77.5 251.25 77.500001 251.5 77.5 C 251.75 77.5 251.97036 76.220976 252.5 75.75 C 253.11956 75.199071 253.5 74.394767 253.5 73.5 C 253.5 71.840318 252.156 70.5 250.5 70.5 z "
- style="fill:url(#linearGradient22954);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.61155295;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient22954);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.61155295;marker:none;enable-background:accumulate"
id="path22814"
- d="m 250.5,70 c -1.92579,0 -3.5,1.570388 -3.5,3.5 0,1.036273 0.43284,1.981065 1.15625,2.625 0.12299,0.109481 0.35065,0.504334 0.5,0.875 0.0747,0.185333 0.1355,0.365966 0.21875,0.53125 0.0416,0.08264 0.0782,0.159602 0.15625,0.25 0.0781,0.0904 0.22443,0.218751 0.46875,0.21875 l 2,0 c 0.24442,0 0.3907,-0.128341 0.46875,-0.21875 0.078,-0.09041 0.11462,-0.167341 0.15625,-0.25 0.0832,-0.165318 0.14407,-0.345883 0.21875,-0.53125 0.14936,-0.370734 0.3774,-0.765984 0.5,-0.875 C 253.56794,75.481034 254,74.536495 254,73.5 254,71.570387 252.42579,70 250.5,70 z"
+ d="m 250.5,70 c -1.92579,0 -3.5,1.570388 -3.5,3.5 0,1.036273 0.44456,1.979112 1.16797,2.623047 0.12299,0.10948 0.32331,0.494568 0.47265,0.865234 0.0747,0.185333 0.14332,0.364013 0.22657,0.529297 0.0416,0.08264 0.084,0.163508 0.16211,0.253906 0.0781,0.0904 0.22638,0.228517 0.4707,0.228516 h 2 c 0.24442,0 0.39265,-0.138106 0.4707,-0.228516 0.0781,-0.09041 0.12244,-0.171247 0.16407,-0.253906 0.0832,-0.165318 0.14992,-0.34393 0.22461,-0.529297 0.14936,-0.370734 0.35006,-0.756218 0.47265,-0.865234 C 253.55622,75.479081 254,74.536495 254,73.5 254,71.570387 252.42579,70 250.5,70 Z"
transform="matrix(1.1428575,0,0,1.1249998,-252.2858,245.25001)" />
<path
transform="matrix(1.1428578,0,0,1.1562502,-252.28587,242.81248)"
- d="m 250.5,70 c -1.92579,0 -3.5,1.570388 -3.5,3.5 0,1.036273 0.43284,1.981065 1.15625,2.625 0.12299,0.109481 0.35065,0.504334 0.5,0.875 0.0747,0.185333 0.1355,0.365966 0.21875,0.53125 0.0416,0.08264 0.0782,0.159602 0.15625,0.25 0.0781,0.0904 0.22443,0.218751 0.46875,0.21875 l 2,0 c 0.24442,0 0.3907,-0.128341 0.46875,-0.21875 0.078,-0.09041 0.11462,-0.167341 0.15625,-0.25 0.0832,-0.165318 0.14407,-0.345883 0.21875,-0.53125 0.14936,-0.370734 0.3774,-0.765984 0.5,-0.875 C 253.56794,75.481034 254,74.536495 254,73.5 254,71.570387 252.42579,70 250.5,70 z"
+ d="m 250.5,70 c -1.92579,0 -3.5,1.570388 -3.5,3.5 0,1.036273 0.44456,1.979112 1.16797,2.623047 0.12299,0.10948 0.32331,0.494568 0.47265,0.865234 0.0747,0.185333 0.14332,0.364013 0.22657,0.529297 0.0416,0.08264 0.084,0.163508 0.16211,0.253906 0.0781,0.0904 0.22638,0.228517 0.4707,0.228516 h 2 c 0.24442,0 0.39265,-0.138106 0.4707,-0.228516 0.0781,-0.09041 0.12244,-0.171247 0.16407,-0.253906 0.0832,-0.165318 0.14992,-0.34393 0.22461,-0.529297 0.14936,-0.370734 0.35006,-0.756218 0.47265,-0.865234 C 253.55622,75.479081 254,74.536495 254,73.5 254,71.570387 252.42579,70 250.5,70 Z"
id="path22816"
- style="opacity:0.6;fill:url(#radialGradient22952);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.61155295;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:url(#radialGradient22952);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.61155295;marker:none;enable-background:accumulate"
inkscape:original="M 250.5 70.5 C 248.844 70.5 247.5 71.84032 247.5 73.5 C 247.5 74.394207 247.88111 75.199102 248.5 75.75 C 249.02979 76.22159 249.25 77.500001 249.5 77.5 C 249.75 77.5 251.25 77.500001 251.5 77.5 C 251.75 77.5 251.97036 76.220976 252.5 75.75 C 253.11956 75.199071 253.5 74.394767 253.5 73.5 C 253.5 71.840318 252.156 70.5 250.5 70.5 z "
inkscape:radius="0.5"
sodipodi:type="inkscape:offset" />
<path
inkscape:connector-curvature="0"
id="path22818"
- style="fill:none;stroke:url(#linearGradient22928);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient22928);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
d="m 34.000001,324.48827 c 1.932,0 3.5,1.50111 3.5,3.35068 0,0.99715 -0.455735,1.89301 -1.178554,2.50697 -0.617914,0.52487 -1.154779,1.38605 -1.154779,2.77907 m -1.166667,-8.63672 c -1.932001,0 -3.500001,1.50111 -3.500001,3.35068 0,0.99715 0.455736,1.89301 1.178556,2.50697 0.617913,0.52487 1.154778,1.38605 1.154778,2.77907" />
- <path
- sodipodi:type="arc"
- style="opacity:0.25;fill:url(#radialGradient22950);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:url(#radialGradient22950);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
id="path22820"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(0.9552133,0,0,0.9315985,-40.901258,-140.2522)" />
- <path
+ transform="matrix(0.9552133,0,0,0.9315985,-40.901258,-140.2522)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <circle
transform="matrix(0.99567,0,-0.00787885,1,-30.663533,191)"
- sodipodi:type="arc"
- style="opacity:0.9;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74699998;marker:none;display:inline"
+ style="display:inline;opacity:0.9;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74699998;marker:none"
id="path22822"
- sodipodi:cx="64"
- sodipodi:cy="135"
- sodipodi:rx="1"
- sodipodi:ry="1"
- d="m 65,135 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="64"
+ cy="135"
+ r="1" />
<path
inkscape:connector-curvature="0"
d="m 34.000001,324.48827 c 1.932,0 3.5,1.50111 3.5,3.35068 0,0.99715 -0.455735,1.89301 -1.178554,2.50697 -0.617914,0.52487 -1.154779,1.38605 -1.154779,2.77907 m -1.166667,-8.63672 c -1.932001,0 -3.500001,1.50111 -3.500001,3.35068 0,0.99715 0.455736,1.89301 1.178556,2.50697 0.617913,0.52487 1.154778,1.38605 1.154778,2.77907"
- style="fill:none;stroke:url(#radialGradient22922);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;display:inline"
+ style="display:inline;fill:none;stroke:url(#radialGradient22922);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
id="path22824" />
<rect
- style="opacity:0.85;fill:#3d3829;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.85;fill:#3d3829;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate"
id="rect22826"
width="5"
height="0.75"
@@ -54939,17 +54616,17 @@
<path
inkscape:connector-curvature="0"
style="fill:#6c6753;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 32.5,337.01145 3,-0.0115 0,1 -3,0.0114 0,-0.99999 0,9e-5 0,0 0,0 z"
+ d="m 32.5,337.01145 3,-0.0115 v 1 l -3,0.0114 v -0.99999 z"
id="path22828"
sodipodi:nodetypes="ccccc" />
<path
inkscape:connector-curvature="0"
- style="opacity:0.2;fill:url(#linearGradient22917);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 33,330 0,2.75 2,0 0,-2.75 -2,0 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:url(#linearGradient22917);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate"
+ d="m 33,330 v 2.75 h 2 V 330 Z"
id="path22830"
sodipodi:nodetypes="ccccc" />
<rect
- style="opacity:0.6;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000005;marker:none;enable-background:accumulate"
id="rect22832"
width="1"
height="1"
@@ -54959,16 +54636,16 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="csscssc"
id="path22836"
- style="fill:none;stroke:url(#radialGradient23727);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;display:inline"
+ style="display:inline;fill:none;stroke:url(#radialGradient23727);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
d="m 32.875,333.12498 c 0,-1.39113 -0.517691,-2.25114 -1.113536,-2.77529 C 31.064459,329.73656 30.5,328.93567 30.5,327.93988 c 0,-1.84706 1.637,-3.43989 3.5,-3.43989 1.863,0 3.5,1.59283 3.5,3.43989 0,0.99579 -0.564459,1.79668 -1.261464,2.40981 -0.595845,0.52415 -1.113536,1.38416 -1.113536,2.77529" />
<path
inkscape:connector-curvature="0"
style="opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 33,338.00001 0.5,0 0,1 L 33,339 l 0,-0.99999 z"
+ d="m 33,338.00001 h 0.5 v 1 L 33,339 Z"
id="path22838"
sodipodi:nodetypes="ccccc" />
<rect
- style="opacity:0.8;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.8;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000005;marker:none;enable-background:accumulate"
id="rect23759"
width="2"
height="1"
@@ -54980,7 +54657,7 @@
height="1"
width="1"
id="rect23761"
- style="opacity:0.6;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000005;marker:none;enable-background:accumulate" />
</g>
</g>
</g>
@@ -54988,7 +54665,7 @@
id="ICON_OUTLINER_OB_LAMP"
transform="translate(84,107.00001)">
<rect
- style="opacity:0;fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:6;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:6;marker:none;enable-background:accumulate"
id="rect23769"
width="16"
height="16"
@@ -55000,19 +54677,19 @@
<path
sodipodi:nodetypes="cssssssc"
id="path23788"
- d="m 38.5,327.9 c 0,1.37785 -0.5625,2.19999 -1.6875,3.29999 -1.125,1.1 0,3.3 -1.40625,3.3 l -2.8125,0 c -1.40625,0 -0.28125,-2.2 -1.40625,-3.3 -1.125,-1.1 -1.6875,-1.93254 -1.6875,-3.29999 0,-2.4288 2.016,-4.4 4.5,-4.4 2.484,0 4.5,1.9712 4.5,4.4 z"
+ d="m 38.5,327.9 c 0,1.37785 -0.5625,2.19999 -1.6875,3.29999 -1.125,1.1 0,3.3 -1.40625,3.3 h -2.8125 c -1.40625,0 -0.28125,-2.2 -1.40625,-3.3 -1.125,-1.1 -1.6875,-1.93254 -1.6875,-3.29999 0,-2.4288 2.016,-4.4 4.5,-4.4 2.484,0 4.5,1.9712 4.5,4.4 z"
style="opacity:0.3;fill:#ff8400;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#2b1600;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- d="m 38.5,327.9 c 0,1.37785 -0.5625,2.19999 -1.6875,3.29999 -1.125,1.1 0,3.3 -1.40625,3.3 l -2.8125,0 c -1.40625,0 -0.28125,-2.2 -1.40625,-3.3 -1.125,-1.1 -1.6875,-1.93254 -1.6875,-3.29999 0,-2.4288 2.016,-4.4 4.5,-4.4 2.484,0 4.5,1.9712 4.5,4.4 z"
+ style="fill:none;stroke:#2b1600;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 38.5,327.9 c 0,1.37785 -0.5625,2.19999 -1.6875,3.29999 -1.125,1.1 0,3.3 -1.40625,3.3 h -2.8125 c -1.40625,0 -0.28125,-2.2 -1.40625,-3.3 -1.125,-1.1 -1.6875,-1.93254 -1.6875,-3.29999 0,-2.4288 2.016,-4.4 4.5,-4.4 2.484,0 4.5,1.9712 4.5,4.4 z"
id="path23802"
sodipodi:nodetypes="cssssssc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path23808"
- d="m 33,338 2,0 0,1 -2,-10e-6 L 33,338 z"
+ d="m 33,338 h 2 v 1 l -2,-10e-6 z"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<rect
@@ -55023,9 +54700,9 @@
height="4.75"
width="6"
id="rect23810"
- style="fill:#2b1600;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#2b1600;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#846544;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#846544;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect23812"
width="4"
height="3"
@@ -55040,7 +54717,7 @@
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 32.25,336.24999 1.25,0"
+ d="M 32.25,336.24999 H 33.5"
id="path23819"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -55048,14 +54725,14 @@
inkscape:connector-curvature="0" />
<path
id="path23821"
- d="m 32.25,334.24999 1.25,0"
+ d="M 32.25,334.24999 H 33.5"
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<rect
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect23824"
width="0.25"
height="1"
@@ -55067,16 +54744,16 @@
height="1.099999"
width="0.28125"
id="rect23826"
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
y="336"
x="30.75"
height="1"
width="0.25"
id="rect23828"
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect23830"
width="0.28125"
height="1.099999"
@@ -55086,53 +54763,48 @@
sodipodi:type="inkscape:offset"
inkscape:radius="0.5"
inkscape:original="M 250.5 70.5 C 248.844 70.5 247.5 71.84032 247.5 73.5 C 247.5 74.394207 247.88111 75.199102 248.5 75.75 C 249.02979 76.22159 249.25 77.500001 249.5 77.5 C 249.75 77.5 251.25 77.500001 251.5 77.5 C 251.75 77.5 251.97036 76.220976 252.5 75.75 C 253.11956 75.199071 253.5 74.394767 253.5 73.5 C 253.5 71.840318 252.156 70.5 250.5 70.5 z "
- style="fill:url(#linearGradient23892);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.61155295;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23892);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.61155295;marker:none;enable-background:accumulate"
id="path23838"
- d="m 250.5,70 c -1.92579,0 -3.5,1.570388 -3.5,3.5 0,1.036273 0.43284,1.981065 1.15625,2.625 0.12299,0.109481 0.35065,0.504334 0.5,0.875 0.0747,0.185333 0.1355,0.365966 0.21875,0.53125 0.0416,0.08264 0.0782,0.159602 0.15625,0.25 0.0781,0.0904 0.22443,0.218751 0.46875,0.21875 l 2,0 c 0.24442,0 0.3907,-0.128341 0.46875,-0.21875 0.078,-0.09041 0.11462,-0.167341 0.15625,-0.25 0.0832,-0.165318 0.14407,-0.345883 0.21875,-0.53125 0.14936,-0.370734 0.3774,-0.765984 0.5,-0.875 C 253.56794,75.481034 254,74.536495 254,73.5 254,71.570387 252.42579,70 250.5,70 z"
+ d="m 250.5,70 c -1.92579,0 -3.5,1.570388 -3.5,3.5 0,1.036273 0.44456,1.979112 1.16797,2.623047 0.12299,0.10948 0.32331,0.494568 0.47265,0.865234 0.0747,0.185333 0.14332,0.364013 0.22657,0.529297 0.0416,0.08264 0.084,0.163508 0.16211,0.253906 0.0781,0.0904 0.22638,0.228517 0.4707,0.228516 h 2 c 0.24442,0 0.39265,-0.138106 0.4707,-0.228516 0.0781,-0.09041 0.12244,-0.171247 0.16407,-0.253906 0.0832,-0.165318 0.14992,-0.34393 0.22461,-0.529297 0.14936,-0.370734 0.35006,-0.756218 0.47265,-0.865234 C 253.55622,75.479081 254,74.536495 254,73.5 254,71.570387 252.42579,70 250.5,70 Z"
transform="matrix(1.1428575,0,0,1.1249998,-252.2858,245.25001)" />
<path
transform="matrix(1.1428578,0,0,1.1562502,-252.28587,242.81248)"
- d="m 250.5,70 c -1.92579,0 -3.5,1.570388 -3.5,3.5 0,1.036273 0.43284,1.981065 1.15625,2.625 0.12299,0.109481 0.35065,0.504334 0.5,0.875 0.0747,0.185333 0.1355,0.365966 0.21875,0.53125 0.0416,0.08264 0.0782,0.159602 0.15625,0.25 0.0781,0.0904 0.22443,0.218751 0.46875,0.21875 l 2,0 c 0.24442,0 0.3907,-0.128341 0.46875,-0.21875 0.078,-0.09041 0.11462,-0.167341 0.15625,-0.25 0.0832,-0.165318 0.14407,-0.345883 0.21875,-0.53125 0.14936,-0.370734 0.3774,-0.765984 0.5,-0.875 C 253.56794,75.481034 254,74.536495 254,73.5 254,71.570387 252.42579,70 250.5,70 z"
+ d="m 250.5,70 c -1.92579,0 -3.5,1.570388 -3.5,3.5 0,1.036273 0.44456,1.979112 1.16797,2.623047 0.12299,0.10948 0.32331,0.494568 0.47265,0.865234 0.0747,0.185333 0.14332,0.364013 0.22657,0.529297 0.0416,0.08264 0.084,0.163508 0.16211,0.253906 0.0781,0.0904 0.22638,0.228517 0.4707,0.228516 h 2 c 0.24442,0 0.39265,-0.138106 0.4707,-0.228516 0.0781,-0.09041 0.12244,-0.171247 0.16407,-0.253906 0.0832,-0.165318 0.14992,-0.34393 0.22461,-0.529297 0.14936,-0.370734 0.35006,-0.756218 0.47265,-0.865234 C 253.55622,75.479081 254,74.536495 254,73.5 254,71.570387 252.42579,70 250.5,70 Z"
id="path23840"
- style="opacity:0.95;fill:url(#radialGradient23894);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.61155295;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.95;fill:url(#radialGradient23894);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.61155295;marker:none;enable-background:accumulate"
inkscape:original="M 250.5 70.5 C 248.844 70.5 247.5 71.84032 247.5 73.5 C 247.5 74.394207 247.88111 75.199102 248.5 75.75 C 249.02979 76.22159 249.25 77.500001 249.5 77.5 C 249.75 77.5 251.25 77.500001 251.5 77.5 C 251.75 77.5 251.97036 76.220976 252.5 75.75 C 253.11956 75.199071 253.5 74.394767 253.5 73.5 C 253.5 71.840318 252.156 70.5 250.5 70.5 z "
inkscape:radius="0.5"
sodipodi:type="inkscape:offset" />
<path
id="path23842"
- style="fill:none;stroke:url(#linearGradient23896);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient23896);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
d="m 34.000001,324.48827 c 1.932,0 3.5,1.50111 3.5,3.35068 0,0.99715 -0.455735,1.89301 -1.178554,2.50697 -0.617914,0.52487 -1.154779,1.38605 -1.154779,2.77907 m -1.166667,-8.63672 c -1.932001,0 -3.500001,1.50111 -3.500001,3.35068 0,0.99715 0.455736,1.89301 1.178556,2.50697 0.617913,0.52487 1.154778,1.38605 1.154778,2.77907"
inkscape:connector-curvature="0" />
- <path
- sodipodi:type="arc"
- style="opacity:0.25;fill:url(#radialGradient23898);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:url(#radialGradient23898);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
id="path23844"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(0.9552133,0,0,0.9315985,-40.901258,-140.2522)" />
- <path
+ transform="matrix(0.9552133,0,0,0.9315985,-40.901258,-140.2522)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <circle
transform="matrix(0.99567,0,-0.00787885,1,-30.654936,191)"
- sodipodi:type="arc"
- style="opacity:0.9;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74699998;marker:none;display:inline"
+ style="display:inline;opacity:0.9;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74699998;marker:none"
id="path23846"
- sodipodi:cx="64"
- sodipodi:cy="135"
- sodipodi:rx="1"
- sodipodi:ry="1"
- d="m 65,135 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="64"
+ cy="135"
+ r="1" />
<path
d="m 34.000001,324.48827 c 1.932,0 3.5,1.50111 3.5,3.35068 0,0.99715 -0.455735,1.89301 -1.178554,2.50697 -0.617914,0.52487 -1.154779,1.38605 -1.154779,2.77907 m -1.166667,-8.63672 c -1.932001,0 -3.500001,1.50111 -3.500001,3.35068 0,0.99715 0.455736,1.89301 1.178556,2.50697 0.617913,0.52487 1.154778,1.38605 1.154778,2.77907"
- style="fill:none;stroke:url(#radialGradient23900);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;display:inline"
+ style="display:inline;fill:none;stroke:url(#radialGradient23900);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
id="path23848"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.85;fill:#503416;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.85;fill:#503416;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate"
id="rect23850"
width="5"
height="0.75"
@@ -55140,18 +54812,18 @@
y="333" />
<path
style="fill:#552c00;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 32.5,337.01145 3,-0.0115 0,1 -3,0.0114 0,-0.99999 0,9e-5 0,0 0,0 z"
+ d="m 32.5,337.01145 3,-0.0115 v 1 l -3,0.0114 v -0.99999 z"
id="path23852"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.2;fill:url(#linearGradient23902);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 33,330 0,2.75 2,0 0,-2.75 -2,0 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:url(#linearGradient23902);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate"
+ d="m 33,330 v 2.75 h 2 V 330 Z"
id="path23860"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.6;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000005;marker:none;enable-background:accumulate"
id="rect23862"
width="1"
height="1"
@@ -55160,17 +54832,17 @@
<path
sodipodi:nodetypes="csscssc"
id="path23866"
- style="fill:none;stroke:url(#radialGradient23904);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;display:inline"
+ style="display:inline;fill:none;stroke:url(#radialGradient23904);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
d="m 32.875,333.12498 c 0,-1.39113 -0.517691,-2.25114 -1.113536,-2.77529 C 31.064459,329.73656 30.5,328.93567 30.5,327.93988 c 0,-1.84706 1.637,-3.43989 3.5,-3.43989 1.863,0 3.5,1.59283 3.5,3.43989 0,0.99579 -0.564459,1.79668 -1.261464,2.40981 -0.595845,0.52415 -1.113536,1.38416 -1.113536,2.77529"
inkscape:connector-curvature="0" />
<path
style="opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 33,338.00001 0.5,0 0,1 L 33,339 l 0,-0.99999 z"
+ d="m 33,338.00001 h 0.5 v 1 L 33,339 Z"
id="path23873"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.8;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.8;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000005;marker:none;enable-background:accumulate"
id="rect23877"
width="2"
height="1"
@@ -55182,14 +54854,14 @@
height="1"
width="1"
id="rect23888"
- style="opacity:0.6;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000005;marker:none;enable-background:accumulate" />
</g>
</g>
<g
id="ICON_LAMP"
transform="translate(-21,233.00001)">
<rect
- style="opacity:0;fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:6;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:6;marker:none;enable-background:accumulate"
id="rect23915"
width="16"
height="16"
@@ -55201,19 +54873,19 @@
<path
sodipodi:nodetypes="cssssssc"
id="path23920"
- d="m 38.5,327.9 c 0,1.37785 -0.5625,2.19999 -1.6875,3.29999 -1.125,1.1 0,3.3 -1.40625,3.3 l -2.8125,0 c -1.40625,0 -0.28125,-2.2 -1.40625,-3.3 -1.125,-1.1 -1.6875,-1.93254 -1.6875,-3.29999 0,-2.4288 2.016,-4.4 4.5,-4.4 2.484,0 4.5,1.9712 4.5,4.4 z"
+ d="m 38.5,327.9 c 0,1.37785 -0.5625,2.19999 -1.6875,3.29999 -1.125,1.1 0,3.3 -1.40625,3.3 h -2.8125 c -1.40625,0 -0.28125,-2.2 -1.40625,-3.3 -1.125,-1.1 -1.6875,-1.93254 -1.6875,-3.29999 0,-2.4288 2.016,-4.4 4.5,-4.4 2.484,0 4.5,1.9712 4.5,4.4 z"
style="opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- d="m 38.5,327.9 c 0,1.37785 -0.5625,2.19999 -1.6875,3.29999 -1.125,1.1 0,3.3 -1.40625,3.3 l -2.8125,0 c -1.40625,0 -0.28125,-2.2 -1.40625,-3.3 -1.125,-1.1 -1.6875,-1.93254 -1.6875,-3.29999 0,-2.4288 2.016,-4.4 4.5,-4.4 2.484,0 4.5,1.9712 4.5,4.4 z"
+ style="fill:none;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 38.5,327.9 c 0,1.37785 -0.5625,2.19999 -1.6875,3.29999 -1.125,1.1 0,3.3 -1.40625,3.3 h -2.8125 c -1.40625,0 -0.28125,-2.2 -1.40625,-3.3 -1.125,-1.1 -1.6875,-1.93254 -1.6875,-3.29999 0,-2.4288 2.016,-4.4 4.5,-4.4 2.484,0 4.5,1.9712 4.5,4.4 z"
id="path23927"
sodipodi:nodetypes="cssssssc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path23931"
- d="m 33,338 2,0 0,1 -2,-10e-6 L 33,338 z"
+ d="m 33,338 h 2 v 1 l -2,-10e-6 z"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<rect
@@ -55224,9 +54896,9 @@
height="4.75"
width="6"
id="rect23933"
- style="fill:#24221c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#24221c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#a89858;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#a89858;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect23935"
width="4"
height="3"
@@ -55240,8 +54912,8 @@
transform="matrix(1.0666667,0,0,1,-233.7,254.00667)"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#ffffff;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 32.35,336.4 1.25,0"
+ style="fill:none;stroke:#ffffff;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 32.35,336.4 H 33.6"
id="path23950"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -55249,14 +54921,14 @@
inkscape:connector-curvature="0" />
<path
id="path23956"
- d="m 32.35,334.4 1.25,0"
- style="fill:none;stroke:#ffffff;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 32.35,334.4 H 33.6"
+ style="fill:none;stroke:#ffffff;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<rect
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect23959"
width="0.25"
height="1"
@@ -55268,16 +54940,16 @@
height="1.099999"
width="0.28125"
id="rect23961"
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
y="336"
x="30.75"
height="1"
width="0.25"
id="rect23965"
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect23967"
width="0.28125"
height="1.099999"
@@ -55287,53 +54959,48 @@
sodipodi:type="inkscape:offset"
inkscape:radius="0.5"
inkscape:original="M 250.5 70.5 C 248.844 70.5 247.5 71.84032 247.5 73.5 C 247.5 74.394207 247.88111 75.199102 248.5 75.75 C 249.02979 76.22159 249.25 77.500001 249.5 77.5 C 249.75 77.5 251.25 77.500001 251.5 77.5 C 251.75 77.5 251.97036 76.220976 252.5 75.75 C 253.11956 75.199071 253.5 74.394767 253.5 73.5 C 253.5 71.840318 252.156 70.5 250.5 70.5 z "
- style="fill:url(#linearGradient24092);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.61155295;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient24092);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.61155295;marker:none;enable-background:accumulate"
id="path23982"
- d="m 250.5,70 c -1.92579,0 -3.5,1.570388 -3.5,3.5 0,1.036273 0.43284,1.981065 1.15625,2.625 0.12299,0.109481 0.35065,0.504334 0.5,0.875 0.0747,0.185333 0.1355,0.365966 0.21875,0.53125 0.0416,0.08264 0.0782,0.159602 0.15625,0.25 0.0781,0.0904 0.22443,0.218751 0.46875,0.21875 l 2,0 c 0.24442,0 0.3907,-0.128341 0.46875,-0.21875 0.078,-0.09041 0.11462,-0.167341 0.15625,-0.25 0.0832,-0.165318 0.14407,-0.345883 0.21875,-0.53125 0.14936,-0.370734 0.3774,-0.765984 0.5,-0.875 C 253.56794,75.481034 254,74.536495 254,73.5 254,71.570387 252.42579,70 250.5,70 z"
+ d="m 250.5,70 c -1.92579,0 -3.5,1.570388 -3.5,3.5 0,1.036273 0.44456,1.979112 1.16797,2.623047 0.12299,0.10948 0.32331,0.494568 0.47265,0.865234 0.0747,0.185333 0.14332,0.364013 0.22657,0.529297 0.0416,0.08264 0.084,0.163508 0.16211,0.253906 0.0781,0.0904 0.22638,0.228517 0.4707,0.228516 h 2 c 0.24442,0 0.39265,-0.138106 0.4707,-0.228516 0.0781,-0.09041 0.12244,-0.171247 0.16407,-0.253906 0.0832,-0.165318 0.14992,-0.34393 0.22461,-0.529297 0.14936,-0.370734 0.35006,-0.756218 0.47265,-0.865234 C 253.55622,75.479081 254,74.536495 254,73.5 254,71.570387 252.42579,70 250.5,70 Z"
transform="matrix(1.1428575,0,0,1.1249998,-252.2858,245.25001)" />
<path
transform="matrix(1.1428578,0,0,1.1562502,-252.28587,242.81248)"
- d="m 250.5,70 c -1.92579,0 -3.5,1.570388 -3.5,3.5 0,1.036273 0.43284,1.981065 1.15625,2.625 0.12299,0.109481 0.35065,0.504334 0.5,0.875 0.0747,0.185333 0.1355,0.365966 0.21875,0.53125 0.0416,0.08264 0.0782,0.159602 0.15625,0.25 0.0781,0.0904 0.22443,0.218751 0.46875,0.21875 l 2,0 c 0.24442,0 0.3907,-0.128341 0.46875,-0.21875 0.078,-0.09041 0.11462,-0.167341 0.15625,-0.25 0.0832,-0.165318 0.14407,-0.345883 0.21875,-0.53125 0.14936,-0.370734 0.3774,-0.765984 0.5,-0.875 C 253.56794,75.481034 254,74.536495 254,73.5 254,71.570387 252.42579,70 250.5,70 z"
+ d="m 250.5,70 c -1.92579,0 -3.5,1.570388 -3.5,3.5 0,1.036273 0.44456,1.979112 1.16797,2.623047 0.12299,0.10948 0.32331,0.494568 0.47265,0.865234 0.0747,0.185333 0.14332,0.364013 0.22657,0.529297 0.0416,0.08264 0.084,0.163508 0.16211,0.253906 0.0781,0.0904 0.22638,0.228517 0.4707,0.228516 h 2 c 0.24442,0 0.39265,-0.138106 0.4707,-0.228516 0.0781,-0.09041 0.12244,-0.171247 0.16407,-0.253906 0.0832,-0.165318 0.14992,-0.34393 0.22461,-0.529297 0.14936,-0.370734 0.35006,-0.756218 0.47265,-0.865234 C 253.55622,75.479081 254,74.536495 254,73.5 254,71.570387 252.42579,70 250.5,70 Z"
id="path23984"
- style="opacity:0.6;fill:url(#radialGradient24094);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.61155295;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:url(#radialGradient24094);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.61155295;marker:none;enable-background:accumulate"
inkscape:original="M 250.5 70.5 C 248.844 70.5 247.5 71.84032 247.5 73.5 C 247.5 74.394207 247.88111 75.199102 248.5 75.75 C 249.02979 76.22159 249.25 77.500001 249.5 77.5 C 249.75 77.5 251.25 77.500001 251.5 77.5 C 251.75 77.5 251.97036 76.220976 252.5 75.75 C 253.11956 75.199071 253.5 74.394767 253.5 73.5 C 253.5 71.840318 252.156 70.5 250.5 70.5 z "
inkscape:radius="0.5"
sodipodi:type="inkscape:offset" />
<path
id="path24054"
- style="fill:none;stroke:url(#linearGradient24096);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient24096);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
d="m 34.000001,324.48827 c 1.932,0 3.5,1.50111 3.5,3.35068 0,0.99715 -0.455735,1.89301 -1.178554,2.50697 -0.617914,0.52487 -1.154779,1.38605 -1.154779,2.77907 m -1.166667,-8.63672 c -1.932001,0 -3.500001,1.50111 -3.500001,3.35068 0,0.99715 0.455736,1.89301 1.178556,2.50697 0.617913,0.52487 1.154778,1.38605 1.154778,2.77907"
inkscape:connector-curvature="0" />
- <path
- sodipodi:type="arc"
- style="opacity:0.25;fill:url(#radialGradient24098);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:url(#radialGradient24098);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
id="path24056"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(0.9552133,0,0,0.9315985,-40.901258,-140.2522)" />
- <path
+ transform="matrix(0.9552133,0,0,0.9315985,-40.901258,-140.2522)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <circle
transform="matrix(0.99567,0,-0.00787885,1,-30.663533,191)"
- sodipodi:type="arc"
- style="opacity:0.9;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74699998;marker:none;display:inline"
+ style="display:inline;opacity:0.9;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74699998;marker:none"
id="path24060"
- sodipodi:cx="64"
- sodipodi:cy="135"
- sodipodi:rx="1"
- sodipodi:ry="1"
- d="m 65,135 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="64"
+ cy="135"
+ r="1" />
<path
d="m 34.000001,324.48827 c 1.932,0 3.5,1.50111 3.5,3.35068 0,0.99715 -0.455735,1.89301 -1.178554,2.50697 -0.617914,0.52487 -1.154779,1.38605 -1.154779,2.77907 m -1.166667,-8.63672 c -1.932001,0 -3.500001,1.50111 -3.500001,3.35068 0,0.99715 0.455736,1.89301 1.178556,2.50697 0.617913,0.52487 1.154778,1.38605 1.154778,2.77907"
- style="fill:none;stroke:url(#radialGradient24100);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;display:inline"
+ style="display:inline;fill:none;stroke:url(#radialGradient24100);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
id="path24064"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.85;fill:#504416;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.85;fill:#504416;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate"
id="rect24066"
width="5"
height="0.75"
@@ -55341,18 +55008,18 @@
y="333" />
<path
style="fill:#6c6753;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 32.5,337.01145 3,-0.0115 0,1 -3,0.0114 0,-0.99999 0,9e-5 0,0 0,0 z"
+ d="m 32.5,337.01145 3,-0.0115 v 1 l -3,0.0114 v -0.99999 z"
id="path24068"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.2;fill:url(#linearGradient24102);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 33,330 0,2.75 2,0 0,-2.75 -2,0 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:url(#linearGradient24102);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate"
+ d="m 33,330 v 2.75 h 2 V 330 Z"
id="path24070"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.6;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000005;marker:none;enable-background:accumulate"
id="rect24072"
width="1"
height="1"
@@ -55361,17 +55028,17 @@
<path
sodipodi:nodetypes="csscssc"
id="path24078"
- style="fill:none;stroke:url(#radialGradient24104);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;display:inline"
+ style="display:inline;fill:none;stroke:url(#radialGradient24104);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
d="m 32.875,333.12498 c 0,-1.39113 -0.517691,-2.25114 -1.113536,-2.77529 C 31.064459,329.73656 30.5,328.93567 30.5,327.93988 c 0,-1.84706 1.637,-3.43989 3.5,-3.43989 1.863,0 3.5,1.59283 3.5,3.43989 0,0.99579 -0.564459,1.79668 -1.261464,2.40981 -0.595845,0.52415 -1.113536,1.38416 -1.113536,2.77529"
inkscape:connector-curvature="0" />
<path
style="opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 33,338.00001 0.5,0 0,1 L 33,339 l 0,-0.99999 z"
+ d="m 33,338.00001 h 0.5 v 1 L 33,339 Z"
id="path24082"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.8;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.8;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000005;marker:none;enable-background:accumulate"
id="rect24086"
width="2"
height="1"
@@ -55383,13 +55050,13 @@
height="1"
width="1"
id="rect24088"
- style="opacity:0.6;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000005;marker:none;enable-background:accumulate" />
</g>
</g>
<g
id="ICON_NEWFOLDER">
<rect
- style="opacity:0.01000001;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect51964"
width="16"
height="16"
@@ -55402,7 +55069,7 @@
id="g24996"
style="opacity:0.75">
<rect
- style="opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect24939"
width="16"
height="16"
@@ -55415,8 +55082,8 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc"
id="path24943"
- d="m 89.5,410.5 0,9.49245 1.5,1.5 8.5,0 0,-9.99245 -7,0 0,-1 -3,0 z"
- style="fill:url(#linearGradient25073);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m 89.5,410.5 v 9.49245 l 1.5,1.5 h 8.5 V 411.5 h -7 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient25073);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate" />
<g
style="display:inline"
id="g24945"
@@ -55425,30 +55092,30 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc"
id="path24947"
- d="m 92.5,414.4849 10,0.0151 0,5.50755 -1.5,1.49245 -10,0 0,-2 1.5,0 0,-5.0151 z"
- style="fill:#d1c595;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient25075);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m 92.5,414.4849 10,0.0151 v 5.50755 L 101,421.5 H 91 v -2 h 1.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#d1c595;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient25075);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
id="path24949"
- d="m 91.5,420.49245 -1.01563,-0.98437 0,-8.02344 1.01563,0.0154 0,1 7,0"
- style="opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="m 91.5,420.49245 -1.01563,-0.98437 v -8.02344 l 1.01563,0.0154 v 1 h 7"
+ style="display:inline;opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
sodipodi:nodetypes="cccccc" />
<path
inkscape:connector-curvature="0"
id="path24951"
- d="m 93,420.5 7.5,0"
- style="opacity:0.18999999;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="m 93,420.5 h 7.5"
+ style="display:inline;opacity:0.18999999;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
sodipodi:nodetypes="cc" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc"
- style="opacity:0.8;fill:none;stroke:url(#linearGradient25077);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
- d="m 101.5,415.50755 -8,-0.008 0,4 -1.5,1.5 -1.5,-1.5"
+ style="display:inline;opacity:0.8;fill:none;stroke:url(#linearGradient25077);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 101.5,415.50755 -8,-0.008 v 4 l -1.5,1.5 -1.5,-1.5"
id="path24953" />
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:#2a2512;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 89.5,410.5 0,9.49245 1.5,1.5 10,0.0151 1.5,-1.49245 0,-5.50755 -3,-0.008 0,-2.9849 -7,-0.0151 0,-1 -3,0 0,4.5e-4 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#2a2512;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 89.5,410.5 v 9.49245 l 1.5,1.5 10,0.0151 1.5,-1.49245 v -5.50755 l -3,-0.008 v -2.9849 l -7,-0.0151 v -1 h -3 z"
id="path24957"
sodipodi:nodetypes="ccccccccccc" />
</g>
@@ -55459,7 +55126,7 @@
style="display:inline">
<rect
ry="1.2018067"
- style="opacity:0.4;fill:none;stroke:#fac900;stroke-width:4.00264168;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.39511889;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.4;fill:none;stroke:#fac900;stroke-width:4.00264168;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.39511871;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect25009"
width="3.0039635"
height="3"
@@ -55474,7 +55141,7 @@
height="3"
width="3.0039637"
id="rect25011"
- style="opacity:0.8;fill:none;stroke:#e6b800;stroke-width:2.00132084;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.39511889;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.8;fill:none;stroke:#e6b800;stroke-width:2.00132084;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.39511871;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
inkscape:export-ydpi="90"
@@ -55509,20 +55176,20 @@
inkscape:export-ydpi="90">
<g
id="g41200"
- style="opacity:0.65;display:inline;enable-background:new">
+ style="display:inline;opacity:0.65;enable-background:new">
<rect
y="71"
x="341"
height="16"
width="16"
id="rect41164"
- style="opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<g
id="g41166"
transform="translate(252,-337)">
<path
- style="fill:url(#linearGradient42055);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 89.5,409.49245 0,10.5 1.5,1.5 10.5,0.008 0,-11 -8,-0.008 0,-1 -4,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient42055);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate"
+ d="m 89.5,409.49245 v 10.5 l 1.5,1.5 10.5,0.008 v -11 l -8,-0.008 v -1 z"
id="path41168"
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0" />
@@ -55531,40 +55198,40 @@
id="g41170"
style="display:inline" />
<path
- style="fill:#d1c595;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient42057);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 92.5,414.49245 11,0.0151 0,5.5 -1.5,1.49245 -11,0 0,-2 1.5,0 0,-5.00755 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#d1c595;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient42057);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 92.5,414.49245 11,0.0151 v 5.5 L 102,421.5 H 91 v -2 h 1.5 z"
id="path41172"
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccc"
- style="opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
- d="m 91.5,420.49245 -1.01563,-0.98437 0,-9.02344 2,0 0,1 L 100.5,411.5"
+ style="display:inline;opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 91.5,420.49245 -1.01563,-0.98437 v -9.02344 h 2 v 1 L 100.5,411.5"
id="path41174"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
- style="opacity:0.18999999;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
- d="m 93,420.5 9.5,0"
+ style="display:inline;opacity:0.18999999;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 93,420.5 h 9.5"
id="path41176"
inkscape:connector-curvature="0" />
<path
id="path41178"
- d="m 102.5,415.5 -9,-0.008 0,4.00755 -1.5,1.5 -1.5,-1.5"
- style="opacity:0.8;fill:none;stroke:url(#linearGradient42059);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="m 102.5,415.5 -9,-0.008 v 4.00755 l -1.5,1.5 -1.5,-1.5"
+ style="display:inline;opacity:0.8;fill:none;stroke:url(#linearGradient42059);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-rule:evenodd;stroke:none;display:inline"
- d="m 93,410 0,2 -3,0 0,-2 3,0 z"
+ style="display:inline;fill:#ffffff;fill-rule:evenodd;stroke:none"
+ d="m 93,410 v 2 h -3 v -2 z"
id="path41180"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccccc"
id="path41182"
- d="m 89.5,409.50755 0,10.4849 1.5,1.5 11,0.008 1.5,-1.49245 0,-5.5 -2,-0.008 0,-3.9849 -8,-0.008 0,-1 -4,0 0,4.5e-4 z"
- style="fill:none;stroke:#2a2512;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 89.5,409.50755 v 10.4849 l 1.5,1.5 11,0.008 1.5,-1.49245 v -5.5 l -2,-0.008 v -3.9849 l -8,-0.008 v -1 h -4 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#2a2512;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -55575,8 +55242,8 @@
<path
sodipodi:nodetypes="ccccccccccccccccccccccc"
id="path41134"
- d="m 428.75,158.5 3,-0.008 0,6.50755 0,2.50755 0.75,0 0,-1 1,0 0,-1 2,0 0,1 1,0 0,1 0.67818,0 0,-9.50755 -0.67818,0 0,-0.5 -0.25,0 0,-0.75 -1.75,-0.008 -4.75,0.008 0,1 -1,0 0,0.75 0,4.5e-4 z"
- style="fill:none;stroke:#401406;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 428.75,158.5 3,-0.008 v 6.50755 2.50755 h 0.75 v -1 h 1 v -1 h 2 v 1 h 1 v 1 h 0.67818 v -9.50755 H 436.5 v -0.5 h -0.25 v -0.75 l -1.75,-0.008 -4.75,0.008 v 1 h -1 v 0.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#401406;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<g
id="g41137"
@@ -55585,7 +55252,7 @@
transform="translate(0,-1)"
id="g41139">
<rect
- style="fill:#822b0f;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#822b0f;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect24197"
width="3"
height="0.99999988"
@@ -55596,38 +55263,38 @@
<path
sodipodi:nodetypes="ccccc"
id="path41143"
- d="m 446,120 0,1 6,0 0,-1 -6,0 z"
- style="fill:#ed7e5c;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 446,120 v 1 h 6 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ed7e5c;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccccccc"
- style="fill:#e7541a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 448,121 0,9.00755 1,0.008 0,-1 1,0 0,-1 1,-0.008 0,1.00755 1,0 0,1 1,-0.008 0,-9.00755 -5,0 0,4.5e-4 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#e7541a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
+ d="m 448,121 v 9.00755 l 1,0.008 v -1 h 1 v -1 l 1,-0.008 v 1.00755 h 1 v 1 l 1,-0.008 v -9.00755 h -5 z"
id="path41145"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.6;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 448,121 0,9.00755 1,0 0,-9.00755 -1,0 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
+ d="m 448,121 v 9.00755 h 1 V 121 Z"
id="path41147"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path41149"
- d="m 452,121 0,9.00755 1,0 0,-9.00755 -1,0 0,0 0,0 0,0 z"
- style="opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 452,121 v 9.00755 h 1 V 121 Z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 446,120.00755 0,1 2,-0.008 0,-1 -2,0.008 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
+ d="m 446,120.00755 v 1 l 2,-0.008 v -1 z"
id="path41151"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path41153"
- d="m 445,121.00755 0,1 1,0 0,-1 -1,0 z"
- style="opacity:0.45;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 445,121.00755 v 1 h 1 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.45;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<g
id="g24216"
@@ -55635,20 +55302,20 @@
<path
sodipodi:nodetypes="ccccc"
id="path41156"
- d="m 451,128.00755 0,1 1,0 0,-1 -1,0 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 451,128.00755 v 1 h 1 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 450,127.00755 0,1 1,0 0,-1 -1,0 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
+ d="m 450,127.00755 v 1 h 1 v -1 z"
id="path41158"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path41160"
- d="m 449,128.00755 0,1 1,0 0,-1 -1,0 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 449,128.00755 v 1 h 1 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -55661,28 +55328,28 @@
transform="translate(0,128)">
<rect
transform="matrix(0,1,1,0,0,0)"
- style="opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;enable-background:accumulate"
id="rect23556"
width="16"
height="16"
x="281"
y="68" />
<g
- transform="matrix(0,-1,1,0,-254.00001,365.00041)"
+ transform="rotate(-90,55.5002,309.50021)"
id="g24740">
<g
style="opacity:0.7"
id="g24922">
<path
- d="m 69.5,325.5 0,10 12,0 0,-10 -12,0 z m 6,0 0,10 m 6,-5 -12,0"
- style="fill:none;stroke:#1a1a1a;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 69.5,325.5 v 10 h 12 v -10 z m 6,0 v 10 m 6,-5 h -12"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#1a1a1a;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path24671"
sodipodi:nodetypes="ccccccccc"
inkscape:connector-curvature="0" />
<path
id="path24673"
- style="fill:none;stroke:#cccccc;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 69.5,325.5 0,10 12,0 0,-10 -12,0 z m 6,0 0,10 m 6,-5 -12,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#cccccc;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 69.5,325.5 v 10 h 12 v -10 z m 6,0 v 10 m 6,-5 h -12"
sodipodi:nodetypes="ccccccccc"
inkscape:connector-curvature="0" />
</g>
@@ -55694,17 +55361,17 @@
height="3"
width="2.9998772"
id="rect24678"
- style="fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path24681"
d="m 83.00041,324.00001 c -0.6694,0 -1.3388,1e-5 -2.0082,1e-5 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-1e-5 2.0082,-1e-5 0,-0.66939 0,-1.33878 0,-2.00817 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
inkscape:connector-curvature="0" />
<rect
- style="fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect24684"
width="2.9998772"
height="3"
@@ -55713,7 +55380,7 @@
ry="1.4999386"
rx="1.4999386" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
d="m 83,335 c -0.6694,0 -1.3388,10e-6 -2.0082,10e-6 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-10e-6 2.0082,-10e-6 0,-0.66939 0,-1.33878 0,-2.00817 z"
id="path24686"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -55732,7 +55399,7 @@
height="16"
width="16"
id="rect23554"
- style="opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;enable-background:accumulate" />
<g
transform="matrix(0,1,1,0,-255,214)"
id="g24695">
@@ -55751,22 +55418,22 @@
transform="translate(187.99958,-21.0368)">
<path
sodipodi:nodetypes="ccccccccc"
- d="m 258.50045,291.53677 0,10 12,0 0,-10 -12,0 z m 6,0 0,10 m 6,-5 -12,0"
- style="opacity:0.9;fill:none;stroke:#2b1600;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 258.50045,291.53677 v 10 h 12 v -10 z m 6,0 v 10 m 6,-5 h -12"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.9;fill:none;stroke:#2b1600;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path24703"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccc"
id="path24705"
- style="fill:none;stroke:#ed993f;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 258.50045,291.53677 0,10 12,0 0,-10 -12,0 z m 6,0 0,10 m 6,-5 -12,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ed993f;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 258.50045,291.53677 v 10 h 12 v -10 z m 6,0 v 10 m 6,-5 h -12"
inkscape:connector-curvature="0" />
<g
id="g24709" />
<path
sodipodi:nodetypes="cccccccccc"
- d="m 258.50045,291.53677 0,3.28125 0,6.71875 12,0 0,-10 -12,0 z m 6,0 0,10 m 6,-5 -12,0"
- style="fill:none;stroke:url(#linearGradient62436);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 258.50045,291.53677 v 3.28125 6.71875 h 12 v -10 z m 6,0 v 10 m 6,-5 h -12"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient62436);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path24711"
inkscape:connector-curvature="0" />
</g>
@@ -55774,7 +55441,7 @@
<g
id="g24713">
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect24715"
width="1"
height="1"
@@ -55790,9 +55457,9 @@
height="1"
width="1"
id="rect24717"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect24719"
width="1"
height="1"
@@ -55812,9 +55479,9 @@
height="1"
width="1"
id="rect24723"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect24725"
width="1"
height="1"
@@ -55830,13 +55497,13 @@
height="1"
width="1"
id="rect24727"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
</g>
<g
id="g24729"
transform="translate(0,9.96875)">
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect24731"
width="1"
height="1"
@@ -55852,9 +55519,9 @@
height="1"
width="1"
id="rect24733"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect24736"
width="1"
height="1"
@@ -55864,8 +55531,8 @@
ry="0" />
<path
id="rect24766"
- d="m 70,304 0,1 1,0 0,-1 -1,0 z m 0,1 -1,0 0,1 1,0 0,-1 z m 6,-1 0,1 1,0 0,-1 -1,0 z m 0,1 -1,0 0,1 1,0 0,-1 z m 5,0 0,1 1,0 0,-1 -1,0 z m -11,4 0,1 1,0 0,-1 -1,0 z m 0,1 -1,0 0,1 1,0 0,-1 z m 6,-1 0,1 1,0 0,-1 -1,0 z m 0,1 -1,0 0,1 1,0 0,-1 z m 5,0 0,1 1,0 0,-1 -1,0 z m -11,4 0,1 1,0 0,-1 -1,0 z m 6,0 0,1 1,0 0,-1 -1,0 z"
- style="opacity:0.27999998;fill:#2b1600;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 70,304 v 1 h 1 v -1 z m 0,1 h -1 v 1 h 1 z m 6,-1 v 1 h 1 v -1 z m 0,1 h -1 v 1 h 1 z m 5,0 v 1 h 1 v -1 z m -11,4 v 1 h 1 v -1 z m 0,1 h -1 v 1 h 1 z m 6,-1 v 1 h 1 v -1 z m 0,1 h -1 v 1 h 1 z m 5,0 v 1 h 1 v -1 z m -11,4 v 1 h 1 v -1 z m 6,0 v 1 h 1 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.27999998;fill:#2b1600;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
transform="translate(21,11.03125)"
inkscape:connector-curvature="0" />
</g>
@@ -55881,7 +55548,7 @@
height="16"
width="16"
id="rect23562"
- style="opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;enable-background:accumulate" />
<g
id="g24926"
transform="matrix(0,1,1,0,18,172)">
@@ -55900,13 +55567,13 @@
id="g24932">
<path
id="path24935"
- style="opacity:0.9;fill:none;stroke:#0b1728;stroke-width:2.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 258.50045,291.53677 0,10 12,0 0,-10 -12,0 z m 6,0 0,10 m 6,-5 -12,0"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.9;fill:none;stroke:#0b1728;stroke-width:2.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 258.50045,291.53677 v 10 h 12 v -10 z m 6,0 v 10 m 6,-5 h -12"
sodipodi:nodetypes="ccccccccc"
inkscape:connector-curvature="0" />
<path
- d="m 258.50045,291.53677 0,10 12,0 0,-10 -12,0 z m 6,0 0,10 m 6,-5 -12,0"
- style="fill:none;stroke:url(#linearGradient62558);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 258.50045,291.53677 v 10 h 12 v -10 z m 6,0 v 10 m 6,-5 h -12"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient62558);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path24937"
sodipodi:nodetypes="ccccccccc"
inkscape:connector-curvature="0" />
@@ -55919,8 +55586,8 @@
<path
id="rect24945"
transform="translate(-252,42)"
- d="m 342,283 0,1 1,0 0,-1 -1,0 z m 6,0 0,1 1,0 0,-1 -1,0 z m 6,0 0,1 1,0 0,-1 -1,0 z m -12,5 0,1 1,0 0,-1 -1,0 z m 6,0 0,1 1,0 0,-1 -1,0 z m 6,0 0,1 1,0 0,-1 -1,0 z m -12,5 0,1 1,0 0,-1 -1,0 z m 6,0 0,1 1,0 0,-1 -1,0 z m 6,0 0,1 1,0 0,-1 -1,0 z"
- style="opacity:0.7;fill:url(#linearGradient62560);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 342,283 v 1 h 1 v -1 z m 6,0 v 1 h 1 v -1 z m 6,0 v 1 h 1 v -1 z m -12,5 v 1 h 1 v -1 z m 6,0 v 1 h 1 v -1 z m 6,0 v 1 h 1 v -1 z m -12,5 v 1 h 1 v -1 z m 6,0 v 1 h 1 v -1 z m 6,0 v 1 h 1 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:url(#linearGradient62560);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<g
@@ -55930,8 +55597,8 @@
transform="translate(0,9.96875)"
id="g24959">
<path
- style="opacity:0.27999998;fill:#162d50;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 70,304 0,1 1,0 0,-1 -1,0 z m 0,1 -1,0 0,1 1,0 0,-1 z m 6,-1 0,1 1,0 0,-1 -1,0 z m 0,1 -1,0 0,1 1,0 0,-1 z m 5,0 0,1 1,0 0,-1 -1,0 z m -11,4 0,1 1,0 0,-1 -1,0 z m 0,1 -1,0 0,1 1,0 0,-1 z m 6,-1 0,1 1,0 0,-1 -1,0 z m 0,1 -1,0 0,1 1,0 0,-1 z m 5,0 0,1 1,0 0,-1 -1,0 z m -11,4 0,1 1,0 0,-1 -1,0 z m 6,0 0,1 1,0 0,-1 -1,0 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.27999998;fill:#162d50;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 70,304 v 1 h 1 v -1 z m 0,1 h -1 v 1 h 1 z m 6,-1 v 1 h 1 v -1 z m 0,1 h -1 v 1 h 1 z m 5,0 v 1 h 1 v -1 z m -11,4 v 1 h 1 v -1 z m 0,1 h -1 v 1 h 1 z m 6,-1 v 1 h 1 v -1 z m 0,1 h -1 v 1 h 1 z m 5,0 v 1 h 1 v -1 z m -11,4 v 1 h 1 v -1 z m 6,0 v 1 h 1 v -1 z"
id="path24967"
transform="translate(21,11.03125)"
inkscape:connector-curvature="0" />
@@ -55948,60 +55615,54 @@
height="16"
width="16"
id="rect24543"
- style="opacity:0;fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<path
- style="fill:#f0a453;fill-opacity:1;fill-rule:nonzero;stroke:#2b1600;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#f0a453;fill-opacity:1;fill-rule:nonzero;stroke:#2b1600;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 304.5,308.5 c 1.52069,0 3,-1.25 3,-2.5 0,-2 1.5,-3.5 3.5,-3.5 2,0 3.5,1.568 3.5,3.5 0,1.84581 -1.5,3.5 -3.5,3.5 -1.25,0 -2.5,1.5 -2.5,3 0,2.25 -1.75,4 -4,4 -2.25,0 -4,-1.75 -4,-4 0,-2.25 1.75,-4 4,-4 z"
id="path24546"
sodipodi:nodetypes="cssssszzs"
inkscape:connector-curvature="0" />
<path
- d="m 311,303 c -1.75507,0 -3,1.24493 -3,3 0,0.81824 -0.48216,1.55558 -1.125,2.09375 C 306.23216,308.63192 305.39457,309 304.5,309 c -1.996,0 -3.5,1.504 -3.5,3.5 0,1.996 1.504,3.5 3.5,3.5 1.996,0 3.5,-1.504 3.5,-3.5 0,-0.88607 0.36895,-1.73024 0.90625,-2.375 0.5373,-0.64476 1.27281,-1.125 2.09375,-1.125 1.72989,0 3,-1.41958 3,-3 0,-1.67845 -1.25603,-3 -3,-3 z"
+ d="m 311,302.99023 c -1.75507,0 -3.00977,1.2547 -3.00977,3.00977 0,0.81824 -0.46262,1.55558 -1.10546,2.09375 -0.64284,0.53817 -1.4902,0.89648 -2.38477,0.89648 -1.996,0 -3.50977,1.51377 -3.50977,3.50977 0,1.996 1.51377,3.50977 3.50977,3.50977 1.996,0 3.50977,-1.51377 3.50977,-3.50977 0,-0.88607 0.35723,-1.7322 0.89453,-2.37695 0.53729,-0.64476 1.27476,-1.11328 2.0957,-1.11328 1.72989,0 3.00977,-1.42935 3.00977,-3.00977 0,-1.67845 -1.2658,-3.00977 -3.00977,-3.00977 z"
id="path24792"
- style="opacity:0.8;fill:url(#linearGradient24797);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.86598092;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.8;fill:url(#linearGradient24797);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.86598092;marker:none;enable-background:accumulate"
inkscape:original="M 311 302.5 C 309 302.5 307.5 304 307.5 306 C 307.5 307.25 306.02069 308.5 304.5 308.5 C 302.25 308.5 300.5 310.25 300.5 312.5 C 300.5 314.75 302.25 316.5 304.5 316.5 C 306.75 316.5 308.5 314.75 308.5 312.5 C 308.5 311 309.75 309.5 311 309.5 C 313 309.5 314.5 307.84581 314.5 306 C 314.5 304.068 313 302.5 311 302.5 z "
inkscape:radius="-0.48985747"
sodipodi:type="inkscape:offset" />
<path
- d="m 311,303.46875 c -1.5178,0 -2.53125,1.01345 -2.53125,2.53125 0,1.00544 -0.55807,1.86332 -1.28125,2.46875 -0.72318,0.60543 -1.66291,1 -2.6875,1 -1.74994,0 -3.03125,1.28131 -3.03125,3.03125 0,1.74994 1.28131,3.03125 3.03125,3.03125 1.74994,0 3.03125,-1.28131 3.03125,-3.03125 0,-1.01789 0.3963,-1.96306 1,-2.6875 0.6037,-0.72444 1.45799,-1.28125 2.46875,-1.28125 1.46823,0 2.53125,-1.20792 2.53125,-2.53125 0,-1.43282 -1.03531,-2.53125 -2.53125,-2.53125 z"
+ d="m 311,303.46484 c -1.5178,0 -2.53516,1.01736 -2.53516,2.53516 0,1.00544 -0.55221,1.85355 -1.27539,2.45898 -0.72317,0.60543 -1.66486,1.00586 -2.68945,1.00586 -1.74994,0 -3.03516,1.28522 -3.03516,3.03516 0,1.74994 1.28522,3.03516 3.03516,3.03516 1.74994,0 3.03516,-1.28522 3.03516,-3.03516 0,-1.01789 0.40216,-1.95525 1.00586,-2.67969 0.6037,-0.72444 1.44822,-1.28515 2.45898,-1.28515 1.46823,0 2.53516,-1.21183 2.53516,-2.53516 0,-1.43282 -1.03922,-2.53516 -2.53516,-2.53516 z"
id="path24550"
- style="fill:none;stroke:url(#radialGradient24599);stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#radialGradient24599);stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:original="M 311 302.5 C 309 302.5 307.5 304 307.5 306 C 307.5 307.25 306.02069 308.5 304.5 308.5 C 302.25 308.5 300.5 310.25 300.5 312.5 C 300.5 314.75 302.25 316.5 304.5 316.5 C 306.75 316.5 308.5 314.75 308.5 312.5 C 308.5 311 309.75 309.5 311 309.5 C 313 309.5 314.5 307.84581 314.5 306 C 314.5 304.068 313 302.5 311 302.5 z "
inkscape:radius="-0.96440691"
sodipodi:type="inkscape:offset" />
- <path
+ <circle
transform="translate(96.999991,232.95)"
- sodipodi:type="arc"
- style="opacity:0.75;fill:url(#radialGradient43962);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.70000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.75;fill:url(#radialGradient43962);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.70000005;marker:none;enable-background:accumulate"
id="path43958"
- sodipodi:cx="207.5"
- sodipodi:cy="79.5"
- sodipodi:rx="3.5"
- sodipodi:ry="3.5"
- d="M 211,79.5 A 3.5,3.5 0 0 1 207.5,83 3.5,3.5 0 0 1 204,79.5 3.5,3.5 0 0 1 207.5,76 3.5,3.5 0 0 1 211,79.5 Z" />
- <path
- d="M 211,79.5 A 3.5,3.5 0 0 1 207.5,83 3.5,3.5 0 0 1 204,79.5 3.5,3.5 0 0 1 207.5,76 3.5,3.5 0 0 1 211,79.5 Z"
- sodipodi:ry="3.5"
- sodipodi:rx="3.5"
- sodipodi:cy="79.5"
- sodipodi:cx="207.5"
+ cx="207.5"
+ cy="79.5"
+ r="3.5" />
+ <circle
id="path43960"
- style="opacity:0.75;fill:url(#radialGradient43964);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.14754021;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc"
- transform="matrix(0.8714292,0,0,0.8714292,130.17844,236.77138)" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.75;fill:url(#radialGradient43964);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.14754021;marker:none;enable-background:accumulate"
+ transform="matrix(0.8714292,0,0,0.8714292,130.17844,236.77138)"
+ cx="207.5"
+ cy="79.5"
+ r="3.5" />
<path
sodipodi:type="inkscape:offset"
inkscape:radius="-0.96440691"
inkscape:original="M 311 302.5 C 309 302.5 307.5 304 307.5 306 C 307.5 307.25 306.02069 308.5 304.5 308.5 C 302.25 308.5 300.5 310.25 300.5 312.5 C 300.5 314.75 302.25 316.5 304.5 316.5 C 306.75 316.5 308.5 314.75 308.5 312.5 C 308.5 311 309.75 309.5 311 309.5 C 313 309.5 314.5 307.84581 314.5 306 C 314.5 304.068 313 302.5 311 302.5 z "
- style="fill:none;stroke:url(#radialGradient24632);stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#radialGradient24632);stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path24630"
- d="m 311,303.46875 c -1.5178,0 -2.53125,1.01345 -2.53125,2.53125 0,1.00544 -0.55807,1.86332 -1.28125,2.46875 -0.72318,0.60543 -1.66291,1 -2.6875,1 -1.74994,0 -3.03125,1.28131 -3.03125,3.03125 0,1.74994 1.28131,3.03125 3.03125,3.03125 1.74994,0 3.03125,-1.28131 3.03125,-3.03125 0,-1.01789 0.3963,-1.96306 1,-2.6875 0.6037,-0.72444 1.45799,-1.28125 2.46875,-1.28125 1.46823,0 2.53125,-1.20792 2.53125,-2.53125 0,-1.43282 -1.03531,-2.53125 -2.53125,-2.53125 z"
+ d="m 311,303.46484 c -1.5178,0 -2.53516,1.01736 -2.53516,2.53516 0,1.00544 -0.55221,1.85355 -1.27539,2.45898 -0.72317,0.60543 -1.66486,1.00586 -2.68945,1.00586 -1.74994,0 -3.03516,1.28522 -3.03516,3.03516 0,1.74994 1.28522,3.03516 3.03516,3.03516 1.74994,0 3.03516,-1.28522 3.03516,-3.03516 0,-1.01789 0.40216,-1.95525 1.00586,-2.67969 0.6037,-0.72444 1.44822,-1.28515 2.45898,-1.28515 1.46823,0 2.53516,-1.21183 2.53516,-2.53516 0,-1.43282 -1.03922,-2.53516 -2.53516,-2.53516 z"
transform="matrix(0,-1,-1,0,617,617)" />
<path
transform="matrix(0,-1,-1,0,617,617)"
- d="m 311,303.46875 c -1.5178,0 -2.53125,1.01345 -2.53125,2.53125 0,1.00544 -0.55807,1.86332 -1.28125,2.46875 -0.72318,0.60543 -1.66291,1 -2.6875,1 -1.74994,0 -3.03125,1.28131 -3.03125,3.03125 0,1.74994 1.28131,3.03125 3.03125,3.03125 1.74994,0 3.03125,-1.28131 3.03125,-3.03125 0,-1.01789 0.3963,-1.96306 1,-2.6875 0.6037,-0.72444 1.45799,-1.28125 2.46875,-1.28125 1.46823,0 2.53125,-1.20792 2.53125,-2.53125 0,-1.43282 -1.03531,-2.53125 -2.53125,-2.53125 z"
+ d="m 311,303.46484 c -1.5178,0 -2.53516,1.01736 -2.53516,2.53516 0,1.00544 -0.55221,1.85355 -1.27539,2.45898 -0.72317,0.60543 -1.66486,1.00586 -2.68945,1.00586 -1.74994,0 -3.03516,1.28522 -3.03516,3.03516 0,1.74994 1.28522,3.03516 3.03516,3.03516 1.74994,0 3.03516,-1.28522 3.03516,-3.03516 0,-1.01789 0.40216,-1.95525 1.00586,-2.67969 0.6037,-0.72444 1.44822,-1.28515 2.45898,-1.28515 1.46823,0 2.53516,-1.21183 2.53516,-2.53516 0,-1.43282 -1.03922,-2.53516 -2.53516,-2.53516 z"
id="path24809"
- style="fill:none;stroke:url(#linearGradient24820);stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient24820);stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:original="M 311 302.5 C 309 302.5 307.5 304 307.5 306 C 307.5 307.25 306.02069 308.5 304.5 308.5 C 302.25 308.5 300.5 310.25 300.5 312.5 C 300.5 314.75 302.25 316.5 304.5 316.5 C 306.75 316.5 308.5 314.75 308.5 312.5 C 308.5 311 309.75 309.5 311 309.5 C 313 309.5 314.5 307.84581 314.5 306 C 314.5 304.068 313 302.5 311 302.5 z "
inkscape:radius="-0.96440691"
sodipodi:type="inkscape:offset" />
@@ -56020,27 +55681,27 @@
height="16"
width="16"
id="rect39828"
- style="opacity:0;fill:#ffffff;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ffffff;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g23145">
<g
id="g23149">
<path
id="path39832"
- style="fill:none;stroke:#1a1a1a;stroke-width:3;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -4.5,289.5 1.5,0 c 3.5,0 1.9989834,11 6.5,11 2.6782554,0 2.25,-3 5.25,-3 l 0.25,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#1a1a1a;stroke-width:3;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M -4.5,289.5 H -3 c 3.5,0 1.9989834,11 6.5,11 2.6782554,0 2.25,-3 5.25,-3 H 9"
sodipodi:nodetypes="csccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccscc"
- d="m 9,297.5 -0.25,0 c -3,0 -2.5,3 -5.25,3 -4.5010166,0 -3,-11 -6.5,-11 l -2,0"
- style="fill:none;stroke:#bde7a2;stroke-width:1.60000002;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 9,297.5 H 8.75 c -3,0 -2.5,3 -5.25,3 -4.5010166,0 -3,-11 -6.5,-11 h -2"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#bde7a2;stroke-width:1.60000002;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path39834"
inkscape:connector-curvature="0" />
</g>
<path
id="path39836"
- style="opacity:0.35;fill:none;stroke:url(#radialGradient23167);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.35;fill:none;stroke:url(#radialGradient23167);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 3.5,300.5 c -4.5,0 -3,-11 -6.5,-11"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
@@ -56052,14 +55713,14 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path39839"
- d="m -4.5,294.5 6,0 c 4,0 2,-7 6,-7 l 1,0"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -4.5,294.5 h 6 c 4,0 2,-7 6,-7 h 1"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cssc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cssc"
- style="fill:none;stroke:#ffffff;stroke-width:1.60000002;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -5,294.5 6.5,0 c 4,0 2,-7 6,-7 l 1.5,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1.60000002;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -5,294.5 h 6.5 c 4,0 2,-7 6,-7 H 9"
id="path23165"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -56075,7 +55736,7 @@
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect24131"
width="16"
height="16"
@@ -56090,8 +55751,8 @@
transform="translate(-39.983882,19.00809)">
<path
sodipodi:nodetypes="ccccc"
- style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- d="m 244.51612,238.49191 -0.0161,3 7.98388,0 0.0161,-3 -7.98388,0 z"
+ style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 244.51612,238.49191 -0.0161,3 h 7.98388 l 0.0161,-3 z"
id="path39845"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -56102,8 +55763,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path39847"
- d="m 247.51612,241.49191 -0.0161,3 11,0 0.0161,-3 -11,0 z"
- style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 247.51612,241.49191 -0.0161,3 h 11 l 0.0161,-3 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
@@ -56111,13 +55772,13 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path39849"
- d="m 243.5,247.49191 -0.0161,3 12,0 0.0161,-3 -12,0 z"
- style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ d="m 243.5,247.49191 -0.0161,3 h 12 l 0.0161,-3 z"
+ style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
- style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- d="m 250.48388,250.49191 -0.0161,3 7.01612,0 0.0161,-3 -7.01612,0 z"
+ style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 250.48388,250.49191 -0.0161,3 h 7.01612 l 0.0161,-3 z"
id="path39851"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -56126,26 +55787,26 @@
inkscape:connector-curvature="0" />
</g>
<path
- style="fill:none;stroke:url(#linearGradient24202);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
- d="m 205.51612,259.5 c 0,-0.25 0,-1 0,-1 l 6,0"
+ style="display:inline;fill:none;stroke:url(#linearGradient24202);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m 205.51612,259.5 c 0,-0.25 0,-1 0,-1 h 6"
id="path39853"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path24145"
- d="m 208.51612,262.5 c 0,-0.25 0,-1 0,-1 l 9,0"
- style="fill:none;stroke:url(#linearGradient24204);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ d="m 208.51612,262.5 c 0,-0.25 0,-1 0,-1 h 9"
+ style="display:inline;fill:none;stroke:url(#linearGradient24204);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient24206);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
- d="m 204.5,268.5 c 0,-0.25 0,-1 0,-1 l 10,0"
+ style="display:inline;fill:none;stroke:url(#linearGradient24206);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m 204.5,268.5 c 0,-0.25 0,-1 0,-1 h 10"
id="path24147"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient24208);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
- d="m 211.5,271.5 c 0,-0.25 0,-1 0,-1 l 5,0"
+ style="display:inline;fill:none;stroke:url(#linearGradient24208);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m 211.5,271.5 c 0,-0.25 0,-1 0,-1 h 5"
id="path39857"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
@@ -56163,16 +55824,16 @@
<path
sodipodi:nodetypes="ccccc"
id="path40319"
- d="m -114.25921,159.20547 0,-6.88483 5.85921,2.61269 -0.01,7.96045 -5.84921,-3.68831 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.96069634;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m -114.25921,159.20547 v -6.88483 l 5.85921,2.61269 -0.01,7.96045 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.96069634;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.96069634;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m -102.53333,159.20547 0,-6.88483 -5.86667,2.61269 -0.0101,7.96045 5.87676,-3.68831 10e-6,0 0,0 0,0 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.96069634;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m -102.53333,159.20547 v -6.88483 l -5.86667,2.61269 -0.0101,7.96045 5.87676,-3.68831 z"
id="path40321"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -56180,8 +55841,8 @@
inkscape:connector-curvature="0" />
<path
id="path40323"
- d="m -102.53333,152.32064 -5.8704,-1.47533 -5.85548,1.47533 5.85921,2.85858 5.86667,-2.85858 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.96069634;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m -102.53333,152.32064 -5.8704,-1.47533 -5.85548,1.47533 5.85921,2.85858 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.96069634;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="ccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -56190,7 +55851,7 @@
<path
sodipodi:nodetypes="ccccc"
id="path40325"
- d="m -114.25921,159.20548 0,-6.88484 5.86294,-1.47532 c 0,2.52838 -0.004,11.53297 -0.004,12.08795 l -5.85864,-3.72779 -3e-4,0 z"
+ d="m -114.25921,159.20548 v -6.88484 l 5.86294,-1.47532 c 0,2.52838 -0.004,11.53297 -0.004,12.08795 l -5.85864,-3.72779 z"
style="fill:url(#linearGradient40722);fill-opacity:1;fill-rule:evenodd;stroke:none"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -56199,7 +55860,7 @@
<path
sodipodi:nodetypes="ccccc"
style="fill:#c9c9c9;fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m -102.53333,159.20548 0,-6.88484 -5.8704,-1.47533 0.003,12.08796 5.86724,-3.72779 1.6e-4,0 0,0 0,0 z"
+ d="m -102.53333,159.20548 v -6.88484 l -5.8704,-1.47533 0.003,12.08796 5.86724,-3.72779 z"
id="path40327"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -56207,7 +55868,7 @@
inkscape:connector-curvature="0" />
<path
id="path40329"
- d="m -102.53333,152.32064 -5.8704,-1.47533 -5.85548,1.47533 5.85548,1.72121 5.8704,-1.72121 z"
+ d="m -102.53333,152.32064 -5.8704,-1.47533 -5.85548,1.47533 5.85548,1.72121 z"
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:nodetypes="ccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
@@ -56217,8 +55878,8 @@
<path
sodipodi:nodetypes="cccccc"
id="path40331"
- d="m -103.02191,152.32064 1e-5,6.63895 0,0 -5.37437,3.44241 -5.37437,-3.44241 1e-5,-6.63895"
- style="fill:none;stroke:url(#linearGradient40724);stroke-width:0.98034734px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="m -103.02191,152.32064 1e-5,6.63895 v 0 l -5.37437,3.44241 -5.37437,-3.44241 1e-5,-6.63895"
+ style="display:inline;fill:none;stroke:url(#linearGradient40724);stroke-width:0.98034734px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
<rect
@@ -56227,7 +55888,7 @@
height="16"
width="16"
id="rect40333"
- style="fill:none;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:3;marker:none;enable-background:accumulate" />
</g>
<g
style="display:inline;enable-background:new"
@@ -56237,7 +55898,7 @@
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect40383"
width="16"
height="16"
@@ -56249,8 +55910,8 @@
transform="translate(2.6147745,148.53014)">
<path
id="path40387"
- d="m 270,251 0,1.625 c -0.53409,0.12195 -1.02562,0.33162 -1.46875,0.625 l -1.29736,-1.49999 -1.5,1.5 1.51611,1.28124 c -0.29338,0.44313 -0.50305,0.93466 -0.625,1.46875 l -1.625,0 0,2 1.625,0 c 0.12195,0.53409 0.33162,1.02562 0.625,1.46875 l -1.51611,1.28126 1.5,1.5 1.29736,-1.50001 c 0.44313,0.29338 0.93466,0.50305 1.46875,0.625 l 0,1.625 2,0 0,-1.625 c 0.53409,-0.12195 1.02562,-0.33162 1.46875,-0.625 l 1.26514,1.50001 1.5,-1.5 -1.25,-1.25 c 0.29338,-0.44313 0.26916,-0.96592 0.39111,-1.50001 l 1.625,0 0,-2 -1.625,0 c -0.12195,-0.53409 -0.0977,-1.05686 -0.39111,-1.49999 l 1.25,-1.25 -1.5,-1.5 -1.25,1.25 C 273.04076,252.70663 272.53409,252.74695 272,252.625 l 0,-1.625 -2,0 z m -1,4 4,0 0,4 -4,0 0,-4 z"
- style="fill:none;stroke:#000000;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ d="m 270,251 v 1.625 c -0.53409,0.12195 -1.02562,0.33162 -1.46875,0.625 l -1.29736,-1.49999 -1.5,1.5 1.51611,1.28124 c -0.29338,0.44313 -0.50305,0.93466 -0.625,1.46875 H 265 v 2 h 1.625 c 0.12195,0.53409 0.33162,1.02562 0.625,1.46875 l -1.51611,1.28126 1.5,1.5 1.29736,-1.50001 c 0.44313,0.29338 0.93466,0.50305 1.46875,0.625 V 263 h 2 v -1.625 c 0.53409,-0.12195 1.02562,-0.33162 1.46875,-0.625 l 1.26514,1.50001 1.5,-1.5 -1.25,-1.25 c 0.29338,-0.44313 0.26916,-0.96592 0.39111,-1.50001 H 277 v -2 h -1.625 c -0.12195,-0.53409 -0.0977,-1.05686 -0.39111,-1.49999 l 1.25,-1.25 -1.5,-1.5 -1.25,1.25 C 273.04076,252.70663 272.53409,252.74695 272,252.625 V 251 Z m -1,4 h 4 v 4 h -4 z"
+ style="fill:none;stroke:#000000;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -56258,7 +55919,7 @@
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient40734);fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 270,251 0,1.625 c -0.53409,0.12195 -1.07298,0.0816 -1.51611,0.37501 l -1.25,-1.25 -1.5,1.5 1.25,1.25 c -0.29338,0.44313 -0.23694,0.9659 -0.35889,1.49999 l -1.625,0 0,2 1.625,0 c 0.12195,0.53409 0.0655,1.05688 0.35889,1.50001 l -1.25,1.25 1.5,1.5 1.25,-1.25 c 0.44313,0.29338 0.98202,0.25304 1.51611,0.37499 l 0,1.625 2,0 0,-1.625 c 0.53409,-0.12195 1.04076,-0.0816 1.48389,-0.37499 l 1.25,1.25 1.5,-1.5 -1.25,-1.25 c 0.29338,-0.44313 0.26916,-0.96592 0.39111,-1.50001 l 1.625,0 0,-2 -1.625,0 c -0.12195,-0.53409 -0.0977,-1.05686 -0.39111,-1.49999 l 1.25,-1.25 -1.5,-1.5 -1.25,1.25 C 273.04076,252.70663 272.53409,252.74695 272,252.625 l 0,-1.625 -2,0 z m -1,4 4,0 0,4 -4,0 0,-4 z"
+ d="m 270,251 v 1.625 c -0.53409,0.12195 -1.07298,0.0816 -1.51611,0.37501 l -1.25,-1.25 -1.5,1.5 1.25,1.25 c -0.29338,0.44313 -0.23694,0.9659 -0.35889,1.49999 H 265 v 2 h 1.625 c 0.12195,0.53409 0.0655,1.05688 0.35889,1.50001 l -1.25,1.25 1.5,1.5 1.25,-1.25 c 0.44313,0.29338 0.98202,0.25304 1.51611,0.37499 V 263 h 2 v -1.625 c 0.53409,-0.12195 1.04076,-0.0816 1.48389,-0.37499 l 1.25,1.25 1.5,-1.5 -1.25,-1.25 c 0.29338,-0.44313 0.26916,-0.96592 0.39111,-1.50001 H 277 v -2 h -1.625 c -0.12195,-0.53409 -0.0977,-1.05686 -0.39111,-1.49999 l 1.25,-1.25 -1.5,-1.5 -1.25,1.25 C 273.04076,252.70663 272.53409,252.74695 272,252.625 V 251 Z m -1,4 h 4 v 4 h -4 z"
id="path40389"
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -56268,16 +55929,16 @@
<path
sodipodi:nodetypes="cccccscccccccc"
id="path40391"
- d="M 274.73389,252.25001 273.5,253.75 m -2,-2.25 -1,0 0,1.5 c -0.35104,0.0802 -1.01806,0.29269 -1.5172,0.50569 m -1.49,1.50752 c -0.20864,0.49552 -0.41426,1.14284 -0.4928,1.48679 l -1.5,0 0,1 m 1.5,-5 -0.5,0.5 m 1.25,6.5 -1.51611,1.25001"
- style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ d="M 274.73389,252.25001 273.5,253.75 m -2,-2.25 h -1 v 1.5 c -0.35104,0.0802 -1.01806,0.29269 -1.5172,0.50569 m -1.49,1.50752 c -0.20864,0.49552 -0.41426,1.14284 -0.4928,1.48679 h -1.5 v 1 m 1.5,-5 -0.5,0.5 m 1.25,6.5 -1.51611,1.25001"
+ style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
- style="fill:none;stroke:#ffffff;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 273.23389,255.50001 0,3.75 L 269.5,259.25"
+ style="fill:none;stroke:#ffffff;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 273.23389,255.50001 v 3.75 L 269.5,259.25"
id="path40393"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -56287,7 +55948,7 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- style="fill:none;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 266.43389,253.45001 1,-1"
id="path40395"
sodipodi:nodetypes="cc"
@@ -56300,7 +55961,7 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Pracownia\Moje dokumenty\Moje obrazy\BLENDER ICONS redesign\RELEASES\g42357.png"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect40397"
width="16"
height="16"
@@ -56315,8 +55976,8 @@
transform="translate(18.016113,298.07385)">
<path
inkscape:connector-curvature="0"
- style="opacity:0.6;fill:none;stroke:#191919;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 309.21778,249.41313 5.01611,0.013 c 1.29844,0 2.25,-0.80274 2.25,-2.25 l 0.0161,-4.48698 c 0,-1.29844 -0.95156,-2.25 -2.25,-2.25 l -1.75,0"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:none;stroke:#191919;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 309.21778,249.41313 5.01611,0.013 c 1.29844,0 2.25,-0.80274 2.25,-2.25 l 0.0161,-4.48698 c 0,-1.29844 -0.95156,-2.25 -2.25,-2.25 h -1.75"
id="path40401"
sodipodi:nodetypes="cccccc" />
<rect
@@ -56327,13 +55988,13 @@
height="1.9947703"
width="1.9930685"
id="rect40403"
- style="opacity:0.01000001;fill:none;stroke:#e8a930;stroke-width:2.99999928;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:none;stroke:#e8a930;stroke-width:2.99999928;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc"
id="path40406"
- d="m 310.98389,249.42615 3,0 c 1.29844,0 2.5,-1.20156 2.5,-2.5 l 0.0161,-3.93424 c 0,-1.29844 -1.20156,-2.55274 -2.5,-2.55274 l -1.5,0"
- style="fill:none;stroke:#bcd0f5;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m 310.98389,249.42615 h 3 c 1.29844,0 2.5,-1.20156 2.5,-2.5 l 0.0161,-3.93424 c 0,-1.29844 -1.20156,-2.55274 -2.5,-2.55274 h -1.5"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#bcd0f5;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<rect
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
@@ -56345,7 +56006,7 @@
height="5.9999523"
width="7.0161614"
id="rect40408"
- style="fill:none;stroke:#000000;stroke-width:0.99999946;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+ style="fill:none;stroke:#000000;stroke-width:0.99999946;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<rect
style="fill:url(#linearGradient40736);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="rect40410"
@@ -56359,7 +56020,7 @@
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<rect
- style="fill:none;stroke:#000000;stroke-width:0.99999958;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:#000000;stroke-width:0.99999958;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect40412"
width="6.9999981"
height="5.9341388"
@@ -56383,7 +56044,7 @@
id="rect40414"
style="fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none" />
<rect
- style="opacity:0.8;fill:none;stroke:url(#linearGradient40738);stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="opacity:0.8;fill:none;stroke:url(#linearGradient40738);stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect40416"
width="5.0161114"
height="3.9999583"
@@ -56429,10 +56090,10 @@
height="3.9560828"
width="5.0067563"
id="rect40422"
- style="opacity:0.8;fill:none;stroke:url(#linearGradient40742);stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+ style="opacity:0.8;fill:none;stroke:url(#linearGradient40742);stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<rect
rx="0"
- style="fill:#ffb72a;fill-opacity:1;fill-rule:nonzero;stroke:#553800;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffb72a;fill-opacity:1;fill-rule:nonzero;stroke:#553800;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect40424"
width="2"
height="1.9882908"
@@ -56446,7 +56107,7 @@
height="1.9882908"
width="2"
id="rect40426"
- style="fill:#ffb72a;fill-opacity:1;fill-rule:nonzero;stroke:#553800;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffb72a;fill-opacity:1;fill-rule:nonzero;stroke:#553800;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
rx="0" />
</g>
</g>
@@ -56463,7 +56124,7 @@
height="16"
width="16"
id="rect40522"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
style="display:inline"
id="g40524"
@@ -56471,39 +56132,39 @@
<path
sodipodi:nodetypes="cccssssssccccsssssscccccc"
id="path40526"
- d="m 207.5,239.5 0,3 0,5.03125 c -0.31763,0.0283 -0.63892,0.0942 -0.96875,0.21875 -0.61538,0.23235 -1.12455,0.59487 -1.5,1.03125 -0.37546,0.43635 -0.63146,0.99926 -0.46875,1.625 0.1627,0.62575 0.6413,0.93109 1.15625,1.03125 0.51496,0.10016 1.1346,0.0761 1.75,-0.15625 0.61542,-0.23236 1.12456,-0.62615 1.5,-1.0625 0.33776,-0.39252 0.53125,-0.86133 0.53125,-1.46875 l 0,-6.25 6,0 0,5.03125 c -0.31763,0.0283 -0.63892,0.0942 -0.96875,0.21875 -0.61538,0.23235 -1.12455,0.59487 -1.5,1.03125 -0.37546,0.43635 -0.63146,0.99926 -0.46875,1.625 0.1627,0.62575 0.6413,0.93109 1.15625,1.03125 0.51496,0.10016 1.1346,0.0761 1.75,-0.15625 0.61542,-0.23236 1.12456,-0.62615 1.5,-1.0625 C 217.30651,249.82623 217.5,249.3373 217.5,248.75 l 0,-9.25 -1,0 -1,0 -6,0 -2,0 z"
- style="fill:url(#linearGradient40758);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.58322862;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 207.5,239.5 v 3 5.03125 c -0.31763,0.0283 -0.63892,0.0942 -0.96875,0.21875 -0.61538,0.23235 -1.12455,0.59487 -1.5,1.03125 -0.37546,0.43635 -0.63146,0.99926 -0.46875,1.625 0.1627,0.62575 0.6413,0.93109 1.15625,1.03125 0.51496,0.10016 1.1346,0.0761 1.75,-0.15625 0.61542,-0.23236 1.12456,-0.62615 1.5,-1.0625 0.33776,-0.39252 0.53125,-0.86133 0.53125,-1.46875 v -6.25 h 6 v 5.03125 c -0.31763,0.0283 -0.63892,0.0942 -0.96875,0.21875 -0.61538,0.23235 -1.12455,0.59487 -1.5,1.03125 -0.37546,0.43635 -0.63146,0.99926 -0.46875,1.625 0.1627,0.62575 0.6413,0.93109 1.15625,1.03125 0.51496,0.10016 1.1346,0.0761 1.75,-0.15625 0.61542,-0.23236 1.12456,-0.62615 1.5,-1.0625 C 217.30651,249.82623 217.5,249.3373 217.5,248.75 v -9.25 h -1 -1 -6 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient40758);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.58322865;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<g
id="g40528">
<path
id="path40530"
- d="m 207.44628,248.42245 c -0.25577,0.0323 -0.54038,0.11684 -0.81334,0.24698 -0.36394,0.17354 -0.65949,0.40136 -0.86757,0.65378 -0.20806,0.2524 -0.34395,0.56878 -0.21514,0.8647 0.12879,0.29592 0.44506,0.40032 0.76358,0.40164 0.3185,0.001 0.6909,-0.0762 1.05486,-0.24968 0.36397,-0.17355 0.65786,-0.41845 0.86594,-0.67084 0.20807,-0.25239 0.34394,-0.56879 0.21514,-0.86472 -0.12879,-0.29592 -0.44345,-0.38323 -0.76195,-0.38454 -0.0796,-3.4e-4 -0.15625,-0.008 -0.24152,0.003 l 0,-3.2e-4 0,0 0,0 z"
- style="fill:none;stroke:url(#linearGradient40760);stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+ d="m 207.44628,248.42245 c -0.25577,0.0323 -0.54038,0.11684 -0.81334,0.24698 -0.36394,0.17354 -0.65949,0.40136 -0.86757,0.65378 -0.20806,0.2524 -0.34395,0.56878 -0.21514,0.8647 0.12879,0.29592 0.44506,0.40032 0.76358,0.40164 0.3185,0.001 0.6909,-0.0762 1.05486,-0.24968 0.36397,-0.17355 0.65786,-0.41845 0.86594,-0.67084 0.20807,-0.25239 0.34394,-0.56879 0.21514,-0.86472 -0.12879,-0.29592 -0.44345,-0.38323 -0.76195,-0.38454 -0.0796,-3.4e-4 -0.15625,-0.008 -0.24152,0.003 z"
+ style="display:inline;fill:none;stroke:url(#linearGradient40760);stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
style="fill:none;stroke:#cccccc;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
- d="m 209.5,241.5 6,0"
+ d="m 209.5,241.5 h 6"
id="path40532"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient40762);stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
- d="m 215.4463,248.42245 c -0.25577,0.0323 -0.54038,0.11684 -0.81334,0.24698 -0.36394,0.17354 -0.65949,0.40136 -0.86757,0.65378 -0.20806,0.2524 -0.34395,0.56878 -0.21514,0.8647 0.12879,0.29592 0.44506,0.40032 0.76358,0.40164 0.3185,0.001 0.6909,-0.0762 1.05486,-0.24968 0.36397,-0.17355 0.65786,-0.41845 0.86594,-0.67084 0.20807,-0.25239 0.34394,-0.56879 0.21514,-0.86472 -0.12879,-0.29592 -0.44345,-0.38323 -0.76195,-0.38454 -0.0796,-3.4e-4 -0.15625,-0.008 -0.24152,0.003 l 0,-3.2e-4 0,0 0,0 z"
+ style="display:inline;fill:none;stroke:url(#linearGradient40762);stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 215.4463,248.42245 c -0.25577,0.0323 -0.54038,0.11684 -0.81334,0.24698 -0.36394,0.17354 -0.65949,0.40136 -0.86757,0.65378 -0.20806,0.2524 -0.34395,0.56878 -0.21514,0.8647 0.12879,0.29592 0.44506,0.40032 0.76358,0.40164 0.3185,0.001 0.6909,-0.0762 1.05486,-0.24968 0.36397,-0.17355 0.65786,-0.41845 0.86594,-0.67084 0.20807,-0.25239 0.34394,-0.56879 0.21514,-0.86472 -0.12879,-0.29592 -0.44345,-0.38323 -0.76195,-0.38454 -0.0796,-3.4e-4 -0.15625,-0.008 -0.24152,0.003 z"
id="path40534"
inkscape:connector-curvature="0" />
</g>
</g>
</g>
<g
- style="opacity:0.96000001;display:inline;enable-background:new"
+ style="display:inline;opacity:0.96000001;enable-background:new"
id="ICON_TIME"
transform="translate(0,128)"
inkscape:export-filename="C:\Documents and Settings\Pracownia\Moje dokumenty\Moje obrazy\BLENDER ICONS redesign\RELEASES\g42357.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect40604"
width="16"
height="16"
@@ -56516,45 +56177,39 @@
transform="matrix(0.927848,0,0,0.916217,147.82022,210.72362)"
id="g40606"
style="display:inline">
- <path
+ <circle
transform="matrix(0.87787,0,0,0.889264,55.67911,118.0341)"
- sodipodi:type="arc"
- style="fill:url(#linearGradient42519);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.22752953;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:url(#linearGradient42519);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.22752953;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path40608"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
- style="fill:none;stroke:url(#linearGradient42523);stroke-width:1.17973554;stroke-opacity:1;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient42523);stroke-width:1.17973554;stroke-opacity:1"
id="g40610"
transform="matrix(0.784039,0,0,0.779055,172.50801,241.28815)"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path40612"
- style="fill:none;stroke:url(#linearGradient42521);stroke-width:1.44816053;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.87787,0,0,0.889264,55.67911,118.0341)" />
+ style="fill:none;stroke:url(#linearGradient42521);stroke-width:1.44816053;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.87787,0,0,0.889264,55.67911,118.0341)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<path
sodipodi:nodetypes="cccc"
d="m 309.5,411.5 -3,3 m 0,1 2,2"
- style="fill:none;stroke:#ffffff;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#ffffff;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path40614"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -56564,7 +56219,7 @@
inkscape:transform-center-x="-1.25"
inkscape:transform-center-y="1.25"
id="path40616"
- style="fill:none;stroke:#aa0000;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#aa0000;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 306.5,415.5 2,2"
sodipodi:nodetypes="cc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -56572,14 +56227,14 @@
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.5;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate"
id="rect40618"
width="1"
height="1.5"
x="307"
y="419" />
<rect
- style="opacity:0.5;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate"
id="rect40620"
width="1.5"
height="1"
@@ -56591,7 +56246,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cc"
d="m 309.5,411.5 -3,3"
- style="fill:none;stroke:#000000;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path40622"
inkscape:transform-center-y="-0.75"
inkscape:connector-curvature="0" />
@@ -56599,7 +56254,7 @@
inkscape:transform-center-y="-1.0204512"
inkscape:transform-center-x="1.4653436"
id="path40624"
- d="m 306.85514,408.97535 c -3.25557,0.003 -5.8936,2.6597 -5.87155,5.95078 0.0105,1.56055 0.63214,2.99542 1.61111,4.05762 2.7831,-7.37691 5.95805,-1.77373 7.49116,-9.06794 -0.92886,-0.60835 -2.04538,-0.9415 -3.23072,-0.94046 l 0,0 0,0 0,0 z"
+ d="m 306.85514,408.97535 c -3.25557,0.003 -5.8936,2.6597 -5.87155,5.95078 0.0105,1.56055 0.63214,2.99542 1.61111,4.05762 2.7831,-7.37691 5.95805,-1.77373 7.49116,-9.06794 -0.92886,-0.60835 -2.04538,-0.9415 -3.23072,-0.94046 z"
style="fill:url(#linearGradient42525);fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<rect
@@ -56608,18 +56263,18 @@
height="1"
width="1.4999696"
id="rect40626"
- style="opacity:0.3;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate" />
<rect
y="409.5"
x="306"
height="1.4999921"
width="1"
id="rect40628"
- style="opacity:0.3;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate" />
<path
inkscape:transform-center-y="-0.75"
id="path40630"
- style="opacity:0.6;fill:none;stroke:#000000;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.6;fill:none;stroke:#000000;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 309.5,411.5 -3,3"
sodipodi:nodetypes="cc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -56635,11 +56290,11 @@
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<g
- style="opacity:0.96000001;display:inline"
+ style="display:inline;opacity:0.96000001"
id="g40634"
transform="translate(-1.5986633,-160.53013)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect40636"
width="16"
height="16"
@@ -56653,7 +56308,7 @@
inkscape:export-ydpi="90"
style="display:inline">
<rect
- style="opacity:0;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;opacity:0;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="rect40640"
width="15.000031"
height="16"
@@ -56667,22 +56322,22 @@
height="13.000053"
width="11.999973"
id="rect40642"
- style="fill:url(#linearGradient40788);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+ style="fill:url(#linearGradient40788);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
sodipodi:nodetypes="ccccccccc"
- d="m 174.48389,251 1,1 0,9 -1,1 -8,0 -1,-1 0,-9 1,-1 8,0 z"
- style="fill:none;stroke:url(#linearGradient40790);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="m 174.48389,251 1,1 v 9 l -1,1 h -8 l -1,-1 v -9 l 1,-1 z"
+ style="display:inline;fill:none;stroke:url(#linearGradient40790);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
id="path40644"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccccccccccccccccccccccccccc"
transform="translate(-0.0161112,10.500011)"
id="path40646"
- d="m 165.25,238.25 1,-1 0.5,0 0.75,0.75 0.75,-0.75 0.5,0 0.75,0.75 0.75,-0.75 0.5,0 0.75,0.75 0.75,-0.75 0.5,0 0.75,0.83779 0.75,-0.83779 0.5,0 1,1 0,2.75 -0.75,1 -1,0 -0.5,-1 -0.5,1 -1,0 -0.5,-1 -0.5,1 -1,0 -0.5,-1 -0.5,1 -1,0 -0.5,-1 -0.5,1 -1,0 -0.75,-1 0,-2.75 z"
- style="fill:url(#linearGradient40792);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 165.25,238.25 1,-1 h 0.5 l 0.75,0.75 0.75,-0.75 h 0.5 l 0.75,0.75 0.75,-0.75 h 0.5 l 0.75,0.75 0.75,-0.75 h 0.5 l 0.75,0.83779 0.75,-0.83779 h 0.5 l 1,1 V 241 l -0.75,1 h -1 l -0.5,-1 -0.5,1 h -1 l -0.5,-1 -0.5,1 h -1 l -0.5,-1 -0.5,1 h -1 l -0.5,-1 -0.5,1 h -1 l -0.75,-1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient40792);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- d="m 166.48389,249.00001 0,2 m 2,-2 0,2 m 2,-2 0,2 m 2,-2 0,2 m 2,-2 0,2"
+ d="m 166.48389,249.00001 v 2 m 2,-2 v 2 m 2,-2 v 2 m 2,-2 v 2 m 2,-2 v 2"
style="fill:none;stroke:url(#linearGradient40794);stroke-width:0.99999976px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
id="path40648"
sodipodi:nodetypes="cccccccccc"
@@ -56695,9 +56350,9 @@
height="1"
width="7"
id="rect40650"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.29999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.29999995;marker:none;enable-background:accumulate" />
<rect
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.29999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.29999995;marker:none;enable-background:accumulate"
id="rect40652"
width="7"
height="1"
@@ -56709,9 +56364,9 @@
height="1"
width="7"
id="rect40654"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.29999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.29999995;marker:none;enable-background:accumulate" />
<rect
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.29999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.29999995;marker:none;enable-background:accumulate"
id="rect40656"
width="1"
height="1"
@@ -56738,26 +56393,26 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path40525"
- d="m 296.49991,-1.4999999 -13.00008,0 0,-12.9999991 13.00008,0 0,12.9999991 0,0 0,0 0,0 z"
- style="fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 296.49991,-1.4999999 H 283.49983 V -14.499999 h 13.00008 z"
+ style="fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:url(#linearGradient40545);stroke-width:1.00000036px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 284.50009,-2.5000021 0,-11.0000069 11.00001,0 -2.7e-4,11.000009 -10.99974,-2.1e-6 z"
+ d="M 284.50009,-2.5000021 V -13.500009 H 295.5001 L 295.49983,-2.5 Z"
id="path40527"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.3;fill:#9dac93;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.60000002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 345,578 0,1 12,0 0,-1 -12,0 z m 0,2 0,1 12,0 0,-1 -12,0 z m 0,2 0,1 12,0 0,-1 -12,0 z m 0,2 0,1 12,0 0,-1 -12,0 z m 0,2 0,1 12,0 0,-1 -12,0 z m 0,2 0,1 12,0 0,-1 -12,0 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:#9dac93;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.60000002;marker:none;enable-background:accumulate"
+ d="m 345,578 v 1 h 12 v -1 z m 0,2 v 1 h 12 v -1 z m 0,2 v 1 h 12 v -1 z m 0,2 v 1 h 12 v -1 z m 0,2 v 1 h 12 v -1 z m 0,2 v 1 h 12 v -1 z"
id="path40529"
transform="translate(-61.000183,-592.00002)"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient40547);fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 295.99982,-1.9999789 -11.9999,0 0,-12.0000411 11.9999,0 0,12.0000411 0,0 0,0 0,0 z"
+ d="m 295.99982,-1.9999789 h -11.9999 V -14.00002 h 11.9999 z"
id="path40531"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -56771,9 +56426,9 @@
height="1"
width="0.99999863"
id="rect40533"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.79999995;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.79999995;marker:none;enable-background:accumulate"
id="rect40535"
width="0.99999863"
height="1"
@@ -56785,9 +56440,9 @@
height="1"
width="0.99999863"
id="rect40537"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.79999995;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.79999995;marker:none;enable-background:accumulate"
id="rect40539"
width="0.99999863"
height="1"
@@ -56799,9 +56454,9 @@
height="1"
width="0.99999863"
id="rect40541"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.79999995;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.79999995;marker:none;enable-background:accumulate"
id="rect40543"
width="3"
height="1"
@@ -56822,7 +56477,7 @@
height="16"
width="16"
id="rect23916"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g24071">
<path
@@ -56831,13 +56486,13 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path23922"
- d="m 118.5,637.6177 -1.25,-1.1177 -10.5,0 -1.25,1.25 0.0161,12.75006 0.9839,0.99994 11,0 1.01611,-0.99994 L 118.5,637.6177 z"
- style="fill:url(#linearGradient26077);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 118.5,637.6177 117.25,636.5 h -10.5 l -1.25,1.25 0.0161,12.75006 L 106.5,651.5 h 11 l 1.01611,-0.99994 z"
+ style="fill:url(#linearGradient26077);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
- style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 117,638 -10,0 0,1 10,0 0,-1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;enable-background:accumulate"
+ d="m 117,638 h -10 v 1 h 10 z"
id="path23926"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -56845,15 +56500,15 @@
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccc"
- style="fill:none;stroke:url(#linearGradient26079);stroke-width:0.99999923px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 117.5,650.25006 -0.25,0.25 -10.5,0 -0.25,-0.25 0,-12.5 0.25,-0.25 10.5,0 0.25,0.25 0,12.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient26079);stroke-width:0.99999923px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 117.5,650.25006 -0.25,0.25 h -10.5 l -0.25,-0.25 v -12.5 l 0.25,-0.25 h 10.5 l 0.25,0.25 z"
id="path23928"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<rect
- style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect23930"
width="1"
height="1.0000043"
@@ -56864,14 +56519,14 @@
inkscape:export-ydpi="90"
transform="scale(1,-1)" />
<path
- style="fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35476059;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 108,641 0,4 4,0 0,-4 -4,0 z m 4,4 0,4 4,0 0,-4 -4,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35476059;marker:none;enable-background:accumulate"
+ d="m 108,641 v 4 h 4 v -4 z m 4,4 v 4 h 4 v -4 z"
id="rect23964"
inkscape:connector-curvature="0" />
<path
id="path24035"
- d="m 108,649 0,-4 4,0 0,4 -4,0 z m 4,-4 0,-4 4,0 0,4 -4,0 z"
- style="fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35476059;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 108,649 v -4 h 4 v 4 z m 4,-4 v -4 h 4 v 4 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35476059;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<rect
y="-648.5"
@@ -56879,10 +56534,10 @@
height="7"
width="7"
id="rect23986"
- style="opacity:0.55;fill:none;stroke:url(#linearGradient26081);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- transform="scale(-1,-1)" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.55;fill:none;stroke:url(#linearGradient26081);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ transform="scale(-1)" />
<rect
- style="opacity:0.4;fill:none;stroke:url(#linearGradient26083);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.4;fill:none;stroke:url(#linearGradient26083);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect23971"
width="7"
height="7"
@@ -56904,7 +56559,7 @@
height="16"
width="16"
id="rect23328"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g23330">
<path
@@ -56913,13 +56568,13 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path23333"
- d="m 118.5,637.6177 -1.25,-1.1177 -10.5,0 -1.25,1.25 0.0161,12.75006 0.9839,0.99994 11,0 1.01611,-0.99994 L 118.5,637.6177 z"
- style="fill:url(#linearGradient23351);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 118.5,637.6177 117.25,636.5 h -10.5 l -1.25,1.25 0.0161,12.75006 L 106.5,651.5 h 11 l 1.01611,-0.99994 z"
+ style="fill:url(#linearGradient23351);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
- style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 117,638 -10,0 0,1 10,0 0,-1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;enable-background:accumulate"
+ d="m 117,638 h -10 v 1 h 10 z"
id="path23335"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -56927,15 +56582,15 @@
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccc"
- style="fill:none;stroke:url(#linearGradient23353);stroke-width:0.99999923px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 117.5,650.25006 -0.25,0.25 -10.5,0 -0.25,-0.25 0,-12.5 0.25,-0.25 10.5,0 0.25,0.25 0,12.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23353);stroke-width:0.99999923px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 117.5,650.25006 -0.25,0.25 h -10.5 l -0.25,-0.25 v -12.5 l 0.25,-0.25 h 10.5 l 0.25,0.25 z"
id="path23337"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<rect
- style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect23339"
width="1"
height="1.0000043"
@@ -56946,14 +56601,14 @@
inkscape:export-ydpi="90"
transform="scale(1,-1)" />
<path
- style="fill:#b41500;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35476059;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 108,641 0,4 4,0 0,-4 -4,0 z m 4,4 0,4 4,0 0,-4 -4,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#b41500;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35476059;marker:none;enable-background:accumulate"
+ d="m 108,641 v 4 h 4 v -4 z m 4,4 v 4 h 4 v -4 z"
id="path23341"
inkscape:connector-curvature="0" />
<path
id="path23345"
- d="m 108,649 0,-4 4,0 0,4 -4,0 z m 4,-4 0,-4 4,0 0,4 -4,0 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35476059;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 108,649 v -4 h 4 v 4 z m 4,-4 v -4 h 4 v 4 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35476059;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<rect
y="-648.5"
@@ -56961,10 +56616,10 @@
height="7"
width="7"
id="rect23347"
- style="opacity:0.45;fill:none;stroke:url(#linearGradient23355);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- transform="scale(-1,-1)" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.45;fill:none;stroke:url(#linearGradient23355);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ transform="scale(-1)" />
<rect
- style="opacity:0.4;fill:none;stroke:url(#linearGradient23357);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.4;fill:none;stroke:url(#linearGradient23357);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect23349"
width="7"
height="7"
@@ -56985,7 +56640,7 @@
height="16"
width="16"
id="rect42665"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="translate(-39.983882,19.00809)"
id="g42667"
@@ -56998,14 +56653,14 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path42669"
- d="m 244.51612,238.49191 -0.0161,3 7.98388,0 0.0161,-3 -7.98388,0 z"
- style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ d="m 244.51612,238.49191 -0.0161,3 h 7.98388 l 0.0161,-3 z"
+ style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
- style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 247.51612,241.49191 -0.0161,3 11,0 0.0161,-3 -11,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 247.51612,241.49191 -0.0161,3 h 11 l 0.0161,-3 z"
id="path42671"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -57013,8 +56668,8 @@
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
- style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- d="m 243.5,247.49191 -0.0161,3 12,0 0.0161,-3 -12,0 z"
+ style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 243.5,247.49191 -0.0161,3 h 12 l 0.0161,-3 z"
id="path42673"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -57026,33 +56681,33 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path42675"
- d="m 250.48388,250.49191 -0.0161,3 7.01612,0 0.0161,-3 -7.01612,0 z"
- style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ d="m 250.48388,250.49191 -0.0161,3 h 7.01612 l 0.0161,-3 z"
+ style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
<path
sodipodi:nodetypes="ccc"
id="path42677"
- d="m 205.51612,259.5 c 0,-0.25 0,-1 0,-1 l 6,0"
- style="fill:none;stroke:url(#linearGradient42685);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ d="m 205.51612,259.5 c 0,-0.25 0,-1 0,-1 h 6"
+ style="display:inline;fill:none;stroke:url(#linearGradient42685);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient42687);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
- d="m 208.51612,262.5 c 0,-0.25 0,-1 0,-1 l 9,0"
+ style="display:inline;fill:none;stroke:url(#linearGradient42687);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m 208.51612,262.5 c 0,-0.25 0,-1 0,-1 h 9"
id="path42679"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path42681"
- d="m 204.5,268.5 c 0,-0.25 0,-1 0,-1 l 10,0"
- style="fill:none;stroke:url(#linearGradient42689);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ d="m 204.5,268.5 c 0,-0.25 0,-1 0,-1 h 10"
+ style="display:inline;fill:none;stroke:url(#linearGradient42689);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path42683"
- d="m 211.5,271.5 c 0,-0.25 0,-1 0,-1 l 5,0"
- style="fill:none;stroke:url(#linearGradient42691);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ d="m 211.5,271.5 c 0,-0.25 0,-1 0,-1 h 5"
+ style="display:inline;fill:none;stroke:url(#linearGradient42691);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
</g>
<g
@@ -57074,7 +56729,7 @@
height="16"
width="16"
id="rect25598"
- style="opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate" />
<g
id="g25600"
transform="translate(-177,71)">
@@ -57104,19 +56759,19 @@
height="16"
width="16"
id="rect25608"
- style="opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:6;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:6;marker:none;enable-background:accumulate" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccccc"
id="path25610"
- d="m 756.16666,348.50001 10.33334,0 0,14.99999 -13,0 -10e-6,-11.99999 2.66667,-3 z"
- style="fill:url(#linearGradient25872);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline"
+ d="M 756.16666,348.50001 H 766.5 V 363.5 h -13 l -10e-6,-11.99999 z"
+ style="display:inline;fill:url(#linearGradient25872);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
inkscape:connector-curvature="0" />
<path
d="M -48.500031,260.50809 -46.5,260.5 l -3.1e-5,-1.99191"
- style="opacity:0.8;fill:none;stroke:#000000;stroke-width:0.76923829px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1;display:inline;filter:url(#filter31351)"
+ style="display:inline;opacity:0.8;fill:none;stroke:#000000;stroke-width:0.76923829px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1;filter:url(#filter31351)"
id="path25612"
sodipodi:nodetypes="ccc"
transform="matrix(1.2999758,0,0,1.2999988,817.54887,13.43979)"
@@ -57127,7 +56782,7 @@
id="g25614"
style="display:inline">
<rect
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect25616"
width="9"
height="13.999984"
@@ -57141,9 +56796,9 @@
height="1"
width="1"
id="rect25620"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect25622"
width="1"
height="1"
@@ -57155,9 +56810,9 @@
height="1"
width="1"
id="rect25624"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect25626"
width="1"
height="1"
@@ -57169,9 +56824,9 @@
height="1"
width="1"
id="rect25628"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect25630"
width="1"
height="1"
@@ -57183,9 +56838,9 @@
height="3"
width="3"
id="rect25632"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect25634"
width="3"
height="3"
@@ -57197,9 +56852,9 @@
height="3"
width="3"
id="rect25636"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect25638"
width="1"
height="1"
@@ -57211,9 +56866,9 @@
height="1"
width="1"
id="rect25640"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect25642"
width="1"
height="1"
@@ -57225,9 +56880,9 @@
height="1"
width="1"
id="rect25644"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect25646"
width="1"
height="1"
@@ -57239,9 +56894,9 @@
height="1"
width="1"
id="rect25648"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect25650"
width="1"
height="1"
@@ -57253,9 +56908,9 @@
height="1"
width="1"
id="rect25652"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect25654"
width="3"
height="2"
@@ -57265,13 +56920,13 @@
</g>
<path
sodipodi:nodetypes="cccc"
- d="m 754.5,353 0,9.5 m 3.5,-13 7.5,0"
- style="fill:none;stroke:url(#linearGradient25874);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="m 754.5,353 v 9.5 m 3.5,-13 h 7.5"
+ style="display:inline;fill:none;stroke:url(#linearGradient25874);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
id="path25656"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
- d="m 753,352 4,0 0,-4 -4,4 z"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="m 753,352 h 4 v -4 z"
id="path25658"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
@@ -57279,8 +56934,8 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 753.5,351.00001 0,12.49999 13,0 0,-14.99999 -10.5,0 -2.5,2.5 z"
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 753.5,351.00001 V 363.5 h 13 V 348.50001 H 756 Z"
+ style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path25660"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
@@ -57300,7 +56955,7 @@
transform="translate(523,-99)"
style="display:inline">
<rect
- style="opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate"
id="rect25442"
width="16"
height="16"
@@ -57331,7 +56986,7 @@
</g>
</g>
<rect
- style="opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:6;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:6;marker:none;enable-background:accumulate"
id="rect25452"
width="16"
height="16"
@@ -57346,25 +57001,25 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccccc"
id="path25456"
- d="m 916.16666,190.50001 10.33334,0 0,14.99999 -13,0 -10e-6,-11.99999 2.66667,-3 z"
- style="fill:url(#linearGradient26011);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline"
+ d="M 916.16666,190.50001 H 926.5 V 205.5 h -13 l -10e-6,-11.99999 z"
+ style="display:inline;fill:url(#linearGradient26011);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
inkscape:connector-curvature="0" />
<path
d="M -48.500031,260.50809 -46.5,260.5 l -3.1e-5,-1.99191"
- style="opacity:0.8;fill:none;stroke:#000000;stroke-width:0.76923829px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1;display:inline;filter:url(#filter22979)"
+ style="display:inline;opacity:0.8;fill:none;stroke:#000000;stroke-width:0.76923829px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1;filter:url(#filter22979)"
id="path25458"
sodipodi:nodetypes="ccc"
transform="matrix(1.2999758,0,0,1.2999988,977.54887,-144.56021)"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
- d="m 914.5,195 0,9.5 m 3.5,-13 7.5,0"
- style="fill:none;stroke:url(#linearGradient26013);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="m 914.5,195 v 9.5 m 3.5,-13 h 7.5"
+ style="display:inline;fill:none;stroke:url(#linearGradient26013);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
id="path25460"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
- d="m 913,194 4,0 0,-4 -4,4 z"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="m 913,194 h 4 v -4 z"
id="path25462"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
@@ -57372,8 +57027,8 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 913.5,193.00001 0,12.49999 13,0 0,-14.99999 -10.5,0 -2.5,2.5 z"
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 913.5,193.00001 V 205.5 h 13 V 190.50001 H 916 Z"
+ style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path25464"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
@@ -57382,12 +57037,12 @@
<path
sodipodi:nodetypes="ccccc"
id="path25582"
- d="m 650,228 1,0 -10e-6,6.5 -1,0 L 650,228 z"
- style="fill:#112b00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 650,228 h 1 l -10e-6,6.5 h -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#112b00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:#112b00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 654,227 0,2 -4,0 10e-6,-2 3.99999,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#112b00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate"
+ d="m 654,227 v 2 h -4 l 10e-6,-2 z"
id="path25584"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
@@ -57395,39 +57050,35 @@
transform="matrix(0.8571421,0,0,0.8,601.28577,-208.6)"
id="g25586"
style="display:inline;enable-background:new">
- <path
- sodipodi:type="arc"
- style="fill:#112b00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;fill:#112b00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate"
id="path25588"
- sodipodi:cx="53"
- sodipodi:cy="554"
- sodipodi:rx="4.5"
- sodipodi:ry="2.25"
- d="M 57.5,554 A 4.5,2.25 0 0 1 53,556.25 4.5,2.25 0 0 1 48.5,554 4.5,2.25 0 0 1 53,551.75 4.5,2.25 0 0 1 57.5,554 Z"
- transform="matrix(0.7630859,-0.2494396,0.2996015,0.9926766,-151.92281,17.77746)" />
- <path
+ transform="matrix(0.7630859,-0.2494396,0.2996015,0.9926766,-151.92281,17.77746)"
+ cx="53"
+ cy="554"
+ rx="4.5"
+ ry="2.25" />
+ <ellipse
clip-path="url(#clipPath20586)"
inkscape:transform-center-y="0.3813435"
transform="matrix(0.3848865,-0.1700959,0.2278131,0.3626733,-93.107467,361.59408)"
- d="M 57.5,554 A 4.5,2.25 0 0 1 53,556.25 4.5,2.25 0 0 1 48.5,554 4.5,2.25 0 0 1 53,551.75 4.5,2.25 0 0 1 57.5,554 Z"
- sodipodi:ry="2.25"
- sodipodi:rx="4.5"
- sodipodi:cy="554"
- sodipodi:cx="53"
id="path25590"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter20578);enable-background:accumulate"
- sodipodi:type="arc" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;filter:url(#filter20578);enable-background:accumulate"
+ cx="53"
+ cy="554"
+ rx="4.5"
+ ry="2.25" />
</g>
<path
sodipodi:nodetypes="ccccc"
id="path25592"
- d="m 654,227 0,1 -4,0 10e-6,-1 3.99999,0 z"
- style="opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 654,227 v 1 h -4 l 10e-6,-1 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
id="path25662"
- d="m 645.5,226.5 0,2 -2,0"
- style="fill:none;stroke:url(#linearGradient26015);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ d="m 645.5,226.5 v 2 h -2"
+ style="display:inline;fill:none;stroke:url(#linearGradient26015);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
</g>
<g
@@ -57448,7 +57099,7 @@
transform="translate(523,-99)"
style="display:inline">
<rect
- style="opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate"
id="rect25365"
width="16"
height="16"
@@ -57479,7 +57130,7 @@
</g>
</g>
<rect
- style="opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:6;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:6;marker:none;enable-background:accumulate"
id="rect25376"
width="16"
height="16"
@@ -57494,25 +57145,25 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccccc"
id="path25380"
- d="m 916.16666,190.50001 10.33334,0 0,14.99999 -13,0 -10e-6,-11.99999 2.66667,-3 z"
- style="fill:url(#linearGradient25982);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline"
+ d="M 916.16666,190.50001 H 926.5 V 205.5 h -13 l -10e-6,-11.99999 z"
+ style="display:inline;fill:url(#linearGradient25982);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
inkscape:connector-curvature="0" />
<path
d="M -48.500031,260.50809 -46.5,260.5 l -3.1e-5,-1.99191"
- style="opacity:0.8;fill:none;stroke:#000000;stroke-width:0.76923829px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1;display:inline;filter:url(#filter22999)"
+ style="display:inline;opacity:0.8;fill:none;stroke:#000000;stroke-width:0.76923829px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1;filter:url(#filter22999)"
id="path25382"
sodipodi:nodetypes="ccc"
transform="matrix(1.2999758,0,0,1.2999988,977.54887,-144.56021)"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
- d="m 914.5,195 0,9.5 m 3.5,-13 7.5,0"
- style="fill:none;stroke:url(#linearGradient25984);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="m 914.5,195 v 9.5 m 3.5,-13 h 7.5"
+ style="display:inline;fill:none;stroke:url(#linearGradient25984);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
id="path25384"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
- d="m 913,194 4,0 0,-4 -4,4 z"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="m 913,194 h 4 v -4 z"
id="path25387"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
@@ -57520,23 +57171,23 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 913.5,193.00001 0,12.49999 13,0 0,-14.99999 -10.5,0 -2.5,2.5 z"
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 913.5,193.00001 V 205.5 h 13 V 190.50001 H 916 Z"
+ style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path25389"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
</g>
</g>
<path
- d="m 889.5,372.5 1,0 m 0,-4 -8,0 m 5,2 -5,0 m 1.25,-8 6.75,0 m 0,4 -8,0 m 8,-2 -8,0"
- style="opacity:0.7;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="m 889.5,372.5 h 1 m 0,-4 h -8 m 5,2 h -5 m 1.25,-8 h 6.75 m 0,4 h -8 m 8,-2 h -8"
+ style="display:inline;opacity:0.7;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
id="path25391"
sodipodi:nodetypes="cccccccccccc"
inkscape:connector-curvature="0" />
</g>
<path
- style="fill:none;stroke:url(#linearGradient25986);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
- d="m 621.5,214.5 0,2 -2,0"
+ style="display:inline;fill:none;stroke:url(#linearGradient25986);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m 621.5,214.5 v 2 h -2"
id="path25668"
inkscape:connector-curvature="0" />
</g>
@@ -57562,7 +57213,7 @@
height="16"
width="16"
id="rect25398"
- style="opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate" />
<g
id="g25400"
transform="translate(-177,71)">
@@ -57592,12 +57243,12 @@
height="16"
width="16"
id="rect25408"
- style="opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:6;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:6;marker:none;enable-background:accumulate" />
<g
id="g25410">
<path
- style="fill:url(#linearGradient25957);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline"
- d="m 916.16666,190.50001 10.33334,0 0,14.99999 -13,0 -10e-6,-11.99999 2.66667,-3 z"
+ style="display:inline;fill:url(#linearGradient25957);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
+ d="M 916.16666,190.50001 H 926.5 V 205.5 h -13 l -10e-6,-11.99999 z"
id="path25413"
sodipodi:nodetypes="cccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -57606,24 +57257,24 @@
inkscape:connector-curvature="0" />
<g
transform="translate(15.27209,-110)"
- style="fill:#0044aa;display:inline"
+ style="display:inline;fill:#0044aa"
id="g25415">
<path
sodipodi:nodetypes="ccccc"
id="path25417"
- d="m 902.72791,305 2,0.90909 0,9.09091 -2,0 0,-10 z"
+ d="m 902.72791,305 2,0.90909 V 315 h -2 z"
style="fill:#214478"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path25419"
- d="m 901.72791,305 1,0 0.25,0.5 -1.25,0 0,-0.5 z"
+ d="m 901.72791,305 h 1 l 0.25,0.5 h -1.25 z"
style="fill:#214478"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path25421"
- d="m 902.72791,305 6.75,0 0,1 -5.09127,0 -1.65873,-1 z"
+ d="m 902.72791,305 h 6.75 v 1 h -5.09127 z"
style="fill:#214478"
inkscape:connector-curvature="0" />
<rect
@@ -57652,26 +57303,26 @@
transform="matrix(1.2999758,0,0,1.2999988,977.54887,-144.56021)"
sodipodi:nodetypes="ccc"
id="path25429"
- style="opacity:0.8;fill:none;stroke:#000000;stroke-width:0.76923829px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1;display:inline;filter:url(#filter23007)"
+ style="display:inline;opacity:0.8;fill:none;stroke:#000000;stroke-width:0.76923829px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1;filter:url(#filter23007)"
d="M -48.500031,260.50809 -46.5,260.5 l -3.1e-5,-1.99191"
inkscape:connector-curvature="0" />
<path
id="path25431"
- style="fill:none;stroke:url(#linearGradient25959);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;display:inline"
- d="m 914.5,195 0,9.5 m 3.5,-13 7.5,0"
+ style="display:inline;fill:none;stroke:url(#linearGradient25959);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 914.5,195 v 9.5 m 3.5,-13 h 7.5"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
id="path25433"
- d="m 913,194 4,0 0,-4 -4,4 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+ d="m 913,194 h 4 v -4 z"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccc"
id="path25435"
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 913.5,193.00001 0,12.49999 13,0 0,-14.99999 -10.5,0 -2.5,2.5 z"
+ style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 913.5,193.00001 V 205.5 h 13 V 190.50001 H 916 Z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -57680,8 +57331,8 @@
</g>
<path
id="path25670"
- d="m 621.5,190.5 0,2 -2,0"
- style="fill:none;stroke:url(#linearGradient25961);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ d="m 621.5,190.5 v 2 h -2"
+ style="display:inline;fill:none;stroke:url(#linearGradient25961);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
</g>
<g
@@ -57702,7 +57353,7 @@
transform="translate(523,-99)"
style="display:inline">
<rect
- style="opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate"
id="rect25680"
width="16"
height="16"
@@ -57733,7 +57384,7 @@
</g>
</g>
<rect
- style="opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:6;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:6;marker:none;enable-background:accumulate"
id="rect25690"
width="16"
height="16"
@@ -57748,25 +57399,25 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccccc"
id="path25694"
- d="m 916.16666,190.50001 10.33334,0 0,14.99999 -13,0 -10e-6,-11.99999 2.66667,-3 z"
- style="fill:url(#linearGradient25886);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline"
+ d="M 916.16666,190.50001 H 926.5 V 205.5 h -13 l -10e-6,-11.99999 z"
+ style="display:inline;fill:url(#linearGradient25886);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
inkscape:connector-curvature="0" />
<path
d="M -48.500031,260.50809 -46.5,260.5 l -3.1e-5,-1.99191"
- style="opacity:0.8;fill:none;stroke:#000000;stroke-width:0.76923829px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1;display:inline;filter:url(#filter23015)"
+ style="display:inline;opacity:0.8;fill:none;stroke:#000000;stroke-width:0.76923829px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1;filter:url(#filter23015)"
id="path25696"
sodipodi:nodetypes="ccc"
transform="matrix(1.2999758,0,0,1.2999988,977.54887,-144.56021)"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
- d="m 914.5,195 0,9.5 m 3.5,-13 7.5,0"
- style="fill:none;stroke:url(#linearGradient25888);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="m 914.5,195 v 9.5 m 3.5,-13 h 7.5"
+ style="display:inline;fill:none;stroke:url(#linearGradient25888);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
id="path25698"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
- d="m 913,194 4,0 0,-4 -4,4 z"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="m 913,194 h 4 v -4 z"
id="path25700"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
@@ -57774,8 +57425,8 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 913.5,193.00001 0,12.49999 13,0 0,-14.99999 -10.5,0 -2.5,2.5 z"
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 913.5,193.00001 V 205.5 h 13 V 190.50001 H 916 Z"
+ style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path25702"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
@@ -57793,84 +57444,70 @@
height="16"
width="16"
id="rect25707"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g25709">
<g
id="g25711">
<path
id="path25713"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.34386529;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.34386528;stroke-opacity:1;marker:none;enable-background:accumulate"
d="M -15.594023,497.94339 -20.25,493.5"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:#000000;stroke-width:1.32768786;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.10397505;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1.32768786;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.10397505;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path25715"
- sodipodi:cx="13.5"
- sodipodi:cy="57.5"
- sodipodi:rx="1"
- sodipodi:ry="1.0000004"
- d="m 14.5,57.5 a 1,1.0000004 0 0 1 -1,1 1,1.0000004 0 0 1 -1,-1 1,1.0000004 0 0 1 1,-1 1,1.0000004 0 0 1 1,1 z"
- transform="matrix(3.625,0,0,3.1690202,-67.8125,318.31703)" />
+ transform="matrix(3.625,0,0,3.1690202,-67.8125,318.31703)"
+ cx="13.5"
+ cy="57.5"
+ rx="1"
+ ry="1.0000004" />
<path
sodipodi:nodetypes="cccc"
- d="m -25.5,496.5 7.5,0 m -8.5,5.00012 3.5,-3.5"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.34386529;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -25.5,496.5 h 7.5 m -8.5,5.00012 3.5,-3.5"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.34386528;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path25717"
inkscape:connector-curvature="0" />
</g>
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient25890);stroke-width:0.92424375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.10397505;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient25890);stroke-width:0.92424375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.10397505;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path25719"
- sodipodi:cx="13.5"
- sodipodi:cy="57.5"
- sodipodi:rx="1"
- sodipodi:ry="1"
- d="m 14.5,57.5 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- transform="matrix(3.5999897,0,0,3.1249932,-67.499871,320.6879)" />
+ transform="matrix(3.5999897,0,0,3.1249932,-67.499871,320.6879)"
+ cx="13.5"
+ cy="57.5"
+ r="1" />
<path
id="path25721"
- style="fill:none;stroke:url(#linearGradient25892);stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.34386529;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient25892);stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.34386528;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m -25.5,496.5 7.984366,-0.0226 M -26.5,501.50012 -21.5,496.5 m 5.996227,1.44466 L -20.25,493.5"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
- <path
+ <circle
transform="matrix(3.25,0,0,3.25,-62.875,313.125)"
- d="m 14.5,57.5 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- sodipodi:ry="1"
- sodipodi:rx="1"
- sodipodi:cy="57.5"
- sodipodi:cx="13.5"
id="path25723"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
+ cx="13.5"
+ cy="57.5"
+ r="1" />
+ <circle
style="fill:#2c5aa0;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path25725"
- sodipodi:cx="13.5"
- sodipodi:cy="57.5"
- sodipodi:rx="1"
- sodipodi:ry="1"
- d="m 14.5,57.5 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- transform="matrix(2,0,0,2,-46,385)" />
- <path
+ transform="matrix(2,0,0,2,-46,385)"
+ cx="13.5"
+ cy="57.5"
+ r="1" />
+ <circle
transform="matrix(4.7519907,0,0,4.1435313,-83.051884,262.12196)"
- d="m 14.5,57.5 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- sodipodi:ry="1"
- sodipodi:rx="1"
- sodipodi:cy="57.5"
- sodipodi:cx="13.5"
id="path25727"
- style="fill:none;stroke:url(#linearGradient25894);stroke-width:0.22536004;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.10397505;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient25894);stroke-width:0.22536004;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.10397505;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="13.5"
+ cy="57.5"
+ r="1" />
<path
id="path25729"
style="fill:none;stroke:url(#linearGradient25897);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
- d="m -20.515634,493.80534 c -0.07079,-0.45769 0.0843,-0.63855 0.5,-0.5 m -6.734366,7.94478 3.280183,-3.10926 m -2,-2 6.25,0"
+ d="m -20.515634,493.80534 c -0.07079,-0.45769 0.0843,-0.63855 0.5,-0.5 m -6.734366,7.94478 3.280183,-3.10926 m -2,-2 h 6.25"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
</g>
@@ -57878,7 +57515,7 @@
</g>
<path
style="fill:none;stroke:url(#linearGradient25899);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
- d="m 757.5,230.5 0,2 -2,0"
+ d="m 757.5,230.5 v 2 h -2"
id="path25731"
inkscape:connector-curvature="0" />
</g>
@@ -57892,12 +57529,12 @@
height="16"
width="16"
id="rect25824"
- style="opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<g
id="g25826">
<path
- style="fill:url(#linearGradient25927);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 89.5,408.5 0,11.49245 1.5,1.5 10.5,0.008 0,-11.99245 -8,-0.008 0,-1 -4,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient25927);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate"
+ d="m 89.5,408.5 v 11.49245 l 1.5,1.5 10.5,0.008 V 409.508 l -8,-0.008 v -1 z"
id="path25828"
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0" />
@@ -57906,40 +57543,40 @@
id="g25830"
style="display:inline" />
<path
- style="fill:#d1c595;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient25929);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 92.5,413.74245 12,0.008 0,6.25 -1.5,1.49245 -12,0.008 0,-2 1.5,0 0,-5.75755 0,-9e-4 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#d1c595;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient25929);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 92.5,413.74245 12,0.008 v 6.25 l -1.5,1.49245 -12,0.008 v -2 h 1.5 v -5.75755 z"
id="path25832"
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccc"
- style="opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
- d="m 91.5,420.49245 -1.01563,-0.98437 0,-10.02344 2,0 0,1 L 100.5,410.5"
+ style="display:inline;opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 91.5,420.49245 -1.01563,-0.98437 v -10.02344 h 2 v 1 L 100.5,410.5"
id="path25834"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
- style="opacity:0.18999999;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
- d="m 93,420.5 9.5,0"
+ style="display:inline;opacity:0.18999999;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 93,420.5 h 9.5"
id="path25836"
inkscape:connector-curvature="0" />
<path
id="path25838"
- d="m 103.5,414.75 -10,-0.008 0,4.75755 -1.5,1.5 -1.5,-1.5"
- style="opacity:0.8;fill:none;stroke:url(#linearGradient25931);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="m 103.5,414.75 -10,-0.008 v 4.75755 l -1.5,1.5 -1.5,-1.5"
+ style="display:inline;opacity:0.8;fill:none;stroke:url(#linearGradient25931);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-rule:evenodd;stroke:none;display:inline"
- d="m 93,409 0,2 -3,0 0,-2 3,0 z"
+ style="display:inline;fill:#ffffff;fill-rule:evenodd;stroke:none"
+ d="m 93,409 v 2 h -3 v -2 z"
id="path25840"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccccc"
id="path25842"
- d="m 89.5,408.5 0,11.49245 1.5,1.5 12,0.008 1.5,-1.49245 0,-6.50755 -3,-0.008 0,-3.9849 -8,-0.008 0,-1 -4,0 0,4.5e-4 0,0 0,0 z"
- style="fill:none;stroke:#2a2512;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 89.5,408.5 v 11.49245 l 1.5,1.5 12,0.008 1.5,-1.49245 v -6.50755 l -3,-0.008 v -3.9849 l -8,-0.008 v -1 h -4 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#2a2512;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -57947,7 +57584,7 @@
transform="translate(371,90.000008)"
id="ICON_UI">
<rect
- style="opacity:0;fill:#cccccc;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#cccccc;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect26095"
width="16"
height="16"
@@ -57968,12 +57605,12 @@
height="6.0000124"
width="14"
id="rect26099"
- style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline;enable-background:new" />
+ style="display:inline;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" />
<rect
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- style="fill:none;stroke:url(#linearGradient26126);stroke-width:1.00000048;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline;enable-background:new"
+ style="display:inline;fill:none;stroke:url(#linearGradient26126);stroke-width:1.00000048;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
id="rect26101"
width="12"
height="4.00875"
@@ -57982,7 +57619,7 @@
ry="1.029202"
rx="1.029202" />
<rect
- style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline;enable-background:new"
+ style="display:inline;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
id="rect26103"
width="14"
height="4.9999971"
@@ -57997,7 +57634,7 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- style="opacity:0.8;fill:none;stroke:url(#linearGradient26128);stroke-width:1.00000048;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline;enable-background:new"
+ style="display:inline;opacity:0.8;fill:none;stroke:url(#linearGradient26128);stroke-width:1.00000048;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
id="rect26105"
width="12.000008"
height="2.9999971"
@@ -58013,7 +57650,7 @@
height="3.9999919"
width="8"
id="rect26107"
- style="fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
rx="0.97821051"
ry="0.97821051"
@@ -58022,7 +57659,7 @@
height="2.9999971"
width="12.000008"
id="rect26109"
- style="opacity:0.7;fill:none;stroke:url(#linearGradient26130);stroke-width:1.00000048;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline;enable-background:new"
+ style="display:inline;opacity:0.7;fill:none;stroke:url(#linearGradient26130);stroke-width:1.00000048;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
@@ -58034,15 +57671,15 @@
height="3.0000272"
width="0.99999988"
id="rect26111"
- style="opacity:0.6;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<g
id="g26113"
transform="matrix(-1,0,0,1,193.28404,-130.61032)"
- style="opacity:0.8;display:inline;enable-background:new">
+ style="display:inline;opacity:0.8;enable-background:new">
<g
id="g26115">
<rect
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect26117"
width="1"
height="1"
@@ -58059,7 +57696,7 @@
height="3"
width="1"
id="rect26119"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
transform="matrix(-1,0,0,1,194,-1.1e-6)" />
<rect
ry="0"
@@ -58069,9 +57706,9 @@
height="1"
width="1"
id="rect26121"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect26123"
width="1"
height="3"
@@ -58092,7 +57729,7 @@
height="16"
width="16.000004"
id="rect27916"
- style="opacity:0;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline" />
+ style="display:inline;opacity:0;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
<g
id="g28110">
<path
@@ -58101,29 +57738,24 @@
style="fill:url(#linearGradient28107);fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:nodetypes="ccscz"
inkscape:connector-curvature="0" />
- <path
- d="M 434.99991,14.5 A 3.9999149,2.91429 0 0 1 431,17.41429 3.9999149,2.91429 0 0 1 427.00009,14.5 3.9999149,2.91429 0 0 1 431,11.58571 3.9999149,2.91429 0 0 1 434.99991,14.5 Z"
- sodipodi:ry="2.91429"
- sodipodi:rx="3.9999149"
- sodipodi:cy="14.5"
- sodipodi:cx="431"
+ <ellipse
id="path27920"
style="fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none"
- sodipodi:type="arc"
- transform="matrix(0.7500463,0,0,1.0294111,88.73017,294.07354)" />
- <path
- d="m 65,135 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- sodipodi:ry="1"
- sodipodi:rx="1"
- sodipodi:cy="135"
- sodipodi:cx="64"
+ transform="matrix(0.7500463,0,0,1.0294111,88.73017,294.07354)"
+ cx="431"
+ cy="14.5"
+ rx="3.9999149"
+ ry="2.91429" />
+ <circle
id="path27922"
- style="fill:url(#linearGradient28099);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74699998;marker:none;display:inline"
- sodipodi:type="arc"
- transform="matrix(2.249956,0,0,2.251405,267.75278,4.81032)" />
+ style="display:inline;fill:url(#linearGradient28099);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74699998;marker:none"
+ transform="matrix(2.249956,0,0,2.251405,267.75278,4.81032)"
+ cx="64"
+ cy="135"
+ r="1" />
<path
sodipodi:nodetypes="ccscs"
- style="fill:none;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 412,306.5 c -3.5,0 -5,1.5 -6.5,3 1.5,1.5 2.75,4 6.5,4 3.75,0 5,-2.5 6.5,-4 -1.5,-1.5 -3,-3 -6.5,-3 z"
id="path27924"
inkscape:connector-curvature="0" />
@@ -58134,34 +57766,31 @@
width="2"
id="rect27926"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <path
- d="m 65,135 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- sodipodi:ry="1"
- sodipodi:rx="1"
- sodipodi:cy="135"
- sodipodi:cx="64"
+ <circle
id="path27928"
- style="opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74699998;marker:none;display:inline"
- sodipodi:type="arc"
- transform="translate(347,172.91429)" />
+ style="display:inline;opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74699998;marker:none"
+ transform="translate(347,172.91429)"
+ cx="64"
+ cy="135"
+ r="1" />
</g>
</g>
<g
id="ICON_RESTRICT_VIEW_ON"
transform="translate(4e-6,127.99999)">
<g
- transform="translate(0.4838899,-6.2084382e-8)"
+ transform="translate(0.4838899)"
id="g27934">
<path
sodipodi:nodetypes="ccscz"
- style="opacity:0.25;fill:url(#radialGradient27973);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+ style="display:inline;opacity:0.25;fill:url(#radialGradient27973);fill-opacity:1;fill-rule:evenodd;stroke:none"
d="m 432.51611,305.45213 c -3,0 -7,2.04787 -5.5,4.04787 0.5,1.45213 2.49969,3.02073 5.49861,2.99979 3.00139,-0.021 4.82513,-1.62106 5.50139,-2.99995 2,-2.49984 -2.5,-4.04771 -5.5,-4.04771 z"
id="path27936"
inkscape:connector-curvature="0" />
<path
id="path27938"
d="m 432.51611,305.45213 c -3,0 -7.75,2.04787 -6.25,4.04787 0.5,1.45213 3.25108,3.52094 6.25,3.5 3.00139,-0.021 5.82374,-2.12111 6.5,-3.5 2,-2.49984 -3.5,-4.04787 -6.5,-4.04787 z"
- style="opacity:0.18000004;fill:url(#radialGradient27975);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+ style="display:inline;opacity:0.18000004;fill:url(#radialGradient27975);fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:nodetypes="ccscz"
inkscape:connector-curvature="0" />
<path
@@ -58189,7 +57818,7 @@
id="ICON_VISIBLE_IPO_ON"
transform="translate(105,-82)">
<rect
- style="opacity:0;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;opacity:0;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="rect27418"
width="16.000004"
height="16"
@@ -58203,30 +57832,25 @@
d="m 412,306.45213 c -3.54545,0 -5.90909,1.5 -6.49999,3.04787 0.5909,1.45213 2.95581,3.77094 6.49999,3.75 3.54709,-0.021 5.9091,-2.29787 6.50001,-3.75 -0.59091,-1.54787 -2.95455,-3.04787 -6.50001,-3.04787 z"
id="path27422"
inkscape:connector-curvature="0" />
- <path
+ <ellipse
transform="matrix(0.7500463,0,0,1.0294111,88.73017,294.07354)"
- sodipodi:type="arc"
style="fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path27424"
- sodipodi:cx="431"
- sodipodi:cy="14.5"
- sodipodi:rx="3.9999149"
- sodipodi:ry="2.91429"
- d="M 434.99991,14.5 A 3.9999149,2.91429 0 0 1 431,17.41429 3.9999149,2.91429 0 0 1 427.00009,14.5 3.9999149,2.91429 0 0 1 431,11.58571 3.9999149,2.91429 0 0 1 434.99991,14.5 Z" />
- <path
+ cx="431"
+ cy="14.5"
+ rx="3.9999149"
+ ry="2.91429" />
+ <circle
transform="matrix(2.249956,0,0,2.251405,267.75278,4.81032)"
- sodipodi:type="arc"
- style="fill:url(#linearGradient27450);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74699998;marker:none;display:inline"
+ style="display:inline;fill:url(#linearGradient27450);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74699998;marker:none"
id="path27426"
- sodipodi:cx="64"
- sodipodi:cy="135"
- sodipodi:rx="1"
- sodipodi:ry="1"
- d="m 65,135 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z" />
+ cx="64"
+ cy="135"
+ r="1" />
<path
id="path27428"
d="m 412,306.5 c -3.5,0 -5,1.5 -6.5,3 1.5,1.5 2.75,4 6.5,4 3.75,0 5,-2.5 6.5,-4 -1.5,-1.5 -3,-3 -6.5,-3 z"
- style="fill:none;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="ccscs"
inkscape:connector-curvature="0" />
<rect
@@ -58236,16 +57860,13 @@
height="2"
x="411"
y="307.91428" />
- <path
+ <circle
transform="translate(347,172.91429)"
- sodipodi:type="arc"
- style="opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74699998;marker:none;display:inline"
+ style="display:inline;opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74699998;marker:none"
id="path27432"
- sodipodi:cx="64"
- sodipodi:cy="135"
- sodipodi:rx="1"
- sodipodi:ry="1"
- d="m 65,135 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z" />
+ cx="64"
+ cy="135"
+ r="1" />
</g>
</g>
<g
@@ -58253,16 +57874,16 @@
id="ICON_VISIBLE_IPO_OFF">
<g
id="g27436"
- transform="translate(0.4838899,-6.2084382e-8)">
+ transform="translate(0.4838899)">
<path
id="path27438"
d="m 432.51611,305.45213 c -3,0 -7,2.04787 -5.5,4.04787 0.5,1.45213 2.49969,3.02073 5.49861,2.99979 3.00139,-0.021 4.82513,-1.62106 5.50139,-2.99995 2,-2.49984 -2.5,-4.04771 -5.5,-4.04771 z"
- style="opacity:0.25;fill:url(#radialGradient27452);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+ style="display:inline;opacity:0.25;fill:url(#radialGradient27452);fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:nodetypes="ccscz"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccscz"
- style="opacity:0.18000004;fill:url(#radialGradient27454);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+ style="display:inline;opacity:0.18000004;fill:url(#radialGradient27454);fill-opacity:1;fill-rule:evenodd;stroke:none"
d="m 432.51611,305.45213 c -3,0 -7.75,2.04787 -6.25,4.04787 0.5,1.45213 3.25108,3.52094 6.25,3.5 3.00139,-0.021 5.82374,-2.12111 6.5,-3.5 2,-2.49984 -3.5,-4.04787 -6.5,-4.04787 z"
id="path27440"
inkscape:connector-curvature="0" />
@@ -58291,7 +57912,7 @@
transform="translate(147,170.00001)"
id="ICON_LAMP_DATA">
<rect
- style="opacity:0;fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:6;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:6;marker:none;enable-background:accumulate"
id="rect27514"
width="16"
height="16"
@@ -58303,19 +57924,19 @@
<path
sodipodi:nodetypes="cssssssc"
id="path27518"
- d="m 38.5,327.9 c 0,1.37785 -0.5625,2.19999 -1.6875,3.29999 -1.125,1.1 0,3.3 -1.40625,3.3 l -2.8125,0 c -1.40625,0 -0.28125,-2.2 -1.40625,-3.3 -1.125,-1.1 -1.6875,-1.93254 -1.6875,-3.29999 0,-2.4288 2.016,-4.4 4.5,-4.4 2.484,0 4.5,1.9712 4.5,4.4 z"
+ d="m 38.5,327.9 c 0,1.37785 -0.5625,2.19999 -1.6875,3.29999 -1.125,1.1 0,3.3 -1.40625,3.3 h -2.8125 c -1.40625,0 -0.28125,-2.2 -1.40625,-3.3 -1.125,-1.1 -1.6875,-1.93254 -1.6875,-3.29999 0,-2.4288 2.016,-4.4 4.5,-4.4 2.484,0 4.5,1.9712 4.5,4.4 z"
style="opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.9;fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- d="m 38.5,327.9 c 0,1.37785 -0.5625,2.19999 -1.6875,3.29999 -1.125,1.1 0,3.3 -1.40625,3.3 l -2.8125,0 c -1.40625,0 -0.28125,-2.2 -1.40625,-3.3 -1.125,-1.1 -1.6875,-1.93254 -1.6875,-3.29999 0,-2.4288 2.016,-4.4 4.5,-4.4 2.484,0 4.5,1.9712 4.5,4.4 z"
+ style="opacity:0.9;fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 38.5,327.9 c 0,1.37785 -0.5625,2.19999 -1.6875,3.29999 -1.125,1.1 0,3.3 -1.40625,3.3 h -2.8125 c -1.40625,0 -0.28125,-2.2 -1.40625,-3.3 -1.125,-1.1 -1.6875,-1.93254 -1.6875,-3.29999 0,-2.4288 2.016,-4.4 4.5,-4.4 2.484,0 4.5,1.9712 4.5,4.4 z"
id="path27520"
sodipodi:nodetypes="cssssssc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path27522"
- d="m 33,338 2,0 0,1 -2,-10e-6 L 33,338 z"
+ d="m 33,338 h 2 v 1 l -2,-10e-6 z"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<rect
@@ -58326,9 +57947,9 @@
height="4.75"
width="6"
id="rect27524"
- style="fill:#24221c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#24221c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#736c54;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#736c54;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect27527"
width="4"
height="3"
@@ -58343,7 +57964,7 @@
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 32.25,336.24999 1.25,0"
+ d="M 32.25,336.24999 H 33.5"
id="path27531"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -58351,14 +57972,14 @@
inkscape:connector-curvature="0" />
<path
id="path27533"
- d="m 32.25,334.24999 1.25,0"
+ d="M 32.25,334.24999 H 33.5"
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<rect
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect27535"
width="0.25"
height="1"
@@ -58370,16 +57991,16 @@
height="1"
width="0.25"
id="rect27537"
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
y="336"
x="30.75"
height="1"
width="0.25"
id="rect27539"
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect27541"
width="0.25"
height="1"
@@ -58389,53 +58010,48 @@
sodipodi:type="inkscape:offset"
inkscape:radius="0.5"
inkscape:original="M 250.5 70.5 C 248.844 70.5 247.5 71.84032 247.5 73.5 C 247.5 74.394207 247.88111 75.199102 248.5 75.75 C 249.02979 76.22159 249.25 77.500001 249.5 77.5 C 249.75 77.5 251.25 77.500001 251.5 77.5 C 251.75 77.5 251.97036 76.220976 252.5 75.75 C 253.11956 75.199071 253.5 74.394767 253.5 73.5 C 253.5 71.840318 252.156 70.5 250.5 70.5 z "
- style="fill:url(#linearGradient27600);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.61155295;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient27600);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.61155295;marker:none;enable-background:accumulate"
id="path27543"
- d="m 250.5,70 c -1.92579,0 -3.5,1.570388 -3.5,3.5 0,1.036273 0.43284,1.981065 1.15625,2.625 0.12299,0.109481 0.35065,0.504334 0.5,0.875 0.0747,0.185333 0.1355,0.365966 0.21875,0.53125 0.0416,0.08264 0.0782,0.159602 0.15625,0.25 0.0781,0.0904 0.22443,0.218751 0.46875,0.21875 l 2,0 c 0.24442,0 0.3907,-0.128341 0.46875,-0.21875 0.078,-0.09041 0.11462,-0.167341 0.15625,-0.25 0.0832,-0.165318 0.14407,-0.345883 0.21875,-0.53125 0.14936,-0.370734 0.3774,-0.765984 0.5,-0.875 C 253.56794,75.481034 254,74.536495 254,73.5 254,71.570387 252.42579,70 250.5,70 z"
+ d="m 250.5,70 c -1.92579,0 -3.5,1.570388 -3.5,3.5 0,1.036273 0.44456,1.979112 1.16797,2.623047 0.12299,0.10948 0.32331,0.494568 0.47265,0.865234 0.0747,0.185333 0.14332,0.364013 0.22657,0.529297 0.0416,0.08264 0.084,0.163508 0.16211,0.253906 0.0781,0.0904 0.22638,0.228517 0.4707,0.228516 h 2 c 0.24442,0 0.39265,-0.138106 0.4707,-0.228516 0.0781,-0.09041 0.12244,-0.171247 0.16407,-0.253906 0.0832,-0.165318 0.14992,-0.34393 0.22461,-0.529297 0.14936,-0.370734 0.35006,-0.756218 0.47265,-0.865234 C 253.55622,75.479081 254,74.536495 254,73.5 254,71.570387 252.42579,70 250.5,70 Z"
transform="matrix(1.1428575,0,0,1.1249998,-252.2858,245.25001)" />
<path
transform="matrix(1.1428578,0,0,1.1562502,-252.28587,242.81248)"
- d="m 250.5,70 c -1.92579,0 -3.5,1.570388 -3.5,3.5 0,1.036273 0.43284,1.981065 1.15625,2.625 0.12299,0.109481 0.35065,0.504334 0.5,0.875 0.0747,0.185333 0.1355,0.365966 0.21875,0.53125 0.0416,0.08264 0.0782,0.159602 0.15625,0.25 0.0781,0.0904 0.22443,0.218751 0.46875,0.21875 l 2,0 c 0.24442,0 0.3907,-0.128341 0.46875,-0.21875 0.078,-0.09041 0.11462,-0.167341 0.15625,-0.25 0.0832,-0.165318 0.14407,-0.345883 0.21875,-0.53125 0.14936,-0.370734 0.3774,-0.765984 0.5,-0.875 C 253.56794,75.481034 254,74.536495 254,73.5 254,71.570387 252.42579,70 250.5,70 z"
+ d="m 250.5,70 c -1.92579,0 -3.5,1.570388 -3.5,3.5 0,1.036273 0.44456,1.979112 1.16797,2.623047 0.12299,0.10948 0.32331,0.494568 0.47265,0.865234 0.0747,0.185333 0.14332,0.364013 0.22657,0.529297 0.0416,0.08264 0.084,0.163508 0.16211,0.253906 0.0781,0.0904 0.22638,0.228517 0.4707,0.228516 h 2 c 0.24442,0 0.39265,-0.138106 0.4707,-0.228516 0.0781,-0.09041 0.12244,-0.171247 0.16407,-0.253906 0.0832,-0.165318 0.14992,-0.34393 0.22461,-0.529297 0.14936,-0.370734 0.35006,-0.756218 0.47265,-0.865234 C 253.55622,75.479081 254,74.536495 254,73.5 254,71.570387 252.42579,70 250.5,70 Z"
id="path27545"
- style="opacity:0.6;fill:url(#radialGradient27602);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.61155295;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:url(#radialGradient27602);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.61155295;marker:none;enable-background:accumulate"
inkscape:original="M 250.5 70.5 C 248.844 70.5 247.5 71.84032 247.5 73.5 C 247.5 74.394207 247.88111 75.199102 248.5 75.75 C 249.02979 76.22159 249.25 77.500001 249.5 77.5 C 249.75 77.5 251.25 77.500001 251.5 77.5 C 251.75 77.5 251.97036 76.220976 252.5 75.75 C 253.11956 75.199071 253.5 74.394767 253.5 73.5 C 253.5 71.840318 252.156 70.5 250.5 70.5 z "
inkscape:radius="0.5"
sodipodi:type="inkscape:offset" />
<path
id="path27547"
- style="fill:none;stroke:url(#linearGradient27604);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient27604);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
d="m 34.000001,324.48827 c 1.932,0 3.5,1.50111 3.5,3.35068 0,0.99715 -0.455735,1.89301 -1.178554,2.50697 -0.617914,0.52487 -1.154779,1.38605 -1.154779,2.77907 m -1.166667,-8.63672 c -1.932001,0 -3.500001,1.50111 -3.500001,3.35068 0,0.99715 0.455736,1.89301 1.178556,2.50697 0.617913,0.52487 1.154778,1.38605 1.154778,2.77907"
inkscape:connector-curvature="0" />
- <path
- sodipodi:type="arc"
- style="opacity:0.25;fill:url(#radialGradient27606);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:url(#radialGradient27606);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
id="path27549"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(0.9552133,0,0,0.9315985,-40.901258,-140.2522)" />
- <path
+ transform="matrix(0.9552133,0,0,0.9315985,-40.901258,-140.2522)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <circle
transform="matrix(0.99567,0,-0.00787885,1,-30.663533,191)"
- sodipodi:type="arc"
- style="opacity:0.9;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74699998;marker:none;display:inline"
+ style="display:inline;opacity:0.9;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74699998;marker:none"
id="path27551"
- sodipodi:cx="64"
- sodipodi:cy="135"
- sodipodi:rx="1"
- sodipodi:ry="1"
- d="m 65,135 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="64"
+ cy="135"
+ r="1" />
<path
d="m 34.000001,324.48827 c 1.932,0 3.5,1.50111 3.5,3.35068 0,0.99715 -0.455735,1.89301 -1.178554,2.50697 -0.617914,0.52487 -1.154779,1.38605 -1.154779,2.77907 m -1.166667,-8.63672 c -1.932001,0 -3.500001,1.50111 -3.500001,3.35068 0,0.99715 0.455736,1.89301 1.178556,2.50697 0.617913,0.52487 1.154778,1.38605 1.154778,2.77907"
- style="fill:none;stroke:url(#radialGradient27608);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;display:inline"
+ style="display:inline;fill:none;stroke:url(#radialGradient27608);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
id="path27554"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.85;fill:#3d3829;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.85;fill:#3d3829;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate"
id="rect27557"
width="5"
height="0.75"
@@ -58443,18 +58059,18 @@
y="333" />
<path
style="fill:#6c6753;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 32.5,337.01145 3,-0.0115 0,1 -3,0.0114 0,-0.99999 0,9e-5 0,0 0,0 z"
+ d="m 32.5,337.01145 3,-0.0115 v 1 l -3,0.0114 v -0.99999 z"
id="path27564"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.2;fill:url(#linearGradient27610);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 33,330 0,2.75 2,0 0,-2.75 -2,0 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:url(#linearGradient27610);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate"
+ d="m 33,330 v 2.75 h 2 V 330 Z"
id="path27566"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.6;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000005;marker:none;enable-background:accumulate"
id="rect27585"
width="1"
height="1"
@@ -58463,17 +58079,17 @@
<path
sodipodi:nodetypes="csscssc"
id="path27587"
- style="fill:none;stroke:url(#radialGradient27612);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;display:inline"
+ style="display:inline;fill:none;stroke:url(#radialGradient27612);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
d="m 32.875,333.12498 c 0,-1.39113 -0.517691,-2.25114 -1.113536,-2.77529 C 31.064459,329.73656 30.5,328.93567 30.5,327.93988 c 0,-1.84706 1.637,-3.43989 3.5,-3.43989 1.863,0 3.5,1.59283 3.5,3.43989 0,0.99579 -0.564459,1.79668 -1.261464,2.40981 -0.595845,0.52415 -1.113536,1.38416 -1.113536,2.77529"
inkscape:connector-curvature="0" />
<path
style="opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 33,338.00001 0.5,0 0,1 L 33,339 l 0,-0.99999 z"
+ d="m 33,338.00001 h 0.5 v 1 L 33,339 Z"
id="path27590"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.8;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.8;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000005;marker:none;enable-background:accumulate"
id="rect27594"
width="2"
height="1"
@@ -58485,7 +58101,7 @@
height="1"
width="1"
id="rect27596"
- style="opacity:0.6;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000005;marker:none;enable-background:accumulate" />
</g>
</g>
<g
@@ -58499,19 +58115,19 @@
height="16"
width="16"
id="rect17370"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<rect
y="472.5"
x="-43.483856"
height="13"
width="12.983856"
id="rect17372"
- style="fill:url(#linearGradient17442);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;display:inline" />
+ style="display:inline;fill:url(#linearGradient17442);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1" />
<path
sodipodi:nodetypes="cccc"
id="path17374"
- d="m -31.5,473.50001 -10.983862,0 0,11"
- style="fill:none;stroke:url(#linearGradient17444);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0.5;display:inline"
+ d="m -31.5,473.50001 h -10.983862 v 11"
+ style="display:inline;fill:none;stroke:url(#linearGradient17444);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0.5;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
<rect
@@ -58520,9 +58136,9 @@
height="5"
width="5"
id="rect17376"
- style="fill:#999999;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#999999;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.89999998;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.89999998;marker:none;enable-background:accumulate"
id="rect17379"
width="5"
height="5"
@@ -58531,8 +58147,8 @@
<path
inkscape:connector-curvature="0"
id="rect28902"
- d="m 263,16 0,3 1,0 0,-2 2,0 0,-1 -3,0 z"
- style="opacity:0.25;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m 263,16 v 3 h 1 v -2 h 2 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate" />
</g>
<g
style="display:inline;enable-background:new"
@@ -58544,34 +58160,30 @@
height="16"
width="16"
id="rect28083"
- style="opacity:0;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<g
transform="matrix(1.2930992,0,0,1.3011246,677.85367,159.07065)"
- style="opacity:0.96000001;display:inline"
+ style="display:inline;opacity:0.96000001"
id="g28085">
- <path
+ <ellipse
transform="matrix(1.1162596,0,0,1.1065394,67.801614,-350.49863)"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path28087"
- style="opacity:0.25;fill:url(#radialGradient28099);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="opacity:0.5;fill:url(#radialGradient28101);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:url(#radialGradient28099);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:url(#radialGradient28101);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
id="path28089"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(-1.3568764,-0.3150232,0.3151738,-1.348049,102.81491,906.57916)" />
+ transform="matrix(-1.3568764,-0.3150232,0.3151738,-1.348049,102.81491,906.57916)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
</g>
<path
- style="fill:url(#linearGradient28103);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient28103);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 883.5,426.5 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-3.5 2.5,-4.5 5,-10 2.5,5.5 5,6.5 5,10 z"
id="path28091"
sodipodi:nodetypes="csscc"
@@ -58580,40 +58192,35 @@
sodipodi:nodetypes="csscssc"
id="path28093"
d="m 878.5,418.40909 c 0.4375,0.96023 0.90625,1.78977 1.36328,2.53255 0.45703,0.74278 0.90234,1.3988 1.29297,2.01196 0.78125,1.22633 1.34375,2.28125 1.34375,3.5161 0,2.22473 -1.792,4.0303 -4,4.0303 -2.208,0 -4,-1.80557 -4,-4.0303 0,-2.41818 2.25,-4.2197 4,-8.06061 z"
- style="fill:none;stroke:url(#linearGradient28105);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient28105);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
- <path
- sodipodi:type="arc"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="path28095"
- sodipodi:cx="878.5"
- sodipodi:cy="425"
- sodipodi:rx="1.5"
- sodipodi:ry="1"
- d="m 880,425 a 1.5,1 0 0 1 -1.5,1 1.5,1 0 0 1 -1.5,-1 1.5,1 0 0 1 1.5,-1 1.5,1 0 0 1 1.5,1 z"
- transform="matrix(0.6434675,-0.7329672,0.7942866,0.5945179,-26.858149,815.24158)" />
- <path
+ transform="matrix(0.6434675,-0.7329672,0.7942866,0.5945179,-26.858149,815.24158)"
+ cx="878.5"
+ cy="425"
+ rx="1.5"
+ ry="1" />
+ <circle
inkscape:transform-center-y="-7.1785015"
inkscape:transform-center-x="-7.136318"
- sodipodi:type="arc"
- style="opacity:0.4;fill:url(#radialGradient28107);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69954133;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.4;fill:url(#radialGradient28107);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69954133;marker:none;enable-background:accumulate"
id="path28097"
- sodipodi:cx="258.5"
- sodipodi:cy="78.5"
- sodipodi:rx="3.5"
- sodipodi:ry="3.5"
- d="M 262,78.5 A 3.5,3.5 0 0 1 258.5,82 3.5,3.5 0 0 1 255,78.5 3.5,3.5 0 0 1 258.5,75 3.5,3.5 0 0 1 262,78.5 Z"
transform="matrix(-1.2857095,0,0,1.2857143,1210.8559,325.57143)"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="258.5"
+ cy="78.5"
+ r="3.5" />
</g>
<g
transform="translate(-94.999994,403.00001)"
id="ICON_BORDERMOVE"
style="display:inline;enable-background:new">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect30298"
width="16"
height="16"
@@ -58622,7 +58229,7 @@
<g
id="g30300">
<g
- transform="translate(0.01612278,0)"
+ transform="translate(0.01612278)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -58632,7 +58239,7 @@
style="fill:#ff943d;fill-opacity:1;stroke:none"
id="g30304">
<rect
- transform="matrix(0,-1,1,0,0,0)"
+ transform="rotate(-90)"
style="fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="rect30306"
width="1"
@@ -58653,7 +58260,7 @@
width="1"
id="rect30311"
style="fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none"
- transform="matrix(0,-1,1,0,0,0)" />
+ transform="rotate(-90)" />
<rect
style="fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="rect30313"
@@ -58682,9 +58289,9 @@
width="1"
id="rect30326"
style="fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none"
- transform="matrix(0,-1,1,0,0,0)" />
+ transform="rotate(-90)" />
<rect
- transform="matrix(0,-1,1,0,0,0)"
+ transform="rotate(-90)"
style="fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="rect30328"
width="1"
@@ -58692,7 +58299,7 @@
x="-211"
y="171.97594" />
<rect
- transform="matrix(0,-1,1,0,0,0)"
+ transform="rotate(-90)"
style="fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="rect30330"
width="1"
@@ -58711,7 +58318,7 @@
style="fill:#532500;fill-opacity:1"
id="g30334">
<rect
- transform="matrix(0,-1,1,0,0,0)"
+ transform="rotate(-90)"
style="fill:#552c00;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="rect30336"
width="1"
@@ -58746,9 +58353,9 @@
width="1"
id="rect30344"
style="fill:#552c00;fill-opacity:1;fill-rule:nonzero;stroke:none"
- transform="matrix(0,-1,1,0,0,0)" />
+ transform="rotate(-90)" />
<rect
- transform="matrix(0,-1,1,0,0,0)"
+ transform="rotate(-90)"
style="fill:#552c00;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="rect30346"
width="1"
@@ -58762,7 +58369,7 @@
width="1"
id="rect30348"
style="fill:#552c00;fill-opacity:1;fill-rule:nonzero;stroke:none"
- transform="matrix(0,-1,1,0,0,0)" />
+ transform="rotate(-90)" />
<rect
y="202"
x="174.98387"
@@ -58784,14 +58391,14 @@
width="1"
id="rect30355"
style="fill:#552c00;fill-opacity:1;fill-rule:nonzero;stroke:none"
- transform="matrix(0,-1,1,0,0,0)" />
+ transform="rotate(-90)" />
</g>
</g>
<path
sodipodi:nodetypes="ccccccc"
id="path30357"
- d="m 163.99999,199 6.51562,0 1.23438,3.25 3.25,1.20312 0,6.54688 -11,0 0,-11 z"
- style="opacity:0.25;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 163.99999,199 h 6.51562 l 1.23438,3.25 3.25,1.20312 V 210 h -11 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<g
transform="matrix(0.781818,0,0,0.781818,38.760709,42.85549)"
@@ -58800,23 +58407,20 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="g30359"
style="display:inline">
- <path
+ <circle
inkscape:transform-center-y="-6.3853012"
inkscape:transform-center-x="-6.3473305"
- sodipodi:type="arc"
- style="fill:none;stroke:#000000;stroke-width:0.78698397;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:0.78698397;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
id="path30361"
- sodipodi:cx="258.5"
- sodipodi:cy="78.5"
- sodipodi:rx="3.5"
- sodipodi:ry="3.5"
- d="M 262,78.5 A 3.5,3.5 0 0 1 258.5,82 3.5,3.5 0 0 1 255,78.5 3.5,3.5 0 0 1 258.5,75 3.5,3.5 0 0 1 262,78.5 Z"
transform="matrix(-1.4627004,0,0,1.4628053,551.73128,85.525552)"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="258.5"
+ cy="78.5"
+ r="3.5" />
<path
- style="fill:none;stroke:#28170b;stroke-width:4.47674513;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#28170b;stroke-width:4.47674513;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 164.66657,209.31279 3.51745,-3.51744"
id="path30363"
sodipodi:nodetypes="cc"
@@ -58831,10 +58435,10 @@
sodipodi:nodetypes="cc"
id="path30365"
d="m 168.5,205.5 0.96309,-0.98372"
- style="fill:none;stroke:#000000;stroke-width:2.5581398;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:2.5581398;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#cccccc;stroke-width:1.40697706;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#cccccc;stroke-width:1.40697706;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 168.5,205.5 1.28285,-1.30349"
id="path30367"
sodipodi:nodetypes="cc"
@@ -58848,16 +58452,13 @@
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
transform="matrix(0.878699,0,0,0.877142,14.70687,20.74499)">
- <path
- sodipodi:type="arc"
- style="fill:url(#linearGradient30389);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient30391);stroke-width:1.16848361;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient30389);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient30391);stroke-width:1.16848361;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path30371"
- sodipodi:cx="258.5"
- sodipodi:cy="78.5"
- sodipodi:rx="3.5"
- sodipodi:ry="3.5"
- d="M 262,78.5 A 3.5,3.5 0 0 1 258.5,82 3.5,3.5 0 0 1 255,78.5 3.5,3.5 0 0 1 258.5,75 3.5,3.5 0 0 1 262,78.5 Z"
- transform="matrix(-1.2468441,0,0,1.246865,503.16273,106.89331)" />
+ transform="matrix(-1.2468441,0,0,1.246865,503.16273,106.89331)"
+ cx="258.5"
+ cy="78.5"
+ r="3.5" />
</g>
<path
inkscape:export-ydpi="90"
@@ -58866,10 +58467,10 @@
sodipodi:nodetypes="cc"
id="path30373"
d="m 164.66657,209.31279 3.51745,-3.51744"
- style="fill:none;stroke:#a05a2c;stroke-width:2.55814004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#a05a2c;stroke-width:2.55814004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:1.2790699;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:1.2790699;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 164.02704,208.99303 3.83721,-3.83721"
id="path30375"
sodipodi:nodetypes="cc"
@@ -58877,61 +58478,51 @@
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
transform="matrix(-1.4627004,0,0,1.4628053,551.73128,85.525552)"
- d="M 262,78.5 A 3.5,3.5 0 0 1 258.5,82 3.5,3.5 0 0 1 255,78.5 3.5,3.5 0 0 1 258.5,75 3.5,3.5 0 0 1 262,78.5 Z"
- sodipodi:ry="3.5"
- sodipodi:rx="3.5"
- sodipodi:cy="78.5"
- sodipodi:cx="258.5"
id="path30377"
- style="opacity:0.5;fill:url(#radialGradient30393);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69954133;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:url(#radialGradient30393);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69954133;marker:none;enable-background:accumulate"
inkscape:transform-center-x="-6.3473305"
- inkscape:transform-center-y="-6.3853012" />
+ inkscape:transform-center-y="-6.3853012"
+ cx="258.5"
+ cy="78.5"
+ r="3.5" />
<g
id="g30379"
- style="opacity:0.96000001;display:inline"
+ style="display:inline;opacity:0.96000001"
transform="matrix(0.9729196,0,0,0.9789579,9.7047721,-0.8010785)">
- <path
- sodipodi:type="arc"
- style="opacity:0.25;fill:url(#radialGradient30395);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:url(#radialGradient30395);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
id="path30381"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(1.1162596,0,0,1.1065394,80.948334,-350.49863)" />
- <path
+ transform="matrix(1.1162596,0,0,1.1065394,80.948334,-350.49863)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
transform="matrix(-1.087144,-0.2518404,0.2525206,-1.0776772,126.97246,766.619)"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path30383"
- style="opacity:0.25;fill:url(#radialGradient30397);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:url(#radialGradient30397);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
</g>
- <path
- d="m 65,135 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- sodipodi:ry="1"
- sodipodi:rx="1"
- sodipodi:cy="135"
- sodipodi:cx="64"
+ <circle
id="path30385"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74699998;marker:none;display:inline"
- sodipodi:type="arc"
- transform="matrix(1.2790738,0,0,1.2790735,89.840744,25.765779)" />
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74699998;marker:none"
+ transform="matrix(1.2790738,0,0,1.2790735,89.840744,25.765779)"
+ cx="64"
+ cy="135"
+ r="1" />
</g>
<path
id="path30387"
- d="m 163.99999,199 0,11 1,0 0,-10 6,0 0,-1 -7,0 z"
- style="opacity:0.12999998;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 163.99999,199 v 11 h 1 v -10 h 6 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.12999998;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
</g>
@@ -58944,7 +58535,7 @@
height="16"
width="16"
id="rect27661"
- style="opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<g
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
@@ -58953,42 +58544,36 @@
id="g27663"
style="display:inline"
clip-path="url(#clipPath42711)">
- <path
+ <circle
transform="matrix(0.75,0,0,0.75,29.5,135)"
- sodipodi:type="arc"
- style="fill:url(#linearGradient42435);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:1.45480967;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient42435);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:1.45480967;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path27665"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
clip-path="none"
- mask="none" />
- <path
+ mask="none"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.6147126,0,0,0.6147118,47.3579,150.96368)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient42437);stroke-width:1.77499008;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient42437);stroke-width:1.77499008;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path27667"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
transform="translate(-167.99872,-18.991228)"
style="opacity:0.55"
id="g27669">
<path
- style="fill:url(#linearGradient42432);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.87159598;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 243.50439,274.05251 -6.46154,-3.3e-4 0,-12.12435 6.46154,3.3e-4"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient42432);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.87159598;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 243.50439,274.05251 -6.46154,-3.3e-4 v -12.12435 l 6.46154,3.3e-4"
id="path27671"
sodipodi:nodetypes="cccc"
transform="matrix(0.9285719,0,0,0.9072647,16.387388,24.853058)"
@@ -58997,16 +58582,16 @@
sodipodi:nodetypes="ccccc"
id="path27673"
d="m 243.50439,272.9503 -5.38461,-3.3e-4 0.001,-4.9503 -0.001,-4.96963 5.38461,3.3e-4"
- style="fill:none;stroke:#ffffff;stroke-width:1.08949494;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1.08949494;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
transform="matrix(0.9285719,0,0,0.9072647,16.387388,24.853058)"
inkscape:connector-curvature="0" />
</g>
<g
- transform="matrix(0.7071068,-0.7071068,0.7071068,0.7071068,-167.74474,113.52244)"
+ transform="rotate(-45,53.161345,259.24703)"
style="display:inline;enable-background:new"
id="g27675">
<path
- style="opacity:0.2;fill:none;stroke:#000000;stroke-width:1.49999988;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:none;stroke:#000000;stroke-width:1.49999988;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 73.54505,272.57627 1.06066,-2.47487"
id="path33728"
sodipodi:nodetypes="cc"
@@ -59015,22 +58600,22 @@
sodipodi:nodetypes="cc"
id="path27679"
d="m 73.545051,272.22272 7.071067,-7.07107"
- style="opacity:0.1;fill:none;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:none;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
id="path33730"
d="m 78.494797,266.21231 2.651651,-0.88388"
- style="opacity:0.2;fill:none;stroke:#000000;stroke-width:1.49999988;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:none;stroke:#000000;stroke-width:1.49999988;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
d="m 71.600508,272.3995 0.707107,-0.7071 m 2.121319,-2.12133 0.707107,-0.7071 m 2.121321,-2.12133 0.707107,-0.7071 m 2.121319,-2.12133 0.707107,-0.7071"
- style="opacity:0.75;fill:none;stroke:#28220b;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.75;fill:none;stroke:#28220b;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
id="path42388"
inkscape:connector-curvature="0" />
<path
id="path42359"
- style="fill:none;stroke:#ffe991;stroke-width:1.19999993;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffe991;stroke-width:1.19999993;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 71.600508,272.3995 0.707107,-0.7071 m 2.121319,-2.12133 0.707107,-0.7071 m 2.121321,-2.12133 0.707107,-0.7071 m 2.121319,-2.12133 0.707107,-0.7071"
inkscape:connector-curvature="0" />
</g>
@@ -59038,7 +58623,7 @@
<g
id="ICON_DISK_DRIVE">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect29107"
width="16"
height="16"
@@ -59050,16 +58635,16 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
id="path29110"
- d="m 531,58 6,-2.5 7.99996,3.49998 0,2.75 -5.99999,3.24999 L 531,60.75 531,58 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ d="m 531,58 6,-2.5 7.99996,3.49998 v 2.75 L 538.99997,64.99997 531,60.75 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
sodipodi:nodetypes="ccccccc"
- style="fill:#9e9e9e;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 531,58 6,-2.5 7.99996,3.49998 0,0.5 -6,3 L 531,58.56558 531,58 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#9e9e9e;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
+ d="m 531,58 6,-2.5 7.99996,3.49998 v 0.5 l -6,3 L 531,58.56558 Z"
id="path29112" />
<path
inkscape:connector-curvature="0"
@@ -59067,7 +58652,7 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
id="path29114"
- d="M 531.00001,60.75 531,58.5 l 7.99996,3.99998 0.01,2.49885 -8.00991,-4.24883 -4e-5,0 z"
+ d="M 531.00001,60.75 531,58.5 l 7.99996,3.99998 0.01,2.49885 -8.00991,-4.24883 z"
style="fill:#848484;fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:nodetypes="ccccc" />
<path
@@ -59075,14 +58660,14 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
- style="fill:#383838;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89207077px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 544.99996,61.74998 0,-2.25 -6,3 c 0,2.58362 0,1.9329 0,2.5 l 6,-3.25 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#383838;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89207077px;marker:none;enable-background:accumulate"
+ d="m 544.99996,61.74998 v -2.25 l -6,3 c 0,2.58362 0,1.9329 0,2.5 z"
id="path29116"
sodipodi:nodetypes="ccccc" />
<path
inkscape:connector-curvature="0"
style="fill:none;stroke:url(#linearGradient56084);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
- d="m 531.5,58.5 0,2 7.49996,3.99998 5.5,-3 0,-2"
+ d="m 531.5,58.5 v 2 l 7.49996,3.99998 5.5,-3 v -2"
id="path29118"
sodipodi:nodetypes="ccccc" />
<path
@@ -59091,18 +58676,16 @@
d="m 531.5,58 7.49996,3.74998"
id="path29120"
sodipodi:nodetypes="cc" />
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient29129);stroke-width:1.08012342;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient29129);stroke-width:1.08012342;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path29122"
- sodipodi:cx="749"
- sodipodi:cy="420.25"
- sodipodi:rx="2.5"
- sodipodi:ry="1.75"
- d="m 751.5,420.25 a 2.5,1.75 0 1 1 -5,0 2.5,1.75 0 1 1 5,0 z"
- transform="matrix(1,0,0,0.8571429,-212,-302.2143)" />
- <rect
- style="fill:#66ff00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ transform="matrix(1,0,0,0.8571429,-212,-302.2143)"
+ cx="749"
+ cy="420.25"
+ rx="2.5"
+ ry="1.75" />
+ <rect
+ style="display:inline;overflow:visible;visibility:visible;fill:#66ff00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect29125"
width="1"
height="1"
@@ -59114,7 +58697,7 @@
transform="translate(-0.1658249,128.41502)"
id="ICON_WORLD_DATA">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect27746"
width="16"
height="16"
@@ -59126,84 +58709,69 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
- <path
- sodipodi:type="arc"
- style="fill:#4169a5;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:1.22966909;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;fill:#4169a5;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:1.22966909;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path27750"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(0.787566,0,0,0.779223,26.709197,21.3179)" />
- <path
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
+ transform="matrix(0.787566,0,0,0.779223,26.709197,21.3179)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
id="path27752"
style="fill:url(#linearGradient27767);fill-opacity:1;fill-rule:nonzero;stroke:none"
- sodipodi:type="arc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(0.666432,0,0,0.659342,42.69924,35.46375)" />
- <path
+ transform="matrix(0.666432,0,0,0.659342,42.69924,35.46375)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.3631382,0,0,0.3593485,81.755824,69.904768)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- sodipodi:type="arc"
style="opacity:0.7;fill:url(#linearGradient27769);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path27755"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z" />
+ cx="132"
+ cy="118"
+ r="8" />
<path
sodipodi:nodetypes="cc"
id="path27757"
d="m 274.98515,70.995347 c 0,0.953349 -1,1.906699 -2,1.906699"
- style="opacity:0.5;fill:none;stroke:#ffe680;stroke-width:1.00161445px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline;filter:url(#filter13996)"
+ style="display:inline;opacity:0.5;fill:none;stroke:#ffe680;stroke-width:1.00161445px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;filter:url(#filter13996)"
transform="matrix(0.9688184,0,0,0.9547322,-131.63668,47.640696)"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccccccssscsscccscccccccccccccccsccccc"
id="path27761"
- d="m 130.67404,112.3079 c 0.0244,0.78706 -0.15754,1.63085 0.59269,2.02213 0.71197,-0.0434 1.49133,0.64122 1.35667,1.40517 -0.26776,0.77861 0.14071,1.12325 0.95576,1.36401 0.57868,-0.0716 0.79053,-0.93546 0.87357,-1.36401 0.0948,-1.27121 0.51542,-1.09421 0.82108,-1.98991 -0.45733,-0.91502 -0.003,-1.04443 -0.72629,-1.43739 m -1.00945,-3.89288 c -0.4426,0.34378 -0.24372,1.04314 -0.66162,1.39841 -0.45372,0.13628 -0.78226,-0.0605 -1.16771,0.43164 -0.30841,1.10457 0.35004,1.22306 0.90205,1.10457 0.49538,-0.0502 0.61419,-0.94321 0.97928,-0.37853 0.0831,0.10976 0.71917,-0.0403 0.86266,0.18898 0.0669,0.10682 -0.11785,0.0255 -0.14729,0.18955 -0.0428,0.23847 0.27734,0.37341 0.372,0.3824 0.32089,0.0305 0.60005,0.92548 0.83846,1.05499 0,0.46738 0.0924,-0.6774 0.3515,-0.78703 0.22948,-0.0971 0.47929,0.10731 0.5,0 0.29928,-1.55081 -1.26113,-3.00604 -2.82933,-3.58498 z M 128.96474,107.5 c -0.6111,1.01384 0.85343,1.46103 1.73001,1.21329 0.57897,-0.37879 1.00716,-0.92331 0.55665,-1.21329 -0.20614,-0.1415 -2.07706,0.0431 -2.28666,0 l 0,0 0,0 0,0 z m -1.372,1.37253 c -0.49575,-0.14959 0.44952,-0.11945 0.45733,0.45751 0.1696,0.54756 -0.42801,0.23756 0,0.45752 0.70893,0.1644 0.35328,1.70031 -0.28114,1.56208 -0.56042,0.10119 -0.43915,0.95826 -1.64865,0.88279 -0.0836,0.0755 -1.04512,0.61593 -0.81421,1.21521 1.12968,0.30162 -0.36816,1.26478 -0.43867,0.55236 -0.15441,-0.49797 -0.62853,-1.11348 -0.43994,-1.68674 0.11734,-0.63627 0.5689,-1.12263 0.82646,-1.69865 0.36225,-0.61946 0.89084,-1.17688 1.57758,-1.42595 0.21411,-0.16799 0.46159,-0.41691 0.76124,-0.31613 l 0,0 0,0 0,0 z m -0.91467,5.03262 c -0.55163,-0.27585 -0.72934,0.28829 -0.60377,0.7984 0.15577,0.47138 0.52607,0.97695 0.72628,1.43739 0.40435,0.49619 1.512,1.34081 2.17883,1.67696 0.31768,0.16015 0.48418,0 0.24209,-0.23956 -0.31367,-0.6375 -1.14073,-1.94893 -0.48418,-2.15609 0.59647,-0.60342 0.34203,-1.58773 -0.48419,-1.43739 -0.54779,-0.25818 -0.75551,-0.39899 -1.38855,-0.0752 -0.0558,0.0743 -0.12403,0.006 -0.18651,-0.004 l 0,-5.1e-4 0,0 0,0 z"
+ d="m 130.67404,112.3079 c 0.0244,0.78706 -0.15754,1.63085 0.59269,2.02213 0.71197,-0.0434 1.49133,0.64122 1.35667,1.40517 -0.26776,0.77861 0.14071,1.12325 0.95576,1.36401 0.57868,-0.0716 0.79053,-0.93546 0.87357,-1.36401 0.0948,-1.27121 0.51542,-1.09421 0.82108,-1.98991 -0.45733,-0.91502 -0.003,-1.04443 -0.72629,-1.43739 m -1.00945,-3.89288 c -0.4426,0.34378 -0.24372,1.04314 -0.66162,1.39841 -0.45372,0.13628 -0.78226,-0.0605 -1.16771,0.43164 -0.30841,1.10457 0.35004,1.22306 0.90205,1.10457 0.49538,-0.0502 0.61419,-0.94321 0.97928,-0.37853 0.0831,0.10976 0.71917,-0.0403 0.86266,0.18898 0.0669,0.10682 -0.11785,0.0255 -0.14729,0.18955 -0.0428,0.23847 0.27734,0.37341 0.372,0.3824 0.32089,0.0305 0.60005,0.92548 0.83846,1.05499 0,0.46738 0.0924,-0.6774 0.3515,-0.78703 0.22948,-0.0971 0.47929,0.10731 0.5,0 0.29928,-1.55081 -1.26113,-3.00604 -2.82933,-3.58498 z M 128.96474,107.5 c -0.6111,1.01384 0.85343,1.46103 1.73001,1.21329 0.57897,-0.37879 1.00716,-0.92331 0.55665,-1.21329 -0.20614,-0.1415 -2.07706,0.0431 -2.28666,0 z m -1.372,1.37253 c -0.49575,-0.14959 0.44952,-0.11945 0.45733,0.45751 0.1696,0.54756 -0.42801,0.23756 0,0.45752 0.70893,0.1644 0.35328,1.70031 -0.28114,1.56208 -0.56042,0.10119 -0.43915,0.95826 -1.64865,0.88279 -0.0836,0.0755 -1.04512,0.61593 -0.81421,1.21521 1.12968,0.30162 -0.36816,1.26478 -0.43867,0.55236 -0.15441,-0.49797 -0.62853,-1.11348 -0.43994,-1.68674 0.11734,-0.63627 0.5689,-1.12263 0.82646,-1.69865 0.36225,-0.61946 0.89084,-1.17688 1.57758,-1.42595 0.21411,-0.16799 0.46159,-0.41691 0.76124,-0.31613 z m -0.91467,5.03262 c -0.55163,-0.27585 -0.72934,0.28829 -0.60377,0.7984 0.15577,0.47138 0.52607,0.97695 0.72628,1.43739 0.40435,0.49619 1.512,1.34081 2.17883,1.67696 0.31768,0.16015 0.48418,0 0.24209,-0.23956 -0.31367,-0.6375 -1.14073,-1.94893 -0.48418,-2.15609 0.59647,-0.60342 0.34203,-1.58773 -0.48419,-1.43739 -0.54779,-0.25818 -0.75551,-0.39899 -1.38855,-0.0752 -0.0558,0.0743 -0.12403,0.006 -0.18651,-0.004 z"
style="fill:url(#linearGradient27771);fill-opacity:1;fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path27763"
- style="opacity:0.8;fill:none;stroke:url(#linearGradient27773);stroke-width:1.45454657;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
- sodipodi:type="arc"
- transform="matrix(0.6657538,0,0,0.6588051,42.794535,35.527157)" />
- <path
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
+ style="display:inline;opacity:0.8;fill:none;stroke:url(#linearGradient27773);stroke-width:1.45454657;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.6657538,0,0,0.6588051,42.794535,35.527157)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
id="path27765"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
- sodipodi:type="arc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(0.06052282,0,0,0.05989117,121.21686,103.80334)" />
+ transform="matrix(0.06052282,0,0,0.05989117,121.21686,103.80334)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
@@ -59211,13 +58779,13 @@
transform="translate(0,2)">
<g
id="g31771"
- transform="matrix(0,-1,1,0,249,491)">
+ transform="rotate(-90,370,121)">
<g
- style="opacity:0.7;display:inline"
+ style="display:inline;opacity:0.7"
id="g31773"
transform="translate(257,86)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect31775"
width="16"
height="16"
@@ -59228,15 +58796,15 @@
id="g31784"
transform="matrix(-1,0,0,1,656,0)">
<path
- style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 323.5,137.5 0,9 3,0 3,0 3,0 0,-4 0,-5 -3,0 0,6 -3,0 0,-6 -3,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 323.5,137.5 v 9 h 3 3 3 v -4 -5 h -3 v 6 h -3 v -6 z"
id="path31786"
sodipodi:nodetypes="cccccccccccc"
inkscape:connector-curvature="0" />
<path
id="path31788"
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
- d="m 324.5,145.5 0,-7 1,0 m 6,0 -1,0 0,6 -4,0"
+ d="m 324.5,145.5 v -7 h 1 m 6,0 h -1 v 6 h -4"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -59252,12 +58820,12 @@
id="g31807">
<path
id="path31804"
- d="m 384.5,138.5 0,-3 3,0"
- style="fill:none;stroke:#00112b;stroke-width:2.4000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 384.5,138.5 v -3 h 3"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#00112b;stroke-width:2.4000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#b9d5ff;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 384.5,138.5 0,-3 3,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#b9d5ff;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 384.5,138.5 v -3 h 3"
id="path31796"
inkscape:connector-curvature="0" />
</g>
@@ -59265,14 +58833,14 @@
transform="matrix(-1,0,0,1,782,0)"
id="g31811">
<path
- style="fill:none;stroke:#00112b;stroke-width:2.4000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
- d="m 384.5,138.5 0,-3 3,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#00112b;stroke-width:2.4000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
+ d="m 384.5,138.5 v -3 h 3"
id="path31813"
inkscape:connector-curvature="0" />
<path
id="path31819"
- d="m 384.5,138.5 0,-3 3,0"
- style="fill:none;stroke:#b9d5ff;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 384.5,138.5 v -3 h 3"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#b9d5ff;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -59282,14 +58850,14 @@
<g
id="g31833">
<path
- style="fill:none;stroke:#00112b;stroke-width:2.4000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
- d="m 384.5,138.5 0,-3 3,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#00112b;stroke-width:2.4000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
+ d="m 384.5,138.5 v -3 h 3"
id="path31842"
inkscape:connector-curvature="0" />
<path
id="path31845"
- d="m 384.5,138.5 0,-3 3,0"
- style="fill:none;stroke:#b9d5ff;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 384.5,138.5 v -3 h 3"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#b9d5ff;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<g
@@ -59297,12 +58865,12 @@
transform="matrix(-1,0,0,1,782,0)">
<path
id="path31849"
- d="m 384.5,138.5 0,-3 3,0"
- style="fill:none;stroke:#00112b;stroke-width:2.4000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 384.5,138.5 v -3 h 3"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#00112b;stroke-width:2.4000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#b9d5ff;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 384.5,138.5 0,-3 3,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#b9d5ff;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 384.5,138.5 v -3 h 3"
id="path31852"
inkscape:connector-curvature="0" />
</g>
@@ -59320,15 +58888,15 @@
height="16"
width="16"
id="rect31979"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g31981">
<g
transform="translate(-290.00001,409.99343)"
- style="opacity:0.75;display:inline"
+ style="display:inline;opacity:0.75"
id="g31985">
<path
- style="fill:none;stroke:#1a1a1a;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#1a1a1a;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 341.00001,-115.99343 c 4.5365,0 8.49999,-2.75 8.49999,-5.75 0,-1.75 -1.25,-4 -5.5,-4"
id="path31987"
sodipodi:nodetypes="csc"
@@ -59343,7 +58911,7 @@
sodipodi:nodetypes="csc"
id="path31994"
d="m 341.00001,-115.99343 c 4.49647,0 8.49999,-2.75 8.49999,-5.75 0,-1.75 -1.25,-4 -5.5,-4"
- style="fill:none;stroke:#cccccc;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#cccccc;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<g
@@ -59351,7 +58919,7 @@
id="g31998"
style="display:inline">
<rect
- style="fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect32000"
width="2.9998772"
height="3"
@@ -59360,7 +58928,7 @@
ry="1.4999387"
rx="1.4999387" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
d="m 241.02763,-115 c -0.66667,0 -1.33332,1e-5 -2,1e-5 0,0.66939 0,1.33877 0,2.00817 0.66668,0 1.33333,-10e-6 2,-10e-6 0,-0.66939 0,-1.33878 0,-2.00817 z"
id="path32009"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -59375,14 +58943,14 @@
height="3"
width="2.9998772"
id="rect32011"
- style="fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path32014"
d="m 244.02763,-125 c -0.65334,0 -1.30668,1e-5 -1.96003,1e-5 0,0.66667 0,1.33332 0,1.99999 0.65335,0 1.30669,-1e-5 1.96003,-1e-5 0,-0.66666 0,-1.33332 0,-1.99999 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -59392,7 +58960,7 @@
id="ICON_MESH_DATA"
transform="translate(-474,676.00001)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect32018"
width="16"
height="16"
@@ -59407,12 +58975,12 @@
<path
sodipodi:nodetypes="cccc"
id="path32025"
- d="m 89.95451,104.01774 5,9.5 5,-9.5 -10,0 z"
- style="fill:none;stroke:#1a1a1a;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 89.95451,104.01774 5,9.5 5,-9.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#1a1a1a;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#cccccc;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 89.95451,103.98095 5,9.5 5,-9.5 -10,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#cccccc;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 89.95451,103.98095 5,9.5 5,-9.5 z"
id="path32028"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
@@ -59425,9 +58993,9 @@
height="3"
width="2.9998772"
id="rect32030"
- style="fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect32032"
width="2.9998772"
height="3"
@@ -59443,9 +59011,9 @@
height="3"
width="2.9998772"
id="rect32034"
- style="fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 577.00046,-180.99998 c -0.6694,0 -1.3388,1e-5 -2.0082,1e-5 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-10e-6 2.0082,-10e-6 0,-0.66939 0,-1.33878 0,-2.00817 z"
id="path32036"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -59458,7 +59026,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path32038"
d="m 572.00029,-170.99999 c -0.6694,0 -1.3388,1e-5 -2.0082,1e-5 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-1e-5 2.0082,-1e-5 0,-0.66939 0,-1.33878 0,-2.00817 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
@@ -59466,7 +59034,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path32040"
d="m 567.00059,-180.99998 c -0.6694,0 -1.3388,1e-5 -2.0082,1e-5 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-10e-6 2.0082,-10e-6 0,-0.66939 0,-1.33878 0,-2.00817 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -59479,29 +59047,29 @@
height="16"
width="16"
id="rect32044"
- style="opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;enable-background:accumulate"
transform="matrix(0,1,1,0,0,0)" />
<g
id="g32046"
- transform="matrix(0,-1,1,0,-254.00001,365.00041)">
+ transform="rotate(-90,55.5002,309.50021)">
<g
id="g32048"
style="opacity:0.7">
<path
sodipodi:nodetypes="ccccccccc"
id="path32051"
- style="fill:none;stroke:#1a1a1a;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 69.5,325.5 0,10 12,0 0,-10 -12,0 z m 6,0 0,10 m 6,-5 -12,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#1a1a1a;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 69.5,325.5 v 10 h 12 v -10 z m 6,0 v 10 m 6,-5 h -12"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccc"
- d="m 69.5,325.5 0,10 12,0 0,-10 -12,0 z m 6,0 0,10 m 6,-5 -12,0"
- style="fill:none;stroke:#cccccc;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 69.5,325.5 v 10 h 12 v -10 z m 6,0 v 10 m 6,-5 h -12"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#cccccc;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path32053"
inkscape:connector-curvature="0" />
</g>
<rect
- style="fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect32055"
width="2.9998772"
height="3"
@@ -59510,7 +59078,7 @@
ry="1.4999386"
rx="1.4999386" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
d="m 83.00041,324.00001 c -0.6694,0 -1.3388,1e-5 -2.0082,1e-5 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-1e-5 2.0082,-1e-5 0,-0.66939 0,-1.33878 0,-2.00817 z"
id="path32061"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -59525,14 +59093,14 @@
height="3"
width="2.9998772"
id="rect32063"
- style="fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path32065"
d="m 83,335 c -0.6694,0 -1.3388,10e-6 -2.0082,10e-6 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-10e-6 2.0082,-10e-6 0,-0.66939 0,-1.33878 0,-2.00817 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -59541,7 +59109,7 @@
transform="translate(-83.999998,191)">
<rect
transform="scale(-1,1)"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect25014"
width="16.000032"
height="16"
@@ -59559,14 +59127,14 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
id="path25020"
- d="m 358.99997,-216.75 c -0.99997,-6.5 6.00003,-2.75 5,-9.25 L 369,-224 c 1,7 -6,2 -5,10 l -5.00003,-2.75 z"
- style="fill:none;stroke:#1a1a1a;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 358.99997,-216.75 c -0.99997,-6.5 6.00003,-2.75 5,-9.25 L 369,-224 c 1,7 -6,2 -5,10 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#1a1a1a;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
- style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 358.99997,-216.75 C 358,-223.25 365,-220 363.99997,-226 L 369,-224 c 1,7 -6,2 -5,10 l -5.00003,-2.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
+ d="M 358.99997,-216.75 C 358,-223.25 365,-220 363.99997,-226 L 369,-224 c 1,7 -6,2 -5,10 z"
id="path25022"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -59574,8 +59142,8 @@
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
- style="opacity:0.7;fill:url(#linearGradient25056);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.88812488px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 358.99997,-216.75 C 358,-223.25 365,-220 363.99997,-226 L 369,-224 c 1,7 -6,2 -5,10 l -5.00003,-2.75 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:url(#linearGradient25056);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.88812488px;marker:none;enable-background:accumulate"
+ d="M 358.99997,-216.75 C 358,-223.25 365,-220 363.99997,-226 L 369,-224 c 1,7 -6,2 -5,10 z"
id="path25024"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -59586,8 +59154,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
id="path25026"
- d="M 358.99997,-216.75 C 358,-223.25 365,-220 363.99997,-226 L 369,-224 c 1,7 -6,2 -5,10 l -5.00003,-2.75 z"
- style="opacity:0.75;fill:url(#radialGradient25058);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.88812488px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 358.99997,-216.75 C 358,-223.25 365,-220 363.99997,-226 L 369,-224 c 1,7 -6,2 -5,10 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.75;fill:url(#radialGradient25058);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.88812488px;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
@@ -59596,12 +59164,12 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
id="path25028"
d="m 364.24984,-225.5 4.25016,1.75 c 1,5.75 -5.50003,2 -5.08381,8.85761 l -4.04561,-2.26888"
- style="fill:none;stroke:url(#linearGradient25060);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient25060);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 364.24997,-225.5 4.25003,1.75"
id="path25031"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
@@ -59613,7 +59181,7 @@
transform="translate(-399.2499,383.75)"
id="g25033">
<rect
- style="fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect25035"
width="2.9998772"
height="3"
@@ -59622,7 +59190,7 @@
ry="1.4999387"
rx="1.4999387" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
d="m 394.24987,-98.75 c -0.66667,0 -1.33332,1e-5 -2,1e-5 0,0.66939 0,1.33877 0,2.00817 0.66668,0 1.33333,-10e-6 2,-10e-6 0,-0.66939 0,-1.33878 0,-2.00817 z"
id="path25039"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -59641,18 +59209,18 @@
height="3"
width="2.9998772"
id="rect25043"
- style="fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#dfa535;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path25046"
d="m 395.24974,-97.75 c -0.66667,0 -1.33332,1e-5 -2,1e-5 0,0.666663 0,1.333317 0,1.99999 0.66668,0 1.33333,-1e-5 2,-1e-5 0,-0.666663 0,-1.333327 0,-1.99999 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<path
- style="opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
d="m -11.00003,286 c -0.66668,0 -1.33332,0 -2,0 0,-0.33334 0,-0.66666 0,-1 0.66668,0 1.33332,0 2,0 0,0.33334 0,0.66667 0,1 z"
id="path25048"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -59664,8 +59232,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path25050"
- d="m -7.00003,285.53933 c -0.33334,0 -0.66666,10e-6 -1,10e-6 0,0.82281 0,1.64561 0,2.46844 0.33334,0 0.66666,-1e-5 1,-1e-5 0,-0.82282 0,-1.64562 0,-2.46844 l 0,0 0,0 0,0 z"
- style="opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -7.00003,285.53933 c -0.33334,0 -0.66666,10e-6 -1,10e-6 0,0.82281 0,1.64561 0,2.46844 0.33334,0 0.66666,-1e-5 1,-1e-5 0,-0.82282 0,-1.64562 0,-2.46844 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
@@ -59673,10 +59241,10 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path25052"
d="m -9.972188,286 c -0.342621,0 -0.685221,0 -1.027842,0 0,-0.66873 0,-1.33742 0,-2.00616 0.342621,0 0.685221,0 1.027842,0 0,0.66874 0,1.33745 0,2.00616 z"
- style="opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
d="m -6.000162,287 c -0.33334,0 -0.66666,0 -1,0 0,0.33428 0,0.66856 0,1.00284 0.33334,0 0.66666,0 1,0 0,-0.33428 0,-0.66856 0,-1.00284 z"
id="path25054"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -59690,10 +59258,10 @@
transform="translate(147,191.00001)">
<g
transform="translate(-138,212)"
- style="opacity:0.8;display:inline"
+ style="display:inline;opacity:0.8"
id="g32147">
<g
- transform="translate(1.0551033e-6,0)"
+ transform="translate(1.0551033e-6)"
id="g32149">
<g
style="display:inline"
@@ -59708,49 +59276,46 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path32153"
- style="fill:none;stroke:#1a1a1a;stroke-width:3.63466382;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
- d="M 70.499967,14.5 75.5,17.5 m -5.000033,-3 -4.999967,3 m 4.970586,-3 0,-6"
+ style="display:inline;fill:none;stroke:#1a1a1a;stroke-width:3.63466382;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
+ d="M 70.499967,14.5 75.5,17.5 m -5.000033,-3 -4.999967,3 m 4.970586,-3 v -6"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccccccccc"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- style="fill:none;stroke:#1a1a1a;stroke-width:1.86925566;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- d="m 69.392137,7 0,2 2.156862,0 0,-2 -2.156862,0 z M 63.999982,17 64,19 l 2.156862,0 -1.8e-5,-2 -2.156862,0 0,0 0,0 0,0 z m 10.78431,0 0,2 2.156862,0 0,-2 -2.156862,0 z"
+ style="fill:none;stroke:#1a1a1a;stroke-width:1.86925566;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 69.392137,7 v 2 h 2.156862 V 7 Z M 63.999982,17 64,19 h 2.156862 l -1.8e-5,-2 z m 10.78431,0 v 2 h 2.156862 v -2 z"
id="path32155"
inkscape:connector-curvature="0" />
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
transform="matrix(1.176776,0,0,1.176776,-12.47787,-2.548088)"
- d="M 72,14.5 A 1.5,1.5 0 0 1 70.5,16 1.5,1.5 0 0 1 69,14.5 1.5,1.5 0 0 1 70.5,13 1.5,1.5 0 0 1 72,14.5 Z"
- sodipodi:ry="1.5"
- sodipodi:rx="1.5"
- sodipodi:cy="14.5"
- sodipodi:cx="70.5"
id="path32158"
- style="fill:url(#radialGradient32241);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- sodipodi:type="arc" />
+ style="display:inline;fill:url(#radialGradient32241);fill-opacity:1;fill-rule:nonzero;stroke:none"
+ cx="70.5"
+ cy="14.5"
+ r="1.5" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccc"
d="M 70.499967,14.5 75.5,17.5"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ececec;stroke-width:1.97310317;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ececec;stroke-width:1.97310317;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
id="path32161"
inkscape:connector-curvature="0" />
<path
- d="M 70.499967,14.5 75.5,17.5 m -5.000033,-3 -4.999967,3 m 4.970586,-3 0,-6"
- style="opacity:0.8;fill:none;stroke:url(#radialGradient32243);stroke-width:2.07695079;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ d="M 70.499967,14.5 75.5,17.5 m -5.000033,-3 -4.999967,3 m 4.970586,-3 v -6"
+ style="display:inline;opacity:0.8;fill:none;stroke:url(#radialGradient32243);stroke-width:2.07695079;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
id="path32165"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
sodipodi:nodetypes="cccccc"
- transform="translate(-1.6176466e-5,0)"
+ transform="translate(-1.6176466e-5)"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
@@ -59758,7 +59323,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="ccccc"
id="path32168"
- d="m 74.784292,17 0,2 2.156862,0 0,-2 -2.156862,0 z"
+ d="m 74.784292,17 v 2 h 2.156862 v -2 z"
style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<path
@@ -59767,7 +59332,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccc"
id="path32172"
- style="fill:none;stroke:#999999;stroke-width:1.97310317;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:none;stroke:#999999;stroke-width:1.97310317;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
d="M 70.499967,14.5 65.5,17.5"
inkscape:connector-curvature="0" />
<path
@@ -59776,8 +59341,8 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cc"
id="path32174"
- style="fill:none;stroke:#cccccc;stroke-width:2.07695079;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
- d="m 70.470586,14.5 0,-6"
+ style="display:inline;fill:none;stroke:#cccccc;stroke-width:2.07695079;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
+ d="m 70.470586,14.5 v -6"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
@@ -59785,7 +59350,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="ccccc"
style="fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 69.392137,7 0,2 2.156862,0 0,-2 -2.156862,0 z"
+ d="m 69.392137,7 v 2 h 2.156862 V 7 Z"
id="path32177"
inkscape:connector-curvature="0" />
<path
@@ -59794,7 +59359,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="ccccc"
style="fill:#999999;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 64,17 0,2 2.156844,0 0,-2 L 64,17 z"
+ d="m 64,17 v 2 h 2.156844 v -2 z"
id="path32179"
inkscape:connector-curvature="0" />
<rect
@@ -59803,22 +59368,22 @@
height="3.5"
width="3.774509"
id="rect32186"
- style="opacity:0.05;fill:#554400;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.05;fill:#554400;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.79999995;marker:none;enable-background:accumulate" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="ccc"
id="path32193"
- d="m 64.539197,18.5 0,-1 1.078431,0"
- style="opacity:0.75;fill:none;stroke:#ffffff;stroke-width:1.03847623px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline"
+ d="m 64.539197,18.5 v -1 h 1.078431"
+ style="display:inline;opacity:0.75;fill:none;stroke:#ffffff;stroke-width:1.03847623px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- style="fill:none;stroke:#ffffff;stroke-width:1.03847647px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 69.931347,8.5 0,-0.9673924 1.078413,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1.03847647px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 69.931347,8.5 V 7.5326076 h 1.078413"
id="path32197"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
@@ -59828,8 +59393,8 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="ccc"
id="path32199"
- d="m 75.323509,18.500001 0,-1 1.078431,0"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.03847647px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline"
+ d="m 75.323509,18.500001 v -1 h 1.078431"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.03847647px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
<rect
y="5"
@@ -59837,16 +59402,16 @@
height="16"
width="17.254898"
id="rect32201"
- style="opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;marker:none;enable-background:accumulate" />
<path
- style="opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ style="display:inline;opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
d="m 155,80.5 -3,-1.870665"
id="path32206"
transform="matrix(1.0784311,0,0,1,-92.372519,-64)"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.01000001;fill:#d4aa00;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:1.03847647px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 74.245078,17.500001 0,-1 1.078431,0"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#d4aa00;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:1.03847647px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 74.245078,17.500001 v -1 h 1.078431"
id="path32208"
sodipodi:nodetypes="ccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -59859,8 +59424,8 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cc"
id="path32215"
- d="m 69.931352,9.5000005 1.078431,0"
- style="opacity:0.4;fill:#6a6a6a;fill-opacity:1;fill-rule:evenodd;stroke:#666666;stroke-width:1.03847647px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline"
+ d="m 69.931352,9.5000005 h 1.078431"
+ style="display:inline;opacity:0.4;fill:#6a6a6a;fill-opacity:1;fill-rule:evenodd;stroke:#666666;stroke-width:1.03847647px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
@@ -59868,8 +59433,8 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="ccc"
id="path32218"
- d="m 66.696014,17.499989 0,-1 -1.078431,0"
- style="opacity:0.4;fill:#6a6a6a;fill-opacity:1;fill-rule:evenodd;stroke:#4c4c4c;stroke-width:1.03847575px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline"
+ d="m 66.696014,17.499989 v -1 h -1.078431"
+ style="display:inline;opacity:0.4;fill:#6a6a6a;fill-opacity:1;fill-rule:evenodd;stroke:#4c4c4c;stroke-width:1.03847575px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
<path
@@ -59880,7 +59445,7 @@
<path
sodipodi:nodetypes="cc"
style="opacity:0.35;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
- d="m 150.5,73.5 0,4"
+ d="m 150.5,73.5 v 4"
id="path32235"
inkscape:connector-curvature="0" />
</g>
@@ -59890,7 +59455,7 @@
height="2"
width="2"
id="rect32237"
- style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.79999995;marker:none;enable-background:accumulate" />
</g>
<rect
rx="0"
@@ -59900,14 +59465,14 @@
height="3"
width="2.9998772"
id="rect32239"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
</g>
<g
style="display:inline;enable-background:new"
id="ICON_WPAINT_HLT"
transform="translate(185,94.000007)">
<rect
- style="opacity:0;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate"
id="rect52807"
width="16"
height="16"
@@ -59920,12 +59485,12 @@
<path
sodipodi:nodetypes="ccccc"
id="path52811"
- d="m 506.48389,-17.45862 0,-1 c 4.75,-1 2.25,-4.5 6.31852,-4.187139 0.70341,0.496889 0.93148,1.187139 0.93148,2.122782 0,3.064357 -2.5,3.314357 -7.25,3.064357 l 0,0 0,0 0,0 z"
- style="fill:#9d6c53;fill-opacity:1;fill-rule:evenodd;stroke:#241f1c;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 506.48389,-17.45862 v -1 c 4.75,-1 2.25,-4.5 6.31852,-4.187139 0.70341,0.496889 0.93148,1.187139 0.93148,2.122782 0,3.064357 -2.5,3.314357 -7.25,3.064357 z"
+ style="fill:#9d6c53;fill-opacity:1;fill-rule:evenodd;stroke:#241f1c;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.7;fill:url(#radialGradient53119);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 505.98389,-17.522977 c 5.75,-0.75 2.71305,-4.172284 6.75,-5.25 0.70341,0.496889 1.61991,1.711436 1.75268,2.186272 0,3.572675 -4.12319,3.136436 -8.50268,3.063728 l 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:url(#radialGradient53119);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate"
+ d="m 505.98389,-17.522977 c 5.75,-0.75 2.71305,-4.172284 6.75,-5.25 0.70341,0.496889 1.61991,1.711436 1.75268,2.186272 0,3.572675 -4.12319,3.136436 -8.50268,3.063728 z"
id="path52813"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
@@ -59933,16 +59498,16 @@
sodipodi:nodetypes="cccc"
id="path52815"
d="m 515.48389,-25.95862 -2.75,3.25 1.75,2.25 3,-3"
- style="fill:none;stroke:#0b1728;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0b1728;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient53121);fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 514.98389,-24.95862 -2.25,2.5 1.38281,1.847656 2.36719,-2.347656 -1.5,-2 z"
+ d="m 514.98389,-24.95862 -2.25,2.5 1.38281,1.847656 2.36719,-2.347656 z"
id="path52817"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#2b0000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#2b0000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 518.48389,-29.45862 -4,4.75 2,2.25 2,-2"
id="path52819"
sodipodi:nodetypes="cccc"
@@ -59950,8 +59515,8 @@
<path
sodipodi:nodetypes="ccccc"
id="path52821"
- d="m 518.98389,-29.70862 -4.75,5.5 1.75,1.75 3,-2.75 0,-4.5 z"
- style="fill:url(#linearGradient53123);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.23326063;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 518.98389,-29.70862 -4.75,5.5 1.75,1.75 3,-2.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient53123);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.23326063;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
@@ -59960,7 +59525,7 @@
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.4;fill:none;stroke:url(#linearGradient53125);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ style="display:inline;opacity:0.4;fill:none;stroke:url(#linearGradient53125);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
d="m 511.98389,-21.772977 -1.25,1.25 c -0.96702,0.819679 -0.76749,2.123051 -3.25,2.314357"
id="path52825"
sodipodi:nodetypes="ccc"
@@ -59971,7 +59536,7 @@
id="g52827">
<rect
ry="0.019097222"
- style="opacity:0;fill:#736c54;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#736c54;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate"
id="rect52829"
width="11"
height="11"
@@ -59982,23 +59547,23 @@
id="g52831">
<path
id="path52833"
- d="m 116.53125,386.5 c -0.56312,0 -1.03125,0.46811 -1.03125,1.03125 l 0,0.9375 c 0,0.28156 0.12508,0.53133 0.3125,0.71875 L 113,392 c -0.18742,-0.18742 -0.46844,-0.5 -0.75,-0.5 l -0.75,0 c -0.56312,0 -1.03125,0.46811 -1.03125,1.03125 l 0,0.9375 c 0,0.56312 0.46813,1.03125 1.03125,1.03125 l 0.9375,0 c 0.0103,0 0.021,3e-4 0.0312,0 -3e-4,0.0102 0,0.021 0,0.0312 l 0,0.9375 c 0,0.56312 0.46813,1.03126 1.03125,1.03125 l 0.96875,0 c 0.56312,0 1,-0.46813 1,-1.03125 l 0,-0.9375 c 0,-0.28156 -0.10164,-0.53133 -0.28125,-0.71875 l 2.625,-2.625 c 0.18742,0.18742 0.43719,0.3125 0.71875,0.3125 l 0.96875,0 c 0.56312,0 1,-0.46813 1,-1.03125 l 0,-0.9375 c 0,-0.56312 -0.43688,-1.03125 -1,-1.03125 l -0.96875,0 c -0.0103,0 -0.021,-3e-4 -0.0312,0 3e-4,-0.0102 0,-0.021 0,-0.0312 l 0,-0.9375 c 0,-0.56312 -0.46813,-1.03125 -1.03125,-1.03125 l -0.9375,0 z"
- style="fill:url(#linearGradient53127);fill-opacity:1;fill-rule:evenodd;stroke:#333333;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 116.53125,386.5 c -0.56312,0 -1.03125,0.46811 -1.03125,1.03125 v 0.9375 c 0,0.28156 0.12508,0.53133 0.3125,0.71875 L 113,392 c -0.18742,-0.18742 -0.46844,-0.5 -0.75,-0.5 h -0.75 c -0.56312,0 -1.03125,0.46811 -1.03125,1.03125 v 0.9375 c 0,0.56312 0.46813,1.03125 1.03125,1.03125 h 0.9375 c 0.0103,0 0.021,3e-4 0.0312,0 -3e-4,0.0102 0,0.021 0,0.0312 v 0.9375 c 0,0.56312 0.46813,1.03126 1.03125,1.03125 h 0.96875 c 0.56312,0 1,-0.46813 1,-1.03125 v -0.9375 c 0,-0.28156 -0.10164,-0.53133 -0.28125,-0.71875 l 2.625,-2.625 c 0.18742,0.18742 0.43719,0.3125 0.71875,0.3125 h 0.96875 c 0.56312,0 1,-0.46813 1,-1.03125 v -0.9375 c 0,-0.56312 -0.43688,-1.03125 -1,-1.03125 h -0.96875 c -0.0103,0 -0.021,-3e-4 -0.0312,0 3e-4,-0.0102 0,-0.021 0,-0.0312 v -0.9375 c 0,-0.56312 -0.46813,-1.03125 -1.03125,-1.03125 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient53127);fill-opacity:1;fill-rule:evenodd;stroke:#333333;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cccccccccccsccccccccccccccscccc"
inkscape:connector-curvature="0" />
<path
id="path52835"
- d="m 111.5,393.5 0,-0.75 0.25,-0.25 1.75,0 3,-3 0,-1.75 0.25,-0.25 0.75,0"
+ d="m 111.5,393.5 v -0.75 l 0.25,-0.25 h 1.75 l 3,-3 v -1.75 l 0.25,-0.25 h 0.75"
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 118.75,389.5 0.75,0 m -6,6 0,-0.75"
+ d="m 118.75,389.5 h 0.75 m -6,6 v -0.75"
id="path52837"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate"
id="rect52839"
width="1"
height="1"
@@ -60010,7 +59575,7 @@
height="1"
width="1"
id="rect52841"
- style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate" />
</g>
</g>
</g>
@@ -60022,7 +59587,7 @@
height="16"
width="16"
id="rect52845"
- style="opacity:0;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate" />
<g
id="g52847"
transform="translate(-254.01612,339.00001)"
@@ -60033,16 +59598,16 @@
height="13.001007"
width="12.871031"
id="rect52849"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#1a1a1a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline" />
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#1a1a1a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path52851"
- d="m 344.01612,176 0,3 3,0 0,-3 -3,0 z m 3,3 0,3 3,0 0,-3 -3,0 z m 3,0 3,0 0,-3 -3,0 0,3 z m -3,3 -3,0 0,3 3,0 0,-3 z"
- style="fill:url(#linearGradient53129);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m 344.01612,176 v 3 h 3 v -3 z m 3,3 v 3 h 3 v -3 z m 3,0 h 3 v -3 h -3 z m -3,3 h -3 v 3 h 3 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient53129);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
- style="opacity:0.9;fill:none;stroke:url(#linearGradient53131);stroke-width:0.9999997px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline"
- d="m 344.50621,187.50705 0,-11.00155 10.89034,0"
+ style="display:inline;opacity:0.9;fill:none;stroke:url(#linearGradient53131);stroke-width:0.9999997px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+ d="M 344.50621,187.50705 V 176.5055 h 10.89034"
id="path52853"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -60054,19 +59619,19 @@
transform="translate(-414.98389,546.98571)">
<path
inkscape:connector-curvature="0"
- style="fill:#9d6c53;fill-opacity:1;fill-rule:evenodd;stroke:#241f1c;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 506.48389,-17.45862 0,-1 c 4.75,-1 2.25,-4.5 6.31852,-4.187139 0.70341,0.496889 0.93148,1.187139 0.93148,2.122782 0,3.064357 -2.5,3.314357 -7.25,3.064357 l 0,0 0,0 0,0 z"
+ style="fill:#9d6c53;fill-opacity:1;fill-rule:evenodd;stroke:#241f1c;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 506.48389,-17.45862 v -1 c 4.75,-1 2.25,-4.5 6.31852,-4.187139 0.70341,0.496889 0.93148,1.187139 0.93148,2.122782 0,3.064357 -2.5,3.314357 -7.25,3.064357 z"
id="path52857"
sodipodi:nodetypes="ccccc" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc"
id="path52859"
- d="m 505.98389,-17.522977 c 5.75,-0.75 2.71305,-4.172284 6.75,-5.25 0.70341,0.496889 1.61991,1.711436 1.75268,2.186272 0,3.572675 -4.12319,3.136436 -8.50268,3.063728 l 0,0 0,0 0,0 z"
- style="opacity:0.7;fill:url(#radialGradient53133);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m 505.98389,-17.522977 c 5.75,-0.75 2.71305,-4.172284 6.75,-5.25 0.70341,0.496889 1.61991,1.711436 1.75268,2.186272 0,3.572675 -4.12319,3.136436 -8.50268,3.063728 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:url(#radialGradient53133);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:#0b1728;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0b1728;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 515.48389,-25.95862 -2.75,3.25 1.75,2.25 3,-3"
id="path52861"
sodipodi:nodetypes="cccc" />
@@ -60074,18 +59639,18 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc"
id="path52863"
- d="m 514.98389,-24.95862 -2.25,2.5 1.37109,1.875 2.37891,-2.375 -1.5,-2 z"
+ d="m 514.98389,-24.95862 -2.25,2.5 1.37109,1.875 2.37891,-2.375 z"
style="fill:url(#linearGradient53135);fill-opacity:1;fill-rule:evenodd;stroke:none" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc"
id="path52865"
d="m 519.48389,-30.45862 -5,5.75 2,2.25 3,-3"
- style="fill:none;stroke:#2b0000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#2b0000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
- style="fill:url(#linearGradient53137);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.23326063;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 519.98389,-30.70862 -5.75,6.5 1.75,1.75 4,-3.75 0,-4.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient53137);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.23326063;marker:none;enable-background:accumulate"
+ d="m 519.98389,-30.70862 -5.75,6.5 1.75,1.75 4,-3.75 z"
id="path52867"
sodipodi:nodetypes="ccccc" />
<path
@@ -60099,7 +59664,7 @@
sodipodi:nodetypes="ccc"
id="path52871"
d="m 511.98389,-21.772977 -1.25,1.25 c -0.96702,0.819679 -0.76749,2.123051 -3.25,2.314357"
- style="opacity:0.4;fill:none;stroke:url(#linearGradient53139);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
+ style="display:inline;opacity:0.4;fill:none;stroke:url(#linearGradient53139);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
</g>
</g>
<g
@@ -60112,7 +59677,7 @@
height="16"
width="16"
id="rect52875"
- style="opacity:0;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate" />
<g
transform="translate(-556.98389,452.95862)"
style="display:inline;enable-background:new"
@@ -60120,12 +59685,12 @@
<path
sodipodi:nodetypes="ccccc"
id="path52879"
- d="m 506.48389,-17.45862 0,-1 c 4.75,-1 2.25,-4.5 6.31852,-4.187139 0.70341,0.496889 0.93148,1.187139 0.93148,2.122782 0,3.064357 -2.5,3.314357 -7.25,3.064357 l 0,0 0,0 0,0 z"
- style="fill:#9d6c53;fill-opacity:1;fill-rule:evenodd;stroke:#241f1c;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 506.48389,-17.45862 v -1 c 4.75,-1 2.25,-4.5 6.31852,-4.187139 0.70341,0.496889 0.93148,1.187139 0.93148,2.122782 0,3.064357 -2.5,3.314357 -7.25,3.064357 z"
+ style="fill:#9d6c53;fill-opacity:1;fill-rule:evenodd;stroke:#241f1c;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.7;fill:url(#radialGradient53141);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 505.98389,-17.522977 c 5.75,-0.75 2.71305,-4.172284 6.75,-5.25 0.70341,0.496889 1.61991,1.711436 1.75268,2.186272 0,3.572675 -4.12319,3.136436 -8.50268,3.063728 l 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:url(#radialGradient53141);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate"
+ d="m 505.98389,-17.522977 c 5.75,-0.75 2.71305,-4.172284 6.75,-5.25 0.70341,0.496889 1.61991,1.711436 1.75268,2.186272 0,3.572675 -4.12319,3.136436 -8.50268,3.063728 z"
id="path52881"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
@@ -60133,16 +59698,16 @@
sodipodi:nodetypes="cccc"
id="path52883"
d="m 515.48389,-25.95862 -2.75,3.25 1.75,2.25 3,-3"
- style="fill:none;stroke:#0b1728;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0b1728;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient53143);fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 514.98389,-24.95862 -2.25,2.5 1.37109,1.875 2.37891,-2.375 -1.5,-2 z"
+ d="m 514.98389,-24.95862 -2.25,2.5 1.37109,1.875 2.37891,-2.375 z"
id="path52885"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#2b0000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#2b0000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 520.48389,-31.45862 -6,6.75 2,2.25 4,-4"
id="path52887"
sodipodi:nodetypes="cccc"
@@ -60150,8 +59715,8 @@
<path
sodipodi:nodetypes="ccccc"
id="path52889"
- d="m 520.98389,-31.95862 -6.75,7.75 1.75,1.75 5,-4.5 0,-5 z"
- style="fill:url(#linearGradient53145);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.23326063;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 520.98389,-31.95862 -6.75,7.75 1.75,1.75 5,-4.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient53145);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.23326063;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
@@ -60160,7 +59725,7 @@
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.4;fill:none;stroke:url(#linearGradient53147);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ style="display:inline;opacity:0.4;fill:none;stroke:url(#linearGradient53147);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
d="m 511.98389,-21.772977 -1.25,1.25 c -0.96702,0.819679 -0.76749,2.123051 -3.25,2.314357"
id="path52893"
sodipodi:nodetypes="ccc"
@@ -60175,22 +59740,22 @@
sodipodi:nodetypes="ccc"
id="path52897"
d="m 328.50261,168.45815 0.0576,-10.96002 10.94282,-0.0283"
- style="opacity:0.7;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.7;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#d2d2d2;stroke-width:1.60000002;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#d2d2d2;stroke-width:1.60000002;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 328.50261,168.45815 0.0576,-10.96002 10.94282,-0.0283"
id="path52899"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
<rect
- transform="matrix(1,5.25126e-6,0,1,0,0)"
+ transform="skewY(3.0087504e-4)"
y="155.49829"
x="326.50003"
height="2.9999838"
width="2.9999995"
id="rect52901"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265" />
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1" />
</g>
</g>
<g
@@ -60198,7 +59763,7 @@
id="ICON_LIGHTPAINT"
style="display:inline;enable-background:new">
<rect
- style="opacity:0;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate"
id="rect52905"
width="16"
height="16"
@@ -60210,24 +59775,24 @@
mask="url(#mask32294)">
<path
style="opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 142.5,327.5 c 0,1.2526 -0.5,2 -1.5,3 -1,1 0,3 -1.25,3 l -2.5,0 c -1.25,0 -0.25,-2 -1.25,-3 -1,-1 -1.5,-1.75686 -1.5,-3 0,-2.208 1.792,-4 4,-4 2.208,0 4,1.792 4,4 z"
+ d="m 142.5,327.5 c 0,1.2526 -0.5,2 -1.5,3 -1,1 0,3 -1.25,3 h -2.5 c -1.25,0 -0.25,-2 -1.25,-3 -1,-1 -1.5,-1.75686 -1.5,-3 0,-2.208 1.792,-4 4,-4 2.208,0 4,1.792 4,4 z"
id="path52909"
sodipodi:nodetypes="cssssssc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cssssssc"
id="path52911"
- d="m 142.5,327.5 c 0,1.2526 -0.5,2 -1.5,3 -1,1 0,3 -1.25,3 l -2.5,0 c -1.25,0 -0.25,-2 -1.25,-3 -1,-1 -1.5,-1.75686 -1.5,-3 0,-2.208 1.792,-4 4,-4 2.208,0 4,1.792 4,4 z"
- style="fill:none;stroke:#1a1a1a;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ d="m 142.5,327.5 c 0,1.2526 -0.5,2 -1.5,3 -1,1 0,3 -1.25,3 h -2.5 c -1.25,0 -0.25,-2 -1.25,-3 -1,-1 -1.5,-1.75686 -1.5,-3 0,-2.208 1.792,-4 4,-4 2.208,0 4,1.792 4,4 z"
+ style="fill:none;stroke:#1a1a1a;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 137.5,336.00001 2,0 0,1 -2,-10e-6 0,-0.99999 z"
+ d="m 137.5,336.00001 h 2 v 1 l -2,-10e-6 z"
id="path52913"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<rect
- style="fill:#24221c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#24221c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect52915"
width="5"
height="4.7498698"
@@ -60241,7 +59806,7 @@
height="2.55"
width="3"
id="rect52917"
- style="fill:#a89858;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#a89858;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<path
transform="matrix(1.0666667,0,0,1,-128.7,252.00668)"
sodipodi:type="inkscape:offset"
@@ -60249,13 +59814,13 @@
inkscape:original="M 249.25 79.96875 C 248.7604 79.96875 248.46875 80.255136 248.46875 80.5 C 248.46875 80.744863 248.76041 81.031252 249.25 81.03125 C 249.73959 81.031248 251.26039 81.03125 251.75 81.03125 C 252.23961 81.03125 252.53125 80.744873 252.53125 80.5 C 252.53125 80.255131 252.23961 79.968752 251.75 79.96875 L 249.25 79.96875 z M 249.25 81.96875 C 248.7604 81.96875 248.46875 82.255138 248.46875 82.5 C 248.46875 82.744863 248.76041 83.031253 249.25 83.03125 L 251.75 83.03125 C 252.23961 83.03125 252.53125 82.744875 252.53125 82.5 C 252.53125 82.255131 252.23961 81.968753 251.75 81.96875 C 251.26039 81.968747 249.7396 81.96875 249.25 81.96875 z "
style="fill:url(#linearGradient53149);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path52919"
- d="m 249.09375,80 c -0.37566,0.05708 -0.59375,0.300736 -0.59375,0.5 0,0.227729 0.26882,0.500002 0.75,0.5 l 2.5,0 c 0.4812,0 0.75,-0.272259 0.75,-0.5 0,-0.227736 -0.2688,-0.499998 -0.75,-0.5 l -2.5,0 c -0.0601,0 -0.10258,-0.0082 -0.15625,0 z m 0,2 c -0.37566,0.05708 -0.59375,0.300738 -0.59375,0.5 0,0.227729 0.26882,0.500003 0.75,0.5 l 2.5,0 c 0.4812,0 0.75,-0.272257 0.75,-0.5 0,-0.227736 -0.2688,-0.499997 -0.75,-0.5 l -2.5,0 c -0.0601,0 -0.10258,-0.0082 -0.15625,0 z" />
+ d="m 249.25,79.990234 c -0.48119,0 -0.75977,0.282036 -0.75977,0.509766 0,0.227729 0.27859,0.509768 0.75977,0.509766 0.48959,-2e-6 2.01039,0 2.5,0 0.4812,0 0.75977,-0.282025 0.75977,-0.509766 0,-0.227736 -0.27857,-0.509764 -0.75977,-0.509766 z m 0,2 c -0.48119,0 -0.75977,0.282038 -0.75977,0.509766 0,0.227729 0.27859,0.509769 0.75977,0.509766 h 2.5 c 0.4812,0 0.75977,-0.282023 0.75977,-0.509766 0,-0.227736 -0.27857,-0.509763 -0.75977,-0.509766 -0.48961,-3e-6 -2.0104,0 -2.5,0 z" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path52921"
- d="m 137.25,334.25 1.25,0"
+ d="m 137.25,334.25 h 1.25"
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
@@ -60263,7 +59828,7 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 137.25,332.25 1.25,0"
+ d="m 137.25,332.25 h 1.25"
id="path52923"
inkscape:connector-curvature="0" />
<rect
@@ -60272,16 +59837,16 @@
height="1"
width="0.25"
id="rect52925"
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect52927"
width="0.25"
height="1"
x="141"
y="332" />
<rect
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect52929"
width="0.25"
height="1"
@@ -60293,12 +59858,12 @@
height="1"
width="0.25"
id="rect52931"
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<path
transform="translate(-112,254)"
- d="m 250.5,70 c -1.92579,0 -3.5,1.570388 -3.5,3.5 0,1.036273 0.43284,1.981065 1.15625,2.625 0.12299,0.109481 0.35065,0.504334 0.5,0.875 0.0747,0.185333 0.1355,0.365966 0.21875,0.53125 0.0416,0.08264 0.0782,0.159602 0.15625,0.25 0.0781,0.0904 0.22443,0.218751 0.46875,0.21875 l 2,0 c 0.24442,0 0.3907,-0.128341 0.46875,-0.21875 0.078,-0.09041 0.11462,-0.167341 0.15625,-0.25 0.0832,-0.165318 0.14407,-0.345883 0.21875,-0.53125 0.14936,-0.370734 0.3774,-0.765984 0.5,-0.875 C 253.56794,75.481034 254,74.536495 254,73.5 254,71.570387 252.42579,70 250.5,70 z"
+ d="m 250.5,70 c -1.92579,0 -3.5,1.570388 -3.5,3.5 0,1.036273 0.44456,1.979112 1.16797,2.623047 0.12299,0.10948 0.32331,0.494568 0.47265,0.865234 0.0747,0.185333 0.14332,0.364013 0.22657,0.529297 0.0416,0.08264 0.084,0.163508 0.16211,0.253906 0.0781,0.0904 0.22638,0.228517 0.4707,0.228516 h 2 c 0.24442,0 0.39265,-0.138106 0.4707,-0.228516 0.0781,-0.09041 0.12244,-0.171247 0.16407,-0.253906 0.0832,-0.165318 0.14992,-0.34393 0.22461,-0.529297 0.14936,-0.370734 0.35006,-0.756218 0.47265,-0.865234 C 253.55622,75.479081 254,74.536495 254,73.5 254,71.570387 252.42579,70 250.5,70 Z"
id="path52933"
- style="fill:url(#linearGradient53151);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.61155295;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient53151);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.61155295;marker:none;enable-background:accumulate"
inkscape:original="M 250.5 70.5 C 248.844 70.5 247.5 71.84032 247.5 73.5 C 247.5 74.394207 247.88111 75.199102 248.5 75.75 C 249.02979 76.22159 249.25 77.500001 249.5 77.5 C 249.75 77.5 251.25 77.500001 251.5 77.5 C 251.75 77.5 251.97036 76.220976 252.5 75.75 C 253.11956 75.199071 253.5 74.394767 253.5 73.5 C 253.5 71.840318 252.156 70.5 250.5 70.5 z "
inkscape:radius="0.5"
sodipodi:type="inkscape:offset" />
@@ -60306,41 +59871,36 @@
sodipodi:type="inkscape:offset"
inkscape:radius="0.5"
inkscape:original="M 250.5 70.5 C 248.844 70.5 247.5 71.84032 247.5 73.5 C 247.5 74.394207 247.88111 75.199102 248.5 75.75 C 249.02979 76.22159 249.25 77.500001 249.5 77.5 C 249.75 77.5 251.25 77.500001 251.5 77.5 C 251.75 77.5 251.97036 76.220976 252.5 75.75 C 253.11956 75.199071 253.5 74.394767 253.5 73.5 C 253.5 71.840318 252.156 70.5 250.5 70.5 z "
- style="opacity:0.6;fill:url(#radialGradient53153);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.61155295;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:url(#radialGradient53153);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.61155295;marker:none;enable-background:accumulate"
id="path52935"
- d="m 250.5,70 c -1.92579,0 -3.5,1.570388 -3.5,3.5 0,1.036273 0.43284,1.981065 1.15625,2.625 0.12299,0.109481 0.35065,0.504334 0.5,0.875 0.0747,0.185333 0.1355,0.365966 0.21875,0.53125 0.0416,0.08264 0.0782,0.159602 0.15625,0.25 0.0781,0.0904 0.22443,0.218751 0.46875,0.21875 l 2,0 c 0.24442,0 0.3907,-0.128341 0.46875,-0.21875 0.078,-0.09041 0.11462,-0.167341 0.15625,-0.25 0.0832,-0.165318 0.14407,-0.345883 0.21875,-0.53125 0.14936,-0.370734 0.3774,-0.765984 0.5,-0.875 C 253.56794,75.481034 254,74.536495 254,73.5 254,71.570387 252.42579,70 250.5,70 z"
+ d="m 250.5,70 c -1.92579,0 -3.5,1.570388 -3.5,3.5 0,1.036273 0.44456,1.979112 1.16797,2.623047 0.12299,0.10948 0.32331,0.494568 0.47265,0.865234 0.0747,0.185333 0.14332,0.364013 0.22657,0.529297 0.0416,0.08264 0.084,0.163508 0.16211,0.253906 0.0781,0.0904 0.22638,0.228517 0.4707,0.228516 h 2 c 0.24442,0 0.39265,-0.138106 0.4707,-0.228516 0.0781,-0.09041 0.12244,-0.171247 0.16407,-0.253906 0.0832,-0.165318 0.14992,-0.34393 0.22461,-0.529297 0.14936,-0.370734 0.35006,-0.756218 0.47265,-0.865234 C 253.55622,75.479081 254,74.536495 254,73.5 254,71.570387 252.42579,70 250.5,70 Z"
transform="translate(-112,254)" />
<path
d="m 138.5,324.5 c 1.656,0 3,1.34699 3,3.00667 0,0.89477 -0.39063,1.69865 -1.01019,2.24958 C 139.96017,330.22723 139.5,331 139.5,332.25 m -1,-7.75 c -1.656,0 -3,1.34699 -3,3.00667 0,0.89477 0.39063,1.69865 1.01019,2.24958 C 137.03983,330.22723 137.5,331 137.5,332.25"
- style="fill:none;stroke:url(#linearGradient53155);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient53155);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
id="path52937"
inkscape:connector-curvature="0" />
- <path
+ <ellipse
transform="matrix(0.8490785,0,0,0.8469086,71.921104,-98.093334)"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path52939"
- style="opacity:0.25;fill:url(#radialGradient53157);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:url(#radialGradient53157);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 65,135 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- sodipodi:ry="1"
- sodipodi:rx="1"
- sodipodi:cy="135"
- sodipodi:cx="64"
id="path52941"
- style="opacity:0.9;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74699998;marker:none;display:inline"
- sodipodi:type="arc"
- transform="matrix(0.99567,0,-0.00787885,1,74.34506,191)" />
+ style="display:inline;opacity:0.9;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74699998;marker:none"
+ transform="matrix(0.99567,0,-0.00787885,1,74.34506,191)"
+ cx="64"
+ cy="135"
+ r="1" />
<path
id="path52943"
- style="fill:none;stroke:url(#radialGradient53159);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;display:inline"
+ style="display:inline;fill:none;stroke:url(#radialGradient53159);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
d="m 138.5,324.5 c 1.656,0 3,1.34699 3,3.00667 0,0.89477 -0.39063,1.69865 -1.01019,2.24958 C 139.96017,330.22723 139.5,331 139.5,332.25 m -1,-7.75 c -1.656,0 -3,1.34699 -3,3.00667 0,0.89477 0.39063,1.69865 1.01019,2.24958 C 137.03983,330.22723 137.5,331 137.5,332.25"
inkscape:connector-curvature="0" />
<rect
@@ -60349,18 +59909,18 @@
height="0.75"
width="4.96875"
id="rect52945"
- style="opacity:0.85;fill:#504416;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.85;fill:#504416;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="ccccc"
id="path52947"
- d="m 137.5,335.01146 2,0 0,1 -2,-10e-6 0,-0.99999 z"
+ d="m 137.5,335.01146 h 2 v 1 l -2,-10e-6 z"
style="fill:#6c6753;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path52949"
- d="m 138,329 0,3.75 1,0 0,-3.75 -1,0 z"
- style="opacity:0.2;fill:url(#linearGradient53161);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 138,329 v 3.75 h 1 V 329 Z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:url(#linearGradient53161);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<rect
y="328"
@@ -60368,9 +59928,9 @@
height="1"
width="3"
id="rect52951"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000005;marker:none;enable-background:accumulate" />
<rect
- style="opacity:0.3;fill:#d3bc5f;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:#d3bc5f;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000005;marker:none;enable-background:accumulate"
id="rect52953"
width="1"
height="1"
@@ -60378,13 +59938,13 @@
y="328" />
<path
d="m 138.5,324.5 c 1.656,0 3,1.34699 3,3.00667 0,0.89477 -0.39063,1.69865 -1.01019,2.24958 C 139.96017,330.22723 139.5,331 139.5,332.25 m -1,-7.75 c -1.656,0 -3,1.34699 -3,3.00667 0,0.89477 0.39063,1.69865 1.01019,2.24958 C 137.03983,330.22723 137.5,331 137.5,332.25"
- style="fill:none;stroke:url(#radialGradient53163);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;display:inline"
+ style="display:inline;fill:none;stroke:url(#radialGradient53163);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
id="path52955"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path52957"
- d="m 137.5,336.00001 0.5,0 0,1 -0.5,-10e-6 0,-0.99999 z"
+ d="m 137.5,336.00001 h 0.5 v 1 L 137.5,337 Z"
style="opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
</g>
@@ -60395,12 +59955,12 @@
<path
sodipodi:nodetypes="ccccc"
id="path52961"
- d="m 506.48389,-17.45862 0,-1 c 4.75,-1 2.25,-4.5 6.31852,-4.187139 0.70341,0.496889 0.93148,1.187139 0.93148,2.122782 0,3.064357 -2.5,3.314357 -7.25,3.064357 l 0,0 0,0 0,0 z"
- style="fill:#9d6c53;fill-opacity:1;fill-rule:evenodd;stroke:#241f1c;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 506.48389,-17.45862 v -1 c 4.75,-1 2.25,-4.5 6.31852,-4.187139 0.70341,0.496889 0.93148,1.187139 0.93148,2.122782 0,3.064357 -2.5,3.314357 -7.25,3.064357 z"
+ style="fill:#9d6c53;fill-opacity:1;fill-rule:evenodd;stroke:#241f1c;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.7;fill:url(#radialGradient53165);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 505.98389,-17.522977 c 5.75,-0.75 2.71305,-4.172284 6.75,-5.25 0.70341,0.496889 1.61991,1.711436 1.75268,2.186272 0,3.572675 -4.12319,3.136436 -8.50268,3.063728 l 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:url(#radialGradient53165);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate"
+ d="m 505.98389,-17.522977 c 5.75,-0.75 2.71305,-4.172284 6.75,-5.25 0.70341,0.496889 1.61991,1.711436 1.75268,2.186272 0,3.572675 -4.12319,3.136436 -8.50268,3.063728 z"
id="path52963"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
@@ -60408,16 +59968,16 @@
sodipodi:nodetypes="cccc"
id="path52965"
d="m 515.48389,-25.95862 -2.75,3.25 1.75,2.25 3,-3"
- style="fill:none;stroke:#0b1728;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0b1728;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient53167);fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 514.98389,-24.95862 -2.25,2.5 1.38281,1.847656 2.36719,-2.347656 -1.5,-2 z"
+ d="m 514.98389,-24.95862 -2.25,2.5 1.38281,1.847656 2.36719,-2.347656 z"
id="path52967"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#2b0000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#2b0000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 518.48389,-29.45862 -4,4.75 2,2.25 2,-2"
id="path52969"
sodipodi:nodetypes="cccc"
@@ -60425,8 +59985,8 @@
<path
sodipodi:nodetypes="ccccc"
id="path52971"
- d="m 518.98389,-29.70862 -4.75,5.5 1.75,1.75 3,-2.75 0,-4.5 z"
- style="fill:url(#linearGradient53169);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.23326063;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 518.98389,-29.70862 -4.75,5.5 1.75,1.75 3,-2.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient53169);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.23326063;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
@@ -60435,7 +59995,7 @@
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.4;fill:none;stroke:url(#linearGradient53171);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ style="display:inline;opacity:0.4;fill:none;stroke:url(#linearGradient53171);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
d="m 511.98389,-21.772977 -1.25,1.25 c -0.96702,0.819679 -0.76749,2.123051 -3.25,2.314357"
id="path52975"
sodipodi:nodetypes="ccc"
@@ -60446,58 +60006,49 @@
id="ICON_RETOPO"
transform="translate(-20.999997,23)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect33341"
width="16"
height="16"
x="257"
y="113" />
<g
- style="opacity:0.8;display:inline"
+ style="display:inline;opacity:0.8"
id="g33343"
transform="matrix(1.1658027,0,0,1.1657997,112.71027,-140.05607)"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path33345"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#1a1a1a;stroke-width:1.33333421;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.643333,0,0,0.643335,44.424162,146.72855)" />
- <path
- sodipodi:type="arc"
- style="opacity:0.8;fill:url(#linearGradient33427);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#1a1a1a;stroke-width:1.33333421;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.643333,0,0,0.643335,44.424162,146.72855)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
+ style="display:inline;opacity:0.8;fill:url(#linearGradient33427);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path33347"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(-0.5858806,-0.06590218,0.06677852,-0.5812167,198.80048,299.96262)" />
- <path
+ transform="matrix(-0.5858806,-0.06590218,0.06677852,-0.5812167,198.80048,299.96262)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.5361112,0,0,0.5361024,58.577433,159.38208)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient33429);stroke-width:1.60001671;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient33429);stroke-width:1.60001671;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path33349"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
transform="translate(5,-21)"
@@ -60508,12 +60059,12 @@
<path
sodipodi:nodetypes="ccccc"
id="path33355"
- d="m 90.45493,102.86772 -4.5e-4,6.03674 6.00045,-0.0367 4.5e-4,-6.03674 -6.00045,0.0367 z"
- style="opacity:0.7;fill:none;stroke:#002255;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 90.45493,102.86772 -4.5e-4,6.03674 6.00045,-0.0367 4.5e-4,-6.03674 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:none;stroke:#002255;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:#afc6e9;fill-opacity:0.70588235;fill-rule:evenodd;stroke:#afc6e9;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 90.45493,102.86772 -4.5e-4,6.03674 6,0 4.5e-4,-6.03674 -6,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#afc6e9;fill-opacity:0.70588235;fill-rule:evenodd;stroke:#afc6e9;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 90.45493,102.86772 -4.5e-4,6.03674 h 6 l 4.5e-4,-6.03674 z"
id="path33357"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
@@ -60526,9 +60077,9 @@
height="3"
width="2.9998772"
id="rect33359"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect33361"
width="2.9998772"
height="3"
@@ -60544,9 +60095,9 @@
height="3"
width="2.9998772"
id="rect33363"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 267.00027,146.99999 c -0.6694,0 -1.3388,1e-5 -2.0082,1e-5 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-1e-5 2.0082,-1e-5 0,-0.66939 0,-1.33878 0,-2.00817 z"
id="path33365"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -60559,7 +60110,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path33367"
d="m 260,147 c -0.6694,0 -1.3388,1e-5 -2.0082,1e-5 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-1e-5 2.0082,-1e-5 0,-0.66939 0,-1.33878 0,-2.00817 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
@@ -60567,10 +60118,10 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path33369"
d="m 260.00029,140 c -0.6694,0 -1.3388,1e-5 -2.0082,1e-5 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-1e-5 2.0082,-1e-5 0,-0.66939 0,-1.33878 0,-2.00817 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<rect
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect33371"
width="2.9998772"
height="3"
@@ -60584,7 +60135,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path33373"
d="m 267.00101,139.99999 c -0.6694,0 -1.3388,1e-5 -2.0082,1e-5 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-1e-5 2.0082,-1e-5 0,-0.66939 0,-1.33878 0,-2.00817 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -60593,7 +60144,7 @@
id="ICON_OOPS"
transform="translate(74,89.000007)">
<rect
- style="opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect50824"
width="16"
height="16"
@@ -60606,18 +60157,18 @@
<path
sodipodi:nodetypes="ccccc"
id="path50828"
- style="fill:none;stroke:#1a1a1a;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 25.5,220 0,10.5 4,0 m -4,-5 c 0.125,0 4,0 4,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#1a1a1a;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 25.5,220 v 10.5 h 4 m -4,-5 c 0.125,0 4,0 4,0"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
- d="m 25.5,220 0,10.5 4,0 m -4,-5 c 0.125,0 4,0 4,0"
- style="fill:none;stroke:#bcd0f5;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 25.5,220 v 10.5 h 4 m -4,-5 c 0.125,0 4,0 4,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#bcd0f5;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path50830"
inkscape:connector-curvature="0" />
</g>
<rect
- style="fill:url(#linearGradient50870);fill-opacity:1;fill-rule:evenodd;stroke:#2b2200;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient50870);fill-opacity:1;fill-rule:evenodd;stroke:#2b2200;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect50832"
width="7.000001"
height="3"
@@ -60628,7 +60179,7 @@
style="opacity:0.45"
id="g50834">
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect50836"
width="1"
height="1"
@@ -60640,29 +60191,29 @@
height="1"
width="1"
id="rect50838"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
</g>
<path
sodipodi:nodetypes="cccccccccc"
id="path50840"
- d="m -19.5,452.5 0,3 7,0 0,-3 -7,0 z m 0,6 0,3 7,0 0,-3 -7,0 z"
- style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#1a1a1a;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -19.5,452.5 v 3 h 7 v -3 z m 0,6 v 3 h 7 v -3 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#1a1a1a;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
- d="m -25.5,448.5 0,-1 5,0"
+ d="m -25.5,448.5 v -1 h 5"
id="path50842"
inkscape:connector-curvature="0" />
<path
id="path50844"
- d="m -18.5,454.5 0,-1 5,0"
+ d="m -18.5,454.5 v -1 h 5"
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
- d="m -18.5,460.5 0,-1 5,0"
+ d="m -18.5,460.5 v -1 h 5"
id="path50846"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
@@ -60672,9 +60223,9 @@
height="1.75"
width="1"
id="rect50848"
- style="opacity:0.4;fill:#000000;fill-opacity:0.70588235;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.4;fill:#000000;fill-opacity:0.70588235;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate" />
<rect
- style="opacity:0.3;fill:#000000;fill-opacity:0.70588235;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:#000000;fill-opacity:0.70588235;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate"
id="rect50850"
width="1"
height="2"
@@ -60686,23 +60237,23 @@
height="2"
width="1"
id="rect50852"
- style="opacity:0.3;fill:#000000;fill-opacity:0.70588235;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:#000000;fill-opacity:0.70588235;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate" />
<path
id="path50854"
- d="m -23.5,448.5 0,-1 3,0"
+ d="m -23.5,448.5 v -1 h 3"
style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
style="fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
- d="m -16.5,454.5 0,-1 3,0"
+ d="m -16.5,454.5 v -1 h 3"
id="path50856"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path50858"
- d="m -16.5,460.5 0,-1 3,0"
+ d="m -16.5,460.5 v -1 h 3"
style="fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
<rect
@@ -60712,9 +60263,9 @@
height="1"
width="1"
id="rect50860"
- style="opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<rect
- style="opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect50862"
width="1"
height="1"
@@ -60726,9 +60277,9 @@
height="1"
width="1"
id="rect50864"
- style="opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<rect
- style="opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect50866"
width="1"
height="1"
@@ -60740,13 +60291,13 @@
height="1"
width="1"
id="rect50868"
- style="opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
</g>
<g
id="ICON_SNAP_NORMAL"
transform="translate(-42,23)">
<rect
- style="opacity:0.01000001;fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.29999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.29999995;marker:none;enable-background:accumulate"
id="rect33464"
width="16"
height="16"
@@ -60754,84 +60305,75 @@
y="134"
ry="0" />
<g
- style="opacity:0.8;display:inline"
+ style="display:inline;opacity:0.8"
id="g33466"
transform="matrix(1.0761252,0,0,1.0761229,40.809522,-96.59025)"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path33469"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient33831);stroke-width:1.44444537;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.643333,0,0,0.643335,44.424162,146.72855)" />
- <path
- sodipodi:type="arc"
- style="opacity:0.8;fill:url(#linearGradient33833);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient33831);stroke-width:1.44444537;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.643333,0,0,0.643335,44.424162,146.72855)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
+ style="display:inline;opacity:0.8;fill:url(#linearGradient33833);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path33471"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(-0.5902213,-0.06639044,0.06727327,-0.5855229,199.31507,300.5352)" />
- <path
+ transform="matrix(-0.5902213,-0.06639044,0.06727327,-0.5855229,199.31507,300.5352)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.5227063,0,0,0.5226977,60.34688,160.96383)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient33835);stroke-width:1.77780378;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient33835);stroke-width:1.77780378;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path33473"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
style="display:inline;enable-background:new"
id="g33475"
transform="translate(-62.70896,-1.9304201)">
<path
- style="fill:none;stroke:#003380;stroke-width:2.99999976;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#003380;stroke-width:2.99999976;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 245.20896,142.43042 5,-5"
id="path33477"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.25;fill:none;stroke:#2a7fff;stroke-width:2.99999928;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000233;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 244.54233,144.43041 1.33333,0 1.33332,-1.33332 0,-1.33335 -1.33332,-1.33332 -1.33332,-1e-5 -1.33333,1.33334 0,1.33333 1.33332,1.33333 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:none;stroke:#2a7fff;stroke-width:2.99999928;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 244.54233,144.43041 h 1.33333 l 1.33332,-1.33332 v -1.33335 l -1.33332,-1.33332 -1.33332,-1e-5 -1.33333,1.33334 v 1.33333 z"
id="path33479"
sodipodi:nodetypes="ccccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccc"
id="path33483"
- d="m 244.45896,144.43042 1.5,0 1.25,-1.25 0,-1.5 -1.3333,-1.25 -1.4167,0 -1.25,1.25 0,1.5 1.25,1.25 z"
- style="fill:none;stroke:#0044aa;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 244.45896,144.43042 h 1.5 l 1.25,-1.25 v -1.5 l -1.3333,-1.25 h -1.4167 l -1.25,1.25 v 1.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0044aa;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- d="m 244.45896,143.93042 1.5,0 0.75,-0.75 0,-1.5 -0.75,-0.75 -1.5,0 -0.75,0.75 0,1.5 0.75,0.75 z"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 244.45896,143.93042 h 1.5 l 0.75,-0.75 v -1.5 l -0.75,-0.75 h -1.5 l -0.75,0.75 v 1.5 z"
id="path33481"
sodipodi:nodetypes="ccccccccc"
inkscape:connector-curvature="0" />
<path
id="path33485"
d="m 245.20896,142.43042 5,-5"
- style="fill:none;stroke:url(#linearGradient33585);stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient33585);stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<rect
@@ -60840,7 +60382,7 @@
height="1"
width="1"
id="rect33487"
- style="opacity:0.8;fill:#00112b;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.99999976;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.8;fill:#00112b;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.99999976;marker:none;enable-background:accumulate" />
</g>
</g>
<g
@@ -60854,74 +60396,71 @@
height="16"
width="16"
id="rect36193"
- style="opacity:0.01000001;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.70000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.70000005;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="cccc"
- d="m 324.5,295.75 0,-13.5 m 7,13.5 0,-13.5"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 324.5,295.75 v -13.5 m 7,13.5 v -13.5"
+ style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path36195"
inkscape:connector-curvature="0" />
<path
id="path36197"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 321.25001,285.50001 334.75,285.5 M 321.25001,292.50001 334.75,292.5"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
id="path36199"
- style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 324.5,296.5 0,-14.99999 m 7,14.99999 0,-14.99999"
+ style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 324.5,296.5 v -14.99999 m 7,14.99999 v -14.99999"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
- d="m 320.5,285.50001 15,0 m -15,6.99999 15,0"
- style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 320.5,285.50001 h 15 m -15,6.99999 h 15"
+ style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path36201"
inkscape:connector-curvature="0" />
</g>
<g
id="ICON_ZOOM_SELECTED">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
transform="matrix(-1.5002341,0,0,1.5000004,549.81053,465.24998)"
- d="m 262,78.5 a 3.5,3.5 0 1 1 -7,0 3.5,3.5 0 1 1 7,0 z"
- sodipodi:ry="3.5"
- sodipodi:rx="3.5"
- sodipodi:cy="78.5"
- sodipodi:cx="258.5"
id="path36205"
- style="fill:url(#radialGradient24523);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.63636374;marker:none;display:inline"
- sodipodi:type="arc"
+ style="display:inline;fill:url(#radialGradient24523);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.63636374;marker:none"
inkscape:transform-center-x="-6.5102284"
- inkscape:transform-center-y="-6.547647" />
+ inkscape:transform-center-y="-6.547647"
+ cx="258.5"
+ cy="78.5"
+ r="3.5" />
<path
inkscape:connector-curvature="0"
id="path36207"
- d="m 159.5,582.50001 0,5.40625 c 0.75032,0.38395 1.59977,0.59375 2.5,0.59375 0.90022,0 1.74968,-0.2098 2.5,-0.59375 l 0,-5.40625 -5,0 z"
- style="opacity:0.96000001;fill:#ff8400;fill-opacity:1;fill-rule:evenodd;stroke:#2b2200;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m 159.5,582.50001 v 5.40625 c 0.75032,0.38395 1.59977,0.59375 2.5,0.59375 0.90022,0 1.74968,-0.2098 2.5,-0.59375 v -5.40625 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.96000001;fill:#ff8400;fill-opacity:1;fill-rule:evenodd;stroke:#2b2200;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc"
style="opacity:0.76799999;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
- d="m 160.5,586.25001 0,-2.75 3,0"
+ d="m 160.5,586.25001 v -2.75 h 3"
id="path36209" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc"
id="path36211"
- d="m 165.5,587.25001 c -1.25,1 -2.5,1.25 -3,1.25 l 0,3 2.98688,0 0.0131,-4.25 2e-5,0 0,0 0,0 z"
- style="opacity:0.96000001;fill:#ff8400;fill-opacity:1;fill-rule:evenodd;stroke:#2b2200;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m 165.5,587.25001 c -1.25,1 -2.5,1.25 -3,1.25 v 3 h 2.98688 l 0.0131,-4.25 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.96000001;fill:#ff8400;fill-opacity:1;fill-rule:evenodd;stroke:#2b2200;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
id="path36213"
- d="m 163.5,590.50001 0,-2"
+ d="m 163.5,590.50001 v -2"
style="opacity:0.672;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect36215"
width="16"
height="16"
@@ -60929,43 +60468,37 @@
y="577" />
<path
inkscape:connector-curvature="0"
- style="opacity:0.96000001;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.96000001;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 156.5,588.50001 1.5,-1.5"
id="path36217"
sodipodi:nodetypes="cc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
- <path
+ <circle
inkscape:transform-center-y="-6.547647"
inkscape:transform-center-x="-6.5102284"
- sodipodi:type="arc"
- style="opacity:0.48000004;fill:url(#radialGradient24519);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.63636374;marker:none;display:inline"
+ style="display:inline;opacity:0.48000004;fill:url(#radialGradient24519);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.63636374;marker:none"
id="path36220"
- sodipodi:cx="258.5"
- sodipodi:cy="78.5"
- sodipodi:rx="3.5"
- sodipodi:ry="3.5"
- d="m 262,78.5 a 3.5,3.5 0 1 1 -7,0 3.5,3.5 0 1 1 7,0 z"
transform="matrix(-1.5002341,0,0,1.5000004,549.81053,465.24998)"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="258.5"
+ cy="78.5"
+ r="3.5" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
transform="matrix(-1.5714299,0,0,1.5714268,568.21462,459.64301)"
- d="m 262,78.5 a 3.5,3.5 0 1 1 -7,0 3.5,3.5 0 1 1 7,0 z"
- sodipodi:ry="3.5"
- sodipodi:rx="3.5"
- sodipodi:cy="78.5"
- sodipodi:cx="258.5"
id="path36222"
- style="opacity:0.96000001;fill:none;stroke:#000000;stroke-width:0.57272732;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline"
- sodipodi:type="arc"
+ style="display:inline;opacity:0.96000001;fill:none;stroke:#000000;stroke-width:0.57272732;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
inkscape:transform-center-x="-6.8191649"
- inkscape:transform-center-y="-6.8594309" />
+ inkscape:transform-center-y="-6.8594309"
+ cx="258.5"
+ cy="78.5"
+ r="3.5" />
<path
inkscape:connector-curvature="0"
inkscape:export-ydpi="90"
@@ -60974,7 +60507,7 @@
sodipodi:nodetypes="cc"
id="path36224"
d="M 153.86319,591.13808 156.25,588.75001"
- style="opacity:0.96000001;fill:none;stroke:#28170b;stroke-width:3.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ style="opacity:0.96000001;fill:none;stroke:#28170b;stroke-width:3.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
inkscape:export-ydpi="90"
@@ -60983,7 +60516,7 @@
sodipodi:nodetypes="cc"
id="path36226"
d="m 156.5,588.50001 1.5,-1.5"
- style="opacity:0.96000001;fill:none;stroke:#cccccc;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ style="opacity:0.96000001;fill:none;stroke:#cccccc;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<g
transform="matrix(1.0988734,0,0,1.0981343,-23.179949,357.33845)"
inkscape:export-ydpi="90"
@@ -60991,57 +60524,47 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="g36228"
style="opacity:0.96000001">
- <path
+ <circle
transform="matrix(-1.14287,0,0,1.142863,463.9317,115.80133)"
- d="M 262,78.5 A 3.5,3.5 0 0 1 258.5,82 3.5,3.5 0 0 1 255,78.5 3.5,3.5 0 0 1 258.5,75 3.5,3.5 0 0 1 262,78.5 Z"
- sodipodi:ry="3.5"
- sodipodi:rx="3.5"
- sodipodi:cy="78.5"
- sodipodi:cx="258.5"
id="path36230"
- style="fill:url(#linearGradient24511);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient24513);stroke-width:0.79652983;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline"
- sodipodi:type="arc"
+ style="display:inline;fill:url(#linearGradient24511);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient24513);stroke-width:0.79652983;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
inkscape:transform-center-x="-4.9755572"
- inkscape:transform-center-y="-4.9844055" />
+ inkscape:transform-center-y="-4.9844055"
+ cx="258.5"
+ cy="78.5"
+ r="3.5" />
<g
id="g36232">
- <path
- sodipodi:type="arc"
- style="opacity:0.25;fill:url(#radialGradient24515);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:url(#radialGradient24515);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
id="path36234"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(1.1162596,0,0,1.1065394,80.948334,-350.49863)" />
- <path
+ transform="matrix(1.1162596,0,0,1.1065394,80.948334,-350.49863)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
transform="matrix(-1.087144,-0.2518404,0.2525206,-1.0776772,126.97246,766.619)"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path36236"
- style="opacity:0.25;fill:url(#radialGradient24517);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:url(#radialGradient24517);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
</g>
- <path
+ <circle
transform="matrix(0.9100226,0,0,0.9106329,108.4468,80.751664)"
- sodipodi:type="arc"
- style="opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74699998;marker:none;display:inline"
+ style="display:inline;opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74699998;marker:none"
id="path36238"
- sodipodi:cx="64"
- sodipodi:cy="135"
- sodipodi:rx="1"
- sodipodi:ry="1"
- d="m 65,135 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
inkscape:transform-center-x="-3.1120555"
- inkscape:transform-center-y="-5.7593212" />
+ inkscape:transform-center-y="-5.7593212"
+ cx="64"
+ cy="135"
+ r="1" />
</g>
<path
inkscape:connector-curvature="0"
- style="opacity:0.96000001;fill:none;stroke:#a05a2c;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.96000001;fill:none;stroke:#a05a2c;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 153.75,591.25001 2.5,-2.5"
id="path36240"
sodipodi:nodetypes="cc"
@@ -61056,20 +60579,20 @@
sodipodi:nodetypes="cc"
id="path36242"
d="m 153.25,591.00001 2.75,-2.75"
- style="opacity:0.672;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ style="opacity:0.672;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc"
- style="opacity:0.48000004;fill:none;stroke:#2b2200;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 164.5,585.25001 0,-2.75 -5,0 0,2.75"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.48000004;fill:none;stroke:#2b2200;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 164.5,585.25001 v -2.75 h -5 v 2.75"
id="path36244" />
</g>
<g
- style="opacity:0.96000001;display:inline;enable-background:new"
+ style="display:inline;opacity:0.96000001;enable-background:new"
id="ICON_ZOOM_ALL"
transform="translate(60,59)">
<rect
- style="opacity:0;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect36248"
width="16"
height="16"
@@ -61087,36 +60610,36 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccccc"
id="path36254"
- d="m 210,134.5 7.5,0 0,13 -10,0 0,-10.5 2.5,-2.5 z"
- style="fill:url(#linearGradient37472);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline"
+ d="m 210,134.5 h 7.5 v 13 h -10 V 137 Z"
+ style="display:inline;fill:url(#linearGradient37472);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
inkscape:connector-curvature="0" />
<path
transform="matrix(1.2999758,0,0,1.2999988,271.54887,-199.56022)"
sodipodi:nodetypes="ccc"
id="path36256"
- style="fill:none;stroke:#000000;stroke-width:0.76923829px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1;display:inline;filter:url(#filter31351)"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:0.76923829px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1;filter:url(#filter31351)"
d="m -48.384641,259.86235 2.000031,-0.008 -3.1e-5,-1.99191"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
id="path36258"
- d="m 207,138 4,0 0,-4 -4,4 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+ d="m 207,138 h 4 v -4 z"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 207.5,137 0,10.5 10,0 0,-13 -7.5,0 -2.5,2.5 z"
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 207.5,137 v 10.5 h 10 v -13 H 210 Z"
+ style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path36260"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
id="path36262"
- style="fill:none;stroke:url(#linearGradient37475);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
- d="m 208.5,138.5 0,8 m 3,-11 5,0"
+ style="display:inline;fill:none;stroke:url(#linearGradient37475);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 208.5,138.5 v 8 m 3,-11 h 5"
inkscape:connector-curvature="0" />
</g>
<g
@@ -61125,8 +60648,8 @@
transform="translate(-134,387)"
id="g36264">
<path
- style="fill:url(#linearGradient37477);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline"
- d="m 210,134.5 7.5,0 0,12 -10,0 0,-9.5 2.5,-2.5 z"
+ style="display:inline;fill:url(#linearGradient37477);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
+ d="m 210,134.5 h 7.5 v 12 h -10 V 137 Z"
id="path36266"
sodipodi:nodetypes="cccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -61135,14 +60658,14 @@
inkscape:connector-curvature="0" />
<path
d="m -48.384641,259.86235 2.000031,-0.008 -3.1e-5,-1.99191"
- style="opacity:0.7;fill:none;stroke:#000000;stroke-width:0.76923829px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1;display:inline;filter:url(#filter31351)"
+ style="display:inline;opacity:0.7;fill:none;stroke:#000000;stroke-width:0.76923829px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1;filter:url(#filter31351)"
id="path36268"
sodipodi:nodetypes="ccc"
transform="matrix(1.2999758,0,0,1.2999988,271.54887,-199.56022)"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
- d="m 207,138 4,0 0,-4 -4,4 z"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="m 207,138 h 4 v -4 z"
id="path36270"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
@@ -61150,14 +60673,14 @@
sodipodi:nodetypes="cccccc"
id="path36272"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 207.5,137 0,9.5 10,0 0,-12 -7.5,0 -2.5,2.5 z"
+ d="m 207.5,137 v 9.5 h 10 v -12 H 210 Z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- d="m 208.5,138.5 0,7 m 3,-10 5,0"
- style="fill:none;stroke:url(#linearGradient37479);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="m 208.5,138.5 v 7 m 3,-10 h 5"
+ style="display:inline;fill:none;stroke:url(#linearGradient37479);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
id="path36274"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
@@ -61169,21 +60692,18 @@
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
transform="matrix(0.781818,0,0,0.781818,-53.239298,365.85549)">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
transform="matrix(-1.4627004,0,0,1.4628053,551.73128,85.525552)"
- d="M 262,78.5 A 3.5,3.5 0 0 1 258.5,82 3.5,3.5 0 0 1 255,78.5 3.5,3.5 0 0 1 258.5,75 3.5,3.5 0 0 1 262,78.5 Z"
- sodipodi:ry="3.5"
- sodipodi:rx="3.5"
- sodipodi:cy="78.5"
- sodipodi:cx="258.5"
id="path36278"
- style="fill:#ffffff;fill-opacity:0.1372549;stroke:#000000;stroke-width:0.78698397;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline"
- sodipodi:type="arc"
+ style="display:inline;fill:#ffffff;fill-opacity:0.1372549;stroke:#000000;stroke-width:0.78698397;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
inkscape:transform-center-x="-6.3473305"
- inkscape:transform-center-y="-6.3853012" />
+ inkscape:transform-center-y="-6.3853012"
+ cx="258.5"
+ cy="78.5"
+ r="3.5" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
@@ -61191,10 +60711,10 @@
sodipodi:nodetypes="cc"
id="path36280"
d="m 164.66657,209.31279 3.51745,-3.51744"
- style="fill:none;stroke:#28170b;stroke-width:4.47674513;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#28170b;stroke-width:4.47674513;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#000000;stroke-width:2.5581398;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:2.5581398;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 168.5,205.5 0.96309,-0.98372"
id="path36282"
sodipodi:nodetypes="cc"
@@ -61209,7 +60729,7 @@
sodipodi:nodetypes="cc"
id="path36284"
d="m 168.5,205.5 1.28285,-1.30349"
- style="fill:none;stroke:#cccccc;stroke-width:1.40697706;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#cccccc;stroke-width:1.40697706;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<g
transform="matrix(0.878699,0,0,0.877142,14.70687,20.74499)"
@@ -61217,19 +60737,16 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="g36286">
- <path
+ <circle
transform="matrix(-1.2468441,0,0,1.246865,503.16273,106.89331)"
- d="M 262,78.5 A 3.5,3.5 0 0 1 258.5,82 3.5,3.5 0 0 1 255,78.5 3.5,3.5 0 0 1 258.5,75 3.5,3.5 0 0 1 262,78.5 Z"
- sodipodi:ry="3.5"
- sodipodi:rx="3.5"
- sodipodi:cy="78.5"
- sodipodi:cx="258.5"
id="path36288"
- style="fill:url(#linearGradient37481);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient37483);stroke-width:1.16848361;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient37481);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient37483);stroke-width:1.16848361;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="258.5"
+ cy="78.5"
+ r="3.5" />
</g>
<path
- style="fill:none;stroke:#a05a2c;stroke-width:2.55814004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#a05a2c;stroke-width:2.55814004;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 164.66657,209.31279 3.51745,-3.51744"
id="path36290"
sodipodi:nodetypes="cc"
@@ -61244,80 +60761,67 @@
sodipodi:nodetypes="cc"
id="path36292"
d="m 164.02704,208.99303 3.83721,-3.83721"
- style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:1.2790699;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:1.2790699;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
- <path
+ <circle
inkscape:transform-center-y="-6.3853012"
inkscape:transform-center-x="-6.3473305"
- sodipodi:type="arc"
- style="opacity:0.5;fill:url(#radialGradient37485);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69954133;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:url(#radialGradient37485);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69954133;marker:none;enable-background:accumulate"
id="path36294"
- sodipodi:cx="258.5"
- sodipodi:cy="78.5"
- sodipodi:rx="3.5"
- sodipodi:ry="3.5"
- d="M 262,78.5 A 3.5,3.5 0 0 1 258.5,82 3.5,3.5 0 0 1 255,78.5 3.5,3.5 0 0 1 258.5,75 3.5,3.5 0 0 1 262,78.5 Z"
transform="matrix(-1.4627004,0,0,1.4628053,551.73128,85.525552)"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="258.5"
+ cy="78.5"
+ r="3.5" />
<g
transform="matrix(0.9729196,0,0,0.9789579,9.7047721,-0.8010785)"
- style="opacity:0.96000001;display:inline"
+ style="display:inline;opacity:0.96000001"
id="g36296">
- <path
+ <ellipse
transform="matrix(1.1162596,0,0,1.1065394,80.948334,-350.49863)"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path36298"
- style="opacity:0.25;fill:url(#radialGradient37487);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="opacity:0.25;fill:url(#radialGradient37489);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:url(#radialGradient37487);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:url(#radialGradient37489);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
id="path36300"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(-1.087144,-0.2518404,0.2525206,-1.0776772,126.97246,766.619)" />
+ transform="matrix(-1.087144,-0.2518404,0.2525206,-1.0776772,126.97246,766.619)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
</g>
- <path
+ <circle
transform="matrix(1.2790738,0,0,1.2790735,89.840744,25.765779)"
- sodipodi:type="arc"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74699998;marker:none;display:inline"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74699998;marker:none"
id="path36302"
- sodipodi:cx="64"
- sodipodi:cy="135"
- sodipodi:rx="1"
- sodipodi:ry="1"
- d="m 65,135 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z" />
+ cx="64"
+ cy="135"
+ r="1" />
</g>
</g>
</g>
<g
transform="translate(42,41)"
id="ICON_ZOOM_PREVIOUS"
- style="opacity:0.96000001;display:inline;enable-background:new">
- <path
+ style="display:inline;opacity:0.96000001;enable-background:new">
+ <circle
inkscape:transform-center-y="-6.5435007"
inkscape:transform-center-x="-6.5092113"
- sodipodi:type="arc"
- style="fill:url(#radialGradient37491);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.63636374;marker:none;display:inline"
+ style="display:inline;fill:url(#radialGradient37491);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.63636374;marker:none"
id="path36306"
- sodipodi:cx="258.5"
- sodipodi:cy="78.5"
- sodipodi:rx="3.5"
- sodipodi:ry="3.5"
- d="M 262,78.5 A 3.5,3.5 0 0 1 258.5,82 3.5,3.5 0 0 1 255,78.5 3.5,3.5 0 0 1 258.5,75 3.5,3.5 0 0 1 262,78.5 Z"
transform="matrix(-1.5000024,0,0,1.4990511,528.75064,424.32781)"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="258.5"
+ cy="78.5"
+ r="3.5" />
<g
transform="translate(42,87)"
id="g36308">
@@ -61327,7 +60831,7 @@
height="16"
width="16"
id="rect36310"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
@@ -61335,25 +60839,22 @@
sodipodi:nodetypes="cc"
id="path36312"
d="M 93.5,460.5 95,459"
- style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
- <path
+ <circle
inkscape:transform-center-y="-6.8594309"
inkscape:transform-center-x="-6.8191649"
- sodipodi:type="arc"
- style="fill:none;stroke:#000000;stroke-width:0.57272732;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:0.57272732;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path36314"
- sodipodi:cx="258.5"
- sodipodi:cy="78.5"
- sodipodi:rx="3.5"
- sodipodi:ry="3.5"
- d="M 262,78.5 A 3.5,3.5 0 0 1 258.5,82 3.5,3.5 0 0 1 255,78.5 3.5,3.5 0 0 1 258.5,75 3.5,3.5 0 0 1 262,78.5 Z"
transform="matrix(-1.5714299,0,0,1.5714268,505.21462,331.643)"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="258.5"
+ cy="78.5"
+ r="3.5" />
<path
- style="fill:none;stroke:#28170b;stroke-width:3.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#28170b;stroke-width:3.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 90.863188,463.13807 93.25,460.75"
id="path36316"
sodipodi:nodetypes="cc"
@@ -61362,7 +60863,7 @@
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#cccccc;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#cccccc;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 93.5,460.5 2,-2"
id="path36318"
sodipodi:nodetypes="cc"
@@ -61376,53 +60877,43 @@
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
transform="matrix(1.0988734,0,0,1.0981343,-86.169279,229.32421)">
- <path
+ <circle
inkscape:transform-center-y="-4.9844055"
inkscape:transform-center-x="-4.9755572"
- sodipodi:type="arc"
- style="fill:url(#linearGradient37493);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient37495);stroke-width:0.79652983;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline"
+ style="display:inline;fill:url(#linearGradient37493);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient37495);stroke-width:0.79652983;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
id="path36322"
- sodipodi:cx="258.5"
- sodipodi:cy="78.5"
- sodipodi:rx="3.5"
- sodipodi:ry="3.5"
- d="M 262,78.5 A 3.5,3.5 0 0 1 258.5,82 3.5,3.5 0 0 1 255,78.5 3.5,3.5 0 0 1 258.5,75 3.5,3.5 0 0 1 262,78.5 Z"
- transform="matrix(-1.14287,0,0,1.142863,463.9317,115.7853)" />
+ transform="matrix(-1.14287,0,0,1.142863,463.9317,115.7853)"
+ cx="258.5"
+ cy="78.5"
+ r="3.5" />
<g
id="g36324">
- <path
+ <ellipse
transform="matrix(1.1162596,0,0,1.1065394,80.948334,-350.49863)"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path36326"
- style="opacity:0.25;fill:url(#radialGradient37497);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="opacity:0.25;fill:url(#radialGradient37499);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:url(#radialGradient37497);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:url(#radialGradient37499);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
id="path36328"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(-1.087144,-0.2518404,0.2525206,-1.0776772,126.97246,766.619)" />
+ transform="matrix(-1.087144,-0.2518404,0.2525206,-1.0776772,126.97246,766.619)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
</g>
- <path
+ <circle
inkscape:transform-center-y="-5.7593212"
inkscape:transform-center-x="-3.1120555"
- d="m 65,135 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- sodipodi:ry="1"
- sodipodi:rx="1"
- sodipodi:cy="135"
- sodipodi:cx="64"
id="path36330"
- style="opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74699998;marker:none;display:inline"
- sodipodi:type="arc"
- transform="matrix(0.9100226,0,0,0.9106329,108.4468,80.751664)" />
+ style="display:inline;opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74699998;marker:none"
+ transform="matrix(0.9100226,0,0,0.9106329,108.4468,80.751664)"
+ cx="64"
+ cy="135"
+ r="1" />
</g>
<path
inkscape:export-ydpi="90"
@@ -61431,10 +60922,10 @@
sodipodi:nodetypes="cc"
id="path36332"
d="m 90.75,463.25 2.5,-2.5"
- style="fill:none;stroke:#a05a2c;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#a05a2c;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 90.25,463 93,460.25"
id="path36334"
sodipodi:nodetypes="cc"
@@ -61444,8 +60935,8 @@
inkscape:connector-curvature="0" />
</g>
<path
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 142,545 1,3e-5 0,-1 0,-1 3.5,0 0,-2 -3.5,0 0,-1 0,-1 -1,-3e-5 -2,2.5 0,1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 142,545 1,3e-5 v -1 -1 h 3.5 v -2 H 143 v -1 -1 l -1,-3e-5 -2,2.5 v 1 z"
id="path36337"
sodipodi:nodetypes="ccccccccccccc"
inkscape:connector-curvature="0" />
@@ -61455,7 +60946,7 @@
id="ICON_COLOR"
transform="translate(-294,339)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect36341"
width="16"
height="16"
@@ -61569,51 +61060,42 @@
sodipodi:end="5.7595865"
inkscape:transform-center-x="2.8145777" />
</g>
- <path
+ <circle
transform="matrix(0.8124999,0,0,0.8045157,241.75,163.13011)"
- sodipodi:type="arc"
- style="fill:none;stroke:#000000;stroke-width:0.98948926;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:#000000;stroke-width:0.98948926;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path36361"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(-0.7451143,-0.08386971,0.08492794,-0.7396793,437.33358,356.39712)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path36363"
- style="opacity:0.3;fill:url(#radialGradient37501);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- sodipodi:type="arc" />
- <path
+ style="display:inline;opacity:0.3;fill:url(#radialGradient37501);fill-opacity:1;fill-rule:nonzero;stroke:none"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path36365"
- style="fill:none;stroke:url(#linearGradient37503);stroke-width:1.45605874;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.6860851,0,0,0.6874876,258.44808,176.87656)" />
+ style="fill:none;stroke:url(#linearGradient37503);stroke-width:1.45605874;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.6860851,0,0,0.6874876,258.44808,176.87656)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
transform="translate(105,41)"
id="ICON_ZOOM_IN"
- style="opacity:0.96000001;display:inline;enable-background:new">
+ style="display:inline;opacity:0.96000001;enable-background:new">
<g
id="g36369"
transform="translate(0,87)">
@@ -61623,7 +61105,7 @@
height="16"
width="16"
id="rect36371"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
@@ -61631,25 +61113,22 @@
sodipodi:nodetypes="cc"
id="path36373"
d="M 93.5,460.5 95,459"
- style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
- <path
+ <circle
inkscape:transform-center-y="-6.8594309"
inkscape:transform-center-x="-6.8191649"
- sodipodi:type="arc"
- style="fill:none;stroke:#000000;stroke-width:0.57272732;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:0.57272732;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
id="path36375"
- sodipodi:cx="258.5"
- sodipodi:cy="78.5"
- sodipodi:rx="3.5"
- sodipodi:ry="3.5"
- d="M 262,78.5 A 3.5,3.5 0 0 1 258.5,82 3.5,3.5 0 0 1 255,78.5 3.5,3.5 0 0 1 258.5,75 3.5,3.5 0 0 1 262,78.5 Z"
transform="matrix(-1.5714299,0,0,1.5714268,505.21462,331.643)"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="258.5"
+ cy="78.5"
+ r="3.5" />
<path
- style="fill:none;stroke:#28170b;stroke-width:3.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#28170b;stroke-width:3.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 90.863188,463.13807 93.25,460.75"
id="path36377"
sodipodi:nodetypes="cc"
@@ -61658,7 +61137,7 @@
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#cccccc;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#cccccc;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 93.5,460.5 95,459"
id="path36379"
sodipodi:nodetypes="cc"
@@ -61672,53 +61151,43 @@
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
transform="matrix(1.0988734,0,0,1.0981343,-86.169279,229.32421)">
- <path
+ <circle
inkscape:transform-center-y="-4.9844055"
inkscape:transform-center-x="-4.9755572"
- sodipodi:type="arc"
- style="fill:url(#linearGradient37505);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient37507);stroke-width:0.79652983;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline"
+ style="display:inline;fill:url(#linearGradient37505);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient37507);stroke-width:0.79652983;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
id="path36383"
- sodipodi:cx="258.5"
- sodipodi:cy="78.5"
- sodipodi:rx="3.5"
- sodipodi:ry="3.5"
- d="M 262,78.5 A 3.5,3.5 0 0 1 258.5,82 3.5,3.5 0 0 1 255,78.5 3.5,3.5 0 0 1 258.5,75 3.5,3.5 0 0 1 262,78.5 Z"
- transform="matrix(-1.14287,0,0,1.142863,463.9317,115.7853)" />
+ transform="matrix(-1.14287,0,0,1.142863,463.9317,115.7853)"
+ cx="258.5"
+ cy="78.5"
+ r="3.5" />
<g
id="g36385">
- <path
+ <ellipse
transform="matrix(1.1162596,0,0,1.1065394,80.948334,-350.49863)"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path36387"
- style="opacity:0.25;fill:url(#radialGradient37509);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="opacity:0.25;fill:url(#radialGradient37511);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:url(#radialGradient37509);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:url(#radialGradient37511);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
id="path36389"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(-1.087144,-0.2518404,0.2525206,-1.0776772,126.97246,766.619)" />
+ transform="matrix(-1.087144,-0.2518404,0.2525206,-1.0776772,126.97246,766.619)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
</g>
- <path
+ <circle
inkscape:transform-center-y="-5.7593212"
inkscape:transform-center-x="-3.1120555"
- d="m 65,135 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- sodipodi:ry="1"
- sodipodi:rx="1"
- sodipodi:cy="135"
- sodipodi:cx="64"
id="path36391"
- style="opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74699998;marker:none;display:inline"
- sodipodi:type="arc"
- transform="matrix(0.9100226,0,0,0.9106329,108.4468,80.751664)" />
+ style="display:inline;opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74699998;marker:none"
+ transform="matrix(0.9100226,0,0,0.9106329,108.4468,80.751664)"
+ cx="64"
+ cy="135"
+ r="1" />
</g>
<path
inkscape:export-ydpi="90"
@@ -61727,10 +61196,10 @@
sodipodi:nodetypes="cc"
id="path36393"
d="m 90.75,463.25 2.5,-2.5"
- style="fill:none;stroke:#a05a2c;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#a05a2c;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 90.25,463 93,460.25"
id="path36395"
sodipodi:nodetypes="cc"
@@ -61739,21 +61208,18 @@
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
</g>
- <path
+ <circle
inkscape:transform-center-y="-6.547647"
inkscape:transform-center-x="-6.5102284"
- sodipodi:type="arc"
- style="fill:url(#radialGradient37513);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.63636374;marker:none;display:inline"
+ style="display:inline;fill:url(#radialGradient37513);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.63636374;marker:none"
id="path36397"
- sodipodi:cx="258.5"
- sodipodi:cy="78.5"
- sodipodi:rx="3.5"
- sodipodi:ry="3.5"
- d="M 262,78.5 A 3.5,3.5 0 0 1 258.5,82 3.5,3.5 0 0 1 255,78.5 3.5,3.5 0 0 1 258.5,75 3.5,3.5 0 0 1 262,78.5 Z"
transform="matrix(-1.5002341,0,0,1.5000004,486.81053,424.24997)"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="258.5"
+ cy="78.5"
+ r="3.5" />
<g
id="g36399"
style="fill:#000000"
@@ -61762,7 +61228,7 @@
id="g36401"
style="fill:#000000">
<rect
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect36403"
width="2"
height="6"
@@ -61775,8 +61241,8 @@
height="6"
width="2"
id="rect36405"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- transform="matrix(0,1,-1,0,0,0)"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ transform="rotate(90)"
ry="0.65625" />
</g>
</g>
@@ -61784,34 +61250,31 @@
<g
transform="translate(105,41)"
id="ICON_ZOOM_OUT"
- style="opacity:0.96000001;display:inline;enable-background:new">
- <path
+ style="display:inline;opacity:0.96000001;enable-background:new">
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
transform="matrix(-1.5000024,0,0,1.4990511,507.75064,424.32781)"
- d="M 262,78.5 A 3.5,3.5 0 0 1 258.5,82 3.5,3.5 0 0 1 255,78.5 3.5,3.5 0 0 1 258.5,75 3.5,3.5 0 0 1 262,78.5 Z"
- sodipodi:ry="3.5"
- sodipodi:rx="3.5"
- sodipodi:cy="78.5"
- sodipodi:cx="258.5"
id="path36409"
- style="fill:url(#radialGradient37515);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.63636374;marker:none;display:inline"
- sodipodi:type="arc"
+ style="display:inline;fill:url(#radialGradient37515);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.63636374;marker:none"
inkscape:transform-center-x="-6.5092113"
- inkscape:transform-center-y="-6.5435007" />
+ inkscape:transform-center-y="-6.5435007"
+ cx="258.5"
+ cy="78.5"
+ r="3.5" />
<g
id="g36411"
transform="translate(21,87)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect36413"
width="16"
height="16"
x="89"
y="449" />
<path
- style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 93.5,460.5 95,459"
id="path36415"
sodipodi:nodetypes="cc"
@@ -61819,21 +61282,18 @@
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
transform="matrix(-1.5714299,0,0,1.5714268,505.21462,331.643)"
- d="M 262,78.5 A 3.5,3.5 0 0 1 258.5,82 3.5,3.5 0 0 1 255,78.5 3.5,3.5 0 0 1 258.5,75 3.5,3.5 0 0 1 262,78.5 Z"
- sodipodi:ry="3.5"
- sodipodi:rx="3.5"
- sodipodi:cy="78.5"
- sodipodi:cx="258.5"
id="path36417"
- style="fill:none;stroke:#000000;stroke-width:0.57272732;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline"
- sodipodi:type="arc"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:0.57272732;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
inkscape:transform-center-x="-6.8191649"
- inkscape:transform-center-y="-6.8594309" />
+ inkscape:transform-center-y="-6.8594309"
+ cx="258.5"
+ cy="78.5"
+ r="3.5" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
@@ -61841,7 +61301,7 @@
sodipodi:nodetypes="cc"
id="path36419"
d="M 90.863188,463.13807 93.25,460.75"
- style="fill:none;stroke:#28170b;stroke-width:3.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#28170b;stroke-width:3.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
@@ -61850,7 +61310,7 @@
sodipodi:nodetypes="cc"
id="path36421"
d="M 93.5,460.5 95,459"
- style="fill:none;stroke:#cccccc;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#cccccc;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<g
transform="matrix(1.0988734,0,0,1.0981343,-86.169279,229.32421)"
@@ -61858,56 +61318,46 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="g36423">
- <path
+ <circle
transform="matrix(-1.14287,0,0,1.142863,463.9317,115.7853)"
- d="M 262,78.5 A 3.5,3.5 0 0 1 258.5,82 3.5,3.5 0 0 1 255,78.5 3.5,3.5 0 0 1 258.5,75 3.5,3.5 0 0 1 262,78.5 Z"
- sodipodi:ry="3.5"
- sodipodi:rx="3.5"
- sodipodi:cy="78.5"
- sodipodi:cx="258.5"
id="path36425"
- style="fill:url(#linearGradient37517);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient37519);stroke-width:0.79652983;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline"
- sodipodi:type="arc"
+ style="display:inline;fill:url(#linearGradient37517);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient37519);stroke-width:0.79652983;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
inkscape:transform-center-x="-4.9755572"
- inkscape:transform-center-y="-4.9844055" />
+ inkscape:transform-center-y="-4.9844055"
+ cx="258.5"
+ cy="78.5"
+ r="3.5" />
<g
id="g36427">
- <path
- sodipodi:type="arc"
- style="opacity:0.25;fill:url(#radialGradient37521);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:url(#radialGradient37521);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
id="path36429"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(1.1162596,0,0,1.1065394,80.948334,-350.49863)" />
- <path
+ transform="matrix(1.1162596,0,0,1.1065394,80.948334,-350.49863)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
transform="matrix(-1.087144,-0.2518404,0.2525206,-1.0776772,126.97246,766.619)"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path36431"
- style="opacity:0.25;fill:url(#radialGradient37523);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:url(#radialGradient37523);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
</g>
- <path
+ <circle
transform="matrix(0.9100226,0,0,0.9106329,108.4468,80.751664)"
- sodipodi:type="arc"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74699998;marker:none;display:inline"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74699998;marker:none"
id="path36433"
- sodipodi:cx="64"
- sodipodi:cy="135"
- sodipodi:rx="1"
- sodipodi:ry="1"
- d="m 65,135 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
inkscape:transform-center-x="-3.1120555"
- inkscape:transform-center-y="-5.7593212" />
+ inkscape:transform-center-y="-5.7593212"
+ cx="64"
+ cy="135"
+ r="1" />
</g>
<path
- style="fill:none;stroke:#a05a2c;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#a05a2c;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 90.75,463.25 2.5,-2.5"
id="path36435"
sodipodi:nodetypes="cc"
@@ -61922,7 +61372,7 @@
sodipodi:nodetypes="cc"
id="path36437"
d="M 90.25,463 93,460.25"
- style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
<rect
@@ -61931,8 +61381,8 @@
height="6"
width="2"
id="rect36439"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- transform="matrix(0,1,-1,0,0,0)"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ transform="rotate(90)"
ry="0.609375" />
</g>
<g
@@ -61940,8 +61390,8 @@
id="ICON_SNAP_INCREMENT"
transform="translate(107,-124)">
<g
- style="opacity:0.85;display:inline;enable-background:new"
- transform="translate(-273,0)"
+ style="display:inline;opacity:0.85;enable-background:new"
+ transform="translate(-273)"
id="g36443"
mask="url(#mask25561)">
<rect
@@ -61950,59 +61400,53 @@
height="16"
width="16"
id="rect36445"
- style="opacity:0.01000001;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.70000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.70000005;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="cccc"
- d="m 325.5,295.75 0,-13.5 m 6,13.5 0,-13.5"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 325.5,295.75 v -13.5 m 6,13.5 v -13.5"
+ style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path36447"
inkscape:connector-curvature="0" />
<path
id="path36449"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 321.25,286.5 13.49999,-10e-6 M 321.25001,292.50001 334.75,292.5"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
id="path36451"
- style="fill:none;stroke:#e6e6e6;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 325.5,296.49999 0,-14.99999 m 6,15 0,-14.99999"
+ style="fill:none;stroke:#e6e6e6;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 325.5,296.49999 V 281.5 m 6,15 v -14.99999"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
- d="m 320.5,286.5 15,0 m -15,6 15,0"
- style="fill:none;stroke:#e6e6e6;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 320.5,286.5 h 15 m -15,6 h 15"
+ style="fill:none;stroke:#e6e6e6;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path36453"
inkscape:connector-curvature="0" />
</g>
<g
- transform="translate(-21,0)"
+ transform="translate(-21)"
id="g36455">
<g
transform="translate(-277.98388,250)"
id="g36457"
style="display:inline">
- <path
+ <circle
transform="matrix(1.142871,0,0,1.142855,-27.218817,-5.0713453)"
- d="M 334,35.5 A 3.5,3.5 0 0 1 330.5,39 3.5,3.5 0 0 1 327,35.5 3.5,3.5 0 0 1 330.5,32 3.5,3.5 0 0 1 334,35.5 Z"
- sodipodi:ry="3.5"
- sodipodi:rx="3.5"
- sodipodi:cy="35.5"
- sodipodi:cx="330.5"
id="path36459"
- style="fill:url(#linearGradient37525);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.69999641;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;display:inline"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient37527);stroke-width:1.16669464;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;display:inline"
+ style="display:inline;fill:url(#linearGradient37525);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.69999641;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1"
+ cx="330.5"
+ cy="35.5"
+ r="3.5" />
+ <circle
+ style="display:inline;fill:none;stroke:url(#linearGradient37527);stroke-width:1.16669464;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1"
id="path36461"
- sodipodi:cx="330.5"
- sodipodi:cy="35.5"
- sodipodi:rx="3.5"
- sodipodi:ry="3.5"
- d="M 334,35.5 A 3.5,3.5 0 0 1 330.5,39 3.5,3.5 0 0 1 327,35.5 3.5,3.5 0 0 1 330.5,32 3.5,3.5 0 0 1 334,35.5 Z"
- transform="matrix(0.857099,0,0,0.857147,67.228993,5.071249)" />
+ transform="matrix(0.857099,0,0,0.857147,67.228993,5.071249)"
+ cx="330.5"
+ cy="35.5"
+ r="3.5" />
</g>
<g
transform="translate(-210,147)"
@@ -62013,9 +61457,9 @@
height="1"
width="1"
id="rect36465"
- style="fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
- style="fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect36467"
width="1"
height="1"
@@ -62027,9 +61471,9 @@
height="1"
width="1"
id="rect36469"
- style="fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
- style="fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect36472"
width="1"
height="1"
@@ -62041,7 +61485,7 @@
height="1"
width="1"
id="rect36474"
- style="fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<g
id="g36476"
style="opacity:0.5">
@@ -62051,28 +61495,28 @@
height="1"
width="1"
id="rect36478"
- style="fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
y="137"
x="283"
height="1"
width="1"
id="rect36480"
- style="fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
y="139"
x="283"
height="1"
width="1"
id="rect36482"
- style="fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
y="139"
x="281"
height="1"
width="1"
id="rect36484"
- style="fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
</g>
</g>
</g>
@@ -62087,7 +61531,7 @@
height="16"
width="16"
id="rect36488"
- style="opacity:0;fill:#ececec;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ececec;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
inkscape:transform-center-y="-5"
inkscape:transform-center-x="5"
@@ -62097,33 +61541,33 @@
<path
sodipodi:nodetypes="cccc"
id="path36492"
- d="m 447.5,180.5 0,-2.25 0.75,-0.75 2.25,0"
- style="fill:none;stroke:#241f1c;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 447.5,180.5 v -2.25 l 0.75,-0.75 h 2.25"
+ style="fill:none;stroke:#241f1c;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#e3dedb;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 447.5,180.5 0,-2.25 0.75,-0.75 2.25,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#e3dedb;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 447.5,180.5 v -2.25 l 0.75,-0.75 h 2.25"
id="path36494"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
</g>
<g
- transform="matrix(0,1,-1,0,241.3093,-136.47333)"
+ transform="rotate(90,188.89132,52.417985)"
id="g36496"
style="opacity:0.7"
inkscape:transform-center-x="-5"
inkscape:transform-center-y="-5">
<path
- style="fill:none;stroke:#241f1c;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 447.5,180.5 0,-2.25 0.75,-0.75 2.25,0"
+ style="fill:none;stroke:#241f1c;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 447.5,180.5 v -2.25 l 0.75,-0.75 h 2.25"
id="path36498"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
id="path36500"
- d="m 447.5,180.5 0,-2.25 0.75,-0.75 2.25,0"
- style="fill:none;stroke:#e3dedb;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 447.5,180.5 v -2.25 l 0.75,-0.75 h 2.25"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#e3dedb;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<g
@@ -62131,37 +61575,37 @@
inkscape:transform-center-x="-5"
style="opacity:0.7"
id="g36502"
- transform="matrix(-1,0,0,-1,511.3093,501.52667)">
+ transform="rotate(180,255.65465,250.76333)">
<path
sodipodi:nodetypes="cccc"
id="path36504"
- d="m 447.5,180.5 0,-2.25 0.75,-0.75 2.25,0"
- style="fill:none;stroke:#241f1c;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 447.5,180.5 v -2.25 l 0.75,-0.75 h 2.25"
+ style="fill:none;stroke:#241f1c;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#e3dedb;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 447.5,180.5 0,-2.25 0.75,-0.75 2.25,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#e3dedb;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 447.5,180.5 v -2.25 l 0.75,-0.75 h 2.25"
id="path36506"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
</g>
<g
- transform="matrix(0,-1,1,0,-126.6907,771.52667)"
+ transform="rotate(-90,322.41798,449.10868)"
id="g36508"
style="opacity:0.7"
inkscape:transform-center-x="5"
inkscape:transform-center-y="5">
<path
- style="fill:none;stroke:#241f1c;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 447.5,180.5 0,-2.25 0.75,-0.75 2.25,0"
+ style="fill:none;stroke:#241f1c;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 447.5,180.5 v -2.25 l 0.75,-0.75 h 2.25"
id="path36510"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
id="path36512"
- d="m 447.5,180.5 0,-2.25 0.75,-0.75 2.25,0"
- style="fill:none;stroke:#e3dedb;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 447.5,180.5 v -2.25 l 0.75,-0.75 h 2.25"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#e3dedb;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<g
@@ -62179,12 +61623,12 @@
inkscape:transform-center-x="3"
sodipodi:nodetypes="ccccccccccccccccc"
id="path36520"
- d="m 450.5,179 -0.83982,0.68197 L 449,180.5 l 0,0.5 1,0 0,1 1,0 0,1 0.25,0 0.66329,-1.10494 L 453,181.25 l 0,-0.25 -1,0 0,-1 -1,0 0,-1 -0.5,0 z"
- style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 450.5,179 -0.83982,0.68197 L 449,180.5 v 0.5 h 1 v 1 h 1 v 1 h 0.25 l 0.66329,-1.10494 L 453,181.25 V 181 h -1 v -1 h -1 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 459,180.5 458.31803,179.66018 457.5,179 l -0.5,0 0,1 -1,0 0,1 -1,0 0,0.25 1.10494,0.66329 L 456.75,183 l 0.25,0 0,-1 1,0 0,-1 1,0 0,-0.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;marker:none;enable-background:accumulate"
+ d="M 459,180.5 458.31803,179.66018 457.5,179 H 457 v 1 h -1 v 1 h -1 v 0.25 l 1.10494,0.66329 L 456.75,183 H 457 v -1 h 1 v -1 h 1 z"
id="path36522"
sodipodi:nodetypes="ccccccccccccccccc"
inkscape:transform-center-x="-3"
@@ -62195,12 +61639,12 @@
inkscape:transform-center-x="-3"
sodipodi:nodetypes="ccccccccccccccccc"
id="path36524"
- d="m 457.5,189 0.83982,-0.68197 L 459,187.5 l 0,-0.5 -1,0 0,-1 -1,0 0,-1 -0.25,0 -0.66329,1.10494 L 455,186.75 l 0,0.25 1,0 0,1 1,0 0,1 0.5,0 z"
- style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 457.5,189 0.83982,-0.68197 L 459,187.5 V 187 h -1 v -1 h -1 v -1 h -0.25 l -0.66329,1.10494 L 455,186.75 V 187 h 1 v 1 h 1 v 1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 449,187.5 0.68197,0.83982 L 450.5,189 l 0.5,0 0,-1 1,0 0,-1 1,0 0,-0.25 -1.10494,-0.66329 L 451.25,185 l -0.25,0 0,1 -1,0 0,1 -1,0 0,0.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;marker:none;enable-background:accumulate"
+ d="m 449,187.5 0.68197,0.83982 L 450.5,189 h 0.5 v -1 h 1 v -1 h 1 v -0.25 L 451.89506,186.08671 451.25,185 H 451 v 1 h -1 v 1 h -1 z"
id="path36526"
sodipodi:nodetypes="ccccccccccccccccc"
inkscape:transform-center-x="3"
@@ -62213,72 +61657,60 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path36528"
- d="m 190.07108,29.454411 c -3.02619,0 -5.48439,2.463313 -5.48438,5.5 0,3.036688 2.45819,5.500001 5.48438,5.5 3.02619,0 5.48437,-2.46331 5.48437,-5.5 0,-3.036689 -2.45818,-5.500001 -5.48437,-5.5 z m 0.0124,3.388115 c 1.26359,0 2.10599,0.846143 2.10599,2.115354 0,1.269211 -0.8424,2.115353 -2.10599,2.115353 -1.26359,0 -2.10598,-0.846141 -2.10598,-2.115353 0,-1.269212 0.84239,-2.115354 2.10598,-2.115354 l 0,0 0,0 0,0 z"
- style="fill:url(#linearGradient37529);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.75983924;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 190.07108,29.454411 c -3.02619,0 -5.48439,2.463313 -5.48438,5.5 0,3.036688 2.45819,5.500001 5.48438,5.5 3.02619,0 5.48437,-2.46331 5.48437,-5.5 0,-3.036689 -2.45818,-5.500001 -5.48437,-5.5 z m 0.0124,3.388115 c 1.26359,0 2.10599,0.846143 2.10599,2.115354 0,1.269211 -0.8424,2.115353 -2.10599,2.115353 -1.26359,0 -2.10598,-0.846141 -2.10598,-2.115353 0,-1.269212 0.84239,-2.115354 2.10598,-2.115354 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient37529);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.75983924;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
- <path
+ <circle
transform="matrix(0.5547465,0,0,-0.5552803,116.84153,100.48096)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient37531);stroke-width:2.28174472;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient37531);stroke-width:2.28174472;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path36530"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path36532"
- style="fill:none;stroke:url(#linearGradient37533);stroke-width:3.21050167;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
- sodipodi:type="arc"
- transform="matrix(0.3942416,0,0,-0.3946688,138.04864,81.514802)" />
+ style="display:inline;fill:none;stroke:url(#linearGradient37533);stroke-width:3.21050167;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.3942416,0,0,-0.3946688,138.04864,81.514802)"
+ cx="132"
+ cy="118"
+ r="8" />
<path
sodipodi:nodetypes="cccccccccccccccccccccccccccc"
id="path36534"
- d="m 190.94678,29.919785 -0.8687,-0.147436 -0.81609,0.147436 0,2.538424 0.8347,-0.01215 0.85009,0.01215 0,-2.538424 0,0 0,0 0,0 z m 1.68479,4.230706 0,0.846142 0,0.846141 2.52718,0 0.0755,-0.891284 -0.0755,-0.800999 -2.52718,0 0,0 0,0 0,0 z m -7.58155,0 -0.10953,0.819696 0.10953,0.872587 2.52718,0 0,-0.846141 0,-0.846142 -2.52718,0 z m 5.89676,3.17303 -0.8687,0.152099 -0.81609,-0.152099 0,2.74996 0.8347,0.07585 0.85009,-0.07585 0,-2.74996 z"
- style="fill:#d40000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 190.94678,29.919785 -0.8687,-0.147436 -0.81609,0.147436 v 2.538424 l 0.8347,-0.01215 0.85009,0.01215 z m 1.68479,4.230706 v 0.846142 0.846141 h 2.52718 l 0.0755,-0.891284 -0.0755,-0.800999 z m -7.58155,0 -0.10953,0.819696 0.10953,0.872587 h 2.52718 v -0.846141 -0.846142 z m 5.89676,3.17303 -0.8687,0.152099 -0.81609,-0.152099 v 2.74996 l 0.8347,0.07585 0.85009,-0.07585 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#d40000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path36536"
- style="fill:none;stroke:url(#linearGradient37535);stroke-width:2.28174472;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
- sodipodi:type="arc"
- transform="matrix(0.5547465,0,0,-0.5552803,116.84153,100.48096)" />
- <path
+ style="display:inline;fill:none;stroke:url(#linearGradient37535);stroke-width:2.28174472;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.5547465,0,0,-0.5552803,116.84153,100.48096)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.3942416,0,0,-0.3946688,138.04864,81.514802)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient37537);stroke-width:3.21050167;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient37537);stroke-width:3.21050167;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path36538"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
</g>
<g
- style="opacity:0.96000001;display:inline;enable-background:new"
+ style="display:inline;opacity:0.96000001;enable-background:new"
id="ICON_STRANDS"
inkscape:label="Layer 1"
transform="translate(-211.14286,264.78067)">
@@ -62292,7 +61724,7 @@
height="16"
width="16"
id="rect36544"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g36546"
transform="translate(117.00001,391)">
@@ -62302,17 +61734,17 @@
id="g36548">
<g
transform="matrix(0.9993234,0,0,1.0050357,164.07104,603.72198)"
- style="opacity:0.96000001;display:inline"
+ style="display:inline;opacity:0.96000001"
id="g36550">
<path
sodipodi:nodetypes="ccccccc"
id="path36552"
- d="m 118.00879,52.264848 10e-6,2.238708 -7.00472,3.482446 -6.00407,-2.984969 -1e-5,-2.238708 7.00473,-2.736203 6.00406,2.238726 0,0 0,0 0,0 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.79609263;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 118.00879,52.264848 10e-6,2.238708 -7.00472,3.482446 -6.00407,-2.984969 -1e-5,-2.238708 7.00473,-2.736203 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.79609263;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
id="path36554"
- d="m 105.00001,52.762325 7.00473,-2.736212 6.00406,2.238717 0,2.238716 -7.00473,1.492495 -6.00406,-0.995 0,-2.238716 0,0 0,0 0,0 z"
+ d="m 105.00001,52.762325 7.00473,-2.736212 6.00406,2.238717 v 2.238716 l -7.00473,1.492495 -6.00406,-0.995 z"
style="fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:nodetypes="ccccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
@@ -62322,7 +61754,7 @@
<path
sodipodi:nodetypes="ccccc"
style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 105.00998,54.999895 -0.01,-1.988833 6.00407,2.984969 0.01,1.988833 -6.00406,-2.984969 -1e-5,0 z"
+ d="m 105.00998,54.999895 -0.01,-1.988833 6.00407,2.984969 0.01,1.988833 -6.00406,-2.984969 z"
id="path36556"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -62331,16 +61763,16 @@
<path
sodipodi:nodetypes="ccccc"
id="path36558"
- d="m 118.0088,54.503556 -0.01,-1.988833 -6.99476,3.481308 c 0,2.570679 0,1.425722 0,1.989979 l 7.00473,-3.482454 3e-5,0 0,0 0,0 z"
- style="fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89207077px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 118.0088,54.503556 -0.01,-1.988833 -6.99476,3.481308 c 0,2.570679 0,1.425722 0,1.989979 l 7.00473,-3.482454 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89207077px;marker:none;enable-background:accumulate"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
</g>
<path
- style="fill:none;stroke:url(#linearGradient37539);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 269.25,657.25 0,1.5 5.75,3 6.75,-3.5 0,-1.5"
+ style="fill:none;stroke:url(#linearGradient37539);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 269.25,657.25 v 1.5 l 5.75,3 6.75,-3.5 v -1.5"
id="path36560"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
@@ -62361,13 +61793,13 @@
sodipodi:nodetypes="cssccssccssc"
id="path36566"
d="m 245.5,593.5 c 1.25,2.5 0.97056,4.5 0.97056,6.5 0,0.75 1,0.75 1,0 0,-2.5 0.0294,-4 -1.97056,-6.5 z m -5,0 c 2.75,1.25 2.97056,4.5 2.97056,6.5 0,0.75 1,0.75 1,0 0,-2.5 -0.72056,-5 -3.97056,-6.5 z m -1,4 c 1.97058,0 1.97058,2 1.97058,2.5 0,0.75 0,0.75 0,0 0,-0.5 0,-2.5 -1.97058,-2.5 z"
- style="fill:none;stroke:url(#linearGradient37541);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient37541);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cssccssccssc"
id="path36568"
d="m 245.5,593.5 c 1.25,2.5 0.97056,4.5 0.97056,6.5 0,0.75 1,0.75 1,0 0,-2.5 0.0294,-4 -1.97056,-6.5 z m -5,0 c 2.75,1.25 2.97056,4.5 2.97056,6.5 0,0.75 1,0.75 1,0 0,-2.5 -0.72056,-5 -3.97056,-6.5 z m -1,4 c 1.97058,0 1.97058,1.5 1.97058,2.5 0,0.5 0,0.5 0,0 0,-1 0,-2.5 -1.97058,-2.5 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient37543);stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient37543);stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -62382,7 +61814,7 @@
height="20"
width="20"
id="rect36572"
- style="opacity:0;fill:#ececec;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ececec;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;enable-background:accumulate" />
<g
transform="translate(-235,231)"
id="g36574"
@@ -62400,8 +61832,8 @@
<path
mask="none"
sodipodi:nodetypes="ccccccccccccsccc"
- style="fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 279.46875,-12.53125 c -1.65264,0 -2.96875,1.066109 -2.96875,2.71875 l 0,2.5625 c 0,1.6526411 1.31612,2.71875 2.96875,2.71875 l 0.0625,0 c 1.65264,0 2.96875,-1.0661089 2.96875,-2.71875 l 0,-2.5625 c 0,-1.652641 -1.31612,-2.71875 -2.96875,-2.71875 l -0.0625,0 z M 279.5,-10.5 c 0.554,0 1,0.196 1,0.75 l 0,2.5 c 0,0.554 -0.446,0.75 -1,0.75 -0.554,0 -1,-0.196 -1,-0.75 l 0,-2.5 c 0,-0.554 0.446,-0.75 1,-0.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 279.46875,-12.53125 c -1.65264,0 -2.96875,1.066109 -2.96875,2.71875 V -7.25 c 0,1.6526411 1.31612,2.71875 2.96875,2.71875 h 0.0625 c 1.65264,0 2.96875,-1.0661089 2.96875,-2.71875 v -2.5625 c 0,-1.652641 -1.31612,-2.71875 -2.96875,-2.71875 z M 279.5,-10.5 c 0.554,0 1,0.196 1,0.75 v 2.5 c 0,0.554 -0.446,0.75 -1,0.75 -0.554,0 -1,-0.196 -1,-0.75 v -2.5 c 0,-0.554 0.446,-0.75 1,-0.75 z"
id="path36582"
inkscape:connector-curvature="0" />
<rect
@@ -62410,10 +61842,10 @@
height="2.5"
width="1"
id="rect36584"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
ry="0.5" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect36586"
width="1"
height="1"
@@ -62427,12 +61859,12 @@
id="g36588">
<path
id="path36590"
- d="m 279.46875,-11.53125 c -1.65264,0 -2.96875,1.003609 -2.96875,2.65625 l 0,2.5625 c 0,1.6526411 1.34737,2.75 3,2.75 l 0.0625,0 c 1.65264,0 2.9375,-1.0973589 2.9375,-2.75 l 0,-2.5625 c 0,-1.652641 -1.31612,-2.65625 -2.96875,-2.65625 l -0.0625,0 z M 279.5,-9.5 c 0.554,0 1,0.1335 1,0.6875 l 0,2.5 c 0,0.554 -0.41475,0.78125 -0.96875,0.78125 -0.554,0 -1.03125,-0.22725 -1.03125,-0.78125 l 0,-2.5 c 0,-0.554 0.446,-0.6875 1,-0.6875 z"
- style="fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 279.46875,-11.53125 c -1.65264,0 -2.96875,1.003609 -2.96875,2.65625 v 2.5625 c 0,1.6526411 1.34737,2.75 3,2.75 h 0.0625 c 1.65264,0 2.9375,-1.0973589 2.9375,-2.75 V -8.875 c 0,-1.652641 -1.31612,-2.65625 -2.96875,-2.65625 z M 279.5,-9.5 c 0.554,0 1,0.1335 1,0.6875 v 2.5 c 0,0.554 -0.41475,0.78125 -0.96875,0.78125 -0.554,0 -1.03125,-0.22725 -1.03125,-0.78125 v -2.5 c 0,-0.554 0.446,-0.6875 1,-0.6875 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccccccccsccc"
inkscape:connector-curvature="0" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect36592"
width="1"
height="2.5"
@@ -62445,7 +61877,7 @@
height="1"
width="1"
id="rect36594"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
ry="0.5" />
</g>
</g>
@@ -62453,7 +61885,7 @@
id="g36596" />
</g>
<rect
- style="opacity:0.15;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.15;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect36608"
width="1"
height="3"
@@ -62465,7 +61897,7 @@
height="3"
width="1"
id="rect36610"
- style="opacity:0.15;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.15;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
</g>
</g>
<g
@@ -62478,8 +61910,8 @@
style="display:inline;enable-background:new">
<path
id="path36616"
- d="m 302.5,105.52631 0,-4"
- style="fill:none;stroke:#2d2d2d;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 302.5,105.52631 v -4"
+ style="fill:none;stroke:#2d2d2d;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<g
@@ -62488,12 +61920,12 @@
id="g36618">
<path
id="path36620"
- d="m 279.46875,-12.59375 c -1.65264,0 -2.96875,1.066109 -2.96875,2.71875 l 0,2.5625 c 0,1.6526411 1.31612,2.78125 2.96875,2.78125 l 0.0625,0 c 1.65264,0 2.96875,-1.1286089 2.96875,-2.78125 l 0,-2.5625 c 0,-1.652641 -1.31612,-2.71875 -2.96875,-2.71875 l -0.0625,0 z m 0.0312,2.03125 c 0.554,0 1,0.196 1,0.75 l 0,2.5 c 0,0.554 -0.446,0.8125 -1,0.8125 -0.554,0 -1,-0.2585 -1,-0.8125 l 0,-2.5 c 0,-0.554 0.446,-0.75 1,-0.75 z"
- style="fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 279.46875,-12.59375 c -1.65264,0 -2.96875,1.066109 -2.96875,2.71875 v 2.5625 c 0,1.6526411 1.31612,2.78125 2.96875,2.78125 h 0.0625 c 1.65264,0 2.96875,-1.1286089 2.96875,-2.78125 V -9.875 c 0,-1.652641 -1.31612,-2.71875 -2.96875,-2.71875 z m 0.0312,2.03125 c 0.554,0 1,0.196 1,0.75 v 2.5 c 0,0.554 -0.446,0.8125 -1,0.8125 -0.554,0 -1,-0.2585 -1,-0.8125 v -2.5 c 0,-0.554 0.446,-0.75 1,-0.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccccccccsccc"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect36622"
width="1"
height="3.5"
@@ -62506,7 +61938,7 @@
height="1"
width="1"
id="rect36624"
- style="opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
ry="0.5" />
</g>
<g
@@ -62515,8 +61947,8 @@
transform="translate(2e-6,-21.02385)">
<path
id="path36628"
- d="m 302.5,118.49506 0,-3.99506"
- style="fill:none;stroke:#2d2d2d;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 302.5,118.49506 V 114.5"
+ style="fill:none;stroke:#2d2d2d;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<g
@@ -62525,13 +61957,13 @@
mask="none">
<path
id="path36632"
- d="m 279.46875,-11.53125 c -1.65264,0 -2.96875,1.128609 -2.96875,2.78125 l 0,2.5 c 0,1.6526411 1.34737,2.75 3,2.75 l 0.0625,0 c 1.65264,0 2.9375,-1.0973589 2.9375,-2.75 l 0,-2.5 c 0,-1.652641 -1.31612,-2.78125 -2.96875,-2.78125 l -0.0625,0 z M 279.5,-9.5 c 0.554,0 1,0.2585 1,0.8125 l 0,2.4375 c 0,0.554 -0.41475,0.78125 -0.96875,0.78125 -0.554,0 -1.03125,-0.22725 -1.03125,-0.78125 l 0,-2.4375 c 0,-0.554 0.446,-0.8125 1,-0.8125 z"
- style="fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 279.46875,-11.53125 c -1.65264,0 -2.96875,1.128609 -2.96875,2.78125 v 2.5 c 0,1.6526411 1.34737,2.75 3,2.75 h 0.0625 c 1.65264,0 2.9375,-1.0973589 2.9375,-2.75 v -2.5 c 0,-1.652641 -1.31612,-2.78125 -2.96875,-2.78125 z M 279.5,-9.5 c 0.554,0 1,0.2585 1,0.8125 V -6.25 c 0,0.554 -0.41475,0.78125 -0.96875,0.78125 -0.554,0 -1.03125,-0.22725 -1.03125,-0.78125 v -2.4375 c 0,-0.554 0.446,-0.8125 1,-0.8125 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccccccccsccc"
mask="none"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect36634"
width="1"
height="3.5"
@@ -62544,7 +61976,7 @@
height="1"
width="1"
id="rect36636"
- style="opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
</g>
<g
mask="none"
@@ -62553,8 +61985,8 @@
<path
mask="none"
sodipodi:nodetypes="ccccccccccccsccc"
- style="fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 279.46875,-11.53125 c -1.65264,0 -2.96875,1.128609 -2.96875,2.78125 l 0,2.5 c 0,1.6526411 1.34737,2.75 3,2.75 l 0.0625,0 c 1.65264,0 2.9375,-1.0973589 2.9375,-2.75 l 0,-2.5 c 0,-1.652641 -1.31612,-2.78125 -2.96875,-2.78125 l -0.0625,0 z M 279.5,-9.5 c 0.554,0 1,0.2585 1,0.8125 l 0,2.4375 c 0,0.554 -0.41475,0.78125 -0.96875,0.78125 -0.554,0 -1.03125,-0.22725 -1.03125,-0.78125 l 0,-2.4375 c 0,-0.554 0.446,-0.8125 1,-0.8125 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 279.46875,-11.53125 c -1.65264,0 -2.96875,1.128609 -2.96875,2.78125 v 2.5 c 0,1.6526411 1.34737,2.75 3,2.75 h 0.0625 c 1.65264,0 2.9375,-1.0973589 2.9375,-2.75 v -2.5 c 0,-1.652641 -1.31612,-2.78125 -2.96875,-2.78125 z M 279.5,-9.5 c 0.554,0 1,0.2585 1,0.8125 V -6.25 c 0,0.554 -0.41475,0.78125 -0.96875,0.78125 -0.554,0 -1.03125,-0.22725 -1.03125,-0.78125 v -2.4375 c 0,-0.554 0.446,-0.8125 1,-0.8125 z"
id="path36640"
inkscape:connector-curvature="0" />
<rect
@@ -62563,9 +61995,9 @@
height="3.5"
width="1"
id="rect36642"
- style="opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
- style="opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect36644"
width="1"
height="1"
@@ -62579,26 +62011,26 @@
<path
sodipodi:nodetypes="cc"
id="path36648"
- d="m 280.5,118.5 0,-4"
- style="opacity:0.55;fill:none;stroke:#1a1a1a;stroke-width:2.79440284;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 280.5,118.5 v -4"
+ style="opacity:0.55;fill:none;stroke:#1a1a1a;stroke-width:2.79440284;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
id="path36650"
- d="m 280.5,118.5 0,-4"
- style="fill:none;stroke:#ffffff;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 280.5,118.5 v -4"
+ style="fill:none;stroke:#ffffff;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
</g>
<path
- style="opacity:0.55;fill:none;stroke:#1a1a1a;stroke-width:2.79440284;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 302.5,105.52631 0,-4"
+ style="opacity:0.55;fill:none;stroke:#1a1a1a;stroke-width:2.79440284;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 302.5,105.52631 v -4"
id="path36652"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
- style="fill:#000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 302.5,105.52631 0,-4"
+ style="fill:#000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 302.5,105.52631 v -4"
id="path36654"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
@@ -62608,7 +62040,7 @@
height="1"
width="1"
id="rect36664"
- style="opacity:0.15;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.15;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
</g>
<rect
y="297"
@@ -62616,14 +62048,14 @@
height="26"
width="20"
id="rect36666"
- style="opacity:0;fill:#ececec;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ececec;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;enable-background:accumulate" />
</g>
<g
transform="matrix(-1,0,0,1,530,548)"
- style="opacity:0.9;display:inline;enable-background:new"
+ style="display:inline;opacity:0.9;enable-background:new"
id="ICON_GHOST_ENABLED">
<rect
- style="opacity:0;fill:#aaccff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.4000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#aaccff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.4000001;marker:none;enable-background:accumulate"
id="rect36670"
width="16"
height="16"
@@ -62634,13 +62066,13 @@
<path
sodipodi:nodetypes="csccccccccsssc"
id="path36674"
- d="m 500.5,34.5 0,5 c 0,1.666667 0.25,1.75 1,3.25 l -1.25,1.75 -1.75,-1.75 -1.75,1.75 -0.5,0 -1.75,-1.75 -1.75,1.75 -1,0 C 491,43 490.5,42.416667 490.5,40.75 l 0,-6.25 c 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill:url(#linearGradient37545);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 500.5,34.5 v 5 c 0,1.666667 0.25,1.75 1,3.25 l -1.25,1.75 -1.75,-1.75 -1.75,1.75 h -0.5 l -1.75,-1.75 -1.75,1.75 h -1 C 491,43 490.5,42.416667 490.5,40.75 V 34.5 c 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient37545);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- d="m 495.5,30.375 c -2.28774,0 -4.125,1.837258 -4.125,4.125 l 0,6.25 c 0,0.74605 0.0978,1.170828 0.28125,1.625 0.13101,0.324408 0.38353,0.789244 0.625,1.25 l 0.0937,0 1.5,-1.5 a 0.87292083,0.87292083 0 0 1 1.25,0 l 1.375,1.375 1.375,-1.375 a 0.87292083,0.87292083 0 0 1 1.1875,-0.03125 l 1.375,1.21875 0.1875,-0.1875 0,-0.4375 C 500.24057,42.152166 499.91254,41.661109 499.78125,41.125 499.62101,40.470677 499.625,39.833334 499.625,39 l 0,-4.5 c 0,-2.287742 -1.83726,-4.125 -4.125,-4.125 z"
+ d="m 495.5,30.373047 c -2.28774,0 -4.12695,1.839211 -4.12695,4.126953 v 6.25 c 0,0.74605 0.0959,1.157156 0.27929,1.611328 0.13282,0.328869 0.39058,0.795597 0.63672,1.265625 h 0.0996 l 1.49414,-1.494141 a 0.87292083,0.87292083 0 0 1 1.23438,0 l 1.38281,1.382813 1.38281,-1.382813 a 0.87292083,0.87292083 0 0 1 1.19141,-0.03906 l 1.38672,1.210938 0.16601,-0.166016 v -0.449219 c -0.3818,-0.532877 -0.71885,-1.042237 -0.84961,-1.576172 C 499.6171,40.458958 499.62695,39.833334 499.62695,39 v -4.5 c 0,-2.287742 -1.83921,-4.126953 -4.12695,-4.126953 z"
id="path36676"
- style="fill:none;stroke:url(#linearGradient37547);stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient37547);stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:original="M 495.5 29.5 C 492.74 29.5 490.5 31.74 490.5 34.5 L 490.5 40.75 C 490.5 42.416667 491 43 491.75 44.5 L 492.75 44.5 L 494.5 42.75 L 496.25 44.5 L 496.75 44.5 L 498.5 42.75 L 500.5 44.5 L 501.5 43.5 L 501.5 42.5 C 500.5 41.25 500.5 40.666667 500.5 39 L 500.5 34.5 C 500.5 31.74 498.26 29.5 495.5 29.5 z "
inkscape:radius="-0.87283355"
sodipodi:type="inkscape:offset" />
@@ -62650,13 +62082,13 @@
<path
sodipodi:nodetypes="cccc"
style="fill:#000000;fill-rule:evenodd;stroke:none"
- d="m 493,43.75 c 0,-0.212963 0,-5.75 0,-5.75 l 1.5,4.472222 L 493,43.75 z"
+ d="m 493,43.75 c 0,-0.212963 0,-5.75 0,-5.75 l 1.5,4.472222 z"
id="path36681"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path36683"
- d="m 497,44 c 0,-0.203703 -1,-6 -1,-6 l 2,3.428571 0,1.714286 L 497,44 z"
+ d="m 497,44 c 0,-0.203703 -1,-6 -1,-6 l 2,3.428571 v 1.714286 z"
style="fill:#000000;fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
</g>
@@ -62667,38 +62099,38 @@
<path
sodipodi:nodetypes="ccccc"
id="path36687"
- d="m 493,43.75 c 0,-0.212963 1,-6 1,-6 l 1,5 -1,1 -1,0 z"
+ d="m 493,43.75 c 0,-0.212963 1,-6 1,-6 l 1,5 -1,1 z"
style="fill:#ffffff;fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
style="fill:#ffffff;fill-rule:evenodd;stroke:none"
- d="m 497,43.75 c 0,-0.203703 0,-6 0,-6 l 2,5 -1,1 -1,0 z"
+ d="m 497,43.75 c 0,-0.203703 0,-6 0,-6 l 2,5 -1,1 z"
id="path36689"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
style="fill:#ffffff;fill-rule:evenodd;stroke:none"
- d="m 490,43.25 c 0,-0.212963 1.5,-6.25 1.5,-6.25 l 0.5,5.5 -2,0.75 z"
+ d="m 490,43.25 c 0,-0.212963 1.5,-6.25 1.5,-6.25 l 0.5,5.5 z"
id="path36691"
inkscape:connector-curvature="0" />
</g>
<path
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 500.5,34.5 0,4.5 c 0,1.666667 0,2.25 1,3.5 l 0,1 -1,1 -2,-1.75 -1.75,1.75 -0.5,0 -1.75,-1.75 -1.75,1.75 -0.5,0 C 491,43 490.5,43.166667 490.5,41.5 l 0,-7 c 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 500.5,34.5 V 39 c 0,1.666667 0,2.25 1,3.5 v 1 l -1,1 -2,-1.75 -1.75,1.75 h -0.5 l -1.75,-1.75 -1.75,1.75 h -0.5 C 491,43 490.5,43.166667 490.5,41.5 v -7 c 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
id="path36693"
sodipodi:nodetypes="cscccccccccsssc"
inkscape:connector-curvature="0" />
<path
id="path36695"
- d="m 56,139 0,1 -1,0 0,1 2,0 0,-2 -1,0 z"
- style="opacity:0.8;fill:url(#linearGradient37549);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline;enable-background:new"
+ d="m 56,139 v 1 h -1 v 1 h 2 v -2 z"
+ style="display:inline;opacity:0.8;fill:url(#linearGradient37549);fill-opacity:1;fill-rule:evenodd;stroke:none;enable-background:new"
sodipodi:nodetypes="ccccccc"
transform="translate(441,-105)"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.8;fill:url(#linearGradient37551);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline;enable-background:new"
- d="m 51,139 0,2 2,0 0,-1 -1,0 0,-1 -1,0 z"
+ style="display:inline;opacity:0.8;fill:url(#linearGradient37551);fill-opacity:1;fill-rule:evenodd;stroke:none;enable-background:new"
+ d="m 51,139 v 2 h 2 v -1 h -1 v -1 z"
id="path36697"
sodipodi:nodetypes="ccccccc"
transform="translate(441,-105)"
@@ -62710,13 +62142,13 @@
id="ICON_HAND"
style="display:inline;enable-background:new">
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 67,7.75 0,7.25 -1,0 -1,-2 -1,0 0,1 2,5 2,2 7,0 2,-3.25 0,-4 L 76.5,13 76,13 76,14 75,14 75,12.75 74.25,12 73,12 l 0,2 -1,0 0,-2 -1,-1 -1,0 0,3 -1,0 L 69,7.75 68.37057,7 67.643297,7 67,7.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 67,7.75 V 15 h -1 l -1,-2 h -1 v 1 l 2,5 2,2 h 7 l 2,-3.25 v -4 L 76.5,13 H 76 v 1 H 75 V 12.75 L 74.25,12 H 73 v 2 h -1 v -2 l -1,-1 h -1 v 3 H 69 V 7.75 L 68.37057,7 h -0.727273 z"
id="path36701"
sodipodi:nodetypes="ccccccccccccccccccccccccccccc"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
id="rect36703"
width="16"
height="16"
@@ -62725,12 +62157,12 @@
<path
sodipodi:nodetypes="cccccccccccccccccccccccccccccc"
id="path36705"
- d="m 67,7.75 0,7.25 -1,0 0,-1 -1,-1 -1,0 0,1 2,5 2,2 7,0 2,-3.25 0,-4 L 76.5,13 76,13 76,14 75,14 75,12.75 74.25,12 73,12 l 0,2 -1,0 0,-2 -1,-1 -1,0 0,3 -1,0 L 69,7.75 68.37057,7 67.643297,7 67,7.75 z"
- style="fill:url(#linearGradient37553);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.40000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 67,7.75 V 15 h -1 v -1 l -1,-1 h -1 v 1 l 2,5 2,2 h 7 l 2,-3.25 v -4 L 76.5,13 H 76 v 1 H 75 V 12.75 L 74.25,12 H 73 v 2 h -1 v -2 l -1,-1 h -1 v 3 H 69 V 7.75 L 68.37057,7 h -0.727273 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient37553);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.40000001;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:url(#linearGradient37555);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.40000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 69,17 0,3 1,0 0,-3 -1,0 z m 2,0 0,3 1,0 0,-3 -1,0 z m 2,0 0,3 1,0 0,-3 -1,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient37555);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.40000001;marker:none;enable-background:accumulate"
+ d="m 69,17 v 3 h 1 v -3 z m 2,0 v 3 h 1 v -3 z m 2,0 v 3 h 1 v -3 z"
id="path36707"
inkscape:connector-curvature="0" />
<rect
@@ -62739,23 +62171,23 @@
height="1"
width="1"
id="rect36709"
- style="fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;enable-background:accumulate" />
<rect
- style="fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
id="rect36711"
width="1"
height="1"
x="66"
y="16" />
<path
- style="fill:none;stroke:url(#linearGradient37557);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 74.09375,12.25 -0.625,0 0,1.75 c 0.0031,0.12523 -0.04536,0.246239 -0.133933,0.334817 C 73.246239,14.423395 73.12523,14.4718 73,14.46875 L 72.5,14.5 m -1.65625,-3.25 -0.375,0 0,2.75 c 0.0031,0.12523 -0.04536,0.246239 -0.133933,0.334817 C 70.246239,14.423395 70.12523,14.4718 70,14.46875 L 69.5,14.5 M 64.46875,13.46875 64.5,14 l 1.870938,4.629172 1.847812,1.902078 6.53125,0 1.78125,-2.875 0,-4 -0.0625,-0.125 0,0.46875 c 0.0031,0.12523 -0.04536,0.246239 -0.133933,0.334817 C 76.246239,14.423395 76.12523,14.4718 76,14.46875 L 75.5,14.5 m -7.3125,-7.03125 -0.3125,0 L 67.5,8 l 0,7"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient37557);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 74.09375,12.25 h -0.625 V 14 c 0.0031,0.12523 -0.04536,0.246239 -0.133933,0.334817 C 73.246239,14.423395 73.12523,14.4718 73,14.46875 L 72.5,14.5 m -1.65625,-3.25 h -0.375 V 14 c 0.0031,0.12523 -0.04536,0.246239 -0.133933,0.334817 C 70.246239,14.423395 70.12523,14.4718 70,14.46875 L 69.5,14.5 M 64.46875,13.46875 64.5,14 66.370938,18.629172 68.21875,20.53125 H 74.75 l 1.78125,-2.875 v -4 l -0.0625,-0.125 V 14 c 0.0031,0.12523 -0.04536,0.246239 -0.133933,0.334817 C 76.246239,14.423395 76.12523,14.4718 76,14.46875 L 75.5,14.5 M 68.1875,7.46875 H 67.875 L 67.5,8 v 7"
id="path36713"
sodipodi:nodetypes="cccscccccscccccccccccscccccc"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.15;fill:url(#radialGradient37559);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.40000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 66,15 0,-1 -1,-1 -1,0 0,1 2,5 0,-4 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.15;fill:url(#radialGradient37559);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.40000001;marker:none;enable-background:accumulate"
+ d="m 66,15 v -1 l -1,-1 h -1 v 1 l 2,5 z"
id="path36715"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
@@ -62772,13 +62204,13 @@
height="16"
width="16"
id="rect36884"
- style="opacity:0;fill:#ffaaaa;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ffaaaa;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<g
id="g36886"
- style="fill:#ffd42a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffd42a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
transform="translate(21,69)">
<rect
- style="fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect36888"
width="1"
height="2"
@@ -62790,40 +62222,40 @@
height="2.0079346"
width="1"
id="rect36890"
- style="fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- transform="matrix(0,1,-1,0,0,0)" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ transform="rotate(90)" />
<rect
- style="fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect36892"
width="1"
height="2"
x="236"
y="266" />
<rect
- style="fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect36894"
width="2"
height="1"
x="236.99207"
y="269" />
<rect
- transform="matrix(0,1,-1,0,0,0)"
- style="fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ transform="rotate(90)"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect36896"
width="1"
height="1.9920638"
x="269"
y="-242.99207" />
<rect
- transform="matrix(0,1,-1,0,0,0)"
- style="fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ transform="rotate(90)"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect36898"
width="1"
height="1.9920638"
x="269"
y="-246.99207" />
<rect
- style="fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect36900"
width="1"
height="2"
@@ -62831,11 +62263,11 @@
y="266" />
</g>
<g
- style="fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="g36902">
<rect
transform="scale(1,-1)"
- style="fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect36904"
width="1"
height="2"
@@ -62843,7 +62275,7 @@
y="-331" />
<rect
transform="scale(1,-1)"
- style="fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect36906"
width="1"
height="2"
@@ -62851,7 +62283,7 @@
y="-335" />
<rect
transform="scale(1,-1)"
- style="fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect36908"
width="1"
height="2"
@@ -62859,7 +62291,7 @@
y="-339" />
<rect
transform="matrix(0,1,1,0,0,0)"
- style="fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect36910"
width="1"
height="2.0079362"
@@ -62867,7 +62299,7 @@
y="259.99207" />
<rect
transform="matrix(0,1,1,0,0,0)"
- style="fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect36912"
width="1"
height="2.0079362"
@@ -62879,7 +62311,7 @@
height="2"
width="1"
id="rect36914"
- style="fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
transform="scale(1,-1)" />
</g>
<rect
@@ -62888,12 +62320,12 @@
height="8"
width="10"
id="rect36916"
- style="opacity:0.2;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<g
id="g36918"
transform="translate(-205,313.97063)">
<rect
- style="fill:url(#linearGradient37571);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient37571);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect36920"
width="12"
height="10"
@@ -62902,8 +62334,8 @@
ry="1.5909902"
rx="1.5909902" />
<path
- style="fill:url(#linearGradient37573);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 465,13.40909 0,4.59375 c 0,0.56244 0.36784,0.99717 0.84375,0.99716 l 11.3125,0.01065 c 0.47591,0 0.84375,-0.43471 0.84375,-0.99716 l 0,-4.59375 c -0.31371,0.37073 -0.76923,0.59091 -1.25,0.59091 L 466.25,14 c -0.48077,0 -0.93629,-0.22018 -1.25,-0.59091 l 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient37573);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 465,13.40909 v 4.59375 c 0,0.56244 0.36784,0.99717 0.84375,0.99716 l 11.3125,0.01065 c 0.47591,0 0.84375,-0.43471 0.84375,-0.99716 v -4.59375 c -0.31371,0.37073 -0.76923,0.59091 -1.25,0.59091 L 466.25,14 c -0.48077,0 -0.93629,-0.22018 -1.25,-0.59091 z"
id="path36922"
sodipodi:nodetypes="ccccccccc"
inkscape:connector-curvature="0" />
@@ -62914,7 +62346,7 @@
height="1.9999996"
width="12"
id="rect36924"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
rx="1.4762714" />
<rect
ry="1.3782184"
@@ -62923,10 +62355,10 @@
height="10"
width="12"
id="rect36926"
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
rx="1.3782184" />
<rect
- style="opacity:0.25;fill:none;stroke:#ffffff;stroke-width:0.99999988;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:none;stroke:#ffffff;stroke-width:0.99999988;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect36928"
width="9.9998779"
height="7.999999"
@@ -62937,19 +62369,17 @@
<g
transform="matrix(0.7547901,0,0,1,414.01868,-484.99999)"
id="g36930">
- <path
+ <ellipse
transform="matrix(0.7834486,0,0,0.2000006,10.413535,395.5997)"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path36932"
- style="fill:none;stroke:#999999;stroke-width:2.90780973;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- style="fill:none;stroke:#000000;stroke-width:0.92082453;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 69.531013,495.51105 0,-0.50001 c 0,-0.276 0.890314,-0.5 1.987308,-0.5 1.096993,0 1.987307,0.224 1.987307,0.5 l 0,0.50001"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#999999;stroke-width:2.90780973;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <path
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:0.92082453;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 69.531013,495.51105 v -0.50001 c 0,-0.276 0.890314,-0.5 1.987308,-0.5 1.096993,0 1.987307,0.224 1.987307,0.5 v 0.50001"
id="path36934"
sodipodi:nodetypes="csccc"
inkscape:connector-curvature="0" />
@@ -62959,7 +62389,7 @@
height="1"
width="2.6497409"
id="rect36936"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
</g>
<g
id="g36938"
@@ -62970,9 +62400,9 @@
height="1.5"
width="2"
id="rect36940"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:url(#radialGradient37575);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient37575);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate"
id="rect36942"
width="2"
height="1.5"
@@ -62980,7 +62410,7 @@
y="496.5" />
</g>
<rect
- style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate"
id="rect36944"
width="1"
height="1"
@@ -62989,107 +62419,89 @@
<g
transform="translate(1.1408497e-7,0.5000446)"
id="g36946">
- <path
- sodipodi:type="arc"
- style="opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.89240623;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.89240623;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path36948"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(1.187982,0,0,1.0569758,379.83032,-513.21497)" />
- <path
+ transform="matrix(1.187982,0,0,1.0569758,379.83032,-513.21497)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
transform="matrix(1.3827154,0,0,1.4028327,364.1482,-688.72206)"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path36950"
- style="opacity:0.25;fill:none;stroke:#000000;stroke-width:0.71801031;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient37578);stroke-width:1.11641002;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:none;stroke:#000000;stroke-width:0.71801031;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient37578);stroke-width:1.11641002;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path36952"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(0.987526,0,0,0.8124641,394.9733,-392.80617)" />
- <path
+ transform="matrix(0.987526,0,0,0.8124641,394.9733,-392.80617)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
transform="matrix(0.9848328,0,0,0.9992585,395.19018,-485.12778)"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path36954"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b3b3b3;stroke-width:0.80643582;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient37580);stroke-width:1.69505489;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b3b3b3;stroke-width:0.80643582;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient37580);stroke-width:1.69505489;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path36956"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(0.591154,0,0,0.5887513,425.87219,-279.05319)" />
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:url(#radialGradient37582);stroke-width:0.80110824;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ transform="matrix(0.591154,0,0,0.5887513,425.87219,-279.05319)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#radialGradient37582);stroke-width:0.80110824;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path36958"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(0.9913883,0,0,1.0058976,394.67318,-488.46061)" />
- <path
+ transform="matrix(0.9913883,0,0,1.0058976,394.67318,-488.46061)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
transform="matrix(0.6941559,0,0,0.6920597,417.67198,-331.15708)"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path36960"
- style="opacity:0.7;fill:url(#radialGradient37584);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="opacity:0.2;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:url(#radialGradient37584);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
id="path36962"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(0.1975308,0,0,0.1999991,456.0926,-84.399595)" />
- <path
- sodipodi:type="arc"
- style="opacity:0.7;fill:url(#radialGradient37586);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ transform="matrix(0.1975308,0,0,0.1999991,456.0926,-84.399595)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:url(#radialGradient37586);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
id="path36964"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(-0.6760501,-0.1575078,0.1570322,-0.6740085,446.07727,367.34791)" />
+ transform="matrix(-0.6760501,-0.1575078,0.1570322,-0.6740085,446.07727,367.34791)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
</g>
<path
sodipodi:nodetypes="cc"
id="path36966"
- d="m 476.49997,11.941967 0,7.174103"
- style="opacity:0.05;fill:none;stroke:#ffffff;stroke-width:0.99999982;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 476.49997,11.941967 V 19.11607"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.05;fill:none;stroke:#ffffff;stroke-width:0.99999982;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<path
- style="opacity:0.15;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 258,330 0,8 1,0 0,-7 1,0 0,-1 -2,0 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.15;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 258,330 v 8 h 1 v -7 h 1 v -1 z"
id="path36968"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
@@ -63103,7 +62515,7 @@
id="g36970"
transform="translate(62.999998,254)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect36972"
width="16"
height="16"
@@ -63111,8 +62523,8 @@
y="-339"
transform="scale(1,-1)" />
<path
- style="opacity:0.2;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 220,324 0,1 -2,0 0,2 -1,0 0,2 -1,0 0,6 1,0 0,2 1,0 2,0 0,-1 1,0 0,-2 1,0 0,-2 1,0 0,-1 1,0 3,0 0,-1 1,0 1,0 0,-4 -1,0 0,-1 -1,0 0,-1 -3,0 -1,0 -1,0 -1,0 -1,0 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
+ d="m 220,324 v 1 h -2 v 2 h -1 v 2 h -1 v 6 h 1 v 2 h 1 2 v -1 h 1 v -2 h 1 v -2 h 1 v -1 h 1 3 v -1 h 1 1 v -4 h -1 v -1 h -1 v -1 h -3 -1 -1 -1 z"
id="path36974"
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccc"
inkscape:connector-curvature="0" />
@@ -63126,17 +62538,17 @@
height="1"
width="2"
id="rect37012"
- style="fill:#321900;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#321900;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
transform="scale(1,-1)"
- style="fill:#321900;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#321900;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37014"
width="2"
height="1"
x="219"
y="-325" />
<rect
- style="fill:#321900;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#321900;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37016"
width="1"
height="1"
@@ -63149,7 +62561,7 @@
height="1"
width="1"
id="rect37018"
- style="fill:#321900;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#321900;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
transform="matrix(0,1,1,0,0,0)" />
<rect
y="229"
@@ -63157,10 +62569,10 @@
height="1"
width="1"
id="rect37020"
- style="fill:#321900;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#321900;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
transform="matrix(0,1,1,0,0,0)" />
<rect
- style="fill:#321900;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#321900;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37022"
width="1"
height="2"
@@ -63174,9 +62586,9 @@
height="2"
width="1"
id="rect37024"
- style="fill:#321900;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#321900;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#321900;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#321900;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37026"
width="1"
height="1"
@@ -63190,9 +62602,9 @@
height="1"
width="1"
id="rect37028"
- style="fill:#321900;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#321900;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#321900;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#321900;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37030"
width="1"
height="1"
@@ -63200,7 +62612,7 @@
y="-334"
transform="scale(1,-1)" />
<rect
- style="fill:#321900;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#321900;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37032"
width="1"
height="2"
@@ -63214,10 +62626,10 @@
height="1"
width="1"
id="rect37034"
- style="fill:#321900;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#321900;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
transform="matrix(0,1,1,0,0,0)"
- style="fill:#321900;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#321900;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37036"
width="1"
height="1"
@@ -63230,21 +62642,21 @@
height="1"
width="1"
id="rect37038"
- style="fill:#321900;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#321900;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
</g>
<g
id="g37040"
- style="fill:#ffd42a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate">
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffd42a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate">
<rect
transform="scale(1,-1)"
- style="fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37042"
width="2"
height="1"
x="221"
y="-324" />
<rect
- style="fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37044"
width="1"
height="2"
@@ -63253,7 +62665,7 @@
transform="matrix(0,1,1,0,0,0)" />
<rect
transform="matrix(0,1,1,0,0,0)"
- style="fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37046"
width="1"
height="1"
@@ -63266,9 +62678,9 @@
height="2"
width="1"
id="rect37048"
- style="fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37050"
width="1"
height="2"
@@ -63276,7 +62688,7 @@
y="-335"
transform="scale(1,-1)" />
<rect
- style="fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37052"
width="2"
height="1"
@@ -63290,17 +62702,17 @@
height="2"
width="1"
id="rect37054"
- style="fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
y="-332"
x="222"
height="1"
width="1"
id="rect37056"
- style="fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
transform="scale(1,-1)" />
<rect
- style="fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37058"
width="1"
height="1"
@@ -63314,10 +62726,10 @@
height="1"
width="1"
id="rect37060"
- style="fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
transform="matrix(0,1,1,0,0,0)"
- style="fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37062"
width="2"
height="1"
@@ -63325,7 +62737,7 @@
y="229" />
<rect
transform="scale(1,-1)"
- style="fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37064"
width="1"
height="1"
@@ -63335,19 +62747,19 @@
<path
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccc"
id="path37066"
- d="m 220.9438,324.0562 0,1 6,0 0,-1 -6,0 z m 6,1 0,1 1,0 0,-1 -1,0 z m 1,1 0,1 1,0 0,-1 -1,0 z m -7,-1 -2,0 0,1 2,0 0,-1 z m -2,1 -1,0 0,1 1,0 0,-1 z m -1,1 -1,0 0,2 1,0 0,-2 z m -1,2 -1,0 0,6 1,0 0,-6 z m 0,5.75 0,2.25 1,0 0,-2 -1,-0.25 z"
- style="opacity:0.15;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 220.9438,324.0562 v 1 h 6 v -1 z m 6,1 v 1 h 1 v -1 z m 1,1 v 1 h 1 v -1 z m -7,-1 h -2 v 1 h 2 z m -2,1 h -1 v 1 h 1 z m -1,1 h -1 v 2 h 1 z m -1,2 h -1 v 6 h 1 z m 0,5.75 v 2.25 h 1 v -2 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.15;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<path
- style="fill:url(#linearGradient106628);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 287.75,590.75 1.75,-1.5 1.99177,3.7253 1.75,-1 L 291.5,588.5 l 2.5,0 -6.25,-6.25 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient106628);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
+ d="m 287.75,590.75 1.75,-1.5 1.99177,3.7253 1.75,-1 L 291.5,588.5 h 2.5 l -6.25,-6.25 z"
id="path45378-1-5-6-2"
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#ffffff;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 288.34375,583.75 0,5.75"
+ style="fill:none;stroke:#ffffff;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 288.34375,583.75 v 5.75"
id="path17845-9-1"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
@@ -63356,15 +62768,15 @@
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0"
id="path17835-7-2"
- d="m 287.54419,581.36742 7,7.25 -3,0 1.69346,3.25845 -1.75,1 -1.69346,-3.50845 -2.25,2.25 z"
- style="fill:none;stroke:#000000;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ d="m 287.54419,581.36742 7,7.25 h -3 l 1.69346,3.25845 -1.75,1 -1.69346,-3.50845 -2.25,2.25 z"
+ style="fill:none;stroke:#000000;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<g
- style="opacity:0.96000001;display:inline;enable-background:new"
+ style="display:inline;opacity:0.96000001;enable-background:new"
id="ICON_FREEZE"
transform="translate(126,86)">
<rect
- style="opacity:0;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.20000005;marker:none;enable-background:accumulate"
id="rect37070"
width="16"
height="16"
@@ -63380,13 +62792,13 @@
style="stroke:#1a1a1a;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none"
id="g37076">
<path
- style="fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 243.5,336.5 0,-12"
+ style="fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 243.5,336.5 v -12"
id="path37078"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 240.5,325.5 3,3 3,-3"
id="path37080"
sodipodi:nodetypes="ccc"
@@ -63395,27 +62807,27 @@
sodipodi:nodetypes="ccc"
id="path37082"
d="m 240.5,335.5 3,-3 3,3"
- style="fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
<g
style="stroke:#1a1a1a;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none"
- transform="matrix(0,1,-1,0,574,87)"
+ transform="rotate(90,243.5,330.5)"
id="g37084">
<path
sodipodi:nodetypes="cc"
id="path37086"
- d="m 243.5,336.5 0,-12"
- style="fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 243.5,336.5 v -12"
+ style="fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path37088"
d="m 240.5,325.5 3,3 3,-3"
- style="fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 240.5,335.5 3,-3 3,3"
id="path37090"
sodipodi:nodetypes="ccc"
@@ -63429,17 +62841,17 @@
id="g37094"
style="stroke:#c8c8c8;stroke-opacity:1">
<g
- style="stroke:#c8c8c8;stroke-width:1.5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="stroke:#c8c8c8;stroke-width:1.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="g37096"
transform="translate(-63.000001,168)">
<path
- style="fill:none;stroke:#c8c8c8;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 243.5,336.5 0,-12"
+ style="fill:none;stroke:#c8c8c8;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 243.5,336.5 v -12"
id="path37098"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#c8c8c8;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#c8c8c8;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 240.5,325.5 3,3 3,-3"
id="path37100"
sodipodi:nodetypes="ccc"
@@ -63448,46 +62860,43 @@
sodipodi:nodetypes="ccc"
id="path37102"
d="m 240.5,335.5 3,-3 3,3"
- style="fill:none;stroke:#c8c8c8;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#c8c8c8;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
<g
- style="stroke:#c8c8c8;stroke-width:1.5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- transform="matrix(0,1,-1,0,511,255)"
+ style="stroke:#c8c8c8;stroke-width:1.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ transform="rotate(90,128,383)"
id="g37104">
<path
sodipodi:nodetypes="cc"
id="path37106"
- d="m 243.5,336.5 0,-12"
- style="fill:none;stroke:#c8c8c8;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 243.5,336.5 v -12"
+ style="fill:none;stroke:#c8c8c8;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path37108"
d="m 240.5,325.5 3,3 3,-3"
- style="fill:none;stroke:#c8c8c8;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#c8c8c8;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#c8c8c8;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#c8c8c8;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 240.5,335.5 3,-3 3,3"
id="path37110"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
</g>
</g>
- <path
+ <circle
transform="matrix(0.625,0,0,0.625,15.1875,291.9375)"
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#c8c8c8;stroke-width:2.4000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#c8c8c8;stroke-width:2.4000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path37112"
- sodipodi:cx="264.5"
- sodipodi:cy="330.5"
- sodipodi:rx="2"
- sodipodi:ry="2"
- d="m 266.5,330.5 a 2,2 0 0 1 -2,2 2,2 0 0 1 -2,-2 2,2 0 0 1 2,-2 2,2 0 0 1 2,2 z" />
+ cx="264.5"
+ cy="330.5"
+ r="2" />
</g>
<path
- style="fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 175.75,495.75 175.5,495.5"
id="path37114"
sodipodi:nodetypes="cc"
@@ -63495,36 +62904,36 @@
<path
id="path37116"
d="m 177.5,493.5 0.25,0.25"
- style="fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#ffffff;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 180.5,492.25 0,2.5"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 180.5,492.25 v 2.5"
id="path37118"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
- style="fill:none;stroke:#ffffff;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 177,500 -1.75,1.75"
id="path37120"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
id="path37122"
- d="m 174.25,498.5 2.5,0"
- style="fill:none;stroke:#ffffff;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 174.25,498.5 h 2.5"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
id="path37124"
d="m 179.75,501.25 -2.5,2.5"
- style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
- style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 185.75,495.25 -2.5,2.5"
id="path37126"
inkscape:connector-curvature="0" />
@@ -63532,33 +62941,30 @@
sodipodi:nodetypes="cc"
id="path37128"
d="M 183.75,493.25 182,495"
- style="fill:none;stroke:#ffffff;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
- <path
- d="m 266.5,330.5 a 2,2 0 0 1 -2,2 2,2 0 0 1 -2,-2 2,2 0 0 1 2,-2 2,2 0 0 1 2,2 z"
- sodipodi:ry="2"
- sodipodi:rx="2"
- sodipodi:cy="330.5"
- sodipodi:cx="264.5"
+ <circle
id="path37130"
- style="fill:none;stroke:url(#linearGradient37588);stroke-width:2.4000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc"
- transform="matrix(0.625,0,0,0.625,15.1875,291.9375)" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient37588);stroke-width:2.4000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ transform="matrix(0.625,0,0,0.625,15.1875,291.9375)"
+ cx="264.5"
+ cy="330.5"
+ r="2" />
<path
sodipodi:nodetypes="cc"
id="path37132"
- d="m 182.5,502.5 0,0"
- style="fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 182.5,502.5 v 0"
+ style="fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
- style="fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 184.5,500.5 0,0"
+ style="fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 184.5,500.5 v 0"
id="path37134"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#ffffff;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 185.5,498.5 1.25,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 185.5,498.5 h 1.25"
id="path37136"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
@@ -63575,24 +62981,24 @@
height="16"
width="16"
id="rect37140"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1"
d="m 266.48388,77.49182 c -1,0 -2,10e-6 -3,2e-5 0,0.99999 0,1.99999 0,2.99998 1,0 2,-1e-5 3,-2e-5 0,-0.99999 0,-1.99998 0,-2.99998 z"
id="path37142"
inkscape:connector-curvature="0" />
<path
id="path37144"
d="m 266.48388,83.49182 c -1,0 -2,10e-6 -3,10e-6 0,1 0,2 0,2.99999 1,-1e-5 2,-1e-5 3,-2e-5 0,-0.99999 0,-1.99999 0,-2.99998 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1"
d="m 261.48419,74.5 c -1,0 -2,1e-5 -3,1e-5 0,1 0,2 0,2.99999 1,-1e-5 2,-1e-5 3,-2e-5 0,-0.99999 0,-1.99999 0,-2.99998 z"
id="path37146"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1"
d="m 261.48419,80.5 c -1,0 -2,1e-5 -3,1e-5 0,1 0,2 0,2.99999 1,-1e-5 2,-1e-5 3,-2e-5 0,-0.99999 0,-1.99999 0,-2.99998 z"
id="path37148"
inkscape:connector-curvature="0" />
@@ -63603,15 +63009,15 @@
<path
id="path37152"
d="m 460.50726,389.48364 c -1.00252,0 -2.00505,1e-5 -3.00757,1e-5 0,1.00272 0,2.00544 0,3.00817 1.00252,0 2.00505,-1e-5 3.00757,-1e-5 0,-1.00273 0,-2.00545 0,-3.00817 z"
- style="fill:none;stroke:#000000;stroke-width:1.00000072;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265"
+ style="fill:none;stroke:#000000;stroke-width:1.00000072;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#000000;stroke-width:1.00000072;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265"
+ style="fill:none;stroke:#000000;stroke-width:1.00000072;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1"
d="m 460.51514,395.48364 c -1.00252,0 -2.00505,1e-5 -3.00757,1e-5 0,1.00272 0,2.00544 0,3.00817 1.00252,0 2.00505,-1e-5 3.00757,-1e-5 0,-1.00273 0,-2.00545 0,-3.00817 z"
id="path37154"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#000000;stroke-width:1.00000072;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265"
+ style="fill:none;stroke:#000000;stroke-width:1.00000072;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1"
d="m 455.5,386.5 c -1.00252,0 -2.00505,10e-6 -3.00757,10e-6 0,1.00272 0,2.00544 0,3.00817 1.00252,0 2.00505,-10e-6 3.00757,-10e-6 0,-1.00273 0,-2.00545 0,-3.00817 z"
id="path37156"
inkscape:connector-curvature="0" />
@@ -63651,7 +63057,7 @@
transform="translate(420,44)"
id="ICON_GROUP_UVS">
<rect
- style="opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37168"
width="16.000006"
height="16.000002"
@@ -63663,7 +63069,7 @@
height="16"
width="16"
id="rect37170"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="matrix(1.0004639,0,0,0.9963165,-237.11238,367.28985)"
inkscape:export-ydpi="90"
@@ -63671,86 +63077,71 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="g37172"
style="display:inline">
- <path
+ <circle
transform="matrix(0.81218,0,0,0.815735,163.7897,-27.2907)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- sodipodi:type="arc"
- style="fill:#724c4c;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.10749674;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#724c4c;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.10749674;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path37174"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z" />
- <path
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path37176"
- style="fill:#f9f9f9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.16363633;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc"
- transform="matrix(0.7480284,0,0,0.7480284,172.26025,-19.267349)" />
- <path
- sodipodi:type="arc"
+ style="display:inline;overflow:visible;visibility:visible;fill:#f9f9f9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.16363633;marker:none;enable-background:accumulate"
+ transform="matrix(0.7480284,0,0,0.7480284,172.26025,-19.267349)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
style="opacity:0.6;fill:url(#linearGradient37590);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path37178"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(0.7478104,0,0,0.7510504,172.29077,-19.598754)" />
+ transform="matrix(0.7478104,0,0,0.7510504,172.29077,-19.598754)"
+ cx="132"
+ cy="118"
+ r="8" />
<path
- style="fill:url(#linearGradient37592);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 269.98748,62.965763 c -1.39411,0.455357 -2.67784,0.634788 -4.24803,3.011091 l 2.24896,0 1.99907,-3.011091 0,0 0,0 0,0 z m 0.99954,0 0,3.011091 2.99861,0 -1.99908,-3.011091 -0.99953,0 z m 2.99861,3.011091 0.99953,3.011091 1.99907,0 c 0.006,-0.929403 -0.1914,-1.917894 -0.74965,-3.011091 l -2.24895,0 0,0 0,0 0,0 z m 0.99953,3.011091 -3.99814,0 0,3.011092 2.49884,0 1.4993,-3.011092 z m -3.99814,3.011092 -2.99861,0 1.99907,3.011091 0.99954,0 0,-3.011091 0,0 0,0 0,0 z m -2.99861,0 -0.99954,-3.011092 -1.99907,0 c -0.006,0.929404 0.1914,1.917895 0.74965,3.011092 l 2.24896,0 0,0 0,0 0,0 z m -0.99954,-3.011092 3.99815,0 0,-3.011091 -2.49884,0 -1.49931,3.011091 0,0 0,0 0,0 z m 7.24312,3.011092 -1.85125,3.011091 c 1.3675,-0.485137 2.19971,-0.728674 3.85384,-3.011091 l -2.00259,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient37592);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 269.98748,62.965763 c -1.39411,0.455357 -2.67784,0.634788 -4.24803,3.011091 h 2.24896 z m 0.99954,0 v 3.011091 h 2.99861 l -1.99908,-3.011091 z m 2.99861,3.011091 0.99953,3.011091 h 1.99907 c 0.006,-0.929403 -0.1914,-1.917894 -0.74965,-3.011091 z m 0.99953,3.011091 h -3.99814 v 3.011092 h 2.49884 z m -3.99814,3.011092 h -2.99861 l 1.99907,3.011091 h 0.99954 z m -2.99861,0 -0.99954,-3.011092 h -1.99907 c -0.006,0.929404 0.1914,1.917895 0.74965,3.011092 z m -0.99954,-3.011092 h 3.99815 v -3.011091 h -2.49884 z m 7.24312,3.011092 -1.85125,3.011091 c 1.3675,-0.485137 2.19971,-0.728674 3.85384,-3.011091 z"
id="path37180"
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccc"
id="path37182"
- d="m 274.00069,72.011668 0.005,0.97479 -0.99045,0.01431 -0.0223,1.019377 -0.481,0.837285 c 0.77072,-0.321774 2.72643,-1.067855 3.69499,-2.816464 l -2.20604,-0.0293 -2e-4,2e-6 0,0 0,0 z"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 274.00069,72.011668 0.005,0.97479 -0.99045,0.01431 -0.0223,1.019377 -0.481,0.837285 c 0.77072,-0.321774 2.72643,-1.067855 3.69499,-2.816464 l -2.20604,-0.0293 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
- <path
+ <circle
transform="matrix(0.749782,0,0,0.752489,172.03052,-19.77379)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path37185"
style="opacity:0.4;fill:url(#linearGradient37594);fill-opacity:1;fill-rule:nonzero;stroke:none"
- sodipodi:type="arc" />
- <path
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.7010701,0,0,0.7040938,178.4346,-14.083074)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient37596);stroke-width:1.14049816;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient37596);stroke-width:1.14049816;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path37187"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#aaccff;stroke-width:0;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 268.98793,64.973163 0,0.407752 -0.93706,0 0,0.595945 -0.56224,0 0,1.003697 -0.49977,0 0,1.505546 0.99953,0 0,-1.505546 0.4373,0 0,-0.595945 0.56224,0 0,-0.407752 1.53054,0 0,-1.003697 -1.53054,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#aaccff;stroke-width:0;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 268.98793,64.973163 v 0.407752 h -0.93706 v 0.595945 h -0.56224 v 1.003697 h -0.49977 v 1.505546 h 0.99953 v -1.505546 h 0.4373 v -0.595945 h 0.56224 V 65.97686 h 1.53054 v -1.003697 z"
id="path37189"
inkscape:connector-curvature="0" />
</g>
@@ -63762,12 +63153,12 @@
<path
sodipodi:nodetypes="ccccc"
id="path37231"
- d="m 506.48389,-17.45862 0,-1 c 4.75,-1 2.25,-4.5 6.31852,-4.187139 0.70341,0.496889 0.93148,1.187139 0.93148,2.122782 0,3.064357 -2.5,3.314357 -7.25,3.064357 l 0,0 0,0 0,0 z"
- style="fill:#9d6c53;fill-opacity:1;fill-rule:evenodd;stroke:#241f1c;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 506.48389,-17.45862 v -1 c 4.75,-1 2.25,-4.5 6.31852,-4.187139 0.70341,0.496889 0.93148,1.187139 0.93148,2.122782 0,3.064357 -2.5,3.314357 -7.25,3.064357 z"
+ style="fill:#9d6c53;fill-opacity:1;fill-rule:evenodd;stroke:#241f1c;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.7;fill:url(#radialGradient37608);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 505.98389,-17.522977 c 5.75,-0.75 2.71305,-4.172284 6.75,-5.25 0.70341,0.496889 1.61991,1.711436 1.75268,2.186272 0,3.572675 -4.12319,3.136436 -8.50268,3.063728 l 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:url(#radialGradient37608);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate"
+ d="m 505.98389,-17.522977 c 5.75,-0.75 2.71305,-4.172284 6.75,-5.25 0.70341,0.496889 1.61991,1.711436 1.75268,2.186272 0,3.572675 -4.12319,3.136436 -8.50268,3.063728 z"
id="path37233"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
@@ -63775,16 +63166,16 @@
sodipodi:nodetypes="cccc"
id="path37235"
d="m 515.48389,-25.95862 -2.75,3.25 1.75,2.25 3,-3"
- style="fill:none;stroke:#0b1728;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0b1728;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient37610);fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 514.98389,-24.95862 -2.25,2.5 1.37109,1.875 2.37891,-2.375 -1.5,-2 z"
+ d="m 514.98389,-24.95862 -2.25,2.5 1.37109,1.875 2.37891,-2.375 z"
id="path37237"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#2b0000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#2b0000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 520.48389,-31.45862 -6,6.75 2,2.25 4,-4"
id="path37239"
sodipodi:nodetypes="cccc"
@@ -63792,8 +63183,8 @@
<path
sodipodi:nodetypes="ccccc"
id="path37241"
- d="m 520.98389,-31.95862 -6.75,7.75 1.75,1.75 5,-4.5 0,-5 z"
- style="fill:url(#linearGradient37612);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.23326063;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 520.98389,-31.95862 -6.75,7.75 1.75,1.75 5,-4.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient37612);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.23326063;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
@@ -63802,7 +63193,7 @@
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.4;fill:none;stroke:url(#linearGradient37614);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ style="display:inline;opacity:0.4;fill:none;stroke:url(#linearGradient37614);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
d="m 511.98389,-21.772977 -1.25,1.25 c -0.96702,0.819679 -0.76749,2.123051 -3.25,2.314357"
id="path37245"
sodipodi:nodetypes="ccc"
@@ -63814,7 +63205,7 @@
transform="translate(-42,86)">
<g
id="g37309"
- transform="translate(209,0)">
+ transform="translate(209)">
<rect
rx="0.015625"
y="393"
@@ -63822,15 +63213,15 @@
height="9"
width="9"
id="rect37311"
- style="opacity:0;fill:#736c54;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#736c54;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate"
ry="0.015625" />
<g
id="g37313"
transform="matrix(0.4224039,0.424791,0.4224039,-0.424791,74.64489,479.288)"
style="display:inline">
<path
- style="fill:url(#linearGradient37636);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.33543694;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 85.554034,278.09107 c 1.182038,0.59351 1.745531,1.60418 1.940766,2.40894 l 0.0052,0.2482 c 0,0.75 -0.75,1.75 -1.5,1.75 -0.75,0 -1.16648,-0.20985 -1.91648,-1.20806 -0.5,0 -0.676716,3.3e-4 -1.176716,3.3e-4 -0.75,0.99821 -1.156804,1.20773 -1.906804,1.20773 -0.75,0 -1.5,-1 -1.5,-1.75 l -0.0052,-0.2482 c 0.217441,-0.78256 0.749208,-1.83372 1.92792,-2.42058 l 0.07208,-4.57942 c -0.335564,-0.0958 -0.633693,-0.23081 -0.890995,-0.39497 -0.637372,-0.40663 -1.024226,-0.99226 -1.109005,-1.60503 l 0.0052,-0.2518 c 0,-0.75 0.68844,-1.71861 1.5,-1.75 0.71584,-0.0277 1.25,0 2,1.00179 l 1,0 c 0.749447,-1.00234 1.174653,-1.09387 2,-1.00179 0.745329,0.0832 1.5,1 1.5,1.75 l -0.0052,0.2518 c -0.122391,0.38782 -0.722942,1.77706 -2,2 l 0.05923,4.59106 4e-6,0 0,0 0,0 z"
+ style="fill:url(#linearGradient37636);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.33543694;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 85.554034,278.09107 c 1.182038,0.59351 1.745531,1.60418 1.940766,2.40894 l 0.0052,0.2482 c 0,0.75 -0.75,1.75 -1.5,1.75 -0.75,0 -1.16648,-0.20985 -1.91648,-1.20806 -0.5,0 -0.676716,3.3e-4 -1.176716,3.3e-4 -0.75,0.99821 -1.156804,1.20773 -1.906804,1.20773 -0.75,0 -1.5,-1 -1.5,-1.75 l -0.0052,-0.2482 c 0.217441,-0.78256 0.749208,-1.83372 1.92792,-2.42058 l 0.07208,-4.57942 c -0.335564,-0.0958 -0.633693,-0.23081 -0.890995,-0.39497 -0.637372,-0.40663 -1.024226,-0.99226 -1.109005,-1.60503 l 0.0052,-0.2518 c 0,-0.75 0.68844,-1.71861 1.5,-1.75 0.71584,-0.0277 1.25,0 2,1.00179 h 1 c 0.749447,-1.00234 1.174653,-1.09387 2,-1.00179 0.745329,0.0832 1.5,1 1.5,1.75 l -0.0052,0.2518 c -0.122391,0.38782 -0.722942,1.77706 -2,2 l 0.05923,4.59106 z"
id="path37315"
sodipodi:nodetypes="ccczcczccccsscsccscscc"
inkscape:connector-curvature="0" />
@@ -63844,10 +63235,10 @@
sodipodi:nodetypes="cc"
id="path37319"
d="M 82.4948,279.50001 C 80,278.75 79.891731,281.54098 81.141731,281.29098"
- style="fill:none;stroke:#ffffff;stroke-width:0.83464772;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#ffffff;stroke-width:0.83464772;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#ffffff;stroke-width:0.83464754;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#ffffff;stroke-width:0.83464754;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 82.320782,273.05364 c -2.405243,-1.28815 -1.663086,-3.01898 -0.56905,-2.28347"
id="path37321"
sodipodi:nodetypes="cc"
@@ -63855,12 +63246,12 @@
</g>
</g>
<g
- transform="translate(315,0)"
+ transform="translate(315)"
id="g37323"
style="display:inline;enable-background:new">
<rect
ry="0.019097222"
- style="opacity:0;fill:#736c54;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#736c54;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate"
id="rect37325"
width="11"
height="11"
@@ -63871,23 +63262,23 @@
id="g37327">
<path
id="path37329"
- d="m 116.53125,386.5 c -0.56312,0 -1.03125,0.46811 -1.03125,1.03125 l 0,0.9375 c 0,0.28156 0.12508,0.53133 0.3125,0.71875 L 113,392 c -0.18742,-0.18742 -0.46844,-0.5 -0.75,-0.5 l -0.75,0 c -0.56312,0 -1.03125,0.46811 -1.03125,1.03125 l 0,0.9375 c 0,0.56312 0.46813,1.03125 1.03125,1.03125 l 0.9375,0 c 0.0103,0 0.021,3e-4 0.0312,0 -3e-4,0.0102 0,0.021 0,0.0312 l 0,0.9375 c 0,0.56312 0.46813,1.03126 1.03125,1.03125 l 0.96875,0 c 0.56312,0 1,-0.46813 1,-1.03125 l 0,-0.9375 c 0,-0.28156 -0.10164,-0.53133 -0.28125,-0.71875 l 2.625,-2.625 c 0.18742,0.18742 0.43719,0.3125 0.71875,0.3125 l 0.96875,0 c 0.56312,0 1,-0.46813 1,-1.03125 l 0,-0.9375 c 0,-0.56312 -0.43688,-1.03125 -1,-1.03125 l -0.96875,0 c -0.0103,0 -0.021,-3e-4 -0.0312,0 3e-4,-0.0102 0,-0.021 0,-0.0312 l 0,-0.9375 c 0,-0.56312 -0.46813,-1.03125 -1.03125,-1.03125 l -0.9375,0 z"
- style="fill:url(#linearGradient37638);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 116.53125,386.5 c -0.56312,0 -1.03125,0.46811 -1.03125,1.03125 v 0.9375 c 0,0.28156 0.12508,0.53133 0.3125,0.71875 L 113,392 c -0.18742,-0.18742 -0.46844,-0.5 -0.75,-0.5 h -0.75 c -0.56312,0 -1.03125,0.46811 -1.03125,1.03125 v 0.9375 c 0,0.56312 0.46813,1.03125 1.03125,1.03125 h 0.9375 c 0.0103,0 0.021,3e-4 0.0312,0 -3e-4,0.0102 0,0.021 0,0.0312 v 0.9375 c 0,0.56312 0.46813,1.03126 1.03125,1.03125 h 0.96875 c 0.56312,0 1,-0.46813 1,-1.03125 v -0.9375 c 0,-0.28156 -0.10164,-0.53133 -0.28125,-0.71875 l 2.625,-2.625 c 0.18742,0.18742 0.43719,0.3125 0.71875,0.3125 h 0.96875 c 0.56312,0 1,-0.46813 1,-1.03125 v -0.9375 c 0,-0.56312 -0.43688,-1.03125 -1,-1.03125 h -0.96875 c -0.0103,0 -0.021,-3e-4 -0.0312,0 3e-4,-0.0102 0,-0.021 0,-0.0312 v -0.9375 c 0,-0.56312 -0.46813,-1.03125 -1.03125,-1.03125 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient37638);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cccccccccccsccccccccccccccscccc"
inkscape:connector-curvature="0" />
<path
id="path37331"
- d="m 111.5,393.5 0,-0.75 0.25,-0.25 1.75,0 3,-3 0,-1.75 0.25,-0.25 0.75,0"
+ d="m 111.5,393.5 v -0.75 l 0.25,-0.25 h 1.75 l 3,-3 v -1.75 l 0.25,-0.25 h 0.75"
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 118.75,389.5 0.75,0 m -6,6 0,-0.75"
+ d="m 118.75,389.5 h 0.75 m -6,6 v -0.75"
id="path37333"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate"
id="rect37335"
width="1"
height="1"
@@ -63899,7 +63290,7 @@
height="1"
width="1"
id="rect37337"
- style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate" />
</g>
</g>
</g>
@@ -63908,13 +63299,13 @@
id="ICON_GROUP_VCOL"
transform="translate(-84,65)">
<rect
- transform="scale(-1,-1)"
+ transform="scale(-1)"
y="-423"
x="-525"
height="16"
width="16"
id="rect37341"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
style="display:inline"
id="g37343"
@@ -63954,18 +63345,18 @@
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<path
- style="fill:none;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265"
+ style="fill:none;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1"
d="m 163.5,95.5 c 1,5e-6 2,1.1e-5 3,1.6e-5 0,0.999995 0,1.99999 0,2.999984 -1,-5e-6 -2,-1.1e-5 -3,-1.6e-5 0,-0.999994 0,-1.999989 0,-2.999984 z"
id="path37356"
inkscape:connector-curvature="0" />
<path
id="path37358"
d="m 163.5,101.5 c 1,1e-5 2,1e-5 3,2e-5 0,0.99999 0,1.99999 0,2.99998 -1,-1e-5 -2,-1e-5 -3,-2e-5 0,-0.99999 0,-1.99998 0,-2.99998 z"
- style="fill:none;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265"
+ style="fill:none;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265"
- d="m 168.49997,92.49997 c 1,5e-6 2,1.1e-5 3,1.6e-5 0,0.999995 0,1.999995 0,2.999985 -1,-1e-5 -2,-1e-5 -3,-2e-5 0,-0.99999 0,-1.999986 0,-2.999981 l 0,0 0,0 0,0 z"
+ style="fill:none;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1"
+ d="m 168.49997,92.49997 c 1,5e-6 2,1.1e-5 3,1.6e-5 0,0.999995 0,1.999995 0,2.999985 -1,-1e-5 -2,-1e-5 -3,-2e-5 0,-0.99999 0,-1.999986 0,-2.999981 z"
id="path37360"
inkscape:connector-curvature="0" />
</g>
@@ -64094,39 +63485,33 @@
transform="matrix(0.3484724,-0.6035734,0.603572,0.3484733,11.703006,261.6228)"
inkscape:transform-center-y="-3.2500006" />
</g>
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path37382"
- style="fill:none;stroke:#000000;stroke-width:1.29430985;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.8124999,0,0,0.8045157,241.75,163.13011)" />
- <path
+ style="fill:none;stroke:#000000;stroke-width:1.29430985;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.8124999,0,0,0.8045157,241.75,163.13011)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.6594197,0,0,0.6608114,261.96791,180.02435)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient37640);stroke-width:1.98156261;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient37640);stroke-width:1.98156261;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path37384"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
id="ICON_ARROW_LEFTRIGHT"
transform="translate(0,2)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect37759"
width="16"
height="16"
@@ -64141,31 +63526,31 @@
<g
id="g37781"
style="opacity:0.85"
- transform="translate(20.029029,0)">
+ transform="translate(20.029029)">
<path
sodipodi:nodetypes="cccccc"
id="path37783"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:12.66808051;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:12.66808033;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 447.72097,225.25 -3.25,3.25 3.25,3.25 m 6.5,-6.5 3.25,3.25 -3.25,3.25"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#000000;stroke-width:2.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:12.66808051;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 444.54256,228.5 11.66489,0 0,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:2.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:12.66808033;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 444.54256,228.5 h 11.66489 v 0"
id="path37785"
inkscape:connector-curvature="0" />
</g>
<g
id="g37787"
- transform="translate(20.029029,0)">
+ transform="translate(20.029029)">
<path
id="path37789"
- d="m 444.47097,228.5 13,0"
+ d="m 444.47097,228.5 h 13"
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
d="m 447.72097,225.25 -3.25,3.25 3.25,3.25 m 6.5,-6.5 3.25,3.25 -3.25,3.25"
- style="fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path37791"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
@@ -64183,7 +63568,7 @@
height="16"
width="16"
id="rect41153"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="matrix(1.0003553,0,0,0.9995949,18.983834,-41.953346)"
style="display:inline"
@@ -64197,14 +63582,14 @@
height="13.003749"
width="12.995382"
id="rect41157"
- style="fill:url(#linearGradient42322);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80001998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:url(#linearGradient42322);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80001998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<path
sodipodi:nodetypes="ccc"
id="path41159"
- d="m 46.49945,103.49527 0,-11.002747 10.996287,0 0,11.002747 -10.996287,0 z"
+ d="M 46.49945,103.49527 V 92.492523 h 10.996287 v 11.002747 z"
style="fill:none;stroke:url(#linearGradient42324);stroke-width:1.0000248px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -64222,7 +63607,7 @@
height="16"
width="16"
id="rect41163"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
@@ -64230,50 +63615,41 @@
transform="matrix(1.1658027,0,0,1.1657997,-59.289717,-204.05607)"
id="g41165"
style="display:inline">
- <path
+ <circle
transform="matrix(0.6969446,0,0,0.6900977,36.918531,141.69345)"
- sodipodi:type="arc"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.23686147;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.23686147;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path41167"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(-0.6391427,-0.07194179,0.07284933,-0.6344823,204.68584,307.47408)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path41169"
- style="opacity:0.8;fill:url(#linearGradient42326);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- sodipodi:type="arc" />
+ style="display:inline;opacity:0.8;fill:url(#linearGradient42326);fill-opacity:1;fill-rule:nonzero;stroke:none"
+ cx="132"
+ cy="118"
+ r="8" />
<path
id="path41171"
- style="fill:none;stroke:url(#linearGradient42328);stroke-width:0.51466751;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline;enable-background:new"
+ style="display:inline;fill:none;stroke:url(#linearGradient42328);stroke-width:0.51466751;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
d="m 134.27086,222.67786 c -0.8523,1.03645 -2.40069,1.91195 -5.35869,1.91195 -2.92931,0 -4.50028,-0.8755 -5.35806,-1.88283 m 5.3611,5.72324 c -1.3021,0 -2.35888,-2.40136 -2.35888,-5.36019 0,-2.95882 1.05678,-5.36019 2.35888,-5.36019 1.30211,0 2.35889,2.40137 2.35889,5.36019 0,2.9364 -1.03866,5.32486 -2.33081,5.35981"
inkscape:connector-curvature="0" />
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path41173"
- style="opacity:0.5;fill:none;stroke:url(#linearGradient42330);stroke-width:1.45605874;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.5885088,0,0,0.5897133,51.241774,153.48488)" />
+ style="opacity:0.5;fill:none;stroke:url(#linearGradient42330);stroke-width:1.45605874;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.5885088,0,0,0.5897133,51.241774,153.48488)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
@@ -64286,13 +63662,13 @@
height="16"
width="16"
id="rect41177"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g41179"
transform="translate(116,-325)">
<path
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m -55,358.25 -6,-2.25 -6,2.25 0,7.5 6,3.25 6,-3.25 0,-7.5 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m -55,358.25 -6,-2.25 -6,2.25 v 7.5 l 6,3.25 6,-3.25 z"
id="path41181"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
@@ -64300,8 +63676,8 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
- style="fill:url(#linearGradient42332);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89207077px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -55,365.75 0,-7.5 -6,-2.25 8.34e-4,13.04035 L -55,365.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient42332);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89207077px;marker:none;enable-background:accumulate"
+ d="m -55,365.75 v -7.5 l -6,-2.25 8.34e-4,13.04035 z"
id="path41183"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
@@ -64310,7 +63686,7 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
id="path41185"
- d="m -67,365.75 0,-7.5 6,-2.25 8.34e-4,13.04035 L -67,365.75 z"
+ d="m -67,365.75 v -7.5 l 6,-2.25 8.34e-4,13.04035 z"
style="fill:#c9c9c9;fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
@@ -64320,13 +63696,13 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
sodipodi:nodetypes="ccccc"
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m -67,358.25 6,-2.25 6,2.25 -6,2.75 -6,-2.75 z"
+ d="m -67,358.25 6,-2.25 6,2.25 -6,2.75 z"
id="path41187"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccc"
id="path41189"
- d="M -66.499841,365.52276 -66.5,358.5 l 5.5,-2 5.5,2 0,7 -5.5,3 -5.499841,-2.97724 z"
+ d="M -66.499841,365.52276 -66.5,358.5 l 5.5,-2 5.5,2 v 7 l -5.5,3 z"
style="fill:none;stroke:url(#linearGradient42334);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
@@ -64336,7 +63712,7 @@
transform="translate(3,417)"
id="ICON_MESH_MONKEY">
<rect
- style="opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate"
id="rect41193"
width="16"
height="16"
@@ -64346,20 +63722,20 @@
id="g41195">
<path
id="path41197"
- style="fill:#999999;fill-rule:evenodd;stroke:#000000;stroke-width:0.55000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:#999999;fill-rule:evenodd;stroke:#000000;stroke-width:0.55000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 140,-21 c 1.125,1 3.5,0.25 3.5,-1 0,-1.5 0.47443,-1.637992 -2,-1.5 -0.1033,1.43128 -0.66697,1.819388 -1.5,2.5 z"
sodipodi:nodetypes="cscc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cscc"
d="m 132,-21 c -1.125,1 -3.5,0.25 -3.5,-1 0,-1.5 -0.47443,-1.637992 2,-1.5 0.1033,1.43128 0.66697,1.819388 1.5,2.5 z"
- style="fill:#e6e6e6;fill-rule:evenodd;stroke:#000000;stroke-width:0.55000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:#e6e6e6;fill-rule:evenodd;stroke:#000000;stroke-width:0.55000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path41199"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccccsccccccc"
- d="m 135.75,-25.5 -1.25,-2 -0.75,0 -3.25,2.75 0,1.25 c 0.15379,2.182132 1.3678,1.901463 3,4 l 0,4.5 c 0,1.5 1.5,1.5 2.5,1.5 1,0 2.5,0 2.5,-1.5 l 0,-4.5 c 1.62605,-2.090636 2.83897,-1.844587 3,-4 l 0,-1.25 -3.25,-2.75 -0.75,0 -1.25,2"
- style="fill:url(#linearGradient42336);fill-rule:evenodd;stroke:none;display:inline;enable-background:new"
+ d="m 135.75,-25.5 -1.25,-2 h -0.75 l -3.25,2.75 v 1.25 c 0.15379,2.182132 1.3678,1.901463 3,4 v 4.5 c 0,1.5 1.5,1.5 2.5,1.5 1,0 2.5,0 2.5,-1.5 v -4.5 c 1.62605,-2.090636 2.83897,-1.844587 3,-4 v -1.25 l -3.25,-2.75 h -0.75 l -1.25,2"
+ style="display:inline;fill:url(#linearGradient42336);fill-rule:evenodd;stroke:none;enable-background:new"
id="path41201"
inkscape:connector-curvature="0" />
<rect
@@ -64368,10 +63744,10 @@
height="1"
width="2"
id="rect41203"
- style="opacity:0.8;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.8;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate" />
<rect
ry="1"
- style="fill:url(#linearGradient42338);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient42338);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate"
id="rect41205"
width="2.75"
height="2"
@@ -64384,39 +63760,30 @@
height="1"
width="2"
id="rect41207"
- style="fill:#f9f9f9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
+ style="display:inline;overflow:visible;visibility:visible;fill:#f9f9f9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate" />
+ <circle
transform="translate(0.5,-0.46875)"
- d="m 134,-23 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- sodipodi:ry="1"
- sodipodi:rx="1"
- sodipodi:cy="-23"
- sodipodi:cx="133"
id="path41209"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient42340);stroke-width:0.93034029;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
+ cx="133"
+ cy="-23"
+ r="1" />
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient42340);stroke-width:0.93034029;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path41211"
- sodipodi:cx="133"
- sodipodi:cy="-23"
- sodipodi:rx="1"
- sodipodi:ry="1"
- d="m 134,-23 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- transform="matrix(1.2143583,0,0,1.1512108,-28.054112,2.9290602)" />
- <path
- sodipodi:type="arc"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ transform="matrix(1.2143583,0,0,1.1512108,-28.054112,2.9290602)"
+ cx="133"
+ cy="-23"
+ r="1" />
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="path41213"
- sodipodi:cx="133"
- sodipodi:cy="-23"
- sodipodi:rx="1"
- sodipodi:ry="1"
- d="m 134,-23 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- transform="matrix(0.8392157,0,0,0.8382979,21.884318,-4.2140957)" />
- <rect
- style="opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ transform="matrix(0.8392157,0,0,0.8382979,21.884318,-4.2140957)"
+ cx="133"
+ cy="-23"
+ r="1" />
+ <rect
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate"
id="rect41215"
width="2"
height="1"
@@ -64424,30 +63791,24 @@
y="-15" />
<path
id="path41217"
- style="fill:none;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
- d="m 131.88556,-21.103144 c 0.4583,0.371362 1.00745,1.072735 1.61444,1.853144 l 0,3.75 c 0,1.5 1.5,2 2.5,2 1,0 2.5,-0.5 2.5,-2 l 0,-3.75 c 0.64842,-0.833678 1.23114,-1.545786 1.70766,-1.936772 M 130.5,-23.5 l 0,-1.25 3,-2.75 1,0 1.25,1.75 0.5,0 1.25,-1.75 1,0 3,2.75 0,1.25"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="m 131.88556,-21.103144 c 0.4583,0.371362 1.00745,1.072735 1.61444,1.853144 v 3.75 c 0,1.5 1.5,2 2.5,2 1,0 2.5,-0.5 2.5,-2 v -3.75 c 0.64842,-0.833678 1.23114,-1.545786 1.70766,-1.936772 M 130.5,-23.5 v -1.25 l 3,-2.75 h 1 l 1.25,1.75 h 0.5 l 1.25,-1.75 h 1 l 3,2.75 v 1.25"
sodipodi:nodetypes="ccccccccccccccccs"
inkscape:connector-curvature="0" />
- <path
+ <circle
transform="matrix(1.2116904,0,0,1.1282344,-22.693138,2.3776257)"
- d="m 134,-23 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- sodipodi:ry="1"
- sodipodi:rx="1"
- sodipodi:cy="-23"
- sodipodi:cx="133"
id="path41219"
- style="fill:none;stroke:url(#linearGradient42342);stroke-width:0.94079971;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient42342);stroke-width:0.94079971;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="133"
+ cy="-23"
+ r="1" />
+ <circle
transform="matrix(0.8392157,0,0,0.8382979,26.893134,-4.2140957)"
- d="m 134,-23 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- sodipodi:ry="1"
- sodipodi:rx="1"
- sodipodi:cy="-23"
- sodipodi:cx="133"
id="path41221"
- style="fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
+ cx="133"
+ cy="-23"
+ r="1" />
<path
sodipodi:nodetypes="cc"
id="path41223"
@@ -64478,51 +63839,51 @@
height="16"
width="16"
id="rect41231"
- style="opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="ccccc"
id="path41233"
- d="m -72,23.5 -1.5,4 8,0 0,-0.25 -6.5,-3.75 z"
+ d="m -72,23.5 -1.5,4 h 8 v -0.25 z"
style="fill:#ececec;fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
<path
id="path41235"
- d="m -73.5,27.5 3,7 5,-7 -8,0 z"
+ d="m -73.5,27.5 3,7 5,-7 z"
style="fill:#c3c3c3;fill-opacity:1;fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
<path
id="path41237"
- d="m -65.5,27.5 -5,7 5,0 0,-7 z"
+ d="m -65.5,27.5 -5,7 h 5 z"
style="fill:#666666;fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
<path
id="path41239"
- d="m -70.5,34.5 -1.5,4 6.5,-3.75 0,-0.25 -5,0"
- style="fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -70.5,34.5 -1.5,4 6.5,-3.75 V 34.5 h -5"
+ style="display:inline;overflow:visible;visibility:visible;fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
id="path41241"
- d="m -78.5,34.5 0,0.25 6.5,3.75 1.5,-4 -8,0 z"
+ d="m -78.5,34.5 v 0.25 l 6.5,3.75 1.5,-4 z"
style="fill:#b3b3b3;fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
<path
id="path41243"
- d="m -78.5,27.5 0,-0.25 6.5,-3.75 -1.5,4 -5,0 z"
+ d="m -78.5,27.5 v -0.25 l 6.5,-3.75 -1.5,4 z"
style="fill:#ffffff;fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
<path
id="path41245"
- d="m -73.5,27.5 -5,0 0,7 5,-7 z"
+ d="m -73.5,27.5 h -5 v 7 z"
style="fill:#ffffff;fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
<path
id="path41247"
- d="m -78.5,34.5 8,0 -3,-7 -5,7 z"
+ d="m -78.5,34.5 h 8 l -3,-7 z"
style="fill:#f2f2f2;fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
<path
sodipodi:type="star"
- style="fill:none;stroke:#000000;stroke-width:0.76889962;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:0.76889962;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path41249"
sodipodi:sides="6"
sodipodi:cx="-72"
@@ -64539,8 +63900,8 @@
<path
sodipodi:nodetypes="cccccccccccc"
id="path41251"
- style="fill:none;stroke:url(#linearGradient42344);stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m -78.5,27.5 13,0 m -7,-3 -1,3 m -5,7 12.75,0 m -12.75,0 5,-6.75 3,6.75 5,-7 m -5,7 -1,3"
+ style="fill:none;stroke:url(#linearGradient42344);stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m -78.5,27.5 h 13 m -7,-3 -1,3 m -5,7 h 12.75 m -12.75,0 5,-6.75 3,6.75 5,-7 m -5,7 -1,3"
inkscape:connector-curvature="0" />
<path
transform="matrix(0.8807051,0,0,0.9013876,-8.5892309,3.0569843)"
@@ -64556,7 +63917,7 @@
sodipodi:cx="-72"
sodipodi:sides="6"
id="path41253"
- style="opacity:0.5;fill:none;stroke:url(#linearGradient42346);stroke-width:1.12235165;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:none;stroke:url(#linearGradient42346);stroke-width:1.12235165;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:type="star" />
</g>
<g
@@ -64569,7 +63930,7 @@
height="16"
width="16"
id="rect41257"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="matrix(1.0003553,0,0,0.9995949,-165.01617,-49.953346)"
style="display:inline"
@@ -64583,14 +63944,14 @@
height="12.004883"
width="11.995742"
id="rect41261"
- style="fill:url(#linearGradient42348);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80001998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:url(#linearGradient42348);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80001998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<path
sodipodi:nodetypes="ccccc"
id="path41263"
- d="m 47.49929,95.49203 0,-2.000811 1.999291,3e-6 0,2.000811 -1.999291,-3e-6 z"
+ d="m 47.49929,95.49203 v -2.000811 l 1.999291,3e-6 v 2.000811 z"
style="fill:none;stroke:url(#linearGradient42350);stroke-width:1.00002491px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -64601,14 +63962,14 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
style="fill:none;stroke:url(#linearGradient42352);stroke-width:1.00002491px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 47.49929,99.493651 0,-1.999102 1.999291,-4e-6 0,1.999102 -1.999291,4e-6 z"
+ d="m 47.49929,99.493651 v -1.999102 l 1.999291,-4e-6 v 1.999102 z"
id="path41265"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path41267"
- d="m 47.49929,103.49527 0,-1.9991 1.999291,0 0,1.9991 -1.999291,0 z"
+ d="m 47.49929,103.49527 v -1.9991 h 1.999291 v 1.9991 z"
style="fill:none;stroke:url(#linearGradient42354);stroke-width:1.00002491px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -64619,14 +63980,14 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
style="fill:none;stroke:url(#linearGradient42356);stroke-width:1.00002491px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 51.497871,103.49527 0,-1.9991 1.99929,0 0,1.9991 -1.99929,0 z"
+ d="m 51.497871,103.49527 v -1.9991 h 1.99929 v 1.9991 z"
id="path41269"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path41271"
- d="m 51.497869,99.49194 0,-1.9991 1.99929,0 0,1.9991 -1.99929,0 z"
+ d="m 51.497869,99.49194 v -1.9991 h 1.99929 v 1.9991 z"
style="fill:none;stroke:url(#linearGradient42358);stroke-width:1.00002491px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -64637,14 +63998,14 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
style="fill:none;stroke:url(#linearGradient42360);stroke-width:1.00002491px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 51.497868,95.49203 1e-6,-2.000811 1.99929,0 -1e-6,2.000811 -1.99929,0 z"
+ d="m 51.497868,95.49203 1e-6,-2.000811 h 1.99929 l -1e-6,2.000811 z"
id="path41273"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path41275"
- d="m 55.496451,103.49527 0,-1.9991 1.99929,0 0,1.9991 -1.99929,0 z"
+ d="m 55.496451,103.49527 v -1.9991 h 1.99929 v 1.9991 z"
style="fill:none;stroke:url(#linearGradient42362);stroke-width:1.00002491px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -64655,14 +64016,14 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
style="fill:none;stroke:url(#linearGradient42364);stroke-width:1.00002491px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 55.496449,99.49194 0,-1.9991 1.99929,0 0,1.9991 -1.99929,0 z"
+ d="m 55.496449,99.49194 v -1.9991 h 1.99929 v 1.9991 z"
id="path41277"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path41279"
- d="m 55.496448,95.49203 0,-2.000811 1.99929,0 0,2.000811 -1.99929,0 z"
+ d="m 55.496448,95.49203 v -2.000811 h 1.99929 v 2.000811 z"
style="fill:none;stroke:url(#linearGradient42366);stroke-width:1.00002491px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -64671,8 +64032,8 @@
</g>
<path
id="path41281"
- style="fill:none;stroke:url(#linearGradient42368);stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m -110.5,43 0,11 m -4,-11 0,11 m 7.5,-3.5 -11,0 m 11,-4 -11,0"
+ style="fill:none;stroke:url(#linearGradient42368);stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m -110.5,43 v 11 m -4,-11 v 11 m 7.5,-3.5 h -11 m 11,-4 h -11"
inkscape:connector-curvature="0" />
</g>
<g
@@ -64685,59 +64046,47 @@
height="16"
width="16"
id="rect41285"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path41287"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.23034608;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.8124999,0,0,0.813059,-327.25,-31.946343)" />
- <path
- sodipodi:type="arc"
- style="opacity:0.8;fill:url(#linearGradient42370);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.23034608;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.8124999,0,0,0.813059,-327.25,-31.946343)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
+ style="display:inline;opacity:0.8;fill:url(#linearGradient42370);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path41289"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(0.7451143,0.08386971,-0.08492794,0.7396793,-308.33359,-34.308811)" />
- <path
+ transform="matrix(0.7451143,0.08386971,-0.08492794,0.7396793,-308.33359,-34.308811)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.6860851,0,0,0.6874876,-310.55192,-17.123443)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient42372);stroke-width:1.45605874;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient42372);stroke-width:1.45605874;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path41291"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path41293"
- style="fill:none;stroke:url(#linearGradient42374);stroke-width:1.78040731;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.5610858,0,0,0.5622541,-294.05201,-2.3458915)" />
+ style="fill:none;stroke:url(#linearGradient42374);stroke-width:1.78040731;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.5610858,0,0,0.5622541,-294.05201,-2.3458915)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
style="display:inline;enable-background:new"
@@ -64749,15 +64098,15 @@
height="16"
width="16"
id="rect41297"
- style="opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="cccsccc"
id="path41299"
d="m -220,156.5 c -3.036,0 -5.49999,1.12 -5.49999,2.5 l -1e-5,9 c 0,1.38 2.46399,2.5 5.49999,2.5 3.036,0 5.5,-1.12 5.5,-2.5 l 1e-5,-9 c 0,-1.38 -2.464,-2.5 -5.5,-2.5 z"
- style="fill:url(#linearGradient42376);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient42376);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:url(#linearGradient42378);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient42380);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient42378);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient42380);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m -215.49145,159.5 c 0,1 -1.5,2 -4.50855,2 -3.00854,0 -4.49145,-1 -4.49145,-2 0,-1.5 2.25,-2.25 4.5,-2.25 2.25,0 4.5,0.75 4.5,2.25 z"
id="path41301"
sodipodi:nodetypes="czszs"
@@ -64766,17 +64115,17 @@
sodipodi:nodetypes="czs"
id="path41303"
d="m -214.99565,159.99149 c 0,1.12926 -1.66739,2.25851 -5.01168,2.25851 -3.34426,0 -4.99267,-1.12925 -4.99267,-2.25851"
- style="opacity:0.3;fill:none;stroke:url(#linearGradient42382);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:none;stroke:url(#linearGradient42382);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -220,156.5 c -3.49999,0 -5.49999,1.12 -5.49999,2.5 l -1e-5,8.5 c 0,2 2.46399,3 5.49999,3 3.036,0 5.50001,-1 5.50001,-3 l 0,-8.5 c 0,-1.38 -1.99999,-2.5 -5.5,-2.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -220,156.5 c -3.49999,0 -5.49999,1.12 -5.49999,2.5 l -1e-5,8.5 c 0,2 2.46399,3 5.49999,3 3.036,0 5.50001,-1 5.50001,-3 V 159 c 0,-1.38 -1.99999,-2.5 -5.5,-2.5 z"
id="path41305"
sodipodi:nodetypes="cccsccc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient42384);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -224.5,160.5 0,6.5 c 0,0.9838 0.64285,2.5 4.5,2.5 3.85714,0 4.5,-1.5162 4.5,-2.5 l 0,-6.5"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient42384);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -224.5,160.5 v 6.5 c 0,0.9838 0.64285,2.5 4.5,2.5 3.85714,0 4.5,-1.5162 4.5,-2.5 v -6.5"
id="path41307"
sodipodi:nodetypes="ccscc"
inkscape:connector-curvature="0" />
@@ -64786,7 +64135,7 @@
id="ICON_MESH_TORUS"
transform="translate(401,212)">
<rect
- style="opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect41311"
width="16"
height="16"
@@ -64796,16 +64145,16 @@
sodipodi:nodetypes="cssscccscc"
id="path41313"
d="m -220,178.5 c -4.14,0 -7.40235,2.464 -7.40234,5.5 0,3.036 3.26234,5.5 7.40234,5.5 4.14,0 7.40234,-2.464 7.40234,-5.5 0,-3.036 -3.26233,-5.50001 -7.40234,-5.5 z m 0,4 c 1.2993,0 2.42742,0.39879 3.03125,1 -0.60383,0.60121 -1.73196,1 -3.03125,1 -1.29929,0 -2.42742,-0.39879 -3.03125,-1 0.60383,-0.60121 1.73196,-1 3.03125,-1 z"
- style="fill:url(#linearGradient42386);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient42386);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccsscc"
id="path41315"
- d="m -214.625,180.4375 c 1.5822,4.85564 -3.15377,7.27675 -11.84375,6.21875 l 0,0.0312 c 1.25689,1.67541 3.66207,2.8125 6.46875,2.8125 4.14,0 7.40625,-2.464 7.40625,-5.5 0,-1.34213 -0.64966,-2.57614 -1.71875,-3.53125 -0.10326,-0.0119 -0.20204,-0.024 -0.3125,-0.0312 z"
+ d="m -214.625,180.4375 c 1.5822,4.85564 -3.15377,7.27675 -11.84375,6.21875 v 0.0312 c 1.25689,1.67541 3.66207,2.8125 6.46875,2.8125 4.14,0 7.40625,-2.464 7.40625,-5.5 0,-1.34213 -0.64966,-2.57614 -1.71875,-3.53125 -0.10326,-0.0119 -0.20204,-0.024 -0.3125,-0.0312 z"
style="opacity:0.6;fill:url(#radialGradient42388);fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.6;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate"
d="m -223.375,183.45313 c 1.90631,-1.46639 4.08905,-1.44306 6.1875,-0.53125 L -217,182.76563 c -0.60315,-4.39553 -10.23988,-3.57787 -6.375,0.6875 z"
id="path41317"
sodipodi:nodetypes="cccc"
@@ -64814,18 +64163,16 @@
sodipodi:nodetypes="cccsccc"
id="path41319"
d="m -223.375,183.65625 0.5,-0.0312 c -0.0509,-0.0426 -0.11109,-0.08 -0.15625,-0.125 0.60383,-0.60121 1.73196,-1 3.03125,-1 0.99575,0 1.89552,0.24495 2.53125,0.625 L -217,182.96875 c -0.60315,-4.39553 -10.23988,-3.57787 -6.375,0.6875 z"
- style="opacity:0.6;fill:url(#radialGradient42390);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:url(#radialGradient42390);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient42392);stroke-width:0.5962854;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient42392);stroke-width:0.5962854;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path41321"
- sodipodi:cx="-220"
- sodipodi:cy="40.5"
- sodipodi:rx="6.5"
- sodipodi:ry="2.5"
- d="m -213.5,40.5 a 6.5,2.5 0 0 1 -6.5,2.5 6.5,2.5 0 0 1 -6.5,-2.5 6.5,2.5 0 0 1 6.5,-2.5 6.5,2.5 0 0 1 6.5,2.5 z"
- transform="matrix(0.9999986,0,0,1.799999,-2.971883e-4,111.10004)" />
+ transform="matrix(0.9999986,0,0,1.799999,-2.971883e-4,111.10004)"
+ cx="-220"
+ cy="40.5"
+ rx="6.5"
+ ry="2.5" />
</g>
<g
style="display:inline;enable-background:new"
@@ -64837,21 +64184,21 @@
height="16"
width="16"
id="rect41325"
- style="opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="ccssscc"
id="path41327"
- d="m -220,196.70312 -6.24219,10.18714 c -0.17094,0.32797 -0.25781,0.44407 -0.25781,0.85974 0,2.25 2.96003,3.75 6.5,3.75 3.53998,0 6.5,-1.5 6.5,-3.75 0,-0.41567 -0.0869,-0.53177 -0.2578,-0.85974 L -220,196.70312 z"
- style="fill:url(#radialGradient42394);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -220,196.70312 -6.24219,10.18714 c -0.17094,0.32797 -0.25781,0.44407 -0.25781,0.85974 0,2.25 2.96003,3.75 6.5,3.75 3.53998,0 6.5,-1.5 6.5,-3.75 0,-0.41567 -0.0869,-0.53177 -0.2578,-0.85974 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient42394);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient42396);stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -220,198.75 -5.29067,8.34531 c -0.1388,0.26737 -0.20933,0.56583 -0.20933,0.90469 0,1.3338 2.63213,2.56728 5.50644,2.56728 2.87432,0 5.49356,-1.23348 5.49356,-2.56728 0,-0.33886 -0.0706,-0.63732 -0.20932,-0.90469 L -220,198.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient42396);stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -220,198.75 -5.29067,8.34531 c -0.1388,0.26737 -0.20933,0.56583 -0.20933,0.90469 0,1.3338 2.63213,2.56728 5.50644,2.56728 2.87432,0 5.49356,-1.23348 5.49356,-2.56728 0,-0.33886 -0.0706,-0.63732 -0.20932,-0.90469 z"
id="path41329"
sodipodi:nodetypes="ccssscc"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.05;fill:none;stroke:#1a1a1a;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.05;fill:none;stroke:#1a1a1a;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m -226.5,208 c 0,-1.63609 2.96003,-3.5 6.5,-3.5 3.53998,0 6.5,1.75 6.5,3.5"
id="path41331"
sodipodi:nodetypes="css"
@@ -64862,50 +64209,50 @@
id="ICON_CURVE_BEZCURVE"
transform="translate(472,230)">
<rect
- style="opacity:0.01000001;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect41335"
width="16"
height="16"
x="-278"
y="137" />
<g
- transform="translate(-22,0)"
+ transform="translate(-22)"
id="g41337">
<path
- style="fill:#aaccff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;display:inline;enable-background:new"
+ style="display:inline;fill:#aaccff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;enable-background:new"
d="m -243.5,137.5 c 1.00003,1e-5 2.00005,1e-5 3.00008,2e-5 0,0.99999 0,1.99999 0,2.99998 -1.00003,0 -2.00005,-1e-5 -3.00008,-1e-5 0,-1 0,-1.99999 0,-2.99999 z"
id="path41339"
inkscape:connector-curvature="0" />
<path
id="path41341"
d="m -255.5,137.5 c 1.00003,1e-5 2.00005,1e-5 3.00008,2e-5 0,0.99999 0,1.99998 0,2.99998 -1.00003,-1e-5 -2.00005,-1e-5 -3.00008,-2e-5 0,-0.99999 0,-1.99999 0,-2.99998 z"
- style="fill:#aaccff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;display:inline;enable-background:new"
+ style="display:inline;fill:#aaccff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
<g
id="g41343"
style="opacity:0.7">
<path
sodipodi:nodetypes="cc"
- style="fill:#aaccff;fill-opacity:0.75;fill-rule:evenodd;stroke:#003380;stroke-width:2.79999995;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -252.25,139.5 8.5,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#aaccff;fill-opacity:0.75;fill-rule:evenodd;stroke:#003380;stroke-width:2.79999995;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -252.25,139.5 h 8.5"
id="path41345"
inkscape:connector-curvature="0" />
<path
id="path41347"
- d="m -252,139.5 8,0"
- style="fill:#aaccff;fill-opacity:1;fill-rule:evenodd;stroke:#aaccff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -252,139.5 h 8"
+ style="display:inline;overflow:visible;visibility:visible;fill:#aaccff;fill-opacity:1;fill-rule:evenodd;stroke:#aaccff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
</g>
<path
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
- d="m -254.5,139.5 0,-1 1,0"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m -254.5,139.5 v -1 h 1"
id="path41349"
inkscape:connector-curvature="0" />
<path
id="path41351"
- d="m -242.5,139.5 0,-1 1,0"
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ d="m -242.5,139.5 v -1 h 1"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
</g>
<g
@@ -64919,9 +64266,9 @@
height="3"
width="2.9998772"
id="rect41355"
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:#1a1a1a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:#1a1a1a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
- style="fill:none;stroke:#000000;stroke-width:3.0999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.0999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 54,314.25 c 3.75,1.75 8.5,2.36379 8.5,-2 0,-3 -3.5,-6.25 -5.5,-8.25"
id="path41357"
sodipodi:nodetypes="csc"
@@ -64930,7 +64277,7 @@
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#cccccc;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#cccccc;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 54,314.25 c 3.5,1.75 8.5,2.36741 8.5,-2 0,-3 -3.5,-6.25 -5.5,-8.25"
id="path41359"
sodipodi:nodetypes="csc"
@@ -64939,7 +64286,7 @@
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<rect
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:#1a1a1a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:#1a1a1a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect41361"
width="2.9998772"
height="3"
@@ -64954,7 +64301,7 @@
sodipodi:nodetypes="csc"
id="path41363"
d="m 54,314.25 c 3.5,1.75 8.5,2.33285 8.5,-2 0,-3 -3.5,-6.25 -5.5,-8.25"
- style="fill:none;stroke:url(#linearGradient42398);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient42398);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
@@ -64962,10 +64309,10 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path41365"
d="m 55,313 c -0.67541,0 -1.35081,10e-6 -2.02623,10e-6 0,0.66666 0,1.33332 0,1.99999 0.67542,0 1.35082,-10e-6 2.02623,-10e-6 0,-0.66666 0,-1.33333 0,-1.99999 z"
- style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
d="m 58,303 c -0.666663,0 -1.333327,10e-6 -2,10e-6 0,0.66667 0,1.33332 0,1.99999 0.666673,0 1.333337,-10e-6 2,-10e-6 0,-0.66666 0,-1.33332 0,-1.99999 z"
id="path41367"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -64973,14 +64320,14 @@
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.8;fill:#ececec;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
- d="m 56.499999,304.5 0,-1 1,0"
+ style="display:inline;opacity:0.8;fill:#ececec;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 56.499999,304.5 v -1 h 1"
id="path41369"
inkscape:connector-curvature="0" />
<path
id="path41371"
- d="m 53.5,314.5 0,-1 1,0"
- style="opacity:0.8;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="m 53.5,314.5 v -1 h 1"
+ style="display:inline;opacity:0.8;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
@@ -64988,7 +64335,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path41373"
d="m 56,315.66293 c -0.32001,0 -0.64002,-1e-5 -0.96003,-1e-5 0,-0.55431 0,-1.1086 0,-1.66292 0.32001,0 0.64002,10e-6 0.96003,10e-6 0,0.55431 0,1.10861 0,1.66292 z"
- style="opacity:0.15;fill:#4b4b4b;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;opacity:0.15;fill:#4b4b4b;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
@@ -64996,10 +64343,10 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path41375"
d="m 59,306 c -0.333333,0 -0.666667,-10e-6 -1,-10e-6 0,-0.66666 0,-1.33331 0,-1.99999 0.333333,0 0.666667,10e-6 1,10e-6 0,0.66667 0,1.33333 0,1.99999 z"
- style="opacity:0.15;fill:#4b4b4b;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;opacity:0.15;fill:#4b4b4b;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.15;fill:#1d1d1d;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;opacity:0.15;fill:#1d1d1d;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 56,316 c -0.32001,0 -0.64002,0 -0.96003,0 0,-0.21055 0,-0.42107 0,-0.63162 0.32001,0 0.64002,0 0.96003,0 0,0.21055 0,0.42107 0,0.63162 z"
id="path41377"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -65022,7 +64369,7 @@
height="16"
width="16"
id="rect41383"
- style="opacity:0.01000001;fill:#ff0000;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#ff0000;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;enable-background:accumulate" />
<rect
rx="1.4999387"
ry="1.4999353"
@@ -65031,72 +64378,72 @@
height="2.9999931"
width="2.9998772"
id="rect41385"
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:#1a1a1a;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:#1a1a1a;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<g
id="g41387">
<path
- style="fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:new"
d="m -271.50008,137.5 c 1.00003,1e-5 2.00005,1e-5 3.00008,2e-5 0,0.99999 0,1.99999 0,2.99998 -1.00003,0 -2.00005,-1e-5 -3.00008,-1e-5 0,-1 0,-1.99999 0,-2.99999 z"
id="path41389"
inkscape:connector-curvature="0" />
<path
id="path41391"
d="m -283.50008,137.5 c 1.00003,1e-5 2.00005,1e-5 3.00008,2e-5 0,0.99999 0,1.99998 0,2.99998 -1.00003,-1e-5 -2.00005,-1e-5 -3.00008,-2e-5 0,-0.99999 0,-1.99999 0,-2.99998 z"
- style="fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:new"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
- d="m -282.50008,139.5 0,-1 1,0"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m -282.50008,139.5 v -1 h 1"
id="path41393"
inkscape:connector-curvature="0" />
<path
id="path41395"
- d="m -270.50008,139.5 0,-1 1,0"
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ d="m -270.50008,139.5 v -1 h 1"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
<g
id="g41397"
style="opacity:0.7">
<path
id="path41399"
- d="m -270.5,140.74992 0,8.5"
- style="fill:#aaccff;fill-opacity:0.75;fill-rule:evenodd;stroke:#003380;stroke-width:2.79999995;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -270.5,140.74992 v 8.5"
+ style="display:inline;overflow:visible;visibility:visible;fill:#aaccff;fill-opacity:0.75;fill-rule:evenodd;stroke:#003380;stroke-width:2.79999995;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
- style="fill:#aaccff;fill-opacity:0.75;fill-rule:evenodd;stroke:#003380;stroke-width:2.79999995;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -280.25008,139.5 8.5,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#aaccff;fill-opacity:0.75;fill-rule:evenodd;stroke:#003380;stroke-width:2.79999995;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -280.25008,139.5 h 8.5"
id="path41401"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
- style="fill:#aaccff;fill-opacity:0.75;fill-rule:evenodd;stroke:#003380;stroke-width:2.79999995;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -281.49999,140.75 0,8.5"
+ style="display:inline;overflow:visible;visibility:visible;fill:#aaccff;fill-opacity:0.75;fill-rule:evenodd;stroke:#003380;stroke-width:2.79999995;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -281.49999,140.75 v 8.5"
id="path41403"
inkscape:connector-curvature="0" />
<path
id="path41405"
- d="m -280.00008,139.5 8,0"
- style="fill:#aaccff;fill-opacity:1;fill-rule:evenodd;stroke:#aaccff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -280.00008,139.5 h 8"
+ style="display:inline;overflow:visible;visibility:visible;fill:#aaccff;fill-opacity:1;fill-rule:evenodd;stroke:#aaccff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
- style="fill:#aaccff;fill-opacity:1;fill-rule:evenodd;stroke:#aaccff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -270.5,140.99992 0,8"
+ style="display:inline;overflow:visible;visibility:visible;fill:#aaccff;fill-opacity:1;fill-rule:evenodd;stroke:#aaccff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -270.5,140.99992 v 8"
id="path41407"
inkscape:connector-curvature="0" />
<path
id="path41409"
- d="m -281.49999,141 0,8"
- style="fill:#aaccff;fill-opacity:1;fill-rule:evenodd;stroke:#aaccff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -281.49999,141 v 8"
+ style="display:inline;overflow:visible;visibility:visible;fill:#aaccff;fill-opacity:1;fill-rule:evenodd;stroke:#aaccff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
</g>
</g>
<rect
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:#1a1a1a;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:#1a1a1a;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect41411"
width="2.9998772"
height="2.999995"
@@ -65110,10 +64457,10 @@
sodipodi:nodetypes="csc"
id="path41415"
d="m -270.5,150.5 c 0,-4.0296 -2.4502,-6 -5.5,-6 -3.0498,0 -5.5,1.9704 -5.5,6"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#cccccc;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#cccccc;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m -270.5,150.5 c 0,-4.0296 -2.4502,-6 -5.5,-6 -3.0498,0 -5.5,1.9704 -5.5,6"
id="path41417"
sodipodi:nodetypes="csc"
@@ -65122,7 +64469,7 @@
sodipodi:nodetypes="csc"
id="path41419"
d="m 36.445698,40.205481 c 0,3.312 -2.660849,4.931507 -5.972849,4.931507 -3.312,0 -5.97285,-1.619507 -5.97285,-4.931507"
- style="fill:none;stroke:url(#linearGradient42400);stroke-width:1.41714692;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient42400);stroke-width:1.41714692;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
transform="matrix(0.9208335,0,0,-1.2166667,-304.06042,199.41667)"
inkscape:connector-curvature="0" />
</g>
@@ -65132,10 +64479,10 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path41421"
d="m -269,150 c -0.66667,0 -1.33333,1e-5 -2,1e-5 0,0.66667 0,1.33332 0,1.99999 0.66667,0 1.33333,-1e-5 2,-1e-5 0,-0.66666 0,-1.33332 0,-1.99999 z"
- style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
d="m -281,150 c -0.66667,0 -1.33333,1e-5 -2,1e-5 0,0.66667 0,1.33332 0,1.99999 0.66667,0 1.33333,-1e-5 2,-1e-5 0,-0.66666 0,-1.33332 0,-1.99999 z"
id="path41423"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -65143,8 +64490,8 @@
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.8;fill:#ececec;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
- d="m -270.5,151.5 0,-1 1,0"
+ style="display:inline;opacity:0.8;fill:#ececec;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m -270.5,151.5 v -1 h 1"
id="path41425"
inkscape:connector-curvature="0" />
<rect
@@ -65155,9 +64502,9 @@
height="1"
width="2.75"
id="rect41427"
- style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<rect
- style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect41429"
width="2.75"
height="1"
@@ -65175,82 +64522,76 @@
id="g41433"
style="opacity:0.8">
<rect
- style="opacity:0.01000001;fill:#ff0000;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#ff0000;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;enable-background:accumulate"
id="rect41435"
width="16"
height="16"
x="-284.99991"
y="108" />
<path
- style="fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:new"
d="m -272.5,108.5 c 1.00003,1e-5 2.00005,1e-5 3.00008,2e-5 0,0.99999 0,1.99999 0,2.99998 -1.00003,0 -2.00005,-1e-5 -3.00008,-1e-5 0,-1 0,-1.99999 0,-2.99999 z"
id="path41437"
inkscape:connector-curvature="0" />
<path
id="path41439"
d="m -284.5,108.5 c 1.00003,1e-5 2.00005,1e-5 3.00008,2e-5 0,0.99999 0,1.99998 0,2.99998 -1.00003,-1e-5 -2.00005,-1e-5 -3.00008,-2e-5 0,-0.99999 0,-1.99999 0,-2.99998 z"
- style="fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:new"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
- d="m -283.5,110.5 0,-1 1,0"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m -283.5,110.5 v -1 h 1"
id="path41441"
inkscape:connector-curvature="0" />
<path
id="path41443"
- d="m -271.5,110.5 0,-1 1,0"
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ d="m -271.5,110.5 v -1 h 1"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
<path
id="path41445"
d="m -272.49992,123.5 c 1.00003,-1e-5 2.00005,-1e-5 3.00008,-2e-5 0,-0.99999 0,-1.99999 0,-2.99998 -1.00003,0 -2.00005,1e-5 -3.00008,1e-5 0,1 0,1.99999 0,2.99999 z"
- style="fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:new"
inkscape:connector-curvature="0" />
<path
- style="fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:new"
d="m -284.49992,123.5 c 1.00003,-1e-5 2.00005,-1e-5 3.00008,-2e-5 0,-0.99999 0,-1.99998 0,-2.99998 -1.00003,1e-5 -2.00005,1e-5 -3.00008,2e-5 0,0.99999 0,1.99999 0,2.99998 z"
id="path41447"
inkscape:connector-curvature="0" />
<path
id="path41449"
- d="m -283.49992,122.5 0,-1 1,0"
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ d="m -283.49992,122.5 v -1 h 1"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
- d="m -271.49992,122.5 0,-1 1,0"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m -271.49992,122.5 v -1 h 1"
id="path41451"
inkscape:connector-curvature="0" />
</g>
<g
transform="matrix(1.0019678,0,0,1,-97.100449,33.125005)"
id="g41453">
- <path
+ <circle
transform="matrix(0.6860851,0,0,0.6874876,-293.56324,-17.123443)"
- sodipodi:type="arc"
- style="fill:none;stroke:#000000;stroke-width:4.36388111;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:#000000;stroke-width:4.36388111;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path41455"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path41457"
- style="fill:none;stroke:url(#linearGradient42402);stroke-width:2.18194032;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.6860851,0,0,0.6874876,-293.56324,-17.123443)" />
+ style="fill:none;stroke:url(#linearGradient42402);stroke-width:2.18194032;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.6860851,0,0,0.6874876,-293.56324,-17.123443)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
@@ -65267,46 +64608,46 @@
height="16"
width="16"
id="rect41463"
- style="opacity:0.01000001;fill:#ff0000;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#ff0000;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;enable-background:accumulate" />
<path
id="path41465"
d="m -272.5,108.5 c 1.00003,1e-5 2.00005,1e-5 3.00008,2e-5 0,0.99999 0,1.99999 0,2.99998 -1.00003,0 -2.00005,-1e-5 -3.00008,-1e-5 0,-1 0,-1.99999 0,-2.99999 z"
- style="fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:new"
inkscape:connector-curvature="0" />
<path
- style="fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:new"
d="m -284.5,108.5 c 1.00003,1e-5 2.00005,1e-5 3.00008,2e-5 0,0.99999 0,1.99998 0,2.99998 -1.00003,-1e-5 -2.00005,-1e-5 -3.00008,-2e-5 0,-0.99999 0,-1.99999 0,-2.99998 z"
id="path41467"
inkscape:connector-curvature="0" />
<path
id="path41469"
- d="m -283.5,110.5 0,-1 1,0"
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ d="m -283.5,110.5 v -1 h 1"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
- d="m -271.5,110.5 0,-1 1,0"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m -271.5,110.5 v -1 h 1"
id="path41471"
inkscape:connector-curvature="0" />
<path
- style="fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:new"
d="m -272.49992,123.5 c 1.00003,-1e-5 2.00005,-1e-5 3.00008,-2e-5 0,-0.99999 0,-1.99999 0,-2.99998 -1.00003,0 -2.00005,1e-5 -3.00008,1e-5 0,1 0,1.99999 0,2.99999 z"
id="path41473"
inkscape:connector-curvature="0" />
<path
id="path41475"
d="m -284.49992,123.5 c 1.00003,-1e-5 2.00005,-1e-5 3.00008,-2e-5 0,-0.99999 0,-1.99998 0,-2.99998 -1.00003,1e-5 -2.00005,1e-5 -3.00008,2e-5 0,0.99999 0,1.99999 0,2.99998 z"
- style="fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:new"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
- d="m -283.49992,122.5 0,-1 1,0"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m -283.49992,122.5 v -1 h 1"
id="path41477"
inkscape:connector-curvature="0" />
<path
id="path41479"
- d="m -271.49992,122.5 0,-1 1,0"
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ d="m -271.49992,122.5 v -1 h 1"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
</g>
<g
@@ -65318,59 +64659,47 @@
height="16"
width="16"
id="rect41483"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path41485"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.23039246;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.8124999,0,0,0.8129977,-327.25,-31.938622)" />
- <path
- sodipodi:type="arc"
- style="opacity:0.8;fill:url(#linearGradient42404);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.23039246;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.8124999,0,0,0.8129977,-327.25,-31.938622)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
+ style="display:inline;opacity:0.8;fill:url(#linearGradient42404);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path41487"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(0.7451143,0.08386971,-0.08492794,0.7396793,-308.33359,-34.308811)" />
- <path
+ transform="matrix(0.7451143,0.08386971,-0.08492794,0.7396793,-308.33359,-34.308811)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.6860851,0,0,0.6874876,-310.55192,-17.123443)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient42406);stroke-width:1.45605874;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient42406);stroke-width:1.45605874;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path41489"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path41491"
- style="fill:none;stroke:url(#linearGradient42408);stroke-width:1.78040731;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.5610858,0,0,0.5622541,-294.05201,-2.3458915)" />
+ style="fill:none;stroke:url(#linearGradient42408);stroke-width:1.78040731;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.5610858,0,0,0.5622541,-294.05201,-2.3458915)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
@@ -65383,17 +64712,17 @@
height="16"
width="16"
id="rect41495"
- style="opacity:0.01000001;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<g
id="g41497"
transform="translate(15.99992,107.02252)">
<path
id="path41499"
d="m -243.5,137.5 c 1.00003,1e-5 2.00005,1e-5 3.00008,2e-5 0,0.99999 0,1.99999 0,2.99998 -1.00003,0 -2.00005,-1e-5 -3.00008,-1e-5 0,-1 0,-1.99999 0,-2.99999 z"
- style="fill:#aaccff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;display:inline;enable-background:new"
+ style="display:inline;fill:#aaccff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
<path
- style="fill:#aaccff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;display:inline;enable-background:new"
+ style="display:inline;fill:#aaccff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;enable-background:new"
d="m -255.5,137.5 c 1.00003,1e-5 2.00005,1e-5 3.00008,2e-5 0,0.99999 0,1.99998 0,2.99998 -1.00003,-1e-5 -2.00005,-1e-5 -3.00008,-2e-5 0,-0.99999 0,-1.99999 0,-2.99998 z"
id="path41501"
inkscape:connector-curvature="0" />
@@ -65402,30 +64731,30 @@
id="g41503">
<path
id="path41505"
- d="m -252.25,138.49219 8.5,0"
- style="fill:#aaccff;fill-opacity:0.75;fill-rule:evenodd;stroke:#003380;stroke-width:2.79999995;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -252.25,138.49219 h 8.5"
+ style="display:inline;overflow:visible;visibility:visible;fill:#aaccff;fill-opacity:0.75;fill-rule:evenodd;stroke:#003380;stroke-width:2.79999995;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
- style="fill:#aaccff;fill-opacity:1;fill-rule:evenodd;stroke:#aaccff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -252,138.49219 8,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#aaccff;fill-opacity:1;fill-rule:evenodd;stroke:#aaccff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -252,138.49219 h 8"
id="path41507"
inkscape:connector-curvature="0" />
</g>
<path
id="path41509"
- d="m -254.5,139.5 0,-1 1,0"
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ d="m -254.5,139.5 v -1 h 1"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
- d="m -242.5,139.5 0,-1 1,0"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m -242.5,139.5 v -1 h 1"
id="path41511"
inkscape:connector-curvature="0" />
</g>
<rect
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:#1a1a1a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:#1a1a1a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect41513"
width="2.9998772"
height="3"
@@ -65439,32 +64768,26 @@
<g
transform="matrix(1.0019678,0,0,1,-97.100449,33.125005)"
id="g41517">
- <path
+ <circle
transform="matrix(0.6860851,0,0,0.6874876,-293.56324,-17.123443)"
- sodipodi:type="arc"
- style="fill:none;stroke:#000000;stroke-width:4.36388111;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:#000000;stroke-width:4.36388111;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path41519"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path41521"
- style="fill:none;stroke:url(#linearGradient42410);stroke-width:2.18194032;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.6860851,0,0,0.6874876,-293.56324,-17.123443)" />
+ style="fill:none;stroke:url(#linearGradient42410);stroke-width:2.18194032;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.6860851,0,0,0.6874876,-293.56324,-17.123443)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<rect
@@ -65475,14 +64798,14 @@
height="3"
width="2.9998772"
id="rect41523"
- style="opacity:0.25;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:#1a1a1a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:#1a1a1a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path41525"
d="m -230.99988,246.02251 c -0.66667,0 -1.33333,10e-6 -2,10e-6 0,0.66667 0,1.33332 0,1.99999 0.66667,0 1.33333,-1e-5 2,-1e-5 0,-0.66666 0,-1.33332 0,-1.99999 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<g
@@ -65491,7 +64814,7 @@
transform="translate(70.968338,302.76882)">
<rect
transform="matrix(0,1,1,0,0,0)"
- style="opacity:0.01000001;fill:#ff0000;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#ff0000;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;enable-background:accumulate"
id="rect41529"
width="16"
height="16"
@@ -65499,7 +64822,7 @@
y="-65.968338" />
<rect
transform="matrix(0,1,1,0,0,0)"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect41531"
width="2.9998772"
height="2.9999931"
@@ -65514,21 +64837,21 @@
<path
id="path41535"
d="m -271.50008,137.5 c 1.00003,1e-5 2.00005,1e-5 3.00008,2e-5 0,0.99999 0,1.99999 0,2.99998 -1.00003,0 -2.00005,-1e-5 -3.00008,-1e-5 0,-1 0,-1.99999 0,-2.99999 z"
- style="fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:new"
inkscape:connector-curvature="0" />
<path
- style="fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:new"
d="m -283.50008,137.5 c 1.00003,1e-5 2.00005,1e-5 3.00008,2e-5 0,0.99999 0,1.99998 0,2.99998 -1.00003,-1e-5 -2.00005,-1e-5 -3.00008,-2e-5 0,-0.99999 0,-1.99999 0,-2.99998 z"
id="path41537"
inkscape:connector-curvature="0" />
<path
id="path41539"
- d="m -282.50008,139.5 0,-1 1,0"
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ d="m -282.50008,139.5 v -1 h 1"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
- d="m -270.50008,139.5 0,-1 1,0"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m -270.50008,139.5 v -1 h 1"
id="path41541"
inkscape:connector-curvature="0" />
<g
@@ -65536,38 +64859,38 @@
id="g41543">
<path
sodipodi:nodetypes="cc"
- style="fill:#aaccff;fill-opacity:0.75;fill-rule:evenodd;stroke:#003380;stroke-width:2.79999995;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -270.5,140.74992 0,8.5"
+ style="display:inline;overflow:visible;visibility:visible;fill:#aaccff;fill-opacity:0.75;fill-rule:evenodd;stroke:#003380;stroke-width:2.79999995;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -270.5,140.74992 v 8.5"
id="path41545"
inkscape:connector-curvature="0" />
<path
id="path41547"
- d="m -280.25008,139.5 8.5,0"
- style="fill:#aaccff;fill-opacity:0.75;fill-rule:evenodd;stroke:#003380;stroke-width:2.79999995;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -280.25008,139.5 h 8.5"
+ style="display:inline;overflow:visible;visibility:visible;fill:#aaccff;fill-opacity:0.75;fill-rule:evenodd;stroke:#003380;stroke-width:2.79999995;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
id="path41549"
- d="m -281.49999,140.75 0,8.5"
- style="fill:#aaccff;fill-opacity:0.75;fill-rule:evenodd;stroke:#003380;stroke-width:2.79999995;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -281.49999,140.75 v 8.5"
+ style="display:inline;overflow:visible;visibility:visible;fill:#aaccff;fill-opacity:0.75;fill-rule:evenodd;stroke:#003380;stroke-width:2.79999995;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
- style="fill:#aaccff;fill-opacity:1;fill-rule:evenodd;stroke:#aaccff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -280.00008,139.5 8,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#aaccff;fill-opacity:1;fill-rule:evenodd;stroke:#aaccff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -280.00008,139.5 h 8"
id="path41551"
inkscape:connector-curvature="0" />
<path
id="path41553"
- d="m -270.5,140.99992 0,8"
- style="fill:#aaccff;fill-opacity:1;fill-rule:evenodd;stroke:#aaccff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -270.5,140.99992 v 8"
+ style="display:inline;overflow:visible;visibility:visible;fill:#aaccff;fill-opacity:1;fill-rule:evenodd;stroke:#aaccff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
- style="fill:#aaccff;fill-opacity:1;fill-rule:evenodd;stroke:#aaccff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -281.49999,141 0,8"
+ style="display:inline;overflow:visible;visibility:visible;fill:#aaccff;fill-opacity:1;fill-rule:evenodd;stroke:#aaccff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -281.49999,141 v 8"
id="path41555"
inkscape:connector-curvature="0" />
</g>
@@ -65581,13 +64904,13 @@
height="2.999995"
width="2.9998772"
id="rect41557"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<g
transform="matrix(0,1,1,0,-202.96833,348.23118)"
id="g41559"
style="display:inline;enable-background:new">
<path
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m -270.5,150.5 c 0,-4.0296 -2.4502,-6 -5.5,-6 -3.0498,0 -5.5,1.9704 -5.5,6"
id="path41561"
sodipodi:nodetypes="csc"
@@ -65596,51 +64919,51 @@
sodipodi:nodetypes="csc"
id="path41563"
d="m -270.5,150.5 c 0,-4.0296 -2.4502,-6 -5.5,-6 -3.0498,0 -5.5,1.9704 -5.5,6"
- style="fill:none;stroke:#cccccc;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#cccccc;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
transform="matrix(0.9208335,0,0,-1.2166667,-304.06042,199.41667)"
- style="fill:none;stroke:url(#linearGradient42412);stroke-width:1.41714692;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient42412);stroke-width:1.41714692;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 36.445698,40.205481 c 0,3.312 -2.660849,4.931507 -5.972849,4.931507 -3.312,0 -5.97285,-1.619507 -5.97285,-4.931507"
id="path41565"
sodipodi:nodetypes="csc"
inkscape:connector-curvature="0" />
</g>
<g
- style="opacity:0.6;display:inline;enable-background:new"
+ style="display:inline;opacity:0.6;enable-background:new"
transform="translate(132.03151,-159.76882)"
id="g41567">
<path
transform="matrix(0.8124999,0,0,0.8131203,-292.24999,136.05677)"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.98423982;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- d="m 133.84616,110 0,15.98779 L 132,126 c -4.416,0 -8,-3.584 -8,-8 0,-4.416 3.584,-8 8,-8 l 1.84616,0 z"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.98423982;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 133.84616,110 v 15.98779 L 132,126 c -4.416,0 -8,-3.584 -8,-8 0,-4.416 3.584,-8 8,-8 z"
id="path41569"
sodipodi:nodetypes="cccscc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="csscccc"
id="path41571"
- d="M 132.92501,125.94702 C 132.6215,125.98201 132.31284,126 132,126 c -4.416,0 -8,-3.584 -8,-8 0,-4.11109 3.10616,-7.5011 7.09807,-7.94965 l 1.32084,-0.14976 1.81209,15.89838 -1.30599,0.14805 0,0 0,0 0,0 z"
- style="opacity:0.8;fill:url(#linearGradient42414);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ d="M 132.92501,125.94702 C 132.6215,125.98201 132.31284,126 132,126 c -4.416,0 -8,-3.584 -8,-8 0,-4.11109 3.10616,-7.5011 7.09807,-7.94965 l 1.32084,-0.14976 1.81209,15.89838 z"
+ style="display:inline;opacity:0.8;fill:url(#linearGradient42414);fill-opacity:1;fill-rule:nonzero;stroke:none"
transform="matrix(0.7451143,0.08449152,-0.08492794,0.7451633,-273.33359,132.91784)"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccscc"
id="path41573"
- d="m 132.71228,109.99971 0,16.00029 L 132,126 c -4.416,0 -8,-3.584 -8,-8 0,-4.416 3.584,-8 8,-8 l 0.71228,-2.9e-4 z"
- style="fill:none;stroke:url(#linearGradient42416);stroke-width:1.45605874;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
+ d="M 132.71228,109.99971 V 126 H 132 c -4.416,0 -8,-3.584 -8,-8 0,-4.416 3.584,-8 8,-8 z"
+ style="fill:none;stroke:url(#linearGradient42416);stroke-width:1.45605874;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
transform="matrix(0.6860851,0,0,0.6874876,-275.55192,150.87656)"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="css"
id="path41575"
d="m 132,126 c -4.416,0 -8,-3.584 -8,-8 0,-4.416 3.584,-8 8,-8"
- style="fill:none;stroke:url(#linearGradient42418);stroke-width:1.78040731;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient42418);stroke-width:1.78040731;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
transform="matrix(0.5610858,0,0,0.5622541,-259.05201,165.65411)"
inkscape:connector-curvature="0" />
</g>
<path
- style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
d="m -52.968334,79.231175 c 0,-0.66667 10e-6,-1.33333 10e-6,-2 0.66667,0 1.33332,0 1.99999,0 0,0.66667 -1e-5,1.33333 -1e-5,2 -0.66666,0 -1.33332,0 -1.99999,0 z"
id="path41577"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -65653,16 +64976,16 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path41579"
d="m -52.968334,67.231175 c 0,-0.66667 10e-6,-1.33333 10e-6,-2 0.66667,0 1.33332,0 1.99999,0 0,0.66667 -1e-5,1.33333 -1e-5,2 -0.66666,0 -1.33332,0 -1.99999,0 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
id="path41581"
- d="m -51.468334,77.731175 -1,0 0,1"
- style="opacity:0.8;fill:#ececec;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ d="m -51.468334,77.731175 h -1 v 1"
+ style="display:inline;opacity:0.8;fill:#ececec;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
<rect
transform="matrix(0,1,1,0,0,0)"
- style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect41583"
width="2.75"
height="1"
@@ -65679,14 +65002,14 @@
height="1"
width="2.75"
id="rect41585"
- style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
</g>
<g
style="display:inline;enable-background:new"
id="ICON_SURFACE_NCYLINDER"
transform="translate(375,231.00851)">
<rect
- style="opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect41589"
width="16"
height="16"
@@ -65695,53 +65018,53 @@
<g
id="g41591"
transform="translate(-22.000001,28)"
- style="opacity:0.8;display:inline;enable-background:new">
+ style="display:inline;opacity:0.8;enable-background:new">
<rect
y="108"
x="-284.99991"
height="16"
width="16"
id="rect41593"
- style="opacity:0.01000001;fill:#ff0000;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#ff0000;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;enable-background:accumulate" />
<path
id="path41595"
d="m -272.5,108.5 c 1.00003,1e-5 2.00005,1e-5 3.00008,2e-5 0,0.99999 0,1.99999 0,2.99998 -1.00003,0 -2.00005,-1e-5 -3.00008,-1e-5 0,-1 0,-1.99999 0,-2.99999 z"
- style="fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:new"
inkscape:connector-curvature="0" />
<path
- style="fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:new"
d="m -284.5,108.5 c 1.00003,1e-5 2.00005,1e-5 3.00008,2e-5 0,0.99999 0,1.99998 0,2.99998 -1.00003,-1e-5 -2.00005,-1e-5 -3.00008,-2e-5 0,-0.99999 0,-1.99999 0,-2.99998 z"
id="path41597"
inkscape:connector-curvature="0" />
<path
id="path41599"
- d="m -283.5,110.5 0,-1 1,0"
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ d="m -283.5,110.5 v -1 h 1"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
- d="m -271.5,110.5 0,-1 1,0"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m -271.5,110.5 v -1 h 1"
id="path41601"
inkscape:connector-curvature="0" />
<path
- style="fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:new"
d="m -272.49992,123.5 c 1.00003,-1e-5 2.00005,-1e-5 3.00008,-2e-5 0,-0.99999 0,-1.99999 0,-2.99998 -1.00003,0 -2.00005,1e-5 -3.00008,1e-5 0,1 0,1.99999 0,2.99999 z"
id="path41603"
inkscape:connector-curvature="0" />
<path
id="path41605"
d="m -284.49992,123.5 c 1.00003,-1e-5 2.00005,-1e-5 3.00008,-2e-5 0,-0.99999 0,-1.99998 0,-2.99998 -1.00003,1e-5 -2.00005,1e-5 -3.00008,2e-5 0,0.99999 0,1.99999 0,2.99998 z"
- style="fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:new"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
- d="m -283.49992,122.5 0,-1 1,0"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m -283.49992,122.5 v -1 h 1"
id="path41607"
inkscape:connector-curvature="0" />
<path
id="path41609"
- d="m -271.49992,122.5 0,-1 1,0"
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ d="m -271.49992,122.5 v -1 h 1"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
</g>
<g
@@ -65750,10 +65073,10 @@
sodipodi:nodetypes="cccsccc"
id="path41613"
d="m -299,137.5 c -3.036,0 -5.49999,1.12 -5.49999,2.5 l -10e-6,8 c 0,1.38 2.46399,2.5 5.49999,2.5 3.036,0 5.5,-1.12 5.5,-2.5 l 10e-6,-8 c 0,-1.38 -2.464,-2.5 -5.5,-2.5 z"
- style="fill:url(#linearGradient42420);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient42420);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:url(#linearGradient42422);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient42424);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient42422);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient42424);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m -294.49145,140.5 c 0,1 -1.5,2 -4.50855,2 -3.00854,0 -4.49145,-1 -4.49145,-2 0,-1.5 2.25,-2.25 4.5,-2.25 2.25,0 4.5,0.75 4.5,2.25 z"
id="path41615"
sodipodi:nodetypes="czszs"
@@ -65762,17 +65085,17 @@
sodipodi:nodetypes="czs"
id="path41617"
d="m -293.99565,140.99149 c 0,1.12926 -1.66739,2.25851 -5.01168,2.25851 -3.34426,0 -4.99267,-1.12925 -4.99267,-2.25851"
- style="opacity:0.3;fill:none;stroke:url(#linearGradient42426);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:none;stroke:url(#linearGradient42426);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -299,137.5 c -3.49999,0 -5.49999,1.12 -5.49999,2.5 l -10e-6,7.5 c 0,2 2.46399,3 5.49999,3 3.036,0 5.50001,-1 5.50001,-3 l 0,-7.5 c 0,-1.38 -1.99999,-2.5 -5.5,-2.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -299,137.5 c -3.49999,0 -5.49999,1.12 -5.49999,2.5 l -10e-6,7.5 c 0,2 2.46399,3 5.49999,3 3.036,0 5.50001,-1 5.50001,-3 V 140 c 0,-1.38 -1.99999,-2.5 -5.5,-2.5 z"
id="path41619"
sodipodi:nodetypes="cccsccc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient42428);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -303.5,141.5 0,5.5 c 0,0.9838 0.64285,2.5 4.5,2.5 3.85714,0 4.5,-1.5162 4.5,-2.5 l 0,-5.5"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient42428);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -303.5,141.5 v 5.5 c 0,0.9838 0.64285,2.5 4.5,2.5 3.85714,0 4.5,-1.5162 4.5,-2.5 v -5.5"
id="path41621"
sodipodi:nodetypes="ccscc"
inkscape:connector-curvature="0" />
@@ -65784,7 +65107,7 @@
transform="translate(258.99995,102)">
<rect
transform="scale(-1,1)"
- style="opacity:0.01000001;fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect41625"
width="16.000032"
height="16"
@@ -65794,14 +65117,14 @@
transform="translate(77.000139,146.99992)"
id="g41627">
<path
- style="fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:new"
d="m -287.5,118.5 c 10e-6,1.00003 10e-6,2.00005 2e-5,3.00008 0.99999,0 1.99998,0 2.99998,0 -10e-6,-1.00003 -10e-6,-2.00005 -2e-5,-3.00008 -0.99999,0 -1.99999,0 -2.99998,0 z"
id="path41629"
inkscape:connector-curvature="0" />
<path
id="path41631"
- d="m -285.5,119.5 -1,0 0,1"
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ d="m -285.5,119.5 h -1 v 1"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
<g
style="opacity:0.5"
@@ -65810,24 +65133,24 @@
<path
id="path41635"
d="m -279.50016,139.5 6.00016,2e-5"
- style="fill:#aaccff;fill-opacity:0.75;fill-rule:evenodd;stroke:#003380;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#aaccff;fill-opacity:0.75;fill-rule:evenodd;stroke:#003380;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
id="path41637"
- d="m -281.50008,141.5 0,2"
- style="fill:#aaccff;fill-opacity:0.75;fill-rule:evenodd;stroke:#003380;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -281.50008,141.5 v 2"
+ style="display:inline;overflow:visible;visibility:visible;fill:#aaccff;fill-opacity:0.75;fill-rule:evenodd;stroke:#003380;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
- style="fill:#aaccff;fill-opacity:1;fill-rule:evenodd;stroke:#aaccff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#aaccff;fill-opacity:1;fill-rule:evenodd;stroke:#aaccff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m -280.00008,139.5 6.50008,2e-5"
id="path41639"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
- style="fill:#aaccff;fill-opacity:1;fill-rule:evenodd;stroke:#aaccff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#aaccff;fill-opacity:1;fill-rule:evenodd;stroke:#aaccff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m -281.49999,141 -9e-5,2.5"
id="path41641"
inkscape:connector-curvature="0" />
@@ -65835,15 +65158,15 @@
</g>
<g
id="g41643"
- transform="matrix(-1,0,0,-1,-484.99984,399)">
+ transform="rotate(180,-242.49992,199.5)">
<path
id="path41645"
d="m -287.5,118.5 c 10e-6,1.00003 10e-6,2.00005 2e-5,3.00008 0.99999,0 1.99998,0 2.99998,0 -10e-6,-1.00003 -10e-6,-2.00005 -2e-5,-3.00008 -0.99999,0 -1.99999,0 -2.99998,0 z"
- style="fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:new"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
- d="m -285.5,119.5 -1,0 0,1"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m -285.5,119.5 h -1 v 1"
id="path41647"
inkscape:connector-curvature="0" />
<g
@@ -65852,26 +65175,26 @@
style="opacity:0.5">
<path
sodipodi:nodetypes="cc"
- style="fill:#aaccff;fill-opacity:0.75;fill-rule:evenodd;stroke:#003380;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -279.50016,139.5 7,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#aaccff;fill-opacity:0.75;fill-rule:evenodd;stroke:#003380;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -279.50016,139.5 h 7"
id="path41652"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
- style="fill:#aaccff;fill-opacity:0.75;fill-rule:evenodd;stroke:#003380;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -281.50008,141.5 0,2"
+ style="display:inline;overflow:visible;visibility:visible;fill:#aaccff;fill-opacity:0.75;fill-rule:evenodd;stroke:#003380;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -281.50008,141.5 v 2"
id="path41654"
inkscape:connector-curvature="0" />
<path
id="path41656"
- d="m -280.00008,139.5 7.49992,0"
- style="fill:#aaccff;fill-opacity:1;fill-rule:evenodd;stroke:#aaccff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -280.00008,139.5 h 7.49992"
+ style="display:inline;overflow:visible;visibility:visible;fill:#aaccff;fill-opacity:1;fill-rule:evenodd;stroke:#aaccff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
id="path41658"
d="m -281.49999,141 -9e-5,2.5"
- style="fill:#aaccff;fill-opacity:1;fill-rule:evenodd;stroke:#aaccff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#aaccff;fill-opacity:1;fill-rule:evenodd;stroke:#aaccff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
</g>
@@ -65888,14 +65211,14 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
id="path41664"
- d="m 358.99997,-216.75 c -0.99997,-6.5 6.00003,-2.75 5,-9.25 L 369,-224 c 1,7 -6,2 -5,10 l -5.00003,-2.75 z"
- style="fill:none;stroke:#000000;stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 358.99997,-216.75 c -0.99997,-6.5 6.00003,-2.75 5,-9.25 L 369,-224 c 1,7 -6,2 -5,10 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
- style="fill:#cdcdcd;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 358.99997,-216.75 C 358,-223.25 365,-220 363.99997,-226 L 369,-224 c 1,7 -6,2 -5,10 l -5.00003,-2.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#cdcdcd;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
+ d="M 358.99997,-216.75 C 358,-223.25 365,-220 363.99997,-226 L 369,-224 c 1,7 -6,2 -5,10 z"
id="path41666"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -65903,8 +65226,8 @@
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
- style="opacity:0.7;fill:url(#linearGradient42430);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.88812488px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 358.99997,-216.75 C 358,-223.25 365,-220 363.99997,-226 L 369,-224 c 1,7 -6,2 -5,10 l -5.00003,-2.75 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:url(#linearGradient42430);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.88812488px;marker:none;enable-background:accumulate"
+ d="M 358.99997,-216.75 C 358,-223.25 365,-220 363.99997,-226 L 369,-224 c 1,7 -6,2 -5,10 z"
id="path41668"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -65915,8 +65238,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
id="path41670"
- d="M 358.99997,-216.75 C 358,-223.25 365,-220 363.99997,-226 L 369,-224 c 1,7 -6,2 -5,10 l -5.00003,-2.75 z"
- style="opacity:0.85;fill:url(#radialGradient42432);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.88812488px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 358.99997,-216.75 C 358,-223.25 365,-220 363.99997,-226 L 369,-224 c 1,7 -6,2 -5,10 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.85;fill:url(#radialGradient42432);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.88812488px;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
@@ -65925,12 +65248,12 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
id="path41672"
d="m 364.24984,-225.5 4.25016,1.75 c 1,5.75 -5.50003,2 -5.08381,8.85761 l -4.04561,-2.26888"
- style="opacity:0.75;fill:none;stroke:url(#linearGradient42434);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.75;fill:none;stroke:url(#linearGradient42434);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 364.24997,-225.5 4.25003,1.75"
id="path41674"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
@@ -65953,53 +65276,53 @@
<g
id="g41682"
transform="translate(56.999841,68)"
- style="opacity:0.8;display:inline;enable-background:new">
+ style="display:inline;opacity:0.8;enable-background:new">
<rect
y="108"
x="-284.99991"
height="16"
width="16"
id="rect41684"
- style="opacity:0.01000001;fill:#ff0000;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#ff0000;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;enable-background:accumulate" />
<path
id="path41686"
d="m -272.5,108.5 c 1.00003,1e-5 2.00005,1e-5 3.00008,2e-5 0,0.99999 0,1.99999 0,2.99998 -1.00003,0 -2.00005,-1e-5 -3.00008,-1e-5 0,-1 0,-1.99999 0,-2.99999 z"
- style="fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:new"
inkscape:connector-curvature="0" />
<path
- style="fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:new"
d="m -284.5,108.5 c 1.00003,1e-5 2.00005,1e-5 3.00008,2e-5 0,0.99999 0,1.99998 0,2.99998 -1.00003,-1e-5 -2.00005,-1e-5 -3.00008,-2e-5 0,-0.99999 0,-1.99999 0,-2.99998 z"
id="path41688"
inkscape:connector-curvature="0" />
<path
id="path41690"
- d="m -283.5,110.5 0,-1 1,0"
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ d="m -283.5,110.5 v -1 h 1"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
- d="m -271.5,110.5 0,-1 1,0"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m -271.5,110.5 v -1 h 1"
id="path41692"
inkscape:connector-curvature="0" />
<path
- style="fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:new"
d="m -272.49992,123.5 c 1.00003,-1e-5 2.00005,-1e-5 3.00008,-2e-5 0,-0.99999 0,-1.99999 0,-2.99998 -1.00003,0 -2.00005,1e-5 -3.00008,1e-5 0,1 0,1.99999 0,2.99999 z"
id="path41694"
inkscape:connector-curvature="0" />
<path
id="path41696"
d="m -284.49992,123.5 c 1.00003,-1e-5 2.00005,-1e-5 3.00008,-2e-5 0,-0.99999 0,-1.99998 0,-2.99998 -1.00003,1e-5 -2.00005,1e-5 -3.00008,2e-5 0,0.99999 0,1.99999 0,2.99998 z"
- style="fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:new"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
- d="m -283.49992,122.5 0,-1 1,0"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m -283.49992,122.5 v -1 h 1"
id="path41699"
inkscape:connector-curvature="0" />
<path
id="path41701"
- d="m -271.49992,122.5 0,-1 1,0"
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ d="m -271.49992,122.5 v -1 h 1"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
</g>
<rect
@@ -66008,16 +65331,16 @@
height="16"
width="16"
id="rect41703"
- style="opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<path
- style="fill:url(#linearGradient42436);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient42436);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m -220,178.5 c -4.14,0 -7.40235,2.464 -7.40234,5.5 0,3.036 3.26234,5.5 7.40234,5.5 4.14,0 7.40234,-2.464 7.40234,-5.5 0,-3.036 -3.26233,-5.50001 -7.40234,-5.5 z m 0,4 c 1.2993,0 2.42742,0.39879 3.03125,1 -0.60383,0.60121 -1.73196,1 -3.03125,1 -1.29929,0 -2.42742,-0.39879 -3.03125,-1 0.60383,-0.60121 1.73196,-1 3.03125,-1 z"
id="path41705"
sodipodi:nodetypes="cssscccscc"
inkscape:connector-curvature="0" />
<path
style="opacity:0.6;fill:url(#radialGradient42438);fill-rule:evenodd;stroke:none"
- d="m -214.625,180.4375 c 1.5822,4.85564 -3.15377,7.27675 -11.84375,6.21875 l 0,0.0312 c 1.25689,1.67541 3.66207,2.8125 6.46875,2.8125 4.14,0 7.40625,-2.464 7.40625,-5.5 0,-1.34213 -0.64966,-2.57614 -1.71875,-3.53125 -0.10326,-0.0119 -0.20204,-0.024 -0.3125,-0.0312 z"
+ d="m -214.625,180.4375 c 1.5822,4.85564 -3.15377,7.27675 -11.84375,6.21875 v 0.0312 c 1.25689,1.67541 3.66207,2.8125 6.46875,2.8125 4.14,0 7.40625,-2.464 7.40625,-5.5 0,-1.34213 -0.64966,-2.57614 -1.71875,-3.53125 -0.10326,-0.0119 -0.20204,-0.024 -0.3125,-0.0312 z"
id="path41707"
sodipodi:nodetypes="cccsscc"
inkscape:connector-curvature="0" />
@@ -66025,38 +65348,36 @@
sodipodi:nodetypes="cccc"
id="path41709"
d="m -223.375,183.45313 c 1.90631,-1.46639 4.08905,-1.44306 6.1875,-0.53125 L -217,182.76563 c -0.60315,-4.39553 -10.23988,-3.57787 -6.375,0.6875 z"
- style="opacity:0.6;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.6;fill:url(#radialGradient42440);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:url(#radialGradient42440);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate"
d="m -223.375,183.65625 0.5,-0.0312 c -0.0509,-0.0426 -0.11109,-0.08 -0.15625,-0.125 0.60383,-0.60121 1.73196,-1 3.03125,-1 0.99575,0 1.89552,0.24495 2.53125,0.625 L -217,182.96875 c -0.60315,-4.39553 -10.23988,-3.57787 -6.375,0.6875 z"
id="path41711"
sodipodi:nodetypes="cccsccc"
inkscape:connector-curvature="0" />
- <path
+ <ellipse
transform="matrix(0.9999986,0,0,1.799999,-2.971883e-4,111.10004)"
- d="m -213.5,40.5 a 6.5,2.5 0 0 1 -6.5,2.5 6.5,2.5 0 0 1 -6.5,-2.5 6.5,2.5 0 0 1 6.5,-2.5 6.5,2.5 0 0 1 6.5,2.5 z"
- sodipodi:ry="2.5"
- sodipodi:rx="6.5"
- sodipodi:cy="40.5"
- sodipodi:cx="-220"
id="path41713"
- style="fill:none;stroke:url(#linearGradient42442);stroke-width:0.5962854;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient42442);stroke-width:0.5962854;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="-220"
+ cy="40.5"
+ rx="6.5"
+ ry="2.5" />
</g>
<g
style="display:inline;enable-background:new"
id="ICON_SURFACE_NSPHERE"
transform="translate(300.99985,63)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect41717"
width="16"
height="16"
x="-211.99985"
y="304" />
<g
- style="opacity:0.8;display:inline;enable-background:new"
+ style="display:inline;opacity:0.8;enable-background:new"
transform="translate(73.00016,196)"
id="g41719">
<rect
@@ -66065,46 +65386,46 @@
height="16"
width="16"
id="rect41721"
- style="opacity:0.01000001;fill:#ff0000;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#ff0000;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;enable-background:accumulate" />
<path
id="path41723"
d="m -272.5,108.5 c 1.00003,1e-5 2.00005,1e-5 3.00008,2e-5 0,0.99999 0,1.99999 0,2.99998 -1.00003,0 -2.00005,-1e-5 -3.00008,-1e-5 0,-1 0,-1.99999 0,-2.99999 z"
- style="fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:new"
inkscape:connector-curvature="0" />
<path
- style="fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:new"
d="m -284.5,108.5 c 1.00003,1e-5 2.00005,1e-5 3.00008,2e-5 0,0.99999 0,1.99998 0,2.99998 -1.00003,-1e-5 -2.00005,-1e-5 -3.00008,-2e-5 0,-0.99999 0,-1.99999 0,-2.99998 z"
id="path41725"
inkscape:connector-curvature="0" />
<path
id="path41727"
- d="m -283.5,110.5 0,-1 1,0"
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ d="m -283.5,110.5 v -1 h 1"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
- d="m -271.5,110.5 0,-1 1,0"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m -271.5,110.5 v -1 h 1"
id="path41729"
inkscape:connector-curvature="0" />
<path
- style="fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:new"
d="m -272.49992,123.5 c 1.00003,-1e-5 2.00005,-1e-5 3.00008,-2e-5 0,-0.99999 0,-1.99999 0,-2.99998 -1.00003,0 -2.00005,1e-5 -3.00008,1e-5 0,1 0,1.99999 0,2.99999 z"
id="path41731"
inkscape:connector-curvature="0" />
<path
id="path41733"
d="m -284.49992,123.5 c 1.00003,-1e-5 2.00005,-1e-5 3.00008,-2e-5 0,-0.99999 0,-1.99998 0,-2.99998 -1.00003,1e-5 -2.00005,1e-5 -3.00008,2e-5 0,0.99999 0,1.99999 0,2.99998 z"
- style="fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:#003380;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:new"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
- d="m -283.49992,122.5 0,-1 1,0"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m -283.49992,122.5 v -1 h 1"
id="path41735"
inkscape:connector-curvature="0" />
<path
id="path41737"
- d="m -271.49992,122.5 0,-1 1,0"
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ d="m -271.49992,122.5 v -1 h 1"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
</g>
<g
@@ -66114,50 +65435,41 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path41741"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.23686147;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.6969446,0,0,0.6900977,36.918531,141.69345)" />
- <path
- sodipodi:type="arc"
- style="opacity:0.8;fill:url(#linearGradient42444);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.23686147;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.6969446,0,0,0.6900977,36.918531,141.69345)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
+ style="display:inline;opacity:0.8;fill:url(#linearGradient42444);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path41743"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(-0.6391427,-0.07194179,0.07284933,-0.6344823,204.68584,307.47408)" />
- <path
+ transform="matrix(-0.6391427,-0.07194179,0.07284933,-0.6344823,204.68584,307.47408)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.5885088,0,0,0.5897133,51.241774,153.48488)"
- sodipodi:type="arc"
- style="opacity:0.5;fill:none;stroke:url(#linearGradient42446);stroke-width:1.45605874;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="opacity:0.5;fill:none;stroke:url(#linearGradient42446);stroke-width:1.45605874;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path41745"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<path
sodipodi:nodetypes="cscc"
id="path41747"
- style="fill:none;stroke:url(#linearGradient42448);stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline;enable-background:new"
+ style="display:inline;fill:none;stroke:url(#linearGradient42448);stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
d="m -197.75642,311.54171 c -0.99362,1.2083 -2.79874,2.22895 -6.24718,2.22895 -3.415,0 -5.24644,-1.02065 -6.24644,-2.195"
inkscape:connector-curvature="0" />
</g>
@@ -66172,23 +65484,23 @@
height="16"
width="16"
id="rect41751"
- style="opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="ccc"
- style="fill:none;stroke:#000000;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m -203.5,396.5 0,3 -3,0"
+ style="fill:none;stroke:#000000;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m -203.5,396.5 v 3 h -3"
id="path41753"
inkscape:connector-curvature="0" />
<path
id="path41755"
- d="m -213.5,386.5 0,3 -3,0"
- style="fill:none;stroke:#000000;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m -213.5,386.5 v 3 h -3"
+ style="fill:none;stroke:#000000;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
<path
id="path41757"
- d="m -208.5,391.5 0,3 -3,0"
- style="fill:none;stroke:#000000;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m -208.5,391.5 v 3 h -3"
+ style="fill:none;stroke:#000000;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
<g
@@ -66201,18 +65513,18 @@
<path
sodipodi:nodetypes="cz"
id="path41761"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 85.6613,103.49999 9,-9"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#f2f2f2;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#f2f2f2;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path41763"
sodipodi:nodetypes="cz"
d=""
inkscape:connector-curvature="0" />
<path
d="m 85.6613,103.49999 9,-9"
- style="fill:none;stroke:#d7e3f4;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#d7e3f4;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path41765"
sodipodi:nodetypes="cz"
inkscape:connector-curvature="0" />
@@ -66220,48 +65532,48 @@
<path
sodipodi:nodetypes="ccccccc"
id="path41767"
- d="m -203,400 0,-4 -1,0 0,3 -3,0 0,1 4,0 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -203,400 v -4 h -1 v 3 h -3 v 1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccc"
id="path41769"
- d="m -213,390 0,-4 -1,0 0,3 -3,0 0,1 4,0 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -213,390 v -4 h -1 v 3 h -3 v 1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -208,395 0,-4 -1,0 0,3 -3,0 0,1 4,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;enable-background:accumulate"
+ d="m -208,395 v -4 h -1 v 3 h -3 v 1 z"
id="path41771"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<g
- transform="matrix(-1,0,0,-1,-420,786)"
+ transform="rotate(180,-210,393)"
style="opacity:0.2"
id="g41773">
<path
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -208,395 0,2 1,0 0,-1 1,0 0,-1 -2,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
+ d="m -208,395 v 2 h 1 v -1 h 1 v -1 z"
id="path41775"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccc"
id="path41777"
- d="m -216,387 0,2 1,0 0,-1 1,0 0,-1 -2,0 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -216,387 v 2 h 1 v -1 h 1 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -211,392 0,2 1,0 0,-1 1,0 0,-1 -2,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
+ d="m -211,392 v 2 h 1 v -1 h 1 v -1 z"
id="path41779"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccc"
id="path41781"
- d="m -213,390 0,2 1,0 0,-1 1,0 0,-1 -2,0 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -213,390 v 2 h 1 v -1 h 1 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -66273,71 +65585,59 @@
transform="translate(83.990361,105)"
id="g42154"
style="opacity:0.5">
- <path
+ <circle
transform="matrix(0.9361892,0,0,0.9375002,-26.576994,10.374973)"
- sodipodi:type="arc"
- style="fill:#ffd5d5;fill-opacity:0.58823529;fill-rule:nonzero;stroke:#800000;stroke-width:1.06741309;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:#ffd5d5;fill-opacity:0.58823529;fill-rule:nonzero;stroke:#800000;stroke-width:1.06741309;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path42157"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path42159"
- style="fill:none;stroke:url(#linearGradient42462);stroke-width:1.22662127;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.814129,0,0,0.816369,-10.451999,24.674751)" />
- <path
+ style="fill:none;stroke:url(#linearGradient42462);stroke-width:1.22662127;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.814129,0,0,0.816369,-10.451999,24.674751)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.6848076,0,0,0.6867124,6.6184411,39.974237)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient42464);stroke-width:1.45823753;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient42464);stroke-width:1.45823753;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path42161"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.814129,0,0,0.816369,-10.451999,24.674751)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient42466);stroke-width:1.22662127;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient42466);stroke-width:1.22662127;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path42163"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
transform="translate(81.056581,171.48366)"
id="g42165">
<path
id="path42168"
- d="m 101.94425,50.518348 -5.000004,1.875 0,6.3125 5.000004,2.71875 5,-2.71875 0,-6.3125 -5,-1.875 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 101.94425,50.518348 -5.000004,1.875 v 6.3125 l 5.000004,2.71875 5,-2.71875 v -6.3125 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path42170"
- d="m 106.94413,58.696518 0,-6.29009 -5,-1.89415 c 0,2.16796 0,10.43646 0,10.91232 l 5,-2.72808 z"
+ d="m 106.94413,58.696518 v -6.29009 l -5,-1.89415 c 0,2.16796 0,10.43646 0,10.91232 z"
style="fill:url(#linearGradient42468);fill-opacity:1;fill-rule:evenodd;stroke:none"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -66346,7 +65646,7 @@
<path
sodipodi:nodetypes="ccccc"
style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 96.944126,58.696518 0,-6.29009 5.000004,-1.89415 0,10.91232 -5.000004,-2.72808 z"
+ d="m 96.944126,58.696518 v -6.29009 l 5.000004,-1.89415 v 10.91232 z"
id="path42175"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -66354,7 +65654,7 @@
inkscape:connector-curvature="0" />
<path
id="path42177"
- d="m 96.944126,52.406428 5.000004,-1.89415 5,1.89415 -5,2.07396 -5.000004,-2.07396 z"
+ d="m 96.944126,52.406428 5.000004,-1.89415 5,1.89415 -5,2.07396 z"
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:nodetypes="ccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
@@ -66363,7 +65663,7 @@
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:url(#linearGradient42470);stroke-width:0.99999982px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 106.44413,52.406428 0,6.04208 -4.5,2.48007 -4.500004,-2.48007 0,-6.04208"
+ d="m 106.44413,52.406428 v 6.04208 l -4.5,2.48007 -4.500004,-2.48007 v -6.04208"
id="path42179"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
@@ -66377,58 +65677,46 @@
style="opacity:0.5"
id="g42183"
transform="translate(83.990367,126)">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path42185"
- style="fill:#ffd5d5;fill-opacity:0.58823529;fill-rule:nonzero;stroke:#800000;stroke-width:1.06741309;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.9361892,0,0,0.9375002,-26.576994,10.374973)" />
- <path
+ style="fill:#ffd5d5;fill-opacity:0.58823529;fill-rule:nonzero;stroke:#800000;stroke-width:1.06741309;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.9361892,0,0,0.9375002,-26.576994,10.374973)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.814129,0,0,0.816369,-10.451999,24.674751)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient42472);stroke-width:1.22662127;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient42472);stroke-width:1.22662127;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path42187"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path42189"
- style="fill:none;stroke:url(#linearGradient42474);stroke-width:1.45823753;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.6848076,0,0,0.6867124,6.6184411,39.974237)" />
- <path
+ style="fill:none;stroke:url(#linearGradient42474);stroke-width:1.45823753;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.6848076,0,0,0.6867124,6.6184411,39.974237)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path42191"
- style="fill:none;stroke:url(#linearGradient42477);stroke-width:1.22662127;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.814129,0,0,0.816369,-10.451999,24.674751)" />
+ style="fill:none;stroke:url(#linearGradient42477);stroke-width:1.22662127;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.814129,0,0,0.816369,-10.451999,24.674751)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
style="display:inline;enable-background:new"
@@ -66440,30 +65728,30 @@
<path
sodipodi:nodetypes="cccsccc"
id="path42197"
- d="m -98.999998,-25.5 c -2.485192,0 -4.499992,0.89481 -4.500002,2 l 0,7 c 0,1.10519 2.0148,2 4.500002,2 2.48519,0 4.499998,-1.1448 4.499998,-2.25 l 2e-6,-6.75 c 0,-1.10519 -2.01481,-2 -4.5,-2 z"
- style="fill:url(#linearGradient42479);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -98.999998,-25.5 c -2.485192,0 -4.499992,0.89481 -4.500002,2 v 7 c 0,1.10519 2.0148,2 4.500002,2 2.48519,0 4.499998,-1.1448 4.499998,-2.25 l 2e-6,-6.75 c 0,-1.10519 -2.01481,-2 -4.5,-2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient42479);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccscc"
id="path42199"
- d="m -102.5,-22 0,5 c 0,1.25 0.5,1.5 3.5,1.5 3,0 3.5,-0.25 3.5,-1.5 l 0,-5"
- style="fill:none;stroke:url(#linearGradient42481);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -102.5,-22 v 5 c 0,1.25 0.5,1.5 3.5,1.5 3,0 3.5,-0.25 3.5,-1.5 v -5"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient42481);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="css"
id="path42201"
d="M -94.730509,-23.353486 C -94.748454,-21.92288 -95.5,-21.5 -99,-21.5 c -3.5,0 -4.24845,-0.42288 -4.24845,-1.848345"
- style="fill:none;stroke:url(#linearGradient42483);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient42483);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient42485);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient42485);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m -95.341215,-23.173655 c 0,0.873491 -0.648671,1.587005 -3.656631,1.582419 -3.011664,-0.0046 -3.656634,-0.708928 -3.656634,-1.582419 0,-0.87349 0.64497,-1.582418 3.656634,-1.582418 3.00796,0 3.656631,0.708928 3.656631,1.582418 z"
id="path42203"
sodipodi:nodetypes="csssc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -99,-25.5 c -4,0 -4.49999,0.89481 -4.5,2 l 0,6 c 0,1.10519 0,3.00433 4.50216,3.002164 C -94.5,-14.5 -94.5,-16.3948 -94.5,-17.5 l 0,-6 c 0,-1.10519 -0.5,-2 -4.5,-2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -99,-25.5 c -4,0 -4.49999,0.89481 -4.5,2 v 6 c 0,1.10519 0,3.00433 4.50216,3.002164 C -94.5,-14.5 -94.5,-16.3948 -94.5,-17.5 v -6 c 0,-1.10519 -0.5,-2 -4.5,-2 z"
id="path42205"
sodipodi:nodetypes="cccsccc"
inkscape:connector-curvature="0" />
@@ -66478,58 +65766,46 @@
transform="translate(83.990364,83.999999)"
id="g42209"
style="opacity:0.5">
- <path
+ <circle
transform="matrix(0.9361892,0,0,0.9375002,-26.576994,10.374973)"
- sodipodi:type="arc"
- style="fill:#ffd5d5;fill-opacity:0.58823529;fill-rule:nonzero;stroke:#800000;stroke-width:1.06741309;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:#ffd5d5;fill-opacity:0.58823529;fill-rule:nonzero;stroke:#800000;stroke-width:1.06741309;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path42211"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path42213"
- style="fill:none;stroke:url(#linearGradient42487);stroke-width:1.22662127;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.814129,0,0,0.816369,-10.451999,24.674751)" />
- <path
+ style="fill:none;stroke:url(#linearGradient42487);stroke-width:1.22662127;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.814129,0,0,0.816369,-10.451999,24.674751)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.6848076,0,0,0.6867124,6.6184411,39.974237)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient42489);stroke-width:1.45823753;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient42489);stroke-width:1.45823753;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path42215"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.814129,0,0,0.816369,-10.451999,24.674751)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient42491);stroke-width:1.22662127;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient42491);stroke-width:1.22662127;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path42217"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
transform="matrix(1.3088013,0,0,1.3078064,114.94487,78.842325)"
@@ -66544,14 +65820,14 @@
height="7.6462827"
width="7.6405811"
id="rect42221"
- style="fill:url(#linearGradient42493);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.61147881;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:url(#linearGradient42493);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.61147881;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<path
sodipodi:nodetypes="ccccc"
id="path42223"
- d="m 49.324493,101.43525 0,-6.117109 6.112464,0 9.17e-4,6.117009 -6.113381,1e-4 0,0 0,0 0,0 z"
+ d="m 49.324493,101.43525 v -6.117109 h 6.112464 l 9.17e-4,6.117009 z"
style="fill:none;stroke:url(#linearGradient42495);stroke-width:0.76434839px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -66569,58 +65845,46 @@
transform="translate(83.990364,146.98346)"
id="g42229"
style="opacity:0.5">
- <path
+ <circle
transform="matrix(0.9361892,0,0,0.9375002,-26.576994,10.374973)"
- sodipodi:type="arc"
- style="fill:#ffd5d5;fill-opacity:0.58823529;fill-rule:nonzero;stroke:#800000;stroke-width:1.06741309;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:#ffd5d5;fill-opacity:0.58823529;fill-rule:nonzero;stroke:#800000;stroke-width:1.06741309;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path42231"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path42233"
- style="fill:none;stroke:url(#linearGradient42497);stroke-width:1.22662127;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.814129,0,0,0.816369,-10.451999,24.674751)" />
- <path
+ style="fill:none;stroke:url(#linearGradient42497);stroke-width:1.22662127;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.814129,0,0,0.816369,-10.451999,24.674751)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.6848076,0,0,0.6867124,6.6184411,39.974237)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient42499);stroke-width:1.45823753;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient42499);stroke-width:1.45823753;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path42235"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.814129,0,0,0.816369,-10.451999,24.674751)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient42501);stroke-width:1.22662127;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient42501);stroke-width:1.22662127;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path42237"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
@@ -66630,45 +65894,36 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path42241"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.45345163;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.6969446,0,0,0.6900977,36.918531,141.69345)" />
- <path
- sodipodi:type="arc"
- style="opacity:0.8;fill:url(#linearGradient42503);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.45345163;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.6969446,0,0,0.6900977,36.918531,141.69345)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
+ style="display:inline;opacity:0.8;fill:url(#linearGradient42503);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path42243"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(-0.6289675,-0.07056955,0.07168957,-0.6223801,203.47957,305.88099)" />
- <path
+ transform="matrix(-0.6289675,-0.07056955,0.07168957,-0.6223801,203.47957,305.88099)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.5718707,0,0,0.5622842,53.438009,156.77386)"
- sodipodi:type="arc"
- style="opacity:0.5;fill:none;stroke:url(#linearGradient42505);stroke-width:1.77757704;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="opacity:0.5;fill:none;stroke:url(#linearGradient42505);stroke-width:1.77757704;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path42245"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
@@ -66679,64 +65934,52 @@
transform="translate(83.990364,168)"
id="g42249"
style="opacity:0.5">
- <path
+ <circle
transform="matrix(0.9361892,0,0,0.9375002,-26.576994,10.374973)"
- sodipodi:type="arc"
- style="fill:#ffd5d5;fill-opacity:0.58823529;fill-rule:nonzero;stroke:#800000;stroke-width:1.06741309;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:#ffd5d5;fill-opacity:0.58823529;fill-rule:nonzero;stroke:#800000;stroke-width:1.06741309;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path42251"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path42253"
- style="fill:none;stroke:url(#linearGradient42507);stroke-width:1.22662127;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.814129,0,0,0.816369,-10.451999,24.674751)" />
- <path
+ style="fill:none;stroke:url(#linearGradient42507);stroke-width:1.22662127;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.814129,0,0,0.816369,-10.451999,24.674751)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.6848076,0,0,0.6867124,6.6184411,39.974237)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient42509);stroke-width:1.45823753;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient42509);stroke-width:1.45823753;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path42255"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.814129,0,0,0.816369,-10.451999,24.674751)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient42511);stroke-width:1.22662127;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient42511);stroke-width:1.22662127;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path42257"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
transform="translate(67,168)"
id="g42259">
<rect
- style="opacity:0;fill:#ffd5d5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ffd5d5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect42261"
width="14"
height="14"
@@ -66751,7 +65994,7 @@
height="16"
width="16"
id="rect42265"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
@@ -66761,22 +66004,22 @@
style="display:inline">
<path
transform="matrix(0.6969446,0,0,0.6900977,36.918531,141.69345)"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.52109182;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.52109182;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
d="m 139.87786,116.72728 c 0,4.416 -4.87654,8.89303 -9.18264,9.14567 -4.03231,0.23658 -6.86684,-2.60955 -6.61392,-6.64097 0.26963,-4.29785 4.87655,-8.89304 9.18265,-9.14567 4.03232,-0.23656 6.86685,2.60957 6.61391,6.64097 z"
id="path42273"
sodipodi:nodetypes="csssc"
inkscape:connector-curvature="0" />
<path
transform="matrix(-0.6214741,-0.06030772,0.08065856,-0.6191475,201.43124,304.14414)"
- style="opacity:0.8;fill:url(#linearGradient42513);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- d="m 140.14875,115.73726 c 0,4.416 -4.29905,10.26855 -8.71505,10.26855 -4.416,0 -7.23906,-1.65769 -7.23906,-6.07369 0,-4.416 4.28332,-9.5732 8.27188,-10.31985 3.26409,-0.61103 7.68223,1.70899 7.68223,6.12499 l 0,0 0,0 0,0 z"
+ style="display:inline;opacity:0.8;fill:url(#linearGradient42513);fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 140.14875,115.73726 c 0,4.416 -4.29905,10.26855 -8.71505,10.26855 -4.416,0 -7.23906,-1.65769 -7.23906,-6.07369 0,-4.416 4.28332,-9.5732 8.27188,-10.31985 3.26409,-0.61103 7.68223,1.70899 7.68223,6.12499 z"
id="path42275"
sodipodi:nodetypes="csssc"
inkscape:connector-curvature="0" />
<path
transform="matrix(0.5541229,-0.02016698,-0.02019099,0.5552959,58.152692,160.26124)"
- style="opacity:0.5;fill:none;stroke:url(#linearGradient42515);stroke-width:1.90297282;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
- d="m 139.88903,116.28509 c 0,4.416 -5.24736,9.49944 -9.66336,9.49944 -4.416,0 -6.16482,-1.70296 -6.16482,-6.11896 0,-4.416 5.24736,-9.49945 9.66336,-9.49945 4.416,0 6.16482,1.70297 6.16482,6.11897 l 0,0 0,0 0,0 z"
+ style="opacity:0.5;fill:none;stroke:url(#linearGradient42515);stroke-width:1.90297282;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 139.88903,116.28509 c 0,4.416 -5.24736,9.49944 -9.66336,9.49944 -4.416,0 -6.16482,-1.70296 -6.16482,-6.11896 0,-4.416 5.24736,-9.49945 9.66336,-9.49945 4.416,0 6.16482,1.70297 6.16482,6.11897 z"
id="path42277"
sodipodi:nodetypes="csssc"
inkscape:connector-curvature="0" />
@@ -66797,46 +66040,46 @@
height="16"
width="16"
id="rect42282"
- style="opacity:0;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline" />
+ style="display:inline;opacity:0;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
<g
id="g42285"
style="opacity:0.9">
<g
transform="translate(75.999999,-319.5)"
id="g42287"
- style="fill:#ffcc00;stroke:#000000;stroke-width:1.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;display:inline">
+ style="display:inline;fill:#ffcc00;stroke:#000000;stroke-width:1.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none">
<path
style="fill:none;stroke:#1a1a1a;stroke-width:1.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none"
- d="m -167,235 0,9 1,0 0,-4 3,0 0,-1 -3,0 0,-4 5,0 0,-1 -6,0 0,1 z"
+ d="m -167,235 v 9 h 1 v -4 h 3 v -1 h -3 v -4 h 5 v -1 h -6 z"
transform="translate(262.99997,326)"
id="path42289"
sodipodi:nodetypes="cccccccccccc"
inkscape:connector-curvature="0" />
</g>
<g
- style="fill:#ffcc00;display:inline"
+ style="display:inline;fill:#ffcc00"
id="g42291"
transform="translate(75.999999,-319.5)">
<path
style="fill:url(#linearGradient42517)"
- d="m -167,235 0,9 1,0 0,-4 3,0 0,-1 -3,0 0,-4 5,0 0,-1 -6,0 0,1 z"
+ d="m -167,235 v 9 h 1 v -4 h 3 v -1 h -3 v -4 h 5 v -1 h -6 z"
transform="translate(262.99997,326)"
id="path42294"
sodipodi:nodetypes="cccccccccccc"
inkscape:connector-curvature="0" />
</g>
<path
- style="opacity:0.85;fill:#ffffff;display:inline"
- d="m 171.99997,240.5 0,10 0.65625,0 0,-10 -0.65625,0 z"
+ style="display:inline;opacity:0.85;fill:#ffffff"
+ d="m 171.99997,240.5 v 10 h 0.65625 v -10 z"
id="path42296"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
</g>
<g
- style="fill:none;stroke:#162d50;stroke-width:1.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#162d50;stroke-width:1.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="g42298">
<rect
- style="fill:none;stroke:#162d50;stroke-width:1.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#162d50;stroke-width:1.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect42300"
width="1.25"
height="1"
@@ -66849,23 +66092,23 @@
height="1"
width="1.2500329"
id="rect42302"
- style="fill:none;stroke:#162d50;stroke-width:1.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#162d50;stroke-width:1.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<rect
y="238.5"
x="163.99997"
height="1"
width="1.2499995"
id="rect42304"
- style="fill:none;stroke:#162d50;stroke-width:1.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#162d50;stroke-width:1.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:none;stroke:#162d50;stroke-width:1.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#162d50;stroke-width:1.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect42306"
width="1.250011"
height="1"
x="167.74997"
y="238.5" />
<rect
- style="fill:none;stroke:#162d50;stroke-width:1.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#162d50;stroke-width:1.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect42308"
width="1.0000029"
height="12.5"
@@ -66874,7 +66117,7 @@
</g>
<g
id="g42310"
- style="fill:#e9f0fa;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate">
+ style="display:inline;overflow:visible;visibility:visible;fill:#e9f0fa;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate">
<rect
transform="translate(73.999969,208.5)"
y="43"
@@ -66882,16 +66125,16 @@
height="1"
width="2"
id="rect42312"
- style="fill:#e9f0fa;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#e9f0fa;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#e9f0fa;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#e9f0fa;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect42314"
width="2"
height="1"
x="166.99997"
y="251.5" />
<rect
- style="fill:#e9f0fa;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#e9f0fa;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect42316"
width="2"
height="1"
@@ -66903,14 +66146,14 @@
height="1"
width="2"
id="rect42318"
- style="fill:#e9f0fa;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#e9f0fa;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
y="239.5"
x="165.99997"
height="12"
width="0.99999952"
id="rect42320"
- style="fill:#e9f0fa;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#e9f0fa;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
</g>
</g>
<g
@@ -66923,50 +66166,41 @@
height="16"
width="16"
id="rect35368"
- style="opacity:0;fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<g
transform="matrix(0.8692812,0,0,0.8692812,-279.33076,38.816971)"
id="g35370"
style="opacity:0.35">
- <path
+ <circle
transform="matrix(0.9361892,0,0,0.9375002,-26.576994,10.374973)"
- sodipodi:type="arc"
- style="fill:#f8dcdc;fill-opacity:0.58823529;fill-rule:nonzero;stroke:#580000;stroke-width:1.22792602;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#f8dcdc;fill-opacity:0.58823529;fill-rule:nonzero;stroke:#580000;stroke-width:1.22792602;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path35372"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path35374"
- style="fill:none;stroke:url(#linearGradient35406);stroke-width:1.4523226;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.7910044,0,0,0.7931859,-7.3995492,27.410355)" />
- <path
+ style="fill:none;stroke:url(#linearGradient35406);stroke-width:1.4523226;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.7910044,0,0,0.7931859,-7.3995492,27.410355)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.644496,0,0,0.6462993,11.939574,44.742981)"
- sodipodi:type="arc"
- style="opacity:0.5;fill:none;stroke:url(#linearGradient35408);stroke-width:1.78243256;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="opacity:0.5;fill:none;stroke:url(#linearGradient35408);stroke-width:1.78243256;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path35376"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
id="g35378"
@@ -66976,13 +66210,13 @@
sodipodi:nodetypes="cssssszzs"
id="path35380"
d="m -222.5,141.5 c 1.52069,0 2.97702,-1.62476 3,-2.5 0.0525,-1.99931 1.5,-3.5 3.5,-3.5 2,0 3.5,1.568 3.5,3.5 0,1.84581 -1.5,3.50326 -3.5,3.5 -0.8997,-0.001 -2.5,1.5 -2.5,3 0,2.25 -1.75,4 -4,4 -2.25,0 -4,-1.75 -4,-4 0,-2.25 1.75,-4 4,-4 z"
- style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#1a1a1a;stroke-width:0.93272448;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#1a1a1a;stroke-width:0.93272448;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
transform="translate(-527,-167)"
- d="m 311,303 c -1.75507,0 -3,1.24493 -3,3 0,0.81824 -0.48216,1.55558 -1.125,2.09375 C 306.23216,308.63192 305.39457,309 304.5,309 c -1.996,0 -3.5,1.504 -3.5,3.5 0,1.996 1.504,3.5 3.5,3.5 1.996,0 3.5,-1.504 3.5,-3.5 0,-0.88607 0.36895,-1.73024 0.90625,-2.375 0.5373,-0.64476 1.27281,-1.125 2.09375,-1.125 1.72989,0 3,-1.41958 3,-3 0,-1.67845 -1.25603,-3 -3,-3 z"
+ d="m 311,302.99023 c -1.75507,0 -3.00977,1.2547 -3.00977,3.00977 0,0.81824 -0.46262,1.55558 -1.10546,2.09375 -0.64284,0.53817 -1.4902,0.89648 -2.38477,0.89648 -1.996,0 -3.50977,1.51377 -3.50977,3.50977 0,1.996 1.51377,3.50977 3.50977,3.50977 1.996,0 3.50977,-1.51377 3.50977,-3.50977 0,-0.88607 0.35723,-1.7322 0.89453,-2.37695 0.53729,-0.64476 1.27476,-1.11328 2.0957,-1.11328 1.72989,0 3.00977,-1.42935 3.00977,-3.00977 0,-1.67845 -1.2658,-3.00977 -3.00977,-3.00977 z"
id="path35382"
- style="opacity:0.8;fill:url(#linearGradient35410);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.86598092;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.8;fill:url(#linearGradient35410);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.86598092;marker:none;enable-background:accumulate"
inkscape:original="M 311 302.5 C 309 302.5 307.5 304 307.5 306 C 307.5 307.25 306.02069 308.5 304.5 308.5 C 302.25 308.5 300.5 310.25 300.5 312.5 C 300.5 314.75 302.25 316.5 304.5 316.5 C 306.75 316.5 308.5 314.75 308.5 312.5 C 308.5 311 309.75 309.5 311 309.5 C 313 309.5 314.5 307.84581 314.5 306 C 314.5 304.068 313 302.5 311 302.5 z "
inkscape:radius="-0.48985747"
sodipodi:type="inkscape:offset" />
@@ -66991,14 +66225,14 @@
sodipodi:type="inkscape:offset"
inkscape:radius="-0.96440691"
inkscape:original="M 311 302.5 C 309 302.5 307.5 304 307.5 306 C 307.5 307.25 306.02069 308.5 304.5 308.5 C 302.25 308.5 300.5 310.25 300.5 312.5 C 300.5 314.75 302.25 316.5 304.5 316.5 C 306.75 316.5 308.5 314.75 308.5 312.5 C 308.5 311 309.75 309.5 311 309.5 C 313 309.5 314.5 307.84581 314.5 306 C 314.5 304.068 313 302.5 311 302.5 z "
- style="fill:none;stroke:url(#radialGradient35412);stroke-width:1.16590559;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#radialGradient35412);stroke-width:1.16590559;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path35384"
- d="m 311,303.46875 c -1.5178,0 -2.53125,1.01345 -2.53125,2.53125 0,1.00544 -0.55807,1.86332 -1.28125,2.46875 -0.72318,0.60543 -1.66291,1 -2.6875,1 -1.74994,0 -3.03125,1.28131 -3.03125,3.03125 0,1.74994 1.28131,3.03125 3.03125,3.03125 1.74994,0 3.03125,-1.28131 3.03125,-3.03125 0,-1.01789 0.3963,-1.96306 1,-2.6875 0.6037,-0.72444 1.45799,-1.28125 2.46875,-1.28125 1.46823,0 2.53125,-1.20792 2.53125,-2.53125 0,-1.43282 -1.03531,-2.53125 -2.53125,-2.53125 z" />
+ d="m 311,303.46484 c -1.5178,0 -2.53516,1.01736 -2.53516,2.53516 0,1.00544 -0.55221,1.85355 -1.27539,2.45898 -0.72317,0.60543 -1.66486,1.00586 -2.68945,1.00586 -1.74994,0 -3.03516,1.28522 -3.03516,3.03516 0,1.74994 1.28522,3.03516 3.03516,3.03516 1.74994,0 3.03516,-1.28522 3.03516,-3.03516 0,-1.01789 0.40216,-1.95525 1.00586,-2.67969 0.6037,-0.72444 1.44822,-1.28515 2.45898,-1.28515 1.46823,0 2.53516,-1.21183 2.53516,-2.53516 0,-1.43282 -1.03922,-2.53516 -2.53516,-2.53516 z" />
<path
transform="matrix(0,-1,-1,0,90,450)"
- d="m 311,303.46875 c -1.5178,0 -2.53125,1.01345 -2.53125,2.53125 0,1.00544 -0.55807,1.86332 -1.28125,2.46875 -0.72318,0.60543 -1.66291,1 -2.6875,1 -1.74994,0 -3.03125,1.28131 -3.03125,3.03125 0,1.74994 1.28131,3.03125 3.03125,3.03125 1.74994,0 3.03125,-1.28131 3.03125,-3.03125 0,-1.01789 0.3963,-1.96306 1,-2.6875 0.6037,-0.72444 1.45799,-1.28125 2.46875,-1.28125 1.46823,0 2.53125,-1.20792 2.53125,-2.53125 0,-1.43282 -1.03531,-2.53125 -2.53125,-2.53125 z"
+ d="m 311,303.46484 c -1.5178,0 -2.53516,1.01736 -2.53516,2.53516 0,1.00544 -0.55221,1.85355 -1.27539,2.45898 -0.72317,0.60543 -1.66486,1.00586 -2.68945,1.00586 -1.74994,0 -3.03516,1.28522 -3.03516,3.03516 0,1.74994 1.28522,3.03516 3.03516,3.03516 1.74994,0 3.03516,-1.28522 3.03516,-3.03516 0,-1.01789 0.40216,-1.95525 1.00586,-2.67969 0.6037,-0.72444 1.44822,-1.28515 2.45898,-1.28515 1.46823,0 2.53516,-1.21183 2.53516,-2.53516 0,-1.43282 -1.03922,-2.53516 -2.53516,-2.53516 z"
id="path35386"
- style="fill:none;stroke:url(#radialGradient35414);stroke-width:1.16590559;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#radialGradient35414);stroke-width:1.16590559;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:original="M 311 302.5 C 309 302.5 307.5 304 307.5 306 C 307.5 307.25 306.02069 308.5 304.5 308.5 C 302.25 308.5 300.5 310.25 300.5 312.5 C 300.5 314.75 302.25 316.5 304.5 316.5 C 306.75 316.5 308.5 314.75 308.5 312.5 C 308.5 311 309.75 309.5 311 309.5 C 313 309.5 314.5 307.84581 314.5 306 C 314.5 304.068 313 302.5 311 302.5 z "
inkscape:radius="-0.96440691"
sodipodi:type="inkscape:offset" />
@@ -67007,90 +66241,69 @@
style="opacity:0.12999998"
id="g35388"
transform="matrix(0.8692812,0,0,0.8692812,-279.33076,38.816971)">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path35390"
- style="fill:#ffd5d5;fill-opacity:0.58823529;fill-rule:nonzero;stroke:#530505;stroke-width:1.22792602;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.9361892,0,0,0.9375002,-26.576994,10.374973)" />
- <path
+ style="fill:#ffd5d5;fill-opacity:0.58823529;fill-rule:nonzero;stroke:#530505;stroke-width:1.22792602;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.9361892,0,0,0.9375002,-26.576994,10.374973)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.7910044,0,0,0.7931859,-7.3995492,27.410355)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient35416);stroke-width:1.4523226;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient35416);stroke-width:1.4523226;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path35392"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path35394"
- style="opacity:0.5;fill:none;stroke:url(#linearGradient35418);stroke-width:1.78243256;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.644496,0,0,0.6462993,11.939574,44.742981)" />
+ style="opacity:0.5;fill:none;stroke:url(#linearGradient35418);stroke-width:1.78243256;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.644496,0,0,0.6462993,11.939574,44.742981)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
- style="opacity:0.9;display:inline;enable-background:new"
+ style="display:inline;opacity:0.9;enable-background:new"
transform="matrix(0.8749996,0,0,0.8802811,-404.57262,-113.49608)"
id="g35396">
- <path
- sodipodi:type="arc"
- style="fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient35420);stroke-width:1.13942409;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient35420);stroke-width:1.13942409;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path35398"
- sodipodi:cx="219.5"
- sodipodi:cy="292.5"
- sodipodi:rx="4"
- sodipodi:ry="4"
- d="m 223.5,292.5 a 4,4 0 0 1 -4,4 4,4 0 0 1 -4,-4 4,4 0 0 1 4,-4 4,4 0 0 1 4,4 z"
- transform="translate(20,0)" />
- <path
- sodipodi:type="arc"
- style="opacity:0.8;fill:url(#linearGradient35422);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.29032254;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ transform="translate(20)"
+ cx="219.5"
+ cy="292.5"
+ r="4" />
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.8;fill:url(#linearGradient35422);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.29032254;marker:none;enable-background:accumulate"
id="path35400"
- sodipodi:cx="219.5"
- sodipodi:cy="292.5"
- sodipodi:rx="4"
- sodipodi:ry="4"
- d="m 223.5,292.5 a 4,4 0 0 1 -4,4 4,4 0 0 1 -4,-4 4,4 0 0 1 4,-4 4,4 0 0 1 4,4 z"
- transform="matrix(0.875,0,0,0.875,47.4375,36.5625)" />
- <path
+ transform="matrix(0.875,0,0,0.875,47.4375,36.5625)"
+ cx="219.5"
+ cy="292.5"
+ r="4" />
+ <circle
transform="matrix(0.7060003,0,0,0.7060647,84.532933,85.976064)"
- d="m 223.5,292.5 a 4,4 0 0 1 -4,4 4,4 0 0 1 -4,-4 4,4 0 0 1 4,-4 4,4 0 0 1 4,4 z"
- sodipodi:ry="4"
- sodipodi:rx="4"
- sodipodi:cy="292.5"
- sodipodi:cx="219.5"
id="path35402"
- style="fill:none;stroke:url(#linearGradient35424);stroke-width:1.6138407;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient35424);stroke-width:1.6138407;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="219.5"
+ cy="292.5"
+ r="4" />
+ <circle
transform="matrix(0.875,0,0,0.875,47.4375,36.5625)"
- d="m 223.5,292.5 a 4,4 0 0 1 -4,4 4,4 0 0 1 -4,-4 4,4 0 0 1 4,-4 4,4 0 0 1 4,4 z"
- sodipodi:ry="4"
- sodipodi:rx="4"
- sodipodi:cy="292.5"
- sodipodi:cx="219.5"
id="path35404"
- style="opacity:0.8;fill:url(#radialGradient35426);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.29032254;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.8;fill:url(#radialGradient35426);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.29032254;marker:none;enable-background:accumulate"
+ cx="219.5"
+ cy="292.5"
+ r="4" />
</g>
</g>
<g
@@ -67098,7 +66311,7 @@
id="ICON_OUTLINER_DATA_META"
style="display:inline;enable-background:new">
<rect
- style="opacity:0;fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect35430"
width="16"
height="16"
@@ -67108,52 +66321,43 @@
style="opacity:0.35"
id="g35432"
transform="matrix(0.8692812,0,0,0.8692812,-279.33076,38.816971)">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path35434"
- style="fill:#f8dcdc;fill-opacity:0.58823529;fill-rule:nonzero;stroke:#580000;stroke-width:1.22792602;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc"
- transform="matrix(0.9361892,0,0,0.9375002,-26.576994,10.374973)" />
- <path
+ style="display:inline;overflow:visible;visibility:visible;fill:#f8dcdc;fill-opacity:0.58823529;fill-rule:nonzero;stroke:#580000;stroke-width:1.22792602;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ transform="matrix(0.9361892,0,0,0.9375002,-26.576994,10.374973)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.7910044,0,0,0.7931859,-7.3995492,27.410355)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient35468);stroke-width:1.4523226;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient35468);stroke-width:1.4523226;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path35436"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path35438"
- style="opacity:0.5;fill:none;stroke:url(#linearGradient35470);stroke-width:1.78243256;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.644496,0,0,0.6462993,11.939574,44.742981)" />
+ style="opacity:0.5;fill:none;stroke:url(#linearGradient35470);stroke-width:1.78243256;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.644496,0,0,0.6462993,11.939574,44.742981)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
style="opacity:0.7"
transform="matrix(0.857703,0,0,0.8577018,-4.235469,19.278753)"
id="g35440">
<path
- style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.93272448;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.93272448;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m -222.5,141.5 c 1.52069,0 2.97702,-1.62476 3,-2.5 0.0525,-1.99931 1.5,-3.5 3.5,-3.5 2,0 3.5,1.568 3.5,3.5 0,1.84581 -1.5,3.50326 -3.5,3.5 -0.8997,-0.001 -2.5,1.5 -2.5,3 0,2.25 -1.75,4 -4,4 -2.25,0 -4,-1.75 -4,-4 0,-2.25 1.75,-4 4,-4 z"
id="path35442"
sodipodi:nodetypes="cssssszzs"
@@ -67162,14 +66366,14 @@
sodipodi:type="inkscape:offset"
inkscape:radius="-0.48985747"
inkscape:original="M 311 302.5 C 309 302.5 307.5 304 307.5 306 C 307.5 307.25 306.02069 308.5 304.5 308.5 C 302.25 308.5 300.5 310.25 300.5 312.5 C 300.5 314.75 302.25 316.5 304.5 316.5 C 306.75 316.5 308.5 314.75 308.5 312.5 C 308.5 311 309.75 309.5 311 309.5 C 313 309.5 314.5 307.84581 314.5 306 C 314.5 304.068 313 302.5 311 302.5 z "
- style="opacity:0.8;fill:url(#linearGradient35472);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.86598092;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.8;fill:url(#linearGradient35472);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.86598092;marker:none;enable-background:accumulate"
id="path35444"
- d="m 311,303 c -1.75507,0 -3,1.24493 -3,3 0,0.81824 -0.48216,1.55558 -1.125,2.09375 C 306.23216,308.63192 305.39457,309 304.5,309 c -1.996,0 -3.5,1.504 -3.5,3.5 0,1.996 1.504,3.5 3.5,3.5 1.996,0 3.5,-1.504 3.5,-3.5 0,-0.88607 0.36895,-1.73024 0.90625,-2.375 0.5373,-0.64476 1.27281,-1.125 2.09375,-1.125 1.72989,0 3,-1.41958 3,-3 0,-1.67845 -1.25603,-3 -3,-3 z"
+ d="m 311,302.99023 c -1.75507,0 -3.00977,1.2547 -3.00977,3.00977 0,0.81824 -0.46262,1.55558 -1.10546,2.09375 -0.64284,0.53817 -1.4902,0.89648 -2.38477,0.89648 -1.996,0 -3.50977,1.51377 -3.50977,3.50977 0,1.996 1.51377,3.50977 3.50977,3.50977 1.996,0 3.50977,-1.51377 3.50977,-3.50977 0,-0.88607 0.35723,-1.7322 0.89453,-2.37695 0.53729,-0.64476 1.27476,-1.11328 2.0957,-1.11328 1.72989,0 3.00977,-1.42935 3.00977,-3.00977 0,-1.67845 -1.2658,-3.00977 -3.00977,-3.00977 z"
transform="translate(-527,-167)" />
<path
- d="m 311,303.46875 c -1.5178,0 -2.53125,1.01345 -2.53125,2.53125 0,1.00544 -0.55807,1.86332 -1.28125,2.46875 -0.72318,0.60543 -1.66291,1 -2.6875,1 -1.74994,0 -3.03125,1.28131 -3.03125,3.03125 0,1.74994 1.28131,3.03125 3.03125,3.03125 1.74994,0 3.03125,-1.28131 3.03125,-3.03125 0,-1.01789 0.3963,-1.96306 1,-2.6875 0.6037,-0.72444 1.45799,-1.28125 2.46875,-1.28125 1.46823,0 2.53125,-1.20792 2.53125,-2.53125 0,-1.43282 -1.03531,-2.53125 -2.53125,-2.53125 z"
+ d="m 311,303.46484 c -1.5178,0 -2.53516,1.01736 -2.53516,2.53516 0,1.00544 -0.55221,1.85355 -1.27539,2.45898 -0.72317,0.60543 -1.66486,1.00586 -2.68945,1.00586 -1.74994,0 -3.03516,1.28522 -3.03516,3.03516 0,1.74994 1.28522,3.03516 3.03516,3.03516 1.74994,0 3.03516,-1.28522 3.03516,-3.03516 0,-1.01789 0.40216,-1.95525 1.00586,-2.67969 0.6037,-0.72444 1.44822,-1.28515 2.45898,-1.28515 1.46823,0 2.53516,-1.21183 2.53516,-2.53516 0,-1.43282 -1.03922,-2.53516 -2.53516,-2.53516 z"
id="path35446"
- style="fill:none;stroke:url(#radialGradient35474);stroke-width:1.16590559;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#radialGradient35474);stroke-width:1.16590559;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:original="M 311 302.5 C 309 302.5 307.5 304 307.5 306 C 307.5 307.25 306.02069 308.5 304.5 308.5 C 302.25 308.5 300.5 310.25 300.5 312.5 C 300.5 314.75 302.25 316.5 304.5 316.5 C 306.75 316.5 308.5 314.75 308.5 312.5 C 308.5 311 309.75 309.5 311 309.5 C 313 309.5 314.5 307.84581 314.5 306 C 314.5 304.068 313 302.5 311 302.5 z "
inkscape:radius="-0.96440691"
sodipodi:type="inkscape:offset"
@@ -67178,99 +66382,78 @@
sodipodi:type="inkscape:offset"
inkscape:radius="-0.96440691"
inkscape:original="M 311 302.5 C 309 302.5 307.5 304 307.5 306 C 307.5 307.25 306.02069 308.5 304.5 308.5 C 302.25 308.5 300.5 310.25 300.5 312.5 C 300.5 314.75 302.25 316.5 304.5 316.5 C 306.75 316.5 308.5 314.75 308.5 312.5 C 308.5 311 309.75 309.5 311 309.5 C 313 309.5 314.5 307.84581 314.5 306 C 314.5 304.068 313 302.5 311 302.5 z "
- style="fill:none;stroke:url(#radialGradient35476);stroke-width:1.16590559;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#radialGradient35476);stroke-width:1.16590559;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path35448"
- d="m 311,303.46875 c -1.5178,0 -2.53125,1.01345 -2.53125,2.53125 0,1.00544 -0.55807,1.86332 -1.28125,2.46875 -0.72318,0.60543 -1.66291,1 -2.6875,1 -1.74994,0 -3.03125,1.28131 -3.03125,3.03125 0,1.74994 1.28131,3.03125 3.03125,3.03125 1.74994,0 3.03125,-1.28131 3.03125,-3.03125 0,-1.01789 0.3963,-1.96306 1,-2.6875 0.6037,-0.72444 1.45799,-1.28125 2.46875,-1.28125 1.46823,0 2.53125,-1.20792 2.53125,-2.53125 0,-1.43282 -1.03531,-2.53125 -2.53125,-2.53125 z"
+ d="m 311,303.46484 c -1.5178,0 -2.53516,1.01736 -2.53516,2.53516 0,1.00544 -0.55221,1.85355 -1.27539,2.45898 -0.72317,0.60543 -1.66486,1.00586 -2.68945,1.00586 -1.74994,0 -3.03516,1.28522 -3.03516,3.03516 0,1.74994 1.28522,3.03516 3.03516,3.03516 1.74994,0 3.03516,-1.28522 3.03516,-3.03516 0,-1.01789 0.40216,-1.95525 1.00586,-2.67969 0.6037,-0.72444 1.44822,-1.28515 2.45898,-1.28515 1.46823,0 2.53516,-1.21183 2.53516,-2.53516 0,-1.43282 -1.03922,-2.53516 -2.53516,-2.53516 z"
transform="matrix(0,-1,-1,0,90,450)" />
</g>
<g
transform="matrix(0.8692812,0,0,0.8692812,-279.33076,38.816971)"
id="g35450"
style="opacity:0.12999998">
- <path
+ <circle
transform="matrix(0.9361892,0,0,0.9375002,-26.576994,10.374973)"
- sodipodi:type="arc"
- style="fill:#ffd5d5;fill-opacity:0.58823529;fill-rule:nonzero;stroke:#530505;stroke-width:1.22792602;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:#ffd5d5;fill-opacity:0.58823529;fill-rule:nonzero;stroke:#530505;stroke-width:1.22792602;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path35452"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path35454"
- style="fill:none;stroke:url(#linearGradient35478);stroke-width:1.4523226;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.7910044,0,0,0.7931859,-7.3995492,27.410355)" />
- <path
+ style="fill:none;stroke:url(#linearGradient35478);stroke-width:1.4523226;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.7910044,0,0,0.7931859,-7.3995492,27.410355)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.644496,0,0,0.6462993,11.939574,44.742981)"
- sodipodi:type="arc"
- style="opacity:0.5;fill:none;stroke:url(#linearGradient35480);stroke-width:1.78243256;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="opacity:0.5;fill:none;stroke:url(#linearGradient35480);stroke-width:1.78243256;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path35456"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
id="g35458"
transform="matrix(0.8749996,0,0,0.8802811,-404.57262,-113.49608)"
- style="opacity:0.9;display:inline;enable-background:new">
- <path
- transform="translate(20,0)"
- d="m 223.5,292.5 a 4,4 0 0 1 -4,4 4,4 0 0 1 -4,-4 4,4 0 0 1 4,-4 4,4 0 0 1 4,4 z"
- sodipodi:ry="4"
- sodipodi:rx="4"
- sodipodi:cy="292.5"
- sodipodi:cx="219.5"
+ style="display:inline;opacity:0.9;enable-background:new">
+ <circle
+ transform="translate(20)"
id="path35460"
- style="fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient35482);stroke-width:1.13942409;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
+ style="display:inline;overflow:visible;visibility:visible;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient35482);stroke-width:1.13942409;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="219.5"
+ cy="292.5"
+ r="4" />
+ <circle
transform="matrix(0.875,0,0,0.875,47.4375,36.5625)"
- d="m 223.5,292.5 a 4,4 0 0 1 -4,4 4,4 0 0 1 -4,-4 4,4 0 0 1 4,-4 4,4 0 0 1 4,4 z"
- sodipodi:ry="4"
- sodipodi:rx="4"
- sodipodi:cy="292.5"
- sodipodi:cx="219.5"
id="path35462"
- style="opacity:0.8;fill:url(#linearGradient35484);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.29032254;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient35486);stroke-width:1.6138407;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.8;fill:url(#linearGradient35484);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.29032254;marker:none;enable-background:accumulate"
+ cx="219.5"
+ cy="292.5"
+ r="4" />
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient35486);stroke-width:1.6138407;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path35464"
- sodipodi:cx="219.5"
- sodipodi:cy="292.5"
- sodipodi:rx="4"
- sodipodi:ry="4"
- d="m 223.5,292.5 a 4,4 0 0 1 -4,4 4,4 0 0 1 -4,-4 4,4 0 0 1 4,-4 4,4 0 0 1 4,4 z"
- transform="matrix(0.7060003,0,0,0.7060647,84.532933,85.976064)" />
- <path
- sodipodi:type="arc"
- style="opacity:0.8;fill:url(#radialGradient35488);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.29032254;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ transform="matrix(0.7060003,0,0,0.7060647,84.532933,85.976064)"
+ cx="219.5"
+ cy="292.5"
+ r="4" />
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.8;fill:url(#radialGradient35488);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.29032254;marker:none;enable-background:accumulate"
id="path35466"
- sodipodi:cx="219.5"
- sodipodi:cy="292.5"
- sodipodi:rx="4"
- sodipodi:ry="4"
- d="m 223.5,292.5 a 4,4 0 0 1 -4,4 4,4 0 0 1 -4,-4 4,4 0 0 1 4,-4 4,4 0 0 1 4,4 z"
- transform="matrix(0.875,0,0,0.875,47.4375,36.5625)" />
+ transform="matrix(0.875,0,0,0.875,47.4375,36.5625)"
+ cx="219.5"
+ cy="292.5"
+ r="4" />
</g>
</g>
<g
@@ -67285,36 +66468,27 @@
<g
transform="translate(-340.00002,-121.00001)"
id="g35481">
- <path
- sodipodi:type="arc"
- style="opacity:0.1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#e9e9af;stroke-width:0.58333313;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#e9e9af;stroke-width:0.58333313;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path35483"
- sodipodi:cx="464.5"
- sodipodi:cy="192.5"
- sodipodi:rx="1.75"
- sodipodi:ry="1.75"
- d="m 466.25,192.5 a 1.75,1.75 0 0 1 -1.75,1.75 1.75,1.75 0 0 1 -1.75,-1.75 1.75,1.75 0 0 1 1.75,-1.75 1.75,1.75 0 0 1 1.75,1.75 z"
- transform="matrix(1.7142856,0,0,1.7142871,-330.83199,-136.46043)" />
- <path
+ transform="matrix(1.7142856,0,0,1.7142871,-330.83199,-136.46043)"
+ cx="464.5"
+ cy="192.5"
+ r="1.75" />
+ <circle
transform="matrix(1.4285718,0,0,1.4285718,-198.61789,-81.960223)"
- d="m 466.25,192.5 a 1.75,1.75 0 0 1 -1.75,1.75 1.75,1.75 0 0 1 -1.75,-1.75 1.75,1.75 0 0 1 1.75,-1.75 1.75,1.75 0 0 1 1.75,1.75 z"
- sodipodi:ry="1.75"
- sodipodi:rx="1.75"
- sodipodi:cy="192.5"
- sodipodi:cx="464.5"
id="path35485"
- style="opacity:0.4;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#e1e08e;stroke-width:0.69999987;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#adac2f;stroke-width:1.16666663;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.4;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#e1e08e;stroke-width:0.69999987;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="464.5"
+ cy="192.5"
+ r="1.75" />
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#adac2f;stroke-width:1.16666663;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path35487"
- sodipodi:cx="464.5"
- sodipodi:cy="192.5"
- sodipodi:rx="1.75"
- sodipodi:ry="1.75"
- d="m 466.25,192.5 a 1.75,1.75 0 0 1 -1.75,1.75 1.75,1.75 0 0 1 -1.75,-1.75 1.75,1.75 0 0 1 1.75,-1.75 1.75,1.75 0 0 1 1.75,1.75 z"
- transform="matrix(0.8571429,0,0,0.8571429,66.810813,28.039828)" />
+ transform="matrix(0.8571429,0,0,0.8571429,66.810813,28.039828)"
+ cx="464.5"
+ cy="192.5"
+ r="1.75" />
</g>
<rect
y="71.039841"
@@ -67322,76 +66496,64 @@
height="2"
width="2"
id="rect35489"
- style="fill:#f4eed7;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#f4eed7;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
</g>
<g
style="opacity:0.6"
transform="matrix(-1,0,0,1,194,-21)"
id="g35439">
<path
- style="fill:url(#linearGradient35446);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline;enable-background:new"
- d="m 31.5,52.5 c -1.656,0 -3,1.343998 -3,3 0,0.02155 -4.53e-4,0.04106 0,0.0625 -1.138867,0.233417 -1.999999,1.229094 -2,2.4375 0,1.381035 1.120001,2.500001 2.5,2.5 l 6.5,0 c 1.656,0 3,-1.344001 3,-3 0,-1.656001 -1.344,-2.999999 -3,-3 -0.40365,0 -0.77337,0.105241 -1.125,0.25 C 34.035268,53.465989 32.89035,52.500001 31.5,52.5 z"
+ style="display:inline;fill:url(#linearGradient35446);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
+ d="m 31.5,52.5 c -1.656,0 -3,1.343998 -3,3 0,0.02155 -4.53e-4,0.04106 0,0.0625 -1.138867,0.233417 -1.999999,1.229094 -2,2.4375 0,1.381035 1.120001,2.500001 2.5,2.5 h 6.5 c 1.656,0 3,-1.344001 3,-3 0,-1.656001 -1.344,-2.999999 -3,-3 -0.40365,0 -0.77337,0.105241 -1.125,0.25 C 34.035268,53.465989 32.89035,52.500001 31.5,52.5 Z"
id="path34600"
inkscape:connector-curvature="0" />
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path35419"
- style="fill:url(#linearGradient35450);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new"
- sodipodi:type="arc"
- transform="matrix(0,0.3125,-0.3124999,0,68.374988,14.250001)" />
- <path
+ style="display:inline;fill:url(#linearGradient35450);fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
+ transform="matrix(0,0.3125,-0.3124999,0,68.374988,14.250001)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0,0.2187504,-0.2187496,0,54.562456,29.374947)"
- sodipodi:type="arc"
- style="fill:url(#linearGradient35448);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new"
+ style="display:inline;fill:url(#linearGradient35448);fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
id="path34624"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.08088095,0.3018518,-0.3018517,0.08088093,60.442218,8.1116116)"
- sodipodi:type="arc"
- style="fill:url(#linearGradient35452);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new"
+ style="display:inline;fill:url(#linearGradient35452);fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
id="path35435"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path35429"
- style="fill:url(#linearGradient35454);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new"
- sodipodi:type="arc"
- transform="matrix(0,0.2812501,-0.2812497,0,64.937461,20.624986)" />
+ style="display:inline;fill:url(#linearGradient35454);fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
+ transform="matrix(0,0.2812501,-0.2812497,0,64.937461,20.624986)"
+ cx="132"
+ cy="118"
+ r="8" />
<path
sodipodi:type="inkscape:offset"
inkscape:radius="-0.92788464"
inkscape:original="M 31.5 52.5 C 29.844 52.5 28.5 53.843998 28.5 55.5 C 28.5 55.521551 28.499547 55.541057 28.5 55.5625 C 27.361133 55.795917 26.500001 56.791594 26.5 58 C 26.5 59.381035 27.620001 60.500001 29 60.5 L 35.5 60.5 C 37.156 60.5 38.5 59.155999 38.5 57.5 C 38.5 55.843999 37.156 54.500001 35.5 54.5 C 35.09635 54.5 34.72663 54.605241 34.375 54.75 C 34.035268 53.465989 32.89035 52.500001 31.5 52.5 z "
- style="fill:none;stroke:url(#linearGradient35718);stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline;enable-background:new"
+ style="display:inline;fill:none;stroke:url(#linearGradient35718);stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
id="path35703"
- d="m 31.5,53.4375 c -1.153957,0 -2.0625,0.908541 -2.0625,2.0625 0,0.03455 7.4e-5,0.03475 0,0.03125 a 0.92797743,0.92797743 0 0 1 -0.75,0.9375 c -0.72055,0.147681 -1.249999,0.763662 -1.25,1.53125 0,0.879367 0.684082,1.562501 1.5625,1.5625 l 6.5,0 c 1.153956,0 2.0625,-0.908545 2.0625,-2.0625 0,-1.153957 -0.908543,-2.062499 -2.0625,-2.0625 -0.242369,0 -0.494949,0.03839 -0.78125,0.15625 A 0.92797743,0.92797743 0 0 1 33.46875,55 C 33.231438,54.103084 32.460566,53.437501 31.5,53.4375 z" />
+ d="m 31.5,53.427734 c -1.153957,0 -2.072266,0.918307 -2.072266,2.072266 0,0.03455 7.4e-5,0.04646 0,0.04297 a 0.92797743,0.92797743 0 0 1 -0.742187,0.927734 C 27.964996,56.618384 27.427735,57.232412 27.427734,58 c 0,0.879367 0.693848,1.572266 1.572266,1.572266 h 6.5 c 1.153956,0 2.072266,-0.918311 2.072266,-2.072266 0,-1.153957 -0.918309,-2.072265 -2.072266,-2.072266 -0.242369,0 -0.485183,0.06182 -0.771484,0.179688 a 0.92797743,0.92797743 0 0 1 -1.25,-0.619141 C 33.241204,54.091366 32.460566,53.427735 31.5,53.427734 Z" />
</g>
<rect
y="31"
@@ -67399,7 +66561,7 @@
height="16"
width="16"
id="rect34608"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
@@ -67407,68 +66569,59 @@
transform="matrix(0.9059893,0,0,0.9161677,40.690483,-162.91268)"
id="g34610"
style="display:inline">
- <path
+ <circle
transform="matrix(0.6879625,0,0,0.6812035,38.104167,142.74297)"
- sodipodi:type="arc"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.6033566;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.6033566;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path34612"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(-0.6156869,-0.06867104,0.07017585,-0.6056363,201.96224,303.63852)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path34614"
- style="opacity:0.8;fill:url(#linearGradient34618);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- sodipodi:type="arc" />
- <path
+ style="display:inline;opacity:0.8;fill:url(#linearGradient34618);fill-opacity:1;fill-rule:nonzero;stroke:none"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path34616"
- style="fill:none;stroke:url(#linearGradient34620);stroke-width:2.02934265;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.5436035,0,0,0.5381576,57.159565,159.63177)" />
+ style="fill:none;stroke:url(#linearGradient34620);stroke-width:2.02934265;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.5436035,0,0,0.5381576,57.159565,159.63177)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
style="display:inline;enable-background:new"
id="ICON_MANIPUL"
- transform="translate(-20.999985,0)">
+ transform="translate(-20.999985)">
<rect
y="157"
x="89.000015"
height="16"
width="16"
id="rect36400"
- style="opacity:0;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.79999995;marker:none;enable-background:accumulate" />
<g
id="g36402">
<g
transform="translate(8.000015,151)"
- style="stroke:#1a1a1a;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;display:inline;enable-background:new"
+ style="display:inline;stroke:#1a1a1a;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new"
id="g36404">
<path
sodipodi:nodetypes="cc"
- style="fill:none;stroke:#00163c;stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 88.999985,8 0,8"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#00163c;stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 88.999985,8 v 8"
id="path36407"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -67480,12 +66633,12 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path36410"
d="m 82.99997,20 6.000015,-4"
- style="fill:none;stroke:#5d0606;stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#5d0606;stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
- style="fill:none;stroke:#183c00;stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#183c00;stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="M 94.99997,20 88.999985,16"
id="path36412"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -67494,7 +66647,7 @@
inkscape:connector-curvature="0" />
</g>
<rect
- style="fill:none;stroke:#5d0606;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#5d0606;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect36414"
width="2.0000153"
height="2.0000069"
@@ -67503,7 +66656,7 @@
rx="0"
ry="0" />
<rect
- style="fill:none;stroke:#001e50;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#001e50;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect36416"
width="2.0000153"
height="2.0000069"
@@ -67513,8 +66666,8 @@
ry="0" />
<path
sodipodi:nodetypes="cc"
- style="fill:none;stroke:#4c8ff4;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 97,159 0,8"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#4c8ff4;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 97,159 v 8"
id="path36418"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -67526,7 +66679,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path36420"
d="M 90.999985,171 97,167"
- style="fill:none;stroke:#ef4e29;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ef4e29;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<rect
@@ -67537,10 +66690,10 @@
height="2.0000069"
width="2.0000153"
id="rect36422"
- style="opacity:0.3;fill:none;stroke:#5d0606;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:none;stroke:#5d0606;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="ccc"
- style="opacity:0.3;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 90.499985,170.75 6,-4 1.5e-5,-7.25"
id="path36424"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -67555,10 +66708,10 @@
height="2.0000069"
width="2.0000153"
id="rect36426"
- style="fill:#acc373;fill-opacity:1;fill-rule:nonzero;stroke:#183c00;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#acc373;fill-opacity:1;fill-rule:nonzero;stroke:#183c00;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="cc"
- style="fill:none;stroke:#93e420;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#93e420;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="M 102.99998,171 97,167"
id="path36428"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -67573,7 +66726,7 @@
height="2"
width="2"
id="rect36430"
- style="fill:#eb512e;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.3499999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#eb512e;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.3499999;marker:none;enable-background:accumulate" />
<rect
ry="0"
rx="0"
@@ -67582,7 +66735,7 @@
height="2.0000069"
width="2.0000153"
id="rect36432"
- style="opacity:0.3;fill:none;stroke:#001e50;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:none;stroke:#001e50;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<rect
ry="0"
rx="0"
@@ -67591,35 +66744,29 @@
height="2"
width="2"
id="rect36434"
- style="fill:#4c8ff4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.3499999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
- sodipodi:type="arc"
- style="opacity:0.5;fill:url(#radialGradient36452);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:#4c8ff4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.3499999;marker:none;enable-background:accumulate" />
+ <circle
+ style="display:inline;opacity:0.5;fill:url(#radialGradient36452);fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
id="path36436"
- sodipodi:cx="70.5"
- sodipodi:cy="14.5"
- sodipodi:rx="1.5"
- sodipodi:ry="1.5"
- d="M 72,14.5 A 1.5,1.5 0 0 1 70.5,16 1.5,1.5 0 0 1 69,14.5 1.5,1.5 0 0 1 70.5,13 1.5,1.5 0 0 1 72,14.5 Z"
transform="matrix(1.3333333,0,0,1.3333343,3,147.66665)"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="70.5"
+ cy="14.5"
+ r="1.5" />
+ <circle
transform="matrix(0.6666679,0,0,0.6666668,49.999915,157.33333)"
- sodipodi:type="arc"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
id="path36438"
- sodipodi:cx="70.5"
- sodipodi:cy="14.5"
- sodipodi:rx="1.5"
- sodipodi:ry="1.5"
- d="M 72,14.5 A 1.5,1.5 0 0 1 70.5,16 1.5,1.5 0 0 1 69,14.5 1.5,1.5 0 0 1 70.5,13 1.5,1.5 0 0 1 72,14.5 Z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="70.5"
+ cy="14.5"
+ r="1.5" />
<rect
- style="opacity:0.3;fill:#acc373;fill-opacity:1;fill-rule:nonzero;stroke:#183c00;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:#acc373;fill-opacity:1;fill-rule:nonzero;stroke:#183c00;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect36440"
width="2.0000153"
height="2.0000069"
@@ -67628,7 +66775,7 @@
rx="0"
ry="0" />
<rect
- style="fill:#95e51f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.3499999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#95e51f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.3499999;marker:none;enable-background:accumulate"
id="rect36442"
width="2"
height="2"
@@ -67642,20 +66789,20 @@
<path
sodipodi:nodetypes="ccc"
id="path36446"
- d="m 96.5,159.5 0,-1 1,0"
- style="fill:none;stroke:url(#linearGradient36454);stroke-width:1.00000012;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 96.5,159.5 v -1 h 1"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient36454);stroke-width:1.00000012;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.9;fill:none;stroke:url(#linearGradient36456);stroke-width:1.00000012;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 90.499985,171.5 0,-1 1,0"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.9;fill:none;stroke:url(#linearGradient36456);stroke-width:1.00000012;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 90.499985,171.5 v -1 h 1"
id="path36448"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path36450"
- d="m 102.49999,171.5 0,-1 1,0"
- style="opacity:0.9;fill:none;stroke:url(#linearGradient36458);stroke-width:1.00000012;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 102.49999,171.5 v -1 h 1"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.9;fill:none;stroke:url(#linearGradient36458);stroke-width:1.00000012;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -67665,43 +66812,43 @@
id="ICON_LAMP_SPOT"
style="display:inline;enable-background:new">
<rect
- style="opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect35293"
width="16"
height="16"
x="-210"
y="-66"
- transform="scale(-1,-1)" />
+ transform="scale(-1)" />
<g
id="g35295"
transform="translate(22.999994,19)">
<path
inkscape:connector-curvature="0"
id="path35297"
- d="m 178.00001,33.5 -1.5,0 L 174,36 c -1.00699,1.006986 -0.0205,3.604505 2.1875,5.8125 2.208,2.207997 4.80551,3.194485 5.8125,2.1875 l 2.50001,-2.5 0,-1.5 -0.75,-1.75 -4,-4 -1.75,-0.75 z"
+ d="m 178.00001,33.5 h -1.5 L 174,36 c -1.00699,1.006986 -0.0205,3.604505 2.1875,5.8125 2.208,2.207997 4.80551,3.194485 5.8125,2.1875 l 2.50001,-2.5 V 40 l -0.75,-1.75 -4,-4 z"
style="fill:url(#linearGradient36648);fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:nodetypes="cccscccccc" />
<path
inkscape:connector-curvature="0"
id="path35299"
style="fill:url(#linearGradient36650);fill-rule:evenodd;stroke:none"
- d="m 186.50001,35.5 -2.75,2.75 -1,-1 -1,-1 -1,-1 -1,-1 2.75,-2.75 1.25,0 1.5,1.25 1.25,1.5 0,1.25 z"
+ d="m 186.50001,35.5 -2.75,2.75 -1,-1 -1,-1 -1,-1 -1,-1 2.75,-2.75 h 1.25 l 1.5,1.25 1.25,1.5 z"
sodipodi:nodetypes="ccccccccccc" />
<path
inkscape:connector-curvature="0"
id="path35301"
- d="m 182.50001,31.5 -2.75,2.75 -1.75,-0.75 -1.5,0 L 174,36 c -1.00699,1.006986 -0.0205,3.604505 2.1875,5.8125 2.208,2.207997 4.80551,3.194485 5.8125,2.1875 l 2.50001,-2.5 0,-1.5 -0.75,-1.75 2.75,-2.75 0,-1 -1.25,-1.75 -1.75,-1.25 -1,0 z"
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 182.50001,31.5 -2.75,2.75 -1.75,-0.75 h -1.5 L 174,36 c -1.00699,1.006986 -0.0205,3.604505 2.1875,5.8125 2.208,2.207997 4.80551,3.194485 5.8125,2.1875 l 2.50001,-2.5 V 40 l -0.75,-1.75 2.75,-2.75 v -1 l -1.25,-1.75 -1.75,-1.25 z"
+ style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="cccccsccccccccc" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccc"
- style="fill:none;stroke:url(#linearGradient36652);stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:url(#linearGradient36652);stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 174.75001,36.5 2.25,-2.25 1.5,0.25 1.5,0.75 1.5,1.25 1.25,1.5 0.75,1.5 0.25,1.5 -1.5,1.5"
id="path35303" />
<path
sodipodi:type="arc"
- style="fill:#d3c656;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74147779;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#d3c656;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74147779;marker:none;enable-background:accumulate"
id="path35305"
sodipodi:cx="181"
sodipodi:cy="35"
@@ -67712,33 +66859,31 @@
sodipodi:start="0"
sodipodi:end="6.2810509"
sodipodi:open="true" />
- <path
+ <ellipse
transform="matrix(0.9589476,-0.9192618,0.5776079,0.5780619,-15.42366,185.77921)"
- d="M 182.17638,35 A 1.1763829,5.5293522 0 0 1 181,40.529352 1.1763829,5.5293522 0 0 1 179.82362,35 1.1763829,5.5293522 0 0 1 181,29.470648 1.1763829,5.5293522 0 0 1 182.17638,35 Z"
- sodipodi:ry="5.5293522"
- sodipodi:rx="1.1763829"
- sodipodi:cy="35"
- sodipodi:cx="181"
id="path35307"
- style="fill:#f3eebb;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74147779;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#f3eebb;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74147779;marker:none;enable-background:accumulate"
+ cx="181"
+ cy="35"
+ rx="1.1763829"
+ ry="5.5293522" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="czs"
- style="opacity:0.8;fill:none;stroke:url(#linearGradient36654);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.8;fill:none;stroke:url(#linearGradient36654);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 182.25,43.75 C 182.25,42 182,41 179.5,38.5 177,36 175.75,35.75 174.25,35.75"
id="path35309" />
<path
inkscape:connector-curvature="0"
style="fill:none;stroke:url(#linearGradient36656);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
- d="m 180.50001,34.5 2,-2 1,0 1,1 1,1 0,1 -2,2"
+ d="m 180.50001,34.5 2,-2 h 1 l 1,1 1,1 v 1 l -2,2"
id="path35311"
sodipodi:nodetypes="ccccccc" />
<path
inkscape:connector-curvature="0"
id="path35313"
d="m 184.50001,41.5 c 0,-1.75 0,-3 -2.5,-5.5 -2.5,-2.5 -4,-2.5 -5.5,-2.5"
- style="fill:none;stroke:url(#linearGradient36658);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:url(#linearGradient36658);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="czs" />
</g>
<g
@@ -67750,22 +66895,22 @@
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc"
- style="fill:none;stroke:#2b2600;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
- d="m 174.5,40.5 0,3 3,0"
+ style="display:inline;fill:none;stroke:#2b2600;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="m 174.5,40.5 v 3 h 3"
id="path35319" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cz"
id="path35321"
- style="fill:none;stroke:#2b2600;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#2b2600;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
d="M 175.5,42.5 179,39" />
</g>
<g
- transform="matrix(-1,0,0,-1,383,116)"
+ transform="rotate(180,191.5,58)"
id="g35323">
<g
style="display:inline"
- transform="matrix(-1,0,0,-1,272.1613,155.99999)"
+ transform="rotate(180,136.08065,77.999995)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -67775,18 +66920,18 @@
d=""
sodipodi:nodetypes="cz"
id="path35327"
- style="fill:none;stroke:#f2f2f2;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#f2f2f2;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cz"
id="path35329"
- style="opacity:0.85;fill:none;stroke:#f4f1d7;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.85;fill:none;stroke:#f4f1d7;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 85.6613,103.49999 5,-5" />
</g>
<path
inkscape:connector-curvature="0"
- style="fill:#fffbd5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 188,51 0,4 -1,0 0,-3 -3,0 0,-1 4,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#fffbd5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;enable-background:accumulate"
+ d="m 188,51 v 4 h -1 v -3 h -3 v -1 z"
id="path35331"
sodipodi:nodetypes="ccccccc" />
<g
@@ -67795,15 +66940,15 @@
transform="matrix(-1,0,0,1,-29,-335)">
<path
inkscape:connector-curvature="0"
- style="fill:#b5a731;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -216,387 0,2 1,0 0,-1 1,0 0,-1 -2,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#b5a731;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
+ d="m -216,387 v 2 h 1 v -1 h 1 v -1 z"
id="path35335"
sodipodi:nodetypes="ccccccc" />
</g>
</g>
</g>
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate"
id="rect35337"
width="1.25"
height="1.25"
@@ -67815,9 +66960,9 @@
height="1.5"
width="1.5"
id="rect35339"
- style="opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate" />
<rect
- style="opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate"
id="rect35341"
width="1.5"
height="1.5"
@@ -67828,13 +66973,13 @@
id="ICON_LAMP_POINT"
transform="translate(0,-7e-6)">
<rect
- transform="scale(-1,-1)"
+ transform="scale(-1)"
y="-404"
x="-273"
height="16"
width="16"
id="rect35345"
- style="opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
mask="url(#mask31861)"
id="g35347"
@@ -67842,84 +66987,84 @@
style="opacity:0.65">
<g
id="g35349"
- transform="matrix(0,-1,1,0,104.00001,149.1613)"
+ transform="rotate(-90,126.58066,22.580645)"
style="stroke:#9e872a;stroke-opacity:1">
<path
inkscape:connector-curvature="0"
id="path35351"
- d="m 187.5,53.75 0,-2.25 -2,0"
- style="fill:none;stroke:#2b2600;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
+ d="M 187.5,53.75 V 51.5 h -2"
+ style="display:inline;fill:none;stroke:#2b2600;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
sodipodi:nodetypes="ccc"
- transform="matrix(0,1,-1,0,149.1613,-83.00001)" />
+ transform="rotate(90,116.08066,33.080645)" />
<path
inkscape:connector-curvature="0"
d="m 85.6613,103.49999 5.5,-5.5"
- style="fill:none;stroke:#2b2600;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#2b2600;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path35353"
sodipodi:nodetypes="cz"
- transform="matrix(0,-1,1,0,-6.83869,189.16129)" />
+ transform="rotate(-90,91.1613,97.99999)" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc"
- style="fill:none;stroke:#2b2600;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
- d="m 187.5,53.5 0,-2 -2,0"
+ style="display:inline;fill:none;stroke:#2b2600;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="m 187.5,53.5 v -2 h -2"
id="path35355"
- transform="matrix(0,-1,1,0,33.1613,278.99999)" />
+ transform="rotate(-90,156.08064,122.91935)" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cz"
id="path35357"
- style="fill:none;stroke:#2b2600;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#2b2600;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 85.6613,103.49999 5.5,-5.5"
- transform="matrix(0,1,-1,0,189.16129,6.83869)" />
+ transform="rotate(90,91.1613,97.99999)" />
<path
inkscape:connector-curvature="0"
id="path35359"
- d="m 187.5,53.5 0,-2 -2,0"
- style="fill:none;stroke:#2b2600;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
+ d="m 187.5,53.5 v -2 h -2"
+ style="display:inline;fill:none;stroke:#2b2600;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
sodipodi:nodetypes="ccc"
transform="translate(-89.8387,39.99999)" />
<path
inkscape:connector-curvature="0"
d="m 85.6613,103.49999 5.5,-5.5"
- style="fill:none;stroke:#2b2600;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#2b2600;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path35361"
sodipodi:nodetypes="cz"
- transform="matrix(-1,0,0,-1,182.3226,195.99998)" />
+ transform="rotate(180,91.1613,97.99999)" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc"
- style="fill:none;stroke:#2b2600;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
- d="m 187.5,53.5 0,-2 -2,0"
+ style="display:inline;fill:none;stroke:#2b2600;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="m 187.5,53.5 v -2 h -2"
id="path35363"
- transform="matrix(-1,0,0,-1,272.1613,155.99999)" />
+ transform="rotate(180,136.08065,77.999995)" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cz"
id="path35365"
- style="fill:none;stroke:#2b2600;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#2b2600;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 85.6613,103.49999 5.5,-5.5" />
</g>
<g
id="g35367"
- transform="translate(21,0)">
+ transform="translate(21)">
<g
id="g35369"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(-1,0,0,-1,272.1613,155.99999)"
+ transform="rotate(180,136.08065,77.999995)"
style="display:inline">
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:#f2f2f2;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#f2f2f2;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path35371"
sodipodi:nodetypes="cz"
d="" />
<path
inkscape:connector-curvature="0"
d="m 85.6613,103.49999 5.5,-5.5"
- style="opacity:0.85;fill:none;stroke:#f4f1d7;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.85;fill:none;stroke:#f4f1d7;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path35373"
sodipodi:nodetypes="cz" />
</g>
@@ -67927,8 +67072,8 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
id="path35375"
- d="m 188,51 0,3 -1,0 0,-2 -2,0 0,-1 3,0 z"
- style="fill:#fffbd5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m 188,51 v 3 h -1 v -2 h -2 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#fffbd5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;enable-background:accumulate" />
<g
transform="matrix(-1,0,0,1,-29,-335)"
style="opacity:0.3"
@@ -67937,16 +67082,16 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
id="path35379"
- d="m -216,387 0,2 1,0 0,-1 1,0 0,-1 -2,0 z"
- style="fill:#2b2600;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m -216,387 v 2 h 1 v -1 h 1 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#2b2600;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
</g>
</g>
<g
- transform="matrix(-1,0,0,-1,383,116)"
+ transform="rotate(180,191.5,58)"
id="g35381">
<g
style="display:inline"
- transform="matrix(-1,0,0,-1,272.1613,155.99999)"
+ transform="rotate(180,136.08065,77.999995)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -67956,18 +67101,18 @@
d=""
sodipodi:nodetypes="cz"
id="path35385"
- style="fill:none;stroke:#f2f2f2;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#f2f2f2;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cz"
id="path35387"
- style="opacity:0.85;fill:none;stroke:#f4f1d7;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.85;fill:none;stroke:#f4f1d7;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 85.6613,103.49999 5.5,-5.5" />
</g>
<path
inkscape:connector-curvature="0"
- style="fill:#fffbd5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 188,51 0,3 -1,0 0,-2 -2,0 0,-1 3,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#fffbd5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;enable-background:accumulate"
+ d="m 188,51 v 3 h -1 v -2 h -2 v -1 z"
id="path35391"
sodipodi:nodetypes="ccccccc" />
<g
@@ -67976,8 +67121,8 @@
transform="matrix(-1,0,0,1,-29,-335)">
<path
inkscape:connector-curvature="0"
- style="fill:#2b2600;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -216,387 0,2 1,0 0,-1 1,0 0,-1 -2,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#2b2600;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
+ d="m -216,387 v 2 h 1 v -1 h 1 v -1 z"
id="path35395"
sodipodi:nodetypes="ccccccc" />
</g>
@@ -67986,24 +67131,24 @@
id="g35398"
inkscape:transform-center-x="3.125"
inkscape:transform-center-y="-3.125"
- transform="matrix(0,-1,1,0,144,239)">
+ transform="rotate(-90,191.5,47.5)">
<g
id="g35400"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(-1,0,0,-1,272.1613,155.99999)"
+ transform="rotate(180,136.08065,77.999995)"
style="display:inline">
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:#f2f2f2;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#f2f2f2;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path35405"
sodipodi:nodetypes="cz"
d="" />
<path
inkscape:connector-curvature="0"
d="m 85.6613,103.49999 5.5,-5.5"
- style="opacity:0.85;fill:none;stroke:#f4f1d7;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.85;fill:none;stroke:#f4f1d7;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path35407"
sodipodi:nodetypes="cz" />
</g>
@@ -68011,8 +67156,8 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
id="path35409"
- d="m 188,51 0,3 -1,0 0,-2 -2,0 0,-1 3,0 z"
- style="fill:#fffbd5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m 188,51 v 3 h -1 v -2 h -2 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#fffbd5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;enable-background:accumulate" />
<g
transform="matrix(-1,0,0,1,-29,-335)"
style="opacity:0.3"
@@ -68021,23 +67166,23 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
id="path35413"
- d="m -216,387 0,2 1,0 0,-1 1,0 0,-1 -2,0 z"
- style="fill:#2b2600;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m -216,387 v 2 h 1 v -1 h 1 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#2b2600;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
</g>
</g>
<g
id="g35415"
- transform="translate(-16,0)">
+ transform="translate(-16)">
<path
inkscape:connector-curvature="0"
d="M 223.5,63.5 218,58"
- style="opacity:0.85;fill:none;stroke:#f4f1d7;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.85;fill:none;stroke:#f4f1d7;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path35417"
sodipodi:nodetypes="cz" />
<path
inkscape:connector-curvature="0"
- style="fill:#fffbd5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 225,65 -3,0 0,-1 2,0 0,-2 1,0 0,3 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#fffbd5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;enable-background:accumulate"
+ d="m 225,65 h -3 v -1 h 2 v -2 h 1 z"
id="path35420"
sodipodi:nodetypes="ccccccc" />
<g
@@ -68046,8 +67191,8 @@
transform="matrix(0,-1,-1,0,611,-152)">
<path
inkscape:connector-curvature="0"
- style="fill:#2b2600;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -216,387 0,2 1,0 0,-1 1,0 0,-1 -2,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#2b2600;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
+ d="m -216,387 v 2 h 1 v -1 h 1 v -1 z"
id="path35424"
sodipodi:nodetypes="ccccccc" />
</g>
@@ -68060,50 +67205,38 @@
<g
id="g35429"
transform="translate(-340.00002,-121.00001)">
- <path
+ <circle
transform="matrix(1.9999998,0,0,2.0000014,-462.99991,-192.00026)"
- d="m 466.25,192.5 a 1.75,1.75 0 0 1 -1.75,1.75 1.75,1.75 0 0 1 -1.75,-1.75 1.75,1.75 0 0 1 1.75,-1.75 1.75,1.75 0 0 1 1.75,1.75 z"
- sodipodi:ry="1.75"
- sodipodi:rx="1.75"
- sodipodi:cy="192.5"
- sodipodi:cx="464.5"
id="path35431"
- style="opacity:0.1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#e9ddaf;stroke-width:0.49999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="opacity:0.15;fill:#e1d18e;fill-opacity:1;fill-rule:nonzero;stroke:#fffc28;stroke-width:0.38888648;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#e9ddaf;stroke-width:0.49999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="464.5"
+ cy="192.5"
+ r="1.75" />
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.15;fill:#e1d18e;fill-opacity:1;fill-rule:nonzero;stroke:#fffc28;stroke-width:0.38888648;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path35433"
- sodipodi:cx="464.5"
- sodipodi:cy="192.5"
- sodipodi:rx="1.75"
- sodipodi:ry="1.75"
- d="m 466.25,192.5 a 1.75,1.75 0 0 1 -1.75,1.75 1.75,1.75 0 0 1 -1.75,-1.75 1.75,1.75 0 0 1 1.75,-1.75 1.75,1.75 0 0 1 1.75,1.75 z"
- transform="matrix(2.5714449,0,0,2.5714449,-728.43612,-302.00313)" />
- <path
+ transform="matrix(2.5714449,0,0,2.5714449,-728.43612,-302.00313)"
+ cx="464.5"
+ cy="192.5"
+ r="1.75" />
+ <circle
transform="matrix(1.9999748,0,0,1.9999748,-462.98824,-191.99513)"
- d="m 466.25,192.5 a 1.75,1.75 0 0 1 -1.75,1.75 1.75,1.75 0 0 1 -1.75,-1.75 1.75,1.75 0 0 1 1.75,-1.75 1.75,1.75 0 0 1 1.75,1.75 z"
- sodipodi:ry="1.75"
- sodipodi:rx="1.75"
- sodipodi:cy="192.5"
- sodipodi:cx="464.5"
id="path35437"
- style="opacity:0.3;fill:#e1d98e;fill-opacity:1;fill-rule:nonzero;stroke:#f0d700;stroke-width:0.50000638;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:#e1d98e;fill-opacity:1;fill-rule:nonzero;stroke:#f0d700;stroke-width:0.50000638;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="464.5"
+ cy="192.5"
+ r="1.75" />
+ <circle
transform="matrix(1.428566,0,0,1.428566,-197.56891,-81.998957)"
- d="m 466.25,192.5 a 1.75,1.75 0 0 1 -1.75,1.75 1.75,1.75 0 0 1 -1.75,-1.75 1.75,1.75 0 0 1 1.75,-1.75 1.75,1.75 0 0 1 1.75,1.75 z"
- sodipodi:ry="1.75"
- sodipodi:rx="1.75"
- sodipodi:cy="192.5"
- sodipodi:cx="464.5"
id="path35439"
- style="fill:#fbf7e5;fill-opacity:1;fill-rule:nonzero;stroke:#474213;stroke-width:0.63000238;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#fbf7e5;fill-opacity:1;fill-rule:nonzero;stroke:#474213;stroke-width:0.63000238;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="464.5"
+ cy="192.5"
+ r="1.75" />
</g>
</g>
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect35441"
width="2"
height="2"
@@ -68115,7 +67248,7 @@
id="ICON_LAMP_SUN"
style="display:inline;enable-background:new">
<rect
- style="opacity:0;fill:#ffe680;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.60000002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ffe680;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.60000002;marker:none;enable-background:accumulate"
id="rect35445"
width="16"
height="16"
@@ -68125,42 +67258,33 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccccccccccccccccccccccc"
id="path35447"
- d="m 144.5,63.5 -1,0 -2.5,-1 -1.5,3 -1,0 -1.5,-3 -2.5,1 -1,10e-7 0,-1.000001 1,-2.5 -3,-1.5 0,-1 3,-1.5 -1,-2.5 0,-1 1,0 2.5,1 1.5,-3 1,0 1.5,3 2.5,-1 1,0 0,1 -1,2.5 3,1.5 0,1 -3,1.5 1,2.5 0,1 z"
- style="opacity:0.85;fill:#f5efb2;fill-opacity:0.58823529;fill-rule:nonzero;stroke:#38330e;stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m 144.5,63.5 h -1 l -2.5,-1 -1.5,3 h -1 l -1.5,-3 -2.5,1 -1,10e-7 V 62.5 l 1,-2.5 -3,-1.5 v -1 l 3,-1.5 -1,-2.5 v -1 h 1 l 2.5,1 1.5,-3 h 1 l 1.5,3 2.5,-1 h 1 v 1 l -1,2.5 3,1.5 v 1 l -3,1.5 1,2.5 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.85;fill:#f5efb2;fill-opacity:0.58823529;fill-rule:nonzero;stroke:#38330e;stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<g
id="g35449">
- <path
- sodipodi:type="arc"
- style="opacity:0.1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#e9ddaf;stroke-width:0.49999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#e9ddaf;stroke-width:0.49999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path35451"
- sodipodi:cx="464.5"
- sodipodi:cy="192.5"
- sodipodi:rx="1.75"
- sodipodi:ry="1.75"
- d="m 466.25,192.5 a 1.75,1.75 0 0 1 -1.75,1.75 1.75,1.75 0 0 1 -1.75,-1.75 1.75,1.75 0 0 1 1.75,-1.75 1.75,1.75 0 0 1 1.75,1.75 z"
- transform="matrix(1.9999998,0,0,2.0000014,-790.00001,-327.00035)" />
- <path
+ transform="matrix(1.9999998,0,0,2.0000014,-790.00001,-327.00035)"
+ cx="464.5"
+ cy="192.5"
+ r="1.75" />
+ <circle
transform="matrix(2.5714622,0,0,2.5714622,-1055.4442,-437.00638)"
- d="m 466.25,192.5 a 1.75,1.75 0 0 1 -1.75,1.75 1.75,1.75 0 0 1 -1.75,-1.75 1.75,1.75 0 0 1 1.75,-1.75 1.75,1.75 0 0 1 1.75,1.75 z"
- sodipodi:ry="1.75"
- sodipodi:rx="1.75"
- sodipodi:cy="192.5"
- sodipodi:cx="464.5"
id="path35453"
- style="opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#fff6d5;stroke-width:0.38888386;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#fff6d5;stroke-width:0.38888386;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="464.5"
+ cy="192.5"
+ r="1.75" />
+ <circle
transform="matrix(2.0000089,0,0,2.0000089,-790.00413,-327.00163)"
- d="m 466.25,192.5 a 1.75,1.75 0 0 1 -1.75,1.75 1.75,1.75 0 0 1 -1.75,-1.75 1.75,1.75 0 0 1 1.75,-1.75 1.75,1.75 0 0 1 1.75,1.75 z"
- sodipodi:ry="1.75"
- sodipodi:rx="1.75"
- sodipodi:cy="192.5"
- sodipodi:cx="464.5"
id="path35455"
- style="fill:#b5a51f;fill-opacity:1;fill-rule:nonzero;stroke:#463f00;stroke-width:0.39999822;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#b5a51f;fill-opacity:1;fill-rule:nonzero;stroke:#463f00;stroke-width:0.39999822;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="464.5"
+ cy="192.5"
+ r="1.75" />
<rect
- style="opacity:0.9;fill:#ffed55;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.9;fill:#ffed55;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect35457"
width="5"
height="5"
@@ -68176,14 +67300,14 @@
height="3.75"
width="3.75"
id="rect35459"
- style="opacity:0.9;fill:#fbfaef;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.9;fill:#fbfaef;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
y="56"
x="137"
height="2"
width="2"
id="rect35461"
- style="opacity:0.9;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.9;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
</g>
</g>
<g
@@ -68196,42 +67320,33 @@
height="16"
width="16"
id="rect35465"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g35467"
transform="matrix(1.6519496,0,0,1.6519309,-230.47015,-63.200317)"
- style="opacity:0.25;display:inline;filter:url(#filter30564);enable-background:new"
+ style="display:inline;opacity:0.25;filter:url(#filter30564);enable-background:new"
clip-path="url(#clipPath31849)">
- <path
- sodipodi:type="arc"
- style="opacity:0.1;fill:#e1d18e;fill-opacity:1;fill-rule:nonzero;stroke:#fff6aa;stroke-width:0.26988116;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:#e1d18e;fill-opacity:1;fill-rule:nonzero;stroke:#fff6aa;stroke-width:0.26988116;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path35469"
- sodipodi:cx="464.5"
- sodipodi:cy="192.5"
- sodipodi:rx="1.75"
- sodipodi:ry="1.75"
- d="m 466.25,192.5 a 1.75,1.75 0 0 1 -1.75,1.75 1.75,1.75 0 0 1 -1.75,-1.75 1.75,1.75 0 0 1 1.75,-1.75 1.75,1.75 0 0 1 1.75,1.75 z"
- transform="matrix(2.2376043,0,0,2.2484492,-801.20081,-335.84886)" />
- <path
+ transform="matrix(2.2376043,0,0,2.2484492,-801.20081,-335.84886)"
+ cx="464.5"
+ cy="192.5"
+ r="1.75" />
+ <circle
transform="matrix(1.9004611,0,0,1.899214,-644.62036,-268.6269)"
- d="m 466.25,192.5 a 1.75,1.75 0 0 1 -1.75,1.75 1.75,1.75 0 0 1 -1.75,-1.75 1.75,1.75 0 0 1 1.75,-1.75 1.75,1.75 0 0 1 1.75,1.75 z"
- sodipodi:ry="1.75"
- sodipodi:rx="1.75"
- sodipodi:cy="192.5"
- sodipodi:cx="464.5"
id="path35471"
- style="opacity:0.25;fill:#e1d18e;fill-opacity:1;fill-rule:nonzero;stroke:#ffe400;stroke-width:0.31863192;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:#e1d18e;fill-opacity:1;fill-rule:nonzero;stroke:#ffe400;stroke-width:0.31863192;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="464.5"
+ cy="192.5"
+ r="1.75" />
+ <circle
transform="matrix(1.5591172,0,0,1.559203,-486.06699,-203.16445)"
- d="m 466.25,192.5 a 1.75,1.75 0 0 1 -1.75,1.75 1.75,1.75 0 0 1 -1.75,-1.75 1.75,1.75 0 0 1 1.75,-1.75 1.75,1.75 0 0 1 1.75,1.75 z"
- sodipodi:ry="1.75"
- sodipodi:rx="1.75"
- sodipodi:cy="192.5"
- sodipodi:cx="464.5"
id="path35473"
- style="fill:#ffeeaa;fill-opacity:1;fill-rule:nonzero;stroke:#b4b200;stroke-width:0.38825312;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffeeaa;fill-opacity:1;fill-rule:nonzero;stroke:#b4b200;stroke-width:0.38825312;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="464.5"
+ cy="192.5"
+ r="1.75" />
</g>
<g
id="g35477"
@@ -68242,27 +67357,27 @@
<path
inkscape:connector-curvature="0"
id="path35482"
- d="m 219.5,102 0,4.5"
- style="fill:none;stroke:#2b2600;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 219.5,102 v 4.5"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#2b2600;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cc" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc"
id="path35484"
d="m 221.75,105.25 -2.25,2.25 -2.25,-2.25"
- style="fill:none;stroke:#2b2600;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#2b2600;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate" />
</g>
<g
id="g35486">
<path
inkscape:connector-curvature="0"
- style="opacity:0.85;fill:none;stroke:#f4f1d7;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 219.5,101.5 0,5.5"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.85;fill:none;stroke:#f4f1d7;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 219.5,101.5 V 107"
id="path35488"
sodipodi:nodetypes="cc" />
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:#ffffd5;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#ffffd5;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 221.75,105.25 -2.25,2.25 -2.25,-2.25"
id="path35490"
sodipodi:nodetypes="ccc" />
@@ -68271,18 +67386,18 @@
<g
style="opacity:0.6"
id="g35493"
- transform="matrix(0,1,-1,0,261,-124)">
+ transform="rotate(90,192.5,68.5)">
<g
id="g35496">
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
- style="fill:none;stroke:#2b2600;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 219.5,102 0,4.5"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#2b2600;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 219.5,102 v 4.5"
id="path35498" />
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:#2b2600;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#2b2600;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 221.75,105.25 -2.25,2.25 -2.25,-2.25"
id="path35500"
sodipodi:nodetypes="ccc" />
@@ -68293,19 +67408,19 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
id="path35504"
- d="m 219.5,101.5 0,5.5"
- style="opacity:0.85;fill:none;stroke:#f4f1d7;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="M 219.5,101.5 V 107"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.85;fill:none;stroke:#f4f1d7;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc"
id="path35506"
d="m 221.75,105.25 -2.25,2.25 -2.25,-2.25"
- style="fill:none;stroke:#ffffd5;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ style="fill:none;stroke:#ffffd5;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</g>
<g
id="g35508"
- style="opacity:0.65;display:inline;enable-background:new"
+ style="display:inline;opacity:0.65;enable-background:new"
transform="translate(-41,41)">
<g
id="g35510"
@@ -68313,22 +67428,22 @@
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc"
- style="fill:none;stroke:#2b2600;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
- d="m 174.5,40.5 0,3 3,0"
+ style="display:inline;fill:none;stroke:#2b2600;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="m 174.5,40.5 v 3 h 3"
id="path35512" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cz"
id="path35514"
- style="fill:none;stroke:#2b2600;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#2b2600;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 175.5,42.5 5.75,-5.75" />
</g>
<g
- transform="matrix(-1,0,0,-1,383,116)"
+ transform="rotate(180,191.5,58)"
id="g35516">
<g
style="display:inline"
- transform="matrix(-1,0,0,-1,272.1613,155.99999)"
+ transform="rotate(180,136.08065,77.999995)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -68338,18 +67453,18 @@
d=""
sodipodi:nodetypes="cz"
id="path35520"
- style="fill:none;stroke:#f2f2f2;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#f2f2f2;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cz"
id="path35522"
- style="opacity:0.85;fill:none;stroke:#f4f1d7;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.85;fill:none;stroke:#f4f1d7;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 85.6613,103.49999 6.25,-6.25" />
</g>
<path
inkscape:connector-curvature="0"
- style="fill:#fffbd5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 188,51 0,4 -1,0 0,-3 -3,0 0,-1 4,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#fffbd5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;enable-background:accumulate"
+ d="m 188,51 v 4 h -1 v -3 h -3 v -1 z"
id="path35524"
sodipodi:nodetypes="ccccccc" />
<g
@@ -68358,8 +67473,8 @@
transform="matrix(-1,0,0,1,-29,-335)">
<path
inkscape:connector-curvature="0"
- style="fill:#b5a731;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -216,387 0,2 1,0 0,-1 1,0 0,-1 -2,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#b5a731;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
+ d="m -216,387 v 2 h 1 v -1 h 1 v -1 z"
id="path35528"
sodipodi:nodetypes="ccccccc" />
</g>
@@ -68370,10 +67485,10 @@
sodipodi:nodetypes="cc"
id="path35530"
d="m 161.5,95.5 3,3"
- style="opacity:0.15;fill:#e1d18e;fill-opacity:1;fill-rule:nonzero;stroke:#ffeeaa;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter30556);enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.15;fill:#e1d18e;fill-opacity:1;fill-rule:nonzero;stroke:#ffeeaa;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;filter:url(#filter30556);enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
- style="opacity:0.25;fill:#ffdd55;fill-opacity:1;fill-rule:nonzero;stroke:#ffed55;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter30552);enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:#ffdd55;fill-opacity:1;fill-rule:nonzero;stroke:#ffed55;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;filter:url(#filter30552);enable-background:accumulate"
d="m 161.5,94.5 4,4"
id="path35532"
sodipodi:nodetypes="cc" />
@@ -68382,10 +67497,10 @@
sodipodi:nodetypes="cc"
id="path35534"
d="m 161.5,93.5 5,5"
- style="fill:none;stroke:#5a5310;stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#5a5310;stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#fbf7e5;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#fbf7e5;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 161.5,93.5 5,5"
id="path35536"
sodipodi:nodetypes="cc" />
@@ -68395,7 +67510,7 @@
id="ICON_LAMP_HEMI"
style="display:inline;enable-background:new">
<rect
- style="opacity:0.01000001;fill:#333333;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#333333;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect35540"
width="16"
height="16"
@@ -68406,13 +67521,13 @@
transform="translate(-21,21.000005)">
<path
inkscape:connector-curvature="0"
- style="opacity:0.12000002;fill:#fff6aa;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter30544);enable-background:accumulate"
- d="m 177,94.75 c 0,0 -0.47556,3.774441 2.5,6.75 2.97556,2.97556 7,2.5 7,2.5 3.44436,-0.63991 2.99995,-3.42845 0.0937,-4.5 -1.83387,-3.557342 -2.66053,-4.290113 -5.09375,-5.09375 -0.64623,-3.372957 -3.91818,-2.771894 -4.5,0.34375 l 5e-5,0 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.12000002;fill:#fff6aa;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5;marker:none;filter:url(#filter30544);enable-background:accumulate"
+ d="m 177,94.75 c 0,0 -0.47556,3.774441 2.5,6.75 2.97556,2.97556 7,2.5 7,2.5 3.44436,-0.63991 2.99995,-3.42845 0.0937,-4.5 -1.83387,-3.557342 -2.66053,-4.290113 -5.09375,-5.09375 -0.64623,-3.372957 -3.91818,-2.771894 -4.5,0.34375 z"
id="path35544"
sodipodi:nodetypes="cscccc" />
<path
inkscape:connector-curvature="0"
- style="opacity:0.17000002;fill:#ffed55;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter30580);enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.17000002;fill:#ffed55;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;filter:url(#filter30580);enable-background:accumulate"
d="m 179.15625,93.71875 c 0,0 -0.3702,1.0264 -0.21875,2.1875 0.15145,1.1611 0.76936,2.613109 2.15625,4 1.38689,1.38689 2.8389,2.0048 4,2.15625 1.1611,0.15145 2.1875,-0.21875 2.1875,-0.21875 1.01828,-0.43147 1.49397,-1.60672 1.0625,-2.625 l -5.65501,-5.846474 c -1.32148,-1.409979 -2.40864,-0.889298 -3.53249,0.346474 z"
id="path35546"
sodipodi:nodetypes="cssscccc" />
@@ -68421,11 +67536,11 @@
sodipodi:nodetypes="cssscccc"
id="path35548"
d="m 179.15625,93.71875 c 0,0 -0.3702,1.0264 -0.21875,2.1875 0.15145,1.1611 0.76936,2.613109 2.15625,4 1.38689,1.38689 2.8389,2.0048 4,2.15625 1.1611,0.15145 2.1875,-0.21875 2.1875,-0.21875 1.01828,-0.43147 1.49397,-1.60672 1.0625,-2.625 l -5.65501,-5.846474 c -1.32148,-1.409979 -2.40864,-0.889298 -3.53249,0.346474 z"
- style="opacity:0.18000004;fill:#fff6aa;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter30580);enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.18000004;fill:#fff6aa;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;filter:url(#filter30580);enable-background:accumulate"
transform="matrix(0.5121167,0,0,0.5121167,89.625148,47.477443)" />
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:#5a5310;stroke-width:3.0999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#5a5310;stroke-width:3.0999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 176.5,93.5 c 0,0 5.75,-0.25 8.5,2.5 2.75,2.75 2.5,8.5 2.5,8.5"
id="path35550"
sodipodi:nodetypes="czs" />
@@ -68434,11 +67549,11 @@
sodipodi:nodetypes="czs"
id="path35552"
d="m 176.5,93.5 c 0,0 5.75,-0.25 8.5,2.5 3,3 2.5,8.5 2.5,8.5"
- style="fill:none;stroke:#fbf7e5;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#fbf7e5;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
</g>
<g
id="g35554"
- style="opacity:0.65;display:inline;enable-background:new"
+ style="display:inline;opacity:0.65;enable-background:new"
transform="translate(-42,63.000005)">
<g
id="g35556"
@@ -68446,22 +67561,22 @@
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc"
- style="fill:none;stroke:#2b2600;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
- d="m 174.5,40.5 0,3 3,0"
+ style="display:inline;fill:none;stroke:#2b2600;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="m 174.5,40.5 v 3 h 3"
id="path35558" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cz"
id="path35561"
- style="fill:none;stroke:#2b2600;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#2b2600;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 175.5,42.5 6.25,-6.25" />
</g>
<g
- transform="matrix(-1,0,0,-1,383,116)"
+ transform="rotate(180,191.5,58)"
id="g35563">
<g
style="display:inline"
- transform="matrix(-1,0,0,-1,272.1613,155.99999)"
+ transform="rotate(180,136.08065,77.999995)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -68471,18 +67586,18 @@
d=""
sodipodi:nodetypes="cz"
id="path35568"
- style="fill:none;stroke:#f2f2f2;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#f2f2f2;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cz"
id="path35570"
- style="opacity:0.85;fill:none;stroke:#f4f1d7;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.85;fill:none;stroke:#f4f1d7;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 85.6613,103.49999 7,-7" />
</g>
<path
inkscape:connector-curvature="0"
- style="fill:#fffbd5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 188,51 0,4 -1,0 0,-3 -3,0 0,-1 4,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#fffbd5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;enable-background:accumulate"
+ d="m 188,51 v 4 h -1 v -3 h -3 v -1 z"
id="path35572"
sodipodi:nodetypes="ccccccc" />
<g
@@ -68491,8 +67606,8 @@
transform="matrix(-1,0,0,1,-29,-335)">
<path
inkscape:connector-curvature="0"
- style="fill:#b5a731;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -216,387 0,2 1,0 0,-1 1,0 0,-1 -2,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#b5a731;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
+ d="m -216,387 v 2 h 1 v -1 h 1 v -1 z"
id="path35576"
sodipodi:nodetypes="ccccccc" />
</g>
@@ -68511,12 +67626,12 @@
<path
sodipodi:nodetypes="ccccc"
id="path36215"
- d="m 90.45451,103.98095 0,7 7.00045,0.0368 0,-7 -7.00045,-0.0368 z"
- style="opacity:0.8;fill:none;stroke:#333333;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 90.45451,103.98095 v 7 l 7.00045,0.0368 v -7 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.8;fill:none;stroke:#333333;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:#cccccc;fill-opacity:0.15686275;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 90.45451,103.98095 4.5e-4,7.03677 7,0 -4.5e-4,-7.03677 -7,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#cccccc;fill-opacity:0.15686275;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 90.45451,103.98095 4.5e-4,7.03677 h 7 l -4.5e-4,-7.03677 z"
id="path36228"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
@@ -68529,9 +67644,9 @@
height="3"
width="2.9998772"
id="rect36230"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect36232"
width="2.9998772"
height="3"
@@ -68547,10 +67662,10 @@
height="3"
width="2.9998772"
id="rect36234"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- d="m 293.0003,127.99997 c -0.6694,0 -1.3388,10e-6 -2.0082,10e-6 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-1e-5 2.0082,-1e-5 0,-0.66939 0,-1.33878 0,-2.00817 l 0,0 0,0 0,0 z"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 293.0003,127.99997 c -0.6694,0 -1.3388,10e-6 -2.0082,10e-6 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-1e-5 2.0082,-1e-5 0,-0.66939 0,-1.33878 0,-2.00817 z"
id="path36237"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -68562,7 +67677,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path36239"
d="m 285.00045,128 c -0.6694,0 -1.3388,1e-5 -2.0082,1e-5 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-1e-5 2.0082,-1e-5 0,-0.66939 0,-1.33878 0,-2.00817 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
@@ -68570,10 +67685,10 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path36241"
d="m 285,120 c -0.6694,0 -1.3388,1e-5 -2.0082,1e-5 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-10e-6 2.0082,-10e-6 0,-0.66939 0,-1.33878 0,-2.00817 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<rect
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect36243"
width="2.9998772"
height="3"
@@ -68586,12 +67701,12 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path36245"
- d="m 293.00003,119.99997 c -0.6694,0 -1.3388,10e-6 -2.0082,10e-6 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-1e-5 2.0082,-1e-5 0,-0.66939 0,-1.33878 0,-2.00817 l 0,0 0,0 0,0 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ d="m 293.00003,119.99997 c -0.6694,0 -1.3388,10e-6 -2.0082,10e-6 0,0.66939 0,1.33877 0,2.00817 0.6694,0 1.3388,-1e-5 2.0082,-1e-5 0,-0.66939 0,-1.33878 0,-2.00817 z"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
</g>
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect36312"
width="16"
height="16"
@@ -68606,11 +67721,11 @@
height="9.9538488"
width="10.000013"
id="rect36316"
- style="fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
ry="0" />
<rect
ry="0"
- style="fill:url(#linearGradient36468);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00207269;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient36468);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00207269;marker:none;enable-background:accumulate"
id="rect36318"
width="9.0000706"
height="9.0003176"
@@ -68619,13 +67734,13 @@
<path
sodipodi:nodetypes="ccccccccccccccccccccccccc"
id="path36320"
- d="m 49,430 0,3 3,0 0,-3 -3,0 z m 3,3 0,3 3,0 0,-3 -3,0 z m 3,0 3,0 0,-3 -3,0 0,3 z m 3,3 -3,0 0,3 3,0 0,-3 z m -6,3 0,-3 -3,0 0,3 3,0 z"
- style="fill:url(#linearGradient36470);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 49,430 v 3 h 3 v -3 z m 3,3 v 3 h 3 v -3 z m 3,0 h 3 v -3 h -3 z m 3,3 h -3 v 3 h 3 z m -6,3 v -3 h -3 v 3 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient36470);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path36324"
- d="m 57.50001,430.49999 -8.000011,10e-6 1.1e-5,7.99999 8,0 -1.1e-5,-7.99999"
+ d="m 57.50001,430.49999 -8.000011,10e-6 1.1e-5,7.99999 h 8 L 57.499999,430.5"
style="fill:none;stroke:url(#linearGradient36472);stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
@@ -68635,25 +67750,25 @@
<g
transform="translate(69,-158)"
id="g35729"
- style="opacity:0.55;display:inline">
+ style="display:inline;opacity:0.55">
<rect
y="336"
x="-64"
height="16"
width="16"
id="rect35731"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g35733"
- transform="translate(1,0)">
+ transform="translate(1)">
<g
id="g35735"
transform="translate(-386,446.5)">
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
- style="fill:#552200;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 329.5,-108.25 -5.5,2 0,6.75 5.5,3 5.5,-3 0,-6.75 -5.5,-2 z"
+ style="fill:#552200;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 329.5,-108.25 -5.5,2 v 6.75 l 5.5,3 5.5,-3 v -6.75 z"
id="path35737" />
<path
inkscape:connector-curvature="0"
@@ -68661,8 +67776,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
id="path35739"
- d="m 324,-99.5 0,-7 6,-1.75 0,11.5 -0.5,0.25 -5.5,-3 z"
- style="fill:#c9c9c9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06898749px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 324,-99.5 v -7 l 6,-1.75 v 11.5 l -0.5,0.25 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#c9c9c9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06898749px;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cccccc" />
<g
id="g35741"
@@ -68671,15 +67786,15 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc"
id="path35743"
- d="m 156,79.5 0,-7 -5,-1.75 0,11.5 5,-2.75 z"
- style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89401144px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 156,79.5 v -7 l -5,-1.75 v 11.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89401144px;marker:none;enable-background:accumulate"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<path
inkscape:connector-curvature="0"
id="path35745"
- d="m 145,72.5 5.5,-2 5.5,2 -5.5,2.5 -5.5,-2.5 z"
+ d="m 145,72.5 5.5,-2 5.5,2 -5.5,2.5 z"
style="fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:nodetypes="ccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
@@ -68690,7 +67805,7 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc"
id="path35747"
- d="m 334.5,-106.5 0,6.75 -5,2.75 -5,-2.75 0,-6.75"
+ d="m 334.5,-106.5 v 6.75 l -5,2.75 -5,-2.75 v -6.75"
style="fill:none;stroke:url(#linearGradient36713);stroke-width:0.99999982px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<rect
@@ -68699,17 +67814,17 @@
height="7.75"
width="1"
id="rect35749"
- style="fill:url(#linearGradient36715);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient36715);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc"
id="path35751"
d="m -61,340.65468 c 0,0 4.5,2 4.5,2 l 4.5,-2"
- style="fill:none;stroke:url(#linearGradient36717);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ style="fill:none;stroke:url(#linearGradient36717);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</g>
<rect
- style="opacity:0.12000002;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.12000002;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37868-0"
width="3.9785564"
height="4"
@@ -68720,8 +67835,8 @@
<path
inkscape:connector-curvature="0"
id="path35805"
- d="m 8.0048608,180.50566 0.036785,0 c 0.8181814,0 1.476865,0.66665 1.476865,1.49473 l 0,1.2e-4 c 0,0.82808 -0.6586836,1.49472 -1.476865,1.49472 l -0.036785,0 c -0.8181897,0 -1.4768733,-0.66664 -1.4768733,-1.49472 l 0,-1.2e-4 c 0,-0.82808 0.6586836,-1.49473 1.4768733,-1.49473 z"
- style="fill:none;stroke:#542b00;stroke-width:1.495;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m 8.0048608,180.50566 h 0.036785 c 0.8181814,0 1.476865,0.66665 1.476865,1.49473 v 1.2e-4 c 0,0.82808 -0.6586836,1.49472 -1.476865,1.49472 h -0.036785 c -0.8181897,0 -1.4768733,-0.66664 -1.4768733,-1.49472 v -1.2e-4 c 0,-0.82808 0.6586836,-1.49473 1.4768733,-1.49473 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#542b00;stroke-width:1.495;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
inkscape:export-ydpi="90"
@@ -68729,24 +67844,24 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path35807"
d="m 9.0203881,181.00394 c -0.6673195,0 -1.334639,1e-5 -2.0019585,1e-5 0,0.66706 0,1.33411 0,2.00119 0.6673195,0 1.334639,-1e-5 2.0019585,-1e-5 0,-0.66707 0,-1.33413 0,-2.00119 z"
- style="fill:#ffc17d;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline" />
+ style="display:inline;fill:#ffc17d;fill-opacity:1;fill-rule:nonzero;stroke:none" />
</g>
</g>
<g
id="ICON_EDGESEL">
<g
- style="opacity:0.55;display:inline"
+ style="display:inline;opacity:0.55"
id="g35753"
transform="translate(90,-158)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect35755"
width="16"
height="16"
x="-64"
y="336" />
<g
- transform="translate(1,0)"
+ transform="translate(1)"
id="g35757">
<g
transform="translate(-386,446.5)"
@@ -68754,14 +67869,14 @@
<path
inkscape:connector-curvature="0"
id="path35761"
- d="m 329.5,-108.25 -5.5,2 0,6.75 5.5,3 5.5,-3 0,-6.75 -5.5,-2 z"
- style="fill:#552200;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 329.5,-108.25 -5.5,2 v 6.75 l 5.5,3 5.5,-3 v -6.75 z"
+ style="fill:#552200;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="ccccccc" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc"
- style="fill:#c9c9c9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06898749px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 324,-99.5 0,-7 6,-1.75 0,11.5 -0.5,0.25 -5.5,-3 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#c9c9c9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06898749px;marker:none;enable-background:accumulate"
+ d="m 324,-99.5 v -7 l 6,-1.75 v 11.5 l -0.5,0.25 z"
id="path35763"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -68774,8 +67889,8 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
- style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89401144px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 156,79.5 0,-7 -5,-1.75 0,11.5 5,-2.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89401144px;marker:none;enable-background:accumulate"
+ d="m 156,79.5 v -7 l -5,-1.75 v 11.5 z"
id="path35767"
sodipodi:nodetypes="ccccc" />
<path
@@ -68785,18 +67900,18 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
sodipodi:nodetypes="ccccc"
style="fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 145,72.5 5.5,-2 5.5,2 -5.5,2.5 -5.5,-2.5 z"
+ d="m 145,72.5 5.5,-2 5.5,2 -5.5,2.5 z"
id="path35769" />
</g>
<path
inkscape:connector-curvature="0"
style="fill:none;stroke:url(#linearGradient36719);stroke-width:0.99999982px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 334.5,-106.5 0,6.75 -5,2.75 -5,-2.75 0,-6.75"
+ d="m 334.5,-106.5 v 6.75 l -5,2.75 -5,-2.75 v -6.75"
id="path35772"
sodipodi:nodetypes="ccccc" />
</g>
<rect
- style="fill:url(#linearGradient36721);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient36721);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
id="rect35774"
width="1"
height="7.75"
@@ -68804,14 +67919,14 @@
y="342" />
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:url(#linearGradient36723);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:url(#linearGradient36723);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m -61,340.65468 c 0,0 4.5,2 4.5,2 l 4.5,-2"
id="path35776"
sodipodi:nodetypes="ccc" />
</g>
</g>
<rect
- style="opacity:0.12000002;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.12000002;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37868-0-4"
width="3.0000007"
height="8"
@@ -68821,13 +67936,13 @@
transform="translate(65.984093,-55.50004)"
id="g35809">
<rect
- transform="matrix(1,2.1226448e-5,0,1,0,0)"
+ transform="skewY(0.00121619)"
y="237.00038"
x="-38.454918"
height="8.0116062"
width="1.9820247"
id="rect35811"
- style="fill:none;stroke:#542b00;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.90196078;stroke-dasharray:none;stroke-dashoffset:7.40000265;display:inline"
+ style="display:inline;fill:none;stroke:#542b00;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:0.90196078"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
@@ -68835,17 +67950,17 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- style="fill:#ffc17d;fill-opacity:1;fill-rule:nonzero;display:inline"
+ style="display:inline;fill:#ffc17d;fill-opacity:1;fill-rule:nonzero"
id="rect35814"
width="0.99999994"
height="7.0000257"
x="-37.984093"
y="237.50137"
- transform="matrix(1,3.6759233e-5,0,1,0,0)" />
+ transform="skewY(0.00210615)" />
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:#462400;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:7.40000265;display:inline"
- d="m -37.5,245 -0.9549,0.0112 0,-8.01161 1.982,4e-5"
+ style="display:inline;fill:none;stroke:#462400;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:7.40000248;stroke-opacity:1"
+ d="m -37.5,245 -0.9549,0.0112 v -8.01161 l 1.982,4e-5"
id="path35816"
sodipodi:nodetypes="cccc" />
</g>
@@ -68855,25 +67970,25 @@
<g
transform="translate(111,-158)"
id="g35778"
- style="opacity:0.55;display:inline">
+ style="display:inline;opacity:0.55">
<rect
y="336"
x="-64"
height="16"
width="16"
id="rect35780"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g35782"
- transform="translate(1,0)">
+ transform="translate(1)">
<g
id="g35785"
transform="translate(-386,446.5)">
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
- style="fill:#552200;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 329.5,-108.25 -5.5,2 0,6.75 5.5,3 5.5,-3 0,-6.75 -5.5,-2 z"
+ style="fill:#552200;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 329.5,-108.25 -5.5,2 v 6.75 l 5.5,3 5.5,-3 v -6.75 z"
id="path35787" />
<path
inkscape:connector-curvature="0"
@@ -68881,8 +67996,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
id="path35789"
- d="m 324,-99.5 0,-7 6,-1.75 0,11.5 -0.5,0.25 -5.5,-3 z"
- style="fill:#c9c9c9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06898749px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 324,-99.5 v -7 l 6,-1.75 v 11.5 l -0.5,0.25 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#c9c9c9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06898749px;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cccccc" />
<g
id="g35791"
@@ -68891,15 +68006,15 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc"
id="path35793"
- d="m 156,79.5 0,-7 -5,-1.75 0,11.5 5,-2.75 z"
- style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89401144px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 156,79.5 v -7 l -5,-1.75 v 11.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89401144px;marker:none;enable-background:accumulate"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<path
inkscape:connector-curvature="0"
id="path35795"
- d="m 145,72.5 5.5,-2 5.5,2 -5.5,2.5 -5.5,-2.5 z"
+ d="m 145,72.5 5.5,-2 5.5,2 -5.5,2.5 z"
style="fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:nodetypes="ccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
@@ -68910,7 +68025,7 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc"
id="path35797"
- d="m 334.5,-106.5 0,6.75 -5,2.75 -5,-2.75 0,-6.75"
+ d="m 334.5,-106.5 v 6.75 l -5,2.75 -5,-2.75 v -6.75"
style="fill:none;stroke:url(#linearGradient36725);stroke-width:0.99999982px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<rect
@@ -68919,17 +68034,17 @@
height="7.75"
width="1"
id="rect35799"
- style="fill:url(#linearGradient36727);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient36727);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc"
id="path35801"
d="m -61,340.65468 c 0,0 4.5,2 4.5,2 l 4.5,-2"
- style="fill:none;stroke:url(#linearGradient36729);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ style="fill:none;stroke:url(#linearGradient36729);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</g>
<rect
- style="opacity:0.07999998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.07999998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37868-0-4-8"
width="3.0000007"
height="7.25"
@@ -68937,13 +68052,13 @@
y="185" />
<g
id="g35818"
- style="fill:#ffeeaa;display:inline"
+ style="display:inline;fill:#ffeeaa"
transform="translate(-1080.9861,-256)">
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc"
- style="fill:#ffb769;fill-opacity:1;fill-rule:nonzero;stroke:#542b00;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.8627451;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 1130.4859,445.25 0,-7.5 6,2.75 0,8 -6,-3.25 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffb769;fill-opacity:1;fill-rule:nonzero;stroke:#542b00;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:0.8627451;marker:none;enable-background:accumulate"
+ d="m 1130.4859,445.25 v -7.5 l 6,2.75 v 8 z"
id="path35820"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -68954,8 +68069,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path35822"
- d="m 1136.4859,448.5 -6,-3.25 0,-7.5"
- style="fill:none;stroke:#462400;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 1136.4859,448.5 -6,-3.25 v -7.5"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#462400;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccc" />
</g>
</g>
@@ -68964,7 +68079,7 @@
id="ICON_PLAY_REVERSE"
style="display:inline">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect37388"
width="16"
height="16"
@@ -68980,13 +68095,13 @@
<path
sodipodi:nodetypes="ccccccccc"
id="path37392"
- d="m 392.96689,239.5639 -0.56915,0 -4.43932,4.36665 0,1.13912 4.43932,4.36665 0.56911,-1e-5 0,-9.87242 0,0 4e-5,1e-5 0,0 z"
+ d="m 392.96689,239.5639 h -0.56915 l -4.43932,4.36665 v 1.13912 l 4.43932,4.36665 0.56911,-1e-5 v -9.87242 0 z"
style="fill:url(#linearGradient37396);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.58802557px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
id="path37394"
- d="m 392.51157,247.91748 0,-7.59417 -4.09783,3.98695 0,0.3797"
+ d="m 392.51157,247.91748 v -7.59417 l -4.09783,3.98695 v 0.3797"
style="fill:none;stroke:url(#linearGradient37398);stroke-width:0.58802563px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
@@ -68996,7 +68111,7 @@
id="ICON_STYLUS_PRESSURE"
transform="matrix(0,1,1,0,248,835)">
<rect
- style="opacity:0.01000001;fill:#909090;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#909090;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect38783"
width="16"
height="16"
@@ -69005,12 +68120,12 @@
<path
sodipodi:nodetypes="csasc"
id="path38785"
- d="m -257.5,83.5 2,0 c 2,0 2.50929,2 4,2 1.49071,0 2,-2 4,-2 l 2,0"
- style="fill:none;stroke:#001c46;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -257.5,83.5 h 2 c 2,0 2.50929,2 4,2 1.49071,0 2,-2 4,-2 h 2"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#001c46;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#aaccff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -257.5,83.5 2,0 c 2,0 2.50929,2 4,2 1.49071,0 2,-2 4,-2 l 2,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#aaccff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -257.5,83.5 h 2 c 2,0 2.50929,2 4,2 1.49071,0 2,-2 4,-2 h 2"
id="path38787"
sodipodi:nodetypes="csasc"
inkscape:connector-curvature="0" />
@@ -69020,8 +68135,8 @@
id="g38789">
<path
transform="translate(-1,2)"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -16,180 0,6 -1,0 0,-1.75 -1,1.75 0,1.5 2,2.5 6,0 1,-2 0,-3.25 -0.75,-0.75 -0.25,0 0,1 -1,0 0,-1 -0.75,-0.75 -0.25,0 0,1.75 -1,0 0,-1.5 -0.75,-1 -0.25,0 0,2.5 -1,0 0,-5 -1,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -16,180 v 6 h -1 v -1.75 l -1,1.75 v 1.5 l 2,2.5 h 6 l 1,-2 v -3.25 L -9.75,184 H -10 v 1 h -1 v -1 l -0.75,-0.75 H -12 V 185 h -1 v -1.5 l -0.75,-1 H -14 v 2.5 h -1 v -5 z"
id="path38791"
sodipodi:nodetypes="cccccccccccccccccccccccccc"
inkscape:connector-curvature="0" />
@@ -69031,68 +68146,68 @@
<path
sodipodi:nodetypes="ccccccccccccccccccccccccccc"
id="path38796"
- d="m -16,179.5 0,6.5 -1,0 0,-2 -0.25,0 -0.75,2 0,1.5 2,2.5 6,0 1,-2 0,-3.25 -0.75,-0.75 -0.25,0 0,1 -1,0 0,-1 -0.75,-0.75 -0.25,0 0,1.75 -1,0 0,-1.5 -0.75,-1 -0.25,0 0,2.5 -1,0 0,-5.5 -1,0 z"
- style="fill:url(#linearGradient39048);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.40000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -16,179.5 v 6.5 h -1 v -2 h -0.25 l -0.75,2 v 1.5 l 2,2.5 h 6 l 1,-2 v -3.25 L -9.75,184 H -10 v 1 h -1 v -1 l -0.75,-0.75 H -12 V 185 h -1 v -1.5 l -0.75,-1 H -14 v 2.5 h -1 v -5.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient39048);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.40000001;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:#999999;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.40000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -15,187 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z m 2,0 0,1 1,0 0,-1 -1,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#999999;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.40000001;marker:none;enable-background:accumulate"
+ d="m -15,187 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z m 2,0 v 1 h 1 v -1 z"
id="path38799"
sodipodi:nodetypes="ccccccccccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path38801"
- d="m -15,185 0,1 1,0 0,-1 -1,0 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.40000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -15,185 v 1 h 1 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.40000001;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.40000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -13,185 0,1 1,0 0,-1 -1,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.40000001;marker:none;enable-background:accumulate"
+ d="m -13,185 v 1 h 1 v -1 z"
id="path38803"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path38805"
- d="m -11,185 0,1 1,0 0,-1 -1,0 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.40000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -11,185 v 1 h 1 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.40000001;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:url(#linearGradient39050);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.40000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -18,186 0,1 1,0 0,-3 -0.25,0 -0.75,2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient39050);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.40000001;marker:none;enable-background:accumulate"
+ d="m -18,186 v 1 h 1 v -3 h -0.25 z"
id="path38807"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path38810"
- d="m -17.25,187.5 1.5,2 5.25,0 1,-2 0,-0.5"
- style="fill:none;stroke:url(#linearGradient39052);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -17.25,187.5 1.5,2 h 5.25 l 1,-2 V 187"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient39052);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.40000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -14.00935,182.77669 0,1 1,0 0,-1 -1,0 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.40000001;marker:none;enable-background:accumulate"
+ d="m -14.00935,182.77669 v 1 h 1 v -1 z"
id="path38819"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path38821"
- d="m -11.978216,183.55574 0,1 1,0 0,-1 -1,0 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.40000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -11.978216,183.55574 v 1 h 1 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.40000001;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.40000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -11.978216,183.55574 0,1 1,0 0,-1 -1,0 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.40000001;marker:none;enable-background:accumulate"
+ d="m -11.978216,183.55574 v 1 h 1 v -1 z"
id="path38823"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path38825"
- d="m -16,180 0,1 1,0 0,-1 -1,0 z"
- style="opacity:0.2;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.40000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -16,180 v 1 h 1 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.40000001;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -69110,73 +68225,67 @@
height="16"
width="15.999955"
id="rect39805"
- style="opacity:0;fill:#808000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#808000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;enable-background:new" />
<g
- style="opacity:0.6;display:inline;enable-background:new"
+ style="display:inline;opacity:0.6;enable-background:new"
id="g39807">
<path
- style="fill:url(#linearGradient39835-9);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
- d="m 157.5,-26.5 c -1.10457,0 -2,0.895431 -2,2 0,1.104569 0.89543,2 2,2 0.0211,0 0.0415,6.5e-4 0.0625,0 0.005,0.02296 0.0259,0.03977 0.0312,0.0625 -0.63487,0.174633 -1.09375,0.747145 -1.09375,1.4375 0,0.828426 0.67157,1.5 1.5,1.5 0.69036,0 1.26287,-0.45888 1.4375,-1.09375 0.18381,0.04305 0.36556,0.09375 0.5625,0.09375 1.38071,0 2.5,-1.119289 2.5,-2.5 0,-1.380711 -1.11929,-2.5 -2.5,-2.5 -0.25351,0 -0.48817,0.05484 -0.71875,0.125 -0.32553,-0.663426 -0.9924,-1.125 -1.78125,-1.125 l 5e-5,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient39835-9);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
+ d="m 157.5,-26.5 c -1.10457,0 -2,0.895431 -2,2 0,1.104569 0.89543,2 2,2 0.0211,0 0.0415,6.5e-4 0.0625,0 0.005,0.02296 0.0259,0.03977 0.0312,0.0625 -0.63487,0.174633 -1.09375,0.747145 -1.09375,1.4375 0,0.828426 0.67157,1.5 1.5,1.5 0.69036,0 1.26287,-0.45888 1.4375,-1.09375 0.18381,0.04305 0.36556,0.09375 0.5625,0.09375 1.38071,0 2.5,-1.119289 2.5,-2.5 0,-1.380711 -1.11929,-2.5 -2.5,-2.5 -0.25351,0 -0.48817,0.05484 -0.71875,0.125 -0.32553,-0.663426 -0.9924,-1.125 -1.78125,-1.125 z"
id="path39809"
inkscape:connector-curvature="0" />
- <path
+ <circle
transform="matrix(0,0.1250004,0.1250004,0,143.24995,-37.50005)"
- sodipodi:type="arc"
- style="fill:url(#linearGradient39837-4);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new"
+ style="display:inline;fill:url(#linearGradient39837-4);fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
id="path39811"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path39813"
- style="fill:url(#linearGradient39839-3);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new"
- sodipodi:type="arc"
- transform="matrix(0,0.25,0.2500001,0,130.49998,-56)" />
+ style="display:inline;fill:url(#linearGradient39839-3);fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
+ transform="matrix(0,0.25,0.2500001,0,130.49998,-56)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
transform="translate(45,-100)"
id="g39815">
<path
style="fill:#214478;stroke:none"
- d="m 110.5,85.5 c 0,2.25 2,3 3.5,3 2.25,0 3.1933,-1.514034 4,-2.5 l 4.5,-5.5 3,0 0,-2 -4,0 -5.5,5.5 -1.25,-1.5 -3.25,0 -1,1 0,2 z"
+ d="m 110.5,85.5 c 0,2.25 2,3 3.5,3 2.25,0 3.1933,-1.514034 4,-2.5 l 4.5,-5.5 h 3 v -2 h -4 L 116,84 114.75,82.5 h -3.25 l -1,1 z"
id="path39817"
sodipodi:nodetypes="cszccccccccz"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cszccccccccz"
id="path39819"
- d="m 110.5,85.5 c 0,2.25 2,3 3.5,3 2.25,0 3.46788,-1.244422 4.25,-2.25 L 120,84 l -2,-2 -1.5,1.5 -1,0 0,-1 -1,-1 -3,0 -1,1 0,3 z"
- style="fill:url(#linearGradient39841-3);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 110.5,85.5 c 0,2.25 2,3 3.5,3 2.25,0 3.46788,-1.244422 4.25,-2.25 L 120,84 l -2,-2 -1.5,1.5 h -1 v -1 l -1,-1 h -3 l -1,1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient39841-3);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cszccccccccccccccccz"
id="path39821"
- d="m 110.5,85 c 0,2.25 1.5,3.5 3.75,3.5 2.25,0 3.50071,-1.469729 4.25,-2.5 l 4,-5.5 0.5,0 0.5,0 1,0 1,0 0,-2 -1,0 -1.11272,0 -0.88728,0 -1,0 -5,5 -1,0 0,-1 -1,-1 -3,0 -1,1 0,2.5 z"
+ d="m 110.5,85 c 0,2.25 1.5,3.5 3.75,3.5 2.25,0 3.50071,-1.469729 4.25,-2.5 l 4,-5.5 h 0.5 0.5 1 1 v -2 h -1 -1.11272 -0.88728 -1 l -5,5 h -1 v -1 l -1,-1 h -3 l -1,1 z"
style="fill:none;stroke:#0b1728;stroke-width:0.80000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccc"
id="path39823"
- d="m 118,83 1,0 0,1 1,0 0,-1 -1,0 0,-1 -1,0 0,1 z"
+ d="m 118,83 h 1 v 1 h 1 v -1 h -1 v -1 h -1 z"
style="fill:url(#linearGradient39843-3);stroke-width:1px"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
id="path39825"
- d="m 111.5,82.5 0.75818,0.763059 1.5,0 0.75,-0.75"
+ d="m 111.5,82.5 0.75818,0.763059 h 1.5 l 0.75,-0.75"
style="opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round"
inkscape:connector-curvature="0" />
<rect
@@ -69185,24 +68294,24 @@
height="1"
width="2"
id="rect39827"
- style="opacity:0.6;fill:#000000;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;stroke:none;stroke-width:0.80000001;marker:none;enable-background:new" />
<rect
y="83.5"
x="115"
height="1.4999981"
width="0.99994147"
id="rect39829"
- style="opacity:0.4;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.4;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:new" />
<path
sodipodi:nodetypes="cccc"
id="path39831"
- d="m 124.5,79.5 -3,0 -5,5 -0.5,0"
+ d="m 124.5,79.5 h -3 l -5,5 H 116"
style="opacity:0.4;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccsc"
id="path39833"
- d="m 111.5,83.5 0,1.271428 c -0.0915,0.859266 0.18827,2.299909 2.00056,2.733557 3.70517,0.886581 6.00049,-3.943221 6.00049,-3.943221"
+ d="m 111.5,83.5 v 1.271428 c -0.0915,0.859266 0.18827,2.299909 2.00056,2.733557 3.70517,0.886581 6.00049,-3.943221 6.00049,-3.943221"
style="fill:none;stroke:url(#linearGradient39845-2);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round"
inkscape:connector-curvature="0" />
</g>
@@ -69215,7 +68324,7 @@
style="opacity:0.85"
id="g41507">
<rect
- style="opacity:0.5;fill:url(#linearGradient41540);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:url(#linearGradient41540);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate"
id="rect41509"
width="7.8166504"
height="3"
@@ -69223,7 +68332,7 @@
y="82"
transform="scale(-1,1)" />
<rect
- style="fill:url(#linearGradient41542);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient41542);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate"
id="rect41511"
width="8.9931746"
height="1"
@@ -69231,7 +68340,7 @@
y="83"
transform="scale(-1,1)" />
<rect
- style="fill:#333333;fill-opacity:0.81960784;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#333333;fill-opacity:0.81960784;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect41514"
width="2"
height="1"
@@ -69251,14 +68360,14 @@
height="16"
width="16"
id="rect41518"
- style="opacity:0.05;fill:url(#radialGradient41666);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.05;fill:url(#radialGradient41666);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<g
id="g41520">
<path
sodipodi:nodetypes="csscccc"
id="path41522"
d="m 422.51387,74.4375 c 2.14278,1.6383 5.29475,5.652 6.25,7.5625 0.5,1 1.05394,1.01957 1.5,0 0.875,-2 3.25,-4.75 4.75,-6 l -3.5,-4 c -1.25,1.83839 -2,3.25 -2.75,4.63304 -1.71617,-1.72583 -4.35859,-3.39262 -6.25,-4.13304"
- style="fill:url(#linearGradient41668);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient41670);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient41668);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient41670);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -69269,7 +68378,7 @@
<path
sodipodi:nodetypes="cccc"
id="path41528"
- d="m 422.51387,73.5 c 1.93909,0.815624 4.07262,1.664731 6,4 l 0.75,0 c 0.82427,-1.547027 1.51287,-2.596571 2.16161,-3.5"
+ d="m 422.51387,73.5 c 1.93909,0.815624 4.07262,1.664731 6,4 h 0.75 c 0.82427,-1.547027 1.51287,-2.596571 2.16161,-3.5"
style="fill:none;stroke:url(#linearGradient41672);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
@@ -69287,32 +68396,26 @@
</g>
</g>
</g>
- <path
- sodipodi:type="arc"
- style="fill:url(#linearGradient41582);fill-opacity:1;fill-rule:evenodd;stroke:#0b1728;stroke-width:2.07584167;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient41582);fill-opacity:1;fill-rule:evenodd;stroke:#0b1728;stroke-width:2.07584167;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path32513-1"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(0.4336871,0,0,0.4334311,376.83381,21.772579)" />
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient32529-7);stroke-width:3.1984036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ transform="matrix(0.4336871,0,0,0.4334311,376.83381,21.772579)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient32529-7);stroke-width:3.1984036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path32517-6"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(-0.3127677,0,0,0.3125443,475.3332,36.070149)" />
+ transform="matrix(-0.3127677,0,0,0.3125443,475.3332,36.070149)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
id="ICON_MOD_DECIM">
@@ -69325,12 +68428,12 @@
height="16"
width="16"
id="rect31968"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc"
- style="fill:url(#linearGradient24189);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
- d="m 70.562559,271.5 0.24994,0.25 9,-9 -0.24994,-0.25 -9,0 0,9 z"
+ style="display:inline;fill:url(#linearGradient24189);fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="m 70.562559,271.5 0.24994,0.25 9,-9 -0.24994,-0.25 h -9 z"
id="path12863"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -69338,8 +68441,8 @@
<path
inkscape:connector-curvature="0"
id="path12865"
- style="fill:none;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;display:inline"
- d="m 70.562559,271.5 -6e-5,-9 9,5e-5 m -4.99994,4.89995 0,-4.8 m 0.89997,3.9 -4.8,0"
+ style="display:inline;fill:none;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1"
+ d="m 70.562559,271.5 -6e-5,-9 9,5e-5 M 74.562559,267.4 v -4.8 m 0.89997,3.9 h -4.8"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -69347,7 +68450,7 @@
<path
inkscape:connector-curvature="0"
style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:1.00000119px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 71.562559,265.51369 0,-2.01369 1.99998,0"
+ d="M 71.562559,265.51369 V 263.5 h 1.99998"
id="path12867"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -69361,15 +68464,15 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccccc"
- style="fill:url(#linearGradient24209);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
- d="m 72.562559,273.5 -0.25006,-0.25 9,-9 0.25006,0.25 0,9 -9,0 z"
+ style="display:inline;fill:url(#linearGradient24209);fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="m 72.562559,273.5 -0.25006,-0.25 9,-9 0.25006,0.25 v 9 z"
id="path12861" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc"
id="path27953"
- d="m 80.499999,265.5 0,7 -7,0"
- style="fill:none;stroke:url(#linearGradient24192);stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:7.40000265;display:inline"
+ d="m 80.499999,265.5 v 7 h -7"
+ style="display:inline;fill:none;stroke:url(#linearGradient24192);stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:7.40000248;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
@@ -69378,8 +68481,8 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;display:inline"
- d="m 81.562559,264.5 0,9 -9,-5e-5"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1"
+ d="m 81.562559,264.5 v 9 l -9,-5e-5"
id="path12869"
sodipodi:nodetypes="ccc" />
</g>
@@ -69389,12 +68492,12 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path12871"
- d="m 75.562559,265.51369 0,-2.01369 1.99998,0"
+ d="M 75.562559,265.51369 V 263.5 h 1.99998"
style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:1.00000119px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:1.00000119px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 71.562579,269.51369 0,-2.01369 1.99998,0"
+ d="M 71.562579,269.51369 V 267.5 h 1.99998"
id="path12873"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -69405,20 +68508,20 @@
sodipodi:nodetypes="cc"
id="path42252"
d="M 71,277 83,265"
- style="opacity:0.2;fill:none;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:none;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<g
id="g42277"
transform="translate(-21.1375,-0.42)">
<path
inkscape:connector-curvature="0"
d="m 99.6375,267.92 1,-1 m -4,4 1,-1 m 5,-5 1,-1 m -10,10 1,-1 m -4,4 1,-1"
- style="opacity:0.75;fill:none;stroke:#28220b;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.75;fill:none;stroke:#28220b;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
id="path42279"
sodipodi:nodetypes="cccccccccc" />
<path
inkscape:connector-curvature="0"
id="path42281"
- style="fill:none;stroke:#ffefaf;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffefaf;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 99.6375,267.92 1,-1 m -4,4 1,-1 m 5,-5 1,-1 m -10,10 1,-1 m -4,4 1,-1"
sodipodi:nodetypes="cccccccccc" />
</g>
@@ -69437,91 +68540,76 @@
height="16"
width="16"
id="rect38701"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\jendrzych's iconset.png"
transform="matrix(1.032664,0,0,1.043556,-79.760429,254.38542)"
id="g38703">
- <path
+ <circle
transform="matrix(0.787566,0,0,0.779223,26.709197,21.3179)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path38705"
- style="fill:#3771c8;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:1.22966909;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
+ style="display:inline;overflow:visible;visibility:visible;fill:#3771c8;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:1.22966909;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.666432,0,0,0.659342,42.69924,35.46375)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- sodipodi:type="arc"
style="fill:url(#linearGradient38719);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path38707"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z" />
- <path
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
id="path38709"
style="opacity:0.7;fill:url(#linearGradient38722);fill-opacity:1;fill-rule:nonzero;stroke:none"
- sodipodi:type="arc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(0.3631382,0,0,0.3593485,81.755824,69.904768)" />
+ transform="matrix(0.3631382,0,0,0.3593485,81.755824,69.904768)"
+ cx="132"
+ cy="118"
+ r="8" />
<path
transform="matrix(0.9688184,0,0,0.9547322,-131.63668,47.640696)"
- style="opacity:0.5;fill:none;stroke:#ffe680;stroke-width:1.00161445px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline;filter:url(#filter13996)"
+ style="display:inline;opacity:0.5;fill:none;stroke:#ffe680;stroke-width:1.00161445px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;filter:url(#filter13996)"
d="m 274.98515,70.995347 c 0,0.953349 -1,1.906699 -2,1.906699"
id="path38711"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient38724);fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 130.67404,112.3079 c 0.0244,0.78706 -0.15754,1.63085 0.59269,2.02213 0.71197,-0.0434 1.49133,0.64122 1.35667,1.40517 -0.26776,0.77861 0.14071,1.12325 0.95576,1.36401 0.57868,-0.0716 0.79053,-0.93546 0.87357,-1.36401 0.0948,-1.27121 0.51542,-1.09421 0.82108,-1.98991 -0.45733,-0.91502 -0.003,-1.04443 -0.72629,-1.43739 m -1.00945,-3.89288 c -0.4426,0.34378 -0.24372,1.04314 -0.66162,1.39841 -0.45372,0.13628 -0.78226,-0.0605 -1.16771,0.43164 -0.30841,1.10457 0.35004,1.22306 0.90205,1.10457 0.49538,-0.0502 0.61419,-0.94321 0.97928,-0.37853 0.0831,0.10976 0.71917,-0.0403 0.86266,0.18898 0.0669,0.10682 -0.11785,0.0255 -0.14729,0.18955 -0.0428,0.23847 0.27734,0.37341 0.372,0.3824 0.32089,0.0305 0.60005,0.92548 0.83846,1.05499 0,0.46738 0.0924,-0.6774 0.3515,-0.78703 0.22948,-0.0971 0.47929,0.10731 0.5,0 0.29928,-1.55081 -1.26113,-3.00604 -2.82933,-3.58498 z M 128.96474,107.5 c -0.6111,1.01384 0.85343,1.46103 1.73001,1.21329 0.57897,-0.37879 1.00716,-0.92331 0.55665,-1.21329 -0.20614,-0.1415 -2.07706,0.0431 -2.28666,0 l 0,0 0,0 0,0 z m -1.372,1.37253 c -0.49575,-0.14959 0.44952,-0.11945 0.45733,0.45751 0.1696,0.54756 -0.42801,0.23756 0,0.45752 0.70893,0.1644 0.35328,1.70031 -0.28114,1.56208 -0.56042,0.10119 -0.43915,0.95826 -1.64865,0.88279 -0.0836,0.0755 -1.04512,0.61593 -0.81421,1.21521 1.12968,0.30162 -0.36816,1.26478 -0.43867,0.55236 -0.15441,-0.49797 -0.62853,-1.11348 -0.43994,-1.68674 0.11734,-0.63627 0.5689,-1.12263 0.82646,-1.69865 0.36225,-0.61946 0.89084,-1.17688 1.57758,-1.42595 0.21411,-0.16799 0.46159,-0.41691 0.76124,-0.31613 l 0,0 0,0 0,0 z m -0.91467,5.03262 c -0.55163,-0.27585 -0.72934,0.28829 -0.60377,0.7984 0.15577,0.47138 0.52607,0.97695 0.72628,1.43739 0.40435,0.49619 1.512,1.34081 2.17883,1.67696 0.31768,0.16015 0.48418,0 0.24209,-0.23956 -0.31367,-0.6375 -1.14073,-1.94893 -0.48418,-2.15609 0.59647,-0.60342 0.34203,-1.58773 -0.48419,-1.43739 -0.54779,-0.25818 -0.75551,-0.39899 -1.38855,-0.0752 -0.0558,0.0743 -0.12403,0.006 -0.18651,-0.004 l 0,-5.1e-4 0,0 0,0 z"
+ d="m 130.67404,112.3079 c 0.0244,0.78706 -0.15754,1.63085 0.59269,2.02213 0.71197,-0.0434 1.49133,0.64122 1.35667,1.40517 -0.26776,0.77861 0.14071,1.12325 0.95576,1.36401 0.57868,-0.0716 0.79053,-0.93546 0.87357,-1.36401 0.0948,-1.27121 0.51542,-1.09421 0.82108,-1.98991 -0.45733,-0.91502 -0.003,-1.04443 -0.72629,-1.43739 m -1.00945,-3.89288 c -0.4426,0.34378 -0.24372,1.04314 -0.66162,1.39841 -0.45372,0.13628 -0.78226,-0.0605 -1.16771,0.43164 -0.30841,1.10457 0.35004,1.22306 0.90205,1.10457 0.49538,-0.0502 0.61419,-0.94321 0.97928,-0.37853 0.0831,0.10976 0.71917,-0.0403 0.86266,0.18898 0.0669,0.10682 -0.11785,0.0255 -0.14729,0.18955 -0.0428,0.23847 0.27734,0.37341 0.372,0.3824 0.32089,0.0305 0.60005,0.92548 0.83846,1.05499 0,0.46738 0.0924,-0.6774 0.3515,-0.78703 0.22948,-0.0971 0.47929,0.10731 0.5,0 0.29928,-1.55081 -1.26113,-3.00604 -2.82933,-3.58498 z M 128.96474,107.5 c -0.6111,1.01384 0.85343,1.46103 1.73001,1.21329 0.57897,-0.37879 1.00716,-0.92331 0.55665,-1.21329 -0.20614,-0.1415 -2.07706,0.0431 -2.28666,0 z m -1.372,1.37253 c -0.49575,-0.14959 0.44952,-0.11945 0.45733,0.45751 0.1696,0.54756 -0.42801,0.23756 0,0.45752 0.70893,0.1644 0.35328,1.70031 -0.28114,1.56208 -0.56042,0.10119 -0.43915,0.95826 -1.64865,0.88279 -0.0836,0.0755 -1.04512,0.61593 -0.81421,1.21521 1.12968,0.30162 -0.36816,1.26478 -0.43867,0.55236 -0.15441,-0.49797 -0.62853,-1.11348 -0.43994,-1.68674 0.11734,-0.63627 0.5689,-1.12263 0.82646,-1.69865 0.36225,-0.61946 0.89084,-1.17688 1.57758,-1.42595 0.21411,-0.16799 0.46159,-0.41691 0.76124,-0.31613 z m -0.91467,5.03262 c -0.55163,-0.27585 -0.72934,0.28829 -0.60377,0.7984 0.15577,0.47138 0.52607,0.97695 0.72628,1.43739 0.40435,0.49619 1.512,1.34081 2.17883,1.67696 0.31768,0.16015 0.48418,0 0.24209,-0.23956 -0.31367,-0.6375 -1.14073,-1.94893 -0.48418,-2.15609 0.59647,-0.60342 0.34203,-1.58773 -0.48419,-1.43739 -0.54779,-0.25818 -0.75551,-0.39899 -1.38855,-0.0752 -0.0558,0.0743 -0.12403,0.006 -0.18651,-0.004 z"
id="path38713"
sodipodi:nodetypes="ccccccccccccssscsscccscccccccccccccccsccccc"
inkscape:connector-curvature="0" />
- <path
+ <circle
transform="matrix(0.6657538,0,0,0.6588051,42.794535,35.527157)"
- sodipodi:type="arc"
- style="opacity:0.8;fill:none;stroke:url(#linearGradient38726);stroke-width:1.45454657;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+ style="display:inline;opacity:0.8;fill:none;stroke:url(#linearGradient38726);stroke-width:1.45454657;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path38715"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.06052282,0,0,0.05989117,121.21686,103.80334)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- sodipodi:type="arc"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path38717"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z" />
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
@@ -69534,22 +68622,22 @@
height="16"
width="16"
id="rect37957"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<rect
y="96.749977"
x="165.74995"
height="1.75"
width="2.5"
id="rect37959"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#1a1a1a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#1a1a1a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 164.99996,98.99998 6,-2.5 6,2.5 0,2.75 -5.99999,3.24999 -6.00001,-3.24999 0,-2.75 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 164.99996,98.99998 6,-2.5 6,2.5 v 2.75 l -5.99999,3.24999 -6.00001,-3.24999 z"
id="path37961"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.96000001;fill:none;stroke:#1a1a1a;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.96000001;fill:none;stroke:#1a1a1a;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect37963"
width="2"
height="7"
@@ -69561,7 +68649,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
sodipodi:nodetypes="ccccccc"
style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 164.99996,98.99998 6,-2.5 6,2.5 0,0.5 -6,3 -6,-2.93442 0,-0.56558 z"
+ d="m 164.99996,98.99998 6,-2.5 6,2.5 v 0.5 l -6,3 -6,-2.93442 z"
id="path37965"
inkscape:connector-curvature="0" />
<path
@@ -69569,7 +68657,7 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
id="path37967"
- d="m 164.99997,101.74998 -1e-5,-2.25 6,3 0.01,2.49885 -6.00995,-3.24885 -4e-5,0 0,0 0,0 z"
+ d="m 164.99997,101.74998 -1e-5,-2.25 6,3 0.01,2.49885 -6.00995,-3.24885 z"
style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
@@ -69577,8 +68665,8 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89207077px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 176.99996,101.74998 0,-2.25 -6,3 c 0,2.58362 0,1.9329 0,2.5 l 6,-3.25 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89207077px;marker:none;enable-background:accumulate"
+ d="m 176.99996,101.74998 v -2.25 l -6,3 c 0,2.58362 0,1.9329 0,2.5 z"
id="path37969"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
@@ -69588,9 +68676,9 @@
height="1"
width="2"
id="rect37971"
- style="fill:#aa0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#aa0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ff2a2a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff2a2a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37973"
width="2"
height="1"
@@ -69602,10 +68690,10 @@
height="2"
width="1"
id="rect37975"
- style="opacity:0.5;fill:#ffaaaa;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#ffaaaa;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<path
style="fill:none;stroke:url(#linearGradient38005);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
- d="m 165.49996,99.49998 0,0 0,2 5.5,3 5.5,-3 0,-2"
+ d="m 165.49996,99.49998 v 0 2 l 5.5,3 5.5,-3 v -2"
id="path37977"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
@@ -69618,43 +68706,37 @@
height="3.9642856"
width="2"
id="rect37981"
- style="opacity:0.3;fill:none;stroke:#1a1a1a;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
- sodipodi:type="arc"
- style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#550000;stroke-width:0.59999985;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:none;stroke:#1a1a1a;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#550000;stroke-width:0.59999985;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path37983"
- sodipodi:cx="286"
- sodipodi:cy="325"
- sodipodi:rx="1.5"
- sodipodi:ry="1.5"
- d="m 287.5,325 a 1.5,1.5 0 0 1 -1.5,1.5 1.5,1.5 0 0 1 -1.5,-1.5 1.5,1.5 0 0 1 1.5,-1.5 1.5,1.5 0 0 1 1.5,1.5 z"
- transform="matrix(1.6666708,0,0,1.6666633,-190.66784,-215.66559)" />
+ transform="matrix(1.6666708,0,0,1.6666633,-190.66784,-215.66559)"
+ cx="286"
+ cy="325"
+ r="1.5" />
<rect
y="328.49997"
x="285"
height="3.5000324"
width="2"
id="rect37985"
- style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37987"
width="1"
height="3.5000324"
x="285"
y="328.49997" />
- <path
+ <circle
transform="matrix(1.333351,0,0,1.333345,-95.338377,-107.33714)"
- d="m 287.5,325 a 1.5,1.5 0 0 1 -1.5,1.5 1.5,1.5 0 0 1 -1.5,-1.5 1.5,1.5 0 0 1 1.5,-1.5 1.5,1.5 0 0 1 1.5,1.5 z"
- sodipodi:ry="1.5"
- sodipodi:rx="1.5"
- sodipodi:cy="325"
- sodipodi:cx="286"
id="path37989"
- style="fill:url(#linearGradient38007);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.59999985;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient38007);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.59999985;marker:none;enable-background:accumulate"
+ cx="286"
+ cy="325"
+ r="1.5" />
<rect
- style="opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37991"
width="1"
height="1"
@@ -69666,14 +68748,14 @@
height="1"
width="2"
id="rect37993"
- style="opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
y="331"
x="287"
height="1"
width="1"
id="rect37995"
- style="opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
</g>
<path
style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
@@ -69685,8 +68767,8 @@
id="g37999"
mask="url(#mask20957)">
<path
- style="opacity:0.7;fill:none;stroke:#1a1a1a;stroke-width:2.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 168.25,102.75 -0.75,0.75 c -1,1 -0.75,1 -2,1 l -2.25,0"
+ style="opacity:0.7;fill:none;stroke:#1a1a1a;stroke-width:2.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 168.25,102.75 -0.75,0.75 c -1,1 -0.75,1 -2,1 h -2.25"
id="path38001"
sodipodi:nodetypes="cccc"
mask="none"
@@ -69694,7 +68776,7 @@
<path
sodipodi:nodetypes="cccc"
id="path38003"
- d="m 168.25,102.75 -0.75,0.75 c -1.25,1.17188 -0.75,1 -2,1 l -3,0"
+ d="m 168.25,102.75 -0.75,0.75 c -1.25,1.17188 -0.75,1 -2,1 h -3"
style="fill:none;stroke:#ececec;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
@@ -69709,12 +68791,12 @@
height="16"
width="16"
id="rect43390-2"
- style="opacity:0;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g43392-4"
clip-path="url(#clipPath43368-1)">
<rect
- style="fill:#ec0606;fill-opacity:1;fill-rule:nonzero;stroke:#910000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ec0606;fill-opacity:1;fill-rule:nonzero;stroke:#910000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect43394-5"
width="6"
height="2"
@@ -69730,9 +68812,9 @@
height="2"
width="6"
id="rect43396-5"
- style="fill:#6996d7;fill-opacity:1;fill-rule:nonzero;stroke:#143564;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#6996d7;fill-opacity:1;fill-rule:nonzero;stroke:#143564;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#6996d7;fill-opacity:1;fill-rule:nonzero;stroke:#143564;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#6996d7;fill-opacity:1;fill-rule:nonzero;stroke:#143564;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect43398-1"
width="6"
height="2"
@@ -69748,29 +68830,29 @@
height="2"
width="6"
id="rect43400-7"
- style="fill:#ec0606;fill-opacity:1;fill-rule:nonzero;stroke:#910000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ec0606;fill-opacity:1;fill-rule:nonzero;stroke:#910000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
id="path43402-1"
- style="fill:none;stroke:#000000;stroke-width:2.9000001;stroke-miterlimit:4;stroke-dasharray:none;display:inline;enable-background:new"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:2.9000001;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new"
d="m -68.50037,45.540088 c 0,-2 -5,-2 -5,-4 0,-2.030484 5.00037,-2 4.99787,-4.040088 0.002,-2 -4.9975,-2 -4.9975,-4 0,-2.030484 5.005,-1.959912 5,-4 0,-2 -5,-2 -5,-4 0,-2.030484 5.00037,-2 4.99537,-4.040088"
sodipodi:nodetypes="cscscsc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cscscsc"
d="m -68.50037,45.540088 c 0,-2 -5,-2 -5,-4 0,-2.030484 5.00037,-2 4.99787,-4.040088 0.002,-2 -4.9975,-2 -4.9975,-4 0,-2.030484 5.005,-1.959912 5,-4 0,-2 -5,-2 -5,-4 0,-2.030484 5.00037,-2 4.99537,-4.040088"
- style="fill:none;stroke:#ffffff;stroke-width:1.39999998;stroke-miterlimit:4;stroke-dasharray:none;display:inline;enable-background:new"
+ style="display:inline;fill:none;stroke:#ffffff;stroke-width:1.39999998;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new"
id="path43404-1"
inkscape:connector-curvature="0" />
<path
id="path43406-5"
- style="opacity:0.4;fill:none;stroke:url(#radialGradient43410-4);stroke-width:1.39999998;stroke-miterlimit:4;stroke-dasharray:none;display:inline;enable-background:new"
+ style="display:inline;opacity:0.4;fill:none;stroke:url(#radialGradient43410-4);stroke-width:1.39999998;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new"
d="m -68.50037,45.540088 c 0,-2 -5,-2 -5,-4 0,-2.030484 5.00037,-2 4.99787,-4.040088 0.002,-2 -4.9975,-2 -4.9975,-4 0,-2.030484 5.005,-1.959912 5,-4 0,-2 -5,-2 -5,-4 0,-2.030484 5.00037,-2 4.99537,-4.040088"
sodipodi:nodetypes="cscscsc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cscscsc"
d="m -68.50037,45.540088 c 0,-2 -5,-2 -5,-4 0,-2.030484 5.00037,-2 4.99787,-4.040088 0.002,-2 -4.9975,-2 -4.9975,-4 0,-2.030484 5.005,-1.959912 5,-4 0,-2 -5,-2 -5,-4 0,-2.030484 5.00037,-2 4.99537,-4.040088"
- style="opacity:0.4;fill:none;stroke:url(#radialGradient43412-8);stroke-width:1.39999998;stroke-miterlimit:4;stroke-dasharray:none;display:inline;enable-background:new"
+ style="display:inline;opacity:0.4;fill:none;stroke:url(#radialGradient43412-8);stroke-width:1.39999998;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new"
id="path43408-2"
inkscape:connector-curvature="0" />
</g>
@@ -69781,7 +68863,7 @@
id="ICON_GREASEPENCIL">
<path
id="path40242"
- style="fill:#89a02c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#89a02c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate"
d="M 52.75,44.25 62.5,34.5 c 0,-1 -0.5,-1.5 -1,-2 -0.498692,-0.498692 -1,-1 -2,-1 l -9.75,9.75 c 1,0 1.501308,0.501308 2,1 0.5,0.5 1,1 1,2 z"
sodipodi:nodetypes="ccsccsc"
inkscape:connector-curvature="0" />
@@ -69791,40 +68873,40 @@
height="16"
width="16"
id="rect40244"
- style="opacity:0.01000001;fill:#d40000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#d40000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:new" />
<path
sodipodi:nodetypes="ccsccc"
- d="M 60.75,36.25 62.5,34.5 c 0,-1 -0.5,-1.5 -1,-2 -0.498692,-0.498692 -1,-1 -2,-1 l -1.75,1.75 3,3 z"
- style="fill:url(#linearGradient40270);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.69999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 60.75,36.25 62.5,34.5 c 0,-1 -0.5,-1.5 -1,-2 -0.498692,-0.498692 -1,-1 -2,-1 l -1.75,1.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient40270);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate"
id="path40246"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
- d="m 57.5,35.5 -1,-1 -6.75,6.75 1.75,0.25 6,-6 z"
- style="fill:#bcd35f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 57.5,35.5 -1,-1 -6.75,6.75 1.75,0.25 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#bcd35f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate"
id="path40248"
inkscape:connector-curvature="0" />
<path
id="path40250"
- style="fill:#445016;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 59.5,37.25 -1,-0.75 -6,6 0.25,1.5 6.75,-6.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#445016;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate"
+ d="m 59.5,37.25 -1,-0.75 -6,6 0.25,1.5 z"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
id="path40252"
d="m 59.75,37.25 -3,-3"
- style="fill:none;stroke:url(#linearGradient40272);stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:url(#linearGradient40272);stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient40274);stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:url(#linearGradient40274);stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 60.75,36.25 -3,-3"
id="path40254"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient40276);fill-opacity:1;stroke-width:1px"
- d="m 57.75,33.25 2.98375,3.003125 -1.0075,1.0075 -3.0225,-2.98375 L 57.75,33.25 z"
+ d="m 57.75,33.25 2.98375,3.003125 -1.0075,1.0075 -3.0225,-2.98375 z"
id="path40256"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
@@ -69843,7 +68925,7 @@
<path
sodipodi:nodetypes="ccccsc"
id="path40262"
- d="M 50.25,41 48.5,44.25 49.75,45.5 53,43.75 C 53,43.25 52.5,42.5 52,42 51.501308,41.501308 50.75,41 50.25,41 z"
+ d="M 50.25,41 48.5,44.25 49.75,45.5 53,43.75 C 53,43.25 52.5,42.5 52,42 51.501308,41.501308 50.75,41 50.25,41 Z"
style="fill:url(#linearGradient40278);fill-opacity:1;stroke-width:1px"
inkscape:connector-curvature="0" />
<path
@@ -69856,7 +68938,7 @@
sodipodi:nodetypes="cc"
id="path40266"
d="M 48.25,45.75 48.5,45.5"
- style="fill:none;stroke:#9ab432;stroke-width:1.10000002;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#9ab432;stroke-width:1.10000002;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
style="opacity:0.3;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round"
@@ -69874,11 +68956,11 @@
height="16"
width="16"
id="rect40445-4"
- style="opacity:0.01000001;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="ccccc"
id="path40447-5"
- d="m -43.5,-116.75 12.5,-4.75 0.75,2 -13.25,5 0,-2.25 z"
+ d="m -43.5,-116.75 12.5,-4.75 0.75,2 -13.25,5 z"
style="fill:#1a1a1a;stroke:#000000;stroke-width:0.89999998;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
inkscape:connector-curvature="0" />
<rect
@@ -69887,9 +68969,9 @@
height="7.9999971"
width="12.999988"
id="rect40449-5"
- style="fill:url(#linearGradient39686-1);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient39686-1);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect40451-1"
width="1"
height="1.5"
@@ -69901,9 +68983,9 @@
height="1.5"
width="1"
id="rect40453-7"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect40455-1"
width="1"
height="1.5"
@@ -69915,16 +68997,16 @@
height="1.5"
width="1"
id="rect40457-1"
- style="fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect40459-5"
width="1"
height="1.5"
x="-40"
y="-117.87802" />
<rect
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect40461-2"
width="13.999996"
height="2.0000052"
@@ -69936,11 +69018,11 @@
height="1.7500292"
width="12.154154"
id="rect40490-7"
- style="opacity:0.8;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.55400002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.8;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.55400002;marker:none;enable-background:accumulate" />
<path
id="rect40463-6"
- d="m -40,-114 0,1.25 2,0 0,-1.25 -2,0 z m 4,0 0,1.25 2,0 0,-1.25 -2,0 z m 4,0 0,1.25 2,0 0,-1.25 -2,0 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -40,-114 v 1.25 h 2 V -114 Z m 4,0 v 1.25 h 2 V -114 Z m 4,0 v 1.25 h 2 V -114 Z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
style="opacity:0.3;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round"
@@ -69951,36 +69033,36 @@
<path
sodipodi:nodetypes="ccccc"
style="fill:none;stroke:url(#linearGradient39688-9);stroke-width:1px;stroke-linejoin:round"
- d="m -41.5,-107.5 0,-6 11,0 0,6 -11,0 z"
+ d="m -41.5,-107.5 v -6 h 11 v 6 z"
id="path40476-4"
inkscape:connector-curvature="0" />
<path
- style="fill:#87aade;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -43,-116.75 1,0 1,1.75 0,2 -2,0 0,-3.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#87aade;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
+ d="m -43,-116.75 h 1 l 1,1.75 v 2 h -2 z"
id="path40478-2"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
- style="fill:#002255;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -41,-115 0,2 -2,0 0,0.75 2.75,0 0,-3 -1.25,-2.25 -1.5,0.25 0,0.5 1,0 1,1.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#002255;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
+ d="m -41,-115 v 2 h -2 v 0.75 h 2.75 v -3 l -1.25,-2.25 -1.5,0.25 v 0.5 h 1 z"
id="path40480-3"
sodipodi:nodetypes="ccccccccccc"
inkscape:connector-curvature="0" />
<path
id="path40558-2"
- d="m -41.5,-107.38206 0,-4.66445"
+ d="m -41.5,-107.38206 v -4.66445"
style="opacity:0.2;fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect40553-2"
width="1"
height="1.5"
x="-33"
y="-120.75" />
<rect
- style="fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect40556-1"
width="1"
height="1.25"
@@ -69989,15 +69071,15 @@
<path
sodipodi:nodetypes="cc"
style="opacity:0.5;fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round"
- d="m -42.4975,-113.46527 0,-3.0928"
+ d="m -42.4975,-113.46527 v -3.0928"
id="path40560-6"
inkscape:connector-curvature="0" />
<g
- transform="translate(1,0)"
+ transform="translate(1)"
style="opacity:0.35"
id="g40590-8">
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.55400002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.55400002;marker:none;enable-background:accumulate"
id="rect40586-5"
width="5"
height="0.9617852"
@@ -70009,7 +69091,7 @@
height="3"
width="1.0280838"
id="rect40588-7"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.55400002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.55400002;marker:none;enable-background:accumulate" />
</g>
</g>
<g
@@ -70024,15 +69106,15 @@
height="16"
width="16"
id="rect42947"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g42949">
<g
style="opacity:0.85"
id="g42951">
<path
- style="fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="M 341.5161,616.38229 340.5,617.5 l -10.73389,-10e-6 -1.25,-1.25 L 328.5,605.5 l 13,0 0.0161,10.88229 z"
+ style="fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 341.5161,616.38229 340.5,617.5 l -10.73389,-10e-6 -1.25,-1.25 L 328.5,605.5 h 13 z"
id="path42953"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -70044,12 +69126,12 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path42955"
- d="m 340,616 -8.25,0 0,-1 8.25,0 0,1 z"
- style="fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 340,616 h -8.25 v -1 H 340 Z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;enable-background:accumulate"
id="rect38927"
width="11.970581"
height="8.0306396"
@@ -70061,14 +69143,14 @@
height="8.0306396"
width="11.970581"
id="rect45307"
- style="opacity:0.3;fill:url(#radialGradient45309);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:url(#radialGradient45309);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;enable-background:accumulate" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path42957"
- d="m 340.48389,606.50001 c -3.66204,-3e-5 -7.70403,2e-5 -10.98389,-10e-6 l 0.002,10.00007 10.99778,-7e-5 -0.0161,-9.99999 2.1e-4,0 z"
- style="fill:none;stroke:url(#linearGradient42965-7);stroke-width:0.99999923px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 340.48389,606.50001 c -3.66204,-3e-5 -7.70403,2e-5 -10.98389,-10e-6 l 0.002,10.00007 10.99778,-7e-5 -0.0161,-9.99999 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient42965-7);stroke-width:0.99999923px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<rect
@@ -70080,11 +69162,11 @@
height="1.0000043"
width="1"
id="rect42959"
- style="fill:#d40000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#d40000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="ccccc"
- style="opacity:0.35;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 340.5,614 -11,0 0,-1 11,0 0,1 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.35;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;enable-background:accumulate"
+ d="m 340.5,614 h -11 v -1 h 11 z"
id="path38929"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -70092,16 +69174,16 @@
inkscape:connector-curvature="0" />
</g>
<path
- style="opacity:0.25;fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;filter:url(#filter24186-3-2)"
- d="m 337.7,606.7 0,2.75 2,1.5 0,2.5 -0.25,0.25 -1.75,0 0,-2 -2,0 0,2 -1.75,0 -0.25,-0.25 0,-2.5 2,-1.5 0,-2.75 2,0 z"
+ style="opacity:0.25;fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter24186-3-2)"
+ d="m 337.7,606.7 v 2.75 l 2,1.5 v 2.5 l -0.25,0.25 h -1.75 v -2 h -2 v 2 h -1.75 l -0.25,-0.25 v -2.5 l 2,-1.5 v -2.75 z"
id="path42961"
sodipodi:nodetypes="ccccccccccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccccccccccccccccccc"
id="path42963"
- d="m 333.75,602.5 1.75,0 c 0,0 0,2 0,2 l 2,0 0,-2 1.75,0 0.25,0.25 0,2.5 -2,1.5 0,2.5 2,1.5 0,2.5 -0.25,0.25 -1.75,0 0,-2 -2,0 0,2 -1.75,0 -0.25,-0.25 0,-2.5 2,-1.5 0,-2.5 -2,-1.5 0,-2.5 0.25,-0.25 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:url(#linearGradient42967-6);stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 333.75,602.5 h 1.75 c 0,0 0,2 0,2 h 2 v -2 h 1.75 l 0.25,0.25 v 2.5 l -2,1.5 v 2.5 l 2,1.5 v 2.5 l -0.25,0.25 h -1.75 v -2 h -2 v 2 h -1.75 l -0.25,-0.25 v -2.5 l 2,-1.5 v -2.5 l -2,-1.5 v -2.5 z"
+ style="fill:#ffffff;fill-rule:evenodd;stroke:url(#linearGradient42967-6);stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -70117,14 +69199,14 @@
height="16"
width="16"
id="rect29391"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g29393"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
transform="matrix(0.6184922,0,0,0.6183145,308.52384,72.984237)"
- style="opacity:0.8;display:inline">
+ style="display:inline;opacity:0.8">
<g
style="display:inline"
id="g29395"
@@ -70132,23 +69214,20 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path29397"
- style="fill:url(#linearGradient29407);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.99653149;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.872933,0,0,0.883992,56.29135,118.6984)" />
+ style="fill:url(#linearGradient29407);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.99653149;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.872933,0,0,0.883992,56.29135,118.6984)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<path
inkscape:connector-curvature="0"
- d="m 134.19651,245.03757 -6.46038,0"
+ d="m 134.19651,245.03757 h -6.46038"
style="fill:none;stroke:url(#linearGradient29409);stroke-width:4.85120249;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
id="path29399"
sodipodi:nodetypes="cc" />
@@ -70158,26 +69237,23 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
transform="matrix(0.784039,0,0,0.779055,-3.508124,71.29625)"
id="g29401"
- style="fill:none;stroke:url(#linearGradient29413);stroke-width:1.90771151;stroke-opacity:1;display:inline">
- <path
+ style="display:inline;fill:none;stroke:url(#linearGradient29413);stroke-width:1.90771151;stroke-opacity:1">
+ <circle
transform="matrix(0.8313677,0,0,0.8366298,61.774434,124.29322)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient29411);stroke-width:2.48091555;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient29411);stroke-width:2.48091555;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path29403"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<path
inkscape:connector-curvature="0"
id="path29405"
- style="fill:none;stroke:#000000;stroke-width:2.42560124;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 133.78064,245.05849 -5.65893,0"
+ style="fill:none;stroke:#000000;stroke-width:2.42560124;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 133.78064,245.05849 h -5.65893"
sodipodi:nodetypes="cc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
@@ -70190,14 +69266,14 @@
height="16"
width="16"
id="rect41249"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g41251"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
transform="matrix(0.6184922,0,0,0.6183145,141.52384,474.98425)"
- style="opacity:0.8;display:inline">
+ style="display:inline;opacity:0.8">
<g
style="display:inline"
id="g41253"
@@ -70205,22 +69281,19 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path41255"
- style="fill:url(#linearGradient18663);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.99653149;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.872933,0,0,0.883992,56.29135,118.6984)" />
+ style="fill:url(#linearGradient18663);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.99653149;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.872933,0,0,0.883992,56.29135,118.6984)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<path
- d="m 134.19651,245.03757 -6.46038,0"
+ d="m 134.19651,245.03757 h -6.46038"
style="fill:none;stroke:url(#linearGradient18665);stroke-width:4.85120249;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
id="path41257"
sodipodi:nodetypes="cc"
@@ -70231,25 +69304,22 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
transform="matrix(0.784039,0,0,0.779055,-3.508124,71.29625)"
id="g41260"
- style="fill:none;stroke:url(#linearGradient18669);stroke-width:1.90771151;stroke-opacity:1;display:inline">
- <path
+ style="display:inline;fill:none;stroke:url(#linearGradient18669);stroke-width:1.90771151;stroke-opacity:1">
+ <circle
transform="matrix(0.8313677,0,0,0.8366298,61.774434,124.29322)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient18667);stroke-width:2.48091555;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient18667);stroke-width:2.48091555;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path41262"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<path
id="path41264"
- style="fill:none;stroke:#000000;stroke-width:2.42560124;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 133.78064,245.05849 -5.65893,0"
+ style="fill:none;stroke:#000000;stroke-width:2.42560124;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 133.78064,245.05849 h -5.65893"
sodipodi:nodetypes="cc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
@@ -70262,7 +69332,7 @@
<g
id="g40668">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect39989"
width="16"
height="16"
@@ -70279,17 +69349,17 @@
height="11.000039"
width="14.000015"
id="rect39993"
- style="fill:url(#linearGradient40918);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient40918);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
rx="1.7356256" />
<path
sodipodi:nodetypes="ccccccccc"
id="path39996"
- d="m 216.00001,479.40741 0,4.59259 c 0,0.56404 0.36784,1.00001 0.84375,1 l 11.3125,0 c 0.47591,0 0.84375,-0.43595 0.84375,-1 l 0,-4.59259 C 228.6863,479.7792 228.23078,480 227.75001,480 l -10.5,0 c -0.48077,0 -0.93629,-0.2208 -1.25,-0.59259 z"
- style="fill:url(#linearGradient40920);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 216.00001,479.40741 V 484 c 0,0.56404 0.36784,1.00001 0.84375,1 h 11.3125 c 0.47591,0 0.84375,-0.43595 0.84375,-1 v -4.59259 C 228.6863,479.7792 228.23078,480 227.75001,480 h -10.5 c -0.48077,0 -0.93629,-0.2208 -1.25,-0.59259 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient40920);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<rect
rx="1.5817194"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect39999"
width="14.000005"
height="2.0000522"
@@ -70297,7 +69367,7 @@
y="475.5"
ry="0.8750208" />
<rect
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect40001"
width="14.000006"
height="10.999848"
@@ -70305,16 +69375,14 @@
y="475.5"
ry="1.503511"
rx="1.503511" />
- <path
- sodipodi:type="arc"
- style="opacity:0.7;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.75859177;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.75859177;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path40005"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="m 80.53125,502 a 2.5312502,2.5 0 1 1 -5.0625,0 2.5312502,2.5 0 1 1 5.0625,0 z"
- transform="matrix(1.3955004,0,0,1.2452423,115.18334,-141.72474)" />
+ transform="matrix(1.3955004,0,0,1.2452423,115.18334,-141.72474)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
<rect
rx="0.5078125"
ry="0.4910686"
@@ -70323,60 +69391,50 @@
height="9.0000038"
width="12.000035"
id="rect40008"
- style="opacity:0.25;fill:none;stroke:#ffffff;stroke-width:0.99999988;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:none;stroke:#ffffff;stroke-width:0.99999988;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
+ <ellipse
transform="matrix(1.5770887,0,0,1.5999841,100.49326,-321.69208)"
- d="m 80.53125,502 a 2.5312502,2.5 0 1 1 -5.0625,0 2.5312502,2.5 0 1 1 5.0625,0 z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path40010"
- style="opacity:0.25;fill:none;stroke:#000000;stroke-width:0.62952662;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient40922);stroke-width:0.97061968;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:none;stroke:#000000;stroke-width:0.62952662;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient40922);stroke-width:0.97061968;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path40012"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="m 80.53125,502 a 2.5312502,2.5 0 1 1 -5.0625,0 2.5312502,2.5 0 1 1 5.0625,0 z"
- transform="matrix(1.1794014,0,0,0.8999954,131.50687,28.952303)" />
- <path
+ transform="matrix(1.1794014,0,0,0.8999954,131.50687,28.952303)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
transform="matrix(1.1827463,0,0,1.2,131.2458,-119.90002)"
- d="m 80.53125,502 a 2.5312502,2.5 0 1 1 -5.0625,0 2.5312502,2.5 0 1 1 5.0625,0 z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path40014"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b3b3b3;stroke-width:0.83938956;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient40924);stroke-width:1.26754272;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b3b3b3;stroke-width:0.83938956;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient40924);stroke-width:1.26754272;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path40016"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="m 80.53125,502 a 2.5312502,2.5 0 1 1 -5.0625,0 2.5312502,2.5 0 1 1 5.0625,0 z"
- transform="matrix(0.790122,0,0,0.787736,161.87049,87.05649)" />
- <path
+ transform="matrix(0.790122,0,0,0.787736,161.87049,87.05649)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
transform="matrix(0.5963773,0,0,0.2000006,171.47609,375.5997)"
- d="m 80.53125,502 a 2.5312502,2.5 0 1 1 -5.0625,0 2.5312502,2.5 0 1 1 5.0625,0 z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path40020"
- style="fill:none;stroke:#999999;stroke-width:2.89550138;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 216.48394,475.5 0,-0.50001 c 0,-0.276 0.67629,-0.5 1.50958,-0.5 0.83329,0 1.50958,0.224 1.50958,0.5 l 0,0.50001"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#999999;stroke-width:2.89550138;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <path
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 216.48394,475.5 v -0.50001 c 0,-0.276 0.67629,-0.5 1.50958,-0.5 0.83329,0 1.50958,0.224 1.50958,0.5 V 475.5"
id="path40022"
sodipodi:nodetypes="csccc"
inkscape:connector-curvature="0" />
@@ -70386,16 +69444,16 @@
height="1"
width="2"
id="rect40024"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
y="477"
x="226"
height="1"
width="2"
id="rect40026"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:url(#radialGradient40926);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient40926);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate"
id="rect40028"
width="2"
height="1"
@@ -70407,47 +69465,39 @@
height="1"
width="1"
id="rect40030"
- style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:url(#radialGradient40928);stroke-width:0.67151165;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate" />
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#radialGradient40928);stroke-width:0.67151165;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path40032"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="m 80.53125,502 a 2.5312502,2.5 0 1 1 -5.0625,0 2.5312502,2.5 0 1 1 5.0625,0 z"
- transform="matrix(1.1827463,0,0,1.2,131.2458,-119.90002)" />
- <path
+ transform="matrix(1.1827463,0,0,1.2,131.2458,-119.90002)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
transform="matrix(0.8888868,0,0,0.8862026,154.16683,37.626266)"
- d="m 80.53125,502 a 2.5312502,2.5 0 1 1 -5.0625,0 2.5312502,2.5 0 1 1 5.0625,0 z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path40034"
- style="fill:url(#radialGradient40930);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient40930);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
id="path40036"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="m 80.53125,502 a 2.5312502,2.5 0 1 1 -5.0625,0 2.5312502,2.5 0 1 1 5.0625,0 z"
- transform="matrix(0.1975308,0,0,0.1999991,207.09261,381.10045)" />
- <path
- sodipodi:type="arc"
- style="opacity:0.7;fill:url(#radialGradient40932);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.98985863;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ transform="matrix(0.1975308,0,0,0.1999991,207.09261,381.10045)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:url(#radialGradient40932);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.98985863;marker:none;enable-background:accumulate"
id="path40043"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="m 80.53125,502 a 2.5312502,2.5 0 1 1 -5.0625,0 2.5312502,2.5 0 1 1 5.0625,0 z"
- transform="matrix(-0.8867575,0.06148883,-0.06130315,-0.8840797,323.44127,921.51187)" />
+ transform="matrix(-0.8867575,0.06148883,-0.06130315,-0.8840797,323.44127,921.51187)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
</g>
</g>
<g
@@ -70456,7 +69506,7 @@
style="display:inline;enable-background:new">
<rect
ry="1.2018067"
- style="opacity:0.4;fill:none;stroke:#fac900;stroke-width:4.00264168;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.39511889;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.4;fill:none;stroke:#fac900;stroke-width:4.00264168;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.39511871;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect25009-2"
width="3.0039635"
height="3"
@@ -70471,7 +69521,7 @@
height="3"
width="3.0039637"
id="rect25011-4"
- style="opacity:0.8;fill:none;stroke:#e6b800;stroke-width:2.00132084;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.39511889;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.8;fill:none;stroke:#e6b800;stroke-width:2.00132084;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.39511871;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
@@ -70486,13 +69536,13 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path25013-5"
- d="m 318.48945,276 1.25165,-0.25 1.50199,0 1.25162,0.25001 0,1.00005 -1.25162,0.24994 -1.50199,0 -1.25165,-0.24995 0,-1.00005 0,0 0,0 0,0 z"
+ d="m 318.48945,276 1.25165,-0.25 h 1.50199 l 1.25162,0.25001 v 1.00005 l -1.25162,0.24994 h -1.50199 l -1.25165,-0.24995 z"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccc"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 319.99139,278.50006 -0.25029,-1.25006 0,-1.5 0.2503,-1.25 1.00137,0 0.25032,1.25 0,1.5 -0.25033,1.25006 -1.00137,0 0,0 0,0 0,0 z"
+ d="M 319.99139,278.50006 319.7411,277.25 v -1.5 l 0.2503,-1.25 h 1.00137 l 0.25032,1.25 v 1.5 l -0.25033,1.25006 z"
id="path25015-1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -70501,10 +69551,10 @@
</g>
</g>
<g
- transform="translate(1,0)"
+ transform="translate(1)"
id="ICON_RENDER_RESULT">
<rect
- style="opacity:0.01000001;fill:#2affd5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#2affd5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect36514"
width="16"
height="16"
@@ -70512,8 +69562,8 @@
y="472" />
<path
sodipodi:nodetypes="ccccc"
- style="fill:url(#linearGradient36549);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 110.5,472.5 13.98222,2e-5 0,14.96443 -13.98222,-2e-5 0,-14.96443 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient36549);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 110.5,472.5 13.98222,2e-5 v 14.96443 l -13.98222,-2e-5 z"
id="path36516"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -70524,12 +69574,12 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path36518"
- d="m 111.49999,485.48369 0,-11.00155 10.99999,0"
+ d="m 111.49999,485.48369 v -11.00155 h 10.99999"
style="fill:none;stroke:#ffffff;stroke-width:0.9999997px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
style="opacity:0.25;fill:url(#radialGradient36551);fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 112,474 11,0 0,11 -11,0 0,-11 z"
+ d="m 112,474 h 11 v 11 h -11 z"
id="path36521"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -70542,12 +69592,12 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path36523"
- d="m 112.5,474.5 9.98224,0 0,10 -9.98224,0 0,-10 z"
- style="fill:url(#linearGradient36553);fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 112.5,474.5 h 9.98224 v 10 H 112.5 Z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient36553);fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.5;fill:none;stroke:#4d4d4d;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 112.5,484.5 0,-10 9.98224,0"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:none;stroke:#4d4d4d;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 112.5,484.5 v -10 h 9.98224"
id="path36525"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -70556,108 +69606,90 @@
inkscape:connector-curvature="0" />
<g
id="g39496">
- <path
+ <circle
transform="matrix(0.2498674,0,0,0.249916,83.518554,451.9933)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient36555);stroke-width:4.00173378;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient36555);stroke-width:4.00173378;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path36527"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
<path
sodipodi:nodetypes="cccsccc"
id="path36529"
- d="m 119,475.50001 c -1.44825,0 -1.50029,0.42731 -1.50029,0.85462 l 2.2e-4,4.27306 c 0,0.85461 0.052,0.85461 1.50029,0.85461 1.44823,0 1.49984,0.0467 1.49984,-0.85461 l 0,-4.27306 c 0,-0.42731 -0.0518,-0.85462 -1.50006,-0.85462 z"
- style="fill:url(#linearGradient36557);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 119,475.50001 c -1.44825,0 -1.50029,0.42731 -1.50029,0.85462 l 2.2e-4,4.27306 c 0,0.85461 0.052,0.85461 1.50029,0.85461 1.44823,0 1.49984,0.0467 1.49984,-0.85461 v -4.27306 c 0,-0.42731 -0.0518,-0.85462 -1.50006,-0.85462 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient36557);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient36559);stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 118.99995,475.50001 c -1.44821,0 -1.50025,0.42731 -1.50025,0.85461 l 2.2e-4,4.27306 c 0,0.85462 0.052,0.85462 1.50025,0.85462 1.44821,0 1.49982,0.0467 1.49982,-0.85462 l 0,-4.27306 c 0,-0.4273 -0.0518,-0.85461 -1.50004,-0.85461 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient36559);stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 118.99995,475.50001 c -1.44821,0 -1.50025,0.42731 -1.50025,0.85461 l 2.2e-4,4.27306 c 0,0.85462 0.052,0.85462 1.50025,0.85462 1.44821,0 1.49982,0.0467 1.49982,-0.85462 v -4.27306 c 0,-0.4273 -0.0518,-0.85461 -1.50004,-0.85461 z"
id="path36531"
sodipodi:nodetypes="cccsccc"
inkscape:connector-curvature="0" />
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path36533"
style="fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none"
- sodipodi:type="arc"
- transform="matrix(0.1876323,0,0,0.1876688,91.733582,459.33847)" />
- <path
+ transform="matrix(0.1876323,0,0,0.1876688,91.733582,459.33847)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path36535"
- style="fill:#ffffff;stroke:url(#linearGradient36561);stroke-width:12.91347408;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.1154571,0,0,0.1168626,101.25809,467.69987)" />
+ style="fill:#ffffff;stroke:url(#linearGradient36561);stroke-width:12.91347408;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.1154571,0,0,0.1168626,101.25809,467.69987)"
+ cx="132"
+ cy="118"
+ r="8" />
<g
style="opacity:0.7"
id="g36537">
- <path
+ <circle
transform="matrix(1.1428645,0,0,1.1428645,-416.36057,256.4986)"
- d="m 466.25,192.5 a 1.75,1.75 0 0 1 -1.75,1.75 1.75,1.75 0 0 1 -1.75,-1.75 1.75,1.75 0 0 1 1.75,-1.75 1.75,1.75 0 0 1 1.75,1.75 z"
- sodipodi:ry="1.75"
- sodipodi:rx="1.75"
- sodipodi:cy="192.5"
- sodipodi:cx="464.5"
id="path36539"
- style="opacity:0.15;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffdd55;stroke-width:0.87499446;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="fill:#ffd42a;fill-opacity:1;fill-rule:nonzero;stroke:#ffd42a;stroke-width:1.74999654;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.15;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffdd55;stroke-width:0.87499446;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="464.5"
+ cy="192.5"
+ r="1.75" />
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffd42a;fill-opacity:1;fill-rule:nonzero;stroke:#ffd42a;stroke-width:1.74999654;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path36541"
- sodipodi:cx="464.5"
- sodipodi:cy="192.5"
- sodipodi:rx="1.75"
- sodipodi:ry="1.75"
- d="m 466.25,192.5 a 1.75,1.75 0 0 1 -1.75,1.75 1.75,1.75 0 0 1 -1.75,-1.75 1.75,1.75 0 0 1 1.75,-1.75 1.75,1.75 0 0 1 1.75,1.75 z"
- transform="matrix(0.5714297,0,0,0.5714297,-150.92912,366.49979)" />
+ transform="matrix(0.5714297,0,0,0.5714297,-150.92912,366.49979)"
+ cx="464.5"
+ cy="192.5"
+ r="1.75" />
<rect
y="476"
x="113.99994"
height="1"
width="1"
id="rect36543"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
</g>
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate"
id="rect36545"
width="2"
height="1"
x="118"
y="476" />
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path36547"
- style="fill:none;stroke:url(#linearGradient36563);stroke-width:4.00173378;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.2498674,0,0,0.249916,83.518554,451.9933)" />
+ style="fill:none;stroke:url(#linearGradient36563);stroke-width:4.00173378;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.2498674,0,0,0.249916,83.518554,451.9933)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
@@ -70670,12 +69702,12 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccccc"
id="path39241"
- d="m 756.16666,204.50001 10.33334,0 0,14.99999 -13,0 -10e-6,-11.99999 2.66667,-3 z"
- style="fill:url(#linearGradient39254);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline"
+ d="M 756.16666,204.50001 H 766.5 V 219.5 h -13 l -10e-6,-11.99999 z"
+ style="display:inline;fill:url(#linearGradient39254);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.3;fill:url(#radialGradient39256);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 756.16666,204.50001 10.33334,0 0,14.99999 -13,0 -10e-6,-11.99999 2.66667,-3 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:url(#radialGradient39256);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="M 756.16666,204.50001 H 766.5 V 219.5 h -13 l -10e-6,-11.99999 z"
id="path39243"
sodipodi:nodetypes="cccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -70684,13 +69716,13 @@
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
- d="m 754.5,209 0,9.5 m 3.5,-13 7.5,0"
- style="fill:none;stroke:url(#linearGradient39258);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="m 754.5,209 v 9.5 m 3.5,-13 h 7.5"
+ style="display:inline;fill:none;stroke:url(#linearGradient39258);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
id="path39245"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
- d="m 753,208 4,0 0,-4 -4,4 z"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="m 753,208 h 4 v -4 z"
id="path39247"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
@@ -70698,14 +69730,14 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 753.5,207.00001 0,12.49999 13,0 0,-14.99999 -10.5,0 -2.5,2.5 z"
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 753.5,207.00001 V 219.5 h 13 V 204.50001 H 756 Z"
+ style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path39249"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
id="path39251"
- d="m 757.5,206.5 0,2 -2,0"
+ d="m 757.5,206.5 v 2 h -2"
style="fill:none;stroke:url(#linearGradient39260);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
@@ -70714,8 +69746,8 @@
id="ICON_FILE"
style="display:inline;enable-background:new">
<path
- style="fill:url(#linearGradient36657);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline"
- d="m 756.16666,204.50001 10.33334,0 0,14.99999 -13,0 -10e-6,-11.99999 2.66667,-3 z"
+ style="display:inline;fill:url(#linearGradient36657);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
+ d="M 756.16666,204.50001 H 766.5 V 219.5 h -13 l -10e-6,-11.99999 z"
id="path36641"
sodipodi:nodetypes="cccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -70728,45 +69760,45 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccccc"
id="path36643"
- d="m 756.16666,204.50001 10.33334,0 0,14.99999 -13,0 -10e-6,-11.99999 2.66667,-3 z"
- style="opacity:0.3;fill:url(#radialGradient36659);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 756.16666,204.50001 H 766.5 V 219.5 h -13 l -10e-6,-11.99999 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:url(#radialGradient36659);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
id="path36646"
- style="fill:none;stroke:url(#linearGradient36661);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;display:inline"
- d="m 754.5,209 0,9.5 m 3.5,-13 7.5,0"
+ style="display:inline;fill:none;stroke:url(#linearGradient36661);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 754.5,209 v 9.5 m 3.5,-13 h 7.5"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
id="path36649"
- d="m 753,208 4,0 0,-4 -4,4 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+ d="m 753,208 h 4 v -4 z"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccc"
id="path36653"
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 753.5,207.00001 0,12.49999 13,0 0,-14.99999 -10.5,0 -2.5,2.5 z"
+ style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 753.5,207.00001 V 219.5 h 13 V 204.50001 H 756 Z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:url(#linearGradient36663);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
- d="m 757.5,206.5 0,2 -2,0"
+ d="m 757.5,206.5 v 2 h -2"
id="path36655"
inkscape:connector-curvature="0" />
</g>
<g
id="ICON_GHOST_DISABLED"
- transform="translate(-42,0)">
+ transform="translate(-42)">
<g
transform="matrix(-1,0,0,1,887,548.02778)"
- style="opacity:0.8;display:inline;enable-background:new"
+ style="display:inline;opacity:0.8;enable-background:new"
id="g36742">
<rect
- style="opacity:0;fill:#aaccff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.4000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#aaccff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.4000001;marker:none;enable-background:accumulate"
id="rect36744"
width="16"
height="16"
@@ -70777,13 +69809,13 @@
<path
sodipodi:nodetypes="csccccccccsssc"
id="path36748"
- d="m 500.5,34.5 0,5 c 0,1.666667 0.25,1.75 1,3.25 l -1.25,1.75 -1.75,-1.75 -1.75,1.75 -0.5,0 -1.75,-1.75 -1.75,1.75 -1,0 C 491,43 490.5,42.416667 490.5,40.75 l 0,-6.25 c 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill:url(#linearGradient37132);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 500.5,34.5 v 5 c 0,1.666667 0.25,1.75 1,3.25 l -1.25,1.75 -1.75,-1.75 -1.75,1.75 h -0.5 l -1.75,-1.75 -1.75,1.75 h -1 C 491,43 490.5,42.416667 490.5,40.75 V 34.5 c 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient37132);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- d="m 495.5,30.375 c -2.28774,0 -4.125,1.837258 -4.125,4.125 l 0,6.25 c 0,0.74605 0.0978,1.170828 0.28125,1.625 0.13101,0.324408 0.38353,0.789244 0.625,1.25 l 0.0937,0 1.5,-1.5 a 0.87292083,0.87292083 0 0 1 1.25,0 l 1.375,1.375 1.375,-1.375 a 0.87292083,0.87292083 0 0 1 1.1875,-0.03125 l 1.375,1.21875 0.1875,-0.1875 0,-0.4375 C 500.24057,42.152166 499.91254,41.661109 499.78125,41.125 499.62101,40.470677 499.625,39.833334 499.625,39 l 0,-4.5 c 0,-2.287742 -1.83726,-4.125 -4.125,-4.125 z"
+ d="m 495.5,30.373047 c -2.28774,0 -4.12695,1.839211 -4.12695,4.126953 v 6.25 c 0,0.74605 0.0959,1.157156 0.27929,1.611328 0.13282,0.328869 0.39058,0.795597 0.63672,1.265625 h 0.0996 l 1.49414,-1.494141 a 0.87292083,0.87292083 0 0 1 1.23438,0 l 1.38281,1.382813 1.38281,-1.382813 a 0.87292083,0.87292083 0 0 1 1.19141,-0.03906 l 1.38672,1.210938 0.16601,-0.166016 v -0.449219 c -0.3818,-0.532877 -0.71885,-1.042237 -0.84961,-1.576172 C 499.6171,40.458958 499.62695,39.833334 499.62695,39 v -4.5 c 0,-2.287742 -1.83921,-4.126953 -4.12695,-4.126953 z"
id="path36750"
- style="fill:none;stroke:url(#linearGradient37134);stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient37134);stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:original="M 495.5 29.5 C 492.74 29.5 490.5 31.74 490.5 34.5 L 490.5 40.75 C 490.5 42.416667 491 43 491.75 44.5 L 492.75 44.5 L 494.5 42.75 L 496.25 44.5 L 496.75 44.5 L 498.5 42.75 L 500.5 44.5 L 501.5 43.5 L 501.5 42.5 C 500.5 41.25 500.5 40.666667 500.5 39 L 500.5 34.5 C 500.5 31.74 498.26 29.5 495.5 29.5 z "
inkscape:radius="-0.87283355"
sodipodi:type="inkscape:offset" />
@@ -70793,13 +69825,13 @@
<path
sodipodi:nodetypes="cccc"
style="fill:#000000;fill-rule:evenodd;stroke:none"
- d="m 493,43.75 c 0,-0.212963 0,-5.75 0,-5.75 l 1.5,4.472222 L 493,43.75 z"
+ d="m 493,43.75 c 0,-0.212963 0,-5.75 0,-5.75 l 1.5,4.472222 z"
id="path36754"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path36756"
- d="m 497,44 c 0,-0.203703 -1,-6 -1,-6 l 2,3.428571 0,1.714286 L 497,44 z"
+ d="m 497,44 c 0,-0.203703 -1,-6 -1,-6 l 2,3.428571 v 1.714286 z"
style="fill:#000000;fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
</g>
@@ -70810,38 +69842,38 @@
<path
sodipodi:nodetypes="ccccc"
id="path36760"
- d="m 493,43.75 c 0,-0.212963 1,-6 1,-6 l 1,5 -1,1 -1,0 z"
+ d="m 493,43.75 c 0,-0.212963 1,-6 1,-6 l 1,5 -1,1 z"
style="fill:#ffffff;fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
style="fill:#ffffff;fill-rule:evenodd;stroke:none"
- d="m 497,43.75 c 0,-0.203703 0,-6 0,-6 l 2,5 -1,1 -1,0 z"
+ d="m 497,43.75 c 0,-0.203703 0,-6 0,-6 l 2,5 -1,1 z"
id="path36762"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
style="fill:#ffffff;fill-rule:evenodd;stroke:none"
- d="m 490,43.25 c 0,-0.212963 1.5,-6.25 1.5,-6.25 l 0.5,5.5 -2,0.75 z"
+ d="m 490,43.25 c 0,-0.212963 1.5,-6.25 1.5,-6.25 l 0.5,5.5 z"
id="path36764"
inkscape:connector-curvature="0" />
</g>
<path
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 500.5,34.5 0,4.5 c 0,1.666667 0,2.25 1,3.5 l 0,1 -1,1 -2,-1.75 -1.75,1.75 -0.5,0 -1.75,-1.75 -1.75,1.75 -0.5,0 C 491,43 490.5,43.166667 490.5,41.5 l 0,-7 c 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 500.5,34.5 V 39 c 0,1.666667 0,2.25 1,3.5 v 1 l -1,1 -2,-1.75 -1.75,1.75 h -0.5 l -1.75,-1.75 -1.75,1.75 h -0.5 C 491,43 490.5,43.166667 490.5,41.5 v -7 c 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
id="path36766"
sodipodi:nodetypes="cscccccccccsssc"
inkscape:connector-curvature="0" />
<path
id="path36768"
- d="m 56,139 0,1 -1,0 0,1 2,0 0,-2 -1,0 z"
- style="opacity:0.8;fill:url(#linearGradient37136);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline;enable-background:new"
+ d="m 56,139 v 1 h -1 v 1 h 2 v -2 z"
+ style="display:inline;opacity:0.8;fill:url(#linearGradient37136);fill-opacity:1;fill-rule:evenodd;stroke:none;enable-background:new"
sodipodi:nodetypes="ccccccc"
transform="translate(441,-105)"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.8;fill:url(#linearGradient37138);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline;enable-background:new"
- d="m 51,139 0,2 2,0 0,-1 -1,0 0,-1 -1,0 z"
+ style="display:inline;opacity:0.8;fill:url(#linearGradient37138);fill-opacity:1;fill-rule:evenodd;stroke:none;enable-background:new"
+ d="m 51,139 v 2 h 2 v -1 h -1 v -1 z"
id="path36770"
sodipodi:nodetypes="ccccccc"
transform="translate(441,-105)"
@@ -70849,7 +69881,7 @@
</g>
</g>
<path
- style="opacity:0.65;fill:#000000;fill-rule:evenodd;stroke:#2b0000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
+ style="display:inline;opacity:0.65;fill:#000000;fill-rule:evenodd;stroke:#2b0000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
d="m 385.5,578.5 12,12"
id="path36738"
sodipodi:nodetypes="cc"
@@ -70858,7 +69890,7 @@
sodipodi:nodetypes="cc"
id="path36740"
d="m 385.5,578.5 12,12"
- style="fill:none;stroke:#ff5555;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ff5555;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
inkscape:connector-curvature="0" />
</g>
<g
@@ -70873,16 +69905,16 @@
height="16"
width="16"
id="rect37055"
- style="opacity:0.01000001;fill:#2affd5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#2affd5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<g
- transform="matrix(0.9778614,0.2092535,-0.2092535,0.9778614,137.19272,32.846168)"
+ transform="rotate(12.078609,-86.634332,664.79501)"
style="display:inline;enable-background:new"
id="g37057"
inkscape:transform-center-x="6.529123"
inkscape:transform-center-y="4.2273311">
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -98.435716,459.41623 9.935716,0.0838 0,10.99997 -9.935716,-0.0838 0,-10.99997 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M -98.435716,459.41623 -88.5,459.50003 V 470.5 l -9.935716,-0.0838 z"
id="path37059"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -70893,51 +69925,48 @@
sodipodi:type="inkscape:offset"
inkscape:radius="-0.8656081"
inkscape:original="M -98.4375 459.40625 L -98.4375 470.40625 L -88.5 470.5 L -88.5 459.5 L -98.4375 459.40625 z "
- style="fill:url(#linearGradient37089);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient37089);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path37061"
- d="m -97.5625,460.28125 0,9.25 8.1875,0.0937 0,-9.25 -8.1875,-0.0937 z" />
+ d="m -97.572266,460.2793 v 9.26953 l 8.207032,0.0781 v -9.26953 z" />
</g>
<g
id="g37063"
style="display:inline;enable-background:new"
- transform="translate(38.999989,0)">
+ transform="translate(38.999989)">
<path
sodipodi:nodetypes="ccccc"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path37065"
- d="m -99.499989,459.50003 10.999989,-10e-6 0,10.99997 -10.999989,10e-6 0,-10.99997 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M -99.499989,459.50003 -88.5,459.50002 v 10.99997 l -10.999989,10e-6 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.5;fill:url(#linearGradient37091);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -97.999989,461 7.99998,0 0,8 -7.99998,0 0,-8 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:url(#linearGradient37091);fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -97.999989,461 h 7.99998 v 8 h -7.99998 z"
id="path37067"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
- <path
+ <circle
transform="matrix(0.5714297,0,0,0.5714297,-362.92909,351.49978)"
- d="m 466.25,192.5 a 1.75,1.75 0 0 1 -1.75,1.75 1.75,1.75 0 0 1 -1.75,-1.75 1.75,1.75 0 0 1 1.75,-1.75 1.75,1.75 0 0 1 1.75,1.75 z"
- sodipodi:ry="1.75"
- sodipodi:rx="1.75"
- sodipodi:cy="192.5"
- sodipodi:cx="464.5"
id="path37069"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#d4aa00;stroke-width:1.74999654;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#d4aa00;stroke-width:1.74999654;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="464.5"
+ cy="192.5"
+ r="1.75" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path37071"
- d="m -98.49992,460.49999 9.00002,0 0,9.00003 -9.00002,0 0,-9.00003 z"
- style="fill:none;stroke:url(#linearGradient37093);stroke-width:0.99999952px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -98.49992,460.49999 h 9.00002 v 9.00003 h -9.00002 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient37093);stroke-width:0.99999952px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<rect
- style="fill:#ffe680;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffe680;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37073"
width="1"
height="1"
@@ -70949,9 +69978,9 @@
height="5"
width="3"
id="rect37075"
- style="fill:url(#linearGradient37096);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient37096);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:none;stroke:url(#linearGradient37098);stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient37098);stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect37077"
width="3"
height="5"
@@ -70960,25 +69989,22 @@
rx="0.46547449"
ry="0.46547449" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37079"
width="2"
height="1"
x="-94.000008"
y="462" />
- <path
+ <circle
transform="matrix(0.1904433,0,0,0.1904803,-120.13881,444.5233)"
- sodipodi:type="arc"
- style="fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:#4d4d4d;stroke-width:5.25039816;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:#4d4d4d;stroke-width:5.25039816;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path37081"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
<rect
ry="0.46547449"
rx="0.46547449"
@@ -70987,33 +70013,27 @@
height="5"
width="3"
id="rect37083"
- style="fill:none;stroke:url(#linearGradient37100);stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient37100);stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
+ <circle
transform="matrix(0.07365497,0,0,0.07463961,-104.72475,458.19728)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient37102);stroke-width:20.23044777;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient37102);stroke-width:20.23044777;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path37085"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path37087"
- style="fill:none;stroke:url(#linearGradient37104);stroke-width:5.25039816;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.1904433,0,0,0.1904803,-120.13881,444.5233)" />
+ style="fill:none;stroke:url(#linearGradient37104);stroke-width:5.25039816;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.1904433,0,0,0.1904803,-120.13881,444.5233)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
@@ -71026,8 +70046,8 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccccc"
id="path37516"
- d="m 757.01257,204.46121 9.48743,0.0388 0,14.99999 -13,0 0.0126,-11.53879 3.5,-3.5 -3e-5,0 z"
- style="fill:#dcdcdc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline"
+ d="m 757.01257,204.46121 9.48743,0.0388 V 219.5 h -13 l 0.0126,-11.53879 3.5,-3.5 z"
+ style="display:inline;fill:#dcdcdc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
inkscape:connector-curvature="0" />
<g
id="g37518"
@@ -71036,7 +70056,7 @@
<g
id="g37520">
<rect
- style="fill:#e9afaf;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#e9afaf;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect37522"
width="9.9999914"
height="12"
@@ -71048,38 +70068,38 @@
height="4.9999976"
width="9.9999924"
id="rect37524"
- style="opacity:0.5;fill:#4b7fcd;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#4b7fcd;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
y="94"
x="-83"
height="6.8499999"
width="9.9999914"
id="rect37526"
- style="opacity:0.3;fill:url(#radialGradient37553);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:url(#radialGradient37553);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="cccccccccccc"
id="path37528"
- d="m -83,100.00002 1,0 1,0.74999 1,-0.74999 1,0.99999 2,0 1.5,-0.75 1.5,0.75 0.999991,0 L -73,102 l -9.999991,0 -9e-6,-1.99998 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -83,100.00002 h 1 l 1,0.74999 1,-0.74999 1,0.99999 h 2 l 1.5,-0.75 1.5,0.75 h 0.999991 L -73,102 h -9.999991 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.1;marker:none;enable-background:accumulate"
id="rect37530"
width="2.0000029"
height="2.0000038"
x="-77"
y="96" />
<path
- style="opacity:0.3;fill:#2b0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -83,102 10,0 0,1 -10,0 0,-1 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:#2b0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
+ d="m -83,102 h 10 v 1 h -10 z"
id="path37532"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path37534"
- d="m -77,102 2.000003,0 -0.750003,4 -0.5,0 -0.75,-4 z"
- style="opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -77,102 h 2.000003 L -75.75,106 h -0.5 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -71090,19 +70110,19 @@
<path
sodipodi:nodetypes="ccc"
id="path37538"
- d="m -82.5,105.5 0,-11 9,0"
- style="opacity:0.25;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;display:inline;enable-background:new"
+ d="m -82.5,105.5 v -11 h 9"
+ style="display:inline;opacity:0.25;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;enable-background:new"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.2;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;display:inline;enable-background:new"
- d="m -82.5,105.5 0,-11 9,0 0,11 -9,0 z"
+ style="display:inline;opacity:0.2;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;enable-background:new"
+ d="m -82.5,105.5 v -11 h 9 v 11 z"
id="path37540"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
</g>
<path
- style="opacity:0.5;fill:url(#radialGradient37555);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 757.51257,204.46121 9,1e-5 0,14.99999 -13,0 0,-11 4,-4 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:url(#radialGradient37555);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 757.51257,204.46121 9,1e-5 v 14.99999 h -13 v -11 z"
id="path37542"
sodipodi:nodetypes="cccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -71112,12 +70132,12 @@
<path
sodipodi:nodetypes="cccc"
d="M 754.51257,209.96121 754.5,218.5 M 759.01257,205.46121 765.5,205.5"
- style="opacity:0.1;fill:none;stroke:url(#linearGradient37558);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ style="display:inline;opacity:0.1;fill:none;stroke:url(#linearGradient37558);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
id="path37544"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
- d="m 753.01257,208.96121 5,0 0,-5 -5,5 z"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="m 753.01257,208.96121 h 5 v -5 z"
id="path37546"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
@@ -71125,15 +70145,15 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="M 753.51257,207.96121 753.5,219.5 l 13,0 0,-14.99999 -9.48743,-0.0388 -3.5,3.5 z"
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 753.51257,207.96121 753.5,219.5 h 13 v -14.99999 l -9.48743,-0.0388 z"
+ style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path37549"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path37551"
- d="m 758.51257,206.46121 0,3 -3,0"
+ d="m 758.51257,206.46121 v 3 h -3"
style="fill:none;stroke:url(#linearGradient37561);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
@@ -71147,8 +70167,8 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccccc"
id="path37516-1"
- d="m 757.01257,204.46121 9.48743,0.0388 0,14.99999 -13,0 0.0126,-11.53879 3.5,-3.5 -3e-5,0 z"
- style="fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline"
+ d="m 757.01257,204.46121 9.48743,0.0388 V 219.5 h -13 l 0.0126,-11.53879 3.5,-3.5 z"
+ style="display:inline;fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
inkscape:connector-curvature="0" />
<g
id="g37518-1"
@@ -71157,7 +70177,7 @@
<g
id="g37520-3">
<rect
- style="fill:#ebb5b5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ebb5b5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect37522-8"
width="9.9999914"
height="12"
@@ -71169,38 +70189,38 @@
height="4.9999976"
width="9.9999924"
id="rect37524-7"
- style="opacity:0.5;fill:#4b80cd;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#4b80cd;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
y="94"
x="-83"
height="6.8499999"
width="9.9999914"
id="rect37526-4"
- style="opacity:0.3;fill:url(#radialGradient37553-2);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:url(#radialGradient37553-2);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="cccccccccccc"
id="path37528-2"
- d="m -83,100.00002 1,0 1,0.74999 1,-0.74999 1,0.99999 2,0 1.5,-0.75 1.5,0.75 0.999991,0 L -73,102 l -9.999991,0 -9e-6,-1.99998 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -83,100.00002 h 1 l 1,0.74999 1,-0.74999 1,0.99999 h 2 l 1.5,-0.75 1.5,0.75 h 0.999991 L -73,102 h -9.999991 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.1;marker:none;enable-background:accumulate"
id="rect37530-7"
width="2.0000029"
height="2.0000038"
x="-77"
y="96" />
<path
- style="opacity:0.3;fill:#280b0b;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -83,102 10,0 0,1 -10,0 0,-1 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:#280b0b;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
+ d="m -83,102 h 10 v 1 h -10 z"
id="path37532-7"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path37534-9"
- d="m -77,102 2.000003,0 -0.750003,4 -0.5,0 -0.75,-4 z"
- style="opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -77,102 h 2.000003 L -75.75,106 h -0.5 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -71211,19 +70231,19 @@
<path
sodipodi:nodetypes="ccc"
id="path37538-1"
- d="m -82.5,105.5 0,-11 9,0"
- style="opacity:0.25;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;display:inline;enable-background:new"
+ d="m -82.5,105.5 v -11 h 9"
+ style="display:inline;opacity:0.25;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;enable-background:new"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.2;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;display:inline;enable-background:new"
- d="m -82.5,105.5 0,-11 9,0 0,11 -9,0 z"
+ style="display:inline;opacity:0.2;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;enable-background:new"
+ d="m -82.5,105.5 v -11 h 9 v 11 z"
id="path37540-9"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
</g>
<path
- style="opacity:0.5;fill:url(#radialGradient37555-5);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 757.51257,204.46121 9,1e-5 0,14.99999 -13,0 0,-11 4,-4 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:url(#radialGradient37555-5);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 757.51257,204.46121 9,1e-5 v 14.99999 h -13 v -11 z"
id="path37542-8"
sodipodi:nodetypes="cccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -71233,12 +70253,12 @@
<path
sodipodi:nodetypes="cccc"
d="M 754.51257,209.96121 754.5,218.5 M 759.01257,205.46121 765.5,205.5"
- style="fill:none;stroke:url(#linearGradient37558-8);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient37558-8);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
id="path37544-6"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
- d="m 753.01257,208.96121 5,0 0,-5 -5,5 z"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="m 753.01257,208.96121 h 5 v -5 z"
id="path37546-5"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
@@ -71246,15 +70266,15 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="M 753.51257,207.96121 753.5,219.5 l 13,0 0,-14.99999 -9.48743,-0.0388 -3.5,3.5 z"
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 753.51257,207.96121 753.5,219.5 h 13 v -14.99999 l -9.48743,-0.0388 z"
+ style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path37549-0"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path37551-2"
- d="m 758.51257,206.46121 0,3 -3,0"
+ d="m 758.51257,206.46121 v 3 h -3"
style="fill:none;stroke:url(#linearGradient37610-3);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
@@ -71267,13 +70287,13 @@
height="16"
width="16"
id="rect71822"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="translate(167.99999,-62.999991)"
id="g71824">
<rect
ry="0"
- style="fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect71826"
width="13.016124"
height="12.953857"
@@ -71285,17 +70305,17 @@
height="11.046139"
width="11.000001"
id="rect71828"
- style="fill:url(#linearGradient71834);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00207269;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient71834);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00207269;marker:none;enable-background:accumulate"
ry="0" />
<path
- style="fill:url(#linearGradient71836);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 49,430 0,3 3,0 0,-3 -3,0 z m 3,3 0,3 3,0 0,-3 -3,0 z m 3,0 3,0 0,-3 -3,0 0,3 z m 3,0 0,3 3,0 0,-3 -3,0 z m 0,3 -3,0 0,3 3,0 0,-3 z m 0,3 0,3 3,0 0,-3 -3,0 z m -3,0 -3,0 0,3 3,0 0,-3 z m -3,0 0,-3 -3,0 0,3 3,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient71836);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 49,430 v 3 h 3 v -3 z m 3,3 v 3 h 3 v -3 z m 3,0 h 3 v -3 h -3 z m 3,0 v 3 h 3 v -3 z m 0,3 h -3 v 3 h 3 z m 0,3 v 3 h 3 v -3 z m -3,0 h -3 v 3 h 3 z m -3,0 v -3 h -3 v 3 z"
id="path71830"
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccc"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:url(#linearGradient71838);stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 60.517703,430.5 -11.017704,0 0,11 11.017704,0 0,-11"
+ d="M 60.517703,430.5 H 49.499999 v 11 h 11.017704 v -11"
id="path71832"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
@@ -71304,7 +70324,7 @@
<g
id="ICON_PACKAGE">
<rect
- style="opacity:0;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;enable-background:accumulate"
id="rect37119"
width="16"
height="16"
@@ -71312,8 +70332,8 @@
y="493" />
<path
inkscape:connector-curvature="0"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#2a2512;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 490.00015,501 7,-3 6,2.5 0,3.74998 -6.99999,3.74999 -6.00001,-3.24999 0,-3.74998 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#2a2512;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 490.00015,501 7,-3 6,2.5 v 3.74998 l -6.99999,3.74999 -6.00001,-3.24999 z"
id="path37123"
sodipodi:nodetypes="ccccccc" />
<path
@@ -71323,23 +70343,23 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
sodipodi:nodetypes="ccccccc"
style="fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 490.00015,501 6,-2.5 6,2.5 0,0.5 -6,3 -6,-2.93442 0,-0.56558 z"
+ d="m 490.00015,501 6,-2.5 6,2.5 v 0.5 l -6,3 -6,-2.93442 z"
id="path37125" />
<path
inkscape:connector-curvature="0"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89207077px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 497.00015,501.25 0,-3.24998 -6.5,2.74998 3.5,1.75 3,-1.25 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89207077px;marker:none;enable-background:accumulate"
+ d="m 497.00015,501.25 v -3.24998 l -6.5,2.74998 3.5,1.75 z"
id="path37127"
sodipodi:nodetypes="ccccc" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc"
id="path37129"
- d="m 497.00015,501.24998 0,-3.24998 5.5,2.24998 -3.5,1.75 -2,-0.75 z"
- style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 497.00015,501.24998 V 498 l 5.5,2.24998 -3.5,1.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
@@ -71355,8 +70375,8 @@
style="display:inline;enable-background:new">
<path
inkscape:connector-curvature="0"
- style="fill:url(#linearGradient37317);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline"
- d="m 756.16666,204.50001 6.33334,-1e-5 0,11.24999 -9,1e-5 -10e-6,-8.24999 2.66667,-3 z"
+ style="display:inline;fill:url(#linearGradient37317);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
+ d="M 756.16666,204.50001 762.5,204.5 v 11.24999 l -9,1e-5 -10e-6,-8.24999 z"
id="path39241-6"
sodipodi:nodetypes="cccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -71369,39 +70389,39 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccccc"
id="path39243-8"
- d="M 756.16666,204.50001 762.5,204.75 l 0,10.75 -9,0 -10e-6,-7.99999 2.66667,-3 z"
- style="opacity:0.3;fill:url(#radialGradient37319);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="M 756.16666,204.50001 762.5,204.75 v 10.75 h -9 l -10e-6,-7.99999 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:url(#radialGradient37319);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
id="path39245-5"
- style="fill:none;stroke:url(#linearGradient37321);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;display:inline"
- d="m 754.5,209 0,5.5 m 3.5,-9 3.5,0"
+ style="display:inline;fill:none;stroke:url(#linearGradient37321);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 754.5,209 v 5.5 m 3.5,-9 h 3.5"
sodipodi:nodetypes="cccc" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc"
id="path39247-7"
- d="m 753,208 4,0 0,-4 -4,4 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" />
+ d="m 753,208 h 4 v -4 z"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc"
id="path39249-6"
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 753.5,207.00001 0,8.49999 9,0 0,-11 -6.5,1e-5 -2.5,2.5 z"
+ style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 753.5,207.00001 V 215.5 h 9 v -11 l -6.5,1e-5 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<path
inkscape:connector-curvature="0"
style="fill:none;stroke:url(#linearGradient37323);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
- d="m 757.5,206.5 0,2 -2,0"
+ d="m 757.5,206.5 v 2 h -2"
id="path39251-1" />
</g>
<path
inkscape:connector-curvature="0"
- style="opacity:0.7;fill:url(#linearGradient37338);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline"
- d="m 493.00015,494 7.99985,0 0,11 -7.99981,0 -4e-5,-11 0,0 0,0 0,0 z"
+ style="display:inline;opacity:0.7;fill:url(#linearGradient37338);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
+ d="M 493.00015,494 H 501 v 11 h -7.99981 z"
id="path37141"
sodipodi:nodetypes="ccccc" />
<path
@@ -71410,22 +70430,22 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
id="path37143"
- d="m 490.00016,504.74998 -10e-6,-3.24998 6,3 0.01,3.49883 -6.00995,-3.24885 -4e-5,0 z"
- style="fill:#c6b77c;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 490.00016,504.74998 -10e-6,-3.24998 6,3 0.01,3.49883 -6.00995,-3.24885 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#c6b77c;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc" />
<path
inkscape:connector-curvature="0"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
- style="fill:#595235;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 503.00015,504.25 0,-3.24998 -7,3.49998 c 0,2.58362 0,2.93288 0,3.49998 l 7,-3.74998 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#595235;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
+ d="m 503.00015,504.25 v -3.24998 l -7,3.49998 c 0,2.58362 0,2.93288 0,3.49998 z"
id="path37145"
sodipodi:nodetypes="ccccc" />
<path
inkscape:connector-curvature="0"
style="opacity:0.96000001;fill:none;stroke:url(#linearGradient37191);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
- d="m 490.50015,501.5 0,2.99998 5.5,3 6.5,-3.49998 0,-2.99998"
+ d="m 490.50015,501.5 v 2.99998 l 5.5,3 6.5,-3.49998 v -2.99998"
id="path37147"
sodipodi:nodetypes="ccccc" />
<path
@@ -71433,10 +70453,10 @@
sodipodi:nodetypes="ccc"
id="path37149"
d="m 490.50015,501.5 5.5,3 6.5,-3.5"
- style="fill:none;stroke:url(#linearGradient37188);stroke-width:1.14999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ style="fill:none;stroke:url(#linearGradient37188);stroke-width:1.14999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
- style="opacity:0.25;fill:none;stroke:#000000;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.25;fill:none;stroke:#000000;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 491.5,500.75 4.5,2.5 5.5,-3"
id="path38348"
sodipodi:nodetypes="ccc" />
@@ -71448,8 +70468,8 @@
transform="translate(-45.97248,412)"
id="g38319">
<path
- style="fill:url(#linearGradient38362);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 40.472488,166.25001 -1.250005,1.25 -12.483893,-1e-5 -1.25,-1.25 -5e-6,-11.75001 14.983898,1e-5 5e-6,11.75001 z"
+ style="fill:url(#linearGradient38362);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 40.472488,166.25001 -1.250005,1.25 -12.483893,-1e-5 -1.25,-1.25 -5e-6,-11.75001 14.983898,1e-5 z"
id="path38330"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -71461,8 +70481,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path38332"
- d="m 38.972483,166.00001 -10.250003,0 0,-1 10.250003,0 0,1 z"
- style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 38.972483,166.00001 H 28.72248 v -1 h 10.250003 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<g
@@ -71477,24 +70497,24 @@
height="8.9999962"
width="14.000007"
id="rect38338"
- style="fill:#d89090;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#d89090;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
- style="opacity:0.5;fill:#3771c8;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#3771c8;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect38340"
width="13.999992"
height="2.9999936"
x="-85"
y="103.00001" />
<rect
- style="opacity:0.3;fill:url(#radialGradient38364);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:url(#radialGradient38364);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect38342"
width="14"
height="8.8499966"
x="-85"
y="97.000008" />
<path
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -84.999997,101.00001 1.166667,0 1.166666,0.74999 1.166667,-0.74999 1.166666,0.99999 4.666666,1e-5 1.75,-0.75 1.75,0.75 1.166667,0 1e-5,0.99999 -13.999999,-1e-5 -10e-6,-1.99998 0,0 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
+ d="m -84.999997,101.00001 h 1.166667 l 1.166666,0.74999 1.166667,-0.74999 1.166666,0.99999 4.666666,1e-5 1.75,-0.75 1.75,0.75 h 1.166667 l 1e-5,0.99999 -13.999999,-1e-5 z"
id="path38344"
sodipodi:nodetypes="cccccccccccc"
inkscape:connector-curvature="0" />
@@ -71504,22 +70524,22 @@
height="2.0000038"
width="2.0000029"
id="rect38346"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.1;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="ccccc"
id="path38350"
- d="m -85,103.0089 14.061944,0 0,1 -14.061944,0 0,-1 z"
- style="opacity:0.3;fill:#280b0b;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -85,103.0089 h 14.061944 v 1 H -85 Z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:#280b0b;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
id="path38360"
- d="m -71.75,105.5 -12.5,0"
- style="opacity:0.7;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;display:inline;enable-background:new"
+ d="m -71.75,105.5 h -12.5"
+ style="display:inline;opacity:0.7;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;enable-background:new"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.4;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -77,103 2.000003,0 -0.750003,2.75 -0.5,0 L -77,103 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.4;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.1;marker:none;enable-background:accumulate"
+ d="m -77,103 h 2.000003 L -75.75,105.75 h -0.5 z"
id="path38352"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
@@ -71530,8 +70550,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path38354"
- d="m 39.472483,155.5 -13,0 0.01611,11 13.01389,-7e-5 -0.03,-10.99993 z"
- style="fill:none;stroke:url(#linearGradient38367);stroke-width:0.99999923px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 39.472483,155.5 h -13 l 0.01611,11 13.01389,-7e-5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient38367);stroke-width:0.99999923px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<rect
@@ -71543,7 +70563,7 @@
height="1.0000043"
width="1"
id="rect38356"
- style="fill:#d40000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#d40000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
</g>
<g
transform="translate(63,473)"
@@ -71559,13 +70579,13 @@
height="16"
width="16"
id="rect43314"
- style="opacity:0;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="translate(565,446)"
clip-path="url(#clipPath43368-7)"
id="g43300">
<rect
- style="fill:#4e83d0;fill-opacity:1;fill-rule:nonzero;stroke:#143564;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#4e83d0;fill-opacity:1;fill-rule:nonzero;stroke:#143564;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect43243"
width="6"
height="2"
@@ -71581,9 +70601,9 @@
height="2"
width="6"
id="rect43245"
- style="fill:#4e83d0;fill-opacity:1;fill-rule:nonzero;stroke:#143564;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#4e83d0;fill-opacity:1;fill-rule:nonzero;stroke:#143564;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ec0606;fill-opacity:1;fill-rule:nonzero;stroke:#910000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ec0606;fill-opacity:1;fill-rule:nonzero;stroke:#910000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect43262"
width="6"
height="2"
@@ -71594,24 +70614,24 @@
<path
sodipodi:nodetypes="cscscsc"
d="m -68.50037,45.540088 c 0,-2 -5,-2 -5,-4 0,-2.030484 5.00037,-2 4.99787,-4.040088 0.002,-2 -4.9975,-2 -4.9975,-4 0,-2.030484 5.005,-1.959912 5,-4 0,-2 -5,-2 -5,-4 0,-2.030484 5.00037,-2 4.99537,-4.040088"
- style="fill:none;stroke:#000000;stroke-width:2.9000001;stroke-miterlimit:4;stroke-dasharray:none;display:inline;enable-background:new"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:2.9000001;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new"
id="path43241"
inkscape:connector-curvature="0" />
<path
id="path41718"
- style="fill:none;stroke:#ffffff;stroke-width:1.39999998;stroke-miterlimit:4;stroke-dasharray:none;display:inline;enable-background:new"
+ style="display:inline;fill:none;stroke:#ffffff;stroke-width:1.39999998;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new"
d="m -68.50037,45.540088 c 0,-2 -5,-2 -5,-4 0,-2.030484 5.00037,-2 4.99787,-4.040088 0.002,-2 -4.9975,-2 -4.9975,-4 0,-2.030484 5.005,-1.959912 5,-4 0,-2 -5,-2 -5,-4 0,-2.030484 5.00037,-2 4.99537,-4.040088"
sodipodi:nodetypes="cscscsc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cscscsc"
d="m -68.50037,45.540088 c 0,-2 -5,-2 -5,-4 0,-2.030484 5.00037,-2 4.99787,-4.040088 0.002,-2 -4.9975,-2 -4.9975,-4 0,-2.030484 5.005,-1.959912 5,-4 0,-2 -5,-2 -5,-4 0,-2.030484 5.00037,-2 4.99537,-4.040088"
- style="opacity:0.35;fill:none;stroke:url(#radialGradient38734);stroke-width:1.39999998;stroke-miterlimit:4;stroke-dasharray:none;display:inline;enable-background:new"
+ style="display:inline;opacity:0.35;fill:none;stroke:url(#radialGradient38734);stroke-width:1.39999998;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new"
id="path43266"
inkscape:connector-curvature="0" />
<path
id="path43282"
- style="opacity:0.35;fill:none;stroke:url(#radialGradient38736);stroke-width:1.39999998;stroke-miterlimit:4;stroke-dasharray:none;display:inline;enable-background:new"
+ style="display:inline;opacity:0.35;fill:none;stroke:url(#radialGradient38736);stroke-width:1.39999998;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new"
d="m -68.50037,45.540088 c 0,-2 -5,-2 -5,-4 0,-2.030484 5.00037,-2 4.99787,-4.040088 0.002,-2 -4.9975,-2 -4.9975,-4 0,-2.030484 5.005,-1.959912 5,-4 0,-2 -5,-2 -5,-4 0,-2.030484 5.00037,-2 4.99537,-4.040088"
sodipodi:nodetypes="cscscsc"
inkscape:connector-curvature="0" />
@@ -71627,10 +70647,10 @@
height="4.9999909"
width="5.006597"
id="rect39640-1"
- style="opacity:0.25;fill:none;stroke:#fac900;stroke-width:4.00264168;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.39511889;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:none;stroke:#fac900;stroke-width:4.00264168;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.39511871;stroke-opacity:1;marker:none;enable-background:accumulate"
ry="1.2018067" />
<rect
- style="opacity:0.5;fill:none;stroke:#e6b800;stroke-width:2.00132084;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.39511889;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:none;stroke:#e6b800;stroke-width:2.00132084;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.39511871;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect39642-2"
width="5.0065966"
height="4.9999905"
@@ -71644,7 +70664,7 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path43508"
- d="m 317.98879,278 0,-3 1.00132,-1 3.00396,0 1.00132,1 0,3 -1.00132,1 -3.00396,0 -1.00132,-1 z"
+ d="m 317.98879,278 v -3 l 1.00132,-1 h 3.00396 l 1.00132,1 v 3 l -1.00132,1 h -3.00396 z"
style="opacity:0.8;fill:#dcb000;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<path
@@ -71680,7 +70700,7 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Pracownia\Moje dokumenty\Moje obrazy\BLENDER ICONS redesign\RELEASES\g22298.png"
transform="matrix(0,-1,-1,0,0,0)"
- style="opacity:0;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect22257"
width="16"
height="16"
@@ -71689,17 +70709,17 @@
<path
sodipodi:nodetypes="cccccc"
id="path22271"
- d="m 167.49999,535.50001 0,8 -9,0 0,-6 2,-2 7,0 z"
- style="fill:url(#linearGradient28603);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:30;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 167.49999,535.50001 v 8 h -9 v -6 l 2,-2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient28603);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:30;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
id="rect22281"
- d="m 166.99999,538.00001 -2,0 0,3 2,0 0,-3 z m -3,0 -1.75,0 -1.25,1.25 0,1.75 3,0 0,-3 z"
- style="fill:url(#linearGradient28600);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 166.99999,538.00001 h -2 v 3 h 2 z m -3,0 h -1.75 l -1.25,1.25 v 1.75 h 3 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient28600);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccccccc"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.75;fill:#f2f2f2;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.75;fill:#f2f2f2;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect22285"
width="1"
height="1"
@@ -71708,75 +70728,75 @@
transform="matrix(0,1,1,0,0,0)" />
<path
id="rect22287"
- d="m 166.99999,542.00001 -1,0 0,1 1,0 0,-1 z m -2,0 -1,0 0,1 1,0 0,-1 z"
- style="opacity:0.2;fill:#f2f2f2;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 166.99999,542.00001 h -1 v 1 h 1 z m -2,0 h -1 v 1 h 1 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:#f2f2f2;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
id="rect22291"
- d="m 166.99999,536.00001 -1,0 0,1 1,0 0,-1 z m -2,0 -1,0 0,1 1,0 0,-1 z m -2,0 -1,0 0,1 1,0 0,-1 z"
- style="opacity:0.8;fill:#f2f2f2;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 166.99999,536.00001 h -1 v 1 h 1 z m -2,0 h -1 v 1 h 1 z m -2,0 h -1 v 1 h 1 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.8;fill:#f2f2f2;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:30;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 158.74999,537.25001 4.75,4.75 0,1 -4.75,0 0,-5.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:30;marker:none;enable-background:accumulate"
+ d="m 158.74999,537.25001 4.75,4.75 v 1 h -4.75 z"
id="path22298"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
- style="fill:url(#linearGradient28593);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:30;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 152.49999,550.50001 0,-8 9,0 1.75,-1.5 0.25,0.5 0,7.75 -1.25,1.25 -9.75,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient28593);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:30;marker:none;enable-background:accumulate"
+ d="m 152.49999,550.50001 v -8 h 9 l 1.75,-1.5 0.25,0.5 v 7.75 l -1.25,1.25 z"
id="path22300"
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#000000;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 152.49999,550.50001 9.5,0 1.5,-1.5 0,-5.5 4,0 0,-8 -7,0 -2,2 0,5 -6,0 0,8 z"
+ style="fill:none;stroke:#000000;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 152.49999,550.50001 h 9.5 l 1.5,-1.5 v -5.5 h 4 v -8 h -7 l -2,2 v 5 h -6 z"
id="path22304"
sodipodi:nodetypes="ccccccccccc"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.9;fill:url(#linearGradient28589);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 162.99999,544.00001 -1,1 -1,0 0,3 0.75,0 1.25,-1.25 0,-2.75 z m -3,1 -3,0 0,3 3,0 0,-3 z m -4,0 -3,0 0,3 3,0 0,-3 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.9;fill:url(#linearGradient28589);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 162.99999,544.00001 -1,1 h -1 v 3 h 0.75 l 1.25,-1.25 z m -3,1 h -3 v 3 h 3 z m -4,0 h -3 v 3 h 3 z"
id="rect22308"
sodipodi:nodetypes="ccccccccccccccccc"
inkscape:connector-curvature="0" />
<path
id="rect22314"
- d="m 161.99999,549.00001 -1,0 0,1 1,0 0,-1 z m -2,0 -1,0 0,1 1,0 0,-1 z m -2,0 -1,0 0,1 1,0 0,-1 z m -2,0 -1,0 0,1 1,0 0,-1 z m -2,0 -1,0 0,1 1,0 0,-1 z"
- style="opacity:0.8;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 161.99999,549.00001 h -1 v 1 h 1 z m -2,0 h -1 v 1 h 1 z m -2,0 h -1 v 1 h 1 z m -2,0 h -1 v 1 h 1 z m -2,0 h -1 v 1 h 1 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.8;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
id="rect22322"
- d="m 161.99999,543.00001 -1,0 0,1 1,0 0,-1 z m -2,0 -1,0 0,1 1,0 0,-1 z m -2,0 -1,0 0,1 1,0 0,-1 z m -2,0 -1,0 0,1 1,0 0,-1 z m -2,0 -1,0 0,1 1,0 0,-1 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 161.99999,543.00001 h -1 v 1 h 1 z m -2,0 h -1 v 1 h 1 z m -2,0 h -1 v 1 h 1 z m -2,0 h -1 v 1 h 1 z m -2,0 h -1 v 1 h 1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.7;fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.39999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 160.99999,542.00001 0,-0.5 -2,-2 0,2.5 2,0 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.39999998;marker:none;enable-background:accumulate"
+ d="m 160.99999,542.00001 v -0.5 l -2,-2 v 2.5 z"
id="path22348"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
id="path22340"
- style="fill:none;stroke:url(#linearGradient28583);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 158.99999,542.50001 2.5,0 0,-1 -2.25,-2.25 m 4.25,4.25 0,-2 -3,-3 0.5,-0.5"
+ style="fill:none;stroke:url(#linearGradient28583);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 158.99999,542.50001 h 2.5 v -1 l -2.25,-2.25 m 4.25,4.25 v -2 l -3,-3 0.5,-0.5"
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:url(#linearGradient28580);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 162.49999,542.50001 -1,1 -8,0 0,6 8.25,0 1,-1"
+ d="m 162.49999,542.50001 -1,1 h -8 v 6 h 8.25 l 1,-1"
id="path22342"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
id="path22345"
style="fill:none;stroke:url(#linearGradient28577);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 164.49999,542.50001 2,0 0,-6 -5.5,0 -1.5,1.5 0,0.5 3,3 0,1"
+ d="m 164.49999,542.50001 h 2 v -6 h -5.5 l -1.5,1.5 v 0.5 l 3,3 v 1"
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
- d="m 160.74999,536.50001 -1.25,1.25 0,0.75 3,3 0,1"
+ d="m 160.74999,536.50001 -1.25,1.25 v 0.75 l 3,3 v 1"
style="fill:none;stroke:url(#linearGradient28574);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
id="path22368"
inkscape:connector-curvature="0" />
@@ -71786,7 +70806,7 @@
height="6.25"
width="1"
id="rect38915"
- style="opacity:0.4;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.4;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;enable-background:accumulate" />
</g>
<g
id="ICON_STICKY_UVS_VERT">
@@ -71798,11 +70818,11 @@
transform="translate(0.999999,1.000006)"
id="g37905">
<g
- style="opacity:0.6;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
transform="translate(-40.718137,21.311275)"
id="g37699">
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37701"
width="1"
height="1"
@@ -71814,9 +70834,9 @@
height="1"
width="0.99999899"
id="rect37703"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37705"
width="1"
height="1"
@@ -71828,16 +70848,16 @@
height="1"
width="1"
id="rect37707"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37709"
width="1"
height="1"
x="166.0161"
y="179.01379" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37869"
width="0.99999899"
height="1"
@@ -71849,21 +70869,21 @@
height="1"
width="1"
id="rect37871"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
y="185.01379"
x="166.0161"
height="1"
width="1"
id="rect37873"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
y="183.01379"
x="166.0161"
height="1"
width="1"
id="rect37875"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
</g>
<g
style="fill:#000000"
@@ -71944,14 +70964,14 @@
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc"
- style="opacity:0.1;fill:none;stroke:#000000;stroke-width:1.00000048px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
- d="m 127.79796,207.82507 4e-5,-7.01372 6.99956,0.009 4e-4,0.0507 -4e-4,6.95427 -6.9996,0 0,-2.5e-4 z"
+ style="display:inline;opacity:0.1;fill:none;stroke:#000000;stroke-width:1.00000048px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 127.79796,207.82507 4e-5,-7.01372 6.99956,0.009 4e-4,0.0507 -4e-4,6.95427 h -6.9996 z"
id="path37737" />
<g
- transform="matrix(-1,0,0,-1,260.59592,405.65013)"
+ transform="rotate(180,130.29796,202.82506)"
id="g37928">
<g
- style="opacity:0.6;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="g37930"
transform="translate(-39.718138,21.311267)">
<rect
@@ -71960,9 +70980,9 @@
height="1"
width="1"
id="rect37932"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37934"
width="0.99999899"
height="1"
@@ -71974,9 +70994,9 @@
height="1"
width="1"
id="rect37936"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37938"
width="1"
height="1"
@@ -71988,30 +71008,30 @@
height="1"
width="1"
id="rect37941"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
y="177.01379"
x="174.0161"
height="1"
width="0.99999899"
id="rect37943"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37945"
width="1"
height="1"
x="172.0161"
y="177.01379" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37947"
width="1"
height="1"
x="166.0161"
y="185.01379" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37949"
width="1"
height="1"
@@ -72103,11 +71123,11 @@
height="3"
width="2.9998772"
id="rect37338"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
transform="scale(1,-1)" />
<rect
transform="scale(-1,1)"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect37368"
width="2.9998772"
height="3"
@@ -72118,7 +71138,7 @@
</g>
<g
id="ICON_STICKY_UVS_LOC"
- transform="translate(-21,0)">
+ transform="translate(-21)">
<g
style="display:inline;enable-background:new"
id="g38076"
@@ -72129,16 +71149,16 @@
<g
id="g38080"
transform="translate(-40.718137,21.311275)"
- style="opacity:0.6;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate">
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate">
<rect
y="181.01379"
x="166.0161"
height="1"
width="1"
id="rect38082"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect38084"
width="0.99999899"
height="1"
@@ -72150,9 +71170,9 @@
height="1"
width="1"
id="rect38086"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect38088"
width="1"
height="1"
@@ -72164,37 +71184,37 @@
height="1"
width="1"
id="rect38090"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
y="177.01379"
x="174.0161"
height="1"
width="0.99999899"
id="rect38092"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect38094"
width="1"
height="1"
x="172.0161"
y="177.01379" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect38096"
width="1"
height="1"
x="166.0161"
y="185.01379" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect38098"
width="1"
height="1"
x="166.0161"
y="183.01379" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect38173"
width="0.99999899"
height="1"
@@ -72206,21 +71226,21 @@
height="1"
width="1"
id="rect38175"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
y="189.01379"
x="166.0161"
height="1"
width="1"
id="rect38181"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
y="187.01379"
x="166.0161"
height="1"
width="1"
id="rect38183"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
</g>
<g
transform="translate(-40.70204,21.325054)"
@@ -72314,13 +71334,13 @@
</g>
<g
id="g38190"
- transform="matrix(-1,0,0,-1,264.59592,410.65014)">
+ transform="rotate(180,132.29796,205.32507)">
<g
transform="translate(-40.718137,21.311275)"
id="g38192"
- style="opacity:0.6;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate">
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate">
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect38194"
width="1"
height="1"
@@ -72332,9 +71352,9 @@
height="1"
width="0.99999899"
id="rect38196"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect38198"
width="1"
height="1"
@@ -72346,16 +71366,16 @@
height="1"
width="1"
id="rect38200"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect38203"
width="1"
height="1"
x="166.0161"
y="179.01379" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect38205"
width="0.99999899"
height="1"
@@ -72367,30 +71387,30 @@
height="1"
width="1"
id="rect38207"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
y="185.01379"
x="166.0161"
height="1"
width="1"
id="rect38209"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
y="183.01379"
x="166.0161"
height="1"
width="1"
id="rect38211"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect38215"
width="1"
height="1"
x="176.0161"
y="177.01379" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect38219"
width="1"
height="1"
@@ -72490,12 +71510,12 @@
</g>
<path
sodipodi:nodetypes="cccccc"
- style="opacity:0.1;fill:none;stroke:#000000;stroke-width:1.00000048px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
- d="m 301.5,168.92817 5e-5,-9.44187 11.99995,0 0,12.00195 -12,0.0118 0,-2.57183 0,-5e-5 z"
+ style="display:inline;opacity:0.1;fill:none;stroke:#000000;stroke-width:1.00000048px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m 301.5,168.92817 5e-5,-9.44187 H 313.5 v 12.00195 l -12,0.0118 v -2.57183 z"
id="path37737-4"
inkscape:connector-curvature="0" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect37061-2"
width="2.9998772"
height="3"
@@ -72511,9 +71531,9 @@
height="3"
width="2.9998772"
id="rect38072"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect38074"
width="2.9998772"
height="3"
@@ -72524,7 +71544,7 @@
</g>
<g
id="ICON_STICKY_UVS_DISABLE"
- transform="translate(20.999878,0)">
+ transform="translate(20.999878)">
<rect
rx="0"
ry="0"
@@ -72533,9 +71553,9 @@
height="3"
width="2.9998772"
id="rect38277"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect38279"
width="2.9998772"
height="3"
@@ -72551,7 +71571,7 @@
height="3"
width="2.9998772"
id="rect38281"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
</g>
<g
id="ICON_UV_SYNC_SELECT"
@@ -72562,7 +71582,7 @@
height="16"
width="16"
id="rect36540"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g36458"
transform="translate(-122,1.3e-4)">
@@ -72575,8 +71595,8 @@
id="g36462">
<path
id="path36464"
- d="m 328.5,-107.25 -4.5,1.75 0,6.5 4.5,2.25 4.25,-2 0,-6.75 -4.25,-1.75 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000167;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 328.5,-107.25 -4.5,1.75 v 6.5 l 4.5,2.25 4.25,-2 v -6.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000167;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<g
@@ -72586,16 +71606,16 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
- style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 154,80 0,-6.5 -4.5,-1.75 0,10.5 L 154,80 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
+ d="m 154,80 v -6.5 l -4.5,-1.75 v 10.5 z"
id="path36470"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
</g>
<path
sodipodi:nodetypes="ccccccc"
- style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 324,-99.00012 0,-6.49988 4.5,-1.75 0.5,0.25 0,10 -0.5,0.25 -4.5,-2.25012 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
+ d="M 324,-99.00012 V -105.5 l 4.5,-1.75 0.5,0.25 v 10 l -0.5,0.25 z"
id="path36466"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -72603,7 +71623,7 @@
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:url(#linearGradient38049);stroke-width:0.99999982px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 332.5,-105.5 0,6.25 -4,2 -4,-2.00012 0,-6.24988"
+ d="m 332.5,-105.5 v 6.25 l -4,2 -4,-2.00012 V -105.5"
id="path36474"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
@@ -72612,8 +71632,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
sodipodi:nodetypes="ccccc"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 324,-105.5 4.5,-1.75 4.5,1.75 -4.5,2 -4.5,-2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
+ d="m 324,-105.5 4.5,-1.75 4.5,1.75 -4.5,2 z"
id="path36472"
inkscape:connector-curvature="0" />
</g>
@@ -72624,7 +71644,7 @@
id="path36476"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.35;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.35;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
id="rect36479"
width="1"
height="6.7500019"
@@ -72636,7 +71656,7 @@
height="6.7500019"
width="1"
id="rect36481"
- style="opacity:0.09599998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.09599998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate" />
</g>
<rect
rx="0"
@@ -72646,9 +71666,9 @@
height="3.0001416"
width="2.9999485"
id="rect36486"
- style="fill:none;stroke:#8c4800;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#8c4800;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:none;stroke:#8c4800;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#8c4800;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect36489"
width="2.9999485"
height="3.0001416"
@@ -72659,17 +71679,17 @@
<path
sodipodi:nodetypes="cccc"
id="path36496"
- d="m 28.000006,520.49983 -0.5,0 0,-3.00014 2.99995,0"
- style="fill:none;stroke:#5a2f00;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 28.000006,520.49983 h -0.5 v -3.00014 h 2.99995"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#5a2f00;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#5a2f00;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 28.000006,524.49978 -0.5,0 0,3.00014 2.99995,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#5a2f00;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 28.000006,524.49978 h -0.5 v 3.00014 h 2.99995"
id="path36499"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<rect
- style="fill:#ffd4a5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffd4a5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect36503"
width="1.9999485"
height="2.0000772"
@@ -72678,7 +71698,7 @@
ry="0"
rx="0" />
<rect
- style="fill:#ffd4a5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffd4a5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect36507"
width="1.9999485"
height="2.0000772"
@@ -72692,107 +71712,107 @@
id="g36761-1"
style="display:inline;enable-background:new">
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 223,243 0,10 1,0 0,-1 1,0 1,0 0,2 1,0 0,1 1,0 0,-1 1,0 0,-2 -1,0 0,-2 1,0 1,0 0,-1 -1,0 0,-1 -1,0 0,-1 -1,0 0,-1 -1,0 0,-1 -1,0 0,-1 -1,0 0,-1 -1,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
+ d="m 223,243 v 10 h 1 v -1 h 1 1 v 2 h 1 v 1 h 1 v -1 h 1 v -2 h -1 v -2 h 1 1 v -1 h -1 v -1 h -1 v -1 h -1 v -1 h -1 v -1 h -1 v -1 h -1 v -1 z"
id="path36763-5"
inkscape:connector-curvature="0" />
<g
id="g36765-2"
- style="fill:#1a1a1a;display:inline;enable-background:new"
- transform="translate(5,-6.0000002e-7)">
+ style="display:inline;fill:#1a1a1a;enable-background:new"
+ transform="translate(5)">
<rect
y="243"
x="218"
height="10"
width="1"
id="rect36767-7"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
y="244"
x="219"
height="1"
width="1"
id="rect36769-6"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
y="245"
x="220"
height="1"
width="1"
id="rect36771-1"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
y="246"
x="221"
height="1"
width="1"
id="rect36773-4"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
y="247"
x="222"
height="1"
width="1"
id="rect36775-2"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
y="248"
x="223"
height="1"
width="1"
id="rect36777-3"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
y="249"
x="224"
height="1"
width="1.0000017"
id="rect36779-2"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
y="252"
x="219"
height="1"
width="1"
id="rect36781-2"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
y="251"
x="220"
height="1"
width="1"
id="rect36783-1"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
y="252"
x="221"
height="2"
width="1"
id="rect36785-6"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
y="250"
x="222.25"
height="2"
width="0.75"
id="rect36787-8"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
y="252"
x="223"
height="1.9999931"
width="1"
id="rect36789-5"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
y="254"
x="222"
height="1.0000006"
width="1.5"
id="rect36791-7"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect36793-6"
width="1.5"
height="1"
@@ -72813,8 +71833,8 @@
id="g37304">
<path
id="path37306"
- d="m 328.5,-107.25 -4.5,1.75 0,6.5 4.5,2.25 4.5,-2.25 0,-6.5 -4.5,-1.75 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 328.5,-107.25 -4.5,1.75 v 6.5 l 4.5,2.25 4.5,-2.25 v -6.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<g
@@ -72824,16 +71844,16 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
- style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 154,80 0,-6.5 -4.5,-1.75 0,10.5 L 154,80 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
+ d="m 154,80 v -6.5 l -4.5,-1.75 v 10.5 z"
id="path37311"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
</g>
<path
sodipodi:nodetypes="ccccccc"
- style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 324,-99.00012 0,-6.49988 4.5,-1.75 0.5,0.25 0,10 -0.5,0.25 -4.5,-2.25012 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
+ d="M 324,-99.00012 V -105.5 l 4.5,-1.75 0.5,0.25 v 10 l -0.5,0.25 z"
id="path37313"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -72841,7 +71861,7 @@
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:url(#linearGradient37530);stroke-width:0.99999982px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 332.5,-105.5 0,6.25 -4,2 -4,-2.00012 0,-6.24988"
+ d="m 332.5,-105.5 v 6.25 l -4,2 -4,-2.00012 V -105.5"
id="path37316"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
@@ -72850,8 +71870,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
sodipodi:nodetypes="ccccc"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 324,-105.5 4.5,-1.75 4.5,1.75 -4.5,2 -4.5,-2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
+ d="m 324,-105.5 4.5,-1.75 4.5,1.75 -4.5,2 z"
id="path37318"
inkscape:connector-curvature="0" />
</g>
@@ -72862,7 +71882,7 @@
id="path37320"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.25;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
id="rect37322"
width="1"
height="6.7500019"
@@ -72874,7 +71894,7 @@
height="6.7500019"
width="1"
id="rect37324"
- style="opacity:0.09599998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.09599998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate" />
</g>
<g
id="g37284"
@@ -72885,7 +71905,7 @@
height="16"
width="16"
id="rect37286"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="translate(46.000035,99.00001)"
id="g37288"
@@ -72893,42 +71913,39 @@
<g
style="display:inline"
id="g37290"
- transform="translate(-3.542969e-5,0)">
+ transform="translate(-3.542969e-5)">
<path
sodipodi:nodetypes="cccccc"
id="path37292"
- style="fill:none;stroke:#000000;stroke-width:3.0999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:3.0999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
d="m 388.23389,129.74998 4.25,-4.24999 m 0.98389,1.99999 -1.48389,-1.49999 m 0.48389,2.49999 -1.4142,-1.41422"
inkscape:connector-curvature="0" />
<path
d="m 387.98389,129.99999 c 0.78065,0.78065 0.78065,2.21936 0,3 -0.78064,0.78065 -2.21935,0.78065 -3,0 -0.78064,-0.78064 -0.78064,-2.21935 0,-3 0.78065,-0.78064 2.21936,-0.78064 3,0 z"
- style="fill:none;stroke:#000000;stroke-width:2.9000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:2.9000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
id="path37504"
sodipodi:nodetypes="csssc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccc"
d="m 388.23389,129.74998 4.25,-4.24999 m 0.98389,1.99999 -0.25,-0.25 m -0.75,1.25 -0.25,-0.25"
- style="fill:none;stroke:#ffffff;stroke-width:1.50000191;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:none;stroke:#ffffff;stroke-width:1.50000191;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:7.40000057;stroke-opacity:1"
id="path37294"
inkscape:connector-curvature="0" />
<path
id="path37500"
- style="fill:none;stroke:#ffffff;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:none;stroke:#ffffff;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
d="m 387.98389,129.99999 c 0.78064,0.78065 0.78064,2.21935 0,3 -0.78065,0.78065 -2.21936,0.78065 -3,0 -0.78065,-0.78065 -0.78065,-2.21935 0,-3 0.78064,-0.78065 2.21935,-0.78065 3,0 z"
sodipodi:nodetypes="czzzz"
inkscape:connector-curvature="0" />
</g>
- <path
+ <circle
transform="matrix(1.99999,0,0,1.99999,571.48293,-823.49525)"
- d="m -92,477.5 a 0.5,0.5 0 0 1 -0.5,0.5 0.5,0.5 0 0 1 -0.5,-0.5 0.5,0.5 0 0 1 0.5,-0.5 0.5,0.5 0 0 1 0.5,0.5 z"
- sodipodi:ry="0.5"
- sodipodi:rx="0.5"
- sodipodi:cy="477.5"
- sodipodi:cx="-92.5"
id="path37506"
- style="opacity:0.4;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.70000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
- sodipodi:type="arc" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.4;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.70000005;marker:none;enable-background:new"
+ cx="-92.5"
+ cy="477.5"
+ r="0.5" />
</g>
</g>
</g>
@@ -72940,33 +71957,27 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\jendrzych's iconset.png"
transform="matrix(0.7668704,0,0,0.7668711,19.45715,14.604317)"
id="g10270-1"
- style="opacity:0.3;display:inline;enable-background:new">
- <path
+ style="display:inline;opacity:0.3;enable-background:new">
+ <circle
transform="matrix(0.75,0,0,0.75,29.5,135)"
- sodipodi:type="arc"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.39093411;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.39093411;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path10272-2"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(-0.683022,-0.07745026,0.0778507,-0.683064,209.4726,314.325)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path10275-3"
- style="opacity:0.4;fill:url(#linearGradient38254);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- sodipodi:type="arc" />
+ style="display:inline;opacity:0.4;fill:url(#linearGradient38254);fill-opacity:1;fill-rule:nonzero;stroke:none"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<rect
y="178"
@@ -72974,7 +71985,7 @@
height="16"
width="16"
id="rect37989"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
@@ -72983,13 +71994,13 @@
transform="translate(-255.99996,227.9746)"
style="display:inline">
<rect
- transform="matrix(1,5.251142e-6,0,1,0,0)"
+ transform="skewY(3.0086827e-4)"
y="-43.49577"
x="372.49994"
height="2.9999874"
width="3.0000761"
id="rect37525"
- style="opacity:0.15;fill:none;stroke:#d5e5ff;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.15;fill:none;stroke:#d5e5ff;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
rx="0"
ry="0" />
<rect
@@ -72999,29 +72010,29 @@
height="2.0000756"
width="2.0000861"
id="rect38010"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline" />
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" />
<rect
ry="0"
rx="0"
- style="fill:#ebf3ff;fill-opacity:1;fill-rule:nonzero;stroke:#004cbe;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ebf3ff;fill-opacity:1;fill-rule:nonzero;stroke:#004cbe;stroke-width:0.99999875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect38012"
width="3.0000761"
height="2.9999874"
x="372.49994"
y="-43.49577"
- transform="matrix(1,5.251142e-6,0,1,0,0)" />
+ transform="skewY(3.0086827e-4)" />
</g>
<path
- style="fill:none;stroke:#000000;stroke-width:2.4000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
- d="m 114.5,192.5 -3,0 0,-3 m 13,0 0,3 -3,0 m -0.25,-13 3.25,0 0,3 m -13,0 0,-3 3,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:2.4000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
+ d="m 114.5,192.5 h -3 v -3 m 13,0 v 3 h -3 m -0.25,-13 h 3.25 v 3 m -13,0 v -3 h 3"
id="path37498"
sodipodi:nodetypes="cccccccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccccccccc"
id="rect38140"
- d="m 114.5,192.5 -3,0 0,-3 m 13,0 0,3 -3,0 m -0.25,-13 3.25,0 0,3 m -13,0 0,-3 3,0"
- style="fill:none;stroke:url(#linearGradient37509);stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 114.5,192.5 h -3 v -3 m 13,0 v 3 h -3 m -0.25,-13 h 3.25 v 3 m -13,0 v -3 h 3"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient37509);stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
inkscape:connector-curvature="0" />
</g>
<g
@@ -73035,7 +72046,7 @@
height="16"
width="16"
id="rect21661"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
style="display:inline"
id="g21392"
@@ -73052,10 +72063,10 @@
height="3"
width="2.9998775"
id="rect11191"
- style="fill:none;stroke:#447cce;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#447cce;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<rect
rx="1.375"
- style="fill:none;stroke:#447cce;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#447cce;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect11193"
width="2.9998775"
height="3"
@@ -73070,7 +72081,7 @@
height="3"
width="2.9998775"
id="rect11195"
- style="fill:none;stroke:#447cce;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#447cce;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
</g>
<rect
rx="1.375"
@@ -73080,10 +72091,10 @@
height="3"
width="2.9998775"
id="rect11197"
- style="fill:none;stroke:#22467e;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#22467e;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
- style="fill:#c3dbff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;fill:#c3dbff;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 304.98827,197.84994 c 0.6667,0 1.3334,1e-5 2.0001,1e-5 0,0.66668 0,1.33337 0,2.00005 -0.6667,0 -1.3334,-1e-5 -2.0001,-1e-5 0,-0.66668 0,-1.33337 0,-2.00005 z"
id="path11199"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -73091,7 +72102,7 @@
inkscape:export-ydpi="90" />
<rect
rx="1.375"
- style="fill:none;stroke:#22467e;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#22467e;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect11201"
width="2.9998775"
height="3"
@@ -73105,7 +72116,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path11203"
d="m 309.98827,197.84994 c 0.6667,0 1.3334,1e-5 2.0001,1e-5 0,0.66668 0,1.33337 0,2.00005 -0.6667,0 -1.3334,-1e-5 -2.0001,-1e-5 0,-0.66668 0,-1.33337 0,-2.00005 z"
- style="fill:#c3dbff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline" />
+ style="display:inline;fill:#c3dbff;fill-opacity:1;fill-rule:nonzero;stroke:none" />
<rect
rx="1.375"
ry="1.375"
@@ -73114,10 +72125,10 @@
height="3"
width="2.9998775"
id="rect11205"
- style="fill:none;stroke:#22467e;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#22467e;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
- style="fill:#c3dbff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;fill:#c3dbff;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 314.98827,197.84994 c 0.6667,0 1.3334,1e-5 2.0001,1e-5 0,0.66668 0,1.33337 0,2.00005 -0.6667,0 -1.3334,-1e-5 -2.0001,-1e-5 0,-0.66668 0,-1.33337 0,-2.00005 z"
id="path11207"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -73129,7 +72140,7 @@
id="g37575"
transform="translate(41.928411,-437)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect37577"
width="16"
height="16"
@@ -73144,32 +72155,32 @@
<g
id="g37584"
style="opacity:0.85"
- transform="translate(20.029029,0)">
+ transform="translate(20.029029)">
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc"
id="path37586"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:12.66808051;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:12.66808033;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 447.72097,225.25 -3.25,3.25 3.25,3.25 m 6.5,-6.5 3.25,3.25 -3.25,3.25" />
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:#000000;stroke-width:2.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:12.66808051;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 444.54256,228.5 11.66489,0 0,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:2.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:12.66808033;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 444.54256,228.5 h 11.66489 v 0"
id="path37588" />
</g>
<g
id="g37591"
- transform="translate(20.029029,0)">
+ transform="translate(20.029029)">
<path
inkscape:connector-curvature="0"
id="path37593"
- d="m 444.47097,228.5 13,0"
+ d="m 444.47097,228.5 h 13"
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
sodipodi:nodetypes="cc" />
<path
inkscape:connector-curvature="0"
d="m 447.72097,225.25 -3.25,3.25 3.25,3.25 m 6.5,-6.5 3.25,3.25 -3.25,3.25"
- style="fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path37606"
sodipodi:nodetypes="cccccc" />
</g>
@@ -73181,54 +72192,45 @@
id="ICON_BBOX"
transform="translate(-105,-63)">
<g
- style="opacity:0.8;display:inline;enable-background:new"
+ style="display:inline;opacity:0.8;enable-background:new"
id="g37580"
transform="matrix(0.7668704,0,0,0.7668711,19.45715,14.604317)"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path37582"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.39093411;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.75,0,0,0.75,29.5,135)" />
- <path
- sodipodi:type="arc"
- style="fill:url(#linearGradient37613);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.39093411;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.75,0,0,0.75,29.5,135)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
+ style="display:inline;fill:url(#linearGradient37613);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path37584"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(-0.683022,-0.07745026,0.0778507,-0.683064,209.4726,314.325)" />
- <path
+ transform="matrix(-0.683022,-0.07745026,0.0778507,-0.683064,209.4726,314.325)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.5705005,0,0,0.5705012,53.193935,156.18087)"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path38120-7"
- style="opacity:0.5;fill:none;stroke:#ffffff;stroke-width:2.28571391;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
- sodipodi:type="arc"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:none;stroke:#ffffff;stroke-width:2.28571391;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect37586"
width="16"
height="16"
@@ -73237,12 +72239,12 @@
<path
sodipodi:nodetypes="cccccccccccc"
id="path37608"
- d="m 114.5,192.5 -3,0 0,-3 m 13,0 0,3 -3,0 m -0.25,-13 3.25,0 0,3 m -13,0 0,-3 3,0"
- style="fill:none;stroke:#000000;stroke-width:2.4000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ d="m 114.5,192.5 h -3 v -3 m 13,0 v 3 h -3 m -0.25,-13 h 3.25 v 3 m -13,0 v -3 h 3"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:2.4000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient37615);stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
- d="m 114.5,192.5 -3,0 0,-3 m 13,0 0,3 -3,0 m -0.25,-13 3.25,0 0,3 m -13,0 0,-3 3,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient37615);stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
+ d="m 114.5,192.5 h -3 v -3 m 13,0 v 3 h -3 m -0.25,-13 h 3.25 v 3 m -13,0 v -3 h 3"
id="path37610"
sodipodi:nodetypes="cccccccccccc"
inkscape:connector-curvature="0" />
@@ -73252,7 +72254,7 @@
id="ICON_SOLID"
transform="translate(4.7892764e-7,23)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect15296"
width="16"
height="16"
@@ -73265,45 +72267,36 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path15301"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.11492968;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.75,0,0,0.75,29.5,135)" />
- <path
- sodipodi:type="arc"
- style="opacity:0.6;fill:url(#linearGradient14439-9);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.11492968;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.75,0,0,0.75,29.5,135)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
+ style="display:inline;opacity:0.6;fill:url(#linearGradient14439-9);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path15303"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(-0.6926913,-0.07795333,0.0789528,-0.6875008,210.6113,314.95068)" />
- <path
+ transform="matrix(-0.6926913,-0.07795333,0.0789528,-0.6875008,210.6113,314.95068)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path15305"
- style="fill:none;stroke:url(#linearGradient14441-4);stroke-width:1.454548;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
- sodipodi:type="arc"
- transform="matrix(0.6391304,0,0,0.6383922,44.127271,148.16974)" />
+ style="display:inline;fill:none;stroke:url(#linearGradient14441-4);stroke-width:1.454548;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.6391304,0,0,0.6383922,44.127271,148.16974)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
@@ -73316,7 +72309,7 @@
height="16"
width="16"
id="rect15309"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g15311"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -73327,58 +72320,46 @@
<g
transform="matrix(0.928617,0,0,0.931035,10.2435,15.47372)"
id="g15313">
- <path
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
+ <circle
id="path15315"
- style="fill:#7c7c7c;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.10805392;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
+ style="fill:#7c7c7c;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.10805392;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(0.8076551,0,0,0.8055247,44.427594,128.39229)" />
- <path
+ transform="matrix(0.8076551,0,0,0.8055247,44.427594,128.39229)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.745771,0,0,0.7384254,52.598397,136.33161)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path15317"
style="opacity:0.7;fill:url(#linearGradient14433-1);fill-opacity:1;fill-rule:nonzero"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
style="fill:url(#linearGradient14435-7);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path15319"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(0.624995,0,0,0.625,68.0007,149.25)" />
- <path
+ transform="matrix(0.624995,0,0,0.625,68.0007,149.25)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path15321"
- style="fill:none;stroke:url(#linearGradient14437-6);stroke-width:1.4544518;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
- sodipodi:type="arc"
- transform="matrix(0.6837125,0,0,0.6818205,60.789416,142.9887)" />
+ style="display:inline;fill:none;stroke:url(#linearGradient14437-6);stroke-width:1.4544518;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.6837125,0,0,0.6818205,60.789416,142.9887)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<path
sodipodi:nodetypes="cc"
@@ -73387,7 +72368,7 @@
style="fill:none;stroke:#ffffff;stroke-width:0.92336226px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.5;fill:none;stroke:#ffe680;stroke-width:0.9233622px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter15421-1);enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:none;stroke:#ffe680;stroke-width:0.9233622px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;filter:url(#filter15421-1);enable-background:accumulate"
d="m 153.73381,225.66118 c 0,1 -1,2 -2,2"
id="path15325"
sodipodi:nodetypes="cc"
@@ -73399,59 +72380,50 @@
id="ICON_POTATO"
transform="translate(113.00001,1)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect37994"
width="16.000006"
height="16.000002"
x="-24.00001"
y="114" />
- <path
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
+ <circle
id="path37953"
- style="fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.10749674;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.10749674;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(0.8125568,0,0,0.8127302,-123.25796,26.09414)" />
+ transform="matrix(0.8125568,0,0,0.8127302,-123.25796,26.09414)"
+ cx="132"
+ cy="118"
+ r="8" />
<path
id="path37970"
- d="m -18,116.34375 c -1.706032,0.60248 -3.053766,1.95022 -3.65625,3.65625 l 3.65625,0 0,-3.65625 z m 0,3.65625 0,4 4,0 0,-4 -4,0 z m 4,0 3.65625,0 C -10.94623,118.29397 -12.29397,116.94623 -14,116.34375 L -14,120 z m 0,4 0,3.65625 c 1.70603,-0.60248 3.05377,-1.95022 3.65625,-3.65625 L -14,124 z m -4,0 -3.65625,0 c 0.602484,1.70603 1.950218,3.05377 3.65625,3.65625 L -18,124 z"
- style="fill:url(#linearGradient38073-8);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -18,116.34375 c -1.706032,0.60248 -3.053766,1.95022 -3.65625,3.65625 H -18 Z M -18,120 v 4 h 4 v -4 z m 4,0 h 3.65625 c -0.60248,-1.70603 -1.95022,-3.05377 -3.65625,-3.65625 z m 0,4 v 3.65625 c 1.70603,-0.60248 3.05377,-1.95022 3.65625,-3.65625 z m -4,0 h -3.65625 c 0.602484,1.70603 1.950218,3.05377 3.65625,3.65625 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient38073-8);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
- <path
+ <circle
transform="matrix(0.749378,0,0,0.7495379,-114.92287,33.554528)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- sodipodi:type="arc"
- style="opacity:0.25;fill:url(#linearGradient38075-5);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.23055196;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:url(#linearGradient38075-5);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.23055196;marker:none;enable-background:accumulate"
id="path37963"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z" />
- <path
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path37955"
- style="fill:none;stroke:url(#linearGradient38077-1);stroke-width:1.45488834;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
- sodipodi:type="arc"
- transform="matrix(0.6874075,0,0,0.6872685,-106.73771,40.90046)" />
+ style="display:inline;fill:none;stroke:url(#linearGradient38077-1);stroke-width:1.45488834;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.6874075,0,0,0.6872685,-106.73771,40.90046)"
+ cx="132"
+ cy="118"
+ r="8" />
<path
- style="opacity:0.7;fill:url(#linearGradient38079-2);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -18,116.34375 c -1.706032,0.60248 -3.053766,1.95022 -3.65625,3.65625 l 3.65625,0 0,-3.65625 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:url(#linearGradient38079-2);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
+ d="m -18,116.34375 c -1.706032,0.60248 -3.053766,1.95022 -3.65625,3.65625 H -18 Z"
id="path37972"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
@@ -73468,39 +72440,33 @@
height="16"
width="16"
id="rect38274"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
+ <circle
transform="matrix(-0.7606373,-0.08449162,0.08669728,-0.7451645,124.04885,199.0823)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path38284"
- style="opacity:0.75;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- sodipodi:type="arc" />
- <path
+ style="display:inline;opacity:0.75;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- sodipodi:type="arc"
- style="fill:none;stroke:#000000;stroke-width:1.23076892;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:#000000;stroke-width:1.23076892;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path38294"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- transform="matrix(0.8125001,0,0,0.8125002,-73.250026,4.1249738)" />
+ transform="matrix(0.8125001,0,0,0.8125002,-73.250026,4.1249738)"
+ cx="132"
+ cy="118"
+ r="8" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:type="arc"
- style="opacity:0.1;fill:none;stroke:url(#radialGradient38306-3);stroke-width:2.44404984;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="opacity:0.1;fill:none;stroke:url(#radialGradient38306-3);stroke-width:2.44404984;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path38296"
sodipodi:cx="132"
sodipodi:cy="118"
@@ -73511,23 +72477,20 @@
sodipodi:end="3.12636"
transform="matrix(0.8077059,0,0,-0.2072667,-72.578821,124.6156)"
sodipodi:open="true" />
- <path
+ <circle
transform="matrix(-0.7451139,-0.08394973,0.08492792,-0.7403854,122.33348,198.48526)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path15303-4"
- style="opacity:0.15;fill:url(#linearGradient37646-4);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new"
- sodipodi:type="arc" />
+ style="display:inline;opacity:0.15;fill:url(#linearGradient37646-4);fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
+ cx="132"
+ cy="118"
+ r="8" />
<path
transform="matrix(0.780896,0,0,0.2786183,-69.081831,66.644097)"
sodipodi:type="arc"
- style="fill:none;stroke:#000000;stroke-width:1.50070953;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:1.50070953;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path38300"
sodipodi:cx="132"
sodipodi:cy="118"
@@ -73540,25 +72503,22 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- sodipodi:type="arc"
- style="opacity:0.5;fill:none;stroke:url(#linearGradient37677);stroke-width:1.45454454;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:none;stroke:url(#linearGradient37677);stroke-width:1.45454454;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
id="path38298"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- transform="matrix(0.6875009,0,0,0.687501,-56.75013,18.874887)" />
+ transform="matrix(0.6875009,0,0,0.687501,-56.75013,18.874887)"
+ cx="132"
+ cy="118"
+ r="8" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:type="arc"
- style="fill:none;stroke:#000000;stroke-width:1.35088885;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:1.35088885;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path38302"
sodipodi:cx="132"
sodipodi:cy="118"
@@ -73569,19 +72529,16 @@
sodipodi:end="6.2712816"
sodipodi:open="true"
transform="matrix(0,0.7811136,-0.34375,0,74.562502,-3.1287373)" />
- <path
+ <circle
transform="matrix(0.9374995,0,0,0.9374996,-89.749939,-10.62495)"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path38304"
- style="opacity:0.18000004;fill:none;stroke:url(#linearGradient38313-7);stroke-width:1.0666672;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
- sodipodi:type="arc"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.18000004;fill:none;stroke:url(#linearGradient38313-7);stroke-width:1.0666672;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
@@ -73590,18 +72547,18 @@
<path
sodipodi:nodetypes="ccccccccc"
id="path44921"
- d="m 653.5,356.5 -4,4 -7,0 -4,-4 0,-7 4,-4 7,0 4,4 0,7 z"
- style="fill:url(#linearGradient39518);fill-opacity:1;fill-rule:nonzero;stroke:#550000;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 653.5,356.5 -4,4 h -7 l -4,-4 v -7 l 4,-4 h 7 l 4,4 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient39518);fill-opacity:1;fill-rule:nonzero;stroke:#550000;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccc"
id="path44926"
- d="m 652.5,356 -3.5,3.5 -6,0 -3.5,-3.5 0,-6 3.5,-3.5 6,0 3.5,3.5 0,6 z"
- style="fill:none;stroke:url(#linearGradient39520);stroke-width:1.20000005;stroke-miterlimit:4;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 652.5,356 -3.5,3.5 h -6 l -3.5,-3.5 v -6 l 3.5,-3.5 h 6 l 3.5,3.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient39520);stroke-width:1.20000005;stroke-miterlimit:4;stroke-dasharray:none;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient39523);stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 651.5,355.5 -2.75,3 -5.25,0 -3,-3 0,-5 3,-3 5,0 3,3 0,5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient39523);stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;marker:none;enable-background:accumulate"
+ d="m 651.5,355.5 -2.75,3 h -5.25 l -3,-3 v -5 l 3,-3 h 5 l 3,3 z"
id="path44954"
sodipodi:nodetypes="ccccccccc"
inkscape:connector-curvature="0" />
@@ -73611,14 +72568,14 @@
id="g51749-0-4">
<path
id="path51751-1-8"
- style="fill:none;stroke:#aa0000;stroke-width:2.69179726;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 132.08133,266.03337 -7.61363,0 m 3.80681,3.80673 0,-7.61347"
+ style="fill:none;stroke:#aa0000;stroke-width:2.69179726;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 132.08133,266.03337 h -7.61363 m 3.80681,3.80673 v -7.61347"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
id="path51753-2-2"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.29206276;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 128.27451,269.8401 0,-7.61347 m 3.80682,3.80674 -7.61363,0"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.29206276;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 128.27451,269.8401 v -7.61347 m 3.80682,3.80674 h -7.61363"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -73626,7 +72583,7 @@
id="ICON_OBJECT_DATA"
transform="translate(63,-21.000002)">
<rect
- style="opacity:0;fill:#f6d0a6;fill-opacity:1;fill-rule:evenodd;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#f6d0a6;fill-opacity:1;fill-rule:evenodd;marker:none;enable-background:accumulate"
id="rect40250"
width="16"
height="15.99988"
@@ -73640,14 +72597,14 @@
id="g40254">
<path
id="path40257"
- d="m 329.5,-108.25 -5.5,2 0,6.75 5.5,3 5.5,-3 0,-6.75 -5.5,-2 z"
- style="fill:#422200;fill-opacity:1;fill-rule:evenodd;stroke:#281500;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 329.5,-108.25 -5.5,2 v 6.75 l 5.5,3 5.5,-3 v -6.75 z"
+ style="fill:#422200;fill-opacity:1;fill-rule:evenodd;stroke:#281500;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccc"
style="fill:#efa351;fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 324,-99.5 0,-7 6,-1.75 0,11.5 -0.5,0.25 -5.5,-3 z"
+ d="m 324,-99.5 v -7 l 6,-1.75 v 11.5 l -0.5,0.25 z"
id="path40259"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -73661,7 +72618,7 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
style="fill:#915515;fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 156,79.5 0,-7 -5,-1.75 0,11.5 5,-2.75 z"
+ d="m 156,79.5 v -7 l -5,-1.75 v 11.5 z"
id="path40263"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
@@ -73671,26 +72628,26 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
sodipodi:nodetypes="ccccc"
style="fill:#f5ca9b;fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 145,72.5 5.5,-2 5.5,2 -5.5,2.5 -5.5,-2.5 z"
+ d="m 145,72.5 5.5,-2 5.5,2 -5.5,2.5 z"
id="path40270"
inkscape:connector-curvature="0" />
</g>
<path
style="fill:none;stroke:url(#linearGradient40280);stroke-width:0.99999982px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 334.5,-106.5 0,6.75 -5,2.75 -5,-2.75 0,-6.75"
+ d="m 334.5,-106.5 v 6.75 l -5,2.75 -5,-2.75 v -6.75"
id="path40272"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
</g>
<rect
- style="fill:url(#linearGradient40282);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient40282);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
id="rect40275"
width="1"
height="7.75"
x="-57"
y="342" />
<path
- style="fill:none;stroke:url(#linearGradient40284);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:url(#linearGradient40284);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m -61,340.65468 c 0,0 4.5,2 4.5,2 l 4.5,-2"
id="path40278"
sodipodi:nodetypes="ccc"
@@ -73702,7 +72659,7 @@
id="ICON_UV_FACESEL">
<rect
transform="matrix(0,1,1,0,0,0)"
- style="opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;enable-background:accumulate"
id="rect38558"
width="16"
height="16"
@@ -73715,11 +72672,11 @@
<path
sodipodi:nodetypes="ccccccccc"
id="path38563"
- style="fill:none;stroke:#000000;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -93.5,422.5 12,0 0,-12 -12,0 0,12 z m 0,-6 12,0 m -6.00001,-5.99959 0,12"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -93.5,422.5 h 12 v -12 h -12 z m 0,-6 h 12 m -6.00001,-5.99959 v 12"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.7;fill:url(#linearGradient38689);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:url(#linearGradient38689);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect38570"
width="13"
height="13"
@@ -73729,28 +72686,28 @@
ry="0" />
<path
sodipodi:nodetypes="ccccccccc"
- d="m -93.5,422.5 12,0 -1e-5,-11.99959 -12,0 1e-5,11.99959 z m 0,-6 12,0 m -6.00001,-5.99959 1e-5,11.99959"
- style="fill:none;stroke:#f2f2f2;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -93.5,422.5 h 12 l -1e-5,-11.99959 h -12 z m 0,-6 h 12 m -6.00001,-5.99959 1e-5,11.99959"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#f2f2f2;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path38572"
inkscape:connector-curvature="0" />
<path
id="path38574"
- d="M -92.46875,415.53125 -92.5,411.5 l 4,0"
+ d="M -92.46875,415.53125 -92.5,411.5 h 4"
style="opacity:0.7;fill:none;stroke:url(#linearGradient38693);stroke-width:1px;stroke-linecap:round"
inkscape:connector-curvature="0" />
<path
style="opacity:0.7;fill:none;stroke:url(#linearGradient38695);stroke-width:1px;stroke-linecap:round"
- d="M -86.46875,415.53125 -86.5,411.5 l 4,0"
+ d="M -86.46875,415.53125 -86.5,411.5 h 4"
id="path38577"
inkscape:connector-curvature="0" />
<path
style="opacity:0.7;fill:none;stroke:url(#linearGradient38697);stroke-width:1px;stroke-linecap:round"
- d="M -92.46875,421.53125 -92.5,417.5 l 4,0"
+ d="M -92.46875,421.53125 -92.5,417.5 h 4"
id="path38579"
inkscape:connector-curvature="0" />
<path
id="path38581"
- d="M -86.46875,421.53125 -86.5,417.5 l 4,0"
+ d="M -86.46875,421.53125 -86.5,417.5 h 4"
style="opacity:0.7;fill:none;stroke:url(#linearGradient38701);stroke-width:1px;stroke-linecap:round"
inkscape:connector-curvature="0" />
</g>
@@ -73760,7 +72717,7 @@
height="9"
width="9.0000038"
id="rect37920-7"
- style="opacity:0.07999998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.07999998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<g
id="g38583"
transform="translate(-137.99432,-356)">
@@ -73769,28 +72726,28 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path38585"
- d="m -70.5,411.5 0,-8 8,0 0,8 -8,0 z"
- style="fill:#ffb769;fill-opacity:1;fill-rule:nonzero;stroke:#542b00;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.8627451;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -70.5,411.5 v -8 h 8 v 8 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffb769;fill-opacity:1;fill-rule:nonzero;stroke:#542b00;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:0.8627451;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
- style="fill:none;stroke:#462400;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -70.5,411.5 0,-8 8,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#462400;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -70.5,411.5 v -8 h 8"
id="path38588"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.4;fill:none;stroke:url(#linearGradient38703);stroke-width:1px;stroke-linecap:round;display:inline;enable-background:new"
- d="M -68.46875,409.53125 -68.5,405.5 l 4,0"
+ style="display:inline;opacity:0.4;fill:none;stroke:url(#linearGradient38703);stroke-width:1px;stroke-linecap:round;enable-background:new"
+ d="M -68.46875,409.53125 -68.5,405.5 h 4"
id="path38590"
inkscape:connector-curvature="0" />
<path
id="path38592"
- d="m -64.53125,405.5 0.03125,4.03125 -4,0"
- style="opacity:0.4;fill:none;stroke:url(#linearGradient38706);stroke-width:1px;stroke-linecap:round;display:inline;enable-background:new"
+ d="m -64.53125,405.5 0.03125,4.03125 h -4"
+ style="display:inline;opacity:0.4;fill:none;stroke:url(#linearGradient38706);stroke-width:1px;stroke-linecap:round;enable-background:new"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -73803,15 +72760,15 @@
height="16"
width="16"
id="rect38650"
- style="opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;enable-background:accumulate"
transform="matrix(0,1,1,0,0,0)" />
<g
style="opacity:0.5"
id="g38652"
transform="translate(-98.99432,-362)">
<path
- d="m -85.5,422.5 4,0 0,-12 -4,0 0,12 z m 0,-6 4,0"
- style="fill:none;stroke:#000000;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -85.5,422.5 h 4 v -12 h -4 z m 0,-6 h 4"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path38654"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
@@ -73823,22 +72780,22 @@
height="13"
width="4.9999924"
id="rect38657"
- style="opacity:0.7;fill:url(#linearGradient38720);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:url(#linearGradient38720);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<path
id="path38659"
- style="fill:none;stroke:#f2f2f2;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M -85.49999,422.49959 -81.5,422.5 -81.50001,410.50041 -85.5,410.5 l 1e-5,11.99959 z m 0,-6 L -81.5,416.5"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#f2f2f2;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M -85.49999,422.49959 -81.5,422.5 -81.50001,410.50041 -85.5,410.5 Z m 0,-6 L -81.5,416.5"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
style="opacity:0.7;fill:none;stroke:url(#linearGradient38723);stroke-width:1px;stroke-linecap:round"
- d="M -84.46875,415.53125 -84.5,411.5 l 2,0"
+ d="M -84.46875,415.53125 -84.5,411.5 h 2"
id="path38661"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
<path
id="path38663"
- d="M -84.46875,421.53125 -84.5,417.5 l 2,0"
+ d="M -84.46875,421.53125 -84.5,417.5 h 2"
style="opacity:0.7;fill:none;stroke:url(#linearGradient38725);stroke-width:1px;stroke-linecap:round"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
@@ -73848,8 +72805,8 @@
id="g38665">
<path
sodipodi:nodetypes="ccccc"
- style="fill:#ffb769;fill-opacity:1;fill-rule:nonzero;stroke:#462400;stroke-width:0.76566803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -71,412.03125 0,-8.2055 7,0 0,8.2055 -7,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffb769;fill-opacity:1;fill-rule:nonzero;stroke:#462400;stroke-width:0.76566803;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -71,412.03125 v -8.2055 h 7 v 8.2055 z"
id="path38668"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -73857,27 +72814,27 @@
inkscape:connector-curvature="0" />
<path
id="path38670"
- d="m -69,407.19668 0,-2.19843 2.75,0"
- style="opacity:0.5;fill:none;stroke:url(#linearGradient38727);stroke-width:0.76566803px;stroke-linecap:round;display:inline;enable-background:new"
+ d="m -69,407.19668 v -2.19843 h 2.75"
+ style="display:inline;opacity:0.5;fill:none;stroke:url(#linearGradient38727);stroke-width:0.76566803px;stroke-linecap:round;enable-background:new"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.5;fill:none;stroke:url(#linearGradient38729);stroke-width:0.76566803px;stroke-linecap:round;display:inline;enable-background:new"
- d="m -66,405.14481 0,2.19843 -2.75,0"
+ style="display:inline;opacity:0.5;fill:none;stroke:url(#linearGradient38729);stroke-width:0.76566803px;stroke-linecap:round;enable-background:new"
+ d="m -66,405.14481 v 2.19843 h -2.75"
id="path38672"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
- style="opacity:0.5;fill:none;stroke:url(#linearGradient38731);stroke-width:0.76566803px;stroke-linecap:round;display:inline;enable-background:new"
- d="m -69,410.71416 0,-2.19843 2.75,0"
+ style="display:inline;opacity:0.5;fill:none;stroke:url(#linearGradient38731);stroke-width:0.76566803px;stroke-linecap:round;enable-background:new"
+ d="m -69,410.71416 v -2.19843 h 2.75"
id="path38674"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path38676"
- d="m -66,408.6623 0,2.19843 -2.75,-10e-6"
- style="opacity:0.5;fill:none;stroke:url(#linearGradient38736);stroke-width:0.76566803px;stroke-linecap:round;display:inline;enable-background:new"
+ d="m -66,408.6623 v 2.19843 l -2.75,-10e-6"
+ style="display:inline;opacity:0.5;fill:none;stroke:url(#linearGradient38736);stroke-width:0.76566803px;stroke-linecap:round;enable-background:new"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -73886,7 +72843,7 @@
transform="translate(507.99432,90)">
<rect
transform="matrix(0,1,1,0,0,0)"
- style="opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;enable-background:accumulate"
id="rect39154"
width="16"
height="16"
@@ -73899,11 +72856,11 @@
<path
sodipodi:nodetypes="ccccccccc"
id="path39159"
- style="fill:none;stroke:#000000;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -93.5,422.5 12,0 0,-12 -12,0 0,12 z m 0,-6 12,0 m -6.00001,-5.99959 0,12"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -93.5,422.5 h 12 v -12 h -12 z m 0,-6 h 12 m -6.00001,-5.99959 v 12"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.7;fill:url(#linearGradient39199);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:url(#linearGradient39199);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect39161"
width="13"
height="13"
@@ -73913,40 +72870,40 @@
ry="0" />
<path
sodipodi:nodetypes="ccccccccc"
- d="m -93.5,422.5 12,0 -1e-5,-11.99959 -12,0 1e-5,11.99959 z m 0,-6 12,0 m -6.00001,-5.99959 1e-5,11.99959"
- style="fill:none;stroke:#f2f2f2;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -93.5,422.5 h 12 l -1e-5,-11.99959 h -12 z m 0,-6 h 12 m -6.00001,-5.99959 1e-5,11.99959"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#f2f2f2;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path39163"
inkscape:connector-curvature="0" />
<path
id="path39165"
- d="M -92.46875,415.53125 -92.5,411.5 l 4,0"
+ d="M -92.46875,415.53125 -92.5,411.5 h 4"
style="opacity:0.7;fill:none;stroke:url(#linearGradient39201);stroke-width:1px;stroke-linecap:round"
inkscape:connector-curvature="0" />
<path
style="opacity:0.7;fill:none;stroke:url(#linearGradient39203);stroke-width:1px;stroke-linecap:round"
- d="M -86.46875,415.53125 -86.5,411.5 l 4,0"
+ d="M -86.46875,415.53125 -86.5,411.5 h 4"
id="path39167"
inkscape:connector-curvature="0" />
<path
style="opacity:0.7;fill:none;stroke:url(#linearGradient39205);stroke-width:1px;stroke-linecap:round"
- d="M -92.46875,421.53125 -92.5,417.5 l 4,0"
+ d="M -92.46875,421.53125 -92.5,417.5 h 4"
id="path39169"
inkscape:connector-curvature="0" />
<path
id="path39171"
- d="M -86.46875,421.53125 -86.5,417.5 l 4,0"
+ d="M -86.46875,421.53125 -86.5,417.5 h 4"
style="opacity:0.7;fill:none;stroke:url(#linearGradient39207);stroke-width:1px;stroke-linecap:round"
inkscape:connector-curvature="0" />
</g>
<rect
- style="opacity:0.07999998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.07999998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37922"
width="1.9785498"
height="10"
x="-215.97287"
y="48" />
<rect
- style="opacity:0.07999998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.07999998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37896-1"
width="2.9785526"
height="10"
@@ -73959,29 +72916,29 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- style="fill:none;stroke:#542b00;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.90196078;stroke-dasharray:none;stroke-dashoffset:7.40000265;display:inline"
+ style="display:inline;fill:none;stroke:#542b00;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:0.90196078"
id="rect39175"
width="1.9999995"
height="9.999959"
x="-38.484093"
y="236.00082"
- transform="matrix(1,2.1226448e-5,0,1,0,0)" />
+ transform="skewY(0.00121619)" />
<rect
- transform="matrix(1,3.6759233e-5,0,1,0,0)"
+ transform="skewY(0.00210615)"
y="236.5014"
x="-37.984093"
height="8.9999657"
width="0.9999997"
id="rect39178"
- style="fill:#ffcb91;fill-opacity:1;fill-rule:nonzero;display:inline"
+ style="display:inline;fill:#ffcb91;fill-opacity:1;fill-rule:nonzero"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<path
sodipodi:nodetypes="cccc"
id="path39180"
- d="m -37.484093,246.00001 -0.9549,0.0112 -0.0271,-10.01124 1.982,4e-5 0,1"
- style="fill:none;stroke:#462400;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:7.40000265;display:inline"
+ d="m -37.484093,246.00001 -0.9549,0.0112 -0.0271,-10.01124 1.982,4e-5 v 1"
+ style="display:inline;fill:none;stroke:#462400;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:7.40000248;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
<rect
@@ -73990,18 +72947,18 @@
height="10"
width="2.9785526"
id="rect37920"
- style="opacity:0.07999998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.07999998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<g
transform="translate(-184.01023,-189.50001)"
id="g39182">
<rect
- transform="matrix(1,2.6522988e-5,0,1,0,0)"
+ transform="skewY(0.00151966)"
y="236.00104"
x="-38.484093"
height="9.9999399"
width="1.9999998"
id="rect39184"
- style="fill:none;stroke:#542b00;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.90196078;stroke-dasharray:none;stroke-dashoffset:7.40000265;display:inline"
+ style="display:inline;fill:none;stroke:#542b00;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:0.90196078"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
@@ -74009,16 +72966,16 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- style="fill:#ffcb91;fill-opacity:1;fill-rule:nonzero;display:inline"
+ style="display:inline;fill:#ffcb91;fill-opacity:1;fill-rule:nonzero"
id="rect39186"
width="0.99999994"
height="9.0000439"
x="-37.984093"
y="236.50175"
- transform="matrix(1,4.7261927e-5,0,1,0,0)" />
+ transform="skewY(0.00270791)" />
<path
- style="fill:none;stroke:#462400;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:7.40000265;display:inline"
- d="m -38.484093,237.00001 0.018,-1.00004 1.982,4e-5 0,1"
+ style="display:inline;fill:none;stroke:#462400;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:7.40000248;stroke-opacity:1"
+ d="m -38.484093,237.00001 0.018,-1.00004 1.982,4e-5 v 1"
id="path39189"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
@@ -74027,13 +72984,13 @@
transform="matrix(-1,0,0,1,-252.97841,-189.50001)"
id="g39191">
<rect
- transform="matrix(1,2.1226448e-5,0,1,0,0)"
+ transform="skewY(0.00121619)"
y="236.00082"
x="-38.484093"
height="9.999959"
width="1.9999995"
id="rect39193"
- style="fill:none;stroke:#542b00;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.90196078;stroke-dasharray:none;stroke-dashoffset:7.40000265;display:inline"
+ style="display:inline;fill:none;stroke:#542b00;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:0.90196078"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
@@ -74041,16 +72998,16 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- style="fill:#ffcb91;fill-opacity:1;fill-rule:nonzero;display:inline"
+ style="display:inline;fill:#ffcb91;fill-opacity:1;fill-rule:nonzero"
id="rect39195"
width="0.9999997"
height="8.9999657"
x="-37.984093"
y="236.5014"
- transform="matrix(1,3.6759233e-5,0,1,0,0)" />
+ transform="skewY(0.00210615)" />
<path
- style="fill:none;stroke:#462400;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:7.40000265;display:inline"
- d="m -37.484093,246.00001 -0.9549,0.0112 -0.0271,-10.01124 1.982,4e-5 0,1"
+ style="display:inline;fill:none;stroke:#462400;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:7.40000248;stroke-opacity:1"
+ d="m -37.484093,246.00001 -0.9549,0.0112 -0.0271,-10.01124 1.982,4e-5 v 1"
id="path39197"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
@@ -74064,15 +73021,15 @@
height="16"
width="16"
id="rect39211"
- style="opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;enable-background:accumulate"
transform="matrix(0,1,1,0,0,0)" />
<g
transform="translate(353,-272)"
style="opacity:0.55"
id="g39213">
<path
- d="m -93.5,422.5 12,0 0,-12 -12,0 0,12 z m 0,-6 12,0 m -6.00001,-5.99959 0,12"
- style="fill:none;stroke:#000000;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -93.5,422.5 h 12 v -12 h -12 z m 0,-6 h 12 m -6.00001,-5.99959 v 12"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path39215"
sodipodi:nodetypes="ccccccccc"
inkscape:connector-curvature="0" />
@@ -74084,36 +73041,36 @@
height="13"
width="13"
id="rect39217"
- style="opacity:0.7;fill:url(#linearGradient39246);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:url(#linearGradient39246);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<path
id="path39219"
- style="fill:none;stroke:#f2f2f2;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -93.5,422.5 12,0 -1e-5,-11.99959 -12,0 1e-5,11.99959 z m 0,-6 12,0 m -6.00001,-5.99959 1e-5,11.99959"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#f2f2f2;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -93.5,422.5 h 12 l -1e-5,-11.99959 h -12 z m 0,-6 h 12 m -6.00001,-5.99959 1e-5,11.99959"
sodipodi:nodetypes="ccccccccc"
inkscape:connector-curvature="0" />
<path
style="opacity:0.7;fill:none;stroke:url(#linearGradient39248);stroke-width:1px;stroke-linecap:round"
- d="M -92.46875,415.53125 -92.5,411.5 l 4,0"
+ d="M -92.46875,415.53125 -92.5,411.5 h 4"
id="path39221"
inkscape:connector-curvature="0" />
<path
id="path39223"
- d="M -86.46875,415.53125 -86.5,411.5 l 4,0"
+ d="M -86.46875,415.53125 -86.5,411.5 h 4"
style="opacity:0.7;fill:none;stroke:url(#linearGradient39252);stroke-width:1px;stroke-linecap:round"
inkscape:connector-curvature="0" />
<path
id="path39225"
- d="M -92.46875,421.53125 -92.5,417.5 l 4,0"
+ d="M -92.46875,421.53125 -92.5,417.5 h 4"
style="opacity:0.7;fill:none;stroke:url(#linearGradient39255);stroke-width:1px;stroke-linecap:round"
inkscape:connector-curvature="0" />
<path
style="opacity:0.7;fill:none;stroke:url(#linearGradient39259);stroke-width:1px;stroke-linecap:round"
- d="M -86.46875,421.53125 -86.5,417.5 l 4,0"
+ d="M -86.46875,421.53125 -86.5,417.5 h 4"
id="path39227"
inkscape:connector-curvature="0" />
</g>
<rect
- transform="matrix(0,-1,1,0,0,0)"
+ transform="rotate(-90)"
rx="0"
ry="0"
y="257.5"
@@ -74121,9 +73078,9 @@
height="3"
width="2.9998772"
id="rect39229"
- style="fill:none;stroke:#402100;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#402100;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<rect
- style="opacity:0.07999998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.07999998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37866"
width="3.9785564"
height="4"
@@ -74135,7 +73092,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path39231"
d="m 258,137 c 0,0.6694 10e-6,1.3388 10e-6,2.0082 0.66939,0 1.33877,0 2.00817,0 0,-0.6694 -10e-6,-1.3388 -10e-6,-2.0082 -0.66939,0 -1.33878,0 -2.00817,0 z"
- style="fill:#ffc17d;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffc17d;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<rect
y="137"
@@ -74143,10 +73100,10 @@
height="4"
width="3.9785564"
id="rect37868"
- style="opacity:0.07999998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.07999998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- transform="matrix(0,-1,1,0,0,0)"
- style="fill:none;stroke:#402100;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ transform="rotate(-90)"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#402100;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect39233"
width="2.9998772"
height="3"
@@ -74160,16 +73117,16 @@
height="4"
width="3.9785564"
id="rect37870"
- style="opacity:0.07999998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.07999998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="opacity:0.07999998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.07999998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37896"
width="3.9785564"
height="4"
x="265.02145"
y="144" />
<path
- style="fill:#ffc17d;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffc17d;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;enable-background:accumulate"
d="m 264.99183,137 c 0,0.6694 1e-5,1.3388 1e-5,2.0082 0.66939,0 1.33877,0 2.00817,0 0,-0.6694 -10e-6,-1.3388 -10e-6,-2.0082 -0.66939,0 -1.33878,0 -2.00817,0 z"
id="path39235"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -74184,19 +73141,19 @@
height="3"
width="2.9998772"
id="rect39237"
- style="fill:none;stroke:#402100;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- transform="matrix(0,-1,1,0,0,0)" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#402100;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
+ transform="rotate(-90)" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path39239"
d="m 257.99182,143.9918 c 0,0.6694 10e-6,1.3388 10e-6,2.0082 0.66939,0 1.33877,0 2.00817,0 0,-0.6694 -10e-6,-1.3388 -10e-6,-2.0082 -0.66939,0 -1.33878,0 -2.00817,0 z"
- style="fill:#ffc17d;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffc17d;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<rect
- transform="matrix(0,-1,1,0,0,0)"
- style="fill:none;stroke:#402100;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ transform="rotate(-90)"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#402100;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect39241"
width="2.9998772"
height="3"
@@ -74205,7 +73162,7 @@
ry="0"
rx="0" />
<path
- style="fill:#ffc17d;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffc17d;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;enable-background:accumulate"
d="m 265,143.9918 c 0,0.6694 10e-6,1.3388 10e-6,2.0082 0.66939,0 1.33877,0 2.00817,0 0,-0.6694 -10e-6,-1.3388 -10e-6,-2.0082 -0.66939,0 -1.33878,0 -2.00817,0 z"
id="path39244"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -74224,7 +73181,7 @@
height="16"
width="16"
id="rect39095"
- style="opacity:0;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<g
id="g39082">
<g
@@ -74236,14 +73193,14 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path38944"
- d="m 489.5,570.5 7.5,0 c 7.75,0 6.25,-9 2.5,-9 l -1,0"
- style="fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 489.5,570.5 h 7.5 c 7.75,0 6.25,-9 2.5,-9 h -1"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cssc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cssc"
- style="fill:none;stroke:url(#linearGradient39115);stroke-width:1.39999998;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 489,570.5 8,0 c 7.75,0 6.25,-9 2.5,-9 l -1,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient39115);stroke-width:1.39999998;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 489,570.5 h 8 c 7.75,0 6.25,-9 2.5,-9 h -1"
id="path38946"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -74253,18 +73210,18 @@
<path
sodipodi:nodetypes="cccsccccccc"
id="path38948"
- d="m 493.5,535.5 c -0.554,0 -1,0.446 -1,1 l 0,8 c 0,0.554 0.446,1 1,1 0.554,0 1,-0.446 1,-1 l 1.5,0 c 1.939,0 3.5,-1.561 3.5,-3.5 l 0,-1 c 0,-1.939 -1.561,-3.5 -3.5,-3.5 l -1.5,0 c 0,-0.554 -0.446,-1 -1,-1 z"
- style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 493.5,535.5 c -0.554,0 -1,0.446 -1,1 v 8 c 0,0.554 0.446,1 1,1 0.554,0 1,-0.446 1,-1 h 1.5 c 1.939,0 3.5,-1.561 3.5,-3.5 v -1 c 0,-1.939 -1.561,-3.5 -3.5,-3.5 h -1.5 c 0,-0.554 -0.446,-1 -1,-1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffeeaa;fill-opacity:1;fill-rule:evenodd;stroke:#28220b;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 492.5,539.5 -3,0 c -0.54593,0 -0.98543,-0.4395 -0.98543,-0.98544 0,-0.54593 0.4395,-0.98543 0.98543,-0.98543 l 3,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffeeaa;fill-opacity:1;fill-rule:evenodd;stroke:#28220b;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 492.5,539.5 h -3 c -0.54593,0 -0.98543,-0.4395 -0.98543,-0.98544 0,-0.54593 0.4395,-0.98543 0.98543,-0.98543 h 3"
id="rect38938"
sodipodi:nodetypes="ccscc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient39117);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 494.5,543.59375 1.5,0 c 1.45545,0 2.59375,-1.1383 2.59375,-2.59375 l 0,-1 c 0,-1.45545 -1.1383,-2.59375 -2.59375,-2.59375 l -1.5,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient39117);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 494.5,543.59375 h 1.5 c 1.45545,0 2.59375,-1.1383 2.59375,-2.59375 v -1 c 0,-1.45545 -1.1383,-2.59375 -2.59375,-2.59375 h -1.5"
id="path39045"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
@@ -74276,15 +73233,15 @@
height="9"
width="1"
id="rect38950"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<path
- style="fill:none;stroke:url(#linearGradient39119);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 494.5,542.5 1.5,0 c 0.94305,0 1.5,-0.55695 1.5,-1.5 l 0,-1 c 0,-0.94305 -0.55695,-1.5 -1.5,-1.5 l -1.5,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient39119);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 494.5,542.5 h 1.5 c 0.94305,0 1.5,-0.55695 1.5,-1.5 v -1 c 0,-0.94305 -0.55695,-1.5 -1.5,-1.5 h -1.5"
id="path39068"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.4;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.4;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect39052"
width="1"
height="7"
@@ -74295,14 +73252,14 @@
<path
sodipodi:nodetypes="cccccc"
id="path39076"
- d="m 494.5,542.5 1.5,0 c 0.94305,0 1.5,-0.55695 1.5,-1.5 l 0,-1 c 0,-0.94305 -0.55695,-1.5 -1.5,-1.5 l -1.5,0"
- style="fill:none;stroke:url(#linearGradient39122);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 494.5,542.5 h 1.5 c 0.94305,0 1.5,-0.55695 1.5,-1.5 v -1 c 0,-0.94305 -0.55695,-1.5 -1.5,-1.5 h -1.5"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient39122);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccscc"
id="path39534"
- d="m 492.5,543.47087 -3,0 c -0.54593,0 -0.98543,-0.4395 -0.98543,-0.98544 0,-0.54593 0.4395,-0.98543 0.98543,-0.98543 l 3,0"
- style="fill:#ffeeaa;fill-opacity:1;fill-rule:evenodd;stroke:#28220b;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 492.5,543.47087 h -3 c -0.54593,0 -0.98543,-0.4395 -0.98543,-0.98544 0,-0.54593 0.4395,-0.98543 0.98543,-0.98543 h 3"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffeeaa;fill-opacity:1;fill-rule:evenodd;stroke:#28220b;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -74318,7 +73275,7 @@
transform="translate(5.4013367,9.4697686)"
style="display:inline;enable-background:new">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect39242"
width="16"
height="16"
@@ -74338,40 +73295,34 @@
transform="matrix(0.927848,0,0,0.916217,-28.19594,40.73172)"
id="g39246"
style="display:inline">
- <path
+ <circle
transform="matrix(1.0155084,0,0,1.0286863,37.51084,101.58226)"
- sodipodi:type="arc"
- style="fill:url(#linearGradient39261);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.8489247;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:url(#linearGradient39261);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.8489247;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path39248"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
- style="fill:none;stroke:url(#linearGradient39265);stroke-width:1.17973554;stroke-opacity:1;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient39265);stroke-width:1.17973554;stroke-opacity:1"
id="g39250"
transform="matrix(0.784039,0,0,0.779055,-3.508124,71.29625)"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path39252"
- style="fill:none;stroke:url(#linearGradient39263);stroke-width:1.22986293;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(1.0337319,0,0,1.0470635,35.105336,99.413761)" />
+ style="fill:none;stroke:url(#linearGradient39263);stroke-width:1.22986293;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(1.0337319,0,0,1.0470635,35.105336,99.413761)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
</g>
@@ -74379,12 +73330,12 @@
sodipodi:nodetypes="cccccccccccccccccccccccccc"
id="path39309"
transform="translate(105,-235.00008)"
- d="m 32,645 0,1 -1,0 0,2 2,0 0,-1 2,0 0,2 -1,0 0,1.25 -1,0 0,1.75 2,0 0,-1.5 1,0 0,-1 1,0 0,-3.5 -1,0 0,-1 -4,0 z m 1,8 0,2 2,0 0,-2 -2,0 z"
- style="opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;display:inline;enable-background:new"
+ d="m 32,645 v 1 h -1 v 2 h 2 v -1 h 2 v 2 h -1 v 1.25 H 33 V 652 h 2 v -1.5 h 1 v -1 h 1 V 646 h -1 v -1 z m 1,8 v 2 h 2 v -2 z"
+ style="display:inline;opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;enable-background:new"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new"
- d="m 32,645 0,1 -1,0 0,2 2,0 0,-1 2,0 -0.02802,1.97638 -1,0 L 34,650.25 l -1,0 0,1.75 2,0 0,-1.5 1,0 0,-1 1,0 0,-3.5 -1,0 0,-1 -4,0 z m 1,8 0,2 2,0 0,-2 -2,0 z"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
+ d="m 32,645 v 1 h -1 v 2 h 2 v -1 h 2 l -0.02802,1.97638 h -1 L 34,650.25 H 33 V 652 h 2 v -1.5 h 1 v -1 h 1 V 646 h -1 v -1 z m 1,8 v 2 h 2 v -2 z"
transform="translate(105,-235.00008)"
id="path11803-1"
sodipodi:nodetypes="cccccccccccccccccccccccccc"
@@ -74402,7 +73353,7 @@
transform="translate(5.4013367,9.4697686)"
style="display:inline;enable-background:new">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect39698"
width="16"
height="16"
@@ -74422,40 +73373,34 @@
transform="matrix(0.927848,0,0,0.916217,-28.19594,40.73172)"
id="g39702"
style="display:inline">
- <path
+ <circle
transform="matrix(0.8835182,0,0,0.8949854,54.933548,117.35897)"
- sodipodi:type="arc"
- style="fill:url(#linearGradient39261-4-5);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.97574574;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient39261-4-5);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.97574574;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path39704"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
- style="fill:none;stroke:url(#linearGradient39718);stroke-width:1.17973554;stroke-opacity:1;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient39718);stroke-width:1.17973554;stroke-opacity:1"
id="g39706"
transform="matrix(0.784039,0,0,0.779055,-3.508124,71.29625)"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path39708"
- style="fill:none;stroke:url(#linearGradient39716);stroke-width:1.44816053;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.87787,0,0,0.889264,55.67911,118.0341)" />
+ style="fill:none;stroke:url(#linearGradient39716);stroke-width:1.44816053;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.87787,0,0,0.889264,55.67911,118.0341)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
</g>
@@ -74464,12 +73409,12 @@
style="opacity:0.7;stroke:#000000">
<path
style="fill:#ffffff;fill-rule:evenodd;stroke:#000000"
- d="m 138,413.99992 c 0.25,0 2,0 2,0 l 0,4 0.75,0 0,1 -3.5,0 0,-1 0.75,0 0,-3 c -0.66667,0 4.15703,0 -1.25,0 l 0.5,-1 0.75,0 z"
+ d="m 138,413.99992 c 0.25,0 2,0 2,0 v 4 h 0.75 v 1 h -3.5 v -1 H 138 v -3 c -0.66667,0 4.15703,0 -1.25,0 l 0.5,-1 z"
id="path39804"
sodipodi:nodetypes="cccccccccccc"
inkscape:connector-curvature="0" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect39806"
width="2"
height="2"
@@ -74483,7 +73428,7 @@
<path
sodipodi:nodetypes="cccccccccccc"
id="path39710"
- d="m 138,413.99992 c 0.25,0 2,0 2,0 l 0,4 0.75,0 0,1 -3.5,0 0,-1 0.75,0 0,-3 c -0.66667,0 4.15703,0 -1.25,0 l 0.5,-1 0.75,0 z"
+ d="m 138,413.99992 c 0.25,0 2,0 2,0 v 4 h 0.75 v 1 h -3.5 v -1 H 138 v -3 c -0.66667,0 4.15703,0 -1.25,0 l 0.5,-1 z"
style="fill:#ffffff;fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
<rect
@@ -74494,7 +73439,7 @@
height="2"
width="2"
id="rect39712"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
</g>
</g>
<g
@@ -74509,12 +73454,12 @@
height="16"
width="16"
id="rect17338"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g17340">
<rect
ry="0"
- style="fill:url(#linearGradient32725);fill-opacity:1;fill-rule:nonzero;stroke:#333333;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient32725);fill-opacity:1;fill-rule:nonzero;stroke:#333333;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect17342"
width="13.016124"
height="12.953857"
@@ -74526,17 +73471,17 @@
height="11.046139"
width="11.000001"
id="rect17344"
- style="fill:url(#linearGradient32727);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00207269;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient32727);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00207269;marker:none;enable-background:accumulate"
ry="0" />
<path
inkscape:connector-curvature="0"
id="path17346"
- d="m -58,398 0,2 2,0 0,-2 -2,0 z m 2,2 0,2 2,0 0,-2 -2,0 z m 2,0 2,0 0,-2 -2,0 0,2 z m 2,0 0,2 2,0 0,-2 -2,0 z m 2,0 2,0 0,-2 -2,0 0,2 z m 2,0 0,2 2,0 0,-2 -2,0 z m 0,2 -2,0 0,2 2,0 0,-2 z m 0,2 0,2 2,0 0,-2 -2,0 z m 0,2 -2,0 0,2 2,0 0,-2 z m 0,2 0,2 2,0 0,-2 -2,0 z m -2,0 -2,0 0,2 2,0 0,-2 z m -2,0 0,-2 -2,0 0,2 2,0 z m -2,0 -2,0 0,2 2,0 0,-2 z m -2,0 0,-2 -2,0 0,2 2,0 z m 0,-2 2,0 0,-2 -2,0 0,2 z m 0,-2 0,-2 -2,0 0,2 2,0 z m 2,0 2,0 0,-2 -2,0 0,2 z m 2,0 0,2 2,0 0,-2 -2,0 z"
- style="fill:url(#linearGradient32729);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m -58,398 v 2 h 2 v -2 z m 2,2 v 2 h 2 v -2 z m 2,0 h 2 v -2 h -2 z m 2,0 v 2 h 2 v -2 z m 2,0 h 2 v -2 h -2 z m 2,0 v 2 h 2 v -2 z m 0,2 h -2 v 2 h 2 z m 0,2 v 2 h 2 v -2 z m 0,2 h -2 v 2 h 2 z m 0,2 v 2 h 2 v -2 z m -2,0 h -2 v 2 h 2 z m -2,0 v -2 h -2 v 2 z m -2,0 h -2 v 2 h 2 z m -2,0 v -2 h -2 v 2 z m 0,-2 h 2 v -2 h -2 z m 0,-2 v -2 h -2 v 2 z m 2,0 h 2 v -2 h -2 z m 2,0 v 2 h 2 v -2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient32729);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
style="opacity:0.45;fill:none;stroke:url(#linearGradient32731);stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m -46.482307,398.50001 -11.017704,0 0,11 11.017704,0 0,-11"
+ d="m -46.482307,398.50001 h -11.017704 v 11 h 11.017704 v -11"
id="path17348"
sodipodi:nodetypes="ccc" />
</g>
@@ -74546,10 +73491,10 @@
sodipodi:nodetypes="cc"
id="path17578"
d="m 217.5,24.000005 11.5,-11.5"
- style="opacity:0.65;fill:none;stroke:#000000;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ style="opacity:0.65;fill:none;stroke:#000000;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<g
mask="url(#mask40306)"
- transform="translate(21,0)"
+ transform="translate(21)"
id="g40264">
<rect
y="11.546152"
@@ -74557,11 +73502,11 @@
height="12.953857"
width="13.016124"
id="rect40266"
- style="fill:#f2f2f2;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#f2f2f2;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
ry="0" />
<rect
ry="0"
- style="fill:url(#linearGradient40295);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00207269;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient40295);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00207269;marker:none;enable-background:accumulate"
id="rect40268"
width="11.000001"
height="11.046139"
@@ -74579,37 +73524,37 @@
height="3"
width="3"
id="rect40276"
- style="fill:#106386;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#106386;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate" />
<rect
y="15"
x="199"
height="3"
width="3"
id="rect40278"
- style="fill:#ba0036;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ba0036;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate" />
<rect
- style="fill:#9f0022;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#9f0022;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate"
id="rect40280"
width="3"
height="3"
x="202"
y="12" />
<rect
- style="fill:#688c7f;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#688c7f;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate"
id="rect40282"
width="3"
height="3"
x="205"
y="15" />
<rect
- style="fill:#b77100;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#b77100;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate"
id="rect40284"
width="3"
height="3"
x="196"
y="18" />
<rect
- style="fill:#a67c58;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#a67c58;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate"
id="rect40286"
width="3"
height="3"
@@ -74621,21 +73566,21 @@
height="3"
width="3"
id="rect40288"
- style="fill:#7a2537;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#7a2537;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate" />
<rect
y="21"
x="205"
height="3"
width="3"
id="rect40290"
- style="fill:#869c2b;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#869c2b;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate" />
</g>
</g>
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc"
id="path40292"
- d="m 207.51769,12.50001 -11.0177,0 0,11 11.0177,0 0,-11"
+ d="m 207.51769,12.50001 h -11.0177 v 11 h 11.0177 v -11"
style="fill:none;stroke:url(#linearGradient40297);stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
</g>
</g>
@@ -74643,7 +73588,7 @@
id="ICON_COPYDOWN"
transform="translate(0,-62.1)">
<rect
- style="opacity:0.01000001;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect38951"
width="16"
height="16"
@@ -74661,31 +73606,31 @@
height="9.9687805"
width="10.000007"
id="rect39098-7"
- style="fill:url(#linearGradient40731);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient40731);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="ccccc"
id="path39100-7"
- d="m 6.5,181.53121 7.99921,0 0,7.96879 -7.99921,0 0,-7.96879 z"
- style="fill:none;stroke:url(#linearGradient40733-0);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 6.5,181.53121 h 7.99921 V 189.5 H 6.5 Z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient40733-0);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<g
transform="translate(-1.00079,-19)"
- style="fill:#ffffff;display:inline;enable-background:new"
+ style="display:inline;fill:#ffffff;enable-background:new"
id="g39118-3">
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.60000002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 10.25,199 c -0.1385,0 -0.25,0.1115 -0.25,0.25 l 0,1.75 -0.5,0 c -0.277,0 -0.5,0.223 -0.5,0.5 0,0.277 0.223,0.5 0.5,0.5 l 4,0 c 0.277,0 0.5,-0.223 0.5,-0.5 0,-0.277 -0.223,-0.5 -0.5,-0.5 l -0.5,0 0,-1.75 C 13,199.1115 12.8885,199 12.75,199 l -2.5,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.60000002;marker:none;enable-background:accumulate"
+ d="M 10.25,199 C 10.1115,199 10,199.1115 10,199.25 V 201 H 9.5 c -0.277,0 -0.5,0.223 -0.5,0.5 0,0.277 0.223,0.5 0.5,0.5 h 4 c 0.277,0 0.5,-0.223 0.5,-0.5 0,-0.277 -0.223,-0.5 -0.5,-0.5 H 13 v -1.75 C 13,199.1115 12.8885,199 12.75,199 Z"
id="path39183-3"
inkscape:connector-curvature="0" />
<path
id="rect39114-5"
- d="m 10.25,199 c -0.1385,0 -0.25,0.1115 -0.25,0.25 l 0,1.75 -0.5,0 c -0.277,0 -0.5,0.223 -0.5,0.5 0,0.277 0.223,0.5 0.5,0.5 l 4,0 c 0.277,0 0.5,-0.223 0.5,-0.5 0,-0.277 -0.223,-0.5 -0.5,-0.5 l -0.5,0 0,-1.75 C 13,199.1115 12.8885,199 12.75,199 l -2.5,0 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.60000002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 10.25,199 C 10.1115,199 10,199.1115 10,199.25 V 201 H 9.5 c -0.277,0 -0.5,0.223 -0.5,0.5 0,0.277 0.223,0.5 0.5,0.5 h 4 c 0.277,0 0.5,-0.223 0.5,-0.5 0,-0.277 -0.223,-0.5 -0.5,-0.5 H 13 v -1.75 C 13,199.1115 12.8885,199 12.75,199 Z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.60000002;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<path
style="opacity:0.45;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
- d="m 9.49921,181.5 2,0"
+ d="m 9.49921,181.5 h 2"
id="path39106-9"
inkscape:connector-curvature="0" />
</g>
@@ -74694,17 +73639,17 @@
id="g38966">
<g
id="g38968"
- transform="matrix(-1,0,0,-1,215.25,222.75)">
+ transform="rotate(180,107.625,111.375)">
<path
sodipodi:nodetypes="ccc"
- style="fill:none;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
- d="m 174.5,38.5 0,5 5,0"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="m 174.5,38.5 v 5 h 5"
id="path38970"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cz"
id="path38972"
- style="fill:none;stroke:#000000;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 175.5,42.5 5,-5"
inkscape:connector-curvature="0" />
</g>
@@ -74713,7 +73658,7 @@
id="g38975">
<g
style="display:inline"
- transform="matrix(-1,0,0,-1,272.1613,155.99999)"
+ transform="rotate(180,136.08065,77.999995)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -74722,18 +73667,18 @@
d=""
sodipodi:nodetypes="cz"
id="path38984"
- style="fill:none;stroke:#f2f2f2;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#f2f2f2;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cz"
id="path38987"
- style="opacity:0.85;fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.85;fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
d=""
inkscape:connector-curvature="0" />
</g>
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 188,51 0,6 -1,0 0,-5 -5,0 0,-1 6,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;enable-background:accumulate"
+ d="m 188,51 v 6 h -1 v -5 h -5 v -1 z"
id="path38994"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
@@ -74742,8 +73687,8 @@
style="opacity:0.2"
transform="matrix(-1,0,0,1,-29,-335)">
<path
- style="fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -216,387 0,2 1,0 0,-1 1,0 0,-1 -2,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
+ d="m -216,387 v 2 h 1 v -1 h 1 v -1 z"
id="path38998"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
@@ -74751,7 +73696,7 @@
</g>
<g
style="display:inline"
- transform="matrix(-1,0,0,-1,118.4113,290.74999)"
+ transform="rotate(180,59.20565,145.375)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -74760,12 +73705,12 @@
d=""
sodipodi:nodetypes="cz"
id="path39015"
- style="fill:none;stroke:#f2f2f2;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#f2f2f2;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cz"
id="path39017"
- style="fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 78.1613,110.99999 5.5,-5.5"
inkscape:connector-curvature="0" />
</g>
@@ -74776,8 +73721,8 @@
<path
sodipodi:nodetypes="ccccccc"
id="path39022"
- d="m -216,387 0,2 1,0 0,-1 1,0 0,-1 -2,0 z"
- style="opacity:0.7;fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -216,387 v 2 h 1 v -1 h 1 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -74791,7 +73736,7 @@
height="16"
width="16"
id="rect38948"
- style="opacity:0.01000001;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g39096"
transform="translate(1.00079,19)">
@@ -74803,49 +73748,49 @@
height="9.9687805"
width="10.000007"
id="rect39098"
- style="fill:url(#linearGradient40731);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient40731);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="ccccc"
id="path39100"
- d="m 6.5,181.53121 7.99921,0 0,7.96879 -7.99921,0 0,-7.96879 z"
- style="fill:none;stroke:url(#linearGradient40733);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 6.5,181.53121 h 7.99921 V 189.5 H 6.5 Z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient40733);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<g
transform="translate(-1.00079,-19)"
- style="fill:#ffffff;display:inline;enable-background:new"
+ style="display:inline;fill:#ffffff;enable-background:new"
id="g39118">
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.60000002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 10.25,199 c -0.1385,0 -0.25,0.1115 -0.25,0.25 l 0,1.75 -0.5,0 c -0.277,0 -0.5,0.223 -0.5,0.5 0,0.277 0.223,0.5 0.5,0.5 l 4,0 c 0.277,0 0.5,-0.223 0.5,-0.5 0,-0.277 -0.223,-0.5 -0.5,-0.5 l -0.5,0 0,-1.75 C 13,199.1115 12.8885,199 12.75,199 l -2.5,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.60000002;marker:none;enable-background:accumulate"
+ d="M 10.25,199 C 10.1115,199 10,199.1115 10,199.25 V 201 H 9.5 c -0.277,0 -0.5,0.223 -0.5,0.5 0,0.277 0.223,0.5 0.5,0.5 h 4 c 0.277,0 0.5,-0.223 0.5,-0.5 0,-0.277 -0.223,-0.5 -0.5,-0.5 H 13 v -1.75 C 13,199.1115 12.8885,199 12.75,199 Z"
id="path39183"
inkscape:connector-curvature="0" />
<path
id="rect39114"
- d="m 10.25,199 c -0.1385,0 -0.25,0.1115 -0.25,0.25 l 0,1.75 -0.5,0 c -0.277,0 -0.5,0.223 -0.5,0.5 0,0.277 0.223,0.5 0.5,0.5 l 4,0 c 0.277,0 0.5,-0.223 0.5,-0.5 0,-0.277 -0.223,-0.5 -0.5,-0.5 l -0.5,0 0,-1.75 C 13,199.1115 12.8885,199 12.75,199 l -2.5,0 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.60000002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 10.25,199 C 10.1115,199 10,199.1115 10,199.25 V 201 H 9.5 c -0.277,0 -0.5,0.223 -0.5,0.5 0,0.277 0.223,0.5 0.5,0.5 h 4 c 0.277,0 0.5,-0.223 0.5,-0.5 0,-0.277 -0.223,-0.5 -0.5,-0.5 H 13 v -1.75 C 13,199.1115 12.8885,199 12.75,199 Z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.60000002;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<path
style="opacity:0.45;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
- d="m 9.49921,181.5 2,0"
+ d="m 9.49921,181.5 h 2"
id="path39106"
inkscape:connector-curvature="0" />
</g>
<g
id="g39052"
- transform="matrix(0,1,-1,0,199.75,171.75)">
+ transform="rotate(90,14,185.75)">
<g
- transform="matrix(-1,0,0,-1,215.25,222.75)"
+ transform="rotate(180,107.625,111.375)"
id="g39054">
<path
id="path39056"
- d="m 174.5,38.5 0,5 5,0"
- style="fill:none;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
+ d="m 174.5,38.5 v 5 h 5"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
<path
d="m 175.5,42.5 5,-5"
- style="fill:none;stroke:#000000;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path39058"
sodipodi:nodetypes="cz"
inkscape:connector-curvature="0" />
@@ -74858,17 +73803,17 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(-1,0,0,-1,272.1613,155.99999)"
+ transform="rotate(180,136.08065,77.999995)"
style="display:inline">
<path
- style="fill:none;stroke:#f2f2f2;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#f2f2f2;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path39064"
sodipodi:nodetypes="cz"
d=""
inkscape:connector-curvature="0" />
<path
d=""
- style="opacity:0.85;fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.85;fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path39066"
sodipodi:nodetypes="cz"
inkscape:connector-curvature="0" />
@@ -74876,8 +73821,8 @@
<path
sodipodi:nodetypes="ccccccc"
id="path39069"
- d="m 188,51 0,6 -1,0 0,-5 -5,0 0,-1 6,0 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 188,51 v 6 h -1 v -5 h -5 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<g
transform="matrix(-1,0,0,1,-29,-335)"
@@ -74886,8 +73831,8 @@
<path
sodipodi:nodetypes="ccccccc"
id="path39073"
- d="m -216,387 0,2 1,0 0,-1 1,0 0,-1 -2,0 z"
- style="fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -216,387 v 2 h 1 v -1 h 1 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -74896,17 +73841,17 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(-1,0,0,-1,118.4113,290.74999)"
+ transform="rotate(180,59.20565,145.375)"
style="display:inline">
<path
- style="fill:none;stroke:#f2f2f2;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#f2f2f2;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path39078"
sodipodi:nodetypes="cz"
d=""
inkscape:connector-curvature="0" />
<path
d="m 78.1613,110.99999 5.5,-5.5"
- style="fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path39080"
sodipodi:nodetypes="cz"
inkscape:connector-curvature="0" />
@@ -74916,8 +73861,8 @@
style="opacity:0.2"
transform="matrix(-1,0,0,1,-175.75,-207.25)">
<path
- style="opacity:0.7;fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -216,387 0,2 1,0 0,-1 1,0 0,-1 -2,0 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
+ d="m -216,387 v 2 h 1 v -1 h 1 v -1 z"
id="path39085"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
@@ -74929,7 +73874,7 @@
id="ICON_LINK_AREA"
transform="translate(232,503)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect40824"
width="16"
height="16"
@@ -74943,7 +73888,7 @@
style="opacity:0.6"
id="g40663">
<rect
- style="fill:url(#linearGradient40875-3-9-8);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:url(#linearGradient40875-3-9-8);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect40665"
width="7.9999967"
height="9.9999981"
@@ -74952,7 +73897,7 @@
rx="0"
ry="0" />
<rect
- style="fill:none;stroke:url(#linearGradient40877-5-5-9);stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient40877-5-5-9);stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect40667"
width="5.9999967"
height="7.9999981"
@@ -74965,7 +73910,7 @@
id="g40669"
transform="translate(-85,-1)">
<rect
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect40671"
width="8.0000029"
height="9.0000019"
@@ -74983,13 +73928,13 @@
id="rect40673"
style="fill:url(#linearGradient40879-9-8-1);fill-opacity:1;fill-rule:nonzero;stroke:none" />
<path
- style="fill:none;stroke:#333333;stroke-width:0.7499997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
- d="m 73.5,103.75 0,-5.25 4,0"
+ style="fill:none;stroke:#333333;stroke-width:0.7499997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 73.5,103.75 V 98.5 h 4"
id="path40675"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
<rect
- style="fill:none;stroke:url(#linearGradient40881-8-0-8);stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient40881-8-0-8);stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect40677"
width="6.0000033"
height="7.0000019"
@@ -74999,7 +73944,7 @@
ry="0" />
</g>
<rect
- style="opacity:0.4;fill:url(#radialGradient40883-4-0-3);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new"
+ style="display:inline;opacity:0.4;fill:url(#radialGradient40883-4-0-3);fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
id="rect40679"
width="7.0000033"
height="8.0000019"
@@ -75013,15 +73958,15 @@
id="g40681">
<path
id="path40683"
- d="m 116.47121,117.5 -3.99506,0"
- style="fill:none;stroke:#2d2d2d;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 116.47121,117.5 h -3.99506"
+ style="fill:none;stroke:#2d2d2d;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
mask="none"
sodipodi:nodetypes="ccccccccccccsccc"
- style="fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 114.4449,117.46875 c 0,-1.65264 1.12861,-2.96875 2.78125,-2.96875 l 1.5,0 c 1.65264,0 2.71875,1.31617 2.71875,2.9688 l 0,0.0625 c 0,1.65264 -1.06611,2.9687 -2.71875,2.9687 l -1.5,0 c -1.65264,0 -2.78125,-1.31612 -2.78125,-2.96875 l 0,-0.0625 z m 2.03125,0.0312 c 0,0.554 0.2585,0.99995 0.8125,0.99995 l 1.40625,-0.0312 c 0.554,0 0.78125,-0.41475 0.78125,-0.96875 0,-0.554 -0.22725,-1.03125 -0.78125,-1.03125 l -1.40625,0.0312 c -0.554,0 -0.8125,0.44605 -0.8125,1.00005 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 114.4449,117.46875 c 0,-1.65264 1.12861,-2.96875 2.78125,-2.96875 h 1.5 c 1.65264,0 2.71875,1.31617 2.71875,2.9688 v 0.0625 c 0,1.65264 -1.06611,2.9687 -2.71875,2.9687 h -1.5 c -1.65264,0 -2.78125,-1.31612 -2.78125,-2.96875 z m 2.03125,0.0312 c 0,0.554 0.2585,0.99995 0.8125,0.99995 l 1.40625,-0.0312 c 0.554,0 0.78125,-0.41475 0.78125,-0.96875 0,-0.554 -0.22725,-1.03125 -0.78125,-1.03125 l -1.40625,0.0312 c -0.554,0 -0.8125,0.44605 -0.8125,1.00005 z"
id="path40685"
inkscape:connector-curvature="0" />
<rect
@@ -75030,10 +73975,10 @@
height="2.47615"
width="1"
id="rect40687"
- style="opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
transform="matrix(0,1,1,0,0,0)" />
<rect
- style="opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect40689"
width="1"
height="1"
@@ -75042,13 +73987,13 @@
transform="matrix(0,1,1,0,0,0)" />
<path
id="path40691"
- d="m 106.4449,117.4688 c 0,-1.65264 1.12861,-2.96875 2.78125,-2.96875 l 1.5,-5e-5 c 1.65264,0 2.71875,1.31617 2.71875,2.9688 l 0,0.0625 c 0,1.65264 -1.06611,2.9687 -2.71875,2.9687 l -1.5,5e-5 c -1.65264,0 -2.78125,-1.31612 -2.78125,-2.96875 l 0,-0.0625 z m 2.03125,0.0312 c 0,0.554 0.2585,1 0.8125,1 l 1.4375,-5e-5 c 0.554,0 0.75,-0.44595 0.75,-0.99995 0,-0.554 -0.196,-1.00005 -0.75,-1.00005 l -1.4375,5e-5 c -0.554,0 -0.8125,0.446 -0.8125,1 z"
- style="fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 106.4449,117.4688 c 0,-1.65264 1.12861,-2.96875 2.78125,-2.96875 l 1.5,-5e-5 c 1.65264,0 2.71875,1.31617 2.71875,2.9688 v 0.0625 c 0,1.65264 -1.06611,2.9687 -2.71875,2.9687 l -1.5,5e-5 c -1.65264,0 -2.78125,-1.31612 -2.78125,-2.96875 z m 2.03125,0.0312 c 0,0.554 0.2585,1 0.8125,1 l 1.4375,-5e-5 c 0.554,0 0.75,-0.44595 0.75,-0.99995 0,-0.554 -0.196,-1.00005 -0.75,-1.00005 l -1.4375,5e-5 c -0.554,0 -0.8125,0.446 -0.8125,1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccccccccsccc"
mask="none"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect40693"
width="0.99998814"
height="2.5000362"
@@ -75061,16 +74006,16 @@
height="1"
width="1"
id="rect40695"
- style="opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
transform="matrix(0,1,1,0,0,0)" />
<path
- style="opacity:0.55;fill:none;stroke:#1a1a1a;stroke-width:2.79440284;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.55;fill:none;stroke:#1a1a1a;stroke-width:2.79440284;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 116.47121,117.5 -4.99506,-1e-5"
id="path40697"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#ffffff;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#ffffff;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 116.47121,117.5 -4.99506,-1e-5"
id="path40699"
sodipodi:nodetypes="cc"
@@ -75081,10 +74026,10 @@
height="1"
width="1"
id="rect40701"
- style="fill:#dcdcdc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#dcdcdc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate"
transform="matrix(0,1,1,0,0,0)" />
<rect
- style="fill:#dcdcdc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#dcdcdc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate"
id="rect40703"
width="1"
height="1"
@@ -75092,7 +74037,7 @@
y="118.97615"
transform="matrix(0,1,1,0,0,0)" />
<rect
- style="fill:#dcdcdc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#dcdcdc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate"
id="rect40705"
width="1"
height="1"
@@ -75105,10 +74050,10 @@
height="1"
width="1"
id="rect40707"
- style="fill:#dcdcdc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#dcdcdc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate"
transform="matrix(0,1,1,0,0,0)" />
<rect
- style="opacity:0.15;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.15;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect40709"
width="1"
height="0.97614998"
@@ -75130,7 +74075,7 @@
height="16"
width="16"
id="rect40643"
- style="opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<g
id="g40513"
style="opacity:0.8">
@@ -75140,18 +74085,18 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccccc"
id="path40465"
- d="M -27.80208,29.59375 -19.5,29.5 -19.53126,42.40625 -30.5,42.5 l 0.03125,-9.90625 2.66667,-3 z"
- style="fill:url(#linearGradient40511-7-9-5);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline"
+ d="M -27.80208,29.59375 -19.5,29.5 -19.53126,42.40625 -30.5,42.5 l 0.03125,-9.90625 z"
+ style="display:inline;fill:url(#linearGradient40511-7-9-5);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
- d="m -29.5,34 0,7.5 m 3.5,-11 5.5,0"
- style="fill:none;stroke:url(#linearGradient40507-4-8-1);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="m -29.5,34 v 7.5 m 3.5,-11 h 5.5"
+ style="display:inline;fill:none;stroke:url(#linearGradient40507-4-8-1);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
id="path40469"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.5;fill:url(#radialGradient40649-2-6-6);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline"
- d="M -27.80208,29.59375 -19.5,29.5 -19.53126,42.40625 -30.5,42.5 l 0.03125,-9.90625 2.66667,-3 z"
+ style="display:inline;opacity:0.5;fill:url(#radialGradient40649-2-6-6);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
+ d="M -27.80208,29.59375 -19.5,29.5 -19.53126,42.40625 -30.5,42.5 l 0.03125,-9.90625 z"
id="path40645"
sodipodi:nodetypes="cccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -75159,8 +74104,8 @@
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
- d="m -31,33 4,0 0,-4 -4,4 z"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="m -31,33 h 4 v -4 z"
id="path40471"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
@@ -75168,14 +74113,14 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m -30.5,32.00001 0,10.49999 11,-1e-5 0,-12.99999 -8.5,10e-6 -2.5,2.5 0,0 0,0 0,0 z"
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M -30.5,32.00001 V 42.5 l 11,-1e-5 V 29.5 l -8.5,10e-6 z"
+ style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path40473"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
id="path40475"
- d="m -26.5,31.5 0,2 -2,0"
+ d="m -26.5,31.5 v 2 h -2"
style="fill:none;stroke:url(#linearGradient40502-7-8-3);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
@@ -75185,84 +74130,69 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
- <path
- sodipodi:type="arc"
- style="fill:#3771c8;fill-opacity:1;fill-rule:nonzero;stroke:#040910;stroke-width:1.45371544;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;fill:#3771c8;fill-opacity:1;fill-rule:nonzero;stroke:#040910;stroke-width:1.45371544;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path40265"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(0.787566,0,0,0.779223,26.709197,21.3179)" />
- <path
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
+ transform="matrix(0.787566,0,0,0.779223,26.709197,21.3179)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
id="path40267"
style="fill:url(#linearGradient40635-7-2-2);fill-opacity:1;fill-rule:nonzero;stroke:none"
- sodipodi:type="arc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(0.666432,0,0,0.659342,42.69924,35.46375)" />
- <path
+ transform="matrix(0.666432,0,0,0.659342,42.69924,35.46375)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.3631382,0,0,0.3593485,81.755824,69.904768)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- sodipodi:type="arc"
style="opacity:0.7;fill:url(#linearGradient40637-9-5-8);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path40269"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z" />
+ cx="132"
+ cy="118"
+ r="8" />
<path
sodipodi:nodetypes="cc"
id="path40271"
d="m 274.98515,70.995347 c 0,0.953349 -1,1.906699 -2,1.906699"
- style="opacity:0.5;fill:none;stroke:#ffe680;stroke-width:1.18410921px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline;filter:url(#filter13996-9-7-7)"
+ style="display:inline;opacity:0.5;fill:none;stroke:#ffe680;stroke-width:1.18410921px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;filter:url(#filter13996-9-7-7)"
transform="matrix(0.9688184,0,0,0.9547322,-131.63668,47.640696)"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccccccssscsscccscccccccccccccccsccccc"
id="path40273"
- d="m 130.67404,112.3079 c 0.0244,0.78706 -0.15754,1.63085 0.59269,2.02213 0.71197,-0.0434 1.49133,0.64122 1.35667,1.40517 -0.26776,0.77861 0.14071,1.12325 0.95576,1.36401 0.57868,-0.0716 0.79053,-0.93546 0.87357,-1.36401 0.0948,-1.27121 0.51542,-1.09421 0.82108,-1.98991 -0.45733,-0.91502 -0.003,-1.04443 -0.72629,-1.43739 m -1.00945,-3.89288 c -0.4426,0.34378 -0.24372,1.04314 -0.66162,1.39841 -0.45372,0.13628 -0.78226,-0.0605 -1.16771,0.43164 -0.30841,1.10457 0.35004,1.22306 0.90205,1.10457 0.49538,-0.0502 0.61419,-0.94321 0.97928,-0.37853 0.0831,0.10976 0.71917,-0.0403 0.86266,0.18898 0.0669,0.10682 -0.11785,0.0255 -0.14729,0.18955 -0.0428,0.23847 0.27734,0.37341 0.372,0.3824 0.32089,0.0305 0.60005,0.92548 0.83846,1.05499 0,0.46738 0.0924,-0.6774 0.3515,-0.78703 0.22948,-0.0971 0.47929,0.10731 0.5,0 0.29928,-1.55081 -1.26113,-3.00604 -2.82933,-3.58498 z M 128.96474,107.5 c -0.6111,1.01384 0.85343,1.46103 1.73001,1.21329 0.57897,-0.37879 1.00716,-0.92331 0.55665,-1.21329 -0.20614,-0.1415 -2.07706,0.0431 -2.28666,0 l 0,0 0,0 0,0 z m -1.372,1.37253 c -0.49575,-0.14959 0.44952,-0.11945 0.45733,0.45751 0.1696,0.54756 -0.42801,0.23756 0,0.45752 0.70893,0.1644 0.35328,1.70031 -0.28114,1.56208 -0.56042,0.10119 -0.43915,0.95826 -1.64865,0.88279 -0.0836,0.0755 -1.04512,0.61593 -0.81421,1.21521 1.12968,0.30162 -0.36816,1.26478 -0.43867,0.55236 -0.15441,-0.49797 -0.62853,-1.11348 -0.43994,-1.68674 0.11734,-0.63627 0.5689,-1.12263 0.82646,-1.69865 0.36225,-0.61946 0.89084,-1.17688 1.57758,-1.42595 0.21411,-0.16799 0.46159,-0.41691 0.76124,-0.31613 l 0,0 0,0 0,0 z m -0.91467,5.03262 c -0.55163,-0.27585 -0.72934,0.28829 -0.60377,0.7984 0.15577,0.47138 0.52607,0.97695 0.72628,1.43739 0.40435,0.49619 1.512,1.34081 2.17883,1.67696 0.31768,0.16015 0.48418,0 0.24209,-0.23956 -0.31367,-0.6375 -1.14073,-1.94893 -0.48418,-2.15609 0.59647,-0.60342 0.34203,-1.58773 -0.48419,-1.43739 -0.54779,-0.25818 -0.75551,-0.39899 -1.38855,-0.0752 -0.0558,0.0743 -0.12403,0.006 -0.18651,-0.004 l 0,-5.1e-4 0,0 0,0 z"
+ d="m 130.67404,112.3079 c 0.0244,0.78706 -0.15754,1.63085 0.59269,2.02213 0.71197,-0.0434 1.49133,0.64122 1.35667,1.40517 -0.26776,0.77861 0.14071,1.12325 0.95576,1.36401 0.57868,-0.0716 0.79053,-0.93546 0.87357,-1.36401 0.0948,-1.27121 0.51542,-1.09421 0.82108,-1.98991 -0.45733,-0.91502 -0.003,-1.04443 -0.72629,-1.43739 m -1.00945,-3.89288 c -0.4426,0.34378 -0.24372,1.04314 -0.66162,1.39841 -0.45372,0.13628 -0.78226,-0.0605 -1.16771,0.43164 -0.30841,1.10457 0.35004,1.22306 0.90205,1.10457 0.49538,-0.0502 0.61419,-0.94321 0.97928,-0.37853 0.0831,0.10976 0.71917,-0.0403 0.86266,0.18898 0.0669,0.10682 -0.11785,0.0255 -0.14729,0.18955 -0.0428,0.23847 0.27734,0.37341 0.372,0.3824 0.32089,0.0305 0.60005,0.92548 0.83846,1.05499 0,0.46738 0.0924,-0.6774 0.3515,-0.78703 0.22948,-0.0971 0.47929,0.10731 0.5,0 0.29928,-1.55081 -1.26113,-3.00604 -2.82933,-3.58498 z M 128.96474,107.5 c -0.6111,1.01384 0.85343,1.46103 1.73001,1.21329 0.57897,-0.37879 1.00716,-0.92331 0.55665,-1.21329 -0.20614,-0.1415 -2.07706,0.0431 -2.28666,0 z m -1.372,1.37253 c -0.49575,-0.14959 0.44952,-0.11945 0.45733,0.45751 0.1696,0.54756 -0.42801,0.23756 0,0.45752 0.70893,0.1644 0.35328,1.70031 -0.28114,1.56208 -0.56042,0.10119 -0.43915,0.95826 -1.64865,0.88279 -0.0836,0.0755 -1.04512,0.61593 -0.81421,1.21521 1.12968,0.30162 -0.36816,1.26478 -0.43867,0.55236 -0.15441,-0.49797 -0.62853,-1.11348 -0.43994,-1.68674 0.11734,-0.63627 0.5689,-1.12263 0.82646,-1.69865 0.36225,-0.61946 0.89084,-1.17688 1.57758,-1.42595 0.21411,-0.16799 0.46159,-0.41691 0.76124,-0.31613 z m -0.91467,5.03262 c -0.55163,-0.27585 -0.72934,0.28829 -0.60377,0.7984 0.15577,0.47138 0.52607,0.97695 0.72628,1.43739 0.40435,0.49619 1.512,1.34081 2.17883,1.67696 0.31768,0.16015 0.48418,0 0.24209,-0.23956 -0.31367,-0.6375 -1.14073,-1.94893 -0.48418,-2.15609 0.59647,-0.60342 0.34203,-1.58773 -0.48419,-1.43739 -0.54779,-0.25818 -0.75551,-0.39899 -1.38855,-0.0752 -0.0558,0.0743 -0.12403,0.006 -0.18651,-0.004 z"
style="fill:url(#linearGradient40639-1-2-1);fill-opacity:1;fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path40275"
- style="opacity:0.8;fill:none;stroke:url(#linearGradient40641-9-2-7);stroke-width:1.78065979;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
- sodipodi:type="arc"
- transform="matrix(0.6429129,0,0,0.6362007,45.809534,38.194473)" />
- <path
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
+ style="display:inline;opacity:0.8;fill:none;stroke:url(#linearGradient40641-9-2-7);stroke-width:1.78065979;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.6429129,0,0,0.6362007,45.809534,38.194473)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
id="path40277"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
- sodipodi:type="arc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(0.06052282,0,0,0.05989117,121.21686,103.80334)" />
+ transform="matrix(0.06052282,0,0,0.05989117,121.21686,103.80334)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
@@ -75275,7 +74205,7 @@
height="16"
width="16"
id="rect41622"
- style="opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<g
id="g41624"
style="display:inline;enable-background:new"
@@ -75286,18 +74216,18 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccccc"
id="path41626"
- d="M -27.80208,29.59375 -19.5,29.5 -19.53126,42.40625 -30.5,42.5 l 0.03125,-9.90625 2.66667,-3 z"
- style="fill:url(#linearGradient41638-8-6);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline"
+ d="M -27.80208,29.59375 -19.5,29.5 -19.53126,42.40625 -30.5,42.5 l 0.03125,-9.90625 z"
+ style="display:inline;fill:url(#linearGradient41638-8-6);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
- d="m -29.5,34 0,7.5 m 3.5,-11 5.5,0"
- style="fill:none;stroke:url(#linearGradient41640-2-0);stroke-width:1.00002289px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="m -29.5,34 v 7.5 m 3.5,-11 h 5.5"
+ style="display:inline;fill:none;stroke:url(#linearGradient41640-2-0);stroke-width:1.00002289px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
id="path41628"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.5;fill:url(#radialGradient41642-5-0);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline"
- d="M -27.80208,29.59375 -19.5,29.5 -19.53126,42.40625 -30.5,42.5 l 0.03125,-9.90625 2.66667,-3 z"
+ style="display:inline;opacity:0.5;fill:url(#radialGradient41642-5-0);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
+ d="M -27.80208,29.59375 -19.5,29.5 -19.53126,42.40625 -30.5,42.5 l 0.03125,-9.90625 z"
id="path41630"
sodipodi:nodetypes="cccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -75305,8 +74235,8 @@
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
- d="m -31,33 4,0 0,-4 -4,4 z"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="m -31,33 h 4 v -4 z"
id="path41632"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
@@ -75314,14 +74244,14 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m -30.5,32.00001 0,10.49999 11,-1e-5 0,-12.99999 -8.5,10e-6 -2.5,2.5 0,0 0,0 0,0 z"
- style="fill:none;stroke:#000000;stroke-width:0.80001831;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M -30.5,32.00001 V 42.5 l 11,-1e-5 V 29.5 l -8.5,10e-6 z"
+ style="fill:none;stroke:#000000;stroke-width:0.80001831;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path41634"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
id="path41636"
- d="m -26.5,31.5 0,2 -2,0"
+ d="m -26.5,31.5 v 2 h -2"
style="fill:none;stroke:url(#linearGradient41644-5-4);stroke-width:1.00002289px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
@@ -75336,10 +74266,10 @@
height="4.9999909"
width="5.006597"
id="rect43548-7"
- style="opacity:0.2;fill:none;stroke:#fac900;stroke-width:4.00264168;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.39511889;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:none;stroke:#fac900;stroke-width:4.00264168;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.39511871;stroke-opacity:1;marker:none;enable-background:accumulate"
ry="1.2018067" />
<rect
- style="opacity:0.4;fill:none;stroke:#e6b800;stroke-width:2.00132084;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.39511889;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.4;fill:none;stroke:#e6b800;stroke-width:2.00132084;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.39511871;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect43550-6"
width="5.0065966"
height="4.9999905"
@@ -75353,7 +74283,7 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path43552-3"
- d="m 317.98879,278 0,-3 1.00132,-1 3.00396,0 1.00132,1 0,3 -1.00132,1 -3.00396,0 -1.00132,-1 z"
+ d="m 317.98879,278 v -3 l 1.00132,-1 h 3.00396 l 1.00132,1 v 3 l -1.00132,1 h -3.00396 z"
style="opacity:0.8;fill:#dcb000;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<path
@@ -75395,7 +74325,7 @@
style="display:inline;enable-background:new"
id="ICON_COPY_ID">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect40773"
width="16"
height="16"
@@ -75406,7 +74336,7 @@
style="opacity:0.6"
id="g40789">
<rect
- style="fill:url(#linearGradient39136-2-0);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:url(#linearGradient39136-2-0);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect40791"
width="9.0000124"
height="10.000001"
@@ -75415,7 +74345,7 @@
rx="0"
ry="0" />
<rect
- style="fill:none;stroke:url(#linearGradient39138-8-6);stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient39138-8-6);stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect40793"
width="7.0000038"
height="8.0000086"
@@ -75428,7 +74358,7 @@
id="g40795"
transform="translate(-273.00002,-181)">
<rect
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect40797"
width="8.9999342"
height="10.000006"
@@ -75446,13 +74376,13 @@
id="rect40799"
style="fill:url(#linearGradient39140-6-8);fill-opacity:1;fill-rule:nonzero;stroke:none" />
<path
- style="fill:none;stroke:#333333;stroke-width:0.7499997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
- d="m 73.5,103.75 2e-5,-4.25 4,0"
+ style="fill:none;stroke:#333333;stroke-width:0.7499997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 73.5,103.75 2e-5,-4.25 h 4"
id="path40801"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
<rect
- style="fill:none;stroke:url(#linearGradient39143-0-6);stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient39143-0-6);stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect40803"
width="7.0000048"
height="8.0000267"
@@ -75465,7 +74395,7 @@
style="fill:#800000"
id="g37993">
<rect
- style="fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.70000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.70000005;marker:none;enable-background:accumulate"
id="rect37978"
width="2.00001"
height="1.0000038"
@@ -75477,9 +74407,9 @@
height="2"
width="1.0000153"
id="rect37980"
- style="fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.70000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.70000005;marker:none;enable-background:accumulate" />
<rect
- style="fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.70000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.70000005;marker:none;enable-background:accumulate"
id="rect37982"
width="1.0000153"
height="1"
@@ -75491,23 +74421,23 @@
height="1.0000088"
width="1.4999988"
id="rect37984"
- style="fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.70000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.70000005;marker:none;enable-background:accumulate" />
<rect
y="-76"
x="-195.00002"
height="1"
width="1.0000153"
id="rect37986"
- style="fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.70000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.70000005;marker:none;enable-background:accumulate" />
<rect
- style="fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.70000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.70000005;marker:none;enable-background:accumulate"
id="rect37988"
width="1.5000049"
height="1.0000198"
x="-194.5"
y="-77" />
<rect
- style="fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.70000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#800000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.70000005;marker:none;enable-background:accumulate"
id="rect37990"
width="1.0000153"
height="5"
@@ -75527,7 +74457,7 @@
height="16"
width="16"
id="rect40562"
- style="opacity:0.01000001;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
style="opacity:0.4"
id="g40565"
@@ -75540,49 +74470,49 @@
height="9.9687805"
width="10.000007"
id="rect40567"
- style="fill:url(#linearGradient40731);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient40731);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="ccccc"
id="path40569"
- d="m 6.5,181.53121 7.99921,0 0,7.96879 -7.99921,0 0,-7.96879 z"
- style="fill:none;stroke:url(#linearGradient40679);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 6.5,181.53121 h 7.99921 V 189.5 H 6.5 Z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient40679);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<g
transform="translate(-1.00079,-19)"
- style="fill:#ffffff;display:inline;enable-background:new"
+ style="display:inline;fill:#ffffff;enable-background:new"
id="g40571">
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.60000002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 10.25,199 c -0.1385,0 -0.25,0.1115 -0.25,0.25 l 0,1.75 -0.5,0 c -0.277,0 -0.5,0.223 -0.5,0.5 0,0.277 0.223,0.5 0.5,0.5 l 4,0 c 0.277,0 0.5,-0.223 0.5,-0.5 0,-0.277 -0.223,-0.5 -0.5,-0.5 l -0.5,0 0,-1.75 C 13,199.1115 12.8885,199 12.75,199 l -2.5,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.60000002;marker:none;enable-background:accumulate"
+ d="M 10.25,199 C 10.1115,199 10,199.1115 10,199.25 V 201 H 9.5 c -0.277,0 -0.5,0.223 -0.5,0.5 0,0.277 0.223,0.5 0.5,0.5 h 4 c 0.277,0 0.5,-0.223 0.5,-0.5 0,-0.277 -0.223,-0.5 -0.5,-0.5 H 13 v -1.75 C 13,199.1115 12.8885,199 12.75,199 Z"
id="path40573"
inkscape:connector-curvature="0" />
<path
id="path40575"
- d="m 10.25,199 c -0.1385,0 -0.25,0.1115 -0.25,0.25 l 0,1.75 -0.5,0 c -0.277,0 -0.5,0.223 -0.5,0.5 0,0.277 0.223,0.5 0.5,0.5 l 4,0 c 0.277,0 0.5,-0.223 0.5,-0.5 0,-0.277 -0.223,-0.5 -0.5,-0.5 l -0.5,0 0,-1.75 C 13,199.1115 12.8885,199 12.75,199 l -2.5,0 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.60000002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 10.25,199 C 10.1115,199 10,199.1115 10,199.25 V 201 H 9.5 c -0.277,0 -0.5,0.223 -0.5,0.5 0,0.277 0.223,0.5 0.5,0.5 h 4 c 0.277,0 0.5,-0.223 0.5,-0.5 0,-0.277 -0.223,-0.5 -0.5,-0.5 H 13 v -1.75 C 13,199.1115 12.8885,199 12.75,199 Z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.60000002;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<path
style="opacity:0.45;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
- d="m 9.49921,181.5 2,0"
+ d="m 9.49921,181.5 h 2"
id="path40577"
inkscape:connector-curvature="0" />
</g>
<g
id="g40581"
- transform="matrix(0,1,-1,0,199.75,171.75)">
+ transform="rotate(90,14,185.75)">
<g
- transform="matrix(-1,0,0,-1,215.25,222.75)"
+ transform="rotate(180,107.625,111.375)"
id="g40583">
<path
id="path40585"
- d="m 174.5,38.5 0,5 5,0"
- style="fill:none;stroke:#00112b;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
+ d="m 174.5,38.5 v 5 h 5"
+ style="display:inline;fill:none;stroke:#00112b;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
<path
d="m 175.5,42.5 5,-5"
- style="fill:none;stroke:#00112b;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#00112b;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path40587"
sodipodi:nodetypes="cz"
inkscape:connector-curvature="0" />
@@ -75595,17 +74525,17 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(-1,0,0,-1,272.1613,155.99999)"
+ transform="rotate(180,136.08065,77.999995)"
style="display:inline">
<path
- style="fill:none;stroke:#f2f2f2;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#f2f2f2;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path40593"
sodipodi:nodetypes="cz"
d=""
inkscape:connector-curvature="0" />
<path
d=""
- style="opacity:0.85;fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.85;fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path40595"
sodipodi:nodetypes="cz"
inkscape:connector-curvature="0" />
@@ -75613,8 +74543,8 @@
<path
sodipodi:nodetypes="ccccccc"
id="path40597"
- d="m 188,51 0,6 -1,0 0,-5 -5,0 0,-1 6,0 z"
- style="fill:#c3dbff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 188,51 v 6 h -1 v -5 h -5 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#c3dbff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<g
transform="matrix(-1,0,0,1,-29,-335)"
@@ -75623,8 +74553,8 @@
<path
sodipodi:nodetypes="ccccccc"
id="path40602"
- d="m -216,387 0,2 1,0 0,-1 1,0 0,-1 -2,0 z"
- style="fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -216,387 v 2 h 1 v -1 h 1 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -75633,17 +74563,17 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(-1,0,0,-1,118.4113,290.74999)"
+ transform="rotate(180,59.20565,145.375)"
style="display:inline">
<path
- style="fill:none;stroke:#f2f2f2;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#f2f2f2;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path40606"
sodipodi:nodetypes="cz"
d=""
inkscape:connector-curvature="0" />
<path
d="m 78.1613,110.99999 5.5,-5.5"
- style="fill:#abcdff;fill-opacity:1;stroke:#c3dbff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#abcdff;fill-opacity:1;stroke:#c3dbff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path40609"
sodipodi:nodetypes="cz"
inkscape:connector-curvature="0" />
@@ -75653,8 +74583,8 @@
style="opacity:0.2"
transform="matrix(-1,0,0,1,-175.75,-207.25)">
<path
- style="opacity:0.7;fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -216,387 0,2 1,0 0,-1 1,0 0,-1 -2,0 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
+ d="m -216,387 v 2 h 1 v -1 h 1 v -1 z"
id="path40613"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
@@ -75662,23 +74592,23 @@
</g>
</g>
<g
- transform="matrix(0.7071068,-0.7071068,0.7071068,0.7071068,-160.74474,8.5136728)"
+ transform="rotate(-45,-70.095451,198.2929)"
style="display:inline;enable-background:new"
id="g27675-3">
<path
sodipodi:nodetypes="cc"
id="path27679-1"
d="m 73.191498,271.86917 7.071067,-7.07107"
- style="opacity:0.1;fill:none;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:none;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
d="m 71.600508,272.3995 0.707107,-0.7071 m 2.121319,-2.12133 0.707107,-0.7071 m 2.121321,-2.12133 0.707107,-0.7071 m 2.121319,-2.12133 0.707107,-0.7071"
- style="opacity:0.95;fill:none;stroke:#28220b;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.95;fill:none;stroke:#28220b;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
id="path42388-0"
inkscape:connector-curvature="0" />
<path
id="path42359-1"
- style="fill:none;stroke:#ffe991;stroke-width:1.19999993;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffe991;stroke-width:1.19999993;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 71.600508,272.3995 0.707107,-0.7071 m 2.121319,-2.12133 0.707107,-0.7071 m 2.121321,-2.12133 0.707107,-0.7071 m 2.121319,-2.12133 0.707107,-0.7071"
inkscape:connector-curvature="0" />
</g>
@@ -75690,7 +74620,7 @@
id="g40506"
transform="matrix(-1,0,0,1,89,-62)">
<rect
- style="opacity:0.01000001;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect40508"
width="16"
height="16"
@@ -75699,9 +74629,9 @@
<g
transform="matrix(-1,0,0,1,46.99921,19)"
id="g39096-2"
- style="opacity:0.4;display:inline;enable-background:new">
+ style="display:inline;opacity:0.4;enable-background:new">
<rect
- style="fill:url(#linearGradient40731);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient40731);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect39098-5"
width="10.000007"
height="9.9687805"
@@ -75710,29 +74640,29 @@
ry="1.3125001"
rx="1.3125" />
<path
- style="fill:none;stroke:url(#linearGradient40733-03);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 6.5,181.53121 7.99921,0 0,7.96879 -7.99921,0 0,-7.96879 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient40733-03);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 6.5,181.53121 h 7.99921 V 189.5 H 6.5 Z"
id="path39100-0"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<g
id="g39118-9"
- style="fill:#ffffff;display:inline;enable-background:new"
+ style="display:inline;fill:#ffffff;enable-background:new"
transform="translate(-1.00079,-19)">
<path
id="path39183-4"
- d="m 10.25,199 c -0.1385,0 -0.25,0.1115 -0.25,0.25 l 0,1.75 -0.5,0 c -0.277,0 -0.5,0.223 -0.5,0.5 0,0.277 0.223,0.5 0.5,0.5 l 4,0 c 0.277,0 0.5,-0.223 0.5,-0.5 0,-0.277 -0.223,-0.5 -0.5,-0.5 l -0.5,0 0,-1.75 C 13,199.1115 12.8885,199 12.75,199 l -2.5,0 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.60000002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 10.25,199 C 10.1115,199 10,199.1115 10,199.25 V 201 H 9.5 c -0.277,0 -0.5,0.223 -0.5,0.5 0,0.277 0.223,0.5 0.5,0.5 h 4 c 0.277,0 0.5,-0.223 0.5,-0.5 0,-0.277 -0.223,-0.5 -0.5,-0.5 H 13 v -1.75 C 13,199.1115 12.8885,199 12.75,199 Z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.60000002;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.60000002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 10.25,199 c -0.1385,0 -0.25,0.1115 -0.25,0.25 l 0,1.75 -0.5,0 c -0.277,0 -0.5,0.223 -0.5,0.5 0,0.277 0.223,0.5 0.5,0.5 l 4,0 c 0.277,0 0.5,-0.223 0.5,-0.5 0,-0.277 -0.223,-0.5 -0.5,-0.5 l -0.5,0 0,-1.75 C 13,199.1115 12.8885,199 12.75,199 l -2.5,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.60000002;marker:none;enable-background:accumulate"
+ d="M 10.25,199 C 10.1115,199 10,199.1115 10,199.25 V 201 H 9.5 c -0.277,0 -0.5,0.223 -0.5,0.5 0,0.277 0.223,0.5 0.5,0.5 h 4 c 0.277,0 0.5,-0.223 0.5,-0.5 0,-0.277 -0.223,-0.5 -0.5,-0.5 H 13 v -1.75 C 13,199.1115 12.8885,199 12.75,199 Z"
id="rect39114-7"
inkscape:connector-curvature="0" />
</g>
<path
id="path39106-8"
- d="m 9.49921,181.5 2,0"
+ d="m 9.49921,181.5 h 2"
style="opacity:0.45;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
@@ -75741,17 +74671,17 @@
id="g40522">
<g
id="g40526"
- transform="matrix(-1,0,0,-1,215.25,222.75)">
+ transform="rotate(180,107.625,111.375)">
<path
sodipodi:nodetypes="ccc"
- style="fill:none;stroke:#00112b;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
- d="m 174.5,38.5 0,5 5,0"
+ style="display:inline;fill:none;stroke:#00112b;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="m 174.5,38.5 v 5 h 5"
id="path40528"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cz"
id="path40533"
- style="fill:none;stroke:#00112b;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#00112b;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 175.5,42.5 5,-5"
inkscape:connector-curvature="0" />
</g>
@@ -75760,7 +74690,7 @@
id="g40535">
<g
style="display:inline"
- transform="matrix(-1,0,0,-1,272.1613,155.99999)"
+ transform="rotate(180,136.08065,77.999995)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -75769,18 +74699,18 @@
d=""
sodipodi:nodetypes="cz"
id="path40539"
- style="fill:none;stroke:#f2f2f2;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#f2f2f2;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cz"
id="path40541"
- style="opacity:0.85;fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.85;fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
d=""
inkscape:connector-curvature="0" />
</g>
<path
- style="fill:#c3dbff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 188,51 0,6 -1,0 0,-5 -5,0 0,-1 6,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#c3dbff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;enable-background:accumulate"
+ d="m 188,51 v 6 h -1 v -5 h -5 v -1 z"
id="path40543"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
@@ -75789,8 +74719,8 @@
style="opacity:0.2"
transform="matrix(-1,0,0,1,-29,-335)">
<path
- style="fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -216,387 0,2 1,0 0,-1 1,0 0,-1 -2,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
+ d="m -216,387 v 2 h 1 v -1 h 1 v -1 z"
id="path40547"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
@@ -75798,7 +74728,7 @@
</g>
<g
style="display:inline"
- transform="matrix(-1,0,0,-1,118.4113,290.74999)"
+ transform="rotate(180,59.20565,145.375)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -75807,12 +74737,12 @@
d=""
sodipodi:nodetypes="cz"
id="path40551"
- style="fill:none;stroke:#f2f2f2;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#f2f2f2;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cz"
id="path40553"
- style="fill:#abcdff;fill-opacity:1;stroke:#c3dbff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#abcdff;fill-opacity:1;stroke:#c3dbff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 78.1613,110.99999 5.5,-5.5"
inkscape:connector-curvature="0" />
</g>
@@ -75823,8 +74753,8 @@
<path
sodipodi:nodetypes="ccccccc"
id="path40558"
- d="m -216,387 0,2 1,0 0,-1 1,0 0,-1 -2,0 z"
- style="opacity:0.7;fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -216,387 v 2 h 1 v -1 h 1 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -75832,21 +74762,21 @@
<g
id="g40888"
style="display:inline;enable-background:new"
- transform="matrix(0.7071068,-0.7071068,0.7071068,0.7071068,-194.74474,8.5136728)">
+ transform="rotate(-45,-87.095449,239.33453)">
<path
- style="opacity:0.1;fill:none;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:none;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 73.191498,271.86917 7.071067,-7.07107"
id="path40890"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
id="path40892"
- style="opacity:0.95;fill:none;stroke:#28220b;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.95;fill:none;stroke:#28220b;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
d="m 71.600508,272.3995 0.707107,-0.7071 m 2.121319,-2.12133 0.707107,-0.7071 m 2.121321,-2.12133 0.707107,-0.7071 m 2.121319,-2.12133 0.707107,-0.7071"
inkscape:connector-curvature="0" />
<path
d="m 71.600508,272.3995 0.707107,-0.7071 m 2.121319,-2.12133 0.707107,-0.7071 m 2.121321,-2.12133 0.707107,-0.7071 m 2.121319,-2.12133 0.707107,-0.7071"
- style="fill:none;stroke:#ffe991;stroke-width:1.19999993;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffe991;stroke-width:1.19999993;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path40894"
inkscape:connector-curvature="0" />
</g>
@@ -75856,11 +74786,11 @@
id="ICON_OUTLINER_DATA_EMPTY">
<g
id="g44266"
- style="opacity:0.8;display:inline"
+ style="display:inline;opacity:0.8"
transform="translate(-138,212)">
<g
id="g44268"
- transform="translate(1.0551033e-6,0)">
+ transform="translate(1.0551033e-6)">
<g
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
@@ -75869,8 +74799,8 @@
transform="matrix(0.927273,0,0,1,85.654543,64)"
style="display:inline">
<path
- d="M 70.499967,14.5 75.5,17.5 m -5.000033,-3 -4.999967,3 m 4.970586,-3 0,-6"
- style="fill:none;stroke:#1a1a1a;stroke-width:3.63466382;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ d="M 70.499967,14.5 75.5,17.5 m -5.000033,-3 -4.999967,3 m 4.970586,-3 v -6"
+ style="display:inline;fill:none;stroke:#1a1a1a;stroke-width:3.63466382;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
id="path44272"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -75879,29 +74809,26 @@
inkscape:connector-curvature="0" />
<path
id="path44274"
- d="m 69.392137,7 0,2 2.156862,0 0,-2 -2.156862,0 z M 63.999982,17 64,19 l 2.156862,0 -1.8e-5,-2 -2.156862,0 0,0 0,0 0,0 z m 10.78431,0 0,2 2.156862,0 0,-2 -2.156862,0 z"
- style="fill:none;stroke:#1a1a1a;stroke-width:1.86925566;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ d="m 69.392137,7 v 2 h 2.156862 V 7 Z M 63.999982,17 64,19 h 2.156862 l -1.8e-5,-2 z m 10.78431,0 v 2 h 2.156862 v -2 z"
+ style="fill:none;stroke:#1a1a1a;stroke-width:1.86925566;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
sodipodi:nodetypes="ccccccccccccccc"
inkscape:connector-curvature="0" />
- <path
- sodipodi:type="arc"
- style="fill:url(#radialGradient44318);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ <circle
+ style="display:inline;fill:url(#radialGradient44318);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path44276"
- sodipodi:cx="70.5"
- sodipodi:cy="14.5"
- sodipodi:rx="1.5"
- sodipodi:ry="1.5"
- d="M 72,14.5 A 1.5,1.5 0 0 1 70.5,16 1.5,1.5 0 0 1 69,14.5 1.5,1.5 0 0 1 70.5,13 1.5,1.5 0 0 1 72,14.5 Z"
transform="matrix(1.176776,0,0,1.176776,-12.47787,-2.548088)"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="70.5"
+ cy="14.5"
+ r="1.5" />
<path
id="path44278"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ececec;stroke-width:1.97310317;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ececec;stroke-width:1.97310317;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
d="M 70.499967,14.5 75.5,17.5"
sodipodi:nodetypes="cccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -75909,18 +74836,18 @@
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- transform="translate(-1.6176466e-5,0)"
+ transform="translate(-1.6176466e-5)"
sodipodi:nodetypes="cccccc"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path44280"
- style="opacity:0.8;fill:none;stroke:url(#radialGradient44320);stroke-width:2.07695079;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
- d="M 70.499967,14.5 75.5,17.5 m -5.000033,-3 -4.999967,3 m 4.970586,-3 0,-6"
+ style="display:inline;opacity:0.8;fill:none;stroke:url(#radialGradient44320);stroke-width:2.07695079;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
+ d="M 70.499967,14.5 75.5,17.5 m -5.000033,-3 -4.999967,3 m 4.970586,-3 v -6"
inkscape:connector-curvature="0" />
<path
style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 74.784292,17 0,2 2.156862,0 0,-2 -2.156862,0 z"
+ d="m 74.784292,17 v 2 h 2.156862 v -2 z"
id="path44282"
sodipodi:nodetypes="ccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -75929,7 +74856,7 @@
inkscape:connector-curvature="0" />
<path
d="M 70.499967,14.5 65.5,17.5"
- style="fill:none;stroke:#999999;stroke-width:1.97310317;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:none;stroke:#999999;stroke-width:1.97310317;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
id="path44284"
sodipodi:nodetypes="cccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -75937,8 +74864,8 @@
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- d="m 70.470586,14.5 0,-6"
- style="fill:none;stroke:#cccccc;stroke-width:2.07695079;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ d="m 70.470586,14.5 v -6"
+ style="display:inline;fill:none;stroke:#cccccc;stroke-width:2.07695079;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
id="path44286"
sodipodi:nodetypes="cc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -75947,7 +74874,7 @@
inkscape:connector-curvature="0" />
<path
id="path44288"
- d="m 69.392137,7 0,2 2.156862,0 0,-2 -2.156862,0 z"
+ d="m 69.392137,7 v 2 h 2.156862 V 7 Z"
style="fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none"
sodipodi:nodetypes="ccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -75956,7 +74883,7 @@
inkscape:connector-curvature="0" />
<path
id="path44290"
- d="m 64,17 0,2 2.156844,0 0,-2 L 64,17 z"
+ d="m 64,17 v 2 h 2.156844 v -2 z"
style="fill:#999999;fill-opacity:1;fill-rule:nonzero;stroke:none"
sodipodi:nodetypes="ccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -75964,15 +74891,15 @@
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.05;fill:#554400;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.05;fill:#554400;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.79999995;marker:none;enable-background:accumulate"
id="rect44292"
width="3.774509"
height="3.5"
x="68.583321"
y="13.25" />
<path
- style="opacity:0.75;fill:none;stroke:#ffffff;stroke-width:1.03847623px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline"
- d="m 64.539197,18.5 0,-1 1.078431,0"
+ style="display:inline;opacity:0.75;fill:none;stroke:#ffffff;stroke-width:1.03847623px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+ d="m 64.539197,18.5 v -1 h 1.078431"
id="path44294"
sodipodi:nodetypes="ccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -75982,15 +74909,15 @@
<path
sodipodi:nodetypes="ccc"
id="path44296"
- d="m 69.931347,8.5 0,-0.9673924 1.078413,0"
- style="fill:none;stroke:#ffffff;stroke-width:1.03847647px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 69.931347,8.5 V 7.5326076 h 1.078413"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1.03847647px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.03847647px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline"
- d="m 75.323509,18.500001 0,-1 1.078431,0"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.03847647px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+ d="m 75.323509,18.500001 v -1 h 1.078431"
id="path44298"
sodipodi:nodetypes="ccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -75998,7 +74925,7 @@
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;marker:none;enable-background:accumulate"
id="rect44300"
width="17.254898"
height="16"
@@ -76008,7 +74935,7 @@
transform="matrix(1.0784311,0,0,1,-92.372519,-64)"
id="path44302"
d="m 155,80.5 -3,-1.870665"
- style="opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ style="display:inline;opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
@@ -76016,12 +74943,12 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="ccc"
id="path44304"
- d="m 74.245078,17.500001 0,-1 1.078431,0"
- style="opacity:0.01000001;fill:#d4aa00;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:1.03847647px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 74.245078,17.500001 v -1 h 1.078431"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#d4aa00;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:1.03847647px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.4;fill:#6a6a6a;fill-opacity:1;fill-rule:evenodd;stroke:#666666;stroke-width:1.03847647px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline"
- d="m 69.931352,9.5000005 1.078431,0"
+ style="display:inline;opacity:0.4;fill:#6a6a6a;fill-opacity:1;fill-rule:evenodd;stroke:#666666;stroke-width:1.03847647px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+ d="m 69.931352,9.5000005 h 1.078431"
id="path44306"
sodipodi:nodetypes="cc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -76029,8 +74956,8 @@
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.4;fill:#6a6a6a;fill-opacity:1;fill-rule:evenodd;stroke:#4c4c4c;stroke-width:1.03847575px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline"
- d="m 66.696014,17.499989 0,-1 -1.078431,0"
+ style="display:inline;opacity:0.4;fill:#6a6a6a;fill-opacity:1;fill-rule:evenodd;stroke:#4c4c4c;stroke-width:1.03847575px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+ d="m 66.696014,17.499989 v -1 h -1.078431"
id="path44308"
sodipodi:nodetypes="ccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -76045,13 +74972,13 @@
inkscape:connector-curvature="0" />
<path
id="path44312"
- d="m 150.5,73.5 0,4"
+ d="m 150.5,73.5 v 4"
style="opacity:0.35;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
</g>
<rect
- style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.79999995;marker:none;enable-background:accumulate"
id="rect44314"
width="2"
height="2"
@@ -76059,7 +74986,7 @@
y="78" />
</g>
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect44316"
width="2.9998772"
height="3"
@@ -76078,7 +75005,7 @@
transform="translate(-20,8)"
id="g39466">
<rect
- style="opacity:0;fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect39468"
width="16"
height="16"
@@ -76088,8 +75015,8 @@
<path
sodipodi:nodetypes="cccccccc"
id="path39470"
- d="m 34.8125,650.5 c -0.469932,0.0628 -0.901978,0.36287 -1.125,0.78125 l -6,11 c -0.495227,0.9075 0.278677,2.21576 1.3125,2.21875 l 12,0 c 1.033823,-0.003 1.807727,-1.31125 1.3125,-2.21875 l -6,-11 c -0.282798,-0.52794 -0.905299,-0.85216 -1.5,-0.78125 z"
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;fill:#ffdd55;fill-opacity:1;stroke:#2b0000;stroke-width:0.89999998;stroke-miterlimit:4;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ d="m 34.8125,650.5 c -0.469932,0.0628 -0.901978,0.36287 -1.125,0.78125 l -6,11 c -0.495227,0.9075 0.278677,2.21576 1.3125,2.21875 h 12 c 1.033823,-0.003 1.807727,-1.31125 1.3125,-2.21875 l -6,-11 c -0.282798,-0.52794 -0.905299,-0.85216 -1.5,-0.78125 z"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#ffdd55;fill-opacity:1;stroke:#2b0000;stroke-width:0.89999998;stroke-miterlimit:4;stroke-dasharray:none;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<rect
y="655"
@@ -76097,9 +75024,9 @@
height="5"
width="2.0152419"
id="rect39472"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect39474"
width="2.0152419"
height="1"
@@ -76107,32 +75034,32 @@
y="661" />
<path
id="path39476"
- d="m 34.936406,651.39468 c -0.144491,0.0192 -0.31295,0.15614 -0.381583,0.28384 l -6.105329,11.1013 c -0.0509,0.0926 -0.05511,0.27404 0.0636,0.47307 0.118705,0.19902 0.275323,0.31508 0.381582,0.31538 l 12.210658,0 c 0.106265,-3e-4 0.262877,-0.11636 0.381583,-0.31538 0.118706,-0.19903 0.114499,-0.38055 0.06359,-0.47307 l -6.105329,-11.1013 c -0.08049,-0.14902 -0.33952,-0.30385 -0.508777,-0.28384 l 5e-6,0 z"
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.5;fill:none;stroke:#ff0000;stroke-width:1.39999998;stroke-miterlimit:4;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ d="m 34.936406,651.39468 c -0.144491,0.0192 -0.31295,0.15614 -0.381583,0.28384 l -6.105329,11.1013 c -0.0509,0.0926 -0.05511,0.27404 0.0636,0.47307 0.118705,0.19902 0.275323,0.31508 0.381582,0.31538 h 12.210658 c 0.106265,-3e-4 0.262877,-0.11636 0.381583,-0.31538 0.118706,-0.19903 0.114499,-0.38055 0.06359,-0.47307 l -6.105329,-11.1013 c -0.08049,-0.14902 -0.33952,-0.30385 -0.508777,-0.28384 z"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:none;stroke:#ff0000;stroke-width:1.39999998;stroke-miterlimit:4;stroke-dasharray:none;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;fill:none;stroke:url(#linearGradient39508);stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
- d="m 34.936406,651.39468 c -0.144491,0.0192 -0.31295,0.15614 -0.381583,0.28384 l -6.105329,11.1013 c -0.0509,0.0926 -0.05511,0.27404 0.0636,0.47307 0.118705,0.19902 0.275323,0.31508 0.381582,0.31538 l 12.210658,0 c 0.106265,-3e-4 0.262877,-0.11636 0.381583,-0.31538 0.118706,-0.19903 0.114499,-0.38055 0.06359,-0.47307 l -6.105329,-11.1013 c -0.08049,-0.14902 -0.33952,-0.30385 -0.508777,-0.28384 l 5e-6,0 z"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient39508);stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;marker:none;enable-background:accumulate"
+ d="m 34.936406,651.39468 c -0.144491,0.0192 -0.31295,0.15614 -0.381583,0.28384 l -6.105329,11.1013 c -0.0509,0.0926 -0.05511,0.27404 0.0636,0.47307 0.118705,0.19902 0.275323,0.31508 0.381582,0.31538 h 12.210658 c 0.106265,-3e-4 0.262877,-0.11636 0.381583,-0.31538 0.118706,-0.19903 0.114499,-0.38055 0.06359,-0.47307 l -6.105329,-11.1013 c -0.08049,-0.14902 -0.33952,-0.30385 -0.508777,-0.28384 z"
id="path39478"
inkscape:connector-curvature="0" />
</g>
<path
id="path43799"
d="M 54.75,622.5 50,631.25"
- style="opacity:0.25;fill:none;stroke:#2b2200;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ style="display:inline;opacity:0.25;fill:none;stroke:#2b2200;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
<path
id="path43801"
- d="m 29.5,631.5 9.5,0"
- style="opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
- transform="translate(21,0)"
+ d="M 29.5,631.5 H 39"
+ style="display:inline;opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ transform="translate(21)"
inkscape:connector-curvature="0" />
</g>
<g
id="ICON_FILE_PARENT"
transform="translate(0,1)">
<rect
- style="opacity:0;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;enable-background:accumulate"
id="rect44079"
width="16"
height="16"
@@ -76149,27 +75076,27 @@
<path
sodipodi:nodetypes="cccc"
id="path43448"
- d="m 333.25,86.005631 -5.25,0 -1,-1 L 327,76"
- style="fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 333.25,86.005631 H 328 l -1,-1 V 76"
+ style="fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path43450"
d="M 331.25,80.244369 327,76 l -4.25,4.244369"
- style="fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
<g
transform="translate(0,21)"
id="g43442">
<path
- style="fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 333.25,86.005631 -5.25,0 -1,-1 L 327,76"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 333.25,86.005631 H 328 l -1,-1 V 76"
id="path42664"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="M 331.25,80.25 327,76.005631 322.75,80.25"
id="path42666"
sodipodi:nodetypes="ccc"
@@ -76177,14 +75104,14 @@
</g>
</g>
<path
- style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 328.5,106.50563 5,0 m -7,-7.00563 0,6.50563"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 328.5,106.50563 h 5 M 326.5,99.5 v 6.50563"
id="path43773"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient44954);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 322.25,101.00563 4.5,-4.499999 0.5,0 4.5,4.499999"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient44954);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 322.25,101.00563 4.5,-4.499999 h 0.5 l 4.5,4.499999"
id="path44952"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
@@ -76198,56 +75125,56 @@
height="16"
width="16"
id="rect44077"
- style="opacity:0;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;enable-background:accumulate" />
<g
id="g44913"
transform="translate(0,1)">
<g
- transform="matrix(-1,0,0,-1,698,183)"
+ transform="rotate(180,349,91.5)"
id="g43652">
<path
sodipodi:nodetypes="csc"
id="path43654"
d="m 343.5,104.5 1.75,1.75 c 2.3454,2.33848 5.75,2 8,0.5"
- style="fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path43660"
- d="m 343,108.25 0,-4.25 4.25,0"
- style="fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 343,108.25 V 104 h 4.25"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<g
- transform="matrix(-1,0,0,-1,698,183)"
+ transform="rotate(180,349,91.5)"
id="g43662">
<path
- style="fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 343.5,104.5 1.75,1.75 c 2.3454,2.33848 5.75,2.25 8,0.5"
id="path43668"
sodipodi:nodetypes="csc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 343,108.25 0,-4.25 4.25,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 343,108.25 V 104 h 4.25"
id="path43666"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
</g>
<path
id="path43671"
- d="m 354,78 0,-1 0,-1.5 -1,0 0,1.5 -1.5,0 0,1 1.5,0 1,0 z"
- style="opacity:0.15;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 354,78 v -1 -1.5 h -1 V 77 h -1.5 v 1 h 1.5 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.15;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
id="path43747"
d="M 353.09375,76.40625 C 350.56802,73.88797 346.75,74 344.25,76"
- style="fill:none;stroke:url(#linearGradient44944);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient44944);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 350.5,78.5 4,0 0,-4"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 350.5,78.5 h 4 v -4"
id="path43750"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
@@ -76259,14 +75186,14 @@
transform="translate(0,-21)"
id="g43636">
<path
- style="fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 343.5,104.5 1.75,1.75 c 2.3454,2.33848 5.75,2.25 8,0.5"
id="path43623"
sodipodi:nodetypes="csc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 343,108.25 0,-4.25 4.25,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 343,108.25 V 104 h 4.25"
id="path43506"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
@@ -76278,28 +75205,28 @@
sodipodi:nodetypes="csc"
id="path43584"
d="m 343.5,104.5 1.75,1.75 c 2.3454,2.33848 5.75,2.25 8,0.5"
- style="fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path43502"
- d="m 343,108.25 0,-4.25 4.25,0"
- style="fill:none;stroke:#e6e6e6;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 343,108.25 V 104 h 4.25"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#e6e6e6;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<path
- style="opacity:0.15;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 344,84 0,1 0,1.5 1,0 0,-1.5 1.5,0 0,-1 -1.5,0 -1,0 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.15;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
+ d="m 344,84 v 1 1.5 h 1 V 85 h 1.5 V 84 H 345 Z"
id="rect43547"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 347.5,82.5 -4.5,0 c -0.25,0 -0.5,0.25 -0.5,0.5 l 0,4.5"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 347.5,82.5 H 343 c -0.25,0 -0.5,0.25 -0.5,0.5 v 4.5"
id="path43761"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient44942);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient44942);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 345.59375,84.90625 c 2.07803,2.0719 5.36384,2.10325 7.53125,0.1875"
id="path43765"
sodipodi:nodetypes="cc"
@@ -76314,12 +75241,12 @@
height="16"
width="16"
id="rect44095"
- style="opacity:0;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;enable-background:accumulate" />
<g
transform="translate(42.999999,-42)"
id="g43952">
<g
- transform="matrix(0,-1,1,0,183.99437,429)"
+ transform="rotate(-90,306.49718,122.50281)"
id="g43483">
<g
transform="translate(0,21)"
@@ -76327,27 +75254,27 @@
<path
sodipodi:nodetypes="cc"
id="path43490"
- d="M 327,86.255631 327,76"
- style="fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 327,86.255631 V 76"
+ style="fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path43492"
d="M 331.25,79.25 327,75.005631 322.75,79.25"
- style="fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
<g
transform="translate(0,21)"
id="g43494">
<path
- style="fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 327,86.255631 327,76"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 327,86.255631 V 76"
id="path43496"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="M 331.25,79.25 327,75.005631 322.75,79.25"
id="path43498"
sodipodi:nodetypes="ccc"
@@ -76357,28 +75284,28 @@
<path
sodipodi:nodetypes="cc"
id="path43776"
- style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d=""
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient44485);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 284,97.25 -4.5,4.5 0,0.5 4.5,4.5"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient44485);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 284,97.25 -4.5,4.5 v 0.5 l 4.5,4.5"
id="path43780"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
id="path43860"
- d="m 291.5,101.5 -8.99437,0"
- style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 291.5,101.5 h -8.99437"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
<g
- transform="translate(-1,0)"
+ transform="translate(-1)"
id="ICON_FORWARD">
<rect
- style="opacity:0;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;enable-background:accumulate"
id="rect44093"
width="16"
height="16"
@@ -76394,13 +75321,13 @@
id="g43469"
transform="translate(0,21)">
<path
- style="fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="M 327,86.25 327,76"
+ style="fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 327,86.25 V 76"
id="path43471"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 331.25,79.25 327,75.005631 322.75,79.25"
id="path43473"
sodipodi:nodetypes="ccc"
@@ -76412,19 +75339,19 @@
<path
sodipodi:nodetypes="cc"
id="path43478"
- d="M 327,86.25 327,76"
- style="fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 327,86.25 V 76"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path43481"
d="M 331.25,79.25 327,75.005631 322.75,79.25"
- style="fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
<path
- style="fill:none;stroke:#ffffff;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 308.5,106 2.75,-2.75"
id="path43778"
sodipodi:nodetypes="cc"
@@ -76432,12 +75359,12 @@
<path
sodipodi:nodetypes="cccc"
id="path43785"
- d="m 308.75,97.25 c -0.25,0 -0.5,0.25 -0.5,0.5 m 2.26562,3.75 -8.99437,0"
- style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 308.75,97.25 c -0.25,0 -0.5,0.25 -0.5,0.5 m 2.26562,3.75 h -8.99437"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient44950);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 309.02125,97.249998 4.5,4.500002 0,0.5 -4.5,4.5"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient44950);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 309.02125,97.249998 4.5,4.500002 v 0.5 l -4.5,4.5"
id="path44948"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
@@ -76453,14 +75380,14 @@
id="g43593"
transform="matrix(-1,0,0,1,677,525)">
<path
- style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 347.25,100.25 -4,-4"
id="path43595"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 343,100.25 0,-4.25 4.25,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 343,100.25 V 96 h 4.25"
id="path43597"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
@@ -76472,13 +75399,13 @@
sodipodi:nodetypes="cc"
id="path44541"
d="m 347.25,100.25 -4,-4"
- style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path44543"
- d="m 343,100.25 0,-4.25 4.25,0"
- style="fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 343,100.25 V 96 h 4.25"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<g
@@ -76488,44 +75415,44 @@
sodipodi:nodetypes="cc"
id="path43601"
d="M 347.25,108.25 343,104"
- style="fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path43603"
- d="m 343,108.25 0,-4.25 4.25,0"
- style="fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 343,108.25 V 104 h 4.25"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<path
- style="opacity:0.93999993;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
- d="m 333.5,622.5 0,3 m -4,-5 4.5,0"
+ style="display:inline;opacity:0.93999993;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m 333.5,622.5 v 3 m -4,-5 h 4.5"
id="path44489"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.93999993;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ style="display:inline;opacity:0.93999993;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
d="m 329.25,625 2,-2"
id="path44491"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 333,622 0,1 0,1.5 -1,0 0,-1.5 -1.5,0 0,-1 1.5,0 1,0 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
+ d="m 333,622 v 1 1.5 h -1 V 623 h -1.5 v -1 h 1.5 z"
id="path43605"
inkscape:connector-curvature="0" />
<g
transform="matrix(1,0,0,-1,-21,737)"
id="g44545">
<path
- style="fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="M 347.25,108.25 343,104"
id="path44547"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 343,108.25 0,-4.25 4.25,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 343,108.25 V 104 h 4.25"
id="path44549"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
@@ -76533,19 +75460,19 @@
<path
sodipodi:nodetypes="cccc"
id="path44551"
- d="m 323.5,632.5 3,0 m -5,-4 0,4.5"
- style="opacity:0.93999993;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ d="m 323.5,632.5 h 3 m -5,-4 v 4.5"
+ style="display:inline;opacity:0.93999993;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
id="path44553"
d="m 326,628.25 -2,2"
- style="opacity:0.93999993;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ style="display:inline;opacity:0.93999993;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
<path
id="path44555"
- d="m 323,632 0,-1 0,-1.5 1,0 0,1.5 1.5,0 0,1 -1.5,0 -1,0 z"
- style="opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 323,632 v -1 -1.5 h 1 v 1.5 h 1.5 v 1 H 324 Z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<g
@@ -76556,19 +75483,19 @@
inkscape:export-ydpi="90">
<g
id="g44671"
- transform="matrix(-1,0,0,-1,662.9375,1247)">
+ transform="rotate(180,331.46875,623.5)">
<g
id="g44635"
transform="matrix(-1,0,0,1,677,525)">
<path
- style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 347.25,100.25 -4,-4"
id="path44637"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 343,100.25 0,-4.25 4.25,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 343,100.25 V 96 h 4.25"
id="path44639"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
@@ -76580,36 +75507,36 @@
sodipodi:nodetypes="cc"
id="path44649"
d="M 347.25,108.25 343,104"
- style="fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path44651"
- d="m 343,108.25 0,-4.25 4.25,0"
- style="fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 343,108.25 V 104 h 4.25"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<path
- style="opacity:0.93999993;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
- d="m 332.5,621.5 -3,0 m 5,4 0,-4.5"
+ style="display:inline;opacity:0.93999993;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m 332.5,621.5 h -3 m 5,4 V 621"
id="path44653"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.93999993;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ style="display:inline;opacity:0.93999993;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
d="m 330,625.75 2,-2"
id="path44655"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 333,622 0,1 0,1.5 -1,0 0,-1.5 -1.5,0 0,-1 1.5,0 1,0 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
+ d="m 333,622 v 1 1.5 h -1 V 623 h -1.5 v -1 h 1.5 z"
id="path44657"
inkscape:connector-curvature="0" />
</g>
<g
id="g44682"
- transform="matrix(-1,0,0,-1,648.9375,1261)">
+ transform="rotate(180,324.46875,630.5)">
<g
transform="matrix(1,0,0,-1,-21,729)"
id="g44641">
@@ -76617,27 +75544,27 @@
sodipodi:nodetypes="cc"
id="path44643"
d="m 347.25,100.25 -4,-4"
- style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path44645"
- d="m 343,100.25 0,-4.25 4.25,0"
- style="fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 343,100.25 V 96 h 4.25"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<g
transform="matrix(1,0,0,-1,-21,737)"
id="g44659">
<path
- style="fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="M 347.25,108.25 343,104"
id="path44661"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 343,108.25 0,-4.25 4.25,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 343,108.25 V 104 h 4.25"
id="path44663"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
@@ -76645,19 +75572,19 @@
<path
sodipodi:nodetypes="cccc"
id="path44665"
- d="m 322.5,631.5 0,-3 m 4,5 -4.5,0"
- style="opacity:0.93999993;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ d="m 322.5,631.5 v -3 m 4,5 H 322"
+ style="display:inline;opacity:0.93999993;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
id="path44667"
d="m 326.75,629 -2,2"
- style="opacity:0.93999993;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ style="display:inline;opacity:0.93999993;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
<path
id="path44669"
- d="m 323,632 0,-1 0,-1.5 1,0 0,1.5 1.5,0 0,1 -1.5,0 -1,0 z"
- style="opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 323,632 v -1 -1.5 h 1 v 1.5 h 1.5 v 1 H 324 Z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -76674,7 +75601,7 @@
height="16"
width="16"
id="rect45203"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="translate(-96.98388,244)"
inkscape:export-ydpi="90"
@@ -76685,35 +75612,35 @@
<path
id="path45207"
style="fill:url(#linearGradient45220);fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 105.48388,31.25 6.25,-6 c 0.49692,0.284098 0.2225,0.232267 0.76612,0.25 2.20206,0.07183 4,-1.792 4,-4 l -1,-1 -2.5,2.5 -0.5,-0.5 -1,-1 -0.5,-0.5 2.5,-2.5 -1,-1 c -2.208,0 -4,1.792 -4,4 0,0.58349 0.009,0.250006 0.23388,0.75 l -6.25,6 0,2 1,1 2,0 z"
+ d="m 105.48388,31.25 6.25,-6 c 0.49692,0.284098 0.2225,0.232267 0.76612,0.25 2.20206,0.07183 4,-1.792 4,-4 l -1,-1 -2.5,2.5 -0.5,-0.5 -1,-1 -0.5,-0.5 2.5,-2.5 -1,-1 c -2.208,0 -4,1.792 -4,4 0,0.58349 0.009,0.250006 0.23388,0.75 l -6.25,6 v 2 l 1,1 z"
sodipodi:nodetypes="ccsccccccccsccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccc"
- d="m 115.5,21.5 -2.25,2.25 m -1,-5.5 c -1.75,0 -4,2.25 -2.5,5 l -1.26612,0.25 -5,5 0,1.75"
- style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ d="m 115.5,21.5 -2.25,2.25 m -1,-5.5 c -1.75,0 -4,2.25 -2.5,5 l -1.26612,0.25 -5,5 v 1.75"
+ style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path45209"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccsccccccccsccccccc"
- d="m 105.48388,31.5 5.5,-5.5 0.25,-0.5 1.26612,0 c 2.73388,0 4,-1.792 4,-4 l -1,-1 -2.5,2.5 -0.5,-0.5 -1,-1 -0.5,-0.5 2.5,-2.5 -1,-1 c -2.208,0 -3.96454,1.25 -4,4 l -0.0161,1.25 -0.5,0.25 -5.5,5.5 0,2 1,1 2,0 -2e-5,0 z"
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ d="m 105.48388,31.5 5.5,-5.5 0.25,-0.5 H 112.5 c 2.73388,0 4,-1.792 4,-4 l -1,-1 -2.5,2.5 -0.5,-0.5 -1,-1 -0.5,-0.5 2.5,-2.5 -1,-1 c -2.208,0 -3.96454,1.25 -4,4 l -0.0161,1.25 -0.5,0.25 -5.5,5.5 v 2 l 1,1 h 2 z"
+ style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path45211"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
d="m 109.98388,25 -5,5"
- style="fill:none;stroke:#afc6e9;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:#afc6e9;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path45214"
inkscape:connector-curvature="0" />
<path
id="path45216"
- style="fill:none;stroke:#336abd;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:#336abd;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 109.48388,24.5 -4,4"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<rect
- style="fill:#162d50;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#162d50;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;enable-background:accumulate"
id="rect45218"
width="1"
height="1"
@@ -76725,7 +75652,7 @@
<g
id="ICON_QUIT">
<rect
- style="opacity:0;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;opacity:0;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="rect45264"
width="16"
height="16"
@@ -76733,19 +75660,19 @@
y="577"
transform="scale(-1,1)" />
<path
- style="fill:none;stroke:#000000;stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 412,585 0,-6"
+ style="fill:none;stroke:#000000;stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 412,585 v -6"
id="path45266"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
id="path45268"
- d="m 412,585 0,-6"
- style="fill:none;stroke:#b3b3b3;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 412,585 v -6"
+ style="fill:none;stroke:#b3b3b3;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<g
- style="fill:none;stroke:#ffffff;stroke-width:2.56570244;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:2.56570244;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="g45270"
transform="matrix(0.5478212,-0.56064,0.5419177,0.5545983,197.19518,557.21673)"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
@@ -76755,7 +75682,7 @@
sodipodi:open="true"
transform="matrix(0.9615911,0.00541935,0.00537191,0.9740527,43.776178,107.51876)"
sodipodi:type="arc"
- style="fill:none;stroke:#000000;stroke-width:4.37432003;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:4.37432003;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path45272"
sodipodi:cx="132"
sodipodi:cy="118"
@@ -76779,7 +75706,7 @@
sodipodi:cy="118"
sodipodi:cx="132"
id="path45274"
- style="fill:none;stroke:#b3b3b3;stroke-width:2.65110302;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#b3b3b3;stroke-width:2.65110302;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:type="arc"
transform="matrix(0.9615911,0.00541935,0.00537191,0.9740527,43.776178,107.51876)"
sodipodi:open="true" />
@@ -76787,7 +75714,7 @@
sodipodi:open="true"
transform="matrix(1.0558925,0.00528428,0.00523802,1.0695762,31.432317,96.175729)"
sodipodi:type="arc"
- style="opacity:0.75;fill:none;stroke:url(#linearGradient45283);stroke-width:1.20716298;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.75;fill:none;stroke:url(#linearGradient45283);stroke-width:1.20716298;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path45276"
sodipodi:cx="132"
sodipodi:cy="118"
@@ -76812,13 +75739,13 @@
sodipodi:cy="118"
sodipodi:cx="132"
id="path45278"
- style="opacity:0.75;fill:none;stroke:url(#linearGradient45285);stroke-width:1.44679213;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.75;fill:none;stroke:url(#linearGradient45285);stroke-width:1.44679213;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:type="arc"
transform="matrix(0.8810135,0.00553476,0.00548631,0.8924309,54.323627,117.21103)" />
</g>
<path
- style="opacity:0.75;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 411.5,585 0,-6"
+ style="opacity:0.75;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 411.5,585 v -6"
id="path45280"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
@@ -76829,19 +75756,19 @@
id="ICON_FILE_TICK">
<path
sodipodi:nodetypes="cccccccc"
- d="m -120.49163,-67.5 c -3.75159,0.954856 -7.20393,6.261452 -9,9 l -3.5,-3.5 -0.25,0.5 3.99163,4 0.5,0 c 1.0421,-2.617689 4.16191,-8.585412 8.25837,-10 l 0,0 z"
- style="opacity:0.25;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -120.49163,-67.5 c -3.75159,0.954856 -7.20393,6.261452 -9,9 l -3.5,-3.5 -0.25,0.5 3.99163,4 h 0.5 c 1.0421,-2.617689 4.16191,-8.585412 8.25837,-10 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path45290"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccc"
d="m -120.5,-68.5 c -3.15098,1.124146 -6.99163,5 -8.99163,9 l -3.5,-3.5 -0.5,0.5 4,4 c 1.42501,-3.330356 5.5,-8.75 8.99163,-10"
- style="fill:none;stroke:#0b1e00;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0b1e00;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path45302"
inkscape:connector-curvature="0" />
<path
id="path45294"
- style="fill:none;stroke:#9af23d;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#9af23d;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m -120.5,-68.5 c -3.15098,1.124146 -6.99163,5 -8.99163,9 l -3.5,-3.5 -0.5,0.5 4,4 c 1.42501,-3.330356 5.5,-8.75 8.99163,-10"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
@@ -76856,7 +75783,7 @@
height="16"
width="16"
id="rect42954"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="translate(-252,462.99988)"
id="g42956">
@@ -76865,8 +75792,8 @@
transform="translate(-179,199.50012)">
<path
sodipodi:nodetypes="ccccccc"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 328.5,-107.25 -4.5,1.75 0,6.5 4.5,2.25 4.5,-2.25 0,-6.5 -4.5,-1.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 328.5,-107.25 -4.5,1.75 v 6.5 l 4.5,2.25 4.5,-2.25 v -6.5 z"
id="path42960"
inkscape:connector-curvature="0" />
<g
@@ -76875,8 +75802,8 @@
<path
sodipodi:nodetypes="ccccc"
id="path42964"
- d="m 154,80 0,-6.5 -4.5,-1.75 0,10.5 L 154,80 z"
- style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 154,80 v -6.5 l -4.5,-1.75 v 10.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -76887,20 +75814,20 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
id="path42966"
- d="m 324,-99.00012 0,-6.49988 4.5,-1.75 0.5,0.25 0,10 -0.5,0.25 -4.5,-2.25012 z"
- style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 324,-99.00012 V -105.5 l 4.5,-1.75 0.5,0.25 v 10 l -0.5,0.25 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path42968"
- d="m 332.5,-105.5 0,6.25 -4,2 -4,-2.00012 0,-6.24988"
+ d="m 332.5,-105.5 v 6.25 l -4,2 -4,-2.00012 V -105.5"
style="fill:none;stroke:url(#linearGradient42988);stroke-width:0.99999982px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
id="path42970"
- d="m 324,-105.5 4.5,-1.75 4.5,1.75 -4.5,2 -4.5,-2 z"
- style="fill:#f2f2f2;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 324,-105.5 4.5,-1.75 4.5,1.75 -4.5,2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#f2f2f2;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -76919,9 +75846,9 @@
height="6.7500019"
width="1"
id="rect42974"
- style="opacity:0.18000004;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.18000004;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate" />
<rect
- style="opacity:0.09599998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.09599998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
id="rect42976"
width="1"
height="6.7500019"
@@ -76935,50 +75862,41 @@
transform="matrix(0.7882544,0,0,0.7883038,-210.45268,388.9974)"
id="g42978"
style="display:inline;enable-background:new">
- <path
+ <circle
transform="matrix(0.6425292,0,0,0.642531,44.523834,146.81699)"
- sodipodi:type="arc"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.97436094;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.97436094;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path42980"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(-0.5858806,-0.06590218,0.06677852,-0.5812167,198.80048,299.96262)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path42982"
- style="opacity:0.8;fill:url(#linearGradient42992);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- sodipodi:type="arc" />
- <path
+ style="display:inline;opacity:0.8;fill:url(#linearGradient42992);fill-opacity:1;fill-rule:nonzero;stroke:none"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path42984"
- style="fill:none;stroke:url(#linearGradient42994);stroke-width:2.54167628;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.4991181,0,0,0.4991107,63.460522,163.7471)" />
+ style="fill:none;stroke:url(#linearGradient42994);stroke-width:2.54167628;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.4991181,0,0,0.4991107,63.460522,163.7471)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<path
id="path42986"
- d="m -102.5625,554.75 c -0.0429,0.005 -0.0849,0.0154 -0.125,0.0312 l -4.5,1.75 c -0.1919,0.0756 -0.31653,0.26258 -0.3125,0.4688 l 0,6.5 c 0.003,0.18741 0.11203,0.35691 0.28125,0.4375 l 4.5,2.25 c 0.13787,0.0682 0.29963,0.0682 0.4375,0 l 4.499997,-2.25 c 0.169224,-0.0806 0.278188,-0.25009 0.28125,-0.4375 l 0,-6.5 c 0.004,-0.2062 -0.120622,-0.39315 -0.3125,-0.46875 l -4.499997,-1.75 c -0.0792,-0.0318 -0.16537,-0.0426 -0.25,-0.0312 l 0,-5e-5 z"
- style="opacity:0.3;fill:none;stroke:url(#linearGradient42996);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -102.5625,554.75 c -0.0429,0.005 -0.0849,0.0154 -0.125,0.0312 l -4.5,1.75 c -0.1919,0.0756 -0.31653,0.26258 -0.3125,0.4688 v 6.5 c 0.003,0.18741 0.11203,0.35691 0.28125,0.4375 l 4.5,2.25 c 0.13787,0.0682 0.29963,0.0682 0.4375,0 l 4.499997,-2.25 c 0.169224,-0.0806 0.278188,-0.25009 0.28125,-0.4375 V 557 c 0.004,-0.2062 -0.120622,-0.39315 -0.3125,-0.46875 l -4.499997,-1.75 c -0.0792,-0.0318 -0.16537,-0.0426 -0.25,-0.0312 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:none;stroke:url(#linearGradient42996);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<g
@@ -76987,7 +75905,7 @@
transform="translate(0,128)"
id="g24024">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect22150"
width="16"
height="16"
@@ -76999,34 +75917,34 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccccc"
id="path12337"
- d="m 304.20488,366.47791 8.33334,0 0,13 -11,0 -1e-5,-10 2.66667,-3 0,0 0,0 0,0 z"
- style="fill:url(#linearGradient14204);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline"
+ d="m 304.20488,366.47791 h 8.33334 v 13 h -11 l -1e-5,-10 z"
+ style="display:inline;fill:url(#linearGradient14204);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
inkscape:connector-curvature="0" />
<path
transform="matrix(1.2999758,0,0,1.2999988,365.56499,31.43979)"
sodipodi:nodetypes="ccc"
id="path12339"
- style="opacity:0.7;fill:none;stroke:#000000;stroke-width:0.76923829px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1;display:inline;filter:url(#filter31351)"
+ style="display:inline;opacity:0.7;fill:none;stroke:#000000;stroke-width:0.76923829px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1;filter:url(#filter31351)"
d="M -48.500031,260.50809 -46.5,260.5 l -3.1e-5,-1.99191"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
id="path12341"
- d="m 301.01612,370 4,0 0,-4 -4,4 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+ d="m 301.01612,370 h 4 v -4 z"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
id="path12343"
- style="fill:none;stroke:url(#linearGradient14198);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;display:inline"
- d="m 302.51612,371.00001 0,7.5 m 3.5,-11 5.5,0"
+ style="display:inline;fill:none;stroke:url(#linearGradient14198);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 302.51612,371.00001 v 7.5 m 3.5,-11 h 5.5"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 301.53822,368.97791 0,10.5 11,0 0,-13 -8.5,0 -2.5,2.5 z"
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 301.53822,368.97791 v 10.5 h 11 v -13 h -8.5 z"
+ style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path12345"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
@@ -77036,8 +75954,8 @@
mask="url(#mask43822)"
sodipodi:nodetypes="cccccccc"
id="path43815"
- d="m 765.0088,212.5 -3.9824,3.5 -0.0176,-2 -6.9736,0 -0.0132,-3 6.9868,0 0.004,-2 z"
- style="opacity:0.93999993;fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new"
+ d="m 765.0088,212.5 -3.9824,3.5 -0.0176,-2 h -6.9736 l -0.0132,-3 h 6.9868 l 0.004,-2 z"
+ style="display:inline;opacity:0.93999993;fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
inkscape:transform-center-x="-2"
inkscape:transform-center-y="1"
inkscape:connector-curvature="0" />
@@ -77055,10 +75973,10 @@
height="16"
width="16"
id="rect43842"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<path
- style="fill:url(#linearGradient43856);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline"
- d="m 304.20488,366.47791 8.33334,0 0,13 -11,0 -1e-5,-10 2.66667,-3 0,0 0,0 0,0 z"
+ style="display:inline;fill:url(#linearGradient43856);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
+ d="m 304.20488,366.47791 h 8.33334 v 13 h -11 l -1e-5,-10 z"
id="path43844"
sodipodi:nodetypes="cccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -77067,28 +75985,28 @@
inkscape:connector-curvature="0" />
<path
d="M -48.500031,260.50809 -46.5,260.5 l -3.1e-5,-1.99191"
- style="opacity:0.7;fill:none;stroke:#000000;stroke-width:0.76923829px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1;display:inline;filter:url(#filter31351)"
+ style="display:inline;opacity:0.7;fill:none;stroke:#000000;stroke-width:0.76923829px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1;filter:url(#filter31351)"
id="path43846"
sodipodi:nodetypes="ccc"
transform="matrix(1.2999758,0,0,1.2999988,365.56499,31.43979)"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
- d="m 301.01612,370 4,0 0,-4 -4,4 z"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="m 301.01612,370 h 4 v -4 z"
id="path43848"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
- d="m 302.51612,371.00001 0,7.5 m 3.5,-11 5.5,0"
- style="fill:none;stroke:url(#linearGradient43858);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="m 302.51612,371.00001 v 7.5 m 3.5,-11 h 5.5"
+ style="display:inline;fill:none;stroke:url(#linearGradient43858);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
id="path43850"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccc"
id="path43852"
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 301.53822,368.97791 0,10.5 11,0 0,-13 -8.5,0 -2.5,2.5 z"
+ style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 301.53822,368.97791 v 10.5 h 11 v -13 h -8.5 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -77097,8 +76015,8 @@
<path
inkscape:transform-center-y="1"
inkscape:transform-center-x="-2"
- style="opacity:0.93999993;fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new"
- d="m 765.0088,212.5 -3.9824,3.5 -0.0176,-2 -6.9736,0 -0.0132,-3 6.9868,0 0.004,-2 z"
+ style="display:inline;opacity:0.93999993;fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
+ d="m 765.0088,212.5 -3.9824,3.5 -0.0176,-2 h -6.9736 l -0.0132,-3 h 6.9868 l 0.004,-2 z"
id="path43854"
sodipodi:nodetypes="cccccccc"
mask="url(#mask43822)"
@@ -77117,10 +76035,10 @@
height="16"
width="16"
id="rect46788"
- style="opacity:0.01000001;fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
transform="matrix(-1,0,0,1,0,12)" />
<g
- style="opacity:0.55;display:inline;enable-background:new"
+ style="display:inline;opacity:0.55;enable-background:new"
transform="translate(-22,30)"
id="g46766">
<g
@@ -77128,7 +76046,7 @@
transform="translate(23.01472,-88)">
<path
id="path46770"
- style="fill:none;stroke:url(#linearGradient46780);stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient46780);stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="M -34.51472,179.5 C -38,184.5 -37.5,189 -37.50346,190.5"
sodipodi:nodetypes="cc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -77141,7 +76059,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cc"
d="M -34.51472,179.5 C -38,184.5 -37.5,189 -37.50346,190.5"
- style="fill:none;stroke:url(#linearGradient46782);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient46782);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path46772"
inkscape:connector-curvature="0" />
</g>
@@ -77154,12 +76072,12 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cc"
d="m -28.53125,182.5 c -4.5,2 -4.96875,6.5 -4.96875,8"
- style="fill:none;stroke:url(#linearGradient46784);stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient46784);stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path46776"
inkscape:connector-curvature="0" />
<path
id="path46778"
- style="fill:none;stroke:url(#linearGradient46786);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient46786);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m -28.53125,182.5 c -4.5,2 -4.96875,6 -4.96875,8"
sodipodi:nodetypes="cc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -77174,8 +76092,8 @@
style="display:inline;enable-background:new">
<path
id="path46862"
- d="m -52.01365,177.50527 0.03679,0 c 0.818181,0 1.476865,0.66665 1.476865,1.49473 l 0,1.2e-4 c 0,0.82808 -0.658684,1.49472 -1.476865,1.49472 l -0.03679,0 c -0.81819,0 -1.476874,-0.66664 -1.476874,-1.49472 l 0,-1.2e-4 c 0,-0.82808 0.658684,-1.49473 1.476874,-1.49473 l 0,0 0,0 z"
- style="fill:none;stroke:#462300;stroke-width:1.495;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -52.01365,177.50527 h 0.03679 c 0.818181,0 1.476865,0.66665 1.476865,1.49473 v 1.2e-4 c 0,0.82808 -0.658684,1.49472 -1.476865,1.49472 h -0.03679 c -0.81819,0 -1.476874,-0.66664 -1.476874,-1.49472 V 179 c 0,-0.82808 0.658684,-1.49473 1.476874,-1.49473 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#462300;stroke-width:1.495;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
@@ -77183,7 +76101,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path46864"
d="m -50.998123,178.00355 c -0.66732,0 -1.334639,1e-5 -2.001959,1e-5 0,0.66706 0,1.33411 0,2.00119 0.66732,0 1.334639,-1e-5 2.001959,-1e-5 0,-0.66707 0,-1.33413 0,-2.00119 z"
- style="fill:#ffc17d;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new"
+ style="display:inline;fill:#ffc17d;fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
inkscape:connector-curvature="0" />
</g>
<g
@@ -77191,12 +76109,12 @@
transform="translate(26.01365,-55.00527)"
id="g46866">
<path
- style="fill:none;stroke:#462300;stroke-width:1.495;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -52.01365,177.50527 0.03679,0 c 0.818181,0 1.476865,0.66665 1.476865,1.49473 l 0,1.2e-4 c 0,0.82808 -0.658684,1.49472 -1.476865,1.49472 l -0.03679,0 c -0.81819,0 -1.476874,-0.66664 -1.476874,-1.49472 l 0,-1.2e-4 c 0,-0.82808 0.658684,-1.49473 1.476874,-1.49473 l 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#462300;stroke-width:1.495;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -52.01365,177.50527 h 0.03679 c 0.818181,0 1.476865,0.66665 1.476865,1.49473 v 1.2e-4 c 0,0.82808 -0.658684,1.49472 -1.476865,1.49472 h -0.03679 c -0.81819,0 -1.476874,-0.66664 -1.476874,-1.49472 V 179 c 0,-0.82808 0.658684,-1.49473 1.476874,-1.49473 z"
id="path46868"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffc17d;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new"
+ style="display:inline;fill:#ffc17d;fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
d="m -50.998123,178.00355 c -0.66732,0 -1.334639,1e-5 -2.001959,1e-5 0,0.66706 0,1.33411 0,2.00119 0.66732,0 1.334639,-1e-5 2.001959,-1e-5 0,-0.66707 0,-1.33413 0,-2.00119 z"
id="path46870"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -77212,11 +76130,11 @@
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<g
- transform="translate(-20,0)"
+ transform="translate(-20)"
id="g46800">
<rect
transform="scale(-1,1)"
- style="opacity:0.01000001;fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect46802"
width="16"
height="16"
@@ -77225,7 +76143,7 @@
<g
id="g46804"
transform="translate(-22,18)"
- style="opacity:0.55;display:inline;enable-background:new">
+ style="display:inline;opacity:0.55;enable-background:new">
<g
transform="translate(23.01472,-76)"
id="g46806">
@@ -77235,12 +76153,12 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cc"
d="M -34.51472,179.5 C -38,184.5 -37.5,189 -37.50346,190.5"
- style="fill:none;stroke:url(#linearGradient46818);stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient46818);stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path46808"
inkscape:connector-curvature="0" />
<path
id="path46810"
- style="fill:none;stroke:url(#linearGradient46820);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient46820);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="M -34.51472,179.5 C -38,184.5 -37.5,189 -37.50346,190.5"
sodipodi:nodetypes="cc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -77253,7 +76171,7 @@
transform="translate(24,-76)">
<path
id="path46814"
- style="fill:none;stroke:url(#linearGradient46822);stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient46822);stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m -28.53125,182.5 c -4.5,2 -4.96875,6.5 -4.96875,8"
sodipodi:nodetypes="cc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -77266,7 +76184,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cc"
d="m -28.53125,182.5 c -4.5,2 -4.96875,6 -4.96875,8"
- style="fill:none;stroke:url(#linearGradient46824);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient46824);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path46816"
inkscape:connector-curvature="0" />
</g>
@@ -77277,12 +76195,12 @@
transform="translate(-4.98635,-46.00527)"
id="g46872">
<path
- style="fill:none;stroke:#462300;stroke-width:1.495;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -52.01365,177.50527 0.03679,0 c 0.818181,0 1.476865,0.66665 1.476865,1.49473 l 0,1.2e-4 c 0,0.82808 -0.658684,1.49472 -1.476865,1.49472 l -0.03679,0 c -0.81819,0 -1.476874,-0.66664 -1.476874,-1.49472 l 0,-1.2e-4 c 0,-0.82808 0.658684,-1.49473 1.476874,-1.49473 l 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#462300;stroke-width:1.495;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -52.01365,177.50527 h 0.03679 c 0.818181,0 1.476865,0.66665 1.476865,1.49473 v 1.2e-4 c 0,0.82808 -0.658684,1.49472 -1.476865,1.49472 h -0.03679 c -0.81819,0 -1.476874,-0.66664 -1.476874,-1.49472 V 179 c 0,-0.82808 0.658684,-1.49473 1.476874,-1.49473 z"
id="path46874"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffc17d;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new"
+ style="display:inline;fill:#ffc17d;fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
d="m -50.998123,178.00355 c -0.66732,0 -1.334639,1e-5 -2.001959,1e-5 0,0.66706 0,1.33411 0,2.00119 0.66732,0 1.334639,-1e-5 2.001959,-1e-5 0,-0.66707 0,-1.33413 0,-2.00119 z"
id="path46876"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -77296,8 +76214,8 @@
style="display:inline;enable-background:new">
<path
id="path46880"
- d="m -52.01365,177.50527 0.03679,0 c 0.818181,0 1.476865,0.66665 1.476865,1.49473 l 0,1.2e-4 c 0,0.82808 -0.658684,1.49472 -1.476865,1.49472 l -0.03679,0 c -0.81819,0 -1.476874,-0.66664 -1.476874,-1.49472 l 0,-1.2e-4 c 0,-0.82808 0.658684,-1.49473 1.476874,-1.49473 l 0,0 0,0 z"
- style="fill:none;stroke:#462300;stroke-width:1.495;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -52.01365,177.50527 h 0.03679 c 0.818181,0 1.476865,0.66665 1.476865,1.49473 v 1.2e-4 c 0,0.82808 -0.658684,1.49472 -1.476865,1.49472 h -0.03679 c -0.81819,0 -1.476874,-0.66664 -1.476874,-1.49472 V 179 c 0,-0.82808 0.658684,-1.49473 1.476874,-1.49473 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#462300;stroke-width:1.495;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
@@ -77305,7 +76223,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path46882"
d="m -50.998123,178.00355 c -0.66732,0 -1.334639,1e-5 -2.001959,1e-5 0,0.66706 0,1.33411 0,2.00119 0.66732,0 1.334639,-1e-5 2.001959,-1e-5 0,-0.66707 0,-1.33413 0,-2.00119 z"
- style="fill:#ffc17d;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new"
+ style="display:inline;fill:#ffc17d;fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
inkscape:connector-curvature="0" />
</g>
<g
@@ -77313,12 +76231,12 @@
transform="translate(-4.023135,-51.99484)"
id="g46884">
<path
- style="fill:none;stroke:#462300;stroke-width:1.495;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -52.01365,177.50527 0.03679,0 c 0.818181,0 1.476865,0.66665 1.476865,1.49473 l 0,1.2e-4 c 0,0.82808 -0.658684,1.49472 -1.476865,1.49472 l -0.03679,0 c -0.81819,0 -1.476874,-0.66664 -1.476874,-1.49472 l 0,-1.2e-4 c 0,-0.82808 0.658684,-1.49473 1.476874,-1.49473 l 0,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#462300;stroke-width:1.495;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -52.01365,177.50527 h 0.03679 c 0.818181,0 1.476865,0.66665 1.476865,1.49473 v 1.2e-4 c 0,0.82808 -0.658684,1.49472 -1.476865,1.49472 h -0.03679 c -0.81819,0 -1.476874,-0.66664 -1.476874,-1.49472 V 179 c 0,-0.82808 0.658684,-1.49473 1.476874,-1.49473 z"
id="path46886"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffc17d;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new"
+ style="display:inline;fill:#ffc17d;fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
d="m -50.998123,178.00355 c -0.66732,0 -1.334639,1e-5 -2.001959,1e-5 0,0.66706 0,1.33411 0,2.00119 0.66732,0 1.334639,-1e-5 2.001959,-1e-5 0,-0.66707 0,-1.33413 0,-2.00119 z"
id="path46888"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -77342,10 +76260,10 @@
height="16"
width="16"
id="rect46962"
- style="opacity:0.01000001;fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
transform="scale(-1,1)" />
<g
- style="opacity:0.55;display:inline;enable-background:new"
+ style="display:inline;opacity:0.55;enable-background:new"
transform="translate(-22,18)"
id="g46964">
<g
@@ -77353,7 +76271,7 @@
transform="translate(23.01472,-88)">
<path
id="path46968"
- style="fill:none;stroke:url(#linearGradient46990);stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient46990);stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="M -34.51472,179.5 C -38,184.5 -37.5,189 -37.50346,190.5"
sodipodi:nodetypes="cc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -77366,7 +76284,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cc"
d="M -34.51472,179.5 C -38,184.5 -37.5,189 -37.50346,190.5"
- style="fill:none;stroke:url(#linearGradient46992);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient46992);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path46970"
inkscape:connector-curvature="0" />
</g>
@@ -77379,12 +76297,12 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cc"
d="m -28.53125,182.5 c -4.5,2 -4.96875,6.5 -4.96875,8"
- style="fill:none;stroke:url(#linearGradient46994);stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient46994);stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path46974"
inkscape:connector-curvature="0" />
<path
id="path46976"
- style="fill:none;stroke:url(#linearGradient46996);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient46996);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m -28.53125,182.5 c -4.5,2 -4.96875,6 -4.96875,8"
sodipodi:nodetypes="cc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -77401,12 +76319,12 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cc"
d="M -34.51472,179.5 C -38,184.5 -37.5,189 -37.50346,190.5"
- style="fill:none;stroke:url(#linearGradient46998);stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient46998);stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path46980"
inkscape:connector-curvature="0" />
<path
id="path46982"
- style="fill:none;stroke:url(#linearGradient47000);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient47000);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="M -34.51472,179.5 C -38,184.5 -37.5,189 -37.50346,190.5"
sodipodi:nodetypes="cc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -77426,12 +76344,12 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cc"
d="m -28.53125,182.5 c -4.5,2 -4.96875,6.5 -4.96875,8"
- style="fill:none;stroke:#462300;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#462300;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path46986"
inkscape:connector-curvature="0" />
<path
id="path46988"
- style="fill:none;stroke:#ffc17d;stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffc17d;stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m -28.53125,182.5 c -4.5,2 -4.96875,6 -4.96875,8"
sodipodi:nodetypes="cc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -77441,7 +76359,7 @@
</g>
</g>
<g
- transform="translate(-1,0)"
+ transform="translate(-1)"
id="ICON_CONSTRAINT_BONE">
<g
id="g25430"
@@ -77449,15 +76367,15 @@
<rect
ry="0"
rx="0"
- transform="translate(1,0)"
+ transform="translate(1)"
y="514"
x="446"
height="16"
width="16"
id="rect25424"
- style="opacity:0;fill:#333333;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#333333;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<g
- style="opacity:0.8;display:inline;enable-background:new"
+ style="display:inline;opacity:0.8;enable-background:new"
id="g24916"
transform="translate(337,128)">
<rect
@@ -77467,25 +76385,25 @@
height="11"
width="11"
id="rect24918"
- style="opacity:0;fill:#736c54;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#736c54;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate"
ry="0.019097222" />
<g
id="g24920">
<path
sodipodi:nodetypes="cccccccccccsccccccccccccccscccc"
- style="fill:url(#linearGradient25449);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 116.53125,386.5 c -0.56312,0 -1.03125,0.46811 -1.03125,1.03125 l 0,0.9375 c 0,0.28156 0.12508,0.53133 0.3125,0.71875 L 113,392 c -0.18742,-0.18742 -0.46844,-0.5 -0.75,-0.5 l -0.75,0 c -0.56312,0 -1.03125,0.46811 -1.03125,1.03125 l 0,0.9375 c 0,0.56312 0.46813,1.03125 1.03125,1.03125 l 0.9375,0 c 0.0103,0 0.021,3e-4 0.0312,0 -3e-4,0.0102 0,0.021 0,0.0312 l 0,0.9375 c 0,0.56312 0.46813,1.03126 1.03125,1.03125 l 0.96875,0 c 0.56312,0 1,-0.46813 1,-1.03125 l 0,-0.9375 c 0,-0.28156 -0.10164,-0.53133 -0.28125,-0.71875 l 2.625,-2.625 c 0.18742,0.18742 0.43719,0.3125 0.71875,0.3125 l 0.96875,0 c 0.56312,0 1,-0.46813 1,-1.03125 l 0,-0.9375 c 0,-0.56312 -0.43688,-1.03125 -1,-1.03125 l -0.96875,0 c -0.0103,0 -0.021,-3e-4 -0.0312,0 3e-4,-0.0102 0,-0.021 0,-0.0312 l 0,-0.9375 c 0,-0.56312 -0.46813,-1.03125 -1.03125,-1.03125 l -0.9375,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient25449);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 116.53125,386.5 c -0.56312,0 -1.03125,0.46811 -1.03125,1.03125 v 0.9375 c 0,0.28156 0.12508,0.53133 0.3125,0.71875 L 113,392 c -0.18742,-0.18742 -0.46844,-0.5 -0.75,-0.5 h -0.75 c -0.56312,0 -1.03125,0.46811 -1.03125,1.03125 v 0.9375 c 0,0.56312 0.46813,1.03125 1.03125,1.03125 h 0.9375 c 0.0103,0 0.021,3e-4 0.0312,0 -3e-4,0.0102 0,0.021 0,0.0312 v 0.9375 c 0,0.56312 0.46813,1.03126 1.03125,1.03125 h 0.96875 c 0.56312,0 1,-0.46813 1,-1.03125 v -0.9375 c 0,-0.28156 -0.10164,-0.53133 -0.28125,-0.71875 l 2.625,-2.625 c 0.18742,0.18742 0.43719,0.3125 0.71875,0.3125 h 0.96875 c 0.56312,0 1,-0.46813 1,-1.03125 v -0.9375 c 0,-0.56312 -0.43688,-1.03125 -1,-1.03125 h -0.96875 c -0.0103,0 -0.021,-3e-4 -0.0312,0 3e-4,-0.0102 0,-0.021 0,-0.0312 v -0.9375 c 0,-0.56312 -0.46813,-1.03125 -1.03125,-1.03125 z"
id="path24923"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 111.5,393.5 0,-0.75 0.25,-0.25 1.75,0 3,-3 0,-1.75 0.25,-0.25 0.75,0"
+ d="m 111.5,393.5 v -0.75 l 0.25,-0.25 h 1.75 l 3,-3 v -1.75 l 0.25,-0.25 h 0.75"
id="path24925"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
id="path24927"
- d="m 118.75,389.5 0.75,0 m -6,6 0,-0.75"
+ d="m 118.75,389.5 h 0.75 m -6,6 v -0.75"
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
<rect
@@ -77494,9 +76412,9 @@
height="1"
width="1"
id="rect24929"
- style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate" />
<rect
- style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate"
id="rect24931"
width="1"
height="1"
@@ -77509,56 +76427,56 @@
id="g24933">
<path
sodipodi:nodetypes="ccccccccc"
- style="fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 430.5,525.5329 0,2 1,1 2,0 2,-2.0329 0,-2 -1,-1 -2,0 -2,2.0329 z"
+ style="fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 430.5,525.5329 v 2 l 1,1 h 2 l 2,-2.0329 v -2 l -1,-1 h -2 z"
id="path24939"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccc"
id="path24941"
- d="m 433.5,522.4671 0,1.75 1,1.25 2,0 2,-1.9671 0,-2 -1,-1 -2,0 -2,1.9671 z"
- style="fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 433.5,522.4671 v 1.75 l 1,1.25 h 2 l 2,-1.9671 v -2 l -1,-1 h -2 z"
+ style="fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccc"
- style="fill:none;stroke:url(#linearGradient25451);stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 433.5,522.4671 0,2.0329 1,0.9671 2,0 2,-1.9671 0,-2 -1,-1 -2,0 -2,1.9671 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient25451);stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 433.5,522.4671 V 524.5 l 1,0.9671 h 2 l 2,-1.9671 v -2 l -1,-1 h -2 z"
id="path24945"
inkscape:connector-curvature="0" />
<path
id="path24954"
- d="m 434.5,523.5 -2,0"
- style="fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 434.5,523.5 h -2"
+ style="fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccc"
id="path24956"
- d="m 430.5,525.5 0,2 1,1 2,0 2,-2 0,-2 -1,-1 -2,0 -2,2 z"
- style="fill:none;stroke:url(#linearGradient25453);stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 430.5,525.5 v 2 l 1,1 h 2 l 2,-2 v -2 l -1,-1 h -2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient25453);stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 434.08489,525.47125 2.25,0"
+ style="fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 434.08489,525.47125 h 2.25"
id="path24958"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
id="path24960"
d="M 434.33489,525.47125 436.5,525.4671"
- style="fill:none;stroke:#ffffff;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#ffffff;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
</g>
</g>
<rect
- style="fill:url(#linearGradient40731);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient40731);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect25426"
width="0"
height="0.25"
x="462.25"
y="515"
- transform="translate(1,0)"
+ transform="translate(1)"
rx="1.3125"
ry="0.25" />
</g>
@@ -77571,12 +76489,12 @@
height="16"
width="16"
id="rect25028"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- transform="matrix(0,-1,1,0,0,0)" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
+ transform="rotate(-90)" />
<g
id="g25030">
<rect
- transform="matrix(-0.7071068,0.7071068,-0.7071068,-0.7071068,0,0)"
+ transform="rotate(135)"
rx="2.1489482"
ry="2.143424"
y="-559.32709"
@@ -77584,10 +76502,10 @@
height="5.651536"
width="8.4518671"
id="rect25032"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5" />
+ style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1" />
<rect
- transform="matrix(-0.7071068,0.7071068,-0.7071068,-0.7071068,0,0)"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5"
+ transform="rotate(135)"
+ style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1"
id="rect25034"
width="8.5198517"
height="5.5904222"
@@ -77599,42 +76517,42 @@
sodipodi:nodetypes="cssssc"
id="path25036"
d="m 411.49427,375.51102 -0.5,-0.5 c -0.69131,-0.69131 -0.84611,-2.14587 0.0258,-3.01533 l 2.98873,-2.98076 c 0.87178,-0.86946 2.29697,-0.69523 2.98828,-0.004 l 0.52541,0.52542"
- style="fill:none;stroke:url(#linearGradient25117);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient25117);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- transform="matrix(-0.7071068,0.7071068,-0.7071068,-0.7071068,0,0)"
- style="fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5"
+ transform="rotate(135)"
+ style="fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1"
d="m -26.159946,-552.25601 c -1.190517,0 -2.148947,-0.95597 -2.148947,-2.14343"
id="rect25114"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.7;fill:none;stroke:url(#radialGradient25457);stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:none;stroke:url(#radialGradient25457);stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 411.49427,375.51102 -0.5,-0.5 c -0.69131,-0.69131 -0.84611,-2.14587 0.0258,-3.01533 l 2.98873,-2.98076 c 0.87178,-0.86946 2.29697,-0.69523 2.98828,-0.004 l 0.52541,0.52542"
id="path25455"
sodipodi:nodetypes="cssssc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccczz"
- d="m 407.51079,379.37902 c 0.56229,0.50812 1.81497,0.33519 2.49825,-0.3481 l 2.96969,-3.09463 c 0.87062,-0.87061 0.69197,-2.30021 0.004,-2.98827 l -1.02382,-1.02382 c -0.69131,-0.69131 -2.11766,-0.86672 -2.98828,0.004 l -2.96969,3.09462 c -0.87062,0.87063 -0.62293,2.42889 -0.004,2.98829 l 1.51384,1.368 10e-6,-9e-5 0,0 0,0 z"
- style="fill:none;stroke:url(#linearGradient25106);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 407.51079,379.37902 c 0.56229,0.50812 1.81497,0.33519 2.49825,-0.3481 l 2.96969,-3.09463 c 0.87062,-0.87061 0.69197,-2.30021 0.004,-2.98827 l -1.02382,-1.02382 c -0.69131,-0.69131 -2.11766,-0.86672 -2.98828,0.004 l -2.96969,3.09462 c -0.87062,0.87063 -0.62293,2.42889 -0.004,2.98829 l 1.51384,1.368 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient25106);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path25038"
inkscape:connector-curvature="0" />
<path
id="path25040"
- style="opacity:0.7;fill:none;stroke:url(#radialGradient25048);stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5"
- d="m 407.4987,379.35912 c 0.56229,0.50812 1.81497,0.33519 2.49825,-0.3481 l 2.98178,-3.07473 c 0.87062,-0.87061 0.69197,-2.30021 0.004,-2.98827 l -1.02382,-1.02382 c -0.69131,-0.69131 -2.11766,-0.86672 -2.98828,0.004 l -2.98178,3.07472 c -0.87062,0.87063 -0.62293,2.42889 -0.004,2.98829 l 1.51384,1.368 10e-6,-9e-5 0,0 0,0 z"
+ style="opacity:0.7;fill:none;stroke:url(#radialGradient25048);stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1"
+ d="m 407.4987,379.35912 c 0.56229,0.50812 1.81497,0.33519 2.49825,-0.3481 l 2.98178,-3.07473 c 0.87062,-0.87061 0.69197,-2.30021 0.004,-2.98827 l -1.02382,-1.02382 c -0.69131,-0.69131 -2.11766,-0.86672 -2.98828,0.004 l -2.98178,3.07472 c -0.87062,0.87063 -0.62293,2.42889 -0.004,2.98829 l 1.51384,1.368 z"
sodipodi:nodetypes="ccccccczz"
inkscape:connector-curvature="0" />
<path
- transform="matrix(-0.7071068,0.7071068,-0.7071068,-0.7071068,0,0)"
- style="fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5"
+ transform="rotate(135)"
+ style="fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1"
d="m -27.628256,-559.32709 c 1.190517,0 2.148948,0.95597 2.148948,2.14343"
id="rect25127"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient25117);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient25117);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 417.50245,369.52434 0.49841,0.4984 c 0.68807,0.68805 0.86319,2.11415 -0.004,2.98828 l -2.96882,2.99286 c -0.68052,0.68603 -1.74799,0.71589 -2.49825,0.34809 -0.18628,-0.0913 -0.39866,-0.20409 -0.53552,-0.34095 l -1,-1"
id="path25042"
sodipodi:nodetypes="csssssc"
@@ -77651,7 +76569,7 @@
height="16"
width="16"
id="rect23456"
- style="opacity:0;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;enable-background:accumulate" />
<g
id="g23458"
transform="matrix(0,1,1,0,203.99437,-269)">
@@ -77661,13 +76579,13 @@
id="g23462"
transform="translate(0,21)">
<path
- style="fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 327,76 0,10.00563 2,2 3,0 2,-2 0,-3.25"
+ style="fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 327,76 v 10.00563 l 2,2 h 3 l 2,-2 v -3.25"
id="path23464"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 330.25,79.25563 327,76 l -3.25,3.25563"
id="path23466"
sodipodi:nodetypes="ccc"
@@ -77679,22 +76597,22 @@
<path
sodipodi:nodetypes="cccccc"
id="path23470"
- d="m 327,76 0,10.00563 2,2 3,0 2,-2 0,-3"
- style="fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 327,76 v 10.00563 l 2,2 h 3 l 2,-2 v -3"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path23473"
d="M 330.25,79.25563 327,76.005631 323.75,79.25563"
- style="fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
<path
sodipodi:nodetypes="cc"
id="path23475"
- d="m 333.5,106.50563 0,-2.75"
- style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 333.5,106.50563 v -2.75"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<rect
transform="matrix(0,1,1,0,269,-203.99437)"
@@ -77703,15 +76621,15 @@
height="1"
width="1.5"
id="rect23492"
- style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="cc"
id="path23547"
d="m 330,100.50563 -1.25,-1.25"
- style="fill:none;stroke:#ffffff;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.25;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5;marker:none;enable-background:accumulate"
id="rect23494"
width="1.5"
height="1"
@@ -77719,24 +76637,24 @@
y="328"
transform="matrix(0,1,1,0,0,0)" />
<path
- style="fill:none;stroke:url(#linearGradient23559);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 323.25,100.25563 c 0,0.25 0.25,0.5 0.5,0.5 m 2.75,-1.24437 0,7.74437 2.25,2.25 3.5,0 2,-2"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23559);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 323.25,100.25563 c 0,0.25 0.25,0.5 0.5,0.5 m 2.75,-1.24437 v 7.74437 l 2.25,2.25 h 3.5 l 2,-2"
id="path23550"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
id="path23552"
- d="m 323.25,100.00563 3.5,-3.5 0.5,0 3.5,3.5"
- style="fill:none;stroke:url(#linearGradient23557);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 323.25,100.00563 3.5,-3.5 h 0.5 l 3.5,3.5"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23557);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
<g
id="ICON_LOOP_BACK"
- transform="translate(-21,0)">
+ transform="translate(-21)">
<rect
- style="opacity:0;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;enable-background:accumulate"
id="rect23513"
width="16"
height="16"
@@ -77754,27 +76672,27 @@
<path
sodipodi:nodetypes="cccc"
id="path23523"
- d="m 327,76 0,10.00563 2,2 3,0 2,-2 0,-3.25"
- style="fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 327,76 v 10.00563 l 2,2 h 3 l 2,-2 v -3.25"
+ style="fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path23525"
d="M 330.25,79.25563 327,76 l -3.25,3.25563"
- style="fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
<g
transform="translate(0,21)"
id="g23527">
<path
- style="fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 327,76 0,10.00563 2,2 3,0 2,-2 0,-3"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 327,76 v 10.00563 l 2,2 h 3 l 2,-2 v -3"
id="path23530"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="M 330.25,79.25563 327,76.005631 323.75,79.25563"
id="path23532"
sodipodi:nodetypes="ccc"
@@ -77782,19 +76700,19 @@
</g>
</g>
<path
- style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 326.5,99.5 0,6.50563 m 3,2.5 2,0 2,-2 0,-2.75"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 326.5,99.5 v 6.50563 m 3,2.5 h 2 l 2,-2 v -2.75"
id="path23534"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient23543);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 323.25,100.00563 3.5,-3.499999 0.5,0 3.5,3.499999"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23543);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 323.25,100.00563 3.5,-3.499999 h 0.5 l 3.5,3.499999"
id="path23536"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5;marker:none;enable-background:accumulate"
id="rect23539"
width="1.5"
height="1"
@@ -77808,7 +76726,7 @@
height="1"
width="1.5"
id="rect23541"
- style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5;marker:none;enable-background:accumulate" />
</g>
</g>
<g
@@ -77821,7 +76739,7 @@
height="16"
width="16"
id="rect27864"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
@@ -77832,13 +76750,13 @@
<path
sodipodi:nodetypes="ccccccc"
id="path27868"
- d="m 392.5,239.5 -4.98989,4.75 0,0.5 4.98989,4.75 1.01011,-1e-5 0.0368,-9.96874 L 392.5,239.5 z"
- style="fill:url(#linearGradient27872);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 392.5,239.5 -4.98989,4.75 v 0.5 l 4.98989,4.75 1.01011,-1e-5 0.0368,-9.96874 z"
+ style="fill:url(#linearGradient27872);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path27870"
- d="m 392.51011,248.24999 0,-7.49999 -4,3.75"
+ d="M 392.51011,248.24999 V 240.75 l -4,3.75"
style="fill:none;stroke:url(#linearGradient27874);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
@@ -77853,18 +76771,18 @@
height="16"
width="16"
id="rect27878"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="g27880"
- transform="matrix(0,-1,1,0,-153.98989,467.9919)"
+ transform="rotate(-90,157.001,310.9909)"
style="display:inline">
<path
sodipodi:nodetypes="ccccccc"
- style="color:#000000;fill:url(#linearGradient27886);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 392.49192,239.48989 -5.00001,4.75 0,0.5 5.00001,4.75 1,0 0,-10 -1,0 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient27886);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 392.49192,239.48989 -5.00001,4.75 v 0.5 l 5.00001,4.75 h 1 v -10 z"
id="path27882"
inkscape:connector-curvature="0" />
<path
@@ -77882,7 +76800,7 @@
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect29962"
width="16"
height="16"
@@ -77896,8 +76814,8 @@
clip-path="none">
<path
id="path29966"
- d="m -35,273.5 0,-10.5 8,3.75 0,10.75 -8,-4 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#0b1728;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M -35,273.5 V 263 l 8,3.75 v 10.75 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#0b1728;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="ccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -77909,15 +76827,15 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
sodipodi:nodetypes="ccccc"
style="fill:url(#linearGradient29988);fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m -35,273.5 0,-10.5 8,3.75 0,10.75 -8,-4 z"
+ d="M -35,273.5 V 263 l 8,3.75 v 10.75 z"
id="path29968"
inkscape:connector-curvature="0" />
</g>
<path
sodipodi:nodetypes="ccc"
id="path29970"
- d="m 334.5,287.75 -7,-3.25 0,9"
- style="opacity:0.7;fill:none;stroke:url(#linearGradient29990);stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
+ d="m 334.5,287.75 -7,-3.25 v 9"
+ style="display:inline;opacity:0.7;fill:none;stroke:url(#linearGradient29990);stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
<g
inkscape:export-ydpi="90"
@@ -77925,48 +76843,39 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\jendrzych's iconset.png"
transform="matrix(0.6827482,0,0,0.68258425,246.77037,137.93793)"
id="g29972"
- style="opacity:0.75;display:inline;enable-background:new"
+ style="display:inline;opacity:0.75;enable-background:new"
mask="url(#mask29419)"
clip-path="url(#clipPath28964)">
- <path
+ <circle
transform="matrix(0.75,0,0,0.75,28.052144,135)"
- sodipodi:type="arc"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#162d50;stroke-width:1.75781369;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#162d50;stroke-width:1.75781369;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path29974"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(-0.683022,-0.07745026,0.0778507,-0.683064,208.02475,314.325)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path29976"
- style="color:#000000;fill:url(#linearGradient29773-5);fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient29773-5);fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;enable-background:accumulate"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- sodipodi:type="arc"
- style="opacity:0.65;fill:none;stroke:#ffffff;stroke-width:2.56764865;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.65;fill:none;stroke:#ffffff;stroke-width:2.56764865;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
id="path29978"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- transform="matrix(0.5705005,0,0,0.5705012,51.746079,156.18087)" />
+ transform="matrix(0.5705005,0,0,0.5705012,51.746079,156.18087)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
style="display:inline;enable-background:new"
@@ -77975,45 +76884,36 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path29982"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.56250119;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.75,0,0,0.75,29.5,135)" />
- <path
- sodipodi:type="arc"
- style="fill:url(#linearGradient29994);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.56250119;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.75,0,0,0.75,29.5,135)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
+ style="display:inline;fill:url(#linearGradient29994);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path29984"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(-0.683022,-0.07745026,0.0778507,-0.683064,209.4726,314.325)" />
- <path
+ transform="matrix(-0.683022,-0.07745026,0.0778507,-0.683064,209.4726,314.325)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.5705005,0,0,0.5705012,53.193935,156.18087)"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path29986"
- style="opacity:0.5;fill:none;stroke:#ffffff;stroke-width:2.56764865;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
- sodipodi:type="arc"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:none;stroke:#ffffff;stroke-width:2.56764865;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
@@ -78026,7 +76926,7 @@
height="16"
width="16"
id="rect29315"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
style="display:inline"
id="g29317"
@@ -78037,72 +76937,57 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="g29320">
- <path
+ <circle
transform="matrix(0.874026,0,0,0.873701,-3.948211,-5.552958)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path29323"
- style="fill:url(#linearGradient29334);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.16319752;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient29334);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.16319752;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.398744,0,0,-0.395524,58.82401,144.1804)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient29336);stroke-width:3.20095801;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient29336);stroke-width:3.20095801;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path29326"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
- <path
+ <circle
transform="matrix(0.186538,0,0,-0.189699,145.3693,57.36304)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient29338);stroke-width:5.31599474;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient29338);stroke-width:5.31599474;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path29328"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path29330"
- style="fill:none;stroke:url(#linearGradient29340);stroke-width:1.77120221;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
- sodipodi:type="arc"
- transform="matrix(0.566689,0,0,-0.562497,95.23056,101.3747)" />
- <path
+ style="display:inline;fill:none;stroke:url(#linearGradient29340);stroke-width:1.77120221;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.566689,0,0,-0.562497,95.23056,101.3747)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path29332"
- style="fill:none;stroke:url(#linearGradient29342);stroke-width:2.35577321;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
- sodipodi:type="arc"
- transform="matrix(0.424906,0,0,-0.424074,114.01316,85.183325)" />
+ style="display:inline;fill:none;stroke:url(#linearGradient29342);stroke-width:2.35577321;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.424906,0,0,-0.424074,114.01316,85.183325)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
@@ -78115,7 +77000,7 @@
height="16"
width="16"
id="rect32013"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
style="display:inline"
id="g32015"
@@ -78125,8 +77010,8 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- style="fill:none;stroke:#002255;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="M -55,1 -47.000051,-1.999984 -50,6 -55,1 z"
+ style="fill:none;stroke:#002255;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M -55,1 -47.000051,-1.999984 -50,6 Z"
id="path32032"
sodipodi:nodetypes="cccc" />
<path
@@ -78137,13 +77022,13 @@
sodipodi:nodetypes="cc"
id="path32044"
d="M -58.250048,9.250016 -50,0.999884"
- style="fill:none;stroke:#002255;stroke-width:3.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ style="fill:none;stroke:#002255;stroke-width:3.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- style="fill:none;stroke:#4989e9;stroke-width:1.89999998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#4989e9;stroke-width:1.89999998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M -58.250048,9.250016 -50,0.999884"
id="path32050"
sodipodi:nodetypes="cc" />
@@ -78155,7 +77040,7 @@
sodipodi:nodetypes="cc"
id="path32055"
d="m -58,8.999884 8,-8"
- style="opacity:0.5;fill:none;stroke:url(#linearGradient32140);stroke-width:1.89999998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ style="opacity:0.5;fill:none;stroke:url(#linearGradient32140);stroke-width:1.89999998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
inkscape:export-ydpi="90"
@@ -78163,7 +77048,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccc"
id="path32057"
- d="M -55,1 -47.000051,-1.999984 -50,6 -55,1 z"
+ d="M -55,1 -47.000051,-1.999984 -50,6 Z"
style="fill:#4989e9;fill-opacity:1;fill-rule:evenodd;stroke:none" />
<path
inkscape:connector-curvature="0"
@@ -78171,7 +77056,7 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
style="opacity:0.5;fill:url(#linearGradient32142);fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="M -55,1 -47.000051,-1.999984 -50,6 -55,1 z"
+ d="M -55,1 -47.000051,-1.999984 -50,6 Z"
id="path32059"
sodipodi:nodetypes="cccc" />
<path
@@ -78182,14 +77067,14 @@
sodipodi:nodetypes="cc"
id="path32063"
d="M -47.25,-1.75 -54.75,1"
- style="fill:none;stroke:#ffffff;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ style="fill:none;stroke:#ffffff;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- style="fill:none;stroke:#ffffff;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m -53,3 -5.750048,5.750016 0,0.75"
+ style="fill:none;stroke:#ffffff;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m -53,3 -5.750048,5.750016 v 0.75"
id="path32068"
sodipodi:nodetypes="cc" />
</g>
@@ -78204,7 +77089,7 @@
height="16"
width="16"
id="rect32072"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
style="display:inline"
id="g32074"
@@ -78214,7 +77099,7 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- style="fill:none;stroke:#002255;stroke-width:3.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#002255;stroke-width:3.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m -18.25,9.25 8.249996,-8.2304767"
id="path32077"
sodipodi:nodetypes="cc" />
@@ -78225,8 +77110,8 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="ccccc"
id="path32079"
- d="m -12.999997,-2.000002 5.9999268,1.448e-4 6.72e-5,5.9998542 -6.000002,0 8e-6,-5.999999 0,0 0,0 0,0 z"
- style="fill:none;stroke:#002255;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ d="m -12.999997,-2.000002 5.9999268,1.448e-4 6.72e-5,5.9998542 h -6.000002 z"
+ style="fill:none;stroke:#002255;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
inkscape:export-ydpi="90"
@@ -78235,13 +77120,13 @@
sodipodi:nodetypes="cc"
id="path32081"
d="m -18.25,9.25 8.249996,-8.24999"
- style="fill:none;stroke:#4989e9;stroke-width:1.89999998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ style="fill:none;stroke:#4989e9;stroke-width:1.89999998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- style="opacity:0.5;fill:none;stroke:url(#linearGradient32144);stroke-width:1.89999998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.5;fill:none;stroke:url(#linearGradient32144);stroke-width:1.89999998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m -18.000004,9.00001 8,-8"
id="path32087"
sodipodi:nodetypes="cc" />
@@ -78251,7 +77136,7 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
style="fill:#4989e9;fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m -12.999992,-2 5.9999248,1.448e-4 L -7,4 l -6,0 8e-6,-6 z"
+ d="m -12.999992,-2 5.9999248,1.448e-4 L -7,4 h -6 z"
id="path32089"
sodipodi:nodetypes="ccccc" />
<path
@@ -78261,15 +77146,15 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="ccccc"
id="path32104"
- d="m -12.999992,-2 5.9999248,1.452e-4 L -7,4 l -6,0 8e-6,-6 z"
+ d="m -12.999992,-2 5.9999248,1.452e-4 L -7,4 h -6 z"
style="opacity:0.5;fill:url(#linearGradient32146);fill-opacity:1;fill-rule:evenodd;stroke:none" />
<path
inkscape:connector-curvature="0"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- style="fill:none;stroke:#ffffff;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m -12.749999,2.750002 0,-4.4999957 5.4999946,0"
+ style="fill:none;stroke:#ffffff;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m -12.749999,2.750002 v -4.4999957 h 5.4999946"
id="path32114"
sodipodi:nodetypes="ccc" />
<path
@@ -78279,8 +77164,8 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cc"
id="path32118"
- d="m -12.75,2.75 -6,6 0,0.75"
- style="fill:none;stroke:#ffffff;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ d="m -12.75,2.75 -6,6 V 9.5"
+ style="fill:none;stroke:#ffffff;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</g>
<g
@@ -78291,7 +77176,7 @@
height="16"
width="16"
id="rect32122"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
style="display:inline"
id="g32124"
@@ -78301,7 +77186,7 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:type="arc"
- style="fill:none;stroke:#002255;stroke-width:1.79768455;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5"
+ style="fill:none;stroke:#002255;stroke-width:1.79768455;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1"
id="path32126"
sodipodi:cx="49.5"
sodipodi:cy="-32.5"
@@ -78330,14 +77215,14 @@
sodipodi:cy="-32.5"
sodipodi:cx="49.5"
id="path32128"
- style="fill:none;stroke:#4989e9;stroke-width:0.9887265;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5"
+ style="fill:none;stroke:#4989e9;stroke-width:0.9887265;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1"
sodipodi:type="arc" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:type="arc"
- style="opacity:0.5;fill:none;stroke:url(#linearGradient32148);stroke-width:0.9887265;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5"
+ style="opacity:0.5;fill:none;stroke:url(#linearGradient32148);stroke-width:0.9887265;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1"
id="path32136"
sodipodi:cx="49.5"
sodipodi:cy="-32.5"
@@ -78366,7 +77251,7 @@
sodipodi:cy="-32.5"
sodipodi:cx="49.5"
id="path32138"
- style="fill:none;stroke:#ffffff;stroke-width:0.29357874;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5"
+ style="fill:none;stroke:#ffffff;stroke-width:0.29357874;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1"
sodipodi:type="arc" />
</g>
</g>
@@ -78374,7 +77259,7 @@
transform="translate(315,-441)"
id="ICON_SORTSIZE">
<rect
- style="opacity:0;color:#000000;fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.5999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.5999999;marker:none;enable-background:accumulate"
id="rect31818"
width="16"
height="16"
@@ -78384,69 +77269,69 @@
transform="translate(0,-21)"
id="g31820">
<path
- style="color:#000000;fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -245.25,538 12.5,0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -245.25,538 h 12.5"
id="path31822"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
id="path31824"
- d="m -245.25,538 12.5,0"
- style="color:#000000;fill:none;stroke:#d2d2d2;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -245.25,538 h 12.5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#d2d2d2;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
- style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline;enable-background:new"
- d="m -245.5,538.5 -0.25,-0.5 0.25,-0.5 13,0"
+ style="display:inline;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
+ d="m -245.5,538.5 -0.25,-0.5 0.25,-0.5 h 13"
id="path31826"
inkscape:connector-curvature="0" />
<path
id="path31828"
- d="m -242.5,543.5 0,-1 7,0"
- style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline;enable-background:new"
+ d="m -242.5,543.5 v -1 h 7"
+ style="display:inline;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
- style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline;enable-background:new"
- d="m -239.5,548.5 0,-1 1,0"
+ style="display:inline;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
+ d="m -239.5,548.5 v -1 h 1"
id="path31830"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
id="path31832"
- d="m -242.25,543 6.5,0"
- style="color:#000000;fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -242.25,543 h 6.5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="color:#000000;fill:none;stroke:#d2d2d2;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -242.25,543 6.5,0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#d2d2d2;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -242.25,543 h 6.5"
id="path31834"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
id="path31836"
- d="m -242.5,543.5 -0.25,-0.5 0.25,-0.5 7,0"
- style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline;enable-background:new"
+ d="m -242.5,543.5 -0.25,-0.5 0.25,-0.5 h 7"
+ style="display:inline;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
- style="color:#000000;fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -239.25,548 0.5,0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -239.25,548 h 0.5"
id="path31838"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
id="path31840"
- d="m -239.25,548 0.5,0"
- style="color:#000000;fill:none;stroke:#d2d2d2;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -239.25,548 h 0.5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#d2d2d2;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
- style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline;enable-background:new"
- d="m -239.5,548.5 -0.25,-0.5 0.25,-0.5 1,0"
+ style="display:inline;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
+ d="m -239.5,548.5 -0.25,-0.5 0.25,-0.5 h 1"
id="path31844"
inkscape:connector-curvature="0" />
</g>
@@ -78458,33 +77343,33 @@
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<rect
- style="opacity:0;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
id="rect31848"
width="16"
height="16"
x="-186"
y="493" />
<path
- style="color:#000000;fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -177.25,499 5.25,0 0,0.5 -5.03256,7.02015 0,0.5 L -171.75,507"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -177.25,499 h 5.25 v 0.5 l -5.03256,7.02015 v 0.5 L -171.75,507"
id="path31857"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccc"
id="path31859"
- d="m -177.25,499 5.25,0 0,0.5 -5.03256,7.02015 0,0.5 L -171.75,507"
- style="color:#000000;fill:none;stroke:url(#linearGradient31946);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -177.25,499 h 5.25 v 0.5 l -5.03256,7.02015 v 0.5 L -171.75,507"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient31946);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m -175.25,506.5 3.75,0 m -6.5,-8 6.25,0 m -1.75,2 -4,5.75 0,1"
+ style="fill:none;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m -175.25,506.5 h 3.75 m -6.5,-8 h 6.25 m -1.75,2 -4,5.75 v 1"
id="path31861"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;color:#000000;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter50168-9);enable-background:accumulate;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
- d="m -183.4375,493.25 a 1.7525094,1.7525094 0 0 0 0.1875,3.5 l 1.875,0 0.125,0 c 0.30188,0 0.5,0.19814 0.5,0.5 l -2.25,0 a 1.750175,1.750175 0 0 0 -1.25,0.5 l -1,1 a 1.750175,1.750175 0 0 0 -0.5,1.25 l 0,2 a 1.750175,1.750175 0 0 0 0.5,1.25 l 1,1 a 1.750175,1.750175 0 0 0 1.25,0.5 l 2.5,0 a 1.750175,1.750175 0 0 0 1.25,-0.5 l 0.25,0.25 a 1.767767,1.767767 0 1 0 2.5,-2.5 l -0.75,-0.75 0,-1.9375 a 1.750175,1.750175 0 0 0 0,-0.5 1.750175,1.750175 0 0 0 0,-0.1875 l 0,-1.09375 a 1.750175,1.750175 0 0 0 0,-0.28125 1.750175,1.750175 0 0 0 -0.125,-0.6875 c -0.004,-0.0221 -0.0268,-0.0405 -0.0312,-0.0625 a 1.750175,1.750175 0 0 0 -0.0312,-0.0937 c -0.35614,-1.57819 -1.57955,-2.76466 -3.1875,-3.03125 a 1.750175,1.750175 0 0 0 -0.625,-0.125 l -0.1875,0 -1.8125,0 a 1.750175,1.750175 0 0 0 -0.1875,0 z m 1.1875,7.5 1.5,0 0,0.5 -1.5,0 0,-0.5 z"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;marker:none;filter:url(#filter50168-9);enable-background:accumulate"
+ d="m -183.4375,493.25 a 1.7525094,1.7525094 0 0 0 0.1875,3.5 h 1.875 0.125 c 0.30188,0 0.5,0.19814 0.5,0.5 H -183 a 1.750175,1.750175 0 0 0 -1.25,0.5 l -1,1 a 1.750175,1.750175 0 0 0 -0.5,1.25 v 2 a 1.750175,1.750175 0 0 0 0.5,1.25 l 1,1 a 1.750175,1.750175 0 0 0 1.25,0.5 h 2.5 a 1.750175,1.750175 0 0 0 1.25,-0.5 l 0.25,0.25 a 1.767767,1.767767 0 1 0 2.5,-2.5 l -0.75,-0.75 v -1.9375 a 1.750175,1.750175 0 0 0 0,-0.5 1.750175,1.750175 0 0 0 0,-0.1875 v -1.09375 a 1.750175,1.750175 0 0 0 0,-0.28125 1.750175,1.750175 0 0 0 -0.125,-0.6875 c -0.004,-0.0221 -0.0268,-0.0405 -0.0312,-0.0625 a 1.750175,1.750175 0 0 0 -0.0312,-0.0937 c -0.35614,-1.57819 -1.57955,-2.76466 -3.1875,-3.03125 a 1.750175,1.750175 0 0 0 -0.625,-0.125 h -0.1875 -1.8125 a 1.750175,1.750175 0 0 0 -0.1875,0 z m 1.1875,7.5 h 1.5 v 0.5 h -1.5 z"
id="path31869"
clip-path="url(#clipPath50172-0)"
mask="none"
@@ -78493,39 +77378,39 @@
<path
id="path31871"
transform="translate(-0.25906372,0.25457764)"
- style="color:#000000;fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -180.99094,494.73636 c 1.24765,0 2.25907,1.01142 2.25907,2.25906 m -0.009,0 0,4.75 1.25,1.25 m -2.75,-0.25 -2.5,0 -1,-1 0,-2 1,-1 4,0 m -4.25,-4 2,0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -180.99094,494.73636 c 1.24765,0 2.25907,1.01142 2.25907,2.25906 m -0.009,0 v 4.75 l 1.25,1.25 m -2.75,-0.25 h -2.5 l -1,-1 v -2 l 1,-1 h 4 m -4.25,-4 h 2"
inkscape:connector-curvature="0" />
<path
- d="m -180.99094,494.73636 c 1.24765,0 2.25907,1.01142 2.25907,2.25906 m -0.009,0 0,4.75 1.25,1.25 m -2.75,-0.25 -2.5,0 -1,-1 0,-2 1,-1 4,0 m -4.25,-4 2,0"
- style="color:#000000;fill:none;stroke:url(#linearGradient31948);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -180.99094,494.73636 c 1.24765,0 2.25907,1.01142 2.25907,2.25906 m -0.009,0 v 4.75 l 1.25,1.25 m -2.75,-0.25 h -2.5 l -1,-1 v -2 l 1,-1 h 4 m -4.25,-4 h 2"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient31948);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
transform="translate(-0.25906372,0.25457764)"
id="path31873"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path31875"
- d="m -179.5,495.25 -1.25,-0.75 -2.75,0 -0.25,0.5 0.24997,0.5"
- style="fill:none;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m -179.5,495.25 -1.25,-0.75 h -2.75 l -0.25,0.5 0.24997,0.5"
+ style="fill:none;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
id="path31879"
- d="m -184.5,502 0,-2.25 1.25,-1.25 3.25,0"
- style="fill:none;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m -184.5,502 v -2.25 l 1.25,-1.25 h 3.25"
+ style="fill:none;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
id="path31881"
- d="m -182.25,502.5 2,0 0.75,-0.75 0,-1"
- style="fill:none;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m -182.25,502.5 h 2 l 0.75,-0.75 v -1"
+ style="fill:none;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
<g
id="ICON_SORTTIME"
transform="translate(189,-315)">
<g
- style="opacity:0.96000001;display:inline;enable-background:new"
+ style="display:inline;opacity:0.96000001;enable-background:new"
id="g31885"
transform="translate(-307.59866,-9.53021)">
<g
@@ -78544,17 +77429,17 @@
height="16"
width="16"
id="rect31891"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<rect
y="247.5"
x="162.99997"
height="16"
width="15.000031"
id="rect31893"
- style="opacity:0;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline" />
+ style="display:inline;opacity:0;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
<path
- d="m 167.48389,249.00007 0,2 m 6,-2 0,2"
- style="fill:none;stroke:#162d50;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 167.48389,249.00007 v 2 m 6,-2 v 2"
+ style="fill:none;stroke:#162d50;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path31896"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
@@ -78569,32 +77454,32 @@
ry="1.0000547" />
<path
sodipodi:nodetypes="cc"
- d="m 165.48389,262.00007 0,-11"
- style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="m 165.48389,262.00007 v -11"
+ style="display:inline;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
id="path31900"
inkscape:connector-curvature="0" />
<path
id="path31902"
- style="opacity:0.5;fill:none;stroke:url(#linearGradient31952);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
- d="m 175.48389,251.00007 0,11 -10,0 0,-11 10,0 z"
+ style="display:inline;opacity:0.5;fill:none;stroke:url(#linearGradient31952);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 175.48389,251.00007 v 11 h -10 v -11 z"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
transform="translate(346.98389,-98.49991)"
- style="color:#000000;fill:url(#linearGradient31954);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -181.5,348.96875 c -0.0977,0 -0.2593,0.0405 -0.375,0.15625 -0.1157,0.1157 -0.15625,0.27731 -0.15625,0.375 l 0,7 2.53125,2.53125 10.53125,0 0,-1.15625 c -1.11643,-0.22954 -2,-1.19538 -2,-2.375 l 0,-6 c 0,-0.0977 -0.0405,-0.2593 -0.15625,-0.375 -0.1157,-0.1157 -0.27731,-0.15625 -0.375,-0.15625 l -10,0 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient31954);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
+ d="m -181.5,348.96875 c -0.0977,0 -0.2593,0.0405 -0.375,0.15625 -0.1157,0.1157 -0.15625,0.27731 -0.15625,0.375 v 7 l 2.53125,2.53125 h 10.53125 V 357.875 c -1.11643,-0.22954 -2,-1.19538 -2,-2.375 v -6 c 0,-0.0977 -0.0405,-0.2593 -0.15625,-0.375 -0.1157,-0.1157 -0.27731,-0.15625 -0.375,-0.15625 z"
id="path31905"
sodipodi:nodetypes="cscccccccscc"
inkscape:connector-curvature="0" />
<path
transform="translate(346.98389,-98.49991)"
- style="color:#000000;fill:none;stroke:url(#linearGradient31956);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -181.5,349.5 0,6.75 2.25,2.25 9.7813,0.0312 -0.0313,-0.2812 c -1.11143,-0.43566 -2,-1.49177 -2,-2.75 l 0.0313,-6.00005 -10.0313,5e-5 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient31956);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -181.5,349.5 v 6.75 l 2.25,2.25 9.7813,0.0312 -0.0313,-0.2812 c -1.11143,-0.43566 -2,-1.49177 -2,-2.75 l 0.0313,-6.00005 z"
id="path31907"
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0" />
<rect
- style="color:#000000;fill:url(#linearGradient31958);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.4000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient31958);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.4000001;marker:none;enable-background:accumulate"
id="rect31909"
width="11.000002"
height="4.0000105"
@@ -78604,31 +77489,31 @@
ry="0" />
<path
sodipodi:nodetypes="cccc"
- d="m 165.48389,254.50007 0,-3.5 10,0 0,3.5"
- style="opacity:0.45;fill:none;stroke:url(#linearGradient31960);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="m 165.48389,254.50007 v -3.5 h 10 v 3.5"
+ style="display:inline;opacity:0.45;fill:none;stroke:url(#linearGradient31960);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
id="path31912"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
id="path31914"
- style="opacity:0.8;fill:none;stroke:#162d50;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 167.48389,249.00007 0,2 m 6,-2 0,2"
+ style="opacity:0.8;fill:none;stroke:#162d50;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 167.48389,249.00007 v 2 m 6,-2 v 2"
inkscape:connector-curvature="0" />
<path
- style="color:#000000;fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -181.5,348.5 c -0.13851,0 -0.25527,0.0433 -0.375,0.0937 -0.23945,0.10094 -0.43031,0.2918 -0.53125,0.53125 -0.0505,0.11973 -0.0937,0.23649 -0.0937,0.375 l 0,7 0,4 c 0,0.55403 0.44597,1 1,1 l 10,0 c 0.55403,0 1,-0.44597 1,-1 l 0,-1 2,0 0,-2 c -1.09489,0 -2,-0.90511 -2,-2 l 0,-6 c 0,-0.125 -0.0391,-0.25781 -0.0937,-0.375 -0.10094,-0.23945 -0.2918,-0.43031 -0.53125,-0.53125 -0.11973,-0.0505 -0.23649,-0.0937 -0.375,-0.0937 l -10,0 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -181.5,348.5 c -0.13851,0 -0.25527,0.0433 -0.375,0.0937 -0.23945,0.10094 -0.43031,0.2918 -0.53125,0.53125 -0.0505,0.11973 -0.0937,0.23649 -0.0937,0.375 v 7 4 c 0,0.55403 0.44597,1 1,1 h 10 c 0.55403,0 1,-0.44597 1,-1 v -1 h 2 v -2 c -1.09489,0 -2,-0.90511 -2,-2 v -6 c 0,-0.125 -0.0391,-0.25781 -0.0937,-0.375 -0.10094,-0.23945 -0.2918,-0.43031 -0.53125,-0.53125 -0.11973,-0.0505 -0.23649,-0.0937 -0.375,-0.0937 h -10 z"
transform="translate(346.98389,-98.49991)"
id="path31917"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
id="path31919"
- style="fill:none;stroke:url(#linearGradient31962);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 167.48389,249.00007 0,2 m 6,-2 0,2"
+ style="fill:none;stroke:url(#linearGradient31962);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 167.48389,249.00007 v 2 m 6,-2 v 2"
inkscape:connector-curvature="0" />
<path
style="opacity:0.3;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m -200.5,372.5 0.75,0 1.25,-1.25 0,-0.75"
+ d="m -200.5,372.5 h 0.75 l 1.25,-1.25 v -0.75"
id="path31921"
transform="translate(367.98389,-119.49993)"
sodipodi:nodetypes="cccc"
@@ -78636,24 +77521,24 @@
<path
sodipodi:nodetypes="cccc"
id="path31923"
- d="m 173.48389,253.00007 0.75,0 1.25,-1.25 0,-0.75"
+ d="m 173.48389,253.00007 h 0.75 l 1.25,-1.25 v -0.75"
style="opacity:0.3;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
id="path31925"
- d="m 167.48389,252.00007 0.5,0 0.5,-0.5 0,-0.5"
- style="opacity:0.7;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline;enable-background:new"
+ d="m 167.48389,252.00007 h 0.5 l 0.5,-0.5 v -0.5"
+ style="display:inline;opacity:0.7;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.7;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline;enable-background:new"
- d="m 173.48389,252.00007 0.5,0 0.5,-0.5 0,-0.5"
+ style="display:inline;opacity:0.7;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
+ d="m 173.48389,252.00007 h 0.5 l 0.5,-0.5 v -0.5"
id="path31927"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.25;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline;enable-background:new"
- d="m 165.48389,254.00007 10,0"
+ style="display:inline;opacity:0.25;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
+ d="m 165.48389,254.00007 h 10"
id="path31929"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
@@ -78661,19 +77546,19 @@
sodipodi:nodetypes="ccc"
id="path31931"
d="m -170.5,359.5 c -3.30603,0.005 -5.7501,0 -9,0 l -1.75,-1.75"
- style="opacity:0.5;color:#000000;fill:none;stroke:#000000;stroke-width:0.89999998;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:none;stroke:#000000;stroke-width:0.89999998;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;marker:none;enable-background:accumulate"
transform="translate(346.98389,-98.49991)"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="csc"
- style="color:#000000;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 170.48389,259.00009 c -0.25,0 -0.64081,-0.31307 -0.82432,-0.78241 -0.17644,-0.45125 -0.17568,-0.96756 -0.17568,-2.21759"
id="path31933"
inkscape:connector-curvature="0" />
<path
id="path31935"
d="m 173.48389,259.00009 c -0.25,0 -0.64081,-0.31307 -0.82432,-0.78241 -0.17644,-0.45125 -0.17568,-0.96756 -0.17568,-2.21759"
- style="color:#000000;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="csc"
inkscape:connector-curvature="0" />
</g>
@@ -78687,9 +77572,9 @@
height="1"
width="1"
id="rect31937"
- style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate" />
<rect
- style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate"
id="rect31939"
width="1"
height="1"
@@ -78703,9 +77588,9 @@
height="0.7500025"
width="0.50001091"
id="rect31941"
- style="opacity:0.7;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate" />
<rect
- style="opacity:0.7;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate"
id="rect31943"
width="0.50001091"
height="0.7500025"
@@ -78724,16 +77609,16 @@
height="16"
width="16"
id="rect31978"
- style="opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="cccccccccccc"
id="path31980"
- d="m 244,283.5 c -3.49999,0 -5.5,1 -5.49999,2.5 l -1e-5,1.75 3,3 0,6.5 1.25,1.25 2.5,0 1.25,-1.25 0,-6.5 3,-3 0,-1.75 c 0,-1.5 -1.99999,-2.5 -5.5,-2.5 z"
- style="color:#000000;fill:url(#linearGradient32236);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 244,283.5 c -3.49999,0 -5.5,1 -5.49999,2.5 l -1e-5,1.75 3,3 v 6.5 l 1.25,1.25 h 2.5 l 1.25,-1.25 v -6.5 l 3,-3 V 286 c 0,-1.5 -1.99999,-2.5 -5.5,-2.5 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient32236);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="color:#000000;fill:url(#linearGradient32238);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 244,287.5 c -3.49999,0 -5.5,-1 -5.49999,-2.5 l -1e-5,2.75 3,3 5,0 3,-3 0,-2.75 c 0,1.5 -1.99999,2.5 -5.5,2.5 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient32238);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
+ d="m 244,287.5 c -3.49999,0 -5.5,-1 -5.49999,-2.5 l -1e-5,2.75 3,3 h 5 l 3,-3 V 285 c 0,1.5 -1.99999,2.5 -5.5,2.5 z"
id="path31982"
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0" />
@@ -78741,16 +77626,16 @@
sodipodi:nodetypes="czs"
id="path31985"
d="m 248.99999,286.24149 c 0,1.12925 -1.66739,2.25851 -5.01168,2.25851 -3.34426,0 -4.99267,-1.12926 -4.99267,-2.25851"
- style="fill:none;stroke:url(#linearGradient32240);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient32240);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#0b1728;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 246.5,290.75 3,-3 0,-1.75 c 0,-1.5 -1.99999,-2.5 -5.5,-2.5 -3.49999,0 -5.5,1 -5.49999,2.5 l -1e-5,1.75 3,3"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0b1728;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 246.5,290.75 3,-3 V 286 c 0,-1.5 -1.99999,-2.5 -5.5,-2.5 -3.49999,0 -5.5,1 -5.49999,2.5 l -1e-5,1.75 3,3"
id="path31989"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
- style="fill:#89a9d9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.29137695;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#89a9d9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.29137695;marker:none;enable-background:accumulate"
d="m 249,285.86765 c 0,0.99654 -1.81092,1.88235 -5,1.88235 -3.18906,0 -5,-0.88581 -5,-1.88235 0,-1.36765 2.61499,-2.11765 5,-2.11765 2.38501,0 5,0.75 5,2.11765 z"
id="path31991"
sodipodi:nodetypes="czszs"
@@ -78759,40 +77644,40 @@
sodipodi:nodetypes="cc"
id="path31993"
d="m 239.5,287.5 3,3"
- style="opacity:0.7;color:#000000;fill:none;stroke:url(#linearGradient32242);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:none;stroke:url(#linearGradient32242);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccc"
id="path31996"
- d="m 241.5,290.75 0,6.5 1.25,1.25 2.5,0 1.25,-1.25 0,-6.5"
- style="fill:none;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 241.5,290.75 v 6.5 l 1.25,1.25 h 2.5 l 1.25,-1.25 v -6.5"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="color:#000000;fill:none;stroke:url(#linearGradient32244);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 242.5,291 0,5.75 0.75,0.75 1.5,0 0.75,-0.75 0,-6.25 3,-3"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient32244);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 242.5,291 v 5.75 l 0.75,0.75 h 1.5 l 0.75,-0.75 v -6.25 l 3,-3"
id="path31998"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
- style="color:#000000;fill:url(#linearGradient32246);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 242.5,291 c -0.277,0 -0.5,0.223 -0.5,0.5 0,0.277 0.223,0.5 0.5,0.5 l 3,0 c 0.277,0 0.5,-0.223 0.5,-0.5 0,-0.277 -0.223,-0.5 -0.5,-0.5 l -3,0 z m 0,2 c -0.277,0 -0.5,0.223 -0.5,0.5 0,0.277 0.223,0.5 0.5,0.5 l 3,0 c 0.277,0 0.5,-0.223 0.5,-0.5 0,-0.277 -0.223,-0.5 -0.5,-0.5 l -3,0 z m 0,2 c -0.277,0 -0.5,0.223 -0.5,0.5 0,0.277 0.223,0.5 0.5,0.5 l 3,0 c 0.277,0 0.5,-0.223 0.5,-0.5 0,-0.277 -0.223,-0.5 -0.5,-0.5 l -3,0 z m 0.75,2 c -0.277,0 -0.5,0.223 -0.5,0.5 0,0.277 0.223,0.5 0.5,0.5 l 1.5,0 c 0.277,0 0.5,-0.223 0.5,-0.5 0,-0.277 -0.223,-0.5 -0.5,-0.5 l -1.5,0 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient32246);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
+ d="m 242.5,291 c -0.277,0 -0.5,0.223 -0.5,0.5 0,0.277 0.223,0.5 0.5,0.5 h 3 c 0.277,0 0.5,-0.223 0.5,-0.5 0,-0.277 -0.223,-0.5 -0.5,-0.5 z m 0,2 c -0.277,0 -0.5,0.223 -0.5,0.5 0,0.277 0.223,0.5 0.5,0.5 h 3 c 0.277,0 0.5,-0.223 0.5,-0.5 0,-0.277 -0.223,-0.5 -0.5,-0.5 z m 0,2 c -0.277,0 -0.5,0.223 -0.5,0.5 0,0.277 0.223,0.5 0.5,0.5 h 3 c 0.277,0 0.5,-0.223 0.5,-0.5 0,-0.277 -0.223,-0.5 -0.5,-0.5 z m 0.75,2 c -0.277,0 -0.5,0.223 -0.5,0.5 0,0.277 0.223,0.5 0.5,0.5 h 1.5 c 0.277,0 0.5,-0.223 0.5,-0.5 0,-0.277 -0.223,-0.5 -0.5,-0.5 z"
id="path32000"
inkscape:connector-curvature="0" />
<path
- style="color:#000000;fill:url(#linearGradient32248);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 242.5,292 c -0.277,0 -0.5,0.223 -0.5,0.5 0,0.277 0.223,0.5 0.5,0.5 l 2.75,0 c 0.277,0 0.5,-0.223 0.5,-0.5 0,-0.277 -0.223,-0.5 -0.5,-0.5 l -2.75,0 z m 0,2 c -0.277,0 -0.5,0.223 -0.5,0.5 0,0.277 0.223,0.5 0.5,0.5 l 2.75,0 c 0.277,0 0.5,-0.223 0.5,-0.5 0,-0.277 -0.223,-0.5 -0.5,-0.5 l -2.75,0 z m 0,2 c -0.277,0 -0.5,0.223 -0.5,0.5 0,0.277 0.223,0.5 0.5,0.5 l 2.75,0 c 0.277,0 0.5,-0.223 0.5,-0.5 0,-0.277 -0.223,-0.5 -0.5,-0.5 l -2.75,0 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient32248);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
+ d="m 242.5,292 c -0.277,0 -0.5,0.223 -0.5,0.5 0,0.277 0.223,0.5 0.5,0.5 h 2.75 c 0.277,0 0.5,-0.223 0.5,-0.5 0,-0.277 -0.223,-0.5 -0.5,-0.5 z m 0,2 c -0.277,0 -0.5,0.223 -0.5,0.5 0,0.277 0.223,0.5 0.5,0.5 h 2.75 c 0.277,0 0.5,-0.223 0.5,-0.5 0,-0.277 -0.223,-0.5 -0.5,-0.5 z m 0,2 c -0.277,0 -0.5,0.223 -0.5,0.5 0,0.277 0.223,0.5 0.5,0.5 h 2.75 c 0.277,0 0.5,-0.223 0.5,-0.5 0,-0.277 -0.223,-0.5 -0.5,-0.5 z"
id="path32002"
sodipodi:nodetypes="csccscccsccscccsccscc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#000000;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 242.47368,287.53915 246,284"
id="path32004"
inkscape:connector-curvature="0" />
<path
id="path32006"
d="m 243.5,287.5 3,-3"
- style="opacity:0.8;fill:none;stroke:#ffffff;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.8;fill:none;stroke:#ffffff;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
</g>
@@ -78801,7 +77686,7 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Pracownia\Moje dokumenty\Moje obrazy\BLENDER ICONS redesign\ver 3\sequencer + image preview.png"
id="ICON_SEQ_SPLITVIEW"
- transform="translate(147,0)">
+ transform="translate(147)">
<g
style="display:inline;enable-background:new"
transform="translate(-240,-247)"
@@ -78811,7 +77696,7 @@
inkscape:export-ydpi="90"
mask="url(#mask29801)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect32264"
width="16"
height="16"
@@ -78826,8 +77711,8 @@
transform="translate(-39.983882,19.00809)">
<path
sodipodi:nodetypes="ccccc"
- style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- d="m 244.51612,238.49191 -0.0161,3 7.98388,0 0.0161,-3 -7.98388,0 z"
+ style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 244.51612,238.49191 -0.0161,3 h 7.98388 l 0.0161,-3 z"
id="path32269"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -78838,8 +77723,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path32276"
- d="m 247.51612,241.49191 -0.0161,3 11,0 0.0161,-3 -11,0 z"
- style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 247.51612,241.49191 -0.0161,3 h 11 l 0.0161,-3 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
@@ -78848,27 +77733,27 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path32278"
- d="m 249.48388,247.49191 -0.0161,3 7.01612,0 0.0161,-3 -7.01612,0 z"
- style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ d="m 249.48388,247.49191 -0.0161,3 h 7.01612 l 0.0161,-3 z"
+ style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
<path
- style="fill:none;stroke:url(#linearGradient32296);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
- d="m 205.51612,259.5 c 0,-0.25 0,-1 0,-1 l 6,0"
+ style="display:inline;fill:none;stroke:url(#linearGradient32296);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m 205.51612,259.5 c 0,-0.25 0,-1 0,-1 h 6"
id="path32280"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path32282"
- d="m 208.51612,262.5 c 0,-0.25 0,-1 0,-1 l 9,0"
- style="fill:none;stroke:url(#linearGradient32299);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ d="m 208.51612,262.5 c 0,-0.25 0,-1 0,-1 h 9"
+ style="display:inline;fill:none;stroke:url(#linearGradient32299);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path32284"
- d="m 210.5,268.5 c 0,-0.25 0,-1 0,-1 l 5,0"
- style="fill:none;stroke:url(#linearGradient32301);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ d="m 210.5,268.5 c 0,-0.25 0,-1 0,-1 h 5"
+ style="display:inline;fill:none;stroke:url(#linearGradient32301);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
</g>
<g
@@ -78880,11 +77765,11 @@
height="9"
width="9"
id="rect32288"
- style="fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
ry="0" />
<rect
ry="0"
- style="fill:url(#linearGradient32303);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00207269;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient32303);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00207269;marker:none;enable-background:accumulate"
id="rect32290"
width="5.9999886"
height="6"
@@ -78893,13 +77778,13 @@
<path
sodipodi:nodetypes="ccccccccccccccccccccccccc"
id="path32292"
- d="m 50,429 0,2 2,0 0,-2 -2,0 z m 2,2 0,2 2,0 0,-2 -2,0 z m 2,0 2,0 0,-2 -2,0 0,2 z m 2,2 -2,0 0,2 2,0 0,-2 z m -4,2 0,-2 -2,0 0,2 2,0 z"
- style="fill:url(#linearGradient32305);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 50,429 v 2 h 2 v -2 z m 2,2 v 2 h 2 v -2 z m 2,0 h 2 v -2 h -2 z m 2,2 h -2 v 2 h 2 z m -4,2 v -2 h -2 v 2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient32305);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path32294"
- d="m 56.50001,428.49999 -7.000011,10e-6 1.1e-5,6.99999 7,0 -1.1e-5,-6.99999"
+ d="m 56.50001,428.49999 -7.000011,10e-6 1.1e-5,6.99999 h 7 L 56.499999,428.5"
style="fill:none;stroke:url(#linearGradient32307);stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
@@ -78911,7 +77796,7 @@
transform="translate(-118,-465)"
id="ICON_PREVIEW_RANGE">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect32311"
width="16"
height="16"
@@ -78920,45 +77805,39 @@
<g
id="g32313">
<g
- style="opacity:0.96000001;display:inline"
+ style="display:inline;opacity:0.96000001"
id="g32315"
transform="matrix(0.927848,0,0,0.916217,160.82022,488.72362)"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path32317"
- style="fill:url(#linearGradient32353);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.22752953;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.87787,0,0,0.889264,55.67911,118.0341)" />
+ style="fill:url(#linearGradient32353);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.22752953;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.87787,0,0,0.889264,55.67911,118.0341)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path32319"
- style="opacity:0.96000001;fill:none;stroke:url(#linearGradient32355);stroke-width:1.44816053;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.68828432,0,0,0.69278557,229.1626,611.24321)" />
+ style="opacity:0.96000001;fill:none;stroke:url(#linearGradient32355);stroke-width:1.44816053;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.68828432,0,0,0.69278557,229.1626,611.24321)"
+ cx="132"
+ cy="118"
+ r="8" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path32321"
- style="opacity:0.96000001;fill:none;stroke:#ffffff;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.96000001;fill:none;stroke:#ffffff;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 322.5,689.5 -3,3 m 0,1 2,2"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
@@ -78968,7 +77847,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cc"
d="m 319.5,693.5 2,2"
- style="opacity:0.96000001;fill:none;stroke:#aa0000;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.96000001;fill:none;stroke:#aa0000;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path32323"
inkscape:transform-center-y="1.25"
inkscape:transform-center-x="-1.25"
@@ -78979,17 +77858,17 @@
height="1.5"
width="1"
id="rect32325"
- style="opacity:0.48000004;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.48000004;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate" />
<rect
y="692"
x="324"
height="1"
width="1.5"
id="rect32327"
- style="opacity:0.48000004;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.48000004;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate" />
<path
style="opacity:0.96000001;fill:url(#linearGradient32357);fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 319.85514,686.97535 c -3.25557,0.003 -5.8936,2.6597 -5.87155,5.95078 0.0105,1.56055 0.63214,2.99542 1.61111,4.05762 2.7831,-7.37691 5.95805,-1.77373 7.49116,-9.06794 -0.92886,-0.60835 -2.04538,-0.9415 -3.23072,-0.94046 l 0,0 0,0 0,0 z"
+ d="m 319.85514,686.97535 c -3.25557,0.003 -5.8936,2.6597 -5.87155,5.95078 0.0105,1.56055 0.63214,2.99542 1.61111,4.05762 2.7831,-7.37691 5.95805,-1.77373 7.49116,-9.06794 -0.92886,-0.60835 -2.04538,-0.9415 -3.23072,-0.94046 z"
id="path32329"
inkscape:transform-center-x="1.4653436"
inkscape:transform-center-y="-1.0204512"
@@ -78998,18 +77877,18 @@
inkscape:transform-center-y="-2.5000099"
inkscape:transform-center-x="-3.00001"
id="path32331"
- d="m 319.93245,687.49998 c -0.13655,0 -0.28922,0.0368 -0.43244,0.0521 l 0,4.94792 6,0 c -0.22415,-2.79556 -2.6077,-5 -5.56756,-5 z"
- style="color:#000000;fill:#ff9e05;fill-opacity:1;fill-rule:evenodd;stroke:#d68c1a;stroke-width:1;stroke-linejoin:round;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 319.93245,687.49998 c -0.13655,0 -0.28922,0.0368 -0.43244,0.0521 V 692.5 h 6 c -0.22415,-2.79556 -2.6077,-5 -5.56756,-5 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ff9e05;fill-opacity:1;fill-rule:evenodd;stroke:#d68c1a;stroke-width:1;stroke-linejoin:round;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.28800001;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.28800001;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate"
id="rect32333"
width="1.4999696"
height="1"
x="314.51614"
y="693" />
<rect
- style="opacity:0.15;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.15;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate"
id="rect32335"
width="1"
height="1.4999921"
@@ -79020,24 +77899,21 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cc"
- d="m 324.5,692.5 -5,0"
- style="opacity:0.8;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 324.5,692.5 h -5"
+ style="opacity:0.8;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path32349"
inkscape:transform-center-y="-0.75"
inkscape:connector-curvature="0" />
- <path
+ <circle
transform="matrix(0.68828432,0,0,0.69278557,229.1626,611.24321)"
- sodipodi:type="arc"
- style="opacity:0.6;fill:none;stroke:url(#linearGradient32359);stroke-width:1.44816053;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="opacity:0.6;fill:none;stroke:url(#linearGradient32359);stroke-width:1.44816053;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path32351"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
@@ -79052,7 +77928,7 @@
height="16"
width="16"
id="rect32363"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g32365">
<g
@@ -79060,25 +77936,22 @@
id="g32367"
transform="translate(23,1)">
<g
- style="opacity:0.96000001;display:inline"
+ style="display:inline;opacity:0.96000001"
id="g32369"
transform="matrix(0.927848,0,0,0.916217,240.82022,467.72362)"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path32371"
- style="fill:url(#linearGradient32426);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.19779229;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.80941061,0,0,0.82049866,65.263425,126.69853)" />
+ style="fill:url(#linearGradient32426);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.19779229;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.80941061,0,0,0.82049866,65.263425,126.69853)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
inkscape:export-ydpi="90"
@@ -79086,28 +77959,25 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
transform="matrix(0.784039,0,0,0.779055,265.50801,498.28815)"
id="g32373"
- style="opacity:0.96000001;fill:none;stroke:url(#linearGradient32430);stroke-width:1.17973554;stroke-opacity:1;display:inline">
- <path
+ style="display:inline;opacity:0.96000001;fill:none;stroke:url(#linearGradient32430);stroke-width:1.17973554;stroke-opacity:1">
+ <circle
transform="matrix(0.79894049,0,0,0.80499668,66.729242,128.65178)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient32428);stroke-width:1.59548569;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient32428);stroke-width:1.59548569;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path32375"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path32377"
- style="opacity:0.96000001;fill:none;stroke:#ffffff;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 400.5,668.5 0,4 m 0,0 2,2"
+ style="opacity:0.96000001;fill:none;stroke:#ffffff;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 400.5,668.5 v 4 m 0,0 2,2"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
@@ -79116,7 +77986,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cc"
d="m 400.5,672.5 2,2"
- style="opacity:0.96000001;fill:none;stroke:#aa0000;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.96000001;fill:none;stroke:#aa0000;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path32380"
inkscape:transform-center-y="1.25"
inkscape:transform-center-x="-1.25"
@@ -79127,19 +77997,19 @@
height="2.5"
width="1"
id="rect32382"
- style="opacity:0.48000004;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.48000004;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate" />
<rect
y="672"
x="404"
height="1"
width="2.5"
id="rect32384"
- style="opacity:0.15;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.15;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate" />
<path
inkscape:transform-center-y="-0.75"
id="path32387"
- style="opacity:0.96000001;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 400.5,668.5 0,4"
+ style="opacity:0.96000001;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 400.5,668.5 v 4"
sodipodi:nodetypes="cc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -79147,20 +78017,20 @@
inkscape:connector-curvature="0" />
<path
style="opacity:0.96000001;fill:url(#linearGradient32432);fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 400.30467,667.25 c -2.80257,0.003 -5.07354,2.32096 -5.05455,5.19291 0.009,1.36179 0.54419,2.61392 1.38693,3.54084 2.39585,-6.4374 5.12903,-1.54783 6.44881,-7.91306 -0.79962,-0.53087 -1.76077,-0.82159 -2.78119,-0.82069 l 0,0 0,0 0,0 z"
+ d="m 400.30467,667.25 c -2.80257,0.003 -5.07354,2.32096 -5.05455,5.19291 0.009,1.36179 0.54419,2.61392 1.38693,3.54084 2.39585,-6.4374 5.12903,-1.54783 6.44881,-7.91306 -0.79962,-0.53087 -1.76077,-0.82159 -2.78119,-0.82069 z"
id="path32389"
inkscape:transform-center-x="1.2614492"
inkscape:transform-center-y="-0.89049022"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.28800001;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.28800001;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate"
id="rect32391"
width="2.4838562"
height="1"
x="394.51614"
y="672" />
<rect
- style="opacity:0.28800001;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.28800001;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate"
id="rect32393"
width="1"
height="1.4999921"
@@ -79171,8 +78041,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cc"
- d="m 400.5,668.5 0,4"
- style="opacity:0.57600002;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 400.5,668.5 v 4"
+ style="opacity:0.57600002;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path32396"
inkscape:transform-center-y="-0.75"
inkscape:connector-curvature="0" />
@@ -79185,12 +78055,12 @@
<path
sodipodi:nodetypes="ccc"
id="path32403"
- d="m 343,108.25 0,-4.25 4.25,0"
- style="fill:none;stroke:#0b1e00;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 343,108.25 V 104 h 4.25"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0b1e00;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<path
- style="color:#000000;fill:none;stroke:#0b1e00;stroke-width:3.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0b1e00;stroke-width:3.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 428,671.25 c -0.0541,-1.25729 -0.54273,-2.44429 -1.37516,-3.38809 -2.00926,-2.27808 -5.59675,-2.62117 -7.87484,-0.61191 L 417,669"
id="path32411"
sodipodi:nodetypes="csc"
@@ -79199,26 +78069,26 @@
transform="matrix(1,0,0,-1,73,774)"
id="g32413">
<path
- style="fill:none;stroke:#8af01e;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 343,108.25 0,-4.25 4.25,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#8af01e;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 343,108.25 V 104 h 4.25"
id="path32416"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
</g>
<path
id="path32418"
- d="m 417,669 0,-1 0,-1.5 1,0 0,1.5 1.5,0 0,1 -1.5,0 -1,0 z"
- style="opacity:0.15;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 417,669 v -1 -1.5 h 1 v 1.5 h 1.5 v 1 H 418 Z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.15;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="csc"
id="path32420"
d="m 428,671.25 c -0.0541,-1.25729 -0.54273,-2.44429 -1.37516,-3.38809 -2.00926,-2.27808 -5.59675,-2.62117 -7.87484,-0.61191 L 417,669"
- style="color:#000000;fill:none;stroke:#8af01e;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#8af01e;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.4;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 415.5,670 0,-4.5 m 5,4 -2,0"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.4;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 415.5,670 v -4.5 m 5,4 h -2"
id="path32422"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
@@ -79226,7 +78096,7 @@
sodipodi:nodetypes="cscccc"
id="path32424"
d="m 428.5,671.21875 c -0.0591,-1.37274 -0.59591,-2.66246 -1.5,-3.6875 -1.09228,-1.23842 -2.62571,-1.96363 -4.1875,-2.09375 -1.55879,-0.12987 -3.16135,0.33951 -4.40625,1.4375 -3.3e-4,0.0104 -3.3e-4,0.0208 0,0.0312 L 417.5,667.75"
- style="opacity:0.4;color:#000000;fill:none;stroke:url(#linearGradient32434);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.4;fill:none;stroke:url(#linearGradient32434);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -79235,7 +78105,7 @@
transform="translate(0,2)"
id="ICON_KEY_HLT">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect31007"
width="16"
height="16"
@@ -79246,44 +78116,42 @@
id="g31009"
transform="translate(43.016148,98.00001)">
<g
- transform="translate(-3.542969e-5,0)"
+ transform="translate(-3.542969e-5)"
id="g31011"
style="display:inline">
<path
d="M 388.23389,129.74999 394.5,123.5 m 0.98389,1.99999 L 394,124 m 0.48389,2.49999 -1.4142,-1.41422"
- style="fill:none;stroke:#000000;stroke-width:3.00000095;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:3.00000095;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
id="path31013"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="csssc"
id="path31021"
- style="fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
d="m 388.04706,129.93681 c 0.81353,0.81353 0.81353,2.31284 0,3.12634 -0.81352,0.81354 -2.31283,0.81354 -3.12635,0 -0.81353,-0.8135 -0.81353,-2.31281 0,-3.12634 0.81352,-0.81352 2.31283,-0.81352 3.12635,0 z"
inkscape:connector-curvature="0" />
<path
id="path31015"
- style="fill:none;stroke:url(#linearGradient31019);stroke-width:1.50000191;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient31019);stroke-width:1.50000191;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:7.40000057;stroke-opacity:1"
d="M 388.73389,129.24999 394.5,123.5 m 0.98389,1.99999 -0.25,-0.25 m -0.75,1.25 -0.25,-0.25"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="czzzz"
d="m 388.01764,129.96629 c 0.79818,0.79819 0.79818,2.26923 0,3.06743 -0.7982,0.79819 -2.26925,0.79819 -3.06743,0 -0.79821,-0.7982 -0.79821,-2.26924 0,-3.06743 0.79818,-0.7982 2.26923,-0.7982 3.06743,0 z"
- style="fill:none;stroke:url(#linearGradient31025);stroke-width:1.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient31025);stroke-width:1.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
id="path31023"
inkscape:connector-curvature="0" />
</g>
- <path
+ <ellipse
transform="matrix(1.4399775,0,0,1.4399775,-171.50748,-44.947546)"
- d="m 388.20316,122.5078 a 0.70312506,0.71093756 0 0 1 -0.70313,0.71093 0.70312506,0.71093756 0 0 1 -0.70312,-0.71093 0.70312506,0.71093756 0 0 1 0.70312,-0.71094 0.70312506,0.71093756 0 0 1 0.70313,0.71094 z"
- sodipodi:ry="0.71093756"
- sodipodi:rx="0.70312506"
- sodipodi:cy="122.5078"
- sodipodi:cx="387.50003"
id="path31017"
style="opacity:0.3;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
- sodipodi:type="arc" />
+ cx="387.50003"
+ cy="122.5078"
+ rx="0.70312506"
+ ry="0.71093756" />
</g>
</g>
<g
@@ -79293,7 +78161,7 @@
transform="translate(-21,2)"
id="g31037">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect31039"
width="16"
height="16"
@@ -79304,57 +78172,55 @@
id="g31041"
transform="translate(43.016148,98.00001)">
<g
- transform="translate(-3.542969e-5,0)"
+ transform="translate(-3.542969e-5)"
id="g31043"
style="display:inline">
<path
d="M 388.23389,129.74999 394.5,123.5 m 0.98389,1.99999 L 394,124 m 0.48389,2.49999 -1.4142,-1.41422"
- style="fill:none;stroke:#000000;stroke-width:3.00000095;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:3.00000095;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
id="path31045"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="csssc"
id="path31047"
- style="fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
d="m 388.04706,129.93681 c 0.81353,0.81353 0.81353,2.31284 0,3.12634 -0.81352,0.81354 -2.31283,0.81354 -3.12635,0 -0.81353,-0.8135 -0.81353,-2.31281 0,-3.12634 0.81352,-0.81352 2.31283,-0.81352 3.12635,0 z"
inkscape:connector-curvature="0" />
<path
id="path31049"
- style="fill:none;stroke:url(#linearGradient31055);stroke-width:1.50000191;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient31055);stroke-width:1.50000191;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:7.40000057;stroke-opacity:1"
d="M 388.73389,129.24999 394.5,123.5 m 0.98389,1.99999 -0.25,-0.25 m -0.75,1.25 -0.25,-0.25"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="czzzz"
d="m 388.01764,129.96629 c 0.79818,0.79819 0.79818,2.26923 0,3.06743 -0.7982,0.79819 -2.26925,0.79819 -3.06743,0 -0.79821,-0.7982 -0.79821,-2.26924 0,-3.06743 0.79818,-0.7982 2.26923,-0.7982 3.06743,0 z"
- style="fill:none;stroke:url(#linearGradient31057);stroke-width:1.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient31057);stroke-width:1.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
id="path31051"
inkscape:connector-curvature="0" />
</g>
- <path
+ <ellipse
transform="matrix(1.4399775,0,0,1.4399775,-171.50748,-44.947546)"
- d="m 388.20316,122.5078 a 0.70312506,0.71093756 0 0 1 -0.70313,0.71093 0.70312506,0.71093756 0 0 1 -0.70312,-0.71093 0.70312506,0.71093756 0 0 1 0.70312,-0.71094 0.70312506,0.71093756 0 0 1 0.70313,0.71094 z"
- sodipodi:ry="0.71093756"
- sodipodi:rx="0.70312506"
- sodipodi:cy="122.5078"
- sodipodi:cx="387.50003"
id="path31053"
style="opacity:0.3;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
- sodipodi:type="arc" />
+ cx="387.50003"
+ cy="122.5078"
+ rx="0.70312506"
+ ry="0.71093756" />
</g>
</g>
<g
id="g31031"
- transform="matrix(0,1,-1,0,636.39781,-199.65488)">
+ transform="rotate(90,418.02634,218.37146)">
<path
sodipodi:nodetypes="cc"
id="path31033"
d="m 422.15488,229.89781 11,-11"
- style="opacity:0.5;fill:#000000;fill-rule:evenodd;stroke:#2b0000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
+ style="display:inline;opacity:0.5;fill:#000000;fill-rule:evenodd;stroke:#2b0000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#ff5555;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
+ style="display:inline;fill:none;stroke:#ff5555;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
d="m 422.15488,229.89781 11,-11"
id="path31035"
sodipodi:nodetypes="cc"
@@ -79370,7 +78236,7 @@
height="16"
width="16"
id="rect31089"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="translate(3.016145,122.00001)"
id="g31091"
@@ -79378,45 +78244,43 @@
<g
style="display:inline"
id="g31093"
- transform="translate(-3.542969e-5,0)">
+ transform="translate(-3.542969e-5)">
<path
sodipodi:nodetypes="cccccc"
id="path31095"
- style="fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
d="m 388.23389,129.74999 5.25,-5.25 m 0.98389,1.99999 -1.48389,-1.49999 m 0.48389,2.49999 -1.4142,-1.41422"
inkscape:connector-curvature="0" />
<path
d="m 388.04706,129.93681 c 0.81353,0.81353 0.81353,2.31284 0,3.12634 -0.81352,0.81354 -2.31283,0.81354 -3.12635,0 -0.81353,-0.8135 -0.81353,-2.31281 0,-3.12634 0.81352,-0.81352 2.31283,-0.81352 3.12635,0 z"
- style="fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
id="path31097"
sodipodi:nodetypes="csssc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccc"
d="m 388.73389,129.24999 4.75,-4.75 m 0.98389,1.99999 -0.25,-0.25 m -0.75,1.25 -0.25,-0.25"
- style="fill:none;stroke:url(#linearGradient31151);stroke-width:1.50000191;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient31151);stroke-width:1.50000191;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:7.40000057;stroke-opacity:1"
id="path31099"
inkscape:connector-curvature="0" />
<path
id="path31101"
- style="fill:none;stroke:url(#linearGradient31153);stroke-width:1.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient31153);stroke-width:1.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
d="m 388.01764,129.96629 c 0.79818,0.79819 0.79818,2.26923 0,3.06743 -0.7982,0.79819 -2.26925,0.79819 -3.06743,0 -0.79821,-0.7982 -0.79821,-2.26924 0,-3.06743 0.79818,-0.7982 2.26923,-0.7982 3.06743,0 z"
sodipodi:nodetypes="czzzz"
inkscape:connector-curvature="0" />
</g>
- <path
- sodipodi:type="arc"
+ <ellipse
style="opacity:0.05;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path31103"
- sodipodi:cx="387.50003"
- sodipodi:cy="122.5078"
- sodipodi:rx="0.70312506"
- sodipodi:ry="0.71093756"
- d="m 388.20316,122.5078 a 0.70312506,0.71093756 0 0 1 -0.70313,0.71093 0.70312506,0.71093756 0 0 1 -0.70312,-0.71093 0.70312506,0.71093756 0 0 1 0.70312,-0.71094 0.70312506,0.71093756 0 0 1 0.70313,0.71094 z"
- transform="matrix(1.4399775,0,0,1.4399775,-171.50748,-44.947546)" />
+ transform="matrix(1.4399775,0,0,1.4399775,-171.50748,-44.947546)"
+ cx="387.50003"
+ cy="122.5078"
+ rx="0.70312506"
+ ry="0.71093756" />
</g>
<path
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:0.3;color:#000000;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.4000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.4000001;marker:none;enable-background:new"
d="m 389.5,229.65625 c -0.73878,0 -1.48012,0.26136 -2.03125,0.8125 -1.10229,1.10226 -1.10228,2.96023 0,4.0625 0.41335,0.41335 0.92256,0.67791 1.46875,0.78125 0.008,-0.004 0.0231,0.004 0.0312,0 0.76739,-0.40457 1.35785,-1.08414 1.65625,-1.90625 -0.0307,0.0416 -0.0579,0.0891 -0.0937,0.125 -0.49413,0.49412 -1.5684,0.49411 -2.0625,0 -0.49414,-0.49413 -0.49413,-1.56838 0,-2.0625 0.24705,-0.24706 0.63541,-0.375 1.03125,-0.375 0.39584,0 0.78419,0.12794 1.03125,0.375 0.12353,0.12353 0.21949,0.29083 0.28125,0.46875 -0.0858,-0.9079 -0.52654,-1.71591 -1.1875,-2.28125 -0.0405,-0.002 -0.0845,0 -0.125,0 z m -2.125,1.9375 c 0.37998,0 0.65625,0.27629 0.65625,0.65625 0,0.37998 -0.27627,0.6875 -0.65625,0.6875 -0.37092,0 -0.64331,-0.29002 -0.65625,-0.65625 0,-0.009 -3.2e-4,-0.0223 0,-0.0312 0.0129,-0.3662 0.28534,-0.65625 0.65625,-0.65625 z"
transform="translate(0,21)"
id="path31190"
@@ -79427,42 +78291,40 @@
<g
style="display:inline"
id="g31073"
- transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,60.12783,410.54412)">
+ transform="rotate(-45,525.63451,132.69135)">
<g
id="g31075"
transform="translate(2.016112,1.00001)">
<path
d="m 388.60119,129.3396 4.94975,-4.94974 m 1.41421,1.41421 -1.23743,-1.23743 m 0.53033,1.94454 -1.23742,-1.23744"
- style="fill:none;stroke:#100d04;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:none;stroke:#100d04;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
id="path31077"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="csssc"
id="path31113"
- style="fill:none;stroke:#100d04;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:none;stroke:#100d04;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
d="m 387.93695,130.00385 c 0.8043,0.80431 0.8043,2.10984 0,2.91414 -0.8043,0.80431 -2.10984,0.80431 -2.91414,0 -0.8043,-0.8043 -0.8043,-2.10983 0,-2.91414 0.8043,-0.80428 2.10984,-0.80428 2.91414,0 z"
inkscape:connector-curvature="0" />
<path
id="path31079"
- style="fill:none;stroke:url(#linearGradient31155);stroke-width:1.50000191;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient31155);stroke-width:1.50000191;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:7.40000057;stroke-opacity:1"
d="m 388.60119,129.3396 4.94975,-4.94974 m 1.41421,1.41421 -0.25,-0.25 m -0.4571,0.95711 -0.25,-0.25"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
- <path
- sodipodi:type="arc"
+ <ellipse
style="opacity:0.05;fill:#181406;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path31081"
- sodipodi:cx="387.50003"
- sodipodi:cy="122.5078"
- sodipodi:rx="0.70312506"
- sodipodi:ry="0.71093756"
- d="m 388.20316,122.5078 a 0.70312506,0.71093756 0 0 1 -0.70313,0.71093 0.70312506,0.71093756 0 0 1 -0.70312,-0.71093 0.70312506,0.71093756 0 0 1 0.70312,-0.71094 0.70312506,0.71093756 0 0 1 0.70313,0.71094 z"
- transform="matrix(1.7719122,0,0,1.7719122,-300.13217,-85.612134)" />
+ transform="matrix(1.7719122,0,0,1.7719122,-300.13217,-85.612134)"
+ cx="387.50003"
+ cy="122.5078"
+ rx="0.70312506"
+ ry="0.71093756" />
<path
sodipodi:nodetypes="czzzz"
d="m 387.96588,129.97488 c 0.82029,0.8203 0.82029,2.15177 0,2.97206 -0.8203,0.82029 -2.15179,0.82029 -2.97206,0 -0.8203,-0.82029 -0.8203,-2.15176 0,-2.97206 0.82027,-0.82029 2.15176,-0.82029 2.97206,0 z"
- style="fill:none;stroke:url(#linearGradient31157);stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient31157);stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
id="path31109"
inkscape:connector-curvature="0" />
</g>
@@ -79479,11 +78341,11 @@
height="16"
width="16"
id="rect40445-4-2"
- style="opacity:0.01000001;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="ccccc"
id="path40447-5-3"
- d="m -43.5,-116.75 12.5,-4.75 0.75,2 -13.25,5 0,-2.25 z"
+ d="m -43.5,-116.75 12.5,-4.75 0.75,2 -13.25,5 z"
style="fill:#1a1a1a;stroke:#000000;stroke-width:0.89999998;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
inkscape:connector-curvature="0" />
<rect
@@ -79492,9 +78354,9 @@
height="7.9999971"
width="12.999988"
id="rect40449-5-9"
- style="fill:url(#linearGradient16887);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient16887);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect40451-1-1"
width="1"
height="1.5"
@@ -79506,9 +78368,9 @@
height="1.5"
width="1"
id="rect40453-7-7"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect40455-1-9"
width="1"
height="1.5"
@@ -79520,16 +78382,16 @@
height="1.5"
width="1"
id="rect40457-1-4"
- style="fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect40459-5-8"
width="1"
height="1.5"
x="-40"
y="-117.87802" />
<rect
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect40461-2-3"
width="13.999996"
height="2.0000052"
@@ -79541,11 +78403,11 @@
height="1.7500292"
width="12.154154"
id="rect40490-7-9"
- style="opacity:0.8;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.55400002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.8;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.55400002;marker:none;enable-background:accumulate" />
<path
id="rect40463-6-4"
- d="m -40,-114 0,1.25 2,0 0,-1.25 -2,0 z m 4,0 0,1.25 2,0 0,-1.25 -2,0 z m 4,0 0,1.25 2,0 0,-1.25 -2,0 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -40,-114 v 1.25 h 2 V -114 Z m 4,0 v 1.25 h 2 V -114 Z m 4,0 v 1.25 h 2 V -114 Z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
style="opacity:0.3;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round"
@@ -79556,36 +78418,36 @@
<path
sodipodi:nodetypes="ccccc"
style="fill:none;stroke:url(#linearGradient16889);stroke-width:1px;stroke-linejoin:round"
- d="m -41.5,-107.5 0,-6 11,0 0,6 -11,0 z"
+ d="m -41.5,-107.5 v -6 h 11 v 6 z"
id="path40476-4-2"
inkscape:connector-curvature="0" />
<path
- style="fill:#87aade;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -43,-116.75 1,0 1,1.75 0,2 -2,0 0,-3.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#87aade;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
+ d="m -43,-116.75 h 1 l 1,1.75 v 2 h -2 z"
id="path40478-2-5"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
- style="fill:#002255;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -41,-115 0,2 -2,0 0,0.75 2.75,0 0,-3 -1.25,-2.25 -1.5,0.25 0,0.5 1,0 1,1.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#002255;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
+ d="m -41,-115 v 2 h -2 v 0.75 h 2.75 v -3 l -1.25,-2.25 -1.5,0.25 v 0.5 h 1 z"
id="path40480-3-8"
sodipodi:nodetypes="ccccccccccc"
inkscape:connector-curvature="0" />
<path
id="path40558-2-3"
- d="m -41.5,-107.38206 0,-4.66445"
+ d="m -41.5,-107.38206 v -4.66445"
style="opacity:0.2;fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect40553-2-9"
width="1"
height="1.5"
x="-33"
y="-120.75" />
<rect
- style="fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect40556-1-3"
width="1"
height="1.25"
@@ -79594,15 +78456,15 @@
<path
sodipodi:nodetypes="cc"
style="opacity:0.5;fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round"
- d="m -42.4975,-113.46527 0,-3.0928"
+ d="m -42.4975,-113.46527 v -3.0928"
id="path40560-6-1"
inkscape:connector-curvature="0" />
<g
- transform="translate(1,0)"
+ transform="translate(1)"
style="opacity:0.35"
id="g40590-8-8">
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.55400002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.55400002;marker:none;enable-background:accumulate"
id="rect40586-5-0"
width="5"
height="0.9617852"
@@ -79614,14 +78476,14 @@
height="3"
width="1.0280838"
id="rect40588-7-3"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.55400002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.55400002;marker:none;enable-background:accumulate" />
</g>
</g>
<g
style="display:inline;enable-background:new"
id="ICON_LINK_BLEND">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect26258-7"
width="16"
height="16"
@@ -79635,75 +78497,61 @@
<path
sodipodi:nodetypes="cc"
d="M -15.594023,497.94339 -20.25,493.5"
- style="fill:none;stroke:#28170b;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.34386529;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#28170b;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.34386528;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path26264-6"
inkscape:connector-curvature="0" />
- <path
+ <ellipse
transform="matrix(3.625,0,0,3.1690202,-67.8125,318.31703)"
- d="m 14.5,57.5 a 1,1.0000004 0 0 1 -1,1 1,1.0000004 0 0 1 -1,-1 1,1.0000004 0 0 1 1,-1 1,1.0000004 0 0 1 1,1 z"
- sodipodi:ry="1.0000004"
- sodipodi:rx="1"
- sodipodi:cy="57.5"
- sodipodi:cx="13.5"
id="path26266-7"
- style="fill:none;stroke:#28170b;stroke-width:1.32768786;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.10397505;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#28170b;stroke-width:1.32768786;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.10397505;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="13.5"
+ cy="57.5"
+ rx="1"
+ ry="1.0000004" />
<path
id="path26268-5"
- style="fill:none;stroke:#28170b;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.34386529;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -25.5,496.5 7.5,0 m -9.5,6 6,-6"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#28170b;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.34386528;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -25.5,496.5 h 7.5 m -9.5,6 6,-6"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
</g>
- <path
+ <circle
transform="matrix(3.5999897,0,0,3.1249932,-67.499871,320.6879)"
- d="m 14.5,57.5 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- sodipodi:ry="1"
- sodipodi:rx="1"
- sodipodi:cy="57.5"
- sodipodi:cx="13.5"
id="path26270-5"
- style="fill:none;stroke:url(#linearGradient26282-0);stroke-width:0.92424375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.10397505;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient26282-0);stroke-width:0.92424375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.10397505;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="13.5"
+ cy="57.5"
+ r="1" />
<path
sodipodi:nodetypes="cccccc"
d="m -25.5,496.5 7.984366,-0.0226 M -27.5,502.5 l 6,-6 m 5.996227,1.44466 L -20.25,493.5"
- style="fill:none;stroke:url(#linearGradient26284-9);stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.34386529;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient26284-9);stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.34386528;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path26272-4"
inkscape:connector-curvature="0" />
- <path
- sodipodi:type="arc"
+ <circle
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path26274-0"
- sodipodi:cx="13.5"
- sodipodi:cy="57.5"
- sodipodi:rx="1"
- sodipodi:ry="1"
- d="m 14.5,57.5 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- transform="matrix(3.25,0,0,3.25,-62.875,313.125)" />
- <path
+ transform="matrix(3.25,0,0,3.25,-62.875,313.125)"
+ cx="13.5"
+ cy="57.5"
+ r="1" />
+ <circle
transform="matrix(2,0,0,2,-46,385)"
- d="m 14.5,57.5 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- sodipodi:ry="1"
- sodipodi:rx="1"
- sodipodi:cy="57.5"
- sodipodi:cx="13.5"
id="path26276-1"
style="fill:#2c5aa0;fill-opacity:1;fill-rule:nonzero;stroke:none"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient26286-4);stroke-width:0.22536004;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.10397505;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ cx="13.5"
+ cy="57.5"
+ r="1" />
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient26286-4);stroke-width:0.22536004;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.10397505;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path26278-1"
- sodipodi:cx="13.5"
- sodipodi:cy="57.5"
- sodipodi:rx="1"
- sodipodi:ry="1"
- d="m 14.5,57.5 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- transform="matrix(4.7519907,0,0,4.1435313,-83.051884,262.12196)" />
+ transform="matrix(4.7519907,0,0,4.1435313,-83.051884,262.12196)"
+ cx="13.5"
+ cy="57.5"
+ r="1" />
<path
sodipodi:nodetypes="cccccc"
- d="m -20.515634,493.80534 c -0.07079,-0.45769 0.0843,-0.63855 0.5,-0.5 m -7.704183,9.08552 4.25,-4.25 m -2,-2 6.25,0"
+ d="m -20.515634,493.80534 c -0.07079,-0.45769 0.0843,-0.63855 0.5,-0.5 m -7.704183,9.08552 4.25,-4.25 m -2,-2 h 6.25"
style="fill:none;stroke:url(#linearGradient26288-9);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
id="path26280-5"
inkscape:connector-curvature="0" />
@@ -79714,43 +78562,43 @@
<path
inkscape:connector-curvature="0"
id="path24939-9"
- d="m 430.5,525.5329 0,2 1,1 2,0 2,-2.0329 0,-2 -1,-1 -2,0 -2,2.0329 z"
- style="fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 430.5,525.5329 v 2 l 1,1 h 2 l 2,-2.0329 v -2 l -1,-1 h -2 z"
+ style="fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="ccccccccc" />
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 433.5,522.4671 0,1.75 1,1.25 2,0 2,-1.9671 0,-2 -1,-1 -2,0 -2,1.9671 z"
+ style="fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 433.5,522.4671 v 1.75 l 1,1.25 h 2 l 2,-1.9671 v -2 l -1,-1 h -2 z"
id="path24941-0"
sodipodi:nodetypes="ccccccccc" />
<path
inkscape:connector-curvature="0"
id="path24945-6"
- d="m 433.5,522.4671 0,2.0329 1,0.9671 2,0 2,-1.9671 0,-2 -1,-1 -2,0 -2,1.9671 z"
- style="fill:none;stroke:url(#linearGradient55785);stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 433.5,522.4671 V 524.5 l 1,0.9671 h 2 l 2,-1.9671 v -2 l -1,-1 h -2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient55785);stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccccc" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
- style="fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 434.5,523.5 -2,0"
+ style="fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 434.5,523.5 h -2"
id="path24954-1" />
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:url(#linearGradient55787);stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 430.5,525.5 0,2 1,1 2,0 2,-2 0,-2 -1,-1 -2,0 -2,2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient55787);stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 430.5,525.5 v 2 l 1,1 h 2 l 2,-2 v -2 l -1,-1 h -2 z"
id="path24956-1"
sodipodi:nodetypes="ccccccccc" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
id="path24958-1"
- d="m 434.08489,525.47125 2.25,0"
- style="fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ d="m 434.08489,525.47125 h 2.25"
+ style="fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
- style="fill:none;stroke:#ffffff;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#ffffff;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 434.33489,525.47125 436.5,525.4671"
id="path24960-1" />
</g>
@@ -79759,7 +78607,7 @@
style="display:inline;enable-background:new"
id="ICON_APPEND_BLEND">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect26258-7-4"
width="16"
height="16"
@@ -79773,81 +78621,67 @@
<path
sodipodi:nodetypes="cc"
d="M -15.594023,497.94339 -20.25,493.5"
- style="fill:none;stroke:#28170b;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.34386529;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#28170b;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.34386528;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path26264-6-7"
inkscape:connector-curvature="0" />
- <path
+ <ellipse
transform="matrix(3.625,0,0,3.1690202,-67.8125,318.31703)"
- d="m 14.5,57.5 a 1,1.0000004 0 0 1 -1,1 1,1.0000004 0 0 1 -1,-1 1,1.0000004 0 0 1 1,-1 1,1.0000004 0 0 1 1,1 z"
- sodipodi:ry="1.0000004"
- sodipodi:rx="1"
- sodipodi:cy="57.5"
- sodipodi:cx="13.5"
id="path26266-7-7"
- style="fill:none;stroke:#28170b;stroke-width:1.32768786;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.10397505;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#28170b;stroke-width:1.32768786;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.10397505;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="13.5"
+ cy="57.5"
+ rx="1"
+ ry="1.0000004" />
<path
id="path26268-5-3"
- style="fill:none;stroke:#28170b;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.34386529;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -25.5,496.5 7.5,0 m -9.5,6 6,-6"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#28170b;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.34386528;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -25.5,496.5 h 7.5 m -9.5,6 6,-6"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
</g>
- <path
+ <circle
transform="matrix(3.5999897,0,0,3.1249932,-67.499871,320.6879)"
- d="m 14.5,57.5 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- sodipodi:ry="1"
- sodipodi:rx="1"
- sodipodi:cy="57.5"
- sodipodi:cx="13.5"
id="path26270-5-9"
- style="fill:none;stroke:url(#linearGradient26282-0-8);stroke-width:0.92424375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.10397505;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient26282-0-8);stroke-width:0.92424375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.10397505;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="13.5"
+ cy="57.5"
+ r="1" />
<path
sodipodi:nodetypes="cccccc"
d="m -25.5,496.5 7.984366,-0.0226 M -27.5,502.5 l 6,-6 m 5.996227,1.44466 L -20.25,493.5"
- style="fill:none;stroke:url(#linearGradient26284-9-6);stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.34386529;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient26284-9-6);stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.34386528;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path26272-4-9"
inkscape:connector-curvature="0" />
- <path
- sodipodi:type="arc"
+ <circle
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path26274-0-6"
- sodipodi:cx="13.5"
- sodipodi:cy="57.5"
- sodipodi:rx="1"
- sodipodi:ry="1"
- d="m 14.5,57.5 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- transform="matrix(3.25,0,0,3.25,-62.875,313.125)" />
- <path
+ transform="matrix(3.25,0,0,3.25,-62.875,313.125)"
+ cx="13.5"
+ cy="57.5"
+ r="1" />
+ <circle
transform="matrix(2,0,0,2,-46,385)"
- d="m 14.5,57.5 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- sodipodi:ry="1"
- sodipodi:rx="1"
- sodipodi:cy="57.5"
- sodipodi:cx="13.5"
id="path26276-1-7"
style="fill:#2c5aa0;fill-opacity:1;fill-rule:nonzero;stroke:none"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient26286-4-5);stroke-width:0.22536004;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.10397505;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ cx="13.5"
+ cy="57.5"
+ r="1" />
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient26286-4-5);stroke-width:0.22536004;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.10397505;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path26278-1-5"
- sodipodi:cx="13.5"
- sodipodi:cy="57.5"
- sodipodi:rx="1"
- sodipodi:ry="1"
- d="m 14.5,57.5 a 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 1,1 0 0 1 1,1 z"
- transform="matrix(4.7519907,0,0,4.1435313,-83.051884,262.12196)" />
+ transform="matrix(4.7519907,0,0,4.1435313,-83.051884,262.12196)"
+ cx="13.5"
+ cy="57.5"
+ r="1" />
<path
sodipodi:nodetypes="cccccc"
- d="m -20.515634,493.80534 c -0.07079,-0.45769 0.0843,-0.63855 0.5,-0.5 m -7.704183,9.08552 4.25,-4.25 m -2,-2 6.25,0"
+ d="m -20.515634,493.80534 c -0.07079,-0.45769 0.0843,-0.63855 0.5,-0.5 m -7.704183,9.08552 4.25,-4.25 m -2,-2 h 6.25"
style="fill:none;stroke:url(#linearGradient26288-9-5);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
id="path26280-5-4"
inkscape:connector-curvature="0" />
</g>
<g
- transform="matrix(-1,0,0,-1,110.9,273.1)"
+ transform="rotate(180,55.45,136.55)"
id="g39333-1"
style="display:inline;enable-background:new">
<g
@@ -79856,25 +78690,25 @@
style="display:inline;enable-background:new">
<g
id="g39118-3-3"
- style="fill:#ffffff;display:inline;enable-background:new"
+ style="display:inline;fill:#ffffff;enable-background:new"
transform="translate(-1.00079,-19)" />
</g>
<g
id="g38966-7"
transform="matrix(0,-1,-1,0,212.75,247.25)">
<g
- transform="matrix(-1,0,0,-1,215.25,222.75)"
+ transform="rotate(180,107.625,111.375)"
id="g38968-4">
<path
inkscape:connector-curvature="0"
id="path38970-5"
- d="m 174.5,38.5 0,5 5,0"
- style="fill:none;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
+ d="m 174.5,38.5 v 5 h 5"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:2.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
sodipodi:nodetypes="ccc" />
<path
inkscape:connector-curvature="0"
d="m 175.5,42.5 5,-5"
- style="fill:none;stroke:#000000;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path38972-1"
sodipodi:nodetypes="cz" />
</g>
@@ -79886,18 +78720,18 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(-1,0,0,-1,272.1613,155.99999)"
+ transform="rotate(180,136.08065,77.999995)"
style="display:inline">
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:#f2f2f2;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#f2f2f2;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path38984-8"
sodipodi:nodetypes="cz"
d="" />
<path
inkscape:connector-curvature="0"
d=""
- style="opacity:0.85;fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.85;fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path38987-2"
sodipodi:nodetypes="cz" />
</g>
@@ -79905,8 +78739,8 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
id="path38994-9"
- d="m 188,51 0,6 -1,0 0,-5 -5,0 0,-1 6,0 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m 188,51 v 6 h -1 v -5 h -5 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;marker:none;enable-background:accumulate" />
<g
transform="matrix(-1,0,0,1,-29,-335)"
style="opacity:0.2"
@@ -79915,8 +78749,8 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
id="path38998-6"
- d="m -216,387 0,2 1,0 0,-1 1,0 0,-1 -2,0 z"
- style="fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m -216,387 v 2 h 1 v -1 h 1 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
</g>
</g>
<g
@@ -79924,18 +78758,18 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(-1,0,0,-1,118.4113,290.74999)"
+ transform="rotate(180,59.20565,145.375)"
style="display:inline">
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:#f2f2f2;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#f2f2f2;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path39015-9"
sodipodi:nodetypes="cz"
d="" />
<path
inkscape:connector-curvature="0"
d="m 78.1613,110.99999 5.5,-5.5"
- style="fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path39017-0"
sodipodi:nodetypes="cz" />
</g>
@@ -79945,8 +78779,8 @@
transform="matrix(-1,0,0,1,-175.75,-207.25)">
<path
inkscape:connector-curvature="0"
- style="opacity:0.7;fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -216,387 0,2 1,0 0,-1 1,0 0,-1 -2,0 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
+ d="m -216,387 v 2 h 1 v -1 h 1 v -1 z"
id="path39022-9"
sodipodi:nodetypes="ccccccc" />
</g>
@@ -79962,7 +78796,7 @@
height="16"
width="16"
id="rect42947-7"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="translate(-301.04935,-550.02079)"
id="g42949-4">
@@ -79970,8 +78804,8 @@
style="opacity:0.85"
id="g42951-6">
<path
- style="fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="M 341.5161,616.38229 340.5,617.5 l -10.73389,-10e-6 -1.25,-1.25 L 328.5,605.5 l 13,0 0.0161,10.88229 z"
+ style="fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 341.5161,616.38229 340.5,617.5 l -10.73389,-10e-6 -1.25,-1.25 L 328.5,605.5 h 13 z"
id="path42953-7"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -79983,12 +78817,12 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path42955-8"
- d="m 340,616 -8.25,0 0,-1 8.25,0 0,1 z"
- style="fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 340,616 h -8.25 v -1 H 340 Z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;enable-background:accumulate"
id="rect38927-6"
width="11.970581"
height="8.0306396"
@@ -80000,14 +78834,14 @@
height="8.0306396"
width="11.970581"
id="rect45307-5"
- style="opacity:0.3;fill:url(#radialGradient45309-0);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:url(#radialGradient45309-0);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;enable-background:accumulate" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path42957-3"
- d="m 340.48389,606.50001 c -3.66204,-3e-5 -7.70403,2e-5 -10.98389,-10e-6 l 0.002,10.00007 10.99778,-7e-5 -0.0161,-9.99999 2.1e-4,0 z"
- style="fill:none;stroke:url(#linearGradient42965-7-9);stroke-width:0.99999923px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 340.48389,606.50001 c -3.66204,-3e-5 -7.70403,2e-5 -10.98389,-10e-6 l 0.002,10.00007 10.99778,-7e-5 -0.0161,-9.99999 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient42965-7-9);stroke-width:0.99999923px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<rect
@@ -80019,11 +78853,11 @@
height="1.0000043"
width="1"
id="rect42959-9"
- style="fill:#d40000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#d40000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="ccccc"
- style="opacity:0.35;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 340.5,614 -11,0 0,-1 11,0 0,1 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.35;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;enable-background:accumulate"
+ d="m 340.5,614 h -11 v -1 h 11 z"
id="path38929-0"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -80031,16 +78865,16 @@
inkscape:connector-curvature="0" />
</g>
<path
- style="opacity:0.25;fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;filter:url(#filter24186-3-2-5)"
- d="m 337.7,606.7 0,2.75 2,1.5 0,2.5 -0.25,0.25 -1.75,0 0,-2 -2,0 0,2 -1.75,0 -0.25,-0.25 0,-2.5 2,-1.5 0,-2.75 2,0 z"
+ style="opacity:0.25;fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter24186-3-2-5)"
+ d="m 337.7,606.7 v 2.75 l 2,1.5 v 2.5 l -0.25,0.25 h -1.75 v -2 h -2 v 2 h -1.75 l -0.25,-0.25 v -2.5 l 2,-1.5 v -2.75 z"
id="path42961-6"
sodipodi:nodetypes="ccccccccccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccccccccccccccccccc"
id="path42963-7"
- d="m 333.75,602.5 1.75,0 c 0,0 0,2 0,2 l 2,0 0,-2 1.75,0 0.25,0.25 0,2.5 -2,1.5 0,2.5 2,1.5 0,2.5 -0.25,0.25 -1.75,0 0,-2 -2,0 0,2 -1.75,0 -0.25,-0.25 0,-2.5 2,-1.5 0,-2.5 -2,-1.5 0,-2.5 0.25,-0.25 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:url(#linearGradient42967-6-4);stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 333.75,602.5 h 1.75 c 0,0 0,2 0,2 h 2 v -2 h 1.75 l 0.25,0.25 v 2.5 l -2,1.5 v 2.5 l 2,1.5 v 2.5 l -0.25,0.25 h -1.75 v -2 h -2 v 2 h -1.75 l -0.25,-0.25 v -2.5 l 2,-1.5 v -2.5 l -2,-1.5 v -2.5 z"
+ style="fill:#ffffff;fill-rule:evenodd;stroke:url(#linearGradient42967-6-4);stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
<g
@@ -80050,20 +78884,20 @@
<path
inkscape:connector-curvature="0"
id="path45290-5"
- style="opacity:0.25;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -120.49163,-67.5 c -3.75159,0.954856 -7.20393,6.261452 -9,9 l -3.5,-3.5 -0.25,0.5 3.99163,4 0.5,0 c 1.0421,-2.617689 4.16191,-8.585412 8.25837,-10 l 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -120.49163,-67.5 c -3.75159,0.954856 -7.20393,6.261452 -9,9 l -3.5,-3.5 -0.25,0.5 3.99163,4 h 0.5 c 1.0421,-2.617689 4.16191,-8.585412 8.25837,-10 z"
sodipodi:nodetypes="cccccccc" />
<path
inkscape:connector-curvature="0"
id="path45302-1"
- style="fill:none;stroke:#0b1e00;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0b1e00;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m -120.5,-68.5 c -3.15098,1.124146 -6.99163,5 -8.99163,9 l -3.5,-3.5 -0.5,0.5 4,4 c 1.42501,-3.330356 5.5,-8.75 8.99163,-10"
sodipodi:nodetypes="cccccc" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc"
d="m -120.5,-68.5 c -3.15098,1.124146 -6.99163,5 -8.99163,9 l -3.5,-3.5 -0.5,0.5 4,4 c 1.42501,-3.330356 5.5,-8.75 8.99163,-10"
- style="fill:none;stroke:#9af23d;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#9af23d;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path45294-9" />
</g>
</g>
@@ -80071,8 +78905,8 @@
style="display:inline;enable-background:new"
id="ICON_RECOVER_AUTO">
<rect
- transform="scale(-1,-1)"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ transform="scale(-1)"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect45203-3"
width="16"
height="16"
@@ -80084,36 +78918,36 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(-1,0,0,-1,123.0839,85.1)">
+ transform="rotate(180,61.54195,42.55)">
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccsccccccccsccccc"
- d="m 105.48388,31.25 6.25,-6 c 0.49692,0.284098 0.2225,0.232267 0.76612,0.25 2.20206,0.07183 4,-1.792 4,-4 l -1,-1 -2.5,2.5 -0.5,-0.5 -1,-1 -0.5,-0.5 2.5,-2.5 -1,-1 c -2.208,0 -4,1.792 -4,4 0,0.58349 0.009,0.250006 0.23388,0.75 l -6.25,6 0,2 1,1 2,0 z"
+ d="m 105.48388,31.25 6.25,-6 c 0.49692,0.284098 0.2225,0.232267 0.76612,0.25 2.20206,0.07183 4,-1.792 4,-4 l -1,-1 -2.5,2.5 -0.5,-0.5 -1,-1 -0.5,-0.5 2.5,-2.5 -1,-1 c -2.208,0 -4,1.792 -4,4 0,0.58349 0.009,0.250006 0.23388,0.75 l -6.25,6 v 2 l 1,1 z"
style="fill:url(#linearGradient55656);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path45207-7" />
<path
inkscape:connector-curvature="0"
id="path45209-9"
- style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- d="m 115.5,21.5 -2.25,2.25 m -1,-5.5 c -1.75,0 -4,2.25 -2.5,5 l -1.26612,0.25 -5,5 0,1.75"
+ style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 115.5,21.5 -2.25,2.25 m -1,-5.5 c -1.75,0 -4,2.25 -2.5,5 l -1.26612,0.25 -5,5 v 1.75"
sodipodi:nodetypes="ccccccc" />
<path
inkscape:connector-curvature="0"
id="path45211-9"
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- d="m 105.48388,31.5 5.5,-5.5 0.25,-0.5 1.26612,0 c 2.73388,0 4,-1.792 4,-4 l -1,-1 -2.5,2.5 -0.5,-0.5 -1,-1 -0.5,-0.5 2.5,-2.5 -1,-1 c -2.208,0 -3.96454,1.25 -4,4 l -0.0161,1.25 -0.5,0.25 -5.5,5.5 0,2 1,1 2,0 -2e-5,0 z"
+ style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 105.48388,31.5 5.5,-5.5 0.25,-0.5 H 112.5 c 2.73388,0 4,-1.792 4,-4 l -1,-1 -2.5,2.5 -0.5,-0.5 -1,-1 -0.5,-0.5 2.5,-2.5 -1,-1 c -2.208,0 -3.96454,1.25 -4,4 l -0.0161,1.25 -0.5,0.25 -5.5,5.5 v 2 l 1,1 h 2 z"
sodipodi:nodetypes="cccsccccccccsccccccc" />
<path
inkscape:connector-curvature="0"
id="path45214-0"
- style="fill:none;stroke:#d7d7d7;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:#d7d7d7;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 109.98388,25 -5,5"
sodipodi:nodetypes="cc" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
d="m 109.48388,24.5 -4,4"
- style="fill:none;stroke:#646464;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:#646464;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path45216-1" />
<rect
y="29"
@@ -80121,7 +78955,7 @@
height="1"
width="1"
id="rect45218-5"
- style="fill:#162d50;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#162d50;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;enable-background:accumulate" />
</g>
<g
transform="translate(-409.04935,-611.97079)"
@@ -80131,8 +78965,8 @@
transform="matrix(1,0,0,-1,73,774)">
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:#0b1e00;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 343,108.25 0,-4.25 4.25,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0b1e00;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 343,108.25 V 104 h 4.25"
id="path32403-1"
sodipodi:nodetypes="ccc" />
</g>
@@ -80141,7 +78975,7 @@
sodipodi:nodetypes="csc"
id="path32411-7"
d="m 428,671.25 c -0.0541,-1.25729 -0.54273,-2.44429 -1.37516,-3.38809 -2.00926,-2.27808 -5.59675,-2.62117 -7.87484,-0.61191 L 417,669"
- style="color:#000000;fill:none;stroke:#0b1e00;stroke-width:3.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0b1e00;stroke-width:3.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<g
id="g32413-8"
transform="matrix(1,0,0,-1,73,774)">
@@ -80149,17 +78983,17 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc"
id="path32416-5"
- d="m 343,108.25 0,-4.25 4.25,0"
- style="fill:none;stroke:#8af01e;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="M 343,108.25 V 104 h 4.25"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#8af01e;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
</g>
<path
inkscape:connector-curvature="0"
- style="opacity:0.15;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 417,669 0,-1 0,-1.5 1,0 0,1.5 1.5,0 0,1 -1.5,0 -1,0 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.15;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
+ d="m 417,669 v -1 -1.5 h 1 v 1.5 h 1.5 v 1 H 418 Z"
id="path32418-2" />
<path
inkscape:connector-curvature="0"
- style="color:#000000;fill:none;stroke:#8af01e;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#8af01e;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 428,671.25 c -0.0541,-1.25729 -0.54273,-2.44429 -1.37516,-3.38809 -2.00926,-2.27808 -5.59675,-2.62117 -7.87484,-0.61191 L 417,669"
id="path32420-2"
sodipodi:nodetypes="csc" />
@@ -80167,11 +79001,11 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc"
id="path32422-4"
- d="m 415.5,670 0,-4.5 m 5,4 -2,0"
- style="opacity:0.4;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m 415.5,670 v -4.5 m 5,4 h -2"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.4;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
- style="opacity:0.4;color:#000000;fill:none;stroke:url(#linearGradient55624);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.4;fill:none;stroke:url(#linearGradient55624);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 428.5,671.21875 c -0.0591,-1.37274 -0.59591,-2.66246 -1.5,-3.6875 -1.09228,-1.23842 -2.62571,-1.96363 -4.1875,-2.09375 -1.55879,-0.12987 -3.16135,0.33951 -4.40625,1.4375 -3.3e-4,0.0104 -3.3e-4,0.0208 0,0.0312 L 417.5,667.75"
id="path32424-5"
sodipodi:nodetypes="cscccc" />
@@ -80186,7 +79020,7 @@
height="16"
width="16"
id="rect42954-1"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="translate(-49.94936,-39.370919)"
id="g42956-6">
@@ -80196,8 +79030,8 @@
<path
inkscape:connector-curvature="0"
id="path14490"
- d="m 328.5,-107.25 -4.5,1.75 0,6.5 4.5,2.25 4.5,-2.25 0,-6.5 -4.5,-1.75 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#281500;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 328.5,-107.25 -4.5,1.75 v 6.5 l 4.5,2.25 4.5,-2.25 v -6.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#281500;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccc" />
<g
id="g42962-0"
@@ -80205,8 +79039,8 @@
<path
sodipodi:nodetypes="ccccc"
id="path42964-9"
- d="m 154,80 0,-6.5 -4.5,-1.75 0,10.5 L 154,80 z"
- style="fill:#915515;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 154,80 v -6.5 l -4.5,-1.75 v 10.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#915515;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -80217,20 +79051,20 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
id="path42966-1"
- d="m 324,-99.00012 0,-6.49988 4.5,-1.75 0.5,0.25 0,10 -0.5,0.25 -4.5,-2.25012 z"
- style="fill:#efa351;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 324,-99.00012 V -105.5 l 4.5,-1.75 0.5,0.25 v 10 l -0.5,0.25 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#efa351;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path42968-5"
- d="m 332.5,-105.5 0,6.25 -4,2 -4,-2.00012 0,-6.24988"
+ d="m 332.5,-105.5 v 6.25 l -4,2 -4,-2.00012 V -105.5"
style="fill:none;stroke:url(#linearGradient55950);stroke-width:0.99999982px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
id="path42970-1"
- d="m 324,-105.5 4.5,-1.75 4.5,1.75 -4.5,2 -4.5,-2 z"
- style="fill:#f5ca9b;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 324,-105.5 4.5,-1.75 4.5,1.75 -4.5,2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#f5ca9b;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -80249,9 +79083,9 @@
height="6.7500019"
width="1"
id="rect42974-8"
- style="fill:url(#linearGradient55954);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient55954);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate" />
<rect
- style="opacity:0.09599998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.09599998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
id="rect42976-8"
width="1"
height="6.7500019"
@@ -80265,51 +79099,42 @@
transform="matrix(0.7882544,0,0,0.7883038,-8.4020402,-113.3734)"
id="g42978-1"
style="display:inline;enable-background:new">
- <path
+ <circle
transform="matrix(0.6425292,0,0,0.642531,44.523834,146.81699)"
- sodipodi:type="arc"
- style="fill:#f2b676;fill-opacity:1;fill-rule:nonzero;stroke:#281500;stroke-width:1.97436094;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:#f2b676;fill-opacity:1;fill-rule:nonzero;stroke:#281500;stroke-width:1.97436094;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path42980-5"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path42984-5"
- style="fill:none;stroke:url(#linearGradient55956);stroke-width:2.54167628;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.4991181,0,0,0.4991107,63.460522,163.7471)" />
- <path
+ style="fill:none;stroke:url(#linearGradient55956);stroke-width:2.54167628;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.4991181,0,0,0.4991107,63.460522,163.7471)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(-0.5858806,-0.06590218,0.06677852,-0.5812167,198.80048,299.96262)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path42982-9"
- style="opacity:0.8;fill:url(#linearGradient55958);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- sodipodi:type="arc" />
+ style="display:inline;opacity:0.8;fill:url(#linearGradient55958);fill-opacity:1;fill-rule:nonzero;stroke:none"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
transform="matrix(0.875,0,0,0.875,-151.54375,-26.76875)"
id="g43952-8">
<g
- transform="matrix(0,-1,1,0,183.99437,429)"
+ transform="rotate(-90,306.49718,122.50281)"
id="g43483-9">
<g
transform="translate(0,21)"
@@ -80317,27 +79142,27 @@
<path
sodipodi:nodetypes="cc"
id="path43490-2"
- d="M 327,86.255631 327,76"
- style="fill:none;stroke:#000000;stroke-width:3.88571429;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 327,86.255631 V 76"
+ style="fill:none;stroke:#000000;stroke-width:3.88571429;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path43492-1"
d="M 331.25,79.25 327,75.005631 322.75,79.25"
- style="fill:none;stroke:#000000;stroke-width:4.11428547;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:4.11428547;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
<g
transform="translate(0,21)"
id="g43494-2">
<path
- style="fill:none;stroke:#dcdcdc;stroke-width:2.28571439;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 327,86.255631 327,76"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2.28571439;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 327,86.255631 V 76"
id="path43496-7"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#dcdcdc;stroke-width:2.28571439;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2.28571439;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="M 331.25,79.25 327,75.005631 322.75,79.25"
id="path43498-9"
sodipodi:nodetypes="ccc"
@@ -80347,20 +79172,20 @@
<path
sodipodi:nodetypes="cc"
id="path43776-0"
- style="fill:none;stroke:#ffffff;stroke-width:1.14285719;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1.14285719;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d=""
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient55988);stroke-width:1.14285719;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 284,97.25 -4.5,4.5 0,0.5 4.5,4.5"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient55988);stroke-width:1.14285719;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 284,97.25 -4.5,4.5 v 0.5 l 4.5,4.5"
id="path43780-4"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
id="path43860-6"
- d="m 291.5,101.5 -8.99437,0"
- style="fill:none;stroke:#ffffff;stroke-width:1.14285719;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 291.5,101.5 h -8.99437"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1.14285719;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -80376,8 +79201,8 @@
<path
inkscape:connector-curvature="0"
id="path14490-2"
- d="m 328.5,-107.25 -4.5,1.75 0,6.5 4.5,2.25 4.5,-2.25 0,-6.5 -4.5,-1.75 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#281500;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 328.5,-107.25 -4.5,1.75 v 6.5 l 4.5,2.25 4.5,-2.25 v -6.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#281500;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccc" />
<g
id="g42962-0-2"
@@ -80385,8 +79210,8 @@
<path
sodipodi:nodetypes="ccccc"
id="path42964-9-7"
- d="m 154,80 0,-6.5 -4.5,-1.75 0,10.5 L 154,80 z"
- style="fill:#915515;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 154,80 v -6.5 l -4.5,-1.75 v 10.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#915515;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -80397,20 +79222,20 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
id="path42966-1-0"
- d="m 324,-99.00012 0,-6.49988 4.5,-1.75 0.5,0.25 0,10 -0.5,0.25 -4.5,-2.25012 z"
- style="fill:#efa351;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 324,-99.00012 V -105.5 l 4.5,-1.75 0.5,0.25 v 10 l -0.5,0.25 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#efa351;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path42968-5-4"
- d="m 332.5,-105.5 0,6.25 -4,2 -4,-2.00012 0,-6.24988"
+ d="m 332.5,-105.5 v 6.25 l -4,2 -4,-2.00012 V -105.5"
style="fill:none;stroke:url(#linearGradient14559-8);stroke-width:0.99999982px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
id="path42970-1-3"
- d="m 324,-105.5 4.5,-1.75 4.5,1.75 -4.5,2 -4.5,-2 z"
- style="fill:#f5ca9b;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 324,-105.5 4.5,-1.75 4.5,1.75 -4.5,2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#f5ca9b;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -80429,9 +79254,9 @@
height="6.7500019"
width="1"
id="rect42974-8-0"
- style="fill:url(#linearGradient14563-3);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient14563-3);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate" />
<rect
- style="opacity:0.09599998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.09599998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
id="rect42976-8-4"
width="1"
height="6.7500019"
@@ -80445,45 +79270,36 @@
transform="matrix(0.7882544,0,0,0.7883038,12.59796,-113.3734)"
id="g42978-1-6"
style="display:inline;enable-background:new">
- <path
+ <circle
transform="matrix(0.6425292,0,0,0.642531,44.523834,146.81699)"
- sodipodi:type="arc"
- style="fill:#f2b676;fill-opacity:1;fill-rule:nonzero;stroke:#281500;stroke-width:1.97436094;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:#f2b676;fill-opacity:1;fill-rule:nonzero;stroke:#281500;stroke-width:1.97436094;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path42980-5-8"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path42984-5-2"
- style="fill:none;stroke:url(#linearGradient14565-5);stroke-width:2.54167628;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.4991181,0,0,0.4991107,63.460522,163.7471)" />
- <path
+ style="fill:none;stroke:url(#linearGradient14565-5);stroke-width:2.54167628;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.4991181,0,0,0.4991107,63.460522,163.7471)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(-0.5858806,-0.06590218,0.06677852,-0.5812167,198.80048,299.96262)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path42982-9-0"
- style="opacity:0.8;fill:url(#linearGradient14567-8);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- sodipodi:type="arc" />
+ style="display:inline;opacity:0.8;fill:url(#linearGradient14567-8);fill-opacity:1;fill-rule:nonzero;stroke:none"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
transform="matrix(0.875,0,0,0.875,-149.68867,-26.76875)"
@@ -80495,13 +79311,13 @@
id="g43469-6"
transform="translate(0,21)">
<path
- style="fill:none;stroke:#000000;stroke-width:3.88571429;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="M 327,86.25 327,76"
+ style="fill:none;stroke:#000000;stroke-width:3.88571429;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 327,86.25 V 76"
id="path43471-7"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#000000;stroke-width:4.11428547;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:4.11428547;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 331.25,79.25 327,75.005631 322.75,79.25"
id="path43473-1"
sodipodi:nodetypes="ccc"
@@ -80513,19 +79329,19 @@
<path
sodipodi:nodetypes="cc"
id="path43478-9"
- d="M 327,86.25 327,76"
- style="fill:none;stroke:#dcdcdc;stroke-width:2.28571439;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 327,86.25 V 76"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2.28571439;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path43481-3"
d="M 331.25,79.25 327,75.005631 322.75,79.25"
- style="fill:none;stroke:#dcdcdc;stroke-width:2.28571439;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2.28571439;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
<path
- style="fill:none;stroke:#ffffff;stroke-width:1.37142861;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1.37142861;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 308.5,106 2.75,-2.75"
id="path43778-6"
sodipodi:nodetypes="cc"
@@ -80533,12 +79349,12 @@
<path
sodipodi:nodetypes="cccc"
id="path43785-2"
- d="m 308.75,97.25 c -0.25,0 -0.5,0.25 -0.5,0.5 m 2.26562,3.75 -8.99437,0"
- style="fill:none;stroke:#ffffff;stroke-width:1.14285719;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 308.75,97.25 c -0.25,0 -0.5,0.25 -0.5,0.5 m 2.26562,3.75 h -8.99437"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1.14285719;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient55990);stroke-width:1.14285719;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 309.02125,97.249998 4.5,4.500002 0,0.5 -4.5,4.5"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient55990);stroke-width:1.14285719;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 309.02125,97.249998 4.5,4.500002 v 0.5 l -4.5,4.5"
id="path44948-4"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
@@ -80548,7 +79364,7 @@
style="display:inline;enable-background:new"
id="ICON_EXTERNAL_DATA">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect29107-06"
width="16"
height="16"
@@ -80561,16 +79377,16 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
id="path29110-17"
- d="m 531,58 6,-2.5 7.99996,3.49998 0,2.75 -5.99999,3.24999 L 531,60.75 531,58 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ d="m 531,58 6,-2.5 7.99996,3.49998 v 2.75 L 538.99997,64.99997 531,60.75 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
sodipodi:nodetypes="ccccccc"
- style="fill:#9e9e9e;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 531,58 6,-2.5 7.99996,3.49998 0,0.5 -6,3 L 531,58.56558 531,58 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#9e9e9e;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
+ d="m 531,58 6,-2.5 7.99996,3.49998 v 0.5 l -6,3 L 531,58.56558 Z"
id="path29112-53" />
<path
inkscape:connector-curvature="0"
@@ -80578,7 +79394,7 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
id="path29114-1"
- d="M 531.00001,60.75 531,58.5 l 7.99996,3.99998 0.01,2.49885 -8.00991,-4.24883 -4e-5,0 z"
+ d="M 531.00001,60.75 531,58.5 l 7.99996,3.99998 0.01,2.49885 -8.00991,-4.24883 z"
style="fill:#848484;fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:nodetypes="ccccc" />
<path
@@ -80586,14 +79402,14 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
- style="fill:#383838;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89207077px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 544.99996,61.74998 0,-2.25 -6,3 c 0,2.58362 0,1.9329 0,2.5 l 6,-3.25 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#383838;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89207077px;marker:none;enable-background:accumulate"
+ d="m 544.99996,61.74998 v -2.25 l -6,3 c 0,2.58362 0,1.9329 0,2.5 z"
id="path29116-3"
sodipodi:nodetypes="ccccc" />
<path
inkscape:connector-curvature="0"
style="fill:none;stroke:url(#linearGradient56084-9);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
- d="m 531.5,58.5 0,2 7.49996,3.99998 5.5,-3 0,-2"
+ d="m 531.5,58.5 v 2 l 7.49996,3.99998 5.5,-3 v -2"
id="path29118-7"
sodipodi:nodetypes="ccccc" />
<path
@@ -80602,18 +79418,16 @@
d="m 531.5,58 7.49996,3.74998"
id="path29120-1"
sodipodi:nodetypes="cc" />
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient29129-4);stroke-width:1.08012342;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient29129-4);stroke-width:1.08012342;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path29122-40"
- sodipodi:cx="749"
- sodipodi:cy="420.25"
- sodipodi:rx="2.5"
- sodipodi:ry="1.75"
- d="m 751.5,420.25 a 2.5,1.75 0 0 1 -2.5,1.75 2.5,1.75 0 0 1 -2.5,-1.75 2.5,1.75 0 0 1 2.5,-1.75 2.5,1.75 0 0 1 2.5,1.75 z"
- transform="matrix(1,0,0,0.8571429,-212,-302.2143)" />
- <rect
- style="fill:#66ff00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ transform="matrix(1,0,0,0.8571429,-212,-302.2143)"
+ cx="749"
+ cy="420.25"
+ rx="2.5"
+ ry="1.75" />
+ <rect
+ style="display:inline;overflow:visible;visibility:visible;fill:#66ff00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect29125-3"
width="1"
height="1"
@@ -80625,8 +79439,8 @@
id="g15021"
style="display:inline;enable-background:new">
<path
- style="fill:url(#linearGradient15123);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline"
- d="m 756.16666,204.50001 10.33334,0 0,14.99999 -13,0 -10e-6,-11.99999 2.66667,-3 z"
+ style="display:inline;fill:url(#linearGradient15123);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
+ d="M 756.16666,204.50001 H 766.5 V 219.5 h -13 l -10e-6,-11.99999 z"
id="path15023"
sodipodi:nodetypes="cccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -80639,33 +79453,33 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccccc"
id="path15025"
- d="m 756.16666,204.50001 10.33334,0 0,14.99999 -13,0 -10e-6,-11.99999 2.66667,-3 z"
- style="opacity:0.3;fill:url(#radialGradient15125);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 756.16666,204.50001 H 766.5 V 219.5 h -13 l -10e-6,-11.99999 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:url(#radialGradient15125);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
id="path15027"
- style="fill:none;stroke:url(#linearGradient15127);stroke-width:1.03178871;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
- d="m 754.5,209 0,9.5 m 3.5,-13 7.5,0"
+ style="display:inline;fill:none;stroke:url(#linearGradient15127);stroke-width:1.03178871;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 754.5,209 v 9.5 m 3.5,-13 h 7.5"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
id="path15029"
- d="m 753,208 4,0 0,-4 -4,4 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+ d="m 753,208 h 4 v -4 z"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccc"
id="path15031"
- style="fill:none;stroke:#000000;stroke-width:1.50078368;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 753.5,207.00001 0,12.49999 13,0 0,-14.99999 -10.5,0 -2.5,2.5 z"
+ style="fill:none;stroke:#000000;stroke-width:1.50078368;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 753.5,207.00001 V 219.5 h 13 V 204.50001 H 756 Z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient15129);stroke-width:0.93798971;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 757.5,206.5 0,2 -2,0"
+ style="fill:none;stroke:url(#linearGradient15129);stroke-width:0.93798971;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 757.5,206.5 v 2 h -2"
id="path15033"
inkscape:connector-curvature="0" />
</g>
@@ -80679,7 +79493,7 @@
height="16"
width="16"
id="rect15011"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g15013">
<rect
@@ -80688,15 +79502,15 @@
height="12.998481"
width="13"
id="rect15015"
- style="fill:url(#linearGradient15131);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.50078368;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:url(#linearGradient15131);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.50078368;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<path
sodipodi:nodetypes="ccc"
id="path15017"
- d="m 92.28796,356.69549 0,-10.90453 10.90641,0 0,10.90453 -10.90641,0 z"
- style="fill:none;stroke:url(#linearGradient15133);stroke-width:0.56279385;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 92.28796,356.69549 v -10.90453 h 10.90641 v 10.90453 z"
+ style="fill:none;stroke:url(#linearGradient15133);stroke-width:0.56279385;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -80707,8 +79521,8 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cszzcc"
id="path15019"
- d="m 103.5,353.27516 c -0.37083,-1.1875 -1.21031,-1.72293 -1.9,-1.72929 -1.39235,-0.0134 -1.47709,3.98814 -2.999997,4 -1.491657,0.0119 -2.001315,-7 -3.5,-7 -1.52993,-10e-4 -1.18608,5.00645 -3.5,4.97929 l -1,0"
- style="fill:none;stroke:url(#linearGradient15135);stroke-width:1.1255877;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ d="m 103.5,353.27516 c -0.37083,-1.1875 -1.21031,-1.72293 -1.9,-1.72929 -1.39235,-0.0134 -1.47709,3.98814 -2.999997,4 -1.491657,0.0119 -2.001315,-7 -3.5,-7 -1.52993,-10e-4 -1.18608,5.00645 -3.5,4.97929 h -1"
+ style="display:inline;fill:none;stroke:url(#linearGradient15135);stroke-width:1.1255877;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -80722,8 +79536,8 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccccc"
id="path15037"
- d="m 757.01257,204.46121 9.48743,0.0388 0,14.99999 -13,0 0.0126,-11.53879 3.5,-3.5 -3e-5,0 z"
- style="fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline"
+ d="m 757.01257,204.46121 9.48743,0.0388 V 219.5 h -13 l 0.0126,-11.53879 3.5,-3.5 z"
+ style="display:inline;fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
inkscape:connector-curvature="0" />
<g
id="g15039"
@@ -80732,7 +79546,7 @@
<g
id="g15041">
<rect
- style="fill:#ebb5b5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ebb5b5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect15043"
width="9.9999914"
height="12"
@@ -80744,38 +79558,38 @@
height="4.9999976"
width="9.9999924"
id="rect15045"
- style="opacity:0.5;fill:#4b80cd;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#4b80cd;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
y="94"
x="-83"
height="6.8499999"
width="9.9999914"
id="rect15047"
- style="opacity:0.3;fill:url(#radialGradient15137-5);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:url(#radialGradient15137-5);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="cccccccccccc"
id="path15050"
- d="m -83,100.00002 1,0 1,0.74999 1,-0.74999 1,0.99999 2,0 1.5,-0.75 1.5,0.75 0.999991,0 L -73,102 l -9.999991,0 -9e-6,-1.99998 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -83,100.00002 h 1 l 1,0.74999 1,-0.74999 1,0.99999 h 2 l 1.5,-0.75 1.5,0.75 h 0.999991 L -73,102 h -9.999991 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.1;marker:none;enable-background:accumulate"
id="rect15052"
width="2.0000029"
height="2.0000038"
x="-77"
y="96" />
<path
- style="opacity:0.3;fill:#280b0b;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -83,102 10,0 0,1 -10,0 0,-1 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:#280b0b;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
+ d="m -83,102 h 10 v 1 h -10 z"
id="path15054"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path15056"
- d="m -77,102 2.000003,0 -0.750003,4 -0.5,0 -0.75,-4 z"
- style="opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -77,102 h 2.000003 L -75.75,106 h -0.5 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -80786,19 +79600,19 @@
<path
sodipodi:nodetypes="ccc"
id="path15060"
- d="m -82.5,105.5 0,-11 9,0"
- style="opacity:0.25;fill:none;stroke:#000000;stroke-width:1.87597954px;stroke-linecap:round;display:inline;enable-background:new"
+ d="m -82.5,105.5 v -11 h 9"
+ style="display:inline;opacity:0.25;fill:none;stroke:#000000;stroke-width:1.87597954px;stroke-linecap:round;enable-background:new"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.2;fill:none;stroke:#000000;stroke-width:1.87597954px;stroke-linecap:round;display:inline;enable-background:new"
- d="m -82.5,105.5 0,-11 9,0 0,11 -9,0 z"
+ style="display:inline;opacity:0.2;fill:none;stroke:#000000;stroke-width:1.87597954px;stroke-linecap:round;enable-background:new"
+ d="m -82.5,105.5 v -11 h 9 v 11 z"
id="path15062"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
</g>
<path
- style="opacity:0.5;fill:url(#radialGradient15139-5);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 757.51257,204.46121 9,1e-5 0,14.99999 -13,0 0,-11 4,-4 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:url(#radialGradient15139-5);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 757.51257,204.46121 9,1e-5 v 14.99999 h -13 v -11 z"
id="path15064"
sodipodi:nodetypes="cccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -80808,12 +79622,12 @@
<path
sodipodi:nodetypes="cccc"
d="M 754.51257,209.96121 754.5,218.5 M 759.01257,205.46121 765.5,205.5"
- style="fill:none;stroke:url(#linearGradient15141-6);stroke-width:1.03178871;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient15141-6);stroke-width:1.03178871;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path15066"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
- d="m 753.01257,208.96121 5,0 0,-5 -5,5 z"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="m 753.01257,208.96121 h 5 v -5 z"
id="path15068"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
@@ -80821,16 +79635,16 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="M 753.51257,207.96121 753.5,219.5 l 13,0 0,-14.99999 -9.48743,-0.0388 -3.5,3.5 z"
- style="fill:none;stroke:#000000;stroke-width:1.50078368;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 753.51257,207.96121 753.5,219.5 h 13 v -14.99999 l -9.48743,-0.0388 z"
+ style="fill:none;stroke:#000000;stroke-width:1.50078368;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path15070"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path15072"
- d="m 758.51257,206.46121 0,3 -3,0"
- style="fill:none;stroke:url(#linearGradient15143-1);stroke-width:0.93798971;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 758.51257,206.46121 v 3 h -3"
+ style="fill:none;stroke:url(#linearGradient15143-1);stroke-width:0.93798971;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -80838,7 +79652,7 @@
style="display:inline;enable-background:new"
id="ICON_LOAD_FACTORY">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect29107-4"
width="16"
height="16"
@@ -80851,16 +79665,16 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
id="path29110-7"
- d="m 531,58 6,-2.5 7.99996,3.49998 0,2.75 -5.99999,3.24999 L 531,60.75 531,58 z"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ d="m 531,58 6,-2.5 7.99996,3.49998 v 2.75 L 538.99997,64.99997 531,60.75 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
sodipodi:nodetypes="ccccccc"
- style="fill:#9e9e9e;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 531,58 6,-2.5 7.99996,3.49998 0,0.5 -6,3 L 531,58.56558 531,58 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#9e9e9e;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
+ d="m 531,58 6,-2.5 7.99996,3.49998 v 0.5 l -6,3 L 531,58.56558 Z"
id="path29112-1" />
<path
inkscape:connector-curvature="0"
@@ -80868,7 +79682,7 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
id="path29114-0"
- d="M 531.00001,60.75 531,58.5 l 7.99996,3.99998 0.01,2.49885 -8.00991,-4.24883 -4e-5,0 z"
+ d="M 531.00001,60.75 531,58.5 l 7.99996,3.99998 0.01,2.49885 -8.00991,-4.24883 z"
style="fill:#848484;fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:nodetypes="ccccc" />
<path
@@ -80876,14 +79690,14 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
- style="fill:#383838;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89207077px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 544.99996,61.74998 0,-2.25 -6,3 c 0,2.58362 0,1.9329 0,2.5 l 6,-3.25 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#383838;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89207077px;marker:none;enable-background:accumulate"
+ d="m 544.99996,61.74998 v -2.25 l -6,3 c 0,2.58362 0,1.9329 0,2.5 z"
id="path29116-7"
sodipodi:nodetypes="ccccc" />
<path
inkscape:connector-curvature="0"
style="fill:none;stroke:url(#linearGradient56084-0);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
- d="m 531.5,58.5 0,2 7.49996,3.99998 5.5,-3 0,-2"
+ d="m 531.5,58.5 v 2 l 7.49996,3.99998 5.5,-3 v -2"
id="path29118-8"
sodipodi:nodetypes="ccccc" />
<path
@@ -80892,18 +79706,16 @@
d="m 531.5,58 7.49996,3.74998"
id="path29120-7"
sodipodi:nodetypes="cc" />
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient29129-1);stroke-width:1.08012342;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient29129-1);stroke-width:1.08012342;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path29122-0"
- sodipodi:cx="749"
- sodipodi:cy="420.25"
- sodipodi:rx="2.5"
- sodipodi:ry="1.75"
- d="m 751.5,420.25 a 2.5,1.75 0 0 1 -2.5,1.75 2.5,1.75 0 0 1 -2.5,-1.75 2.5,1.75 0 0 1 2.5,-1.75 2.5,1.75 0 0 1 2.5,1.75 z"
- transform="matrix(1,0,0,0.8571429,-212,-302.2143)" />
- <rect
- style="fill:#66ff00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ transform="matrix(1,0,0,0.8571429,-212,-302.2143)"
+ cx="749"
+ cy="420.25"
+ rx="2.5"
+ ry="1.75" />
+ <rect
+ style="display:inline;overflow:visible;visibility:visible;fill:#66ff00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect29125-72"
width="1"
height="1"
@@ -80918,7 +79730,7 @@
id="g32367-2-1"
transform="translate(23,1)">
<g
- style="opacity:0.96000001;display:inline"
+ style="display:inline;opacity:0.96000001"
id="g32369-7-1"
transform="matrix(0.927848,0,0,0.916217,240.82022,467.72362)"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -80930,7 +79742,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
transform="matrix(0.784039,0,0,0.779055,265.50801,498.28815)"
id="g32373-2-0"
- style="opacity:0.96000001;fill:none;stroke:url(#linearGradient32430-7-9-7);stroke-width:1.17973554;stroke-opacity:1;display:inline" />
+ style="display:inline;opacity:0.96000001;fill:none;stroke:url(#linearGradient32430-7-9-7);stroke-width:1.17973554;stroke-opacity:1" />
</g>
<g
id="g32398-1-7">
@@ -80940,12 +79752,12 @@
<path
sodipodi:nodetypes="ccc"
id="path32403-1-2"
- d="m 343,108.25 0,-4.25 4.25,0"
- style="fill:none;stroke:#0b1e00;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 343,108.25 V 104 h 4.25"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0b1e00;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<path
- style="color:#000000;fill:none;stroke:#0b1e00;stroke-width:3.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0b1e00;stroke-width:3.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 428,671.25 c -0.0541,-1.25729 -0.54273,-2.44429 -1.37516,-3.38809 -2.00926,-2.27808 -5.59675,-2.62117 -7.87484,-0.61191 L 417,669"
id="path32411-7-3"
sodipodi:nodetypes="csc"
@@ -80954,26 +79766,26 @@
transform="matrix(1,0,0,-1,73,774)"
id="g32413-8-5">
<path
- style="fill:none;stroke:#8af01e;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 343,108.25 0,-4.25 4.25,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#8af01e;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 343,108.25 V 104 h 4.25"
id="path32416-5-1"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
</g>
<path
id="path32418-2-3"
- d="m 417,669 0,-1 0,-1.5 1,0 0,1.5 1.5,0 0,1 -1.5,0 -1,0 z"
- style="opacity:0.15;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 417,669 v -1 -1.5 h 1 v 1.5 h 1.5 v 1 H 418 Z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.15;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="csc"
id="path32420-2-7"
d="m 428,671.25 c -0.0541,-1.25729 -0.54273,-2.44429 -1.37516,-3.38809 -2.00926,-2.27808 -5.59675,-2.62117 -7.87484,-0.61191 L 417,669"
- style="color:#000000;fill:none;stroke:#8af01e;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#8af01e;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.4;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 415.5,670 0,-4.5 m 5,4 -2,0"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.4;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 415.5,670 v -4.5 m 5,4 h -2"
id="path32422-4-0"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
@@ -80981,7 +79793,7 @@
sodipodi:nodetypes="cscccc"
id="path32424-5-0"
d="m 428.5,671.21875 c -0.0591,-1.37274 -0.59591,-2.66246 -1.5,-3.6875 -1.09228,-1.23842 -2.62571,-1.96363 -4.1875,-2.09375 -1.55879,-0.12987 -3.16135,0.33951 -4.40625,1.4375 -3.3e-4,0.0104 -3.3e-4,0.0208 0,0.0312 L 417.5,667.75"
- style="opacity:0.4;color:#000000;fill:none;stroke:url(#linearGradient32434-5-8-9);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.4;fill:none;stroke:url(#linearGradient32434-5-8-9);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -80994,7 +79806,7 @@
id="g18875-2"
style="display:inline">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect18877-3"
width="16"
height="16"
@@ -81003,14 +79815,14 @@
<g
style="display:inline"
id="g18879-4"
- transform="translate(0.01612278,0)">
+ transform="translate(0.01612278)">
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path18881-0"
- d="M 17.453876,82.25 16.233877,83.5 5.75,83.5 4.5,82.25 l -1e-7,-11.75 12.9652911,0 -0.01141,11.75 -5e-6,0 0,0 0,0 z"
- style="fill:url(#linearGradient17222-4-4);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 17.453876,82.25 16.233877,83.5 H 5.75 L 4.5,82.25 4.4999999,70.5 H 17.465291 l -0.01141,11.75 z"
+ style="fill:url(#linearGradient17222-4-4);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="cccccccccc"
inkscape:connector-curvature="0" />
<path
@@ -81018,13 +79830,13 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path18883-5"
- d="M 15.983877,81.999998 5.9838772,82 l 0,-0.999998 9.9999998,-2e-6 0,0.999998 z"
+ d="M 15.983877,81.999998 5.9838772,82 V 81.000002 L 15.983877,81 Z"
style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:url(#linearGradient17224-0-9);stroke-width:0.99999976px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="M 5.4838772,82.500001 5.511418,71.499938 16.483877,71.5 l 0,11 -10.9999998,10e-7 z"
+ d="M 5.4838772,82.500001 5.511418,71.499938 16.483877,71.5 v 11 z"
id="path18885-1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -81032,7 +79844,7 @@
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<rect
- style="fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect18887-7"
width="1"
height="1"
@@ -81047,7 +79859,7 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- d="m 197.45064,77.47921 9,0 m -9,2 9,0 m -9,2 9,0"
+ d="m 197.45064,77.47921 h 9 m -9,2 h 9 m -9,2 h 9"
style="fill:none;stroke:url(#linearGradient56401);stroke-width:0.9999994px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1"
id="path19108-4"
inkscape:connector-curvature="0" />
@@ -81058,20 +79870,20 @@
<path
inkscape:connector-curvature="0"
id="path45290-5-8"
- style="opacity:0.25;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -120.49163,-67.5 c -3.75159,0.954856 -7.20393,6.261452 -9,9 l -3.5,-3.5 -0.25,0.5 3.99163,4 0.5,0 c 1.0421,-2.617689 4.16191,-8.585412 8.25837,-10 l 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -120.49163,-67.5 c -3.75159,0.954856 -7.20393,6.261452 -9,9 l -3.5,-3.5 -0.25,0.5 3.99163,4 h 0.5 c 1.0421,-2.617689 4.16191,-8.585412 8.25837,-10 z"
sodipodi:nodetypes="cccccccc" />
<path
inkscape:connector-curvature="0"
id="path45302-1-2"
- style="fill:none;stroke:#0b1e00;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0b1e00;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m -120.5,-68.5 c -3.15098,1.124146 -6.99163,5 -8.99163,9 l -3.5,-3.5 -0.5,0.5 4,4 c 1.42501,-3.330356 5.5,-8.75 8.99163,-10"
sodipodi:nodetypes="cccccc" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc"
d="m -120.5,-68.5 c -3.15098,1.124146 -6.99163,5 -8.99163,9 l -3.5,-3.5 -0.5,0.5 4,4 c 1.42501,-3.330356 5.5,-8.75 8.99163,-10"
- style="fill:none;stroke:#9af23d;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#9af23d;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path45294-9-3" />
</g>
</g>
@@ -81079,7 +79891,7 @@
style="display:inline;enable-background:new"
id="ICON_SAVE_AS">
<rect
- style="opacity:0;color:#000000;fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.5999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0;fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.5999999;marker:none;enable-background:accumulate"
id="rect31818-2"
width="16"
height="16"
@@ -81092,20 +79904,20 @@
<path
inkscape:connector-curvature="0"
id="path45290-5-0"
- style="opacity:0.25;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -120.49163,-67.5 c -3.75159,0.954856 -7.20393,6.261452 -9,9 l -3.5,-3.5 -0.25,0.5 3.99163,4 0.5,0 c 1.0421,-2.617689 4.16191,-8.585412 8.25837,-10 l 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -120.49163,-67.5 c -3.75159,0.954856 -7.20393,6.261452 -9,9 l -3.5,-3.5 -0.25,0.5 3.99163,4 h 0.5 c 1.0421,-2.617689 4.16191,-8.585412 8.25837,-10 z"
sodipodi:nodetypes="cccccccc" />
<path
inkscape:connector-curvature="0"
id="path45302-1-7"
- style="fill:none;stroke:#0b1e00;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0b1e00;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m -120.5,-68.5 c -3.15098,1.124146 -6.99163,5 -8.99163,9 l -3.5,-3.5 -0.5,0.5 4,4 c 1.42501,-3.330356 5.5,-8.75 8.99163,-10"
sodipodi:nodetypes="cccccc" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc"
d="m -120.5,-68.5 c -3.15098,1.124146 -6.99163,5 -8.99163,9 l -3.5,-3.5 -0.5,0.5 4,4 c 1.42501,-3.330356 5.5,-8.75 8.99163,-10"
- style="fill:none;stroke:#9af23d;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#9af23d;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path45294-9-7" />
</g>
<g
@@ -81113,26 +79925,26 @@
id="g31820-9">
<path
sodipodi:nodetypes="ccc"
- style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline;enable-background:new"
- d="m -239.5,548.5 0,-1 1,0"
+ style="display:inline;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
+ d="m -239.5,548.5 v -1 h 1"
id="path31830-7"
inkscape:connector-curvature="0" />
<path
- style="color:#000000;fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -239.25,548 0.5,0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -239.25,548 h 0.5"
id="path31838-1"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
id="path31840-4"
- d="m -239.25,548 0.5,0"
- style="color:#000000;fill:none;stroke:#d2d2d2;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -239.25,548 h 0.5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#d2d2d2;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
- style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline;enable-background:new"
- d="m -239.5,548.5 -0.25,-0.5 0.25,-0.5 1,0"
+ style="display:inline;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
+ d="m -239.5,548.5 -0.25,-0.5 0.25,-0.5 h 1"
id="path31844-1"
inkscape:connector-curvature="0" />
</g>
@@ -81141,26 +79953,26 @@
id="g31820-9-7">
<path
sodipodi:nodetypes="ccc"
- style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline;enable-background:new"
- d="m -239.5,548.5 0,-1 1,0"
+ style="display:inline;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
+ d="m -239.5,548.5 v -1 h 1"
id="path31830-7-9"
inkscape:connector-curvature="0" />
<path
- style="color:#000000;fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -239.25,548 0.5,0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -239.25,548 h 0.5"
id="path31838-1-6"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
id="path31840-4-3"
- d="m -239.25,548 0.5,0"
- style="color:#000000;fill:none;stroke:#d2d2d2;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -239.25,548 h 0.5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#d2d2d2;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
- style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline;enable-background:new"
- d="m -239.5,548.5 -0.25,-0.5 0.25,-0.5 1,0"
+ style="display:inline;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
+ d="m -239.5,548.5 -0.25,-0.5 0.25,-0.5 h 1"
id="path31844-1-3"
inkscape:connector-curvature="0" />
</g>
@@ -81174,13 +79986,13 @@
height="16"
width="16"
id="rect25824-7"
- style="opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<g
transform="translate(209.95065,-333.02079)"
id="g25826-2">
<path
- style="fill:url(#linearGradient25927-1-2);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 89.5,408.5 0,11.49245 1.5,1.5 10.5,0.008 0,-11.99245 -8,-0.008 0,-1 -4,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient25927-1-2);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate"
+ d="m 89.5,408.5 v 11.49245 l 1.5,1.5 10.5,0.008 V 409.508 l -8,-0.008 v -1 z"
id="path25828-2"
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0" />
@@ -81190,45 +80002,42 @@
style="display:inline" />
<path
sodipodi:nodetypes="cccccc"
- style="opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
- d="m 91.5,420.49245 -1.01563,-0.98437 0,-10.02344 2,0 0,1 L 100.5,410.5"
+ style="display:inline;opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 91.5,420.49245 -1.01563,-0.98437 v -10.02344 h 2 v 1 L 100.5,410.5"
id="path25834-2"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffffff;fill-rule:evenodd;stroke:none;display:inline"
- d="m 93,409 0,2 -3,0 0,-2 3,0 z"
+ style="display:inline;fill:#ffffff;fill-rule:evenodd;stroke:none"
+ d="m 93,409 v 2 h -3 v -2 z"
id="path25840-3"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccccc"
id="path25842-4"
- d="m 89.5,408.5 0,11.49245 1.5,1.5 12,0.008 1.5,-1.49245 0,-6.50755 -3,-0.008 0,-3.9849 -8,-0.008 0,-1 -4,0 0,4.5e-4 0,0 0,0 z"
- style="fill:none;stroke:#2a2512;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 89.5,408.5 v 11.49245 l 1.5,1.5 12,0.008 1.5,-1.49245 v -6.50755 l -3,-0.008 v -3.9849 l -8,-0.008 v -1 h -4 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#2a2512;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<g
id="g56440">
<g
- style="opacity:0.96000001;display:inline"
+ style="display:inline;opacity:0.96000001"
id="g40606-5"
transform="matrix(0.927848,0,0,0.916217,148.77086,-125.29717)"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path40608-1"
- style="fill:url(#linearGradient42519-8-7);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.22752953;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.87787,0,0,0.889264,55.67911,118.0341)" />
+ style="fill:url(#linearGradient42519-8-7);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.22752953;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.87787,0,0,0.889264,55.67911,118.0341)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
inkscape:export-ydpi="90"
@@ -81236,20 +80045,17 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
transform="matrix(0.784039,0,0,0.779055,173.45865,-94.73264)"
id="g40610-3"
- style="opacity:0.96000001;fill:none;stroke:url(#linearGradient42523-5-8);stroke-width:1.17973554;stroke-opacity:1;display:inline">
- <path
+ style="display:inline;opacity:0.96000001;fill:none;stroke:url(#linearGradient42523-5-8);stroke-width:1.17973554;stroke-opacity:1">
+ <circle
transform="matrix(0.87787,0,0,0.889264,55.67911,118.0341)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient42521-3-0);stroke-width:1.44816053;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient42521-3-0);stroke-width:1.44816053;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path40612-7"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<path
inkscape:connector-curvature="0"
@@ -81257,7 +80063,7 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path40614-9"
- style="opacity:0.96000001;fill:none;stroke:#ffffff;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.96000001;fill:none;stroke:#ffffff;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 310.45064,75.47921 -3,3 m 0,1 2,2"
sodipodi:nodetypes="cccc" />
<path
@@ -81267,7 +80073,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cc"
d="m 307.45064,79.47921 2,2"
- style="opacity:0.96000001;fill:none;stroke:#aa0000;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.96000001;fill:none;stroke:#aa0000;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path40616-6"
inkscape:transform-center-y="1.25"
inkscape:transform-center-x="-1.25" />
@@ -81277,19 +80083,19 @@
height="1.5"
width="1"
id="rect40618-1"
- style="opacity:0.48000004;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.48000004;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate" />
<rect
y="77.97921"
x="311.95065"
height="1"
width="1.5"
id="rect40620-6"
- style="opacity:0.48000004;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.48000004;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
inkscape:transform-center-y="-0.75"
id="path40622-6"
- style="opacity:0.96000001;fill:none;stroke:#000000;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.96000001;fill:none;stroke:#000000;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 310.45064,75.47921 -3,3"
sodipodi:nodetypes="cc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -81298,19 +80104,19 @@
<path
inkscape:connector-curvature="0"
style="opacity:0.96000001;fill:url(#linearGradient56428);fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 307.80578,72.95456 c -3.25557,0.003 -5.8936,2.6597 -5.87155,5.95078 0.0105,1.56055 0.63214,2.99542 1.61111,4.05762 2.7831,-7.37691 5.95805,-1.77373 7.49116,-9.06794 -0.92886,-0.60835 -2.04538,-0.9415 -3.23072,-0.94046 l 0,0 0,0 0,0 z"
+ d="m 307.80578,72.95456 c -3.25557,0.003 -5.8936,2.6597 -5.87155,5.95078 0.0105,1.56055 0.63214,2.99542 1.61111,4.05762 2.7831,-7.37691 5.95805,-1.77373 7.49116,-9.06794 -0.92886,-0.60835 -2.04538,-0.9415 -3.23072,-0.94046 z"
id="path40624-9"
inkscape:transform-center-x="1.4653436"
inkscape:transform-center-y="-1.0204512" />
<rect
- style="opacity:0.28800001;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.28800001;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate"
id="rect40626-3"
width="1.4999696"
height="1"
x="302.4668"
y="78.97921" />
<rect
- style="opacity:0.28800001;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.28800001;fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate"
id="rect40628-5"
width="1"
height="1.4999921"
@@ -81323,12 +80129,12 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cc"
d="m 310.45064,75.47921 -3,3"
- style="opacity:0.57600002;fill:none;stroke:#000000;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.57600002;fill:none;stroke:#000000;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path40630-7"
inkscape:transform-center-y="-0.75" />
</g>
<rect
- style="opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect15838"
width="16"
height="16"
@@ -81345,24 +80151,24 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc"
id="path15846"
- d="m 92.5,413.74245 12,0.008 0,6.25 -1.5,1.49245 -12,0.008 0,-2 1.5,0 0,-5.75755 0,-9e-4 z"
- style="fill:#d1c595;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient25929-7-8);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m 92.5,413.74245 12,0.008 v 6.25 l -1.5,1.49245 -12,0.008 v -2 h 1.5 v -5.75755 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#d1c595;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient25929-7-8);stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
id="path15850"
- d="m 93,420.5 9.5,0"
- style="opacity:0.18999999;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="m 93,420.5 h 9.5"
+ style="display:inline;opacity:0.18999999;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
sodipodi:nodetypes="cc" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc"
- style="opacity:0.8;fill:none;stroke:url(#linearGradient15963-3);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
- d="m 103.5,414.75 -10,-0.008 0,4.75755 -1.5,1.5 -1.5,-1.5"
+ style="display:inline;opacity:0.8;fill:none;stroke:url(#linearGradient15963-3);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 103.5,414.75 -10,-0.008 v 4.75755 l -1.5,1.5 -1.5,-1.5"
id="path15852" />
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:#2a2512;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 89.5,419.99245 1.5,1.5 12,0.008 1.5,-1.49245 0,-6.50755 -3,-0.008"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#2a2512;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 89.5,419.99245 1.5,1.5 12,0.008 1.5,-1.49245 v -6.50755 l -3,-0.008"
id="path15856"
sodipodi:nodetypes="cccccc" />
</g>
@@ -81372,7 +80178,7 @@
id="ICON_COLOR_RED"
transform="translate(63.000002,128.99999)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect36341-7"
width="16"
height="16"
@@ -81381,19 +80187,16 @@
<g
transform="translate(0,-12)"
id="g36343-6">
- <path
+ <circle
transform="matrix(-0.7451143,-0.08386971,0.08492794,-0.7396793,437.33358,356.39712)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path36363-9"
- style="opacity:0.3;fill:url(#radialGradient37501-4-64);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- sodipodi:type="arc" />
+ style="display:inline;opacity:0.3;fill:url(#radialGradient37501-4-64);fill-opacity:1;fill-rule:nonzero;stroke:none"
+ cx="132"
+ cy="118"
+ r="8" />
<g
id="g36345-6"
transform="matrix(1.1658027,0,0,1.1657997,198.71028,-2.0560643)">
@@ -81499,32 +80302,26 @@
sodipodi:end="5.7595865"
inkscape:transform-center-x="2.8145777" />
</g>
- <path
+ <circle
transform="matrix(0.8124999,0,0,0.8045157,241.75,163.13011)"
- sodipodi:type="arc"
- style="fill:none;stroke:#000000;stroke-width:0.98948926;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:#000000;stroke-width:0.98948926;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path36361-7"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path36365-0"
- style="fill:none;stroke:url(#linearGradient37503-1-7);stroke-width:1.45605874;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.6860851,0,0,0.6874876,258.44808,176.87656)" />
+ style="fill:none;stroke:url(#linearGradient37503-1-7);stroke-width:1.45605874;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.6860851,0,0,0.6874876,258.44808,176.87656)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
@@ -81532,7 +80329,7 @@
id="ICON_COLOR_GREEN"
transform="translate(84.000002,128.99999)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect36341-7-6"
width="16"
height="16"
@@ -81541,19 +80338,16 @@
<g
transform="translate(0,-12)"
id="g36343-6-8">
- <path
+ <circle
transform="matrix(-0.7451143,-0.08386971,0.08492794,-0.7396793,437.33358,356.39712)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path36363-9-4"
- style="opacity:0.3;fill:url(#radialGradient37501-4-9-0);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- sodipodi:type="arc" />
+ style="display:inline;opacity:0.3;fill:url(#radialGradient37501-4-9-0);fill-opacity:1;fill-rule:nonzero;stroke:none"
+ cx="132"
+ cy="118"
+ r="8" />
<g
id="g36345-6-9"
transform="matrix(1.1658027,0,0,1.1657997,198.71028,-2.0560643)">
@@ -81659,32 +80453,26 @@
sodipodi:end="5.7595865"
inkscape:transform-center-x="2.8145777" />
</g>
- <path
+ <circle
transform="matrix(0.8124999,0,0,0.8045157,241.75,163.13011)"
- sodipodi:type="arc"
- style="fill:none;stroke:#000000;stroke-width:0.98948926;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:#000000;stroke-width:0.98948926;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path36361-7-9"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path36365-0-7"
- style="fill:none;stroke:url(#linearGradient37503-1-9-9);stroke-width:1.45605874;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.6860851,0,0,0.6874876,258.44808,176.87656)" />
+ style="fill:none;stroke:url(#linearGradient37503-1-9-9);stroke-width:1.45605874;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.6860851,0,0,0.6874876,258.44808,176.87656)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
@@ -81692,7 +80480,7 @@
id="ICON_COLOR_BLUE"
transform="translate(104.99111,129.00001)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect36341-7-4"
width="16"
height="16"
@@ -81701,19 +80489,16 @@
<g
transform="translate(0,-12)"
id="g36343-6-2">
- <path
+ <circle
transform="matrix(-0.7451143,-0.08386971,0.08492794,-0.7396793,437.33358,356.39712)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path36363-9-0"
- style="opacity:0.3;fill:url(#radialGradient37501-4-6-8);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- sodipodi:type="arc" />
+ style="display:inline;opacity:0.3;fill:url(#radialGradient37501-4-6-8);fill-opacity:1;fill-rule:nonzero;stroke:none"
+ cx="132"
+ cy="118"
+ r="8" />
<g
id="g36345-6-4"
transform="matrix(1.1658027,0,0,1.1657997,198.71028,-2.0560643)">
@@ -81819,32 +80604,26 @@
sodipodi:end="5.7595865"
inkscape:transform-center-x="2.8145777" />
</g>
- <path
+ <circle
transform="matrix(0.8124999,0,0,0.8045157,241.75,163.13011)"
- sodipodi:type="arc"
- style="fill:none;stroke:#000000;stroke-width:0.98948926;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:#000000;stroke-width:0.98948926;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path36361-7-0"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path36365-0-0"
- style="fill:none;stroke:url(#linearGradient37503-1-1-1);stroke-width:1.45605874;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.6860851,0,0,0.6874876,258.44808,176.87656)" />
+ style="fill:none;stroke:url(#linearGradient37503-1-1-1);stroke-width:1.45605874;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.6860851,0,0,0.6874876,258.44808,176.87656)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
@@ -81855,71 +80634,56 @@
transform="translate(83.990364,83.999999)"
id="g42209-9"
style="opacity:0.5">
- <path
+ <circle
transform="matrix(0.9361892,0,0,0.9375002,-26.576994,10.374973)"
- sodipodi:type="arc"
- style="fill:#ffd5d5;fill-opacity:0.58823529;fill-rule:nonzero;stroke:#800000;stroke-width:1.06741309;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:#ffd5d5;fill-opacity:0.58823529;fill-rule:nonzero;stroke:#800000;stroke-width:1.06741309;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path42211-6"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path42213-0"
- style="fill:none;stroke:url(#linearGradient42487-4-5);stroke-width:1.22662127;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.814129,0,0,0.816369,-10.451999,24.674751)" />
- <path
+ style="fill:none;stroke:url(#linearGradient42487-4-5);stroke-width:1.22662127;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.814129,0,0,0.816369,-10.451999,24.674751)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.6848076,0,0,0.6867124,6.6184411,39.974237)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient42489-5-9);stroke-width:1.45823753;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient42489-5-9);stroke-width:1.45823753;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path42215-8"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.814129,0,0,0.816369,-10.451999,24.674751)"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient42491-0-9);stroke-width:1.22662127;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient42491-0-9);stroke-width:1.22662127;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path42217-3"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path17230"
- style="fill:none;stroke:url(#linearGradient17232-8);stroke-width:3.2130022;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.31076006,0,0,0.31171146,55.992715,84.224347)" />
+ style="fill:none;stroke:url(#linearGradient17232-8);stroke-width:3.2130022;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.31076006,0,0,0.31171146,55.992715,84.224347)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
transform="matrix(1.3088013,0,0,1.3078064,114.94487,78.842325)"
@@ -81933,7 +80697,7 @@
style="display:inline;enable-background:new"
id="ICON_MOD_DYNAMICPAINT">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect18695-5"
width="16"
height="16"
@@ -81948,12 +80712,12 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
id="path18699-1"
- d="m 330,-107.75 -5,2 0.0372,6.324398 5,2.71875 4.99999,-2.71875 L 335,-105.75 l -5,-2 z"
- style="fill:none;stroke:url(#linearGradient28405-0);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ d="m 330,-107.75 -5,2 0.0372,6.324398 5,2.71875 4.99999,-2.71875 L 335,-105.75 Z"
+ style="fill:none;stroke:url(#linearGradient28405-0);stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
- style="fill:url(#linearGradient18721-1-6);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 330.03717,-107.6131 -5,1.875 0,6.312498 5,2.71875 4.99999,-2.71875 0,-6.312498 -4.99999,-1.875 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient18721-1-6);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
+ d="m 330.03717,-107.6131 -5,1.875 v 6.312498 l 5,2.71875 4.99999,-2.71875 v -6.312498 z"
id="path18719-9" />
<g
transform="translate(179,-179)"
@@ -81964,20 +80728,20 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
sodipodi:nodetypes="ccccc"
- style="fill:url(#linearGradient18728-6-0);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 146.0019,73.295281 5,-1.894157 5,1.894157 -5,2.073959 -5,-2.073959 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient18728-6-0);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
+ d="m 146.0019,73.295281 5,-1.894157 5,1.894157 -5,2.073959 z"
id="path18707-3" />
</g>
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc"
- style="fill:url(#linearGradient18765-0-9);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+ style="display:inline;fill:url(#linearGradient18765-0-9);fill-opacity:1;fill-rule:evenodd;stroke:none"
d="m 334.98437,-105.6875 -5,2.04687 0.0156,6.89063 5,-2.75 z"
id="path18763-6" />
<path
inkscape:connector-curvature="0"
style="fill:none;stroke:url(#linearGradient18712-0-7);stroke-width:0.99999982px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 334.5,-105.25 0.002,5.587357 -4.5,2.480073 -4.5,-2.480073 -0.002,-5.587357 4.5,-1.75 4.5,1.75 z"
+ d="m 334.5,-105.25 0.002,5.587357 -4.5,2.480073 -4.5,-2.480073 L 325.5,-105.25 330,-107 Z"
id="path18709-9"
sodipodi:nodetypes="ccccccc" />
<g
@@ -81990,19 +80754,19 @@
transform="translate(-332.03324,273.93783)">
<path
inkscape:connector-curvature="0"
- style="fill:#2968c3;fill-opacity:1;fill-rule:evenodd;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 506.48389,-17.45862 0,-1 c 4.75,-1 2.25,-4.5 6.31852,-4.187139 0.70341,0.496889 0.93148,1.187139 0.93148,2.122782 0,3.064357 -2.5,3.314357 -7.25,3.064357 l 0,0 0,0 0,0 z"
+ style="fill:#2968c3;fill-opacity:1;fill-rule:evenodd;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 506.48389,-17.45862 v -1 c 4.75,-1 2.25,-4.5 6.31852,-4.187139 0.70341,0.496889 0.93148,1.187139 0.93148,2.122782 0,3.064357 -2.5,3.314357 -7.25,3.064357 z"
id="path52879-3"
sodipodi:nodetypes="ccccc" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc"
id="path52881-6"
- d="m 505.98389,-17.522977 c 5.75,-0.75 2.71305,-4.172284 6.75,-5.25 0.70341,0.496889 1.61991,1.711436 1.75268,2.186272 0,3.572675 -4.12319,3.136436 -8.50268,3.063728 l 0,0 0,0 0,0 z"
- style="opacity:0.7;fill:url(#radialGradient53141-5-8);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m 505.98389,-17.522977 c 5.75,-0.75 2.71305,-4.172284 6.75,-5.25 0.70341,0.496889 1.61991,1.711436 1.75268,2.186272 0,3.572675 -4.12319,3.136436 -8.50268,3.063728 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:url(#radialGradient53141-5-8);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:#0b1728;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0b1728;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 515.48389,-25.95862 -2.75,3.25 1.75,2.25 3,-3"
id="path52883-5"
sodipodi:nodetypes="cccc" />
@@ -82010,18 +80774,18 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc"
id="path52885-6"
- d="m 514.98389,-24.95862 -2.25,2.5 1.37109,1.875 2.37891,-2.375 -1.5,-2 z"
+ d="m 514.98389,-24.95862 -2.25,2.5 1.37109,1.875 2.37891,-2.375 z"
style="fill:url(#linearGradient53143-6-3);fill-opacity:1;fill-rule:evenodd;stroke:none" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc"
id="path52887-1"
d="m 520.48389,-31.45862 -6,6.75 2,2.25 4,-4"
- style="fill:none;stroke:#0b1728;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0b1728;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
- style="fill:url(#linearGradient53145-1-0);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.23326063;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 520.98389,-31.95862 -6.75,7.75 1.75,1.75 5,-4.5 0,-5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient53145-1-0);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.23326063;marker:none;enable-background:accumulate"
+ d="m 520.98389,-31.95862 -6.75,7.75 1.75,1.75 5,-4.5 z"
id="path52889-3"
sodipodi:nodetypes="ccccc" />
<path
@@ -82035,7 +80799,7 @@
sodipodi:nodetypes="ccc"
id="path52893-4"
d="m 511.98389,-21.772977 -1.25,1.25 c -0.96702,0.819679 -0.76749,2.123051 -3.25,2.314357"
- style="opacity:0.4;fill:none;stroke:url(#linearGradient53147-9-4);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
+ style="display:inline;opacity:0.4;fill:none;stroke:url(#linearGradient53147-9-4);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
</g>
</g>
</g>
@@ -82043,7 +80807,7 @@
style="display:inline;enable-background:new"
id="ICON_MOD_VERTEX_WEIGHT">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect18695-2"
width="16"
height="16"
@@ -82058,44 +80822,44 @@
id="g27791"
style="display:inline;enable-background:new">
<path
- style="color:#000000;fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 173.5625,249.6875 0.5,0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 173.5625,249.6875 h 0.5"
id="path31838-1-6-1-4"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
id="path31840-4-3-0-6"
- d="m 173.5625,249.6875 0.5,0"
- style="color:#000000;fill:none;stroke:#181dff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 173.5625,249.6875 h 0.5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#181dff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
- style="fill:none;stroke:#2f4cff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline;enable-background:new"
- d="m 173.3125,250.1875 -0.25,-0.5 0.25,-0.5 1,0"
+ style="display:inline;fill:none;stroke:#2f4cff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
+ d="m 173.3125,250.1875 -0.25,-0.5 0.25,-0.5 h 1"
id="path31844-1-3-6-4"
inkscape:connector-curvature="0" />
</g>
<g
transform="translate(-13.91186,-7.9082992)"
id="g27791-5"
- style="fill:none;display:inline;enable-background:new">
+ style="display:inline;fill:none;enable-background:new">
<path
- style="color:#000000;fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 173.5625,249.6875 0.5,0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 173.5625,249.6875 h 0.5"
id="path31838-1-6-1-4-5"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
id="path31840-4-3-0-6-0"
- d="m 173.5625,249.6875 0.5,0"
- style="color:#000000;fill:none;stroke:#00cc19;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 173.5625,249.6875 h 0.5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#00cc19;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
- style="fill:none;stroke:#34ff24;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline;enable-background:new"
- d="m 173.3125,250.1875 -0.25,-0.5 0.25,-0.5 1,0"
+ style="display:inline;fill:none;stroke:#34ff24;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
+ d="m 173.3125,250.1875 -0.25,-0.5 0.25,-0.5 h 1"
id="path31844-1-3-6-4-7"
inkscape:connector-curvature="0" />
</g>
@@ -82104,21 +80868,21 @@
id="g27791-9"
style="display:inline;enable-background:new">
<path
- style="color:#000000;fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 173.5625,249.6875 0.5,0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 173.5625,249.6875 h 0.5"
id="path31838-1-6-1-4-7"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
id="path31840-4-3-0-6-5"
- d="m 173.5625,249.6875 0.5,0"
- style="color:#000000;fill:none;stroke:#ffff0a;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 173.5625,249.6875 h 0.5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffff0a;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
- style="fill:none;stroke:#fcff7b;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline;enable-background:new"
- d="m 173.3125,250.1875 -0.25,-0.5 0.25,-0.5 1,0"
+ style="display:inline;fill:none;stroke:#fcff7b;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
+ d="m 173.3125,250.1875 -0.25,-0.5 0.25,-0.5 h 1"
id="path31844-1-3-6-4-9"
inkscape:connector-curvature="0" />
</g>
@@ -82127,44 +80891,44 @@
id="g27791-0"
style="display:inline;enable-background:new">
<path
- style="color:#000000;fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 173.5625,249.6875 0.5,0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 173.5625,249.6875 h 0.5"
id="path31838-1-6-1-4-54"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
id="path31840-4-3-0-6-1"
- d="m 173.5625,249.6875 0.5,0"
- style="color:#000000;fill:none;stroke:#ff0606;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 173.5625,249.6875 h 0.5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ff0606;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
- style="fill:none;stroke:#ff3131;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline;enable-background:new"
- d="m 173.3125,250.1875 -0.25,-0.5 0.25,-0.5 1,0"
+ style="display:inline;fill:none;stroke:#ff3131;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
+ d="m 173.3125,250.1875 -0.25,-0.5 0.25,-0.5 h 1"
id="path31844-1-3-6-4-4"
inkscape:connector-curvature="0" />
</g>
<g
transform="translate(-17.39403,-7.3654702)"
id="g27791-5-2"
- style="fill:none;display:inline;enable-background:new">
+ style="display:inline;fill:none;enable-background:new">
<path
- style="color:#000000;fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 173.5625,249.6875 0.5,0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 173.5625,249.6875 h 0.5"
id="path31838-1-6-1-4-5-4"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
id="path31840-4-3-0-6-0-6"
- d="m 173.5625,249.6875 0.5,0"
- style="color:#000000;fill:none;stroke:#00bc86;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 173.5625,249.6875 h 0.5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#00bc86;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
- style="fill:none;stroke:#24ffea;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline;enable-background:new"
- d="m 173.3125,250.1875 -0.25,-0.5 0.25,-0.5 1,0"
+ style="display:inline;fill:none;stroke:#24ffea;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
+ d="m 173.3125,250.1875 -0.25,-0.5 0.25,-0.5 h 1"
id="path31844-1-3-6-4-7-2"
inkscape:connector-curvature="0" />
</g>
@@ -82176,11 +80940,11 @@
sodipodi:nodetypes="ccccccc"
id="path18699-7"
d="m 159.95712,247.8542 -3.25648,1.32353 -1.7128,5.25087 5,2.71875 4.99999,-2.71875 -1.77423,-5.25087 z"
- style="fill:none;stroke:#0b1728;stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ style="fill:none;stroke:#0b1728;stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0"
- style="fill:url(#linearGradient16010);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient16010);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
d="m 159.98133,247.9448 -3.25648,1.2408 -1.73704,5.243 5,2.71875 4.99999,-2.71875 -1.75,-5.243 z"
id="path18719-4" />
<g
@@ -82192,14 +80956,14 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
sodipodi:nodetypes="ccccc"
- style="fill:url(#linearGradient15994);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient15994);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
d="m 147.75124,75.228495 3.25648,-1.253486 3.25648,1.253486 -3.25648,1.372473 z"
id="path18707-0" />
</g>
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc"
- style="fill:url(#linearGradient16005);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+ style="display:inline;fill:url(#linearGradient16005);fill-opacity:1;fill-rule:evenodd;stroke:none"
d="m 163.2136,249.34317 -3.25648,1.32353 -0.006,6.4375 5,-2.75 z"
id="path18763-7" />
<path
@@ -82213,19 +80977,17 @@
inkscape:connector-curvature="0"
id="path14332-7-5"
d="m 161.04227,247.90828 c 0.24495,-0.26634 0.39423,-0.62011 0.39423,-1.00834 0,-0.8284 -0.67974,-1.49994 -1.51825,-1.49994 -0.83851,0 -1.51825,0.67154 -1.51825,1.49994 0,0.43979 0.0353,0.57241 0.34052,0.84677"
- style="fill:#e6e6e6;fill-opacity:1;stroke:#0b1728;stroke-width:2.80000019;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new" />
- <path
+ style="display:inline;fill:#e6e6e6;fill-opacity:1;stroke:#0b1728;stroke-width:2.80000019;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new" />
+ <ellipse
transform="matrix(0.8540253,0,0,-1.199954,81.751209,396.89409)"
- d="m 93.25,125 a 1.75,1.25 0 1 1 -3.5,0 1.75,1.25 0 1 1 3.5,0 z"
- sodipodi:ry="1.25"
- sodipodi:rx="1.75"
- sodipodi:cy="125"
- sodipodi:cx="91.5"
id="path14336-5-6"
- style="fill:#000000;fill-opacity:1;stroke:url(#linearGradient15989);stroke-width:1.28417933;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
- sodipodi:type="arc" />
+ style="display:inline;fill:#000000;fill-opacity:1;stroke:url(#linearGradient15989);stroke-width:1.28417933;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ cx="91.5"
+ cy="125"
+ rx="1.75"
+ ry="1.25" />
<rect
- style="opacity:0.75;fill:#162d50;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.75;fill:#162d50;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;enable-background:accumulate"
id="rect14340-2-4"
width="2.0011597"
height="2"
@@ -82243,11 +81005,11 @@
height="16"
width="16"
id="rect18695-5-8"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g16203">
<rect
- style="opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect27661-6"
width="16"
height="16"
@@ -82268,11 +81030,11 @@
d="m 140.02478,121.67739 -4.38034,-0.0133 0.0328,4.36819 -6.18368,-0.0323 -0.0643,-16 6.1827,-0.0158 -0.0143,4.42449 4.42553,-0.0164 z"
clip-path="none"
mask="none"
- style="fill:url(#linearGradient15368-7);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:1.45480967;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient15368-7);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:1.45480967;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
transform="matrix(0.75,0,0,0.75,29.5,135)" />
<path
transform="matrix(0.75,0,0,0.75,29.5,135)"
- style="fill:url(#linearGradient15326-8);fill-opacity:1;stroke:#183e75;stroke-width:1.45480967;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient15326-8);fill-opacity:1;stroke:#183e75;stroke-width:1.45480967;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
mask="none"
clip-path="none"
d="m 135.64444,121.66409 -6.15088,-0.006 -0.0643,-7.28458 6.1684,0.0349 z"
@@ -82281,7 +81043,7 @@
sodipodi:nodetypes="ccccc" />
<path
transform="matrix(0.75,0,0,0.75,29.5,135)"
- style="fill:none;stroke:#0b1728;stroke-width:1.45480967;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0b1728;stroke-width:1.45480967;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
mask="none"
clip-path="none"
d="m 140.02478,121.67739 -4.38034,-0.0133 0.0328,4.36819 -6.18368,-0.0323 -0.0643,-16 6.1827,-0.0158 -0.0143,4.42449 4.42553,-0.0164 z"
@@ -82291,7 +81053,7 @@
</g>
<g
id="g27669-3"
- style="opacity:0.55;display:inline;enable-background:new"
+ style="display:inline;opacity:0.55;enable-background:new"
transform="translate(-42.04936,-19.020799)">
<path
inkscape:connector-curvature="0"
@@ -82299,9 +81061,9 @@
sodipodi:nodetypes="cccc"
id="path27671-9"
d="M 243.50439,274.05251 237.04285,268 l 0.43058,-0.40461 6.03096,-5.66723"
- style="fill:url(#linearGradient42432-3-3);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.87159598;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient42432-3-3);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.87159598;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
- style="fill:url(#linearGradient15281-5);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.87159598;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient15281-5);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.87159598;marker:none;enable-background:accumulate"
d="M 243.55198,273.44361 237.66157,268 l 5.84282,0.0171"
id="path15273"
sodipodi:nodetypes="ccc"
@@ -82312,61 +81074,61 @@
sodipodi:nodetypes="ccc"
id="path27673-0-1"
d="m 200.70018,253.41671 -4.93656,-4.42903 4.93656,-4.57097"
- style="fill:none;stroke:url(#linearGradient15620-8);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient15620-8);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<g
id="g27675-38"
style="display:inline;enable-background:new"
- transform="matrix(0.7071068,-0.7071068,0.7071068,0.7071068,-41.79538,113.49288)">
+ transform="rotate(-45,116.10034,107.19792)">
<path
inkscape:connector-curvature="0"
- style="opacity:0.1;fill:none;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:none;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 73.545051,272.22272 7.071067,-7.07107"
id="path27679-2"
sodipodi:nodetypes="cc" />
<path
inkscape:connector-curvature="0"
id="path42388-6"
- style="opacity:0.75;fill:none;stroke:#28220b;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.75;fill:none;stroke:#28220b;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
d="m 71.600508,272.3995 0.707107,-0.7071 m 2.121319,-2.12133 0.707107,-0.7071 m 2.121321,-2.12133 0.707107,-0.7071 m 2.121319,-2.12133 0.707107,-0.7071" />
<path
inkscape:connector-curvature="0"
d="m 71.600508,272.3995 0.707107,-0.7071 m 2.121319,-2.12133 0.707107,-0.7071 m 2.121321,-2.12133 0.707107,-0.7071 m 2.121319,-2.12133 0.707107,-0.7071"
- style="fill:none;stroke:#ffe991;stroke-width:1.19999993;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffe991;stroke-width:1.19999993;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path42359-8" />
</g>
<path
- style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:0.6507937;display:inline;enable-background:new"
- d="m 207.43504,247.49483 1.06248,0"
+ style="display:inline;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:0.6507937;enable-background:new"
+ d="m 207.43504,247.49483 h 1.06248"
id="path15333"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
- style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:0.6507937;display:inline;enable-background:new"
- d="m 203.9116,244.49483 1.51561,0"
+ style="display:inline;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:0.6507937;enable-background:new"
+ d="m 203.9116,244.49483 h 1.51561"
id="path15333-4"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
- style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:0.6507937;display:inline;enable-background:new"
- d="m 203.9116,247.51045 1.54686,0"
+ style="display:inline;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:0.6507937;enable-background:new"
+ d="m 203.9116,247.51045 h 1.54686"
id="path15333-3"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
- style="fill:none;stroke:#1b4685;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ style="display:inline;fill:none;stroke:#1b4685;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
d="m 207.38817,249.47921 0.0703,0.004"
id="path15333-2"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
- style="fill:none;stroke:#185e98;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ style="display:inline;fill:none;stroke:#185e98;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
d="m 203.38817,249.47921 1.07811,0.0118"
id="path15333-2-7"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
- style="fill:none;stroke:#143564;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ style="display:inline;fill:none;stroke:#143564;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
d="m 204.37254,253.47921 1.07811,0.0118"
id="path15333-2-7-6"
inkscape:connector-curvature="0"
@@ -82382,26 +81144,26 @@
height="16"
width="16"
id="rect18695-5-0"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g38510"
style="display:inline;enable-background:new"
transform="translate(-0.04936017,-0.02079917)">
<rect
- style="opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect41297-5"
width="10"
height="16"
x="239"
y="241" />
<path
- style="fill:url(#linearGradient15474-9);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 244,242.5 c -1.8975,0 -3.4375,1.12 -3.4375,2.5 l 0,2.6875 c -0.79985,0.58688 -1.28125,1.40301 -1.28125,2.4375 0,1.01219 0.48237,1.85277 1.28125,2.4375 l 0,1.4375 c 0,1.38 1.54,2.5 3.4375,2.5 1.8975,0 3.4375,-1.12 3.4375,-2.5 l 0,-1.375 c 0.82151,-0.58809 1.3125,-1.44988 1.3125,-2.5 0,-1.02039 -0.50216,-1.82067 -1.3125,-2.40625 l 0,-2.71875 c 0,-1.38 -1.54,-2.5 -3.4375,-2.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient15474-9);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
+ d="m 244,242.5 c -1.8975,0 -3.4375,1.12 -3.4375,2.5 v 2.6875 c -0.79985,0.58688 -1.28125,1.40301 -1.28125,2.4375 0,1.01219 0.48237,1.85277 1.28125,2.4375 V 254 c 0,1.38 1.54,2.5 3.4375,2.5 1.8975,0 3.4375,-1.12 3.4375,-2.5 v -1.375 c 0.82151,-0.58809 1.3125,-1.44988 1.3125,-2.5 0,-1.02039 -0.50216,-1.82067 -1.3125,-2.40625 V 245 c 0,-1.38 -1.54,-2.5 -3.4375,-2.5 z"
id="path41299-1"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
- style="opacity:0.44561403;fill:none;stroke:url(#linearGradient15467-9);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.44561403;fill:none;stroke:url(#linearGradient15467-9);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 246.78175,244.56297 c -0.49244,0.67079 -1.66895,1.05852 -2.78633,1.05852 -1.11738,0 -2.54413,-0.3096 -2.81106,-1.12463"
id="path41303-1"
sodipodi:nodetypes="czs" />
@@ -82410,31 +81172,31 @@
sodipodi:nodetypes="csc"
id="path41307-7"
d="m 241.4192,253.61696 c 0.11987,0.88868 0.64962,2.00518 2.61584,2.01183 1.81407,0.006 2.49621,-1.01999 2.49621,-2.00379"
- style="fill:none;stroke:#1b4685;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.64285715;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#1b4685;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:0.64285715;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="czcsssc"
id="path15557"
d="m 247.22147,247.96875 c -0.5625,0.53865 -1.82275,0.90274 -3.1948,0.90274 -1.37205,0 -2.25345,-0.3128 -3.15167,-0.80899 -0.625,0.59375 -1.17803,1.9131 -0.72606,2.94175 0.61274,1.39456 1.58368,2.00791 3.99437,2.02034 2.38609,0.0123 3.13442,-0.85323 3.75195,-2.02459 0.57357,-1.08798 0.16996,-2.1875 -0.67379,-3.03125 z"
- style="fill:none;stroke:url(#linearGradient15601-9);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient15601-9);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path41305-9"
- d="m 244,242.5 c -2.18749,0 -3.4375,1.12 -3.4375,2.5 l 0,2.3125 c -0.8822,0.72794 -1.4375,1.73295 -1.4375,2.84375 0,1.1108 0.5553,2.11581 1.4375,2.84375 l 0,0.5 c 0,2 1.54,3 3.4375,3 1.8975,0 3.4375,-1 3.4375,-3 l 0,-0.5 c 0.8822,-0.72794 1.4375,-1.73295 1.4375,-2.84375 0,-1.1108 -0.5553,-2.11581 -1.4375,-2.84375 l 0,-2.3125 c 0,-1.38 -1.24999,-2.5 -3.4375,-2.5 z"
- style="fill:none;stroke:#0b1728;stroke-width:0.80000007;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m 244,242.5 c -2.18749,0 -3.4375,1.12 -3.4375,2.5 v 2.3125 c -0.8822,0.72794 -1.4375,1.73295 -1.4375,2.84375 0,1.1108 0.5553,2.11581 1.4375,2.84375 v 0.5 c 0,2 1.54,3 3.4375,3 1.8975,0 3.4375,-1 3.4375,-3 V 253 c 0.8822,-0.72794 1.4375,-1.73295 1.4375,-2.84375 0,-1.1108 -0.5553,-2.11581 -1.4375,-2.84375 V 245 c 0,-1.38 -1.24999,-2.5 -3.4375,-2.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0b1728;stroke-width:0.80000007;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<g
style="display:inline;enable-background:new"
id="g41715-3"
transform="matrix(0.75,0,0,0.625,396.9999,55.104854)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect41717-2"
width="16"
height="16"
x="-211.99985"
y="304" />
<g
- style="opacity:0.8;display:inline;enable-background:new"
+ style="display:inline;opacity:0.8;enable-background:new"
transform="translate(73.00016,196)"
id="g41719-6" />
<g
@@ -82447,12 +81209,12 @@
</g>
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:url(#linearGradient15576-5);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient15576-5);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 247.03531,249.33728 c -0.5,0.22615 -1.69837,0.52774 -2.8823,0.52774 -1.18393,0 -1.75974,-0.0315 -3.02667,-0.49649"
id="path41303-1-0"
sodipodi:nodetypes="czs" />
<path
- style="fill:none;stroke:#0b1728;stroke-width:0.80000007;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0b1728;stroke-width:0.80000007;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 250.25295,253 c 0.73683,-0.72794 1.01313,-1.73295 1.01313,-2.84375 0,-1.1108 -0.2763,-2.11581 -1.01313,-2.84375"
id="path15603"
inkscape:connector-curvature="0"
@@ -82462,9 +81224,9 @@
inkscape:connector-curvature="0"
id="path15609"
d="m 249.80713,252.38128 c 0.53336,-0.70678 0.65533,-1.36527 0.65533,-2.22503 0,-0.80144 -0.27822,-1.5779 -0.65533,-2.18084"
- style="fill:none;stroke:#aacee7;stroke-width:0.80000007;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.80392157;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#aacee7;stroke-width:0.80000007;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:0.80392157;marker:none;enable-background:accumulate" />
<path
- style="fill:none;stroke:#0b1728;stroke-width:0.80000007;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0b1728;stroke-width:0.80000007;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 237.81491,253 c -0.73683,-0.72794 -1.01313,-1.73295 -1.01313,-2.84375 0,-1.1108 0.2763,-2.11581 1.01313,-2.84375"
id="path15603-0"
inkscape:connector-curvature="0"
@@ -82474,7 +81236,7 @@
inkscape:connector-curvature="0"
id="path15609-7"
d="m 238.26073,252.38128 c -0.53336,-0.70678 -0.65533,-1.36527 -0.65533,-2.22503 0,-0.80144 0.27822,-1.5779 0.65533,-2.18084"
- style="fill:none;stroke:#aacee7;stroke-width:0.80000007;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.80392157;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#aacee7;stroke-width:0.80000007;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:0.80392157;marker:none;enable-background:accumulate" />
</g>
</g>
<g
@@ -82485,7 +81247,7 @@
height="16"
width="16"
id="rect41153-9"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="translate(-0.96226475,0.05341077)"
id="g16521">
@@ -82495,7 +81257,7 @@
height="12.983693"
width="12.031255"
id="rect41157-7"
- style="fill:url(#linearGradient81258);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.90000004;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:url(#linearGradient81258);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.90000004;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
@@ -82503,13 +81265,13 @@
sodipodi:nodetypes="ccc"
id="path41159-4"
d="m 281.45064,253.1653 0.0312,-9.6861 3.81301,0.0312"
- style="fill:none;stroke:url(#linearGradient81260);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:url(#linearGradient81260);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:0.53174594;display:inline;enable-background:new"
+ style="display:inline;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:0.53174594;enable-background:new"
d="m 291.50046,246.74298 -3.08218,7.80871"
id="path15817-5"
inkscape:connector-curvature="0"
@@ -82521,12 +81283,12 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
- style="fill:none;stroke:#555555;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#555555;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 286.48189,242.32295 0.0625,12.09375"
id="path15730"
inkscape:connector-curvature="0" />
<rect
- style="fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;display:inline;enable-background:new"
+ style="display:inline;fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;enable-background:new"
id="rect16285-9-59"
width="2.0172396"
height="2.0000157"
@@ -82536,53 +81298,53 @@
sodipodi:nodetypes="ccc"
id="path41159-4-9"
d="m 287.42759,252.9156 -0.0313,-9.49861 3.85989,0.0312"
- style="fill:none;stroke:url(#linearGradient81262);stroke-width:0.99999982px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline;enable-background:new"
+ style="display:inline;fill:none;stroke:url(#linearGradient81262);stroke-width:0.99999982px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#1b4685;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#1b4685;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 292.04439,242.6042 -5.18214,13.04504"
id="path15722"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
- style="fill:none;stroke:#1b4685;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#1b4685;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 286.07564,242.5417 -5.19822,12.90441"
id="path15726"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<rect
- style="fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;display:inline;enable-background:new"
+ style="display:inline;fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;enable-background:new"
id="rect16285-9-1"
width="2.0172396"
height="2.0000157"
x="285.47092"
y="241.53545" />
<rect
- style="fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;display:inline;enable-background:new"
+ style="display:inline;fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;enable-background:new"
id="rect16285-9-50"
width="2.0172396"
height="2.0000157"
x="285.47092"
y="254.48941" />
<rect
- style="fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;display:inline;enable-background:new"
+ style="display:inline;fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;enable-background:new"
id="rect16285-9-6"
width="2.0172396"
height="2.0000157"
x="291.48386"
y="254.48941" />
<rect
- style="fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;display:inline;enable-background:new"
+ style="display:inline;fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;enable-background:new"
id="rect16285-9-16"
width="2.0172396"
height="2.0000157"
x="291.45065"
y="241.47917" />
<rect
- style="fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;display:inline;enable-background:new"
+ style="display:inline;fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;enable-background:new"
id="rect16285-9-15"
width="2.0172396"
height="2.0000157"
@@ -82599,7 +81361,7 @@
height="16"
width="16"
id="rect18695-5-85"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g16254">
<path
@@ -82607,9 +81369,9 @@
inkscape:connector-curvature="0"
id="path15496"
d="m 220.26315,246.13546 c -0.0862,0.1378 -0.24068,0.22975 -0.40625,0.28125 -1.65981,0.47731 -3.15715,1.19818 -4.5,2.59375 -0.0159,0.0174 -0.0268,0.0393 -0.0312,0.0625 -0.001,0.0103 -0.001,0.0208 0,0.0312 -0.001,0.0103 -0.001,0.0208 0,0.0312 -0.001,0.0104 -0.001,0.0208 0,0.0312 0.0905,0.15733 0.21244,0.52956 0.25,0.8125 0.0551,0.41528 -0.0701,0.57924 -0.21875,0.8125 -0.0121,0.008 -0.0227,0.0191 -0.0312,0.0312 -0.001,0.0104 -0.001,0.0208 0,0.0312 -0.001,0.0103 -0.001,0.0208 0,0.0312 -0.001,0.0104 -0.001,0.0208 0,0.0312 0.008,0.0121 0.0191,0.0227 0.0312,0.0312 1.14704,1.20048 2.82583,2.11181 4.34375,2.15625 0.23229,0.01 0.47603,0.12502 0.59375,0.3125 0.16075,0.25148 0.43475,0.47431 0.75,0.65625 0.36481,0.21054 0.91885,0.30403 1.0936,0.3126 -0.22349,-0.50587 -0.17899,-0.77088 -0.0469,-0.99985 0.0995,-0.17241 0.27563,-0.29702 0.54688,-0.34375 1.23062,-0.212 2.86055,-0.63055 4.03125,-1.34375 0.29545,-0.18247 0.80307,-0.0462 1,0.25 0.55094,0.7385 1.45946,1.2674 2.03896,1.31646 -0.36853,-0.9196 -0.50376,-2.31287 -0.46489,-3.25371 0.0492,-1.1901 0.4842,-2.52395 1.04302,-3.51538 -0.16982,0.006 -0.65061,0.17808 -0.71074,0.20318 -0.7366,0.30737 -1.4716,0.94031 -1.90625,1.5625 -0.21933,0.29875 -0.71618,0.4032 -1,0.1875 -1.35724,-1.03154 -2.55364,-1.6969 -4.09375,-2.1875 -0.26943,-0.0858 -0.50165,-0.42209 -0.5,-0.71875 0.002,-0.30009 0.0702,-0.84684 0.12109,-1.07402 -0.58853,0.18102 -1.36128,0.81203 -1.93359,1.66737 z"
- style="fill:none;stroke:url(#linearGradient38716-8);stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;display:inline;enable-background:new" />
+ style="display:inline;fill:none;stroke:url(#linearGradient38716-8);stroke-width:0.60000002;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;enable-background:new" />
<path
- style="fill:url(#radialGradient15517-8);fill-opacity:1;stroke:#0b1728;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
+ style="display:inline;fill:url(#radialGradient15517-8);fill-opacity:1;stroke:#0b1728;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
d="m 219.6786,253.82631 c -1.96642,-0.0576 -4.05614,-1.31113 -5.29929,-2.86623 0.0654,-0.19861 0.53326,-0.60538 0.48122,-0.99782 -0.0595,-0.44857 -0.37333,-0.70398 -0.47362,-0.96241 1.5443,-1.81083 3.32964,-2.734 5.24944,-3.28607 0.78991,-1.17883 1.845,-2.02236 3.60073,-2.29898 -0.23142,0.67492 -0.40517,1.48328 -0.41544,2.14499 1.60855,0.52209 2.84544,1.19775 4.24601,2.26976 1.05365,-1.50823 3.37131,-2.56597 4.4316,-1.95202 -0.84375,1.27451 -1.45665,2.90118 -1.50672,4.17975 -0.0491,1.25211 0.0947,2.42706 0.75517,3.90477 -1.30024,0.35961 -2.91498,-0.40691 -3.71178,-1.61649 -1.31489,0.80105 -3.03198,1.22409 -4.31307,1.42108 0.13331,0.35326 0.31382,0.79794 0.42375,1.41797 -1.5092,0.0506 -2.82758,-0.35645 -3.468,-1.3583 z"
id="path26202"
inkscape:connector-curvature="0"
@@ -82618,14 +81380,14 @@
inkscape:connector-curvature="0"
id="path38361"
d="m 218.00011,250.69439 c -0.39287,0 -0.71132,-0.31189 -0.71132,-0.69657 0,-0.38468 0.31845,-0.69659 0.71132,-0.69659 0.39025,0 0.70763,0.30797 0.71128,0.69334 0,0.38793 -0.31844,0.69982 -0.71128,0.69982 z"
- style="fill:none;stroke:url(#linearGradient15553-4);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.72222218;stroke-dasharray:none;display:inline;enable-background:new" />
+ style="display:inline;fill:none;stroke:url(#linearGradient15553-4);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.72222218;enable-background:new" />
<path
- style="fill:none;stroke:#183e75;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
+ style="display:inline;fill:none;stroke:#183e75;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
d="m 217.62649,250.02159 c -0.17675,0 -0.32002,-0.1385 -0.32002,-0.30932 0,-0.17083 0.14327,-0.30933 0.32002,-0.30933 0.17557,0 0.31836,0.13676 0.32,0.30789 0,0.17226 -0.14327,0.31076 -0.32,0.31076 z"
id="path26221"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient15545-5);stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.58823529;stroke-dasharray:none;display:inline;enable-background:new"
+ style="display:inline;fill:none;stroke:url(#linearGradient15545-5);stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.58823529;enable-background:new"
d="m 219.95124,248.20112 c 0.63267,0.99518 0.82685,2.28773 0.0962,3.39254"
id="path26223-2"
inkscape:connector-curvature="0"
@@ -82635,11 +81397,11 @@
sodipodi:type="inkscape:offset"
inkscape:radius="-0.21185222"
inkscape:original="M 222.25 244.5 C 221.66147 244.68102 220.88481 245.30091 220.3125 246.15625 C 220.2263 246.29405 220.07182 246.386 219.90625 246.4375 C 218.24644 246.91481 216.7491 247.63568 215.40625 249.03125 C 215.39035 249.04865 215.3794 249.07055 215.375 249.09375 C 215.374 249.10405 215.374 249.1146 215.375 249.125 C 215.374 249.1353 215.374 249.14585 215.375 249.15625 C 215.374 249.16665 215.374 249.1771 215.375 249.1875 C 215.4655 249.34483 215.58744 249.71706 215.625 250 C 215.6801 250.41528 215.5549 250.57924 215.40625 250.8125 C 215.39415 250.8205 215.3835 250.83165 215.375 250.84375 C 215.374 250.85415 215.374 250.8646 215.375 250.875 C 215.374 250.8853 215.374 250.89585 215.375 250.90625 C 215.374 250.91665 215.374 250.9271 215.375 250.9375 C 215.383 250.9496 215.39415 250.96025 215.40625 250.96875 C 216.55329 252.16923 218.23208 253.08056 219.75 253.125 C 219.98229 253.135 220.22603 253.25002 220.34375 253.4375 C 220.5045 253.68898 220.7785 253.91181 221.09375 254.09375 C 221.45856 254.30429 222.01275 254.39768 222.1875 254.40625 C 221.96401 253.90038 221.99291 253.63522 222.125 253.40625 C 222.2245 253.23384 222.41625 253.10923 222.6875 253.0625 C 223.91812 252.8505 225.54805 252.43195 226.71875 251.71875 C 227.0142 251.53628 227.52182 251.67255 227.71875 251.96875 C 228.26969 252.70725 229.1705 253.23219 229.75 253.28125 C 229.38147 252.36165 229.24238 250.97209 229.28125 250.03125 C 229.33045 248.84115 229.78493 247.52268 230.34375 246.53125 C 230.17393 246.53725 229.68513 246.69365 229.625 246.71875 C 228.8884 247.02612 228.1534 247.65906 227.71875 248.28125 C 227.49942 248.58 227.00257 248.68445 226.71875 248.46875 C 225.36151 247.43721 224.16511 246.77185 222.625 246.28125 C 222.35557 246.19545 222.12335 245.85916 222.125 245.5625 C 222.127 245.26241 222.19911 244.72718 222.25 244.5 z "
- style="fill:none;stroke:url(#linearGradient15502-8);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
+ style="display:inline;fill:none;stroke:url(#linearGradient15502-8);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
id="path15500"
- d="m 221.96875,244.90625 c -0.47698,0.2556 -1.02431,0.71077 -1.46875,1.375 -0.12408,0.19836 -0.33308,0.28211 -0.53125,0.34375 a 0.21187341,0.21187341 0 0 1 0,0.0312 c -1.62449,0.46715 -3.06989,1.15677 -4.375,2.5 -0.005,0.005 0.005,0.026 0,0.0312 0.1061,0.21524 0.2123,0.49726 0.25,0.78125 0.0568,0.42776 -0.0841,0.69165 -0.21875,0.90625 1.11129,1.13328 2.71326,1.98992 4.125,2.03125 0.29567,0.0127 0.61425,0.14029 0.78125,0.40625 0.1325,0.20728 0.35983,0.42268 0.65625,0.59375 0.20197,0.11656 0.49212,0.2047 0.71875,0.25 -0.0302,-0.11277 -0.0911,-0.24526 -0.0937,-0.34375 -0.005,-0.19698 0.0446,-0.36065 0.125,-0.5 0.13631,-0.23619 0.40186,-0.41416 0.71875,-0.46875 1.21549,-0.20939 2.80996,-0.62559 3.9375,-1.3125 0.21394,-0.13213 0.48738,-0.12178 0.71875,-0.0625 0.22418,0.0574 0.42522,0.18054 0.5625,0.375 0.41333,0.55404 1.07488,0.98799 1.5625,1.15625 -0.29258,-0.93531 -0.41043,-2.11125 -0.375,-2.96875 0.0456,-1.10343 0.44992,-2.25295 0.9375,-3.21875 -0.14571,0.0415 -0.29515,0.0995 -0.28125,0.0937 -0.68743,0.28685 -1.40343,0.91443 -1.8125,1.5 a 0.21187341,0.21187341 0 0 1 -0.0312,0 c -0.14786,0.2014 -0.35962,0.32934 -0.59375,0.375 -0.23413,0.0457 -0.48506,-0.002 -0.6875,-0.15625 -1.34443,-1.0218 -2.51369,-1.67283 -4.03125,-2.15625 -0.1942,-0.0618 -0.35572,-0.18089 -0.46875,-0.34375 -0.11303,-0.16286 -0.18863,-0.35845 -0.1875,-0.5625 0.001,-0.19898 0.0297,-0.41985 0.0625,-0.65625 z" />
+ d="m 221.99219,244.89453 c -0.48081,0.25143 -1.05272,0.70459 -1.50391,1.37891 -0.1243,0.19528 -0.323,0.30606 -0.51953,0.36718 a 0.21187341,0.21187341 0 0 1 -0.004,0 c -1.62663,0.46778 -3.07243,1.165 -4.3789,2.51172 a 0.21187341,0.21187341 0 0 1 0,0.0156 c 2.4e-4,4.8e-4 -2.4e-4,0.001 0,0.002 0.10739,0.21531 0.21192,0.51593 0.25,0.80274 0.0572,0.43102 -0.087,0.68286 -0.22266,0.89843 1.11163,1.13885 2.7262,2.00151 4.14258,2.04297 a 0.21187341,0.21187341 0 0 1 0.004,0 c 0.29519,0.0127 0.59455,0.14505 0.76171,0.41016 0.1325,0.20728 0.38132,0.41486 0.67774,0.58594 0.20099,0.11599 0.4748,0.18501 0.70117,0.23046 -0.0285,-0.10911 -0.0873,-0.2363 -0.0898,-0.33203 -0.005,-0.19697 0.0505,-0.36846 0.13086,-0.50781 0.13631,-0.23619 0.39405,-0.39267 0.71093,-0.44726 1.21472,-0.20926 2.82764,-0.62833 3.95508,-1.31446 0.21394,-0.13212 0.46981,-0.13935 0.70117,-0.0801 0.23137,0.0593 0.4493,0.18707 0.58594,0.39258 l -0.006,-0.01 c 0.41259,0.55304 1.06147,0.97172 1.54883,1.14062 -0.29084,-0.9342 -0.40252,-2.1037 -0.36719,-2.95898 0.0452,-1.09376 0.43665,-2.23615 0.91797,-3.19727 -0.14011,0.0408 -0.29451,0.0934 -0.28125,0.0879 -0.68743,0.28686 -1.40539,0.90272 -1.81445,1.48828 a 0.21187341,0.21187341 0 0 1 -0.004,0.004 c -0.14785,0.2014 -0.37134,0.32348 -0.60547,0.36914 -0.23412,0.0457 -0.49092,0.0152 -0.69336,-0.13867 -1.34443,-1.02181 -2.51173,-1.67088 -4.02929,-2.1543 -0.1942,-0.0618 -0.34791,-0.19846 -0.46094,-0.36133 -0.11303,-0.16286 -0.18668,-0.35649 -0.18555,-0.56054 0.001,-0.1999 0.0451,-0.42881 0.0781,-0.66602 z" />
<path
- style="fill:none;stroke:url(#linearGradient15537-5);stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
+ style="display:inline;fill:none;stroke:url(#linearGradient15537-5);stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
d="m 220.40065,247.42921 c 1.3319,1.37892 1.29257,3.57882 0.34306,4.70903"
id="path26223-2-7"
inkscape:connector-curvature="0"
@@ -82658,17 +81420,17 @@
height="16"
width="16"
id="rect23518"
- style="opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.29999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.29999995;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
id="path23520"
- style="fill:none;stroke:#0b1728;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0b1728;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 499.5,261.50004 -4.5,2 c -1.94148,0.86288 -2.18285,2.53884 -3,4.5 l -1.25,3"
sodipodi:nodetypes="cssc" />
<path
inkscape:connector-curvature="0"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#0b1728;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
- d="m 503,268.00008 0,2.99996 -3,1.5 c -3,1.5 -6.25,1.5 -10,1.49996 l 0,-2.49996 c 0.5,-0.99996 1.75,-2.75004 5,-4.00004 l 4,-1.5 1,0 3,1.25 0,0.75008 z"
+ style="display:inline;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#0b1728;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="m 503,268.00008 v 2.99996 l -3,1.5 c -3,1.5 -6.25,1.5 -10,1.49996 v -2.49996 c 0.5,-0.99996 1.75,-2.75004 5,-4.00004 l 4,-1.5 h 1 l 3,1.25 z"
id="path23522"
sodipodi:nodetypes="cccccccccc" />
<path
@@ -82677,28 +81439,28 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
sodipodi:nodetypes="cccccccccc"
- style="fill:#c2d4ef;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline;enable-background:new"
- d="m 495,267.5 4,-1.5 1,0 3,1.25 0,0.75004 0,2.75 -3,1.5 -10,1.5 0,-1.75 c 0.5,-1 1.77456,-3.24182 5,-4.50004 z"
+ style="display:inline;fill:#c2d4ef;fill-opacity:1;fill-rule:evenodd;stroke:none;enable-background:new"
+ d="m 495,267.5 4,-1.5 h 1 l 3,1.25 v 0.75004 2.75 l -3,1.5 -10,1.5 v -1.75 c 0.5,-1 1.77456,-3.24182 5,-4.50004 z"
id="path23524" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
d="m 496.75,263.00004 c -3,1.5 -2.75,8.5 2.25,7"
- style="fill:none;stroke:url(#linearGradient23555);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23555);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path23542" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccsccsccsccc"
id="path23526"
- transform="translate(-20,0)"
- d="m 519.82031,262 c 0.5,-0.16016 0.35115,-1.44373 -0.66015,-1 l -3.91016,1.75 c -2.5,0.75 -2.85099,2.90496 -3.82813,5.08203 L 510,271 l 0,3 c 3.76795,10e-6 7,0 10,-1.5 0.59071,-0.29535 2.31945,-1.15973 3,-1.5 l 0,-3 c -0.71506,0.35798 -2.3836,1.1918 -3,1.5 -0.45529,0.22765 -0.90706,0.42996 -1.375,0.59375 -4.60397,1.02313 -4.54405,-5.38421 -1.625,-6.84375 l 2.82031,-1.25 z"
- style="fill:url(#linearGradient23581);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89207077px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ transform="translate(-20)"
+ d="m 519.82031,262 c 0.5,-0.16016 0.35115,-1.44373 -0.66015,-1 l -3.91016,1.75 c -2.5,0.75 -2.85099,2.90496 -3.82813,5.08203 L 510,271 v 3 c 3.76795,10e-6 7,0 10,-1.5 0.59071,-0.29535 2.31945,-1.15973 3,-1.5 v -3 c -0.71506,0.35798 -2.3836,1.1918 -3,1.5 -0.45529,0.22765 -0.90706,0.42996 -1.375,0.59375 -4.60397,1.02313 -4.54405,-5.38421 -1.625,-6.84375 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient23581);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89207077px;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="csc"
id="path23528"
d="m 490.5,273.51739 c 3.76795,0 5.75,-4e-5 8.75,-1.25004 0.60963,-0.25401 2.56945,-1.15973 3.25,-1.5"
- style="fill:none;stroke:url(#linearGradient23550);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23550);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
@@ -82708,7 +81470,7 @@
height="1"
width="2"
id="rect23530"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;enable-background:accumulate" />
<g
style="fill:#000000"
id="g23575">
@@ -82718,9 +81480,9 @@
height="1"
width="2"
id="rect23532"
- style="opacity:0.8;fill:#162d50;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.8;fill:#162d50;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;enable-background:accumulate" />
<rect
- style="opacity:0.6;fill:#162d50;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#162d50;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;enable-background:accumulate"
id="rect23534"
width="1"
height="1.5"
@@ -82732,9 +81494,9 @@
height="1.5"
width="1"
id="rect23536"
- style="opacity:0.6;fill:#162d50;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#162d50;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;enable-background:accumulate" />
<rect
- style="opacity:0.5;fill:#162d50;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#162d50;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;enable-background:accumulate"
id="rect23538"
width="2"
height="0.5"
@@ -82746,7 +81508,7 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
- style="fill:none;stroke:url(#linearGradient23585);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient23585);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 490.5,272.5 c 3.76795,0 5.75,-4e-5 8.75,-1.25004 0.60963,-0.25401 2.56945,-1.15973 3.25,-1.5"
id="path23540"
sodipodi:nodetypes="csc" />
@@ -82754,11 +81516,11 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccssc"
d="m 499.5,261.50004 -3.07779,1.36791 L 495,263.50004 c -1.94148,0.86288 -2.18285,2.53884 -3,4.5 l -1.25,3"
- style="opacity:0.8;fill:none;stroke:#ffffff;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.8;fill:none;stroke:#ffffff;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path23546" />
</g>
<rect
- style="opacity:0;fill:#292929;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.29999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#292929;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.29999995;marker:none;enable-background:accumulate"
id="rect23518-8"
width="16"
height="16"
@@ -82772,11 +81534,11 @@
height="1"
width="2"
id="rect23532-1-0"
- style="opacity:0.8;fill:#1e56ab;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.8;fill:#1e56ab;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:#0b1728;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
- d="m 501.95064,269.22921 0,0.75008 0,2.99996 -3,1.5 c -3,1.5 -6.25,1.5 -10,1.49996 l -0.0183,-2.52715 c 0,0 3.366,-6.98108 4.33827,-8.04174 0.97227,-1.06066 4.00392,-2.08028 4.61579,-2.33915 3.72167,-0.006 4.09599,4.72641 4.06425,6.15804 z m -8,0.25 4.90625,-1.875 c 0.0715,-1.36645 -0.67378,-2.97927 -2.03429,-3.23624"
+ style="display:inline;fill:none;stroke:#0b1728;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="m 501.95064,269.22921 v 0.75008 2.99996 l -3,1.5 c -3,1.5 -6.25,1.5 -10,1.49996 l -0.0183,-2.52715 c 0,0 3.366,-6.98108 4.33827,-8.04174 0.97227,-1.06066 4.00392,-2.08028 4.61579,-2.33915 3.72167,-0.006 4.09599,4.72641 4.06425,6.15804 z m -8,0.25 4.90625,-1.875 c 0.0715,-1.36645 -0.67378,-2.97927 -2.03429,-3.23624"
id="path23522-5"
sodipodi:nodetypes="scccccsccsccc" />
<path
@@ -82785,32 +81547,32 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
sodipodi:nodetypes="cccccccccc"
- style="fill:#c2d4ef;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline;enable-background:new"
- d="m 493.95064,269.47921 4,-1.5 0.9375,-0.40625 3.0625,1.65625 0,0.75004 0,2.75 -3,1.5 -10,1.5 0,-1.75 c 0.5,-1 1.77456,-3.24182 5,-4.50004 z"
+ style="display:inline;fill:#c2d4ef;fill-opacity:1;fill-rule:evenodd;stroke:none;enable-background:new"
+ d="m 493.95064,269.47921 4,-1.5 0.9375,-0.40625 3.0625,1.65625 v 0.75004 2.75 l -3,1.5 -10,1.5 v -1.75 c 0.5,-1 1.77456,-3.24182 5,-4.50004 z"
id="path23524-5" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="csc"
d="m 495.70064,264.97925 c -1.59411,1.20331 -2.85352,5.00657 -1.83419,6.55562 0.84654,1.28647 2.26188,0.99107 4.08419,0.44438"
- style="fill:none;stroke:url(#linearGradient18618);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient18618);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path23542-7" />
<path
id="path14759-8"
d="m 497.43868,264.59926 c 0.80576,0.30416 1.37557,1.03323 1.48798,2.92233 l 3.02398,2.65977 c -0.14914,-2.63927 0.0915,-5.8212 -3.12879,-7.01803 -0.39922,-0.14837 -1.04358,-0.0621 -1.33996,0.0614 z"
- style="fill:url(#linearGradient18620);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89207077px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient18620);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89207077px;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cssccsccscsscc"
id="path23526-4"
- d="m 497.47415,263.23002 c -0.0305,0.0127 -2.69071,1.0899 -3.08515,1.28834 -0.97345,0.48973 -2.73962,3.32869 -3.70177,5.33135 l -1.74953,3.64155 0.013,2.49908 c 3.76795,10e-6 7,0 10,-1.5 l 3,-1.5 0,-3 c -0.71506,0.35798 -2.3836,1.1918 -3,1.5 -0.45529,0.22765 -0.90706,0.42996 -1.375,0.59375 -1.77534,0.39453 -3.51362,0.44764 -3.974,-0.67129 -0.58429,-1.42008 0.52872,-4.89528 2.24297,-6.11564 0.23077,-0.16428 1.56009,-0.67849 1.59569,-0.69629 z"
- style="fill:url(#linearGradient18622);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89207077px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 497.47415,263.23002 c -0.0305,0.0127 -2.69071,1.0899 -3.08515,1.28834 -0.97345,0.48973 -2.73962,3.32869 -3.70177,5.33135 l -1.74953,3.64155 0.013,2.49908 c 3.76795,10e-6 7,0 10,-1.5 l 3,-1.5 v -3 c -0.71506,0.35798 -2.3836,1.1918 -3,1.5 -0.45529,0.22765 -0.90706,0.42996 -1.375,0.59375 -1.77534,0.39453 -3.51362,0.44764 -3.974,-0.67129 -0.58429,-1.42008 0.52872,-4.89528 2.24297,-6.11564 0.23077,-0.16428 1.56009,-0.67849 1.59569,-0.69629 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient18622);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89207077px;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="csc"
id="path23528-6"
d="m 489.45064,275.4966 c 3.76795,0 5.75,-4e-5 8.75,-1.25004 0.60963,-0.25401 2.56945,-1.15973 3.25,-1.5"
- style="fill:none;stroke:url(#linearGradient18624);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient18624);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
@@ -82819,7 +81581,7 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
- style="fill:none;stroke:url(#linearGradient18626);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient18626);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 489.45064,274.47921 c 3.76795,0 5.75,-4e-5 8.75,-1.25004 0.60963,-0.25401 2.56945,-1.15973 3.25,-1.5"
id="path23540-9"
sodipodi:nodetypes="csc" />
@@ -82827,7 +81589,7 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="csscsc"
d="m 489.67253,273.44041 2.07721,-4.14016 c 0.98497,-1.9632 2.11086,-3.89476 3.15802,-4.3308 l 2.83577,-1.18084 c 0.92808,-0.35355 2.39677,0.78516 2.88291,1.66904 0.48613,0.88389 0.68121,2.03922 0.85799,4.29312"
- style="opacity:0.8;fill:none;stroke:url(#linearGradient18628);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.8;fill:none;stroke:url(#linearGradient18628);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path23546-3" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:#1b4685;stroke-width:0.80000001;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1"
@@ -82852,13 +81614,13 @@
height="16"
width="16"
id="rect23018-5-4"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="matrix(0.94058502,0,0,0.94058502,0.9128606,12.74924)"
id="g56716">
<path
sodipodi:type="star"
- style="fill:url(#linearGradient14951);fill-opacity:1;stroke:#000000;stroke-width:0.96882826;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:url(#linearGradient14951);fill-opacity:1;stroke:#000000;stroke-width:0.96882826;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path15855"
sodipodi:sides="5"
sodipodi:cx="13.700194"
@@ -82875,7 +81637,7 @@
inkscape:transform-center-y="-0.74285516"
transform="matrix(1.0972098,0,0,1.0975406,-2.0923019,-19.740595)" />
<path
- style="fill:none;stroke:#ffffff;stroke-width:1.06316817;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
+ style="fill:none;stroke:#ffffff;stroke-width:1.06316817;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
d="m 12.931855,202.51514 -1.201334,2.70994 c -0.137665,0.32193 -0.454082,0.55986 -0.800889,0.60222 l -2.9032248,0.26765 2.2358168,1.97391 c 0.261321,0.2395 0.380487,0.62447 0.300333,0.97022 l -0.667408,2.81032"
id="path15869"
inkscape:connector-curvature="0"
@@ -82892,7 +81654,7 @@
height="16"
width="16"
id="rect23008-0"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
style="display:inline"
transform="translate(-129.04638,24.90625)"
@@ -82901,16 +81663,16 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="g11015-1">
<path
- style="fill:url(#linearGradient15744-9-8);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 205.54638,177.59375 -1,0 0,9 1,0 5,-3.75 0,-1.5 z"
+ style="fill:url(#linearGradient15744-9-8);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 205.54638,177.59375 h -1 v 9 h 1 l 5,-3.75 v -1.5 z"
id="path11017-5"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path11019-7"
- d="m 205.54638,185.34375 0,-6.5 4.03125,3.01562"
- style="fill:none;stroke:url(#linearGradient10982-8-5);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 205.54638,185.34375 v -6.5 l 4.03125,3.01562"
+ style="fill:none;stroke:url(#linearGradient10982-8-5);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -82918,7 +81680,7 @@
</g>
<rect
transform="matrix(0,1,1,0,0,0)"
- style="fill:url(#linearGradient16268-9);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline;enable-background:new"
+ style="display:inline;fill:url(#linearGradient16268-9);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
id="rect10822-0-7"
width="9.2000065"
height="2.1999984"
@@ -82932,7 +81694,7 @@
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
- style="fill:none;stroke:url(#linearGradient16302-5);stroke-width:1.00000012px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline;enable-background:new"
+ style="display:inline;fill:none;stroke:url(#linearGradient16302-5);stroke-width:1.00000012px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
d="m 72.27078,203.33478 0.475194,-7e-5"
id="path10824-4-2"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -82950,7 +81712,7 @@
height="16"
width="16"
id="rect23008-0-8"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
style="display:inline;enable-background:new"
transform="matrix(-1,0,0,1,259.94638,24.80625)"
@@ -82959,8 +81721,8 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="g11015-1-2">
<path
- style="fill:url(#linearGradient15744-9-0-9);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 205.54638,177.59375 -1,0 0,9 1,0 5,-3.75 0,-1.5 z"
+ style="fill:url(#linearGradient15744-9-0-9);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 205.54638,177.59375 h -1 v 9 h 1 l 5,-3.75 v -1.5 z"
id="path11017-5-5"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
@@ -82968,15 +81730,15 @@
sodipodi:nodetypes="cc"
id="path11019-7-9"
d="m 205.54638,178.84375 4.03125,3.01562"
- style="fill:none;stroke:url(#linearGradient10982-8-9-5);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:url(#linearGradient10982-8-9-5);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
</g>
<rect
- transform="matrix(0,1,-1,0,0,0)"
- style="fill:url(#linearGradient16268-5-0);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline;enable-background:new"
+ transform="rotate(90)"
+ style="display:inline;fill:url(#linearGradient16268-5-0);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
id="rect10822-0-7-7"
width="9.2000065"
height="2.1999984"
@@ -82990,7 +81752,7 @@
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
- style="fill:none;stroke:url(#linearGradient16302-3-4);stroke-width:1.00000012px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline;enable-background:new"
+ style="display:inline;fill:none;stroke:url(#linearGradient16302-3-4);stroke-width:1.00000012px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
d="m 58.62922,203.23478 -0.475194,-7e-5"
id="path10824-4-2-3"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -83002,25 +81764,25 @@
id="ICON_AXIS_FRONT">
<path
inkscape:connector-curvature="0"
- d="m 289.95065,114.97921 0,1 2,0 0,1 1,0 0,-1 0,-1 -3,0 z m 2,2 -1,0 0,1 1,0 0,-1 z m -1,1 -1,0 0,1 0,1 3,0 0,-1 -2,0 0,-1 z m -1,3 0,2 1,0 0,-2 -1,0 z m 1,2 0,1 1,0 0,-1 -1,0 z m 1,0 1,0 0,-2 -1,0 0,2 z m 0,1 0,2 1,0 0,-2 -1,0 z m -1,0 -1,0 0,2 1,0 0,-2 z"
- style="opacity:0.3;color:#000000;fill:#0027b4;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 289.95065,114.97921 v 1 h 2 v 1 h 1 v -1 -1 z m 2,2 h -1 v 1 h 1 z m -1,1 h -1 v 1 1 h 3 v -1 h -2 z m -1,3 v 2 h 1 v -2 z m 1,2 v 1 h 1 v -1 z m 1,0 h 1 v -2 h -1 z m 0,1 v 2 h 1 v -2 z m -1,0 h -1 v 2 h 1 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:#0027b4;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path18242" />
<path
inkscape:connector-curvature="0"
id="path38437-9"
- d="m 289.95065,114.97921 0,1 2,0 0,1 1,0 0,-1 0,-1 -3,0 z m 2,2 -1,0 0,1 1,0 0,-1 z m -1,1 -1,0 0,1 0,1 3,0 0,-1 -2,0 0,-1 z"
- style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m 289.95065,114.97921 v 1 h 2 v 1 h 1 v -1 -1 z m 2,2 h -1 v 1 h 1 z m -1,1 h -1 v 1 1 h 3 v -1 h -2 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
id="path18240"
- d="m 289.95065,120.97921 0,2 1,0 0,-2 -1,0 z m 1,2 0,1 1,0 0,-1 -1,0 z m 1,0 1,0 0,-2 -1,0 0,2 z m 0,1 0,2 1,0 0,-2 -1,0 z m -1,0 -1,0 0,2 1,0 0,-2 z"
- style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m 289.95065,120.97921 v 2 h 1 v -2 z m 1,2 v 1 h 1 v -1 z m 1,0 h 1 v -2 h -1 z m 0,1 v 2 h 1 v -2 z m -1,0 h -1 v 2 h 1 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;enable-background:accumulate" />
<g
id="g27975"
style="display:inline;enable-background:new"
transform="translate(-0.04936017,-0.02079917)">
<rect
- style="opacity:0;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.79999995;marker:none;enable-background:accumulate"
id="rect36400-0-73"
width="16"
height="16"
@@ -83030,7 +81792,7 @@
id="g36402-8-9"
transform="translate(186.99836,-42.1)">
<rect
- style="fill:#acc373;fill-opacity:1;fill-rule:nonzero;stroke:#5d0606;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#acc373;fill-opacity:1;fill-rule:nonzero;stroke:#5d0606;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect36426-6-8"
width="2.0000153"
height="2.0000069"
@@ -83040,12 +81802,12 @@
ry="0" />
<g
id="g36404-0-04"
- style="stroke:#1a1a1a;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;display:inline;enable-background:new"
+ style="display:inline;stroke:#1a1a1a;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new"
transform="translate(8.000015,151)">
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
- style="fill:none;stroke:url(#linearGradient27963-5);stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient27963-5);stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="M 85.65162,18.243282 88.999985,16"
id="path36410-3-3"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -83057,8 +81819,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path36407-9-8"
- d="m 88.999985,8 0,8"
- style="fill:none;stroke:#00163c;stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 88.999985,8 v 8"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#00163c;stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cc" />
<path
inkscape:connector-curvature="0"
@@ -83067,7 +81829,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path36412-3-7"
d="M 94.99997,20 88.999985,16"
- style="fill:none;stroke:#5d0606;stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#5d0606;stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cc" />
</g>
<rect
@@ -83078,20 +81840,20 @@
height="2.0000069"
width="2.0000153"
id="rect36416-1-8"
- style="fill:none;stroke:#001e50;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#001e50;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path36418-7-2"
- d="m 97,159 0,8"
- style="fill:none;stroke:#4c8ff4;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 97,159 v 8"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#4c8ff4;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cc" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
- style="fill:none;stroke:url(#linearGradient27965-1);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient27965-1);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 93.15039,169.65379 3.794367,-2.66484"
id="path36420-1-8"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -83104,7 +81866,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path36424-2-5"
d="M 92.728285,169.42532 96.499985,166.75 96.5,159.5"
- style="opacity:0.3;fill:none;stroke:url(#linearGradient27967-9);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:none;stroke:url(#linearGradient27967-9);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccc" />
<path
inkscape:connector-curvature="0"
@@ -83113,10 +81875,10 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path36428-6-8"
d="M 102.99998,171 97,167"
- style="fill:none;stroke:#ef4e29;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ef4e29;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cc" />
<rect
- style="opacity:0.3;fill:none;stroke:#001e50;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:none;stroke:#001e50;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect36432-1-2"
width="2.0000153"
height="2.0000069"
@@ -83125,7 +81887,7 @@
rx="0"
ry="0" />
<rect
- style="fill:#4c8ff4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.3499999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#4c8ff4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.3499999;marker:none;enable-background:accumulate"
id="rect36434-5-5"
width="2"
height="2"
@@ -83133,32 +81895,26 @@
y="158"
rx="0"
ry="0" />
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
transform="matrix(1.3333333,0,0,1.3333343,3,147.66665)"
- d="M 72,14.5 A 1.5,1.5 0 0 1 70.5,16 1.5,1.5 0 0 1 69,14.5 1.5,1.5 0 0 1 70.5,13 1.5,1.5 0 0 1 72,14.5 Z"
- sodipodi:ry="1.5"
- sodipodi:rx="1.5"
- sodipodi:cy="14.5"
- sodipodi:cx="70.5"
id="path36436-4-6"
- style="opacity:0.5;fill:url(#radialGradient27969-8);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
+ style="display:inline;opacity:0.5;fill:url(#radialGradient27969-8);fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
+ cx="70.5"
+ cy="14.5"
+ r="1.5" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="M 72,14.5 A 1.5,1.5 0 0 1 70.5,16 1.5,1.5 0 0 1 69,14.5 1.5,1.5 0 0 1 70.5,13 1.5,1.5 0 0 1 72,14.5 Z"
- sodipodi:ry="1.5"
- sodipodi:rx="1.5"
- sodipodi:cy="14.5"
- sodipodi:cx="70.5"
id="path36438-7-62"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new"
- sodipodi:type="arc"
- transform="matrix(0.6666679,0,0,0.6666668,49.999915,157.33333)" />
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
+ transform="matrix(0.6666679,0,0,0.6666668,49.999915,157.33333)"
+ cx="70.5"
+ cy="14.5"
+ r="1.5" />
<rect
ry="0"
rx="0"
@@ -83167,7 +81923,7 @@
height="2.0000069"
width="2.0000153"
id="rect36440-7-5"
- style="opacity:0.3;fill:#acc373;fill-opacity:1;fill-rule:nonzero;stroke:#5d0606;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:#acc373;fill-opacity:1;fill-rule:nonzero;stroke:#5d0606;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<rect
ry="0"
rx="0"
@@ -83176,20 +81932,20 @@
height="2"
width="2"
id="rect36442-2-0"
- style="fill:#eb512e;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.3499999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#eb512e;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.3499999;marker:none;enable-background:accumulate" />
<g
style="opacity:0.8"
id="g36444-2-2">
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:url(#linearGradient27971-9);stroke-width:1.00000012;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 96.5,159.5 0,-1 1,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient27971-9);stroke-width:1.00000012;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 96.5,159.5 v -1 h 1"
id="path36446-6-0"
sodipodi:nodetypes="ccc" />
<path
inkscape:connector-curvature="0"
- style="opacity:0.9;fill:none;stroke:url(#linearGradient27973-6);stroke-width:1.00000012;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 102.49999,171.5 0,-1 1,0"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.9;fill:none;stroke:url(#linearGradient27973-6);stroke-width:1.00000012;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 102.49999,171.5 v -1 h 1"
id="path36450-1-8"
sodipodi:nodetypes="ccc" />
</g>
@@ -83206,16 +81962,16 @@
<path
inkscape:connector-curvature="0"
id="path18244-7"
- style="opacity:0.3;color:#000000;fill:#45eb0a;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 269,122 0,2.25 1,0 0,2.75 1,0 0,-2.75 1,0 0,-2.25 -1,0 0,2 -1,0 0,-2 -1,0 z m 0,-6 0,1 2,0 0,1 1,0 0,-1 0,-1 -3,0 z m 2,2 -1,0 0,1 1,0 0,-1 z m -1,1 -1,0 0,1 0,1 3,0 0,-1 -2,0 0,-1 z" />
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:#45eb0a;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 269,122 v 2.25 h 1 V 127 h 1 v -2.75 h 1 V 122 h -1 v 2 h -1 v -2 z m 0,-6 v 1 h 2 v 1 h 1 v -1 -1 z m 2,2 h -1 v 1 h 1 z m -1,1 h -1 v 1 1 h 3 v -1 h -2 z" />
<path
- style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 269,116 0,1 2,0 0,1 1,0 0,-1 0,-1 -3,0 z m 2,2 -1,0 0,1 1,0 0,-1 z m -1,1 -1,0 0,1 0,1 3,0 0,-1 -2,0 0,-1 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 269,116 v 1 h 2 v 1 h 1 v -1 -1 z m 2,2 h -1 v 1 h 1 z m -1,1 h -1 v 1 1 h 3 v -1 h -2 z"
id="path38437-9-2"
inkscape:connector-curvature="0" />
<path
- style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 269,122 0,2.25 1,0 0,2.75 1,0 0,-2.75 1,0 0,-2.25 -1,0 0,2 -1,0 0,-2 -1,0 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 269,122 v 2.25 h 1 V 127 h 1 v -2.75 h 1 V 122 h -1 v 2 h -1 v -2 z"
id="path38435-3-8-1"
inkscape:connector-curvature="0" />
</g>
@@ -83225,7 +81981,7 @@
height="16"
width="16"
id="rect36400-0"
- style="opacity:0;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.79999995;marker:none;enable-background:accumulate" />
<g
transform="translate(-2.0730802,-0.12079917)"
id="g17954"
@@ -83233,7 +81989,7 @@
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
- style="fill:none;stroke:url(#linearGradient17973-0);stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17973-0);stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 261.67372,127.26538 3.34836,-2.24328"
id="path36410-3-3-7"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -83245,8 +82001,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path36407-9"
- d="m 264.99997,117 0,8"
- style="fill:none;stroke:#00163c;stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 264.99997,117 v 8"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#00163c;stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cc" />
<path
inkscape:connector-curvature="0"
@@ -83255,7 +82011,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path36412-3"
d="m 270.99996,129 -5.99999,-4"
- style="fill:none;stroke:#183c00;stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#183c00;stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cc" />
<path
inkscape:export-ydpi="90"
@@ -83263,11 +82019,11 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path36420-1-8-8"
d="m 261.17248,127.67589 3.79437,-2.66484"
- style="fill:none;stroke:url(#linearGradient17975-1);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17975-1);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<rect
- style="fill:none;stroke:#001e50;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#001e50;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect36416-1"
width="2.0000153"
height="2.0000069"
@@ -83277,8 +82033,8 @@
ry="0" />
<path
sodipodi:nodetypes="cc"
- style="fill:none;stroke:#4c8ff4;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 264.99998,117 0,8"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#4c8ff4;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 264.99998,117 v 8"
id="path36418-7"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -83286,7 +82042,7 @@
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
- style="opacity:0.3;fill:none;stroke:url(#linearGradient17977-8);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:none;stroke:url(#linearGradient17977-8);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 260.75037,127.44742 3.7717,-2.67532 2e-5,-7.25"
id="path36424-2-5-6"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -83301,10 +82057,10 @@
height="2.0000069"
width="2.0000153"
id="rect36426-6"
- style="fill:#acc373;fill-opacity:1;fill-rule:nonzero;stroke:#183c00;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#acc373;fill-opacity:1;fill-rule:nonzero;stroke:#183c00;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="cc"
- style="fill:none;stroke:#4ee420;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#4ee420;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 270.99996,129 -5.99998,-4"
id="path36428-6"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -83319,7 +82075,7 @@
height="2.0000069"
width="2.0000153"
id="rect36432-1"
- style="opacity:0.3;fill:none;stroke:#001e50;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:none;stroke:#001e50;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<rect
ry="0"
rx="0"
@@ -83328,35 +82084,29 @@
height="2"
width="2"
id="rect36434-5"
- style="fill:#4c8ff4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.3499999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
- sodipodi:type="arc"
- style="opacity:0.5;fill:url(#radialGradient17979-7);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:#4c8ff4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.3499999;marker:none;enable-background:accumulate" />
+ <circle
+ style="display:inline;opacity:0.5;fill:url(#radialGradient17979-7);fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
id="path36436-4"
- sodipodi:cx="70.5"
- sodipodi:cy="14.5"
- sodipodi:rx="1.5"
- sodipodi:ry="1.5"
- d="M 72,14.5 A 1.5,1.5 0 0 1 70.5,16 1.5,1.5 0 0 1 69,14.5 1.5,1.5 0 0 1 70.5,13 1.5,1.5 0 0 1 72,14.5 Z"
transform="matrix(1.3333333,0,0,1.3333343,170.99998,105.66665)"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="70.5"
+ cy="14.5"
+ r="1.5" />
+ <circle
transform="matrix(0.6666679,0,0,0.6666668,217.99989,115.33333)"
- sodipodi:type="arc"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
id="path36438-7"
- sodipodi:cx="70.5"
- sodipodi:cy="14.5"
- sodipodi:rx="1.5"
- sodipodi:ry="1.5"
- d="M 72,14.5 A 1.5,1.5 0 0 1 70.5,16 1.5,1.5 0 0 1 69,14.5 1.5,1.5 0 0 1 70.5,13 1.5,1.5 0 0 1 72,14.5 Z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="70.5"
+ cy="14.5"
+ r="1.5" />
<rect
- style="opacity:0.3;fill:#acc373;fill-opacity:1;fill-rule:nonzero;stroke:#183c00;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:#acc373;fill-opacity:1;fill-rule:nonzero;stroke:#183c00;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect36440-7"
width="2.0000153"
height="2.0000069"
@@ -83365,7 +82115,7 @@
rx="0"
ry="0" />
<rect
- style="fill:#4ee51f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.3499999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#4ee51f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.3499999;marker:none;enable-background:accumulate"
id="rect36442-2"
width="2"
height="2"
@@ -83375,14 +82125,14 @@
ry="0" />
<path
inkscape:connector-curvature="0"
- style="opacity:0.8;fill:none;stroke:url(#linearGradient17981-0);stroke-width:1.00000012;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 264.49998,117.5 0,-1 1,0"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.8;fill:none;stroke:url(#linearGradient17981-0);stroke-width:1.00000012;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 264.49998,117.5 v -1 h 1"
id="path36446-6"
sodipodi:nodetypes="ccc" />
<path
inkscape:connector-curvature="0"
- style="opacity:0.72000002;fill:none;stroke:url(#linearGradient17983-9);stroke-width:1.00000012;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 270.49997,129.5 0,-1 1,0"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.72000002;fill:none;stroke:url(#linearGradient17983-9);stroke-width:1.00000012;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 270.49997,129.5 v -1 h 1"
id="path36450-1"
sodipodi:nodetypes="ccc" />
</g>
@@ -83397,8 +82147,8 @@
<path
inkscape:connector-curvature="0"
id="path11174-1-9"
- style="opacity:0.3;color:#000000;fill:#f82516;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 311,122 0,2 1,0 0,-2 -1,0 z m 1,2 0,1 1,0 0,-1 -1,0 z m 1,0 1,0 0,-2 -1,0 0,2 z m 0,1 0,2 1,0 0,-2 -1,0 z m -1,0 -1,0 0,2 1,0 0,-2 z m -1,-9 0,2.25 1,0 0,2.75 1,0 0,-2.75 1,0 0,-2.25 -1,0 0,2 -1,0 0,-2 -1,0 z" />
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:#f82516;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 311,122 v 2 h 1 v -2 z m 1,2 v 1 h 1 v -1 z m 1,0 h 1 v -2 h -1 z m 0,1 v 2 h 1 v -2 z m -1,0 h -1 v 2 h 1 z m -1,-9 v 2.25 h 1 V 121 h 1 v -2.75 h 1 V 116 h -1 v 2 h -1 v -2 z" />
</g>
<rect
y="114.97919"
@@ -83406,23 +82156,23 @@
height="16"
width="16"
id="rect36400-0-73-7"
- style="opacity:0;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.79999995;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
id="path38435-3-8"
- d="m 310.95065,114.97921 0,2.25 1,0 0,2.75 1,0 0,-2.75 1,0 0,-2.25 -1,0 0,2 -1,0 0,-2 -1,0 z"
- style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m 310.95065,114.97921 v 2.25 h 1 v 2.75 h 1 v -2.75 h 1 v -2.25 h -1 v 2 h -1 v -2 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
id="path18240-3"
- d="m 310.95065,120.97921 0,2 1,0 0,-2 -1,0 z m 1,2 0,1 1,0 0,-1 -1,0 z m 1,0 1,0 0,-2 -1,0 0,2 z m 0,1 0,2 1,0 0,-2 -1,0 z m -1,0 -1,0 0,2 1,0 0,-2 z"
- style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m 310.95065,120.97921 v 2 h 1 v -2 z m 1,2 v 1 h 1 v -1 z m 1,0 h 1 v -2 h -1 z m 0,1 v 2 h 1 v -2 z m -1,0 h -1 v 2 h 1 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;enable-background:accumulate" />
<g
transform="translate(0.95063983,-0.12079917)"
id="g27760"
style="display:inline;enable-background:new">
<rect
- style="fill:none;stroke:#183c00;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#183c00;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect36416-1-8-5"
width="2.0000153"
height="2.0000069"
@@ -83438,14 +82188,14 @@
height="2.0000069"
width="2.0000153"
id="rect36426-6-8-0"
- style="fill:#acc373;fill-opacity:1;fill-rule:nonzero;stroke:#5d0606;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#acc373;fill-opacity:1;fill-rule:nonzero;stroke:#5d0606;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path36410-3-3-7-4"
d="m 300.65,127.2387 3.34836,-2.24328"
- style="fill:none;stroke:url(#linearGradient27998-5);stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient27998-5);stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
@@ -83454,13 +82204,13 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path36407-9-8-3"
- d="m 303.98998,117 0,8"
- style="fill:none;stroke:#183c00;stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 303.98998,117 v 8"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#183c00;stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cc" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
- style="fill:none;stroke:url(#linearGradient28000-5);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient28000-5);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 300.14876,127.64921 3.79437,-2.66484"
id="path36420-1-8-8-6"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -83473,12 +82223,12 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path36412-3-7-3"
d="m 309.98997,129 -5.99999,-4"
- style="fill:none;stroke:#5d0606;stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#5d0606;stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cc" />
<path
sodipodi:nodetypes="cc"
- style="fill:none;stroke:#4ee420;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 303.98999,117 0,8"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#4ee420;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 303.98999,117 v 8"
id="path36418-7-2-5"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -83491,11 +82241,11 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path36424-2-5-6-9"
d="m 299.72665,127.42074 3.7717,-2.67532 2e-5,-7.25"
- style="opacity:0.3;fill:none;stroke:url(#linearGradient28002-1);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:none;stroke:url(#linearGradient28002-1);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccc" />
<path
sodipodi:nodetypes="cc"
- style="fill:none;stroke:#ef4e29;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ef4e29;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 309.98997,129 -5.99998,-4"
id="path36428-6-8-8"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -83510,7 +82260,7 @@
height="2.0000069"
width="2.0000153"
id="rect36432-1-2-2"
- style="opacity:0.3;fill:none;stroke:#183c00;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:none;stroke:#183c00;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<rect
ry="0"
rx="0"
@@ -83519,35 +82269,29 @@
height="2"
width="2"
id="rect36434-5-5-9"
- style="fill:#4ee51f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.3499999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
- sodipodi:type="arc"
- style="opacity:0.5;fill:url(#radialGradient28004-7);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:#4ee51f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.3499999;marker:none;enable-background:accumulate" />
+ <circle
+ style="display:inline;opacity:0.5;fill:url(#radialGradient28004-7);fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
id="path36436-4-6-0"
- sodipodi:cx="70.5"
- sodipodi:cy="14.5"
- sodipodi:rx="1.5"
- sodipodi:ry="1.5"
- d="M 72,14.5 A 1.5,1.5 0 0 1 70.5,16 1.5,1.5 0 0 1 69,14.5 1.5,1.5 0 0 1 70.5,13 1.5,1.5 0 0 1 72,14.5 Z"
transform="matrix(1.3333333,0,0,1.3333343,209.98999,105.66665)"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="70.5"
+ cy="14.5"
+ r="1.5" />
+ <circle
transform="matrix(0.6666679,0,0,0.6666668,256.9899,115.33333)"
- sodipodi:type="arc"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
id="path36438-7-62-3"
- sodipodi:cx="70.5"
- sodipodi:cy="14.5"
- sodipodi:rx="1.5"
- sodipodi:ry="1.5"
- d="M 72,14.5 A 1.5,1.5 0 0 1 70.5,16 1.5,1.5 0 0 1 69,14.5 1.5,1.5 0 0 1 70.5,13 1.5,1.5 0 0 1 72,14.5 Z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="70.5"
+ cy="14.5"
+ r="1.5" />
<rect
- style="opacity:0.3;fill:#acc373;fill-opacity:1;fill-rule:nonzero;stroke:#5d0606;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:#acc373;fill-opacity:1;fill-rule:nonzero;stroke:#5d0606;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect36440-7-5-9"
width="2.0000153"
height="2.0000069"
@@ -83556,7 +82300,7 @@
rx="0"
ry="0" />
<rect
- style="fill:#eb512e;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.3499999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#eb512e;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.3499999;marker:none;enable-background:accumulate"
id="rect36442-2-0-6"
width="2"
height="2"
@@ -83567,14 +82311,14 @@
<path
sodipodi:nodetypes="ccc"
id="path36446-6-0-8"
- d="m 303.5,117.51562 0,-1 1,0"
- style="opacity:0.8;fill:none;stroke:url(#linearGradient28006-8);stroke-width:1.00000012;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 303.5,117.51562 v -1 h 1"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.8;fill:none;stroke:url(#linearGradient28006-8);stroke-width:1.00000012;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path36450-1-8-0"
- d="m 309.47793,129.48277 0,-1 1,0"
- style="opacity:0.9;fill:none;stroke:url(#linearGradient28008-2);stroke-width:1.00000012;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 309.47793,129.48277 v -1 h 1"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.9;fill:none;stroke:url(#linearGradient28008-2);stroke-width:1.00000012;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -83588,13 +82332,13 @@
height="16"
width="16"
id="rect23018-5-4-4"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="matrix(0.94058502,0,0,0.94058502,0.9128606,12.74924)"
id="g56716-9">
<path
sodipodi:type="star"
- style="fill:url(#linearGradient14951-4);fill-opacity:1;stroke:#341b00;stroke-width:0.96882826;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:url(#linearGradient14951-4);fill-opacity:1;stroke:#341b00;stroke-width:0.96882826;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path15855-2"
sodipodi:sides="5"
sodipodi:cx="13.700194"
@@ -83611,7 +82355,7 @@
inkscape:transform-center-y="-0.74285516"
transform="matrix(1.0972098,0,0,1.0975406,-2.0923019,-19.740595)" />
<path
- style="fill:none;stroke:#ffffff;stroke-width:1.06316817;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
+ style="fill:none;stroke:#ffffff;stroke-width:1.06316817;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
d="m 12.931855,202.51514 -1.201334,2.70994 c -0.137665,0.32193 -0.454082,0.55986 -0.800889,0.60222 l -2.9032248,0.26765 2.2358168,1.97391 c 0.261321,0.2395 0.380487,0.62447 0.300333,0.97022 l -0.667408,2.81032"
id="path15869-5"
inkscape:connector-curvature="0"
@@ -83623,7 +82367,7 @@
id="ICON_MUTE_IPO_OFF"
style="display:inline;enable-background:new">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect22902-0"
width="16"
height="16"
@@ -83634,7 +82378,7 @@
id="g22904-5"
style="opacity:0.6;stroke:#162d50">
<path
- style="opacity:0.9;fill:none;stroke:#2d3239;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.9;fill:none;stroke:#2d3239;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 253.41833,95.5 c 1.5,1.5 1.5,3.5 0,5"
id="path22906-2"
sodipodi:nodetypes="cc"
@@ -83643,7 +82387,7 @@
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.9;fill:none;stroke:#2d3239;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.9;fill:none;stroke:#2d3239;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 255.41833,93.5 c 2.75,2.75 2.75,6.25 0,9"
id="path22908-5"
sodipodi:nodetypes="cc"
@@ -83653,7 +82397,7 @@
inkscape:connector-curvature="0" />
</g>
<path
- style="opacity:0.9;fill:none;stroke:#e4e9f0;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.9;fill:none;stroke:#e4e9f0;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 267.5,454.5 c 1.5,1.5 1.5,3.5 0,5"
id="path22910-1"
sodipodi:nodetypes="cc"
@@ -83663,27 +82407,27 @@
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccccccc"
- style="fill:url(#linearGradient22933-6);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
- d="m 264.58167,451.5 -1.08167,0 -3,3 c 0,-0.554 -0.446,-1 -1,-1 l -1,0 c -0.554,0 -1,0.446 -1,1 l 0,5 c 0,0.554 0.446,1 1,1 l 1,0 c 0.554,0 1,-0.446 1,-1 l 3,3 1.08167,0 0,-11 z"
+ style="display:inline;fill:url(#linearGradient22933-6);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 264.58167,451.5 H 263.5 l -3,3 c 0,-0.554 -0.446,-1 -1,-1 h -1 c -0.554,0 -1,0.446 -1,1 v 5 c 0,0.554 0.446,1 1,1 h 1 c 0.554,0 1,-0.446 1,-1 l 3,3 h 1.08167 z"
id="path22912-6"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient22935-6);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
- d="m 258.5,459.5 1,0 1,-1 3.25,3"
+ style="display:inline;fill:none;stroke:url(#linearGradient22935-6);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 258.5,459.5 h 1 l 1,-1 3.25,3"
id="path22914-3"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
id="path22916-2"
- d="m 260.5,454.5 0,4.9091"
- style="opacity:0.5;fill:none;stroke:url(#linearGradient22937-4);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 260.5,454.5 v 4.9091"
+ style="opacity:0.5;fill:none;stroke:url(#linearGradient22937-4);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
id="path22918-7"
- d="m 258.5,455.5 1,0"
+ d="m 258.5,455.5 h 1"
style="fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
sodipodi:nodetypes="cc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -83705,7 +82449,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cc"
style="fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 258.5,454.63598 1,0"
+ d="m 258.5,454.63598 h 1"
id="path22922-0"
inkscape:connector-curvature="0" />
<path
@@ -83724,16 +82468,16 @@
sodipodi:nodetypes="cc"
id="path22926-3"
d="m 269.5,452.5 c 2.75,2.75 2.75,6.25 0,9"
- style="opacity:0.9;fill:none;stroke:#e4e9f0;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.9;fill:none;stroke:#e4e9f0;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:url(#linearGradient22939-8);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
- d="m 263.5,452.5 0,9"
+ d="m 263.5,452.5 v 9"
id="path22928-8"
inkscape:connector-curvature="0" />
<path
id="path22931-5"
- d="m 258.5,454.3 0,5.4"
+ d="m 258.5,454.3 v 5.4"
style="fill:none;stroke:url(#linearGradient17039);stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
@@ -83742,7 +82486,7 @@
id="ICON_MUTE_IPO_ON"
style="display:inline;enable-background:new">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect22902-0-6"
width="16"
height="16"
@@ -83754,27 +82498,27 @@
style="opacity:0.6;stroke:#162d50" />
<path
sodipodi:nodetypes="ccccccccccccc"
- style="fill:url(#linearGradient22933-6-8);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
- d="m 264.58167,451.5 -1.08167,0 -3,3 c 0,-0.554 -0.446,-1 -1,-1 l -1,0 c -0.554,0 -1,0.446 -1,1 l 0,5 c 0,0.554 0.446,1 1,1 l 1,0 c 0.554,0 1,-0.446 1,-1 l 3,3 1.08167,0 0,-11 z"
+ style="display:inline;fill:url(#linearGradient22933-6-8);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 264.58167,451.5 H 263.5 l -3,3 c 0,-0.554 -0.446,-1 -1,-1 h -1 c -0.554,0 -1,0.446 -1,1 v 5 c 0,0.554 0.446,1 1,1 h 1 c 0.554,0 1,-0.446 1,-1 l 3,3 h 1.08167 z"
id="path22912-6-4"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient22935-6-2);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
- d="m 258.5,459.5 1,0 1,-1 3.25,3"
+ style="display:inline;fill:none;stroke:url(#linearGradient22935-6-2);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 258.5,459.5 h 1 l 1,-1 3.25,3"
id="path22914-3-7"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
id="path22916-2-2"
- d="m 260.5,454.5 0,4.9091"
- style="opacity:0.5;fill:none;stroke:url(#linearGradient22937-4-1);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 260.5,454.5 v 4.9091"
+ style="opacity:0.5;fill:none;stroke:url(#linearGradient22937-4-1);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
id="path22918-7-7"
- d="m 258.5,455.5 1,0"
+ d="m 258.5,455.5 h 1"
style="fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
sodipodi:nodetypes="cc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -83796,7 +82540,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cc"
style="fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 258.5,454.63598 1,0"
+ d="m 258.5,454.63598 h 1"
id="path22922-0-2"
inkscape:connector-curvature="0" />
<path
@@ -83810,12 +82554,12 @@
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:url(#linearGradient22939-8-6);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
- d="m 263.5,452.5 0,9"
+ d="m 263.5,452.5 v 9"
id="path22928-8-6"
inkscape:connector-curvature="0" />
<path
id="path22931-5-7"
- d="m 258.5,454.3 0,5.4"
+ d="m 258.5,454.3 v 5.4"
style="fill:none;stroke:url(#linearGradient17172);stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
@@ -83824,7 +82568,7 @@
id="ICON_OUTLINER_DATA_SPEAKER"
style="display:inline;enable-background:new">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect22902-0-4"
width="16"
height="16"
@@ -83835,7 +82579,7 @@
id="g22904-5-8"
style="opacity:0.6;stroke:#162d50">
<path
- style="opacity:0.9;fill:none;stroke:#333333;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.9;fill:none;stroke:#333333;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 253.41833,95.5 c 1.5,1.5 1.5,3.5 0,5"
id="path22906-2-2"
sodipodi:nodetypes="cc"
@@ -83844,7 +82588,7 @@
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.9;fill:none;stroke:#333333;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.9;fill:none;stroke:#333333;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 255.41833,93.5 c 2.75,2.75 2.75,6.25 0,9"
id="path22908-5-8"
sodipodi:nodetypes="cc"
@@ -83854,7 +82598,7 @@
inkscape:connector-curvature="0" />
</g>
<path
- style="opacity:0.9;fill:none;stroke:#eaeaea;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.9;fill:none;stroke:#eaeaea;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 267.5,454.5 c 1.5,1.5 1.5,3.5 0,5"
id="path22910-1-6"
sodipodi:nodetypes="cc"
@@ -83864,27 +82608,27 @@
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccccccc"
- style="opacity:0.8;fill:url(#linearGradient22933-6-87);fill-opacity:1;fill-rule:nonzero;stroke:#1a1a1a;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
- d="m 264.58167,451.5 -1.08167,0 -3,3 c 0,-0.554 -0.446,-1 -1,-1 l -1,0 c -0.554,0 -1,0.446 -1,1 l 0,5 c 0,0.554 0.446,1 1,1 l 1,0 c 0.554,0 1,-0.446 1,-1 l 3,3 1.08167,0 0,-11 z"
+ style="display:inline;opacity:0.8;fill:url(#linearGradient22933-6-87);fill-opacity:1;fill-rule:nonzero;stroke:#1a1a1a;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 264.58167,451.5 H 263.5 l -3,3 c 0,-0.554 -0.446,-1 -1,-1 h -1 c -0.554,0 -1,0.446 -1,1 v 5 c 0,0.554 0.446,1 1,1 h 1 c 0.554,0 1,-0.446 1,-1 l 3,3 h 1.08167 z"
id="path22912-6-9"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient22935-6-22);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
- d="m 258.5,459.5 1,0 1,-1 3.25,3"
+ style="display:inline;fill:none;stroke:url(#linearGradient22935-6-22);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 258.5,459.5 h 1 l 1,-1 3.25,3"
id="path22914-3-3"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
id="path22916-2-6"
- d="m 260.5,454.5 0,4.9091"
- style="opacity:0.5;fill:none;stroke:url(#linearGradient22937-4-8);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 260.5,454.5 v 4.9091"
+ style="opacity:0.5;fill:none;stroke:url(#linearGradient22937-4-8);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
id="path22918-7-5"
- d="m 258.5,455.5 1,0"
+ d="m 258.5,455.5 h 1"
style="fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
sodipodi:nodetypes="cc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -83906,7 +82650,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cc"
style="fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 258.5,454.63598 1,0"
+ d="m 258.5,454.63598 h 1"
id="path22922-0-0"
inkscape:connector-curvature="0" />
<path
@@ -83925,16 +82669,16 @@
sodipodi:nodetypes="cc"
id="path22926-3-1"
d="m 269.5,452.5 c 2.75,2.75 2.75,6.25 0,9"
- style="opacity:0.9;fill:none;stroke:#eaeaea;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.9;fill:none;stroke:#eaeaea;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:url(#linearGradient22939-8-3);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
- d="m 263.5,452.5 0,9"
+ d="m 263.5,452.5 v 9"
id="path22928-8-5"
inkscape:connector-curvature="0" />
<path
id="path22931-5-2"
- d="m 258.5,454.3 0,5.4"
+ d="m 258.5,454.3 v 5.4"
style="fill:none;stroke:url(#linearGradient17172-9);stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
@@ -83942,7 +82686,7 @@
style="display:inline;enable-background:new"
id="ICON_OUTLINER_OB_SPEAKER">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect22902-0-2"
width="16"
height="16"
@@ -83951,7 +82695,7 @@
<g
id="g17546">
<path
- style="opacity:0.6;fill:none;stroke:#643200;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
+ style="display:inline;opacity:0.6;fill:none;stroke:#643200;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
d="m 227.5,433.5 c 2.75,2.75 2.75,6.25 0,9"
id="path22908-5-0-4"
sodipodi:nodetypes="cc"
@@ -83960,7 +82704,7 @@
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.6;fill:none;stroke:#633300;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
+ style="display:inline;opacity:0.6;fill:none;stroke:#633300;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
d="m 225.5,435.5 c 1.5,1.5 1.5,3.5 0,5"
id="path22906-2-9-6"
sodipodi:nodetypes="cc"
@@ -83976,26 +82720,26 @@
sodipodi:nodetypes="cc"
id="path22910-1-4"
d="m 225.5,435.5 c 1.5,1.5 1.5,3.5 0,5"
- style="opacity:0.9;fill:none;stroke:url(#linearGradient17582);stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ style="opacity:0.9;fill:none;stroke:url(#linearGradient17582);stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path22912-6-7"
- d="m 222.58167,432.5 -1.08167,0 -3,3 c 0,-0.554 -0.446,-1 -1,-1 l -1,0 c -0.554,0 -1,0.446 -1,1 l 0,5 c 0,0.554 0.446,1 1,1 l 1,0 c 0.554,0 1,-0.446 1,-1 l 3,3 1.08167,0 0,-11 z"
- style="fill:url(#linearGradient17584);fill-opacity:1;fill-rule:nonzero;stroke:#2b1600;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.84313725;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+ d="M 222.58167,432.5 H 221.5 l -3,3 c 0,-0.554 -0.446,-1 -1,-1 h -1 c -0.554,0 -1,0.446 -1,1 v 5 c 0,0.554 0.446,1 1,1 h 1 c 0.554,0 1,-0.446 1,-1 l 3,3 h 1.08167 z"
+ style="display:inline;fill:url(#linearGradient17584);fill-opacity:1;fill-rule:nonzero;stroke:#2b1600;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.84313725"
sodipodi:nodetypes="ccccccccccccc" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc"
id="path22914-3-6"
- d="m 216.5,440.5 1,0 1,-1 3.25,3"
- style="fill:none;stroke:url(#linearGradient17586);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
+ d="m 216.5,440.5 h 1 l 1,-1 3.25,3"
+ style="display:inline;fill:none;stroke:url(#linearGradient17586);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- style="opacity:0.65263157;fill:none;stroke:url(#linearGradient17588);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 218.5,435.5 0,4.9091"
+ style="opacity:0.65263157;fill:none;stroke:url(#linearGradient17588);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 218.5,435.5 v 4.9091"
id="path22916-2-0" />
<path
inkscape:connector-curvature="0"
@@ -84004,7 +82748,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cc"
style="fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 216.5,436.5 1,0"
+ d="m 216.5,436.5 h 1"
id="path22918-7-2" />
<path
inkscape:connector-curvature="0"
@@ -84018,7 +82762,7 @@
<path
inkscape:connector-curvature="0"
id="path22922-0-22"
- d="m 216.5,435.63598 1,0"
+ d="m 216.5,435.63598 h 1"
style="fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
sodipodi:nodetypes="cc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -84035,7 +82779,7 @@
inkscape:export-ydpi="90" />
<path
inkscape:connector-curvature="0"
- style="opacity:0.9;fill:none;stroke:url(#linearGradient17590);stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.9;fill:none;stroke:url(#linearGradient17590);stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 227.5,433.5 c 2.75,2.75 2.75,6.25 0,9"
id="path22926-3-9"
sodipodi:nodetypes="cc"
@@ -84045,19 +82789,19 @@
<path
inkscape:connector-curvature="0"
id="path22928-8-7"
- d="m 221.5,433.5 0,9"
+ d="m 221.5,433.5 v 9"
style="fill:none;stroke:url(#linearGradient17592);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
style="fill:none;stroke:url(#linearGradient17594);stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
- d="m 216.5,435.3 0,5.4"
+ d="m 216.5,435.3 v 5.4"
id="path22931-5-72" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cc"
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline;enable-background:new"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
d="m 225.37642,435.40307 0.60225,0.61872"
id="path22922-0-22-4"
inkscape:connector-curvature="0" />
@@ -84066,7 +82810,7 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cc"
- style="fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline;enable-background:new"
+ style="display:inline;fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
d="m 227.40936,433.37013 0.51386,0.59663"
id="path22922-0-22-2"
inkscape:connector-curvature="0" />
@@ -84075,7 +82819,7 @@
<g
id="ICON_SCREEN_BACK">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect18740-5"
width="16"
height="16"
@@ -84086,7 +82830,7 @@
id="g18742-8"
transform="matrix(0.78985507,0,0,0.78985507,384.77042,545.63116)">
<rect
- style="opacity:0.7;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;enable-background:accumulate"
id="rect38458-5"
width="11.999999"
height="9.0000172"
@@ -84097,8 +82841,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path18744-0"
- d="m 17.209985,82.052175 -1.174018,1.202898 -10.0887566,0 -1.2028894,-1.202898 -1e-7,-12.622124 12.4766491,0 -0.01099,12.622124 -5e-6,0 0,0 z"
- style="fill:url(#linearGradient17715);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.01284409;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 17.209985,82.052175 -1.174018,1.202898 H 5.9472104 l -1.2028894,-1.202898 -1e-7,-12.622124 H 17.22097 l -0.01099,12.622124 h -5e-6 v 0 z"
+ style="fill:url(#linearGradient17715);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.01284409;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="cccccccccc"
inkscape:connector-curvature="0" />
<path
@@ -84106,13 +82850,13 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path18746-7"
- d="m 15.536259,81.328571 -6.3832127,2e-6 0,-0.999998 6.3832127,-2e-6 0,0.999998 z"
- style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 15.536259,81.328571 -6.3832127,2e-6 v -0.999998 l 6.3832127,-2e-6 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9999994px;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:url(#linearGradient17717);stroke-width:1.26605475px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 5.9039809,82.132474 0.025569,-11.527305 10.1868001,5.7e-5 0,11.527247 z"
+ d="m 5.9039809,82.132474 0.025569,-11.527305 10.1868001,5.7e-5 v 11.527247 z"
id="path18748-3"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -84120,7 +82864,7 @@
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<rect
- style="fill:#d40000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#d40000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect18750-1"
width="1"
height="1"
@@ -84138,13 +82882,13 @@
sodipodi:nodetypes="cc"
id="path43490-2-2"
d="M 326.98536,85.889717 327,76"
- style="fill:none;stroke:#000000;stroke-width:3.57682419;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:3.57682419;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path43492-1-0"
d="m 330.97424,79.255626 -3.97425,-3.974249 -3.97424,3.974249"
- style="fill:none;stroke:#000000;stroke-width:3.57682419;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:3.57682419;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
<g
@@ -84152,13 +82896,13 @@
id="g43494-2-5"
style="display:inline;enable-background:new">
<path
- style="fill:none;stroke:#ebebeb;stroke-width:1.72217464;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 327,85.889717 327,76"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ebebeb;stroke-width:1.72217464;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 327,85.889717 V 76"
id="path43496-7-5"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#ebebeb;stroke-width:1.72217464;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ebebeb;stroke-width:1.72217464;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 330.97424,79.255626 -3.97425,-3.974249 -3.97424,3.974249"
id="path43498-9-6"
sodipodi:nodetypes="ccc"
@@ -84168,7 +82912,7 @@
sodipodi:nodetypes="cc"
id="path17874"
d="m 330.97424,79.255626 -2.24089,-2.206598"
- style="fill:none;stroke:#ffffff;stroke-width:1.32474971;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1.32474971;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
</g>
</g>
<g
@@ -84181,11 +82925,11 @@
height="16"
width="16"
id="rect14357-6"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g17935">
<rect
- style="fill:#ec0606;fill-opacity:1;fill-rule:nonzero;stroke:#910000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ec0606;fill-opacity:1;fill-rule:nonzero;stroke:#910000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect43394-5-7"
width="6"
height="2"
@@ -84196,12 +82940,12 @@
<path
sodipodi:nodetypes="czszcccc"
id="path14368-1"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1"
d="m 542.6613,230.54031 -4.34213,0.008 c -5.18824,0.0101 -5.3353,-2.04831 -3.33529,-4.04831 0.96487,-0.96488 3.61611,-2.89515 -1.50001,-5 m 6.83689,6.08925 2.34054,2.95106 m -2.32899,2.96017 2.32899,-2.96017"
inkscape:connector-curvature="0" />
<path
d="m 542.6613,230.54031 -4.34213,0.008 c -5.18824,0.0106 -5.3353,-2.04783 -3.33529,-4.04783 0.96487,-0.96488 3.83708,-2.76256 -1.50001,-5 m 6.83689,6.08877 2.34054,2.95106 m -2.32899,2.96017 2.32899,-2.96017"
- style="fill:none;stroke:url(#linearGradient17932);stroke-width:1.50000143;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:7.40000034;display:inline"
+ style="display:inline;fill:none;stroke:url(#linearGradient17932);stroke-width:1.50000143;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:7.40000057;stroke-opacity:1"
id="path14375-4"
sodipodi:nodetypes="czszcccc"
inkscape:connector-curvature="0" />
@@ -84213,7 +82957,7 @@
height="2"
width="6"
id="rect43396-5-4"
- style="fill:#6996d7;fill-opacity:1;fill-rule:nonzero;stroke:#143564;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#6996d7;fill-opacity:1;fill-rule:nonzero;stroke:#143564;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
</g>
</g>
<g
@@ -84224,7 +82968,7 @@
height="16"
width="16"
id="rect25569-8"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="translate(1.1,-0.09992002)"
id="g20068">
@@ -84234,7 +82978,7 @@
height="7.0000267"
width="10"
id="rect15044-4"
- style="fill:url(#linearGradient20080);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:url(#linearGradient20080);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -84242,16 +82986,16 @@
<path
inkscape:connector-curvature="0"
id="path15046-4"
- style="fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- d="m 304.49848,605.5625 0,-2 c 0,-2 -0.62933,-3 -2.51731,-3.00008 -1.2779,5e-5 -2.17039,0.23501 -2.53494,1.78073"
+ style="fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 304.49848,605.5625 v -2 c 0,-2 -0.62933,-3 -2.51731,-3.00008 -1.2779,5e-5 -2.17039,0.23501 -2.53494,1.78073"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
sodipodi:nodetypes="cccc" />
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:url(#linearGradient20199);stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- d="m 304.49848,605.5625 0,-2.25 c 0,-1.75 -0.62933,-2.75 -2.51734,-2.75008 -1.27677,5e-5 -2.05659,0.20629 -2.29807,1.20103"
+ style="fill:none;stroke:url(#linearGradient20199);stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 304.49848,605.5625 v -2.25 c 0,-1.75 -0.62933,-2.75 -2.51734,-2.75008 -1.27677,5e-5 -2.05659,0.20629 -2.29807,1.20103"
id="path15049-9"
sodipodi:nodetypes="cscc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -84265,24 +83009,24 @@
height="5"
width="8"
id="rect15051-2"
- style="fill:none;stroke:url(#linearGradient20084);stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline" />
+ style="display:inline;fill:none;stroke:url(#linearGradient20084);stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path19016-6"
- d="m 304,607.5 7.5,0"
+ d="m 304,607.5 h 7.5"
style="opacity:0.5;fill:none;stroke:#939dac;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
style="opacity:0.5;fill:none;stroke:#939dac;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
- d="m 304,609.5 7.5,0"
+ d="m 304,609.5 h 7.5"
id="path19018-0" />
<path
inkscape:connector-curvature="0"
id="path19020-2"
- d="m 304,611.5 7.5,0"
+ d="m 304,611.5 h 7.5"
style="opacity:0.5;fill:none;stroke:#939dac;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
<rect
- style="fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.29999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.29999995;marker:none;enable-background:accumulate"
id="rect36041-6"
width="1"
height="2.0000124"
@@ -84294,16 +83038,16 @@
height="0.99994379"
width="0.99998754"
id="rect36043-2"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.29999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.29999995;marker:none;enable-background:accumulate" />
<path
- style="opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.29999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 308,608 0,2 -1,0 0,1 1,0 1,0 0,-1 0,-2 -1,0 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.29999995;marker:none;enable-background:accumulate"
+ d="m 308,608 v 2 h -1 v 1 h 1 1 v -1 -2 z"
id="path36045-7"
inkscape:connector-curvature="0" />
</g>
</g>
<g
- transform="translate(21,0)"
+ transform="translate(21)"
style="display:inline;enable-background:new"
id="ICON_LOCKED">
<rect
@@ -84312,7 +83056,7 @@
height="16"
width="16"
id="rect25569-8-3"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="translate(1.1,-0.09992002)"
id="g20068-2">
@@ -84322,7 +83066,7 @@
height="7.0000267"
width="10"
id="rect15044-4-1"
- style="fill:url(#linearGradient20080-5);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:url(#linearGradient20080-5);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -84330,16 +83074,16 @@
<path
inkscape:connector-curvature="0"
id="path15046-4-9"
- style="fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- d="m 310.5,605.5 0,-2 c 0,-2 -0.75,-3 -3,-3.00008 -2.25,8e-5 -3,1.00008 -3,3.00008 l 0,2"
+ style="fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 310.5,605.5 v -2 c 0,-2 -0.75,-3 -3,-3.00008 -2.25,8e-5 -3,1.00008 -3,3.00008 v 2"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
sodipodi:nodetypes="ccccc" />
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:url(#linearGradient20082-4);stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- d="m 310.5,605.5 c 0,0 0,-2.25 0,-2.25 0,-1.75 -0.75,-2.75 -3.00003,-2.75008 C 305.25,600.5 304.5,601.5 304.5,603.25 l 0,2.25005"
+ style="fill:none;stroke:url(#linearGradient20082-4);stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 310.5,605.5 c 0,0 0,-2.25 0,-2.25 0,-1.75 -0.75,-2.75 -3.00003,-2.75008 C 305.25,600.5 304.5,601.5 304.5,603.25 v 2.25005"
id="path15049-9-8"
sodipodi:nodetypes="csccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -84353,24 +83097,24 @@
height="5"
width="8"
id="rect15051-2-5"
- style="fill:none;stroke:url(#linearGradient20084-9);stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline" />
+ style="display:inline;fill:none;stroke:url(#linearGradient20084-9);stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path19016-6-0"
- d="m 304,607.5 7.5,0"
+ d="m 304,607.5 h 7.5"
style="opacity:0.5;fill:none;stroke:#939dac;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
style="opacity:0.5;fill:none;stroke:#939dac;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
- d="m 304,609.5 7.5,0"
+ d="m 304,609.5 h 7.5"
id="path19018-0-2" />
<path
inkscape:connector-curvature="0"
id="path19020-2-9"
- d="m 304,611.5 7.5,0"
+ d="m 304,611.5 h 7.5"
style="opacity:0.5;fill:none;stroke:#939dac;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
<rect
- style="fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.29999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.29999995;marker:none;enable-background:accumulate"
id="rect36041-6-4"
width="1"
height="2.0000124"
@@ -84382,10 +83126,10 @@
height="0.99994379"
width="0.99998754"
id="rect36043-2-8"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.29999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.29999995;marker:none;enable-background:accumulate" />
<path
- style="opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.29999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 308,608 0,2 -1,0 0,1 1,0 1,0 0,-1 0,-2 -1,0 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.29999995;marker:none;enable-background:accumulate"
+ d="m 308,608 v 2 h -1 v 1 h 1 1 v -1 -2 z"
id="path36045-7-1"
inkscape:connector-curvature="0" />
</g>
@@ -84395,7 +83139,7 @@
style="display:inline;enable-background:new"
id="ICON_EYEDROPPER">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect18696-0-4-1"
width="16"
height="16"
@@ -84404,8 +83148,8 @@
<g
id="g17099">
<path
- style="fill:url(#linearGradient16783-1-6-0-2);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline;enable-background:new"
- d="M 309.7702,332.24765 304.5,337.5 l -1,0 -1,1 -1,0 0,-1 1,-1 0,-1 5.2702,-5.25235 z"
+ style="display:inline;fill:url(#linearGradient16783-1-6-0-2);fill-opacity:1;fill-rule:evenodd;stroke:none;enable-background:new"
+ d="M 309.7702,332.24765 304.5,337.5 h -1 l -1,1 h -1 v -1 l 1,-1 v -1 l 5.2702,-5.25235 z"
id="path18700-1-3-9"
sodipodi:nodetypes="cccccccccc"
inkscape:connector-curvature="0" />
@@ -84413,18 +83157,18 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccc"
id="path17007-7"
- d="M 309.7702,332.24765 304.5,337.5 l -1,0 -1,1 -1,0 0,-1 1,-1 0,-1 5.2702,-5.25235 z"
- style="fill:none;stroke:#000000;stroke-width:0.69999999;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new" />
+ d="M 309.7702,332.24765 304.5,337.5 h -1 l -1,1 h -1 v -1 l 1,-1 v -1 l 5.2702,-5.25235 z"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:0.69999999;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new" />
<path
sodipodi:nodetypes="ccszsccc"
id="path18711-5-8-1"
- d="m 310.5,333.5 0,-2.75 c 1.1224,0 1.75,0 2.5,-0.75 0.75,-0.75 0.75,-2.25 0,-3 -0.75,-0.75 -2.25,-0.75 -3,0 -0.75,0.75 -0.75,1.49506 -0.75,2.5 l -2.75,0 4,4 z"
- style="fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:#1a1a1a;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline;enable-background:new"
+ d="m 310.5,333.5 v -2.75 c 1.1224,0 1.75,0 2.5,-0.75 0.75,-0.75 0.75,-2.25 0,-3 -0.75,-0.75 -2.25,-0.75 -3,0 -0.75,0.75 -0.75,1.49506 -0.75,2.5 h -2.75 z"
+ style="display:inline;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:#1a1a1a;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
<path
inkscape:transform-center-x="-1.4435745"
inkscape:transform-center-y="-1.4192649"
- style="fill:url(#linearGradient16778-3-5-3-2);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline;enable-background:new"
+ style="display:inline;fill:url(#linearGradient16778-3-5-3-2);fill-opacity:1;fill-rule:evenodd;stroke:none;enable-background:new"
d="m 309.22323,329.79745 c -0.11594,-0.12547 0.0486,-1.2642 0.81343,-2.11918 1.04731,-1.1688 1.89745,-0.8692 1.99021,-0.61778 1.02063,2.76644 -1.73024,3.89859 -2.80364,2.73696 z"
id="path18713-4-2-0"
sodipodi:nodetypes="csss"
@@ -84432,11 +83176,11 @@
<path
sodipodi:nodetypes="ccc"
id="path18715-9-8-1"
- d="m 308.26612,330.5 c 0,0 0.25,0 0.25,0 l 0,-1"
- style="opacity:0.98000004;fill:none;stroke:url(#linearGradient16775-4-9-5-6);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline;enable-background:new"
+ d="m 308.26612,330.5 c 0,0 0.25,0 0.25,0 v -1"
+ style="display:inline;opacity:0.98000004;fill:none;stroke:url(#linearGradient16775-4-9-5-6);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#ffffff;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
+ style="display:inline;fill:none;stroke:#ffffff;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
d="m 303.25,335.75 4.17237,-4.0625"
id="path18705-8-4-0"
sodipodi:nodetypes="cc"
@@ -84453,7 +83197,7 @@
height="16"
width="16"
id="rect22048-0-1-2"
- style="opacity:0.01000001;fill:#999999;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#999999;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate" />
<g
id="g17930-6">
<rect
@@ -84462,46 +83206,46 @@
height="6.0211244"
width="9.0000076"
id="rect22050-0-1-6"
- style="opacity:0.6;fill:#ffd6aa;fill-opacity:1;fill-rule:evenodd;stroke:#2b1600;stroke-width:0.40000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#ffd6aa;fill-opacity:1;fill-rule:evenodd;stroke:#2b1600;stroke-width:0.40000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="ccccc"
id="path22056-3-7-1"
- d="m 282.5,316.5 3,3 3,-3 -3,-3 -3,3 z"
- style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 282.5,316.5 3,3 3,-3 -3,-3 z"
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 282.75,316.5 2.75,2.75 2.75,-2.75 -2.75,-2.75 -2.75,2.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
+ d="m 282.75,316.5 2.75,2.75 2.75,-2.75 -2.75,-2.75 z"
id="path22058-8-8-7"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
id="path22060-3-9-9"
- d="m 283.5,316.5 2,-2 2,2 -2,2 -2,-2 z"
- style="fill:none;stroke:url(#linearGradient18148);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 283.5,316.5 2,-2 2,2 -2,2 z"
+ style="fill:none;stroke:url(#linearGradient18148);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccc"
id="path22157-2-9-1"
- d="m 287.75,308.25 0,0.5 2.5,2.5 0.5,0 2.5,-2.5 0,-0.5 -2.5,-2.5 -0.5,0 -2.5,2.5 z"
- style="fill:none;stroke:#552c00;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 287.75,308.25 v 0.5 l 2.5,2.5 h 0.5 l 2.5,-2.5 v -0.5 l -2.5,-2.5 h -0.5 z"
+ style="fill:none;stroke:#552c00;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
style="fill:#e98316;fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 288,308.5 2.5,2.5 2.5,-2.5 -2.5,-2.5 -2.5,2.5 z"
+ d="m 288,308.5 2.5,2.5 2.5,-2.5 -2.5,-2.5 z"
id="path22159-1-9-5"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
id="path22161-4-8-9"
- d="M 288.64504,308.5 290.5,306.66161 292.35496,308.5 290.5,310.36049 z"
- style="fill:none;stroke:url(#linearGradient17904-1);stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 288.64504,308.5 290.5,306.66161 292.35496,308.5 290.5,310.36049 Z"
+ style="fill:none;stroke:url(#linearGradient17904-1);stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 278.75,308.25 0,0.5 2.5,2.5 0.5,0 2.5,-2.5 0,-0.5 -2.5,-2.5 -0.5,0 -2.5,2.5 z"
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 278.75,308.25 v 0.5 l 2.5,2.5 h 0.5 l 2.5,-2.5 v -0.5 l -2.5,-2.5 h -0.5 z"
id="path22208-0-8-1"
sodipodi:nodetypes="ccccccccc"
inkscape:connector-curvature="0" />
@@ -84509,12 +83253,12 @@
sodipodi:nodetypes="ccccc"
id="path22212-5-4-4"
d="m 279,308.5 2.5,2.5 2.5,-2.5 -2.5,-2.5 z"
- style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
- style="fill:none;stroke:url(#linearGradient17893-5);stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="M 279.64062,308.5 281.5,306.66406 283.35547,308.5 281.5,310.375 z"
+ style="fill:none;stroke:url(#linearGradient17893-5);stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 279.64062,308.5 281.5,306.66406 283.35547,308.5 281.5,310.375 Z"
id="path22214-3-8-8"
inkscape:connector-curvature="0" />
</g>
@@ -84527,22 +83271,22 @@
height="16"
width="16"
id="rect35680"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
inkscape:transform-center-y="2.2787562"
inkscape:transform-center-x="-0.78726"
id="g35844"
transform="translate(-186,256.02369)"
- style="opacity:0.9;display:inline;enable-background:new">
+ style="display:inline;opacity:0.9;enable-background:new">
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc"
id="path35846"
d="m 454.5,218.5 c -1.25,-1.5 -2.5,-1.5 -4,1 -1.5,-2.5 -2.75,-2.5 -4,-1"
- style="opacity:0.85;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ style="opacity:0.85;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:#f2f2f2;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#f2f2f2;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 454.5,218.5 c -1.25,-1.5 -2.5,-1.5 -4,1 -1.5,-2.5 -2.75,-2.5 -4,-1"
id="path35848"
sodipodi:nodetypes="ccc" />
@@ -84551,10 +83295,10 @@
sodipodi:nodetypes="ccccc"
id="path35862"
d="m 264.5,485.5 -1,-1 -2,2 -2,-2 -1,1.02369"
- style="opacity:0.76499999;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.76499999;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#ffffff;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#ffffff;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 264.5,485.5 -1,-1 -2,2 -2,-2 -1,1.02369"
id="path35864"
sodipodi:nodetypes="ccccc"
@@ -84564,7 +83308,7 @@
id="g38276">
<path
inkscape:connector-curvature="0"
- style="opacity:0.85;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.85;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 292.5,459.5 c -1.25,-1.5 -3.5,-1.5 -5,1 -1.5,-2.5 -3.75,-2.5 -5,-1"
id="path35702"
sodipodi:nodetypes="ccc" />
@@ -84573,7 +83317,7 @@
sodipodi:nodetypes="ccc"
id="path35704"
d="m 292.5,459.5 c -1.25,-1.5 -3.5,-1.5 -5,1 -1.5,-2.5 -3.75,-2.5 -5,-1"
- style="fill:none;stroke:#ececec;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ style="fill:none;stroke:#ececec;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<path
sodipodi:nodetypes="cccc"
@@ -84585,68 +83329,68 @@
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0"
d="m 264.46875,474.79687 -0.0312,0.9375 m -0.85937,-1.07813 c 0.49634,0.0684 0.8328,0.24341 1.79687,0"
- style="fill:none;stroke:#f0f0f0;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ style="display:inline;fill:none;stroke:#f0f0f0;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
id="path16745-9" />
</g>
<g
- transform="translate(105,0)"
- style="opacity:0.3;display:inline;enable-background:new"
+ transform="translate(105)"
+ style="display:inline;opacity:0.3;enable-background:new"
id="ICON_RESTRICT_SELECT_ON">
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc"
id="path45378-1-5-0"
- d="m 367.75,440.75 1.75,-1.5 2.5,5.25 1.75,-1 -2.25,-5 2.5,0 -6.25,-6.25 z"
- style="fill:url(#linearGradient17833-9);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m 367.75,440.75 1.75,-1.5 2.5,5.25 1.75,-1 -2.25,-5 h 2.5 l -6.25,-6.25 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient17833-9);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
y="430"
x="362"
height="16"
width="16"
id="rect45374-0-5-0"
- style="opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0"
id="path17835-6"
- d="m 367.5,431.5 7,7.25 -3,0 2.5,4.75 -1.75,1 -2.5,-5 -2.25,2.25 z"
- style="fill:none;stroke:#000000;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ d="m 367.5,431.5 7,7.25 h -3 l 2.5,4.75 -1.75,1 -2.5,-5 -2.25,2.25 z"
+ style="fill:none;stroke:#000000;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path17845-4"
- d="m 368.34375,433.75 0,5.75"
- style="fill:none;stroke:#ffffff;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ d="m 368.34375,433.75 v 5.75"
+ style="fill:none;stroke:#ffffff;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<g
- transform="translate(84,0)"
+ transform="translate(84)"
style="display:inline;enable-background:new"
id="ICON_RESTRICT_SELECT_OFF">
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc"
id="path45378-1-5-6"
- d="m 367.75,440.75 1.75,-1.5 2.5,5.25 1.75,-1 -2.25,-5 2.5,0 -6.25,-6.25 z"
- style="fill:url(#linearGradient17833-8);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m 367.75,440.75 1.75,-1.5 2.5,5.25 1.75,-1 -2.25,-5 h 2.5 l -6.25,-6.25 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient17833-8);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
y="430"
x="362"
height="16"
width="16"
id="rect45374-0-5-6"
- style="opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0"
id="path17835-7"
- d="m 367.5,431.5 7,7.25 -3,0 2.5,4.75 -1.75,1 -2.5,-5 -2.25,2.25 z"
- style="fill:none;stroke:#000000;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ d="m 367.5,431.5 7,7.25 h -3 l 2.5,4.75 -1.75,1 -2.5,-5 -2.25,2.25 z"
+ style="fill:none;stroke:#000000;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path17845-9"
- d="m 368.34375,433.75 0,5.75"
- style="fill:none;stroke:#ffffff;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ d="m 368.34375,433.75 v 5.75"
+ style="fill:none;stroke:#ffffff;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<g
style="display:inline;enable-background:new"
@@ -84658,7 +83402,7 @@
height="16"
width="16"
id="rect20642-6"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="translate(-29.016109,339.00751)"
id="g20606-2">
@@ -84670,8 +83414,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccc"
- style="fill:none;stroke:#000000;stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- d="m 429.9998,196.99249 0,1.625 c -0.53409,0.12195 -1.02562,0.33162 -1.46875,0.625 l -1.53125,-1.25 -1,1 1.25,1.53125 c -0.29338,0.44313 -0.50305,0.93466 -0.625,1.46875 l -1.625,0 0,2 1.625,0 c 0.12195,0.53409 0.33162,1.02562 0.625,1.46875 l -1.25,1.53125 1,1 1.53125,-1.25 c 0.44313,0.29338 0.93466,0.50305 1.46875,0.625 l 0,1.625 2,0 0,-1.625 c 0.53409,-0.12195 1.02562,-0.33162 1.46875,-0.625 l 1.53125,1.25 1,-1 -1.25,-1.53125 c 0.29338,-0.44313 0.50305,-0.93466 0.625,-1.46875 l 1.625,0 0,-2 -1.625,0 c -0.12195,-0.53409 -0.33162,-1.02562 -0.625,-1.46875 l 1.25,-1.53125 -1,-1 -1.53125,1.25 c -0.44313,-0.29338 -0.93466,-0.50305 -1.46875,-0.625 l 0,-1.625 -2,0 z m -1,4 4,0 0,4 -4,0 0,-4 z"
+ style="fill:none;stroke:#000000;stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 429.9998,196.99249 v 1.625 c -0.53409,0.12195 -1.02562,0.33162 -1.46875,0.625 l -1.53125,-1.25 -1,1 1.25,1.53125 c -0.29338,0.44313 -0.50305,0.93466 -0.625,1.46875 h -1.625 v 2 h 1.625 c 0.12195,0.53409 0.33162,1.02562 0.625,1.46875 l -1.25,1.53125 1,1 1.53125,-1.25 c 0.44313,0.29338 0.93466,0.50305 1.46875,0.625 v 1.625 h 2 v -1.625 c 0.53409,-0.12195 1.02562,-0.33162 1.46875,-0.625 l 1.53125,1.25 1,-1 -1.25,-1.53125 c 0.29338,-0.44313 0.50305,-0.93466 0.625,-1.46875 h 1.625 v -2 h -1.625 c -0.12195,-0.53409 -0.33162,-1.02562 -0.625,-1.46875 l 1.25,-1.53125 -1,-1 -1.53125,1.25 c -0.44313,-0.29338 -0.93466,-0.50305 -1.46875,-0.625 v -1.625 z m -1,4 h 4 v 4 h -4 z"
id="path10955-5"
inkscape:connector-curvature="0" />
<path
@@ -84680,12 +83424,12 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccc"
id="path10957-4"
- d="m 429.9998,196.99249 0,1.625 c -0.53409,0.12195 -1.02562,0.33162 -1.46875,0.625 l -1.53125,-1.25 -1,1 1.25,1.53125 c -0.29338,0.44313 -0.50305,0.93466 -0.625,1.46875 l -1.625,0 0,2 1.625,0 c 0.12195,0.53409 0.33162,1.02562 0.625,1.46875 l -1.25,1.53125 1,1 1.53125,-1.25 c 0.44313,0.29338 0.93466,0.50305 1.46875,0.625 l 0,1.625 2,0 0,-1.625 c 0.53409,-0.12195 1.02562,-0.33162 1.46875,-0.625 l 1.53125,1.25 1,-1 -1.25,-1.53125 c 0.29338,-0.44313 0.50305,-0.93466 0.625,-1.46875 l 1.625,0 0,-2 -1.625,0 c -0.12195,-0.53409 -0.33162,-1.02562 -0.625,-1.46875 l 1.5,-1.78125 -1,-1 -1.78125,1.5 c -0.44313,-0.29338 -0.93466,-0.50305 -1.46875,-0.625 l 0,-1.625 -2,0 z m -1,4 4,0 0,4 -4,0 0,-4 z"
+ d="m 429.9998,196.99249 v 1.625 c -0.53409,0.12195 -1.02562,0.33162 -1.46875,0.625 l -1.53125,-1.25 -1,1 1.25,1.53125 c -0.29338,0.44313 -0.50305,0.93466 -0.625,1.46875 h -1.625 v 2 h 1.625 c 0.12195,0.53409 0.33162,1.02562 0.625,1.46875 l -1.25,1.53125 1,1 1.53125,-1.25 c 0.44313,0.29338 0.93466,0.50305 1.46875,0.625 v 1.625 h 2 v -1.625 c 0.53409,-0.12195 1.02562,-0.33162 1.46875,-0.625 l 1.53125,1.25 1,-1 -1.25,-1.53125 c 0.29338,-0.44313 0.50305,-0.93466 0.625,-1.46875 h 1.625 v -2 h -1.625 c -0.12195,-0.53409 -0.33162,-1.02562 -0.625,-1.46875 l 1.5,-1.78125 -1,-1 -1.78125,1.5 c -0.44313,-0.29338 -0.93466,-0.50305 -1.46875,-0.625 v -1.625 z m -1,4 h 4 v 4 h -4 z"
style="fill:url(#linearGradient20796-9);fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<path
- d="m 434.9998,198.49249 -1.5,1.25 m -2,-2.25 -1,0 0,1.5 c -0.35104,0.0802 -1.01806,0.29269 -1.5172,0.50569 m -1.49,1.50752 c -0.20864,0.49552 -0.41426,1.14284 -0.4928,1.48679 l -1.5,0 0,1 m 1.5,-5 -0.5,0.5 m 1.25,6.5 -1.25,1.5 m 6.5,-5.5 0,3.5 -3.5,0 m -3,-6 0.5,-0.5 1.5,1.25"
- style="fill:none;stroke:#f9f9f9;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
+ d="m 434.9998,198.49249 -1.5,1.25 m -2,-2.25 h -1 v 1.5 c -0.35104,0.0802 -1.01806,0.29269 -1.5172,0.50569 m -1.49,1.50752 c -0.20864,0.49552 -0.41426,1.14284 -0.4928,1.48679 h -1.5 v 1 m 1.5,-5 -0.5,0.5 m 1.25,6.5 -1.25,1.5 m 6.5,-5.5 v 3.5 h -3.5 m -3,-6 0.5,-0.5 1.5,1.25"
+ style="fill:none;stroke:#f9f9f9;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
id="path10959-0"
inkscape:connector-curvature="0" />
</g>
@@ -84705,7 +83449,7 @@
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<path
- d="m 432.53795,204.5065 2.96201,0 m -2.96201,1.993 2.96201,0 m -2.96201,1.993 2.96201,0"
+ d="m 432.53795,204.5065 h 2.96201 m -2.96201,1.993 h 2.96201 m -2.96201,1.993 h 2.96201"
style="fill:none;stroke:#000000;stroke-width:0.99999988px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
id="path10965-7"
sodipodi:nodetypes="cccccc"
@@ -84721,7 +83465,7 @@
height="8.0067444"
width="7.0067482"
id="rect10967-1"
- style="fill:none;stroke:url(#linearGradient20798-1);stroke-width:0.99325603;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:url(#linearGradient20798-1);stroke-width:0.99325603;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
@@ -84738,7 +83482,7 @@
height="16"
width="16.000002"
id="rect44300-0-5-3-4"
- style="opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;marker:none;enable-background:accumulate" />
<g
id="g81149-2">
<path
@@ -84746,46 +83490,46 @@
inkscape:connector-curvature="0"
id="path41299-1-2-7-4-0"
d="m 306.46211,325.45009 c -1.82601,0 -3.30699,1.48105 -3.30699,3.30711 0,0.25952 0.0379,0.51035 0.087,0.75425 0.18833,0.93505 0.24637,1.73179 -0.11603,2.43677 -0.32404,0.63034 -0.67881,0.97731 -1.45039,1.27638 -1.27734,0.49511 -2.17564,1.6304 -2.17564,3.04602 0,0.7411 0.24647,1.42826 0.6672,1.97265 0.21236,0.27479 0.1962,0.24789 0.29008,0.34806 0.60044,0.64074 1.56724,0.98341 2.29168,0.95729 0.74932,-0.027 1.28404,-0.28854 1.8855,-0.60911 0.58287,-0.31066 0.97831,-0.70633 1.82755,-0.69624 0.70498,0.008 1.33214,0.39548 1.88546,0.75426 0.55206,0.35795 1.29426,0.55886 1.8275,0.55114 1.8258,-0.0264 3.30697,-1.48104 3.30697,-3.30711 0,-1.23932 -0.68675,-2.33495 -1.71151,-2.87196 -0.78932,-0.41364 -1.71989,-0.83441 -2.11757,-1.47945 -0.44817,-0.72695 0.029,-2.46582 0.029,-2.46582 0.0441,-0.21523 0.087,-0.43896 0.087,-0.66722 0,-1.82606 -1.48098,-3.30711 -3.30698,-3.30711 z"
- style="fill:url(#linearGradient80406-8);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.89999998;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient80406-8);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.89999998;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="cscsscc"
inkscape:connector-curvature="0"
id="path15475-1-1-9"
d="m 306.46211,326.3494 c -1.34707,0 -2.40772,1.06069 -2.40772,2.4078 0,0.17324 0.0147,0.36498 0.058,0.5802 0.2006,0.99599 0.30102,2.03645 -0.20306,3.017 -0.3838,0.74661 -1.01301,1.33313 -1.91455,1.68257 -0.98238,0.38077 -1.59548,1.19286 -1.59548,2.23374 0.0793,1.22982 0.59501,1.65939 1.12899,2.05552"
- style="fill:none;stroke:url(#linearGradient80403-6);stroke-width:0.99999988;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient80403-6);stroke-width:0.99999988;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
- d="m 306.5,333.5 -4,3 m 4,-3 4,3 m -4,-8 0,5"
- style="fill:none;stroke:#acc1f5;stroke-width:2.29999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
+ d="m 306.5,333.5 -4,3 m 4,-3 4,3 m -4,-8 v 5"
+ style="display:inline;fill:none;stroke:#acc1f5;stroke-width:2.29999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
id="path16558"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path15730-0-3-9-7"
- style="fill:none;stroke:#474747;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
- d="m 306.5,333.5 -4,3 m 4,-3 4,3 m -4,-8 0,5" />
+ style="display:inline;fill:none;stroke:#474747;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="m 306.5,333.5 -4,3 m 4,-3 4,3 m -4,-8 v 5" />
<rect
- style="fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;display:inline;enable-background:new"
+ style="display:inline;fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;enable-background:new"
id="rect16285-9-59-6-8-3"
width="2.0172396"
height="2.0000157"
x="305.48901"
y="327.52499" />
<rect
- style="fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;display:inline;enable-background:new"
+ style="display:inline;fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;enable-background:new"
id="rect16285-9-59-6-82-7"
width="2.0172396"
height="2.0000157"
x="301.52026"
y="335.49374" />
<rect
- style="fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;display:inline;enable-background:new"
+ style="display:inline;fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;enable-background:new"
id="rect16285-9-59-6-9-2"
width="2.0172396"
height="2.0000157"
x="309.49374"
y="335.49374" />
<rect
- style="fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;display:inline;enable-background:new"
+ style="display:inline;fill:#d7e3f4;fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;enable-background:new"
id="rect16285-9-59-6-1-6"
width="2.0172396"
height="2.0000157"
@@ -84799,7 +83543,7 @@
id="g79830"
style="display:inline;enable-background:new">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect52984-1"
width="16"
height="16"
@@ -84813,8 +83557,8 @@
style="display:inline;enable-background:new">
<path
inkscape:connector-curvature="0"
- style="fill:url(#linearGradient39254-3);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline"
- d="m 756.16666,204.50001 10.33334,0 0,14.99999 -13,0 -10e-6,-11.99999 2.66667,-3 z"
+ style="display:inline;fill:url(#linearGradient39254-3);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
+ d="M 756.16666,204.50001 H 766.5 V 219.5 h -13 l -10e-6,-11.99999 z"
id="path39241-0"
sodipodi:nodetypes="cccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -84827,55 +83571,55 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccccc"
id="path39243-2"
- d="m 756.16666,204.50001 10.33334,0 0,14.99999 -13,0 -10e-6,-11.99999 2.66667,-3 z"
- style="opacity:0.3;fill:url(#radialGradient39256-2);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="M 756.16666,204.50001 H 766.5 V 219.5 h -13 l -10e-6,-11.99999 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:url(#radialGradient39256-2);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
id="path39245-4"
- style="fill:none;stroke:url(#linearGradient39258-9);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;display:inline"
- d="m 754.5,209 0,9.5 m 3.5,-13 7.5,0"
+ style="display:inline;fill:none;stroke:url(#linearGradient39258-9);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 754.5,209 v 9.5 m 3.5,-13 h 7.5"
sodipodi:nodetypes="cccc" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc"
id="path39247-4"
- d="m 753,208 4,0 0,-4 -4,4 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" />
+ d="m 753,208 h 4 v -4 z"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc"
id="path39249-3"
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 753.5,207.00001 0,12.49999 13,0 0,-14.99999 -10.5,0 -2.5,2.5 z"
+ style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 753.5,207.00001 V 219.5 h 13 V 204.50001 H 756 Z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<path
inkscape:connector-curvature="0"
style="fill:none;stroke:url(#linearGradient16151);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
- d="m 757.5,206.5 0,2 -2,0"
+ d="m 757.5,206.5 v 2 h -2"
id="path39251-7" />
</g>
<path
- style="color:#000000;fill:none;stroke:#000000;stroke-width:1.70000005;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 481.21875,81.25 c -0.34507,-0.155271 -0.69504,-0.245578 -1.125,-0.34375 L 479.9375,79 l -1,0 -1,0 -0.15625,1.90625 c -0.6231,0.14227 -1.07677,0.25145 -1.59375,0.59375 l -1.75,-1.75 -1.75,1.75 1.75,1.75 c -0.34229,0.51699 -0.45148,0.97065 -0.59375,1.59375 L 471.9375,85 l 0,1 0,1 1.90625,0.15625 c 0.092,0.4031 0.17505,0.738019 0.3125,1.0625 m 2.96875,0 C 476.47574,87.692174 476.0625,86.902037 476.0625,86 c 0,-1.58782 1.28718,-2.875 2.875,-2.875 0.94357,0 1.75793,0.454854 2.28125,1.15625"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1.70000005;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 481.21875,81.25 c -0.34507,-0.155271 -0.69504,-0.245578 -1.125,-0.34375 L 479.9375,79 h -1 -1 l -0.15625,1.90625 c -0.6231,0.14227 -1.07677,0.25145 -1.59375,0.59375 l -1.75,-1.75 -1.75,1.75 1.75,1.75 c -0.34229,0.51699 -0.45148,0.97065 -0.59375,1.59375 L 471.9375,85 v 1 1 l 1.90625,0.15625 c 0.092,0.4031 0.17505,0.738019 0.3125,1.0625 m 2.96875,0 C 476.47574,87.692174 476.0625,86.902037 476.0625,86 c 0,-1.58782 1.28718,-2.875 2.875,-2.875 0.94357,0 1.75793,0.454854 2.28125,1.15625"
id="path52980-3"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccccccccccssc" />
<path
- style="color:#000000;fill:url(#linearGradient79029);fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 477.9375,79 -0.15625,1.90625 c -0.6231,0.14227 -1.07677,0.25145 -1.59375,0.59375 l -1.75,-1.5 -1.5,1.5 1.5,1.75 c -0.34229,0.51699 -0.45148,0.97065 -0.59375,1.59375 L 471.9375,85 l 0,1 0,1 1.90625,0.15625 c 0.0981,0.429533 0.18992,0.780253 0.34375,1.125 l 2.8125,0 C 476.34893,87.730943 475.9375,86.919238 475.9375,86 c 0,-1.65685 1.34315,-3 3,-3 0.96105,0 1.7947,0.453338 2.34375,1.15625 l 0,-2.875 c -0.36595,-0.173211 -0.73124,-0.270823 -1.1875,-0.375 L 479.9375,79 l -1,0 -1,0 z m 3.34375,8.8125 c -0.12902,0.1662 -0.24569,0.333041 -0.40625,0.46875 l 0.40625,0 0,-0.46875 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient79029);fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;enable-background:accumulate"
+ d="m 477.9375,79 -0.15625,1.90625 c -0.6231,0.14227 -1.07677,0.25145 -1.59375,0.59375 l -1.75,-1.5 -1.5,1.5 1.5,1.75 c -0.34229,0.51699 -0.45148,0.97065 -0.59375,1.59375 L 471.9375,85 v 1 1 l 1.90625,0.15625 c 0.0981,0.429533 0.18992,0.780253 0.34375,1.125 H 477 C 476.34893,87.730943 475.9375,86.919238 475.9375,86 c 0,-1.65685 1.34315,-3 3,-3 0.96105,0 1.7947,0.453338 2.34375,1.15625 v -2.875 c -0.36595,-0.173211 -0.73124,-0.270823 -1.1875,-0.375 L 479.9375,79 h -1 z m 3.34375,8.8125 c -0.12902,0.1662 -0.24569,0.333041 -0.40625,0.46875 h 0.40625 z"
id="path52982-4"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient79025);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.26976086;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient79025);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.26976109;stroke-opacity:1;marker:none;enable-background:accumulate"
d="M 481.28125,83.40625 C 480.661,82.839183 479.84801,82.5 478.9375,82.5 c -1.93397,0 -3.5,1.566029 -3.5,3.5 0,0.881253 0.34008,1.6682 0.875,2.28125"
id="rect52986-8"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cssc" />
<path
- style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- d="m 476.4375,81.75 c 0.49914,-0.213 1.64896,-0.6698 2,-0.75 l 0,-0.75 0,-0.75 1,0 m -5.25,1.25 -0.5,0.5 z m 0.5,2.75 c -0.20864,0.49552 -0.6715,1.65605 -0.75,2 l -0.75,0 -0.75,0 0,1"
+ style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 476.4375,81.75 c 0.49914,-0.213 1.64896,-0.6698 2,-0.75 V 80.25 79.5 h 1 m -5.25,1.25 -0.5,0.5 z m 0.5,2.75 c -0.20864,0.49552 -0.6715,1.65605 -0.75,2 h -0.75 -0.75 v 1"
id="path52988-6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccccccc" />
@@ -84883,13 +83627,13 @@
sodipodi:nodetypes="cc"
id="path52990-8"
d="m 473.43328,81.74394 1.25,-1.25"
- style="fill:none;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.4;fill:none;stroke:url(#linearGradient79020);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.26976086;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.4;fill:none;stroke:url(#linearGradient79020);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.26976109;stroke-opacity:1;marker:none;enable-background:accumulate"
d="M 481.28125,83.40625 C 480.661,82.839183 479.84801,82.5 478.9375,82.5 c -1.93397,0 -3.5,1.566029 -3.5,3.5 0,0.881253 0.34008,1.6682 0.875,2.28125"
id="rect52992-4"
inkscape:connector-curvature="0"
@@ -84898,8 +83642,8 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc"
id="path39249-3-7"
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
- d="m 468.49796,75.999224 0,12.49999 13,0 0,-14.99999 -10.5,0 -2.5,2.5 z"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="m 468.49796,75.999224 v 12.49999 h 13 v -14.99999 h -10.5 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
@@ -84910,13 +83654,13 @@
sodipodi:end="6.2578421"
sodipodi:start="1.6883393"
transform="matrix(1.0460001,0,0,1.0460077,-22.029739,-4.0047766)"
- d="m 478.63139,88.358828 a 2.34375,2.34375 0 1 1 2.61786,-2.38697"
+ d="m 478.63139,88.358828 a 2.34375,2.34375 0 0 1 -2.06316,-2.491306 2.34375,2.34375 0 0 1 2.39025,-2.17944 2.34375,2.34375 0 0 1 2.29077,2.283776"
sodipodi:ry="2.34375"
sodipodi:rx="2.34375"
sodipodi:cy="86.03125"
sodipodi:cx="478.90625"
id="path81543"
- style="fill:none;stroke:#000000;stroke-width:0.9560194;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:0.9560194;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:type="arc" />
</g>
<g
@@ -84928,14 +83672,14 @@
height="16"
width="16"
id="rect38813-3-2"
- style="opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
- transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,76.587007,362.72598)"
+ transform="rotate(45,-399.55549,273.81169)"
id="g10876-8-5-8-64-4"
style="display:inline;enable-background:new">
<path
- style="fill:url(#linearGradient16663-3-0-8);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- d="m 226.05286,111.6246 3.53553,0 1e-5,-3.53553 2.82843,0 0,3.53553 3.53553,0 -1e-5,2.82843 -3.53553,0 0,3.53553 -2.82843,0 0,-3.53553 -3.53553,0 z"
+ style="fill:url(#linearGradient16663-3-0-8);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 226.05286,111.6246 h 3.53553 l 1e-5,-3.53553 h 2.82843 v 3.53553 h 3.53553 l -1e-5,2.82843 h -3.53553 v 3.53553 h -2.82843 v -3.53553 h -3.53553 z"
id="path10878-4-0-1-4-6"
sodipodi:nodetypes="ccccccccccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -84946,26 +83690,26 @@
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path16661-5-1-6"
- d="m 235.06847,113.56915 0,-1.06066"
- style="fill:none;stroke:#d4d4d4;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ d="m 235.06847,113.56915 v -1.06066"
+ style="fill:none;stroke:#d4d4d4;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path16659-5-9-6"
- d="m 230.47227,114.62981 0,2.47487"
- style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ d="m 230.47227,114.62981 v 2.47487"
+ style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path16657-8-5-2"
- d="m 230.47227,108.97295 0,2.47488"
- style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ d="m 230.47227,108.97295 v 2.47488"
+ style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path10880-7-5-7-5-9"
- d="m 226.93674,112.50849 0,1.06066"
- style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ d="m 226.93674,112.50849 v 1.06066"
+ style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</g>
<g
@@ -84978,14 +83722,14 @@
height="16"
width="16"
id="rect38813-3-1"
- style="opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
- transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,76.587007,362.72598)"
+ transform="rotate(45,-399.55549,273.81169)"
id="g10876-8-5-8-64-9"
style="display:inline;enable-background:new">
<path
- style="fill:url(#linearGradient16663-3-0-0);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- d="m 224.63864,111.6246 4.94975,0 0,-4.94974 2.82843,0 1e-5,4.94974 4.94973,0 -1e-5,2.82843 -4.94973,0 0,4.94975 -2.82843,0 0,-4.94975 -4.94975,0 z"
+ style="fill:url(#linearGradient16663-3-0-0);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 224.63864,111.6246 h 4.94975 v -4.94974 h 2.82843 l 1e-5,4.94974 h 4.94973 l -1e-5,2.82843 h -4.94973 v 4.94975 h -2.82843 v -4.94975 h -4.94975 z"
id="path10878-4-0-1-4-9"
sodipodi:nodetypes="ccccccccccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -84996,26 +83740,26 @@
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path16661-5-1-5"
- d="m 236.48268,113.56915 0,-1.06066"
- style="fill:none;stroke:#d4d4d4;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ d="m 236.48268,113.56915 v -1.06066"
+ style="fill:none;stroke:#d4d4d4;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path16659-5-9-5"
- d="m 230.47227,114.62981 0,3.88908"
- style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ d="m 230.47227,114.62981 v 3.88908"
+ style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path16657-8-5-5"
- d="m 230.47227,107.55874 0,3.88909"
- style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ d="m 230.47227,107.55874 v 3.88909"
+ style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path10880-7-5-7-5-6"
- d="m 225.52253,112.50849 0,1.06066"
- style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ d="m 225.52253,112.50849 v 1.06066"
+ style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</g>
<g
@@ -85027,56 +83771,56 @@
style="fill:#321900"
id="g23590">
<rect
- transform="scale(-1,-1)"
+ transform="scale(-1)"
y="-602"
x="-258"
height="2"
width="1"
id="rect23464"
- style="fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;enable-background:accumulate" />
<rect
- transform="scale(-1,-1)"
- style="fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ transform="scale(-1)"
+ style="display:inline;overflow:visible;visibility:visible;fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;enable-background:accumulate"
id="rect23466"
width="1"
height="2"
x="-258"
y="-606" />
<rect
- style="fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;enable-background:accumulate"
id="rect23548"
width="1"
height="2"
x="-273"
y="-602"
- transform="scale(-1,-1)" />
+ transform="scale(-1)" />
<rect
y="-606"
x="-273"
height="2"
width="1"
id="rect23550"
- style="fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- transform="scale(-1,-1)" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;enable-background:accumulate"
+ transform="scale(-1)" />
<rect
y="-268"
x="598"
height="2"
width="1"
id="rect23472"
- style="fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- transform="matrix(0,1,-1,0,0,0)" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ transform="rotate(90)" />
<rect
- transform="matrix(0,1,-1,0,0,0)"
- style="fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ transform="rotate(90)"
+ style="display:inline;overflow:visible;visibility:visible;fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect23474"
width="1"
height="2"
x="598"
y="-264" />
<rect
- transform="matrix(0,1,-1,0,0,0)"
- style="fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ transform="rotate(90)"
+ style="display:inline;overflow:visible;visibility:visible;fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect23476"
width="1"
height="2"
@@ -85088,11 +83832,11 @@
height="2"
width="1"
id="rect23480"
- style="fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- transform="matrix(0,1,-1,0,0,0)" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ transform="rotate(90)" />
<rect
- transform="matrix(0,1,-1,0,0,0)"
- style="fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ transform="rotate(90)"
+ style="display:inline;overflow:visible;visibility:visible;fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect23540"
width="1"
height="2"
@@ -85104,19 +83848,19 @@
height="2"
width="1"
id="rect23542"
- style="fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- transform="matrix(0,1,-1,0,0,0)" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ transform="rotate(90)" />
<rect
y="-271.99207"
x="607"
height="2"
width="1"
id="rect23544"
- style="fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- transform="matrix(0,1,-1,0,0,0)" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ transform="rotate(90)" />
<rect
- transform="matrix(0,1,-1,0,0,0)"
- style="fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ transform="rotate(90)"
+ style="display:inline;overflow:visible;visibility:visible;fill:#321900;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect23546"
width="1"
height="2"
@@ -85134,15 +83878,15 @@
x="-608"
y="-270" />
<rect
- transform="scale(-1,-1)"
- style="fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ transform="scale(-1)"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect23468"
width="1"
height="2"
x="-273"
y="-600" />
<rect
- transform="scale(-1,-1)"
+ transform="scale(-1)"
y="-604"
x="-273"
height="2"
@@ -85172,9 +83916,9 @@
width="1"
id="rect23529"
style="fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none"
- transform="matrix(0,1,-1,0,0,0)" />
+ transform="rotate(90)" />
<rect
- transform="matrix(0,1,-1,0,0,0)"
+ transform="rotate(90)"
style="fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="rect23531"
width="1"
@@ -85188,7 +83932,7 @@
width="1"
id="rect23533"
style="fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none"
- transform="matrix(0,1,-1,0,0,0)" />
+ transform="rotate(90)" />
<rect
y="-273"
x="-608"
@@ -85198,24 +83942,24 @@
style="fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none"
transform="matrix(0,-1,-1,0,0,0)" />
<rect
- style="fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect23525"
width="1"
height="2"
x="-258"
y="-600"
- transform="scale(-1,-1)" />
+ transform="scale(-1)" />
<rect
y="-604"
x="-258"
height="2"
width="1"
id="rect23527"
- style="fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- transform="scale(-1,-1)" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ transform="scale(-1)" />
<rect
- transform="scale(-1,-1)"
- style="fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ transform="scale(-1)"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff982a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect23537"
width="1"
height="2"
@@ -85228,12 +83972,12 @@
height="8"
width="14"
id="rect23637"
- style="opacity:0.2;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.2;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
- style="opacity:0.12999998;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 259,600 13,0 0,-1 -14,0 0,8 1,0 0,-7 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.12999998;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 259,600 h 13 v -1 h -14 v 8 h 1 z"
id="path23639" />
<g
transform="translate(40,359)"
@@ -85241,39 +83985,39 @@
style="display:inline;enable-background:new">
<g
id="g23646"
- style="fill:#1a1a1a;display:inline;enable-background:new"
- transform="translate(5,-6.0000002e-7)" />
+ style="display:inline;fill:#1a1a1a;enable-background:new"
+ transform="translate(5)" />
</g>
</g>
<g
transform="translate(0.1767767,0.13258252)"
id="g106636">
<path
- style="fill:url(#linearGradient106641);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 263.5625,590.375 1.75,-1.5 1.99177,3.7253 1.75,-1 -1.74177,-3.4753 2.5,0 -6.25,-6.25 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient106641);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
+ d="m 263.5625,590.375 1.75,-1.5 1.99177,3.7253 1.75,-1 -1.74177,-3.4753 h 2.5 l -6.25,-6.25 z"
id="path45378-1-5-6-2-9"
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#000000;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 263.3125,581.125 7,7.25 -3,0 1.69346,3.25845 -1.75,1 -1.69346,-3.50845 -2.25,2.25 z"
+ style="fill:none;stroke:#000000;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 263.3125,581.125 7,7.25 h -3 l 1.69346,3.25845 -1.75,1 -1.69346,-3.50845 -2.25,2.25 z"
id="path17835-7-2-5"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc" />
<path
- style="fill:none;stroke:#ffffff;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 264.15625,583.375 0,5.75"
+ style="fill:none;stroke:#ffffff;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 264.15625,583.375 v 5.75"
id="path17845-9-1-1"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
</g>
</g>
<g
- transform="translate(0.02855492,0)"
+ transform="translate(0.02855492)"
style="display:inline;enable-background:new"
id="ICON_MOD_SOLIDIFY">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect18695-6-9-6"
width="15.971445"
height="16.000002"
@@ -85291,7 +84035,7 @@
sodipodi:nodetypes="ccccccc"
id="path18719-6-9-0"
d="m 117.94049,242.95683 -5.85545,2.34692 6.10637,2.4934 -0.17358,8.22275 6.00064,-3.2989 0.0442,-7.36753 z"
- style="fill:url(#linearGradient15851-6);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient15851-6);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<g
id="g18703-4-7-7"
@@ -85299,7 +84043,7 @@
<path
id="path18707-3-8-5"
d="m 146.0019,73.295281 5,-2.007976 5,2.007976 -5,2.073959 z"
- style="fill:url(#linearGradient15818-5);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient15818-5);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -85309,14 +84053,14 @@
<path
id="path18763-2-5-8"
d="m 124.01757,245.38766 -6.11113,2.33515 0.39771,8.10095 5.71891,-3.11585 z"
- style="fill:url(#linearGradient15846-4);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+ style="display:inline;fill:url(#linearGradient15846-4);fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path18709-1-1-0"
d="m 114.36329,244.98044 3.58667,-1.46751 5.56035,2.22692 0.0356,6.65202 -4.34973,2.45342"
- style="fill:none;stroke:url(#linearGradient15843-2);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:url(#linearGradient15843-2);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<g
id="g18737-4-8-8"
@@ -85326,18 +84070,18 @@
sodipodi:nodetypes="ccccccccccc"
inkscape:connector-curvature="0"
id="path15957-6"
- d="m 118.29703,256.35166 5.94799,-3.23942 c 0.0419,-0.0185 0.0806,-0.0443 0.11369,-0.0758 0.0689,-0.0703 0.11042,-0.16699 0.1137,-0.26543 l -0.0379,-7.432 c 10e-4,-0.16462 -0.1103,-0.32426 -0.26543,-0.37919 l -6.06694,-2.42677 c -0.0474,-0.0224 -0.0992,-0.0354 -0.15167,-0.0379 l 1.2e-4,0 c -0.0524,0.002 -0.10423,0.0154 -0.15167,0.0379 l -5.53168,2.30782"
- style="fill:none;stroke:#0b1728;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ d="m 118.29703,256.35166 5.94799,-3.23942 c 0.0419,-0.0185 0.0806,-0.0443 0.11369,-0.0758 0.0689,-0.0703 0.11042,-0.16699 0.1137,-0.26543 l -0.0379,-7.432 c 10e-4,-0.16462 -0.1103,-0.32426 -0.26543,-0.37919 l -6.06694,-2.42677 c -0.0474,-0.0224 -0.0992,-0.0354 -0.15167,-0.0379 h 1.2e-4 c -0.0524,0.002 -0.10423,0.0154 -0.15167,0.0379 l -5.53168,2.30782"
+ style="fill:none;stroke:#0b1728;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:type="inkscape:offset"
inkscape:radius="0.4429636"
inkscape:original="M 111.90625 245.375 L 111.9375 252.71875 L 117.90625 256 L 117.90625 248 L 111.90625 245.375 z "
- style="fill:none;stroke:url(#linearGradient16730);stroke-width:0.89999998;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:url(#linearGradient16730);stroke-width:0.89999998;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path16571-2"
- d="m 111.78125,244.9375 a 0.4430079,0.4430079 0 0 0 -0.3125,0.4375 l 0.0312,7.34375 a 0.4430079,0.4430079 0 0 0 0.21875,0.375 l 5.96875,3.28125 A 0.4430079,0.4430079 0 0 0 118.34375,256 l 0,-8 a 0.4430079,0.4430079 0 0 0 -0.25,-0.40625 l -6,-2.625 a 0.4430079,0.4430079 0 0 0 -0.3125,-0.0312 z" />
+ d="m 111.91211,244.93164 a 0.4430079,0.4430079 0 0 0 -0.44922,0.44531 l 0.0312,7.34375 a 0.4430079,0.4430079 0 0 0 0.23047,0.38672 l 5.96875,3.28125 A 0.4430079,0.4430079 0 0 0 118.34961,256 v -8 a 0.4430079,0.4430079 0 0 0 -0.26563,-0.40625 l -6,-2.625 a 0.4430079,0.4430079 0 0 0 -0.17187,-0.0371 z" />
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:url(#linearGradient16562-7);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:url(#linearGradient16562-7);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 117.31869,255.08504 -4.89325,-2.67466 -0.0154,-6.1798"
id="path16560-5"
sodipodi:nodetypes="ccc" />
@@ -85352,7 +84096,7 @@
<g
id="ICON_EDIT">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect39543"
width="16"
height="16"
@@ -85370,8 +84114,8 @@
transform="translate(-179,199.50012)">
<path
sodipodi:nodetypes="ccccccc"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000167;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 328.5,-107.25 -4.5,1.75 0,6.5 4.5,2.25 4.25,-2 0,-6.75 -4.25,-1.75 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000167;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 328.5,-107.25 -4.5,1.75 v 6.5 l 4.5,2.25 4.25,-2 v -6.75 z"
id="path39551"
inkscape:connector-curvature="0" />
<g
@@ -85380,8 +84124,8 @@
<path
sodipodi:nodetypes="ccccc"
id="path39556"
- d="m 154,80 0,-6.5 -4.5,-1.75 0,10.5 L 154,80 z"
- style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 154,80 v -6.5 l -4.5,-1.75 v 10.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -85392,20 +84136,20 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
id="path39558"
- d="m 324,-99.00012 0,-6.49988 4.5,-1.75 0.5,0.25 0,10 -0.5,0.25 -4.5,-2.25012 z"
- style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 324,-99.00012 V -105.5 l 4.5,-1.75 0.5,0.25 v 10 l -0.5,0.25 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
id="path39560"
- d="m 332.5,-105.5 0,6.25 -4,2 -4,-2.00012 0,-6.24988"
+ d="m 332.5,-105.5 v 6.25 l -4,2 -4,-2.00012 V -105.5"
style="fill:none;stroke:url(#linearGradient27496);stroke-width:0.99999982px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
id="path39562"
- d="m 324,-105.5 4.5,-1.75 4.5,1.75 -4.5,2 -4.5,-2 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 324,-105.5 4.5,-1.75 4.5,1.75 -4.5,2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -85424,9 +84168,9 @@
height="6.7500019"
width="1"
id="rect39567"
- style="opacity:0.35;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.35;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate" />
<rect
- style="opacity:0.09599998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.09599998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
id="rect39569"
width="1"
height="6.7500019"
@@ -85434,7 +84178,7 @@
y="96.000122" />
</g>
<rect
- style="fill:none;stroke:#8c4800;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#8c4800;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect39571"
width="2.9999485"
height="3.0001416"
@@ -85450,25 +84194,25 @@
height="3.0001416"
width="2.9999485"
id="rect39574"
- style="fill:none;stroke:#8c4800;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#8c4800;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<rect
y="517.99988"
x="28.021444"
height="4"
width="3.9785564"
id="rect37868-0-5"
- style="opacity:0.12000002;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.12000002;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<path
- style="fill:none;stroke:#5a2f00;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 28.000006,520.49983 -0.5,0 0,-3.00014 2.99995,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#5a2f00;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 28.000006,520.49983 h -0.5 v -3.00014 h 2.99995"
id="path39576"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
id="path39583"
- d="m 28.000006,524.49978 -0.5,0 0,3.00014 2.99995,0"
- style="fill:none;stroke:#5a2f00;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 28.000006,524.49978 h -0.5 v 3.00014 h 2.99995"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#5a2f00;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<rect
rx="0"
@@ -85478,14 +84222,14 @@
height="2.0000772"
width="1.9999485"
id="rect39585"
- style="fill:#ffd4a5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffd4a5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
y="524.99988"
x="28"
height="1.999992"
width="3.9785564"
id="rect37868-0-1"
- style="opacity:0.12000002;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.12000002;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
rx="0"
ry="0"
@@ -85494,27 +84238,27 @@
height="2.0000772"
width="1.9999485"
id="rect39587"
- style="fill:#ffd4a5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffd4a5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
</g>
<g
transform="translate(-122.79197,-20.867417)"
id="g106636-9"
style="display:inline;enable-background:new">
<path
- style="fill:url(#linearGradient106641-3);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 263.5625,590.375 1.75,-1.5 1.99177,3.7253 1.75,-1 -1.74177,-3.4753 2.5,0 -6.25,-6.25 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient106641-3);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
+ d="m 263.5625,590.375 1.75,-1.5 1.99177,3.7253 1.75,-1 -1.74177,-3.4753 h 2.5 l -6.25,-6.25 z"
id="path45378-1-5-6-2-9-3"
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#000000;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 263.3125,581.125 7,7.25 -3,0 1.69346,3.25845 -1.75,1 -1.69346,-3.50845 -2.25,2.25 z"
+ style="fill:none;stroke:#000000;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 263.3125,581.125 7,7.25 h -3 l 1.69346,3.25845 -1.75,1 -1.69346,-3.50845 -2.25,2.25 z"
id="path17835-7-2-5-1"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc" />
<path
- style="fill:none;stroke:#ffffff;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 264.15625,583.375 0,5.75"
+ style="fill:none;stroke:#ffffff;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 264.15625,583.375 v 5.75"
id="path17845-9-1-1-8"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
@@ -85530,12 +84274,12 @@
height="16"
width="16"
id="rect52907"
- style="opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="cc"
id="path52910"
d="m -368.95,374 5,-5"
- style="fill:none;stroke:#000000;stroke-width:3.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:3.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<g
mask="url(#mask52637-8-8)"
@@ -85543,28 +84287,28 @@
transform="translate(-18.95,-84)">
<path
sodipodi:nodetypes="ccccc"
- d="m -352.5,465.5 2,0 c 1.10456,0 2,-0.89543 2,-1.99999 l 0,-1.00001 -2.5,-2.5"
- style="color:#000000;fill:none;stroke:#3c0800;stroke-width:2.70000005;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -352.5,465.5 h 2 c 1.10456,0 2,-0.89543 2,-1.99999 V 462.5 L -351,460"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#3c0800;stroke-width:2.70000005;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path52914"
inkscape:connector-curvature="0" />
<path
id="path52916"
- style="color:#000000;fill:none;stroke:#ed7432;stroke-width:1.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -353.25,465.5 2.75,0 c 1.10456,0 2,-0.89543 2,-1.99999 l 0,-1.00001 -2.5,-2.5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ed7432;stroke-width:1.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -353.25,465.5 h 2.75 c 1.10456,0 2,-0.89543 2,-1.99999 V 462.5 L -351,460"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
mask="none"
sodipodi:nodetypes="ccccc"
- d="m -353.25,465.5 2.75,0 c 1.10456,0 2,-0.89543 2,-1.99999 l 0,-1.00001 -2.5,-2.5"
- style="color:#000000;fill:none;stroke:url(#linearGradient52998-5-5);stroke-width:1.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -353.25,465.5 h 2.75 c 1.10456,0 2,-0.89543 2,-1.99999 V 462.5 L -351,460"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient52998-5-5);stroke-width:1.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path52918"
inkscape:connector-curvature="0" />
</g>
<rect
ry="1.5"
rx="1.5"
- style="fill:none;stroke:#000000;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.26976086;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.26976109;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect52920"
width="3"
height="3"
@@ -85577,20 +84321,20 @@
mask="url(#mask52879-0-5)">
<path
id="path52924"
- style="color:#000000;fill:none;stroke:#0b1728;stroke-width:2.70000005;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -353.5,465.5 3,0 c 1.10456,0 2,-0.89543 2,-1.99999 l 0,-1.00001 -2.5,-2.5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0b1728;stroke-width:2.70000005;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -353.5,465.5 h 3 c 1.10456,0 2,-0.89543 2,-1.99999 V 462.5 L -351,460"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
- d="m -354.2,465.5 3.7,0 c 1.10456,0 2,-0.89543 2,-1.99999 l 0,-1.00001 -2.5,-2.5"
- style="color:#000000;fill:none;stroke:#7be10f;stroke-width:1.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -354.2,465.5 h 3.7 c 1.10456,0 2,-0.89543 2,-1.99999 V 462.5 L -351,460"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#7be10f;stroke-width:1.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path52926"
inkscape:connector-curvature="0" />
<path
id="path52928"
- style="color:#000000;fill:none;stroke:url(#linearGradient53000-3-9);stroke-width:1.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -354.2,465.5 3.75,0 c 1.10456,0 2,-0.89543 2,-1.99999 l 0,-1.00001 -2.5,-2.5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient53000-3-9);stroke-width:1.5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -354.2,465.5 h 3.75 c 1.10456,0 2,-0.89543 2,-1.99999 V 462.5 l -2.5,-2.5"
sodipodi:nodetypes="ccccc"
mask="none"
inkscape:connector-curvature="0" />
@@ -85602,11 +84346,11 @@
height="3"
width="3"
id="rect52930"
- style="fill:none;stroke:#000000;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.26976086;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:2.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.26976109;stroke-opacity:1;marker:none;enable-background:accumulate"
rx="1.5"
ry="1.5" />
<path
- style="fill:none;stroke:#b3b3b3;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#b3b3b3;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m -367.7,372.75 3.75,-3.75"
id="path52932"
sodipodi:nodetypes="cc"
@@ -85618,13 +84362,13 @@
height="3"
width="3"
id="rect52934"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.26976086;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.26976109;stroke-opacity:1;marker:none;enable-background:accumulate"
rx="1.5"
ry="1.5" />
<rect
ry="1.5"
rx="1.5"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.26976086;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#cccccc;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.26976109;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect52936"
width="3"
height="3"
@@ -85634,13 +84378,13 @@
<path
sodipodi:nodetypes="cc"
id="path52938"
- d="m -368.45,372.5 4,-4 1,0"
- style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m -368.45,372.5 4,-4 h 1"
+ style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<rect
ry="1.5"
rx="1.5"
- style="fill:none;stroke:url(#linearGradient53002-6-2);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.26976086;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient53002-6-2);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.26976109;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect52940"
width="3"
height="3"
@@ -85654,7 +84398,7 @@
height="3"
width="3"
id="rect52942"
- style="fill:none;stroke:url(#linearGradient58927);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.26976086;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient58927);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.26976109;stroke-opacity:1;marker:none;enable-background:accumulate"
rx="1.5"
ry="1.5" />
</g>
@@ -85663,14 +84407,14 @@
transform="translate(252,-210)"
id="g52978">
<path
- style="color:#000000;fill:none;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -198,536 -0.15625,1.90625 c -0.6231,0.14227 -1.07677,0.25145 -1.59375,0.59375 l -1.75,-1.75 -1.75,1.75 1.75,1.75 c -0.34229,0.51699 -0.45148,0.97065 -0.59375,1.59375 L -204,542 l 0,1 0,1 1.90625,0.15625 c 0.14227,0.6231 0.25145,1.07677 0.59375,1.59375 l -1.75,1.75 1.75,1.75 1.75,-1.75 c 0.51699,0.34229 0.97065,0.45148 1.59375,0.59375 L -198,550 l 1,0 1,0 0.15625,-1.90625 c 0.6231,-0.14227 1.07677,-0.25145 1.59375,-0.59375 l 1.75,1.75 1.75,-1.75 -1.75,-1.75 c 0.34229,-0.51699 0.45148,-0.97065 0.59375,-1.59375 L -190,544 l 0,-1 0,-1 -1.90625,-0.15625 c -0.14227,-0.6231 -0.25145,-1.07677 -0.59375,-1.59375 l 1.75,-1.75 -1.75,-1.75 -1.75,1.75 c -0.51699,-0.34229 -0.97065,-0.45148 -1.59375,-0.59375 L -196,536 l -1,0 -1,0 z m 1,4.125 c 1.58782,0 2.875,1.28718 2.875,2.875 0,1.58782 -1.28718,2.875 -2.875,2.875 -1.58782,0 -2.875,-1.28718 -2.875,-2.875 0,-1.58782 1.28718,-2.875 2.875,-2.875 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -198,536 -0.15625,1.90625 c -0.6231,0.14227 -1.07677,0.25145 -1.59375,0.59375 l -1.75,-1.75 -1.75,1.75 1.75,1.75 c -0.34229,0.51699 -0.45148,0.97065 -0.59375,1.59375 L -204,542 v 1 1 l 1.90625,0.15625 c 0.14227,0.6231 0.25145,1.07677 0.59375,1.59375 l -1.75,1.75 1.75,1.75 1.75,-1.75 c 0.51699,0.34229 0.97065,0.45148 1.59375,0.59375 L -198,550 h 1 1 l 0.15625,-1.90625 c 0.6231,-0.14227 1.07677,-0.25145 1.59375,-0.59375 l 1.75,1.75 1.75,-1.75 -1.75,-1.75 c 0.34229,-0.51699 0.45148,-0.97065 0.59375,-1.59375 L -190,544 v -1 -1 l -1.90625,-0.15625 c -0.14227,-0.6231 -0.25145,-1.07677 -0.59375,-1.59375 l 1.75,-1.75 -1.75,-1.75 -1.75,1.75 c -0.51699,-0.34229 -0.97065,-0.45148 -1.59375,-0.59375 L -196,536 h -1 z m 1,4.125 c 1.58782,0 2.875,1.28718 2.875,2.875 0,1.58782 -1.28718,2.875 -2.875,2.875 -1.58782,0 -2.875,-1.28718 -2.875,-2.875 0,-1.58782 1.28718,-2.875 2.875,-2.875 z"
id="path52980"
inkscape:connector-curvature="0" />
<path
id="path52982"
- d="m -196,550 0.15625,-1.90625 c 0.6231,-0.14227 1.07677,-0.25145 1.59375,-0.59375 l 1.75,1.5 1.5,-1.5 -1.5,-1.75 c 0.34229,-0.51699 0.45148,-0.97065 0.59375,-1.59375 L -190,544 l 0,-1 0,-1 -1.90625,-0.15625 c -0.14227,-0.6231 -0.25145,-1.07677 -0.59375,-1.59375 l 1.5,-1.75 -1.5,-1.5 -1.75,1.5 c -0.51699,-0.34229 -0.97065,-0.45148 -1.59375,-0.59375 L -196,536 l -1,0 -1,0 -0.15625,1.90625 c -0.6231,0.14227 -1.07677,0.25145 -1.59375,0.59375 l -1.75,-1.5 -1.5,1.5 1.5,1.75 c -0.34229,0.51699 -0.45148,0.97065 -0.59375,1.59375 L -204,542 l 0,1 0,1 1.90625,0.15625 c 0.14227,0.6231 0.25145,1.07677 0.59375,1.59375 l -1.5,1.75 1.5,1.5 1.75,-1.5 c 0.51699,0.34229 0.97065,0.45148 1.59375,0.59375 L -198,550 l 1,0 1,0 z m -1,-4 c -1.65685,0 -3,-1.34315 -3,-3 0,-1.65685 1.34315,-3 3,-3 1.65685,0 3,1.34315 3,3 0,1.65685 -1.34315,3 -3,3 z"
- style="color:#000000;fill:url(#linearGradient32854-6-2);fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -196,550 0.15625,-1.90625 c 0.6231,-0.14227 1.07677,-0.25145 1.59375,-0.59375 l 1.75,1.5 1.5,-1.5 -1.5,-1.75 c 0.34229,-0.51699 0.45148,-0.97065 0.59375,-1.59375 L -190,544 v -1 -1 l -1.90625,-0.15625 c -0.14227,-0.6231 -0.25145,-1.07677 -0.59375,-1.59375 l 1.5,-1.75 -1.5,-1.5 -1.75,1.5 c -0.51699,-0.34229 -0.97065,-0.45148 -1.59375,-0.59375 L -196,536 h -1 -1 l -0.15625,1.90625 c -0.6231,0.14227 -1.07677,0.25145 -1.59375,0.59375 l -1.75,-1.5 -1.5,1.5 1.5,1.75 c -0.34229,0.51699 -0.45148,0.97065 -0.59375,1.59375 L -204,542 v 1 1 l 1.90625,0.15625 c 0.14227,0.6231 0.25145,1.07677 0.59375,1.59375 l -1.5,1.75 1.5,1.5 1.75,-1.5 c 0.51699,0.34229 0.97065,0.45148 1.59375,0.59375 L -198,550 h 1 z m -1,-4 c -1.65685,0 -3,-1.34315 -3,-3 0,-1.65685 1.34315,-3 3,-3 1.65685,0 3,1.34315 3,3 0,1.65685 -1.34315,3 -3,3 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient32854-6-2);fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<rect
y="535"
@@ -85678,7 +84422,7 @@
height="16"
width="16"
id="rect52984"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<rect
ry="6.4999995"
rx="6.4999995"
@@ -85687,13 +84431,13 @@
height="6.981843"
width="6.981843"
id="rect52986"
- style="fill:none;stroke:url(#linearGradient32856-3-2);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.26976086;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient32856-3-2);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.26976109;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- d="m -192.5,537.5 -1.25,1.25 m -2.75,-2.25 -1,0 0,1.5 c -0.35104,0.0802 -1.50086,0.537 -2,0.75 m -1.75,1.75 c -0.20864,0.49552 -0.67146,1.65605 -0.75,2 l -1.5,0 0,1 m 1.75,-5.75 -0.5,0.5 m 1,8 -1.25,1.25"
+ style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m -192.5,537.5 -1.25,1.25 m -2.75,-2.25 h -1 v 1.5 c -0.35104,0.0802 -1.50086,0.537 -2,0.75 m -1.75,1.75 c -0.20864,0.49552 -0.67146,1.65605 -0.75,2 h -1.5 v 1 m 1.75,-5.75 -0.5,0.5 m 1,8 -1.25,1.25"
id="path52988"
sodipodi:nodetypes="cccccscccccccc"
inkscape:connector-curvature="0" />
@@ -85701,13 +84445,13 @@
sodipodi:nodetypes="cc"
id="path52990"
d="m -202.5,538.75 1.25,-1.25"
- style="fill:none;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.4;fill:none;stroke:url(#linearGradient32858-7-2);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.26976086;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.4;fill:none;stroke:url(#linearGradient32858-7-2);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.26976109;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect52992"
width="6.981843"
height="6.981843"
@@ -85715,13 +84459,13 @@
y="-546.48187"
rx="6.4999995"
ry="6.4999995"
- transform="scale(-1,-1)" />
+ transform="scale(-1)" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- style="opacity:0.35;fill:none;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- d="m -197.5,548.25 0,1.25 m 7,-7 -1.25,0"
+ style="opacity:0.35;fill:none;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m -197.5,548.25 v 1.25 m 7,-7 h -1.25"
id="path52994"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
@@ -85729,7 +84473,7 @@
sodipodi:nodetypes="cc"
id="path52996"
d="m -191.75,547.25 -1,1"
- style="opacity:0.3;fill:none;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="opacity:0.3;fill:none;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -85740,7 +84484,7 @@
id="g32860"
transform="translate(231,-294)">
<rect
- style="opacity:0;color:#000000;fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect32862"
width="16"
height="16"
@@ -85749,93 +84493,82 @@
<path
sodipodi:nodetypes="cccsssscccc"
style="opacity:0.5;fill:url(#linearGradient32896-0-4);fill-opacity:1;stroke:none"
- d="m -212.5,619.5 -2,0 -6.0625,6.0625 C -220.70928,625.548 -220.84942,625.5 -221,625.5 c -2.48528,0 -4.5,2.01473 -4.5,4.5 0,2.48527 2.01472,4.5 4.5,4.5 2.48528,0 4.5,-2.01473 4.5,-4.5 0,-0.14948 -0.017,-0.29176 -0.0312,-0.4375 l 6.0312,-6.0625 0,-2 -2,-2 z"
+ d="m -212.5,619.5 h -2 l -6.0625,6.0625 C -220.70928,625.548 -220.84942,625.5 -221,625.5 c -2.48528,0 -4.5,2.01473 -4.5,4.5 0,2.48527 2.01472,4.5 4.5,4.5 2.48528,0 4.5,-2.01473 4.5,-4.5 0,-0.14948 -0.017,-0.29176 -0.0312,-0.4375 L -210.5,623.5 v -2 z"
id="path32864"
inkscape:connector-curvature="0" />
- <path
- d="m -177.09897,651.49231 a 2.4505157,2.4923096 0 0 1 -2.45051,2.49231 A 2.4505157,2.4923096 0 0 1 -182,651.49231 2.4505157,2.4923096 0 0 1 -179.54948,649 a 2.4505157,2.4923096 0 0 1 2.45051,2.49231 z"
- sodipodi:ry="2.4923096"
- sodipodi:rx="2.4505157"
- sodipodi:cy="651.49231"
- sodipodi:cx="-179.54948"
+ <ellipse
id="path32866"
- style="color:#000000;fill:url(#linearGradient32899-8-3);fill-opacity:1;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc"
- transform="matrix(1.224232,0,0,1.2036922,-1.189782,-154.19619)" />
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient32899-8-3);fill-opacity:1;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
+ transform="matrix(1.224232,0,0,1.2036922,-1.189782,-154.19619)"
+ cx="-179.54948"
+ cy="651.49231"
+ rx="2.4505157"
+ ry="2.4923096" />
<path
sodipodi:nodetypes="ccccc"
id="path32868"
d="m -219.5,626.5 5.5,-5.5 0.5,-0.5 0.5,0.5 0.5,0.5"
- style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline;enable-background:new"
+ style="display:inline;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
<path
- transform="translate(-21,0)"
- d="M -193.09375,620.46875 -198.875,626.25 a 0.95626367,0.95626367 0 0 1 -0.78125,0.25 c -0.29297,-0.0289 -0.39637,-0.0312 -0.34375,-0.0312 -1.96853,0 -3.53125,1.56273 -3.53125,3.53125 0,1.96852 1.56272,3.53125 3.53125,3.53125 1.96853,0 3.53125,-1.56273 3.53125,-3.53125 0,-0.0768 0.0155,-0.18427 0,-0.34375 a 0.95626367,0.95626367 0 0 1 0.25,-0.78125 l 5.75,-5.78125 0,-1.1875 -1.4375,-1.4375 -1.1875,0 z"
+ transform="translate(-21)"
+ d="m -193.10547,620.45703 -5.78125,5.78125 a 0.95626367,0.95626367 0 0 1 -0.76953,0.27539 c -0.29297,-0.0289 -0.39637,-0.0566 -0.34375,-0.0566 -1.96853,0 -3.54297,1.57445 -3.54297,3.54297 0,1.96852 1.57444,3.54297 3.54297,3.54297 1.96853,0 3.54297,-1.57445 3.54297,-3.54297 0,-0.0768 -0.01,-0.18622 -0.0254,-0.3457 a 0.95626367,0.95626367 0 0 1 0.27344,-0.76563 l 5.75195,-5.7832 v -1.20899 l -1.43945,-1.43945 z"
id="path32870"
- style="fill:none;stroke:url(#radialGradient32901-4-9);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:url(#radialGradient32901-4-9);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:original="M -193.5 619.5 L -199.5625 625.5625 C -199.70928 625.548 -199.84942 625.5 -200 625.5 C -202.48528 625.5 -204.5 627.51473 -204.5 630 C -204.5 632.48527 -202.48528 634.5 -200 634.5 C -197.51472 634.5 -195.5 632.48527 -195.5 630 C -195.5 629.85052 -195.51705 629.70824 -195.53125 629.5625 L -189.5 623.5 L -189.5 621.5 L -191.5 619.5 L -193.5 619.5 z "
inkscape:radius="-0.95616806"
sodipodi:type="inkscape:offset" />
<path
id="path32872"
- d="m -217,624 0,1 -1,0 0,0.0312 -0.0312,0 0,0.96875 -0.96875,0 0,0.0312 -0.0312,0 0,1 -1,0 0,1 0,1 1,0 1,0 0,-1 1,0 0,-0.0312 0.0312,0 0,-0.96875 0.96875,0 0,-0.0312 0.0312,0 0,-1 1,0 0,-1 -1,0 0,-1 -1,0 z"
- style="color:#000000;fill:url(#linearGradient32903-6-4);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.97113496;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -217,624 v 1 h -1 v 0.0312 h -0.0312 v 0.96875 h -0.96875 v 0.0312 h -0.0312 v 1 h -1 v 1 1 h 1 1 v -1 h 1 v -0.0312 h 0.0312 v -0.96875 h 0.96875 V 627 H -216 v -1 h 1 v -1 h -1 v -1 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient32903-6-4);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.97113496;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
- <path
+ <circle
transform="matrix(1.2638889,0,0,1.2222222,32.853009,-140.1836)"
- d="m -201.22313,628.93835 a 0.80938911,0.80938911 0 0 1 -0.80939,0.80939 0.80938911,0.80938911 0 0 1 -0.80939,-0.80939 0.80938911,0.80938911 0 0 1 0.80939,-0.80938 0.80938911,0.80938911 0 0 1 0.80939,0.80938 z"
- sodipodi:ry="0.80938911"
- sodipodi:rx="0.80938911"
- sodipodi:cy="628.93835"
- sodipodi:cx="-202.03252"
id="path32874"
- style="opacity:0.7;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.97113496;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="opacity:0.7;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.97113496;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.97113496;marker:none;enable-background:accumulate"
+ cx="-202.03252"
+ cy="628.93835"
+ r="0.80938911" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.97113496;marker:none;enable-background:accumulate"
id="path32877"
- sodipodi:cx="-202.03252"
- sodipodi:cy="628.93835"
- sodipodi:rx="0.80938911"
- sodipodi:ry="0.80938911"
- d="m -201.22313,628.93835 a 0.80938911,0.80938911 0 0 1 -0.80939,0.80939 0.80938911,0.80938911 0 0 1 -0.80939,-0.80939 0.80938911,0.80938911 0 0 1 0.80939,-0.80938 0.80938911,0.80938911 0 0 1 0.80939,0.80938 z"
- transform="matrix(0.77047663,0,0,0.74507628,-63.8586,161.95861)" />
- <path
+ transform="matrix(0.77047663,0,0,0.74507628,-63.8586,161.95861)"
+ cx="-202.03252"
+ cy="628.93835"
+ r="0.80938911" />
+ <circle
transform="matrix(0.77047663,0,0,0.74507628,-64.708233,162.88548)"
- d="m -201.22313,628.93835 a 0.80938911,0.80938911 0 0 1 -0.80939,0.80939 0.80938911,0.80938911 0 0 1 -0.80939,-0.80939 0.80938911,0.80938911 0 0 1 0.80939,-0.80938 0.80938911,0.80938911 0 0 1 0.80939,0.80938 z"
- sodipodi:ry="0.80938911"
- sodipodi:rx="0.80938911"
- sodipodi:cy="628.93835"
- sodipodi:cx="-202.03252"
id="path32879"
- style="opacity:0.7;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.97113496;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.97113496;marker:none;enable-background:accumulate"
+ cx="-202.03252"
+ cy="628.93835"
+ r="0.80938911" />
<path
- style="opacity:0.35;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ style="display:inline;opacity:0.35;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
d="m -213.5,621.5 -6,6"
id="path32881"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
id="path32883"
- d="m -212.5,619.5 -2,0 -6.0625,6.0625 C -220.70928,625.548 -220.84942,625.5 -221,625.5 c -2.48528,0 -4.5,2.01473 -4.5,4.5 0,2.48527 2.01472,4.5 4.5,4.5 2.48528,0 4.5,-2.01473 4.5,-4.5 0,-0.14948 -0.017,-0.29176 -0.0312,-0.4375 l 6.0312,-6.0625 0,-2 -2,-2 z"
- style="fill:none;stroke:#000000;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m -212.5,619.5 h -2 l -6.0625,6.0625 C -220.70928,625.548 -220.84942,625.5 -221,625.5 c -2.48528,0 -4.5,2.01473 -4.5,4.5 0,2.48527 2.01472,4.5 4.5,4.5 2.48528,0 4.5,-2.01473 4.5,-4.5 0,-0.14948 -0.017,-0.29176 -0.0312,-0.4375 L -210.5,623.5 v -2 z"
+ style="fill:none;stroke:#000000;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="cccsssscccc"
inkscape:connector-curvature="0" />
<path
- transform="translate(-21,0)"
+ transform="translate(-21)"
sodipodi:type="inkscape:offset"
inkscape:radius="-0.95616806"
inkscape:original="M -193.5 619.5 L -199.5625 625.5625 C -199.70928 625.548 -199.84942 625.5 -200 625.5 C -202.48528 625.5 -204.5 627.51473 -204.5 630 C -204.5 632.48527 -202.48528 634.5 -200 634.5 C -197.51472 634.5 -195.5 632.48527 -195.5 630 C -195.5 629.85052 -195.51705 629.70824 -195.53125 629.5625 L -189.5 623.5 L -189.5 621.5 L -191.5 619.5 L -193.5 619.5 z "
- style="fill:none;stroke:url(#radialGradient32905-9-5);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:url(#radialGradient32905-9-5);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path32886"
- d="M -193.09375,620.46875 -198.875,626.25 a 0.95626367,0.95626367 0 0 1 -0.78125,0.25 c -0.29297,-0.0289 -0.39637,-0.0312 -0.34375,-0.0312 -1.96853,0 -3.53125,1.56273 -3.53125,3.53125 0,1.96852 1.56272,3.53125 3.53125,3.53125 1.96853,0 3.53125,-1.56273 3.53125,-3.53125 0,-0.0768 0.0155,-0.18427 0,-0.34375 a 0.95626367,0.95626367 0 0 1 0.25,-0.78125 l 5.75,-5.78125 0,-1.1875 -1.4375,-1.4375 -1.1875,0 z" />
+ d="m -193.10547,620.45703 -5.78125,5.78125 a 0.95626367,0.95626367 0 0 1 -0.76953,0.27539 c -0.29297,-0.0289 -0.39637,-0.0566 -0.34375,-0.0566 -1.96853,0 -3.54297,1.57445 -3.54297,3.54297 0,1.96852 1.57444,3.54297 3.54297,3.54297 1.96853,0 3.54297,-1.57445 3.54297,-3.54297 0,-0.0768 -0.01,-0.18622 -0.0254,-0.3457 a 0.95626367,0.95626367 0 0 1 0.27344,-0.76563 l 5.75195,-5.7832 v -1.20899 l -1.43945,-1.43945 z" />
<g
style="opacity:0.3;fill:#ffffff"
id="g32888">
<rect
- style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.20000005;marker:none;enable-background:accumulate"
id="rect32890"
width="1"
height="0.98873287"
@@ -85847,9 +84580,9 @@
height="0.98873287"
width="1"
id="rect32892"
- style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.20000005;marker:none;enable-background:accumulate" />
<rect
- style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.20000005;marker:none;enable-background:accumulate"
id="rect32894"
width="1"
height="0.98873287"
@@ -85867,7 +84600,7 @@
height="16"
width="16"
id="rect45977-0"
- style="opacity:0;fill:#666666;stroke:none;stroke-width:2.29999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#666666;stroke:none;stroke-width:2.29999995;marker:none;enable-background:accumulate"
transform="scale(1,-1)" />
<path
sodipodi:nodetypes="cscccc"
@@ -85877,14 +84610,14 @@
inkscape:connector-curvature="0" />
<path
id="path43211-1"
- d="m -42.46462,-153.21991 0,4"
- style="fill:none;stroke:#000000;stroke-width:2.0999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
+ d="m -42.46462,-153.21991 v 4"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:2.0999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
- d="m -42,-163.5 c -1.175382,0 -2.068672,0.84122 -2.625,1.84375 -0.556328,1.00253 -0.875,2.26593 -0.875,3.65625 0,1.39032 0.318672,2.65372 0.875,3.65625 0.556328,1.00253 1.449618,1.84375 2.625,1.84375 a 0.9950207,0.9950207 0 0 0 0.21875,-0.0312 l 9.46875,-2 c 0.01655,-0.003 0.01506,-0.0275 0.03125,-0.0312 0.840076,-0.19179 1.234143,-0.86885 1.4375,-1.46875 0.207276,-0.61147 0.28125,-1.28773 0.28125,-1.96875 0,-0.68102 -0.07397,-1.35728 -0.28125,-1.96875 -0.207276,-0.61147 -0.593404,-1.32493 -1.46875,-1.5 -3.157727,-0.63653 -6.336828,-1.31795 -9.46875,-2 A 0.9950207,0.9950207 0 0 0 -42,-163.5 z"
+ d="m -42,-163.49414 c -1.175382,0 -2.082343,0.82755 -2.638672,1.83008 -0.556328,1.00253 -0.855469,2.27374 -0.855469,3.66406 0,1.39032 0.299141,2.66153 0.855469,3.66406 0.556328,1.00253 1.46329,1.83008 2.638672,1.83008 a 0.9950207,0.9950207 0 0 0 0.205078,-0.0215 l 9.494141,-1.99805 c 0.871742,-0.17681 1.238431,-0.89556 1.445312,-1.50586 0.207277,-0.61147 0.28711,-1.28773 0.28711,-1.96875 0,-0.68102 -0.07983,-1.35728 -0.28711,-1.96875 -0.207032,-0.61075 -0.574142,-1.32971 -1.447265,-1.50586 -3.157727,-0.63653 -6.354407,-1.31599 -9.486328,-1.99805 A 0.9950207,0.9950207 0 0 0 -42,-163.49414 Z"
id="path43480-7"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
inkscape:original="M -42 -162.5 C -43.383118 -162.5 -44.5 -160.4822 -44.5 -158 C -44.5 -155.5178 -43.383119 -153.5 -42 -153.5 L -32.5 -155.5 C -31.25 -155.75 -31.25 -160.25 -32.5 -160.5 C -35.664485 -161.13789 -38.864604 -161.81719 -42 -162.5 z "
inkscape:radius="0.99492121"
sodipodi:type="inkscape:offset" />
@@ -85895,8 +84628,8 @@
id="g43521-7"
style="fill:#bc2b00;stroke:none">
<path
- style="fill:#bc2b00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.57082754;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -94.9375,-169.09375 c -0.02445,0.0114 -0.07282,0.0179 -0.09375,0.0312 -0.07655,0.0171 -0.129072,0.0618 -0.1875,0.0937 -0.06733,0.0426 -0.102853,0.0701 -0.125,0.125 -0.04225,0.0882 -0.02336,0.20307 0.0625,0.28125 0.425481,0.37342 0.870923,1.31835 1.09375,2.46875 0.222825,1.15041 0.26055,2.52729 0.0625,3.8125 -0.229814,1.49133 -0.739166,2.50981 -1.21875,2.875 -0.06733,0.0426 -0.134102,0.10133 -0.15625,0.15625 -0.02264,0.0932 0.04665,0.17736 0.15625,0.25 0.116379,0.0913 0.296118,0.15625 0.5,0.15625 0.203886,0 0.383626,-0.065 0.5,-0.15625 0.05375,-0.0409 0.10617,-0.08 0.15625,-0.125 0.100788,-0.012 0.199646,-0.0299 0.28125,-0.0625 0.05623,-0.0197 0.114869,-0.067 0.15625,-0.0937 0.879891,-0.58512 1.33731,-1.57799 1.59375,-3.03125 0.221887,-1.25745 0.188175,-2.58853 -0.0625,-3.71875 -0.250672,-1.13023 -0.67717,-2.06619 -1.40625,-2.625 -0.07644,-0.0471 -0.164946,-0.10325 -0.28125,-0.125 -0.08767,-0.0266 -0.180589,-0.0253 -0.28125,-0.0312 -0.03116,-0.0302 -0.0613,-0.0653 -0.09375,-0.0937 -0.05975,-0.064 -0.132554,-0.12368 -0.25,-0.15625 -0.124538,-0.0375 -0.266141,-0.0447 -0.40625,-0.0312 l 0,-1e-4 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#bc2b00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.57082754;marker:none;enable-background:accumulate"
+ d="m -94.9375,-169.09375 c -0.02445,0.0114 -0.07282,0.0179 -0.09375,0.0312 -0.07655,0.0171 -0.129072,0.0618 -0.1875,0.0937 -0.06733,0.0426 -0.102853,0.0701 -0.125,0.125 -0.04225,0.0882 -0.02336,0.20307 0.0625,0.28125 0.425481,0.37342 0.870923,1.31835 1.09375,2.46875 0.222825,1.15041 0.26055,2.52729 0.0625,3.8125 -0.229814,1.49133 -0.739166,2.50981 -1.21875,2.875 -0.06733,0.0426 -0.134102,0.10133 -0.15625,0.15625 -0.02264,0.0932 0.04665,0.17736 0.15625,0.25 0.116379,0.0913 0.296118,0.15625 0.5,0.15625 0.203886,0 0.383626,-0.065 0.5,-0.15625 0.05375,-0.0409 0.10617,-0.08 0.15625,-0.125 0.100788,-0.012 0.199646,-0.0299 0.28125,-0.0625 0.05623,-0.0197 0.114869,-0.067 0.15625,-0.0937 0.879891,-0.58512 1.33731,-1.57799 1.59375,-3.03125 0.221887,-1.25745 0.188175,-2.58853 -0.0625,-3.71875 -0.250672,-1.13023 -0.67717,-2.06619 -1.40625,-2.625 -0.07644,-0.0471 -0.164946,-0.10325 -0.28125,-0.125 -0.08767,-0.0266 -0.180589,-0.0253 -0.28125,-0.0312 -0.03116,-0.0302 -0.0613,-0.0653 -0.09375,-0.0937 -0.05975,-0.064 -0.132554,-0.12368 -0.25,-0.15625 -0.124538,-0.0375 -0.266141,-0.0447 -0.40625,-0.0312 z"
transform="translate(56,6)"
id="path43515-7"
inkscape:connector-curvature="0" />
@@ -85907,8 +84640,8 @@
style="fill:#bc2b00;stroke:none">
<path
id="path43527-3"
- style="fill:#bc2b00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.62850982;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -38.766635,-163.1299 c -0.1926,0.0198 -0.359499,0.088 -0.454803,0.18574 -0.141826,0.12415 -0.141826,0.2845 0,0.40865 0.393723,0.36252 0.827594,1.30384 1.03955,2.45188 0.211957,1.14804 0.253401,2.50645 0.06497,3.78928 -0.218694,1.48887 -0.72826,2.54519 -1.169495,2.89767 -0.09595,0.0836 -0.129342,0.18561 -0.09271,0.28335 0.03663,0.0977 0.140225,0.18301 0.287629,0.23675 0.146132,0.0549 0.324618,0.074 0.495554,0.053 0.170936,-0.0209 0.320068,-0.0802 0.414052,-0.16446 0.787677,-0.62926 1.137868,-1.68972 1.364411,-3.23203 0.196047,-1.33468 0.156543,-2.73807 -0.06497,-3.93787 -0.221514,-1.1998 -0.582737,-2.18614 -1.234468,-2.78623 -0.130885,-0.13138 -0.387364,-0.2047 -0.649719,-0.18574 l 0,0 -10e-7,1e-5 0,0 z m 0.338475,0.29257 c -0.244486,0.0286 -0.443513,0.11281 -0.531926,0.22492 -0.08841,0.11212 -0.05483,0.23776 0.08976,0.33579 0.442252,0.33867 0.938861,1.23068 1.179113,2.31292 0.24025,1.08225 0.287292,2.36512 0.07369,3.57452 -0.247925,1.40376 -0.831847,2.40481 -1.326503,2.73346 -0.229933,0.15651 -0.165504,0.37098 0.14739,0.49062 0.163456,0.0637 0.375184,0.0924 0.584711,0.0791 0.209527,-0.0133 0.398079,-0.0673 0.520708,-0.14918 0.899238,-0.59746 1.290496,-1.62825 1.547585,-3.0839 0.222494,-1.25976 0.177718,-2.58217 -0.0737,-3.71469 -0.251412,-1.13252 -0.582944,-2.05893 -1.326502,-2.62833 -0.04216,-0.0265 -0.09175,-0.05 -0.147388,-0.0701 -0.187804,-0.0957 -0.469403,-0.13585 -0.736946,-0.10513 l 8e-6,0 0,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#bc2b00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.62850982;marker:none;enable-background:accumulate"
+ d="m -38.766635,-163.1299 c -0.1926,0.0198 -0.359499,0.088 -0.454803,0.18574 -0.141826,0.12415 -0.141826,0.2845 0,0.40865 0.393723,0.36252 0.827594,1.30384 1.03955,2.45188 0.211957,1.14804 0.253401,2.50645 0.06497,3.78928 -0.218694,1.48887 -0.72826,2.54519 -1.169495,2.89767 -0.09595,0.0836 -0.129342,0.18561 -0.09271,0.28335 0.03663,0.0977 0.140225,0.18301 0.287629,0.23675 0.146132,0.0549 0.324618,0.074 0.495554,0.053 0.170936,-0.0209 0.320068,-0.0802 0.414052,-0.16446 0.787677,-0.62926 1.137868,-1.68972 1.364411,-3.23203 0.196047,-1.33468 0.156543,-2.73807 -0.06497,-3.93787 -0.221514,-1.1998 -0.582737,-2.18614 -1.234468,-2.78623 -0.130885,-0.13138 -0.387364,-0.2047 -0.649719,-0.18574 v 0 z m 0.338475,0.29257 c -0.244486,0.0286 -0.443513,0.11281 -0.531926,0.22492 -0.08841,0.11212 -0.05483,0.23776 0.08976,0.33579 0.442252,0.33867 0.938861,1.23068 1.179113,2.31292 0.24025,1.08225 0.287292,2.36512 0.07369,3.57452 -0.247925,1.40376 -0.831847,2.40481 -1.326503,2.73346 -0.229933,0.15651 -0.165504,0.37098 0.14739,0.49062 0.163456,0.0637 0.375184,0.0924 0.584711,0.0791 0.209527,-0.0133 0.398079,-0.0673 0.520708,-0.14918 0.899238,-0.59746 1.290496,-1.62825 1.547585,-3.0839 0.222494,-1.25976 0.177718,-2.58217 -0.0737,-3.71469 -0.251412,-1.13252 -0.582944,-2.05893 -1.326502,-2.62833 -0.04216,-0.0265 -0.09175,-0.05 -0.147388,-0.0701 -0.187804,-0.0957 -0.469403,-0.13585 -0.736946,-0.10513 z"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -85916,36 +84649,34 @@
sodipodi:type="inkscape:offset"
inkscape:radius="0.99492121"
inkscape:original="M -42 -162.5 C -43.383118 -162.5 -44.5 -160.4822 -44.5 -158 C -44.5 -155.5178 -43.383119 -153.5 -42 -153.5 L -32.5 -155.5 C -31.25 -155.75 -31.25 -160.25 -32.5 -160.5 C -35.664485 -161.13789 -38.864604 -161.81719 -42 -162.5 z "
- style="fill:url(#linearGradient24022-6);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient24022-6);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path43484-5"
- d="m -42,-163.5 c -1.175382,0 -2.068672,0.84122 -2.625,1.84375 -0.556328,1.00253 -0.875,2.26593 -0.875,3.65625 0,1.39032 0.318672,2.65372 0.875,3.65625 0.556328,1.00253 1.449618,1.84375 2.625,1.84375 a 0.9950207,0.9950207 0 0 0 0.21875,-0.0312 l 9.46875,-2 c 0.01655,-0.003 0.01506,-0.0275 0.03125,-0.0312 0.840076,-0.19179 1.234143,-0.86885 1.4375,-1.46875 0.207276,-0.61147 0.28125,-1.28773 0.28125,-1.96875 0,-0.68102 -0.07397,-1.35728 -0.28125,-1.96875 -0.207276,-0.61147 -0.593404,-1.32493 -1.46875,-1.5 -3.157727,-0.63653 -6.336828,-1.31795 -9.46875,-2 A 0.9950207,0.9950207 0 0 0 -42,-163.5 z" />
+ d="m -42,-163.49414 c -1.175382,0 -2.082343,0.82755 -2.638672,1.83008 -0.556328,1.00253 -0.855469,2.27374 -0.855469,3.66406 0,1.39032 0.299141,2.66153 0.855469,3.66406 0.556328,1.00253 1.46329,1.83008 2.638672,1.83008 a 0.9950207,0.9950207 0 0 0 0.205078,-0.0215 l 9.494141,-1.99805 c 0.871742,-0.17681 1.238431,-0.89556 1.445312,-1.50586 0.207277,-0.61147 0.28711,-1.28773 0.28711,-1.96875 0,-0.68102 -0.07983,-1.35728 -0.28711,-1.96875 -0.207032,-0.61075 -0.574142,-1.32971 -1.447265,-1.50586 -3.157727,-0.63653 -6.354407,-1.31599 -9.486328,-1.99805 A 0.9950207,0.9950207 0 0 0 -42,-163.49414 Z" />
<path
- style="fill:none;stroke:#999999;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
- d="m -42.46462,-152.96991 0,4.5"
+ style="display:inline;fill:none;stroke:#999999;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m -42.46462,-152.96991 v 4.5"
id="path43213-9"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
- <path
+ <ellipse
transform="matrix(2.5815738,0,0,1.0580577,65.140965,9.1698698)"
- d="m -40.52941,-158 a 0.9705897,4.25 0 0 1 -0.97059,4.25 0.9705897,4.25 0 0 1 -0.97059,-4.25 0.9705897,4.25 0 0 1 0.97059,-4.25 0.9705897,4.25 0 0 1 0.97059,4.25 z"
- sodipodi:ry="4.25"
- sodipodi:rx="0.9705897"
- sodipodi:cy="-158"
- sodipodi:cx="-41.5"
id="path43356-9"
- style="fill:url(#linearGradient24024-4);fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.48405313;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient24024-4);fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.48405313;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="-41.5"
+ cy="-158"
+ rx="0.9705897"
+ ry="4.25" />
<rect
- style="opacity:0.3;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;marker:none;enable-background:accumulate"
id="rect43215-8"
width="1"
height="1"
x="-42.964619"
y="-152.96989" />
<path
- d="m -42,-162.59375 c -0.74028,0 -1.381145,0.54136 -1.84375,1.375 -0.462605,0.83364 -0.75,1.96262 -0.75,3.21875 0,1.25613 0.287395,2.38511 0.75,3.21875 0.462605,0.83364 1.10347,1.375 1.84375,1.375 a 0.10019871,0.10019871 0 0 0 0.03125,0 l 9.5,-2 c 0.369179,-0.0738 0.619862,-0.43015 0.78125,-0.90625 0.161388,-0.4761 0.21875,-1.08496 0.21875,-1.6875 0,-0.60254 -0.05736,-1.2114 -0.21875,-1.6875 -0.161388,-0.4761 -0.412071,-0.83241 -0.78125,-0.90625 -3.163804,-0.63775 -6.364954,-1.31727 -9.5,-2 a 0.10019871,0.10019871 0 0 0 -0.03125,0 z"
+ d="m -42,-162.59961 c -0.74028,0 -1.392864,0.53746 -1.855469,1.37109 -0.462605,0.83364 -0.74414,1.97239 -0.74414,3.22852 0,1.25613 0.281535,2.39488 0.74414,3.22852 0.462605,0.83363 1.115189,1.37109 1.855469,1.37109 a 0.10019871,0.10019871 0 0 0 0.02148,-0.002 l 9.498047,-2 c 0.369179,-0.0738 0.617909,-0.44188 0.779297,-0.91797 0.161388,-0.4761 0.238281,-1.07715 0.238281,-1.67969 0,-0.60254 -0.07689,-1.20359 -0.238281,-1.67969 -0.161388,-0.47609 -0.410118,-0.84413 -0.779297,-0.91797 -3.163804,-0.63775 -6.363,-1.31726 -9.498047,-2 A 0.10019871,0.10019871 0 0 0 -42,-162.59961 Z"
id="path43218-1"
- style="fill:none;stroke:url(#linearGradient14482-7);stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient14482-7);stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:original="M -42 -162.5 C -43.383118 -162.5 -44.5 -160.4822 -44.5 -158 C -44.5 -155.5178 -43.383119 -153.5 -42 -153.5 L -32.5 -155.5 C -31.25 -155.75 -31.25 -160.25 -32.5 -160.5 C -35.664485 -161.13789 -38.864604 -161.81719 -42 -162.5 z "
inkscape:radius="0.10018869"
sodipodi:type="inkscape:offset" />
@@ -85962,33 +84693,33 @@
height="16"
width="16"
id="rect24365-6"
- style="opacity:0;fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.10000002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.10000002;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="cccccccccccsss"
id="path24370-6"
- d="m 60.5,253 -1,0.5 -0.998035,-1 -7e-6,-2 -0.999999,-1 -2.251959,0 -0.75,-0.75 0.002,-2.25 -1.000001,-1 -1.999993,0 -1.001965,-0.75 0.498035,-1 c 1.618614,-3.25 6.964866,-2.7871 9.501965,-0.25 2.5371,2.53709 3,8 0,9.5 L 60.5,253 z"
- style="fill:url(#linearGradient24044-1);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 60.5,253 -1,0.5 -0.998035,-1 -7e-6,-2 -0.999999,-1 H 55.25 l -0.75,-0.75 0.002,-2.25 -1.000001,-1 h -1.999993 l -1.001965,-0.75 0.498035,-1 c 1.618614,-3.25 6.964866,-2.7871 9.501965,-0.25 2.5371,2.53709 3,8 0,9.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient24044-1);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccccsccsccccc"
id="path24406-0"
- d="m 55.40625,241.84375 c -1.752306,-0.0251 -3.360906,0.59103 -4.09375,2.0625 l -0.15625,0.3125 c -0.122559,0.2366 -0.05653,0.52711 0.15625,0.6875 l 0.15625,0.125 c 0.100886,0.0688 0.221909,0.1018 0.34375,0.0937 l 1.6875,0 c 0.01042,3e-4 0.02083,3e-4 0.03125,0 0.09863,-0.003 0.17826,0.0573 0.25,0.125 l 1,0.96875 c 0.06775,0.0718 0.09659,0.15137 0.09375,0.25 -2.98e-4,0.0104 -2.98e-4,0.0208 0,0.0312 l 0,2.09375 0.375,0.15625 4.96875,-4.96875 c -1.186918,-1.18692 -3.03835,-1.91206 -4.8125,-1.9375 l 0,1e-4 0,0 z"
- style="fill:url(#linearGradient24046-9);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 55.40625,241.84375 c -1.752306,-0.0251 -3.360906,0.59103 -4.09375,2.0625 l -0.15625,0.3125 c -0.122559,0.2366 -0.05653,0.52711 0.15625,0.6875 l 0.15625,0.125 c 0.100886,0.0688 0.221909,0.1018 0.34375,0.0937 H 53.5 c 0.01042,3e-4 0.02083,3e-4 0.03125,0 0.09863,-0.003 0.17826,0.0573 0.25,0.125 l 1,0.96875 c 0.06775,0.0718 0.09659,0.15137 0.09375,0.25 -2.98e-4,0.0104 -2.98e-4,0.0208 0,0.0312 v 2.09375 l 0.375,0.15625 4.96875,-4.96875 c -1.186918,-1.18692 -3.03835,-1.91206 -4.8125,-1.9375 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient24046-9);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<g
style="opacity:0.82999998"
id="g24372-3"
- transform="translate(21,0)"
+ transform="translate(21)"
mask="url(#mask25021-4)">
<path
id="path24374-8"
- style="fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
d="m 30,246.5 -2,7 1.5,1.5 7,-2 m -3.5,-3 -4.5,4.5"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
id="path24380-0"
- style="fill:none;stroke:url(#radialGradient24048-2);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#radialGradient24048-2);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
d="M 34.25,248.75 28.5,254.5"
mask="none"
sodipodi:nodetypes="cc"
@@ -85996,7 +84727,7 @@
<path
mask="none"
d="m 30.5,244.75 -2.5,8.75 1.5,1.5 8.75,-2.5"
- style="fill:none;stroke:url(#radialGradient24050-4);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
+ style="display:inline;fill:none;stroke:url(#radialGradient24050-4);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
id="path24448-1"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
@@ -86004,32 +84735,32 @@
<path
sodipodi:nodetypes="cccccccccccccccccssc"
id="path24408-2"
- d="m 55.40625,242.375 c -1.622878,-0.0233 -2.972755,0.53436 -3.59375,1.78125 l -0.15625,0.3125 0.15625,0.125 1.6875,0 c 0.243249,-0.007 0.479315,0.0829 0.65625,0.25 l 1,1 c 0.167073,0.17694 0.257003,0.413 0.25,0.65625 L 55.5,248 l 0.5,0.5 1.5,0.0937 c 0.243249,-0.007 0.479315,0.0829 0.65625,0.25 l 1,1 c 0.167073,0.17694 0.257003,0.413 0.25,0.65625 l 0,1.59375 0.28125,0.28125 0.40625,-0.1875 c 1.084704,-0.54235 1.613412,-1.88556 1.5625,-3.53125 -0.05091,-1.64569 -0.757004,-3.44451 -1.8125,-4.5 -1.05838,-1.05838 -2.814635,-1.75798 -4.4375,-1.78125 l 0,5e-5 z"
- style="fill:none;stroke:url(#linearGradient24053-5);stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 55.40625,242.375 c -1.622878,-0.0233 -2.972755,0.53436 -3.59375,1.78125 l -0.15625,0.3125 0.15625,0.125 H 53.5 c 0.243249,-0.007 0.479315,0.0829 0.65625,0.25 l 1,1 c 0.167073,0.17694 0.257003,0.413 0.25,0.65625 L 55.5,248 l 0.5,0.5 1.5,0.0937 c 0.243249,-0.007 0.479315,0.0829 0.65625,0.25 l 1,1 c 0.167073,0.17694 0.257003,0.413 0.25,0.65625 v 1.59375 l 0.28125,0.28125 0.40625,-0.1875 c 1.084704,-0.54235 1.613412,-1.88556 1.5625,-3.53125 -0.05091,-1.64569 -0.757004,-3.44451 -1.8125,-4.5 -1.05838,-1.05838 -2.814635,-1.75798 -4.4375,-1.78125 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient24053-5);stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<rect
- style="opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.20000005;marker:none;enable-background:accumulate"
id="rect24450-5"
width="2"
height="1"
x="50"
y="245" />
<rect
- style="opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.20000005;marker:none;enable-background:accumulate"
id="rect24452-0"
width="1"
height="1"
x="54"
y="248" />
<rect
- style="opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.20000005;marker:none;enable-background:accumulate"
id="rect24454-9"
width="1"
height="1"
x="55"
y="249" />
<rect
- style="opacity:0.3;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.20000005;marker:none;enable-background:accumulate"
id="rect24456-4"
width="1"
height="2"
@@ -86041,7 +84772,7 @@
height="1"
width="1"
id="rect24659-7"
- style="opacity:0.3;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.20000005;marker:none;enable-background:accumulate" />
</g>
<g
style="display:inline;enable-background:new"
@@ -86050,45 +84781,36 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path24396-3"
- style="fill:#ff541f;fill-opacity:1;fill-rule:nonzero;stroke:#320b00;stroke-width:3.58193231;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc"
- transform="matrix(0.75,0,0,0.75,29.5,135)" />
- <path
- sodipodi:type="arc"
- style="opacity:0.6;fill:url(#linearGradient24055-1);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff541f;fill-opacity:1;fill-rule:nonzero;stroke:#320b00;stroke-width:3.58193231;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ transform="matrix(0.75,0,0,0.75,29.5,135)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
+ style="display:inline;opacity:0.6;fill:url(#linearGradient24055-1);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path24398-5"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(-0.6011908,-0.06817113,0.06852359,-0.6012277,199.77148,303.44348)" />
- <path
+ transform="matrix(-0.6011908,-0.06817113,0.06852359,-0.6012277,199.77148,303.44348)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.4463965,0,0,0.4463971,69.575658,170.82515)"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path24400-1"
- style="opacity:0.7;fill:none;stroke:url(#linearGradient24057-7);stroke-width:6.6867547;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
- sodipodi:type="arc"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:none;stroke:url(#linearGradient24057-7);stroke-width:6.6867547;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
@@ -86097,7 +84819,7 @@
transform="matrix(-1,0,0,1,185,310)">
<rect
transform="scale(1,-1)"
- style="opacity:0;fill:#666666;stroke:none;stroke-width:2.29999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#666666;stroke:none;stroke-width:2.29999995;marker:none;enable-background:accumulate"
id="rect44017-0"
width="16"
height="16"
@@ -86111,16 +84833,16 @@
clip-path="url(#clipPath43135-6)"
mask="url(#mask43188-4)">
<path
- d="m -45.5,42.5 1,1 3,-1 0.75,1 1.25,0 1,1 0,2 2,2 -2,2 0,1"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -45.5,42.5 1,1 3,-1 0.75,1 h 1.25 l 1,1 v 2 l 2,2 -2,2 v 1"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path43103-4"
sodipodi:nodetypes="cccccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccccccc"
id="path43099-0"
- style="fill:none;stroke:#ffffff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -45.5,42.5 1,1 3,-1 0.75,1 1.25,0 1,1 0,2 2,2 -2,2 0,1"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -45.5,42.5 1,1 3,-1 0.75,1 h 1.25 l 1,1 v 2 l 2,2 -2,2 v 1"
inkscape:connector-curvature="0" />
</g>
<g
@@ -86128,16 +84850,16 @@
clip-path="url(#clipPath43178-6)"
id="g43206-6">
<path
- d="m -45.5,42.5 1,1 3,-1 0.75,1 1.25,0 1,1 0,3 2,2 -1,1 -1,1"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -45.5,42.5 1,1 3,-1 0.75,1 h 1.25 l 1,1 v 3 l 2,2 -1,1 -1,1"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path43208-1"
sodipodi:nodetypes="cccccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccccccc"
id="path43210-8"
- style="fill:none;stroke:#ffffff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -45.5,42.5 1,1 3,-1 0.75,1 1.25,0 1,1 0,3 2,2 -1,1 -1,1"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -45.5,42.5 1,1 3,-1 0.75,1 h 1.25 l 1,1 v 3 l 2,2 -1,1 -1,1"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -86150,12 +84872,12 @@
<path
sodipodi:nodetypes="cccccccccccccccc"
id="path43131-4"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -45.5,37.5 3,0 0,1 3,0 1,-1 2,2 0,1 1,1 2,0 1,1 0,1 -1,1 0,2 2,2 0,2 -1,1"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -45.5,37.5 h 3 v 1 h 3 l 1,-1 2,2 v 1 l 1,1 h 2 l 1,1 v 1 l -1,1 v 2 l 2,2 v 2 l -1,1"
inkscape:connector-curvature="0" />
<path
- d="m -45.5,37.5 3,0 0,1 3,0 1,-1 2,2 0,1 1,1 2,0 1,1 0,1 -1,1 0,2 2,2 0,2 -1,1"
- style="fill:none;stroke:#ffffff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -45.5,37.5 h 3 v 1 h 3 l 1,-1 2,2 v 1 l 1,1 h 2 l 1,1 v 1 l -1,1 v 2 l 2,2 v 2 l -1,1"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path43133-1"
sodipodi:nodetypes="cccccccccccccccc"
inkscape:connector-curvature="0" />
@@ -86167,12 +84889,12 @@
<path
sodipodi:nodetypes="ccccccccccccccc"
id="path43214-3"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -45.5,37.5 3,0 0,1 3,0 1,-1 2,2 0,1 1,1 2,0 1,1 -1,1 0,3 2,2 0,2 -1,1"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m -45.5,37.5 h 3 v 1 h 3 l 1,-1 2,2 v 1 l 1,1 h 2 l 1,1 -1,1 v 3 l 2,2 v 2 l -1,1"
inkscape:connector-curvature="0" />
<path
- d="m -45.5,37.5 3,0 0,1 3,0 1,-1 2,2 0,1 1,1 2,0 1,1 -1,1 0,3 2,2 0,2 -1,1"
- style="fill:none;stroke:#ffffff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -45.5,37.5 h 3 v 1 h 3 l 1,-1 2,2 v 1 l 1,1 h 2 l 1,1 -1,1 v 3 l 2,2 v 2 l -1,1"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path43216-9"
sodipodi:nodetypes="ccccccccccccccc"
inkscape:connector-curvature="0" />
@@ -86185,45 +84907,36 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path29727-8"
- style="fill:#ff541f;fill-opacity:1;fill-rule:nonzero;stroke:#320b00;stroke-width:3.58193231;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc"
- transform="matrix(0.75,0,0,0.75,29.5,135)" />
- <path
- sodipodi:type="arc"
- style="opacity:0.6;fill:url(#linearGradient24210-1);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff541f;fill-opacity:1;fill-rule:nonzero;stroke:#320b00;stroke-width:3.58193231;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ transform="matrix(0.75,0,0,0.75,29.5,135)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
+ style="display:inline;opacity:0.6;fill:url(#linearGradient24210-1);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path29729-0"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(-0.6011908,-0.06817113,0.06852359,-0.6012277,199.77148,303.44348)" />
- <path
+ transform="matrix(-0.6011908,-0.06817113,0.06852359,-0.6012277,199.77148,303.44348)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.4463965,0,0,0.4463971,69.575658,170.82515)"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path29731-8"
- style="opacity:0.7;fill:none;stroke:url(#linearGradient24212-8);stroke-width:6.6867547;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
- sodipodi:type="arc"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:none;stroke:url(#linearGradient24212-8);stroke-width:6.6867547;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
@@ -86236,7 +84949,7 @@
id="g44612-7">
<rect
transform="scale(1,-1)"
- style="opacity:0;fill:#666666;stroke:none;stroke-width:2.29999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#666666;stroke:none;stroke-width:2.29999995;marker:none;enable-background:accumulate"
id="rect44610-8"
width="16"
height="16"
@@ -86252,7 +84965,7 @@
<g
id="g44383-3"
inkscape:transform-center-x="6.4130439"
- style="fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<g
inkscape:transform-center-x="6.4130439"
id="g44315-7" />
@@ -86260,9 +84973,9 @@
<g
id="g44401-1"
inkscape:transform-center-x="-6.4341194"
- transform="matrix(-1,0,0,-1,-76,-27.947857)">
+ transform="rotate(180,-38,-13.973929)">
<g
- style="fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:transform-center-x="6.4130439"
id="g44403-0" />
<g
@@ -86272,9 +84985,9 @@
<g
inkscape:transform-center-y="-6.3979735"
id="g44425-3"
- transform="matrix(0,1,-1,0,-51.984003,24.036146)">
+ transform="rotate(90,-38.010075,-13.973929)">
<g
- style="fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:transform-center-x="6.4130439"
id="g44427-4" />
<g
@@ -86283,12 +84996,12 @@
</g>
<g
inkscape:transform-center-y="6.4702655"
- transform="matrix(0,-1,1,0,-24.015997,-51.963854)"
+ transform="rotate(-90,-37.989925,-13.973929)"
id="g44435-6">
<g
id="g44437-5"
inkscape:transform-center-x="6.4130439"
- style="fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<g
inkscape:transform-center-x="6.4130439"
id="g44441-1" />
@@ -86299,10 +85012,10 @@
<g
inkscape:transform-center-y="-4.4797485"
id="g44511-9"
- transform="matrix(-0.7071068,0.7071068,-0.7071068,-0.7071068,-74.7838,3.0074334)"
+ transform="rotate(135,-38.014759,-13.984515)"
inkscape:transform-center-x="-4.4797485">
<g
- style="fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:transform-center-x="6.4130439"
id="g44514-9" />
<g
@@ -86311,31 +85024,31 @@
</g>
<g
inkscape:transform-center-x="4.4797488"
- transform="matrix(0.7071068,0.7071068,-0.7071068,0.7071068,-20.992567,22.7838)"
+ transform="rotate(45,-37.998762,-13.948371)"
id="g44522-8"
inkscape:transform-center-y="-4.4797486">
<g
id="g44524-3"
inkscape:transform-center-x="6.4130439"
- style="fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<g
inkscape:transform-center-x="6.4130439"
id="g44528-4" />
</g>
</g>
<g
- transform="matrix(-1,0,0,-1,-75.995432,-28)"
+ transform="rotate(180,-37.997716,-14)"
id="g44544-8"
inkscape:transform-center-y="4.4797485">
<g
inkscape:transform-center-x="-4.4797485"
- transform="matrix(-0.7071068,0.7071068,-0.7071068,-0.7071068,-74.7838,3.0074334)"
+ transform="rotate(135,-38.014759,-13.984515)"
id="g44546-4"
inkscape:transform-center-y="-4.4797485">
<g
id="g44548-9"
inkscape:transform-center-x="6.4130439"
- style="fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<g
inkscape:transform-center-x="6.4130439"
id="g44552-9" />
@@ -86343,15 +85056,15 @@
<g
inkscape:transform-center-y="-4.4797486"
id="g44556-2"
- transform="matrix(0.7071068,0.7071068,-0.7071068,0.7071068,-20.992567,22.7838)"
+ transform="rotate(45,-37.998762,-13.948371)"
inkscape:transform-center-x="4.4797488">
<g
- style="fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:transform-center-x="6.4130439"
id="g44558-5">
<path
d="m 139.82809,116.3993 c 0.21326,1.04297 0.21596,2.11803 0.008,3.16206 m -6.21068,6.20286 c -1.04294,0.21326 -2.11797,0.21596 -3.16197,0.008 m -6.20664,-6.20689 c -0.21326,-1.04297 -0.21596,-2.11803 -0.008,-3.16206 m 6.21068,-6.20286 c 1.04294,-0.21326 2.11797,-0.21596 3.16196,-0.008 m 5.10366,12.24081 c -0.58667,0.88829 -1.34493,1.65039 -2.23019,2.24157 m -11.07625,-11.07658 c 0.58667,-0.88829 1.34492,-1.65038 2.23019,-2.24157 m 8.8404,0.006 c 0.88827,0.58669 1.65034,1.34497 2.24151,2.23026 m -11.07626,11.07657 c -0.88826,-0.58669 -1.65033,-1.34496 -2.2415,-2.23025"
- style="stroke:#000000;stroke-width:3.44192362;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;stroke:#000000;stroke-width:3.44192362;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;marker:none;enable-background:accumulate"
transform="matrix(-0.8135104,0,0,-0.8134867,69.383376,81.991427)"
id="path44560-5"
inkscape:connector-curvature="0" />
@@ -86361,7 +85074,7 @@
inkscape:transform-center-x="6.4130439">
<path
d="m 139.86607,116.59777 c 0.16588,0.93061 0.16532,1.88326 -0.002,2.81367 m -6.43712,6.39076 c -0.93059,0.16588 -1.88321,0.16532 -2.81359,-0.002 m -6.39454,-6.43334 c -0.16588,-0.93061 -0.16532,-1.88326 0.002,-2.81367 m 6.43712,-6.39076 c 0.93058,-0.16588 1.88321,-0.16532 2.81359,0.002 m 5.25357,12.26879 c -0.58667,0.88829 -1.34493,1.65039 -2.23019,2.24157 m -11.07625,-11.07658 c 0.58667,-0.88829 1.34492,-1.65038 2.23019,-2.24157 m 8.8404,0.006 c 0.88827,0.58669 1.65034,1.34497 2.24151,2.23026 m -11.07626,11.07657 c -0.88826,-0.58669 -1.65033,-1.34496 -2.2415,-2.23025"
- style="fill:none;stroke:#ffffff;stroke-width:1.72096181;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1.72096181;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
transform="matrix(-0.8135104,0,0,-0.8134867,69.383376,81.991427)"
id="path44564-3"
inkscape:connector-curvature="0" />
@@ -86377,45 +85090,36 @@
transform="matrix(0.4200287,0,0,0.4200289,-40.97369,-75.87647)"
id="g45379-3"
style="display:inline;enable-background:new">
- <path
+ <circle
transform="matrix(0.75,0,0,0.75,29.5,135)"
- sodipodi:type="arc"
- style="fill:#ff541f;fill-opacity:1;fill-rule:nonzero;stroke:#2b0000;stroke-width:2.5395081;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:#ff541f;fill-opacity:1;fill-rule:nonzero;stroke:#2b0000;stroke-width:2.5395081;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path45381-7"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(-0.6011908,-0.06817113,0.06852359,-0.6012277,199.77148,303.44348)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path45383-4"
- style="fill:url(#linearGradient24214-1);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- sodipodi:type="arc" />
- <path
+ style="display:inline;fill:url(#linearGradient24214-1);fill-opacity:1;fill-rule:nonzero;stroke:none"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- sodipodi:type="arc"
- style="opacity:0.6;fill:none;stroke:url(#linearGradient24216-4);stroke-width:5.33335066;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:none;stroke:url(#linearGradient24216-4);stroke-width:5.33335066;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
id="path45385-3"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- transform="matrix(0.4463965,0,0,0.4463971,69.575658,170.82515)" />
+ transform="matrix(0.4463965,0,0,0.4463971,69.575658,170.82515)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
@@ -86426,20 +85130,20 @@
mask="url(#mask45447-7)"
transform="translate(-261,-409)"
id="g15201-1-0"
- style="opacity:0.8;display:inline;enable-background:new">
+ style="display:inline;opacity:0.8;enable-background:new">
<rect
y="365"
x="215"
height="16"
width="16"
id="rect15183-3-8"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
transform="translate(167.99999,-62.999991)"
id="g15185-8-8">
<rect
ry="0"
- style="fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect15187-7-0"
width="13.016124"
height="12.953857"
@@ -86451,17 +85155,17 @@
height="11.046139"
width="11.000001"
id="rect15189-4-6"
- style="fill:url(#linearGradient24218-1);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00207269;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient24218-1);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00207269;marker:none;enable-background:accumulate"
ry="0" />
<path
- style="fill:url(#linearGradient24220-5);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 49,430 0,3 3,0 0,-3 -3,0 z m 3,3 0,3 3,0 0,-3 -3,0 z m 3,0 3,0 0,-3 -3,0 0,3 z m 3,0 0,3 3,0 0,-3 -3,0 z m 0,3 -3,0 0,3 3,0 0,-3 z m 0,3 0,3 3,0 0,-3 -3,0 z m -3,0 -3,0 0,3 3,0 0,-3 z m -3,0 0,-3 -3,0 0,3 3,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient24220-5);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 49,430 v 3 h 3 v -3 z m 3,3 v 3 h 3 v -3 z m 3,0 h 3 v -3 h -3 z m 3,0 v 3 h 3 v -3 z m 0,3 h -3 v 3 h 3 z m 0,3 v 3 h 3 v -3 z m -3,0 h -3 v 3 h 3 z m -3,0 v -3 h -3 v 3 z"
id="path15191-2-8"
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccc"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:url(#linearGradient24222-6);stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 60.517703,430.5 -11.017704,0 0,11 11.017704,0 0,-11"
+ d="M 60.517703,430.5 H 49.499999 v 11 h 11.017704 v -11"
id="path15193-7-1"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
@@ -86471,7 +85175,7 @@
height="12.953857"
width="13.016124"
id="rect45403-9"
- style="fill:url(#radialGradient24224-0);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient24224-0);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
ry="0" />
</g>
</g>
@@ -86482,45 +85186,36 @@
transform="matrix(0.4200287,0,0,0.4200289,-86.973687,-124.87647)"
id="g45391-8"
style="display:inline;enable-background:new">
- <path
+ <circle
transform="matrix(0.75,0,0,0.75,29.5,135)"
- sodipodi:type="arc"
- style="fill:#ff541f;fill-opacity:1;fill-rule:nonzero;stroke:#2b0000;stroke-width:2.5395081;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff541f;fill-opacity:1;fill-rule:nonzero;stroke:#2b0000;stroke-width:2.5395081;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path45393-9"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(-0.6011908,-0.06817113,0.06852359,-0.6012277,199.77148,303.44348)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path45395-7"
- style="fill:url(#linearGradient24226-2);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- sodipodi:type="arc" />
- <path
+ style="display:inline;fill:url(#linearGradient24226-2);fill-opacity:1;fill-rule:nonzero;stroke:none"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- sodipodi:type="arc"
- style="opacity:0.75;fill:none;stroke:url(#linearGradient24228-5);stroke-width:5.33335066;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.75;fill:none;stroke:url(#linearGradient24228-5);stroke-width:5.33335066;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
id="path45397-2"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- transform="matrix(0.4463965,0,0,0.4463971,69.575658,170.82515)" />
+ transform="matrix(0.4463965,0,0,0.4463971,69.575658,170.82515)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
@@ -86529,7 +85224,7 @@
transform="matrix(-1,0,0,1,16.999998,490)">
<rect
transform="scale(1,-1)"
- style="opacity:0;fill:#666666;stroke:none;stroke-width:2.29999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#666666;stroke:none;stroke-width:2.29999995;marker:none;enable-background:accumulate"
id="rect45977-5-8"
width="16"
height="16"
@@ -86543,12 +85238,12 @@
sodipodi:nodetypes="cssssssc"
id="path45716-8"
d="m -37.991001,-135.06482 c -0.756259,0.48145 -1.648418,-0.21174 -1.880274,-0.94014 -0.414735,-1.30293 0.637877,-2.55676 1.880274,-2.82041 1.823267,-0.38691 3.481311,1.06592 3.760547,2.82041 0.372178,2.33846 -1.494127,4.41212 -3.760547,4.70069 -2.852058,0.36313 -5.346025,-1.9223 -5.640821,-4.70069 -0.357038,-3.365 2.346435,-6.33509 5.640821,-6.58096 3.825581,-0.28552 7.055689,2.67913 7.813138,6.13556"
- style="fill:none;stroke:#000000;stroke-width:2.77754736;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:2.77754736;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(0.6590823,0.8571222,-0.8500307,0.6645808,-129.57187,-12.997286)"
inkscape:connector-curvature="0" />
<path
transform="matrix(0.6590823,0.8571222,-0.8500307,0.6645808,-129.57187,-12.997286)"
- style="fill:none;stroke:#ffffff;stroke-width:1.1110189;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#ffffff;stroke-width:1.1110189;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m -37.991001,-135.06482 c -0.756259,0.48145 -1.648418,-0.21174 -1.880274,-0.94014 -0.414735,-1.30293 0.637877,-2.55676 1.880274,-2.82041 1.823267,-0.38691 3.481311,1.06592 3.760547,2.82041 0.372178,2.33846 -1.494127,4.41212 -3.760547,4.70069 -2.852058,0.36313 -5.346025,-1.9223 -5.640821,-4.70069 -0.357038,-3.365 2.346435,-6.33509 5.640821,-6.58096 3.825581,-0.28552 7.055689,2.67913 7.813138,6.13556"
id="path45712-9"
sodipodi:nodetypes="cssssssc"
@@ -86566,25 +85261,25 @@
height="3"
width="2.9998772"
id="rect29695-7"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#5a0d00;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#5a0d00;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path29697-8"
- d="m -37.299433,-141.26553 -1.999997,1e-5 0,1.99999 1.999997,-10e-6 0,-1.99999 z"
- style="fill:#ff541f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m -37.299433,-141.26553 -1.999997,1e-5 v 1.99999 l 1.999997,-10e-6 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff541f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
id="path29699-1"
- d="m -38.799427,-139.76553 0,-1 0.999994,0"
- style="opacity:0.45;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ d="m -38.799427,-139.76553 v -1 h 0.999994"
+ style="display:inline;opacity:0.45;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
- style="opacity:0.4;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m -38.29943,-141.26553 -1,1e-5 0,0.99999 1,0 0,-1 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.4;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
+ d="m -38.29943,-141.26553 -1,1e-5 v 0.99999 h 1 z"
id="path29701-5"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -86598,7 +85293,7 @@
transform="translate(156,308)">
<rect
transform="scale(1,-1)"
- style="opacity:0;fill:#666666;stroke:none;stroke-width:2.29999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#666666;stroke:none;stroke-width:2.29999995;marker:none;enable-background:accumulate"
id="rect46015-6"
width="16"
height="16"
@@ -86616,45 +85311,36 @@
transform="matrix(0.6645615,0,0,0.6645596,-126.90026,-106.03317)"
id="g37580-2-4"
style="display:inline;enable-background:new">
- <path
+ <circle
transform="matrix(0.75,0,0,0.75,29.5,135)"
- sodipodi:type="arc"
- style="fill:#ff541f;fill-opacity:1;fill-rule:nonzero;stroke:#2b0000;stroke-width:1.60507059;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff541f;fill-opacity:1;fill-rule:nonzero;stroke:#2b0000;stroke-width:1.60507059;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path37582-3-2"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(-0.683022,-0.07745026,0.0778507,-0.683064,209.4726,314.325)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path37584-3-5"
- style="opacity:0.6;fill:url(#linearGradient24230-5);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- sodipodi:type="arc" />
- <path
+ style="display:inline;opacity:0.6;fill:url(#linearGradient24230-5);fill-opacity:1;fill-rule:nonzero;stroke:none"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- sodipodi:type="arc"
- style="opacity:0.7;fill:none;stroke:url(#linearGradient24232-9);stroke-width:2.66303396;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:none;stroke:url(#linearGradient24232-9);stroke-width:2.66303396;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
id="path38120-7-4-8"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- transform="matrix(0.5650525,0,0,0.5650532,53.91307,156.82373)" />
+ transform="matrix(0.5650525,0,0,0.5650532,53.91307,156.82373)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
style="opacity:0.5;fill:#ffd5d5"
@@ -86667,17 +85353,17 @@
height="1.7633995"
width="5.5"
id="rect45079-2"
- style="fill:#ffd5d5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000083;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffd5d5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000083;marker:none;enable-background:new" />
<rect
ry="0.875"
rx="0.97123623"
- style="fill:#ffd5d5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000083;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffd5d5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000083;marker:none;enable-background:new"
id="rect45081-6"
width="5.5"
height="1.75"
x="40"
y="40"
- transform="matrix(0,1,-1,0,0,0)" />
+ transform="rotate(90)" />
</g>
<rect
y="41.986599"
@@ -86685,10 +85371,10 @@
height="1.0133995"
width="5.0062485"
id="rect45067-5"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000083;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000083;marker:none;enable-background:new" />
<rect
- transform="matrix(0,-1,1,0,0,0)"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000083;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ transform="rotate(-90)"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000083;marker:none;enable-background:new"
id="rect45069-3"
width="4.9865952"
height="1.0133995"
@@ -86705,45 +85391,36 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path44889-4"
- style="fill:#f2f2f2;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.61351788;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.75,0,0,0.75,29.5,135)" />
- <path
- sodipodi:type="arc"
- style="fill:url(#linearGradient24234-7);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="fill:#f2f2f2;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.61351788;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.75,0,0,0.75,29.5,135)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
+ style="display:inline;fill:url(#linearGradient24234-7);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path44891-6"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(-0.683022,-0.07745026,0.0778507,-0.683064,209.4726,314.325)" />
- <path
+ transform="matrix(-0.683022,-0.07745026,0.0778507,-0.683064,209.4726,314.325)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.5719769,0,0,0.5719777,52.999044,156.00665)"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path44893-1"
- style="opacity:0.5;fill:none;stroke:#ffffff;stroke-width:2.64463997;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
- sodipodi:type="arc"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:none;stroke:#ffffff;stroke-width:2.64463997;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<rect
ry="1.0066998"
@@ -86753,9 +85430,9 @@
height="2.0133996"
width="5.5"
id="rect45087-8"
- style="opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000083;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000083;marker:none;enable-background:new" />
<rect
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000083;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000083;marker:none;enable-background:new"
id="rect45077-2"
width="5.0062485"
height="1.0133995"
@@ -86776,7 +85453,7 @@
height="16"
width="16"
id="rect42080-1"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
mask="url(#mask43040-7)"
transform="translate(51.040182,194)"
@@ -86788,10 +85465,10 @@
sodipodi:nodetypes="csc"
id="path42084-7"
d="m -43,-12 c 4.5365,0 10.5,-1.75 10.5,-6 0,-1.75 -1.25,-4 -5.5,-4"
- style="fill:none;stroke:#3c0800;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#3c0800;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<rect
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#3c0800;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#3c0800;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect42088-6"
width="2.9998772"
height="3"
@@ -86807,9 +85484,9 @@
height="3"
width="2.9998772"
id="rect42092-2"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#5a0d00;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#5a0d00;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
- style="fill:none;stroke:#ed5e32;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ed5e32;stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m -43,-12 c 4.5365,0 10.5,-1.75 10.5,-6 0,-1.75 -1.25,-4 -5.5,-4"
id="path42142-9"
sodipodi:nodetypes="csc"
@@ -86818,7 +85495,7 @@
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:url(#linearGradient24236-2);stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient24236-2);stroke-width:1.60000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m -43,-12 c 4.5365,0 10.5,-1.75 10.5,-6 0,-1.75 -1.25,-4 -5.5,-4"
id="path42140-5"
sodipodi:nodetypes="csc"
@@ -86832,10 +85509,10 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path42094-2"
d="m -42,-13 c -0.67541,0 -1.35081,10e-6 -2.02623,10e-6 0,0.66939 0,1.33877 0,2.00817 0.67542,0 1.35082,-10e-6 2.02623,-10e-6 0,-0.66939 0,-1.33878 0,-2.00817 z"
- style="fill:#ff541f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff541f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- style="fill:#ff8d69;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff8d69;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
d="m -37,-23 c -0.65334,0 -1.30668,10e-6 -1.96003,10e-6 0,0.66667 0,1.33332 0,1.99999 0.65335,0 1.30669,-10e-6 1.96003,-10e-6 0,-0.66666 0,-1.33332 0,-1.99999 z"
id="path42096-0"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -86843,14 +85520,14 @@
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
- d="m -38.5,-21.5 0,-1 1,0"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
+ d="m -38.5,-21.5 v -1 h 1"
id="path42098-0"
inkscape:connector-curvature="0" />
<path
id="path42100-3"
- d="m -43.52623,-11.5 0,-1 1,0"
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="m -43.52623,-11.5 v -1 h 1"
+ style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="90"
@@ -86858,10 +85535,10 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path42102-9"
d="m -36,-20.48792 c -0.32001,0 -0.64002,-10e-6 -0.96003,-10e-6 0,-0.63982 0,-1.27964 0,-1.91948 0.32001,0 0.64002,10e-6 0.96003,10e-6 0,0.63983 0,1.27966 0,1.91948 z"
- style="opacity:0.15;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;opacity:0.15;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.5;fill:#ff541f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#ff541f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
d="m -40.999878,-11 c -0.32001,0 -0.64002,0 -0.96003,0 0,-0.21055 0,-0.42107 0,-0.63162 0.32001,0 0.64002,0 0.96003,0 0,0.21055 0,0.42107 0,0.63162 z"
id="path42104-1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -86874,7 +85551,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path42106-8"
d="m -40.999878,-11.33707 c -0.32001,0 -0.64002,-10e-6 -0.96003,-10e-6 0,-0.55431 0,-1.1086 0,-1.66292 0.32001,0 0.64002,10e-6 0.96003,10e-6 0,0.55431 0,1.10861 0,1.66292 z"
- style="opacity:0.25;fill:#ff541f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:#ff541f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<g
@@ -86884,45 +85561,36 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path44967-9"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.13326335;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.75,0,0,0.75,29.5,135)" />
- <path
- sodipodi:type="arc"
- style="fill:url(#linearGradient24239-1);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.13326335;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.75,0,0,0.75,29.5,135)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
+ style="display:inline;fill:url(#linearGradient24239-1);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path44969-5"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(-0.683022,-0.07745026,0.0778507,-0.683064,209.4726,314.325)" />
- <path
+ transform="matrix(-0.683022,-0.07745026,0.0778507,-0.683064,209.4726,314.325)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.4963171,0,0,0.4963178,62.986138,164.93452)"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path44971-3"
- style="opacity:0.5;fill:none;stroke:#ffffff;stroke-width:4.0295496;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
- sodipodi:type="arc"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:none;stroke:#ffffff;stroke-width:4.0295496;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
@@ -86931,7 +85599,7 @@
transform="translate(177,410)">
<rect
transform="scale(1,-1)"
- style="opacity:0;fill:#666666;stroke:none;stroke-width:2.29999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#666666;stroke:none;stroke-width:2.29999995;marker:none;enable-background:accumulate"
id="rect43157-5"
width="16"
height="16"
@@ -86941,88 +85609,70 @@
id="g43221-2"
transform="matrix(1.1891377,0,0,1.189137,-45.334548,102.47504)"
style="display:inline;enable-background:new">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path43224-5"
- style="fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.86864018;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.3150215,0,0,0.3150217,-36.662669,-174.25239)" />
- <path
- sodipodi:type="arc"
- style="opacity:0.79000005;fill:url(#linearGradient24241-6);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.86864018;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.3150215,0,0,0.3150217,-36.662669,-174.25239)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
+ style="display:inline;opacity:0.79000005;fill:url(#linearGradient24241-6);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path43226-8"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(-0.2610878,-0.02960567,0.02975872,-0.2611039,35.872259,-102.36161)" />
- <path
+ transform="matrix(-0.2610878,-0.02960567,0.02975872,-0.2611039,35.872259,-102.36161)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.2102357,0,0,0.2102362,-22.830954,-161.8877)"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path43228-6"
- style="opacity:0.6;fill:none;stroke:url(#linearGradient24243-1);stroke-width:4.00001144;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
- sodipodi:type="arc"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:none;stroke:url(#linearGradient24243-1);stroke-width:4.00001144;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
transform="matrix(0.9963903,0,0,1,-2.1155075,0)"
id="g43169-7">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path43170-7"
- style="fill:#ff5b29;fill-opacity:1;fill-rule:nonzero;stroke:#2b0000;stroke-width:1.6028651;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.5625217,0,0,0.5624997,-110.25304,-122.37496)" />
- <path
- sodipodi:type="arc"
- style="fill:url(#linearGradient24245-3);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="fill:#ff5b29;fill-opacity:1;fill-rule:nonzero;stroke:#2b0000;stroke-width:1.6028651;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.5625217,0,0,0.5624997,-110.25304,-122.37496)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
+ style="display:inline;fill:url(#linearGradient24245-3);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path43172-2"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(-0.5000291,-0.05669783,0.0569932,-0.5000402,23.278522,10.488883)" />
- <path
+ transform="matrix(-0.5000291,-0.05669783,0.0569932,-0.5000402,23.278522,10.488883)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.4374781,0,0,0.4374622,-93.747286,-107.62054)"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path43174-2"
- style="opacity:0.65;fill:none;stroke:url(#linearGradient24247-8);stroke-width:2.29000854;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
- sodipodi:type="arc"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.65;fill:none;stroke:url(#linearGradient24247-8);stroke-width:2.29000854;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
transform="matrix(0,-1,-1,0,-93.999999,-92)"
@@ -87030,12 +85680,12 @@
<path
sodipodi:nodetypes="csscc"
id="path42387-4"
- d="m -36.5,-51.499999 c -0.5,1 -1.34258,1.996832 -2.996831,1.996832 -1.654251,0 -3,-1.345743 -3,-2.999994 0,-1.308742 0.996831,-2.496838 1.996831,-2.996838 l 4,4 z"
- style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient24249-9);stroke-width:0.89999998;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ d="m -36.5,-51.499999 c -0.5,1 -1.34258,1.996832 -2.996831,1.996832 -1.654251,0 -3,-1.345743 -3,-2.999994 0,-1.308742 0.996831,-2.496838 1.996831,-2.996838 z"
+ style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient24249-9);stroke-width:0.89999998;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient24251-6);fill-opacity:1;fill-rule:nonzero"
- d="m -36.5,-51.499999 c -0.5,1 -1.34258,1.996832 -2.996831,1.996832 -1.654251,0 -2.996872,-1.345746 -3,-2.999994 C -42.5,-54.175184 -41.5,-54.999999 -40.5,-55.499999 l 4,4 z"
+ d="m -36.5,-51.499999 c -0.5,1 -1.34258,1.996832 -2.996831,1.996832 -1.654251,0 -2.996872,-1.345746 -3,-2.999994 C -42.5,-54.175184 -41.5,-54.999999 -40.5,-55.499999 Z"
id="path43279-1"
sodipodi:nodetypes="csscc"
inkscape:connector-curvature="0" />
@@ -87043,52 +85693,43 @@
sodipodi:nodetypes="ccsss"
id="path42392-9"
d="m -40.75,-54.249999 3,3 c -0.25,0.25 -0.659057,0.708509 -1.758414,0.708509 -1.099355,0 -1.991586,-0.877412 -1.991586,-1.958509 0,-1.081096 0.5,-1.5 0.75,-1.75 z"
- style="opacity:0.6;fill:none;stroke:url(#linearGradient24253-0);stroke-width:1.00000048;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:none;stroke:url(#linearGradient24253-0);stroke-width:1.00000048;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
inkscape:connector-curvature="0" />
</g>
<g
transform="matrix(1.1891377,0,0,1.189137,-39.353927,107.5067)"
id="g43258-6"
style="display:inline;enable-background:new">
- <path
+ <circle
transform="matrix(0.3150215,0,0,0.3150217,-36.662669,-174.25239)"
- sodipodi:type="arc"
- style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient24255-6);stroke-width:2.40253735;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient24255-6);stroke-width:2.40253735;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path43260-9"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(-0.2610878,-0.02960567,0.02975872,-0.2611039,35.872259,-102.36161)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path43262-8"
- style="fill:url(#linearGradient24257-6);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- sodipodi:type="arc" />
- <path
+ style="display:inline;fill:url(#linearGradient24257-6);fill-opacity:1;fill-rule:nonzero;stroke:none"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- sodipodi:type="arc"
- style="opacity:0.7;fill:none;stroke:url(#linearGradient24259-1);stroke-width:4.00001144;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:none;stroke:url(#linearGradient24259-1);stroke-width:4.00001144;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
id="path43264-2"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- transform="matrix(0.2102357,0,0,0.2102362,-22.830954,-161.8877)" />
+ transform="matrix(0.2102357,0,0,0.2102362,-22.830954,-161.8877)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
@@ -87097,7 +85738,7 @@
id="ICON_FORCE_HARMONIC">
<rect
transform="scale(1,-1)"
- style="opacity:0;fill:#666666;stroke:none;stroke-width:2.29999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#666666;stroke:none;stroke-width:2.29999995;marker:none;enable-background:accumulate"
id="rect49020-5"
width="16"
height="16"
@@ -87109,15 +85750,15 @@
<g
id="g49024-9"
mask="url(#mask48816-8)"
- style="opacity:0.4;display:inline;enable-background:new">
+ style="display:inline;opacity:0.4;enable-background:new">
<path
id="path49027-1"
d="M -42.5,-79.5 -32,-83"
- style="fill:none;stroke:#2b0800;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#2b0800;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#ff8d73;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#ff8d73;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M -42.5,-79.5 -32,-83"
id="path49031-2"
sodipodi:nodetypes="cc"
@@ -87129,45 +85770,36 @@
style="display:inline;enable-background:new"
id="g49036-0"
transform="matrix(1.1891377,0,0,1.189137,-48.353927,83.503529)">
- <path
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path49039-8"
- style="fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.13558888;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc"
- transform="matrix(0.3150215,0,0,0.3150217,-36.662669,-174.25239)" />
- <path
- sodipodi:type="arc"
- style="fill:url(#linearGradient24279-6);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.13558888;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.3150215,0,0,0.3150217,-36.662669,-174.25239)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
+ style="display:inline;fill:url(#linearGradient24279-6);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path49043-3"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(-0.2610878,-0.02960567,0.02975872,-0.2611039,35.872259,-102.36161)" />
- <path
+ transform="matrix(-0.2610878,-0.02960567,0.02975872,-0.2611039,35.872259,-102.36161)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0.2102357,0,0,0.2102362,-22.830954,-161.8877)"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path49045-9"
- style="fill:none;stroke:url(#linearGradient24281-3);stroke-width:4.00001144;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
- sodipodi:type="arc"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient24281-3);stroke-width:4.00001144;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
</g>
@@ -87180,7 +85812,7 @@
id="g49050-9">
<path
sodipodi:nodetypes="cc"
- style="fill:none;stroke:#2b0800;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#2b0800;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M -39.5,-75.5 -32,-83"
id="path49055-6"
inkscape:connector-curvature="0" />
@@ -87188,7 +85820,7 @@
sodipodi:nodetypes="cc"
id="path49057-7"
d="M -39.5,-75.5 -32,-83"
- style="fill:none;stroke:#ff8d73;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#ff8d73;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
<g
@@ -87197,45 +85829,36 @@
transform="matrix(1.1891377,0,0,1.189137,-45.367039,87.538326)"
id="g49061-9"
style="display:inline;enable-background:new">
- <path
+ <circle
transform="matrix(0.3150215,0,0,0.3150217,-36.662669,-174.25239)"
- sodipodi:type="arc"
- style="fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.13558888;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.13558888;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path49065-7"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(-0.2610878,-0.02960567,0.02975872,-0.2611039,35.872259,-102.36161)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path49067-6"
- style="fill:url(#linearGradient24283-7);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- sodipodi:type="arc" />
- <path
+ style="display:inline;fill:url(#linearGradient24283-7);fill-opacity:1;fill-rule:nonzero;stroke:none"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient24285-8);stroke-width:4.00001144;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient24285-8);stroke-width:4.00001144;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
id="path49069-9"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- transform="matrix(0.2102357,0,0,0.2102362,-22.830954,-161.8877)" />
+ transform="matrix(0.2102357,0,0,0.2102362,-22.830954,-161.8877)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
</g>
@@ -87247,11 +85870,11 @@
<path
id="path49075-7"
d="M -34.5,-72.5 -32,-83"
- style="fill:none;stroke:#2b0800;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#2b0800;stroke-width:2.70000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#ff8d73;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#ff8d73;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M -34.5,-72.5 -32,-83"
id="path49077-6"
sodipodi:nodetypes="cc"
@@ -87261,45 +85884,36 @@
transform="matrix(1.1891377,0,0,1.189137,-40.353927,90.509865)"
id="g49079-6"
style="display:inline;enable-background:new">
- <path
+ <circle
transform="matrix(0.3150215,0,0,0.3150217,-36.662669,-174.25239)"
- sodipodi:type="arc"
- style="fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.13558888;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.13558888;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path49082-5"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(-0.2610878,-0.02960567,0.02975872,-0.2611039,35.872259,-102.36161)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path49084-8"
- style="fill:url(#linearGradient24287-1);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- sodipodi:type="arc" />
- <path
+ style="display:inline;fill:url(#linearGradient24287-1);fill-opacity:1;fill-rule:nonzero;stroke:none"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- sodipodi:type="arc"
- style="fill:none;stroke:url(#linearGradient24289-3);stroke-width:4.00001144;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient24289-3);stroke-width:4.00001144;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
id="path49086-2"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- transform="matrix(0.2102357,0,0,0.2102362,-22.830954,-161.8877)" />
+ transform="matrix(0.2102357,0,0,0.2102362,-22.830954,-161.8877)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
@@ -87307,7 +85921,7 @@
transform="translate(6.299313,57.265533)"
id="g49088-5">
<rect
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#5a0d00;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#5a0d00;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect49090-4"
width="2.9998772"
height="3"
@@ -87316,7 +85930,7 @@
ry="1.4999387"
rx="1.4999387" />
<path
- style="fill:#ff541f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff541f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000072;marker:none;enable-background:accumulate"
d="m -37.299433,-141.26553 c -0.65334,0 -1.30668,1e-5 -1.96003,1e-5 0,0.66667 0,1.33332 0,1.99999 0.65335,0 1.30669,-10e-6 1.96003,-10e-6 0,-0.66666 0,-1.33332 0,-1.99999 z"
id="path49092-4"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -87324,8 +85938,8 @@
inkscape:export-ydpi="90"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.45;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
- d="m -38.799433,-139.76553 0,-1 1,0"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.45;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
+ d="m -38.799433,-139.76553 v -1 h 1"
id="path49094-1"
inkscape:connector-curvature="0" />
</g>
@@ -87338,20 +85952,20 @@
transform="translate(51,203)"
id="g45912-1">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect35680-9-6"
width="16"
height="16"
x="-46"
y="-4" />
<g
- style="opacity:0.95;display:inline;enable-background:new"
+ style="display:inline;opacity:0.95;enable-background:new"
transform="translate(-491,-214.9763)"
id="g35844-1-3"
inkscape:transform-center-x="-0.78726"
inkscape:transform-center-y="2.2787562">
<path
- style="opacity:0.95;fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.95;fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 454.5,218.5 c -1.25,-1.5 -2.5,-1.5 -4,1 -1.5,-2.5 -2.75,-2.5 -4,-1"
id="path35846-9-3"
sodipodi:nodetypes="ccc"
@@ -87360,10 +85974,10 @@
sodipodi:nodetypes="ccc"
id="path35848-8-5"
d="m 454.5,218.5 c -1.25,-1.5 -2.5,-1.5 -4,1 -1.5,-2.5 -2.75,-2.5 -4,-1"
- style="fill:none;stroke:#f2f2f2;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#f2f2f2;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.60000002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.60000002;marker:none;enable-background:accumulate"
id="rect35914-6-5"
width="1"
height="2"
@@ -87375,9 +85989,9 @@
height="1"
width="0.75"
id="rect35916-5-3"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.60000002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.60000002;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.60000002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.60000002;marker:none;enable-background:accumulate"
id="rect35919-0-2"
width="0.75"
height="1"
@@ -87391,10 +86005,10 @@
sodipodi:nodetypes="ccc"
id="path35702-0-2"
d="m 292.5,459.5 c -1.25,-1.5 -3.5,-1.5 -5,1 -1.5,-2.5 -3.75,-2.5 -5,-1"
- style="opacity:0.95;fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.95;fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#ececec;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#ececec;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 292.5,459.5 c -1.25,-1.5 -3.5,-1.5 -5,1 -1.5,-2.5 -3.75,-2.5 -5,-1"
id="path35704-0-5"
sodipodi:nodetypes="ccc"
@@ -87405,9 +86019,9 @@
height="2"
width="1"
id="rect35908-6-3"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.60000002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.60000002;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.60000002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.60000002;marker:none;enable-background:accumulate"
id="rect35910-1-6"
width="0.75"
height="1"
@@ -87419,16 +86033,16 @@
height="1"
width="0.75"
id="rect35912-3-1"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.60000002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.60000002;marker:none;enable-background:accumulate" />
</g>
<g
- style="opacity:0.9;display:inline;enable-background:new"
+ style="display:inline;opacity:0.9;enable-background:new"
transform="translate(-484,-209.97631)"
id="g45582-8"
inkscape:transform-center-x="-0.78726"
inkscape:transform-center-y="2.2787562">
<path
- style="opacity:0.95;fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.95;fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 452.5,218.47631 -1,-1 -2,2 -2,-2 -1,1.02369"
id="path45584-6"
sodipodi:nodetypes="ccccc"
@@ -87437,10 +86051,10 @@
sodipodi:nodetypes="ccccc"
id="path45586-2"
d="m 452.5,218.47631 -1,-1 -2,2 -2,-2 -1,1.02369"
- style="fill:none;stroke:#ffffff;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#ffffff;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.60000002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.60000002;marker:none;enable-background:accumulate"
id="rect45588-1"
width="1"
height="1.4999862"
@@ -87452,9 +86066,9 @@
height="0.99998617"
width="1"
id="rect45590-4"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.60000002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.60000002;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.60000002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.60000002;marker:none;enable-background:accumulate"
id="rect45592-6"
width="1"
height="0.99998617"
@@ -87466,9 +86080,9 @@
height="0.99998617"
width="1"
id="rect45594-2"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.60000002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.60000002;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.60000002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.60000002;marker:none;enable-background:accumulate"
id="rect45596-9"
width="1"
height="0.99998617"
@@ -87480,9 +86094,9 @@
height="0.99998617"
width="1"
id="rect45598-1"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.60000002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.60000002;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.60000002;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.60000002;marker:none;enable-background:accumulate"
id="rect45600-5"
width="1"
height="0.99998617"
@@ -87497,45 +86111,36 @@
transform="matrix(0.3350147,0,0,0.3350147,-35.55948,137.66413)"
id="g29713-0"
style="display:inline;enable-background:new">
- <path
+ <circle
transform="matrix(0.75,0,0,0.75,29.5,135)"
- sodipodi:type="arc"
- style="fill:#ff541f;fill-opacity:1;fill-rule:nonzero;stroke:#320b00;stroke-width:3.58193231;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff541f;fill-opacity:1;fill-rule:nonzero;stroke:#320b00;stroke-width:3.58193231;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path29715-3"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(-0.6011908,-0.06817113,0.06852359,-0.6012277,199.77148,303.44348)"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path29717-6"
- style="opacity:0.6;fill:url(#linearGradient33126-9);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
- sodipodi:type="arc" />
- <path
+ style="display:inline;opacity:0.6;fill:url(#linearGradient33126-9);fill-opacity:1;fill-rule:nonzero;stroke:none"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- sodipodi:type="arc"
- style="opacity:0.7;fill:none;stroke:url(#linearGradient33128-2);stroke-width:6.6867547;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:none;stroke:url(#linearGradient33128-2);stroke-width:6.6867547;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
id="path29719-4"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- transform="matrix(0.4463965,0,0,0.4463971,69.575658,170.82515)" />
+ transform="matrix(0.4463965,0,0,0.4463971,69.575658,170.82515)"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
</g>
<g
@@ -87548,14 +86153,14 @@
height="16"
width="16"
id="rect24980-2"
- style="opacity:0;fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;marker:none;enable-background:accumulate" />
<g
clip-path="none"
mask="none"
id="g24568-9"
transform="translate(93,198.04787)">
<path
- style="fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m -44.5,-117.48534 c 0,1 1,3 5.5,3 5.25,0 7.5,-3.26466 7.5,-6.01466 0,-1.5 -0.5,-2.25 -1,-3"
id="path24570-3"
sodipodi:nodetypes="cssc"
@@ -87563,9 +86168,9 @@
<g
id="g24572-4"
mask="url(#mask43050-6)"
- transform="translate(-22,0)">
+ transform="translate(-22)">
<path
- style="fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:2.79999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m -11.5,-110.54787 c 2.25,-1.5 2,-3.45213 2,-4.20213 0,-1.6875 -2.25,-5.75 -7.5,-5.75 -4.5,0 -5.5,2 -5.5,3"
id="path24574-4"
sodipodi:nodetypes="cssz"
@@ -87574,10 +86179,10 @@
sodipodi:nodetypes="cssz"
id="path24576-0"
d="m -11.5,-110.54787 c 2.25,-1.5 2,-3.45213 2,-4.20213 0,-1.6875 -2.25,-5.75 -7.5,-5.75 -4.5,0 -5.5,2 -5.5,3"
- style="fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.65;fill:none;stroke:url(#radialGradient24295-1);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.65;fill:none;stroke:url(#radialGradient24295-1);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m -11.5,-110.54787 c 2.25,-1.5 2,-3.45213 2,-4.20213 0,-1.6875 -2.25,-5.75 -7.5,-5.75 -4.5,0 -5.5,2 -5.5,3"
id="path24578-5"
sodipodi:nodetypes="cssz"
@@ -87586,19 +86191,16 @@
sodipodi:nodetypes="cssz"
id="path24580-9"
d="m -11.5,-110.54787 c 2.5,-1.5 2,-3.45213 2,-4.20213 0,-1.6875 -2.25,-5.75 -7.5,-5.75 -4.5,0 -5.5,2 -5.5,3"
- style="opacity:0.65;fill:none;stroke:url(#radialGradient24297-0);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="opacity:0.65;fill:none;stroke:url(#radialGradient24297-0);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.29999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <circle
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.29999995;marker:none;enable-background:accumulate"
id="path24582-6"
- sodipodi:cx="-10.5"
- sodipodi:cy="-117.5"
- sodipodi:rx="1.5"
- sodipodi:ry="1.5"
- d="m -9,-117.5 a 1.5,1.5 0 0 1 -1.5,1.5 1.5,1.5 0 0 1 -1.5,-1.5 1.5,1.5 0 0 1 1.5,-1.5 1.5,1.5 0 0 1 1.5,1.5 z"
- transform="matrix(1,0,0,1.4166681,-22,49.0835)" />
+ transform="matrix(1,0,0,1.4166681,-22,49.0835)"
+ cx="-10.5"
+ cy="-117.5"
+ r="1.5" />
<g
id="g24584-3">
<rect
@@ -87607,16 +86209,16 @@
height="14.999989"
width="2.5"
id="rect24586-4"
- style="fill:#821b00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#821b00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;marker:none;enable-background:accumulate" />
<rect
- style="fill:#ff9d7d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff9d7d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;marker:none;enable-background:accumulate"
id="rect24588-2"
width="1"
height="14.999989"
x="-39"
y="-124.50001" />
<rect
- style="fill:url(#radialGradient24299-9);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient24299-9);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;marker:none;enable-background:accumulate"
id="rect24590-8"
width="2"
height="14.999989"
@@ -87627,7 +86229,7 @@
sodipodi:nodetypes="cssc"
id="path24592-8"
d="m -44.5,-117.48534 c 0,1 1,3 5.5,3 5.25,0 7.5,-3.26466 7.5,-6.01466 0,-1.5 -0.5,-2.25 -1,-3"
- style="fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
</g>
@@ -87642,7 +86244,7 @@
id="g44633-8"
style="display:inline;enable-background:new">
<g
- transform="matrix(-1,0,0,-1,662.9375,1247)"
+ transform="rotate(180,331.46875,623.5)"
id="g44671-4">
<g
transform="matrix(-1,0,0,1,677,525)"
@@ -87652,27 +86254,27 @@
sodipodi:nodetypes="cc"
id="path44637-0"
d="m 347.25,100.25 -4,-4"
- style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc"
id="path44639-9"
- d="m 343,100.25 0,-4.25 4.25,0"
- style="fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="M 343,100.25 V 96 h 4.25"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
</g>
<g
transform="matrix(-1,0,0,1,677,517)"
id="g44647-2">
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="M 347.25,108.25 343,104"
id="path44649-6"
sodipodi:nodetypes="cc" />
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 343,108.25 0,-4.25 4.25,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 343,108.25 V 104 h 4.25"
id="path44651-7"
sodipodi:nodetypes="ccc" />
</g>
@@ -87680,36 +86282,36 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc"
id="path44653-5"
- d="m 332.5,621.5 -3,0 m 5,4 0,-4.5"
- style="opacity:0.93999993;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+ d="m 332.5,621.5 h -3 m 5,4 V 621"
+ style="display:inline;opacity:0.93999993;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
id="path44655-9"
d="m 330,625.75 2,-2"
- style="opacity:0.93999993;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+ style="display:inline;opacity:0.93999993;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new" />
<path
inkscape:connector-curvature="0"
id="path44657-2"
- d="m 333,622 0,1 0,1.5 -1,0 0,-1.5 -1.5,0 0,-1 1.5,0 1,0 z"
- style="opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m 333,622 v 1 1.5 h -1 V 623 h -1.5 v -1 h 1.5 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;enable-background:accumulate" />
</g>
<g
- transform="matrix(-1,0,0,-1,648.9375,1261)"
+ transform="rotate(180,324.46875,630.5)"
id="g44682-2">
<g
id="g44641-6"
transform="matrix(1,0,0,-1,-21,729)">
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 347.25,100.25 -4,-4"
id="path44643-3"
sodipodi:nodetypes="cc" />
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 343,100.25 0,-4.25 4.25,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 343,100.25 V 96 h 4.25"
id="path44645-3"
sodipodi:nodetypes="ccc" />
</g>
@@ -87721,30 +86323,30 @@
sodipodi:nodetypes="cc"
id="path44661-9"
d="M 347.25,108.25 343,104"
- style="fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc"
id="path44663-9"
- d="m 343,108.25 0,-4.25 4.25,0"
- style="fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="M 343,108.25 V 104 h 4.25"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
</g>
<path
inkscape:connector-curvature="0"
- style="opacity:0.93999993;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
- d="m 322.5,631.5 0,-3 m 4,5 -4.5,0"
+ style="display:inline;opacity:0.93999993;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m 322.5,631.5 v -3 m 4,5 H 322"
id="path44665-0"
sodipodi:nodetypes="cccc" />
<path
inkscape:connector-curvature="0"
- style="opacity:0.93999993;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ style="display:inline;opacity:0.93999993;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
d="m 326.75,629 -2,2"
id="path44667-6"
sodipodi:nodetypes="cc" />
<path
inkscape:connector-curvature="0"
- style="opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 323,632 0,-1 0,-1.5 1,0 0,1.5 1.5,0 0,1 -1.5,0 -1,0 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
+ d="m 323,632 v -1 -1.5 h 1 v 1.5 h 1.5 v 1 H 324 Z"
id="path44669-4" />
</g>
</g>
@@ -87752,7 +86354,7 @@
transform="translate(-10.783378,-1.2374369)"
id="g29973">
<rect
- style="fill:none;stroke:#402100;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#402100;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect39229-9"
width="2.9998772"
height="3"
@@ -87760,10 +86362,10 @@
y="204.7984"
ry="0"
rx="0"
- transform="matrix(0,-1,1,0,0,0)" />
+ transform="rotate(-90)" />
<path
inkscape:connector-curvature="0"
- style="fill:#ffc17d;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffc17d;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;enable-background:accumulate"
d="m 205.2984,150.91921 c 0,0.6694 1e-5,1.3388 1e-5,2.0082 0.66939,0 1.33877,0 2.00817,0 0,-0.6694 -1e-5,-1.3388 -1e-5,-2.0082 -0.66939,0 -1.33878,0 -2.00817,0 z"
id="path39231-8"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -87775,7 +86377,7 @@
id="g29973-5"
style="display:inline;enable-background:new">
<rect
- style="fill:none;stroke:#402100;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#402100;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect39229-9-8"
width="2.9998772"
height="3"
@@ -87783,10 +86385,10 @@
y="204.7984"
ry="0"
rx="0"
- transform="matrix(0,-1,1,0,0,0)" />
+ transform="rotate(-90)" />
<path
inkscape:connector-curvature="0"
- style="fill:#ffc17d;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffc17d;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;enable-background:accumulate"
d="m 205.2984,150.91921 c 0,0.6694 1e-5,1.3388 1e-5,2.0082 0.66939,0 1.33877,0 2.00817,0 0,-0.6694 -1e-5,-1.3388 -1e-5,-2.0082 -0.66939,0 -1.33878,0 -2.00817,0 z"
id="path39231-8-9"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -87802,14 +86404,14 @@
transform="matrix(-1,0,0,1,565.35356,49.06678)">
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:#646464;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#646464;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 347.25,100.25 -4,-4"
id="path44643-3-8"
sodipodi:nodetypes="cc" />
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:#646464;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 343,100.25 0,-4.25 4.25,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#646464;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 343,100.25 V 96 h 4.25"
id="path44645-3-3"
sodipodi:nodetypes="ccc" />
</g>
@@ -87821,33 +86423,33 @@
sodipodi:nodetypes="cc"
id="path44661-9-9"
d="M 347.25,108.25 343,104"
- style="fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc"
id="path44663-9-4"
- d="m 343,108.25 0,-4.25 4.25,0"
- style="fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="M 343,108.25 V 104 h 4.25"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
</g>
<path
inkscape:connector-curvature="0"
- style="opacity:0.93999993;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
- d="m 221.85356,146.56678 0,3 m -4,-5 4.5,0"
+ style="display:inline;opacity:0.93999993;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m 221.85356,146.56678 v 3 m -4,-5 h 4.5"
id="path44665-0-4"
sodipodi:nodetypes="cccc" />
<path
inkscape:connector-curvature="0"
- style="opacity:0.93999993;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ style="display:inline;opacity:0.93999993;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
d="m 217.60356,149.06678 2,-2"
id="path44667-6-6"
sodipodi:nodetypes="cc" />
<path
inkscape:connector-curvature="0"
- style="opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 221.35356,146.06678 0,1 0,1.5 -1,0 0,-1.5 -1.5,0 0,-1 1.5,0 1,0 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
+ d="m 221.35356,146.06678 v 1 1.5 h -1 v -1.5 h -1.5 v -1 h 1.5 z"
id="path44669-4-5" />
<rect
- transform="matrix(0,-1,1,0,0,0)"
+ transform="rotate(-90)"
rx="0"
ry="0"
y="215.04765"
@@ -87855,14 +86457,14 @@
height="3"
width="2.9998772"
id="rect39229-9-81"
- style="fill:#e6e6e6;stroke:#969696;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#e6e6e6;stroke:#969696;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path39231-8-6"
d="m 215.54765,149.61541 c 0,0.6694 1e-5,1.3388 1e-5,2.0082 0.66939,0 1.33877,0 2.00817,0 0,-0.6694 -10e-6,-1.3388 -10e-6,-2.0082 -0.66939,0 -1.33878,0 -2.00817,0 z"
- style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<g
id="g30322">
@@ -87871,14 +86473,14 @@
transform="matrix(1,0,0,-1,-118.64644,239.06678)"
style="stroke:#646464;stroke-opacity:1">
<path
- style="fill:none;stroke:#646464;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#646464;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 347.25,100.25 -4,-4"
id="path44637-0-8"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#646464;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 343,100.25 0,-4.25 4.25,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#646464;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 343,100.25 V 96 h 4.25"
id="path44639-9-5"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
@@ -87890,35 +86492,35 @@
sodipodi:nodetypes="cc"
id="path44649-6-7"
d="M 347.25,108.25 343,104"
- style="fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
id="path44651-7-3"
- d="m 343,108.25 0,-4.25 4.25,0"
- style="fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 343,108.25 V 104 h 4.25"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<path
- style="opacity:0.93999993;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
- d="m 225.85356,142.56678 3,0 m -5,-4 0,4.5"
+ style="display:inline;opacity:0.93999993;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m 225.85356,142.56678 h 3 m -5,-4 v 4.5"
id="path44653-5-3"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.93999993;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new"
+ style="display:inline;opacity:0.93999993;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
d="m 228.35356,138.31678 -2,2"
id="path44655-9-8"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
- style="opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 225.35356,142.06678 0,-1 0,-1.5 1,0 0,1.5 1.5,0 0,1 -1.5,0 -1,0 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
+ d="m 225.35356,142.06678 v -1 -1.5 h 1 v 1.5 h 1.5 v 1 h -1.5 z"
id="path44657-2-3"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
- style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;enable-background:accumulate"
d="m 228.45235,136.53393 c 0,0.6694 1e-5,1.3388 1e-5,2.0082 0.66939,0 1.33877,0 2.00817,0 0,-0.6694 -1e-5,-1.3388 -1e-5,-2.0082 -0.66939,0 -1.33878,0 -2.00817,0 z"
id="path39231-8-9-4"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -87926,7 +86528,7 @@
inkscape:export-ydpi="90" />
</g>
<rect
- transform="matrix(0,-1,1,0,0,0)"
+ transform="rotate(-90)"
rx="0"
ry="0"
y="227.95235"
@@ -87934,7 +86536,7 @@
height="3"
width="2.9998772"
id="rect39229-9-8-3"
- style="fill:#e6e6e6;stroke:#969696;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#e6e6e6;stroke:#969696;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
</g>
<g
id="ICON_CAMERA_STEREO">
@@ -87946,7 +86548,7 @@
height="16"
width="16"
id="rect17868"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
ry="1.7356256"
y="495.5"
@@ -87954,17 +86556,17 @@
height="12"
width="15"
id="rect17872"
- style="fill:url(#linearGradient18011);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient18011);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
rx="1.7356256" />
<path
sodipodi:nodetypes="ccccccccc"
id="path17875"
- d="M 468,499.48148 468,505 c 0,0.56404 0.36784,1.00001 0.84375,1 l 12.3125,0 C 481.63216,506 482,505.56405 482,505 l 0,-5.51852 c -0.31371,0.37179 -0.76923,0.59259 -1.25,0.59259 l -11.5,0 c -0.48077,0 -0.93629,-0.2208 -1.25,-0.59259 z"
- style="fill:url(#linearGradient18008);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 468,499.48148 V 505 c 0,0.56404 0.36784,1.00001 0.84375,1 h 12.3125 C 481.63216,506 482,505.56405 482,505 v -5.51852 c -0.31371,0.37179 -0.76923,0.59259 -1.25,0.59259 h -11.5 c -0.48077,0 -0.93629,-0.2208 -1.25,-0.59259 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient18008);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<rect
rx="1.5817194"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect17877"
width="15"
height="2"
@@ -87972,7 +86574,7 @@
y="495.5"
ry="1" />
<rect
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect17879"
width="15"
height="12"
@@ -87988,28 +86590,26 @@
height="10"
width="13.000001"
id="rect17883"
- style="opacity:0.25;fill:none;stroke:#ffffff;stroke-width:0.99999988;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:none;stroke:#ffffff;stroke-width:0.99999988;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<g
id="g17893"
transform="matrix(0.7547901,0,0,1,416.02177,0)">
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:#999999;stroke-width:2.89550138;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#999999;stroke-width:2.89550138;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path17895"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(0.7901234,0,0,0.2000006,9.8760061,395.5997)" />
+ transform="matrix(0.7901234,0,0,0.2000006,9.8760061,395.5997)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
<path
sodipodi:nodetypes="csccc"
id="path17897"
- d="m 69.505631,495.5 0,-0.50001 c 0,-0.276 0.896,-0.5 2,-0.5 1.104,0 2,0.224 2,0.5 l 0,0.50001"
- style="fill:none;stroke:#000000;stroke-width:1.15103066;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 69.505631,495.5 v -0.50001 c 0,-0.276 0.896,-0.5 2,-0.5 1.104,0 2,0.224 2,0.5 V 495.5"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1.15103066;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect17899"
width="2.6497433"
height="1"
@@ -88022,9 +86622,9 @@
height="1.5"
width="2"
id="rect17901"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<rect
- style="fill:url(#radialGradient17992);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient17992);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate"
id="rect17903"
width="2"
height="1.5"
@@ -88036,11 +86636,11 @@
height="1"
width="1"
id="rect17905"
- style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate" />
<use
height="640"
width="602"
- transform="translate(-6.1847313,0)"
+ transform="translate(-6.1847313)"
id="use18134"
xlink:href="#g18103"
y="0"
@@ -88048,107 +86648,87 @@
<g
transform="matrix(0.81050804,0,0,0.81050804,91.905464,90.739248)"
id="g18103">
- <path
- sodipodi:type="arc"
- style="opacity:0.1;fill:none;stroke:#000000;stroke-width:0.62952667;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:none;stroke:#000000;stroke-width:0.62952667;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path17885"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(1.5770887,0,0,1.5999841,353.49325,-294.69208)" />
- <path
+ transform="matrix(1.5770887,0,0,1.5999841,353.49325,-294.69208)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
transform="matrix(1.3955004,0,0,1.2452423,368.18333,-114.72474)"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path17881"
- style="opacity:0.7;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.75859177;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.75859177;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
transform="matrix(1.1794014,0,0,0.8999954,384.50686,55.952303)"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path17887"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient18146);stroke-width:0.97061968;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b3b3b3;stroke-width:0.83938956;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient18146);stroke-width:0.97061968;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#b3b3b3;stroke-width:0.83938956;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path17889"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(1.1827463,0,0,1.2,384.24579,-92.900024)" />
- <path
+ transform="matrix(1.1827463,0,0,1.2,384.24579,-92.900024)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
transform="matrix(0.790122,0,0,0.787736,414.87048,114.05649)"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path17891"
- style="fill:none;stroke:url(#linearGradient18149);stroke-width:1.26754272;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient18149);stroke-width:1.26754272;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
transform="matrix(1.1827463,0,0,1.2,384.24579,-92.900024)"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path17907"
- style="fill:none;stroke:url(#radialGradient18151);stroke-width:0.67151165;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="fill:url(#radialGradient18153);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#radialGradient18151);stroke-width:0.67151165;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient18153);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
id="path17909"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- transform="matrix(0.8888868,0,0,0.8862026,407.16682,64.626266)" />
- <path
+ transform="matrix(0.8888868,0,0,0.8862026,407.16682,64.626266)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
transform="matrix(0.1975308,0,0,0.1999991,460.0926,408.10045)"
- d="M 80.53125,502 A 2.5312502,2.5 0 0 1 78,504.5 2.5312502,2.5 0 0 1 75.46875,502 2.5312502,2.5 0 0 1 78,499.5 2.5312502,2.5 0 0 1 80.53125,502 Z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path17911"
- style="opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.26754272;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
</g>
- <path
+ <ellipse
transform="matrix(-0.71872408,0.04983719,-0.0496867,-0.7165537,559.14667,859.50468)"
- d="m 80.53125,502 a 2.5312502,2.5 0 1 1 -5.0625,0 2.5312502,2.5 0 1 1 5.0625,0 z"
- sodipodi:ry="2.5"
- sodipodi:rx="2.5312502"
- sodipodi:cy="502"
- sodipodi:cx="78"
id="path17913-5"
- style="opacity:0.7;fill:url(#linearGradient18220);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.98985863;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="opacity:0.7;fill:url(#linearGradient18212);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.98985863;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:url(#linearGradient18220);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.98985863;marker:none;enable-background:accumulate"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
+ <ellipse
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:url(#linearGradient18212);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.98985863;marker:none;enable-background:accumulate"
id="path18197"
- sodipodi:cx="78"
- sodipodi:cy="502"
- sodipodi:rx="2.5312502"
- sodipodi:ry="2.5"
- d="m 80.53125,502 a 2.5312502,2.5 0 1 1 -5.0625,0 2.5312502,2.5 0 1 1 5.0625,0 z"
- transform="matrix(-0.71872408,0.04983719,-0.0496867,-0.7165537,552.92989,859.50468)" />
+ transform="matrix(-0.71872408,0.04983719,-0.0496867,-0.7165537,552.92989,859.50468)"
+ cx="78"
+ cy="502"
+ rx="2.5312502"
+ ry="2.5" />
</g>
<g
style="display:inline;enable-background:new"
@@ -88194,7 +86774,7 @@
id="ICON_FORCE_SMOKEFLOW"
style="display:inline;enable-background:new">
<rect
- style="opacity:0;fill:#808000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#808000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;enable-background:new"
id="rect28951"
width="15.999955"
height="16"
@@ -88202,38 +86782,32 @@
y="-27" />
<g
id="g28953"
- style="opacity:0.6;display:inline;enable-background:new">
+ style="display:inline;opacity:0.6;enable-background:new">
<path
inkscape:connector-curvature="0"
id="path28955"
- d="m 157.5,-26.5 c -1.10457,0 -2,0.895431 -2,2 0,1.104569 0.89543,2 2,2 0.0211,0 0.0415,6.5e-4 0.0625,0 0.005,0.02296 0.0259,0.03977 0.0312,0.0625 -0.63487,0.174633 -1.09375,0.747145 -1.09375,1.4375 0,0.828426 0.67157,1.5 1.5,1.5 0.69036,0 1.26287,-0.45888 1.4375,-1.09375 0.18381,0.04305 0.36556,0.09375 0.5625,0.09375 1.38071,0 2.5,-1.119289 2.5,-2.5 0,-1.380711 -1.11929,-2.5 -2.5,-2.5 -0.25351,0 -0.48817,0.05484 -0.71875,0.125 -0.32553,-0.663426 -0.9924,-1.125 -1.78125,-1.125 l 5e-5,0 z"
- style="fill:url(#linearGradient28981);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
- <path
+ d="m 157.5,-26.5 c -1.10457,0 -2,0.895431 -2,2 0,1.104569 0.89543,2 2,2 0.0211,0 0.0415,6.5e-4 0.0625,0 0.005,0.02296 0.0259,0.03977 0.0312,0.0625 -0.63487,0.174633 -1.09375,0.747145 -1.09375,1.4375 0,0.828426 0.67157,1.5 1.5,1.5 0.69036,0 1.26287,-0.45888 1.4375,-1.09375 0.18381,0.04305 0.36556,0.09375 0.5625,0.09375 1.38071,0 2.5,-1.119289 2.5,-2.5 0,-1.380711 -1.11929,-2.5 -2.5,-2.5 -0.25351,0 -0.48817,0.05484 -0.71875,0.125 -0.32553,-0.663426 -0.9924,-1.125 -1.78125,-1.125 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient28981);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" />
+ <circle
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
id="path28957"
- style="fill:url(#linearGradient28983);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new"
- sodipodi:type="arc"
- transform="matrix(0,0.1250004,0.1250004,0,143.24995,-37.50005)" />
- <path
+ style="display:inline;fill:url(#linearGradient28983);fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
+ transform="matrix(0,0.1250004,0.1250004,0,143.24995,-37.50005)"
+ cx="132"
+ cy="118"
+ r="8" />
+ <circle
transform="matrix(0,0.25,0.2500001,0,130.49998,-56)"
- sodipodi:type="arc"
- style="fill:url(#linearGradient28985);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new"
+ style="display:inline;fill:url(#linearGradient28985);fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
id="path28959"
- sodipodi:cx="132"
- sodipodi:cy="118"
- sodipodi:rx="8"
- sodipodi:ry="8"
- d="m 140,118 a 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 8,8 0 0 1 8,8 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ inkscape:export-ydpi="90"
+ cx="132"
+ cy="118"
+ r="8" />
</g>
<g
id="g28961"
@@ -88242,41 +86816,41 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="cszccccccccz"
id="path28963"
- d="m 110.5,85.5 c 0,2.25 2,3 3.5,3 2.25,0 3.1933,-1.514034 4,-2.5 l 4.5,-5.5 3,0 0,-2 -4,0 -5.5,5.5 -1.25,-1.5 -3.25,0 -1,1 0,2 z"
+ d="m 110.5,85.5 c 0,2.25 2,3 3.5,3 2.25,0 3.1933,-1.514034 4,-2.5 l 4.5,-5.5 h 3 v -2 h -4 L 116,84 114.75,82.5 h -3.25 l -1,1 z"
style="fill:#b43214;fill-opacity:1;stroke:none" />
<path
inkscape:connector-curvature="0"
- style="fill:url(#linearGradient28987);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 110.5,85.5 c 0,2.25 2,3 3.5,3 2.25,0 3.46788,-1.244422 4.25,-2.25 L 120,84 l -2,-2 -1.5,1.5 -1,0 0,-1 -1,-1 -3,0 -1,1 0,3 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient28987);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
+ d="m 110.5,85.5 c 0,2.25 2,3 3.5,3 2.25,0 3.46788,-1.244422 4.25,-2.25 L 120,84 l -2,-2 -1.5,1.5 h -1 v -1 l -1,-1 h -3 l -1,1 z"
id="path28965"
sodipodi:nodetypes="cszccccccccz" />
<path
inkscape:connector-curvature="0"
style="fill:none;stroke:#0b1728;stroke-width:0.80000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
- d="m 110.5,85 c 0,2.25 1.5,3.5 3.75,3.5 2.25,0 3.50071,-1.469729 4.25,-2.5 l 4,-5.5 0.5,0 0.5,0 1,0 1,0 0,-2 -1,0 -1.11272,0 -0.88728,0 -1,0 -5,5 -1,0 0,-1 -1,-1 -3,0 -1,1 0,2.5 z"
+ d="m 110.5,85 c 0,2.25 1.5,3.5 3.75,3.5 2.25,0 3.50071,-1.469729 4.25,-2.5 l 4,-5.5 h 0.5 0.5 1 1 v -2 h -1 -1.11272 -0.88728 -1 l -5,5 h -1 v -1 l -1,-1 h -3 l -1,1 z"
id="path28967"
sodipodi:nodetypes="cszccccccccccccccccz" />
<path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient28989);stroke-width:1px"
- d="m 118,83 1,0 0,1 1,0 0,-1 -1,0 0,-1 -1,0 0,1 z"
+ d="m 118,83 h 1 v 1 h 1 v -1 h -1 v -1 h -1 z"
id="path28969"
sodipodi:nodetypes="ccccccccc" />
<path
inkscape:connector-curvature="0"
style="opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round"
- d="m 111.5,82.5 0.75818,0.763059 1.5,0 0.75,-0.75"
+ d="m 111.5,82.5 0.75818,0.763059 h 1.5 l 0.75,-0.75"
id="path28971"
sodipodi:nodetypes="cccc" />
<rect
- style="opacity:0.6;fill:#000000;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;stroke:none;stroke-width:0.80000001;marker:none;enable-background:new"
id="rect28973"
width="2"
height="1"
x="112"
y="82" />
<rect
- style="opacity:0.4;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.4;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:new"
id="rect28975"
width="0.99994147"
height="1.4999981"
@@ -88285,13 +86859,13 @@
<path
inkscape:connector-curvature="0"
style="opacity:0.4;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round"
- d="m 124.5,79.5 -3,0 -5,5 -0.5,0"
+ d="m 124.5,79.5 h -3 l -5,5 H 116"
id="path28977"
sodipodi:nodetypes="cccc" />
<path
inkscape:connector-curvature="0"
style="fill:none;stroke:url(#linearGradient28991);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round"
- d="m 111.5,83.5 0,1.271428 c -0.0915,0.859266 0.18827,2.299909 2.00056,2.733557 3.70517,0.886581 6.00049,-3.943221 6.00049,-3.943221"
+ d="m 111.5,83.5 v 1.271428 c -0.0915,0.859266 0.18827,2.299909 2.00056,2.733557 3.70517,0.886581 6.00049,-3.943221 6.00049,-3.943221"
id="path28979"
sodipodi:nodetypes="ccsc" />
</g>
@@ -88301,8 +86875,8 @@
id="ICON_GRIP"
transform="translate(238,508)">
<path
- style="fill:none;stroke:#c8c8c8;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.85098039;display:inline;enable-background:new"
- d="m 104,121.5 14,0"
+ style="display:inline;fill:none;stroke:#c8c8c8;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.85098039;enable-background:new"
+ d="m 104,121.5 h 14"
id="path16004-2-9"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
@@ -88312,23 +86886,23 @@
height="16"
width="16"
id="rect24489-7"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.85098039"
- d="m 342,625.5 14,0"
+ d="m 342,625.5 h 14"
id="path16004"
inkscape:connector-curvature="0"
transform="translate(-238,-508)"
sodipodi:nodetypes="cc" />
<path
- style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.85098039;display:inline;enable-background:new"
- d="m 104,120.5 14,0"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.85098039;enable-background:new"
+ d="m 104,120.5 h 14"
id="path16004-7"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
- style="fill:#c6cbd2;fill-opacity:1;stroke:#c8c8c8;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.85098039;display:inline;enable-background:new"
- d="m 104,118.5 14,0"
+ style="display:inline;fill:#c6cbd2;fill-opacity:1;stroke:#c8c8c8;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.85098039;enable-background:new"
+ d="m 104,118.5 h 14"
id="path16004-2"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
@@ -88337,7 +86911,7 @@
id="ICON_LINE_DATA">
<path
id="path16893"
- style="fill:none;stroke:#000000;stroke-width:0.87399995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:0.87399995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
d="m 348.62424,478.9785 -2.79722,2.25264 c -0.45164,0.43278 -2.06766,1.48999 -2.83488,3.34099 -0.70812,2.10437 -1.91584,2.91305 -1.91584,2.91305 l 0.6563,0.74552 c 0,0 0.95526,-1.09547 3.13241,-1.53112 1.93333,-0.52639 3.65608,-2.44913 3.65608,-2.44913 l 2.68203,-2.62741"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc" />
@@ -88345,11 +86919,11 @@
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0"
d="m 348.55771,479.10238 -2.72231,2.19232 c -0.43955,0.42119 -2.0123,1.45009 -2.75897,3.25153 -0.68915,2.048 -1.86454,2.83504 -1.86454,2.83504 l 0.63873,0.72555 c 0,0 0.92968,-1.06614 3.04853,-1.49013 1.88155,-0.51228 3.33445,-2.20812 3.57503,-2.32453 l 2.52591,-2.50648"
- style="fill:url(#linearGradient17026);fill-opacity:1;stroke:none;display:inline;enable-background:new"
+ style="display:inline;fill:url(#linearGradient17026);fill-opacity:1;stroke:none;enable-background:new"
id="path16897" />
<path
id="path16907"
- style="fill:url(#linearGradient17022);fill-opacity:1;stroke:none;display:inline;enable-background:new"
+ style="display:inline;fill:url(#linearGradient17022);fill-opacity:1;stroke:none;enable-background:new"
d="m 348.39209,479.42958 -2.52447,2.03299 c -0.4076,0.39058 -1.86605,1.34471 -2.55845,3.01522 -0.63908,1.89917 -1.72904,2.62901 -1.72904,2.62901 l 0.59231,0.67282 c 0,0 0.86211,-0.98866 2.82697,-1.38183 1.74481,-0.47506 3.31522,-2.1556 3.31522,-2.1556 l 2.66283,-2.30087"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc" />
@@ -88358,15 +86932,15 @@
inkscape:connector-curvature="0"
id="path42945"
d="m 356.4118,471.99599 -8.85401,6.78865 m 0,0 c 0.48204,0.79328 2.52273,3.35178 3.70101,3.87765 m 0,0 5.60266,-5.62151"
- style="fill:none;stroke:#000000;stroke-width:1.05365074px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline;enable-background:new" />
+ style="display:inline;fill:none;stroke:#000000;stroke-width:1.05365074px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path42949"
d="m 356.83119,471.7858 -9.22534,7.0573 c 0.35109,1.06864 2.63524,3.37319 3.7137,3.72187 l 5.84295,-5.72212 c 0,0 -0.0685,-1.274 -0.33131,-5.05705 z"
- style="fill:url(#linearGradient17018);fill-opacity:1;stroke:none;display:inline;enable-background:new" />
+ style="display:inline;fill:url(#linearGradient17018);fill-opacity:1;stroke:none;enable-background:new" />
<path
- style="fill:url(#linearGradient17014);fill-opacity:1;stroke:none;display:inline;enable-background:new"
+ style="display:inline;fill:url(#linearGradient17014);fill-opacity:1;stroke:none;enable-background:new"
d="m 356.93013,474.76525 c 3.9e-4,3.18201 -3.54751,10.33668 -9.15362,4.50809 0.22597,-0.4981 8.93557,-6.84627 8.93557,-6.84627 0.11742,0.85263 0.1517,1.2913 0.21806,2.33818 z"
id="path43017"
inkscape:connector-curvature="0"
@@ -88376,11 +86950,11 @@
inkscape:connector-curvature="0"
id="path42981"
d="m 345.11258,484.70023 c 1.615,-1.38333 1.89187,-1.62391 1.89187,-1.62391"
- style="fill:none;stroke:#000000;stroke-width:0.73395383;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:0.73395383;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
inkscape:transform-center-y="0.24985078"
inkscape:transform-center-x="0.0087216242" />
<path
- style="fill:none;stroke:#000000;stroke-width:0.48930255;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:0.48930255;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
d="m 341.55701,487.70395 c 1.57524,-1.41883 3.88653,-3.26666 3.88653,-3.26666"
id="path16832"
inkscape:connector-curvature="0"
@@ -88389,8 +86963,8 @@
<g
id="ICON_MOD_WIREFRAME">
<path
- style="fill:url(#linearGradient17079);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 307.67222,254.4997 6,3e-4 0,-11 -6,-3e-4 m 0,2.45891 3.65084,0 0,6.10992 -3.71241,0"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient17079);fill-opacity:1;fill-rule:nonzero;stroke:#0b1728;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 307.67222,254.4997 6,3e-4 v -11 l -6,-3e-4 m 0,2.45891 h 3.65084 v 6.10992 h -3.71241"
id="path27671-4-9-2"
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0" />
@@ -88400,14 +86974,14 @@
height="16"
width="16"
id="rect27661-8"
- style="opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<g
transform="translate(63.83606,-18.99123)"
style="opacity:0.55"
id="g27669-35">
<path
- style="fill:url(#linearGradient17057);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.87159598;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 243.50439,274.05251 -6.46154,-3.3e-4 0,-12.12435 6.46154,3.3e-4"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient17057);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.87159598;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 243.50439,274.05251 -6.46154,-3.3e-4 v -12.12435 l 6.46154,3.3e-4"
id="path27671-4"
sodipodi:nodetypes="cccc"
transform="matrix(0.9285719,0,0,0.9072647,16.387388,24.853058)"
@@ -88416,7 +86990,7 @@
sodipodi:nodetypes="ccccc"
id="path27673-3"
d="m 243.50439,272.9503 -5.38461,-3.3e-4 0.001,-4.9503 -0.001,-4.96963 5.38461,3.3e-4"
- style="fill:none;stroke:#ffffff;stroke-width:1.08949494;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1.08949494;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
transform="matrix(0.9285719,0,0,0.9072647,16.387388,24.853058)"
inkscape:connector-curvature="0" />
</g>
@@ -88426,14 +87000,14 @@
height="16"
width="16"
id="rect27661-8-9"
- style="opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<g
transform="translate(63.83606,-18.991232)"
- style="opacity:0.55;display:inline;enable-background:new"
+ style="display:inline;opacity:0.55;enable-background:new"
id="g27669-35-7">
<path
- style="fill:url(#linearGradient17059);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.87159598;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 243.50439,274.05251 -6.46154,-3.3e-4 0,-12.12435 6.46154,3.3e-4"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient17059);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.87159598;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 243.50439,274.05251 -6.46154,-3.3e-4 v -12.12435 l 6.46154,3.3e-4"
id="path27671-4-9"
sodipodi:nodetypes="cccc"
transform="matrix(0.9285719,0,0,0.9072647,16.387388,24.853058)"
@@ -88442,7 +87016,7 @@
sodipodi:nodetypes="ccccc"
id="path27673-3-9"
d="m 243.50439,272.9503 -5.38461,-3.3e-4 0.001,-4.9503 -0.001,-4.96963 5.38461,3.3e-4"
- style="fill:none;stroke:#ffffff;stroke-width:1.08949494;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1.08949494;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
transform="matrix(0.9285719,0,0,0.9072647,16.387388,24.853058)"
inkscape:connector-curvature="0" />
</g>
@@ -88450,47 +87024,47 @@
sodipodi:nodetypes="ccccc"
id="path27673-3-9-1"
d="m 307.71974,244.47852 5,3e-4 -9.3e-4,4.49123 9.3e-4,4.50877 -5,-3e-4"
- style="opacity:0.55;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.55;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<g
- transform="matrix(0.7071068,-0.7071068,0.7071068,0.7071068,63.47957,113.52244)"
+ transform="rotate(-45,168.77349,-19.865405)"
style="display:inline;enable-background:new"
id="g27675-8">
<path
sodipodi:nodetypes="cc"
id="path27679-6"
d="m 72.837944,271.51561 7.071067,-7.07107"
- style="opacity:0.1;fill:none;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:none;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
d="m 71.600508,272.3995 0.707107,-0.7071 m 2.121319,-2.12133 0.707107,-0.7071 m 2.121321,-2.12133 0.707107,-0.7071 m 2.121319,-2.12133 0.707107,-0.7071"
- style="opacity:0.75;fill:none;stroke:#28220b;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.75;fill:none;stroke:#28220b;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
id="path42388-4"
inkscape:connector-curvature="0" />
<path
id="path42359-16"
- style="fill:none;stroke:#ffe991;stroke-width:1.19999993;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffe991;stroke-width:1.19999993;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 71.600508,272.3995 0.707107,-0.7071 m 2.121319,-2.12133 0.707107,-0.7071 m 2.121321,-2.12133 0.707107,-0.7071 m 2.121319,-2.12133 0.707107,-0.7071"
inkscape:connector-curvature="0" />
</g>
<g
- transform="matrix(0.7071068,-0.7071068,0.7071068,0.7071068,63.47957,113.52244)"
+ transform="rotate(-45,168.77349,-19.865405)"
style="display:inline;enable-background:new"
id="g27675-8-5">
<path
sodipodi:nodetypes="cc"
id="path27679-6-3"
d="m 72.837944,271.51561 7.071067,-7.07107"
- style="opacity:0.1;fill:none;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:none;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
d="m 71.600508,272.3995 0.707107,-0.7071 m 2.121319,-2.12133 0.707107,-0.7071 m 2.121321,-2.12133 0.707107,-0.7071 m 2.121319,-2.12133 0.707107,-0.7071"
- style="opacity:0.75;fill:none;stroke:#28220b;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.75;fill:none;stroke:#28220b;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
id="path42388-4-5"
inkscape:connector-curvature="0" />
<path
id="path42359-16-5"
- style="fill:none;stroke:#ffe991;stroke-width:1.19999993;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffe991;stroke-width:1.19999993;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 71.600508,272.3995 0.707107,-0.7071 m 2.121319,-2.12133 0.707107,-0.7071 m 2.121321,-2.12133 0.707107,-0.7071 m 2.121319,-2.12133 0.707107,-0.7071"
inkscape:connector-curvature="0" />
</g>
@@ -88510,12 +87084,12 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path53378"
d="m 166.5,949.86212 c -0.0525,5e-5 -0.448,0 -0.5,0 -1.9864,0 -2.6748,6.27454 -3.5,10.99914 -1,-5.50278 -4.01655,-5.48468 -5,10e-6 -0.95862,-2.50093 -2.5,-2.50094 -3.5,-10e-6 -0.0346,2e-4 -0.4699,0.002 -0.5,0"
- style="color:#000000;fill:none;stroke:url(#linearGradient17013);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17013);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cscccc" />
<path
sodipodi:nodetypes="cscccc"
- style="color:#000000;fill:none;stroke:url(#linearGradient17015);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 166.5,949.86212 -0.5,0 c -1.98887,0 -2.6748,6.30855 -3.5,11.03315 -0.98438,-5.50278 -3.99875,-5.52473 -5,-0.034 -0.95299,-2.47883 -2.5,-2.50002 -3.5,9.1e-4 -0.0346,2e-4 -0.4699,0.002 -0.5,0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17015);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 166.5,949.86212 H 166 c -1.98887,0 -2.6748,6.30855 -3.5,11.03315 -0.98438,-5.50278 -3.99875,-5.52473 -5,-0.034 -0.95299,-2.47883 -2.5,-2.50002 -3.5,9.1e-4 -0.0346,2e-4 -0.4699,0.002 -0.5,0"
id="path53380"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -88523,7 +87097,7 @@
inkscape:connector-curvature="0" />
</g>
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect16035-7-6"
width="16"
height="16"
@@ -88539,8 +87113,8 @@
id="g6562">
<path
sodipodi:nodetypes="cccc"
- style="color:#000000;fill:none;stroke:#001128;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 61.5,949.86218 -1,0 -11,10.99986 -1,0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#001128;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 61.5,949.86218 h -1 l -11,10.99986 h -1"
id="path3948"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -88552,12 +87126,12 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path3946"
- d="m 61.5,949.86218 -1,0 -11,10.99986 -1,0"
- style="color:#000000;fill:none;stroke:url(#linearGradient17017);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 61.5,949.86218 h -1 l -11,10.99986 h -1"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17017);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cccc" />
</g>
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect18813-7"
width="16"
height="16"
@@ -88570,8 +87144,8 @@
transform="translate(84.027695,-748.47989)">
<path
sodipodi:nodetypes="cccc"
- style="color:#000000;fill:none;stroke:#001128;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 40.5,949.8622 -6,0 0,11 -7,0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#001128;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 40.5,949.8622 h -6 v 11 h -7"
id="path6545"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -88583,11 +87157,11 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path6532"
- d="m 40.5,949.8622 -6,0 0,11 -6.97,0"
- style="color:#000000;fill:none;stroke:url(#linearGradient17019);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 40.5,949.8622 h -6 v 11 h -6.97"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17019);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cccc" />
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect18813-9"
width="16"
height="16"
@@ -88606,13 +87180,13 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path4555"
- d="m 61.5,949.86218 -0.5,0 c -4.95,6.5 -7.066811,10.99986 -12,10.99986 l -0.5,0"
- style="color:#000000;fill:none;stroke:url(#linearGradient17021);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 61.5,949.86218 H 61 c -4.95,6.5 -7.066811,10.99986 -12,10.99986 h -0.5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17021);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cccc" />
<path
sodipodi:nodetypes="cccc"
- style="color:#000000;fill:none;stroke:url(#linearGradient17023);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 61.5,949.86218 -0.5,0 c -4.95,6.5 -7.053239,10.99986 -12,10.99986 l -0.5,0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17023);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 61.5,949.86218 H 61 c -4.95,6.5 -7.053239,10.99986 -12,10.99986 h -0.5"
id="path4557"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -88625,7 +87199,7 @@
height="16"
width="16"
id="rect4559"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
</g>
<g
style="display:inline;enable-background:new"
@@ -88635,8 +87209,8 @@
id="g7691">
<path
sodipodi:nodetypes="cccc"
- style="color:#000000;fill:none;stroke:url(#linearGradient17025);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 61.5,949.86218 -0.5,0 c -2.95,5.5 -7.066811,10.99986 -12,10.99986 l -0.5,0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17025);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 61.5,949.86218 H 61 c -2.95,5.5 -7.066811,10.99986 -12,10.99986 h -0.5"
id="path7693"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -88648,12 +87222,12 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path7695"
- d="m 61.5,949.86218 -0.5,0 c -3,5.5 -7.053239,10.99986 -12,10.99986 l -0.5,0"
- style="color:#000000;fill:none;stroke:url(#linearGradient17027);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 61.5,949.86218 H 61 c -3,5.5 -7.053239,10.99986 -12,10.99986 h -0.5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17027);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cccc" />
</g>
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect7697"
width="16"
height="16"
@@ -88661,13 +87235,13 @@
y="947.36218" />
<path
inkscape:connector-curvature="0"
- style="color:#000000;fill:none;stroke:#001d1e;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 50,949.3622 0,1 2,0 0,1 -1,0 0,1 1,0 0,-0.75 1,0 0,-1.5 -1,0 0,-0.75 -2,0 z m 1,3 -1,0 0,1 0,1 3,0 0,-1 -2,0 0,-1 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#001d1e;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 50,949.3622 v 1 h 2 v 1 h -1 v 1 h 1 v -0.75 h 1 v -1.5 h -1 v -0.75 z m 1,3 h -1 v 1 1 h 3 v -1 h -2 z"
id="path15794" />
<path
id="path41073-2-6"
- d="m 50,949.3622 0,1 2,0 0,1 -1,0 0,1 1,0 0,-0.75 1,0 0,-1.5 -1,0 0,-0.75 -2,0 z m 1,3 -1,0 0,1 0,1 3,0 0,-1 -2,0 0,-1 z"
- style="color:#000000;fill:#58ced4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 50,949.3622 v 1 h 2 v 1 h -1 v 1 h 1 v -0.75 h 1 v -1.5 h -1 v -0.75 z m 1,3 h -1 v 1 1 h 3 v -1 h -2 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#58ced4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<g
@@ -88682,13 +87256,13 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path7711"
- d="m 61.5,949.86218 -0.5,0 c -2.95,8.5 -7.066811,10.99986 -12,10.99986 l -0.5,0"
- style="color:#000000;fill:none;stroke:#0e1e00;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 61.5,949.86218 H 61 c -2.95,8.5 -7.066811,10.99986 -12,10.99986 h -0.5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0e1e00;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cccc" />
<path
sodipodi:nodetypes="cccc"
- style="color:#000000;fill:none;stroke:url(#linearGradient17029);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 61.5,949.86218 -0.5,0 c -2.95,8.5 -7.053239,10.99986 -12,10.99986 l -0.5,0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17029);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 61.5,949.86218 H 61 c -2.95,8.5 -7.053239,10.99986 -12,10.99986 h -0.5"
id="path7713"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -88701,16 +87275,16 @@
height="16"
width="16"
id="rect7715"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
- style="color:#000000;fill:none;stroke:#0e1e00;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 50,949.3622 0,1 2,0 0,1 1,0 0,-1.25 -1,0 0,-0.75 -2,0 z m 2,2 -1,0 0,1 1,0 0,-1 z m 0,1 0,1 -2,0 0,1 2,0 0,-0.75 1,0 0,-1.25 -1,0 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0e1e00;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 50,949.3622 v 1 h 2 v 1 h 1 v -1.25 h -1 v -0.75 z m 2,2 h -1 v 1 h 1 z m 0,1 v 1 h -2 v 1 h 2 v -0.75 h 1 v -1.25 z"
id="path15813" />
<path
id="path41075-5-1"
- d="m 50,949.3622 0,1 2,0 0,1 1,0 0,-1.25 -1,0 0,-0.75 -2,0 z m 2,2 -1,0 0,1 1,0 0,-1 z m 0,1 0,1 -2,0 0,1 2,0 0,-0.75 1,0 0,-1.25 -1,0 z"
- style="color:#000000;fill:#84d458;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 50,949.3622 v 1 h 2 v 1 h 1 v -1.25 h -1 v -0.75 z m 2,2 h -1 v 1 h 1 z m 0,1 v 1 h -2 v 1 h 2 v -0.75 h 1 v -1.25 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#84d458;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<g
@@ -88721,8 +87295,8 @@
id="g15888">
<path
sodipodi:nodetypes="cccc"
- style="color:#000000;fill:none;stroke:url(#linearGradient17031);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 61.5,949.86218 -0.5,0 c -0.95,6.5 -4.149996,10.99986 -12,10.99986 l -0.5,0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17031);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 61.5,949.86218 H 61 c -0.95,6.5 -4.149996,10.99986 -12,10.99986 h -0.5"
id="path15890"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -88734,12 +87308,12 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path15892"
- d="m 61.5,949.86218 -0.5,0 c -0.95,6.5 -3.959647,10.99986 -12,10.99986 l -0.5,0"
- style="color:#000000;fill:none;stroke:url(#linearGradient17033);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 61.5,949.86218 H 61 c -0.95,6.5 -3.959647,10.99986 -12,10.99986 h -0.5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17033);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cccc" />
</g>
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect15894"
width="16"
height="16"
@@ -88747,13 +87321,13 @@
y="947.36218" />
<path
inkscape:connector-curvature="0"
- style="color:#000000;fill:none;stroke:#282100;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 50,950.3622 0,3 1,0 1,0 0,1 -2,0 0,1 2,0 0,-0.75 1,0 0,-1.5 -1,0 0,-0.75 -1,0 0,-1 2,0 0,-1 -2,0 -1,0 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#282100;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 50,950.3622 v 3 h 1 1 v 1 h -2 v 1 h 2 v -0.75 h 1 v -1.5 h -1 v -0.75 h -1 v -1 h 2 v -1 h -2 z"
id="path15939" />
<path
id="path41079-6-0"
- d="m 50,950.3622 0,3 1,0 1,0 0,1 -2,0 0,1 2,0 0,-0.75 1,0 0,-1.5 -1,0 0,-0.75 -1,0 0,-1 2,0 0,-1 -2,0 -1,0 z"
- style="color:#000000;fill:#dacf2a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 50,950.3622 v 3 h 1 1 v 1 h -2 v 1 h 2 v -0.75 h 1 v -1.5 h -1 v -0.75 h -1 v -1 h 2 v -1 h -2 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#dacf2a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
<g
@@ -88768,13 +87342,13 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path15965"
- d="m 61.5,949.86218 -0.5,0 c -0.95,9.5 -1.956865,10.99986 -12,10.99986 l -0.5,0"
- style="color:#000000;fill:none;stroke:url(#linearGradient17035);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 61.5,949.86218 H 61 c -0.95,9.5 -1.956865,10.99986 -12,10.99986 h -0.5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17035);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cccc" />
<path
sodipodi:nodetypes="cccc"
- style="color:#000000;fill:none;stroke:url(#linearGradient17038);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 61.5,949.86218 -0.5,0 c -0.95,8.5 -1.088169,10.99986 -12,10.99986 l -0.5,0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17038);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 61.5,949.86218 H 61 c -0.95,8.5 -1.088169,10.99986 -12,10.99986 h -0.5"
id="path15967"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -88787,7 +87361,7 @@
height="16"
width="16"
id="rect15969"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
</g>
<g
style="display:inline;enable-background:new"
@@ -88797,8 +87371,8 @@
id="g16029">
<path
sodipodi:nodetypes="cccc"
- style="color:#000000;fill:none;stroke:url(#linearGradient17040);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 61,949.86218 -0.5,0 c 0.05,1.5 0.45,9.5 -11.5,10.99986 l -0.5,0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17040);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 61,949.86218 h -0.5 c 0.05,1.5 0.45,9.5 -11.5,10.99986 h -0.5"
id="path16031"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -88810,12 +87384,12 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path16033"
- d="m 61,949.86218 -0.5,0 c 0.05,1.5 0.45,9.5 -11.5,10.99986 l -0.5,0"
- style="color:#000000;fill:none;stroke:url(#linearGradient17042);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 61,949.86218 h -0.5 c 0.05,1.5 0.45,9.5 -11.5,10.99986 h -0.5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17042);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cccc" />
</g>
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect16035"
width="16"
height="16"
@@ -88828,7 +87402,7 @@
id="ICON_IPO_ELASTIC">
<path
sodipodi:nodetypes="ccsssssc"
- style="color:#000000;fill:none;stroke:url(#linearGradient17044);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17044);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 166.5,949.86126 c -0.0525,5e-5 -0.498,8.6e-4 -0.55,8.6e-4 0,0 -0.47718,10.99969 -2.50296,10.99969 -1.91589,0 -0.93193,-6.00055 -2.94704,-6.00055 -1.53921,0 -1.50766,3 -3,3 -1.03656,0 -0.99963,-2 -2,-2 -0.66974,0 -0.90046,1.00059 -1.5,1.00059 -0.0346,0 -0.4699,10e-4 -0.5,-8.7e-4"
id="path5578"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -88842,10 +87416,10 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path16468"
d="m 166.5,949.86126 c -0.0525,5e-5 -0.498,8.6e-4 -0.55,8.6e-4 0,0 -0.47718,10.99969 -2.50296,10.99969 -1.91589,0 -0.93193,-6.00055 -2.94704,-6.00055 -1.53921,0 -1.50766,3 -3,3 -1.03656,0 -0.99963,-2 -2,-2 -0.66974,0 -0.90046,1.00059 -1.5,1.00059 -0.0346,0 -0.4699,10e-4 -0.5,-8.7e-4"
- style="color:#000000;fill:none;stroke:url(#linearGradient17046);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17046);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccsssssc" />
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect16035-7"
width="16"
height="16"
@@ -88862,13 +87436,13 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path16586"
- d="m 166.5,949.86212 -0.55,0 c -1.95,6.49912 -3.14103,10.49912 -5.95,10.49912 -2.23607,0 -4.02976,-3.49912 -6,-3.49912 l -0.5,0"
- style="color:#000000;fill:none;stroke:url(#linearGradient17048);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 166.5,949.86212 h -0.55 c -1.95,6.49912 -3.14103,10.49912 -5.95,10.49912 -2.23607,0 -4.02976,-3.49912 -6,-3.49912 h -0.5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17048);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccscc" />
<path
sodipodi:nodetypes="ccscc"
- style="color:#000000;fill:none;stroke:url(#linearGradient17050);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 166.5,949.86212 -0.55,0 c -1.95,6.49912 -3.14103,10.49912 -5.95,10.49912 -2.23607,0 -4.02976,-3.49912 -6,-3.49912 l -0.5,0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17050);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 166.5,949.86212 h -0.55 c -1.95,6.49912 -3.14103,10.49912 -5.95,10.49912 -2.23607,0 -4.02976,-3.49912 -6,-3.49912 h -0.5"
id="path16580"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -88880,7 +87454,7 @@
height="16"
width="16"
id="rect16582"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
</g>
<g
style="display:inline;enable-background:new"
@@ -88894,13 +87468,13 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path4472"
- d="m 61.5,949.86218 -0.5,0 c -0.95,4.5 -3.05,10.5 -12,10.99986 l -0.5,0"
- style="color:#000000;fill:none;stroke:url(#linearGradient17052);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 61.5,949.86218 H 61 c -0.95,4.5 -3.05,10.5 -12,10.99986 h -0.5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17052);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cccc" />
<path
sodipodi:nodetypes="cccc"
- style="color:#000000;fill:none;stroke:url(#linearGradient17054);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 61.5,949.86218 -0.5,0 c -0.95,5.5 -4.05,10.5 -12,10.99986 l -0.5,0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17054);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 61.5,949.86218 H 61 c -0.95,5.5 -4.05,10.5 -12,10.99986 h -0.5"
id="path4474"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -88913,15 +87487,15 @@
height="16"
width="16"
id="rect4477"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
id="path16306"
- d="m 50,950.3622 0,3 1,0 1,0 0,2 1,0 0,-4 -1,0 0,1 -1,0 0,-2 -1,0 z"
- style="color:#000000;fill:none;stroke:#1b1f09;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m 50,950.3622 v 3 h 1 1 v 2 h 1 v -4 h -1 v 1 h -1 v -2 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#1b1f09;stroke-width:1.79999995;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
- style="color:#000000;fill:#b5d034;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 50,950.3622 0,3 1,0 1,0 0,2 1,0 0,-4 -1,0 0,1 -1,0 0,-2 -1,0 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#b5d034;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 50,950.3622 v 3 h 1 1 v 2 h 1 v -4 h -1 v 1 h -1 v -2 z"
id="path41067-3-6"
inkscape:connector-curvature="0" />
</g>
@@ -88937,13 +87511,13 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path20299-51-2"
- d="m 61.5,949.86218 -0.55,0 c -4.95,6.5 -5.985561,10.99986 -11.95,10.99986 l -0.5,0"
- style="color:#000000;fill:none;stroke:url(#linearGradient17056);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 61.5,949.86218 h -0.55 c -4.95,6.5 -5.985561,10.99986 -11.95,10.99986 h -0.5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17056);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cccc" />
<path
sodipodi:nodetypes="cccc"
- style="color:#000000;fill:none;stroke:url(#linearGradient17058);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 61.5,949.86218 -0.55,0 c -4.95,6.5 -6.003239,10.99986 -11.95,10.99986 l -0.5,0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17058);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 61.5,949.86218 h -0.55 c -4.95,6.5 -6.003239,10.99986 -11.95,10.99986 h -0.5"
id="path20301-63-8"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -88956,18 +87530,18 @@
height="16"
width="16"
id="rect20303-3-3"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
</g>
<g
id="ICON_IPO_EASE_OUT"
- transform="matrix(-1,0,0,-1,467.02769,1162.2412)"
+ transform="rotate(180,233.51384,581.1206)"
style="display:inline;enable-background:new">
<g
id="g20307-1-7">
<path
sodipodi:nodetypes="cccc"
- style="color:#000000;fill:none;stroke:url(#linearGradient17060);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 61.5,949.86218 -0.5,0 c -4.95,6.5 -5.985561,10.99986 -11.95,10.99986 l -0.55,0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17060);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 61.5,949.86218 H 61 c -4.95,6.5 -5.985561,10.99986 -11.95,10.99986 H 48.5"
id="path20309-1-1"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -88979,12 +87553,12 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path20311-8-0"
- d="m 61.5,949.86218 -0.5,0 c -4.95,6.5 -5.971989,10.99986 -11.95,10.99986 l -0.55,0"
- style="color:#000000;fill:none;stroke:url(#linearGradient17062);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 61.5,949.86218 H 61 c -4.95,6.5 -5.971989,10.99986 -11.95,10.99986 H 48.5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17062);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cccc" />
</g>
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect20313-92-1"
width="16"
height="16"
@@ -88992,7 +87566,7 @@
y="947.36218" />
</g>
<g
- transform="matrix(-1,0,0,-1,488.02769,1162.2445)"
+ transform="rotate(180,244.01384,581.12225)"
id="ICON_IPO_EASE_IN_OUT"
style="display:inline;enable-background:new">
<g
@@ -89003,13 +87577,13 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path20319-7-7"
- d="m 61.5,949.86218 -0.5,0 c -6.013721,0 -5.986773,10.99986 -11.95,10.99986 l -0.55,0"
- style="color:#000000;fill:none;stroke:url(#linearGradient17064);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 61.5,949.86218 H 61 c -6.013721,0 -5.986773,10.99986 -11.95,10.99986 H 48.5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17064);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cccc" />
<path
sodipodi:nodetypes="cccc"
- style="color:#000000;fill:none;stroke:url(#linearGradient17066);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 61.5,949.86218 -0.5,0 c -6.013721,0 -5.986773,10.99986 -11.95,10.99986 l -0.55,0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17066);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 61.5,949.86218 H 61 c -6.013721,0 -5.986773,10.99986 -11.95,10.99986 H 48.5"
id="path20321-90-9"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -89022,15 +87596,15 @@
height="16"
width="16"
id="rect20323-5-1"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
</g>
<g
style="display:inline;enable-background:new"
transform="translate(84.027695,-748.48019)"
id="ICON_IPO_BEZIER">
<path
- style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#201308;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 78.565213,960.8622 -8.130425,0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#201308;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 78.565213,960.8622 H 70.434788"
id="path22805-8-4"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
@@ -89038,45 +87612,39 @@
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path22809-2-4"
- d="m 79.49996,960.8622 -9,0"
- style="color:#000000;fill:none;stroke:#c86800;stroke-width:1.20000005;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
+ d="m 79.49996,960.8622 h -9"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#c86800;stroke-width:1.20000005;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
+ <circle
transform="matrix(-0.83333333,0,0,0.83333,9.5,430.86427)"
- d="m -81,636 a 3,3 0 0 1 -3,3 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 3,3 z"
- sodipodi:ry="3"
- sodipodi:rx="3"
- sodipodi:cy="636"
- sodipodi:cx="-84"
id="path22807-1-8"
- style="color:#000000;fill:#462300;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
- sodipodi:type="arc" />
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#462300;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:new"
+ cx="-84"
+ cy="636"
+ r="3" />
<path
inkscape:connector-curvature="0"
id="path22811-6-3"
- d="m 80,959.36217 c 0.554,0 1,0.446 1,1 l 0,1 c 0,0.554 -0.446,1 -1,1 l -1,0 c -0.554,0 -1,-0.446 -1,-1 l 0,-1 c 0,-0.554 0.446,-1 1,-1 l 1,0 z m 0,1 -1,0 0,1 1,0 0,-1 z"
- style="color:#000000;fill:#ff9a2d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ d="m 80,959.36217 c 0.554,0 1,0.446 1,1 v 1 c 0,0.554 -0.446,1 -1,1 h -1 c -0.554,0 -1,-0.446 -1,-1 v -1 c 0,-0.554 0.446,-1 1,-1 z m 0,1 h -1 v 1 h 1 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ff9a2d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:new" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path20449-0-3"
- d="m 72.434783,949.8622 8.130434,0"
- style="color:#000000;fill:none;stroke:#201308;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="m 72.434783,949.8622 h 8.130434"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#201308;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
- style="color:#000000;fill:none;stroke:#c86800;stroke-width:1.20000005;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 72.5,949.8622 9,0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#c86800;stroke-width:1.20000005;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 72.5,949.8622 h 9"
id="path20451-8-0"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
- <path
- sodipodi:type="arc"
- style="color:#000000;fill:#462300;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#462300;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:new"
id="path22736-5-7"
- sodipodi:cx="-84"
- sodipodi:cy="636"
- sodipodi:rx="3"
- sodipodi:ry="3"
- d="m -81,636 a 3,3 0 0 1 -3,3 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 3,3 z"
- transform="matrix(0.83333333,0,0,0.83333,142.49996,419.86427)" />
+ transform="matrix(0.83333333,0,0,0.83333,142.49996,419.86427)"
+ cx="-84"
+ cy="636"
+ r="3" />
<path
inkscape:connector-curvature="0"
inkscape:export-ydpi="90"
@@ -89084,11 +87652,11 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path20453-7-1"
d="m 82.5,949.86218 c -0.12884,0 -0.37404,-4.1e-4 -0.5,0 -5.995321,0.0193 -5.998907,10.99986 -12,10.99986 -0.155311,0 -0.33371,0 -0.5,0"
- style="color:#000000;fill:none;stroke:#0e1e00;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0e1e00;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cssc" />
<path
sodipodi:nodetypes="cssc"
- style="color:#000000;fill:none;stroke:url(#linearGradient17068);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient17068);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 82.5,949.86218 c -0.12884,0 -0.37404,-4.1e-4 -0.5,0 -6.02657,0.0194 -5.998907,10.99986 -12,10.99986 -0.155311,0 -0.33371,0 -0.5,0"
id="path20457-48-5"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -89101,23 +87669,23 @@
height="16"
width="16"
id="rect20459-9-9"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<path
- style="color:#000000;fill:#ff9a2d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
- d="m 71.99996,948.36217 c -0.554,0 -1,0.446 -1,1 l 0,1 c 0,0.554 0.446,1 1,1 l 1,0 c 0.554,0 1,-0.446 1,-1 l 0,-1 c 0,-0.554 -0.446,-1 -1,-1 l -1,0 z m 0,1 1,0 0,1 -1,0 0,-1 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ff9a2d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:new"
+ d="m 71.99996,948.36217 c -0.554,0 -1,0.446 -1,1 v 1 c 0,0.554 0.446,1 1,1 h 1 c 0.554,0 1,-0.446 1,-1 v -1 c 0,-0.554 -0.446,-1 -1,-1 z m 0,1 h 1 v 1 h -1 z"
id="rect22555-0-9"
inkscape:connector-curvature="0" />
<path
id="path22295-8"
- d="m 71.49996,949.86216 0,-0.5014 c 0,-0.2493 0.196575,-0.4986 0.50004,-0.4986 l 0.49996,0"
- style="fill:none;stroke:#f3c59d;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;display:inline;enable-background:new"
+ d="m 71.49996,949.86216 v -0.5014 c 0,-0.2493 0.196575,-0.4986 0.50004,-0.4986 h 0.49996"
+ style="display:inline;fill:none;stroke:#f3c59d;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0"
- style="color:#000000;fill:none;stroke:#f3c59d;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
- d="m 78.49996,960.86216 0,-0.5014 c 0,-0.2493 0.196575,-0.4986 0.50004,-0.4986 l 0.49996,0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#f3c59d;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
+ d="m 78.49996,960.86216 v -0.5014 c 0,-0.2493 0.196575,-0.4986 0.50004,-0.4986 h 0.49996"
id="path5059" />
</g>
<g
@@ -89130,7 +87698,7 @@
height="16"
width="16"
id="rect22048-0-1-2-2"
- style="opacity:0.01000001;fill:#999999;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#999999;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.89999998;marker:none;enable-background:accumulate" />
<g
id="g17930-6-4">
<rect
@@ -89139,28 +87707,28 @@
height="6.0211244"
width="9.0000076"
id="rect22050-0-1-6-2"
- style="opacity:0.6;fill:#ffd6aa;fill-opacity:1;fill-rule:evenodd;stroke:#2b1600;stroke-width:0.40000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#ffd6aa;fill-opacity:1;fill-rule:evenodd;stroke:#2b1600;stroke-width:0.40000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
sodipodi:nodetypes="ccccccccc"
id="path22157-2-9-1-2"
- d="m 278.90735,308.28551 0,0.5 2.5,2.5 0.5,0 2.5,-2.5 0,-0.5 -2.5,-2.5 -0.5,0 -2.5,2.5 z"
- style="fill:none;stroke:#552c00;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 278.90735,308.28551 v 0.5 l 2.5,2.5 h 0.5 l 2.5,-2.5 v -0.5 l -2.5,-2.5 h -0.5 z"
+ style="fill:none;stroke:#552c00;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
style="fill:#e98316;fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 279.15735,308.53551 2.5,2.5 2.5,-2.5 -2.5,-2.5 -2.5,2.5 z"
+ d="m 279.15735,308.53551 2.5,2.5 2.5,-2.5 -2.5,-2.5 z"
id="path22159-1-9-5-8"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
id="path22161-4-8-9-9"
d="m 279.80239,308.53551 1.85496,-1.83839 1.85496,1.83839 -1.85496,1.86049 z"
- style="fill:none;stroke:url(#linearGradient17904-1-8);stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:url(#linearGradient17904-1-8);stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
- style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 287.69919,308.32103 0,0.5 2.5,2.5 0.5,0 2.5,-2.5 0,-0.5 -2.5,-2.5 -0.5,0 -2.5,2.5 z"
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 287.69919,308.32103 v 0.5 l 2.5,2.5 h 0.5 l 2.5,-2.5 v -0.5 l -2.5,-2.5 h -0.5 z"
id="path22208-0-8-1-5"
sodipodi:nodetypes="ccccccccc"
inkscape:connector-curvature="0" />
@@ -89168,11 +87736,11 @@
sodipodi:nodetypes="ccccc"
id="path22212-5-4-4-6"
d="m 287.94919,308.57103 2.5,2.5 2.5,-2.5 -2.5,-2.5 z"
- style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccc"
- style="fill:none;stroke:url(#linearGradient17893-5-2);stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:url(#linearGradient17893-5-2);stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 288.58981,308.57103 1.85938,-1.83594 1.85547,1.83594 -1.85547,1.875 z"
id="path22214-3-8-8-9"
inkscape:connector-curvature="0" />
@@ -89182,107 +87750,107 @@
id="g36761-1-3"
style="display:inline;enable-background:new">
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 223,243 0,10 1,0 0,-1 1,0 1,0 0,2 1,0 0,1 1,0 0,-1 1,0 0,-2 -1,0 0,-2 1,0 1,0 0,-1 -1,0 0,-1 -1,0 0,-1 -1,0 0,-1 -1,0 0,-1 -1,0 0,-1 -1,0 0,-1 -1,0 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
+ d="m 223,243 v 10 h 1 v -1 h 1 1 v 2 h 1 v 1 h 1 v -1 h 1 v -2 h -1 v -2 h 1 1 v -1 h -1 v -1 h -1 v -1 h -1 v -1 h -1 v -1 h -1 v -1 h -1 v -1 z"
id="path36763-5-3"
inkscape:connector-curvature="0" />
<g
id="g36765-2-8"
- style="fill:#1a1a1a;display:inline;enable-background:new"
- transform="translate(5,-6.0000002e-7)">
+ style="display:inline;fill:#1a1a1a;enable-background:new"
+ transform="translate(5)">
<rect
y="243"
x="218"
height="10"
width="1"
id="rect36767-7-7"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
y="244"
x="219"
height="1"
width="1"
id="rect36769-6-7"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
y="245"
x="220"
height="1"
width="1"
id="rect36771-1-5"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
y="246"
x="221"
height="1"
width="1"
id="rect36773-4-5"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
y="247"
x="222"
height="1"
width="1"
id="rect36775-2-3"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
y="248"
x="223"
height="1"
width="1"
id="rect36777-3-2"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
y="249"
x="224"
height="1"
width="1.0000017"
id="rect36779-2-6"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
y="252"
x="219"
height="1"
width="1"
id="rect36781-2-4"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
y="251"
x="220"
height="1"
width="1"
id="rect36783-1-4"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
y="252"
x="221"
height="2"
width="1"
id="rect36785-6-6"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
y="250"
x="222.25"
height="2"
width="0.75"
id="rect36787-8-0"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
y="252"
x="223"
height="1.9999931"
width="1"
id="rect36789-5-9"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
y="254"
x="222"
height="1.0000006"
width="1.5"
id="rect36791-7-7"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
<rect
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
id="rect36793-6-2"
width="1.5"
height="1"
@@ -89296,7 +87864,7 @@
id="ICON_NLA_PUSHDOWN"
transform="translate(-231.54762,126.06411)">
<rect
- style="opacity:0;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;enable-background:accumulate"
id="rect44079-0"
width="16"
height="16"
@@ -89314,14 +87882,14 @@
sodipodi:nodetypes="ccc"
id="path43450-7"
d="m 324.45461,83.386633 4.25,4.244369 4.25,-4.244369"
- style="fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
<g
- transform="matrix(-1,0,0,-1,655.70461,184.631)"
+ transform="rotate(180,327.8523,92.3155)"
id="g43442-3">
<path
- style="fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="M 331.25,80.25 327,76.005631 322.75,80.25"
id="path42666-0"
sodipodi:nodetypes="ccc"
@@ -89329,8 +87897,8 @@
</g>
</g>
<path
- style="fill:none;stroke:url(#linearGradient16705);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 333.4295,103.09358 -4.5,4.5 -0.5,0 -3.87222,-3.79689"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient16705);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 333.4295,103.09358 -4.5,4.5 h -0.5 l -3.87222,-3.79689"
id="path44952-5"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
@@ -89348,14 +87916,14 @@
sodipodi:nodetypes="ccc"
id="path43450-7-3"
d="m 324.45461,83.386633 4.25,4.244369 4.25,-4.244369"
- style="fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:none;stroke:#000000;stroke-width:3.5999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
<g
- transform="matrix(-1,0,0,-1,655.70461,184.631)"
+ transform="rotate(180,327.8523,92.3155)"
id="g43442-3-7">
<path
- style="fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#dcdcdc;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="M 331.25,80.25 327,76.005631 322.75,80.25"
id="path42666-0-5"
sodipodi:nodetypes="ccc"
@@ -89363,39 +87931,39 @@
</g>
</g>
<path
- style="fill:none;stroke:url(#linearGradient16728);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 333.4295,103.09358 -4.5,4.5 -0.5,0 -3.87222,-3.79689"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient16728);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 333.4295,103.09358 -4.5,4.5 h -0.5 l -3.87222,-3.79689"
id="path44952-5-9"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
</g>
</g>
<g
- transform="translate(21,0)"
+ transform="translate(21)"
style="display:inline;enable-background:new"
id="ICON_LOOPSEL">
<g
transform="translate(111,-158)"
id="g35778-7"
- style="opacity:0.55;display:inline">
+ style="display:inline;opacity:0.55">
<rect
y="336"
x="-64"
height="16"
width="16"
id="rect35780-2"
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<g
id="g35782-9"
- transform="translate(1,0)">
+ transform="translate(1)">
<g
id="g35785-7"
transform="translate(-386,446.5)">
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
- style="fill:#552200;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 329.5,-108.25 -5.5,2 0,6.75 5.5,3 5.5,-3 0,-6.75 -5.5,-2 z"
+ style="fill:#552200;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 329.5,-108.25 -5.5,2 v 6.75 l 5.5,3 5.5,-3 v -6.75 z"
id="path35787-2" />
<path
inkscape:connector-curvature="0"
@@ -89403,8 +87971,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
id="path35789-6"
- d="m 324,-99.5 0,-7 6,-1.75 0,11.5 -0.5,0.25 -5.5,-3 z"
- style="fill:#c9c9c9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06898749px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 324,-99.5 v -7 l 6,-1.75 v 11.5 l -0.5,0.25 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#c9c9c9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06898749px;marker:none;enable-background:accumulate"
sodipodi:nodetypes="cccccc" />
<g
id="g35791-0"
@@ -89413,15 +87981,15 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc"
id="path35793-5"
- d="m 156,79.5 0,-7 -5,-1.75 0,11.5 5,-2.75 z"
- style="fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89401144px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 156,79.5 v -7 l -5,-1.75 v 11.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#666666;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.89401144px;marker:none;enable-background:accumulate"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<path
inkscape:connector-curvature="0"
id="path35795-5"
- d="m 145,72.5 5.5,-2 5.5,2 -5.5,2.5 -5.5,-2.5 z"
+ d="m 145,72.5 5.5,-2 5.5,2 -5.5,2.5 z"
style="fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:nodetypes="ccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
@@ -89432,7 +88000,7 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc"
id="path35797-0"
- d="m 334.5,-106.5 0,6.75 -5,2.75 -5,-2.75 0,-6.75"
+ d="m 334.5,-106.5 v 6.75 l -5,2.75 -5,-2.75 v -6.75"
style="fill:none;stroke:url(#linearGradient36725-1);stroke-width:0.99999982px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<rect
@@ -89441,17 +88009,17 @@
height="7.75"
width="1"
id="rect35799-0"
- style="fill:url(#linearGradient36727-5);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient36727-5);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc"
id="path35801-8"
d="m -61,340.65468 c 0,0 4.5,2 4.5,2 l 4.5,-2"
- style="fill:none;stroke:url(#linearGradient36729-0);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ style="fill:none;stroke:url(#linearGradient36729-0);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</g>
<rect
- style="opacity:0.07999998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.07999998;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="rect37868-0-4-8-7"
width="3.0000007"
height="7.25"
@@ -89459,13 +88027,13 @@
y="185" />
<g
id="g35818-3"
- style="fill:url(#radialGradient17275);fill-opacity:1;display:inline"
+ style="display:inline;fill:url(#radialGradient17275);fill-opacity:1"
transform="translate(-1080.9861,-256)">
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc"
- style="fill:url(#radialGradient17275);fill-opacity:1;fill-rule:nonzero;stroke:#542b00;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.8627451;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 1130.4859,445.25 0,-7.5 6,2.75 0,8 -6,-3.25 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient17275);fill-opacity:1;fill-rule:nonzero;stroke:#542b00;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:0.8627451;marker:none;enable-background:accumulate"
+ d="m 1130.4859,445.25 v -7.5 l 6,2.75 v 8 z"
id="path35820-8"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -89476,8 +88044,8 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
id="path35822-7"
- d="m 1136.4859,448.5 -6,-3.25 0,-7.5"
- style="fill:url(#radialGradient17275);fill-opacity:1;stroke:#462400;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 1136.4859,448.5 -6,-3.25 v -7.5"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient17275);fill-opacity:1;stroke:#462400;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccc" />
</g>
<g
@@ -89485,12 +88053,12 @@
style="display:inline;enable-background:new"
id="g35803-8">
<path
- style="fill:none;stroke:#542b00;stroke-width:1.495;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000265;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 8.0048608,180.50566 0.036785,0 c 0.8181814,0 1.476865,0.66665 1.476865,1.49473 l 0,1.2e-4 c 0,0.82808 -0.6586836,1.49472 -1.476865,1.49472 l -0.036785,0 c -0.8181897,0 -1.4768733,-0.66664 -1.4768733,-1.49472 l 0,-1.2e-4 c 0,-0.82808 0.6586836,-1.49473 1.4768733,-1.49473 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#542b00;stroke-width:1.495;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 8.0048608,180.50566 h 0.036785 c 0.8181814,0 1.476865,0.66665 1.476865,1.49473 v 1.2e-4 c 0,0.82808 -0.6586836,1.49472 -1.476865,1.49472 h -0.036785 c -0.8181897,0 -1.4768733,-0.66664 -1.4768733,-1.49472 v -1.2e-4 c 0,-0.82808 0.6586836,-1.49473 1.4768733,-1.49473 z"
id="path35805-7"
inkscape:connector-curvature="0" />
<path
- style="fill:#ffc17d;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;fill:#ffc17d;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 9.0203881,181.00394 c -0.6673195,0 -1.334639,1e-5 -2.0019585,1e-5 0,0.66706 0,1.33411 0,2.00119 0.6673195,0 1.334639,-1e-5 2.0019585,-1e-5 0,-0.66707 0,-1.33413 0,-2.00119 z"
id="path35807-6"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
@@ -89504,7 +88072,7 @@
id="ICON_TRIA_RIGHT_BAR"
transform="translate(405,298)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect24907-8"
width="16"
height="16"
@@ -89515,7 +88083,7 @@
transform="translate(-0.99177519,0.03419629)">
<path
style="fill:url(#linearGradient17610);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 472.51758,370.53516 -1.04688,0.0312 0.0371,9.96875 1.00977,0 3.95117,-3.70704 -5.3e-4,3.72852 3.1119,0 0,-10.01758 -3.1119,0 5.3e-4,3.73242 z"
+ d="m 472.51758,370.53516 -1.04688,0.0312 0.0371,9.96875 h 1.00977 l 3.95117,-3.70704 -5.3e-4,3.72852 h 3.1119 v -10.01758 h -3.1119 l 5.3e-4,3.73242 z"
transform="translate(-404.00822,-298.0342)"
id="path11011-6"
inkscape:connector-curvature="0"
@@ -89523,7 +88091,7 @@
<path
sodipodi:nodetypes="ccc"
style="fill:none;stroke:url(#linearGradient17612);stroke-width:0.91056824px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 73.368723,81.408784 0,-7.99274 1.292145,-6.3e-5"
+ d="m 73.368723,81.408784 v -7.99274 l 1.292145,-6.3e-5"
id="path10830-6"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -89531,7 +88099,7 @@
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:url(#linearGradient17614);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 68.5,81.24999 0,-7.5 4,3.75"
+ d="m 68.5,81.24999 v -7.5 l 4,3.75"
id="path11013-5"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
@@ -89542,7 +88110,7 @@
id="ICON_TRIA_LEFT_BAR"
transform="matrix(-1,0,0,1,587.07183,298.10012)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect24907-8-5"
width="16"
height="16"
@@ -89553,7 +88121,7 @@
transform="translate(-1.9392553,-0.11820549)">
<path
style="fill:url(#linearGradient17610-0);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 520.5,370.48242 -4.01758,3.80078 -6.6e-4,-3.79492 -3.04231,0 0,10.01563 3.04231,0 6.6e-4,-3.79297 4.01758,3.77148 1.01172,0 0.0371,-9.96875 z"
+ d="m 520.5,370.48242 -4.01758,3.80078 -6.6e-4,-3.79492 h -3.04231 v 10.01563 h 3.04231 l 6.6e-4,-3.79297 4.01758,3.77148 h 1.01172 l 0.0371,-9.96875 z"
transform="matrix(-1,0,0,1,589.01109,-297.98191)"
id="path11011-6-2"
inkscape:connector-curvature="0"
@@ -89561,7 +88129,7 @@
<path
sodipodi:nodetypes="ccc"
style="fill:none;stroke:url(#linearGradient17612-5);stroke-width:0.91056824px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 74.660868,81.408784 0,-7.99274 -1.220453,-6.3e-5"
+ d="m 74.660868,81.408784 v -7.99274 l -1.220453,-6.3e-5"
id="path10830-6-2"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
@@ -89569,7 +88137,7 @@
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:url(#linearGradient17614-0);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 68.5,81.24999 0,-7.5 4,3.75"
+ d="m 68.5,81.24999 v -7.5 l 4,3.75"
id="path11013-5-7"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
@@ -89578,7 +88146,7 @@
<g
id="ICON_TRIA_UP_BAR">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect24907-8-5-7"
width="16"
height="16"
@@ -89587,7 +88155,7 @@
transform="matrix(0,-1,-1,0,0,0)" />
<path
style="fill:url(#linearGradient17165);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 533.51953,371.46094 0,3.04042 3.79492,5.9e-4 -3.77343,4.01953 0,1.01172 9.96875,0.0352 0.0312,-1.04688 -3.80274,-4.01953 3.79688,-5.9e-4 0,-3.04042 z"
+ d="m 533.51953,371.46094 v 3.04042 l 3.79492,5.9e-4 -3.77343,4.01953 v 1.01172 l 9.96875,0.0352 0.0312,-1.04688 -3.80274,-4.01953 3.79688,-5.9e-4 v -3.04042 z"
id="path11011-6-2-1"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccccc" />
@@ -89603,23 +88171,23 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path10830-6-2-8"
- d="m 542.67138,372.31669 -8.26386,0 -6e-5,1.20843"
+ d="m 542.67138,372.31669 h -8.26386 l -6e-5,1.20843"
style="display:inline;fill:none;stroke:url(#linearGradient17838);stroke-width:0.92071104px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
sodipodi:nodetypes="ccc" />
</g>
<g
id="ICON_TRIA_DOWN_BAR">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect24907-8-8"
width="16"
height="16"
x="367"
y="-504"
- transform="matrix(0,1,-1,0,0,0)" />
+ transform="rotate(90)" />
<path
style="fill:url(#linearGradient17185);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 501.50977,371.4375 -9.96875,0.0352 0,1.01172 3.69336,3.93554 -3.71485,-0.005 0,3.13033 10.01563,0 0,-3.13033 -3.7168,0.007 3.72266,-3.9375 z"
+ d="m 501.50977,371.4375 -9.96875,0.0352 v 1.01172 l 3.69336,3.93554 -3.71485,-0.005 v 3.13033 h 10.01563 v -3.13033 l -3.7168,0.007 3.72266,-3.9375 z"
id="path11011-6-8"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccccc" />
@@ -89627,7 +88195,7 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
id="path11013-5-6"
- d="m 492.79119,372.47355 7.5,0"
+ d="m 492.79119,372.47355 h 7.5"
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
@@ -89635,7 +88203,7 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
id="path10830-6-2-8-8"
- d="m 500.65575,377.29722 -8.26386,0 -6e-5,1.29834"
+ d="m 500.65575,377.29722 h -8.26386 l -6e-5,1.29834"
style="display:inline;fill:none;stroke:url(#linearGradient17872);stroke-width:0.92071104px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
sodipodi:nodetypes="ccc" />
</g>
@@ -89654,13 +88222,13 @@
id="g18198"
transform="matrix(1.0087429,0,0,0.97482999,-108.8466,-32.496743)">
<path
- style="fill:url(#linearGradient18237);fill-opacity:1;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ style="fill:url(#linearGradient18237);fill-opacity:1;stroke:#000000;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 425.50477,292.38372 15.04989,-10.90405 -0.0101,6.77582 -9.51239,8.38266 z"
id="rect16727"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<path
- style="fill:none;stroke:url(#linearGradient18239);stroke-width:0.94270116;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
+ style="display:inline;fill:none;stroke:url(#linearGradient18239);stroke-width:0.94270116;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
d="m 439.79125,287.61126 -8.80214,7.81233 -3.87477,-2.96997 12.64026,-9.16307"
id="rect16727-8"
inkscape:connector-curvature="0"
@@ -89684,13 +88252,13 @@
inkscape:connector-curvature="0"
id="rect16727-5"
d="m 328.56164,246.05078 c 0.74079,0.0537 1.77983,-0.45053 6.98113,-4.18925 0,3.08648 -0.0102,4.09418 -0.0102,6.60528 -0.44523,0.50349 -6.55549,5.26941 -7.72056,-6.20333 -3.16507,0.27726 -4.58746,0.0819 -7.26323,-0.75675 1.35238,2.92568 2.86698,4.41322 4.56976,5.5869 2.04461,1.35744 4.27186,2.25425 6.46319,2.69448"
- style="fill:none;stroke:#1a1a1a;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.49803922;stroke-dasharray:none" />
+ style="fill:none;stroke:#1a1a1a;stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.49803922" />
<path
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0"
id="path18412-1"
d="m 324.68994,246.54277 c -0.64862,-0.68224 -1.98282,-2.30701 -2.71202,-3.8538 2.07872,0.5568 3.84489,0.49023 5.15615,0.37259 0.26517,2.2318 0.88783,4.31843 1.67994,5.209"
- style="fill:none;stroke:url(#linearGradient17243);stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.49803922;stroke-dasharray:none;display:inline;enable-background:new" />
+ style="display:inline;fill:none;stroke:url(#linearGradient17243);stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.49803922;enable-background:new" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
@@ -89713,11 +88281,11 @@
<g
transform="translate(-264,-151.9)"
id="ICON_FILE_HIDDEN"
- style="fill:url(#linearGradient17223);fill-opacity:1;display:inline;enable-background:new">
+ style="display:inline;fill:url(#linearGradient17223);fill-opacity:1;enable-background:new">
<path
inkscape:connector-curvature="0"
- style="fill:url(#linearGradient17215);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline"
- d="m 756.16666,204.50001 10.33334,0 0,14.99999 -13,0 -10e-6,-11.99999 2.66667,-3 z"
+ style="display:inline;fill:url(#linearGradient17215);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
+ d="M 756.16666,204.50001 H 766.5 V 219.5 h -13 l -10e-6,-11.99999 z"
id="path39241-60"
sodipodi:nodetypes="cccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -89730,33 +88298,33 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccccc"
id="path39243-9"
- d="m 756.16666,204.50001 10.33334,0 0,14.99999 -13,0 -10e-6,-11.99999 2.66667,-3 z"
- style="opacity:0.3;fill:url(#radialGradient17217);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ d="M 756.16666,204.50001 H 766.5 V 219.5 h -13 l -10e-6,-11.99999 z"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:url(#radialGradient17217);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
id="path39245-1"
- style="fill:none;stroke:url(#linearGradient17219);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;display:inline"
- d="m 754.5,209 0,9.5 m 3.5,-13 7.5,0"
+ style="display:inline;fill:none;stroke:url(#linearGradient17219);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 754.5,209 v 9.5 m 3.5,-13 h 7.5"
sodipodi:nodetypes="cccc" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc"
id="path39247-8"
- d="m 753,208 4,0 0,-4 -4,4 z"
- style="fill:#ffffff;fill-opacity:0.49803922;fill-rule:evenodd;stroke:none;display:inline" />
+ d="m 753,208 h 4 v -4 z"
+ style="display:inline;fill:#ffffff;fill-opacity:0.49803922;fill-rule:evenodd;stroke:none" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc"
id="path39249-0"
- style="fill:none;stroke:#7f7f7f;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 753.5,207.00001 0,12.49999 13,0 0,-14.99999 -10.5,0 -2.5,2.5 z"
+ style="fill:none;stroke:#7f7f7f;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 753.5,207.00001 V 219.5 h 13 V 204.50001 H 756 Z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<path
inkscape:connector-curvature="0"
style="fill:none;stroke:url(#linearGradient17221);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
- d="m 757.5,206.5 0,2 -2,0"
+ d="m 757.5,206.5 v 2 h -2"
id="path39251-2" />
</g>
<g
@@ -89785,7 +88353,7 @@
id="ICON_MOD_NORMALEDIT"
transform="translate(105,-19)">
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect18695-8"
width="16"
height="16"
@@ -89795,23 +88363,23 @@
id="g18697-9"
transform="translate(-86,370.75)">
<path
- style="fill:none;stroke:#0b1728;stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 330,-107.75 -5,2 0.0372,6.324398 5,2.71875 4.99999,-2.71875 L 335,-105.75 l -5,-2 z"
+ style="fill:none;stroke:#0b1728;stroke-width:1.70000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 330,-107.75 -5,2 0.0372,6.324398 5,2.71875 4.99999,-2.71875 L 335,-105.75 Z"
id="path18699-5"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
<path
id="path18719-5"
- d="m 330.03717,-107.6131 -5,1.875 0,6.312498 5,2.71875 4.99999,-2.71875 0,-6.312498 -4.99999,-1.875 z"
- style="fill:url(#linearGradient16862);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 330.03717,-107.6131 -5,1.875 v 6.312498 l 5,2.71875 4.99999,-2.71875 v -6.312498 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient16862);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<g
id="g18703-7"
transform="translate(179,-179)">
<path
id="path18707-1"
- d="m 146.0019,73.295281 5,-1.894157 5,1.894157 -5,2.073959 -5,-2.073959 z"
- style="fill:url(#linearGradient16864);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 146.0019,73.295281 5,-1.894157 5,1.894157 -5,2.073959 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient16864);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
inkscape:export-xdpi="90"
@@ -89820,19 +88388,19 @@
</g>
<path
id="path18763-1"
- d="m 335,-105.5 -5,2 0,6.75 5,-2.75 0,-6 z"
- style="fill:url(#linearGradient16866);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+ d="m 335,-105.5 -5,2 v 6.75 l 5,-2.75 z"
+ style="display:inline;fill:url(#linearGradient16866);fill-opacity:1;fill-rule:evenodd;stroke:none"
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccc"
id="path18709-8"
- d="m 334.5,-105.25 0.002,5.587357 -4.5,2.480073 -4.5,-2.480073 -0.002,-5.587357 4.5,-1.75 4.5,1.75 z"
+ d="m 334.5,-105.25 0.002,5.587357 -4.5,2.480073 -4.5,-2.480073 L 325.5,-105.25 330,-107 Z"
style="fill:none;stroke:url(#linearGradient16868);stroke-width:0.99999982px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
id="path18758-5"
- style="opacity:0.8;fill:none;stroke:#d7e3f4;stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ style="display:inline;opacity:0.8;fill:none;stroke:#d7e3f4;stroke-width:3.29999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 330.25,-103.25 3.25,-1.5"
sodipodi:nodetypes="cc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
@@ -89848,7 +88416,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
sodipodi:nodetypes="cc"
d="M 330.25,-103.25 335,-105.5"
- style="fill:#0b1728;fill-opacity:1;fill-rule:evenodd;stroke:#0b1728;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#0b1728;fill-opacity:1;fill-rule:evenodd;stroke:#0b1728;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path18760-7"
inkscape:connector-curvature="0" />
<path
@@ -89857,7 +88425,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
sodipodi:nodetypes="cc"
d="m 325.34712,-100.90914 4.75,-2.25"
- style="fill:#dd23dd;fill-opacity:1;fill-rule:evenodd;stroke:#dd23dd;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#dd23dd;fill-opacity:1;fill-rule:evenodd;stroke:#dd23dd;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path18760-7-5"
inkscape:connector-curvature="0" />
<path
@@ -89866,7 +88434,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
sodipodi:nodetypes="cc"
d="m 330.29093,-103.24155 -0.0238,-5.2559"
- style="fill:#dd23dd;fill-opacity:1;fill-rule:evenodd;stroke:#dd23dd;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#dd23dd;fill-opacity:1;fill-rule:evenodd;stroke:#dd23dd;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path18760-7-5-6"
inkscape:connector-curvature="0" />
<path
@@ -89875,7 +88443,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
sodipodi:nodetypes="cc"
d="m 330.36378,-103.20969 4.94432,1.78292"
- style="fill:#dd23dd;fill-opacity:1;fill-rule:evenodd;stroke:#dd23dd;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#dd23dd;fill-opacity:1;fill-rule:evenodd;stroke:#dd23dd;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path18760-7-5-6-3"
inkscape:connector-curvature="0" />
</g>
@@ -89890,14 +88458,14 @@
id="g24024-1">
<path
style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
- d="m 299,365 16,0 0,16 -16,0 z"
+ d="m 299,365 h 16 v 16 h -16 z"
id="rect22150-8"
inkscape:connector-curvature="0" />
<g
id="g31699">
<path
style="display:inline;fill:url(#linearGradient30825);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
- d="m 303.58068,365.2991 -2.66602,3 0,6.26171 1.57617,0.53516 0.97266,-3.95312 5.41016,1.87304 1.17968,-4.50976 1.86133,0.91015 0,-4.11718 -8.33398,0 z"
+ d="m 303.58068,365.2991 -2.66602,3 v 6.26171 l 1.57617,0.53516 0.97266,-3.95312 5.41016,1.87304 1.17968,-4.50976 1.86133,0.91015 v -4.11718 z"
id="path12337-3"
inkscape:connector-curvature="0" />
<path
@@ -89911,12 +88479,12 @@
sodipodi:nodetypes="cccc"
id="path12343-1"
style="display:inline;fill:none;stroke:url(#linearGradient30827);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
- d="m 301.9611,369.95935 0,4.75958 m 3.5,-8.25958 5.5,0"
+ d="m 301.9611,369.95935 v 4.75958 m 3.5,-8.25958 h 5.5"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
id="path12341-0"
- d="m 300.39172,369.09809 4,0 0,-4 -4,4 z"
+ d="m 300.39172,369.09809 h 4 v -4 z"
style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
inkscape:connector-curvature="0" />
<g
@@ -89924,13 +88492,13 @@
transform="translate(18.739924,-97.15625)">
<path
id="path17882"
- d="m 284.54204,469.10845 -3.90821,0 0.01,2.22656 2.27734,0.77344 0.88477,0 0.73633,-3 z"
+ d="m 284.54204,469.10845 h -3.90821 l 0.01,2.22656 2.27734,0.77344 h 0.88477 l 0.73633,-3 z"
mask="none"
style="display:inline;opacity:0.93999993;fill:url(#linearGradient17892);fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
inkscape:connector-curvature="0" />
<path
id="path17879"
- d="m 290.335,469.48345 -2.71093,-2.375 -0.004,2 -0.95312,0 3.45312,1.19531 0.21484,-0.82031 z"
+ d="m 290.335,469.48345 -2.71093,-2.375 -0.004,2 h -0.95312 l 3.45312,1.19531 0.21484,-0.82031 z"
mask="none"
style="display:inline;opacity:0.93999993;fill:url(#linearGradient17894);fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
inkscape:connector-curvature="0" />
@@ -89938,26 +88506,26 @@
<path
inkscape:connector-curvature="0"
id="path12345-7"
- d="m 303.41467,365.43786 -2.5,2.5 0,6.76171 1.57617,0.53516 0.97266,-3.95312 5.41016,1.87304 1.17968,-4.50976 1.86133,0.91015 0,-4.11718 -8.5,0 z"
+ d="m 303.41467,365.43786 -2.5,2.5 v 6.76171 l 1.57617,0.53516 0.97266,-3.95312 5.41016,1.87304 1.17968,-4.50976 1.86133,0.91015 v -4.11718 z"
style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<g
id="g31703">
<path
style="display:inline;fill:url(#linearGradient30849);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
- d="m 313.09408,371.63636 -1.86133,-0.91015 -1.17968,4.50976 -5.41016,-1.87304 -0.97266,3.95312 -1.57617,-0.53516 0,3.73829 11,0 0,-8.88282 z"
+ d="m 313.09408,371.63636 -1.86133,-0.91015 -1.17968,4.50976 -5.41016,-1.87304 -0.97266,3.95312 -1.57617,-0.53516 v 3.73829 h 11 z"
id="path30847"
inkscape:connector-curvature="0" />
<path
style="display:inline;opacity:0.93999993;fill:url(#linearGradient17886);fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
mask="none"
- d="m 310.24635,374.48985 -0.21484,0.82031 -3.45312,-1.19531 -2.125,0 -0.73633,3 3.81445,0 0.0176,2 3.98242,-3.5 -1.28516,-1.125 z"
+ d="m 310.24635,374.48985 -0.21484,0.82031 -3.45312,-1.19531 h -2.125 l -0.73633,3 h 3.81445 l 0.0176,2 3.98242,-3.5 -1.28516,-1.125 z"
id="path31751"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path30842"
- d="m 313.09408,371.70574 -1.86133,-0.91015 -1.17968,4.50976 -5.41016,-1.87304 -0.97266,3.95312 -1.57617,-0.53516 0,3.73829 11,0 0,-8.88282 z"
+ d="m 313.09408,371.70574 -1.86133,-0.91015 -1.17968,4.50976 -5.41016,-1.87304 -0.97266,3.95312 -1.57617,-0.53516 v 3.73829 h 11 z"
style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<path
@@ -89976,7 +88544,7 @@
inkscape:export-ydpi="90"
clip-path="url(#clipPath15455)">
<rect
- style="opacity:0.01000001;fill:none;stroke:#e8a930;stroke-width:2.99999928;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000248;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:none;stroke:#e8a930;stroke-width:2.99999928;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect15636"
width="1.9930685"
height="1.9947703"
@@ -89985,7 +88553,7 @@
ry="0.99734437"
rx="0.98426884" />
<rect
- style="fill:none;stroke:#000000;stroke-width:0.99999946;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:#000000;stroke-width:0.99999946;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect15638"
width="7.9999909"
height="8.000001"
@@ -90019,7 +88587,7 @@
height="6.9921885"
width="8.9605312"
id="rect15642"
- style="fill:none;stroke:#000000;stroke-width:0.99999958;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+ style="fill:none;stroke:#000000;stroke-width:0.99999958;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<rect
style="fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="rect15644"
@@ -90043,7 +88611,7 @@
height="6.000001"
width="5.9999909"
id="rect15646"
- style="opacity:0.8;fill:none;stroke:url(#linearGradient15680);stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+ style="opacity:0.8;fill:none;stroke:url(#linearGradient15680);stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<rect
style="fill:url(#linearGradient15682);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="rect15648"
@@ -90069,7 +88637,7 @@
id="rect15650"
style="fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none" />
<rect
- style="opacity:0.8;fill:none;stroke:url(#linearGradient15684);stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="opacity:0.8;fill:none;stroke:url(#linearGradient15684);stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect15652"
width="5.9604402"
height="4.0030832"
@@ -90082,7 +88650,7 @@
inkscape:export-ydpi="90" />
<rect
rx="0"
- style="fill:#ffb72a;fill-opacity:1;fill-rule:nonzero;stroke:#553800;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000248;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffb72a;fill-opacity:1;fill-rule:nonzero;stroke:#553800;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect15654"
width="2"
height="1.9882908"
@@ -90090,7 +88658,7 @@
y="240.50037"
ry="0" />
<rect
- style="fill:none;stroke:#000000;stroke-width:0.99999946;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline;enable-background:new"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:0.99999946;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
id="rect15656"
width="8.9614162"
height="7.9608927"
@@ -90112,9 +88680,9 @@
height="6.9609385"
width="7.9614167"
id="rect15658"
- style="fill:url(#linearGradient15688);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new" />
+ style="display:inline;fill:url(#linearGradient15688);fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new" />
<rect
- style="fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new"
+ style="display:inline;fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
id="rect15660"
width="5.9614167"
height="0.96093851"
@@ -90136,10 +88704,10 @@
height="5.9608316"
width="6.9614167"
id="rect15662"
- style="opacity:0.8;fill:none;stroke:url(#linearGradient15690);stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline;enable-background:new" />
+ style="display:inline;opacity:0.8;fill:none;stroke:url(#linearGradient15690);stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" />
<rect
rx="0"
- style="fill:#ffb72a;fill-opacity:1;fill-rule:nonzero;stroke:#553800;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000248;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffb72a;fill-opacity:1;fill-rule:nonzero;stroke:#553800;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect15664"
width="2"
height="1.9882908"
@@ -90147,13 +88715,13 @@
y="240.46912"
ry="0" />
<path
- style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
+ style="display:inline;fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
d="m 304.05985,242.89398 5.95666,5.92541"
id="path15666"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
- style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new"
+ style="display:inline;fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
d="m 316.05011,242.91732 -6.03144,5.909"
id="path15668"
sodipodi:nodetypes="cc"
@@ -90162,31 +88730,23 @@
sodipodi:nodetypes="cc"
id="path15670"
d="m 315.98761,242.94305 -5.93475,5.88889"
- style="fill:none;stroke:url(#linearGradient15692);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient15692);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
id="path15672"
d="m 304.05985,242.89398 5.96875,5.95312"
- style="fill:none;stroke:url(#linearGradient15694);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient15694);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
inkscape:connector-curvature="0" />
<ellipse
- sodipodi:ry="0.61330098"
- sodipodi:rx="0.59120387"
- sodipodi:cy="242.89087"
- sodipodi:cx="304.0946"
- style="opacity:0.51799999;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.51799999;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="ellipse15674"
cx="304.0946"
cy="242.89087"
rx="0.59120387"
ry="0.61330098" />
<ellipse
- sodipodi:ry="0.61330098"
- sodipodi:rx="0.59120387"
- sodipodi:cy="242.95337"
- sodipodi:cx="315.98523"
- style="opacity:0.51799999;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.51799999;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="ellipse15676"
cx="315.98523"
cy="242.95337"
@@ -90198,7 +88758,7 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Pracownia\Moje dokumenty\Moje obrazy\BLENDER ICONS redesign\RELEASES\g42357.png"
- style="opacity:0.65;display:inline;filter:url(#filter15388);enable-background:new"
+ style="display:inline;opacity:0.65;filter:url(#filter15388);enable-background:new"
id="g15325"
transform="translate(-170.98527,-18.905399)"
mask="url(#mask15700-4)">
@@ -90210,7 +88770,7 @@
height="1.9947703"
width="1.9930685"
id="rect15327"
- style="opacity:0.01000001;fill:none;stroke:#e8a930;stroke-width:2.99999928;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000248;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:none;stroke:#e8a930;stroke-width:2.99999928;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" />
<rect
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
@@ -90222,7 +88782,7 @@
height="8.000001"
width="7.9999909"
id="rect15329"
- style="fill:none;stroke:#000000;stroke-width:0.99999946;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+ style="fill:none;stroke:#000000;stroke-width:0.99999946;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<rect
style="fill:url(#linearGradient15371);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="rect15331"
@@ -90236,7 +88796,7 @@
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<rect
- style="fill:none;stroke:#000000;stroke-width:0.99999958;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:#000000;stroke-width:0.99999958;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect15333"
width="8.9605312"
height="6.9921885"
@@ -90260,7 +88820,7 @@
id="rect15335"
style="fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none" />
<rect
- style="opacity:0.8;fill:none;stroke:url(#linearGradient15373);stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="opacity:0.8;fill:none;stroke:url(#linearGradient15373);stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect15337"
width="5.9999909"
height="6.000001"
@@ -90306,7 +88866,7 @@
height="4.0030832"
width="5.9604402"
id="rect15343"
- style="opacity:0.8;fill:none;stroke:url(#linearGradient15377);stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+ style="opacity:0.8;fill:none;stroke:url(#linearGradient15377);stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<rect
ry="0"
y="240.50037"
@@ -90314,7 +88874,7 @@
height="1.9882908"
width="2"
id="rect15345"
- style="fill:#ffb72a;fill-opacity:1;fill-rule:nonzero;stroke:#553800;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000248;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffb72a;fill-opacity:1;fill-rule:nonzero;stroke:#553800;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
rx="0" />
<rect
inkscape:export-ydpi="90"
@@ -90327,9 +88887,9 @@
height="7.9608927"
width="8.9614162"
id="rect15347"
- style="fill:none;stroke:#000000;stroke-width:0.99999946;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline;enable-background:new" />
+ style="display:inline;fill:none;stroke:#000000;stroke-width:0.99999946;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" />
<rect
- style="fill:url(#linearGradient15379);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new"
+ style="display:inline;fill:url(#linearGradient15379);fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
id="rect15349"
width="7.9614167"
height="6.9609385"
@@ -90351,9 +88911,9 @@
height="0.96093851"
width="5.9614167"
id="rect15351"
- style="fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline;enable-background:new" />
+ style="display:inline;fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new" />
<rect
- style="opacity:0.8;fill:none;stroke:url(#linearGradient15381);stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline;enable-background:new"
+ style="display:inline;opacity:0.8;fill:none;stroke:url(#linearGradient15381);stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
id="rect15354"
width="6.9614167"
height="5.9608316"
@@ -90371,54 +88931,46 @@
height="1.9882908"
width="2"
id="rect15356"
- style="fill:#ffb72a;fill-opacity:1;fill-rule:nonzero;stroke:#553800;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:7.40000248;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffb72a;fill-opacity:1;fill-rule:nonzero;stroke:#553800;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
rx="0" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
id="path15358"
d="m 304.05985,242.89398 5.95666,5.92541"
- style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new" />
+ style="display:inline;fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
id="path15360"
d="m 316.05011,242.91732 -6.03144,5.909"
- style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;enable-background:new" />
+ style="display:inline;fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new" />
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:url(#linearGradient15384);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient15384);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
d="m 315.98761,242.94305 -5.93475,5.88889"
id="path15362"
sodipodi:nodetypes="cc" />
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:url(#linearGradient15386);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient15386);stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
d="m 304.05985,242.89398 5.96875,5.95312"
id="path15364"
sodipodi:nodetypes="cc" />
<ellipse
- sodipodi:ry="0.61330098"
- sodipodi:rx="0.59120387"
- sodipodi:cy="242.89087"
- sodipodi:cx="304.0946"
ry="0.61330098"
rx="0.59120387"
cy="242.89087"
cx="304.0946"
id="ellipse15366"
- style="opacity:0.51799999;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.51799999;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
<ellipse
- sodipodi:ry="0.61330098"
- sodipodi:rx="0.59120387"
- sodipodi:cy="242.95337"
- sodipodi:cx="315.98523"
ry="0.61330098"
rx="0.59120387"
cy="242.95337"
cx="315.98523"
id="ellipse15368"
- style="opacity:0.51799999;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.51799999;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
</g>
<g
transform="translate(189.00803,-79.37555)"
@@ -90427,7 +88979,7 @@
<g
id="g16949">
<rect
- style="color:#000000;fill:#272727;fill-opacity:1;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#272727;fill-opacity:1;stroke:none;stroke-width:1.20000005;marker:none;enable-background:new"
id="rect15992"
width="2"
height="7"
@@ -90435,7 +88987,7 @@
y="134"
ry="1" />
<rect
- style="color:#000000;fill:#272727;fill-opacity:1;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#272727;fill-opacity:1;stroke:none;stroke-width:1.20000005;marker:none;enable-background:new"
id="rect15994"
width="2"
height="7"
@@ -90449,7 +89001,7 @@
height="3"
width="15.5"
id="rect15926"
- style="color:#000000;fill:#272727;fill-opacity:1;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#272727;fill-opacity:1;stroke:none;stroke-width:1.20000005;marker:none;enable-background:new" />
<rect
ry="1"
y="132.25"
@@ -90457,7 +89009,7 @@
height="10.5"
width="2.5"
id="rect15930"
- style="color:#000000;fill:#272727;fill-opacity:1;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#272727;fill-opacity:1;stroke:none;stroke-width:1.20000005;marker:none;enable-background:new" />
<rect
ry="1"
y="132.25"
@@ -90465,12 +89017,12 @@
height="10.5"
width="2.5"
id="rect15938"
- style="color:#000000;fill:#272727;fill-opacity:1;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#272727;fill-opacity:1;stroke:none;stroke-width:1.20000005;marker:none;enable-background:new" />
<g
id="g16016-6"
style="fill:url(#radialGradient16031);fill-opacity:1">
<rect
- style="color:#000000;fill:url(#radialGradient14206);fill-opacity:1;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient14206);fill-opacity:1;stroke:none;stroke-width:1.20000005;marker:none;enable-background:new"
id="rect15946"
width="1"
height="9"
@@ -90478,7 +89030,7 @@
y="133"
ry="0.5" />
<rect
- style="color:#000000;fill:url(#radialGradient14208);fill-opacity:1;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient14208);fill-opacity:1;stroke:none;stroke-width:1.20000005;marker:none;enable-background:new"
id="rect15946-7"
width="1"
height="9"
@@ -90492,7 +89044,7 @@
height="1"
width="14"
id="rect15972"
- style="color:#000000;fill:url(#radialGradient14210);fill-opacity:1;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient14210);fill-opacity:1;stroke:none;stroke-width:1.20000005;marker:none;enable-background:new" />
<rect
ry="1"
y="135"
@@ -90500,7 +89052,7 @@
height="5"
width="1"
id="rect15996"
- style="color:#000000;fill:url(#radialGradient16945);fill-opacity:1;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient16945);fill-opacity:1;stroke:none;stroke-width:1.20000005;marker:none;enable-background:new" />
<rect
ry="1"
y="135"
@@ -90508,10 +89060,10 @@
height="5"
width="1"
id="rect15998"
- style="color:#000000;fill:url(#radialGradient16947);fill-opacity:1;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient16947);fill-opacity:1;stroke:none;stroke-width:1.20000005;marker:none;enable-background:new" />
</g>
<rect
- style="opacity:0.51499999;color:#000000;fill:#0065ff;fill-opacity:1;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.51499999;fill:#0065ff;fill-opacity:1;stroke:none;stroke-width:1.20000005;marker:none;enable-background:new"
id="rect15974"
width="4"
height="11"
@@ -90525,7 +89077,7 @@
height="9"
width="2"
id="rect15944"
- style="color:#000000;fill:url(#radialGradient14216);fill-opacity:1;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient14216);fill-opacity:1;stroke:none;stroke-width:1.20000005;marker:none;enable-background:new" />
</g>
</g>
<g
@@ -90567,7 +89119,7 @@
inkscape:transform-center-x="-2.8145849"
inkscape:transform-center-y="-3.2499984" />
<path
- inkscape:transform-center-y="1.6729808e-005"
+ inkscape:transform-center-y="1.6729808e-05"
inkscape:transform-center-x="-3.2630798"
sodipodi:end="5.7595865"
sodipodi:start="4.712389"
@@ -90691,7 +89243,7 @@
transform="matrix(0.45975513,-0.19653299,0.19653299,0.45975513,138.04837,311.70175)">
<path
style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient17281);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
- d="m 367.75,440.75 1.75,-1.5 2.5,5.25 1.75,-1 -2.25,-5 2.5,0 -6.25,-6.25 z"
+ d="m 367.75,440.75 1.75,-1.5 2.5,5.25 1.75,-1 -2.25,-5 h 2.5 l -6.25,-6.25 z"
id="path45378-1-5-6-6"
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0" />
@@ -90704,13 +89256,13 @@
y="430" />
<path
style="fill:none;stroke:#000000;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 367.5,431.5 7,7.25 -3,0 2.5,4.75 -1.75,1 -2.5,-5 -2.25,2.25 z"
+ d="m 367.5,431.5 7,7.25 h -3 l 2.5,4.75 -1.75,1 -2.5,-5 -2.25,2.25 z"
id="path17835-7-5"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc" />
<path
style="fill:none;stroke:#ffffff;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 368.34375,433.75 0,5.75"
+ d="m 368.34375,433.75 v 5.75"
id="path17845-9-6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
@@ -90755,7 +89307,7 @@
inkscape:transform-center-x="-2.8145849"
inkscape:transform-center-y="-3.2499984" />
<path
- inkscape:transform-center-y="1.6729808e-005"
+ inkscape:transform-center-y="1.6729808e-05"
inkscape:transform-center-x="-3.2630798"
sodipodi:end="5.7595865"
sodipodi:start="4.712389"
@@ -90879,7 +89431,7 @@
transform="matrix(0.45975513,-0.19653299,0.19653299,0.45975513,138.04837,311.70175)">
<path
style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient31454);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate"
- d="m 367.75,440.75 1.75,-1.5 2.5,5.25 1.75,-1 -2.25,-5 2.5,0 -6.25,-6.25 z"
+ d="m 367.75,440.75 1.75,-1.5 2.5,5.25 1.75,-1 -2.25,-5 h 2.5 l -6.25,-6.25 z"
id="path45378-1-5-6-6-9"
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0" />
@@ -90892,13 +89444,13 @@
y="430" />
<path
style="fill:none;stroke:#000000;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 367.5,431.5 7,7.25 -3,0 2.5,4.75 -1.75,1 -2.5,-5 -2.25,2.25 z"
+ d="m 367.5,431.5 7,7.25 h -3 l 2.5,4.75 -1.75,1 -2.5,-5 -2.25,2.25 z"
id="path17835-7-5-7"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc" />
<path
style="fill:none;stroke:#ffffff;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 368.34375,433.75 0,5.75"
+ d="m 368.34375,433.75 v 5.75"
id="path17845-9-6-9"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
@@ -90925,13 +89477,13 @@
inkscape:connector-curvature="0" />
<path
style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
- d="m -220,154.19066 c -3.49999,0 -5.36123,3.42934 -5.36123,4.80934 l -1e-5,8.5 c 0,2 2.32523,5.30934 5.36123,5.30934 3.036,0 5.36125,-3.30934 5.36125,-5.30934 l 0,-8.5 c 0,-1.38 -1.86123,-4.80934 -5.36124,-4.80934 z"
+ d="m -220,154.19066 c -3.49999,0 -5.36123,3.42934 -5.36123,4.80934 l -1e-5,8.5 c 0,2 2.32523,5.30934 5.36123,5.30934 3.036,0 5.36125,-3.30934 5.36125,-5.30934 V 159 c 0,-1.38 -1.86123,-4.80934 -5.36124,-4.80934 z"
id="path41305-2"
sodipodi:nodetypes="cccsccc"
inkscape:connector-curvature="0" />
<path
style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient31210);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate"
- d="m -224.5,160.5 0,6.5 c 0,0.9838 0.60816,4.76952 4.46531,4.76952 3.85714,0 4.53469,-3.78572 4.53469,-4.76952 l 0,-6.5 c 0,0 0.43828,-5.18967 -4.47408,-5.25396 C -224.88644,155.18174 -224.5,160.5 -224.5,160.5 Z"
+ d="m -224.5,160.5 v 6.5 c 0,0.9838 0.60816,4.76952 4.46531,4.76952 3.85714,0 4.53469,-3.78572 4.53469,-4.76952 v -6.5 c 0,0 0.43828,-5.18967 -4.47408,-5.25396 C -224.88644,155.18174 -224.5,160.5 -224.5,160.5 Z"
id="path41307-2"
sodipodi:nodetypes="ccsccsc"
inkscape:connector-curvature="0" />
@@ -90968,7 +89520,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccccc"
id="path21961"
- d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z"
+ d="m 125.5,433.5 h 23 v 41 h -33 v -31 z"
style="display:inline;fill:url(#linearGradient21977);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none" />
<path
inkscape:connector-curvature="0"
@@ -90982,7 +89534,7 @@
<path
inkscape:connector-curvature="0"
style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)"
- d="m 115,444 12,0 -1,-11 -11,11 z"
+ d="m 115,444 h 12 l -1,-11 z"
id="path21965"
sodipodi:nodetypes="cccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -90994,7 +89546,7 @@
sodipodi:nodetypes="ccc"
id="path21967"
style="fill:none;stroke:url(#linearGradient21979);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 117.5,443.75 9,-2.5 0,-6"
+ d="m 117.5,443.75 9,-2.5 v -6"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -91004,14 +89556,14 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 115.5,442.75 0,31.75 33,0 0,-41 -23.75,0 -9.25,9.25 z"
+ d="m 115.5,442.75 v 31.75 h 33 v -41 h -23.75 z"
style="fill:none;stroke:#333333;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
id="path21969"
sodipodi:nodetypes="cccccc" />
<path
inkscape:connector-curvature="0"
style="display:inline;opacity:0.16000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)"
- d="m 116,443 11,1 -2,-10 -9,9 z"
+ d="m 116,443 11,1 -2,-10 z"
id="path21971"
sodipodi:nodetypes="cccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -91025,14 +89577,14 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccccc"
id="path21973"
- d="m 116,443 0.0108,0.72434 L 126,441 l 0,-7 -1,0 -9,9 z"
+ d="m 116,443 0.0108,0.72434 L 126,441 v -7 h -1 z"
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none" />
<path
inkscape:connector-curvature="0"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 147.5,435 0,38.5 -30.5,0"
+ d="m 147.5,435 v 38.5 H 117"
style="opacity:0.15;fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
id="path21975"
sodipodi:nodetypes="ccc" />
@@ -91052,7 +89604,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccccc"
id="path21369"
- d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z"
+ d="m 125.5,433.5 h 23 v 41 h -33 v -31 z"
style="display:inline;fill:url(#linearGradient30321);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none" />
<path
inkscape:connector-curvature="0"
@@ -91066,7 +89618,7 @@
<path
inkscape:connector-curvature="0"
style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)"
- d="m 115,444 12,0 -1,-11 -11,11 z"
+ d="m 115,444 h 12 l -1,-11 z"
id="path21373"
sodipodi:nodetypes="cccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -91078,7 +89630,7 @@
sodipodi:nodetypes="ccc"
id="path21375"
style="fill:none;stroke:url(#linearGradient30323);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 117.5,443.75 9,-2.5 0,-6"
+ d="m 117.5,443.75 9,-2.5 v -6"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -91088,14 +89640,14 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 115.5,442.75 0,31.75 33,0 0,-41 -23.75,0 -9.25,9.25 z"
+ d="m 115.5,442.75 v 31.75 h 33 v -41 h -23.75 z"
style="fill:none;stroke:#333333;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
id="path21377"
sodipodi:nodetypes="cccccc" />
<path
inkscape:connector-curvature="0"
style="display:inline;opacity:0.16000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)"
- d="m 116,443 11,1 -2,-10 -9,9 z"
+ d="m 116,443 11,1 -2,-10 z"
id="path21569"
sodipodi:nodetypes="cccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -91109,14 +89661,14 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccccc"
id="path21379"
- d="m 116,443 0.0108,0.72434 L 126,441 l 0,-7 -1,0 -9,9 z"
+ d="m 116,443 0.0108,0.72434 L 126,441 v -7 h -1 z"
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none" />
<path
inkscape:connector-curvature="0"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 147.5,435 0,38.5 -30.5,0"
+ d="m 147.5,435 v 38.5 H 117"
style="opacity:0.15;fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
id="path21381"
sodipodi:nodetypes="ccc" />
@@ -91124,7 +89676,7 @@
<path
inkscape:connector-curvature="0"
style="font-style:normal;font-weight:normal;font-size:33.49144363px;font-family:'Bitstream Vera Sans';display:inline;fill:#214478;fill-opacity:1;stroke:none"
- d="m 891.07148,245 -0.0715,9 2.39012,0 C 896,254 896,253 896.5,251 l 0.5,0 0,7 -0.5,0 c -0.5,-2 -0.5,-3 -3.10988,-3 L 891,255 l 0,7 c 0,2.5 1,3.25 3.14146,3.39973 l -0.004,0.60029 L 885,266 l 0.004,-0.60029 C 887,265.25 888,264.5 888.00001,262 L 888,248 c 0,-2.5 -1,-3.25 -3,-3.5 l 0,-0.5 16,0 0,5 -0.5,0 c -0.50001,-1.99999 -1.5,-4 -4.5,-4 l -4.92852,0 z"
+ d="m 891.07148,245 -0.0715,9 h 2.39012 C 896,254 896,253 896.5,251 h 0.5 v 7 h -0.5 c -0.5,-2 -0.5,-3 -3.10988,-3 H 891 v 7 c 0,2.5 1,3.25 3.14146,3.39973 l -0.004,0.60029 L 885,266 l 0.004,-0.60029 C 887,265.25 888,264.5 888.00001,262 L 888,248 c 0,-2.5 -1,-3.25 -3,-3.5 V 244 h 16 v 5 h -0.5 c -0.50001,-1.99999 -1.5,-4 -4.5,-4 z"
id="text13209"
sodipodi:nodetypes="ccccccccccccccccccccccc" />
</g>
@@ -91149,7 +89701,7 @@
<path
inkscape:connector-curvature="0"
style="display:inline;fill:url(#linearGradient21647);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
- d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z"
+ d="m 125.5,433.5 h 23 v 41 h -33 v -31 z"
id="path21631"
sodipodi:nodetypes="cccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -91317,7 +89869,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccc"
id="path21635"
- d="m 115,444 12,0 -1,-11 -11,11 z"
+ d="m 115,444 h 12 l -1,-11 z"
style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)" />
<path
inkscape:connector-curvature="0"
@@ -91325,7 +89877,7 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 117.5,443.75 9,-2.5 0,-6"
+ d="m 117.5,443.75 9,-2.5 v -6"
style="fill:none;stroke:url(#linearGradient21649);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path21637"
sodipodi:nodetypes="ccc" />
@@ -91334,7 +89886,7 @@
sodipodi:nodetypes="cccccc"
id="path21639"
style="fill:none;stroke:#333333;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 115.5,442.75 0,31.75 33,0 0,-41 -23.75,0 -9.25,9.25 z"
+ d="m 115.5,442.75 v 31.75 h 33 v -41 h -23.75 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
@@ -91346,12 +89898,12 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccc"
id="path21641"
- d="m 116,443 11,1 -2,-10 -9,9 z"
+ d="m 116,443 11,1 -2,-10 z"
style="display:inline;opacity:0.16000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)" />
<path
inkscape:connector-curvature="0"
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 116,443 0.0108,0.72434 L 126,441 l 0,-7 -1,0 -9,9 z"
+ d="m 116,443 0.0108,0.72434 L 126,441 v -7 h -1 z"
id="path21643"
sodipodi:nodetypes="cccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -91407,7 +89959,7 @@
<path
inkscape:connector-curvature="0"
style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 12.85355,31.53813 c 0,0.552274 -0.447803,0.99986 -1,0.99986 -0.552477,0 -1,-0.447865 -1,-0.99986 0,-0.552554 0.447803,-1.00014 1,-1.00014 0.552197,0 1,0.447866 1,1.00014 l 0,0 0,0 0,0 z"
+ d="m 12.85355,31.53813 c 0,0.552274 -0.447803,0.99986 -1,0.99986 -0.552477,0 -1,-0.447865 -1,-0.99986 0,-0.552554 0.447803,-1.00014 1,-1.00014 0.552197,0 1,0.447866 1,1.00014 z"
id="path16107" />
<path
inkscape:connector-curvature="0"
@@ -91461,7 +90013,7 @@
<path
inkscape:connector-curvature="0"
id="path35139"
- d="m 12.85355,31.53813 c 0,0.552274 -0.447803,0.99986 -1,0.99986 -0.552477,0 -1,-0.447865 -1,-0.99986 0,-0.552554 0.447803,-1.00014 1,-1.00014 0.552197,0 1,0.447866 1,1.00014 l 0,0 0,0 0,0 z"
+ d="m 12.85355,31.53813 c 0,0.552274 -0.447803,0.99986 -1,0.99986 -0.552477,0 -1,-0.447865 -1,-0.99986 0,-0.552554 0.447803,-1.00014 1,-1.00014 0.552197,0 1,0.447866 1,1.00014 z"
style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" />
<path
inkscape:connector-curvature="0"
@@ -91475,7 +90027,7 @@
sodipodi:nodetypes="ccc"
id="path21645"
style="opacity:0.15;fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 147.5,435 0,38.5 -30.5,0"
+ d="m 147.5,435 v 38.5 H 117"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
@@ -91502,7 +90054,7 @@
<path
inkscape:connector-curvature="0"
style="display:inline;fill:url(#linearGradient21594);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
- d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z"
+ d="m 125.5,433.5 h 23 v 41 h -33 v -31 z"
id="path21578"
sodipodi:nodetypes="cccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -91525,7 +90077,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccc"
id="path21582"
- d="m 115,444 12,0 -1,-11 -11,11 z"
+ d="m 115,444 h 12 l -1,-11 z"
style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)" />
<path
inkscape:connector-curvature="0"
@@ -91533,7 +90085,7 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 117.5,443.75 9,-2.5 0,-6"
+ d="m 117.5,443.75 9,-2.5 v -6"
style="fill:none;stroke:url(#linearGradient21596);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path21584"
sodipodi:nodetypes="ccc" />
@@ -91542,7 +90094,7 @@
sodipodi:nodetypes="cccccc"
id="path21586"
style="fill:none;stroke:#333333;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 115.5,442.75 0,31.75 33,0 0,-41 -23.75,0 -9.25,9.25 z"
+ d="m 115.5,442.75 v 31.75 h 33 v -41 h -23.75 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
@@ -91554,12 +90106,12 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccc"
id="path21588"
- d="m 116,443 11,1 -2,-10 -9,9 z"
+ d="m 116,443 11,1 -2,-10 z"
style="display:inline;opacity:0.16000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)" />
<path
inkscape:connector-curvature="0"
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 116,443 0.0108,0.72434 L 126,441 l 0,-7 -1,0 -9,9 z"
+ d="m 116,443 0.0108,0.72434 L 126,441 v -7 h -1 z"
id="path21590"
sodipodi:nodetypes="cccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -91570,7 +90122,7 @@
sodipodi:nodetypes="ccc"
id="path21592"
style="opacity:0.15;fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 147.5,435 0,38.5 -30.5,0"
+ d="m 147.5,435 v 38.5 H 117"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
@@ -91590,7 +90142,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccccc"
id="path23657"
- d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z"
+ d="m 125.5,433.5 h 23 v 41 h -33 v -31 z"
style="display:inline;fill:url(#linearGradient30368);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none" />
<path
inkscape:connector-curvature="0"
@@ -91604,7 +90156,7 @@
<path
inkscape:connector-curvature="0"
style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)"
- d="m 115,444 12,0 -1,-11 -11,11 z"
+ d="m 115,444 h 12 l -1,-11 z"
id="path23661"
sodipodi:nodetypes="cccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -91616,7 +90168,7 @@
sodipodi:nodetypes="ccc"
id="path23663"
style="fill:none;stroke:url(#linearGradient30370);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 117.5,443.75 9,-2.5 0,-6"
+ d="m 117.5,443.75 9,-2.5 v -6"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
@@ -91626,14 +90178,14 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 115.5,442.75 0,31.75 33,0 0,-41 -23.75,0 -9.25,9.25 z"
+ d="m 115.5,442.75 v 31.75 h 33 v -41 h -23.75 z"
style="fill:none;stroke:#333333;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
id="path23665"
sodipodi:nodetypes="cccccc" />
<path
inkscape:connector-curvature="0"
style="display:inline;opacity:0.16000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)"
- d="m 116,443 11,1 -2,-10 -9,9 z"
+ d="m 116,443 11,1 -2,-10 z"
id="path23667"
sodipodi:nodetypes="cccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -91647,14 +90199,14 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccccc"
id="path23669"
- d="m 116,443 0.0108,0.72434 L 126,441 l 0,-7 -1,0 -9,9 z"
+ d="m 116,443 0.0108,0.72434 L 126,441 v -7 h -1 z"
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none" />
<path
inkscape:connector-curvature="0"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 147.5,435 0,38.5 -30.5,0"
+ d="m 147.5,435 v 38.5 H 117"
style="opacity:0.15;fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
id="path23671"
sodipodi:nodetypes="ccc" />
@@ -91662,20 +90214,20 @@
<path
inkscape:connector-curvature="0"
style="display:inline;overflow:visible;visibility:visible;fill:#112b00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate"
- d="m 888,295 1,0 0,14 -1,0 0,-14 z"
+ d="m 888,295 h 1 v 14 h -1 z"
id="path23675"
sodipodi:nodetypes="ccccc" />
<path
inkscape:connector-curvature="0"
id="path23677"
- d="m 900,294 1.00002,-1 0,14 -1.00002,0 0,-13 z"
+ d="m 900,294 1.00002,-1 v 14 H 900 Z"
style="display:inline;overflow:visible;visibility:visible;fill:#112b00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccc" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc"
id="path23679"
- d="m 901.00003,292 0,2.25 -13.00002,2 0,-2.25 13.00002,-2 z"
+ d="m 901.00003,292 v 2.25 l -13.00002,2 V 294 Z"
style="display:inline;overflow:visible;visibility:visible;fill:#112b00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate" />
<g
id="g23681"
@@ -91702,7 +90254,7 @@
<path
inkscape:connector-curvature="0"
style="display:inline;overflow:visible;visibility:visible;opacity:0.38999999;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate"
- d="m 901.00003,292 -1e-5,1 -13.00002,2 10e-6,-1 13.00002,-2 z"
+ d="m 901.00003,292 -1e-5,1 -13.00002,2 10e-6,-1 z"
id="path23694"
sodipodi:nodetypes="ccccc" />
<g
@@ -91753,7 +90305,7 @@
<path
inkscape:connector-curvature="0"
style="display:inline;fill:url(#linearGradient23978);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
- d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z"
+ d="m 125.5,433.5 h 23 v 41 h -33 v -31 z"
id="path23930"
sodipodi:nodetypes="cccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -91776,7 +90328,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccc"
id="path23934"
- d="m 115,444 12,0 -1,-11 -11,11 z"
+ d="m 115,444 h 12 l -1,-11 z"
style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)" />
<path
inkscape:connector-curvature="0"
@@ -91784,7 +90336,7 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 117.5,443.75 9,-2.5 0,-6"
+ d="m 117.5,443.75 9,-2.5 v -6"
style="fill:none;stroke:url(#linearGradient23980);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path23936"
sodipodi:nodetypes="ccc" />
@@ -91793,7 +90345,7 @@
sodipodi:nodetypes="cccccc"
id="path23938"
style="fill:none;stroke:#333333;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 115.5,442.75 0,31.75 33,0 0,-41 -23.75,0 -9.25,9.25 z"
+ d="m 115.5,442.75 v 31.75 h 33 v -41 h -23.75 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
@@ -91805,12 +90357,12 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccc"
id="path23940"
- d="m 116,443 11,1 -2,-10 -9,9 z"
+ d="m 116,443 11,1 -2,-10 z"
style="display:inline;opacity:0.16000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)" />
<path
inkscape:connector-curvature="0"
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 116,443 0.0108,0.72434 L 126,441 l 0,-7 -1,0 -9,9 z"
+ d="m 116,443 0.0108,0.72434 L 126,441 v -7 h -1 z"
id="path23942"
sodipodi:nodetypes="cccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -91821,7 +90373,7 @@
sodipodi:nodetypes="ccc"
id="path23944"
style="opacity:0.15;fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 147.5,435 0,38.5 -30.5,0"
+ d="m 147.5,435 v 38.5 H 117"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
@@ -91831,7 +90383,7 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccc"
id="path23946"
- d="m 952,530 0,10 1,0 1,0 11,0 1,0 1,0 0,-10 -15,0 z m 1,2 1,0 0,1 -1,0 0,-1 z m 12,0 1,0 0,1 -1,0 0,-1 z m -12,3 1,0 0,1 -1,0 0,-1 z m 12,0 1,0 0,1 -1,0 0,-1 z m -12,3 1,0 0,1 -1,0 0,-1 z m 12,0 1,0 0,1 -1,0 0,-1 z"
+ d="m 952,530 v 10 h 1 1 11 1 1 v -10 z m 1,2 h 1 v 1 h -1 z m 12,0 h 1 v 1 h -1 z m -12,3 h 1 v 1 h -1 z m 12,0 h 1 v 1 h -1 z m -12,3 h 1 v 1 h -1 z m 12,0 h 1 v 1 h -1 z"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
<rect
transform="scale(1,-1)"
@@ -91844,14 +90396,14 @@
<path
inkscape:connector-curvature="0"
id="path23952"
- transform="translate(76,0)"
- d="m 876,514 0,17 15,0 0,-17 -1,0 0,1 -1,0 0,-1 -11,0 0,1 -1,0 0,-1 -1,0 z m 1,3 1,0 0,1 -1,0 0,-1 z m 12,0 1,0 0,1 -1,0 0,-1 z m -12,3 1,0 0,1 -1,0 0,-1 z m 12,0 1,0 0,1 -1,0 0,-1 z m -12,3 1,0 0,1 -1,0 0,-1 z m 12,0 1,0 0,1 -1,0 0,-1 z m -12,3 1,0 0,1 -1,0 0,-1 z m 12,0 1,0 0,1 -1,0 0,-1 z m -12,3 1,0 0,1 -1,0 0,-1 z m 12,0 1,0 0,1 -1,0 0,-1 z"
+ transform="translate(76)"
+ d="m 876,514 v 17 h 15 v -17 h -1 v 1 h -1 v -1 h -11 v 1 h -1 v -1 z m 1,3 h 1 v 1 h -1 z m 12,0 h 1 v 1 h -1 z m -12,3 h 1 v 1 h -1 z m 12,0 h 1 v 1 h -1 z m -12,3 h 1 v 1 h -1 z m 12,0 h 1 v 1 h -1 z m -12,3 h 1 v 1 h -1 z m 12,0 h 1 v 1 h -1 z m -12,3 h 1 v 1 h -1 z m 12,0 h 1 v 1 h -1 z"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccc"
style="fill:url(#linearGradient23986);fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 952,507 3,0 0,3 9,0 0,-3 3,0 0,7 -15,0 0,-7 z m 1,0 1,0 -1,0 z m 0,1 0,1 1,0 0,-1 -1,0 z m 0,3 0,1 1,0 0,-1 -1,0 z m 12,-4 1,0 -1,0 z m 0,1 0,1 1,0 0,-1 -1,0 z m 0,3 0,1 1,0 0,-1 -1,0 z"
+ d="m 952,507 h 3 v 3 h 9 v -3 h 3 v 7 h -15 z m 1,0 h 1 z m 0,1 v 1 h 1 v -1 z m 0,3 v 1 h 1 v -1 z m 12,-4 h 1 z m 0,1 v 1 h 1 v -1 z m 0,3 v 1 h 1 v -1 z"
id="path23954" />
<rect
transform="matrix(0,1,1,0,0,0)"
@@ -91904,10 +90456,10 @@
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccccccc"
id="path23966"
- d="m 961.00001,519.00005 -3,0 0,-0.99992 0.99994,0 6e-5,-2.00008 -1,0 0,-1 1,0 0,-1 1.00006,0 0,4.00008 0.99994,0 0,0.99992 z" />
+ d="m 961.00001,519.00005 h -3 v -0.99992 h 0.99994 l 6e-5,-2.00008 h -1 v -1 h 1 v -1 h 1.00006 v 4.00008 h 0.99994 z" />
<path
inkscape:connector-curvature="0"
- d="m 958,525 0,1 2,0 0,-1 -2,0 z m 2,1 0,1 1,0 0,-1 -1,0 z m 0,1 -1,0 0,1 1,0 0,-1 z m -1,1 -1,0 0,1 0,1 3,0 0,-1 -2,0 0,-1 z"
+ d="m 958,525 v 1 h 2 v -1 z m 2,1 v 1 h 1 v -1 z m 0,1 h -1 v 1 h 1 z m -1,1 h -1 v 1 1 h 3 v -1 h -2 z"
id="path23968" />
<rect
style="fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none"
@@ -91933,7 +90485,7 @@
transform="matrix(0,-0.5624964,0.5624964,0,893.12545,612.74956)" />
<path
inkscape:connector-curvature="0"
- d="m 958,536 0,1 2,0 0,-1 -2,0 z m 2,1 0,1 1,0 0,-1 -1,0 z m 0,1 -1,0 0,1 1,0 0,-1 z m 0,1 0,1 1,0 0,-1 -1,0 z m 0,1 -2,0 0,1 2,0 0,-1 z"
+ d="m 958,536 v 1 h 2 v -1 z m 2,1 v 1 h 1 v -1 z m 0,1 h -1 v 1 h 1 z m 0,1 v 1 h 1 v -1 z m 0,1 h -2 v 1 h 2 z"
id="path23976" />
</g>
</g>
@@ -91962,7 +90514,7 @@
<path
inkscape:connector-curvature="0"
style="display:inline;fill:url(#linearGradient22274);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
- d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z"
+ d="m 125.5,433.5 h 23 v 41 h -33 v -31 z"
id="path22249"
sodipodi:nodetypes="cccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -91985,7 +90537,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccc"
id="path22253"
- d="m 115,444 12,0 -1,-11 -11,11 z"
+ d="m 115,444 h 12 l -1,-11 z"
style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)" />
<path
inkscape:connector-curvature="0"
@@ -91993,7 +90545,7 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 117.5,443.75 9,-2.5 0,-6"
+ d="m 117.5,443.75 9,-2.5 v -6"
style="fill:none;stroke:url(#linearGradient22276);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path22264"
sodipodi:nodetypes="ccc" />
@@ -92002,7 +90554,7 @@
sodipodi:nodetypes="cccccc"
id="path22266"
style="fill:none;stroke:#333333;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 115.5,442.75 0,31.75 33,0 0,-41 -23.75,0 -9.25,9.25 z"
+ d="m 115.5,442.75 v 31.75 h 33 v -41 h -23.75 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
@@ -92014,12 +90566,12 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccc"
id="path22268"
- d="m 116,443 11,1 -2,-10 -9,9 z"
+ d="m 116,443 11,1 -2,-10 z"
style="display:inline;opacity:0.16000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)" />
<path
inkscape:connector-curvature="0"
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 116,443 0.0108,0.72434 L 126,441 l 0,-7 -1,0 -9,9 z"
+ d="m 116,443 0.0108,0.72434 L 126,441 v -7 h -1 z"
id="path22270"
sodipodi:nodetypes="cccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -92030,7 +90582,7 @@
sodipodi:nodetypes="ccc"
id="path22272"
style="opacity:0.15;fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 147.5,435 0,38.5 -30.5,0"
+ d="m 147.5,435 v 38.5 H 117"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
@@ -92051,7 +90603,7 @@
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="csssssssssscccsscccscccssccc"
- d="m 16.048489,28.093447 c 0.0098,0.576682 0.196474,1.697902 0.471116,2.577425 0.581566,1.854137 1.56684,3.572658 2.939126,5.086496 1.407488,1.553118 3.138519,2.803227 5.139315,3.68976 2.105357,0.931573 4.384795,1.407488 6.750134,1.403741 2.365339,-0.005 4.644601,-0.488686 6.74896,-1.427017 2.00002,-0.895288 3.731043,-2.148391 5.13754,-3.705517 1.369207,-1.519844 2.352576,-3.241114 2.934089,-5.096258 0.294262,-0.938353 0.476921,-1.889392 0.553238,-2.845308 0.07331,-0.939306 0.04204,-1.883511 -0.09183,-2.823792 -0.259981,-1.835599 -0.896294,-3.556847 -1.872652,-5.12758 -0.895541,-1.441699 -2.047808,-2.70454 -3.417268,-3.766975 0,0 0.002,-0.002 0.002,-0.002 0,0 -13.828458,-10.6197195 -13.828458,-10.6197195 -0.01176,-0.00978 -0.02252,-0.019551 -0.03529,-0.028344 -0.909003,-0.6959264 -3.879837,-0.7738945 -4.87679,-0.075035 -1.01067,0.7057021 -1.091821,1.8092613 -0.195527,2.5482146 1.899775,1.4997633 2.656207,2.2801589 4.566507,3.7797379 0,0 -14.852491,0.167033 -14.852491,0.167033 -1.994685,0 -3.1682609,0.947915 -3.4153947,2.333683 -0.2180771,1.222836 0.7479213,2.738129 2.4800217,2.738129 2.956573,0.0039 5.942111,-0.0069 8.909215,-0.01272 0,0 -16.01999,12.453223 -16.01999,12.453223 -0.020527,0.01564 -0.041053,0.02933 -0.06158,0.04497 -1.4974197,1.148389 -1.9831951,3.059322 -1.0399808,4.268393 0.9598323,1.22959 2.9977653,1.230588 4.5147288,0.006 0,0 8.677593,-7.102098 8.677593,-7.102098 0,0 -0.12511,0.959824 -0.116333,1.535532 l 1e-6,2.6e-5 0,0 0,0 z"
+ d="m 16.048489,28.093447 c 0.0098,0.576682 0.196474,1.697902 0.471116,2.577425 0.581566,1.854137 1.56684,3.572658 2.939126,5.086496 1.407488,1.553118 3.138519,2.803227 5.139315,3.68976 2.105357,0.931573 4.384795,1.407488 6.750134,1.403741 2.365339,-0.005 4.644601,-0.488686 6.74896,-1.427017 2.00002,-0.895288 3.731043,-2.148391 5.13754,-3.705517 1.369207,-1.519844 2.352576,-3.241114 2.934089,-5.096258 0.294262,-0.938353 0.476921,-1.889392 0.553238,-2.845308 0.07331,-0.939306 0.04204,-1.883511 -0.09183,-2.823792 -0.259981,-1.835599 -0.896294,-3.556847 -1.872652,-5.12758 -0.895541,-1.441699 -2.047808,-2.70454 -3.417268,-3.766975 0,0 0.002,-0.002 0.002,-0.002 0,0 -13.828458,-10.6197195 -13.828458,-10.6197195 -0.01176,-0.00978 -0.02252,-0.019551 -0.03529,-0.028344 -0.909003,-0.6959264 -3.879837,-0.7738945 -4.87679,-0.075035 -1.01067,0.7057021 -1.091821,1.8092613 -0.195527,2.5482146 1.899775,1.4997633 2.656207,2.2801589 4.566507,3.7797379 0,0 -14.852491,0.167033 -14.852491,0.167033 -1.994685,0 -3.1682609,0.947915 -3.4153947,2.333683 -0.2180771,1.222836 0.7479213,2.738129 2.4800217,2.738129 2.956573,0.0039 5.942111,-0.0069 8.909215,-0.01272 0,0 -16.01999,12.453223 -16.01999,12.453223 -0.020527,0.01564 -0.041053,0.02933 -0.06158,0.04497 -1.4974197,1.148389 -1.9831951,3.059322 -1.0399808,4.268393 0.9598323,1.22959 2.9977653,1.230588 4.5147288,0.006 0,0 8.677593,-7.102098 8.677593,-7.102098 0,0 -0.12511,0.959824 -0.116333,1.535532 z"
id="path2482"
style="fill:#f57900;fill-rule:evenodd;stroke:#aa4400;stroke-width:1.7812928;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none" />
<ellipse
@@ -92070,7 +90622,7 @@
sodipodi:nodetypes="csssssscssscsssccssscscccsccssssccscsscccssssc" />
<path
inkscape:connector-curvature="0"
- d="m 25.708956,26.064593 c 0.07649,-1.397943 0.759369,-2.631914 1.78592,-3.505519 1.010226,-0.858782 2.366788,-1.383145 3.848625,-1.383145 1.480894,0 2.837456,0.524363 3.847446,1.383145 1.027685,0.873605 1.709741,2.106651 1.787122,3.504594 0.07927,1.438713 -0.49591,2.77459 -1.504012,3.764001 -1.027686,1.007933 -2.493008,1.640678 -4.130556,1.640678 -1.63849,0 -3.103814,-0.632745 -4.131451,-1.640678 -1.00914,-0.989411 -1.58234,-2.325288 -1.503094,-3.763076 l 0,0 0,0 0,0 z"
+ d="m 25.708956,26.064593 c 0.07649,-1.397943 0.759369,-2.631914 1.78592,-3.505519 1.010226,-0.858782 2.366788,-1.383145 3.848625,-1.383145 1.480894,0 2.837456,0.524363 3.847446,1.383145 1.027685,0.873605 1.709741,2.106651 1.787122,3.504594 0.07927,1.438713 -0.49591,2.77459 -1.504012,3.764001 -1.027686,1.007933 -2.493008,1.640678 -4.130556,1.640678 -1.63849,0 -3.103814,-0.632745 -4.131451,-1.640678 -1.00914,-0.989411 -1.58234,-2.325288 -1.503094,-3.763076 z"
id="path2478"
style="fill:#3465a4;fill-rule:evenodd;stroke:none" />
<path
@@ -92093,12 +90645,12 @@
sodipodi:nodetypes="ccccccssssccc"
style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient24809);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="path24789"
- d="m 806.5,114.5 c 0,2.25 2,4 4,4 l 30,0 c 0.4163,0 1,-0.5 1,-1 l 0,-29 c 0,-0.5 -0.5,-1 -1,-1 l -21.02773,0.04419 C 818.98721,87.545209 818.5,87 818.5,86.5 l 0,-3 c 0,-0.5 -0.5,-1 -1,-1 l -10,0 c -0.5,0 -1,0.5 -1,1 l 0,31 z"
+ d="m 806.5,114.5 c 0,2.25 2,4 4,4 h 30 c 0.4163,0 1,-0.5 1,-1 v -29 c 0,-0.5 -0.5,-1 -1,-1 l -21.02773,0.04419 C 818.98721,87.545209 818.5,87 818.5,86.5 v -3 c 0,-0.5 -0.5,-1 -1,-1 h -10 c -0.5,0 -1,0.5 -1,1 z"
inkscape:connector-curvature="0" />
<path
id="path24791"
style="display:inline;overflow:visible;visibility:visible;opacity:0.07999998;fill:url(#linearGradient24811);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none"
- d="m 807.5,89.5 33,0 m -33,12 33,0 m -33,-4 33,0 m -33,-6 33,0 m -33,20 33,0 m -33,2 33,0 m -33,-18 33,0 m -33,-2 33,0 m -20,-6 -13,0 m 0,20 33,0 m -33,-2 33,0 m -33,-2 33,0 m -33,-4 33,0 m -33,10 33,0 m -33,6 33,0"
+ d="m 807.5,89.5 h 33 m -33,12 h 33 m -33,-4 h 33 m -33,-6 h 33 m -33,20 h 33 m -33,2 h 33 m -33,-18 h 33 m -33,-2 h 33 m -20,-6 h -13 m 0,20 h 33 m -33,-2 h 33 m -33,-2 h 33 m -33,-4 h 33 m -33,10 h 33 m -33,6 h 33"
sodipodi:nodetypes="cccccccccccccccccccccccccccccc"
inkscape:connector-curvature="0" />
<path
@@ -92107,42 +90659,42 @@
inkscape:export-filename="/home/jimmac/ximian_art/icons/nautilus/suse93/gnome-fs-directory.png"
sodipodi:nodetypes="csccsczc"
id="path24793"
- d="m 844,118.5 c 3.5,0 5.5,-2 5.5,-5.5 l 0,-18.5 c -11.75604,-1.11e-4 -23.91623,0 -35.5,0 l 0,19.5 c 0,4.5 -7,4 -7,0.25 0,2 2.00002,3.73529 3,3.75 l 34,0.5 z"
+ d="m 844,118.5 c 3.5,0 5.5,-2 5.5,-5.5 V 94.5 c -11.75604,-1.11e-4 -23.91623,0 -35.5,0 V 114 c 0,4.5 -7,4 -7,0.25 0,2 2.00002,3.73529 3,3.75 z"
style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient24813);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
- d="m 807,87 12,0 0.0385,-3.33333 C 819.04423,83.166705 818.97512,83 818.5,83 l -10.92308,0 c -0.47512,0 -0.53846,0.16667 -0.53846,0.66667 L 807,87 Z"
+ d="m 807,87 h 12 l 0.0385,-3.33333 C 819.04423,83.166705 818.97512,83 818.5,83 h -10.92308 c -0.47512,0 -0.53846,0.16667 -0.53846,0.66667 z"
id="path24796"
style="opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
sodipodi:nodetypes="ccssccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
- d="m 840.5,89 0,4.5"
+ d="m 840.5,89 v 4.5"
style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:none;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none"
id="path24799"
inkscape:connector-curvature="0" />
<path
id="path24801"
style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:none;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none"
- d="m 848.5,95.5 0,18 c 0,1.25 0.25,3 -1.25,4"
+ d="m 848.5,95.5 v 18 c 0,1.25 0.25,3 -1.25,4"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccccsc"
- d="m 818.5,83.5 -11,0 0,30 c 0,5 7,5 7,0 l 0,-18 34,0 m -29,-8 c 0,0.5 0.5286,1 1,1 l 20,0"
+ d="m 818.5,83.5 h -11 v 30 c 0,5 7,5 7,0 v -18 h 34 m -29,-8 c 0,0.5 0.5286,1 1,1 h 20"
style="display:inline;opacity:0.75;fill:none;stroke:#ffffff;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path24803"
inkscape:connector-curvature="0" />
<path
- d="m 806.5,113.5 c 0,2.75 2,5 5,5 l 33,0 c 3,0 5,-2 5,-5 l 0,-18 c 0,-0.471405 -0.5286,-1 -1,-1 l -7,0 0,-6 c 0,-0.5 -0.5,-1 -1,-1 l -20.02773,0.04419 C 819.98721,87.54526 819.5,87 819.5,86.5 l 0,-3 c 0,-0.5 -0.5,-1 -1,-1 l -11,0 c -0.5,0 -1,0.5 -1,1 l 0,30 z"
+ d="m 806.5,113.5 c 0,2.75 2,5 5,5 h 33 c 3,0 5,-2 5,-5 v -18 c 0,-0.471405 -0.5286,-1 -1,-1 h -7 v -6 c 0,-0.5 -0.5,-1 -1,-1 l -20.02773,0.04419 C 819.98721,87.54526 819.5,87 819.5,86.5 v -3 c 0,-0.5 -0.5,-1 -1,-1 h -11 c -0.5,0 -1,0.5 -1,1 z"
id="path24805"
style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccsscccssssccc"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:url(#linearGradient24815);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 841.5,94.5 -27,0 c -0.4714,0 -1,0.528595 -1,1 l 0,18 c 0,2.25 -1.25,3 -2.5,3"
+ d="m 841.5,94.5 h -27 c -0.4714,0 -1,0.528595 -1,1 v 18 c 0,2.25 -1.25,3 -2.5,3"
id="path24807"
sodipodi:nodetypes="csscc"
inkscape:connector-curvature="0" />
@@ -92168,7 +90720,7 @@
transform="translate(0,21)">
<path
style="fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 333.25,87 -5.25,0 -1,-1 0,-10"
+ d="M 333.25,87 H 328 l -1,-1 V 76"
id="path44344"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
@@ -92185,7 +90737,7 @@
<path
sodipodi:nodetypes="cccc"
id="path44350"
- d="m 333.25,87 -5.25,0 -1,-1 0,-10"
+ d="M 333.25,87 H 328 l -1,-1 V 76"
style="fill:none;stroke:#e6e6e6;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
@@ -92199,7 +90751,7 @@
<path
sodipodi:nodetypes="cccccc"
id="path44354"
- d="m 328.5,107.5 5,0 m -7,-9 0,8.5 m -4.25,-7 4.5,-4.5"
+ d="m 328.5,107.5 h 5 m -7,-9 v 8.5 m -4.25,-7 4.5,-4.5"
style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
@@ -92214,12 +90766,12 @@
sodipodi:nodetypes="ccccccssssccc"
style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient24839);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
id="path24821"
- d="m 806.5,114.5 c 0,2.25 2,4 4,4 l 30,0 c 0.4163,0 1,-0.5 1,-1 l 0,-29 c 0,-0.5 -0.5,-1 -1,-1 l -21.02773,0.04419 C 818.98721,87.545209 818.5,87 818.5,86.5 l 0,-3 c 0,-0.5 -0.5,-1 -1,-1 l -10,0 c -0.5,0 -1,0.5 -1,1 l 0,31 z" />
+ d="m 806.5,114.5 c 0,2.25 2,4 4,4 h 30 c 0.4163,0 1,-0.5 1,-1 v -29 c 0,-0.5 -0.5,-1 -1,-1 l -21.02773,0.04419 C 818.98721,87.545209 818.5,87 818.5,86.5 v -3 c 0,-0.5 -0.5,-1 -1,-1 h -10 c -0.5,0 -1,0.5 -1,1 z" />
<path
inkscape:connector-curvature="0"
id="path24823"
style="display:inline;overflow:visible;visibility:visible;opacity:0.07999998;fill:url(#linearGradient24841);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none"
- d="m 807.5,89.5 33,0 m -33,12 33,0 m -33,-4 33,0 m -33,-6 33,0 m -33,20 33,0 m -33,2 33,0 m -33,-18 33,0 m -33,-2 33,0 m -20,-6 -13,0 m 0,20 33,0 m -33,-2 33,0 m -33,-2 33,0 m -33,-4 33,0 m -33,10 33,0 m -33,6 33,0"
+ d="m 807.5,89.5 h 33 m -33,12 h 33 m -33,-4 h 33 m -33,-6 h 33 m -33,20 h 33 m -33,2 h 33 m -33,-18 h 33 m -33,-2 h 33 m -20,-6 h -13 m 0,20 h 33 m -33,-2 h 33 m -33,-2 h 33 m -33,-4 h 33 m -33,10 h 33 m -33,6 h 33"
sodipodi:nodetypes="cccccccccccccccccccccccccccccc" />
<path
inkscape:connector-curvature="0"
@@ -92228,42 +90780,42 @@
inkscape:export-filename="/home/jimmac/ximian_art/icons/nautilus/suse93/gnome-fs-directory.png"
sodipodi:nodetypes="csccsczc"
id="path24825"
- d="m 844,118.5 c 3.5,0 5.5,-2 5.5,-5.5 l 0,-16 c -11.75604,-1.11e-4 -23.91623,0 -35.5,0 l 0,17 c 0,4.5 -7,4 -7,0.25 0,2 2.00002,3.73529 3,3.75 l 34,0.5 z"
+ d="m 844,118.5 c 3.5,0 5.5,-2 5.5,-5.5 V 97 c -11.75604,-1.11e-4 -23.91623,0 -35.5,0 v 17 c 0,4.5 -7,4 -7,0.25 0,2 2.00002,3.73529 3,3.75 z"
style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient24843);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
- d="m 807,87 12,0 0.0385,-3.33333 C 819.04423,83.166705 818.97512,83 818.5,83 l -10.92308,0 c -0.47512,0 -0.53846,0.16667 -0.53846,0.66667 L 807,87 Z"
+ d="m 807,87 h 12 l 0.0385,-3.33333 C 819.04423,83.166705 818.97512,83 818.5,83 h -10.92308 c -0.47512,0 -0.53846,0.16667 -0.53846,0.66667 z"
id="path24827"
style="opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
sodipodi:nodetypes="ccssccc" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
- d="m 840.5,89 0,7.5"
+ d="m 840.5,89 v 7.5"
style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:none;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none"
id="path24829" />
<path
inkscape:connector-curvature="0"
id="path24831"
style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:none;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none"
- d="m 848.5,98.75 0,14.75 c 0,1.25 0.25,3 -1.25,4"
+ d="m 848.5,98.75 v 14.75 c 0,1.25 0.25,3 -1.25,4"
sodipodi:nodetypes="ccc" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccsc"
- d="m 818.5,83.5 -11,0 0,30 c 0,5 7,5 7,0 l 0,-16 34,0 m -29,-10 c 0,0.5 0.5286,1 1,1 l 20,0"
+ d="m 818.5,83.5 h -11 v 30 c 0,5 7,5 7,0 v -16 h 34 m -29,-10 c 0,0.5 0.5286,1 1,1 h 20"
style="display:inline;opacity:0.75;fill:none;stroke:#ffffff;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path24833" />
<path
inkscape:connector-curvature="0"
- d="m 806.5,113.5 c 0,2.75 2,5 5,5 l 33,0 c 3,0 5,-2 5,-5 l 0,-16 c 0,-0.471405 -0.5286,-1 -1,-1 l -7,0 0,-8 c 0,-0.5 -0.5,-1 -1,-1 l -20.02773,0.04419 C 819.98721,87.54526 819.5,87 819.5,86.5 l 0,-3 c 0,-0.5 -0.5,-1 -1,-1 l -11,0 c -0.5,0 -1,0.5 -1,1 l 0,30 z"
+ d="m 806.5,113.5 c 0,2.75 2,5 5,5 h 33 c 3,0 5,-2 5,-5 v -16 c 0,-0.471405 -0.5286,-1 -1,-1 h -7 v -8 c 0,-0.5 -0.5,-1 -1,-1 l -20.02773,0.04419 C 819.98721,87.54526 819.5,87 819.5,86.5 v -3 c 0,-0.5 -0.5,-1 -1,-1 h -11 c -0.5,0 -1,0.5 -1,1 z"
id="path24835"
style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccsscccssssccc" />
<path
inkscape:connector-curvature="0"
style="fill:none;stroke:url(#linearGradient24845);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 841.5,96.500004 -27,0 c -0.4714,0 -1,0.528595 -1,1 l 0,15.999996 c 0,2.25 -1.25,3 -2.5,3"
+ d="m 841.5,96.500004 h -27 c -0.4714,0 -1,0.528595 -1,1 V 113.5 c 0,2.25 -1.25,3 -2.5,3"
id="path24837"
sodipodi:nodetypes="csscc" />
</g>
@@ -92276,20 +90828,20 @@
id="g24847"
style="opacity:0.5">
<path
- d="m 806.5,114.5 c 0,2.25 2,4 4,4 l 30,0 c 0.4163,0 1,-0.5 1,-1 l 0,-29 c 0,-0.5 -0.5,-1 -1,-1 l -21.02773,0.04419 C 818.98721,87.545209 818.5,87 818.5,86.5 l 0,-3 c 0,-0.5 -0.5,-1 -1,-1 l -10,0 c -0.5,0 -1,0.5 -1,1 l 0,31 z"
+ d="m 806.5,114.5 c 0,2.25 2,4 4,4 h 30 c 0.4163,0 1,-0.5 1,-1 v -29 c 0,-0.5 -0.5,-1 -1,-1 l -21.02773,0.04419 C 818.98721,87.545209 818.5,87 818.5,86.5 v -3 c 0,-0.5 -0.5,-1 -1,-1 h -10 c -0.5,0 -1,0.5 -1,1 z"
id="path24849"
style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient24867);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccssssccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccccccccccccccccccccccccccc"
- d="m 807.5,89.5 33,0 m -33,12 33,0 m -33,-4 33,0 m -33,-6 33,0 m -33,20 33,0 m -33,2 33,0 m -33,-18 33,0 m -33,-2 33,0 m -20,-6 -13,0 m 0,20 33,0 m -33,-2 33,0 m -33,-2 33,0 m -33,-4 33,0 m -33,10 33,0 m -33,6 33,0"
+ d="m 807.5,89.5 h 33 m -33,12 h 33 m -33,-4 h 33 m -33,-6 h 33 m -33,20 h 33 m -33,2 h 33 m -33,-18 h 33 m -33,-2 h 33 m -20,-6 h -13 m 0,20 h 33 m -33,-2 h 33 m -33,-2 h 33 m -33,-4 h 33 m -33,10 h 33 m -33,6 h 33"
style="display:inline;overflow:visible;visibility:visible;opacity:0.07999998;fill:url(#linearGradient24869);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none"
id="path24851"
inkscape:connector-curvature="0" />
<path
style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient24871);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate"
- d="m 844,118.5 c 3.5,0 5.5,-2 5.5,-5.5 l 0,-18.5 c -11.75604,-1.11e-4 -23.91623,0 -35.5,0 l 0,19.5 c 0,4.5 -7,4 -7,0.25 0,2 2.00002,3.73529 3,3.75 l 34,0.5 z"
+ d="m 844,118.5 c 3.5,0 5.5,-2 5.5,-5.5 V 94.5 c -11.75604,-1.11e-4 -23.91623,0 -35.5,0 V 114 c 0,4.5 -7,4 -7,0.25 0,2 2.00002,3.73529 3,3.75 z"
id="path24853"
sodipodi:nodetypes="csccsczc"
inkscape:export-filename="/home/jimmac/ximian_art/icons/nautilus/suse93/gnome-fs-directory.png"
@@ -92300,36 +90852,36 @@
sodipodi:nodetypes="ccssccc"
style="opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path24855"
- d="m 807,87 12,0 0.0385,-3.33333 C 819.04423,83.166705 818.97512,83 818.5,83 l -10.92308,0 c -0.47512,0 -0.53846,0.16667 -0.53846,0.66667 L 807,87 Z"
+ d="m 807,87 h 12 l 0.0385,-3.33333 C 819.04423,83.166705 818.97512,83 818.5,83 h -10.92308 c -0.47512,0 -0.53846,0.16667 -0.53846,0.66667 z"
inkscape:connector-curvature="0" />
<path
id="path24857"
style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:none;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none"
- d="m 840.5,89 0,4.5"
+ d="m 840.5,89 v 4.5"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccc"
- d="m 848.5,95.5 0,18 c 0,1.25 0.25,3 -1.25,4"
+ d="m 848.5,95.5 v 18 c 0,1.25 0.25,3 -1.25,4"
style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:none;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none"
id="path24859"
inkscape:connector-curvature="0" />
<path
id="path24861"
style="display:inline;opacity:0.75;fill:none;stroke:#ffffff;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 818.5,83.5 -11,0 0,30 c 0,5 7,5 7,0 l 0,-18 34,0 m -29,-8 c 0,0.5 0.5286,1 1,1 l 20,0"
+ d="m 818.5,83.5 h -11 v 30 c 0,5 7,5 7,0 v -18 h 34 m -29,-8 c 0,0.5 0.5286,1 1,1 h 20"
sodipodi:nodetypes="cccccccsc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccsscccssssccc"
style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path24863"
- d="m 806.5,113.5 c 0,2.75 2,5 5,5 l 33,0 c 3,0 5,-2 5,-5 l 0,-18 c 0,-0.471405 -0.5286,-1 -1,-1 l -7,0 0,-6 c 0,-0.5 -0.5,-1 -1,-1 l -20.02773,0.04419 C 819.98721,87.54526 819.5,87 819.5,86.5 l 0,-3 c 0,-0.5 -0.5,-1 -1,-1 l -11,0 c -0.5,0 -1,0.5 -1,1 l 0,30 z"
+ d="m 806.5,113.5 c 0,2.75 2,5 5,5 h 33 c 3,0 5,-2 5,-5 v -18 c 0,-0.471405 -0.5286,-1 -1,-1 h -7 v -6 c 0,-0.5 -0.5,-1 -1,-1 l -20.02773,0.04419 C 819.98721,87.54526 819.5,87 819.5,86.5 v -3 c 0,-0.5 -0.5,-1 -1,-1 h -11 c -0.5,0 -1,0.5 -1,1 z"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="csscc"
id="path24865"
- d="m 841.5,94.5 -27,0 c -0.4714,0 -1,0.528595 -1,1 l 0,18 c 0,2.25 -1.25,3 -2.5,3"
+ d="m 841.5,94.5 h -27 c -0.4714,0 -1,0.528595 -1,1 v 18 c 0,2.25 -1.25,3 -2.5,3"
style="fill:none;stroke:url(#linearGradient24873);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
@@ -92359,7 +90911,7 @@
inkscape:connector-curvature="0" />
<path
style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
- d="m 343,108.25 0,-4.25 4.25,0"
+ d="M 343,108.25 V 104 h 4.25"
id="path44368"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
@@ -92369,7 +90921,7 @@
<path
sodipodi:nodetypes="ccc"
id="path44372"
- d="m 343,108.25 0,-4.25 4.25,0"
+ d="M 343,108.25 V 104 h 4.25"
style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#e6e6e6;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
@@ -92381,12 +90933,12 @@
</g>
<path
style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
- d="m 344,105 0,1 0,1.5 1,0 0,-1.5 1.5,0 0,-1 -1.5,0 -1,0 z"
+ d="m 344,105 v 1 1.5 h 1 V 106 h 1.5 v -1 H 345 Z"
id="path44376"
inkscape:connector-curvature="0" />
</g>
<g
- transform="matrix(-1,0,0,-1,698,204)"
+ transform="rotate(180,349,102)"
id="g44378">
<g
id="g44380">
@@ -92399,7 +90951,7 @@
<path
sodipodi:nodetypes="ccc"
id="path44384"
- d="m 343,108.25 0,-4.25 4.25,0"
+ d="M 343,108.25 V 104 h 4.25"
style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
@@ -92407,7 +90959,7 @@
id="g44386">
<path
style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#e6e6e6;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
- d="m 343,108.25 0,-4.25 4.25,0"
+ d="M 343,108.25 V 104 h 4.25"
id="path44388"
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0" />
@@ -92420,7 +90972,7 @@
</g>
<path
id="path44392"
- d="m 344,105 0,1 0,1.5 1,0 0,-1.5 1.5,0 0,-1 -1.5,0 -1,0 z"
+ d="m 344,105 v 1 1.5 h 1 V 106 h 1.5 v -1 H 345 Z"
style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
@@ -92433,13 +90985,13 @@
<path
sodipodi:nodetypes="ccc"
id="path44396"
- d="m 350.5,99.5 4,0 0,-4"
+ d="m 350.5,99.5 h 4 v -4"
style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccc"
id="path44398"
- d="m 347.5,103.5 -4.5,0 c -0.25,0 -0.5,0.25 -0.5,0.5 l 0,4.5"
+ d="M 347.5,103.5 H 343 c -0.25,0 -0.5,0.25 -0.5,0.5 v 4.5"
style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
@@ -92476,7 +91028,7 @@
<path
inkscape:connector-curvature="0"
style="display:inline;fill:url(#linearGradient21875-7-1-0-1);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
- d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z"
+ d="m 125.5,433.5 h 23 v 41 h -33 v -31 z"
id="path21859-9"
sodipodi:nodetypes="cccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -92499,7 +91051,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccc"
id="path21863-6"
- d="m 115,444 12,0 -1,-11 -11,11 z"
+ d="m 115,444 h 12 l -1,-11 z"
style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011-6-7-0-8)" />
<path
inkscape:connector-curvature="0"
@@ -92507,7 +91059,7 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 117.5,443.75 9,-2.5 0,-6"
+ d="m 117.5,443.75 9,-2.5 v -6"
style="fill:none;stroke:url(#linearGradient21877-3-2-7-2);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path21865-6"
sodipodi:nodetypes="ccc" />
@@ -92516,7 +91068,7 @@
sodipodi:nodetypes="cccccc"
id="path21867-2"
style="fill:none;stroke:#333333;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 115.5,442.75 0,31.75 33,0 0,-41 -23.75,0 -9.25,9.25 z"
+ d="m 115.5,442.75 v 31.75 h 33 v -41 h -23.75 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
@@ -92528,12 +91080,12 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccc"
id="path21869-3"
- d="m 116,443 11,1 -2,-10 -9,9 z"
+ d="m 116,443 11,1 -2,-10 z"
style="display:inline;opacity:0.16000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011-6-7-0-8)" />
<path
inkscape:connector-curvature="0"
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 116,443 0.0108,0.72434 L 126,441 l 0,-7 -1,0 -9,9 z"
+ d="m 116,443 0.0108,0.72434 L 126,441 v -7 h -1 z"
id="path21871-8"
sodipodi:nodetypes="cccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -92544,7 +91096,7 @@
sodipodi:nodetypes="ccc"
id="path21873-2"
style="opacity:0.15;fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 147.5,435 0,38.5 -30.5,0"
+ d="m 147.5,435 v 38.5 H 117"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
@@ -92556,26 +91108,26 @@
<path
id="path61236"
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient34959-9-2-1);fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:0.17893334;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
- d="m 919.5,356.5067 0,-3 c 0,-1.73575 1.26424,-3 3,-3 l 5,0 c 1.73576,0 3,-1.26425 3,-3 l 0,-3.0064 2.5,0.006 c 2,0 3.5,2.5 3.5,6 0,3.5 -1.25,6 -3.5,6 -4.98134,0 -12.77318,0 -2.5,0 l 0,2.75 c 0,2.5 -2,3.24997 -5.5,3.24998 l 0,2e-5 c -3.5,0.0104 -5.5,-0.75 -5.5,-3.25 l 0,-2.7628"
+ d="m 919.5,356.5067 v -3 c 0,-1.73575 1.26424,-3 3,-3 h 5 c 1.73576,0 3,-1.26425 3,-3 v -3.0064 l 2.5,0.006 c 2,0 3.5,2.5 3.5,6 0,3.5 -1.25,6 -3.5,6 -4.98134,0 -12.77318,0 -2.5,0 v 2.75 c 0,2.5 -2,3.24997 -5.5,3.24998 v 2e-5 c -3.5,0.0104 -5.5,-0.75 -5.5,-3.25 v -2.7628"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cssssccsscsccsc" />
<path
sodipodi:nodetypes="cssssccsscsccsc"
inkscape:connector-curvature="0"
- d="m 930.5,344.5 0,3 c 0,1.73575 -1.26424,3 -3,3 l -5,0 c -1.73576,0 -3,1.26425 -3,3 l 0,3.0064 -2.5,-0.006 c -2,0 -3.5,-2.5 -3.5,-6 0,-3.5 1.25,-6 3.5,-6 4.98134,0 12.77318,0 2.5,0 l 0,-2.75 c 0,-2.5 2,-3.24997 5.5,-3.24998 l 0,-2e-5 c 3.5,-0.0104 5.5,0.75 5.5,3.25 l 0,2.7628"
+ d="m 930.5,344.5 v 3 c 0,1.73575 -1.26424,3 -3,3 h -5 c -1.73576,0 -3,1.26425 -3,3 v 3.0064 l -2.5,-0.006 c -2,0 -3.5,-2.5 -3.5,-6 0,-3.5 1.25,-6 3.5,-6 4.98134,0 12.77318,0 2.5,0 v -2.75 c 0,-2.5 2,-3.24997 5.5,-3.24998 v -2e-5 c 3.5,-0.0104 5.5,0.75 5.5,3.25 v 2.7628"
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient34961-3-6-5);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.17893334;marker:none;enable-background:accumulate"
id="path61233" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccscccsccccsccccc"
id="path61167"
- d="m 925,338.50002 c -3.5,10e-6 -5.5,0.74998 -5.5,3.24998 l 0,2.75 5.5,0 -8,0 c -2.25,0 -3.5,2.5 -3.5,6 0,3.5 1.5,6 3.5,6 l 2.5,0.0128 0,2.9872 c 0,2 2,3.01281 5.5,3.0128 3.5,-1e-5 5.5,-1.0128 5.5,-3.0128 l 0,-3 -5.5,0 8,0 c 2,0 3.5,-2.5 3.5,-6 0,-3.5 -1.5,-6 -3.5,-6 l -2.5,0.0128 0,-2.7628 c 0,-2.5 -2,-3.26045 -5.5,-3.25 z"
+ d="m 925,338.50002 c -3.5,10e-6 -5.5,0.74998 -5.5,3.24998 v 2.75 h 5.5 -8 c -2.25,0 -3.5,2.5 -3.5,6 0,3.5 1.5,6 3.5,6 l 2.5,0.0128 V 359.5 c 0,2 2,3.01281 5.5,3.0128 3.5,-1e-5 5.5,-1.0128 5.5,-3.0128 v -3 h -5.5 8 c 2,0 3.5,-2.5 3.5,-6 0,-3.5 -1.5,-6 -3.5,-6 l -2.5,0.0128 V 341.75 c 0,-2.5 -2,-3.26045 -5.5,-3.25 z"
style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.8627451" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc"
id="path61169"
- d="m 930.5,344.5 0,3 c 0,1.73575 -1.26424,3 -3,3 l -5,0 c -1.73576,0 -3,1.26425 -3,3 l 0,3"
+ d="m 930.5,344.5 v 3 c 0,1.73575 -1.26424,3 -3,3 h -5 c -1.73576,0 -3,1.26425 -3,3 v 3"
style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.78431373;marker:none;enable-background:accumulate" />
<circle
r="1"
@@ -92594,24 +91146,24 @@
id="g61345">
<path
style="fill:none;stroke:url(#linearGradient34963-5-9-1);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
- d="m 920.5,343.25 0,-1.5 c 0,-1.75 1.5,-2.25 4.5,-2.25 3,0 4.5,0.5 4.5,2.25 l 0,4.75"
+ d="m 920.5,343.25 v -1.5 c 0,-1.75 1.5,-2.25 4.5,-2.25 3,0 4.5,0.5 4.5,2.25 v 4.75"
id="path61333"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cszsc" />
<path
style="fill:none;stroke:url(#linearGradient34965-1-5-2);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 925.5,345 0,0.25 -0.25,0.25 -8.25,0 c -1.5,0 -2.5,2 -2.5,5 0,3 1.28917,5 2.5,5 l 1.5,0"
+ d="m 925.5,345 v 0.25 l -0.25,0.25 H 917 c -1.5,0 -2.5,2 -2.5,5 0,3 1.28917,5 2.5,5 h 1.5"
id="path61335"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccszsc" />
<path
style="fill:none;stroke:none"
- d="m 920.75,343.5 4.5,0 0.25,0.25 0,0.5"
+ d="m 920.75,343.5 h 4.5 l 0.25,0.25 v 0.5"
id="path61337"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:none"
- d="m 918.5,355.25 0,-1.75 c 0,-2.25 1.75,-4 4,-4 l 4.5,0 c 1.75,0 2.5,-0.75 2.5,-2.5 l 0,-0.5"
+ d="m 918.5,355.25 v -1.75 c 0,-2.25 1.75,-4 4,-4 h 4.5 c 1.75,0 2.5,-0.75 2.5,-2.5 v -0.5"
id="path61339"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cssssc" />
@@ -92625,30 +91177,30 @@
</g>
<g
style="opacity:0.8;stroke:#ff0000"
- transform="matrix(-1,0,0,-1,1850,701)"
+ transform="rotate(180,925,350.5)"
id="g34104">
<path
sodipodi:nodetypes="cszsc"
inkscape:connector-curvature="0"
id="path34106"
- d="m 920.5,343.25 0,-1.5 c 0,-1.75 1.5,-2.25 4.5,-2.25 3,0 4.5,0.5 4.5,2.25 l 0,4.75"
+ d="m 920.5,343.25 v -1.5 c 0,-1.75 1.5,-2.25 4.5,-2.25 3,0 4.5,0.5 4.5,2.25 v 4.75"
style="fill:none;stroke:none" />
<path
sodipodi:nodetypes="csc"
inkscape:connector-curvature="0"
id="path34108"
- d="m 914.5,350.5 c 0,3 1.28917,5 2.5,5 l 1.5,0"
+ d="m 914.5,350.5 c 0,3 1.28917,5 2.5,5 h 1.5"
style="fill:none;stroke:url(#linearGradient34969-4-4-1);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path34110"
- d="m 920.75,343.5 4.5,0 0.25,0.25 0,0.5"
+ d="m 920.75,343.5 h 4.5 l 0.25,0.25 v 0.5"
style="fill:none;stroke:url(#linearGradient34971-5-0-9);stroke-linecap:round;stroke-linejoin:round" />
<path
sodipodi:nodetypes="cssssc"
inkscape:connector-curvature="0"
id="path34113"
- d="m 918.5,355.5 0,-2 c 0,-2.25 1.75,-4 4,-4 l 4.5,0 c 1.75,0 2.5,-0.75 2.5,-2.5 l 0,-0.5"
+ d="m 918.5,355.5 v -2 c 0,-2.25 1.75,-4 4,-4 h 4.5 c 1.75,0 2.5,-0.75 2.5,-2.5 v -0.5"
style="fill:none;stroke:url(#radialGradient34973-2-5-7);stroke-linecap:round;stroke-linejoin:round" />
<circle
r="1"
@@ -92659,7 +91211,7 @@
transform="matrix(1.5161021,0,0,1.5161021,-475.84616,-176.50693)" />
<path
style="fill:none;stroke:none"
- d="m 925.5,345 0,0.25 -0.25,0.25 -8.25,0 c -1.5,0 -2.5,2 -2.5,5"
+ d="m 925.5,345 v 0.25 l -0.25,0.25 H 917 c -1.5,0 -2.5,2 -2.5,5"
id="path34901"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccsc" />
@@ -92691,7 +91243,7 @@
<path
inkscape:connector-curvature="0"
style="display:inline;fill:url(#linearGradient22274-8);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
- d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z"
+ d="m 125.5,433.5 h 23 v 41 h -33 v -31 z"
id="path22249-8"
sodipodi:nodetypes="cccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -92714,7 +91266,7 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccc"
id="path22253-5"
- d="m 115,444 12,0 -1,-11 -11,11 z"
+ d="m 115,444 h 12 l -1,-11 z"
style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011-5)" />
<path
inkscape:connector-curvature="0"
@@ -92722,7 +91274,7 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 117.5,443.75 9,-2.5 0,-6"
+ d="m 117.5,443.75 9,-2.5 v -6"
style="fill:none;stroke:url(#linearGradient22276-5);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path22264-3"
sodipodi:nodetypes="ccc" />
@@ -92731,7 +91283,7 @@
sodipodi:nodetypes="cccccc"
id="path22266-6"
style="fill:none;stroke:#333333;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 115.5,442.75 0,31.75 33,0 0,-41 -23.75,0 -9.25,9.25 z"
+ d="m 115.5,442.75 v 31.75 h 33 v -41 h -23.75 z"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
@@ -92743,12 +91295,12 @@
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
sodipodi:nodetypes="cccc"
id="path22268-0"
- d="m 116,443 11,1 -2,-10 -9,9 z"
+ d="m 116,443 11,1 -2,-10 z"
style="display:inline;opacity:0.16000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011-5)" />
<path
inkscape:connector-curvature="0"
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 116,443 0.0108,0.72434 L 126,441 l 0,-7 -1,0 -9,9 z"
+ d="m 116,443 0.0108,0.72434 L 126,441 v -7 h -1 z"
id="path22270-1"
sodipodi:nodetypes="cccccc"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
@@ -92759,7 +91311,7 @@
sodipodi:nodetypes="ccc"
id="path22272-3"
style="opacity:0.15;fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 147.5,435 0,38.5 -30.5,0"
+ d="m 147.5,435 v 38.5 H 117"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
@@ -92780,7 +91332,7 @@
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="csssssssssscccsscccscccssccc"
- d="m 16.048489,28.093447 c 0.0098,0.576682 0.196474,1.697902 0.471116,2.577425 0.581566,1.854137 1.56684,3.572658 2.939126,5.086496 1.407488,1.553118 3.138519,2.803227 5.139315,3.68976 2.105357,0.931573 4.384795,1.407488 6.750134,1.403741 2.365339,-0.005 4.644601,-0.488686 6.74896,-1.427017 2.00002,-0.895288 3.731043,-2.148391 5.13754,-3.705517 1.369207,-1.519844 2.352576,-3.241114 2.934089,-5.096258 0.294262,-0.938353 0.476921,-1.889392 0.553238,-2.845308 0.07331,-0.939306 0.04204,-1.883511 -0.09183,-2.823792 -0.259981,-1.835599 -0.896294,-3.556847 -1.872652,-5.12758 -0.895541,-1.441699 -2.047808,-2.70454 -3.417268,-3.766975 0,0 0.002,-0.002 0.002,-0.002 0,0 -13.828458,-10.6197195 -13.828458,-10.6197195 -0.01176,-0.00978 -0.02252,-0.019551 -0.03529,-0.028344 -0.909003,-0.6959264 -3.879837,-0.7738945 -4.87679,-0.075035 -1.01067,0.7057021 -1.091821,1.8092613 -0.195527,2.5482146 1.899775,1.4997633 2.656207,2.2801589 4.566507,3.7797379 0,0 -14.852491,0.167033 -14.852491,0.167033 -1.994685,0 -3.1682609,0.947915 -3.4153947,2.333683 -0.2180771,1.222836 0.7479213,2.738129 2.4800217,2.738129 2.956573,0.0039 5.942111,-0.0069 8.909215,-0.01272 0,0 -16.01999,12.453223 -16.01999,12.453223 -0.020527,0.01564 -0.041053,0.02933 -0.06158,0.04497 -1.4974197,1.148389 -1.9831951,3.059322 -1.0399808,4.268393 0.9598323,1.22959 2.9977653,1.230588 4.5147288,0.006 0,0 8.677593,-7.102098 8.677593,-7.102098 0,0 -0.12511,0.959824 -0.116333,1.535532 l 1e-6,2.6e-5 0,0 0,0 z"
+ d="m 16.048489,28.093447 c 0.0098,0.576682 0.196474,1.697902 0.471116,2.577425 0.581566,1.854137 1.56684,3.572658 2.939126,5.086496 1.407488,1.553118 3.138519,2.803227 5.139315,3.68976 2.105357,0.931573 4.384795,1.407488 6.750134,1.403741 2.365339,-0.005 4.644601,-0.488686 6.74896,-1.427017 2.00002,-0.895288 3.731043,-2.148391 5.13754,-3.705517 1.369207,-1.519844 2.352576,-3.241114 2.934089,-5.096258 0.294262,-0.938353 0.476921,-1.889392 0.553238,-2.845308 0.07331,-0.939306 0.04204,-1.883511 -0.09183,-2.823792 -0.259981,-1.835599 -0.896294,-3.556847 -1.872652,-5.12758 -0.895541,-1.441699 -2.047808,-2.70454 -3.417268,-3.766975 0,0 0.002,-0.002 0.002,-0.002 0,0 -13.828458,-10.6197195 -13.828458,-10.6197195 -0.01176,-0.00978 -0.02252,-0.019551 -0.03529,-0.028344 -0.909003,-0.6959264 -3.879837,-0.7738945 -4.87679,-0.075035 -1.01067,0.7057021 -1.091821,1.8092613 -0.195527,2.5482146 1.899775,1.4997633 2.656207,2.2801589 4.566507,3.7797379 0,0 -14.852491,0.167033 -14.852491,0.167033 -1.994685,0 -3.1682609,0.947915 -3.4153947,2.333683 -0.2180771,1.222836 0.7479213,2.738129 2.4800217,2.738129 2.956573,0.0039 5.942111,-0.0069 8.909215,-0.01272 0,0 -16.01999,12.453223 -16.01999,12.453223 -0.020527,0.01564 -0.041053,0.02933 -0.06158,0.04497 -1.4974197,1.148389 -1.9831951,3.059322 -1.0399808,4.268393 0.9598323,1.22959 2.9977653,1.230588 4.5147288,0.006 0,0 8.677593,-7.102098 8.677593,-7.102098 0,0 -0.12511,0.959824 -0.116333,1.535532 z"
id="path2482-9"
style="fill:#dd6d00;fill-rule:evenodd;stroke:#993d00;stroke-width:1.7812928;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none" />
<ellipse
@@ -92799,7 +91351,7 @@
sodipodi:nodetypes="csssssscssscsssccssscscccsccssssccscsscccssssc" />
<path
inkscape:connector-curvature="0"
- d="m 25.708956,26.064593 c 0.07649,-1.397943 0.759369,-2.631914 1.78592,-3.505519 1.010226,-0.858782 2.366788,-1.383145 3.848625,-1.383145 1.480894,0 2.837456,0.524363 3.847446,1.383145 1.027685,0.873605 1.709741,2.106651 1.787122,3.504594 0.07927,1.438713 -0.49591,2.77459 -1.504012,3.764001 -1.027686,1.007933 -2.493008,1.640678 -4.130556,1.640678 -1.63849,0 -3.103814,-0.632745 -4.131451,-1.640678 -1.00914,-0.989411 -1.58234,-2.325288 -1.503094,-3.763076 l 0,0 0,0 0,0 z"
+ d="m 25.708956,26.064593 c 0.07649,-1.397943 0.759369,-2.631914 1.78592,-3.505519 1.010226,-0.858782 2.366788,-1.383145 3.848625,-1.383145 1.480894,0 2.837456,0.524363 3.847446,1.383145 1.027685,0.873605 1.709741,2.106651 1.787122,3.504594 0.07927,1.438713 -0.49591,2.77459 -1.504012,3.764001 -1.027686,1.007933 -2.493008,1.640678 -4.130556,1.640678 -1.63849,0 -3.103814,-0.632745 -4.131451,-1.640678 -1.00914,-0.989411 -1.58234,-2.325288 -1.503094,-3.763076 z"
id="path2478-8"
style="fill:#2f5b94;fill-rule:evenodd;stroke:none" />
<path
@@ -92823,14 +91375,14 @@
style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" />
<path
style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:2.4000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
- d="m 114.5,192.5 -3,0 0,-3 m 13,0 0,3 -3,0 m -0.25,-13 3.25,0 0,3 m -13,0 0,-3 3,0"
+ d="m 114.5,192.5 h -3 v -3 m 13,0 v 3 h -3 m -0.25,-13 h 3.25 v 3 m -13,0 v -3 h 3"
id="path37498-7"
sodipodi:nodetypes="cccccccccccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccccccccc"
id="rect38140-7"
- d="m 114.5,192.5 -3,0 0,-3 m 13,0 0,3 -3,0 m -0.25,-13 3.25,0 0,3 m -13,0 0,-3 3,0"
+ d="m 114.5,192.5 h -3 v -3 m 13,0 v 3 h -3 m -0.25,-13 h 3.25 v 3 m -13,0 v -3 h 3"
style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient18199);stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
inkscape:connector-curvature="0" />
<g
@@ -92842,13 +91394,13 @@
<path
id="path39832-9"
style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#1a1a1a;stroke-width:4.66725159;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
- d="m -4.3682386,287.81345 1.5,0 c 0.999089,0 2.07885534,1.30514 2.50490386,2.78207 1.06592652,3.69512 2.80867074,9.82446 5.88525404,9.96406 2.6782554,0 1.6181317,-5.11535 3.1736046,-5.26275 l 0.25,0"
+ d="m -4.3682386,287.81345 h 1.5 c 0.999089,0 2.07885534,1.30514 2.50490386,2.78207 1.06592652,3.69512 2.80867074,9.82446 5.88525404,9.96406 2.6782554,0 1.6181317,-5.11535 3.1736046,-5.26275 h 0.25"
sodipodi:nodetypes="cssccc"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccscc"
- d="m 9.3647983,295.22328 -0.4793018,0 c -2.2335161,0 0.1796731,4.94901 -3.4398065,5.09984 -4.44796752,0.18536 -5.37272213,-12.59185 -8.0767581,-12.56237 l -2,0"
- style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#a8df84;stroke-width:2.93474906;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="M 9.3647983,295.22328 H 8.8854965 c -2.2335161,0 0.1796731,4.94901 -3.4398065,5.09984 -4.44796752,0.18536 -5.37272213,-12.59185 -8.0767581,-12.56237 h -2"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#a8df84;stroke-width:2.93474913;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path39834-2"
inkscape:connector-curvature="0" />
<g
@@ -92856,7 +91408,7 @@
transform="matrix(1.6674711,0,0,1.6674711,-416.35106,-776.00982)"
style="display:inline;enable-background:new">
<path
- style="fill:none;stroke:#4b2f1e;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:#4b2f1e;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path1374"
sodipodi:type="arc"
sodipodi:cx="41"
@@ -92864,11 +91416,11 @@
sodipodi:rx="4.2499995"
sodipodi:ry="4.2499995"
sodipodi:start="6.1086524"
- sodipodi:end="7.5049158"
+ sodipodi:end="1.2217305"
sodipodi:open="true"
- d="m 45.185432,872.62412 c 0.358149,2.03116 -0.793733,4.02628 -2.731847,4.73169" />
+ d="m 45.185432,872.62412 a 4.2499995,4.2499995 0 0 1 -2.731847,4.73169" />
<path
- style="fill:none;stroke:#4b2f1e;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:#4b2f1e;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path1376"
sodipodi:type="arc"
sodipodi:cx="41"
@@ -92878,9 +91430,9 @@
sodipodi:start="4.4505896"
sodipodi:end="4.9741884"
sodipodi:open="true"
- d="m 39.188267,866.60064 c 1.186888,-0.31802 2.436579,-0.31802 3.623467,0" />
+ d="m 39.188267,866.60064 a 7,7 0 0 1 3.623467,0" />
<path
- d="m 47.76148,875.17385 c -0.318025,1.18689 -0.942871,2.26916 -1.811733,3.13802"
+ d="m 47.76148,875.17385 a 6.9999995,6.9999995 0 0 1 -1.811733,3.13802"
sodipodi:open="true"
sodipodi:end="0.78539816"
sodipodi:start="0.26179939"
@@ -92890,9 +91442,9 @@
sodipodi:cx="41"
sodipodi:type="arc"
id="path1378"
- style="fill:none;stroke:#4b2f1e;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+ style="fill:none;stroke:#4b2f1e;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
- d="m 39.546414,877.35581 c -1.938113,-0.70541 -3.089995,-2.70053 -2.731846,-4.73169"
+ d="m 39.546414,877.35581 a 4.2499995,4.2499995 0 0 1 -2.731846,-4.73169"
sodipodi:open="true"
sodipodi:end="3.3161256"
sodipodi:start="1.9198622"
@@ -92902,9 +91454,9 @@
sodipodi:cx="41"
sodipodi:type="arc"
id="path1380"
- style="fill:none;stroke:#4b2f1e;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+ style="fill:none;stroke:#4b2f1e;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
- style="fill:none;stroke:#4b2f1e;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:#4b2f1e;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path1382"
sodipodi:type="arc"
sodipodi:cx="41"
@@ -92914,7 +91466,7 @@
sodipodi:start="2.3561945"
sodipodi:end="2.8797933"
sodipodi:open="true"
- d="m 36.050253,878.31187 c -0.868862,-0.86886 -1.493708,-1.95113 -1.811733,-3.13802" />
+ d="M 36.050253,878.31187 A 6.9999995,6.9999995 0 0 1 34.23852,875.17385" />
<rect
ry="2.75"
rx="2.75"
@@ -92950,9 +91502,9 @@
height="3"
width="3.0000007"
id="rect1390"
- style="fill:none;stroke:url(#radialGradient29130);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+ style="fill:none;stroke:url(#radialGradient29130);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
- style="fill:none;stroke:#ffb36b;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:#ffb36b;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path1392"
sodipodi:type="arc"
sodipodi:cx="41"
@@ -92962,9 +91514,9 @@
sodipodi:start="1.9198622"
sodipodi:end="3.3161256"
sodipodi:open="true"
- d="m 39.546414,877.35581 c -1.938113,-0.70541 -3.089995,-2.70053 -2.731846,-4.73169" />
+ d="m 39.546414,877.35581 a 4.2499995,4.2499995 0 0 1 -2.731846,-4.73169" />
<path
- d="m 36.050253,878.31187 c -0.868862,-0.86886 -1.493708,-1.95113 -1.811733,-3.13802"
+ d="M 36.050253,878.31187 A 6.9999995,6.9999995 0 0 1 34.23852,875.17385"
sodipodi:open="true"
sodipodi:end="2.8797933"
sodipodi:start="2.3561945"
@@ -92974,9 +91526,9 @@
sodipodi:cx="41"
sodipodi:type="arc"
id="path1394"
- style="fill:none;stroke:#ffb36b;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+ style="fill:none;stroke:#ffb36b;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
- d="m 38.875,877.04273 c -0.321653,-0.18571 -0.617575,-0.41278 -0.880204,-0.6754"
+ d="m 38.875,877.04273 a 4.2499995,4.2499995 0 0 1 -0.880204,-0.6754"
sodipodi:open="true"
sodipodi:end="2.3561945"
sodipodi:start="2.0943951"
@@ -92986,9 +91538,9 @@
sodipodi:cx="41"
sodipodi:type="arc"
id="path1396"
- style="opacity:0.7;fill:none;stroke:#ff8919;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+ style="opacity:0.7;fill:none;stroke:#ff8919;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
- style="opacity:0.7;fill:none;stroke:#ff8919;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="opacity:0.7;fill:none;stroke:#ff8919;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path1398"
sodipodi:type="arc"
sodipodi:cx="41"
@@ -92998,9 +91550,9 @@
sodipodi:start="2.3561945"
sodipodi:end="2.6179939"
sodipodi:open="true"
- d="m 36.050253,878.31187 c -0.432565,-0.43257 -0.806561,-0.91997 -1.11243,-1.44975" />
+ d="m 36.050253,878.31187 a 6.9999995,6.9999995 0 0 1 -1.11243,-1.44975" />
<path
- style="fill:none;stroke:#4b2f1e;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:#4b2f1e;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path1400"
sodipodi:type="arc"
sodipodi:cx="-41"
@@ -93010,12 +91562,12 @@
sodipodi:start="0.87266463"
sodipodi:end="2.268928"
sodipodi:open="true"
- d="m -38.268152,-870.10643 c -1.579966,1.32575 -3.88373,1.32575 -5.463696,0"
+ d="m -38.268152,-870.10643 a 4.2500005,4.2500005 0 0 1 -5.463696,0"
inkscape:transform-center-x="-2.2499995"
inkscape:transform-center-y="-2.25"
- transform="scale(-1,-1)" />
+ transform="scale(-1)" />
<path
- d="m -38.268152,-870.10643 c -1.579966,1.32575 -3.88373,1.32575 -5.463696,0"
+ d="m -38.268152,-870.10643 a 4.2500005,4.2500005 0 0 1 -5.463696,0"
sodipodi:open="true"
sodipodi:end="2.268928"
sodipodi:start="0.87266463"
@@ -93025,12 +91577,12 @@
sodipodi:cx="-41"
sodipodi:type="arc"
id="path1402"
- style="fill:none;stroke:#ffb36b;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:#ffb36b;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
inkscape:transform-center-x="-2.2499995"
inkscape:transform-center-y="-2.25"
- transform="scale(-1,-1)" />
+ transform="scale(-1)" />
<path
- style="fill:none;stroke:#ffb36b;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:#ffb36b;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path1404"
sodipodi:type="arc"
sodipodi:cx="-41"
@@ -93040,12 +91592,12 @@
sodipodi:start="1.3089969"
sodipodi:end="1.8325957"
sodipodi:open="true"
- d="m -39.188266,-866.60064 c -1.186888,0.31803 -2.436579,0.31803 -3.623467,0"
+ d="m -39.188266,-866.60064 a 7.0000005,7.0000005 0 0 1 -3.623467,0"
inkscape:transform-center-y="-3.7500001"
- transform="scale(-1,-1)"
+ transform="scale(-1)"
inkscape:transform-center-x="-3.7499995" />
<path
- style="opacity:0.3;fill:none;stroke:#ffe4cb;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="opacity:0.3;fill:none;stroke:#ffe4cb;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path1406"
sodipodi:type="arc"
sodipodi:cx="41"
@@ -93055,9 +91607,9 @@
sodipodi:start="4.0142573"
sodipodi:end="4.9741884"
sodipodi:open="true"
- d="m 38.268153,870.10643 c 1.062216,-0.8913 2.492452,-1.20838 3.831828,-0.84949" />
+ d="m 38.268153,870.10643 a 4.25,4.25 0 0 1 3.831828,-0.84949" />
<path
- d="m 39.188267,866.60064 c 1.186888,-0.31802 2.436579,-0.31802 3.623467,0"
+ d="m 39.188267,866.60064 a 7,7 0 0 1 3.623467,0"
sodipodi:open="true"
sodipodi:end="4.9741884"
sodipodi:start="4.4505896"
@@ -93067,9 +91619,9 @@
sodipodi:cx="41"
sodipodi:type="arc"
id="path1408"
- style="opacity:0.3;fill:none;stroke:#ffe4cb;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+ style="opacity:0.3;fill:none;stroke:#ffe4cb;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path1410"
sodipodi:type="arc"
sodipodi:cx="41"
@@ -93079,9 +91631,9 @@
sodipodi:start="4.4505896"
sodipodi:end="4.712389"
sodipodi:open="true"
- d="M 39.188267,866.60064 C 39.779161,866.44231 40.388261,866.36212 41,866.36212" />
+ d="M 39.188267,866.60064 A 6.9999995,6.9999995 0 0 1 41,866.36212" />
<path
- d="m 38.268153,870.10643 c 0.475408,-0.39891 1.032412,-0.68887 1.631866,-0.84949"
+ d="m 38.268153,870.10643 a 4.25,4.25 0 0 1 1.631866,-0.84949"
sodipodi:open="true"
sodipodi:end="4.4505896"
sodipodi:start="4.0142573"
@@ -93091,10 +91643,10 @@
sodipodi:cx="41"
sodipodi:type="arc"
id="path1412"
- style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+ style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
sodipodi:open="true"
- style="fill:none;stroke:#ffb36b;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:#ffb36b;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path1414"
sodipodi:type="arc"
sodipodi:cx="41"
@@ -93103,10 +91655,10 @@
sodipodi:ry="7"
sodipodi:start="0.26179939"
sodipodi:end="0.78539816"
- d="m 47.761481,875.17385 c -0.318026,1.18689 -0.942871,2.26916 -1.811734,3.13802" />
+ d="m 47.761481,875.17385 a 7,7 0 0 1 -1.811734,3.13802" />
<path
- d="m 45.185432,872.62412 c 0.358149,2.03116 -0.793733,4.02628 -2.731847,4.73169"
- sodipodi:end="7.5049158"
+ d="m 45.185432,872.62412 a 4.2499995,4.2499995 0 0 1 -2.731847,4.73169"
+ sodipodi:end="1.2217305"
sodipodi:start="6.1086524"
sodipodi:ry="4.2499995"
sodipodi:rx="4.2499995"
@@ -93114,7 +91666,7 @@
sodipodi:cx="41"
sodipodi:type="arc"
id="path1416"
- style="fill:none;stroke:#ffb36b;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="fill:none;stroke:#ffb36b;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
sodipodi:open="true" />
</g>
<g
@@ -93123,7 +91675,7 @@
id="g63699">
<path
inkscape:connector-curvature="0"
- style="opacity:0.3;fill:none;stroke:#422200;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.3;fill:none;stroke:#422200;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m -102.5625,554.75 c -0.0429,0.005 -0.0849,0.0154 -0.125,0.0312 l -4.5,1.75 c -0.1919,0.0756 -0.31653,0.26258 -0.3125,0.4688 v 6.5 c 0.003,0.18741 0.11203,0.35691 0.28125,0.4375 l 4.5,2.25 c 0.13787,0.0682 0.29963,0.0682 0.4375,0 l 4.499997,-2.25 c 0.169224,-0.0806 0.278188,-0.25009 0.28125,-0.4375 V 557 c 0.004,-0.2062 -0.120622,-0.39315 -0.3125,-0.46875 l -4.499997,-1.75 c -0.0792,-0.0318 -0.16537,-0.0426 -0.25,-0.0312 z"
id="path63697" />
<g
@@ -93136,7 +91688,7 @@
inkscape:connector-curvature="0"
id="path63667"
d="m 328.5,-107.25 -4.5,1.75 v 6.5 l 4.5,2.25 4.5,-2.25 v -6.5 z"
- style="fill:#422200;fill-opacity:1;fill-rule:evenodd;stroke:#422200;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#422200;fill-opacity:1;fill-rule:evenodd;stroke:#422200;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="ccccccc" />
<g
transform="translate(179,-179)"
@@ -93146,7 +91698,7 @@
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
- style="fill:#915515;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#915515;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
d="m 154,80 v -6.5 l -4.5,-1.75 v 10.5 z"
id="path63669"
sodipodi:nodetypes="ccccc" />
@@ -93154,7 +91706,7 @@
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
- style="fill:#efa351;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#efa351;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
d="M 324,-99.00012 V -105.5 l 4.5,-1.75 0.5,0.25 v 10 l -0.5,0.25 z"
id="path63673"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
@@ -93172,7 +91724,7 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
sodipodi:nodetypes="ccccc"
- style="fill:#f5ca9b;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;fill:#f5ca9b;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
d="m 324,-105.5 4.5,-1.75 4.5,1.75 -4.5,2 z"
id="path63677" />
</g>
@@ -93183,7 +91735,7 @@
d="m 145.5,94.25012 c 0,0 4,1.75 4,1.75 l 4,-1.75"
id="path63681" />
<rect
- style="opacity:0.25;fill:url(#linearGradient63886);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:url(#linearGradient63886);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06666696px;marker:none;enable-background:accumulate"
id="rect63683"
width="1"
height="6.7500019"
@@ -93191,7 +91743,7 @@
y="96.000122" />
</g>
<rect
- style="opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
id="rect63665"
width="16"
height="16"
@@ -93205,10 +91757,6 @@
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<circle
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
r="8"
cy="118"
cx="132"
@@ -93216,50 +91764,427 @@
inkscape:export-xdpi="90"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
id="circle63689"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#422200;stroke-width:1.97436094;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- transform="matrix(0.6425292,0,0,0.642531,44.523834,146.81699)"
- d="m 140,118 c 0,4.41828 -3.58172,8 -8,8 -4.41828,0 -8,-3.58172 -8,-8 0,-4.41828 3.58172,-8 8,-8 4.41828,0 8,3.58172 8,8 z" />
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#422200;stroke-width:1.97436094;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.6425292,0,0,0.642531,44.523834,146.81699)" />
<circle
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
r="8"
cy="118"
cx="132"
- style="opacity:0.8;fill:url(#linearGradient63894);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
+ style="display:inline;opacity:0.8;fill:url(#linearGradient63894);fill-opacity:1;fill-rule:nonzero;stroke:none"
id="circle63691"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
- transform="matrix(-0.5858806,-0.06590218,0.06677852,-0.5812167,198.80048,299.96262)"
- d="m 140,118 c 0,4.41828 -3.58172,8 -8,8 -4.41828,0 -8,-3.58172 -8,-8 0,-4.41828 3.58172,-8 8,-8 4.41828,0 8,3.58172 8,8 z" />
+ transform="matrix(-0.5858806,-0.06590218,0.06677852,-0.5812167,198.80048,299.96262)" />
<circle
- sodipodi:ry="8"
- sodipodi:rx="8"
- sodipodi:cy="118"
- sodipodi:cx="132"
r="8"
cy="118"
cx="132"
transform="matrix(0.4991181,0,0,0.4991107,63.460522,163.7471)"
- style="opacity:0.5;fill:none;stroke:url(#linearGradient63719);stroke-width:2.54167628;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ style="opacity:0.5;fill:none;stroke:url(#linearGradient63719);stroke-width:2.54167628;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="circle63693"
inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
inkscape:export-xdpi="90"
- inkscape:export-ydpi="90"
- d="m 140,118 c 0,4.41828 -3.58172,8 -8,8 -4.41828,0 -8,-3.58172 -8,-8 0,-4.41828 3.58172,-8 8,-8 4.41828,0 8,3.58172 8,8 z" />
+ inkscape:export-ydpi="90" />
</g>
</g>
</g>
<path
id="path39836-9"
- style="display:inline;overflow:visible;visibility:visible;opacity:0.35;fill:none;stroke:url(#radialGradient23167-6);stroke-width:3.53503864;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.35;fill:none;stroke:url(#radialGradient23167-6);stroke-width:3.53503871;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="M 5.6770841,300.48165 C 0.7393262,300.21066 0.54777814,287.99792 -2.9522219,287.99792"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
</g>
</g>
+ <g
+ transform="translate(63,-21)"
+ style="display:inline;enable-background:new"
+ id="ICON_LIBRARY_DATA_DIRECT-3">
+ <g
+ transform="translate(0,128)"
+ id="g24024-6">
+ <rect
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
+ id="rect22150-0"
+ width="16"
+ height="16"
+ x="299"
+ y="365" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
+ sodipodi:nodetypes="cccccc"
+ id="path12337-6"
+ d="m 304.20488,366.47791 h 8.33334 v 13 h -11 l -1e-5,-10 z"
+ style="display:inline;fill:url(#linearGradient14966);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
+ inkscape:connector-curvature="0" />
+ <path
+ transform="matrix(1.2999758,0,0,1.2999988,365.56499,31.43979)"
+ sodipodi:nodetypes="ccc"
+ id="path12339-2"
+ style="display:inline;opacity:0.7;fill:none;stroke:#000000;stroke-width:0.76923829px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1;filter:url(#filter31351-5)"
+ d="M -48.500031,260.50809 -46.5,260.5 l -3.1e-5,-1.99191"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cccc"
+ id="path12341-6"
+ d="m 301.01612,370 h 4 v -4 z"
+ style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cccc"
+ id="path12343-18"
+ style="display:inline;fill:none;stroke:url(#linearGradient14968);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 302.51612,371.00001 v 7.5 m 3.5,-11 h 5.5"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
+ d="m 301.53822,368.97791 v 10.5 h 11 v -13 h -8.5 z"
+ style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path12345-79"
+ sodipodi:nodetypes="cccccc"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ transform="rotate(90,390.14304,130.94532)"
+ mask="url(#mask43822-1)"
+ sodipodi:nodetypes="cccccccc"
+ id="path43815-2"
+ d="m 765.0088,212.5 -3.9824,3.5 -0.0176,-2 h -6.9736 l -0.0132,-3 h 6.9868 l 0.004,-2 z"
+ style="display:inline;opacity:0.93999993;fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new"
+ inkscape:transform-center-x="1"
+ inkscape:transform-center-y="2"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ id="path39836-9"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.35;fill:none;stroke:url(#radialGradient23167-6);stroke-width:2.12000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 456.1861,210.99286 c -2.96123,-0.16251 -3.0761,-7.48662 -5.17509,-7.48662"
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0" />
+ <g
+ id="ICON_OUTLINER_OB_GREASEPENCIL"
+ transform="translate(0.39249986,-20.900649)"
+ inkscape:transform-center-x="3.3362538"
+ inkscape:transform-center-y="-0.19625023">
+ <g
+ id="ICON_GREASEPENCIL-8"
+ transform="translate(230.63274,419.89563)"
+ style="display:inline;enable-background:new">
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccsccsc"
+ d="M 52.75,44.25 62.5,34.5 c 0,-1 -0.5,-1.5 -1,-2 -0.498692,-0.498692 -1,-1 -2,-1 l -9.75,9.75 c 1,0 1.501308,0.501308 2,1 0.5,0.5 1,1 1,2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ff921d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate"
+ id="path40242-2" />
+ <rect
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#d40000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:new"
+ id="rect40244-9"
+ width="16"
+ height="16"
+ x="47"
+ y="31" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path40246-1"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient14276);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate"
+ d="M 60.75,36.25 62.5,34.5 c 0,-1 -0.5,-1.5 -1,-2 -0.498692,-0.498692 -1,-1 -2,-1 l -1.75,1.75 z"
+ sodipodi:nodetypes="ccsccc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path40248-5"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ffb36b;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate"
+ d="m 57.5,35.5 -1,-1 -6.75,6.75 1.75,0.25 z"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc"
+ d="m 59.5,37.25 -1,-0.75 -6,6 0.25,1.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#915515;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate"
+ id="path40250-1" />
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:none;stroke:url(#linearGradient14278);stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 59.75,37.25 -3,-3"
+ id="path40252-9"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc"
+ id="path40254-1"
+ d="m 60.75,36.25 -3,-3"
+ style="fill:none;stroke:url(#linearGradient14280);stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc"
+ id="path40256-53"
+ d="m 57.75,33.25 2.98375,3.003125 -1.0075,1.0075 -3.0225,-2.98375 z"
+ style="fill:url(#linearGradient14283);fill-opacity:1;stroke-width:1px" />
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccscc"
+ id="path40258-5"
+ d="m 61,36 1.5,-1.5 c 0,-1 -0.5,-1.5 -1,-2 -0.498692,-0.498692 -1,-1 -2,-1 L 58,33"
+ style="fill:none;stroke:#422200;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:none;stroke:#422200;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 58.25,32.75 50,41 l -2,4 -0.5,0.5 0.25,0.75 0.75,0.25 0.5,-0.5 4,-2 8.25,-8.25"
+ id="path40260-2"
+ sodipodi:nodetypes="ccccccccc" />
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:url(#linearGradient14285);fill-opacity:1;stroke-width:1px"
+ d="M 50.25,41 48.5,44.25 49.75,45.5 53,43.75 C 53,43.25 52.5,42.5 52,42 51.501308,41.501308 50.75,41 50.25,41 Z"
+ id="path40262-8"
+ sodipodi:nodetypes="ccccsc" />
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc"
+ id="path40264-3"
+ d="m 48.25,45.75 0.5,-0.5"
+ style="fill:#445016;stroke:#22280b;stroke-width:2.4000001;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none" />
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:none;stroke:#ff7d1f;stroke-width:1.10000002;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 48.25,45.75 48.5,45.5"
+ id="path40266-7"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path40268-5"
+ d="M 52.527427,43.527587 61.514313,34.48568"
+ style="opacity:0.3;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round" />
+ </g>
+ </g>
+ <g
+ style="display:inline;enable-background:new"
+ id="ICON_GREASEPENCIL_STROKE_PAINT"
+ transform="translate(266.99521,94.053617)">
+ <rect
+ y="420"
+ x="-52"
+ height="16"
+ width="16"
+ id="rect52875-1"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate" />
+ <g
+ transform="translate(-556.98389,452.95862)"
+ style="display:inline;enable-background:new"
+ id="g52877-9">
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path52879-6"
+ d="m 506.48389,-17.45862 v -1 c 4.75,-1 2.25,-4.5 6.31852,-4.187139 0.70341,0.496889 0.93148,1.187139 0.93148,2.122782 0,3.064357 -2.5,3.314357 -7.25,3.064357 z"
+ style="fill:#9d6c53;fill-opacity:1;fill-rule:evenodd;stroke:#241f1c;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <path
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.7;fill:url(#radialGradient53141-7);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.0015748;marker:none;enable-background:accumulate;stroke-miterlimit:4;stroke-dasharray:none"
+ d="m 505.98389,-17.522977 c 5.75,-0.75 2.71305,-4.172284 6.75,-5.25 0.70341,0.496889 1.61991,1.711436 1.75268,2.186272 0,3.572675 -4.12319,3.136436 -8.50268,3.063728 z"
+ id="path52881-9"
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cccc"
+ id="path52883-7"
+ d="m 515.48389,-25.95862 -2.75,3.25 1.75,2.25 3,-3"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#0b1728;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:url(#linearGradient18738);fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="m 514.98389,-24.95862 -2.25,2.5 1.37109,1.875 2.37891,-2.375 z"
+ id="path52885-9"
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0" />
+ <path
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#2b0000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 520.48389,-31.45862 -6,6.75 2,2.25 4,-4"
+ id="path52887-0"
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path52889-7"
+ d="m 520.98389,-31.95862 -6.75,7.75 1.75,1.75 5,-4.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient18740);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.23326063;marker:none;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ <path
+ style="opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 513.48389,-22.45862 7,-8.25"
+ id="path52891-7"
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0" />
+ <path
+ style="display:inline;opacity:0.4;fill:none;stroke:url(#linearGradient18742);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 511.98389,-21.772977 -1.25,1.25 c -0.96702,0.819679 -0.76749,2.123051 -3.25,2.314357"
+ id="path52893-8"
+ sodipodi:nodetypes="ccc"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ mask="url(#mask57450-1)"
+ id="g52895-9"
+ style="display:inline;fill:#80e5ff;fill-opacity:1;stroke-width:0.40062992;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="translate(-378.00003,264.99999)">
+ <path
+ style="opacity:1;fill:#87cdde;fill-opacity:1;fill-rule:evenodd;stroke:#006177;stroke-width:0.68031496;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 340.52507,157.1673 c -4.65215,-1.9076 -9.0183,-2.27194 -11.67231,-1.19747 -2.65402,1.07446 -3.04943,2.9213 -1.3719,5.06005 1.67752,2.13875 3.11758,1.38733 -0.37025,8.25442 l 4.5898,-1.83157 c 2.10085,-3.70699 5.48334,-6.25237 0.56856,-8.6375 -4.91478,-2.38513 3.51302,-4.33874 7.74599,0.60659 0.45432,0.36287 0.51011,-2.25452 0.51011,-2.25452 z"
+ id="path18759"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="czzcczcc" />
+ </g>
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ id="path52921-4"
+ d="m -48.861802,421.80073 c -3.614809,1.74353 0.05277,4.41585 0.801676,5.7456"
+ style="display:inline;opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
+ inkscape:connector-curvature="0"
+ inkscape:transform-center-y="0.1162415"
+ sodipodi:nodetypes="cc" />
+ </g>
+ <g
+ style="display:inline;enable-background:new"
+ id="ICON_OUTLINER_DATA_GREASEPENCIL"
+ transform="translate(-20.586794,-41.888693)"
+ inkscape:transform-center-x="3.3362538"
+ inkscape:transform-center-y="-0.19625023"
+ inkscape:label="#ICON_OUTLINER_DATA_GREASEPENCIL">
+ <g
+ id="ICON_GREASEPENCIL-8-7"
+ transform="translate(230.63274,419.89563)"
+ style="display:inline;enable-background:new">
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccsccsc"
+ d="M 52.75,44.25 62.5,34.5 c 0,-1 -0.5,-1.5 -1,-2 -0.498692,-0.498692 -1,-1 -2,-1 l -9.75,9.75 c 1,0 1.501308,0.501308 2,1 0.5,0.5 1,1 1,2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#999999;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate"
+ id="path40242-2-4" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path40246-1-6"
+ style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient18808);fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:0.69999999;marker:none;enable-background:accumulate"
+ d="M 60.75,36.25 62.5,34.5 c 0,-1 -0.5,-1.5 -1,-2 -0.498692,-0.498692 -1,-1 -2,-1 l -1.75,1.75 z"
+ sodipodi:nodetypes="ccsccc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path40248-5-8"
+ style="display:inline;overflow:visible;visibility:visible;fill:#d7d7d7;fill-opacity:0.80000001;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate"
+ d="m 57.5,35.5 -1,-1 -6.75,6.75 1.75,0.25 z"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc"
+ d="m 59.5,37.25 -1,-0.75 -6,6 0.25,1.5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#555555;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate"
+ id="path40250-1-7" />
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:none;stroke:url(#linearGradient18810);stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 59.75,37.25 -3,-3"
+ id="path40252-9-4"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc"
+ id="path40254-1-1"
+ d="m 60.75,36.25 -3,-3"
+ style="fill:none;stroke:url(#linearGradient18812);stroke-width:0.69999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc"
+ id="path40256-53-7"
+ d="m 57.75,33.25 2.98375,3.003125 -1.0075,1.0075 -3.0225,-2.98375 z"
+ style="fill:url(#linearGradient18814);fill-opacity:1.0;stroke-width:1px" />
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccscc"
+ id="path40258-5-9"
+ d="m 61,36 1.5,-1.5 c 0,-1 -0.5,-1.5 -1,-2 -0.498692,-0.498692 -1,-1 -2,-1 L 58,33"
+ style="fill:none;stroke:#1a1a1a;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:none;stroke:#1a1a1a;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 58.25,32.75 50,41 l -2,4 -0.5,0.5 0.25,0.75 0.75,0.25 0.5,-0.5 4,-2 8.25,-8.25"
+ id="path40260-2-2"
+ sodipodi:nodetypes="ccccccccc" />
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:url(#linearGradient18816);fill-opacity:1.0;stroke-width:1px"
+ d="M 50.25,41 48.5,44.25 49.75,45.5 53,43.75 C 53,43.25 52.5,42.5 52,42 51.501308,41.501308 50.75,41 50.25,41 Z"
+ id="path40262-8-0"
+ sodipodi:nodetypes="ccccsc" />
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc"
+ id="path40264-3-5"
+ d="m 48.25,45.75 0.5,-0.5"
+ style="fill:#445016;stroke:#22280b;stroke-width:2.4000001;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none" />
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:none;stroke:#cccccc;stroke-width:1.10000002;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.7019608"
+ d="M 48.25,45.75 48.5,45.5"
+ id="path40266-7-3"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path40268-5-5"
+ d="M 52.527427,43.527587 61.514313,34.48568"
+ style="opacity:0.3;fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round" />
+ </g>
+ </g>
+ <g
+ style="display:inline;enable-background:new"
+ id="ICON_OBJECT_ORIGIN"
+ transform="translate(315.00208,-21.040241)"
+ inkscape:label="#ICON_OBJECT_ORIGIN">
+ <rect
+ style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate"
+ id="rect37586-3"
+ width="16"
+ height="16"
+ x="110"
+ y="178" />
+ <path
+ sodipodi:nodetypes="cccccccccccc"
+ id="path37608-1"
+ d="m 114.5,192.5 h -3 v -3 m 13,0 v 3 h -3 m -0.25,-13 h 3.25 v 3 m -13,0 v -3 h 3"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:2.4000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
+ inkscape:connector-curvature="0" />
+ <path
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient33545);stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new"
+ d="m 114.5,192.5 h -3 v -3 m 13,0 v 3 h -3 m -0.25,-13 h 3.25 v 3 m -13,0 v -3 h 3"
+ id="path37610-3"
+ sodipodi:nodetypes="cccccccccccc"
+ inkscape:connector-curvature="0" />
+ <g
+ style="display:inline;enable-background:new"
+ transform="translate(-352.73032,109.25636)"
+ id="g14791-4">
+ <rect
+ ry="1.4768832"
+ rx="1.4768832"
+ y="74.512817"
+ x="468.5"
+ height="3.9871812"
+ width="4.0018005"
+ id="rect14793-4"
+ style="display:inline;overflow:visible;visibility:visible;fill:#f09432;fill-opacity:1;fill-rule:nonzero;stroke:#462400;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:6.18177891;stroke-opacity:1;marker:none;enable-background:accumulate" />
+ <rect
+ rx="0.49075836"
+ ry="0.49075836"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient33547);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:6.18177891;stroke-opacity:1;marker:none;enable-background:accumulate"
+ id="rect14795-4"
+ width="1.9981995"
+ height="2.012816"
+ x="469.5018"
+ y="75.5" />
+ </g>
+ </g>
</g>
<g
inkscape:groupmode="layer"
diff --git a/release/datafiles/blender_icons16/icon16_greasepencil_stroke_paint.dat b/release/datafiles/blender_icons16/icon16_greasepencil_stroke_paint.dat
new file mode 100644
index 00000000000..d6c40a15edc
--- /dev/null
+++ b/release/datafiles/blender_icons16/icon16_greasepencil_stroke_paint.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_library_data_override.dat b/release/datafiles/blender_icons16/icon16_library_data_override.dat
new file mode 100644
index 00000000000..3879fedc234
--- /dev/null
+++ b/release/datafiles/blender_icons16/icon16_library_data_override.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_object_origin.dat b/release/datafiles/blender_icons16/icon16_object_origin.dat
new file mode 100644
index 00000000000..67078427366
--- /dev/null
+++ b/release/datafiles/blender_icons16/icon16_object_origin.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_outliner_data_greasepencil.dat b/release/datafiles/blender_icons16/icon16_outliner_data_greasepencil.dat
new file mode 100644
index 00000000000..77adaf114f0
--- /dev/null
+++ b/release/datafiles/blender_icons16/icon16_outliner_data_greasepencil.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_outliner_ob_greasepencil.dat b/release/datafiles/blender_icons16/icon16_outliner_ob_greasepencil.dat
new file mode 100644
index 00000000000..ded4b49f959
--- /dev/null
+++ b/release/datafiles/blender_icons16/icon16_outliner_ob_greasepencil.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_greasepencil_stroke_paint.dat b/release/datafiles/blender_icons32/icon32_greasepencil_stroke_paint.dat
new file mode 100644
index 00000000000..7c50bbe955d
--- /dev/null
+++ b/release/datafiles/blender_icons32/icon32_greasepencil_stroke_paint.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_library_data_override.dat b/release/datafiles/blender_icons32/icon32_library_data_override.dat
new file mode 100644
index 00000000000..40e7fbdb155
--- /dev/null
+++ b/release/datafiles/blender_icons32/icon32_library_data_override.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_object_origin.dat b/release/datafiles/blender_icons32/icon32_object_origin.dat
new file mode 100644
index 00000000000..41d583da6b5
--- /dev/null
+++ b/release/datafiles/blender_icons32/icon32_object_origin.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_outliner_data_greasepencil.dat b/release/datafiles/blender_icons32/icon32_outliner_data_greasepencil.dat
new file mode 100644
index 00000000000..fc64f306be7
--- /dev/null
+++ b/release/datafiles/blender_icons32/icon32_outliner_data_greasepencil.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_outliner_ob_greasepencil.dat b/release/datafiles/blender_icons32/icon32_outliner_ob_greasepencil.dat
new file mode 100644
index 00000000000..04eca21ce1f
--- /dev/null
+++ b/release/datafiles/blender_icons32/icon32_outliner_ob_greasepencil.dat
Binary files differ
diff --git a/release/datafiles/locale b/release/datafiles/locale
-Subproject 469c949d1ca882be19daa128842f813b72a944d
+Subproject c93ed11a47b3016cf59711ec16de2e2e94c30e9
diff --git a/release/datafiles/preview.blend b/release/datafiles/preview.blend
index 7eaa7a63eeb..c22245eacc5 100644
--- a/release/datafiles/preview.blend
+++ b/release/datafiles/preview.blend
Binary files differ
diff --git a/release/datafiles/preview_cycles.blend b/release/datafiles/preview_cycles.blend
index d813e23b4cf..ed32ea530d6 100644
--- a/release/datafiles/preview_cycles.blend
+++ b/release/datafiles/preview_cycles.blend
Binary files differ
diff --git a/release/datafiles/splash.png b/release/datafiles/splash.png
index 1cd817a8e8c..80ad5929f76 100644
--- a/release/datafiles/splash.png
+++ b/release/datafiles/splash.png
Binary files differ
diff --git a/release/datafiles/splash_2x.png b/release/datafiles/splash_2x.png
index 2ba54b92cff..79cfe5301ef 100644
--- a/release/datafiles/splash_2x.png
+++ b/release/datafiles/splash_2x.png
Binary files differ
diff --git a/release/datafiles/workspaces.blend b/release/datafiles/workspaces.blend
new file mode 100644
index 00000000000..4e5e9646830
--- /dev/null
+++ b/release/datafiles/workspaces.blend
Binary files differ
diff --git a/release/scripts/addons b/release/scripts/addons
-Subproject c88411ff7776a2db5d6ef6117a1b2faa42a9561
+Subproject 371960484a38fc64e0a2635170a41a0d8ab2f6b
diff --git a/release/scripts/addons_contrib b/release/scripts/addons_contrib
-Subproject 310578043dec1aae382eb6a447ae1d103792d7e
+Subproject a8515cfdfe9a98127b592f36fcbe51b7e23b969
diff --git a/release/scripts/freestyle/modules/parameter_editor.py b/release/scripts/freestyle/modules/parameter_editor.py
index b093920a4cb..b00b30a9a21 100644
--- a/release/scripts/freestyle/modules/parameter_editor.py
+++ b/release/scripts/freestyle/modules/parameter_editor.py
@@ -1206,7 +1206,7 @@ integration_types = {
# main function for parameter processing
def process(layer_name, lineset_name):
scene = getCurrentScene()
- layer = scene.render.layers[layer_name]
+ layer = scene.view_layers[layer_name]
lineset = layer.freestyle_settings.linesets[lineset_name]
linestyle = lineset.linestyle
@@ -1538,7 +1538,7 @@ def process(layer_name, lineset_name):
raise RuntimeError("No Thickness modifier with type", type(m), m)
# -- Textures -- #
has_tex = False
- if scene.render.use_shading_nodes:
+ if scene.view_render.use_shading_nodes:
if linestyle.use_nodes and linestyle.node_tree:
shaders_list.append(BlenderTextureShader(linestyle.node_tree))
has_tex = True
diff --git a/release/scripts/modules/bpy/__init__.py b/release/scripts/modules/bpy/__init__.py
index 6312c25065f..a80135a59e1 100644
--- a/release/scripts/modules/bpy/__init__.py
+++ b/release/scripts/modules/bpy/__init__.py
@@ -39,6 +39,7 @@ from _bpy import (
app,
context,
data,
+ msgbus,
props,
types,
)
diff --git a/release/scripts/modules/bpy_extras/__init__.py b/release/scripts/modules/bpy_extras/__init__.py
index c8d12070de8..cd176e77aed 100644
--- a/release/scripts/modules/bpy_extras/__init__.py
+++ b/release/scripts/modules/bpy_extras/__init__.py
@@ -29,5 +29,6 @@ __all__ = (
"image_utils",
"keyconfig_utils",
"mesh_utils",
+ "node_utils",
"view3d_utils",
)
diff --git a/release/scripts/modules/bpy_extras/node_utils.py b/release/scripts/modules/bpy_extras/node_utils.py
new file mode 100644
index 00000000000..9a2be5b9f68
--- /dev/null
+++ b/release/scripts/modules/bpy_extras/node_utils.py
@@ -0,0 +1,50 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# <pep8-80 compliant>
+
+__all__ = (
+ "find_node_input",
+ "find_output_node",
+ )
+
+
+# XXX Names are not unique. Returns the first match.
+def find_node_input(node, name):
+ for input in node.inputs:
+ if input.name == name:
+ return input
+
+ return None
+
+# Return the output node to display in the UI. In case multiple node types are
+# specified, node types earlier in the list get priority.
+def find_output_node(ntree, nodetypes):
+ if ntree:
+ output_node = None
+ for nodetype in nodetypes:
+ for node in ntree.nodes:
+ if getattr(node, "type", None) == nodetype:
+ if getattr(node, "is_active_output", True):
+ return node
+ if not output_node:
+ output_node = node
+ if output_node:
+ return output_node
+
+ return None
diff --git a/release/scripts/modules/bpy_extras/object_utils.py b/release/scripts/modules/bpy_extras/object_utils.py
index 9d9b5df1f9a..31938f3ad3e 100644
--- a/release/scripts/modules/bpy_extras/object_utils.py
+++ b/release/scripts/modules/bpy_extras/object_utils.py
@@ -103,9 +103,9 @@ def add_object_align_init(context, operator):
return location * rotation
-def object_data_add(context, obdata, operator=None, use_active_layer=True, name=None):
+def object_data_add(context, obdata, operator=None, name=None):
"""
- Add an object using the view context and preference to to initialize the
+ Add an object using the view context and preference to initialize the
location, rotation and layer.
:arg context: The context to use.
@@ -117,75 +117,58 @@ def object_data_add(context, obdata, operator=None, use_active_layer=True, name=
:arg name: Optional name
:type name: string
:return: the newly created object in the scene.
- :rtype: :class:`bpy.types.ObjectBase`
+ :rtype: :class:`bpy.types.Object`
"""
+ workspace = context.workspace
scene = context.scene
+ layer = context.view_layer
+ layer_collection = context.layer_collection
- # ugh, could be made nicer
- for ob in scene.objects:
- ob.select = False
+ for ob in layer.objects:
+ ob.select_set(action='DESELECT')
+
+ if not layer_collection:
+ # when there is no collection linked to this view_layer create one
+ scene_collection = scene.master_collection.collections.new("")
+ layer_collection = layer.collections.link(scene_collection)
+ else:
+ scene_collection = layer_collection.collection
if name is None:
name = "Object" if obdata is None else obdata.name
+ obj_act = layer.objects.active
obj_new = bpy.data.objects.new(name, obdata)
-
- base = scene.objects.link(obj_new)
- base.select = True
-
- v3d = None
- if context.space_data and context.space_data.type == 'VIEW_3D':
- v3d = context.space_data
-
- if v3d and v3d.local_view:
- base.layers_from_view(context.space_data)
-
- if operator is not None and any(operator.layers):
- base.layers = operator.layers
- else:
- if use_active_layer:
- if v3d and v3d.local_view:
- base.layers[scene.active_layer] = True
- else:
- if v3d and not v3d.lock_camera_and_layers:
- base.layers = [True if i == v3d.active_layer
- else False for i in range(len(v3d.layers))]
- else:
- base.layers = [True if i == scene.active_layer
- else False for i in range(len(scene.layers))]
- else:
- if v3d:
- base.layers_from_view(context.space_data)
-
- if operator is not None:
- operator.layers = base.layers
-
+ scene_collection.objects.link(obj_new)
+ obj_new.select_set(action='SELECT')
obj_new.matrix_world = add_object_align_init(context, operator)
- obj_act = scene.objects.active
-
# XXX
# caused because entering edit-mode does not add a empty undo slot!
if context.user_preferences.edit.use_enter_edit_mode:
if not (obj_act and
- obj_act.mode == 'EDIT' and
- obj_act.type == obj_new.type):
-
+ obj_act.type == obj_new.type and
+ workspace.object_mode == 'EDIT'
+ ):
_obdata = bpy.data.meshes.new(name)
obj_act = bpy.data.objects.new(_obdata.name, _obdata)
obj_act.matrix_world = obj_new.matrix_world
- scene.objects.link(obj_act)
- scene.objects.active = obj_act
+ scene_collection.objects.link(obj_act)
+ layer.objects.active = obj_act
bpy.ops.object.mode_set(mode='EDIT')
# need empty undo step
bpy.ops.ed.undo_push(message="Enter Editmode")
# XXX
- if obj_act and obj_act.mode == 'EDIT' and obj_act.type == obj_new.type:
+ if (obj_act and
+ obj_act.type == obj_new.type and
+ workspace.object_mode == 'EDIT'
+ ):
bpy.ops.mesh.select_all(action='DESELECT')
+ obj_act.select_set(action='SELECT')
bpy.ops.object.mode_set(mode='OBJECT')
- obj_act.select = True
+ obj_act.select_set(action='SELECT')
scene.update() # apply location
# scene.objects.active = obj_new
@@ -200,16 +183,14 @@ def object_data_add(context, obdata, operator=None, use_active_layer=True, name=
bpy.ops.object.join() # join into the active.
if obdata:
bpy.data.meshes.remove(obdata)
- # base is freed, set to active object
- base = scene.object_bases.active
bpy.ops.object.mode_set(mode='EDIT')
else:
- scene.objects.active = obj_new
+ layer.objects.active = obj_new
if context.user_preferences.edit.use_enter_edit_mode:
bpy.ops.object.mode_set(mode='EDIT')
- return base
+ return obj_new
class AddObjectHelper:
@@ -230,12 +211,6 @@ class AddObjectHelper:
name="Rotation",
subtype='EULER',
)
- layers = BoolVectorProperty(
- name="Layers",
- size=20,
- subtype='LAYER',
- options={'HIDDEN', 'SKIP_SAVE'},
- )
@classmethod
def poll(self, context):
@@ -278,9 +253,10 @@ def object_image_guess(obj, bm=None):
first checking the texture-faces, then the material.
"""
# TODO, cycles/nodes materials
+ workspace = context.workspace
me = obj.data
if bm is None:
- if obj.mode == 'EDIT':
+ if workspace.object_mode == 'EDIT':
import bmesh
bm = bmesh.from_edit_mesh(me)
diff --git a/release/scripts/modules/bpy_types.py b/release/scripts/modules/bpy_types.py
index 600b29a6b2b..6b06ff77ecd 100644
--- a/release/scripts/modules/bpy_types.py
+++ b/release/scripts/modules/bpy_types.py
@@ -592,6 +592,106 @@ class OrderedMeta(RNAMeta):
return OrderedDictMini() # collections.OrderedDict()
+# Same as 'Operator'
+# only without 'as_keywords'
+class Manipulator(StructRNA, metaclass=OrderedMeta):
+ __slots__ = ()
+
+ def __getattribute__(self, attr):
+ properties = StructRNA.path_resolve(self, "properties")
+ bl_rna = getattr(properties, "bl_rna", None)
+ if (bl_rna is not None) and (attr in bl_rna.properties):
+ return getattr(properties, attr)
+ return super().__getattribute__(attr)
+
+ def __setattr__(self, attr, value):
+ properties = StructRNA.path_resolve(self, "properties")
+ bl_rna = getattr(properties, "bl_rna", None)
+ if (bl_rna is not None) and (attr in bl_rna.properties):
+ return setattr(properties, attr, value)
+ return super().__setattr__(attr, value)
+
+ def __delattr__(self, attr):
+ properties = StructRNA.path_resolve(self, "properties")
+ bl_rna = getattr(properties, "bl_rna", None)
+ if (bl_rna is not None) and (attr in bl_rna.properties):
+ return delattr(properties, attr)
+ return super().__delattr__(attr)
+
+ from _bpy import (
+ _rna_manipulator_target_set_handler as target_set_handler,
+ _rna_manipulator_target_get_value as target_get_value,
+ _rna_manipulator_target_set_value as target_set_value,
+ _rna_manipulator_target_get_range as target_get_range,
+ )
+
+ # Convenience wrappers around private `_gawain` module.
+ def draw_custom_shape(self, shape, *, matrix=None, select_id=None):
+ """
+ Draw a shape created form :class:`bpy.types.Manipulator.draw_custom_shape`.
+
+ :arg shape: The cached shape to draw.
+ :type shape: Undefined.
+ :arg matrix: 4x4 matrix, when not given
+ :class:`bpy.types.Manipulator.matrix_world` is used.
+ :type matrix: :class:`mathutils.Matrix`
+ :arg select_id: The selection id.
+ Only use when drawing within :class:`bpy.types.Manipulator.draw_select`.
+ :type select_it: int
+ """
+ import gpu
+
+ if matrix is None:
+ matrix = self.matrix_world
+
+ batch, dims = shape
+
+ # XXX, can we avoid setting the shader every time?
+ batch.program_set_builtin('3D_UNIFORM_COLOR' if dims == 3 else '2D_UNIFORM_COLOR')
+
+ if select_id is not None:
+ gpu.select.load_id(select_id)
+ else:
+ if self.is_highlight:
+ color = (*self.color_highlight, self.alpha_highlight)
+ else:
+ color = (*self.color, self.alpha)
+ batch.uniform_f32("color", *color)
+
+ with gpu.matrix.push_pop():
+ gpu.matrix.multiply_matrix(matrix)
+ batch.draw()
+
+ @staticmethod
+ def new_custom_shape(type, verts):
+ """
+ Create a new shape that can be passed to :class:`bpy.types.Manipulator.draw_custom_shape`.
+
+ :arg type: The type of shape to create in (POINTS, LINES, TRIS, LINE_STRIP).
+ :type type: string
+ :arg verts: Coordinates.
+ :type verts: sequence of of 2D or 3D coordinates.
+ :arg display_name: Optional callback that takes the full path, returns the name to display.
+ :type display_name: Callable that takes a string and returns a string.
+ :return: The newly created shape.
+ :rtype: Undefined (it may change).
+ """
+ from _gawain.types import (
+ Gwn_Batch,
+ Gwn_VertBuf,
+ Gwn_VertFormat,
+ )
+ dims = len(verts[0])
+ if dims not in {2, 3}:
+ raise ValueError("Expected 2D or 3D vertex")
+ fmt = Gwn_VertFormat()
+ pos_id = fmt.attr_add(id="pos", comp_type='F32', len=dims, fetch_mode='FLOAT')
+ vbo = Gwn_VertBuf(len=len(verts), format=fmt)
+ vbo.fill(id=pos_id, data=verts)
+ batch = Gwn_Batch(type=type, buf=vbo)
+ return (batch, dims)
+
+
# Only defined so operators members can be used by accessing self.order
# with doc generation 'self.properties.bl_rna.properties' can fail
class Operator(StructRNA, metaclass=OrderedMeta):
diff --git a/release/scripts/modules/keyingsets_utils.py b/release/scripts/modules/keyingsets_utils.py
index 7ce5f3e029b..40e74e27ed2 100644
--- a/release/scripts/modules/keyingsets_utils.py
+++ b/release/scripts/modules/keyingsets_utils.py
@@ -57,9 +57,10 @@ def path_add_property(path, prop):
# selected objects (active object must be in object mode)
def RKS_POLL_selected_objects(ksi, context):
+ workspace = context.workspace
ob = context.active_object
if ob:
- return ob.mode == 'OBJECT'
+ return workspace.object_mode == 'OBJECT'
else:
return bool(context.selected_objects)
@@ -67,8 +68,9 @@ def RKS_POLL_selected_objects(ksi, context):
# selected bones
def RKS_POLL_selected_bones(ksi, context):
# we must be in Pose Mode, and there must be some bones selected
+ workspace = context.workspace
ob = context.active_object
- if ob and ob.mode == 'POSE':
+ if ob and workspace.object_mode == 'POSE':
if context.active_pose_bone or context.selected_pose_bones:
return True
@@ -87,8 +89,9 @@ def RKS_POLL_selected_items(ksi, context):
# all selected objects or pose bones, depending on which we've got
def RKS_ITER_selected_item(ksi, context, ks):
+ workspace = context.workspace
ob = context.active_object
- if ob and ob.mode == 'POSE':
+ if ob and workspace.object_mode == 'POSE':
for bone in context.selected_pose_bones:
ksi.generate(context, ks, bone)
else:
diff --git a/release/scripts/modules/sys_info.py b/release/scripts/modules/sys_info.py
index e447d8a4dc5..53b3197fca3 100644
--- a/release/scripts/modules/sys_info.py
+++ b/release/scripts/modules/sys_info.py
@@ -185,14 +185,19 @@ def write_sysinfo(filepath):
output.write("version:\t%r\n" % (bgl.glGetString(bgl.GL_VERSION)))
output.write("extensions:\n")
- glext = sorted(bgl.glGetString(bgl.GL_EXTENSIONS).split())
+ limit = bgl.Buffer(bgl.GL_INT, 1)
+ bgl.glGetIntegerv(bgl.GL_NUM_EXTENSIONS, limit)
+
+ glext = []
+ for i in range(limit[0]):
+ glext.append(bgl.glGetStringi(bgl.GL_EXTENSIONS, i))
+
+ glext = sorted(glext)
+
for l in glext:
output.write("\t%s\n" % l)
output.write(title("Implementation Dependent OpenGL Limits"))
- limit = bgl.Buffer(bgl.GL_INT, 1)
- bgl.glGetIntegerv(bgl.GL_MAX_TEXTURE_UNITS, limit)
- output.write("Maximum Fixed Function Texture Units:\t%d\n" % limit[0])
bgl.glGetIntegerv(bgl.GL_MAX_ELEMENTS_VERTICES, limit)
output.write("Maximum DrawElements Vertices:\t%d\n" % limit[0])
bgl.glGetIntegerv(bgl.GL_MAX_ELEMENTS_INDICES, limit)
diff --git a/release/scripts/presets/keyconfig/3dsmax.py b/release/scripts/presets/keyconfig/3dsmax.py
index 6d05ff6982c..a4288377b82 100644
--- a/release/scripts/presets/keyconfig/3dsmax.py
+++ b/release/scripts/presets/keyconfig/3dsmax.py
@@ -7,7 +7,7 @@ kc = wm.keyconfigs.new('3dsmax')
# Map Window
km = kc.keymaps.new('Window', space_type='EMPTY', region_type='WINDOW', modal=False)
-kmi = km.keymap_items.new('wm.window_duplicate', 'W', 'PRESS', ctrl=True, alt=True)
+kmi = km.keymap_items.new('wm.window_new', 'W', 'PRESS', ctrl=True, alt=True)
kmi = km.keymap_items.new('wm.read_homefile', 'N', 'PRESS', ctrl=True)
kmi = km.keymap_items.new('wm.save_homefile', 'U', 'PRESS', ctrl=True)
kmi = km.keymap_items.new('wm.call_menu', 'O', 'PRESS', shift=True, ctrl=True)
@@ -330,7 +330,6 @@ kmi = km.keymap_items.new('object.hide_view_set', 'H', 'PRESS', shift=True)
kmi.properties.unselected = True
kmi = km.keymap_items.new('object.hide_render_clear', 'H', 'PRESS', ctrl=True, alt=True)
kmi = km.keymap_items.new('object.hide_render_set', 'H', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('object.move_to_layer', 'M', 'PRESS')
kmi = km.keymap_items.new('object.delete', 'X', 'PRESS')
kmi.properties.use_global = False
kmi = km.keymap_items.new('object.delete', 'X', 'PRESS', shift=True)
@@ -1110,7 +1109,7 @@ kmi = km.keymap_items.new('node.group_edit', 'TAB', 'PRESS')
kmi.properties.exit = False
kmi = km.keymap_items.new('node.group_edit', 'TAB', 'PRESS', shift=True)
kmi.properties.exit = True
-kmi = km.keymap_items.new('node.read_renderlayers', 'R', 'PRESS', ctrl=True)
+kmi = km.keymap_items.new('node.read_viewlayers', 'R', 'PRESS', ctrl=True)
kmi = km.keymap_items.new('node.read_fullsamplelayers', 'R', 'PRESS', shift=True)
kmi = km.keymap_items.new('node.render_changed', 'Z', 'PRESS')
kmi = km.keymap_items.new('node.clipboard_copy', 'C', 'PRESS', ctrl=True)
diff --git a/release/scripts/presets/keyconfig/maya.py b/release/scripts/presets/keyconfig/maya.py
index 53129593a59..3075e0bd009 100644
--- a/release/scripts/presets/keyconfig/maya.py
+++ b/release/scripts/presets/keyconfig/maya.py
@@ -8,7 +8,7 @@ kc = wm.keyconfigs.new(os.path.splitext(os.path.basename(__file__))[0])
# Map Window
km = kc.keymaps.new('Window', space_type='EMPTY', region_type='WINDOW', modal=False)
-kmi = km.keymap_items.new('wm.window_duplicate', 'W', 'PRESS', ctrl=True, alt=True)
+kmi = km.keymap_items.new('wm.window_new', 'W', 'PRESS', ctrl=True, alt=True)
kmi = km.keymap_items.new('wm.read_homefile', 'N', 'PRESS', ctrl=True)
kmi = km.keymap_items.new('wm.save_homefile', 'U', 'PRESS', ctrl=True)
kmi = km.keymap_items.new('wm.call_menu', 'O', 'PRESS', shift=True, ctrl=True)
@@ -384,7 +384,6 @@ kmi = km.keymap_items.new('object.hide_view_clear', 'H', 'PRESS', shift=True, ct
kmi = km.keymap_items.new('object.hide_view_set', 'H', 'PRESS', ctrl=True)
kmi = km.keymap_items.new('object.hide_view_set', 'H', 'PRESS', alt=True)
kmi.properties.unselected = True
-kmi = km.keymap_items.new('object.move_to_layer', 'M', 'PRESS')
kmi = km.keymap_items.new('object.delete', 'BACK_SPACE', 'PRESS')
kmi = km.keymap_items.new('object.delete', 'DEL', 'PRESS')
kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', shift=True)
@@ -1500,7 +1499,7 @@ kmi.properties.prev = False
kmi = km.keymap_items.new('node.group_make', 'G', 'PRESS', ctrl=True)
kmi = km.keymap_items.new('node.group_ungroup', 'G', 'PRESS', alt=True)
kmi = km.keymap_items.new('node.group_edit', 'TAB', 'PRESS')
-kmi = km.keymap_items.new('node.read_renderlayers', 'R', 'PRESS', ctrl=True)
+kmi = km.keymap_items.new('node.read_viewlayers', 'R', 'PRESS', ctrl=True)
kmi = km.keymap_items.new('node.read_fullsamplelayers', 'R', 'PRESS', shift=True)
kmi = km.keymap_items.new('node.render_changed', 'Z', 'PRESS')
kmi = km.keymap_items.new('node.translate_attach', 'W', 'PRESS')
diff --git a/release/scripts/presets/operator/wm.collada_export/sl_plus_open_sim_rigged.py b/release/scripts/presets/operator/wm.collada_export/sl_plus_open_sim_rigged.py
index deb23d76d91..7825a4d0f32 100644
--- a/release/scripts/presets/operator/wm.collada_export/sl_plus_open_sim_rigged.py
+++ b/release/scripts/presets/operator/wm.collada_export/sl_plus_open_sim_rigged.py
@@ -10,7 +10,7 @@ op.include_armatures = True
op.include_shapekeys = False
op.deform_bones_only = True
op.active_uv_only = True
-op.export_texture_type_selection = 'uv'
+op.include_uv_textures = True
op.use_texture_copies = True
op.triangulate = True
op.use_object_instantiation = False
diff --git a/release/scripts/presets/operator/wm.collada_export/sl_plus_open_sim_static.py b/release/scripts/presets/operator/wm.collada_export/sl_plus_open_sim_static.py
index ca9de8bf005..a13ba5c4ccc 100644
--- a/release/scripts/presets/operator/wm.collada_export/sl_plus_open_sim_static.py
+++ b/release/scripts/presets/operator/wm.collada_export/sl_plus_open_sim_static.py
@@ -10,7 +10,6 @@ op.include_armatures = False
op.include_shapekeys = False
op.deform_bones_only = False
op.active_uv_only = True
-op.export_texture_type_selection = 'uv'
op.use_texture_copies = True
op.triangulate = True
op.use_object_instantiation = False
diff --git a/release/scripts/startup/bl_operators/add_mesh_torus.py b/release/scripts/startup/bl_operators/add_mesh_torus.py
index c4fefaed06d..144462c6b62 100644
--- a/release/scripts/startup/bl_operators/add_mesh_torus.py
+++ b/release/scripts/startup/bl_operators/add_mesh_torus.py
@@ -79,7 +79,7 @@ def add_torus(major_rad, minor_rad, major_seg, minor_seg):
def add_uvs(mesh, minor_seg, major_seg):
from math import fmod
- mesh.uv_textures.new()
+ mesh.uv_layers.new()
uv_data = mesh.uv_layers.active.data
polygons = mesh.polygons
u_step = 1.0 / major_seg
diff --git a/release/scripts/startup/bl_operators/clip.py b/release/scripts/startup/bl_operators/clip.py
index 6356121cffd..467512a9746 100644
--- a/release/scripts/startup/bl_operators/clip.py
+++ b/release/scripts/startup/bl_operators/clip.py
@@ -235,7 +235,7 @@ class CLIP_OT_track_to_empty(Operator):
ob = None
ob = bpy.data.objects.new(name=track.name, object_data=None)
- ob.select = True
+ ob.select_set(action='SELECT')
context.scene.objects.link(ob)
context.scene.objects.active = ob
@@ -514,7 +514,7 @@ object's movement caused by this constraint"""
# XXX, should probably use context.selected_editable_objects
# since selected objects can be from a lib or in hidden layer!
for ob in scene.objects:
- if ob.select:
+ if ob.select_set(action='SELECT'):
self._bake_object(scene, ob)
return {'FINISHED'}
@@ -611,24 +611,24 @@ class CLIP_OT_setup_tracking_scene(Operator):
CLIP_set_viewport_background(context, True, sc.clip, sc.clip_user)
@staticmethod
- def _setupRenderLayers(context):
+ def _setupViewLayers(context):
scene = context.scene
- rlayers = scene.render.layers
+ view_layers = scene.view_layers
- if not scene.render.layers.get("Foreground"):
- if len(rlayers) == 1:
- fg = rlayers[0]
+ if not view_layers.get("Foreground"):
+ if len(view_layers) == 1:
+ fg = view_layers[0]
fg.name = 'Foreground'
else:
- fg = scene.render.layers.new("Foreground")
+ fg = view_layers.new("Foreground")
fg.use_sky = True
fg.layers = [True] + [False] * 19
fg.layers_zmask = [False] * 10 + [True] + [False] * 9
fg.use_pass_vector = True
- if not scene.render.layers.get("Background"):
- bg = scene.render.layers.new("Background")
+ if not view_layers.get("Background"):
+ bg = view_layers.new("Background")
bg.use_pass_shadow = True
bg.use_pass_ambient_occlusion = True
bg.layers = [False] * 10 + [True] + [False] * 9
@@ -940,8 +940,8 @@ class CLIP_OT_setup_tracking_scene(Operator):
def _setupObjects(self, context):
scene = context.scene
- fg = scene.render.layers.get("Foreground")
- bg = scene.render.layers.get("Background")
+ fg = scene.view_layers.get("Foreground")
+ bg = scene.view_layers.get("Background")
all_layers = self._mergeLayers(fg.layers, bg.layers)
@@ -985,7 +985,7 @@ class CLIP_OT_setup_tracking_scene(Operator):
self._setupWorld(context)
self._setupCamera(context)
self._setupViewport(context)
- self._setupRenderLayers(context)
+ self._setupViewLayers(context)
self._setupNodes(context)
self._setupObjects(context)
diff --git a/release/scripts/startup/bl_operators/freestyle.py b/release/scripts/startup/bl_operators/freestyle.py
index f5da7d45256..9b1d054cc15 100644
--- a/release/scripts/startup/bl_operators/freestyle.py
+++ b/release/scripts/startup/bl_operators/freestyle.py
@@ -47,15 +47,16 @@ class SCENE_OT_freestyle_fill_range_by_selection(bpy.types.Operator):
@classmethod
def poll(cls, context):
- rl = context.scene.render.layers.active
- return rl and rl.freestyle_settings.linesets.active
+ view_layer = context.scene.view_layers.active
+ return view_layer and view_layer.freestyle_settings.linesets.active
def execute(self, context):
import sys
+ workspace = context.workspace
scene = context.scene
- rl = scene.render.layers.active
- lineset = rl.freestyle_settings.linesets.active
+ view_layer = scene.view_layers.active
+ lineset = view_layer.freestyle_settings.linesets.active
linestyle = lineset.linestyle
# Find the modifier to work on
if self.type == 'COLOR':
@@ -79,7 +80,7 @@ class SCENE_OT_freestyle_fill_range_by_selection(bpy.types.Operator):
return {'CANCELLED'}
# Find selected vertices in editmesh
ob = context.active_object
- if ob.type == 'MESH' and ob.mode == 'EDIT' and ob.name != ref.name:
+ if ob.type == 'MESH' and workspace.object_mode == 'EDIT' and ob.name != ref.name:
bpy.ops.object.mode_set(mode='OBJECT')
selected_verts = [v for v in ob.data.vertices if v.select]
bpy.ops.object.mode_set(mode='EDIT')
@@ -104,7 +105,7 @@ class SCENE_OT_freestyle_fill_range_by_selection(bpy.types.Operator):
m.range_max = max_dist
return {'FINISHED'}
# Find selected mesh objects
- selection = [ob for ob in scene.objects if ob.select and ob.type == 'MESH' and ob.name != ref.name]
+ selection = [ob for ob in scene.objects if ob.select_get() and ob.type == 'MESH' and ob.name != source.name]
if selection:
# Compute the min/max distance from the reference to mesh vertices
min_dist = sys.float_info.max
@@ -143,6 +144,7 @@ class SCENE_OT_freestyle_add_edge_marks_to_keying_set(bpy.types.Operator):
def execute(self, context):
# active keying set
+ workspace = context.workspace
scene = context.scene
ks = scene.keying_sets.active
if ks is None:
@@ -150,7 +152,7 @@ class SCENE_OT_freestyle_add_edge_marks_to_keying_set(bpy.types.Operator):
ks.bl_description = ""
# add data paths to the keying set
ob = context.active_object
- ob_mode = ob.mode
+ ob_mode = workspace.object_mode
mesh = ob.data
bpy.ops.object.mode_set(mode='OBJECT', toggle=False)
for i, edge in enumerate(mesh.edges):
@@ -174,6 +176,7 @@ class SCENE_OT_freestyle_add_face_marks_to_keying_set(bpy.types.Operator):
def execute(self, context):
# active keying set
+ workspace = context.workspace
scene = context.scene
ks = scene.keying_sets.active
if ks is None:
@@ -181,7 +184,7 @@ class SCENE_OT_freestyle_add_face_marks_to_keying_set(bpy.types.Operator):
ks.bl_description = ""
# add data paths to the keying set
ob = context.active_object
- ob_mode = ob.mode
+ ob_mode = workspace.object_mode
mesh = ob.data
bpy.ops.object.mode_set(mode='OBJECT', toggle=False)
for i, polygon in enumerate(mesh.polygons):
@@ -207,8 +210,8 @@ class SCENE_OT_freestyle_module_open(bpy.types.Operator):
@classmethod
def poll(cls, context):
- rl = context.scene.render.layers.active
- return rl and rl.freestyle_settings.mode == 'SCRIPT'
+ view_layer = context.scene.view_layers.active
+ return view_layer and view_layer.freestyle_settings.mode == 'SCRIPT'
def invoke(self, context, event):
self.freestyle_module = context.freestyle_module
diff --git a/release/scripts/startup/bl_operators/mesh.py b/release/scripts/startup/bl_operators/mesh.py
index 467c3df3158..ccc592e80b8 100644
--- a/release/scripts/startup/bl_operators/mesh.py
+++ b/release/scripts/startup/bl_operators/mesh.py
@@ -50,15 +50,16 @@ class MeshMirrorUV(Operator):
@classmethod
def poll(cls, context):
obj = context.active_object
- return (obj and obj.type == 'MESH' and obj.data.uv_textures.active)
+ return (obj and obj.type == 'MESH' and obj.data.uv_layers.active)
def execute(self, context):
DIR = (self.direction == 'NEGATIVE')
precision = self.precision
double_warn = 0
+ workspace = context.workspace
ob = context.active_object
- is_editmode = (ob.mode == 'EDIT')
+ is_editmode = (workspace.object_mode == 'EDIT')
if is_editmode:
bpy.ops.object.mode_set(mode='OBJECT', toggle=False)
diff --git a/release/scripts/startup/bl_operators/object.py b/release/scripts/startup/bl_operators/object.py
index 307764205e6..58f3afa3d6c 100644
--- a/release/scripts/startup/bl_operators/object.py
+++ b/release/scripts/startup/bl_operators/object.py
@@ -63,12 +63,13 @@ class SelectPattern(Operator):
pattern_match = (lambda a, b:
fnmatch.fnmatchcase(a.upper(), b.upper()))
is_ebone = False
+ workspace = context.workspace
obj = context.object
- if obj and obj.mode == 'POSE':
+ if obj and workspace.object_mode == 'POSE':
items = obj.data.bones
if not self.extend:
bpy.ops.pose.select_all(action='DESELECT')
- elif obj and obj.type == 'ARMATURE' and obj.mode == 'EDIT':
+ elif obj and obj.type == 'ARMATURE' and workspace.object_mode == 'EDIT':
items = obj.data.edit_bones
if not self.extend:
bpy.ops.armature.select_all(action='DESELECT')
@@ -81,16 +82,18 @@ class SelectPattern(Operator):
# Can be pose bones or objects
for item in items:
if pattern_match(item.name, self.pattern):
- item.select = True
# hrmf, perhaps there should be a utility function for this.
if is_ebone:
+ item.select = True
item.select_head = True
item.select_tail = True
if item.use_connect:
item_parent = item.parent
if item_parent is not None:
item_parent.select_tail = True
+ else:
+ item.select_set(action='SELECT')
return {'FINISHED'}
@@ -136,7 +139,7 @@ class SelectCamera(Operator):
bpy.ops.object.select_all(action='DESELECT')
scene.objects.active = camera
camera.hide = False
- camera.select = True
+ camera.select_set(action='SELECT')
return {'FINISHED'}
return {'CANCELLED'}
@@ -202,7 +205,7 @@ class SelectHierarchy(Operator):
bpy.ops.object.select_all(action='DESELECT')
for obj in select_new:
- obj.select = True
+ obj.select_set(action='SELECT')
scene.objects.active = act_new
return {'FINISHED'}
@@ -246,6 +249,8 @@ class SubdivisionSet(Operator):
if not relative and level < 0:
self.level = level = 0
+ workspace = context.workspace
+
def set_object_subd(obj):
for mod in obj.modifiers:
if mod.type == 'MULTIRES':
@@ -255,18 +260,18 @@ class SubdivisionSet(Operator):
for i in range(sub):
bpy.ops.object.multires_subdivide(modifier="Multires")
- if obj.mode == 'SCULPT':
+ if workspace.object_mode == 'SCULPT':
if mod.sculpt_levels != level:
mod.sculpt_levels = level
- elif obj.mode == 'OBJECT':
+ elif workspace.object_mode == 'OBJECT':
if mod.levels != level:
mod.levels = level
return
else:
- if obj.mode == 'SCULPT':
+ if workspace.object_mode == 'SCULPT':
if mod.sculpt_levels + level <= mod.total_levels:
mod.sculpt_levels += level
- elif obj.mode == 'OBJECT':
+ elif workspace.object_mode == 'OBJECT':
if mod.levels + level <= mod.total_levels:
mod.levels += level
return
@@ -282,7 +287,7 @@ class SubdivisionSet(Operator):
# add a new modifier
try:
- if obj.mode == 'SCULPT':
+ if workspace.object_mode == 'SCULPT':
mod = obj.modifiers.new("Multires", 'MULTIRES')
if level > 0:
for i in range(0, level):
@@ -465,8 +470,9 @@ class ShapeTransfer(Operator):
@classmethod
def poll(cls, context):
+ workspace = context.workspace
obj = context.active_object
- return (obj and obj.mode != 'EDIT')
+ return (obj and workspace.object_mode != 'EDIT')
def execute(self, context):
ob_act = context.active_object
@@ -506,14 +512,15 @@ class JoinUVs(Operator):
def _main(self, context):
import array
+ workspace = context.workspace
obj = context.active_object
mesh = obj.data
- is_editmode = (obj.mode == 'EDIT')
+ is_editmode = (workspace.object_mode == 'EDIT')
if is_editmode:
bpy.ops.object.mode_set(mode='OBJECT', toggle=False)
- if not mesh.uv_textures:
+ if not mesh.uv_layers:
self.report({'WARNING'},
"Object: %s, Mesh: '%s' has no UVs"
% (obj.name, mesh.name))
@@ -551,7 +558,7 @@ class JoinUVs(Operator):
else:
uv_other = mesh_other.uv_layers.active
if not uv_other:
- mesh_other.uv_textures.new()
+ mesh_other.uv_layers.new()
uv_other = mesh_other.uv_layers.active
if not uv_other:
self.report({'ERROR'}, "Could not add "
@@ -644,8 +651,8 @@ class MakeDupliFace(Operator):
ob_new.use_dupli_faces_scale = True
ob_new.dupli_faces_scale = 1.0 / SCALE_FAC
- ob_inst.select = True
- ob_new.select = True
+ ob_inst.select_set(action='SELECT')
+ ob_new.select_set(action='SELECT')
def execute(self, context):
self._main(context)
@@ -664,7 +671,7 @@ class IsolateTypeRender(Operator):
for obj in context.visible_objects:
- if obj.select:
+ if obj.select_get():
obj.hide_render = False
else:
if obj.type == act_type:
@@ -1029,8 +1036,8 @@ class LodGenerate(Operator):
for level in ob.lod_levels[1:]:
level.object.hide = level.object.hide_render = True
- lod.select = False
- ob.select = True
+ lod.select_set(action='DESELECT')
+ ob.select_set(action='SELECT')
scene.objects.active = ob
return {'FINISHED'}
diff --git a/release/scripts/startup/bl_operators/object_quick_effects.py b/release/scripts/startup/bl_operators/object_quick_effects.py
index 6b9442769af..9fa6dbf6eef 100644
--- a/release/scripts/startup/bl_operators/object_quick_effects.py
+++ b/release/scripts/startup/bl_operators/object_quick_effects.py
@@ -73,9 +73,10 @@ class QuickFur(Operator):
)
def execute(self, context):
+ workspace = context.workspace
fake_context = context.copy()
mesh_objects = [obj for obj in context.selected_objects
- if obj.type == 'MESH' and obj.mode == 'OBJECT']
+ if obj.type == 'MESH' and workspace.object_mode == 'OBJECT']
if not mesh_objects:
self.report({'ERROR'}, "Select at least one mesh object")
@@ -222,7 +223,7 @@ class QuickExplode(Operator):
if self.fade:
explode.show_dead = False
- uv = obj.data.uv_textures.new("Explode fade")
+ uv = obj.data.uv_layers.new("Explode fade")
explode.particle_uv = uv.name
mat = object_ensure_material(obj, "Explode Fade")
@@ -365,7 +366,7 @@ class QuickSmoke(Operator):
# Setup material
# Cycles
- if context.scene.render.use_shading_nodes:
+ if context.scene.view_render.use_shading_nodes or context.view_render.use_shading_nodes:
bpy.ops.object.material_slot_add()
mat = bpy.data.materials.new("Smoke Domain Material")
diff --git a/release/scripts/startup/bl_operators/rigidbody.py b/release/scripts/startup/bl_operators/rigidbody.py
index 6792d525683..e10a2a2915e 100644
--- a/release/scripts/startup/bl_operators/rigidbody.py
+++ b/release/scripts/startup/bl_operators/rigidbody.py
@@ -65,7 +65,7 @@ class CopyRigidbodySettings(Operator):
# deselect all but mesh objects
for o in context.selected_objects:
if o.type != 'MESH':
- o.select = False
+ o.select_set(action='DESELECT')
elif o.rigid_body is None:
# Add rigidbody to object!
scene.objects.active = o
@@ -127,7 +127,7 @@ class BakeToKeyframes(Operator):
# filter objects selection
for obj in context.selected_objects:
if not obj.rigid_body or obj.rigid_body.type != 'ACTIVE':
- obj.select = False
+ obj.select_set(action='DESELECT')
objects = context.selected_objects
@@ -260,7 +260,7 @@ class ConnectRigidBodies(Operator):
ob.location = loc
context.scene.objects.link(ob)
context.scene.objects.active = ob
- ob.select = True
+ ob.select_set(action='SELECT')
bpy.ops.rigidbody.constraint_add()
con_obj = context.active_object
@@ -305,7 +305,7 @@ class ConnectRigidBodies(Operator):
# restore selection
bpy.ops.object.select_all(action='DESELECT')
for obj in objects:
- obj.select = True
+ obj.select_set(action='SELECT')
scene.objects.active = obj_act
return {'FINISHED'}
else:
diff --git a/release/scripts/startup/bl_operators/uvcalc_follow_active.py b/release/scripts/startup/bl_operators/uvcalc_follow_active.py
index 25ee5cafe81..29cefd83328 100644
--- a/release/scripts/startup/bl_operators/uvcalc_follow_active.py
+++ b/release/scripts/startup/bl_operators/uvcalc_follow_active.py
@@ -30,8 +30,8 @@ def extend(obj, operator, EXTEND_MODE):
import bmesh
me = obj.data
# script will fail without UVs
- if not me.uv_textures:
- me.uv_textures.new()
+ if not me.uv_layers:
+ me.uv_layers.new()
bm = bmesh.from_edit_mesh(me)
@@ -252,4 +252,4 @@ class FollowActiveQuads(Operator):
classes = (
FollowActiveQuads,
-) \ No newline at end of file
+)
diff --git a/release/scripts/startup/bl_operators/uvcalc_lightmap.py b/release/scripts/startup/bl_operators/uvcalc_lightmap.py
index 8ee29d15d1b..dde98ce9013 100644
--- a/release/scripts/startup/bl_operators/uvcalc_lightmap.py
+++ b/release/scripts/startup/bl_operators/uvcalc_lightmap.py
@@ -275,12 +275,12 @@ def lightmap_uvpack(meshes,
face_groups.append(faces)
if PREF_NEW_UVLAYER:
- me.uv_textures.new()
+ me.uv_layers.new()
# Add face UV if it does not exist.
# All new faces are selected.
- if not me.uv_textures:
- me.uv_textures.new()
+ if not me.uv_layers:
+ me.uv_layers.new()
for face_sel in face_groups:
print("\nStarting unwrap")
@@ -538,6 +538,9 @@ def lightmap_uvpack(meshes,
print("done")
if PREF_APPLY_IMAGE:
+ pass
+ # removed with texface
+ '''
if not PREF_PACK_IN_ONE:
image = bpy.data.images.new(name="lightmap",
width=PREF_IMG_PX_SIZE,
@@ -545,8 +548,8 @@ def lightmap_uvpack(meshes,
)
for f in face_sel:
- # f.image = image
- f.id_data.uv_textures.active.data[f.index].image = image # XXX25
+ f.image = image
+ '''
for me in meshes:
me.update()
@@ -555,8 +558,8 @@ def lightmap_uvpack(meshes,
def unwrap(operator, context, **kwargs):
-
- is_editmode = (context.object.mode == 'EDIT')
+ workspace = context.workspace
+ is_editmode = (workspace.object_mode == 'EDIT')
if is_editmode:
bpy.ops.object.mode_set(mode='OBJECT', toggle=False)
@@ -672,4 +675,4 @@ class LightMapPack(Operator):
classes = (
LightMapPack,
-) \ No newline at end of file
+)
diff --git a/release/scripts/startup/bl_operators/uvcalc_smart_project.py b/release/scripts/startup/bl_operators/uvcalc_smart_project.py
index 12c56a18897..f648bebed26 100644
--- a/release/scripts/startup/bl_operators/uvcalc_smart_project.py
+++ b/release/scripts/startup/bl_operators/uvcalc_smart_project.py
@@ -748,7 +748,8 @@ def main(context,
USER_FILL_HOLES_QUALITY = 50 # Only for hole filling.
USER_VIEW_INIT = 0 # Only for hole filling.
- is_editmode = (context.active_object.mode == 'EDIT')
+ workspace = context.workspace
+ is_editmode = (workspace.object_mode == 'EDIT')
if is_editmode:
obList = [ob for ob in [context.active_object] if ob and ob.type == 'MESH']
else:
@@ -781,7 +782,7 @@ def main(context,
# Toggle Edit mode
- is_editmode = (context.active_object.mode == 'EDIT')
+ is_editmode = (workspace.object_mode == 'EDIT')
if is_editmode:
bpy.ops.object.mode_set(mode='OBJECT')
# Assume face select mode! an annoying hack to toggle face select mode because Mesh doesn't like faceSelectMode.
@@ -810,8 +811,8 @@ def main(context,
# Tag as used
me.tag = True
- if not me.uv_textures: # Mesh has no UV Coords, don't bother.
- me.uv_textures.new()
+ if not me.uv_layers: # Mesh has no UV Coords, don't bother.
+ me.uv_layers.new()
uv_layer = me.uv_layers.active.data
me_verts = list(me.vertices)
diff --git a/release/scripts/startup/bl_operators/view3d.py b/release/scripts/startup/bl_operators/view3d.py
index 18f91110053..e54ead6a5fc 100644
--- a/release/scripts/startup/bl_operators/view3d.py
+++ b/release/scripts/startup/bl_operators/view3d.py
@@ -30,8 +30,9 @@ class VIEW3D_OT_edit_mesh_extrude_individual_move(Operator):
@classmethod
def poll(cls, context):
+ workspace = context.workspace
obj = context.active_object
- return (obj is not None and obj.mode == 'EDIT')
+ return (obj is not None and workspace.object_mode == 'EDIT')
def execute(self, context):
mesh = context.object.data
@@ -68,8 +69,9 @@ class VIEW3D_OT_edit_mesh_extrude_move(Operator):
@classmethod
def poll(cls, context):
+ workspace = context.workspace
obj = context.active_object
- return (obj is not None and obj.mode == 'EDIT')
+ return (obj is not None and workspace.object_mode == 'EDIT')
@staticmethod
def extrude_region(context, use_vert_normals):
@@ -117,8 +119,9 @@ class VIEW3D_OT_edit_mesh_extrude_shrink_fatten(Operator):
@classmethod
def poll(cls, context):
+ workspace = context.workspace
obj = context.active_object
- return (obj is not None and obj.mode == 'EDIT')
+ return (obj is not None and workspace.object_mode == 'EDIT')
def execute(self, context):
return VIEW3D_OT_edit_mesh_extrude_move.extrude_region(context, True)
@@ -173,7 +176,8 @@ class VIEW3D_OT_select_or_deselect_all(Operator):
def poll(cls, context):
active_object = context.active_object
if active_object:
- return active_object.mode in {'EDIT', 'OBJECT', 'POSE'}
+ workspace = context.workspace
+ return workspace.object_mode in {'EDIT', 'OBJECT', 'POSE'}
return True
def invoke(self, context, event):
@@ -184,7 +188,9 @@ class VIEW3D_OT_select_or_deselect_all(Operator):
active_object = context.active_object
if active_object:
- if active_object.mode == 'EDIT':
+ workspace = context.workspace
+ object_mode = workspace.object_mode
+ if object_mode == 'EDIT':
if active_object.type == 'MESH':
bpy.ops.mesh.select_all(action='DESELECT')
elif active_object.type == 'CURVE':
@@ -197,9 +203,9 @@ class VIEW3D_OT_select_or_deselect_all(Operator):
bpy.ops.mball.select_all(action='DESELECT')
elif active_object.type == 'ARMATURE':
bpy.ops.armature.select_all(action='DESELECT')
- elif active_object.mode == 'POSE':
+ elif object_mode == 'POSE':
bpy.ops.pose.select_all(action='DESELECT')
- elif active_object.mode == 'PARTICLE_EDIT':
+ elif object_mode == 'PARTICLE_EDIT':
bpy.ops.particle.select_all(action='DESELECT')
else:
bpy.ops.object.select_all(action='DESELECT')
diff --git a/release/scripts/startup/bl_ui/__init__.py b/release/scripts/startup/bl_ui/__init__.py
index 0a7b2cd2e8b..79d044c25bf 100644
--- a/release/scripts/startup/bl_ui/__init__.py
+++ b/release/scripts/startup/bl_ui/__init__.py
@@ -28,6 +28,7 @@ if "bpy" in locals():
_modules = [
"properties_animviz",
+ "properties_collection",
"properties_constraint",
"properties_data_armature",
"properties_data_bone",
@@ -39,7 +40,9 @@ _modules = [
"properties_data_mesh",
"properties_data_metaball",
"properties_data_modifier",
+ "properties_data_lightprobe",
"properties_data_speaker",
+ "properties_data_workspace",
"properties_game",
"properties_mask_common",
"properties_material",
@@ -57,10 +60,17 @@ _modules = [
"properties_physics_smoke",
"properties_physics_softbody",
"properties_render",
- "properties_render_layer",
+ "properties_view_layer",
"properties_scene",
"properties_texture",
"properties_world",
+
+ # Generic Space Modules
+ #
+ # Depends on DNA_WORKSPACE_TOOL (C define).
+ "space_toolsystem_common",
+ "space_toolsystem_toolbar",
+
"space_clip",
"space_console",
"space_dopesheet",
diff --git a/release/scripts/startup/bl_ui/properties_collection.py b/release/scripts/startup/bl_ui/properties_collection.py
new file mode 100644
index 00000000000..9a8e0a7562a
--- /dev/null
+++ b/release/scripts/startup/bl_ui/properties_collection.py
@@ -0,0 +1,182 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# <pep8 compliant>
+import bpy
+from bpy.types import Panel
+
+
+class CollectionButtonsPanel:
+ bl_space_type = 'PROPERTIES'
+ bl_region_type = 'WINDOW'
+ bl_context = "collection"
+
+
+def get_collection_from_context(context):
+ active_object = context.active_object
+
+ if active_object and active_object.dupli_group and context.space_data.collection_context == 'GROUP':
+ group = active_object.dupli_group
+ return group.view_layer.collections.active
+ else:
+ return context.layer_collection
+
+
+class COLLECTION_PT_context_collection(CollectionButtonsPanel, Panel):
+ bl_label = ""
+ bl_options = {'HIDE_HEADER'}
+
+ def draw(self, context):
+ layout = self.layout
+ space = context.space_data
+ active_object = context.active_object
+
+ if active_object and active_object.dupli_group:
+ split = layout.split(percentage=0.2)
+ split.row().prop(space, "collection_context", expand=True)
+ layout = split
+
+ collection = get_collection_from_context(context)
+ name = collection.name
+ if name == 'Master Collection':
+ layout.label(text=name, icon='COLLAPSEMENU')
+ else:
+ layout.prop(collection, "name", text="", icon='COLLAPSEMENU')
+
+
+class COLLECTION_PT_clay_settings(CollectionButtonsPanel, Panel):
+ bl_label = "Render Settings"
+ COMPAT_ENGINES = {'BLENDER_CLAY'}
+
+ @classmethod
+ def poll(cls, context):
+ return context.view_render.engine in cls.COMPAT_ENGINES
+
+ def draw(self, context):
+ layout = self.layout
+ scene_props = context.scene.collection_properties['BLENDER_CLAY']
+ collection = get_collection_from_context(context)
+ collection_props = collection.engine_overrides['BLENDER_CLAY']
+
+ col = layout.column()
+ col.template_override_property(collection_props, scene_props, "matcap_icon", custom_template="icon_view")
+ col.template_override_property(collection_props, scene_props, "matcap_rotation")
+ col.template_override_property(collection_props, scene_props, "matcap_hue")
+ col.template_override_property(collection_props, scene_props, "matcap_saturation")
+ col.template_override_property(collection_props, scene_props, "matcap_value")
+ col.template_override_property(collection_props, scene_props, "ssao_factor_cavity")
+ col.template_override_property(collection_props, scene_props, "ssao_factor_edge")
+ col.template_override_property(collection_props, scene_props, "ssao_distance")
+ col.template_override_property(collection_props, scene_props, "ssao_attenuation")
+ col.template_override_property(collection_props, scene_props, "hair_brightness_randomness")
+
+
+class COLLECTION_PT_object_mode_settings(CollectionButtonsPanel, Panel):
+ bl_label = "Object Mode Settings"
+
+ @classmethod
+ def poll(cls, context):
+ window = context.window
+ return window and hasattr(window, 'object_mode') and (window.object_mode == 'OBJECT')
+
+ def draw(self, context):
+ layout = self.layout
+ scene_props = context.scene.collection_properties['ObjectMode']
+ collection = get_collection_from_context(context)
+ collection_props = collection.engine_overrides['ObjectMode']
+
+ col = layout.column()
+ col.template_override_property(collection_props, scene_props, "show_wire")
+ col.template_override_property(collection_props, scene_props, "show_backface_culling")
+
+
+class COLLECTION_PT_edit_mode_settings(CollectionButtonsPanel, Panel):
+ bl_label = "Edit Mode Settings"
+
+ @classmethod
+ def poll(cls, context):
+ window = context.window
+ return window and hasattr(window, 'object_mode') and (window.object_mode == 'EDIT')
+
+ def draw(self, context):
+ layout = self.layout
+ scene_props = context.scene.collection_properties['EditMode']
+ collection = get_collection_from_context(context)
+ collection_props = collection.engine_overrides['EditMode']
+
+ col = layout.column()
+ col.template_override_property(collection_props, scene_props, "show_occlude_wire")
+ col.template_override_property(collection_props, scene_props, "backwire_opacity")
+ col.template_override_property(collection_props, scene_props, "face_normals_show")
+ col.template_override_property(collection_props, scene_props, "vert_normals_show")
+ col.template_override_property(collection_props, scene_props, "loop_normals_show")
+ col.template_override_property(collection_props, scene_props, "normals_length")
+ col.template_override_property(collection_props, scene_props, "show_weight")
+
+
+class COLLECTION_PT_paint_weight_mode_settings(CollectionButtonsPanel, Panel):
+ bl_label = "Weight Paint Mode Settings"
+
+ @classmethod
+ def poll(cls, context):
+ window = context.window
+ return window and hasattr(window, 'object_mode') and (window.object_mode == 'WEIGHT_PAINT')
+
+ def draw(self, context):
+ layout = self.layout
+ scene_props = context.scene.collection_properties['WeightPaintMode']
+ collection = get_collection_from_context(context)
+ collection_props = collection.engine_overrides['WeightPaintMode']
+
+ col = layout.column()
+ col.template_override_property(collection_props, scene_props, "use_shading")
+ col.template_override_property(collection_props, scene_props, "use_wire")
+
+
+class COLLECTION_PT_paint_vertex_mode_settings(CollectionButtonsPanel, Panel):
+ bl_label = "Vertex Paint Mode Settings"
+
+ @classmethod
+ def poll(cls, context):
+ window = context.window
+ return window and hasattr(window, 'object_mode') and (window.object_mode == 'VERTEX_PAINT')
+
+ def draw(self, context):
+ layout = self.layout
+ scene_props = context.scene.collection_properties['VertexPaintMode']
+ collection = get_collection_from_context(context)
+ collection_props = collection.engine_overrides['VertexPaintMode']
+
+ col = layout.column()
+ col.template_override_property(collection_props, scene_props, "use_shading")
+ col.template_override_property(collection_props, scene_props, "use_wire")
+
+
+classes = (
+ COLLECTION_PT_context_collection,
+ COLLECTION_PT_clay_settings,
+ COLLECTION_PT_object_mode_settings,
+ COLLECTION_PT_edit_mode_settings,
+ COLLECTION_PT_paint_weight_mode_settings,
+ COLLECTION_PT_paint_vertex_mode_settings,
+)
+
+if __name__ == "__main__": # only for live edit.
+ from bpy.utils import register_class
+ for cls in classes:
+ register_class(cls)
diff --git a/release/scripts/startup/bl_ui/properties_constraint.py b/release/scripts/startup/bl_ui/properties_constraint.py
index 9b61101778f..f374d95c493 100644
--- a/release/scripts/startup/bl_ui/properties_constraint.py
+++ b/release/scripts/startup/bl_ui/properties_constraint.py
@@ -910,8 +910,9 @@ class OBJECT_PT_constraints(ConstraintButtonsPanel, Panel):
layout = self.layout
obj = context.object
+ workspace = context.workspace
- if obj.type == 'ARMATURE' and obj.mode == 'POSE':
+ if obj.type == 'ARMATURE' and workspace.object_mode == 'POSE':
box = layout.box()
box.alert = True # XXX: this should apply to the box background
box.label(icon='INFO', text="Constraints for active bone do not live here")
diff --git a/release/scripts/startup/bl_ui/properties_data_armature.py b/release/scripts/startup/bl_ui/properties_data_armature.py
index 411d64e2b94..413636d005b 100644
--- a/release/scripts/startup/bl_ui/properties_data_armature.py
+++ b/release/scripts/startup/bl_ui/properties_data_armature.py
@@ -65,7 +65,7 @@ class DATA_PT_skeleton(ArmatureButtonsPanel, Panel):
col.label(text="Protected Layers:")
col.prop(arm, "layers_protected", text="")
- if context.scene.render.engine == 'BLENDER_GAME':
+ if context.engine == 'BLENDER_GAME':
col = layout.column()
col.label(text="Deform:")
col.prop(arm, "deform_method", expand=True)
@@ -328,7 +328,7 @@ class DATA_PT_onion_skinning(OnionSkinButtonsPanel): # , Panel): # inherit from
class DATA_PT_custom_props_arm(ArmatureButtonsPanel, PropertyPanel, Panel):
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
_context_path = "object.data"
_property_type = bpy.types.Armature
diff --git a/release/scripts/startup/bl_ui/properties_data_bone.py b/release/scripts/startup/bl_ui/properties_data_bone.py
index 9fbb28c0f31..e8f290772d8 100644
--- a/release/scripts/startup/bl_ui/properties_data_bone.py
+++ b/release/scripts/startup/bl_ui/properties_data_bone.py
@@ -58,7 +58,8 @@ class BONE_PT_transform(BoneButtonsPanel, Panel):
return True
ob = context.object
- return ob and ob.mode == 'POSE' and context.bone
+ workspace = context.workspace
+ return ob and workspace.object_mode == 'POSE' and context.bone
def draw(self, context):
layout = self.layout
@@ -110,7 +111,8 @@ class BONE_PT_transform_locks(BoneButtonsPanel, Panel):
@classmethod
def poll(cls, context):
ob = context.object
- return ob and ob.mode == 'POSE' and context.bone
+ workspace = context.workspace
+ return ob and workspace.object_mode == 'POSE' and context.bone
def draw(self, context):
layout = self.layout
@@ -311,7 +313,8 @@ class BONE_PT_inverse_kinematics(BoneButtonsPanel, Panel):
@classmethod
def poll(cls, context):
ob = context.object
- return ob and ob.mode == 'POSE' and context.bone
+ workspace = context.workspace
+ return ob and workspace.object_mode == 'POSE' and context.bone
def draw(self, context):
layout = self.layout
@@ -433,13 +436,14 @@ class BONE_PT_deform(BoneButtonsPanel, Panel):
class BONE_PT_custom_props(BoneButtonsPanel, PropertyPanel, Panel):
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
_property_type = bpy.types.Bone, bpy.types.EditBone, bpy.types.PoseBone
@property
def _context_path(self):
obj = bpy.context.object
- if obj and obj.mode == 'POSE':
+ workspace = context.workspace
+ if obj and workspace.object_mode == 'POSE':
return "active_pose_bone"
else:
return "active_bone"
diff --git a/release/scripts/startup/bl_ui/properties_data_camera.py b/release/scripts/startup/bl_ui/properties_data_camera.py
index 14286045704..0d0fc96550d 100644
--- a/release/scripts/startup/bl_ui/properties_data_camera.py
+++ b/release/scripts/startup/bl_ui/properties_data_camera.py
@@ -29,7 +29,7 @@ class CameraButtonsPanel:
@classmethod
def poll(cls, context):
- engine = context.scene.render.engine
+ engine = context.engine
return context.camera and (engine in cls.COMPAT_ENGINES)
@@ -37,7 +37,7 @@ class CAMERA_MT_presets(Menu):
bl_label = "Camera Presets"
preset_subdir = "camera"
preset_operator = "script.execute_preset"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
draw = Menu.draw_preset
@@ -45,14 +45,14 @@ class SAFE_AREAS_MT_presets(Menu):
bl_label = "Camera Presets"
preset_subdir = "safe_areas"
preset_operator = "script.execute_preset"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
draw = Menu.draw_preset
class DATA_PT_context_camera(CameraButtonsPanel, Panel):
bl_label = ""
bl_options = {'HIDE_HEADER'}
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
@@ -72,7 +72,7 @@ class DATA_PT_context_camera(CameraButtonsPanel, Panel):
class DATA_PT_lens(CameraButtonsPanel, Panel):
bl_label = "Lens"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
@@ -96,7 +96,7 @@ class DATA_PT_lens(CameraButtonsPanel, Panel):
col.prop(cam, "ortho_scale")
elif cam.type == 'PANO':
- engine = context.scene.render.engine
+ engine = context.engine
if engine == 'CYCLES':
ccam = cam.cycles
col.prop(ccam, "panorama_type", text="Type")
@@ -114,7 +114,7 @@ class DATA_PT_lens(CameraButtonsPanel, Panel):
sub = row.column(align=True)
sub.prop(ccam, "longitude_min")
sub.prop(ccam, "longitude_max")
- elif engine == 'BLENDER_RENDER':
+ elif engine in {'BLENDER_RENDER', 'BLENDER_CLAY', 'BLENDER_EEVEE'}:
row = col.row()
if cam.lens_unit == 'MILLIMETERS':
row.prop(cam, "lens")
@@ -137,7 +137,7 @@ class DATA_PT_lens(CameraButtonsPanel, Panel):
class DATA_PT_camera_stereoscopy(CameraButtonsPanel, Panel):
bl_label = "Stereoscopy"
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
@classmethod
def poll(cls, context):
@@ -147,11 +147,11 @@ class DATA_PT_camera_stereoscopy(CameraButtonsPanel, Panel):
def draw(self, context):
layout = self.layout
- render = context.scene.render
+ view_render = context.scene.view_render
st = context.camera.stereo
cam = context.camera
- is_spherical_stereo = cam.type != 'ORTHO' and render.use_spherical_stereo
+ is_spherical_stereo = cam.type != 'ORTHO' and view_render.use_spherical_stereo
use_spherical_stereo = is_spherical_stereo and st.use_spherical_stereo
col = layout.column()
@@ -183,7 +183,7 @@ class DATA_PT_camera_stereoscopy(CameraButtonsPanel, Panel):
class DATA_PT_camera(CameraButtonsPanel, Panel):
bl_label = "Camera"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
@@ -217,7 +217,7 @@ class DATA_PT_camera(CameraButtonsPanel, Panel):
class DATA_PT_camera_dof(CameraButtonsPanel, Panel):
bl_label = "Depth of Field"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
@@ -234,20 +234,131 @@ class DATA_PT_camera_dof(CameraButtonsPanel, Panel):
sub.active = (cam.dof_object is None)
sub.prop(cam, "dof_distance", text="Distance")
- hq_support = dof_options.is_hq_supported
- col = split.column(align=True)
- col.label("Viewport:")
- sub = col.column()
- sub.active = hq_support
- sub.prop(dof_options, "use_high_quality")
- col.prop(dof_options, "fstop")
- if dof_options.use_high_quality and hq_support:
- col.prop(dof_options, "blades")
+ if context.engine == 'BLENDER_EEVEE':
+ col = split.column(align=True)
+ col.label("Aperture:")
+ engine = context.engine
+ sub = col.column(align=True)
+ sub.prop(dof_options, "fstop")
+ sub.prop(dof_options, "blades")
+ sub.prop(dof_options, "rotation")
+ sub.prop(dof_options, "ratio")
+ else:
+ hq_support = dof_options.is_hq_supported
+ col = split.column(align=True)
+ col.label("Viewport:")
+ sub = col.column()
+ sub.active = hq_support
+ sub.prop(dof_options, "use_high_quality")
+ col.prop(dof_options, "fstop")
+ if dof_options.use_high_quality and hq_support:
+ col.prop(dof_options, "blades")
+
+
+class DATA_PT_camera_background_image(CameraButtonsPanel, Panel):
+ bl_label = "Background Images"
+ bl_options = {'DEFAULT_CLOSED'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
+
+ def draw_header(self, context):
+ cam = context.camera
+
+ self.layout.prop(cam, "show_background_images", text="")
+
+ def draw(self, context):
+ layout = self.layout
+
+ cam = context.camera
+ use_multiview = context.scene.render.use_multiview
+
+ col = layout.column()
+ col.operator("view3d.background_image_add", text="Add Image")
+
+ for i, bg in enumerate(cam.background_images):
+ layout.active = cam.show_background_images
+ box = layout.box()
+ row = box.row(align=True)
+ row.prop(bg, "show_expanded", text="", emboss=False)
+ if bg.source == 'IMAGE' and bg.image:
+ row.prop(bg.image, "name", text="", emboss=False)
+ elif bg.source == 'MOVIE_CLIP' and bg.clip:
+ row.prop(bg.clip, "name", text="", emboss=False)
+ else:
+ row.label(text="Not Set")
+
+ if bg.show_background_image:
+ row.prop(bg, "show_background_image", text="", emboss=False, icon='RESTRICT_VIEW_OFF')
+ else:
+ row.prop(bg, "show_background_image", text="", emboss=False, icon='RESTRICT_VIEW_ON')
+
+ row.operator("view3d.background_image_remove", text="", emboss=False, icon='X').index = i
+
+ if bg.show_expanded:
+ row = box.row()
+ row.prop(bg, "source", expand=True)
+
+ has_bg = False
+ if bg.source == 'IMAGE':
+ row = box.row()
+ row.template_ID(bg, "image", open="image.open")
+ if bg.image is not None:
+ box.template_image(bg, "image", bg.image_user, compact=True)
+ has_bg = True
+
+ if use_multiview and bg.view_axis in {'CAMERA', 'ALL'}:
+ box.prop(bg.image, "use_multiview")
+
+ column = box.column()
+ column.active = bg.image.use_multiview
+
+ column.label(text="Views Format:")
+ column.row().prop(bg.image, "views_format", expand=True)
+
+ sub = column.box()
+ sub.active = bg.image.views_format == 'STEREO_3D'
+ sub.template_image_stereo_3d(bg.image.stereo_3d_format)
+
+ elif bg.source == 'MOVIE_CLIP':
+ box.prop(bg, "use_camera_clip")
+
+ column = box.column()
+ column.active = not bg.use_camera_clip
+ column.template_ID(bg, "clip", open="clip.open")
+
+ if bg.clip:
+ column.template_movieclip(bg, "clip", compact=True)
+
+ if bg.use_camera_clip or bg.clip:
+ has_bg = True
+
+ column = box.column()
+ column.active = has_bg
+ column.prop(bg.clip_user, "proxy_render_size", text="")
+ column.prop(bg.clip_user, "use_render_undistorted")
+
+ if has_bg:
+ col = box.column()
+ col.prop(bg, "alpha", slider=True)
+ col.row().prop(bg, "draw_depth", expand=True)
+
+ col.row().prop(bg, "frame_method", expand=True)
+
+ box = col.box()
+ row = box.row()
+ row.prop(bg, "offset")
+
+ row = box.row()
+ row.prop(bg, "use_flip_x")
+ row.prop(bg, "use_flip_y")
+
+ row = box.row()
+ row.prop(bg, "rotation")
+ row.prop(bg, "scale")
class DATA_PT_camera_display(CameraButtonsPanel, Panel):
bl_label = "Display"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
@@ -277,7 +388,7 @@ class DATA_PT_camera_display(CameraButtonsPanel, Panel):
class DATA_PT_camera_safe_areas(CameraButtonsPanel, Panel):
bl_label = "Safe Areas"
bl_options = {'DEFAULT_CLOSED'}
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
def draw_header(self, context):
cam = context.camera
@@ -293,7 +404,7 @@ class DATA_PT_camera_safe_areas(CameraButtonsPanel, Panel):
class DATA_PT_custom_props_camera(CameraButtonsPanel, PropertyPanel, Panel):
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
_context_path = "object.data"
_property_type = bpy.types.Camera
@@ -334,6 +445,7 @@ classes = (
DATA_PT_camera_stereoscopy,
DATA_PT_camera_dof,
DATA_PT_camera_display,
+ DATA_PT_camera_background_image,
DATA_PT_camera_safe_areas,
DATA_PT_custom_props_camera,
)
diff --git a/release/scripts/startup/bl_ui/properties_data_curve.py b/release/scripts/startup/bl_ui/properties_data_curve.py
index 3a3ad31a8ef..6fb147007e6 100644
--- a/release/scripts/startup/bl_ui/properties_data_curve.py
+++ b/release/scripts/startup/bl_ui/properties_data_curve.py
@@ -136,7 +136,7 @@ class DATA_PT_shape_curve(CurveButtonsPanel, Panel):
class DATA_PT_curve_texture_space(CurveButtonsPanel, Panel):
bl_label = "Texture Space"
bl_options = {'DEFAULT_CLOSED'}
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
@@ -427,7 +427,7 @@ class DATA_PT_text_boxes(CurveButtonsPanelText, Panel):
class DATA_PT_custom_props_curve(CurveButtonsPanel, PropertyPanel, Panel):
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
_context_path = "object.data"
_property_type = bpy.types.Curve
diff --git a/release/scripts/startup/bl_ui/properties_data_lamp.py b/release/scripts/startup/bl_ui/properties_data_lamp.py
index f9394139b42..9ee17d808cf 100644
--- a/release/scripts/startup/bl_ui/properties_data_lamp.py
+++ b/release/scripts/startup/bl_ui/properties_data_lamp.py
@@ -26,7 +26,7 @@ class LAMP_MT_sunsky_presets(Menu):
bl_label = "Sun & Sky Presets"
preset_subdir = "sunsky"
preset_operator = "script.execute_preset"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
draw = Menu.draw_preset
@@ -37,14 +37,14 @@ class DataButtonsPanel:
@classmethod
def poll(cls, context):
- engine = context.scene.render.engine
+ engine = context.engine
return context.lamp and (engine in cls.COMPAT_ENGINES)
class DATA_PT_context_lamp(DataButtonsPanel, Panel):
bl_label = ""
bl_options = {'HIDE_HEADER'}
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
@@ -68,7 +68,7 @@ class DATA_PT_context_lamp(DataButtonsPanel, Panel):
class DATA_PT_preview(DataButtonsPanel, Panel):
bl_label = "Preview"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
def draw(self, context):
self.layout.template_preview(context.lamp)
@@ -76,7 +76,7 @@ class DATA_PT_preview(DataButtonsPanel, Panel):
class DATA_PT_lamp(DataButtonsPanel, Panel):
bl_label = "Lamp"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY'}
def draw(self, context):
layout = self.layout
@@ -96,6 +96,7 @@ class DATA_PT_lamp(DataButtonsPanel, Panel):
sub.label(text="Falloff:")
sub.prop(lamp, "falloff_type", text="")
sub.prop(lamp, "distance")
+ sub.prop(lamp, "shadow_soft_size", text="Radius")
if lamp.falloff_type == 'LINEAR_QUADRATIC_WEIGHTED':
col.label(text="Attenuation Factors:")
@@ -123,6 +124,47 @@ class DATA_PT_lamp(DataButtonsPanel, Panel):
col.prop(lamp, "use_diffuse")
+class DATA_PT_EEVEE_lamp(DataButtonsPanel, Panel):
+ bl_label = "Lamp"
+ COMPAT_ENGINES = {'BLENDER_EEVEE'}
+
+ def draw(self, context):
+ layout = self.layout
+
+ lamp = context.lamp
+
+ layout.row().prop(lamp, "type", expand=True)
+
+ split = layout.split()
+
+ col = split.column()
+ sub = col.column()
+ sub.prop(lamp, "color", text="")
+ sub.prop(lamp, "energy")
+
+ if lamp.type in {'POINT', 'SPOT', 'SUN'}:
+ sub.prop(lamp, "shadow_soft_size", text="Radius")
+ elif lamp.type == 'AREA':
+ sub = sub.column(align=True)
+ sub.prop(lamp, "shape", text="")
+ if lamp.shape == 'SQUARE':
+ sub.prop(lamp, "size")
+ elif lamp.shape == 'RECTANGLE':
+ sub.prop(lamp, "size", text="Size X")
+ sub.prop(lamp, "size_y", text="Size Y")
+
+ col = split.column()
+ col.prop(lamp, "use_specular")
+ col.prop(lamp, "use_diffuse")
+ col.separator()
+
+ if lamp.type in {'POINT', 'SPOT', 'AREA'}:
+ col.prop(lamp, "use_sphere")
+ col = col.column()
+ col.active = lamp.use_sphere
+ col.prop(lamp, "distance")
+
+
class DATA_PT_sunsky(DataButtonsPanel, Panel):
bl_label = "Sky & Atmosphere"
COMPAT_ENGINES = {'BLENDER_RENDER'}
@@ -130,7 +172,7 @@ class DATA_PT_sunsky(DataButtonsPanel, Panel):
@classmethod
def poll(cls, context):
lamp = context.lamp
- engine = context.scene.render.engine
+ engine = context.engine
return (lamp and lamp.type == 'SUN') and (engine in cls.COMPAT_ENGINES)
def draw(self, context):
@@ -202,7 +244,7 @@ class DATA_PT_shadow(DataButtonsPanel, Panel):
@classmethod
def poll(cls, context):
lamp = context.lamp
- engine = context.scene.render.engine
+ engine = context.engine
return (lamp and lamp.type in {'POINT', 'SUN', 'SPOT', 'AREA'}) and (engine in cls.COMPAT_ENGINES)
def draw(self, context):
@@ -307,17 +349,80 @@ class DATA_PT_shadow(DataButtonsPanel, Panel):
col.prop(lamp, "use_auto_clip_end", text="Autoclip End")
sub = col.column()
sub.active = not lamp.use_auto_clip_end
- sub.prop(lamp, "shadow_buffer_clip_end", text=" Clip End")
+ sub.prop(lamp, "shadow_buffer_clip_end", text="Clip End")
+
+
+class DATA_PT_EEVEE_shadow(DataButtonsPanel, Panel):
+ bl_label = "Shadow"
+ COMPAT_ENGINES = {'BLENDER_EEVEE'}
+
+ @classmethod
+ def poll(cls, context):
+ lamp = context.lamp
+ engine = context.engine
+ return (lamp and lamp.type in {'POINT', 'SUN', 'SPOT', 'AREA'}) and (engine in cls.COMPAT_ENGINES)
+
+ def draw_header(self, context):
+ lamp = context.lamp
+ self.layout.prop(lamp, "use_shadow", text="")
+
+ def draw(self, context):
+ layout = self.layout
+
+ lamp = context.lamp
+
+ split = layout.split()
+ split.active = lamp.use_shadow
+
+ sub = split.column()
+ col = sub.column(align=True)
+ col.prop(lamp, "shadow_buffer_clip_start", text="Clip Start")
+ col.prop(lamp, "shadow_buffer_clip_end", text="Clip End")
+ col = sub.column()
+ col.prop(lamp, "shadow_buffer_soft", text="Soft")
+
+ col = split.column(align=True)
+ col.prop(lamp, "shadow_buffer_bias", text="Bias")
+ col.prop(lamp, "shadow_buffer_exp", text="Exponent")
+ col.prop(lamp, "shadow_buffer_bleed_bias", text="Bleed Bias")
+
+ if lamp.type == 'SUN':
+ col = layout.column()
+ col.active = lamp.use_shadow
+ col.label("Cascaded Shadow Map:")
+
+ split = col.split()
+
+ sub = split.column()
+ sub.prop(lamp, "shadow_cascade_count", text="Count")
+ sub.prop(lamp, "shadow_cascade_fade", text="Fade")
+
+ sub = split.column()
+ sub.prop(lamp, "shadow_cascade_max_distance", text="Max Distance")
+ sub.prop(lamp, "shadow_cascade_exponent", text="Distribution")
+
+ layout.separator()
+
+ layout.prop(lamp, "use_contact_shadow")
+ split = layout.split()
+ split.active = lamp.use_contact_shadow
+ col = split.column()
+ col.prop(lamp, "contact_shadow_distance", text="Distance")
+ col.prop(lamp, "contact_shadow_soft_size", text="Soft")
+
+ col = split.column()
+ col.prop(lamp, "contact_shadow_bias", text="Bias")
+ col.prop(lamp, "contact_shadow_thickness", text="Thickness")
class DATA_PT_area(DataButtonsPanel, Panel):
bl_label = "Area Shape"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY'}
@classmethod
def poll(cls, context):
lamp = context.lamp
- engine = context.scene.render.engine
+ engine = context.engine
return (lamp and lamp.type == 'AREA') and (engine in cls.COMPAT_ENGINES)
def draw(self, context):
@@ -338,12 +443,12 @@ class DATA_PT_area(DataButtonsPanel, Panel):
class DATA_PT_spot(DataButtonsPanel, Panel):
bl_label = "Spot Shape"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY'}
@classmethod
def poll(cls, context):
lamp = context.lamp
- engine = context.scene.render.engine
+ engine = context.engine
return (lamp and lamp.type == 'SPOT') and (engine in cls.COMPAT_ENGINES)
def draw(self, context):
@@ -371,15 +476,40 @@ class DATA_PT_spot(DataButtonsPanel, Panel):
sub.prop(lamp, "halo_step", text="Step")
+class DATA_PT_spot(DataButtonsPanel, Panel):
+ bl_label = "Spot Shape"
+ COMPAT_ENGINES = {'BLENDER_EEVEE'}
+
+ @classmethod
+ def poll(cls, context):
+ lamp = context.lamp
+ engine = context.engine
+ return (lamp and lamp.type == 'SPOT') and (engine in cls.COMPAT_ENGINES)
+
+ def draw(self, context):
+ layout = self.layout
+
+ lamp = context.lamp
+
+ split = layout.split()
+
+ col = split.column()
+ sub = col.column()
+ sub.prop(lamp, "spot_size", text="Size")
+ sub.prop(lamp, "spot_blend", text="Blend", slider=True)
+ col = split.column()
+ col.prop(lamp, "show_cone")
+
+
class DATA_PT_falloff_curve(DataButtonsPanel, Panel):
bl_label = "Falloff Curve"
bl_options = {'DEFAULT_CLOSED'}
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
@classmethod
def poll(cls, context):
lamp = context.lamp
- engine = context.scene.render.engine
+ engine = context.engine
return (lamp and lamp.type in {'POINT', 'SPOT'} and lamp.falloff_type == 'CUSTOM_CURVE') and (engine in cls.COMPAT_ENGINES)
@@ -390,7 +520,7 @@ class DATA_PT_falloff_curve(DataButtonsPanel, Panel):
class DATA_PT_custom_props_lamp(DataButtonsPanel, PropertyPanel, Panel):
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
_context_path = "object.data"
_property_type = bpy.types.Lamp
@@ -400,8 +530,10 @@ classes = (
DATA_PT_context_lamp,
DATA_PT_preview,
DATA_PT_lamp,
+ DATA_PT_EEVEE_lamp,
DATA_PT_sunsky,
DATA_PT_shadow,
+ DATA_PT_EEVEE_shadow,
DATA_PT_area,
DATA_PT_spot,
DATA_PT_falloff_curve,
diff --git a/release/scripts/startup/bl_ui/properties_data_lattice.py b/release/scripts/startup/bl_ui/properties_data_lattice.py
index 4b3fd48c195..34cb323a8cb 100644
--- a/release/scripts/startup/bl_ui/properties_data_lattice.py
+++ b/release/scripts/startup/bl_ui/properties_data_lattice.py
@@ -78,7 +78,7 @@ class DATA_PT_lattice(DataButtonsPanel, Panel):
class DATA_PT_custom_props_lattice(DataButtonsPanel, PropertyPanel, Panel):
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
_context_path = "object.data"
_property_type = bpy.types.Lattice
diff --git a/release/scripts/startup/bl_ui/properties_data_lightprobe.py b/release/scripts/startup/bl_ui/properties_data_lightprobe.py
new file mode 100644
index 00000000000..e01ca88b587
--- /dev/null
+++ b/release/scripts/startup/bl_ui/properties_data_lightprobe.py
@@ -0,0 +1,185 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# <pep8 compliant>
+import bpy
+from bpy.types import Panel
+
+
+class DataButtonsPanel:
+ bl_space_type = 'PROPERTIES'
+ bl_region_type = 'WINDOW'
+ bl_context = "data"
+
+ @classmethod
+ def poll(cls, context):
+ engine = context.engine
+ return context.lightprobe and (engine in cls.COMPAT_ENGINES)
+
+
+class DATA_PT_context_lightprobe(DataButtonsPanel, Panel):
+ bl_label = ""
+ bl_options = {'HIDE_HEADER'}
+ COMPAT_ENGINES = {'BLENDER_CLAY', 'BLENDER_EEVEE'}
+
+ def draw(self, context):
+ layout = self.layout
+
+ ob = context.object
+ probe = context.lightprobe
+ space = context.space_data
+
+ if ob:
+ layout.template_ID(ob, "data")
+ elif probe:
+ layout.template_ID(space, "pin_id")
+
+
+class DATA_PT_lightprobe(DataButtonsPanel, Panel):
+ bl_label = "Probe"
+ COMPAT_ENGINES = {'BLENDER_CLAY', 'BLENDER_EEVEE'}
+
+ def draw(self, context):
+ layout = self.layout
+
+ ob = context.object
+ probe = context.lightprobe
+
+ split = layout.split()
+
+ if probe.type == 'GRID':
+ col = split.column(align=True)
+ col.label("Influence:")
+ col.prop(probe, "influence_distance", "Distance")
+ col.prop(probe, "falloff")
+ col.prop(probe, "intensity")
+
+ col.separator()
+
+ col.label("Resolution:")
+ col.prop(probe, "grid_resolution_x", text="X")
+ col.prop(probe, "grid_resolution_y", text="Y")
+ col.prop(probe, "grid_resolution_z", text="Z")
+ elif probe.type == 'PLANAR':
+ col = split.column(align=True)
+ col.label("Influence:")
+ col.prop(probe, "influence_distance", "Distance")
+ col.prop(probe, "falloff")
+ else:
+ col = split.column(align=True)
+ col.label("Influence:")
+ col.prop(probe, "influence_type", text="")
+
+ if probe.influence_type == 'ELIPSOID':
+ col.prop(probe, "influence_distance", "Radius")
+ else:
+ col.prop(probe, "influence_distance", "Size")
+
+ col.prop(probe, "falloff")
+ col.prop(probe, "intensity")
+
+ col = split.column(align=True)
+
+ col.label("Clipping:")
+ col.prop(probe, "clip_start", text="Start")
+
+ if probe.type != "PLANAR":
+ col.prop(probe, "clip_end", text="End")
+
+ if probe.type == 'GRID':
+ col.separator()
+
+ col.label("Visibily:")
+ col.prop(probe, "visibility_buffer_bias", "Bias")
+ col.prop(probe, "visibility_bleed_bias", "Bleed Bias")
+ col.prop(probe, "visibility_blur", "Blur")
+
+
+class DATA_PT_lightprobe_parallax(DataButtonsPanel, Panel):
+ bl_label = "Parallax"
+ COMPAT_ENGINES = {'BLENDER_CLAY', 'BLENDER_EEVEE'}
+
+ @classmethod
+ def poll(cls, context):
+ engine = context.engine
+ return context.lightprobe and context.lightprobe.type == 'CUBEMAP' and (engine in cls.COMPAT_ENGINES)
+
+ def draw(self, context):
+ layout = self.layout
+
+ ob = context.object
+ probe = context.lightprobe
+
+ layout.prop(probe, "use_custom_parallax")
+
+ col = layout.column()
+ col.active = probe.use_custom_parallax
+
+ row = col.row()
+ row.prop(probe, "parallax_type", expand=True)
+
+ if probe.parallax_type == 'ELIPSOID':
+ col.prop(probe, "parallax_distance", "Radius")
+ else:
+ col.prop(probe, "parallax_distance", "Size")
+
+
+class DATA_PT_lightprobe_display(DataButtonsPanel, Panel):
+ bl_label = "Display"
+ COMPAT_ENGINES = {'BLENDER_CLAY', 'BLENDER_EEVEE'}
+
+ def draw(self, context):
+ layout = self.layout
+
+ ob = context.object
+ probe = context.lightprobe
+
+ row = layout.row()
+ row.prop(probe, "show_data")
+
+ if probe.type != "PLANAR":
+ row.prop(probe, "data_draw_size", text="Size")
+ else:
+ row.prop(ob, "empty_draw_size", text="Arrow Size")
+
+ split = layout.split()
+
+ if probe.type in {'GRID', 'CUBEMAP'}:
+ col = split.column()
+ col.prop(probe, "show_influence")
+
+ col = split.column()
+ col.prop(probe, "show_clip")
+
+ if probe.type == 'CUBEMAP':
+ col = split.column()
+ col.active = probe.use_custom_parallax
+ col.prop(probe, "show_parallax")
+
+
+classes = (
+ DATA_PT_context_lightprobe,
+ DATA_PT_lightprobe,
+ DATA_PT_lightprobe_parallax,
+ DATA_PT_lightprobe_display,
+)
+
+if __name__ == "__main__": # only for live edit.
+ from bpy.utils import register_class
+ for cls in classes:
+ register_class(cls)
diff --git a/release/scripts/startup/bl_ui/properties_data_mesh.py b/release/scripts/startup/bl_ui/properties_data_mesh.py
index 2ab9aa2e93f..ee6e09039be 100644
--- a/release/scripts/startup/bl_ui/properties_data_mesh.py
+++ b/release/scripts/startup/bl_ui/properties_data_mesh.py
@@ -24,7 +24,7 @@ from rna_prop_ui import PropertyPanel
class MESH_MT_vertex_group_specials(Menu):
bl_label = "Vertex Group Specials"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
@@ -48,7 +48,7 @@ class MESH_MT_vertex_group_specials(Menu):
class MESH_MT_shape_key_specials(Menu):
bl_label = "Shape Key Specials"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
@@ -76,6 +76,17 @@ class MESH_UL_vgroups(UIList):
layout.label(text="", icon_value=icon)
+class MESH_UL_fmaps(UIList):
+ def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index):
+ # assert(isinstance(item, bpy.types.FaceMap))
+ fmap = item
+ if self.layout_type in {'DEFAULT', 'COMPACT'}:
+ layout.prop(fmap, "name", text="", emboss=False, icon_value=icon)
+ elif self.layout_type in {'GRID'}:
+ layout.alignment = 'CENTER'
+ layout.label(text="", icon_value=icon)
+
+
class MESH_UL_shape_keys(UIList):
def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index):
# assert(isinstance(item, bpy.types.ShapeKey))
@@ -83,10 +94,13 @@ class MESH_UL_shape_keys(UIList):
# key = data
key_block = item
if self.layout_type in {'DEFAULT', 'COMPACT'}:
+ workspace = context.workspace
split = layout.split(0.66, False)
split.prop(key_block, "name", text="", emboss=False, icon_value=icon)
row = split.row(align=True)
- if key_block.mute or (obj.mode == 'EDIT' and not (obj.use_shape_key_edit_mode and obj.type == 'MESH')):
+ if (key_block.mute or
+ (workspace.object_mode == 'EDIT' and not (obj.use_shape_key_edit_mode and obj.type == 'MESH'))
+ ):
row.active = False
if not item.id_data.use_relative:
row.prop(key_block, "frame", text="", emboss=False)
@@ -119,14 +133,14 @@ class MeshButtonsPanel:
@classmethod
def poll(cls, context):
- engine = context.scene.render.engine
+ engine = context.engine
return context.mesh and (engine in cls.COMPAT_ENGINES)
class DATA_PT_context_mesh(MeshButtonsPanel, Panel):
bl_label = ""
bl_options = {'HIDE_HEADER'}
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
@@ -143,7 +157,7 @@ class DATA_PT_context_mesh(MeshButtonsPanel, Panel):
class DATA_PT_normals(MeshButtonsPanel, Panel):
bl_label = "Normals"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
@@ -164,7 +178,7 @@ class DATA_PT_normals(MeshButtonsPanel, Panel):
class DATA_PT_texture_space(MeshButtonsPanel, Panel):
bl_label = "Texture Space"
bl_options = {'DEFAULT_CLOSED'}
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
@@ -183,17 +197,18 @@ class DATA_PT_texture_space(MeshButtonsPanel, Panel):
class DATA_PT_vertex_groups(MeshButtonsPanel, Panel):
bl_label = "Vertex Groups"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
@classmethod
def poll(cls, context):
- engine = context.scene.render.engine
+ engine = context.engine
obj = context.object
return (obj and obj.type in {'MESH', 'LATTICE'} and (engine in cls.COMPAT_ENGINES))
def draw(self, context):
layout = self.layout
+ workspace = context.workspace
ob = context.object
group = ob.vertex_groups.active
@@ -214,7 +229,10 @@ class DATA_PT_vertex_groups(MeshButtonsPanel, Panel):
col.operator("object.vertex_group_move", icon='TRIA_UP', text="").direction = 'UP'
col.operator("object.vertex_group_move", icon='TRIA_DOWN', text="").direction = 'DOWN'
- if ob.vertex_groups and (ob.mode == 'EDIT' or (ob.mode == 'WEIGHT_PAINT' and ob.type == 'MESH' and ob.data.use_paint_mask_vertex)):
+ if (ob.vertex_groups and
+ ((workspace.object_mode == 'EDIT') or
+ (workspace.object_mode == 'WEIGHT_PAINT' and ob.type == 'MESH' and ob.data.use_paint_mask_vertex))
+ ):
row = layout.row()
sub = row.row(align=True)
@@ -228,24 +246,67 @@ class DATA_PT_vertex_groups(MeshButtonsPanel, Panel):
layout.prop(context.tool_settings, "vertex_group_weight", text="Weight")
+class DATA_PT_face_maps(MeshButtonsPanel, Panel):
+ bl_label = "Face Maps"
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+
+ @classmethod
+ def poll(cls, context):
+ obj = context.object
+ return (obj and obj.type == 'MESH')
+
+ def draw(self, context):
+ layout = self.layout
+
+ workspace = context.workspace
+ ob = context.object
+ facemap = ob.face_maps.active
+
+ rows = 2
+ if facemap:
+ rows = 4
+
+ row = layout.row()
+ row.template_list("MESH_UL_fmaps", "", ob, "face_maps", ob.face_maps, "active_index", rows=rows)
+
+ col = row.column(align=True)
+ col.operator("object.face_map_add", icon='ZOOMIN', text="")
+ col.operator("object.face_map_remove", icon='ZOOMOUT', text="")
+ if facemap:
+ col.separator()
+ col.operator("object.face_map_move", icon='TRIA_UP', text="").direction = 'UP'
+ col.operator("object.face_map_move", icon='TRIA_DOWN', text="").direction = 'DOWN'
+
+ if ob.face_maps and (workspace.object_mode == 'EDIT' and ob.type == 'MESH'):
+ row = layout.row()
+
+ sub = row.row(align=True)
+ sub.operator("object.face_map_assign", text="Assign")
+ sub.operator("object.face_map_remove_from", text="Remove")
+
+ sub = row.row(align=True)
+ sub.operator("object.face_map_select", text="Select")
+ sub.operator("object.face_map_deselect", text="Deselect")
+
class DATA_PT_shape_keys(MeshButtonsPanel, Panel):
bl_label = "Shape Keys"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
@classmethod
def poll(cls, context):
- engine = context.scene.render.engine
+ engine = context.engine
obj = context.object
return (obj and obj.type in {'MESH', 'LATTICE', 'CURVE', 'SURFACE'} and (engine in cls.COMPAT_ENGINES))
def draw(self, context):
layout = self.layout
+ workspace = context.workspace
ob = context.object
key = ob.data.shape_keys
kb = ob.active_shape_key
- enable_edit = ob.mode != 'EDIT'
+ enable_edit = workspace.object_mode != 'EDIT'
enable_edit_value = False
if ob.show_only_shape_key is False:
@@ -323,7 +384,7 @@ class DATA_PT_shape_keys(MeshButtonsPanel, Panel):
class DATA_PT_uv_texture(MeshButtonsPanel, Panel):
bl_label = "UV Maps"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
@@ -333,7 +394,7 @@ class DATA_PT_uv_texture(MeshButtonsPanel, Panel):
row = layout.row()
col = row.column()
- col.template_list("MESH_UL_uvmaps_vcols", "uvmaps", me, "uv_textures", me.uv_textures, "active_index", rows=1)
+ col.template_list("MESH_UL_uvmaps_vcols", "uvmaps", me, "uv_layers", me.uv_layers, "active_index", rows=1)
col = row.column(align=True)
col.operator("mesh.uv_texture_add", icon='ZOOMIN', text="")
@@ -342,7 +403,7 @@ class DATA_PT_uv_texture(MeshButtonsPanel, Panel):
class DATA_PT_vertex_colors(MeshButtonsPanel, Panel):
bl_label = "Vertex Colors"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
@@ -362,11 +423,12 @@ class DATA_PT_vertex_colors(MeshButtonsPanel, Panel):
class DATA_PT_customdata(MeshButtonsPanel, Panel):
bl_label = "Geometry Data"
bl_options = {'DEFAULT_CLOSED'}
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
+ workspace = context.workspace
obj = context.object
me = context.mesh
col = layout.column()
@@ -381,14 +443,14 @@ class DATA_PT_customdata(MeshButtonsPanel, Panel):
col = layout.column()
- col.enabled = (obj.mode != 'EDIT')
+ col.enabled = (workspace.object_mode != 'EDIT')
col.prop(me, "use_customdata_vertex_bevel")
col.prop(me, "use_customdata_edge_bevel")
col.prop(me, "use_customdata_edge_crease")
class DATA_PT_custom_props_mesh(MeshButtonsPanel, PropertyPanel, Panel):
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
_context_path = "object.data"
_property_type = bpy.types.Mesh
@@ -397,12 +459,14 @@ classes = (
MESH_MT_vertex_group_specials,
MESH_MT_shape_key_specials,
MESH_UL_vgroups,
+ MESH_UL_fmaps,
MESH_UL_shape_keys,
MESH_UL_uvmaps_vcols,
DATA_PT_context_mesh,
DATA_PT_normals,
DATA_PT_texture_space,
DATA_PT_vertex_groups,
+ DATA_PT_face_maps,
DATA_PT_shape_keys,
DATA_PT_uv_texture,
DATA_PT_vertex_colors,
diff --git a/release/scripts/startup/bl_ui/properties_data_metaball.py b/release/scripts/startup/bl_ui/properties_data_metaball.py
index dd62c4523b1..e771caf49e3 100644
--- a/release/scripts/startup/bl_ui/properties_data_metaball.py
+++ b/release/scripts/startup/bl_ui/properties_data_metaball.py
@@ -76,7 +76,7 @@ class DATA_PT_metaball(DataButtonsPanel, Panel):
class DATA_PT_mball_texture_space(DataButtonsPanel, Panel):
bl_label = "Texture Space"
bl_options = {'DEFAULT_CLOSED'}
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
@@ -131,7 +131,7 @@ class DATA_PT_metaball_element(DataButtonsPanel, Panel):
class DATA_PT_custom_props_metaball(DataButtonsPanel, PropertyPanel, Panel):
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
_context_path = "object.data"
_property_type = bpy.types.MetaBall
diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py
index 942882a9053..32a1b3a771d 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -357,7 +357,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
col.prop(md, "texture_coords_object", text="")
elif md.texture_coords == 'UV' and ob.type == 'MESH':
col.label(text="UV Map:")
- col.prop_search(md, "uv_layer", ob.data, "uv_textures", text="")
+ col.prop_search(md, "uv_layer", ob.data, "uv_layers", text="")
layout.separator()
@@ -389,7 +389,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
sub.active = bool(md.vertex_group)
sub.prop(md, "protect")
col.label(text="Particle UV")
- col.prop_search(md, "particle_uv", ob.data, "uv_textures", text="")
+ col.prop_search(md, "particle_uv", ob.data, "uv_layers", text="")
col = split.column()
col.prop(md, "use_edge_cut")
@@ -404,6 +404,8 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
layout.label(text="Settings are inside the Physics tab")
def HOOK(self, layout, ob, md):
+ from bpy import context
+ workspace = context.workspace
use_falloff = (md.falloff_type != 'NONE')
split = layout.split()
@@ -435,7 +437,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
col = split.column()
col.prop(md, "use_falloff_uniform")
- if ob.mode == 'EDIT':
+ if workspace.object_mode == 'EDIT':
row = col.row(align=True)
row.operator("object.hook_reset", text="Reset")
row.operator("object.hook_recenter", text="Recenter")
@@ -591,6 +593,9 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
col.prop(md, "mirror_object", text="")
def MULTIRES(self, layout, ob, md):
+ from bpy import context
+ workspace = context.workspace
+
layout.row().prop(md, "subdivision_type", expand=True)
split = layout.split()
@@ -601,7 +606,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
col = split.column()
- col.enabled = ob.mode != 'EDIT'
+ col.enabled = workspace.object_mode != 'EDIT'
col.operator("object.multires_subdivide", text="Subdivide")
col.operator("object.multires_higher_levels_delete", text="Delete Higher")
col.operator("object.multires_reshape", text="Reshape")
@@ -1005,11 +1010,10 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
col = split.column()
col.label(text="UV Map:")
- col.prop_search(md, "uv_layer", ob.data, "uv_textures", text="")
+ col.prop_search(md, "uv_layer", ob.data, "uv_layers", text="")
split = layout.split()
col = split.column()
- col.prop(md, "use_image_override")
col.prop(md, "projector_count", text="Projectors")
for proj in md.projectors:
col.prop(proj, "object", text="")
@@ -1063,7 +1067,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
if md.texture_coords == 'OBJECT':
layout.prop(md, "texture_coords_object", text="Object")
elif md.texture_coords == 'UV' and ob.type == 'MESH':
- layout.prop_search(md, "uv_layer", ob.data, "uv_textures")
+ layout.prop_search(md, "uv_layer", ob.data, "uv_layers")
def WAVE(self, layout, ob, md):
split = layout.split()
@@ -1109,7 +1113,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
col.template_ID(md, "texture", new="texture.new")
layout.prop(md, "texture_coords")
if md.texture_coords == 'UV' and ob.type == 'MESH':
- layout.prop_search(md, "uv_layer", ob.data, "uv_textures")
+ layout.prop_search(md, "uv_layer", ob.data, "uv_layers")
elif md.texture_coords == 'OBJECT':
layout.prop(md, "texture_coords_object")
@@ -1176,7 +1180,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
if md.mask_tex_mapping == 'OBJECT':
layout.prop(md, "mask_tex_map_object", text="Object")
elif md.mask_tex_mapping == 'UV' and ob.type == 'MESH':
- layout.prop_search(md, "mask_tex_uv_layer", ob.data, "uv_textures")
+ layout.prop_search(md, "mask_tex_uv_layer", ob.data, "uv_layers")
def VERTEX_WEIGHT_EDIT(self, layout, ob, md):
split = layout.split()
@@ -1345,7 +1349,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
col = split.column()
col.label(text="UV Map:")
- col.prop_search(md, "uv_layer", ob.data, "uv_textures", text="")
+ col.prop_search(md, "uv_layer", ob.data, "uv_layers", text="")
def WIREFRAME(self, layout, ob, md):
has_vgroup = bool(md.vertex_group)
diff --git a/release/scripts/startup/bl_ui/properties_data_speaker.py b/release/scripts/startup/bl_ui/properties_data_speaker.py
index eecb2690302..769efb96b38 100644
--- a/release/scripts/startup/bl_ui/properties_data_speaker.py
+++ b/release/scripts/startup/bl_ui/properties_data_speaker.py
@@ -29,14 +29,14 @@ class DataButtonsPanel:
@classmethod
def poll(cls, context):
- engine = context.scene.render.engine
+ engine = context.engine
return context.speaker and (engine in cls.COMPAT_ENGINES)
class DATA_PT_context_speaker(DataButtonsPanel, Panel):
bl_label = ""
bl_options = {'HIDE_HEADER'}
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
@@ -55,7 +55,7 @@ class DATA_PT_context_speaker(DataButtonsPanel, Panel):
class DATA_PT_speaker(DataButtonsPanel, Panel):
bl_label = "Sound"
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
@@ -74,7 +74,7 @@ class DATA_PT_speaker(DataButtonsPanel, Panel):
class DATA_PT_distance(DataButtonsPanel, Panel):
bl_label = "Distance"
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
@@ -97,7 +97,7 @@ class DATA_PT_distance(DataButtonsPanel, Panel):
class DATA_PT_cone(DataButtonsPanel, Panel):
bl_label = "Cone"
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
@@ -117,7 +117,7 @@ class DATA_PT_cone(DataButtonsPanel, Panel):
class DATA_PT_custom_props_speaker(DataButtonsPanel, PropertyPanel, Panel):
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
_context_path = "object.data"
_property_type = bpy.types.Speaker
diff --git a/release/scripts/startup/bl_ui/properties_data_workspace.py b/release/scripts/startup/bl_ui/properties_data_workspace.py
new file mode 100644
index 00000000000..dae798bee95
--- /dev/null
+++ b/release/scripts/startup/bl_ui/properties_data_workspace.py
@@ -0,0 +1,79 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# <pep8 compliant>
+import bpy
+from bpy.types import (
+ Panel,
+ )
+
+from rna_prop_ui import PropertyPanel
+
+
+class WorkSpaceButtonsPanel:
+ bl_space_type = 'PROPERTIES'
+ bl_region_type = 'WINDOW'
+ bl_context = "workspace"
+
+
+class WORKSPACE_PT_context(WorkSpaceButtonsPanel, Panel):
+ bl_label = ""
+ bl_options = {'HIDE_HEADER'}
+
+ def draw(self, context):
+ layout = self.layout
+
+ workspace = context.workspace
+ layout.prop(workspace, "use_scene_settings", icon='SCENE')
+
+
+class WORKSPACE_PT_workspace(WorkSpaceButtonsPanel, Panel):
+ bl_label = "Workspace"
+
+ def draw(self, context):
+ layout = self.layout
+
+ window = context.window
+ workspace = context.workspace
+ scene = context.scene
+ view_render = workspace.view_render
+
+ layout.enabled = not workspace.use_scene_settings
+
+ layout.template_search(window, "view_layer", scene, "view_layers")
+
+ if view_render.has_multiple_engines:
+ layout.prop(view_render, "engine", text="")
+
+
+class WORKSPACE_PT_custom_props(WorkSpaceButtonsPanel, PropertyPanel, Panel):
+ _context_path = "workspace"
+ _property_type = bpy.types.WorkSpace
+
+
+classes = (
+ WORKSPACE_PT_context,
+ WORKSPACE_PT_workspace,
+ WORKSPACE_PT_custom_props,
+)
+
+if __name__ == "__main__": # only for live edit.
+ from bpy.utils import register_class
+ for cls in classes:
+ register_class(cls)
+
diff --git a/release/scripts/startup/bl_ui/properties_freestyle.py b/release/scripts/startup/bl_ui/properties_freestyle.py
index 3d105934bf8..d9f28040b16 100644
--- a/release/scripts/startup/bl_ui/properties_freestyle.py
+++ b/release/scripts/startup/bl_ui/properties_freestyle.py
@@ -33,7 +33,7 @@ class RenderFreestyleButtonsPanel:
def poll(cls, context):
scene = context.scene
with_freestyle = bpy.app.build_options.freestyle
- return scene and with_freestyle and(scene.render.engine in cls.COMPAT_ENGINES)
+ return scene and with_freestyle and(scene.view_render.engine in cls.COMPAT_ENGINES)
class RENDER_PT_freestyle(RenderFreestyleButtonsPanel, Panel):
@@ -62,10 +62,10 @@ class RENDER_PT_freestyle(RenderFreestyleButtonsPanel, Panel):
# Render layer properties
-class RenderLayerFreestyleButtonsPanel:
+class ViewLayerFreestyleButtonsPanel:
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
- bl_context = "render_layer"
+ bl_context = "view_layer"
# COMPAT_ENGINES must be defined in each subclass, external engines can add themselves here
@classmethod
@@ -75,21 +75,21 @@ class RenderLayerFreestyleButtonsPanel:
with_freestyle = bpy.app.build_options.freestyle
return (scene and with_freestyle and rd.use_freestyle and
- rd.layers.active and(scene.render.engine in cls.COMPAT_ENGINES))
+ scene.view_layers.active and(scene.view_render.engine in cls.COMPAT_ENGINES))
-class RenderLayerFreestyleEditorButtonsPanel(RenderLayerFreestyleButtonsPanel):
+class ViewLayerFreestyleEditorButtonsPanel(ViewLayerFreestyleButtonsPanel):
# COMPAT_ENGINES must be defined in each subclass, external engines can add themselves here
@classmethod
def poll(cls, context):
if not super().poll(context):
return False
- rl = context.scene.render.layers.active
- return rl and rl.freestyle_settings.mode == 'EDITOR'
+ view_layer = context.scene.view_layers.active
+ return view_layer and view_layer.freestyle_settings.mode == 'EDITOR'
-class RENDERLAYER_UL_linesets(UIList):
+class VIEWLAYER_UL_linesets(UIList):
def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index):
lineset = item
if self.layout_type in {'DEFAULT', 'COMPACT'}:
@@ -109,18 +109,18 @@ class RENDER_MT_lineset_specials(Menu):
layout.operator("scene.freestyle_lineset_paste", icon='PASTEDOWN')
-class RENDERLAYER_PT_freestyle(RenderLayerFreestyleButtonsPanel, Panel):
+class VIEWLAYER_PT_freestyle(ViewLayerFreestyleButtonsPanel, Panel):
bl_label = "Freestyle"
COMPAT_ENGINES = {'BLENDER_RENDER'}
def draw(self, context):
layout = self.layout
- rd = context.scene.render
- rl = rd.layers.active
- freestyle = rl.freestyle_settings
+ scene = context.scene
+ view_layer = scene.view_layers.active
+ freestyle = view_layer.freestyle_settings
- layout.active = rl.use_freestyle
+ layout.active = view_layer.use_freestyle
row = layout.row()
layout.prop(freestyle, "mode", text="Control Mode")
@@ -165,7 +165,7 @@ class RENDERLAYER_PT_freestyle(RenderLayerFreestyleButtonsPanel, Panel):
row.operator("scene.freestyle_module_move", icon='TRIA_DOWN', text="").direction = 'DOWN'
-class RENDERLAYER_PT_freestyle_lineset(RenderLayerFreestyleEditorButtonsPanel, Panel):
+class VIEWLAYER_PT_freestyle_lineset(ViewLayerFreestyleEditorButtonsPanel, Panel):
bl_label = "Freestyle Line Set"
COMPAT_ENGINES = {'BLENDER_RENDER'}
@@ -183,16 +183,19 @@ class RENDERLAYER_PT_freestyle_lineset(RenderLayerFreestyleEditorButtonsPanel, P
def draw(self, context):
layout = self.layout
- rd = context.scene.render
- rl = rd.layers.active
- freestyle = rl.freestyle_settings
+ scene = context.scene
+ rd = scene.render
+ view_render = scene.view_render
+
+ view_layer = scene.view_layers.active
+ freestyle = view_layer.freestyle_settings
lineset = freestyle.linesets.active
- layout.active = rl.use_freestyle
+ layout.active = view_layer.use_freestyle
row = layout.row()
rows = 4 if lineset else 2
- row.template_list("RENDERLAYER_UL_linesets", "", freestyle, "linesets", freestyle.linesets, "active_index", rows=rows)
+ row.template_list("VIEWLAYER_UL_linesets", "", freestyle, "linesets", freestyle.linesets, "active_index", rows=rows)
sub = row.column(align=True)
sub.operator("scene.freestyle_lineset_add", icon='ZOOMIN', text="")
@@ -256,7 +259,7 @@ class RENDERLAYER_PT_freestyle_lineset(RenderLayerFreestyleEditorButtonsPanel, P
row.prop(lineset, "group_negation", expand=True)
-class RENDERLAYER_PT_freestyle_linestyle(RenderLayerFreestyleEditorButtonsPanel, Panel):
+class VIEWLAYER_PT_freestyle_linestyle(ViewLayerFreestyleEditorButtonsPanel, Panel):
bl_label = "Freestyle Line Style"
bl_options = {'DEFAULT_CLOSED'}
COMPAT_ENGINES = {'BLENDER_RENDER'}
@@ -376,7 +379,7 @@ class RENDERLAYER_PT_freestyle_linestyle(RenderLayerFreestyleEditorButtonsPanel,
row = box.row(align=True)
row.prop(modifier, "curvature_min")
row.prop(modifier, "curvature_max")
- freestyle = context.scene.render.layers.active.freestyle_settings
+ freestyle = context.scene.view_layers.active.freestyle_settings
if not freestyle.use_smoothness:
message = "Enable Face Smoothness to use this modifier"
self.draw_modifier_box_error(col.box(), modifier, message)
@@ -431,7 +434,7 @@ class RENDERLAYER_PT_freestyle_linestyle(RenderLayerFreestyleEditorButtonsPanel,
row = box.row(align=True)
row.prop(modifier, "curvature_min")
row.prop(modifier, "curvature_max")
- freestyle = context.scene.render.layers.active.freestyle_settings
+ freestyle = context.scene.view_layers.active.freestyle_settings
if not freestyle.use_smoothness:
message = "Enable Face Smoothness to use this modifier"
self.draw_modifier_box_error(col.box(), modifier, message)
@@ -503,7 +506,7 @@ class RENDERLAYER_PT_freestyle_linestyle(RenderLayerFreestyleEditorButtonsPanel,
row = box.row(align=True)
row.prop(modifier, "curvature_min")
row.prop(modifier, "curvature_max")
- freestyle = context.scene.render.layers.active.freestyle_settings
+ freestyle = context.scene.view_layers.active.freestyle_settings
if not freestyle.use_smoothness:
message = "Enable Face Smoothness to use this modifier"
self.draw_modifier_box_error(col.box(), modifier, message)
@@ -611,11 +614,11 @@ class RENDERLAYER_PT_freestyle_linestyle(RenderLayerFreestyleEditorButtonsPanel,
def draw(self, context):
layout = self.layout
- rd = context.scene.render
- rl = rd.layers.active
- lineset = rl.freestyle_settings.linesets.active
+ scene = context.scene
+ view_layer = scene.view_layers.active
+ lineset = view_layer.freestyle_settings.linesets.active
- layout.active = rl.use_freestyle
+ layout.active = view_layer.use_freestyle
if lineset is None:
return
@@ -779,7 +782,7 @@ class RENDERLAYER_PT_freestyle_linestyle(RenderLayerFreestyleEditorButtonsPanel,
layout.separator()
row = layout.row()
- if rd.use_shading_nodes:
+ if view_render.use_shading_nodes:
row.prop(linestyle, "use_nodes")
else:
row.prop(linestyle, "use_texture")
@@ -810,7 +813,7 @@ class MaterialFreestyleButtonsPanel:
material = context.material
with_freestyle = bpy.app.build_options.freestyle
return with_freestyle and material and scene and scene.render.use_freestyle and \
- (scene.render.engine in cls.COMPAT_ENGINES)
+ (scene.view_render.engine in cls.COMPAT_ENGINES)
class MATERIAL_PT_freestyle_line(MaterialFreestyleButtonsPanel, Panel):
@@ -830,11 +833,11 @@ class MATERIAL_PT_freestyle_line(MaterialFreestyleButtonsPanel, Panel):
classes = (
RENDER_PT_freestyle,
- RENDERLAYER_UL_linesets,
+ VIEWLAYER_UL_linesets,
RENDER_MT_lineset_specials,
- RENDERLAYER_PT_freestyle,
- RENDERLAYER_PT_freestyle_lineset,
- RENDERLAYER_PT_freestyle_linestyle,
+ VIEWLAYER_PT_freestyle,
+ VIEWLAYER_PT_freestyle_lineset,
+ VIEWLAYER_PT_freestyle_linestyle,
MATERIAL_PT_freestyle_line,
)
diff --git a/release/scripts/startup/bl_ui/properties_game.py b/release/scripts/startup/bl_ui/properties_game.py
index 277b0842b3d..eb2d3d49e61 100644
--- a/release/scripts/startup/bl_ui/properties_game.py
+++ b/release/scripts/startup/bl_ui/properties_game.py
@@ -34,8 +34,8 @@ class PHYSICS_PT_game_physics(PhysicsButtonsPanel, Panel):
@classmethod
def poll(cls, context):
ob = context.active_object
- rd = context.scene.render
- return ob and ob.game and (rd.engine in cls.COMPAT_ENGINES)
+ view_render = context.scene.view_render
+ return ob and ob.game and (view_render.engine in cls.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
@@ -205,8 +205,8 @@ class PHYSICS_PT_game_collision_bounds(PhysicsButtonsPanel, Panel):
@classmethod
def poll(cls, context):
game = context.object.game
- rd = context.scene.render
- return (rd.engine in cls.COMPAT_ENGINES) \
+ view_render = context.scene.view_render
+ return (view_render.engine in cls.COMPAT_ENGINES) \
and (game.physics_type in {'SENSOR', 'STATIC', 'DYNAMIC', 'RIGID_BODY', 'CHARACTER', 'SOFT_BODY'})
def draw_header(self, context):
@@ -246,8 +246,8 @@ class PHYSICS_PT_game_obstacles(PhysicsButtonsPanel, Panel):
@classmethod
def poll(cls, context):
game = context.object.game
- rd = context.scene.render
- return (rd.engine in cls.COMPAT_ENGINES) \
+ view_render = context.scene.view_render
+ return (view_render.engine in cls.COMPAT_ENGINES) \
and (game.physics_type in {'SENSOR', 'STATIC', 'DYNAMIC', 'RIGID_BODY', 'SOFT_BODY', 'CHARACTER', 'NO_COLLISION'})
def draw_header(self, context):
@@ -274,8 +274,8 @@ class RenderButtonsPanel:
@classmethod
def poll(cls, context):
- rd = context.scene.render
- return (rd.engine in cls.COMPAT_ENGINES)
+ view_render = context.scene.view_render
+ return (view_render.engine in cls.COMPAT_ENGINES)
class RENDER_PT_embedded(RenderButtonsPanel, Panel):
@@ -285,7 +285,7 @@ class RENDER_PT_embedded(RenderButtonsPanel, Panel):
def draw(self, context):
layout = self.layout
- rd = context.scene.render
+ view_render = context.scene.view_render
row = layout.row()
row.operator("view3d.game_start", text="Start")
@@ -422,10 +422,8 @@ class RENDER_PT_game_system(RenderButtonsPanel, Panel):
col = row.column()
col.prop(gs, "use_frame_rate")
col.prop(gs, "use_restrict_animation_updates")
- col.prop(gs, "use_material_caching")
col = row.column()
- col.prop(gs, "use_display_lists")
- col.active = gs.raster_storage != 'VERTEX_BUFFER_OBJECT'
+ col.prop(gs, "use_material_caching")
row = layout.row()
row.prop(gs, "vsync")
@@ -476,7 +474,7 @@ class SCENE_PT_game_physics(SceneButtonsPanel, Panel):
@classmethod
def poll(cls, context):
scene = context.scene
- return (scene.render.engine in cls.COMPAT_ENGINES)
+ return (scene.view_render.engine in cls.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
@@ -534,7 +532,7 @@ class SCENE_PT_game_physics_obstacles(SceneButtonsPanel, Panel):
@classmethod
def poll(cls, context):
scene = context.scene
- return (scene.render.engine in cls.COMPAT_ENGINES)
+ return (scene.view_render.engine in cls.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
@@ -555,7 +553,7 @@ class SCENE_PT_game_navmesh(SceneButtonsPanel, Panel):
@classmethod
def poll(cls, context):
scene = context.scene
- return (scene and scene.render.engine in cls.COMPAT_ENGINES)
+ return (scene and scene.view_render.engine in cls.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
@@ -616,7 +614,7 @@ class SCENE_PT_game_hysteresis(SceneButtonsPanel, Panel):
@classmethod
def poll(cls, context):
scene = context.scene
- return (scene and scene.render.engine in cls.COMPAT_ENGINES)
+ return (scene and scene.view_render.engine in cls.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
@@ -642,8 +640,8 @@ class WORLD_PT_game_context_world(WorldButtonsPanel, Panel):
@classmethod
def poll(cls, context):
- rd = context.scene.render
- return (context.scene) and (rd.engine in cls.COMPAT_ENGINES)
+ view_render = context.scene.view_render
+ return (context.scene) and (view_render.engine in cls.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
@@ -666,7 +664,7 @@ class WORLD_PT_game_world(WorldButtonsPanel, Panel):
@classmethod
def poll(cls, context):
scene = context.scene
- return (scene.world and scene.render.engine in cls.COMPAT_ENGINES)
+ return (scene.world and scene.view_render.engine in cls.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
@@ -686,7 +684,7 @@ class WORLD_PT_game_environment_lighting(WorldButtonsPanel, Panel):
@classmethod
def poll(cls, context):
scene = context.scene
- return (scene.world and scene.render.engine in cls.COMPAT_ENGINES)
+ return (scene.world and scene.view_render.engine in cls.COMPAT_ENGINES)
def draw_header(self, context):
light = context.world.light_settings
@@ -711,7 +709,7 @@ class WORLD_PT_game_mist(WorldButtonsPanel, Panel):
@classmethod
def poll(cls, context):
scene = context.scene
- return (scene.world and scene.render.engine in cls.COMPAT_ENGINES)
+ return (scene.world and scene.view_render.engine in cls.COMPAT_ENGINES)
def draw_header(self, context):
world = context.world
@@ -748,7 +746,7 @@ class DATA_PT_shadow_game(DataButtonsPanel, Panel):
def poll(cls, context):
COMPAT_LIGHTS = {'SPOT', 'SUN'}
lamp = context.lamp
- engine = context.scene.render.engine
+ engine = context.engine
return (lamp and lamp.type in COMPAT_LIGHTS) and (engine in cls.COMPAT_ENGINES)
def draw_header(self, context):
@@ -817,7 +815,7 @@ class OBJECT_PT_levels_of_detail(ObjectButtonsPanel, Panel):
@classmethod
def poll(cls, context):
- return context.scene.render.engine in cls.COMPAT_ENGINES
+ return context.engine in cls.COMPAT_ENGINES
def draw(self, context):
layout = self.layout
diff --git a/release/scripts/startup/bl_ui/properties_material.py b/release/scripts/startup/bl_ui/properties_material.py
index 73740df37e8..2dc7bffa527 100644
--- a/release/scripts/startup/bl_ui/properties_material.py
+++ b/release/scripts/startup/bl_ui/properties_material.py
@@ -21,7 +21,7 @@ import bpy
from bpy.types import Menu, Panel, UIList
from rna_prop_ui import PropertyPanel
from bpy.app.translations import pgettext_iface as iface_
-
+from bpy_extras.node_utils import find_node_input, find_output_node
def active_node_mat(mat):
# TODO, 2.4x has a pipeline section, for 2.5 we need to communicate
@@ -82,7 +82,7 @@ class MATERIAL_UL_matslots(UIList):
layout.prop(ma, "name", text="", emboss=False, icon_value=icon)
else:
layout.label(text="", icon_value=icon)
- if ma and not context.scene.render.use_shading_nodes:
+ if ma and not context.view_render.use_shading_nodes:
manode = ma.active_node_material
if manode:
layout.label(text=iface_("Node %s") % manode.name, translate=False, icon_value=layout.icon(manode))
@@ -101,7 +101,7 @@ class MaterialButtonsPanel:
@classmethod
def poll(cls, context):
- return context.material and (context.scene.render.engine in cls.COMPAT_ENGINES)
+ return context.material and (context.engine in cls.COMPAT_ENGINES)
class MATERIAL_PT_context_material(MaterialButtonsPanel, Panel):
@@ -114,7 +114,7 @@ class MATERIAL_PT_context_material(MaterialButtonsPanel, Panel):
# An exception, don't call the parent poll func because
# this manages materials for all engine types
- engine = context.scene.render.engine
+ engine = context.engine
return (context.material or context.object) and (engine in cls.COMPAT_ENGINES)
def draw(self, context):
@@ -148,7 +148,7 @@ class MATERIAL_PT_context_material(MaterialButtonsPanel, Panel):
col.operator("object.material_slot_move", icon='TRIA_UP', text="").direction = 'UP'
col.operator("object.material_slot_move", icon='TRIA_DOWN', text="").direction = 'DOWN'
- if ob.mode == 'EDIT':
+ if context.workspace.object_mode == 'EDIT':
row = layout.row(align=True)
row.operator("object.material_slot_assign", text="Assign")
row.operator("object.material_slot_select", text="Select")
@@ -197,7 +197,7 @@ class MATERIAL_PT_pipeline(MaterialButtonsPanel, Panel):
@classmethod
def poll(cls, context):
mat = context.material
- engine = context.scene.render.engine
+ engine = context.engine
return mat and (not simple_material(mat)) and (mat.type in {'SURFACE', 'WIRE', 'VOLUME'}) and (engine in cls.COMPAT_ENGINES)
def draw(self, context):
@@ -250,7 +250,7 @@ class MATERIAL_PT_diffuse(MaterialButtonsPanel, Panel):
@classmethod
def poll(cls, context):
mat = context.material
- engine = context.scene.render.engine
+ engine = context.engine
return check_material(mat) and (mat.type in {'SURFACE', 'WIRE'}) and (engine in cls.COMPAT_ENGINES)
def draw(self, context):
@@ -307,7 +307,7 @@ class MATERIAL_PT_specular(MaterialButtonsPanel, Panel):
@classmethod
def poll(cls, context):
mat = context.material
- engine = context.scene.render.engine
+ engine = context.engine
return check_material(mat) and (mat.type in {'SURFACE', 'WIRE'}) and (engine in cls.COMPAT_ENGINES)
def draw(self, context):
@@ -360,7 +360,7 @@ class MATERIAL_PT_shading(MaterialButtonsPanel, Panel):
@classmethod
def poll(cls, context):
mat = context.material
- engine = context.scene.render.engine
+ engine = context.engine
return check_material(mat) and (mat.type in {'SURFACE', 'WIRE'}) and (engine in cls.COMPAT_ENGINES)
def draw(self, context):
@@ -394,7 +394,7 @@ class MATERIAL_PT_transp(MaterialButtonsPanel, Panel):
@classmethod
def poll(cls, context):
mat = context.material
- engine = context.scene.render.engine
+ engine = context.engine
return check_material(mat) and (mat.type in {'SURFACE', 'WIRE'}) and (engine in cls.COMPAT_ENGINES)
def draw_header(self, context):
@@ -460,7 +460,7 @@ class MATERIAL_PT_mirror(MaterialButtonsPanel, Panel):
@classmethod
def poll(cls, context):
mat = context.material
- engine = context.scene.render.engine
+ engine = context.engine
return check_material(mat) and (mat.type in {'SURFACE', 'WIRE'}) and (engine in cls.COMPAT_ENGINES)
def draw_header(self, context):
@@ -518,7 +518,7 @@ class MATERIAL_PT_sss(MaterialButtonsPanel, Panel):
@classmethod
def poll(cls, context):
mat = context.material
- engine = context.scene.render.engine
+ engine = context.engine
return check_material(mat) and (mat.type in {'SURFACE', 'WIRE'}) and (engine in cls.COMPAT_ENGINES)
def draw_header(self, context):
@@ -569,7 +569,7 @@ class MATERIAL_PT_halo(MaterialButtonsPanel, Panel):
@classmethod
def poll(cls, context):
mat = context.material
- engine = context.scene.render.engine
+ engine = context.engine
return mat and (mat.type == 'HALO') and (engine in cls.COMPAT_ENGINES)
def draw(self, context):
@@ -622,7 +622,7 @@ class MATERIAL_PT_flare(MaterialButtonsPanel, Panel):
@classmethod
def poll(cls, context):
mat = context.material
- engine = context.scene.render.engine
+ engine = context.engine
return mat and (mat.type == 'HALO') and (engine in cls.COMPAT_ENGINES)
def draw_header(self, context):
@@ -656,7 +656,7 @@ class MATERIAL_PT_game_settings(MaterialButtonsPanel, Panel):
@classmethod
def poll(cls, context):
- return context.material and (context.scene.render.engine in cls.COMPAT_ENGINES)
+ return context.material and (context.engine in cls.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
@@ -685,7 +685,7 @@ class MATERIAL_PT_physics(MaterialButtonsPanel, Panel):
@classmethod
def poll(cls, context):
- return context.material and (context.scene.render.engine in cls.COMPAT_ENGINES)
+ return context.material and (context.engine in cls.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
@@ -718,7 +718,7 @@ class MATERIAL_PT_strand(MaterialButtonsPanel, Panel):
@classmethod
def poll(cls, context):
mat = context.material
- engine = context.scene.render.engine
+ engine = context.engine
return mat and (mat.type in {'SURFACE', 'WIRE', 'HALO'}) and (engine in cls.COMPAT_ENGINES)
def draw(self, context):
@@ -746,7 +746,7 @@ class MATERIAL_PT_strand(MaterialButtonsPanel, Panel):
col.prop(tan, "width_fade")
ob = context.object
if ob and ob.type == 'MESH':
- col.prop_search(tan, "uv_layer", ob.data, "uv_textures", text="")
+ col.prop_search(tan, "uv_layer", ob.data, "uv_layers", text="")
else:
col.prop(tan, "uv_layer", text="")
col.separator()
@@ -764,7 +764,7 @@ class MATERIAL_PT_options(MaterialButtonsPanel, Panel):
@classmethod
def poll(cls, context):
mat = context.material
- engine = context.scene.render.engine
+ engine = context.engine
return check_material(mat) and (mat.type in {'SURFACE', 'WIRE'}) and (engine in cls.COMPAT_ENGINES)
def draw(self, context):
@@ -795,11 +795,6 @@ class MATERIAL_PT_options(MaterialButtonsPanel, Panel):
row.prop(mat, "use_light_group_local", text="Local")
col = split.column()
- col.prop(mat, "use_face_texture")
- sub = col.column()
- sub.active = mat.use_face_texture
- sub.prop(mat, "use_face_texture_alpha")
- col.separator()
col.prop(mat, "use_vertex_color_paint")
col.prop(mat, "use_vertex_color_light")
col.prop(mat, "use_object_color")
@@ -807,6 +802,9 @@ class MATERIAL_PT_options(MaterialButtonsPanel, Panel):
if simple_material(base_mat):
col.prop(mat, "pass_index")
+ col.label("Edit Image")
+ col.template_ID(mat, "edit_image")
+
class MATERIAL_PT_shadow(MaterialButtonsPanel, Panel):
bl_label = "Shadow"
@@ -816,7 +814,7 @@ class MATERIAL_PT_shadow(MaterialButtonsPanel, Panel):
@classmethod
def poll(cls, context):
mat = context.material
- engine = context.scene.render.engine
+ engine = context.engine
return check_material(mat) and (mat.type in {'SURFACE', 'WIRE'}) and (engine in cls.COMPAT_ENGINES)
def draw(self, context):
@@ -866,7 +864,7 @@ class MATERIAL_PT_transp_game(MaterialButtonsPanel, Panel):
@classmethod
def poll(cls, context):
mat = context.material
- engine = context.scene.render.engine
+ engine = context.engine
return check_material(mat) and (engine in cls.COMPAT_ENGINES)
def draw_header(self, context):
@@ -899,7 +897,7 @@ class VolumeButtonsPanel:
@classmethod
def poll(cls, context):
mat = context.material
- engine = context.scene.render.engine
+ engine = context.engine
return mat and (mat.type == 'VOLUME') and (engine in cls.COMPAT_ENGINES)
@@ -984,7 +982,7 @@ class MATERIAL_PT_volume_transp(VolumeButtonsPanel, Panel):
@classmethod
def poll(cls, context):
mat = context.material
- engine = context.scene.render.engine
+ engine = context.engine
return mat and simple_material(mat) and (mat.type == 'VOLUME') and (engine in cls.COMPAT_ENGINES)
def draw(self, context):
@@ -1025,7 +1023,7 @@ class MATERIAL_PT_volume_options(VolumeButtonsPanel, Panel):
@classmethod
def poll(cls, context):
mat = context.material
- engine = context.scene.render.engine
+ engine = context.engine
return check_material(mat) and (mat.type == 'VOLUME') and (engine in cls.COMPAT_ENGINES)
def draw(self, context):
@@ -1055,6 +1053,145 @@ class MATERIAL_PT_custom_props(MaterialButtonsPanel, PropertyPanel, Panel):
_property_type = bpy.types.Material
+class EEVEE_MATERIAL_PT_context_material(MaterialButtonsPanel, Panel):
+ bl_label = ""
+ bl_context = "material"
+ bl_options = {'HIDE_HEADER'}
+ COMPAT_ENGINES = {'BLENDER_EEVEE'}
+
+ @classmethod
+ def poll(cls, context):
+ engine = context.engine
+ return (context.material or context.object) and (engine in cls.COMPAT_ENGINES)
+
+ def draw(self, context):
+ layout = self.layout
+
+ mat = context.material
+ ob = context.object
+ slot = context.material_slot
+ space = context.space_data
+
+ if ob:
+ is_sortable = len(ob.material_slots) > 1
+ rows = 1
+ if (is_sortable):
+ rows = 4
+
+ row = layout.row()
+
+ row.template_list("MATERIAL_UL_matslots", "", ob, "material_slots", ob, "active_material_index", rows=rows)
+
+ col = row.column(align=True)
+ col.operator("object.material_slot_add", icon='ZOOMIN', text="")
+ col.operator("object.material_slot_remove", icon='ZOOMOUT', text="")
+
+ col.menu("MATERIAL_MT_specials", icon='DOWNARROW_HLT', text="")
+
+ if is_sortable:
+ col.separator()
+
+ col.operator("object.material_slot_move", icon='TRIA_UP', text="").direction = 'UP'
+ col.operator("object.material_slot_move", icon='TRIA_DOWN', text="").direction = 'DOWN'
+
+ if context.workspace.object_mode == 'EDIT':
+ row = layout.row(align=True)
+ row.operator("object.material_slot_assign", text="Assign")
+ row.operator("object.material_slot_select", text="Select")
+ row.operator("object.material_slot_deselect", text="Deselect")
+
+ split = layout.split(percentage=0.65)
+
+ if ob:
+ split.template_ID(ob, "active_material", new="material.new")
+ row = split.row()
+
+ if slot:
+ row.prop(slot, "link", text="")
+ else:
+ row.label()
+ elif mat:
+ split.template_ID(space, "pin_id")
+ split.separator()
+
+
+def panel_node_draw(layout, ntree, output_type):
+ node = find_output_node(ntree, output_type)
+
+ if node:
+ input = find_node_input(node, 'Surface')
+ if input:
+ layout.template_node_view(ntree, node, input)
+ else:
+ layout.label(text="Incompatible output node")
+ else:
+ layout.label(text="No output node")
+
+
+class EEVEE_MATERIAL_PT_surface(MaterialButtonsPanel, Panel):
+ bl_label = "Surface"
+ bl_context = "material"
+ COMPAT_ENGINES = {'BLENDER_EEVEE'}
+
+ @classmethod
+ def poll(cls, context):
+ engine = context.engine
+ return context.material and (engine in cls.COMPAT_ENGINES)
+
+ def draw(self, context):
+ layout = self.layout
+
+ mat = context.material
+
+ layout.prop(mat, "use_nodes", icon='NODETREE')
+ layout.separator()
+
+ if mat.use_nodes:
+ panel_node_draw(layout, mat.node_tree, ('OUTPUT_EEVEE_MATERIAL', 'OUTPUT_MATERIAL'))
+ else:
+ raym = mat.raytrace_mirror
+ layout.prop(mat, "diffuse_color", text="Base Color")
+ layout.prop(raym, "reflect_factor", text="Metallic")
+ layout.prop(mat, "specular_intensity", text="Specular")
+ layout.prop(raym, "gloss_factor", text="Roughness")
+
+
+class EEVEE_MATERIAL_PT_options(MaterialButtonsPanel, Panel):
+ bl_label = "Options"
+ bl_context = "material"
+ COMPAT_ENGINES = {'BLENDER_EEVEE'}
+
+ @classmethod
+ def poll(cls, context):
+ engine = context.engine
+ return context.material and (engine in cls.COMPAT_ENGINES)
+
+ def draw(self, context):
+ layout = self.layout
+
+ mat = context.material
+
+ layout.prop(mat, "blend_method")
+
+ if mat.blend_method != "OPAQUE":
+ layout.prop(mat, "transparent_shadow_method")
+
+ row = layout.row()
+ row.active = ((mat.blend_method == "CLIP") or (mat.transparent_shadow_method == "CLIP"))
+ row.prop(mat, "alpha_threshold")
+
+ if mat.blend_method not in {"OPAQUE", "CLIP", "HASHED"}:
+ layout.prop(mat, "transparent_hide_backside")
+
+ layout.prop(mat, "use_screen_refraction")
+ layout.prop(mat, "refraction_depth")
+
+ layout.prop(mat, "use_screen_subsurface")
+ row = layout.row()
+ row.active = mat.use_screen_subsurface
+ row.prop(mat, "use_sss_translucency")
+
+
classes = (
MATERIAL_MT_sss_presets,
MATERIAL_MT_specials,
@@ -1083,6 +1220,9 @@ classes = (
MATERIAL_PT_volume_integration,
MATERIAL_PT_volume_options,
MATERIAL_PT_custom_props,
+ EEVEE_MATERIAL_PT_context_material,
+ EEVEE_MATERIAL_PT_surface,
+ EEVEE_MATERIAL_PT_options,
)
if __name__ == "__main__": # only for live edit.
diff --git a/release/scripts/startup/bl_ui/properties_object.py b/release/scripts/startup/bl_ui/properties_object.py
index 5e7f1b068e2..c6899eec408 100644
--- a/release/scripts/startup/bl_ui/properties_object.py
+++ b/release/scripts/startup/bl_ui/properties_object.py
@@ -40,7 +40,7 @@ class OBJECT_PT_context_object(ObjectButtonsPanel, Panel):
layout.template_ID(space, "pin_id")
else:
row = layout.row()
- row.template_ID(context.scene.objects, "active", filter='AVAILABLE')
+ row.template_ID(context.view_layer.objects, "active", filter='AVAILABLE')
class OBJECT_PT_transform(ObjectButtonsPanel, Panel):
@@ -136,8 +136,6 @@ class OBJECT_PT_relations(ObjectButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.prop(ob, "layers")
- col.separator()
col.prop(ob, "pass_index")
col = split.column()
@@ -163,7 +161,7 @@ class OBJECT_PT_relations_extras(ObjectButtonsPanel, Panel):
split = layout.split()
- if context.scene.render.engine != 'BLENDER_GAME':
+ if context.engine != 'BLENDER_GAME':
col = split.column()
col.label(text="Tracking Axes:")
col.prop(ob, "track_axis", text="Axis")
@@ -175,9 +173,6 @@ class OBJECT_PT_relations_extras(ObjectButtonsPanel, Panel):
row.active = ((ob.parent is not None) and (ob.use_slow_parent))
row.prop(ob, "slow_parent_offset", text="Offset")
- layout.prop(ob, "use_extra_recalc_object")
- layout.prop(ob, "use_extra_recalc_data")
-
class GROUP_MT_specials(Menu):
bl_label = "Group Specials"
@@ -221,13 +216,8 @@ class OBJECT_PT_groups(ObjectButtonsPanel, Panel):
row.operator("object.group_remove", text="", icon='X', emboss=False)
row.menu("GROUP_MT_specials", icon='DOWNARROW_HLT', text="")
- split = col.box().split()
-
- col = split.column()
- col.prop(group, "layers", text="Dupli Visibility")
-
- col = split.column()
- col.prop(group, "dupli_offset", text="")
+ row = col.box().row()
+ row.prop(group, "dupli_offset", text="")
class OBJECT_PT_display(ObjectButtonsPanel, Panel):
@@ -285,6 +275,13 @@ class OBJECT_PT_display(ObjectButtonsPanel, Panel):
col.label(text="Object Color:")
col.prop(obj, "color", text="")
+ col = layout.column()
+ col.active = bool(is_dupli or obj.particle_systems)
+ col.label(text="Duplicator Visibility:")
+ row = col.row(align=True)
+ row.prop(obj, "show_duplicator_for_viewport", text="Viewport")
+ row.prop(obj, "show_duplicator_for_render", text="Render")
+
class OBJECT_PT_duplication(ObjectButtonsPanel, Panel):
bl_label = "Duplication"
@@ -362,7 +359,7 @@ class OBJECT_PT_onion_skinning(OnionSkinButtonsPanel): # , Panel): # inherit fr
class OBJECT_PT_custom_props(ObjectButtonsPanel, PropertyPanel, Panel):
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
_context_path = "object"
_property_type = bpy.types.Object
diff --git a/release/scripts/startup/bl_ui/properties_paint_common.py b/release/scripts/startup/bl_ui/properties_paint_common.py
index b79f8263e39..bc8bc523e12 100644
--- a/release/scripts/startup/bl_ui/properties_paint_common.py
+++ b/release/scripts/startup/bl_ui/properties_paint_common.py
@@ -96,8 +96,8 @@ class VIEW3D_MT_tools_projectpaint_clone(Menu):
def draw(self, context):
layout = self.layout
- for i, tex in enumerate(context.active_object.data.uv_textures):
- props = layout.operator("wm.context_set_int", text=tex.name, translate=False)
+ for i, uv_layer in enumerate(context.active_object.data.uv_layers):
+ props = layout.operator("wm.context_set_int", text=uv_layer.name, translate=False)
props.data_path = "active_object.data.uv_texture_clone_index"
props.value = i
diff --git a/release/scripts/startup/bl_ui/properties_particle.py b/release/scripts/startup/bl_ui/properties_particle.py
index b01d1ebbfa3..4932f3467c5 100644
--- a/release/scripts/startup/bl_ui/properties_particle.py
+++ b/release/scripts/startup/bl_ui/properties_particle.py
@@ -42,7 +42,7 @@ def particle_panel_enabled(context, psys):
def particle_panel_poll(cls, context):
psys = context.particle_system
- engine = context.scene.render.engine
+ engine = context.engine
settings = 0
if psys:
@@ -66,7 +66,7 @@ def particle_get_settings(context):
class PARTICLE_MT_specials(Menu):
bl_label = "Particle Specials"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
@@ -86,7 +86,7 @@ class PARTICLE_MT_hair_dynamics_presets(Menu):
bl_label = "Hair Dynamics Presets"
preset_subdir = "hair_dynamics"
preset_operator = "script.execute_preset"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
draw = Menu.draw_preset
@@ -131,17 +131,17 @@ class PARTICLE_UL_particle_systems(bpy.types.UIList):
class PARTICLE_PT_context_particles(ParticleButtonsPanel, Panel):
bl_label = ""
bl_options = {'HIDE_HEADER'}
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
@classmethod
def poll(cls, context):
- engine = context.scene.render.engine
+ engine = context.engine
return (context.particle_system or context.object or context.space_data.pin_id) and (engine in cls.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
- if context.scene.render.engine == 'BLENDER_GAME':
+ if context.engine == 'BLENDER_GAME':
layout.label("Not available in the Game Engine")
return
@@ -238,7 +238,7 @@ class PARTICLE_PT_context_particles(ParticleButtonsPanel, Panel):
class PARTICLE_PT_emission(ParticleButtonsPanel, Panel):
bl_label = "Emission"
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
@classmethod
def poll(cls, context):
@@ -314,12 +314,12 @@ class PARTICLE_PT_emission(ParticleButtonsPanel, Panel):
class PARTICLE_PT_hair_dynamics(ParticleButtonsPanel, Panel):
bl_label = "Hair Dynamics"
bl_options = {'DEFAULT_CLOSED'}
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
@classmethod
def poll(cls, context):
psys = context.particle_system
- engine = context.scene.render.engine
+ engine = context.engine
if psys is None:
return False
if psys.settings is None:
@@ -412,12 +412,12 @@ class PARTICLE_PT_hair_dynamics(ParticleButtonsPanel, Panel):
class PARTICLE_PT_cache(ParticleButtonsPanel, Panel):
bl_label = "Cache"
bl_options = {'DEFAULT_CLOSED'}
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
@classmethod
def poll(cls, context):
psys = context.particle_system
- engine = context.scene.render.engine
+ engine = context.engine
if psys is None:
return False
if psys.settings is None:
@@ -442,7 +442,7 @@ class PARTICLE_PT_cache(ParticleButtonsPanel, Panel):
class PARTICLE_PT_velocity(ParticleButtonsPanel, Panel):
bl_label = "Velocity"
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
@classmethod
def poll(cls, context):
@@ -493,7 +493,7 @@ class PARTICLE_PT_velocity(ParticleButtonsPanel, Panel):
class PARTICLE_PT_rotation(ParticleButtonsPanel, Panel):
bl_label = "Rotation"
bl_options = {'DEFAULT_CLOSED'}
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
@classmethod
def poll(cls, context):
@@ -556,7 +556,7 @@ class PARTICLE_PT_rotation(ParticleButtonsPanel, Panel):
class PARTICLE_PT_physics(ParticleButtonsPanel, Panel):
bl_label = "Physics"
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
@classmethod
def poll(cls, context):
@@ -792,13 +792,13 @@ class PARTICLE_PT_physics(ParticleButtonsPanel, Panel):
class PARTICLE_PT_boidbrain(ParticleButtonsPanel, Panel):
bl_label = "Boid Brain"
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
@classmethod
def poll(cls, context):
psys = context.particle_system
settings = particle_get_settings(context)
- engine = context.scene.render.engine
+ engine = context.engine
if settings is None:
return False
@@ -895,12 +895,12 @@ class PARTICLE_PT_boidbrain(ParticleButtonsPanel, Panel):
class PARTICLE_PT_render(ParticleButtonsPanel, Panel):
bl_label = "Render"
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
@classmethod
def poll(cls, context):
settings = particle_get_settings(context)
- engine = context.scene.render.engine
+ engine = context.engine
if settings is None:
return False
@@ -922,7 +922,6 @@ class PARTICLE_PT_render(ParticleButtonsPanel, Panel):
split = layout.split()
col = split.column()
- col.prop(part, "use_render_emitter")
col.prop(part, "use_parent_particles")
col = split.column()
@@ -1054,8 +1053,8 @@ class PARTICLE_PT_render(ParticleButtonsPanel, Panel):
if psys:
col = layout.column()
- col.prop_search(psys, "billboard_normal_uv", ob.data, "uv_textures")
- col.prop_search(psys, "billboard_time_index_uv", ob.data, "uv_textures")
+ col.prop_search(psys, "billboard_normal_uv", ob.data, "uv_layers")
+ col.prop_search(psys, "billboard_time_index_uv", ob.data, "uv_layers")
split = layout.split(percentage=0.33)
split.label(text="Split UVs:")
@@ -1064,7 +1063,7 @@ class PARTICLE_PT_render(ParticleButtonsPanel, Panel):
if psys:
col = layout.column()
col.active = part.billboard_uv_split > 1
- col.prop_search(psys, "billboard_split_uv", ob.data, "uv_textures")
+ col.prop_search(psys, "billboard_split_uv", ob.data, "uv_layers")
row = col.row()
row.label(text="Animate:")
@@ -1095,12 +1094,12 @@ class PARTICLE_PT_render(ParticleButtonsPanel, Panel):
class PARTICLE_PT_draw(ParticleButtonsPanel, Panel):
bl_label = "Display"
bl_options = {'DEFAULT_CLOSED'}
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
@classmethod
def poll(cls, context):
settings = particle_get_settings(context)
- engine = context.scene.render.engine
+ engine = context.engine
if settings is None:
return False
return engine in cls.COMPAT_ENGINES
@@ -1158,7 +1157,7 @@ class PARTICLE_PT_draw(ParticleButtonsPanel, Panel):
class PARTICLE_PT_children(ParticleButtonsPanel, Panel):
bl_label = "Children"
bl_options = {'DEFAULT_CLOSED'}
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
@classmethod
def poll(cls, context):
@@ -1287,7 +1286,7 @@ class PARTICLE_PT_children(ParticleButtonsPanel, Panel):
class PARTICLE_PT_field_weights(ParticleButtonsPanel, Panel):
bl_label = "Field Weights"
bl_options = {'DEFAULT_CLOSED'}
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
@classmethod
def poll(cls, context):
@@ -1308,7 +1307,7 @@ class PARTICLE_PT_field_weights(ParticleButtonsPanel, Panel):
class PARTICLE_PT_force_fields(ParticleButtonsPanel, Panel):
bl_label = "Force Field Settings"
bl_options = {'DEFAULT_CLOSED'}
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
@@ -1342,7 +1341,7 @@ class PARTICLE_PT_force_fields(ParticleButtonsPanel, Panel):
class PARTICLE_PT_vertexgroups(ParticleButtonsPanel, Panel):
bl_label = "Vertex Groups"
bl_options = {'DEFAULT_CLOSED'}
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
@classmethod
def poll(cls, context):
@@ -1408,7 +1407,7 @@ class PARTICLE_PT_vertexgroups(ParticleButtonsPanel, Panel):
class PARTICLE_PT_custom_props(ParticleButtonsPanel, PropertyPanel, Panel):
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
_context_path = "particle_system.settings"
_property_type = bpy.types.ParticleSettings
diff --git a/release/scripts/startup/bl_ui/properties_physics_cloth.py b/release/scripts/startup/bl_ui/properties_physics_cloth.py
index bcbb44b2cb3..351418c9d23 100644
--- a/release/scripts/startup/bl_ui/properties_physics_cloth.py
+++ b/release/scripts/startup/bl_ui/properties_physics_cloth.py
@@ -45,8 +45,8 @@ class PhysicButtonsPanel:
@classmethod
def poll(cls, context):
ob = context.object
- rd = context.scene.render
- return (ob and ob.type == 'MESH') and (rd.engine in cls.COMPAT_ENGINES) and (context.cloth)
+ view_render = context.scene.view_render
+ return (ob and ob.type == 'MESH') and (view_render.engine in cls.COMPAT_ENGINES) and (context.cloth)
class PHYSICS_PT_cloth(PhysicButtonsPanel, Panel):
@@ -64,6 +64,8 @@ class PHYSICS_PT_cloth(PhysicButtonsPanel, Panel):
split = layout.split(percentage=0.25)
+ col = split.column()
+
split.label(text="Presets:")
sub = split.row(align=True)
sub.menu("CLOTH_MT_presets", text=bpy.types.CLOTH_MT_presets.bl_label)
diff --git a/release/scripts/startup/bl_ui/properties_physics_common.py b/release/scripts/startup/bl_ui/properties_physics_common.py
index 73d3d5fc755..15c8bd68d10 100644
--- a/release/scripts/startup/bl_ui/properties_physics_common.py
+++ b/release/scripts/startup/bl_ui/properties_physics_common.py
@@ -30,8 +30,8 @@ class PhysicButtonsPanel:
@classmethod
def poll(cls, context):
- rd = context.scene.render
- return (context.object) and rd.engine in cls.COMPAT_ENGINES
+ view_render = context.scene.view_render
+ return (context.object) and view_render.engine in cls.COMPAT_ENGINES
def physics_add(self, layout, md, name, type, typeicon, toggles):
@@ -57,7 +57,7 @@ def physics_add_special(self, layout, data, name, addop, removeop, typeicon):
class PHYSICS_PT_add(PhysicButtonsPanel, Panel):
bl_label = ""
bl_options = {'HIDE_HEADER'}
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
def draw(self, context):
obj = context.object
diff --git a/release/scripts/startup/bl_ui/properties_physics_dynamicpaint.py b/release/scripts/startup/bl_ui/properties_physics_dynamicpaint.py
index ef426253a69..7fc1c01279d 100644
--- a/release/scripts/startup/bl_ui/properties_physics_dynamicpaint.py
+++ b/release/scripts/startup/bl_ui/properties_physics_dynamicpaint.py
@@ -55,8 +55,8 @@ class PhysicButtonsPanel:
@classmethod
def poll(cls, context):
ob = context.object
- rd = context.scene.render
- return (ob and ob.type == 'MESH') and rd.engine in cls.COMPAT_ENGINES and context.dynamic_paint
+ view_render = context.scene.view_render
+ return (ob and ob.type == 'MESH') and view_render.engine in cls.COMPAT_ENGINES and context.dynamic_paint
class PHYSICS_PT_dynamic_paint(PhysicButtonsPanel, Panel):
@@ -109,7 +109,7 @@ class PHYSICS_PT_dynamic_paint(PhysicButtonsPanel, Panel):
elif md.ui_type == 'BRUSH':
brush = md.brush_settings
- use_shading_nodes = context.scene.render.use_shading_nodes
+ use_shading_nodes = context.view_render.use_shading_nodes
if brush is None:
layout.operator("dpaint.type_toggle", text="Add Brush").type = 'BRUSH'
@@ -143,8 +143,8 @@ class PHYSICS_PT_dp_advanced_canvas(PhysicButtonsPanel, Panel):
@classmethod
def poll(cls, context):
md = context.dynamic_paint
- rd = context.scene.render
- return md and md.ui_type == 'CANVAS' and md.canvas_settings and md.canvas_settings.canvas_surfaces.active and rd.engine in cls.COMPAT_ENGINES
+ view_render = context.scene.view_render
+ return md and md.ui_type == 'CANVAS' and md.canvas_settings and md.canvas_settings.canvas_surfaces.active and view_render.engine in cls.COMPAT_ENGINES
def draw(self, context):
layout = self.layout
@@ -220,13 +220,13 @@ class PHYSICS_PT_dp_canvas_output(PhysicButtonsPanel, Panel):
@classmethod
def poll(cls, context):
md = context.dynamic_paint
- rd = context.scene.render
+ view_render = context.scene.view_render
if not (md and md.ui_type == 'CANVAS' and md.canvas_settings):
return 0
surface = context.dynamic_paint.canvas_settings.canvas_surfaces.active
return (surface and
(not (surface.surface_format == 'VERTEX' and (surface.surface_type in {'DISPLACE', 'WAVE'}))) and
- (rd.engine in cls.COMPAT_ENGINES))
+ (view_render.engine in cls.COMPAT_ENGINES))
def draw(self, context):
layout = self.layout
@@ -276,7 +276,7 @@ class PHYSICS_PT_dp_canvas_output(PhysicButtonsPanel, Panel):
# image format outputs
if surface.surface_format == 'IMAGE':
layout.operator("dpaint.bake", text="Bake Image Sequence", icon='MOD_DYNAMICPAINT')
- layout.prop_search(surface, "uv_layer", ob.data, "uv_textures", text="UV Map")
+ layout.prop_search(surface, "uv_layer", ob.data, "uv_layers", text="UV Map")
layout.separator()
layout.prop(surface, "image_output_path", text="")
@@ -314,11 +314,11 @@ class PHYSICS_PT_dp_canvas_initial_color(PhysicButtonsPanel, Panel):
@classmethod
def poll(cls, context):
md = context.dynamic_paint
- rd = context.scene.render
+ view_render = context.scene.view_render
if not (md and md.ui_type == 'CANVAS' and md.canvas_settings):
return 0
surface = context.dynamic_paint.canvas_settings.canvas_surfaces.active
- return (surface and surface.surface_type == 'PAINT') and (rd.engine in cls.COMPAT_ENGINES)
+ return (surface and surface.surface_type == 'PAINT') and (view_render.engine in cls.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
@@ -337,7 +337,7 @@ class PHYSICS_PT_dp_canvas_initial_color(PhysicButtonsPanel, Panel):
elif surface.init_color_type == 'TEXTURE':
layout.prop(surface, "init_texture")
- layout.prop_search(surface, "init_layername", ob.data, "uv_textures", text="UV Map")
+ layout.prop_search(surface, "init_layername", ob.data, "uv_layers", text="UV Map")
elif surface.init_color_type == 'VERTEX_COLOR':
layout.prop_search(surface, "init_layername", ob.data, "vertex_colors", text="Color Layer")
@@ -351,11 +351,11 @@ class PHYSICS_PT_dp_effects(PhysicButtonsPanel, Panel):
@classmethod
def poll(cls, context):
md = context.dynamic_paint
- rd = context.scene.render
+ view_render = context.scene.view_render
if not (md and md.ui_type == 'CANVAS' and md.canvas_settings):
return False
surface = context.dynamic_paint.canvas_settings.canvas_surfaces.active
- return (surface and surface.surface_type == 'PAINT') and (rd.engine in cls.COMPAT_ENGINES)
+ return (surface and surface.surface_type == 'PAINT') and (view_render.engine in cls.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
@@ -401,13 +401,13 @@ class PHYSICS_PT_dp_cache(PhysicButtonsPanel, Panel):
@classmethod
def poll(cls, context):
md = context.dynamic_paint
- rd = context.scene.render
+ view_render = context.scene.view_render
return (md and
md.ui_type == 'CANVAS' and
md.canvas_settings and
md.canvas_settings.canvas_surfaces.active and
md.canvas_settings.canvas_surfaces.active.is_cache_user and
- (rd.engine in cls.COMPAT_ENGINES))
+ (view_render.engine in cls.COMPAT_ENGINES))
def draw(self, context):
surface = context.dynamic_paint.canvas_settings.canvas_surfaces.active
@@ -423,8 +423,8 @@ class PHYSICS_PT_dp_brush_source(PhysicButtonsPanel, Panel):
@classmethod
def poll(cls, context):
md = context.dynamic_paint
- rd = context.scene.render
- return md and md.ui_type == 'BRUSH' and md.brush_settings and (rd.engine in cls.COMPAT_ENGINES)
+ view_render = context.scene.view_render
+ return md and md.ui_type == 'BRUSH' and md.brush_settings and (view_render.engine in cls.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
@@ -477,8 +477,8 @@ class PHYSICS_PT_dp_brush_velocity(PhysicButtonsPanel, Panel):
@classmethod
def poll(cls, context):
md = context.dynamic_paint
- rd = context.scene.render
- return md and md.ui_type == 'BRUSH' and md.brush_settings and (rd.engine in cls.COMPAT_ENGINES)
+ view_render = context.scene.view_render
+ return md and md.ui_type == 'BRUSH' and md.brush_settings and (view_render.engine in cls.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
@@ -514,8 +514,8 @@ class PHYSICS_PT_dp_brush_wave(PhysicButtonsPanel, Panel):
@classmethod
def poll(cls, context):
md = context.dynamic_paint
- rd = context.scene.render
- return md and md.ui_type == 'BRUSH' and md.brush_settings and (rd.engine in cls.COMPAT_ENGINES)
+ view_render = context.scene.view_render
+ return md and md.ui_type == 'BRUSH' and md.brush_settings and (view_render.engine in cls.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
diff --git a/release/scripts/startup/bl_ui/properties_physics_field.py b/release/scripts/startup/bl_ui/properties_physics_field.py
index fb3d1631377..aee93f840be 100644
--- a/release/scripts/startup/bl_ui/properties_physics_field.py
+++ b/release/scripts/startup/bl_ui/properties_physics_field.py
@@ -33,19 +33,19 @@ class PhysicButtonsPanel:
@classmethod
def poll(cls, context):
- rd = context.scene.render
- return (context.object) and (rd.engine in cls.COMPAT_ENGINES)
+ view_render = context.scene.view_render
+ return (context.object) and (view_render.engine in cls.COMPAT_ENGINES)
class PHYSICS_PT_field(PhysicButtonsPanel, Panel):
bl_label = "Force Fields"
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
@classmethod
def poll(cls, context):
ob = context.object
- rd = context.scene.render
- return (rd.engine in cls.COMPAT_ENGINES) and (ob.field) and (ob.field.type != 'NONE')
+ view_render = context.scene.view_render
+ return (view_render.engine in cls.COMPAT_ENGINES) and (ob.field) and (ob.field.type != 'NONE')
def draw(self, context):
layout = self.layout
@@ -177,13 +177,13 @@ class PHYSICS_PT_field(PhysicButtonsPanel, Panel):
class PHYSICS_PT_collision(PhysicButtonsPanel, Panel):
bl_label = "Collision"
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
@classmethod
def poll(cls, context):
ob = context.object
- rd = context.scene.render
- return (ob and ob.type == 'MESH') and (rd.engine in cls.COMPAT_ENGINES) and (context.collision)
+ view_render = context.scene.view_render
+ return (ob and ob.type == 'MESH') and (view_render.engine in cls.COMPAT_ENGINES) and (context.collision)
def draw(self, context):
layout = self.layout
diff --git a/release/scripts/startup/bl_ui/properties_physics_fluid.py b/release/scripts/startup/bl_ui/properties_physics_fluid.py
index ab92370f9ae..61ca23be4bc 100644
--- a/release/scripts/startup/bl_ui/properties_physics_fluid.py
+++ b/release/scripts/startup/bl_ui/properties_physics_fluid.py
@@ -37,8 +37,8 @@ class PhysicButtonsPanel:
@classmethod
def poll(cls, context):
ob = context.object
- rd = context.scene.render
- return (ob and ob.type == 'MESH') and rd.engine in cls.COMPAT_ENGINES and (context.fluid)
+ view_render = context.scene.view_render
+ return (ob and ob.type == 'MESH') and view_render.engine in cls.COMPAT_ENGINES and (context.fluid)
class PHYSICS_PT_fluid(PhysicButtonsPanel, Panel):
@@ -211,8 +211,8 @@ class PHYSICS_PT_domain_gravity(PhysicButtonsPanel, Panel):
@classmethod
def poll(cls, context):
md = context.fluid
- rd = context.scene.render
- return md and md.settings and (md.settings.type == 'DOMAIN') and rd.engine in cls.COMPAT_ENGINES
+ view_render = context.scene.view_render
+ return md and md.settings and (md.settings.type == 'DOMAIN') and view_render.engine in cls.COMPAT_ENGINES
def draw(self, context):
layout = self.layout
@@ -265,8 +265,8 @@ class PHYSICS_PT_domain_boundary(PhysicButtonsPanel, Panel):
@classmethod
def poll(cls, context):
md = context.fluid
- rd = context.scene.render
- return md and md.settings and (md.settings.type == 'DOMAIN') and rd.engine in cls.COMPAT_ENGINES
+ view_render = context.scene.view_render
+ return md and md.settings and (md.settings.type == 'DOMAIN') and view_render.engine in cls.COMPAT_ENGINES
def draw(self, context):
layout = self.layout
@@ -296,8 +296,8 @@ class PHYSICS_PT_domain_particles(PhysicButtonsPanel, Panel):
@classmethod
def poll(cls, context):
md = context.fluid
- rd = context.scene.render
- return md and md.settings and (md.settings.type == 'DOMAIN') and rd.engine in cls.COMPAT_ENGINES
+ view_render = context.scene.view_render
+ return md and md.settings and (md.settings.type == 'DOMAIN') and view_render.engine in cls.COMPAT_ENGINES
def draw(self, context):
layout = self.layout
diff --git a/release/scripts/startup/bl_ui/properties_physics_rigidbody.py b/release/scripts/startup/bl_ui/properties_physics_rigidbody.py
index 6afdd800b88..21453ff3642 100644
--- a/release/scripts/startup/bl_ui/properties_physics_rigidbody.py
+++ b/release/scripts/startup/bl_ui/properties_physics_rigidbody.py
@@ -35,7 +35,7 @@ class PHYSICS_PT_rigid_body(PHYSICS_PT_rigidbody_panel, Panel):
def poll(cls, context):
obj = context.object
return (obj and obj.rigid_body and
- (context.scene.render.engine in cls.COMPAT_ENGINES))
+ (context.engine in cls.COMPAT_ENGINES))
def draw(self, context):
layout = self.layout
@@ -62,7 +62,7 @@ class PHYSICS_PT_rigid_body_collisions(PHYSICS_PT_rigidbody_panel, Panel):
def poll(cls, context):
obj = context.object
return (obj and obj.rigid_body and
- (context.scene.render.engine in cls.COMPAT_ENGINES))
+ (context.engine in cls.COMPAT_ENGINES))
def draw(self, context):
layout = self.layout
@@ -108,7 +108,7 @@ class PHYSICS_PT_rigid_body_dynamics(PHYSICS_PT_rigidbody_panel, Panel):
obj = context.object
return (obj and obj.rigid_body and
obj.rigid_body.type == 'ACTIVE' and
- (context.scene.render.engine in cls.COMPAT_ENGINES))
+ (context.engine in cls.COMPAT_ENGINES))
def draw(self, context):
layout = self.layout
diff --git a/release/scripts/startup/bl_ui/properties_physics_rigidbody_constraint.py b/release/scripts/startup/bl_ui/properties_physics_rigidbody_constraint.py
index 84a4cbb4b68..a9b30c3b388 100644
--- a/release/scripts/startup/bl_ui/properties_physics_rigidbody_constraint.py
+++ b/release/scripts/startup/bl_ui/properties_physics_rigidbody_constraint.py
@@ -34,8 +34,8 @@ class PHYSICS_PT_rigid_body_constraint(PHYSICS_PT_rigidbody_constraint_panel, Pa
@classmethod
def poll(cls, context):
ob = context.object
- rd = context.scene.render
- return (ob and ob.rigid_body_constraint and rd.engine in cls.COMPAT_ENGINES)
+ view_render = context.scene.view_render
+ return (ob and ob.rigid_body_constraint and view_render.engine in cls.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
diff --git a/release/scripts/startup/bl_ui/properties_physics_smoke.py b/release/scripts/startup/bl_ui/properties_physics_smoke.py
index 01144fa9307..5cf89df63ab 100644
--- a/release/scripts/startup/bl_ui/properties_physics_smoke.py
+++ b/release/scripts/startup/bl_ui/properties_physics_smoke.py
@@ -34,13 +34,13 @@ class PhysicButtonsPanel:
@classmethod
def poll(cls, context):
ob = context.object
- rd = context.scene.render
- return (ob and ob.type == 'MESH') and (rd.engine in cls.COMPAT_ENGINES) and (context.smoke)
+ view_render = context.scene.view_render
+ return (ob and ob.type == 'MESH') and (view_render.engine in cls.COMPAT_ENGINES) and (context.smoke)
class PHYSICS_PT_smoke(PhysicButtonsPanel, Panel):
bl_label = "Smoke"
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
@@ -136,7 +136,7 @@ class PHYSICS_PT_smoke(PhysicButtonsPanel, Panel):
class PHYSICS_PT_smoke_flow_advanced(PhysicButtonsPanel, Panel):
bl_label = "Smoke Flow Advanced"
bl_options = {'DEFAULT_CLOSED'}
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
@classmethod
def poll(cls, context):
@@ -158,7 +158,7 @@ class PHYSICS_PT_smoke_flow_advanced(PhysicButtonsPanel, Panel):
sub.label(text="Mapping:")
sub.prop(flow, "texture_map_type", expand=False, text="")
if flow.texture_map_type == 'UV':
- sub.prop_search(flow, "uv_layer", ob.data, "uv_textures", text="")
+ sub.prop_search(flow, "uv_layer", ob.data, "uv_layers", text="")
if flow.texture_map_type == 'AUTO':
sub.prop(flow, "texture_size")
sub.prop(flow, "texture_offset")
@@ -171,7 +171,7 @@ class PHYSICS_PT_smoke_flow_advanced(PhysicButtonsPanel, Panel):
class PHYSICS_PT_smoke_fire(PhysicButtonsPanel, Panel):
bl_label = "Smoke Flames"
bl_options = {'DEFAULT_CLOSED'}
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
@classmethod
def poll(cls, context):
@@ -201,7 +201,7 @@ class PHYSICS_PT_smoke_fire(PhysicButtonsPanel, Panel):
class PHYSICS_PT_smoke_adaptive_domain(PhysicButtonsPanel, Panel):
bl_label = "Smoke Adaptive Domain"
bl_options = {'DEFAULT_CLOSED'}
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
@classmethod
def poll(cls, context):
@@ -235,13 +235,13 @@ class PHYSICS_PT_smoke_adaptive_domain(PhysicButtonsPanel, Panel):
class PHYSICS_PT_smoke_highres(PhysicButtonsPanel, Panel):
bl_label = "Smoke High Resolution"
bl_options = {'DEFAULT_CLOSED'}
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
@classmethod
def poll(cls, context):
md = context.smoke
- rd = context.scene.render
- return md and (md.smoke_type == 'DOMAIN') and (rd.engine in cls.COMPAT_ENGINES)
+ view_render = context.scene.view_render
+ return md and (md.smoke_type == 'DOMAIN') and (view_render.engine in cls.COMPAT_ENGINES)
def draw_header(self, context):
md = context.smoke.domain_settings
@@ -275,13 +275,13 @@ class PHYSICS_PT_smoke_highres(PhysicButtonsPanel, Panel):
class PHYSICS_PT_smoke_groups(PhysicButtonsPanel, Panel):
bl_label = "Smoke Groups"
bl_options = {'DEFAULT_CLOSED'}
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
@classmethod
def poll(cls, context):
md = context.smoke
- rd = context.scene.render
- return md and (md.smoke_type == 'DOMAIN') and (rd.engine in cls.COMPAT_ENGINES)
+ view_render = context.scene.view_render
+ return md and (md.smoke_type == 'DOMAIN') and (view_render.engine in cls.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
@@ -304,13 +304,13 @@ class PHYSICS_PT_smoke_groups(PhysicButtonsPanel, Panel):
class PHYSICS_PT_smoke_cache(PhysicButtonsPanel, Panel):
bl_label = "Smoke Cache"
bl_options = {'DEFAULT_CLOSED'}
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
@classmethod
def poll(cls, context):
md = context.smoke
- rd = context.scene.render
- return md and (md.smoke_type == 'DOMAIN') and (rd.engine in cls.COMPAT_ENGINES)
+ view_render = context.scene.view_render
+ return md and (md.smoke_type == 'DOMAIN') and (view_render.engine in cls.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
@@ -341,13 +341,13 @@ class PHYSICS_PT_smoke_cache(PhysicButtonsPanel, Panel):
class PHYSICS_PT_smoke_field_weights(PhysicButtonsPanel, Panel):
bl_label = "Smoke Field Weights"
bl_options = {'DEFAULT_CLOSED'}
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
@classmethod
def poll(cls, context):
md = context.smoke
- rd = context.scene.render
- return md and (md.smoke_type == 'DOMAIN') and (rd.engine in cls.COMPAT_ENGINES)
+ view_render = context.scene.view_render
+ return md and (md.smoke_type == 'DOMAIN') and (view_render.engine in cls.COMPAT_ENGINES)
def draw(self, context):
domain = context.smoke.domain_settings
@@ -361,8 +361,8 @@ class PHYSICS_PT_smoke_display_settings(PhysicButtonsPanel, Panel):
@classmethod
def poll(cls, context):
md = context.smoke
- rd = context.scene.render
- return md and (md.smoke_type == 'DOMAIN') and (not rd.use_game_engine)
+ view_render = context.scene.view_render
+ return md and (md.smoke_type == 'DOMAIN') and (not view_render.use_game_engine)
def draw(self, context):
domain = context.smoke.domain_settings
diff --git a/release/scripts/startup/bl_ui/properties_physics_softbody.py b/release/scripts/startup/bl_ui/properties_physics_softbody.py
index 8f193427441..718f552cf33 100644
--- a/release/scripts/startup/bl_ui/properties_physics_softbody.py
+++ b/release/scripts/startup/bl_ui/properties_physics_softbody.py
@@ -41,8 +41,8 @@ class PhysicButtonsPanel:
@classmethod
def poll(cls, context):
ob = context.object
- rd = context.scene.render
- return ob and ob.type in COMPAT_OB_TYPES and rd.engine in cls.COMPAT_ENGINES and context.soft_body
+ view_render = context.scene.view_render
+ return ob and ob.type in COMPAT_OB_TYPES and view_render.engine in cls.COMPAT_ENGINES and context.soft_body
class PHYSICS_PT_softbody(PhysicButtonsPanel, Panel):
diff --git a/release/scripts/startup/bl_ui/properties_render.py b/release/scripts/startup/bl_ui/properties_render.py
index 8093746c646..12b0df795c7 100644
--- a/release/scripts/startup/bl_ui/properties_render.py
+++ b/release/scripts/startup/bl_ui/properties_render.py
@@ -52,12 +52,33 @@ class RenderButtonsPanel:
@classmethod
def poll(cls, context):
scene = context.scene
- return scene and (scene.render.engine in cls.COMPAT_ENGINES)
+ return scene and (scene.view_render.engine in cls.COMPAT_ENGINES)
+
+
+class RENDER_PT_context(Panel):
+ bl_space_type = 'PROPERTIES'
+ bl_region_type = 'WINDOW'
+ bl_context = "render"
+ bl_options = {'HIDE_HEADER'}
+ bl_label = ""
+
+ @classmethod
+ def poll(cls, context):
+ return context.scene
+
+ def draw(self, context):
+ layout = self.layout
+
+ scene = context.scene
+ view_render = scene.view_render
+
+ if view_render.has_multiple_engines:
+ layout.prop(view_render, "engine", text="")
class RENDER_PT_render(RenderButtonsPanel, Panel):
bl_label = "Render"
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
@@ -79,7 +100,7 @@ class RENDER_PT_render(RenderButtonsPanel, Panel):
class RENDER_PT_dimensions(RenderButtonsPanel, Panel):
bl_label = "Dimensions"
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
_frame_rate_args_prev = None
_preset_class = None
@@ -207,8 +228,10 @@ class RENDER_PT_motion_blur(RenderButtonsPanel, Panel):
@classmethod
def poll(cls, context):
- rd = context.scene.render
- return not rd.use_full_sample and (rd.engine in cls.COMPAT_ENGINES)
+ scene = context.scene
+ rd = scene.render
+ view_render = scene.view_render
+ return not rd.use_full_sample and (view_render.engine in cls.COMPAT_ENGINES)
def draw_header(self, context):
rd = context.scene.render
@@ -299,7 +322,7 @@ class RENDER_PT_performance(RenderButtonsPanel, Panel):
class RENDER_PT_post_processing(RenderButtonsPanel, Panel):
bl_label = "Post Processing"
bl_options = {'DEFAULT_CLOSED'}
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
@@ -314,6 +337,9 @@ class RENDER_PT_post_processing(RenderButtonsPanel, Panel):
split.prop(rd, "dither_intensity", text="Dither", slider=True)
+ if context.scene.view_render.engine == 'BLENDER_EEVEE':
+ return
+
layout.separator()
split = layout.split()
@@ -336,7 +362,7 @@ class RENDER_PT_post_processing(RenderButtonsPanel, Panel):
class RENDER_PT_stamp(RenderButtonsPanel, Panel):
bl_label = "Metadata"
bl_options = {'DEFAULT_CLOSED'}
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
@@ -384,7 +410,7 @@ class RENDER_PT_stamp(RenderButtonsPanel, Panel):
class RENDER_PT_output(RenderButtonsPanel, Panel):
bl_label = "Output"
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
@@ -554,10 +580,332 @@ class RENDER_PT_bake(RenderButtonsPanel, Panel):
sub.prop(rd, "bake_user_scale", text="User Scale")
+class RENDER_PT_clay_layer_settings(RenderButtonsPanel, Panel):
+ bl_label = "Clay Layer Settings"
+ COMPAT_ENGINES = {'BLENDER_CLAY'}
+
+ def draw(self, context):
+ layout = self.layout
+ props = context.scene.layer_properties['BLENDER_CLAY']
+
+ col = layout.column()
+ col.prop(props, "ssao_samples")
+
+
+class RENDER_PT_clay_collection_settings(RenderButtonsPanel, Panel):
+ bl_label = "Clay Collection Settings"
+ COMPAT_ENGINES = {'BLENDER_CLAY'}
+
+ def draw(self, context):
+ layout = self.layout
+ props = context.scene.collection_properties['BLENDER_CLAY']
+
+ col = layout.column()
+ col.template_icon_view(props, "matcap_icon")
+ col.prop(props, "matcap_rotation")
+ col.prop(props, "matcap_hue")
+ col.prop(props, "matcap_saturation")
+ col.prop(props, "matcap_value")
+ col.prop(props, "ssao_factor_cavity")
+ col.prop(props, "ssao_factor_edge")
+ col.prop(props, "ssao_distance")
+ col.prop(props, "ssao_attenuation")
+ col.prop(props, "hair_brightness_randomness")
+
+
+class RENDER_PT_eevee_ambient_occlusion(RenderButtonsPanel, Panel):
+ bl_label = "Ambient Occlusion"
+ bl_options = {'DEFAULT_CLOSED'}
+ COMPAT_ENGINES = {'BLENDER_EEVEE'}
+
+ @classmethod
+ def poll(cls, context):
+ scene = context.scene
+ return scene and (scene.view_render.engine in cls.COMPAT_ENGINES)
+
+ def draw_header(self, context):
+ scene = context.scene
+ props = scene.layer_properties['BLENDER_EEVEE']
+ self.layout.prop(props, "gtao_enable", text="")
+
+ def draw(self, context):
+ layout = self.layout
+ scene = context.scene
+ props = scene.layer_properties['BLENDER_EEVEE']
+
+ layout.active = props.gtao_enable
+ col = layout.column()
+ col.prop(props, "gtao_use_bent_normals")
+ col.prop(props, "gtao_bounce")
+ col.prop(props, "gtao_distance")
+ col.prop(props, "gtao_factor")
+ col.prop(props, "gtao_quality")
+
+
+class RENDER_PT_eevee_motion_blur(RenderButtonsPanel, Panel):
+ bl_label = "Motion Blur"
+ bl_options = {'DEFAULT_CLOSED'}
+ COMPAT_ENGINES = {'BLENDER_EEVEE'}
+
+ @classmethod
+ def poll(cls, context):
+ scene = context.scene
+ return scene and (scene.view_render.engine in cls.COMPAT_ENGINES)
+
+ def draw_header(self, context):
+ scene = context.scene
+ props = scene.layer_properties['BLENDER_EEVEE']
+ self.layout.prop(props, "motion_blur_enable", text="")
+
+ def draw(self, context):
+ layout = self.layout
+ scene = context.scene
+ props = scene.layer_properties['BLENDER_EEVEE']
+
+ layout.active = props.motion_blur_enable
+ col = layout.column()
+ col.prop(props, "motion_blur_samples")
+ col.prop(props, "motion_blur_shutter")
+
+
+class RENDER_PT_eevee_depth_of_field(RenderButtonsPanel, Panel):
+ bl_label = "Depth of Field"
+ bl_options = {'DEFAULT_CLOSED'}
+ COMPAT_ENGINES = {'BLENDER_EEVEE'}
+
+ @classmethod
+ def poll(cls, context):
+ scene = context.scene
+ return scene and (scene.view_render.engine in cls.COMPAT_ENGINES)
+
+ def draw_header(self, context):
+ scene = context.scene
+ props = scene.layer_properties['BLENDER_EEVEE']
+ self.layout.prop(props, "dof_enable", text="")
+
+ def draw(self, context):
+ layout = self.layout
+ scene = context.scene
+ props = scene.layer_properties['BLENDER_EEVEE']
+
+ layout.active = props.dof_enable
+ col = layout.column()
+ col.prop(props, "bokeh_max_size")
+ col.prop(props, "bokeh_threshold")
+
+
+class RENDER_PT_eevee_bloom(RenderButtonsPanel, Panel):
+ bl_label = "Bloom"
+ bl_options = {'DEFAULT_CLOSED'}
+ COMPAT_ENGINES = {'BLENDER_EEVEE'}
+
+ @classmethod
+ def poll(cls, context):
+ scene = context.scene
+ return scene and (scene.view_render.engine in cls.COMPAT_ENGINES)
+
+ def draw_header(self, context):
+ scene = context.scene
+ props = scene.layer_properties['BLENDER_EEVEE']
+ self.layout.prop(props, "bloom_enable", text="")
+
+ def draw(self, context):
+ layout = self.layout
+ scene = context.scene
+ props = scene.layer_properties['BLENDER_EEVEE']
+
+ layout.active = props.bloom_enable
+ col = layout.column()
+ col.prop(props, "bloom_threshold")
+ col.prop(props, "bloom_knee")
+ col.prop(props, "bloom_radius")
+ col.prop(props, "bloom_color")
+ col.prop(props, "bloom_intensity")
+ col.prop(props, "bloom_clamp")
+
+
+class RENDER_PT_eevee_volumetric(RenderButtonsPanel, Panel):
+ bl_label = "Volumetric"
+ bl_options = {'DEFAULT_CLOSED'}
+ COMPAT_ENGINES = {'BLENDER_EEVEE'}
+
+ @classmethod
+ def poll(cls, context):
+ scene = context.scene
+ return scene and (scene.view_render.engine in cls.COMPAT_ENGINES)
+
+ def draw_header(self, context):
+ scene = context.scene
+ props = scene.layer_properties['BLENDER_EEVEE']
+ self.layout.prop(props, "volumetric_enable", text="")
+
+ def draw(self, context):
+ layout = self.layout
+ scene = context.scene
+ props = scene.layer_properties['BLENDER_EEVEE']
+
+ layout.active = props.volumetric_enable
+ col = layout.column()
+ col.prop(props, "volumetric_start")
+ col.prop(props, "volumetric_end")
+ col.prop(props, "volumetric_tile_size")
+ col.prop(props, "volumetric_samples")
+ col.prop(props, "volumetric_sample_distribution")
+ col.prop(props, "volumetric_lights")
+ col.prop(props, "volumetric_light_clamp")
+ col.prop(props, "volumetric_shadows")
+ col.prop(props, "volumetric_shadow_samples")
+ col.prop(props, "volumetric_colored_transmittance")
+
+
+class RENDER_PT_eevee_subsurface_scattering(RenderButtonsPanel, Panel):
+ bl_label = "Subsurface Scattering"
+ bl_options = {'DEFAULT_CLOSED'}
+ COMPAT_ENGINES = {'BLENDER_EEVEE'}
+
+ @classmethod
+ def poll(cls, context):
+ scene = context.scene
+ return scene and (scene.view_render.engine in cls.COMPAT_ENGINES)
+
+ def draw_header(self, context):
+ scene = context.scene
+ props = scene.layer_properties['BLENDER_EEVEE']
+ self.layout.prop(props, "sss_enable", text="")
+
+ def draw(self, context):
+ layout = self.layout
+ scene = context.scene
+ props = scene.layer_properties['BLENDER_EEVEE']
+
+ col = layout.column()
+ col.prop(props, "sss_samples")
+ col.prop(props, "sss_jitter_threshold")
+ col.prop(props, "sss_separate_albedo")
+
+
+class RENDER_PT_eevee_screen_space_reflections(RenderButtonsPanel, Panel):
+ bl_label = "Screen Space Reflections"
+ bl_options = {'DEFAULT_CLOSED'}
+ COMPAT_ENGINES = {'BLENDER_EEVEE'}
+
+ @classmethod
+ def poll(cls, context):
+ scene = context.scene
+ return scene and (scene.view_render.engine in cls.COMPAT_ENGINES)
+
+ def draw_header(self, context):
+ scene = context.scene
+ props = scene.layer_properties['BLENDER_EEVEE']
+ self.layout.prop(props, "ssr_enable", text="")
+
+ def draw(self, context):
+ layout = self.layout
+ scene = context.scene
+ props = scene.layer_properties['BLENDER_EEVEE']
+
+ col = layout.column()
+ col.active = props.ssr_enable
+ col.prop(props, "ssr_refraction")
+ col.prop(props, "ssr_halfres")
+ col.prop(props, "ssr_quality")
+ col.prop(props, "ssr_max_roughness")
+ col.prop(props, "ssr_thickness")
+ col.prop(props, "ssr_border_fade")
+ col.prop(props, "ssr_firefly_fac")
+
+
+class RENDER_PT_eevee_shadows(RenderButtonsPanel, Panel):
+ bl_label = "Shadows"
+ bl_options = {'DEFAULT_CLOSED'}
+ COMPAT_ENGINES = {'BLENDER_EEVEE'}
+
+ @classmethod
+ def poll(cls, context):
+ scene = context.scene
+ return scene and (scene.view_render.engine in cls.COMPAT_ENGINES)
+
+ def draw(self, context):
+ layout = self.layout
+ scene = context.scene
+ props = scene.layer_properties['BLENDER_EEVEE']
+
+ col = layout.column()
+ col.prop(props, "shadow_method")
+ col.prop(props, "shadow_size")
+ col.prop(props, "shadow_high_bitdepth")
+
+
+class RENDER_PT_eevee_sampling(RenderButtonsPanel, Panel):
+ bl_label = "Sampling"
+ bl_options = {'DEFAULT_CLOSED'}
+ COMPAT_ENGINES = {'BLENDER_EEVEE'}
+
+ @classmethod
+ def poll(cls, context):
+ scene = context.scene
+ return scene and (scene.view_render.engine in cls.COMPAT_ENGINES)
+
+ def draw(self, context):
+ layout = self.layout
+ scene = context.scene
+ props = scene.layer_properties['BLENDER_EEVEE']
+
+ col = layout.column()
+ col.prop(props, "taa_samples")
+ col.prop(props, "taa_render_samples")
+
+
+class RENDER_PT_eevee_indirect_lighting(RenderButtonsPanel, Panel):
+ bl_label = "Indirect Lighting"
+ bl_options = {'DEFAULT_CLOSED'}
+ COMPAT_ENGINES = {'BLENDER_EEVEE'}
+
+ @classmethod
+ def poll(cls, context):
+ scene = context.scene
+ return scene and (scene.view_render.engine in cls.COMPAT_ENGINES)
+
+ def draw(self, context):
+ layout = self.layout
+ scene = context.scene
+ props = scene.layer_properties['BLENDER_EEVEE']
+
+ col = layout.column()
+ col.prop(props, "gi_diffuse_bounces")
+ col.prop(props, "gi_cubemap_resolution")
+ col.prop(props, "gi_visibility_resolution")
+
+
+class RENDER_PT_eevee_film(RenderButtonsPanel, Panel):
+ bl_label = "Film"
+ bl_options = {'DEFAULT_CLOSED'}
+ COMPAT_ENGINES = {'BLENDER_EEVEE'}
+
+ @classmethod
+ def poll(cls, context):
+ scene = context.scene
+ return scene and (scene.view_render.engine in cls.COMPAT_ENGINES)
+
+ def draw(self, context):
+ layout = self.layout
+ scene = context.scene
+ rd = scene.render
+
+ split = layout.split()
+
+ col = split.column()
+ col.prop(rd, "filter_size")
+
+ col = split.column()
+ col.prop(rd, "alpha_mode", text="Alpha")
+
+
classes = (
RENDER_MT_presets,
RENDER_MT_ffmpeg_presets,
RENDER_MT_framerate_presets,
+ RENDER_PT_context,
RENDER_PT_render,
RENDER_PT_dimensions,
RENDER_PT_antialiasing,
@@ -569,6 +917,19 @@ classes = (
RENDER_PT_output,
RENDER_PT_encoding,
RENDER_PT_bake,
+ RENDER_PT_clay_layer_settings,
+ RENDER_PT_clay_collection_settings,
+ RENDER_PT_eevee_sampling,
+ RENDER_PT_eevee_film,
+ RENDER_PT_eevee_shadows,
+ RENDER_PT_eevee_indirect_lighting,
+ RENDER_PT_eevee_subsurface_scattering,
+ RENDER_PT_eevee_screen_space_reflections,
+ RENDER_PT_eevee_ambient_occlusion,
+ RENDER_PT_eevee_volumetric,
+ RENDER_PT_eevee_motion_blur,
+ RENDER_PT_eevee_depth_of_field,
+ RENDER_PT_eevee_bloom,
)
if __name__ == "__main__": # only for live edit.
diff --git a/release/scripts/startup/bl_ui/properties_render_layer.py b/release/scripts/startup/bl_ui/properties_render_layer.py
deleted file mode 100644
index 084bc387822..00000000000
--- a/release/scripts/startup/bl_ui/properties_render_layer.py
+++ /dev/null
@@ -1,242 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-# <pep8 compliant>
-import bpy
-from bpy.types import Panel, UIList
-
-
-class RenderLayerButtonsPanel:
- bl_space_type = 'PROPERTIES'
- bl_region_type = 'WINDOW'
- bl_context = "render_layer"
- # COMPAT_ENGINES must be defined in each subclass, external engines can add themselves here
-
- @classmethod
- def poll(cls, context):
- scene = context.scene
- return scene and (scene.render.engine in cls.COMPAT_ENGINES)
-
-
-class RENDERLAYER_UL_renderlayers(UIList):
- def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index):
- # assert(isinstance(item, bpy.types.SceneRenderLayer)
- layer = item
- if self.layout_type in {'DEFAULT', 'COMPACT'}:
- layout.prop(layer, "name", text="", icon_value=icon, emboss=False)
- layout.prop(layer, "use", text="", index=index)
- elif self.layout_type == 'GRID':
- layout.alignment = 'CENTER'
- layout.label("", icon_value=icon)
-
-
-class RENDERLAYER_PT_layers(RenderLayerButtonsPanel, Panel):
- bl_label = "Layer List"
- bl_options = {'HIDE_HEADER'}
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
-
- def draw(self, context):
- layout = self.layout
-
- scene = context.scene
- rd = scene.render
-
- if rd.engine == 'BLENDER_GAME':
- layout.label("Not available in the Game Engine")
- return
-
- row = layout.row()
- col = row.column()
- col.template_list("RENDERLAYER_UL_renderlayers", "", rd, "layers", rd.layers, "active_index", rows=2)
-
- col = row.column()
- sub = col.column(align=True)
- sub.operator("scene.render_layer_add", icon='ZOOMIN', text="")
- sub.operator("scene.render_layer_remove", icon='ZOOMOUT', text="")
- col.prop(rd, "use_single_layer", icon_only=True)
-
-
-class RENDERLAYER_PT_layer_options(RenderLayerButtonsPanel, Panel):
- bl_label = "Layer"
- COMPAT_ENGINES = {'BLENDER_RENDER'}
-
- def draw(self, context):
- layout = self.layout
-
- scene = context.scene
- rd = scene.render
- rl = rd.layers.active
-
- split = layout.split()
-
- col = split.column()
- col.prop(scene, "layers", text="Scene")
- col.label(text="")
- col.prop(rl, "light_override", text="Lights")
- col.prop(rl, "material_override", text="Material")
-
- col = split.column()
- col.prop(rl, "layers", text="Layer")
- col.prop(rl, "layers_zmask", text="Mask Layer")
-
- layout.separator()
- layout.label(text="Include:")
-
- split = layout.split()
-
- col = split.column()
- col.prop(rl, "use_zmask")
- row = col.row()
- row.prop(rl, "invert_zmask", text="Negate")
- row.active = rl.use_zmask
- col.prop(rl, "use_all_z")
-
- col = split.column()
- col.prop(rl, "use_solid")
- col.prop(rl, "use_halo")
- col.prop(rl, "use_ztransp")
-
- col = split.column()
- col.prop(rl, "use_sky")
- col.prop(rl, "use_edge_enhance")
- col.prop(rl, "use_strand")
- if bpy.app.build_options.freestyle:
- row = col.row()
- row.prop(rl, "use_freestyle")
- row.active = rd.use_freestyle
-
-
-class RENDERLAYER_PT_layer_passes(RenderLayerButtonsPanel, Panel):
- bl_label = "Passes"
- bl_options = {'DEFAULT_CLOSED'}
- COMPAT_ENGINES = {'BLENDER_RENDER'}
-
- @staticmethod
- def draw_pass_type_buttons(box, rl, pass_type):
- # property names
- use_pass_type = "use_pass_" + pass_type
- exclude_pass_type = "exclude_" + pass_type
- # draw pass type buttons
- row = box.row()
- row.prop(rl, use_pass_type)
- row.prop(rl, exclude_pass_type, text="")
-
- def draw(self, context):
- layout = self.layout
-
- scene = context.scene
- rd = scene.render
- rl = rd.layers.active
-
- split = layout.split()
-
- col = split.column()
- col.prop(rl, "use_pass_combined")
- col.prop(rl, "use_pass_z")
- col.prop(rl, "use_pass_vector")
- col.prop(rl, "use_pass_normal")
- col.prop(rl, "use_pass_uv")
- col.prop(rl, "use_pass_mist")
- col.prop(rl, "use_pass_object_index")
- col.prop(rl, "use_pass_material_index")
- col.prop(rl, "use_pass_color")
-
- col = split.column()
- col.prop(rl, "use_pass_diffuse")
- self.draw_pass_type_buttons(col, rl, "specular")
- self.draw_pass_type_buttons(col, rl, "shadow")
- self.draw_pass_type_buttons(col, rl, "emit")
- self.draw_pass_type_buttons(col, rl, "ambient_occlusion")
- self.draw_pass_type_buttons(col, rl, "environment")
- self.draw_pass_type_buttons(col, rl, "indirect")
- self.draw_pass_type_buttons(col, rl, "reflection")
- self.draw_pass_type_buttons(col, rl, "refraction")
-
-
-class RENDERLAYER_UL_renderviews(UIList):
- def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index):
- # assert(isinstance(item, bpy.types.SceneRenderView)
- view = item
- if self.layout_type in {'DEFAULT', 'COMPACT'}:
- if view.name in {'left', 'right'}:
- layout.label(view.name, icon_value=icon + (not view.use))
- else:
- layout.prop(view, "name", text="", index=index, icon_value=icon, emboss=False)
- layout.prop(view, "use", text="", index=index)
-
- elif self.layout_type == 'GRID':
- layout.alignment = 'CENTER'
- layout.label("", icon_value=icon + (not view.use))
-
-
-class RENDERLAYER_PT_views(RenderLayerButtonsPanel, Panel):
- bl_label = "Views"
- COMPAT_ENGINES = {'BLENDER_RENDER'}
- bl_options = {'DEFAULT_CLOSED'}
-
- def draw_header(self, context):
- rd = context.scene.render
- self.layout.prop(rd, "use_multiview", text="")
-
- def draw(self, context):
- layout = self.layout
-
- scene = context.scene
- rd = scene.render
- rv = rd.views.active
-
- layout.active = rd.use_multiview
- basic_stereo = rd.views_format == 'STEREO_3D'
-
- row = layout.row()
- row.prop(rd, "views_format", expand=True)
-
- if basic_stereo:
- row = layout.row()
- row.template_list("RENDERLAYER_UL_renderviews", "name", rd, "stereo_views", rd.views, "active_index", rows=2)
-
- row = layout.row()
- row.label(text="File Suffix:")
- row.prop(rv, "file_suffix", text="")
-
- else:
- row = layout.row()
- row.template_list("RENDERLAYER_UL_renderviews", "name", rd, "views", rd.views, "active_index", rows=2)
-
- col = row.column(align=True)
- col.operator("scene.render_view_add", icon='ZOOMIN', text="")
- col.operator("scene.render_view_remove", icon='ZOOMOUT', text="")
-
- row = layout.row()
- row.label(text="Camera Suffix:")
- row.prop(rv, "camera_suffix", text="")
-
-
-classes = (
- RENDERLAYER_UL_renderlayers,
- RENDERLAYER_PT_layers,
- RENDERLAYER_PT_layer_options,
- RENDERLAYER_PT_layer_passes,
- RENDERLAYER_UL_renderviews,
- RENDERLAYER_PT_views,
-)
-
-if __name__ == "__main__": # only for live edit.
- from bpy.utils import register_class
- for cls in classes:
- register_class(cls)
diff --git a/release/scripts/startup/bl_ui/properties_scene.py b/release/scripts/startup/bl_ui/properties_scene.py
index db7fd998d4e..e8f25ea891b 100644
--- a/release/scripts/startup/bl_ui/properties_scene.py
+++ b/release/scripts/startup/bl_ui/properties_scene.py
@@ -60,13 +60,13 @@ class SceneButtonsPanel:
@classmethod
def poll(cls, context):
- rd = context.scene.render
- return context.scene and (rd.engine in cls.COMPAT_ENGINES)
+ view_render = context.scene.view_render
+ return context.scene and (view_render.engine in cls.COMPAT_ENGINES)
class SCENE_PT_scene(SceneButtonsPanel, Panel):
bl_label = "Scene"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
@@ -75,13 +75,13 @@ class SCENE_PT_scene(SceneButtonsPanel, Panel):
layout.prop(scene, "camera")
layout.prop(scene, "background_set", text="Background")
- if context.scene.render.engine != 'BLENDER_GAME':
+ if context.engine != 'BLENDER_GAME':
layout.prop(scene, "active_clip", text="Active Clip")
class SCENE_PT_unit(SceneButtonsPanel, Panel):
bl_label = "Units"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
@@ -166,7 +166,7 @@ class SceneKeyingSetsPanel:
class SCENE_PT_keying_sets(SceneButtonsPanel, SceneKeyingSetsPanel, Panel):
bl_label = "Keying Sets"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
@@ -199,7 +199,7 @@ class SCENE_PT_keying_sets(SceneButtonsPanel, SceneKeyingSetsPanel, Panel):
class SCENE_PT_keying_set_paths(SceneButtonsPanel, SceneKeyingSetsPanel, Panel):
bl_label = "Active Keying Set"
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
@classmethod
def poll(cls, context):
@@ -256,7 +256,7 @@ class SCENE_PT_keying_set_paths(SceneButtonsPanel, SceneKeyingSetsPanel, Panel):
class SCENE_PT_color_management(SceneButtonsPanel, Panel):
bl_label = "Color Management"
bl_options = {'DEFAULT_CLOSED'}
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
@@ -281,7 +281,7 @@ class SCENE_PT_color_management(SceneButtonsPanel, Panel):
class SCENE_PT_audio(SceneButtonsPanel, Panel):
bl_label = "Audio"
bl_options = {'DEFAULT_CLOSED'}
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
def draw(self, context):
layout = self.layout
@@ -332,8 +332,7 @@ class SCENE_PT_rigid_body_world(SceneButtonsPanel, Panel):
@classmethod
def poll(cls, context):
scene = context.scene
- rd = scene.render
- return scene and (rd.engine in cls.COMPAT_ENGINES)
+ return scene and (scene.view_render.engine in cls.COMPAT_ENGINES)
def draw_header(self, context):
scene = context.scene
@@ -378,9 +377,9 @@ class SCENE_PT_rigid_body_cache(SceneButtonsPanel, Panel):
@classmethod
def poll(cls, context):
- rd = context.scene.render
scene = context.scene
- return scene and scene.rigidbody_world and (rd.engine in cls.COMPAT_ENGINES)
+ view_render = scene.view_render
+ return scene and scene.rigidbody_world and (view_render.engine in cls.COMPAT_ENGINES)
def draw(self, context):
scene = context.scene
@@ -396,9 +395,9 @@ class SCENE_PT_rigid_body_field_weights(SceneButtonsPanel, Panel):
@classmethod
def poll(cls, context):
- rd = context.scene.render
+ view_render = context.scene.view_render
scene = context.scene
- return scene and scene.rigidbody_world and (rd.engine in cls.COMPAT_ENGINES)
+ return scene and scene.rigidbody_world and (view_render.engine in cls.COMPAT_ENGINES)
def draw(self, context):
scene = context.scene
@@ -409,7 +408,7 @@ class SCENE_PT_rigid_body_field_weights(SceneButtonsPanel, Panel):
class SCENE_PT_simplify(SceneButtonsPanel, Panel):
bl_label = "Simplify"
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
def draw_header(self, context):
rd = context.scene.render
@@ -439,7 +438,7 @@ class SCENE_PT_simplify(SceneButtonsPanel, Panel):
class SCENE_PT_custom_props(SceneButtonsPanel, PropertyPanel, Panel):
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
_context_path = "scene"
_property_type = bpy.types.Scene
diff --git a/release/scripts/startup/bl_ui/properties_texture.py b/release/scripts/startup/bl_ui/properties_texture.py
index 25e9ef3ee73..01c36347b56 100644
--- a/release/scripts/startup/bl_ui/properties_texture.py
+++ b/release/scripts/startup/bl_ui/properties_texture.py
@@ -125,7 +125,7 @@ class TextureButtonsPanel:
@classmethod
def poll(cls, context):
tex = context.texture
- return tex and (tex.type != 'NONE' or tex.use_nodes) and (context.scene.render.engine in cls.COMPAT_ENGINES)
+ return tex and (tex.type != 'NONE' or tex.use_nodes) and (context.engine in cls.COMPAT_ENGINES)
class TEXTURE_PT_context_texture(TextureButtonsPanel, Panel):
@@ -135,7 +135,7 @@ class TEXTURE_PT_context_texture(TextureButtonsPanel, Panel):
@classmethod
def poll(cls, context):
- engine = context.scene.render.engine
+ engine = context.engine
# if not (hasattr(context, "texture_slot") or hasattr(context, "texture_node")):
# return False
return ((context.material or
@@ -292,7 +292,7 @@ class TextureSlotPanel(TextureButtonsPanel):
if not hasattr(context, "texture_slot"):
return False
- engine = context.scene.render.engine
+ engine = context.engine
return TextureButtonsPanel.poll(cls, context) and (engine in cls.COMPAT_ENGINES)
@@ -304,7 +304,7 @@ class TextureTypePanel(TextureButtonsPanel):
@classmethod
def poll(cls, context):
tex = context.texture
- engine = context.scene.render.engine
+ engine = context.engine
return tex and ((tex.type == cls.tex_type and not tex.use_nodes) and (engine in cls.COMPAT_ENGINES))
@@ -459,7 +459,7 @@ def texture_filter_common(tex, layout):
layout.prop(tex, "filter_type", text="")
if tex.use_mipmap and tex.filter_type in {'AREA', 'EWA', 'FELINE'}:
if tex.filter_type == 'FELINE':
- layout.prop(tex, "filter_probes", text="Probes")
+ layout.prop(tex, "filter_lightprobes", text="Light Probes")
else:
layout.prop(tex, "filter_eccentricity", text="Eccentricity")
@@ -474,7 +474,7 @@ class TEXTURE_PT_image_sampling(TextureTypePanel, Panel):
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
def draw(self, context):
- if context.scene.render.engine == 'BLENDER_GAME':
+ if context.engine == 'BLENDER_GAME':
self.draw_bge(context)
else:
self.draw_bi(context)
@@ -756,7 +756,7 @@ class TEXTURE_PT_voxeldata(TextureButtonsPanel, Panel):
@classmethod
def poll(cls, context):
tex = context.texture
- engine = context.scene.render.engine
+ engine = context.engine
return tex and (tex.type == 'VOXEL_DATA' and (engine in cls.COMPAT_ENGINES))
def draw(self, context):
@@ -799,7 +799,7 @@ class TEXTURE_PT_pointdensity(TextureButtonsPanel, Panel):
@classmethod
def poll(cls, context):
tex = context.texture
- engine = context.scene.render.engine
+ engine = context.engine
return tex and (tex.type == 'POINT_DENSITY' and (engine in cls.COMPAT_ENGINES))
def draw(self, context):
@@ -874,7 +874,7 @@ class TEXTURE_PT_pointdensity_turbulence(TextureButtonsPanel, Panel):
@classmethod
def poll(cls, context):
tex = context.texture
- engine = context.scene.render.engine
+ engine = context.engine
return tex and (tex.type == 'POINT_DENSITY' and (engine in cls.COMPAT_ENGINES))
def draw_header(self, context):
@@ -933,7 +933,7 @@ class TEXTURE_PT_mapping(TextureSlotPanel, Panel):
if not getattr(context, "texture_slot", None):
return False
- engine = context.scene.render.engine
+ engine = context.engine
return (engine in cls.COMPAT_ENGINES)
def draw(self, context):
@@ -963,7 +963,7 @@ class TEXTURE_PT_mapping(TextureSlotPanel, Panel):
split.label(text="Map:")
ob = context.object
if ob and ob.type == 'MESH':
- split.prop_search(tex, "uv_layer", ob.data, "uv_textures", text="")
+ split.prop_search(tex, "uv_layer", ob.data, "uv_layers", text="")
else:
split.prop(tex, "uv_layer", text="")
@@ -1036,7 +1036,7 @@ class TEXTURE_PT_influence(TextureSlotPanel, Panel):
if not getattr(context, "texture_slot", None):
return False
- engine = context.scene.render.engine
+ engine = context.engine
return (engine in cls.COMPAT_ENGINES)
def draw(self, context):
diff --git a/release/scripts/startup/bl_ui/properties_view_layer.py b/release/scripts/startup/bl_ui/properties_view_layer.py
new file mode 100644
index 00000000000..4d61aacbf22
--- /dev/null
+++ b/release/scripts/startup/bl_ui/properties_view_layer.py
@@ -0,0 +1,504 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# <pep8 compliant>
+import bpy
+from bpy.types import Panel, UIList
+
+
+class ViewLayerButtonsPanel:
+ bl_space_type = 'PROPERTIES'
+ bl_region_type = 'WINDOW'
+ bl_context = "view_layer"
+ # COMPAT_ENGINES must be defined in each subclass, external engines can add themselves here
+
+ @classmethod
+ def poll(cls, context):
+ scene = context.scene
+ return scene and (scene.view_render.engine in cls.COMPAT_ENGINES)
+
+
+class VIEWLAYER_UL_viewlayers(UIList):
+ def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index):
+ # assert(isinstance(item, bpy.types.SceneLayer)
+ layer = item
+ if self.layout_type in {'DEFAULT', 'COMPACT'}:
+ layout.prop(layer, "name", text="", icon_value=icon, emboss=False)
+ layout.prop(layer, "use", text="", index=index)
+ elif self.layout_type == 'GRID':
+ layout.alignment = 'CENTER'
+ layout.label("", icon_value=icon)
+
+
+class VIEWLAYER_PT_layers(ViewLayerButtonsPanel, Panel):
+ bl_label = "Layer List"
+ bl_options = {'HIDE_HEADER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
+
+ def draw(self, context):
+ layout = self.layout
+
+ scene = context.scene
+ rd = scene.render
+ view_render = scene.view_render
+
+ if view_render.engine == 'BLENDER_GAME':
+ layout.label("Not available in the Game Engine")
+ return
+
+ row = layout.row()
+ col = row.column()
+ col.template_list("VIEWLAYER_UL_viewlayers", "", scene, "view_layers", scene.view_layers, "active_index", rows=2)
+
+ col = row.column()
+ sub = col.column(align=True)
+ sub.operator("scene.view_layer_add", icon='ZOOMIN', text="")
+ sub.operator("scene.view_layer_remove", icon='ZOOMOUT', text="")
+ col.prop(rd, "use_single_layer", icon_only=True)
+
+
+class VIEWLAYER_UL_renderviews(UIList):
+ def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index):
+ # assert(isinstance(item, bpy.types.SceneRenderView)
+ view = item
+ if self.layout_type in {'DEFAULT', 'COMPACT'}:
+ if view.name in {'left', 'right'}:
+ layout.label(view.name, icon_value=icon + (not view.use))
+ else:
+ layout.prop(view, "name", text="", index=index, icon_value=icon, emboss=False)
+ layout.prop(view, "use", text="", index=index)
+
+ elif self.layout_type == 'GRID':
+ layout.alignment = 'CENTER'
+ layout.label("", icon_value=icon + (not view.use))
+
+
+class VIEWLAYER_PT_views(ViewLayerButtonsPanel, Panel):
+ bl_label = "Views"
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
+ bl_options = {'DEFAULT_CLOSED'}
+
+ def draw_header(self, context):
+ rd = context.scene.render
+ self.layout.prop(rd, "use_multiview", text="")
+
+ def draw(self, context):
+ layout = self.layout
+
+ scene = context.scene
+ rd = scene.render
+ rv = rd.views.active
+
+ layout.active = rd.use_multiview
+ basic_stereo = rd.views_format == 'STEREO_3D'
+
+ row = layout.row()
+ row.prop(rd, "views_format", expand=True)
+
+ if basic_stereo:
+ row = layout.row()
+ row.template_list("VIEWLAYER_UL_renderviews", "name", rd, "stereo_views", rd.views, "active_index", rows=2)
+
+ row = layout.row()
+ row.label(text="File Suffix:")
+ row.prop(rv, "file_suffix", text="")
+
+ else:
+ row = layout.row()
+ row.template_list("VIEWLAYER_UL_renderviews", "name", rd, "views", rd.views, "active_index", rows=2)
+
+ col = row.column(align=True)
+ col.operator("scene.render_view_add", icon='ZOOMIN', text="")
+ col.operator("scene.render_view_remove", icon='ZOOMOUT', text="")
+
+ row = layout.row()
+ row.label(text="Camera Suffix:")
+ row.prop(rv, "camera_suffix", text="")
+
+
+class VIEWLAYER_PT_clay_settings(ViewLayerButtonsPanel, Panel):
+ bl_label = "Render Settings"
+ COMPAT_ENGINES = {'BLENDER_CLAY'}
+
+ @classmethod
+ def poll(cls, context):
+ scene = context.scene
+ return scene and (scene.view_render.engine in cls.COMPAT_ENGINES)
+
+ def draw(self, context):
+ layout = self.layout
+ scene = context.scene
+ scene_props = scene.layer_properties['BLENDER_CLAY']
+ layer = bpy.context.view_layer
+ layer_props = layer.engine_overrides['BLENDER_CLAY']
+
+ col = layout.column()
+ col.template_override_property(layer_props, scene_props, "ssao_samples")
+
+
+class VIEWLAYER_PT_eevee_ambient_occlusion(ViewLayerButtonsPanel, Panel):
+ bl_label = "Ambient Occlusion"
+ bl_options = {'DEFAULT_CLOSED'}
+ COMPAT_ENGINES = {'BLENDER_EEVEE'}
+
+ @classmethod
+ def poll(cls, context):
+ scene = context.scene
+ return scene and (scene.view_render.engine in cls.COMPAT_ENGINES)
+
+ def draw_header(self, context):
+ scene = context.scene
+ scene_props = scene.layer_properties['BLENDER_EEVEE']
+ layer = bpy.context.view_layer
+ layer_props = layer.engine_overrides['BLENDER_EEVEE']
+
+ self.layout.template_override_property(layer_props, scene_props, "gtao_enable", text="")
+
+ def draw(self, context):
+ layout = self.layout
+ scene = context.scene
+ scene_props = scene.layer_properties['BLENDER_EEVEE']
+ layer = bpy.context.view_layer
+ layer_props = layer.engine_overrides['BLENDER_EEVEE']
+
+ col = layout.column()
+ col.template_override_property(layer_props, scene_props, "gtao_use_bent_normals")
+ col.template_override_property(layer_props, scene_props, "gtao_bounce")
+ col.template_override_property(layer_props, scene_props, "gtao_distance")
+ col.template_override_property(layer_props, scene_props, "gtao_factor")
+ col.template_override_property(layer_props, scene_props, "gtao_quality")
+
+
+class VIEWLAYER_PT_eevee_motion_blur(ViewLayerButtonsPanel, Panel):
+ bl_label = "Motion Blur"
+ bl_options = {'DEFAULT_CLOSED'}
+ COMPAT_ENGINES = {'BLENDER_EEVEE'}
+
+ @classmethod
+ def poll(cls, context):
+ scene = context.scene
+ return scene and (scene.view_render.engine in cls.COMPAT_ENGINES)
+
+ def draw_header(self, context):
+ scene = context.scene
+ scene_props = scene.layer_properties['BLENDER_EEVEE']
+ layer = bpy.context.view_layer
+ layer_props = layer.engine_overrides['BLENDER_EEVEE']
+
+ self.layout.template_override_property(layer_props, scene_props, "motion_blur_enable", text="")
+
+ def draw(self, context):
+ layout = self.layout
+ scene = context.scene
+ scene_props = scene.layer_properties['BLENDER_EEVEE']
+ layer = bpy.context.view_layer
+ layer_props = layer.engine_overrides['BLENDER_EEVEE']
+
+ col = layout.column()
+ col.template_override_property(layer_props, scene_props, "motion_blur_samples")
+ col.template_override_property(layer_props, scene_props, "motion_blur_shutter")
+
+
+class VIEWLAYER_PT_eevee_depth_of_field(ViewLayerButtonsPanel, Panel):
+ bl_label = "Depth Of Field"
+ bl_options = {'DEFAULT_CLOSED'}
+ COMPAT_ENGINES = {'BLENDER_EEVEE'}
+
+ @classmethod
+ def poll(cls, context):
+ scene = context.scene
+ return scene and (scene.view_render.engine in cls.COMPAT_ENGINES)
+
+ def draw_header(self, context):
+ scene = context.scene
+ scene_props = scene.layer_properties['BLENDER_EEVEE']
+ layer = bpy.context.view_layer
+ layer_props = layer.engine_overrides['BLENDER_EEVEE']
+
+ self.layout.template_override_property(layer_props, scene_props, "dof_enable", text="")
+
+ def draw(self, context):
+ layout = self.layout
+ scene = context.scene
+ scene_props = scene.layer_properties['BLENDER_EEVEE']
+ layer = bpy.context.view_layer
+ layer_props = layer.engine_overrides['BLENDER_EEVEE']
+
+ col = layout.column()
+ col.template_override_property(layer_props, scene_props, "bokeh_max_size")
+ col.template_override_property(layer_props, scene_props, "bokeh_threshold")
+
+
+class VIEWLAYER_PT_eevee_bloom(ViewLayerButtonsPanel, Panel):
+ bl_label = "Bloom"
+ bl_options = {'DEFAULT_CLOSED'}
+ COMPAT_ENGINES = {'BLENDER_EEVEE'}
+
+ @classmethod
+ def poll(cls, context):
+ scene = context.scene
+ return scene and (scene.view_render.engine in cls.COMPAT_ENGINES)
+
+ def draw_header(self, context):
+ scene = context.scene
+ scene_props = scene.layer_properties['BLENDER_EEVEE']
+ layer = bpy.context.view_layer
+ layer_props = layer.engine_overrides['BLENDER_EEVEE']
+
+ self.layout.template_override_property(layer_props, scene_props, "bloom_enable", text="")
+
+ def draw(self, context):
+ layout = self.layout
+ scene = context.scene
+ scene_props = scene.layer_properties['BLENDER_EEVEE']
+ layer = bpy.context.view_layer
+ layer_props = layer.engine_overrides['BLENDER_EEVEE']
+
+ col = layout.column()
+ col.template_override_property(layer_props, scene_props, "bloom_threshold")
+ col.template_override_property(layer_props, scene_props, "bloom_knee")
+ col.template_override_property(layer_props, scene_props, "bloom_radius")
+ col.template_override_property(layer_props, scene_props, "bloom_color")
+ col.template_override_property(layer_props, scene_props, "bloom_intensity")
+ col.template_override_property(layer_props, scene_props, "bloom_clamp")
+
+
+class VIEWLAYER_PT_eevee_volumetric(ViewLayerButtonsPanel, Panel):
+ bl_label = "Volumetric"
+ bl_options = {'DEFAULT_CLOSED'}
+ COMPAT_ENGINES = {'BLENDER_EEVEE'}
+
+ @classmethod
+ def poll(cls, context):
+ scene = context.scene
+ return scene and (scene.view_render.engine in cls.COMPAT_ENGINES)
+
+ def draw_header(self, context):
+ scene = context.scene
+ scene_props = scene.layer_properties['BLENDER_EEVEE']
+ layer = bpy.context.view_layer
+ layer_props = layer.engine_overrides['BLENDER_EEVEE']
+
+ self.layout.template_override_property(layer_props, scene_props, "volumetric_enable", text="")
+
+ def draw(self, context):
+ layout = self.layout
+ scene = context.scene
+ scene_props = scene.layer_properties['BLENDER_EEVEE']
+ layer = bpy.context.view_layer
+ layer_props = layer.engine_overrides['BLENDER_EEVEE']
+
+ col = layout.column()
+ col.template_override_property(layer_props, scene_props, "volumetric_start")
+ col.template_override_property(layer_props, scene_props, "volumetric_end")
+ col.template_override_property(layer_props, scene_props, "volumetric_tile_size")
+ col.template_override_property(layer_props, scene_props, "volumetric_samples")
+ col.template_override_property(layer_props, scene_props, "volumetric_sample_distribution")
+ col.template_override_property(layer_props, scene_props, "volumetric_lights")
+ col.template_override_property(layer_props, scene_props, "volumetric_light_clamp")
+ col.template_override_property(layer_props, scene_props, "volumetric_shadows")
+ col.template_override_property(layer_props, scene_props, "volumetric_shadow_samples")
+ col.template_override_property(layer_props, scene_props, "volumetric_colored_transmittance")
+
+
+class VIEWLAYER_PT_eevee_subsurface_scattering(ViewLayerButtonsPanel, Panel):
+ bl_label = "Subsurface Scattering"
+ bl_options = {'DEFAULT_CLOSED'}
+ COMPAT_ENGINES = {'BLENDER_EEVEE'}
+
+ @classmethod
+ def poll(cls, context):
+ scene = context.scene
+ return scene and (scene.view_render.engine in cls.COMPAT_ENGINES)
+
+ def draw_header(self, context):
+ scene = context.scene
+ scene_props = scene.layer_properties['BLENDER_EEVEE']
+ layer = bpy.context.view_layer
+ layer_props = layer.engine_overrides['BLENDER_EEVEE']
+
+ self.layout.template_override_property(layer_props, scene_props, "sss_enable", text="")
+
+ def draw(self, context):
+ layout = self.layout
+ scene = context.scene
+ scene_props = scene.layer_properties['BLENDER_EEVEE']
+ layer = bpy.context.view_layer
+ layer_props = layer.engine_overrides['BLENDER_EEVEE']
+
+ col = layout.column()
+ col.template_override_property(layer_props, scene_props, "sss_samples")
+ col.template_override_property(layer_props, scene_props, "sss_jitter_threshold")
+ col.template_override_property(layer_props, scene_props, "sss_separate_albedo")
+
+
+class VIEWLAYER_PT_eevee_screen_space_reflections(ViewLayerButtonsPanel, Panel):
+ bl_label = "Screen Space Reflections"
+ bl_options = {'DEFAULT_CLOSED'}
+ COMPAT_ENGINES = {'BLENDER_EEVEE'}
+
+ @classmethod
+ def poll(cls, context):
+ scene = context.scene
+ return scene and (scene.view_render.engine in cls.COMPAT_ENGINES)
+
+ def draw_header(self, context):
+ scene = context.scene
+ scene_props = scene.layer_properties['BLENDER_EEVEE']
+ layer = bpy.context.view_layer
+ layer_props = layer.engine_overrides['BLENDER_EEVEE']
+
+ self.layout.template_override_property(layer_props, scene_props, "ssr_enable", text="")
+
+ def draw(self, context):
+ layout = self.layout
+ scene = context.scene
+ scene_props = scene.layer_properties['BLENDER_EEVEE']
+ layer = bpy.context.view_layer
+ layer_props = layer.engine_overrides['BLENDER_EEVEE']
+
+ col = layout.column()
+ col.template_override_property(layer_props, scene_props, "ssr_halfres")
+ col.template_override_property(layer_props, scene_props, "ssr_refraction")
+ col.template_override_property(layer_props, scene_props, "ssr_quality")
+ col.template_override_property(layer_props, scene_props, "ssr_max_roughness")
+ col.template_override_property(layer_props, scene_props, "ssr_thickness")
+ col.template_override_property(layer_props, scene_props, "ssr_border_fade")
+ col.template_override_property(layer_props, scene_props, "ssr_firefly_fac")
+
+
+class VIEWLAYER_PT_eevee_shadows(ViewLayerButtonsPanel, Panel):
+ bl_label = "Shadows"
+ bl_options = {'DEFAULT_CLOSED'}
+ COMPAT_ENGINES = {'BLENDER_EEVEE'}
+
+ @classmethod
+ def poll(cls, context):
+ scene = context.scene
+ return scene and (scene.view_render.engine in cls.COMPAT_ENGINES)
+
+ def draw(self, context):
+ layout = self.layout
+ scene = context.scene
+ scene_props = scene.layer_properties['BLENDER_EEVEE']
+ layer = bpy.context.view_layer
+ layer_props = layer.engine_overrides['BLENDER_EEVEE']
+
+ col = layout.column()
+ col.template_override_property(layer_props, scene_props, "shadow_method")
+ col.template_override_property(layer_props, scene_props, "shadow_size")
+ col.template_override_property(layer_props, scene_props, "shadow_high_bitdepth")
+
+
+class VIEWLAYER_PT_eevee_sampling(ViewLayerButtonsPanel, Panel):
+ bl_label = "Sampling"
+ bl_options = {'DEFAULT_CLOSED'}
+ COMPAT_ENGINES = {'BLENDER_EEVEE'}
+
+ @classmethod
+ def poll(cls, context):
+ scene = context.scene
+ return scene and (scene.view_render.engine in cls.COMPAT_ENGINES)
+
+ def draw(self, context):
+ layout = self.layout
+ scene = context.scene
+ scene_props = scene.layer_properties['BLENDER_EEVEE']
+ layer = bpy.context.view_layer
+ layer_props = layer.engine_overrides['BLENDER_EEVEE']
+
+ col = layout.column()
+ col.template_override_property(layer_props, scene_props, "taa_samples")
+ col.template_override_property(layer_props, scene_props, "taa_render_samples")
+
+
+class VIEWLAYER_PT_eevee_indirect_lighting(ViewLayerButtonsPanel, Panel):
+ bl_label = "Indirect Lighting"
+ bl_options = {'DEFAULT_CLOSED'}
+ COMPAT_ENGINES = {'BLENDER_EEVEE'}
+
+ @classmethod
+ def poll(cls, context):
+ scene = context.scene
+ return scene and (scene.view_render.engine in cls.COMPAT_ENGINES)
+
+ def draw(self, context):
+ layout = self.layout
+ scene = context.scene
+ scene_props = scene.layer_properties['BLENDER_EEVEE']
+ layer = bpy.context.view_layer
+ layer_props = layer.engine_overrides['BLENDER_EEVEE']
+
+ col = layout.column()
+ col.template_override_property(layer_props, scene_props, "gi_diffuse_bounces")
+ col.template_override_property(layer_props, scene_props, "gi_cubemap_resolution")
+ col.template_override_property(layer_props, scene_props, "gi_visibility_resolution")
+
+
+class VIEWLAYER_PT_eevee_layer_passes(ViewLayerButtonsPanel, Panel):
+ bl_label = "Passes"
+ bl_options = {'DEFAULT_CLOSED'}
+ COMPAT_ENGINES = {'BLENDER_EEVEE'}
+
+ def draw(self, context):
+ layout = self.layout
+
+ scene = context.scene
+ rd = scene.render
+ view_layer = scene.view_layers.active
+
+ split = layout.split()
+
+ col = split.column()
+ col.prop(view_layer, "use_pass_combined")
+ col.prop(view_layer, "use_pass_z")
+ col.prop(view_layer, "use_pass_mist")
+ col.prop(view_layer, "use_pass_normal")
+ col.separator()
+ col.prop(view_layer, "use_pass_ambient_occlusion")
+
+ col = split.column()
+ col.label(text="Subsurface:")
+ row = col.row(align=True)
+ row.prop(view_layer, "use_pass_subsurface_direct", text="Direct", toggle=True)
+ row.prop(view_layer, "use_pass_subsurface_color", text="Color", toggle=True)
+
+
+classes = (
+ VIEWLAYER_UL_viewlayers,
+ VIEWLAYER_PT_layers,
+ VIEWLAYER_UL_renderviews,
+ VIEWLAYER_PT_views,
+ VIEWLAYER_PT_clay_settings,
+ VIEWLAYER_PT_eevee_sampling,
+ VIEWLAYER_PT_eevee_shadows,
+ VIEWLAYER_PT_eevee_indirect_lighting,
+ VIEWLAYER_PT_eevee_subsurface_scattering,
+ VIEWLAYER_PT_eevee_screen_space_reflections,
+ VIEWLAYER_PT_eevee_ambient_occlusion,
+ VIEWLAYER_PT_eevee_volumetric,
+ VIEWLAYER_PT_eevee_motion_blur,
+ VIEWLAYER_PT_eevee_depth_of_field,
+ VIEWLAYER_PT_eevee_bloom,
+ VIEWLAYER_PT_eevee_layer_passes,
+)
+
+if __name__ == "__main__": # only for live edit.
+ from bpy.utils import register_class
+ for cls in classes:
+ register_class(cls)
diff --git a/release/scripts/startup/bl_ui/properties_world.py b/release/scripts/startup/bl_ui/properties_world.py
index 107c31567b3..48eed9acb3a 100644
--- a/release/scripts/startup/bl_ui/properties_world.py
+++ b/release/scripts/startup/bl_ui/properties_world.py
@@ -20,6 +20,7 @@
import bpy
from bpy.types import Panel
from rna_prop_ui import PropertyPanel
+from bpy_extras.node_utils import find_node_input, find_output_node
class WorldButtonsPanel:
@@ -30,18 +31,18 @@ class WorldButtonsPanel:
@classmethod
def poll(cls, context):
- return (context.world and context.scene.render.engine in cls.COMPAT_ENGINES)
+ return (context.world and context.engine in cls.COMPAT_ENGINES)
class WORLD_PT_context_world(WorldButtonsPanel, Panel):
bl_label = ""
bl_options = {'HIDE_HEADER'}
- COMPAT_ENGINES = {'BLENDER_RENDER'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
@classmethod
def poll(cls, context):
- rd = context.scene.render
- return rd.engine in cls.COMPAT_ENGINES
+ view_render = context.scene.view_render
+ return view_render.engine in cls.COMPAT_ENGINES
def draw(self, context):
layout = self.layout
@@ -68,8 +69,7 @@ class WORLD_PT_preview(WorldButtonsPanel, Panel):
@classmethod
def poll(cls, context):
- rd = context.scene.render
- return (context.world) and (rd.engine in cls.COMPAT_ENGINES)
+ return (context.world) and (context.engine in cls.COMPAT_ENGINES)
def draw(self, context):
self.layout.template_preview(context.world)
@@ -243,12 +243,73 @@ class WORLD_PT_mist(WorldButtonsPanel, Panel):
layout.prop(world.mist_settings, "falloff")
+class EEVEE_WORLD_PT_mist(WorldButtonsPanel, Panel):
+ bl_label = "Mist Pass"
+ bl_options = {'DEFAULT_CLOSED'}
+ COMPAT_ENGINES = {'BLENDER_EEVEE'}
+
+ @classmethod
+ def poll(cls, context):
+ engine = context.engine
+ if context.world and (engine in cls.COMPAT_ENGINES):
+ for view_layer in context.scene.view_layers:
+ if view_layer.use_pass_mist:
+ return True
+
+ return False
+
+ def draw(self, context):
+ layout = self.layout
+
+ world = context.world
+
+ split = layout.split(align=True)
+ split.prop(world.mist_settings, "start")
+ split.prop(world.mist_settings, "depth")
+
+ layout.prop(world.mist_settings, "falloff")
+
+
class WORLD_PT_custom_props(WorldButtonsPanel, PropertyPanel, Panel):
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_EEVEE'}
_context_path = "world"
_property_type = bpy.types.World
+class EEVEE_WORLD_PT_surface(WorldButtonsPanel, Panel):
+ bl_label = "Surface"
+ bl_context = "world"
+ COMPAT_ENGINES = {'BLENDER_EEVEE'}
+
+ @classmethod
+ def poll(cls, context):
+ engine = context.engine
+ return context.world and (engine in cls.COMPAT_ENGINES)
+
+ def draw(self, context):
+ layout = self.layout
+
+ world = context.world
+
+ layout.prop(world, "use_nodes", icon='NODETREE')
+ layout.separator()
+
+ if world.use_nodes:
+ ntree = world.node_tree
+ node = find_output_node(ntree, ('OUTPUT_WORLD',))
+
+ if node:
+ input = find_node_input(node, 'Surface')
+ if input:
+ layout.template_node_view(ntree, node, input)
+ else:
+ layout.label(text="Incompatible output node")
+ else:
+ layout.label(text="No output node")
+ else:
+ layout.prop(world, "horizon_color", text="Color")
+
+
classes = (
WORLD_PT_context_world,
WORLD_PT_preview,
@@ -259,6 +320,8 @@ classes = (
WORLD_PT_gather,
WORLD_PT_mist,
WORLD_PT_custom_props,
+ EEVEE_WORLD_PT_surface,
+ EEVEE_WORLD_PT_mist,
)
if __name__ == "__main__": # only for live edit.
diff --git a/release/scripts/startup/bl_ui/space_image.py b/release/scripts/startup/bl_ui/space_image.py
index 0f3583d2832..14ecb86e577 100644
--- a/release/scripts/startup/bl_ui/space_image.py
+++ b/release/scripts/startup/bl_ui/space_image.py
@@ -194,7 +194,7 @@ class IMAGE_MT_image(Menu):
show_render = sima.show_render
- layout.operator("image.read_renderlayers")
+ layout.operator("image.read_viewlayers")
layout.operator("image.save_dirty", text="Save All Images")
@@ -481,7 +481,7 @@ class IMAGE_HT_header(Header):
row.prop(toolsettings, "snap_target", text="")
mesh = context.edit_object.data
- layout.prop_search(mesh.uv_textures, "active", mesh, "uv_textures", text="")
+ layout.prop_search(mesh.uv_layers, "active", mesh, "uv_layers", text="")
if ima:
if ima.is_stereo_3d:
@@ -623,7 +623,7 @@ class IMAGE_PT_game_properties(Panel):
def poll(cls, context):
sima = context.space_data
# display even when not in game mode because these settings effect the 3d view
- return (sima and sima.image and not sima.show_maskedit) # and (rd.engine == 'BLENDER_GAME')
+ return (sima and sima.image and not sima.show_maskedit) # and (view_render.engine == 'BLENDER_GAME')
def draw(self, context):
layout = self.layout
@@ -1208,7 +1208,8 @@ class ImageScopesPanel:
if sima.mode == 'PAINT':
return False
ob = context.active_object
- if ob and ob.mode in {'TEXTURE_PAINT', 'EDIT'}:
+ workspace = context.workspace
+ if ob and workspace.object_mode in {'TEXTURE_PAINT', 'EDIT'}:
return False
return True
diff --git a/release/scripts/startup/bl_ui/space_info.py b/release/scripts/startup/bl_ui/space_info.py
index a7b518dfd2e..8c69e733a2d 100644
--- a/release/scripts/startup/bl_ui/space_info.py
+++ b/release/scripts/startup/bl_ui/space_info.py
@@ -28,25 +28,40 @@ class INFO_HT_header(Header):
layout = self.layout
window = context.window
+ workspace = context.workspace
+ screen = context.screen
scene = context.scene
- rd = scene.render
+ layer = context.view_layer
+ view_render = workspace.view_render
row = layout.row(align=True)
row.template_header()
INFO_MT_editor_menus.draw_collapsible(context, layout)
- if window.screen.show_fullscreen:
+ layout.separator()
+
+ if screen.show_fullscreen:
layout.operator("screen.back_to_previous", icon='SCREEN_BACK', text="Back to Previous")
layout.separator()
else:
- layout.template_ID(context.window, "screen", new="screen.new", unlink="screen.delete")
- layout.template_ID(context.screen, "scene", new="scene.new", unlink="scene.delete")
+ layout.template_ID(window, "workspace", new="workspace.workspace_add_menu", unlink="workspace.workspace_delete")
+ layout.template_search_preview(window, "screen", workspace, "screens", new="screen.new", unlink="screen.delete", rows=2, cols=6)
+
+ act_mode_item = bpy.types.WorkSpace.bl_rna.properties['object_mode'].enum_items[workspace.object_mode]
+ layout.operator_menu_enum("object.mode_set", "mode", text=act_mode_item.name, icon=act_mode_item.icon)
+
+ row = layout.row()
+ row.active = not workspace.use_scene_settings
+ # Active workspace view-layer is retrieved through window, not through workspace.
+ row.template_search(window, "view_layer", scene, "view_layers")
+
+ if view_render.has_multiple_engines:
+ row.prop(view_render, "engine", text="")
layout.separator()
- if rd.has_multiple_engines:
- layout.prop(rd, "engine", text="")
+ layout.template_ID(window, "scene", new="scene.new", unlink="scene.delete")
layout.separator()
@@ -69,7 +84,7 @@ class INFO_HT_header(Header):
return
row.operator("wm.splash", text="", icon='BLENDER', emboss=False)
- row.label(text=scene.statistics(), translate=False)
+ row.label(text=scene.statistics(workspace, context.view_layer), translate=False)
class INFO_MT_editor_menus(Menu):
@@ -81,12 +96,11 @@ class INFO_MT_editor_menus(Menu):
@staticmethod
def draw_menus(layout, context):
- scene = context.scene
- rd = scene.render
+ view_render = context.view_render
layout.menu("INFO_MT_file")
- if rd.use_game_engine:
+ if view_render.use_game_engine:
layout.menu("INFO_MT_game")
else:
layout.menu("INFO_MT_render")
@@ -293,7 +307,7 @@ class INFO_MT_window(Menu):
layout = self.layout
- layout.operator("wm.window_duplicate")
+ layout.operator("wm.window_new")
layout.operator("wm.window_fullscreen_toggle", icon='FULLSCREEN_ENTER')
layout.separator()
diff --git a/release/scripts/startup/bl_ui/space_node.py b/release/scripts/startup/bl_ui/space_node.py
index 8f7d8f7555a..2f98585f538 100644
--- a/release/scripts/startup/bl_ui/space_node.py
+++ b/release/scripts/startup/bl_ui/space_node.py
@@ -51,13 +51,14 @@ class NODE_HT_header(Header):
NODE_MT_editor_menus.draw_collapsible(context, layout)
layout.prop(snode, "tree_type", text="", expand=True)
+ use_shading_nodes = scene.view_render.use_shading_nodes or context.view_render.use_shading_nodes
if snode.tree_type == 'ShaderNodeTree':
- if scene.render.use_shading_nodes:
+ if use_shading_nodes:
layout.prop(snode, "shader_type", text="", expand=True)
ob = context.object
- if (not scene.render.use_shading_nodes or snode.shader_type == 'OBJECT') and ob:
+ if (not use_shading_nodes or snode.shader_type == 'OBJECT') and ob:
row = layout.row()
# disable material slot buttons when pinned, cannot find correct slot within id_from (#36589)
row.enabled = not snode.pin
@@ -69,19 +70,19 @@ class NODE_HT_header(Header):
row.template_ID(id_from, "active_material", new="material.new")
# Don't show "Use Nodes" Button when Engine is BI for Lamps
- if snode_id and not (scene.render.use_shading_nodes == 0 and ob.type == 'LAMP'):
+ if snode_id and not (use_shading_nodes == 0 and ob.type == 'LAMP'):
layout.prop(snode_id, "use_nodes")
- if scene.render.use_shading_nodes and snode.shader_type == 'WORLD':
+ if use_shading_nodes and snode.shader_type == 'WORLD':
row = layout.row()
row.enabled = not snode.pin
row.template_ID(scene, "world", new="world.new")
if snode_id:
row.prop(snode_id, "use_nodes")
- if scene.render.use_shading_nodes and snode.shader_type == 'LINESTYLE':
- rl = context.scene.render.layers.active
- lineset = rl.freestyle_settings.linesets.active
+ if use_shading_nodes and snode.shader_type == 'LINESTYLE':
+ view_layer = context.scene.view_layers.active
+ lineset = view_layer.freestyle_settings.linesets.active
if lineset is not None:
row = layout.row()
row.enabled = not snode.pin
@@ -271,7 +272,7 @@ class NODE_MT_node(Menu):
layout.separator()
- layout.operator("node.read_renderlayers")
+ layout.operator("node.read_viewlayers")
layout.operator("node.read_fullsamplelayers")
@@ -395,8 +396,7 @@ class NODE_PT_backdrop(Panel):
col = layout.column(align=True)
col.label(text="Offset:")
- col.prop(snode, "backdrop_x", text="X")
- col.prop(snode, "backdrop_y", text="Y")
+ col.prop(snode, "backdrop_offset", text="")
col.operator("node.backimage_move", text="Move")
layout.operator("node.backimage_fit", text="Fit")
diff --git a/release/scripts/startup/bl_ui/space_outliner.py b/release/scripts/startup/bl_ui/space_outliner.py
index 4951ef83ad0..6682e792d6c 100644
--- a/release/scripts/startup/bl_ui/space_outliner.py
+++ b/release/scripts/startup/bl_ui/space_outliner.py
@@ -28,8 +28,10 @@ class OUTLINER_HT_header(Header):
layout = self.layout
space = context.space_data
+ display_mode = space.display_mode
scene = context.scene
ks = context.scene.keying_sets.active
+ support_filters = display_mode in {'COLLECTIONS', 'VIEW_LAYER'}
row = layout.row(align=True)
row.template_header()
@@ -38,11 +40,9 @@ class OUTLINER_HT_header(Header):
layout.prop(space, "display_mode", text="")
- layout.prop(space, "filter_text", icon='VIEWZOOM', text="")
-
- layout.separator()
-
if space.display_mode == 'DATABLOCKS':
+ layout.separator()
+
row = layout.row(align=True)
row.operator("outliner.keyingset_add_selected", icon='ZOOMIN', text="")
row.operator("outliner.keyingset_remove_selected", icon='ZOOMOUT', text="")
@@ -57,8 +57,54 @@ class OUTLINER_HT_header(Header):
else:
row = layout.row()
row.label(text="No Keying Set Active")
- elif space.display_mode == 'ORPHAN_DATA':
- layout.operator("outliner.orphans_purge")
+
+ row = layout.row(align=True)
+ row.prop(space, "use_filter_search", text="")
+ if space.use_filter_search:
+ row.prop(space, "filter_text", text="")
+ row.prop(space, "use_filter_complete", text="")
+ row.prop(space, "use_filter_case_sensitive", text="")
+
+ if support_filters:
+ row.separator()
+
+ row.prop(space, "use_filters", text="")
+ if space.use_filters:
+ row.separator()
+ row.prop(space, "use_filter_collection", text="")
+ row.prop(space, "use_filter_object", text="")
+ sub = row.row(align=True)
+ sub.active = space.use_filter_object
+ sub.prop(space, "use_filter_object_content", text="")
+ sub.prop(space, "use_filter_children", text="")
+
+ sub.separator()
+ sub.prop(space, "use_filter_object_type", text="")
+
+ if space.use_filter_object_type:
+ if bpy.data.meshes:
+ sub.prop(space, "use_filter_object_mesh", text="")
+ if bpy.data.armatures:
+ sub.prop(space, "use_filter_object_armature", text="")
+ if bpy.data.lamps:
+ sub.prop(space, "use_filter_object_lamp", text="")
+ if bpy.data.cameras:
+ sub.prop(space, "use_filter_object_camera", text="")
+
+ sub.prop(space, "use_filter_object_empty", text="")
+
+ if bpy.data.curves or \
+ bpy.data.metaballs or \
+ bpy.data.lightprobes or \
+ bpy.data.lattices or \
+ bpy.data.fonts or bpy.data.speakers:
+ sub.prop(space, "use_filter_object_others", text="")
+
+ sub.separator()
+ sub.prop(space, "use_filter_object_state", text="")
+
+ if space.use_filter_object_state:
+ sub.prop(space, "filter_state", text="", expand=True)
class OUTLINER_MT_editor_menus(Menu):
@@ -73,11 +119,16 @@ class OUTLINER_MT_editor_menus(Menu):
space = context.space_data
layout.menu("OUTLINER_MT_view")
- layout.menu("OUTLINER_MT_search")
if space.display_mode == 'DATABLOCKS':
layout.menu("OUTLINER_MT_edit_datablocks")
+ elif space.display_mode == 'ORPHAN_DATA':
+ layout.menu("OUTLINER_MT_edit_orphan_data")
+
+ elif space.display_mode == 'VIEW_LAYER':
+ layout.menu("OUTLINER_MT_edit_view_layer")
+
class OUTLINER_MT_view(Menu):
bl_label = "View"
@@ -87,7 +138,7 @@ class OUTLINER_MT_view(Menu):
space = context.space_data
- if space.display_mode not in {'DATABLOCKS', 'USER_PREFERENCES'}:
+ if space.display_mode != 'DATABLOCKS':
layout.prop(space, "use_sort_alpha")
layout.prop(space, "show_restrict_columns")
layout.separator()
@@ -104,16 +155,14 @@ class OUTLINER_MT_view(Menu):
layout.operator("screen.screen_full_area", text="Toggle Fullscreen Area").use_hide_panels = True
-class OUTLINER_MT_search(Menu):
- bl_label = "Search"
+class OUTLINER_MT_edit_view_layer(Menu):
+ bl_label = "Edit"
def draw(self, context):
layout = self.layout
- space = context.space_data
-
- layout.prop(space, "use_filter_case_sensitive")
- layout.prop(space, "use_filter_complete")
+ layout.operator("outliner.collection_link", icon='LINKED')
+ layout.operator("outliner.collection_new", icon='NEW')
class OUTLINER_MT_edit_datablocks(Menu):
@@ -131,12 +180,85 @@ class OUTLINER_MT_edit_datablocks(Menu):
layout.operator("outliner.drivers_delete_selected")
+class OUTLINER_MT_edit_orphan_data(Menu):
+ bl_label = "Edit"
+
+ def draw(self, context):
+ layout = self.layout
+ layout.operator("outliner.orphans_purge")
+
+
+class OUTLINER_MT_context_scene_collection(Menu):
+ bl_label = "Collection"
+
+ def draw(self, context):
+ layout = self.layout
+
+ layout.operator("outliner.collection_nested_new", text="New Collection", icon='NEW')
+ layout.operator("outliner.collection_duplicate", text="Duplicate Collection")
+ layout.operator("outliner.collection_delete_selected", text="Delete Collections", icon='X')
+ layout.separator()
+ layout.operator("outliner.collection_objects_add", text="Add Selected", icon='ZOOMIN')
+ layout.operator("outliner.collection_objects_remove", text="Remove Selected", icon='ZOOMOUT')
+
+
+class OUTLINER_MT_context_object_select(Menu):
+ bl_label = "Object Operation Select"
+
+ def draw(self, context):
+ layout = self.layout
+
+ layout.operator("outliner.object_operation", text="Select").type='SELECT'
+ layout.operator("outliner.object_operation", text="Deselect").type='DESELECT'
+ layout.operator("outliner.object_operation", text="Select Hierarchy").type='SELECT_HIERARCHY'
+
+
+class OUTLINER_MT_context_object_delete(Menu):
+ bl_label = "Object Operation Delete"
+
+ def draw(self, context):
+ layout = self.layout
+
+ layout.operator("outliner.object_operation", text="Delete").type='DELETE'
+ layout.operator("outliner.object_operation", text="Delete Hierarchy").type='DELETE_HIERARCHY'
+
+
+class OUTLINER_MT_context_object_collection(Menu):
+ bl_label = "Object Operation Collection"
+
+ def draw(self, context):
+ layout = self.layout
+
+ layout.operator("outliner.object_add_to_new_collection", text="Add to New Collection", icon='ZOOMIN')
+ layout.operator("outliner.object_remove_from_collection", text="Remove from Collection", icon='ZOOMOUT')
+
+
+class OUTLINER_MT_context_object(Menu):
+ bl_label = "Object"
+
+ def draw(self, context):
+ layout = self.layout
+
+ layout.menu("OUTLINER_MT_context_object_select", text="Select")
+ layout.menu("OUTLINER_MT_context_object_delete", text="Delete")
+ layout.menu("OUTLINER_MT_context_object_collection", text="Collection")
+ layout.separator()
+ layout.operator("outliner.object_operation", text="Remap Users").type='REMAP'
+ layout.operator("outliner.object_operation", text="Rename").type='RENAME'
+
+
classes = (
OUTLINER_HT_header,
OUTLINER_MT_editor_menus,
OUTLINER_MT_view,
- OUTLINER_MT_search,
+ OUTLINER_MT_edit_view_layer,
OUTLINER_MT_edit_datablocks,
+ OUTLINER_MT_edit_orphan_data,
+ OUTLINER_MT_context_scene_collection,
+ OUTLINER_MT_context_object,
+ OUTLINER_MT_context_object_delete,
+ OUTLINER_MT_context_object_select,
+ OUTLINER_MT_context_object_collection,
)
if __name__ == "__main__": # only for live edit.
diff --git a/release/scripts/startup/bl_ui/space_toolsystem_common.py b/release/scripts/startup/bl_ui/space_toolsystem_common.py
new file mode 100644
index 00000000000..aff9a8d6170
--- /dev/null
+++ b/release/scripts/startup/bl_ui/space_toolsystem_common.py
@@ -0,0 +1,271 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# <pep8 compliant>
+import bpy
+from bpy.types import (
+ Menu,
+)
+
+__all__ = (
+ "ToolSelectPanelHelper",
+)
+
+
+class ToolSelectPanelHelper:
+ """
+ Generic Class, can be used for any toolbar.
+
+ - keymap_prefix:
+ The text prefix for each key-map for this spaces tools.
+ - tools_all():
+ Returns all tools defined.
+ - tools_from_context(context):
+ Returns tools available in this context.
+
+ Each tool is a triplet:
+ ``(tool_name, manipulator_group_idname, keymap_actions)``
+ For a separator in the toolbar, use ``None``.
+
+ Where:
+ ``tool_name``
+ is the name to display in the interface.
+ ``manipulator_group_idname``
+ is an optional manipulator group to activate when the tool is set.
+ ``keymap_actions``
+ an optional triple of: ``(operator_id, operator_properties, keymap_item_args)``
+ """
+
+ @staticmethod
+ def _tool_is_group(tool):
+ return type(tool[0]) is not str
+
+ @staticmethod
+ def _tools_flatten(tools):
+ for item in tools:
+ if item is not None:
+ if ToolSelectPanelHelper._tool_is_group(item):
+ for sub_item in item:
+ if sub_item is not None:
+ yield sub_item
+ else:
+ yield item
+
+ @classmethod
+ def _tool_vars_from_def(cls, item):
+ text, mp_idname, actions = item
+ km, km_idname = (None, None) if actions is None else cls._tool_keymap[text]
+ return (km_idname, mp_idname)
+
+ @staticmethod
+ def _tool_vars_from_active_with_index(context):
+ workspace = context.workspace
+ return (
+ (workspace.tool_keymap or None, workspace.tool_manipulator_group or None),
+ workspace.tool_index,
+ )
+
+ @staticmethod
+ def _tool_vars_from_button_with_index(context):
+ props = context.button_operator
+ return (
+ (props.keymap or None or None, props.manipulator_group or None),
+ props.index,
+ )
+
+ @classmethod
+ def _km_actionmouse_simple(cls, kc, text, actions):
+
+ # standalone
+ def props_assign_recursive(rna_props, py_props):
+ for prop_id, value in py_props.items():
+ if isinstance(value, dict):
+ props_assign_recursive(getattr(rna_props, prop_id), value)
+ else:
+ setattr(rna_props, prop_id, value)
+
+ km_idname = cls.keymap_prefix + text
+ km = kc.keymaps.get(km_idname)
+ if km is not None:
+ return km, km_idname
+ km = kc.keymaps.new(km_idname, space_type=cls.bl_space_type, region_type='WINDOW')
+ for op_idname, op_props_dict, kmi_kwargs in actions:
+ kmi = km.keymap_items.new(op_idname, **kmi_kwargs)
+ kmi_props = kmi.properties
+ if op_props_dict:
+ props_assign_recursive(kmi.properties, op_props_dict)
+ return km, km_idname
+
+ @classmethod
+ def register(cls):
+ wm = bpy.context.window_manager
+
+ # XXX, should we be manipulating the user-keyconfig on load?
+ # Perhaps this should only add when keymap items don't already exist.
+ #
+ # This needs some careful consideration.
+ kc = wm.keyconfigs.user
+
+ # {tool_name: (keymap, keymap_idname, manipulator_group_idname), ...}
+ cls._tool_keymap = {}
+
+ # Track which tool-group was last used for non-active groups.
+ # Blender stores the active tool-group index.
+ #
+ # {tool_name_first: index_in_group, ...}
+ cls._tool_group_active = {}
+
+ # ignore in background mode
+ if kc is None:
+ return
+
+ for item in ToolSelectPanelHelper._tools_flatten(cls.tools_all()):
+ text, mp_idname, actions = item
+ if actions is not None:
+ km, km_idname = cls._km_actionmouse_simple(kc, text, actions)
+ cls._tool_keymap[text] = km, km_idname
+
+ def draw(self, context):
+ # XXX, this UI isn't very nice.
+ # We might need to create new button types for this.
+ # Since we probably want:
+ # - tool-tips that include multiple key shortcuts.
+ # - ability to click and hold to expose sub-tools.
+
+ workspace = context.workspace
+ tool_def_active, index_active = self._tool_vars_from_active_with_index(context)
+ layout = self.layout
+
+ for tool_items in self.tools_from_context(context):
+ if tool_items:
+ col = layout.column(align=True)
+ for item in tool_items:
+ if item is None:
+ col = layout.column(align=True)
+ continue
+
+ if self._tool_is_group(item):
+ is_active = False
+ i = 0
+ for i, sub_item in enumerate(item):
+ if sub_item is None:
+ continue
+ tool_def = self._tool_vars_from_def(sub_item)
+ is_active = (tool_def == tool_def_active)
+ if is_active:
+ index = i
+ break
+ del i, sub_item
+
+ if is_active:
+ # not ideal, write this every time :S
+ self._tool_group_active[item[0][0]] = index
+ else:
+ index = self._tool_group_active.get(item[0][0], 0)
+
+ item = item[index]
+ use_menu = True
+ else:
+ index = -1
+ use_menu = False
+
+ tool_def = self._tool_vars_from_def(item)
+ is_active = (tool_def == tool_def_active)
+
+ if use_menu:
+ props = col.operator_menu_hold(
+ "wm.tool_set",
+ text=item[0],
+ depress=is_active,
+ menu="WM_MT_toolsystem_submenu",
+ )
+ else:
+ props = col.operator(
+ "wm.tool_set",
+ text=item[0],
+ depress=is_active,
+ )
+
+ props.keymap = tool_def[0] or ""
+ props.manipulator_group = tool_def[1] or ""
+ props.index = index
+
+ def tools_from_context(cls, context):
+ return (cls._tools[None], cls._tools.get(context.mode, ()))
+
+
+# The purpose of this menu is to be a generic popup to select between tools
+# in cases when a single tool allows to select alternative tools.
+class WM_MT_toolsystem_submenu(Menu):
+ bl_label = ""
+
+ @staticmethod
+ def _tool_group_from_button(context):
+ # Lookup the tool definitions based on the space-type.
+ space_type = context.space_data.type
+ cls = next(
+ (cls for cls in ToolSelectPanelHelper.__subclasses__()
+ if cls.bl_space_type == space_type),
+ None
+ )
+ if cls is not None:
+ tool_def_button, index_button = cls._tool_vars_from_button_with_index(context)
+
+ for item_items in cls.tools_from_context(context):
+ for item_group in item_items:
+ if (item_group is not None) and ToolSelectPanelHelper._tool_is_group(item_group):
+ if index_button < len(item_group):
+ item = item_group[index_button]
+ tool_def = cls._tool_vars_from_def(item)
+ is_active = (tool_def == tool_def_button)
+ if is_active:
+ return cls, item_group, index_button
+ return None, None, -1
+
+ def draw(self, context):
+ layout = self.layout
+ cls, item_group, index_active = self._tool_group_from_button(context)
+ if item_group is None:
+ # Should never happen, just in case
+ layout.label("Unable to find toolbar group")
+ return
+
+ index = 0
+ for item in item_group:
+ if item is None:
+ layout.separator()
+ continue
+ tool_def = cls._tool_vars_from_def(item)
+ props = layout.operator(
+ "wm.tool_set",
+ text=item[0],
+ )
+ props.keymap = tool_def[0] or ""
+ props.manipulator_group = tool_def[1] or ""
+ props.index = index
+ index += 1
+
+
+classes = (
+ WM_MT_toolsystem_submenu,
+)
+
+if __name__ == "__main__": # only for live edit.
+ from bpy.utils import register_class
+ for cls in classes:
+ register_class(cls)
diff --git a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
new file mode 100644
index 00000000000..88816a3ea9f
--- /dev/null
+++ b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
@@ -0,0 +1,171 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# <pep8 compliant>
+
+# For now group all tools together
+# we may want to move these into per space-type files.
+#
+# For now keep this in a single file since it's an area that may change,
+# so avoid making changes all over the place.
+
+from bpy.types import Panel
+
+from .space_toolsystem_common import (
+ ToolSelectPanelHelper,
+)
+
+
+class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel):
+ bl_space_type = 'VIEW_3D'
+ bl_region_type = 'TOOLS'
+ bl_category = "Tools"
+ bl_label = "Active Tool (Test)"
+ bl_options = {'DEFAULT_CLOSED'}
+
+ # Satisfy the 'ToolSelectPanelHelper' API.
+ keymap_prefix = "3D View Tool: "
+
+ @classmethod
+ def tools_from_context(cls, context):
+ return (cls._tools[None], cls._tools.get(context.mode, ()))
+
+ @classmethod
+ def tools_all(cls):
+ return [t for t_list in cls._tools.values() for t in t_list]
+
+ # Internal Data
+
+ # for reuse
+ _tools_transform = (
+ ("Translate", None,
+ (("transform.translate", dict(release_confirm=True), dict(type='EVT_TWEAK_A', value='ANY')),)),
+ ("Rotate", None,
+ (("transform.rotate", dict(release_confirm=True), dict(type='EVT_TWEAK_A', value='ANY')),)),
+ ("Scale", None,
+ (("transform.resize", dict(release_confirm=True), dict(type='EVT_TWEAK_A', value='ANY')),)),
+ ("Scale Cage", "VIEW3D_WGT_xform_cage", None),
+ None,
+ ("Ruler/Protractor", "VIEW3D_WGT_ruler",
+ (("view3d.ruler_add", dict(), dict(type='EVT_TWEAK_A', value='ANY')),)),
+ )
+
+ _tools = {
+ None: [
+ ("Cursor", None,
+ (("view3d.cursor3d", dict(), dict(type='ACTIONMOUSE', value='CLICK')),)),
+
+ # 'Select' Group
+ (
+ ("Select Border", None, (
+ ("view3d.select_border", dict(deselect=False), dict(type='EVT_TWEAK_A', value='ANY')),
+ ("view3d.select_border", dict(deselect=True), dict(type='EVT_TWEAK_A', value='ANY', ctrl=True)),
+ )),
+ ("Select Circle", None, (
+ ("view3d.select_circle", dict(deselect=False), dict(type='ACTIONMOUSE', value='PRESS')),
+ ("view3d.select_circle", dict(deselect=True), dict(type='ACTIONMOUSE', value='PRESS', ctrl=True)),
+ )),
+ ("Select Lasso", None, (
+ ("view3d.select_lasso",
+ dict(deselect=False), dict(type='EVT_TWEAK_A', value='ANY')),
+ ("view3d.select_lasso",
+ dict(deselect=True), dict(type='EVT_TWEAK_A', value='ANY', ctrl=True)),
+ )),
+ ),
+ # End group.
+ ],
+ 'OBJECT': [
+ *_tools_transform,
+ ],
+ 'POSE': [
+ *_tools_transform,
+ ],
+ 'EDIT_ARMATURE': [
+ *_tools_transform,
+ ("Roll", None, (
+ ("transform.transform",
+ dict(release_confirm=True, mode='BONE_ROLL'),
+ dict(type='EVT_TWEAK_A', value='ANY')),
+ )),
+ None,
+ ("Extrude Cursor", None,
+ (("armature.click_extrude", dict(), dict(type='ACTIONMOUSE', value='PRESS')),)),
+ ],
+ 'EDIT_MESH': [
+ *_tools_transform,
+ None,
+ ("Rip Region", None, (
+ ("mesh.rip_move", dict(TRANSFORM_OT_translate=dict(release_confirm=True)),
+ dict(type='ACTIONMOUSE', value='PRESS')),
+ )),
+ ("Rip Edge", None, (
+ ("mesh.rip_edge_move", dict(TRANSFORM_OT_translate=dict(release_confirm=True)),
+ dict(type='ACTIONMOUSE', value='PRESS')),
+ )),
+
+ ("Poly Build", None, (
+ ("mesh.polybuild_face_at_cursor_move",
+ dict(TRANSFORM_OT_translate=dict(release_confirm=True)),
+ dict(type='ACTIONMOUSE', value='PRESS')),
+ ("mesh.polybuild_split_at_cursor_move",
+ dict(TRANSFORM_OT_translate=dict(release_confirm=True)),
+ dict(type='ACTIONMOUSE', value='PRESS', ctrl=True)),
+ ("mesh.polybuild_dissolve_at_cursor", dict(), dict(type='ACTIONMOUSE', value='CLICK', alt=True)),
+ ("mesh.polybuild_hover", dict(use_boundary=False), dict(type='MOUSEMOVE', value='ANY', alt=True)),
+ ("mesh.polybuild_hover", dict(use_boundary=True), dict(type='MOUSEMOVE', value='ANY', any=True)),
+ )),
+
+ # Knife Group
+ (
+ ("Knife", None, (
+ ("mesh.knife_tool",
+ dict(wait_for_input=False, use_occlude_geometry=True, only_selected=False),
+ dict(type='ACTIONMOUSE', value='PRESS')),)),
+ ("Knife (Selected)", None, (
+ ("mesh.knife_tool",
+ dict(wait_for_input=False, use_occlude_geometry=False, only_selected=True),
+ dict(type='ACTIONMOUSE', value='PRESS')),)),
+ None,
+ ("Bisect", None, (
+ ("mesh.bisect",
+ dict(),
+ dict(type='EVT_TWEAK_A', value='ANY')),)),
+ ),
+ # End group.
+ ("Extrude Cursor", None,
+ (("mesh.dupli_extrude_cursor", dict(), dict(type='ACTIONMOUSE', value='PRESS')),)),
+ ],
+ 'EDIT_CURVE': [
+ *_tools_transform,
+ None,
+ ("Draw", None,
+ (("curve.draw", dict(wait_for_input=False), dict(type='ACTIONMOUSE', value='PRESS')),)),
+ ("Extrude Cursor", None,
+ (("curve.vertex_add", dict(), dict(type='ACTIONMOUSE', value='PRESS')),)),
+ ],
+ }
+
+
+classes = (
+ VIEW3D_PT_tools_active,
+)
+
+if __name__ == "__main__": # only for live edit.
+ from bpy.utils import register_class
+ for cls in classes:
+ register_class(cls)
diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py
index ce3d6fffbb3..6db538eacef 100644
--- a/release/scripts/startup/bl_ui/space_userpref.py
+++ b/release/scripts/startup/bl_ui/space_userpref.py
@@ -61,7 +61,9 @@ class USERPREF_HT_header(Header):
layout.operator_context = 'INVOKE_DEFAULT'
- if userpref.active_section == 'INPUT':
+ if userpref.active_section == 'INTERFACE':
+ layout.operator("wm.save_workspace_file")
+ elif userpref.active_section == 'INPUT':
layout.operator("wm.keyconfig_import")
layout.operator("wm.keyconfig_export")
elif userpref.active_section == 'ADDONS':
@@ -229,7 +231,6 @@ class USERPREF_PT_interface(Panel):
col.prop(view, "show_large_cursors")
col.prop(view, "show_view_name", text="View Name")
col.prop(view, "show_playback_fps", text="Playback FPS")
- col.prop(view, "use_global_scene")
col.prop(view, "object_origin_size")
col.separator()
@@ -290,11 +291,12 @@ class USERPREF_PT_interface(Panel):
#col.prop(view, "open_left_mouse_delay", text="Hold LMB")
#col.prop(view, "open_right_mouse_delay", text="Hold RMB")
col.prop(view, "show_manipulator")
+ col.prop(view, "show_manipulator_navigate")
+ ## Currently not working
+ # col.prop(view, "show_manipulator_shaded")
sub = col.column()
sub.active = view.show_manipulator
sub.prop(view, "manipulator_size", text="Size")
- sub.prop(view, "manipulator_handle_size", text="Handle Size")
- sub.prop(view, "manipulator_hotspot", text="Hotspot")
col.separator()
col.separator()
@@ -868,6 +870,7 @@ class USERPREF_PT_theme(Panel):
colsub.row().prop(ui_state, "inner_anim_sel")
colsub.row().prop(ui_state, "inner_driven")
colsub.row().prop(ui_state, "inner_driven_sel")
+ colsub.row().prop(ui_state, "blend")
subsplit = row.split(percentage=0.85)
@@ -876,7 +879,8 @@ class USERPREF_PT_theme(Panel):
colsub = padding.column()
colsub.row().prop(ui_state, "inner_key")
colsub.row().prop(ui_state, "inner_key_sel")
- colsub.row().prop(ui_state, "blend")
+ colsub.row().prop(ui_state, "inner_overridden")
+ colsub.row().prop(ui_state, "inner_overridden_sel")
col.separator()
col.separator()
@@ -918,7 +922,7 @@ class USERPREF_PT_theme(Panel):
col.separator()
col.separator()
- col.label("Axis Colors:")
+ col.label("Axis & Manipulator Colors:")
row = col.row()
@@ -936,9 +940,13 @@ class USERPREF_PT_theme(Panel):
padding = subsplit.split(percentage=0.15)
colsub = padding.column()
colsub = padding.column()
+ colsub.row().prop(ui, "manipulator_primary")
+ colsub.row().prop(ui, "manipulator_secondary")
+ colsub.row().prop(ui, "manipulator_a")
+ colsub.row().prop(ui, "manipulator_b")
- layout.separator()
- layout.separator()
+ col.separator()
+ col.separator()
elif theme.theme_area == 'BONE_COLOR_SETS':
col = split.column()
diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py
index fbda0df18a6..a4c452857f2 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -48,7 +48,7 @@ class VIEW3D_HT_header(Header):
layout.template_header_3D()
if obj:
- mode = obj.mode
+ mode = context.workspace.object_mode
# Particle edit
if mode == 'PARTICLE_EDIT':
row.prop(toolsettings.particle_edit, "select_mode", text="", expand=True)
@@ -301,6 +301,12 @@ class VIEW3D_MT_transform_object(VIEW3D_MT_transform_base):
layout.operator("object.randomize_transform")
layout.operator("object.align")
+ # TODO: there is a strange context bug here.
+ """
+ layout.operator_context = 'INVOKE_REGION_WIN'
+ layout.operator("object.transform_axis_target")
+ """
+
# Armature EditMode extensions to Transform menu
class VIEW3D_MT_transform_armature(VIEW3D_MT_transform_base):
@@ -311,8 +317,9 @@ class VIEW3D_MT_transform_armature(VIEW3D_MT_transform_base):
VIEW3D_MT_transform_base.draw(self, context)
# armature specific extensions follow...
+ workspace = context.workspace
obj = context.object
- if obj.type == 'ARMATURE' and obj.mode in {'EDIT', 'POSE'}:
+ if obj.type == 'ARMATURE' and workspace.object_mode in {'EDIT', 'POSE'}:
if obj.data.draw_type == 'BBONE':
layout.separator()
@@ -451,7 +458,6 @@ class VIEW3D_MT_view(Menu):
layout.operator("view3d.view_selected", text="View Selected (Quad View)").use_all_regions = True
layout.operator("view3d.view_all").center = False
- layout.operator("view3d.localview", text="View Global/Local")
layout.operator("view3d.view_persportho")
layout.separator()
@@ -664,12 +670,8 @@ class VIEW3D_MT_select_object(Menu):
layout.operator("object.select_all").action = 'TOGGLE'
layout.operator("object.select_all", text="Inverse").action = 'INVERT'
-
- layout.separator()
-
layout.operator("object.select_random", text="Random")
layout.operator("object.select_mirror", text="Mirror")
- layout.operator("object.select_by_layer", text="Select All by Layer")
layout.operator_menu_enum("object.select_by_type", "type", text="Select All by Type...")
layout.operator("object.select_camera", text="Select Camera")
@@ -1278,6 +1280,17 @@ class INFO_MT_lamp_add(Menu):
layout.operator_enum("object.lamp_add", "type")
+class INFO_MT_lightprobe_add(Menu):
+ bl_idname = "INFO_MT_lightprobe_add"
+ bl_label = "Light Probe"
+
+ def draw(self, context):
+ layout = self.layout
+
+ layout.operator_context = 'INVOKE_REGION_WIN'
+ layout.operator_enum("object.lightprobe_add", "type")
+
+
class INFO_MT_camera_add(Menu):
bl_idname = "INFO_MT_camera_add"
bl_label = "Camera"
@@ -1326,6 +1339,8 @@ class INFO_MT_add(Menu):
layout.menu("INFO_MT_lamp_add", icon='OUTLINER_OB_LAMP')
layout.separator()
+ layout.menu("INFO_MT_lightprobe_add")
+ layout.separator()
layout.operator_menu_enum("object.effector_add", "type", text="Force Field", icon='OUTLINER_OB_FORCE_FIELD')
layout.separator()
@@ -1384,8 +1399,6 @@ class VIEW3D_MT_object(Menu):
def draw(self, context):
layout = self.layout
- view = context.space_data
- is_local_view = (view.local_view is not None)
layout.menu("VIEW3D_MT_undo_redo")
@@ -1411,13 +1424,6 @@ class VIEW3D_MT_object(Menu):
layout.operator("object.duplicate_move")
layout.operator("object.duplicate_move_linked")
layout.operator("object.join")
- if is_local_view:
- layout.operator_context = 'EXEC_REGION_WIN'
- layout.operator("object.move_to_layer", text="Move out of Local View")
- layout.operator_context = 'INVOKE_REGION_WIN'
- else:
- layout.operator("object.move_to_layer", text="Move to Layer...")
-
layout.separator()
layout.menu("VIEW3D_MT_make_links", text="Make Links...")
layout.menu("VIEW3D_MT_object_relations")
@@ -1438,8 +1444,6 @@ class VIEW3D_MT_object(Menu):
layout.separator()
- layout.menu("VIEW3D_MT_object_showhide")
-
layout.operator_menu_enum("object.convert", "target")
@@ -1548,8 +1552,9 @@ class VIEW3D_MT_object_specials(Menu):
lamp = obj.data
layout.operator_context = 'INVOKE_REGION_WIN'
+ use_shading_nodes = context.view_render.use_shading_nodes
- if scene.render.use_shading_nodes:
+ if use_shading_nodes:
emission_node = None
if lamp.node_tree:
for node in lamp.node_tree.nodes:
@@ -1610,7 +1615,7 @@ class VIEW3D_MT_object_specials(Menu):
props.input_scale = -0.01
props.header_text = "Spot Blend: %.2f"
- if not scene.render.use_shading_nodes:
+ if not use_shading_nodes:
props = layout.operator("wm.context_modal_mouse", text="Clip Start")
props.data_path_iter = "selected_editable_objects"
props.data_path_item = "data.shadow_buffer_clip_start"
@@ -1755,20 +1760,6 @@ class VIEW3D_MT_object_quick_effects(Menu):
layout.operator("object.quick_fluid")
-class VIEW3D_MT_object_showhide(Menu):
- bl_label = "Show/Hide"
-
- def draw(self, context):
- layout = self.layout
-
- layout.operator("object.hide_view_clear", text="Show Hidden")
-
- layout.separator()
-
- layout.operator("object.hide_view_set", text="Hide Selected").unselected = False
- layout.operator("object.hide_view_set", text="Hide Unselected").unselected = True
-
-
class VIEW3D_MT_make_single_user(Menu):
bl_label = "Make Single User"
@@ -1965,7 +1956,10 @@ class VIEW3D_MT_vertex_group(Menu):
layout.operator("object.vertex_group_assign_new")
ob = context.active_object
- if ob.mode == 'EDIT' or (ob.mode == 'WEIGHT_PAINT' and ob.type == 'MESH' and ob.data.use_paint_mask_vertex):
+ workspace = context.workspace
+ if ((workspace.object_mode == 'EDIT') or
+ (workspace.object_mode == 'WEIGHT_PAINT' and ob.type == 'MESH' and ob.data.use_paint_mask_vertex)
+ ):
if ob.vertex_groups.active:
layout.separator()
@@ -3398,7 +3392,7 @@ class VIEW3D_PT_view3d_properties(Panel):
if lock_object:
if lock_object.type == 'ARMATURE':
col.prop_search(view, "lock_bone", lock_object.data,
- "edit_bones" if lock_object.mode == 'EDIT'
+ "edit_bones" if context.mode == 'EDIT_ARMATURE'
else "bones",
text="")
else:
@@ -3451,12 +3445,13 @@ class VIEW3D_PT_view3d_name(Panel):
def draw(self, context):
layout = self.layout
+ workspace = context.workspace
ob = context.active_object
row = layout.row()
row.label(text="", icon='OBJECT_DATA')
row.prop(ob, "name", text="")
- if ob.type == 'ARMATURE' and ob.mode in {'EDIT', 'POSE'}:
+ if ob.type == 'ARMATURE' and workspace.object_mode in {'EDIT', 'POSE'}:
bone = context.active_bone
if bone:
row = layout.row()
@@ -3485,6 +3480,9 @@ class VIEW3D_PT_view3d_display(Panel):
col.prop(view, "show_only_render")
col.prop(view, "show_world")
+ if context.mode in {'PAINT_WEIGHT', 'PAINT_VERTEX', 'PAINT_TEXTURE'}:
+ col.prop(view, "show_mode_shade_override")
+
col = layout.column()
display_all = not view.show_only_render
col.active = display_all
@@ -3568,56 +3566,6 @@ class VIEW3D_PT_view3d_stereo(Panel):
split.prop(view, "stereo_3d_volume_alpha", text="Alpha")
-class VIEW3D_PT_view3d_shading(Panel):
- bl_space_type = 'VIEW_3D'
- bl_region_type = 'UI'
- bl_label = "Shading"
-
- def draw(self, context):
- layout = self.layout
-
- view = context.space_data
- scene = context.scene
- gs = scene.game_settings
- obj = context.object
-
- col = layout.column()
-
- if not scene.render.use_shading_nodes:
- col.prop(gs, "material_mode", text="")
-
- if view.viewport_shade == 'SOLID':
- col.prop(view, "show_textured_solid")
- col.prop(view, "use_matcap")
- if view.use_matcap:
- col.template_icon_view(view, "matcap_icon")
- if view.viewport_shade == 'TEXTURED' or context.mode == 'PAINT_TEXTURE':
- if scene.render.use_shading_nodes or gs.material_mode != 'GLSL':
- col.prop(view, "show_textured_shadeless")
-
- col.prop(view, "show_backface_culling")
-
- if view.viewport_shade not in {'BOUNDBOX', 'WIREFRAME'}:
- if obj and obj.mode == 'EDIT':
- col.prop(view, "show_occlude_wire")
-
- fx_settings = view.fx_settings
-
- if view.viewport_shade not in {'BOUNDBOX', 'WIREFRAME'}:
- sub = col.column()
- sub.active = view.region_3d.view_perspective == 'CAMERA'
- sub.prop(fx_settings, "use_dof")
- col.prop(fx_settings, "use_ssao", text="Ambient Occlusion")
- if fx_settings.use_ssao:
- ssao_settings = fx_settings.ssao
- subcol = col.column(align=True)
- subcol.prop(ssao_settings, "factor")
- subcol.prop(ssao_settings, "distance_max")
- subcol.prop(ssao_settings, "attenuation")
- subcol.prop(ssao_settings, "samples")
- subcol.prop(ssao_settings, "color")
-
-
class VIEW3D_PT_view3d_motion_tracking(Panel):
bl_space_type = 'VIEW_3D'
bl_region_type = 'UI'
@@ -3784,113 +3732,6 @@ class VIEW3D_PT_view3d_curvedisplay(Panel):
col.prop(context.scene.tool_settings, "normal_size", text="Normal Size")
-class VIEW3D_PT_background_image(Panel):
- bl_space_type = 'VIEW_3D'
- bl_region_type = 'UI'
- bl_label = "Background Images"
- bl_options = {'DEFAULT_CLOSED'}
-
- def draw_header(self, context):
- view = context.space_data
-
- self.layout.prop(view, "show_background_images", text="")
-
- def draw(self, context):
- layout = self.layout
-
- view = context.space_data
- use_multiview = context.scene.render.use_multiview
-
- col = layout.column()
- col.operator("view3d.background_image_add", text="Add Image")
-
- for i, bg in enumerate(view.background_images):
- layout.active = view.show_background_images
- box = layout.box()
- row = box.row(align=True)
- row.prop(bg, "show_expanded", text="", emboss=False)
- if bg.source == 'IMAGE' and bg.image:
- row.prop(bg.image, "name", text="", emboss=False)
- elif bg.source == 'MOVIE_CLIP' and bg.clip:
- row.prop(bg.clip, "name", text="", emboss=False)
- else:
- row.label(text="Not Set")
-
- if bg.show_background_image:
- row.prop(bg, "show_background_image", text="", emboss=False, icon='RESTRICT_VIEW_OFF')
- else:
- row.prop(bg, "show_background_image", text="", emboss=False, icon='RESTRICT_VIEW_ON')
-
- row.operator("view3d.background_image_remove", text="", emboss=False, icon='X').index = i
-
- box.prop(bg, "view_axis", text="Axis")
-
- if bg.show_expanded:
- row = box.row()
- row.prop(bg, "source", expand=True)
-
- has_bg = False
- if bg.source == 'IMAGE':
- row = box.row()
- row.template_ID(bg, "image", open="image.open")
- if bg.image is not None:
- box.template_image(bg, "image", bg.image_user, compact=True)
- has_bg = True
-
- if use_multiview and bg.view_axis in {'CAMERA', 'ALL'}:
- box.prop(bg.image, "use_multiview")
-
- column = box.column()
- column.active = bg.image.use_multiview
-
- column.label(text="Views Format:")
- column.row().prop(bg.image, "views_format", expand=True)
-
- sub = column.box()
- sub.active = bg.image.views_format == 'STEREO_3D'
- sub.template_image_stereo_3d(bg.image.stereo_3d_format)
-
- elif bg.source == 'MOVIE_CLIP':
- box.prop(bg, "use_camera_clip")
-
- column = box.column()
- column.active = not bg.use_camera_clip
- column.template_ID(bg, "clip", open="clip.open")
-
- if bg.clip:
- column.template_movieclip(bg, "clip", compact=True)
-
- if bg.use_camera_clip or bg.clip:
- has_bg = True
-
- column = box.column()
- column.active = has_bg
- column.prop(bg.clip_user, "proxy_render_size", text="")
- column.prop(bg.clip_user, "use_render_undistorted")
-
- if has_bg:
- col = box.column()
- col.prop(bg, "opacity", slider=True)
- col.row().prop(bg, "draw_depth", expand=True)
-
- if bg.view_axis in {'CAMERA', 'ALL'}:
- col.row().prop(bg, "frame_method", expand=True)
-
- box = col.box()
- row = box.row()
- row.prop(bg, "offset_x", text="X")
- row.prop(bg, "offset_y", text="Y")
-
- row = box.row()
- row.prop(bg, "use_flip_x")
- row.prop(bg, "use_flip_y")
-
- row = box.row()
- if bg.view_axis != 'CAMERA':
- row.prop(bg, "rotation")
- row.prop(bg, "size")
-
-
class VIEW3D_PT_transform_orientations(Panel):
bl_space_type = 'VIEW_3D'
bl_region_type = 'UI'
@@ -3928,7 +3769,8 @@ class VIEW3D_PT_etch_a_ton(Panel):
def poll(cls, context):
scene = context.space_data
ob = context.active_object
- return scene and ob and ob.type == 'ARMATURE' and ob.mode == 'EDIT'
+ workspace = context.workspace
+ return scene and ob and (ob.type == 'ARMATURE') and (workspace.object_mode == 'EDIT')
def draw_header(self, context):
layout = self.layout
@@ -3984,7 +3826,8 @@ class VIEW3D_PT_context_properties(Panel):
def _active_context_member(context):
obj = context.object
if obj:
- mode = obj.mode
+ workspace = context.workspace
+ mode = workspace.object_mode
if mode == 'POSE':
return "active_pose_bone"
elif mode == 'EDIT' and obj.type == 'ARMATURE':
@@ -4060,6 +3903,7 @@ classes = (
INFO_MT_edit_armature_add,
INFO_MT_armature_add,
INFO_MT_lamp_add,
+ INFO_MT_lightprobe_add,
INFO_MT_camera_add,
INFO_MT_add,
VIEW3D_MT_undo_redo,
@@ -4074,7 +3918,6 @@ classes = (
VIEW3D_MT_object_group,
VIEW3D_MT_object_constraints,
VIEW3D_MT_object_quick_effects,
- VIEW3D_MT_object_showhide,
VIEW3D_MT_make_single_user,
VIEW3D_MT_make_links,
VIEW3D_MT_object_game,
@@ -4145,12 +3988,10 @@ classes = (
VIEW3D_PT_view3d_name,
VIEW3D_PT_view3d_display,
VIEW3D_PT_view3d_stereo,
- VIEW3D_PT_view3d_shading,
VIEW3D_PT_view3d_motion_tracking,
VIEW3D_PT_view3d_meshdisplay,
VIEW3D_PT_view3d_meshstatvis,
VIEW3D_PT_view3d_curvedisplay,
- VIEW3D_PT_background_image,
VIEW3D_PT_transform_orientations,
VIEW3D_PT_etch_a_ton,
VIEW3D_PT_context_properties,
diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
index 19cba5af4ee..7a3b0f26edc 100644
--- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
@@ -1199,7 +1199,7 @@ class TEXTURE_UL_texpaintslots(UIList):
if self.layout_type in {'DEFAULT', 'COMPACT'}:
layout.prop(item, "name", text="", emboss=False, icon_value=icon)
- if (not mat.use_nodes) and context.scene.render.engine in {'BLENDER_RENDER', 'BLENDER_GAME'}:
+ if (not mat.use_nodes) and context.engine in {'BLENDER_RENDER', 'BLENDER_GAME'}:
mtex_index = mat.texture_paint_slots[index].index
layout.prop(mat, "use_textures", text="", index=mtex_index)
elif self.layout_type == 'GRID':
@@ -1213,9 +1213,9 @@ class VIEW3D_MT_tools_projectpaint_uvlayer(Menu):
def draw(self, context):
layout = self.layout
- for i, tex in enumerate(context.active_object.data.uv_textures):
- props = layout.operator("wm.context_set_int", text=tex.name, translate=False)
- props.data_path = "active_object.data.uv_textures.active_index"
+ for i, uv_layer in enumerate(context.active_object.data.uv_layers):
+ props = layout.operator("wm.context_set_int", text=uv_layer.name, translate=False)
+ props.data_path = "active_object.data.uv_layers.active_index"
props.value = i
@@ -1262,7 +1262,7 @@ class VIEW3D_PT_slots_projectpaint(View3DPanel, Panel):
else:
slot = None
- if (not mat.use_nodes) and context.scene.render.engine in {'BLENDER_RENDER', 'BLENDER_GAME'}:
+ if (not mat.use_nodes) and context.engine in {'BLENDER_RENDER', 'BLENDER_GAME'}:
row = col.row(align=True)
row.operator_menu_enum("paint.add_texture_paint_slot", "type")
row.operator("paint.delete_texture_paint_slot", text="", icon='X')
@@ -1273,11 +1273,11 @@ class VIEW3D_PT_slots_projectpaint(View3DPanel, Panel):
if slot and slot.index != -1:
col.label("UV Map:")
- col.prop_search(slot, "uv_layer", ob.data, "uv_textures", text="")
+ col.prop_search(slot, "uv_layer", ob.data, "uv_layers", text="")
elif settings.mode == 'IMAGE':
mesh = ob.data
- uv_text = mesh.uv_textures.active.name if mesh.uv_textures.active else ""
+ uv_text = mesh.uv_layers.active.name if mesh.uv_layers.active else ""
col.label("Canvas Image:")
# todo this should be combinded into a single row
col.template_ID(settings, "canvas", open="image.open")
@@ -1315,8 +1315,8 @@ class VIEW3D_PT_stencil_projectpaint(View3DPanel, Panel):
col = layout.column()
col.active = ipaint.use_stencil_layer
- stencil_text = mesh.uv_texture_stencil.name if mesh.uv_texture_stencil else ""
- col.label("UV Map:")
+ stencil_text = mesh.uv_layer_stencil.name if mesh.uv_layer_stencil else ""
+ col.label("UV Map")
col.menu("VIEW3D_MT_tools_projectpaint_stencil", text=stencil_text, translate=False)
col.label("Stencil Image:")
@@ -1929,9 +1929,9 @@ class VIEW3D_MT_tools_projectpaint_stencil(Menu):
def draw(self, context):
layout = self.layout
- for i, tex in enumerate(context.active_object.data.uv_textures):
- props = layout.operator("wm.context_set_int", text=tex.name, translate=False)
- props.data_path = "active_object.data.uv_texture_stencil_index"
+ for i, uv_layer in enumerate(context.active_object.data.uv_layers):
+ props = layout.operator("wm.context_set_int", text=uv_layer.name, translate=False)
+ props.data_path = "active_object.data.uv_layer_stencil_index"
props.value = i
@@ -2051,7 +2051,7 @@ class VIEW3D_PT_tools_history(View3DPanel, Panel):
row = col.row(align=True)
row.operator("ed.undo")
row.operator("ed.redo")
- if obj is None or obj.mode != 'SCULPT':
+ if obj is None or workspace.object_mode != 'SCULPT':
# Sculpt mode does not generate an undo menu it seems...
col.operator("ed.undo_history")
diff --git a/release/scripts/startup/keyingsets_builtins.py b/release/scripts/startup/keyingsets_builtins.py
index 390c043bb31..0a6ece6eb5a 100644
--- a/release/scripts/startup/keyingsets_builtins.py
+++ b/release/scripts/startup/keyingsets_builtins.py
@@ -388,8 +388,9 @@ class BUILTIN_KSI_WholeCharacter(KeyingSetInfo):
# poll - pose-mode on active object only
def poll(ksi, context):
- return ((context.active_object) and (context.active_object.pose) and
- (context.active_object.mode == 'POSE'))
+ workspace = context.workspace
+ ob = context.active_object
+ return (ob and ob.pose and (workspace.object_mode == 'POSE'))
# iterator - all bones regardless of selection
def iterator(ksi, context, ks):
diff --git a/release/scripts/startup/nodeitems_builtins.py b/release/scripts/startup/nodeitems_builtins.py
index c433850cac4..dc8462f1af1 100644
--- a/release/scripts/startup/nodeitems_builtins.py
+++ b/release/scripts/startup/nodeitems_builtins.py
@@ -47,14 +47,14 @@ class ShaderNewNodeCategory(SortedNodeCategory):
@classmethod
def poll(cls, context):
return (context.space_data.tree_type == 'ShaderNodeTree' and
- context.scene.render.use_shading_nodes)
+ context.view_render.use_shading_nodes)
class ShaderOldNodeCategory(SortedNodeCategory):
@classmethod
def poll(cls, context):
return (context.space_data.tree_type == 'ShaderNodeTree' and
- not context.scene.render.use_shading_nodes)
+ not context.view_render.use_shading_nodes)
class TextureNodeCategory(SortedNodeCategory):
@@ -141,6 +141,34 @@ def object_shader_nodes_poll(context):
snode.shader_type == 'OBJECT')
+def cycles_shader_nodes_poll(context):
+ return context.view_render.engine == 'CYCLES'
+
+
+def eevee_shader_nodes_poll(context):
+ return context.view_render.engine == 'BLENDER_EEVEE'
+
+
+def eevee_cycles_shader_nodes_poll(context):
+ return (cycles_shader_nodes_poll(context) or
+ eevee_shader_nodes_poll(context))
+
+
+def object_cycles_shader_nodes_poll(context):
+ return (object_shader_nodes_poll(context) and
+ cycles_shader_nodes_poll(context))
+
+
+def object_eevee_shader_nodes_poll(context):
+ return (object_shader_nodes_poll(context) and
+ eevee_shader_nodes_poll(context))
+
+
+def object_eevee_cycles_shader_nodes_poll(context):
+ return (object_shader_nodes_poll(context) and
+ eevee_cycles_shader_nodes_poll(context))
+
+
# All standard node categories currently used in nodes.
shader_node_categories = [
@@ -217,33 +245,34 @@ shader_node_categories = [
NodeItem("NodeGroupInput", poll=group_input_output_item_poll),
]),
ShaderNewNodeCategory("SH_NEW_OUTPUT", "Output", items=[
- NodeItem("ShaderNodeOutputMaterial", poll=object_shader_nodes_poll),
- NodeItem("ShaderNodeOutputLamp", poll=object_shader_nodes_poll),
+ NodeItem("ShaderNodeOutputMaterial", poll=object_eevee_cycles_shader_nodes_poll),
+ NodeItem("ShaderNodeOutputLamp", poll=object_cycles_shader_nodes_poll),
NodeItem("ShaderNodeOutputWorld", poll=world_shader_nodes_poll),
NodeItem("ShaderNodeOutputLineStyle", poll=line_style_shader_nodes_poll),
NodeItem("NodeGroupOutput", poll=group_input_output_item_poll),
]),
ShaderNewNodeCategory("SH_NEW_SHADER", "Shader", items=[
- NodeItem("ShaderNodeMixShader"),
- NodeItem("ShaderNodeAddShader"),
- NodeItem("ShaderNodeBsdfDiffuse", poll=object_shader_nodes_poll),
- NodeItem("ShaderNodeBsdfPrincipled", poll=object_shader_nodes_poll),
- NodeItem("ShaderNodeBsdfGlossy", poll=object_shader_nodes_poll),
- NodeItem("ShaderNodeBsdfTransparent", poll=object_shader_nodes_poll),
- NodeItem("ShaderNodeBsdfRefraction", poll=object_shader_nodes_poll),
- NodeItem("ShaderNodeBsdfGlass", poll=object_shader_nodes_poll),
- NodeItem("ShaderNodeBsdfTranslucent", poll=object_shader_nodes_poll),
- NodeItem("ShaderNodeBsdfAnisotropic", poll=object_shader_nodes_poll),
- NodeItem("ShaderNodeBsdfVelvet", poll=object_shader_nodes_poll),
- NodeItem("ShaderNodeBsdfToon", poll=object_shader_nodes_poll),
- NodeItem("ShaderNodeSubsurfaceScattering", poll=object_shader_nodes_poll),
- NodeItem("ShaderNodeEmission", poll=object_shader_nodes_poll),
- NodeItem("ShaderNodeBsdfHair", poll=object_shader_nodes_poll),
+ NodeItem("ShaderNodeMixShader", poll=eevee_cycles_shader_nodes_poll),
+ NodeItem("ShaderNodeAddShader", poll=eevee_cycles_shader_nodes_poll),
+ NodeItem("ShaderNodeBsdfDiffuse", poll=object_eevee_cycles_shader_nodes_poll),
+ NodeItem("ShaderNodeBsdfPrincipled", poll=object_eevee_cycles_shader_nodes_poll),
+ NodeItem("ShaderNodeBsdfGlossy", poll=object_eevee_cycles_shader_nodes_poll),
+ NodeItem("ShaderNodeBsdfTransparent", poll=object_eevee_cycles_shader_nodes_poll),
+ NodeItem("ShaderNodeBsdfRefraction", poll=object_eevee_cycles_shader_nodes_poll),
+ NodeItem("ShaderNodeBsdfGlass", poll=object_eevee_cycles_shader_nodes_poll),
+ NodeItem("ShaderNodeBsdfTranslucent", poll=object_cycles_shader_nodes_poll),
+ NodeItem("ShaderNodeBsdfAnisotropic", poll=object_cycles_shader_nodes_poll),
+ NodeItem("ShaderNodeBsdfVelvet", poll=object_cycles_shader_nodes_poll),
+ NodeItem("ShaderNodeBsdfToon", poll=object_cycles_shader_nodes_poll),
+ NodeItem("ShaderNodeSubsurfaceScattering", poll=object_eevee_cycles_shader_nodes_poll),
+ NodeItem("ShaderNodeEmission", poll=object_eevee_cycles_shader_nodes_poll),
+ NodeItem("ShaderNodeBsdfHair", poll=object_cycles_shader_nodes_poll),
NodeItem("ShaderNodeBackground", poll=world_shader_nodes_poll),
- NodeItem("ShaderNodeAmbientOcclusion", poll=object_shader_nodes_poll),
- NodeItem("ShaderNodeHoldout", poll=object_shader_nodes_poll),
- NodeItem("ShaderNodeVolumeAbsorption"),
- NodeItem("ShaderNodeVolumeScatter"),
+ NodeItem("ShaderNodeAmbientOcclusion", poll=object_cycles_shader_nodes_poll),
+ NodeItem("ShaderNodeHoldout", poll=object_cycles_shader_nodes_poll),
+ NodeItem("ShaderNodeVolumeAbsorption", poll=eevee_cycles_shader_nodes_poll),
+ NodeItem("ShaderNodeVolumeScatter", poll=eevee_cycles_shader_nodes_poll),
+ NodeItem("ShaderNodeEeveeSpecular", poll=object_eevee_shader_nodes_poll),
]),
ShaderNewNodeCategory("SH_NEW_TEXTURE", "Texture", items=[
NodeItem("ShaderNodeTexImage"),
diff --git a/release/scripts/templates_py/batch_export.py b/release/scripts/templates_py/batch_export.py
index 6c77c5d6a1a..8de7a5e2903 100644
--- a/release/scripts/templates_py/batch_export.py
+++ b/release/scripts/templates_py/batch_export.py
@@ -18,7 +18,7 @@ bpy.ops.object.select_all(action='DESELECT')
for obj in selection:
- obj.select = True
+ obj.select_set(action='SELECT')
# some exporters only use the active object
scene.objects.active = obj
@@ -31,7 +31,7 @@ for obj in selection:
## Can be used for multiple formats
# bpy.ops.export_scene.x3d(filepath=fn + ".x3d", use_selection=True)
- obj.select = False
+ obj.select_set(action='DESELECT')
print("written:", fn)
@@ -39,4 +39,4 @@ for obj in selection:
scene.objects.active = obj_active
for obj in selection:
- obj.select = True
+ obj.select_set(action='SELECT')
diff --git a/release/scripts/templates_py/manipulator_custom_geometry.py b/release/scripts/templates_py/manipulator_custom_geometry.py
new file mode 100644
index 00000000000..48bb6956f85
--- /dev/null
+++ b/release/scripts/templates_py/manipulator_custom_geometry.py
@@ -0,0 +1,158 @@
+# Example of a custom widget that defines it's own geometry.
+#
+# Usage: Select a lamp in the 3D view and drag the arrow at it's rear
+# to change it's energy value.
+#
+import bpy
+from bpy.types import (
+ Manipulator,
+ ManipulatorGroup,
+)
+
+# Coordinates (each one is a triangle).
+custom_shape_verts = (
+ (3.0, 1.0, -1.0), (2.0, 2.0, -1.0), (3.0, 3.0, -1.0),
+ (1.0, 3.0, 1.0), (3.0, 3.0, -1.0), (1.0, 3.0, -1.0),
+ (3.0, 3.0, 1.0), (3.0, 1.0, -1.0), (3.0, 3.0, -1.0),
+ (2.0, 0.0, 1.0), (3.0, 1.0, -1.0), (3.0, 1.0, 1.0),
+ (2.0, 0.0, -1.0), (2.0, 2.0, 1.0), (2.0, 2.0, -1.0),
+ (2.0, 2.0, -1.0), (0.0, 2.0, 1.0), (0.0, 2.0, -1.0),
+ (1.0, 3.0, 1.0), (2.0, 2.0, 1.0), (3.0, 3.0, 1.0),
+ (0.0, 2.0, -1.0), (1.0, 3.0, 1.0), (1.0, 3.0, -1.0),
+ (2.0, 2.0, 1.0), (3.0, 1.0, 1.0), (3.0, 3.0, 1.0),
+ (2.0, 2.0, -1.0), (1.0, 3.0, -1.0), (3.0, 3.0, -1.0),
+ (-3.0, -1.0, -1.0), (-2.0, -2.0, -1.0), (-3.0, -3.0, -1.0),
+ (-1.0, -3.0, 1.0), (-3.0, -3.0, -1.0), (-1.0, -3.0, -1.0),
+ (-3.0, -3.0, 1.0), (-3.0, -1.0, -1.0), (-3.0, -3.0, -1.0),
+ (-2.0, 0.0, 1.0), (-3.0, -1.0, -1.0), (-3.0, -1.0, 1.0),
+ (-2.0, 0.0, -1.0), (-2.0, -2.0, 1.0), (-2.0, -2.0, -1.0),
+ (-2.0, -2.0, -1.0), (0.0, -2.0, 1.0), (0.0, -2.0, -1.0),
+ (-1.0, -3.0, 1.0), (-2.0, -2.0, 1.0), (-3.0, -3.0, 1.0),
+ (0.0, -2.0, -1.0), (-1.0, -3.0, 1.0), (-1.0, -3.0, -1.0),
+ (-2.0, -2.0, 1.0), (-3.0, -1.0, 1.0), (-3.0, -3.0, 1.0),
+ (-2.0, -2.0, -1.0), (-1.0, -3.0, -1.0), (-3.0, -3.0, -1.0),
+ (1.0, -1.0, 0.0), (-1.0, -1.0, 0.0), (0.0, 0.0, -5.0),
+ (-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (0.0, 0.0, 5.0),
+ (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (0.0, 0.0, 5.0),
+ (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0), (0.0, 0.0, 5.0),
+ (-1.0, 1.0, 0.0), (-1.0, -1.0, 0.0), (0.0, 0.0, 5.0),
+ (-1.0, -1.0, 0.0), (-1.0, 1.0, 0.0), (0.0, 0.0, -5.0),
+ (-1.0, 1.0, 0.0), (1.0, 1.0, 0.0), (0.0, 0.0, -5.0),
+ (1.0, 1.0, 0.0), (1.0, -1.0, 0.0), (0.0, 0.0, -5.0),
+ (3.0, 1.0, -1.0), (2.0, 0.0, -1.0), (2.0, 2.0, -1.0),
+ (1.0, 3.0, 1.0), (3.0, 3.0, 1.0), (3.0, 3.0, -1.0),
+ (3.0, 3.0, 1.0), (3.0, 1.0, 1.0), (3.0, 1.0, -1.0),
+ (2.0, 0.0, 1.0), (2.0, 0.0, -1.0), (3.0, 1.0, -1.0),
+ (2.0, 0.0, -1.0), (2.0, 0.0, 1.0), (2.0, 2.0, 1.0),
+ (2.0, 2.0, -1.0), (2.0, 2.0, 1.0), (0.0, 2.0, 1.0),
+ (1.0, 3.0, 1.0), (0.0, 2.0, 1.0), (2.0, 2.0, 1.0),
+ (0.0, 2.0, -1.0), (0.0, 2.0, 1.0), (1.0, 3.0, 1.0),
+ (2.0, 2.0, 1.0), (2.0, 0.0, 1.0), (3.0, 1.0, 1.0),
+ (2.0, 2.0, -1.0), (0.0, 2.0, -1.0), (1.0, 3.0, -1.0),
+ (-3.0, -1.0, -1.0), (-2.0, 0.0, -1.0), (-2.0, -2.0, -1.0),
+ (-1.0, -3.0, 1.0), (-3.0, -3.0, 1.0), (-3.0, -3.0, -1.0),
+ (-3.0, -3.0, 1.0), (-3.0, -1.0, 1.0), (-3.0, -1.0, -1.0),
+ (-2.0, 0.0, 1.0), (-2.0, 0.0, -1.0), (-3.0, -1.0, -1.0),
+ (-2.0, 0.0, -1.0), (-2.0, 0.0, 1.0), (-2.0, -2.0, 1.0),
+ (-2.0, -2.0, -1.0), (-2.0, -2.0, 1.0), (0.0, -2.0, 1.0),
+ (-1.0, -3.0, 1.0), (0.0, -2.0, 1.0), (-2.0, -2.0, 1.0),
+ (0.0, -2.0, -1.0), (0.0, -2.0, 1.0), (-1.0, -3.0, 1.0),
+ (-2.0, -2.0, 1.0), (-2.0, 0.0, 1.0), (-3.0, -1.0, 1.0),
+ (-2.0, -2.0, -1.0), (0.0, -2.0, -1.0), (-1.0, -3.0, -1.0),
+)
+
+
+class MyCustomShapeWidget(Manipulator):
+ bl_idname = "VIEW3D_WT_auto_facemap"
+ bl_target_properties = (
+ {"id": "offset", "type": 'FLOAT', "array_length": 1},
+ )
+
+ __slots__ = (
+ "custom_shape",
+ "init_mouse_y",
+ "init_value",
+ )
+
+ def _update_offset_matrix(self):
+ # offset behind the lamp
+ self.matrix_offset.col[3][2] = self.target_get_value("offset") / -10.0
+
+ def draw(self, context):
+ self._update_offset_matrix()
+ self.draw_custom_shape(self.custom_shape)
+
+ def draw_select(self, context, select_id):
+ self._update_offset_matrix()
+ self.draw_custom_shape(self.custom_shape, select_id=select_id)
+
+ def setup(self):
+ if not hasattr(self, "custom_shape"):
+ self.custom_shape = self.new_custom_shape('TRIS', custom_shape_verts)
+
+ def invoke(self, context, event):
+ self.init_mouse_y = event.mouse_y
+ self.init_value = self.target_get_value("offset")
+ return {'RUNNING_MODAL'}
+
+ def exit(self, context, cancel):
+ context.area.header_text_set()
+ if cancel:
+ self.target_set_value("offset", self.init_value)
+
+ def modal(self, context, event, tweak):
+ delta = (event.mouse_y - self.init_mouse_y) / 10.0
+ if 'SNAP' in tweak:
+ delta = round(delta)
+ if 'PRECISE' in tweak:
+ delta /= 10.0
+ value = self.init_value + delta
+ self.target_set_value("offset", value)
+ context.area.header_text_set("My Manipulator: %.4f" % value)
+ return {'RUNNING_MODAL'}
+
+
+class MyCustomShapeWidgetGroup(ManipulatorGroup):
+ bl_idname = "OBJECT_WGT_lamp_test"
+ bl_label = "Test Lamp Widget"
+ bl_space_type = 'VIEW_3D'
+ bl_region_type = 'WINDOW'
+ bl_options = {'3D', 'PERSISTENT'}
+
+ @classmethod
+ def poll(cls, context):
+ ob = context.object
+ return (ob and ob.type == 'LAMP')
+
+ def setup(self, context):
+ # Assign the 'offset' target property to the lamp energy.
+ ob = context.object
+ mpr = self.manipulators.new(MyCustomShapeWidget.bl_idname)
+ mpr.target_set_prop("offset", ob.data, "energy")
+ mpr.matrix_basis = ob.matrix_world.normalized()
+
+ mpr.color = 1.0, 0.5, 1.0
+ mpr.alpha = 0.5
+
+ mpr.color_highlight = 1.0, 1.0, 1.0
+ mpr.alpha_highlight = 0.5
+
+ # units are large, so shrink to something more reasonable.
+ mpr.scale_basis = 0.1
+ mpr.use_draw_modal = True
+
+ self.energy_widget = mpr
+
+ def refresh(self, context):
+ ob = context.object
+ mpr = self.energy_widget
+ mpr.matrix_basis = ob.matrix_world.normalized()
+
+
+classes = (
+ MyCustomShapeWidget,
+ MyCustomShapeWidgetGroup,
+)
+
+for cls in classes:
+ bpy.utils.register_class(cls)
diff --git a/release/scripts/templates_py/manipulator_operator.py b/release/scripts/templates_py/manipulator_operator.py
new file mode 100644
index 00000000000..c16de53e694
--- /dev/null
+++ b/release/scripts/templates_py/manipulator_operator.py
@@ -0,0 +1,231 @@
+# Example of an operator which uses manipulators to control its properties.
+#
+# Usage: Run this script, then in mesh edit-mode press Spacebar
+# to activate the operator "Select Side of Plane"
+# The manipulators can then be used to adjust the plane in the 3D view.
+#
+import bpy
+import bmesh
+
+from bpy.types import (
+ Operator,
+ ManipulatorGroup,
+)
+
+from bpy.props import (
+ FloatVectorProperty,
+)
+
+def main(context, plane_co, plane_no):
+ obj = context.active_object
+ matrix = obj.matrix_world.copy()
+ me = obj.data
+ bm = bmesh.from_edit_mesh(me)
+
+ plane_dot = plane_no.dot(plane_co)
+
+ for v in bm.verts:
+ co = matrix * v.co
+ v.select = (plane_no.dot(co) > plane_dot)
+ bm.select_flush_mode()
+
+ bmesh.update_edit_mesh(me)
+
+
+class SelectSideOfPlane(Operator):
+ """UV Operator description"""
+ bl_idname = "mesh.select_side_of_plane"
+ bl_label = "Select Side of Plane"
+ bl_options = {'REGISTER', 'UNDO'}
+
+ plane_co = FloatVectorProperty(
+ size=3,
+ default=(0, 0, 0),
+ )
+ plane_no = FloatVectorProperty(
+ size=3,
+ default=(0, 0, 1),
+ )
+
+ @classmethod
+ def poll(cls, context):
+ return (context.mode == 'EDIT_MESH')
+
+ def invoke(self, context, event):
+
+ if not self.properties.is_property_set("plane_co"):
+ self.plane_co = context.scene.cursor_location
+
+ if not self.properties.is_property_set("plane_no"):
+ if context.space_data.type == 'VIEW_3D':
+ rv3d = context.space_data.region_3d
+ view_inv = rv3d.view_matrix.to_3x3()
+ # view y axis
+ self.plane_no = view_inv[1].normalized()
+
+ self.execute(context)
+
+ if context.space_data.type == 'VIEW_3D':
+ wm = context.window_manager
+ wm.manipulator_group_type_add(SelectSideOfPlaneManipulatorGroup.bl_idname)
+
+ return {'FINISHED'}
+
+ def execute(self, context):
+ from mathutils import Vector
+ main(context, Vector(self.plane_co), Vector(self.plane_no))
+ return {'FINISHED'}
+
+
+# Manipulators for plane_co, plane_no
+class SelectSideOfPlaneManipulatorGroup(ManipulatorGroup):
+ bl_idname = "MESH_WGT_select_side_of_plane"
+ bl_label = "Side of Plane Manipulator"
+ bl_space_type = 'VIEW_3D'
+ bl_region_type = 'WINDOW'
+ bl_options = {'3D'}
+
+ # Helper functions
+ @staticmethod
+ def my_target_operator(context):
+ wm = context.window_manager
+ op = wm.operators[-1] if wm.operators else None
+ if isinstance(op, SelectSideOfPlane):
+ return op
+ return None
+
+ @staticmethod
+ def my_view_orientation(context):
+ rv3d = context.space_data.region_3d
+ view_inv = rv3d.view_matrix.to_3x3()
+ return view_inv.normalized()
+
+ @classmethod
+ def poll(cls, context):
+ op = cls.my_target_operator(context)
+ if op is None:
+ wm = context.window_manager
+ wm.manipulator_group_type_remove(SelectSideOfPlaneManipulatorGroup.bl_idname)
+ return False
+ return True
+
+ def setup(self, context):
+ from mathutils import Matrix, Vector
+
+ # ----
+ # Grab
+
+ def grab_get_cb():
+ op = SelectSideOfPlaneManipulatorGroup.my_target_operator(context)
+ return op.plane_co
+
+ def grab_set_cb(value):
+ op = SelectSideOfPlaneManipulatorGroup.my_target_operator(context)
+ op.plane_co = value
+ # XXX, this may change!
+ op.execute(context)
+
+ mpr = self.manipulators.new("MANIPULATOR_WT_grab_3d")
+ mpr.target_set_handler("offset", get=grab_get_cb, set=grab_set_cb)
+
+ mpr.use_draw_value = True
+
+ mpr.color = 0.8, 0.8, 0.8
+ mpr.alpha = 0.5
+
+ mpr.color_highlight = 1.0, 1.0, 1.0
+ mpr.alpha_highlight = 1.0
+
+ mpr.scale_basis = 0.2
+
+ self.widget_grab = mpr
+
+ # ----
+ # Dial
+
+ def direction_get_cb():
+ op = SelectSideOfPlaneManipulatorGroup.my_target_operator(context)
+
+ no_a = self.widget_dial.matrix_basis.col[1].xyz
+ no_b = Vector(op.plane_no)
+
+ no_a = (no_a * self.view_inv).xy.normalized()
+ no_b = (no_b * self.view_inv).xy.normalized()
+ return no_a.angle_signed(no_b)
+
+ def direction_set_cb(value):
+ op = SelectSideOfPlaneManipulatorGroup.my_target_operator(context)
+ matrix_rotate = Matrix.Rotation(-value, 3, self.rotate_axis)
+ no = matrix_rotate * self.widget_dial.matrix_basis.col[1].xyz
+ op.plane_no = no
+ op.execute(context)
+
+ mpr = self.manipulators.new("MANIPULATOR_WT_dial_3d")
+ mpr.target_set_handler("offset", get=direction_get_cb, set=direction_set_cb)
+ mpr.draw_options = {'ANGLE_START_Y'}
+
+ mpr.use_draw_value = True
+
+ mpr.color = 0.8, 0.8, 0.8
+ mpr.alpha = 0.5
+
+ mpr.color_highlight = 1.0, 1.0, 1.0
+ mpr.alpha_highlight = 1.0
+
+ self.widget_dial = mpr
+
+ def draw_prepare(self, context):
+ from mathutils import Vector
+
+ view_inv = self.my_view_orientation(context)
+
+ self.view_inv = view_inv
+ self.rotate_axis = view_inv[2].xyz
+ self.rotate_up = view_inv[1].xyz
+
+ op = self.my_target_operator(context)
+
+ co = Vector(op.plane_co)
+ no = Vector(op.plane_no).normalized()
+
+ # Grab
+ no_z = no
+ no_y = no_z.orthogonal()
+ no_x = no_z.cross(no_y)
+
+ matrix = self.widget_grab.matrix_basis
+ matrix.identity()
+ matrix.col[0].xyz = no_x
+ matrix.col[1].xyz = no_y
+ matrix.col[2].xyz = no_z
+ matrix.col[3].xyz = co
+
+ # Dial
+ no_z = self.rotate_axis
+ no_y = (no - (no.project(no_z))).normalized()
+ no_x = self.rotate_axis.cross(no_y)
+
+ matrix = self.widget_dial.matrix_basis
+ matrix.identity()
+ matrix.col[0].xyz = no_x
+ matrix.col[1].xyz = no_y
+ matrix.col[2].xyz = no_z
+ matrix.col[3].xyz = co
+
+
+classes = (
+ SelectSideOfPlane,
+ SelectSideOfPlaneManipulatorGroup,
+)
+
+def register():
+ for cls in classes:
+ bpy.utils.register_class(cls)
+
+
+def unregister():
+ for cls in reversed(classes):
+ bpy.utils.unregister_class(cls)
+
+if __name__ == "__main__":
+ register()
diff --git a/release/scripts/templates_py/manipulator_operator_target.py b/release/scripts/templates_py/manipulator_operator_target.py
new file mode 100644
index 00000000000..0abf6f2f654
--- /dev/null
+++ b/release/scripts/templates_py/manipulator_operator_target.py
@@ -0,0 +1,48 @@
+# Example of a manipulator that activates an operator
+# using the predefined dial manipulator to change the camera roll.
+#
+# Usage: Run this script and select a camera in the 3D view.
+#
+import bpy
+from bpy.types import (
+ ManipulatorGroup,
+)
+
+class MyCameraWidgetGroup(ManipulatorGroup):
+ bl_idname = "OBJECT_WGT_test_camera"
+ bl_label = "Object Camera Test Widget"
+ bl_space_type = 'VIEW_3D'
+ bl_region_type = 'WINDOW'
+ bl_options = {'3D', 'PERSISTENT'}
+
+ @classmethod
+ def poll(cls, context):
+ ob = context.object
+ return (ob and ob.type == 'CAMERA')
+
+ def setup(self, context):
+ # Run an operator using the dial manipulator
+ ob = context.object
+ mpr = self.manipulators.new("MANIPULATOR_WT_dial_3d")
+ props = mpr.target_set_operator("transform.rotate")
+ props.constraint_axis = False, False, True
+ props.constraint_orientation = 'LOCAL'
+ props.release_confirm = True
+
+ mpr.matrix_basis = ob.matrix_world.normalized()
+ mpr.line_width = 3
+
+ mpr.color = 0.8, 0.8, 0.8
+ mpr.alpha = 0.5
+
+ mpr.color_highlight = 1.0, 1.0, 1.0
+ mpr.alpha_highlight = 1.0
+
+ self.roll_widget = mpr
+
+ def refresh(self, context):
+ ob = context.object
+ mpr = self.roll_widget
+ mpr.matrix_basis = ob.matrix_world.normalized()
+
+bpy.utils.register_class(MyCameraWidgetGroup)
diff --git a/release/scripts/templates_py/manipulator_simple.py b/release/scripts/templates_py/manipulator_simple.py
new file mode 100644
index 00000000000..7e02940d527
--- /dev/null
+++ b/release/scripts/templates_py/manipulator_simple.py
@@ -0,0 +1,45 @@
+# Example of a group that edits a single property
+# using the predefined manipulator arrow.
+#
+# Usage: Select a lamp in the 3D view and drag the arrow at it's rear
+# to change it's energy value.
+#
+import bpy
+from bpy.types import (
+ ManipulatorGroup,
+)
+
+class MyLampWidgetGroup(ManipulatorGroup):
+ bl_idname = "OBJECT_WGT_lamp_test"
+ bl_label = "Test Lamp Widget"
+ bl_space_type = 'VIEW_3D'
+ bl_region_type = 'WINDOW'
+ bl_options = {'3D', 'PERSISTENT'}
+
+ @classmethod
+ def poll(cls, context):
+ ob = context.object
+ return (ob and ob.type == 'LAMP')
+
+ def setup(self, context):
+ # Arrow manipulator has one 'offset' property we can assign to the lamp energy.
+ ob = context.object
+ mpr = self.manipulators.new("MANIPULATOR_WT_arrow_3d")
+ mpr.target_set_prop("offset", ob.data, "energy")
+ mpr.matrix_basis = ob.matrix_world.normalized()
+ mpr.draw_style = 'BOX'
+
+ mpr.color = 1.0, 0.5, 0.0
+ mpr.alpha = 0.5
+
+ mpr.color_highlight = 1.0, 0.5, 1.0
+ mpr.alpha_highlight = 0.5
+
+ self.energy_widget = mpr
+
+ def refresh(self, context):
+ ob = context.object
+ mpr = self.energy_widget
+ mpr.matrix_basis = ob.matrix_world.normalized()
+
+bpy.utils.register_class(MyLampWidgetGroup)
diff --git a/release/scripts/templates_py/operator_modal_view3d_raycast.py b/release/scripts/templates_py/operator_modal_view3d_raycast.py
index c4d661b4c1f..e3b63813fc4 100644
--- a/release/scripts/templates_py/operator_modal_view3d_raycast.py
+++ b/release/scripts/templates_py/operator_modal_view3d_raycast.py
@@ -67,7 +67,7 @@ def main(context, event):
# now we have the object under the mouse cursor,
# we could do lots of stuff but for the example just select.
if best_obj is not None:
- best_obj.select = True
+ best_obj.select_set(action='SELECT')
context.scene.objects.active = best_obj
diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt
index c696719e650..4e4724771f3 100644
--- a/source/CMakeLists.txt
+++ b/source/CMakeLists.txt
@@ -23,6 +23,10 @@
#
# ***** END GPL LICENSE BLOCK *****
+if(WITH_LEGACY_OPENGL)
+ add_definitions(-DWITH_LEGACY_OPENGL)
+endif()
+
add_subdirectory(blender)
if(WITH_GAMEENGINE)
diff --git a/source/blender/CMakeLists.txt b/source/blender/CMakeLists.txt
index 690e1bcf318..316ab531a05 100644
--- a/source/blender/CMakeLists.txt
+++ b/source/blender/CMakeLists.txt
@@ -54,6 +54,8 @@ set(SRC_DNA_INC
${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_key_types.h
${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_lamp_types.h
${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_lattice_types.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_layer_types.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_lightprobe_types.h
${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_linestyle_types.h
${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_listBase.h
${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_material_types.h
@@ -89,6 +91,7 @@ set(SRC_DNA_INC
${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_view2d_types.h
${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_view3d_types.h
${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_windowmanager_types.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_workspace_types.h
${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_world_types.h
${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_movieclip_types.h
${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_tracking_types.h
@@ -101,6 +104,7 @@ add_subdirectory(windowmanager)
add_subdirectory(blenkernel)
add_subdirectory(blenlib)
add_subdirectory(bmesh)
+add_subdirectory(draw)
add_subdirectory(render)
add_subdirectory(blenfont)
add_subdirectory(blentranslation)
diff --git a/source/blender/alembic/CMakeLists.txt b/source/blender/alembic/CMakeLists.txt
index fb08887c076..d3b5e189292 100644
--- a/source/blender/alembic/CMakeLists.txt
+++ b/source/blender/alembic/CMakeLists.txt
@@ -29,11 +29,11 @@ set(INC
../blenlib
../blenloader
../bmesh
+ ../depsgraph
../editors/include
../makesdna
../makesrna
../windowmanager
- ../depsgraph
../../../intern/guardedalloc
../../../intern/utfconv
)
diff --git a/source/blender/alembic/intern/abc_camera.cc b/source/blender/alembic/intern/abc_camera.cc
index 16416205983..aa5d77ce4ec 100644
--- a/source/blender/alembic/intern/abc_camera.cc
+++ b/source/blender/alembic/intern/abc_camera.cc
@@ -49,12 +49,13 @@ using Alembic::AbcGeom::kWrapExisting;
/* ************************************************************************** */
-AbcCameraWriter::AbcCameraWriter(Scene *scene,
+AbcCameraWriter::AbcCameraWriter(EvaluationContext *eval_ctx,
+ Scene *scene,
Object *ob,
AbcTransformWriter *parent,
uint32_t time_sampling,
ExportSettings &settings)
- : AbcObjectWriter(scene, ob, time_sampling, settings, parent)
+ : AbcObjectWriter(eval_ctx, scene, ob, time_sampling, settings, parent)
{
OCamera camera(parent->alembicXform(), m_name, m_time_sampling);
m_camera_schema = camera.getSchema();
diff --git a/source/blender/alembic/intern/abc_camera.h b/source/blender/alembic/intern/abc_camera.h
index 16c5cccd5ea..772b7a6aec6 100644
--- a/source/blender/alembic/intern/abc_camera.h
+++ b/source/blender/alembic/intern/abc_camera.h
@@ -35,7 +35,8 @@ class AbcCameraWriter : public AbcObjectWriter {
Alembic::AbcGeom::OFloatProperty m_eye_separation;
public:
- AbcCameraWriter(Scene *scene,
+ AbcCameraWriter(EvaluationContext *eval_ctx,
+ Scene *scene,
Object *ob,
AbcTransformWriter *parent,
uint32_t time_sampling,
diff --git a/source/blender/alembic/intern/abc_curves.cc b/source/blender/alembic/intern/abc_curves.cc
index f73fe957fea..5328c471093 100644
--- a/source/blender/alembic/intern/abc_curves.cc
+++ b/source/blender/alembic/intern/abc_curves.cc
@@ -71,12 +71,13 @@ using Alembic::AbcGeom::OV2fGeomParam;
/* ************************************************************************** */
-AbcCurveWriter::AbcCurveWriter(Scene *scene,
+AbcCurveWriter::AbcCurveWriter(EvaluationContext *eval_ctx,
+ Scene *scene,
Object *ob,
AbcTransformWriter *parent,
uint32_t time_sampling,
ExportSettings &settings)
- : AbcObjectWriter(scene, ob, time_sampling, settings, parent)
+ : AbcObjectWriter(eval_ctx, scene, ob, time_sampling, settings, parent)
{
OCurves curves(parent->alembicXform(), m_name, m_time_sampling);
m_schema = curves.getSchema();
diff --git a/source/blender/alembic/intern/abc_curves.h b/source/blender/alembic/intern/abc_curves.h
index a9231f947b2..73cc8b35e27 100644
--- a/source/blender/alembic/intern/abc_curves.h
+++ b/source/blender/alembic/intern/abc_curves.h
@@ -36,7 +36,8 @@ class AbcCurveWriter : public AbcObjectWriter {
Alembic::AbcGeom::OCurvesSchema::Sample m_sample;
public:
- AbcCurveWriter(Scene *scene,
+ AbcCurveWriter(EvaluationContext *eval_ctx,
+ Scene *scene,
Object *ob,
AbcTransformWriter *parent,
uint32_t time_sampling,
diff --git a/source/blender/alembic/intern/abc_exporter.cc b/source/blender/alembic/intern/abc_exporter.cc
index 946b89213e6..945f82e8827 100644
--- a/source/blender/alembic/intern/abc_exporter.cc
+++ b/source/blender/alembic/intern/abc_exporter.cc
@@ -136,45 +136,50 @@ static bool object_type_is_exportable(Scene *scene, Object *ob)
/**
* Returns whether this object should be exported into the Alembic file.
*
- * \param settings: export settings, used for options like 'selected only'.
- * \param ob: the object in question.
+ * \param settings export settings, used for options like 'selected only'.
+ * \param ob the object's base in question.
* \param is_duplicated: Normally false; true when the object is instanced
* into the scene by a dupli-object (e.g. part of a dupligroup).
* This ignores selection and layer visibility,
* and assumes that the dupli-object itself (e.g. the group-instantiating empty) is exported.
*/
-static bool export_object(const ExportSettings * const settings, Object *ob,
+static bool export_object(const ExportSettings * const settings, const Base * const ob_base,
bool is_duplicated)
{
if (!is_duplicated) {
/* These two tests only make sense when the object isn't being instanced
* into the scene. When it is, its exportability is determined by
* its dupli-object and the DupliObject::no_draw property. */
- if (settings->selected_only && !parent_selected(ob)) {
+ if (settings->selected_only && !object_selected(ob_base)) {
return false;
}
-
- if (settings->visible_layers_only && !(settings->scene->lay & ob->lay)) {
+ // FIXME Sybren: handle these cleanly (maybe just remove code), now using active scene layer instead.
+ if (settings->visible_layers_only && (ob_base->flag & BASE_VISIBLED) == 0) {
return false;
}
}
- if (settings->renderable_only && (ob->restrictflag & OB_RESTRICT_RENDER)) {
- return false;
- }
+ // if (settings->renderable_only && (ob->restrictflag & OB_RESTRICT_RENDER)) {
+ // return false;
+ // }
return true;
}
/* ************************************************************************** */
-AbcExporter::AbcExporter(Main *bmain, Scene *scene, const char *filename, ExportSettings &settings)
+AbcExporter::AbcExporter(Main *bmain, EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer,
+ Depsgraph *depsgraph,
+ const char *filename, ExportSettings &settings)
: m_bmain(bmain)
, m_settings(settings)
, m_filename(filename)
, m_trans_sampling_index(0)
, m_shape_sampling_index(0)
+ , m_eval_ctx(eval_ctx)
, m_scene(scene)
+ , m_view_layer(view_layer)
+ , m_depsgraph(depsgraph)
, m_writer(NULL)
{}
@@ -359,40 +364,43 @@ void AbcExporter::operator()(Main *bmain, float &progress, bool &was_canceled)
void AbcExporter::createTransformWritersHierarchy(EvaluationContext *eval_ctx)
{
- Base *base = static_cast<Base *>(m_scene->base.first);
-
- while (base) {
+ for (Base *base = static_cast<Base *>(m_settings.view_layer->object_bases.first); base; base = base->next) {
Object *ob = base->object;
- switch (ob->type) {
- case OB_LAMP:
- case OB_LATTICE:
- case OB_SPEAKER:
- /* We do not export transforms for objects of these classes. */
- break;
- default:
- exploreTransform(eval_ctx, ob, ob->parent);
+ if (export_object(&m_settings, base, false)) {
+ switch (ob->type) {
+ case OB_LAMP:
+ case OB_LATTICE:
+ case OB_SPEAKER:
+ /* We do not export transforms for objects of these classes. */
+ break;
+ default:
+ exploreTransform(eval_ctx, base, ob->parent, NULL);
+ }
}
-
- base = base->next;
}
}
-void AbcExporter::exploreTransform(EvaluationContext *eval_ctx, Object *ob, Object *parent, Object *dupliObParent)
+void AbcExporter::exploreTransform(EvaluationContext *eval_ctx, Base *ob_base, Object *parent, Object *dupliObParent)
{
+ Object *ob = ob_base->object;
+
/* If an object isn't exported itself, its duplilist shouldn't be
* exported either. */
- if (!export_object(&m_settings, ob, dupliObParent != NULL)) {
+ if (!export_object(&m_settings, ob_base, dupliObParent != NULL)) {
return;
}
if (object_type_is_exportable(m_scene, ob)) {
- createTransformWriter(ob, parent, dupliObParent);
+ createTransformWriter(eval_ctx, ob, parent, dupliObParent);
}
ListBase *lb = object_duplilist(eval_ctx, m_scene, ob);
if (lb) {
+ Base fake_base = *ob_base; // copy flags (like selection state) from the real object.
+ fake_base.next = fake_base.prev = NULL;
+
DupliObject *link = static_cast<DupliObject *>(lb->first);
Object *dupli_ob = NULL;
Object *dupli_parent = NULL;
@@ -407,7 +415,8 @@ void AbcExporter::exploreTransform(EvaluationContext *eval_ctx, Object *ob, Obje
dupli_ob = link->ob;
dupli_parent = (dupli_ob->parent) ? dupli_ob->parent : ob;
- exploreTransform(eval_ctx, dupli_ob, dupli_parent, ob);
+ fake_base.object = dupli_ob;
+ exploreTransform(eval_ctx, &fake_base, dupli_parent, ob);
}
}
}
@@ -415,7 +424,7 @@ void AbcExporter::exploreTransform(EvaluationContext *eval_ctx, Object *ob, Obje
free_object_duplilist(lb);
}
-AbcTransformWriter * AbcExporter::createTransformWriter(Object *ob, Object *parent, Object *dupliObParent)
+AbcTransformWriter * AbcExporter::createTransformWriter(EvaluationContext *eval_ctx, Object *ob, Object *parent, Object *dupliObParent)
{
/* An object should not be its own parent, or we'll get infinite loops. */
BLI_assert(ob != parent);
@@ -450,29 +459,29 @@ AbcTransformWriter * AbcExporter::createTransformWriter(Object *ob, Object *pare
* return the parent's AbcTransformWriter pointer. */
if (parent->parent) {
if (parent == dupliObParent) {
- parent_writer = createTransformWriter(parent, parent->parent, NULL);
+ parent_writer = createTransformWriter(eval_ctx, parent, parent->parent, NULL);
}
else {
- parent_writer = createTransformWriter(parent, parent->parent, dupliObParent);
+ parent_writer = createTransformWriter(eval_ctx, parent, parent->parent, dupliObParent);
}
}
else if (parent == dupliObParent) {
if (dupliObParent->parent == NULL) {
- parent_writer = createTransformWriter(parent, NULL, NULL);
+ parent_writer = createTransformWriter(eval_ctx, parent, NULL, NULL);
}
else {
- parent_writer = createTransformWriter(parent, dupliObParent->parent, dupliObParent->parent);
+ parent_writer = createTransformWriter(eval_ctx, parent, dupliObParent->parent, dupliObParent->parent);
}
}
else {
- parent_writer = createTransformWriter(parent, dupliObParent, dupliObParent);
+ parent_writer = createTransformWriter(eval_ctx, parent, dupliObParent, dupliObParent);
}
BLI_assert(parent_writer);
alembic_parent = parent_writer->alembicXform();
}
- my_writer = new AbcTransformWriter(ob, alembic_parent, parent_writer,
+ my_writer = new AbcTransformWriter(eval_ctx, ob, alembic_parent, parent_writer,
m_trans_sampling_index, m_settings);
/* When flattening, the matrix of the dupliobject has to be added. */
@@ -486,29 +495,28 @@ AbcTransformWriter * AbcExporter::createTransformWriter(Object *ob, Object *pare
void AbcExporter::createShapeWriters(EvaluationContext *eval_ctx)
{
- Base *base = static_cast<Base *>(m_scene->base.first);
-
- while (base) {
- Object *ob = base->object;
- exploreObject(eval_ctx, ob, NULL);
-
- base = base->next;
+ for (Base *base = static_cast<Base *>(m_settings.view_layer->object_bases.first); base; base = base->next) {
+ exploreObject(eval_ctx, base, NULL);
}
}
-void AbcExporter::exploreObject(EvaluationContext *eval_ctx, Object *ob, Object *dupliObParent)
+void AbcExporter::exploreObject(EvaluationContext *eval_ctx, Base *ob_base, Object *dupliObParent)
{
/* If an object isn't exported itself, its duplilist shouldn't be
* exported either. */
- if (!export_object(&m_settings, ob, dupliObParent != NULL)) {
+ if (!export_object(&m_settings, ob_base, dupliObParent != NULL)) {
return;
}
- createShapeWriter(ob, dupliObParent);
+ createShapeWriter(ob_base, dupliObParent);
+ Object *ob = ob_base->object;
ListBase *lb = object_duplilist(eval_ctx, m_scene, ob);
if (lb) {
+ Base fake_base = *ob_base; // copy flags (like selection state) from the real object.
+ fake_base.next = fake_base.prev = NULL;
+
DupliObject *link = static_cast<DupliObject *>(lb->first);
for (; link; link = link->next) {
@@ -516,9 +524,9 @@ void AbcExporter::exploreObject(EvaluationContext *eval_ctx, Object *ob, Object
if (m_settings.renderable_only && link->no_draw) {
continue;
}
-
if (link->type == OB_DUPLIGROUP) {
- exploreObject(eval_ctx, link->ob, ob);
+ fake_base.object = link->ob;
+ exploreObject(eval_ctx, &fake_base, ob);
}
}
}
@@ -541,16 +549,18 @@ void AbcExporter::createParticleSystemsWriters(Object *ob, AbcTransformWriter *x
if (m_settings.export_hair && psys->part->type == PART_HAIR) {
m_settings.export_child_hairs = true;
- m_shapes.push_back(new AbcHairWriter(m_scene, ob, xform, m_shape_sampling_index, m_settings, psys));
+ m_shapes.push_back(new AbcHairWriter(m_eval_ctx, m_scene, ob, xform, m_shape_sampling_index, m_settings, psys));
}
else if (m_settings.export_particles && psys->part->type == PART_EMITTER) {
- m_shapes.push_back(new AbcPointsWriter(m_scene, ob, xform, m_shape_sampling_index, m_settings, psys));
+ m_shapes.push_back(new AbcPointsWriter(m_eval_ctx, m_scene, ob, xform, m_shape_sampling_index, m_settings, psys));
}
}
}
-void AbcExporter::createShapeWriter(Object *ob, Object *dupliObParent)
+void AbcExporter::createShapeWriter(Base *ob_base, Object *dupliObParent)
{
+ Object *ob = ob_base->object;
+
if (!object_type_is_exportable(m_scene, ob)) {
return;
}
@@ -582,7 +592,7 @@ void AbcExporter::createShapeWriter(Object *ob, Object *dupliObParent)
return;
}
- m_shapes.push_back(new AbcMeshWriter(m_scene, ob, xform, m_shape_sampling_index, m_settings));
+ m_shapes.push_back(new AbcMeshWriter(m_eval_ctx, m_scene, ob, xform, m_shape_sampling_index, m_settings));
break;
}
case OB_SURF:
@@ -593,7 +603,7 @@ void AbcExporter::createShapeWriter(Object *ob, Object *dupliObParent)
return;
}
- m_shapes.push_back(new AbcNurbsWriter(m_scene, ob, xform, m_shape_sampling_index, m_settings));
+ m_shapes.push_back(new AbcNurbsWriter(m_eval_ctx, m_scene, ob, xform, m_shape_sampling_index, m_settings));
break;
}
case OB_CURVE:
@@ -604,7 +614,7 @@ void AbcExporter::createShapeWriter(Object *ob, Object *dupliObParent)
return;
}
- m_shapes.push_back(new AbcCurveWriter(m_scene, ob, xform, m_shape_sampling_index, m_settings));
+ m_shapes.push_back(new AbcCurveWriter(m_eval_ctx, m_scene, ob, xform, m_shape_sampling_index, m_settings));
break;
}
case OB_CAMERA:
@@ -612,7 +622,7 @@ void AbcExporter::createShapeWriter(Object *ob, Object *dupliObParent)
Camera *cam = static_cast<Camera *>(ob->data);
if (cam->type == CAM_PERSP) {
- m_shapes.push_back(new AbcCameraWriter(m_scene, ob, xform, m_shape_sampling_index, m_settings));
+ m_shapes.push_back(new AbcCameraWriter(m_eval_ctx, m_scene, ob, xform, m_shape_sampling_index, m_settings));
}
break;
@@ -625,7 +635,7 @@ void AbcExporter::createShapeWriter(Object *ob, Object *dupliObParent)
}
m_shapes.push_back(new AbcMBallWriter(
- m_bmain, m_scene, ob, xform,
+ m_bmain, m_eval_ctx, m_scene, ob, xform,
m_shape_sampling_index, m_settings));
break;
}
@@ -647,5 +657,5 @@ void AbcExporter::setCurrentFrame(Main *bmain, double t)
{
m_scene->r.cfra = static_cast<int>(t);
m_scene->r.subframe = static_cast<float>(t) - m_scene->r.cfra;
- BKE_scene_update_for_newframe(bmain->eval_ctx, bmain, m_scene, m_scene->lay);
+ BKE_scene_graph_update_for_newframe(bmain->eval_ctx, m_depsgraph, bmain, m_scene, m_view_layer);
}
diff --git a/source/blender/alembic/intern/abc_exporter.h b/source/blender/alembic/intern/abc_exporter.h
index 280682b2896..2a34ad2b25d 100644
--- a/source/blender/alembic/intern/abc_exporter.h
+++ b/source/blender/alembic/intern/abc_exporter.h
@@ -35,14 +35,19 @@ class AbcTransformWriter;
class ArchiveWriter;
struct EvaluationContext;
+struct Depsgraph;
struct Main;
struct Object;
struct Scene;
+struct ViewLayer;
+struct Base;
struct ExportSettings {
ExportSettings();
Scene *scene;
+ ViewLayer *view_layer; // Scene layer to export; all its objects will be exported, unless selected_only=true
+ Depsgraph *depsgraph;
SimpleLogger logger;
bool selected_only;
@@ -88,7 +93,10 @@ class AbcExporter {
unsigned int m_trans_sampling_index, m_shape_sampling_index;
+ EvaluationContext *m_eval_ctx;
Scene *m_scene;
+ ViewLayer *m_view_layer;
+ Depsgraph *m_depsgraph;
ArchiveWriter *m_writer;
@@ -99,7 +107,9 @@ class AbcExporter {
std::vector<AbcObjectWriter *> m_shapes;
public:
- AbcExporter(Main *bmain, Scene *scene, const char *filename, ExportSettings &settings);
+ AbcExporter(Main *bmain, EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer,
+ Depsgraph *depsgraph,
+ const char *filename, ExportSettings &settings);
~AbcExporter();
void operator()(Main *bmain, float &progress, bool &was_canceled);
@@ -114,11 +124,11 @@ private:
Alembic::Abc::TimeSamplingPtr createTimeSampling(double step);
void createTransformWritersHierarchy(EvaluationContext *eval_ctx);
- AbcTransformWriter * createTransformWriter(Object *ob, Object *parent, Object *dupliObParent);
- void exploreTransform(EvaluationContext *eval_ctx, Object *ob, Object *parent, Object *dupliObParent = NULL);
- void exploreObject(EvaluationContext *eval_ctx, Object *ob, Object *dupliObParent);
+ AbcTransformWriter * createTransformWriter(EvaluationContext *eval_ctx, Object *ob, Object *parent, Object *dupliObParent);
+ void exploreTransform(EvaluationContext *eval_ctx, Base *ob_base, Object *parent, Object *dupliObParent);
+ void exploreObject(EvaluationContext *eval_ctx, Base *ob_base, Object *dupliObParent);
void createShapeWriters(EvaluationContext *eval_ctx);
- void createShapeWriter(Object *ob, Object *dupliObParent);
+ void createShapeWriter(Base *ob_base, Object *dupliObParent);
void createParticleSystemsWriters(Object *ob, AbcTransformWriter *xform);
AbcTransformWriter *getXForm(const std::string &name);
diff --git a/source/blender/alembic/intern/abc_hair.cc b/source/blender/alembic/intern/abc_hair.cc
index 8f8ed2019d5..2579aa3cc36 100644
--- a/source/blender/alembic/intern/abc_hair.cc
+++ b/source/blender/alembic/intern/abc_hair.cc
@@ -49,13 +49,14 @@ using Alembic::AbcGeom::OV2fGeomParam;
/* ************************************************************************** */
-AbcHairWriter::AbcHairWriter(Scene *scene,
+AbcHairWriter::AbcHairWriter(EvaluationContext *eval_ctx,
+ Scene *scene,
Object *ob,
AbcTransformWriter *parent,
uint32_t time_sampling,
ExportSettings &settings,
ParticleSystem *psys)
- : AbcObjectWriter(scene, ob, time_sampling, settings, parent)
+ : AbcObjectWriter(eval_ctx, scene, ob, time_sampling, settings, parent)
, m_uv_warning_shown(false)
{
m_psys = psys;
@@ -76,7 +77,7 @@ void AbcHairWriter::do_write()
return;
}
- DerivedMesh *dm = mesh_create_derived_render(m_scene, m_object, CD_MASK_MESH);
+ DerivedMesh *dm = mesh_create_derived_render(m_eval_ctx, m_scene, m_object, CD_MASK_MESH);
DM_ensure_tessface(dm);
std::vector<Imath::V3f> verts;
diff --git a/source/blender/alembic/intern/abc_hair.h b/source/blender/alembic/intern/abc_hair.h
index 61f5fe361f8..8190c449205 100644
--- a/source/blender/alembic/intern/abc_hair.h
+++ b/source/blender/alembic/intern/abc_hair.h
@@ -40,7 +40,8 @@ class AbcHairWriter : public AbcObjectWriter {
bool m_uv_warning_shown;
public:
- AbcHairWriter(Scene *scene,
+ AbcHairWriter(EvaluationContext *eval_ctx,
+ Scene *scene,
Object *ob,
AbcTransformWriter *parent,
uint32_t time_sampling,
diff --git a/source/blender/alembic/intern/abc_mball.cc b/source/blender/alembic/intern/abc_mball.cc
index 1ef7b757577..f1aa25c8f70 100644
--- a/source/blender/alembic/intern/abc_mball.cc
+++ b/source/blender/alembic/intern/abc_mball.cc
@@ -30,7 +30,6 @@ extern "C" {
#include "DNA_object_types.h"
#include "BKE_curve.h"
-#include "BKE_depsgraph.h"
#include "BKE_displist.h"
#include "BKE_main.h"
#include "BKE_mball.h"
@@ -43,12 +42,13 @@ extern "C" {
AbcMBallWriter::AbcMBallWriter(
Main *bmain,
+ EvaluationContext *eval_ctx,
Scene *scene,
Object *ob,
AbcTransformWriter *parent,
uint32_t time_sampling,
ExportSettings &settings)
- : AbcObjectWriter(scene, ob, time_sampling, settings, parent)
+ : AbcObjectWriter(eval_ctx, scene, ob, time_sampling, settings, parent)
, m_bmain(bmain)
{
m_is_animated = isAnimated();
@@ -58,7 +58,7 @@ AbcMBallWriter::AbcMBallWriter(
sizeof(CurveCache),
"CurveCache for AbcMBallWriter");
- m_mesh_writer = new AbcMeshWriter(scene, m_mesh_ob, parent,
+ m_mesh_writer = new AbcMeshWriter(eval_ctx, scene, m_mesh_ob, parent,
time_sampling, settings);
m_mesh_writer->setIsAnimated(m_is_animated);
}
diff --git a/source/blender/alembic/intern/abc_mball.h b/source/blender/alembic/intern/abc_mball.h
index 9b943698416..e657711059e 100644
--- a/source/blender/alembic/intern/abc_mball.h
+++ b/source/blender/alembic/intern/abc_mball.h
@@ -42,6 +42,7 @@ class AbcMBallWriter : public AbcObjectWriter {
public:
AbcMBallWriter(
Main *bmain,
+ EvaluationContext *eval_ctx,
Scene *scene,
Object *ob,
AbcTransformWriter *parent,
diff --git a/source/blender/alembic/intern/abc_mesh.cc b/source/blender/alembic/intern/abc_mesh.cc
index 90e95542a9a..c2c99e2b11f 100644
--- a/source/blender/alembic/intern/abc_mesh.cc
+++ b/source/blender/alembic/intern/abc_mesh.cc
@@ -38,7 +38,6 @@ extern "C" {
#include "BLI_string.h"
#include "BKE_cdderivedmesh.h"
-#include "BKE_depsgraph.h"
#include "BKE_main.h"
#include "BKE_material.h"
#include "BKE_mesh.h"
@@ -287,12 +286,13 @@ static ModifierData *get_liquid_sim_modifier(Scene *scene, Object *ob)
/* ************************************************************************** */
-AbcMeshWriter::AbcMeshWriter(Scene *scene,
+AbcMeshWriter::AbcMeshWriter(EvaluationContext *eval_ctx,
+ Scene *scene,
Object *ob,
AbcTransformWriter *parent,
uint32_t time_sampling,
ExportSettings &settings)
- : AbcObjectWriter(scene, ob, time_sampling, settings, parent)
+ : AbcObjectWriter(eval_ctx, scene, ob, time_sampling, settings, parent)
{
m_is_animated = isAnimated();
m_subsurf_mod = NULL;
@@ -525,7 +525,7 @@ DerivedMesh *AbcMeshWriter::getFinalMesh()
m_subsurf_mod->mode |= eModifierMode_DisableTemporary;
}
- DerivedMesh *dm = mesh_create_derived_render(m_scene, m_object, CD_MASK_MESH);
+ DerivedMesh *dm = mesh_create_derived_render(m_eval_ctx, m_scene, m_object, CD_MASK_MESH);
if (m_subsurf_mod) {
m_subsurf_mod->mode &= ~eModifierMode_DisableTemporary;
@@ -923,12 +923,6 @@ static void *add_customdata_cb(void *user_data, const char *name, int data_type)
numloops = dm->getNumLoops(dm);
cd_ptr = CustomData_add_layer_named(loopdata, cd_data_type, CD_DEFAULT,
NULL, numloops, name);
- if (cd_data_type == CD_MLOOPUV) {
- CustomData_add_layer_named(dm->getPolyDataLayout(dm),
- CD_MTEXPOLY, CD_DEFAULT,
- NULL, numloops, name);
- }
-
return cd_ptr;
}
diff --git a/source/blender/alembic/intern/abc_mesh.h b/source/blender/alembic/intern/abc_mesh.h
index 77c352d7cd3..a08b7352d16 100644
--- a/source/blender/alembic/intern/abc_mesh.h
+++ b/source/blender/alembic/intern/abc_mesh.h
@@ -50,7 +50,8 @@ class AbcMeshWriter : public AbcObjectWriter {
bool m_is_subd;
public:
- AbcMeshWriter(Scene *scene,
+ AbcMeshWriter(EvaluationContext *eval_ctx,
+ Scene *scene,
Object *ob,
AbcTransformWriter *parent,
uint32_t time_sampling,
diff --git a/source/blender/alembic/intern/abc_nurbs.cc b/source/blender/alembic/intern/abc_nurbs.cc
index eaef06fd6d1..0532191a28d 100644
--- a/source/blender/alembic/intern/abc_nurbs.cc
+++ b/source/blender/alembic/intern/abc_nurbs.cc
@@ -60,12 +60,13 @@ using Alembic::AbcGeom::ONuPatchSchema;
/* ************************************************************************** */
-AbcNurbsWriter::AbcNurbsWriter(Scene *scene,
+AbcNurbsWriter::AbcNurbsWriter(EvaluationContext *eval_ctx,
+ Scene *scene,
Object *ob,
AbcTransformWriter *parent,
uint32_t time_sampling,
ExportSettings &settings)
- : AbcObjectWriter(scene, ob, time_sampling, settings, parent)
+ : AbcObjectWriter(eval_ctx, scene, ob, time_sampling, settings, parent)
{
m_is_animated = isAnimated();
diff --git a/source/blender/alembic/intern/abc_nurbs.h b/source/blender/alembic/intern/abc_nurbs.h
index abe460a8988..3d20c5c60bb 100644
--- a/source/blender/alembic/intern/abc_nurbs.h
+++ b/source/blender/alembic/intern/abc_nurbs.h
@@ -32,7 +32,8 @@ class AbcNurbsWriter : public AbcObjectWriter {
bool m_is_animated;
public:
- AbcNurbsWriter(Scene *scene,
+ AbcNurbsWriter(EvaluationContext *eval_ctx,
+ Scene *scene,
Object *ob,
AbcTransformWriter *parent,
uint32_t time_sampling,
diff --git a/source/blender/alembic/intern/abc_object.cc b/source/blender/alembic/intern/abc_object.cc
index 6c4cb60d63c..98ebcf6debb 100644
--- a/source/blender/alembic/intern/abc_object.cc
+++ b/source/blender/alembic/intern/abc_object.cc
@@ -32,7 +32,6 @@ extern "C" {
#include "DNA_space_types.h" /* for FILE_MAX */
#include "BKE_constraint.h"
-#include "BKE_depsgraph.h"
#include "BKE_idprop.h"
#include "BKE_library.h"
#include "BKE_modifier.h"
@@ -59,13 +58,15 @@ using Alembic::AbcGeom::OStringProperty;
/* ************************************************************************** */
-AbcObjectWriter::AbcObjectWriter(Scene *scene,
+AbcObjectWriter::AbcObjectWriter(EvaluationContext *eval_ctx,
+ Scene *scene,
Object *ob,
uint32_t time_sampling,
ExportSettings &settings,
AbcObjectWriter *parent)
: m_object(ob)
, m_settings(settings)
+ , m_eval_ctx(eval_ctx)
, m_scene(scene)
, m_time_sampling(time_sampling)
, m_first_frame(true)
diff --git a/source/blender/alembic/intern/abc_object.h b/source/blender/alembic/intern/abc_object.h
index 852ef451f23..6aa6224f8d5 100644
--- a/source/blender/alembic/intern/abc_object.h
+++ b/source/blender/alembic/intern/abc_object.h
@@ -44,6 +44,7 @@ protected:
Object *m_object;
ExportSettings &m_settings;
+ EvaluationContext *m_eval_ctx;
Scene *m_scene;
uint32_t m_time_sampling;
@@ -56,7 +57,8 @@ protected:
std::string m_name;
public:
- AbcObjectWriter(Scene *scene,
+ AbcObjectWriter(EvaluationContext *eval_ctx,
+ Scene *scene,
Object *ob,
uint32_t time_sampling,
ExportSettings &settings,
diff --git a/source/blender/alembic/intern/abc_points.cc b/source/blender/alembic/intern/abc_points.cc
index 80567cd6bf0..feb2eff5b9d 100644
--- a/source/blender/alembic/intern/abc_points.cc
+++ b/source/blender/alembic/intern/abc_points.cc
@@ -58,13 +58,14 @@ using Alembic::AbcGeom::OPointsSchema;
/* ************************************************************************** */
-AbcPointsWriter::AbcPointsWriter(Scene *scene,
+AbcPointsWriter::AbcPointsWriter(EvaluationContext *eval_ctx,
+ Scene *scene,
Object *ob,
AbcTransformWriter *parent,
uint32_t time_sampling,
ExportSettings &settings,
ParticleSystem *psys)
- : AbcObjectWriter(scene, ob, time_sampling, settings, parent)
+ : AbcObjectWriter(eval_ctx, scene, ob, time_sampling, settings, parent)
{
m_psys = psys;
@@ -86,6 +87,7 @@ void AbcPointsWriter::do_write()
ParticleKey state;
ParticleSimulationData sim;
+ sim.eval_ctx = m_eval_ctx;
sim.scene = m_scene;
sim.ob = m_object;
sim.psys = m_psys;
diff --git a/source/blender/alembic/intern/abc_points.h b/source/blender/alembic/intern/abc_points.h
index 369a802d763..b60f1997aa8 100644
--- a/source/blender/alembic/intern/abc_points.h
+++ b/source/blender/alembic/intern/abc_points.h
@@ -38,7 +38,8 @@ class AbcPointsWriter : public AbcObjectWriter {
ParticleSystem *m_psys;
public:
- AbcPointsWriter(Scene *scene,
+ AbcPointsWriter(EvaluationContext *eval_ctx,
+ Scene *scene,
Object *ob,
AbcTransformWriter *parent,
uint32_t time_sampling,
diff --git a/source/blender/alembic/intern/abc_transform.cc b/source/blender/alembic/intern/abc_transform.cc
index 5392387663f..0a1480e62b0 100644
--- a/source/blender/alembic/intern/abc_transform.cc
+++ b/source/blender/alembic/intern/abc_transform.cc
@@ -57,12 +57,13 @@ static bool has_parent_camera(Object *ob)
/* ************************************************************************** */
-AbcTransformWriter::AbcTransformWriter(Object *ob,
+AbcTransformWriter::AbcTransformWriter(EvaluationContext *eval_ctx,
+ Object *ob,
const OObject &abc_parent,
AbcTransformWriter *parent,
unsigned int time_sampling,
ExportSettings &settings)
- : AbcObjectWriter(NULL, ob, time_sampling, settings, parent)
+ : AbcObjectWriter(eval_ctx, NULL, ob, time_sampling, settings, parent)
, m_proxy_from(NULL)
{
m_is_animated = hasAnimation(m_object);
diff --git a/source/blender/alembic/intern/abc_transform.h b/source/blender/alembic/intern/abc_transform.h
index 753a4247e9f..e82765cb169 100644
--- a/source/blender/alembic/intern/abc_transform.h
+++ b/source/blender/alembic/intern/abc_transform.h
@@ -44,7 +44,8 @@ public:
Object *m_proxy_from;
public:
- AbcTransformWriter(Object *ob,
+ AbcTransformWriter(EvaluationContext *eval_ctx,
+ Object *ob,
const Alembic::AbcGeom::OObject &abc_parent,
AbcTransformWriter *parent,
unsigned int time_sampling,
diff --git a/source/blender/alembic/intern/abc_util.cc b/source/blender/alembic/intern/abc_util.cc
index 24a508e8292..8bdc7ae3455 100644
--- a/source/blender/alembic/intern/abc_util.cc
+++ b/source/blender/alembic/intern/abc_util.cc
@@ -35,6 +35,7 @@
extern "C" {
#include "DNA_object_types.h"
+#include "DNA_layer_types.h"
#include "BLI_math.h"
@@ -60,6 +61,15 @@ std::string get_id_name(const ID * const id)
return name;
}
+/**
+ * @brief get_object_dag_path_name returns the name under which the object
+ * will be exported in the Alembic file. It is of the form
+ * "[../grandparent/]parent/object" if dupli_parent is NULL, or
+ * "dupli_parent/[../grandparent/]parent/object" otherwise.
+ * @param ob
+ * @param dupli_parent
+ * @return
+ */
std::string get_object_dag_path_name(const Object * const ob, Object *dupli_parent)
{
std::string name = get_id_name(ob);
@@ -78,31 +88,9 @@ std::string get_object_dag_path_name(const Object * const ob, Object *dupli_pare
return name;
}
-bool object_selected(Object *ob)
-{
- return ob->flag & SELECT;
-}
-
-bool parent_selected(Object *ob)
+bool object_selected(const Base * const ob_base)
{
- if (object_selected(ob)) {
- return true;
- }
-
- bool do_export = false;
-
- Object *parent = ob->parent;
-
- while (parent != NULL) {
- if (object_selected(parent)) {
- do_export = true;
- break;
- }
-
- parent = parent->parent;
- }
-
- return do_export;
+ return ob_base->flag & SELECT;
}
Imath::M44d convert_matrix(float mat[4][4])
diff --git a/source/blender/alembic/intern/abc_util.h b/source/blender/alembic/intern/abc_util.h
index 2526958111a..fcc3b19c48b 100644
--- a/source/blender/alembic/intern/abc_util.h
+++ b/source/blender/alembic/intern/abc_util.h
@@ -48,13 +48,13 @@ struct ImportSettings;
struct ID;
struct Object;
+struct Base;
std::string get_id_name(const ID * const id);
std::string get_id_name(const Object * const ob);
std::string get_object_dag_path_name(const Object * const ob, Object *dupli_parent);
-bool object_selected(Object *ob);
-bool parent_selected(Object *ob);
+bool object_selected(const Base * const ob_base);
Imath::M44d convert_matrix(float mat[4][4]);
diff --git a/source/blender/alembic/intern/alembic_capi.cc b/source/blender/alembic/intern/alembic_capi.cc
index 0d2316ce7d9..5e93779b5f6 100644
--- a/source/blender/alembic/intern/alembic_capi.cc
+++ b/source/blender/alembic/intern/alembic_capi.cc
@@ -48,12 +48,15 @@ extern "C" {
#include "BKE_cdderivedmesh.h"
#include "BKE_context.h"
#include "BKE_curve.h"
-#include "BKE_depsgraph.h"
#include "BKE_global.h"
+#include "BKE_layer.h"
#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_scene.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
/* SpaceType struct has a member called 'new' which obviously conflicts with C++
* so temporarily redefining the new keyword to make it compile. */
#define new extern_new
@@ -227,7 +230,10 @@ static void find_iobject(const IObject &object, IObject &ret,
}
struct ExportJobData {
+ EvaluationContext eval_ctx;
Scene *scene;
+ ViewLayer *view_layer;
+ Depsgraph *depsgraph;
Main *bmain;
char filename[1024];
@@ -259,7 +265,8 @@ static void export_startjob(void *customdata, short *stop, short *do_update, flo
try {
Scene *scene = data->scene;
- AbcExporter exporter(data->bmain, scene, data->filename, data->settings);
+ ViewLayer *view_layer = data->view_layer;
+ AbcExporter exporter(data->bmain, &data->eval_ctx, scene, view_layer, data->depsgraph, data->filename, data->settings);
const int orig_frame = CFRA;
@@ -269,8 +276,7 @@ static void export_startjob(void *customdata, short *stop, short *do_update, flo
if (CFRA != orig_frame) {
CFRA = orig_frame;
- BKE_scene_update_for_newframe(data->bmain->eval_ctx, data->bmain,
- scene, scene->lay);
+ BKE_scene_graph_update_for_newframe(data->bmain->eval_ctx, data->depsgraph, data->bmain, scene, data->view_layer);
}
data->export_ok = !data->was_canceled;
@@ -308,7 +314,12 @@ bool ABC_export(
bool as_background_job)
{
ExportJobData *job = static_cast<ExportJobData *>(MEM_mallocN(sizeof(ExportJobData), "ExportJobData"));
+
+ CTX_data_eval_ctx(C, &job->eval_ctx);
+
job->scene = scene;
+ job->view_layer = CTX_data_view_layer(C);
+ job->depsgraph = CTX_data_depsgraph(C);
job->bmain = CTX_data_main(C);
job->export_ok = false;
BLI_strncpy(job->filename, filepath, 1024);
@@ -330,13 +341,25 @@ bool ABC_export(
* hardcore refactoring. */
new (&job->settings) ExportSettings();
job->settings.scene = job->scene;
+ job->settings.depsgraph = job->depsgraph;
+
+ /* Sybren: for now we only export the active scene layer.
+ * Later in the 2.8 development process this may be replaced by using
+ * a specific collection for Alembic I/O, which can then be toggled
+ * between "real" objects and cached Alembic files. */
+ job->settings.view_layer = CTX_data_view_layer(C);
+
job->settings.frame_start = params->frame_start;
job->settings.frame_end = params->frame_end;
job->settings.frame_samples_xform = params->frame_samples_xform;
job->settings.frame_samples_shape = params->frame_samples_shape;
job->settings.shutter_open = params->shutter_open;
job->settings.shutter_close = params->shutter_close;
+
+ /* Sybren: For now this is ignored, until we can get selection
+ * detection working through Base pointers (instead of ob->flags). */
job->settings.selected_only = params->selected_only;
+
job->settings.export_face_sets = params->face_sets;
job->settings.export_normals = params->normals;
job->settings.export_uvs = params->uvs;
@@ -345,8 +368,13 @@ bool ABC_export(
job->settings.export_particles = params->export_particles;
job->settings.apply_subdiv = params->apply_subdiv;
job->settings.flatten_hierarchy = params->flatten_hierarchy;
+
+ /* Sybren: visible_layer & renderable only is ignored for now,
+ * to be replaced with collections later in the 2.8 dev process
+ * (also see note above). */
job->settings.visible_layers_only = params->visible_layers_only;
job->settings.renderable_only = params->renderable_only;
+
job->settings.use_subdiv_schema = params->use_subdiv_schema;
job->settings.export_ogawa = (params->compression_type == ABC_ARCHIVE_OGAWA);
job->settings.pack_uv = params->packuv;
@@ -606,6 +634,7 @@ enum {
struct ImportJobData {
Main *bmain;
Scene *scene;
+ ViewLayer *view_layer;
char filename[1024];
ImportSettings settings;
@@ -807,20 +836,32 @@ static void import_endjob(void *user_data)
else {
/* Add object to scene. */
Base *base;
+ LayerCollection *lc;
+ ViewLayer *view_layer = data->view_layer;
- BKE_scene_base_deselect_all(data->scene);
+ BKE_view_layer_base_deselect_all(view_layer);
+
+ lc = BKE_layer_collection_get_active(view_layer);
+ if (lc == NULL) {
+ BLI_assert(BLI_listbase_count_ex(&view_layer->layer_collections, 1) == 0);
+ /* when there is no collection linked to this ViewLayer, create one */
+ SceneCollection *sc = BKE_collection_add(&data->scene->id, NULL, COLLECTION_TYPE_NONE, NULL);
+ lc = BKE_collection_link(view_layer, sc);
+ }
for (iter = data->readers.begin(); iter != data->readers.end(); ++iter) {
Object *ob = (*iter)->object();
ob->lay = data->scene->lay;
- base = BKE_scene_base_add(data->scene, ob);
- BKE_scene_base_select(data->scene, base);
+ BKE_collection_object_add(&data->scene->id, lc->scene_collection, ob);
+
+ base = BKE_view_layer_base_find(view_layer, ob);
+ BKE_view_layer_base_select(view_layer, base);
- DAG_id_tag_update_ex(data->bmain, &ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+ DEG_id_tag_update_ex(data->bmain, &ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
}
- DAG_relations_tag_update(data->bmain);
+ DEG_relations_tag_update(data->bmain);
}
for (iter = data->readers.begin(); iter != data->readers.end(); ++iter) {
@@ -863,6 +904,7 @@ bool ABC_import(bContext *C, const char *filepath, float scale, bool is_sequence
ImportJobData *job = new ImportJobData();
job->bmain = CTX_data_main(C);
job->scene = CTX_data_scene(C);
+ job->view_layer = CTX_data_view_layer(C);
job->import_ok = false;
BLI_strncpy(job->filename, filepath, 1024);
diff --git a/source/blender/blenfont/BLF_api.h b/source/blender/blenfont/BLF_api.h
index 8c8aef3de57..22559edad22 100644
--- a/source/blender/blenfont/BLF_api.h
+++ b/source/blender/blenfont/BLF_api.h
@@ -34,6 +34,9 @@
#include "BLI_compiler_attrs.h"
+/* enable this only if needed (unused circa 2016) */
+#define BLF_BLUR_ENABLE 0
+
struct rctf;
struct ColorManagedDisplay;
struct ResultBLF;
@@ -42,6 +45,7 @@ int BLF_init(void);
void BLF_exit(void);
void BLF_default_dpi(int dpi);
void BLF_default_set(int fontid);
+int BLF_default(void); /* get default font ID so we can pass it to other functions */
void BLF_cache_clear(void);
@@ -61,6 +65,17 @@ void BLF_aspect(int fontid, float x, float y, float z);
void BLF_position(int fontid, float x, float y, float z);
void BLF_size(int fontid, int size, int dpi);
+/* goal: small but useful color API */
+void BLF_color4ubv(int fontid, const unsigned char rgba[4]);
+void BLF_color3ubv(int fontid, const unsigned char rgb[3]);
+void BLF_color3ubv_alpha(int fontid, const unsigned char rgb[3], unsigned char alpha);
+void BLF_color3ub(int fontid, unsigned char r, unsigned char g, unsigned char b);
+void BLF_color4f(int fontid, float r, float g, float b, float a);
+void BLF_color4fv(int fontid, const float rgba[4]);
+void BLF_color3f(int fontid, float r, float g, float b);
+void BLF_color3fv_alpha(int fontid, const float rgb[3], float alpha);
+/* also available: UI_FontThemeColor(fontid, colorid) */
+
/* Set a 4x4 matrix to be multiplied before draw the text.
* Remember that you need call BLF_enable(BLF_MATRIX)
* to enable this.
@@ -122,29 +137,16 @@ void BLF_width_and_height(int fontid, const char *str, size_t len, float *r_widt
*/
float BLF_fixed_width(int fontid) ATTR_WARN_UNUSED_RESULT;
-/* and this two function return the width and height
- * of the string, using the default font and both value
- * are multiplied by the aspect of the font.
- */
-void BLF_width_and_height_default(const char *str, size_t len, float *r_width, float *r_height) ATTR_NONNULL();
-float BLF_width_default(const char *str, size_t len) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
-float BLF_height_default(const char *str, size_t len) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
-
-/* Set rotation for default font. */
-void BLF_rotation_default(float angle);
-
-/* Enable/disable options to the default font. */
-void BLF_enable_default(int option);
-void BLF_disable_default(int option);
-
/* By default, rotation and clipping are disable and
* have to be enable/disable using BLF_enable/disable.
*/
void BLF_rotation(int fontid, float angle);
void BLF_clipping(int fontid, float xmin, float ymin, float xmax, float ymax);
-void BLF_clipping_default(float xmin, float ymin, float xmax, float ymax);
void BLF_wordwrap(int fontid, int wrap_width);
+
+#if BLF_BLUR_ENABLE
void BLF_blur(int fontid, int size);
+#endif
void BLF_enable(int fontid, int option);
void BLF_disable(int fontid, int option);
diff --git a/source/blender/blenfont/intern/blf.c b/source/blender/blenfont/intern/blf.c
index 5bd62980b6d..24347d57917 100644
--- a/source/blender/blenfont/intern/blf.c
+++ b/source/blender/blenfont/intern/blf.c
@@ -50,13 +50,14 @@
#include "BLI_math.h"
#include "BLI_threads.h"
-#include "BIF_gl.h"
#include "BLF_api.h"
#include "IMB_colormanagement.h"
#ifndef BLF_STANDALONE
-#include "GPU_basic_shader.h"
+#include "GPU_shader.h"
+#include "GPU_matrix.h"
+#include "GPU_immediate.h"
#endif
#include "blf_internal_types.h"
@@ -175,6 +176,12 @@ void BLF_default_set(int fontid)
}
}
+int BLF_default(void)
+{
+ ASSERT_DEFAULT_SET;
+ return global_font_default;
+}
+
int BLF_load(const char *name)
{
FontBLF *font;
@@ -358,24 +365,6 @@ void BLF_disable(int fontid, int option)
}
}
-void BLF_enable_default(int option)
-{
- FontBLF *font = blf_get(global_font_default);
-
- if (font) {
- font->flags |= option;
- }
-}
-
-void BLF_disable_default(int option)
-{
- FontBLF *font = blf_get(global_font_default);
-
- if (font) {
- font->flags &= ~option;
- }
-}
-
void BLF_aspect(int fontid, float x, float y, float z)
{
FontBLF *font = blf_get(fontid);
@@ -454,6 +443,7 @@ void BLF_size(int fontid, int size, int dpi)
}
}
+#if BLF_BLUR_ENABLE
void BLF_blur(int fontid, int size)
{
FontBLF *font = blf_get(fontid);
@@ -462,6 +452,77 @@ void BLF_blur(int fontid, int size)
font->blur = size;
}
}
+#endif
+
+void BLF_color4ubv(int fontid, const unsigned char rgba[4])
+{
+ FontBLF *font = blf_get(fontid);
+
+ if (font) {
+ font->color[0] = rgba[0];
+ font->color[1] = rgba[1];
+ font->color[2] = rgba[2];
+ font->color[3] = rgba[3];
+ }
+}
+
+void BLF_color3ubv_alpha(int fontid, const unsigned char rgb[3], unsigned char alpha)
+{
+ FontBLF *font = blf_get(fontid);
+
+ if (font) {
+ font->color[0] = rgb[0];
+ font->color[1] = rgb[1];
+ font->color[2] = rgb[2];
+ font->color[3] = alpha;
+ }
+}
+
+void BLF_color3ubv(int fontid, const unsigned char rgb[3])
+{
+ BLF_color3ubv_alpha(fontid, rgb, 255);
+}
+
+void BLF_color3ub(int fontid, unsigned char r, unsigned char g, unsigned char b)
+{
+ FontBLF *font = blf_get(fontid);
+
+ if (font) {
+ font->color[0] = r;
+ font->color[1] = g;
+ font->color[2] = b;
+ font->color[3] = 255;
+ }
+}
+
+void BLF_color4fv(int fontid, const float rgba[4])
+{
+ FontBLF *font = blf_get(fontid);
+
+ if (font) {
+ rgba_float_to_uchar(font->color, rgba);
+ }
+}
+
+void BLF_color4f(int fontid, float r, float g, float b, float a)
+{
+ float rgba[4] = { r, g, b, a };
+ BLF_color4fv(fontid, rgba);
+}
+
+void BLF_color3fv_alpha(int fontid, const float rgb[3], float alpha)
+{
+ float rgba[4];
+ copy_v3_v3(rgba, rgb);
+ rgba[3] = alpha;
+ BLF_color4fv(fontid, rgba);
+}
+
+void BLF_color3f(int fontid, float r, float g, float b)
+{
+ float rgba[4] = { r, g, b, 1.0f };
+ BLF_color4fv(fontid, rgba);
+}
void BLF_draw_default(float x, float y, float z, const char *str, size_t len)
{
@@ -482,16 +543,7 @@ void BLF_draw_default_ascii(float x, float y, float z, const char *str, size_t l
BLF_draw_ascii(global_font_default, str, len); /* XXX, use real length */
}
-void BLF_rotation_default(float angle)
-{
- FontBLF *font = blf_get(global_font_default);
-
- if (font) {
- font->angle = angle;
- }
-}
-
-static void blf_draw_gl__start(FontBLF *font, GLint *mode)
+static void blf_draw_gl__start(FontBLF *font)
{
/*
* The pixmap alignment hack is handle
@@ -501,52 +553,46 @@ static void blf_draw_gl__start(FontBLF *font, GLint *mode)
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-#ifndef BLF_STANDALONE
- GPU_basic_shader_bind(GPU_SHADER_TEXTURE_2D | GPU_SHADER_USE_COLOR);
-#endif
+ gpuPushMatrix();
- /* Save the current matrix mode. */
- glGetIntegerv(GL_MATRIX_MODE, mode);
+ if (font->flags & BLF_MATRIX)
+ gpuMultMatrix(font->m);
- glMatrixMode(GL_TEXTURE);
- glPushMatrix();
- glLoadIdentity();
+ gpuTranslate3fv(font->pos);
- glMatrixMode(GL_MODELVIEW);
- glPushMatrix();
+ if (font->flags & BLF_ASPECT)
+ gpuScale3fv(font->aspect);
- if (font->flags & BLF_MATRIX)
- glMultMatrixf(font->m);
+ if (font->flags & BLF_ROTATION)
+ gpuRotate2D(RAD2DEG(font->angle));
- glTranslate3fv(font->pos);
+#ifndef BLF_STANDALONE
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int texCoord = GWN_vertformat_attr_add(format, "texCoord", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 4, GWN_FETCH_INT_TO_FLOAT_UNIT);
- if (font->flags & BLF_ASPECT)
- glScalef(font->aspect[0], font->aspect[1], font->aspect[2]);
+ BLI_assert(pos == BLF_POS_ID);
+ BLI_assert(texCoord == BLF_COORD_ID);
+ BLI_assert(color == BLF_COLOR_ID);
- if (font->flags & BLF_ROTATION) /* radians -> degrees */
- glRotatef(font->angle * (float)(180.0 / M_PI), 0.0f, 0.0f, 1.0f);
+ UNUSED_VARS_NDEBUG(pos, texCoord, color);
- if (font->shadow || font->blur)
- glGetFloatv(GL_CURRENT_COLOR, font->orig_col);
+ immBindBuiltinProgram(GPU_SHADER_TEXT);
+#endif
/* always bind the texture for the first glyph */
font->tex_bind_state = -1;
}
-static void blf_draw_gl__end(GLint mode)
+static void blf_draw_gl__end(void)
{
- glMatrixMode(GL_TEXTURE);
- glPopMatrix();
-
- glMatrixMode(GL_MODELVIEW);
- glPopMatrix();
-
- if (mode != GL_MODELVIEW)
- glMatrixMode(mode);
+ gpuPopMatrix();
#ifndef BLF_STANDALONE
- GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
+ immUnbindProgram();
#endif
+
glDisable(GL_BLEND);
}
@@ -555,23 +601,26 @@ void BLF_draw_ex(
struct ResultBLF *r_info)
{
FontBLF *font = blf_get(fontid);
- GLint mode;
BLF_RESULT_CHECK_INIT(r_info);
if (font && font->glyph_cache) {
- blf_draw_gl__start(font, &mode);
+ blf_draw_gl__start(font);
if (font->flags & BLF_WORD_WRAP) {
blf_font_draw__wrap(font, str, len, r_info);
}
else {
blf_font_draw(font, str, len, r_info);
}
- blf_draw_gl__end(mode);
+ blf_draw_gl__end();
}
}
void BLF_draw(int fontid, const char *str, size_t len)
{
+ if (len == 0 || str[0] == '\0') {
+ return;
+ }
+
BLF_draw_ex(fontid, str, len, NULL);
}
@@ -580,12 +629,11 @@ void BLF_draw_ascii_ex(
struct ResultBLF *r_info)
{
FontBLF *font = blf_get(fontid);
- GLint mode;
BLF_RESULT_CHECK_INIT(r_info);
if (font && font->glyph_cache) {
- blf_draw_gl__start(font, &mode);
+ blf_draw_gl__start(font);
if (font->flags & BLF_WORD_WRAP) {
/* use non-ascii draw function for word-wrap */
blf_font_draw__wrap(font, str, len, r_info);
@@ -593,24 +641,31 @@ void BLF_draw_ascii_ex(
else {
blf_font_draw_ascii(font, str, len, r_info);
}
- blf_draw_gl__end(mode);
+ blf_draw_gl__end();
}
}
void BLF_draw_ascii(int fontid, const char *str, size_t len)
{
+ if (len == 0 || str[0] == '\0') {
+ return;
+ }
+
BLF_draw_ascii_ex(fontid, str, len, NULL);
}
int BLF_draw_mono(int fontid, const char *str, size_t len, int cwidth)
{
+ if (len == 0 || str[0] == '\0') {
+ return 0;
+ }
+
FontBLF *font = blf_get(fontid);
- GLint mode;
int columns = 0;
if (font && font->glyph_cache) {
- blf_draw_gl__start(font, &mode);
+ blf_draw_gl__start(font);
columns = blf_font_draw_mono(font, str, len, cwidth);
- blf_draw_gl__end(mode);
+ blf_draw_gl__end();
}
return columns;
@@ -690,14 +745,6 @@ void BLF_width_and_height(int fontid, const char *str, size_t len, float *r_widt
}
}
-void BLF_width_and_height_default(const char *str, size_t len, float *r_width, float *r_height)
-{
- ASSERT_DEFAULT_SET;
-
- BLF_size(global_font_default, global_font_points, global_font_dpi);
- BLF_width_and_height(global_font_default, str, len, r_width, r_height);
-}
-
float BLF_width_ex(
int fontid, const char *str, size_t len,
struct ResultBLF *r_info)
@@ -728,14 +775,6 @@ float BLF_fixed_width(int fontid)
return 0.0f;
}
-float BLF_width_default(const char *str, size_t len)
-{
- ASSERT_DEFAULT_SET;
-
- BLF_size(global_font_default, global_font_points, global_font_dpi);
- return BLF_width(global_font_default, str, len);
-}
-
float BLF_height_ex(
int fontid, const char *str, size_t len,
struct ResultBLF *r_info)
@@ -799,15 +838,6 @@ float BLF_ascender(int fontid)
return 0.0f;
}
-float BLF_height_default(const char *str, size_t len)
-{
- ASSERT_DEFAULT_SET;
-
- BLF_size(global_font_default, global_font_points, global_font_dpi);
-
- return BLF_height(global_font_default, str, len);
-}
-
void BLF_rotation(int fontid, float angle)
{
FontBLF *font = blf_get(fontid);
@@ -829,18 +859,6 @@ void BLF_clipping(int fontid, float xmin, float ymin, float xmax, float ymax)
}
}
-void BLF_clipping_default(float xmin, float ymin, float xmax, float ymax)
-{
- FontBLF *font = blf_get(global_font_default);
-
- if (font) {
- font->clip_rec.xmin = xmin;
- font->clip_rec.ymin = ymin;
- font->clip_rec.xmax = xmax;
- font->clip_rec.ymax = ymax;
- }
-}
-
void BLF_wordwrap(int fontid, int wrap_width)
{
FontBLF *font = blf_get(fontid);
@@ -856,7 +874,7 @@ void BLF_shadow(int fontid, int level, const float rgba[4])
if (font) {
font->shadow = level;
- copy_v4_v4(font->shadow_col, rgba);
+ rgba_float_to_uchar(font->shadow_color, rgba);
}
}
diff --git a/source/blender/blenfont/intern/blf_font.c b/source/blender/blenfont/intern/blf_font.c
index 44a1d08f1fd..5846f7a29e4 100644
--- a/source/blender/blenfont/intern/blf_font.c
+++ b/source/blender/blenfont/intern/blf_font.c
@@ -58,6 +58,8 @@
#include "BIF_gl.h"
#include "BLF_api.h"
+#include "GPU_immediate.h"
+
#include "blf_internal_types.h"
#include "blf_internal.h"
@@ -172,6 +174,23 @@ static void blf_font_ensure_ascii_table(FontBLF *font)
} \
} (void)0
+static unsigned int verts_needed(const FontBLF *font, const char *str, size_t len)
+{
+ unsigned int length = (unsigned int)((len == INT_MAX) ? strlen(str) : len);
+ unsigned int quad_ct = 1;
+
+ if (font->flags & BLF_SHADOW) {
+ if (font->shadow == 0)
+ quad_ct += 1;
+ if (font->shadow <= 4)
+ quad_ct += 9; /* 3x3 kernel */
+ else
+ quad_ct += 25; /* 5x5 kernel */
+ }
+
+ return length * quad_ct * 6;
+}
+
static void blf_font_draw_ex(
FontBLF *font, const char *str, size_t len, struct ResultBLF *r_info,
int pen_y)
@@ -183,10 +202,18 @@ static void blf_font_draw_ex(
size_t i = 0;
GlyphBLF **glyph_ascii_table = font->glyph_cache->glyph_ascii_table;
+ if (len == 0) {
+ /* early output, don't do any IMM OpenGL. */
+ return;
+ }
+
BLF_KERNING_VARS(font, has_kerning, kern_mode);
blf_font_ensure_ascii_table(font);
+ immBeginAtMost(GWN_PRIM_TRIS, verts_needed(font, str, len));
+ /* at most because some glyphs might be clipped & not drawn */
+
while ((i < len) && str[i]) {
BLF_UTF8_NEXT_FAST(font, g, str, i, c, glyph_ascii_table);
@@ -204,6 +231,8 @@ static void blf_font_draw_ex(
g_prev = g;
}
+ immEnd();
+
if (r_info) {
r_info->lines = 1;
r_info->width = pen_x;
@@ -229,6 +258,8 @@ static void blf_font_draw_ascii_ex(
blf_font_ensure_ascii_table(font);
+ immBeginAtMost(GWN_PRIM_TRIS, verts_needed(font, str, len));
+
while ((c = *(str++)) && len--) {
BLI_assert(c < 128);
if ((g = glyph_ascii_table[c]) == NULL)
@@ -243,6 +274,8 @@ static void blf_font_draw_ascii_ex(
g_prev = g;
}
+ immEnd();
+
if (r_info) {
r_info->lines = 1;
r_info->width = pen_x;
@@ -265,6 +298,8 @@ int blf_font_draw_mono(FontBLF *font, const char *str, size_t len, int cwidth)
blf_font_ensure_ascii_table(font);
+ immBeginAtMost(GWN_PRIM_TRIS, verts_needed(font, str, len));
+
while ((i < len) && str[i]) {
BLF_UTF8_NEXT_FAST(font, g, str, i, c, glyph_ascii_table);
@@ -284,6 +319,8 @@ int blf_font_draw_mono(FontBLF *font, const char *str, size_t len, int cwidth)
pen_x += cwidth * col;
}
+ immEnd();
+
return columns;
}
@@ -901,8 +938,6 @@ void blf_font_free(FontBLF *font)
static void blf_font_fill(FontBLF *font)
{
- unsigned int i;
-
font->aspect[0] = 1.0f;
font->aspect[1] = 1.0f;
font->aspect[2] = 1.0f;
@@ -910,9 +945,15 @@ static void blf_font_fill(FontBLF *font)
font->pos[1] = 0.0f;
font->angle = 0.0f;
- for (i = 0; i < 16; i++)
+ for (int i = 0; i < 16; i++)
font->m[i] = 0;
+ /* annoying bright color so we can see where to add BLF_color calls */
+ font->color[0] = 255;
+ font->color[1] = 255;
+ font->color[2] = 0;
+ font->color[3] = 255;
+
font->clip_rec.xmin = 0.0f;
font->clip_rec.xmax = 0.0f;
font->clip_rec.ymin = 0.0f;
@@ -922,7 +963,9 @@ static void blf_font_fill(FontBLF *font)
font->size = 0;
BLI_listbase_clear(&font->cache);
font->glyph_cache = NULL;
+#if BLF_BLUR_ENABLE
font->blur = 0;
+#endif
font->max_tex_size = -1;
font->buf_info.fbuf = NULL;
diff --git a/source/blender/blenfont/intern/blf_glyph.c b/source/blender/blenfont/intern/blf_glyph.c
index bbbabfb8ba2..a7d52e96800 100644
--- a/source/blender/blenfont/intern/blf_glyph.c
+++ b/source/blender/blenfont/intern/blf_glyph.c
@@ -56,7 +56,7 @@
#include "BLF_api.h"
#ifndef BLF_STANDALONE
-#include "GPU_basic_shader.h"
+#include "GPU_immediate.h"
#endif
#include "blf_internal_types.h"
@@ -183,18 +183,7 @@ static void blf_glyph_cache_texture(FontBLF *font, GlyphCacheBLF *gc)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
-
-#ifndef BLF_STANDALONE
- /* needed since basic shader doesn't support alpha-only textures,
- * while we could add support this is only used in a few places
- * (an alternative could be to have a simple shader for BLF). */
- if (GLEW_ARB_texture_swizzle && GPU_basic_shader_use_glsl_get()) {
- GLint swizzle_mask[] = {GL_ONE, GL_ONE, GL_ONE, GL_ALPHA};
- glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzle_mask);
- }
-#endif
-
- glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA8, gc->p2_width, gc->p2_height, 0, GL_ALPHA, GL_UNSIGNED_BYTE, NULL);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_R8, gc->p2_width, gc->p2_height, 0, GL_RED, GL_UNSIGNED_BYTE, NULL);
}
GlyphBLF *blf_glyph_search(GlyphCacheBLF *gc, unsigned int c)
@@ -327,73 +316,83 @@ void blf_glyph_free(GlyphBLF *g)
MEM_freeN(g);
}
-static void blf_texture_draw(float uv[2][2], float dx, float y1, float dx1, float y2)
+static void blf_texture_draw(const unsigned char color[4], float uv[2][2], float dx, float y1, float dx1, float y2)
{
- glBegin(GL_QUADS);
- glTexCoord2f(uv[0][0], uv[0][1]);
- glVertex2f(dx, y1);
-
- glTexCoord2f(uv[0][0], uv[1][1]);
- glVertex2f(dx, y2);
-
- glTexCoord2f(uv[1][0], uv[1][1]);
- glVertex2f(dx1, y2);
-
- glTexCoord2f(uv[1][0], uv[0][1]);
- glVertex2f(dx1, y1);
- glEnd();
+ /* First triangle. */
+ immAttrib2f(BLF_COORD_ID, uv[0][0], uv[0][1]);
+ immSkipAttrib(BLF_COLOR_ID); /* skip color of most vertices */
+ immVertex2f(BLF_POS_ID, dx, y1);
+
+ immAttrib2f(BLF_COORD_ID, uv[0][0], uv[1][1]);
+ immSkipAttrib(BLF_COLOR_ID);
+ immVertex2f(BLF_POS_ID, dx, y2);
+
+ immAttrib2f(BLF_COORD_ID, uv[1][0], uv[1][1]);
+ immAttrib4ubv(BLF_COLOR_ID, color); /* set color of provoking vertex */
+ immVertex2f(BLF_POS_ID, dx1, y2);
+
+ /* Second triangle. */
+ immAttrib2f(BLF_COORD_ID, uv[0][0], uv[0][1]);
+ immSkipAttrib(BLF_COLOR_ID); /* skip color of most vertices */
+ immVertex2f(BLF_POS_ID, dx, y1);
+
+ immAttrib2f(BLF_COORD_ID, uv[1][0], uv[1][1]);
+ immSkipAttrib(BLF_COLOR_ID);
+ immVertex2f(BLF_POS_ID, dx1, y2);
+
+ immAttrib2f(BLF_COORD_ID, uv[1][0], uv[0][1]);
+ immAttrib4ubv(BLF_COLOR_ID, color); /* set color of provoking vertex */
+ immVertex2f(BLF_POS_ID, dx1, y1);
}
-static void blf_texture5_draw(const float shadow_col[4], float uv[2][2], float x1, float y1, float x2, float y2)
+static void blf_texture5_draw(const unsigned char color_in[4], float uv[2][2], float x1, float y1, float x2, float y2)
{
const float soft[25] = {1 / 60.0f, 1 / 60.0f, 2 / 60.0f, 1 / 60.0f, 1 / 60.0f,
1 / 60.0f, 3 / 60.0f, 5 / 60.0f, 3 / 60.0f, 1 / 60.0f,
2 / 60.0f, 5 / 60.0f, 8 / 60.0f, 5 / 60.0f, 2 / 60.0f,
1 / 60.0f, 3 / 60.0f, 5 / 60.0f, 3 / 60.0f, 1 / 60.0f,
1 / 60.0f, 1 / 60.0f, 2 / 60.0f, 1 / 60.0f, 1 / 60.0f};
-
+
const float *fp = soft;
- float color[4];
+ unsigned char color[4];
float dx, dy;
- color[0] = shadow_col[0];
- color[1] = shadow_col[1];
- color[2] = shadow_col[2];
-
+ color[0] = color_in[0];
+ color[1] = color_in[1];
+ color[2] = color_in[2];
+
+ const float alpha_in = (1 / 255.0f) * color_in[3];
+
for (dx = -2; dx < 3; dx++) {
for (dy = -2; dy < 3; dy++, fp++) {
- color[3] = *(fp) * shadow_col[3];
- glColor4fv(color);
- blf_texture_draw(uv, x1 + dx, y1 + dy, x2 + dx, y2 + dy);
+ color[3] = FTOCHAR(*fp * alpha_in);
+ blf_texture_draw(color, uv, x1 + dx, y1 + dy, x2 + dx, y2 + dy);
}
}
-
- glColor4fv(color);
}
-static void blf_texture3_draw(const float shadow_col[4], float uv[2][2], float x1, float y1, float x2, float y2)
+static void blf_texture3_draw(const unsigned char color_in[4], float uv[2][2], float x1, float y1, float x2, float y2)
{
const float soft[9] = {1 / 16.0f, 2 / 16.0f, 1 / 16.0f,
2 / 16.0f, 4 / 16.0f, 2 / 16.0f,
1 / 16.0f, 2 / 16.0f, 1 / 16.0f};
const float *fp = soft;
- float color[4];
+ unsigned char color[4];
float dx, dy;
- color[0] = shadow_col[0];
- color[1] = shadow_col[1];
- color[2] = shadow_col[2];
+ color[0] = color_in[0];
+ color[1] = color_in[1];
+ color[2] = color_in[2];
+
+ const float alpha_in = (1 / 255.0f) * color_in[3];
for (dx = -1; dx < 2; dx++) {
for (dy = -1; dy < 2; dy++, fp++) {
- color[3] = *(fp) * shadow_col[3];
- glColor4fv(color);
- blf_texture_draw(uv, x1 + dx, y1 + dy, x2 + dx, y2 + dy);
+ color[3] = FTOCHAR(*fp * alpha_in);
+ blf_texture_draw(color, uv, x1 + dx, y1 + dy, x2 + dx, y2 + dy);
}
}
-
- glColor4fv(color);
}
static void blf_glyph_calc_rect(rctf *rect, GlyphBLF *g, float x, float y)
@@ -450,14 +449,21 @@ void blf_glyph_render(FontBLF *font, GlyphBLF *g, float x, float y)
}
- glPushClientAttrib(GL_CLIENT_PIXEL_STORE_BIT);
+ GLint lsb_first, row_length, alignment;
+ glGetIntegerv(GL_UNPACK_LSB_FIRST, &lsb_first);
+ glGetIntegerv(GL_UNPACK_ROW_LENGTH, &row_length);
+ glGetIntegerv(GL_UNPACK_ALIGNMENT, &alignment);
+
glPixelStorei(GL_UNPACK_LSB_FIRST, GL_FALSE);
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glBindTexture(GL_TEXTURE_2D, g->tex);
- glTexSubImage2D(GL_TEXTURE_2D, 0, g->xoff, g->yoff, g->width, g->height, GL_ALPHA, GL_UNSIGNED_BYTE, g->bitmap);
- glPopClientAttrib();
+ glTexSubImage2D(GL_TEXTURE_2D, 0, g->xoff, g->yoff, g->width, g->height, GL_RED, GL_UNSIGNED_BYTE, g->bitmap);
+
+ glPixelStorei(GL_UNPACK_LSB_FIRST, lsb_first);
+ glPixelStorei(GL_UNPACK_ROW_LENGTH, row_length);
+ glPixelStorei(GL_UNPACK_ALIGNMENT, alignment);
g->uv[0][0] = ((float)g->xoff) / ((float)gc->p2_width);
g->uv[0][1] = ((float)g->yoff) / ((float)gc->p2_height);
@@ -487,39 +493,37 @@ void blf_glyph_render(FontBLF *font, GlyphBLF *g, float x, float y)
glBindTexture(GL_TEXTURE_2D, (font->tex_bind_state = g->tex));
}
+ /* TODO: blur & shadow in shader, single quad per glyph */
+
if (font->flags & BLF_SHADOW) {
rctf rect_ofs;
blf_glyph_calc_rect(&rect_ofs, g,
x + (float)font->shadow_x,
y + (float)font->shadow_y);
- switch (font->shadow) {
- case 3:
- blf_texture3_draw(font->shadow_col, g->uv, rect_ofs.xmin, rect_ofs.ymin, rect_ofs.xmax, rect_ofs.ymax);
- break;
- case 5:
- blf_texture5_draw(font->shadow_col, g->uv, rect_ofs.xmin, rect_ofs.ymin, rect_ofs.xmax, rect_ofs.ymax);
- break;
- default:
- glColor4fv(font->shadow_col);
- blf_texture_draw(g->uv, rect_ofs.xmin, rect_ofs.ymin, rect_ofs.xmax, rect_ofs.ymax);
- break;
+ if (font->shadow == 0) {
+ blf_texture_draw(font->shadow_color, g->uv, rect_ofs.xmin, rect_ofs.ymin, rect_ofs.xmax, rect_ofs.ymax);
+ }
+ else if (font->shadow <= 4) {
+ blf_texture3_draw(font->shadow_color, g->uv, rect_ofs.xmin, rect_ofs.ymin, rect_ofs.xmax, rect_ofs.ymax);
+ }
+ else {
+ blf_texture5_draw(font->shadow_color, g->uv, rect_ofs.xmin, rect_ofs.ymin, rect_ofs.xmax, rect_ofs.ymax);
}
-
- glColor4fv(font->orig_col);
}
+#if BLF_BLUR_ENABLE
switch (font->blur) {
case 3:
- blf_texture3_draw(font->orig_col, g->uv, rect.xmin, rect.ymin, rect.xmax, rect.ymax);
+ blf_texture3_draw(font->color, g->uv, rect.xmin, rect.ymin, rect.xmax, rect.ymax);
break;
case 5:
- blf_texture5_draw(font->orig_col, g->uv, rect.xmin, rect.ymin, rect.xmax, rect.ymax);
+ blf_texture5_draw(font->color, g->uv, rect.xmin, rect.ymin, rect.xmax, rect.ymax);
break;
default:
- blf_texture_draw(g->uv, rect.xmin, rect.ymin, rect.xmax, rect.ymax);
- break;
+ blf_texture_draw(font->color, g->uv, rect.xmin, rect.ymin, rect.xmax, rect.ymax);
}
-
- return;
+#else
+ blf_texture_draw(font->color, g->uv, rect.xmin, rect.ymin, rect.xmax, rect.ymax);
+#endif
}
diff --git a/source/blender/blenfont/intern/blf_internal.h b/source/blender/blenfont/intern/blf_internal.h
index d9d758ce548..ba17e050399 100644
--- a/source/blender/blenfont/intern/blf_internal.h
+++ b/source/blender/blenfont/intern/blf_internal.h
@@ -37,6 +37,11 @@ struct GlyphBLF;
struct GlyphCacheBLF;
struct rctf;
+/* vertex attribute IDs (fixed IDs so we don't have to pass them around) */
+#define BLF_POS_ID 0
+#define BLF_COORD_ID 1
+#define BLF_COLOR_ID 2
+
unsigned int blf_next_p2(unsigned int x);
unsigned int blf_hash(unsigned int val);
diff --git a/source/blender/blenfont/intern/blf_internal_types.h b/source/blender/blenfont/intern/blf_internal_types.h
index 0fac576a8cc..9164a02b2cc 100644
--- a/source/blender/blenfont/intern/blf_internal_types.h
+++ b/source/blender/blenfont/intern/blf_internal_types.h
@@ -175,8 +175,10 @@ typedef struct FontBLF {
/* angle in radians. */
float angle;
+#if 0 /* BLF_BLUR_ENABLE */
/* blur: 3 or 5 large kernel */
int blur;
+#endif
/* shadow level. */
int shadow;
@@ -186,10 +188,10 @@ typedef struct FontBLF {
int shadow_y;
/* shadow color. */
- float shadow_col[4];
+ unsigned char shadow_color[4];
- /* store color here when drawing shadow or blur. */
- float orig_col[4];
+ /* main text color. */
+ unsigned char color[4];
/* Multiplied this matrix with the current one before
* draw the text! see blf_draw__start.
diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h b/source/blender/blenkernel/BKE_DerivedMesh.h
index 700bfe568f1..c3cea6c883c 100644
--- a/source/blender/blenkernel/BKE_DerivedMesh.h
+++ b/source/blender/blenkernel/BKE_DerivedMesh.h
@@ -98,6 +98,9 @@ struct ColorBand;
struct GPUVertexAttribs;
struct GPUDrawObject;
struct PBVH;
+struct EvaluationContext;
+
+#include "DNA_object_enums.h"
/* number of sub-elements each mesh element has (for interpolation) */
#define SUB_ELEMS_VERT 0
@@ -142,8 +145,6 @@ typedef int (*DMSetMaterial)(int mat_nr, void *attribs);
typedef int (*DMCompareDrawOptions)(void *userData, int cur_index, int next_index);
typedef void (*DMSetDrawInterpOptions)(void *userData, int index, float t);
typedef DMDrawOption (*DMSetDrawOptions)(void *userData, int index);
-typedef DMDrawOption (*DMSetDrawOptionsMappedTex)(void *userData, int origindex, int mat_nr);
-typedef DMDrawOption (*DMSetDrawOptionsTex)(struct MTexPoly *mtexpoly, const bool has_vcol, int matnr);
typedef enum DMDrawFlag {
DM_DRAW_USE_COLORS = (1 << 0),
@@ -382,16 +383,13 @@ struct DerivedMesh {
/** Get the BVH used for paint modes
*/
- struct PBVH *(*getPBVH)(struct Object *ob, DerivedMesh *dm);
+ struct PBVH *(*getPBVH)(struct Object *ob, DerivedMesh *dm, eObjectMode object_mode);
/* Drawing Operations */
/** Draw all vertices as bgl points (no options) */
void (*drawVerts)(DerivedMesh *dm);
- /** Draw edges in the UV mesh (if exists) */
- void (*drawUVEdges)(DerivedMesh *dm);
-
/** Draw all edges as lines (no options)
*
* Also called for *final* editmode DerivedMeshes
@@ -411,14 +409,6 @@ struct DerivedMesh {
void (*drawFacesSolid)(DerivedMesh *dm, float (*partial_redraw_planes)[4],
bool fast, DMSetMaterial setMaterial);
- /** Draw all faces using MTFace
- * - Drawing options too complicated to enumerate, look at code.
- */
- void (*drawFacesTex)(DerivedMesh *dm,
- DMSetDrawOptionsTex setDrawOptions,
- DMCompareDrawOptions compareDrawOptions,
- void *userData, DMDrawFlag flag);
-
/** Draw all faces with GLSL materials
* o setMaterial is called for every different material nr
* o Only if setMaterial returns true
@@ -445,14 +435,6 @@ struct DerivedMesh {
void *userData,
DMDrawFlag flag);
- /** Draw mapped faces using MTFace
- * - Drawing options too complicated to enumerate, look at code.
- */
- void (*drawMappedFacesTex)(DerivedMesh *dm,
- DMSetDrawOptionsMappedTex setDrawOptions,
- DMCompareDrawOptions compareDrawOptions,
- void *userData, DMDrawFlag flag);
-
/** Draw mapped faces with GLSL materials
* - setMaterial is called for every different material nr
* - setDrawOptions is called for every face
@@ -680,56 +662,56 @@ void mesh_get_mapped_verts_coords(DerivedMesh *dm, float (*r_cos)[3], const int
/* */
DerivedMesh *mesh_get_derived_final(
- struct Scene *scene, struct Object *ob,
- CustomDataMask dataMask);
+ const struct EvaluationContext *eval_ctx, struct Scene *scene,
+ struct Object *ob, CustomDataMask dataMask);
DerivedMesh *mesh_get_derived_deform(
- struct Scene *scene, struct Object *ob,
- CustomDataMask dataMask);
+ const struct EvaluationContext *eval_ctx, struct Scene *scene,
+ struct Object *ob, CustomDataMask dataMask);
DerivedMesh *mesh_create_derived_for_modifier(
- struct Scene *scene, struct Object *ob,
+ const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob,
struct ModifierData *md, int build_shapekey_layers);
DerivedMesh *mesh_create_derived_render(
- struct Scene *scene, struct Object *ob,
- CustomDataMask dataMask);
+ const struct EvaluationContext *eval_ctx, struct Scene *scene,
+ struct Object *ob, CustomDataMask dataMask);
DerivedMesh *getEditDerivedBMesh(
struct BMEditMesh *em, struct Object *ob, CustomDataMask data_mask,
float (*vertexCos)[3]);
DerivedMesh *mesh_create_derived_index_render(
- struct Scene *scene, struct Object *ob,
- CustomDataMask dataMask, int index);
+ const struct EvaluationContext *eval_ctx, struct Scene *scene,
+ struct Object *ob, CustomDataMask dataMask, int index);
/* same as above but wont use render settings */
DerivedMesh *mesh_create_derived(struct Mesh *me, float (*vertCos)[3]);
DerivedMesh *mesh_create_derived_view(
- struct Scene *scene, struct Object *ob,
- CustomDataMask dataMask);
+ const struct EvaluationContext *eval_ctx, struct Scene *scene,
+ struct Object *ob, CustomDataMask dataMask);
DerivedMesh *mesh_create_derived_no_deform(
- struct Scene *scene, struct Object *ob,
- float (*vertCos)[3],
+ const struct EvaluationContext *eval_ctx, struct Scene *scene,
+ struct Object *ob, float (*vertCos)[3],
CustomDataMask dataMask);
DerivedMesh *mesh_create_derived_no_deform_render(
- struct Scene *scene, struct Object *ob,
- float (*vertCos)[3],
+ const struct EvaluationContext *eval_ctx, struct Scene *scene,
+ struct Object *ob, float (*vertCos)[3],
CustomDataMask dataMask);
/* for gameengine */
DerivedMesh *mesh_create_derived_no_virtual(
- struct Scene *scene, struct Object *ob, float (*vertCos)[3],
- CustomDataMask dataMask);
+ const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob,
+ float (*vertCos)[3], CustomDataMask dataMask);
DerivedMesh *mesh_create_derived_physics(
- struct Scene *scene, struct Object *ob, float (*vertCos)[3],
- CustomDataMask dataMask);
+ const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob,
+ float (*vertCos)[3], CustomDataMask dataMask);
DerivedMesh *editbmesh_get_derived_base(
struct Object *ob, struct BMEditMesh *em, CustomDataMask data_mask);
DerivedMesh *editbmesh_get_derived_cage(
- struct Scene *scene, struct Object *,
+ const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *,
struct BMEditMesh *em, CustomDataMask dataMask);
DerivedMesh *editbmesh_get_derived_cage_and_final(
- struct Scene *scene, struct Object *,
+ const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *,
struct BMEditMesh *em, CustomDataMask dataMask,
DerivedMesh **r_final);
@@ -738,7 +720,7 @@ DerivedMesh *object_get_derived_final(struct Object *ob, const bool for_render);
float (*editbmesh_get_vertex_cos(struct BMEditMesh *em, int *r_numVerts))[3];
bool editbmesh_modifier_is_enabled(struct Scene *scene, struct ModifierData *md, DerivedMesh *dm);
void makeDerivedMesh(
- struct Scene *scene, struct Object *ob, struct BMEditMesh *em,
+ const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob, struct BMEditMesh *em,
CustomDataMask dataMask, const bool build_shapekey_layers);
void weight_to_rgb(float r_rgb[3], const float weight);
@@ -789,19 +771,15 @@ void DM_draw_attrib_vertex_uniforms(const DMVertexAttribs *attribs);
void DM_calc_tangents_names_from_gpu(
const struct GPUVertexAttribs *gattribs,
char (*tangent_names)[MAX_NAME], int *tangent_names_count);
+
void DM_add_named_tangent_layer_for_uv(
CustomData *uv_data, CustomData *tan_data, int numLoopData,
const char *layer_name);
-#define DM_TANGENT_MASK_ORCO (1 << 9)
-void DM_calc_loop_tangents_step_0(
- const CustomData *loopData, bool calc_active_tangent,
- const char (*tangent_names)[MAX_NAME], int tangent_names_count,
- bool *rcalc_act, bool *rcalc_ren, int *ract_uv_n, int *rren_uv_n,
- char *ract_uv_name, char *rren_uv_name, short *rtangent_mask);
void DM_calc_loop_tangents(
DerivedMesh *dm, bool calc_active_tangent, const char (*tangent_names)[MAX_NAME],
int tangent_names_count);
+
void DM_calc_auto_bump_scale(DerivedMesh *dm);
/** Set object's bounding box based on DerivedMesh min/max data */
diff --git a/source/blender/blenkernel/BKE_anim.h b/source/blender/blenkernel/BKE_anim.h
index 584f0da323a..30a7bdb0a27 100644
--- a/source/blender/blenkernel/BKE_anim.h
+++ b/source/blender/blenkernel/BKE_anim.h
@@ -41,6 +41,7 @@ struct bAnimVizSettings;
struct bMotionPath;
struct bPoseChannel;
struct ReportList;
+struct Main;
/* ---------------------------------------------------- */
/* Animation Visualization */
@@ -53,7 +54,7 @@ void animviz_free_motionpath(struct bMotionPath *mpath);
struct bMotionPath *animviz_verify_motionpaths(struct ReportList *reports, struct Scene *scene, struct Object *ob, struct bPoseChannel *pchan);
void animviz_get_object_motionpaths(struct Object *ob, ListBase *targets);
-void animviz_calc_motionpaths(struct Scene *scene, ListBase *targets);
+void animviz_calc_motionpaths(struct EvaluationContext *eval_ctx, struct Main *bmain, struct Scene *scene, ListBase *targets);
/* ---------------------------------------------------- */
/* Curve Paths */
@@ -65,8 +66,8 @@ int where_on_path(struct Object *ob, float ctime, float vec[4], float dir[3], fl
/* ---------------------------------------------------- */
/* Dupli-Geometry */
-struct ListBase *object_duplilist_ex(struct EvaluationContext *eval_ctx, struct Scene *sce, struct Object *ob, bool update);
-struct ListBase *object_duplilist(struct EvaluationContext *eval_ctx, struct Scene *sce, struct Object *ob);
+struct ListBase *object_duplilist_ex(const struct EvaluationContext *eval_ctx, struct Scene *sce, struct Object *ob, bool update);
+struct ListBase *object_duplilist(const struct EvaluationContext *eval_ctx, struct Scene *sce, struct Object *ob);
void free_object_duplilist(struct ListBase *lb);
int count_duplilist(struct Object *ob);
@@ -80,7 +81,7 @@ typedef struct DupliApplyData {
DupliExtraData *extra;
} DupliApplyData;
-DupliApplyData *duplilist_apply(struct Object *ob, struct Scene *scene, struct ListBase *duplilist);
+DupliApplyData *duplilist_apply(const struct EvaluationContext *eval_ctx, struct Object *ob, struct Scene *scene, struct ListBase *duplilist);
void duplilist_restore(struct ListBase *duplilist, DupliApplyData *apply_data);
void duplilist_free_apply_data(DupliApplyData *apply_data);
diff --git a/source/blender/blenkernel/BKE_animsys.h b/source/blender/blenkernel/BKE_animsys.h
index a70690d4029..d95b4a838b8 100644
--- a/source/blender/blenkernel/BKE_animsys.h
+++ b/source/blender/blenkernel/BKE_animsys.h
@@ -47,6 +47,7 @@ struct ReportList;
struct bAction;
struct bActionGroup;
struct AnimMapper;
+struct FCurve;
/* ************************************* */
/* AnimData API */
@@ -148,7 +149,7 @@ char *BKE_animdata_driver_path_hack(struct bContext *C, struct PointerRNA *ptr,
char *base_path);
/* ************************************* */
-/* Batch AnimData API */
+/* Gwn_Batch AnimData API */
/* Define for callback looper used in BKE_animdata_main_cb */
typedef void (*ID_AnimData_Edit_Callback)(struct ID *id, struct AnimData *adt, void *user_data);
@@ -179,7 +180,6 @@ void BKE_animsys_evaluate_animdata(struct Scene *scene, struct ID *id, struct An
void BKE_animsys_evaluate_all_animation(struct Main *main, struct Scene *scene, float ctime);
/* TODO(sergey): This is mainly a temp public function. */
-struct FCurve;
bool BKE_animsys_execute_fcurve(struct PointerRNA *ptr, struct AnimMapper *remap, struct FCurve *fcu, float curval);
/* ------------ Specialized API --------------- */
@@ -202,8 +202,8 @@ void animsys_evaluate_action_group(struct PointerRNA *ptr, struct bAction *act,
struct EvaluationContext;
-void BKE_animsys_eval_animdata(struct EvaluationContext *eval_ctx, struct ID *id);
-void BKE_animsys_eval_driver(struct EvaluationContext *eval_ctx, struct ID *id, struct FCurve *fcurve);
+void BKE_animsys_eval_animdata(const struct EvaluationContext *eval_ctx, struct ID *id);
+void BKE_animsys_eval_driver(const struct EvaluationContext *eval_ctx, struct ID *id, struct FCurve *fcurve);
/* ************************************* */
diff --git a/source/blender/blenkernel/BKE_appdir.h b/source/blender/blenkernel/BKE_appdir.h
index ac8f861fa56..ffbdc6972f4 100644
--- a/source/blender/blenkernel/BKE_appdir.h
+++ b/source/blender/blenkernel/BKE_appdir.h
@@ -82,6 +82,7 @@ enum {
#define BLENDER_STARTUP_FILE "startup.blend"
#define BLENDER_USERPREF_FILE "userpref.blend"
+#define BLENDER_WORKSPACES_FILE "workspaces.blend"
#define BLENDER_QUIT_FILE "quit.blend"
#define BLENDER_BOOKMARK_FILE "bookmarks.txt"
#define BLENDER_HISTORY_FILE "recent-files.txt"
diff --git a/source/blender/blenkernel/BKE_armature.h b/source/blender/blenkernel/BKE_armature.h
index 60fb79d75d5..192690c074c 100644
--- a/source/blender/blenkernel/BKE_armature.h
+++ b/source/blender/blenkernel/BKE_armature.h
@@ -33,7 +33,9 @@
* \author nzc
*/
+struct bPose;
struct Bone;
+struct EvaluationContext;
struct GHash;
struct Main;
struct bArmature;
@@ -98,9 +100,8 @@ void BKE_armature_where_is(struct bArmature *arm);
void BKE_armature_where_is_bone(struct Bone *bone, struct Bone *prevbone, const bool use_recursion);
void BKE_pose_clear_pointers(struct bPose *pose);
void BKE_pose_rebuild(struct Object *ob, struct bArmature *arm);
-void BKE_pose_rebuild_ex(struct Object *ob, struct bArmature *arm, const bool sort_bones);
-void BKE_pose_where_is(struct Scene *scene, struct Object *ob);
-void BKE_pose_where_is_bone(struct Scene *scene, struct Object *ob, struct bPoseChannel *pchan, float ctime, bool do_extra);
+void BKE_pose_where_is(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob);
+void BKE_pose_where_is_bone(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob, struct bPoseChannel *pchan, float ctime, bool do_extra);
void BKE_pose_where_is_bone_tail(struct bPoseChannel *pchan);
/* get_objectspace_bone_matrix has to be removed still */
@@ -117,7 +118,7 @@ void BKE_armature_loc_pose_to_bone(struct bPoseChannel *pchan, const float inloc
void BKE_armature_mat_bone_to_pose(struct bPoseChannel *pchan, float inmat[4][4], float outmat[4][4]);
void BKE_armature_mat_pose_to_delta(float delta_mat[4][4], float pose_mat[4][4], float arm_mat[4][4]);
-void BKE_armature_mat_pose_to_bone_ex(struct Object *ob, struct bPoseChannel *pchan, float inmat[4][4], float outmat[4][4]);
+void BKE_armature_mat_pose_to_bone_ex(const struct EvaluationContext *eval_ctx, struct Object *ob, struct bPoseChannel *pchan, float inmat[4][4], float outmat[4][4]);
void BKE_pchan_mat3_to_rot(struct bPoseChannel *pchan, float mat[3][3], bool use_compat);
void BKE_pchan_apply_mat4(struct bPoseChannel *pchan, float mat[4][4], bool use_comat);
@@ -155,7 +156,6 @@ void b_bone_spline_setup(struct bPoseChannel *pchan, int rest, Mat4 result_array
struct bKinematicConstraint;
struct bPose;
struct bSplineIKConstraint;
-struct EvaluationContext;
struct bPoseChannel *BKE_armature_ik_solver_find_root(
struct bPoseChannel *pchan,
@@ -165,47 +165,49 @@ struct bPoseChannel *BKE_armature_splineik_solver_find_root(
struct bSplineIKConstraint *data);
void BKE_pose_splineik_init_tree(struct Scene *scene, struct Object *ob, float ctime);
-void BKE_splineik_execute_tree(struct Scene *scene, struct Object *ob, struct bPoseChannel *pchan_root, float ctime);
+void BKE_splineik_execute_tree(
+ const struct EvaluationContext *eval_ctx, struct Scene *scene,
+ struct Object *ob, struct bPoseChannel *pchan_root, float ctime);
-void BKE_pose_eval_init(struct EvaluationContext *eval_ctx,
+void BKE_pose_eval_init(const struct EvaluationContext *eval_ctx,
struct Scene *scene,
struct Object *ob,
struct bPose *pose);
-void BKE_pose_eval_init_ik(struct EvaluationContext *eval_ctx,
+void BKE_pose_eval_init_ik(const struct EvaluationContext *eval_ctx,
struct Scene *scene,
struct Object *ob,
struct bPose *pose);
-void BKE_pose_eval_bone(struct EvaluationContext *eval_ctx,
+void BKE_pose_eval_bone(const struct EvaluationContext *eval_ctx,
struct Scene *scene,
struct Object *ob,
struct bPoseChannel *pchan);
-void BKE_pose_constraints_evaluate(struct EvaluationContext *eval_ctx,
+void BKE_pose_constraints_evaluate(const struct EvaluationContext *eval_ctx,
struct Scene *scene,
struct Object *ob,
struct bPoseChannel *pchan);
-void BKE_pose_bone_done(struct EvaluationContext *eval_ctx,
+void BKE_pose_bone_done(const struct EvaluationContext *eval_ctx,
struct bPoseChannel *pchan);
-void BKE_pose_iktree_evaluate(struct EvaluationContext *eval_ctx,
+void BKE_pose_iktree_evaluate(const struct EvaluationContext *eval_ctx,
struct Scene *scene,
struct Object *ob,
struct bPoseChannel *rootchan);
-void BKE_pose_splineik_evaluate(struct EvaluationContext *eval_ctx,
+void BKE_pose_splineik_evaluate(const struct EvaluationContext *eval_ctx,
struct Scene *scene,
struct Object *ob,
struct bPoseChannel *rootchan);
-void BKE_pose_eval_flush(struct EvaluationContext *eval_ctx,
+void BKE_pose_eval_flush(const struct EvaluationContext *eval_ctx,
struct Scene *scene,
struct Object *ob,
struct bPose *pose);
-void BKE_pose_eval_proxy_copy(struct EvaluationContext *eval_ctx,
+void BKE_pose_eval_proxy_copy(const struct EvaluationContext *eval_ctx,
struct Object *ob);
#ifdef __cplusplus
diff --git a/source/blender/blenkernel/BKE_blender_version.h b/source/blender/blenkernel/BKE_blender_version.h
index c99da724794..ceb466ebdcd 100644
--- a/source/blender/blenkernel/BKE_blender_version.h
+++ b/source/blender/blenkernel/BKE_blender_version.h
@@ -27,8 +27,8 @@
/* these lines are grep'd, watch out for our not-so-awesome regex
* and keep comment above the defines.
* Use STRINGIFY() rather than defining with quotes */
-#define BLENDER_VERSION 279
-#define BLENDER_SUBVERSION 2
+#define BLENDER_VERSION 280
+#define BLENDER_SUBVERSION 4
/* Several breakages with 270, e.g. constraint deg vs rad */
#define BLENDER_MINVERSION 270
#define BLENDER_MINSUBVERSION 6
diff --git a/source/blender/blenkernel/BKE_blendfile.h b/source/blender/blenkernel/BKE_blendfile.h
index 9ff164f60be..a9a7e2045f0 100644
--- a/source/blender/blenkernel/BKE_blendfile.h
+++ b/source/blender/blenkernel/BKE_blendfile.h
@@ -61,6 +61,10 @@ struct UserDef *BKE_blendfile_userdef_read_from_memory(
bool BKE_blendfile_userdef_write(const char *filepath, struct ReportList *reports);
bool BKE_blendfile_userdef_write_app_template(const char *filepath, struct ReportList *reports);
+struct WorkspaceConfigFileData *BKE_blendfile_workspace_config_read(const char *filepath, struct ReportList *reports);
+bool BKE_blendfile_workspace_config_write(struct Main *bmain, const char *filepath, struct ReportList *reports);
+void BKE_blendfile_workspace_config_data_free(struct WorkspaceConfigFileData *workspace_config);
+
/* partial blend file writing */
void BKE_blendfile_write_partial_tag_ID(struct ID *id, bool set);
void BKE_blendfile_write_partial_begin(struct Main *bmain_src);
diff --git a/source/blender/blenkernel/BKE_cachefile.h b/source/blender/blenkernel/BKE_cachefile.h
index e9712681090..e0419d0e749 100644
--- a/source/blender/blenkernel/BKE_cachefile.h
+++ b/source/blender/blenkernel/BKE_cachefile.h
@@ -65,7 +65,7 @@ bool BKE_cachefile_filepath_get(
float BKE_cachefile_time_offset(struct CacheFile *cache_file, const float time, const float fps);
-void BKE_cachefile_clean(struct Scene *scene, struct CacheFile *cache_file);
+void BKE_cachefile_clean(struct Main *bmain, struct CacheFile *cache_file);
#ifdef __cplusplus
}
diff --git a/source/blender/blenkernel/BKE_camera.h b/source/blender/blenkernel/BKE_camera.h
index 04dee70faa6..d5bf2177f71 100644
--- a/source/blender/blenkernel/BKE_camera.h
+++ b/source/blender/blenkernel/BKE_camera.h
@@ -39,11 +39,13 @@ extern "C" {
#include "DNA_vec_types.h"
struct Camera;
+struct Depsgraph;
struct Main;
struct Object;
struct RegionView3D;
struct RenderData;
struct Scene;
+struct ViewLayer;
struct rctf;
struct View3D;
struct GPUFXSettings;
@@ -112,7 +114,7 @@ typedef struct CameraParams {
void BKE_camera_params_init(CameraParams *params);
void BKE_camera_params_from_object(CameraParams *params, const struct Object *camera);
-void BKE_camera_params_from_view3d(CameraParams *params, const struct View3D *v3d, const struct RegionView3D *rv3d);
+void BKE_camera_params_from_view3d(CameraParams *params, const struct Depsgraph *depsgraph, const struct View3D *v3d, const struct RegionView3D *rv3d);
void BKE_camera_params_compute_viewplane(CameraParams *params, int winx, int winy, float aspx, float aspy);
void BKE_camera_params_compute_matrix(CameraParams *params);
@@ -128,7 +130,7 @@ void BKE_camera_view_frame(
float r_vec[4][3]);
bool BKE_camera_view_frame_fit_to_scene(
- struct Scene *scene, struct View3D *v3d, struct Object *camera_ob,
+ struct Scene *scene, struct ViewLayer *view_layer, struct Object *camera_ob,
float r_co[3], float *r_scale);
bool BKE_camera_view_frame_fit_to_coords(
const struct Scene *scene,
@@ -147,6 +149,11 @@ float BKE_camera_multiview_shift_x(struct RenderData *rd, struct Object
void BKE_camera_multiview_params(struct RenderData *rd, struct CameraParams *params, struct Object *camera, const char *viewname);
bool BKE_camera_multiview_spherical_stereo(struct RenderData *rd, struct Object *camera);
+/* Camera background image API */
+struct CameraBGImage *BKE_camera_background_image_new(struct Camera *cam);
+void BKE_camera_background_image_remove(struct Camera *cam, struct CameraBGImage *bgpic);
+void BKE_camera_background_image_clear(struct Camera *cam);
+
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/blenkernel/BKE_cloth.h b/source/blender/blenkernel/BKE_cloth.h
index 6c517bd02df..27b928c1671 100644
--- a/source/blender/blenkernel/BKE_cloth.h
+++ b/source/blender/blenkernel/BKE_cloth.h
@@ -41,6 +41,7 @@ struct MFace;
struct DerivedMesh;
struct ClothModifierData;
struct CollisionModifierData;
+struct EvaluationContext;
#define DO_INLINE MALWAYS_INLINE
@@ -226,7 +227,7 @@ void cloth_free_contacts(ColliderContacts *collider_contacts, int totcolliders);
void cloth_free_modifier_extern (struct ClothModifierData *clmd );
void cloth_free_modifier (struct ClothModifierData *clmd );
void cloth_init (struct ClothModifierData *clmd );
-void clothModifier_do (struct ClothModifierData *clmd, struct Scene *scene, struct Object *ob, struct DerivedMesh *dm, float (*vertexCos)[3]);
+void clothModifier_do(struct ClothModifierData *clmd, const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob, struct DerivedMesh *dm, float (*vertexCos)[3]);
int cloth_uses_vgroup(struct ClothModifierData *clmd);
@@ -235,7 +236,9 @@ void bvhtree_update_from_cloth(struct ClothModifierData *clmd, bool moving);
void bvhselftree_update_from_cloth(struct ClothModifierData *clmd, bool moving);
// needed for button_object.c
-void cloth_clear_cache (struct Object *ob, struct ClothModifierData *clmd, float framenr );
+void cloth_clear_cache(
+ const struct EvaluationContext *eval_ctx,
+ struct Object *ob, struct ClothModifierData *clmd, float framenr );
void cloth_parallel_transport_hair_frame(float mat[3][3], const float dir_old[3], const float dir_new[3]);
diff --git a/source/blender/blenkernel/BKE_collection.h b/source/blender/blenkernel/BKE_collection.h
new file mode 100644
index 00000000000..618e60550b7
--- /dev/null
+++ b/source/blender/blenkernel/BKE_collection.h
@@ -0,0 +1,108 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Dalai Felinto
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef __BKE_COLLECTION_H__
+#define __BKE_COLLECTION_H__
+
+/** \file blender/blenkernel/BKE_collection.h
+ * \ingroup bke
+ */
+
+#include "BLI_ghash.h"
+#include "BLI_iterator.h"
+#include "DNA_listBase.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct Base;
+struct BLI_Iterator;
+struct Group;
+struct ID;
+struct LayerCollection;
+struct Main;
+struct Object;
+struct Scene;
+struct SceneCollection;
+
+struct SceneCollection *BKE_collection_add(
+ struct ID *owner_id, struct SceneCollection *sc_parent, const int type, const char *name);
+bool BKE_collection_remove(struct ID *owner_id, struct SceneCollection *sc);
+void BKE_collection_copy_data(struct SceneCollection *sc_dst, struct SceneCollection *sc_src, const int flag);
+struct SceneCollection *BKE_collection_duplicate(struct ID *owner_id, struct SceneCollection *scene_collection);
+struct SceneCollection *BKE_collection_master(const struct ID *owner_id);
+void BKE_collection_rename(const struct Scene *scene, struct SceneCollection *sc, const char *name);
+void BKE_collection_master_free(struct ID *owner_id, const bool do_id_user);
+bool BKE_collection_object_add(const struct ID *owner_id, struct SceneCollection *sc, struct Object *object);
+void BKE_collection_object_add_from(struct Scene *scene, struct Object *ob_src, struct Object *ob_dst);
+bool BKE_collection_object_remove(struct Main *bmain, struct ID *owner_id, struct SceneCollection *sc, struct Object *object, const bool free_us);
+bool BKE_collections_object_remove(struct Main *bmain, struct ID *owner_id, struct Object *object, const bool free_us);
+void BKE_collection_object_move(struct ID *owner_id, struct SceneCollection *sc_dst, struct SceneCollection *sc_src, struct Object *ob);
+
+struct Group *BKE_collection_group_create(struct Main *bmain, struct Scene *scene, struct LayerCollection *lc);
+
+void BKE_collection_reinsert_after(const struct Scene *scene, struct SceneCollection *sc_reinsert, struct SceneCollection *sc_after);
+void BKE_collection_reinsert_into(struct SceneCollection *sc_reinsert, struct SceneCollection *sc_into);
+
+bool BKE_collection_move_above(const struct ID *owner_id, struct SceneCollection *sc_dst, struct SceneCollection *sc_src);
+bool BKE_collection_move_below(const struct ID *owner_id, struct SceneCollection *sc_dst, struct SceneCollection *sc_src);
+bool BKE_collection_move_into(const struct ID *owner_id, struct SceneCollection *sc_dst, struct SceneCollection *sc_src);
+
+typedef void (*BKE_scene_objects_Cb)(struct Object *ob, void *data);
+typedef void (*BKE_scene_collections_Cb)(struct SceneCollection *ob, void *data);
+
+void BKE_scene_collections_callback(struct Scene *scene, BKE_scene_collections_Cb callback, void *data);
+void BKE_scene_objects_callback(struct Scene *scene, BKE_scene_objects_Cb callback, void *data);
+
+/* iterators */
+void BKE_scene_collections_iterator_begin(struct BLI_Iterator *iter, void *data_in);
+void BKE_scene_collections_iterator_next(struct BLI_Iterator *iter);
+void BKE_scene_collections_iterator_end(struct BLI_Iterator *iter);
+
+void BKE_scene_objects_iterator_begin(struct BLI_Iterator *iter, void *data_in);
+void BKE_scene_objects_iterator_next(struct BLI_Iterator *iter);
+void BKE_scene_objects_iterator_end(struct BLI_Iterator *iter);
+
+#define FOREACH_SCENE_COLLECTION(_id, _instance) \
+ ITER_BEGIN(BKE_scene_collections_iterator_begin, \
+ BKE_scene_collections_iterator_next, \
+ BKE_scene_collections_iterator_end, \
+ _id, SceneCollection *, _instance)
+
+#define FOREACH_SCENE_COLLECTION_END \
+ ITER_END
+
+#define FOREACH_SCENE_OBJECT(scene, _instance) \
+ ITER_BEGIN(BKE_scene_objects_iterator_begin, \
+ BKE_scene_objects_iterator_next, \
+ BKE_scene_objects_iterator_end, \
+ scene, Object *, _instance)
+
+#define FOREACH_SCENE_OBJECT_END \
+ ITER_END
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __BKE_COLLECTION_H__ */
diff --git a/source/blender/blenkernel/BKE_collision.h b/source/blender/blenkernel/BKE_collision.h
index 8fedcd4ab06..0bf7f657f70 100644
--- a/source/blender/blenkernel/BKE_collision.h
+++ b/source/blender/blenkernel/BKE_collision.h
@@ -148,7 +148,7 @@ void collision_get_collider_velocity(float vel_old[3], float vel_new[3], struct
/////////////////////////////////////////////////
/* explicit control over layer mask and dupli recursion */
-struct Object **get_collisionobjects_ext(struct Scene *scene, struct Object *self, struct Group *group, int layer, unsigned int *numcollobj, unsigned int modifier_type, bool dupli);
+struct Object **get_collisionobjects_ext(struct Scene *scene, struct Object *self, struct Group *group, unsigned int *numcollobj, unsigned int modifier_type, bool dupli);
struct Object **get_collisionobjects(struct Scene *scene, struct Object *self, struct Group *group, unsigned int *numcollobj, unsigned int modifier_type);
diff --git a/source/blender/blenkernel/BKE_constraint.h b/source/blender/blenkernel/BKE_constraint.h
index 4e0eb5c65ac..cf7e2908360 100644
--- a/source/blender/blenkernel/BKE_constraint.h
+++ b/source/blender/blenkernel/BKE_constraint.h
@@ -40,6 +40,7 @@ struct ListBase;
struct Object;
struct Scene;
struct bPoseChannel;
+struct EvaluationContext;
/* ---------------------------------------------------------------------------- */
#ifdef __cplusplus
@@ -102,7 +103,7 @@ typedef struct bConstraintTypeInfo {
/* evaluation */
/* set the ct->matrix for the given constraint target (at the given ctime) */
- void (*get_target_matrix)(struct bConstraint *con, struct bConstraintOb *cob, struct bConstraintTarget *ct, float ctime);
+ void (*get_target_matrix)(const struct EvaluationContext *eval_ctx, struct bConstraint *con, struct bConstraintOb *cob, struct bConstraintTarget *ct, float ctime);
/* evaluate the constraint for the given time */
void (*evaluate_constraint)(struct bConstraint *con, struct bConstraintOb *cob, struct ListBase *targets);
} bConstraintTypeInfo;
@@ -147,9 +148,10 @@ void BKE_constraints_clear_evalob(struct bConstraintOb *cob);
void BKE_constraint_mat_convertspace(
struct Object *ob, struct bPoseChannel *pchan, float mat[4][4], short from, short to, const bool keep_scale);
-void BKE_constraint_target_matrix_get(struct Scene *scene, struct bConstraint *con, int n, short ownertype, void *ownerdata, float mat[4][4], float ctime);
-void BKE_constraint_targets_for_solving_get(struct bConstraint *con, struct bConstraintOb *ob, struct ListBase *targets, float ctime);
-void BKE_constraints_solve(struct ListBase *conlist, struct bConstraintOb *cob, float ctime);
+void BKE_constraint_target_matrix_get(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct bConstraint *con,
+ int n, short ownertype, void *ownerdata, float mat[4][4], float ctime);
+void BKE_constraint_targets_for_solving_get(const struct EvaluationContext *eval_ctx, struct bConstraint *con, struct bConstraintOb *ob, struct ListBase *targets, float ctime);
+void BKE_constraints_solve(const struct EvaluationContext *eval_ctx, struct ListBase *conlist, struct bConstraintOb *cob, float ctime);
#ifdef __cplusplus
}
diff --git a/source/blender/blenkernel/BKE_context.h b/source/blender/blenkernel/BKE_context.h
index 4da6a61cbfa..34192db318e 100644
--- a/source/blender/blenkernel/BKE_context.h
+++ b/source/blender/blenkernel/BKE_context.h
@@ -40,15 +40,21 @@ extern "C" {
struct ARegion;
struct bScreen;
struct CacheFile;
+struct Depsgraph;
+struct LayerCollection;
struct ListBase;
struct Main;
struct Object;
+struct Base;
struct PointerRNA;
struct ReportList;
struct Scene;
+struct SceneCollection;
+struct ViewLayer;
struct ScrArea;
struct SpaceLink;
struct View3D;
+struct ViewRender;
struct RegionView3D;
struct StructRNA;
struct ToolSettings;
@@ -64,10 +70,14 @@ struct bGPDpalettecolor;
struct bGPDbrush;
struct wmWindow;
struct wmWindowManager;
+struct RenderEngineType;
struct SpaceText;
struct SpaceImage;
struct SpaceClip;
struct ID;
+struct EvaluationContext;
+
+#include "DNA_object_enums.h"
/* Structs */
@@ -110,7 +120,8 @@ enum {
CTX_MODE_PAINT_VERTEX,
CTX_MODE_PAINT_TEXTURE,
CTX_MODE_PARTICLE,
- CTX_MODE_OBJECT
+ CTX_MODE_OBJECT,
+ CTX_MODE_NUM /* must be last */
};
/* Context */
@@ -140,12 +151,15 @@ void CTX_py_dict_set(bContext *C, void *value);
struct wmWindowManager *CTX_wm_manager(const bContext *C);
struct wmWindow *CTX_wm_window(const bContext *C);
+struct WorkSpace *CTX_wm_workspace(const bContext *C);
struct bScreen *CTX_wm_screen(const bContext *C);
struct ScrArea *CTX_wm_area(const bContext *C);
struct SpaceLink *CTX_wm_space_data(const bContext *C);
struct ARegion *CTX_wm_region(const bContext *C);
void *CTX_wm_region_data(const bContext *C);
struct ARegion *CTX_wm_menu(const bContext *C);
+struct wmManipulatorGroup *CTX_wm_manipulator_group(const bContext *C);
+struct wmMsgBus *CTX_wm_message_bus(const bContext *C);
struct ReportList *CTX_wm_reports(const bContext *C);
struct View3D *CTX_wm_view3d(const bContext *C);
@@ -173,6 +187,7 @@ void CTX_wm_screen_set(bContext *C, struct bScreen *screen); /* to be removed */
void CTX_wm_area_set(bContext *C, struct ScrArea *sa);
void CTX_wm_region_set(bContext *C, struct ARegion *region);
void CTX_wm_menu_set(bContext *C, struct ARegion *menu);
+void CTX_wm_manipulator_group_set(bContext *C, struct wmManipulatorGroup *mgroup);
const char *CTX_wm_operator_poll_msg_get(struct bContext *C);
void CTX_wm_operator_poll_msg_set(struct bContext *C, const char *msg);
@@ -239,9 +254,17 @@ int ctx_data_list_count(const bContext *C, int (*func)(const bContext *, ListBas
struct Main *CTX_data_main(const bContext *C);
struct Scene *CTX_data_scene(const bContext *C);
+struct LayerCollection *CTX_data_layer_collection(const bContext *C);
+struct SceneCollection *CTX_data_scene_collection(const bContext *C);
+struct ViewLayer *CTX_data_view_layer(const bContext *C);
+struct ViewRender *CTX_data_view_render(const bContext *C);
+struct RenderEngineType *CTX_data_engine_type(const bContext *C);
struct ToolSettings *CTX_data_tool_settings(const bContext *C);
const char *CTX_data_mode_string(const bContext *C);
+int CTX_data_mode_enum_ex(
+ const struct Object *obedit, const struct Object *ob,
+ const eObjectMode object_mode);
int CTX_data_mode_enum(const bContext *C);
void CTX_data_main_set(bContext *C, struct Main *bmain);
@@ -296,6 +319,9 @@ int CTX_data_visible_gpencil_layers(const bContext *C, ListBase *list);
int CTX_data_editable_gpencil_layers(const bContext *C, ListBase *list);
int CTX_data_editable_gpencil_strokes(const bContext *C, ListBase *list);
+struct Depsgraph *CTX_data_depsgraph(const bContext *C);
+
+void CTX_data_eval_ctx(const bContext *C, struct EvaluationContext *eval_ctx);
#ifdef __cplusplus
}
diff --git a/source/blender/blenkernel/BKE_crazyspace.h b/source/blender/blenkernel/BKE_crazyspace.h
index ee6c5c57678..31542cd6f8a 100644
--- a/source/blender/blenkernel/BKE_crazyspace.h
+++ b/source/blender/blenkernel/BKE_crazyspace.h
@@ -38,23 +38,24 @@ struct Scene;
struct Object;
struct BMEditMesh;
struct Mesh;
+struct EvaluationContext;
/* crazyspace.c */
float (*BKE_crazyspace_get_mapped_editverts(
- struct Scene *scene, struct Object *obedit))[3];
+ const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *obedit))[3];
void BKE_crazyspace_set_quats_editmesh(
struct BMEditMesh *em, float (*origcos)[3], float (*mappedcos)[3], float (*quats)[4],
const bool use_select);
void BKE_crazyspace_set_quats_mesh(
struct Mesh *me, float (*origcos)[3], float (*mappedcos)[3], float (*quats)[4]);
int BKE_crazyspace_get_first_deform_matrices_editbmesh(
- struct Scene *, struct Object *, struct BMEditMesh *em,
+ const struct EvaluationContext *eval_ctx, struct Scene *, struct Object *, struct BMEditMesh *em,
float (**deformmats)[3][3], float (**deformcos)[3]);
int BKE_sculpt_get_first_deform_matrices(
- struct Scene *scene, struct Object *ob,
+ const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob,
float (**deformmats)[3][3], float (**deformcos)[3]);
void BKE_crazyspace_build_sculpt(
- struct Scene *scene, struct Object *ob,
+ const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob,
float (**deformmats)[3][3], float (**deformcos)[3]);
#ifdef __cplusplus
diff --git a/source/blender/blenkernel/BKE_curve.h b/source/blender/blenkernel/BKE_curve.h
index 175fa1dad79..fbd05552255 100644
--- a/source/blender/blenkernel/BKE_curve.h
+++ b/source/blender/blenkernel/BKE_curve.h
@@ -36,6 +36,7 @@
struct BezTriple;
struct Curve;
struct EditNurb;
+struct EvaluationContext;
struct GHash;
struct ListBase;
struct Main;
@@ -122,13 +123,14 @@ void BKE_curve_editNurb_keyIndex_free(struct GHash **keyindex);
void BKE_curve_editNurb_free(struct Curve *cu);
struct ListBase *BKE_curve_editNurbs_get(struct Curve *cu);
-float *BKE_curve_make_orco(struct Scene *scene, struct Object *ob, int *r_numVerts);
+float *BKE_curve_make_orco(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob, int *r_numVerts);
float *BKE_curve_surf_make_orco(struct Object *ob);
void BKE_curve_bevelList_free(struct ListBase *bev);
void BKE_curve_bevelList_make(struct Object *ob, struct ListBase *nurbs, bool for_render);
-void BKE_curve_bevel_make(struct Scene *scene, struct Object *ob, struct ListBase *disp,
- const bool for_render, const bool use_render_resolution);
+void BKE_curve_bevel_make(
+ const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob, struct ListBase *disp,
+ const bool for_render, const bool use_render_resolution);
void BKE_curve_forward_diff_bezier(float q0, float q1, float q2, float q3, float *p, int it, int stride);
void BKE_curve_forward_diff_tangent_bezier(float q0, float q1, float q2, float q3, float *p, int it, int stride);
@@ -215,10 +217,17 @@ void BKE_nurb_handles_test(struct Nurb *nu, const bool use_handles);
/* **** Depsgraph evaluation **** */
-struct EvaluationContext;
-
-void BKE_curve_eval_geometry(struct EvaluationContext *eval_ctx,
- struct Curve *curve);
+void BKE_curve_eval_geometry(
+ const struct EvaluationContext *eval_ctx,
+ struct Curve *curve);
+
+/* Draw Cache */
+enum {
+ BKE_CURVE_BATCH_DIRTY_ALL = 0,
+ BKE_CURVE_BATCH_DIRTY_SELECT,
+};
+void BKE_curve_batch_cache_dirty(struct Curve *cu, int mode);
+void BKE_curve_batch_cache_free(struct Curve *cu);
/* curve_decimate.c */
unsigned int BKE_curve_decimate_bezt_array(
diff --git a/source/blender/blenkernel/BKE_customdata.h b/source/blender/blenkernel/BKE_customdata.h
index 2cdda34b9b5..51cd4da183a 100644
--- a/source/blender/blenkernel/BKE_customdata.h
+++ b/source/blender/blenkernel/BKE_customdata.h
@@ -376,15 +376,14 @@ void CustomData_validate_layer_name(const struct CustomData *data, int type, con
bool CustomData_verify_versions(struct CustomData *data, int index);
/*BMesh specific customdata stuff*/
-void CustomData_to_bmeshpoly(struct CustomData *fdata, struct CustomData *pdata,
- struct CustomData *ldata, int totloop, int totpoly);
-void CustomData_from_bmeshpoly(struct CustomData *fdata, struct CustomData *pdata, struct CustomData *ldata, int total);
-void CustomData_bmesh_update_active_layers(struct CustomData *fdata, struct CustomData *pdata, struct CustomData *ldata);
-void CustomData_bmesh_do_versions_update_active_layers(struct CustomData *fdata, struct CustomData *pdata, struct CustomData *ldata);
+void CustomData_to_bmeshpoly(struct CustomData *fdata, struct CustomData *ldata, int totloop);
+void CustomData_from_bmeshpoly(struct CustomData *fdata, struct CustomData *ldata, int total);
+void CustomData_bmesh_update_active_layers(struct CustomData *fdata, struct CustomData *ldata);
+void CustomData_bmesh_do_versions_update_active_layers(struct CustomData *fdata, struct CustomData *ldata);
void CustomData_bmesh_init_pool(struct CustomData *data, int totelem, const char htype);
#ifndef NDEBUG
-bool CustomData_from_bmeshpoly_test(CustomData *fdata, CustomData *pdata, CustomData *ldata, bool fallback);
+bool CustomData_from_bmeshpoly_test(CustomData *fdata, CustomData *ldata, bool fallback);
#endif
/* External file storage */
diff --git a/source/blender/blenkernel/BKE_data_transfer.h b/source/blender/blenkernel/BKE_data_transfer.h
index 2ee9d8d2408..d5f0313ca64 100644
--- a/source/blender/blenkernel/BKE_data_transfer.h
+++ b/source/blender/blenkernel/BKE_data_transfer.h
@@ -42,6 +42,7 @@ struct Object;
struct Scene;
struct SpaceTransform;
struct ReportList;
+struct EvaluationContext;
/* Warning, those def are stored in files (TransferData modifier), *DO NOT* modify those values. */
enum {
@@ -129,11 +130,12 @@ enum {
};
void BKE_object_data_transfer_layout(
- struct Scene *scene, struct Object *ob_src, struct Object *ob_dst, const int data_types, const bool use_delete,
+ const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob_src,
+ struct Object *ob_dst, const int data_types, const bool use_delete,
const int fromlayers_select[DT_MULTILAYER_INDEX_MAX], const int tolayers_select[DT_MULTILAYER_INDEX_MAX]);
bool BKE_object_data_transfer_mesh(
- struct Scene *scene,
+ const struct EvaluationContext *eval_ctx, struct Scene *scene,
struct Object *ob_src, struct Object *ob_dst, const int data_types, const bool use_create,
const int map_vert_mode, const int map_edge_mode, const int map_loop_mode, const int map_poly_mode,
struct SpaceTransform *space_transform, const bool auto_transform,
@@ -142,7 +144,7 @@ bool BKE_object_data_transfer_mesh(
const int mix_mode, const float mix_factor, const char *vgroup_name, const bool invert_vgroup,
struct ReportList *reports);
bool BKE_object_data_transfer_dm(
- struct Scene *scene,
+ const struct EvaluationContext *eval_ctx, struct Scene *scene,
struct Object *ob_src, struct Object *ob_dst, struct DerivedMesh *dm_dst,
const int data_types, bool use_create,
const int map_vert_mode, const int map_edge_mode, const int map_loop_mode, const int map_poly_mode,
diff --git a/source/blender/blenkernel/BKE_depsgraph.h b/source/blender/blenkernel/BKE_depsgraph.h
deleted file mode 100644
index 40564aeabe9..00000000000
--- a/source/blender/blenkernel/BKE_depsgraph.h
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2004 Blender Foundation.
- * All rights reserved.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-#ifndef __BKE_DEPSGRAPH_H__
-#define __BKE_DEPSGRAPH_H__
-
-/** \file BKE_depsgraph.h
- * \ingroup bke
- */
-
-/* Dependency Graph
- *
- * The dependency graph tracks relations between datablocks, and is used to
- * determine which datablocks need to be update based on dependencies and
- * visibility.
- *
- * It does not itself execute changes in objects, but rather sorts the objects
- * in the appropriate order and sets flags indicating they should be updated.
- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct ID;
-struct Main;
-struct Object;
-struct Scene;
-
-/* Dependency graph evaluation context
- *
- * This structure stores all the local dependency graph data,
- * which is needed for it's evaluation,
- */
-typedef struct EvaluationContext {
- int mode; /* evaluation mode */
- float ctime; /* evaluation time */
-} EvaluationContext;
-
-typedef enum eEvaluationMode {
- DAG_EVAL_VIEWPORT = 0, /* evaluate for OpenGL viewport */
- DAG_EVAL_PREVIEW = 1, /* evaluate for render with preview settings */
- DAG_EVAL_RENDER = 2, /* evaluate for render purposes */
-} eEvaluationMode;
-
-/* DagNode->eval_flags */
-enum {
- /* Regardless to curve->path animation flag path is to be evaluated anyway,
- * to meet dependencies with such a things as curve modifier and other guys
- * who're using curve deform, where_on_path and so.
- */
- DAG_EVAL_NEED_CURVE_PATH = 1,
- /* Scene evaluation would need to have object's data on CPU,
- * meaning no GPU shortcuts is allowed.
- */
- DAG_EVAL_NEED_CPU = 2,
-};
-
-/* Global initialization/deinitialization */
-void DAG_init(void);
-void DAG_exit(void);
-
-/* Build and Update
- *
- * DAG_scene_relations_update will rebuild the dependency graph for a given
- * scene if needed, and sort objects in the scene.
- *
- * DAG_relations_tag_update will clear all dependency graphs and mark them to
- * be rebuilt later. The graph is not rebuilt immediately to avoid slowdowns
- * when this function is call multiple times from different operators.
- *
- * DAG_scene_relations_rebuild forces an immediaterebuild of the dependency
- * graph, this is only needed in rare cases
- */
-
-void DAG_scene_relations_update(struct Main *bmain, struct Scene *sce);
-void DAG_scene_relations_validate(struct Main *bmain, struct Scene *sce);
-void DAG_relations_tag_update(struct Main *bmain);
-void DAG_scene_relations_rebuild(struct Main *bmain, struct Scene *scene);
-void DAG_scene_free(struct Scene *sce);
-
-/* Update Tagging
- *
- * DAG_scene_update_flags will mark all objects that depend on time (animation,
- * physics, ..) to be recalculated, used when changing the current frame.
- *
- * DAG_on_visible_update will mark all objects that are visible for the first
- * time to be updated, for example on file load or changing layer visibility.
- *
- * DAG_id_tag_update will mark a given datablock to be updated. The flag indicates
- * a specific subset to be update (only object transform and data for now).
- *
- * DAG_id_type_tag marks a particular datablock type as having changing. This does
- * not cause any updates but is used by external render engines to detect if for
- * example a datablock was removed. */
-
-void DAG_scene_update_flags(struct Main *bmain, struct Scene *sce, unsigned int lay, const bool do_time, const bool do_invisible_flush);
-void DAG_on_visible_update(struct Main *bmain, const bool do_time);
-
-void DAG_id_tag_update(struct ID *id, short flag);
-void DAG_id_tag_update_ex(struct Main *bmain, struct ID *id, short flag);
-void DAG_id_type_tag(struct Main *bmain, short idtype);
-int DAG_id_type_tagged(struct Main *bmain, short idtype);
-
-/* Flushing Tags
- *
- * DAG_scene_flush_update flushes object recalculation flags immediately to other
- * dependencies. Do not use outside of depsgraph.c, this will be removed.
- *
- * DAG_ids_flush_tagged will flush datablock update flags flags to dependencies,
- * use this right before updating to mark all the needed datablocks for update.
- *
- * DAG_ids_check_recalc and DAG_ids_clear_recalc are used for external render
- * engines to detect changes. */
-
-void DAG_scene_flush_update(struct Main *bmain, struct Scene *sce, unsigned int lay, const short do_time);
-void DAG_ids_flush_tagged(struct Main *bmain);
-void DAG_ids_check_recalc(struct Main *bmain, struct Scene *scene, bool time);
-void DAG_ids_clear_recalc(struct Main *bmain);
-
-/* Armature: sorts the bones according to dependencies between them */
-
-void DAG_pose_sort(struct Object *ob);
-
-/* Editors: callbacks to notify editors of datablock changes */
-
-void DAG_editors_update_cb(void (*id_func)(struct Main *bmain, struct ID *id),
- void (*scene_func)(struct Main *bmain, struct Scene *scene, int updated),
- void (*scene_pre_func)(struct Main *bmain, struct Scene *scene, bool time));
-
-void DAG_editors_update_pre(struct Main *bmain, struct Scene *scene, bool time);
-
-/* ** Threaded update ** */
-
-/* Initialize the DAG for threaded update. */
-void DAG_threaded_update_begin(struct Scene *scene,
- void (*func)(void *node, void *user_data),
- void *user_data);
-
-void DAG_threaded_update_handle_node_updated(void *node_v,
- void (*func)(void *node, void *user_data),
- void *user_data);
-
-/* Debugging: print dependency graph for scene or armature object to console */
-
-void DAG_print_dependencies(struct Main *bmain, struct Scene *scene, struct Object *ob);
-
-/* ************************ DAG querying ********************* */
-
-struct Object *DAG_get_node_object(void *node_v);
-const char *DAG_get_node_name(struct Scene *scene, void *node_v);
-short DAG_get_eval_flags_for_object(struct Scene *scene, void *object);
-bool DAG_is_acyclic(struct Scene *scene);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/source/blender/blenkernel/BKE_displist.h b/source/blender/blenkernel/BKE_displist.h
index 9625f05192a..c2229976dd9 100644
--- a/source/blender/blenkernel/BKE_displist.h
+++ b/source/blender/blenkernel/BKE_displist.h
@@ -86,23 +86,30 @@ void BKE_displist_count(struct ListBase *lb, int *totvert, int *totface, int *to
void BKE_displist_free(struct ListBase *lb);
bool BKE_displist_has_faces(struct ListBase *lb);
-void BKE_displist_make_surf(struct Scene *scene, struct Object *ob, struct ListBase *dispbase, struct DerivedMesh **r_dm_final,
- const bool for_render, const bool for_orco, const bool use_render_resolution);
-void BKE_displist_make_curveTypes(struct Scene *scene, struct Object *ob, const bool for_orco);
-void BKE_displist_make_curveTypes_forRender(struct Scene *scene, struct Object *ob, struct ListBase *dispbase, struct DerivedMesh **r_dm_final,
- const bool for_orco, const bool use_render_resolution);
-void BKE_displist_make_curveTypes_forOrco(struct Scene *scene, struct Object *ob, struct ListBase *dispbase);
-void BKE_displist_make_mball(struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob);
-void BKE_displist_make_mball_forRender(struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob, struct ListBase *dispbase);
+void BKE_displist_make_surf(
+ const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob, struct ListBase *dispbase,
+ struct DerivedMesh **r_dm_final, const bool for_render, const bool for_orco, const bool use_render_resolution);
+void BKE_displist_make_curveTypes(
+ const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob, const bool for_orco);
+void BKE_displist_make_curveTypes_forRender(
+ const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob, struct ListBase *dispbase,
+ struct DerivedMesh **r_dm_final, const bool for_orco, const bool use_render_resolution);
+void BKE_displist_make_curveTypes_forOrco(
+ const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob, struct ListBase *dispbase);
+void BKE_displist_make_mball(
+ const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob);
+void BKE_displist_make_mball_forRender(
+ const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob, struct ListBase *dispbase);
bool BKE_displist_surfindex_get(DispList *dl, int a, int *b, int *p1, int *p2, int *p3, int *p4);
void BKE_displist_fill(struct ListBase *dispbase, struct ListBase *to, const float normal_proj[3], const bool flipnormal);
-float BKE_displist_calc_taper(struct Scene *scene, struct Object *taperobj, int cur, int tot);
+float BKE_displist_calc_taper(const struct EvaluationContext *eval_ctx, 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 */
-float *BKE_displist_make_orco(struct Scene *scene, struct Object *ob, struct DerivedMesh *dm_final,
- const bool for_render, const bool use_render_resolution);
+float *BKE_displist_make_orco(
+ const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob, struct DerivedMesh *dm_final,
+ const bool for_render, const bool use_render_resolution);
void BKE_displist_minmax(struct ListBase *dispbase, float min[3], float max[3]);
diff --git a/source/blender/blenkernel/BKE_dynamicpaint.h b/source/blender/blenkernel/BKE_dynamicpaint.h
index 5abb53d4c52..21c900a7f0d 100644
--- a/source/blender/blenkernel/BKE_dynamicpaint.h
+++ b/source/blender/blenkernel/BKE_dynamicpaint.h
@@ -28,6 +28,8 @@
*/
struct Scene;
+struct ViewLayer;
+struct EvaluationContext;
/* Actual surface point */
typedef struct PaintSurfaceData {
@@ -60,7 +62,8 @@ typedef struct PaintWavePoint {
short state;
} PaintWavePoint;
-struct DerivedMesh *dynamicPaint_Modifier_do(struct DynamicPaintModifierData *pmd, struct Scene *scene, struct Object *ob, struct DerivedMesh *dm);
+struct DerivedMesh *dynamicPaint_Modifier_do(struct DynamicPaintModifierData *pmd, const struct EvaluationContext *eval_ctx, struct Scene *scene,
+ struct Object *ob, struct DerivedMesh *dm);
void dynamicPaint_Modifier_free(struct DynamicPaintModifierData *pmd);
void dynamicPaint_Modifier_copy(struct DynamicPaintModifierData *pmd, struct DynamicPaintModifierData *tsmd);
@@ -83,7 +86,7 @@ struct DynamicPaintSurface *get_activeSurface(struct DynamicPaintCanvasSettings
/* image sequence baking */
int dynamicPaint_createUVSurface(struct Scene *scene, struct DynamicPaintSurface *surface, float *progress, short *do_update);
-int dynamicPaint_calculateFrame(struct DynamicPaintSurface *surface, struct Scene *scene, struct Object *cObject, int frame);
+int dynamicPaint_calculateFrame(struct DynamicPaintSurface *surface, const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *cObject, int frame);
void dynamicPaint_outputSurfaceImage(struct DynamicPaintSurface *surface, char *filename, short output_layer);
/* PaintPoint state */
diff --git a/source/blender/blenkernel/BKE_editmesh.h b/source/blender/blenkernel/BKE_editmesh.h
index 55a9db9b1e5..af1aeff230f 100644
--- a/source/blender/blenkernel/BKE_editmesh.h
+++ b/source/blender/blenkernel/BKE_editmesh.h
@@ -40,6 +40,7 @@ struct Mesh;
struct Scene;
struct DerivedMesh;
struct MeshStatVis;
+struct EvaluationContext;
/**
* This structure is used for mesh edit-mode.
@@ -88,7 +89,6 @@ BMEditMesh *BKE_editmesh_copy(BMEditMesh *em);
BMEditMesh *BKE_editmesh_from_object(struct Object *ob);
void BKE_editmesh_free_derivedmesh(BMEditMesh *em);
void BKE_editmesh_free(BMEditMesh *em);
-void BKE_editmesh_update_linked_customdata(BMEditMesh *em);
void BKE_editmesh_color_free(BMEditMesh *em);
void BKE_editmesh_color_ensure(BMEditMesh *em, const char htype);
@@ -99,6 +99,7 @@ float (*BKE_editmesh_vertexCos_get_orco(BMEditMesh *em, int *r_numVerts))[3]
void BKE_editmesh_statvis_calc(BMEditMesh *em, struct DerivedMesh *dm,
const struct MeshStatVis *statvis);
-float (*BKE_editmesh_vertexCos_get(struct BMEditMesh *em, struct Scene *scene, int *r_numVerts))[3];
+float (*BKE_editmesh_vertexCos_get(
+ const struct EvaluationContext *eval_ctx, struct BMEditMesh *em, struct Scene *scene, int *r_numVerts))[3];
#endif /* __BKE_EDITMESH_H__ */
diff --git a/source/blender/blenkernel/BKE_editmesh_tangent.h b/source/blender/blenkernel/BKE_editmesh_tangent.h
new file mode 100644
index 00000000000..9553fbc1a5c
--- /dev/null
+++ b/source/blender/blenkernel/BKE_editmesh_tangent.h
@@ -0,0 +1,40 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Joseph Eagar.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef __BKE_EDITMESH_TANGENT_H__
+#define __BKE_EDITMESH_TANGENT_H__
+
+/** \file BKE_editmesh_tangent.h
+ * \ingroup bke
+ */
+
+void BKE_editmesh_loop_tangent_calc(
+ BMEditMesh *em, bool calc_active_tangent,
+ const char (*tangent_names)[MAX_NAME], int tangent_names_len,
+ const float (*poly_normals)[3],
+ const float (*loop_normals)[3],
+ const float (*vert_orco)[3],
+ CustomData *dm_loopdata_out,
+ const uint dm_loopdata_out_len,
+ short *tangent_mask_curr_p);
+
+#endif /* __BKE_EDITMESH_TANGENT_H__ */
diff --git a/source/blender/blenkernel/BKE_effect.h b/source/blender/blenkernel/BKE_effect.h
index aa45132cbe9..6fa19d4aaf6 100644
--- a/source/blender/blenkernel/BKE_effect.h
+++ b/source/blender/blenkernel/BKE_effect.h
@@ -44,6 +44,7 @@ struct Group;
struct ParticleSimulationData;
struct ParticleData;
struct ParticleKey;
+struct EvaluationContext;
struct EffectorWeights *BKE_add_effector_weights(struct Group *group);
struct PartDeflect *object_add_collision_fields(int type);
@@ -93,6 +94,7 @@ typedef struct EffectorData {
typedef struct EffectorCache {
struct EffectorCache *next, *prev;
+ const struct EvaluationContext *eval_ctx;
struct Scene *scene;
struct Object *ob;
struct ParticleSystem *psys;
@@ -110,9 +112,11 @@ typedef struct EffectorCache {
} EffectorCache;
void free_partdeflect(struct PartDeflect *pd);
-struct ListBase *pdInitEffectors(struct Scene *scene, struct Object *ob_src, struct ParticleSystem *psys_src, struct EffectorWeights *weights, bool for_simulation);
+struct ListBase *pdInitEffectors(
+ const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob_src, struct ParticleSystem *psys_src,
+ struct EffectorWeights *weights, bool for_simulation);
void pdEndEffectors(struct ListBase **effectors);
-void pdPrecalculateEffectors(struct ListBase *effectors);
+void pdPrecalculateEffectors(const struct EvaluationContext *eval_ctx, struct ListBase *effectors);
void pdDoEffectors(struct ListBase *effectors, struct ListBase *colliders, struct EffectorWeights *weights, struct EffectedPoint *point, float *force, float *impulse);
void pd_point_from_particle(struct ParticleSimulationData *sim, struct ParticleData *pa, struct ParticleKey *state, struct EffectedPoint *point);
diff --git a/source/blender/blenkernel/BKE_fluidsim.h b/source/blender/blenkernel/BKE_fluidsim.h
index 6501c968abc..4ec58b2a0e5 100644
--- a/source/blender/blenkernel/BKE_fluidsim.h
+++ b/source/blender/blenkernel/BKE_fluidsim.h
@@ -36,10 +36,11 @@ struct Object;
struct Scene;
struct FluidsimSettings;
struct MVert;
+struct EvaluationContext;
/* old interface */
-void initElbeemMesh(struct Scene *scene, struct Object *ob,
+void initElbeemMesh(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob,
int *numVertices, float **vertices,
int *numTriangles, int **triangles,
int useGlobalCoords, int modifierIndex);
diff --git a/source/blender/blenkernel/BKE_freestyle.h b/source/blender/blenkernel/BKE_freestyle.h
index 1045fde0039..f7368683d93 100644
--- a/source/blender/blenkernel/BKE_freestyle.h
+++ b/source/blender/blenkernel/BKE_freestyle.h
@@ -49,7 +49,7 @@ typedef struct FreestyleModuleSettings FreestyleModuleSettings;
/* FreestyleConfig */
void BKE_freestyle_config_init(FreestyleConfig *config);
-void BKE_freestyle_config_free(FreestyleConfig *config);
+void BKE_freestyle_config_free(FreestyleConfig *config, const bool do_id_user);
void BKE_freestyle_config_copy(FreestyleConfig *new_config, FreestyleConfig *config, const int flag);
/* FreestyleConfig.modules */
diff --git a/source/blender/blenkernel/BKE_global.h b/source/blender/blenkernel/BKE_global.h
index 790c8051ace..80a8f750d20 100644
--- a/source/blender/blenkernel/BKE_global.h
+++ b/source/blender/blenkernel/BKE_global.h
@@ -128,10 +128,11 @@ enum {
G_DEBUG_DEPSGRAPH_NO_THREADS = (1 << 11), /* single threaded depsgraph */
G_DEBUG_GPU = (1 << 12), /* gpu debug */
G_DEBUG_IO = (1 << 13), /* IO Debugging (for Collada, ...)*/
+ G_DEBUG_GPU_SHADERS = (1 << 14), /* GLSL shaders */
};
#define G_DEBUG_ALL (G_DEBUG | G_DEBUG_FFMPEG | G_DEBUG_PYTHON | G_DEBUG_EVENTS | G_DEBUG_WM | G_DEBUG_JOBS | \
- G_DEBUG_FREESTYLE | G_DEBUG_DEPSGRAPH | G_DEBUG_GPU_MEM | G_DEBUG_IO)
+ G_DEBUG_FREESTYLE | G_DEBUG_DEPSGRAPH | G_DEBUG_GPU_MEM | G_DEBUG_IO | G_DEBUG_GPU_SHADERS)
/* G.fileflags */
diff --git a/source/blender/blenkernel/BKE_group.h b/source/blender/blenkernel/BKE_group.h
index e07dd259970..74255cfc941 100644
--- a/source/blender/blenkernel/BKE_group.h
+++ b/source/blender/blenkernel/BKE_group.h
@@ -41,17 +41,45 @@ struct Object;
struct Scene;
void BKE_group_free(struct Group *group);
+void BKE_group_init(struct Group *group);
struct Group *BKE_group_add(struct Main *bmain, const char *name);
void BKE_group_copy_data(struct Main *bmain, struct Group *group_dst, const struct Group *group_src, const int flag);
struct Group *BKE_group_copy(struct Main *bmain, const struct Group *group);
void BKE_group_make_local(struct Main *bmain, struct Group *group, const bool lib_local);
-bool BKE_group_object_add(struct Group *group, struct Object *ob, struct Scene *scene, struct Base *base);
-bool BKE_group_object_unlink(struct Group *group, struct Object *ob, struct Scene *scene, struct Base *base);
+bool BKE_group_object_add(struct Group *group, struct Object *ob);
+bool BKE_group_object_unlink(struct Group *group, struct Object *ob);
struct Group *BKE_group_object_find(struct Group *group, struct Object *ob);
bool BKE_group_object_exists(struct Group *group, struct Object *ob);
bool BKE_group_object_cyclic_check(struct Main *bmain, struct Object *object, struct Group *group);
bool BKE_group_is_animated(struct Group *group, struct Object *parent);
-void BKE_group_handle_recalc_and_update(struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *parent, struct Group *group);
+void BKE_group_handle_recalc_and_update(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *parent, struct Group *group);
+
+/* Dependency graph evaluation. */
+
+void BKE_group_eval_view_layers(const struct EvaluationContext *eval_ctx,
+ struct Group *group);
+
+/* Helper macros. */
+
+#define FOREACH_GROUP_BASE(_group, _base) \
+ for (Base *_base = (Base *)(_group)->view_layer->object_bases.first; \
+ _base; \
+ _base = _base->next) \
+ {
+
+#define FOREACH_GROUP_BASE_END \
+ }
+
+#define FOREACH_GROUP_OBJECT(_group, _object) \
+ for (Base *_base = (Base *)(_group)->view_layer->object_bases.first; \
+ _base; \
+ _base = _base->next) \
+ { \
+ Object *_object = _base->object; \
+ BLI_assert(_object != NULL);
+
+#define FOREACH_GROUP_OBJECT_END \
+ }
#endif /* __BKE_GROUP_H__ */
diff --git a/source/blender/blenkernel/BKE_idprop.h b/source/blender/blenkernel/BKE_idprop.h
index 5d8cd02756d..02912739e86 100644
--- a/source/blender/blenkernel/BKE_idprop.h
+++ b/source/blender/blenkernel/BKE_idprop.h
@@ -32,6 +32,10 @@
#include "BLI_compiler_attrs.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct IDProperty;
struct ID;
@@ -91,6 +95,7 @@ void IDP_ReplaceGroupInGroup(struct IDProperty *dest, const struct IDProperty *s
void IDP_ReplaceInGroup(struct IDProperty *group, struct IDProperty *prop) ATTR_NONNULL();
void IDP_ReplaceInGroup_ex(struct IDProperty *group, struct IDProperty *prop, struct IDProperty *prop_exist);
void IDP_MergeGroup(IDProperty *dest, const IDProperty *src, const bool do_overwrite) ATTR_NONNULL();
+void IDP_MergeGroup_ex(IDProperty *dest, const IDProperty *src, const bool do_overwrite, const int flag) ATTR_NONNULL();
bool IDP_AddToGroup(struct IDProperty *group, struct IDProperty *prop) ATTR_NONNULL();
bool IDP_InsertToGroup(struct IDProperty *group, struct IDProperty *previous,
struct IDProperty *pnew) ATTR_NONNULL(1 /* group */, 3 /* pnew */);
@@ -118,6 +123,8 @@ void IDP_ClearProperty(IDProperty *prop);
void IDP_RelinkProperty(struct IDProperty *prop);
+void IDP_Reset(IDProperty *prop, const IDProperty *reference);
+
#define IDP_Int(prop) ((prop)->data.val)
#define IDP_Array(prop) ((prop)->data.pointer)
/* C11 const correctness for casts */
@@ -150,4 +157,8 @@ void IDP_RelinkProperty(struct IDProperty *prop);
void IDP_spit(IDProperty *prop);
#endif
+#ifdef __cplusplus
+}
+#endif
+
#endif /* __BKE_IDPROP_H__ */
diff --git a/source/blender/blenkernel/BKE_lamp.h b/source/blender/blenkernel/BKE_lamp.h
index 3673e657b33..aa655c66477 100644
--- a/source/blender/blenkernel/BKE_lamp.h
+++ b/source/blender/blenkernel/BKE_lamp.h
@@ -50,8 +50,6 @@ struct Lamp *BKE_lamp_localize(struct Lamp *la) ATTR_WARN_UNUSED_RESULT;
void BKE_lamp_make_local(struct Main *bmain, struct Lamp *la, const bool lib_local);
void BKE_lamp_free(struct Lamp *la);
-void lamp_drivers_update(struct Scene *scene, struct Lamp *la, float ctime);
-
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/blenkernel/BKE_lattice.h b/source/blender/blenkernel/BKE_lattice.h
index f7d006785d2..1cdf193f054 100644
--- a/source/blender/blenkernel/BKE_lattice.h
+++ b/source/blender/blenkernel/BKE_lattice.h
@@ -43,6 +43,7 @@ struct Scene;
struct DerivedMesh;
struct BPoint;
struct MDeformVert;
+struct EvaluationContext;
void BKE_lattice_resize(struct Lattice *lt, int u, int v, int w, struct Object *ltOb);
void BKE_lattice_init(struct Lattice *lt);
@@ -61,10 +62,11 @@ void end_latt_deform(struct LatticeDeformData *lattice_deform_data);
bool object_deform_mball(struct Object *ob, struct ListBase *dispbase);
void outside_lattice(struct Lattice *lt);
-void curve_deform_verts(struct Scene *scene, struct Object *cuOb, struct Object *target,
- struct DerivedMesh *dm, float (*vertexCos)[3],
- int numVerts, const char *vgroup, short defaxis);
-void curve_deform_vector(struct Scene *scene, struct Object *cuOb, struct Object *target,
+void curve_deform_verts(
+ struct Object *cuOb, struct Object *target,
+ struct DerivedMesh *dm, float (*vertexCos)[3],
+ int numVerts, const char *vgroup, short defaxis);
+void curve_deform_vector(struct Object *cuOb, struct Object *target,
float orco[3], float vec[3], float mat[3][3], int no_rot_axis);
void lattice_deform_verts(struct Object *laOb, struct Object *target,
@@ -77,7 +79,7 @@ void armature_deform_verts(struct Object *armOb, struct Object *target,
float (*BKE_lattice_vertexcos_get(struct Object *ob, int *r_numVerts))[3];
void BKE_lattice_vertexcos_apply(struct Object *ob, float (*vertexCos)[3]);
-void BKE_lattice_modifiers_calc(struct Scene *scene, struct Object *ob);
+void BKE_lattice_modifiers_calc(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob);
struct MDeformVert *BKE_lattice_deform_verts_get(struct Object *lattice);
struct BPoint *BKE_lattice_active_point_get(struct Lattice *lt);
@@ -101,7 +103,15 @@ void BKE_lattice_bitmap_from_flag(struct Lattice *lt, unsigned int *bitmap, cons
struct EvaluationContext;
-void BKE_lattice_eval_geometry(struct EvaluationContext *eval_ctx,
+void BKE_lattice_eval_geometry(const struct EvaluationContext *eval_ctx,
struct Lattice *latt);
+/* Draw Cache */
+enum {
+ BKE_LATTICE_BATCH_DIRTY_ALL = 0,
+ BKE_LATTICE_BATCH_DIRTY_SELECT,
+};
+void BKE_lattice_batch_cache_dirty(struct Lattice *lt, int mode);
+void BKE_lattice_batch_cache_free(struct Lattice *lt);
+
#endif /* __BKE_LATTICE_H__ */
diff --git a/source/blender/blenkernel/BKE_layer.h b/source/blender/blenkernel/BKE_layer.h
new file mode 100644
index 00000000000..633cb2c6044
--- /dev/null
+++ b/source/blender/blenkernel/BKE_layer.h
@@ -0,0 +1,304 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Foundation, Dalai Felinto
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef __BKE_LAYER_H__
+#define __BKE_LAYER_H__
+
+/** \file blender/blenkernel/BKE_layer.h
+ * \ingroup bke
+ */
+
+#include "BKE_collection.h"
+
+#include "DNA_scene_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define TODO_LAYER_OVERRIDE /* CollectionOverride */
+#define TODO_LAYER_OPERATORS /* collection mamanger and property panel operators */
+#define TODO_LAYER /* generic todo */
+
+#define ROOT_PROP "root"
+
+struct Base;
+struct EvaluationContext;
+struct Group;
+struct ID;
+struct IDProperty;
+struct LayerCollection;
+struct ListBase;
+struct Main;
+struct Object;
+struct RenderEngine;
+struct Scene;
+struct SceneCollection;
+struct ViewLayer;
+struct WorkSpace;
+
+void BKE_layer_exit(void);
+
+struct ViewLayer *BKE_view_layer_from_scene_get(const struct Scene *scene);
+struct ViewLayer *BKE_view_layer_from_workspace_get(const struct Scene *scene, const struct WorkSpace *workspace);
+struct ViewLayer *BKE_view_layer_add(struct Scene *scene, const char *name);
+struct ViewLayer *BKE_view_layer_group_add(struct Group *group);
+
+/* DEPRECATED */
+struct ViewLayer *BKE_view_layer_context_active_PLACEHOLDER(const struct Scene *scene);
+
+void BKE_view_layer_free(struct ViewLayer *view_layer);
+void BKE_view_layer_free_ex(struct ViewLayer *view_layer, const bool do_id_user);
+
+void BKE_view_layer_selected_objects_tag(struct ViewLayer *view_layer, const int tag);
+
+struct Object *BKE_view_layer_camera_find(struct ViewLayer *view_layer);
+struct ViewLayer *BKE_view_layer_first_from_id(const struct ID *owner_id);
+struct ViewLayer *BKE_view_layer_find_from_collection(const struct ID *owner_id, struct LayerCollection *lc);
+struct Base *BKE_view_layer_base_find(struct ViewLayer *view_layer, struct Object *ob);
+void BKE_view_layer_base_deselect_all(struct ViewLayer *view_layer);
+void BKE_view_layer_base_select(struct ViewLayer *view_layer, struct Base *selbase);
+
+void BKE_layer_collection_sync_flags(
+ struct ID *owner_id,
+ struct SceneCollection *scene_collection_dst,
+ struct SceneCollection *scene_collection_src);
+
+void BKE_view_layer_copy_data(
+ struct ViewLayer *view_layer_dst, struct ViewLayer *view_layer_src,
+ struct SceneCollection *mc_dst, struct SceneCollection *mc_src,
+ const int flag);
+
+struct LayerCollection *BKE_layer_collection_duplicate(struct ID *owner_id, struct LayerCollection *layer_collection);
+
+void BKE_layer_collection_free(struct ViewLayer *view_layer, struct LayerCollection *lc);
+
+struct LayerCollection *BKE_layer_collection_get_active(struct ViewLayer *view_layer);
+struct LayerCollection *BKE_layer_collection_get_active_ensure(struct Scene *scene, struct ViewLayer *view_layer);
+
+int BKE_layer_collection_count(struct ViewLayer *view_layer);
+
+struct LayerCollection *BKE_layer_collection_from_index(struct ViewLayer *view_layer, const int index);
+int BKE_layer_collection_findindex(struct ViewLayer *view_layer, const struct LayerCollection *lc);
+
+bool BKE_layer_collection_move_above(const struct ID *owner_id, struct LayerCollection *lc_dst, struct LayerCollection *lc_src);
+bool BKE_layer_collection_move_below(const struct ID *owner_id, struct LayerCollection *lc_dst, struct LayerCollection *lc_src);
+bool BKE_layer_collection_move_into(const struct ID *owner_id, struct LayerCollection *lc_dst, struct LayerCollection *lc_src);
+
+void BKE_layer_collection_resync(const struct ID *owner_id, const struct SceneCollection *sc);
+
+struct LayerCollection *BKE_collection_link(struct ViewLayer *view_layer, struct SceneCollection *sc);
+
+void BKE_collection_unlink(struct ViewLayer *view_layer, struct LayerCollection *lc);
+
+void BKE_collection_enable(struct ViewLayer *view_layer, struct LayerCollection *lc);
+
+bool BKE_view_layer_has_collection(struct ViewLayer *view_layer, const struct SceneCollection *sc);
+bool BKE_scene_has_object(struct Scene *scene, struct Object *ob);
+
+void BKE_layer_collection_objects_select(struct LayerCollection *layer_collection);
+
+/* syncing */
+
+void BKE_layer_sync_new_scene_collection(struct ID *owner_id, const struct SceneCollection *sc_parent, struct SceneCollection *sc);
+void BKE_layer_sync_object_link(const struct ID *owner_id, struct SceneCollection *sc, struct Object *ob);
+void BKE_layer_sync_object_unlink(const struct ID *owner_id, struct SceneCollection *sc, struct Object *ob);
+
+/* override */
+
+void BKE_override_view_layer_datablock_add(struct ViewLayer *view_layer, int id_type, const char *data_path, const struct ID *owner_id);
+void BKE_override_view_layer_int_add(struct ViewLayer *view_layer, int id_type, const char *data_path, const int value);
+
+void BKE_override_layer_collection_boolean_add(struct LayerCollection *layer_collection, int id_type, const char *data_path, const bool value);
+
+/* engine settings */
+typedef void (*EngineSettingsCB)(struct RenderEngine *engine, struct IDProperty *props);
+
+struct IDProperty *BKE_layer_collection_engine_evaluated_get(struct Object *ob, const int type, const char *engine_name);
+struct IDProperty *BKE_layer_collection_engine_collection_get(struct LayerCollection *lc, const int type, const char *engine_name);
+struct IDProperty *BKE_layer_collection_engine_scene_get(struct Scene *scene, const int type, const char *engine_name);
+void BKE_layer_collection_engine_settings_callback_register(struct Main *bmain, const char *engine_name, EngineSettingsCB func);
+void BKE_layer_collection_engine_settings_callback_free(void);
+void BKE_layer_collection_engine_settings_create(struct IDProperty *root);
+void BKE_layer_collection_engine_settings_validate_scene(struct Scene *scene);
+void BKE_layer_collection_engine_settings_validate_collection(struct LayerCollection *lc);
+
+struct IDProperty *BKE_view_layer_engine_evaluated_get(struct ViewLayer *view_layer, const int type, const char *engine_name);
+struct IDProperty *BKE_view_layer_engine_layer_get(struct ViewLayer *view_layer, const int type, const char *engine_name);
+struct IDProperty *BKE_view_layer_engine_scene_get(struct Scene *scene, const int type, const char *engine_name);
+void BKE_view_layer_engine_settings_callback_register(struct Main *bmain, const char *engine_name, EngineSettingsCB func);
+void BKE_view_layer_engine_settings_callback_free(void);
+void BKE_view_layer_engine_settings_validate_scene(struct Scene *scene);
+void BKE_view_layer_engine_settings_validate_layer(struct ViewLayer *view_layer);
+void BKE_view_layer_engine_settings_create(struct IDProperty *root);
+
+void BKE_collection_engine_property_add_float(struct IDProperty *props, const char *name, float value);
+void BKE_collection_engine_property_add_float_array(
+ struct IDProperty *props, const char *name, const float *values, const int array_length);
+void BKE_collection_engine_property_add_int(struct IDProperty *props, const char *name, int value);
+void BKE_collection_engine_property_add_bool(struct IDProperty *props, const char *name, bool value);
+
+int BKE_collection_engine_property_value_get_int(struct IDProperty *props, const char *name);
+float BKE_collection_engine_property_value_get_float(struct IDProperty *props, const char *name);
+const float *BKE_collection_engine_property_value_get_float_array(struct IDProperty *props, const char *name);
+bool BKE_collection_engine_property_value_get_bool(struct IDProperty *props, const char *name);
+void BKE_collection_engine_property_value_set_int(struct IDProperty *props, const char *name, int value);
+void BKE_collection_engine_property_value_set_float(struct IDProperty *props, const char *name, float value);
+void BKE_collection_engine_property_value_set_float_array(struct IDProperty *props, const char *name, const float *values);
+void BKE_collection_engine_property_value_set_bool(struct IDProperty *props, const char *name, bool value);
+
+/* evaluation */
+
+void BKE_layer_eval_layer_collection_pre(const struct EvaluationContext *eval_ctx,
+ struct ID *owner_id,
+ struct ViewLayer *view_layer);
+void BKE_layer_eval_layer_collection(const struct EvaluationContext *eval_ctx,
+ struct LayerCollection *layer_collection,
+ struct LayerCollection *parent_layer_collection);
+void BKE_layer_eval_layer_collection_post(const struct EvaluationContext *eval_ctx,
+ struct ViewLayer *view_layer);
+
+/* iterators */
+
+void BKE_selected_objects_iterator_begin(BLI_Iterator *iter, void *data_in);
+void BKE_selected_objects_iterator_next(BLI_Iterator *iter);
+void BKE_selected_objects_iterator_end(BLI_Iterator *iter);
+
+void BKE_visible_objects_iterator_begin(BLI_Iterator *iter, void *data_in);
+void BKE_visible_objects_iterator_next(BLI_Iterator *iter);
+void BKE_visible_objects_iterator_end(BLI_Iterator *iter);
+
+void BKE_renderable_objects_iterator_begin(BLI_Iterator *iter, void *data_in);
+void BKE_renderable_objects_iterator_next(BLI_Iterator *iter);
+void BKE_renderable_objects_iterator_end(BLI_Iterator *iter);
+
+void BKE_selected_bases_iterator_begin(BLI_Iterator *iter, void *data_in);
+void BKE_selected_bases_iterator_next(BLI_Iterator *iter);
+void BKE_selected_bases_iterator_end(BLI_Iterator *iter);
+
+void BKE_visible_bases_iterator_begin(BLI_Iterator *iter, void *data_in);
+void BKE_visible_bases_iterator_next(BLI_Iterator *iter);
+void BKE_visible_bases_iterator_end(BLI_Iterator *iter);
+
+#define FOREACH_SELECTED_OBJECT(view_layer, _instance) \
+ ITER_BEGIN(BKE_selected_objects_iterator_begin, \
+ BKE_selected_objects_iterator_next, \
+ BKE_selected_objects_iterator_end, \
+ view_layer, Object *, _instance)
+
+#define FOREACH_SELECTED_OBJECT_END \
+ ITER_END
+
+#define FOREACH_VISIBLE_OBJECT(view_layer, _instance) \
+ ITER_BEGIN(BKE_visible_objects_iterator_begin, \
+ BKE_visible_objects_iterator_next, \
+ BKE_visible_objects_iterator_end, \
+ view_layer, Object *, _instance)
+
+#define FOREACH_VISIBLE_OBJECT_END \
+ ITER_END
+
+#define FOREACH_SELECTED_BASE(view_layer, _instance) \
+ ITER_BEGIN(BKE_selected_bases_iterator_begin, \
+ BKE_selected_bases_iterator_next, \
+ BKE_selected_bases_iterator_end, \
+ view_layer, Base *, _instance)
+
+#define FOREACH_SELECTED_BASE_END \
+ ITER_END
+
+#define FOREACH_VISIBLE_BASE(view_layer, _instance) \
+ ITER_BEGIN(BKE_visible_bases_iterator_begin, \
+ BKE_visible_bases_iterator_next, \
+ BKE_visible_bases_iterator_end, \
+ view_layer, Base *, _instance)
+
+#define FOREACH_VISIBLE_BASE_END \
+ ITER_END
+
+
+#define FOREACH_OBJECT(view_layer, _instance) \
+{ \
+ Object *_instance; \
+ Base *base; \
+ for (base = (view_layer)->object_bases.first; base; base = base->next) { \
+ _instance = base->object;
+
+#define FOREACH_OBJECT_END \
+ } \
+}
+
+#define FOREACH_OBJECT_FLAG(scene, view_layer, flag, _instance) \
+{ \
+ IteratorBeginCb func_begin; \
+ IteratorCb func_next, func_end; \
+ void *data_in; \
+ \
+ if (flag == SELECT) { \
+ func_begin = &BKE_selected_objects_iterator_begin; \
+ func_next = &BKE_selected_objects_iterator_next; \
+ func_end = &BKE_selected_objects_iterator_end; \
+ data_in = (view_layer); \
+ } \
+ else { \
+ func_begin = BKE_scene_objects_iterator_begin; \
+ func_next = BKE_scene_objects_iterator_next; \
+ func_end = BKE_scene_objects_iterator_end; \
+ data_in = (scene); \
+ } \
+ ITER_BEGIN(func_begin, func_next, func_end, data_in, Object *, _instance)
+
+
+#define FOREACH_OBJECT_FLAG_END \
+ ITER_END \
+}
+
+typedef struct ObjectsRenderableIteratorData {
+ struct Scene *scene;
+ struct Base base_temp;
+ struct Scene scene_temp;
+
+ struct {
+ struct ViewLayer *view_layer;
+ struct Base *base;
+ struct Scene *set;
+ } iter;
+} ObjectsRenderableIteratorData;
+
+#define FOREACH_OBJECT_RENDERABLE(scene_, _instance) \
+ ObjectsRenderableIteratorData data_ = { \
+ .scene = (scene_), \
+ }; \
+ ITER_BEGIN(BKE_renderable_objects_iterator_begin, \
+ BKE_renderable_objects_iterator_next, \
+ BKE_renderable_objects_iterator_end, \
+ &data_, Object *, _instance)
+
+
+#define FOREACH_OBJECT_RENDERABLE_END \
+ ITER_END
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __BKE_LAYER_H__ */
diff --git a/source/blender/blenkernel/BKE_library.h b/source/blender/blenkernel/BKE_library.h
index 9e1bc2611fb..f3df8b9b363 100644
--- a/source/blender/blenkernel/BKE_library.h
+++ b/source/blender/blenkernel/BKE_library.h
@@ -148,6 +148,7 @@ bool id_make_local(struct Main *bmain, struct ID *id, const bool test, const boo
bool id_single_user(struct bContext *C, struct ID *id, struct PointerRNA *ptr, struct PropertyRNA *prop);
bool id_copy(struct Main *bmain, const struct ID *id, struct ID **newid, bool test);
bool BKE_id_copy_ex(struct Main *bmain, const struct ID *id, struct ID **r_newid, const int flag, const bool test);
+void BKE_id_swap(struct Main *bmain, struct ID *id_a, struct ID *id_b);
void id_sort_by_name(struct ListBase *lb, struct ID *id);
void BKE_id_expand_local(struct Main *bmain, struct ID *id);
void BKE_id_copy_ensure_local(struct Main *bmain, const struct ID *old_id, struct ID *new_id);
@@ -158,7 +159,7 @@ void id_clear_lib_data_ex(struct Main *bmain, struct ID *id, const bool id_in_ma
struct ListBase *which_libbase(struct Main *mainlib, short type);
-#define MAX_LIBARRAY 35
+#define MAX_LIBARRAY 37
int set_listbasepointers(struct Main *main, struct ListBase *lb[MAX_LIBARRAY]);
/* Main API */
diff --git a/source/blender/blenkernel/BKE_library_override.h b/source/blender/blenkernel/BKE_library_override.h
new file mode 100644
index 00000000000..35672cb5ded
--- /dev/null
+++ b/source/blender/blenkernel/BKE_library_override.h
@@ -0,0 +1,87 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2016 by Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): Bastien Montagne.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef __BKE_LIBRARY_OVERRIDE_H__
+#define __BKE_LIBRARY_OVERRIDE_H__
+
+/** \file BKE_library_override.h
+ * \ingroup bke
+ * \since December 2016
+ * \author mont29
+ */
+
+struct ID;
+struct IDOverrideStatic;
+struct IDOverrideStaticProperty;
+struct IDOverrideStaticPropertyOperation;
+struct Main;
+
+struct IDOverrideStatic *BKE_override_static_init(struct ID *local_id, struct ID *reference_id);
+void BKE_override_static_copy(struct ID *dst_id, const struct ID *src_id);
+void BKE_override_static_clear(struct IDOverrideStatic *override);
+void BKE_override_static_free(struct IDOverrideStatic **override);
+
+struct ID *BKE_override_static_create_from_id(struct Main *bmain, struct ID *reference_id);
+bool BKE_override_static_create_from_tag(struct Main *bmain);
+
+struct IDOverrideStaticProperty *BKE_override_static_property_find(struct IDOverrideStatic *override, const char *rna_path);
+struct IDOverrideStaticProperty *BKE_override_static_property_get(struct IDOverrideStatic *override, const char *rna_path, bool *r_created);
+void BKE_override_static_property_delete(struct IDOverrideStatic *override, struct IDOverrideStaticProperty *override_property);
+
+struct IDOverrideStaticPropertyOperation *BKE_override_static_property_operation_find(
+ struct IDOverrideStaticProperty *override_property,
+ const char *subitem_refname, const char *subitem_locname,
+ const int subitem_refindex, const int subitem_locindex, const bool strict, bool *r_strict);
+struct IDOverrideStaticPropertyOperation *BKE_override_static_property_operation_get(
+ struct IDOverrideStaticProperty *override_property, const short operation,
+ const char *subitem_refname, const char *subitem_locname,
+ const int subitem_refindex, const int subitem_locindex,
+ const bool strict, bool *r_strict, bool *r_created);
+void BKE_override_static_property_operation_delete(
+ struct IDOverrideStaticProperty *override_property, struct IDOverrideStaticPropertyOperation *override_property_operation);
+
+bool BKE_override_static_status_check_local(struct ID *local);
+bool BKE_override_static_status_check_reference(struct ID *local);
+
+bool BKE_override_static_operations_create(struct ID *local);
+void BKE_main_override_static_operations_create(struct Main *bmain);
+
+void BKE_override_static_update(struct Main *bmain, struct ID *local);
+void BKE_main_override_static_update(struct Main *bmain);
+
+
+/* Storage (.blend file writing) part. */
+
+/* For now, we just use a temp main list. */
+typedef struct Main OverrideStaticStorage;
+
+OverrideStaticStorage *BKE_override_static_operations_store_initialize(void);
+struct ID *BKE_override_static_operations_store_start(OverrideStaticStorage *override_storage, struct ID *local);
+void BKE_override_static_operations_store_end(OverrideStaticStorage *override_storage, struct ID *local);
+void BKE_override_static_operations_store_finalize(OverrideStaticStorage *override_storage);
+
+
+
+#endif /* __BKE_LIBRARY_OVERRIDE_H__ */
diff --git a/source/blender/blenkernel/BKE_library_query.h b/source/blender/blenkernel/BKE_library_query.h
index d6e7d98f371..b66fc0aab16 100644
--- a/source/blender/blenkernel/BKE_library_query.h
+++ b/source/blender/blenkernel/BKE_library_query.h
@@ -56,6 +56,9 @@ enum {
* How to handle that kind of cases totally depends on what caller code is doing... */
IDWALK_CB_LOOPBACK = (1 << 4),
+ /** That ID is used as static override's reference by its owner. */
+ IDWALK_CB_STATIC_OVERRIDE_REFERENCE = (1 << 5),
+
/**
* Adjusts #ID.us reference-count.
* \note keep in sync with 'newlibadr_us' use in readfile.c
diff --git a/source/blender/blenkernel/BKE_library_remap.h b/source/blender/blenkernel/BKE_library_remap.h
index fd37fd762f4..3425ca011b7 100644
--- a/source/blender/blenkernel/BKE_library_remap.h
+++ b/source/blender/blenkernel/BKE_library_remap.h
@@ -51,6 +51,8 @@ enum {
* This is needed e.g. in reload scenario, since we have to ensure remapping of Armature data of local proxy
* is also performed. Usual nightmare... */
ID_REMAP_NO_INDIRECT_PROXY_DATA_USAGE = 1 << 4,
+ /* Do not remap static override pointers. */
+ ID_REMAP_SKIP_STATIC_OVERRIDE = 1 << 5,
};
/* Note: Requiring new_id to be non-null, this *may* not be the case ultimately, but makes things simpler for now. */
diff --git a/source/blender/blenkernel/BKE_lightprobe.h b/source/blender/blenkernel/BKE_lightprobe.h
new file mode 100644
index 00000000000..a769b6653d7
--- /dev/null
+++ b/source/blender/blenkernel/BKE_lightprobe.h
@@ -0,0 +1,46 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef __BKE_LIGHTPROBE_H__
+#define __BKE_LIGHTPROBE_H__
+
+/** \file BKE_lightprobe.h
+ * \ingroup bke
+ * \brief General operations for probes.
+ */
+
+struct Main;
+struct LightProbe;
+
+void BKE_lightprobe_init(struct LightProbe *probe);
+void *BKE_lightprobe_add(struct Main *bmain, const char *name);
+void BKE_lightprobe_copy_data(struct Main *bmain, struct LightProbe *probe_dst, const struct LightProbe *probe_src, const int flag);
+struct LightProbe *BKE_lightprobe_copy(struct Main *bmain, const struct LightProbe *probe);
+void BKE_lightprobe_make_local(struct Main *bmain, struct LightProbe *probe, const bool lib_local);
+void BKE_lightprobe_free(struct LightProbe *probe);
+
+#endif /* __BKE_LIGHTPROBE_H__ */
diff --git a/source/blender/blenkernel/BKE_main.h b/source/blender/blenkernel/BKE_main.h
index d8318bfcf5d..79f56cf25ef 100644
--- a/source/blender/blenkernel/BKE_main.h
+++ b/source/blender/blenkernel/BKE_main.h
@@ -108,6 +108,7 @@ typedef struct Main {
ListBase vfont;
ListBase text;
ListBase speaker;
+ ListBase lightprobe;
ListBase sound;
ListBase group;
ListBase armature;
@@ -123,6 +124,7 @@ typedef struct Main {
ListBase mask;
ListBase linestyle;
ListBase cachefiles;
+ ListBase workspaces;
char id_tag_update[MAX_LIBARRAY];
diff --git a/source/blender/blenkernel/BKE_mask.h b/source/blender/blenkernel/BKE_mask.h
index 5598f0dc473..8b9fea071b0 100644
--- a/source/blender/blenkernel/BKE_mask.h
+++ b/source/blender/blenkernel/BKE_mask.h
@@ -145,7 +145,6 @@ void BKE_mask_update_display(struct Mask *mask, float ctime);
void BKE_mask_evaluate_all_masks(struct Main *bmain, float ctime, const bool do_newframe);
void BKE_mask_evaluate(struct Mask *mask, const float ctime, const bool do_newframe);
void BKE_mask_layer_evaluate(struct MaskLayer *masklay, const float ctime, const bool do_newframe);
-void BKE_mask_update_scene(struct Main *bmain, struct Scene *scene);
void BKE_mask_parent_init(struct MaskParent *parent);
void BKE_mask_calc_handle_adjacent_interp(struct MaskSpline *spline, struct MaskSplinePoint *point, const float u);
void BKE_mask_calc_tangent_polyline(struct MaskSpline *spline, struct MaskSplinePoint *point, float t[2]);
diff --git a/source/blender/blenkernel/BKE_material.h b/source/blender/blenkernel/BKE_material.h
index f7850913014..f4c98fc0aea 100644
--- a/source/blender/blenkernel/BKE_material.h
+++ b/source/blender/blenkernel/BKE_material.h
@@ -87,6 +87,10 @@ short BKE_object_material_slot_find_index(struct Object *ob, struct Material *ma
bool BKE_object_material_slot_add(struct Object *ob);
bool BKE_object_material_slot_remove(struct Object *ob);
+struct Image *BKE_object_material_edit_image_get(struct Object *ob, short mat_nr);
+struct Image **BKE_object_material_edit_image_get_array(struct Object *ob);
+bool BKE_object_material_edit_image_set(struct Object *ob, short mat_nr, struct Image *image);
+
void BKE_texpaint_slot_refresh_cache(struct Scene *scene, struct Material *ma);
void BKE_texpaint_slots_refresh_object(struct Scene *scene, struct Object *ob);
@@ -106,17 +110,17 @@ bool material_in_material(struct Material *parmat, struct Material *mat);
void ramp_blend(int type, float r_col[3], const float fac, const float col[3]);
-/* driver update hacks */
-void material_drivers_update(struct Scene *scene, struct Material *mat, float ctime);
-
/* copy/paste */
void clear_matcopybuf(void);
void free_matcopybuf(void);
void copy_matcopybuf(struct Material *ma);
void paste_matcopybuf(struct Material *ma);
-/* handle backward compatibility for tface/materials called from doversion */
-int do_version_tface(struct Main *main);
+/* Evaluation. */
+
+struct EvaluationContext;
+
+void BKE_material_eval(const struct EvaluationContext *eval_ctx, struct Material *material);
#ifdef __cplusplus
}
diff --git a/source/blender/blenkernel/BKE_mball.h b/source/blender/blenkernel/BKE_mball.h
index f02704ba903..9db277f95fb 100644
--- a/source/blender/blenkernel/BKE_mball.h
+++ b/source/blender/blenkernel/BKE_mball.h
@@ -73,7 +73,18 @@ void BKE_mball_select_swap(struct MetaBall *mb);
struct EvaluationContext;
-void BKE_mball_eval_geometry(struct EvaluationContext *eval_ctx,
+void BKE_mball_eval_geometry(const struct EvaluationContext *eval_ctx,
struct MetaBall *mball);
+/* Draw Cache */
+
+void BKE_mball_element_calc_display_m3x4(float r_scale_xform[3][4],
+ const float obmat[4][4],
+ const float local_pos[3]);
+
+enum {
+ BKE_MBALL_BATCH_DIRTY_ALL = 0,
+};
+void BKE_mball_batch_cache_dirty(struct MetaBall *mb, int mode);
+void BKE_mball_batch_cache_free(struct MetaBall *mb);
#endif
diff --git a/source/blender/blenkernel/BKE_mball_tessellate.h b/source/blender/blenkernel/BKE_mball_tessellate.h
index 361f31b704c..40cdc80e280 100644
--- a/source/blender/blenkernel/BKE_mball_tessellate.h
+++ b/source/blender/blenkernel/BKE_mball_tessellate.h
@@ -28,7 +28,7 @@ struct Object;
struct Scene;
void BKE_mball_polygonize(
- struct EvaluationContext *eval_ctx, struct Scene *scene,
+ const struct EvaluationContext *eval_ctx, struct Scene *scene,
struct Object *ob, struct ListBase *dispbase);
void BKE_mball_cubeTable_free(void);
diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h
index f3b2b653e3d..5ee3b9be5f9 100644
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@ -35,6 +35,7 @@ struct ID;
struct BMeshCreateParams;
struct BoundBox;
struct EdgeHash;
+struct EvaluationContext;
struct ListBase;
struct LinkNode;
struct BLI_Stack;
@@ -92,6 +93,9 @@ struct Mesh *BKE_mesh_copy(struct Main *bmain, const struct Mesh *me);
void BKE_mesh_update_customdata_pointers(struct Mesh *me, const bool do_ensure_tess_cd);
void BKE_mesh_ensure_skin_customdata(struct Mesh *me);
+bool BKE_mesh_ensure_facemap_customdata(struct Mesh *me);
+bool BKE_mesh_clear_facemap_customdata(struct Mesh *me);
+
void BKE_mesh_make_local(struct Main *bmain, struct Mesh *me, const bool lib_local);
void BKE_mesh_boundbox_calc(struct Mesh *me, float r_loc[3], float r_size[3]);
void BKE_mesh_texspace_calc(struct Mesh *me);
@@ -115,7 +119,7 @@ void BKE_mesh_from_nurbs_displist(
struct Object *ob, struct ListBase *dispbase, const bool use_orco_uv, const char *obdata_name);
void BKE_mesh_from_nurbs(struct Object *ob);
void BKE_mesh_to_curve_nurblist(struct DerivedMesh *dm, struct ListBase *nurblist, const int edge_users_test);
-void BKE_mesh_to_curve(struct Scene *scene, struct Object *ob);
+void BKE_mesh_to_curve(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob);
void BKE_mesh_material_index_remove(struct Mesh *me, short index);
void BKE_mesh_material_index_clear(struct Mesh *me);
void BKE_mesh_material_remap(struct Mesh *me, const unsigned int *remap, unsigned int remap_len);
@@ -125,6 +129,7 @@ const char *BKE_mesh_cmp(struct Mesh *me1, struct Mesh *me2, float thresh);
struct BoundBox *BKE_mesh_boundbox_get(struct Object *ob);
void BKE_mesh_texspace_get(struct Mesh *me, float r_loc[3], float r_rot[3], float r_size[3]);
+void BKE_mesh_texspace_get_reference(struct Mesh *me, short **r_texflag, float **r_loc, float **r_rot, float **r_size);
void BKE_mesh_texspace_copy_from_object(struct Mesh *me, struct Object *ob);
bool BKE_mesh_uv_cdlayer_rename_index(struct Mesh *me, const int poly_index, const int loop_index, const int face_index,
@@ -135,7 +140,7 @@ float (*BKE_mesh_vertexCos_get(const struct Mesh *me, int *r_numVerts))[3];
void BKE_mesh_split_faces(struct Mesh *mesh, bool free_loop_normals);
-struct Mesh *BKE_mesh_new_from_object(struct Main *bmain, struct Scene *sce, struct Object *ob,
+struct Mesh *BKE_mesh_new_from_object(const struct EvaluationContext *eval_ctx, struct Main *bmain, struct Scene *sce, struct Object *ob,
int apply_modifiers, int settings, int calc_tessface, int calc_undeformed);
/* vertex level transformations & checks (no derived mesh) */
@@ -188,13 +193,6 @@ void BKE_mesh_calc_normals_looptri(
const struct MLoop *mloop,
const struct MLoopTri *looptri, int looptri_num,
float (*r_tri_nors)[3]);
-void BKE_mesh_loop_tangents_ex(
- const struct MVert *mverts, const int numVerts, const struct MLoop *mloops,
- float (*r_looptangent)[4], float (*loopnors)[3], const struct MLoopUV *loopuv,
- const int numLoops, const struct MPoly *mpolys, const int numPolys,
- struct ReportList *reports);
-void BKE_mesh_loop_tangents(
- struct Mesh *mesh, const char *uvmap, float (*r_looptangents)[4], struct ReportList *reports);
/**
* References a contiguous loop-fan with normal offset vars.
@@ -297,7 +295,7 @@ void BKE_mesh_loops_to_mface_corners(
const int numTex, const int numCol,
const bool hasPCol, const bool hasOrigSpace, const bool hasLNor);
void BKE_mesh_loops_to_tessdata(
- struct CustomData *fdata, struct CustomData *ldata, struct CustomData *pdata, struct MFace *mface,
+ struct CustomData *fdata, struct CustomData *ldata, struct MFace *mface,
int *polyindices, unsigned int (*loopindices)[4], const int num_faces);
void BKE_mesh_tangent_loops_to_tessdata(
struct CustomData *fdata, struct CustomData *ldata, struct MFace *mface,
@@ -375,7 +373,6 @@ void BKE_mesh_calc_relative_deform(
/* *** mesh_validate.c *** */
int BKE_mesh_validate(struct Mesh *me, const int do_verbose, const int cddata_check_mask);
-void BKE_mesh_cd_validate(struct Mesh *me);
int BKE_mesh_validate_material_indices(struct Mesh *me);
bool BKE_mesh_validate_arrays(
@@ -405,11 +402,20 @@ void BKE_mesh_calc_edges(struct Mesh *mesh, bool update, const bool select);
/* **** Depsgraph evaluation **** */
-struct EvaluationContext;
-
-void BKE_mesh_eval_geometry(struct EvaluationContext *eval_ctx,
+void BKE_mesh_eval_geometry(const struct EvaluationContext *eval_ctx,
struct Mesh *mesh);
+/* Draw Cache */
+enum {
+ BKE_MESH_BATCH_DIRTY_ALL = 0,
+ BKE_MESH_BATCH_DIRTY_MAYBE_ALL,
+ BKE_MESH_BATCH_DIRTY_SELECT,
+ BKE_MESH_BATCH_DIRTY_SHADING,
+ BKE_MESH_BATCH_DIRTY_SCULPT_COORDS,
+};
+void BKE_mesh_batch_cache_dirty(struct Mesh *me, int mode);
+void BKE_mesh_batch_cache_free(struct Mesh *me);
+
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/blenkernel/BKE_mesh_tangent.h b/source/blender/blenkernel/BKE_mesh_tangent.h
new file mode 100644
index 00000000000..cb3100c1c2f
--- /dev/null
+++ b/source/blender/blenkernel/BKE_mesh_tangent.h
@@ -0,0 +1,61 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+#ifndef __BKE_MESH_TANGENT_H__
+#define __BKE_MESH_TANGENT_H__
+
+void BKE_mesh_calc_loop_tangent_single_ex(
+ const struct MVert *mverts, const int numVerts, const struct MLoop *mloops,
+ float (*r_looptangent)[4], float (*loopnors)[3], const struct MLoopUV *loopuv,
+ const int numLoops, const struct MPoly *mpolys, const int numPolys,
+ struct ReportList *reports);
+void BKE_mesh_calc_loop_tangent_single(
+ struct Mesh *mesh, const char *uvmap, float (*r_looptangents)[4], struct ReportList *reports);
+
+void BKE_mesh_calc_loop_tangent_ex(
+ const struct MVert *mvert,
+ const struct MPoly *mpoly, const uint mpoly_len,
+ const struct MLoop *mloop,
+ const struct MLoopTri *looptri, const uint looptri_len,
+
+ struct CustomData *loopdata,
+ bool calc_active_tangent,
+ const char (*tangent_names)[64], int tangent_names_len,
+ const float (*poly_normals)[3],
+ const float (*loop_normals)[3],
+ const float (*vert_orco)[3],
+ /* result */
+ struct CustomData *loopdata_out,
+ const uint loopdata_out_len,
+ short *tangent_mask_curr_p);
+
+/* Helpers */
+void BKE_mesh_add_loop_tangent_named_layer_for_uv(
+ struct CustomData *uv_data, struct CustomData *tan_data, int numLoopData,
+ const char *layer_name);
+
+#define DM_TANGENT_MASK_ORCO (1 << 9)
+void BKE_mesh_calc_loop_tangent_step_0(
+ const struct CustomData *loopData, bool calc_active_tangent,
+ const char (*tangent_names)[64], int tangent_names_count,
+ bool *rcalc_act, bool *rcalc_ren, int *ract_uv_n, int *rren_uv_n,
+ char *ract_uv_name, char *rren_uv_name, short *rtangent_mask);
+
+#endif /* __BKE_MESH_TANGENT_H__ */
+
diff --git a/source/blender/blenkernel/BKE_modifier.h b/source/blender/blenkernel/BKE_modifier.h
index 30c47a4b192..8ee67850e5f 100644
--- a/source/blender/blenkernel/BKE_modifier.h
+++ b/source/blender/blenkernel/BKE_modifier.h
@@ -36,8 +36,10 @@ struct ID;
struct DerivedMesh;
struct DagForest;
struct DagNode;
+struct EvaluationContext;
struct Object;
struct Scene;
+struct ViewLayer;
struct ListBase;
struct bArmature;
struct Main;
@@ -157,25 +159,27 @@ typedef struct ModifierTypeInfo {
* the object it can obtain it from the derivedData argument if non-NULL,
* and otherwise the ob argument.
*/
- void (*deformVerts)(struct ModifierData *md, struct Object *ob,
- struct DerivedMesh *derivedData,
+ void (*deformVerts)(struct ModifierData *md, const struct EvaluationContext *eval_ctx,
+ struct Object *ob, struct DerivedMesh *derivedData,
float (*vertexCos)[3], int numVerts,
ModifierApplyFlag flag);
/* Like deformMatricesEM but called from object mode (for supporting modifiers in sculpt mode) */
- void (*deformMatrices)(struct ModifierData *md, struct Object *ob,
- struct DerivedMesh *derivedData,
+ void (*deformMatrices)(struct ModifierData *md, const struct EvaluationContext *eval_ctx,
+ struct Object *ob, struct DerivedMesh *derivedData,
float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
/* Like deformVerts but called during editmode (for supporting modifiers)
*/
- void (*deformVertsEM)(struct ModifierData *md, struct Object *ob,
- struct BMEditMesh *editData, struct DerivedMesh *derivedData,
+ void (*deformVertsEM)(struct ModifierData *md, const struct EvaluationContext *eval_ctx,
+ struct Object *ob, struct BMEditMesh *editData,
+ struct DerivedMesh *derivedData,
float (*vertexCos)[3], int numVerts);
/* Set deform matrix per vertex for crazyspace correction */
- void (*deformMatricesEM)(struct ModifierData *md, struct Object *ob,
- struct BMEditMesh *editData, struct DerivedMesh *derivedData,
+ void (*deformMatricesEM)(struct ModifierData *md, const struct EvaluationContext *eval_ctx,
+ struct Object *ob, struct BMEditMesh *editData,
+ struct DerivedMesh *derivedData,
float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
/********************* Non-deform modifier functions *********************/
@@ -199,8 +203,8 @@ typedef struct ModifierTypeInfo {
* The modifier may reuse the derivedData argument (i.e. return it in
* modified form), but must not release it.
*/
- struct DerivedMesh *(*applyModifier)(struct ModifierData *md, struct Object *ob,
- struct DerivedMesh *derivedData,
+ struct DerivedMesh *(*applyModifier)(struct ModifierData *md, const struct EvaluationContext *eval_ctx,
+ struct Object *ob, struct DerivedMesh *derivedData,
ModifierApplyFlag flag);
/* Like applyModifier but called during editmode (for supporting
@@ -210,10 +214,9 @@ typedef struct ModifierTypeInfo {
* are expected from editmode objects. The same qualifications regarding
* derivedData apply as for applyModifier.
*/
- struct DerivedMesh *(*applyModifierEM)(struct ModifierData *md, struct Object *ob,
- struct BMEditMesh *editData,
- struct DerivedMesh *derivedData,
- ModifierApplyFlag flag);
+ struct DerivedMesh *(*applyModifierEM)(struct ModifierData *md, const struct EvaluationContext *eval_ctx,
+ struct Object *ob, struct BMEditMesh *editData,
+ struct DerivedMesh *derivedData, ModifierApplyFlag flag);
/********************* Optional functions *********************/
@@ -260,20 +263,10 @@ typedef struct ModifierTypeInfo {
*/
bool (*isDisabled)(struct ModifierData *md, int userRenderParams);
- /* Add the appropriate relations to the DEP graph depending on the
- * modifier data.
- *
- * This function is optional.
- */
- void (*updateDepgraph)(struct ModifierData *md, struct DagForest *forest,
- struct Main *bmain, struct Scene *scene,
- struct Object *ob, struct DagNode *obNode);
-
/* Add the appropriate relations to the dependency graph.
*
* This function is optional.
*/
- /* TODO(sergey): Remove once we finally switched to the new depsgraph. */
void (*updateDepsgraph)(struct ModifierData *md,
struct Main *bmain,
struct Scene *scene,
@@ -381,7 +374,8 @@ struct Object *modifiers_isDeformedByArmature(struct Object *ob);
struct Object *modifiers_isDeformedByLattice(struct Object *ob);
struct Object *modifiers_isDeformedByCurve(struct Object *ob);
bool modifiers_usesArmature(struct Object *ob, struct bArmature *arm);
-bool modifiers_isCorrectableDeformed(struct Scene *scene, struct Object *ob);
+bool modifiers_isCorrectableDeformed(
+ const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob);
void modifier_freeTemporaryData(struct ModifierData *md);
bool modifiers_isPreview(struct Object *ob);
@@ -427,24 +421,24 @@ const char *modifier_path_relbase(struct Object *ob);
/* wrappers for modifier callbacks */
struct DerivedMesh *modwrap_applyModifier(
- ModifierData *md, struct Object *ob,
- struct DerivedMesh *dm,
+ ModifierData *md, const struct EvaluationContext *eval_ctx,
+ struct Object *ob, struct DerivedMesh *dm,
ModifierApplyFlag flag);
struct DerivedMesh *modwrap_applyModifierEM(
- ModifierData *md, struct Object *ob,
- struct BMEditMesh *em,
+ ModifierData *md, const struct EvaluationContext *eval_ctx,
+ struct Object *ob, struct BMEditMesh *em,
struct DerivedMesh *dm,
ModifierApplyFlag flag);
void modwrap_deformVerts(
- ModifierData *md, struct Object *ob,
- struct DerivedMesh *dm,
+ ModifierData *md, const struct EvaluationContext *eval_ctx,
+ struct Object *ob, struct DerivedMesh *dm,
float (*vertexCos)[3], int numVerts,
ModifierApplyFlag flag);
void modwrap_deformVertsEM(
- ModifierData *md, struct Object *ob,
+ ModifierData *md, const struct EvaluationContext *eval_ctx, struct Object *ob,
struct BMEditMesh *em, struct DerivedMesh *dm,
float (*vertexCos)[3], int numVerts);
diff --git a/source/blender/blenkernel/BKE_multires.h b/source/blender/blenkernel/BKE_multires.h
index 178751d1640..22933a093ed 100644
--- a/source/blender/blenkernel/BKE_multires.h
+++ b/source/blender/blenkernel/BKE_multires.h
@@ -34,6 +34,7 @@
enum MultiresModifiedFlags;
struct DerivedMesh;
+struct EvaluationContext;
struct MDisps;
struct Mesh;
struct ModifierData;
@@ -47,20 +48,21 @@ struct MVert;
struct MPoly;
struct MLoopTri;
+#include "DNA_object_enums.h"
+
/* Delete mesh mdisps and grid paint masks */
void multires_customdata_delete(struct Mesh *me);
-void multires_set_tot_level(struct Object *ob,
- struct MultiresModifierData *mmd, int lvl);
+void multires_set_tot_level(struct MultiresModifierData *mmd, int lvl, eObjectMode object_mode);
void multires_mark_as_modified(struct Object *ob, enum MultiresModifiedFlags flags);
void multires_force_update(struct Object *ob);
-void multires_force_render_update(struct Object *ob);
+void multires_force_render_update(struct Object *ob, eObjectMode object_mode);
void multires_force_external_reload(struct Object *ob);
/* internal, only called in subsurf_ccg.c */
-void multires_modifier_update_mdisps(struct DerivedMesh *dm);
+void multires_modifier_update_mdisps(struct DerivedMesh *dm, eObjectMode object_mode);
void multires_modifier_update_hidden(struct DerivedMesh *dm);
void multiresModifier_set_levels_from_disps(struct MultiresModifierData *mmd, struct Object *ob);
@@ -72,26 +74,32 @@ typedef enum {
MULTIRES_IGNORE_SIMPLIFY = 8
} MultiresFlags;
-struct DerivedMesh *multires_make_derived_from_derived(struct DerivedMesh *dm,
- struct MultiresModifierData *mmd,
- struct Object *ob,
- MultiresFlags flags);
+struct DerivedMesh *multires_make_derived_from_derived(
+ struct DerivedMesh *dm,
+ struct MultiresModifierData *mmd,
+ struct Object *ob,
+ MultiresFlags flags,
+ eObjectMode object_mode);
struct MultiresModifierData *find_multires_modifier_before(struct Scene *scene,
struct ModifierData *lastmd);
struct MultiresModifierData *get_multires_modifier(struct Scene *scene, struct Object *ob, bool use_first);
-struct DerivedMesh *get_multires_dm(struct Scene *scene, struct MultiresModifierData *mmd,
+struct DerivedMesh *get_multires_dm(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct MultiresModifierData *mmd,
struct Object *ob);
-void multiresModifier_del_levels(struct MultiresModifierData *, struct Object *, int direction);
-void multiresModifier_base_apply(struct MultiresModifierData *mmd, struct Object *ob);
-void multiresModifier_subdivide(struct MultiresModifierData *mmd, struct Object *ob, int updateblock, int simple);
+void multiresModifier_del_levels(
+ struct MultiresModifierData *, struct Object *, int direction, eObjectMode object_mode);
+void multiresModifier_base_apply(
+ struct MultiresModifierData *mmd, struct Object *ob, eObjectMode object_mode);
+void multiresModifier_subdivide(
+ struct MultiresModifierData *mmd, struct Object *ob, int updateblock, int simple, eObjectMode object_mode);
void multiresModifier_sync_levels_ex(
- struct Object *ob_dst, struct MultiresModifierData *mmd_src, struct MultiresModifierData *mmd_dst);
-int multiresModifier_reshape(struct Scene *scene, struct MultiresModifierData *mmd,
+ struct Object *ob_dst, struct MultiresModifierData *mmd_src, struct MultiresModifierData *mmd_dst,
+ eObjectMode object_mode);
+int multiresModifier_reshape(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct MultiresModifierData *mmd,
struct Object *dst, struct Object *src);
-int multiresModifier_reshapeFromDM(struct Scene *scene, struct MultiresModifierData *mmd,
+int multiresModifier_reshapeFromDM(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct MultiresModifierData *mmd,
struct Object *ob, struct DerivedMesh *srcdm);
-int multiresModifier_reshapeFromDeformMod(struct Scene *scene, struct MultiresModifierData *mmd,
+int multiresModifier_reshapeFromDeformMod(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct MultiresModifierData *mmd,
struct Object *ob, struct ModifierData *md);
void multires_stitch_grids(struct Object *);
@@ -102,15 +110,15 @@ enum {
MULTIRES_SPACE_OBJECT,
MULTIRES_SPACE_ABSOLUTE
};
-void multires_set_space(struct DerivedMesh *dm, struct Object *ob, int from, int to);
+void multires_set_space(struct DerivedMesh *dm, struct Object *ob, int from, int to, eObjectMode object_mode);
/* Related to the old multires */
void multires_free(struct Multires *mr);
void multires_load_old(struct Object *ob, struct Mesh *me);
void multires_load_old_250(struct Mesh *);
-void multiresModifier_scale_disp(struct Scene *scene, struct Object *ob);
-void multiresModifier_prepare_join(struct Scene *scene, struct Object *ob, struct Object *to_ob);
+void multiresModifier_scale_disp(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob);
+void multiresModifier_prepare_join(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob, struct Object *to_ob);
int multires_mdisp_corners(struct MDisps *s);
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index 8a736c9952d..770b2b4a185 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -74,6 +74,7 @@ struct PointerRNA;
struct RenderData;
struct Scene;
struct Tex;
+struct ViewRender;
struct SpaceNode;
struct ARegion;
struct ColorManagedViewSettings;
@@ -251,8 +252,9 @@ typedef struct bNodeType {
#define NODE_CLASS_LAYOUT 100
/* nodetype->compatibility */
-#define NODE_OLD_SHADING 1
-#define NODE_NEW_SHADING 2
+#define NODE_OLD_SHADING (1 << 0)
+#define NODE_NEW_SHADING (1 << 1)
+#define NODE_NEWER_SHADING (1 << 2)
/* node resize directions */
#define NODE_RESIZE_TOP 1
@@ -281,7 +283,7 @@ typedef struct bNodeTreeType {
/* callbacks */
void (*free_cache)(struct bNodeTree *ntree);
void (*free_node_cache)(struct bNodeTree *ntree, struct bNode *node);
- void (*foreach_nodeclass)(struct Scene *scene, void *calldata, bNodeClassCallback func); /* iteration over all node classes */
+ void (*foreach_nodeclass)(struct ViewRender *view_render, void *calldata, bNodeClassCallback func); /* iteration over all node classes */
/* Check visibility in the node editor */
int (*poll)(const struct bContext *C, struct bNodeTreeType *ntreetype);
/* Select a node tree from the context */
@@ -690,6 +692,13 @@ bool BKE_node_tree_iter_step(struct NodeTreeIterStore *ntreeiter,
}
/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Node Tree
+ */
+
+void BKE_nodetree_remove_layer_n(struct bNodeTree *ntree, struct Scene *scene, const int layer_index);
+
/* -------------------------------------------------------------------- */
/** \name Shader Nodes
*/
@@ -789,6 +798,7 @@ struct ShadeResult;
#define SH_NODE_UVALONGSTROKE 191
#define SH_NODE_TEX_POINTDENSITY 192
#define SH_NODE_BSDF_PRINCIPLED 193
+#define SH_NODE_EEVEE_SPECULAR 195
#define SH_NODE_BEVEL 197
#define SH_NODE_DISPLACEMENT 198
#define SH_NODE_VECTOR_DISPLACEMENT 199
@@ -810,6 +820,7 @@ extern void (*node_shader_lamp_loop)(struct ShadeInput *, struct ShadeResult *);
void set_node_shader_lamp_loop(void (*lamp_loop_func)(struct ShadeInput *, struct ShadeResult *));
void ntreeGPUMaterialNodes(struct bNodeTree *ntree, struct GPUMaterial *mat, short compatibility);
+void ntreeGPUMaterialDomain(struct bNodeTree *ntree, bool *has_surface_output, bool *has_volume_output);
/** \} */
@@ -980,7 +991,7 @@ void ntreeCompositTagRender(struct Scene *sce);
int ntreeCompositTagAnimated(struct bNodeTree *ntree);
void ntreeCompositTagGenerators(struct bNodeTree *ntree);
void ntreeCompositUpdateRLayers(struct bNodeTree *ntree);
-void ntreeCompositRegisterPass(struct bNodeTree *ntree, struct Scene *scene, struct SceneRenderLayer *srl, const char *name, int type);
+void ntreeCompositRegisterPass(struct bNodeTree *ntree, struct Scene *scene, struct ViewLayer *view_layer, const char *name, int type);
void ntreeCompositClearTags(struct bNodeTree *ntree);
struct bNodeSocket *ntreeCompositOutputFileAddSocket(struct bNodeTree *ntree, struct bNode *node,
@@ -1045,4 +1056,16 @@ int ntreeTexExecTree(struct bNodeTree *ntree, struct TexResult *target,
void init_nodesystem(void);
void free_nodesystem(void);
+/* -------------------------------------------------------------------- */
+/* evaluation support, */
+
+struct EvaluationContext;
+
+void BKE_nodetree_copy_default_values(struct bNodeTree *ntree_dst,
+ const struct bNodeTree *ntree_src);
+
+void BKE_nodetree_shading_params_eval(const struct EvaluationContext *eval_ctx,
+ struct bNodeTree *ntree_dst,
+ const struct bNodeTree *ntree_src);
+
#endif /* __BKE_NODE_H__ */
diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h
index 4d232e9ed6c..536b21e83ce 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -38,6 +38,7 @@ extern "C" {
struct Base;
struct EvaluationContext;
struct Scene;
+struct ViewLayer;
struct Object;
struct BoundBox;
struct View3D;
@@ -49,8 +50,10 @@ struct RigidBodyWorld;
struct HookModifierData;
struct ModifierData;
+#include "DNA_object_enums.h"
+
void BKE_object_workob_clear(struct Object *workob);
-void BKE_object_workob_calc_parent(struct Scene *scene, struct Object *ob, struct Object *workob);
+void BKE_object_workob_calc_parent(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob, struct Object *workob);
void BKE_object_transform_copy(struct Object *ob_tar, const struct Object *ob_src);
struct SoftBody *copy_softbody(const struct SoftBody *sb, const int flag);
@@ -62,7 +65,6 @@ void BKE_object_free_particlesystems(struct Object *ob);
void BKE_object_free_softbody(struct Object *ob);
void BKE_object_free_bulletsoftbody(struct Object *ob);
void BKE_object_free_curve_cache(struct Object *ob);
-void BKE_object_update_base_layer(struct Scene *scene, struct Object *ob);
void BKE_object_free(struct Object *ob);
void BKE_object_free_derived_caches(struct Object *ob);
@@ -72,16 +74,26 @@ void BKE_object_modifier_hook_reset(struct Object *ob, struct HookModifierData *
bool BKE_object_support_modifier_type_check(struct Object *ob, int modifier_type);
-void BKE_object_link_modifiers(struct Object *ob_dst, const struct Object *ob_src);
+void BKE_object_link_modifiers(
+ struct Object *ob_dst, const struct Object *ob_src,
+ eObjectMode object_mode);
void BKE_object_free_modifiers(struct Object *ob);
void BKE_object_make_proxy(struct Object *ob, struct Object *target, struct Object *gob);
void BKE_object_copy_proxy_drivers(struct Object *ob, struct Object *target);
bool BKE_object_exists_check(struct Object *obtest);
-bool BKE_object_is_in_editmode(struct Object *ob);
+bool BKE_object_is_in_editmode(const struct Object *ob);
bool BKE_object_is_in_editmode_vgroup(struct Object *ob);
-bool BKE_object_is_in_wpaint_select_vert(struct Object *ob);
+bool BKE_object_is_in_wpaint_select_vert(const struct Object *ob, eObjectMode object_mode);
+
+typedef enum eObjectVisibilityCheck {
+ OB_VISIBILITY_CHECK_FOR_VIEWPORT,
+ OB_VISIBILITY_CHECK_FOR_RENDER,
+ OB_VISIBILITY_CHECK_UNKNOWN_RENDER_MODE,
+} eObjectVisibilityCheck;
+
+bool BKE_object_is_visible(struct Object *ob, const eObjectVisibilityCheck mode);
void BKE_object_init(struct Object *ob);
struct Object *BKE_object_add_only_object(
@@ -89,9 +101,13 @@ struct Object *BKE_object_add_only_object(
int type, const char *name)
ATTR_NONNULL(1) ATTR_RETURNS_NONNULL;
struct Object *BKE_object_add(
- struct Main *bmain, struct Scene *scene,
+ struct Main *bmain, struct Scene *scene, struct ViewLayer *view_layer,
int type, const char *name)
- ATTR_NONNULL(1, 2) ATTR_RETURNS_NONNULL;
+ ATTR_NONNULL(1, 2, 3) ATTR_RETURNS_NONNULL;
+struct Object *BKE_object_add_from(
+ struct Main *bmain, struct Scene *scene, struct ViewLayer *view_layer,
+ int type, const char *name, struct Object *ob_src)
+ ATTR_NONNULL(1, 2, 3, 6) ATTR_RETURNS_NONNULL;
void *BKE_object_obdata_add_from_type(
struct Main *bmain,
int type, const char *name)
@@ -101,9 +117,12 @@ void BKE_object_lod_add(struct Object *ob);
void BKE_object_lod_sort(struct Object *ob);
bool BKE_object_lod_remove(struct Object *ob, int level);
void BKE_object_lod_update(struct Object *ob, const float camera_position[3]);
-bool BKE_object_lod_is_usable(struct Object *ob, struct Scene *scene);
-struct Object *BKE_object_lod_meshob_get(struct Object *ob, struct Scene *scene);
-struct Object *BKE_object_lod_matob_get(struct Object *ob, struct Scene *scene);
+bool BKE_object_lod_is_usable(
+ struct Object *ob, struct ViewLayer *view_layer, const eObjectMode object_mode);
+struct Object *BKE_object_lod_meshob_get(
+ struct Object *ob, struct ViewLayer *view_layer, const eObjectMode object_mode);
+struct Object *BKE_object_lod_matob_get(
+ struct Object *ob, struct ViewLayer *view_layer, const eObjectMode object_mode);
void BKE_object_copy_data(struct Main *bmain, struct Object *ob_dst, const struct Object *ob_src, const int flag);
struct Object *BKE_object_copy(struct Main *bmain, const struct Object *ob);
@@ -122,14 +141,17 @@ void BKE_object_to_mat4(struct Object *ob, float mat[4][4]);
void BKE_object_apply_mat4(struct Object *ob, float mat[4][4], const bool use_compat, const bool use_parent);
void BKE_object_matrix_local_get(struct Object *ob, float mat[4][4]);
+bool BKE_object_pose_context_check_ex(struct Object *ob, bool selected);
bool BKE_object_pose_context_check(struct Object *ob);
struct Object *BKE_object_pose_armature_get(struct Object *ob);
-
-void BKE_object_get_parent_matrix(struct Scene *scene, struct Object *ob, struct Object *par, float parentmat[4][4]);
-void BKE_object_where_is_calc(struct Scene *scene, struct Object *ob);
-void BKE_object_where_is_calc_ex(struct Scene *scene, struct RigidBodyWorld *rbw, struct Object *ob, float r_originmat[3][3]);
-void BKE_object_where_is_calc_time(struct Scene *scene, struct Object *ob, float ctime);
-void BKE_object_where_is_calc_time_ex(struct Scene *scene, struct Object *ob, float ctime,
+struct Object *BKE_object_pose_armature_get_visible(struct Object *ob, struct ViewLayer *view_layer);
+
+void BKE_object_get_parent_matrix(struct Scene *scene, struct Object *ob,
+ struct Object *par, float parentmat[4][4]);
+void BKE_object_where_is_calc(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob);
+void BKE_object_where_is_calc_ex(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct RigidBodyWorld *rbw, struct Object *ob, float r_originmat[3][3]);
+void BKE_object_where_is_calc_time(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob, float ctime);
+void BKE_object_where_is_calc_time_ex(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob, float ctime,
struct RigidBodyWorld *rbw, float r_originmat[3][3]);
void BKE_object_where_is_calc_mat4(struct Scene *scene, struct Object *ob, float obmat[4][4]);
@@ -152,8 +174,7 @@ bool BKE_object_minmax_dupli(struct Scene *scene, struct Object *ob, float r_min
void BKE_object_foreach_display_point(struct Object *ob, float obmat[4][4],
void (*func_cb)(const float[3], void *), void *user_data);
void BKE_scene_foreach_display_point(struct Scene *scene,
- struct View3D *v3d,
- const short flag,
+ struct ViewLayer *view_layer,
void (*func_cb)(const float[3], void *), void *user_data);
bool BKE_object_parent_loop_check(const struct Object *parent, const struct Object *ob);
@@ -178,41 +199,54 @@ void BKE_object_tfm_protected_restore(struct Object *ob,
const short protectflag);
/* Dependency graph evaluation callbacks. */
-void BKE_object_eval_local_transform(struct EvaluationContext *eval_ctx,
+void BKE_object_eval_local_transform(const struct EvaluationContext *eval_ctx,
struct Object *ob);
-void BKE_object_eval_parent(struct EvaluationContext *eval_ctx,
+void BKE_object_eval_parent(const struct EvaluationContext *eval_ctx,
struct Scene *scene,
struct Object *ob);
-void BKE_object_eval_constraints(struct EvaluationContext *eval_ctx,
+void BKE_object_eval_constraints(const struct EvaluationContext *eval_ctx,
struct Scene *scene,
struct Object *ob);
-void BKE_object_eval_done(struct EvaluationContext *eval_ctx, struct Object *ob);
+void BKE_object_eval_done(const struct EvaluationContext *eval_ctx, struct Object *ob);
-bool BKE_object_eval_proxy_copy(struct EvaluationContext *eval_ctx,
+bool BKE_object_eval_proxy_copy(const struct EvaluationContext *eval_ct,
struct Object *object);
-void BKE_object_eval_uber_transform(struct EvaluationContext *eval_ctx,
+void BKE_object_eval_uber_transform(const struct EvaluationContext *eval_ctx,
struct Object *ob);
-void BKE_object_eval_uber_data(struct EvaluationContext *eval_ctx,
+void BKE_object_eval_uber_data(const struct EvaluationContext *eval_ctx,
struct Scene *scene,
struct Object *ob);
-void BKE_object_eval_cloth(struct EvaluationContext *eval_ctx,
+void BKE_object_eval_cloth(const struct EvaluationContext *eval_ctx,
struct Scene *scene,
struct Object *object);
-
-void BKE_object_eval_transform_all(struct EvaluationContext *eval_ctx,
+void BKE_object_eval_transform_all(const struct EvaluationContext *eval_ctx,
struct Scene *scene,
struct Object *object);
-void BKE_object_handle_data_update(struct EvaluationContext *eval_ctx,
- struct Scene *scene,
- struct Object *ob);
-void BKE_object_handle_update(struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob);
-void BKE_object_handle_update_ex(struct EvaluationContext *eval_ctx,
- struct Scene *scene, struct Object *ob,
- struct RigidBodyWorld *rbw,
- const bool do_proxy_update);
+void BKE_object_eval_update_shading(const struct EvaluationContext *eval_ctx,
+ struct Object *object);
+void BKE_object_data_select_update(const struct EvaluationContext *eval_ctx,
+ struct ID *object_data);
+
+void BKE_object_eval_flush_base_flags(const struct EvaluationContext *eval_ctx,
+ struct Object *object, struct Base *base,
+ const bool is_from_set);
+
+void BKE_object_handle_data_update(
+ const struct EvaluationContext *eval_ctx,
+ struct Scene *scene,
+ struct Object *ob);
+void BKE_object_handle_update(
+ const struct EvaluationContext *eval_ctx,
+ struct Scene *scene, struct Object *ob);
+void BKE_object_handle_update_ex(
+ const struct EvaluationContext *eval_ctx,
+ struct Scene *scene, struct Object *ob,
+ struct RigidBodyWorld *rbw,
+ const bool do_proxy_update);
+
void BKE_object_sculpt_modifiers_changed(struct Object *ob);
int BKE_object_obdata_texspace_get(struct Object *ob, short **r_texflag, float **r_loc, float **r_size, float **r_rot);
@@ -255,17 +289,16 @@ typedef enum eObjectSet {
OB_SET_ALL /* All Objects */
} eObjectSet;
-struct LinkNode *BKE_object_relational_superset(struct Scene *scene, eObjectSet objectSet, eObRelationTypes includeFilter);
+struct LinkNode *BKE_object_relational_superset(struct ViewLayer *view_layer, eObjectSet objectSet, eObRelationTypes includeFilter);
struct LinkNode *BKE_object_groups(struct Object *ob);
-void BKE_object_groups_clear(struct Scene *scene, struct Base *base, struct Object *object);
+void BKE_object_groups_clear(struct Object *object);
struct KDTree *BKE_object_as_kdtree(struct Object *ob, int *r_tot);
bool BKE_object_modifier_use_time(struct Object *ob, struct ModifierData *md);
-bool BKE_object_modifier_update_subframe(struct Scene *scene, struct Object *ob, bool update_mesh,
- int parent_recursion, float frame,
- int type);
+bool BKE_object_modifier_update_subframe(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob,
+ bool update_mesh, int parent_recursion, float frame, int type);
#ifdef __cplusplus
}
diff --git a/source/blender/blenkernel/BKE_object_facemap.h b/source/blender/blenkernel/BKE_object_facemap.h
new file mode 100644
index 00000000000..2607e5aa2dd
--- /dev/null
+++ b/source/blender/blenkernel/BKE_object_facemap.h
@@ -0,0 +1,53 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Antony Riakiotakis
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef __BKE_OBJECT_FACEMAP_H__
+#define __BKE_OBJECT_FACEMAP_H__
+
+/** \file BKE_object_facemap.h
+ * \ingroup bke
+ * \brief Functions for dealing with object face-maps.
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct bFaceMap;
+struct ListBase;
+struct Object;
+
+struct bFaceMap *BKE_object_facemap_add(struct Object *ob);
+struct bFaceMap *BKE_object_facemap_add_name(struct Object *ob, const char *name);
+void BKE_object_facemap_remove(struct Object *ob, struct bFaceMap *fmap);
+void BKE_object_facemap_clear(struct Object *ob);
+
+int BKE_object_facemap_name_index(struct Object *ob, const char *name);
+void BKE_object_facemap_unique_name(struct Object *ob, struct bFaceMap *fmap);
+struct bFaceMap *BKE_object_facemap_find_name(struct Object *ob, const char *name);
+void BKE_object_facemap_copy_list(struct ListBase *outbase, const struct ListBase *inbase);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __BKE_OBJECT_FACEMAP_H__ */
diff --git a/source/blender/blenkernel/BKE_outliner_treehash.h b/source/blender/blenkernel/BKE_outliner_treehash.h
index 454edb40c4e..b82bc692402 100644
--- a/source/blender/blenkernel/BKE_outliner_treehash.h
+++ b/source/blender/blenkernel/BKE_outliner_treehash.h
@@ -36,8 +36,9 @@ void *BKE_outliner_treehash_create_from_treestore(struct BLI_mempool *treestore)
/* full rebuild for already allocated hashtable */
void *BKE_outliner_treehash_rebuild_from_treestore(void *treehash, struct BLI_mempool *treestore);
-/* full rebuild for already allocated hashtable */
+/* Add/remove hashtable elements */
void BKE_outliner_treehash_add_element(void *treehash, struct TreeStoreElem *elem);
+void BKE_outliner_treehash_remove_element(void *treehash, struct TreeStoreElem *elem);
/* find first unused element with specific type, nr and id */
struct TreeStoreElem *BKE_outliner_treehash_lookup_unused(void *treehash, short type, short nr, struct ID *id);
diff --git a/source/blender/blenkernel/BKE_paint.h b/source/blender/blenkernel/BKE_paint.h
index c7a4f6b2fb6..2840971f157 100644
--- a/source/blender/blenkernel/BKE_paint.h
+++ b/source/blender/blenkernel/BKE_paint.h
@@ -52,11 +52,13 @@ struct PaletteColor;
struct PBVH;
struct ReportList;
struct Scene;
+struct ViewLayer;
struct Sculpt;
struct StrokeCache;
struct Tex;
struct ImagePool;
struct UnifiedPaintSettings;
+struct EvaluationContext;
enum eOverlayFlags;
@@ -91,8 +93,10 @@ typedef enum eOverlayControlFlags {
PAINT_OVERLAY_OVERRIDE_PRIMARY | \
PAINT_OVERLAY_OVERRIDE_CURSOR)
-void BKE_paint_invalidate_overlay_tex(struct Scene *scene, const struct Tex *tex);
-void BKE_paint_invalidate_cursor_overlay(struct Scene *scene, struct CurveMapping *curve);
+void BKE_paint_invalidate_overlay_tex(
+ struct Scene *scene, struct ViewLayer *view_layer, const struct Tex *tex, eObjectMode object_mode);
+void BKE_paint_invalidate_cursor_overlay(
+ struct Scene *scene, struct ViewLayer *view_layer, struct CurveMapping *curve, eObjectMode object_mode);
void BKE_paint_invalidate_overlay_all(void);
eOverlayControlFlags BKE_paint_get_overlay_flags(void);
void BKE_paint_reset_overlay_invalid(eOverlayControlFlags flag);
@@ -126,7 +130,8 @@ void BKE_paint_cavity_curve_preset(struct Paint *p, int preset);
eObjectMode BKE_paint_object_mode_from_paint_mode(ePaintMode mode);
struct Paint *BKE_paint_get_active_from_paintmode(struct Scene *sce, ePaintMode mode);
-struct Paint *BKE_paint_get_active(struct Scene *sce);
+struct Paint *BKE_paint_get_active(
+ struct Scene *sce, struct ViewLayer *view_layer, const eObjectMode object_mode);
struct Paint *BKE_paint_get_active_from_context(const struct bContext *C);
ePaintMode BKE_paintmode_get_active_from_context(const struct bContext *C);
struct Brush *BKE_paint_brush(struct Paint *paint);
@@ -142,9 +147,9 @@ bool BKE_paint_proj_mesh_data_check(struct Scene *scene, struct Object *ob, bool
/* testing face select mode
* Texture paint could be removed since selected faces are not used
* however hiding faces is useful */
-bool BKE_paint_select_face_test(struct Object *ob);
-bool BKE_paint_select_vert_test(struct Object *ob);
-bool BKE_paint_select_elem_test(struct Object *ob);
+bool BKE_paint_select_face_test(struct Object *ob, eObjectMode object_mode);
+bool BKE_paint_select_vert_test(struct Object *ob, eObjectMode object_mode);
+bool BKE_paint_select_elem_test(struct Object *ob, eObjectMode object_mode);
/* partial visibility */
bool paint_is_face_hidden(const struct MLoopTri *lt, const struct MVert *mvert, const struct MLoop *mloop);
@@ -249,8 +254,9 @@ void BKE_sculptsession_free_deformMats(struct SculptSession *ss);
void BKE_sculptsession_free_vwpaint_data(struct SculptSession *ss);
void BKE_sculptsession_bm_to_me(struct Object *ob, bool reorder);
void BKE_sculptsession_bm_to_me_for_render(struct Object *object);
-void BKE_sculpt_update_mesh_elements(struct Scene *scene, struct Sculpt *sd, struct Object *ob,
- bool need_pmap, bool need_mask);
+void BKE_sculpt_update_mesh_elements(
+ const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Sculpt *sd, struct Object *ob,
+ bool need_pmap, bool need_mask);
struct MultiresModifierData *BKE_sculpt_multires_active(struct Scene *scene, struct Object *ob);
int BKE_sculpt_mask_layers_ensure(struct Object *ob,
struct MultiresModifierData *mmd);
diff --git a/source/blender/blenkernel/BKE_particle.h b/source/blender/blenkernel/BKE_particle.h
index 2c72373c2a9..9492f7e32fa 100644
--- a/source/blender/blenkernel/BKE_particle.h
+++ b/source/blender/blenkernel/BKE_particle.h
@@ -62,6 +62,8 @@ struct RNG;
struct BVHTreeRay;
struct BVHTreeRayHit;
struct EdgeHash;
+struct EvaluationContext;
+struct ViewLayer;
#define PARTICLE_COLLISION_MAX_COLLISIONS 10
@@ -77,6 +79,7 @@ struct EdgeHash;
/* common stuff that many particle functions need */
typedef struct ParticleSimulationData {
+ const struct EvaluationContext *eval_ctx;
struct Scene *scene;
struct Object *ob;
struct ParticleSystem *psys;
@@ -295,7 +298,8 @@ void psys_set_current_num(Object *ob, int index);
struct LatticeDeformData *psys_create_lattice_deform_data(struct ParticleSimulationData *sim);
-bool psys_in_edit_mode(struct Scene *scene, struct ParticleSystem *psys);
+bool psys_in_edit_mode(
+ const struct EvaluationContext *eval_ctx, struct ViewLayer *view_layer, struct ParticleSystem *psys);
bool psys_check_enabled(struct Object *ob, struct ParticleSystem *psys, const bool use_render_params);
bool psys_check_edited(struct ParticleSystem *psys);
@@ -336,9 +340,9 @@ void psys_reset(struct ParticleSystem *psys, int mode);
void psys_find_parents(struct ParticleSimulationData *sim, const bool use_render_params);
void psys_cache_paths(struct ParticleSimulationData *sim, float cfra, const bool use_render_params);
-void psys_cache_edit_paths(struct Scene *scene, struct Object *ob, struct PTCacheEdit *edit, float cfra, const bool use_render_params);
+void psys_cache_edit_paths(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob, struct PTCacheEdit *edit, float cfra, const bool use_render_params);
void psys_cache_child_paths(struct ParticleSimulationData *sim, float cfra, const bool editupdate, const bool use_render_params);
-int do_guides(struct ParticleSettings *part, struct ListBase *effectors, ParticleKey *state, int pa_num, float time);
+int do_guides(const struct EvaluationContext *eval_ctx, struct ParticleSettings *part, struct ListBase *effectors, ParticleKey *state, int pa_num, float time);
void precalc_guides(struct ParticleSimulationData *sim, struct ListBase *effectors);
float psys_get_timestep(struct ParticleSimulationData *sim);
float psys_get_child_time(struct ParticleSystem *psys, struct ChildParticle *cpa, float cfra, float *birthtime, float *dietime);
@@ -370,7 +374,7 @@ void psys_tasks_create(struct ParticleThreadContext *ctx, int startpart, int end
void psys_tasks_free(struct ParticleTask *tasks, int numtasks);
void psys_make_billboard(ParticleBillboardData *bb, float xvec[3], float yvec[3], float zvec[3], float center[3]);
-void psys_apply_hair_lattice(struct Scene *scene, struct Object *ob, struct ParticleSystem *psys);
+void psys_apply_hair_lattice(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob, struct ParticleSystem *psys);
/* particle_system.c */
struct ParticleSystem *psys_get_target_system(struct Object *ob, struct ParticleTarget *pt);
@@ -385,7 +389,7 @@ void psys_check_boid_data(struct ParticleSystem *psys);
void psys_get_birth_coords(struct ParticleSimulationData *sim, struct ParticleData *pa, struct ParticleKey *state, float dtime, float cfra);
-void particle_system_update(struct Scene *scene, struct Object *ob, struct ParticleSystem *psys, const bool use_render_params);
+void particle_system_update(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob, struct ParticleSystem *psys, const bool use_render_params);
/* Callback format for performing operations on ID-pointers for particle systems */
typedef void (*ParticleSystemIDFunc)(struct ParticleSystem *psys, struct ID **idpoin, void *userdata, int cb_flag);
@@ -477,8 +481,20 @@ typedef struct ParticleRenderData {
struct EvaluationContext;
-void BKE_particle_system_eval_init(struct EvaluationContext *eval_ctx,
+void BKE_particle_system_settings_eval(const struct EvaluationContext *eval_ctx,
+ struct ParticleSystem *psys);
+void BKE_particle_system_settings_recalc_clear(struct EvaluationContext *UNUSED(eval_ctx),
+ struct ParticleSettings *particle_settings);
+
+void BKE_particle_system_eval_init(const struct EvaluationContext *eval_ctx,
struct Scene *scene,
struct Object *ob);
#endif
+
+/* Draw Cache */
+enum {
+ BKE_PARTICLE_BATCH_DIRTY_ALL = 0,
+};
+void BKE_particle_batch_cache_dirty(struct ParticleSystem *psys, int mode);
+void BKE_particle_batch_cache_free(struct ParticleSystem *psys);
diff --git a/source/blender/blenkernel/BKE_pbvh.h b/source/blender/blenkernel/BKE_pbvh.h
index f619133ee4b..5f37aa25de7 100644
--- a/source/blender/blenkernel/BKE_pbvh.h
+++ b/source/blender/blenkernel/BKE_pbvh.h
@@ -30,6 +30,7 @@
#include "BLI_ghash.h"
#include "BLI_utildefines.h"
+struct Gwn_Batch;
struct CCGElem;
struct CCGKey;
struct CCGDerivedMesh;
@@ -132,6 +133,9 @@ void BKE_pbvh_node_draw(PBVHNode *node, void *data);
void BKE_pbvh_draw(PBVH *bvh, float (*planes)[4], float (*face_nors)[3],
int (*setMaterial)(int matnr, void *attribs), bool wireframe, bool fast);
void BKE_pbvh_draw_BB(PBVH *bvh);
+void BKE_pbvh_draw_cb(
+ PBVH *bvh, float (*planes)[4], float (*fnors)[3], bool fast,
+ void (*draw_fn)(void *user_data, struct Gwn_Batch *batch), void *user_data);
/* PBVH Access */
typedef enum {
@@ -369,6 +373,7 @@ bool BKE_pbvh_node_vert_update_check_any(PBVH *bvh, PBVHNode *node);
//void BKE_pbvh_node_BB_reset(PBVHNode *node);
//void BKE_pbvh_node_BB_expand(PBVHNode *node, float co[3]);
+bool pbvh_has_mask(PBVH *bvh);
void pbvh_show_diffuse_color_set(PBVH *bvh, bool show_diffuse_color);
void pbvh_show_mask_set(PBVH *bvh, bool show_mask);
diff --git a/source/blender/blenkernel/BKE_pointcache.h b/source/blender/blenkernel/BKE_pointcache.h
index f31ae715539..e9be6d9f7ca 100644
--- a/source/blender/blenkernel/BKE_pointcache.h
+++ b/source/blender/blenkernel/BKE_pointcache.h
@@ -90,6 +90,7 @@ struct ParticleKey;
struct ParticleSystem;
struct PointCache;
struct Scene;
+struct ViewLayer;
struct SmokeModifierData;
struct SoftBody;
struct RigidBodyWorld;
@@ -186,6 +187,8 @@ typedef struct PTCacheID {
typedef struct PTCacheBaker {
struct Main *main;
struct Scene *scene;
+ struct ViewLayer *view_layer;
+ struct Depsgraph *depsgraph;
int bake;
int render;
int anim_init;
@@ -319,7 +322,7 @@ struct PointCache *BKE_ptcache_copy_list(struct ListBase *ptcaches_new, const st
/********************** Baking *********************/
/* Bakes cache with cache_step sized jumps in time, not accurate but very fast. */
-void BKE_ptcache_quick_cache_all(struct Main *bmain, struct Scene *scene);
+void BKE_ptcache_quick_cache_all(struct Main *bmain, struct Scene *scene, struct ViewLayer *view_layer);
/* Bake cache or simulate to current frame with settings defined in the baker. */
void BKE_ptcache_bake(struct PTCacheBaker *baker);
diff --git a/source/blender/blenkernel/BKE_rigidbody.h b/source/blender/blenkernel/BKE_rigidbody.h
index 3c7274ca3c5..6aa43665427 100644
--- a/source/blender/blenkernel/BKE_rigidbody.h
+++ b/source/blender/blenkernel/BKE_rigidbody.h
@@ -37,6 +37,7 @@
struct RigidBodyWorld;
struct RigidBodyOb;
+struct EvaluationContext;
struct Scene;
struct Object;
@@ -99,21 +100,19 @@ void BKE_rigidbody_aftertrans_update(struct Object *ob, float loc[3], float rot[
void BKE_rigidbody_sync_transforms(struct RigidBodyWorld *rbw, struct Object *ob, float ctime);
bool BKE_rigidbody_check_sim_running(struct RigidBodyWorld *rbw, float ctime);
void BKE_rigidbody_cache_reset(struct RigidBodyWorld *rbw);
-void BKE_rigidbody_rebuild_world(struct Scene *scene, float ctime);
-void BKE_rigidbody_do_simulation(struct Scene *scene, float ctime);
+void BKE_rigidbody_rebuild_world(const struct EvaluationContext *eval_ctx, struct Scene *scene, float ctime);
+void BKE_rigidbody_do_simulation(const struct EvaluationContext *eval_ctx, struct Scene *scene, float ctime);
/* -------------------- */
/* Depsgraph evaluation */
-struct EvaluationContext;
-
-void BKE_rigidbody_rebuild_sim(struct EvaluationContext *eval_ctx,
+void BKE_rigidbody_rebuild_sim(const struct EvaluationContext *eval_ctx,
struct Scene *scene);
-void BKE_rigidbody_eval_simulation(struct EvaluationContext *eval_ctx,
+void BKE_rigidbody_eval_simulation(const struct EvaluationContext *eval_ctx,
struct Scene *scene);
-void BKE_rigidbody_object_sync_transforms(struct EvaluationContext *eval_ctx,
+void BKE_rigidbody_object_sync_transforms(const struct EvaluationContext *eval_ctx,
struct Scene *scene,
struct Object *ob);
diff --git a/source/blender/blenkernel/BKE_scene.h b/source/blender/blenkernel/BKE_scene.h
index 481aff3cfa6..bb435df136d 100644
--- a/source/blender/blenkernel/BKE_scene.h
+++ b/source/blender/blenkernel/BKE_scene.h
@@ -38,43 +38,55 @@ extern "C" {
#endif
struct AviCodecData;
-struct Base;
+struct Depsgraph;
struct EvaluationContext;
struct Main;
struct Object;
struct RenderData;
-struct SceneRenderLayer;
struct Scene;
+struct SceneCollection;
+struct ViewLayer;
struct UnitSettings;
-struct Main;
+struct ViewRender;
+struct WorkSpace;
-#define SCE_COPY_NEW 0
-#define SCE_COPY_EMPTY 1
-#define SCE_COPY_LINK_OB 2
-#define SCE_COPY_LINK_DATA 3
-#define SCE_COPY_FULL 4
+typedef enum eSceneCopyMethod {
+ SCE_COPY_NEW = 0,
+ SCE_COPY_EMPTY = 1,
+ SCE_COPY_LINK_OB = 2,
+ SCE_COPY_LINK_DATA = 3,
+ SCE_COPY_FULL = 4,
+} eSceneCopyMethod;
/* Use as the contents of a 'for' loop: for (SETLOOPER(...)) { ... */
#define SETLOOPER(_sce_basis, _sce_iter, _base) \
- _sce_iter = _sce_basis, _base = _setlooper_base_step(&_sce_iter, NULL); \
+ _sce_iter = _sce_basis, _base = _setlooper_base_step(&_sce_iter, BKE_view_layer_from_scene_get(_sce_basis), NULL); \
+ _base; \
+ _base = _setlooper_base_step(&_sce_iter, NULL, _base)
+
+#define SETLOOPER_VIEW_LAYER(_sce_basis, _view_layer, _sce_iter, _base) \
+ _sce_iter = _sce_basis, _base = _setlooper_base_step(&_sce_iter, _view_layer, NULL); \
_base; \
- _base = _setlooper_base_step(&_sce_iter, _base)
+ _base = _setlooper_base_step(&_sce_iter, NULL, _base)
-struct Base *_setlooper_base_step(struct Scene **sce_iter, struct Base *base);
+#define SETLOOPER_SET_ONLY(_sce_basis, _sce_iter, _base) \
+ _sce_iter = _sce_basis, _base = _setlooper_base_step(&_sce_iter, NULL, NULL); \
+ _base; \
+ _base = _setlooper_base_step(&_sce_iter, NULL, _base)
+
+struct Base *_setlooper_base_step(struct Scene **sce_iter, struct ViewLayer *view_layer, struct Base *base);
void free_avicodecdata(struct AviCodecData *acd);
+void BKE_scene_free_ex(struct Scene *sce, const bool do_id_user);
void BKE_scene_free(struct Scene *sce);
void BKE_scene_init(struct Scene *sce);
struct Scene *BKE_scene_add(struct Main *bmain, const char *name);
-/* base functions */
-struct Base *BKE_scene_base_find_by_name(struct Scene *scene, const char *name);
-struct Base *BKE_scene_base_find(struct Scene *scene, struct Object *ob);
-struct Base *BKE_scene_base_add(struct Scene *sce, struct Object *ob);
-void BKE_scene_base_unlink(struct Scene *sce, struct Base *base);
-void BKE_scene_base_deselect_all(struct Scene *sce);
-void BKE_scene_base_select(struct Scene *sce, struct Base *selbase);
+void BKE_scene_remove_rigidbody_object(struct Scene *scene, struct Object *ob);
+
+bool BKE_scene_object_find(struct Scene *scene, struct Object *ob);
+struct Object *BKE_scene_object_find_by_name(struct Scene *scene, const char *name);
/* Scene base iteration function.
* Define struct here, so no need to bother with alloc/free it.
@@ -87,11 +99,14 @@ typedef struct SceneBaseIter {
int phase;
} SceneBaseIter;
-int BKE_scene_base_iter_next(struct EvaluationContext *eval_ctx, struct SceneBaseIter *iter,
- struct Scene **scene, int val, struct Base **base, struct Object **ob);
+int BKE_scene_base_iter_next(
+ const struct EvaluationContext *eval_ctx, struct SceneBaseIter *iter,
+ struct Scene **scene, int val, struct Base **base, struct Object **ob);
-void BKE_scene_base_flag_to_objects(struct Scene *scene);
+void BKE_scene_base_flag_to_objects(struct ViewLayer *view_layer);
void BKE_scene_base_flag_from_objects(struct Scene *scene);
+void BKE_scene_object_base_flag_sync_from_base(struct Base *base);
+void BKE_scene_object_base_flag_sync_from_object(struct Base *base);
void BKE_scene_set_background(struct Main *bmain, struct Scene *sce);
struct Scene *BKE_scene_set_name(struct Main *bmain, const char *name);
@@ -102,7 +117,8 @@ void BKE_scene_groups_relink(struct Scene *sce);
void BKE_scene_make_local(struct Main *bmain, struct Scene *sce, const bool lib_local);
-struct Object *BKE_scene_camera_find(struct Scene *sc);
+struct Scene *BKE_scene_find_from_collection(const struct Main *bmain, const struct SceneCollection *scene_collection);
+
#ifdef DURIAN_CAMERA_SWITCH
struct Object *BKE_scene_camera_switch_find(struct Scene *scene); // DURIAN_CAMERA_SWITCH
#endif
@@ -119,12 +135,18 @@ float BKE_scene_frame_get_from_ctime(const struct Scene *scene, const float fram
void BKE_scene_frame_set(struct Scene *scene, double cfra);
/* ** Scene evaluation ** */
-void BKE_scene_update_tagged(struct EvaluationContext *eval_ctx, struct Main *bmain, struct Scene *sce);
-void BKE_scene_update_for_newframe(struct EvaluationContext *eval_ctx, struct Main *bmain, struct Scene *sce, unsigned int lay);
-void BKE_scene_update_for_newframe_ex(struct EvaluationContext *eval_ctx, struct Main *bmain, struct Scene *sce, unsigned int lay, bool do_invisible_flush);
-struct SceneRenderLayer *BKE_scene_add_render_layer(struct Scene *sce, const char *name);
-bool BKE_scene_remove_render_layer(struct Main *main, struct Scene *scene, struct SceneRenderLayer *srl);
+void BKE_scene_graph_update_tagged(struct EvaluationContext *eval_ctx,
+ struct Depsgraph *depsgraph,
+ struct Main *bmain,
+ struct Scene *scene,
+ struct ViewLayer *view_layer);
+
+void BKE_scene_graph_update_for_newframe(struct EvaluationContext *eval_ctx,
+ struct Depsgraph *depsgraph,
+ struct Main *bmain,
+ struct Scene *scene,
+ struct ViewLayer *view_layer);
struct SceneRenderView *BKE_scene_add_render_view(struct Scene *sce, const char *name);
bool BKE_scene_remove_render_view(struct Scene *scene, struct SceneRenderView *srv);
@@ -142,6 +164,7 @@ bool BKE_scene_use_spherical_stereo(struct Scene *scene);
bool BKE_scene_uses_blender_internal(const struct Scene *scene);
bool BKE_scene_uses_blender_game(const struct Scene *scene);
+bool BKE_scene_uses_blender_eevee(const struct Scene *scene);
void BKE_scene_disable_color_management(struct Scene *scene);
bool BKE_scene_check_color_management_enabled(const struct Scene *scene);
@@ -152,6 +175,22 @@ int BKE_render_num_threads(const struct RenderData *r);
int BKE_render_preview_pixel_size(const struct RenderData *r);
+/**********************************/
+
+struct ViewRender *BKE_viewrender_get(struct Scene *scene, struct WorkSpace *workspace);
+void BKE_viewrender_init(struct ViewRender *view_render);
+void BKE_viewrender_free(struct ViewRender *view_render);
+void BKE_viewrender_copy(struct ViewRender *view_render_dst, const struct ViewRender *view_render_src);
+bool BKE_viewrender_use_new_shading_nodes(const struct ViewRender *view_render);
+bool BKE_viewrender_use_shading_nodes_custom(const struct ViewRender *view_render);
+bool BKE_viewrender_use_world_space_shading(const struct ViewRender *view_render);
+bool BKE_viewrender_use_spherical_stereo(const struct ViewRender *view_render);
+bool BKE_viewrender_uses_blender_internal(const struct ViewRender *view_render);
+bool BKE_viewrender_uses_blender_game(const struct ViewRender *view_render);
+bool BKE_viewrender_uses_blender_eevee(const struct ViewRender *view_render);
+
+/**********************************/
+
double BKE_scene_unit_scale(const struct UnitSettings *unit, const int unit_type, double value);
/* multiview */
@@ -171,6 +210,13 @@ void BKE_scene_multiview_view_prefix_get(struct Scene *scene, const char
void BKE_scene_multiview_videos_dimensions_get(const struct RenderData *rd, const size_t width, const size_t height, size_t *r_width, size_t *r_height);
int BKE_scene_multiview_num_videos_get(const struct RenderData *rd);
+/* depsgraph */
+void BKE_scene_allocate_depsgraph_hash(struct Scene *scene);
+void BKE_scene_ensure_depsgraph_hash(struct Scene *scene);
+void BKE_scene_free_depsgraph_hash(struct Scene *scene);
+
+struct Depsgraph *BKE_scene_get_depsgraph(struct Scene *scene, struct ViewLayer *view_layer, bool allocate);
+
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/blenkernel/BKE_screen.h b/source/blender/blenkernel/BKE_screen.h
index 14e978b23f2..6669f3103da 100644
--- a/source/blender/blenkernel/BKE_screen.h
+++ b/source/blender/blenkernel/BKE_screen.h
@@ -42,6 +42,7 @@ struct Panel;
struct Scene;
struct ScrArea;
struct SpaceType;
+struct TransformOrientation;
struct View3D;
struct bContext;
struct bContextDataResult;
@@ -49,10 +50,13 @@ struct bScreen;
struct uiLayout;
struct uiList;
struct wmKeyConfig;
+struct wmManipulatorMap;
struct wmNotifier;
struct wmWindow;
struct wmWindowManager;
+struct WorkSpace;
struct GPUFXSettings;
+struct wmMsgBus;
#include "BLI_compiler_attrs.h"
@@ -81,7 +85,9 @@ typedef struct SpaceType {
/* exit is called when the area is hidden or removed */
void (*exit)(struct wmWindowManager *, struct ScrArea *);
/* Listeners can react to bContext changes */
- void (*listener)(struct bScreen *sc, struct ScrArea *, struct wmNotifier *);
+ void (*listener)(struct bScreen *sc, struct ScrArea *,
+ struct wmNotifier *, struct Scene *scene,
+ struct WorkSpace *workspace);
/* refresh context, called after filereads, ED_area_tag_refresh() */
void (*refresh)(const struct bContext *, struct ScrArea *);
@@ -96,6 +102,9 @@ typedef struct SpaceType {
/* on startup, define dropboxes for spacetype+regions */
void (*dropboxes)(void);
+ /* initialize manipulator-map-types and manipulator-group-types with the region */
+ void (*manipulators)(void);
+
/* return context data */
int (*context)(const struct bContext *, const char *, struct bContextDataResult *);
@@ -129,8 +138,15 @@ typedef struct ARegionType {
/* draw entirely, view changes should be handled here */
void (*draw)(const struct bContext *, struct ARegion *);
/* contextual changes should be handled here */
- void (*listener)(struct bScreen *sc, struct ScrArea *, struct ARegion *, struct wmNotifier *);
-
+ void (*listener)(struct bScreen *, struct ScrArea *, struct ARegion *,
+ struct wmNotifier *, const struct Scene *scene);
+ /* Optional callback to generate subscriptions. */
+ void (*message_subscribe)(
+ const struct bContext *C,
+ struct WorkSpace *workspace, struct Scene *scene,
+ struct bScreen *sc, struct ScrArea *sa, struct ARegion *ar,
+ struct wmMsgBus *mbus);
+
void (*free)(struct ARegion *);
/* split region, copy data optionally */
@@ -284,6 +300,9 @@ void BKE_spacedata_id_unref(struct ScrArea *sa, struct SpaceLink *sl, struct ID
struct ARegion *BKE_area_region_copy(struct SpaceType *st, struct ARegion *ar);
void BKE_area_region_free(struct SpaceType *st, struct ARegion *ar);
void BKE_screen_area_free(struct ScrArea *sa);
+/* Manipulator-maps of a region need to be freed with the region. Uses callback to avoid low-level call. */
+void BKE_region_callback_free_manipulatormap_set(void (*callback)(struct wmManipulatorMap *));
+void BKE_region_callback_refresh_tag_manipulatormap_set(void (*callback)(struct wmManipulatorMap *));
struct ARegion *BKE_area_find_region_type(struct ScrArea *sa, int type);
struct ARegion *BKE_area_find_region_active_win(struct ScrArea *sa);
@@ -299,12 +318,16 @@ unsigned int BKE_screen_view3d_layer_active(
unsigned int BKE_screen_view3d_layer_all(const struct bScreen *sc) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1);
+void BKE_screen_manipulator_tag_refresh(struct bScreen *sc);
+
void BKE_screen_view3d_sync(struct View3D *v3d, struct Scene *scene);
-void BKE_screen_view3d_scene_sync(struct bScreen *sc);
-void BKE_screen_view3d_main_sync(ListBase *screen_lb, struct Scene *scene);
-void BKE_screen_view3d_twmode_remove(struct View3D *v3d, const int i);
-void BKE_screen_view3d_main_twmode_remove(ListBase *screen_lb, struct Scene *scene, const int i);
+void BKE_screen_view3d_scene_sync(struct bScreen *sc, struct Scene *scene);
+void BKE_screen_transform_orientation_remove(
+ const struct bScreen *screen, const struct WorkSpace *workspace,
+ const struct TransformOrientation *orientation) ATTR_NONNULL();
void BKE_screen_gpu_fx_validate(struct GPUFXSettings *fx_settings);
+bool BKE_screen_is_fullscreen_area(const struct bScreen *screen) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
+bool BKE_screen_is_used(const struct bScreen *screen) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
/* zoom factor conversion */
float BKE_screen_view3d_zoom_to_fac(float camzoom);
diff --git a/source/blender/blenkernel/BKE_sequencer.h b/source/blender/blenkernel/BKE_sequencer.h
index 6c9dc12b44f..2264167eca1 100644
--- a/source/blender/blenkernel/BKE_sequencer.h
+++ b/source/blender/blenkernel/BKE_sequencer.h
@@ -432,7 +432,8 @@ enum {
};
typedef struct ImBuf *(*SequencerDrawView)(
- struct Scene *scene, struct Object *camera, int width, int height,
+ const struct EvaluationContext *eval_ctx, struct Scene *scene,
+ struct ViewLayer *view_layer, struct Object *camera, int width, int height,
unsigned int flag, unsigned int draw_flags, int drawtype, int alpha_mode,
int samples, const char *viewname,
struct GPUFX *fx, struct GPUOffScreen *ofs, char err_out[256]);
diff --git a/source/blender/blenkernel/BKE_shrinkwrap.h b/source/blender/blenkernel/BKE_shrinkwrap.h
index d2ab4f3164c..0c4f2bc9c05 100644
--- a/source/blender/blenkernel/BKE_shrinkwrap.h
+++ b/source/blender/blenkernel/BKE_shrinkwrap.h
@@ -54,6 +54,7 @@ struct ShrinkwrapModifierData;
struct MDeformVert;
struct BVHTree;
struct SpaceTransform;
+struct EvaluationContext;
typedef struct ShrinkwrapCalcData {
@@ -76,8 +77,10 @@ typedef struct ShrinkwrapCalcData {
} ShrinkwrapCalcData;
-void shrinkwrapModifier_deform(struct ShrinkwrapModifierData *smd, struct Object *ob, struct DerivedMesh *dm,
- float (*vertexCos)[3], int numVerts, bool for_render);
+void shrinkwrapModifier_deform(
+ const struct EvaluationContext *eval_ctx,
+ struct ShrinkwrapModifierData *smd, struct Object *ob, struct DerivedMesh *dm,
+ float (*vertexCos)[3], int numVerts, bool for_render);
/*
* This function casts a ray in the given BVHTree.. but it takes into consideration the space_transform, that is:
diff --git a/source/blender/blenkernel/BKE_smoke.h b/source/blender/blenkernel/BKE_smoke.h
index 20366f00df6..64d70e8e209 100644
--- a/source/blender/blenkernel/BKE_smoke.h
+++ b/source/blender/blenkernel/BKE_smoke.h
@@ -35,7 +35,9 @@
typedef float (*bresenham_callback)(float *result, float *input, int res[3], int *pixel, float *tRay, float correct);
-struct DerivedMesh *smokeModifier_do(struct SmokeModifierData *smd, struct Scene *scene, struct Object *ob, struct DerivedMesh *dm);
+struct DerivedMesh *smokeModifier_do(struct SmokeModifierData *smd, const struct EvaluationContext *eval_ctx,
+ struct Scene *scene,
+ struct Object *ob, struct DerivedMesh *dm);
void smoke_reallocate_fluid(struct SmokeDomainSettings *sds, float dx, int res[3], int free_old);
void smoke_reallocate_highres_fluid(struct SmokeDomainSettings *sds, float dx, int res[3], int free_old);
diff --git a/source/blender/blenkernel/BKE_softbody.h b/source/blender/blenkernel/BKE_softbody.h
index 486fe8ed5a8..e2255bdb779 100644
--- a/source/blender/blenkernel/BKE_softbody.h
+++ b/source/blender/blenkernel/BKE_softbody.h
@@ -34,6 +34,7 @@
struct Object;
struct Scene;
struct SoftBody;
+struct EvaluationContext;
typedef struct BodyPoint {
float origS[3], origE[3], origT[3], pos[3], vec[3], force[3];
@@ -59,7 +60,8 @@ extern void sbFree(struct SoftBody *sb);
extern void sbFreeSimulation(struct SoftBody *sb);
/* do one simul step, reading and writing vertex locs from given array */
-extern void sbObjectStep(struct Scene *scene, struct Object *ob, float framnr, float (*vertexCos)[3], int numVerts);
+extern void sbObjectStep(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob,
+ float framnr, float (*vertexCos)[3], int numVerts);
/* makes totally fresh start situation, resets time */
extern void sbObjectToSoftbody(struct Object *ob);
diff --git a/source/blender/blenkernel/BKE_sound.h b/source/blender/blenkernel/BKE_sound.h
index 6f8274fabc8..98fb4f47339 100644
--- a/source/blender/blenkernel/BKE_sound.h
+++ b/source/blender/blenkernel/BKE_sound.h
@@ -35,8 +35,8 @@
#define SOUND_WAVE_SAMPLES_PER_SECOND 250
-#ifdef WITH_SYSTEM_AUDASPACE
-# include AUD_DEVICE_H
+#if defined(WITH_AUDASPACE)
+# include <AUD_Device.h>
#endif
struct bSound;
@@ -84,7 +84,7 @@ void BKE_sound_copy_data(struct Main *bmain, struct bSound *sound_dst, const str
void BKE_sound_make_local(struct Main *bmain, struct bSound *sound, const bool lib_local);
-#if defined(__AUD_C_API_H__) || defined(WITH_SYSTEM_AUDASPACE)
+#if defined(WITH_AUDASPACE)
AUD_Device *BKE_sound_mixdown(struct Scene *scene, AUD_DeviceSpecs specs, int start, float volume);
#endif
@@ -149,6 +149,4 @@ float BKE_sound_get_length(struct bSound *sound);
char **BKE_sound_get_device_names(void);
-bool BKE_sound_is_jack_supported(void);
-
#endif /* __BKE_SOUND_H__ */
diff --git a/source/blender/blenkernel/BKE_tracking.h b/source/blender/blenkernel/BKE_tracking.h
index 13302caa09d..5da87de1cc9 100644
--- a/source/blender/blenkernel/BKE_tracking.h
+++ b/source/blender/blenkernel/BKE_tracking.h
@@ -47,6 +47,7 @@ struct MovieDistortion;
struct Camera;
struct Object;
struct Scene;
+struct EvaluationContext;
struct rcti;
/* **** Common functions **** */
diff --git a/source/blender/blenkernel/BKE_workspace.h b/source/blender/blenkernel/BKE_workspace.h
new file mode 100644
index 00000000000..f839d4cdf76
--- /dev/null
+++ b/source/blender/blenkernel/BKE_workspace.h
@@ -0,0 +1,139 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file BKE_workspace.h
+ * \ingroup bke
+ */
+
+#ifndef __BKE_WORKSPACE_H__
+#define __BKE_WORKSPACE_H__
+
+#include "BLI_compiler_attrs.h"
+
+struct bScreen;
+struct EvaluationContext;
+struct Main;
+struct Scene;
+struct TransformOrientation;
+struct ViewLayer;
+
+/* -------------------------------------------------------------------- */
+/* Create, delete, init */
+
+struct WorkSpace *BKE_workspace_add(struct Main *bmain, const char *name);
+void BKE_workspace_free(struct WorkSpace *workspace);
+void BKE_workspace_remove(struct Main *bmain, struct WorkSpace *workspace);
+
+struct WorkSpaceInstanceHook *BKE_workspace_instance_hook_create(const struct Main *bmain);
+void BKE_workspace_instance_hook_free(const struct Main *bmain, struct WorkSpaceInstanceHook *hook);
+
+struct WorkSpaceLayout *BKE_workspace_layout_add(
+ struct WorkSpace *workspace,
+ struct bScreen *screen,
+ const char *name) ATTR_NONNULL();
+void BKE_workspace_layout_remove(
+ struct Main *bmain,
+ struct WorkSpace *workspace, struct WorkSpaceLayout *layout) ATTR_NONNULL();
+
+void BKE_workspace_relations_free(
+ ListBase *relation_list);
+
+
+/* -------------------------------------------------------------------- */
+/* General Utils */
+
+void BKE_workspace_view_layer_remove_references(
+ const struct Main *bmain,
+ const struct ViewLayer *view_layer) ATTR_NONNULL();
+
+void BKE_workspace_transform_orientation_remove(
+ struct WorkSpace *workspace, struct TransformOrientation *orientation) ATTR_NONNULL();
+struct TransformOrientation *BKE_workspace_transform_orientation_find(
+ const struct WorkSpace *workspace, const int index) ATTR_NONNULL();
+int BKE_workspace_transform_orientation_get_index(
+ const struct WorkSpace *workspace, const struct TransformOrientation *orientation) ATTR_NONNULL();
+
+struct WorkSpaceLayout *BKE_workspace_layout_find(
+ const struct WorkSpace *workspace, const struct bScreen *screen) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
+struct WorkSpaceLayout *BKE_workspace_layout_find_global(
+ const struct Main *bmain, const struct bScreen *screen,
+ struct WorkSpace **r_workspace) ATTR_NONNULL(1, 2);
+
+struct WorkSpaceLayout *BKE_workspace_layout_iter_circular(
+ const struct WorkSpace *workspace, struct WorkSpaceLayout *start,
+ bool (*callback)(const struct WorkSpaceLayout *layout, void *arg),
+ void *arg, const bool iter_backward);
+
+
+/* -------------------------------------------------------------------- */
+/* Getters/Setters */
+
+#define GETTER_ATTRS ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT
+#define SETTER_ATTRS ATTR_NONNULL(1)
+
+struct WorkSpace *BKE_workspace_active_get(struct WorkSpaceInstanceHook *hook) GETTER_ATTRS;
+void BKE_workspace_active_set(struct WorkSpaceInstanceHook *hook, struct WorkSpace *workspace) SETTER_ATTRS;
+struct WorkSpaceLayout *BKE_workspace_active_layout_get(const struct WorkSpaceInstanceHook *hook) GETTER_ATTRS;
+void BKE_workspace_active_layout_set(struct WorkSpaceInstanceHook *hook, struct WorkSpaceLayout *layout) SETTER_ATTRS;
+struct bScreen *BKE_workspace_active_screen_get(const struct WorkSpaceInstanceHook *hook) GETTER_ATTRS;
+void BKE_workspace_active_screen_set(
+ struct WorkSpaceInstanceHook *hook, struct WorkSpace *workspace, struct bScreen *screen) SETTER_ATTRS;
+struct Base *BKE_workspace_active_base_get(const struct WorkSpace *workspace, const struct Scene *scene);
+struct ListBase *BKE_workspace_transform_orientations_get(struct WorkSpace *workspace) GETTER_ATTRS;
+struct ViewLayer *BKE_workspace_view_layer_get(
+ const struct WorkSpace *workspace,
+ const struct Scene *scene) GETTER_ATTRS;
+void BKE_workspace_view_layer_set(
+ struct WorkSpace *workspace,
+ struct ViewLayer *layer,
+ struct Scene *scene) SETTER_ATTRS;
+struct ListBase *BKE_workspace_layouts_get(struct WorkSpace *workspace) GETTER_ATTRS;
+
+const char *BKE_workspace_layout_name_get(const struct WorkSpaceLayout *layout) GETTER_ATTRS;
+void BKE_workspace_layout_name_set(
+ struct WorkSpace *workspace, struct WorkSpaceLayout *layout, const char *new_name) ATTR_NONNULL();
+struct bScreen *BKE_workspace_layout_screen_get(const struct WorkSpaceLayout *layout) GETTER_ATTRS;
+void BKE_workspace_layout_screen_set(struct WorkSpaceLayout *layout, struct bScreen *screen) SETTER_ATTRS;
+
+struct WorkSpaceLayout *BKE_workspace_hook_layout_for_workspace_get(
+ const struct WorkSpaceInstanceHook *hook, const struct WorkSpace *workspace) GETTER_ATTRS;
+void BKE_workspace_hook_layout_for_workspace_set(
+ struct WorkSpaceInstanceHook *hook, struct WorkSpace *workspace, struct WorkSpaceLayout *layout) ATTR_NONNULL();
+
+struct ViewRender *BKE_workspace_view_render_get(struct WorkSpace *workspace) GETTER_ATTRS;
+
+/* flags */
+bool BKE_workspace_use_scene_settings_get(const struct WorkSpace *workspace) GETTER_ATTRS;
+void BKE_workspace_use_scene_settings_set(struct WorkSpace *workspace, bool value) SETTER_ATTRS;
+
+/* Update / evaluate */
+void BKE_workspace_update_tagged(struct EvaluationContext *eval_ctx,
+ struct Main *bmain,
+ struct WorkSpace *workspace,
+ struct Scene *scene);
+
+void BKE_workspace_update_object_mode(
+ struct EvaluationContext *eval_ctx,
+ struct WorkSpace *workspace);
+
+#undef GETTER_ATTRS
+#undef SETTER_ATTRS
+
+#endif /* __BKE_WORKSPACE_H__ */
diff --git a/source/blender/blenkernel/BKE_world.h b/source/blender/blenkernel/BKE_world.h
index b28bac08727..b45d7a7e6ec 100644
--- a/source/blender/blenkernel/BKE_world.h
+++ b/source/blender/blenkernel/BKE_world.h
@@ -44,4 +44,11 @@ struct World *BKE_world_copy(struct Main *bmain, const struct World *wrld);
struct World *BKE_world_localize(struct World *wrld);
void BKE_world_make_local(struct Main *bmain, struct World *wrld, const bool lib_local);
-#endif /* __BKE_WORLD_H__ */
+/* Evaluation. */
+
+struct EvaluationContext;
+
+void BKE_world_eval(const struct EvaluationContext *eval_ctx, struct World *world);
+
+#endif
+
diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt
index 3fc2c3f8eb0..279068c440e 100644
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@ -30,6 +30,7 @@ set(INC
../blenloader
../blentranslation
../depsgraph
+ ../draw
../gpu
../ikplugin
../imbuf
@@ -86,6 +87,7 @@ set(SRC
intern/camera.c
intern/cdderivedmesh.c
intern/cloth.c
+ intern/collection.c
intern/collision.c
intern/colorband.c
intern/colortools.c
@@ -98,12 +100,12 @@ set(SRC
intern/customdata_file.c
intern/data_transfer.c
intern/deform.c
- intern/depsgraph.c
intern/displist.c
intern/dynamicpaint.c
intern/editderivedmesh.c
intern/editmesh.c
intern/editmesh_bvh.c
+ intern/editmesh_tangent.c
intern/effect.c
intern/fcurve.c
intern/fluidsim.c
@@ -123,6 +125,7 @@ set(SRC
intern/lattice.c
intern/library.c
intern/library_idmap.c
+ intern/library_override.c
intern/library_query.c
intern/library_remap.c
intern/linestyle.c
@@ -136,6 +139,7 @@ set(SRC
intern/mesh_evaluate.c
intern/mesh_mapping.c
intern/mesh_remap.c
+ intern/mesh_tangent.c
intern/mesh_validate.c
intern/modifier.c
intern/modifiers_bmesh.c
@@ -144,6 +148,7 @@ set(SRC
intern/nla.c
intern/node.c
intern/object.c
+ intern/object_facemap.c
intern/object_deform.c
intern/object_dupli.c
intern/object_update.c
@@ -159,6 +164,8 @@ set(SRC
intern/pbvh_bmesh.c
intern/pointcache.c
intern/property.c
+ intern/layer.c
+ intern/lightprobe.c
intern/report.c
intern/rigidbody.c
intern/sca.c
@@ -187,6 +194,7 @@ set(SRC
intern/tracking_stabilize.c
intern/tracking_util.c
intern/unit.c
+ intern/workspace.c
intern/world.c
intern/writeavi.c
intern/writeframeserver.c
@@ -216,6 +224,7 @@ set(SRC
BKE_ccg.h
BKE_cdderivedmesh.h
BKE_cloth.h
+ BKE_collection.h
BKE_collision.h
BKE_colorband.h
BKE_colortools.h
@@ -227,11 +236,11 @@ set(SRC
BKE_customdata_file.h
BKE_data_transfer.h
BKE_deform.h
- BKE_depsgraph.h
BKE_displist.h
BKE_dynamicpaint.h
BKE_editmesh.h
BKE_editmesh_bvh.h
+ BKE_editmesh_tangent.h
BKE_effect.h
BKE_fcurve.h
BKE_fluidsim.h
@@ -250,6 +259,7 @@ set(SRC
BKE_lattice.h
BKE_library.h
BKE_library_idmap.h
+ BKE_library_override.h
BKE_library_query.h
BKE_library_remap.h
BKE_linestyle.h
@@ -261,12 +271,14 @@ set(SRC
BKE_mesh.h
BKE_mesh_mapping.h
BKE_mesh_remap.h
+ BKE_mesh_tangent.h
BKE_modifier.h
BKE_movieclip.h
BKE_multires.h
BKE_nla.h
BKE_node.h
BKE_object.h
+ BKE_object_facemap.h
BKE_object_deform.h
BKE_ocean.h
BKE_outliner_treehash.h
@@ -276,6 +288,8 @@ set(SRC
BKE_pbvh.h
BKE_pointcache.h
BKE_property.h
+ BKE_layer.h
+ BKE_lightprobe.h
BKE_report.h
BKE_rigidbody.h
BKE_sca.h
@@ -294,11 +308,11 @@ set(SRC
BKE_texture.h
BKE_tracking.h
BKE_unit.h
+ BKE_workspace.h
BKE_world.h
BKE_writeavi.h
BKE_writeframeserver.h
- depsgraph_private.h
nla_private.h
tracking_private.h
intern/CCGSubSurf.h
@@ -324,7 +338,7 @@ if(WIN32)
endif()
if(WITH_AUDASPACE)
- add_definitions(${AUDASPACE_DEFINITIONS})
+ add_definitions(-DWITH_AUDASPACE)
list(APPEND INC_SYS
${AUDASPACE_C_INCLUDE_DIRS}
@@ -412,6 +426,10 @@ if(WITH_PYTHON)
)
add_definitions(-DWITH_PYTHON)
+ if(WITH_PYTHON_SAFETY)
+ add_definitions(-DWITH_PYTHON_SAFETY)
+ endif()
+
if(WITH_PYTHON_SECURITY)
add_definitions(-DWITH_PYTHON_SECURITY)
endif()
@@ -528,8 +546,4 @@ endif()
# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /WX")
#endif()
-if(WITH_LEGACY_DEPSGRAPH)
- add_definitions(-DWITH_LEGACY_DEPSGRAPH)
-endif()
-
blender_add_lib(bf_blenkernel "${SRC}" "${INC}" "${INC_SYS}")
diff --git a/source/blender/blenkernel/depsgraph_private.h b/source/blender/blenkernel/depsgraph_private.h
deleted file mode 100644
index 69ca75836d9..00000000000
--- a/source/blender/blenkernel/depsgraph_private.h
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2004 Blender Foundation.
- * All rights reserved.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file blender/blenkernel/depsgraph_private.h
- * \ingroup bke
- */
-
-#ifndef __DEPSGRAPH_PRIVATE_H__
-#define __DEPSGRAPH_PRIVATE_H__
-
-#include "BKE_depsgraph.h"
-#include "DNA_constraint_types.h"
-#include "BKE_constraint.h"
-
-struct Scene;
-struct Group;
-struct EffectorWeights;
-struct ModifierData;
-
-/* **** DAG relation types *** */
-
-/* scene link to object */
-#define DAG_RL_SCENE (1 << 0)
-/* object link to data */
-#define DAG_RL_DATA (1 << 1)
-
-/* object changes object (parent, track, constraints) */
-#define DAG_RL_OB_OB (1 << 2)
-/* object changes obdata (hooks, constraints) */
-#define DAG_RL_OB_DATA (1 << 3)
-/* data changes object (vertex parent) */
-#define DAG_RL_DATA_OB (1 << 4)
-/* data changes data (deformers) */
-#define DAG_RL_DATA_DATA (1 << 5)
-
-#define DAG_NO_RELATION (1 << 6)
-
-#define DAG_RL_ALL_BUT_DATA (DAG_RL_SCENE | DAG_RL_OB_OB | DAG_RL_OB_DATA | DAG_RL_DATA_OB | DAG_RL_DATA_DATA)
-#define DAG_RL_ALL (DAG_RL_ALL_BUT_DATA | DAG_RL_DATA)
-
-
-#define DAGQUEUEALLOC 50
-
-enum {
- DAG_WHITE = 0,
- DAG_GRAY = 1,
- DAG_BLACK = 2
-};
-
-typedef struct DagAdjList {
- struct DagNode *node;
- short type;
- int count; /* number of identical arcs */
- unsigned int lay; // for flushing redraw/rebuild events
- const char *name;
- struct DagAdjList *next;
-} DagAdjList;
-
-
-typedef struct DagNode {
- int color;
- short type;
- float x, y, k;
- void *ob;
- void *first_ancestor;
- int ancestor_count;
- unsigned int lay; /* accumulated layers of its relations + itself */
- unsigned int scelay; /* layers due to being in scene */
- uint64_t 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 */
- int DFS_dvtm; /* DFS discovery time */
- int DFS_fntm; /* DFS Finishing time */
- struct DagAdjList *child;
- struct DagAdjList *parent;
- struct DagNode *next;
-
- /* Threaded evaluation routines */
- uint32_t num_pending_parents; /* number of parents which are not updated yet
- * this node has got.
- * Used by threaded update for faster detect whether node could be
- * updated aready.
- */
- bool scheduled;
-
- /* Runtime flags mainly used to determine which extra data is to be evaluated
- * during object_handle_update(). Such an extra data is what depends on the
- * DAG topology, meaning this flags indicates the data evaluation of which
- * depends on the node dependencies.
- */
- short eval_flags;
-} DagNode;
-
-typedef struct DagNodeQueueElem {
- struct DagNode *node;
- struct DagNodeQueueElem *next;
-} DagNodeQueueElem;
-
-typedef struct DagNodeQueue {
- DagNodeQueueElem *first;
- DagNodeQueueElem *last;
- int count;
- int maxlevel;
- struct DagNodeQueue *freenodes;
-} DagNodeQueue;
-
-/* forest as we may have more than one DAG unconnected */
-typedef struct DagForest {
- ListBase DagNode;
- struct GHash *nodeHash;
- int numNodes;
- bool is_acyclic;
- int time; /* for flushing/tagging, compare with node->lasttime */
- bool ugly_hack_sorry; /* prevent type check */
- bool need_update;
-} DagForest;
-
-// queue operations
-DagNodeQueue *queue_create(int slots);
-void queue_raz(DagNodeQueue *queue);
-void push_queue(DagNodeQueue *queue, DagNode *node);
-void push_stack(DagNodeQueue *queue, DagNode *node);
-DagNode *pop_queue(DagNodeQueue *queue);
-DagNode *get_top_node_queue(DagNodeQueue *queue);
-void queue_delete(DagNodeQueue *queue);
-
-// Dag management
-DagForest *dag_init(void);
-DagForest *build_dag(struct Main *bmain, struct Scene *sce, short mask);
-void free_forest(struct DagForest *Dag);
-DagNode *dag_find_node(DagForest *forest, void *fob);
-DagNode *dag_add_node(DagForest *forest, void *fob);
-DagNode *dag_get_node(DagForest *forest, void *fob);
-DagNode *dag_get_sub_node(DagForest *forest, void *fob);
-void dag_add_relation(DagForest *forest, DagNode *fob1, DagNode *fob2, short rel, const char *name);
-
-typedef bool (*DagCollobjFilterFunction)(struct Object *obj, struct ModifierData *md);
-
-void dag_add_collision_relations(DagForest *dag, struct Scene *scene, Object *ob, DagNode *node, struct Group *group, int layer, unsigned int modifier_type, DagCollobjFilterFunction fn, bool dupli, const char *name);
-void dag_add_forcefield_relations(DagForest *dag, struct Scene *scene, Object *ob, DagNode *node, struct EffectorWeights *eff, bool add_absorption, int skip_forcefield, const char *name);
-
-void graph_print_queue(DagNodeQueue *nqueue);
-void graph_print_queue_dist(DagNodeQueue *nqueue);
-void graph_print_adj_list(DagForest *dag);
-
-#endif /* __DEPSGRAPH_PRIVATE_H__ */
diff --git a/source/blender/blenkernel/intern/CCGSubSurf.c b/source/blender/blenkernel/intern/CCGSubSurf.c
index 792e9195f12..68bcfa878ac 100644
--- a/source/blender/blenkernel/intern/CCGSubSurf.c
+++ b/source/blender/blenkernel/intern/CCGSubSurf.c
@@ -42,7 +42,7 @@
# include "opensubdiv_converter_capi.h"
#endif
-#include "GL/glew.h"
+#include "GPU_glew.h"
/***/
diff --git a/source/blender/blenkernel/intern/CCGSubSurf_opensubdiv.c b/source/blender/blenkernel/intern/CCGSubSurf_opensubdiv.c
index f568bb94ac5..c26112d3724 100644
--- a/source/blender/blenkernel/intern/CCGSubSurf_opensubdiv.c
+++ b/source/blender/blenkernel/intern/CCGSubSurf_opensubdiv.c
@@ -43,7 +43,7 @@
#include "opensubdiv_capi.h"
#include "opensubdiv_converter_capi.h"
-#include "GL/glew.h"
+#include "GPU_glew.h"
#include "GPU_extensions.h"
#define OSD_LOG if (false) printf
@@ -995,7 +995,7 @@ void ccgSubSurf__sync_subdivUvs(CCGSubSurf *ss, bool subdiv_uvs)
void BKE_subsurf_osd_init(void)
{
- openSubdiv_init(GPU_legacy_support());
+ openSubdiv_init();
BLI_spin_init(&delete_spin);
}
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index 26aecb526d4..67463ffe915 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -51,15 +51,19 @@
#include "BLI_linklist.h"
#include "BLI_task.h"
+#include "DEG_depsgraph.h"
+
#include "BKE_cdderivedmesh.h"
#include "BKE_colorband.h"
#include "BKE_editmesh.h"
#include "BKE_key.h"
+#include "BKE_layer.h"
#include "BKE_library.h"
#include "BKE_material.h"
#include "BKE_modifier.h"
#include "BKE_mesh.h"
#include "BKE_mesh_mapping.h"
+#include "BKE_mesh_tangent.h"
#include "BKE_object.h"
#include "BKE_object_deform.h"
#include "BKE_paint.h"
@@ -76,11 +80,12 @@ static DerivedMesh *navmesh_dm_createNavMeshForVisualization(DerivedMesh *dm);
#include "BLI_sys_types.h" /* for intptr_t support */
#include "GPU_buffers.h"
-#include "GPU_glew.h"
#include "GPU_shader.h"
+#include "GPU_immediate.h"
#ifdef WITH_OPENSUBDIV
-# include "BKE_depsgraph.h"
+# include "DEG_depsgraph.h"
+# include "DEG_depsgraph_query.h"
# include "DNA_userdef_types.h"
#endif
@@ -347,7 +352,7 @@ void DM_init(
dm->numPolyData = numPolys;
DM_init_funcs(dm);
-
+
dm->needsFree = 1;
dm->auto_bump_scale = -1.0f;
dm->dirty = 0;
@@ -407,6 +412,7 @@ int DM_release(DerivedMesh *dm)
if (dm->needsFree) {
bvhcache_free(&dm->bvhCache);
GPU_drawobject_free(dm);
+
CustomData_free(&dm->vertData, dm->numVertData);
CustomData_free(&dm->edgeData, dm->numEdgeData);
CustomData_free(&dm->faceData, dm->numTessFaceData);
@@ -552,7 +558,6 @@ void DM_update_tessface_data(DerivedMesh *dm)
MLoop *ml = dm->getLoopArray(dm);
CustomData *fdata = dm->getTessFaceDataLayout(dm);
- CustomData *pdata = dm->getPolyDataLayout(dm);
CustomData *ldata = dm->getLoopDataLayout(dm);
const int totface = dm->getNumTessFaces(dm);
@@ -565,7 +570,7 @@ void DM_update_tessface_data(DerivedMesh *dm)
if (!polyindex)
return;
- CustomData_from_bmeshpoly(fdata, pdata, ldata, totface);
+ CustomData_from_bmeshpoly(fdata, ldata, totface);
if (CustomData_has_layer(fdata, CD_MTFACE) ||
CustomData_has_layer(fdata, CD_MCOL) ||
@@ -597,7 +602,7 @@ void DM_update_tessface_data(DerivedMesh *dm)
* 0 for quads (because our quads may have been rotated compared to their org poly, see tessellation code).
* So we pass the MFace's, and BKE_mesh_loops_to_tessdata will use MFace->v4 index as quad test.
*/
- BKE_mesh_loops_to_tessdata(fdata, ldata, pdata, mface, polyindex, loopindex, totface);
+ BKE_mesh_loops_to_tessdata(fdata, ldata, mface, polyindex, loopindex, totface);
MEM_freeN(loopindex);
}
@@ -615,7 +620,6 @@ void DM_generate_tangent_tessface_data(DerivedMesh *dm, bool generate)
MLoop *ml = dm->getLoopArray(dm);
CustomData *fdata = dm->getTessFaceDataLayout(dm);
- CustomData *pdata = dm->getPolyDataLayout(dm);
CustomData *ldata = dm->getLoopDataLayout(dm);
const int totface = dm->getNumTessFaces(dm);
@@ -632,7 +636,7 @@ void DM_generate_tangent_tessface_data(DerivedMesh *dm, bool generate)
for (int j = 0; j < ldata->totlayer; j++) {
if (ldata->layers[j].type == CD_TANGENT) {
CustomData_add_layer_named(fdata, CD_TANGENT, CD_CALLOC, NULL, totface, ldata->layers[j].name);
- CustomData_bmesh_update_active_layers(fdata, pdata, ldata);
+ CustomData_bmesh_update_active_layers(fdata, ldata);
if (!loopindex) {
loopindex = MEM_malloc_arrayN(totface, sizeof(*loopindex), __func__);
@@ -662,7 +666,7 @@ void DM_generate_tangent_tessface_data(DerivedMesh *dm, bool generate)
}
if (loopindex)
MEM_freeN(loopindex);
- BLI_assert(CustomData_from_bmeshpoly_test(fdata, pdata, ldata, true));
+ BLI_assert(CustomData_from_bmeshpoly_test(fdata, ldata, true));
}
if (G.debug & G_DEBUG)
@@ -1147,7 +1151,7 @@ DerivedMesh *mesh_create_derived(Mesh *me, float (*vertCos)[3])
}
DerivedMesh *mesh_create_derived_for_modifier(
- Scene *scene, Object *ob,
+ const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob,
ModifierData *md, int build_shapekey_layers)
{
Mesh *me = ob->data;
@@ -1173,7 +1177,7 @@ DerivedMesh *mesh_create_derived_for_modifier(
int numVerts;
float (*deformedVerts)[3] = BKE_mesh_vertexCos_get(me, &numVerts);
- modwrap_deformVerts(md, ob, NULL, deformedVerts, numVerts, 0);
+ modwrap_deformVerts(md, eval_ctx, ob, NULL, deformedVerts, numVerts, 0);
dm = mesh_create_derived(me, deformedVerts);
if (build_shapekey_layers)
@@ -1187,7 +1191,7 @@ DerivedMesh *mesh_create_derived_for_modifier(
if (build_shapekey_layers)
add_shapekey_layers(tdm, me, ob);
- dm = modwrap_applyModifier(md, ob, tdm, 0);
+ dm = modwrap_applyModifier(md, eval_ctx, ob, tdm, 0);
ASSERT_IS_VALID_DM(dm);
if (tdm != dm) tdm->release(tdm);
@@ -1752,7 +1756,7 @@ static void dm_ensure_display_normals(DerivedMesh *dm)
* - apply deform modifiers and input vertexco
*/
static void mesh_calc_modifiers(
- Scene *scene, Object *ob, float (*inputVertexCos)[3],
+ const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, float (*inputVertexCos)[3],
const bool useRenderParams, int useDeform,
const bool need_mapping, CustomDataMask dataMask,
const int index, const bool useCache, const bool build_shapekey_layers,
@@ -1774,17 +1778,19 @@ static void mesh_calc_modifiers(
MultiresModifierData *mmd = get_multires_modifier(scene, ob, 0);
const bool has_multires = (mmd && mmd->sculptlvl != 0);
bool multires_applied = false;
- const bool sculpt_mode = ob->mode & OB_MODE_SCULPT && ob->sculpt && !useRenderParams;
+ const bool sculpt_mode = eval_ctx->object_mode & OB_MODE_SCULPT && ob->sculpt && !useRenderParams;
const bool sculpt_dyntopo = (sculpt_mode && ob->sculpt->bm) && !useRenderParams;
const int draw_flag = dm_drawflag_calc(scene->toolsettings, me);
/* Generic preview only in object mode! */
- const bool do_mod_mcol = (ob->mode == OB_MODE_OBJECT);
+ const bool do_mod_mcol = (eval_ctx->object_mode == OB_MODE_OBJECT);
#if 0 /* XXX Will re-enable this when we have global mod stack options. */
const bool do_final_wmcol = (scene->toolsettings->weights_preview == WP_WPREVIEW_FINAL) && do_wmcol;
#endif
const bool do_final_wmcol = false;
- const bool do_init_wmcol = ((dataMask & CD_MASK_PREVIEW_MLOOPCOL) && (ob->mode & OB_MODE_WEIGHT_PAINT) && !do_final_wmcol);
+ const bool do_init_wmcol = (
+ (dataMask & CD_MASK_PREVIEW_MLOOPCOL) &&
+ (eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT) && !do_final_wmcol);
/* XXX Same as above... For now, only weights preview in WPaint mode. */
const bool do_mod_wmcol = do_init_wmcol;
@@ -1863,7 +1869,7 @@ static void mesh_calc_modifiers(
if (!deformedVerts)
deformedVerts = BKE_mesh_vertexCos_get(me, &numVerts);
- modwrap_deformVerts(md, ob, NULL, deformedVerts, numVerts, deform_app_flags);
+ modwrap_deformVerts(md, eval_ctx, ob, NULL, deformedVerts, numVerts, deform_app_flags);
}
else {
break;
@@ -2004,7 +2010,7 @@ static void mesh_calc_modifiers(
}
}
- modwrap_deformVerts(md, ob, dm, deformedVerts, numVerts, deform_app_flags);
+ modwrap_deformVerts(md, eval_ctx, ob, dm, deformedVerts, numVerts, deform_app_flags);
}
else {
DerivedMesh *ndm;
@@ -2079,7 +2085,7 @@ static void mesh_calc_modifiers(
}
}
- ndm = modwrap_applyModifier(md, ob, dm, app_flags);
+ ndm = modwrap_applyModifier(md, eval_ctx, ob, dm, app_flags);
ASSERT_IS_VALID_DM(ndm);
if (ndm) {
@@ -2106,7 +2112,7 @@ static void mesh_calc_modifiers(
(mti->requiredDataMask ?
mti->requiredDataMask(ob, md) : 0));
- ndm = modwrap_applyModifier(md, ob, orcodm, (app_flags & ~MOD_APPLY_USECACHE) | MOD_APPLY_ORCO);
+ ndm = modwrap_applyModifier(md, eval_ctx, ob, orcodm, (app_flags & ~MOD_APPLY_USECACHE) | MOD_APPLY_ORCO);
ASSERT_IS_VALID_DM(ndm);
if (ndm) {
@@ -2124,7 +2130,7 @@ static void mesh_calc_modifiers(
nextmask &= ~CD_MASK_CLOTH_ORCO;
DM_set_only_copy(clothorcodm, nextmask | CD_MASK_ORIGINDEX);
- ndm = modwrap_applyModifier(md, ob, clothorcodm, (app_flags & ~MOD_APPLY_USECACHE) | MOD_APPLY_ORCO);
+ ndm = modwrap_applyModifier(md, eval_ctx, ob, clothorcodm, (app_flags & ~MOD_APPLY_USECACHE) | MOD_APPLY_ORCO);
ASSERT_IS_VALID_DM(ndm);
if (ndm) {
@@ -2307,8 +2313,8 @@ bool editbmesh_modifier_is_enabled(Scene *scene, ModifierData *md, DerivedMesh *
}
static void editbmesh_calc_modifiers(
- Scene *scene, Object *ob, BMEditMesh *em,
- CustomDataMask dataMask,
+ const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob,
+ BMEditMesh *em, CustomDataMask dataMask,
/* return args */
DerivedMesh **r_cage, DerivedMesh **r_final)
{
@@ -2395,9 +2401,9 @@ static void editbmesh_calc_modifiers(
}
if (mti->deformVertsEM)
- modwrap_deformVertsEM(md, ob, em, dm, deformedVerts, numVerts);
+ modwrap_deformVertsEM(md, eval_ctx, ob, em, dm, deformedVerts, numVerts);
else
- modwrap_deformVerts(md, ob, dm, deformedVerts, numVerts, 0);
+ modwrap_deformVerts(md, eval_ctx, ob, dm, deformedVerts, numVerts, 0);
}
else {
DerivedMesh *ndm;
@@ -2442,10 +2448,10 @@ static void editbmesh_calc_modifiers(
DM_set_only_copy(orcodm, mask | CD_MASK_ORIGINDEX);
if (mti->applyModifierEM) {
- ndm = modwrap_applyModifierEM(md, ob, em, orcodm, MOD_APPLY_ORCO);
+ ndm = modwrap_applyModifierEM(md, eval_ctx, ob, em, orcodm, MOD_APPLY_ORCO);
}
else {
- ndm = modwrap_applyModifier(md, ob, orcodm, MOD_APPLY_ORCO);
+ ndm = modwrap_applyModifier(md, eval_ctx, ob, orcodm, MOD_APPLY_ORCO);
}
ASSERT_IS_VALID_DM(ndm);
@@ -2470,9 +2476,9 @@ static void editbmesh_calc_modifiers(
}
if (mti->applyModifierEM)
- ndm = modwrap_applyModifierEM(md, ob, em, dm, MOD_APPLY_USECACHE | MOD_APPLY_ALLOW_GPU);
+ ndm = modwrap_applyModifierEM(md, eval_ctx, ob, em, dm, MOD_APPLY_USECACHE | MOD_APPLY_ALLOW_GPU);
else
- ndm = modwrap_applyModifier(md, ob, dm, MOD_APPLY_USECACHE | MOD_APPLY_ALLOW_GPU);
+ ndm = modwrap_applyModifier(md, eval_ctx, ob, dm, MOD_APPLY_USECACHE | MOD_APPLY_ALLOW_GPU);
ASSERT_IS_VALID_DM(ndm);
if (ndm) {
@@ -2608,7 +2614,8 @@ static void editbmesh_calc_modifiers(
* we'll be using GPU backend of OpenSubdiv. This is so
* playback performance is kept as high as possible.
*/
-static bool calc_modifiers_skip_orco(Scene *scene,
+static bool calc_modifiers_skip_orco(const EvaluationContext *eval_ctx,
+ Scene *scene,
Object *ob,
bool use_render_params)
{
@@ -2621,10 +2628,10 @@ static bool calc_modifiers_skip_orco(Scene *scene,
if (U.opensubdiv_compute_type == USER_OPENSUBDIV_COMPUTE_NONE) {
return false;
}
- else if ((ob->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT)) != 0) {
+ else if ((eval_ctx->object_mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT)) != 0) {
return false;
}
- else if ((DAG_get_eval_flags_for_object(scene, ob) & DAG_EVAL_NEED_CPU) != 0) {
+ else if ((DEG_get_eval_flags_for_id(eval_ctx->depsgraph, &ob->id) & DAG_EVAL_NEED_CPU) != 0) {
return false;
}
SubsurfModifierData *smd = (SubsurfModifierData *)last_md;
@@ -2636,7 +2643,7 @@ static bool calc_modifiers_skip_orco(Scene *scene,
#endif
static void mesh_build_data(
- Scene *scene, Object *ob, CustomDataMask dataMask,
+ const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, CustomDataMask dataMask,
const bool build_shapekey_layers, const bool need_mapping)
{
BLI_assert(ob->type == OB_MESH);
@@ -2645,13 +2652,13 @@ static void mesh_build_data(
BKE_object_sculpt_modifiers_changed(ob);
#ifdef WITH_OPENSUBDIV
- if (calc_modifiers_skip_orco(scene, ob, false)) {
+ if (calc_modifiers_skip_orco(eval_ctx, scene, ob, false)) {
dataMask &= ~(CD_MASK_ORCO | CD_MASK_PREVIEW_MCOL);
}
#endif
mesh_calc_modifiers(
- scene, ob, NULL, false, 1, need_mapping, dataMask, -1, true, build_shapekey_layers,
+ eval_ctx, scene, ob, NULL, false, 1, need_mapping, dataMask, -1, true, build_shapekey_layers,
true,
&ob->derivedDeform, &ob->derivedFinal);
@@ -2662,17 +2669,19 @@ static void mesh_build_data(
ob->lastDataMask = dataMask;
ob->lastNeedMapping = need_mapping;
- if ((ob->mode & OB_MODE_ALL_SCULPT) && ob->sculpt) {
+ if ((eval_ctx->object_mode & OB_MODE_ALL_SCULPT) && ob->sculpt) {
/* create PBVH immediately (would be created on the fly too,
* but this avoids waiting on first stroke) */
- BKE_sculpt_update_mesh_elements(scene, scene->toolsettings->sculpt, ob, false, false);
+ BKE_sculpt_update_mesh_elements(eval_ctx, scene, scene->toolsettings->sculpt, ob, false, false);
}
BLI_assert(!(ob->derivedFinal->dirty & DM_DIRTY_NORMALS));
}
-static void editbmesh_build_data(Scene *scene, Object *obedit, BMEditMesh *em, CustomDataMask dataMask)
+static void editbmesh_build_data(
+ const struct EvaluationContext *eval_ctx, Scene *scene,
+ Object *obedit, BMEditMesh *em, CustomDataMask dataMask)
{
BKE_object_free_derived_caches(obedit);
BKE_object_sculpt_modifiers_changed(obedit);
@@ -2680,13 +2689,13 @@ static void editbmesh_build_data(Scene *scene, Object *obedit, BMEditMesh *em, C
BKE_editmesh_free_derivedmesh(em);
#ifdef WITH_OPENSUBDIV
- if (calc_modifiers_skip_orco(scene, obedit, false)) {
+ if (calc_modifiers_skip_orco(eval_ctx, scene, obedit, false)) {
dataMask &= ~(CD_MASK_ORCO | CD_MASK_PREVIEW_MCOL);
}
#endif
editbmesh_calc_modifiers(
- scene, obedit, em, dataMask,
+ eval_ctx, scene, obedit, em, dataMask,
&em->derivedCage, &em->derivedFinal);
DM_set_object_boundbox(obedit, em->derivedFinal);
@@ -2698,9 +2707,13 @@ static void editbmesh_build_data(Scene *scene, Object *obedit, BMEditMesh *em, C
BLI_assert(!(em->derivedFinal->dirty & DM_DIRTY_NORMALS));
}
-static CustomDataMask object_get_datamask(const Scene *scene, Object *ob, bool *r_need_mapping)
+static CustomDataMask object_get_datamask(
+ const EvaluationContext *eval_ctx,
+ const Scene *scene, Object *ob, bool *r_need_mapping)
{
- Object *actob = scene->basact ? scene->basact->object : NULL;
+ /* TODO(sergey): Avoid this linear list lookup. */
+ ViewLayer *view_layer = BKE_view_layer_context_active_PLACEHOLDER(scene);
+ Object *actob = view_layer->basact ? view_layer->basact->object : NULL;
CustomDataMask mask = ob->customdata_mask;
if (r_need_mapping) {
@@ -2708,28 +2721,28 @@ static CustomDataMask object_get_datamask(const Scene *scene, Object *ob, bool *
}
if (ob == actob) {
- bool editing = BKE_paint_select_face_test(ob);
+ bool editing = BKE_paint_select_face_test(ob, eval_ctx->object_mode);
/* weight paint and face select need original indices because of selection buffer drawing */
if (r_need_mapping) {
- *r_need_mapping = (editing || (ob->mode & (OB_MODE_WEIGHT_PAINT | OB_MODE_VERTEX_PAINT)));
+ *r_need_mapping = (editing || (eval_ctx->object_mode & (OB_MODE_WEIGHT_PAINT | OB_MODE_VERTEX_PAINT)));
}
/* check if we need tfaces & mcols due to face select or texture paint */
- if ((ob->mode & OB_MODE_TEXTURE_PAINT) || editing) {
+ if ((eval_ctx->object_mode & OB_MODE_TEXTURE_PAINT) || editing) {
mask |= CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL;
}
/* check if we need mcols due to vertex paint or weightpaint */
- if (ob->mode & OB_MODE_VERTEX_PAINT) {
+ if (eval_ctx->object_mode & OB_MODE_VERTEX_PAINT) {
mask |= CD_MASK_MLOOPCOL;
}
- if (ob->mode & OB_MODE_WEIGHT_PAINT) {
+ if (eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT) {
mask |= CD_MASK_PREVIEW_MLOOPCOL;
}
- if (ob->mode & OB_MODE_EDIT)
+ if (eval_ctx->object_mode & OB_MODE_EDIT)
mask |= CD_MASK_MVERT_SKIN;
}
@@ -2737,85 +2750,86 @@ static CustomDataMask object_get_datamask(const Scene *scene, Object *ob, bool *
}
void makeDerivedMesh(
- Scene *scene, Object *ob, BMEditMesh *em,
+ const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, BMEditMesh *em,
CustomDataMask dataMask, const bool build_shapekey_layers)
{
bool need_mapping;
- dataMask |= object_get_datamask(scene, ob, &need_mapping);
+ dataMask |= object_get_datamask(eval_ctx, scene, ob, &need_mapping);
if (em) {
- editbmesh_build_data(scene, ob, em, dataMask);
+ editbmesh_build_data(eval_ctx, scene, ob, em, dataMask);
}
else {
- mesh_build_data(scene, ob, dataMask, build_shapekey_layers, need_mapping);
+ mesh_build_data(eval_ctx, scene, ob, dataMask, build_shapekey_layers, need_mapping);
}
}
/***/
-DerivedMesh *mesh_get_derived_final(Scene *scene, Object *ob, CustomDataMask dataMask)
+DerivedMesh *mesh_get_derived_final(
+ const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, CustomDataMask dataMask)
{
/* if there's no derived mesh or the last data mask used doesn't include
* the data we need, rebuild the derived mesh
*/
bool need_mapping;
- dataMask |= object_get_datamask(scene, ob, &need_mapping);
+ dataMask |= object_get_datamask(eval_ctx, scene, ob, &need_mapping);
if (!ob->derivedFinal ||
((dataMask & ob->lastDataMask) != dataMask) ||
(need_mapping != ob->lastNeedMapping))
{
- mesh_build_data(scene, ob, dataMask, false, need_mapping);
+ mesh_build_data(eval_ctx, scene, ob, dataMask, false, need_mapping);
}
if (ob->derivedFinal) { BLI_assert(!(ob->derivedFinal->dirty & DM_DIRTY_NORMALS)); }
return ob->derivedFinal;
}
-DerivedMesh *mesh_get_derived_deform(Scene *scene, Object *ob, CustomDataMask dataMask)
+DerivedMesh *mesh_get_derived_deform(const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, CustomDataMask dataMask)
{
/* if there's no derived mesh or the last data mask used doesn't include
* the data we need, rebuild the derived mesh
*/
bool need_mapping;
- dataMask |= object_get_datamask(scene, ob, &need_mapping);
+ dataMask |= object_get_datamask(eval_ctx, scene, ob, &need_mapping);
if (!ob->derivedDeform ||
((dataMask & ob->lastDataMask) != dataMask) ||
(need_mapping != ob->lastNeedMapping))
{
- mesh_build_data(scene, ob, dataMask, false, need_mapping);
+ mesh_build_data(eval_ctx, scene, ob, dataMask, false, need_mapping);
}
return ob->derivedDeform;
}
-DerivedMesh *mesh_create_derived_render(Scene *scene, Object *ob, CustomDataMask dataMask)
+DerivedMesh *mesh_create_derived_render(const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, CustomDataMask dataMask)
{
DerivedMesh *final;
mesh_calc_modifiers(
- scene, ob, NULL, true, 1, false, dataMask, -1, false, false, false,
+ eval_ctx, scene, ob, NULL, true, 1, false, dataMask, -1, false, false, false,
NULL, &final);
return final;
}
-DerivedMesh *mesh_create_derived_index_render(Scene *scene, Object *ob, CustomDataMask dataMask, int index)
+DerivedMesh *mesh_create_derived_index_render(const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, CustomDataMask dataMask, int index)
{
DerivedMesh *final;
mesh_calc_modifiers(
- scene, ob, NULL, true, 1, false, dataMask, index, false, false, false,
+ eval_ctx, scene, ob, NULL, true, 1, false, dataMask, index, false, false, false,
NULL, &final);
return final;
}
DerivedMesh *mesh_create_derived_view(
- Scene *scene, Object *ob,
- CustomDataMask dataMask)
+ const struct EvaluationContext *eval_ctx, Scene *scene,
+ Object *ob, CustomDataMask dataMask)
{
DerivedMesh *final;
@@ -2826,7 +2840,7 @@ DerivedMesh *mesh_create_derived_view(
ob->transflag |= OB_NO_PSYS_UPDATE;
mesh_calc_modifiers(
- scene, ob, NULL, false, 1, false, dataMask, -1, false, false, false,
+ eval_ctx, scene, ob, NULL, false, 1, false, dataMask, -1, false, false, false,
NULL, &final);
ob->transflag &= ~OB_NO_PSYS_UPDATE;
@@ -2835,53 +2849,53 @@ DerivedMesh *mesh_create_derived_view(
}
DerivedMesh *mesh_create_derived_no_deform(
- Scene *scene, Object *ob, float (*vertCos)[3],
- CustomDataMask dataMask)
+ const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob,
+ float (*vertCos)[3], CustomDataMask dataMask)
{
DerivedMesh *final;
mesh_calc_modifiers(
- scene, ob, vertCos, false, 0, false, dataMask, -1, false, false, false,
+ eval_ctx, scene, ob, vertCos, false, 0, false, dataMask, -1, false, false, false,
NULL, &final);
return final;
}
DerivedMesh *mesh_create_derived_no_virtual(
- Scene *scene, Object *ob, float (*vertCos)[3],
- CustomDataMask dataMask)
+ const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob,
+ float (*vertCos)[3], CustomDataMask dataMask)
{
DerivedMesh *final;
mesh_calc_modifiers(
- scene, ob, vertCos, false, -1, false, dataMask, -1, false, false, false,
+ eval_ctx, scene, ob, vertCos, false, -1, false, dataMask, -1, false, false, false,
NULL, &final);
return final;
}
DerivedMesh *mesh_create_derived_physics(
- Scene *scene, Object *ob, float (*vertCos)[3],
- CustomDataMask dataMask)
+ const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob,
+ float (*vertCos)[3], CustomDataMask dataMask)
{
DerivedMesh *final;
mesh_calc_modifiers(
- scene, ob, vertCos, false, -1, true, dataMask, -1, false, false, false,
+ eval_ctx, scene, ob, vertCos, false, -1, true, dataMask, -1, false, false, false,
NULL, &final);
return final;
}
DerivedMesh *mesh_create_derived_no_deform_render(
- Scene *scene, Object *ob,
- float (*vertCos)[3],
+ const struct EvaluationContext *eval_ctx, Scene *scene,
+ Object *ob, float (*vertCos)[3],
CustomDataMask dataMask)
{
DerivedMesh *final;
mesh_calc_modifiers(
- scene, ob, vertCos, true, 0, false, dataMask, -1, false, false, false,
+ eval_ctx, scene, ob, vertCos, true, 0, false, dataMask, -1, false, false, false,
NULL, &final);
return final;
@@ -2890,7 +2904,7 @@ DerivedMesh *mesh_create_derived_no_deform_render(
/***/
DerivedMesh *editbmesh_get_derived_cage_and_final(
- Scene *scene, Object *obedit, BMEditMesh *em,
+ const struct EvaluationContext *eval_ctx, Scene *scene, Object *obedit, BMEditMesh *em,
CustomDataMask dataMask,
/* return args */
DerivedMesh **r_final)
@@ -2898,12 +2912,12 @@ DerivedMesh *editbmesh_get_derived_cage_and_final(
/* if there's no derived mesh or the last data mask used doesn't include
* the data we need, rebuild the derived mesh
*/
- dataMask |= object_get_datamask(scene, obedit, NULL);
+ dataMask |= object_get_datamask(eval_ctx, scene, obedit, NULL);
if (!em->derivedCage ||
(em->lastDataMask & dataMask) != dataMask)
{
- editbmesh_build_data(scene, obedit, em, dataMask);
+ editbmesh_build_data(eval_ctx, scene, obedit, em, dataMask);
}
*r_final = em->derivedFinal;
@@ -2911,17 +2925,19 @@ DerivedMesh *editbmesh_get_derived_cage_and_final(
return em->derivedCage;
}
-DerivedMesh *editbmesh_get_derived_cage(Scene *scene, Object *obedit, BMEditMesh *em, CustomDataMask dataMask)
+DerivedMesh *editbmesh_get_derived_cage(
+ const struct EvaluationContext *eval_ctx, Scene *scene, Object *obedit, BMEditMesh *em,
+ CustomDataMask dataMask)
{
/* if there's no derived mesh or the last data mask used doesn't include
* the data we need, rebuild the derived mesh
*/
- dataMask |= object_get_datamask(scene, obedit, NULL);
+ dataMask |= object_get_datamask(eval_ctx, scene, obedit, NULL);
if (!em->derivedCage ||
(em->lastDataMask & dataMask) != dataMask)
{
- editbmesh_build_data(scene, obedit, em, dataMask);
+ editbmesh_build_data(eval_ctx, scene, obedit, em, dataMask);
}
return em->derivedCage;
@@ -3058,234 +3074,6 @@ void mesh_get_mapped_verts_coords(DerivedMesh *dm, float (*r_cos)[3], const int
/* ******************* GLSL ******************** */
-/** \name Tangent Space Calculation
- * \{ */
-
-/* Necessary complexity to handle looptri's as quads for correct tangents */
-#define USE_LOOPTRI_DETECT_QUADS
-
-typedef struct {
- float (*precomputedFaceNormals)[3];
- float (*precomputedLoopNormals)[3];
- const MLoopTri *looptri;
- MLoopUV *mloopuv; /* texture coordinates */
- MPoly *mpoly; /* indices */
- MLoop *mloop; /* indices */
- MVert *mvert; /* vertices & normals */
- float (*orco)[3];
- float (*tangent)[4]; /* destination */
- int numTessFaces;
-
-#ifdef USE_LOOPTRI_DETECT_QUADS
- /* map from 'fake' face index to looptri,
- * quads will point to the first looptri of the quad */
- const int *face_as_quad_map;
- int num_face_as_quad_map;
-#endif
-
-} SGLSLMeshToTangent;
-
-/* interface */
-#include "mikktspace.h"
-
-static int dm_ts_GetNumFaces(const SMikkTSpaceContext *pContext)
-{
- SGLSLMeshToTangent *pMesh = pContext->m_pUserData;
-
-#ifdef USE_LOOPTRI_DETECT_QUADS
- return pMesh->num_face_as_quad_map;
-#else
- return pMesh->numTessFaces;
-#endif
-}
-
-static int dm_ts_GetNumVertsOfFace(const SMikkTSpaceContext *pContext, const int face_num)
-{
-#ifdef USE_LOOPTRI_DETECT_QUADS
- SGLSLMeshToTangent *pMesh = pContext->m_pUserData;
- if (pMesh->face_as_quad_map) {
- const MLoopTri *lt = &pMesh->looptri[pMesh->face_as_quad_map[face_num]];
- const MPoly *mp = &pMesh->mpoly[lt->poly];
- if (mp->totloop == 4) {
- return 4;
- }
- }
- return 3;
-#else
- UNUSED_VARS(pContext, face_num);
- return 3;
-#endif
-}
-
-static void dm_ts_GetPosition(
- const SMikkTSpaceContext *pContext, float r_co[3],
- const int face_num, const int vert_index)
-{
- //assert(vert_index >= 0 && vert_index < 4);
- SGLSLMeshToTangent *pMesh = pContext->m_pUserData;
- const MLoopTri *lt;
- int loop_index;
- const float *co;
-
-#ifdef USE_LOOPTRI_DETECT_QUADS
- if (pMesh->face_as_quad_map) {
- lt = &pMesh->looptri[pMesh->face_as_quad_map[face_num]];
- const MPoly *mp = &pMesh->mpoly[lt->poly];
- if (mp->totloop == 4) {
- loop_index = mp->loopstart + vert_index;
- goto finally;
- }
- /* fall through to regular triangle */
- }
- else {
- lt = &pMesh->looptri[face_num];
- }
-#else
- lt = &pMesh->looptri[face_num];
-#endif
- loop_index = lt->tri[vert_index];
-
-finally:
- co = pMesh->mvert[pMesh->mloop[loop_index].v].co;
- copy_v3_v3(r_co, co);
-}
-
-static void dm_ts_GetTextureCoordinate(
- const SMikkTSpaceContext *pContext, float r_uv[2],
- const int face_num, const int vert_index)
-{
- //assert(vert_index >= 0 && vert_index < 4);
- SGLSLMeshToTangent *pMesh = pContext->m_pUserData;
- const MLoopTri *lt;
- int loop_index;
-
-#ifdef USE_LOOPTRI_DETECT_QUADS
- if (pMesh->face_as_quad_map) {
- lt = &pMesh->looptri[pMesh->face_as_quad_map[face_num]];
- const MPoly *mp = &pMesh->mpoly[lt->poly];
- if (mp->totloop == 4) {
- loop_index = mp->loopstart + vert_index;
- goto finally;
- }
- /* fall through to regular triangle */
- }
- else {
- lt = &pMesh->looptri[face_num];
- }
-#else
- lt = &pMesh->looptri[face_num];
-#endif
- loop_index = lt->tri[vert_index];
-
-finally:
- if (pMesh->mloopuv != NULL) {
- const float *uv = pMesh->mloopuv[loop_index].uv;
- copy_v2_v2(r_uv, uv);
- }
- else {
- const float *orco = pMesh->orco[pMesh->mloop[loop_index].v];
- map_to_sphere(&r_uv[0], &r_uv[1], orco[0], orco[1], orco[2]);
- }
-}
-
-static void dm_ts_GetNormal(
- const SMikkTSpaceContext *pContext, float r_no[3],
- const int face_num, const int vert_index)
-{
- //assert(vert_index >= 0 && vert_index < 4);
- SGLSLMeshToTangent *pMesh = (SGLSLMeshToTangent *) pContext->m_pUserData;
- const MLoopTri *lt;
- int loop_index;
-
-#ifdef USE_LOOPTRI_DETECT_QUADS
- if (pMesh->face_as_quad_map) {
- lt = &pMesh->looptri[pMesh->face_as_quad_map[face_num]];
- const MPoly *mp = &pMesh->mpoly[lt->poly];
- if (mp->totloop == 4) {
- loop_index = mp->loopstart + vert_index;
- goto finally;
- }
- /* fall through to regular triangle */
- }
- else {
- lt = &pMesh->looptri[face_num];
- }
-#else
- lt = &pMesh->looptri[face_num];
-#endif
- loop_index = lt->tri[vert_index];
-
-finally:
- if (pMesh->precomputedLoopNormals) {
- copy_v3_v3(r_no, pMesh->precomputedLoopNormals[loop_index]);
- }
- else if ((pMesh->mpoly[lt->poly].flag & ME_SMOOTH) == 0) { /* flat */
- if (pMesh->precomputedFaceNormals) {
- copy_v3_v3(r_no, pMesh->precomputedFaceNormals[lt->poly]);
- }
- else {
-#ifdef USE_LOOPTRI_DETECT_QUADS
- const MPoly *mp = &pMesh->mpoly[lt->poly];
- if (mp->totloop == 4) {
- normal_quad_v3(
- r_no,
- pMesh->mvert[pMesh->mloop[mp->loopstart + 0].v].co,
- pMesh->mvert[pMesh->mloop[mp->loopstart + 1].v].co,
- pMesh->mvert[pMesh->mloop[mp->loopstart + 2].v].co,
- pMesh->mvert[pMesh->mloop[mp->loopstart + 3].v].co);
- }
- else
-#endif
- {
- normal_tri_v3(
- r_no,
- pMesh->mvert[pMesh->mloop[lt->tri[0]].v].co,
- pMesh->mvert[pMesh->mloop[lt->tri[1]].v].co,
- pMesh->mvert[pMesh->mloop[lt->tri[2]].v].co);
- }
- }
- }
- else {
- const short *no = pMesh->mvert[pMesh->mloop[loop_index].v].no;
- normal_short_to_float_v3(r_no, no);
- }
-}
-
-static void dm_ts_SetTSpace(
- const SMikkTSpaceContext *pContext, const float fvTangent[3], const float fSign,
- const int face_num, const int vert_index)
-{
- //assert(vert_index >= 0 && vert_index < 4);
- SGLSLMeshToTangent *pMesh = (SGLSLMeshToTangent *) pContext->m_pUserData;
- const MLoopTri *lt;
- int loop_index;
-
-#ifdef USE_LOOPTRI_DETECT_QUADS
- if (pMesh->face_as_quad_map) {
- lt = &pMesh->looptri[pMesh->face_as_quad_map[face_num]];
- const MPoly *mp = &pMesh->mpoly[lt->poly];
- if (mp->totloop == 4) {
- loop_index = mp->loopstart + vert_index;
- goto finally;
- }
- /* fall through to regular triangle */
- }
- else {
- lt = &pMesh->looptri[face_num];
- }
-#else
- lt = &pMesh->looptri[face_num];
-#endif
- loop_index = lt->tri[vert_index];
-
- float *pRes;
-
-finally:
- pRes = pMesh->tangent[loop_index];
- copy_v3_v3(pRes, fvTangent);
- pRes[3] = fSign;
-}
-
void DM_calc_tangents_names_from_gpu(
const GPUVertexAttribs *gattribs,
char (*tangent_names)[MAX_NAME], int *r_tangent_names_count)
@@ -3299,28 +3087,6 @@ void DM_calc_tangents_names_from_gpu(
*r_tangent_names_count = count;
}
-static void DM_calc_loop_tangents_thread(TaskPool * __restrict UNUSED(pool), void *taskdata, int UNUSED(threadid))
-{
- struct SGLSLMeshToTangent *mesh2tangent = taskdata;
- /* new computation method */
- {
- SMikkTSpaceContext sContext = {NULL};
- SMikkTSpaceInterface sInterface = {NULL};
-
- sContext.m_pUserData = mesh2tangent;
- sContext.m_pInterface = &sInterface;
- sInterface.m_getNumFaces = dm_ts_GetNumFaces;
- sInterface.m_getNumVerticesOfFace = dm_ts_GetNumVertsOfFace;
- sInterface.m_getPosition = dm_ts_GetPosition;
- sInterface.m_getTexCoord = dm_ts_GetTextureCoordinate;
- sInterface.m_getNormal = dm_ts_GetNormal;
- sInterface.m_setTSpaceBasic = dm_ts_SetTSpace;
-
- /* 0 if failed */
- genTangSpaceDefault(&sContext);
- }
-}
-
void DM_add_named_tangent_layer_for_uv(
CustomData *uv_data, CustomData *tan_data, int numLoopData,
const char *layer_name)
@@ -3334,213 +3100,26 @@ void DM_add_named_tangent_layer_for_uv(
}
}
-/**
- * Here we get some useful information such as active uv layer name and search if it is already in tangent_names.
- * Also, we calculate tangent_mask that works as a descriptor of tangents state.
- * If tangent_mask has changed, then recalculate tangents.
- */
-void DM_calc_loop_tangents_step_0(
- const CustomData *loopData, bool calc_active_tangent,
- const char (*tangent_names)[MAX_NAME], int tangent_names_count,
- bool *rcalc_act, bool *rcalc_ren, int *ract_uv_n, int *rren_uv_n,
- char *ract_uv_name, char *rren_uv_name, short *rtangent_mask)
-{
- /* Active uv in viewport */
- int layer_index = CustomData_get_layer_index(loopData, CD_MLOOPUV);
- *ract_uv_n = CustomData_get_active_layer(loopData, CD_MLOOPUV);
- ract_uv_name[0] = 0;
- if (*ract_uv_n != -1) {
- strcpy(ract_uv_name, loopData->layers[*ract_uv_n + layer_index].name);
- }
-
- /* Active tangent in render */
- *rren_uv_n = CustomData_get_render_layer(loopData, CD_MLOOPUV);
- rren_uv_name[0] = 0;
- if (*rren_uv_n != -1) {
- strcpy(rren_uv_name, loopData->layers[*rren_uv_n + layer_index].name);
- }
-
- /* If active tangent not in tangent_names we take it into account */
- *rcalc_act = false;
- *rcalc_ren = false;
- for (int i = 0; i < tangent_names_count; i++) {
- if (tangent_names[i][0] == 0) {
- calc_active_tangent = true;
- }
- }
- if (calc_active_tangent) {
- *rcalc_act = true;
- *rcalc_ren = true;
- for (int i = 0; i < tangent_names_count; i++) {
- if (STREQ(ract_uv_name, tangent_names[i]))
- *rcalc_act = false;
- if (STREQ(rren_uv_name, tangent_names[i]))
- *rcalc_ren = false;
- }
- }
- *rtangent_mask = 0;
-
- const int uv_layer_num = CustomData_number_of_layers(loopData, CD_MLOOPUV);
- for (int n = 0; n < uv_layer_num; n++) {
- const char *name = CustomData_get_layer_name(loopData, CD_MLOOPUV, n);
- bool add = false;
- for (int i = 0; i < tangent_names_count; i++) {
- if (tangent_names[i][0] && STREQ(tangent_names[i], name)) {
- add = true;
- break;
- }
- }
- if ((*rcalc_act && ract_uv_name[0] && STREQ(ract_uv_name, name)) ||
- (*rcalc_ren && rren_uv_name[0] && STREQ(rren_uv_name, name)))
- {
- add = true;
- }
- if (add)
- *rtangent_mask |= 1 << n;
- }
-
- if (uv_layer_num == 0)
- *rtangent_mask |= DM_TANGENT_MASK_ORCO;
-}
-
void DM_calc_loop_tangents(
DerivedMesh *dm, bool calc_active_tangent,
- const char (*tangent_names)[MAX_NAME], int tangent_names_count)
-{
- int act_uv_n = -1;
- int ren_uv_n = -1;
- bool calc_act = false;
- bool calc_ren = false;
- char act_uv_name[MAX_NAME];
- char ren_uv_name[MAX_NAME];
- short tangent_mask = 0;
- DM_calc_loop_tangents_step_0(
- &dm->loopData, calc_active_tangent, tangent_names, tangent_names_count,
- &calc_act, &calc_ren, &act_uv_n, &ren_uv_n, act_uv_name, ren_uv_name, &tangent_mask);
- if ((dm->tangent_mask | tangent_mask) != dm->tangent_mask) {
- /* Check we have all the needed layers */
- MPoly *mpoly = dm->getPolyArray(dm);
- const MLoopTri *looptri = dm->getLoopTriArray(dm);
- int totface = dm->getNumLoopTri(dm);
- /* Allocate needed tangent layers */
- for (int i = 0; i < tangent_names_count; i++)
- if (tangent_names[i][0])
- DM_add_named_tangent_layer_for_uv(&dm->loopData, &dm->loopData, dm->numLoopData, tangent_names[i]);
- if ((tangent_mask & DM_TANGENT_MASK_ORCO) && CustomData_get_named_layer_index(&dm->loopData, CD_TANGENT, "") == -1)
- CustomData_add_layer_named(&dm->loopData, CD_TANGENT, CD_CALLOC, NULL, dm->numLoopData, "");
- if (calc_act && act_uv_name[0])
- DM_add_named_tangent_layer_for_uv(&dm->loopData, &dm->loopData, dm->numLoopData, act_uv_name);
- if (calc_ren && ren_uv_name[0])
- DM_add_named_tangent_layer_for_uv(&dm->loopData, &dm->loopData, dm->numLoopData, ren_uv_name);
-
-#ifdef USE_LOOPTRI_DETECT_QUADS
- int num_face_as_quad_map;
- int *face_as_quad_map = NULL;
-
- /* map faces to quads */
- if (totface != dm->getNumPolys(dm)) {
- /* over alloc, since we dont know how many ngon or quads we have */
-
- /* map fake face index to looptri */
- face_as_quad_map = MEM_malloc_arrayN(totface, sizeof(int), __func__);
- int k, j;
- for (k = 0, j = 0; j < totface; k++, j++) {
- face_as_quad_map[k] = j;
- /* step over all quads */
- if (mpoly[looptri[j].poly].totloop == 4) {
- j++; /* skips the nest looptri */
- }
- }
- num_face_as_quad_map = k;
- }
- else {
- num_face_as_quad_map = totface;
- }
-#endif
-
- /* Calculation */
- {
- TaskScheduler *scheduler = BLI_task_scheduler_get();
- TaskPool *task_pool;
- task_pool = BLI_task_pool_create(scheduler, NULL);
-
- dm->tangent_mask = 0;
- /* Calculate tangent layers */
- SGLSLMeshToTangent data_array[MAX_MTFACE];
- const int tangent_layer_num = CustomData_number_of_layers(&dm->loopData, CD_TANGENT);
- for (int n = 0; n < tangent_layer_num; n++) {
- int index = CustomData_get_layer_index_n(&dm->loopData, CD_TANGENT, n);
- BLI_assert(n < MAX_MTFACE);
- SGLSLMeshToTangent *mesh2tangent = &data_array[n];
- mesh2tangent->numTessFaces = totface;
-#ifdef USE_LOOPTRI_DETECT_QUADS
- mesh2tangent->face_as_quad_map = face_as_quad_map;
- mesh2tangent->num_face_as_quad_map = num_face_as_quad_map;
-#endif
- mesh2tangent->mvert = dm->getVertArray(dm);
- mesh2tangent->mpoly = dm->getPolyArray(dm);
- mesh2tangent->mloop = dm->getLoopArray(dm);
- mesh2tangent->looptri = dm->getLoopTriArray(dm);
- /* Note, we assume we do have tessellated loop normals at this point (in case it is object-enabled),
- * have to check this is valid...
- */
- mesh2tangent->precomputedLoopNormals = dm->getLoopDataArray(dm, CD_NORMAL);
- mesh2tangent->precomputedFaceNormals = CustomData_get_layer(&dm->polyData, CD_NORMAL);
-
- mesh2tangent->orco = NULL;
- mesh2tangent->mloopuv = CustomData_get_layer_named(&dm->loopData, CD_MLOOPUV, dm->loopData.layers[index].name);
-
- /* Fill the resulting tangent_mask */
- if (!mesh2tangent->mloopuv) {
- mesh2tangent->orco = dm->getVertDataArray(dm, CD_ORCO);
- if (!mesh2tangent->orco)
- continue;
-
- dm->tangent_mask |= DM_TANGENT_MASK_ORCO;
- }
- else {
- int uv_ind = CustomData_get_named_layer_index(&dm->loopData, CD_MLOOPUV, dm->loopData.layers[index].name);
- int uv_start = CustomData_get_layer_index(&dm->loopData, CD_MLOOPUV);
- BLI_assert(uv_ind != -1 && uv_start != -1);
- BLI_assert(uv_ind - uv_start < MAX_MTFACE);
- dm->tangent_mask |= 1 << (uv_ind - uv_start);
- }
-
- mesh2tangent->tangent = dm->loopData.layers[index].data;
- BLI_task_pool_push(task_pool, DM_calc_loop_tangents_thread, mesh2tangent, false, TASK_PRIORITY_LOW);
- }
-
- BLI_assert(dm->tangent_mask == tangent_mask);
- BLI_task_pool_work_and_wait(task_pool);
- BLI_task_pool_free(task_pool);
- }
-#ifdef USE_LOOPTRI_DETECT_QUADS
- if (face_as_quad_map) {
- MEM_freeN(face_as_quad_map);
- }
-#undef USE_LOOPTRI_DETECT_QUADS
-
-#endif
-
- /* Update active layer index */
- int act_uv_index = CustomData_get_layer_index_n(&dm->loopData, CD_MLOOPUV, act_uv_n);
- if (act_uv_index != -1) {
- int tan_index = CustomData_get_named_layer_index(&dm->loopData, CD_TANGENT, dm->loopData.layers[act_uv_index].name);
- CustomData_set_layer_active_index(&dm->loopData, CD_TANGENT, tan_index);
- } /* else tangent has been built from orco */
-
- /* Update render layer index */
- int ren_uv_index = CustomData_get_layer_index_n(&dm->loopData, CD_MLOOPUV, ren_uv_n);
- if (ren_uv_index != -1) {
- int tan_index = CustomData_get_named_layer_index(&dm->loopData, CD_TANGENT, dm->loopData.layers[ren_uv_index].name);
- CustomData_set_layer_render_index(&dm->loopData, CD_TANGENT, tan_index);
- } /* else tangent has been built from orco */
- }
+ const char (*tangent_names)[MAX_NAME], int tangent_names_len)
+{
+ BKE_mesh_calc_loop_tangent_ex(
+ dm->getVertArray(dm),
+ dm->getPolyArray(dm), dm->getNumPolys(dm),
+ dm->getLoopArray(dm),
+ dm->getLoopTriArray(dm), dm->getNumLoopTri(dm),
+ &dm->loopData,
+ calc_active_tangent,
+ tangent_names, tangent_names_len,
+ CustomData_get_layer(&dm->polyData, CD_NORMAL),
+ dm->getLoopDataArray(dm, CD_NORMAL),
+ dm->getVertDataArray(dm, CD_ORCO), /* may be NULL */
+ /* result */
+ &dm->loopData, dm->getNumLoops(dm),
+ &dm->tangent_mask);
}
-/** \} */
-
-
void DM_calc_auto_bump_scale(DerivedMesh *dm)
{
/* int totvert = dm->getNumVerts(dm); */ /* UNUSED */
@@ -3969,7 +3548,6 @@ BLI_INLINE void navmesh_intToCol(int i, float col[3])
static void navmesh_drawColored(DerivedMesh *dm)
{
- int a, glmode;
MVert *mvert = (MVert *)CustomData_get_layer(&dm->vertData, CD_MVERT);
MFace *mface = (MFace *)CustomData_get_layer(&dm->faceData, CD_MFACE);
int *polygonIdx = (int *)CustomData_get_layer(&dm->polyData, CD_RECAST);
@@ -3984,43 +3562,42 @@ static void navmesh_drawColored(DerivedMesh *dm)
dm->drawEdges(dm, 0, 1);
#endif
- /* if (GPU_buffer_legacy(dm) ) */ /* TODO - VBO draw code, not high priority - campbell */
- {
- DEBUG_VBO("Using legacy code. drawNavMeshColored\n");
- glBegin(glmode = GL_QUADS);
- for (a = 0; a < dm->numTessFaceData; a++, mface++) {
- int new_glmode = mface->v4 ? GL_QUADS : GL_TRIANGLES;
- int pi = polygonIdx[a];
- if (pi <= 0) {
- zero_v3(col);
- }
- else {
- navmesh_intToCol(pi, col);
- }
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
- if (new_glmode != glmode) {
- glEnd();
- glBegin(glmode = new_glmode);
- }
- glColor3fv(col);
- glVertex3fv(mvert[mface->v1].co);
- glVertex3fv(mvert[mface->v2].co);
- glVertex3fv(mvert[mface->v3].co);
- if (mface->v4) {
- glVertex3fv(mvert[mface->v4].co);
- }
+ immBindBuiltinProgram(GPU_SHADER_3D_FLAT_COLOR);
+
+ /* Note: batch drawing API would let us share vertices */
+ immBeginAtMost(GWN_PRIM_TRIS, dm->numTessFaceData * 6);
+ for (int a = 0; a < dm->numTessFaceData; a++, mface++) {
+ int pi = polygonIdx[a];
+ if (pi <= 0) {
+ zero_v3(col);
+ }
+ else {
+ navmesh_intToCol(pi, col);
}
- glEnd();
- }
-}
-static void navmesh_DM_drawFacesTex(
- DerivedMesh *dm,
- DMSetDrawOptionsTex UNUSED(setDrawOptions),
- DMCompareDrawOptions UNUSED(compareDrawOptions),
- void *UNUSED(userData), DMDrawFlag UNUSED(flag))
-{
- navmesh_drawColored(dm);
+ immSkipAttrib(color);
+ immVertex3fv(pos, mvert[mface->v1].co);
+ immSkipAttrib(color);
+ immVertex3fv(pos, mvert[mface->v2].co);
+ immAttrib3fv(color, col);
+ immVertex3fv(pos, mvert[mface->v3].co);
+
+ if (mface->v4) {
+ /* this tess face is a quad, so draw the other triangle */
+ immSkipAttrib(color);
+ immVertex3fv(pos, mvert[mface->v1].co);
+ immSkipAttrib(color);
+ immVertex3fv(pos, mvert[mface->v3].co);
+ immAttrib3fv(color, col);
+ immVertex3fv(pos, mvert[mface->v4].co);
+ }
+ }
+ immEnd();
+ immUnbindProgram();
}
static void navmesh_DM_drawFacesSolid(
@@ -4056,7 +3633,6 @@ static DerivedMesh *navmesh_dm_createNavMeshForVisualization(DerivedMesh *dm)
recastData = (int *)CustomData_get_layer(&result->polyData, CD_RECAST);
/* note: This is not good design! - really should not be doing this */
- result->drawFacesTex = navmesh_DM_drawFacesTex;
result->drawFacesSolid = navmesh_DM_drawFacesSolid;
diff --git a/source/blender/blenkernel/intern/action.c b/source/blender/blenkernel/intern/action.c
index 034248df8d5..acb2db8d7ad 100644
--- a/source/blender/blenkernel/intern/action.c
+++ b/source/blender/blenkernel/intern/action.c
@@ -55,7 +55,6 @@
#include "BKE_animsys.h"
#include "BKE_constraint.h"
#include "BKE_deform.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
#include "BKE_global.h"
#include "BKE_idprop.h"
@@ -65,6 +64,8 @@
#include "BKE_main.h"
#include "BKE_object.h"
+#include "DEG_depsgraph_build.h"
+
#include "BIK_api.h"
#include "RNA_access.h"
@@ -587,6 +588,8 @@ void BKE_pose_copy_data_ex(bPose **dst, const bPose *src, const int flag, const
if (pchan->prop) {
pchan->prop = IDP_CopyProperty_ex(pchan->prop, flag);
}
+
+ pchan->draw_data = NULL; /* Drawing cache, no need to copy. */
}
/* for now, duplicate Bone Groups too when doing this */
@@ -780,6 +783,9 @@ void BKE_pose_channel_free_ex(bPoseChannel *pchan, bool do_id_user)
IDP_FreeProperty(pchan->prop);
MEM_freeN(pchan->prop);
}
+
+ /* Cached data, for new draw manager rendering code. */
+ MEM_SAFE_FREE(pchan->draw_data);
}
void BKE_pose_channel_free(bPoseChannel *pchan)
@@ -1428,7 +1434,7 @@ void BKE_pose_tag_recalc(Main *bmain, bPose *pose)
/* Depsgraph components depends on actual pose state,
* if pose was changed depsgraph is to be updated as well.
*/
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
}
/* For the calculation of the effects of an Action at the given frame on an object
diff --git a/source/blender/blenkernel/intern/anim.c b/source/blender/blenkernel/intern/anim.c
index 2f65e71c6d2..62df97c6afa 100644
--- a/source/blender/blenkernel/intern/anim.c
+++ b/source/blender/blenkernel/intern/anim.c
@@ -43,8 +43,8 @@
#include "DNA_key_types.h"
#include "DNA_scene_types.h"
+#include "BKE_context.h"
#include "BKE_curve.h"
-#include "BKE_depsgraph.h"
#include "BKE_global.h"
#include "BKE_key.h"
#include "BKE_main.h"
@@ -54,6 +54,9 @@
#include "BKE_anim.h"
#include "BKE_report.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
// XXX bad level call...
/* --------------------- */
@@ -273,88 +276,23 @@ void animviz_get_object_motionpaths(Object *ob, ListBase *targets)
/* ........ */
-/* Note on evaluation optimizations:
- * Optimization's currently used here play tricks with the depsgraph in order to try and
- * evaluate as few objects as strictly necessary to get nicer performance under standard
- * production conditions. For those people who really need the accurate version,
- * disable the ifdef (i.e. 1 -> 0) and comment out the call to motionpaths_calc_optimise_depsgraph()
- */
-
-/* tweak the object ordering to trick depsgraph into making MotionPath calculations run faster */
-static void motionpaths_calc_optimise_depsgraph(Scene *scene, ListBase *targets)
-{
- Base *base, *baseNext;
- MPathTarget *mpt;
-
- /* make sure our temp-tag isn't already in use */
- for (base = scene->base.first; base; base = base->next)
- base->object->flag &= ~BA_TEMP_TAG;
-
- /* for each target, dump its object to the start of the list if it wasn't moved already */
- for (mpt = targets->first; mpt; mpt = mpt->next) {
- for (base = scene->base.first; base; base = baseNext) {
- baseNext = base->next;
-
- if ((base->object == mpt->ob) && !(mpt->ob->flag & BA_TEMP_TAG)) {
- BLI_remlink(&scene->base, base);
- BLI_addhead(&scene->base, base);
-
- mpt->ob->flag |= BA_TEMP_TAG;
-
- /* we really don't need to continue anymore once this happens, but this line might really 'break' */
- break;
- }
- }
- }
-
- /* "brew me a list that's sorted a bit faster now depsy" */
- DAG_scene_relations_rebuild(G.main, scene);
-}
-
/* update scene for current frame */
-static void motionpaths_calc_update_scene(Scene *scene)
+static void motionpaths_calc_update_scene(Main *bmain,
+ Scene *scene,
+ ViewLayer *view_layer,
+ struct Depsgraph *depsgraph)
{
-#if 1 // 'production' optimizations always on
- /* rigid body simulation needs complete update to work correctly for now */
- /* RB_TODO investigate if we could avoid updating everything */
- if (BKE_scene_check_rigidbody_active(scene)) {
- BKE_scene_update_for_newframe(G.main->eval_ctx, G.main, scene, scene->lay);
- }
- else { /* otherwise we can optimize by restricting updates */
- Base *base, *last = NULL;
-
- /* only stuff that moves or needs display still */
- DAG_scene_update_flags(G.main, scene, scene->lay, true, false);
-
- /* find the last object with the tag
- * - all those afterwards are assumed to not be relevant for our calculations
- */
- /* optimize further by moving out... */
- for (base = scene->base.first; base; base = base->next) {
- if (base->object->flag & BA_TEMP_TAG)
- last = base;
- }
-
- /* perform updates for tagged objects */
- /* XXX: this will break if rigs depend on scene or other data that
- * is animated but not attached to/updatable from objects */
- for (base = scene->base.first; base; base = base->next) {
- /* update this object */
- BKE_object_handle_update(G.main->eval_ctx, scene, base->object);
-
- /* if this is the last one we need to update, let's stop to save some time */
- if (base == last)
- break;
- }
- }
-#else // original, 'always correct' version
- /* do all updates
+ /* Do all updates
* - if this is too slow, resort to using a more efficient way
* that doesn't force complete update, but for now, this is the
* most accurate way!
+ *
+ * TODO(segey): Bring back partial updates, which became impossible
+ * with the new depsgraph due to unsorted nature of bases.
+ *
+ * TODO(sergey): Use evaluation context dedicated to motion paths.
*/
- BKE_scene_update_for_newframe(G.main->eval_ctx, G.main, scene, scene->lay); /* XXX this is the best way we can get anything moving */
-#endif
+ BKE_scene_graph_update_for_newframe(bmain->eval_ctx, depsgraph, bmain, scene, view_layer);
}
/* ........ */
@@ -404,7 +342,7 @@ static void motionpaths_calc_bake_targets(Scene *scene, ListBase *targets)
* - recalc: whether we need to
*/
/* TODO: include reports pointer? */
-void animviz_calc_motionpaths(Scene *scene, ListBase *targets)
+ void animviz_calc_motionpaths(EvaluationContext *eval_ctx, Main *bmain, Scene *scene, ListBase *targets)
{
MPathTarget *mpt;
int sfra, efra;
@@ -428,14 +366,10 @@ void animviz_calc_motionpaths(Scene *scene, ListBase *targets)
}
if (efra <= sfra) return;
- /* optimize the depsgraph for faster updates */
- /* TODO: whether this is used should depend on some setting for the level of optimizations used */
- motionpaths_calc_optimise_depsgraph(scene, targets);
-
/* calculate path over requested range */
for (CFRA = sfra; CFRA <= efra; CFRA++) {
/* update relevant data for new frame */
- motionpaths_calc_update_scene(scene);
+ motionpaths_calc_update_scene(bmain, scene, eval_ctx->view_layer, eval_ctx->depsgraph);
/* perform baking for targets */
motionpaths_calc_bake_targets(scene, targets);
@@ -443,7 +377,7 @@ void animviz_calc_motionpaths(Scene *scene, ListBase *targets)
/* reset original environment */
CFRA = cfra;
- motionpaths_calc_update_scene(scene);
+ motionpaths_calc_update_scene(bmain, scene, eval_ctx->view_layer, eval_ctx->depsgraph);
/* clear recalc flags from targets */
for (mpt = targets->first; mpt; mpt = mpt->next) {
diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c
index 9037122c4f8..844a2a50bb3 100644
--- a/source/blender/blenkernel/intern/anim_sys.c
+++ b/source/blender/blenkernel/intern/anim_sys.c
@@ -60,7 +60,6 @@
#include "BKE_animsys.h"
#include "BKE_action.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
#include "BKE_nla.h"
#include "BKE_global.h"
@@ -70,6 +69,8 @@
#include "BKE_report.h"
#include "BKE_texture.h"
+#include "DEG_depsgraph.h"
+
#include "RNA_access.h"
#include "nla_private.h"
@@ -95,6 +96,7 @@ bool id_type_can_have_animdata(const short id_type)
case ID_MA: case ID_TE: case ID_NT:
case ID_LA: case ID_CA: case ID_WO:
case ID_LS:
+ case ID_LP:
case ID_SPK:
case ID_SCE:
case ID_MC:
@@ -1563,12 +1565,6 @@ static bool animsys_write_rna_setting(PathResolvedRNA *anim_rna, const float val
/* caller must ensure this is animatable */
BLI_assert(RNA_property_animateable(ptr, prop) || ptr->id.data == NULL);
- /* set value for animatable numerical values only
- * HACK: some local F-Curves (e.g. those on NLA Strips) are evaluated
- * without an ID provided, which causes the animateable test to fail!
- */
- bool written = false;
-
switch (RNA_property_type(prop)) {
case PROP_BOOLEAN:
{
@@ -1576,13 +1572,11 @@ static bool animsys_write_rna_setting(PathResolvedRNA *anim_rna, const float val
if (array_index != -1) {
if (RNA_property_boolean_get_index(ptr, prop, array_index) != value_coerce) {
RNA_property_boolean_set_index(ptr, prop, array_index, value_coerce);
- written = true;
}
}
else {
if (RNA_property_boolean_get(ptr, prop) != value_coerce) {
RNA_property_boolean_set(ptr, prop, value_coerce);
- written = true;
}
}
break;
@@ -1594,13 +1588,11 @@ static bool animsys_write_rna_setting(PathResolvedRNA *anim_rna, const float val
if (array_index != -1) {
if (RNA_property_int_get_index(ptr, prop, array_index) != value_coerce) {
RNA_property_int_set_index(ptr, prop, array_index, value_coerce);
- written = true;
}
}
else {
if (RNA_property_int_get(ptr, prop) != value_coerce) {
RNA_property_int_set(ptr, prop, value_coerce);
- written = true;
}
}
break;
@@ -1612,13 +1604,11 @@ static bool animsys_write_rna_setting(PathResolvedRNA *anim_rna, const float val
if (array_index != -1) {
if (RNA_property_float_get_index(ptr, prop, array_index) != value_coerce) {
RNA_property_float_set_index(ptr, prop, array_index, value_coerce);
- written = true;
}
}
else {
if (RNA_property_float_get(ptr, prop) != value_coerce) {
RNA_property_float_set(ptr, prop, value_coerce);
- written = true;
}
}
break;
@@ -1628,7 +1618,6 @@ static bool animsys_write_rna_setting(PathResolvedRNA *anim_rna, const float val
const int value_coerce = (int)value;
if (RNA_property_enum_get(ptr, prop) != value_coerce) {
RNA_property_enum_set(ptr, prop, value_coerce);
- written = true;
}
break;
}
@@ -1657,23 +1646,6 @@ static bool animsys_write_rna_setting(PathResolvedRNA *anim_rna, const float val
}
#endif
- /* as long as we don't do property update, we still tag datablock
- * as having been updated. this flag does not cause any updates to
- * be run, it's for e.g. render engines to synchronize data */
- if (written && ptr->id.data) {
- ID *id = ptr->id.data;
-
- /* for cases like duplifarmes it's only a temporary so don't
- * notify anyone of updates */
- if (!(id->recalc & ID_RECALC_SKIP_ANIM_TAG)) {
- /* NOTE: This is a bit annoying to use atomic API here, but this
- * code is at it's EOL and removed already in 2.8 branch.
- */
- atomic_fetch_and_or_int32(&id->recalc, ID_RECALC);
- DAG_id_type_tag(G.main, GS(id->name));
- }
- }
-
/* successful */
return true;
}
@@ -2617,17 +2589,6 @@ static void animsys_evaluate_nla(ListBase *echannels, PointerRNA *ptr, AnimData
/* 3. free temporary evaluation data that's not used elsewhere */
BLI_freelistN(&estrips);
-
- /* Tag ID as updated so render engines will recognize changes in data
- * which is animated but doesn't have actions.
- */
- if (ptr->id.data != NULL) {
- ID *id = ptr->id.data;
- if (!(id->recalc & ID_RECALC_SKIP_ANIM_TAG)) {
- id->recalc |= ID_RECALC;
- DAG_id_type_tag(G.main, GS(id->name));
- }
- }
}
/* NLA Evaluation function (mostly for use through do_animdata)
@@ -2920,7 +2881,7 @@ void BKE_animsys_evaluate_all_animation(Main *main, Scene *scene, float ctime)
#define DEBUG_PRINT if (G.debug & G_DEBUG_DEPSGRAPH) printf
-void BKE_animsys_eval_animdata(EvaluationContext *eval_ctx, ID *id)
+void BKE_animsys_eval_animdata(const EvaluationContext *eval_ctx, ID *id)
{
AnimData *adt = BKE_animdata_from_id(id);
Scene *scene = NULL; /* XXX: this is only needed for flushing RNA updates,
@@ -2930,7 +2891,7 @@ void BKE_animsys_eval_animdata(EvaluationContext *eval_ctx, ID *id)
BKE_animsys_evaluate_animdata(scene, id, adt, eval_ctx->ctime, ADT_RECALC_ANIM);
}
-void BKE_animsys_eval_driver(EvaluationContext *eval_ctx,
+void BKE_animsys_eval_driver(const EvaluationContext *eval_ctx,
ID *id,
FCurve *fcu)
{
diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c
index 2edbd088334..953fef067b4 100644
--- a/source/blender/blenkernel/intern/armature.c
+++ b/source/blender/blenkernel/intern/armature.c
@@ -60,7 +60,6 @@
#include "BKE_anim.h"
#include "BKE_constraint.h"
#include "BKE_curve.h"
-#include "BKE_depsgraph.h"
#include "BKE_DerivedMesh.h"
#include "BKE_deform.h"
#include "BKE_displist.h"
@@ -1464,13 +1463,13 @@ void BKE_armature_loc_pose_to_bone(bPoseChannel *pchan, const float inloc[3], fl
copy_v3_v3(outloc, nLocMat[3]);
}
-void BKE_armature_mat_pose_to_bone_ex(Object *ob, bPoseChannel *pchan, float inmat[4][4], float outmat[4][4])
+void BKE_armature_mat_pose_to_bone_ex(const struct EvaluationContext *eval_ctx, Object *ob, bPoseChannel *pchan, float inmat[4][4], float outmat[4][4])
{
bPoseChannel work_pchan = *pchan;
/* recalculate pose matrix with only parent transformations,
* bone loc/sca/rot is ignored, scene and frame are not used. */
- BKE_pose_where_is_bone(NULL, ob, &work_pchan, 0.0f, false);
+ BKE_pose_where_is_bone(eval_ctx, NULL, ob, &work_pchan, 0.0f, false);
/* find the matrix, need to remove the bone transforms first so this is
* calculated as a matrix to set rather then a difference ontop of whats
@@ -1953,7 +1952,7 @@ void BKE_pose_clear_pointers(bPose *pose)
/* only after leave editmode, duplicating, validating older files, library syncing */
/* NOTE: pose->flag is set for it */
-void BKE_pose_rebuild_ex(Object *ob, bArmature *arm, const bool sort_bones)
+void BKE_pose_rebuild(Object *ob, bArmature *arm)
{
Bone *bone;
bPose *pose;
@@ -1997,27 +1996,12 @@ void BKE_pose_rebuild_ex(Object *ob, bArmature *arm, const bool sort_bones)
BKE_pose_update_constraint_flags(ob->pose); /* for IK detection for example */
-#ifdef WITH_LEGACY_DEPSGRAPH
- /* the sorting */
- /* Sorting for new dependnecy graph is done on the scene graph level. */
- if (counter > 1 && sort_bones) {
- DAG_pose_sort(ob);
- }
-#else
- UNUSED_VARS(sort_bones);
-#endif
-
ob->pose->flag &= ~POSE_RECALC;
ob->pose->flag |= POSE_WAS_REBUILT;
BKE_pose_channels_hash_make(ob->pose);
}
-void BKE_pose_rebuild(Object *ob, bArmature *arm)
-{
- BKE_pose_rebuild_ex(ob, arm, true);
-}
-
/* ********************** THE POSE SOLVER ******************* */
/* loc/rot/size to given mat4 */
@@ -2128,7 +2112,7 @@ static void do_strip_modifiers(Scene *scene, Object *armob, Bone *bone, bPoseCha
if (STREQ(pchan->name, amod->channel)) {
float mat4[4][4], mat3[3][3];
- curve_deform_vector(scene, amod->ob, armob, bone->arm_mat[3], pchan->pose_mat[3], mat3, amod->no_rot_axis);
+ curve_deform_vector(amod->ob, armob, bone->arm_mat[3], pchan->pose_mat[3], mat3, amod->no_rot_axis);
copy_m4_m4(mat4, pchan->pose_mat);
mul_m4_m3m4(pchan->pose_mat, mat3, mat4);
@@ -2212,7 +2196,9 @@ void BKE_pose_where_is_bone_tail(bPoseChannel *pchan)
/* pchan is validated, as having bone and parent pointer
* 'do_extra': when zero skips loc/size/rot, constraints and strip modifiers.
*/
-void BKE_pose_where_is_bone(Scene *scene, Object *ob, bPoseChannel *pchan, float ctime, bool do_extra)
+void BKE_pose_where_is_bone(
+ const struct EvaluationContext *eval_ctx, Scene *scene,
+ Object *ob, bPoseChannel *pchan, float ctime, bool do_extra)
{
/* This gives a chan_mat with actions (ipos) results. */
if (do_extra)
@@ -2251,7 +2237,7 @@ void BKE_pose_where_is_bone(Scene *scene, Object *ob, bPoseChannel *pchan, float
cob = BKE_constraints_make_evalob(scene, ob, pchan, CONSTRAINT_OBTYPE_BONE);
/* Solve PoseChannel's Constraints */
- BKE_constraints_solve(&pchan->constraints, cob, ctime); /* ctime doesnt alter objects */
+ BKE_constraints_solve(eval_ctx, &pchan->constraints, cob, ctime); /* ctime doesnt alter objects */
/* cleanup after Constraint Solving
* - applies matrix back to pchan, and frees temporary struct used
@@ -2273,7 +2259,7 @@ void BKE_pose_where_is_bone(Scene *scene, Object *ob, bPoseChannel *pchan, float
/* This only reads anim data from channels, and writes to channels */
/* This is the only function adding poses */
-void BKE_pose_where_is(Scene *scene, Object *ob)
+void BKE_pose_where_is(const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob)
{
bArmature *arm;
Bone *bone;
@@ -2312,7 +2298,7 @@ void BKE_pose_where_is(Scene *scene, Object *ob)
}
/* 2a. construct the IK tree (standard IK) */
- BIK_initialize_tree(scene, ob, ctime);
+ BIK_initialize_tree(eval_ctx, scene, ob, ctime);
/* 2b. construct the Spline IK trees
* - this is not integrated as an IK plugin, since it should be able
@@ -2324,15 +2310,15 @@ void BKE_pose_where_is(Scene *scene, Object *ob)
for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) {
/* 4a. if we find an IK root, we handle it separated */
if (pchan->flag & POSE_IKTREE) {
- BIK_execute_tree(scene, ob, pchan, ctime);
+ BIK_execute_tree(eval_ctx, scene, ob, pchan, ctime);
}
/* 4b. if we find a Spline IK root, we handle it separated too */
else if (pchan->flag & POSE_IKSPLINE) {
- BKE_splineik_execute_tree(scene, ob, pchan, ctime);
+ BKE_splineik_execute_tree(eval_ctx, scene, ob, pchan, ctime);
}
/* 5. otherwise just call the normal solver */
else if (!(pchan->flag & POSE_DONE)) {
- BKE_pose_where_is_bone(scene, ob, pchan, ctime, 1);
+ BKE_pose_where_is_bone(eval_ctx, scene, ob, pchan, ctime, 1);
}
}
/* 6. release the IK tree */
diff --git a/source/blender/blenkernel/intern/armature_update.c b/source/blender/blenkernel/intern/armature_update.c
index cc1bd9716b1..de0dfe2530d 100644
--- a/source/blender/blenkernel/intern/armature_update.c
+++ b/source/blender/blenkernel/intern/armature_update.c
@@ -41,7 +41,6 @@
#include "BKE_anim.h"
#include "BKE_armature.h"
#include "BKE_curve.h"
-#include "BKE_depsgraph.h"
#include "BKE_displist.h"
#include "BKE_fcurve.h"
#include "BKE_scene.h"
@@ -51,13 +50,7 @@
#include "BKE_global.h"
#include "BKE_main.h"
-#include "DEG_depsgraph.h"
-
-#ifdef WITH_LEGACY_DEPSGRAPH
-# define DEBUG_PRINT if (!DEG_depsgraph_use_legacy() && G.debug & G_DEBUG_DEPSGRAPH) printf
-#else
-# define DEBUG_PRINT if (G.debug & G_DEBUG_DEPSGRAPH) printf
-#endif
+#define DEBUG_PRINT if (G.debug & G_DEBUG_DEPSGRAPH) printf
/* ********************** SPLINE IK SOLVER ******************* */
@@ -120,9 +113,11 @@ static void splineik_init_tree_from_pchan(Scene *scene, Object *UNUSED(ob), bPos
* currently for paths to work it needs to go through the bevlist/displist system (ton)
*/
+ /* TODO: Make sure this doesn't crash. */
+#if 0
/* only happens on reload file, but violates depsgraph still... fix! */
if (ELEM(NULL, ikData->tar->curve_cache, ikData->tar->curve_cache->path, ikData->tar->curve_cache->path->data)) {
- BKE_displist_make_curveTypes(scene, ikData->tar, 0);
+ BKE_displist_make_curveTypes(eval_ctx, scene, ikData->tar, 0);
/* path building may fail in EditMode after removing verts [#33268]*/
if (ELEM(NULL, ikData->tar->curve_cache->path, ikData->tar->curve_cache->path->data)) {
@@ -130,6 +125,9 @@ static void splineik_init_tree_from_pchan(Scene *scene, Object *UNUSED(ob), bPos
return;
}
}
+#else
+ (void) scene;
+#endif
}
/* find the root bone and the chain of bones from the root to the tip
@@ -268,15 +266,16 @@ static void splineik_init_tree(Scene *scene, Object *ob, float UNUSED(ctime))
/* ----------- */
/* Evaluate spline IK for a given bone */
-static void splineik_evaluate_bone(tSplineIK_Tree *tree, Scene *scene, Object *ob, bPoseChannel *pchan,
- int index, float ctime)
+static void splineik_evaluate_bone(
+ const struct EvaluationContext *eval_ctx, tSplineIK_Tree *tree, Scene *scene, Object *ob, bPoseChannel *pchan,
+ int index, float ctime)
{
bSplineIKConstraint *ikData = tree->ikData;
float poseHead[3], poseTail[3], poseMat[4][4];
float splineVec[3], scaleFac, radius = 1.0f;
/* firstly, calculate the bone matrix the standard way, since this is needed for roll control */
- BKE_pose_where_is_bone(scene, ob, pchan, ctime, 1);
+ BKE_pose_where_is_bone(eval_ctx, scene, ob, pchan, ctime, 1);
copy_v3_v3(poseHead, pchan->pose_head);
copy_v3_v3(poseTail, pchan->pose_tail);
@@ -518,7 +517,7 @@ static void splineik_evaluate_bone(tSplineIK_Tree *tree, Scene *scene, Object *o
}
/* Evaluate the chain starting from the nominated bone */
-static void splineik_execute_tree(Scene *scene, Object *ob, bPoseChannel *pchan_root, float ctime)
+static void splineik_execute_tree(const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, bPoseChannel *pchan_root, float ctime)
{
tSplineIK_Tree *tree;
@@ -532,7 +531,7 @@ static void splineik_execute_tree(Scene *scene, Object *ob, bPoseChannel *pchan_
*/
for (i = tree->chainlen - 1; i >= 0; i--) {
bPoseChannel *pchan = tree->chain[i];
- splineik_evaluate_bone(tree, scene, ob, pchan, i, ctime);
+ splineik_evaluate_bone(eval_ctx, tree, scene, ob, pchan, i, ctime);
}
/* free the tree info specific to SplineIK trees now */
@@ -551,14 +550,16 @@ void BKE_pose_splineik_init_tree(Scene *scene, Object *ob, float ctime)
splineik_init_tree(scene, ob, ctime);
}
-void BKE_splineik_execute_tree(Scene *scene, Object *ob, bPoseChannel *pchan_root, float ctime)
+void BKE_splineik_execute_tree(
+ const struct EvaluationContext *eval_ctx, Scene *scene,
+ Object *ob, bPoseChannel *pchan_root, float ctime)
{
- splineik_execute_tree(scene, ob, pchan_root, ctime);
+ splineik_execute_tree(eval_ctx, scene, ob, pchan_root, ctime);
}
/* *************** Depsgraph evaluation callbacks ************ */
-void BKE_pose_eval_init(EvaluationContext *UNUSED(eval_ctx),
+void BKE_pose_eval_init(const struct EvaluationContext *UNUSED(eval_ctx),
Scene *UNUSED(scene),
Object *ob,
bPose *pose)
@@ -582,7 +583,7 @@ void BKE_pose_eval_init(EvaluationContext *UNUSED(eval_ctx),
}
}
-void BKE_pose_eval_init_ik(EvaluationContext *UNUSED(eval_ctx),
+void BKE_pose_eval_init_ik(const struct EvaluationContext *eval_ctx,
Scene *scene,
Object *ob,
bPose *UNUSED(pose))
@@ -595,7 +596,7 @@ void BKE_pose_eval_init_ik(EvaluationContext *UNUSED(eval_ctx),
return;
}
/* 2a. construct the IK tree (standard IK) */
- BIK_initialize_tree(scene, ob, ctime);
+ BIK_initialize_tree(eval_ctx, scene, ob, ctime);
/* 2b. construct the Spline IK trees
* - this is not integrated as an IK plugin, since it should be able
* to function in conjunction with standard IK
@@ -603,7 +604,7 @@ void BKE_pose_eval_init_ik(EvaluationContext *UNUSED(eval_ctx),
BKE_pose_splineik_init_tree(scene, ob, ctime);
}
-void BKE_pose_eval_bone(EvaluationContext *UNUSED(eval_ctx),
+void BKE_pose_eval_bone(const struct EvaluationContext *eval_ctx,
Scene *scene,
Object *ob,
bPoseChannel *pchan)
@@ -631,14 +632,14 @@ void BKE_pose_eval_bone(EvaluationContext *UNUSED(eval_ctx),
if ((pchan->flag & POSE_DONE) == 0) {
/* TODO(sergey): Use time source node for time. */
float ctime = BKE_scene_frame_get(scene); /* not accurate... */
- BKE_pose_where_is_bone(scene, ob, pchan, ctime, 1);
+ BKE_pose_where_is_bone(eval_ctx, scene, ob, pchan, ctime, 1);
}
}
}
}
}
-void BKE_pose_constraints_evaluate(EvaluationContext *UNUSED(eval_ctx),
+void BKE_pose_constraints_evaluate(const struct EvaluationContext *eval_ctx,
Scene *scene,
Object *ob,
bPoseChannel *pchan)
@@ -654,12 +655,12 @@ void BKE_pose_constraints_evaluate(EvaluationContext *UNUSED(eval_ctx),
else {
if ((pchan->flag & POSE_DONE) == 0) {
float ctime = BKE_scene_frame_get(scene); /* not accurate... */
- BKE_pose_where_is_bone(scene, ob, pchan, ctime, 1);
+ BKE_pose_where_is_bone(eval_ctx, scene, ob, pchan, ctime, 1);
}
}
}
-void BKE_pose_bone_done(EvaluationContext *UNUSED(eval_ctx),
+void BKE_pose_bone_done(const struct EvaluationContext *UNUSED(eval_ctx),
bPoseChannel *pchan)
{
float imat[4][4];
@@ -670,7 +671,7 @@ void BKE_pose_bone_done(EvaluationContext *UNUSED(eval_ctx),
}
}
-void BKE_pose_iktree_evaluate(EvaluationContext *UNUSED(eval_ctx),
+void BKE_pose_iktree_evaluate(const struct EvaluationContext *eval_ctx,
Scene *scene,
Object *ob,
bPoseChannel *rootchan)
@@ -682,10 +683,10 @@ void BKE_pose_iktree_evaluate(EvaluationContext *UNUSED(eval_ctx),
if (arm->flag & ARM_RESTPOS) {
return;
}
- BIK_execute_tree(scene, ob, rootchan, ctime);
+ BIK_execute_tree(eval_ctx, scene, ob, rootchan, ctime);
}
-void BKE_pose_splineik_evaluate(EvaluationContext *UNUSED(eval_ctx),
+void BKE_pose_splineik_evaluate(const struct EvaluationContext *eval_ctx,
Scene *scene,
Object *ob,
bPoseChannel *rootchan)
@@ -697,10 +698,10 @@ void BKE_pose_splineik_evaluate(EvaluationContext *UNUSED(eval_ctx),
if (arm->flag & ARM_RESTPOS) {
return;
}
- BKE_splineik_execute_tree(scene, ob, rootchan, ctime);
+ BKE_splineik_execute_tree(eval_ctx, scene, ob, rootchan, ctime);
}
-void BKE_pose_eval_flush(EvaluationContext *UNUSED(eval_ctx),
+void BKE_pose_eval_flush(const struct EvaluationContext *UNUSED(eval_ctx),
Scene *scene,
Object *ob,
bPose *UNUSED(pose))
@@ -711,11 +712,9 @@ void BKE_pose_eval_flush(EvaluationContext *UNUSED(eval_ctx),
/* 6. release the IK tree */
BIK_release_tree(scene, ob, ctime);
-
- ob->recalc &= ~OB_RECALC_ALL;
}
-void BKE_pose_eval_proxy_copy(EvaluationContext *UNUSED(eval_ctx), Object *ob)
+void BKE_pose_eval_proxy_copy(const struct EvaluationContext *UNUSED(eval_ctx), Object *ob)
{
BLI_assert(ID_IS_LINKED(ob) && ob->proxy_from != NULL);
DEBUG_PRINT("%s on %s\n", __func__, ob->id.name);
@@ -723,8 +722,4 @@ void BKE_pose_eval_proxy_copy(EvaluationContext *UNUSED(eval_ctx), Object *ob)
printf("Proxy copy error, lib Object: %s proxy Object: %s\n",
ob->id.name + 2, ob->proxy_from->id.name + 2);
}
- /* Rest of operations are NO-OP in depsgraph, so can clear
- * flag now.
- */
- ob->recalc &= ~OB_RECALC_ALL;
}
diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c
index e8a3387c153..182b88c1c57 100644
--- a/source/blender/blenkernel/intern/blender.c
+++ b/source/blender/blenkernel/intern/blender.c
@@ -51,10 +51,10 @@
#include "BKE_brush.h"
#include "BKE_cachefile.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_global.h"
#include "BKE_idprop.h"
#include "BKE_image.h"
+#include "BKE_layer.h"
#include "BKE_library.h"
#include "BKE_node.h"
#include "BKE_report.h"
@@ -62,6 +62,8 @@
#include "BKE_screen.h"
#include "BKE_sequencer.h"
+#include "DEG_depsgraph.h"
+
#include "RE_pipeline.h"
#include "RE_render_ext.h"
@@ -87,7 +89,7 @@ void BKE_blender_free(void)
IMB_exit();
BKE_cachefiles_exit();
BKE_images_exit();
- DAG_exit();
+ DEG_free_node_types();
BKE_brush_system_exit();
RE_texture_rng_exit();
@@ -96,6 +98,8 @@ void BKE_blender_free(void)
BKE_sequencer_cache_destruct();
IMB_moviecache_destruct();
+
+ BKE_layer_exit();
free_nodesystem();
}
@@ -280,11 +284,13 @@ void BKE_blender_userdef_app_template_data_swap(UserDef *userdef_a, UserDef *use
DATA_SWAP(font_path_ui_mono);
DATA_SWAP(keyconfigstr);
+ DATA_SWAP(manipulator_flag);
DATA_SWAP(app_flag);
/* We could add others. */
FLAG_SWAP(uiflag, int, USER_QUIT_PROMPT);
+#undef SWAP_TYPELESS
#undef DATA_SWAP
#undef LIST_SWAP
#undef FLAG_SWAP
diff --git a/source/blender/blenkernel/intern/blender_copybuffer.c b/source/blender/blenkernel/intern/blender_copybuffer.c
index e57524af546..b0c571bf159 100644
--- a/source/blender/blenkernel/intern/blender_copybuffer.c
+++ b/source/blender/blenkernel/intern/blender_copybuffer.c
@@ -44,12 +44,15 @@
#include "BKE_blender_copybuffer.h" /* own include */
#include "BKE_blendfile.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_global.h"
+#include "BKE_layer.h"
#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_scene.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#include "BLO_readfile.h"
#include "BLO_writefile.h"
@@ -117,7 +120,7 @@ bool BKE_copybuffer_paste(bContext *C, const char *libname, const short flag, Re
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
- View3D *v3d = CTX_wm_view3d(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Main *mainl = NULL;
Library *lib;
BlendHandle *bh;
@@ -129,7 +132,7 @@ bool BKE_copybuffer_paste(bContext *C, const char *libname, const short flag, Re
return false;
}
- BKE_scene_base_deselect_all(scene);
+ BKE_view_layer_base_deselect_all(view_layer);
/* tag everything, all untagged data can be made local
* its also generally useful to know what is new
@@ -142,7 +145,7 @@ bool BKE_copybuffer_paste(bContext *C, const char *libname, const short flag, Re
BLO_library_link_copypaste(mainl, bh);
- BLO_library_link_end(mainl, &bh, flag, scene, v3d);
+ BLO_library_link_end(mainl, &bh, flag, scene, view_layer);
/* mark all library linked objects to be updated */
BKE_main_lib_objects_recalc_all(bmain);
@@ -157,7 +160,11 @@ bool BKE_copybuffer_paste(bContext *C, const char *libname, const short flag, Re
BKE_main_id_tag_all(bmain, LIB_TAG_PRE_EXISTING, false);
/* recreate dependency graph to include new objects */
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
+
+ /* Tag update the scene to flush base collection settings, since the new object is added to a
+ * new (active) collection, not its original collection, thus need recalculation. */
+ DEG_id_tag_update(&scene->id, 0);
BLO_blendhandle_close(bh);
/* remove library... */
diff --git a/source/blender/blenkernel/intern/blender_undo.c b/source/blender/blenkernel/intern/blender_undo.c
index e3a5edb2049..b8f46756445 100644
--- a/source/blender/blenkernel/intern/blender_undo.c
+++ b/source/blender/blenkernel/intern/blender_undo.c
@@ -56,7 +56,6 @@
#include "BKE_appdir.h"
#include "BKE_brush.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_global.h"
#include "BKE_image.h"
#include "BKE_main.h"
@@ -66,6 +65,8 @@
#include "BLO_readfile.h"
#include "BLO_writefile.h"
+#include "DEG_depsgraph.h"
+
/* -------------------------------------------------------------------- */
/** \name Global Undo
@@ -118,7 +119,7 @@ static int read_undosave(bContext *C, UndoElem *uel)
if (success) {
/* important not to update time here, else non keyed tranforms are lost */
- DAG_on_visible_update(G.main, false);
+ DEG_on_visible_update(G.main, false);
}
return success;
diff --git a/source/blender/blenkernel/intern/blendfile.c b/source/blender/blenkernel/intern/blendfile.c
index cc992a4a520..8d61b6723c6 100644
--- a/source/blender/blenkernel/intern/blendfile.c
+++ b/source/blender/blenkernel/intern/blendfile.c
@@ -32,6 +32,7 @@
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
+#include "DNA_workspace_types.h"
#include "BLI_listbase.h"
#include "BLI_string.h"
@@ -48,11 +49,13 @@
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_ipo.h"
+#include "BKE_layer.h"
#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_report.h"
#include "BKE_scene.h"
#include "BKE_screen.h"
+#include "BKE_workspace.h"
#include "BLO_readfile.h"
#include "BLO_writefile.h"
@@ -93,7 +96,7 @@ static bool wm_scene_is_visible(wmWindowManager *wm, Scene *scene)
{
wmWindow *win;
for (win = wm->windows.first; win; win = win->next) {
- if (win->screen->scene == scene) {
+ if (win->scene == scene) {
return true;
}
}
@@ -163,17 +166,22 @@ static void setup_app_data(
* (otherwise we'd be undoing on an off-screen scene which isn't acceptable).
* see: T43424
*/
+ wmWindow *win;
bScreen *curscreen = NULL;
+ ViewLayer *cur_view_layer;
bool track_undo_scene;
/* comes from readfile.c */
SWAP(ListBase, G.main->wm, bfd->main->wm);
+ SWAP(ListBase, G.main->workspaces, bfd->main->workspaces);
SWAP(ListBase, G.main->screen, bfd->main->screen);
- /* we re-use current screen */
+ /* we re-use current window and screen */
+ win = CTX_wm_window(C);
curscreen = CTX_wm_screen(C);
- /* but use new Scene pointer */
+ /* but use Scene pointer from new file */
curscene = bfd->curscene;
+ cur_view_layer = bfd->cur_view_layer;
track_undo_scene = (mode == LOAD_UNDO && curscreen && curscene && bfd->main->wm.first);
@@ -184,34 +192,41 @@ static void setup_app_data(
if (curscene == NULL) {
curscene = BKE_scene_add(bfd->main, "Empty");
}
+ if (cur_view_layer == NULL) {
+ /* fallback to scene layer */
+ cur_view_layer = BKE_view_layer_from_scene_get(curscene);
+ }
if (track_undo_scene) {
/* keep the old (free'd) scene, let 'blo_lib_link_screen_restore'
* replace it with 'curscene' if its needed */
}
- else {
- /* and we enforce curscene to be in current screen */
- if (curscreen) {
- /* can run in bgmode */
- curscreen->scene = curscene;
- }
+ /* and we enforce curscene to be in current screen */
+ else if (win) { /* can run in bgmode */
+ win->scene = curscene;
}
/* BKE_blender_globals_clear will free G.main, here we can still restore pointers */
- blo_lib_link_screen_restore(bfd->main, curscreen, curscene);
- /* curscreen might not be set when loading without ui (see T44217) so only re-assign if available */
- if (curscreen) {
- curscene = curscreen->scene;
+ blo_lib_link_restore(bfd->main, CTX_wm_manager(C), curscene, cur_view_layer);
+ if (win) {
+ curscene = win->scene;
}
if (track_undo_scene) {
wmWindowManager *wm = bfd->main->wm.first;
if (wm_scene_is_visible(wm, bfd->curscene) == false) {
curscene = bfd->curscene;
- curscreen->scene = curscene;
- BKE_screen_view3d_scene_sync(curscreen);
+ win->scene = curscene;
+ BKE_screen_view3d_scene_sync(curscreen, curscene);
}
}
+
+ /* We need to tag this here because events may be handled immediately after.
+ * only the current screen is important because we wont have to handle
+ * events from multiple screens at once.*/
+ {
+ BKE_screen_manipulator_tag_refresh(curscreen);
+ }
}
/* free G.main Main database */
@@ -226,6 +241,7 @@ static void setup_app_data(
CTX_data_main_set(C, G.main);
if (bfd->user) {
+
/* only here free userdef themes... */
BKE_blender_userdef_data_set_and_free(bfd->user);
bfd->user = NULL;
@@ -261,12 +277,14 @@ static void setup_app_data(
/* this can happen when active scene was lib-linked, and doesn't exist anymore */
if (CTX_data_scene(C) == NULL) {
+ wmWindow *win = CTX_wm_window(C);
+
/* in case we don't even have a local scene, add one */
if (!G.main->scene.first)
BKE_scene_add(G.main, "Empty");
CTX_data_scene_set(C, G.main->scene.first);
- CTX_wm_screen(C)->scene = CTX_data_scene(C);
+ win->scene = CTX_data_scene(C);
curscene = CTX_data_scene(C);
}
@@ -315,20 +333,27 @@ static void setup_app_data(
wmWindowManager *wm = G.main->wm.first;
if (wm) {
- wmWindow *win;
-
- for (win = wm->windows.first; win; win = win->next) {
- if (win->screen && win->screen->scene) /* zealous check... */
- if (win->screen->scene != curscene)
- BKE_scene_set_background(G.main, win->screen->scene);
+ for (wmWindow *win = wm->windows.first; win; win = win->next) {
+ if (win->scene && win->scene != curscene) {
+ BKE_scene_set_background(G.main, win->scene);
+ }
}
}
}
+
+ /* Setting scene might require having a dependency graph, with copy on write
+ * we need to make sure we ensure scene has correct color management before
+ * constructing dependency graph.
+ */
+ if (mode != LOAD_UNDO) {
+ IMB_colormanagement_check_file_config(G.main);
+ }
+
BKE_scene_set_background(G.main, curscene);
if (mode != LOAD_UNDO) {
+ /* TODO(sergey): Can this be also move above? */
RE_FreeAllPersistentData();
- IMB_colormanagement_check_file_config(G.main);
}
MEM_freeN(bfd);
@@ -534,6 +559,48 @@ bool BKE_blendfile_userdef_write_app_template(const char *filepath, ReportList *
return ok;
}
+WorkspaceConfigFileData *BKE_blendfile_workspace_config_read(const char *filepath, ReportList *reports)
+{
+ BlendFileData *bfd;
+ WorkspaceConfigFileData *workspace_config = NULL;
+
+ bfd = BLO_read_from_file(filepath, reports, BLO_READ_SKIP_USERDEF);
+ if (bfd) {
+ workspace_config = MEM_mallocN(sizeof(*workspace_config), __func__);
+ workspace_config->main = bfd->main;
+ workspace_config->workspaces = bfd->main->workspaces;
+
+ MEM_freeN(bfd);
+ }
+
+ return workspace_config;
+}
+
+bool BKE_blendfile_workspace_config_write(Main *bmain, const char *filepath, ReportList *reports)
+{
+ int fileflags = G.fileflags & ~(G_FILE_NO_UI | G_FILE_AUTOPLAY | G_FILE_HISTORY);
+ bool retval = false;
+
+ BKE_blendfile_write_partial_begin(bmain);
+
+ for (WorkSpace *workspace = bmain->workspaces.first; workspace; workspace = workspace->id.next) {
+ BKE_blendfile_write_partial_tag_ID(&workspace->id, true);
+ }
+
+ if (BKE_blendfile_write_partial(bmain, filepath, fileflags, reports)) {
+ retval = true;
+ }
+
+ BKE_blendfile_write_partial_end(bmain);
+
+ return retval;
+}
+
+void BKE_blendfile_workspace_config_data_free(WorkspaceConfigFileData *workspace_config)
+{
+ BKE_main_free(workspace_config->main);
+ MEM_freeN(workspace_config);
+}
/** \} */
diff --git a/source/blender/blenkernel/intern/boids.c b/source/blender/blenkernel/intern/boids.c
index a2a242e7519..f440ce711ff 100644
--- a/source/blender/blenkernel/intern/boids.c
+++ b/source/blender/blenkernel/intern/boids.c
@@ -132,6 +132,7 @@ static int rule_goal_avoid(BoidRule *rule, BoidBrainData *bbd, BoidValues *val,
if (eff == NULL && gabr->ob) {
memset(&temp_eff, 0, sizeof(EffectorCache));
temp_eff.ob = gabr->ob;
+ temp_eff.eval_ctx = bbd->sim->eval_ctx;
temp_eff.scene = bbd->sim->scene;
eff = &temp_eff;
get_effector_data(eff, &efd, &epoint, 0);
diff --git a/source/blender/blenkernel/intern/cachefile.c b/source/blender/blenkernel/intern/cachefile.c
index e821a14da2e..f8215668034 100644
--- a/source/blender/blenkernel/intern/cachefile.c
+++ b/source/blender/blenkernel/intern/cachefile.c
@@ -176,7 +176,7 @@ void BKE_cachefile_update_frame(Main *bmain, Scene *scene, const float ctime, co
const float time = BKE_cachefile_time_offset(cache_file, ctime, fps);
if (BKE_cachefile_filepath_get(bmain, cache_file, time, filename)) {
- BKE_cachefile_clean(scene, cache_file);
+ BKE_cachefile_clean(bmain, cache_file);
#ifdef WITH_ALEMBIC
ABC_free_handle(cache_file->handle);
cache_file->handle = ABC_create_handle(filename, NULL);
@@ -217,11 +217,9 @@ float BKE_cachefile_time_offset(CacheFile *cache_file, const float time, const f
}
/* TODO(kevin): replace this with some depsgraph mechanism, or something similar. */
-void BKE_cachefile_clean(Scene *scene, CacheFile *cache_file)
+void BKE_cachefile_clean(struct Main *bmain, CacheFile *cache_file)
{
- for (Base *base = scene->base.first; base; base = base->next) {
- Object *ob = base->object;
-
+ for (Object *ob = bmain->object.first; ob; ob = ob->id.next) {
ModifierData *md = modifiers_findByType(ob, eModifierType_MeshSequenceCache);
if (md) {
diff --git a/source/blender/blenkernel/intern/camera.c b/source/blender/blenkernel/intern/camera.c
index 719125b3317..869e312614e 100644
--- a/source/blender/blenkernel/intern/camera.c
+++ b/source/blender/blenkernel/intern/camera.c
@@ -40,6 +40,7 @@
#include "DNA_ID.h"
#include "BLI_math.h"
+#include "BLI_listbase.h"
#include "BLI_rect.h"
#include "BLI_string.h"
#include "BLI_utildefines.h"
@@ -48,6 +49,7 @@
#include "BKE_camera.h"
#include "BKE_object.h"
#include "BKE_global.h"
+#include "BKE_layer.h"
#include "BKE_library.h"
#include "BKE_library_query.h"
#include "BKE_library_remap.h"
@@ -55,6 +57,10 @@
#include "BKE_scene.h"
#include "BKE_screen.h"
+#include "DEG_depsgraph_query.h"
+
+#include "MEM_guardedalloc.h"
+
#include "GPU_compositing.h"
/****************************** Camera Datablock *****************************/
@@ -101,9 +107,19 @@ void *BKE_camera_add(Main *bmain, const char *name)
*
* \param flag Copying options (see BKE_library.h's LIB_ID_COPY_... flags for more).
*/
-void BKE_camera_copy_data(Main *UNUSED(bmain), Camera *UNUSED(cam_dst), const Camera *UNUSED(cam_src), const int UNUSED(flag))
+void BKE_camera_copy_data(Main *UNUSED(bmain), Camera *cam_dst, const Camera *cam_src, const int flag)
{
- /* Nothing to do! */
+ BLI_duplicatelist(&cam_dst->bg_images, &cam_src->bg_images);
+ if ((flag & LIB_ID_CREATE_NO_USER_REFCOUNT) == 0) {
+ for (CameraBGImage *bgpic = cam_dst->bg_images.first; bgpic; bgpic = bgpic->next) {
+ if (bgpic->source == CAM_BGIMG_SOURCE_IMAGE) {
+ id_us_plus((ID *)bgpic->ima);
+ }
+ else if (bgpic->source == CAM_BGIMG_SOURCE_MOVIE) {
+ id_us_plus((ID *)bgpic->clip);
+ }
+ }
+ }
}
Camera *BKE_camera_copy(Main *bmain, const Camera *cam)
@@ -121,6 +137,16 @@ void BKE_camera_make_local(Main *bmain, Camera *cam, const bool lib_local)
/** Free (or release) any data used by this camera (does not free the camera itself). */
void BKE_camera_free(Camera *ca)
{
+ for (CameraBGImage *bgpic = ca->bg_images.first; bgpic; bgpic = bgpic->next) {
+ if (bgpic->source == CAM_BGIMG_SOURCE_IMAGE) {
+ id_us_min((ID *)bgpic->ima);
+ }
+ else if (bgpic->source == CAM_BGIMG_SOURCE_MOVIE) {
+ id_us_min((ID *)bgpic->clip);
+ }
+ }
+ BLI_freelistN(&ca->bg_images);
+
BKE_animdata_free((ID *)ca, false);
}
@@ -238,7 +264,7 @@ void BKE_camera_params_from_object(CameraParams *params, const Object *ob)
}
}
-void BKE_camera_params_from_view3d(CameraParams *params, const View3D *v3d, const RegionView3D *rv3d)
+void BKE_camera_params_from_view3d(CameraParams *params, const Depsgraph *depsgraph, const View3D *v3d, const RegionView3D *rv3d)
{
/* common */
params->lens = v3d->lens;
@@ -247,7 +273,8 @@ void BKE_camera_params_from_view3d(CameraParams *params, const View3D *v3d, cons
if (rv3d->persp == RV3D_CAMOB) {
/* camera view */
- BKE_camera_params_from_object(params, v3d->camera);
+ Object *camera_object = DEG_get_evaluated_object(depsgraph, v3d->camera);
+ BKE_camera_params_from_object(params, camera_object);
params->zoom = BKE_screen_view3d_zoom_to_fac(rv3d->camzoom);
@@ -642,7 +669,7 @@ static bool camera_frame_fit_calc_from_data(
/* don't move the camera, just yield the fit location */
/* r_scale only valid/useful for ortho cameras */
bool BKE_camera_view_frame_fit_to_scene(
- Scene *scene, struct View3D *v3d, Object *camera_ob, float r_co[3], float *r_scale)
+ Scene *scene, ViewLayer *view_layer, Object *camera_ob, float r_co[3], float *r_scale)
{
CameraParams params;
CameraViewFrameData data_cb;
@@ -653,7 +680,7 @@ bool BKE_camera_view_frame_fit_to_scene(
camera_frame_fit_data_init(scene, camera_ob, &params, &data_cb);
/* run callback on all visible points */
- BKE_scene_foreach_display_point(scene, v3d, BA_SELECT, camera_to_frame_view_cb, &data_cb);
+ BKE_scene_foreach_display_point(scene, view_layer, camera_to_frame_view_cb, &data_cb);
return camera_frame_fit_calc_from_data(&params, &data_cb, r_co, r_scale);
}
@@ -862,9 +889,9 @@ static Object *camera_multiview_advanced(Scene *scene, Object *camera, const cha
}
if (name[0] != '\0') {
- Base *base = BKE_scene_base_find_by_name(scene, name);
- if (base) {
- return base->object;
+ Object *ob = BKE_scene_object_find_by_name(scene, name);
+ if (ob != NULL) {
+ return ob;
}
}
@@ -961,3 +988,38 @@ void BKE_camera_to_gpu_dof(struct Object *camera, struct GPUFXSettings *r_fx_set
r_fx_settings->dof->focus_distance = BKE_camera_object_dof_distance(camera);
}
}
+
+CameraBGImage *BKE_camera_background_image_new(Camera *cam)
+{
+ CameraBGImage *bgpic = MEM_callocN(sizeof(CameraBGImage), "Background Image");
+
+ bgpic->scale = 1.0f;
+ bgpic->alpha = 0.5f;
+ bgpic->iuser.fie_ima = 2;
+ bgpic->iuser.ok = 1;
+ bgpic->flag |= CAM_BGIMG_FLAG_EXPANDED;
+
+ BLI_addtail(&cam->bg_images, bgpic);
+
+ return bgpic;
+}
+
+void BKE_camera_background_image_remove(Camera *cam, CameraBGImage *bgpic)
+{
+ BLI_remlink(&cam->bg_images, bgpic);
+
+ MEM_freeN(bgpic);
+}
+
+void BKE_camera_background_image_clear(Camera *cam)
+{
+ CameraBGImage *bgpic = cam->bg_images.first;
+
+ while (bgpic) {
+ CameraBGImage *next_bgpic = bgpic->next;
+
+ BKE_camera_background_image_remove(cam, bgpic);
+
+ bgpic = next_bgpic;
+ }
+}
diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c
index d3b106835ef..c4e9ace2d5d 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@ -60,9 +60,12 @@
#include "GPU_buffers.h"
#include "GPU_draw.h"
#include "GPU_glew.h"
+#include "GPU_immediate.h"
#include "GPU_shader.h"
#include "GPU_basic_shader.h"
+#include "DEG_depsgraph.h"
+
#include <string.h>
#include <limits.h>
#include <math.h>
@@ -259,7 +262,8 @@ static bool can_pbvh_draw(Object *ob, DerivedMesh *dm)
return cddm->mvert == me->mvert || ob->sculpt->kb;
}
-static PBVH *cdDM_getPBVH(Object *ob, DerivedMesh *dm)
+static PBVH *cdDM_getPBVH(
+ Object *ob, DerivedMesh *dm, eObjectMode UNUSED(object_mode))
{
CDDerivedMesh *cddm = (CDDerivedMesh *) dm;
@@ -376,40 +380,10 @@ static void cdDM_drawVerts(DerivedMesh *dm)
GPU_buffers_unbind();
}
-static void cdDM_drawUVEdges(DerivedMesh *dm)
+static void cdDM_drawEdges(DerivedMesh *dm, bool UNUSED(drawLooseEdges), bool UNUSED(drawAllEdges))
{
CDDerivedMesh *cddm = (CDDerivedMesh *) dm;
- const MPoly *mpoly = cddm->mpoly;
- int totpoly = dm->getNumPolys(dm);
- int prevstart = 0;
- bool prevdraw = true;
- int curpos = 0;
- int i;
-
- GPU_uvedge_setup(dm);
- for (i = 0; i < totpoly; i++, mpoly++) {
- const bool draw = (mpoly->flag & ME_HIDE) == 0;
-
- if (prevdraw != draw) {
- if (prevdraw && (curpos != prevstart)) {
- glDrawArrays(GL_LINES, prevstart, curpos - prevstart);
- }
- prevstart = curpos;
- }
- curpos += 2 * mpoly->totloop;
- prevdraw = draw;
- }
- if (prevdraw && (curpos != prevstart)) {
- glDrawArrays(GL_LINES, prevstart, curpos - prevstart);
- }
- GPU_buffers_unbind();
-}
-
-static void cdDM_drawEdges(DerivedMesh *dm, bool drawLooseEdges, bool drawAllEdges)
-{
- CDDerivedMesh *cddm = (CDDerivedMesh *) dm;
- GPUDrawObject *gdo;
if (cddm->pbvh && cddm->pbvh_draw &&
BKE_pbvh_type(cddm->pbvh) == PBVH_BMESH)
{
@@ -417,22 +391,37 @@ static void cdDM_drawEdges(DerivedMesh *dm, bool drawLooseEdges, bool drawAllEdg
return;
}
-
- GPU_edge_setup(dm);
- gdo = dm->drawObject;
- if (gdo->edges && gdo->points) {
- if (drawAllEdges && drawLooseEdges) {
- GPU_buffer_draw_elements(gdo->edges, GL_LINES, 0, gdo->totedge * 2);
- }
- else if (drawAllEdges) {
- GPU_buffer_draw_elements(gdo->edges, GL_LINES, 0, gdo->loose_edge_offset * 2);
- }
- else {
- GPU_buffer_draw_elements(gdo->edges, GL_LINES, 0, gdo->tot_edge_drawn * 2);
- GPU_buffer_draw_elements(gdo->edges, GL_LINES, gdo->loose_edge_offset * 2, dm->drawObject->tot_loose_edge_drawn * 2);
+
+ MVert *vert = cddm->mvert;
+ MEdge *edge = cddm->medge;
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ /* NOTE: This is active object color, which is not really perfect.
+ * But we can't query color set by glColor() :(
+ */
+ float color[4] = {1.0f, 0.667f, 0.251f, 1.0f};
+
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformColor4fv(color);
+
+ const int chunk_size = 1024;
+ const int num_chunks = (dm->numEdgeData + chunk_size - 1) / chunk_size;
+
+ for (int chunk = 0; chunk < num_chunks; ++chunk) {
+ const int num_current_edges = (chunk < num_chunks - 1)
+ ? chunk_size
+ : dm->numEdgeData - chunk_size * (num_chunks - 1);
+ immBeginAtMost(GWN_PRIM_LINES, num_current_edges * 2);
+ for (int i = 0; i < num_current_edges; i++, edge++) {
+ immVertex3fv(pos, vert[edge->v1].co);
+ immVertex3fv(pos, vert[edge->v2].co);
}
+ immEnd();
}
- GPU_buffers_unbind();
+
+ immUnbindProgram();
}
static void cdDM_drawLooseEdges(DerivedMesh *dm)
@@ -455,8 +444,9 @@ static void cdDM_drawLooseEdges(DerivedMesh *dm)
static void cdDM_drawFacesSolid(
DerivedMesh *dm,
float (*partial_redraw_planes)[4],
- bool UNUSED(fast), DMSetMaterial setMaterial)
+ bool fast, DMSetMaterial setMaterial)
{
+ UNUSED_VARS(partial_redraw_planes, fast, setMaterial);
CDDerivedMesh *cddm = (CDDerivedMesh *) dm;
int a;
@@ -469,177 +459,79 @@ static void cdDM_drawFacesSolid(
return;
}
}
-
- GPU_vertex_setup(dm);
- GPU_normal_setup(dm);
- GPU_triangle_setup(dm);
- for (a = 0; a < dm->drawObject->totmaterial; a++) {
- if (!setMaterial || setMaterial(dm->drawObject->materials[a].mat_nr + 1, NULL)) {
- GPU_buffer_draw_elements(
- dm->drawObject->triangles, GL_TRIANGLES,
- dm->drawObject->materials[a].start, dm->drawObject->materials[a].totelements);
- }
- }
- GPU_buffers_unbind();
-}
-static void cdDM_drawFacesTex_common(
- DerivedMesh *dm,
- DMSetDrawOptionsTex drawParams,
- DMSetDrawOptionsMappedTex drawParamsMapped,
- DMCompareDrawOptions compareDrawOptions,
- void *userData, DMDrawFlag flag)
-{
- CDDerivedMesh *cddm = (CDDerivedMesh *) dm;
+ const MVert *mvert = cddm->mvert;
+ const MLoop *mloop = cddm->mloop;
const MPoly *mpoly = cddm->mpoly;
- MTexPoly *mtexpoly = DM_get_poly_data_layer(dm, CD_MTEXPOLY);
- const MLoopCol *mloopcol = NULL;
- int i;
- int colType, start_element, tot_drawn;
- const bool use_hide = (flag & DM_DRAW_SKIP_HIDDEN) != 0;
- const bool use_tface = (flag & DM_DRAW_USE_ACTIVE_UV) != 0;
- const bool use_colors = (flag & DM_DRAW_USE_COLORS) != 0;
- int totpoly;
- int next_actualFace;
- int mat_index;
- int tot_element;
-
- /* double lookup */
- const int *index_mp_to_orig = dm->getPolyDataArray(dm, CD_ORIGINDEX);
-
- /* TODO: not entirely correct, but currently dynamic topology will
- * destroy UVs anyway, so textured display wouldn't work anyway
- *
- * this will do more like solid view with lights set up for
- * textured view, but object itself will be displayed gray
- * (the same as it'll display without UV maps in textured view)
- */
- if (cddm->pbvh) {
- if (cddm->pbvh_draw &&
- BKE_pbvh_type(cddm->pbvh) == PBVH_BMESH &&
- BKE_pbvh_has_faces(cddm->pbvh))
- {
- GPU_set_tpage(NULL, false, false);
- BKE_pbvh_draw(cddm->pbvh, NULL, NULL, NULL, false, false);
- return;
- }
- else {
- cdDM_update_normals_from_pbvh(dm);
- }
- }
+ const int num_looptris = dm->getNumLoopTri(dm);
+ const MLoopTri *looptri = dm->getLoopTriArray(dm);
+ const float (*nors)[3] = dm->getPolyDataArray(dm, CD_NORMAL);
+ const float (*lnors)[3] = dm->getLoopDataArray(dm, CD_NORMAL);
- if (use_colors) {
- colType = CD_TEXTURE_MLOOPCOL;
- mloopcol = dm->getLoopDataArray(dm, colType);
- if (!mloopcol) {
- colType = CD_PREVIEW_MLOOPCOL;
- mloopcol = dm->getLoopDataArray(dm, colType);
- }
- if (!mloopcol) {
- colType = CD_MLOOPCOL;
- mloopcol = dm->getLoopDataArray(dm, colType);
- }
- }
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ unsigned int nor = GWN_vertformat_attr_add(format, "nor", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
- GPU_vertex_setup(dm);
- GPU_normal_setup(dm);
- GPU_triangle_setup(dm);
- if (flag & DM_DRAW_USE_TEXPAINT_UV)
- GPU_texpaint_uv_setup(dm);
- else
- GPU_uv_setup(dm);
- if (mloopcol) {
- GPU_color_setup(dm, colType);
- }
+ float color[4] = {0.8f, 0.8f, 0.8f, 1.0f};
+ const float light_vec[3] = {0.0f, 0.0f, 1.0f};
- /* lastFlag = 0; */ /* UNUSED */
- for (mat_index = 0; mat_index < dm->drawObject->totmaterial; mat_index++) {
- GPUBufferMaterial *bufmat = dm->drawObject->materials + mat_index;
- next_actualFace = bufmat->polys[0];
- totpoly = bufmat->totpolys;
+ immBindBuiltinProgram(GPU_SHADER_SIMPLE_LIGHTING);
+ immUniformColor4fv(color);
+ immUniform3fv("light", light_vec);
- tot_element = 0;
- tot_drawn = 0;
- start_element = 0;
+ const int chunk_size = 1024;
+ const int num_chunks = (num_looptris + chunk_size - 1) / chunk_size;
- for (i = 0; i < totpoly; i++) {
- int actualFace = bufmat->polys[i];
- DMDrawOption draw_option = DM_DRAW_OPTION_NORMAL;
- int flush = 0;
- int tot_tri_verts;
+ for (int chunk = 0; chunk < num_chunks; ++chunk) {
+ const int num_current_looptris = (chunk < num_chunks - 1)
+ ? chunk_size
+ : num_looptris - chunk_size * (num_chunks - 1);
- if (i != totpoly - 1)
- next_actualFace = bufmat->polys[i + 1];
+ immBeginAtMost(GWN_PRIM_TRIS, num_current_looptris * 3);
- if (use_hide && (mpoly[actualFace].flag & ME_HIDE)) {
- draw_option = DM_DRAW_OPTION_SKIP;
- }
- else if (drawParams) {
- MTexPoly *tp = use_tface && mtexpoly ? &mtexpoly[actualFace] : NULL;
- draw_option = drawParams(tp, (mloopcol != NULL), mpoly[actualFace].mat_nr);
- }
- else {
- if (index_mp_to_orig) {
- const int orig = index_mp_to_orig[actualFace];
- if (orig == ORIGINDEX_NONE) {
- /* XXX, this is not really correct
- * it will draw the previous faces context for this one when we don't know its settings.
- * but better then skipping it altogether. - campbell */
- draw_option = DM_DRAW_OPTION_NORMAL;
- }
- else if (drawParamsMapped) {
- draw_option = drawParamsMapped(userData, orig, mpoly[actualFace].mat_nr);
- }
+ for (a = 0; a < num_current_looptris; a++, looptri++) {
+ const MPoly *mp = &mpoly[looptri->poly];
+ const bool smoothnormal = (lnors != NULL) || (mp->flag & ME_SMOOTH);
+ const unsigned int vtri[3] = {mloop[looptri->tri[0]].v,
+ mloop[looptri->tri[1]].v,
+ mloop[looptri->tri[2]].v};
+ const unsigned int *ltri = looptri->tri;
+ float normals[3][3];
+ if (!smoothnormal) {
+ if (nors != NULL) {
+ copy_v3_v3(normals[0], nors[looptri->poly]);
}
- else if (drawParamsMapped) {
- draw_option = drawParamsMapped(userData, actualFace, mpoly[actualFace].mat_nr);
+ else {
+ normal_tri_v3(normals[0],
+ mvert[vtri[0]].co,
+ mvert[vtri[1]].co,
+ mvert[vtri[2]].co);
}
+ copy_v3_v3(normals[1], normals[0]);
+ copy_v3_v3(normals[2], normals[0]);
}
-
- /* flush buffer if current triangle isn't drawable or it's last triangle */
- flush = (draw_option == DM_DRAW_OPTION_SKIP) || (i == totpoly - 1);
-
- if (!flush && compareDrawOptions) {
- /* also compare draw options and flush buffer if they're different
- * need for face selection highlight in edit mode */
- flush |= compareDrawOptions(userData, actualFace, next_actualFace) == 0;
- }
-
- tot_tri_verts = ME_POLY_TRI_TOT(&mpoly[actualFace]) * 3;
- tot_element += tot_tri_verts;
-
- if (flush) {
- if (draw_option != DM_DRAW_OPTION_SKIP)
- tot_drawn += tot_tri_verts;
-
- if (tot_drawn) {
- if (mloopcol && draw_option != DM_DRAW_OPTION_NO_MCOL)
- GPU_color_switch(1);
- else
- GPU_color_switch(0);
-
- GPU_buffer_draw_elements(dm->drawObject->triangles, GL_TRIANGLES, bufmat->start + start_element, tot_drawn);
- tot_drawn = 0;
- }
- start_element = tot_element;
+ else if (lnors != NULL) {
+ copy_v3_v3(normals[0], lnors[ltri[0]]);
+ copy_v3_v3(normals[1], lnors[ltri[1]]);
+ copy_v3_v3(normals[2], lnors[ltri[2]]);
}
else {
- tot_drawn += tot_tri_verts;
+ normal_short_to_float_v3(normals[0], mvert[vtri[0]].no);
+ normal_short_to_float_v3(normals[1], mvert[vtri[1]].no);
+ normal_short_to_float_v3(normals[2], mvert[vtri[2]].no);
}
+
+ immAttrib3fv(nor, normals[0]);
+ immVertex3fv(pos, mvert[vtri[0]].co);
+ immAttrib3fv(nor, normals[1]);
+ immVertex3fv(pos, mvert[vtri[1]].co);
+ immAttrib3fv(nor, normals[2]);
+ immVertex3fv(pos, mvert[vtri[2]].co);
}
+ immEnd();
}
- GPU_buffers_unbind();
-
-}
-
-static void cdDM_drawFacesTex(
- DerivedMesh *dm,
- DMSetDrawOptionsTex setDrawOptions,
- DMCompareDrawOptions compareDrawOptions,
- void *userData, DMDrawFlag flag)
-{
- cdDM_drawFacesTex_common(dm, setDrawOptions, NULL, compareDrawOptions, userData, flag);
+ immUnbindProgram();
}
static void cdDM_drawMappedFaces(
@@ -851,15 +743,6 @@ static void cdDM_drawMappedFaces(
}
-static void cdDM_drawMappedFacesTex(
- DerivedMesh *dm,
- DMSetDrawOptionsMappedTex setDrawOptions,
- DMCompareDrawOptions compareDrawOptions,
- void *userData, DMDrawFlag flag)
-{
- cdDM_drawFacesTex_common(dm, NULL, setDrawOptions, compareDrawOptions, userData, flag);
-}
-
static void cddm_draw_attrib_vertex(
DMVertexAttribs *attribs, const MVert *mvert, int a, int index, int loop, int vert,
const float *lnor, const bool smoothnormal)
@@ -1913,7 +1796,7 @@ void CDDM_recalc_tessellation_ex(DerivedMesh *dm, const bool do_face_nor_cpy)
/* Tessellation recreated faceData, and the active layer indices need to get re-propagated
* from loops and polys to faces */
- CustomData_bmesh_update_active_layers(&dm->faceData, &dm->polyData, &dm->loopData);
+ CustomData_bmesh_update_active_layers(&dm->faceData, &dm->loopData);
}
void CDDM_recalc_tessellation(DerivedMesh *dm)
@@ -2007,16 +1890,13 @@ static CDDerivedMesh *cdDM_create(const char *desc)
dm->drawVerts = cdDM_drawVerts;
- dm->drawUVEdges = cdDM_drawUVEdges;
dm->drawEdges = cdDM_drawEdges;
dm->drawLooseEdges = cdDM_drawLooseEdges;
dm->drawMappedEdges = cdDM_drawMappedEdges;
dm->drawFacesSolid = cdDM_drawFacesSolid;
- dm->drawFacesTex = cdDM_drawFacesTex;
dm->drawFacesGLSL = cdDM_drawFacesGLSL;
dm->drawMappedFaces = cdDM_drawMappedFaces;
- dm->drawMappedFacesTex = cdDM_drawMappedFacesTex;
dm->drawMappedFacesGLSL = cdDM_drawMappedFacesGLSL;
dm->drawMappedFacesMat = cdDM_drawMappedFacesMat;
@@ -2153,7 +2033,6 @@ DerivedMesh *CDDM_from_curve_displist(Object *ob, ListBase *dispbase)
if (alluv) {
const char *uvname = "Orco";
- CustomData_add_layer_named(&cddm->dm.polyData, CD_MTEXPOLY, CD_DEFAULT, NULL, totpoly, uvname);
CustomData_add_layer_named(&cddm->dm.loopData, CD_MLOOPUV, CD_ASSIGN, alluv, totloop, uvname);
}
@@ -2168,22 +2047,18 @@ DerivedMesh *CDDM_from_curve_displist(Object *ob, ListBase *dispbase)
static void loops_to_customdata_corners(
BMesh *bm, CustomData *facedata,
int cdindex, const BMLoop *l3[3],
- int numCol, int numTex)
+ int numCol, int numUV)
{
const BMLoop *l;
- BMFace *f = l3[0]->f;
+// BMFace *f = l3[0]->f;
MTFace *texface;
- MTexPoly *texpoly;
MCol *mcol;
MLoopCol *mloopcol;
MLoopUV *mloopuv;
int i, j, hasPCol = CustomData_has_layer(&bm->ldata, CD_PREVIEW_MLOOPCOL);
- for (i = 0; i < numTex; i++) {
+ for (i = 0; i < numUV; i++) {
texface = CustomData_get_n(facedata, CD_MTFACE, cdindex, i);
- texpoly = CustomData_bmesh_get_n(&bm->pdata, f->head.data, CD_MTEXPOLY, i);
-
- ME_MTEXFACE_CPY(texface, texpoly);
for (j = 0; j < 3; j++) {
l = l3[j];
@@ -2237,7 +2112,7 @@ static DerivedMesh *cddm_from_bmesh_ex(
MLoop *mloop = cddm->mloop;
MPoly *mpoly = cddm->mpoly;
int numCol = CustomData_number_of_layers(&bm->ldata, CD_MLOOPCOL);
- int numTex = CustomData_number_of_layers(&bm->pdata, CD_MTEXPOLY);
+ int numUV = CustomData_number_of_layers(&bm->ldata, CD_MLOOPUV);
int *index, add_orig;
CustomDataMask mask;
unsigned int i, j;
@@ -2267,7 +2142,7 @@ static DerivedMesh *cddm_from_bmesh_ex(
/* add tessellation mface layers */
if (use_tessface) {
- CustomData_from_bmeshpoly(&dm->faceData, &dm->polyData, &dm->loopData, em_tottri);
+ CustomData_from_bmeshpoly(&dm->faceData, &dm->loopData, em_tottri);
}
index = dm->getVertDataArray(dm, CD_ORIGINDEX);
@@ -2339,7 +2214,7 @@ static DerivedMesh *cddm_from_bmesh_ex(
/* map mfaces to polygons in the same cddm intentionally */
*index++ = BM_elem_index_get(efa);
- loops_to_customdata_corners(bm, &dm->faceData, i, l, numCol, numTex);
+ loops_to_customdata_corners(bm, &dm->faceData, i, l, numCol, numUV);
test_index_face(mf, &dm->faceData, i, 3);
}
}
diff --git a/source/blender/blenkernel/intern/cloth.c b/source/blender/blenkernel/intern/cloth.c
index dd93606a67c..22fd0bbfa9c 100644
--- a/source/blender/blenkernel/intern/cloth.c
+++ b/source/blender/blenkernel/intern/cloth.c
@@ -40,6 +40,8 @@
#include "BLI_edgehash.h"
#include "BLI_linklist.h"
+#include "DEG_depsgraph.h"
+
#include "BKE_cdderivedmesh.h"
#include "BKE_cloth.h"
#include "BKE_effect.h"
@@ -304,14 +306,14 @@ void bvhselftree_update_from_cloth(ClothModifierData *clmd, bool moving)
}
}
-void cloth_clear_cache(Object *ob, ClothModifierData *clmd, float framenr)
+void cloth_clear_cache(const EvaluationContext *eval_ctx, Object *ob, ClothModifierData *clmd, float framenr)
{
PTCacheID pid;
BKE_ptcache_id_from_cloth(&pid, ob, clmd);
// don't do anything as long as we're in editmode!
- if (pid.cache->edit && ob->mode & OB_MODE_PARTICLE_EDIT)
+ if (pid.cache->edit && eval_ctx->object_mode & OB_MODE_PARTICLE_EDIT)
return;
BKE_ptcache_id_clear(&pid, PTCACHE_CLEAR_AFTER, framenr);
@@ -345,7 +347,7 @@ static int do_init_cloth(Object *ob, ClothModifierData *clmd, DerivedMesh *resul
return 1;
}
-static int do_step_cloth(Object *ob, ClothModifierData *clmd, DerivedMesh *result, int framenr)
+static int do_step_cloth(const struct EvaluationContext *eval_ctx, Object *ob, ClothModifierData *clmd, DerivedMesh *result, int framenr)
{
ClothVertex *verts = NULL;
Cloth *cloth;
@@ -370,7 +372,7 @@ static int do_step_cloth(Object *ob, ClothModifierData *clmd, DerivedMesh *resul
mul_m4_v3(ob->obmat, verts->xconst);
}
- effectors = pdInitEffectors(clmd->scene, ob, NULL, clmd->sim_parms->effector_weights, true);
+ effectors = pdInitEffectors(eval_ctx, clmd->scene, ob, NULL, clmd->sim_parms->effector_weights, true);
if (clmd->sim_parms->flags & CLOTH_SIMSETTINGS_FLAG_DYNAMIC_BASEMESH )
cloth_update_verts ( ob, clmd, result );
@@ -400,7 +402,7 @@ static int do_step_cloth(Object *ob, ClothModifierData *clmd, DerivedMesh *resul
/************************************************
* clothModifier_do - main simulation function
************************************************/
-void clothModifier_do(ClothModifierData *clmd, Scene *scene, Object *ob, DerivedMesh *dm, float (*vertexCos)[3])
+void clothModifier_do(ClothModifierData *clmd, const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, DerivedMesh *dm, float (*vertexCos)[3])
{
PointCache *cache;
PTCacheID pid;
@@ -478,7 +480,6 @@ void clothModifier_do(ClothModifierData *clmd, Scene *scene, Object *ob, Derived
return;
}
- if (!can_simulate)
return;
/* if on second frame, write cache for first frame */
@@ -490,7 +491,7 @@ void clothModifier_do(ClothModifierData *clmd, Scene *scene, Object *ob, Derived
/* do simulation */
BKE_ptcache_validate(cache, framenr);
- if (!do_step_cloth(ob, clmd, dm, framenr)) {
+ if (!do_step_cloth(eval_ctx, ob, clmd, dm, framenr)) {
BKE_ptcache_invalidate(cache);
}
else
@@ -922,7 +923,7 @@ static void cloth_from_mesh ( ClothModifierData *clmd, DerivedMesh *dm )
}
/***************************************************************************************
- * SPRING NETWORK BUILDING IMPLEMENTATION BEGIN
+ * SPRING NETWORK GWN_BATCH_BUILDING IMPLEMENTATION BEGIN
***************************************************************************************/
BLI_INLINE void spring_verts_ordered_set(ClothSpring *spring, int v0, int v1)
@@ -1504,6 +1505,6 @@ static int cloth_build_springs ( ClothModifierData *clmd, DerivedMesh *dm )
} /* cloth_build_springs */
/***************************************************************************************
- * SPRING NETWORK BUILDING IMPLEMENTATION END
+ * SPRING NETWORK GWN_BATCH_BUILDING IMPLEMENTATION END
***************************************************************************************/
diff --git a/source/blender/blenkernel/intern/collection.c b/source/blender/blenkernel/intern/collection.c
new file mode 100644
index 00000000000..69168c4dd3d
--- /dev/null
+++ b/source/blender/blenkernel/intern/collection.c
@@ -0,0 +1,909 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Dalai Felinto
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/blenkernel/intern/collection.c
+ * \ingroup bke
+ */
+
+#include <string.h>
+
+#include "BLI_blenlib.h"
+#include "BLI_ghash.h"
+#include "BLI_iterator.h"
+#include "BLI_listbase.h"
+#include "BLI_math_base.h"
+#include "BLT_translation.h"
+#include "BLI_string_utils.h"
+
+#include "BKE_collection.h"
+#include "BKE_group.h"
+#include "BKE_idprop.h"
+#include "BKE_layer.h"
+#include "BKE_library.h"
+#include "BKE_main.h"
+#include "BKE_scene.h"
+
+#include "DNA_group_types.h"
+#include "DNA_ID.h"
+#include "DNA_layer_types.h"
+#include "DNA_object_types.h"
+#include "DNA_scene_types.h"
+
+#include "MEM_guardedalloc.h"
+
+/* Prototypes. */
+static SceneCollection *find_collection_parent(const struct SceneCollection *sc_child, struct SceneCollection *sc_parent);
+static bool is_collection_in_tree(const struct SceneCollection *sc_reference, struct SceneCollection *sc_parent);
+
+static SceneCollection *collection_master_from_id(const ID *owner_id)
+{
+ switch (GS(owner_id->name)) {
+ case ID_SCE:
+ return ((Scene *)owner_id)->collection;
+ case ID_GR:
+ return ((Group *)owner_id)->collection;
+ default:
+ BLI_assert(!"ID doesn't support collections");
+ return NULL;
+ }
+}
+
+/**
+ * Add a new collection, but don't handle syncing with layer collections
+ */
+static SceneCollection *collection_add(ID *owner_id, SceneCollection *sc_parent, const int type, const char *name_custom)
+{
+ SceneCollection *sc_master = collection_master_from_id(owner_id);
+ SceneCollection *sc = MEM_callocN(sizeof(SceneCollection), "New Collection");
+ sc->type = type;
+ const char *name = name_custom;
+
+ if (!sc_parent) {
+ sc_parent = sc_master;
+ }
+
+ if (!name) {
+ if (sc_parent == sc_master) {
+ name = BLI_sprintfN("Collection %d", BLI_listbase_count(&sc_master->scene_collections) + 1);
+ }
+ else {
+ const int number = BLI_listbase_count(&sc_parent->scene_collections) + 1;
+ const int digits = integer_digits_i(number);
+ const int max_len = sizeof(sc_parent->name)
+ - 1 /* NULL terminator */
+ - (1 + digits) /* " %d" */;
+ name = BLI_sprintfN("%.*s %d", max_len, sc_parent->name, number);
+ }
+ }
+
+ BLI_addtail(&sc_parent->scene_collections, sc);
+ BKE_collection_rename((Scene *)owner_id, sc, name);
+
+ if (name != name_custom) {
+ MEM_freeN((char *)name);
+ }
+
+ return sc;
+}
+
+/**
+ * Add a collection to a collection ListBase and syncronize all render layers
+ * The ListBase is NULL when the collection is to be added to the master collection
+ */
+SceneCollection *BKE_collection_add(ID *owner_id, SceneCollection *sc_parent, const int type, const char *name_custom)
+{
+ if (sc_parent == NULL) {
+ sc_parent = BKE_collection_master(owner_id);
+ }
+
+ SceneCollection *scene_collection = collection_add(owner_id, sc_parent, type, name_custom);
+ BKE_layer_sync_new_scene_collection(owner_id, sc_parent, scene_collection);
+ return scene_collection;
+}
+
+/**
+ * Free the collection items recursively
+ */
+static void collection_free(SceneCollection *sc, const bool do_id_user)
+{
+ if (do_id_user) {
+ for (LinkData *link = sc->objects.first; link; link = link->next) {
+ id_us_min(link->data);
+ }
+ }
+
+ BLI_freelistN(&sc->objects);
+
+ for (SceneCollection *nsc = sc->scene_collections.first; nsc; nsc = nsc->next) {
+ collection_free(nsc, do_id_user);
+ }
+ BLI_freelistN(&sc->scene_collections);
+}
+
+/**
+ * Unlink the collection recursively
+ * \return true if unlinked.
+ */
+static bool collection_remlink(SceneCollection *sc_parent, SceneCollection *sc_gone)
+{
+ for (SceneCollection *sc = sc_parent->scene_collections.first; sc; sc = sc->next) {
+ if (sc == sc_gone) {
+ BLI_remlink(&sc_parent->scene_collections, sc_gone);
+ return true;
+ }
+
+ if (collection_remlink(sc, sc_gone)) {
+ return true;
+ }
+ }
+ return false;
+}
+
+/**
+ * Recursively remove any instance of this SceneCollection
+ */
+static void layer_collection_remove(ViewLayer *view_layer, ListBase *lb, const SceneCollection *sc)
+{
+ LayerCollection *lc = lb->first;
+ while (lc) {
+ if (lc->scene_collection == sc) {
+ BKE_layer_collection_free(view_layer, lc);
+ BLI_remlink(lb, lc);
+
+ LayerCollection *lc_next = lc->next;
+ MEM_freeN(lc);
+ lc = lc_next;
+
+ /* only the "top-level" layer collections may have the
+ * same SceneCollection in a sibling tree.
+ */
+ if (lb != &view_layer->layer_collections) {
+ return;
+ }
+ }
+
+ else {
+ layer_collection_remove(view_layer, &lc->layer_collections, sc);
+ lc = lc->next;
+ }
+ }
+}
+
+/**
+ * Remove a collection from the scene, and syncronize all render layers
+ *
+ * If an object is in any other collection, link the object to the master collection.
+ */
+bool BKE_collection_remove(ID *owner_id, SceneCollection *sc)
+{
+ SceneCollection *sc_master = collection_master_from_id(owner_id);
+
+ /* The master collection cannot be removed. */
+ if (sc == sc_master) {
+ return false;
+ }
+
+ /* We need to do bottom up removal, otherwise we get a crash when we remove a collection that
+ * has one of its nested collections linked to a view layer. */
+ SceneCollection *scene_collection_nested = sc->scene_collections.first;
+ while (scene_collection_nested != NULL) {
+ SceneCollection *scene_collection_next = scene_collection_nested->next;
+ BKE_collection_remove(owner_id, scene_collection_nested);
+ scene_collection_nested = scene_collection_next;
+ }
+
+ /* Unlink from the respective collection tree. */
+ if (!collection_remlink(sc_master, sc)) {
+ BLI_assert(false);
+ }
+
+ /* If an object is no longer in any collection, we add it to the master collection. */
+ ListBase collection_objects;
+ BLI_duplicatelist(&collection_objects, &sc->objects);
+
+ FOREACH_SCENE_COLLECTION(owner_id, scene_collection_iter)
+ {
+ if (scene_collection_iter == sc) {
+ continue;
+ }
+
+ LinkData *link_next, *link = collection_objects.first;
+ while (link) {
+ link_next = link->next;
+
+ if (BLI_findptr(&scene_collection_iter->objects, link->data, offsetof(LinkData, data))) {
+ BLI_remlink(&collection_objects, link);
+ MEM_freeN(link);
+ }
+
+ link = link_next;
+ }
+ }
+ FOREACH_SCENE_COLLECTION_END
+
+ for (LinkData *link = collection_objects.first; link; link = link->next) {
+ BKE_collection_object_add(owner_id, sc_master, link->data);
+ }
+
+ BLI_freelistN(&collection_objects);
+
+ /* Clear the collection items. */
+ collection_free(sc, true);
+
+ /* check all layers that use this collection and clear them */
+ for (ViewLayer *view_layer = BKE_view_layer_first_from_id(owner_id); view_layer; view_layer = view_layer->next) {
+ layer_collection_remove(view_layer, &view_layer->layer_collections, sc);
+ view_layer->active_collection = 0;
+ }
+
+ MEM_freeN(sc);
+ return true;
+}
+
+/**
+ * Copy SceneCollection tree but keep pointing to the same objects
+ *
+ * \param flag Copying options (see BKE_library.h's LIB_ID_COPY_... flags for more).
+ */
+void BKE_collection_copy_data(SceneCollection *sc_dst, SceneCollection *sc_src, const int flag)
+{
+ BLI_duplicatelist(&sc_dst->objects, &sc_src->objects);
+ if ((flag & LIB_ID_CREATE_NO_USER_REFCOUNT) == 0) {
+ for (LinkData *link = sc_dst->objects.first; link; link = link->next) {
+ id_us_plus(link->data);
+ }
+ }
+
+ BLI_duplicatelist(&sc_dst->scene_collections, &sc_src->scene_collections);
+ for (SceneCollection *nsc_src = sc_src->scene_collections.first, *nsc_dst = sc_dst->scene_collections.first;
+ nsc_src;
+ nsc_src = nsc_src->next, nsc_dst = nsc_dst->next)
+ {
+ BKE_collection_copy_data(nsc_dst, nsc_src, flag);
+ }
+}
+
+/**
+ * Makes a shallow copy of a SceneCollection
+ *
+ * Add a new collection in the same level as the old one, copy any nested collections
+ * but link the objects to the new collection (as oppose to copy them).
+ */
+SceneCollection *BKE_collection_duplicate(ID *owner_id, SceneCollection *scene_collection)
+{
+ SceneCollection *scene_collection_master = BKE_collection_master(owner_id);
+ SceneCollection *scene_collection_parent = find_collection_parent(scene_collection, scene_collection_master);
+
+ /* It's not allowed to copy the master collection. */
+ if (scene_collection_master == scene_collection) {
+ return NULL;
+ }
+
+ SceneCollection *scene_collection_new = collection_add(
+ owner_id,
+ scene_collection_parent,
+ scene_collection->type,
+ scene_collection->name);
+
+ if (scene_collection_new != scene_collection->next) {
+ BLI_remlink(&scene_collection_parent->scene_collections, scene_collection_new);
+ BLI_insertlinkafter(&scene_collection_parent->scene_collections, scene_collection, scene_collection_new);
+ }
+
+ BKE_collection_copy_data(scene_collection_new, scene_collection, 0);
+ BKE_layer_sync_new_scene_collection(owner_id, scene_collection_parent, scene_collection_new);
+
+ /* Make sure every linked instance of the new collection has the same values (flags, overrides, ...) as the
+ * corresponding original collection. */
+ BKE_layer_collection_sync_flags(owner_id, scene_collection_new, scene_collection);
+
+ return scene_collection_new;
+}
+
+static SceneCollection *master_collection_from_id(const ID *owner_id)
+{
+ switch (GS(owner_id->name)) {
+ case ID_SCE:
+ return ((const Scene *)owner_id)->collection;
+ case ID_GR:
+ return ((const Group *)owner_id)->collection;
+ default:
+ BLI_assert(!"ID doesn't support scene collection");
+ return NULL;
+ }
+}
+
+/**
+ * Returns the master collection of the scene or group
+ */
+SceneCollection *BKE_collection_master(const ID *owner_id)
+{
+ return master_collection_from_id(owner_id);
+}
+
+static void collection_rename(const ID *owner_id, SceneCollection *sc, const char *name)
+{
+ SceneCollection *sc_parent = find_collection_parent(sc, collection_master_from_id(owner_id));
+ BLI_strncpy(sc->name, name, sizeof(sc->name));
+ BLI_uniquename(&sc_parent->scene_collections, sc, DATA_("Collection"), '.', offsetof(SceneCollection, name), sizeof(sc->name));
+}
+
+void BKE_collection_rename(const Scene *scene, SceneCollection *sc, const char *name)
+{
+ collection_rename(&scene->id, sc, name);
+}
+
+/**
+ * Make sure the collection name is still unique within its siblings.
+ */
+static void collection_name_check(const ID *owner_id, SceneCollection *sc)
+{
+ /* It's a bit of a hack, we simply try to make sure the collection name is valid. */
+ collection_rename(owner_id, sc, sc->name);
+}
+
+/**
+ * Free (or release) any data used by the master collection (does not free the master collection itself).
+ * Used only to clear the entire scene or group data since it's not doing re-syncing of the LayerCollection tree
+ */
+void BKE_collection_master_free(ID *owner_id, const bool do_id_user)
+{
+ collection_free(BKE_collection_master(owner_id), do_id_user);
+}
+
+static void collection_object_add(const ID *owner_id, SceneCollection *sc, Object *ob)
+{
+ BLI_addtail(&sc->objects, BLI_genericNodeN(ob));
+
+ if (GS(owner_id->name) == ID_SCE) {
+ id_us_plus((ID *)ob);
+ }
+ else {
+ BLI_assert(GS(owner_id->name) == ID_GR);
+ if ((ob->flag & OB_FROMGROUP) == 0) {
+ ob->flag |= OB_FROMGROUP;
+ }
+ }
+
+ BKE_layer_sync_object_link(owner_id, sc, ob);
+}
+
+/**
+ * Add object to collection
+ */
+bool BKE_collection_object_add(const ID *owner_id, SceneCollection *sc, Object *ob)
+{
+ if (BLI_findptr(&sc->objects, ob, offsetof(LinkData, data))) {
+ /* don't add the same object twice */
+ return false;
+ }
+
+ collection_object_add(owner_id, sc, ob);
+ return true;
+}
+
+/**
+ * Add object to all collections that reference objects is in
+ * (used to copy objects)
+ */
+void BKE_collection_object_add_from(Scene *scene, Object *ob_src, Object *ob_dst)
+{
+ FOREACH_SCENE_COLLECTION(scene, sc)
+ {
+ if (BLI_findptr(&sc->objects, ob_src, offsetof(LinkData, data))) {
+ collection_object_add(&scene->id, sc, ob_dst);
+ }
+ }
+ FOREACH_SCENE_COLLECTION_END
+
+ for (ViewLayer *view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
+ Base *base_src = BKE_view_layer_base_find(view_layer, ob_src);
+ if (base_src != NULL) {
+ if (base_src->collection_properties == NULL) {
+ continue;
+ }
+ Base *base_dst = BKE_view_layer_base_find(view_layer, ob_dst);
+ IDP_MergeGroup(base_dst->collection_properties, base_src->collection_properties, true);
+ }
+ }
+}
+
+/**
+ * Remove object from collection.
+ * \param bmain: Can be NULL if free_us is false.
+ */
+bool BKE_collection_object_remove(Main *bmain, ID *owner_id, SceneCollection *sc, Object *ob, const bool free_us)
+{
+ LinkData *link = BLI_findptr(&sc->objects, ob, offsetof(LinkData, data));
+
+ if (link == NULL) {
+ return false;
+ }
+
+ BLI_remlink(&sc->objects, link);
+ MEM_freeN(link);
+
+ BKE_layer_sync_object_unlink(owner_id, sc, ob);
+
+ if (GS(owner_id->name) == ID_SCE) {
+ if (free_us) {
+ BKE_libblock_free_us(bmain, ob);
+ }
+ else {
+ id_us_min(&ob->id);
+ }
+ }
+ else {
+ BLI_assert(GS(owner_id->name) == ID_GR);
+ }
+
+ return true;
+}
+
+/**
+ * Move object from a collection into another
+ */
+void BKE_collection_object_move(ID *owner_id, SceneCollection *sc_dst, SceneCollection *sc_src, Object *ob)
+{
+ if (BKE_collection_object_add(owner_id, sc_dst, ob)) {
+ BKE_collection_object_remove(NULL, owner_id, sc_src, ob, false);
+ }
+}
+
+/**
+ * Remove object from all collections of scene
+ */
+bool BKE_collections_object_remove(Main *bmain, ID *owner_id, Object *ob, const bool free_us)
+{
+ bool removed = false;
+ if (GS(owner_id->name) == ID_SCE) {
+ BKE_scene_remove_rigidbody_object((Scene *)owner_id, ob);
+ }
+ else {
+ BLI_assert(GS(owner_id->name) == ID_GR);
+ }
+
+ FOREACH_SCENE_COLLECTION(owner_id, sc)
+ {
+ removed |= BKE_collection_object_remove(bmain, owner_id, sc, ob, free_us);
+ }
+ FOREACH_SCENE_COLLECTION_END
+ return removed;
+}
+
+static void layer_collection_sync(LayerCollection *lc_dst, LayerCollection *lc_src)
+{
+ lc_dst->flag = lc_src->flag;
+
+ /* Pending: sync overrides. */
+ IDP_MergeGroup(lc_dst->properties, lc_src->properties, true);
+
+ /* Continue recursively. */
+ LayerCollection *lc_dst_nested, *lc_src_nested;
+ lc_src_nested = lc_src->layer_collections.first;
+ for (lc_dst_nested = lc_dst->layer_collections.first;
+ lc_dst_nested && lc_src_nested;
+ lc_dst_nested = lc_dst_nested->next, lc_src_nested = lc_src_nested->next)
+ {
+ layer_collection_sync(lc_dst_nested, lc_src_nested);
+ }
+}
+
+/**
+ * Leave only the master collection in, remove everything else.
+ * @param group
+ */
+static void collection_group_cleanup(Group *group)
+{
+ /* Unlink all the LayerCollections. */
+ while (group->view_layer->layer_collections.last != NULL) {
+ BKE_collection_unlink(group->view_layer, group->view_layer->layer_collections.last);
+ }
+
+ /* Remove all the SceneCollections but the master. */
+ collection_free(group->collection, false);
+}
+
+/**
+ * Create a group from a collection
+ *
+ * Any ViewLayer that may have this the related SceneCollection linked is converted
+ * to a Group Collection.
+ */
+Group *BKE_collection_group_create(Main *bmain, Scene *scene, LayerCollection *lc_src)
+{
+ SceneCollection *sc_dst, *sc_src = lc_src->scene_collection;
+ LayerCollection *lc_dst;
+
+ /* The master collection can't be converted. */
+ if (sc_src == BKE_collection_master(&scene->id)) {
+ return NULL;
+ }
+
+ /* If a sub-collection of sc_dst is directly linked into a ViewLayer we can't convert. */
+ for (ViewLayer *view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
+ for (LayerCollection *lc_child = view_layer->layer_collections.first; lc_child; lc_child = lc_child->next) {
+ if (is_collection_in_tree(lc_child->scene_collection, sc_src)) {
+ return NULL;
+ }
+ }
+ }
+
+ /* Create new group with the same data as the original collection. */
+ Group *group = BKE_group_add(bmain, sc_src->name);
+ collection_group_cleanup(group);
+
+ sc_dst = BKE_collection_add(&group->id, NULL, COLLECTION_TYPE_GROUP_INTERNAL, sc_src->name);
+ BKE_collection_copy_data(sc_dst, sc_src, 0);
+ FOREACH_SCENE_COLLECTION(&group->id, sc_group)
+ {
+ sc_group->type = COLLECTION_TYPE_GROUP_INTERNAL;
+ }
+ FOREACH_SCENE_COLLECTION_END
+
+ lc_dst = BKE_collection_link(group->view_layer, sc_dst);
+ layer_collection_sync(lc_dst, lc_src);
+
+ return group;
+}
+
+/* ---------------------------------------------------------------------- */
+/* Outliner drag and drop */
+
+/**
+ * Find and return the SceneCollection that has \a sc_child as one of its directly
+ * nested SceneCollection.
+ *
+ * \param sc_parent Initial SceneCollection to look into recursively, usually the master collection
+ */
+static SceneCollection *find_collection_parent(const SceneCollection *sc_child, SceneCollection *sc_parent)
+{
+ for (SceneCollection *sc_nested = sc_parent->scene_collections.first; sc_nested; sc_nested = sc_nested->next) {
+ if (sc_nested == sc_child) {
+ return sc_parent;
+ }
+
+ SceneCollection *found = find_collection_parent(sc_child, sc_nested);
+ if (found) {
+ return found;
+ }
+ }
+
+ return NULL;
+}
+
+/**
+ * Check if \a sc_reference is nested to \a sc_parent SceneCollection
+ */
+static bool is_collection_in_tree(const SceneCollection *sc_reference, SceneCollection *sc_parent)
+{
+ return find_collection_parent(sc_reference, sc_parent) != NULL;
+}
+
+bool BKE_collection_move_above(const ID *owner_id, SceneCollection *sc_dst, SceneCollection *sc_src)
+{
+ /* Find the SceneCollection the sc_src belongs to */
+ SceneCollection *sc_master = master_collection_from_id(owner_id);
+
+ /* Master Layer can't be moved around*/
+ if (ELEM(sc_master, sc_src, sc_dst)) {
+ return false;
+ }
+
+ /* collection is already where we wanted it to be */
+ if (sc_dst->prev == sc_src) {
+ return false;
+ }
+
+ /* We can't move a collection fs the destiny collection
+ * is nested to the source collection */
+ if (is_collection_in_tree(sc_dst, sc_src)) {
+ return false;
+ }
+
+ SceneCollection *sc_src_parent = find_collection_parent(sc_src, sc_master);
+ SceneCollection *sc_dst_parent = find_collection_parent(sc_dst, sc_master);
+ BLI_assert(sc_src_parent);
+ BLI_assert(sc_dst_parent);
+
+ /* Remove sc_src from its parent */
+ BLI_remlink(&sc_src_parent->scene_collections, sc_src);
+
+ /* Re-insert it where it belongs */
+ BLI_insertlinkbefore(&sc_dst_parent->scene_collections, sc_dst, sc_src);
+
+ /* Update the tree */
+ BKE_layer_collection_resync(owner_id, sc_src_parent);
+ BKE_layer_collection_resync(owner_id, sc_dst_parent);
+
+ /* Keep names unique. */
+ collection_name_check(owner_id, sc_src);
+
+ return true;
+}
+
+bool BKE_collection_move_below(const ID *owner_id, SceneCollection *sc_dst, SceneCollection *sc_src)
+{
+ /* Find the SceneCollection the sc_src belongs to */
+ SceneCollection *sc_master = master_collection_from_id(owner_id);
+
+ /* Master Layer can't be moved around*/
+ if (ELEM(sc_master, sc_src, sc_dst)) {
+ return false;
+ }
+
+ /* Collection is already where we wanted it to be */
+ if (sc_dst->next == sc_src) {
+ return false;
+ }
+
+ /* We can't move a collection if the destiny collection
+ * is nested to the source collection */
+ if (is_collection_in_tree(sc_dst, sc_src)) {
+ return false;
+ }
+
+ SceneCollection *sc_src_parent = find_collection_parent(sc_src, sc_master);
+ SceneCollection *sc_dst_parent = find_collection_parent(sc_dst, sc_master);
+ BLI_assert(sc_src_parent);
+ BLI_assert(sc_dst_parent);
+
+ /* Remove sc_src from its parent */
+ BLI_remlink(&sc_src_parent->scene_collections, sc_src);
+
+ /* Re-insert it where it belongs */
+ BLI_insertlinkafter(&sc_dst_parent->scene_collections, sc_dst, sc_src);
+
+ /* Update the tree */
+ BKE_layer_collection_resync(owner_id, sc_src_parent);
+ BKE_layer_collection_resync(owner_id, sc_dst_parent);
+
+ /* Keep names unique. */
+ collection_name_check(owner_id, sc_src);
+
+ return true;
+}
+
+bool BKE_collection_move_into(const ID *owner_id, SceneCollection *sc_dst, SceneCollection *sc_src)
+{
+ /* Find the SceneCollection the sc_src belongs to */
+ SceneCollection *sc_master = master_collection_from_id(owner_id);
+ if (sc_src == sc_master) {
+ return false;
+ }
+
+ /* We can't move a collection if the destiny collection
+ * is nested to the source collection */
+ if (is_collection_in_tree(sc_dst, sc_src)) {
+ return false;
+ }
+
+ SceneCollection *sc_src_parent = find_collection_parent(sc_src, sc_master);
+ BLI_assert(sc_src_parent);
+
+ /* collection is already where we wanted it to be */
+ if (sc_dst->scene_collections.last == sc_src) {
+ return false;
+ }
+
+ /* Remove sc_src from it */
+ BLI_remlink(&sc_src_parent->scene_collections, sc_src);
+
+ /* Insert sc_src into sc_dst */
+ BLI_addtail(&sc_dst->scene_collections, sc_src);
+
+ /* Update the tree */
+ BKE_layer_collection_resync(owner_id, sc_src_parent);
+ BKE_layer_collection_resync(owner_id, sc_dst);
+
+ /* Keep names unique. */
+ collection_name_check(owner_id, sc_src);
+
+ return true;
+}
+
+/* ---------------------------------------------------------------------- */
+/* Iteractors */
+/* scene collection iteractor */
+
+typedef struct SceneCollectionsIteratorData {
+ ID *owner_id;
+ void **array;
+ int tot, cur;
+} SceneCollectionsIteratorData;
+
+static void scene_collection_callback(SceneCollection *sc, BKE_scene_collections_Cb callback, void *data)
+{
+ callback(sc, data);
+
+ for (SceneCollection *nsc = sc->scene_collections.first; nsc; nsc = nsc->next) {
+ scene_collection_callback(nsc, callback, data);
+ }
+}
+
+static void scene_collections_count(SceneCollection *UNUSED(sc), void *data)
+{
+ int *tot = data;
+ (*tot)++;
+}
+
+static void scene_collections_build_array(SceneCollection *sc, void *data)
+{
+ SceneCollection ***array = data;
+ **array = sc;
+ (*array)++;
+}
+
+static void scene_collections_array(ID *owner_id, SceneCollection ***collections_array, int *tot)
+{
+ SceneCollection *sc;
+ SceneCollection **array;
+
+ *collections_array = NULL;
+ *tot = 0;
+
+ if (owner_id == NULL) {
+ return;
+ }
+
+ sc = master_collection_from_id(owner_id);
+ BLI_assert(sc != NULL);
+ scene_collection_callback(sc, scene_collections_count, tot);
+
+ if (*tot == 0)
+ return;
+
+ *collections_array = array = MEM_mallocN(sizeof(SceneCollection *) * (*tot), "SceneCollectionArray");
+ scene_collection_callback(sc, scene_collections_build_array, &array);
+}
+
+/**
+ * Only use this in non-performance critical situations
+ * (it iterates over all scene collections twice)
+ */
+void BKE_scene_collections_iterator_begin(BLI_Iterator *iter, void *data_in)
+{
+ ID *owner_id = data_in;
+ SceneCollectionsIteratorData *data = MEM_callocN(sizeof(SceneCollectionsIteratorData), __func__);
+
+ data->owner_id = owner_id;
+ iter->data = data;
+ iter->valid = true;
+
+ scene_collections_array(owner_id, (SceneCollection ***)&data->array, &data->tot);
+ BLI_assert(data->tot != 0);
+
+ data->cur = 0;
+ iter->current = data->array[data->cur];
+}
+
+void BKE_scene_collections_iterator_next(struct BLI_Iterator *iter)
+{
+ SceneCollectionsIteratorData *data = iter->data;
+
+ if (++data->cur < data->tot) {
+ iter->current = data->array[data->cur];
+ }
+ else {
+ iter->valid = false;
+ }
+}
+
+void BKE_scene_collections_iterator_end(struct BLI_Iterator *iter)
+{
+ SceneCollectionsIteratorData *data = iter->data;
+
+ if (data) {
+ if (data->array) {
+ MEM_freeN(data->array);
+ }
+ MEM_freeN(data);
+ }
+ iter->valid = false;
+}
+
+
+/* scene objects iteractor */
+
+typedef struct SceneObjectsIteratorData {
+ GSet *visited;
+ LinkData *link_next;
+ BLI_Iterator scene_collection_iter;
+} SceneObjectsIteratorData;
+
+void BKE_scene_objects_iterator_begin(BLI_Iterator *iter, void *data_in)
+{
+ Scene *scene = data_in;
+ SceneObjectsIteratorData *data = MEM_callocN(sizeof(SceneObjectsIteratorData), __func__);
+ iter->data = data;
+
+ /* lookup list ot make sure each object is object called once */
+ data->visited = BLI_gset_ptr_new(__func__);
+
+ /* we wrap the scenecollection iterator here to go over the scene collections */
+ BKE_scene_collections_iterator_begin(&data->scene_collection_iter, scene);
+
+ SceneCollection *sc = data->scene_collection_iter.current;
+ if (sc->objects.first != NULL) {
+ iter->current = ((LinkData *)sc->objects.first)->data;
+ }
+ else {
+ BKE_scene_objects_iterator_next(iter);
+ }
+}
+
+/**
+ * Gets the first unique object in the sequence
+ */
+static LinkData *object_base_unique(GSet *gs, LinkData *link)
+{
+ for (; link != NULL; link = link->next) {
+ Object *ob = link->data;
+ void **ob_key_p;
+ if (!BLI_gset_ensure_p_ex(gs, ob, &ob_key_p)) {
+ *ob_key_p = ob;
+ return link;
+ }
+ }
+ return NULL;
+}
+
+void BKE_scene_objects_iterator_next(BLI_Iterator *iter)
+{
+ SceneObjectsIteratorData *data = iter->data;
+ LinkData *link = data->link_next ? object_base_unique(data->visited, data->link_next) : NULL;
+
+ if (link) {
+ data->link_next = link->next;
+ iter->current = link->data;
+ }
+ else {
+ /* if this is the last object of this ListBase look at the next SceneCollection */
+ SceneCollection *sc;
+ BKE_scene_collections_iterator_next(&data->scene_collection_iter);
+ do {
+ sc = data->scene_collection_iter.current;
+ /* get the first unique object of this collection */
+ LinkData *new_link = object_base_unique(data->visited, sc->objects.first);
+ if (new_link) {
+ data->link_next = new_link->next;
+ iter->current = new_link->data;
+ return;
+ }
+ BKE_scene_collections_iterator_next(&data->scene_collection_iter);
+ } while (data->scene_collection_iter.valid);
+
+ if (!data->scene_collection_iter.valid) {
+ iter->valid = false;
+ }
+ }
+}
+
+void BKE_scene_objects_iterator_end(BLI_Iterator *iter)
+{
+ SceneObjectsIteratorData *data = iter->data;
+ if (data) {
+ BKE_scene_collections_iterator_end(&data->scene_collection_iter);
+ BLI_gset_free(data->visited, NULL);
+ MEM_freeN(data);
+ }
+}
diff --git a/source/blender/blenkernel/intern/collision.c b/source/blender/blenkernel/intern/collision.c
index bd336016838..21945f07a10 100644
--- a/source/blender/blenkernel/intern/collision.c
+++ b/source/blender/blenkernel/intern/collision.c
@@ -47,6 +47,8 @@
#include "BKE_cloth.h"
#include "BKE_effect.h"
+#include "BKE_group.h"
+#include "BKE_layer.h"
#include "BKE_modifier.h"
#include "BKE_scene.h"
@@ -501,22 +503,22 @@ static void add_collision_object(Object ***objs, unsigned int *numobj, unsigned
/* objects in dupli groups, one level only for now */
if (ob->dup_group && level == 0) {
- GroupObject *go;
Group *group= ob->dup_group;
/* add objects */
- for (go= group->gobject.first; go; go= go->next)
- add_collision_object(objs, numobj, maxobj, go->ob, self, level+1, modifier_type);
+ FOREACH_GROUP_OBJECT(group, object)
+ {
+ add_collision_object(objs, numobj, maxobj, object, self, level+1, modifier_type);
+ }
+ FOREACH_GROUP_OBJECT_END
}
}
// return all collision objects in scene
// collision object will exclude self
-Object **get_collisionobjects_ext(Scene *scene, Object *self, Group *group, int layer, unsigned int *numcollobj, unsigned int modifier_type, bool dupli)
+Object **get_collisionobjects_ext(Scene *scene, Object *self, Group *group, unsigned int *numcollobj, unsigned int modifier_type, bool dupli)
{
- Base *base;
Object **objs;
- GroupObject *go;
unsigned int numobj= 0, maxobj= 100;
int level = dupli ? 0 : 1;
@@ -525,16 +527,20 @@ Object **get_collisionobjects_ext(Scene *scene, Object *self, Group *group, int
/* gather all collision objects */
if (group) {
/* use specified group */
- for (go= group->gobject.first; go; go= go->next)
- add_collision_object(&objs, &numobj, &maxobj, go->ob, self, level, modifier_type);
+ FOREACH_GROUP_OBJECT(group, object)
+ {
+ add_collision_object(&objs, &numobj, &maxobj, object, self, level, modifier_type);
+ }
+ FOREACH_GROUP_OBJECT_END
}
else {
Scene *sce_iter;
+ Base *base;
/* add objects in same layer in scene */
for (SETLOOPER(scene, sce_iter, base)) {
- if ( base->lay & layer )
+ if ((base->flag & BASE_VISIBLED) != 0) {
add_collision_object(&objs, &numobj, &maxobj, base->object, self, level, modifier_type);
-
+ }
}
}
@@ -547,7 +553,7 @@ Object **get_collisionobjects(Scene *scene, Object *self, Group *group, unsigned
{
/* Need to check for active layers, too.
Otherwise this check fails if the objects are not on the same layer - DG */
- return get_collisionobjects_ext(scene, self, group, self->lay | scene->lay, numcollobj, modifier_type, true);
+ return get_collisionobjects_ext(scene, self, group, numcollobj, modifier_type, true);
}
static void add_collider_cache_object(ListBase **objs, Object *ob, Object *self, int level)
@@ -575,24 +581,28 @@ static void add_collider_cache_object(ListBase **objs, Object *ob, Object *self,
/* objects in dupli groups, one level only for now */
if (ob->dup_group && level == 0) {
- GroupObject *go;
Group *group= ob->dup_group;
/* add objects */
- for (go= group->gobject.first; go; go= go->next)
- add_collider_cache_object(objs, go->ob, self, level+1);
+ FOREACH_GROUP_OBJECT(group, object)
+ {
+ add_collider_cache_object(objs, object, self, level+1);
+ }
+ FOREACH_GROUP_OBJECT_END
}
}
ListBase *get_collider_cache(Scene *scene, Object *self, Group *group)
{
- GroupObject *go;
ListBase *objs= NULL;
/* add object in same layer in scene */
if (group) {
- for (go= group->gobject.first; go; go= go->next)
- add_collider_cache_object(&objs, go->ob, self, 0);
+ FOREACH_GROUP_OBJECT(group, object)
+ {
+ add_collider_cache_object(&objs, object, self, 0);
+ }
+ FOREACH_GROUP_OBJECT_END
}
else {
Scene *sce_iter;
@@ -600,7 +610,7 @@ ListBase *get_collider_cache(Scene *scene, Object *self, Group *group)
/* add objects in same layer in scene */
for (SETLOOPER(scene, sce_iter, base)) {
- if (!self || (base->lay & self->lay))
+ if (!self || ((base->flag & BASE_VISIBLED) != 0))
add_collider_cache_object(&objs, base->object, self, 0);
}
diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c
index c77cac7bcbd..b8dc7944a75 100644
--- a/source/blender/blenkernel/intern/constraint.c
+++ b/source/blender/blenkernel/intern/constraint.c
@@ -98,11 +98,6 @@
/* Constraint Target Macros */
#define VALID_CONS_TARGET(ct) ((ct) && (ct->tar))
-/* Workaround for cyclic depenndnecy with curves.
- * In such case curve_cache might not be ready yet,
- */
-#define CYCLIC_DEPENDENCY_WORKAROUND
-
/* ************************ Constraints - General Utilities *************************** */
/* These functions here don't act on any specific constraints, and are therefore should/will
* not require any of the special function-pointers afforded by the relevant constraint
@@ -689,7 +684,7 @@ 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 *UNUSED(cob), bConstraintTarget *ct, float UNUSED(ctime))
+static void default_get_tarmat(const struct EvaluationContext *UNUSED(eval_ctx), bConstraint *con, bConstraintOb *UNUSED(cob), bConstraintTarget *ct, float UNUSED(ctime))
{
if (VALID_CONS_TARGET(ct))
constraint_target_to_mat4(ct->tar, ct->subtarget, ct->matrix, CONSTRAINT_SPACE_WORLD, ct->space, con->flag, con->headtail);
@@ -1158,7 +1153,7 @@ static void kinematic_flush_tars(bConstraint *con, ListBase *list, bool no_copy)
}
}
-static void kinematic_get_tarmat(bConstraint *con, bConstraintOb *cob, bConstraintTarget *ct, float UNUSED(ctime))
+static void kinematic_get_tarmat(const struct EvaluationContext *UNUSED(eval_ctx), bConstraint *con, bConstraintOb *cob, bConstraintTarget *ct, float UNUSED(ctime))
{
bKinematicConstraint *data = con->data;
@@ -1245,7 +1240,9 @@ static void followpath_flush_tars(bConstraint *con, ListBase *list, bool no_copy
}
}
-static void followpath_get_tarmat(bConstraint *con, bConstraintOb *cob, bConstraintTarget *ct, float UNUSED(ctime))
+static void followpath_get_tarmat(const struct EvaluationContext *UNUSED(eval_ctx),
+ bConstraint *con, bConstraintOb *UNUSED(cob),
+ bConstraintTarget *ct, float UNUSED(ctime))
{
bFollowPathConstraint *data = con->data;
@@ -1260,13 +1257,7 @@ static void followpath_get_tarmat(bConstraint *con, bConstraintOb *cob, bConstra
* currently for paths to work it needs to go through the bevlist/displist system (ton)
*/
-#ifdef CYCLIC_DEPENDENCY_WORKAROUND
- if (ct->tar->curve_cache == NULL) {
- BKE_displist_make_curveTypes(cob->scene, ct->tar, false);
- }
-#endif
-
- if (ct->tar->curve_cache->path && ct->tar->curve_cache->path->data) {
+ if (ct->tar->curve_cache && ct->tar->curve_cache->path && ct->tar->curve_cache->path->data) {
float quat[4];
if ((data->followflag & FOLLOWPATH_STATIC) == 0) {
/* animated position along curve depending on time */
@@ -2027,21 +2018,19 @@ static void pycon_id_looper(bConstraint *con, ConstraintIDFunc func, void *userd
}
/* Whether this approach is maintained remains to be seen (aligorith) */
-static void pycon_get_tarmat(bConstraint *con, bConstraintOb *cob, bConstraintTarget *ct, float UNUSED(ctime))
+static void pycon_get_tarmat(const struct EvaluationContext *UNUSED(eval_ctx),
+ bConstraint *con, bConstraintOb *UNUSED(cob),
+ bConstraintTarget *ct, float UNUSED(ctime))
{
#ifdef WITH_PYTHON
bPythonConstraint *data = con->data;
#endif
if (VALID_CONS_TARGET(ct)) {
-#ifdef CYCLIC_DEPENDENCY_WORKAROUND
- /* special exception for curves - depsgraph issues */
- if (ct->tar->type == OB_CURVE) {
- if (ct->tar->curve_cache == NULL) {
- BKE_displist_make_curveTypes(cob->scene, ct->tar, false);
- }
+ if (ct->tar->type == OB_CURVE && ct->tar->curve_cache == NULL) {
+ unit_m4(ct->matrix);
+ return;
}
-#endif
/* firstly calculate the matrix the normal way, then let the py-function override
* this matrix if it needs to do so
@@ -2145,7 +2134,7 @@ static void actcon_flush_tars(bConstraint *con, ListBase *list, bool no_copy)
}
}
-static void actcon_get_tarmat(bConstraint *con, bConstraintOb *cob, bConstraintTarget *ct, float UNUSED(ctime))
+static void actcon_get_tarmat(const struct EvaluationContext *UNUSED(eval_ctx), bConstraint *con, bConstraintOb *cob, bConstraintTarget *ct, float UNUSED(ctime))
{
bActionConstraint *data = con->data;
@@ -3134,16 +3123,10 @@ static void clampto_flush_tars(bConstraint *con, ListBase *list, bool no_copy)
}
}
-static void clampto_get_tarmat(bConstraint *UNUSED(con), bConstraintOb *cob, bConstraintTarget *ct, float UNUSED(ctime))
+static void clampto_get_tarmat(const struct EvaluationContext *UNUSED(eval_ctx),
+ bConstraint *UNUSED(con), bConstraintOb *UNUSED(cob),
+ bConstraintTarget *ct, float UNUSED(ctime))
{
-#ifdef CYCLIC_DEPENDENCY_WORKAROUND
- if (VALID_CONS_TARGET(ct)) {
- if (ct->tar->curve_cache == NULL) {
- BKE_displist_make_curveTypes(cob->scene, ct->tar, false);
- }
- }
-#endif
-
/* technically, this isn't really needed for evaluation, but we don't know what else
* might end up calling this...
*/
@@ -3477,7 +3460,7 @@ static void shrinkwrap_flush_tars(bConstraint *con, ListBase *list, bool no_copy
}
-static void shrinkwrap_get_tarmat(bConstraint *con, bConstraintOb *cob, bConstraintTarget *ct, float UNUSED(ctime))
+static void shrinkwrap_get_tarmat(const struct EvaluationContext *UNUSED(eval_ctx), bConstraint *con, bConstraintOb *cob, bConstraintTarget *ct, float UNUSED(ctime))
{
bShrinkwrapConstraint *scon = (bShrinkwrapConstraint *) con->data;
@@ -3809,16 +3792,10 @@ static void splineik_flush_tars(bConstraint *con, ListBase *list, bool no_copy)
}
}
-static void splineik_get_tarmat(bConstraint *UNUSED(con), bConstraintOb *cob, bConstraintTarget *ct, float UNUSED(ctime))
+static void splineik_get_tarmat(const struct EvaluationContext *UNUSED(eval_ctx),
+ bConstraint *UNUSED(con), bConstraintOb *UNUSED(cob),
+ bConstraintTarget *ct, float UNUSED(ctime))
{
-#ifdef CYCLIC_DEPENDENCY_WORKAROUND
- if (VALID_CONS_TARGET(ct)) {
- if (ct->tar->curve_cache == NULL) {
- BKE_displist_make_curveTypes(cob->scene, ct->tar, false);
- }
- }
-#endif
-
/* technically, this isn't really needed for evaluation, but we don't know what else
* might end up calling this...
*/
@@ -4867,7 +4844,7 @@ bool BKE_constraints_proxylocked_owner(Object *ob, bPoseChannel *pchan)
* None of the actual calculations of the matrices should be done here! Also, this function is
* not to be used by any new constraints, particularly any that have multiple targets.
*/
-void BKE_constraint_target_matrix_get(Scene *scene, bConstraint *con, int index, short ownertype, void *ownerdata, float mat[4][4], float ctime)
+void BKE_constraint_target_matrix_get(const struct EvaluationContext *eval_ctx, Scene *scene, bConstraint *con, int index, short ownertype, void *ownerdata, float mat[4][4], float ctime)
{
const bConstraintTypeInfo *cti = BKE_constraint_typeinfo_get(con);
ListBase targets = {NULL, NULL};
@@ -4918,7 +4895,7 @@ void BKE_constraint_target_matrix_get(Scene *scene, bConstraint *con, int index,
if (ct) {
if (cti->get_target_matrix)
- cti->get_target_matrix(con, cob, ct, ctime);
+ cti->get_target_matrix(eval_ctx, con, cob, ct, ctime);
copy_m4_m4(mat, ct->matrix);
}
@@ -4934,7 +4911,7 @@ void BKE_constraint_target_matrix_get(Scene *scene, bConstraint *con, int index,
}
/* Get the list of targets required for solving a constraint */
-void BKE_constraint_targets_for_solving_get(bConstraint *con, bConstraintOb *cob, ListBase *targets, float ctime)
+void BKE_constraint_targets_for_solving_get(const struct EvaluationContext *eval_ctx, bConstraint *con, bConstraintOb *cob, ListBase *targets, float ctime)
{
const bConstraintTypeInfo *cti = BKE_constraint_typeinfo_get(con);
@@ -4952,7 +4929,7 @@ void BKE_constraint_targets_for_solving_get(bConstraint *con, bConstraintOb *cob
*/
if (cti->get_target_matrix) {
for (ct = targets->first; ct; ct = ct->next)
- cti->get_target_matrix(con, cob, ct, ctime);
+ cti->get_target_matrix(eval_ctx, con, cob, ct, ctime);
}
else {
for (ct = targets->first; ct; ct = ct->next)
@@ -4969,7 +4946,7 @@ void BKE_constraint_targets_for_solving_get(bConstraint *con, bConstraintOb *cob
* BKE_constraints_make_evalob and BKE_constraints_clear_evalob should be called before and
* after running this function, to sort out cob
*/
-void BKE_constraints_solve(ListBase *conlist, bConstraintOb *cob, float ctime)
+void BKE_constraints_solve(const struct EvaluationContext *eval_ctx, ListBase *conlist, bConstraintOb *cob, float ctime)
{
bConstraint *con;
float oldmat[4][4];
@@ -5004,7 +4981,7 @@ void BKE_constraints_solve(ListBase *conlist, bConstraintOb *cob, float ctime)
BKE_constraint_mat_convertspace(cob->ob, cob->pchan, cob->matrix, CONSTRAINT_SPACE_WORLD, con->ownspace, false);
/* prepare targets for constraint solving */
- BKE_constraint_targets_for_solving_get(con, cob, &targets, ctime);
+ BKE_constraint_targets_for_solving_get(eval_ctx, con, cob, &targets, ctime);
/* Solve the constraint and put result in cob->matrix */
cti->evaluate_constraint(con, cob, &targets);
diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c
index 4c01bfd35f2..2af3b6ce593 100644
--- a/source/blender/blenkernel/intern/context.c
+++ b/source/blender/blenkernel/intern/context.c
@@ -38,6 +38,9 @@
#include "DNA_object_types.h"
#include "DNA_linestyle_types.h"
#include "DNA_gpencil_types.h"
+#include "DNA_workspace_types.h"
+
+#include "DEG_depsgraph.h"
#include "BLI_listbase.h"
#include "BLI_string.h"
@@ -47,9 +50,14 @@
#include "BLT_translation.h"
#include "BKE_context.h"
+#include "BKE_layer.h"
#include "BKE_main.h"
+#include "BKE_scene.h"
#include "BKE_screen.h"
#include "BKE_sound.h"
+#include "BKE_workspace.h"
+
+#include "RE_engine.h"
#include "RNA_access.h"
@@ -66,10 +74,12 @@ struct bContext {
struct {
struct wmWindowManager *manager;
struct wmWindow *window;
+ struct WorkSpace *workspace;
struct bScreen *screen;
struct ScrArea *area;
struct ARegion *region;
struct ARegion *menu;
+ struct wmManipulatorGroup *manipulator_group;
struct bContextStore *store;
const char *operator_poll_msg; /* reason for poll failing */
} wm;
@@ -627,6 +637,11 @@ wmWindow *CTX_wm_window(const bContext *C)
return ctx_wm_python_context_get(C, "window", &RNA_Window, C->wm.window);
}
+WorkSpace *CTX_wm_workspace(const bContext *C)
+{
+ return ctx_wm_python_context_get(C, "workspace", &RNA_WorkSpace, C->wm.workspace);
+}
+
bScreen *CTX_wm_screen(const bContext *C)
{
return ctx_wm_python_context_get(C, "screen", &RNA_Screen, C->wm.screen);
@@ -659,6 +674,16 @@ struct ARegion *CTX_wm_menu(const bContext *C)
return C->wm.menu;
}
+struct wmManipulatorGroup *CTX_wm_manipulator_group(const bContext *C)
+{
+ return C->wm.manipulator_group;
+}
+
+struct wmMsgBus *CTX_wm_message_bus(const bContext *C)
+{
+ return C->wm.manager ? C->wm.manager->message_bus : NULL;
+}
+
struct ReportList *CTX_wm_reports(const bContext *C)
{
if (C->wm.manager)
@@ -826,9 +851,11 @@ void CTX_wm_manager_set(bContext *C, wmWindowManager *wm)
void CTX_wm_window_set(bContext *C, wmWindow *win)
{
C->wm.window = win;
- C->wm.screen = (win) ? win->screen : NULL;
- if (C->wm.screen)
- C->data.scene = C->wm.screen->scene;
+ if (win) {
+ C->data.scene = win->scene;
+ }
+ C->wm.workspace = (win) ? BKE_workspace_active_get(win->workspace_hook) : NULL;
+ C->wm.screen = (win) ? BKE_workspace_active_screen_get(win->workspace_hook) : NULL;
C->wm.area = NULL;
C->wm.region = NULL;
}
@@ -836,8 +863,6 @@ void CTX_wm_window_set(bContext *C, wmWindow *win)
void CTX_wm_screen_set(bContext *C, bScreen *screen)
{
C->wm.screen = screen;
- if (C->wm.screen)
- C->data.scene = C->wm.screen->scene;
C->wm.area = NULL;
C->wm.region = NULL;
}
@@ -858,6 +883,11 @@ void CTX_wm_menu_set(bContext *C, ARegion *menu)
C->wm.menu = menu;
}
+void CTX_wm_manipulator_group_set(bContext *C, struct wmManipulatorGroup *mgroup)
+{
+ C->wm.manipulator_group = mgroup;
+}
+
void CTX_wm_operator_poll_msg_set(bContext *C, const char *msg)
{
C->wm.operator_poll_msg = msg;
@@ -896,10 +926,80 @@ Scene *CTX_data_scene(const bContext *C)
return C->data.scene;
}
-int CTX_data_mode_enum(const bContext *C)
+ViewLayer *CTX_data_view_layer(const bContext *C)
{
- Object *obedit = CTX_data_edit_object(C);
+ ViewLayer *view_layer;
+
+ if (ctx_data_pointer_verify(C, "view_layer", (void *)&view_layer)) {
+ return view_layer;
+ }
+ else {
+ return BKE_view_layer_from_workspace_get(CTX_data_scene(C), CTX_wm_workspace(C));
+ }
+}
+
+ViewRender *CTX_data_view_render(const bContext *C)
+{
+ ViewRender *view_render;
+
+ if (ctx_data_pointer_verify(C, "view_render", (void *)&view_render)) {
+ return view_render;
+ }
+ else {
+ Scene *scene = CTX_data_scene(C);
+ WorkSpace *workspace = CTX_wm_workspace(C);
+ return BKE_viewrender_get(scene, workspace);
+ }
+}
+
+RenderEngineType *CTX_data_engine_type(const bContext *C)
+{
+ ViewRender *view_render = CTX_data_view_render(C);
+ return RE_engines_find(view_render->engine_id);
+}
+/**
+ * This is tricky. Sometimes the user overrides the render_layer
+ * but not the scene_collection. In this case what to do?
+ *
+ * If the scene_collection is linked to the ViewLayer we use it.
+ * Otherwise we fallback to the active one of the ViewLayer.
+ */
+LayerCollection *CTX_data_layer_collection(const bContext *C)
+{
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ LayerCollection *layer_collection;
+
+ if (ctx_data_pointer_verify(C, "layer_collection", (void *)&layer_collection)) {
+ if (BKE_view_layer_has_collection(view_layer, layer_collection->scene_collection)) {
+ return layer_collection;
+ }
+ }
+
+ /* fallback */
+ return BKE_layer_collection_get_active(view_layer);
+}
+
+SceneCollection *CTX_data_scene_collection(const bContext *C)
+{
+ SceneCollection *scene_collection;
+ if (ctx_data_pointer_verify(C, "scene_collection", (void *)&scene_collection)) {
+ return scene_collection;
+ }
+
+ LayerCollection *layer_collection = CTX_data_layer_collection(C);
+ if (layer_collection) {
+ return layer_collection->scene_collection;
+ }
+
+ /* fallback */
+ Scene *scene = CTX_data_scene(C);
+ return BKE_collection_master(&scene->id);
+}
+
+int CTX_data_mode_enum_ex(const Object *obedit, const Object *ob, const eObjectMode object_mode)
+{
+ // Object *obedit = CTX_data_edit_object(C);
if (obedit) {
switch (obedit->type) {
case OB_MESH:
@@ -919,21 +1019,27 @@ int CTX_data_mode_enum(const bContext *C)
}
}
else {
- Object *ob = CTX_data_active_object(C);
-
+ // Object *ob = CTX_data_active_object(C);
if (ob) {
- if (ob->mode & OB_MODE_POSE) return CTX_MODE_POSE;
- else if (ob->mode & OB_MODE_SCULPT) return CTX_MODE_SCULPT;
- else if (ob->mode & OB_MODE_WEIGHT_PAINT) return CTX_MODE_PAINT_WEIGHT;
- else if (ob->mode & OB_MODE_VERTEX_PAINT) return CTX_MODE_PAINT_VERTEX;
- else if (ob->mode & OB_MODE_TEXTURE_PAINT) return CTX_MODE_PAINT_TEXTURE;
- else if (ob->mode & OB_MODE_PARTICLE_EDIT) return CTX_MODE_PARTICLE;
+ if (object_mode & OB_MODE_POSE) return CTX_MODE_POSE;
+ else if (object_mode & OB_MODE_SCULPT) return CTX_MODE_SCULPT;
+ else if (object_mode & OB_MODE_WEIGHT_PAINT) return CTX_MODE_PAINT_WEIGHT;
+ else if (object_mode & OB_MODE_VERTEX_PAINT) return CTX_MODE_PAINT_VERTEX;
+ else if (object_mode & OB_MODE_TEXTURE_PAINT) return CTX_MODE_PAINT_TEXTURE;
+ else if (object_mode & OB_MODE_PARTICLE_EDIT) return CTX_MODE_PARTICLE;
}
}
return CTX_MODE_OBJECT;
}
+int CTX_data_mode_enum(const bContext *C)
+{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
+ Object *obedit = CTX_data_edit_object(C);
+ Object *obact = obedit ? NULL : CTX_data_active_object(C);
+ return CTX_data_mode_enum_ex(obedit, obact, workspace->object_mode);
+}
/* would prefer if we can use the enum version below over this one - Campbell */
/* must be aligned with above enum */
@@ -954,6 +1060,7 @@ static const char *data_mode_strings[] = {
"objectmode",
NULL
};
+BLI_STATIC_ASSERT(ARRAY_SIZE(data_mode_strings) == CTX_MODE_NUM + 1, "Must have a string for each context mode")
const char *CTX_data_mode_string(const bContext *C)
{
return data_mode_strings[CTX_data_mode_enum(C)];
@@ -1154,3 +1261,23 @@ int CTX_data_editable_gpencil_strokes(const bContext *C, ListBase *list)
return ctx_data_collection_get(C, "editable_gpencil_strokes", list);
}
+Depsgraph *CTX_data_depsgraph(const bContext *C)
+{
+ Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ return BKE_scene_get_depsgraph(scene, view_layer, true);
+}
+
+void CTX_data_eval_ctx(const bContext *C, EvaluationContext *eval_ctx)
+{
+ BLI_assert(C != NULL);
+
+ Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ RenderEngineType *engine_type = CTX_data_engine_type(C);
+ WorkSpace *workspace = CTX_wm_workspace(C);
+ DEG_evaluation_context_init_from_scene(
+ eval_ctx,
+ scene, view_layer, engine_type,
+ workspace->object_mode, DAG_EVAL_VIEWPORT);
+}
diff --git a/source/blender/blenkernel/intern/crazyspace.c b/source/blender/blenkernel/intern/crazyspace.c
index 56df8e51eba..d2ffbbcf27b 100644
--- a/source/blender/blenkernel/intern/crazyspace.c
+++ b/source/blender/blenkernel/intern/crazyspace.c
@@ -99,7 +99,8 @@ static int modifiers_disable_subsurf_temporary(Object *ob)
}
/* disable subsurf temporal, get mapped cos, and enable it */
-float (*BKE_crazyspace_get_mapped_editverts(Scene *scene, Object *obedit))[3]
+float (*BKE_crazyspace_get_mapped_editverts(
+ const struct EvaluationContext *eval_ctx, Scene *scene, Object *obedit))[3]
{
Mesh *me = obedit->data;
DerivedMesh *dm;
@@ -109,13 +110,13 @@ float (*BKE_crazyspace_get_mapped_editverts(Scene *scene, Object *obedit))[3]
/* disable subsurf temporal, get mapped cos, and enable it */
if (modifiers_disable_subsurf_temporary(obedit)) {
/* need to make new derivemesh */
- makeDerivedMesh(scene, obedit, me->edit_btmesh, CD_MASK_BAREMESH, false);
+ makeDerivedMesh(eval_ctx, scene, obedit, me->edit_btmesh, CD_MASK_BAREMESH, false);
}
/* now get the cage */
vertexcos = MEM_mallocN(sizeof(*vertexcos) * nverts, "vertexcos map");
- dm = editbmesh_get_derived_cage(scene, obedit, me->edit_btmesh, CD_MASK_BAREMESH);
+ dm = editbmesh_get_derived_cage(eval_ctx, scene, obedit, me->edit_btmesh, CD_MASK_BAREMESH);
mesh_get_mapped_verts_coords(dm, vertexcos, nverts);
@@ -250,8 +251,9 @@ void BKE_crazyspace_set_quats_mesh(Mesh *me, float (*origcos)[3], float (*mapped
/** returns an array of deform matrices for crazyspace correction, and the
* number of modifiers left */
-int BKE_crazyspace_get_first_deform_matrices_editbmesh(Scene *scene, Object *ob, BMEditMesh *em,
- float (**deformmats)[3][3], float (**deformcos)[3])
+int BKE_crazyspace_get_first_deform_matrices_editbmesh(
+ const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, BMEditMesh *em,
+ float (**deformmats)[3][3], float (**deformcos)[3])
{
ModifierData *md;
DerivedMesh *dm;
@@ -290,7 +292,7 @@ int BKE_crazyspace_get_first_deform_matrices_editbmesh(Scene *scene, Object *ob,
unit_m3(defmats[a]);
}
- mti->deformMatricesEM(md, ob, em, dm, deformedVerts, defmats,
+ mti->deformMatricesEM(md, eval_ctx, ob, em, dm, deformedVerts, defmats,
numVerts);
}
else
@@ -310,7 +312,9 @@ int BKE_crazyspace_get_first_deform_matrices_editbmesh(Scene *scene, Object *ob,
return numleft;
}
-int BKE_sculpt_get_first_deform_matrices(Scene *scene, Object *ob, float (**deformmats)[3][3], float (**deformcos)[3])
+int BKE_sculpt_get_first_deform_matrices(
+ const struct EvaluationContext *eval_ctx, Scene *scene,
+ Object *ob, float (**deformmats)[3][3], float (**deformcos)[3])
{
ModifierData *md;
DerivedMesh *dm;
@@ -346,7 +350,7 @@ int BKE_sculpt_get_first_deform_matrices(Scene *scene, Object *ob, float (**defo
unit_m3(defmats[a]);
}
- if (mti->deformMatrices) mti->deformMatrices(md, ob, dm, deformedVerts, defmats, numVerts);
+ if (mti->deformMatrices) mti->deformMatrices(md, eval_ctx, ob, dm, deformedVerts, defmats, numVerts);
else break;
}
}
@@ -369,9 +373,9 @@ int BKE_sculpt_get_first_deform_matrices(Scene *scene, Object *ob, float (**defo
return numleft;
}
-void BKE_crazyspace_build_sculpt(Scene *scene, Object *ob, float (**deformmats)[3][3], float (**deformcos)[3])
+void BKE_crazyspace_build_sculpt(const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, float (**deformmats)[3][3], float (**deformcos)[3])
{
- int totleft = BKE_sculpt_get_first_deform_matrices(scene, ob, deformmats, deformcos);
+ int totleft = BKE_sculpt_get_first_deform_matrices(eval_ctx, scene, ob, deformmats, deformcos);
if (totleft) {
/* there are deformation modifier which doesn't support deformation matrices
@@ -396,7 +400,7 @@ void BKE_crazyspace_build_sculpt(Scene *scene, Object *ob, float (**deformmats)[
if (mti->deformMatrices && !deformed)
continue;
- mti->deformVerts(md, ob, NULL, deformedVerts, me->totvert, 0);
+ mti->deformVerts(md, eval_ctx, ob, NULL, deformedVerts, me->totvert, 0);
deformed = 1;
}
}
diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c
index d18fda632aa..2a27bad0fb5 100644
--- a/source/blender/blenkernel/intern/curve.c
+++ b/source/blender/blenkernel/intern/curve.c
@@ -53,7 +53,6 @@
#include "BKE_animsys.h"
#include "BKE_curve.h"
-#include "BKE_depsgraph.h"
#include "BKE_displist.h"
#include "BKE_font.h"
#include "BKE_global.h"
@@ -65,6 +64,8 @@
#include "BKE_object.h"
#include "BKE_material.h"
+#include "DEG_depsgraph.h"
+
/* globals */
/* local */
@@ -127,6 +128,8 @@ void BKE_curve_free(Curve *cu)
{
BKE_animdata_free((ID *)cu, false);
+ BKE_curve_batch_cache_free(cu);
+
BKE_nurbList_free(&cu->nurb);
BKE_curve_editfont_free(cu);
@@ -207,6 +210,7 @@ void BKE_curve_copy_data(Main *bmain, Curve *cu_dst, const Curve *cu_src, const
cu_dst->strinfo = MEM_dupallocN(cu_src->strinfo);
cu_dst->tb = MEM_dupallocN(cu_src->tb);
cu_dst->bb = MEM_dupallocN(cu_src->bb);
+ cu_dst->batch_cache = NULL;
if (cu_src->key) {
BKE_id_copy_ex(bmain, &cu_src->key->id, (ID **)&cu_dst->key, flag, false);
@@ -1620,7 +1624,7 @@ float *BKE_curve_surf_make_orco(Object *ob)
/* NOTE: This routine is tied to the order of vertex
* built by displist and as passed to the renderer.
*/
-float *BKE_curve_make_orco(Scene *scene, Object *ob, int *r_numVerts)
+float *BKE_curve_make_orco(const EvaluationContext *eval_ctx, Scene *scene, Object *ob, int *r_numVerts)
{
Curve *cu = ob->data;
DispList *dl;
@@ -1628,7 +1632,7 @@ float *BKE_curve_make_orco(Scene *scene, Object *ob, int *r_numVerts)
float *fp, *coord_array;
ListBase disp = {NULL, NULL};
- BKE_displist_make_curveTypes_forOrco(scene, ob, &disp);
+ BKE_displist_make_curveTypes_forOrco(eval_ctx, scene, ob, &disp);
numVerts = 0;
for (dl = disp.first; dl; dl = dl->next) {
@@ -1719,8 +1723,9 @@ float *BKE_curve_make_orco(Scene *scene, Object *ob, int *r_numVerts)
/* ***************** BEVEL ****************** */
-void BKE_curve_bevel_make(Scene *scene, Object *ob, ListBase *disp,
- const bool for_render, const bool use_render_resolution)
+void BKE_curve_bevel_make(
+ const EvaluationContext *eval_ctx, Scene *scene, Object *ob, ListBase *disp,
+ const bool for_render, const bool use_render_resolution)
{
DispList *dl, *dlnew;
Curve *bevcu, *cu;
@@ -1744,7 +1749,7 @@ void BKE_curve_bevel_make(Scene *scene, Object *ob, ListBase *disp,
facy = cu->bevobj->size[1];
if (for_render) {
- BKE_displist_make_curveTypes_forRender(scene, cu->bevobj, &bevdisp, NULL, false, use_render_resolution);
+ BKE_displist_make_curveTypes_forRender(eval_ctx, scene, cu->bevobj, &bevdisp, NULL, false, use_render_resolution);
dl = bevdisp.first;
}
else if (cu->bevobj->curve_cache) {
@@ -5183,7 +5188,7 @@ int BKE_curve_material_index_validate(Curve *cu)
}
if (!is_valid) {
- DAG_id_tag_update(&cu->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&cu->id, OB_RECALC_DATA);
return true;
}
else {
@@ -5250,7 +5255,7 @@ void BKE_curve_rect_from_textbox(const struct Curve *cu, const struct TextBox *t
/* **** Depsgraph evaluation **** */
-void BKE_curve_eval_geometry(EvaluationContext *UNUSED(eval_ctx),
+void BKE_curve_eval_geometry(const EvaluationContext *UNUSED(eval_ctx),
Curve *curve)
{
if (G.debug & G_DEBUG_DEPSGRAPH) {
@@ -5260,3 +5265,20 @@ void BKE_curve_eval_geometry(EvaluationContext *UNUSED(eval_ctx),
BKE_curve_texspace_calc(curve);
}
}
+
+/* Draw Engine */
+void (*BKE_curve_batch_cache_dirty_cb)(Curve *cu, int mode) = NULL;
+void (*BKE_curve_batch_cache_free_cb)(Curve *cu) = NULL;
+
+void BKE_curve_batch_cache_dirty(Curve *cu, int mode)
+{
+ if (cu->batch_cache) {
+ BKE_curve_batch_cache_dirty_cb(cu, mode);
+ }
+}
+void BKE_curve_batch_cache_free(Curve *cu)
+{
+ if (cu->batch_cache) {
+ BKE_curve_batch_cache_free_cb(cu);
+ }
+}
diff --git a/source/blender/blenkernel/intern/customdata.c b/source/blender/blenkernel/intern/customdata.c
index cf86963cf60..9c0ace2f654 100644
--- a/source/blender/blenkernel/intern/customdata.c
+++ b/source/blender/blenkernel/intern/customdata.c
@@ -390,37 +390,19 @@ static void layerSwap_tface(void *data, const int *corner_indices)
{
MTFace *tf = data;
float uv[4][2];
- static const short pin_flags[4] = { TF_PIN1, TF_PIN2, TF_PIN3, TF_PIN4 };
- static const char sel_flags[4] = { TF_SEL1, TF_SEL2, TF_SEL3, TF_SEL4 };
- short unwrap = tf->unwrap & ~(TF_PIN1 | TF_PIN2 | TF_PIN3 | TF_PIN4);
- char flag = tf->flag & ~(TF_SEL1 | TF_SEL2 | TF_SEL3 | TF_SEL4);
int j;
for (j = 0; j < 4; ++j) {
const int source_index = corner_indices[j];
-
copy_v2_v2(uv[j], tf->uv[source_index]);
-
- /* swap pinning flags around */
- if (tf->unwrap & pin_flags[source_index]) {
- unwrap |= pin_flags[j];
- }
-
- /* swap selection flags around */
- if (tf->flag & sel_flags[source_index]) {
- flag |= sel_flags[j];
- }
}
memcpy(tf->uv, uv, sizeof(tf->uv));
- tf->unwrap = unwrap;
- tf->flag = flag;
}
static void layerDefault_tface(void *data, int count)
{
- static MTFace default_tf = {{{0, 0}, {1, 0}, {1, 1}, {0, 1}}, NULL,
- 0, 0, TF_DYNAMIC | TF_CONVERTED, 0, 0};
+ static MTFace default_tf = {{{0, 0}, {1, 0}, {1, 1}, {0, 1}}};
MTFace *tf = (MTFace *)data;
int i;
@@ -1190,6 +1172,15 @@ static void layerSwap_flnor(void *data, const int *corner_indices)
memcpy(flnors, nors, sizeof(nors));
}
+static void layerDefault_fmap(void *data, int count)
+{
+ int *fmap_num = (int *)data;
+ int i;
+ for (i = 0; i < count; i++) {
+ *fmap_num = -1;
+ }
+}
+
static const LayerTypeInfo LAYERTYPEINFO[CD_NUMTYPES] = {
/* 0: CD_MVERT */
{sizeof(MVert), "MVert", 1, NULL, NULL, NULL, NULL, NULL, NULL},
@@ -1215,8 +1206,8 @@ static const LayerTypeInfo LAYERTYPEINFO[CD_NUMTYPES] = {
/* 3 floats per normal vector */
{sizeof(float) * 3, "vec3f", 1, NULL, NULL, NULL, layerInterp_normal, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, layerCopyValue_normal},
- /* 9: CD_POLYINDEX */ /* DEPRECATED */
- {sizeof(int), "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
+ /* 9: CD_FACEMAP */
+ {sizeof(int), "", 0, NULL, NULL, NULL, NULL, NULL, layerDefault_fmap, NULL},
/* 10: CD_PROP_FLT */
{sizeof(MFloatProperty), "MFloatProperty", 1, N_("Float"), layerCopy_propFloat, NULL, NULL, NULL},
/* 11: CD_PROP_INT */
@@ -1228,10 +1219,9 @@ static const LayerTypeInfo LAYERTYPEINFO[CD_NUMTYPES] = {
layerInterp_origspace_face, layerSwap_origspace_face, layerDefault_origspace_face},
/* 14: CD_ORCO */
{sizeof(float) * 3, "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
- /* 15: CD_MTEXPOLY */
+ /* 15: CD_MTEXPOLY */ /* DEPRECATED */
/* note, when we expose the UV Map / TexFace split to the user, change this back to face Texture */
- {sizeof(MTexPoly), "MTexPoly", 1, N_("UVMap") /* "Face Texture" */, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, layerMaxNum_tface},
+ {sizeof(int), "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
/* 16: CD_MLOOPUV */
{sizeof(MLoopUV), "MLoopUV", 1, N_("UVMap"), NULL, NULL, layerInterp_mloopuv, NULL, NULL,
layerEqual_mloopuv, layerMultiply_mloopuv, layerInitMinMax_mloopuv,
@@ -1310,7 +1300,7 @@ static const LayerTypeInfo LAYERTYPEINFO[CD_NUMTYPES] = {
static const char *LAYERTYPENAMES[CD_NUMTYPES] = {
/* 0-4 */ "CDMVert", "CDMSticky", "CDMDeformVert", "CDMEdge", "CDMFace",
- /* 5-9 */ "CDMTFace", "CDMCol", "CDOrigIndex", "CDNormal", "CDFlags",
+ /* 5-9 */ "CDMTFace", "CDMCol", "CDOrigIndex", "CDNormal", "CDFaceMap",
/* 10-14 */ "CDMFloatProperty", "CDMIntProperty", "CDMStringProperty", "CDOrigSpace", "CDOrco",
/* 15-19 */ "CDMTexPoly", "CDMLoopUV", "CDMloopCol", "CDTangent", "CDMDisps",
/* 20-24 */ "CDPreviewMCol", "CDIDMCol", "CDTextureMCol", "CDClothOrco", "CDMRecast",
@@ -1325,41 +1315,41 @@ static const char *LAYERTYPENAMES[CD_NUMTYPES] = {
const CustomDataMask CD_MASK_BAREMESH =
- CD_MASK_MVERT | CD_MASK_MEDGE | CD_MASK_MLOOP | CD_MASK_MPOLY | CD_MASK_BWEIGHT;
+ CD_MASK_MVERT | CD_MASK_MEDGE | CD_MASK_MLOOP | CD_MASK_MPOLY | CD_MASK_BWEIGHT | CD_MASK_FACEMAP;
const CustomDataMask CD_MASK_MESH =
CD_MASK_MVERT | CD_MASK_MEDGE |
CD_MASK_MDEFORMVERT |
CD_MASK_PROP_FLT | CD_MASK_PROP_INT | CD_MASK_PROP_STR | CD_MASK_MDISPS |
CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL | CD_MASK_MPOLY | CD_MASK_MLOOP |
- CD_MASK_MTEXPOLY | CD_MASK_RECAST | CD_MASK_PAINT_MASK |
+ CD_MASK_RECAST | CD_MASK_PAINT_MASK |
CD_MASK_GRID_PAINT_MASK | CD_MASK_MVERT_SKIN | CD_MASK_FREESTYLE_EDGE | CD_MASK_FREESTYLE_FACE |
- CD_MASK_CUSTOMLOOPNORMAL;
+ CD_MASK_CUSTOMLOOPNORMAL | CD_MASK_FACEMAP;
const CustomDataMask CD_MASK_EDITMESH =
CD_MASK_MDEFORMVERT | CD_MASK_MLOOPUV |
- CD_MASK_MLOOPCOL | CD_MASK_MTEXPOLY | CD_MASK_SHAPE_KEYINDEX |
+ CD_MASK_MLOOPCOL | CD_MASK_SHAPE_KEYINDEX |
CD_MASK_PROP_FLT | CD_MASK_PROP_INT | CD_MASK_PROP_STR |
CD_MASK_MDISPS | CD_MASK_SHAPEKEY | CD_MASK_RECAST | CD_MASK_PAINT_MASK |
- CD_MASK_GRID_PAINT_MASK | CD_MASK_MVERT_SKIN | CD_MASK_CUSTOMLOOPNORMAL;
+ CD_MASK_GRID_PAINT_MASK | CD_MASK_MVERT_SKIN | CD_MASK_CUSTOMLOOPNORMAL | CD_MASK_FACEMAP;
const CustomDataMask CD_MASK_DERIVEDMESH =
CD_MASK_MDEFORMVERT |
CD_MASK_PROP_FLT | CD_MASK_PROP_INT | CD_MASK_CLOTH_ORCO |
- CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL | CD_MASK_MTEXPOLY | CD_MASK_PREVIEW_MLOOPCOL |
+ CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL | CD_MASK_PREVIEW_MLOOPCOL |
CD_MASK_PROP_STR | CD_MASK_ORIGSPACE | CD_MASK_ORIGSPACE_MLOOP | CD_MASK_ORCO | CD_MASK_TANGENT |
CD_MASK_PREVIEW_MCOL | CD_MASK_SHAPEKEY | CD_MASK_RECAST |
CD_MASK_ORIGINDEX | CD_MASK_MVERT_SKIN | CD_MASK_FREESTYLE_EDGE | CD_MASK_FREESTYLE_FACE |
- CD_MASK_CUSTOMLOOPNORMAL;
+ CD_MASK_CUSTOMLOOPNORMAL | CD_MASK_FACEMAP;
const CustomDataMask CD_MASK_BMESH =
- CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL | CD_MASK_MTEXPOLY |
+ CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL |
CD_MASK_MDEFORMVERT | CD_MASK_PROP_FLT | CD_MASK_PROP_INT |
CD_MASK_PROP_STR | CD_MASK_SHAPEKEY | CD_MASK_SHAPE_KEYINDEX | CD_MASK_MDISPS |
CD_MASK_CREASE | CD_MASK_BWEIGHT | CD_MASK_RECAST | CD_MASK_PAINT_MASK |
CD_MASK_GRID_PAINT_MASK | CD_MASK_MVERT_SKIN | CD_MASK_FREESTYLE_EDGE | CD_MASK_FREESTYLE_FACE |
- CD_MASK_CUSTOMLOOPNORMAL;
+ CD_MASK_CUSTOMLOOPNORMAL | CD_MASK_FACEMAP;
/**
* cover values copied by #BKE_mesh_loops_to_tessdata
*/
const CustomDataMask CD_MASK_FACECORNERS =
- CD_MASK_MTFACE | CD_MASK_MTEXPOLY | CD_MASK_MLOOPUV |
+ CD_MASK_MTFACE | CD_MASK_MLOOPUV |
CD_MASK_MCOL | CD_MASK_MLOOPCOL |
CD_MASK_PREVIEW_MCOL | CD_MASK_PREVIEW_MLOOPCOL |
CD_MASK_ORIGSPACE | CD_MASK_ORIGSPACE_MLOOP |
@@ -1368,7 +1358,7 @@ const CustomDataMask CD_MASK_FACECORNERS =
const CustomDataMask CD_MASK_EVERYTHING =
CD_MASK_MVERT | CD_MASK_MDEFORMVERT | CD_MASK_MEDGE | CD_MASK_MFACE |
CD_MASK_MTFACE | CD_MASK_MCOL | CD_MASK_ORIGINDEX | CD_MASK_NORMAL /* | CD_MASK_POLYINDEX */ | CD_MASK_PROP_FLT |
- CD_MASK_PROP_INT | CD_MASK_PROP_STR | CD_MASK_ORIGSPACE | CD_MASK_ORCO | CD_MASK_MTEXPOLY | CD_MASK_MLOOPUV |
+ CD_MASK_PROP_INT | CD_MASK_PROP_STR | CD_MASK_ORIGSPACE | CD_MASK_ORCO | CD_MASK_MLOOPUV |
CD_MASK_MLOOPCOL | CD_MASK_TANGENT | CD_MASK_MDISPS | CD_MASK_PREVIEW_MCOL | CD_MASK_CLOTH_ORCO | CD_MASK_RECAST |
/* BMESH ONLY START */
CD_MASK_MPOLY | CD_MASK_MLOOP | CD_MASK_SHAPE_KEYINDEX | CD_MASK_SHAPEKEY | CD_MASK_BWEIGHT | CD_MASK_CREASE |
@@ -1376,7 +1366,7 @@ const CustomDataMask CD_MASK_EVERYTHING =
/* BMESH ONLY END */
CD_MASK_PAINT_MASK | CD_MASK_GRID_PAINT_MASK | CD_MASK_MVERT_SKIN |
CD_MASK_FREESTYLE_EDGE | CD_MASK_FREESTYLE_FACE |
- CD_MASK_MLOOPTANGENT | CD_MASK_TESSLOOPNORMAL | CD_MASK_CUSTOMLOOPNORMAL;
+ CD_MASK_MLOOPTANGENT | CD_MASK_TESSLOOPNORMAL | CD_MASK_CUSTOMLOOPNORMAL | CD_MASK_FACEMAP;
static const LayerTypeInfo *layerType_getInfo(int type)
{
@@ -2501,13 +2491,10 @@ void CustomData_set(const CustomData *data, int index, int type, const void *sou
/* BMesh functions */
/* needed to convert to/from different face reps */
-void CustomData_to_bmeshpoly(CustomData *fdata, CustomData *pdata, CustomData *ldata,
- int totloop, int totpoly)
+void CustomData_to_bmeshpoly(CustomData *fdata, CustomData *ldata, int totloop)
{
- int i;
- for (i = 0; i < fdata->totlayer; i++) {
+ for (int i = 0; i < fdata->totlayer; i++) {
if (fdata->layers[i].type == CD_MTFACE) {
- CustomData_add_layer_named(pdata, CD_MTEXPOLY, CD_CALLOC, NULL, totpoly, fdata->layers[i].name);
CustomData_add_layer_named(ldata, CD_MLOOPUV, CD_CALLOC, NULL, totloop, fdata->layers[i].name);
}
else if (fdata->layers[i].type == CD_MCOL) {
@@ -2522,19 +2509,18 @@ void CustomData_to_bmeshpoly(CustomData *fdata, CustomData *pdata, CustomData *l
}
}
-void CustomData_from_bmeshpoly(CustomData *fdata, CustomData *pdata, CustomData *ldata, int total)
+void CustomData_from_bmeshpoly(
+ CustomData *fdata, CustomData *ldata, int total)
{
int i;
/* avoid accumulating extra layers */
- BLI_assert(!CustomData_from_bmeshpoly_test(fdata, pdata, ldata, false));
+ BLI_assert(!CustomData_from_bmeshpoly_test(fdata, ldata, false));
- for (i = 0; i < pdata->totlayer; i++) {
- if (pdata->layers[i].type == CD_MTEXPOLY) {
- CustomData_add_layer_named(fdata, CD_MTFACE, CD_CALLOC, NULL, total, pdata->layers[i].name);
- }
- }
for (i = 0; i < ldata->totlayer; i++) {
+ if (ldata->layers[i].type == CD_MLOOPUV) {
+ CustomData_add_layer_named(fdata, CD_MTFACE, CD_CALLOC, NULL, total, ldata->layers[i].name);
+ }
if (ldata->layers[i].type == CD_MLOOPCOL) {
CustomData_add_layer_named(fdata, CD_MCOL, CD_CALLOC, NULL, total, ldata->layers[i].name);
}
@@ -2552,7 +2538,7 @@ void CustomData_from_bmeshpoly(CustomData *fdata, CustomData *pdata, CustomData
}
}
- CustomData_bmesh_update_active_layers(fdata, pdata, ldata);
+ CustomData_bmesh_update_active_layers(fdata, ldata);
}
#ifndef NDEBUG
@@ -2562,13 +2548,13 @@ void CustomData_from_bmeshpoly(CustomData *fdata, CustomData *pdata, CustomData
* \param fallback: Use when there are no layers to handle,
* since callers may expect success or failure.
*/
-bool CustomData_from_bmeshpoly_test(CustomData *fdata, CustomData *pdata, CustomData *ldata, bool fallback)
+bool CustomData_from_bmeshpoly_test(CustomData *fdata, CustomData *ldata, bool fallback)
{
int a_num = 0, b_num = 0;
#define LAYER_CMP(l_a, t_a, l_b, t_b) \
((a_num += CustomData_number_of_layers(l_a, t_a)) == (b_num += CustomData_number_of_layers(l_b, t_b)))
- if (!LAYER_CMP(pdata, CD_MTEXPOLY, fdata, CD_MTFACE))
+ if (!LAYER_CMP(ldata, CD_MLOOPUV, fdata, CD_MTFACE))
return false;
if (!LAYER_CMP(ldata, CD_MLOOPCOL, fdata, CD_MCOL))
return false;
@@ -2590,25 +2576,21 @@ bool CustomData_from_bmeshpoly_test(CustomData *fdata, CustomData *pdata, Custom
#endif
-void CustomData_bmesh_update_active_layers(CustomData *fdata, CustomData *pdata, CustomData *ldata)
+void CustomData_bmesh_update_active_layers(CustomData *fdata, CustomData *ldata)
{
int act;
- if (CustomData_has_layer(pdata, CD_MTEXPOLY)) {
- act = CustomData_get_active_layer(pdata, CD_MTEXPOLY);
- CustomData_set_layer_active(ldata, CD_MLOOPUV, act);
+ if (CustomData_has_layer(ldata, CD_MLOOPUV)) {
+ act = CustomData_get_active_layer(ldata, CD_MLOOPUV);
CustomData_set_layer_active(fdata, CD_MTFACE, act);
- act = CustomData_get_render_layer(pdata, CD_MTEXPOLY);
- CustomData_set_layer_render(ldata, CD_MLOOPUV, act);
+ act = CustomData_get_render_layer(ldata, CD_MLOOPUV);
CustomData_set_layer_render(fdata, CD_MTFACE, act);
- act = CustomData_get_clone_layer(pdata, CD_MTEXPOLY);
- CustomData_set_layer_clone(ldata, CD_MLOOPUV, act);
+ act = CustomData_get_clone_layer(ldata, CD_MLOOPUV);
CustomData_set_layer_clone(fdata, CD_MTFACE, act);
- act = CustomData_get_stencil_layer(pdata, CD_MTEXPOLY);
- CustomData_set_layer_stencil(ldata, CD_MLOOPUV, act);
+ act = CustomData_get_stencil_layer(ldata, CD_MLOOPUV);
CustomData_set_layer_stencil(fdata, CD_MTFACE, act);
}
@@ -2632,25 +2614,21 @@ void CustomData_bmesh_update_active_layers(CustomData *fdata, CustomData *pdata,
* used by do_versions in readfile.c when creating pdata and ldata for pre-bmesh
* meshes and needed to preserve active/render/clone/stencil flags set in pre-bmesh files
*/
-void CustomData_bmesh_do_versions_update_active_layers(CustomData *fdata, CustomData *pdata, CustomData *ldata)
+void CustomData_bmesh_do_versions_update_active_layers(CustomData *fdata, CustomData *ldata)
{
int act;
if (CustomData_has_layer(fdata, CD_MTFACE)) {
act = CustomData_get_active_layer(fdata, CD_MTFACE);
- CustomData_set_layer_active(pdata, CD_MTEXPOLY, act);
CustomData_set_layer_active(ldata, CD_MLOOPUV, act);
act = CustomData_get_render_layer(fdata, CD_MTFACE);
- CustomData_set_layer_render(pdata, CD_MTEXPOLY, act);
CustomData_set_layer_render(ldata, CD_MLOOPUV, act);
act = CustomData_get_clone_layer(fdata, CD_MTFACE);
- CustomData_set_layer_clone(pdata, CD_MTEXPOLY, act);
CustomData_set_layer_clone(ldata, CD_MLOOPUV, act);
act = CustomData_get_stencil_layer(fdata, CD_MTFACE);
- CustomData_set_layer_stencil(pdata, CD_MTEXPOLY, act);
CustomData_set_layer_stencil(ldata, CD_MLOOPUV, act);
}
diff --git a/source/blender/blenkernel/intern/data_transfer.c b/source/blender/blenkernel/intern/data_transfer.c
index 3bc09c0173b..00b8063110d 100644
--- a/source/blender/blenkernel/intern/data_transfer.c
+++ b/source/blender/blenkernel/intern/data_transfer.c
@@ -79,7 +79,7 @@ CustomDataMask BKE_object_data_transfer_dttypes_to_cdmask(const int dtdata_types
cddata_mask |= CD_MASK_MDEFORMVERT; /* Exception for vgroups :/ */
}
else if (cddata_type == CD_FAKE_UV) {
- cddata_mask |= CD_MASK_MTEXPOLY | CD_MASK_MLOOPUV;
+ cddata_mask |= CD_MASK_MLOOPUV;
}
else if (cddata_type == CD_FAKE_LNOR) {
cddata_mask |= CD_MASK_NORMAL | CD_MASK_CUSTOMLOOPNORMAL;
@@ -962,7 +962,7 @@ static bool data_transfer_layersmapping_generate(
}
else if (elem_type == ME_POLY) {
if (cddata_type == CD_FAKE_UV) {
- cddata_type = CD_MTEXPOLY;
+ cddata_type = CD_MLOOPUV;
}
if (!(cddata_type & CD_FAKE)) {
@@ -1010,7 +1010,8 @@ static bool data_transfer_layersmapping_generate(
* to get (as much as possible) exact copy of source data layout.
*/
void BKE_object_data_transfer_layout(
- Scene *scene, Object *ob_src, Object *ob_dst, const int data_types, const bool use_delete,
+ const struct EvaluationContext *eval_ctx, Scene *scene,
+ Object *ob_src, Object *ob_dst, const int data_types, const bool use_delete,
const int fromlayers_select[DT_MULTILAYER_INDEX_MAX], const int tolayers_select[DT_MULTILAYER_INDEX_MAX])
{
DerivedMesh *dm_src;
@@ -1027,7 +1028,7 @@ void BKE_object_data_transfer_layout(
/* Get source DM.*/
dm_src_mask |= BKE_object_data_transfer_dttypes_to_cdmask(data_types);
- dm_src = mesh_get_derived_final(scene, ob_src, dm_src_mask);
+ dm_src = mesh_get_derived_final(eval_ctx, scene, ob_src, dm_src_mask);
if (!dm_src) {
return;
}
@@ -1085,9 +1086,9 @@ void BKE_object_data_transfer_layout(
}
bool BKE_object_data_transfer_dm(
- Scene *scene, Object *ob_src, Object *ob_dst, DerivedMesh *dm_dst, const int data_types, bool use_create,
- const int map_vert_mode, const int map_edge_mode, const int map_loop_mode, const int map_poly_mode,
- SpaceTransform *space_transform, const bool auto_transform,
+ const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob_src, Object *ob_dst, DerivedMesh *dm_dst,
+ const int data_types, bool use_create, const int map_vert_mode, const int map_edge_mode,
+ const int map_loop_mode, const int map_poly_mode, SpaceTransform *space_transform, const bool auto_transform,
const float max_distance, const float ray_radius, const float islands_handling_precision,
const int fromlayers_select[DT_MULTILAYER_INDEX_MAX], const int tolayers_select[DT_MULTILAYER_INDEX_MAX],
const int mix_mode, const float mix_factor, const char *vgroup_name, const bool invert_vgroup,
@@ -1149,7 +1150,7 @@ bool BKE_object_data_transfer_dm(
* Also, we need to make a local copy of dm_src, otherwise we may end with concurrent creation
* of data in it (multi-threaded evaluation of the modifier stack, see T46672).
*/
- dm_src = dm_dst ? ob_src->derivedFinal : mesh_get_derived_final(scene, ob_src, dm_src_mask);
+ dm_src = dm_dst ? ob_src->derivedFinal : mesh_get_derived_final(eval_ctx, scene, ob_src, dm_src_mask);
if (!dm_src) {
return changed;
}
@@ -1457,16 +1458,16 @@ bool BKE_object_data_transfer_dm(
}
bool BKE_object_data_transfer_mesh(
- Scene *scene, Object *ob_src, Object *ob_dst, const int data_types, const bool use_create,
- const int map_vert_mode, const int map_edge_mode, const int map_loop_mode, const int map_poly_mode,
- SpaceTransform *space_transform, const bool auto_transform,
+ const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob_src, Object *ob_dst, const int data_types,
+ const bool use_create, const int map_vert_mode, const int map_edge_mode, const int map_loop_mode,
+ const int map_poly_mode, SpaceTransform *space_transform, const bool auto_transform,
const float max_distance, const float ray_radius, const float islands_handling_precision,
const int fromlayers_select[DT_MULTILAYER_INDEX_MAX], const int tolayers_select[DT_MULTILAYER_INDEX_MAX],
const int mix_mode, const float mix_factor, const char *vgroup_name, const bool invert_vgroup,
ReportList *reports)
{
return BKE_object_data_transfer_dm(
- scene, ob_src, ob_dst, NULL, data_types, use_create,
+ eval_ctx, scene, ob_src, ob_dst, NULL, data_types, use_create,
map_vert_mode, map_edge_mode, map_loop_mode, map_poly_mode,
space_transform, auto_transform,
max_distance, ray_radius, islands_handling_precision,
diff --git a/source/blender/blenkernel/intern/deform.c b/source/blender/blenkernel/intern/deform.c
index 22ff8bf4bb7..d4ff9bd5c0c 100644
--- a/source/blender/blenkernel/intern/deform.c
+++ b/source/blender/blenkernel/intern/deform.c
@@ -54,6 +54,7 @@
#include "BKE_customdata.h"
#include "BKE_data_transfer.h"
#include "BKE_deform.h" /* own include */
+#include "BKE_mesh.h"
#include "BKE_mesh_mapping.h"
#include "BKE_object_deform.h"
@@ -73,6 +74,8 @@ bDeformGroup *BKE_defgroup_new(Object *ob, const char *name)
BLI_addtail(&ob->defbase, defgroup);
defgroup_unique_name(defgroup, ob);
+ BKE_mesh_batch_cache_dirty(ob->data, BKE_MESH_BATCH_DIRTY_ALL);
+
return defgroup;
}
diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c
deleted file mode 100644
index 149158b9f5d..00000000000
--- a/source/blender/blenkernel/intern/depsgraph.c
+++ /dev/null
@@ -1,3739 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2004 Blender Foundation.
- * All rights reserved.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file blender/blenkernel/intern/depsgraph.c
- * \ingroup bke
- */
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#include "MEM_guardedalloc.h"
-
-#ifdef WIN32
-# include "BLI_winstuff.h"
-#endif
-
-#include "BLI_utildefines.h"
-#include "BLI_listbase.h"
-#include "BLI_ghash.h"
-#include "BLI_threads.h"
-
-#include "DNA_anim_types.h"
-#include "DNA_camera_types.h"
-#include "DNA_cachefile_types.h"
-#include "DNA_group_types.h"
-#include "DNA_lamp_types.h"
-#include "DNA_lattice_types.h"
-#include "DNA_key_types.h"
-#include "DNA_material_types.h"
-#include "DNA_mesh_types.h"
-#include "DNA_node_types.h"
-#include "DNA_scene_types.h"
-#include "DNA_screen_types.h"
-#include "DNA_windowmanager_types.h"
-#include "DNA_movieclip_types.h"
-#include "DNA_mask_types.h"
-#include "DNA_modifier_types.h"
-#include "DNA_rigidbody_types.h"
-
-#include "BKE_anim.h"
-#include "BKE_animsys.h"
-#include "BKE_action.h"
-#include "BKE_DerivedMesh.h"
-#include "BKE_collision.h"
-#include "BKE_curve.h"
-#include "BKE_effect.h"
-#include "BKE_fcurve.h"
-#include "BKE_global.h"
-#include "BKE_idcode.h"
-#include "BKE_image.h"
-#include "BKE_key.h"
-#include "BKE_library.h"
-#include "BKE_main.h"
-#include "BKE_node.h"
-#include "BKE_material.h"
-#include "BKE_mball.h"
-#include "BKE_modifier.h"
-#include "BKE_object.h"
-#include "BKE_paint.h"
-#include "BKE_particle.h"
-#include "BKE_pointcache.h"
-#include "BKE_scene.h"
-#include "BKE_screen.h"
-#include "BKE_tracking.h"
-
-#include "GPU_buffers.h"
-
-#include "atomic_ops.h"
-
-#include "depsgraph_private.h"
-
-#include "DEG_depsgraph.h"
-#include "DEG_depsgraph_build.h"
-#include "DEG_depsgraph_debug.h"
-#include "DEG_depsgraph_query.h"
-
-#ifdef WITH_LEGACY_DEPSGRAPH
-
-static SpinLock threaded_update_lock;
-
-void DAG_init(void)
-{
- BLI_spin_init(&threaded_update_lock);
- DEG_register_node_types();
-}
-
-void DAG_exit(void)
-{
- BLI_spin_end(&threaded_update_lock);
- DEG_free_node_types();
-}
-
-/* Queue and stack operations for dag traversal
- *
- * the queue store a list of freenodes to avoid successive alloc/dealloc
- */
-
-DagNodeQueue *queue_create(int slots)
-{
- DagNodeQueue *queue;
- DagNodeQueueElem *elem;
- int i;
-
- queue = MEM_mallocN(sizeof(DagNodeQueue), "DAG queue");
- queue->freenodes = MEM_mallocN(sizeof(DagNodeQueue), "DAG queue");
- queue->count = 0;
- queue->maxlevel = 0;
- queue->first = queue->last = NULL;
- elem = MEM_mallocN(sizeof(DagNodeQueueElem), "DAG queue elem3");
- elem->node = NULL;
- elem->next = NULL;
- queue->freenodes->first = queue->freenodes->last = elem;
-
- for (i = 1; i < slots; i++) {
- elem = MEM_mallocN(sizeof(DagNodeQueueElem), "DAG queue elem4");
- elem->node = NULL;
- elem->next = NULL;
- queue->freenodes->last->next = elem;
- queue->freenodes->last = elem;
- }
- queue->freenodes->count = slots;
- return queue;
-}
-
-void queue_raz(DagNodeQueue *queue)
-{
- DagNodeQueueElem *elem;
-
- elem = queue->first;
- if (queue->freenodes->last)
- queue->freenodes->last->next = elem;
- else
- queue->freenodes->first = queue->freenodes->last = elem;
-
- elem->node = NULL;
- queue->freenodes->count++;
- while (elem->next) {
- elem = elem->next;
- elem->node = NULL;
- queue->freenodes->count++;
- }
- queue->freenodes->last = elem;
- queue->count = 0;
-}
-
-void queue_delete(DagNodeQueue *queue)
-{
- DagNodeQueueElem *elem;
- DagNodeQueueElem *temp;
-
- elem = queue->first;
- while (elem) {
- temp = elem;
- elem = elem->next;
- MEM_freeN(temp);
- }
-
- elem = queue->freenodes->first;
- while (elem) {
- temp = elem;
- elem = elem->next;
- MEM_freeN(temp);
- }
-
- MEM_freeN(queue->freenodes);
- MEM_freeN(queue);
-}
-
-/* insert in queue, remove in front */
-void push_queue(DagNodeQueue *queue, DagNode *node)
-{
- DagNodeQueueElem *elem;
- int i;
-
- if (node == NULL) {
- fprintf(stderr, "pushing null node\n");
- return;
- }
- /*fprintf(stderr, "BFS push : %s %d\n", ((ID *) node->ob)->name, queue->count);*/
-
- elem = queue->freenodes->first;
- if (elem != NULL) {
- queue->freenodes->first = elem->next;
- if (queue->freenodes->last == elem) {
- queue->freenodes->last = NULL;
- queue->freenodes->first = NULL;
- }
- queue->freenodes->count--;
- }
- else { /* alllocating more */
- elem = MEM_mallocN(sizeof(DagNodeQueueElem), "DAG queue elem1");
- elem->node = NULL;
- elem->next = NULL;
- queue->freenodes->first = queue->freenodes->last = elem;
-
- for (i = 1; i < DAGQUEUEALLOC; i++) {
- elem = MEM_mallocN(sizeof(DagNodeQueueElem), "DAG queue elem2");
- elem->node = NULL;
- elem->next = NULL;
- queue->freenodes->last->next = elem;
- queue->freenodes->last = elem;
- }
- queue->freenodes->count = DAGQUEUEALLOC;
-
- elem = queue->freenodes->first;
- queue->freenodes->first = elem->next;
- }
- elem->next = NULL;
- elem->node = node;
- if (queue->last != NULL)
- queue->last->next = elem;
- queue->last = elem;
- if (queue->first == NULL) {
- queue->first = elem;
- }
- queue->count++;
-}
-
-
-/* insert in front, remove in front */
-void push_stack(DagNodeQueue *queue, DagNode *node)
-{
- DagNodeQueueElem *elem;
- int i;
-
- elem = queue->freenodes->first;
- if (elem != NULL) {
- queue->freenodes->first = elem->next;
- if (queue->freenodes->last == elem) {
- queue->freenodes->last = NULL;
- queue->freenodes->first = NULL;
- }
- queue->freenodes->count--;
- }
- else { /* alllocating more */
- elem = MEM_mallocN(sizeof(DagNodeQueueElem), "DAG queue elem1");
- elem->node = NULL;
- elem->next = NULL;
- queue->freenodes->first = queue->freenodes->last = elem;
-
- for (i = 1; i < DAGQUEUEALLOC; i++) {
- elem = MEM_mallocN(sizeof(DagNodeQueueElem), "DAG queue elem2");
- elem->node = NULL;
- elem->next = NULL;
- queue->freenodes->last->next = elem;
- queue->freenodes->last = elem;
- }
- queue->freenodes->count = DAGQUEUEALLOC;
-
- elem = queue->freenodes->first;
- queue->freenodes->first = elem->next;
- }
- elem->next = queue->first;
- elem->node = node;
- queue->first = elem;
- if (queue->last == NULL)
- queue->last = elem;
- queue->count++;
-}
-
-
-DagNode *pop_queue(DagNodeQueue *queue)
-{
- DagNodeQueueElem *elem;
- DagNode *node;
-
- elem = queue->first;
- if (elem) {
- queue->first = elem->next;
- if (queue->last == elem) {
- queue->last = NULL;
- queue->first = NULL;
- }
- queue->count--;
- if (queue->freenodes->last)
- queue->freenodes->last->next = elem;
- queue->freenodes->last = elem;
- if (queue->freenodes->first == NULL)
- queue->freenodes->first = elem;
- node = elem->node;
- elem->node = NULL;
- elem->next = NULL;
- queue->freenodes->count++;
- return node;
- }
- else {
- fprintf(stderr, "return null\n");
- return NULL;
- }
-}
-
-DagNode *get_top_node_queue(DagNodeQueue *queue)
-{
- return queue->first->node;
-}
-
-DagForest *dag_init(void)
-{
- DagForest *forest;
- /* use callocN to init all zero */
- forest = MEM_callocN(sizeof(DagForest), "DAG root");
- forest->ugly_hack_sorry = true;
- return forest;
-}
-
-/* isdata = object data... */
-/* XXX this needs to be extended to be more flexible (so that not only objects are evaluated via depsgraph)... */
-static void dag_add_driver_relation(AnimData *adt, DagForest *dag, DagNode *node, int isdata)
-{
- FCurve *fcu;
- DagNode *node1;
-
- for (fcu = adt->drivers.first; fcu; fcu = fcu->next) {
- ChannelDriver *driver = fcu->driver;
- DriverVar *dvar;
- int isdata_fcu = (isdata) || (fcu->rna_path && strstr(fcu->rna_path, "modifiers["));
-
- /* loop over variables to get the target relationships */
- for (dvar = driver->variables.first; dvar; dvar = dvar->next) {
- /* only used targets */
- DRIVER_TARGETS_USED_LOOPER(dvar)
- {
- if (dtar->id) {
- /* FIXME: other data types need to be added here so that they can work! */
- if (GS(dtar->id->name) == ID_OB) {
- Object *ob = (Object *)dtar->id;
-
- /* normal channel-drives-channel */
- node1 = dag_get_node(dag, dtar->id);
-
- /* check if bone... */
- if ((ob->type == OB_ARMATURE) &&
- ( ((dtar->rna_path) && strstr(dtar->rna_path, "pose.bones[")) ||
- ((dtar->flag & DTAR_FLAG_STRUCT_REF) && (dtar->pchan_name[0])) ))
- {
- dag_add_relation(dag, node1, node, isdata_fcu ? DAG_RL_DATA_DATA : DAG_RL_DATA_OB, "Driver");
- }
- /* check if ob data */
- else if (dtar->rna_path && strstr(dtar->rna_path, "data."))
- dag_add_relation(dag, node1, node, isdata_fcu ? DAG_RL_DATA_DATA : DAG_RL_DATA_OB, "Driver");
- /* normal */
- else
- dag_add_relation(dag, node1, node, isdata_fcu ? DAG_RL_OB_DATA : DAG_RL_OB_OB, "Driver");
- }
- }
- }
- DRIVER_TARGETS_LOOPER_END
- }
- }
-}
-
-/* XXX: forward def for material driver handling... */
-static void dag_add_material_driver_relations(DagForest *dag, DagNode *node, Material *ma);
-
-/* recursive handling for shader nodetree drivers */
-static void dag_add_shader_nodetree_driver_relations(DagForest *dag, DagNode *node, bNodeTree *ntree)
-{
- bNode *n;
-
- /* nodetree itself */
- if (ntree->adt) {
- dag_add_driver_relation(ntree->adt, dag, node, 1);
- }
-
- /* nodetree's nodes... */
- for (n = ntree->nodes.first; n; n = n->next) {
- if (n->id) {
- if (GS(n->id->name) == ID_MA) {
- dag_add_material_driver_relations(dag, node, (Material *)n->id);
- }
- else if (n->type == NODE_GROUP) {
- dag_add_shader_nodetree_driver_relations(dag, node, (bNodeTree *)n->id);
- }
- }
- }
-}
-
-/* recursive handling for material drivers */
-static void dag_add_material_driver_relations(DagForest *dag, DagNode *node, Material *ma)
-{
- /* Prevent infinite recursion by checking (and tagging the material) as having been visited
- * already (see build_dag()). This assumes ma->id.tag & LIB_TAG_DOIT isn't set by anything else
- * in the meantime... [#32017]
- */
- if (ma->id.tag & LIB_TAG_DOIT)
- return;
-
- ma->id.tag |= LIB_TAG_DOIT;
-
- /* material itself */
- if (ma->adt)
- dag_add_driver_relation(ma->adt, dag, node, 1);
-
- /* textures */
- // TODO...
- //dag_add_texture_driver_relations(DagForest *dag, DagNode *node, ID *id);
-
- /* material's nodetree */
- if (ma->nodetree)
- dag_add_shader_nodetree_driver_relations(dag, node, ma->nodetree);
-
- ma->id.tag &= ~LIB_TAG_DOIT;
-}
-
-/* recursive handling for lamp drivers */
-static void dag_add_lamp_driver_relations(DagForest *dag, DagNode *node, Lamp *la)
-{
- /* Prevent infinite recursion by checking (and tagging the lamp) as having been visited
- * already (see build_dag()). This assumes la->id.tag & LIB_TAG_DOIT isn't set by anything else
- * in the meantime... [#32017]
- */
- if (la->id.tag & LIB_TAG_DOIT)
- return;
-
- la->id.tag |= LIB_TAG_DOIT;
-
- /* lamp itself */
- if (la->adt)
- dag_add_driver_relation(la->adt, dag, node, 1);
-
- /* textures */
- // TODO...
- //dag_add_texture_driver_relations(DagForest *dag, DagNode *node, ID *id);
-
- /* lamp's nodetree */
- if (la->nodetree)
- dag_add_shader_nodetree_driver_relations(dag, node, la->nodetree);
-
- la->id.tag &= ~LIB_TAG_DOIT;
-}
-
-static void create_collision_relation(DagForest *dag, DagNode *node, Object *ob1, const char *name)
-{
- DagNode *node2 = dag_get_node(dag, ob1);
- dag_add_relation(dag, node2, node, DAG_RL_DATA_DATA | DAG_RL_OB_DATA, name);
-}
-
-void dag_add_collision_relations(DagForest *dag, Scene *scene, Object *ob, DagNode *node, Group *group, int layer, unsigned int modifier_type, DagCollobjFilterFunction fn, bool dupli, const char *name)
-{
- unsigned int numcollobj;
- Object **collobjs = get_collisionobjects_ext(scene, ob, group, layer, &numcollobj, modifier_type, dupli);
-
- for (unsigned int i = 0; i < numcollobj; i++) {
- Object *ob1 = collobjs[i];
-
- if (!fn || fn(ob1, modifiers_findByType(ob1, modifier_type))) {
- create_collision_relation(dag, node, ob1, name);
- }
- }
-
- if (collobjs)
- MEM_freeN(collobjs);
-}
-
-void dag_add_forcefield_relations(DagForest *dag, Scene *scene, Object *ob, DagNode *node, EffectorWeights *effector_weights, bool add_absorption, int skip_forcefield, const char *name)
-{
- ListBase *effectors = pdInitEffectors(scene, ob, NULL, effector_weights, false);
-
- if (effectors) {
- for (EffectorCache *eff = effectors->first; eff; eff = eff->next) {
- if (eff->ob != ob && eff->pd->forcefield != skip_forcefield) {
- create_collision_relation(dag, node, eff->ob, name);
-
- if (eff->pd->forcefield == PFIELD_SMOKEFLOW && eff->pd->f_source) {
- create_collision_relation(dag, node, eff->pd->f_source, "Smoke Force Domain");
- }
-
- if (add_absorption && (eff->pd->flag & PFIELD_VISIBILITY)) {
- /* Actual code uses get_collider_cache */
- dag_add_collision_relations(dag, scene, ob, node, NULL, eff->ob->lay, eModifierType_Collision, NULL, true, "Force Absorption");
- }
- }
- }
- }
-
- pdEndEffectors(&effectors);
-}
-
-static bool build_deg_tracking_constraints(DagForest *dag,
- Scene *scene,
- DagNode *scenenode,
- bConstraint *con,
- const bConstraintTypeInfo *cti,
- DagNode *node,
- bool is_data)
-{
- if (!ELEM(cti->type, CONSTRAINT_TYPE_FOLLOWTRACK,
- CONSTRAINT_TYPE_CAMERASOLVER,
- CONSTRAINT_TYPE_OBJECTSOLVER))
- {
- return false;
- }
- bool depends_on_camera = false;
- if (cti->type == CONSTRAINT_TYPE_FOLLOWTRACK) {
- bFollowTrackConstraint *data = (bFollowTrackConstraint *)con->data;
- if ((data->clip || data->flag & FOLLOWTRACK_ACTIVECLIP) && data->track[0]) {
- depends_on_camera = true;
- }
- if (data->depth_ob != NULL) {
- DagNode *node2 = dag_get_node(dag, data->depth_ob);
- dag_add_relation(dag,
- node2, node,
- (is_data) ? (DAG_RL_DATA_DATA | DAG_RL_OB_DATA)
- : (DAG_RL_DATA_OB | DAG_RL_OB_OB),
- cti->name);
- }
- }
- else if (cti->type == CONSTRAINT_TYPE_OBJECTSOLVER) {
- depends_on_camera = true;
- }
- if (depends_on_camera && scene->camera != NULL) {
- DagNode *node2 = dag_get_node(dag, scene->camera);
- dag_add_relation(dag,
- node2, node,
- (is_data) ? (DAG_RL_DATA_DATA | DAG_RL_OB_DATA)
- : (DAG_RL_DATA_OB | DAG_RL_OB_OB),
- cti->name);
- }
- dag_add_relation(dag, scenenode, node, DAG_RL_SCENE, "Scene Relation");
- return true;
-}
-
-static void build_dag_object(DagForest *dag, DagNode *scenenode, Main *bmain, Scene *scene, Object *ob, int mask)
-{
- bConstraint *con;
- DagNode *node;
- DagNode *node2;
- DagNode *node3;
- Key *key;
- ParticleSystem *psys;
- int addtoroot = 1;
-
- node = dag_get_node(dag, ob);
-
- if ((ob->data) && (mask & DAG_RL_DATA)) {
- node2 = dag_get_node(dag, ob->data);
- dag_add_relation(dag, node, node2, DAG_RL_DATA, "Object-Data Relation");
- node2->first_ancestor = ob;
- node2->ancestor_count += 1;
- }
-
- /* also build a custom data mask for dependencies that need certain layers */
-
- if (ob->type == OB_ARMATURE) {
- if (ob->pose) {
- bPoseChannel *pchan;
-
- for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) {
- for (con = pchan->constraints.first; con; con = con->next) {
- const bConstraintTypeInfo *cti = BKE_constraint_typeinfo_get(con);
- ListBase targets = {NULL, NULL};
- bConstraintTarget *ct;
-
- if (!cti) {
- continue;
- }
-
- if (build_deg_tracking_constraints(dag, scene, scenenode, con, cti, node, true)) {
- /* pass */
- }
- else if (cti->get_constraint_targets) {
- cti->get_constraint_targets(con, &targets);
-
- for (ct = targets.first; ct; ct = ct->next) {
- if (ct->tar && ct->tar != ob) {
- // fprintf(stderr, "armature %s target :%s\n", ob->id.name, target->id.name);
- node3 = dag_get_node(dag, ct->tar);
-
- if (ct->subtarget[0]) {
- dag_add_relation(dag, node3, node, DAG_RL_OB_DATA | DAG_RL_DATA_DATA, cti->name);
- if (ct->tar->type == OB_MESH)
- node3->customdata_mask |= CD_MASK_MDEFORMVERT;
- }
- else if (ELEM(con->type, CONSTRAINT_TYPE_FOLLOWPATH,
- CONSTRAINT_TYPE_CLAMPTO,
- CONSTRAINT_TYPE_SPLINEIK,
- CONSTRAINT_TYPE_SHRINKWRAP))
- {
- dag_add_relation(dag, node3, node, DAG_RL_DATA_DATA | DAG_RL_OB_DATA, cti->name);
- }
- else {
- dag_add_relation(dag, node3, node, DAG_RL_OB_DATA, cti->name);
- }
- }
- }
-
- if (cti->flush_constraint_targets)
- cti->flush_constraint_targets(con, &targets, 1);
- }
-
- }
- }
- }
- }
-
- /* driver dependencies, nla modifiers */
-#if 0 // XXX old animation system
- if (ob->nlastrips.first) {
- bActionStrip *strip;
- bActionChannel *chan;
- for (strip = ob->nlastrips.first; strip; strip = strip->next) {
- if (strip->modifiers.first) {
- bActionModifier *amod;
- for (amod = strip->modifiers.first; amod; amod = amod->next) {
- if (amod->ob) {
- node2 = dag_get_node(dag, amod->ob);
- dag_add_relation(dag, node2, node, DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "NLA Strip Modifier");
- }
- }
- }
- }
- }
-#endif // XXX old animation system
- if (ob->adt)
- dag_add_driver_relation(ob->adt, dag, node, (ob->type == OB_ARMATURE)); // XXX isdata arg here doesn't give an accurate picture of situation
-
- key = BKE_key_from_object(ob);
- if (key && key->adt)
- dag_add_driver_relation(key->adt, dag, node, 1);
-
- if (ob->modifiers.first) {
- ModifierData *md;
-
- for (md = ob->modifiers.first; md; md = md->next) {
- const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
-
- if (mti->updateDepgraph) mti->updateDepgraph(md, dag, bmain, scene, ob, node);
- }
- }
- if (ob->parent) {
- node2 = dag_get_node(dag, ob->parent);
-
- switch (ob->partype) {
- case PARSKEL:
- dag_add_relation(dag, node2, node, DAG_RL_DATA_DATA | DAG_RL_OB_OB, "Parent");
- break;
- 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)
- dag_add_relation(dag, node2, node, DAG_RL_DATA_DATA | DAG_RL_OB_OB, "Lattice Parent");
- else if (ob->parent->type == OB_CURVE) {
- Curve *cu = ob->parent->data;
- if (cu->flag & CU_PATH)
- dag_add_relation(dag, node2, node, DAG_RL_DATA_OB | DAG_RL_OB_OB, "Curve Parent");
- else
- dag_add_relation(dag, node2, node, DAG_RL_OB_OB, "Curve Parent");
- }
- else
- dag_add_relation(dag, node2, node, DAG_RL_OB_OB, "Parent");
- break;
- }
- /* exception case: parent is duplivert */
- if (ob->type == OB_MBALL && (ob->parent->transflag & OB_DUPLIVERTS)) {
- dag_add_relation(dag, node2, node, DAG_RL_DATA_DATA | DAG_RL_OB_OB, "Duplivert");
- }
-
- addtoroot = 0;
- }
- if (ob->proxy) {
- node2 = dag_get_node(dag, ob->proxy);
- dag_add_relation(dag, node, node2, DAG_RL_DATA_DATA | DAG_RL_OB_OB, "Proxy");
- /* inverted relation, so addtoroot shouldn't be set to zero */
- }
-
- if (ob->transflag & OB_DUPLI) {
- if ((ob->transflag & OB_DUPLIGROUP) && ob->dup_group) {
- GroupObject *go;
- for (go = ob->dup_group->gobject.first; go; go = go->next) {
- if (go->ob) {
- node2 = dag_get_node(dag, go->ob);
- /* node2 changes node1, this keeps animations updated in groups?? not logical? */
- dag_add_relation(dag, node2, node, DAG_RL_OB_OB, "Dupligroup");
- }
- }
- }
- }
-
- /* rigidbody force fields */
- if ((ob->type == OB_MESH) || (ob->type == OB_CURVE) || (ob->type == OB_LATTICE)) {
- if (ob->rigidbody_object && scene->rigidbody_world) {
- dag_add_forcefield_relations(dag, scene, ob, node, scene->rigidbody_world->effector_weights, true, 0, "Force Field");
- }
- }
-
- /* object data drivers */
- if (ob->data) {
- AnimData *adt = BKE_animdata_from_id((ID *)ob->data);
- if (adt)
- dag_add_driver_relation(adt, dag, node, 1);
- }
-
- /* object type/data relationships */
- switch (ob->type) {
- case OB_CAMERA:
- {
- Camera *cam = (Camera *)ob->data;
-
- if (cam->dof_ob) {
- node2 = dag_get_node(dag, cam->dof_ob);
- dag_add_relation(dag, node2, node, DAG_RL_OB_OB, "Camera DoF");
- }
- break;
- }
- case OB_MBALL:
- {
- Object *mom = BKE_mball_basis_find(scene, ob);
-
- if (mom != ob) {
- node2 = dag_get_node(dag, mom);
- dag_add_relation(dag, node, node2, DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "Metaball"); /* mom depends on children! */
- }
- break;
- }
- case OB_CURVE:
- case OB_FONT:
- {
- Curve *cu = ob->data;
-
- if (cu->bevobj) {
- node2 = dag_get_node(dag, cu->bevobj);
- dag_add_relation(dag, node2, node, DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "Curve Bevel");
- }
- if (cu->taperobj) {
- node2 = dag_get_node(dag, cu->taperobj);
- dag_add_relation(dag, node2, node, DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "Curve Taper");
- }
- if (ob->type == OB_FONT) {
- /* Really rather dirty hack. needs to support font family to work
- * reliably on render export.
- *
- * This totally mimics behavior of regular verts duplication with
- * parenting. The only tricky thing here is to get list of objects
- * used for the custom "font".
- *
- * This shouldn't harm so much because this code only runs on DAG
- * rebuild and this feature is not that commonly used.
- *
- * - sergey -
- */
- if (cu->family[0] != '\n') {
- ListBase *duplilist;
- DupliObject *dob;
- duplilist = object_duplilist(G.main->eval_ctx, scene, ob);
- for (dob = duplilist->first; dob; dob = dob->next) {
- node2 = dag_get_node(dag, dob->ob);
- dag_add_relation(dag, node, node2, DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "Object Font");
- }
- free_object_duplilist(duplilist);
- }
-
- if (cu->textoncurve) {
- node2 = dag_get_node(dag, cu->textoncurve);
- /* Text on curve requires path to be evaluated for the target curve. */
- node2->eval_flags |= DAG_EVAL_NEED_CURVE_PATH;
- dag_add_relation(dag, node2, node, DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "Texture On Curve");
- }
- }
- break;
- }
- }
-
- /* material drivers */
- if (ob->totcol) {
- int a;
-
- for (a = 1; a <= ob->totcol; a++) {
- Material *ma = give_current_material(ob, a);
-
- if (ma) {
- /* recursively figure out if there are drivers, and hook these up to this object */
- dag_add_material_driver_relations(dag, node, ma);
- }
- }
- }
- else if (ob->type == OB_LAMP) {
- dag_add_lamp_driver_relations(dag, node, ob->data);
- }
-
- /* particles */
- psys = ob->particlesystem.first;
- if (psys) {
- GroupObject *go;
-
- for (; psys; psys = psys->next) {
- BoidRule *rule = NULL;
- BoidState *state = NULL;
- ParticleSettings *part = psys->part;
-
- if (part->adt) {
- dag_add_driver_relation(part->adt, dag, node, 1);
- }
-
- dag_add_relation(dag, node, node, DAG_RL_OB_DATA, "Particle-Object Relation");
-
- if (!psys_check_enabled(ob, psys, G.is_rendering))
- continue;
-
- if (ELEM(part->phystype, PART_PHYS_KEYED, PART_PHYS_BOIDS)) {
- ParticleTarget *pt = psys->targets.first;
-
- for (; pt; pt = pt->next) {
- if (pt->ob && BLI_findlink(&pt->ob->particlesystem, pt->psys - 1)) {
- node2 = dag_get_node(dag, pt->ob);
- dag_add_relation(dag, node2, node, DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "Particle Targets");
- }
- }
- }
-
- if (part->ren_as == PART_DRAW_OB && part->dup_ob) {
- node2 = dag_get_node(dag, part->dup_ob);
- /* note that this relation actually runs in the wrong direction, the problem
- * is that dupli system all have this (due to parenting), and the render
- * engine instancing assumes particular ordering of objects in list */
- dag_add_relation(dag, node, node2, DAG_RL_OB_OB, "Particle Object Visualization");
- if (part->dup_ob->type == OB_MBALL)
- dag_add_relation(dag, node, node2, DAG_RL_DATA_DATA, "Particle Object Visualization");
- }
-
- if (part->ren_as == PART_DRAW_GR && part->dup_group) {
- for (go = part->dup_group->gobject.first; go; go = go->next) {
- node2 = dag_get_node(dag, go->ob);
- dag_add_relation(dag, node2, node, DAG_RL_OB_OB, "Particle Group Visualization");
- }
- }
-
- if (part->type != PART_HAIR) {
- /* Actual code uses get_collider_cache */
- dag_add_collision_relations(dag, scene, ob, node, part->collision_group, ob->lay, eModifierType_Collision, NULL, true, "Particle Collision");
- }
- else if ((psys->flag & PSYS_HAIR_DYNAMICS) && psys->clmd && psys->clmd->coll_parms) {
- /* Hair uses cloth simulation, i.e. get_collision_objects */
- dag_add_collision_relations(dag, scene, ob, node, psys->clmd->coll_parms->group, ob->lay | scene->lay, eModifierType_Collision, NULL, true, "Hair Collision");
- }
-
- dag_add_forcefield_relations(dag, scene, ob, node, part->effector_weights, part->type == PART_HAIR, 0, "Particle Force Field");
-
- if (part->boids) {
- for (state = part->boids->states.first; state; state = state->next) {
- for (rule = state->rules.first; rule; rule = rule->next) {
- Object *ruleob = NULL;
- if (rule->type == eBoidRuleType_Avoid)
- ruleob = ((BoidRuleGoalAvoid *)rule)->ob;
- else if (rule->type == eBoidRuleType_FollowLeader)
- ruleob = ((BoidRuleFollowLeader *)rule)->ob;
-
- if (ruleob) {
- node2 = dag_get_node(dag, ruleob);
- dag_add_relation(dag, node2, node, DAG_RL_OB_DATA, "Boid Rule");
- }
- }
- }
- }
- }
- }
-
- /* object constraints */
- for (con = ob->constraints.first; con; con = con->next) {
- const bConstraintTypeInfo *cti = BKE_constraint_typeinfo_get(con);
- ListBase targets = {NULL, NULL};
- bConstraintTarget *ct;
-
- if (!cti)
- continue;
-
- /* special case for camera tracking -- it doesn't use targets to define relations */
- if (build_deg_tracking_constraints(dag, scene, scenenode, con, cti, node, false)) {
- addtoroot = 0;
- }
- else if (cti->get_constraint_targets) {
- cti->get_constraint_targets(con, &targets);
-
- for (ct = targets.first; ct; ct = ct->next) {
- Object *obt;
-
- if (ct->tar)
- obt = ct->tar;
- else
- continue;
-
- node2 = dag_get_node(dag, obt);
- 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 (ELEM(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 if (cti->type == CONSTRAINT_TYPE_SHRINKWRAP) {
- dag_add_relation(dag, node2, node, DAG_RL_DATA_DATA | DAG_RL_OB_DATA, cti->name);
- }
- else {
- dag_add_relation(dag, node2, node, DAG_RL_OB_OB, cti->name);
- }
- }
- addtoroot = 0;
- }
-
- if (cti->flush_constraint_targets)
- cti->flush_constraint_targets(con, &targets, 1);
- }
- }
-
- if (addtoroot == 1)
- dag_add_relation(dag, scenenode, node, DAG_RL_SCENE, "Scene Relation");
-}
-
-static void build_dag_group(DagForest *dag, DagNode *scenenode, Main *bmain, Scene *scene, Group *group, short mask)
-{
- GroupObject *go;
-
- if (group->id.tag & LIB_TAG_DOIT)
- return;
-
- group->id.tag |= LIB_TAG_DOIT;
-
- for (go = group->gobject.first; go; go = go->next) {
- build_dag_object(dag, scenenode, bmain, scene, go->ob, mask);
- if (go->ob->dup_group)
- build_dag_group(dag, scenenode, bmain, scene, go->ob->dup_group, mask);
- }
-}
-
-DagForest *build_dag(Main *bmain, Scene *sce, short mask)
-{
- Base *base;
- Object *ob;
- DagNode *node;
- DagNode *scenenode;
- DagForest *dag;
- DagAdjList *itA;
-
- dag = sce->theDag;
- if (dag)
- free_forest(dag);
- else {
- dag = dag_init();
- sce->theDag = dag;
- }
- dag->need_update = false;
-
- BKE_main_id_tag_idcode(bmain, ID_OB, LIB_TAG_DOIT, false);
-
- /* clear "LIB_TAG_DOIT" flag from all materials, to prevent infinite recursion problems later [#32017] */
- BKE_main_id_tag_idcode(bmain, ID_MA, LIB_TAG_DOIT, false);
- BKE_main_id_tag_idcode(bmain, ID_LA, LIB_TAG_DOIT, false);
- BKE_main_id_tag_idcode(bmain, ID_GR, LIB_TAG_DOIT, false);
-
- /* add base node for scene. scene is always the first node in DAG */
- scenenode = dag_add_node(dag, sce);
-
- /* add current scene objects */
- for (base = sce->base.first; base; base = base->next) {
- ob = base->object;
- ob->id.tag |= LIB_TAG_DOIT;
- build_dag_object(dag, scenenode, bmain, sce, ob, mask);
- if (ob->proxy)
- build_dag_object(dag, scenenode, bmain, sce, ob->proxy, mask);
- if (ob->dup_group)
- build_dag_group(dag, scenenode, bmain, sce, ob->dup_group, mask);
- }
-
- /* There might be situations when object from current scene depends on
- * objects form other scene AND objects from other scene has own
- * dependencies on objects from other scene.
- *
- * This is really important to include such indirect dependencies in order
- * to keep threaded update safe but since we don't really know if object is
- * coming from current scene or another scene we do rather stupid tag-based
- * check here: all the objects for which build_dag_object() was called are
- * getting tagged with LIB_TAG_DOIT. This way if some node has untagged
- * object we know it's an object from other scene.
- *
- * It should be enough to to it once, because if there's longer chain of
- * indirect dependencies, all the new nodes will be added to the end of the
- * list, meaning we'll keep covering them in this for loop.
- */
- for (node = sce->theDag->DagNode.first; node != NULL; node = node->next) {
- if (node->type == ID_OB) {
- ob = node->ob;
- if ((ob->id.tag & LIB_TAG_DOIT) == 0) {
- ob->id.tag |= LIB_TAG_DOIT;
- build_dag_object(dag, scenenode, bmain, sce, ob, mask);
- if (ob->proxy)
- build_dag_object(dag, scenenode, bmain, sce, ob->proxy, mask);
- if (ob->dup_group)
- build_dag_group(dag, scenenode, bmain, sce, ob->dup_group, mask);
- }
- }
- }
-
- BKE_main_id_tag_idcode(bmain, ID_GR, LIB_TAG_DOIT, false);
-
- /* Now all relations were built, but we need to solve 1 exceptional case;
- * When objects have multiple "parents" (for example parent + constraint working on same object)
- * the relation type has to be synced. One of the parents can change, and should give same event to child */
-
- /* nodes were callocced, so we can use node->color for temporal storage */
- for (node = sce->theDag->DagNode.first; node; node = node->next) {
- if (node->type == ID_OB) {
- for (itA = node->child; itA; itA = itA->next) {
- if (itA->node->type == ID_OB) {
- itA->node->color |= itA->type;
- }
- }
-
- /* also flush custom data mask */
- ((Object *)node->ob)->customdata_mask = node->customdata_mask;
-
- if (node->parent == NULL) {
- dag_add_relation(dag, scenenode, node, DAG_RL_SCENE, "Scene Relation");
- }
- }
- }
- /* now set relations equal, so that when only one parent changes, the correct recalcs are found */
- for (node = sce->theDag->DagNode.first; node; node = node->next) {
- if (node->type == ID_OB) {
- for (itA = node->child; itA; itA = itA->next) {
- if (itA->node->type == ID_OB) {
- itA->type |= itA->node->color;
- }
- }
- }
- }
-
- /* cycle detection and solving */
- // solve_cycles(dag);
-
- return dag;
-}
-
-
-void free_forest(DagForest *Dag)
-{ /* remove all nodes and deps */
- DagNode *tempN;
- DagAdjList *tempA;
- DagAdjList *itA;
- DagNode *itN = Dag->DagNode.first;
-
- while (itN) {
- itA = itN->child;
- while (itA) {
- tempA = itA;
- itA = itA->next;
- MEM_freeN(tempA);
- }
-
- itA = itN->parent;
- while (itA) {
- tempA = itA;
- itA = itA->next;
- MEM_freeN(tempA);
- }
-
- tempN = itN;
- itN = itN->next;
- MEM_freeN(tempN);
- }
-
- BLI_ghash_free(Dag->nodeHash, NULL, NULL);
- Dag->nodeHash = NULL;
- Dag->DagNode.first = NULL;
- Dag->DagNode.last = NULL;
- Dag->numNodes = 0;
-
-}
-
-DagNode *dag_find_node(DagForest *forest, void *fob)
-{
- if (forest->nodeHash)
- return BLI_ghash_lookup(forest->nodeHash, fob);
-
- return NULL;
-}
-
-static int dag_print_dependencies = 0; /* debugging */
-
-/* no checking of existence, use dag_find_node first or dag_get_node */
-DagNode *dag_add_node(DagForest *forest, void *fob)
-{
- DagNode *node;
-
- node = MEM_callocN(sizeof(DagNode), "DAG node");
- if (node) {
- node->ob = fob;
- node->color = DAG_WHITE;
-
- if (forest->ugly_hack_sorry) node->type = GS(((ID *) fob)->name); /* sorry, done for pose sorting */
- if (forest->numNodes) {
- ((DagNode *) forest->DagNode.last)->next = node;
- forest->DagNode.last = node;
- forest->numNodes++;
- }
- else {
- forest->DagNode.last = node;
- forest->DagNode.first = node;
- forest->numNodes = 1;
- }
-
- if (!forest->nodeHash)
- forest->nodeHash = BLI_ghash_ptr_new("dag_add_node gh");
- BLI_ghash_insert(forest->nodeHash, fob, node);
- }
-
- return node;
-}
-
-DagNode *dag_get_node(DagForest *forest, void *fob)
-{
- DagNode *node;
-
- node = dag_find_node(forest, fob);
- if (!node)
- node = dag_add_node(forest, fob);
- return node;
-}
-
-
-
-DagNode *dag_get_sub_node(DagForest *forest, void *fob)
-{
- DagNode *node;
- DagAdjList *mainchild, *prev = NULL;
-
- mainchild = ((DagNode *) forest->DagNode.first)->child;
- /* remove from first node (scene) adj list if present */
- while (mainchild) {
- if (mainchild->node == fob) {
- if (prev) {
- prev->next = mainchild->next;
- MEM_freeN(mainchild);
- break;
- }
- else {
- ((DagNode *) forest->DagNode.first)->child = mainchild->next;
- MEM_freeN(mainchild);
- break;
- }
- }
- prev = mainchild;
- mainchild = mainchild->next;
- }
- node = dag_find_node(forest, fob);
- if (!node)
- node = dag_add_node(forest, fob);
- return node;
-}
-
-static void dag_add_parent_relation(DagForest *UNUSED(forest), DagNode *fob1, DagNode *fob2, short rel, const char *name)
-{
- DagAdjList *itA = fob2->parent;
-
- while (itA) { /* search if relation exist already */
- if (itA->node == fob1) {
- itA->type |= rel;
- itA->count += 1;
- return;
- }
- itA = itA->next;
- }
- /* create new relation and insert at head. MALLOC alert! */
- itA = MEM_mallocN(sizeof(DagAdjList), "DAG adj list");
- itA->node = fob1;
- itA->type = rel;
- itA->count = 1;
- itA->next = fob2->parent;
- itA->name = name;
- fob2->parent = itA;
-}
-
-void dag_add_relation(DagForest *forest, DagNode *fob1, DagNode *fob2, short rel, const char *name)
-{
- DagAdjList *itA = fob1->child;
-
- /* parent relation is for cycle checking */
- dag_add_parent_relation(forest, fob1, fob2, rel, name);
-
- /* TODO(sergey): Find a better place for this. */
-#ifdef WITH_OPENSUBDIV
- if ((rel & (DAG_RL_DATA_DATA | DAG_RL_DATA_OB)) != 0) {
- if (fob1->type == ID_OB) {
- if ((fob1->eval_flags & DAG_EVAL_NEED_CPU) == 0) {
- Object *ob2 = fob2->ob;
- if (ob2->recalc & OB_RECALC_ALL) {
- /* Make sure object has all the data on CPU. */
- Object *ob1 = fob1->ob;
- ob1->recalc |= OB_RECALC_DATA;
- }
- fob1->eval_flags |= DAG_EVAL_NEED_CPU;
- }
- }
- }
-#endif
-
- while (itA) { /* search if relation exist already */
- if (itA->node == fob2) {
- itA->type |= rel;
- itA->count += 1;
- return;
- }
- itA = itA->next;
- }
- /* create new relation and insert at head. MALLOC alert! */
- itA = MEM_mallocN(sizeof(DagAdjList), "DAG adj list");
- itA->node = fob2;
- itA->type = rel;
- itA->count = 1;
- itA->next = fob1->child;
- itA->name = name;
- fob1->child = itA;
-}
-
-static const char *dag_node_name(DagForest *dag, DagNode *node)
-{
- if (node->ob == NULL)
- return "null";
- else if (dag->ugly_hack_sorry)
- return ((ID *)(node->ob))->name + 2;
- else
- return ((bPoseChannel *)(node->ob))->name;
-}
-
-static void dag_node_print_dependencies(DagForest *dag, DagNode *node)
-{
- DagAdjList *itA;
-
- printf("%s depends on:\n", dag_node_name(dag, node));
-
- for (itA = node->parent; itA; itA = itA->next)
- printf(" %s through %s\n", dag_node_name(dag, itA->node), itA->name);
- printf("\n");
-}
-
-static int dag_node_print_dependency_recurs(DagForest *dag, DagNode *node, DagNode *endnode)
-{
- DagAdjList *itA;
-
- if (node->color == DAG_BLACK)
- return 0;
-
- node->color = DAG_BLACK;
-
- if (node == endnode)
- return 1;
-
- for (itA = node->parent; itA; itA = itA->next) {
- if (dag_node_print_dependency_recurs(dag, itA->node, endnode)) {
- printf(" %s depends on %s through %s.\n", dag_node_name(dag, node), dag_node_name(dag, itA->node), itA->name);
- return 1;
- }
- }
-
- return 0;
-}
-
-static void dag_node_print_dependency_cycle(DagForest *dag, DagNode *startnode, DagNode *endnode, const char *name)
-{
- DagNode *node;
-
- for (node = dag->DagNode.first; node; node = node->next)
- node->color = DAG_WHITE;
-
- printf(" %s depends on %s through %s.\n", dag_node_name(dag, endnode), dag_node_name(dag, startnode), name);
- dag_node_print_dependency_recurs(dag, startnode, endnode);
- printf("\n");
-}
-
-static int dag_node_recurs_level(DagNode *node, int level)
-{
- DagAdjList *itA;
- int newlevel;
-
- node->color = DAG_BLACK; /* done */
- newlevel = ++level;
-
- for (itA = node->parent; itA; itA = itA->next) {
- if (itA->node->color == DAG_WHITE) {
- itA->node->ancestor_count = dag_node_recurs_level(itA->node, level);
- newlevel = MAX2(newlevel, level + itA->node->ancestor_count);
- }
- else
- newlevel = MAX2(newlevel, level + itA->node->ancestor_count);
- }
-
- return newlevel;
-}
-
-static void dag_check_cycle(DagForest *dag)
-{
- DagNode *node;
- DagAdjList *itA;
-
- dag->is_acyclic = true;
-
- /* debugging print */
- if (dag_print_dependencies)
- for (node = dag->DagNode.first; node; node = node->next)
- dag_node_print_dependencies(dag, node);
-
- /* tag nodes unchecked */
- for (node = dag->DagNode.first; node; node = node->next)
- node->color = DAG_WHITE;
-
- for (node = dag->DagNode.first; node; node = node->next) {
- if (node->color == DAG_WHITE) {
- node->ancestor_count = dag_node_recurs_level(node, 0);
- }
- }
-
- /* check relations, and print errors */
- for (node = dag->DagNode.first; node; node = node->next) {
- for (itA = node->parent; itA; itA = itA->next) {
- if (itA->node->ancestor_count > node->ancestor_count) {
- if (node->ob && itA->node->ob) {
- dag->is_acyclic = false;
- printf("Dependency cycle detected:\n");
- dag_node_print_dependency_cycle(dag, itA->node, node, itA->name);
- }
- }
- }
- }
-
- /* parent relations are only needed for cycle checking, so free now */
- for (node = dag->DagNode.first; node; node = node->next) {
- while (node->parent) {
- itA = node->parent->next;
- MEM_freeN(node->parent);
- node->parent = itA;
- }
- }
-}
-
-/* debug test functions */
-
-void graph_print_queue(DagNodeQueue *nqueue)
-{
- DagNodeQueueElem *queueElem;
-
- queueElem = nqueue->first;
- while (queueElem) {
- fprintf(stderr, "** %s %i %i-%i ", ((ID *) queueElem->node->ob)->name, queueElem->node->color, queueElem->node->DFS_dvtm, queueElem->node->DFS_fntm);
- queueElem = queueElem->next;
- }
- fprintf(stderr, "\n");
-}
-
-void graph_print_queue_dist(DagNodeQueue *nqueue)
-{
- DagNodeQueueElem *queueElem;
- int count;
-
- queueElem = nqueue->first;
- count = 0;
- while (queueElem) {
- fprintf(stderr, "** %25s %2.2i-%2.2i ", ((ID *) queueElem->node->ob)->name, queueElem->node->DFS_dvtm, queueElem->node->DFS_fntm);
- while (count < queueElem->node->DFS_dvtm - 1) { fputc(' ', stderr); count++; }
- fputc('|', stderr);
- while (count < queueElem->node->DFS_fntm - 2) { fputc('-', stderr); count++; }
- fputc('|', stderr);
- fputc('\n', stderr);
- count = 0;
- queueElem = queueElem->next;
- }
- fprintf(stderr, "\n");
-}
-
-void graph_print_adj_list(DagForest *dag)
-{
- DagNode *node;
- DagAdjList *itA;
-
- node = dag->DagNode.first;
- while (node) {
- fprintf(stderr, "node : %s col: %i", ((ID *) node->ob)->name, node->color);
- itA = node->child;
- while (itA) {
- fprintf(stderr, "-- %s ", ((ID *) itA->node->ob)->name);
-
- itA = itA->next;
- }
- fprintf(stderr, "\n");
- node = node->next;
- }
-}
-
-/* ************************ API *********************** */
-
-/* mechanism to allow editors to be informed of depsgraph updates,
- * to do their own updates based on changes... */
-static void (*EditorsUpdateIDCb)(Main *bmain, ID *id) = NULL;
-static void (*EditorsUpdateSceneCb)(Main *bmain, Scene *scene, int updated) = NULL;
-static void (*EditorsUpdateScenePreCb)(Main *bmain, Scene *scene, bool time) = NULL;
-
-void DAG_editors_update_cb(void (*id_func)(Main *bmain, ID *id),
- void (*scene_func)(Main *bmain, Scene *scene, int updated),
- void (*scene_pre_func)(Main *bmain, Scene *scene, bool time))
-{
- if (DEG_depsgraph_use_legacy()) {
- EditorsUpdateIDCb = id_func;
- EditorsUpdateSceneCb = scene_func;
- EditorsUpdateScenePreCb = scene_pre_func;
- }
- else {
- /* New dependency graph. */
- DEG_editors_set_update_cb(id_func, scene_func, scene_pre_func);
- }
-}
-
-void DAG_editors_update_pre(Main *bmain, Scene *scene, bool time)
-{
- if (DEG_depsgraph_use_legacy()) {
- if (EditorsUpdateScenePreCb != NULL) {
- EditorsUpdateScenePreCb(bmain, scene, time);
- }
- }
- else {
- DEG_editors_update_pre(bmain, scene, time);
- }
-}
-
-static void dag_editors_id_update(Main *bmain, ID *id)
-{
- if (EditorsUpdateIDCb)
- EditorsUpdateIDCb(bmain, id);
-}
-
-static void dag_editors_scene_update(Main *bmain, Scene *scene, int updated)
-{
- if (EditorsUpdateSceneCb)
- EditorsUpdateSceneCb(bmain, scene, updated);
-}
-
-/* groups with objects in this scene need to be put in the right order as well */
-static void scene_sort_groups(Main *bmain, Scene *sce)
-{
- Base *base;
- Group *group;
- GroupObject *go;
- Object *ob;
-
- /* test; are group objects all in this scene? */
- for (ob = bmain->object.first; ob; ob = ob->id.next) {
- ob->id.tag &= ~LIB_TAG_DOIT;
- }
- for (base = sce->base.first; base; base = base->next)
- base->object->id.tag |= LIB_TAG_DOIT;
-
- for (group = bmain->group.first; group; group = group->id.next) {
- for (go = group->gobject.first; go; go = go->next) {
- if ((go->ob->id.tag & LIB_TAG_DOIT) == 0)
- break;
- }
- /* this group is entirely in this scene */
- if (go == NULL) {
- ListBase listb = {NULL, NULL};
-
- for (go = group->gobject.first; go; go = go->next)
- go->ob->id.newid = (ID *)go;
-
- /* in order of sorted bases we reinsert group objects */
- for (base = sce->base.first; base; base = base->next) {
-
- if (base->object->id.newid) {
- go = (GroupObject *)base->object->id.newid;
- base->object->id.newid = NULL;
- BLI_remlink(&group->gobject, go);
- BLI_addtail(&listb, go);
- }
- }
- /* copy the newly sorted listbase */
- group->gobject = listb;
- }
- }
-
- /* newid abused for GroupObject, cleanup. */
- for (ob = bmain->object.first; ob; ob = ob->id.next) {
- ob->id.newid = NULL;
- }
-}
-
-static void dag_scene_tag_rebuild(Scene *sce)
-{
- if (sce->theDag) {
- sce->theDag->need_update = true;
- }
-}
-
-/* free the depency graph */
-static void dag_scene_free(Scene *sce)
-{
- if (sce->theDag) {
- free_forest(sce->theDag);
- MEM_freeN(sce->theDag);
- sce->theDag = NULL;
- }
-}
-
-/* Check whether object data needs to be evaluated before it
- * might be used by others.
- *
- * Means that mesh object needs to have proper derivedFinal,
- * curves-typed objects are to have proper curve cache.
- *
- * Other objects or objects which are tagged for data update are
- * not considered to be in need of evaluation.
- */
-static bool check_object_needs_evaluation(Object *object)
-{
- if (object->recalc & OB_RECALC_ALL) {
- /* Object is tagged for update anyway, no need to re-tag it. */
- return false;
- }
-
- if (object->type == OB_MESH) {
- return object->derivedFinal == NULL;
- }
- else if (ELEM(object->type, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL, OB_LATTICE)) {
- return object->curve_cache == NULL;
- }
-
- return false;
-}
-
-/* Check whether object data is tagged for update. */
-static bool check_object_tagged_for_update(Object *object)
-{
- if (object->recalc & OB_RECALC_ALL) {
- return true;
- }
-
- if (ELEM(object->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL, OB_LATTICE)) {
- ID *data_id = object->data;
- return (data_id->recalc & ID_RECALC_ALL) != 0;
- }
-
- return false;
-}
-
-/* Flush changes from tagged objects in the scene to their
- * dependencies which are not evaluated yet.
- *
- * This is needed to ensure all the dependencies are met
- * before objects gets handled by object_handle_update(),
- *
- * This is needed when visible layers are changed or changing
- * scene graph layout which involved usage of objects which
- * aren't in the scene or weren't visible yet.
- */
-static void dag_invisible_dependencies_flush(Scene *scene)
-{
- DagNode *root_node = scene->theDag->DagNode.first, *node;
- DagNodeQueue *queue;
-
- for (node = root_node; node != NULL; node = node->next) {
- node->color = DAG_WHITE;
- }
-
- queue = queue_create(DAGQUEUEALLOC);
-
- for (node = root_node; node != NULL; node = node->next) {
- if (node->color == DAG_WHITE) {
- push_stack(queue, node);
- node->color = DAG_GRAY;
-
- while (queue->count) {
- DagNode *current_node = get_top_node_queue(queue);
- DagAdjList *itA;
- bool skip = false;
-
- for (itA = current_node->child; itA; itA = itA->next) {
- if (itA->node->color == DAG_WHITE) {
- itA->node->color = DAG_GRAY;
- push_stack(queue, itA->node);
- skip = true;
- break;
- }
- }
-
- if (!skip) {
- current_node = pop_queue(queue);
-
- if (current_node->type == ID_OB) {
- Object *current_object = current_node->ob;
- if (check_object_needs_evaluation(current_object)) {
- for (itA = current_node->child; itA; itA = itA->next) {
- if (itA->node->type == ID_OB) {
- Object *object = itA->node->ob;
- if (check_object_tagged_for_update(object)) {
- current_object->recalc |= OB_RECALC_OB | OB_RECALC_DATA;
- }
- }
- }
- }
- }
- node->color = DAG_BLACK;
- }
- }
- }
- }
-
- queue_delete(queue);
-}
-
-static void dag_invisible_dependencies_check_flush(Main *bmain, Scene *scene)
-{
- if (DAG_id_type_tagged(bmain, ID_OB) ||
- DAG_id_type_tagged(bmain, ID_ME) || /* Mesh */
- DAG_id_type_tagged(bmain, ID_CU) || /* Curve */
- DAG_id_type_tagged(bmain, ID_MB) || /* MetaBall */
- DAG_id_type_tagged(bmain, ID_LT)) /* Lattice */
- {
- dag_invisible_dependencies_flush(scene);
- }
-}
-
-/* sort the base list on dependency order */
-static void dag_scene_build(Main *bmain, Scene *sce)
-{
- DagNode *node, *rootnode;
- DagNodeQueue *nqueue;
- DagAdjList *itA;
- int time;
- int skip = 0;
- ListBase tempbase;
- Base *base;
-
- BLI_listbase_clear(&tempbase);
-
- build_dag(bmain, sce, DAG_RL_ALL_BUT_DATA);
-
- dag_check_cycle(sce->theDag);
-
- nqueue = queue_create(DAGQUEUEALLOC);
-
- for (node = sce->theDag->DagNode.first; node; node = node->next) {
- node->color = DAG_WHITE;
- }
-
- time = 1;
-
- rootnode = sce->theDag->DagNode.first;
- rootnode->color = DAG_GRAY;
- time++;
- push_stack(nqueue, rootnode);
-
- while (nqueue->count) {
-
- skip = 0;
- node = get_top_node_queue(nqueue);
-
- itA = node->child;
- while (itA != NULL) {
- if (itA->node->color == DAG_WHITE) {
- itA->node->DFS_dvtm = time;
- itA->node->color = DAG_GRAY;
-
- time++;
- push_stack(nqueue, itA->node);
- skip = 1;
- break;
- }
- itA = itA->next;
- }
-
- if (!skip) {
- if (node) {
- node = pop_queue(nqueue);
- if (node->ob == sce) /* we are done */
- break;
- node->color = DAG_BLACK;
-
- time++;
- base = sce->base.first;
- while (base && base->object != node->ob)
- base = base->next;
- if (base) {
- BLI_remlink(&sce->base, base);
- BLI_addhead(&tempbase, base);
- }
- }
- }
- }
-
- /* temporal correction for circular dependencies */
- base = sce->base.first;
- while (base) {
- BLI_remlink(&sce->base, base);
- BLI_addhead(&tempbase, base);
- //if (G.debug & G_DEBUG)
- printf("cyclic %s\n", base->object->id.name);
- base = sce->base.first;
- }
-
- sce->base = tempbase;
- queue_delete(nqueue);
-
- /* all groups with objects in this scene gets resorted too */
- scene_sort_groups(bmain, sce);
-
- if (G.debug & G_DEBUG) {
- printf("\nordered\n");
- for (base = sce->base.first; base; base = base->next) {
- printf(" %s\n", base->object->id.name);
- }
- }
-
- /* Make sure that new dependencies which came from invisible layers
- * are tagged for update (if they're needed for objects which were
- * tagged for update).
- */
- dag_invisible_dependencies_check_flush(bmain, sce);
-}
-
-/* clear all dependency graphs */
-void DAG_relations_tag_update(Main *bmain)
-{
- if (DEG_depsgraph_use_legacy()) {
- Scene *sce;
- for (sce = bmain->scene.first; sce; sce = sce->id.next) {
- dag_scene_tag_rebuild(sce);
- }
- }
- else {
- /* New dependency graph. */
- DEG_relations_tag_update(bmain);
- }
-}
-
-/* rebuild dependency graph only for a given scene */
-void DAG_scene_relations_rebuild(Main *bmain, Scene *sce)
-{
- if (DEG_depsgraph_use_legacy()) {
- dag_scene_free(sce);
- DAG_scene_relations_update(bmain, sce);
- }
- else {
- /* New dependency graph. */
- DEG_scene_relations_rebuild(bmain, sce);
- }
-}
-
-/* create dependency graph if it was cleared or didn't exist yet */
-void DAG_scene_relations_update(Main *bmain, Scene *sce)
-{
- if (DEG_depsgraph_use_legacy()) {
- if (!sce->theDag || sce->theDag->need_update)
- dag_scene_build(bmain, sce);
- }
- else {
- /* New dependency graph. */
- DEG_scene_relations_update(bmain, sce);
- }
-}
-
-void DAG_scene_relations_validate(Main *bmain, Scene *sce)
-{
- if (!DEG_depsgraph_use_legacy()) {
- DEG_debug_scene_relations_validate(bmain, sce);
- }
-}
-
-void DAG_scene_free(Scene *sce)
-{
- if (DEG_depsgraph_use_legacy()) {
- if (sce->theDag) {
- free_forest(sce->theDag);
- MEM_freeN(sce->theDag);
- sce->theDag = NULL;
- }
- }
- else {
- if (sce->depsgraph) {
- DEG_graph_free(sce->depsgraph);
- sce->depsgraph = NULL;
- }
- }
-}
-
-static void lib_id_recalc_tag(Main *bmain, ID *id)
-{
- id->recalc |= ID_RECALC;
- DAG_id_type_tag(bmain, GS(id->name));
-}
-
-static void lib_id_recalc_data_tag(Main *bmain, ID *id)
-{
- id->recalc |= ID_RECALC_DATA;
- DAG_id_type_tag(bmain, GS(id->name));
-}
-
-/* node was checked to have lasttime != curtime and is if type ID_OB */
-static void flush_update_node(Main *bmain, DagNode *node, unsigned int layer, int curtime)
-{
- DagAdjList *itA;
- Object *ob, *obc;
- int oldflag;
- bool changed = false;
- unsigned int all_layer;
-
- node->lasttime = curtime;
-
- ob = node->ob;
- if (ob && (ob->recalc & OB_RECALC_ALL)) {
- all_layer = node->scelay;
-
- /* got an object node that changes, now check relations */
- for (itA = node->child; itA; itA = itA->next) {
- all_layer |= itA->lay;
- /* the relationship is visible */
- if ((itA->lay & layer)) { // XXX || (itA->node->ob == obedit)
- if (itA->node->type == ID_OB) {
- obc = itA->node->ob;
- oldflag = obc->recalc;
-
- /* got a ob->obc relation, now check if flag needs flush */
- if (ob->recalc & OB_RECALC_OB) {
- if (itA->type & DAG_RL_OB_OB) {
- //printf("ob %s changes ob %s\n", ob->id.name, obc->id.name);
- obc->recalc |= OB_RECALC_OB;
- lib_id_recalc_tag(bmain, &obc->id);
- }
- if (itA->type & DAG_RL_OB_DATA) {
- //printf("ob %s changes obdata %s\n", ob->id.name, obc->id.name);
- obc->recalc |= OB_RECALC_DATA;
- lib_id_recalc_data_tag(bmain, &obc->id);
- }
- }
- if (ob->recalc & OB_RECALC_DATA) {
- if (itA->type & DAG_RL_DATA_OB) {
- //printf("obdata %s changes ob %s\n", ob->id.name, obc->id.name);
- obc->recalc |= OB_RECALC_OB;
- lib_id_recalc_tag(bmain, &obc->id);
- }
- if (itA->type & DAG_RL_DATA_DATA) {
- //printf("obdata %s changes obdata %s\n", ob->id.name, obc->id.name);
- obc->recalc |= OB_RECALC_DATA;
- lib_id_recalc_data_tag(bmain, &obc->id);
- }
- }
- if (oldflag != obc->recalc) changed = 1;
- }
- }
- }
- /* even nicer, we can clear recalc flags... */
- if ((all_layer & layer) == 0) { // XXX && (ob != obedit)) {
- /* but existing displaylists or derivedmesh should be freed */
- if (ob->recalc & OB_RECALC_DATA)
- BKE_object_free_derived_caches(ob);
-
- ob->recalc &= ~OB_RECALC_ALL;
- }
- }
-
- /* check case where child changes and parent forcing obdata to change */
- /* should be done regardless if this ob has recalc set */
- /* could merge this in with loop above...? (ton) */
- for (itA = node->child; itA; itA = itA->next) {
- /* the relationship is visible */
- if ((itA->lay & layer)) { // XXX || (itA->node->ob == obedit)
- if (itA->node->type == ID_OB) {
- obc = itA->node->ob;
- /* child moves */
- if ((obc->recalc & OB_RECALC_ALL) == OB_RECALC_OB) {
- /* parent has deforming info */
- if (itA->type & (DAG_RL_OB_DATA | DAG_RL_DATA_DATA)) {
- // printf("parent %s changes ob %s\n", ob->id.name, obc->id.name);
- obc->recalc |= OB_RECALC_DATA;
- lib_id_recalc_data_tag(bmain, &obc->id);
- }
- }
- }
- }
- }
-
- /* we only go deeper if node not checked or something changed */
- for (itA = node->child; itA; itA = itA->next) {
- if (changed || itA->node->lasttime != curtime)
- flush_update_node(bmain, itA->node, layer, curtime);
- }
-
-}
-
-/* node was checked to have lasttime != curtime, and is of type ID_OB */
-static unsigned int flush_layer_node(Scene *sce, DagNode *node, int curtime)
-{
- DagAdjList *itA;
-
- node->lasttime = curtime;
- node->lay = node->scelay;
-
- for (itA = node->child; itA; itA = itA->next) {
- if (itA->node->type == ID_OB) {
- if (itA->node->lasttime != curtime) {
- itA->lay = flush_layer_node(sce, itA->node, curtime); /* lay is only set once for each relation */
- }
- else {
- itA->lay = itA->node->lay;
- }
-
- node->lay |= itA->lay;
- }
- }
-
- return node->lay;
-}
-
-/* node was checked to have lasttime != curtime, and is of type ID_OB */
-static void flush_pointcache_reset(Main *bmain, Scene *scene, DagNode *node,
- int curtime, unsigned int lay, bool reset)
-{
- DagAdjList *itA;
- Object *ob;
-
- node->lasttime = curtime;
-
- for (itA = node->child; itA; itA = itA->next) {
- if (itA->node->type == ID_OB) {
- if (itA->node->lasttime != curtime) {
- ob = (Object *)(itA->node->ob);
-
- if (reset || (ob->recalc & OB_RECALC_ALL)) {
- if (BKE_ptcache_object_reset(scene, ob, PTCACHE_RESET_DEPSGRAPH)) {
- /* Don't tag nodes which are on invisible layer. */
- if (itA->node->lay & lay) {
- ob->recalc |= OB_RECALC_DATA;
- lib_id_recalc_data_tag(bmain, &ob->id);
- }
- }
-
- flush_pointcache_reset(bmain, scene, itA->node, curtime, lay, true);
- }
- else
- flush_pointcache_reset(bmain, scene, itA->node, curtime, lay, false);
- }
- }
- }
-}
-
-/* flush layer flags to dependencies */
-static void dag_scene_flush_layers(Scene *sce, int lay)
-{
- DagNode *node, *firstnode;
- DagAdjList *itA;
- Base *base;
- int lasttime;
-
- firstnode = sce->theDag->DagNode.first; /* always scene node */
-
- for (itA = firstnode->child; itA; itA = itA->next)
- itA->lay = 0;
-
- sce->theDag->time++; /* so we know which nodes were accessed */
- lasttime = sce->theDag->time;
-
- /* update layer flags in nodes */
- for (base = sce->base.first; base; base = base->next) {
- node = dag_get_node(sce->theDag, base->object);
- node->scelay = base->object->lay;
- }
-
- /* ensure cameras are set as if they are on a visible layer, because
- * they ared still used for rendering or setting the camera view
- *
- * XXX, this wont work for local view / unlocked camera's */
- if (sce->camera) {
- node = dag_get_node(sce->theDag, sce->camera);
- node->scelay |= lay;
- }
-
-#ifdef DURIAN_CAMERA_SWITCH
- {
- TimeMarker *m;
-
- for (m = sce->markers.first; m; m = m->next) {
- if (m->camera) {
- node = dag_get_node(sce->theDag, m->camera);
- node->scelay |= lay;
- }
- }
- }
-#endif
-
- /* flush layer nodes to dependencies */
- for (itA = firstnode->child; itA; itA = itA->next)
- if (itA->node->lasttime != lasttime && itA->node->type == ID_OB)
- flush_layer_node(sce, itA->node, lasttime);
-}
-
-static void dag_tag_renderlayers(Scene *sce, unsigned int lay)
-{
- if (sce->nodetree) {
- bNode *node;
- Base *base;
- unsigned int lay_changed = 0;
-
- for (base = sce->base.first; base; base = base->next)
- if (base->lay & lay)
- if (base->object->recalc)
- lay_changed |= base->lay;
-
- for (node = sce->nodetree->nodes.first; node; node = node->next) {
- if (node->id == (ID *)sce) {
- SceneRenderLayer *srl = BLI_findlink(&sce->r.layers, node->custom1);
- if (srl && (srl->lay & lay_changed))
- nodeUpdate(sce->nodetree, node);
- }
- }
- }
-}
-
-/* flushes all recalc flags in objects down the dependency tree */
-void DAG_scene_flush_update(Main *bmain, Scene *sce, unsigned int lay, const short time)
-{
- DagNode *firstnode;
- DagAdjList *itA;
- Object *ob;
- int lasttime;
-
- if (!DEG_depsgraph_use_legacy()) {
- DEG_scene_flush_update(bmain, sce);
- return;
- }
-
- if (sce->theDag == NULL || sce->theDag->need_update) {
- printf("DAG zero... not allowed to happen!\n");
- DAG_scene_relations_update(bmain, sce);
- }
-
- firstnode = sce->theDag->DagNode.first; /* always scene node */
-
- /* first we flush the layer flags */
- dag_scene_flush_layers(sce, lay);
-
- /* then we use the relationships + layer info to flush update events */
- sce->theDag->time++; /* so we know which nodes were accessed */
- lasttime = sce->theDag->time;
- for (itA = firstnode->child; itA; itA = itA->next)
- if (itA->node->lasttime != lasttime && itA->node->type == ID_OB)
- flush_update_node(bmain, itA->node, lay, lasttime);
-
- /* if update is not due to time change, do pointcache clears */
- if (!time) {
- sce->theDag->time++; /* so we know which nodes were accessed */
- lasttime = sce->theDag->time;
- for (itA = firstnode->child; itA; itA = itA->next) {
- if (itA->node->lasttime != lasttime && itA->node->type == ID_OB) {
- ob = (Object *)(itA->node->ob);
-
- if (ob->recalc & OB_RECALC_ALL) {
- if (BKE_ptcache_object_reset(sce, ob, PTCACHE_RESET_DEPSGRAPH)) {
- ob->recalc |= OB_RECALC_DATA;
- lib_id_recalc_data_tag(bmain, &ob->id);
- }
-
- flush_pointcache_reset(bmain, sce, itA->node, lasttime,
- lay, true);
- }
- else
- flush_pointcache_reset(bmain, sce, itA->node, lasttime,
- lay, false);
- }
- }
- }
-
- dag_tag_renderlayers(sce, lay);
-}
-
-static bool modifier_nlastrips_use_time(ListBase *strips)
-{
- NlaStrip *strip;
-
- if (strips) {
- for (strip = strips->first; strip; strip = strip->next) {
- if (modifier_nlastrips_use_time(&strip->strips)) {
- return true;
- }
- else if (strip->act) {
- FCurve *fcu;
-
- for (fcu = strip->act->curves.first; fcu; fcu = fcu->next) {
- if (fcu->rna_path && strstr(fcu->rna_path, "modifiers["))
- return true;
- }
- }
- }
- }
-
- return false;
-}
-
-static bool object_modifiers_use_time(Object *ob)
-{
- ModifierData *md;
-
- /* check if a modifier in modifier stack needs time input */
- for (md = ob->modifiers.first; md; md = md->next) {
- if (modifier_dependsOnTime(md))
- return true;
- }
-
- /* check whether any modifiers are animated */
- if (ob->adt) {
- AnimData *adt = ob->adt;
- NlaTrack *nlt;
- FCurve *fcu;
-
- /* action - check for F-Curves with paths containing 'modifiers[' */
- if (adt->action) {
- for (fcu = adt->action->curves.first; fcu; fcu = fcu->next) {
- if (fcu->rna_path && strstr(fcu->rna_path, "modifiers["))
- return true;
- }
- }
-
- /* This here allows modifier properties to get driven and still update properly
- *
- * Workaround to get [#26764] (e.g. subsurf levels not updating when animated/driven)
- * working, without the updating problems ([#28525] [#28690] [#28774] [#28777]) caused
- * by the RNA updates cache introduced in r.38649
- */
- for (fcu = adt->drivers.first; fcu; fcu = fcu->next) {
- if (fcu->rna_path && strstr(fcu->rna_path, "modifiers["))
- return true;
- }
-
- /* Also check NLA Strips... [#T45938] */
- for (nlt = adt->nla_tracks.first; nlt; nlt = nlt->next) {
- if (modifier_nlastrips_use_time(&nlt->strips))
- return true;
- }
- }
-
- return false;
-}
-
-static short animdata_use_time(AnimData *adt)
-{
- NlaTrack *nlt;
-
- if (adt == NULL) return 0;
-
- /* check action - only if assigned, and it has anim curves */
- if (adt->action && adt->action->curves.first)
- return 1;
-
- /* check NLA tracks + strips */
- for (nlt = adt->nla_tracks.first; nlt; nlt = nlt->next) {
- if (nlt->strips.first)
- return 1;
- }
-
- /* If we have drivers, more likely than not, on a frame change
- * they'll need updating because their owner changed
- *
- * This is kindof a hack to get around a whole host of problems
- * involving drivers using non-object datablock data (which the
- * depsgraph currently has no way of representing let alone correctly
- * dependency sort+tagging). By doing this, at least we ensure that
- * some commonly attempted drivers (such as scene -> current frame;
- * see "Driver updates fail" thread on Bf-committers dated July 2)
- * will work correctly, and that other non-object datablocks will have
- * their drivers update at least on frame change.
- *
- * -- Aligorith, July 4 2011
- */
- if (adt->drivers.first)
- return 1;
-
- return 0;
-}
-
-static void dag_object_time_update_flags(Main *bmain, Scene *scene, Object *ob)
-{
- if (ob->constraints.first) {
- bConstraint *con;
- for (con = ob->constraints.first; con; con = con->next) {
- const bConstraintTypeInfo *cti = BKE_constraint_typeinfo_get(con);
- ListBase targets = {NULL, NULL};
- bConstraintTarget *ct;
-
- if (cti) {
- /* special case for camera tracking -- it doesn't use targets to define relations */
- if (ELEM(cti->type,
- CONSTRAINT_TYPE_FOLLOWTRACK,
- CONSTRAINT_TYPE_CAMERASOLVER,
- CONSTRAINT_TYPE_OBJECTSOLVER,
- CONSTRAINT_TYPE_TRANSFORM_CACHE))
- {
- ob->recalc |= OB_RECALC_OB;
- }
- else if (cti->get_constraint_targets) {
- cti->get_constraint_targets(con, &targets);
-
- for (ct = targets.first; ct; ct = ct->next) {
- if (ct->tar) {
- ob->recalc |= OB_RECALC_OB;
- break;
- }
- }
-
- if (cti->flush_constraint_targets)
- cti->flush_constraint_targets(con, &targets, 1);
- }
-
- }
- }
- }
-
- if (ob->parent) {
- /* motion path or bone child */
- if (ob->parent->type == OB_CURVE || ob->parent->type == OB_ARMATURE) ob->recalc |= OB_RECALC_OB;
- }
-
-#if 0 // XXX old animation system
- if (ob->nlastrips.first) {
- if (ob->dup_group) {
- bActionStrip *strip;
- /* this case is for groups with nla, whilst nla target has no action or nla */
- for (strip = ob->nlastrips.first; strip; strip = strip->next) {
- if (strip->object)
- strip->object->recalc |= OB_RECALC_ALL;
- }
- }
- }
-#endif // XXX old animation system
-
- if (animdata_use_time(ob->adt)) {
- ob->recalc |= OB_RECALC_OB;
- ob->adt->recalc |= ADT_RECALC_ANIM;
- }
-
- if ((ob->adt) && (ob->type == OB_ARMATURE)) ob->recalc |= OB_RECALC_DATA;
-
- if (object_modifiers_use_time(ob)) ob->recalc |= OB_RECALC_DATA;
- if ((ob->pose) && (ob->pose->flag & POSE_CONSTRAINTS_TIMEDEPEND)) ob->recalc |= OB_RECALC_DATA;
-
- // XXX: scene here may not be the scene that contains the rigidbody world affecting this!
- if (ob->rigidbody_object && BKE_scene_check_rigidbody_active(scene))
- ob->recalc |= OB_RECALC_OB;
-
- {
- AnimData *adt = BKE_animdata_from_id((ID *)ob->data);
- Mesh *me;
- Curve *cu;
- Lattice *lt;
-
- switch (ob->type) {
- case OB_MESH:
- me = ob->data;
- if (me->key) {
- if (!(ob->shapeflag & OB_SHAPE_LOCK)) {
- ob->recalc |= OB_RECALC_DATA;
- }
- }
- if (ob->particlesystem.first)
- ob->recalc |= OB_RECALC_DATA;
- break;
- case OB_CURVE:
- case OB_SURF:
- cu = ob->data;
- if (cu->key) {
- if (!(ob->shapeflag & OB_SHAPE_LOCK)) {
- ob->recalc |= OB_RECALC_DATA;
- }
- }
- break;
- case OB_FONT:
- cu = ob->data;
- if (cu->str && cu->vfont) {
- /* Can be in the curve-cache or the curve. */
- if (ob->curve_cache && !BLI_listbase_is_empty(&ob->curve_cache->disp)) {
- /* pass */
- }
- else if (!BLI_listbase_is_empty(&cu->nurb)) {
- /* pass */
- }
- else {
- ob->recalc |= OB_RECALC_DATA;
- }
- }
- break;
- case OB_LATTICE:
- lt = ob->data;
- if (lt->key) {
- if (!(ob->shapeflag & OB_SHAPE_LOCK)) {
- ob->recalc |= OB_RECALC_DATA;
- }
- }
- break;
- case OB_MBALL:
- if (ob->transflag & OB_DUPLI) ob->recalc |= OB_RECALC_DATA;
- break;
- case OB_EMPTY:
- /* update animated images */
- if (ob->empty_drawtype == OB_EMPTY_IMAGE && ob->data)
- if (BKE_image_is_animated(ob->data))
- ob->recalc |= OB_RECALC_DATA;
- break;
- }
-
- if (animdata_use_time(adt)) {
- ob->recalc |= OB_RECALC_DATA;
- adt->recalc |= ADT_RECALC_ANIM;
- }
-
- if (ob->particlesystem.first) {
- ParticleSystem *psys = ob->particlesystem.first;
-
- for (; psys; psys = psys->next) {
- if (psys_check_enabled(ob, psys, G.is_rendering)) {
- ob->recalc |= OB_RECALC_DATA;
- break;
- }
- }
- }
- }
-
- if (ob->recalc & OB_RECALC_OB)
- lib_id_recalc_tag(bmain, &ob->id);
- if (ob->recalc & OB_RECALC_DATA)
- lib_id_recalc_data_tag(bmain, &ob->id);
-
-}
-
-/* recursively update objects in groups, each group is done at most once */
-static void dag_group_update_flags(Main *bmain, Scene *scene, Group *group, const bool do_time)
-{
- GroupObject *go;
-
- if (group->id.tag & LIB_TAG_DOIT)
- return;
-
- group->id.tag |= LIB_TAG_DOIT;
-
- for (go = group->gobject.first; go; go = go->next) {
- if (do_time)
- dag_object_time_update_flags(bmain, scene, go->ob);
- if (go->ob->dup_group)
- dag_group_update_flags(bmain, scene, go->ob->dup_group, do_time);
- }
-}
-
-/* flag all objects that need recalc, for changes in time for example */
-/* do_time: make this optional because undo resets objects to their animated locations without this */
-void DAG_scene_update_flags(Main *bmain, Scene *scene, unsigned int lay, const bool do_time, const bool do_invisible_flush)
-{
- Base *base;
- Object *ob;
- Group *group;
- GroupObject *go;
- Scene *sce_iter;
-
- BKE_main_id_tag_idcode(bmain, ID_GR, LIB_TAG_DOIT, false);
-
- /* set ob flags where animated systems are */
- for (SETLOOPER(scene, sce_iter, base)) {
- ob = base->object;
-
- if (do_time) {
- /* now if DagNode were part of base, the node->lay could be checked... */
- /* we do all now, since the scene_flush checks layers and clears recalc flags even */
-
- /* NOTE: "sce_iter" not "scene" so that rigidbodies in background scenes work
- * (i.e. muting + rbw availability can be checked and tagged properly) [#33970]
- */
- dag_object_time_update_flags(bmain, sce_iter, ob);
- }
-
- /* recursively tag groups with LIB_TAG_DOIT, and update flags for objects */
- if (ob->dup_group)
- dag_group_update_flags(bmain, scene, ob->dup_group, do_time);
- }
-
- for (sce_iter = scene; sce_iter; sce_iter = sce_iter->set)
- DAG_scene_flush_update(bmain, sce_iter, lay, 1);
-
- if (do_time) {
- /* test: set time flag, to disable baked systems to update */
- for (SETLOOPER(scene, sce_iter, base)) {
- ob = base->object;
- if (ob->recalc & OB_RECALC_ALL)
- ob->recalc |= OB_RECALC_TIME;
- }
-
- /* hrmf... an exception to look at once, for invisible camera object we do it over */
- if (scene->camera)
- dag_object_time_update_flags(bmain, scene, scene->camera);
- }
-
- /* and store the info in groupobject */
- for (group = bmain->group.first; group; group = group->id.next) {
- if (group->id.tag & LIB_TAG_DOIT) {
- for (go = group->gobject.first; go; go = go->next) {
- go->recalc = go->ob->recalc;
- // printf("ob %s recalc %d\n", go->ob->id.name, go->recalc);
- }
- group->id.tag &= ~LIB_TAG_DOIT;
- }
- }
-
- if (do_invisible_flush) {
- dag_invisible_dependencies_check_flush(bmain, scene);
- }
-}
-
-/* struct returned by DagSceneLayer */
-typedef struct DagSceneLayer {
- struct DagSceneLayer *next, *prev;
- Scene *scene;
- unsigned int layer;
-} DagSceneLayer;
-
-/* returns visible scenes with valid DAG */
-static void dag_current_scene_layers(Main *bmain, ListBase *lb)
-{
- wmWindowManager *wm;
- wmWindow *win;
-
- BLI_listbase_clear(lb);
-
- /* if we have a windowmanager, look into windows */
- if ((wm = bmain->wm.first)) {
-
- BKE_main_id_flag_listbase(&bmain->scene, LIB_TAG_DOIT, 1);
-
- for (win = wm->windows.first; win; win = win->next) {
- if (win->screen && win->screen->scene->theDag) {
- Scene *scene = win->screen->scene;
- DagSceneLayer *dsl;
-
- if (scene->id.tag & LIB_TAG_DOIT) {
- dsl = MEM_mallocN(sizeof(DagSceneLayer), "dag scene layer");
-
- BLI_addtail(lb, dsl);
-
- dsl->scene = scene;
- dsl->layer = BKE_screen_visible_layers(win->screen, scene);
-
- scene->id.tag &= ~LIB_TAG_DOIT;
- }
- else {
- /* It is possible that multiple windows shares the same scene
- * and have different layers visible.
- *
- * Here we deal with such cases by squashing layers bits from
- * multiple windoew to the DagSceneLayer.
- *
- * TODO(sergey): Such a lookup could be optimized perhaps,
- * however should be fine for now since we usually have only
- * few open windows.
- */
- for (dsl = lb->first; dsl; dsl = dsl->next) {
- if (dsl->scene == scene) {
- dsl->layer |= BKE_screen_visible_layers(win->screen, scene);
- break;
- }
- }
- }
- }
- }
- }
- else {
- /* if not, use the first sce */
- DagSceneLayer *dsl = MEM_mallocN(sizeof(DagSceneLayer), "dag scene layer");
-
- BLI_addtail(lb, dsl);
-
- dsl->scene = bmain->scene.first;
- dsl->layer = dsl->scene->lay;
-
- /* XXX for background mode, we should get the scene
- * from somewhere, for the -S option, but it's in
- * the context, how to get it here? */
- }
-}
-
-static void dag_group_on_visible_update(Scene *scene, Group *group)
-{
- GroupObject *go;
-
- if (group->id.tag & LIB_TAG_DOIT)
- return;
-
- group->id.tag |= LIB_TAG_DOIT;
-
- for (go = group->gobject.first; go; go = go->next) {
- if (ELEM(go->ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL, OB_LATTICE)) {
- go->ob->recalc |= OB_RECALC_DATA;
- go->ob->id.tag |= LIB_TAG_DOIT;
- lib_id_recalc_tag(G.main, &go->ob->id);
- }
- if (go->ob->proxy_from) {
- go->ob->recalc |= OB_RECALC_OB;
- go->ob->id.tag |= LIB_TAG_DOIT;
- lib_id_recalc_tag(G.main, &go->ob->id);
- }
-
- if (go->ob->dup_group)
- dag_group_on_visible_update(scene, go->ob->dup_group);
- }
-}
-
-void DAG_on_visible_update(Main *bmain, const bool do_time)
-{
- ListBase listbase;
- DagSceneLayer *dsl;
-
- if (!DEG_depsgraph_use_legacy()) {
- /* Inform new dependnecy graphs about visibility changes. */
- DEG_on_visible_update(bmain, do_time);
- return;
- }
-
- /* get list of visible scenes and layers */
- dag_current_scene_layers(bmain, &listbase);
-
- for (dsl = listbase.first; dsl; dsl = dsl->next) {
- Scene *scene = dsl->scene;
- Scene *sce_iter;
- Base *base;
- Object *ob;
- DagNode *node;
- unsigned int lay = dsl->layer, oblay;
-
- /* derivedmeshes and displists are not saved to file so need to be
- * remade, tag them so they get remade in the scene update loop,
- * note armature poses or object matrices are preserved and do not
- * require updates, so we skip those */
- for (sce_iter = scene; sce_iter; sce_iter = sce_iter->set)
- dag_scene_flush_layers(sce_iter, lay);
-
- BKE_main_id_tag_idcode(bmain, ID_GR, LIB_TAG_DOIT, false);
-
- for (SETLOOPER(scene, sce_iter, base)) {
- ob = base->object;
- node = (sce_iter->theDag) ? dag_get_node(sce_iter->theDag, ob) : NULL;
- oblay = (node) ? node->lay : ob->lay;
-
- if ((oblay & lay) & ~scene->lay_updated) {
- /* TODO(sergey): Why do we need armature here now but didn't need before? */
- if (ELEM(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL, OB_LATTICE, OB_ARMATURE)) {
- ob->recalc |= OB_RECALC_DATA;
- lib_id_recalc_tag(bmain, &ob->id);
- }
- /* This should not be needed here, but in some cases, like after a redo, we can end up with
- * a wrong final matrix (see T42472).
- * Quoting Sergey, this comes from BKE_object_handle_update_ex, which is calling
- * BKE_object_where_is_calc_ex when it shouldn't, but that issue is not easily fixable.
- */
- else {
- ob->recalc |= OB_RECALC_OB;
- lib_id_recalc_tag(bmain, &ob->id);
- }
- if (ob->proxy && (ob->proxy_group == NULL)) {
- ob->proxy->recalc |= OB_RECALC_DATA;
- lib_id_recalc_tag(bmain, &ob->id);
- }
- if (ob->dup_group)
- dag_group_on_visible_update(scene, ob->dup_group);
- }
- }
-
- BKE_main_id_tag_idcode(bmain, ID_GR, LIB_TAG_DOIT, false);
-
- /* now tag update flags, to ensure deformers get calculated on redraw */
- DAG_scene_update_flags(bmain, scene, lay, do_time, true);
- scene->lay_updated |= lay;
- }
-
- BLI_freelistN(&listbase);
-
- /* hack to get objects updating on layer changes */
- DAG_id_type_tag(bmain, ID_OB);
-
- /* so masks update on load */
- if (bmain->mask.first) {
- Mask *mask;
-
- for (mask = bmain->mask.first; mask; mask = mask->id.next) {
- DAG_id_tag_update(&mask->id, 0);
- }
- }
-}
-
-static void dag_id_flush_update__isDependentTexture(
- void *userData, Object *UNUSED(ob), ID **idpoin, int UNUSED(cb_flag))
-{
- struct { ID *id; bool is_dependent; } *data = userData;
-
- if (*idpoin && GS((*idpoin)->name) == ID_TE) {
- if (data->id == (*idpoin))
- data->is_dependent = 1;
- }
-}
-
-static void dag_id_flush_update(Main *bmain, Scene *sce, ID *id)
-{
- Object *obt, *ob = NULL;
- short idtype;
-
- /* here we flush a few things before actual scene wide flush, mostly
- * due to only objects and not other datablocks being in the depsgraph */
-
- /* set flags & pointcache for object */
- if (GS(id->name) == ID_OB) {
- ob = (Object *)id;
- BKE_ptcache_object_reset(sce, ob, PTCACHE_RESET_DEPSGRAPH);
-
- /* So if someone tagged object recalc directly,
- * id_tag_update bit-field stays relevant
- */
- if (ob->recalc & OB_RECALC_ALL) {
- DAG_id_type_tag(bmain, GS(id->name));
- }
-
- if (ob->recalc & OB_RECALC_DATA) {
- /* all users of this ob->data should be checked */
- id = ob->data;
-
- /* no point in trying in this cases */
- if (id && id->us <= 1) {
- dag_editors_id_update(bmain, id);
- id = NULL;
- }
- }
- }
-
- /* set flags & pointcache for object data */
- if (id) {
- idtype = GS(id->name);
-
-
- if (OB_DATA_SUPPORT_ID(idtype)) {
- for (obt = bmain->object.first; obt; obt = obt->id.next) {
- if (!(ob && obt == ob) && obt->data == id) {
- obt->recalc |= OB_RECALC_DATA;
- lib_id_recalc_data_tag(bmain, &obt->id);
- BKE_ptcache_object_reset(sce, obt, PTCACHE_RESET_DEPSGRAPH);
- }
- }
- }
- else if (idtype == ID_VF) {
- for (obt = bmain->object.first; obt; obt = obt->id.next) {
- if (obt->type == OB_FONT) {
- Curve *cu = obt->data;
- if (ELEM((struct VFont *)id, CURVE_VFONT_ANY(cu))) {
- obt->recalc |= OB_RECALC_DATA;
- lib_id_recalc_data_tag(bmain, &obt->id);
- }
- }
- }
- }
-
- /* set flags based on textures - can influence depgraph via modifiers */
- if (idtype == ID_TE) {
- for (obt = bmain->object.first; obt; obt = obt->id.next) {
- struct { ID *id; bool is_dependent; } data;
- data.id = id;
- data.is_dependent = 0;
-
- modifiers_foreachIDLink(obt, dag_id_flush_update__isDependentTexture, &data);
- if (data.is_dependent) {
- obt->recalc |= OB_RECALC_DATA;
- lib_id_recalc_data_tag(bmain, &obt->id);
- }
-
- /* particle settings can use the texture as well */
- if (obt->particlesystem.first) {
- ParticleSystem *psys = obt->particlesystem.first;
- MTex **mtexp, *mtex;
- int a;
- for (; psys; psys = psys->next) {
- mtexp = psys->part->mtex;
- for (a = 0; a < MAX_MTEX; a++, mtexp++) {
- mtex = *mtexp;
- if (mtex && mtex->tex == (Tex *)id) {
- obt->recalc |= OB_RECALC_DATA;
- lib_id_recalc_data_tag(bmain, &obt->id);
-
- if (mtex->mapto & PAMAP_INIT)
- psys->recalc |= PSYS_RECALC_RESET;
- if (mtex->mapto & PAMAP_CHILD)
- psys->recalc |= PSYS_RECALC_CHILD;
-
- BKE_ptcache_object_reset(sce, obt, PTCACHE_RESET_DEPSGRAPH);
- }
- }
- }
- }
- }
- }
-
- /* set flags based on ShapeKey */
- if (idtype == ID_KE) {
- for (obt = bmain->object.first; obt; obt = obt->id.next) {
- Key *key = BKE_key_from_object(obt);
- if (!(ob && obt == ob) && ((ID *)key == id)) {
- obt->flag |= (OB_RECALC_OB | OB_RECALC_DATA);
- lib_id_recalc_tag(bmain, &obt->id);
- lib_id_recalc_data_tag(bmain, &obt->id);
- BKE_ptcache_object_reset(sce, obt, PTCACHE_RESET_DEPSGRAPH);
- }
- }
- }
-
- /* set flags based on particle settings */
- if (idtype == ID_PA) {
- ParticleSystem *psys;
- for (obt = bmain->object.first; obt; obt = obt->id.next)
- for (psys = obt->particlesystem.first; psys; psys = psys->next)
- if (&psys->part->id == id)
- BKE_ptcache_object_reset(sce, obt, PTCACHE_RESET_DEPSGRAPH);
- }
-
- if (ELEM(idtype, ID_MA, ID_TE)) {
- obt = sce->basact ? sce->basact->object : NULL;
- if (obt && obt->mode & OB_MODE_TEXTURE_PAINT) {
- BKE_texpaint_slots_refresh_object(sce, obt);
- BKE_paint_proj_mesh_data_check(sce, obt, NULL, NULL, NULL, NULL);
- GPU_drawobject_free(obt->derivedFinal);
- }
- }
-
- if (idtype == ID_MC) {
- MovieClip *clip = (MovieClip *) id;
-
- BKE_tracking_dopesheet_tag_update(&clip->tracking);
-
- for (obt = bmain->object.first; obt; obt = obt->id.next) {
- bConstraint *con;
- for (con = obt->constraints.first; con; con = con->next) {
- const bConstraintTypeInfo *cti = BKE_constraint_typeinfo_get(con);
- if (ELEM(cti->type, CONSTRAINT_TYPE_FOLLOWTRACK, CONSTRAINT_TYPE_CAMERASOLVER,
- CONSTRAINT_TYPE_OBJECTSOLVER))
- {
- obt->recalc |= OB_RECALC_OB;
- lib_id_recalc_tag(bmain, &obt->id);
- break;
- }
- }
- }
-
- if (sce->nodetree) {
- bNode *node;
-
- for (node = sce->nodetree->nodes.first; node; node = node->next) {
- if (node->id == id) {
- nodeUpdate(sce->nodetree, node);
- }
- }
- }
- }
-
- /* Not pretty to iterate all the nodes here, but it's as good as it
- * could be with the current depsgraph design/
- */
- if (idtype == ID_IM) {
- FOREACH_NODETREE(bmain, ntree, parent_id) {
- if (ntree->type == NTREE_SHADER) {
- bNode *node;
- for (node = ntree->nodes.first; node; node = node->next) {
- if (node->id == id) {
- lib_id_recalc_tag(bmain, &ntree->id);
- break;
- }
- }
- }
- } FOREACH_NODETREE_END
- }
-
- if (idtype == ID_MSK) {
- if (sce->nodetree) {
- bNode *node;
-
- for (node = sce->nodetree->nodes.first; node; node = node->next) {
- if (node->id == id) {
- nodeUpdate(sce->nodetree, node);
- }
- }
- }
- }
-
- /* camera's matrix is used to orient reconstructed stuff,
- * so it should happen tracking-related constraints recalculation
- * when camera is changing (sergey) */
- if (sce->camera && &sce->camera->id == id) {
- MovieClip *clip = BKE_object_movieclip_get(sce, sce->camera, true);
-
- if (clip)
- dag_id_flush_update(bmain, sce, &clip->id);
- }
-
- /* update editors */
- dag_editors_id_update(bmain, id);
- }
-}
-
-void DAG_ids_flush_tagged(Main *bmain)
-{
- ListBase listbase;
- DagSceneLayer *dsl;
- ListBase *lbarray[MAX_LIBARRAY];
- int a;
- bool do_flush = false;
-
- if (!DEG_depsgraph_use_legacy()) {
- DEG_ids_flush_tagged(bmain);
- return;
- }
-
- /* get list of visible scenes and layers */
- dag_current_scene_layers(bmain, &listbase);
-
- if (BLI_listbase_is_empty(&listbase))
- return;
-
- /* loop over all ID types */
- a = set_listbasepointers(bmain, lbarray);
-
- while (a--) {
- ListBase *lb = lbarray[a];
- ID *id = lb->first;
-
- if (id && bmain->id_tag_update[BKE_idcode_to_index(GS(id->name))]) {
- for (; id; id = id->next) {
- if (id->recalc & ID_RECALC_ALL) {
- for (dsl = listbase.first; dsl; dsl = dsl->next)
- dag_id_flush_update(bmain, dsl->scene, id);
-
- do_flush = true;
- }
- }
- }
- }
-
- /* flush changes to other objects */
- if (do_flush) {
- for (dsl = listbase.first; dsl; dsl = dsl->next)
- DAG_scene_flush_update(bmain, dsl->scene, dsl->layer, 0);
- }
-
- BLI_freelistN(&listbase);
-}
-
-void DAG_ids_check_recalc(Main *bmain, Scene *scene, bool time)
-{
- ListBase *lbarray[MAX_LIBARRAY];
- int a;
- bool updated = false;
-
- if (!DEG_depsgraph_use_legacy()) {
- DEG_ids_check_recalc(bmain, scene, time);
- return;
- }
-
- /* loop over all ID types */
- a = set_listbasepointers(bmain, lbarray);
-
- while (a--) {
- ListBase *lb = lbarray[a];
- ID *id = lb->first;
-
- if (id && bmain->id_tag_update[BKE_idcode_to_index(GS(id->name))]) {
- updated = true;
- break;
- }
- }
-
- dag_editors_scene_update(bmain, scene, (updated || time));
-}
-
-/* It is possible that scene_update_post and frame_update_post handlers
- * will modify objects. The issue is that DAG_ids_clear_recalc is called
- * just after callbacks, which leaves objects with recalc flags but no
- * corresponding bit in ID recalc bitfield. This leads to some kind of
- * regression when using ID type tag fields to check whether there objects
- * to be updated internally comparing threaded DAG with legacy one.
- *
- * For now let's have a workaround which will preserve tag for ID_OB
- * if there're objects with OB_RECALC_ALL bits. This keeps behavior
- * unchanged comparing with 2.69 release.
- *
- * TODO(sergey): Need to get rid of such a workaround.
- *
- * - sergey -
- */
-
-#define POST_UPDATE_HANDLER_WORKAROUND
-
-void DAG_ids_clear_recalc(Main *bmain)
-{
- ListBase *lbarray[MAX_LIBARRAY];
- bNodeTree *ntree;
- int a;
-
-#ifdef POST_UPDATE_HANDLER_WORKAROUND
- bool have_updated_objects = false;
-
- if (DAG_id_type_tagged(bmain, ID_OB)) {
- ListBase listbase;
- DagSceneLayer *dsl;
-
- /* We need to check all visible scenes, otherwise resetting
- * OB_ID changed flag will only work fine for first scene of
- * multiple visible and all the rest will skip update.
- *
- * This could also lead to wrong behavior scene update handlers
- * because of missing ID datablock changed flags.
- *
- * This is a bit of a bummer to allocate list here, but likely
- * it wouldn't become too much bad because it only happens when
- * objects were actually changed.
- */
- dag_current_scene_layers(bmain, &listbase);
-
- for (dsl = listbase.first; dsl; dsl = dsl->next) {
- Scene *scene = dsl->scene;
- DagNode *node;
- for (node = scene->theDag->DagNode.first;
- node != NULL && have_updated_objects == false;
- node = node->next)
- {
- if (node->type == ID_OB) {
- Object *object = (Object *) node->ob;
- if (object->recalc & OB_RECALC_ALL) {
- have_updated_objects = true;
- break;
- }
- }
- }
- }
-
- BLI_freelistN(&listbase);
- }
-#endif
-
- /* loop over all ID types */
- a = set_listbasepointers(bmain, lbarray);
-
- while (a--) {
- ListBase *lb = lbarray[a];
- ID *id = lb->first;
-
- if (id && bmain->id_tag_update[BKE_idcode_to_index(GS(id->name))]) {
- for (; id; id = id->next) {
- id->recalc &= ~ID_RECALC_ALL;
-
- /* some ID's contain semi-datablock nodetree */
- ntree = ntreeFromID(id);
- if (ntree)
- ntree->id.recalc &= ~ID_RECALC_ALL;
- }
- }
- }
-
- memset(bmain->id_tag_update, 0, sizeof(bmain->id_tag_update));
-
-#ifdef POST_UPDATE_HANDLER_WORKAROUND
- if (have_updated_objects) {
- DAG_id_type_tag(bmain, ID_OB);
- }
-#endif
-}
-
-void DAG_id_tag_update_ex(Main *bmain, ID *id, short flag)
-{
- if (!DEG_depsgraph_use_legacy()) {
- DEG_id_tag_update_ex(bmain, id, flag);
- return;
- }
-
- if (id == NULL) return;
-
- if (G.debug & G_DEBUG_DEPSGRAPH) {
- printf("%s: id=%s flag=%d\n", __func__, id->name, flag);
- }
-
- /* tag ID for update */
- if (flag) {
- if (flag & OB_RECALC_OB)
- lib_id_recalc_tag(bmain, id);
- if (flag & (OB_RECALC_DATA | PSYS_RECALC))
- lib_id_recalc_data_tag(bmain, id);
- }
- else
- lib_id_recalc_tag(bmain, id);
-
- /* flag is for objects and particle systems */
- if (flag) {
- Object *ob;
- short idtype = GS(id->name);
-
- if (idtype == ID_OB) {
- /* only quick tag */
- ob = (Object *)id;
- ob->recalc |= (flag & OB_RECALC_ALL);
- }
- else if (idtype == ID_PA) {
- ParticleSystem *psys;
- /* this is weak still, should be done delayed as well */
- for (ob = bmain->object.first; ob; ob = ob->id.next) {
- for (psys = ob->particlesystem.first; psys; psys = psys->next) {
- if (&psys->part->id == id) {
- ob->recalc |= (flag & OB_RECALC_ALL);
- psys->recalc |= (flag & PSYS_RECALC);
- lib_id_recalc_tag(bmain, &ob->id);
- lib_id_recalc_data_tag(bmain, &ob->id);
- }
- }
- }
- }
- else {
- /* disable because this is called on various ID types automatically.
- * where printing warning is not useful. for now just ignore */
- /* BLI_assert(!"invalid flag for this 'idtype'"); */
- }
- }
- else if (GS(id->name) == ID_CF) {
- for (Object *ob = bmain->object.first; ob; ob = ob->id.next) {
- ModifierData *md = modifiers_findByType(ob, eModifierType_MeshSequenceCache);
-
- if (md) {
- MeshSeqCacheModifierData *mcmd = (MeshSeqCacheModifierData *)md;
-
- if (mcmd->cache_file && (&mcmd->cache_file->id == id)) {
- ob->recalc |= OB_RECALC_ALL;
- continue;
- }
- }
-
- for (bConstraint *con = ob->constraints.first; con; con = con->next) {
- if (con->type != CONSTRAINT_TYPE_TRANSFORM_CACHE) {
- continue;
- }
-
- bTransformCacheConstraint *data = con->data;
-
- if (data->cache_file && (&data->cache_file->id == id)) {
- ob->recalc |= OB_RECALC_ALL;
- break;
- }
- }
- }
- }
-}
-
-void DAG_id_tag_update(ID *id, short flag)
-{
- DAG_id_tag_update_ex(G.main, id, flag);
-}
-
-void DAG_id_type_tag(Main *bmain, short idtype)
-{
- if (idtype == ID_NT) {
- /* stupid workaround so parent datablocks of nested nodetree get looped
- * over when we loop over tagged datablock types */
- DAG_id_type_tag(bmain, ID_MA);
- DAG_id_type_tag(bmain, ID_TE);
- DAG_id_type_tag(bmain, ID_LA);
- DAG_id_type_tag(bmain, ID_WO);
- DAG_id_type_tag(bmain, ID_SCE);
- }
-
- atomic_fetch_and_or_uint8((uint8_t *)&bmain->id_tag_update[BKE_idcode_to_index(idtype)], 1);
-}
-
-int DAG_id_type_tagged(Main *bmain, short idtype)
-{
- return bmain->id_tag_update[BKE_idcode_to_index(idtype)];
-}
-
-#if 0 // UNUSED
-/* recursively descends tree, each node only checked once */
-/* node is checked to be of type object */
-static int parent_check_node(DagNode *node, int curtime)
-{
- DagAdjList *itA;
-
- node->lasttime = curtime;
-
- if (node->color == DAG_GRAY)
- return DAG_GRAY;
-
- for (itA = node->child; itA; itA = itA->next) {
- if (itA->node->type == ID_OB) {
-
- if (itA->node->color == DAG_GRAY)
- return DAG_GRAY;
-
- /* descend if not done */
- if (itA->node->lasttime != curtime) {
- itA->node->color = parent_check_node(itA->node, curtime);
-
- if (itA->node->color == DAG_GRAY)
- return DAG_GRAY;
- }
- }
- }
-
- return DAG_WHITE;
-}
-#endif
-
-/* ******************* DAG FOR ARMATURE POSE ***************** */
-
-/* we assume its an armature with pose */
-void DAG_pose_sort(Object *ob)
-{
- bPose *pose = ob->pose;
- bPoseChannel *pchan;
- bConstraint *con;
- DagNode *node;
- DagNode *node2, *node3;
- DagNode *rootnode;
- DagForest *dag;
- DagNodeQueue *nqueue;
- DagAdjList *itA;
- ListBase tempbase;
- int skip = 0;
-
- dag = dag_init();
- dag->ugly_hack_sorry = false; /* no ID structs */
-
- rootnode = dag_add_node(dag, NULL); /* node->ob becomes NULL */
-
- /* we add the hierarchy and the constraints */
- for (pchan = pose->chanbase.first; pchan; pchan = pchan->next) {
- int addtoroot = 1;
-
- node = dag_get_node(dag, pchan);
-
- if (pchan->parent) {
- node2 = dag_get_node(dag, pchan->parent);
- dag_add_relation(dag, node2, node, 0, "Parent Relation");
- addtoroot = 0;
- }
- for (con = pchan->constraints.first; con; con = con->next) {
- const bConstraintTypeInfo *cti = BKE_constraint_typeinfo_get(con);
- ListBase targets = {NULL, NULL};
- bConstraintTarget *ct;
-
- if (cti && cti->get_constraint_targets) {
- cti->get_constraint_targets(con, &targets);
-
- for (ct = targets.first; ct; ct = ct->next) {
- if (ct->tar == ob && ct->subtarget[0]) {
- bPoseChannel *target = BKE_pose_channel_find_name(ob->pose, ct->subtarget);
- if (target) {
- node2 = dag_get_node(dag, target);
- dag_add_relation(dag, node2, node, 0, "Pose Constraint");
-
- if (con->type == CONSTRAINT_TYPE_KINEMATIC) {
- bKinematicConstraint *data = (bKinematicConstraint *)con->data;
- bPoseChannel *parchan;
- int segcount = 0;
-
- /* exclude tip from chain? */
- if (!(data->flag & CONSTRAINT_IK_TIP))
- parchan = pchan->parent;
- else
- parchan = pchan;
-
- /* Walk to the chain's root */
- while (parchan) {
- node3 = dag_get_node(dag, parchan);
- dag_add_relation(dag, node2, node3, 0, "IK Constraint");
-
- segcount++;
- if (segcount == data->rootbone || segcount > 255) break; /* 255 is weak */
- parchan = parchan->parent;
- }
- }
- }
- }
- }
-
- if (cti->flush_constraint_targets)
- cti->flush_constraint_targets(con, &targets, 1);
- }
- }
- if (addtoroot == 1) {
- dag_add_relation(dag, rootnode, node, 0, "Root Bone Relation");
- }
- }
-
- dag_check_cycle(dag);
-
- /* now we try to sort... */
- BLI_listbase_clear(&tempbase);
-
- nqueue = queue_create(DAGQUEUEALLOC);
-
- /* tag nodes unchecked */
- for (node = dag->DagNode.first; node; node = node->next)
- node->color = DAG_WHITE;
-
- rootnode->color = DAG_GRAY;
- push_stack(nqueue, rootnode);
-
- while (nqueue->count) {
-
- skip = 0;
- node = get_top_node_queue(nqueue);
-
- itA = node->child;
- while (itA != NULL) {
- if (itA->node->color == DAG_WHITE) {
- itA->node->color = DAG_GRAY;
- push_stack(nqueue, itA->node);
- skip = 1;
- break;
- }
- itA = itA->next;
- }
-
- if (!skip) {
- if (node) {
- node = pop_queue(nqueue);
- if (node->ob == NULL) /* we are done */
- break;
- node->color = DAG_BLACK;
-
- /* put node in new list */
- BLI_remlink(&pose->chanbase, node->ob);
- BLI_addhead(&tempbase, node->ob);
- }
- }
- }
-
- /* temporal correction for circular dependencies */
- while (pose->chanbase.first) {
- pchan = pose->chanbase.first;
- BLI_remlink(&pose->chanbase, pchan);
- BLI_addhead(&tempbase, pchan);
-
- printf("cyclic %s\n", pchan->name);
- }
-
- pose->chanbase = tempbase;
- queue_delete(nqueue);
-
-// printf("\nordered\n");
-// for (pchan = pose->chanbase.first; pchan; pchan = pchan->next) {
-// printf(" %s\n", pchan->name);
-// }
-
- free_forest(dag);
- MEM_freeN(dag);
-}
-
-/* ************************ DAG FOR THREADED UPDATE ********************* */
-
-/* Initialize run-time data in the graph needed for traversing it
- * from multiple threads and start threaded tree traversal by adding
- * the root node to the queue.
- *
- * This will mark DAG nodes as object/non-object and will calculate
- * num_pending_parents of nodes (which is how many non-updated parents node
- * have, which helps a lot checking whether node could be scheduled
- * already or not).
- */
-void DAG_threaded_update_begin(Scene *scene,
- void (*func)(void *node, void *user_data),
- void *user_data)
-{
- DagNode *node;
-
- /* We reset num_pending_parents to zero first and tag node as not scheduled yet... */
- for (node = scene->theDag->DagNode.first; node; node = node->next) {
- node->num_pending_parents = 0;
- node->scheduled = false;
- }
-
- /* ... and then iterate over all the nodes and
- * increase num_pending_parents for node childs.
- */
- for (node = scene->theDag->DagNode.first; node; node = node->next) {
- DagAdjList *itA;
-
- for (itA = node->child; itA; itA = itA->next) {
- if (itA->node != node) {
- itA->node->num_pending_parents++;
- }
- }
- }
-
- /* Add root nodes to the queue. */
- BLI_spin_lock(&threaded_update_lock);
- for (node = scene->theDag->DagNode.first; node; node = node->next) {
- if (node->num_pending_parents == 0) {
- node->scheduled = true;
- func(node, user_data);
- }
- }
- BLI_spin_unlock(&threaded_update_lock);
-}
-
-/* This function is called when handling node is done.
- *
- * This function updates num_pending_parents for all childs and
- * schedules them if they're ready.
- */
-void DAG_threaded_update_handle_node_updated(void *node_v,
- void (*func)(void *node, void *user_data),
- void *user_data)
-{
- DagNode *node = node_v;
- DagAdjList *itA;
-
- for (itA = node->child; itA; itA = itA->next) {
- DagNode *child_node = itA->node;
- if (child_node != node) {
- atomic_sub_and_fetch_uint32(&child_node->num_pending_parents, 1);
-
- if (child_node->num_pending_parents == 0) {
- bool need_schedule;
-
- BLI_spin_lock(&threaded_update_lock);
- need_schedule = child_node->scheduled == false;
- child_node->scheduled = true;
- BLI_spin_unlock(&threaded_update_lock);
-
- if (need_schedule) {
- func(child_node, user_data);
- }
- }
- }
- }
-}
-
-/* ************************ DAG DEBUGGING ********************* */
-
-void DAG_print_dependencies(Main *bmain, Scene *scene, Object *ob)
-{
- /* utility for debugging dependencies */
- dag_print_dependencies = 1;
-
- if (ob && (ob->mode & OB_MODE_POSE)) {
- printf("\nDEPENDENCY RELATIONS for %s\n\n", ob->id.name + 2);
- DAG_pose_sort(ob);
- }
- else {
- printf("\nDEPENDENCY RELATIONS for %s\n\n", scene->id.name + 2);
- DAG_scene_relations_rebuild(bmain, scene);
- }
-
- dag_print_dependencies = 0;
-}
-
-/* ************************ DAG querying ********************* */
-
-/* Will return Object ID if node represents Object,
- * and will return NULL otherwise.
- */
-Object *DAG_get_node_object(void *node_v)
-{
- DagNode *node = node_v;
-
- if (node->type == ID_OB) {
- return node->ob;
- }
-
- return NULL;
-}
-
-/* Returns node name, used for debug output only, atm. */
-const char *DAG_get_node_name(Scene *scene, void *node_v)
-{
- DagNode *node = node_v;
-
- return dag_node_name(scene->theDag, node);
-}
-
-short DAG_get_eval_flags_for_object(Scene *scene, void *object)
-{
- DagNode *node;
-
- if (!DEG_depsgraph_use_legacy()) {
- return DEG_get_eval_flags_for_id(scene->depsgraph, (ID *)object);
- }
-
- if (scene->theDag == NULL) {
- /* Happens when converting objects to mesh from a python script
- * after modifying scene graph.
- *
- * Currently harmless because it's only called for temporary
- * objects which are out of the DAG anyway.
- */
- return 0;
- }
-
- node = dag_find_node(scene->theDag, object);
-
- if (node) {
- return node->eval_flags;
- }
- else {
- /* Happens when external render engine exports temporary objects
- * which are not in the DAG.
- */
-
- /* TODO(sergey): Doublecheck objects with Curve Deform exports all fine. */
-
- /* TODO(sergey): Weak but currently we can't really access proper DAG from
- * the modifiers stack. This is because in most cases modifier is to use
- * the foreground scene, but to access evaluation flags we need to know
- * active background scene, which we don't know.
- */
- if (scene->set) {
- return DAG_get_eval_flags_for_object(scene->set, object);
- }
- return 0;
- }
-}
-
-bool DAG_is_acyclic(Scene *scene)
-{
- return scene->theDag->is_acyclic;
-}
-
-#else
-
-/* *********************************************************************
- * Stubs to avoid linking issues and make sure legacy crap is not used *
- * *********************************************************************
- */
-
-DagNodeQueue *queue_create(int UNUSED(slots))
-{
- BLI_assert(!"Should not be used with new dependnecy graph");
- return NULL;
-}
-
-void queue_raz(DagNodeQueue *UNUSED(queue))
-{
- BLI_assert(!"Should not be used with new dependnecy graph");
-}
-
-void queue_delete(DagNodeQueue *UNUSED(queue))
-{
- BLI_assert(!"Should not be used with new dependnecy graph");
-}
-
-void push_queue(DagNodeQueue *UNUSED(queue), DagNode *UNUSED(node))
-{
- BLI_assert(!"Should not be used with new dependnecy graph");
-}
-
-void push_stack(DagNodeQueue *UNUSED(queue), DagNode *UNUSED(node))
-{
- BLI_assert(!"Should not be used with new dependnecy graph");
-}
-
-DagNode *pop_queue(DagNodeQueue *UNUSED(queue))
-{
- BLI_assert(!"Should not be used with new dependnecy graph");
- return NULL;
-}
-
-DagNode *get_top_node_queue(DagNodeQueue *UNUSED(queue))
-{
- BLI_assert(!"Should not be used with new dependnecy graph");
- return NULL;
-}
-
-DagForest *dag_init(void)
-{
- BLI_assert(!"Should not be used with new dependnecy graph");
- return NULL;
-}
-
-DagForest *build_dag(Main *UNUSED(bmain),
- Scene *UNUSED(sce),
- short UNUSED(mask))
-{
- BLI_assert(!"Should not be used with new dependnecy graph");
- return NULL;
-}
-
-void free_forest(DagForest *UNUSED(Dag))
-{
- BLI_assert(!"Should not be used with new dependnecy graph");
-}
-
-DagNode *dag_find_node(DagForest *UNUSED(forest), void *UNUSED(fob))
-{
- BLI_assert(!"Should not be used with new dependnecy graph");
- return NULL;
-}
-
-DagNode *dag_add_node(DagForest *UNUSED(forest), void *UNUSED(fob))
-{
- BLI_assert(!"Should not be used with new dependnecy graph");
- return NULL;
-}
-
-DagNode *dag_get_node(DagForest *UNUSED(forest), void *UNUSED(fob))
-{
- BLI_assert(!"Should not be used with new dependnecy graph");
- return NULL;
-}
-
-DagNode *dag_get_sub_node(DagForest *UNUSED(forest), void *UNUSED(fob))
-{
- BLI_assert(!"Should not be used with new dependnecy graph");
- return NULL;
-}
-
-void dag_add_relation(DagForest *UNUSED(forest),
- DagNode *UNUSED(fob1),
- DagNode *UNUSED(fob2),
- short UNUSED(rel),
- const char *UNUSED(name))
-{
- BLI_assert(!"Should not be used with new dependnecy graph");
-}
-
-/* debug test functions */
-
-void graph_print_queue(DagNodeQueue *UNUSED(nqueue))
-{
- BLI_assert(!"Should not be used with new dependnecy graph");
-}
-
-void graph_print_queue_dist(DagNodeQueue *UNUSED(nqueue))
-{
- BLI_assert(!"Should not be used with new dependnecy graph");
-}
-
-void graph_print_adj_list(DagForest *UNUSED(dag))
-{
- BLI_assert(!"Should not be used with new dependnecy graph");
-}
-
-void DAG_scene_flush_update(Main *UNUSED(bmain),
- Scene *UNUSED(sce),
- unsigned int UNUSED(lay),
- const short UNUSED(time))
-{
- BLI_assert(!"Should not be used with new dependnecy graph");
-}
-
-void DAG_scene_update_flags(Main *UNUSED(bmain),
- Scene *UNUSED(scene),
- unsigned int UNUSED(lay),
- const bool UNUSED(do_time),
- const bool UNUSED(do_invisible_flush))
-{
- BLI_assert(!"Should not be used with new dependnecy graph");
-}
-
-/* ******************* DAG FOR ARMATURE POSE ***************** */
-
-void DAG_pose_sort(Object *UNUSED(ob))
-{
- BLI_assert(!"Should not be used with new dependnecy graph");
-}
-
-/* ************************ DAG FOR THREADED UPDATE ********************* */
-
-void DAG_threaded_update_begin(Scene *UNUSED(scene),
- void (*func)(void *node, void *user_data),
- void *UNUSED(user_data))
-{
- BLI_assert(!"Should not be used with new dependnecy graph");
- (void)func;
-}
-
-void DAG_threaded_update_handle_node_updated(void *UNUSED(node_v),
- void (*func)(void *node, void *user_data),
- void *UNUSED(user_data))
-{
- BLI_assert(!"Should not be used with new dependnecy graph");
- (void)func;
-}
-
-/* ************************ DAG querying ********************* */
-
-Object *DAG_get_node_object(void *UNUSED(node_v))
-{
- BLI_assert(!"Should not be used with new dependnecy graph");
- return NULL;
-}
-
-const char *DAG_get_node_name(Scene *UNUSED(scene), void *UNUSED(node_v))
-{
- BLI_assert(!"Should not be used with new dependnecy graph");
- return "INVALID";
-}
-
-bool DAG_is_acyclic(Scene *UNUSED(scene))
-{
- BLI_assert(!"Should not be used with new dependnecy graph");
- return false;
-}
-
-/* ************************************
- * This functions are to be supported *
- * ************************************
- */
-
-void DAG_init(void)
-{
- DEG_register_node_types();
-}
-
-void DAG_exit(void)
-{
- DEG_free_node_types();
-}
-
-/* ************************ API *********************** */
-
-void DAG_editors_update_cb(DEG_EditorUpdateIDCb id_func,
- DEG_EditorUpdateSceneCb scene_func,
- DEG_EditorUpdateScenePreCb scene_func_pre)
-{
- DEG_editors_set_update_cb(id_func, scene_func, scene_func_pre);
-}
-
-void DAG_editors_update_pre(Main *bmain, Scene *scene, bool time)
-{
- DEG_editors_update_pre(bmain, scene, time);
-}
-
-/* Tag all relations for update. */
-void DAG_relations_tag_update(Main *bmain)
-{
- DEG_relations_tag_update(bmain);
-}
-
-/* Rebuild dependency graph only for a given scene. */
-void DAG_scene_relations_rebuild(Main *bmain, Scene *scene)
-{
- DEG_scene_relations_rebuild(bmain, scene);
-}
-
-/* Create dependency graph if it was cleared or didn't exist yet. */
-void DAG_scene_relations_update(Main *bmain, Scene *scene)
-{
- DEG_scene_relations_update(bmain, scene);
-}
-
-void DAG_scene_relations_validate(Main *bmain, Scene *scene)
-{
- DEG_debug_scene_relations_validate(bmain, scene);
-}
-
-void DAG_scene_free(Scene *scene)
-{
- DEG_scene_graph_free(scene);
-}
-
-void DAG_on_visible_update(Main *bmain, const bool do_time)
-{
- DEG_on_visible_update(bmain, do_time);
-}
-
-void DAG_ids_check_recalc(Main *bmain, Scene *scene, bool time)
-{
- DEG_ids_check_recalc(bmain, scene, time);
-}
-
-void DAG_id_tag_update(ID *id, short flag)
-{
- DEG_id_tag_update_ex(G.main, id, flag);
-}
-
-void DAG_id_tag_update_ex(Main *bmain, ID *id, short flag)
-{
- DEG_id_tag_update_ex(bmain, id, flag);
-}
-
-void DAG_id_type_tag(Main *bmain, short idtype)
-{
- DEG_id_type_tag(bmain, idtype);
-}
-
-int DAG_id_type_tagged(Main *bmain, short idtype)
-{
- return DEG_id_type_tagged(bmain, idtype);
-}
-
-void DAG_ids_clear_recalc(Main *bmain)
-{
- DEG_ids_clear_recalc(bmain);
-}
-
-short DAG_get_eval_flags_for_object(Scene *scene, void *object)
-{
- return DEG_get_eval_flags_for_id(scene->depsgraph, (ID *)object);
-}
-
-void DAG_ids_flush_tagged(Main *bmain)
-{
- DEG_ids_flush_tagged(bmain);
-}
-
-/* ************************ DAG DEBUGGING ********************* */
-
-void DAG_print_dependencies(Main *UNUSED(bmain),
- Scene *scene,
- Object *UNUSED(ob))
-{
- DEG_debug_relations_graphviz(scene->depsgraph, stdout, "Depsgraph");
-}
-
-#endif
diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c
index 2a300cbe47b..15a520fe8ce 100644
--- a/source/blender/blenkernel/intern/displist.c
+++ b/source/blender/blenkernel/intern/displist.c
@@ -48,7 +48,6 @@
#include "BLI_utildefines.h"
#include "BKE_global.h"
-#include "BKE_depsgraph.h"
#include "BKE_displist.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_object.h"
@@ -63,6 +62,9 @@
#include "BLI_sys_types.h" // for intptr_t support
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_query.h"
+
static void boundbox_displist_object(Object *ob);
void BKE_displist_elem_free(DispList *dl)
@@ -676,7 +678,7 @@ static void curve_to_filledpoly(Curve *cu, ListBase *UNUSED(nurb), ListBase *dis
* - first point left, last point right
* - based on subdivided points in original curve, not on points in taper curve (still)
*/
-static float displist_calc_taper(Scene *scene, Object *taperobj, float fac)
+static float displist_calc_taper(const EvaluationContext *eval_ctx, Scene *scene, Object *taperobj, float fac)
{
DispList *dl;
@@ -685,7 +687,7 @@ static float displist_calc_taper(Scene *scene, Object *taperobj, float fac)
dl = taperobj->curve_cache ? taperobj->curve_cache->disp.first : NULL;
if (dl == NULL) {
- BKE_displist_make_curveTypes(scene, taperobj, 0);
+ BKE_displist_make_curveTypes(eval_ctx, scene, taperobj, 0);
dl = taperobj->curve_cache->disp.first;
}
if (dl) {
@@ -716,14 +718,14 @@ static float displist_calc_taper(Scene *scene, Object *taperobj, float fac)
return 1.0;
}
-float BKE_displist_calc_taper(Scene *scene, Object *taperobj, int cur, int tot)
+float BKE_displist_calc_taper(const EvaluationContext *eval_ctx, Scene *scene, Object *taperobj, int cur, int tot)
{
float fac = ((float)cur) / (float)(tot - 1);
- return displist_calc_taper(scene, taperobj, fac);
+ return displist_calc_taper(eval_ctx, scene, taperobj, fac);
}
-void BKE_displist_make_mball(EvaluationContext *eval_ctx, Scene *scene, Object *ob)
+void BKE_displist_make_mball(const EvaluationContext *eval_ctx, Scene *scene, Object *ob)
{
if (!ob || ob->type != OB_MBALL)
return;
@@ -746,7 +748,7 @@ void BKE_displist_make_mball(EvaluationContext *eval_ctx, Scene *scene, Object *
}
}
-void BKE_displist_make_mball_forRender(EvaluationContext *eval_ctx, Scene *scene, Object *ob, ListBase *dispbase)
+void BKE_displist_make_mball_forRender(const EvaluationContext *eval_ctx, Scene *scene, Object *ob, ListBase *dispbase)
{
BKE_mball_polygonize(eval_ctx, scene, ob, dispbase);
BKE_mball_texspace_calc(ob);
@@ -796,8 +798,9 @@ static ModifierData *curve_get_tessellate_point(Scene *scene, Object *ob,
return pretessellatePoint;
}
-static void curve_calc_modifiers_pre(Scene *scene, Object *ob, ListBase *nurb,
- const bool for_render, const bool use_render_resolution)
+static void curve_calc_modifiers_pre(
+ const EvaluationContext *eval_ctx, Scene *scene, Object *ob, ListBase *nurb,
+ const bool for_render, const bool use_render_resolution)
{
VirtualModifierData virtualModifierData;
ModifierData *md = modifiers_getVirtualModifierList(ob, &virtualModifierData);
@@ -854,7 +857,7 @@ static void curve_calc_modifiers_pre(Scene *scene, Object *ob, ListBase *nurb,
deformedVerts = BKE_curve_nurbs_vertexCos_get(nurb, &numVerts);
}
- mti->deformVerts(md, ob, NULL, deformedVerts, numVerts, app_flag);
+ mti->deformVerts(md, eval_ctx, ob, NULL, deformedVerts, numVerts, app_flag);
if (md == pretessellatePoint)
break;
@@ -906,9 +909,10 @@ static void displist_apply_allverts(ListBase *dispbase, float (*allverts)[3])
}
}
-static void curve_calc_modifiers_post(Scene *scene, Object *ob, ListBase *nurb,
- ListBase *dispbase, DerivedMesh **r_dm_final,
- const bool for_render, const bool use_render_resolution)
+static void curve_calc_modifiers_post(
+ const EvaluationContext *eval_ctx, Scene *scene, Object *ob, ListBase *nurb,
+ ListBase *dispbase, DerivedMesh **r_dm_final,
+ const bool for_render, const bool use_render_resolution)
{
VirtualModifierData virtualModifierData;
ModifierData *md = modifiers_getVirtualModifierList(ob, &virtualModifierData);
@@ -962,14 +966,14 @@ static void curve_calc_modifiers_post(Scene *scene, Object *ob, ListBase *nurb,
dm->getVertCos(dm, vertCos);
}
- mti->deformVerts(md, ob, dm, vertCos, totvert, appf);
+ mti->deformVerts(md, eval_ctx, ob, dm, vertCos, totvert, appf);
}
else {
if (!vertCos) {
vertCos = displist_get_allverts(dispbase, &totvert);
}
- mti->deformVerts(md, ob, NULL, vertCos, totvert, appf);
+ mti->deformVerts(md, eval_ctx, ob, NULL, vertCos, totvert, appf);
}
}
else {
@@ -1011,7 +1015,7 @@ static void curve_calc_modifiers_post(Scene *scene, Object *ob, ListBase *nurb,
if (useCache)
appf |= MOD_APPLY_USECACHE;
- ndm = modwrap_applyModifier(md, ob, dm, appf);
+ ndm = modwrap_applyModifier(md, eval_ctx, ob, dm, appf);
if (ndm) {
/* Modifier returned a new derived mesh */
@@ -1088,13 +1092,13 @@ static void displist_surf_indices(DispList *dl)
}
}
-static DerivedMesh *create_orco_dm(Scene *scene, Object *ob)
+static DerivedMesh *create_orco_dm(const EvaluationContext *eval_ctx, Scene *scene, Object *ob)
{
DerivedMesh *dm;
ListBase disp = {NULL, NULL};
/* OrcoDM should be created from underformed disp lists */
- BKE_displist_make_curveTypes_forOrco(scene, ob, &disp);
+ BKE_displist_make_curveTypes_forOrco(eval_ctx, scene, ob, &disp);
dm = CDDM_from_curve_displist(ob, &disp);
BKE_displist_free(&disp);
@@ -1132,8 +1136,9 @@ static void add_orco_dm(Object *ob, DerivedMesh *dm, DerivedMesh *orcodm)
DM_add_vert_layer(dm, CD_ORCO, CD_ASSIGN, orco);
}
-static void curve_calc_orcodm(Scene *scene, Object *ob, DerivedMesh *dm_final,
- const bool for_render, const bool use_render_resolution)
+static void curve_calc_orcodm(
+ const EvaluationContext *eval_ctx, Scene *scene, Object *ob, DerivedMesh *dm_final,
+ const bool for_render, const bool use_render_resolution)
{
/* this function represents logic of mesh's orcodm calculation
* for displist-based objects
@@ -1170,7 +1175,7 @@ static void curve_calc_orcodm(Scene *scene, Object *ob, DerivedMesh *dm_final,
* This means we can create ORCO DM in advance and assume it's
* never NULL.
*/
- orcodm = create_orco_dm(scene, ob);
+ orcodm = create_orco_dm(eval_ctx, scene, ob);
for (; md; md = md->next) {
const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
@@ -1182,7 +1187,7 @@ static void curve_calc_orcodm(Scene *scene, Object *ob, DerivedMesh *dm_final,
if (mti->type != eModifierTypeType_Constructive)
continue;
- ndm = modwrap_applyModifier(md, ob, orcodm, app_flag);
+ ndm = modwrap_applyModifier(md, eval_ctx, ob, orcodm, app_flag);
if (ndm) {
/* if the modifier returned a new dm, release the old one */
@@ -1199,9 +1204,10 @@ static void curve_calc_orcodm(Scene *scene, Object *ob, DerivedMesh *dm_final,
orcodm->release(orcodm);
}
-void BKE_displist_make_surf(Scene *scene, Object *ob, ListBase *dispbase,
- DerivedMesh **r_dm_final,
- const bool for_render, const bool for_orco, const bool use_render_resolution)
+void BKE_displist_make_surf(
+ const EvaluationContext *eval_ctx, Scene *scene, Object *ob, ListBase *dispbase,
+ DerivedMesh **r_dm_final,
+ const bool for_render, const bool for_orco, const bool use_render_resolution)
{
ListBase nubase = {NULL, NULL};
Nurb *nu;
@@ -1218,7 +1224,7 @@ void BKE_displist_make_surf(Scene *scene, Object *ob, ListBase *dispbase,
}
if (!for_orco)
- curve_calc_modifiers_pre(scene, ob, &nubase, for_render, use_render_resolution);
+ curve_calc_modifiers_pre(eval_ctx, scene, ob, &nubase, for_render, use_render_resolution);
for (nu = nubase.first; nu; nu = nu->next) {
if ((for_render || nu->hide == 0) && BKE_nurb_check_valid_uv(nu)) {
@@ -1285,7 +1291,7 @@ void BKE_displist_make_surf(Scene *scene, Object *ob, ListBase *dispbase,
if (!for_orco) {
BKE_nurbList_duplicate(&ob->curve_cache->deformed_nurbs, &nubase);
- curve_calc_modifiers_post(scene, ob, &nubase, dispbase, r_dm_final,
+ curve_calc_modifiers_post(eval_ctx, scene, ob, &nubase, dispbase, r_dm_final,
for_render, use_render_resolution);
}
@@ -1511,9 +1517,10 @@ static void calc_bevfac_mapping(Curve *cu, BevList *bl, Nurb *nu,
}
}
-static void do_makeDispListCurveTypes(Scene *scene, Object *ob, ListBase *dispbase,
- DerivedMesh **r_dm_final,
- const bool for_render, const bool for_orco, const bool use_render_resolution)
+static void do_makeDispListCurveTypes(
+ const EvaluationContext *eval_ctx, Scene *scene, Object *ob, ListBase *dispbase,
+ DerivedMesh **r_dm_final,
+ const bool for_render, const bool for_orco, const bool use_render_resolution)
{
Curve *cu = ob->data;
@@ -1521,7 +1528,7 @@ static void do_makeDispListCurveTypes(Scene *scene, Object *ob, ListBase *dispba
if (!ELEM(ob->type, OB_SURF, OB_CURVE, OB_FONT)) return;
if (ob->type == OB_SURF) {
- BKE_displist_make_surf(scene, ob, dispbase, r_dm_final, for_render, for_orco, use_render_resolution);
+ BKE_displist_make_surf(eval_ctx, scene, ob, dispbase, r_dm_final, for_render, for_orco, use_render_resolution);
}
else if (ELEM(ob->type, OB_CURVE, OB_FONT)) {
ListBase dlbev;
@@ -1546,12 +1553,12 @@ static void do_makeDispListCurveTypes(Scene *scene, Object *ob, ListBase *dispba
}
if (!for_orco)
- curve_calc_modifiers_pre(scene, ob, &nubase, for_render, use_render_resolution);
+ curve_calc_modifiers_pre(eval_ctx, scene, ob, &nubase, for_render, use_render_resolution);
BKE_curve_bevelList_make(ob, &nubase, for_render != false);
/* If curve has no bevel will return nothing */
- BKE_curve_bevel_make(scene, ob, &dlbev, for_render, use_render_resolution);
+ BKE_curve_bevel_make(eval_ctx, scene, ob, &dlbev, for_render, use_render_resolution);
/* no bevel or extrude, and no width correction? */
if (!dlbev.first && cu->width == 1.0f) {
@@ -1686,7 +1693,7 @@ static void do_makeDispListCurveTypes(Scene *scene, Object *ob, ListBase *dispba
taper_fac -= (1.0f - lastblend) / len;
}
- fac = displist_calc_taper(scene, cu->taperobj, taper_fac);
+ fac = displist_calc_taper(eval_ctx, scene, cu->taperobj, taper_fac);
}
if (bevp->split_tag) {
@@ -1739,7 +1746,7 @@ static void do_makeDispListCurveTypes(Scene *scene, Object *ob, ListBase *dispba
if (!for_orco) {
if ((cu->flag & CU_PATH) ||
- DAG_get_eval_flags_for_object(scene, ob) & DAG_EVAL_NEED_CURVE_PATH)
+ DEG_get_eval_flags_for_id(eval_ctx->depsgraph, &ob->id) & DAG_EVAL_NEED_CURVE_PATH)
{
calc_curvepath(ob, &nubase);
}
@@ -1747,7 +1754,7 @@ static void do_makeDispListCurveTypes(Scene *scene, Object *ob, ListBase *dispba
if (!for_orco) {
BKE_nurbList_duplicate(&ob->curve_cache->deformed_nurbs, &nubase);
- curve_calc_modifiers_post(scene, ob, &nubase, dispbase, r_dm_final, for_render, use_render_resolution);
+ curve_calc_modifiers_post(eval_ctx, scene, ob, &nubase, dispbase, r_dm_final, for_render, use_render_resolution);
}
if (cu->flag & CU_DEFORM_FILL && !ob->derivedFinal) {
@@ -1758,7 +1765,7 @@ static void do_makeDispListCurveTypes(Scene *scene, Object *ob, ListBase *dispba
}
}
-void BKE_displist_make_curveTypes(Scene *scene, Object *ob, const bool for_orco)
+void BKE_displist_make_curveTypes(const EvaluationContext *eval_ctx, Scene *scene, Object *ob, const bool for_orco)
{
ListBase *dispbase;
@@ -1776,35 +1783,38 @@ void BKE_displist_make_curveTypes(Scene *scene, Object *ob, const bool for_orco)
dispbase = &(ob->curve_cache->disp);
- do_makeDispListCurveTypes(scene, ob, dispbase, &ob->derivedFinal, 0, for_orco, 0);
+ do_makeDispListCurveTypes(eval_ctx, scene, ob, dispbase, &ob->derivedFinal, 0, for_orco, 0);
boundbox_displist_object(ob);
}
-void BKE_displist_make_curveTypes_forRender(Scene *scene, Object *ob, ListBase *dispbase,
- DerivedMesh **r_dm_final, const bool for_orco,
- const bool use_render_resolution)
+void BKE_displist_make_curveTypes_forRender(
+ const EvaluationContext *eval_ctx, Scene *scene, Object *ob, ListBase *dispbase,
+ DerivedMesh **r_dm_final, const bool for_orco,
+ const bool use_render_resolution)
{
if (ob->curve_cache == NULL) {
ob->curve_cache = MEM_callocN(sizeof(CurveCache), "CurveCache for Curve");
}
- do_makeDispListCurveTypes(scene, ob, dispbase, r_dm_final, true, for_orco, use_render_resolution);
+ do_makeDispListCurveTypes(eval_ctx, scene, ob, dispbase, r_dm_final, true, for_orco, use_render_resolution);
}
-void BKE_displist_make_curveTypes_forOrco(struct Scene *scene, struct Object *ob, struct ListBase *dispbase)
+void BKE_displist_make_curveTypes_forOrco(
+ const EvaluationContext *eval_ctx, Scene *scene, Object *ob, ListBase *dispbase)
{
if (ob->curve_cache == NULL) {
ob->curve_cache = MEM_callocN(sizeof(CurveCache), "CurveCache for Curve");
}
- do_makeDispListCurveTypes(scene, ob, dispbase, NULL, 1, 1, 1);
+ do_makeDispListCurveTypes(eval_ctx, scene, ob, dispbase, NULL, 1, 1, 1);
}
/* add Orco layer to the displist object which has got derived mesh and return orco */
-float *BKE_displist_make_orco(Scene *scene, Object *ob, DerivedMesh *dm_final,
- const bool for_render,
- const bool use_render_resolution)
+float *BKE_displist_make_orco(
+ const EvaluationContext *eval_ctx, Scene *scene, Object *ob, DerivedMesh *dm_final,
+ const bool for_render,
+ const bool use_render_resolution)
{
float *orco;
@@ -1812,7 +1822,7 @@ float *BKE_displist_make_orco(Scene *scene, Object *ob, DerivedMesh *dm_final,
dm_final = ob->derivedFinal;
if (!dm_final->getVertDataArray(dm_final, CD_ORCO)) {
- curve_calc_orcodm(scene, ob, dm_final, for_render, use_render_resolution);
+ curve_calc_orcodm(eval_ctx, scene, ob, dm_final, for_render, use_render_resolution);
}
orco = dm_final->getVertDataArray(dm_final, CD_ORCO);
diff --git a/source/blender/blenkernel/intern/dynamicpaint.c b/source/blender/blenkernel/intern/dynamicpaint.c
index 41a5d8574e6..2591c3c3c47 100644
--- a/source/blender/blenkernel/intern/dynamicpaint.c
+++ b/source/blender/blenkernel/intern/dynamicpaint.c
@@ -74,6 +74,8 @@
#include "BKE_pointcache.h"
#include "BKE_scene.h"
+#include "DEG_depsgraph.h"
+
/* for image output */
#include "IMB_imbuf_types.h"
#include "IMB_imbuf.h"
@@ -486,36 +488,27 @@ static void scene_setSubframe(Scene *scene, float subframe)
scene->r.subframe = subframe;
}
-static int surface_getBrushFlags(DynamicPaintSurface *surface, const Scene *scene)
+static int surface_getBrushFlags(DynamicPaintSurface *surface, const ViewLayer *view_layer)
{
Base *base = NULL;
- GroupObject *go = NULL;
Object *brushObj = NULL;
ModifierData *md = NULL;
int flags = 0;
if (surface->brush_group)
- go = surface->brush_group->gobject.first;
+ base = FIRSTBASE(surface->brush_group->view_layer);
else
- base = scene->base.first;
+ base = FIRSTBASE(view_layer);
- while (base || go) {
+ while (base) {
brushObj = NULL;
/* select object */
- if (surface->brush_group) {
- if (go->ob)
- brushObj = go->ob;
- }
- else {
- brushObj = base->object;
- }
+ brushObj = base->object;
- if (surface->brush_group)
- go = go->next;
- else
- base = base->next;
+ /* next item */
+ base = base->next;
if (!brushObj) {
continue;
@@ -2071,7 +2064,9 @@ static void canvas_copyDerivedMesh(DynamicPaintCanvasSettings *canvas, DerivedMe
/*
* Updates derived mesh copy and processes dynamic paint step / caches.
*/
-static void dynamicPaint_frameUpdate(DynamicPaintModifierData *pmd, Scene *scene, Object *ob, DerivedMesh *dm)
+static void dynamicPaint_frameUpdate(
+ DynamicPaintModifierData *pmd, const struct EvaluationContext *eval_ctx, Scene *scene,
+ Object *ob, DerivedMesh *dm)
{
if (pmd->canvas) {
DynamicPaintCanvasSettings *canvas = pmd->canvas;
@@ -2134,7 +2129,7 @@ static void dynamicPaint_frameUpdate(DynamicPaintModifierData *pmd, Scene *scene
else if (can_simulate) {
/* calculate surface frame */
canvas->flags |= MOD_DPAINT_BAKING;
- dynamicPaint_calculateFrame(surface, scene, ob, current_frame);
+ dynamicPaint_calculateFrame(surface, eval_ctx, scene, ob, current_frame);
canvas->flags &= ~MOD_DPAINT_BAKING;
/* restore canvas derivedmesh if required */
@@ -2153,13 +2148,15 @@ static void dynamicPaint_frameUpdate(DynamicPaintModifierData *pmd, Scene *scene
}
/* Modifier call. Processes dynamic paint modifier step. */
-DerivedMesh *dynamicPaint_Modifier_do(DynamicPaintModifierData *pmd, Scene *scene, Object *ob, DerivedMesh *dm)
+DerivedMesh *dynamicPaint_Modifier_do(
+ DynamicPaintModifierData *pmd, const struct EvaluationContext *eval_ctx, Scene *scene,
+ Object *ob, DerivedMesh *dm)
{
if (pmd->canvas) {
DerivedMesh *ret;
/* Update canvas data for a new frame */
- dynamicPaint_frameUpdate(pmd, scene, ob, dm);
+ dynamicPaint_frameUpdate(pmd, eval_ctx, scene, ob, dm);
/* Return output mesh */
ret = dynamicPaint_Modifier_apply(pmd, ob, dm);
@@ -2168,7 +2165,7 @@ DerivedMesh *dynamicPaint_Modifier_do(DynamicPaintModifierData *pmd, Scene *scen
}
else {
/* Update canvas data for a new frame */
- dynamicPaint_frameUpdate(pmd, scene, ob, dm);
+ dynamicPaint_frameUpdate(pmd, eval_ctx, scene, ob, dm);
/* Return output mesh */
return dynamicPaint_Modifier_apply(pmd, ob, dm);
@@ -3743,7 +3740,8 @@ static void dynamic_paint_brush_velocity_compute_cb(
}
static void dynamicPaint_brushMeshCalculateVelocity(
- Scene *scene, Object *ob, DynamicPaintBrushSettings *brush, Vec3f **brushVel, float timescale)
+ const struct EvaluationContext *eval_ctx, Scene *scene,
+ Object *ob, DynamicPaintBrushSettings *brush, Vec3f **brushVel, float timescale)
{
float prev_obmat[4][4];
DerivedMesh *dm_p, *dm_c;
@@ -3765,7 +3763,7 @@ static void dynamicPaint_brushMeshCalculateVelocity(
scene->r.subframe = prev_sfra;
BKE_object_modifier_update_subframe(
- scene, ob, true, SUBFRAME_RECURSION, BKE_scene_frame_get(scene), eModifierType_DynamicPaint);
+ eval_ctx, scene, ob, true, SUBFRAME_RECURSION, BKE_scene_frame_get(scene), eModifierType_DynamicPaint);
dm_p = CDDM_copy(brush->dm);
numOfVerts_p = dm_p->getNumVerts(dm_p);
mvert_p = dm_p->getVertArray(dm_p);
@@ -3776,7 +3774,7 @@ static void dynamicPaint_brushMeshCalculateVelocity(
scene->r.subframe = cur_sfra;
BKE_object_modifier_update_subframe(
- scene, ob, true, SUBFRAME_RECURSION, BKE_scene_frame_get(scene), eModifierType_DynamicPaint);
+ eval_ctx, scene, ob, true, SUBFRAME_RECURSION, BKE_scene_frame_get(scene), eModifierType_DynamicPaint);
dm_c = brush->dm;
numOfVerts_c = dm_c->getNumVerts(dm_c);
mvert_c = dm_p->getVertArray(dm_c);
@@ -3807,7 +3805,7 @@ static void dynamicPaint_brushMeshCalculateVelocity(
}
/* calculate velocity for object center point */
-static void dynamicPaint_brushObjectCalculateVelocity(Scene *scene, Object *ob, Vec3f *brushVel, float timescale)
+static void dynamicPaint_brushObjectCalculateVelocity(const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, Vec3f *brushVel, float timescale)
{
float prev_obmat[4][4];
float cur_loc[3] = {0.0f}, prev_loc[3] = {0.0f};
@@ -3826,14 +3824,14 @@ static void dynamicPaint_brushObjectCalculateVelocity(Scene *scene, Object *ob,
scene->r.cfra = prev_fra;
scene->r.subframe = prev_sfra;
BKE_object_modifier_update_subframe(
- scene, ob, false, SUBFRAME_RECURSION, BKE_scene_frame_get(scene), eModifierType_DynamicPaint);
+ eval_ctx, scene, ob, false, SUBFRAME_RECURSION, BKE_scene_frame_get(scene), eModifierType_DynamicPaint);
copy_m4_m4(prev_obmat, ob->obmat);
/* current frame dm */
scene->r.cfra = cur_fra;
scene->r.subframe = cur_sfra;
BKE_object_modifier_update_subframe(
- scene, ob, false, SUBFRAME_RECURSION, BKE_scene_frame_get(scene), eModifierType_DynamicPaint);
+ eval_ctx, scene, ob, false, SUBFRAME_RECURSION, BKE_scene_frame_get(scene), eModifierType_DynamicPaint);
/* calculate speed */
mul_m4_v3(prev_obmat, prev_loc);
@@ -4205,7 +4203,7 @@ static void dynamic_paint_paint_mesh_cell_point_cb_ex(
}
}
-static int dynamicPaint_paintMesh(DynamicPaintSurface *surface,
+static int dynamicPaint_paintMesh(const struct EvaluationContext *eval_ctx, DynamicPaintSurface *surface,
DynamicPaintBrushSettings *brush,
Object *brushOb,
BrushMaterials *bMats,
@@ -4221,7 +4219,7 @@ static int dynamicPaint_paintMesh(DynamicPaintSurface *surface,
const MLoop *mloop = NULL;
if (brush->flags & MOD_DPAINT_USES_VELOCITY)
- dynamicPaint_brushMeshCalculateVelocity(scene, brushOb, brush, &brushVelocity, timescale);
+ dynamicPaint_brushMeshCalculateVelocity(eval_ctx, scene, brushOb, brush, &brushVelocity, timescale);
if (!brush->dm)
return 0;
@@ -4711,7 +4709,7 @@ static void dynamic_paint_paint_single_point_cb_ex(
}
static int dynamicPaint_paintSinglePoint(
- DynamicPaintSurface *surface, float *pointCoord, DynamicPaintBrushSettings *brush,
+ const struct EvaluationContext *eval_ctx, DynamicPaintSurface *surface, float *pointCoord, DynamicPaintBrushSettings *brush,
Object *brushOb, BrushMaterials *bMats, Scene *scene, float timescale)
{
PaintSurfaceData *sData = surface->data;
@@ -4719,7 +4717,7 @@ static int dynamicPaint_paintSinglePoint(
Vec3f brushVel;
if (brush->flags & MOD_DPAINT_USES_VELOCITY)
- dynamicPaint_brushObjectCalculateVelocity(scene, brushOb, &brushVel, timescale);
+ dynamicPaint_brushObjectCalculateVelocity(eval_ctx, scene, brushOb, &brushVel, timescale);
const MVert *mvert = brush->dm->getVertArray(brush->dm);
@@ -5041,7 +5039,7 @@ static void dynamic_paint_prepare_effect_cb(
}
static int dynamicPaint_prepareEffectStep(
- DynamicPaintSurface *surface, Scene *scene, Object *ob, float **force, float timescale)
+ const struct EvaluationContext *eval_ctx, DynamicPaintSurface *surface, Scene *scene, Object *ob, float **force, float timescale)
{
double average_force = 0.0f;
float shrink_speed = 0.0f, spread_speed = 0.0f;
@@ -5052,7 +5050,7 @@ static int dynamicPaint_prepareEffectStep(
/* Init force data if required */
if (surface->effect & MOD_DPAINT_EFFECT_DO_DRIP) {
- ListBase *effectors = pdInitEffectors(scene, ob, NULL, surface->effector_weights, true);
+ ListBase *effectors = pdInitEffectors(eval_ctx, scene, ob, NULL, surface->effector_weights, true);
/* allocate memory for force data (dir vector + strength) */
*force = MEM_mallocN(sData->total_points * 4 * sizeof(float), "PaintEffectForces");
@@ -5884,7 +5882,7 @@ static void dynamic_paint_generate_bake_data_cb(
}
}
-static int dynamicPaint_generateBakeData(DynamicPaintSurface *surface, const Scene *scene, Object *ob)
+static int dynamicPaint_generateBakeData(DynamicPaintSurface *surface, const ViewLayer *view_layer, Object *ob)
{
PaintSurfaceData *sData = surface->data;
PaintBakeData *bData = sData->bData;
@@ -5892,7 +5890,7 @@ static int dynamicPaint_generateBakeData(DynamicPaintSurface *surface, const Sce
int index;
bool new_bdata = false;
const bool do_velocity_data = ((surface->effect & MOD_DPAINT_EFFECT_DO_DRIP) ||
- (surface_getBrushFlags(surface, scene) & BRUSH_USES_VELOCITY));
+ (surface_getBrushFlags(surface, view_layer) & BRUSH_USES_VELOCITY));
const bool do_accel_data = (surface->effect & MOD_DPAINT_EFFECT_DO_DRIP) != 0;
int canvasNumOfVerts = dm->getNumVerts(dm);
@@ -6009,7 +6007,7 @@ static int dynamicPaint_generateBakeData(DynamicPaintSurface *surface, const Sce
/*
* Do Dynamic Paint step. Paints scene brush objects of current state/frame to the surface.
*/
-static int dynamicPaint_doStep(Scene *scene, Object *ob, DynamicPaintSurface *surface, float timescale, float subframe)
+static int dynamicPaint_doStep(const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, DynamicPaintSurface *surface, float timescale, float subframe)
{
PaintSurfaceData *sData = surface->data;
PaintBakeData *bData = sData->bData;
@@ -6035,9 +6033,9 @@ static int dynamicPaint_doStep(Scene *scene, Object *ob, DynamicPaintSurface *su
*/
{
Base *base = NULL;
- GroupObject *go = NULL;
Object *brushObj = NULL;
ModifierData *md = NULL;
+ ViewLayer *view_layer = eval_ctx->view_layer;
/* backup current scene frame */
int scene_frame = scene->r.cfra;
@@ -6045,25 +6043,17 @@ static int dynamicPaint_doStep(Scene *scene, Object *ob, DynamicPaintSurface *su
/* either from group or from all objects */
if (surface->brush_group)
- go = surface->brush_group->gobject.first;
+ base = FIRSTBASE(surface->brush_group->view_layer);
else
- base = scene->base.first;
+ base = FIRSTBASE(view_layer);
- while (base || go) {
+ while (base) {
brushObj = NULL;
/* select object */
- if (surface->brush_group) {
- if (go->ob)
- brushObj = go->ob;
- }
- else
- brushObj = base->object;
+ brushObj = base->object;
/* next item */
- if (surface->brush_group)
- go = go->next;
- else
- base = base->next;
+ base = base->next;
if (!brushObj) {
/* skip item */
@@ -6092,7 +6082,7 @@ static int dynamicPaint_doStep(Scene *scene, Object *ob, DynamicPaintSurface *su
/* update object data on this subframe */
if (subframe) {
scene_setSubframe(scene, subframe);
- BKE_object_modifier_update_subframe(scene, brushObj, true, SUBFRAME_RECURSION,
+ BKE_object_modifier_update_subframe(eval_ctx, scene, brushObj, true, SUBFRAME_RECURSION,
BKE_scene_frame_get(scene), eModifierType_DynamicPaint);
}
/* Prepare materials if required */
@@ -6100,8 +6090,6 @@ static int dynamicPaint_doStep(Scene *scene, Object *ob, DynamicPaintSurface *su
dynamicPaint_updateBrushMaterials(brushObj, brush->mat, scene, &bMats);
/* Apply brush on the surface depending on it's collision type */
- /* Particle brush: */
- if (brush->collision == MOD_DPAINT_COL_PSYS) {
if (brush->psys && brush->psys->part &&
ELEM(brush->psys->part->type, PART_EMITTER, PART_FLUID) &&
psys_check_enabled(brushObj, brush->psys, G.is_rendering))
@@ -6111,14 +6099,13 @@ static int dynamicPaint_doStep(Scene *scene, Object *ob, DynamicPaintSurface *su
BKE_scene_frame_get(scene), ADT_RECALC_ANIM);
dynamicPaint_paintParticles(surface, brush->psys, brush, timescale);
}
- }
/* Object center distance: */
- else if (brush->collision == MOD_DPAINT_COL_POINT && brushObj != ob) {
- dynamicPaint_paintSinglePoint(surface, brushObj->loc, brush, brushObj, &bMats, scene, timescale);
+ if (brush->collision == MOD_DPAINT_COL_POINT && brushObj != ob) {
+ dynamicPaint_paintSinglePoint(eval_ctx, surface, brushObj->loc, brush, brushObj, &bMats, scene, timescale);
}
/* Mesh volume/proximity: */
else if (brushObj != ob) {
- dynamicPaint_paintMesh(surface, brush, brushObj, &bMats, scene, timescale);
+ dynamicPaint_paintMesh(eval_ctx, surface, brush, brushObj, &bMats, scene, timescale);
}
/* free temp material data */
@@ -6128,7 +6115,7 @@ static int dynamicPaint_doStep(Scene *scene, Object *ob, DynamicPaintSurface *su
if (subframe) {
scene->r.cfra = scene_frame;
scene->r.subframe = scene_subframe;
- BKE_object_modifier_update_subframe(scene, brushObj, true, SUBFRAME_RECURSION,
+ BKE_object_modifier_update_subframe(eval_ctx, scene, brushObj, true, SUBFRAME_RECURSION,
BKE_scene_frame_get(scene), eModifierType_DynamicPaint);
}
@@ -6163,7 +6150,7 @@ static int dynamicPaint_doStep(Scene *scene, Object *ob, DynamicPaintSurface *su
return setError(canvas, N_("Not enough free memory"));
/* Prepare effects and get number of required steps */
- steps = dynamicPaint_prepareEffectStep(surface, scene, ob, &force, timescale);
+ steps = dynamicPaint_prepareEffectStep(eval_ctx, surface, scene, ob, &force, timescale);
for (s = 0; s < steps; s++) {
dynamicPaint_doEffectStep(surface, force, prevPoint, timescale, (float)steps);
}
@@ -6187,7 +6174,9 @@ static int dynamicPaint_doStep(Scene *scene, Object *ob, DynamicPaintSurface *su
/*
* Calculate a single frame and included subframes for surface
*/
-int dynamicPaint_calculateFrame(DynamicPaintSurface *surface, Scene *scene, Object *cObject, int frame)
+int dynamicPaint_calculateFrame(
+ DynamicPaintSurface *surface, const struct EvaluationContext *eval_ctx,
+ Scene *scene, Object *cObject, int frame)
{
float timescale = 1.0f;
@@ -6196,7 +6185,7 @@ int dynamicPaint_calculateFrame(DynamicPaintSurface *surface, Scene *scene, Obje
dynamicPaint_applySurfaceDisplace(surface, surface->canvas->dm);
/* update bake data */
- dynamicPaint_generateBakeData(surface, scene, cObject);
+ dynamicPaint_generateBakeData(surface, eval_ctx->view_layer, cObject);
/* don't do substeps for first frame */
if (surface->substeps && (frame != surface->start_frame)) {
@@ -6205,10 +6194,10 @@ int dynamicPaint_calculateFrame(DynamicPaintSurface *surface, Scene *scene, Obje
for (st = 1; st <= surface->substeps; st++) {
float subframe = ((float) st) / (surface->substeps + 1);
- if (!dynamicPaint_doStep(scene, cObject, surface, timescale, subframe))
+ if (!dynamicPaint_doStep(eval_ctx, scene, cObject, surface, timescale, subframe))
return 0;
}
}
- return dynamicPaint_doStep(scene, cObject, surface, timescale, 0.0f);
+ return dynamicPaint_doStep(eval_ctx, scene, cObject, surface, timescale, 0.0f);
}
diff --git a/source/blender/blenkernel/intern/editderivedmesh.c b/source/blender/blenkernel/intern/editderivedmesh.c
index be8fcaa6863..0491cbd21f0 100644
--- a/source/blender/blenkernel/intern/editderivedmesh.c
+++ b/source/blender/blenkernel/intern/editderivedmesh.c
@@ -52,6 +52,7 @@
#include "BKE_mesh.h"
#include "BKE_editmesh.h"
#include "BKE_editmesh_bvh.h"
+#include "BKE_editmesh_tangent.h"
#include "DNA_scene_types.h"
#include "DNA_object_types.h"
@@ -242,392 +243,29 @@ static void emDM_calcLoopNormalsSpaceArray(
#endif
}
-
-/** \name Tangent Space Calculation
- * \{ */
-
-/* Necessary complexity to handle looptri's as quads for correct tangents */
-#define USE_LOOPTRI_DETECT_QUADS
-
-typedef struct {
- const float (*precomputedFaceNormals)[3];
- const float (*precomputedLoopNormals)[3];
- const BMLoop *(*looptris)[3];
- int cd_loop_uv_offset; /* texture coordinates */
- const float (*orco)[3];
- float (*tangent)[4]; /* destination */
- int numTessFaces;
-
-#ifdef USE_LOOPTRI_DETECT_QUADS
- /* map from 'fake' face index to looptri,
- * quads will point to the first looptri of the quad */
- const int *face_as_quad_map;
- int num_face_as_quad_map;
-#endif
-
-} SGLSLEditMeshToTangent;
-
-#ifdef USE_LOOPTRI_DETECT_QUADS
-/* seems weak but only used on quads */
-static const BMLoop *bm_loop_at_face_index(const BMFace *f, int vert_index)
-{
- const BMLoop *l = BM_FACE_FIRST_LOOP(f);
- while (vert_index--) {
- l = l->next;
- }
- return l;
-}
-#endif
-
-/* interface */
-#include "mikktspace.h"
-
-static int emdm_ts_GetNumFaces(const SMikkTSpaceContext *pContext)
-{
- SGLSLEditMeshToTangent *pMesh = pContext->m_pUserData;
-
-#ifdef USE_LOOPTRI_DETECT_QUADS
- return pMesh->num_face_as_quad_map;
-#else
- return pMesh->numTessFaces;
-#endif
-}
-
-static int emdm_ts_GetNumVertsOfFace(const SMikkTSpaceContext *pContext, const int face_num)
-{
-#ifdef USE_LOOPTRI_DETECT_QUADS
- SGLSLEditMeshToTangent *pMesh = pContext->m_pUserData;
- if (pMesh->face_as_quad_map) {
- const BMLoop **lt = pMesh->looptris[pMesh->face_as_quad_map[face_num]];
- if (lt[0]->f->len == 4) {
- return 4;
- }
- }
- return 3;
-#else
- UNUSED_VARS(pContext, face_num);
- return 3;
-#endif
-}
-
-static void emdm_ts_GetPosition(
- const SMikkTSpaceContext *pContext, float r_co[3],
- const int face_num, const int vert_index)
-{
- //assert(vert_index >= 0 && vert_index < 4);
- SGLSLEditMeshToTangent *pMesh = pContext->m_pUserData;
- const BMLoop **lt;
- const BMLoop *l;
-
-#ifdef USE_LOOPTRI_DETECT_QUADS
- if (pMesh->face_as_quad_map) {
- lt = pMesh->looptris[pMesh->face_as_quad_map[face_num]];
- if (lt[0]->f->len == 4) {
- l = bm_loop_at_face_index(lt[0]->f, vert_index);
- goto finally;
- }
- /* fall through to regular triangle */
- }
- else {
- lt = pMesh->looptris[face_num];
- }
-#else
- lt = pMesh->looptris[face_num];
-#endif
- l = lt[vert_index];
-
- const float *co;
-
-finally:
- co = l->v->co;
- copy_v3_v3(r_co, co);
-}
-
-static void emdm_ts_GetTextureCoordinate(
- const SMikkTSpaceContext *pContext, float r_uv[2],
- const int face_num, const int vert_index)
-{
- //assert(vert_index >= 0 && vert_index < 4);
- SGLSLEditMeshToTangent *pMesh = pContext->m_pUserData;
- const BMLoop **lt;
- const BMLoop *l;
-
-#ifdef USE_LOOPTRI_DETECT_QUADS
- if (pMesh->face_as_quad_map) {
- lt = pMesh->looptris[pMesh->face_as_quad_map[face_num]];
- if (lt[0]->f->len == 4) {
- l = bm_loop_at_face_index(lt[0]->f, vert_index);
- goto finally;
- }
- /* fall through to regular triangle */
- }
- else {
- lt = pMesh->looptris[face_num];
- }
-#else
- lt = pMesh->looptris[face_num];
-#endif
- l = lt[vert_index];
-
-finally:
- if (pMesh->cd_loop_uv_offset != -1) {
- const float *uv = BM_ELEM_CD_GET_VOID_P(l, pMesh->cd_loop_uv_offset);
- copy_v2_v2(r_uv, uv);
- }
- else {
- const float *orco = pMesh->orco[BM_elem_index_get(l->v)];
- map_to_sphere(&r_uv[0], &r_uv[1], orco[0], orco[1], orco[2]);
- }
-}
-
-static void emdm_ts_GetNormal(
- const SMikkTSpaceContext *pContext, float r_no[3],
- const int face_num, const int vert_index)
-{
- //assert(vert_index >= 0 && vert_index < 4);
- SGLSLEditMeshToTangent *pMesh = pContext->m_pUserData;
- const BMLoop **lt;
- const BMLoop *l;
-
-#ifdef USE_LOOPTRI_DETECT_QUADS
- if (pMesh->face_as_quad_map) {
- lt = pMesh->looptris[pMesh->face_as_quad_map[face_num]];
- if (lt[0]->f->len == 4) {
- l = bm_loop_at_face_index(lt[0]->f, vert_index);
- goto finally;
- }
- /* fall through to regular triangle */
- }
- else {
- lt = pMesh->looptris[face_num];
- }
-#else
- lt = pMesh->looptris[face_num];
-#endif
- l = lt[vert_index];
-
-finally:
- if (pMesh->precomputedLoopNormals) {
- copy_v3_v3(r_no, pMesh->precomputedLoopNormals[BM_elem_index_get(l)]);
- }
- else if (BM_elem_flag_test(l->f, BM_ELEM_SMOOTH) == 0) { /* flat */
- if (pMesh->precomputedFaceNormals) {
- copy_v3_v3(r_no, pMesh->precomputedFaceNormals[BM_elem_index_get(l->f)]);
- }
- else {
- copy_v3_v3(r_no, l->f->no);
- }
- }
- else {
- copy_v3_v3(r_no, l->v->no);
- }
-}
-
-static void emdm_ts_SetTSpace(
- const SMikkTSpaceContext *pContext, const float fvTangent[3], const float fSign,
- const int face_num, const int vert_index)
-{
- //assert(vert_index >= 0 && vert_index < 4);
- SGLSLEditMeshToTangent *pMesh = pContext->m_pUserData;
- const BMLoop **lt;
- const BMLoop *l;
-
-#ifdef USE_LOOPTRI_DETECT_QUADS
- if (pMesh->face_as_quad_map) {
- lt = pMesh->looptris[pMesh->face_as_quad_map[face_num]];
- if (lt[0]->f->len == 4) {
- l = bm_loop_at_face_index(lt[0]->f, vert_index);
- goto finally;
- }
- /* fall through to regular triangle */
- }
- else {
- lt = pMesh->looptris[face_num];
- }
-#else
- lt = pMesh->looptris[face_num];
-#endif
- l = lt[vert_index];
-
- float *pRes;
-
-finally:
- pRes = pMesh->tangent[BM_elem_index_get(l)];
- copy_v3_v3(pRes, fvTangent);
- pRes[3] = fSign;
-}
-
-static void emDM_calc_loop_tangents_thread(TaskPool * __restrict UNUSED(pool), void *taskdata, int UNUSED(threadid))
-{
- struct SGLSLEditMeshToTangent *mesh2tangent = taskdata;
- /* new computation method */
- {
- SMikkTSpaceContext sContext = {NULL};
- SMikkTSpaceInterface sInterface = {NULL};
- sContext.m_pUserData = mesh2tangent;
- sContext.m_pInterface = &sInterface;
- sInterface.m_getNumFaces = emdm_ts_GetNumFaces;
- sInterface.m_getNumVerticesOfFace = emdm_ts_GetNumVertsOfFace;
- sInterface.m_getPosition = emdm_ts_GetPosition;
- sInterface.m_getTexCoord = emdm_ts_GetTextureCoordinate;
- sInterface.m_getNormal = emdm_ts_GetNormal;
- sInterface.m_setTSpaceBasic = emdm_ts_SetTSpace;
- /* 0 if failed */
- genTangSpaceDefault(&sContext);
- }
-}
-
-/**
- * \see #DM_calc_loop_tangents, same logic but used arrays instead of #BMesh data.
- *
- * \note This function is not so normal, its using `bm->ldata` as input, but output's to `dm->loopData`.
- * This is done because #CD_TANGENT is cache data used only for drawing.
- */
-
static void emDM_calc_loop_tangents(
DerivedMesh *dm, bool calc_active_tangent,
- const char (*tangent_names)[MAX_NAME], int tangent_names_count)
+ const char (*tangent_names)[MAX_NAME], int tangent_names_len)
{
EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm;
BMEditMesh *em = bmdm->em;
- BMesh *bm = bmdm->em->bm;
-
- int act_uv_n = -1;
- int ren_uv_n = -1;
- bool calc_act = false;
- bool calc_ren = false;
- char act_uv_name[MAX_NAME];
- char ren_uv_name[MAX_NAME];
- short tangent_mask = 0;
-
- DM_calc_loop_tangents_step_0(
- &bm->ldata, calc_active_tangent, tangent_names, tangent_names_count,
- &calc_act, &calc_ren, &act_uv_n, &ren_uv_n, act_uv_name, ren_uv_name, &tangent_mask);
-
- if ((dm->tangent_mask | tangent_mask) != dm->tangent_mask) {
- for (int i = 0; i < tangent_names_count; i++)
- if (tangent_names[i][0])
- DM_add_named_tangent_layer_for_uv(&bm->ldata, &dm->loopData, dm->numLoopData, tangent_names[i]);
- if ((tangent_mask & DM_TANGENT_MASK_ORCO) && CustomData_get_named_layer_index(&dm->loopData, CD_TANGENT, "") == -1)
- CustomData_add_layer_named(&dm->loopData, CD_TANGENT, CD_CALLOC, NULL, dm->numLoopData, "");
- if (calc_act && act_uv_name[0])
- DM_add_named_tangent_layer_for_uv(&bm->ldata, &dm->loopData, dm->numLoopData, act_uv_name);
- if (calc_ren && ren_uv_name[0])
- DM_add_named_tangent_layer_for_uv(&bm->ldata, &dm->loopData, dm->numLoopData, ren_uv_name);
- int totface = em->tottri;
-#ifdef USE_LOOPTRI_DETECT_QUADS
- int num_face_as_quad_map;
- int *face_as_quad_map = NULL;
-
- /* map faces to quads */
- if (bmdm->em->tottri != bm->totface) {
- /* over alloc, since we dont know how many ngon or quads we have */
-
- /* map fake face index to looptri */
- face_as_quad_map = MEM_mallocN(sizeof(int) * totface, __func__);
- int i, j;
- for (i = 0, j = 0; j < totface; i++, j++) {
- face_as_quad_map[i] = j;
- /* step over all quads */
- if (em->looptris[j][0]->f->len == 4) {
- j++; /* skips the nest looptri */
- }
- }
- num_face_as_quad_map = i;
- }
- else {
- num_face_as_quad_map = totface;
- }
-#endif
- /* Calculation */
- {
- TaskScheduler *scheduler = BLI_task_scheduler_get();
- TaskPool *task_pool;
- task_pool = BLI_task_pool_create(scheduler, NULL);
-
- dm->tangent_mask = 0;
- /* Calculate tangent layers */
- SGLSLEditMeshToTangent data_array[MAX_MTFACE];
- int index = 0;
- int n = 0;
- CustomData_update_typemap(&dm->loopData);
- const int tangent_layer_num = CustomData_number_of_layers(&dm->loopData, CD_TANGENT);
- for (n = 0; n < tangent_layer_num; n++) {
- index = CustomData_get_layer_index_n(&dm->loopData, CD_TANGENT, n);
- BLI_assert(n < MAX_MTFACE);
- SGLSLEditMeshToTangent *mesh2tangent = &data_array[n];
- mesh2tangent->numTessFaces = em->tottri;
-#ifdef USE_LOOPTRI_DETECT_QUADS
- mesh2tangent->face_as_quad_map = face_as_quad_map;
- mesh2tangent->num_face_as_quad_map = num_face_as_quad_map;
-#endif
- mesh2tangent->precomputedFaceNormals = bmdm->polyNos; /* dm->getPolyDataArray(dm, CD_NORMAL) */
- /* Note, we assume we do have tessellated loop normals at this point (in case it is object-enabled),
- * have to check this is valid...
- */
- mesh2tangent->precomputedLoopNormals = CustomData_get_layer(&dm->loopData, CD_NORMAL);
- mesh2tangent->cd_loop_uv_offset = CustomData_get_n_offset(&bm->ldata, CD_MLOOPUV, n);
-
- /* needed for indexing loop-tangents */
- int htype_index = BM_LOOP;
- if (mesh2tangent->cd_loop_uv_offset == -1) {
- mesh2tangent->orco = dm->getVertDataArray(dm, CD_ORCO);
- if (!mesh2tangent->orco)
- continue;
- /* needed for orco lookups */
- htype_index |= BM_VERT;
- dm->tangent_mask |= DM_TANGENT_MASK_ORCO;
- }
- else {
- /* Fill the resulting tangent_mask */
- int uv_ind = CustomData_get_named_layer_index(&bm->ldata, CD_MLOOPUV, dm->loopData.layers[index].name);
- int uv_start = CustomData_get_layer_index(&bm->ldata, CD_MLOOPUV);
- BLI_assert(uv_ind != -1 && uv_start != -1);
- BLI_assert(uv_ind - uv_start < MAX_MTFACE);
- dm->tangent_mask |= 1 << (uv_ind - uv_start);
- }
-
- if (mesh2tangent->precomputedFaceNormals) {
- /* needed for face normal lookups */
- htype_index |= BM_FACE;
- }
- BM_mesh_elem_index_ensure(bm, htype_index);
- mesh2tangent->looptris = (const BMLoop *(*)[3])em->looptris;
- mesh2tangent->tangent = dm->loopData.layers[index].data;
-
- BLI_task_pool_push(task_pool, emDM_calc_loop_tangents_thread, mesh2tangent, false, TASK_PRIORITY_LOW);
- }
-
- BLI_assert(dm->tangent_mask == tangent_mask);
- BLI_task_pool_work_and_wait(task_pool);
- BLI_task_pool_free(task_pool);
- }
-#ifdef USE_LOOPTRI_DETECT_QUADS
- if (face_as_quad_map) {
- MEM_freeN(face_as_quad_map);
- }
-#undef USE_LOOPTRI_DETECT_QUADS
-#endif
+ if (CustomData_number_of_layers(&em->bm->ldata, CD_MLOOPUV) == 0) {
+ return;
}
- /* Update active layer index */
- int act_uv_index = CustomData_get_layer_index_n(&bm->ldata, CD_MLOOPUV, act_uv_n);
- if (act_uv_index >= 0) {
- int tan_index = CustomData_get_named_layer_index(&dm->loopData, CD_TANGENT, bm->ldata.layers[act_uv_index].name);
- CustomData_set_layer_active_index(&dm->loopData, CD_TANGENT, tan_index);
- } /* else tangent has been built from orco */
-
- /* Update render layer index */
- int ren_uv_index = CustomData_get_layer_index_n(&bm->ldata, CD_MLOOPUV, ren_uv_n);
- if (ren_uv_index >= 0) {
- int tan_index = CustomData_get_named_layer_index(&dm->loopData, CD_TANGENT, bm->ldata.layers[ren_uv_index].name);
- CustomData_set_layer_render_index(&dm->loopData, CD_TANGENT, tan_index);
- } /* else tangent has been built from orco */
+ const float (*poly_normals)[3] = bmdm->polyNos;
+ const float (*loop_normals)[3] = CustomData_get_layer(&dm->loopData, CD_NORMAL);
+ const float (*vert_orco)[3] = dm->getVertDataArray(dm, CD_ORCO); /* can be NULL */
+ BKE_editmesh_loop_tangent_calc(
+ em, calc_active_tangent,
+ tangent_names, tangent_names_len,
+ poly_normals, loop_normals,
+ vert_orco,
+ &dm->loopData, dm->numLoopData,
+ &dm->tangent_mask);
}
-/** \} */
-
static void emDM_recalcTessellation(DerivedMesh *UNUSED(dm))
{
@@ -816,39 +454,6 @@ static void emDM_drawMappedEdgesInterp(
}
}
-static void emDM_drawUVEdges(DerivedMesh *dm)
-{
- EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm;
- BMesh *bm = bmdm->em->bm;
- BMFace *efa;
- BMIter iter;
-
- const int cd_loop_uv_offset = CustomData_get_offset(&bm->ldata, CD_MLOOPUV);
-
- if (UNLIKELY(cd_loop_uv_offset == -1)) {
- return;
- }
-
- glBegin(GL_LINES);
- BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
- BMLoop *l_iter, *l_first;
- const float *uv, *uv_prev;
-
- if (BM_elem_flag_test(efa, BM_ELEM_HIDDEN))
- continue;
-
- l_iter = l_first = BM_FACE_FIRST_LOOP(efa);
- uv_prev = ((MLoopUV *)BM_ELEM_CD_GET_VOID_P(l_iter->prev, cd_loop_uv_offset))->uv;
- do {
- uv = ((MLoopUV *)BM_ELEM_CD_GET_VOID_P(l_iter, cd_loop_uv_offset))->uv;
- glVertex2fv(uv);
- glVertex2fv(uv_prev);
- uv_prev = uv;
- } while ((l_iter = l_iter->next) != l_first);
- }
- glEnd();
-}
-
static void emDM_foreachMappedLoop(
DerivedMesh *dm,
void (*func)(void *userData, int vertex_index, int face_index, const float co[3], const float no[3]),
@@ -1036,11 +641,11 @@ static void emDM_drawMappedFaces(
if (poly_prev != GL_ZERO) glEnd();
glBegin((poly_prev = poly_type)); /* BMesh: will always be GL_TRIANGLES */
}
- if (has_vcol_any) glColor4ubv((const GLubyte *)&(lcol[0]->r));
+ if (has_vcol_any) glColor3ubv((const GLubyte *)&(lcol[0]->r));
glVertex3fv(vertexCos[BM_elem_index_get(ltri[0]->v)]);
- if (has_vcol_any) glColor4ubv((const GLubyte *)&(lcol[1]->r));
+ if (has_vcol_any) glColor3ubv((const GLubyte *)&(lcol[1]->r));
glVertex3fv(vertexCos[BM_elem_index_get(ltri[1]->v)]);
- if (has_vcol_any) glColor4ubv((const GLubyte *)&(lcol[2]->r));
+ if (has_vcol_any) glColor3ubv((const GLubyte *)&(lcol[2]->r));
glVertex3fv(vertexCos[BM_elem_index_get(ltri[2]->v)]);
}
else {
@@ -1057,23 +662,23 @@ static void emDM_drawMappedFaces(
if (!drawSmooth) {
glNormal3fv(polyNos[BM_elem_index_get(efa)]);
- if (has_vcol_any) glColor4ubv((const GLubyte *)&(lcol[0]->r));
+ if (has_vcol_any) glColor3ubv((const GLubyte *)&(lcol[0]->r));
glVertex3fv(vertexCos[BM_elem_index_get(ltri[0]->v)]);
- if (has_vcol_any) glColor4ubv((const GLubyte *)&(lcol[1]->r));
+ if (has_vcol_any) glColor3ubv((const GLubyte *)&(lcol[1]->r));
glVertex3fv(vertexCos[BM_elem_index_get(ltri[1]->v)]);
- if (has_vcol_any) glColor4ubv((const GLubyte *)&(lcol[2]->r));
+ if (has_vcol_any) glColor3ubv((const GLubyte *)&(lcol[2]->r));
glVertex3fv(vertexCos[BM_elem_index_get(ltri[2]->v)]);
}
else {
- if (has_vcol_any) glColor4ubv((const GLubyte *)&(lcol[0]->r));
+ if (has_vcol_any) glColor3ubv((const GLubyte *)&(lcol[0]->r));
if (lnors) glNormal3fv(lnors[BM_elem_index_get(ltri[0])]);
else glNormal3fv(vertexNos[BM_elem_index_get(ltri[0]->v)]);
glVertex3fv(vertexCos[BM_elem_index_get(ltri[0]->v)]);
- if (has_vcol_any) glColor4ubv((const GLubyte *)&(lcol[1]->r));
+ if (has_vcol_any) glColor3ubv((const GLubyte *)&(lcol[1]->r));
if (lnors) glNormal3fv(lnors[BM_elem_index_get(ltri[1])]);
else glNormal3fv(vertexNos[BM_elem_index_get(ltri[1]->v)]);
glVertex3fv(vertexCos[BM_elem_index_get(ltri[1]->v)]);
- if (has_vcol_any) glColor4ubv((const GLubyte *)&(lcol[2]->r));
+ if (has_vcol_any) glColor3ubv((const GLubyte *)&(lcol[2]->r));
if (lnors) glNormal3fv(lnors[BM_elem_index_get(ltri[2])]);
else glNormal3fv(vertexNos[BM_elem_index_get(ltri[2]->v)]);
glVertex3fv(vertexCos[BM_elem_index_get(ltri[2]->v)]);
@@ -1138,11 +743,11 @@ static void emDM_drawMappedFaces(
if (poly_prev != GL_ZERO) glEnd();
glBegin((poly_prev = poly_type)); /* BMesh: will always be GL_TRIANGLES */
}
- if (has_vcol_any) glColor4ubv((const GLubyte *)&(lcol[0]->r));
+ if (has_vcol_any) glColor3ubv((const GLubyte *)&(lcol[0]->r));
glVertex3fv(ltri[0]->v->co);
- if (has_vcol_any) glColor4ubv((const GLubyte *)&(lcol[1]->r));
+ if (has_vcol_any) glColor3ubv((const GLubyte *)&(lcol[1]->r));
glVertex3fv(ltri[1]->v->co);
- if (has_vcol_any) glColor4ubv((const GLubyte *)&(lcol[2]->r));
+ if (has_vcol_any) glColor3ubv((const GLubyte *)&(lcol[2]->r));
glVertex3fv(ltri[2]->v->co);
}
else {
@@ -1159,23 +764,23 @@ static void emDM_drawMappedFaces(
if (!drawSmooth) {
glNormal3fv(efa->no);
- if (has_vcol_any) glColor4ubv((const GLubyte *)&(lcol[0]->r));
+ if (has_vcol_any) glColor3ubv((const GLubyte *)&(lcol[0]->r));
glVertex3fv(ltri[0]->v->co);
- if (has_vcol_any) glColor4ubv((const GLubyte *)&(lcol[1]->r));
+ if (has_vcol_any) glColor3ubv((const GLubyte *)&(lcol[1]->r));
glVertex3fv(ltri[1]->v->co);
- if (has_vcol_any) glColor4ubv((const GLubyte *)&(lcol[2]->r));
+ if (has_vcol_any) glColor3ubv((const GLubyte *)&(lcol[2]->r));
glVertex3fv(ltri[2]->v->co);
}
else {
- if (has_vcol_any) glColor4ubv((const GLubyte *)&(lcol[0]->r));
+ if (has_vcol_any) glColor3ubv((const GLubyte *)&(lcol[0]->r));
if (lnors) glNormal3fv(lnors[BM_elem_index_get(ltri[0])]);
else glNormal3fv(ltri[0]->v->no);
glVertex3fv(ltri[0]->v->co);
- if (has_vcol_any) glColor4ubv((const GLubyte *)&(lcol[1]->r));
+ if (has_vcol_any) glColor3ubv((const GLubyte *)&(lcol[1]->r));
if (lnors) glNormal3fv(lnors[BM_elem_index_get(ltri[1])]);
else glNormal3fv(ltri[1]->v->no);
glVertex3fv(ltri[1]->v->co);
- if (has_vcol_any) glColor4ubv((const GLubyte *)&(lcol[2]->r));
+ if (has_vcol_any) glColor3ubv((const GLubyte *)&(lcol[2]->r));
if (lnors) glNormal3fv(lnors[BM_elem_index_get(ltri[2])]);
else glNormal3fv(ltri[2]->v->no);
glVertex3fv(ltri[2]->v->co);
@@ -1197,20 +802,6 @@ static void emDM_drawMappedFaces(
}
}
-static void bmdm_get_tri_uv(BMLoop *ltri[3], MLoopUV *luv[3], const int cd_loop_uv_offset)
-{
- luv[0] = BM_ELEM_CD_GET_VOID_P(ltri[0], cd_loop_uv_offset);
- luv[1] = BM_ELEM_CD_GET_VOID_P(ltri[1], cd_loop_uv_offset);
- luv[2] = BM_ELEM_CD_GET_VOID_P(ltri[2], cd_loop_uv_offset);
-}
-
-static void bmdm_get_tri_col(BMLoop *ltri[3], MLoopCol *lcol[3], const int cd_loop_color_offset)
-{
- lcol[0] = BM_ELEM_CD_GET_VOID_P(ltri[0], cd_loop_color_offset);
- lcol[1] = BM_ELEM_CD_GET_VOID_P(ltri[1], cd_loop_color_offset);
- lcol[2] = BM_ELEM_CD_GET_VOID_P(ltri[2], cd_loop_color_offset);
-}
-
static void bmdm_get_tri_colpreview(BMLoop *ls[3], MLoopCol *lcol[3], unsigned char(*color_vert_array)[4])
{
lcol[0] = (MLoopCol *)color_vert_array[BM_elem_index_get(ls[0]->v)];
@@ -1218,204 +809,6 @@ static void bmdm_get_tri_colpreview(BMLoop *ls[3], MLoopCol *lcol[3], unsigned c
lcol[2] = (MLoopCol *)color_vert_array[BM_elem_index_get(ls[2]->v)];
}
-static void emDM_drawFacesTex_common(
- DerivedMesh *dm,
- DMSetDrawOptionsTex drawParams,
- DMSetDrawOptionsMappedTex drawParamsMapped,
- DMCompareDrawOptions compareDrawOptions,
- void *userData)
-{
- EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm;
- BMEditMesh *em = bmdm->em;
- BMesh *bm = em->bm;
- struct BMLoop *(*looptris)[3] = em->looptris;
- BMFace *efa;
- const float (*lnors)[3] = dm->getLoopDataArray(dm, CD_NORMAL);
- MLoopUV *luv[3], dummyluv = {{0}};
- MLoopCol *lcol[3] = {NULL} /* , dummylcol = {0} */;
- const int cd_loop_uv_offset = CustomData_get_offset(&bm->ldata, CD_MLOOPUV);
- const int cd_loop_color_offset = CustomData_get_offset(&bm->ldata, CD_MLOOPCOL);
- const int cd_poly_tex_offset = CustomData_get_offset(&bm->pdata, CD_MTEXPOLY);
- unsigned char(*color_vert_array)[4] = em->derivedVertColor;
- bool has_uv = (cd_loop_uv_offset != -1);
- bool has_vcol_preview = (color_vert_array != NULL);
- bool has_vcol = (cd_loop_color_offset != -1) && (has_vcol_preview == false);
- bool has_vcol_any = (has_vcol_preview || has_vcol);
- int i;
-
- (void) compareDrawOptions;
-
- luv[0] = luv[1] = luv[2] = &dummyluv;
-
- // dummylcol.r = dummylcol.g = dummylcol.b = dummylcol.a = 255; /* UNUSED */
-
- /* always use smooth shading even for flat faces, else vertex colors wont interpolate */
- BM_mesh_elem_index_ensure(bm, BM_FACE);
-
- /* call again below is ok */
- if (has_vcol_preview) {
- BM_mesh_elem_index_ensure(bm, BM_VERT);
- }
-
- if (bmdm->vertexCos) {
- /* add direct access */
- const float (*vertexCos)[3] = bmdm->vertexCos;
- const float (*vertexNos)[3];
- const float (*polyNos)[3];
-
- emDM_ensureVertNormals(bmdm);
- emDM_ensurePolyNormals(bmdm);
- vertexNos = bmdm->vertexNos;
- polyNos = bmdm->polyNos;
-
- BM_mesh_elem_index_ensure(bm, lnors ? BM_LOOP | BM_VERT : BM_VERT);
-
- for (i = 0; i < em->tottri; i++) {
- BMLoop **ltri = looptris[i];
- MTexPoly *tp = (cd_poly_tex_offset != -1) ? BM_ELEM_CD_GET_VOID_P(ltri[0]->f, cd_poly_tex_offset) : NULL;
- /*unsigned char *cp = NULL;*/ /*UNUSED*/
- int drawSmooth = lnors || BM_elem_flag_test(ltri[0]->f, BM_ELEM_SMOOTH);
- DMDrawOption draw_option;
-
- efa = ltri[0]->f;
-
- if (drawParams) {
- draw_option = drawParams(tp, has_vcol, efa->mat_nr);
- }
- else if (drawParamsMapped)
- draw_option = drawParamsMapped(userData, BM_elem_index_get(efa), efa->mat_nr);
- else
- draw_option = DM_DRAW_OPTION_NORMAL;
-
- if (draw_option != DM_DRAW_OPTION_SKIP) {
-
- if (has_uv) bmdm_get_tri_uv(ltri, luv, cd_loop_uv_offset);
- if (has_vcol) bmdm_get_tri_col(ltri, lcol, cd_loop_color_offset);
- else if (has_vcol_preview) bmdm_get_tri_colpreview(ltri, lcol, color_vert_array);
-
- glBegin(GL_TRIANGLES);
- if (!drawSmooth) {
- glNormal3fv(polyNos[BM_elem_index_get(efa)]);
-
- glTexCoord2fv(luv[0]->uv);
- if (has_vcol_any) glColor4ubv((const GLubyte *)&(lcol[0]->r));
- glVertex3fv(vertexCos[BM_elem_index_get(ltri[0]->v)]);
-
- glTexCoord2fv(luv[1]->uv);
- if (has_vcol_any) glColor4ubv((const GLubyte *)&(lcol[1]->r));
- glVertex3fv(vertexCos[BM_elem_index_get(ltri[1]->v)]);
-
- glTexCoord2fv(luv[2]->uv);
- if (has_vcol_any) glColor4ubv((const GLubyte *)&(lcol[2]->r));
- glVertex3fv(vertexCos[BM_elem_index_get(ltri[2]->v)]);
- }
- else {
- glTexCoord2fv(luv[0]->uv);
- if (has_vcol_any) glColor4ubv((const GLubyte *)&(lcol[0]->r));
- if (lnors) glNormal3fv(lnors[BM_elem_index_get(ltri[0])]);
- else glNormal3fv(vertexNos[BM_elem_index_get(ltri[0]->v)]);
- glVertex3fv(vertexCos[BM_elem_index_get(ltri[0]->v)]);
-
- glTexCoord2fv(luv[1]->uv);
- if (has_vcol_any) glColor4ubv((const GLubyte *)&(lcol[1]->r));
- if (lnors) glNormal3fv(lnors[BM_elem_index_get(ltri[1])]);
- else glNormal3fv(vertexNos[BM_elem_index_get(ltri[1]->v)]);
- glVertex3fv(vertexCos[BM_elem_index_get(ltri[1]->v)]);
-
- glTexCoord2fv(luv[2]->uv);
- if (has_vcol_any) glColor4ubv((const GLubyte *)&(lcol[2]->r));
- if (lnors) glNormal3fv(lnors[BM_elem_index_get(ltri[2])]);
- else glNormal3fv(vertexNos[BM_elem_index_get(ltri[2]->v)]);
- glVertex3fv(vertexCos[BM_elem_index_get(ltri[2]->v)]);
- }
- glEnd();
- }
- }
- }
- else {
- BM_mesh_elem_index_ensure(bm, lnors ? BM_LOOP | BM_VERT : BM_VERT);
-
- for (i = 0; i < em->tottri; i++) {
- BMLoop **ltri = looptris[i];
- MTexPoly *tp = (cd_poly_tex_offset != -1) ? BM_ELEM_CD_GET_VOID_P(ltri[0]->f, cd_poly_tex_offset) : NULL;
- /*unsigned char *cp = NULL;*/ /*UNUSED*/
- int drawSmooth = lnors || BM_elem_flag_test(ltri[0]->f, BM_ELEM_SMOOTH);
- DMDrawOption draw_option;
-
- efa = ltri[0]->f;
-
- if (drawParams)
- draw_option = drawParams(tp, has_vcol, efa->mat_nr);
- else if (drawParamsMapped)
- draw_option = drawParamsMapped(userData, BM_elem_index_get(efa), efa->mat_nr);
- else
- draw_option = DM_DRAW_OPTION_NORMAL;
-
- if (draw_option != DM_DRAW_OPTION_SKIP) {
-
- if (has_uv) bmdm_get_tri_uv(ltri, luv, cd_loop_uv_offset);
- if (has_vcol) bmdm_get_tri_col(ltri, lcol, cd_loop_color_offset);
- else if (has_vcol_preview) bmdm_get_tri_colpreview(ltri, lcol, color_vert_array);
-
- glBegin(GL_TRIANGLES);
- if (!drawSmooth) {
- glNormal3fv(efa->no);
-
- glTexCoord2fv(luv[0]->uv);
- if (has_vcol_any) glColor4ubv((const GLubyte *)&(lcol[0]->r));
- glVertex3fv(ltri[0]->v->co);
-
- glTexCoord2fv(luv[1]->uv);
- if (has_vcol_any) glColor4ubv((const GLubyte *)&(lcol[1]->r));
- glVertex3fv(ltri[1]->v->co);
-
- glTexCoord2fv(luv[2]->uv);
- if (has_vcol_any) glColor4ubv((const GLubyte *)&(lcol[2]->r));
- glVertex3fv(ltri[2]->v->co);
- }
- else {
- glTexCoord2fv(luv[0]->uv);
- if (has_vcol_any) glColor4ubv((const GLubyte *)&(lcol[0]->r));
- if (lnors) glNormal3fv(lnors[BM_elem_index_get(ltri[0])]);
- else glNormal3fv(ltri[0]->v->no);
- glVertex3fv(ltri[0]->v->co);
-
- glTexCoord2fv(luv[1]->uv);
- if (has_vcol_any) glColor4ubv((const GLubyte *)&(lcol[1]->r));
- if (lnors) glNormal3fv(lnors[BM_elem_index_get(ltri[1])]);
- else glNormal3fv(ltri[1]->v->no);
- glVertex3fv(ltri[1]->v->co);
-
- glTexCoord2fv(luv[2]->uv);
- if (has_vcol_any) glColor4ubv((const GLubyte *)&(lcol[2]->r));
- if (lnors) glNormal3fv(lnors[BM_elem_index_get(ltri[2])]);
- else glNormal3fv(ltri[2]->v->no);
- glVertex3fv(ltri[2]->v->co);
- }
- glEnd();
- }
- }
- }
-}
-
-static void emDM_drawFacesTex(
- DerivedMesh *dm,
- DMSetDrawOptionsTex setDrawOptions,
- DMCompareDrawOptions compareDrawOptions,
- void *userData, DMDrawFlag UNUSED(flag))
-{
- emDM_drawFacesTex_common(dm, setDrawOptions, NULL, compareDrawOptions, userData);
-}
-
-static void emDM_drawMappedFacesTex(
- DerivedMesh *dm,
- DMSetDrawOptionsMappedTex setDrawOptions,
- DMCompareDrawOptions compareDrawOptions,
- void *userData, DMDrawFlag UNUSED(flag))
-{
- emDM_drawFacesTex_common(dm, NULL, setDrawOptions, compareDrawOptions, userData);
-}
-
/**
* \note
*
@@ -2061,14 +1454,8 @@ static void *emDM_getTessFaceDataArray(DerivedMesh *dm, int type)
if (type == CD_MTFACE || type == CD_MCOL) {
const char *bmdata;
char *data;
- bool has_type_source = false;
- if (type == CD_MTFACE) {
- has_type_source = CustomData_has_layer(&bm->pdata, CD_MTEXPOLY);
- }
- else {
- has_type_source = CustomData_has_layer(&bm->ldata, CD_MLOOPCOL);
- }
+ bool has_type_source = CustomData_has_layer(&bm->ldata, (type == CD_MTFACE) ? CD_MLOOPUV : CD_MLOOPCOL);
if (has_type_source) {
/* offset = bm->pdata.layers[index].offset; */ /* UNUSED */
@@ -2084,15 +1471,8 @@ static void *emDM_getTessFaceDataArray(DerivedMesh *dm, int type)
if (type == CD_MTFACE) {
const int cd_loop_uv_offset = CustomData_get_offset(&bm->ldata, CD_MLOOPUV);
- const int cd_poly_tex_offset = CustomData_get_offset(&bm->pdata, CD_MTEXPOLY);
for (i = 0; i < bmdm->em->tottri; i++, data += size) {
- BMFace *efa = looptris[i][0]->f;
-
- // bmdata = CustomData_bmesh_get(&bm->pdata, efa->head.data, CD_MTEXPOLY);
- bmdata = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
-
- ME_MTEXFACE_CPY(((MTFace *)data), ((const MTexPoly *)bmdata));
for (j = 0; j < 3; j++) {
// bmdata = CustomData_bmesh_get(&bm->ldata, looptris[i][j]->head.data, CD_MLOOPUV);
bmdata = BM_ELEM_CD_GET_VOID_P(looptris[i][j], cd_loop_uv_offset);
@@ -2284,12 +1664,9 @@ DerivedMesh *getEditDerivedBMesh(
bmdm->dm.drawMappedEdges = emDM_drawMappedEdges;
bmdm->dm.drawMappedEdgesInterp = emDM_drawMappedEdgesInterp;
bmdm->dm.drawMappedFaces = emDM_drawMappedFaces;
- bmdm->dm.drawMappedFacesTex = emDM_drawMappedFacesTex;
bmdm->dm.drawMappedFacesGLSL = emDM_drawMappedFacesGLSL;
bmdm->dm.drawMappedFacesMat = emDM_drawMappedFacesMat;
- bmdm->dm.drawFacesTex = emDM_drawFacesTex;
bmdm->dm.drawFacesGLSL = emDM_drawFacesGLSL;
- bmdm->dm.drawUVEdges = emDM_drawUVEdges;
bmdm->dm.release = emDM_release;
@@ -2799,14 +2176,14 @@ static void cage_mapped_verts_callback(
}
}
-float (*BKE_editmesh_vertexCos_get(BMEditMesh *em, Scene *scene, int *r_numVerts))[3]
+float (*BKE_editmesh_vertexCos_get(const struct EvaluationContext *eval_ctx, BMEditMesh *em, Scene *scene, int *r_numVerts))[3]
{
DerivedMesh *cage, *final;
BLI_bitmap *visit_bitmap;
struct CageUserData data;
float (*cos_cage)[3];
- cage = editbmesh_get_derived_cage_and_final(scene, em->ob, em, CD_MASK_BAREMESH, &final);
+ cage = editbmesh_get_derived_cage_and_final(eval_ctx, scene, em->ob, em, CD_MASK_BAREMESH, &final);
cos_cage = MEM_callocN(sizeof(*cos_cage) * em->bm->totvert, "bmbvh cos_cage");
/* when initializing cage verts, we only want the first cage coordinate for each vertex,
diff --git a/source/blender/blenkernel/intern/editmesh.c b/source/blender/blenkernel/intern/editmesh.c
index fea3c24d322..c95da3b2569 100644
--- a/source/blender/blenkernel/intern/editmesh.c
+++ b/source/blender/blenkernel/intern/editmesh.c
@@ -165,26 +165,6 @@ void BKE_editmesh_tessface_calc(BMEditMesh *em)
#endif
}
-void BKE_editmesh_update_linked_customdata(BMEditMesh *em)
-{
- BMesh *bm = em->bm;
- int act;
-
- if (CustomData_has_layer(&bm->pdata, CD_MTEXPOLY)) {
- act = CustomData_get_active_layer(&bm->pdata, CD_MTEXPOLY);
- CustomData_set_layer_active(&bm->ldata, CD_MLOOPUV, act);
-
- act = CustomData_get_render_layer(&bm->pdata, CD_MTEXPOLY);
- CustomData_set_layer_render(&bm->ldata, CD_MLOOPUV, act);
-
- act = CustomData_get_clone_layer(&bm->pdata, CD_MTEXPOLY);
- CustomData_set_layer_clone(&bm->ldata, CD_MLOOPUV, act);
-
- act = CustomData_get_stencil_layer(&bm->pdata, CD_MTEXPOLY);
- CustomData_set_layer_stencil(&bm->ldata, CD_MLOOPUV, act);
- }
-}
-
void BKE_editmesh_free_derivedmesh(BMEditMesh *em)
{
if (em->derivedCage) {
diff --git a/source/blender/blenkernel/intern/editmesh_tangent.c b/source/blender/blenkernel/intern/editmesh_tangent.c
new file mode 100644
index 00000000000..f725a1793b4
--- /dev/null
+++ b/source/blender/blenkernel/intern/editmesh_tangent.c
@@ -0,0 +1,431 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/blenkernel/intern/editmesh_tangent.c
+ * \ingroup bke
+ */
+
+#include "BLI_math.h"
+#include "BLI_task.h"
+
+#include "BKE_DerivedMesh.h"
+
+#include "BKE_mesh.h"
+#include "BKE_mesh_tangent.h" /* for utility functions */
+#include "BKE_editmesh.h"
+#include "BKE_editmesh_tangent.h"
+
+#include "MEM_guardedalloc.h"
+
+/* interface */
+#include "mikktspace.h"
+
+/** \name Tangent Space Calculation
+ * \{ */
+
+/* Necessary complexity to handle looptri's as quads for correct tangents */
+#define USE_LOOPTRI_DETECT_QUADS
+
+typedef struct {
+ const float (*precomputedFaceNormals)[3];
+ const float (*precomputedLoopNormals)[3];
+ const BMLoop *(*looptris)[3];
+ int cd_loop_uv_offset; /* texture coordinates */
+ const float (*orco)[3];
+ float (*tangent)[4]; /* destination */
+ int numTessFaces;
+
+#ifdef USE_LOOPTRI_DETECT_QUADS
+ /* map from 'fake' face index to looptri,
+ * quads will point to the first looptri of the quad */
+ const int *face_as_quad_map;
+ int num_face_as_quad_map;
+#endif
+
+} SGLSLEditMeshToTangent;
+
+#ifdef USE_LOOPTRI_DETECT_QUADS
+/* seems weak but only used on quads */
+static const BMLoop *bm_loop_at_face_index(const BMFace *f, int vert_index)
+{
+ const BMLoop *l = BM_FACE_FIRST_LOOP(f);
+ while (vert_index--) {
+ l = l->next;
+ }
+ return l;
+}
+#endif
+
+static int emdm_ts_GetNumFaces(const SMikkTSpaceContext *pContext)
+{
+ SGLSLEditMeshToTangent *pMesh = pContext->m_pUserData;
+
+#ifdef USE_LOOPTRI_DETECT_QUADS
+ return pMesh->num_face_as_quad_map;
+#else
+ return pMesh->numTessFaces;
+#endif
+}
+
+static int emdm_ts_GetNumVertsOfFace(const SMikkTSpaceContext *pContext, const int face_num)
+{
+#ifdef USE_LOOPTRI_DETECT_QUADS
+ SGLSLEditMeshToTangent *pMesh = pContext->m_pUserData;
+ if (pMesh->face_as_quad_map) {
+ const BMLoop **lt = pMesh->looptris[pMesh->face_as_quad_map[face_num]];
+ if (lt[0]->f->len == 4) {
+ return 4;
+ }
+ }
+ return 3;
+#else
+ UNUSED_VARS(pContext, face_num);
+ return 3;
+#endif
+}
+
+static void emdm_ts_GetPosition(
+ const SMikkTSpaceContext *pContext, float r_co[3],
+ const int face_num, const int vert_index)
+{
+ //assert(vert_index >= 0 && vert_index < 4);
+ SGLSLEditMeshToTangent *pMesh = pContext->m_pUserData;
+ const BMLoop **lt;
+ const BMLoop *l;
+
+#ifdef USE_LOOPTRI_DETECT_QUADS
+ if (pMesh->face_as_quad_map) {
+ lt = pMesh->looptris[pMesh->face_as_quad_map[face_num]];
+ if (lt[0]->f->len == 4) {
+ l = bm_loop_at_face_index(lt[0]->f, vert_index);
+ goto finally;
+ }
+ /* fall through to regular triangle */
+ }
+ else {
+ lt = pMesh->looptris[face_num];
+ }
+#else
+ lt = pMesh->looptris[face_num];
+#endif
+ l = lt[vert_index];
+
+ const float *co;
+
+finally:
+ co = l->v->co;
+ copy_v3_v3(r_co, co);
+}
+
+static void emdm_ts_GetTextureCoordinate(
+ const SMikkTSpaceContext *pContext, float r_uv[2],
+ const int face_num, const int vert_index)
+{
+ //assert(vert_index >= 0 && vert_index < 4);
+ SGLSLEditMeshToTangent *pMesh = pContext->m_pUserData;
+ const BMLoop **lt;
+ const BMLoop *l;
+
+#ifdef USE_LOOPTRI_DETECT_QUADS
+ if (pMesh->face_as_quad_map) {
+ lt = pMesh->looptris[pMesh->face_as_quad_map[face_num]];
+ if (lt[0]->f->len == 4) {
+ l = bm_loop_at_face_index(lt[0]->f, vert_index);
+ goto finally;
+ }
+ /* fall through to regular triangle */
+ }
+ else {
+ lt = pMesh->looptris[face_num];
+ }
+#else
+ lt = pMesh->looptris[face_num];
+#endif
+ l = lt[vert_index];
+
+finally:
+ if (pMesh->cd_loop_uv_offset != -1) {
+ const float *uv = BM_ELEM_CD_GET_VOID_P(l, pMesh->cd_loop_uv_offset);
+ copy_v2_v2(r_uv, uv);
+ }
+ else {
+ const float *orco = pMesh->orco[BM_elem_index_get(l->v)];
+ map_to_sphere(&r_uv[0], &r_uv[1], orco[0], orco[1], orco[2]);
+ }
+}
+
+static void emdm_ts_GetNormal(
+ const SMikkTSpaceContext *pContext, float r_no[3],
+ const int face_num, const int vert_index)
+{
+ //assert(vert_index >= 0 && vert_index < 4);
+ SGLSLEditMeshToTangent *pMesh = pContext->m_pUserData;
+ const BMLoop **lt;
+ const BMLoop *l;
+
+#ifdef USE_LOOPTRI_DETECT_QUADS
+ if (pMesh->face_as_quad_map) {
+ lt = pMesh->looptris[pMesh->face_as_quad_map[face_num]];
+ if (lt[0]->f->len == 4) {
+ l = bm_loop_at_face_index(lt[0]->f, vert_index);
+ goto finally;
+ }
+ /* fall through to regular triangle */
+ }
+ else {
+ lt = pMesh->looptris[face_num];
+ }
+#else
+ lt = pMesh->looptris[face_num];
+#endif
+ l = lt[vert_index];
+
+finally:
+ if (pMesh->precomputedLoopNormals) {
+ copy_v3_v3(r_no, pMesh->precomputedLoopNormals[BM_elem_index_get(l)]);
+ }
+ else if (BM_elem_flag_test(l->f, BM_ELEM_SMOOTH) == 0) { /* flat */
+ if (pMesh->precomputedFaceNormals) {
+ copy_v3_v3(r_no, pMesh->precomputedFaceNormals[BM_elem_index_get(l->f)]);
+ }
+ else {
+ copy_v3_v3(r_no, l->f->no);
+ }
+ }
+ else {
+ copy_v3_v3(r_no, l->v->no);
+ }
+}
+
+static void emdm_ts_SetTSpace(
+ const SMikkTSpaceContext *pContext, const float fvTangent[3], const float fSign,
+ const int face_num, const int vert_index)
+{
+ //assert(vert_index >= 0 && vert_index < 4);
+ SGLSLEditMeshToTangent *pMesh = pContext->m_pUserData;
+ const BMLoop **lt;
+ const BMLoop *l;
+
+#ifdef USE_LOOPTRI_DETECT_QUADS
+ if (pMesh->face_as_quad_map) {
+ lt = pMesh->looptris[pMesh->face_as_quad_map[face_num]];
+ if (lt[0]->f->len == 4) {
+ l = bm_loop_at_face_index(lt[0]->f, vert_index);
+ goto finally;
+ }
+ /* fall through to regular triangle */
+ }
+ else {
+ lt = pMesh->looptris[face_num];
+ }
+#else
+ lt = pMesh->looptris[face_num];
+#endif
+ l = lt[vert_index];
+
+ float *pRes;
+
+finally:
+ pRes = pMesh->tangent[BM_elem_index_get(l)];
+ copy_v3_v3(pRes, fvTangent);
+ pRes[3] = fSign;
+}
+
+static void emDM_calc_loop_tangents_thread(TaskPool * __restrict UNUSED(pool), void *taskdata, int UNUSED(threadid))
+{
+ struct SGLSLEditMeshToTangent *mesh2tangent = taskdata;
+ /* new computation method */
+ {
+ SMikkTSpaceContext sContext = {NULL};
+ SMikkTSpaceInterface sInterface = {NULL};
+ sContext.m_pUserData = mesh2tangent;
+ sContext.m_pInterface = &sInterface;
+ sInterface.m_getNumFaces = emdm_ts_GetNumFaces;
+ sInterface.m_getNumVerticesOfFace = emdm_ts_GetNumVertsOfFace;
+ sInterface.m_getPosition = emdm_ts_GetPosition;
+ sInterface.m_getTexCoord = emdm_ts_GetTextureCoordinate;
+ sInterface.m_getNormal = emdm_ts_GetNormal;
+ sInterface.m_setTSpaceBasic = emdm_ts_SetTSpace;
+ /* 0 if failed */
+ genTangSpaceDefault(&sContext);
+ }
+}
+
+/**
+ * \see #BKE_mesh_calc_loop_tangent, same logic but used arrays instead of #BMesh data.
+ *
+ * \note This function is not so normal, its using `bm->ldata` as input, but output's to `dm->loopData`.
+ * This is done because #CD_TANGENT is cache data used only for drawing.
+ */
+void BKE_editmesh_loop_tangent_calc(
+ BMEditMesh *em, bool calc_active_tangent,
+ const char (*tangent_names)[MAX_NAME], int tangent_names_len,
+ const float (*poly_normals)[3],
+ const float (*loop_normals)[3],
+ const float (*vert_orco)[3],
+ /* result */
+ CustomData *loopdata_out,
+ const uint loopdata_out_len,
+ short *tangent_mask_curr_p)
+{
+ BMesh *bm = em->bm;
+
+ int act_uv_n = -1;
+ int ren_uv_n = -1;
+ bool calc_act = false;
+ bool calc_ren = false;
+ char act_uv_name[MAX_NAME];
+ char ren_uv_name[MAX_NAME];
+ short tangent_mask = 0;
+ short tangent_mask_curr = *tangent_mask_curr_p;
+
+ BKE_mesh_calc_loop_tangent_step_0(
+ &bm->ldata, calc_active_tangent, tangent_names, tangent_names_len,
+ &calc_act, &calc_ren, &act_uv_n, &ren_uv_n, act_uv_name, ren_uv_name, &tangent_mask);
+
+ if ((tangent_mask_curr | tangent_mask) != tangent_mask_curr) {
+ for (int i = 0; i < tangent_names_len; i++) {
+ if (tangent_names[i][0]) {
+ BKE_mesh_add_loop_tangent_named_layer_for_uv(
+ &bm->ldata, loopdata_out, (int)loopdata_out_len, tangent_names[i]);
+ }
+ }
+ if ((tangent_mask & DM_TANGENT_MASK_ORCO) && CustomData_get_named_layer_index(loopdata_out, CD_TANGENT, "") == -1)
+ CustomData_add_layer_named(loopdata_out, CD_TANGENT, CD_CALLOC, NULL, (int)loopdata_out_len, "");
+ if (calc_act && act_uv_name[0])
+ BKE_mesh_add_loop_tangent_named_layer_for_uv(&bm->ldata, loopdata_out, (int)loopdata_out_len, act_uv_name);
+ if (calc_ren && ren_uv_name[0])
+ BKE_mesh_add_loop_tangent_named_layer_for_uv(&bm->ldata, loopdata_out, (int)loopdata_out_len, ren_uv_name);
+ int totface = em->tottri;
+#ifdef USE_LOOPTRI_DETECT_QUADS
+ int num_face_as_quad_map;
+ int *face_as_quad_map = NULL;
+
+ /* map faces to quads */
+ if (em->tottri != bm->totface) {
+ /* over alloc, since we dont know how many ngon or quads we have */
+
+ /* map fake face index to looptri */
+ face_as_quad_map = MEM_mallocN(sizeof(int) * totface, __func__);
+ int i, j;
+ for (i = 0, j = 0; j < totface; i++, j++) {
+ face_as_quad_map[i] = j;
+ /* step over all quads */
+ if (em->looptris[j][0]->f->len == 4) {
+ j++; /* skips the nest looptri */
+ }
+ }
+ num_face_as_quad_map = i;
+ }
+ else {
+ num_face_as_quad_map = totface;
+ }
+#endif
+ /* Calculation */
+ if (em->tottri != 0) {
+ TaskScheduler *scheduler = BLI_task_scheduler_get();
+ TaskPool *task_pool;
+ task_pool = BLI_task_pool_create(scheduler, NULL);
+
+ tangent_mask_curr = 0;
+ /* Calculate tangent layers */
+ SGLSLEditMeshToTangent data_array[MAX_MTFACE];
+ int index = 0;
+ int n = 0;
+ CustomData_update_typemap(loopdata_out);
+ const int tangent_layer_num = CustomData_number_of_layers(loopdata_out, CD_TANGENT);
+ for (n = 0; n < tangent_layer_num; n++) {
+ index = CustomData_get_layer_index_n(loopdata_out, CD_TANGENT, n);
+ BLI_assert(n < MAX_MTFACE);
+ SGLSLEditMeshToTangent *mesh2tangent = &data_array[n];
+ mesh2tangent->numTessFaces = em->tottri;
+#ifdef USE_LOOPTRI_DETECT_QUADS
+ mesh2tangent->face_as_quad_map = face_as_quad_map;
+ mesh2tangent->num_face_as_quad_map = num_face_as_quad_map;
+#endif
+ mesh2tangent->precomputedFaceNormals = poly_normals; /* dm->getPolyDataArray(dm, CD_NORMAL) */
+ /* Note, we assume we do have tessellated loop normals at this point (in case it is object-enabled),
+ * have to check this is valid...
+ */
+ mesh2tangent->precomputedLoopNormals = loop_normals;
+ mesh2tangent->cd_loop_uv_offset = CustomData_get_n_offset(&bm->ldata, CD_MLOOPUV, n);
+
+ /* needed for indexing loop-tangents */
+ int htype_index = BM_LOOP;
+ if (mesh2tangent->cd_loop_uv_offset == -1) {
+ mesh2tangent->orco = vert_orco;
+ if (!mesh2tangent->orco)
+ continue;
+ /* needed for orco lookups */
+ htype_index |= BM_VERT;
+ tangent_mask_curr |= DM_TANGENT_MASK_ORCO;
+ }
+ else {
+ /* Fill the resulting tangent_mask */
+ int uv_ind = CustomData_get_named_layer_index(&bm->ldata, CD_MLOOPUV, loopdata_out->layers[index].name);
+ int uv_start = CustomData_get_layer_index(&bm->ldata, CD_MLOOPUV);
+ BLI_assert(uv_ind != -1 && uv_start != -1);
+ BLI_assert(uv_ind - uv_start < MAX_MTFACE);
+ tangent_mask_curr |= 1 << (uv_ind - uv_start);
+ }
+ if (mesh2tangent->precomputedFaceNormals) {
+ /* needed for face normal lookups */
+ htype_index |= BM_FACE;
+ }
+ BM_mesh_elem_index_ensure(bm, htype_index);
+
+ mesh2tangent->looptris = (const BMLoop *(*)[3])em->looptris;
+ mesh2tangent->tangent = loopdata_out->layers[index].data;
+
+ BLI_task_pool_push(task_pool, emDM_calc_loop_tangents_thread, mesh2tangent, false, TASK_PRIORITY_LOW);
+ }
+
+ BLI_assert(tangent_mask_curr == tangent_mask);
+ BLI_task_pool_work_and_wait(task_pool);
+ BLI_task_pool_free(task_pool);
+ }
+ else {
+ tangent_mask_curr = tangent_mask;
+ }
+#ifdef USE_LOOPTRI_DETECT_QUADS
+ if (face_as_quad_map) {
+ MEM_freeN(face_as_quad_map);
+ }
+#undef USE_LOOPTRI_DETECT_QUADS
+#endif
+ }
+
+ *tangent_mask_curr_p = tangent_mask_curr;
+
+ int act_uv_index = CustomData_get_layer_index_n(&bm->ldata, CD_MLOOPUV, act_uv_n);
+ if (act_uv_index >= 0) {
+ int tan_index = CustomData_get_named_layer_index(loopdata_out, CD_TANGENT, bm->ldata.layers[act_uv_index].name);
+ CustomData_set_layer_active_index(loopdata_out, CD_TANGENT, tan_index);
+ } /* else tangent has been built from orco */
+
+ /* Update render layer index */
+ int ren_uv_index = CustomData_get_layer_index_n(&bm->ldata, CD_MLOOPUV, ren_uv_n);
+ if (ren_uv_index >= 0) {
+ int tan_index = CustomData_get_named_layer_index(loopdata_out, CD_TANGENT, bm->ldata.layers[ren_uv_index].name);
+ CustomData_set_layer_render_index(loopdata_out, CD_TANGENT, tan_index);
+ } /* else tangent has been built from orco */
+}
+
+/** \} */ \ No newline at end of file
diff --git a/source/blender/blenkernel/intern/effect.c b/source/blender/blenkernel/intern/effect.c
index 749c5897abb..84f12c3a239 100644
--- a/source/blender/blenkernel/intern/effect.c
+++ b/source/blender/blenkernel/intern/effect.c
@@ -64,6 +64,8 @@
#include "BKE_cdderivedmesh.h"
#include "BKE_effect.h"
#include "BKE_global.h"
+#include "BKE_group.h"
+#include "BKE_layer.h"
#include "BKE_library.h"
#include "BKE_modifier.h"
#include "BKE_object.h"
@@ -71,6 +73,7 @@
#include "BKE_scene.h"
#include "BKE_smoke.h"
+#include "DEG_depsgraph.h"
#include "RE_render_ext.h"
#include "RE_shader_ext.h"
@@ -145,9 +148,10 @@ void free_partdeflect(PartDeflect *pd)
MEM_freeN(pd);
}
-static EffectorCache *new_effector_cache(Scene *scene, Object *ob, ParticleSystem *psys, PartDeflect *pd)
+static EffectorCache *new_effector_cache(const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, ParticleSystem *psys, PartDeflect *pd)
{
EffectorCache *eff = MEM_callocN(sizeof(EffectorCache), "EffectorCache");
+ eff->eval_ctx = eval_ctx;
eff->scene = scene;
eff->ob = ob;
eff->psys = psys;
@@ -155,7 +159,7 @@ static EffectorCache *new_effector_cache(Scene *scene, Object *ob, ParticleSyste
eff->frame = -1;
return eff;
}
-static void add_object_to_effectors(ListBase **effectors, Scene *scene, EffectorWeights *weights, Object *ob, Object *ob_src, bool for_simulation)
+static void add_object_to_effectors(ListBase **effectors, const struct EvaluationContext *eval_ctx, Scene *scene, EffectorWeights *weights, Object *ob, Object *ob_src, bool for_simulation)
{
EffectorCache *eff = NULL;
@@ -173,14 +177,14 @@ static void add_object_to_effectors(ListBase **effectors, Scene *scene, Effector
if (*effectors == NULL)
*effectors = MEM_callocN(sizeof(ListBase), "effectors list");
- eff = new_effector_cache(scene, ob, NULL, ob->pd);
+ eff = new_effector_cache(eval_ctx, scene, ob, NULL, ob->pd);
/* make sure imat is up to date */
invert_m4_m4(ob->imat, ob->obmat);
BLI_addtail(*effectors, eff);
}
-static void add_particles_to_effectors(ListBase **effectors, Scene *scene, EffectorWeights *weights, Object *ob, ParticleSystem *psys, ParticleSystem *psys_src, bool for_simulation)
+static void add_particles_to_effectors(ListBase **effectors, const struct EvaluationContext *eval_ctx, Scene *scene, EffectorWeights *weights, Object *ob, ParticleSystem *psys, ParticleSystem *psys_src, bool for_simulation)
{
ParticleSettings *part= psys->part;
@@ -194,61 +198,59 @@ static void add_particles_to_effectors(ListBase **effectors, Scene *scene, Effec
if (*effectors == NULL)
*effectors = MEM_callocN(sizeof(ListBase), "effectors list");
- BLI_addtail(*effectors, new_effector_cache(scene, ob, psys, part->pd));
+ BLI_addtail(*effectors, new_effector_cache(eval_ctx, scene, ob, psys, part->pd));
}
if (part->pd2 && part->pd2->forcefield && (!for_simulation || weights->weight[part->pd2->forcefield] != 0.0f)) {
if (*effectors == NULL)
*effectors = MEM_callocN(sizeof(ListBase), "effectors list");
- BLI_addtail(*effectors, new_effector_cache(scene, ob, psys, part->pd2));
+ BLI_addtail(*effectors, new_effector_cache(eval_ctx, scene, ob, psys, part->pd2));
}
}
/* returns ListBase handle with objects taking part in the effecting */
-ListBase *pdInitEffectors(Scene *scene, Object *ob_src, ParticleSystem *psys_src,
- EffectorWeights *weights, bool for_simulation)
+ListBase *pdInitEffectors(
+ const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob_src, ParticleSystem *psys_src,
+ EffectorWeights *weights, bool for_simulation)
{
+ ViewLayer *view_layer;
Base *base;
- unsigned int layer= ob_src->lay;
ListBase *effectors = NULL;
-
+
if (weights->group) {
- GroupObject *go;
-
- for (go= weights->group->gobject.first; go; go= go->next) {
- if ( (go->ob->lay & layer) ) {
- if ( go->ob->pd && go->ob->pd->forcefield )
- add_object_to_effectors(&effectors, scene, weights, go->ob, ob_src, for_simulation);
+ view_layer = weights->group->view_layer;
+ }
+ else if (eval_ctx) {
+ view_layer = eval_ctx->view_layer;
+ }
+ else {
+ /* eval_ctx is NULL during deg build */
+ view_layer = BKE_view_layer_context_active_PLACEHOLDER(scene);
+ }
- if ( go->ob->particlesystem.first ) {
- ParticleSystem *psys= go->ob->particlesystem.first;
+ for (base = FIRSTBASE(view_layer); base; base = base->next) {
+ if ((base->flag & BASE_VISIBLED) == 0) {
+ continue;
+ }
- for ( ; psys; psys=psys->next )
- add_particles_to_effectors(&effectors, scene, weights, go->ob, psys, psys_src, for_simulation);
- }
- }
+ if (base->object->pd && base->object->pd->forcefield) {
+ add_object_to_effectors(&effectors, eval_ctx, scene, weights, base->object, ob_src, for_simulation);
}
- }
- else {
- for (base = scene->base.first; base; base= base->next) {
- if ( (base->lay & layer) ) {
- if ( base->object->pd && base->object->pd->forcefield )
- add_object_to_effectors(&effectors, scene, weights, base->object, ob_src, for_simulation);
- if ( base->object->particlesystem.first ) {
- ParticleSystem *psys= base->object->particlesystem.first;
+ if (base->object->particlesystem.first) {
+ ParticleSystem *psys= base->object->particlesystem.first;
- for ( ; psys; psys=psys->next )
- add_particles_to_effectors(&effectors, scene, weights, base->object, psys, psys_src, for_simulation);
- }
+ for (; psys; psys=psys->next) {
+ add_particles_to_effectors(&effectors, eval_ctx, scene, weights, base->object, psys, psys_src, for_simulation);
}
}
}
-
- if (for_simulation)
- pdPrecalculateEffectors(effectors);
-
+
+ if (for_simulation) {
+ pdPrecalculateEffectors(eval_ctx, effectors);
+ }
+
return effectors;
}
@@ -268,7 +270,7 @@ void pdEndEffectors(ListBase **effectors)
}
}
-static void precalculate_effector(EffectorCache *eff)
+static void precalculate_effector(const struct EvaluationContext *eval_ctx, EffectorCache *eff)
{
unsigned int cfra = (unsigned int)(eff->scene->r.cfra >= 0 ? eff->scene->r.cfra : -eff->scene->r.cfra);
if (!eff->pd->rng)
@@ -280,7 +282,7 @@ static void precalculate_effector(EffectorCache *eff)
Curve *cu= eff->ob->data;
if (cu->flag & CU_PATH) {
if (eff->ob->curve_cache == NULL || eff->ob->curve_cache->path==NULL || eff->ob->curve_cache->path->data==NULL)
- BKE_displist_make_curveTypes(eff->scene, eff->ob, 0);
+ BKE_displist_make_curveTypes(eval_ctx, eff->scene, eff->ob, 0);
if (eff->ob->curve_cache->path && eff->ob->curve_cache->path->data) {
where_on_path(eff->ob, 0.0, eff->guide_loc, eff->guide_dir, NULL, &eff->guide_radius, NULL);
@@ -301,19 +303,19 @@ static void precalculate_effector(EffectorCache *eff)
if (eff->ob) {
float old_vel[3];
- BKE_object_where_is_calc_time(eff->scene, eff->ob, cfra - 1.0f);
+ BKE_object_where_is_calc_time(eval_ctx, eff->scene, eff->ob, cfra - 1.0f);
copy_v3_v3(old_vel, eff->ob->obmat[3]);
- BKE_object_where_is_calc_time(eff->scene, eff->ob, cfra);
+ BKE_object_where_is_calc_time(eval_ctx, eff->scene, eff->ob, cfra);
sub_v3_v3v3(eff->velocity, eff->ob->obmat[3], old_vel);
}
}
-void pdPrecalculateEffectors(ListBase *effectors)
+void pdPrecalculateEffectors(const struct EvaluationContext *eval_ctx, ListBase *effectors)
{
if (effectors) {
EffectorCache *eff = effectors->first;
for (; eff; eff=eff->next)
- precalculate_effector(eff);
+ precalculate_effector(eval_ctx, eff);
}
}
@@ -612,6 +614,7 @@ int get_effector_data(EffectorCache *eff, EffectorData *efd, EffectedPoint *poin
}
else {
ParticleSimulationData sim= {NULL};
+ sim.eval_ctx = eff->eval_ctx;
sim.scene= eff->scene;
sim.ob= eff->ob;
sim.psys= eff->psys;
diff --git a/source/blender/blenkernel/intern/fluidsim.c b/source/blender/blenkernel/intern/fluidsim.c
index 30ead3ffbb6..a4ed7a9d63f 100644
--- a/source/blender/blenkernel/intern/fluidsim.c
+++ b/source/blender/blenkernel/intern/fluidsim.c
@@ -65,7 +65,7 @@
// file handling
//-------------------------------------------------------------------------------
-void initElbeemMesh(struct Scene *scene, struct Object *ob,
+void initElbeemMesh(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob,
int *numVertices, float **vertices,
int *numTriangles, int **triangles,
int useGlobalCoords, int modifierIndex)
@@ -78,7 +78,7 @@ void initElbeemMesh(struct Scene *scene, struct Object *ob,
float *verts;
int *tris;
- dm = mesh_create_derived_index_render(scene, ob, CD_MASK_BAREMESH, modifierIndex);
+ dm = mesh_create_derived_index_render(eval_ctx, scene, ob, CD_MASK_BAREMESH, modifierIndex);
mvert = dm->getVertArray(dm);
mloop = dm->getLoopArray(dm);
diff --git a/source/blender/blenkernel/intern/freestyle.c b/source/blender/blenkernel/intern/freestyle.c
index 686fe3bda93..b656d2cf7c0 100644
--- a/source/blender/blenkernel/intern/freestyle.c
+++ b/source/blender/blenkernel/intern/freestyle.c
@@ -61,17 +61,21 @@ void BKE_freestyle_config_init(FreestyleConfig *config)
BLI_listbase_clear(&config->linesets);
}
-void BKE_freestyle_config_free(FreestyleConfig *config)
+void BKE_freestyle_config_free(FreestyleConfig *config, const bool do_id_user)
{
FreestyleLineSet *lineset;
for (lineset = (FreestyleLineSet *)config->linesets.first; lineset; lineset = lineset->next) {
if (lineset->group) {
- id_us_min(&lineset->group->id);
+ if (do_id_user) {
+ id_us_min(&lineset->group->id);
+ }
lineset->group = NULL;
}
if (lineset->linestyle) {
- id_us_min(&lineset->linestyle->id);
+ if (do_id_user) {
+ id_us_min(&lineset->linestyle->id);
+ }
lineset->linestyle = NULL;
}
}
diff --git a/source/blender/blenkernel/intern/group.c b/source/blender/blenkernel/intern/group.c
index 6dc8cc5aff1..ca6d92efa80 100644
--- a/source/blender/blenkernel/intern/group.c
+++ b/source/blender/blenkernel/intern/group.c
@@ -45,34 +45,51 @@
#include "BLI_blenlib.h"
#include "BLI_utildefines.h"
-
-#include "BKE_depsgraph.h"
+#include "BKE_collection.h"
#include "BKE_global.h"
#include "BKE_group.h"
#include "BKE_icons.h"
+#include "BKE_layer.h"
#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_object.h"
-#include "BKE_scene.h" /* BKE_scene_base_find */
+#include "BKE_scene.h"
-static void free_group_object(GroupObject *go)
-{
- MEM_freeN(go);
-}
+#define DEBUG_PRINT if (G.debug & G_DEBUG_DEPSGRAPH) printf
/** Free (or release) any data used by this group (does not free the group itself). */
void BKE_group_free(Group *group)
{
- /* don't free group itself */
- GroupObject *go;
-
/* No animdata here. */
+ BKE_previewimg_free(&group->preview);
- while ((go = BLI_pophead(&group->gobject))) {
- free_group_object(go);
+ if (group->view_layer != NULL) {
+ BKE_view_layer_free(group->view_layer);
+ group->view_layer = NULL;
}
- BKE_previewimg_free(&group->preview);
+ if (group->collection != NULL) {
+ BKE_collection_master_free(&group->id, false);
+ MEM_freeN(group->collection);
+ group->collection = NULL;
+ }
+}
+
+/**
+ * Run when adding new groups or during doversion.
+ */
+void BKE_group_init(Group *group)
+{
+ group->collection = MEM_callocN(sizeof(SceneCollection), __func__);
+ BLI_strncpy(group->collection->name, "Master Collection", sizeof(group->collection->name));
+ group->view_layer = BKE_view_layer_group_add(group);
+
+ /* Unlink the master collection. */
+ BKE_collection_unlink(group->view_layer, group->view_layer->layer_collections.first);
+
+ /* Create and link a new default collection. */
+ SceneCollection *defaut_collection = BKE_collection_add(&group->id, NULL, COLLECTION_TYPE_GROUP_INTERNAL, NULL);
+ BKE_collection_link(group->view_layer, defaut_collection);
}
Group *BKE_group_add(Main *bmain, const char *name)
@@ -85,7 +102,7 @@ Group *BKE_group_add(Main *bmain, const char *name)
group->layer = (1 << 20) - 1;
group->preview = NULL;
-
+ BKE_group_init(group);
return group;
}
@@ -99,7 +116,8 @@ Group *BKE_group_add(Main *bmain, const char *name)
*/
void BKE_group_copy_data(Main *UNUSED(bmain), Group *group_dst, const Group *group_src, const int flag)
{
- BLI_duplicatelist(&group_dst->gobject, &group_src->gobject);
+ /* We never handle usercount here for own data. */
+ const int flag_subdata = flag | LIB_ID_CREATE_NO_USER_REFCOUNT;
/* Do not copy group's preview (same behavior as for objects). */
if ((flag & LIB_ID_COPY_NO_PREVIEW) == 0 && false) { /* XXX TODO temp hack */
@@ -108,6 +126,19 @@ void BKE_group_copy_data(Main *UNUSED(bmain), Group *group_dst, const Group *gro
else {
group_dst->preview = NULL;
}
+
+ group_dst->collection = MEM_dupallocN(group_src->collection);
+ SceneCollection *master_collection_src = BKE_collection_master(&group_src->id);
+ SceneCollection *master_collection_dst = BKE_collection_master(&group_dst->id);
+
+ /* Recursively creates a new SceneCollection tree. */
+ BKE_collection_copy_data(master_collection_dst, master_collection_src,
+ flag_subdata);
+
+ group_dst->view_layer = MEM_dupallocN(group_src->view_layer);
+ BKE_view_layer_copy_data(group_dst->view_layer, group_src->view_layer,
+ master_collection_dst, master_collection_src,
+ flag_subdata);
}
Group *BKE_group_copy(Main *bmain, const Group *group)
@@ -125,38 +156,27 @@ void BKE_group_make_local(Main *bmain, Group *group, const bool lib_local)
/* external */
static bool group_object_add_internal(Group *group, Object *ob)
{
- GroupObject *go;
-
if (group == NULL || ob == NULL) {
return false;
}
-
- /* check if the object has been added already */
- if (BLI_findptr(&group->gobject, ob, offsetof(GroupObject, ob))) {
+
+ /* For now always add to master collection of the group. */
+ SceneCollection *scene_collection = GROUP_MASTER_COLLECTION(group);
+
+ /* If the object has been added already it returns false. */
+ if (BKE_collection_object_add(&group->id, scene_collection, ob) == false) {
return false;
}
-
- go = MEM_callocN(sizeof(GroupObject), "groupobject");
- BLI_addtail(&group->gobject, go);
-
- go->ob = ob;
- id_us_ensure_real(&go->ob->id);
-
+
+ id_us_ensure_real(&ob->id);
return true;
}
-bool BKE_group_object_add(Group *group, Object *object, Scene *scene, Base *base)
+bool BKE_group_object_add(Group *group, Object *object)
{
if (group_object_add_internal(group, object)) {
if ((object->flag & OB_FROMGROUP) == 0) {
-
- if (scene && base == NULL)
- base = BKE_scene_base_find(scene, object);
-
object->flag |= OB_FROMGROUP;
-
- if (base)
- base->flag |= OB_FROMGROUP;
}
return true;
}
@@ -166,24 +186,17 @@ bool BKE_group_object_add(Group *group, Object *object, Scene *scene, Base *base
}
/* also used for (ob == NULL) */
-static int group_object_unlink_internal(Group *group, Object *ob)
+static bool group_object_unlink_internal(Group *group, Object *ob)
{
- GroupObject *go, *gon;
- int removed = 0;
- if (group == NULL) return 0;
-
- go = group->gobject.first;
- while (go) {
- gon = go->next;
- if (go->ob == ob) {
- BLI_remlink(&group->gobject, go);
- free_group_object(go);
- removed = 1;
- /* should break here since an object being in a group twice cant happen? */
- }
- go = gon;
+ if (group == NULL) {
+ return false;
}
- return removed;
+
+ if (BKE_collections_object_remove(NULL, &group->id, ob, false)) {
+ return true;
+ }
+
+ return false;
}
static bool group_object_cyclic_check_internal(Object *object, Group *group)
@@ -200,12 +213,13 @@ static bool group_object_cyclic_check_internal(Object *object, Group *group)
if (dup_group == group)
return true;
else {
- GroupObject *gob;
- for (gob = dup_group->gobject.first; gob; gob = gob->next) {
- if (group_object_cyclic_check_internal(gob->ob, group)) {
+ FOREACH_GROUP_OBJECT(dup_group, group_object)
+ {
+ if (group_object_cyclic_check_internal(group_object, dup_group)) {
return true;
}
}
+ FOREACH_GROUP_OBJECT_END
}
/* un-flag the object, it's allowed to have the same group multiple times in parallel */
@@ -223,18 +237,12 @@ bool BKE_group_object_cyclic_check(Main *bmain, Object *object, Group *group)
return group_object_cyclic_check_internal(object, group);
}
-bool BKE_group_object_unlink(Group *group, Object *object, Scene *scene, Base *base)
+bool BKE_group_object_unlink(Group *group, Object *object)
{
if (group_object_unlink_internal(group, object)) {
/* object can be NULL */
if (object && BKE_group_object_find(NULL, object) == NULL) {
- if (scene && base == NULL)
- base = BKE_scene_base_find(scene, object);
-
object->flag &= ~OB_FROMGROUP;
-
- if (base)
- base->flag &= ~OB_FROMGROUP;
}
return true;
}
@@ -249,7 +257,7 @@ bool BKE_group_object_exists(Group *group, Object *ob)
return false;
}
else {
- return (BLI_findptr(&group->gobject, ob, offsetof(GroupObject, ob)) != NULL);
+ return (BLI_findptr(&group->view_layer->object_bases, ob, offsetof(Base, object)));
}
}
@@ -270,17 +278,13 @@ Group *BKE_group_object_find(Group *group, Object *ob)
bool BKE_group_is_animated(Group *group, Object *UNUSED(parent))
{
- GroupObject *go;
-
-#if 0 /* XXX OLD ANIMSYS, NLASTRIPS ARE NO LONGER USED */
- if (parent->nlastrips.first)
- return 1;
-#endif
-
- for (go = group->gobject.first; go; go = go->next)
- if (go->ob && go->ob->proxy)
+ FOREACH_GROUP_OBJECT(group, object)
+ {
+ if (object->proxy) {
return true;
-
+ }
+ }
+ FOREACH_GROUP_OBJECT_END
return false;
}
@@ -330,10 +334,8 @@ static void group_replaces_nla(Object *parent, Object *target, char mode)
* you can draw everything, leaves tags in objects to signal it needs further updating */
/* note: does not work for derivedmesh and render... it recreates all again in convertblender.c */
-void BKE_group_handle_recalc_and_update(EvaluationContext *eval_ctx, Scene *scene, Object *UNUSED(parent), Group *group)
+void BKE_group_handle_recalc_and_update(const struct EvaluationContext *eval_ctx, Scene *scene, Object *UNUSED(parent), Group *group)
{
- GroupObject *go;
-
#if 0 /* warning, isn't clearing the recalc flag on the object which causes it to run all the time,
* not just on frame change.
* This isn't working because the animation data is only re-evaluated on frame change so commenting for now
@@ -367,12 +369,45 @@ void BKE_group_handle_recalc_and_update(EvaluationContext *eval_ctx, Scene *scen
#endif
{
/* only do existing tags, as set by regular depsgraph */
- for (go = group->gobject.first; go; go = go->next) {
- if (go->ob) {
- if (go->ob->recalc) {
- BKE_object_handle_update(eval_ctx, scene, go->ob);
- }
+ FOREACH_GROUP_OBJECT(group, object)
+ {
+ if (object->id.recalc & ID_RECALC_ALL) {
+ BKE_object_handle_update(eval_ctx, scene, object);
}
}
+ FOREACH_GROUP_OBJECT_END
+ }
+}
+
+/* ******** Dependency graph evaluation ******** */
+
+static void group_eval_layer_collections(
+ const struct EvaluationContext *eval_ctx,
+ Group *group,
+ ListBase *layer_collections,
+ LayerCollection *parent_layer_collection)
+{
+ BLI_LISTBASE_FOREACH (LayerCollection *, layer_collection, layer_collections) {
+ /* Evaluate layer collection itself. */
+ BKE_layer_eval_layer_collection(eval_ctx,
+ layer_collection,
+ parent_layer_collection);
+ /* Evaluate nested collections. */
+ group_eval_layer_collections(eval_ctx,
+ group,
+ &layer_collection->layer_collections,
+ layer_collection);
}
}
+
+void BKE_group_eval_view_layers(const struct EvaluationContext *eval_ctx,
+ Group *group)
+{
+ DEBUG_PRINT("%s on %s (%p)\n", __func__, group->id.name, group);
+ BKE_layer_eval_layer_collection_pre(eval_ctx, &group->id, group->view_layer);
+ group_eval_layer_collections(eval_ctx,
+ group,
+ &group->view_layer->layer_collections,
+ NULL);
+ BKE_layer_eval_layer_collection_post(eval_ctx, group->view_layer);
+}
diff --git a/source/blender/blenkernel/intern/icons.c b/source/blender/blenkernel/intern/icons.c
index a98a1b13402..a407fd0bae8 100644
--- a/source/blender/blenkernel/intern/icons.c
+++ b/source/blender/blenkernel/intern/icons.c
@@ -42,6 +42,7 @@
#include "DNA_material_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
+#include "DNA_screen_types.h"
#include "DNA_texture_types.h"
#include "DNA_world_types.h"
#include "DNA_brush_types.h"
@@ -252,6 +253,7 @@ PreviewImage **BKE_previewimg_id_get_p(const ID *id)
ID_PRV_CASE(ID_OB, Object);
ID_PRV_CASE(ID_GR, Group);
ID_PRV_CASE(ID_SCE, Scene);
+ ID_PRV_CASE(ID_SCR, bScreen);
#undef ID_PRV_CASE
default:
break;
diff --git a/source/blender/blenkernel/intern/idcode.c b/source/blender/blenkernel/intern/idcode.c
index 70d037d85f3..487635f06ad 100644
--- a/source/blender/blenkernel/intern/idcode.c
+++ b/source/blender/blenkernel/intern/idcode.c
@@ -81,8 +81,9 @@ static IDType idtypes[] = {
{ ID_PA, "ParticleSettings", "particles", BLT_I18NCONTEXT_ID_PARTICLESETTINGS, IDTYPE_FLAGS_ISLINKABLE },
{ ID_PAL, "Palettes", "palettes", BLT_I18NCONTEXT_ID_PALETTE, IDTYPE_FLAGS_ISLINKABLE },
{ ID_PC, "PaintCurve", "paint_curves", BLT_I18NCONTEXT_ID_PAINTCURVE, IDTYPE_FLAGS_ISLINKABLE },
+ { ID_LP, "LightProbe", "light_probes", BLT_I18NCONTEXT_ID_LIGHTPROBE, IDTYPE_FLAGS_ISLINKABLE },
{ ID_SCE, "Scene", "scenes", BLT_I18NCONTEXT_ID_SCENE, IDTYPE_FLAGS_ISLINKABLE },
- { ID_SCR, "Screen", "screens", BLT_I18NCONTEXT_ID_SCREEN, 0 },
+ { ID_SCR, "Screen", "screens", BLT_I18NCONTEXT_ID_SCREEN, IDTYPE_FLAGS_ISLINKABLE },
{ ID_SEQ, "Sequence", "sequences", BLT_I18NCONTEXT_ID_SEQUENCE, 0 }, /* not actually ID data */
{ ID_SPK, "Speaker", "speakers", BLT_I18NCONTEXT_ID_SPEAKER, IDTYPE_FLAGS_ISLINKABLE },
{ ID_SO, "Sound", "sounds", BLT_I18NCONTEXT_ID_SOUND, IDTYPE_FLAGS_ISLINKABLE },
@@ -91,6 +92,7 @@ static IDType idtypes[] = {
{ ID_VF, "VFont", "fonts", BLT_I18NCONTEXT_ID_VFONT, IDTYPE_FLAGS_ISLINKABLE },
{ ID_WO, "World", "worlds", BLT_I18NCONTEXT_ID_WORLD, IDTYPE_FLAGS_ISLINKABLE },
{ ID_WM, "WindowManager", "window_managers", BLT_I18NCONTEXT_ID_WINDOWMANAGER, 0 },
+ { ID_WS, "WorkSpace", "workspaces", BLT_I18NCONTEXT_ID_WORKSPACE, IDTYPE_FLAGS_ISLINKABLE },
/** Keep last, not an ID exactly, only include for completeness */
{ ID_ID, "ID", "ids", BLT_I18NCONTEXT_ID_ID, 0 }, /* plural is fake */
@@ -203,6 +205,7 @@ int BKE_idcode_to_idfilter(const short idcode)
CASE_IDFILTER(PA);
CASE_IDFILTER(PAL);
CASE_IDFILTER(PC);
+ CASE_IDFILTER(LP);
CASE_IDFILTER(SCE);
CASE_IDFILTER(SPK);
CASE_IDFILTER(SO);
@@ -210,6 +213,7 @@ int BKE_idcode_to_idfilter(const short idcode)
CASE_IDFILTER(TXT);
CASE_IDFILTER(VF);
CASE_IDFILTER(WO);
+ CASE_IDFILTER(WS);
default:
return 0;
}
@@ -247,6 +251,7 @@ short BKE_idcode_from_idfilter(const int idfilter)
CASE_IDFILTER(PA);
CASE_IDFILTER(PAL);
CASE_IDFILTER(PC);
+ CASE_IDFILTER(LP);
CASE_IDFILTER(SCE);
CASE_IDFILTER(SPK);
CASE_IDFILTER(SO);
@@ -294,6 +299,7 @@ int BKE_idcode_to_index(const short idcode)
CASE_IDINDEX(PA);
CASE_IDINDEX(PAL);
CASE_IDINDEX(PC);
+ CASE_IDINDEX(LP);
CASE_IDINDEX(SCE);
CASE_IDINDEX(SCR);
CASE_IDINDEX(SPK);
@@ -303,6 +309,7 @@ int BKE_idcode_to_index(const short idcode)
CASE_IDINDEX(VF);
CASE_IDINDEX(WM);
CASE_IDINDEX(WO);
+ CASE_IDINDEX(WS);
}
BLI_assert(0);
diff --git a/source/blender/blenkernel/intern/idprop.c b/source/blender/blenkernel/intern/idprop.c
index 45b41fa01ed..33a665ba06e 100644
--- a/source/blender/blenkernel/intern/idprop.c
+++ b/source/blender/blenkernel/intern/idprop.c
@@ -476,6 +476,7 @@ static IDProperty *IDP_CopyGroup(const IDProperty *prop, const int flag)
BLI_assert(prop->type == IDP_GROUP);
newp = idp_generic_copy(prop, flag);
newp->len = prop->len;
+ newp->subtype = prop->subtype;
for (link = prop->data.group.first; link; link = link->next) {
BLI_addtail(&newp->data.group, IDP_CopyProperty_ex(link, flag));
@@ -602,8 +603,9 @@ void IDP_ReplaceInGroup(IDProperty *group, IDProperty *prop)
/**
* If a property is missing in \a dest, add it.
+ * Do it recursively.
*/
-void IDP_MergeGroup(IDProperty *dest, const IDProperty *src, const bool do_overwrite)
+void IDP_MergeGroup_ex(IDProperty *dest, const IDProperty *src, const bool do_overwrite, const int flag)
{
IDProperty *prop;
@@ -612,14 +614,30 @@ void IDP_MergeGroup(IDProperty *dest, const IDProperty *src, const bool do_overw
if (do_overwrite) {
for (prop = src->data.group.first; prop; prop = prop->next) {
- IDProperty *copy = IDP_CopyProperty(prop);
+ if (prop->type == IDP_GROUP) {
+ IDProperty *prop_exist = IDP_GetPropertyFromGroup(dest, prop->name);
+
+ if (prop_exist != NULL) {
+ IDP_MergeGroup_ex(prop_exist, prop, do_overwrite, flag);
+ continue;
+ }
+ }
+
+ IDProperty *copy = IDP_CopyProperty_ex(prop, flag);
IDP_ReplaceInGroup(dest, copy);
}
}
else {
for (prop = src->data.group.first; prop; prop = prop->next) {
- if (IDP_GetPropertyFromGroup(dest, prop->name) == NULL) {
- IDProperty *copy = IDP_CopyProperty(prop);
+ IDProperty *prop_exist = IDP_GetPropertyFromGroup(dest, prop->name);
+ if (prop_exist != NULL) {
+ if (prop->type == IDP_GROUP) {
+ IDP_MergeGroup_ex(prop_exist, prop, do_overwrite, flag);
+ continue;
+ }
+ }
+ else {
+ IDProperty *copy = IDP_CopyProperty_ex(prop, flag);
dest->len++;
BLI_addtail(&dest->data.group, copy);
}
@@ -628,6 +646,15 @@ void IDP_MergeGroup(IDProperty *dest, const IDProperty *src, const bool do_overw
}
/**
+ * If a property is missing in \a dest, add it.
+ * Do it recursively.
+ */
+void IDP_MergeGroup(IDProperty *dest, const IDProperty *src, const bool do_overwrite)
+{
+ IDP_MergeGroup_ex(dest, src, do_overwrite, 0);
+}
+
+/**
* This function has a sanity check to make sure ID properties with the same name don't
* get added to the group.
*
@@ -1067,4 +1094,15 @@ void IDP_ClearProperty(IDProperty *prop)
prop->len = prop->totallen = 0;
}
+void IDP_Reset(IDProperty *prop, const IDProperty *reference)
+{
+ if (prop == NULL) {
+ return;
+ }
+ IDP_ClearProperty(prop);
+ if (reference != NULL) {
+ IDP_MergeGroup(prop, reference, true);
+ }
+}
+
/** \} */
diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c
index bd2373a59d5..d720dc41abf 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -81,6 +81,7 @@
#include "BKE_scene.h"
#include "BKE_node.h"
#include "BKE_sequencer.h" /* seq_foreground_frame_get() */
+#include "BKE_workspace.h"
#include "BLF_api.h"
@@ -2609,19 +2610,19 @@ void BKE_image_walk_all_users(const Main *mainp, void *customdata,
}
}
+ for (Camera *cam = mainp->camera.first; cam; cam = cam->id.next) {
+ for (CameraBGImage *bgpic = cam->bg_images.first; bgpic; bgpic = bgpic->next) {
+ callback(bgpic->ima, &bgpic->iuser, customdata);
+ }
+ }
+
/* image window, compo node users */
for (wm = mainp->wm.first; wm; wm = wm->id.next) { /* only 1 wm */
for (win = wm->windows.first; win; win = win->next) {
- ScrArea *sa;
- for (sa = win->screen->areabase.first; sa; sa = sa->next) {
- if (sa->spacetype == SPACE_VIEW3D) {
- View3D *v3d = sa->spacedata.first;
- BGpic *bgpic;
- for (bgpic = v3d->bgpicbase.first; bgpic; bgpic = bgpic->next) {
- callback(bgpic->ima, &bgpic->iuser, customdata);
- }
- }
- else if (sa->spacetype == SPACE_IMAGE) {
+ const bScreen *screen = BKE_workspace_active_screen_get(win->workspace_hook);
+
+ for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
+ if (sa->spacetype == SPACE_IMAGE) {
SpaceImage *sima = sa->spacedata.first;
callback(sima->image, &sima->iuser, customdata);
}
diff --git a/source/blender/blenkernel/intern/lamp.c b/source/blender/blenkernel/intern/lamp.c
index 3a4c920d8fb..931fc09d235 100644
--- a/source/blender/blenkernel/intern/lamp.c
+++ b/source/blender/blenkernel/intern/lamp.c
@@ -69,6 +69,7 @@ void BKE_lamp_init(Lamp *la)
la->bufsize = 512;
la->clipsta = 0.5f;
la->clipend = 40.0f;
+ la->bleedexp = 2.5f;
la->samp = 3;
la->bias = 1.0f;
la->soft = 3.0f;
@@ -101,6 +102,14 @@ void BKE_lamp_init(Lamp *la)
la->sky_colorspace = BLI_XYZ_CIE;
la->sky_exposure = 1.0f;
la->shadow_frustum_size = 10.0f;
+ la->cascade_max_dist = 1000.0f;
+ la->cascade_count = 4;
+ la->cascade_exponent = 0.8f;
+ la->cascade_fade = 0.1f;
+ la->contact_dist = 1.0f;
+ la->contact_bias = 0.03f;
+ la->contact_spread = 0.2f;
+ la->contact_thickness = 0.5f;
curvemapping_initialize(la->curfalloff);
}
@@ -215,41 +224,3 @@ void BKE_lamp_free(Lamp *la)
BKE_icon_id_delete(&la->id);
la->id.icon_id = 0;
}
-
-/* Calculate all drivers for lamps, see material_drivers_update for why this is a bad hack */
-
-static void lamp_node_drivers_update(Scene *scene, bNodeTree *ntree, float ctime)
-{
- bNode *node;
-
- /* nodetree itself */
- if (ntree->adt && ntree->adt->drivers.first)
- BKE_animsys_evaluate_animdata(scene, &ntree->id, ntree->adt, ctime, ADT_RECALC_DRIVERS);
-
- /* nodes */
- for (node = ntree->nodes.first; node; node = node->next)
- if (node->id && node->type == NODE_GROUP)
- lamp_node_drivers_update(scene, (bNodeTree *)node->id, ctime);
-}
-
-void lamp_drivers_update(Scene *scene, Lamp *la, float ctime)
-{
- /* Prevent infinite recursion by checking (and tagging the lamp) as having been visited already
- * (see BKE_scene_update_tagged()). This assumes la->id.tag & LIB_TAG_DOIT isn't set by anything else
- * in the meantime... [#32017] */
- if (la->id.tag & LIB_TAG_DOIT)
- return;
-
- la->id.tag |= LIB_TAG_DOIT;
-
- /* lamp itself */
- if (la->adt && la->adt->drivers.first)
- BKE_animsys_evaluate_animdata(scene, &la->id, la->adt, ctime, ADT_RECALC_DRIVERS);
-
- /* nodes */
- if (la->nodetree)
- lamp_node_drivers_update(scene, la->nodetree, ctime);
-
- la->id.tag &= ~LIB_TAG_DOIT;
-}
-
diff --git a/source/blender/blenkernel/intern/lattice.c b/source/blender/blenkernel/intern/lattice.c
index ea4c3f380ff..d92d0d9edbf 100644
--- a/source/blender/blenkernel/intern/lattice.c
+++ b/source/blender/blenkernel/intern/lattice.c
@@ -53,7 +53,6 @@
#include "BKE_anim.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_curve.h"
-#include "BKE_depsgraph.h"
#include "BKE_displist.h"
#include "BKE_global.h"
#include "BKE_key.h"
@@ -67,11 +66,6 @@
#include "BKE_deform.h"
-/* Workaround for cyclic dependency with curves.
- * In such case curve_cache might not be ready yet,
- */
-#define CYCLIC_DEPENDENCY_WORKAROUND
-
int BKE_lattice_index_from_uvw(Lattice *lt,
const int u, const int v, const int w)
{
@@ -314,6 +308,8 @@ void BKE_lattice_free(Lattice *lt)
{
BKE_animdata_free(&lt->id, false);
+ BKE_lattice_batch_cache_free(lt);
+
MEM_SAFE_FREE(lt->def);
if (lt->dvert) {
BKE_defvert_array_free(lt->dvert, lt->pntsu * lt->pntsv * lt->pntsw);
@@ -602,7 +598,7 @@ static bool where_on_path_deform(Object *ob, float ctime, float vec[4], float di
/* co: local coord, result local too */
/* returns quaternion for rotation, using cd->no_rot_axis */
/* axis is using another define!!! */
-static bool calc_curve_deform(Scene *scene, Object *par, float co[3],
+static bool calc_curve_deform(Object *par, float co[3],
const short axis, CurveDeform *cd, float r_quat[4])
{
Curve *cu = par->data;
@@ -610,12 +606,10 @@ static bool calc_curve_deform(Scene *scene, Object *par, float co[3],
short index;
const bool is_neg_axis = (axis > 2);
- /* to be sure, mostly after file load, also cyclic dependencies */
-#ifdef CYCLIC_DEPENDENCY_WORKAROUND
if (par->curve_cache == NULL) {
- BKE_displist_make_curveTypes(scene, par, false);
+ /* Happens with a cyclic dependencies. */
+ return false;
}
-#endif
if (par->curve_cache->path == NULL) {
return false; /* happens on append, cyclic dependencies and empty curves */
@@ -706,7 +700,7 @@ static bool calc_curve_deform(Scene *scene, Object *par, float co[3],
}
void curve_deform_verts(
- Scene *scene, Object *cuOb, Object *target, DerivedMesh *dm, float (*vertexCos)[3],
+ Object *cuOb, Object *target, DerivedMesh *dm, float (*vertexCos)[3],
int numVerts, const char *vgroup, short defaxis)
{
Curve *cu;
@@ -765,7 +759,7 @@ void curve_deform_verts(
if (weight > 0.0f) {
mul_m4_v3(cd.curvespace, vertexCos[a]);
copy_v3_v3(vec, vertexCos[a]);
- calc_curve_deform(scene, cuOb, vec, defaxis, &cd, NULL);
+ calc_curve_deform(cuOb, vec, defaxis, &cd, NULL);
interp_v3_v3v3(vertexCos[a], vertexCos[a], vec, weight);
mul_m4_v3(cd.objectspace, vertexCos[a]);
}
@@ -788,7 +782,7 @@ void curve_deform_verts(
if (weight > 0.0f) {
/* already in 'cd.curvespace', prev for loop */
copy_v3_v3(vec, vertexCos[a]);
- calc_curve_deform(scene, cuOb, vec, defaxis, &cd, NULL);
+ calc_curve_deform(cuOb, vec, defaxis, &cd, NULL);
interp_v3_v3v3(vertexCos[a], vertexCos[a], vec, weight);
mul_m4_v3(cd.objectspace, vertexCos[a]);
}
@@ -799,7 +793,7 @@ void curve_deform_verts(
if (cu->flag & CU_DEFORM_BOUNDS_OFF) {
for (a = 0; a < numVerts; a++) {
mul_m4_v3(cd.curvespace, vertexCos[a]);
- calc_curve_deform(scene, cuOb, vertexCos[a], defaxis, &cd, NULL);
+ calc_curve_deform(cuOb, vertexCos[a], defaxis, &cd, NULL);
mul_m4_v3(cd.objectspace, vertexCos[a]);
}
}
@@ -814,7 +808,7 @@ void curve_deform_verts(
for (a = 0; a < numVerts; a++) {
/* already in 'cd.curvespace', prev for loop */
- calc_curve_deform(scene, cuOb, vertexCos[a], defaxis, &cd, NULL);
+ calc_curve_deform(cuOb, vertexCos[a], defaxis, &cd, NULL);
mul_m4_v3(cd.objectspace, vertexCos[a]);
}
}
@@ -824,7 +818,7 @@ void curve_deform_verts(
/* input vec and orco = local coord in armature space */
/* orco is original not-animated or deformed reference point */
/* result written in vec and mat */
-void curve_deform_vector(Scene *scene, Object *cuOb, Object *target,
+void curve_deform_vector(Object *cuOb, Object *target,
float orco[3], float vec[3], float mat[3][3], int no_rot_axis)
{
CurveDeform cd;
@@ -843,7 +837,7 @@ void curve_deform_vector(Scene *scene, Object *cuOb, Object *target,
mul_m4_v3(cd.curvespace, vec);
- if (calc_curve_deform(scene, cuOb, vec, target->trackflag, &cd, quat)) {
+ if (calc_curve_deform(cuOb, vec, target->trackflag, &cd, quat)) {
float qmat[3][3];
quat_to_mat3(qmat, quat);
@@ -1033,7 +1027,7 @@ void BKE_lattice_vertexcos_apply(struct Object *ob, float (*vertexCos)[3])
}
}
-void BKE_lattice_modifiers_calc(Scene *scene, Object *ob)
+void BKE_lattice_modifiers_calc(const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob)
{
Lattice *lt = ob->data;
VirtualModifierData virtualModifierData;
@@ -1060,7 +1054,7 @@ void BKE_lattice_modifiers_calc(Scene *scene, Object *ob)
if (mti->type != eModifierTypeType_OnlyDeform) continue;
if (!vertexCos) vertexCos = BKE_lattice_vertexcos_get(ob, &numVerts);
- mti->deformVerts(md, ob, NULL, vertexCos, numVerts, 0);
+ mti->deformVerts(md, eval_ctx, ob, NULL, vertexCos, numVerts, 0);
}
/* always displist to make this work like derivedmesh */
@@ -1234,8 +1228,24 @@ void BKE_lattice_translate(Lattice *lt, float offset[3], bool do_keys)
/* **** Depsgraph evaluation **** */
-void BKE_lattice_eval_geometry(EvaluationContext *UNUSED(eval_ctx),
+void BKE_lattice_eval_geometry(const struct EvaluationContext *UNUSED(eval_ctx),
Lattice *UNUSED(latt))
{
}
+/* Draw Engine */
+void (*BKE_lattice_batch_cache_dirty_cb)(Lattice *lt, int mode) = NULL;
+void (*BKE_lattice_batch_cache_free_cb)(Lattice *lt) = NULL;
+
+void BKE_lattice_batch_cache_dirty(Lattice *lt, int mode)
+{
+ if (lt->batch_cache) {
+ BKE_lattice_batch_cache_dirty_cb(lt, mode);
+ }
+}
+void BKE_lattice_batch_cache_free(Lattice *lt)
+{
+ if (lt->batch_cache) {
+ BKE_lattice_batch_cache_free_cb(lt);
+ }
+}
diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
new file mode 100644
index 00000000000..cb7b72bdabd
--- /dev/null
+++ b/source/blender/blenkernel/intern/layer.c
@@ -0,0 +1,2363 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Dalai Felinto
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/blenkernel/intern/layer.c
+ * \ingroup bke
+ */
+
+#include <string.h>
+
+#include "BLI_listbase.h"
+#include "BLI_string.h"
+#include "BLI_string_utf8.h"
+#include "BLI_string_utils.h"
+#include "BLT_translation.h"
+
+#include "BKE_collection.h"
+#include "BKE_freestyle.h"
+#include "BKE_global.h"
+#include "BKE_group.h"
+#include "BKE_idprop.h"
+#include "BKE_layer.h"
+#include "BKE_main.h"
+#include "BKE_node.h"
+#include "BKE_workspace.h"
+
+#include "DEG_depsgraph.h"
+
+#include "DNA_group_types.h"
+#include "DNA_ID.h"
+#include "DNA_layer_types.h"
+#include "DNA_object_types.h"
+#include "DNA_node_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_windowmanager_types.h"
+#include "DNA_workspace_types.h"
+
+#include "DRW_engine.h"
+
+#include "MEM_guardedalloc.h"
+
+#define DEBUG_PRINT if (G.debug & G_DEBUG_DEPSGRAPH) printf
+
+/* prototype */
+struct EngineSettingsCB_Type;
+static void layer_collections_sync_flags(ListBase *layer_collections_dst, const ListBase *layer_collections_src);
+static void layer_collection_free(ViewLayer *view_layer, LayerCollection *lc);
+static void layer_collection_objects_populate(ViewLayer *view_layer, LayerCollection *lc, ListBase *objects);
+static LayerCollection *layer_collection_add(ViewLayer *view_layer, LayerCollection *parent, SceneCollection *sc);
+static LayerCollection *find_layer_collection_by_scene_collection(LayerCollection *lc, const SceneCollection *sc);
+static IDProperty *collection_engine_settings_create(struct EngineSettingsCB_Type *ces_type, const bool populate);
+static IDProperty *collection_engine_get(IDProperty *root, const int type, const char *engine_name);
+static void collection_engine_settings_init(IDProperty *root, const bool populate);
+static void layer_engine_settings_init(IDProperty *root, const bool populate);
+static void object_bases_iterator_next(BLI_Iterator *iter, const int flag);
+
+/* RenderLayer */
+
+/**
+ * Returns the ViewLayer to be used for rendering
+ * Most of the time BKE_view_layer_from_workspace_get should be used instead
+ */
+ViewLayer *BKE_view_layer_from_scene_get(const Scene *scene)
+{
+ ViewLayer *view_layer = BLI_findlink(&scene->view_layers, scene->active_view_layer);
+ BLI_assert(view_layer);
+ return view_layer;
+}
+
+/**
+ * Returns the ViewLayer to be used for drawing, outliner, and other context related areas.
+ */
+ViewLayer *BKE_view_layer_from_workspace_get(const struct Scene *scene, const struct WorkSpace *workspace)
+{
+ if (BKE_workspace_use_scene_settings_get(workspace)) {
+ return BKE_view_layer_from_scene_get(scene);
+ }
+ else {
+ return BKE_workspace_view_layer_get(workspace, scene);
+ }
+}
+
+/**
+ * This is a placeholder to know which areas of the code need to be addressed for the Workspace changes.
+ * Never use this, you should either use BKE_view_layer_from_workspace_get or get ViewLayer explicitly.
+ */
+ViewLayer *BKE_view_layer_context_active_PLACEHOLDER(const Scene *scene)
+{
+ return BKE_view_layer_from_scene_get(scene);
+}
+
+static ViewLayer *view_layer_add(const char *name, SceneCollection *master_scene_collection)
+{
+ if (!name) {
+ name = DATA_("View Layer");
+ }
+
+ IDPropertyTemplate val = {0};
+ ViewLayer *view_layer = MEM_callocN(sizeof(ViewLayer), "View Layer");
+ view_layer->flag = VIEW_LAYER_RENDER | VIEW_LAYER_FREESTYLE;
+
+ view_layer->properties = IDP_New(IDP_GROUP, &val, ROOT_PROP);
+ layer_engine_settings_init(view_layer->properties, false);
+ BLI_strncpy_utf8(view_layer->name, name, sizeof(view_layer->name));
+
+ /* Link the master collection by default. */
+ layer_collection_add(view_layer, NULL, master_scene_collection);
+
+ /* Pure rendering pipeline settings. */
+ view_layer->layflag = 0x7FFF; /* solid ztra halo edge strand */
+ view_layer->passflag = SCE_PASS_COMBINED | SCE_PASS_Z;
+ view_layer->pass_alpha_threshold = 0.5f;
+ BKE_freestyle_config_init(&view_layer->freestyle_config);
+
+ return view_layer;
+}
+
+/**
+ * Add a new view layer
+ * by default, a view layer has the master collection
+ */
+ViewLayer *BKE_view_layer_add(Scene *scene, const char *name)
+{
+ SceneCollection *sc = BKE_collection_master(&scene->id);
+ ViewLayer *view_layer = view_layer_add(name, sc);
+
+ BLI_addtail(&scene->view_layers, view_layer);
+
+ /* unique name */
+ BLI_uniquename(
+ &scene->view_layers, view_layer, DATA_("ViewLayer"), '.',
+ offsetof(ViewLayer, name), sizeof(view_layer->name));
+
+ return view_layer;
+}
+
+/**
+ * Add a ViewLayer for a Group
+ * It should be added only once
+ */
+ViewLayer *BKE_view_layer_group_add(Group *group)
+{
+ BLI_assert(group->view_layer == NULL);
+ SceneCollection *sc = BKE_collection_master(&group->id);
+ ViewLayer *view_layer = view_layer_add(group->id.name + 2, sc);
+ return view_layer;
+}
+
+void BKE_view_layer_free(ViewLayer *view_layer)
+{
+ BKE_view_layer_free_ex(view_layer, true);
+}
+
+/**
+ * Free (or release) any data used by this ViewLayer.
+ */
+void BKE_view_layer_free_ex(ViewLayer *view_layer, const bool do_id_user)
+{
+ view_layer->basact = NULL;
+
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ if (base->collection_properties) {
+ IDP_FreeProperty(base->collection_properties);
+ MEM_freeN(base->collection_properties);
+ }
+ }
+ BLI_freelistN(&view_layer->object_bases);
+
+ for (LayerCollection *lc = view_layer->layer_collections.first; lc; lc = lc->next) {
+ layer_collection_free(NULL, lc);
+ }
+ BLI_freelistN(&view_layer->layer_collections);
+
+ if (view_layer->properties) {
+ IDP_FreeProperty(view_layer->properties);
+ MEM_freeN(view_layer->properties);
+ }
+
+ if (view_layer->properties_evaluated) {
+ IDP_FreeProperty(view_layer->properties_evaluated);
+ MEM_freeN(view_layer->properties_evaluated);
+ }
+
+ for (ViewLayerEngineData *sled = view_layer->drawdata.first; sled; sled = sled->next) {
+ if (sled->storage) {
+ if (sled->free) {
+ sled->free(sled->storage);
+ }
+ MEM_freeN(sled->storage);
+ }
+ }
+ BLI_freelistN(&view_layer->drawdata);
+
+ MEM_SAFE_FREE(view_layer->stats);
+
+ BKE_freestyle_config_free(&view_layer->freestyle_config, do_id_user);
+
+ if (view_layer->id_properties) {
+ IDP_FreeProperty(view_layer->id_properties);
+ MEM_freeN(view_layer->id_properties);
+ }
+
+ MEM_freeN(view_layer);
+}
+
+/**
+ * Tag all the selected objects of a renderlayer
+ */
+void BKE_view_layer_selected_objects_tag(ViewLayer *view_layer, const int tag)
+{
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ if ((base->flag & BASE_SELECTED) != 0) {
+ base->object->flag |= tag;
+ }
+ else {
+ base->object->flag &= ~tag;
+ }
+ }
+}
+
+/**
+ * Return the first ViewLayer for a given id
+ */
+ViewLayer *BKE_view_layer_first_from_id(const ID *owner_id)
+{
+ switch (GS(owner_id->name)) {
+ case ID_SCE:
+ return ((Scene *)owner_id)->view_layers.first;
+ case ID_GR:
+ return ((Group *)owner_id)->view_layer;
+ default:
+ BLI_assert(!"ID doesn't support view layers");
+ return NULL;
+ }
+}
+
+static bool find_scene_collection_in_scene_collections(ListBase *lb, const LayerCollection *lc)
+{
+ for (LayerCollection *lcn = lb->first; lcn; lcn = lcn->next) {
+ if (lcn == lc) {
+ return true;
+ }
+ if (find_scene_collection_in_scene_collections(&lcn->layer_collections, lc)) {
+ return true;
+ }
+ }
+ return false;
+}
+
+/**
+ * Fallback for when a Scene has no camera to use
+ *
+ * \param view_layer: in general you want to use the same ViewLayer that is used
+ * for depsgraph. If rendering you pass the scene active layer, when viewing in the viewport
+ * you want to get ViewLayer from context.
+ */
+Object *BKE_view_layer_camera_find(ViewLayer *view_layer)
+{
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ if (base->object->type == OB_CAMERA) {
+ return base->object;
+ }
+ }
+
+ return NULL;
+}
+
+/**
+ * Find the ViewLayer a LayerCollection belongs to
+ */
+ViewLayer *BKE_view_layer_find_from_collection(const ID *owner_id, LayerCollection *lc)
+{
+ switch (GS(owner_id->name)) {
+ case ID_GR:
+ return ((Group *)owner_id)->view_layer;
+ case ID_SCE:
+ {
+ Scene *scene = (Scene *)owner_id;
+ for (ViewLayer *view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
+ if (find_scene_collection_in_scene_collections(&view_layer->layer_collections, lc)) {
+ return view_layer;
+ }
+ }
+ return NULL;
+ }
+ default:
+ BLI_assert(!"ID doesn't support scene layers");
+ return NULL;
+ }
+}
+
+/* Base */
+
+Base *BKE_view_layer_base_find(ViewLayer *view_layer, Object *ob)
+{
+ return BLI_findptr(&view_layer->object_bases, ob, offsetof(Base, object));
+}
+
+void BKE_view_layer_base_deselect_all(ViewLayer *view_layer)
+{
+ Base *base;
+
+ for (base = view_layer->object_bases.first; base; base = base->next) {
+ base->flag &= ~BASE_SELECTED;
+ }
+}
+
+void BKE_view_layer_base_select(struct ViewLayer *view_layer, Base *selbase)
+{
+ view_layer->basact = selbase;
+ if ((selbase->flag & BASE_SELECTABLED) != 0) {
+ selbase->flag |= BASE_SELECTED;
+ }
+}
+
+/****************************************************************************/
+/* Copying functions for datablocks that use ViewLayer/SceneCollection */
+
+/* Find the equivalent SceneCollection in the new tree */
+static SceneCollection *scene_collection_from_new_tree(
+ SceneCollection *sc_reference, SceneCollection *sc_dst, SceneCollection *sc_src)
+{
+ if (sc_src == sc_reference) {
+ return sc_dst;
+ }
+
+ for (SceneCollection *nsc_src = sc_src->scene_collections.first, *nsc_dst = sc_dst->scene_collections.first;
+ nsc_src;
+ nsc_src = nsc_src->next, nsc_dst = nsc_dst->next)
+ {
+ SceneCollection *found = scene_collection_from_new_tree(sc_reference, nsc_dst, nsc_src);
+ if (found != NULL) {
+ return found;
+ }
+ }
+ return NULL;
+}
+
+static void layer_collection_sync_flags(
+ LayerCollection *layer_collection_dst,
+ const LayerCollection *layer_collection_src)
+{
+ layer_collection_dst->flag = layer_collection_src->flag;
+
+ if (layer_collection_dst->properties != NULL) {
+ IDP_FreeProperty(layer_collection_dst->properties);
+ MEM_SAFE_FREE(layer_collection_dst->properties);
+ }
+
+ if (layer_collection_src->properties != NULL) {
+ layer_collection_dst->properties = IDP_CopyProperty(layer_collection_src->properties);
+ }
+
+ layer_collections_sync_flags(&layer_collection_dst->layer_collections,
+ &layer_collection_src->layer_collections);
+}
+
+static void layer_collections_sync_flags(ListBase *layer_collections_dst, const ListBase *layer_collections_src)
+{
+ BLI_assert(BLI_listbase_count(layer_collections_dst) == BLI_listbase_count(layer_collections_src));
+ LayerCollection *layer_collection_dst = (LayerCollection *)layer_collections_dst->first;
+ const LayerCollection *layer_collection_src = (const LayerCollection *)layer_collections_src->first;
+ while (layer_collection_dst != NULL) {
+ layer_collection_sync_flags(layer_collection_dst, layer_collection_src);
+ layer_collection_dst = layer_collection_dst->next;
+ layer_collection_src = layer_collection_src->next;
+ }
+}
+
+static bool layer_collection_sync_if_match(
+ ListBase *lb,
+ const SceneCollection *scene_collection_dst,
+ const SceneCollection *scene_collection_src)
+{
+ for (LayerCollection *layer_collection = lb->first;
+ layer_collection;
+ layer_collection = layer_collection->next)
+ {
+ if (layer_collection->scene_collection == scene_collection_src) {
+ LayerCollection *layer_collection_dst =
+ BLI_findptr(
+ lb,
+ scene_collection_dst,
+ offsetof(LayerCollection, scene_collection));
+
+ if (layer_collection_dst != NULL) {
+ layer_collection_sync_flags(layer_collection_dst, layer_collection);
+ }
+ return true;
+ }
+ else {
+ if (layer_collection_sync_if_match(
+ &layer_collection->layer_collections,
+ scene_collection_dst,
+ scene_collection_src))
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+/**
+ * Sync sibling collections across all view layers
+ *
+ * Make sure every linked instance of \a scene_collection_dst has the same values
+ * (flags, overrides, ...) as the corresponding scene_collection_src.
+ *
+ * \note expect scene_collection_dst to be scene_collection_src->next, and it also
+ * expects both collections to have the same ammount of sub-collections.
+ */
+void BKE_layer_collection_sync_flags(
+ ID *owner_id,
+ SceneCollection *scene_collection_dst,
+ SceneCollection *scene_collection_src)
+{
+ for (ViewLayer *view_layer = BKE_view_layer_first_from_id(owner_id); view_layer; view_layer = view_layer->next) {
+ for (LayerCollection *layer_collection = view_layer->layer_collections.first;
+ layer_collection;
+ layer_collection = layer_collection->next)
+ {
+ layer_collection_sync_if_match(
+ &layer_collection->layer_collections,
+ scene_collection_dst,
+ scene_collection_src);
+ }
+ }
+}
+
+/* recreate the LayerCollection tree */
+static void layer_collections_recreate(
+ ViewLayer *view_layer_dst, ListBase *lb_src, SceneCollection *mc_dst, SceneCollection *mc_src)
+{
+ for (LayerCollection *lc_src = lb_src->first; lc_src; lc_src = lc_src->next) {
+ SceneCollection *sc_dst = scene_collection_from_new_tree(lc_src->scene_collection, mc_dst, mc_src);
+ BLI_assert(sc_dst);
+
+ /* instead of synchronizing both trees we simply re-create it */
+ BKE_collection_link(view_layer_dst, sc_dst);
+ }
+}
+
+/**
+ * Only copy internal data of ViewLayer from source to already allocated/initialized destination.
+ *
+ * \param mc_src Master Collection the source ViewLayer links in.
+ * \param mc_dst Master Collection the destination ViewLayer links in.
+ * \param flag Copying options (see BKE_library.h's LIB_ID_COPY_... flags for more).
+ */
+void BKE_view_layer_copy_data(
+ ViewLayer *view_layer_dst, ViewLayer *view_layer_src, SceneCollection *mc_dst, SceneCollection *mc_src,
+ const int flag)
+{
+ IDPropertyTemplate val = {0};
+
+ if (view_layer_dst->id_properties != NULL) {
+ view_layer_dst->id_properties = IDP_CopyProperty_ex(view_layer_dst->id_properties, flag);
+ }
+ BKE_freestyle_config_copy(&view_layer_dst->freestyle_config, &view_layer_src->freestyle_config, flag);
+
+ view_layer_dst->stats = NULL;
+ view_layer_dst->properties_evaluated = NULL;
+ view_layer_dst->properties = IDP_New(IDP_GROUP, &val, ROOT_PROP);
+ IDP_MergeGroup_ex(view_layer_dst->properties, view_layer_src->properties, true, flag);
+
+ /* we start fresh with no overrides and no visibility flags set
+ * instead of syncing both trees we simply unlink and relink the scene collection */
+ BLI_listbase_clear(&view_layer_dst->layer_collections);
+ BLI_listbase_clear(&view_layer_dst->object_bases);
+ BLI_listbase_clear(&view_layer_dst->drawdata);
+
+ layer_collections_recreate(view_layer_dst, &view_layer_src->layer_collections, mc_dst, mc_src);
+
+ /* Now we handle the syncing for visibility, selectability, ... */
+ layer_collections_sync_flags(&view_layer_dst->layer_collections, &view_layer_src->layer_collections);
+
+ Object *active_ob = OBACT(view_layer_src);
+ for (Base *base_src = view_layer_src->object_bases.first, *base_dst = view_layer_dst->object_bases.first;
+ base_src;
+ base_src = base_src->next, base_dst = base_dst->next)
+ {
+ base_dst->flag = base_src->flag;
+ base_dst->flag_legacy = base_src->flag_legacy;
+
+ if (base_dst->object == active_ob) {
+ view_layer_dst->basact = base_dst;
+ }
+ }
+}
+
+/**
+ * Find and return the ListBase of LayerCollection that has \a lc_child as one of its directly
+ * nested LayerCollection.
+ *
+ * \param lb_parent Initial ListBase of LayerCollection to look into recursively
+ * usually the view layer's collection list
+ */
+static ListBase *find_layer_collection_parent_list_base(ListBase *lb_parent, const LayerCollection *lc_child)
+{
+ for (LayerCollection *lc_nested = lb_parent->first; lc_nested; lc_nested = lc_nested->next) {
+ if (lc_nested == lc_child) {
+ return lb_parent;
+ }
+
+ ListBase *found = find_layer_collection_parent_list_base(&lc_nested->layer_collections, lc_child);
+ if (found != NULL) {
+ return found;
+ }
+ }
+
+ return NULL;
+}
+
+/**
+ * Makes a shallow copy of a LayerCollection
+ *
+ * Add a new collection in the same level as the old one (linking if necessary),
+ * and copy all the collection data across them.
+ */
+struct LayerCollection *BKE_layer_collection_duplicate(struct ID *owner_id, struct LayerCollection *layer_collection)
+{
+ SceneCollection *scene_collection, *scene_collection_new;
+
+ scene_collection = layer_collection->scene_collection;
+ scene_collection_new = BKE_collection_duplicate(owner_id, scene_collection);
+
+ LayerCollection *layer_collection_new = NULL;
+
+ /* If the original layer_collection was directly linked to the view layer
+ we need to link the new scene collection here as well. */
+ for (ViewLayer *view_layer = BKE_view_layer_first_from_id(owner_id); view_layer; view_layer = view_layer->next) {
+ if (BLI_findindex(&view_layer->layer_collections, layer_collection) != -1) {
+ layer_collection_new = BKE_collection_link(view_layer, scene_collection_new);
+ layer_collection_sync_flags(layer_collection_new, layer_collection);
+
+ if (layer_collection_new != layer_collection->next) {
+ BLI_remlink(&view_layer->layer_collections, layer_collection_new);
+ BLI_insertlinkafter(&view_layer->layer_collections, layer_collection, layer_collection_new);
+ }
+ break;
+ }
+ }
+
+ /* Otherwise just try to find the corresponding layer collection to return it back. */
+ if (layer_collection_new == NULL) {
+ for (ViewLayer *view_layer = BKE_view_layer_first_from_id(owner_id); view_layer; view_layer = view_layer->next) {
+ ListBase *layer_collections_parent;
+ layer_collections_parent = find_layer_collection_parent_list_base(
+ &view_layer->layer_collections,
+ layer_collection);
+ if (layer_collections_parent != NULL) {
+ layer_collection_new = BLI_findptr(
+ layer_collections_parent,
+ scene_collection_new,
+ offsetof(LayerCollection, scene_collection));
+ break;
+ }
+ }
+ }
+ return layer_collection_new;
+}
+
+static void view_layer_object_base_unref(ViewLayer *view_layer, Base *base)
+{
+ base->refcount--;
+
+ /* It only exists in the RenderLayer */
+ if (base->refcount == 0) {
+ if (view_layer->basact == base) {
+ view_layer->basact = NULL;
+ }
+
+ if (base->collection_properties) {
+ IDP_FreeProperty(base->collection_properties);
+ MEM_freeN(base->collection_properties);
+ }
+
+ BLI_remlink(&view_layer->object_bases, base);
+ MEM_freeN(base);
+ }
+}
+
+/**
+ * Return the base if existent, or create it if necessary
+ * Always bump the refcount
+ */
+static Base *object_base_add(ViewLayer *view_layer, Object *ob)
+{
+ Base *base;
+ base = BKE_view_layer_base_find(view_layer, ob);
+
+ if (base == NULL) {
+ base = MEM_callocN(sizeof(Base), "Object Base");
+
+ /* Do not bump user count, leave it for SceneCollections. */
+ base->object = ob;
+ BLI_addtail(&view_layer->object_bases, base);
+
+ IDPropertyTemplate val = {0};
+ base->collection_properties = IDP_New(IDP_GROUP, &val, ROOT_PROP);
+ }
+
+ base->refcount++;
+ return base;
+}
+
+/* LayerCollection */
+
+static void layer_collection_objects_unpopulate(ViewLayer *view_layer, LayerCollection *lc)
+{
+ if (view_layer) {
+ for (LinkData *link = lc->object_bases.first; link; link = link->next) {
+ view_layer_object_base_unref(view_layer, link->data);
+ }
+ }
+
+ BLI_freelistN(&lc->object_bases);
+}
+
+/**
+ * When freeing the entire ViewLayer at once we don't bother with unref
+ * otherwise ViewLayer is passed to keep the syncing of the LayerCollection tree
+ */
+static void layer_collection_free(ViewLayer *view_layer, LayerCollection *lc)
+{
+ layer_collection_objects_unpopulate(view_layer, lc);
+ BLI_freelistN(&lc->overrides);
+
+ if (lc->properties) {
+ IDP_FreeProperty(lc->properties);
+ MEM_freeN(lc->properties);
+ }
+
+ if (lc->properties_evaluated) {
+ IDP_FreeProperty(lc->properties_evaluated);
+ MEM_freeN(lc->properties_evaluated);
+ }
+
+ for (LayerCollection *nlc = lc->layer_collections.first; nlc; nlc = nlc->next) {
+ layer_collection_free(view_layer, nlc);
+ }
+
+ BLI_freelistN(&lc->layer_collections);
+}
+
+/**
+ * Free (or release) LayerCollection from ViewLayer
+ * (does not free the LayerCollection itself).
+ */
+void BKE_layer_collection_free(ViewLayer *view_layer, LayerCollection *lc)
+{
+ layer_collection_free(view_layer, lc);
+}
+
+/* LayerCollection */
+
+/**
+ * Recursively get the collection for a given index
+ */
+static LayerCollection *collection_from_index(ListBase *lb, const int number, int *i)
+{
+ for (LayerCollection *lc = lb->first; lc; lc = lc->next) {
+ if (*i == number) {
+ return lc;
+ }
+
+ (*i)++;
+
+ LayerCollection *lc_nested = collection_from_index(&lc->layer_collections, number, i);
+ if (lc_nested) {
+ return lc_nested;
+ }
+ }
+ return NULL;
+}
+
+/**
+ * Get the collection for a given index
+ */
+LayerCollection *BKE_layer_collection_from_index(ViewLayer *view_layer, const int index)
+{
+ int i = 0;
+ return collection_from_index(&view_layer->layer_collections, index, &i);
+}
+
+/**
+ * Get the active collection
+ */
+LayerCollection *BKE_layer_collection_get_active(ViewLayer *view_layer)
+{
+ int i = 0;
+ return collection_from_index(&view_layer->layer_collections, view_layer->active_collection, &i);
+}
+
+
+/**
+ * Return layer collection to add new object(s).
+ * Create one if none exists.
+ */
+LayerCollection *BKE_layer_collection_get_active_ensure(Scene *scene, ViewLayer *view_layer)
+{
+ LayerCollection *lc = BKE_layer_collection_get_active(view_layer);
+
+ if (lc == NULL) {
+ BLI_assert(BLI_listbase_is_empty(&view_layer->layer_collections));
+ /* When there is no collection linked to this ViewLayer, create one. */
+ SceneCollection *sc = BKE_collection_add(&scene->id, NULL, COLLECTION_TYPE_NONE, NULL);
+ lc = BKE_collection_link(view_layer, sc);
+ /* New collection has to be the active one. */
+ BLI_assert(lc == BKE_layer_collection_get_active(view_layer));
+ }
+
+ return lc;
+}
+
+/**
+ * Recursively get the count of collections
+ */
+static int collection_count(ListBase *lb)
+{
+ int i = 0;
+ for (LayerCollection *lc = lb->first; lc; lc = lc->next) {
+ i += collection_count(&lc->layer_collections) + 1;
+ }
+ return i;
+}
+
+/**
+ * Get the total number of collections
+ * (including all the nested collections)
+ */
+int BKE_layer_collection_count(ViewLayer *view_layer)
+{
+ return collection_count(&view_layer->layer_collections);
+}
+
+/**
+ * Recursively get the index for a given collection
+ */
+static int index_from_collection(ListBase *lb, const LayerCollection *lc, int *i)
+{
+ for (LayerCollection *lcol = lb->first; lcol; lcol = lcol->next) {
+ if (lcol == lc) {
+ return *i;
+ }
+
+ (*i)++;
+
+ int i_nested = index_from_collection(&lcol->layer_collections, lc, i);
+ if (i_nested != -1) {
+ return i_nested;
+ }
+ }
+ return -1;
+}
+
+/**
+ * Return -1 if not found
+ */
+int BKE_layer_collection_findindex(ViewLayer *view_layer, const LayerCollection *lc)
+{
+ int i = 0;
+ return index_from_collection(&view_layer->layer_collections, lc, &i);
+}
+
+/**
+ * Lookup the listbase that contains \a lc.
+ */
+static ListBase *layer_collection_listbase_find(ListBase *lb, LayerCollection *lc)
+{
+ for (LayerCollection *lc_iter = lb->first; lc_iter; lc_iter = lc_iter->next) {
+ if (lc_iter == lc) {
+ return lb;
+ }
+
+ ListBase *lb_child_result;
+ if ((lb_child_result = layer_collection_listbase_find(&lc_iter->layer_collections, lc))) {
+ return lb_child_result;
+ }
+ }
+
+ return NULL;
+}
+
+#if 0
+/**
+ * Lookup the listbase that contains \a sc.
+ */
+static ListBase *scene_collection_listbase_find(ListBase *lb, SceneCollection *sc)
+{
+ for (SceneCollection *sc_iter = lb->first; sc_iter; sc_iter = sc_iter->next) {
+ if (sc_iter == sc) {
+ return lb;
+ }
+
+ ListBase *lb_child_result;
+ if ((lb_child_result = scene_collection_listbase_find(&sc_iter->scene_collections, sc))) {
+ return lb_child_result;
+ }
+ }
+
+ return NULL;
+}
+#endif
+
+/* ---------------------------------------------------------------------- */
+/* Outliner drag and drop */
+
+/**
+ * Nest a LayerCollection into another one
+ * Both collections must be from the same ViewLayer, return true if succeded.
+ *
+ * The LayerCollection will effectively be moved into the
+ * new (nested) position. So all the settings, overrides, ... go with it, and
+ * if the collection was directly linked to the ViewLayer it's then unlinked.
+ *
+ * For the other ViewLayers we simply resync the tree, without changing directly
+ * linked collections (even if they link to the same SceneCollection)
+ *
+ * \param lc_src LayerCollection to nest into \a lc_dst
+ * \param lc_dst LayerCollection to have \a lc_src inserted into
+ */
+
+static void layer_collection_swap(
+ ViewLayer *view_layer, ListBase *lb_a, ListBase *lb_b,
+ LayerCollection *lc_a, LayerCollection *lc_b)
+{
+ if (lb_a == NULL) {
+ lb_a = layer_collection_listbase_find(&view_layer->layer_collections, lc_a);
+ }
+
+ if (lb_b == NULL) {
+ lb_b = layer_collection_listbase_find(&view_layer->layer_collections, lc_b);
+ }
+
+ BLI_assert(lb_a);
+ BLI_assert(lb_b);
+
+ BLI_listbases_swaplinks(lb_a, lb_b, lc_a, lc_b);
+}
+
+/**
+ * Move \a lc_src into \a lc_dst. Both have to be stored in \a view_layer.
+ * If \a lc_src is directly linked to the ViewLayer it's unlinked
+ */
+bool BKE_layer_collection_move_into(const ID *owner_id, LayerCollection *lc_dst, LayerCollection *lc_src)
+{
+ ViewLayer *view_layer = BKE_view_layer_find_from_collection(owner_id, lc_src);
+ bool is_directly_linked = false;
+
+ if ((!view_layer) || (view_layer != BKE_view_layer_find_from_collection(owner_id, lc_dst))) {
+ return false;
+ }
+
+ /* We can't nest the collection into itself */
+ if (lc_src->scene_collection == lc_dst->scene_collection) {
+ return false;
+ }
+
+ /* Collection is already where we wanted it to be */
+ if (lc_dst->layer_collections.last == lc_src) {
+ return false;
+ }
+
+ /* Collection is already where we want it to be in the scene tree
+ * but we want to swap it in the layer tree still */
+ if (lc_dst->scene_collection->scene_collections.last == lc_src->scene_collection) {
+ LayerCollection *lc_swap = lc_dst->layer_collections.last;
+ layer_collection_swap(view_layer, &lc_dst->layer_collections, NULL, lc_dst->layer_collections.last, lc_src);
+
+ if (BLI_findindex(&view_layer->layer_collections, lc_swap) != -1) {
+ BKE_collection_unlink(view_layer, lc_swap);
+ }
+ return true;
+ }
+ else {
+ LayerCollection *lc_temp;
+ is_directly_linked = BLI_findindex(&view_layer->layer_collections, lc_src) != -1;
+
+ if (!is_directly_linked) {
+ /* lc_src will be invalid after BKE_collection_move_into!
+ * so we swap it with lc_temp to preserve its settings */
+ lc_temp = BKE_collection_link(view_layer, lc_src->scene_collection);
+ layer_collection_swap(view_layer, &view_layer->layer_collections, NULL, lc_temp, lc_src);
+ }
+
+ if (!BKE_collection_move_into(owner_id, lc_dst->scene_collection, lc_src->scene_collection)) {
+ if (!is_directly_linked) {
+ /* Swap back and remove */
+ layer_collection_swap(view_layer, NULL, NULL, lc_temp, lc_src);
+ BKE_collection_unlink(view_layer, lc_temp);
+ }
+ return false;
+ }
+ }
+
+ LayerCollection *lc_new = BLI_findptr(
+ &lc_dst->layer_collections, lc_src->scene_collection, offsetof(LayerCollection, scene_collection));
+ BLI_assert(lc_new);
+ layer_collection_swap(view_layer, &lc_dst->layer_collections, NULL, lc_new, lc_src);
+
+ /* If it's directly linked, unlink it after the swap */
+ if (BLI_findindex(&view_layer->layer_collections, lc_new) != -1) {
+ BKE_collection_unlink(view_layer, lc_new);
+ }
+
+ return true;
+}
+
+/**
+ * Move \a lc_src above \a lc_dst. Both have to be stored in \a view_layer.
+ * If \a lc_src is directly linked to the ViewLayer it's unlinked
+ */
+bool BKE_layer_collection_move_above(const ID *owner_id, LayerCollection *lc_dst, LayerCollection *lc_src)
+{
+ ViewLayer *view_layer = BKE_view_layer_find_from_collection(owner_id, lc_src);
+ const bool is_directly_linked_src = BLI_findindex(&view_layer->layer_collections, lc_src) != -1;
+ const bool is_directly_linked_dst = BLI_findindex(&view_layer->layer_collections, lc_dst) != -1;
+
+ if ((!view_layer) || (view_layer != BKE_view_layer_find_from_collection(owner_id, lc_dst))) {
+ return false;
+ }
+
+ /* Collection is already where we wanted it to be */
+ if (lc_dst->prev == lc_src) {
+ return false;
+ }
+
+ /* Collection is already where we want it to be in the scene tree
+ * but we want to swap it in the layer tree still */
+ if (lc_dst->prev && lc_dst->prev->scene_collection == lc_src->scene_collection) {
+ LayerCollection *lc_swap = lc_dst->prev;
+ layer_collection_swap(view_layer, NULL, NULL, lc_dst->prev, lc_src);
+
+ if (BLI_findindex(&view_layer->layer_collections, lc_swap) != -1) {
+ BKE_collection_unlink(view_layer, lc_swap);
+ }
+ return true;
+ }
+ /* We don't allow to move above/below a directly linked collection
+ * unless the source collection is also directly linked */
+ else if (is_directly_linked_dst) {
+ /* Both directly linked to the ViewLayer, just need to swap */
+ if (is_directly_linked_src) {
+ BLI_remlink(&view_layer->layer_collections, lc_src);
+ BLI_insertlinkbefore(&view_layer->layer_collections, lc_dst, lc_src);
+ return true;
+ }
+ else {
+ return false;
+ }
+ }
+ else {
+ LayerCollection *lc_temp;
+
+ if (!is_directly_linked_src) {
+ /* lc_src will be invalid after BKE_collection_move_into!
+ * so we swap it with lc_temp to preserve its settings */
+ lc_temp = BKE_collection_link(view_layer, lc_src->scene_collection);
+ layer_collection_swap(view_layer, &view_layer->layer_collections, NULL, lc_temp, lc_src);
+ }
+
+ if (!BKE_collection_move_above(owner_id, lc_dst->scene_collection, lc_src->scene_collection)) {
+ if (!is_directly_linked_src) {
+ /* Swap back and remove */
+ layer_collection_swap(view_layer, NULL, NULL, lc_temp, lc_src);
+ BKE_collection_unlink(view_layer, lc_temp);
+ }
+ return false;
+ }
+ }
+
+ LayerCollection *lc_new = lc_dst->prev;
+ BLI_assert(lc_new);
+ layer_collection_swap(view_layer, NULL, NULL, lc_new, lc_src);
+
+ /* If it's directly linked, unlink it after the swap */
+ if (BLI_findindex(&view_layer->layer_collections, lc_new) != -1) {
+ BKE_collection_unlink(view_layer, lc_new);
+ }
+
+ return true;
+}
+
+/**
+ * Move \a lc_src below \a lc_dst. Both have to be stored in \a view_layer.
+ * If \a lc_src is directly linked to the ViewLayer it's unlinked
+ */
+bool BKE_layer_collection_move_below(const ID *owner_id, LayerCollection *lc_dst, LayerCollection *lc_src)
+{
+ ViewLayer *view_layer = BKE_view_layer_find_from_collection(owner_id, lc_src);
+ const bool is_directly_linked_src = BLI_findindex(&view_layer->layer_collections, lc_src) != -1;
+ const bool is_directly_linked_dst = BLI_findindex(&view_layer->layer_collections, lc_dst) != -1;
+
+ if ((!view_layer) || (view_layer != BKE_view_layer_find_from_collection(owner_id, lc_dst))) {
+ return false;
+ }
+
+ /* Collection is already where we wanted it to be */
+ if (lc_dst->next == lc_src) {
+ return false;
+ }
+
+ /* Collection is already where we want it to be in the scene tree
+ * but we want to swap it in the layer tree still */
+ if (lc_dst->next && lc_dst->next->scene_collection == lc_src->scene_collection) {
+ LayerCollection *lc_swap = lc_dst->next;
+ layer_collection_swap(view_layer, NULL, NULL, lc_dst->next, lc_src);
+
+ if (BLI_findindex(&view_layer->layer_collections, lc_swap) != -1) {
+ BKE_collection_unlink(view_layer, lc_swap);
+ }
+ return true;
+ }
+ /* We don't allow to move above/below a directly linked collection
+ * unless the source collection is also directly linked */
+ else if (is_directly_linked_dst) {
+ /* Both directly linked to the ViewLayer, just need to swap */
+ if (is_directly_linked_src) {
+ BLI_remlink(&view_layer->layer_collections, lc_src);
+ BLI_insertlinkafter(&view_layer->layer_collections, lc_dst, lc_src);
+ return true;
+ }
+ else {
+ return false;
+ }
+ }
+ else {
+ LayerCollection *lc_temp;
+
+ if (!is_directly_linked_src) {
+ /* lc_src will be invalid after BKE_collection_move_into!
+ * so we swap it with lc_temp to preserve its settings */
+ lc_temp = BKE_collection_link(view_layer, lc_src->scene_collection);
+ layer_collection_swap(view_layer, &view_layer->layer_collections, NULL, lc_temp, lc_src);
+ }
+
+ if (!BKE_collection_move_below(owner_id, lc_dst->scene_collection, lc_src->scene_collection)) {
+ if (!is_directly_linked_src) {
+ /* Swap back and remove */
+ layer_collection_swap(view_layer, NULL, NULL, lc_temp, lc_src);
+ BKE_collection_unlink(view_layer, lc_temp);
+ }
+ return false;
+ }
+ }
+
+ LayerCollection *lc_new = lc_dst->next;
+ BLI_assert(lc_new);
+ layer_collection_swap(view_layer, NULL, NULL, lc_new, lc_src);
+
+ /* If it's directly linked, unlink it after the swap */
+ if (BLI_findindex(&view_layer->layer_collections, lc_new) != -1) {
+ BKE_collection_unlink(view_layer, lc_new);
+ }
+
+ return true;
+}
+
+static bool layer_collection_resync(ViewLayer *view_layer, LayerCollection *lc, const SceneCollection *sc)
+{
+ if (lc->scene_collection == sc) {
+ ListBase collections = {NULL};
+ BLI_movelisttolist(&collections, &lc->layer_collections);
+
+ for (SceneCollection *sc_nested = sc->scene_collections.first; sc_nested; sc_nested = sc_nested->next) {
+ LayerCollection *lc_nested = BLI_findptr(&collections, sc_nested, offsetof(LayerCollection, scene_collection));
+ if (lc_nested) {
+ BLI_remlink(&collections, lc_nested);
+ BLI_addtail(&lc->layer_collections, lc_nested);
+ }
+ else {
+ layer_collection_add(view_layer, lc, sc_nested);
+ }
+ }
+
+ for (LayerCollection *lc_nested = collections.first; lc_nested; lc_nested = lc_nested->next) {
+ layer_collection_free(view_layer, lc_nested);
+ }
+ BLI_freelistN(&collections);
+
+ BLI_assert(BLI_listbase_count(&lc->layer_collections) ==
+ BLI_listbase_count(&sc->scene_collections));
+
+ return true;
+ }
+
+ for (LayerCollection *lc_nested = lc->layer_collections.first; lc_nested; lc_nested = lc_nested->next) {
+ if (layer_collection_resync(view_layer, lc_nested, sc)) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+/**
+ * Update the scene layers so that any LayerCollection that points
+ * to \a sc is re-synced again
+ */
+void BKE_layer_collection_resync(const ID *owner_id, const SceneCollection *sc)
+{
+ for (ViewLayer *view_layer = BKE_view_layer_first_from_id(owner_id); view_layer; view_layer = view_layer->next) {
+ for (LayerCollection *lc = view_layer->layer_collections.first; lc; lc = lc->next) {
+ layer_collection_resync(view_layer, lc, sc);
+ }
+ }
+}
+
+/* ---------------------------------------------------------------------- */
+
+/**
+ * Select all the objects of this layer collection
+ *
+ * It also select the objects that are in nested collections.
+ * \note Recursive
+ */
+void BKE_layer_collection_objects_select(struct LayerCollection *layer_collection)
+{
+ if ((layer_collection->flag & COLLECTION_DISABLED) ||
+ ((layer_collection->flag & COLLECTION_SELECTABLE) == 0))
+ {
+ return;
+ }
+
+ for (LinkData *link = layer_collection->object_bases.first; link; link = link->next) {
+ Base *base = link->data;
+ if (base->flag & BASE_SELECTABLED) {
+ base->flag |= BASE_SELECTED;
+ }
+ }
+
+ for (LayerCollection *iter = layer_collection->layer_collections.first; iter; iter = iter->next) {
+ BKE_layer_collection_objects_select(iter);
+ }
+}
+
+/* ---------------------------------------------------------------------- */
+
+/**
+ * Link a collection to a renderlayer
+ * The collection needs to be created separately
+ */
+LayerCollection *BKE_collection_link(ViewLayer *view_layer, SceneCollection *sc)
+{
+ LayerCollection *lc = layer_collection_add(view_layer, NULL, sc);
+ view_layer->active_collection = BKE_layer_collection_findindex(view_layer, lc);
+ return lc;
+}
+
+/**
+ * Unlink a collection base from a renderlayer
+ * The corresponding collection is not removed from the master collection
+ */
+void BKE_collection_unlink(ViewLayer *view_layer, LayerCollection *lc)
+{
+ BKE_layer_collection_free(view_layer, lc);
+ BLI_remlink(&view_layer->layer_collections, lc);
+ MEM_freeN(lc);
+ view_layer->active_collection = 0;
+}
+
+/**
+ * Recursively enable nested collections
+ */
+static void layer_collection_enable(ViewLayer *view_layer, LayerCollection *lc)
+{
+ layer_collection_objects_populate(view_layer, lc, &lc->scene_collection->objects);
+
+ for (LayerCollection *nlc = lc->layer_collections.first; nlc; nlc = nlc->next) {
+ layer_collection_enable(view_layer, nlc);
+ }
+}
+
+/**
+ * Enable collection
+ * Add its objects bases to ViewLayer
+ *
+ * Only around for doversion.
+ */
+void BKE_collection_enable(ViewLayer *view_layer, LayerCollection *lc)
+{
+ if ((lc->flag & COLLECTION_DISABLED) == 0) {
+ return;
+ }
+
+ lc->flag &= ~COLLECTION_DISABLED;
+ layer_collection_enable(view_layer, lc);
+}
+
+static void layer_collection_object_add(ViewLayer *view_layer, LayerCollection *lc, Object *ob)
+{
+ Base *base = object_base_add(view_layer, ob);
+
+ /* Only add an object once. */
+ if (BLI_findptr(&lc->object_bases, base, offsetof(LinkData, data))) {
+ return;
+ }
+
+ bool is_visible = ((lc->flag & COLLECTION_VIEWPORT) != 0) && ((lc->flag & COLLECTION_DISABLED) == 0);
+ bool is_selectable = is_visible && ((lc->flag & COLLECTION_SELECTABLE) != 0);
+
+ if (is_visible) {
+ base->flag |= BASE_VISIBLED;
+ }
+
+ if (is_selectable) {
+ base->flag |= BASE_SELECTABLED;
+ }
+
+ BLI_addtail(&lc->object_bases, BLI_genericNodeN(base));
+}
+
+static void layer_collection_object_remove(ViewLayer *view_layer, LayerCollection *lc, Object *ob)
+{
+ Base *base;
+ base = BKE_view_layer_base_find(view_layer, ob);
+
+ LinkData *link = BLI_findptr(&lc->object_bases, base, offsetof(LinkData, data));
+ BLI_remlink(&lc->object_bases, link);
+ MEM_freeN(link);
+
+ view_layer_object_base_unref(view_layer, base);
+}
+
+static void layer_collection_objects_populate(ViewLayer *view_layer, LayerCollection *lc, ListBase *objects)
+{
+ for (LinkData *link = objects->first; link; link = link->next) {
+ layer_collection_object_add(view_layer, lc, link->data);
+ }
+}
+
+static void layer_collection_populate(ViewLayer *view_layer, LayerCollection *lc, SceneCollection *sc)
+{
+ layer_collection_objects_populate(view_layer, lc, &sc->objects);
+
+ for (SceneCollection *nsc = sc->scene_collections.first; nsc; nsc = nsc->next) {
+ layer_collection_add(view_layer, lc, nsc);
+ }
+}
+
+static LayerCollection *layer_collection_add(ViewLayer *view_layer, LayerCollection *parent, SceneCollection *sc)
+{
+ IDPropertyTemplate val = {0};
+ LayerCollection *lc = MEM_callocN(sizeof(LayerCollection), "Collection Base");
+
+ lc->scene_collection = sc;
+ lc->flag = COLLECTION_SELECTABLE | COLLECTION_VIEWPORT | COLLECTION_RENDER;
+
+ lc->properties = IDP_New(IDP_GROUP, &val, ROOT_PROP);
+ collection_engine_settings_init(lc->properties, false);
+
+ if (parent != NULL) {
+ BLI_addtail(&parent->layer_collections, lc);
+ }
+ else {
+ BLI_addtail(&view_layer->layer_collections, lc);
+ }
+
+ layer_collection_populate(view_layer, lc, sc);
+
+ return lc;
+}
+
+/* ---------------------------------------------------------------------- */
+
+/**
+ * See if render layer has the scene collection linked directly, or indirectly (nested)
+ */
+bool BKE_view_layer_has_collection(ViewLayer *view_layer, const SceneCollection *sc)
+{
+ for (LayerCollection *lc = view_layer->layer_collections.first; lc; lc = lc->next) {
+ if (find_layer_collection_by_scene_collection(lc, sc) != NULL) {
+ return true;
+ }
+ }
+ return false;
+}
+
+/**
+ * See if the object is in any of the scene layers of the scene
+ */
+bool BKE_scene_has_object(Scene *scene, Object *ob)
+{
+ for (ViewLayer *view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
+ Base *base = BKE_view_layer_base_find(view_layer, ob);
+ if (base) {
+ return true;
+ }
+ }
+ return false;
+}
+
+
+/* ---------------------------------------------------------------------- */
+/* Syncing */
+
+static LayerCollection *find_layer_collection_by_scene_collection(LayerCollection *lc, const SceneCollection *sc)
+{
+ if (lc->scene_collection == sc) {
+ return lc;
+ }
+
+ for (LayerCollection *nlc = lc->layer_collections.first; nlc; nlc = nlc->next) {
+ LayerCollection *found = find_layer_collection_by_scene_collection(nlc, sc);
+ if (found) {
+ return found;
+ }
+ }
+ return NULL;
+}
+
+/**
+ * Add a new LayerCollection for all the ViewLayers that have sc_parent
+ */
+void BKE_layer_sync_new_scene_collection(ID *owner_id, const SceneCollection *sc_parent, SceneCollection *sc)
+{
+ for (ViewLayer *view_layer = BKE_view_layer_first_from_id(owner_id); view_layer; view_layer = view_layer->next) {
+ for (LayerCollection *lc = view_layer->layer_collections.first; lc; lc = lc->next) {
+ LayerCollection *lc_parent = find_layer_collection_by_scene_collection(lc, sc_parent);
+ if (lc_parent) {
+ layer_collection_add(view_layer, lc_parent, sc);
+ }
+ }
+ }
+}
+
+/**
+ * Add a corresponding ObjectBase to all the equivalent LayerCollection
+ */
+void BKE_layer_sync_object_link(const ID *owner_id, SceneCollection *sc, Object *ob)
+{
+ for (ViewLayer *view_layer = BKE_view_layer_first_from_id(owner_id); view_layer; view_layer = view_layer->next) {
+ for (LayerCollection *lc = view_layer->layer_collections.first; lc; lc = lc->next) {
+ LayerCollection *found = find_layer_collection_by_scene_collection(lc, sc);
+ if (found) {
+ layer_collection_object_add(view_layer, found, ob);
+ }
+ }
+ }
+}
+
+/**
+ * Remove the equivalent object base to all layers that have this collection
+ */
+void BKE_layer_sync_object_unlink(const ID *owner_id, SceneCollection *sc, Object *ob)
+{
+ for (ViewLayer *view_layer = BKE_view_layer_first_from_id(owner_id); view_layer; view_layer = view_layer->next) {
+ for (LayerCollection *lc = view_layer->layer_collections.first; lc; lc = lc->next) {
+ LayerCollection *found = find_layer_collection_by_scene_collection(lc, sc);
+ if (found) {
+ layer_collection_object_remove(view_layer, found, ob);
+ }
+ }
+ }
+}
+
+/* ---------------------------------------------------------------------- */
+/* Override */
+
+/**
+ * Add a new datablock override
+ */
+void BKE_override_view_layer_datablock_add(ViewLayer *view_layer, int id_type, const char *data_path, const ID *owner_id)
+{
+ UNUSED_VARS(view_layer, id_type, data_path, owner_id);
+ TODO_LAYER_OVERRIDE;
+}
+
+/**
+ * Add a new int override
+ */
+void BKE_override_view_layer_int_add(ViewLayer *view_layer, int id_type, const char *data_path, const int value)
+{
+ UNUSED_VARS(view_layer, id_type, data_path, value);
+ TODO_LAYER_OVERRIDE;
+}
+
+/**
+ * Add a new boolean override
+ */
+void BKE_override_layer_collection_boolean_add(struct LayerCollection *layer_collection, int id_type, const char *data_path, const bool value)
+{
+ UNUSED_VARS(layer_collection, id_type, data_path, value);
+ TODO_LAYER_OVERRIDE;
+}
+
+/* ---------------------------------------------------------------------- */
+/* Engine Settings */
+
+ListBase R_layer_collection_engines_settings_callbacks = {NULL, NULL};
+ListBase R_view_layer_engines_settings_callbacks = {NULL, NULL};
+
+typedef struct EngineSettingsCB_Type {
+ struct EngineSettingsCB_Type *next, *prev;
+
+ char name[MAX_NAME]; /* engine name */
+
+ EngineSettingsCB callback;
+
+} EngineSettingsCB_Type;
+
+static void create_engine_settings_scene(IDProperty *root, EngineSettingsCB_Type *es_type)
+{
+ if (collection_engine_get(root, COLLECTION_MODE_NONE, es_type->name)) {
+ return;
+ }
+
+ IDProperty *props = collection_engine_settings_create(es_type, true);
+ IDP_AddToGroup(root, props);
+}
+
+static void create_layer_collection_engine_settings_scene(Scene *scene, EngineSettingsCB_Type *es_type)
+{
+ create_engine_settings_scene(scene->collection_properties, es_type);
+}
+
+static void create_view_layer_engine_settings_scene(Scene *scene, EngineSettingsCB_Type *es_type)
+{
+ create_engine_settings_scene(scene->layer_properties, es_type);
+}
+
+static void create_layer_collection_engine_settings_collection(LayerCollection *lc, EngineSettingsCB_Type *es_type)
+{
+ if (BKE_layer_collection_engine_collection_get(lc, COLLECTION_MODE_NONE, es_type->name)) {
+ return;
+ }
+
+ IDProperty *props = collection_engine_settings_create(es_type, false);
+ IDP_AddToGroup(lc->properties, props);
+
+ for (LayerCollection *lcn = lc->layer_collections.first; lcn; lcn = lcn->next) {
+ create_layer_collection_engine_settings_collection(lcn, es_type);
+ }
+}
+
+static void create_layer_collection_engines_settings_scene(Scene *scene, EngineSettingsCB_Type *es_type)
+{
+ /* Populate the scene with the new settings. */
+ create_layer_collection_engine_settings_scene(scene, es_type);
+
+ for (ViewLayer *view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
+ for (LayerCollection *lc = view_layer->layer_collections.first; lc; lc = lc->next) {
+ create_layer_collection_engine_settings_collection(lc, es_type);
+ }
+ }
+}
+
+static void create_view_layer_engines_settings_scene(Scene *scene, EngineSettingsCB_Type *es_type)
+{
+ /* Populate the scene with the new settings. */
+ create_view_layer_engine_settings_scene(scene, es_type);
+}
+
+static void create_view_layer_engines_settings_layer(ViewLayer *view_layer, EngineSettingsCB_Type *es_type)
+{
+ if (BKE_view_layer_engine_layer_get(view_layer, COLLECTION_MODE_NONE, es_type->name)) {
+ return;
+ }
+
+ IDProperty *props = collection_engine_settings_create(es_type, false);
+ IDP_AddToGroup(view_layer->properties, props);
+}
+
+static EngineSettingsCB_Type *engine_settings_callback_register(const char *engine_name, EngineSettingsCB func, ListBase *lb)
+{
+ EngineSettingsCB_Type *es_type;
+
+ /* Cleanup in case it existed. */
+ es_type = BLI_findstring(lb, engine_name, offsetof(EngineSettingsCB_Type, name));
+
+ if (es_type) {
+ BLI_remlink(lb, es_type);
+ MEM_freeN(es_type);
+ }
+
+ es_type = MEM_callocN(sizeof(EngineSettingsCB_Type), __func__);
+ BLI_strncpy_utf8(es_type->name, engine_name, sizeof(es_type->name));
+ es_type->callback = func;
+ BLI_addtail(lb, es_type);
+
+ return es_type;
+}
+
+void BKE_layer_collection_engine_settings_callback_register(
+ Main *bmain, const char *engine_name, EngineSettingsCB func)
+{
+ EngineSettingsCB_Type *es_type =
+ engine_settings_callback_register(engine_name, func, &R_layer_collection_engines_settings_callbacks);
+
+ if (bmain) {
+ /* Populate all of the collections of the scene with those settings. */
+ for (Scene *scene = bmain->scene.first; scene; scene = scene->id.next) {
+ create_layer_collection_engines_settings_scene(scene, es_type);
+ }
+ }
+}
+
+void BKE_view_layer_engine_settings_callback_register(
+ Main *bmain, const char *engine_name, EngineSettingsCB func)
+{
+ EngineSettingsCB_Type *es_type =
+ engine_settings_callback_register(engine_name, func, &R_view_layer_engines_settings_callbacks);
+
+ if (bmain) {
+ /* Populate all of the collections of the scene with those settings. */
+ for (Scene *scene = bmain->scene.first; scene; scene = scene->id.next) {
+ create_view_layer_engines_settings_scene(scene, es_type);
+
+ for (ViewLayer *view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
+ create_view_layer_engines_settings_layer(view_layer, es_type);
+ }
+ }
+ }
+}
+
+void BKE_layer_collection_engine_settings_callback_free(void)
+{
+ BLI_freelistN(&R_layer_collection_engines_settings_callbacks);
+}
+
+void BKE_view_layer_engine_settings_callback_free(void)
+{
+ BLI_freelistN(&R_view_layer_engines_settings_callbacks);
+}
+
+/**
+ * Create a root IDProperty for this engine
+ *
+ * \param populate whether we want to pre-fill the collection with the default properties
+ */
+static IDProperty *collection_engine_settings_create(EngineSettingsCB_Type *es_type, const bool populate)
+{
+ IDProperty *props;
+ IDPropertyTemplate val = {0};
+
+ props = IDP_New(IDP_GROUP, &val, es_type->name);
+ props->subtype = IDP_GROUP_SUB_ENGINE_RENDER;
+
+ /* properties */
+ if (populate) {
+ es_type->callback(NULL, props);
+ }
+
+ return props;
+}
+
+static void layer_collection_create_mode_settings_object(IDProperty *root, const bool populate)
+{
+ IDProperty *props;
+ IDPropertyTemplate val = {0};
+
+ props = IDP_New(IDP_GROUP, &val, "ObjectMode");
+ props->subtype = IDP_GROUP_SUB_MODE_OBJECT;
+
+ /* properties */
+ if (populate) {
+ OBJECT_collection_settings_create(props);
+ }
+
+ IDP_AddToGroup(root, props);
+}
+
+static void layer_collection_create_mode_settings_edit(IDProperty *root, const bool populate)
+{
+ IDProperty *props;
+ IDPropertyTemplate val = {0};
+
+ props = IDP_New(IDP_GROUP, &val, "EditMode");
+ props->subtype = IDP_GROUP_SUB_MODE_EDIT;
+
+ /* properties */
+ if (populate) {
+ EDIT_MESH_collection_settings_create(props);
+ }
+
+ IDP_AddToGroup(root, props);
+}
+
+static void layer_collection_create_mode_settings_paint_weight(IDProperty *root, const bool populate)
+{
+ IDProperty *props;
+ IDPropertyTemplate val = {0};
+
+ props = IDP_New(IDP_GROUP, &val, "WeightPaintMode");
+ props->subtype = IDP_GROUP_SUB_MODE_PAINT_WEIGHT;
+
+ /* properties */
+ if (populate) {
+ PAINT_WEIGHT_collection_settings_create(props);
+ }
+
+ IDP_AddToGroup(root, props);
+}
+
+static void layer_collection_create_mode_settings_paint_vertex(IDProperty *root, const bool populate)
+{
+ IDProperty *props;
+ IDPropertyTemplate val = {0};
+
+ props = IDP_New(IDP_GROUP, &val, "VertexPaintMode");
+ props->subtype = IDP_GROUP_SUB_MODE_PAINT_VERTEX;
+
+ /* properties */
+ if (populate) {
+ PAINT_VERTEX_collection_settings_create(props);
+ }
+
+ IDP_AddToGroup(root, props);
+}
+
+static void layer_collection_create_render_settings(IDProperty *root, const bool populate)
+{
+ EngineSettingsCB_Type *es_type;
+ for (es_type = R_layer_collection_engines_settings_callbacks.first; es_type; es_type = es_type->next) {
+ IDProperty *props = collection_engine_settings_create(es_type, populate);
+ IDP_AddToGroup(root, props);
+ }
+}
+
+static void view_layer_create_render_settings(IDProperty *root, const bool populate)
+{
+ EngineSettingsCB_Type *es_type;
+ for (es_type = R_view_layer_engines_settings_callbacks.first; es_type; es_type = es_type->next) {
+ IDProperty *props = collection_engine_settings_create(es_type, populate);
+ IDP_AddToGroup(root, props);
+ }
+}
+
+static void collection_create_mode_settings(IDProperty *root, const bool populate)
+{
+ /* XXX TODO: put all those engines in the R_engines_settings_callbacks
+ * and have IDP_AddToGroup outside the callbacks */
+ layer_collection_create_mode_settings_object(root, populate);
+ layer_collection_create_mode_settings_edit(root, populate);
+ layer_collection_create_mode_settings_paint_weight(root, populate);
+ layer_collection_create_mode_settings_paint_vertex(root, populate);
+}
+
+static void layer_create_mode_settings(IDProperty *root, const bool populate)
+{
+ TODO_LAYER; /* XXX like collection_create_mode_settings */
+ UNUSED_VARS(root, populate);
+}
+
+static int idproperty_group_subtype(const int mode_type)
+{
+ int idgroup_type;
+
+ switch (mode_type) {
+ case COLLECTION_MODE_OBJECT:
+ idgroup_type = IDP_GROUP_SUB_MODE_OBJECT;
+ break;
+ case COLLECTION_MODE_EDIT:
+ idgroup_type = IDP_GROUP_SUB_MODE_EDIT;
+ break;
+ case COLLECTION_MODE_PAINT_WEIGHT:
+ idgroup_type = IDP_GROUP_SUB_MODE_PAINT_WEIGHT;
+ break;
+ case COLLECTION_MODE_PAINT_VERTEX:
+ idgroup_type = IDP_GROUP_SUB_MODE_PAINT_VERTEX;
+ break;
+ default:
+ case COLLECTION_MODE_NONE:
+ return IDP_GROUP_SUB_ENGINE_RENDER;
+ break;
+ }
+
+ return idgroup_type;
+}
+
+/**
+ * Return collection enginne settings for either Object s of LayerCollection s
+ */
+static IDProperty *collection_engine_get(
+ IDProperty *root, const int type, const char *engine_name)
+{
+ const int subtype = idproperty_group_subtype(type);
+
+ if (subtype == IDP_GROUP_SUB_ENGINE_RENDER) {
+ return IDP_GetPropertyFromGroup(root, engine_name);
+ }
+ else {
+ IDProperty *prop;
+ for (prop = root->data.group.first; prop; prop = prop->next) {
+ if (prop->subtype == subtype) {
+ return prop;
+ }
+ }
+ }
+
+ BLI_assert(false);
+ return NULL;
+}
+
+/**
+ * Return collection engine settings from Object for specified engine of mode
+ */
+IDProperty *BKE_layer_collection_engine_evaluated_get(Object *ob, const int type, const char *engine_name)
+{
+ return collection_engine_get(ob->base_collection_properties, type, engine_name);
+}
+/**
+ * Return layer collection engine settings for specified engine
+ */
+IDProperty *BKE_layer_collection_engine_collection_get(LayerCollection *lc, const int type, const char *engine_name)
+{
+ return collection_engine_get(lc->properties, type, engine_name);
+}
+
+/**
+ * Return layer collection engine settings for specified engine in the scene
+ */
+IDProperty *BKE_layer_collection_engine_scene_get(Scene *scene, const int type, const char *engine_name)
+{
+ return collection_engine_get(scene->collection_properties, type, engine_name);
+}
+
+/**
+ * Return scene layer engine settings for specified engine in the scene
+ */
+IDProperty *BKE_view_layer_engine_scene_get(Scene *scene, const int type, const char *engine_name)
+{
+ return collection_engine_get(scene->layer_properties, type, engine_name);
+}
+
+/**
+ * Return scene layer engine settings for specified engine
+ */
+IDProperty *BKE_view_layer_engine_layer_get(ViewLayer *view_layer, const int type, const char *engine_name)
+{
+ return collection_engine_get(view_layer->properties, type, engine_name);
+}
+
+/**
+ * Return scene layer evaluated engine settings for specified engine
+ */
+IDProperty *BKE_view_layer_engine_evaluated_get(ViewLayer *view_layer, const int type, const char *engine_name)
+{
+ return collection_engine_get(view_layer->properties_evaluated, type, engine_name);
+}
+
+/* ---------------------------------------------------------------------- */
+/* Engine Settings Properties */
+
+void BKE_collection_engine_property_add_float(IDProperty *props, const char *name, float value)
+{
+ IDPropertyTemplate val = {0};
+ val.f = value;
+ IDP_AddToGroup(props, IDP_New(IDP_FLOAT, &val, name));
+}
+
+void BKE_collection_engine_property_add_float_array(
+ IDProperty *props, const char *name, const float *values, const int array_length)
+{
+ IDPropertyTemplate val = {0};
+ val.array.len = array_length;
+ val.array.type = IDP_FLOAT;
+
+ IDProperty *idprop = IDP_New(IDP_ARRAY, &val, name);
+ memcpy(IDP_Array(idprop), values, sizeof(float) * idprop->len);
+ IDP_AddToGroup(props, idprop);
+}
+
+void BKE_collection_engine_property_add_int(IDProperty *props, const char *name, int value)
+{
+ IDPropertyTemplate val = {0};
+ val.i = value;
+ IDP_AddToGroup(props, IDP_New(IDP_INT, &val, name));
+}
+
+void BKE_collection_engine_property_add_bool(IDProperty *props, const char *name, bool value)
+{
+ IDPropertyTemplate val = {0};
+ val.i = value;
+ IDP_AddToGroup(props, IDP_New(IDP_INT, &val, name));
+}
+
+int BKE_collection_engine_property_value_get_int(IDProperty *props, const char *name)
+{
+ IDProperty *idprop = IDP_GetPropertyFromGroup(props, name);
+ return idprop ? IDP_Int(idprop) : 0;
+}
+
+float BKE_collection_engine_property_value_get_float(IDProperty *props, const char *name)
+{
+ IDProperty *idprop = IDP_GetPropertyFromGroup(props, name);
+ return idprop ? IDP_Float(idprop) : 0.0f;
+}
+
+const float *BKE_collection_engine_property_value_get_float_array(IDProperty *props, const char *name)
+{
+ IDProperty *idprop = IDP_GetPropertyFromGroup(props, name);
+ return idprop ? IDP_Array(idprop) : NULL;
+}
+
+bool BKE_collection_engine_property_value_get_bool(IDProperty *props, const char *name)
+{
+ IDProperty *idprop = IDP_GetPropertyFromGroup(props, name);
+ return idprop ? IDP_Int(idprop) : 0;
+}
+
+void BKE_collection_engine_property_value_set_int(IDProperty *props, const char *name, int value)
+{
+ IDProperty *idprop = IDP_GetPropertyFromGroup(props, name);
+ IDP_Int(idprop) = value;
+}
+
+void BKE_collection_engine_property_value_set_float(IDProperty *props, const char *name, float value)
+{
+ IDProperty *idprop = IDP_GetPropertyFromGroup(props, name);
+ IDP_Float(idprop) = value;
+}
+
+void BKE_collection_engine_property_value_set_float_array(IDProperty *props, const char *name, const float *values)
+{
+ IDProperty *idprop = IDP_GetPropertyFromGroup(props, name);
+ memcpy(IDP_Array(idprop), values, sizeof(float) * idprop->len);
+}
+
+void BKE_collection_engine_property_value_set_bool(IDProperty *props, const char *name, bool value)
+{
+ IDProperty *idprop = IDP_GetPropertyFromGroup(props, name);
+ IDP_Int(idprop) = value;
+}
+
+/* Engine Settings recalculate */
+
+/* get all the default settings defined in scene and merge them here */
+static void collection_engine_settings_init(IDProperty *root, const bool populate)
+{
+ /* render engines */
+ layer_collection_create_render_settings(root, populate);
+
+ /* mode engines */
+ collection_create_mode_settings(root, populate);
+}
+
+/* get all the default settings defined in scene and merge them here */
+static void layer_engine_settings_init(IDProperty *root, const bool populate)
+{
+ /* render engines */
+ view_layer_create_render_settings(root, populate);
+
+ /* mode engines */
+ layer_create_mode_settings(root, populate);
+}
+
+/**
+ * Initialize the layer collection render setings
+ * It's used mainly for scenes
+ */
+void BKE_layer_collection_engine_settings_create(IDProperty *root)
+{
+ collection_engine_settings_init(root, true);
+}
+
+/**
+ * Initialize the render setings
+ * It's used mainly for scenes
+ */
+void BKE_view_layer_engine_settings_create(IDProperty *root)
+{
+ layer_engine_settings_init(root, true);
+}
+
+/**
+ * Reference of IDProperty group scene collection settings
+ * Used when reading blendfiles, to see if there is any missing settings.
+ */
+static struct {
+ struct {
+ IDProperty *collection_properties;
+ IDProperty *render_settings;
+ } scene;
+ IDProperty *view_layer;
+ IDProperty *layer_collection;
+} root_reference = {
+ .scene = {NULL, NULL},
+ .view_layer = NULL,
+ .layer_collection = NULL,
+};
+
+/**
+ * Free the reference scene collection settings IDProperty group.
+ */
+static void engine_settings_validate_init(void)
+{
+ IDPropertyTemplate val = {0};
+
+ /* LayerCollection engine settings. */
+ if (root_reference.scene.collection_properties == NULL) {
+ root_reference.scene.collection_properties = IDP_New(IDP_GROUP, &val, ROOT_PROP);
+ collection_engine_settings_init(root_reference.scene.collection_properties, true);
+ }
+
+ if (root_reference.layer_collection == NULL) {
+ root_reference.layer_collection = IDP_New(IDP_GROUP, &val, ROOT_PROP);
+ collection_engine_settings_init(root_reference.layer_collection, false);
+ }
+
+ /* Render engine setting. */
+ if (root_reference.scene.render_settings == NULL) {
+ root_reference.scene.render_settings = IDP_New(IDP_GROUP, &val, ROOT_PROP);
+ layer_engine_settings_init(root_reference.scene.render_settings, true);
+ }
+
+ if (root_reference.view_layer == NULL) {
+ root_reference.view_layer = IDP_New(IDP_GROUP, &val, ROOT_PROP);
+ layer_engine_settings_init(root_reference.view_layer, false);
+ }
+}
+
+/**
+ * Free the reference scene collection settings IDProperty group.
+ */
+static void layer_collection_engine_settings_validate_free(void)
+{
+ IDProperty *idprops[] = {
+ root_reference.scene.render_settings,
+ root_reference.scene.collection_properties,
+ root_reference.view_layer,
+ root_reference.layer_collection,
+ NULL,
+ };
+
+ IDProperty **idprop = &idprops[0];
+ while (*idprop) {
+ if (*idprop) {
+ IDP_FreeProperty(*idprop);
+ MEM_freeN(*idprop);
+ *idprop = NULL;
+ idprop++;
+ }
+ }
+}
+
+/**
+ * Make sure Scene has all required collection settings.
+ */
+void BKE_layer_collection_engine_settings_validate_scene(Scene *scene)
+{
+ if (root_reference.scene.collection_properties == NULL) {
+ engine_settings_validate_init();
+ }
+
+ if (scene->collection_properties == NULL) {
+ IDPropertyTemplate val = {0};
+ scene->collection_properties = IDP_New(IDP_GROUP, &val, ROOT_PROP);
+ BKE_layer_collection_engine_settings_create(scene->collection_properties);
+ }
+ else {
+ IDP_MergeGroup(scene->collection_properties, root_reference.scene.collection_properties, false);
+ }
+}
+
+/**
+ * Maker sure LayerCollection has all required collection settings.
+ */
+void BKE_layer_collection_engine_settings_validate_collection(LayerCollection *lc)
+{
+ if (root_reference.layer_collection == NULL) {
+ engine_settings_validate_init();
+ }
+
+ BLI_assert(lc->properties != NULL);
+ IDP_MergeGroup(lc->properties, root_reference.layer_collection, false);
+}
+
+/**
+ * Make sure Scene has all required collection settings.
+ */
+void BKE_view_layer_engine_settings_validate_scene(Scene *scene)
+{
+ if (root_reference.scene.render_settings == NULL) {
+ engine_settings_validate_init();
+ }
+
+ if (scene->layer_properties == NULL) {
+ IDPropertyTemplate val = {0};
+ scene->layer_properties = IDP_New(IDP_GROUP, &val, ROOT_PROP);
+ BKE_view_layer_engine_settings_create(scene->layer_properties);
+ }
+ else {
+ IDP_MergeGroup(scene->layer_properties, root_reference.scene.render_settings, false);
+ }
+}
+
+/**
+ * Make sure Scene has all required collection settings.
+ */
+void BKE_view_layer_engine_settings_validate_layer(ViewLayer *view_layer)
+{
+ if (root_reference.view_layer == NULL) {
+ engine_settings_validate_init();
+ }
+
+ IDP_MergeGroup(view_layer->properties, root_reference.view_layer, false);
+}
+
+/* ---------------------------------------------------------------------- */
+/* Iterators */
+
+static void object_bases_iterator_begin(BLI_Iterator *iter, void *data_in, const int flag)
+{
+ ViewLayer *view_layer = data_in;
+ Base *base = view_layer->object_bases.first;
+
+ /* when there are no objects */
+ if (base == NULL) {
+ iter->valid = false;
+ return;
+ }
+
+ iter->data = base;
+
+ if ((base->flag & flag) == 0) {
+ object_bases_iterator_next(iter, flag);
+ }
+ else {
+ iter->current = base;
+ }
+}
+
+static void object_bases_iterator_next(BLI_Iterator *iter, const int flag)
+{
+ Base *base = ((Base *)iter->data)->next;
+
+ while (base) {
+ if ((base->flag & flag) != 0) {
+ iter->current = base;
+ iter->data = base;
+ return;
+ }
+ base = base->next;
+ }
+
+ iter->valid = false;
+}
+
+static void objects_iterator_begin(BLI_Iterator *iter, void *data_in, const int flag)
+{
+ object_bases_iterator_begin(iter, data_in, flag);
+
+ if (iter->valid) {
+ iter->current = ((Base *)iter->current)->object;
+ }
+}
+
+static void objects_iterator_next(BLI_Iterator *iter, const int flag)
+{
+ object_bases_iterator_next(iter, flag);
+
+ if (iter->valid) {
+ iter->current = ((Base *)iter->current)->object;
+ }
+}
+
+void BKE_selected_objects_iterator_begin(BLI_Iterator *iter, void *data_in)
+{
+ objects_iterator_begin(iter, data_in, BASE_SELECTED);
+}
+
+void BKE_selected_objects_iterator_next(BLI_Iterator *iter)
+{
+ objects_iterator_next(iter, BASE_SELECTED);
+}
+
+void BKE_selected_objects_iterator_end(BLI_Iterator *UNUSED(iter))
+{
+ /* do nothing */
+}
+
+void BKE_visible_objects_iterator_begin(BLI_Iterator *iter, void *data_in)
+{
+ objects_iterator_begin(iter, data_in, BASE_VISIBLED);
+}
+
+void BKE_visible_objects_iterator_next(BLI_Iterator *iter)
+{
+ objects_iterator_next(iter, BASE_VISIBLED);
+}
+
+void BKE_visible_objects_iterator_end(BLI_Iterator *UNUSED(iter))
+{
+ /* do nothing */
+}
+
+void BKE_selected_bases_iterator_begin(BLI_Iterator *iter, void *data_in)
+{
+ object_bases_iterator_begin(iter, data_in, BASE_SELECTED);
+}
+
+void BKE_selected_bases_iterator_next(BLI_Iterator *iter)
+{
+ object_bases_iterator_next(iter, BASE_SELECTED);
+}
+
+void BKE_selected_bases_iterator_end(BLI_Iterator *UNUSED(iter))
+{
+ /* do nothing */
+}
+
+void BKE_visible_bases_iterator_begin(BLI_Iterator *iter, void *data_in)
+{
+ object_bases_iterator_begin(iter, data_in, BASE_VISIBLED);
+}
+
+void BKE_visible_bases_iterator_next(BLI_Iterator *iter)
+{
+ object_bases_iterator_next(iter, BASE_VISIBLED);
+}
+
+void BKE_visible_bases_iterator_end(BLI_Iterator *UNUSED(iter))
+{
+ /* do nothing */
+}
+
+void BKE_renderable_objects_iterator_begin(BLI_Iterator *iter, void *data_in)
+{
+ ObjectsRenderableIteratorData *data = data_in;
+
+ /* Tag objects to prevent going over the same object twice. */
+ for (Scene *scene = data->scene; scene; scene = scene->set) {
+ for (ViewLayer *view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ base->object->id.flag |= LIB_TAG_DOIT;
+ }
+ }
+ }
+
+ ViewLayer *view_layer = data->scene->view_layers.first;
+ data->iter.view_layer = view_layer;
+
+ data->base_temp.next = view_layer->object_bases.first;
+ data->iter.base = &data->base_temp;
+
+ data->iter.set = NULL;
+
+ iter->data = data_in;
+ BKE_renderable_objects_iterator_next(iter);
+}
+
+void BKE_renderable_objects_iterator_next(BLI_Iterator *iter)
+{
+ /* Set it early in case we need to exit and we are running from within a loop. */
+ iter->skip = true;
+
+ ObjectsRenderableIteratorData *data = iter->data;
+ Base *base = data->iter.base->next;
+
+ /* There is still a base in the current scene layer. */
+ if (base != NULL) {
+ Object *ob = base->object;
+
+ /* We need to set the iter.base even if the rest fail otherwise
+ * we keep checking the exactly same base over and over again. */
+ data->iter.base = base;
+
+ if (ob->id.flag & LIB_TAG_DOIT) {
+ ob->id.flag &= ~LIB_TAG_DOIT;
+
+ if ((base->flag & BASE_VISIBLED) != 0) {
+ iter->skip = false;
+ iter->current = ob;
+ }
+ }
+ return;
+ }
+
+ /* Time to go to the next scene layer. */
+ if (data->iter.set == NULL) {
+ while ((data->iter.view_layer = data->iter.view_layer->next)) {
+ ViewLayer *view_layer = data->iter.view_layer;
+ if (view_layer->flag & VIEW_LAYER_RENDER) {
+ data->base_temp.next = view_layer->object_bases.first;
+ data->iter.base = &data->base_temp;
+ return;
+ }
+ }
+
+ /* Setup the "set" for the next iteration. */
+ data->scene_temp.set = data->scene;
+ data->iter.set = &data->scene_temp;
+ return;
+ }
+
+ /* Look for an object in the next set. */
+ while ((data->iter.set = data->iter.set->set)) {
+ ViewLayer *view_layer = BKE_view_layer_from_scene_get(data->iter.set);
+ data->base_temp.next = view_layer->object_bases.first;
+ data->iter.base = &data->base_temp;
+ return;
+ }
+
+ iter->valid = false;
+}
+
+void BKE_renderable_objects_iterator_end(BLI_Iterator *UNUSED(iter))
+{
+ /* Do nothing - iter->data was static allocated, we can't free it. */
+}
+
+/* Evaluation */
+
+/**
+ * Reset props
+ *
+ * If props_ref is pasted, copy props from it
+ */
+static void idproperty_reset(IDProperty **props, IDProperty *props_ref)
+{
+ IDPropertyTemplate val = {0};
+
+ if (*props) {
+ IDP_FreeProperty(*props);
+ MEM_freeN(*props);
+ }
+ *props = IDP_New(IDP_GROUP, &val, ROOT_PROP);
+
+ if (props_ref) {
+ IDP_MergeGroup(*props, props_ref, true);
+ }
+}
+
+void BKE_layer_eval_layer_collection_pre(const struct EvaluationContext *UNUSED(eval_ctx),
+ ID *owner_id, ViewLayer *view_layer)
+{
+ DEBUG_PRINT("%s on %s (%p)\n", __func__, view_layer->name, view_layer);
+ Scene *scene = (GS(owner_id->name) == ID_SCE) ? (Scene *)owner_id : NULL;
+
+ for (Base *base = view_layer->object_bases.first; base != NULL; base = base->next) {
+ base->flag &= ~(BASE_VISIBLED | BASE_SELECTABLED);
+ idproperty_reset(&base->collection_properties, scene ? scene->collection_properties : NULL);
+ }
+
+ /* Sync properties from scene to scene layer. */
+ idproperty_reset(&view_layer->properties_evaluated, scene ? scene->layer_properties : NULL);
+ IDP_MergeGroup(view_layer->properties_evaluated, view_layer->properties, true);
+
+ /* TODO(sergey): Is it always required? */
+ view_layer->flag |= VIEW_LAYER_ENGINE_DIRTY;
+}
+
+static const char *collection_type_lookup[] =
+{
+ "None", /* COLLECTION_TYPE_NONE */
+ "Group Internal", /* COLLECTION_TYPE_GROUP_INTERNAL */
+};
+
+/**
+ * \note We can't use layer_collection->flag because of 3 level nesting (where parent is visible, but not grand-parent)
+ * So layer_collection->flag_evaluated is expected to be up to date with layer_collection->flag.
+ */
+static bool layer_collection_visible_get(const EvaluationContext *eval_ctx, LayerCollection *layer_collection)
+{
+ if (layer_collection->flag_evaluated & COLLECTION_DISABLED) {
+ return false;
+ }
+
+ if (eval_ctx->mode == DAG_EVAL_VIEWPORT) {
+ return (layer_collection->flag_evaluated & COLLECTION_VIEWPORT) != 0;
+ }
+ else {
+ return (layer_collection->flag_evaluated & COLLECTION_RENDER) != 0;
+ }
+}
+
+void BKE_layer_eval_layer_collection(const EvaluationContext *eval_ctx,
+ LayerCollection *layer_collection,
+ LayerCollection *parent_layer_collection)
+{
+ DEBUG_PRINT("%s on %s (%p) [%s], parent %s (%p) [%s]\n",
+ __func__,
+ layer_collection->scene_collection->name,
+ layer_collection->scene_collection,
+ collection_type_lookup[layer_collection->scene_collection->type],
+ (parent_layer_collection != NULL) ? parent_layer_collection->scene_collection->name : "NONE",
+ (parent_layer_collection != NULL) ? parent_layer_collection->scene_collection : NULL,
+ (parent_layer_collection != NULL) ? collection_type_lookup[parent_layer_collection->scene_collection->type] : "");
+ BLI_assert(layer_collection != parent_layer_collection);
+
+ /* visibility */
+ layer_collection->flag_evaluated = layer_collection->flag;
+
+ if (parent_layer_collection != NULL) {
+ if (layer_collection_visible_get(eval_ctx, parent_layer_collection) == false) {
+ layer_collection->flag_evaluated |= COLLECTION_DISABLED;
+ }
+
+ if ((parent_layer_collection->flag_evaluated & COLLECTION_DISABLED) ||
+ (parent_layer_collection->flag_evaluated & COLLECTION_SELECTABLE) == 0)
+ {
+ layer_collection->flag_evaluated &= ~COLLECTION_SELECTABLE;
+ }
+ }
+
+ const bool is_visible = layer_collection_visible_get(eval_ctx, layer_collection);
+ const bool is_selectable = is_visible && ((layer_collection->flag_evaluated & COLLECTION_SELECTABLE) != 0);
+
+ /* overrides */
+ if (is_visible) {
+ if (parent_layer_collection == NULL) {
+ idproperty_reset(&layer_collection->properties_evaluated, layer_collection->properties);
+ }
+ else {
+ idproperty_reset(&layer_collection->properties_evaluated, parent_layer_collection->properties_evaluated);
+ IDP_MergeGroup(layer_collection->properties_evaluated, layer_collection->properties, true);
+ }
+ }
+
+ for (LinkData *link = layer_collection->object_bases.first; link != NULL; link = link->next) {
+ Base *base = link->data;
+
+ if (is_visible) {
+ IDP_MergeGroup(base->collection_properties, layer_collection->properties_evaluated, true);
+ base->flag |= BASE_VISIBLED;
+ }
+
+ if (is_selectable) {
+ base->flag |= BASE_SELECTABLED;
+ }
+ }
+}
+
+void BKE_layer_eval_layer_collection_post(const struct EvaluationContext *UNUSED(eval_ctx),
+ ViewLayer *view_layer)
+{
+ DEBUG_PRINT("%s on %s (%p)\n", __func__, view_layer->name, view_layer);
+ /* if base is not selectabled, clear select */
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ if ((base->flag & BASE_SELECTABLED) == 0) {
+ base->flag &= ~BASE_SELECTED;
+ }
+ }
+}
+
+/**
+ * Free any static allocated memory.
+ */
+void BKE_layer_exit(void)
+{
+ layer_collection_engine_settings_validate_free();
+}
diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c
index 46f8e637cf8..066b3e34b0d 100644
--- a/source/blender/blenkernel/intern/library.c
+++ b/source/blender/blenkernel/intern/library.c
@@ -62,6 +62,7 @@
#include "DNA_mask_types.h"
#include "DNA_node_types.h"
#include "DNA_object_types.h"
+#include "DNA_lightprobe_types.h"
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
#include "DNA_speaker_types.h"
@@ -70,6 +71,7 @@
#include "DNA_vfont_types.h"
#include "DNA_windowmanager_types.h"
#include "DNA_world_types.h"
+#include "DNA_workspace_types.h"
#include "BLI_blenlib.h"
#include "BLI_utildefines.h"
@@ -91,7 +93,6 @@
#include "BKE_cachefile.h"
#include "BKE_context.h"
#include "BKE_curve.h"
-#include "BKE_depsgraph.h"
#include "BKE_font.h"
#include "BKE_global.h"
#include "BKE_group.h"
@@ -103,6 +104,7 @@
#include "BKE_lamp.h"
#include "BKE_lattice.h"
#include "BKE_library.h"
+#include "BKE_library_override.h"
#include "BKE_library_query.h"
#include "BKE_library_remap.h"
#include "BKE_linestyle.h"
@@ -117,6 +119,7 @@
#include "BKE_paint.h"
#include "BKE_particle.h"
#include "BKE_packedFile.h"
+#include "BKE_lightprobe.h"
#include "BKE_sound.h"
#include "BKE_speaker.h"
#include "BKE_scene.h"
@@ -418,6 +421,9 @@ bool id_make_local(Main *bmain, ID *id, const bool test, const bool lib_local)
case ID_SPK:
if (!test) BKE_speaker_make_local(bmain, (Speaker *)id, lib_local);
return true;
+ case ID_LP:
+ if (!test) BKE_lightprobe_make_local(bmain, (LightProbe *)id, lib_local);
+ return true;
case ID_WO:
if (!test) BKE_world_make_local(bmain, (World *)id, lib_local);
return true;
@@ -469,7 +475,11 @@ bool id_make_local(Main *bmain, ID *id, const bool test, const bool lib_local)
case ID_CF:
if (!test) BKE_cachefile_make_local(bmain, (CacheFile *)id, lib_local);
return true;
+ case ID_WS:
case ID_SCR:
+ /* A bit special: can be appended but not linked. Return false
+ * since supporting make-local doesn't make much sense. */
+ return false;
case ID_LI:
case ID_KE:
case ID_WM:
@@ -589,6 +599,9 @@ bool BKE_id_copy_ex(Main *bmain, const ID *id, ID **r_newid, const int flag, con
case ID_SPK:
BKE_speaker_copy_data(bmain, (Speaker *)*r_newid, (Speaker *)id, flag);
break;
+ case ID_LP:
+ BKE_lightprobe_copy_data(bmain, (LightProbe *)*r_newid, (LightProbe *)id, flag);
+ break;
case ID_CA:
BKE_camera_copy_data(bmain, (Camera *)*r_newid, (Camera *)id, flag);
break;
@@ -649,6 +662,7 @@ bool BKE_id_copy_ex(Main *bmain, const ID *id, ID **r_newid, const int flag, con
case ID_LI:
case ID_SCR:
case ID_WM:
+ case ID_WS:
case ID_IP:
BLI_assert(0); /* Should have been rejected at start of function! */
break;
@@ -680,6 +694,75 @@ bool id_copy(Main *bmain, const ID *id, ID **newid, bool test)
return BKE_id_copy_ex(bmain, id, newid, 0, test);
}
+/** Does a mere memory swap over the whole IDs data (including type-specific memory).
+ * \note Most internal ID data itself is not swapped (only IDProperties are). */
+void BKE_id_swap(Main *bmain, ID *id_a, ID *id_b)
+{
+ BLI_assert(GS(id_a->name) == GS(id_b->name));
+
+ const ID id_a_back = *id_a;
+ const ID id_b_back = *id_b;
+
+#define CASE_SWAP(_gs, _type) \
+ case _gs: \
+ SWAP(_type, *(_type *)id_a, *(_type *)id_b); \
+ break
+
+ switch ((ID_Type)GS(id_a->name)) {
+ CASE_SWAP(ID_SCE, Scene);
+ CASE_SWAP(ID_LI, Library);
+ CASE_SWAP(ID_OB, Object);
+ CASE_SWAP(ID_ME, Mesh);
+ CASE_SWAP(ID_CU, Curve);
+ CASE_SWAP(ID_MB, MetaBall);
+ CASE_SWAP(ID_MA, Material);
+ CASE_SWAP(ID_TE, Tex);
+ CASE_SWAP(ID_IM, Image);
+ CASE_SWAP(ID_LT, Lattice);
+ CASE_SWAP(ID_LA, Lamp);
+ CASE_SWAP(ID_LP, LightProbe);
+ CASE_SWAP(ID_CA, Camera);
+ CASE_SWAP(ID_KE, Key);
+ CASE_SWAP(ID_WO, World);
+ CASE_SWAP(ID_SCR, bScreen);
+ CASE_SWAP(ID_VF, VFont);
+ CASE_SWAP(ID_TXT, Text);
+ CASE_SWAP(ID_SPK, Speaker);
+ CASE_SWAP(ID_SO, bSound);
+ CASE_SWAP(ID_GR, Group);
+ CASE_SWAP(ID_AR, bArmature);
+ CASE_SWAP(ID_AC, bAction);
+ CASE_SWAP(ID_NT, bNodeTree);
+ CASE_SWAP(ID_BR, Brush);
+ CASE_SWAP(ID_PA, ParticleSettings);
+ CASE_SWAP(ID_WM, wmWindowManager);
+ CASE_SWAP(ID_WS, WorkSpace);
+ CASE_SWAP(ID_GD, bGPdata);
+ CASE_SWAP(ID_MC, MovieClip);
+ CASE_SWAP(ID_MSK, Mask);
+ CASE_SWAP(ID_LS, FreestyleLineStyle);
+ CASE_SWAP(ID_PAL, Palette);
+ CASE_SWAP(ID_PC, PaintCurve);
+ CASE_SWAP(ID_CF, CacheFile);
+ case ID_IP:
+ break; /* Deprecated. */
+ }
+
+#undef CASE_SWAP
+
+ /* Restore original ID's internal data. */
+ *id_a = id_a_back;
+ *id_b = id_b_back;
+
+ /* Exception: IDProperties. */
+ id_a->properties = id_b_back.properties;
+ id_b->properties = id_a_back.properties;
+
+ /* Swap will have broken internal references to itself, restore them. */
+ BKE_libblock_relink_ex(bmain, id_a, id_b, id_a, false);
+ BKE_libblock_relink_ex(bmain, id_b, id_a, id_b, false);
+}
+
/** Does *not* set ID->newid pointer. */
bool id_single_user(bContext *C, ID *id, PointerRNA *ptr, PropertyRNA *prop)
{
@@ -845,6 +928,8 @@ ListBase *which_libbase(Main *mainlib, short type)
return &(mainlib->text);
case ID_SPK:
return &(mainlib->speaker);
+ case ID_LP:
+ return &(mainlib->lightprobe);
case ID_SO:
return &(mainlib->sound);
case ID_GR:
@@ -875,6 +960,8 @@ ListBase *which_libbase(Main *mainlib, short type)
return &(mainlib->paintcurves);
case ID_CF:
return &(mainlib->cachefiles);
+ case ID_WS:
+ return &(mainlib->workspaces);
}
return NULL;
}
@@ -960,11 +1047,11 @@ void BKE_main_lib_objects_recalc_all(Main *bmain)
/* flag for full recalc */
for (ob = bmain->object.first; ob; ob = ob->id.next) {
if (ID_IS_LINKED(ob)) {
- DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
}
}
- DAG_id_type_tag(bmain, ID_OB);
+ DEG_id_type_tag(bmain, ID_OB);
}
/**
@@ -1013,6 +1100,7 @@ int set_listbasepointers(Main *main, ListBase **lb)
lb[INDEX_ID_BR] = &(main->brush);
lb[INDEX_ID_PA] = &(main->particle);
lb[INDEX_ID_SPK] = &(main->speaker);
+ lb[INDEX_ID_LP] = &(main->lightprobe);
lb[INDEX_ID_WO] = &(main->world);
lb[INDEX_ID_MC] = &(main->movieclip);
@@ -1020,6 +1108,7 @@ int set_listbasepointers(Main *main, ListBase **lb)
lb[INDEX_ID_OB] = &(main->object);
lb[INDEX_ID_LS] = &(main->linestyle); /* referenced by scenes */
lb[INDEX_ID_SCE] = &(main->scene);
+ lb[INDEX_ID_WS] = &(main->workspaces); /* before wm, so it's freed after it! */
lb[INDEX_ID_WM] = &(main->wm);
lb[INDEX_ID_MSK] = &(main->mask);
@@ -1072,6 +1161,7 @@ size_t BKE_libblock_get_alloc_info(short type, const char **name)
CASE_RETURN(ID_VF, VFont);
CASE_RETURN(ID_TXT, Text);
CASE_RETURN(ID_SPK, Speaker);
+ CASE_RETURN(ID_LP, LightProbe);
CASE_RETURN(ID_SO, bSound);
CASE_RETURN(ID_GR, Group);
CASE_RETURN(ID_AR, bArmature);
@@ -1087,6 +1177,7 @@ size_t BKE_libblock_get_alloc_info(short type, const char **name)
CASE_RETURN(ID_PAL, Palette);
CASE_RETURN(ID_PC, PaintCurve);
CASE_RETURN(ID_CF, CacheFile);
+ CASE_RETURN(ID_WS, WorkSpace);
}
return 0;
#undef CASE_RETURN
@@ -1143,7 +1234,7 @@ void *BKE_libblock_alloc(Main *bmain, short type, const char *name, const int fl
/* TODO to be removed from here! */
if ((flag & LIB_ID_CREATE_NO_DEG_TAG) == 0) {
- DAG_id_type_tag(bmain, type);
+ DEG_id_type_tag(bmain, type);
}
}
else {
@@ -1202,6 +1293,9 @@ void BKE_libblock_init_empty(ID *id)
case ID_SPK:
BKE_speaker_init((Speaker *)id);
break;
+ case ID_LP:
+ BKE_lightprobe_init((LightProbe *)id);
+ break;
case ID_CA:
BKE_camera_init((Camera *)id);
break;
@@ -1322,11 +1416,20 @@ void BKE_libblock_copy_ex(Main *bmain, const ID *id, ID **r_newid, const int fla
new_id->properties = IDP_CopyProperty_ex(id->properties, flag);
}
+ /* XXX Again... We need a way to control what we copy in a much more refined way.
+ * We cannot always copy this, some internal copying will die on it! */
+ /* For now, upper level code will have to do that itself when required. */
+#if 0
+ if (id->override != NULL) {
+ BKE_override_copy(new_id, id);
+ }
+#endif
+
/* the duplicate should get a copy of the animdata */
id_copy_animdata(bmain, new_id, (flag & LIB_ID_COPY_ACTIONS) != 0 && (flag & LIB_ID_CREATE_NO_MAIN) == 0);
if ((flag & LIB_ID_CREATE_NO_DEG_TAG) == 0 && (flag & LIB_ID_CREATE_NO_MAIN) == 0) {
- DAG_id_type_tag(bmain, GS(new_id->name));
+ DEG_id_type_tag(bmain, GS(new_id->name));
}
*r_newid = new_id;
diff --git a/source/blender/blenkernel/intern/library_override.c b/source/blender/blenkernel/intern/library_override.c
new file mode 100644
index 00000000000..8b8658921b5
--- /dev/null
+++ b/source/blender/blenkernel/intern/library_override.c
@@ -0,0 +1,752 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2016 by Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): Bastien Montagne.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/blenkernel/intern/library_override.c
+ * \ingroup bke
+ */
+
+#include <stdlib.h>
+
+#include "MEM_guardedalloc.h"
+
+#include "DNA_ID.h"
+#include "DNA_object_types.h"
+
+#include "DEG_depsgraph.h"
+#include "BKE_library.h"
+#include "BKE_library_override.h"
+#include "BKE_library_remap.h"
+#include "BKE_main.h"
+
+#include "BLI_utildefines.h"
+#include "BLI_listbase.h"
+#include "BLI_string.h"
+
+#include "RNA_access.h"
+#include "RNA_types.h"
+
+#include "PIL_time.h"
+#include "PIL_time_utildefines.h"
+
+#define OVERRIDE_AUTO_CHECK_DELAY 0.2 /* 200ms between auto-override checks. */
+
+static void bke_override_property_copy(IDOverrideStaticProperty *op_dst, IDOverrideStaticProperty *op_src);
+static void bke_override_property_operation_copy(IDOverrideStaticPropertyOperation *opop_dst, IDOverrideStaticPropertyOperation *opop_src);
+
+static void bke_override_property_clear(IDOverrideStaticProperty *op);
+static void bke_override_property_operation_clear(IDOverrideStaticPropertyOperation *opop);
+
+/** Initialize empty overriding of \a reference_id by \a local_id. */
+IDOverrideStatic *BKE_override_static_init(ID *local_id, ID *reference_id)
+{
+ /* If reference_id is NULL, we are creating an override template for purely local data.
+ * Else, reference *must* be linked data. */
+ BLI_assert(reference_id == NULL || reference_id->lib != NULL);
+ BLI_assert(local_id->override_static == NULL);
+
+ ID *ancestor_id;
+ for (ancestor_id = reference_id;
+ ancestor_id != NULL && ancestor_id->override_static != NULL && ancestor_id->override_static->reference != NULL;
+ ancestor_id = ancestor_id->override_static->reference);
+
+ if (ancestor_id != NULL && ancestor_id->override_static != NULL) {
+ /* Original ID has a template, use it! */
+ BKE_override_static_copy(local_id, ancestor_id);
+ if (local_id->override_static->reference != reference_id) {
+ id_us_min(local_id->override_static->reference);
+ local_id->override_static->reference = reference_id;
+ id_us_plus(local_id->override_static->reference);
+ }
+ return local_id->override_static;
+ }
+
+ /* Else, generate new empty override. */
+ local_id->override_static = MEM_callocN(sizeof(*local_id->override_static), __func__);
+ local_id->override_static->reference = reference_id;
+ id_us_plus(local_id->override_static->reference);
+ local_id->tag &= ~LIB_TAG_OVERRIDESTATIC_OK;
+ /* TODO do we want to add tag or flag to referee to mark it as such? */
+ return local_id->override_static;
+}
+
+/** Deep copy of a whole override from \a src_id to \a dst_id. */
+void BKE_override_static_copy(ID *dst_id, const ID *src_id)
+{
+ BLI_assert(src_id->override_static != NULL);
+
+ if (dst_id->override_static != NULL) {
+ if (src_id->override_static == NULL) {
+ BKE_override_static_free(&dst_id->override_static);
+ return;
+ }
+ else {
+ BKE_override_static_clear(dst_id->override_static);
+ }
+ }
+ else if (src_id->override_static == NULL) {
+ return;
+ }
+ else {
+ BKE_override_static_init(dst_id, NULL);
+ }
+
+ /* Source is already overriding data, we copy it but reuse its reference for dest ID.
+ * otherwise, source is only an override template, it then becomes reference of dest ID. */
+ dst_id->override_static->reference = src_id->override_static->reference ? src_id->override_static->reference : (ID *)src_id;
+ id_us_plus(dst_id->override_static->reference);
+
+ BLI_duplicatelist(&dst_id->override_static->properties, &src_id->override_static->properties);
+ for (IDOverrideStaticProperty *op_dst = dst_id->override_static->properties.first, *op_src = src_id->override_static->properties.first;
+ op_dst;
+ op_dst = op_dst->next, op_src = op_src->next)
+ {
+ bke_override_property_copy(op_dst, op_src);
+ }
+
+ dst_id->tag &= ~LIB_TAG_OVERRIDESTATIC_OK;
+}
+
+/** Clear any overriding data from given \a override. */
+void BKE_override_static_clear(IDOverrideStatic *override)
+{
+ BLI_assert(override != NULL);
+
+ for (IDOverrideStaticProperty *op = override->properties.first; op; op = op->next) {
+ bke_override_property_clear(op);
+ }
+ BLI_freelistN(&override->properties);
+
+ id_us_min(override->reference);
+ /* override->storage should never be refcounted... */
+}
+
+/** Free given \a override. */
+void BKE_override_static_free(struct IDOverrideStatic **override)
+{
+ BLI_assert(*override != NULL);
+
+ BKE_override_static_clear(*override);
+ MEM_freeN(*override);
+ *override = NULL;
+}
+
+static ID *override_static_create_from(Main *bmain, ID *reference_id)
+{
+ ID *local_id;
+
+ if (!id_copy(bmain, reference_id, (ID **)&local_id, false)) {
+ return NULL;
+ }
+ id_us_min(local_id);
+
+ BKE_override_static_init(local_id, reference_id);
+ local_id->flag |= LIB_OVERRIDE_STATIC_AUTO;
+
+ return local_id;
+}
+
+
+/** Create an overriden local copy of linked reference. */
+ID *BKE_override_static_create_from_id(Main *bmain, ID *reference_id)
+{
+ BLI_assert(reference_id != NULL);
+ BLI_assert(reference_id->lib != NULL);
+
+ ID *local_id = override_static_create_from(bmain, reference_id);
+
+ /* Remapping, we obviously only want to affect local data (and not our own reference pointer to overriden ID). */
+ BKE_libblock_remap(bmain, reference_id, local_id, ID_REMAP_SKIP_INDIRECT_USAGE | ID_REMAP_SKIP_STATIC_OVERRIDE);
+
+ return local_id;
+}
+
+/** Create overriden local copies of all tagged data-blocks in given Main.
+ *
+ * \note Set id->newid of overridden libs with newly created overrides, caller is responsible to clean those pointers
+ * before/after usage as needed.
+ *
+ * \return \a true on success, \a false otherwise.
+ */
+bool BKE_override_static_create_from_tag(Main *bmain)
+{
+ ListBase *lbarray[MAX_LIBARRAY];
+ int a;
+ bool ret = true;
+
+ const int num_types = a = set_listbasepointers(bmain, lbarray);
+ while (a--) {
+ for (ID *reference_id = lbarray[a]->first; reference_id != NULL; reference_id = reference_id->next) {
+ if ((reference_id->tag & LIB_TAG_DOIT) != 0 && reference_id->lib != NULL) {
+ if ((reference_id->newid = override_static_create_from(bmain, reference_id)) == NULL) {
+ ret = false;
+ }
+ }
+ }
+ }
+
+ /* Remapping, we obviously only want to affect local data (and not our own reference pointer to overriden ID). */
+ a = num_types;
+ while (a--) {
+ for (ID *reference_id = lbarray[a]->first; reference_id != NULL; reference_id = reference_id->next) {
+ if ((reference_id->tag & LIB_TAG_DOIT) != 0 && reference_id->lib != NULL && reference_id->newid != NULL) {
+ ID *local_id = reference_id->newid;
+ BKE_libblock_remap(bmain, reference_id, local_id,
+ ID_REMAP_SKIP_INDIRECT_USAGE | ID_REMAP_SKIP_STATIC_OVERRIDE);
+ }
+ }
+ }
+
+ return ret;
+}
+
+/**
+ * Find override property from given RNA path, if it exists.
+ */
+IDOverrideStaticProperty *BKE_override_static_property_find(IDOverrideStatic *override, const char *rna_path)
+{
+ /* XXX TODO we'll most likely want a runtime ghash to store that mapping at some point. */
+ return BLI_findstring_ptr(&override->properties, rna_path, offsetof(IDOverrideStaticProperty, rna_path));
+}
+
+/**
+ * Find override property from given RNA path, or create it if it does not exist.
+ */
+IDOverrideStaticProperty *BKE_override_static_property_get(IDOverrideStatic *override, const char *rna_path, bool *r_created)
+{
+ /* XXX TODO we'll most likely want a runtime ghash to store taht mapping at some point. */
+ IDOverrideStaticProperty *op = BKE_override_static_property_find(override, rna_path);
+
+ if (op == NULL) {
+ op = MEM_callocN(sizeof(IDOverrideStaticProperty), __func__);
+ op->rna_path = BLI_strdup(rna_path);
+ BLI_addtail(&override->properties, op);
+
+ if (r_created) {
+ *r_created = true;
+ }
+ }
+ else if (r_created) {
+ *r_created = false;
+ }
+
+ return op;
+}
+
+void bke_override_property_copy(IDOverrideStaticProperty *op_dst, IDOverrideStaticProperty *op_src)
+{
+ op_dst->rna_path = BLI_strdup(op_src->rna_path);
+ BLI_duplicatelist(&op_dst->operations, &op_src->operations);
+
+ for (IDOverrideStaticPropertyOperation *opop_dst = op_dst->operations.first, *opop_src = op_src->operations.first;
+ opop_dst;
+ opop_dst = opop_dst->next, opop_src = opop_src->next)
+ {
+ bke_override_property_operation_copy(opop_dst, opop_src);
+ }
+}
+
+void bke_override_property_clear(IDOverrideStaticProperty *op)
+{
+ BLI_assert(op->rna_path != NULL);
+
+ MEM_freeN(op->rna_path);
+
+ for (IDOverrideStaticPropertyOperation *opop = op->operations.first; opop; opop = opop->next) {
+ bke_override_property_operation_clear(opop);
+ }
+ BLI_freelistN(&op->operations);
+}
+
+/**
+ * Remove and free given \a override_property from given ID \a override.
+ */
+void BKE_override_static_property_delete(IDOverrideStatic *override, IDOverrideStaticProperty *override_property)
+{
+ bke_override_property_clear(override_property);
+ BLI_freelinkN(&override->properties, override_property);
+}
+
+/**
+ * Find override property operation from given sub-item(s), if it exists.
+ */
+IDOverrideStaticPropertyOperation *BKE_override_static_property_operation_find(
+ IDOverrideStaticProperty *override_property,
+ const char *subitem_refname, const char *subitem_locname,
+ const int subitem_refindex, const int subitem_locindex, const bool strict, bool *r_strict)
+{
+ IDOverrideStaticPropertyOperation *opop;
+ const int subitem_defindex = -1;
+
+ if (r_strict) {
+ *r_strict = true;
+ }
+
+ if (subitem_locname &&
+ (opop = BLI_findstring_ptr(&override_property->operations, subitem_locname,
+ offsetof(IDOverrideStaticPropertyOperation, subitem_local_name))))
+ {
+ return opop;
+ }
+
+ if (subitem_refname &&
+ (opop = BLI_findstring_ptr(&override_property->operations, subitem_refname,
+ offsetof(IDOverrideStaticPropertyOperation, subitem_reference_name))))
+ {
+ return opop;
+ }
+
+ if ((opop = BLI_listbase_bytes_find(&override_property->operations, &subitem_locindex, sizeof(subitem_locindex),
+ offsetof(IDOverrideStaticPropertyOperation, subitem_local_index))))
+ {
+ return opop;
+ }
+
+ if ((opop = BLI_listbase_bytes_find(&override_property->operations, &subitem_refindex, sizeof(subitem_refindex),
+ offsetof(IDOverrideStaticPropertyOperation, subitem_reference_index))))
+ {
+ return opop;
+ }
+
+ /* index == -1 means all indices, that is valid fallback in case we requested specific index. */
+ if (!strict && (subitem_locindex != subitem_defindex) &&
+ (opop = BLI_listbase_bytes_find(&override_property->operations, &subitem_defindex, sizeof(subitem_defindex),
+ offsetof(IDOverrideStaticPropertyOperation, subitem_local_index))))
+ {
+ if (r_strict) {
+ *r_strict = false;
+ }
+ return opop;
+ }
+
+ return NULL;
+}
+
+/**
+ * Find override property operation from given sub-item(s), or create it if it does not exist.
+ */
+IDOverrideStaticPropertyOperation *BKE_override_static_property_operation_get(
+ IDOverrideStaticProperty *override_property, const short operation,
+ const char *subitem_refname, const char *subitem_locname,
+ const int subitem_refindex, const int subitem_locindex,
+ const bool strict, bool *r_strict, bool *r_created)
+{
+ IDOverrideStaticPropertyOperation *opop = BKE_override_static_property_operation_find(override_property,
+ subitem_refname, subitem_locname,
+ subitem_refindex, subitem_locindex,
+ strict, r_strict);
+
+ if (opop == NULL) {
+ opop = MEM_callocN(sizeof(IDOverrideStaticPropertyOperation), __func__);
+ opop->operation = operation;
+ if (subitem_locname) {
+ opop->subitem_local_name = BLI_strdup(subitem_locname);
+ }
+ if (subitem_refname) {
+ opop->subitem_reference_name = BLI_strdup(subitem_refname);
+ }
+ opop->subitem_local_index = subitem_locindex;
+ opop->subitem_reference_index = subitem_refindex;
+
+ BLI_addtail(&override_property->operations, opop);
+
+ if (r_created) {
+ *r_created = true;
+ }
+ }
+ else if (r_created) {
+ *r_created = false;
+ }
+
+ return opop;
+}
+
+void bke_override_property_operation_copy(IDOverrideStaticPropertyOperation *opop_dst, IDOverrideStaticPropertyOperation *opop_src)
+{
+ if (opop_src->subitem_reference_name) {
+ opop_dst->subitem_reference_name = BLI_strdup(opop_src->subitem_reference_name);
+ }
+ if (opop_src->subitem_local_name) {
+ opop_dst->subitem_local_name = BLI_strdup(opop_src->subitem_local_name);
+ }
+}
+
+void bke_override_property_operation_clear(IDOverrideStaticPropertyOperation *opop)
+{
+ if (opop->subitem_reference_name) {
+ MEM_freeN(opop->subitem_reference_name);
+ }
+ if (opop->subitem_local_name) {
+ MEM_freeN(opop->subitem_local_name);
+ }
+}
+
+/**
+ * Remove and free given \a override_property_operation from given ID \a override_property.
+ */
+void BKE_override_static_property_operation_delete(
+ IDOverrideStaticProperty *override_property, IDOverrideStaticPropertyOperation *override_property_operation)
+{
+ bke_override_property_operation_clear(override_property_operation);
+ BLI_freelinkN(&override_property->operations, override_property_operation);
+}
+
+/**
+ * Check that status of local data-block is still valid against current reference one.
+ *
+ * It means that all overridable, but not overridden, properties' local values must be equal to reference ones.
+ * Clears LIB_TAG_OVERRIDE_OK if they do not.
+ *
+ * This is typically used to detect whether some property has been changed in local and a new IDOverrideProperty
+ * (of IDOverridePropertyOperation) has to be added.
+ *
+ * \return true if status is OK, false otherwise. */
+bool BKE_override_static_status_check_local(ID *local)
+{
+ BLI_assert(local->override_static != NULL);
+
+ ID *reference = local->override_static->reference;
+
+ if (reference == NULL) {
+ /* This is an override template, local status is always OK! */
+ return true;
+ }
+
+ BLI_assert(GS(local->name) == GS(reference->name));
+
+ /* Note that reference is assumed always valid, caller has to ensure that itself. */
+
+ PointerRNA rnaptr_local, rnaptr_reference;
+ RNA_id_pointer_create(local, &rnaptr_local);
+ RNA_id_pointer_create(reference, &rnaptr_reference);
+
+ if (!RNA_struct_override_matches(
+ &rnaptr_local, &rnaptr_reference, NULL, local->override_static,
+ RNA_OVERRIDE_COMPARE_IGNORE_NON_OVERRIDABLE | RNA_OVERRIDE_COMPARE_IGNORE_OVERRIDDEN, NULL))
+ {
+ local->tag &= ~LIB_TAG_OVERRIDESTATIC_OK;
+ return false;
+ }
+
+ return true;
+}
+
+/**
+ * Check that status of reference data-block is still valid against current local one.
+ *
+ * It means that all non-overridden properties' local values must be equal to reference ones.
+ * Clears LIB_TAG_OVERRIDE_OK if they do not.
+ *
+ * This is typically used to detect whether some reference has changed and local needs to be updated against it.
+ *
+ * \return true if status is OK, false otherwise. */
+bool BKE_override_static_status_check_reference(ID *local)
+{
+ BLI_assert(local->override_static != NULL);
+
+ ID *reference = local->override_static->reference;
+
+ if (reference == NULL) {
+ /* This is an override template, reference is virtual, so its status is always OK! */
+ return true;
+ }
+
+ BLI_assert(GS(local->name) == GS(reference->name));
+
+ if (reference->override_static && (reference->tag & LIB_TAG_OVERRIDESTATIC_OK) == 0) {
+ if (!BKE_override_static_status_check_reference(reference)) {
+ /* If reference is also override of another data-block, and its status is not OK,
+ * then this override is not OK either.
+ * Note that this should only happen when reloading libraries... */
+ local->tag &= ~LIB_TAG_OVERRIDESTATIC_OK;
+ return false;
+ }
+ }
+
+ PointerRNA rnaptr_local, rnaptr_reference;
+ RNA_id_pointer_create(local, &rnaptr_local);
+ RNA_id_pointer_create(reference, &rnaptr_reference);
+
+ if (!RNA_struct_override_matches(
+ &rnaptr_local, &rnaptr_reference, NULL, local->override_static,
+ RNA_OVERRIDE_COMPARE_IGNORE_OVERRIDDEN, NULL))
+ {
+ local->tag &= ~LIB_TAG_OVERRIDESTATIC_OK;
+ return false;
+ }
+
+ return true;
+}
+
+/**
+ * Compares local and reference data-blocks and create new override operations as needed,
+ * or reset to reference values if overriding is not allowed.
+ *
+ * \note Defining override operations is only mandatory before saving a .blend file on disk (not for undo!).
+ * Knowing that info at runtime is only useful for UI/UX feedback.
+ *
+ * \note This is by far the biggest operation (the more time-consuming) of the three so far, since it has to go over
+ * all properties in depth (all overridable ones at least). Generating diff values and applying overrides
+ * are much cheaper.
+ *
+ * \return true is new overriding op was created, or some local data was reset. */
+bool BKE_override_static_operations_create(ID *local)
+{
+ BLI_assert(local->override_static != NULL);
+ const bool is_template = (local->override_static->reference == NULL);
+ bool ret = false;
+
+ if (!is_template && local->flag & LIB_OVERRIDE_STATIC_AUTO) {
+ PointerRNA rnaptr_local, rnaptr_reference;
+ RNA_id_pointer_create(local, &rnaptr_local);
+ RNA_id_pointer_create(local->override_static->reference, &rnaptr_reference);
+
+ eRNAOverrideMatchResult report_flags = 0;
+ RNA_struct_override_matches(
+ &rnaptr_local, &rnaptr_reference, NULL, local->override_static,
+ RNA_OVERRIDE_COMPARE_CREATE | RNA_OVERRIDE_COMPARE_RESTORE, &report_flags);
+ if (report_flags & RNA_OVERRIDE_MATCH_RESULT_CREATED) {
+ ret = true;
+ }
+#ifndef NDEBUG
+ if (report_flags & RNA_OVERRIDE_MATCH_RESULT_RESTORED) {
+ printf("We did restore some properties of %s from its reference.\n", local->name);
+ }
+ if (ret) {
+ printf("We did generate static override rules for %s\n", local->name);
+ }
+ else {
+ printf("No new static override rules for %s\n", local->name);
+ }
+#endif
+ }
+ return ret;
+}
+
+/** Check all overrides from given \a bmain and create/update overriding operations as needed. */
+void BKE_main_override_static_operations_create(Main *bmain)
+{
+ ListBase *lbarray[MAX_LIBARRAY];
+ int base_count, i;
+
+ base_count = set_listbasepointers(bmain, lbarray);
+
+ for (i = 0; i < base_count; i++) {
+ ListBase *lb = lbarray[i];
+ ID *id;
+
+ for (id = lb->first; id; id = id->next) {
+ /* TODO Maybe we could also add an 'override update' tag e.g. when tagging for DEG update? */
+ if (id->lib == NULL && id->override_static != NULL && id->override_static->reference != NULL && (id->flag & LIB_OVERRIDE_STATIC_AUTO)) {
+ BKE_override_static_operations_create(id);
+ }
+ }
+ }
+}
+
+/** Update given override from its reference (re-applying overriden properties). */
+void BKE_override_static_update(Main *bmain, ID *local)
+{
+ if (local->override_static == NULL || local->override_static->reference == NULL) {
+ return;
+ }
+
+ /* Recursively do 'ancestors' overrides first, if any. */
+ if (local->override_static->reference->override_static && (local->override_static->reference->tag & LIB_TAG_OVERRIDESTATIC_OK) == 0) {
+ BKE_override_static_update(bmain, local->override_static->reference);
+ }
+
+ /* We want to avoid having to remap here, however creating up-to-date override is much simpler if based
+ * on reference than on current override.
+ * So we work on temp copy of reference, and 'swap' its content with local. */
+
+ /* XXX We need a way to get off-Main copies of IDs (similar to localized mats/texts/ etc.)!
+ * However, this is whole bunch of code work in itself, so for now plain stupid ID copy will do,
+ * as innefficient as it is. :/
+ * Actually, maybe not! Since we are swapping with original ID's local content, we want to keep
+ * usercount in correct state when freeing tmp_id (and that usercounts of IDs used by 'new' local data
+ * also remain correct). */
+ /* This would imply change in handling of usercout all over RNA (and possibly all over Blender code).
+ * Not impossible to do, but would rather see first if extra useless usual user handling is actually
+ * a (performances) issue here. */
+
+ ID *tmp_id;
+ id_copy(bmain, local->override_static->reference, &tmp_id, false);
+
+ if (tmp_id == NULL) {
+ return;
+ }
+
+ PointerRNA rnaptr_src, rnaptr_dst, rnaptr_storage_stack, *rnaptr_storage = NULL;
+ RNA_id_pointer_create(local, &rnaptr_src);
+ RNA_id_pointer_create(tmp_id, &rnaptr_dst);
+ if (local->override_static->storage) {
+ rnaptr_storage = &rnaptr_storage_stack;
+ RNA_id_pointer_create(local->override_static->storage, rnaptr_storage);
+ }
+
+ RNA_struct_override_apply(&rnaptr_dst, &rnaptr_src, rnaptr_storage, local->override_static);
+
+ /* This also transfers all pointers (memory) owned by local to tmp_id, and vice-versa. So when we'll free tmp_id,
+ * we'll actually free old, outdated data from local. */
+ BKE_id_swap(bmain, local, tmp_id);
+
+ /* Again, horribly innefficient in our case, we need something off-Main (aka moar generic nolib copy/free stuff)! */
+ /* XXX And crashing in complex cases (e.g. because depsgraph uses same data...). */
+ BKE_libblock_free_ex(bmain, tmp_id, true, false);
+
+ if (local->override_static->storage) {
+ /* We know this datablock is not used anywhere besides local->override->storage. */
+ /* XXX For until we get fully shadow copies, we still need to ensure storage releases
+ * its usage of any ID pointers it may have. */
+ BKE_libblock_free_ex(bmain, local->override_static->storage, true, false);
+ local->override_static->storage = NULL;
+ }
+
+ local->tag |= LIB_TAG_OVERRIDESTATIC_OK;
+
+ /* Full rebuild of Depsgraph! */
+ DEG_on_visible_update(bmain, true); /* XXX Is this actual valid replacement for old DAG_relations_tag_update(bmain) ? */
+}
+
+/** Update all overrides from given \a bmain. */
+void BKE_main_override_static_update(Main *bmain)
+{
+ ListBase *lbarray[MAX_LIBARRAY];
+ int base_count, i;
+
+ base_count = set_listbasepointers(bmain, lbarray);
+
+ for (i = 0; i < base_count; i++) {
+ ListBase *lb = lbarray[i];
+ ID *id;
+
+ for (id = lb->first; id; id = id->next) {
+ if (id->override_static != NULL && id->lib == NULL) {
+ BKE_override_static_update(bmain, id);
+ }
+ }
+ }
+}
+
+/***********************************************************************************************************************
+ * Storage (how to wtore overriding data into .blend files).
+ *
+ * Basically:
+ * I) Only 'differential' storage needs special handling here. All others (replacing values or
+ * inserting/removing items from a collection) can be handled with simply storing current content of local data-block.
+ * II) We store the differential value into a second 'ghost' data-block, which is an empty ID of same type as local one,
+ * where we only define values that need differential data.
+ *
+ * This avoids us having to modify 'real' data-block at write time (and retoring it afterwards), which is inneficient,
+ * and potentially dangerous (in case of concurrent access...), while not using much extra memory in typical cases.
+ * It also ensures stored data-block always contains exact same data as "desired" ones (kind of "baked" data-blocks).
+ */
+
+/** Initialize an override storage. */
+OverrideStaticStorage *BKE_override_static_operations_store_initialize(void)
+{
+ return BKE_main_new();
+}
+
+/**
+ * Generate suitable 'write' data (this only affects differential override operations).
+ *
+ * Note that \a local ID is no more modified by this call, all extra data are stored in its temp \a storage_id copy. */
+ID *BKE_override_static_operations_store_start(OverrideStaticStorage *override_storage, ID *local)
+{
+ BLI_assert(local->override_static != NULL);
+ BLI_assert(override_storage != NULL);
+ const bool is_template = (local->override_static->reference == NULL);
+
+ if (is_template) {
+ /* This is actually purely local data with an override template, nothing to do here! */
+ return NULL;
+ }
+
+ /* Forcefully ensure we know about all needed override operations. */
+ BKE_override_static_operations_create(local);
+
+ ID *storage_id;
+#ifdef DEBUG_OVERRIDE_TIMEIT
+ TIMEIT_START_AVERAGED(BKE_override_operations_store_start);
+#endif
+
+ /* XXX TODO We may also want a specialized handling of things here too, to avoid copying heavy never-overridable
+ * data (like Mesh geometry etc.)? And also maybe avoid lib refcounting completely (shallow copy...). */
+ /* This would imply change in handling of usercout all over RNA (and possibly all over Blender code).
+ * Not impossible to do, but would rather see first is extra useless usual user handling is actually
+ * a (performances) issue here, before doing it. */
+ id_copy((Main *)override_storage, local, &storage_id, false);
+
+ if (storage_id != NULL) {
+ PointerRNA rnaptr_reference, rnaptr_final, rnaptr_storage;
+ RNA_id_pointer_create(local->override_static->reference, &rnaptr_reference);
+ RNA_id_pointer_create(local, &rnaptr_final);
+ RNA_id_pointer_create(storage_id, &rnaptr_storage);
+
+ if (!RNA_struct_override_store(&rnaptr_final, &rnaptr_reference, &rnaptr_storage, local->override_static)) {
+ BKE_libblock_free_ex(override_storage, storage_id, true, false);
+ storage_id = NULL;
+ }
+ }
+
+ local->override_static->storage = storage_id;
+
+#ifdef DEBUG_OVERRIDE_TIMEIT
+ TIMEIT_END_AVERAGED(BKE_override_operations_store_start);
+#endif
+ return storage_id;
+}
+
+/** Restore given ID modified by \a BKE_override_operations_store_start, to its original state. */
+void BKE_override_static_operations_store_end(OverrideStaticStorage *UNUSED(override_storage), ID *local)
+{
+ BLI_assert(local->override_static != NULL);
+
+ /* Nothing else to do here really, we need to keep all temp override storage data-blocks in memory until
+ * whole file is written anyway (otherwise we'd get mem pointers overlap...). */
+ local->override_static->storage = NULL;
+}
+
+void BKE_override_static_operations_store_finalize(OverrideStaticStorage *override_storage)
+{
+ /* We cannot just call BKE_main_free(override_storage), not until we have option to make 'ghost' copies of IDs
+ * without increasing usercount of used data-blocks... */
+ ListBase *lbarray[MAX_LIBARRAY];
+ int base_count, i;
+
+ base_count = set_listbasepointers(override_storage, lbarray);
+
+ for (i = 0; i < base_count; i++) {
+ ListBase *lb = lbarray[i];
+ ID *id;
+
+ while ((id = lb->first)) {
+ BKE_libblock_free_ex(override_storage, id, true, false);
+ }
+ }
+
+ BKE_main_free(override_storage);
+}
diff --git a/source/blender/blenkernel/intern/library_query.c b/source/blender/blenkernel/intern/library_query.c
index 8d92ddcb053..0f83dfe7ecf 100644
--- a/source/blender/blenkernel/intern/library_query.c
+++ b/source/blender/blenkernel/intern/library_query.c
@@ -52,6 +52,7 @@
#include "DNA_mask_types.h"
#include "DNA_node_types.h"
#include "DNA_object_force_types.h"
+#include "DNA_lightprobe_types.h"
#include "DNA_rigidbody_types.h"
#include "DNA_scene_types.h"
#include "DNA_sensor_types.h"
@@ -61,6 +62,8 @@
#include "DNA_sound_types.h"
#include "DNA_text_types.h"
#include "DNA_vfont_types.h"
+#include "DNA_windowmanager_types.h"
+#include "DNA_workspace_types.h"
#include "DNA_world_types.h"
#include "BLI_utildefines.h"
@@ -69,8 +72,10 @@
#include "BLI_linklist_stack.h"
#include "BKE_animsys.h"
+#include "BKE_collection.h"
#include "BKE_constraint.h"
#include "BKE_fcurve.h"
+#include "BKE_group.h"
#include "BKE_idprop.h"
#include "BKE_library.h"
#include "BKE_library_query.h"
@@ -82,6 +87,7 @@
#include "BKE_sca.h"
#include "BKE_sequencer.h"
#include "BKE_tracking.h"
+#include "BKE_workspace.h"
#define FOREACH_FINALIZE _finalize
@@ -368,6 +374,10 @@ void BKE_library_foreach_ID_link(Main *bmain, ID *id, LibraryIDLinkCallback call
#define CALLBACK_INVOKE(check_id_super, cb_flag) \
FOREACH_CALLBACK_INVOKE(&data, check_id_super, cb_flag)
+ if (id->override_static != NULL) {
+ CALLBACK_INVOKE_ID(id->override_static->reference, IDWALK_CB_USER | IDWALK_CB_STATIC_OVERRIDE_REFERENCE);
+ }
+
for (; id != NULL; id = (flag & IDWALK_RECURSE) ? BLI_LINKSTACK_POP(data.ids_todo) : NULL) {
data.self_id = id;
data.cb_flag = ID_IS_LINKED(id) ? IDWALK_CB_INDIRECT_USAGE : 0;
@@ -402,8 +412,6 @@ void BKE_library_foreach_ID_link(Main *bmain, ID *id, LibraryIDLinkCallback call
{
Scene *scene = (Scene *) id;
ToolSettings *toolsett = scene->toolsettings;
- SceneRenderLayer *srl;
- Base *base;
CALLBACK_INVOKE(scene->camera, IDWALK_CB_NOP);
CALLBACK_INVOKE(scene->world, IDWALK_CB_USER);
@@ -417,31 +425,6 @@ void BKE_library_foreach_ID_link(Main *bmain, ID *id, LibraryIDLinkCallback call
* since basact is just a pointer to one of those items. */
CALLBACK_INVOKE(scene->obedit, IDWALK_CB_NOP);
- for (srl = scene->r.layers.first; srl; srl = srl->next) {
- FreestyleModuleConfig *fmc;
- FreestyleLineSet *fls;
-
- if (srl->mat_override) {
- CALLBACK_INVOKE(srl->mat_override, IDWALK_CB_USER);
- }
- if (srl->light_override) {
- CALLBACK_INVOKE(srl->light_override, IDWALK_CB_USER);
- }
- for (fmc = srl->freestyleConfig.modules.first; fmc; fmc = fmc->next) {
- if (fmc->script) {
- CALLBACK_INVOKE(fmc->script, IDWALK_CB_NOP);
- }
- }
- for (fls = srl->freestyleConfig.linesets.first; fls; fls = fls->next) {
- if (fls->group) {
- CALLBACK_INVOKE(fls->group, IDWALK_CB_USER);
- }
- if (fls->linestyle) {
- CALLBACK_INVOKE(fls->linestyle, IDWALK_CB_USER);
- }
- }
- }
-
if (scene->ed) {
Sequence *seq;
SEQP_BEGIN(scene->ed, seq)
@@ -461,8 +444,35 @@ void BKE_library_foreach_ID_link(Main *bmain, ID *id, LibraryIDLinkCallback call
CALLBACK_INVOKE(scene->gpd, IDWALK_CB_USER);
- for (base = scene->base.first; base; base = base->next) {
- CALLBACK_INVOKE(base->object, IDWALK_CB_USER);
+ FOREACH_SCENE_COLLECTION(scene, sc)
+ {
+ for (LinkData *link = sc->objects.first; link; link = link->next) {
+ CALLBACK_INVOKE_ID(link->data, IDWALK_CB_USER);
+ }
+ }
+ FOREACH_SCENE_COLLECTION_END
+
+ ViewLayer *view_layer;
+ for (view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ CALLBACK_INVOKE(base->object, IDWALK_NOP);
+ }
+
+ for (FreestyleModuleConfig *fmc = view_layer->freestyle_config.modules.first; fmc; fmc = fmc->next) {
+ if (fmc->script) {
+ CALLBACK_INVOKE(fmc->script, IDWALK_CB_NOP);
+ }
+ }
+
+ for (FreestyleLineSet *fls = view_layer->freestyle_config.linesets.first; fls; fls = fls->next) {
+ if (fls->group) {
+ CALLBACK_INVOKE(fls->group, IDWALK_CB_USER);
+ }
+
+ if (fls->linestyle) {
+ CALLBACK_INVOKE(fls->linestyle, IDWALK_CB_USER);
+ }
+ }
}
for (TimeMarker *marker = scene->markers.first; marker; marker = marker->next) {
@@ -624,31 +634,6 @@ void BKE_library_foreach_ID_link(Main *bmain, ID *id, LibraryIDLinkCallback call
for (i = 0; i < mesh->totcol; i++) {
CALLBACK_INVOKE(mesh->mat[i], IDWALK_CB_USER);
}
-
- /* XXX Really not happy with this - probably texface should rather use some kind of
- * 'texture slots' and just set indices in each poly/face item - would also save some memory.
- * Maybe a nice TODO for blender2.8? */
- if (mesh->mtface || mesh->mtpoly) {
- for (i = 0; i < mesh->pdata.totlayer; i++) {
- if (mesh->pdata.layers[i].type == CD_MTEXPOLY) {
- MTexPoly *txface = (MTexPoly *)mesh->pdata.layers[i].data;
-
- for (int j = 0; j < mesh->totpoly; j++, txface++) {
- CALLBACK_INVOKE(txface->tpage, IDWALK_CB_USER_ONE);
- }
- }
- }
-
- for (i = 0; i < mesh->fdata.totlayer; i++) {
- if (mesh->fdata.layers[i].type == CD_MTFACE) {
- MTFace *tface = (MTFace *)mesh->fdata.layers[i].data;
-
- for (int j = 0; j < mesh->totface; j++, tface++) {
- CALLBACK_INVOKE(tface->tpage, IDWALK_CB_USER_ONE);
- }
- }
- }
- }
break;
}
@@ -691,6 +676,7 @@ void BKE_library_foreach_ID_link(Main *bmain, ID *id, LibraryIDLinkCallback call
library_foreach_ID_as_subdata_link((ID **)&material->nodetree, callback, user_data, flag, &data);
}
CALLBACK_INVOKE(material->group, IDWALK_CB_USER);
+ CALLBACK_INVOKE(material->edit_image, IDWALK_CB_USER);
break;
}
@@ -751,13 +737,6 @@ void BKE_library_foreach_ID_link(Main *bmain, ID *id, LibraryIDLinkCallback call
break;
}
- case ID_SCR:
- {
- bScreen *screen = (bScreen *) id;
- CALLBACK_INVOKE(screen->scene, IDWALK_CB_USER_ONE);
- break;
- }
-
case ID_WO:
{
World *world = (World *) id;
@@ -780,13 +759,21 @@ void BKE_library_foreach_ID_link(Main *bmain, ID *id, LibraryIDLinkCallback call
break;
}
+ case ID_LP:
+ {
+ LightProbe *probe = (LightProbe *) id;
+ CALLBACK_INVOKE(probe->image, IDWALK_CB_USER);
+ break;
+ }
+
case ID_GR:
{
Group *group = (Group *) id;
- GroupObject *gob;
- for (gob = group->gobject.first; gob; gob = gob->next) {
- CALLBACK_INVOKE(gob->ob, IDWALK_CB_USER_ONE);
+ FOREACH_GROUP_BASE(group, base)
+ {
+ CALLBACK_INVOKE(base->object, IDWALK_CB_USER_ONE);
}
+ FOREACH_GROUP_BASE_END
break;
}
@@ -968,6 +955,40 @@ void BKE_library_foreach_ID_link(Main *bmain, ID *id, LibraryIDLinkCallback call
}
break;
}
+
+ case ID_WM:
+ {
+ wmWindowManager *wm = (wmWindowManager *)id;
+
+ for (wmWindow *win = wm->windows.first; win; win = win->next) {
+ ID *workspace = (ID *)BKE_workspace_active_get(win->workspace_hook);
+
+ CALLBACK_INVOKE(win->scene, IDWALK_CB_USER_ONE);
+
+ CALLBACK_INVOKE_ID(workspace, IDWALK_CB_NOP);
+ /* allow callback to set a different workspace */
+ BKE_workspace_active_set(win->workspace_hook, (WorkSpace *)workspace);
+ }
+ break;
+ }
+
+ case ID_WS:
+ {
+ WorkSpace *workspace = (WorkSpace *)id;
+ ListBase *layouts = BKE_workspace_layouts_get(workspace);
+
+ for (WorkSpaceLayout *layout = layouts->first; layout; layout = layout->next) {
+ bScreen *screen = BKE_workspace_layout_screen_get(layout);
+
+ /* CALLBACK_INVOKE expects an actual pointer, not a variable holding the pointer.
+ * However we can't acess layout->screen here since we are outside the workspace project. */
+ CALLBACK_INVOKE(screen, IDWALK_CB_NOP);
+ /* allow callback to set a different screen */
+ BKE_workspace_layout_screen_set(layout, screen);
+ }
+
+ break;
+ }
case ID_GD:
{
bGPdata *gpencil = (bGPdata *) id;
@@ -979,11 +1000,11 @@ void BKE_library_foreach_ID_link(Main *bmain, ID *id, LibraryIDLinkCallback call
}
/* Nothing needed for those... */
+ case ID_SCR:
case ID_IM:
case ID_VF:
case ID_TXT:
case ID_SO:
- case ID_WM:
case ID_PAL:
case ID_PC:
case ID_CF:
@@ -1111,6 +1132,9 @@ bool BKE_library_id_can_use_idtype(ID *id_owner, const short id_type_used)
return ELEM(id_type_used, ID_MC); /* WARNING! mask->parent.id, not typed. */
case ID_LS:
return (ELEM(id_type_used, ID_TE, ID_OB));
+ case ID_LP:
+ return ELEM(id_type_used, ID_IM);
+ case ID_WS:
case ID_IM:
case ID_VF:
case ID_TXT:
diff --git a/source/blender/blenkernel/intern/library_remap.c b/source/blender/blenkernel/intern/library_remap.c
index 31dc46a55f0..6d4c4082810 100644
--- a/source/blender/blenkernel/intern/library_remap.c
+++ b/source/blender/blenkernel/intern/library_remap.c
@@ -53,6 +53,7 @@
#include "DNA_mask_types.h"
#include "DNA_node_types.h"
#include "DNA_object_types.h"
+#include "DNA_lightprobe_types.h"
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
#include "DNA_speaker_types.h"
@@ -60,6 +61,7 @@
#include "DNA_text_types.h"
#include "DNA_vfont_types.h"
#include "DNA_windowmanager_types.h"
+#include "DNA_workspace_types.h"
#include "DNA_world_types.h"
#include "BLI_blenlib.h"
@@ -71,8 +73,8 @@
#include "BKE_brush.h"
#include "BKE_camera.h"
#include "BKE_cachefile.h"
+#include "BKE_collection.h"
#include "BKE_curve.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
#include "BKE_font.h"
#include "BKE_group.h"
@@ -83,7 +85,9 @@
#include "BKE_key.h"
#include "BKE_lamp.h"
#include "BKE_lattice.h"
+#include "BKE_layer.h"
#include "BKE_library.h"
+#include "BKE_library_override.h"
#include "BKE_library_query.h"
#include "BKE_library_remap.h"
#include "BKE_linestyle.h"
@@ -99,6 +103,7 @@
#include "BKE_object.h"
#include "BKE_paint.h"
#include "BKE_particle.h"
+#include "BKE_lightprobe.h"
#include "BKE_sca.h"
#include "BKE_speaker.h"
#include "BKE_sound.h"
@@ -106,8 +111,12 @@
#include "BKE_scene.h"
#include "BKE_text.h"
#include "BKE_texture.h"
+#include "BKE_workspace.h"
#include "BKE_world.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#ifdef WITH_PYTHON
#include "BPY_extern.h"
#endif
@@ -173,6 +182,7 @@ static int foreach_libblock_remap_callback(void *user_data, ID *id_self, ID **id
}
if (*id_p && (*id_p == old_id)) {
+ const bool is_reference = (cb_flag & IDWALK_CB_STATIC_OVERRIDE_REFERENCE) != 0;
const bool is_indirect = (cb_flag & IDWALK_CB_INDIRECT_USAGE) != 0;
const bool skip_indirect = (id_remap_data->flag & ID_REMAP_SKIP_INDIRECT_USAGE) != 0;
/* Note: proxy usage implies LIB_TAG_EXTERN, so on this aspect it is direct,
@@ -183,6 +193,7 @@ static int foreach_libblock_remap_callback(void *user_data, ID *id_self, ID **id
const bool is_obj_editmode = (is_obj && BKE_object_is_in_editmode((Object *)id));
const bool is_never_null = ((cb_flag & IDWALK_CB_NEVER_NULL) && (new_id == NULL) &&
(id_remap_data->flag & ID_REMAP_FORCE_NEVER_NULL_USAGE) == 0);
+ const bool skip_reference = (id_remap_data->flag & ID_REMAP_SKIP_STATIC_OVERRIDE) != 0;
const bool skip_never_null = (id_remap_data->flag & ID_REMAP_SKIP_NEVER_NULL_USAGE) != 0;
#ifdef DEBUG_PRINT
@@ -199,7 +210,8 @@ static int foreach_libblock_remap_callback(void *user_data, ID *id_self, ID **id
* (skipped_indirect too). */
if ((is_never_null && skip_never_null) ||
(is_obj_editmode && (((Object *)id)->data == *id_p) && new_id != NULL) ||
- (skip_indirect && is_indirect))
+ (skip_indirect && is_indirect) ||
+ (is_reference && skip_reference))
{
if (is_indirect) {
id_remap_data->skipped_indirect++;
@@ -212,7 +224,7 @@ static int foreach_libblock_remap_callback(void *user_data, ID *id_self, ID **id
}
}
}
- else if (is_never_null || is_obj_editmode) {
+ else if (is_never_null || is_obj_editmode || is_reference) {
id_remap_data->skipped_direct++;
}
else {
@@ -229,7 +241,7 @@ static int foreach_libblock_remap_callback(void *user_data, ID *id_self, ID **id
else {
if (!is_never_null) {
*id_p = new_id;
- DAG_id_tag_update_ex(id_remap_data->bmain, id_self, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+ DEG_id_tag_update_ex(id_remap_data->bmain, id_self, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
}
if (cb_flag & IDWALK_CB_USER) {
id_us_min(old_id);
@@ -252,17 +264,15 @@ static int foreach_libblock_remap_callback(void *user_data, ID *id_self, ID **id
}
/* Some remapping unfortunately require extra and/or specific handling, tackle those here. */
-static void libblock_remap_data_preprocess_scene_base_unlink(
- IDRemap *r_id_remap_data, Scene *sce, Base *base, const bool skip_indirect, const bool is_indirect)
+static void libblock_remap_data_preprocess_scene_object_unlink(
+ IDRemap *r_id_remap_data, Scene *sce, Object *ob, const bool skip_indirect, const bool is_indirect)
{
if (skip_indirect && is_indirect) {
r_id_remap_data->skipped_indirect++;
r_id_remap_data->skipped_refcounted++;
}
else {
- id_us_min((ID *)base->object);
- BKE_scene_base_unlink(sce, base);
- MEM_freeN(base);
+ BKE_collections_object_remove(r_id_remap_data->bmain, &sce->id, ob, false);
if (!is_indirect) {
r_id_remap_data->status |= ID_REMAP_IS_LINKED_DIRECT;
}
@@ -283,22 +293,18 @@ static void libblock_remap_data_preprocess(IDRemap *r_id_remap_data)
/* In case we are unlinking... */
if (!r_id_remap_data->old_id) {
/* ... everything from scene. */
- Base *base, *base_next;
- for (base = sce->base.first; base; base = base_next) {
- base_next = base->next;
- libblock_remap_data_preprocess_scene_base_unlink(
- r_id_remap_data, sce, base, skip_indirect, is_indirect);
+ FOREACH_SCENE_OBJECT(sce, ob_iter)
+ {
+ libblock_remap_data_preprocess_scene_object_unlink(
+ r_id_remap_data, sce, ob_iter, skip_indirect, is_indirect);
}
+ FOREACH_SCENE_OBJECT_END
}
else if (GS(r_id_remap_data->old_id->name) == ID_OB) {
/* ... a specific object from scene. */
Object *old_ob = (Object *)r_id_remap_data->old_id;
- Base *base = BKE_scene_base_find(sce, old_ob);
-
- if (base) {
- libblock_remap_data_preprocess_scene_base_unlink(
- r_id_remap_data, sce, base, skip_indirect, is_indirect);
- }
+ libblock_remap_data_preprocess_scene_object_unlink(
+ r_id_remap_data, sce, old_ob, skip_indirect, is_indirect);
}
}
break;
@@ -340,7 +346,7 @@ static void libblock_remap_data_postprocess_object_update(Main *bmain, Object *o
}
if (new_ob == NULL) { /* We need to remove NULL-ified groupobjects... */
for (Group *group = bmain->group.first; group; group = group->id.next) {
- BKE_group_object_unlink(group, NULL, NULL, NULL);
+ BKE_group_object_unlink(group, NULL);
}
}
else {
@@ -350,7 +356,7 @@ static void libblock_remap_data_postprocess_object_update(Main *bmain, Object *o
if (old_ob->type == OB_MBALL) {
for (Object *ob = bmain->object.first; ob; ob = ob->id.next) {
if (ob->type == OB_MBALL && BKE_mball_is_basis_for(ob, old_ob)) {
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
}
}
}
@@ -360,26 +366,21 @@ static void libblock_remap_data_postprocess_group_scene_unlink(Main *UNUSED(bmai
{
/* Note that here we assume no object has no base (i.e. all objects are assumed instanced
* in one scene...). */
- for (Base *base = sce->base.first; base; base = base->next) {
- if (base->flag & OB_FROMGROUP) {
- Object *ob = base->object;
-
- if (ob->flag & OB_FROMGROUP) {
- Group *grp = BKE_group_object_find(NULL, ob);
-
- /* Unlinked group (old_id) is still in bmain... */
- if (grp && (&grp->id == old_id || grp->id.us == 0)) {
- grp = BKE_group_object_find(grp, ob);
- }
- if (!grp) {
- ob->flag &= ~OB_FROMGROUP;
- }
+ FOREACH_SCENE_OBJECT(sce, ob)
+ {
+ if (ob->flag & OB_FROMGROUP) {
+ Group *grp = BKE_group_object_find(NULL, ob);
+
+ /* Unlinked group (old_id) is still in bmain... */
+ if (grp && (&grp->id == old_id || grp->id.us == 0)) {
+ grp = BKE_group_object_find(grp, ob);
}
- if (!(ob->flag & OB_FROMGROUP)) {
- base->flag &= ~OB_FROMGROUP;
+ if (!grp) {
+ ob->flag &= ~OB_FROMGROUP;
}
}
}
+ FOREACH_SCENE_OBJECT_END
}
static void libblock_remap_data_postprocess_obdata_relink(Main *UNUSED(bmain), Object *ob, ID *new_id)
@@ -594,8 +595,8 @@ void BKE_libblock_remap_locked(
libblock_remap_data_postprocess_nodetree_update(bmain, new_id);
BKE_main_lock(bmain);
- /* Full rebuild of DAG! */
- DAG_relations_tag_update(bmain);
+ /* Full rebuild of DEG! */
+ DEG_relations_tag_update(bmain);
}
void BKE_libblock_remap(Main *bmain, void *old_idv, void *new_idv, const short remap_flags)
@@ -747,6 +748,10 @@ void BKE_libblock_free_data(ID *id, const bool do_id_user)
MEM_freeN(id->properties);
}
+ if (id->override_static) {
+ BKE_override_static_free(&id->override_static);
+ }
+
/* XXX TODO remove animdata handling from each type's freeing func, and do it here, like for copy! */
}
@@ -811,6 +816,9 @@ void BKE_libblock_free_datablock(ID *id, const int UNUSED(flag))
case ID_SPK:
BKE_speaker_free((Speaker *)id);
break;
+ case ID_LP:
+ BKE_lightprobe_free((LightProbe *)id);
+ break;
case ID_SO:
BKE_sound_free((bSound *)id);
break;
@@ -857,6 +865,9 @@ void BKE_libblock_free_datablock(ID *id, const int UNUSED(flag))
case ID_CF:
BKE_cachefile_free((CacheFile *)id);
break;
+ case ID_WS:
+ BKE_workspace_free((WorkSpace *)id);
+ break;
}
}
@@ -895,7 +906,7 @@ void BKE_id_free_ex(Main *bmain, void *idv, int flag, const bool use_flag_from_i
const short type = GS(id->name);
if (bmain && (flag & LIB_ID_FREE_NO_DEG_TAG) == 0) {
- DAG_id_type_tag(bmain, type);
+ DEG_id_type_tag(bmain, type);
}
#ifdef WITH_PYTHON
@@ -958,7 +969,7 @@ void BKE_libblock_free_ex(Main *bmain, void *idv, const bool do_id_user, const b
short type = GS(id->name);
ListBase *lb = which_libbase(bmain, type);
- DAG_id_type_tag(bmain, type);
+ DEG_id_type_tag(bmain, type);
#ifdef WITH_PYTHON
#ifdef WITH_PYTHON_SAFETY
diff --git a/source/blender/blenkernel/intern/lightprobe.c b/source/blender/blenkernel/intern/lightprobe.c
new file mode 100644
index 00000000000..057b6aaaf65
--- /dev/null
+++ b/source/blender/blenkernel/intern/lightprobe.c
@@ -0,0 +1,101 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/blenkernel/intern/lightprobe.c
+ * \ingroup bke
+ */
+
+#include "DNA_object_types.h"
+#include "DNA_lightprobe_types.h"
+
+#include "BLI_math.h"
+#include "BLI_utildefines.h"
+
+#include "BKE_animsys.h"
+#include "BKE_global.h"
+#include "BKE_main.h"
+#include "BKE_lightprobe.h"
+
+void BKE_lightprobe_init(LightProbe *probe)
+{
+ BLI_assert(MEMCMP_STRUCT_OFS_IS_ZERO(probe, id));
+
+ probe->grid_resolution_x = probe->grid_resolution_y = probe->grid_resolution_z = 4;
+ probe->distinf = 2.5f;
+ probe->distpar = 2.5f;
+ probe->falloff = 0.2f;
+ probe->clipsta = 0.8f;
+ probe->clipend = 40.0f;
+ probe->vis_bias = 1.0f;
+ probe->vis_blur = 0.2f;
+ probe->intensity = 1.0f;
+ probe->data_draw_size = 1.0f;
+
+ probe->flag = LIGHTPROBE_FLAG_SHOW_INFLUENCE | LIGHTPROBE_FLAG_SHOW_DATA;
+}
+
+void *BKE_lightprobe_add(Main *bmain, const char *name)
+{
+ LightProbe *probe;
+
+ probe = BKE_libblock_alloc(bmain, ID_LP, name, 0);
+
+ BKE_lightprobe_init(probe);
+
+ return probe;
+}
+
+/**
+ * Only copy internal data of LightProbe ID from source to already allocated/initialized destination.
+ * You probably nerver want to use that directly, use id_copy or BKE_id_copy_ex for typical needs.
+ *
+ * WARNING! This function will not handle ID user count!
+ *
+ * \param flag Copying options (see BKE_library.h's LIB_ID_COPY_... flags for more).
+ */
+void BKE_lightprobe_copy_data(
+ Main *UNUSED(bmain), LightProbe *UNUSED(probe_dst), const LightProbe *UNUSED(probe_src), const int UNUSED(flag))
+{
+ /* Nothing to do here. */
+}
+
+LightProbe *BKE_lightprobe_copy(Main *bmain, const LightProbe *probe)
+{
+ LightProbe *probe_copy;
+ BKE_id_copy_ex(bmain, &probe->id, (ID **)&probe_copy, 0, false);
+ return probe_copy;
+}
+
+void BKE_lightprobe_make_local(Main *bmain, LightProbe *probe, const bool lib_local)
+{
+ BKE_id_make_local_generic(bmain, &probe->id, true, lib_local);
+}
+
+void BKE_lightprobe_free(LightProbe *probe)
+{
+ BKE_animdata_free((ID *)probe, false);
+}
diff --git a/source/blender/blenkernel/intern/linestyle.c b/source/blender/blenkernel/intern/linestyle.c
index 0465c5d54f7..2fc4c81cb0b 100644
--- a/source/blender/blenkernel/intern/linestyle.c
+++ b/source/blender/blenkernel/intern/linestyle.c
@@ -215,12 +215,13 @@ void BKE_linestyle_make_local(struct Main *bmain, FreestyleLineStyle *linestyle,
FreestyleLineStyle *BKE_linestyle_active_from_scene(Scene *scene)
{
- SceneRenderLayer *actsrl = BLI_findlink(&scene->r.layers, scene->r.actlay);
- FreestyleConfig *config = &actsrl->freestyleConfig;
- FreestyleLineSet *lineset = BKE_freestyle_lineset_get_active(config);
-
- if (lineset) {
- return lineset->linestyle;
+ ViewLayer *active_render_layer = BLI_findlink(&scene->view_layers, scene->active_view_layer);
+ if (active_render_layer) {
+ FreestyleConfig *config = &active_render_layer->freestyle_config;
+ FreestyleLineSet *lineset = BKE_freestyle_lineset_get_active(config);
+ if (lineset) {
+ return lineset->linestyle;
+ }
}
return NULL;
}
diff --git a/source/blender/blenkernel/intern/mask.c b/source/blender/blenkernel/intern/mask.c
index ff4e7f36018..3256c16e2f6 100644
--- a/source/blender/blenkernel/intern/mask.c
+++ b/source/blender/blenkernel/intern/mask.c
@@ -51,7 +51,6 @@
#include "BKE_animsys.h"
#include "BKE_curve.h"
-#include "BKE_depsgraph.h"
#include "BKE_global.h"
#include "BKE_library.h"
#include "BKE_main.h"
@@ -62,6 +61,8 @@
#include "BKE_movieclip.h"
#include "BKE_image.h"
+#include "DEG_depsgraph_build.h"
+
static struct {
ListBase splines;
struct GHash *id_hash;
@@ -818,7 +819,7 @@ Mask *BKE_mask_new(Main *bmain, const char *name)
mask->sfra = 1;
mask->efra = 100;
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
return mask;
}
@@ -1458,18 +1459,6 @@ void BKE_mask_evaluate_all_masks(Main *bmain, float ctime, const bool do_newfram
}
}
-void BKE_mask_update_scene(Main *bmain, Scene *scene)
-{
- Mask *mask;
-
- for (mask = bmain->mask.first; mask; mask = mask->id.next) {
- if (mask->id.recalc & ID_RECALC_ALL) {
- bool do_new_frame = (mask->id.recalc & ID_RECALC_DATA) != 0;
- BKE_mask_evaluate_all_masks(bmain, CFRA, do_new_frame);
- }
- }
-}
-
void BKE_mask_parent_init(MaskParent *parent)
{
parent->id_type = ID_MC;
diff --git a/source/blender/blenkernel/intern/mask_evaluate.c b/source/blender/blenkernel/intern/mask_evaluate.c
index 0d71cc548c7..f60d87f2464 100644
--- a/source/blender/blenkernel/intern/mask_evaluate.c
+++ b/source/blender/blenkernel/intern/mask_evaluate.c
@@ -42,10 +42,11 @@
#include "DNA_mask_types.h"
#include "BKE_curve.h"
-#include "BKE_depsgraph.h"
#include "BKE_global.h"
#include "BKE_mask.h"
+#include "DEG_depsgraph.h"
+
unsigned int BKE_mask_spline_resolution(MaskSpline *spline, int width, int height)
{
diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c
index 0dd7047a376..7235aa0aaf6 100644
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@ -58,7 +58,6 @@
#include "BKE_animsys.h"
#include "BKE_displist.h"
#include "BKE_global.h"
-#include "BKE_depsgraph.h"
#include "BKE_icons.h"
#include "BKE_image.h"
#include "BKE_library.h"
@@ -73,6 +72,8 @@
#include "BKE_editmesh.h"
#include "BKE_font.h"
+#include "DEG_depsgraph_build.h"
+
#include "GPU_material.h"
/* used in UI and render */
@@ -206,6 +207,8 @@ void BKE_material_init(Material *ma)
ma->mode2 = MA_CASTSHADOW;
ma->shade_flag = MA_APPROX_OCCLUSION;
ma->preview = NULL;
+
+ ma->alpha_threshold = 0.5f;
}
Material *BKE_material_add(Main *bmain, const char *name)
@@ -257,6 +260,8 @@ void BKE_material_copy_data(Main *bmain, Material *ma_dst, const Material *ma_sr
}
BLI_listbase_clear(&ma_dst->gpumaterial);
+
+ /* TODO Duplicate Engine Settings and set runtime to NULL */
}
Material *BKE_material_copy(Main *bmain, const Material *ma)
@@ -299,6 +304,8 @@ Material *BKE_material_localize(Material *ma)
man->nodetree = ntreeLocalize(ma->nodetree);
BLI_listbase_clear(&man->gpumaterial);
+
+ /* TODO Duplicate Engine Settings and set runtime to NULL */
return man;
}
@@ -454,7 +461,7 @@ void BKE_material_resize_id(Main *bmain, ID *id, short totcol, bool do_id_user)
}
*totcolp = totcol;
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
}
void BKE_material_append_id(Main *bmain, ID *id, Material *ma)
@@ -471,7 +478,7 @@ void BKE_material_append_id(Main *bmain, ID *id, Material *ma)
id_us_plus((ID *)ma);
test_all_objects_materials(bmain, id);
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
}
}
@@ -505,7 +512,7 @@ Material *BKE_material_pop_id(Main *bmain, ID *id, int index_i, bool update_data
material_data_index_remove_id(id, index);
}
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
}
}
@@ -532,7 +539,7 @@ void BKE_material_clear_id(Main *bmain, ID *id, bool update_data)
material_data_index_clear_id(id);
}
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
}
}
@@ -627,7 +634,7 @@ void BKE_material_resize_object(Main *bmain, Object *ob, const short totcol, boo
if (ob->totcol && ob->actcol == 0) ob->actcol = 1;
if (ob->actcol > ob->totcol) ob->actcol = ob->totcol;
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
}
void test_object_materials(Object *ob, ID *id)
@@ -967,7 +974,7 @@ static void do_init_render_material(Material *ma, int r_mode, float *amb)
if (needtang) ma->mode |= MA_NORMAP_TANG;
else ma->mode &= ~MA_NORMAP_TANG;
- if (ma->mode & (MA_VERTEXCOL | MA_VERTEXCOLP | MA_FACETEXTURE)) {
+ if (ma->mode & (MA_VERTEXCOL | MA_VERTEXCOLP)) {
needuv = 1;
if (r_mode & R_OSA) ma->texco |= TEXCO_OSA; /* for texfaces */
}
@@ -1149,61 +1156,6 @@ bool material_in_material(Material *parmat, Material *mat)
/* ****************** */
-/* Update drivers for materials in a nodetree */
-static void material_node_drivers_update(Scene *scene, bNodeTree *ntree, float ctime)
-{
- bNode *node;
-
- /* nodetree itself */
- if (ntree->adt && ntree->adt->drivers.first) {
- BKE_animsys_evaluate_animdata(scene, &ntree->id, ntree->adt, ctime, ADT_RECALC_DRIVERS);
- }
-
- /* nodes */
- for (node = ntree->nodes.first; node; node = node->next) {
- if (node->id) {
- if (GS(node->id->name) == ID_MA) {
- material_drivers_update(scene, (Material *)node->id, ctime);
- }
- else if (node->type == NODE_GROUP) {
- material_node_drivers_update(scene, (bNodeTree *)node->id, ctime);
- }
- }
- }
-}
-
-/* Calculate all drivers for materials
- * FIXME: this is really a terrible method which may result in some things being calculated
- * multiple times. However, without proper despgraph support for these things, we are forced
- * into this sort of thing...
- */
-void material_drivers_update(Scene *scene, Material *ma, float ctime)
-{
- //if (G.f & G_DEBUG)
- // printf("material_drivers_update(%s, %s)\n", scene->id.name, ma->id.name);
-
- /* Prevent infinite recursion by checking (and tagging the material) as having been visited already
- * (see BKE_scene_update_tagged()). This assumes ma->id.tag & LIB_TAG_DOIT isn't set by anything else
- * in the meantime... [#32017]
- */
- if (ma->id.tag & LIB_TAG_DOIT)
- return;
-
- ma->id.tag |= LIB_TAG_DOIT;
-
- /* material itself */
- if (ma->adt && ma->adt->drivers.first) {
- BKE_animsys_evaluate_animdata(scene, &ma->id, ma->adt, ctime, ADT_RECALC_DRIVERS);
- }
-
- /* nodes */
- if (ma->nodetree) {
- material_node_drivers_update(scene, ma->nodetree, ctime);
- }
-
- ma->id.tag &= ~LIB_TAG_DOIT;
-}
-
bool BKE_object_material_slot_remove(Object *ob)
{
Material *mao, ***matarar;
@@ -1328,6 +1280,14 @@ void BKE_texpaint_slot_refresh_cache(Scene *scene, Material *ma)
bool use_nodes = BKE_scene_use_new_shading_nodes(scene);
bool is_bi = BKE_scene_uses_blender_internal(scene) || BKE_scene_uses_blender_game(scene);
+
+ /* XXX, for 2.8 testing & development its useful to have non Cycles/BI engines use material nodes
+ * In the future we may have some way to check this which each engine can define.
+ * For now use material slots for Clay/Eevee.
+ * - Campbell */
+ if (!(use_nodes || is_bi)) {
+ is_bi = true;
+ }
if (!ma)
return;
@@ -1726,6 +1686,7 @@ void copy_matcopybuf(Material *ma)
matcopybuf.nodetree = ntreeCopyTree_ex(ma->nodetree, G.main, false);
matcopybuf.preview = NULL;
BLI_listbase_clear(&matcopybuf.gpumaterial);
+ /* TODO Duplicate Engine Settings and set runtime to NULL */
matcopied = 1;
}
@@ -1781,501 +1742,40 @@ void paste_matcopybuf(Material *ma)
ma->nodetree = ntreeCopyTree_ex(matcopybuf.nodetree, G.main, false);
}
-
-/*********************** texface to material convert functions **********************/
-/* encode all the TF information into a single int */
-static int encode_tfaceflag(MTFace *tf, int convertall)
+struct Image *BKE_object_material_edit_image_get(Object *ob, short mat_nr)
{
- /* calculate the flag */
- int flag = tf->mode;
-
- /* options that change the material offline render */
- if (!convertall) {
- flag &= ~TF_OBCOL;
- }
-
- /* clean flags that are not being converted */
- flag &= ~TF_TEX;
- flag &= ~TF_SHAREDVERT;
- flag &= ~TF_SHAREDCOL;
- flag &= ~TF_CONVERTED;
-
- /* light tface flag is ignored in GLSL mode */
- flag &= ~TF_LIGHT;
-
- /* 15 is how big the flag can be - hardcoded here and in decode_tfaceflag() */
- flag |= tf->transp << 15;
-
- /* increase 1 so flag 0 is different than no flag yet */
- return flag + 1;
+ Material *ma = give_current_material(ob, mat_nr + 1);
+ return ma ? ma->edit_image : NULL;
}
-/* set the material options based in the tface flag */
-static void decode_tfaceflag(Material *ma, int flag, int convertall)
+struct Image **BKE_object_material_edit_image_get_array(Object *ob)
{
- int alphablend;
- GameSettings *game = &ma->game;
-
- /* flag is shifted in 1 to make 0 != no flag yet (see encode_tfaceflag) */
- flag -= 1;
-
- alphablend = flag >> 15; /* encoded in the encode_tfaceflag function */
- (*game).flag = 0;
-
- /* General Material Options */
- if ((flag & TF_DYNAMIC) == 0) (*game).flag |= GEMAT_NOPHYSICS;
-
- /* Material Offline Rendering Properties */
- if (convertall) {
- if (flag & TF_OBCOL) ma->shade_flag |= MA_OBCOLOR;
+ Image **image_array = MEM_mallocN(sizeof(Material *) * ob->totcol, __func__);
+ for (int i = 0; i < ob->totcol; i++) {
+ image_array[i] = BKE_object_material_edit_image_get(ob, i);
}
-
- /* Special Face Properties */
- if ((flag & TF_TWOSIDE) == 0) (*game).flag |= GEMAT_BACKCULL;
- if (flag & TF_INVISIBLE) (*game).flag |= GEMAT_INVISIBLE;
- if (flag & TF_BMFONT) (*game).flag |= GEMAT_TEXT;
-
- /* Face Orientation */
- if (flag & TF_BILLBOARD) (*game).face_orientation |= GEMAT_HALO;
- else if (flag & TF_BILLBOARD2) (*game).face_orientation |= GEMAT_BILLBOARD;
- else if (flag & TF_SHADOW) (*game).face_orientation |= GEMAT_SHADOW;
-
- /* Alpha Blend */
- if (flag & TF_ALPHASORT && ELEM(alphablend, TF_ALPHA, TF_ADD)) (*game).alpha_blend = GEMAT_ALPHA_SORT;
- else if (alphablend & TF_ALPHA) (*game).alpha_blend = GEMAT_ALPHA;
- else if (alphablend & TF_ADD) (*game).alpha_blend = GEMAT_ADD;
- else if (alphablend & TF_CLIP) (*game).alpha_blend = GEMAT_CLIP;
-}
-
-/* boolean check to see if the mesh needs a material */
-static int check_tfaceneedmaterial(int flag)
-{
- /* check if the flags we have are not deprecated != than default material options
- * also if only flags are visible and collision see if all objects using this mesh have this option in physics */
-
- /* flag is shifted in 1 to make 0 != no flag yet (see encode_tfaceflag) */
- flag -= 1;
-
- /* deprecated flags */
- flag &= ~TF_OBCOL;
- flag &= ~TF_SHAREDVERT;
- flag &= ~TF_SHAREDCOL;
-
- /* light tface flag is ignored in GLSL mode */
- flag &= ~TF_LIGHT;
-
- /* automatic detected if tex image has alpha */
- flag &= ~(TF_ALPHA << 15);
- /* automatic detected if using texture */
- flag &= ~TF_TEX;
-
- /* settings for the default NoMaterial */
- if (flag == TF_DYNAMIC)
- return 0;
-
- else
- return 1;
-}
-
-/* return number of digits of an integer */
-/* XXX to be optmized or replaced by an equivalent blender internal function */
-static int integer_getdigits(int number)
-{
- int i = 0;
- if (number == 0) return 1;
-
- while (number != 0) {
- number = (int)(number / 10);
- i++;
- }
- return i;
-}
-
-static void calculate_tface_materialname(char *matname, char *newname, int flag)
-{
- /* if flag has only light and collision and material matches those values
- * you can do strcpy(name, mat_name);
- * otherwise do: */
- int digits = integer_getdigits(flag);
- /* clamp the old name, remove the MA prefix and add the .TF.flag suffix
- * e.g. matname = "MALoooooooooooooongName"; newname = "Loooooooooooooon.TF.2" */
- BLI_snprintf(newname, MAX_ID_NAME, "%.*s.TF.%0*d", MAX_ID_NAME - (digits + 5), matname, digits, flag);
-}
-
-/* returns -1 if no match */
-static short mesh_getmaterialnumber(Mesh *me, Material *ma)
-{
- short a;
-
- for (a = 0; a < me->totcol; a++) {
- if (me->mat[a] == ma) {
- return a;
- }
- }
-
- return -1;
-}
-
-/* append material */
-static short mesh_addmaterial(Mesh *me, Material *ma)
-{
- BKE_material_append_id(G.main, &me->id, NULL);
- me->mat[me->totcol - 1] = ma;
-
- id_us_plus(&ma->id);
-
- return me->totcol - 1;
+ return image_array;
}
-static void set_facetexture_flags(Material *ma, Image *image)
+bool BKE_object_material_edit_image_set(Object *ob, short mat_nr, Image *image)
{
- if (image) {
- ma->mode |= MA_FACETEXTURE;
- /* we could check if the texture has alpha, but then more meshes sharing the same
- * material may need it. Let's make it simple. */
- if (BKE_image_has_alpha(image))
- ma->mode |= MA_FACETEXTURE_ALPHA;
- }
-}
-
-/* returns material number */
-static short convert_tfacenomaterial(Main *main, Mesh *me, MTFace *tf, int flag)
-{
- Material *ma;
- char idname[MAX_ID_NAME];
- short mat_nr = -1;
-
- /* new material, the name uses the flag*/
- BLI_snprintf(idname, sizeof(idname), "MAMaterial.TF.%0*d", integer_getdigits(flag), flag);
-
- if ((ma = BLI_findstring(&main->mat, idname + 2, offsetof(ID, name) + 2))) {
- mat_nr = mesh_getmaterialnumber(me, ma);
- /* assign the material to the mesh */
- if (mat_nr == -1) mat_nr = mesh_addmaterial(me, ma);
-
- /* if needed set "Face Textures [Alpha]" Material options */
- set_facetexture_flags(ma, tf->tpage);
- }
- /* create a new material */
- else {
- ma = BKE_material_add(main, idname + 2);
-
- if (ma) {
- printf("TexFace Convert: Material \"%s\" created.\n", idname + 2);
- mat_nr = mesh_addmaterial(me, ma);
-
- /* if needed set "Face Textures [Alpha]" Material options */
- set_facetexture_flags(ma, tf->tpage);
-
- decode_tfaceflag(ma, flag, 1);
- /* the final decoding will happen after, outside the main loop
- * for now store the flag into the material and change light/tex/collision
- * store the flag as a negative number */
- ma->game.flag = -flag;
- id_us_min((ID *)ma);
- }
- else {
- printf("Error: Unable to create Material \"%s\" for Mesh \"%s\".", idname + 2, me->id.name + 2);
- }
- }
-
- /* set as converted, no need to go bad to this face */
- tf->mode |= TF_CONVERTED;
- return mat_nr;
-}
-
-/* Function to fully convert materials */
-static void convert_tfacematerial(Main *main, Material *ma)
-{
- Mesh *me;
- Material *mat_new;
- MFace *mf;
- MTFace *tf;
- int flag, index;
- int a;
- short mat_nr;
- CustomDataLayer *cdl;
- char idname[MAX_ID_NAME];
-
- for (me = main->mesh.first; me; me = me->id.next) {
- /* check if this mesh uses this material */
- for (a = 0; a < me->totcol; a++)
- if (me->mat[a] == ma) break;
-
- /* no material found */
- if (a == me->totcol) continue;
-
- /* get the active tface layer */
- index = CustomData_get_active_layer_index(&me->fdata, CD_MTFACE);
- cdl = (index == -1) ? NULL : &me->fdata.layers[index];
- if (!cdl) continue;
-
- /* loop over all the faces and stop at the ones that use the material*/
- for (a = 0, mf = me->mface; a < me->totface; a++, mf++) {
- if (me->mat[mf->mat_nr] != ma) continue;
-
- /* texface data for this face */
- tf = ((MTFace *)cdl->data) + a;
- flag = encode_tfaceflag(tf, 1);
-
- /* the name of the new material */
- calculate_tface_materialname(ma->id.name, (char *)&idname, flag);
-
- if ((mat_new = BLI_findstring(&main->mat, idname + 2, offsetof(ID, name) + 2))) {
- /* material already existent, see if the mesh has it */
- mat_nr = mesh_getmaterialnumber(me, mat_new);
- /* material is not in the mesh, add it */
- if (mat_nr == -1) mat_nr = mesh_addmaterial(me, mat_new);
- }
- /* create a new material */
- else {
- mat_new = BKE_material_copy(main, ma);
- if (mat_new) {
- /* rename the material*/
- BLI_strncpy(mat_new->id.name, idname, sizeof(mat_new->id.name));
- id_us_min((ID *)mat_new);
-
- mat_nr = mesh_addmaterial(me, mat_new);
- decode_tfaceflag(mat_new, flag, 1);
- }
- else {
- printf("Error: Unable to create Material \"%s\" for Mesh \"%s.", idname + 2, me->id.name + 2);
- mat_nr = mf->mat_nr;
- continue;
- }
- }
-
- /* if the material has a texture but no texture channel
- * set "Face Textures [Alpha]" Material options
- * actually we need to run it always, because of old behavior
- * of using face texture if any texture channel was present (multitex) */
- //if ((!mat_new->mtex[0]) && (!mat_new->mtex[0]->tex))
- set_facetexture_flags(mat_new, tf->tpage);
-
- /* set the material number to the face*/
- mf->mat_nr = mat_nr;
- }
- /* remove material from mesh */
- for (a = 0; a < me->totcol; ) {
- if (me->mat[a] == ma) {
- BKE_material_pop_id(main, &me->id, a, true);
- }
- else {
- a++;
- }
- }
+ Material *ma = give_current_material(ob, mat_nr + 1);
+ if (ma) {
+ /* both may be NULL */
+ id_us_min((ID *)ma->edit_image);
+ ma->edit_image = image;
+ id_us_plus((ID *)ma->edit_image);
+ return true;
}
+ return false;
}
-
-#define MAT_BGE_DISPUTED -99999
-
-int do_version_tface(Main *main)
+void BKE_material_eval(const struct EvaluationContext *UNUSED(eval_ctx), Material *material)
{
- Mesh *me;
- Material *ma;
- MFace *mf;
- MTFace *tf;
- CustomDataLayer *cdl;
- int a;
- int flag;
- int index;
-
- /* Operator in help menu has been removed for 2.7x */
- int fileload = 1;
-
- /* sometimes mesh has no materials but will need a new one. In those
- * cases we need to ignore the mf->mat_nr and only look at the face
- * mode because it can be zero as uninitialized or the 1st created material
- */
- int nomaterialslots;
-
- /* alert to user to check the console */
- int nowarning = 1;
-
- /* mark all the materials to conversion with a flag
- * if there is tface create a complete flag for that storing in flag
- * if there is tface and flag > 0: creates a new flag based on this face
- * if flags are different set flag to -1
- */
-
- /* 1st part: marking mesh materials to update */
- for (me = main->mesh.first; me; me = me->id.next) {
- if (ID_IS_LINKED(me)) continue;
-
- /* get the active tface layer */
- index = CustomData_get_active_layer_index(&me->fdata, CD_MTFACE);
- cdl = (index == -1) ? NULL : &me->fdata.layers[index];
- if (!cdl) continue;
-
- nomaterialslots = (me->totcol == 0 ? 1 : 0);
-
- /* loop over all the faces*/
- for (a = 0, mf = me->mface; a < me->totface; a++, mf++) {
- /* texface data for this face */
- tf = ((MTFace *)cdl->data) + a;
-
- /* conversion should happen only once */
- if (fileload)
- tf->mode &= ~TF_CONVERTED;
- else {
- if ((tf->mode & TF_CONVERTED)) continue;
- else tf->mode |= TF_CONVERTED;
- }
-
- /* no material slots */
- if (nomaterialslots) {
- flag = encode_tfaceflag(tf, 1);
-
- /* create/find a new material and assign to the face */
- if (check_tfaceneedmaterial(flag)) {
- mf->mat_nr = convert_tfacenomaterial(main, me, tf, flag);
- }
- /* else mark them as no-material to be reverted to 0 later */
- else {
- mf->mat_nr = -1;
- }
- }
- else if (mf->mat_nr < me->totcol) {
- ma = me->mat[mf->mat_nr];
-
- /* no material create one if necessary */
- if (!ma) {
- /* find a new material and assign to the face */
- flag = encode_tfaceflag(tf, 1);
-
- /* create/find a new material and assign to the face */
- if (check_tfaceneedmaterial(flag))
- mf->mat_nr = convert_tfacenomaterial(main, me, tf, flag);
-
- continue;
- }
-
- /* we can't read from this if it comes from a library,
- * at doversion time: direct_link might not have happened on it,
- * so ma->mtex is not pointing to valid memory yet.
- * later we could, but it's better not */
- else if (ID_IS_LINKED(ma))
- continue;
-
- /* material already marked as disputed */
- else if (ma->game.flag == MAT_BGE_DISPUTED)
- continue;
-
- /* found a material */
- else {
- flag = encode_tfaceflag(tf, ((fileload) ? 0 : 1));
-
- /* first time changing this material */
- if (ma->game.flag == 0)
- ma->game.flag = -flag;
-
- /* mark material as disputed */
- else if (ma->game.flag != -flag) {
- ma->game.flag = MAT_BGE_DISPUTED;
- continue;
- }
-
- /* material ok so far */
- else {
- ma->game.flag = -flag;
-
- /* some people uses multitexture with TexFace by creating a texture
- * channel which not necessarily the tf->tpage image. But the game engine
- * was enabling it. Now it's required to set "Face Texture [Alpha] in the
- * material settings. */
- if (!fileload)
- set_facetexture_flags(ma, tf->tpage);
- }
- }
- }
- else {
- continue;
- }
- }
-
- /* if we didn't have material slot and now we do, we need to
- * make sure the materials are correct */
- if (nomaterialslots) {
- if (me->totcol > 0) {
- for (a = 0, mf = me->mface; a < me->totface; a++, mf++) {
- if (mf->mat_nr == -1) {
- /* texface data for this face */
- tf = ((MTFace *)cdl->data) + a;
- mf->mat_nr = convert_tfacenomaterial(main, me, tf, encode_tfaceflag(tf, 1));
- }
- }
- }
- else {
- for (a = 0, mf = me->mface; a < me->totface; a++, mf++) {
- mf->mat_nr = 0;
- }
- }
- }
-
+ if (G.debug & G_DEBUG_DEPSGRAPH) {
+ printf("%s on %s (%p)\n", __func__, material->id.name, material);
}
-
- /* 2nd part - conversion */
- /* skip library files */
-
- /* we shouldn't loop through the materials created in the loop. make the loop stop at its original length) */
- for (ma = main->mat.first, a = 0; ma; ma = ma->id.next, a++) {
- if (ID_IS_LINKED(ma)) continue;
-
- /* disputed material */
- if (ma->game.flag == MAT_BGE_DISPUTED) {
- ma->game.flag = 0;
- if (fileload) {
- printf("Warning: material \"%s\" skipped.\n", ma->id.name + 2);
- nowarning = 0;
- }
- else {
- convert_tfacematerial(main, ma);
- }
- continue;
- }
-
- /* no conflicts in this material - 90% of cases
- * convert from tface system to material */
- else if (ma->game.flag < 0) {
- decode_tfaceflag(ma, -(ma->game.flag), 1);
-
- /* material is good make sure all faces using
- * this material are set to converted */
- if (fileload) {
- for (me = main->mesh.first; me; me = me->id.next) {
- /* check if this mesh uses this material */
- for (a = 0; a < me->totcol; a++)
- if (me->mat[a] == ma) break;
-
- /* no material found */
- if (a == me->totcol) continue;
-
- /* get the active tface layer */
- index = CustomData_get_active_layer_index(&me->fdata, CD_MTFACE);
- cdl = (index == -1) ? NULL : &me->fdata.layers[index];
- if (!cdl) continue;
-
- /* loop over all the faces and stop at the ones that use the material*/
- for (a = 0, mf = me->mface; a < me->totface; a++, mf++) {
- if (me->mat[mf->mat_nr] == ma) {
- /* texface data for this face */
- tf = ((MTFace *)cdl->data) + a;
- tf->mode |= TF_CONVERTED;
- }
- }
- }
- }
- }
- /* material is not used by faces with texface
- * set the default flag - do it only once */
- else {
- if (fileload) {
- ma->game.flag = GEMAT_BACKCULL;
- }
- }
+ if ((BLI_listbase_is_empty(&material->gpumaterial) == false)) {
+ GPU_material_uniform_buffer_tag_dirty(&material->gpumaterial);
}
-
- return nowarning;
}
-
diff --git a/source/blender/blenkernel/intern/mball.c b/source/blender/blenkernel/intern/mball.c
index dfc49c996b1..5a0ac86823f 100644
--- a/source/blender/blenkernel/intern/mball.c
+++ b/source/blender/blenkernel/intern/mball.c
@@ -57,7 +57,6 @@
#include "BKE_animsys.h"
#include "BKE_curve.h"
-#include "BKE_depsgraph.h"
#include "BKE_scene.h"
#include "BKE_library.h"
#include "BKE_library_query.h"
@@ -67,6 +66,8 @@
#include "BKE_object.h"
#include "BKE_material.h"
+//#include "DEG_depsgraph.h"
+
/* Functions */
/** Free (or release) any data used by this mball (does not free the mball itself). */
@@ -74,6 +75,8 @@ void BKE_mball_free(MetaBall *mb)
{
BKE_animdata_free((ID *)mb, false);
+ BKE_mball_batch_cache_free(mb);
+
MEM_SAFE_FREE(mb->mat);
BLI_freelistN(&mb->elems);
@@ -119,6 +122,7 @@ void BKE_mball_copy_data(Main *UNUSED(bmain), MetaBall *mb_dst, const MetaBall *
mb_dst->editelems = NULL;
mb_dst->lastelem = NULL;
+ mb_dst->batch_cache = NULL;
}
MetaBall *BKE_mball_copy(Main *bmain, const MetaBall *mb)
@@ -325,7 +329,7 @@ void BKE_mball_properties_copy(Scene *scene, Object *active_object)
int basisnr, obnr;
char basisname[MAX_ID_NAME], obname[MAX_ID_NAME];
SceneBaseIter iter;
- EvaluationContext *eval_ctx = G.main->eval_ctx;
+ struct EvaluationContext *eval_ctx = G.main->eval_ctx;
BLI_split_name_num(basisname, &basisnr, active_object->id.name + 2, '.');
@@ -362,27 +366,25 @@ void BKE_mball_properties_copy(Scene *scene, Object *active_object)
*/
Object *BKE_mball_basis_find(Scene *scene, Object *basis)
{
- Scene *sce_iter = scene;
- Base *base;
- Object *ob, *bob = basis;
+ Object *bob = basis;
int basisnr, obnr;
char basisname[MAX_ID_NAME], obname[MAX_ID_NAME];
- SceneBaseIter iter;
- EvaluationContext *eval_ctx = G.main->eval_ctx;
BLI_split_name_num(basisname, &basisnr, basis->id.name + 2, '.');
- BKE_scene_base_iter_next(eval_ctx, &iter, &sce_iter, 0, NULL, NULL);
- while (BKE_scene_base_iter_next(eval_ctx, &iter, &sce_iter, 1, &base, &ob)) {
- if ((ob->type == OB_MBALL) && !(base->flag & OB_FROMDUPLI)) {
- if (ob != bob) {
- BLI_split_name_num(obname, &obnr, ob->id.name + 2, '.');
-
- /* object ob has to be in same "group" ... it means, that it has to have same base of its name */
- if (STREQ(obname, basisname)) {
- if (obnr < basisnr) {
- basis = ob;
- basisnr = obnr;
+ for (ViewLayer *view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ Object *ob = base->object;
+ if ((ob->type == OB_MBALL) && !(base->flag & OB_FROMDUPLI)) {
+ if (ob != bob) {
+ BLI_split_name_num(obname, &obnr, ob->id.name + 2, '.');
+
+ /* object ob has to be in same "group" ... it means, that it has to have same base of its name */
+ if (STREQ(obname, basisname)) {
+ if (obnr < basisnr) {
+ basis = ob;
+ basisnr = obnr;
+ }
}
}
}
@@ -539,7 +541,51 @@ void BKE_mball_select_swap(struct MetaBall *mb)
/* **** Depsgraph evaluation **** */
-void BKE_mball_eval_geometry(EvaluationContext *UNUSED(eval_ctx),
+void BKE_mball_eval_geometry(const struct EvaluationContext *UNUSED(eval_ctx),
MetaBall *UNUSED(mball))
{
}
+
+/* Draw Engine */
+
+/* use for draw-manager only. */
+void BKE_mball_element_calc_display_m3x4(float r_scale_xform[3][4],
+ const float obmat[4][4],
+ const float local_pos[3])
+{
+ float world_pos[3], scamat[3][3];
+ mul_v3_m4v3(world_pos, obmat, local_pos);
+ copy_m3_m4(scamat, obmat);
+ {
+ /* Get the normalized inverse matrix to extract only
+ * the scale of Scamat */
+ float iscamat[3][3];
+ invert_m3_m3(iscamat, scamat);
+ normalize_m3(iscamat);
+ mul_m3_m3_post(scamat, iscamat);
+ }
+
+ copy_v3_v3(r_scale_xform[0], scamat[0]);
+ copy_v3_v3(r_scale_xform[1], scamat[1]);
+ copy_v3_v3(r_scale_xform[2], scamat[2]);
+
+ r_scale_xform[0][3] = world_pos[0];
+ r_scale_xform[1][3] = world_pos[1];
+ r_scale_xform[2][3] = world_pos[2];
+}
+
+void (*BKE_mball_batch_cache_dirty_cb)(MetaBall *mb, int mode) = NULL;
+void (*BKE_mball_batch_cache_free_cb)(MetaBall *mb) = NULL;
+
+void BKE_mball_batch_cache_dirty(MetaBall *mb, int mode)
+{
+ if (mb->batch_cache) {
+ BKE_mball_batch_cache_dirty_cb(mb, mode);
+ }
+}
+void BKE_mball_batch_cache_free(MetaBall *mb)
+{
+ if (mb->batch_cache) {
+ BKE_mball_batch_cache_free_cb(mb);
+ }
+}
diff --git a/source/blender/blenkernel/intern/mball_tessellate.c b/source/blender/blenkernel/intern/mball_tessellate.c
index a1ae3a7f572..5e63b5c1607 100644
--- a/source/blender/blenkernel/intern/mball_tessellate.c
+++ b/source/blender/blenkernel/intern/mball_tessellate.c
@@ -48,11 +48,12 @@
#include "BKE_global.h"
-#include "BKE_depsgraph.h"
#include "BKE_scene.h"
#include "BKE_displist.h"
#include "BKE_mball_tessellate.h" /* own include */
+#include "DEG_depsgraph.h"
+
#include "BLI_strict_flags.h"
/* experimental (faster) normal calculation */
@@ -1055,7 +1056,7 @@ static void polygonize(PROCESS *process)
* Iterates over ALL objects in the scene and all of its sets, including
* making all duplis(not only metas). Copies metas to mainb array.
* Computes bounding boxes for building BVH. */
-static void init_meta(EvaluationContext *eval_ctx, PROCESS *process, Scene *scene, Object *ob)
+static void init_meta(const EvaluationContext *eval_ctx, PROCESS *process, Scene *scene, Object *ob)
{
Scene *sce_iter = scene;
Base *base;
@@ -1080,7 +1081,7 @@ static void init_meta(EvaluationContext *eval_ctx, PROCESS *process, Scene *scen
zero_size = 0;
ml = NULL;
- if (bob == ob && (base->flag & OB_FROMDUPLI) == 0) {
+ if (bob == ob && (base->flag_legacy & OB_FROMDUPLI) == 0) {
mb = ob->data;
if (mb->editelems) ml = mb->editelems->first;
@@ -1232,7 +1233,7 @@ static void init_meta(EvaluationContext *eval_ctx, PROCESS *process, Scene *scen
}
}
-void BKE_mball_polygonize(EvaluationContext *eval_ctx, Scene *scene, Object *ob, ListBase *dispbase)
+void BKE_mball_polygonize(const EvaluationContext *eval_ctx, Scene *scene, Object *ob, ListBase *dispbase)
{
MetaBall *mb;
DispList *dl;
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c
index bf937267b83..3217c234718 100644
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@ -59,7 +59,6 @@
#include "BKE_multires.h"
#include "BKE_key.h"
#include "BKE_mball.h"
-#include "BKE_depsgraph.h"
/* these 2 are only used by conversion functions */
#include "BKE_curve.h"
/* -- */
@@ -127,7 +126,7 @@ static int customdata_compare(CustomData *c1, CustomData *c2, Mesh *m1, Mesh *m2
for (i = 0; i < c1->totlayer; i++) {
if (ELEM(c1->layers[i].type, CD_MVERT, CD_MEDGE, CD_MPOLY,
- CD_MLOOPUV, CD_MLOOPCOL, CD_MTEXPOLY, CD_MDEFORMVERT))
+ CD_MLOOPUV, CD_MLOOPCOL, CD_MDEFORMVERT))
{
i1++;
}
@@ -135,7 +134,7 @@ static int customdata_compare(CustomData *c1, CustomData *c2, Mesh *m1, Mesh *m2
for (i = 0; i < c2->totlayer; i++) {
if (ELEM(c2->layers[i].type, CD_MVERT, CD_MEDGE, CD_MPOLY,
- CD_MLOOPUV, CD_MLOOPCOL, CD_MTEXPOLY, CD_MDEFORMVERT))
+ CD_MLOOPUV, CD_MLOOPCOL, CD_MDEFORMVERT))
{
i2++;
}
@@ -149,14 +148,14 @@ static int customdata_compare(CustomData *c1, CustomData *c2, Mesh *m1, Mesh *m2
i1 = 0; i2 = 0;
for (i = 0; i < tot; i++) {
while (i1 < c1->totlayer && !ELEM(l1->type, CD_MVERT, CD_MEDGE, CD_MPOLY,
- CD_MLOOPUV, CD_MLOOPCOL, CD_MTEXPOLY, CD_MDEFORMVERT))
+ CD_MLOOPUV, CD_MLOOPCOL, CD_MDEFORMVERT))
{
i1++;
l1++;
}
while (i2 < c2->totlayer && !ELEM(l2->type, CD_MVERT, CD_MEDGE, CD_MPOLY,
- CD_MLOOPUV, CD_MLOOPCOL, CD_MTEXPOLY, CD_MDEFORMVERT))
+ CD_MLOOPUV, CD_MLOOPCOL, CD_MDEFORMVERT))
{
i2++;
l2++;
@@ -324,7 +323,7 @@ static void mesh_ensure_tessellation_customdata(Mesh *me)
* Callers could also check but safer to do here - campbell */
}
else {
- const int tottex_original = CustomData_number_of_layers(&me->pdata, CD_MTEXPOLY);
+ const int tottex_original = CustomData_number_of_layers(&me->ldata, CD_MLOOPUV);
const int totcol_original = CustomData_number_of_layers(&me->ldata, CD_MLOOPCOL);
const int tottex_tessface = CustomData_number_of_layers(&me->fdata, CD_MTFACE);
@@ -335,7 +334,7 @@ static void mesh_ensure_tessellation_customdata(Mesh *me)
{
BKE_mesh_tessface_clear(me);
- CustomData_from_bmeshpoly(&me->fdata, &me->pdata, &me->ldata, me->totface);
+ CustomData_from_bmeshpoly(&me->fdata, &me->ldata, me->totface);
/* TODO - add some --debug-mesh option */
if (G.debug & G_DEBUG) {
@@ -344,7 +343,7 @@ static void mesh_ensure_tessellation_customdata(Mesh *me)
* and check if there was any data to begin with, for now just print the warning with
* some info to help troubleshoot whats going on - campbell */
printf("%s: warning! Tessellation uvs or vcol data got out of sync, "
- "had to reset!\n CD_MTFACE: %d != CD_MTEXPOLY: %d || CD_MCOL: %d != CD_MLOOPCOL: %d\n",
+ "had to reset!\n CD_MTFACE: %d != CD_MLOOPUV: %d || CD_MCOL: %d != CD_MLOOPCOL: %d\n",
__func__, tottex_tessface, tottex_original, totcol_tessface, totcol_original);
}
}
@@ -388,6 +387,48 @@ void BKE_mesh_ensure_skin_customdata(Mesh *me)
}
}
+bool BKE_mesh_ensure_facemap_customdata(struct Mesh *me)
+{
+ BMesh *bm = me->edit_btmesh ? me->edit_btmesh->bm : NULL;
+ bool changed = false;
+ if (bm) {
+ if (!CustomData_has_layer(&bm->pdata, CD_FACEMAP)) {
+ BM_data_layer_add(bm, &bm->pdata, CD_FACEMAP);
+ changed = true;
+ }
+ }
+ else {
+ if (!CustomData_has_layer(&me->pdata, CD_FACEMAP)) {
+ CustomData_add_layer(&me->pdata,
+ CD_FACEMAP,
+ CD_DEFAULT,
+ NULL,
+ me->totpoly);
+ changed = true;
+ }
+ }
+ return changed;
+}
+
+bool BKE_mesh_clear_facemap_customdata(struct Mesh *me)
+{
+ BMesh *bm = me->edit_btmesh ? me->edit_btmesh->bm : NULL;
+ bool changed = false;
+ if (bm) {
+ if (CustomData_has_layer(&bm->pdata, CD_FACEMAP)) {
+ BM_data_layer_free(bm, &bm->pdata, CD_FACEMAP);
+ changed = true;
+ }
+ }
+ else {
+ if (CustomData_has_layer(&me->pdata, CD_FACEMAP)) {
+ CustomData_free_layers(&me->pdata, CD_FACEMAP, me->totpoly);
+ changed = true;
+ }
+ }
+ return changed;
+}
+
/* this ensures grouped customdata (e.g. mtexpoly and mloopuv and mtface, or
* mloopcol and mcol) have the same relative active/render/clone/mask indices.
*
@@ -396,14 +437,11 @@ void BKE_mesh_ensure_skin_customdata(Mesh *me)
* versions of the mesh. - campbell*/
static void mesh_update_linked_customdata(Mesh *me, const bool do_ensure_tess_cd)
{
- if (me->edit_btmesh)
- BKE_editmesh_update_linked_customdata(me->edit_btmesh);
-
if (do_ensure_tess_cd) {
mesh_ensure_tessellation_customdata(me);
}
- CustomData_bmesh_update_active_layers(&me->fdata, &me->pdata, &me->ldata);
+ CustomData_bmesh_update_active_layers(&me->fdata, &me->ldata);
}
void BKE_mesh_update_customdata_pointers(Mesh *me, const bool do_ensure_tess_cd)
@@ -422,7 +460,6 @@ void BKE_mesh_update_customdata_pointers(Mesh *me, const bool do_ensure_tess_cd)
me->mpoly = CustomData_get_layer(&me->pdata, CD_MPOLY);
me->mloop = CustomData_get_layer(&me->ldata, CD_MLOOP);
- me->mtpoly = CustomData_get_layer(&me->pdata, CD_MTEXPOLY);
me->mloopcol = CustomData_get_layer(&me->ldata, CD_MLOOPCOL);
me->mloopuv = CustomData_get_layer(&me->ldata, CD_MLOOPUV);
}
@@ -442,6 +479,8 @@ void BKE_mesh_free(Mesh *me)
{
BKE_animdata_free(&me->id, false);
+ BKE_mesh_batch_cache_free(me);
+
CustomData_free(&me->vdata, me->totvert);
CustomData_free(&me->edata, me->totedge);
CustomData_free(&me->fdata, me->totface);
@@ -529,6 +568,7 @@ void BKE_mesh_copy_data(Main *bmain, Mesh *me_dst, const Mesh *me_src, const int
BKE_mesh_update_customdata_pointers(me_dst, do_tessface);
me_dst->edit_btmesh = NULL;
+ me_dst->batch_cache = NULL;
me_dst->mselect = MEM_dupallocN(me_dst->mselect);
me_dst->bb = MEM_dupallocN(me_dst->bb);
@@ -586,33 +626,44 @@ bool BKE_mesh_uv_cdlayer_rename_index(Mesh *me, const int poly_index, const int
ldata = &me->ldata;
fdata = &me->fdata;
}
- cdlp = &pdata->layers[poly_index];
+
cdlu = &ldata->layers[loop_index];
- cdlf = fdata && do_tessface ? &fdata->layers[face_index] : NULL;
+ cdlp = (poly_index != -1) ? &pdata->layers[poly_index] : NULL;
+ cdlf = (face_index != -1) && fdata && do_tessface ? &fdata->layers[face_index] : NULL;
- if (cdlp->name != new_name) {
+ if (cdlu->name != new_name) {
/* Mesh validate passes a name from the CD layer as the new name,
* Avoid memcpy from self to self in this case.
*/
- BLI_strncpy(cdlp->name, new_name, sizeof(cdlp->name));
- CustomData_set_layer_unique_name(pdata, cdlp - pdata->layers);
+ BLI_strncpy(cdlu->name, new_name, sizeof(cdlu->name));
+ CustomData_set_layer_unique_name(ldata, loop_index);
+ }
+
+ if (cdlp == NULL && cdlf == NULL) {
+ return false;
}
/* Loop until we do have exactly the same name for all layers! */
- for (i = 1; !STREQ(cdlp->name, cdlu->name) || (cdlf && !STREQ(cdlp->name, cdlf->name)); i++) {
+ for (i = 1;
+ (cdlp && !STREQ(cdlu->name, cdlp->name)) ||
+ (cdlf && !STREQ(cdlu->name, cdlf->name));
+ i++)
+ {
switch (i % step) {
case 0:
- BLI_strncpy(cdlp->name, cdlu->name, sizeof(cdlp->name));
- CustomData_set_layer_unique_name(pdata, cdlp - pdata->layers);
+ if (cdlp) {
+ BLI_strncpy(cdlp->name, cdlu->name, sizeof(cdlp->name));
+ CustomData_set_layer_unique_name(pdata, poly_index);
+ }
break;
case 1:
BLI_strncpy(cdlu->name, cdlp->name, sizeof(cdlu->name));
- CustomData_set_layer_unique_name(ldata, cdlu - ldata->layers);
+ CustomData_set_layer_unique_name(ldata, loop_index);
break;
case 2:
if (cdlf) {
- BLI_strncpy(cdlf->name, cdlp->name, sizeof(cdlf->name));
- CustomData_set_layer_unique_name(fdata, cdlf - fdata->layers);
+ BLI_strncpy(cdlf->name, cdlu->name, sizeof(cdlf->name));
+ CustomData_set_layer_unique_name(fdata, face_index);
}
break;
}
@@ -623,66 +674,44 @@ bool BKE_mesh_uv_cdlayer_rename_index(Mesh *me, const int poly_index, const int
bool BKE_mesh_uv_cdlayer_rename(Mesh *me, const char *old_name, const char *new_name, bool do_tessface)
{
- CustomData *pdata, *ldata, *fdata;
+ CustomData *ldata, *fdata;
if (me->edit_btmesh) {
- pdata = &me->edit_btmesh->bm->pdata;
ldata = &me->edit_btmesh->bm->ldata;
/* No tessellated data in BMesh! */
fdata = NULL;
do_tessface = false;
}
else {
- pdata = &me->pdata;
ldata = &me->ldata;
fdata = &me->fdata;
do_tessface = (do_tessface && fdata->totlayer);
}
{
- const int pidx_start = CustomData_get_layer_index(pdata, CD_MTEXPOLY);
const int lidx_start = CustomData_get_layer_index(ldata, CD_MLOOPUV);
const int fidx_start = do_tessface ? CustomData_get_layer_index(fdata, CD_MTFACE) : -1;
- int pidx = CustomData_get_named_layer(pdata, CD_MTEXPOLY, old_name);
int lidx = CustomData_get_named_layer(ldata, CD_MLOOPUV, old_name);
int fidx = do_tessface ? CustomData_get_named_layer(fdata, CD_MTFACE, old_name) : -1;
/* None of those cases should happen, in theory!
* Note this assume we have the same number of mtexpoly, mloopuv and mtface layers!
*/
- if (pidx == -1) {
- if (lidx == -1) {
- if (fidx == -1) {
- /* No layer found with this name! */
- return false;
- }
- else {
- lidx = fidx;
- }
- }
- pidx = lidx;
- }
- else {
- if (lidx == -1) {
- lidx = pidx;
+ if (lidx == -1) {
+ if (fidx == -1) {
+ /* No layer found with this name! */
+ return false;
}
- if (fidx == -1 && do_tessface) {
- fidx = pidx;
+ else {
+ lidx = fidx;
}
}
-#if 0
- /* For now, we do not consider mismatch in indices (i.e. same name leading to (relative) different indices). */
- else if (pidx != lidx) {
- lidx = pidx;
- }
-#endif
/* Go back to absolute indices! */
- pidx += pidx_start;
lidx += lidx_start;
if (fidx != -1)
fidx += fidx_start;
- return BKE_mesh_uv_cdlayer_rename_index(me, pidx, lidx, fidx, new_name, do_tessface);
+ return BKE_mesh_uv_cdlayer_rename_index(me, -1, lidx, fidx, new_name, do_tessface);
}
}
@@ -760,6 +789,18 @@ void BKE_mesh_texspace_get(Mesh *me, float r_loc[3], float r_rot[3], float r_siz
if (r_size) copy_v3_v3(r_size, me->size);
}
+void BKE_mesh_texspace_get_reference(Mesh *me, short **r_texflag, float **r_loc, float **r_rot, float **r_size)
+{
+ if (me->bb == NULL || (me->bb->flag & BOUNDBOX_DIRTY)) {
+ BKE_mesh_texspace_calc(me);
+ }
+
+ if (r_texflag != NULL) *r_texflag = &me->texflag;
+ if (r_loc != NULL) *r_loc = me->loc;
+ if (r_rot != NULL) *r_rot = me->rot;
+ if (r_size != NULL) *r_size = me->size;
+}
+
void BKE_mesh_texspace_copy_from_object(Mesh *me, Object *ob)
{
float *texloc, *texrot, *texsize;
@@ -1382,7 +1423,6 @@ void BKE_mesh_from_nurbs_displist(Object *ob, ListBase *dispbase, const bool use
if (alluv) {
const char *uvname = "Orco";
- me->mtpoly = CustomData_add_layer_named(&me->pdata, CD_MTEXPOLY, CD_DEFAULT, NULL, me->totpoly, uvname);
me->mloopuv = CustomData_add_layer_named(&me->ldata, CD_MLOOPUV, CD_ASSIGN, alluv, me->totloop, uvname);
}
@@ -1602,10 +1642,10 @@ void BKE_mesh_to_curve_nurblist(DerivedMesh *dm, ListBase *nurblist, const int e
}
}
-void BKE_mesh_to_curve(Scene *scene, Object *ob)
+void BKE_mesh_to_curve(const EvaluationContext *eval_ctx, Scene *scene, Object *ob)
{
/* make new mesh data from the original copy */
- DerivedMesh *dm = mesh_get_derived_final(scene, ob, CD_MASK_MESH);
+ DerivedMesh *dm = mesh_get_derived_final(eval_ctx, scene, ob, CD_MASK_MESH);
ListBase nurblist = {NULL, NULL};
bool needsFree = false;
@@ -2384,7 +2424,7 @@ void BKE_mesh_split_faces(Mesh *mesh, bool free_loop_normals)
/* settings: 1 - preview, 2 - render */
Mesh *BKE_mesh_new_from_object(
- Main *bmain, Scene *sce, Object *ob,
+ const EvaluationContext *eval_ctx, Main *bmain, Scene *sce, Object *ob,
int apply_modifiers, int settings, int calc_tessface, int calc_undeformed)
{
Mesh *tmpmesh;
@@ -2443,7 +2483,7 @@ Mesh *BKE_mesh_new_from_object(
copycu->editnurb = tmpcu->editnurb;
/* get updated display list, and convert to a mesh */
- BKE_displist_make_curveTypes_forRender(sce, tmpobj, &dispbase, &derivedFinal, false, render);
+ BKE_displist_make_curveTypes_forRender(eval_ctx, sce, tmpobj, &dispbase, &derivedFinal, false, render);
copycu->editfont = NULL;
copycu->editnurb = NULL;
@@ -2492,13 +2532,7 @@ Mesh *BKE_mesh_new_from_object(
if (render) {
ListBase disp = {NULL, NULL};
- /* TODO(sergey): This is gonna to work for until EvaluationContext
- * only contains for_render flag. As soon as CoW is
- * implemented, this is to be rethinked.
- */
- EvaluationContext eval_ctx;
- DEG_evaluation_context_init(&eval_ctx, DAG_EVAL_RENDER);
- BKE_displist_make_mball_forRender(&eval_ctx, sce, ob, &disp);
+ BKE_displist_make_mball_forRender(eval_ctx, sce, ob, &disp);
BKE_mesh_from_metaball(&disp, tmpmesh);
BKE_displist_free(&disp);
}
@@ -2537,9 +2571,9 @@ Mesh *BKE_mesh_new_from_object(
/* Write the display mesh into the dummy mesh */
if (render)
- dm = mesh_create_derived_render(sce, ob, mask);
+ dm = mesh_create_derived_render(eval_ctx, sce, ob, mask);
else
- dm = mesh_create_derived_view(sce, ob, mask);
+ dm = mesh_create_derived_view(eval_ctx, sce, ob, mask);
tmpmesh = BKE_mesh_add(bmain, ((ID *)ob->data)->name + 2);
DM_to_mesh(dm, tmpmesh, ob, mask, true);
@@ -2630,7 +2664,7 @@ Mesh *BKE_mesh_new_from_object(
/* **** Depsgraph evaluation **** */
-void BKE_mesh_eval_geometry(EvaluationContext *UNUSED(eval_ctx),
+void BKE_mesh_eval_geometry(const EvaluationContext *UNUSED(eval_ctx),
Mesh *mesh)
{
if (G.debug & G_DEBUG_DEPSGRAPH) {
@@ -2640,3 +2674,20 @@ void BKE_mesh_eval_geometry(EvaluationContext *UNUSED(eval_ctx),
BKE_mesh_texspace_calc(mesh);
}
}
+
+/* Draw Engine */
+void (*BKE_mesh_batch_cache_dirty_cb)(Mesh *me, int mode) = NULL;
+void (*BKE_mesh_batch_cache_free_cb)(Mesh *me) = NULL;
+
+void BKE_mesh_batch_cache_dirty(Mesh *me, int mode)
+{
+ if (me->batch_cache) {
+ BKE_mesh_batch_cache_dirty_cb(me, mode);
+ }
+}
+void BKE_mesh_batch_cache_free(Mesh *me)
+{
+ if (me->batch_cache) {
+ BKE_mesh_batch_cache_free_cb(me);
+ }
+}
diff --git a/source/blender/blenkernel/intern/mesh_evaluate.c b/source/blender/blenkernel/intern/mesh_evaluate.c
index b0c09979de9..531291c30bb 100644
--- a/source/blender/blenkernel/intern/mesh_evaluate.c
+++ b/source/blender/blenkernel/intern/mesh_evaluate.c
@@ -1707,152 +1707,6 @@ void BKE_mesh_normals_loop_to_vertex(
/* -------------------------------------------------------------------- */
-/** \name Mesh Tangent Calculations
- * \{ */
-
-/* Tangent space utils. */
-
-/* User data. */
-typedef struct {
- const MPoly *mpolys; /* faces */
- const MLoop *mloops; /* faces's vertices */
- const MVert *mverts; /* vertices */
- const MLoopUV *luvs; /* texture coordinates */
- float (*lnors)[3]; /* loops' normals */
- float (*tangents)[4]; /* output tangents */
- int num_polys; /* number of polygons */
-} BKEMeshToTangent;
-
-/* Mikktspace's API */
-static int get_num_faces(const SMikkTSpaceContext *pContext)
-{
- BKEMeshToTangent *p_mesh = (BKEMeshToTangent *)pContext->m_pUserData;
- return p_mesh->num_polys;
-}
-
-static int get_num_verts_of_face(const SMikkTSpaceContext *pContext, const int face_idx)
-{
- BKEMeshToTangent *p_mesh = (BKEMeshToTangent *)pContext->m_pUserData;
- return p_mesh->mpolys[face_idx].totloop;
-}
-
-static void get_position(const SMikkTSpaceContext *pContext, float r_co[3], const int face_idx, const int vert_idx)
-{
- BKEMeshToTangent *p_mesh = (BKEMeshToTangent *)pContext->m_pUserData;
- const int loop_idx = p_mesh->mpolys[face_idx].loopstart + vert_idx;
- copy_v3_v3(r_co, p_mesh->mverts[p_mesh->mloops[loop_idx].v].co);
-}
-
-static void get_texture_coordinate(const SMikkTSpaceContext *pContext, float r_uv[2], const int face_idx,
- const int vert_idx)
-{
- BKEMeshToTangent *p_mesh = (BKEMeshToTangent *)pContext->m_pUserData;
- copy_v2_v2(r_uv, p_mesh->luvs[p_mesh->mpolys[face_idx].loopstart + vert_idx].uv);
-}
-
-static void get_normal(const SMikkTSpaceContext *pContext, float r_no[3], const int face_idx, const int vert_idx)
-{
- BKEMeshToTangent *p_mesh = (BKEMeshToTangent *)pContext->m_pUserData;
- copy_v3_v3(r_no, p_mesh->lnors[p_mesh->mpolys[face_idx].loopstart + vert_idx]);
-}
-
-static void set_tspace(const SMikkTSpaceContext *pContext, const float fv_tangent[3], const float face_sign,
- const int face_idx, const int vert_idx)
-{
- BKEMeshToTangent *p_mesh = (BKEMeshToTangent *)pContext->m_pUserData;
- float *p_res = p_mesh->tangents[p_mesh->mpolys[face_idx].loopstart + vert_idx];
- copy_v3_v3(p_res, fv_tangent);
- p_res[3] = face_sign;
-}
-
-/**
- * Compute simplified tangent space normals, i.e. tangent vector + sign of bi-tangent one, which combined with
- * split normals can be used to recreate the full tangent space.
- * Note: * The mesh should be made of only tris and quads!
- */
-void BKE_mesh_loop_tangents_ex(
- const MVert *mverts, const int UNUSED(numVerts), const MLoop *mloops,
- float (*r_looptangent)[4], float (*loopnors)[3], const MLoopUV *loopuvs,
- const int UNUSED(numLoops), const MPoly *mpolys, const int numPolys,
- ReportList *reports)
-{
- BKEMeshToTangent mesh_to_tangent = {NULL};
- SMikkTSpaceContext s_context = {NULL};
- SMikkTSpaceInterface s_interface = {NULL};
-
- const MPoly *mp;
- int mp_index;
-
- /* First check we do have a tris/quads only mesh. */
- for (mp = mpolys, mp_index = 0; mp_index < numPolys; mp++, mp_index++) {
- if (mp->totloop > 4) {
- BKE_report(reports, RPT_ERROR, "Tangent space can only be computed for tris/quads, aborting");
- return;
- }
- }
-
- /* Compute Mikktspace's tangent normals. */
- mesh_to_tangent.mpolys = mpolys;
- mesh_to_tangent.mloops = mloops;
- mesh_to_tangent.mverts = mverts;
- mesh_to_tangent.luvs = loopuvs;
- mesh_to_tangent.lnors = loopnors;
- mesh_to_tangent.tangents = r_looptangent;
- mesh_to_tangent.num_polys = numPolys;
-
- s_context.m_pUserData = &mesh_to_tangent;
- s_context.m_pInterface = &s_interface;
- s_interface.m_getNumFaces = get_num_faces;
- s_interface.m_getNumVerticesOfFace = get_num_verts_of_face;
- s_interface.m_getPosition = get_position;
- s_interface.m_getTexCoord = get_texture_coordinate;
- s_interface.m_getNormal = get_normal;
- s_interface.m_setTSpaceBasic = set_tspace;
-
- /* 0 if failed */
- if (genTangSpaceDefault(&s_context) == false) {
- BKE_report(reports, RPT_ERROR, "Mikktspace failed to generate tangents for this mesh!");
- }
-}
-
-/**
- * Wrapper around BKE_mesh_loop_tangents_ex, which takes care of most boiling code.
- * \note
- * - There must be a valid loop's CD_NORMALS available.
- * - The mesh should be made of only tris and quads!
- */
-void BKE_mesh_loop_tangents(Mesh *mesh, const char *uvmap, float (*r_looptangents)[4], ReportList *reports)
-{
- MLoopUV *loopuvs;
- float (*loopnors)[3];
-
- /* Check we have valid texture coordinates first! */
- if (uvmap) {
- loopuvs = CustomData_get_layer_named(&mesh->ldata, CD_MLOOPUV, uvmap);
- }
- else {
- loopuvs = CustomData_get_layer(&mesh->ldata, CD_MLOOPUV);
- }
- if (!loopuvs) {
- BKE_reportf(reports, RPT_ERROR, "Tangent space computation needs an UVMap, \"%s\" not found, aborting", uvmap);
- return;
- }
-
- loopnors = CustomData_get_layer(&mesh->ldata, CD_NORMAL);
- if (!loopnors) {
- BKE_report(reports, RPT_ERROR, "Tangent space computation needs loop normals, none found, aborting");
- return;
- }
-
- BKE_mesh_loop_tangents_ex(mesh->mvert, mesh->totvert, mesh->mloop, r_looptangents,
- loopnors, loopuvs, mesh->totloop, mesh->mpoly, mesh->totpoly, reports);
-}
-
-/** \} */
-
-
-/* -------------------------------------------------------------------- */
-
/** \name Polygon Calculations
* \{ */
@@ -2423,12 +2277,12 @@ void BKE_mesh_calc_volume(
*/
void BKE_mesh_loops_to_mface_corners(
CustomData *fdata, CustomData *ldata,
- CustomData *pdata, unsigned int lindex[4], int findex,
- const int polyindex,
+ CustomData *UNUSED(pdata), unsigned int lindex[4], int findex,
+ const int UNUSED(polyindex),
const int mf_len, /* 3 or 4 */
/* cache values to avoid lookups every time */
- const int numTex, /* CustomData_number_of_layers(pdata, CD_MTEXPOLY) */
+ const int numUV, /* CustomData_number_of_layers(ldata, CD_MLOOPUV) */
const int numCol, /* CustomData_number_of_layers(ldata, CD_MLOOPCOL) */
const bool hasPCol, /* CustomData_has_layer(ldata, CD_PREVIEW_MLOOPCOL) */
const bool hasOrigSpace, /* CustomData_has_layer(ldata, CD_ORIGSPACE_MLOOP) */
@@ -2436,17 +2290,13 @@ void BKE_mesh_loops_to_mface_corners(
)
{
MTFace *texface;
- MTexPoly *texpoly;
MCol *mcol;
MLoopCol *mloopcol;
MLoopUV *mloopuv;
int i, j;
- for (i = 0; i < numTex; i++) {
+ for (i = 0; i < numUV; i++) {
texface = CustomData_get_n(fdata, CD_MTFACE, findex, i);
- texpoly = CustomData_get_n(pdata, CD_MTEXPOLY, polyindex, i);
-
- ME_MTEXFACE_CPY(texface, texpoly);
for (j = 0; j < mf_len; j++) {
mloopuv = CustomData_get_n(ldata, CD_MLOOPUV, (int)lindex[j], i);
@@ -2498,14 +2348,14 @@ void BKE_mesh_loops_to_mface_corners(
*
* \note when mface is not NULL, mface[face_index].v4 is used to test quads, else, loopindices[face_index][3] is used.
*/
-void BKE_mesh_loops_to_tessdata(CustomData *fdata, CustomData *ldata, CustomData *pdata, MFace *mface,
+void BKE_mesh_loops_to_tessdata(CustomData *fdata, CustomData *ldata, MFace *mface,
int *polyindices, unsigned int (*loopindices)[4], const int num_faces)
{
/* Note: performances are sub-optimal when we get a NULL mface, we could be ~25% quicker with dedicated code...
* Issue is, unless having two different functions with nearly the same code, there's not much ways to solve
* this. Better imho to live with it for now. :/ --mont29
*/
- const int numTex = CustomData_number_of_layers(pdata, CD_MTEXPOLY);
+ const int numUV = CustomData_number_of_layers(ldata, CD_MLOOPUV);
const int numCol = CustomData_number_of_layers(ldata, CD_MLOOPCOL);
const bool hasPCol = CustomData_has_layer(ldata, CD_PREVIEW_MLOOPCOL);
const bool hasOrigSpace = CustomData_has_layer(ldata, CD_ORIGSPACE_MLOOP);
@@ -2515,17 +2365,14 @@ void BKE_mesh_loops_to_tessdata(CustomData *fdata, CustomData *ldata, CustomData
const int *pidx;
unsigned int (*lidx)[4];
- for (i = 0; i < numTex; i++) {
+ for (i = 0; i < numUV; i++) {
MTFace *texface = CustomData_get_layer_n(fdata, CD_MTFACE, i);
- MTexPoly *texpoly = CustomData_get_layer_n(pdata, CD_MTEXPOLY, i);
MLoopUV *mloopuv = CustomData_get_layer_n(ldata, CD_MLOOPUV, i);
for (findex = 0, pidx = polyindices, lidx = loopindices;
findex < num_faces;
pidx++, lidx++, findex++, texface++)
{
- ME_MTEXFACE_CPY(texface, &texpoly[*pidx]);
-
for (j = (mface ? mface[findex].v4 : (*lidx)[3]) ? 4 : 3; j--;) {
copy_v2_v2(texface->uv[j], mloopuv[(*lidx)[j]].uv);
}
@@ -2848,7 +2695,7 @@ int BKE_mesh_recalc_tessellation(
/* CD_ORIGINDEX will contain an array of indices from tessfaces to the polygons
* they are directly tessellated from */
CustomData_add_layer(fdata, CD_ORIGINDEX, CD_ASSIGN, mface_to_poly_map, totface);
- CustomData_from_bmeshpoly(fdata, pdata, ldata, totface);
+ CustomData_from_bmeshpoly(fdata, ldata, totface);
if (do_face_nor_copy) {
/* If polys have a normals layer, copying that to faces can help
@@ -2869,7 +2716,7 @@ int BKE_mesh_recalc_tessellation(
* So we pass NULL as MFace pointer, and BKE_mesh_loops_to_tessdata will use the fourth loop index as quad test.
* ...
*/
- BKE_mesh_loops_to_tessdata(fdata, ldata, pdata, NULL, mface_to_poly_map, lindices, totface);
+ BKE_mesh_loops_to_tessdata(fdata, ldata, NULL, mface_to_poly_map, lindices, totface);
/* NOTE: quad detection issue - fourth vertidx vs fourth loopidx:
* ...However, most TFace code uses 'MFace->v4 == 0' test to check whether it is a tri or quad.
@@ -3061,7 +2908,7 @@ int BKE_mesh_mpoly_to_mface(struct CustomData *fdata, struct CustomData *ldata,
MPoly *mp, *mpoly;
MFace *mface, *mf;
- const int numTex = CustomData_number_of_layers(pdata, CD_MTEXPOLY);
+ const int numUV = CustomData_number_of_layers(ldata, CD_MLOOPUV);
const int numCol = CustomData_number_of_layers(ldata, CD_MLOOPCOL);
const bool hasPCol = CustomData_has_layer(ldata, CD_PREVIEW_MLOOPCOL);
const bool hasOrigSpace = CustomData_has_layer(ldata, CD_ORIGSPACE_MLOOP);
@@ -3101,7 +2948,7 @@ int BKE_mesh_mpoly_to_mface(struct CustomData *fdata, struct CustomData *ldata,
CustomData_add_layer(fdata, CD_MFACE, CD_ASSIGN, mface, totface);
- CustomData_from_bmeshpoly(fdata, pdata, ldata, totface);
+ CustomData_from_bmeshpoly(fdata, ldata, totface);
mp = mpoly;
k = 0;
@@ -3123,9 +2970,10 @@ int BKE_mesh_mpoly_to_mface(struct CustomData *fdata, struct CustomData *ldata,
mf->v2 = mloop[mf->v2].v;
mf->v3 = mloop[mf->v3].v;
- BKE_mesh_loops_to_mface_corners(fdata, ldata, pdata,
- lindex, k, i, 3,
- numTex, numCol, hasPCol, hasOrigSpace, hasLNor);
+ BKE_mesh_loops_to_mface_corners(
+ fdata, ldata, pdata,
+ lindex, k, i, 3,
+ numUV, numCol, hasPCol, hasOrigSpace, hasLNor);
test_index_face(mf, fdata, k, 3);
}
else {
@@ -3143,9 +2991,10 @@ int BKE_mesh_mpoly_to_mface(struct CustomData *fdata, struct CustomData *ldata,
mf->v3 = mloop[mf->v3].v;
mf->v4 = mloop[mf->v4].v;
- BKE_mesh_loops_to_mface_corners(fdata, ldata, pdata,
- lindex, k, i, 4,
- numTex, numCol, hasPCol, hasOrigSpace, hasLNor);
+ BKE_mesh_loops_to_mface_corners(
+ fdata, ldata, pdata,
+ lindex, k, i, 4,
+ numUV, numCol, hasPCol, hasOrigSpace, hasLNor);
test_index_face(mf, fdata, k, 4);
}
@@ -3160,11 +3009,11 @@ int BKE_mesh_mpoly_to_mface(struct CustomData *fdata, struct CustomData *ldata,
#endif /* USE_BMESH_SAVE_AS_COMPAT */
-static void bm_corners_to_loops_ex(ID *id, CustomData *fdata, CustomData *ldata, CustomData *pdata,
- MFace *mface, int totloop, int findex, int loopstart, int numTex, int numCol)
+static void bm_corners_to_loops_ex(
+ ID *id, CustomData *fdata, CustomData *ldata,
+ MFace *mface, int totloop, int findex, int loopstart, int numTex, int numCol)
{
MTFace *texface;
- MTexPoly *texpoly;
MCol *mcol;
MLoopCol *mloopcol;
MLoopUV *mloopuv;
@@ -3175,9 +3024,6 @@ static void bm_corners_to_loops_ex(ID *id, CustomData *fdata, CustomData *ldata,
for (i = 0; i < numTex; i++) {
texface = CustomData_get_n(fdata, CD_MTFACE, findex, i);
- texpoly = CustomData_get_n(pdata, CD_MTEXPOLY, findex, i);
-
- ME_MTEXFACE_CPY(texpoly, texface);
mloopuv = CustomData_get_n(ldata, CD_MLOOPUV, loopstart, i);
copy_v2_v2(mloopuv->uv, texface->uv[0]); mloopuv++;
@@ -3284,7 +3130,7 @@ void BKE_mesh_do_versions_convert_mfaces_to_mpolys(Mesh *mesh)
mesh->medge, mesh->mface,
&mesh->totloop, &mesh->totpoly, &mesh->mloop, &mesh->mpoly);
- CustomData_bmesh_do_versions_update_active_layers(&mesh->fdata, &mesh->pdata, &mesh->ldata);
+ CustomData_bmesh_do_versions_update_active_layers(&mesh->fdata, &mesh->ldata);
BKE_mesh_update_customdata_pointers(mesh, true);
}
@@ -3327,7 +3173,7 @@ void BKE_mesh_convert_mfaces_to_mpolys_ex(ID *id, CustomData *fdata, CustomData
CustomData_add_layer(ldata, CD_MLOOP, CD_ASSIGN, mloop, totloop);
- CustomData_to_bmeshpoly(fdata, pdata, ldata, totloop, totpoly);
+ CustomData_to_bmeshpoly(fdata, ldata, totloop);
if (id) {
/* ensure external data is transferred */
@@ -3377,7 +3223,7 @@ void BKE_mesh_convert_mfaces_to_mpolys_ex(ID *id, CustomData *fdata, CustomData
# undef ML
- bm_corners_to_loops_ex(id, fdata, ldata, pdata, mface, totloop, i, mp->loopstart, numTex, numCol);
+ bm_corners_to_loops_ex(id, fdata, ldata, mface, totloop, i, mp->loopstart, numTex, numCol);
if (polyindex) {
*polyindex = i;
diff --git a/source/blender/blenkernel/intern/mesh_tangent.c b/source/blender/blenkernel/intern/mesh_tangent.c
new file mode 100644
index 00000000000..77288bd672e
--- /dev/null
+++ b/source/blender/blenkernel/intern/mesh_tangent.c
@@ -0,0 +1,690 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * Contributor(s): Blender Foundation
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/blenkernel/intern/mesh_tangent.c
+ * \ingroup bke
+ *
+ * Functions to evaluate mesh tangents.
+ */
+
+#include <limits.h>
+
+#include "MEM_guardedalloc.h"
+
+#include "DNA_mesh_types.h"
+#include "DNA_meshdata_types.h"
+
+#include "BLI_utildefines.h"
+#include "BLI_math.h"
+#include "BLI_stack.h"
+#include "BLI_task.h"
+
+#include "BKE_customdata.h"
+#include "BKE_global.h"
+#include "BKE_mesh.h"
+#include "BKE_mesh_tangent.h"
+#include "BKE_report.h"
+
+#include "BLI_strict_flags.h"
+
+#include "atomic_ops.h"
+#include "mikktspace.h"
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Mesh Tangent Calculations (Single Layer)
+ * \{ */
+
+/* Tangent space utils. */
+
+/* User data. */
+typedef struct {
+ const MPoly *mpolys; /* faces */
+ const MLoop *mloops; /* faces's vertices */
+ const MVert *mverts; /* vertices */
+ const MLoopUV *luvs; /* texture coordinates */
+ float (*lnors)[3]; /* loops' normals */
+ float (*tangents)[4]; /* output tangents */
+ int num_polys; /* number of polygons */
+} BKEMeshToTangent;
+
+/* Mikktspace's API */
+static int get_num_faces(const SMikkTSpaceContext *pContext)
+{
+ BKEMeshToTangent *p_mesh = (BKEMeshToTangent *)pContext->m_pUserData;
+ return p_mesh->num_polys;
+}
+
+static int get_num_verts_of_face(const SMikkTSpaceContext *pContext, const int face_idx)
+{
+ BKEMeshToTangent *p_mesh = (BKEMeshToTangent *)pContext->m_pUserData;
+ return p_mesh->mpolys[face_idx].totloop;
+}
+
+static void get_position(const SMikkTSpaceContext *pContext, float r_co[3], const int face_idx, const int vert_idx)
+{
+ BKEMeshToTangent *p_mesh = (BKEMeshToTangent *)pContext->m_pUserData;
+ const int loop_idx = p_mesh->mpolys[face_idx].loopstart + vert_idx;
+ copy_v3_v3(r_co, p_mesh->mverts[p_mesh->mloops[loop_idx].v].co);
+}
+
+static void get_texture_coordinate(const SMikkTSpaceContext *pContext, float r_uv[2], const int face_idx,
+ const int vert_idx)
+{
+ BKEMeshToTangent *p_mesh = (BKEMeshToTangent *)pContext->m_pUserData;
+ copy_v2_v2(r_uv, p_mesh->luvs[p_mesh->mpolys[face_idx].loopstart + vert_idx].uv);
+}
+
+static void get_normal(const SMikkTSpaceContext *pContext, float r_no[3], const int face_idx, const int vert_idx)
+{
+ BKEMeshToTangent *p_mesh = (BKEMeshToTangent *)pContext->m_pUserData;
+ copy_v3_v3(r_no, p_mesh->lnors[p_mesh->mpolys[face_idx].loopstart + vert_idx]);
+}
+
+static void set_tspace(const SMikkTSpaceContext *pContext, const float fv_tangent[3], const float face_sign,
+ const int face_idx, const int vert_idx)
+{
+ BKEMeshToTangent *p_mesh = (BKEMeshToTangent *)pContext->m_pUserData;
+ float *p_res = p_mesh->tangents[p_mesh->mpolys[face_idx].loopstart + vert_idx];
+ copy_v3_v3(p_res, fv_tangent);
+ p_res[3] = face_sign;
+}
+
+/**
+ * Compute simplified tangent space normals, i.e. tangent vector + sign of bi-tangent one, which combined with
+ * split normals can be used to recreate the full tangent space.
+ * Note: * The mesh should be made of only tris and quads!
+ */
+void BKE_mesh_calc_loop_tangent_single_ex(
+ const MVert *mverts, const int UNUSED(numVerts), const MLoop *mloops,
+ float (*r_looptangent)[4], float (*loopnors)[3], const MLoopUV *loopuvs,
+ const int UNUSED(numLoops), const MPoly *mpolys, const int numPolys,
+ ReportList *reports)
+{
+ BKEMeshToTangent mesh_to_tangent = {NULL};
+ SMikkTSpaceContext s_context = {NULL};
+ SMikkTSpaceInterface s_interface = {NULL};
+
+ const MPoly *mp;
+ int mp_index;
+
+ /* First check we do have a tris/quads only mesh. */
+ for (mp = mpolys, mp_index = 0; mp_index < numPolys; mp++, mp_index++) {
+ if (mp->totloop > 4) {
+ BKE_report(reports, RPT_ERROR, "Tangent space can only be computed for tris/quads, aborting");
+ return;
+ }
+ }
+
+ /* Compute Mikktspace's tangent normals. */
+ mesh_to_tangent.mpolys = mpolys;
+ mesh_to_tangent.mloops = mloops;
+ mesh_to_tangent.mverts = mverts;
+ mesh_to_tangent.luvs = loopuvs;
+ mesh_to_tangent.lnors = loopnors;
+ mesh_to_tangent.tangents = r_looptangent;
+ mesh_to_tangent.num_polys = numPolys;
+
+ s_context.m_pUserData = &mesh_to_tangent;
+ s_context.m_pInterface = &s_interface;
+ s_interface.m_getNumFaces = get_num_faces;
+ s_interface.m_getNumVerticesOfFace = get_num_verts_of_face;
+ s_interface.m_getPosition = get_position;
+ s_interface.m_getTexCoord = get_texture_coordinate;
+ s_interface.m_getNormal = get_normal;
+ s_interface.m_setTSpaceBasic = set_tspace;
+
+ /* 0 if failed */
+ if (genTangSpaceDefault(&s_context) == false) {
+ BKE_report(reports, RPT_ERROR, "Mikktspace failed to generate tangents for this mesh!");
+ }
+}
+
+/**
+ * Wrapper around BKE_mesh_calc_loop_tangent_single_ex, which takes care of most boiling code.
+ * \note
+ * - There must be a valid loop's CD_NORMALS available.
+ * - The mesh should be made of only tris and quads!
+ */
+void BKE_mesh_calc_loop_tangent_single(Mesh *mesh, const char *uvmap, float (*r_looptangents)[4], ReportList *reports)
+{
+ MLoopUV *loopuvs;
+ float (*loopnors)[3];
+
+ /* Check we have valid texture coordinates first! */
+ if (uvmap) {
+ loopuvs = CustomData_get_layer_named(&mesh->ldata, CD_MLOOPUV, uvmap);
+ }
+ else {
+ loopuvs = CustomData_get_layer(&mesh->ldata, CD_MLOOPUV);
+ }
+ if (!loopuvs) {
+ BKE_reportf(reports, RPT_ERROR, "Tangent space computation needs an UVMap, \"%s\" not found, aborting", uvmap);
+ return;
+ }
+
+ loopnors = CustomData_get_layer(&mesh->ldata, CD_NORMAL);
+ if (!loopnors) {
+ BKE_report(reports, RPT_ERROR, "Tangent space computation needs loop normals, none found, aborting");
+ return;
+ }
+
+ BKE_mesh_calc_loop_tangent_single_ex(mesh->mvert, mesh->totvert, mesh->mloop, r_looptangents,
+ loopnors, loopuvs, mesh->totloop, mesh->mpoly, mesh->totpoly, reports);
+}
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Mesh Tangent Calculations (All Layers)
+ * \{ */
+
+
+/* Necessary complexity to handle looptri's as quads for correct tangents */
+#define USE_LOOPTRI_DETECT_QUADS
+
+typedef struct {
+ const float (*precomputedFaceNormals)[3];
+ const float (*precomputedLoopNormals)[3];
+ const MLoopTri *looptri;
+ MLoopUV *mloopuv; /* texture coordinates */
+ const MPoly *mpoly; /* indices */
+ const MLoop *mloop; /* indices */
+ const MVert *mvert; /* vertices & normals */
+ const float (*orco)[3];
+ float (*tangent)[4]; /* destination */
+ int numTessFaces;
+
+#ifdef USE_LOOPTRI_DETECT_QUADS
+ /* map from 'fake' face index to looptri,
+ * quads will point to the first looptri of the quad */
+ const int *face_as_quad_map;
+ int num_face_as_quad_map;
+#endif
+
+} SGLSLMeshToTangent;
+
+/* interface */
+static int dm_ts_GetNumFaces(const SMikkTSpaceContext *pContext)
+{
+ SGLSLMeshToTangent *pMesh = pContext->m_pUserData;
+
+#ifdef USE_LOOPTRI_DETECT_QUADS
+ return pMesh->num_face_as_quad_map;
+#else
+ return pMesh->numTessFaces;
+#endif
+}
+
+static int dm_ts_GetNumVertsOfFace(const SMikkTSpaceContext *pContext, const int face_num)
+{
+#ifdef USE_LOOPTRI_DETECT_QUADS
+ SGLSLMeshToTangent *pMesh = pContext->m_pUserData;
+ if (pMesh->face_as_quad_map) {
+ const MLoopTri *lt = &pMesh->looptri[pMesh->face_as_quad_map[face_num]];
+ const MPoly *mp = &pMesh->mpoly[lt->poly];
+ if (mp->totloop == 4) {
+ return 4;
+ }
+ }
+ return 3;
+#else
+ UNUSED_VARS(pContext, face_num);
+ return 3;
+#endif
+}
+
+static void dm_ts_GetPosition(
+ const SMikkTSpaceContext *pContext, float r_co[3],
+ const int face_num, const int vert_index)
+{
+ //assert(vert_index >= 0 && vert_index < 4);
+ SGLSLMeshToTangent *pMesh = pContext->m_pUserData;
+ const MLoopTri *lt;
+ uint loop_index;
+ const float *co;
+
+#ifdef USE_LOOPTRI_DETECT_QUADS
+ if (pMesh->face_as_quad_map) {
+ lt = &pMesh->looptri[pMesh->face_as_quad_map[face_num]];
+ const MPoly *mp = &pMesh->mpoly[lt->poly];
+ if (mp->totloop == 4) {
+ loop_index = (uint)(mp->loopstart + vert_index);
+ goto finally;
+ }
+ /* fall through to regular triangle */
+ }
+ else {
+ lt = &pMesh->looptri[face_num];
+ }
+#else
+ lt = &pMesh->looptri[face_num];
+#endif
+ loop_index = lt->tri[vert_index];
+
+finally:
+ co = pMesh->mvert[pMesh->mloop[loop_index].v].co;
+ copy_v3_v3(r_co, co);
+}
+
+static void dm_ts_GetTextureCoordinate(
+ const SMikkTSpaceContext *pContext, float r_uv[2],
+ const int face_num, const int vert_index)
+{
+ //assert(vert_index >= 0 && vert_index < 4);
+ SGLSLMeshToTangent *pMesh = pContext->m_pUserData;
+ const MLoopTri *lt;
+ uint loop_index;
+
+#ifdef USE_LOOPTRI_DETECT_QUADS
+ if (pMesh->face_as_quad_map) {
+ lt = &pMesh->looptri[pMesh->face_as_quad_map[face_num]];
+ const MPoly *mp = &pMesh->mpoly[lt->poly];
+ if (mp->totloop == 4) {
+ loop_index = (uint)(mp->loopstart + vert_index);
+ goto finally;
+ }
+ /* fall through to regular triangle */
+ }
+ else {
+ lt = &pMesh->looptri[face_num];
+ }
+#else
+ lt = &pMesh->looptri[face_num];
+#endif
+ loop_index = lt->tri[vert_index];
+
+finally:
+ if (pMesh->mloopuv != NULL) {
+ const float *uv = pMesh->mloopuv[loop_index].uv;
+ copy_v2_v2(r_uv, uv);
+ }
+ else {
+ const float *orco = pMesh->orco[pMesh->mloop[loop_index].v];
+ map_to_sphere(&r_uv[0], &r_uv[1], orco[0], orco[1], orco[2]);
+ }
+}
+
+static void dm_ts_GetNormal(
+ const SMikkTSpaceContext *pContext, float r_no[3],
+ const int face_num, const int vert_index)
+{
+ //assert(vert_index >= 0 && vert_index < 4);
+ SGLSLMeshToTangent *pMesh = (SGLSLMeshToTangent *) pContext->m_pUserData;
+ const MLoopTri *lt;
+ uint loop_index;
+
+#ifdef USE_LOOPTRI_DETECT_QUADS
+ if (pMesh->face_as_quad_map) {
+ lt = &pMesh->looptri[pMesh->face_as_quad_map[face_num]];
+ const MPoly *mp = &pMesh->mpoly[lt->poly];
+ if (mp->totloop == 4) {
+ loop_index = (uint)(mp->loopstart + vert_index);
+ goto finally;
+ }
+ /* fall through to regular triangle */
+ }
+ else {
+ lt = &pMesh->looptri[face_num];
+ }
+#else
+ lt = &pMesh->looptri[face_num];
+#endif
+ loop_index = lt->tri[vert_index];
+
+finally:
+ if (pMesh->precomputedLoopNormals) {
+ copy_v3_v3(r_no, pMesh->precomputedLoopNormals[loop_index]);
+ }
+ else if ((pMesh->mpoly[lt->poly].flag & ME_SMOOTH) == 0) { /* flat */
+ if (pMesh->precomputedFaceNormals) {
+ copy_v3_v3(r_no, pMesh->precomputedFaceNormals[lt->poly]);
+ }
+ else {
+#ifdef USE_LOOPTRI_DETECT_QUADS
+ const MPoly *mp = &pMesh->mpoly[lt->poly];
+ if (mp->totloop == 4) {
+ normal_quad_v3(
+ r_no,
+ pMesh->mvert[pMesh->mloop[mp->loopstart + 0].v].co,
+ pMesh->mvert[pMesh->mloop[mp->loopstart + 1].v].co,
+ pMesh->mvert[pMesh->mloop[mp->loopstart + 2].v].co,
+ pMesh->mvert[pMesh->mloop[mp->loopstart + 3].v].co);
+ }
+ else
+#endif
+ {
+ normal_tri_v3(
+ r_no,
+ pMesh->mvert[pMesh->mloop[lt->tri[0]].v].co,
+ pMesh->mvert[pMesh->mloop[lt->tri[1]].v].co,
+ pMesh->mvert[pMesh->mloop[lt->tri[2]].v].co);
+ }
+ }
+ }
+ else {
+ const short *no = pMesh->mvert[pMesh->mloop[loop_index].v].no;
+ normal_short_to_float_v3(r_no, no);
+ }
+}
+
+static void dm_ts_SetTSpace(
+ const SMikkTSpaceContext *pContext, const float fvTangent[3], const float fSign,
+ const int face_num, const int vert_index)
+{
+ //assert(vert_index >= 0 && vert_index < 4);
+ SGLSLMeshToTangent *pMesh = (SGLSLMeshToTangent *) pContext->m_pUserData;
+ const MLoopTri *lt;
+ uint loop_index;
+
+#ifdef USE_LOOPTRI_DETECT_QUADS
+ if (pMesh->face_as_quad_map) {
+ lt = &pMesh->looptri[pMesh->face_as_quad_map[face_num]];
+ const MPoly *mp = &pMesh->mpoly[lt->poly];
+ if (mp->totloop == 4) {
+ loop_index = (uint)(mp->loopstart + vert_index);
+ goto finally;
+ }
+ /* fall through to regular triangle */
+ }
+ else {
+ lt = &pMesh->looptri[face_num];
+ }
+#else
+ lt = &pMesh->looptri[face_num];
+#endif
+ loop_index = lt->tri[vert_index];
+
+ float *pRes;
+
+finally:
+ pRes = pMesh->tangent[loop_index];
+ copy_v3_v3(pRes, fvTangent);
+ pRes[3] = fSign;
+}
+
+static void DM_calc_loop_tangents_thread(TaskPool * __restrict UNUSED(pool), void *taskdata, int UNUSED(threadid))
+{
+ struct SGLSLMeshToTangent *mesh2tangent = taskdata;
+ /* new computation method */
+ {
+ SMikkTSpaceContext sContext = {NULL};
+ SMikkTSpaceInterface sInterface = {NULL};
+
+ sContext.m_pUserData = mesh2tangent;
+ sContext.m_pInterface = &sInterface;
+ sInterface.m_getNumFaces = dm_ts_GetNumFaces;
+ sInterface.m_getNumVerticesOfFace = dm_ts_GetNumVertsOfFace;
+ sInterface.m_getPosition = dm_ts_GetPosition;
+ sInterface.m_getTexCoord = dm_ts_GetTextureCoordinate;
+ sInterface.m_getNormal = dm_ts_GetNormal;
+ sInterface.m_setTSpaceBasic = dm_ts_SetTSpace;
+
+ /* 0 if failed */
+ genTangSpaceDefault(&sContext);
+ }
+}
+
+void BKE_mesh_add_loop_tangent_named_layer_for_uv(
+ CustomData *uv_data, CustomData *tan_data, int numLoopData,
+ const char *layer_name)
+{
+ if (CustomData_get_named_layer_index(tan_data, CD_TANGENT, layer_name) == -1 &&
+ CustomData_get_named_layer_index(uv_data, CD_MLOOPUV, layer_name) != -1)
+ {
+ CustomData_add_layer_named(
+ tan_data, CD_TANGENT, CD_CALLOC, NULL,
+ numLoopData, layer_name);
+ }
+}
+
+/**
+ * Here we get some useful information such as active uv layer name and search if it is already in tangent_names.
+ * Also, we calculate tangent_mask that works as a descriptor of tangents state.
+ * If tangent_mask has changed, then recalculate tangents.
+ */
+void BKE_mesh_calc_loop_tangent_step_0(
+ const CustomData *loopData, bool calc_active_tangent,
+ const char (*tangent_names)[MAX_NAME], int tangent_names_count,
+ bool *rcalc_act, bool *rcalc_ren, int *ract_uv_n, int *rren_uv_n,
+ char *ract_uv_name, char *rren_uv_name, short *rtangent_mask) {
+ /* Active uv in viewport */
+ int layer_index = CustomData_get_layer_index(loopData, CD_MLOOPUV);
+ *ract_uv_n = CustomData_get_active_layer(loopData, CD_MLOOPUV);
+ ract_uv_name[0] = 0;
+ if (*ract_uv_n != -1) {
+ strcpy(ract_uv_name, loopData->layers[*ract_uv_n + layer_index].name);
+ }
+
+ /* Active tangent in render */
+ *rren_uv_n = CustomData_get_render_layer(loopData, CD_MLOOPUV);
+ rren_uv_name[0] = 0;
+ if (*rren_uv_n != -1) {
+ strcpy(rren_uv_name, loopData->layers[*rren_uv_n + layer_index].name);
+ }
+
+ /* If active tangent not in tangent_names we take it into account */
+ *rcalc_act = false;
+ *rcalc_ren = false;
+ for (int i = 0; i < tangent_names_count; i++) {
+ if (tangent_names[i][0] == 0) {
+ calc_active_tangent = true;
+ }
+ }
+ if (calc_active_tangent) {
+ *rcalc_act = true;
+ *rcalc_ren = true;
+ for (int i = 0; i < tangent_names_count; i++) {
+ if (STREQ(ract_uv_name, tangent_names[i]))
+ *rcalc_act = false;
+ if (STREQ(rren_uv_name, tangent_names[i]))
+ *rcalc_ren = false;
+ }
+ }
+ *rtangent_mask = 0;
+
+ const int uv_layer_num = CustomData_number_of_layers(loopData, CD_MLOOPUV);
+ for (int n = 0; n < uv_layer_num; n++) {
+ const char *name = CustomData_get_layer_name(loopData, CD_MLOOPUV, n);
+ bool add = false;
+ for (int i = 0; i < tangent_names_count; i++) {
+ if (tangent_names[i][0] && STREQ(tangent_names[i], name)) {
+ add = true;
+ break;
+ }
+ }
+ if (!add && ((*rcalc_act && ract_uv_name[0] && STREQ(ract_uv_name, name)) ||
+ (*rcalc_ren && rren_uv_name[0] && STREQ(rren_uv_name, name))))
+ {
+ add = true;
+ }
+ if (add)
+ *rtangent_mask |= (short)(1 << n);
+ }
+
+ if (uv_layer_num == 0)
+ *rtangent_mask |= DM_TANGENT_MASK_ORCO;
+}
+
+/**
+ * See: #BKE_editmesh_loop_tangent_calc (matching logic).
+ */
+void BKE_mesh_calc_loop_tangent_ex(
+ const MVert *mvert,
+ const MPoly *mpoly, const uint mpoly_len,
+ const MLoop *mloop,
+ const MLoopTri *looptri,
+ const uint looptri_len,
+
+ CustomData *loopdata,
+ bool calc_active_tangent,
+ const char (*tangent_names)[MAX_NAME], int tangent_names_len,
+ const float (*poly_normals)[3],
+ const float (*loop_normals)[3],
+ const float (*vert_orco)[3],
+ /* result */
+ CustomData *loopdata_out,
+ const uint loopdata_out_len,
+ short *tangent_mask_curr_p)
+{
+ int act_uv_n = -1;
+ int ren_uv_n = -1;
+ bool calc_act = false;
+ bool calc_ren = false;
+ char act_uv_name[MAX_NAME];
+ char ren_uv_name[MAX_NAME];
+ short tangent_mask = 0;
+ short tangent_mask_curr = *tangent_mask_curr_p;
+
+ BKE_mesh_calc_loop_tangent_step_0(
+ loopdata, calc_active_tangent, tangent_names, tangent_names_len,
+ &calc_act, &calc_ren, &act_uv_n, &ren_uv_n, act_uv_name, ren_uv_name, &tangent_mask);
+ if ((tangent_mask_curr | tangent_mask) != tangent_mask_curr) {
+ /* Check we have all the needed layers */
+ /* Allocate needed tangent layers */
+ for (int i = 0; i < tangent_names_len; i++)
+ if (tangent_names[i][0])
+ BKE_mesh_add_loop_tangent_named_layer_for_uv(loopdata, loopdata_out, (int)loopdata_out_len, tangent_names[i]);
+ if ((tangent_mask & DM_TANGENT_MASK_ORCO) && CustomData_get_named_layer_index(loopdata, CD_TANGENT, "") == -1)
+ CustomData_add_layer_named(loopdata_out, CD_TANGENT, CD_CALLOC, NULL, (int)loopdata_out_len, "");
+ if (calc_act && act_uv_name[0])
+ BKE_mesh_add_loop_tangent_named_layer_for_uv(loopdata, loopdata_out, (int)loopdata_out_len, act_uv_name);
+ if (calc_ren && ren_uv_name[0])
+ BKE_mesh_add_loop_tangent_named_layer_for_uv(loopdata, loopdata_out, (int)loopdata_out_len, ren_uv_name);
+
+#ifdef USE_LOOPTRI_DETECT_QUADS
+ int num_face_as_quad_map;
+ int *face_as_quad_map = NULL;
+
+ /* map faces to quads */
+ if (looptri_len != mpoly_len) {
+ /* over alloc, since we dont know how many ngon or quads we have */
+
+ /* map fake face index to looptri */
+ face_as_quad_map = MEM_mallocN(sizeof(int) * looptri_len, __func__);
+ int k, j;
+ for (k = 0, j = 0; j < (int)looptri_len; k++, j++) {
+ face_as_quad_map[k] = j;
+ /* step over all quads */
+ if (mpoly[looptri[j].poly].totloop == 4) {
+ j++; /* skips the nest looptri */
+ }
+ }
+ num_face_as_quad_map = k;
+ }
+ else {
+ num_face_as_quad_map = (int)looptri_len;
+ }
+#endif
+
+ /* Calculation */
+ if (looptri_len != 0) {
+ TaskScheduler *scheduler = BLI_task_scheduler_get();
+ TaskPool *task_pool;
+ task_pool = BLI_task_pool_create(scheduler, NULL);
+
+ tangent_mask_curr = 0;
+ /* Calculate tangent layers */
+ SGLSLMeshToTangent data_array[MAX_MTFACE];
+ const int tangent_layer_num = CustomData_number_of_layers(loopdata_out, CD_TANGENT);
+ for (int n = 0; n < tangent_layer_num; n++) {
+ int index = CustomData_get_layer_index_n(loopdata_out, CD_TANGENT, n);
+ BLI_assert(n < MAX_MTFACE);
+ SGLSLMeshToTangent *mesh2tangent = &data_array[n];
+ mesh2tangent->numTessFaces = (int)looptri_len;
+#ifdef USE_LOOPTRI_DETECT_QUADS
+ mesh2tangent->face_as_quad_map = face_as_quad_map;
+ mesh2tangent->num_face_as_quad_map = num_face_as_quad_map;
+#endif
+ mesh2tangent->mvert = mvert;
+ mesh2tangent->mpoly = mpoly;
+ mesh2tangent->mloop = mloop;
+ mesh2tangent->looptri = looptri;
+ /* Note, we assume we do have tessellated loop normals at this point (in case it is object-enabled),
+ * have to check this is valid...
+ */
+ mesh2tangent->precomputedLoopNormals = loop_normals;
+ mesh2tangent->precomputedFaceNormals = poly_normals;
+
+ mesh2tangent->orco = NULL;
+ mesh2tangent->mloopuv = CustomData_get_layer_named(loopdata, CD_MLOOPUV, loopdata_out->layers[index].name);
+
+ /* Fill the resulting tangent_mask */
+ if (!mesh2tangent->mloopuv) {
+ mesh2tangent->orco = vert_orco;
+ if (!mesh2tangent->orco)
+ continue;
+
+ tangent_mask_curr |= DM_TANGENT_MASK_ORCO;
+ }
+ else {
+ int uv_ind = CustomData_get_named_layer_index(loopdata, CD_MLOOPUV, loopdata_out->layers[index].name);
+ int uv_start = CustomData_get_layer_index(loopdata, CD_MLOOPUV);
+ BLI_assert(uv_ind != -1 && uv_start != -1);
+ BLI_assert(uv_ind - uv_start < MAX_MTFACE);
+ tangent_mask_curr |= (short)(1 << (uv_ind - uv_start));
+ }
+
+ mesh2tangent->tangent = loopdata_out->layers[index].data;
+ BLI_task_pool_push(task_pool, DM_calc_loop_tangents_thread, mesh2tangent, false, TASK_PRIORITY_LOW);
+ }
+
+ BLI_assert(tangent_mask_curr == tangent_mask);
+ BLI_task_pool_work_and_wait(task_pool);
+ BLI_task_pool_free(task_pool);
+ }
+ else {
+ tangent_mask_curr = tangent_mask;
+ }
+#ifdef USE_LOOPTRI_DETECT_QUADS
+ if (face_as_quad_map) {
+ MEM_freeN(face_as_quad_map);
+ }
+#undef USE_LOOPTRI_DETECT_QUADS
+
+#endif
+
+ *tangent_mask_curr_p = tangent_mask_curr;
+
+ /* Update active layer index */
+ int act_uv_index = CustomData_get_layer_index_n(loopdata, CD_MLOOPUV, act_uv_n);
+ if (act_uv_index != -1) {
+ int tan_index = CustomData_get_named_layer_index(loopdata, CD_TANGENT, loopdata->layers[act_uv_index].name);
+ CustomData_set_layer_active_index(loopdata, CD_TANGENT, tan_index);
+ }/* else tangent has been built from orco */
+
+ /* Update render layer index */
+ int ren_uv_index = CustomData_get_layer_index_n(loopdata, CD_MLOOPUV, ren_uv_n);
+ if (ren_uv_index != -1) {
+ int tan_index = CustomData_get_named_layer_index(loopdata, CD_TANGENT, loopdata->layers[ren_uv_index].name);
+ CustomData_set_layer_render_index(loopdata, CD_TANGENT, tan_index);
+ }/* else tangent has been built from orco */
+ }
+}
+
+/** \} */
diff --git a/source/blender/blenkernel/intern/mesh_validate.c b/source/blender/blenkernel/intern/mesh_validate.c
index 4aeddbb4c45..54de843bc64 100644
--- a/source/blender/blenkernel/intern/mesh_validate.c
+++ b/source/blender/blenkernel/intern/mesh_validate.c
@@ -43,10 +43,11 @@
#include "BLI_math_vector.h"
#include "BKE_deform.h"
-#include "BKE_depsgraph.h"
#include "BKE_DerivedMesh.h"
#include "BKE_mesh.h"
+#include "DEG_depsgraph.h"
+
#include "MEM_guardedalloc.h"
/* loop v/e are unsigned, so using max uint_32 value as invalid marker... */
@@ -936,7 +937,7 @@ bool BKE_mesh_validate_all_customdata(CustomData *vdata, CustomData *edata,
{
bool is_valid = true;
bool is_change_v, is_change_e, is_change_l, is_change_p;
- int tot_texpoly, tot_uvloop, tot_vcolloop;
+ int tot_uvloop, tot_vcolloop;
CustomDataMask mask = check_meshmask ? CD_MASK_MESH : 0;
is_valid &= mesh_validate_customdata(vdata, mask, do_verbose, do_fixes, &is_change_v);
@@ -944,17 +945,8 @@ bool BKE_mesh_validate_all_customdata(CustomData *vdata, CustomData *edata,
is_valid &= mesh_validate_customdata(ldata, mask, do_verbose, do_fixes, &is_change_l);
is_valid &= mesh_validate_customdata(pdata, mask, do_verbose, do_fixes, &is_change_p);
- tot_texpoly = CustomData_number_of_layers(pdata, CD_MTEXPOLY);
tot_uvloop = CustomData_number_of_layers(ldata, CD_MLOOPUV);
tot_vcolloop = CustomData_number_of_layers(ldata, CD_MLOOPCOL);
- if (tot_texpoly != tot_uvloop) {
- PRINT_ERR("\tCustomDataLayer mismatch, tot_texpoly(%d), tot_uvloop(%d)\n",
- tot_texpoly, tot_uvloop);
- }
- if (tot_texpoly > MAX_MTFACE) {
- PRINT_ERR("\tMore UV layers than %d allowed, %d last ones won't be available for render, shaders, etc.\n",
- MAX_MTFACE, tot_texpoly - MAX_MTFACE);
- }
if (tot_uvloop > MAX_MTFACE) {
PRINT_ERR("\tMore UV layers than %d allowed, %d last ones won't be available for render, shaders, etc.\n",
MAX_MTFACE, tot_uvloop - MAX_MTFACE);
@@ -965,18 +957,10 @@ bool BKE_mesh_validate_all_customdata(CustomData *vdata, CustomData *edata,
}
/* check indices of clone/stencil */
- if (do_fixes && CustomData_get_clone_layer(pdata, CD_MTEXPOLY) >= tot_texpoly) {
- CustomData_set_layer_clone(pdata, CD_MTEXPOLY, 0);
- is_change_p = true;
- }
if (do_fixes && CustomData_get_clone_layer(ldata, CD_MLOOPUV) >= tot_uvloop) {
CustomData_set_layer_clone(ldata, CD_MLOOPUV, 0);
is_change_l = true;
}
- if (do_fixes && CustomData_get_stencil_layer(pdata, CD_MTEXPOLY) >= tot_texpoly) {
- CustomData_set_layer_stencil(pdata, CD_MTEXPOLY, 0);
- is_change_p = true;
- }
if (do_fixes && CustomData_get_stencil_layer(ldata, CD_MLOOPUV) >= tot_uvloop) {
CustomData_set_layer_stencil(ldata, CD_MLOOPUV, 0);
is_change_l = true;
@@ -1019,7 +1003,7 @@ int BKE_mesh_validate(Mesh *me, const int do_verbose, const int cddata_check_mas
&changed);
if (changed) {
- DAG_id_tag_update(&me->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&me->id, OB_RECALC_DATA);
return true;
}
else {
@@ -1028,64 +1012,6 @@ int BKE_mesh_validate(Mesh *me, const int do_verbose, const int cddata_check_mas
}
/**
- * Duplicate of BM_mesh_cd_validate() for Mesh data.
- */
-void BKE_mesh_cd_validate(Mesh *me)
-{
- int totlayer_mtex = CustomData_number_of_layers(&me->pdata, CD_MTEXPOLY);
- int totlayer_uv = CustomData_number_of_layers(&me->ldata, CD_MLOOPUV);
- int totlayer_mcol = CustomData_number_of_layers(&me->ldata, CD_MLOOPCOL);
- int mtex_index = CustomData_get_layer_index(&me->pdata, CD_MTEXPOLY);
- int uv_index = CustomData_get_layer_index(&me->ldata, CD_MLOOPUV);
- int i;
-
- /* XXX For now, do not delete those, just warn they are not really usable. */
- if (UNLIKELY(totlayer_mtex > MAX_MTFACE)) {
- printf("WARNING! More UV layers than %d allowed, %d last ones won't be available for render, shaders, etc.\n",
- MAX_MTFACE, totlayer_mtex - MAX_MTFACE);
- }
- if (UNLIKELY(totlayer_uv > MAX_MTFACE)) {
- printf("WARNING! More UV layers than %d allowed, %d last ones won't be available for render, shaders, etc.\n",
- MAX_MTFACE, totlayer_uv - MAX_MTFACE);
- }
- if (UNLIKELY(totlayer_mcol > MAX_MCOL)) {
- printf("WARNING! More VCol layers than %d allowed, %d last ones won't be available for render, shaders, etc.\n",
- MAX_MCOL, totlayer_mcol - MAX_MCOL);
- }
-
- if (LIKELY(totlayer_mtex == totlayer_uv)) {
- /* pass */
- }
- else if (totlayer_mtex < totlayer_uv) {
- do {
- const char *from_name = me->ldata.layers[uv_index + totlayer_mtex].name;
- CustomData_add_layer_named(&me->pdata, CD_MTEXPOLY, CD_DEFAULT, NULL, me->totpoly, from_name);
- CustomData_set_layer_unique_name(&me->pdata, totlayer_mtex);
- } while (totlayer_uv != ++totlayer_mtex);
- mtex_index = CustomData_get_layer_index(&me->pdata, CD_MTEXPOLY);
- }
- else if (totlayer_uv < totlayer_mtex) {
- do {
- const char *from_name = me->pdata.layers[mtex_index + totlayer_uv].name;
- CustomData_add_layer_named(&me->ldata, CD_MLOOPUV, CD_DEFAULT, NULL, me->totloop, from_name);
- CustomData_set_layer_unique_name(&me->ldata, totlayer_uv);
- } while (totlayer_mtex != ++totlayer_uv);
- uv_index = CustomData_get_layer_index(&me->ldata, CD_MLOOPUV);
- }
-
- BLI_assert(totlayer_mtex == totlayer_uv);
-
- /* Check uv/tex names match as well!!! */
- for (i = 0; i < totlayer_mtex; i++, mtex_index++, uv_index++) {
- const char *name_src = me->pdata.layers[mtex_index].name;
- const char *name_dst = me->ldata.layers[uv_index].name;
- if (!STREQ(name_src, name_dst)) {
- BKE_mesh_uv_cdlayer_rename_index(me, mtex_index, uv_index, -1, name_src, false);
- }
- }
-}
-
-/**
* Check all material indices of polygons are valid, invalid ones are set to 0.
* \returns is_valid.
*/
@@ -1105,7 +1031,7 @@ int BKE_mesh_validate_material_indices(Mesh *me)
}
if (!is_valid) {
- DAG_id_tag_update(&me->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&me->id, OB_RECALC_DATA);
return true;
}
else {
diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c
index d7a24f90dbe..1604a017054 100644
--- a/source/blender/blenkernel/intern/modifier.c
+++ b/source/blender/blenkernel/intern/modifier.c
@@ -69,6 +69,8 @@
#include "BKE_main.h"
/* end */
+#include "DEG_depsgraph.h"
+
#include "MOD_modifiertypes.h"
static ModifierTypeInfo *modifier_types[NUM_MODIFIER_TYPES] = {NULL};
@@ -660,15 +662,15 @@ bool modifier_isCorrectableDeformed(ModifierData *md)
return (mti->deformMatricesEM != NULL);
}
-bool modifiers_isCorrectableDeformed(struct Scene *scene, Object *ob)
+bool modifiers_isCorrectableDeformed(const EvaluationContext *eval_ctx, struct Scene *scene, Object *ob)
{
VirtualModifierData virtualModifierData;
ModifierData *md = modifiers_getVirtualModifierList(ob, &virtualModifierData);
int required_mode = eModifierMode_Realtime;
- if (ob->mode == OB_MODE_EDIT)
+ if (eval_ctx->object_mode == OB_MODE_EDIT) {
required_mode |= eModifierMode_Editmode;
-
+ }
for (; md; md = md->next) {
if (!modifier_isEnabled(scene, md, required_mode)) {
/* pass */
@@ -762,8 +764,8 @@ void modifier_path_init(char *path, int path_maxlen, const char *name)
/* wrapper around ModifierTypeInfo.applyModifier that ensures valid normals */
struct DerivedMesh *modwrap_applyModifier(
- ModifierData *md, Object *ob,
- struct DerivedMesh *dm,
+ ModifierData *md, const struct EvaluationContext *eval_ctx,
+ Object *ob, struct DerivedMesh *dm,
ModifierApplyFlag flag)
{
const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
@@ -772,12 +774,12 @@ struct DerivedMesh *modwrap_applyModifier(
if (mti->dependsOnNormals && mti->dependsOnNormals(md)) {
DM_ensure_normals(dm);
}
- return mti->applyModifier(md, ob, dm, flag);
+ return mti->applyModifier(md, eval_ctx, ob, dm, flag);
}
struct DerivedMesh *modwrap_applyModifierEM(
- ModifierData *md, Object *ob,
- struct BMEditMesh *em,
+ ModifierData *md, const struct EvaluationContext *eval_ctx,
+ Object *ob, struct BMEditMesh *em,
DerivedMesh *dm,
ModifierApplyFlag flag)
{
@@ -787,12 +789,12 @@ struct DerivedMesh *modwrap_applyModifierEM(
if (mti->dependsOnNormals && mti->dependsOnNormals(md)) {
DM_ensure_normals(dm);
}
- return mti->applyModifierEM(md, ob, em, dm, flag);
+ return mti->applyModifierEM(md, eval_ctx, ob, em, dm, flag);
}
void modwrap_deformVerts(
- ModifierData *md, Object *ob,
- DerivedMesh *dm,
+ ModifierData *md, const struct EvaluationContext *eval_ctx,
+ Object *ob, DerivedMesh *dm,
float (*vertexCos)[3], int numVerts,
ModifierApplyFlag flag)
{
@@ -802,11 +804,11 @@ void modwrap_deformVerts(
if (dm && mti->dependsOnNormals && mti->dependsOnNormals(md)) {
DM_ensure_normals(dm);
}
- mti->deformVerts(md, ob, dm, vertexCos, numVerts, flag);
+ mti->deformVerts(md, eval_ctx, ob, dm, vertexCos, numVerts, flag);
}
void modwrap_deformVertsEM(
- ModifierData *md, Object *ob,
+ ModifierData *md, const struct EvaluationContext *eval_ctx, Object *ob,
struct BMEditMesh *em, DerivedMesh *dm,
float (*vertexCos)[3], int numVerts)
{
@@ -816,6 +818,6 @@ void modwrap_deformVertsEM(
if (dm && mti->dependsOnNormals && mti->dependsOnNormals(md)) {
DM_ensure_normals(dm);
}
- mti->deformVertsEM(md, ob, em, dm, vertexCos, numVerts);
+ mti->deformVertsEM(md, eval_ctx, ob, em, dm, vertexCos, numVerts);
}
/* end modifier callback wrappers */
diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c
index 9c8fc9bfd0c..e7c36685c42 100644
--- a/source/blender/blenkernel/intern/multires.c
+++ b/source/blender/blenkernel/intern/multires.c
@@ -60,6 +60,8 @@
#include "BKE_object.h"
+#include "DEG_depsgraph.h"
+
#include "CCGSubSurf.h"
#include <math.h>
@@ -277,14 +279,14 @@ static MDisps *multires_mdisps_initialize_hidden(Mesh *me, int level)
return mdisps;
}
-DerivedMesh *get_multires_dm(Scene *scene, MultiresModifierData *mmd, Object *ob)
+DerivedMesh *get_multires_dm(const struct EvaluationContext *eval_ctx, Scene *scene, MultiresModifierData *mmd, Object *ob)
{
ModifierData *md = (ModifierData *)mmd;
const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
- DerivedMesh *tdm = mesh_get_derived_deform(scene, ob, CD_MASK_BAREMESH);
+ DerivedMesh *tdm = mesh_get_derived_deform(eval_ctx, scene, ob, CD_MASK_BAREMESH);
DerivedMesh *dm;
- dm = mti->applyModifier(md, ob, tdm, MOD_APPLY_USECACHE | MOD_APPLY_IGNORE_SIMPLIFY);
+ dm = mti->applyModifier(md, eval_ctx, ob, tdm, MOD_APPLY_USECACHE | MOD_APPLY_IGNORE_SIMPLIFY);
if (dm == tdm) {
dm = CDDM_copy(tdm);
}
@@ -336,12 +338,13 @@ MultiresModifierData *get_multires_modifier(Scene *scene, Object *ob, bool use_f
return mmd;
}
-static int multires_get_level(Object *ob, MultiresModifierData *mmd,
- bool render, bool ignore_simplify)
+static int multires_get_level(
+ MultiresModifierData *mmd,
+ bool render, bool ignore_simplify, eObjectMode object_mode)
{
if (render)
return (mmd->modifier.scene) ? get_render_subsurf_level(&mmd->modifier.scene->r, mmd->renderlvl, true) : mmd->renderlvl;
- else if (ob->mode == OB_MODE_SCULPT)
+ else if (object_mode == OB_MODE_SCULPT)
return mmd->sculptlvl;
else if (ignore_simplify)
return mmd->lvl;
@@ -349,12 +352,13 @@ static int multires_get_level(Object *ob, MultiresModifierData *mmd,
return (mmd->modifier.scene) ? get_render_subsurf_level(&mmd->modifier.scene->r, mmd->lvl, false) : mmd->lvl;
}
-void multires_set_tot_level(Object *ob, MultiresModifierData *mmd, int lvl)
+void multires_set_tot_level(MultiresModifierData *mmd, int lvl, eObjectMode object_mode)
{
mmd->totlvl = lvl;
- if (ob->mode != OB_MODE_SCULPT)
+ if (object_mode != OB_MODE_SCULPT) {
mmd->lvl = CLAMPIS(MAX2(mmd->lvl, lvl), 0, mmd->totlvl);
+ }
mmd->sculptlvl = CLAMPIS(MAX2(mmd->sculptlvl, lvl), 0, mmd->totlvl);
mmd->renderlvl = CLAMPIS(MAX2(mmd->renderlvl, lvl), 0, mmd->totlvl);
@@ -392,16 +396,16 @@ void multires_force_external_reload(Object *ob)
multires_force_update(ob);
}
-void multires_force_render_update(Object *ob)
+void multires_force_render_update(Object *ob, eObjectMode object_mode)
{
- if (ob && (ob->mode & OB_MODE_SCULPT) && modifiers_findByType(ob, eModifierType_Multires))
+ if (ob && (object_mode & OB_MODE_SCULPT) && modifiers_findByType(ob, eModifierType_Multires))
multires_force_update(ob);
}
-int multiresModifier_reshapeFromDM(Scene *scene, MultiresModifierData *mmd,
+int multiresModifier_reshapeFromDM(const struct EvaluationContext *eval_ctx, Scene *scene, MultiresModifierData *mmd,
Object *ob, DerivedMesh *srcdm)
{
- DerivedMesh *mrdm = get_multires_dm(scene, mmd, ob);
+ DerivedMesh *mrdm = get_multires_dm(eval_ctx, scene, mmd, ob);
if (mrdm && srcdm && mrdm->getNumVerts(mrdm) == srcdm->getNumVerts(srcdm)) {
multires_mvert_to_ss(mrdm, srcdm->getVertArray(srcdm));
@@ -420,13 +424,13 @@ int multiresModifier_reshapeFromDM(Scene *scene, MultiresModifierData *mmd,
}
/* Returns 1 on success, 0 if the src's totvert doesn't match */
-int multiresModifier_reshape(Scene *scene, MultiresModifierData *mmd, Object *dst, Object *src)
+int multiresModifier_reshape(const struct EvaluationContext *eval_ctx, Scene *scene, MultiresModifierData *mmd, Object *dst, Object *src)
{
- DerivedMesh *srcdm = mesh_get_derived_final(scene, src, CD_MASK_BAREMESH);
- return multiresModifier_reshapeFromDM(scene, mmd, dst, srcdm);
+ DerivedMesh *srcdm = mesh_get_derived_final(eval_ctx, scene, src, CD_MASK_BAREMESH);
+ return multiresModifier_reshapeFromDM(eval_ctx, scene, mmd, dst, srcdm);
}
-int multiresModifier_reshapeFromDeformMod(Scene *scene, MultiresModifierData *mmd,
+int multiresModifier_reshapeFromDeformMod(const struct EvaluationContext *eval_ctx, Scene *scene, MultiresModifierData *mmd,
Object *ob, ModifierData *md)
{
const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
@@ -434,16 +438,16 @@ int multiresModifier_reshapeFromDeformMod(Scene *scene, MultiresModifierData *mm
int numVerts, result;
float (*deformedVerts)[3];
- if (multires_get_level(ob, mmd, false, true) == 0)
+ if (multires_get_level(mmd, false, true, eval_ctx->object_mode) == 0)
return 0;
/* Create DerivedMesh for deformation modifier */
- dm = get_multires_dm(scene, mmd, ob);
+ dm = get_multires_dm(eval_ctx, scene, mmd, ob);
numVerts = dm->getNumVerts(dm);
deformedVerts = MEM_malloc_arrayN(numVerts, sizeof(float[3]), "multiresReshape_deformVerts");
dm->getVertCos(dm, deformedVerts);
- mti->deformVerts(md, ob, dm, deformedVerts, numVerts, 0);
+ mti->deformVerts(md, eval_ctx, ob, dm, deformedVerts, numVerts, 0);
ndm = CDDM_copy(dm);
CDDM_apply_vert_coords(ndm, deformedVerts);
@@ -452,7 +456,7 @@ int multiresModifier_reshapeFromDeformMod(Scene *scene, MultiresModifierData *mm
dm->release(dm);
/* Reshaping */
- result = multiresModifier_reshapeFromDM(scene, mmd, ob, ndm);
+ result = multiresModifier_reshapeFromDM(eval_ctx, scene, mmd, ob, ndm);
/* Cleanup */
ndm->release(ndm);
@@ -614,7 +618,7 @@ static void multires_grid_paint_mask_downsample(GridPaintMask *gpm, int level)
}
}
-static void multires_del_higher(MultiresModifierData *mmd, Object *ob, int lvl)
+static void multires_del_higher(MultiresModifierData *mmd, Object *ob, int lvl, eObjectMode object_mode)
{
Mesh *me = (Mesh *)ob->data;
int levels = mmd->totlvl - lvl;
@@ -676,14 +680,14 @@ static void multires_del_higher(MultiresModifierData *mmd, Object *ob, int lvl)
}
}
- multires_set_tot_level(ob, mmd, lvl);
+ multires_set_tot_level(mmd, lvl, object_mode);
}
/* (direction = 1) for delete higher, (direction = 0) for lower (not implemented yet) */
-void multiresModifier_del_levels(MultiresModifierData *mmd, Object *ob, int direction)
+void multiresModifier_del_levels(MultiresModifierData *mmd, Object *ob, int direction, eObjectMode object_mode)
{
Mesh *me = BKE_mesh_from_object(ob);
- int lvl = multires_get_level(ob, mmd, false, true);
+ int lvl = multires_get_level(mmd, false, true, object_mode);
int levels = mmd->totlvl - lvl;
MDisps *mdisps;
@@ -694,13 +698,14 @@ void multiresModifier_del_levels(MultiresModifierData *mmd, Object *ob, int dire
multires_force_update(ob);
if (mdisps && levels > 0 && direction == 1) {
- multires_del_higher(mmd, ob, lvl);
+ multires_del_higher(mmd, ob, lvl, object_mode);
}
- multires_set_tot_level(ob, mmd, lvl);
+ multires_set_tot_level(mmd, lvl, object_mode);
}
-static DerivedMesh *multires_dm_create_local(Object *ob, DerivedMesh *dm, int lvl, int totlvl, int simple, bool alloc_paint_mask)
+static DerivedMesh *multires_dm_create_local(
+ Object *ob, DerivedMesh *dm, int lvl, int totlvl, int simple, bool alloc_paint_mask, eObjectMode object_mode)
{
MultiresModifierData mmd = {{NULL}};
MultiresFlags flags = MULTIRES_USE_LOCAL_MMD;
@@ -714,10 +719,12 @@ static DerivedMesh *multires_dm_create_local(Object *ob, DerivedMesh *dm, int lv
if (alloc_paint_mask)
flags |= MULTIRES_ALLOC_PAINT_MASK;
- return multires_make_derived_from_derived(dm, &mmd, ob, flags);
+ return multires_make_derived_from_derived(dm, &mmd, ob, flags, object_mode);
}
-static DerivedMesh *subsurf_dm_create_local(Object *ob, DerivedMesh *dm, int lvl, int simple, int optimal, int plain_uv, int alloc_paint_mask)
+static DerivedMesh *subsurf_dm_create_local(
+ DerivedMesh *dm, int lvl, int simple,
+ int optimal, int plain_uv, int alloc_paint_mask, eObjectMode object_mode)
{
SubsurfModifierData smd = {{NULL}};
SubsurfFlags flags = 0;
@@ -730,7 +737,7 @@ static DerivedMesh *subsurf_dm_create_local(Object *ob, DerivedMesh *dm, int lvl
if (optimal)
smd.flags |= eSubsurfModifierFlag_ControlEdges;
- if (ob->mode & OB_MODE_EDIT)
+ if (object_mode & OB_MODE_EDIT)
flags |= SUBSURF_IN_EDIT_MODE;
if (alloc_paint_mask)
@@ -750,7 +757,7 @@ static float v3_dist_from_plane(float v[3], float center[3], float no[3])
return dot_v3v3(s, no);
}
-void multiresModifier_base_apply(MultiresModifierData *mmd, Object *ob)
+void multiresModifier_base_apply(MultiresModifierData *mmd, Object *ob, eObjectMode object_mode)
{
DerivedMesh *cddm, *dispdm, *origdm;
Mesh *me;
@@ -772,7 +779,7 @@ void multiresModifier_base_apply(MultiresModifierData *mmd, Object *ob)
/* generate highest level with displacements */
cddm = CDDM_from_mesh(me);
DM_set_only_copy(cddm, CD_MASK_BAREMESH);
- dispdm = multires_dm_create_local(ob, cddm, totlvl, totlvl, 0, 0);
+ dispdm = multires_dm_create_local(ob, cddm, totlvl, totlvl, 0, 0, object_mode);
cddm->release(cddm);
/* copy the new locations of the base verts into the mesh */
@@ -868,7 +875,9 @@ void multiresModifier_base_apply(MultiresModifierData *mmd, Object *ob)
/* subdivide the mesh to highest level without displacements */
cddm = CDDM_from_mesh(me);
DM_set_only_copy(cddm, CD_MASK_BAREMESH);
- origdm = subsurf_dm_create_local(ob, cddm, totlvl, 0, 0, mmd->flags & eMultiresModifierFlag_PlainUv, 0);
+ origdm = subsurf_dm_create_local(
+ cddm, totlvl, 0,
+ 0, mmd->flags & eMultiresModifierFlag_PlainUv, 0, object_mode);
cddm->release(cddm);
/* calc disps */
@@ -878,7 +887,8 @@ void multiresModifier_base_apply(MultiresModifierData *mmd, Object *ob)
dispdm->release(dispdm);
}
-static void multires_subdivide(MultiresModifierData *mmd, Object *ob, int totlvl, int updateblock, int simple)
+static void multires_subdivide(
+ MultiresModifierData *mmd, Object *ob, int totlvl, int updateblock, int simple, eObjectMode object_mode)
{
Mesh *me = ob->data;
MDisps *mdisps;
@@ -907,11 +917,13 @@ static void multires_subdivide(MultiresModifierData *mmd, Object *ob, int totlvl
/* create subsurf DM from original mesh at high level */
cddm = CDDM_from_mesh(me);
DM_set_only_copy(cddm, CD_MASK_BAREMESH);
- highdm = subsurf_dm_create_local(ob, cddm, totlvl, simple, 0, mmd->flags & eMultiresModifierFlag_PlainUv, has_mask);
+ highdm = subsurf_dm_create_local(
+ cddm, totlvl, simple,
+ 0, mmd->flags & eMultiresModifierFlag_PlainUv, has_mask, object_mode);
ss = ((CCGDerivedMesh *)highdm)->ss;
/* create multires DM from original mesh at low level */
- lowdm = multires_dm_create_local(ob, cddm, lvl, lvl, simple, has_mask);
+ lowdm = multires_dm_create_local(ob, cddm, lvl, lvl, simple, has_mask, object_mode);
BLI_assert(lowdm != cddm);
cddm->release(cddm);
@@ -958,12 +970,13 @@ static void multires_subdivide(MultiresModifierData *mmd, Object *ob, int totlvl
multires_reallocate_mdisps(me->totloop, mdisps, totlvl);
}
- multires_set_tot_level(ob, mmd, totlvl);
+ multires_set_tot_level(mmd, totlvl, object_mode);
}
-void multiresModifier_subdivide(MultiresModifierData *mmd, Object *ob, int updateblock, int simple)
+void multiresModifier_subdivide(
+ MultiresModifierData *mmd, Object *ob, int updateblock, int simple, eObjectMode object_mode)
{
- multires_subdivide(mmd, ob, mmd->totlvl + 1, updateblock, simple);
+ multires_subdivide(mmd, ob, mmd->totlvl + 1, updateblock, simple, object_mode);
}
static void grid_tangent(const CCGKey *key, int x, int y, int axis, CCGElem *grid, float t[3])
@@ -1196,7 +1209,7 @@ static void multiresModifier_disp_run(DerivedMesh *dm, Mesh *me, DerivedMesh *dm
}
}
-void multires_modifier_update_mdisps(struct DerivedMesh *dm)
+void multires_modifier_update_mdisps(struct DerivedMesh *dm, eObjectMode object_mode)
{
CCGDerivedMesh *ccgdm = (CCGDerivedMesh *)dm;
Object *ob;
@@ -1228,11 +1241,13 @@ void multires_modifier_update_mdisps(struct DerivedMesh *dm)
else cddm = CDDM_from_mesh(me);
DM_set_only_copy(cddm, CD_MASK_BAREMESH);
- highdm = subsurf_dm_create_local(ob, cddm, totlvl, mmd->simple, 0, mmd->flags & eMultiresModifierFlag_PlainUv, has_mask);
+ highdm = subsurf_dm_create_local(
+ cddm, totlvl, mmd->simple,
+ 0, mmd->flags & eMultiresModifierFlag_PlainUv, has_mask, object_mode);
ss = ((CCGDerivedMesh *)highdm)->ss;
/* create multires DM from original mesh and displacements */
- lowdm = multires_dm_create_local(ob, cddm, lvl, totlvl, mmd->simple, has_mask);
+ lowdm = multires_dm_create_local(ob, cddm, lvl, totlvl, mmd->simple, has_mask, object_mode);
cddm->release(cddm);
/* gather grid data */
@@ -1290,7 +1305,9 @@ void multires_modifier_update_mdisps(struct DerivedMesh *dm)
else cddm = CDDM_from_mesh(me);
DM_set_only_copy(cddm, CD_MASK_BAREMESH);
- subdm = subsurf_dm_create_local(ob, cddm, mmd->totlvl, mmd->simple, 0, mmd->flags & eMultiresModifierFlag_PlainUv, has_mask);
+ subdm = subsurf_dm_create_local(
+ cddm, mmd->totlvl, mmd->simple,
+ 0, mmd->flags & eMultiresModifierFlag_PlainUv, has_mask, object_mode);
cddm->release(cddm);
multiresModifier_disp_run(dm, me, NULL, CALC_DISPLACEMENTS, subdm->getGridData(subdm), mmd->totlvl);
@@ -1332,7 +1349,7 @@ void multires_modifier_update_hidden(DerivedMesh *dm)
}
}
-void multires_set_space(DerivedMesh *dm, Object *ob, int from, int to)
+void multires_set_space(DerivedMesh *dm, Object *ob, int from, int to, eObjectMode object_mode)
{
DerivedMesh *ccgdm = NULL, *subsurf = NULL;
CCGElem **gridData, **subGridData = NULL;
@@ -1353,10 +1370,11 @@ void multires_set_space(DerivedMesh *dm, Object *ob, int from, int to)
}
totlvl = mmd->totlvl;
- ccgdm = multires_dm_create_local(ob, dm, totlvl, totlvl, mmd->simple, false);
+ ccgdm = multires_dm_create_local(ob, dm, totlvl, totlvl, mmd->simple, false, object_mode);
- subsurf = subsurf_dm_create_local(ob, dm, totlvl,
- mmd->simple, mmd->flags & eMultiresModifierFlag_ControlEdges, mmd->flags & eMultiresModifierFlag_PlainUv, 0);
+ subsurf = subsurf_dm_create_local(
+ dm, totlvl, mmd->simple,
+ mmd->flags & eMultiresModifierFlag_ControlEdges, mmd->flags & eMultiresModifierFlag_PlainUv, 0, object_mode);
numGrids = subsurf->getNumGrids(subsurf);
gridSize = subsurf->getGridSize(subsurf);
@@ -1471,10 +1489,12 @@ void multires_stitch_grids(Object *ob)
}
}
-DerivedMesh *multires_make_derived_from_derived(DerivedMesh *dm,
- MultiresModifierData *mmd,
- Object *ob,
- MultiresFlags flags)
+DerivedMesh *multires_make_derived_from_derived(
+ DerivedMesh *dm,
+ MultiresModifierData *mmd,
+ Object *ob,
+ MultiresFlags flags,
+ eObjectMode object_mode)
{
Mesh *me = ob->data;
DerivedMesh *result;
@@ -1483,16 +1503,18 @@ DerivedMesh *multires_make_derived_from_derived(DerivedMesh *dm,
CCGKey key;
const bool render = (flags & MULTIRES_USE_RENDER_PARAMS) != 0;
const bool ignore_simplify = (flags & MULTIRES_IGNORE_SIMPLIFY) != 0;
- int lvl = multires_get_level(ob, mmd, render, ignore_simplify);
+ int lvl = multires_get_level(mmd, render, ignore_simplify, object_mode);
int i, gridSize, numGrids;
if (lvl == 0)
return dm;
- result = subsurf_dm_create_local(ob, dm, lvl,
- mmd->simple, mmd->flags & eMultiresModifierFlag_ControlEdges,
- mmd->flags & eMultiresModifierFlag_PlainUv,
- flags & MULTIRES_ALLOC_PAINT_MASK);
+ result = subsurf_dm_create_local(
+ dm, lvl, mmd->simple,
+ mmd->flags & eMultiresModifierFlag_ControlEdges,
+ mmd->flags & eMultiresModifierFlag_PlainUv,
+ flags & MULTIRES_ALLOC_PAINT_MASK,
+ object_mode);
if (!(flags & MULTIRES_USE_LOCAL_MMD)) {
ccgdm = (CCGDerivedMesh *)result;
@@ -2120,6 +2142,7 @@ void multires_load_old(Object *ob, Mesh *me)
DerivedMesh *dm, *orig;
CustomDataLayer *l;
int i;
+ const eObjectMode object_mode = OB_MODE_OBJECT;
/* Load original level into the mesh */
lvl = me->mr->levels.first;
@@ -2168,7 +2191,7 @@ void multires_load_old(Object *ob, Mesh *me)
BLI_insertlinkbefore(&ob->modifiers, md, mmd);
for (i = 0; i < me->mr->level_count - 1; ++i)
- multiresModifier_subdivide(mmd, ob, 1, 0);
+ multiresModifier_subdivide(mmd, ob, 1, 0, object_mode);
mmd->lvl = mmd->totlvl;
orig = CDDM_from_mesh(me);
@@ -2177,7 +2200,7 @@ void multires_load_old(Object *ob, Mesh *me)
* reference subsurfed dm with this option, before calling multiresModifier_disp_run(),
* which implicitly expects both subsurfs from its first dm and oldGridData parameters to
* be of the same "format"! */
- dm = multires_make_derived_from_derived(orig, mmd, ob, 0);
+ dm = multires_make_derived_from_derived(orig, mmd, ob, 0, object_mode);
multires_load_old_dm(dm, me, mmd->totlvl + 1);
@@ -2192,21 +2215,22 @@ void multires_load_old(Object *ob, Mesh *me)
/* If 'ob_src' and 'ob_dst' both have multires modifiers, synchronize them
* such that 'ob_dst' has the same total number of levels as 'ob_src'. */
-void multiresModifier_sync_levels_ex(Object *ob_dst, MultiresModifierData *mmd_src, MultiresModifierData *mmd_dst)
+void multiresModifier_sync_levels_ex(
+ Object *ob_dst, MultiresModifierData *mmd_src, MultiresModifierData *mmd_dst, eObjectMode object_mode)
{
if (mmd_src->totlvl == mmd_dst->totlvl) {
return;
}
if (mmd_src->totlvl > mmd_dst->totlvl) {
- multires_subdivide(mmd_dst, ob_dst, mmd_src->totlvl, false, mmd_dst->simple);
+ multires_subdivide(mmd_dst, ob_dst, mmd_src->totlvl, false, mmd_dst->simple, object_mode);
}
else {
- multires_del_higher(mmd_dst, ob_dst, mmd_src->totlvl);
+ multires_del_higher(mmd_dst, ob_dst, mmd_src->totlvl, object_mode);
}
}
-static void multires_sync_levels(Scene *scene, Object *ob_src, Object *ob_dst)
+static void multires_sync_levels(Scene *scene, Object *ob_src, Object *ob_dst, eObjectMode object_mode)
{
MultiresModifierData *mmd_src = get_multires_modifier(scene, ob_src, true);
MultiresModifierData *mmd_dst = get_multires_modifier(scene, ob_dst, true);
@@ -2221,7 +2245,7 @@ static void multires_sync_levels(Scene *scene, Object *ob_src, Object *ob_dst)
}
if (mmd_src && mmd_dst) {
- multiresModifier_sync_levels_ex(ob_dst, mmd_src, mmd_dst);
+ multiresModifier_sync_levels_ex(ob_dst, mmd_src, mmd_dst, object_mode);
}
}
@@ -2275,7 +2299,7 @@ static void multires_apply_smat_cb(
}
}
-static void multires_apply_smat(Scene *scene, Object *ob, float smat[3][3])
+static void multires_apply_smat(const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, float smat[3][3])
{
DerivedMesh *dm = NULL, *cddm = NULL, *subdm = NULL;
CCGElem **gridData, **subGridData;
@@ -2300,10 +2324,10 @@ static void multires_apply_smat(Scene *scene, Object *ob, float smat[3][3])
high_mmd.lvl = high_mmd.totlvl;
/* unscaled multires with applied displacement */
- subdm = get_multires_dm(scene, &high_mmd, ob);
+ subdm = get_multires_dm(eval_ctx, scene, &high_mmd, ob);
/* prepare scaled CDDM to create ccgDN */
- cddm = mesh_get_derived_deform(scene, ob, CD_MASK_BAREMESH);
+ cddm = mesh_get_derived_deform(eval_ctx, scene, ob, CD_MASK_BAREMESH);
totvert = cddm->getNumVerts(cddm);
vertCos = MEM_malloc_arrayN(totvert, sizeof(*vertCos), "multiresScale vertCos");
@@ -2314,7 +2338,9 @@ static void multires_apply_smat(Scene *scene, Object *ob, float smat[3][3])
MEM_freeN(vertCos);
/* scaled ccgDM for tangent space of object with applied scale */
- dm = subsurf_dm_create_local(ob, cddm, high_mmd.totlvl, high_mmd.simple, 0, mmd->flags & eMultiresModifierFlag_PlainUv, 0);
+ dm = subsurf_dm_create_local(
+ cddm, high_mmd.totlvl, high_mmd.simple,
+ 0, mmd->flags & eMultiresModifierFlag_PlainUv, 0, eval_ctx->object_mode);
cddm->release(cddm);
gridSize = dm->getGridSize(dm);
@@ -2364,20 +2390,20 @@ int multires_mdisp_corners(MDisps *s)
return 0;
}
-void multiresModifier_scale_disp(Scene *scene, Object *ob)
+void multiresModifier_scale_disp(const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob)
{
float smat[3][3];
/* object's scale matrix */
BKE_object_scale_to_mat3(ob, smat);
- multires_apply_smat(scene, ob, smat);
+ multires_apply_smat(eval_ctx, scene, ob, smat);
}
-void multiresModifier_prepare_join(Scene *scene, Object *ob, Object *to_ob)
+void multiresModifier_prepare_join(const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, Object *to_ob)
{
float smat[3][3], tmat[3][3], mat[3][3];
- multires_sync_levels(scene, to_ob, ob);
+ multires_sync_levels(scene, to_ob, ob, eval_ctx->object_mode);
/* construct scale matrix for displacement */
BKE_object_scale_to_mat3(to_ob, tmat);
@@ -2385,7 +2411,7 @@ void multiresModifier_prepare_join(Scene *scene, Object *ob, Object *to_ob)
BKE_object_scale_to_mat3(ob, smat);
mul_m3_m3m3(mat, smat, tmat);
- multires_apply_smat(scene, ob, mat);
+ multires_apply_smat(eval_ctx, scene, ob, mat);
}
/* update multires data after topology changing */
diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c
index 2363eb525d5..cbb7a766dfe 100644
--- a/source/blender/blenkernel/intern/nla.c
+++ b/source/blender/blenkernel/intern/nla.c
@@ -59,7 +59,7 @@
#include "BKE_library.h"
#ifdef WITH_AUDASPACE
-# include AUD_SPECIAL_H
+# include <AUD_Special.h>
#endif
#include "RNA_access.h"
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index 74766bec9a8..7ed76d18958 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -2043,7 +2043,7 @@ bNodeTree *ntreeLocalize(bNodeTree *ntree)
for (node = ntree->nodes.first; node; node = node->next) {
/* store new_node pointer to original */
- node->new_node->new_node = node;
+ node->new_node->original = node;
}
if (ntree->typeinfo->localize)
@@ -3621,6 +3621,7 @@ static void registerShaderNodes(void)
register_node_type_sh_add_shader();
register_node_type_sh_uvmap();
register_node_type_sh_uvalongstroke();
+ register_node_type_sh_eevee_specular();
register_node_type_sh_output_lamp();
register_node_type_sh_output_material();
@@ -3813,3 +3814,64 @@ bool BKE_node_tree_iter_step(struct NodeTreeIterStore *ntreeiter,
return true;
}
+
+/* -------------------------------------------------------------------- */
+/* NodeTree kernel functions */
+
+void BKE_nodetree_remove_layer_n(bNodeTree *ntree, Scene *scene, const int layer_index)
+{
+ BLI_assert(layer_index != -1);
+ for (bNode *node = ntree->nodes.first; node; node = node->next) {
+ if (node->type == CMP_NODE_R_LAYERS && (Scene *)node->id == scene) {
+ if (node->custom1 == layer_index) {
+ node->custom1 = 0;
+ }
+ else if (node->custom1 > layer_index) {
+ node->custom1--;
+ }
+ }
+ }
+}
+
+static void node_copy_default_values_list(ListBase *sockets_dst,
+ const ListBase *sockets_src)
+{
+ bNodeSocket *sock_dst = sockets_dst->first;
+ const bNodeSocket *sock_src = sockets_src->first;
+ while (sock_dst != NULL) {
+ node_socket_copy_default_value(sock_dst, sock_src);
+ sock_dst = sock_dst->next;
+ sock_src = sock_src->next;
+ }
+}
+
+static void node_copy_default_values(bNode *node_dst, const bNode *node_src)
+{
+ node_copy_default_values_list(&node_dst->inputs, &node_src->inputs);
+ node_copy_default_values_list(&node_dst->outputs, &node_src->outputs);
+}
+
+void BKE_nodetree_copy_default_values(bNodeTree *ntree_dst,
+ const bNodeTree *ntree_src)
+{
+ if (ntree_dst == ntree_src) {
+ return;
+ }
+ bNode *node_dst = ntree_dst->nodes.first;
+ const bNode *node_src = ntree_src->nodes.first;
+ while (node_dst != NULL) {
+ node_copy_default_values(node_dst, node_src);
+ node_dst = node_dst->next;
+ node_src = node_src->next;
+ }
+}
+
+void BKE_nodetree_shading_params_eval(const struct EvaluationContext *UNUSED(eval_ctx),
+ bNodeTree *ntree_dst,
+ const bNodeTree *ntree_src)
+{
+ if (G.debug & G_DEBUG_DEPSGRAPH) {
+ printf("%s on %s (%p)\n", __func__, ntree_src->id.name, ntree_dst);
+ }
+ BKE_nodetree_copy_default_values(ntree_dst, ntree_src);
+}
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index c6b4e3fb0c7..a0d2e7d76c8 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -58,6 +58,7 @@
#include "DNA_view3d_types.h"
#include "DNA_world_types.h"
#include "DNA_object_types.h"
+#include "DNA_lightprobe_types.h"
#include "DNA_property_types.h"
#include "DNA_rigidbody_types.h"
@@ -78,7 +79,6 @@
#include "BKE_action.h"
#include "BKE_bullet.h"
#include "BKE_deform.h"
-#include "BKE_depsgraph.h"
#include "BKE_DerivedMesh.h"
#include "BKE_animsys.h"
#include "BKE_anim.h"
@@ -91,6 +91,7 @@
#include "BKE_icons.h"
#include "BKE_key.h"
#include "BKE_lamp.h"
+#include "BKE_layer.h"
#include "BKE_lattice.h"
#include "BKE_library.h"
#include "BKE_library_query.h"
@@ -103,9 +104,11 @@
#include "BKE_multires.h"
#include "BKE_node.h"
#include "BKE_object.h"
+#include "BKE_object_facemap.h"
#include "BKE_paint.h"
#include "BKE_particle.h"
#include "BKE_pointcache.h"
+#include "BKE_lightprobe.h"
#include "BKE_property.h"
#include "BKE_rigidbody.h"
#include "BKE_sca.h"
@@ -118,6 +121,10 @@
#include "BKE_camera.h"
#include "BKE_image.h"
+#include "DEG_depsgraph.h"
+
+#include "DRW_engine.h"
+
#ifdef WITH_MOD_FLUID
#include "LBM_fluidsim.h"
#endif
@@ -129,7 +136,7 @@
#include "CCGSubSurf.h"
#include "atomic_ops.h"
-#include "GPU_material.h"
+#include "GPU_lamp.h"
/* Vertex parent modifies original BMesh which is not safe for threading.
* Ideally such a modification should be handled as a separate DAG update
@@ -152,16 +159,6 @@ void BKE_object_workob_clear(Object *workob)
workob->rotmode = ROT_MODE_EUL;
}
-void BKE_object_update_base_layer(struct Scene *scene, Object *ob)
-{
- Base *base = scene->base.first;
-
- while (base) {
- if (base->object == ob) base->lay = ob->lay;
- base = base->next;
- }
-}
-
void BKE_object_free_particlesystems(Object *ob)
{
ParticleSystem *psys;
@@ -265,7 +262,9 @@ bool BKE_object_support_modifier_type_check(Object *ob, int modifier_type)
return true;
}
-void BKE_object_link_modifiers(struct Object *ob_dst, const struct Object *ob_src)
+void BKE_object_link_modifiers(
+ struct Object *ob_dst, const struct Object *ob_src,
+ eObjectMode object_mode)
{
ModifierData *md;
BKE_object_free_modifiers(ob_dst);
@@ -304,7 +303,8 @@ void BKE_object_link_modifiers(struct Object *ob_dst, const struct Object *ob_sr
if (md->type == eModifierType_Multires) {
/* Has to be done after mod creation, but *before* we actually copy its settings! */
- multiresModifier_sync_levels_ex(ob_dst, (MultiresModifierData *)md, (MultiresModifierData *)nmd);
+ multiresModifier_sync_levels_ex(
+ ob_dst, (MultiresModifierData *)md, (MultiresModifierData *)nmd, object_mode);
}
modifier_copyData(md, nmd);
@@ -356,7 +356,18 @@ void BKE_object_free_derived_caches(Object *ob)
ob->derivedDeform->release(ob->derivedDeform);
ob->derivedDeform = NULL;
}
-
+
+ if (ob->mesh_evaluated != NULL) {
+ /* Restore initial pointer. */
+ ob->data = ob->mesh_evaluated->id.orig_id;
+ /* Evaluated mesh points to edit mesh, but does not own it. */
+ ob->mesh_evaluated->edit_btmesh = NULL;
+ BKE_mesh_free(ob->mesh_evaluated);
+ BKE_libblock_free_data(&ob->mesh_evaluated->id, false);
+ MEM_freeN(ob->mesh_evaluated);
+ ob->mesh_evaluated = NULL;
+ }
+
BKE_object_free_curve_cache(ob);
}
@@ -401,7 +412,7 @@ void BKE_object_free_caches(Object *object)
* guaranteed to be in a known state.
*/
if (update_flag != 0) {
- DAG_id_tag_update(&object->id, update_flag);
+ DEG_id_tag_update(&object->id, update_flag);
}
}
@@ -418,6 +429,7 @@ void BKE_object_free(Object *ob)
MEM_SAFE_FREE(ob->bb);
BLI_freelistN(&ob->defbase);
+ BLI_freelistN(&ob->fmaps);
if (ob->pose) {
BKE_pose_free_ex(ob->pose, false);
ob->pose = NULL;
@@ -448,6 +460,13 @@ void BKE_object_free(Object *ob)
}
GPU_lamp_free(ob);
+ for (ObjectEngineData *oed = ob->drawdata.first; oed; oed = oed->next) {
+ if (oed->free != NULL) {
+ oed->free(oed);
+ }
+ }
+ BLI_freelistN(&ob->drawdata);
+
BKE_sculptsession_free(ob);
BLI_freelistN(&ob->pc_ids);
@@ -464,10 +483,13 @@ void BKE_object_free(Object *ob)
}
BKE_previewimg_free(&ob->preview);
+
+ /* don't free, let the base free it */
+ ob->base_collection_properties = NULL;
}
/* actual check for internal data, not context or flags */
-bool BKE_object_is_in_editmode(Object *ob)
+bool BKE_object_is_in_editmode(const Object *ob)
{
if (ob->data == NULL)
return false;
@@ -516,11 +538,11 @@ bool BKE_object_is_in_editmode_vgroup(Object *ob)
BKE_object_is_in_editmode(ob));
}
-bool BKE_object_is_in_wpaint_select_vert(Object *ob)
+bool BKE_object_is_in_wpaint_select_vert(const Object *ob, eObjectMode object_mode)
{
if (ob->type == OB_MESH) {
- Mesh *me = ob->data;
- return ((ob->mode & OB_MODE_WEIGHT_PAINT) &&
+ const Mesh *me = ob->data;
+ return ((object_mode & OB_MODE_WEIGHT_PAINT) &&
(me->edit_btmesh == NULL) &&
(ME_EDIT_PAINT_SEL_MODE(me) == SCE_SELECT_VERTEX));
}
@@ -528,6 +550,36 @@ bool BKE_object_is_in_wpaint_select_vert(Object *ob)
return false;
}
+/**
+ * Return if the object is visible, as evaluated by depsgraph
+ */
+bool BKE_object_is_visible(Object *ob, const eObjectVisibilityCheck mode)
+{
+ if ((ob->base_flag & BASE_VISIBLED) == 0) {
+ return false;
+ }
+
+ if (mode == OB_VISIBILITY_CHECK_UNKNOWN_RENDER_MODE) {
+ return true;
+ }
+
+ if (((ob->transflag & OB_DUPLI) == 0) &&
+ (ob->particlesystem.first == NULL))
+ {
+ return true;
+ }
+
+ switch (mode) {
+ case OB_VISIBILITY_CHECK_FOR_VIEWPORT:
+ return ((ob->duplicator_visibility_flag & OB_DUPLI_FLAG_VIEWPORT) != 0);
+ case OB_VISIBILITY_CHECK_FOR_RENDER:
+ return ((ob->duplicator_visibility_flag & OB_DUPLI_FLAG_RENDER) != 0);
+ default:
+ BLI_assert(!"Object visible test mode not supported.");
+ return false;
+ }
+}
+
bool BKE_object_exists_check(Object *obtest)
{
Object *ob;
@@ -581,6 +633,7 @@ void *BKE_object_obdata_add_from_type(Main *bmain, int type, const char *name)
case OB_LATTICE: return BKE_lattice_add(bmain, name);
case OB_ARMATURE: return BKE_armature_add(bmain, name);
case OB_SPEAKER: return BKE_speaker_add(bmain, name);
+ case OB_LIGHTPROBE:return BKE_lightprobe_add(bmain, name);
case OB_EMPTY: return NULL;
default:
printf("%s: Internal error, bad type: %d\n", __func__, type);
@@ -652,6 +705,7 @@ void BKE_object_init(Object *ob)
ob->col_group = 0x01;
ob->col_mask = 0xffff;
ob->preview = NULL;
+ ob->duplicator_visibility_flag = OB_DUPLI_FLAG_VIEWPORT | OB_DUPLI_FLAG_RENDER;
/* NT fluid sim defaults */
ob->fluidsimSettings = NULL;
@@ -672,6 +726,9 @@ Object *BKE_object_add_only_object(Main *bmain, int type, const char *name)
ob = BKE_libblock_alloc(bmain, ID_OB, name, 0);
+ /* We increase object user count when linking to SceneCollections. */
+ id_us_min(&ob->id);
+
/* default object vars */
ob->type = type;
@@ -680,29 +737,65 @@ Object *BKE_object_add_only_object(Main *bmain, int type, const char *name)
return ob;
}
-/* general add: to scene, with layer from area and default name */
+
+static Object *object_add_common(Main *bmain, ViewLayer *view_layer, int type, const char *name)
+{
+ Object *ob;
+
+ ob = BKE_object_add_only_object(bmain, type, name);
+ ob->data = BKE_object_obdata_add_from_type(bmain, type, name);
+ BKE_view_layer_base_deselect_all(view_layer);
+
+ DEG_id_tag_update_ex(bmain, &ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+ return ob;
+}
+
+/**
+ * General add: to scene, with layer from area and default name
+ *
+ * Object is added to the active SceneCollection.
+ * If there is no linked collection to the active ViewLayer we create a new one.
+ */
/* creates minimum required data, but without vertices etc. */
Object *BKE_object_add(
- Main *bmain, Scene *scene,
+ Main *bmain, Scene *scene, ViewLayer *view_layer,
int type, const char *name)
{
Object *ob;
Base *base;
+ LayerCollection *layer_collection;
- ob = BKE_object_add_only_object(bmain, type, name);
+ ob = object_add_common(bmain, view_layer, type, name);
- ob->data = BKE_object_obdata_add_from_type(bmain, type, name);
+ layer_collection = BKE_layer_collection_get_active_ensure(scene, view_layer);
+ BKE_collection_object_add(&scene->id, layer_collection->scene_collection, ob);
- ob->lay = scene->lay;
-
- base = BKE_scene_base_add(scene, ob);
- BKE_scene_base_deselect_all(scene);
- BKE_scene_base_select(scene, base);
- DAG_id_tag_update_ex(bmain, &ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+ base = BKE_view_layer_base_find(view_layer, ob);
+ BKE_view_layer_base_select(view_layer, base);
return ob;
}
+/**
+ * Add a new object, using another one as a reference
+ *
+ * /param ob_src object to use to determine the collections of the new object.
+ */
+Object *BKE_object_add_from(
+ Main *bmain, Scene *scene, ViewLayer *view_layer,
+ int type, const char *name, Object *ob_src)
+{
+ Object *ob;
+ Base *base;
+
+ ob = object_add_common(bmain, view_layer, type, name);
+ BKE_collection_object_add_from(scene, ob_src, ob);
+
+ base = BKE_view_layer_base_find(view_layer, ob);
+ BKE_view_layer_base_select(view_layer, base);
+
+ return ob;
+}
#ifdef WITH_GAMEENGINE
@@ -794,10 +887,10 @@ static LodLevel *lod_level_select(Object *ob, const float camera_position[3])
return current;
}
-bool BKE_object_lod_is_usable(Object *ob, Scene *scene)
+bool BKE_object_lod_is_usable(Object *ob, ViewLayer *view_layer, const eObjectMode object_mode)
{
- bool active = (scene) ? ob == OBACT : false;
- return (ob->mode == OB_MODE_OBJECT || !active);
+ bool active = (view_layer) ? ob == OBACT(view_layer) : false;
+ return (object_mode == OB_MODE_OBJECT || !active);
}
void BKE_object_lod_update(Object *ob, const float camera_position[3])
@@ -810,11 +903,11 @@ void BKE_object_lod_update(Object *ob, const float camera_position[3])
}
}
-static Object *lod_ob_get(Object *ob, Scene *scene, int flag)
+static Object *lod_ob_get(Object *ob, ViewLayer *view_layer, int flag, const eObjectMode object_mode)
{
LodLevel *current = ob->currentlod;
- if (!current || !BKE_object_lod_is_usable(ob, scene))
+ if (!current || !BKE_object_lod_is_usable(ob, view_layer, object_mode))
return ob;
while (current->prev && (!(current->flags & flag) || !current->source || current->source->type != OB_MESH)) {
@@ -824,14 +917,14 @@ static Object *lod_ob_get(Object *ob, Scene *scene, int flag)
return current->source;
}
-struct Object *BKE_object_lod_meshob_get(Object *ob, Scene *scene)
+struct Object *BKE_object_lod_meshob_get(Object *ob, ViewLayer *view_layer, const eObjectMode object_mode)
{
- return lod_ob_get(ob, scene, OB_LOD_USE_MESH);
+ return lod_ob_get(ob, view_layer, OB_LOD_USE_MESH, object_mode);
}
-struct Object *BKE_object_lod_matob_get(Object *ob, Scene *scene)
+struct Object *BKE_object_lod_matob_get(Object *ob, ViewLayer *view_layer, const eObjectMode object_mode)
{
- return lod_ob_get(ob, scene, OB_LOD_USE_MAT);
+ return lod_ob_get(ob, view_layer, OB_LOD_USE_MAT, object_mode);
}
#endif /* WITH_GAMEENGINE */
@@ -943,6 +1036,7 @@ ParticleSystem *BKE_object_copy_particlesystem(ParticleSystem *psys, const int f
psysn->effectors = NULL;
psysn->tree = NULL;
psysn->bvhtree = NULL;
+ psysn->batch_cache = NULL;
BLI_listbase_clear(&psysn->pathcachebufs);
BLI_listbase_clear(&psysn->childcachebufs);
@@ -1059,12 +1153,13 @@ static void copy_object_lod(Object *obn, const Object *ob, const int UNUSED(flag
obn->currentlod = (LodLevel *)obn->lodlevels.first;
}
-bool BKE_object_pose_context_check(Object *ob)
+bool BKE_object_pose_context_check_ex(Object *ob, bool selected)
{
if ((ob) &&
(ob->type == OB_ARMATURE) &&
(ob->pose) &&
- (ob->mode & OB_MODE_POSE))
+ /* Currently using selection when the object isn't active. */
+ ((selected == false) || (ob->flag & SELECT)))
{
return true;
}
@@ -1073,22 +1168,41 @@ bool BKE_object_pose_context_check(Object *ob)
}
}
+bool BKE_object_pose_context_check(Object *ob)
+{
+ return BKE_object_pose_context_check_ex(ob, false);
+}
+
Object *BKE_object_pose_armature_get(Object *ob)
{
if (ob == NULL)
return NULL;
- if (BKE_object_pose_context_check(ob))
+ if (BKE_object_pose_context_check_ex(ob, false))
return ob;
ob = modifiers_isDeformedByArmature(ob);
- if (BKE_object_pose_context_check(ob))
+ /* Only use selected check when non-active. */
+ if (BKE_object_pose_context_check_ex(ob, true))
return ob;
return NULL;
}
+Object *BKE_object_pose_armature_get_visible(Object *ob, ViewLayer *view_layer)
+{
+ Object *ob_armature = BKE_object_pose_armature_get(ob);
+ if (ob_armature) {
+ Base *base = BKE_view_layer_base_find(view_layer, ob_armature);
+ if (base) {
+ if (BASE_VISIBLE(base)) {
+ return ob_armature;
+ }
+ }
+ }
+ return NULL;
+}
void BKE_object_transform_copy(Object *ob_tar, const Object *ob_src)
{
copy_v3_v3(ob_tar->loc, ob_src->loc);
@@ -1147,9 +1261,9 @@ void BKE_object_copy_data(Main *UNUSED(bmain), Object *ob_dst, const Object *ob_
BKE_pose_rebuild(ob_dst, ob_dst->data);
}
defgroup_copy_list(&ob_dst->defbase, &ob_src->defbase);
+ BKE_object_facemap_copy_list(&ob_dst->fmaps, &ob_src->fmaps);
BKE_constraints_copy_ex(&ob_dst->constraints, &ob_src->constraints, flag_subdata, true);
- ob_dst->mode = OB_MODE_OBJECT;
ob_dst->sculpt = NULL;
if (ob_src->pd) {
@@ -1169,6 +1283,7 @@ void BKE_object_copy_data(Main *UNUSED(bmain), Object *ob_dst, const Object *ob_
ob_dst->derivedFinal = NULL;
BLI_listbase_clear(&ob_dst->gpulamp);
+ BLI_listbase_clear(&ob_dst->drawdata);
BLI_listbase_clear(&ob_dst->pc_ids);
ob_dst->mpath = NULL;
@@ -1329,8 +1444,8 @@ void BKE_object_make_proxy(Object *ob, Object *target, Object *gob)
ob->proxy_group = gob;
id_lib_extern(&target->id);
- DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
- DAG_id_tag_update(&target->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+ DEG_id_tag_update(&target->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
/* copy transform
* - gob means this proxy comes from a group, just apply the matrix
@@ -1673,13 +1788,16 @@ static bool ob_parcurve(Scene *scene, Object *ob, Object *par, float mat[4][4])
Curve *cu = par->data;
float vec[4], dir[3], quat[4], radius, ctime;
+ /* TODO: Make sure this doesn't crash. */
+#if 0
/* only happens on reload file, but violates depsgraph still... fix! */
if (par->curve_cache == NULL) {
if (scene == NULL) {
return false;
}
- BKE_displist_make_curveTypes(scene, par, 0);
+ BKE_displist_make_curveTypes(eval_ctx, scene, par, 0);
}
+#endif
if (par->curve_cache->path == NULL) {
return false;
@@ -2060,8 +2178,9 @@ static bool where_is_object_parslow(Object *ob, float obmat[4][4], float slowmat
}
/* note, scene is the active scene while actual_scene is the scene the object resides in */
-void BKE_object_where_is_calc_time_ex(Scene *scene, Object *ob, float ctime,
- RigidBodyWorld *rbw, float r_originmat[3][3])
+void BKE_object_where_is_calc_time_ex(
+ const EvaluationContext *eval_ctx, Scene *scene, Object *ob, float ctime,
+ RigidBodyWorld *rbw, float r_originmat[3][3])
{
if (ob == NULL) return;
@@ -2096,7 +2215,7 @@ void BKE_object_where_is_calc_time_ex(Scene *scene, Object *ob, float ctime,
if (ob->constraints.first && !(ob->transflag & OB_NO_CONSTRAINTS)) {
bConstraintOb *cob;
cob = BKE_constraints_make_evalob(scene, ob, NULL, CONSTRAINT_OBTYPE_OBJECT);
- BKE_constraints_solve(&ob->constraints, cob, ctime);
+ BKE_constraints_solve(eval_ctx, &ob->constraints, cob, ctime);
BKE_constraints_clear_evalob(cob);
}
@@ -2105,9 +2224,9 @@ void BKE_object_where_is_calc_time_ex(Scene *scene, Object *ob, float ctime,
else ob->transflag &= ~OB_NEG_SCALE;
}
-void BKE_object_where_is_calc_time(Scene *scene, Object *ob, float ctime)
+void BKE_object_where_is_calc_time(const EvaluationContext *eval_ctx, Scene *scene, Object *ob, float ctime)
{
- BKE_object_where_is_calc_time_ex(scene, ob, ctime, NULL, NULL);
+ BKE_object_where_is_calc_time_ex(eval_ctx, scene, ob, ctime, NULL, NULL);
}
/* get object transformation matrix without recalculating dependencies and
@@ -2132,17 +2251,17 @@ void BKE_object_where_is_calc_mat4(Scene *scene, Object *ob, float obmat[4][4])
}
}
-void BKE_object_where_is_calc_ex(Scene *scene, RigidBodyWorld *rbw, Object *ob, float r_originmat[3][3])
+void BKE_object_where_is_calc_ex(const EvaluationContext *eval_ctx, Scene *scene, RigidBodyWorld *rbw, Object *ob, float r_originmat[3][3])
{
- BKE_object_where_is_calc_time_ex(scene, ob, BKE_scene_frame_get(scene), rbw, r_originmat);
+ BKE_object_where_is_calc_time_ex(eval_ctx, scene, ob, BKE_scene_frame_get(scene), rbw, r_originmat);
}
-void BKE_object_where_is_calc(Scene *scene, Object *ob)
+void BKE_object_where_is_calc(const EvaluationContext *eval_ctx, Scene *scene, Object *ob)
{
- BKE_object_where_is_calc_time_ex(scene, ob, BKE_scene_frame_get(scene), NULL, NULL);
+ BKE_object_where_is_calc_time_ex(eval_ctx, scene, ob, BKE_scene_frame_get(scene), NULL, NULL);
}
/* for calculation of the inverse parent transform, only used for editor */
-void BKE_object_workob_calc_parent(Scene *scene, Object *ob, Object *workob)
+void BKE_object_workob_calc_parent(const EvaluationContext *eval_ctx, Scene *scene, Object *ob, Object *workob)
{
BKE_object_workob_clear(workob);
@@ -2164,7 +2283,7 @@ void BKE_object_workob_calc_parent(Scene *scene, Object *ob, Object *workob)
BLI_strncpy(workob->parsubstr, ob->parsubstr, sizeof(workob->parsubstr));
- BKE_object_where_is_calc(scene, workob);
+ BKE_object_where_is_calc(eval_ctx, scene, workob);
}
/* see BKE_pchan_apply_mat4() for the equivalent 'pchan' function */
@@ -2489,14 +2608,14 @@ void BKE_object_foreach_display_point(
}
void BKE_scene_foreach_display_point(
- Scene *scene, View3D *v3d, const short flag,
+ Scene *scene, ViewLayer *view_layer,
void (*func_cb)(const float[3], void *), void *user_data)
{
Base *base;
Object *ob;
- for (base = FIRSTBASE; base; base = base->next) {
- if (BASE_VISIBLE_BGMODE(v3d, scene, base) && (base->flag & flag) == flag) {
+ for (base = FIRSTBASE(view_layer); base; base = base->next) {
+ if (((base->flag & BASE_VISIBLED) != 0) && ((base->flag & BASE_SELECTED) != 0)) {
ob = base->object;
if ((ob->transflag & OB_DUPLI) == 0) {
@@ -2586,7 +2705,7 @@ bool BKE_object_parent_loop_check(const Object *par, const Object *ob)
return BKE_object_parent_loop_check(par->parent, ob);
}
-static void object_handle_update_proxy(EvaluationContext *eval_ctx,
+static void object_handle_update_proxy(const EvaluationContext *eval_ctx,
Scene *scene,
Object *object,
const bool do_proxy_update)
@@ -2616,12 +2735,17 @@ static void object_handle_update_proxy(EvaluationContext *eval_ctx,
/* the main object update call, for object matrix, constraints, keys and displist (modifiers) */
/* requires flags to be set! */
/* Ideally we shouldn't have to pass the rigid body world, but need bigger restructuring to avoid id */
-void BKE_object_handle_update_ex(EvaluationContext *eval_ctx,
+void BKE_object_handle_update_ex(const EvaluationContext *eval_ctx,
Scene *scene, Object *ob,
RigidBodyWorld *rbw,
const bool do_proxy_update)
{
- if ((ob->recalc & OB_RECALC_ALL) == 0) {
+ const ID *object_data = ob->data;
+ const bool recalc_object = (ob->id.recalc & ID_RECALC) != 0;
+ const bool recalc_data =
+ (object_data != NULL) ? ((object_data->recalc & ID_RECALC_ALL) != 0)
+ : 0;
+ if (!recalc_object && ! recalc_data) {
object_handle_update_proxy(eval_ctx, scene, ob, do_proxy_update);
return;
}
@@ -2632,7 +2756,7 @@ void BKE_object_handle_update_ex(EvaluationContext *eval_ctx,
BKE_pose_update_constraint_flags(ob->pose);
}
}
- if (ob->recalc & OB_RECALC_DATA) {
+ if (recalc_data) {
if (ob->type == OB_ARMATURE) {
/* this happens for reading old files and to match library armatures
* with poses we do it ahead of BKE_object_where_is_calc to ensure animation
@@ -2645,21 +2769,21 @@ void BKE_object_handle_update_ex(EvaluationContext *eval_ctx,
/* XXX new animsys warning: depsgraph tag OB_RECALC_DATA should not skip drivers,
* which is only in BKE_object_where_is_calc now */
/* XXX: should this case be OB_RECALC_OB instead? */
- if (ob->recalc & OB_RECALC_ALL) {
+ if (recalc_object || recalc_data) {
if (G.debug & G_DEBUG_DEPSGRAPH) {
printf("recalcob %s\n", ob->id.name + 2);
}
/* Handle proxy copy for target. */
if (!BKE_object_eval_proxy_copy(eval_ctx, ob)) {
- BKE_object_where_is_calc_ex(scene, rbw, ob, NULL);
+ BKE_object_where_is_calc_ex(eval_ctx, scene, rbw, ob, NULL);
}
}
- if (ob->recalc & OB_RECALC_DATA) {
+ if (recalc_data) {
BKE_object_handle_data_update(eval_ctx, scene, ob);
}
- ob->recalc &= ~OB_RECALC_ALL;
+ ob->id.recalc &= ID_RECALC_ALL;
object_handle_update_proxy(eval_ctx, scene, ob, do_proxy_update);
}
@@ -2669,7 +2793,7 @@ void BKE_object_handle_update_ex(EvaluationContext *eval_ctx,
* e.g. "scene" <-- set 1 <-- set 2 ("ob" lives here) <-- set 3 <-- ... <-- set n
* rigid bodies depend on their world so use BKE_object_handle_update_ex() to also pass along the corrent rigid body world
*/
-void BKE_object_handle_update(EvaluationContext *eval_ctx, Scene *scene, Object *ob)
+void BKE_object_handle_update(const EvaluationContext *eval_ctx, Scene *scene, Object *ob)
{
BKE_object_handle_update_ex(eval_ctx, scene, ob, NULL, true);
}
@@ -2716,14 +2840,7 @@ int BKE_object_obdata_texspace_get(Object *ob, short **r_texflag, float **r_loc,
switch (GS(((ID *)ob->data)->name)) {
case ID_ME:
{
- Mesh *me = ob->data;
- if (me->bb == NULL || (me->bb->flag & BOUNDBOX_DIRTY)) {
- BKE_mesh_texspace_calc(me);
- }
- if (r_texflag) *r_texflag = &me->texflag;
- if (r_loc) *r_loc = me->loc;
- if (r_size) *r_size = me->size;
- if (r_rot) *r_rot = me->rot;
+ BKE_mesh_texspace_get_reference((Mesh *)ob->data, r_texflag, r_loc, r_rot, r_size);
break;
}
case ID_CU:
@@ -3290,33 +3407,33 @@ static void obrel_list_add(LinkNode **links, Object *ob)
}
/*
- * Iterates over all objects of the given scene.
+ * Iterates over all objects of the given scene layer.
* Depending on the eObjectSet flag:
* collect either OB_SET_ALL, OB_SET_VISIBLE or OB_SET_SELECTED objects.
* If OB_SET_VISIBLE or OB_SET_SELECTED are collected,
* then also add related objects according to the given includeFilters.
*/
-LinkNode *BKE_object_relational_superset(struct Scene *scene, eObjectSet objectSet, eObRelationTypes includeFilter)
+LinkNode *BKE_object_relational_superset(struct ViewLayer *view_layer, eObjectSet objectSet, eObRelationTypes includeFilter)
{
LinkNode *links = NULL;
Base *base;
/* Remove markers from all objects */
- for (base = scene->base.first; base; base = base->next) {
+ for (base = view_layer->object_bases.first; base; base = base->next) {
base->object->id.tag &= ~LIB_TAG_DOIT;
}
/* iterate over all selected and visible objects */
- for (base = scene->base.first; base; base = base->next) {
+ for (base = view_layer->object_bases.first; base; base = base->next) {
if (objectSet == OB_SET_ALL) {
/* as we get all anyways just add it */
Object *ob = base->object;
obrel_list_add(&links, ob);
}
else {
- if ((objectSet == OB_SET_SELECTED && TESTBASELIB_BGMODE(((View3D *)NULL), scene, base)) ||
- (objectSet == OB_SET_VISIBLE && BASE_EDITABLE_BGMODE(((View3D *)NULL), scene, base)))
+ if ((objectSet == OB_SET_SELECTED && TESTBASELIB_BGMODE(base)) ||
+ (objectSet == OB_SET_VISIBLE && BASE_EDITABLE_BGMODE(base)))
{
Object *ob = base->object;
@@ -3345,8 +3462,8 @@ LinkNode *BKE_object_relational_superset(struct Scene *scene, eObjectSet objectS
/* child relationship */
if (includeFilter & (OB_REL_CHILDREN | OB_REL_CHILDREN_RECURSIVE)) {
Base *local_base;
- for (local_base = scene->base.first; local_base; local_base = local_base->next) {
- if (BASE_EDITABLE_BGMODE(((View3D *)NULL), scene, local_base)) {
+ for (local_base = view_layer->object_bases.first; local_base; local_base = local_base->next) {
+ if (BASE_EDITABLE_BGMODE(local_base)) {
Object *child = local_base->object;
if (obrel_list_test(child)) {
@@ -3390,18 +3507,11 @@ struct LinkNode *BKE_object_groups(Object *ob)
return group_linknode;
}
-void BKE_object_groups_clear(Scene *scene, Base *base, Object *object)
+void BKE_object_groups_clear(Object *ob)
{
Group *group = NULL;
-
- BLI_assert((base == NULL) || (base->object == object));
-
- if (scene && base == NULL) {
- base = BKE_scene_base_find(scene, object);
- }
-
- while ((group = BKE_group_object_find(group, base->object))) {
- BKE_group_object_unlink(group, object, scene, base);
+ while ((group = BKE_group_object_find(group, ob))) {
+ BKE_group_object_unlink(group, ob);
}
}
@@ -3602,9 +3712,9 @@ static void object_cacheIgnoreClear(Object *ob, int state)
/* Note: this function should eventually be replaced by depsgraph functionality.
* Avoid calling this in new code unless there is a very good reason for it!
*/
-bool BKE_object_modifier_update_subframe(Scene *scene, Object *ob, bool update_mesh,
- int parent_recursion, float frame,
- int type)
+bool BKE_object_modifier_update_subframe(
+ const EvaluationContext *eval_ctx, Scene *scene, Object *ob, bool update_mesh,
+ int parent_recursion, float frame, int type)
{
ModifierData *md = modifiers_findByType(ob, (ModifierType)type);
bConstraint *con;
@@ -3627,8 +3737,8 @@ bool BKE_object_modifier_update_subframe(Scene *scene, Object *ob, bool update_m
if (parent_recursion) {
int recursion = parent_recursion - 1;
bool no_update = false;
- if (ob->parent) no_update |= BKE_object_modifier_update_subframe(scene, ob->parent, 0, recursion, frame, type);
- if (ob->track) no_update |= BKE_object_modifier_update_subframe(scene, ob->track, 0, recursion, frame, type);
+ if (ob->parent) no_update |= BKE_object_modifier_update_subframe(eval_ctx, scene, ob->parent, 0, recursion, frame, type);
+ if (ob->track) no_update |= BKE_object_modifier_update_subframe(eval_ctx, scene, ob->track, 0, recursion, frame, type);
/* skip subframe if object is parented
* to vertex of a dynamic paint canvas */
@@ -3645,7 +3755,7 @@ bool BKE_object_modifier_update_subframe(Scene *scene, Object *ob, bool update_m
cti->get_constraint_targets(con, &targets);
for (ct = targets.first; ct; ct = ct->next) {
if (ct->tar)
- BKE_object_modifier_update_subframe(scene, ct->tar, 0, recursion, frame, type);
+ BKE_object_modifier_update_subframe(eval_ctx, scene, ct->tar, 0, recursion, frame, type);
}
/* free temp targets */
if (cti->flush_constraint_targets)
@@ -3655,7 +3765,8 @@ bool BKE_object_modifier_update_subframe(Scene *scene, Object *ob, bool update_m
}
/* was originally OB_RECALC_ALL - TODO - which flags are really needed??? */
- ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
+ /* TODO(sergey): What about animation? */
+ ob->id.recalc |= ID_RECALC_ALL;
BKE_animsys_evaluate_animdata(scene, &ob->id, ob->adt, frame, ADT_RECALC_ANIM);
if (update_mesh) {
/* ignore cache clear during subframe updates
@@ -3665,7 +3776,7 @@ bool BKE_object_modifier_update_subframe(Scene *scene, Object *ob, bool update_m
object_cacheIgnoreClear(ob, 0);
}
else
- BKE_object_where_is_calc_time(scene, ob, frame);
+ BKE_object_where_is_calc_time(eval_ctx, scene, ob, frame);
/* for curve following objects, parented curve has to be updated too */
if (ob->type == OB_CURVE) {
@@ -3676,7 +3787,7 @@ bool BKE_object_modifier_update_subframe(Scene *scene, Object *ob, bool update_m
if (ob->type == OB_ARMATURE) {
bArmature *arm = ob->data;
BKE_animsys_evaluate_animdata(scene, &arm->id, arm->adt, frame, ADT_RECALC_ANIM);
- BKE_pose_where_is(scene, ob);
+ BKE_pose_where_is(eval_ctx, scene, ob);
}
return false;
diff --git a/source/blender/blenkernel/intern/object_deform.c b/source/blender/blenkernel/intern/object_deform.c
index 4f92509827f..c298427b38d 100644
--- a/source/blender/blenkernel/intern/object_deform.c
+++ b/source/blender/blenkernel/intern/object_deform.c
@@ -51,6 +51,7 @@
#include "BKE_editmesh.h"
#include "BKE_object_deform.h" /* own include */
#include "BKE_object.h"
+#include "BKE_mesh.h"
#include "BKE_modifier.h"
/** \name Misc helpers
@@ -405,6 +406,8 @@ void BKE_object_defgroup_remove(Object *ob, bDeformGroup *defgroup)
object_defgroup_remove_edit_mode(ob, defgroup);
else
object_defgroup_remove_object_mode(ob, defgroup);
+
+ BKE_mesh_batch_cache_dirty(ob->data, BKE_MESH_BATCH_DIRTY_ALL);
}
/**
diff --git a/source/blender/blenkernel/intern/object_dupli.c b/source/blender/blenkernel/intern/object_dupli.c
index 56d5cb609fc..f9f6b0aab40 100644
--- a/source/blender/blenkernel/intern/object_dupli.c
+++ b/source/blender/blenkernel/intern/object_dupli.c
@@ -49,10 +49,10 @@
#include "BKE_animsys.h"
#include "BKE_DerivedMesh.h"
-#include "BKE_depsgraph.h"
#include "BKE_font.h"
-#include "BKE_group.h"
#include "BKE_global.h"
+#include "BKE_group.h"
+#include "BKE_idprop.h"
#include "BKE_lattice.h"
#include "BKE_main.h"
#include "BKE_mesh.h"
@@ -62,6 +62,7 @@
#include "BKE_editmesh.h"
#include "BKE_anim.h"
+#include "DEG_depsgraph.h"
#include "BLI_strict_flags.h"
#include "BLI_hash.h"
@@ -69,15 +70,15 @@
/* Dupli-Geometry */
typedef struct DupliContext {
- EvaluationContext *eval_ctx;
+ const EvaluationContext *eval_ctx;
bool do_update;
bool animated;
Group *group; /* XXX child objects are selected from this group if set, could be nicer */
Scene *scene;
+ ViewLayer *view_layer;
Object *object;
float space_mat[4][4];
- unsigned int lay;
int persistent_id[MAX_DUPLI_RECUR];
int level;
@@ -96,10 +97,11 @@ typedef struct DupliGenerator {
static const DupliGenerator *get_dupli_generator(const DupliContext *ctx);
/* create initial context for root object */
-static void init_context(DupliContext *r_ctx, EvaluationContext *eval_ctx, Scene *scene, Object *ob, float space_mat[4][4], bool update)
+static void init_context(DupliContext *r_ctx, const EvaluationContext *eval_ctx, Scene *scene, Object *ob, float space_mat[4][4], bool update)
{
r_ctx->eval_ctx = eval_ctx;
r_ctx->scene = scene;
+ r_ctx->view_layer = eval_ctx->view_layer;
/* don't allow BKE_object_handle_update for viewport during render, can crash */
r_ctx->do_update = update && !(G.is_rendering && eval_ctx->mode != DAG_EVAL_RENDER);
r_ctx->animated = false;
@@ -110,7 +112,6 @@ static void init_context(DupliContext *r_ctx, EvaluationContext *eval_ctx, Scene
copy_m4_m4(r_ctx->space_mat, space_mat);
else
unit_m4(r_ctx->space_mat);
- r_ctx->lay = ob->lay;
r_ctx->level = 0;
r_ctx->gen = get_dupli_generator(r_ctx);
@@ -143,7 +144,8 @@ static void copy_dupli_context(DupliContext *r_ctx, const DupliContext *ctx, Obj
*/
static DupliObject *make_dupli(const DupliContext *ctx,
Object *ob, float mat[4][4], int index,
- bool animated, bool hide)
+ bool animated, bool hide,
+ IDProperty *collection_properties)
{
DupliObject *dob;
int i;
@@ -198,6 +200,10 @@ static DupliObject *make_dupli(const DupliContext *ctx,
dob->random_id ^= BLI_hash_int(BLI_hash_string(ctx->object->id.name + 2));
}
+ if (collection_properties) {
+ dob->collection_properties = IDP_CopyProperty(collection_properties);
+ }
+
return dob;
}
@@ -238,32 +244,30 @@ static void make_child_duplis(const DupliContext *ctx, void *userdata, MakeChild
Object *obedit = ctx->scene->obedit;
if (ctx->group) {
- unsigned int lay = ctx->group->layer;
int groupid = 0;
- GroupObject *go;
- for (go = ctx->group->gobject.first; go; go = go->next, groupid++) {
- Object *ob = go->ob;
-
- if ((ob->lay & lay) && ob != obedit && is_child(ob, parent)) {
+ FOREACH_GROUP_BASE(ctx->group, base)
+ {
+ Object *ob = base->object;
+ if ((base->flag & BASE_VISIBLED) && ob != obedit && is_child(ob, parent)) {
DupliContext pctx;
copy_dupli_context(&pctx, ctx, ctx->object, NULL, groupid, false);
/* mballs have a different dupli handling */
- if (ob->type != OB_MBALL)
+ if (ob->type != OB_MBALL) {
ob->flag |= OB_DONE; /* doesnt render */
-
+ }
make_child_duplis_cb(&pctx, userdata, ob);
}
+ groupid++;
}
+ FOREACH_GROUP_BASE_END
}
else {
- unsigned int lay = ctx->scene->lay;
int baseid = 0;
- Base *base;
- for (base = ctx->scene->base.first; base; base = base->next, baseid++) {
+ ViewLayer *view_layer = ctx->view_layer;
+ for (Base *base = view_layer->object_bases.first; base; base = base->next, baseid++) {
Object *ob = base->object;
-
- if ((base->lay & lay) && ob != obedit && is_child(ob, parent)) {
+ if (ob != obedit && is_child(ob, parent)) {
DupliContext pctx;
copy_dupli_context(&pctx, ctx, ctx->object, NULL, baseid, false);
@@ -283,13 +287,12 @@ static void make_child_duplis(const DupliContext *ctx, void *userdata, MakeChild
/* OB_DUPLIGROUP */
static void make_duplis_group(const DupliContext *ctx)
{
- bool for_render = (ctx->eval_ctx->mode == DAG_EVAL_RENDER);
Object *ob = ctx->object;
Group *group;
- GroupObject *go;
+ Base *base;
float group_mat[4][4];
int id;
- bool animated, hide;
+ bool animated;
if (ob->dup_group == NULL) return;
group = ob->dup_group;
@@ -311,34 +314,18 @@ static void make_duplis_group(const DupliContext *ctx)
animated = BKE_group_is_animated(group, ob);
- for (go = group->gobject.first, id = 0; go; go = go->next, id++) {
- /* note, if you check on layer here, render goes wrong... it still deforms verts and uses parent imat */
- if (go->ob != ob) {
+ for (base = group->view_layer->object_bases.first, id = 0; base; base = base->next, id++) {
+ if (base->object != ob && (base->flag & BASE_VISIBLED)) {
float mat[4][4];
- /* Special case for instancing dupli-groups, see: T40051
- * this object may be instanced via dupli-verts/faces, in this case we don't want to render
- * (blender convention), but _do_ show in the viewport.
- *
- * Regular objects work fine but not if we're instancing dupli-groups,
- * because the rules for rendering aren't applied to objects they instance.
- * We could recursively pass down the 'hide' flag instead, but that seems unnecessary.
- */
- if (for_render && go->ob->parent && go->ob->parent->transflag & (OB_DUPLIVERTS | OB_DUPLIFACES)) {
- continue;
- }
-
/* group dupli offset, should apply after everything else */
- mul_m4_m4m4(mat, group_mat, go->ob->obmat);
+ mul_m4_m4m4(mat, group_mat, base->object->obmat);
- /* check the group instance and object layers match, also that the object visible flags are ok. */
- hide = (go->ob->lay & group->layer) == 0 ||
- (for_render ? go->ob->restrictflag & OB_RESTRICT_RENDER : go->ob->restrictflag & OB_RESTRICT_VIEW);
-
- make_dupli(ctx, go->ob, mat, id, animated, hide);
+ BLI_assert(base->collection_properties != NULL);
+ make_dupli(ctx, base->object, mat, id, animated, false, base->collection_properties);
/* recursion */
- make_recursive_duplis(ctx, go->ob, group_mat, id, animated);
+ make_recursive_duplis(ctx, base->object, group_mat, id, animated);
}
}
}
@@ -377,10 +364,6 @@ static void make_duplis_frames(const DupliContext *ctx)
/* duplicate over the required range */
if (ob->transflag & OB_DUPLINOSPEED) enable_cu_speed = 0;
- /* special flag to avoid setting recalc flags to notify the depsgraph of
- * updates, as this is not a permanent change to the object */
- ob->id.recalc |= ID_RECALC_SKIP_ANIM_TAG;
-
for (scene->r.cfra = ob->dupsta; scene->r.cfra <= dupend; scene->r.cfra++) {
int ok = 1;
@@ -399,9 +382,9 @@ static void make_duplis_frames(const DupliContext *ctx)
* However, this has always been the way that this worked (i.e. pre 2.5), so I guess that it'll be fine!
*/
BKE_animsys_evaluate_animdata(scene, &ob->id, ob->adt, (float)scene->r.cfra, ADT_RECALC_ANIM); /* ob-eval will do drivers, so we don't need to do them */
- BKE_object_where_is_calc_time(scene, ob, (float)scene->r.cfra);
+ BKE_object_where_is_calc_time(ctx->eval_ctx, scene, ob, (float)scene->r.cfra);
- make_dupli(ctx, ob, ob->obmat, scene->r.cfra, false, false);
+ make_dupli(ctx, ob, ob->obmat, scene->r.cfra, false, false, NULL);
}
}
@@ -413,7 +396,7 @@ static void make_duplis_frames(const DupliContext *ctx)
scene->r.cfra = cfrao;
BKE_animsys_evaluate_animdata(scene, &ob->id, ob->adt, (float)scene->r.cfra, ADT_RECALC_ANIM); /* ob-eval will do drivers, so we don't need to do them */
- BKE_object_where_is_calc_time(scene, ob, (float)scene->r.cfra);
+ BKE_object_where_is_calc_time(ctx->eval_ctx, scene, ob, (float)scene->r.cfra);
/* but, to make sure unkeyed object transforms are still sane,
* let's copy object's original data back over
@@ -486,7 +469,7 @@ static void vertex_dupli__mapFunc(void *userData, int index, const float co[3],
*/
mul_m4_m4m4(space_mat, obmat, inst_ob->imat);
- dob = make_dupli(vdd->ctx, vdd->inst_ob, obmat, index, false, false);
+ dob = make_dupli(vdd->ctx, vdd->inst_ob, obmat, index, false, false, NULL);
if (vdd->orco)
copy_v3_v3(dob->orco, vdd->orco[index]);
@@ -548,13 +531,13 @@ static void make_duplis_verts(const DupliContext *ctx)
CustomDataMask dm_mask = (use_texcoords ? CD_MASK_BAREMESH | CD_MASK_ORCO : CD_MASK_BAREMESH);
if (ctx->eval_ctx->mode == DAG_EVAL_RENDER) {
- vdd.dm = mesh_create_derived_render(scene, parent, dm_mask);
+ vdd.dm = mesh_create_derived_render(ctx->eval_ctx, scene, parent, dm_mask);
}
else if (em) {
- vdd.dm = editbmesh_get_derived_cage(scene, parent, em, dm_mask);
+ vdd.dm = editbmesh_get_derived_cage(ctx->eval_ctx, scene, parent, em, dm_mask);
}
else {
- vdd.dm = mesh_get_derived_final(scene, parent, dm_mask);
+ vdd.dm = mesh_get_derived_final(ctx->eval_ctx, scene, parent, dm_mask);
}
vdd.edit_btmesh = me->edit_btmesh;
@@ -671,7 +654,7 @@ static void make_duplis_font(const DupliContext *ctx)
copy_v3_v3(obmat[3], vec);
- make_dupli(ctx, ob, obmat, a, false, false);
+ make_dupli(ctx, ob, obmat, a, false, false, NULL);
}
}
@@ -777,7 +760,7 @@ static void make_child_duplis_faces(const DupliContext *ctx, void *userdata, Obj
*/
mul_m4_m4m4(space_mat, obmat, inst_ob->imat);
- dob = make_dupli(ctx, inst_ob, obmat, a, false, false);
+ dob = make_dupli(ctx, inst_ob, obmat, a, false, false, NULL);
if (use_texcoords) {
float w = 1.0f / (float)mp->totloop;
@@ -816,13 +799,13 @@ static void make_duplis_faces(const DupliContext *ctx)
CustomDataMask dm_mask = (use_texcoords ? CD_MASK_BAREMESH | CD_MASK_ORCO | CD_MASK_MLOOPUV : CD_MASK_BAREMESH);
if (ctx->eval_ctx->mode == DAG_EVAL_RENDER) {
- fdd.dm = mesh_create_derived_render(scene, parent, dm_mask);
+ fdd.dm = mesh_create_derived_render(ctx->eval_ctx, scene, parent, dm_mask);
}
else if (em) {
- fdd.dm = editbmesh_get_derived_cage(scene, parent, em, dm_mask);
+ fdd.dm = editbmesh_get_derived_cage(ctx->eval_ctx, scene, parent, em, dm_mask);
}
else {
- fdd.dm = mesh_get_derived_final(scene, parent, dm_mask);
+ fdd.dm = mesh_get_derived_final(ctx->eval_ctx, scene, parent, dm_mask);
}
if (use_texcoords) {
@@ -860,7 +843,6 @@ static void make_duplis_particle_system(const DupliContext *ctx, ParticleSystem
bool for_render = ctx->eval_ctx->mode == DAG_EVAL_RENDER;
bool use_texcoords = ELEM(ctx->eval_ctx->mode, DAG_EVAL_RENDER, DAG_EVAL_PREVIEW);
- GroupObject *go;
Object *ob = NULL, **oblist = NULL, obcopy, *obcopylist = NULL;
DupliObject *dob;
ParticleDupliWeight *dw;
@@ -900,6 +882,7 @@ static void make_duplis_particle_system(const DupliContext *ctx, ParticleSystem
if ((psys->renderdata || part->draw_as == PART_DRAW_REND) && ELEM(part->ren_as, PART_DRAW_OB, PART_DRAW_GR)) {
ParticleSimulationData sim = {NULL};
+ sim.eval_ctx = ctx->eval_ctx;
sim.scene = scene;
sim.ob = par;
sim.psys = psys;
@@ -913,10 +896,10 @@ static void make_duplis_particle_system(const DupliContext *ctx, ParticleSystem
return;
}
else { /*PART_DRAW_GR */
- if (part->dup_group == NULL || BLI_listbase_is_empty(&part->dup_group->gobject))
+ if (part->dup_group == NULL || BLI_listbase_is_empty(&part->dup_group->view_layer->object_bases))
return;
- if (BLI_findptr(&part->dup_group->gobject, par, offsetof(GroupObject, ob))) {
+ if (BLI_findptr(&part->dup_group->view_layer->object_bases, par, offsetof(Base, object))) {
return;
}
}
@@ -948,8 +931,12 @@ static void make_duplis_particle_system(const DupliContext *ctx, ParticleSystem
totgroup += dw->count;
}
else {
- for (go = part->dup_group->gobject.first; go; go = go->next)
+ FOREACH_GROUP_OBJECT(part->dup_group, object)
+ {
+ (void) object;
totgroup++;
+ }
+ FOREACH_GROUP_OBJECT_END
}
/* we also copy the actual objects to restore afterwards, since
@@ -968,11 +955,18 @@ static void make_duplis_particle_system(const DupliContext *ctx, ParticleSystem
}
}
else {
- go = part->dup_group->gobject.first;
- for (a = 0; a < totgroup; a++, go = go->next) {
- oblist[a] = go->ob;
- obcopylist[a] = *go->ob;
+ a = 0;
+ FOREACH_GROUP_OBJECT(part->dup_group, object)
+ {
+ oblist[a] = object;
+ obcopylist[a] = *object;
+ a++;
+
+ if (a >= totgroup) {
+ continue;
+ }
}
+ FOREACH_GROUP_OBJECT_END
}
}
else {
@@ -1061,27 +1055,37 @@ static void make_duplis_particle_system(const DupliContext *ctx, ParticleSystem
}
if (part->ren_as == PART_DRAW_GR && psys->part->draw & PART_DRAW_WHOLE_GR) {
- for (go = part->dup_group->gobject.first, b = 0; go; go = go->next, b++) {
-
+ b = 0;
+ FOREACH_GROUP_OBJECT(part->dup_group, object)
+ {
copy_m4_m4(tmat, oblist[b]->obmat);
+
/* apply particle scale */
mul_mat3_m4_fl(tmat, size * scale);
mul_v3_fl(tmat[3], size * scale);
+
/* group dupli offset, should apply after everything else */
- if (!is_zero_v3(part->dup_group->dupli_ofs))
+ if (!is_zero_v3(part->dup_group->dupli_ofs)) {
sub_v3_v3(tmat[3], part->dup_group->dupli_ofs);
+ }
+
/* individual particle transform */
mul_m4_m4m4(mat, pamat, tmat);
- dob = make_dupli(ctx, go->ob, mat, a, false, false);
+ dob = make_dupli(ctx, object, mat, a, false, false, NULL);
dob->particle_system = psys;
- if (use_texcoords)
+
+ if (use_texcoords) {
psys_get_dupli_texture(psys, part, sim.psmd, pa, cpa, dob->uv, dob->orco);
+ }
+
+ b++;
}
+ FOREACH_GROUP_OBJECT_END
}
else {
/* to give ipos in object correct offset */
- BKE_object_where_is_calc_time(scene, ob, ctime - pa_time);
+ BKE_object_where_is_calc_time(ctx->eval_ctx, scene, ob, ctime - pa_time);
copy_v3_v3(vec, obmat[3]);
obmat[3][0] = obmat[3][1] = obmat[3][2] = 0.0f;
@@ -1122,7 +1126,7 @@ static void make_duplis_particle_system(const DupliContext *ctx, ParticleSystem
if (part->draw & PART_DRAW_GLOBAL_OB)
add_v3_v3v3(mat[3], mat[3], vec);
- dob = make_dupli(ctx, ob, mat, a, false, false);
+ dob = make_dupli(ctx, ob, mat, a, false, false, NULL);
dob->particle_system = psys;
if (use_texcoords)
psys_get_dupli_texture(psys, part, sim.psmd, pa, cpa, dob->uv, dob->orco);
@@ -1217,7 +1221,7 @@ static const DupliGenerator *get_dupli_generator(const DupliContext *ctx)
/* ---- ListBase dupli container implementation ---- */
/* Returns a list of DupliObject */
-ListBase *object_duplilist_ex(EvaluationContext *eval_ctx, Scene *scene, Object *ob, bool update)
+ListBase *object_duplilist_ex(const EvaluationContext *eval_ctx, Scene *scene, Object *ob, bool update)
{
ListBase *duplilist = MEM_callocN(sizeof(ListBase), "duplilist");
DupliContext ctx;
@@ -1232,13 +1236,21 @@ ListBase *object_duplilist_ex(EvaluationContext *eval_ctx, Scene *scene, Object
/* note: previously updating was always done, this is why it defaults to be on
* but there are likely places it can be called without updating */
-ListBase *object_duplilist(EvaluationContext *eval_ctx, Scene *sce, Object *ob)
+ListBase *object_duplilist(const EvaluationContext *eval_ctx, Scene *sce, Object *ob)
{
return object_duplilist_ex(eval_ctx, sce, ob, true);
}
void free_object_duplilist(ListBase *lb)
{
+
+ for (DupliObject *dob = lb->first; dob; dob = dob->next) {
+ if (dob->collection_properties) {
+ IDP_FreeProperty(dob->collection_properties);
+ MEM_freeN(dob->collection_properties);
+ }
+ }
+
BLI_freelistN(lb);
MEM_freeN(lb);
}
@@ -1273,7 +1285,7 @@ int count_duplilist(Object *ob)
return 1;
}
-DupliApplyData *duplilist_apply(Object *ob, Scene *scene, ListBase *duplilist)
+DupliApplyData *duplilist_apply(const EvaluationContext *eval_ctx, Object *ob, Scene *scene, ListBase *duplilist)
{
DupliApplyData *apply_data = NULL;
int num_objects = BLI_listbase_count(duplilist);
@@ -1289,7 +1301,7 @@ DupliApplyData *duplilist_apply(Object *ob, Scene *scene, ListBase *duplilist)
for (dob = duplilist->first, i = 0; dob; dob = dob->next, ++i) {
/* make sure derivedmesh is calculated once, before drawing */
if (scene && !(dob->ob->transflag & OB_DUPLICALCDERIVED) && dob->ob->type == OB_MESH) {
- mesh_get_derived_final(scene, dob->ob, scene->customdata_mask);
+ mesh_get_derived_final(eval_ctx, scene, dob->ob, scene->customdata_mask);
dob->ob->transflag |= OB_DUPLICALCDERIVED;
}
}
diff --git a/source/blender/blenkernel/intern/object_facemap.c b/source/blender/blenkernel/intern/object_facemap.c
new file mode 100644
index 00000000000..1218dd376cb
--- /dev/null
+++ b/source/blender/blenkernel/intern/object_facemap.c
@@ -0,0 +1,257 @@
+
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2008 Blender Foundation.
+ * All rights reserved.
+ *
+ *
+ * Contributor(s): Blender Foundation
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/blenkernel/intern/object_facemap.c
+ * \ingroup bke
+ */
+
+#include <string.h>
+
+#include "DNA_object_types.h"
+#include "DNA_mesh_types.h"
+
+#include "BLI_utildefines.h"
+#include "BLI_path_util.h"
+#include "BLI_string.h"
+#include "BLI_string_utils.h"
+#include "BLI_listbase.h"
+
+#include "BKE_context.h"
+#include "BKE_customdata.h"
+#include "BKE_editmesh.h"
+#include "BKE_object.h"
+#include "BKE_object_facemap.h" /* own include */
+#include "BKE_object_deform.h"
+
+#include "BLT_translation.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "RNA_define.h"
+#include "RNA_access.h"
+
+static bool fmap_unique_check(void *arg, const char *name)
+{
+ struct {Object *ob; void *fm; } *data = arg;
+
+ bFaceMap *fmap;
+
+ for (fmap = data->ob->fmaps.first; fmap; fmap = fmap->next) {
+ if (data->fm != fmap) {
+ if (!strcmp(fmap->name, name)) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+static bFaceMap *fmap_duplicate(bFaceMap *infmap)
+{
+ bFaceMap *outfmap;
+
+ if (!infmap)
+ return NULL;
+
+ outfmap = MEM_callocN(sizeof(bFaceMap), "copy facemap");
+
+ /* For now, just copy everything over. */
+ memcpy(outfmap, infmap, sizeof(bFaceMap));
+
+ outfmap->next = outfmap->prev = NULL;
+
+ return outfmap;
+}
+
+void BKE_object_facemap_copy_list(ListBase *outbase, const ListBase *inbase)
+{
+ bFaceMap *fmap, *fmapn;
+
+ BLI_listbase_clear(outbase);
+
+ for (fmap = inbase->first; fmap; fmap = fmap->next) {
+ fmapn = fmap_duplicate(fmap);
+ BLI_addtail(outbase, fmapn);
+ }
+}
+
+void BKE_object_facemap_unique_name(Object *ob, bFaceMap *fmap)
+{
+ struct {Object *ob; void *fmap; } data;
+ data.ob = ob;
+ data.fmap = fmap;
+
+ BLI_uniquename_cb(fmap_unique_check, &data, DATA_("Group"), '.', fmap->name, sizeof(fmap->name));
+}
+
+bFaceMap *BKE_object_facemap_add_name(Object *ob, const char *name)
+{
+ bFaceMap *fmap;
+
+ if (!ob || ob->type != OB_MESH)
+ return NULL;
+
+ fmap = MEM_callocN(sizeof(bFaceMap), __func__);
+
+ BLI_strncpy(fmap->name, name, sizeof(fmap->name));
+
+ BLI_addtail(&ob->fmaps, fmap);
+
+ ob->actfmap = BLI_listbase_count(&ob->fmaps);
+
+ BKE_object_facemap_unique_name(ob, fmap);
+
+ return fmap;
+}
+
+bFaceMap *BKE_object_facemap_add(Object *ob)
+{
+ return BKE_object_facemap_add_name(ob, DATA_("FaceMap"));
+}
+
+
+static void object_fmap_remove_edit_mode(Object *ob, bFaceMap *fmap, bool do_selected, bool purge)
+{
+ const int fmap_nr = BLI_findindex(&ob->fmaps, fmap);
+
+ if (ob->type == OB_MESH) {
+ Mesh *me = ob->data;
+
+ if (me->edit_btmesh) {
+ BMEditMesh *em = me->edit_btmesh;
+ const int cd_fmap_offset = CustomData_get_offset(&em->bm->pdata, CD_FACEMAP);
+
+ if (cd_fmap_offset != -1) {
+ BMFace *efa;
+ BMIter iter;
+ int *map;
+
+ if (purge) {
+ BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
+ map = BM_ELEM_CD_GET_VOID_P(efa, cd_fmap_offset);
+
+ if (map) {
+ if (*map == fmap_nr)
+ *map = -1;
+ else if (*map > fmap_nr)
+ *map -= 1;
+ }
+ }
+ }
+ else {
+ BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
+ map = BM_ELEM_CD_GET_VOID_P(efa, cd_fmap_offset);
+
+ if (map && *map == fmap_nr && (!do_selected || BM_elem_flag_test(efa, BM_ELEM_SELECT))) {
+ *map = -1;
+ }
+ }
+ }
+ }
+
+ if (ob->actfmap == BLI_listbase_count(&ob->fmaps))
+ ob->actfmap--;
+
+ BLI_remlink(&ob->fmaps, fmap);
+ MEM_freeN(fmap);
+ }
+ }
+}
+
+static void object_fmap_remove_object_mode(Object *ob, bFaceMap *fmap, bool purge)
+{
+ const int fmap_nr = BLI_findindex(&ob->fmaps, fmap);
+
+ if (ob->type == OB_MESH) {
+ Mesh *me = ob->data;
+
+ if (CustomData_has_layer(&me->pdata, CD_FACEMAP)) {
+ int *map = CustomData_get_layer(&me->pdata, CD_FACEMAP);
+ int i;
+
+ if (map) {
+ for (i = 0; i < me->totpoly; i++) {
+ if (map[i] == fmap_nr)
+ map[i] = -1;
+ else if (purge && map[i] > fmap_nr)
+ map[i]--;
+ }
+ }
+ }
+
+ if (ob->actfmap == BLI_listbase_count(&ob->fmaps))
+ ob->actfmap--;
+
+ BLI_remlink(&ob->fmaps, fmap);
+ MEM_freeN(fmap);
+ }
+}
+
+static void fmap_remove_exec(Object *ob, bFaceMap *fmap, const bool is_edit_mode, const bool purge)
+{
+ if (is_edit_mode)
+ object_fmap_remove_edit_mode(ob, fmap, false, purge);
+ else
+ object_fmap_remove_object_mode(ob, fmap, purge);
+}
+
+void BKE_object_facemap_remove(Object *ob, bFaceMap *fmap)
+{
+ fmap_remove_exec(ob, fmap, BKE_object_is_in_editmode(ob), true);
+}
+
+void BKE_object_facemap_clear(Object *ob)
+{
+ bFaceMap *fmap = (bFaceMap *)ob->fmaps.first;
+
+ if (fmap) {
+ const bool edit_mode = BKE_object_is_in_editmode_vgroup(ob);
+
+ while (fmap) {
+ bFaceMap *next_fmap = fmap->next;
+ fmap_remove_exec(ob, fmap, edit_mode, false);
+ fmap = next_fmap;
+ }
+ }
+ /* remove all face-maps */
+ if (ob->type == OB_MESH) {
+ Mesh *me = ob->data;
+ CustomData_free_layer(&me->pdata, CD_FACEMAP, me->totpoly, 0);
+ }
+ ob->actfmap = 0;
+}
+
+int BKE_object_facemap_name_index(Object *ob, const char *name)
+{
+ return (name) ? BLI_findstringindex(&ob->fmaps, name, offsetof(bFaceMap, name)) : -1;
+}
+
+bFaceMap *BKE_object_facemap_find_name(Object *ob, const char *name)
+{
+ return BLI_findstring(&ob->fmaps, name, offsetof(bFaceMap, name));
+}
diff --git a/source/blender/blenkernel/intern/object_update.c b/source/blender/blenkernel/intern/object_update.c
index 84d2f624577..bc183ba95a6 100644
--- a/source/blender/blenkernel/intern/object_update.c
+++ b/source/blender/blenkernel/intern/object_update.c
@@ -32,18 +32,18 @@
#include "DNA_group_types.h"
#include "DNA_key_types.h"
#include "DNA_material_types.h"
+#include "DNA_mesh_types.h"
#include "DNA_scene_types.h"
#include "BLI_blenlib.h"
#include "BLI_utildefines.h"
#include "BLI_math.h"
-#include "BLI_threads.h"
#include "BKE_global.h"
#include "BKE_armature.h"
#include "BKE_action.h"
#include "BKE_constraint.h"
-#include "BKE_depsgraph.h"
+#include "BKE_curve.h"
#include "BKE_DerivedMesh.h"
#include "BKE_animsys.h"
#include "BKE_displist.h"
@@ -51,28 +51,26 @@
#include "BKE_key.h"
#include "BKE_lamp.h"
#include "BKE_lattice.h"
+#include "BKE_library.h"
#include "BKE_editmesh.h"
#include "BKE_object.h"
#include "BKE_particle.h"
#include "BKE_pointcache.h"
#include "BKE_scene.h"
#include "BKE_material.h"
+#include "BKE_mball.h"
+#include "BKE_mesh.h"
#include "BKE_image.h"
+#include "MEM_guardedalloc.h"
#include "DEG_depsgraph.h"
-#ifdef WITH_LEGACY_DEPSGRAPH
-# define DEBUG_PRINT if (!DEG_depsgraph_use_legacy() && G.debug & G_DEBUG_DEPSGRAPH) printf
-#else
-# define DEBUG_PRINT if (G.debug & G_DEBUG_DEPSGRAPH) printf
-#endif
-
-static ThreadMutex material_lock = BLI_MUTEX_INITIALIZER;
+#define DEBUG_PRINT if (G.debug & G_DEBUG_DEPSGRAPH) printf
-void BKE_object_eval_local_transform(EvaluationContext *UNUSED(eval_ctx),
+void BKE_object_eval_local_transform(const EvaluationContext *UNUSED(eval_ctx),
Object *ob)
{
- DEBUG_PRINT("%s on %s\n", __func__, ob->id.name);
+ DEBUG_PRINT("%s on %s (%p)\n", __func__, ob->id.name, ob);
/* calculate local matrix */
BKE_object_to_mat4(ob, ob->obmat);
@@ -80,7 +78,7 @@ void BKE_object_eval_local_transform(EvaluationContext *UNUSED(eval_ctx),
/* Evaluate parent */
/* NOTE: based on solve_parenting(), but with the cruft stripped out */
-void BKE_object_eval_parent(EvaluationContext *UNUSED(eval_ctx),
+void BKE_object_eval_parent(const EvaluationContext *UNUSED(eval_ctx),
Scene *scene,
Object *ob)
{
@@ -90,7 +88,7 @@ void BKE_object_eval_parent(EvaluationContext *UNUSED(eval_ctx),
float tmat[4][4];
float locmat[4][4];
- DEBUG_PRINT("%s on %s\n", __func__, ob->id.name);
+ DEBUG_PRINT("%s on %s (%p)\n", __func__, ob->id.name, ob);
/* get local matrix (but don't calculate it, as that was done already!) */
// XXX: redundant?
@@ -112,14 +110,14 @@ void BKE_object_eval_parent(EvaluationContext *UNUSED(eval_ctx),
}
}
-void BKE_object_eval_constraints(EvaluationContext *UNUSED(eval_ctx),
+void BKE_object_eval_constraints(const EvaluationContext *eval_ctx,
Scene *scene,
Object *ob)
{
bConstraintOb *cob;
float ctime = BKE_scene_frame_get(scene);
- DEBUG_PRINT("%s on %s\n", __func__, ob->id.name);
+ DEBUG_PRINT("%s on %s (%p)\n", __func__, ob->id.name, ob);
/* evaluate constraints stack */
/* TODO: split this into:
@@ -131,22 +129,23 @@ void BKE_object_eval_constraints(EvaluationContext *UNUSED(eval_ctx),
*
*/
cob = BKE_constraints_make_evalob(scene, ob, NULL, CONSTRAINT_OBTYPE_OBJECT);
- BKE_constraints_solve(&ob->constraints, cob, ctime);
+ BKE_constraints_solve(eval_ctx, &ob->constraints, cob, ctime);
BKE_constraints_clear_evalob(cob);
}
-void BKE_object_eval_done(EvaluationContext *UNUSED(eval_ctx), Object *ob)
+void BKE_object_eval_done(const EvaluationContext *UNUSED(eval_ctx), Object *ob)
{
- DEBUG_PRINT("%s on %s\n", __func__, ob->id.name);
+ DEBUG_PRINT("%s on %s (%p)\n", __func__, ob->id.name, ob);
/* Set negative scale flag in object. */
if (is_negative_m4(ob->obmat)) ob->transflag |= OB_NEG_SCALE;
else ob->transflag &= ~OB_NEG_SCALE;
}
-void BKE_object_handle_data_update(EvaluationContext *eval_ctx,
- Scene *scene,
- Object *ob)
+void BKE_object_handle_data_update(
+ const EvaluationContext *eval_ctx,
+ Scene *scene,
+ Object *ob)
{
ID *data_id = (ID *)ob->data;
AnimData *adt = BKE_animdata_from_id(data_id);
@@ -183,10 +182,10 @@ void BKE_object_handle_data_update(EvaluationContext *eval_ctx,
}
#endif
if (em) {
- makeDerivedMesh(scene, ob, em, data_mask, false); /* was CD_MASK_BAREMESH */
+ makeDerivedMesh(eval_ctx, scene, ob, em, data_mask, false); /* was CD_MASK_BAREMESH */
}
else {
- makeDerivedMesh(scene, ob, NULL, data_mask, false);
+ makeDerivedMesh(eval_ctx, scene, ob, NULL, data_mask, false);
}
break;
}
@@ -198,7 +197,7 @@ void BKE_object_handle_data_update(EvaluationContext *eval_ctx,
}
}
else {
- BKE_pose_where_is(scene, ob);
+ BKE_pose_where_is(eval_ctx, scene, ob);
}
break;
@@ -209,11 +208,11 @@ void BKE_object_handle_data_update(EvaluationContext *eval_ctx,
case OB_CURVE:
case OB_SURF:
case OB_FONT:
- BKE_displist_make_curveTypes(scene, ob, 0);
+ BKE_displist_make_curveTypes(eval_ctx, scene, ob, 0);
break;
case OB_LATTICE:
- BKE_lattice_modifiers_calc(scene, ob);
+ BKE_lattice_modifiers_calc(eval_ctx, scene, ob);
break;
case OB_EMPTY:
@@ -223,28 +222,6 @@ void BKE_object_handle_data_update(EvaluationContext *eval_ctx,
break;
}
- /* related materials */
- /* XXX: without depsgraph tagging, this will always need to be run, which will be slow!
- * However, not doing anything (or trying to hack around this lack) is not an option
- * anymore, especially due to Cycles [#31834]
- */
- if (ob->totcol) {
- int a;
- if (ob->totcol != 0) {
- BLI_mutex_lock(&material_lock);
- for (a = 1; a <= ob->totcol; a++) {
- Material *ma = give_current_material(ob, a);
- if (ma) {
- /* recursively update drivers for this material */
- material_drivers_update(scene, ma, ctime);
- }
- }
- BLI_mutex_unlock(&material_lock);
- }
- }
- else if (ob->type == OB_LAMP)
- lamp_drivers_update(scene, ob->data, ctime);
-
/* particles */
if (ob != scene->obedit && ob->particlesystem.first) {
ParticleSystem *tpsys, *psys;
@@ -266,7 +243,7 @@ void BKE_object_handle_data_update(EvaluationContext *eval_ctx,
ob->transflag |= OB_DUPLIPARTS;
}
- particle_system_update(scene, ob, psys, (eval_ctx->mode == DAG_EVAL_RENDER));
+ particle_system_update(eval_ctx, scene, ob, psys, (eval_ctx->mode == DAG_EVAL_RENDER));
psys = psys->next;
}
else if (psys->flag & PSYS_DELETE) {
@@ -284,7 +261,7 @@ void BKE_object_handle_data_update(EvaluationContext *eval_ctx,
* the derivedmesh must be created before init_render_mesh,
* since object_duplilist does dupliparticles before that */
CustomDataMask data_mask = CD_MASK_BAREMESH | CD_MASK_MFACE | CD_MASK_MTFACE | CD_MASK_MCOL;
- dm = mesh_create_derived_render(scene, ob, data_mask);
+ dm = mesh_create_derived_render(eval_ctx, scene, ob, data_mask);
dm->release(dm);
for (psys = ob->particlesystem.first; psys; psys = psys->next)
@@ -295,7 +272,7 @@ void BKE_object_handle_data_update(EvaluationContext *eval_ctx,
/* quick cache removed */
}
-bool BKE_object_eval_proxy_copy(EvaluationContext *UNUSED(eval_ctx),
+bool BKE_object_eval_proxy_copy(const EvaluationContext *UNUSED(eval_ctx),
Object *object)
{
/* Handle proxy copy for target, */
@@ -319,35 +296,98 @@ bool BKE_object_eval_proxy_copy(EvaluationContext *UNUSED(eval_ctx),
return false;
}
-void BKE_object_eval_uber_transform(EvaluationContext *eval_ctx, Object *object)
+void BKE_object_eval_uber_transform(const EvaluationContext *eval_ctx, Object *object)
{
BKE_object_eval_proxy_copy(eval_ctx, object);
- object->recalc &= ~(OB_RECALC_OB | OB_RECALC_TIME);
- if (object->data == NULL) {
- object->recalc &= ~OB_RECALC_DATA;
- }
}
-void BKE_object_eval_uber_data(EvaluationContext *eval_ctx,
+void BKE_object_eval_uber_data(const EvaluationContext *eval_ctx,
Scene *scene,
Object *ob)
{
- DEBUG_PRINT("%s on %s\n", __func__, ob->id.name);
+ DEBUG_PRINT("%s on %s (%p)\n", __func__, ob->id.name, ob);
BLI_assert(ob->type != OB_ARMATURE);
BKE_object_handle_data_update(eval_ctx, scene, ob);
- ob->recalc &= ~(OB_RECALC_DATA | OB_RECALC_TIME);
+ switch (ob->type) {
+ case OB_MESH:
+ BKE_mesh_batch_cache_dirty(ob->data, BKE_MESH_BATCH_DIRTY_ALL);
+ break;
+ case OB_LATTICE:
+ BKE_lattice_batch_cache_dirty(ob->data, BKE_LATTICE_BATCH_DIRTY_ALL);
+ break;
+ case OB_CURVE:
+ case OB_FONT:
+ case OB_SURF:
+ BKE_curve_batch_cache_dirty(ob->data, BKE_CURVE_BATCH_DIRTY_ALL);
+ break;
+ case OB_MBALL:
+ BKE_mball_batch_cache_dirty(ob->data, BKE_MBALL_BATCH_DIRTY_ALL);
+ break;
+ }
+
+ if (DEG_depsgraph_use_copy_on_write()) {
+ if (ob->type == OB_MESH) {
+ /* Quick hack to convert evaluated derivedMesh to Mesh. */
+ DerivedMesh *dm = ob->derivedFinal;
+ if (dm != NULL) {
+ Mesh *mesh = (Mesh *)ob->data;
+ Mesh *new_mesh = BKE_libblock_alloc_notest(ID_ME);
+ BKE_mesh_init(new_mesh);
+ /* Copy ID name so GS(new_mesh->id) works correct later on. */
+ BLI_strncpy(new_mesh->id.name, mesh->id.name, sizeof(new_mesh->id.name));
+ /* Copy materials so render engines can access them. */
+ new_mesh->mat = MEM_dupallocN(mesh->mat);
+ new_mesh->totcol = mesh->totcol;
+ DM_to_mesh(dm, new_mesh, ob, CD_MASK_MESH, true);
+ new_mesh->edit_btmesh = mesh->edit_btmesh;
+ /* Store result mesh as derived_mesh of object. This way we have
+ * explicit way to query final object evaluated data and know for sure
+ * who owns the newly created mesh datablock.
+ */
+ ob->mesh_evaluated = new_mesh;
+ /* TODO(sergey): This is kind of compatibility thing, so all render
+ * engines can use object->data for mesh data for display. This is
+ * something what we might want to change in the future.
+ */
+ ob->data = new_mesh;
+ /* Special flags to help debugging. */
+ new_mesh->id.tag |= LIB_TAG_COPY_ON_WRITE_EVAL;
+ /* Save some memory by throwing DerivedMesh away. */
+ /* NOTE: Watch out, some tools might need it!
+ * So keep around for now..
+ */
+ /* Store original ID as a pointer in evaluated ID.
+ * This way we can restore original object data when we are freeing
+ * evaluated mesh.
+ */
+ new_mesh->id.orig_id = &mesh->id;
+ }
+#if 0
+ if (ob->derivedFinal != NULL) {
+ ob->derivedFinal->needsFree = 1;
+ ob->derivedFinal->release(ob->derivedFinal);
+ ob->derivedFinal = NULL;
+ }
+ if (ob->derivedDeform != NULL) {
+ ob->derivedDeform->needsFree = 1;
+ ob->derivedDeform->release(ob->derivedDeform);
+ ob->derivedDeform = NULL;
+ }
+#endif
+ }
+ }
}
-void BKE_object_eval_cloth(EvaluationContext *UNUSED(eval_ctx),
+void BKE_object_eval_cloth(const EvaluationContext *UNUSED(eval_ctx),
Scene *scene,
Object *object)
{
- DEBUG_PRINT("%s on %s\n", __func__, object->id.name);
+ DEBUG_PRINT("%s on %s (%p)\n", __func__, object->id.name, object);
BKE_ptcache_object_reset(scene, object, PTCACHE_RESET_DEPSGRAPH);
}
-void BKE_object_eval_transform_all(EvaluationContext *eval_ctx,
+void BKE_object_eval_transform_all(const EvaluationContext *eval_ctx,
Scene *scene,
Object *object)
{
@@ -362,3 +402,55 @@ void BKE_object_eval_transform_all(EvaluationContext *eval_ctx,
BKE_object_eval_uber_transform(eval_ctx, object);
BKE_object_eval_done(eval_ctx, object);
}
+
+void BKE_object_eval_update_shading(const EvaluationContext *UNUSED(eval_ctx),
+ Object *object)
+{
+ DEBUG_PRINT("%s on %s (%p)\n", __func__, object->id.name, object);
+ if (object->type == OB_MESH) {
+ BKE_mesh_batch_cache_dirty(object->data, BKE_MESH_BATCH_DIRTY_SHADING);
+ }
+}
+
+void BKE_object_data_select_update(const EvaluationContext *UNUSED(eval_ctx),
+ struct ID *object_data)
+{
+ DEBUG_PRINT("%s on %s (%p)\n", __func__, object_data->name, object_data);
+ switch (GS(object_data->name)) {
+ case ID_ME:
+ BKE_mesh_batch_cache_dirty((Mesh *)object_data,
+ BKE_CURVE_BATCH_DIRTY_SELECT);
+ break;
+ case ID_CU:
+ BKE_curve_batch_cache_dirty((Curve *)object_data,
+ BKE_CURVE_BATCH_DIRTY_SELECT);
+ break;
+ case ID_LT:
+ BKE_lattice_batch_cache_dirty((struct Lattice *)object_data,
+ BKE_CURVE_BATCH_DIRTY_SELECT);
+ break;
+ default:
+ break;
+ }
+}
+
+void BKE_object_eval_flush_base_flags(const EvaluationContext *UNUSED(eval_ctx),
+ Object *object, Base *base, bool is_from_set)
+{
+ DEBUG_PRINT("%s on %s (%p)\n", __func__, object->id.name, object);
+
+ /* Make sure we have the base collection settings is already populated.
+ * This will fail when BKE_layer_eval_layer_collection_pre hasn't run yet.
+ *
+ * Which usually means a missing call to DEG_id_tag_update(id, DEG_TAG_BASE_FLAGS_UPDATE).
+ * Either of the entire scene, or of the newly added objects.*/
+ BLI_assert(!BLI_listbase_is_empty(&base->collection_properties->data.group));
+
+ /* Copy flags and settings from base. */
+ object->base_flag = base->flag;
+ if (is_from_set) {
+ object->base_flag |= BASE_FROM_SET;
+ object->base_flag &= ~(BASE_SELECTED | BASE_SELECTABLED);
+ }
+ object->base_collection_properties = base->collection_properties;
+}
diff --git a/source/blender/blenkernel/intern/outliner_treehash.c b/source/blender/blenkernel/intern/outliner_treehash.c
index 4d97121e2a3..d9a602aa41e 100644
--- a/source/blender/blenkernel/intern/outliner_treehash.c
+++ b/source/blender/blenkernel/intern/outliner_treehash.c
@@ -27,6 +27,7 @@
*/
#include <stdlib.h>
+#include <string.h>
#include "BLI_utildefines.h"
#include "BLI_ghash.h"
@@ -56,7 +57,7 @@ static TseGroup *tse_group_create(void)
return tse_group;
}
-static void tse_group_add(TseGroup *tse_group, TreeStoreElem *elem)
+static void tse_group_add_element(TseGroup *tse_group, TreeStoreElem *elem)
{
if (UNLIKELY(tse_group->size == tse_group->allocated)) {
tse_group->allocated *= 2;
@@ -66,6 +67,26 @@ static void tse_group_add(TseGroup *tse_group, TreeStoreElem *elem)
tse_group->size++;
}
+static void tse_group_remove_element(TseGroup *tse_group, TreeStoreElem *elem)
+{
+ int min_allocated = MAX2(1, tse_group->allocated / 2);
+ BLI_assert(tse_group->allocated == 1 || (tse_group->allocated % 2) == 0);
+
+ tse_group->size--;
+ BLI_assert(tse_group->size >= 0);
+ for (int i = 0; i < tse_group->size; i++) {
+ if (tse_group->elems[i] == elem) {
+ memcpy(tse_group->elems[i], tse_group->elems[i + 1], (tse_group->size - (i + 1)) * sizeof(TreeStoreElem *));
+ break;
+ }
+ }
+
+ if (UNLIKELY(tse_group->size > 0 && tse_group->size <= min_allocated)) {
+ tse_group->allocated = min_allocated;
+ tse_group->elems = MEM_reallocN(tse_group->elems, sizeof(TreeStoreElem *) * tse_group->allocated);
+ }
+}
+
static void tse_group_free(TseGroup *tse_group)
{
MEM_freeN(tse_group->elems);
@@ -140,7 +161,21 @@ void BKE_outliner_treehash_add_element(void *treehash, TreeStoreElem *elem)
*val_p = tse_group_create();
}
group = *val_p;
- tse_group_add(group, elem);
+ tse_group_add_element(group, elem);
+}
+
+void BKE_outliner_treehash_remove_element(void *treehash, TreeStoreElem *elem)
+{
+ TseGroup *group = BLI_ghash_lookup(treehash, elem);
+
+ BLI_assert(group != NULL);
+ if (group->size <= 1) {
+ /* one element -> remove group completely */
+ BLI_ghash_remove(treehash, elem, NULL, free_treehash_group);
+ }
+ else {
+ tse_group_remove_element(group, elem);
+ }
}
static TseGroup *BKE_outliner_treehash_lookup_group(GHash *th, short type, short nr, struct ID *id)
diff --git a/source/blender/blenkernel/intern/paint.c b/source/blender/blenkernel/intern/paint.c
index 593c769e8e9..81943d470dc 100644
--- a/source/blender/blenkernel/intern/paint.c
+++ b/source/blender/blenkernel/intern/paint.c
@@ -41,6 +41,7 @@
#include "DNA_scene_types.h"
#include "DNA_brush_types.h"
#include "DNA_space_types.h"
+#include "DNA_workspace_types.h"
#include "BLI_bitmap.h"
#include "BLI_utildefines.h"
@@ -53,7 +54,6 @@
#include "BKE_main.h"
#include "BKE_context.h"
#include "BKE_crazyspace.h"
-#include "BKE_depsgraph.h"
#include "BKE_global.h"
#include "BKE_image.h"
#include "BKE_key.h"
@@ -65,6 +65,8 @@
#include "BKE_pbvh.h"
#include "BKE_subsurf.h"
+#include "DEG_depsgraph.h"
+
#include "bmesh.h"
const char PAINT_CURSOR_SCULPT[3] = {255, 100, 100};
@@ -74,27 +76,67 @@ const char PAINT_CURSOR_TEXTURE_PAINT[3] = {255, 255, 255};
static eOverlayControlFlags overlay_flags = 0;
-void BKE_paint_invalidate_overlay_tex(Scene *scene, const Tex *tex)
+/* Keep in sync with 'BKE_paint_get_active' */
+#define OB_MODE_HAS_PAINT_STRUCT(SEP) \
+ OB_MODE_SCULPT SEP \
+ OB_MODE_VERTEX_PAINT SEP \
+ OB_MODE_WEIGHT_PAINT SEP \
+ OB_MODE_TEXTURE_PAINT SEP \
+ OB_MODE_EDIT
+
+#define COMMA ,
+static const eObjectMode ob_mode_has_paint_struct = OB_MODE_HAS_PAINT_STRUCT(|);
+static const eObjectMode ob_mode_has_paint_struct_array[] = {OB_MODE_HAS_PAINT_STRUCT(COMMA)};
+#undef COMMA
+
+#define FOREACH_OB_MODE_PAINT_ITER_BEGIN(scene, view_layer, object_mode, p) \
+{ \
+ eObjectMode object_mode_test = object_mode & ob_mode_has_paint_struct; \
+ for (uint _i = 0; _i < ARRAY_SIZE(ob_mode_has_paint_struct_array) && object_mode_test; _i++) { \
+ eObjectMode object_mode_single = ob_mode_has_paint_struct_array[_i]; \
+ if (object_mode_test & object_mode_single) { \
+ object_mode_test &= ~object_mode_single; \
+ Paint *p = BKE_paint_get_active(scene, view_layer, object_mode_single); \
+ {
+
+#define FOREACH_OB_MODE_PAINT_ITER_END \
+ } \
+ } \
+ } \
+} ((void)0)
+
+void BKE_paint_invalidate_overlay_tex(
+ Scene *scene, ViewLayer *view_layer, const Tex *tex, eObjectMode object_mode)
{
- Paint *p = BKE_paint_get_active(scene);
- Brush *br = p->brush;
-
- if (!br)
- return;
-
- if (br->mtex.tex == tex)
- overlay_flags |= PAINT_INVALID_OVERLAY_TEXTURE_PRIMARY;
- if (br->mask_mtex.tex == tex)
- overlay_flags |= PAINT_INVALID_OVERLAY_TEXTURE_SECONDARY;
+ FOREACH_OB_MODE_PAINT_ITER_BEGIN(scene, view_layer, object_mode, p)
+ {
+ Brush *br = p->brush;
+ if (br) {
+ if (br->mtex.tex == tex) {
+ overlay_flags |= PAINT_INVALID_OVERLAY_TEXTURE_PRIMARY;
+ }
+ if (br->mask_mtex.tex == tex) {
+ overlay_flags |= PAINT_INVALID_OVERLAY_TEXTURE_SECONDARY;
+ }
+ }
+ }
+ FOREACH_OB_MODE_PAINT_ITER_END;
}
-void BKE_paint_invalidate_cursor_overlay(Scene *scene, CurveMapping *curve)
+void BKE_paint_invalidate_cursor_overlay(
+ Scene *scene, ViewLayer *view_layer, CurveMapping *curve, eObjectMode object_mode)
{
- Paint *p = BKE_paint_get_active(scene);
- Brush *br = p->brush;
-
- if (br && br->curve == curve)
- overlay_flags |= PAINT_INVALID_OVERLAY_CURVE;
+ FOREACH_OB_MODE_PAINT_ITER_BEGIN(scene, view_layer, object_mode, p)
+ {
+ Brush *br = p->brush;
+ if (br) {
+ if (br->curve == curve) {
+ overlay_flags |= PAINT_INVALID_OVERLAY_CURVE;
+ break;
+ }
+ }
+ }
+ FOREACH_OB_MODE_PAINT_ITER_END;
}
void BKE_paint_invalidate_overlay_all(void)
@@ -156,13 +198,13 @@ Paint *BKE_paint_get_active_from_paintmode(Scene *sce, ePaintMode mode)
return NULL;
}
-Paint *BKE_paint_get_active(Scene *sce)
+Paint *BKE_paint_get_active(Scene *sce, ViewLayer *view_layer, const eObjectMode object_mode)
{
- if (sce) {
+ if (sce && view_layer) {
ToolSettings *ts = sce->toolsettings;
- if (sce->basact && sce->basact->object) {
- switch (sce->basact->object->mode) {
+ if (view_layer->basact && view_layer->basact->object) {
+ switch (object_mode) {
case OB_MODE_SCULPT:
return &ts->sculpt->paint;
case OB_MODE_VERTEX_PAINT:
@@ -175,6 +217,8 @@ Paint *BKE_paint_get_active(Scene *sce)
if (ts->use_uv_sculpt)
return &ts->uvsculpt->paint;
return &ts->imapaint.paint;
+ default:
+ break;
}
}
@@ -188,17 +232,19 @@ Paint *BKE_paint_get_active(Scene *sce)
Paint *BKE_paint_get_active_from_context(const bContext *C)
{
Scene *sce = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
SpaceImage *sima;
- if (sce) {
+ if (sce && view_layer) {
+ const WorkSpace *workspace = CTX_wm_workspace(C);
ToolSettings *ts = sce->toolsettings;
Object *obact = NULL;
- if (sce->basact && sce->basact->object)
- obact = sce->basact->object;
+ if (view_layer->basact && view_layer->basact->object)
+ obact = view_layer->basact->object;
if ((sima = CTX_wm_space_image(C)) != NULL) {
- if (obact && obact->mode == OB_MODE_EDIT) {
+ if (obact && workspace->object_mode == OB_MODE_EDIT) {
if (sima->mode == SI_MODE_PAINT)
return &ts->imapaint.paint;
else if (ts->use_uv_sculpt)
@@ -209,7 +255,7 @@ Paint *BKE_paint_get_active_from_context(const bContext *C)
}
}
else if (obact) {
- switch (obact->mode) {
+ switch (workspace->object_mode) {
case OB_MODE_SCULPT:
return &ts->sculpt->paint;
case OB_MODE_VERTEX_PAINT:
@@ -238,17 +284,19 @@ Paint *BKE_paint_get_active_from_context(const bContext *C)
ePaintMode BKE_paintmode_get_active_from_context(const bContext *C)
{
Scene *sce = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
SpaceImage *sima;
- if (sce) {
+ if (sce && view_layer) {
+ const WorkSpace *workspace = CTX_wm_workspace(C);
ToolSettings *ts = sce->toolsettings;
Object *obact = NULL;
- if (sce->basact && sce->basact->object)
- obact = sce->basact->object;
+ if (view_layer->basact && view_layer->basact->object)
+ obact = view_layer->basact->object;
if ((sima = CTX_wm_space_image(C)) != NULL) {
- if (obact && obact->mode == OB_MODE_EDIT) {
+ if (obact && workspace->object_mode == OB_MODE_EDIT) {
if (sima->mode == SI_MODE_PAINT)
return ePaintTexture2D;
else if (ts->use_uv_sculpt)
@@ -259,7 +307,7 @@ ePaintMode BKE_paintmode_get_active_from_context(const bContext *C)
}
}
else if (obact) {
- switch (obact->mode) {
+ switch (workspace->object_mode) {
case OB_MODE_SCULPT:
return ePaintSculpt;
case OB_MODE_VERTEX_PAINT:
@@ -450,24 +498,24 @@ bool BKE_palette_is_empty(const struct Palette *palette)
/* are we in vertex paint or weight pain face select mode? */
-bool BKE_paint_select_face_test(Object *ob)
+bool BKE_paint_select_face_test(Object *ob, eObjectMode object_mode)
{
return ( (ob != NULL) &&
(ob->type == OB_MESH) &&
(ob->data != NULL) &&
(((Mesh *)ob->data)->editflag & ME_EDIT_PAINT_FACE_SEL) &&
- (ob->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT))
+ (object_mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT))
);
}
/* are we in weight paint vertex select mode? */
-bool BKE_paint_select_vert_test(Object *ob)
+bool BKE_paint_select_vert_test(Object *ob, eObjectMode object_mode)
{
return ( (ob != NULL) &&
(ob->type == OB_MESH) &&
(ob->data != NULL) &&
(((Mesh *)ob->data)->editflag & ME_EDIT_PAINT_VERT_SEL) &&
- (ob->mode & OB_MODE_WEIGHT_PAINT || ob->mode & OB_MODE_VERTEX_PAINT)
+ (object_mode & OB_MODE_WEIGHT_PAINT || object_mode & OB_MODE_VERTEX_PAINT)
);
}
@@ -475,10 +523,10 @@ bool BKE_paint_select_vert_test(Object *ob)
* used to check if selection is possible
* (when we don't care if its face or vert)
*/
-bool BKE_paint_select_elem_test(Object *ob)
+bool BKE_paint_select_elem_test(Object *ob, eObjectMode object_mode)
{
- return (BKE_paint_select_vert_test(ob) ||
- BKE_paint_select_face_test(ob));
+ return (BKE_paint_select_vert_test(ob, object_mode) ||
+ BKE_paint_select_face_test(ob, object_mode));
}
void BKE_paint_cavity_curve_preset(Paint *p, int preset)
@@ -733,7 +781,7 @@ void BKE_sculptsession_bm_to_me(Object *ob, bool reorder)
sculptsession_bm_to_me_update_data_only(ob, reorder);
/* ensure the objects DerivedMesh mesh doesn't hold onto arrays now realloc'd in the mesh [#34473] */
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
}
}
@@ -743,7 +791,7 @@ void BKE_sculptsession_bm_to_me_for_render(Object *object)
if (object->sculpt->bm) {
/* Ensure no points to old arrays are stored in DM
*
- * Apparently, we could not use DAG_id_tag_update
+ * Apparently, we could not use DEG_id_tag_update
* here because this will lead to the while object
* surface to disappear, so we'll release DM in place.
*/
@@ -781,7 +829,7 @@ void BKE_sculptsession_free(Object *ob)
BM_log_free(ss->bm_log);
if (dm && dm->getPBVH)
- dm->getPBVH(NULL, dm); /* signal to clear */
+ dm->getPBVH(NULL, dm, OB_MODE_OBJECT); /* signal to clear */
if (ss->texcache)
MEM_freeN(ss->texcache);
@@ -874,8 +922,9 @@ static bool sculpt_modifiers_active(Scene *scene, Sculpt *sd, Object *ob)
/**
* \param need_mask So the DerivedMesh thats returned has mask data
*/
-void BKE_sculpt_update_mesh_elements(Scene *scene, Sculpt *sd, Object *ob,
- bool need_pmap, bool need_mask)
+void BKE_sculpt_update_mesh_elements(
+ const EvaluationContext *eval_ctx, Scene *scene, Sculpt *sd, Object *ob,
+ bool need_pmap, bool need_mask)
{
DerivedMesh *dm;
SculptSession *ss = ob->sculpt;
@@ -914,10 +963,10 @@ void BKE_sculpt_update_mesh_elements(Scene *scene, Sculpt *sd, Object *ob,
ss->kb = (mmd == NULL) ? BKE_keyblock_from_object(ob) : NULL;
- dm = mesh_get_derived_final(scene, ob, CD_MASK_BAREMESH);
+ dm = mesh_get_derived_final(eval_ctx, scene, ob, CD_MASK_BAREMESH);
/* VWPaint require mesh info for loop lookup, so require sculpt mode here */
- if (mmd && ob->mode & OB_MODE_SCULPT) {
+ if (mmd && eval_ctx->object_mode & OB_MODE_SCULPT) {
ss->multires = mmd;
ss->totvert = dm->getNumVerts(dm);
ss->totpoly = dm->getNumPolys(dm);
@@ -935,7 +984,7 @@ void BKE_sculpt_update_mesh_elements(Scene *scene, Sculpt *sd, Object *ob,
ss->vmask = CustomData_get_layer(&me->vdata, CD_PAINT_MASK);
}
- ss->pbvh = dm->getPBVH(ob, dm);
+ ss->pbvh = dm->getPBVH(ob, dm, eval_ctx->object_mode);
ss->pmap = (need_pmap && dm->getPolyMap) ? dm->getPolyMap(ob, dm) : NULL;
pbvh_show_diffuse_color_set(ss->pbvh, ss->show_diffuse_color);
@@ -949,7 +998,7 @@ void BKE_sculpt_update_mesh_elements(Scene *scene, Sculpt *sd, Object *ob,
ss->orig_cos = (ss->kb) ? BKE_keyblock_convert_to_vertcos(ob, ss->kb) : BKE_mesh_vertexCos_get(me, NULL);
- BKE_crazyspace_build_sculpt(scene, ob, &ss->deform_imats, &ss->deform_cos);
+ BKE_crazyspace_build_sculpt(eval_ctx, scene, ob, &ss->deform_imats, &ss->deform_cos);
BKE_pbvh_apply_vertCos(ss->pbvh, ss->deform_cos);
for (a = 0; a < me->totvert; ++a) {
@@ -985,6 +1034,9 @@ void BKE_sculpt_update_mesh_elements(Scene *scene, Sculpt *sd, Object *ob,
}
}
}
+
+ /* 2.8x - avoid full mesh update! */
+ BKE_mesh_batch_cache_dirty(me, BKE_MESH_BATCH_DIRTY_SCULPT_COORDS);
}
int BKE_sculpt_mask_layers_ensure(Object *ob, MultiresModifierData *mmd)
diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c
index 26e7562590d..d227ea55816 100644
--- a/source/blender/blenkernel/intern/particle.c
+++ b/source/blender/blenkernel/intern/particle.c
@@ -78,7 +78,6 @@
#include "BKE_library.h"
#include "BKE_library_query.h"
#include "BKE_library_remap.h"
-#include "BKE_depsgraph.h"
#include "BKE_modifier.h"
#include "BKE_mesh.h"
#include "BKE_cdderivedmesh.h"
@@ -86,6 +85,9 @@
#include "BKE_scene.h"
#include "BKE_deform.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#include "RE_render_ext.h"
unsigned int PSYS_FRAND_SEED_OFFSET[PSYS_FRAND_COUNT];
@@ -250,7 +252,7 @@ struct LatticeDeformData *psys_create_lattice_deform_data(ParticleSimulationData
{
struct LatticeDeformData *lattice_deform_data = NULL;
- if (psys_in_edit_mode(sim->scene, sim->psys) == 0) {
+ if (psys_in_edit_mode(sim->eval_ctx, sim->eval_ctx->view_layer, sim->psys) == 0) {
Object *lattice = NULL;
ModifierData *md = (ModifierData *)psys_get_modifier(sim->ob, sim->psys);
int mode = G.is_rendering ? eModifierMode_Render : eModifierMode_Realtime;
@@ -286,10 +288,16 @@ void psys_enable_all(Object *ob)
for (; psys; psys = psys->next)
psys->flag &= ~PSYS_DISABLED;
}
-bool psys_in_edit_mode(Scene *scene, ParticleSystem *psys)
+
+bool psys_in_edit_mode(const EvaluationContext *eval_ctx, ViewLayer *view_layer, ParticleSystem *psys)
{
- return (scene->basact && (scene->basact->object->mode & OB_MODE_PARTICLE_EDIT) && psys == psys_get_current((scene->basact)->object) && (psys->edit || psys->pointcache->edit) && !psys->renderdata);
+ return (view_layer->basact &&
+ (eval_ctx->object_mode & OB_MODE_PARTICLE_EDIT) &&
+ psys == psys_get_current((view_layer->basact)->object) &&
+ (psys->edit || psys->pointcache->edit) &&
+ !psys->renderdata);
}
+
bool psys_check_enabled(Object *ob, ParticleSystem *psys, const bool use_render_params)
{
ParticleSystemModifierData *psmd;
@@ -319,18 +327,17 @@ bool psys_check_edited(ParticleSystem *psys)
void psys_check_group_weights(ParticleSettings *part)
{
ParticleDupliWeight *dw, *tdw;
- GroupObject *go;
int current = 0;
- if (part->ren_as == PART_DRAW_GR && part->dup_group && part->dup_group->gobject.first) {
+ if (part->ren_as == PART_DRAW_GR && part->dup_group && part->dup_group->view_layer->object_bases.first) {
/* First try to find NULL objects from their index,
* and remove all weights that don't have an object in the group. */
dw = part->dupliweights.first;
while (dw) {
if (dw->ob == NULL || !BKE_group_object_exists(part->dup_group, dw->ob)) {
- go = (GroupObject *)BLI_findlink(&part->dup_group->gobject, dw->index);
- if (go) {
- dw->ob = go->ob;
+ Base *base = BLI_findlink(&part->dup_group->view_layer->object_bases, dw->index);
+ if (base != NULL) {
+ dw->ob = base->object;
}
else {
tdw = dw->next;
@@ -344,21 +351,21 @@ void psys_check_group_weights(ParticleSettings *part)
}
/* then add objects in the group to new list */
- go = part->dup_group->gobject.first;
- while (go) {
+ FOREACH_GROUP_OBJECT(part->dup_group, object)
+ {
dw = part->dupliweights.first;
- while (dw && dw->ob != go->ob)
+ while (dw && dw->ob != object) {
dw = dw->next;
-
+ }
+
if (!dw) {
dw = MEM_callocN(sizeof(ParticleDupliWeight), "ParticleDupliWeight");
- dw->ob = go->ob;
+ dw->ob = object;
dw->count = 1;
BLI_addtail(&part->dupliweights, dw);
}
-
- go = go->next;
}
+ FOREACH_GROUP_OBJECT_END
dw = part->dupliweights.first;
for (; dw; dw = dw->next) {
@@ -607,6 +614,8 @@ void psys_free(Object *ob, ParticleSystem *psys)
MEM_freeN(psys->pdd);
}
+ BKE_particle_batch_cache_free(psys);
+
MEM_freeN(psys);
}
}
@@ -1843,7 +1852,7 @@ void precalc_guides(ParticleSimulationData *sim, ListBase *effectors)
}
}
-int do_guides(ParticleSettings *part, ListBase *effectors, ParticleKey *state, int index, float time)
+int do_guides(const EvaluationContext *eval_ctx, ParticleSettings *part, ListBase *effectors, ParticleKey *state, int index, float time)
{
CurveMapping *clumpcurve = (part->child_flag & PART_CHILD_USE_CLUMP_CURVE) ? part->clumpcurve : NULL;
CurveMapping *roughcurve = (part->child_flag & PART_CHILD_USE_ROUGH_CURVE) ? part->roughcurve : NULL;
@@ -1906,7 +1915,7 @@ int do_guides(ParticleSettings *part, ListBase *effectors, ParticleKey *state, i
/* curve taper */
if (cu->taperobj)
- mul_v3_fl(vec_to_point, BKE_displist_calc_taper(eff->scene, cu->taperobj, (int)(data->strength * guidetime * 100.0f), 100));
+ mul_v3_fl(vec_to_point, BKE_displist_calc_taper(eval_ctx, eff->scene, cu->taperobj, (int)(data->strength * guidetime * 100.0f), 100));
else { /* curve size*/
if (cu->flag & CU_PATH_RADIUS) {
@@ -2089,7 +2098,7 @@ static bool psys_thread_context_init_path(
psys_thread_context_init(ctx, sim);
/*---start figuring out what is actually wanted---*/
- if (psys_in_edit_mode(scene, psys)) {
+ if (psys_in_edit_mode(sim->eval_ctx, sim->eval_ctx->view_layer, psys)) {
ParticleEditSettings *pset = &scene->toolsettings->particle;
if ((psys->renderdata == 0 && use_render_params == 0) && (psys->edit == NULL || pset->flag & PE_DRAW_PART) == 0)
@@ -2178,7 +2187,7 @@ static void psys_thread_create_path(ParticleTask *task, struct ChildParticle *cp
ParticleSystem *psys = ctx->sim.psys;
ParticleSettings *part = psys->part;
ParticleCacheKey **cache = psys->childcache;
- ParticleCacheKey **pcache = psys_in_edit_mode(ctx->sim.scene, psys) && psys->edit ? psys->edit->pathcache : psys->pathcache;
+ ParticleCacheKey **pcache = psys_in_edit_mode(ctx->sim.eval_ctx, ctx->sim.eval_ctx->view_layer, psys) && psys->edit ? psys->edit->pathcache : psys->pathcache;
ParticleCacheKey *child, *key[4];
ParticleTexture ptex;
float *cpa_fuv = 0, *par_rot = 0, rot[4];
@@ -2587,7 +2596,7 @@ void psys_cache_paths(ParticleSimulationData *sim, float cfra, const bool use_re
if ((psys->flag & PSYS_HAIR_DONE || psys->flag & PSYS_KEYED || psys->pointcache) == 0)
return;
- if (psys_in_edit_mode(sim->scene, psys))
+ if (psys_in_edit_mode(sim->eval_ctx, sim->eval_ctx->view_layer, psys))
if (psys->renderdata == 0 && (psys->edit == NULL || pset->flag & PE_DRAW_PART) == 0)
return;
@@ -2707,7 +2716,7 @@ void psys_cache_paths(ParticleSimulationData *sim, float cfra, const bool use_re
if (sim->psys->effectors && (psys->part->flag & PART_CHILD_EFFECT) == 0) {
for (k = 0, ca = cache[p]; k <= segments; k++, ca++)
/* ca is safe to cast, since only co and vel are used */
- do_guides(sim->psys->part, sim->psys->effectors, (ParticleKey *)ca, p, (float)k / (float)segments);
+ do_guides(sim->eval_ctx, sim->psys->part, sim->psys->effectors, (ParticleKey *)ca, p, (float)k / (float)segments);
}
/* lattices have to be calculated separately to avoid mixups between effector calculations */
@@ -2755,7 +2764,7 @@ void psys_cache_paths(ParticleSimulationData *sim, float cfra, const bool use_re
if (vg_length)
MEM_freeN(vg_length);
}
-void psys_cache_edit_paths(Scene *scene, Object *ob, PTCacheEdit *edit, float cfra, const bool use_render_params)
+void psys_cache_edit_paths(const EvaluationContext *eval_ctx, Scene *scene, Object *ob, PTCacheEdit *edit, float cfra, const bool use_render_params)
{
ParticleCacheKey *ca, **cache = edit->pathcache;
ParticleEditSettings *pset = &scene->toolsettings->particle;
@@ -2956,6 +2965,7 @@ void psys_cache_edit_paths(Scene *scene, Object *ob, PTCacheEdit *edit, float cf
if (psys) {
ParticleSimulationData sim = {0};
+ sim.eval_ctx = eval_ctx;
sim.scene = scene;
sim.ob = ob;
sim.psys = psys;
@@ -3170,8 +3180,8 @@ ModifierData *object_add_particle_system(Scene *scene, Object *ob, const char *n
psys->flag = PSYS_CURRENT;
psys->cfra = BKE_scene_frame_get_from_ctime(scene, CFRA + 1);
- DAG_relations_tag_update(G.main);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_relations_tag_update(G.main);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
return md;
}
@@ -3213,11 +3223,9 @@ void object_remove_particle_system(Scene *UNUSED(scene), Object *ob)
if (ob->particlesystem.first)
((ParticleSystem *) ob->particlesystem.first)->flag |= PSYS_CURRENT;
- else
- ob->mode &= ~OB_MODE_PARTICLE_EDIT;
- DAG_relations_tag_update(G.main);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_relations_tag_update(G.main);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
}
static void default_particle_settings(ParticleSettings *part)
@@ -3280,7 +3288,7 @@ static void default_particle_settings(ParticleSettings *part)
part->clength = 1.0f;
part->clength_thres = 0.0f;
- part->draw = PART_DRAW_EMITTER;
+ part->draw = 0;
part->draw_line[0] = 0.5;
part->path_start = 0.0f;
part->path_end = 1.0f;
@@ -3302,6 +3310,7 @@ static void default_particle_settings(ParticleSettings *part)
part->omat = 1;
part->use_modifier_stack = false;
+ part->draw_size = 0.1f;
}
@@ -3778,7 +3787,7 @@ void psys_get_particle_on_path(ParticleSimulationData *sim, int p, ParticleKey *
pind.bspline = (psys->part->flag & PART_HAIR_BSPLINE);
/* pind.dm disabled in editmode means we don't get effectors taken into
* account when subdividing for instance */
- pind.dm = psys_in_edit_mode(sim->scene, psys) ? NULL : psys->hair_out_dm;
+ pind.dm = psys_in_edit_mode(sim->eval_ctx, sim->eval_ctx->view_layer, psys) ? NULL : psys->hair_out_dm;
init_particle_interpolation(sim->ob, psys, pa, &pind);
do_particle_interpolation(psys, p, pa, t, &pind, state);
@@ -3793,7 +3802,7 @@ void psys_get_particle_on_path(ParticleSimulationData *sim, int p, ParticleKey *
mul_mat3_m4_v3(hairmat, state->vel);
if (sim->psys->effectors && (part->flag & PART_CHILD_GUIDE) == 0) {
- do_guides(sim->psys->part, sim->psys->effectors, state, p, state->time);
+ do_guides(sim->eval_ctx, sim->psys->part, sim->psys->effectors, state, p, state->time);
/* TODO: proper velocity handling */
}
@@ -4320,9 +4329,10 @@ void psys_make_billboard(ParticleBillboardData *bb, float xvec[3], float yvec[3]
madd_v3_v3fl(center, yvec, bb->offset[1]);
}
-void psys_apply_hair_lattice(Scene *scene, Object *ob, ParticleSystem *psys)
+void psys_apply_hair_lattice(const EvaluationContext *eval_ctx, Scene *scene, Object *ob, ParticleSystem *psys)
{
ParticleSimulationData sim = {0};
+ sim.eval_ctx = eval_ctx;
sim.scene = scene;
sim.ob = ob;
sim.psys = psys;
@@ -4355,3 +4365,22 @@ void psys_apply_hair_lattice(Scene *scene, Object *ob, ParticleSystem *psys)
psys->flag |= PSYS_EDITED;
}
}
+
+
+
+/* Draw Engine */
+void (*BKE_particle_batch_cache_dirty_cb)(ParticleSystem *psys, int mode) = NULL;
+void (*BKE_particle_batch_cache_free_cb)(ParticleSystem *psys) = NULL;
+
+void BKE_particle_batch_cache_dirty(ParticleSystem *psys, int mode)
+{
+ if (psys->batch_cache) {
+ BKE_particle_batch_cache_dirty_cb(psys, mode);
+ }
+}
+void BKE_particle_batch_cache_free(ParticleSystem *psys)
+{
+ if (psys->batch_cache) {
+ BKE_particle_batch_cache_free_cb(psys);
+ }
+}
diff --git a/source/blender/blenkernel/intern/particle_child.c b/source/blender/blenkernel/intern/particle_child.c
index bfcda89a635..d2ad05c20b7 100644
--- a/source/blender/blenkernel/intern/particle_child.c
+++ b/source/blender/blenkernel/intern/particle_child.c
@@ -702,7 +702,7 @@ void do_child_modifiers(ParticleThreadContext *ctx, ParticleSimulationData *sim,
if (part->flag & PART_CHILD_EFFECT)
/* state is safe to cast, since only co and vel are used */
- guided = do_guides(sim->psys->part, sim->psys->effectors, (ParticleKey *)state, cpa->parent, t);
+ guided = do_guides(sim->eval_ctx, sim->psys->part, sim->psys->effectors, (ParticleKey *)state, cpa->parent, t);
if (guided == 0) {
float orco_offset[3];
diff --git a/source/blender/blenkernel/intern/particle_distribute.c b/source/blender/blenkernel/intern/particle_distribute.c
index 9a7980827ad..ff8a638089f 100644
--- a/source/blender/blenkernel/intern/particle_distribute.c
+++ b/source/blender/blenkernel/intern/particle_distribute.c
@@ -312,19 +312,16 @@ static void distribute_grid(DerivedMesh *dm, ParticleSystem *psys)
static void hammersley_create(float *out, int n, int seed, float amount)
{
RNG *rng;
- double p, t, offs[2];
- int k, kk;
+
+ double offs[2], t;
rng = BLI_rng_new(31415926 + n + seed);
offs[0] = BLI_rng_get_double(rng) + (double)amount;
offs[1] = BLI_rng_get_double(rng) + (double)amount;
BLI_rng_free(rng);
- for (k = 0; k < n; k++) {
- t = 0;
- for (p = 0.5, kk = k; kk; p *= 0.5, kk >>= 1)
- if (kk & 1) /* kk mod 2 = 1 */
- t += p;
+ for (int k = 0; k < n; k++) {
+ BLI_hammersley_1D(k, &t);
out[2*k + 0] = fmod((double)k/(double)n + offs[0], 1.0);
out[2*k + 1] = fmod(t + offs[1], 1.0);
diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c
index dfc732dcb74..d187a009a2d 100644
--- a/source/blender/blenkernel/intern/particle_system.c
+++ b/source/blender/blenkernel/intern/particle_system.c
@@ -78,6 +78,7 @@
#include "BKE_particle.h"
#include "BKE_global.h"
+#include "BKE_collection.h"
#include "BKE_DerivedMesh.h"
#include "BKE_object.h"
#include "BKE_material.h"
@@ -88,7 +89,8 @@
#include "BKE_modifier.h"
#include "BKE_scene.h"
#include "BKE_bvhutils.h"
-#include "BKE_depsgraph.h"
+
+#include "DEG_depsgraph.h"
#include "PIL_time.h"
@@ -980,14 +982,14 @@ void psys_get_birth_coords(ParticleSimulationData *sim, ParticleData *pa, Partic
}
/* recursively evaluate emitter parent anim at cfra */
-static void evaluate_emitter_anim(Scene *scene, Object *ob, float cfra)
+static void evaluate_emitter_anim(const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, float cfra)
{
if (ob->parent)
- evaluate_emitter_anim(scene, ob->parent, cfra);
+ evaluate_emitter_anim(eval_ctx, scene, ob->parent, cfra);
/* we have to force RECALC_ANIM here since where_is_objec_time only does drivers */
BKE_animsys_evaluate_animdata(scene, &ob->id, ob->adt, cfra, ADT_RECALC_ANIM);
- BKE_object_where_is_calc_time(scene, ob, cfra);
+ BKE_object_where_is_calc_time(eval_ctx, scene, ob, cfra);
}
/* sets particle to the emitter surface with initial velocity & rotation */
@@ -1001,7 +1003,7 @@ void reset_particle(ParticleSimulationData *sim, ParticleData *pa, float dtime,
/* get precise emitter matrix if particle is born */
if (part->type != PART_HAIR && dtime > 0.f && pa->time < cfra && pa->time >= sim->psys->cfra) {
- evaluate_emitter_anim(sim->scene, sim->ob, pa->time);
+ evaluate_emitter_anim(sim->eval_ctx, sim->scene, sim->ob, pa->time);
psys->flag |= PSYS_OB_ANIM_RESTORE;
}
@@ -1133,7 +1135,8 @@ static void set_keyed_keys(ParticleSimulationData *sim)
int totpart = psys->totpart, k, totkeys = psys->totkeyed;
int keyed_flag = 0;
- ksim.scene= sim->scene;
+ ksim.eval_ctx = sim->eval_ctx;
+ ksim.scene = sim->scene;
/* no proper targets so let's clear and bail out */
if (psys->totkeyed==0) {
@@ -1294,7 +1297,7 @@ void psys_update_particle_tree(ParticleSystem *psys, float cfra)
static void psys_update_effectors(ParticleSimulationData *sim)
{
pdEndEffectors(&sim->psys->effectors);
- sim->psys->effectors = pdInitEffectors(sim->scene, sim->ob, sim->psys,
+ sim->psys->effectors = pdInitEffectors(sim->eval_ctx, sim->scene, sim->ob, sim->psys,
sim->psys->part->effector_weights, true);
precalc_guides(sim, sim->psys->effectors);
}
@@ -2115,7 +2118,7 @@ static void basic_integrate(ParticleSimulationData *sim, int p, float dfra, floa
tkey.time=pa->state.time;
if (part->type != PART_HAIR) {
- if (do_guides(sim->psys->part, sim->psys->effectors, &tkey, p, time)) {
+ if (do_guides(sim->eval_ctx, sim->psys->part, sim->psys->effectors, &tkey, p, time)) {
copy_v3_v3(pa->state.co,tkey.co);
/* guides don't produce valid velocity */
sub_v3_v3v3(pa->state.vel, tkey.co, pa->prev_state.co);
@@ -2896,14 +2899,16 @@ static void psys_update_path_cache(ParticleSimulationData *sim, float cfra, cons
ParticleSystem *psys = sim->psys;
ParticleSettings *part = psys->part;
ParticleEditSettings *pset = &sim->scene->toolsettings->particle;
- Base *base;
int distr=0, alloc=0, skip=0;
if ((psys->part->childtype && psys->totchild != psys_get_tot_child(sim->scene, psys)) || psys->recalc&PSYS_RECALC_RESET)
alloc=1;
- if (alloc || psys->recalc&PSYS_RECALC_CHILD || (psys->vgroup[PSYS_VG_DENSITY] && (sim->ob && sim->ob->mode & OB_MODE_WEIGHT_PAINT)))
+ if (alloc || psys->recalc&PSYS_RECALC_CHILD ||
+ (psys->vgroup[PSYS_VG_DENSITY] && (sim->ob && sim->eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT)))
+ {
distr=1;
+ }
if (distr) {
if (alloc)
@@ -2931,7 +2936,7 @@ static void psys_update_path_cache(ParticleSimulationData *sim, float cfra, cons
skip = 1; /* draw visualization */
else if (psys->pointcache->flag & PTCACHE_BAKING)
skip = 1; /* no need to cache paths while baking dynamics */
- else if (psys_in_edit_mode(sim->scene, psys)) {
+ else if (psys_in_edit_mode(sim->eval_ctx, sim->eval_ctx->view_layer, psys)) {
if ((pset->flag & PE_DRAW_PART)==0)
skip = 1;
else if (part->childtype==0 && (psys->flag & PSYS_HAIR_DYNAMICS && psys->pointcache->flag & PTCACHE_BAKED)==0)
@@ -2941,8 +2946,9 @@ static void psys_update_path_cache(ParticleSimulationData *sim, float cfra, cons
/* particle instance modifier with "path" option need cached paths even if particle system doesn't */
- for (base = sim->scene->base.first; base; base= base->next) {
- ModifierData *md = modifiers_findByType(base->object, eModifierType_ParticleInstance);
+ FOREACH_SCENE_OBJECT(sim->scene, ob)
+ {
+ ModifierData *md = modifiers_findByType(ob, eModifierType_ParticleInstance);
if (md) {
ParticleInstanceModifierData *pimd = (ParticleInstanceModifierData *)md;
if (pimd->flag & eParticleInstanceFlag_Path && pimd->ob == sim->ob && pimd->psys == (psys - (ParticleSystem*)sim->ob->particlesystem.first)) {
@@ -2951,6 +2957,7 @@ static void psys_update_path_cache(ParticleSimulationData *sim, float cfra, cons
}
}
}
+ FOREACH_SCENE_OBJECT_END
if (!skip) {
psys_cache_paths(sim, cfra, use_render_params);
@@ -3196,7 +3203,7 @@ static void do_hair_dynamics(ParticleSimulationData *sim)
psys->hair_out_dm = CDDM_copy(psys->hair_in_dm);
psys->hair_out_dm->getVertCos(psys->hair_out_dm, deformedVerts);
- clothModifier_do(psys->clmd, sim->scene, sim->ob, psys->hair_in_dm, deformedVerts);
+ clothModifier_do(psys->clmd, sim->eval_ctx, sim->scene, sim->ob, psys->hair_in_dm, deformedVerts);
CDDM_apply_vert_coords(psys->hair_out_dm, deformedVerts);
@@ -4196,7 +4203,7 @@ static int hair_needs_recalc(ParticleSystem *psys)
/* main particle update call, checks that things are ok on the large scale and
* then advances in to actual particle calculations depending on particle type */
-void particle_system_update(Scene *scene, Object *ob, ParticleSystem *psys, const bool use_render_params)
+void particle_system_update(const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, ParticleSystem *psys, const bool use_render_params)
{
ParticleSimulationData sim= {0};
ParticleSettings *part = psys->part;
@@ -4210,10 +4217,11 @@ void particle_system_update(Scene *scene, Object *ob, ParticleSystem *psys, cons
cfra= BKE_scene_frame_get(scene);
- sim.scene= scene;
- sim.ob= ob;
- sim.psys= psys;
- sim.psmd= psys_get_modifier(ob, psys);
+ sim.eval_ctx = eval_ctx;
+ sim.scene = scene;
+ sim.ob = ob;
+ sim.psys = psys;
+ sim.psmd = psys_get_modifier(ob, psys);
/* system was already updated from modifier stack */
if (sim.psmd->flag & eParticleSystemFlag_psys_updated) {
@@ -4356,7 +4364,7 @@ void particle_system_update(Scene *scene, Object *ob, ParticleSystem *psys, cons
/* make sure emitter is left at correct time (particle emission can change this) */
if (psys->flag & PSYS_OB_ANIM_RESTORE) {
- evaluate_emitter_anim(scene, ob, cfra);
+ evaluate_emitter_anim(eval_ctx, scene, ob, cfra);
psys->flag &= ~PSYS_OB_ANIM_RESTORE;
}
@@ -4366,6 +4374,8 @@ void particle_system_update(Scene *scene, Object *ob, ParticleSystem *psys, cons
/* save matrix for duplicators, at rendertime the actual dupliobject's matrix is used so don't update! */
if (psys->renderdata==0)
invert_m4_m4(psys->imat, ob->obmat);
+
+ BKE_particle_batch_cache_dirty(psys, BKE_PARTICLE_BATCH_DIRTY_ALL);
}
/* ID looper */
@@ -4396,12 +4406,30 @@ void BKE_particlesystem_id_loop(ParticleSystem *psys, ParticleSystemIDFunc func,
/* **** Depsgraph evaluation **** */
-void BKE_particle_system_eval_init(EvaluationContext *UNUSED(eval_ctx),
+void BKE_particle_system_settings_eval(const struct EvaluationContext *UNUSED(eval_ctx),
+ ParticleSystem *psys)
+{
+ if (G.debug & G_DEBUG_DEPSGRAPH) {
+ printf("%s on %s (%p)\n", __func__, psys->name, psys);
+ }
+ psys->recalc |= psys->part->recalc;
+}
+
+void BKE_particle_system_settings_recalc_clear(struct EvaluationContext *UNUSED(eval_ctx),
+ ParticleSettings *particle_settings)
+{
+ if (G.debug & G_DEBUG_DEPSGRAPH) {
+ printf("%s on %s (%p)\n", __func__, particle_settings->id.name, particle_settings);
+ }
+ particle_settings->recalc = 0;
+}
+
+void BKE_particle_system_eval_init(const struct EvaluationContext *UNUSED(eval_ctx),
Scene *scene,
Object *ob)
{
if (G.debug & G_DEBUG_DEPSGRAPH) {
- printf("%s on %s\n", __func__, ob->id.name);
+ printf("%s on %s (%p)\n", __func__, ob->id.name, ob);
}
BKE_ptcache_object_reset(scene, ob, PTCACHE_RESET_DEPSGRAPH);
}
diff --git a/source/blender/blenkernel/intern/pbvh.c b/source/blender/blenkernel/intern/pbvh.c
index d926c96c0d8..63f2c7e5452 100644
--- a/source/blender/blenkernel/intern/pbvh.c
+++ b/source/blender/blenkernel/intern/pbvh.c
@@ -41,6 +41,7 @@
#include "BKE_paint.h"
#include "GPU_buffers.h"
+#include "GPU_immediate.h"
#include "bmesh.h"
@@ -1187,15 +1188,16 @@ static void pbvh_update_draw_buffers(PBVH *bvh, PBVHNode **nodes, int totnode)
void BKE_pbvh_draw_BB(PBVH *bvh)
{
- GPU_pbvh_BB_draw_init();
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
for (int a = 0; a < bvh->totnode; a++) {
PBVHNode *node = &bvh->nodes[a];
- GPU_pbvh_BB_draw(node->vb.bmin, node->vb.bmax, ((node->flag & PBVH_Leaf) != 0));
+ GPU_pbvh_BB_draw(node->vb.bmin, node->vb.bmax, ((node->flag & PBVH_Leaf) != 0), pos);
}
- GPU_pbvh_BB_draw_end();
+ immUnbindProgram();
}
static int pbvh_flush_bb(PBVH *bvh, PBVHNode *node, int flag)
@@ -2016,24 +2018,6 @@ void BKE_pbvh_node_draw(PBVHNode *node, void *data_v)
{
PBVHNodeDrawData *data = data_v;
-#if 0
- /* XXX: Just some quick code to show leaf nodes in different colors */
- float col[3];
- float spec[3] = {0.0f, 0.0f, 0.0f};
-
- if (0) { //is_partial) {
- col[0] = (rand() / (float)RAND_MAX); col[1] = col[2] = 0.6;
- }
- else {
- srand((long long)node);
- for (int i = 0; i < 3; ++i)
- col[i] = (rand() / (float)RAND_MAX) * 0.3 + 0.7;
- }
-
- GPU_basic_shader_colors(col, spec, 0, 1.0f);
- glColor3f(1, 0, 0);
-#endif
-
if (!(node->flag & PBVH_FullyHidden)) {
GPU_pbvh_buffers_draw(node->draw_buffers,
data->setMaterial,
@@ -2152,6 +2136,67 @@ void BKE_pbvh_draw(PBVH *bvh, float (*planes)[4], float (*fnors)[3],
BKE_pbvh_draw_BB(bvh);
}
+struct PBVHNodeDrawCallbackData {
+
+ void (*draw_fn)(void *user_data, Gwn_Batch *batch);
+ void *user_data;
+ bool fast;
+};
+
+static void pbvh_node_draw_cb(PBVHNode *node, void *data_v)
+{
+ struct PBVHNodeDrawCallbackData *data = data_v;
+
+ if (!(node->flag & PBVH_FullyHidden)) {
+ Gwn_Batch *triangles = GPU_pbvh_buffers_batch_get(node->draw_buffers, data->fast);
+ if (triangles != NULL) {
+ data->draw_fn(data->user_data, triangles);
+ }
+ }
+}
+
+/**
+ * Version of #BKE_pbvh_draw that runs a callback.
+ */
+void BKE_pbvh_draw_cb(
+ PBVH *bvh, float (*planes)[4], float (*fnors)[3], bool fast,
+ void (*draw_fn)(void *user_data, Gwn_Batch *batch), void *user_data)
+{
+ struct PBVHNodeDrawCallbackData draw_data = {
+ .fast = fast,
+ .draw_fn = draw_fn,
+ .user_data = user_data,
+ };
+ PBVHNode **nodes;
+ int totnode;
+
+ for (int a = 0; a < bvh->totnode; a++)
+ pbvh_node_check_diffuse_changed(bvh, &bvh->nodes[a]);
+
+ BKE_pbvh_search_gather(bvh, update_search_cb, SET_INT_IN_POINTER(PBVH_UpdateNormals | PBVH_UpdateDrawBuffers),
+ &nodes, &totnode);
+
+ pbvh_update_normals(bvh, nodes, totnode, fnors);
+ pbvh_update_draw_buffers(bvh, nodes, totnode);
+
+ if (nodes) MEM_freeN(nodes);
+
+ if (planes) {
+ BKE_pbvh_search_callback(
+ bvh, BKE_pbvh_node_planes_contain_AABB,
+ planes, pbvh_node_draw_cb, &draw_data);
+ }
+ else {
+ BKE_pbvh_search_callback(
+ bvh, NULL,
+ NULL, pbvh_node_draw_cb, &draw_data);
+ }
+#if 0
+ if (G.debug_value == 14)
+ pbvh_draw_BB(bvh);
+#endif
+}
+
void BKE_pbvh_grids_update(PBVH *bvh, CCGElem **grids, void **gridfaces,
DMFlagMat *flagmats, BLI_bitmap **grid_hidden)
{
@@ -2361,24 +2406,24 @@ void pbvh_vertex_iter_init(PBVH *bvh, PBVHNode *node,
vi->vmask = CustomData_get_layer(bvh->vdata, CD_PAINT_MASK);
}
-void pbvh_show_diffuse_color_set(PBVH *bvh, bool show_diffuse_color)
+bool pbvh_has_mask(PBVH *bvh)
{
- bool has_mask = false;
-
switch (bvh->type) {
case PBVH_GRIDS:
- has_mask = (bvh->gridkey.has_mask != 0);
- break;
+ return (bvh->gridkey.has_mask != 0);
case PBVH_FACES:
- has_mask = (bvh->vdata && CustomData_get_layer(bvh->vdata,
- CD_PAINT_MASK));
- break;
+ return (bvh->vdata && CustomData_get_layer(bvh->vdata,
+ CD_PAINT_MASK));
case PBVH_BMESH:
- has_mask = (bvh->bm && (CustomData_get_offset(&bvh->bm->vdata, CD_PAINT_MASK) != -1));
- break;
+ return (bvh->bm && (CustomData_get_offset(&bvh->bm->vdata, CD_PAINT_MASK) != -1));
}
- bvh->show_diffuse_color = !has_mask || show_diffuse_color;
+ return false;
+}
+
+void pbvh_show_diffuse_color_set(PBVH *bvh, bool show_diffuse_color)
+{
+ bvh->show_diffuse_color = !pbvh_has_mask(bvh) || show_diffuse_color;
}
void pbvh_show_mask_set(PBVH *bvh, bool show_mask)
diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c
index dc1c0da4401..169b1b10024 100644
--- a/source/blender/blenkernel/intern/pointcache.c
+++ b/source/blender/blenkernel/intern/pointcache.c
@@ -3509,13 +3509,14 @@ PointCache *BKE_ptcache_copy_list(ListBase *ptcaches_new, const ListBase *ptcach
* every user action changing stuff, and then it runs a complete bake??? (ton) */
/* Baking */
-void BKE_ptcache_quick_cache_all(Main *bmain, Scene *scene)
+void BKE_ptcache_quick_cache_all(Main *bmain, Scene *scene, ViewLayer *view_layer)
{
PTCacheBaker baker;
memset(&baker, 0, sizeof(baker));
baker.main = bmain;
baker.scene = scene;
+ baker.view_layer = view_layer;
baker.bake = 0;
baker.render = 0;
baker.anim_init = 0;
@@ -3541,6 +3542,8 @@ void BKE_ptcache_bake(PTCacheBaker *baker)
{
Main *bmain = baker->main;
Scene *scene = baker->scene;
+ ViewLayer *view_layer = baker->view_layer;
+ struct Depsgraph *depsgraph = baker->depsgraph;
Scene *sce_iter; /* SETLOOPER macro only */
Base *base;
ListBase pidlist;
@@ -3603,7 +3606,7 @@ void BKE_ptcache_bake(PTCacheBaker *baker)
}
}
else {
- for (SETLOOPER(scene, sce_iter, base)) {
+ for (SETLOOPER_VIEW_LAYER(scene, view_layer, sce_iter, base)) {
/* cache/bake everything in the scene */
BKE_ptcache_ids_from_object(&pidlist, base->object, scene, MAX_DUPLI_RECUR);
@@ -3659,7 +3662,7 @@ void BKE_ptcache_bake(PTCacheBaker *baker)
stime = ptime = PIL_check_seconds_timer();
for (int fr = CFRA; fr <= endframe; fr += baker->quick_step, CFRA = fr) {
- BKE_scene_update_for_newframe(G.main->eval_ctx, bmain, scene, scene->lay);
+ BKE_scene_graph_update_for_newframe(G.main->eval_ctx, depsgraph, bmain, scene, view_layer);
if (baker->update_progress) {
float progress = ((float)(CFRA - startframe)/(float)(endframe - startframe));
@@ -3714,7 +3717,7 @@ void BKE_ptcache_bake(PTCacheBaker *baker)
}
}
else {
- for (SETLOOPER(scene, sce_iter, base)) {
+ for (SETLOOPER_VIEW_LAYER(scene, view_layer, sce_iter, base)) {
BKE_ptcache_ids_from_object(&pidlist, base->object, scene, MAX_DUPLI_RECUR);
for (pid=pidlist.first; pid; pid=pid->next) {
@@ -3745,7 +3748,7 @@ void BKE_ptcache_bake(PTCacheBaker *baker)
CFRA = cfrao;
if (bake) { /* already on cfra unless baking */
- BKE_scene_update_for_newframe(bmain->eval_ctx, bmain, scene, scene->lay);
+ BKE_scene_graph_update_for_newframe(bmain->eval_ctx, depsgraph, bmain, scene, view_layer);
}
/* TODO: call redraw all windows somehow */
diff --git a/source/blender/blenkernel/intern/rigidbody.c b/source/blender/blenkernel/intern/rigidbody.c
index 39b0668f0b9..4a52c4f7d14 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -55,9 +55,9 @@
#include "DNA_scene_types.h"
#include "BKE_cdderivedmesh.h"
-#include "BKE_depsgraph.h"
#include "BKE_effect.h"
#include "BKE_global.h"
+#include "BKE_group.h"
#include "BKE_library.h"
#include "BKE_library_query.h"
#include "BKE_mesh.h"
@@ -91,26 +91,30 @@ void BKE_rigidbody_free_world(RigidBodyWorld *rbw)
if (rbw->physics_world) {
/* free physics references, we assume that all physics objects in will have been added to the world */
- GroupObject *go;
if (rbw->constraints) {
- for (go = rbw->constraints->gobject.first; go; go = go->next) {
- if (go->ob && go->ob->rigidbody_constraint) {
- RigidBodyCon *rbc = go->ob->rigidbody_constraint;
-
- if (rbc->physics_constraint)
+ FOREACH_GROUP_OBJECT(rbw->constraints, object)
+ {
+ if (object->rigidbody_constraint) {
+ RigidBodyCon *rbc = object->rigidbody_constraint;
+ if (rbc->physics_constraint) {
RB_dworld_remove_constraint(rbw->physics_world, rbc->physics_constraint);
+ }
}
}
+ FOREACH_GROUP_OBJECT_END
}
- if (rbw->group) {
- for (go = rbw->group->gobject.first; go; go = go->next) {
- if (go->ob && go->ob->rigidbody_object) {
- RigidBodyOb *rbo = go->ob->rigidbody_object;
- if (rbo->physics_object)
+ if (rbw->group) {
+ FOREACH_GROUP_OBJECT(rbw->group, object)
+ {
+ if (object->rigidbody_object) {
+ RigidBodyOb *rbo = object->rigidbody_object;
+ if (rbo->physics_object) {
RB_dworld_remove_body(rbw->physics_world, rbo->physics_object);
+ }
}
}
+ FOREACH_GROUP_OBJECT_END
}
/* free dynamics world */
RB_dworld_delete(rbw->physics_world);
@@ -1125,7 +1129,6 @@ void BKE_rigidbody_remove_object(Scene *scene, Object *ob)
RigidBodyWorld *rbw = scene->rigidbody_world;
RigidBodyOb *rbo = ob->rigidbody_object;
RigidBodyCon *rbc;
- GroupObject *go;
int i;
if (rbw) {
@@ -1145,8 +1148,8 @@ void BKE_rigidbody_remove_object(Scene *scene, Object *ob)
/* remove object from rigid body constraints */
if (rbw->constraints) {
- for (go = rbw->constraints->gobject.first; go; go = go->next) {
- Object *obt = go->ob;
+ FOREACH_GROUP_OBJECT(rbw->constraints, obt)
+ {
if (obt && obt->rigidbody_constraint) {
rbc = obt->rigidbody_constraint;
if (ELEM(ob, rbc->ob1, rbc->ob2)) {
@@ -1154,6 +1157,7 @@ void BKE_rigidbody_remove_object(Scene *scene, Object *ob)
}
}
}
+ FOREACH_GROUP_OBJECT_END
}
}
@@ -1187,20 +1191,22 @@ void BKE_rigidbody_remove_constraint(Scene *scene, Object *ob)
/* Update object array and rigid body count so they're in sync with the rigid body group */
static void rigidbody_update_ob_array(RigidBodyWorld *rbw)
{
- GroupObject *go;
int i, n;
- n = BLI_listbase_count(&rbw->group->gobject);
+ n = BLI_listbase_count(&rbw->group->view_layer->object_bases);
if (rbw->numbodies != n) {
rbw->numbodies = n;
rbw->objects = realloc(rbw->objects, sizeof(Object *) * rbw->numbodies);
}
- for (go = rbw->group->gobject.first, i = 0; go; go = go->next, i++) {
- Object *ob = go->ob;
- rbw->objects[i] = ob;
+ i = 0;
+ FOREACH_GROUP_OBJECT(rbw->group, object)
+ {
+ rbw->objects[i] = object;
+ i++;
}
+ FOREACH_GROUP_OBJECT_END
}
static void rigidbody_update_sim_world(Scene *scene, RigidBodyWorld *rbw)
@@ -1223,7 +1229,7 @@ static void rigidbody_update_sim_world(Scene *scene, RigidBodyWorld *rbw)
rigidbody_update_ob_array(rbw);
}
-static void rigidbody_update_sim_ob(Scene *scene, RigidBodyWorld *rbw, Object *ob, RigidBodyOb *rbo)
+static void rigidbody_update_sim_ob(const struct EvaluationContext *eval_ctx, Scene *scene, RigidBodyWorld *rbw, Object *ob, RigidBodyOb *rbo)
{
float loc[3];
float rot[4];
@@ -1271,7 +1277,7 @@ static void rigidbody_update_sim_ob(Scene *scene, RigidBodyWorld *rbw, Object *o
ListBase *effectors;
/* get effectors present in the group specified by effector_weights */
- effectors = pdInitEffectors(scene, ob, NULL, effector_weights, true);
+ effectors = pdInitEffectors(eval_ctx, scene, ob, NULL, effector_weights, true);
if (effectors) {
float eff_force[3] = {0.0f, 0.0f, 0.0f};
float eff_loc[3], eff_vel[3];
@@ -1312,10 +1318,8 @@ static void rigidbody_update_sim_ob(Scene *scene, RigidBodyWorld *rbw, Object *o
*
* \param rebuild Rebuild entire simulation
*/
-static void rigidbody_update_simulation(Scene *scene, RigidBodyWorld *rbw, bool rebuild)
+static void rigidbody_update_simulation(const struct EvaluationContext *eval_ctx, Scene *scene, RigidBodyWorld *rbw, bool rebuild)
{
- GroupObject *go;
-
/* update world */
if (rebuild)
BKE_rigidbody_validate_sim_world(scene, rbw, true);
@@ -1328,28 +1332,26 @@ static void rigidbody_update_simulation(Scene *scene, RigidBodyWorld *rbw, bool
* Memory management needs redesign here, this is just a dirty workaround.
*/
if (rebuild && rbw->constraints) {
- for (go = rbw->constraints->gobject.first; go; go = go->next) {
- Object *ob = go->ob;
- if (ob) {
- RigidBodyCon *rbc = ob->rigidbody_constraint;
- if (rbc && rbc->physics_constraint) {
- RB_dworld_remove_constraint(rbw->physics_world, rbc->physics_constraint);
- RB_constraint_delete(rbc->physics_constraint);
- rbc->physics_constraint = NULL;
- }
+ FOREACH_GROUP_OBJECT(rbw->constraints, ob)
+ {
+ RigidBodyCon *rbc = ob->rigidbody_constraint;
+ if (rbc && rbc->physics_constraint) {
+ RB_dworld_remove_constraint(rbw->physics_world, rbc->physics_constraint);
+ RB_constraint_delete(rbc->physics_constraint);
+ rbc->physics_constraint = NULL;
}
}
+ FOREACH_GROUP_OBJECT_END
}
/* update objects */
- for (go = rbw->group->gobject.first; go; go = go->next) {
- Object *ob = go->ob;
-
- if (ob && ob->type == OB_MESH) {
+ FOREACH_GROUP_OBJECT(rbw->group, ob)
+ {
+ if (ob->type == OB_MESH) {
/* validate that we've got valid object set up here... */
RigidBodyOb *rbo = ob->rigidbody_object;
/* update transformation matrix of the object so we don't get a frame of lag for simple animations */
- BKE_object_where_is_calc(scene, ob);
+ BKE_object_where_is_calc(eval_ctx, scene, ob);
if (rbo == NULL) {
/* Since this object is included in the sim group but doesn't have
@@ -1383,65 +1385,62 @@ static void rigidbody_update_simulation(Scene *scene, RigidBodyWorld *rbw, bool
}
/* update simulation object... */
- rigidbody_update_sim_ob(scene, rbw, ob, rbo);
+ rigidbody_update_sim_ob(eval_ctx, scene, rbw, ob, rbo);
}
}
+ FOREACH_GROUP_OBJECT_END
/* update constraints */
if (rbw->constraints == NULL) /* no constraints, move on */
return;
- for (go = rbw->constraints->gobject.first; go; go = go->next) {
- Object *ob = go->ob;
- if (ob) {
- /* validate that we've got valid object set up here... */
- RigidBodyCon *rbc = ob->rigidbody_constraint;
- /* update transformation matrix of the object so we don't get a frame of lag for simple animations */
- BKE_object_where_is_calc(scene, ob);
+ FOREACH_GROUP_OBJECT(rbw->constraints, ob)
+ {
+ /* validate that we've got valid object set up here... */
+ RigidBodyCon *rbc = ob->rigidbody_constraint;
+ /* update transformation matrix of the object so we don't get a frame of lag for simple animations */
+ BKE_object_where_is_calc(eval_ctx, scene, ob);
- if (rbc == NULL) {
- /* Since this object is included in the group but doesn't have
- * constraint settings (perhaps it was added manually), add!
- */
- ob->rigidbody_constraint = BKE_rigidbody_create_constraint(scene, ob, RBC_TYPE_FIXED);
- rigidbody_validate_sim_constraint(rbw, ob, true);
+ if (rbc == NULL) {
+ /* Since this object is included in the group but doesn't have
+ * constraint settings (perhaps it was added manually), add!
+ */
+ ob->rigidbody_constraint = BKE_rigidbody_create_constraint(scene, ob, RBC_TYPE_FIXED);
+ rigidbody_validate_sim_constraint(rbw, ob, true);
- rbc = ob->rigidbody_constraint;
+ rbc = ob->rigidbody_constraint;
+ }
+ else {
+ /* perform simulation data updates as tagged */
+ if (rebuild) {
+ /* World has been rebuilt so rebuild constraint */
+ rigidbody_validate_sim_constraint(rbw, ob, true);
}
- else {
- /* perform simulation data updates as tagged */
- if (rebuild) {
- /* World has been rebuilt so rebuild constraint */
- rigidbody_validate_sim_constraint(rbw, ob, true);
- }
- else if (rbc->flag & RBC_FLAG_NEEDS_VALIDATE) {
- rigidbody_validate_sim_constraint(rbw, ob, false);
- }
- rbc->flag &= ~RBC_FLAG_NEEDS_VALIDATE;
+ else if (rbc->flag & RBC_FLAG_NEEDS_VALIDATE) {
+ rigidbody_validate_sim_constraint(rbw, ob, false);
}
+ rbc->flag &= ~RBC_FLAG_NEEDS_VALIDATE;
}
}
+ FOREACH_GROUP_OBJECT_END
}
static void rigidbody_update_simulation_post_step(RigidBodyWorld *rbw)
{
- GroupObject *go;
-
- for (go = rbw->group->gobject.first; go; go = go->next) {
- Object *ob = go->ob;
-
- if (ob) {
- RigidBodyOb *rbo = ob->rigidbody_object;
- /* reset kinematic state for transformed objects */
- if (rbo && (ob->flag & SELECT) && (G.moving & G_TRANSFORM_OBJ)) {
- RB_body_set_kinematic_state(rbo->physics_object, rbo->flag & RBO_FLAG_KINEMATIC || rbo->flag & RBO_FLAG_DISABLED);
- RB_body_set_mass(rbo->physics_object, RBO_GET_MASS(rbo));
- /* deactivate passive objects so they don't interfere with deactivation of active objects */
- if (rbo->type == RBO_TYPE_PASSIVE)
- RB_body_deactivate(rbo->physics_object);
- }
+ FOREACH_GROUP_BASE(rbw->group, base)
+ {
+ Object *ob = base->object;
+ RigidBodyOb *rbo = ob->rigidbody_object;
+ /* Reset kinematic state for transformed objects. */
+ if (rbo && (base->flag & BASE_SELECTED) && (G.moving & G_TRANSFORM_OBJ)) {
+ RB_body_set_kinematic_state(rbo->physics_object, rbo->flag & RBO_FLAG_KINEMATIC || rbo->flag & RBO_FLAG_DISABLED);
+ RB_body_set_mass(rbo->physics_object, RBO_GET_MASS(rbo));
+ /* Deactivate passive objects so they don't interfere with deactivation of active objects. */
+ if (rbo->type == RBO_TYPE_PASSIVE)
+ RB_body_deactivate(rbo->physics_object);
}
}
+ FOREACH_GROUP_BASE_END
}
bool BKE_rigidbody_check_sim_running(RigidBodyWorld *rbw, float ctime)
@@ -1556,7 +1555,7 @@ void BKE_rigidbody_cache_reset(RigidBodyWorld *rbw)
/* Rebuild rigid body world */
/* NOTE: this needs to be called before frame update to work correctly */
-void BKE_rigidbody_rebuild_world(Scene *scene, float ctime)
+void BKE_rigidbody_rebuild_world(const struct EvaluationContext *eval_ctx, Scene *scene, float ctime)
{
RigidBodyWorld *rbw = scene->rigidbody_world;
PointCache *cache;
@@ -1568,14 +1567,14 @@ void BKE_rigidbody_rebuild_world(Scene *scene, float ctime)
cache = rbw->pointcache;
/* flag cache as outdated if we don't have a world or number of objects in the simulation has changed */
- if (rbw->physics_world == NULL || rbw->numbodies != BLI_listbase_count(&rbw->group->gobject)) {
+ if (rbw->physics_world == NULL || rbw->numbodies != BLI_listbase_count(&rbw->group->view_layer->object_bases)) {
cache->flag |= PTCACHE_OUTDATED;
}
if (ctime == startframe + 1 && rbw->ltime == startframe) {
if (cache->flag & PTCACHE_OUTDATED) {
BKE_ptcache_id_reset(scene, &pid, PTCACHE_RESET_OUTDATED);
- rigidbody_update_simulation(scene, rbw, true);
+ rigidbody_update_simulation(eval_ctx, scene, rbw, true);
BKE_ptcache_validate(cache, (int)ctime);
cache->last_exact = 0;
cache->flag &= ~PTCACHE_REDO_NEEDED;
@@ -1584,7 +1583,7 @@ void BKE_rigidbody_rebuild_world(Scene *scene, float ctime)
}
/* Run RigidBody simulation for the specified physics world */
-void BKE_rigidbody_do_simulation(Scene *scene, float ctime)
+void BKE_rigidbody_do_simulation(const struct EvaluationContext *eval_ctx, Scene *scene, float ctime)
{
float timestep;
RigidBodyWorld *rbw = scene->rigidbody_world;
@@ -1622,14 +1621,14 @@ void BKE_rigidbody_do_simulation(Scene *scene, float ctime)
}
/* advance simulation, we can only step one frame forward */
- if (can_simulate) {
+ if (ctime == rbw->ltime + 1) {
/* write cache for first frame when on second frame */
if (rbw->ltime == startframe && (cache->flag & PTCACHE_OUTDATED || cache->last_exact == 0)) {
BKE_ptcache_write(&pid, startframe);
}
/* update and validate simulation */
- rigidbody_update_simulation(scene, rbw, false);
+ rigidbody_update_simulation(eval_ctx, scene, rbw, false);
/* calculate how much time elapsed since last step in seconds */
timestep = 1.0f / (float)FPS * (ctime - rbw->ltime) * rbw->time_scale;
@@ -1673,8 +1672,8 @@ void BKE_rigidbody_sync_transforms(RigidBodyWorld *rbw, Object *ob, float ctime)
void BKE_rigidbody_aftertrans_update(Object *ob, float loc[3], float rot[3], float quat[4], float rotAxis[3], float rotAngle) {}
bool BKE_rigidbody_check_sim_running(RigidBodyWorld *rbw, float ctime) { return false; }
void BKE_rigidbody_cache_reset(RigidBodyWorld *rbw) {}
-void BKE_rigidbody_rebuild_world(Scene *scene, float ctime) {}
-void BKE_rigidbody_do_simulation(Scene *scene, float ctime) {}
+void BKE_rigidbody_rebuild_world(const struct EvaluationContext *eval_ctx, Scene *scene, float ctime) {}
+void BKE_rigidbody_do_simulation(const struct EvaluationContext *eval_ctx, Scene *scene, float ctime) {}
#ifdef __GNUC__
# pragma GCC diagnostic pop
@@ -1685,7 +1684,7 @@ void BKE_rigidbody_do_simulation(Scene *scene, float ctime) {}
/* -------------------- */
/* Depsgraph evaluation */
-void BKE_rigidbody_rebuild_sim(EvaluationContext *UNUSED(eval_ctx),
+void BKE_rigidbody_rebuild_sim(const struct EvaluationContext *eval_ctx,
Scene *scene)
{
float ctime = BKE_scene_frame_get(scene);
@@ -1696,11 +1695,11 @@ void BKE_rigidbody_rebuild_sim(EvaluationContext *UNUSED(eval_ctx),
/* rebuild sim data (i.e. after resetting to start of timeline) */
if (BKE_scene_check_rigidbody_active(scene)) {
- BKE_rigidbody_rebuild_world(scene, ctime);
+ BKE_rigidbody_rebuild_world(eval_ctx, scene, ctime);
}
}
-void BKE_rigidbody_eval_simulation(EvaluationContext *UNUSED(eval_ctx),
+void BKE_rigidbody_eval_simulation(const struct EvaluationContext *eval_ctx,
Scene *scene)
{
float ctime = BKE_scene_frame_get(scene);
@@ -1711,11 +1710,11 @@ void BKE_rigidbody_eval_simulation(EvaluationContext *UNUSED(eval_ctx),
/* evaluate rigidbody sim */
if (BKE_scene_check_rigidbody_active(scene)) {
- BKE_rigidbody_do_simulation(scene, ctime);
+ BKE_rigidbody_do_simulation(eval_ctx, scene, ctime);
}
}
-void BKE_rigidbody_object_sync_transforms(EvaluationContext *UNUSED(eval_ctx),
+void BKE_rigidbody_object_sync_transforms(const struct EvaluationContext *UNUSED(eval_ctx),
Scene *scene,
Object *ob)
{
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index 126761ed14b..e3166b7d0b2 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -49,6 +49,7 @@
#include "DNA_space_types.h"
#include "DNA_view3d_types.h"
#include "DNA_windowmanager_types.h"
+#include "DNA_workspace_types.h"
#include "DNA_gpencil_types.h"
#include "BLI_math.h"
@@ -67,8 +68,8 @@
#include "BKE_action.h"
#include "BKE_armature.h"
#include "BKE_cachefile.h"
+#include "BKE_collection.h"
#include "BKE_colortools.h"
-#include "BKE_depsgraph.h"
#include "BKE_editmesh.h"
#include "BKE_fcurve.h"
#include "BKE_freestyle.h"
@@ -78,6 +79,7 @@
#include "BKE_icons.h"
#include "BKE_idprop.h"
#include "BKE_image.h"
+#include "BKE_layer.h"
#include "BKE_library.h"
#include "BKE_library_remap.h"
#include "BKE_linestyle.h"
@@ -92,9 +94,13 @@
#include "BKE_sequencer.h"
#include "BKE_sound.h"
#include "BKE_unit.h"
+#include "BKE_workspace.h"
#include "BKE_world.h"
#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+#include "DEG_depsgraph_debug.h"
+#include "DEG_depsgraph_query.h"
#include "RE_engine.h"
@@ -107,6 +113,8 @@
const char *RE_engine_id_BLENDER_RENDER = "BLENDER_RENDER";
const char *RE_engine_id_BLENDER_GAME = "BLENDER_GAME";
+const char *RE_engine_id_BLENDER_CLAY = "BLENDER_CLAY";
+const char *RE_engine_id_BLENDER_EEVEE = "BLENDER_EEVEE";
const char *RE_engine_id_CYCLES = "CYCLES";
void free_avicodecdata(AviCodecData *acd)
@@ -157,25 +165,37 @@ void BKE_scene_copy_data(Main *bmain, Scene *sce_dst, const Scene *sce_src, cons
const int flag_subdata = flag | LIB_ID_CREATE_NO_USER_REFCOUNT;
sce_dst->ed = NULL;
- sce_dst->theDag = NULL;
- sce_dst->depsgraph = NULL;
+ sce_dst->depsgraph_hash = NULL;
sce_dst->obedit = NULL;
- sce_dst->stats = NULL;
sce_dst->fps_info = NULL;
- BLI_duplicatelist(&(sce_dst->base), &(sce_src->base));
- for (Base *base_dst = sce_dst->base.first, *base_src = sce_src->base.first;
- base_dst;
- base_dst = base_dst->next, base_src = base_src->next)
+ /* layers and collections */
+ sce_dst->collection = MEM_dupallocN(sce_src->collection);
+ SceneCollection *mc_src = BKE_collection_master(&sce_src->id);
+ SceneCollection *mc_dst = BKE_collection_master(&sce_dst->id);
+
+ /* Recursively creates a new SceneCollection tree. */
+ BKE_collection_copy_data(mc_dst, mc_src, flag_subdata);
+
+ IDPropertyTemplate val = {0};
+ BLI_duplicatelist(&sce_dst->view_layers, &sce_src->view_layers);
+ for (ViewLayer *view_layer_src = sce_src->view_layers.first, *view_layer_dst = sce_dst->view_layers.first;
+ view_layer_src;
+ view_layer_src = view_layer_src->next, view_layer_dst = view_layer_dst->next)
{
- if (base_src == sce_src->basact) {
- sce_dst->basact = base_dst;
- }
+ BKE_view_layer_copy_data(view_layer_dst, view_layer_src, mc_dst, mc_src, flag_subdata);
+ }
+
+ sce_dst->collection_properties = IDP_New(IDP_GROUP, &val, ROOT_PROP);
+ if (sce_src->collection_properties) {
+ IDP_MergeGroup_ex(sce_dst->collection_properties, sce_src->collection_properties, true, flag_subdata);
+ }
+ sce_dst->layer_properties = IDP_New(IDP_GROUP, &val, ROOT_PROP);
+ if (sce_src->layer_properties) {
+ IDP_MergeGroup_ex(sce_dst->layer_properties, sce_src->layer_properties, true, flag_subdata);
}
BLI_duplicatelist(&(sce_dst->markers), &(sce_src->markers));
- BLI_duplicatelist(&(sce_dst->transform_spaces), &(sce_src->transform_spaces));
- BLI_duplicatelist(&(sce_dst->r.layers), &(sce_src->r.layers));
BLI_duplicatelist(&(sce_dst->r.views), &(sce_src->r.views));
BKE_keyingsets_copy(&(sce_dst->keyingsets), &(sce_src->keyingsets));
@@ -190,17 +210,6 @@ void BKE_scene_copy_data(Main *bmain, Scene *sce_dst, const Scene *sce_src, cons
sce_dst->rigidbody_world = BKE_rigidbody_world_copy(sce_src->rigidbody_world, flag_subdata);
}
- /* copy Freestyle settings */
- for (SceneRenderLayer *srl_dst = sce_dst->r.layers.first, *srl_src = sce_src->r.layers.first;
- srl_src;
- srl_dst = srl_dst->next, srl_src = srl_src->next)
- {
- if (srl_dst->prop != NULL) {
- srl_dst->prop = IDP_CopyProperty_ex(srl_dst->prop, flag_subdata);
- }
- BKE_freestyle_config_copy(&srl_dst->freestyleConfig, &srl_src->freestyleConfig, flag_subdata);
- }
-
/* copy color management settings */
BKE_color_managed_display_settings_copy(&sce_dst->display_settings, &sce_src->display_settings);
BKE_color_managed_view_settings_copy(&sce_dst->view_settings, &sce_src->view_settings);
@@ -289,16 +298,14 @@ Scene *BKE_scene_copy(Main *bmain, Scene *sce, int type)
* But for now, let's keep it well isolated here. */
if (type == SCE_COPY_EMPTY) {
ToolSettings *ts;
- ListBase rl, rv;
+ ListBase rv;
sce_copy = BKE_scene_add(bmain, sce->id.name + 2);
- rl = sce_copy->r.layers;
rv = sce_copy->r.views;
curvemapping_free_data(&sce_copy->r.mblur_shutter_curve);
sce_copy->r = sce->r;
- sce_copy->r.layers = rl;
- sce_copy->r.actlay = 0;
+ sce_copy->active_view_layer = 0;
sce_copy->r.views = rv;
sce_copy->unit = sce->unit;
sce_copy->physics_settings = sce->physics_settings;
@@ -396,8 +403,8 @@ Scene *BKE_scene_copy(Main *bmain, Scene *sce, int type)
if (type == SCE_COPY_FULL) {
/* Copy Freestyle LineStyle datablocks. */
- for (SceneRenderLayer *srl_dst = sce_copy->r.layers.first; srl_dst; srl_dst = srl_dst->next) {
- for (FreestyleLineSet *lineset = srl_dst->freestyleConfig.linesets.first; lineset; lineset = lineset->next) {
+ for (ViewLayer *view_layer_dst = sce_copy->view_layers.first; view_layer_dst; view_layer_dst = view_layer_dst->next) {
+ for (FreestyleLineSet *lineset = view_layer_dst->freestyle_config.linesets.first; lineset; lineset = lineset->next) {
if (lineset->linestyle) {
/* XXX Not copying anim/actions here? */
BKE_id_copy_ex(bmain, (ID *)lineset->linestyle, (ID **)&lineset->linestyle, 0, false);
@@ -449,17 +456,13 @@ void BKE_scene_make_local(Main *bmain, Scene *sce, const bool lib_local)
}
/** Free (or release) any data used by this scene (does not free the scene itself). */
-void BKE_scene_free(Scene *sce)
+void BKE_scene_free_ex(Scene *sce, const bool do_id_user)
{
- SceneRenderLayer *srl;
-
BKE_animdata_free((ID *)sce, false);
/* check all sequences */
BKE_sequencer_clear_scene_in_allseqs(G.main, sce);
- sce->basact = NULL;
- BLI_freelistN(&sce->base);
BKE_sequencer_editing_free(sce);
BKE_keyingsets_free(&sce->keyingsets);
@@ -487,17 +490,7 @@ void BKE_scene_free(Scene *sce)
sce->r.ffcodecdata.properties = NULL;
}
- for (srl = sce->r.layers.first; srl; srl = srl->next) {
- if (srl->prop != NULL) {
- IDP_FreeProperty(srl->prop);
- MEM_freeN(srl->prop);
- }
- BKE_freestyle_config_free(&srl->freestyleConfig);
- }
-
BLI_freelistN(&sce->markers);
- BLI_freelistN(&sce->transform_spaces);
- BLI_freelistN(&sce->r.layers);
BLI_freelistN(&sce->r.views);
if (sce->toolsettings) {
@@ -532,11 +525,8 @@ void BKE_scene_free(Scene *sce)
sce->toolsettings = NULL;
}
- DAG_scene_free(sce);
- if (sce->depsgraph)
- DEG_graph_free(sce->depsgraph);
-
- MEM_SAFE_FREE(sce->stats);
+ BKE_scene_free_depsgraph_hash(sce);
+
MEM_SAFE_FREE(sce->fps_info);
BKE_sound_destroy_scene(sce);
@@ -545,6 +535,37 @@ void BKE_scene_free(Scene *sce)
BKE_previewimg_free(&sce->preview);
curvemapping_free_data(&sce->r.mblur_shutter_curve);
+
+ for (ViewLayer *view_layer = sce->view_layers.first, *view_layer_next; view_layer; view_layer = view_layer_next) {
+ view_layer_next = view_layer->next;
+
+ BLI_remlink(&sce->view_layers, view_layer);
+ BKE_view_layer_free_ex(view_layer, do_id_user);
+ }
+
+ /* Master Collection */
+ BKE_collection_master_free(&sce->id, do_id_user);
+ MEM_freeN(sce->collection);
+ sce->collection = NULL;
+
+ /* LayerCollection engine settings. */
+ if (sce->collection_properties) {
+ IDP_FreeProperty(sce->collection_properties);
+ MEM_freeN(sce->collection_properties);
+ sce->collection_properties = NULL;
+ }
+
+ /* Render engine setting. */
+ if (sce->layer_properties) {
+ IDP_FreeProperty(sce->layer_properties);
+ MEM_freeN(sce->layer_properties);
+ sce->layer_properties = NULL;
+ }
+}
+
+void BKE_scene_free(Scene *sce)
+{
+ BKE_scene_free_ex(sce, true);
}
void BKE_scene_init(Scene *sce)
@@ -749,7 +770,7 @@ void BKE_scene_init(Scene *sce)
sce->r.ffcodecdata.audio_bitrate = 192;
sce->r.ffcodecdata.audio_channels = 2;
- BLI_strncpy(sce->r.engine, RE_engine_id_BLENDER_RENDER, sizeof(sce->r.engine));
+ BKE_viewrender_init(&sce->view_render);
sce->audio.distance_model = 2.0f;
sce->audio.doppler_factor = 1.0f;
@@ -762,7 +783,6 @@ void BKE_scene_init(Scene *sce)
sce->r.osa = 8;
/* note; in header_info.c the scene copy happens..., if you add more to renderdata it has to be checked there */
- BKE_scene_add_render_layer(sce, NULL);
/* multiview - stereo */
BKE_scene_add_render_view(sce, STEREO_LEFT_NAME);
@@ -801,7 +821,7 @@ void BKE_scene_init(Scene *sce)
sce->gm.angulardeactthreshold = 1.0f;
sce->gm.deactivationtime = 0.0f;
- sce->gm.flag = GAME_DISPLAY_LISTS;
+ sce->gm.flag = 0;
sce->gm.matmode = GAME_MAT_MULTITEX;
sce->gm.obstacleSimulation = OBSTSIMULATION_NONE;
@@ -895,6 +915,20 @@ void BKE_scene_init(Scene *sce)
sce->toolsettings->gpencil_v2d_align = GP_PROJECT_VIEWSPACE;
sce->toolsettings->gpencil_seq_align = GP_PROJECT_VIEWSPACE;
sce->toolsettings->gpencil_ima_align = GP_PROJECT_VIEWSPACE;
+
+ /* Master Collection */
+ sce->collection = MEM_callocN(sizeof(SceneCollection), "Master Collection");
+ BLI_strncpy(sce->collection->name, "Master Collection", sizeof(sce->collection->name));
+
+ /* Engine settings */
+ IDPropertyTemplate val = {0};
+ sce->collection_properties = IDP_New(IDP_GROUP, &val, ROOT_PROP);
+ BKE_layer_collection_engine_settings_create(sce->collection_properties);
+
+ sce->layer_properties = IDP_New(IDP_GROUP, &val, ROOT_PROP);
+ BKE_view_layer_engine_settings_create(sce->layer_properties);
+
+ BKE_view_layer_add(sce, "View Layer");
}
Scene *BKE_scene_add(Main *bmain, const char *name)
@@ -910,44 +944,46 @@ Scene *BKE_scene_add(Main *bmain, const char *name)
return sce;
}
-Base *BKE_scene_base_find_by_name(struct Scene *scene, const char *name)
+/**
+ * Check if there is any intance of the object in the scene
+ */
+bool BKE_scene_object_find(Scene *scene, Object *ob)
{
- Base *base;
-
- for (base = scene->base.first; base; base = base->next) {
- if (STREQ(base->object->id.name + 2, name)) {
- break;
+ for (ViewLayer *view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
+ if (BLI_findptr(&view_layer->object_bases, ob, offsetof(Base, object))) {
+ return true;
}
}
-
- return base;
+ return false;
}
-Base *BKE_scene_base_find(Scene *scene, Object *ob)
+Object *BKE_scene_object_find_by_name(Scene *scene, const char *name)
{
- return BLI_findptr(&scene->base, ob, offsetof(Base, object));
+ for (ViewLayer *view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ if (STREQ(base->object->id.name + 2, name)) {
+ return base->object;
+ }
+ }
+ }
+ return NULL;
}
/**
* Sets the active scene, mainly used when running in background mode (``--scene`` command line argument).
* This is also called to set the scene directly, bypassing windowing code.
- * Otherwise #ED_screen_set_scene is used when changing scenes by the user.
+ * Otherwise #WM_window_change_active_scene is used when changing scenes by the user.
*/
void BKE_scene_set_background(Main *bmain, Scene *scene)
{
- Scene *sce;
- Base *base;
Object *ob;
Group *group;
- GroupObject *go;
- int flag;
/* check for cyclic sets, for reading old files but also for definite security (py?) */
BKE_scene_validate_setscene(bmain, scene);
/* can happen when switching modes in other scenes */
- if (scene->obedit && !(scene->obedit->mode & OB_MODE_EDIT))
- scene->obedit = NULL;
+ scene->obedit = NULL;
/* deselect objects (for dataselect) */
for (ob = bmain->object.first; ob; ob = ob->id.next)
@@ -955,30 +991,20 @@ void BKE_scene_set_background(Main *bmain, Scene *scene)
/* group flags again */
for (group = bmain->group.first; group; group = group->id.next) {
- for (go = group->gobject.first; go; go = go->next) {
- if (go->ob) {
- go->ob->flag |= OB_FROMGROUP;
- }
+ FOREACH_GROUP_OBJECT(group, object)
+ {
+ object->flag |= OB_FROMGROUP;
}
+ FOREACH_GROUP_OBJECT_END
}
- /* sort baselist for scene and sets */
- for (sce = scene; sce; sce = sce->set)
- DAG_scene_relations_rebuild(bmain, sce);
-
/* copy layers and flags from bases to objects */
- for (base = scene->base.first; base; base = base->next) {
- ob = base->object;
- ob->lay = base->lay;
-
- /* group patch... */
- base->flag &= ~(OB_FROMGROUP);
- flag = ob->flag & (OB_FROMGROUP);
- base->flag |= flag;
-
- /* not too nice... for recovering objects with lost data */
- //if (ob->pose == NULL) base->flag &= ~OB_POSEMODE;
- ob->flag = base->flag;
+ for (ViewLayer *view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ ob = base->object;
+ /* group patch... */
+ BKE_scene_object_base_flag_sync_from_base(base);
+ }
}
/* no full animation update, this to enable render code to work (render code calls own animation updates) */
}
@@ -998,8 +1024,9 @@ Scene *BKE_scene_set_name(Main *bmain, const char *name)
}
/* Used by metaballs, return *all* objects (including duplis) existing in the scene (including scene's sets) */
-int BKE_scene_base_iter_next(EvaluationContext *eval_ctx, SceneBaseIter *iter,
- Scene **scene, int val, Base **base, Object **ob)
+int BKE_scene_base_iter_next(
+ const EvaluationContext *eval_ctx, SceneBaseIter *iter,
+ Scene **scene, int val, Base **base, Object **ob)
{
bool run_again = true;
@@ -1017,17 +1044,19 @@ int BKE_scene_base_iter_next(EvaluationContext *eval_ctx, SceneBaseIter *iter,
/* the first base */
if (iter->phase == F_START) {
- *base = (*scene)->base.first;
+ ViewLayer *view_layer = eval_ctx->view_layer;
+ *base = view_layer->object_bases.first;
if (*base) {
*ob = (*base)->object;
iter->phase = F_SCENE;
}
else {
- /* exception: empty scene */
+ /* exception: empty scene layer */
while ((*scene)->set) {
(*scene) = (*scene)->set;
- if ((*scene)->base.first) {
- *base = (*scene)->base.first;
+ ViewLayer *view_layer_set = BKE_view_layer_from_scene_get((*scene));
+ if (view_layer_set->object_bases.first) {
+ *base = view_layer_set->object_bases.first;
*ob = (*base)->object;
iter->phase = F_SCENE;
break;
@@ -1046,8 +1075,9 @@ int BKE_scene_base_iter_next(EvaluationContext *eval_ctx, SceneBaseIter *iter,
/* (*scene) is finished, now do the set */
while ((*scene)->set) {
(*scene) = (*scene)->set;
- if ((*scene)->base.first) {
- *base = (*scene)->base.first;
+ ViewLayer *view_layer_set = BKE_view_layer_from_scene_get((*scene));
+ if (view_layer_set->object_bases.first) {
+ *base = view_layer_set->object_bases.first;
*ob = (*base)->object;
break;
}
@@ -1081,7 +1111,7 @@ int BKE_scene_base_iter_next(EvaluationContext *eval_ctx, SceneBaseIter *iter,
}
/* handle dupli's */
if (iter->dupob) {
- (*base)->flag |= OB_FROMDUPLI;
+ (*base)->flag_legacy |= OB_FROMDUPLI;
*ob = iter->dupob->ob;
iter->phase = F_DUPLI;
@@ -1100,7 +1130,7 @@ int BKE_scene_base_iter_next(EvaluationContext *eval_ctx, SceneBaseIter *iter,
}
else if (iter->phase == F_DUPLI) {
iter->phase = F_SCENE;
- (*base)->flag &= ~OB_FROMDUPLI;
+ (*base)->flag_legacy &= ~OB_FROMDUPLI;
if (iter->dupli_refob) {
/* Restore last object's real matrix. */
@@ -1125,13 +1155,15 @@ int BKE_scene_base_iter_next(EvaluationContext *eval_ctx, SceneBaseIter *iter,
return iter->phase;
}
-Object *BKE_scene_camera_find(Scene *sc)
+Scene *BKE_scene_find_from_collection(const Main *bmain, const SceneCollection *scene_collection)
{
- Base *base;
-
- for (base = sc->base.first; base; base = base->next)
- if (base->object->type == OB_CAMERA)
- return base->object;
+ for (Scene *scene = bmain->scene.first; scene; scene = scene->id.next) {
+ for (ViewLayer *layer = scene->view_layers.first; layer; layer = layer->next) {
+ if (BKE_view_layer_has_collection(layer, scene_collection)) {
+ return scene;
+ }
+ }
+ }
return NULL;
}
@@ -1233,49 +1265,14 @@ char *BKE_scene_find_last_marker_name(Scene *scene, int frame)
return best_marker ? best_marker->name : NULL;
}
-
-Base *BKE_scene_base_add(Scene *sce, Object *ob)
-{
- Base *b = MEM_callocN(sizeof(*b), __func__);
- BLI_addhead(&sce->base, b);
-
- b->object = ob;
- b->flag = ob->flag;
- b->lay = ob->lay;
-
- return b;
-}
-
-void BKE_scene_base_unlink(Scene *sce, Base *base)
+void BKE_scene_remove_rigidbody_object(Scene *scene, Object *ob)
{
/* remove rigid body constraint from world before removing object */
- if (base->object->rigidbody_constraint)
- BKE_rigidbody_remove_constraint(sce, base->object);
+ if (ob->rigidbody_constraint)
+ BKE_rigidbody_remove_constraint(scene, ob);
/* remove rigid body object from world before removing object */
- if (base->object->rigidbody_object)
- BKE_rigidbody_remove_object(sce, base->object);
-
- BLI_remlink(&sce->base, base);
- if (sce->basact == base)
- sce->basact = NULL;
-}
-
-void BKE_scene_base_deselect_all(Scene *sce)
-{
- Base *b;
-
- for (b = sce->base.first; b; b = b->next) {
- b->flag &= ~SELECT;
- b->object->flag = b->flag;
- }
-}
-
-void BKE_scene_base_select(Scene *sce, Base *selbase)
-{
- selbase->flag |= SELECT;
- selbase->object->flag = selbase->flag;
-
- sce->basact = selbase;
+ if (ob->rigidbody_object)
+ BKE_rigidbody_remove_object(scene, ob);
}
/* checks for cycle, returns 1 if it's all OK */
@@ -1327,109 +1324,6 @@ void BKE_scene_frame_set(struct Scene *scene, double cfra)
scene->r.cfra = (int)intpart;
}
-#ifdef WITH_LEGACY_DEPSGRAPH
-/* drivers support/hacks
- * - this method is called from scene_update_tagged_recursive(), so gets included in viewport + render
- * - these are always run since the depsgraph can't handle non-object data
- * - these happen after objects are all done so that we can read in their final transform values,
- * though this means that objects can't refer to scene info for guidance...
- */
-static void scene_update_drivers(Main *UNUSED(bmain), Scene *scene)
-{
- SceneRenderLayer *srl;
- float ctime = BKE_scene_frame_get(scene);
-
- /* scene itself */
- if (scene->adt && scene->adt->drivers.first) {
- BKE_animsys_evaluate_animdata(scene, &scene->id, scene->adt, ctime, ADT_RECALC_DRIVERS);
- }
-
- /* world */
- /* TODO: what about world textures? but then those have nodes too... */
- if (scene->world) {
- ID *wid = (ID *)scene->world;
- AnimData *adt = BKE_animdata_from_id(wid);
-
- if (adt && adt->drivers.first)
- BKE_animsys_evaluate_animdata(scene, wid, adt, ctime, ADT_RECALC_DRIVERS);
- }
-
- /* nodes */
- if (scene->nodetree) {
- ID *nid = (ID *)scene->nodetree;
- AnimData *adt = BKE_animdata_from_id(nid);
-
- if (adt && adt->drivers.first)
- BKE_animsys_evaluate_animdata(scene, nid, adt, ctime, ADT_RECALC_DRIVERS);
- }
-
- /* world nodes */
- if (scene->world && scene->world->nodetree) {
- ID *nid = (ID *)scene->world->nodetree;
- AnimData *adt = BKE_animdata_from_id(nid);
-
- if (adt && adt->drivers.first)
- BKE_animsys_evaluate_animdata(scene, nid, adt, ctime, ADT_RECALC_DRIVERS);
- }
-
- /* freestyle */
- for (srl = scene->r.layers.first; srl; srl = srl->next) {
- FreestyleConfig *config = &srl->freestyleConfig;
- FreestyleLineSet *lineset;
-
- for (lineset = config->linesets.first; lineset; lineset = lineset->next) {
- if (lineset->linestyle) {
- ID *lid = &lineset->linestyle->id;
- AnimData *adt = BKE_animdata_from_id(lid);
-
- if (adt && adt->drivers.first)
- BKE_animsys_evaluate_animdata(scene, lid, adt, ctime, ADT_RECALC_DRIVERS);
- }
- }
- }
-}
-
-/* deps hack - do extra recalcs at end */
-static void scene_depsgraph_hack(EvaluationContext *eval_ctx, Scene *scene, Scene *scene_parent)
-{
- Base *base;
-
- scene->customdata_mask = scene_parent->customdata_mask;
-
- /* sets first, we allow per definition current scene to have
- * dependencies on sets, but not the other way around. */
- if (scene->set)
- scene_depsgraph_hack(eval_ctx, scene->set, scene_parent);
-
- for (base = scene->base.first; base; base = base->next) {
- Object *ob = base->object;
-
- if (ob->depsflag) {
- int recalc = 0;
- // printf("depshack %s\n", ob->id.name + 2);
-
- if (ob->depsflag & OB_DEPS_EXTRA_OB_RECALC)
- recalc |= OB_RECALC_OB;
- if (ob->depsflag & OB_DEPS_EXTRA_DATA_RECALC)
- recalc |= OB_RECALC_DATA;
-
- ob->recalc |= recalc;
- BKE_object_handle_update(eval_ctx, scene_parent, ob);
-
- if (ob->dup_group && (ob->transflag & OB_DUPLIGROUP)) {
- GroupObject *go;
-
- for (go = ob->dup_group->gobject.first; go; go = go->next) {
- if (go->ob)
- go->ob->recalc |= recalc;
- }
- BKE_group_handle_recalc_and_update(eval_ctx, scene_parent, ob, ob->dup_group);
- }
- }
- }
-}
-#endif /* WITH_LEGACY_DEPSGRAPH */
-
/* That's like really a bummer, because currently animation data for armatures
* might want to use pose, and pose might be missing on the object.
* This happens when changing visible layers, which leads to situations when
@@ -1445,7 +1339,7 @@ static void scene_depsgraph_hack(EvaluationContext *eval_ctx, Scene *scene, Scen
static void scene_armature_depsgraph_workaround(Main *bmain)
{
Object *ob;
- if (BLI_listbase_is_empty(&bmain->armature) || !DAG_id_type_tagged(bmain, ID_OB)) {
+ if (BLI_listbase_is_empty(&bmain->armature) || !DEG_id_type_tagged(bmain, ID_OB)) {
return;
}
for (ob = bmain->object.first; ob; ob = ob->id.next) {
@@ -1458,372 +1352,27 @@ static void scene_armature_depsgraph_workaround(Main *bmain)
}
#endif
-#ifdef WITH_LEGACY_DEPSGRAPH
-static void scene_rebuild_rbw_recursive(Scene *scene, float ctime)
-{
- if (scene->set)
- scene_rebuild_rbw_recursive(scene->set, ctime);
-
- if (BKE_scene_check_rigidbody_active(scene))
- BKE_rigidbody_rebuild_world(scene, ctime);
-}
-
-static void scene_do_rb_simulation_recursive(Scene *scene, float ctime)
-{
- if (scene->set)
- scene_do_rb_simulation_recursive(scene->set, ctime);
-
- if (BKE_scene_check_rigidbody_active(scene))
- BKE_rigidbody_do_simulation(scene, ctime);
-}
-#endif
-
-/* Used to visualize CPU threads activity during threaded object update,
- * would pollute STDERR with whole bunch of timing information which then
- * could be parsed and nicely visualized.
- */
-#ifdef WITH_LEGACY_DEPSGRAPH
-# undef DETAILED_ANALYSIS_OUTPUT
-#else
-/* ALWAYS KEEY DISABLED! */
-# undef DETAILED_ANALYSIS_OUTPUT
-#endif
-
-/* Mballs evaluation uses BKE_scene_base_iter_next which calls
- * duplilist for all objects in the scene. This leads to conflict
- * accessing and writing same data from multiple threads.
- *
- * Ideally Mballs shouldn't do such an iteration and use DAG
- * queries instead. For the time being we've got new DAG
- * let's keep it simple and update mballs in a single thread.
- */
-#define MBALL_SINGLETHREAD_HACK
-
-#ifdef WITH_LEGACY_DEPSGRAPH
-typedef struct StatisicsEntry {
- struct StatisicsEntry *next, *prev;
- Object *object;
- double start_time;
- double duration;
-} StatisicsEntry;
-
-typedef struct ThreadedObjectUpdateState {
- /* TODO(sergey): We might want this to be per-thread object. */
- EvaluationContext *eval_ctx;
- Scene *scene;
- Scene *scene_parent;
- double base_time;
-
-#ifdef MBALL_SINGLETHREAD_HACK
- bool has_mballs;
-#endif
-
- /* Execution statistics */
- bool has_updated_objects;
- ListBase *statistics;
-} ThreadedObjectUpdateState;
-
-static void scene_update_object_add_task(void *node, void *user_data);
-
-static void scene_update_all_bases(EvaluationContext *eval_ctx, Scene *scene, Scene *scene_parent)
-{
- Base *base;
-
- for (base = scene->base.first; base; base = base->next) {
- Object *object = base->object;
-
- BKE_object_handle_update_ex(eval_ctx, scene_parent, object, scene->rigidbody_world, true);
-
- if (object->dup_group && (object->transflag & OB_DUPLIGROUP))
- BKE_group_handle_recalc_and_update(eval_ctx, scene_parent, object, object->dup_group);
-
- /* always update layer, so that animating layers works (joshua july 2010) */
- /* XXX commented out, this has depsgraph issues anyway - and this breaks setting scenes
- * (on scene-set, the base-lay is copied to ob-lay (ton nov 2012) */
- // base->lay = ob->lay;
- }
-}
-
-static void scene_update_object_func(TaskPool * __restrict pool, void *taskdata, int threadid)
-{
-/* Disable print for now in favor of summary statistics at the end of update. */
-#define PRINT if (false) printf
-
- ThreadedObjectUpdateState *state = (ThreadedObjectUpdateState *) BLI_task_pool_userdata(pool);
- void *node = taskdata;
- Object *object = DAG_get_node_object(node);
- EvaluationContext *eval_ctx = state->eval_ctx;
- Scene *scene = state->scene;
- Scene *scene_parent = state->scene_parent;
-
-#ifdef MBALL_SINGLETHREAD_HACK
- if (object && object->type == OB_MBALL) {
- state->has_mballs = true;
- }
- else
-#endif
- if (object) {
- double start_time = 0.0;
- bool add_to_stats = false;
-
- if (G.debug & G_DEBUG_DEPSGRAPH) {
- if (object->recalc & OB_RECALC_ALL) {
- printf("Thread %d: update object %s\n", threadid, object->id.name);
- }
-
- start_time = PIL_check_seconds_timer();
-
- if (object->recalc & OB_RECALC_ALL) {
- state->has_updated_objects = true;
- add_to_stats = true;
- }
- }
-
- /* We only update object itself here, dupli-group will be updated
- * separately from main thread because of we've got no idea about
- * dependencies inside the group.
- */
- BKE_object_handle_update_ex(eval_ctx, scene_parent, object, scene->rigidbody_world, false);
-
- /* Calculate statistics. */
- if (add_to_stats) {
- StatisicsEntry *entry;
-
- entry = MEM_mallocN(sizeof(StatisicsEntry), "update thread statistics");
- entry->object = object;
- entry->start_time = start_time;
- entry->duration = PIL_check_seconds_timer() - start_time;
-
- BLI_addtail(&state->statistics[threadid], entry);
- }
- }
- else {
- PRINT("Threda %d: update node %s\n", threadid,
- DAG_get_node_name(scene, node));
- }
-
- /* Update will decrease child's valency and schedule child with zero valency. */
- DAG_threaded_update_handle_node_updated(node, scene_update_object_add_task, pool);
-
-#undef PRINT
-}
-
-static void scene_update_object_add_task(void *node, void *user_data)
-{
- TaskPool *task_pool = user_data;
-
- BLI_task_pool_push(task_pool, scene_update_object_func, node, false, TASK_PRIORITY_LOW);
-}
-
-static void print_threads_statistics(ThreadedObjectUpdateState *state)
-{
- int i, tot_thread;
- double finish_time;
-
- if ((G.debug & G_DEBUG_DEPSGRAPH) == 0) {
- return;
- }
-
-#ifdef DETAILED_ANALYSIS_OUTPUT
- if (state->has_updated_objects) {
- tot_thread = BLI_system_thread_count();
-
- fprintf(stderr, "objects update base time %f\n", state->base_time);
-
- for (i = 0; i < tot_thread; i++) {
- StatisicsEntry *entry;
- for (entry = state->statistics[i].first;
- entry;
- entry = entry->next)
- {
- fprintf(stderr, "thread %d object %s start_time %f duration %f\n",
- i, entry->object->id.name + 2,
- entry->start_time, entry->duration);
- }
- BLI_freelistN(&state->statistics[i]);
- }
- }
-#else
- finish_time = PIL_check_seconds_timer();
- tot_thread = BLI_system_thread_count();
- int total_objects = 0;
-
- for (i = 0; i < tot_thread; i++) {
- int thread_total_objects = 0;
- double thread_total_time = 0.0;
- StatisicsEntry *entry;
-
- if (state->has_updated_objects) {
- /* Don't pollute output if no objects were updated. */
- for (entry = state->statistics[i].first;
- entry;
- entry = entry->next)
- {
- thread_total_objects++;
- thread_total_time += entry->duration;
- }
-
- printf("Thread %d: total %d objects in %f sec.\n",
- i,
- thread_total_objects,
- thread_total_time);
-
- for (entry = state->statistics[i].first;
- entry;
- entry = entry->next)
- {
- printf(" %s in %f sec\n", entry->object->id.name + 2, entry->duration);
- }
-
- total_objects += thread_total_objects;
- }
-
- BLI_freelistN(&state->statistics[i]);
- }
- if (state->has_updated_objects) {
- printf("Scene updated %d objects in %f sec\n",
- total_objects,
- finish_time - state->base_time);
- }
-#endif
-}
-
-static bool scene_need_update_objects(Main *bmain)
-{
- return
- /* Object datablocks themselves (for OB_RECALC_OB) */
- DAG_id_type_tagged(bmain, ID_OB) ||
-
- /* Objects data datablocks (for OB_RECALC_DATA) */
- DAG_id_type_tagged(bmain, ID_ME) || /* Mesh */
- DAG_id_type_tagged(bmain, ID_CU) || /* Curve */
- DAG_id_type_tagged(bmain, ID_MB) || /* MetaBall */
- DAG_id_type_tagged(bmain, ID_LA) || /* Lamp */
- DAG_id_type_tagged(bmain, ID_LT) || /* Lattice */
- DAG_id_type_tagged(bmain, ID_CA) || /* Camera */
- DAG_id_type_tagged(bmain, ID_KE) || /* KE */
- DAG_id_type_tagged(bmain, ID_SPK) || /* Speaker */
- DAG_id_type_tagged(bmain, ID_AR); /* Armature */
-}
-
-static void scene_update_objects(EvaluationContext *eval_ctx, Main *bmain, Scene *scene, Scene *scene_parent)
-{
- TaskScheduler *task_scheduler;
- TaskPool *task_pool;
- ThreadedObjectUpdateState state;
- bool need_singlethread_pass;
- bool need_free_scheduler;
-
- /* Early check for whether we need to invoke all the task-based
- * things (spawn new ppol, traverse dependency graph and so on).
- *
- * Basically if there's no ID datablocks tagged for update which
- * corresponds to object->recalc flags (which are checked in
- * BKE_object_handle_update() then we do nothing here.
- */
- if (!scene_need_update_objects(bmain)) {
- return;
- }
-
- state.eval_ctx = eval_ctx;
- state.scene = scene;
- state.scene_parent = scene_parent;
-
- if (G.debug & G_DEBUG_DEPSGRAPH_NO_THREADS) {
- task_scheduler = BLI_task_scheduler_create(1);
- need_free_scheduler = true;
- }
- else {
- task_scheduler = BLI_task_scheduler_get();
- need_free_scheduler = false;
- }
-
- /* Those are only needed when blender is run with --debug argument. */
- if (G.debug & G_DEBUG_DEPSGRAPH) {
- const int tot_thread = BLI_task_scheduler_num_threads(task_scheduler);
- state.statistics = MEM_callocN(tot_thread * sizeof(*state.statistics),
- "scene update objects stats");
- state.has_updated_objects = false;
- state.base_time = PIL_check_seconds_timer();
- }
-
-#ifdef MBALL_SINGLETHREAD_HACK
- state.has_mballs = false;
-#endif
-
- task_pool = BLI_task_pool_create(task_scheduler, &state);
-
- DAG_threaded_update_begin(scene, scene_update_object_add_task, task_pool);
- BLI_task_pool_work_and_wait(task_pool);
- BLI_task_pool_free(task_pool);
-
- if (G.debug & G_DEBUG_DEPSGRAPH) {
- print_threads_statistics(&state);
- MEM_freeN(state.statistics);
- }
-
- /* We do single thread pass to update all the objects which are in cyclic dependency.
- * Such objects can not be handled by a generic DAG traverse and it's really tricky
- * to detect whether cycle could be solved or not.
- *
- * In this situation we simply update all remaining objects in a single thread and
- * it'll happen in the same exact order as it was in single-threaded DAG.
- *
- * We couldn't use threaded update for objects which are in cycle because they might
- * access data of each other which is being re-evaluated.
- *
- * Also, as was explained above, for now we also update all the mballs in single thread.
- *
- * - sergey -
- */
- need_singlethread_pass = DAG_is_acyclic(scene) == false;
-#ifdef MBALL_SINGLETHREAD_HACK
- need_singlethread_pass |= state.has_mballs;
-#endif
-
- if (need_singlethread_pass) {
- scene_update_all_bases(eval_ctx, scene, scene_parent);
- }
-
- if (need_free_scheduler) {
- BLI_task_scheduler_free(task_scheduler);
- }
-}
-
-static void scene_update_tagged_recursive(EvaluationContext *eval_ctx, Main *bmain, Scene *scene, Scene *scene_parent)
-{
- scene->customdata_mask = scene_parent->customdata_mask;
-
- /* sets first, we allow per definition current scene to have
- * dependencies on sets, but not the other way around. */
- if (scene->set)
- scene_update_tagged_recursive(eval_ctx, bmain, scene->set, scene_parent);
-
- /* scene objects */
- scene_update_objects(eval_ctx, bmain, scene, scene_parent);
-
- /* scene drivers... */
- scene_update_drivers(bmain, scene);
-
- /* update masking curves */
- BKE_mask_update_scene(bmain, scene);
-
-}
-#endif /* WITH_LEGACY_DEPSGRAPH */
-
static bool check_rendered_viewport_visible(Main *bmain)
{
wmWindowManager *wm = bmain->wm.first;
wmWindow *window;
for (window = wm->windows.first; window != NULL; window = window->next) {
- bScreen *screen = window->screen;
+ const bScreen *screen = BKE_workspace_active_screen_get(window->workspace_hook);
+ WorkSpace *workspace = BKE_workspace_active_get(window->workspace_hook);
+ Scene *scene = window->scene;
+ ViewRender *view_render = BKE_viewrender_get(scene, workspace);
ScrArea *area;
+ RenderEngineType *type = RE_engines_find(view_render->engine_id);
+ if ((type->draw_engine != NULL) || (type->render_to_view == NULL)) {
+ continue;
+ }
+ const bool use_legacy = (type->flag & RE_USE_LEGACY_PIPELINE) != 0;
for (area = screen->areabase.first; area != NULL; area = area->next) {
View3D *v3d = area->spacedata.first;
if (area->spacetype != SPACE_VIEW3D) {
continue;
}
- if (v3d->drawtype == OB_RENDER) {
+ if (v3d->drawtype == OB_RENDER || !use_legacy) {
return true;
}
}
@@ -1852,318 +1401,94 @@ static void prepare_mesh_for_viewport_render(Main *bmain, Scene *scene)
if (check_rendered_viewport_visible(bmain)) {
BMesh *bm = mesh->edit_btmesh->bm;
BM_mesh_bm_to_me(bm, mesh, (&(struct BMeshToMeshParams){0}));
- DAG_id_tag_update(&mesh->id, 0);
+ DEG_id_tag_update(&mesh->id, 0);
}
}
}
}
-void BKE_scene_update_tagged(EvaluationContext *eval_ctx, Main *bmain, Scene *scene)
-{
- Scene *sce_iter;
-#ifdef WITH_LEGACY_DEPSGRAPH
- bool use_new_eval = !DEG_depsgraph_use_legacy();
-#endif
-
- /* keep this first */
- BLI_callback_exec(bmain, &scene->id, BLI_CB_EVT_SCENE_UPDATE_PRE);
-
- /* (re-)build dependency graph if needed */
- for (sce_iter = scene; sce_iter; sce_iter = sce_iter->set) {
- DAG_scene_relations_update(bmain, sce_iter);
- /* Uncomment this to check if dependency graph was properly tagged for update. */
-#if 0
-#ifdef WITH_LEGACY_DEPSGRAPH
- if (use_new_eval)
-#endif
- {
- DAG_scene_relations_validate(bmain, sce_iter);
- }
-#endif
- }
-
- /* flush editing data if needed */
+/* TODO(sergey): This actually should become view_layer_graph or so.
+ * Same applies to update_for_newframe.
+ */
+void BKE_scene_graph_update_tagged(EvaluationContext *eval_ctx,
+ Depsgraph *depsgraph,
+ Main *bmain,
+ Scene *scene,
+ ViewLayer *view_layer)
+{
+ /* TODO(sergey): Temporary solution for until pipeline.c is ported. */
+ if (view_layer == NULL) {
+ view_layer = DEG_get_evaluated_view_layer(depsgraph);
+ BLI_assert(view_layer != NULL);
+ }
+ /* TODO(sergey): Some functions here are changing global state,
+ * for example, clearing update tags from bmain.
+ */
+ /* (Re-)build dependency graph if needed. */
+ DEG_graph_relations_update(depsgraph, bmain, scene, view_layer);
+ /* Uncomment this to check if graph was properly tagged for update. */
+ // DEG_debug_graph_relations_validate(depsgraph, bmain, scene);
+ /* Flush editing data if needed. */
prepare_mesh_for_viewport_render(bmain, scene);
-
- /* flush recalc flags to dependencies */
- DAG_ids_flush_tagged(bmain);
-
- /* removed calls to quick_cache, see pointcache.c */
-
- /* clear "LIB_TAG_DOIT" flag from all materials, to prevent infinite recursion problems later
- * when trying to find materials with drivers that need evaluating [#32017]
+ /* Flush recalc flags to dependencies. */
+ DEG_graph_flush_update(bmain, depsgraph);
+ /* Update all objects: drivers, matrices, displists, etc. flags set
+ * by depgraph or manual, no layer check here, gets correct flushed.
*/
- BKE_main_id_tag_idcode(bmain, ID_MA, LIB_TAG_DOIT, false);
- BKE_main_id_tag_idcode(bmain, ID_LA, LIB_TAG_DOIT, false);
-
- /* update all objects: drivers, matrices, displists, etc. flags set
- * by depgraph or manual, no layer check here, gets correct flushed
- *
- * in the future this should handle updates for all datablocks, not
- * only objects and scenes. - brecht */
-#ifdef WITH_LEGACY_DEPSGRAPH
- if (!use_new_eval) {
- scene_update_tagged_recursive(eval_ctx, bmain, scene, scene);
- }
- else
-#endif
- {
- DEG_evaluate_on_refresh(eval_ctx, scene->depsgraph, scene);
- }
-
- /* update sound system animation (TODO, move to depsgraph) */
+ DEG_evaluate_on_refresh(eval_ctx, depsgraph);
+ /* Update sound system animation (TODO, move to depsgraph). */
BKE_sound_update_scene(bmain, scene);
-
- /* extra call here to recalc scene animation (for sequencer) */
- {
- AnimData *adt = BKE_animdata_from_id(&scene->id);
- float ctime = BKE_scene_frame_get(scene);
-
- if (adt && (adt->recalc & ADT_RECALC_ANIM))
- BKE_animsys_evaluate_animdata(scene, &scene->id, adt, ctime, 0);
- }
-
- /* Extra call here to recalc material animation.
- *
- * Need to do this so changing material settings from the graph/dopesheet
- * will update stuff in the viewport.
- */
-#ifdef WITH_LEGACY_DEPSGRAPH
- if (!use_new_eval && DAG_id_type_tagged(bmain, ID_MA)) {
- Material *material;
- float ctime = BKE_scene_frame_get(scene);
-
- for (material = bmain->mat.first;
- material;
- material = material->id.next)
- {
- AnimData *adt = BKE_animdata_from_id(&material->id);
- if (adt && (adt->recalc & ADT_RECALC_ANIM))
- BKE_animsys_evaluate_animdata(scene, &material->id, adt, ctime, 0);
- }
- }
-
- /* Also do the same for node trees. */
- if (!use_new_eval && DAG_id_type_tagged(bmain, ID_NT)) {
- float ctime = BKE_scene_frame_get(scene);
-
- FOREACH_NODETREE(bmain, ntree, id)
- {
- AnimData *adt = BKE_animdata_from_id(&ntree->id);
- if (adt && (adt->recalc & ADT_RECALC_ANIM))
- BKE_animsys_evaluate_animdata(scene, &ntree->id, adt, ctime, 0);
- }
- FOREACH_NODETREE_END
- }
-#endif
-
- /* notify editors and python about recalc */
- BLI_callback_exec(bmain, &scene->id, BLI_CB_EVT_SCENE_UPDATE_POST);
-
/* Inform editors about possible changes. */
- DAG_ids_check_recalc(bmain, scene, false);
-
- /* clear recalc flags */
- DAG_ids_clear_recalc(bmain);
+ DEG_ids_check_recalc(bmain, depsgraph, scene, view_layer, false);
+ /* Clear recalc flags. */
+ DEG_ids_clear_recalc(bmain);
}
/* applies changes right away, does all sets too */
-void BKE_scene_update_for_newframe(EvaluationContext *eval_ctx, Main *bmain, Scene *sce, unsigned int lay)
-{
- BKE_scene_update_for_newframe_ex(eval_ctx, bmain, sce, lay, false);
-}
-
-void BKE_scene_update_for_newframe_ex(EvaluationContext *eval_ctx, Main *bmain, Scene *sce, unsigned int lay, bool do_invisible_flush)
-{
- float ctime = BKE_scene_frame_get(sce);
- Scene *sce_iter;
-#ifdef DETAILED_ANALYSIS_OUTPUT
- double start_time = PIL_check_seconds_timer();
-#endif
-#ifdef WITH_LEGACY_DEPSGRAPH
- bool use_new_eval = !DEG_depsgraph_use_legacy();
-#else
- /* TODO(sergey): Pass to evaluation routines instead of storing layer in the dependency graph? */
- (void) do_invisible_flush;
-#endif
-
- DAG_editors_update_pre(bmain, sce, true);
-
- /* keep this first */
- BLI_callback_exec(bmain, &sce->id, BLI_CB_EVT_FRAME_CHANGE_PRE);
- BLI_callback_exec(bmain, &sce->id, BLI_CB_EVT_SCENE_UPDATE_PRE);
-
- /* update animated image textures for particles, modifiers, gpu, etc,
- * call this at the start so modifiers with textures don't lag 1 frame */
- BKE_image_update_frame(bmain, sce->r.cfra);
-
-#ifdef WITH_LEGACY_DEPSGRAPH
- /* rebuild rigid body worlds before doing the actual frame update
- * this needs to be done on start frame but animation playback usually starts one frame later
- * we need to do it here to avoid rebuilding the world on every simulation change, which can be very expensive
+void BKE_scene_graph_update_for_newframe(EvaluationContext *eval_ctx,
+ Depsgraph *depsgraph,
+ Main *bmain,
+ Scene *scene,
+ ViewLayer *view_layer)
+{
+ /* TODO(sergey): Temporary solution for until pipeline.c is ported. */
+ if (view_layer == NULL) {
+ view_layer = DEG_get_evaluated_view_layer(depsgraph);
+ BLI_assert(view_layer != NULL);
+ }
+ /* TODO(sergey): Some functions here are changing global state,
+ * for example, clearing update tags from bmain.
*/
- if (!use_new_eval) {
- scene_rebuild_rbw_recursive(sce, ctime);
- }
-#endif
-
- BKE_sound_set_cfra(sce->r.cfra);
-
- /* clear animation overrides */
- /* XXX TODO... */
-
- for (sce_iter = sce; sce_iter; sce_iter = sce_iter->set)
- DAG_scene_relations_update(bmain, sce_iter);
-
-#ifdef WITH_LEGACY_DEPSGRAPH
- if (!use_new_eval) {
- /* flush recalc flags to dependencies, if we were only changing a frame
- * this would not be necessary, but if a user or a script has modified
- * some datablock before BKE_scene_update_tagged was called, we need the flush */
- DAG_ids_flush_tagged(bmain);
-
- /* Following 2 functions are recursive
- * so don't call within 'scene_update_tagged_recursive' */
- DAG_scene_update_flags(bmain, sce, lay, true, do_invisible_flush); // only stuff that moves or needs display still
- BKE_mask_evaluate_all_masks(bmain, ctime, true);
- }
-#endif
-
- /* Update animated cache files for modifiers. */
- BKE_cachefile_update_frame(bmain, sce, ctime, (((double)sce->r.frs_sec) / (double)sce->r.frs_sec_base));
-
+ const float ctime = BKE_scene_frame_get(scene);
+ /* Keep this first. */
+ BLI_callback_exec(bmain, &scene->id, BLI_CB_EVT_FRAME_CHANGE_PRE);
+ /* Update animated image textures for particles, modifiers, gpu, etc,
+ * call this at the start so modifiers with textures don't lag 1 frame.
+ */
+ BKE_image_update_frame(bmain, scene->r.cfra);
+ BKE_sound_set_cfra(scene->r.cfra);
+ DEG_graph_relations_update(depsgraph, bmain, scene, view_layer);
+ /* Update animated cache files for modifiers.
+ *
+ * TODO(sergey): Make this a depsgraph node?
+ */
+ BKE_cachefile_update_frame(bmain, scene, ctime,
+ (((double)scene->r.frs_sec) / (double)scene->r.frs_sec_base));
#ifdef POSE_ANIMATION_WORKAROUND
scene_armature_depsgraph_workaround(bmain);
#endif
-
- /* All 'standard' (i.e. without any dependencies) animation is handled here,
- * with an 'local' to 'macro' order of evaluation. This should ensure that
- * settings stored nestled within a hierarchy (i.e. settings in a Texture block
- * can be overridden by settings from Scene, which owns the Texture through a hierarchy
- * such as Scene->World->MTex/Texture) can still get correctly overridden.
+ /* Update all objects: drivers, matrices, displists, etc. flags set
+ * by depgraph or manual, no layer check here, gets correct flushed.
*/
-#ifdef WITH_LEGACY_DEPSGRAPH
- if (!use_new_eval) {
- BKE_animsys_evaluate_all_animation(bmain, sce, ctime);
- /*...done with recursive funcs */
- }
-#endif
-
- /* clear "LIB_TAG_DOIT" flag from all materials, to prevent infinite recursion problems later
- * when trying to find materials with drivers that need evaluating [#32017]
- */
- BKE_main_id_tag_idcode(bmain, ID_MA, LIB_TAG_DOIT, false);
- BKE_main_id_tag_idcode(bmain, ID_LA, LIB_TAG_DOIT, false);
-
- /* run rigidbody sim */
- /* NOTE: current position is so that rigidbody sim affects other objects, might change in the future */
-#ifdef WITH_LEGACY_DEPSGRAPH
- if (!use_new_eval) {
- scene_do_rb_simulation_recursive(sce, ctime);
- }
-#endif
-
- /* BKE_object_handle_update() on all objects, groups and sets */
-#ifdef WITH_LEGACY_DEPSGRAPH
- if (use_new_eval) {
- DEG_evaluate_on_framechange(eval_ctx, bmain, sce->depsgraph, ctime, lay);
- }
- else {
- scene_update_tagged_recursive(eval_ctx, bmain, sce, sce);
- }
-#else
- DEG_evaluate_on_framechange(eval_ctx, bmain, sce->depsgraph, ctime, lay);
-#endif
-
- /* update sound system animation (TODO, move to depsgraph) */
- BKE_sound_update_scene(bmain, sce);
-
-#ifdef WITH_LEGACY_DEPSGRAPH
- if (!use_new_eval) {
- scene_depsgraph_hack(eval_ctx, sce, sce);
- }
-#endif
-
- /* notify editors and python about recalc */
- BLI_callback_exec(bmain, &sce->id, BLI_CB_EVT_SCENE_UPDATE_POST);
- BLI_callback_exec(bmain, &sce->id, BLI_CB_EVT_FRAME_CHANGE_POST);
-
+ DEG_evaluate_on_framechange(eval_ctx, bmain, depsgraph, ctime);
+ /* Update sound system animation (TODO, move to depsgraph). */
+ BKE_sound_update_scene(bmain, scene);
+ /* Notify editors and python about recalc. */
+ BLI_callback_exec(bmain, &scene->id, BLI_CB_EVT_FRAME_CHANGE_POST);
/* Inform editors about possible changes. */
- DAG_ids_check_recalc(bmain, sce, true);
-
+ DEG_ids_check_recalc(bmain, depsgraph, scene, view_layer, true);
/* clear recalc flags */
- DAG_ids_clear_recalc(bmain);
-
-#ifdef DETAILED_ANALYSIS_OUTPUT
- fprintf(stderr, "frame update start_time %f duration %f\n", start_time, PIL_check_seconds_timer() - start_time);
-#endif
-}
-
-/* return default layer, also used to patch old files */
-SceneRenderLayer *BKE_scene_add_render_layer(Scene *sce, const char *name)
-{
- SceneRenderLayer *srl;
-
- if (!name)
- name = DATA_("RenderLayer");
-
- srl = MEM_callocN(sizeof(SceneRenderLayer), "new render layer");
- BLI_strncpy(srl->name, name, sizeof(srl->name));
- BLI_uniquename(&sce->r.layers, srl, DATA_("RenderLayer"), '.', offsetof(SceneRenderLayer, name), sizeof(srl->name));
- BLI_addtail(&sce->r.layers, srl);
-
- /* note, this is also in render, pipeline.c, to make layer when scenedata doesnt have it */
- srl->lay = (1 << 20) - 1;
- srl->layflag = 0x7FFF; /* solid ztra halo edge strand */
- srl->passflag = SCE_PASS_COMBINED | SCE_PASS_Z;
- srl->pass_alpha_threshold = 0.5f;
- BKE_freestyle_config_init(&srl->freestyleConfig);
-
- return srl;
-}
-
-bool BKE_scene_remove_render_layer(Main *bmain, Scene *scene, SceneRenderLayer *srl)
-{
- const int act = BLI_findindex(&scene->r.layers, srl);
- Scene *sce;
-
- if (act == -1) {
- return false;
- }
- else if ( (scene->r.layers.first == scene->r.layers.last) &&
- (scene->r.layers.first == srl))
- {
- /* ensure 1 layer is kept */
- return false;
- }
-
- BKE_freestyle_config_free(&srl->freestyleConfig);
-
- if (srl->prop) {
- IDP_FreeProperty(srl->prop);
- MEM_freeN(srl->prop);
- }
-
- BLI_remlink(&scene->r.layers, srl);
- MEM_freeN(srl);
-
- scene->r.actlay = 0;
-
- for (sce = bmain->scene.first; sce; sce = sce->id.next) {
- if (sce->nodetree) {
- bNode *node;
- for (node = sce->nodetree->nodes.first; node; node = node->next) {
- if (node->type == CMP_NODE_R_LAYERS && (Scene *)node->id == scene) {
- if (node->custom1 == act)
- node->custom1 = 0;
- else if (node->custom1 > act)
- node->custom1--;
- }
- }
- }
- }
-
- return true;
+ DEG_ids_clear_recalc(bmain);
}
/* return default view */
@@ -2246,21 +1571,34 @@ float get_render_aosss_error(const RenderData *r, float error)
return error;
}
-/* helper function for the SETLOOPER macro */
-Base *_setlooper_base_step(Scene **sce_iter, Base *base)
+/**
+ * Helper function for the SETLOOPER and SETLOOPER_VIEW_LAYER macros
+ *
+ * It iterates over the bases of the active layer and then the bases
+ * of the active layer of the background (set) scenes recursively.
+ */
+Base *_setlooper_base_step(Scene **sce_iter, ViewLayer *view_layer, Base *base)
{
if (base && base->next) {
- /* common case, step to the next */
+ /* Common case, step to the next. */
return base->next;
}
- else if (base == NULL && (*sce_iter)->base.first) {
- /* first time looping, return the scenes first base */
- return (Base *)(*sce_iter)->base.first;
+ else if ((base == NULL) && (view_layer != NULL)) {
+ /* First time looping, return the scenes first base. */
+ /* For the first loop we should get the layer from workspace when available. */
+ if (view_layer->object_bases.first) {
+ return (Base *)view_layer->object_bases.first;
+ }
+ /* No base on this scene layer. */
+ goto next_set;
}
else {
- /* reached the end, get the next base in the set */
+next_set:
+ /* Reached the end, get the next base in the set. */
while ((*sce_iter = (*sce_iter)->set)) {
- base = (Base *)(*sce_iter)->base.first;
+ ViewLayer *view_layer_set = BKE_view_layer_from_scene_get((*sce_iter));
+ base = (Base *)view_layer_set->object_bases.first;
+
if (base) {
return base;
}
@@ -2272,56 +1610,80 @@ Base *_setlooper_base_step(Scene **sce_iter, Base *base)
bool BKE_scene_use_new_shading_nodes(const Scene *scene)
{
- const RenderEngineType *type = RE_engines_find(scene->r.engine);
- return (type && type->flag & RE_USE_SHADING_NODES);
+ return BKE_viewrender_use_new_shading_nodes(&scene->view_render);
}
bool BKE_scene_use_shading_nodes_custom(Scene *scene)
{
- RenderEngineType *type = RE_engines_find(scene->r.engine);
- return (type && type->flag & RE_USE_SHADING_NODES_CUSTOM);
+ return BKE_viewrender_use_shading_nodes_custom(&scene->view_render);
}
bool BKE_scene_use_world_space_shading(Scene *scene)
{
- const RenderEngineType *type = RE_engines_find(scene->r.engine);
+ RenderEngineType *type = RE_engines_find(scene->view_render.engine_id);
return ((scene->r.mode & R_USE_WS_SHADING) ||
(type && (type->flag & RE_USE_SHADING_NODES)));
}
bool BKE_scene_use_spherical_stereo(Scene *scene)
{
- RenderEngineType *type = RE_engines_find(scene->r.engine);
- return (type && type->flag & RE_USE_SPHERICAL_STEREO);
+ return BKE_viewrender_use_spherical_stereo(&scene->view_render);
}
-bool BKE_scene_uses_blender_internal(const Scene *scene)
+bool BKE_scene_uses_blender_internal(const Scene *scene)
{
- return STREQ(scene->r.engine, RE_engine_id_BLENDER_RENDER);
+ return BKE_viewrender_uses_blender_internal(&scene->view_render);
}
bool BKE_scene_uses_blender_game(const Scene *scene)
{
- return STREQ(scene->r.engine, RE_engine_id_BLENDER_GAME);
+ return BKE_viewrender_uses_blender_game(&scene->view_render);
+}
+
+bool BKE_scene_uses_blender_eevee(const Scene *scene)
+{
+ return BKE_viewrender_uses_blender_eevee(&scene->view_render);
}
-void BKE_scene_base_flag_to_objects(struct Scene *scene)
+void BKE_scene_base_flag_to_objects(ViewLayer *view_layer)
{
- Base *base = scene->base.first;
+ Base *base = view_layer->object_bases.first;
while (base) {
- base->object->flag = base->flag;
+ BKE_scene_object_base_flag_sync_from_base(base);
base = base->next;
}
}
-void BKE_scene_base_flag_from_objects(struct Scene *scene)
+void BKE_scene_object_base_flag_sync_from_base(Base *base)
{
- Base *base = scene->base.first;
+ Object *ob = base->object;
- while (base) {
- base->flag = base->object->flag;
- base = base->next;
+ /* keep the object only flags untouched */
+ int flag = ob->flag & OB_FROMGROUP;
+
+ ob->flag = base->flag;
+ ob->flag |= flag;
+
+ if ((base->flag & BASE_SELECTED) != 0) {
+ ob->flag |= SELECT;
+ }
+ else {
+ ob->flag &= ~SELECT;
+ }
+}
+
+void BKE_scene_object_base_flag_sync_from_object(Base *base)
+{
+ Object *ob = base->object;
+ base->flag = ob->flag;
+
+ if ((ob->flag & SELECT) != 0) {
+ base->flag |= BASE_SELECTED;
+ BLI_assert((base->flag & BASE_SELECTABLED) != 0);
+ }
+ else {
+ base->flag &= ~BASE_SELECTED;
}
}
@@ -2385,6 +1747,81 @@ int BKE_render_preview_pixel_size(const RenderData *r)
return r->preview_pixel_size;
}
+/* ***************************************************** */
+/* render engine settings */
+
+ViewRender *BKE_viewrender_get(Scene *scene, WorkSpace *workspace)
+{
+ if (workspace == NULL || BKE_workspace_use_scene_settings_get(workspace)) {
+ return &scene->view_render;
+ }
+ return BKE_workspace_view_render_get(workspace);
+}
+
+/**
+ * Initialize a static created struct for WorkSpace and Scene to store the viewport
+ * related drawing data.
+ */
+void BKE_viewrender_init(ViewRender *view_render)
+{
+ BLI_strncpy(view_render->engine_id, RE_engine_id_BLENDER_EEVEE, sizeof(view_render->engine_id));
+}
+
+/**
+ * Do not free ViewRender itself since it's not even allocated.
+ */
+void BKE_viewrender_free(ViewRender *UNUSED(view_render))
+{
+ /* Do nothing. */
+}
+
+/**
+ * Copy used by libblock copying.
+ */
+void BKE_viewrender_copy(ViewRender *to, const ViewRender *from)
+{
+ *to = *from;
+}
+
+bool BKE_viewrender_use_new_shading_nodes(const ViewRender *view_render)
+{
+ RenderEngineType *type = RE_engines_find(view_render->engine_id);
+ return (type && type->flag & RE_USE_SHADING_NODES);
+}
+
+bool BKE_viewrender_use_shading_nodes_custom(const ViewRender *view_render)
+{
+ RenderEngineType *type = RE_engines_find(view_render->engine_id);
+ return (type && type->flag & RE_USE_SHADING_NODES_CUSTOM);
+}
+
+bool BKE_viewrender_use_spherical_stereo(const ViewRender *view_render)
+{
+ const char *engine_id = view_render->engine_id;
+ RenderEngineType *type = RE_engines_find(engine_id);
+ return (type && type->flag & RE_USE_SPHERICAL_STEREO);
+}
+
+bool BKE_viewrender_uses_blender_internal(const ViewRender *view_render)
+{
+ const char *engine_id = view_render->engine_id;
+ return STREQ(engine_id, RE_engine_id_BLENDER_RENDER);
+}
+
+bool BKE_viewrender_uses_blender_game(const ViewRender *view_render)
+{
+ const char *engine_id = view_render->engine_id;
+ return STREQ(engine_id, RE_engine_id_BLENDER_GAME);
+}
+
+bool BKE_viewrender_uses_blender_eevee(const ViewRender *view_render)
+{
+ const char *engine_id = view_render->engine_id;
+ return STREQ(engine_id, RE_engine_id_BLENDER_EEVEE);
+}
+
+/* ***************************************************** */
+
/* Apply the needed correction factor to value, based on unit_type (only length-related are affected currently)
* and unit->scale_length.
*/
@@ -2690,3 +2127,106 @@ int BKE_scene_multiview_num_videos_get(const RenderData *rd)
return BKE_scene_multiview_num_views_get(rd);
}
}
+
+/* Manipulation of depsgraph storage. */
+
+/* This is a key which identifies depsgraph. */
+typedef struct DepsgraphKey {
+ ViewLayer *view_layer;
+ /* TODO(sergey): Need to include window somehow (same layer might be in a
+ * different states in different windows).
+ */
+} DepsgraphKey;
+
+static unsigned int depsgraph_key_hash(const void *key_v)
+{
+ const DepsgraphKey *key = key_v;
+ unsigned int hash = BLI_ghashutil_ptrhash(key->view_layer);
+ /* TODO(sergey): Include hash from other fields in the key. */
+ return hash;
+}
+
+static bool depsgraph_key_compare(const void *key_a_v, const void *key_b_v)
+{
+ const DepsgraphKey *key_a = key_a_v;
+ const DepsgraphKey *key_b = key_b_v;
+ /* TODO(sergey): Compare rest of */
+ return !(key_a->view_layer == key_b->view_layer);
+}
+
+static void depsgraph_key_free(void *key_v)
+{
+ DepsgraphKey *key = key_v;
+ MEM_freeN(key);
+}
+
+static void depsgraph_key_value_free(void *value)
+{
+ Depsgraph *depsgraph = value;
+ DEG_graph_free(depsgraph);
+}
+
+void BKE_scene_allocate_depsgraph_hash(Scene *scene)
+{
+ scene->depsgraph_hash = BLI_ghash_new(depsgraph_key_hash,
+ depsgraph_key_compare,
+ "Scene Depsgraph Hash");
+}
+
+void BKE_scene_ensure_depsgraph_hash(Scene *scene)
+{
+ if (scene->depsgraph_hash == NULL) {
+ BKE_scene_allocate_depsgraph_hash(scene);
+ }
+}
+
+void BKE_scene_free_depsgraph_hash(Scene *scene)
+{
+ if (scene->depsgraph_hash == NULL) {
+ return;
+ }
+ BLI_ghash_free(scene->depsgraph_hash,
+ depsgraph_key_free,
+ depsgraph_key_value_free);
+}
+
+/* Query depsgraph for a specific contexts. */
+
+Depsgraph *BKE_scene_get_depsgraph(Scene *scene,
+ ViewLayer *view_layer,
+ bool allocate)
+{
+ BLI_assert(scene != NULL);
+ BLI_assert(view_layer != NULL);
+ /* Make sure hash itself exists. */
+ if (allocate) {
+ BKE_scene_ensure_depsgraph_hash(scene);
+ }
+ if (scene->depsgraph_hash == NULL) {
+ return NULL;
+ }
+ /* Either ensure item is in the hash or simply return NULL if it's not,
+ * depending on whether caller wants us to create depsgraph or not.
+ */
+ DepsgraphKey key;
+ key.view_layer = view_layer;
+ Depsgraph *depsgraph;
+ if (allocate) {
+ DepsgraphKey **key_ptr;
+ Depsgraph **depsgraph_ptr;
+ if (!BLI_ghash_ensure_p_ex(scene->depsgraph_hash,
+ &key,
+ (void ***)&key_ptr,
+ (void ***)&depsgraph_ptr))
+ {
+ *key_ptr = MEM_mallocN(sizeof(DepsgraphKey), __func__);
+ **key_ptr = key;
+ *depsgraph_ptr = DEG_graph_new();
+ }
+ depsgraph = *depsgraph_ptr;
+ }
+ else {
+ depsgraph = BLI_ghash_lookup(scene->depsgraph_hash, &key);
+ }
+ return depsgraph;
+}
diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c
index 78caf1fe1f3..754f59d2e33 100644
--- a/source/blender/blenkernel/intern/screen.c
+++ b/source/blender/blenkernel/intern/screen.c
@@ -45,13 +45,16 @@
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
#include "DNA_view3d_types.h"
+#include "DNA_workspace_types.h"
#include "BLI_listbase.h"
#include "BLI_utildefines.h"
#include "BLI_rect.h"
+#include "BKE_icons.h"
#include "BKE_idprop.h"
#include "BKE_screen.h"
+#include "BKE_workspace.h"
/* ************ Spacetype/regiontype handling ************** */
@@ -180,6 +183,7 @@ ARegion *BKE_area_region_copy(SpaceType *st, ARegion *ar)
BLI_listbase_clear(&newar->panels_category_active);
BLI_listbase_clear(&newar->ui_lists);
newar->swinid = 0;
+ newar->manipulator_map = NULL;
newar->regiontimer = NULL;
newar->headerstr = NULL;
@@ -289,6 +293,43 @@ void BKE_spacedata_id_unref(struct ScrArea *sa, struct SpaceLink *sl, struct ID
}
}
+/**
+ * Avoid bad-level calls to #WM_manipulatormap_tag_refresh.
+ */
+static void (*region_refresh_tag_manipulatormap_callback)(struct wmManipulatorMap *) = NULL;
+
+void BKE_region_callback_refresh_tag_manipulatormap_set(void (*callback)(struct wmManipulatorMap *))
+{
+ region_refresh_tag_manipulatormap_callback = callback;
+}
+
+void BKE_screen_manipulator_tag_refresh(struct bScreen *sc)
+{
+ if (region_refresh_tag_manipulatormap_callback == NULL) {
+ return;
+ }
+
+ ScrArea *sa;
+ ARegion *ar;
+ for (sa = sc->areabase.first; sa; sa = sa->next) {
+ for (ar = sa->regionbase.first; ar; ar = ar->next) {
+ if (ar->manipulator_map != NULL) {
+ region_refresh_tag_manipulatormap_callback(ar->manipulator_map);
+ }
+ }
+ }
+}
+
+/**
+ * Avoid bad-level calls to #WM_manipulatormap_delete.
+ */
+static void (*region_free_manipulatormap_callback)(struct wmManipulatorMap *) = NULL;
+
+void BKE_region_callback_free_manipulatormap_set(void (*callback)(struct wmManipulatorMap *))
+{
+ region_free_manipulatormap_callback = callback;
+}
+
/* not region itself */
void BKE_area_region_free(SpaceType *st, ARegion *ar)
{
@@ -338,6 +379,11 @@ void BKE_area_region_free(SpaceType *st, ARegion *ar)
MEM_freeN(uilst->properties);
}
}
+
+ if (ar->manipulator_map != NULL) {
+ region_free_manipulatormap_callback(ar->manipulator_map);
+ }
+
BLI_freelistN(&ar->ui_lists);
BLI_freelistN(&ar->ui_previews);
BLI_freelistN(&ar->panels_category);
@@ -382,6 +428,8 @@ void BKE_screen_free(bScreen *sc)
BLI_freelistN(&sc->edgebase);
BLI_freelistN(&sc->areabase);
+ BKE_previewimg_free(&sc->preview);
+
/* Region and timer are freed by the window manager. */
MEM_SAFE_FREE(sc->tool_tip);
}
@@ -583,7 +631,7 @@ void BKE_screen_view3d_sync(View3D *v3d, struct Scene *scene)
}
}
-void BKE_screen_view3d_scene_sync(bScreen *sc)
+void BKE_screen_view3d_scene_sync(bScreen *sc, Scene *scene)
{
/* are there cameras in the views that are not in the scene? */
ScrArea *sa;
@@ -592,55 +640,26 @@ void BKE_screen_view3d_scene_sync(bScreen *sc)
for (sl = sa->spacedata.first; sl; sl = sl->next) {
if (sl->spacetype == SPACE_VIEW3D) {
View3D *v3d = (View3D *) sl;
- BKE_screen_view3d_sync(v3d, sc->scene);
+ BKE_screen_view3d_sync(v3d, scene);
}
}
}
}
-void BKE_screen_view3d_main_sync(ListBase *screen_lb, Scene *scene)
+void BKE_screen_transform_orientation_remove(
+ const bScreen *screen, const WorkSpace *workspace, const TransformOrientation *orientation)
{
- bScreen *sc;
- ScrArea *sa;
- SpaceLink *sl;
+ const int orientation_index = BKE_workspace_transform_orientation_get_index(workspace, orientation);
- /* from scene copy to the other views */
- for (sc = screen_lb->first; sc; sc = sc->id.next) {
- if (sc->scene != scene)
- continue;
-
- for (sa = sc->areabase.first; sa; sa = sa->next)
- for (sl = sa->spacedata.first; sl; sl = sl->next)
- if (sl->spacetype == SPACE_VIEW3D)
- BKE_screen_view3d_sync((View3D *)sl, scene);
- }
-}
-
-void BKE_screen_view3d_twmode_remove(View3D *v3d, const int i)
-{
- const int selected_index = (v3d->twmode - V3D_MANIP_CUSTOM);
- if (selected_index == i) {
- v3d->twmode = V3D_MANIP_GLOBAL; /* fallback to global */
- }
- else if (selected_index > i) {
- v3d->twmode--;
- }
-}
-
-void BKE_screen_view3d_main_twmode_remove(ListBase *screen_lb, Scene *scene, const int i)
-{
- bScreen *sc;
+ for (ScrArea *area = screen->areabase.first; area; area = area->next) {
+ for (SpaceLink *sl = area->spacedata.first; sl; sl = sl->next) {
+ if (sl->spacetype == SPACE_VIEW3D) {
+ View3D *v3d = (View3D *)sl;
- for (sc = screen_lb->first; sc; sc = sc->id.next) {
- if (sc->scene == scene) {
- ScrArea *sa;
- for (sa = sc->areabase.first; sa; sa = sa->next) {
- SpaceLink *sl;
- for (sl = sa->spacedata.first; sl; sl = sl->next) {
- if (sl->spacetype == SPACE_VIEW3D) {
- View3D *v3d = (View3D *)sl;
- BKE_screen_view3d_twmode_remove(v3d, i);
- }
+ if (v3d->custom_orientation_index == orientation_index) {
+ /* could also use orientation_index-- */
+ v3d->twmode = V3D_MANIP_GLOBAL;
+ v3d->custom_orientation_index = -1;
}
}
}
@@ -687,3 +706,13 @@ void BKE_screen_gpu_fx_validate(GPUFXSettings *fx_settings)
GPU_fx_compositor_init_ssao_settings(fx_ssao);
}
}
+
+bool BKE_screen_is_fullscreen_area(const bScreen *screen)
+{
+ return ELEM(screen->state, SCREENMAXIMIZED, SCREENFULL);
+}
+
+bool BKE_screen_is_used(const bScreen *screen)
+{
+ return (screen->winid != 0);
+}
diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c
index 11ee8a5ca6f..424f4269f3c 100644
--- a/source/blender/blenkernel/intern/sequencer.c
+++ b/source/blender/blenkernel/intern/sequencer.c
@@ -63,9 +63,9 @@
#include "BLT_translation.h"
#include "BKE_animsys.h"
-#include "BKE_depsgraph.h"
#include "BKE_global.h"
#include "BKE_image.h"
+#include "BKE_layer.h"
#include "BKE_main.h"
#include "BKE_sequencer.h"
#include "BKE_movieclip.h"
@@ -75,6 +75,8 @@
#include "BKE_library.h"
#include "BKE_idprop.h"
+#include "DEG_depsgraph.h"
+
#include "RNA_access.h"
#include "RE_pipeline.h"
@@ -88,8 +90,10 @@
#include "BKE_context.h"
#include "BKE_sound.h"
+#include "RE_engine.h"
+
#ifdef WITH_AUDASPACE
-# include AUD_SPECIAL_H
+# include <AUD_Special.h>
#endif
/* mutable state for sequencer */
@@ -3260,6 +3264,10 @@ static ImBuf *seq_render_scene_strip(const SeqRenderData *context, Sequence *seq
// have_seq = (scene->r.scemode & R_DOSEQ) && scene->ed && scene->ed->seqbase.first); /* UNUSED */
have_comp = (scene->r.scemode & R_DOCOMP) && scene->use_nodes && scene->nodetree;
+ /* Get depsgraph and scene layer for the strip. */
+ ViewLayer *view_layer = BKE_view_layer_from_scene_get(scene);
+ Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true);
+
orig_data.scemode = scene->r.scemode;
orig_data.cfra = scene->r.cfra;
orig_data.subframe = scene->r.subframe;
@@ -3315,10 +3323,12 @@ static ImBuf *seq_render_scene_strip(const SeqRenderData *context, Sequence *seq
context->scene->r.seq_prev_type = 3 /* == OB_SOLID */;
/* opengl offscreen render */
- BKE_scene_update_for_newframe(context->eval_ctx, context->bmain, scene, scene->lay);
+ context->eval_ctx->engine_type = RE_engines_find(scene->view_render.engine_id);
+ BKE_scene_graph_update_for_newframe(context->eval_ctx, depsgraph, context->bmain, scene, view_layer);
ibuf = sequencer_view3d_cb(
/* set for OpenGL render (NULL when scrubbing) */
- scene, camera, width, height, IB_rect, draw_flags, context->scene->r.seq_prev_type,
+ context->eval_ctx, scene, view_layer, camera, width, height, IB_rect,
+ draw_flags, context->scene->r.seq_prev_type,
scene->r.alphamode, context->gpu_samples, viewname,
context->gpu_fx, context->gpu_offscreen, err_out);
if (ibuf == NULL) {
@@ -3345,7 +3355,14 @@ static ImBuf *seq_render_scene_strip(const SeqRenderData *context, Sequence *seq
if (re == NULL)
re = RE_NewSceneRender(scene);
- BKE_scene_update_for_newframe(context->eval_ctx, context->bmain, scene, scene->lay);
+ /* NOTE: Without this tag rendering from command line fails.
+ * TODO(sergey): Need some proper solution with ported
+ * BKE_scene_set_background() or DEG_on_visible_change() ?
+ */
+ RE_SetDepsgraph(re, depsgraph);
+ DEG_graph_id_tag_update(context->bmain, depsgraph, &scene->id, 0);
+
+ BKE_scene_graph_update_for_newframe(context->eval_ctx, depsgraph, context->bmain, scene, view_layer);
RE_BlenderFrame(re, context->bmain, scene, NULL, camera, scene->lay, frame, false);
/* restore previous state after it was toggled on & off by RE_BlenderFrame */
@@ -3405,7 +3422,7 @@ finally:
scene->r.subframe = orig_data.subframe;
if (is_frame_update) {
- BKE_scene_update_for_newframe(context->eval_ctx, context->bmain, scene, scene->lay);
+ BKE_scene_graph_update_for_newframe(context->eval_ctx, depsgraph, context->bmain, scene, view_layer);
}
#ifdef DURIAN_CAMERA_SWITCH
diff --git a/source/blender/blenkernel/intern/shrinkwrap.c b/source/blender/blenkernel/intern/shrinkwrap.c
index 618f495dbf1..e91c3e43b83 100644
--- a/source/blender/blenkernel/intern/shrinkwrap.c
+++ b/source/blender/blenkernel/intern/shrinkwrap.c
@@ -57,6 +57,8 @@
#include "BLI_strict_flags.h"
+#include "DEG_depsgraph.h"
+
/* for timing... */
#if 0
# include "PIL_time_utildefines.h"
@@ -614,8 +616,9 @@ static void shrinkwrap_calc_nearest_surface_point(ShrinkwrapCalcData *calc)
}
/* Main shrinkwrap function */
-void shrinkwrapModifier_deform(ShrinkwrapModifierData *smd, Object *ob, DerivedMesh *dm,
- float (*vertexCos)[3], int numVerts, bool for_render)
+void shrinkwrapModifier_deform(
+ const EvaluationContext *eval_ctx, ShrinkwrapModifierData *smd, Object *ob, DerivedMesh *dm,
+ float (*vertexCos)[3], int numVerts, bool for_render)
{
DerivedMesh *ss_mesh = NULL;
@@ -670,7 +673,8 @@ void shrinkwrapModifier_deform(ShrinkwrapModifierData *smd, Object *ob, DerivedM
ssmd.subdivType = ME_CC_SUBSURF; /* catmull clark */
ssmd.levels = smd->subsurfLevels; /* levels */
- ss_mesh = subsurf_make_derived_from_derived(dm, &ssmd, NULL, (ob->mode & OB_MODE_EDIT) ? SUBSURF_IN_EDIT_MODE : 0);
+ ss_mesh = subsurf_make_derived_from_derived(
+ dm, &ssmd, NULL, (eval_ctx->object_mode & OB_MODE_EDIT) ? SUBSURF_IN_EDIT_MODE : 0);
if (ss_mesh) {
calc.vert = ss_mesh->getVertDataArray(ss_mesh, CD_MVERT);
diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c
index 3cf98b284b1..9f9818127bc 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -83,6 +83,8 @@
#include "BKE_smoke.h"
#include "BKE_texture.h"
+#include "DEG_depsgraph.h"
+
#include "RE_shader_ext.h"
#include "GPU_glew.h"
@@ -126,7 +128,7 @@ void smoke_initWaveletBlenderRNA(struct WTURBULENCE *UNUSED(wt), float *UNUSED(s
void smoke_initBlenderRNA(struct FLUID_3D *UNUSED(fluid), float *UNUSED(alpha), float *UNUSED(beta), float *UNUSED(dt_factor), float *UNUSED(vorticity),
int *UNUSED(border_colli), float *UNUSED(burning_rate), float *UNUSED(flame_smoke), float *UNUSED(flame_smoke_color),
float *UNUSED(flame_vorticity), float *UNUSED(flame_ignition_temp), float *UNUSED(flame_max_temp)) {}
-struct DerivedMesh *smokeModifier_do(SmokeModifierData *UNUSED(smd), Scene *UNUSED(scene), Object *UNUSED(ob), DerivedMesh *UNUSED(dm)) { return NULL; }
+struct DerivedMesh *smokeModifier_do(SmokeModifierData *UNUSED(smd), const struct EvaluationContext *UNUSED(eval_ctx), Scene *UNUSED(scene), Object *UNUSED(ob), DerivedMesh *UNUSED(dm)) { return NULL; }
float smoke_get_velocity_at(struct Object *UNUSED(ob), float UNUSED(position[3]), float UNUSED(velocity[3])) { return 0.0f; }
#endif /* WITH_SMOKE */
@@ -693,16 +695,16 @@ void smokeModifier_copy(struct SmokeModifierData *smd, struct SmokeModifierData
#ifdef WITH_SMOKE
// forward decleration
-static void smoke_calc_transparency(SmokeDomainSettings *sds, Scene *scene);
+static void smoke_calc_transparency(SmokeDomainSettings *sds, ViewLayer *view_layer);
static float calc_voxel_transp(float *result, float *input, int res[3], int *pixel, float *tRay, float correct);
-static int get_lamp(Scene *scene, float *light)
+static int get_lamp(ViewLayer *view_layer, float *light)
{
Base *base_tmp = NULL;
int found_lamp = 0;
// try to find a lamp, preferably local
- for (base_tmp = scene->base.first; base_tmp; base_tmp = base_tmp->next) {
+ for (base_tmp = FIRSTBASE(view_layer); base_tmp; base_tmp = base_tmp->next) {
if (base_tmp->object->type == OB_LAMP) {
Lamp *la = base_tmp->object->data;
@@ -2097,7 +2099,7 @@ BLI_INLINE void apply_inflow_fields(SmokeFlowSettings *sfs, float emission_value
}
}
-static void update_flowsfluids(Scene *scene, Object *ob, SmokeDomainSettings *sds, float dt)
+static void update_flowsfluids(const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, SmokeDomainSettings *sds, float dt)
{
Object **flowobjs = NULL;
EmissionMap *emaps = NULL;
@@ -2204,7 +2206,7 @@ static void update_flowsfluids(Scene *scene, Object *ob, SmokeDomainSettings *sd
else { /* MOD_SMOKE_FLOW_SOURCE_MESH */
/* update flow object frame */
BLI_mutex_lock(&object_update_lock);
- BKE_object_modifier_update_subframe(scene, collob, true, 5, BKE_scene_frame_get(scene), eModifierType_Smoke);
+ BKE_object_modifier_update_subframe(eval_ctx, scene, collob, true, 5, BKE_scene_frame_get(scene), eModifierType_Smoke);
BLI_mutex_unlock(&object_update_lock);
/* apply flow */
@@ -2516,12 +2518,12 @@ static void update_effectors_task_cb(
}
}
-static void update_effectors(Scene *scene, Object *ob, SmokeDomainSettings *sds, float UNUSED(dt))
+static void update_effectors(const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, SmokeDomainSettings *sds, float UNUSED(dt))
{
ListBase *effectors;
/* make sure smoke flow influence is 0.0f */
sds->effector_weights->weight[PFIELD_SMOKEFLOW] = 0.0f;
- effectors = pdInitEffectors(scene, ob, NULL, sds->effector_weights, true);
+ effectors = pdInitEffectors(eval_ctx, scene, ob, NULL, sds->effector_weights, true);
if (effectors) {
// precalculate wind forces
@@ -2551,7 +2553,7 @@ static void update_effectors(Scene *scene, Object *ob, SmokeDomainSettings *sds,
pdEndEffectors(&effectors);
}
-static void step(Scene *scene, Object *ob, SmokeModifierData *smd, DerivedMesh *domain_dm, float fps)
+static void step(const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, SmokeModifierData *smd, DerivedMesh *domain_dm, float fps)
{
SmokeDomainSettings *sds = smd->domain;
/* stability values copied from wturbulence.cpp */
@@ -2621,11 +2623,11 @@ static void step(Scene *scene, Object *ob, SmokeModifierData *smd, DerivedMesh *
for (substep = 0; substep < totalSubsteps; substep++)
{
// calc animated obstacle velocities
- update_flowsfluids(scene, ob, sds, dtSubdiv);
+ update_flowsfluids(eval_ctx, scene, ob, sds, dtSubdiv);
update_obstacles(scene, ob, sds, dtSubdiv, substep, totalSubsteps);
if (sds->total_cells > 1) {
- update_effectors(scene, ob, sds, dtSubdiv); // DG TODO? problem --> uses forces instead of velocity, need to check how they need to be changed with variable dt
+ update_effectors(eval_ctx, scene, ob, sds, dtSubdiv); // DG TODO? problem --> uses forces instead of velocity, need to check how they need to be changed with variable dt
smoke_step(sds->fluid, gravity, dtSubdiv);
}
}
@@ -2718,7 +2720,8 @@ static DerivedMesh *createDomainGeometry(SmokeDomainSettings *sds, Object *ob)
return result;
}
-static void smokeModifier_process(SmokeModifierData *smd, Scene *scene, Object *ob, DerivedMesh *dm)
+static void smokeModifier_process(
+ SmokeModifierData *smd, const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, DerivedMesh *dm)
{
if ((smd->type & MOD_SMOKE_TYPE_FLOW))
{
@@ -2839,11 +2842,11 @@ static void smokeModifier_process(SmokeModifierData *smd, Scene *scene, Object *
}
- step(scene, ob, smd, dm, scene->r.frs_sec / scene->r.frs_sec_base);
+ step(eval_ctx, scene, ob, smd, dm, scene->r.frs_sec / scene->r.frs_sec_base);
}
// create shadows before writing cache so they get stored
- smoke_calc_transparency(sds, scene);
+ smoke_calc_transparency(sds, eval_ctx->view_layer);
if (sds->wt && sds->total_cells > 1) {
smoke_turbulence_step(sds->wt, sds->fluid);
@@ -2860,13 +2863,14 @@ static void smokeModifier_process(SmokeModifierData *smd, Scene *scene, Object *
}
}
-struct DerivedMesh *smokeModifier_do(SmokeModifierData *smd, Scene *scene, Object *ob, DerivedMesh *dm)
+struct DerivedMesh *smokeModifier_do(
+ SmokeModifierData *smd, const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, DerivedMesh *dm)
{
/* lock so preview render does not read smoke data while it gets modified */
if ((smd->type & MOD_SMOKE_TYPE_DOMAIN) && smd->domain)
BLI_rw_mutex_lock(smd->domain->fluid_mutex, THREAD_LOCK_WRITE);
- smokeModifier_process(smd, scene, ob, dm);
+ smokeModifier_process(smd, eval_ctx, scene, ob, dm);
if ((smd->type & MOD_SMOKE_TYPE_DOMAIN) && smd->domain)
BLI_rw_mutex_unlock(smd->domain->fluid_mutex);
@@ -2981,7 +2985,7 @@ static void bresenham_linie_3D(int x1, int y1, int z1, int x2, int y2, int z2, f
cb(result, input, res, pixel, tRay, correct);
}
-static void smoke_calc_transparency(SmokeDomainSettings *sds, Scene *scene)
+static void smoke_calc_transparency(SmokeDomainSettings *sds, ViewLayer *view_layer)
{
float bv[6] = {0};
float light[3];
@@ -2989,7 +2993,7 @@ static void smoke_calc_transparency(SmokeDomainSettings *sds, Scene *scene)
float *density = smoke_get_density(sds->fluid);
float correct = -7.0f * sds->dx;
- if (!get_lamp(scene, light)) return;
+ if (!get_lamp(view_layer, light)) return;
/* convert light pos to sim cell space */
mul_m4_v3(sds->imat, light);
diff --git a/source/blender/blenkernel/intern/softbody.c b/source/blender/blenkernel/intern/softbody.c
index 563148992d9..3cfa8787f4b 100644
--- a/source/blender/blenkernel/intern/softbody.c
+++ b/source/blender/blenkernel/intern/softbody.c
@@ -74,6 +74,7 @@ variables on the UI for now
#include "BKE_curve.h"
#include "BKE_effect.h"
#include "BKE_global.h"
+#include "BKE_group.h"
#include "BKE_modifier.h"
#include "BKE_softbody.h"
#include "BKE_pointcache.h"
@@ -81,6 +82,8 @@ variables on the UI for now
#include "BKE_mesh.h"
#include "BKE_scene.h"
+#include "DEG_depsgraph.h"
+
#include "PIL_time.h"
/* callbacks for errors and interrupts and some goo */
@@ -512,35 +515,26 @@ static void ccd_build_deflector_hash_single(GHash *hash, Object *ob)
/**
* \note group overrides scene when not NULL.
*/
-static void ccd_build_deflector_hash(Scene *scene, Group *group, Object *vertexowner, GHash *hash)
+static void ccd_build_deflector_hash(ViewLayer *view_layer, Group *group, Object *vertexowner, GHash *hash)
{
Object *ob;
if (!hash) return;
+ /* Explicit collision group. */
if (group) {
- /* Explicit collision group */
- for (GroupObject *go = group->gobject.first; go; go = go->next) {
- ob = go->ob;
-
- if (ob == vertexowner || ob->type != OB_MESH)
- continue;
-
- ccd_build_deflector_hash_single(hash, ob);
- }
+ view_layer = group->view_layer;
}
- else {
- for (Base *base = scene->base.first; base; base = base->next) {
- /*Only proceed for mesh object in same layer */
- if (base->object->type == OB_MESH && (base->lay & vertexowner->lay)) {
- ob= base->object;
- if ((vertexowner) && (ob == vertexowner)) {
- /* if vertexowner is given we don't want to check collision with owner object */
- continue;
- }
- ccd_build_deflector_hash_single(hash, ob);
+ for (Base *base = FIRSTBASE(view_layer); base; base = base->next) {
+ /* Only proceed for mesh object in same layer. */
+ if (base->object->type == OB_MESH) {
+ ob = base->object;
+ if (ob == vertexowner) {
+ /* If vertexowner is given we don't want to check collision with owner object. */
+ continue;
}
+ ccd_build_deflector_hash_single(hash, ob);
}
}
}
@@ -558,37 +552,29 @@ static void ccd_update_deflector_hash_single(GHash *hash, Object *ob)
/**
* \note group overrides scene when not NULL.
*/
-static void ccd_update_deflector_hash(Scene *scene, Group *group, Object *vertexowner, GHash *hash)
+static void ccd_update_deflector_hash(ViewLayer *view_layer, Group *group, Object *vertexowner, GHash *hash)
{
Object *ob;
if ((!hash) || (!vertexowner)) return;
+ /* Explicit collision group. */
if (group) {
- /* Explicit collision group */
- for (GroupObject *go = group->gobject.first; go; go = go->next) {
- ob = go->ob;
+ view_layer = group->view_layer;
+ }
- if (ob == vertexowner || ob->type != OB_MESH)
+ for (Base *base = FIRSTBASE(view_layer); base; base = base->next) {
+ /* Only proceed for mesh object in same layer. */
+ if (base->object->type == OB_MESH) {
+ ob = base->object;
+ if (ob == vertexowner) {
+ /* If vertexowner is given we don't want to check collision with owner object. */
continue;
+ }
ccd_update_deflector_hash_single(hash, ob);
}
}
- else {
- for (Base *base = scene->base.first; base; base = base->next) {
- /*Only proceed for mesh object in same layer */
- if (base->object->type == OB_MESH && (base->lay & vertexowner->lay)) {
- ob= base->object;
- if (ob == vertexowner) {
- /* if vertexowner is given we don't want to check collision with owner object */
- continue;
- }
-
- ccd_update_deflector_hash_single(hash, ob);
- }
- }
- }
}
@@ -977,29 +963,21 @@ static void free_softbody_intern(SoftBody *sb)
/**
* \note group overrides scene when not NULL.
*/
-static bool are_there_deflectors(Scene *scene, Group *group, unsigned int layer)
+static bool are_there_deflectors(ViewLayer *view_layer)
{
- if (group) {
- for (GroupObject *go = group->gobject.first; go; go = go->next) {
- if (go->ob->pd && go->ob->pd->deflect)
+ for (Base *base = FIRSTBASE(view_layer); base; base = base->next) {
+ if (base->object->pd) {
+ if (base->object->pd->deflect)
return 1;
}
}
- else {
- for (Base *base = scene->base.first; base; base= base->next) {
- if ( (base->lay & layer) && base->object->pd) {
- if (base->object->pd->deflect)
- return 1;
- }
- }
- }
return 0;
}
-static int query_external_colliders(Scene *scene, Group *group, Object *me)
+static int query_external_colliders(ViewLayer *view_layer, Group *group)
{
- return(are_there_deflectors(scene, group, me->lay));
+ return(are_there_deflectors(group != NULL ? group->view_layer : view_layer));
}
/* --- dependency information functions*/
@@ -1544,12 +1522,12 @@ static void _scan_for_ext_spring_forces(Scene *scene, Object *ob, float timenow,
}
-static void scan_for_ext_spring_forces(Scene *scene, Object *ob, float timenow)
+static void scan_for_ext_spring_forces(const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, float timenow)
{
SoftBody *sb = ob->soft;
ListBase *do_effector = NULL;
- do_effector = pdInitEffectors(scene, ob, NULL, sb->effector_weights, true);
+ do_effector = pdInitEffectors(eval_ctx, scene, ob, NULL, sb->effector_weights, true);
_scan_for_ext_spring_forces(scene, ob, timenow, 0, sb->totspring, do_effector);
pdEndEffectors(&do_effector);
}
@@ -1561,7 +1539,7 @@ static void *exec_scan_for_ext_spring_forces(void *data)
return NULL;
}
-static void sb_sfesf_threads_run(Scene *scene, struct Object *ob, float timenow, int totsprings, int *UNUSED(ptr_to_break_func(void)))
+static void sb_sfesf_threads_run(const struct EvaluationContext *eval_ctx, Scene *scene, struct Object *ob, float timenow, int totsprings, int *UNUSED(ptr_to_break_func(void)))
{
ListBase *do_effector = NULL;
ListBase threads;
@@ -1569,7 +1547,7 @@ static void sb_sfesf_threads_run(Scene *scene, struct Object *ob, float timenow,
int i, totthread, left, dec;
int lowsprings =100; /* wild guess .. may increase with better thread management 'above' or even be UI option sb->spawn_cf_threads_nopts */
- do_effector= pdInitEffectors(scene, ob, NULL, ob->soft->effector_weights, true);
+ do_effector= pdInitEffectors(eval_ctx, scene, ob, NULL, ob->soft->effector_weights, true);
/* figure the number of threads while preventing pretty pointless threading overhead */
totthread= BKE_scene_num_threads(scene);
@@ -2227,7 +2205,7 @@ static void sb_cf_threads_run(Scene *scene, Object *ob, float forcetime, float t
MEM_freeN(sb_threads);
}
-static void softbody_calc_forcesEx(Scene *scene, Object *ob, float forcetime, float timenow)
+static void softbody_calc_forcesEx(const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, float forcetime, float timenow)
{
/* rule we never alter free variables :bp->vec bp->pos in here !
* this will ruin adaptive stepsize AKA heun! (BM)
@@ -2243,7 +2221,7 @@ static void softbody_calc_forcesEx(Scene *scene, Object *ob, float forcetime, fl
/* gravity = sb->grav * sb_grav_force_scale(ob); */ /* UNUSED */
/* check conditions for various options */
- do_deflector= query_external_colliders(scene, sb->collision_group, ob);
+ do_deflector= query_external_colliders(eval_ctx->view_layer, sb->collision_group);
/* do_selfcollision=((ob->softflag & OB_SB_EDGES) && (sb->bspring)&& (ob->softflag & OB_SB_SELF)); */ /* UNUSED */
do_springcollision=do_deflector && (ob->softflag & OB_SB_EDGES) &&(ob->softflag & OB_SB_EDGECOLL);
do_aero=((sb->aeroedge)&& (ob->softflag & OB_SB_EDGES));
@@ -2252,10 +2230,10 @@ static void softbody_calc_forcesEx(Scene *scene, Object *ob, float forcetime, fl
/* bproot= sb->bpoint; */ /* need this for proper spring addressing */ /* UNUSED */
if (do_springcollision || do_aero)
- sb_sfesf_threads_run(scene, ob, timenow, sb->totspring, NULL);
+ sb_sfesf_threads_run(eval_ctx, scene, ob, timenow, sb->totspring, NULL);
/* after spring scan because it uses Effoctors too */
- do_effector= pdInitEffectors(scene, ob, NULL, sb->effector_weights, true);
+ do_effector= pdInitEffectors(eval_ctx, scene, ob, NULL, sb->effector_weights, true);
if (do_deflector) {
float defforce[3];
@@ -2272,11 +2250,11 @@ static void softbody_calc_forcesEx(Scene *scene, Object *ob, float forcetime, fl
}
-static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, float timenow)
+static void softbody_calc_forces(const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, float forcetime, float timenow)
{
/* redirection to the new threaded Version */
if (!(G.debug_value & 0x10)) { // 16
- softbody_calc_forcesEx(scene, ob, forcetime, timenow);
+ softbody_calc_forcesEx(eval_ctx, scene, ob, forcetime, timenow);
return;
}
else {
@@ -2307,7 +2285,7 @@ static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, floa
}
/* check conditions for various options */
- do_deflector= query_external_colliders(scene, sb->collision_group, ob);
+ do_deflector= query_external_colliders(eval_ctx->view_layer, sb->collision_group);
do_selfcollision=((ob->softflag & OB_SB_EDGES) && (sb->bspring)&& (ob->softflag & OB_SB_SELF));
do_springcollision=do_deflector && (ob->softflag & OB_SB_EDGES) &&(ob->softflag & OB_SB_EDGECOLL);
do_aero=((sb->aeroedge)&& (ob->softflag & OB_SB_EDGES));
@@ -2315,9 +2293,9 @@ static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, floa
iks = 1.0f/(1.0f-sb->inspring)-1.0f ;/* inner spring constants function */
/* bproot= sb->bpoint; */ /* need this for proper spring addressing */ /* UNUSED */
- if (do_springcollision || do_aero) scan_for_ext_spring_forces(scene, ob, timenow);
+ if (do_springcollision || do_aero) scan_for_ext_spring_forces(eval_ctx, scene, ob, timenow);
/* after spring scan because it uses Effoctors too */
- do_effector= pdInitEffectors(scene, ob, NULL, ob->soft->effector_weights, true);
+ do_effector= pdInitEffectors(eval_ctx, scene, ob, NULL, ob->soft->effector_weights, true);
if (do_deflector) {
float defforce[3];
@@ -3504,7 +3482,7 @@ static void softbody_reset(Object *ob, SoftBody *sb, float (*vertexCos)[3], int
}
}
-static void softbody_step(Scene *scene, Object *ob, SoftBody *sb, float dtime)
+static void softbody_step(const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, SoftBody *sb, float dtime)
{
/* the simulator */
float forcetime;
@@ -3518,11 +3496,11 @@ static void softbody_step(Scene *scene, Object *ob, SoftBody *sb, float dtime)
*/
if (dtime < 0 || dtime > 10.5f) return;
- ccd_update_deflector_hash(scene, sb->collision_group, ob, sb->scratch->colliderhash);
+ ccd_update_deflector_hash(eval_ctx->view_layer, sb->collision_group, ob, sb->scratch->colliderhash);
if (sb->scratch->needstobuildcollider) {
- if (query_external_colliders(scene, sb->collision_group, ob)) {
- ccd_build_deflector_hash(scene, sb->collision_group, ob, sb->scratch->colliderhash);
+ if (query_external_colliders(eval_ctx->view_layer, sb->collision_group)) {
+ ccd_build_deflector_hash(eval_ctx->view_layer, sb->collision_group, ob, sb->scratch->colliderhash);
}
sb->scratch->needstobuildcollider=0;
}
@@ -3552,12 +3530,12 @@ static void softbody_step(Scene *scene, Object *ob, SoftBody *sb, float dtime)
sb->scratch->flag &= ~SBF_DOFUZZY;
/* do predictive euler step */
- softbody_calc_forces(scene, ob, forcetime, timedone/dtime);
+ softbody_calc_forces(eval_ctx, scene, ob, forcetime, timedone/dtime);
softbody_apply_forces(ob, forcetime, 1, NULL, mid_flags);
/* crop new slope values to do averaged slope step */
- softbody_calc_forces(scene, ob, forcetime, timedone/dtime);
+ softbody_calc_forces(eval_ctx, scene, ob, forcetime, timedone/dtime);
softbody_apply_forces(ob, forcetime, 2, &err, mid_flags);
softbody_apply_goalsnap(ob);
@@ -3638,7 +3616,7 @@ static void softbody_step(Scene *scene, Object *ob, SoftBody *sb, float dtime)
}
/* simulates one step. framenr is in frames */
-void sbObjectStep(Scene *scene, Object *ob, float cfra, float (*vertexCos)[3], int numVerts)
+void sbObjectStep(const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, float cfra, float (*vertexCos)[3], int numVerts)
{
SoftBody *sb= ob->soft;
PointCache *cache;
@@ -3646,7 +3624,6 @@ void sbObjectStep(Scene *scene, Object *ob, float cfra, float (*vertexCos)[3], i
float dtime, timescale;
int framedelta, framenr, startframe, endframe;
int cache_result;
-
cache= sb->pointcache;
framenr= (int)cfra;
@@ -3715,7 +3692,7 @@ void sbObjectStep(Scene *scene, Object *ob, float cfra, float (*vertexCos)[3], i
}
/* try to read from cache */
- bool can_simulate = (framenr == sb->last_frame+1) && !(cache->flag & PTCACHE_BAKED);
+ bool can_simulate = (framenr == sb->last_frame + 1) && !(cache->flag & PTCACHE_BAKED);
cache_result = BKE_ptcache_read(&pid, (float)framenr+scene->r.subframe, can_simulate);
@@ -3754,7 +3731,7 @@ void sbObjectStep(Scene *scene, Object *ob, float cfra, float (*vertexCos)[3], i
dtime = framedelta*timescale;
/* do simulation */
- softbody_step(scene, ob, sb, dtime);
+ softbody_step(eval_ctx, scene, ob, sb, dtime);
softbody_to_object(ob, vertexCos, numVerts, 0);
diff --git a/source/blender/blenkernel/intern/sound.c b/source/blender/blenkernel/intern/sound.c
index 45d1f969d64..747ffdafe8b 100644
--- a/source/blender/blenkernel/intern/sound.c
+++ b/source/blender/blenkernel/intern/sound.c
@@ -48,13 +48,11 @@
#include "DNA_speaker_types.h"
#ifdef WITH_AUDASPACE
-# include AUD_SOUND_H
-# include AUD_SEQUENCE_H
-# include AUD_HANDLE_H
-# include AUD_SPECIAL_H
-# ifdef WITH_SYSTEM_AUDASPACE
-# include "../../../intern/audaspace/intern/AUD_Set.h"
-# endif
+# include <AUD_Sound.h>
+# include <AUD_Sequence.h>
+# include <AUD_Handle.h>
+# include <AUD_Special.h>
+# include "../../../intern/audaspace/intern/AUD_Set.h"
#endif
#include "BKE_global.h"
@@ -228,7 +226,7 @@ void BKE_sound_init_once(void)
atexit(BKE_sound_exit_once);
}
-static AUD_Device *sound_device;
+static AUD_Device *sound_device = NULL;
void *BKE_sound_get_device(void)
{
@@ -237,6 +235,9 @@ void *BKE_sound_get_device(void)
void BKE_sound_init(struct Main *bmain)
{
+ /* Make sure no instance of the sound system is running, otherwise we get leaks. */
+ BKE_sound_exit();
+
AUD_DeviceSpecs specs;
int device, buffersize;
const char *device_name;
@@ -302,7 +303,6 @@ void BKE_sound_exit_once(void)
sound_device = NULL;
AUD_exitOnce();
-#ifdef WITH_SYSTEM_AUDASPACE
if (audio_device_names != NULL) {
int i;
for (i = 0; audio_device_names[i]; i++) {
@@ -311,7 +311,6 @@ void BKE_sound_exit_once(void)
free(audio_device_names);
audio_device_names = NULL;
}
-#endif
}
/* XXX unused currently */
@@ -807,13 +806,76 @@ void BKE_sound_read_waveform(bSound *sound, short *stop)
BLI_spin_unlock(sound->spinlock);
}
-void BKE_sound_update_scene(Main *bmain, struct Scene *scene)
+static void sound_update_base(Scene *scene, Base *base, void *new_set)
{
- Object *ob;
- Base *base;
+ Object *ob = base->object;
NlaTrack *track;
NlaStrip *strip;
Speaker *speaker;
+ float quat[4];
+
+ if ((ob->id.tag & LIB_TAG_DOIT) == 0) {
+ return;
+ }
+
+ ob->id.tag &= ~LIB_TAG_DOIT;
+
+ if ((ob->type != OB_SPEAKER) || !ob->adt) {
+ return;
+ }
+
+ for (track = ob->adt->nla_tracks.first; track; track = track->next) {
+ for (strip = track->strips.first; strip; strip = strip->next) {
+ if (strip->type != NLASTRIP_TYPE_SOUND) {
+ continue;
+ }
+ speaker = (Speaker *)ob->data;
+
+ if (AUD_removeSet(scene->speaker_handles, strip->speaker_handle)) {
+ if (speaker->sound) {
+ AUD_SequenceEntry_move(strip->speaker_handle, (double)strip->start / FPS, FLT_MAX, 0);
+ }
+ else {
+ AUD_Sequence_remove(scene->sound_scene, strip->speaker_handle);
+ strip->speaker_handle = NULL;
+ }
+ }
+ else {
+ if (speaker->sound) {
+ strip->speaker_handle = AUD_Sequence_add(scene->sound_scene,
+ speaker->sound->playback_handle,
+ (double)strip->start / FPS, FLT_MAX, 0);
+ AUD_SequenceEntry_setRelative(strip->speaker_handle, 0);
+ }
+ }
+
+ if (strip->speaker_handle) {
+ const bool mute = ((strip->flag & NLASTRIP_FLAG_MUTED) || (speaker->flag & SPK_MUTED));
+ AUD_addSet(new_set, strip->speaker_handle);
+ AUD_SequenceEntry_setVolumeMaximum(strip->speaker_handle, speaker->volume_max);
+ AUD_SequenceEntry_setVolumeMinimum(strip->speaker_handle, speaker->volume_min);
+ AUD_SequenceEntry_setDistanceMaximum(strip->speaker_handle, speaker->distance_max);
+ AUD_SequenceEntry_setDistanceReference(strip->speaker_handle, speaker->distance_reference);
+ AUD_SequenceEntry_setAttenuation(strip->speaker_handle, speaker->attenuation);
+ AUD_SequenceEntry_setConeAngleOuter(strip->speaker_handle, speaker->cone_angle_outer);
+ AUD_SequenceEntry_setConeAngleInner(strip->speaker_handle, speaker->cone_angle_inner);
+ AUD_SequenceEntry_setConeVolumeOuter(strip->speaker_handle, speaker->cone_volume_outer);
+
+ mat4_to_quat(quat, ob->obmat);
+ AUD_SequenceEntry_setAnimationData(strip->speaker_handle, AUD_AP_LOCATION, CFRA, ob->obmat[3], 1);
+ AUD_SequenceEntry_setAnimationData(strip->speaker_handle, AUD_AP_ORIENTATION, CFRA, quat, 1);
+ AUD_SequenceEntry_setAnimationData(strip->speaker_handle, AUD_AP_VOLUME, CFRA, &speaker->volume, 1);
+ AUD_SequenceEntry_setAnimationData(strip->speaker_handle, AUD_AP_PITCH, CFRA, &speaker->pitch, 1);
+ AUD_SequenceEntry_setSound(strip->speaker_handle, speaker->sound->playback_handle);
+ AUD_SequenceEntry_setMuted(strip->speaker_handle, mute);
+ }
+ }
+ }
+}
+
+void BKE_sound_update_scene(Main *bmain, Scene *scene)
+{
+ Base *base;
Scene *sce_it;
void *new_set = AUD_createSet();
@@ -822,59 +884,18 @@ void BKE_sound_update_scene(Main *bmain, struct Scene *scene)
/* cheap test to skip looping over all objects (no speakers is a common case) */
if (!BLI_listbase_is_empty(&bmain->speaker)) {
- for (SETLOOPER(scene, sce_it, base)) {
- ob = base->object;
- if ((ob->type != OB_SPEAKER) || !ob->adt) {
- continue;
- }
- for (track = ob->adt->nla_tracks.first; track; track = track->next) {
- for (strip = track->strips.first; strip; strip = strip->next) {
- if (strip->type != NLASTRIP_TYPE_SOUND) {
- continue;
- }
- speaker = (Speaker *)ob->data;
-
- if (AUD_removeSet(scene->speaker_handles, strip->speaker_handle)) {
- if (speaker->sound) {
- AUD_SequenceEntry_move(strip->speaker_handle, (double)strip->start / FPS, FLT_MAX, 0);
- }
- else {
- AUD_Sequence_remove(scene->sound_scene, strip->speaker_handle);
- strip->speaker_handle = NULL;
- }
- }
- else {
- if (speaker->sound) {
- strip->speaker_handle = AUD_Sequence_add(scene->sound_scene,
- speaker->sound->playback_handle,
- (double)strip->start / FPS, FLT_MAX, 0);
- AUD_SequenceEntry_setRelative(strip->speaker_handle, 0);
- }
- }
-
- if (strip->speaker_handle) {
- const bool mute = ((strip->flag & NLASTRIP_FLAG_MUTED) || (speaker->flag & SPK_MUTED));
- AUD_addSet(new_set, strip->speaker_handle);
- AUD_SequenceEntry_setVolumeMaximum(strip->speaker_handle, speaker->volume_max);
- AUD_SequenceEntry_setVolumeMinimum(strip->speaker_handle, speaker->volume_min);
- AUD_SequenceEntry_setDistanceMaximum(strip->speaker_handle, speaker->distance_max);
- AUD_SequenceEntry_setDistanceReference(strip->speaker_handle, speaker->distance_reference);
- AUD_SequenceEntry_setAttenuation(strip->speaker_handle, speaker->attenuation);
- AUD_SequenceEntry_setConeAngleOuter(strip->speaker_handle, speaker->cone_angle_outer);
- AUD_SequenceEntry_setConeAngleInner(strip->speaker_handle, speaker->cone_angle_inner);
- AUD_SequenceEntry_setConeVolumeOuter(strip->speaker_handle, speaker->cone_volume_outer);
-
- mat4_to_quat(quat, ob->obmat);
- AUD_SequenceEntry_setAnimationData(strip->speaker_handle, AUD_AP_LOCATION, CFRA, ob->obmat[3], 1);
- AUD_SequenceEntry_setAnimationData(strip->speaker_handle, AUD_AP_ORIENTATION, CFRA, quat, 1);
- AUD_SequenceEntry_setAnimationData(strip->speaker_handle, AUD_AP_VOLUME, CFRA, &speaker->volume, 1);
- AUD_SequenceEntry_setAnimationData(strip->speaker_handle, AUD_AP_PITCH, CFRA, &speaker->pitch, 1);
- AUD_SequenceEntry_setSound(strip->speaker_handle, speaker->sound->playback_handle);
- AUD_SequenceEntry_setMuted(strip->speaker_handle, mute);
- }
- }
+ BKE_main_id_tag_listbase(&bmain->object, LIB_TAG_DOIT, true);
+
+ for (ViewLayer *view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
+ for (base = view_layer->object_bases.first; base; base = base->next) {
+ sound_update_base(scene, base, new_set);
}
}
+
+ for (SETLOOPER_SET_ONLY(scene, sce_it, base)) {
+ sound_update_base(scene, base, new_set);
+ }
+
}
while ((handle = AUD_getSet(scene->speaker_handles))) {
@@ -907,28 +928,12 @@ float BKE_sound_get_length(bSound *sound)
char **BKE_sound_get_device_names(void)
{
if (audio_device_names == NULL) {
-#ifdef WITH_SYSTEM_AUDASPACE
audio_device_names = AUD_getDeviceNames();
-#else
- static const char *names[] = {
- "Null", "SDL", "OpenAL", "JACK", NULL
- };
- audio_device_names = (char **)names;
-#endif
}
return audio_device_names;
}
-bool BKE_sound_is_jack_supported(void)
-{
-#ifdef WITH_SYSTEM_AUDASPACE
- return 1;
-#else
- return (bool)AUD_isJackSupported();
-#endif
-}
-
#else /* WITH_AUDASPACE */
#include "BLI_utildefines.h"
@@ -975,5 +980,6 @@ void BKE_sound_set_scene_sound_pan(void *UNUSED(handle), float UNUSED(pan), char
void BKE_sound_set_scene_volume(struct Scene *UNUSED(scene), float UNUSED(volume)) {}
void BKE_sound_set_scene_sound_pitch(void *UNUSED(handle), float UNUSED(pitch), char UNUSED(animated)) {}
float BKE_sound_get_length(struct bSound *UNUSED(sound)) { return 0; }
-bool BKE_sound_is_jack_supported(void) { return false; }
+char **BKE_sound_get_device_names(void) { static char *names[1] = {NULL}; return names; }
+
#endif /* WITH_AUDASPACE */
diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c
index 8e46cabff02..10792b7d579 100644
--- a/source/blender/blenkernel/intern/subsurf_ccg.c
+++ b/source/blender/blenkernel/intern/subsurf_ccg.c
@@ -85,6 +85,8 @@
#include "CCGSubSurf.h"
+#include "DEG_depsgraph.h"
+
#ifdef WITH_OPENSUBDIV
# include "opensubdiv_capi.h"
#endif
@@ -1932,7 +1934,8 @@ static void ccgDM_glNormalFast(float *a, float *b, float *c, float *d)
no[1] = b_dZ * a_cX - b_dX * a_cZ;
no[2] = b_dX * a_cY - b_dY * a_cX;
- /* don't normalize, GL_NORMALIZE is enabled */
+ normalize_v3(no); /* we no longer rely on GL_NORMALIZE */
+
glNormal3fv(no);
}
@@ -3440,261 +3443,6 @@ static void ccgDM_drawMappedFacesMat(DerivedMesh *dm,
#undef PASSATTRIB
}
-static void ccgDM_drawFacesTex_common(DerivedMesh *dm,
- DMSetDrawOptionsTex drawParams,
- DMSetDrawOptionsMappedTex drawParamsMapped,
- DMCompareDrawOptions compareDrawOptions,
- void *userData, DMDrawFlag flag)
-{
- CCGDerivedMesh *ccgdm = (CCGDerivedMesh *) dm;
- CCGSubSurf *ss = ccgdm->ss;
- CCGKey key;
- int colType;
- const MLoopCol *mloopcol = NULL;
- MTexPoly *mtexpoly = DM_get_poly_data_layer(dm, CD_MTEXPOLY);
- DMFlagMat *faceFlags = ccgdm->faceFlags;
- DMDrawOption draw_option;
- int i, totpoly;
- bool flush;
- const bool use_tface = (flag & DM_DRAW_USE_ACTIVE_UV) != 0;
- const bool use_colors = (flag & DM_DRAW_USE_COLORS) != 0;
- unsigned int next_actualFace;
- unsigned int gridFaces = ccgSubSurf_getGridSize(ss) - 1;
- int mat_index;
- int tot_element, start_element, tot_drawn;
-
- if (use_colors) {
- colType = CD_TEXTURE_MLOOPCOL;
- mloopcol = dm->getLoopDataArray(dm, colType);
- if (!mloopcol) {
- colType = CD_PREVIEW_MLOOPCOL;
- mloopcol = dm->getLoopDataArray(dm, colType);
- }
- if (!mloopcol) {
- colType = CD_MLOOPCOL;
- mloopcol = dm->getLoopDataArray(dm, colType);
- }
- }
-
-#ifdef WITH_OPENSUBDIV
- if (ccgdm->useGpuBackend) {
- const int active_uv_layer = CustomData_get_active_layer_index(&dm->loopData, CD_MLOOPUV);
- if (UNLIKELY(ccgSubSurf_prepareGLMesh(ss, true, active_uv_layer) == false)) {
- return;
- }
- if (drawParams == NULL) {
- ccgSubSurf_drawGLMesh(ss, true, -1, -1);
- return;
- }
- const int level = ccgSubSurf_getSubdivisionLevels(ss);
- const int face_side = 1 << level;
- const int grid_side = 1 << (level - 1);
- const int face_patches = face_side * face_side;
- const int grid_patches = grid_side * grid_side;
- const int num_base_faces = ccgSubSurf_getNumGLMeshBaseFaces(ss);
- int current_patch = 0;
- int mat_nr = -1;
- int start_draw_patch = 0, num_draw_patches = 0;
- bool draw_smooth = false;
- for (i = 0; i < num_base_faces; ++i) {
- const int num_face_verts = ccgSubSurf_getNumGLMeshBaseFaceVerts(ss, i);
- const int num_patches = (num_face_verts == 4) ? face_patches
- : num_face_verts * grid_patches;
- if (faceFlags) {
- mat_nr = faceFlags[i].mat_nr;
- draw_smooth = (faceFlags[i].flag & ME_SMOOTH);
- }
- else {
- mat_nr = 0;
- draw_smooth = false;
- }
-
- if (drawParams != NULL) {
- MTexPoly *tp = (use_tface && mtexpoly) ? &mtexpoly[i] : NULL;
- draw_option = drawParams(tp, (mloopcol != NULL), mat_nr);
- }
- else {
- draw_option = (drawParamsMapped)
- ? drawParamsMapped(userData, i, mat_nr)
- : DM_DRAW_OPTION_NORMAL;
- }
-
- flush = (draw_option == DM_DRAW_OPTION_SKIP) || (i == num_base_faces - 1);
-
- const int next_face = min_ii(i + 1, num_base_faces - 1);
- if (!flush && compareDrawOptions) {
- flush |= compareDrawOptions(userData, i, next_face) == 0;
- }
- if (!flush && faceFlags) {
- bool new_draw_smooth = (faceFlags[next_face].flag & ME_SMOOTH);
- flush |= (new_draw_smooth != draw_smooth);
- }
-
- current_patch += num_patches;
-
- if (flush) {
- if (draw_option != DM_DRAW_OPTION_SKIP) {
- num_draw_patches += num_patches;
- }
- if (num_draw_patches != 0) {
- glShadeModel(draw_smooth ? GL_SMOOTH : GL_FLAT);
- ccgSubSurf_drawGLMesh(ss,
- true,
- start_draw_patch,
- num_draw_patches);
- }
- start_draw_patch = current_patch;
- num_draw_patches = 0;
- }
- else {
- num_draw_patches += num_patches;
- }
- }
- glShadeModel(GL_SMOOTH);
- return;
- }
-#endif
-
- CCG_key_top_level(&key, ss);
- ccgdm_pbvh_update(ccgdm);
-
- GPU_vertex_setup(dm);
- GPU_normal_setup(dm);
- GPU_triangle_setup(dm);
- if (flag & DM_DRAW_USE_TEXPAINT_UV)
- GPU_texpaint_uv_setup(dm);
- else
- GPU_uv_setup(dm);
- if (mloopcol) {
- GPU_color_setup(dm, colType);
- }
-
- next_actualFace = 0;
-
- /* lastFlag = 0; */ /* UNUSED */
- for (mat_index = 0; mat_index < dm->drawObject->totmaterial; mat_index++) {
- GPUBufferMaterial *bufmat = dm->drawObject->materials + mat_index;
- next_actualFace = bufmat->polys[0];
- totpoly = bufmat->totpolys;
-
- tot_element = 0;
- tot_drawn = 0;
- start_element = 0;
-
- for (i = 0; i < totpoly; i++) {
- int polyindex = bufmat->polys[i];
- CCGFace *f = ccgdm->faceMap[polyindex].face;
- int numVerts = ccgSubSurf_getFaceNumVerts(f);
- int index = ccgDM_getFaceMapIndex(ss, f);
- int orig_index = GET_INT_FROM_POINTER(ccgSubSurf_getFaceFaceHandle(f));
- int mat_nr;
- int facequads = numVerts * gridFaces * gridFaces;
- int actualFace = ccgdm->faceMap[polyindex].startFace;
-
- if (i != totpoly - 1) {
- polyindex = bufmat->polys[i + 1];
- next_actualFace = ccgdm->faceMap[polyindex].startFace;
- }
-
- if (faceFlags) {
- mat_nr = faceFlags[orig_index].mat_nr;
- }
- else {
- mat_nr = 0;
- }
-
- if (drawParams) {
- MTexPoly *tp = (use_tface && mtexpoly) ? &mtexpoly[actualFace] : NULL;
- draw_option = drawParams(tp, (mloopcol != NULL), mat_nr);
- }
- else if (index != ORIGINDEX_NONE)
- draw_option = (drawParamsMapped) ? drawParamsMapped(userData, index, mat_nr) : DM_DRAW_OPTION_NORMAL;
- else
- draw_option = DM_DRAW_OPTION_NORMAL;
-
- /* flush buffer if current triangle isn't drawable or it's last triangle */
- flush = (draw_option == DM_DRAW_OPTION_SKIP) || (i == totpoly - 1);
-
- if (!flush && compareDrawOptions) {
- /* also compare draw options and flush buffer if they're different
- * need for face selection highlight in edit mode */
- flush |= compareDrawOptions(userData, actualFace, next_actualFace) == 0;
- }
-
- tot_element += facequads * 6;
-
- if (flush) {
- if (draw_option != DM_DRAW_OPTION_SKIP)
- tot_drawn += facequads * 6;
-
- if (tot_drawn) {
- if (mloopcol && draw_option != DM_DRAW_OPTION_NO_MCOL)
- GPU_color_switch(1);
- else
- GPU_color_switch(0);
-
- GPU_buffer_draw_elements(dm->drawObject->triangles, GL_TRIANGLES, bufmat->start + start_element, tot_drawn);
- tot_drawn = 0;
- }
-
- start_element = tot_element;
- }
- else {
- tot_drawn += facequads * 6;
- }
- }
- }
-
-
- GPU_buffers_unbind();
-}
-
-static void ccgDM_drawFacesTex(DerivedMesh *dm,
- DMSetDrawOptionsTex setDrawOptions,
- DMCompareDrawOptions compareDrawOptions,
- void *userData, DMDrawFlag flag)
-{
- ccgDM_drawFacesTex_common(dm, setDrawOptions, NULL, compareDrawOptions, userData, flag);
-}
-
-static void ccgDM_drawMappedFacesTex(DerivedMesh *dm,
- DMSetDrawOptionsMappedTex setDrawOptions,
- DMCompareDrawOptions compareDrawOptions,
- void *userData, DMDrawFlag flag)
-{
- ccgDM_drawFacesTex_common(dm, NULL, setDrawOptions, compareDrawOptions, userData, flag);
-}
-
-/* same as cdDM_drawUVEdges */
-static void ccgDM_drawUVEdges(DerivedMesh *dm)
-{
- MPoly *mpoly = dm->getPolyArray(dm);
- int totpoly = dm->getNumPolys(dm);
- int prevstart = 0;
- bool prevdraw = true;
- int curpos = 0;
- int i;
-
- GPU_uvedge_setup(dm);
- for (i = 0; i < totpoly; i++, mpoly++) {
- const bool draw = (mpoly->flag & ME_HIDE) == 0;
-
- if (prevdraw != draw) {
- if (prevdraw && (curpos != prevstart)) {
- glDrawArrays(GL_LINES, prevstart, curpos - prevstart);
- }
- prevstart = curpos;
- }
-
- curpos += 2 * mpoly->totloop;
- prevdraw = draw;
- }
- if (prevdraw && (curpos != prevstart)) {
- glDrawArrays(GL_LINES, prevstart, curpos - prevstart);
- }
- GPU_buffers_unbind();
-}
-
static void ccgDM_drawMappedFaces(DerivedMesh *dm,
DMSetDrawOptions setDrawOptions,
DMSetMaterial setMaterial,
@@ -4042,12 +3790,14 @@ static void ccgDM_release(DerivedMesh *dm)
{
ccgdm->multires.mmd = NULL;
}
-
if (ccgdm->multires.mmd) {
- if (ccgdm->multires.modified_flags & MULTIRES_COORDS_MODIFIED)
- multires_modifier_update_mdisps(dm);
- if (ccgdm->multires.modified_flags & MULTIRES_HIDDEN_MODIFIED)
+ if (ccgdm->multires.modified_flags & MULTIRES_COORDS_MODIFIED) {
+ /* TODO/OBMODE, pass real mode? */
+ multires_modifier_update_mdisps(dm, OB_MODE_OBJECT);
+ }
+ if (ccgdm->multires.modified_flags & MULTIRES_HIDDEN_MODIFIED) {
multires_modifier_update_hidden(dm);
+ }
}
}
@@ -4441,7 +4191,8 @@ static int ccgDM_use_grid_pbvh(CCGDerivedMesh *ccgdm)
return 1;
}
-static struct PBVH *ccgDM_getPBVH(Object *ob, DerivedMesh *dm)
+static struct PBVH *ccgDM_getPBVH(
+ Object *ob, DerivedMesh *dm, eObjectMode object_mode)
{
CCGDerivedMesh *ccgdm = (CCGDerivedMesh *)dm;
CCGKey key;
@@ -4458,7 +4209,7 @@ static struct PBVH *ccgDM_getPBVH(Object *ob, DerivedMesh *dm)
return NULL;
bool grid_pbvh = ccgDM_use_grid_pbvh(ccgdm);
- if ((ob->mode & OB_MODE_SCULPT) == 0) {
+ if ((object_mode & OB_MODE_SCULPT) == 0) {
/* In vwpaint, we may use a grid_pbvh for multires/subsurf, under certain conditions.
* More complex cases break 'history' trail back to original vertices, in that case we fall back to
* deformed cage only (i.e. original deformed mesh). */
@@ -4691,13 +4442,10 @@ static void set_default_ccgdm_callbacks(CCGDerivedMesh *ccgdm)
ccgdm->dm.drawEdges = ccgDM_drawEdges;
ccgdm->dm.drawLooseEdges = ccgDM_drawLooseEdges;
ccgdm->dm.drawFacesSolid = ccgDM_drawFacesSolid;
- ccgdm->dm.drawFacesTex = ccgDM_drawFacesTex;
ccgdm->dm.drawFacesGLSL = ccgDM_drawFacesGLSL;
ccgdm->dm.drawMappedFaces = ccgDM_drawMappedFaces;
- ccgdm->dm.drawMappedFacesTex = ccgDM_drawMappedFacesTex;
ccgdm->dm.drawMappedFacesGLSL = ccgDM_drawMappedFacesGLSL;
ccgdm->dm.drawMappedFacesMat = ccgDM_drawMappedFacesMat;
- ccgdm->dm.drawUVEdges = ccgDM_drawUVEdges;
ccgdm->dm.drawMappedEdgesInterp = ccgDM_drawMappedEdgesInterp;
ccgdm->dm.drawMappedEdges = ccgDM_drawMappedEdges;
@@ -5155,8 +4903,7 @@ static bool subsurf_use_gpu_backend(SubsurfFlags flags)
*/
return
(flags & SUBSURF_USE_GPU_BACKEND) != 0 &&
- (U.opensubdiv_compute_type != USER_OPENSUBDIV_COMPUTE_NONE) &&
- (openSubdiv_supportGPUDisplay());
+ (U.opensubdiv_compute_type != USER_OPENSUBDIV_COMPUTE_NONE);
#else
(void)flags;
return false;
diff --git a/source/blender/blenkernel/intern/text.c b/source/blender/blenkernel/intern/text.c
index 7c4aa81ee46..4ae9818f891 100644
--- a/source/blender/blenkernel/intern/text.c
+++ b/source/blender/blenkernel/intern/text.c
@@ -58,7 +58,6 @@
#include "DNA_node_types.h"
#include "DNA_material_types.h"
-#include "BKE_depsgraph.h"
#include "BKE_global.h"
#include "BKE_library.h"
#include "BKE_main.h"
diff --git a/source/blender/blenkernel/intern/tracking.c b/source/blender/blenkernel/intern/tracking.c
index f9d34534a45..ebd4c04e8ce 100644
--- a/source/blender/blenkernel/intern/tracking.c
+++ b/source/blender/blenkernel/intern/tracking.c
@@ -61,6 +61,7 @@
#include "BKE_movieclip.h"
#include "BKE_object.h"
#include "BKE_scene.h"
+#include "BKE_layer.h"
#include "IMB_imbuf_types.h"
#include "IMB_imbuf.h"
@@ -400,7 +401,7 @@ void BKE_tracking_get_camera_object_matrix(Scene *scene, Object *ob, float mat[4
if (scene->camera)
ob = scene->camera;
else
- ob = BKE_scene_camera_find(scene);
+ ob = BKE_view_layer_camera_find(BKE_view_layer_from_scene_get(scene));
}
if (ob)
diff --git a/source/blender/blenkernel/intern/workspace.c b/source/blender/blenkernel/intern/workspace.c
new file mode 100644
index 00000000000..dcd4183210d
--- /dev/null
+++ b/source/blender/blenkernel/intern/workspace.c
@@ -0,0 +1,520 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/blenkernel/intern/workspace.c
+ * \ingroup bke
+ */
+
+/* allow accessing private members of DNA_workspace_types.h */
+#define DNA_PRIVATE_WORKSPACE_ALLOW
+
+#include <stdlib.h>
+
+#include "BLI_utildefines.h"
+#include "BLI_string.h"
+#include "BLI_string_utf8.h"
+#include "BLI_string_utils.h"
+#include "BLI_listbase.h"
+
+#include "BKE_global.h"
+#include "BKE_library.h"
+#include "BKE_main.h"
+#include "BKE_scene.h"
+#include "BKE_screen.h"
+#include "BKE_workspace.h"
+
+#include "DNA_object_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_screen_types.h"
+#include "DNA_workspace_types.h"
+
+#include "DEG_depsgraph.h"
+
+#include "MEM_guardedalloc.h"
+
+
+/* -------------------------------------------------------------------- */
+/* Internal utils */
+
+static void workspace_layout_name_set(
+ WorkSpace *workspace, WorkSpaceLayout *layout, const char *new_name)
+{
+ BLI_strncpy(layout->name, new_name, sizeof(layout->name));
+ BLI_uniquename(&workspace->layouts, layout, "Layout", '.', offsetof(WorkSpaceLayout, name), sizeof(layout->name));
+}
+
+/**
+ * This should only be used directly when it is to be expected that there isn't
+ * a layout within \a workspace that wraps \a screen. Usually - especially outside
+ * of BKE_workspace - #BKE_workspace_layout_find should be used!
+ */
+static WorkSpaceLayout *workspace_layout_find_exec(
+ const WorkSpace *workspace, const bScreen *screen)
+{
+ return BLI_findptr(&workspace->layouts, screen, offsetof(WorkSpaceLayout, screen));
+}
+
+static void workspace_relation_add(
+ ListBase *relation_list, void *parent, void *data)
+{
+ WorkSpaceDataRelation *relation = MEM_callocN(sizeof(*relation), __func__);
+ relation->parent = parent;
+ relation->value = data;
+ /* add to head, if we switch back to it soon we find it faster. */
+ BLI_addhead(relation_list, relation);
+}
+static void workspace_relation_remove(
+ ListBase *relation_list, WorkSpaceDataRelation *relation)
+{
+ BLI_remlink(relation_list, relation);
+ MEM_freeN(relation);
+}
+
+static void workspace_relation_ensure_updated(
+ ListBase *relation_list, void *parent, void *data)
+{
+ WorkSpaceDataRelation *relation = BLI_findptr(relation_list, parent, offsetof(WorkSpaceDataRelation, parent));
+ if (relation != NULL) {
+ relation->value = data;
+ /* reinsert at the head of the list, so that more commonly used relations are found faster. */
+ BLI_remlink(relation_list, relation);
+ BLI_addhead(relation_list, relation);
+ }
+ else {
+ /* no matching relation found, add new one */
+ workspace_relation_add(relation_list, parent, data);
+ }
+}
+
+static void *workspace_relation_get_data_matching_parent(
+ const ListBase *relation_list, const void *parent)
+{
+ WorkSpaceDataRelation *relation = BLI_findptr(relation_list, parent, offsetof(WorkSpaceDataRelation, parent));
+ if (relation != NULL) {
+ return relation->value;
+ }
+ else {
+ return NULL;
+ }
+}
+
+static void workspace_relation_remove_from_value(
+ ListBase *relation_list, const void *value)
+{
+ for (WorkSpaceDataRelation *relation = relation_list->first, *relation_next; relation; relation = relation_next) {
+ relation_next = relation->next;
+
+ if (relation->value == value) {
+ workspace_relation_remove(relation_list, relation);
+ }
+ }
+}
+
+/**
+ * Checks if \a screen is already used within any workspace. A screen should never be assigned to multiple
+ * WorkSpaceLayouts, but that should be ensured outside of the BKE_workspace module and without such checks.
+ * Hence, this should only be used as assert check before assigining a screen to a workspace.
+ */
+#ifndef NDEBUG
+static bool workspaces_is_screen_used
+#else
+static bool UNUSED_FUNCTION(workspaces_is_screen_used)
+#endif
+ (const Main *bmain, bScreen *screen)
+{
+ for (WorkSpace *workspace = bmain->workspaces.first; workspace; workspace = workspace->id.next) {
+ if (workspace_layout_find_exec(workspace, screen)) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+/* -------------------------------------------------------------------- */
+/* Create, delete, init */
+
+WorkSpace *BKE_workspace_add(Main *bmain, const char *name)
+{
+ WorkSpace *new_workspace = BKE_libblock_alloc(bmain, ID_WS, name, 0);
+ return new_workspace;
+}
+
+/**
+ * The function that actually frees the workspace data (not workspace itself). It shouldn't be called
+ * directly, instead #BKE_workspace_remove should be, which calls this through #BKE_libblock_free then.
+ *
+ * Should something like a bke_internal.h be added, this should go there!
+ */
+void BKE_workspace_free(WorkSpace *workspace)
+{
+ BKE_workspace_relations_free(&workspace->hook_layout_relations);
+ BKE_workspace_relations_free(&workspace->scene_viewlayer_relations);
+
+ BLI_freelistN(&workspace->layouts);
+ BLI_freelistN(&workspace->transform_orientations);
+
+ BKE_viewrender_free(&workspace->view_render);
+}
+
+/**
+ * Remove \a workspace by freeing itself and its data. This is a higher-level wrapper that
+ * calls #BKE_workspace_free (through #BKE_libblock_free) to free the workspace data, and frees
+ * other data-blocks owned by \a workspace and its layouts (currently that is screens only).
+ *
+ * Always use this to remove (and free) workspaces. Don't free non-ID workspace members here.
+ */
+void BKE_workspace_remove(Main *bmain, WorkSpace *workspace)
+{
+ for (WorkSpaceLayout *layout = workspace->layouts.first, *layout_next; layout; layout = layout_next) {
+ layout_next = layout->next;
+ BKE_workspace_layout_remove(bmain, workspace, layout);
+ }
+ BKE_libblock_free(bmain, workspace);
+}
+
+WorkSpaceInstanceHook *BKE_workspace_instance_hook_create(const Main *bmain)
+{
+ WorkSpaceInstanceHook *hook = MEM_callocN(sizeof(WorkSpaceInstanceHook), __func__);
+
+ /* set an active screen-layout for each possible window/workspace combination */
+ for (WorkSpace *workspace = bmain->workspaces.first; workspace; workspace = workspace->id.next) {
+ BKE_workspace_hook_layout_for_workspace_set(hook, workspace, workspace->layouts.first);
+ }
+
+ return hook;
+}
+void BKE_workspace_instance_hook_free(const Main *bmain, WorkSpaceInstanceHook *hook)
+{
+ /* workspaces should never be freed before wm (during which we call this function) */
+ BLI_assert(!BLI_listbase_is_empty(&bmain->workspaces));
+
+ /* Free relations for this hook */
+ for (WorkSpace *workspace = bmain->workspaces.first; workspace; workspace = workspace->id.next) {
+ for (WorkSpaceDataRelation *relation = workspace->hook_layout_relations.first, *relation_next;
+ relation;
+ relation = relation_next)
+ {
+ relation_next = relation->next;
+ if (relation->parent == hook) {
+ workspace_relation_remove(&workspace->hook_layout_relations, relation);
+ }
+ }
+ }
+
+ MEM_freeN(hook);
+}
+
+/**
+ * Add a new layout to \a workspace for \a screen.
+ */
+WorkSpaceLayout *BKE_workspace_layout_add(
+ WorkSpace *workspace,
+ bScreen *screen,
+ const char *name)
+{
+ WorkSpaceLayout *layout = MEM_callocN(sizeof(*layout), __func__);
+
+ BLI_assert(!workspaces_is_screen_used(G.main, screen));
+ layout->screen = screen;
+ workspace_layout_name_set(workspace, layout, name);
+ BLI_addtail(&workspace->layouts, layout);
+
+ return layout;
+}
+
+void BKE_workspace_layout_remove(
+ Main *bmain,
+ WorkSpace *workspace, WorkSpaceLayout *layout)
+{
+ BKE_libblock_free(bmain, BKE_workspace_layout_screen_get(layout));
+ BLI_freelinkN(&workspace->layouts, layout);
+}
+
+void BKE_workspace_relations_free(
+ ListBase *relation_list)
+{
+ for (WorkSpaceDataRelation *relation = relation_list->first, *relation_next; relation; relation = relation_next) {
+ relation_next = relation->next;
+ workspace_relation_remove(relation_list, relation);
+ }
+}
+
+
+/* -------------------------------------------------------------------- */
+/* General Utils */
+
+void BKE_workspace_view_layer_remove_references(
+ const Main *bmain,
+ const ViewLayer *view_layer)
+{
+ for (WorkSpace *workspace = bmain->workspaces.first; workspace; workspace = workspace->id.next) {
+ workspace_relation_remove_from_value(&workspace->scene_viewlayer_relations, view_layer);
+ }
+}
+
+void BKE_workspace_transform_orientation_remove(
+ WorkSpace *workspace, TransformOrientation *orientation)
+{
+ for (WorkSpaceLayout *layout = workspace->layouts.first; layout; layout = layout->next) {
+ BKE_screen_transform_orientation_remove(BKE_workspace_layout_screen_get(layout), workspace, orientation);
+ }
+
+ BLI_freelinkN(&workspace->transform_orientations, orientation);
+}
+
+TransformOrientation *BKE_workspace_transform_orientation_find(
+ const WorkSpace *workspace, const int index)
+{
+ return BLI_findlink(&workspace->transform_orientations, index);
+}
+
+/**
+ * \return the index that \a orientation has within \a workspace's transform-orientation list or -1 if not found.
+ */
+int BKE_workspace_transform_orientation_get_index(
+ const WorkSpace *workspace, const TransformOrientation *orientation)
+{
+ return BLI_findindex(&workspace->transform_orientations, orientation);
+}
+
+WorkSpaceLayout *BKE_workspace_layout_find(
+ const WorkSpace *workspace, const bScreen *screen)
+{
+ WorkSpaceLayout *layout = workspace_layout_find_exec(workspace, screen);
+ if (layout) {
+ return layout;
+ }
+
+ printf("%s: Couldn't find layout in this workspace: '%s' screen: '%s'. "
+ "This should not happen!\n",
+ __func__, workspace->id.name + 2, screen->id.name + 2);
+
+ return NULL;
+}
+
+/**
+ * Find the layout for \a screen without knowing which workspace to look in.
+ * Can also be used to find the workspace that contains \a screen.
+ *
+ * \param r_workspace: Optionally return the workspace that contains the looked up layout (if found).
+ */
+WorkSpaceLayout *BKE_workspace_layout_find_global(
+ const Main *bmain, const bScreen *screen,
+ WorkSpace **r_workspace)
+{
+ WorkSpaceLayout *layout;
+
+ if (r_workspace) {
+ *r_workspace = NULL;
+ }
+
+ for (WorkSpace *workspace = bmain->workspaces.first; workspace; workspace = workspace->id.next) {
+ if ((layout = workspace_layout_find_exec(workspace, screen))) {
+ if (r_workspace) {
+ *r_workspace = workspace;
+ }
+
+ return layout;
+ }
+ }
+
+ return NULL;
+}
+
+/**
+ * Circular workspace layout iterator.
+ *
+ * \param callback: Custom function which gets executed for each layout. Can return false to stop iterating.
+ * \param arg: Custom data passed to each \a callback call.
+ *
+ * \return the layout at which \a callback returned false.
+ */
+WorkSpaceLayout *BKE_workspace_layout_iter_circular(
+ const WorkSpace *workspace, WorkSpaceLayout *start,
+ bool (*callback)(const WorkSpaceLayout *layout, void *arg),
+ void *arg, const bool iter_backward)
+{
+ WorkSpaceLayout *iter_layout;
+
+ if (iter_backward) {
+ BLI_LISTBASE_CIRCULAR_BACKWARD_BEGIN(&workspace->layouts, iter_layout, start)
+ {
+ if (!callback(iter_layout, arg)) {
+ return iter_layout;
+ }
+ }
+ BLI_LISTBASE_CIRCULAR_BACKWARD_END(&workspace->layouts, iter_layout, start);
+ }
+ else {
+ BLI_LISTBASE_CIRCULAR_FORWARD_BEGIN(&workspace->layouts, iter_layout, start)
+ {
+ if (!callback(iter_layout, arg)) {
+ return iter_layout;
+ }
+ }
+ BLI_LISTBASE_CIRCULAR_FORWARD_END(&workspace->layouts, iter_layout, start)
+ }
+
+ return NULL;
+}
+
+
+/* -------------------------------------------------------------------- */
+/* Getters/Setters */
+
+WorkSpace *BKE_workspace_active_get(WorkSpaceInstanceHook *hook)
+{
+ return hook->active;
+}
+void BKE_workspace_active_set(WorkSpaceInstanceHook *hook, WorkSpace *workspace)
+{
+ hook->active = workspace;
+ if (workspace) {
+ WorkSpaceLayout *layout = workspace_relation_get_data_matching_parent(&workspace->hook_layout_relations, hook);
+ if (layout) {
+ hook->act_layout = layout;
+ }
+ }
+}
+
+WorkSpaceLayout *BKE_workspace_active_layout_get(const WorkSpaceInstanceHook *hook)
+{
+ return hook->act_layout;
+}
+void BKE_workspace_active_layout_set(WorkSpaceInstanceHook *hook, WorkSpaceLayout *layout)
+{
+ hook->act_layout = layout;
+}
+
+bScreen *BKE_workspace_active_screen_get(const WorkSpaceInstanceHook *hook)
+{
+ return hook->act_layout->screen;
+}
+void BKE_workspace_active_screen_set(WorkSpaceInstanceHook *hook, WorkSpace *workspace, bScreen *screen)
+{
+ /* we need to find the WorkspaceLayout that wraps this screen */
+ WorkSpaceLayout *layout = BKE_workspace_layout_find(hook->active, screen);
+ BKE_workspace_hook_layout_for_workspace_set(hook, workspace, layout);
+}
+
+Base *BKE_workspace_active_base_get(const WorkSpace *workspace, const Scene *scene)
+{
+ ViewLayer *view_layer = BKE_workspace_view_layer_get(workspace, scene);
+ return view_layer->basact;
+}
+
+ListBase *BKE_workspace_transform_orientations_get(WorkSpace *workspace)
+{
+ return &workspace->transform_orientations;
+}
+
+ViewLayer *BKE_workspace_view_layer_get(const WorkSpace *workspace, const Scene *scene)
+{
+ return workspace_relation_get_data_matching_parent(&workspace->scene_viewlayer_relations, scene);
+}
+void BKE_workspace_view_layer_set(WorkSpace *workspace, ViewLayer *layer, Scene *scene)
+{
+ workspace_relation_ensure_updated(&workspace->scene_viewlayer_relations, scene, layer);
+}
+
+ListBase *BKE_workspace_layouts_get(WorkSpace *workspace)
+{
+ return &workspace->layouts;
+}
+
+
+const char *BKE_workspace_layout_name_get(const WorkSpaceLayout *layout)
+{
+ return layout->name;
+}
+void BKE_workspace_layout_name_set(WorkSpace *workspace, WorkSpaceLayout *layout, const char *new_name)
+{
+ workspace_layout_name_set(workspace, layout, new_name);
+}
+
+bScreen *BKE_workspace_layout_screen_get(const WorkSpaceLayout *layout)
+{
+ return layout->screen;
+}
+void BKE_workspace_layout_screen_set(WorkSpaceLayout *layout, bScreen *screen)
+{
+ layout->screen = screen;
+}
+
+WorkSpaceLayout *BKE_workspace_hook_layout_for_workspace_get(
+ const WorkSpaceInstanceHook *hook, const WorkSpace *workspace)
+{
+ return workspace_relation_get_data_matching_parent(&workspace->hook_layout_relations, hook);
+}
+void BKE_workspace_hook_layout_for_workspace_set(
+ WorkSpaceInstanceHook *hook, WorkSpace *workspace, WorkSpaceLayout *layout)
+{
+ hook->act_layout = layout;
+ workspace_relation_ensure_updated(&workspace->hook_layout_relations, hook, layout);
+}
+
+/**
+ * Get the render engine of a workspace, to be used in the viewport.
+ */
+ViewRender *BKE_workspace_view_render_get(WorkSpace *workspace)
+{
+ return &workspace->view_render;
+}
+
+/* Flags */
+bool BKE_workspace_use_scene_settings_get(const WorkSpace *workspace)
+{
+ return (workspace->flags & WORKSPACE_USE_SCENE_SETTINGS) != 0;
+}
+
+void BKE_workspace_use_scene_settings_set(WorkSpace *workspace, bool value)
+{
+ if (value) {
+ workspace->flags |= WORKSPACE_USE_SCENE_SETTINGS;
+ }
+ else {
+ workspace->flags &= ~WORKSPACE_USE_SCENE_SETTINGS;
+ }
+}
+
+/* Update / evaluate */
+
+void BKE_workspace_update_tagged(struct EvaluationContext *eval_ctx,
+ Main *bmain,
+ WorkSpace *workspace,
+ Scene *scene)
+{
+ ViewLayer *view_layer = BKE_workspace_view_layer_get(workspace, scene);
+ struct Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene,
+ view_layer,
+ true);
+ BKE_scene_graph_update_tagged(eval_ctx, depsgraph, bmain, scene, view_layer);
+}
+
+void BKE_workspace_update_object_mode(
+ struct EvaluationContext *eval_ctx,
+ WorkSpace *workspace)
+{
+ /* TODO(campbell): Investigate how this should work exactly,
+ * for now without this 'bmain->eval_ctx' is never set. */
+
+ eval_ctx->object_mode = workspace->object_mode;
+} \ No newline at end of file
diff --git a/source/blender/blenkernel/intern/world.c b/source/blender/blenkernel/intern/world.c
index 10fcfaa444f..5da8dc563e2 100644
--- a/source/blender/blenkernel/intern/world.c
+++ b/source/blender/blenkernel/intern/world.c
@@ -193,3 +193,14 @@ void BKE_world_make_local(Main *bmain, World *wrld, const bool lib_local)
{
BKE_id_make_local_generic(bmain, &wrld->id, true, lib_local);
}
+
+void BKE_world_eval(const struct EvaluationContext *UNUSED(eval_ctx), World *world)
+{
+ if (G.debug & G_DEBUG_DEPSGRAPH) {
+ printf("%s on %s (%p)\n", __func__, world->id.name, world);
+ }
+ if (!BLI_listbase_is_empty(&world->gpumaterial)) {
+ world->update_flag = 1;
+ GPU_material_uniform_buffer_tag_dirty(&world->gpumaterial);
+ }
+}
diff --git a/source/blender/blenkernel/intern/writeffmpeg.c b/source/blender/blenkernel/intern/writeffmpeg.c
index 5415fbb8ae1..f745a840cea 100644
--- a/source/blender/blenkernel/intern/writeffmpeg.c
+++ b/source/blender/blenkernel/intern/writeffmpeg.c
@@ -45,8 +45,8 @@
#include "BLI_blenlib.h"
#ifdef WITH_AUDASPACE
-# include AUD_DEVICE_H
-# include AUD_SPECIAL_H
+# include <AUD_Device.h>
+# include <AUD_Special.h>
#endif
#include "BLI_utildefines.h"
diff --git a/source/blender/blenlib/BLI_callbacks.h b/source/blender/blenlib/BLI_callbacks.h
index fdffbeb4c8d..be53d1f603b 100644
--- a/source/blender/blenlib/BLI_callbacks.h
+++ b/source/blender/blenlib/BLI_callbacks.h
@@ -49,8 +49,6 @@ typedef enum {
BLI_CB_EVT_LOAD_POST,
BLI_CB_EVT_SAVE_PRE,
BLI_CB_EVT_SAVE_POST,
- BLI_CB_EVT_SCENE_UPDATE_PRE,
- BLI_CB_EVT_SCENE_UPDATE_POST,
BLI_CB_EVT_GAME_PRE,
BLI_CB_EVT_GAME_POST,
BLI_CB_EVT_VERSION_UPDATE,
diff --git a/source/blender/blenlib/BLI_iterator.h b/source/blender/blenlib/BLI_iterator.h
new file mode 100644
index 00000000000..49a3cea58bc
--- /dev/null
+++ b/source/blender/blenlib/BLI_iterator.h
@@ -0,0 +1,62 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Dalai Felinto
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef __BLI_ITERATOR_H__
+#define __BLI_ITERATOR_H__
+
+/** \file BLI_iterator.h
+ * \ingroup bli
+ */
+
+typedef struct BLI_Iterator {
+ void *current; /* current pointer we iterate over */
+ void *data; /* stored data required for this iterator */
+ bool skip;
+ bool valid;
+} BLI_Iterator;
+
+typedef void (*IteratorCb)(BLI_Iterator *iter);
+typedef void (*IteratorBeginCb)(BLI_Iterator *iter, void *data_in);
+
+#define ITER_BEGIN(callback_begin, callback_next, callback_end, _data_in, _type, _instance) \
+{ \
+ _type _instance; \
+ IteratorCb callback_end_func = callback_end; \
+ BLI_Iterator iter_macro; \
+ iter_macro.skip = false; \
+ iter_macro.valid = true; \
+ for (callback_begin(&iter_macro, (_data_in)); \
+ iter_macro.valid; \
+ callback_next(&iter_macro)) \
+ { \
+ if (iter_macro.skip) { \
+ iter_macro.skip = false; \
+ continue; \
+ } \
+ _instance = (_type ) iter_macro.current;
+
+#define ITER_END \
+ } \
+ callback_end_func(&iter_macro); \
+}
+
+#endif /* __BLI_ITERATOR_H__ */
diff --git a/source/blender/blenlib/BLI_math_matrix.h b/source/blender/blenlib/BLI_math_matrix.h
index 173ef6861e6..a6f8f9a54e9 100644
--- a/source/blender/blenlib/BLI_math_matrix.h
+++ b/source/blender/blenlib/BLI_math_matrix.h
@@ -46,81 +46,112 @@ void unit_m2(float R[2][2]);
void unit_m3(float R[3][3]);
void unit_m4(float R[4][4]);
-void copy_m2_m2(float R[2][2], float A[2][2]);
-void copy_m3_m3(float R[3][3], float A[3][3]);
-void copy_m4_m4(float R[4][4], float A[4][4]);
-void copy_m3_m4(float R[3][3], float A[4][4]);
-void copy_m4_m3(float R[4][4], float A[3][3]);
+void copy_m2_m2(float R[2][2], const float A[2][2]);
+void copy_m3_m3(float R[3][3], const float A[3][3]);
+void copy_m4_m4(float R[4][4], const float A[4][4]);
+void copy_m3_m4(float R[3][3], const float A[4][4]);
+void copy_m4_m3(float R[4][4], const float A[3][3]);
/* double->float */
-void copy_m3_m3d(float R[3][3], double A[3][3]);
+void copy_m3_m3d(float R[3][3], const double A[3][3]);
void swap_m3m3(float A[3][3], float B[3][3]);
void swap_m4m4(float A[4][4], float B[4][4]);
/******************************** Arithmetic *********************************/
-void add_m3_m3m3(float R[3][3], float A[3][3], float B[3][3]);
-void add_m4_m4m4(float R[4][4], float A[4][4], float B[4][4]);
+void add_m3_m3m3(float R[3][3], const float A[3][3], const float B[3][3]);
+void add_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4]);
-void sub_m3_m3m3(float R[3][3], float A[3][3], float B[3][3]);
-void sub_m4_m4m4(float R[4][4], float A[4][4], float B[4][4]);
+void sub_m3_m3m3(float R[3][3], const float A[3][3], const float B[3][3]);
+void sub_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4]);
-void mul_m3_m3m3(float R[3][3], float A[3][3], float B[3][3]);
-void mul_m4_m3m4(float R[4][4], float A[3][3], float B[4][4]);
-void mul_m4_m4m3(float R[4][4], float A[4][4], float B[3][3]);
-void mul_m4_m4m4(float R[4][4], float A[4][4], float B[4][4]);
-void mul_m3_m3m4(float R[3][3], float A[4][4], float B[3][3]);
+void mul_m3_m3m3(float R[3][3], const float A[3][3], const float B[3][3]);
+void mul_m4_m3m4(float R[4][4], const float A[3][3], const float B[4][4]);
+void mul_m4_m4m3(float R[4][4], const float A[4][4], const float B[3][3]);
+void mul_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4]);
+void mul_m3_m3m4(float R[3][3], const float A[4][4], const float B[3][3]);
+
+/* special matrix multiplies
+ * uniq: R <-- AB, R is neither A nor B
+ * pre: R <-- AR
+ * post: R <-- RB
+ */
+void mul_m3_m3m3_uniq(float R[3][3], const float A[3][3], const float B[3][3]);
+void mul_m3_m3_pre(float R[3][3], const float A[3][3]);
+void mul_m3_m3_post(float R[3][3], const float B[3][3]);
+void mul_m4_m4m4_uniq(float R[4][4], const float A[4][4], const float B[4][4]);
+void mul_m4_m4_pre(float R[4][4], const float A[4][4]);
+void mul_m4_m4_post(float R[4][4], const float B[4][4]);
/* mul_m3_series */
-void _va_mul_m3_series_3(float R[3][3], float M1[3][3], float M2[3][3]) ATTR_NONNULL();
-void _va_mul_m3_series_4(float R[3][3], float M1[3][3], float M2[3][3], float M3[3][3]) ATTR_NONNULL();
-void _va_mul_m3_series_5(float R[3][3], float M1[3][3], float M2[3][3], float M3[3][3], float M4[3][3]) ATTR_NONNULL();
-void _va_mul_m3_series_6(float R[3][3], float M1[3][3], float M2[3][3], float M3[3][3], float M4[3][3],
- float M5[3][3]) ATTR_NONNULL();
-void _va_mul_m3_series_7(float R[3][3], float M1[3][3], float M2[3][3], float M3[3][3], float M4[3][3],
- float M5[3][3], float M6[3][3]) ATTR_NONNULL();
-void _va_mul_m3_series_8(float R[3][3], float M1[3][3], float M2[3][3], float M3[3][3], float M4[3][3],
- float M5[3][3], float M6[3][3], float M7[3][3]) ATTR_NONNULL();
-void _va_mul_m3_series_9(float R[3][3], float M1[3][3], float M2[3][3], float M3[3][3], float M4[3][3],
- float M5[3][3], float M6[3][3], float M7[3][3], float M8[3][3]) ATTR_NONNULL();
+void _va_mul_m3_series_3(
+ float R[3][3], const float M1[3][3], const float M2[3][3]) ATTR_NONNULL();
+void _va_mul_m3_series_4(
+ float R[3][3], const float M1[3][3], const float M2[3][3], const float M3[3][3]) ATTR_NONNULL();
+void _va_mul_m3_series_5(
+ float R[3][3], const float M1[3][3], const float M2[3][3], const float M3[3][3],
+ const float M4[3][3]) ATTR_NONNULL();
+void _va_mul_m3_series_6(
+ float R[3][3], const float M1[3][3], const float M2[3][3], const float M3[3][3],
+ const float M4[3][3], const float M5[3][3]) ATTR_NONNULL();
+void _va_mul_m3_series_7(
+ float R[3][3], const float M1[3][3], const float M2[3][3], const float M3[3][3],
+ const float M4[3][3], const float M5[3][3], const float M6[3][3]) ATTR_NONNULL();
+void _va_mul_m3_series_8(
+ float R[3][3], const float M1[3][3], const float M2[3][3], const float M3[3][3],
+ const float M4[3][3], const float M5[3][3], const float M6[3][3], const float M7[3][3]) ATTR_NONNULL();
+void _va_mul_m3_series_9(
+ float R[3][3], const float M1[3][3], const float M2[3][3], const float M3[3][3],
+ const float M4[3][3], const float M5[3][3], const float M6[3][3], const float M7[3][3],
+ const float M8[3][3]) ATTR_NONNULL();
/* mul_m4_series */
-void _va_mul_m4_series_3(float R[4][4], float M1[4][4], float M2[4][4]) ATTR_NONNULL();
-void _va_mul_m4_series_4(float R[4][4], float M1[4][4], float M2[4][4], float M3[4][4]) ATTR_NONNULL();
-void _va_mul_m4_series_5(float R[4][4], float M1[4][4], float M2[4][4], float M3[4][4], float M4[4][4]) ATTR_NONNULL();
-void _va_mul_m4_series_6(float R[4][4], float M1[4][4], float M2[4][4], float M3[4][4], float M4[4][4],
- float M5[4][4]) ATTR_NONNULL();
-void _va_mul_m4_series_7(float R[4][4], float M1[4][4], float M2[4][4], float M3[4][4], float M4[4][4],
- float M5[4][4], float M6[4][4]) ATTR_NONNULL();
-void _va_mul_m4_series_8(float R[4][4], float M1[4][4], float M2[4][4], float M3[4][4], float M4[4][4],
- float M5[4][4], float M6[4][4], float M7[4][4]) ATTR_NONNULL();
-void _va_mul_m4_series_9(float R[4][4], float M1[4][4], float M2[4][4], float M3[4][4], float M4[4][4],
- float M5[4][4], float M6[4][4], float M7[4][4], float M8[4][4]) ATTR_NONNULL();
+void _va_mul_m4_series_3(
+ float R[4][4], const float M1[4][4], const float M2[4][4]) ATTR_NONNULL();
+void _va_mul_m4_series_4(
+ float R[4][4], const float M1[4][4], const float M2[4][4], const float M3[4][4]) ATTR_NONNULL();
+void _va_mul_m4_series_5(
+ float R[4][4], const float M1[4][4], const float M2[4][4], const float M3[4][4],
+ const float M4[4][4]) ATTR_NONNULL();
+void _va_mul_m4_series_6(
+ float R[4][4], const float M1[4][4], const float M2[4][4], const float M3[4][4],
+ const float M4[4][4], const float M5[4][4]) ATTR_NONNULL();
+void _va_mul_m4_series_7(
+ float R[4][4], const float M1[4][4], const float M2[4][4], const float M3[4][4],
+ const float M4[4][4], const float M5[4][4], const float M6[4][4]) ATTR_NONNULL();
+void _va_mul_m4_series_8(
+ float R[4][4], const float M1[4][4], const float M2[4][4], const float M3[4][4],
+ const float M4[4][4], const float M5[4][4], const float M6[4][4], const float M7[4][4]) ATTR_NONNULL();
+void _va_mul_m4_series_9(
+ float R[4][4], const float M1[4][4], const float M2[4][4], const float M3[4][4],
+ const float M4[4][4], const float M5[4][4], const float M6[4][4], const float M7[4][4],
+ const float M8[4][4]) ATTR_NONNULL();
#define mul_m3_series(...) VA_NARGS_CALL_OVERLOAD(_va_mul_m3_series_, __VA_ARGS__)
#define mul_m4_series(...) VA_NARGS_CALL_OVERLOAD(_va_mul_m4_series_, __VA_ARGS__)
-void mul_m4_v3(float M[4][4], float r[3]);
-void mul_v3_m4v3(float r[3], float M[4][4], const float v[3]);
-void mul_v2_m4v3(float r[2], float M[4][4], const float v[3]);
-void mul_v2_m2v2(float r[2], float M[2][2], const float v[2]);
-void mul_m2v2(float M[2][2], float v[2]);
-void mul_mat3_m4_v3(float M[4][4], float r[3]);
-void mul_v3_mat3_m4v3(float r[3], float M[4][4], const float v[3]);
-void mul_m4_v4(float M[4][4], float r[4]);
-void mul_v4_m4v4(float r[4], float M[4][4], const float v[4]);
-void mul_project_m4_v3(float M[4][4], float vec[3]);
-void mul_v3_project_m4_v3(float r[3], float mat[4][4], const float vec[3]);
-void mul_v2_project_m4_v3(float r[2], float M[4][4], const float vec[3]);
-
-void mul_m3_v2(float m[3][3], float r[2]);
-void mul_v2_m3v2(float r[2], float m[3][3], float v[2]);
-void mul_m3_v3(float M[3][3], float r[3]);
-void mul_v3_m3v3(float r[3], float M[3][3], const float a[3]);
-void mul_v2_m3v3(float r[2], float M[3][3], const float a[3]);
-void mul_transposed_m3_v3(float M[3][3], float r[3]);
-void mul_transposed_mat3_m4_v3(float M[4][4], float r[3]);
-void mul_m3_v3_double(float M[3][3], double r[3]);
+void mul_m4_v3(const float M[4][4], float r[3]);
+void mul_v3_m4v3(float r[3], const float M[4][4], const float v[3]);
+void mul_v2_m4v3(float r[2], const float M[4][4], const float v[3]);
+void mul_v2_m2v2(float r[2], const float M[2][2], const float v[2]);
+void mul_m2v2(const float M[2][2], float v[2]);
+void mul_mat3_m4_v3(const float M[4][4], float r[3]);
+void mul_v3_mat3_m4v3(float r[3], const float M[4][4], const float v[3]);
+void mul_m4_v4(const float M[4][4], float r[4]);
+void mul_v4_m4v4(float r[4], const float M[4][4], const float v[4]);
+void mul_v4_m4v3(float r[4], const float M[4][4], const float v[3]); /* v has implicit w = 1.0f */
+void mul_project_m4_v3(const float M[4][4], float vec[3]);
+void mul_v3_project_m4_v3(float r[3], const float mat[4][4], const float vec[3]);
+void mul_v2_project_m4_v3(float r[2], const float M[4][4], const float vec[3]);
+
+void mul_m3_v2(const float m[3][3], float r[2]);
+void mul_v2_m3v2(float r[2], const float m[3][3], const float v[2]);
+void mul_m3_v3(const float M[3][3], float r[3]);
+void mul_v3_m3v3(float r[3], const float M[3][3], const float a[3]);
+void mul_v2_m3v3(float r[2], const float M[3][3], const float a[3]);
+void mul_transposed_m3_v3(const float M[3][3], float r[3]);
+void mul_transposed_mat3_m4_v3(const float M[4][4], float r[3]);
+void mul_m3_v3_double(const float M[3][3], double r[3]);
void mul_m3_fl(float R[3][3], float f);
void mul_m4_fl(float R[4][4], float f);
@@ -131,103 +162,103 @@ void negate_mat3_m4(float R[4][4]);
void negate_m4(float R[4][4]);
bool invert_m3_ex(float m[3][3], const float epsilon);
-bool invert_m3_m3_ex(float m1[3][3], float m2[3][3], const float epsilon);
+bool invert_m3_m3_ex(float m1[3][3], const float m2[3][3], const float epsilon);
bool invert_m3(float R[3][3]);
-bool invert_m3_m3(float R[3][3], float A[3][3]);
+bool invert_m3_m3(float R[3][3], const float A[3][3]);
bool invert_m4(float R[4][4]);
-bool invert_m4_m4(float R[4][4], float A[4][4]);
+bool invert_m4_m4(float R[4][4], const float A[4][4]);
/* double arithmetic (mixed float/double) */
-void mul_m4_v4d(float M[4][4], double r[4]);
-void mul_v4d_m4v4d(double r[4], float M[4][4], double v[4]);
+void mul_m4_v4d(const float M[4][4], double r[4]);
+void mul_v4d_m4v4d(double r[4], const float M[4][4], const double v[4]);
/* double matrix functions (no mixing types) */
-void mul_v3_m3v3_db(double r[3], double M[3][3], const double a[3]);
-void mul_m3_v3_db(double M[3][3], double r[3]);
+void mul_v3_m3v3_db(double r[3], const double M[3][3], const double a[3]);
+void mul_m3_v3_db(const double M[3][3], double r[3]);
/****************************** Linear Algebra *******************************/
void transpose_m3(float R[3][3]);
-void transpose_m3_m3(float R[3][3], float A[3][3]);
-void transpose_m3_m4(float R[3][3], float A[4][4]);
+void transpose_m3_m3(float R[3][3], const float A[3][3]);
+void transpose_m3_m4(float R[3][3], const float A[4][4]);
void transpose_m4(float R[4][4]);
-void transpose_m4_m4(float R[4][4], float A[4][4]);
+void transpose_m4_m4(float R[4][4], const float A[4][4]);
-int compare_m4m4(float mat1[4][4], float mat2[4][4], float limit);
+int compare_m4m4(const float mat1[4][4], const float mat2[4][4], float limit);
void normalize_m3_ex(float R[3][3], float r_scale[3]) ATTR_NONNULL();
void normalize_m3(float R[3][3]) ATTR_NONNULL();
-void normalize_m3_m3_ex(float R[3][3], float A[3][3], float r_scale[3]) ATTR_NONNULL();
-void normalize_m3_m3(float R[3][3], float A[3][3]) ATTR_NONNULL();
+void normalize_m3_m3_ex(float R[3][3], const float A[3][3], float r_scale[3]) ATTR_NONNULL();
+void normalize_m3_m3(float R[3][3], const float A[3][3]) ATTR_NONNULL();
void normalize_m4_ex(float R[4][4], float r_scale[3]) ATTR_NONNULL();
void normalize_m4(float R[4][4]) ATTR_NONNULL();
-void normalize_m4_m4_ex(float R[4][4], float A[4][4], float r_scale[3]) ATTR_NONNULL();
-void normalize_m4_m4(float R[4][4], float A[4][4]) ATTR_NONNULL();
+void normalize_m4_m4_ex(float R[4][4], const float A[4][4], float r_scale[3]) ATTR_NONNULL();
+void normalize_m4_m4(float R[4][4], const float A[4][4]) ATTR_NONNULL();
void orthogonalize_m3(float R[3][3], int axis);
void orthogonalize_m4(float R[4][4], int axis);
-bool is_orthogonal_m3(float mat[3][3]);
-bool is_orthogonal_m4(float mat[4][4]);
-bool is_orthonormal_m3(float mat[3][3]);
-bool is_orthonormal_m4(float mat[4][4]);
+bool is_orthogonal_m3(const float mat[3][3]);
+bool is_orthogonal_m4(const float mat[4][4]);
+bool is_orthonormal_m3(const float mat[3][3]);
+bool is_orthonormal_m4(const float mat[4][4]);
-bool is_uniform_scaled_m3(float mat[3][3]);
-bool is_uniform_scaled_m4(float m[4][4]);
+bool is_uniform_scaled_m3(const float mat[3][3]);
+bool is_uniform_scaled_m4(const float m[4][4]);
/* Note: 'adjoint' here means the adjugate (adjunct, "classical adjoint") matrix!
* Nowadays 'adjoint' usually refers to the conjugate transpose,
* which for real-valued matrices is simply the transpose.
*/
-void adjoint_m2_m2(float R[2][2], float A[2][2]);
-void adjoint_m3_m3(float R[3][3], float A[3][3]);
-void adjoint_m4_m4(float R[4][4], float A[4][4]);
+void adjoint_m2_m2(float R[2][2], const float A[2][2]);
+void adjoint_m3_m3(float R[3][3], const float A[3][3]);
+void adjoint_m4_m4(float R[4][4], const float A[4][4]);
float determinant_m2(float a, float b,
float c, float d);
float determinant_m3(float a, float b, float c,
float d, float e, float f,
float g, float h, float i);
-float determinant_m3_array(float m[3][3]);
-float determinant_m4(float A[4][4]);
+float determinant_m3_array(const float m[3][3]);
+float determinant_m4(const float A[4][4]);
#define PSEUDOINVERSE_EPSILON 1e-8f
void svd_m4(float U[4][4], float s[4], float V[4][4], float A[4][4]);
-void pseudoinverse_m4_m4(float Ainv[4][4], float A[4][4], float epsilon);
-void pseudoinverse_m3_m3(float Ainv[3][3], float A[3][3], float epsilon);
+void pseudoinverse_m4_m4(float Ainv[4][4], const float A[4][4], float epsilon);
+void pseudoinverse_m3_m3(float Ainv[3][3], const float A[3][3], float epsilon);
-bool has_zero_axis_m4(float matrix[4][4]);
+bool has_zero_axis_m4(const float matrix[4][4]);
-void invert_m4_m4_safe(float Ainv[4][4], float A[4][4]);
+void invert_m4_m4_safe(float Ainv[4][4], const float A[4][4]);
/****************************** Transformations ******************************/
void scale_m3_fl(float R[3][3], float scale);
void scale_m4_fl(float R[4][4], float scale);
-float mat3_to_scale(float M[3][3]);
-float mat4_to_scale(float M[4][4]);
-float mat4_to_xy_scale(float M[4][4]);
+float mat3_to_scale(const float M[3][3]);
+float mat4_to_scale(const float M[4][4]);
+float mat4_to_xy_scale(const float M[4][4]);
void size_to_mat3(float R[3][3], const float size[3]);
void size_to_mat4(float R[4][4], const float size[3]);
-void mat3_to_size(float r[3], float M[3][3]);
-void mat4_to_size(float r[3], float M[4][4]);
+void mat3_to_size(float r[3], const float M[3][3]);
+void mat4_to_size(float r[3], const float M[4][4]);
void translate_m4(float mat[4][4], float tx, float ty, float tz);
void rotate_m4(float mat[4][4], const char axis, const float angle);
void transform_pivot_set_m4(float mat[4][4], const float pivot[3]);
-void mat3_to_rot_size(float rot[3][3], float size[3], float mat3[3][3]);
-void mat4_to_loc_rot_size(float loc[3], float rot[3][3], float size[3], float wmat[4][4]);
-void mat4_to_loc_quat(float loc[3], float quat[4], float wmat[4][4]);
-void mat4_decompose(float loc[3], float quat[4], float size[3], float wmat[4][4]);
+void mat3_to_rot_size(float rot[3][3], float size[3], const float mat3[3][3]);
+void mat4_to_loc_rot_size(float loc[3], float rot[3][3], float size[3], const float wmat[4][4]);
+void mat4_to_loc_quat(float loc[3], float quat[4], const float wmat[4][4]);
+void mat4_decompose(float loc[3], float quat[4], float size[3], const float wmat[4][4]);
-void mat3_polar_decompose(float mat3[3][3], float r_U[3][3], float r_P[3][3]);
+void mat3_polar_decompose(const float mat3[3][3], float r_U[3][3], float r_P[3][3]);
void loc_eul_size_to_mat4(float R[4][4],
const float loc[3], const float eul[3], const float size[3]);
@@ -238,20 +269,20 @@ void loc_quat_size_to_mat4(float R[4][4],
void loc_axisangle_size_to_mat4(float R[4][4],
const float loc[3], const float axis[4], const float angle, const float size[3]);
-void blend_m3_m3m3(float R[3][3], float A[3][3], float B[3][3], const float t);
-void blend_m4_m4m4(float R[4][4], float A[4][4], float B[4][4], const float t);
+void blend_m3_m3m3(float R[3][3], const float A[3][3], const float B[3][3], const float t);
+void blend_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4], const float t);
-void interp_m3_m3m3(float R[3][3], float A[3][3], float B[3][3], const float t);
-void interp_m4_m4m4(float R[4][4], float A[4][4], float B[4][4], const float t);
+void interp_m3_m3m3(float R[3][3], const float A[3][3], const float B[3][3], const float t);
+void interp_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4], const float t);
-bool is_negative_m3(float mat[3][3]);
-bool is_negative_m4(float mat[4][4]);
+bool is_negative_m3(const float mat[3][3]);
+bool is_negative_m4(const float mat[4][4]);
-bool is_zero_m3(float mat[3][3]);
-bool is_zero_m4(float mat[4][4]);
+bool is_zero_m3(const float mat[3][3]);
+bool is_zero_m4(const float mat[4][4]);
-bool equals_m3m3(float mat1[3][3], float mat2[3][3]);
-bool equals_m4m4(float mat1[4][4], float mat2[4][4]);
+bool equals_m3m3(const float mat1[3][3], const float mat2[3][3]);
+bool equals_m4m4(const float mat1[4][4], const float mat2[4][4]);
/* SpaceTransform helper */
typedef struct SpaceTransform {
@@ -260,8 +291,8 @@ typedef struct SpaceTransform {
} SpaceTransform;
-void BLI_space_transform_from_matrices(struct SpaceTransform *data, float local[4][4], float target[4][4]);
-void BLI_space_transform_global_from_matrices(struct SpaceTransform *data, float local[4][4], float target[4][4]);
+void BLI_space_transform_from_matrices(struct SpaceTransform *data, const float local[4][4], const float target[4][4]);
+void BLI_space_transform_global_from_matrices(struct SpaceTransform *data, const float local[4][4], const float target[4][4]);
void BLI_space_transform_apply(const struct SpaceTransform *data, float co[3]);
void BLI_space_transform_invert(const struct SpaceTransform *data, float co[3]);
void BLI_space_transform_apply_normal(const struct SpaceTransform *data, float no[3]);
@@ -272,8 +303,8 @@ void BLI_space_transform_invert_normal(const struct SpaceTransform *data, float
/*********************************** Other ***********************************/
-void print_m3(const char *str, float M[3][3]);
-void print_m4(const char *str, float M[4][4]);
+void print_m3(const char *str, const float M[3][3]);
+void print_m4(const char *str, const float M[4][4]);
#define print_m3_id(M) print_m3(STRINGIFY(M), M)
#define print_m4_id(M) print_m4(STRINGIFY(M), M)
diff --git a/source/blender/blenlib/BLI_math_vector.h b/source/blender/blenlib/BLI_math_vector.h
index 3f603311530..e4e0bf22de0 100644
--- a/source/blender/blenlib/BLI_math_vector.h
+++ b/source/blender/blenlib/BLI_math_vector.h
@@ -123,7 +123,7 @@ MINLINE void mul_v4_fl(float r[4], float f);
MINLINE void mul_v4_v4fl(float r[3], const float a[3], float f);
MINLINE void mul_v2_v2_cw(float r[2], const float mat[2], const float vec[2]);
MINLINE void mul_v2_v2_ccw(float r[2], const float mat[2], const float vec[2]);
-MINLINE float mul_project_m4_v3_zfac(float mat[4][4], const float co[3]) ATTR_WARN_UNUSED_RESULT;
+MINLINE float mul_project_m4_v3_zfac(const float mat[4][4], const float co[3]) ATTR_WARN_UNUSED_RESULT;
MINLINE float dot_m3_v3_row_x(float M[3][3], const float a[3]) ATTR_WARN_UNUSED_RESULT;
MINLINE float dot_m3_v3_row_y(float M[3][3], const float a[3]) ATTR_WARN_UNUSED_RESULT;
MINLINE float dot_m3_v3_row_z(float M[3][3], const float a[3]) ATTR_WARN_UNUSED_RESULT;
diff --git a/source/blender/blenlib/BLI_memiter.h b/source/blender/blenlib/BLI_memiter.h
new file mode 100644
index 00000000000..b16f1ae8c43
--- /dev/null
+++ b/source/blender/blenlib/BLI_memiter.h
@@ -0,0 +1,73 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef __BLI_MEMITER_H__
+#define __BLI_MEMITER_H__
+
+/** \file BLI_memiter.h
+ * \ingroup bli
+ */
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include "BLI_sys_types.h"
+#include "BLI_compiler_attrs.h"
+#include "BLI_compiler_compat.h"
+
+/* 512kb, good default for small elems. */
+#define BLI_MEMITER_DEFAULT_SIZE (1 << 19)
+
+struct BLI_memiter;
+struct BLI_memiter_chunk;
+
+typedef struct BLI_memiter BLI_memiter;
+
+/* warning, ATTR_MALLOC flag on BLI_memiter_alloc causes crash, see: D2756 */
+BLI_memiter *BLI_memiter_create(unsigned int chunk_size) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT;
+void *BLI_memiter_alloc(BLI_memiter *mi, unsigned int size) ATTR_RETURNS_NONNULL ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1);
+void BLI_memiter_alloc_from(BLI_memiter *mi, uint elem_size, const void *data_from) ATTR_NONNULL(1, 3);
+void *BLI_memiter_calloc(BLI_memiter *mi, unsigned int size) ATTR_RETURNS_NONNULL ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1);
+void BLI_memiter_destroy(BLI_memiter *mi) ATTR_NONNULL(1);
+void BLI_memiter_clear(BLI_memiter *mi) ATTR_NONNULL(1);
+unsigned int BLI_memiter_count(const BLI_memiter *mi) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1);
+
+/* utils */
+void *BLI_memiter_elem_first(BLI_memiter *mi);
+void *BLI_memiter_elem_first_size(BLI_memiter *mi, unsigned int *r_size);
+
+/* private structure */
+typedef struct BLI_memiter_handle {
+ struct BLI_memiter_elem *elem;
+ uint elem_left;
+} BLI_memiter_handle;
+
+void BLI_memiter_iter_init(BLI_memiter *mi, BLI_memiter_handle *iter) ATTR_NONNULL();
+bool BLI_memiter_iter_done(const BLI_memiter_handle *iter) ATTR_NONNULL();
+void *BLI_memiter_iter_step(BLI_memiter_handle *iter) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
+void *BLI_memiter_iter_step_size(BLI_memiter_handle *iter, uint *r_size) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __BLI_MEMITER_H__ */
diff --git a/source/blender/blenlib/CMakeLists.txt b/source/blender/blenlib/CMakeLists.txt
index 61a1241cd8f..9e7b4ed8b6f 100644
--- a/source/blender/blenlib/CMakeLists.txt
+++ b/source/blender/blenlib/CMakeLists.txt
@@ -50,6 +50,7 @@ set(SRC
intern/BLI_kdtree.c
intern/BLI_linklist.c
intern/BLI_memarena.c
+ intern/BLI_memiter.c
intern/BLI_mempool.c
intern/DLRB_tree.c
intern/array_store.c
@@ -156,6 +157,7 @@ set(SRC
BLI_hash_md5.h
BLI_hash_mm2a.h
BLI_heap.h
+ BLI_iterator.h
BLI_jitter.h
BLI_kdopbvh.h
BLI_kdtree.h
@@ -178,6 +180,7 @@ set(SRC
BLI_math_statistics.h
BLI_math_vector.h
BLI_memarena.h
+ BLI_memiter.h
BLI_memory_utils.h
BLI_mempool.h
BLI_noise.h
diff --git a/source/blender/blenlib/intern/BLI_memiter.c b/source/blender/blenlib/intern/BLI_memiter.c
new file mode 100644
index 00000000000..9c5f026f836
--- /dev/null
+++ b/source/blender/blenlib/intern/BLI_memiter.c
@@ -0,0 +1,357 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/blenlib/intern/BLI_memiter.c
+ * \ingroup bli
+ *
+ * Simple, fast memory allocator for allocating many small elements of different sizes
+ * in fixed size memory chunks,
+ * although allocations bigger than the chunk size are supported.
+ * They will reduce the efficiency of this data-structure.
+ * Elements are pointer aligned.
+ *
+ * Supports:
+ *
+ * - Allocation of mixed sizes.
+ * - Iterating over allocations in-order.
+ * - Clearing for re-use.
+ *
+ * Unsupported:
+ *
+ * - Freeing individual elements.
+ *
+ * \note We could inline iteration stepping,
+ * but tests show this doesn't give noticeable speedup.
+ */
+
+#include <string.h>
+#include <stdlib.h>
+
+#include "BLI_utildefines.h"
+
+#include "BLI_memiter.h" /* own include */
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_strict_flags.h" /* keep last */
+
+typedef uintptr_t data_t;
+typedef intptr_t offset_t;
+
+/* Write the chunk terminator on adding each element.
+ * typically we rely on the 'count' to avoid iterating past the end. */
+// #define USE_TERMINATE_PARANOID
+
+/* Currently totalloc isnt used. */
+ // #define USE_TOTALLOC
+
+/* pad must be power of two */
+#define PADUP(num, pad) (((num) + ((pad) - 1)) & ~((pad) - 1))
+
+typedef struct BLI_memiter_elem {
+ offset_t size;
+ data_t data[0];
+} BLI_memiter_elem;
+
+typedef struct BLI_memiter_chunk {
+ struct BLI_memiter_chunk *next;
+ /**
+ * internal format is:
+ * ``[next_pointer, size:data, size:data, ..., negative_offset]``
+ *
+ * Where negative offset rewinds to the start.
+ */
+ data_t data[0];
+} BLI_memiter_chunk;
+
+typedef struct BLI_memiter {
+ /* A pointer to 'head' is needed so we can iterate in the order allocated. */
+ struct BLI_memiter_chunk *head, *tail;
+ data_t *data_curr;
+ data_t *data_last;
+ /* Used unless a large element is requested.
+ * (which should be very rare!). */
+ uint chunk_size_in_bytes_min;
+ uint count;
+#ifdef USE_TOTALLOC
+ uint totalloc;
+#endif
+} BLI_memiter;
+
+
+BLI_INLINE uint data_offset_from_size(uint size)
+{
+ return (PADUP(size, (uint)sizeof(data_t))) / (uint)sizeof(data_t);
+}
+
+static void memiter_set_rewind_offset(BLI_memiter *mi)
+{
+ BLI_memiter_elem *elem = (BLI_memiter_elem *)mi->data_curr;
+ elem->size = (offset_t)(((data_t *)mi->tail) - mi->data_curr);
+ BLI_assert(elem->size < 0);
+}
+
+static void memiter_init(BLI_memiter *mi)
+{
+ mi->head = NULL;
+ mi->tail = NULL;
+ mi->data_curr = NULL;
+ mi->data_last = NULL;
+ mi->count = 0;
+#ifdef USE_TOTALLOC
+ mi->totalloc = 0;
+#endif
+}
+
+/* -------------------------------------------------------------------- */
+
+/** \name Public API's
+ * \{ */
+
+/**
+ * \param chunk_size_min: Should be a power of two and
+ * significantly larger than the average element size used.
+ *
+ * While allocations of any size are supported, they won't be efficient
+ * (effectively becoming a single-linked list).
+ *
+ * Its intended that many elements can be stored per chunk.
+ */
+BLI_memiter *BLI_memiter_create(uint chunk_size_min)
+{
+ BLI_memiter *mi = MEM_mallocN(sizeof(BLI_memiter), "BLI_memiter");
+ memiter_init(mi);
+
+ /* Small values are used for tests to check for correctness,
+ * but otherwise not that useful. */
+ const uint slop_space = (sizeof(BLI_memiter_chunk) + MEM_SIZE_OVERHEAD);
+ if (chunk_size_min >= 1024) {
+ /* As long as the input is a power of 2, this will give efficient sizes. */
+ chunk_size_min -= slop_space;
+ }
+
+ mi->chunk_size_in_bytes_min = chunk_size_min;
+ return mi;
+}
+
+void *BLI_memiter_alloc(BLI_memiter *mi, uint elem_size)
+{
+ const uint data_offset = data_offset_from_size(elem_size);
+ data_t *data_curr_next = mi->data_curr + (1 + data_offset);
+
+ if (UNLIKELY(mi->data_curr == NULL) || (data_curr_next > mi->data_last)) {
+
+#ifndef USE_TERMINATE_PARANOID
+ if (mi->data_curr != NULL) {
+ memiter_set_rewind_offset(mi);
+ }
+#endif
+
+ uint chunk_size_in_bytes = mi->chunk_size_in_bytes_min;
+ if (UNLIKELY(chunk_size_in_bytes < elem_size + (uint)sizeof(data_t[2]))) {
+ chunk_size_in_bytes = elem_size + (uint)sizeof(data_t[2]);
+ }
+ uint chunk_size = data_offset_from_size(chunk_size_in_bytes);
+ BLI_memiter_chunk *chunk = MEM_mallocN(
+ sizeof(BLI_memiter_chunk) +
+ (chunk_size * sizeof(data_t)),
+ "BLI_memiter_chunk");
+
+ if (mi->head == NULL) {
+ BLI_assert(mi->tail == NULL);
+ mi->head = chunk;
+ }
+ else {
+ mi->tail->next = chunk;
+ }
+ mi->tail = chunk;
+ chunk->next = NULL;
+
+ mi->data_curr = chunk->data;
+ mi->data_last = chunk->data + (chunk_size - 1);
+ data_curr_next = mi->data_curr + (1 + data_offset);
+ }
+
+ BLI_assert(data_curr_next <= mi->data_last);
+
+ BLI_memiter_elem *elem = (BLI_memiter_elem *)mi->data_curr;
+ elem->size = (offset_t)elem_size;
+ mi->data_curr = data_curr_next;
+
+#ifdef USE_TERMINATE_PARANOID
+ memiter_set_rewind_offset(mi);
+#endif
+
+ mi->count += 1;
+
+#ifdef USE_TOTALLOC
+ mi->totalloc += elem_size;
+#endif
+
+ return elem->data;
+}
+
+void *BLI_memiter_calloc(BLI_memiter *mi, uint elem_size)
+{
+ void *data = BLI_memiter_alloc(mi, elem_size);
+ memset(data, 0, elem_size);
+ return data;
+}
+
+void BLI_memiter_alloc_from(BLI_memiter *mi, uint elem_size, const void *data_from)
+{
+ void *data = BLI_memiter_alloc(mi, elem_size);
+ memcpy(data, data_from, elem_size);
+}
+
+static void memiter_free_data(BLI_memiter *mi)
+{
+ BLI_memiter_chunk *chunk = mi->head;
+ while (chunk) {
+ BLI_memiter_chunk *chunk_next = chunk->next;
+ MEM_freeN(chunk);
+ chunk = chunk_next;
+ }
+}
+
+void BLI_memiter_destroy(BLI_memiter *mi)
+{
+ memiter_free_data(mi);
+ MEM_freeN(mi);
+}
+
+void BLI_memiter_clear(BLI_memiter *mi)
+{
+ memiter_free_data(mi);
+ memiter_init(mi);
+}
+
+uint BLI_memiter_count(const BLI_memiter *mi)
+{
+ return mi->count;
+}
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Helper API's
+ * \{ */
+
+/* Support direct lookup for first. */
+void *BLI_memiter_elem_first(BLI_memiter *mi)
+{
+ if (mi->head != NULL) {
+ BLI_memiter_chunk *chunk = mi->head;
+ BLI_memiter_elem *elem = (BLI_memiter_elem *)chunk->data;
+ return elem->data;
+ }
+ else {
+ return NULL;
+ }
+}
+
+void *BLI_memiter_elem_first_size(BLI_memiter *mi, uint *r_size)
+{
+ if (mi->head != NULL) {
+ BLI_memiter_chunk *chunk = mi->head;
+ BLI_memiter_elem *elem = (BLI_memiter_elem *)chunk->data;
+ *r_size = (uint)elem->size;
+ return elem->data;
+ }
+ else {
+ return NULL;
+ }
+}
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Iterator API's
+ *
+ * \note We could loop over elements until a NULL chunk is found,
+ * however this means every allocation needs to preemptively run
+ * #memiter_set_rewind_offset (see #USE_TERMINATE_PARANOID).
+ * Unless we have a call to finalize allocation (which complicates usage).
+ * So use a counter instead.
+ *
+ * \{ */
+
+void BLI_memiter_iter_init(BLI_memiter *mi, BLI_memiter_handle *iter)
+{
+ iter->elem = mi->head ? (BLI_memiter_elem *)mi->head->data : NULL;
+ iter->elem_left = mi->count;
+}
+
+bool BLI_memiter_iter_done(const BLI_memiter_handle *iter)
+{
+ return iter->elem_left != 0;
+}
+
+BLI_INLINE void memiter_chunk_step(BLI_memiter_handle *iter)
+{
+ BLI_assert(iter->elem->size < 0);
+ BLI_memiter_chunk *chunk = (BLI_memiter_chunk *)(((data_t *)iter->elem) + iter->elem->size);
+ chunk = chunk->next;
+ iter->elem = chunk ? (BLI_memiter_elem *)chunk->data : NULL;
+ BLI_assert(iter->elem == NULL || iter->elem->size >= 0);
+}
+
+void *BLI_memiter_iter_step_size(BLI_memiter_handle *iter, uint *r_size)
+{
+ if (iter->elem_left != 0) {
+ iter->elem_left -= 1;
+ if (UNLIKELY(iter->elem->size < 0)) {
+ memiter_chunk_step(iter);
+ }
+ BLI_assert(iter->elem->size >= 0);
+ uint size = (uint)iter->elem->size;
+ *r_size = size; /* <-- only difference */
+ data_t *data = iter->elem->data;
+ iter->elem = (BLI_memiter_elem *)&data[data_offset_from_size(size)];
+ return (void *)data;
+ }
+ else {
+ return NULL;
+ }
+}
+
+void *BLI_memiter_iter_step(BLI_memiter_handle *iter)
+{
+ if (iter->elem_left != 0) {
+ iter->elem_left -= 1;
+ if (UNLIKELY(iter->elem->size < 0)) {
+ memiter_chunk_step(iter);
+ }
+ BLI_assert(iter->elem->size >= 0);
+ uint size = (uint)iter->elem->size;
+ data_t *data = iter->elem->data;
+ iter->elem = (BLI_memiter_elem *)&data[data_offset_from_size(size)];
+ return (void *)data;
+ }
+ else {
+ return NULL;
+ }
+}
+
+/** \} */
diff --git a/source/blender/blenlib/intern/math_color.c b/source/blender/blenlib/intern/math_color.c
index 6d7d24c79c3..cb39134af45 100644
--- a/source/blender/blenlib/intern/math_color.c
+++ b/source/blender/blenlib/intern/math_color.c
@@ -359,8 +359,10 @@ void xyz_to_rgb(float xc, float yc, float zc, float *r, float *g, float *b, int
}
}
-/* we define a 'cpack' here as a (3 byte color code) number that can be expressed like 0xFFAA66 or so.
- * for that reason it is sensitive for endianness... with this function it works correctly
+/**
+ * We define a 'cpack' here as a (3 byte color code) number that can be expressed like 0xFFAA66 or so.
+ * for that reason it is sensitive for endianness... with this function it works correctly.
+ * \see #imm_cpack
*/
unsigned int hsv_to_cpack(float h, float s, float v)
diff --git a/source/blender/blenlib/intern/math_matrix.c b/source/blender/blenlib/intern/math_matrix.c
index 311d963f64d..3559500bf63 100644
--- a/source/blender/blenlib/intern/math_matrix.c
+++ b/source/blender/blenlib/intern/math_matrix.c
@@ -74,23 +74,23 @@ void unit_m4(float m[4][4])
m[3][0] = m[3][1] = m[3][2] = 0.0f;
}
-void copy_m2_m2(float m1[2][2], float m2[2][2])
+void copy_m2_m2(float m1[2][2], const float m2[2][2])
{
memcpy(m1, m2, sizeof(float[2][2]));
}
-void copy_m3_m3(float m1[3][3], float m2[3][3])
+void copy_m3_m3(float m1[3][3], const float m2[3][3])
{
/* destination comes first: */
memcpy(m1, m2, sizeof(float[3][3]));
}
-void copy_m4_m4(float m1[4][4], float m2[4][4])
+void copy_m4_m4(float m1[4][4], const float m2[4][4])
{
memcpy(m1, m2, sizeof(float[4][4]));
}
-void copy_m3_m4(float m1[3][3], float m2[4][4])
+void copy_m3_m4(float m1[3][3], const float m2[4][4])
{
m1[0][0] = m2[0][0];
m1[0][1] = m2[0][1];
@@ -105,7 +105,7 @@ void copy_m3_m4(float m1[3][3], float m2[4][4])
m1[2][2] = m2[2][2];
}
-void copy_m4_m3(float m1[4][4], float m2[3][3]) /* no clear */
+void copy_m4_m3(float m1[4][4], const float m2[3][3]) /* no clear */
{
m1[0][0] = m2[0][0];
m1[0][1] = m2[0][1];
@@ -131,7 +131,7 @@ void copy_m4_m3(float m1[4][4], float m2[3][3]) /* no clear */
}
-void copy_m3_m3d(float R[3][3], double A[3][3])
+void copy_m3_m3d(float R[3][3], const double A[3][3])
{
/* Keep it stupid simple for better data flow in CPU. */
R[0][0] = (float)A[0][0];
@@ -177,64 +177,107 @@ void swap_m4m4(float m1[4][4], float m2[4][4])
/******************************** Arithmetic *********************************/
-void mul_m4_m4m4(float m1[4][4], float m3_[4][4], float m2_[4][4])
+void mul_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4])
{
- float m2[4][4], m3[4][4];
+ if (A == R)
+ mul_m4_m4_post(R, B);
+ else if (B == R)
+ mul_m4_m4_pre(R, A);
+ else
+ mul_m4_m4m4_uniq(R, A, B);
+}
- /* copy so it works when m1 is the same pointer as m2 or m3 */
- copy_m4_m4(m2, m2_);
- copy_m4_m4(m3, m3_);
+void mul_m4_m4m4_uniq(float R[4][4], const float A[4][4], const float B[4][4])
+{
+ BLI_assert(R != A && R != B);
- /* matrix product: m1[j][k] = m2[j][i].m3[i][k] */
- m1[0][0] = m2[0][0] * m3[0][0] + m2[0][1] * m3[1][0] + m2[0][2] * m3[2][0] + m2[0][3] * m3[3][0];
- m1[0][1] = m2[0][0] * m3[0][1] + m2[0][1] * m3[1][1] + m2[0][2] * m3[2][1] + m2[0][3] * m3[3][1];
- m1[0][2] = m2[0][0] * m3[0][2] + m2[0][1] * m3[1][2] + m2[0][2] * m3[2][2] + m2[0][3] * m3[3][2];
- m1[0][3] = m2[0][0] * m3[0][3] + m2[0][1] * m3[1][3] + m2[0][2] * m3[2][3] + m2[0][3] * m3[3][3];
+ /* matrix product: R[j][k] = A[j][i] . B[i][k] */
+ R[0][0] = B[0][0] * A[0][0] + B[0][1] * A[1][0] + B[0][2] * A[2][0] + B[0][3] * A[3][0];
+ R[0][1] = B[0][0] * A[0][1] + B[0][1] * A[1][1] + B[0][2] * A[2][1] + B[0][3] * A[3][1];
+ R[0][2] = B[0][0] * A[0][2] + B[0][1] * A[1][2] + B[0][2] * A[2][2] + B[0][3] * A[3][2];
+ R[0][3] = B[0][0] * A[0][3] + B[0][1] * A[1][3] + B[0][2] * A[2][3] + B[0][3] * A[3][3];
- m1[1][0] = m2[1][0] * m3[0][0] + m2[1][1] * m3[1][0] + m2[1][2] * m3[2][0] + m2[1][3] * m3[3][0];
- m1[1][1] = m2[1][0] * m3[0][1] + m2[1][1] * m3[1][1] + m2[1][2] * m3[2][1] + m2[1][3] * m3[3][1];
- m1[1][2] = m2[1][0] * m3[0][2] + m2[1][1] * m3[1][2] + m2[1][2] * m3[2][2] + m2[1][3] * m3[3][2];
- m1[1][3] = m2[1][0] * m3[0][3] + m2[1][1] * m3[1][3] + m2[1][2] * m3[2][3] + m2[1][3] * m3[3][3];
+ R[1][0] = B[1][0] * A[0][0] + B[1][1] * A[1][0] + B[1][2] * A[2][0] + B[1][3] * A[3][0];
+ R[1][1] = B[1][0] * A[0][1] + B[1][1] * A[1][1] + B[1][2] * A[2][1] + B[1][3] * A[3][1];
+ R[1][2] = B[1][0] * A[0][2] + B[1][1] * A[1][2] + B[1][2] * A[2][2] + B[1][3] * A[3][2];
+ R[1][3] = B[1][0] * A[0][3] + B[1][1] * A[1][3] + B[1][2] * A[2][3] + B[1][3] * A[3][3];
- m1[2][0] = m2[2][0] * m3[0][0] + m2[2][1] * m3[1][0] + m2[2][2] * m3[2][0] + m2[2][3] * m3[3][0];
- m1[2][1] = m2[2][0] * m3[0][1] + m2[2][1] * m3[1][1] + m2[2][2] * m3[2][1] + m2[2][3] * m3[3][1];
- m1[2][2] = m2[2][0] * m3[0][2] + m2[2][1] * m3[1][2] + m2[2][2] * m3[2][2] + m2[2][3] * m3[3][2];
- m1[2][3] = m2[2][0] * m3[0][3] + m2[2][1] * m3[1][3] + m2[2][2] * m3[2][3] + m2[2][3] * m3[3][3];
+ R[2][0] = B[2][0] * A[0][0] + B[2][1] * A[1][0] + B[2][2] * A[2][0] + B[2][3] * A[3][0];
+ R[2][1] = B[2][0] * A[0][1] + B[2][1] * A[1][1] + B[2][2] * A[2][1] + B[2][3] * A[3][1];
+ R[2][2] = B[2][0] * A[0][2] + B[2][1] * A[1][2] + B[2][2] * A[2][2] + B[2][3] * A[3][2];
+ R[2][3] = B[2][0] * A[0][3] + B[2][1] * A[1][3] + B[2][2] * A[2][3] + B[2][3] * A[3][3];
- m1[3][0] = m2[3][0] * m3[0][0] + m2[3][1] * m3[1][0] + m2[3][2] * m3[2][0] + m2[3][3] * m3[3][0];
- m1[3][1] = m2[3][0] * m3[0][1] + m2[3][1] * m3[1][1] + m2[3][2] * m3[2][1] + m2[3][3] * m3[3][1];
- m1[3][2] = m2[3][0] * m3[0][2] + m2[3][1] * m3[1][2] + m2[3][2] * m3[2][2] + m2[3][3] * m3[3][2];
- m1[3][3] = m2[3][0] * m3[0][3] + m2[3][1] * m3[1][3] + m2[3][2] * m3[2][3] + m2[3][3] * m3[3][3];
+ R[3][0] = B[3][0] * A[0][0] + B[3][1] * A[1][0] + B[3][2] * A[2][0] + B[3][3] * A[3][0];
+ R[3][1] = B[3][0] * A[0][1] + B[3][1] * A[1][1] + B[3][2] * A[2][1] + B[3][3] * A[3][1];
+ R[3][2] = B[3][0] * A[0][2] + B[3][1] * A[1][2] + B[3][2] * A[2][2] + B[3][3] * A[3][2];
+ R[3][3] = B[3][0] * A[0][3] + B[3][1] * A[1][3] + B[3][2] * A[2][3] + B[3][3] * A[3][3];
+}
+void mul_m4_m4_pre(float R[4][4], const float A[4][4])
+{
+ BLI_assert(A != R);
+ float B[4][4];
+ copy_m4_m4(B, R);
+ mul_m4_m4m4_uniq(R, A, B);
}
-void mul_m3_m3m3(float m1[3][3], float m3_[3][3], float m2_[3][3])
+void mul_m4_m4_post(float R[4][4], const float B[4][4])
{
- float m2[3][3], m3[3][3];
+ BLI_assert(B != R);
+ float A[4][4];
+ copy_m4_m4(A, R);
+ mul_m4_m4m4_uniq(R, A, B);
+}
- /* copy so it works when m1 is the same pointer as m2 or m3 */
- copy_m3_m3(m2, m2_);
- copy_m3_m3(m3, m3_);
+void mul_m3_m3m3(float R[3][3], const float A[3][3], const float B[3][3])
+{
+ if (A == R)
+ mul_m3_m3_post(R, B);
+ else if (B == R)
+ mul_m3_m3_pre(R, A);
+ else
+ mul_m3_m3m3_uniq(R, A, B);
+}
- /* m1[i][j] = m2[i][k] * m3[k][j], args are flipped! */
- m1[0][0] = m2[0][0] * m3[0][0] + m2[0][1] * m3[1][0] + m2[0][2] * m3[2][0];
- m1[0][1] = m2[0][0] * m3[0][1] + m2[0][1] * m3[1][1] + m2[0][2] * m3[2][1];
- m1[0][2] = m2[0][0] * m3[0][2] + m2[0][1] * m3[1][2] + m2[0][2] * m3[2][2];
+void mul_m3_m3_pre(float R[3][3], const float A[3][3])
+{
+ BLI_assert(A != R);
+ float B[3][3];
+ copy_m3_m3(B, R);
+ mul_m3_m3m3_uniq(R, A, B);
+}
- m1[1][0] = m2[1][0] * m3[0][0] + m2[1][1] * m3[1][0] + m2[1][2] * m3[2][0];
- m1[1][1] = m2[1][0] * m3[0][1] + m2[1][1] * m3[1][1] + m2[1][2] * m3[2][1];
- m1[1][2] = m2[1][0] * m3[0][2] + m2[1][1] * m3[1][2] + m2[1][2] * m3[2][2];
+void mul_m3_m3_post(float R[3][3], const float B[3][3])
+{
+ BLI_assert(B != R);
+ float A[3][3];
+ copy_m3_m3(A, R);
+ mul_m3_m3m3_uniq(R, A, B);
+}
- m1[2][0] = m2[2][0] * m3[0][0] + m2[2][1] * m3[1][0] + m2[2][2] * m3[2][0];
- m1[2][1] = m2[2][0] * m3[0][1] + m2[2][1] * m3[1][1] + m2[2][2] * m3[2][1];
- m1[2][2] = m2[2][0] * m3[0][2] + m2[2][1] * m3[1][2] + m2[2][2] * m3[2][2];
+void mul_m3_m3m3_uniq(float R[3][3], const float A[3][3], const float B[3][3])
+{
+ BLI_assert(R != A && R != B);
+
+ R[0][0] = B[0][0] * A[0][0] + B[0][1] * A[1][0] + B[0][2] * A[2][0];
+ R[0][1] = B[0][0] * A[0][1] + B[0][1] * A[1][1] + B[0][2] * A[2][1];
+ R[0][2] = B[0][0] * A[0][2] + B[0][1] * A[1][2] + B[0][2] * A[2][2];
+
+ R[1][0] = B[1][0] * A[0][0] + B[1][1] * A[1][0] + B[1][2] * A[2][0];
+ R[1][1] = B[1][0] * A[0][1] + B[1][1] * A[1][1] + B[1][2] * A[2][1];
+ R[1][2] = B[1][0] * A[0][2] + B[1][1] * A[1][2] + B[1][2] * A[2][2];
+
+ R[2][0] = B[2][0] * A[0][0] + B[2][1] * A[1][0] + B[2][2] * A[2][0];
+ R[2][1] = B[2][0] * A[0][1] + B[2][1] * A[1][1] + B[2][2] * A[2][1];
+ R[2][2] = B[2][0] * A[0][2] + B[2][1] * A[1][2] + B[2][2] * A[2][2];
}
-void mul_m4_m4m3(float m1[4][4], float m3_[4][4], float m2_[3][3])
+void mul_m4_m4m3(float m1[4][4], const float m3_[4][4], const float m2_[3][3])
{
float m2[3][3], m3[4][4];
/* copy so it works when m1 is the same pointer as m2 or m3 */
+ /* TODO: avoid copying when matrices are different */
copy_m3_m3(m2, m2_);
copy_m4_m4(m3, m3_);
@@ -250,11 +293,12 @@ void mul_m4_m4m3(float m1[4][4], float m3_[4][4], float m2_[3][3])
}
/* m1 = m2 * m3, ignore the elements on the 4th row/column of m3 */
-void mul_m3_m3m4(float m1[3][3], float m3_[4][4], float m2_[3][3])
+void mul_m3_m3m4(float m1[3][3], const float m3_[4][4], const float m2_[3][3])
{
float m2[3][3], m3[4][4];
/* copy so it works when m1 is the same pointer as m2 or m3 */
+ /* TODO: avoid copying when matrices are different */
copy_m3_m3(m2, m2_);
copy_m4_m4(m3, m3_);
@@ -272,11 +316,12 @@ void mul_m3_m3m4(float m1[3][3], float m3_[4][4], float m2_[3][3])
m1[2][2] = m2[2][0] * m3[0][2] + m2[2][1] * m3[1][2] + m2[2][2] * m3[2][2];
}
-void mul_m4_m3m4(float m1[4][4], float m3_[3][3], float m2_[4][4])
+void mul_m4_m3m4(float m1[4][4], const float m3_[3][3], const float m2_[4][4])
{
float m2[4][4], m3[3][3];
/* copy so it works when m1 is the same pointer as m2 or m3 */
+ /* TODO: avoid copying when matrices are different */
copy_m4_m4(m2, m2_);
copy_m3_m3(m3, m3_);
@@ -296,20 +341,20 @@ void mul_m4_m3m4(float m1[4][4], float m3_[3][3], float m2_[4][4])
* \{ */
void _va_mul_m3_series_3(
float r[3][3],
- float m1[3][3], float m2[3][3])
+ const float m1[3][3], const float m2[3][3])
{
mul_m3_m3m3(r, m1, m2);
}
void _va_mul_m3_series_4(
float r[3][3],
- float m1[3][3], float m2[3][3], float m3[3][3])
+ const float m1[3][3], const float m2[3][3], const float m3[3][3])
{
mul_m3_m3m3(r, m1, m2);
mul_m3_m3m3(r, r, m3);
}
void _va_mul_m3_series_5(
float r[3][3],
- float m1[3][3], float m2[3][3], float m3[3][3], float m4[3][3])
+ const float m1[3][3], const float m2[3][3], const float m3[3][3], const float m4[3][3])
{
mul_m3_m3m3(r, m1, m2);
mul_m3_m3m3(r, r, m3);
@@ -317,8 +362,8 @@ void _va_mul_m3_series_5(
}
void _va_mul_m3_series_6(
float r[3][3],
- float m1[3][3], float m2[3][3], float m3[3][3], float m4[3][3],
- float m5[3][3])
+ const float m1[3][3], const float m2[3][3], const float m3[3][3], const float m4[3][3],
+ const float m5[3][3])
{
mul_m3_m3m3(r, m1, m2);
mul_m3_m3m3(r, r, m3);
@@ -327,8 +372,8 @@ void _va_mul_m3_series_6(
}
void _va_mul_m3_series_7(
float r[3][3],
- float m1[3][3], float m2[3][3], float m3[3][3], float m4[3][3],
- float m5[3][3], float m6[3][3])
+ const float m1[3][3], const float m2[3][3], const float m3[3][3], const float m4[3][3],
+ const float m5[3][3], const float m6[3][3])
{
mul_m3_m3m3(r, m1, m2);
mul_m3_m3m3(r, r, m3);
@@ -338,8 +383,8 @@ void _va_mul_m3_series_7(
}
void _va_mul_m3_series_8(
float r[3][3],
- float m1[3][3], float m2[3][3], float m3[3][3], float m4[3][3],
- float m5[3][3], float m6[3][3], float m7[3][3])
+ const float m1[3][3], const float m2[3][3], const float m3[3][3], const float m4[3][3],
+ const float m5[3][3], const float m6[3][3], const float m7[3][3])
{
mul_m3_m3m3(r, m1, m2);
mul_m3_m3m3(r, r, m3);
@@ -350,8 +395,8 @@ void _va_mul_m3_series_8(
}
void _va_mul_m3_series_9(
float r[3][3],
- float m1[3][3], float m2[3][3], float m3[3][3], float m4[3][3],
- float m5[3][3], float m6[3][3], float m7[3][3], float m8[3][3])
+ const float m1[3][3], const float m2[3][3], const float m3[3][3], const float m4[3][3],
+ const float m5[3][3], const float m6[3][3], const float m7[3][3], const float m8[3][3])
{
mul_m3_m3m3(r, m1, m2);
mul_m3_m3m3(r, r, m3);
@@ -367,20 +412,20 @@ void _va_mul_m3_series_9(
* \{ */
void _va_mul_m4_series_3(
float r[4][4],
- float m1[4][4], float m2[4][4])
+ const float m1[4][4], const float m2[4][4])
{
mul_m4_m4m4(r, m1, m2);
}
void _va_mul_m4_series_4(
float r[4][4],
- float m1[4][4], float m2[4][4], float m3[4][4])
+ const float m1[4][4], const float m2[4][4], const float m3[4][4])
{
mul_m4_m4m4(r, m1, m2);
mul_m4_m4m4(r, r, m3);
}
void _va_mul_m4_series_5(
float r[4][4],
- float m1[4][4], float m2[4][4], float m3[4][4], float m4[4][4])
+ const float m1[4][4], const float m2[4][4], const float m3[4][4], const float m4[4][4])
{
mul_m4_m4m4(r, m1, m2);
mul_m4_m4m4(r, r, m3);
@@ -388,8 +433,8 @@ void _va_mul_m4_series_5(
}
void _va_mul_m4_series_6(
float r[4][4],
- float m1[4][4], float m2[4][4], float m3[4][4], float m4[4][4],
- float m5[4][4])
+ const float m1[4][4], const float m2[4][4], const float m3[4][4], const float m4[4][4],
+ const float m5[4][4])
{
mul_m4_m4m4(r, m1, m2);
mul_m4_m4m4(r, r, m3);
@@ -398,8 +443,8 @@ void _va_mul_m4_series_6(
}
void _va_mul_m4_series_7(
float r[4][4],
- float m1[4][4], float m2[4][4], float m3[4][4], float m4[4][4],
- float m5[4][4], float m6[4][4])
+ const float m1[4][4], const float m2[4][4], const float m3[4][4], const float m4[4][4],
+ const float m5[4][4], const float m6[4][4])
{
mul_m4_m4m4(r, m1, m2);
mul_m4_m4m4(r, r, m3);
@@ -409,8 +454,8 @@ void _va_mul_m4_series_7(
}
void _va_mul_m4_series_8(
float r[4][4],
- float m1[4][4], float m2[4][4], float m3[4][4], float m4[4][4],
- float m5[4][4], float m6[4][4], float m7[4][4])
+ const float m1[4][4], const float m2[4][4], const float m3[4][4], const float m4[4][4],
+ const float m5[4][4], const float m6[4][4], const float m7[4][4])
{
mul_m4_m4m4(r, m1, m2);
mul_m4_m4m4(r, r, m3);
@@ -421,8 +466,8 @@ void _va_mul_m4_series_8(
}
void _va_mul_m4_series_9(
float r[4][4],
- float m1[4][4], float m2[4][4], float m3[4][4], float m4[4][4],
- float m5[4][4], float m6[4][4], float m7[4][4], float m8[4][4])
+ const float m1[4][4], const float m2[4][4], const float m3[4][4], const float m4[4][4],
+ const float m5[4][4], const float m6[4][4], const float m7[4][4], const float m8[4][4])
{
mul_m4_m4m4(r, m1, m2);
mul_m4_m4m4(r, r, m3);
@@ -434,7 +479,7 @@ void _va_mul_m4_series_9(
}
/** \} */
-void mul_v2_m3v2(float r[2], float m[3][3], float v[2])
+void mul_v2_m3v2(float r[2], const float m[3][3], const float v[2])
{
float temp[3], warped[3];
@@ -447,12 +492,12 @@ void mul_v2_m3v2(float r[2], float m[3][3], float v[2])
r[1] = warped[1] / warped[2];
}
-void mul_m3_v2(float m[3][3], float r[2])
+void mul_m3_v2(const float m[3][3], float r[2])
{
mul_v2_m3v2(r, m, r);
}
-void mul_m4_v3(float mat[4][4], float vec[3])
+void mul_m4_v3(const float mat[4][4], float vec[3])
{
const float x = vec[0];
const float y = vec[1];
@@ -462,7 +507,7 @@ void mul_m4_v3(float mat[4][4], float vec[3])
vec[2] = x * mat[0][2] + y * mat[1][2] + mat[2][2] * vec[2] + mat[3][2];
}
-void mul_v3_m4v3(float r[3], float mat[4][4], const float vec[3])
+void mul_v3_m4v3(float r[3], const float mat[4][4], const float vec[3])
{
const float x = vec[0];
const float y = vec[1];
@@ -472,7 +517,7 @@ void mul_v3_m4v3(float r[3], float mat[4][4], const float vec[3])
r[2] = x * mat[0][2] + y * mat[1][2] + mat[2][2] * vec[2] + mat[3][2];
}
-void mul_v2_m4v3(float r[2], float mat[4][4], const float vec[3])
+void mul_v2_m4v3(float r[2], const float mat[4][4], const float vec[3])
{
const float x = vec[0];
@@ -480,7 +525,7 @@ void mul_v2_m4v3(float r[2], float mat[4][4], const float vec[3])
r[1] = x * mat[0][1] + vec[1] * mat[1][1] + mat[2][1] * vec[2] + mat[3][1];
}
-void mul_v2_m2v2(float r[2], float mat[2][2], const float vec[2])
+void mul_v2_m2v2(float r[2], const float mat[2][2], const float vec[2])
{
const float x = vec[0];
@@ -488,13 +533,13 @@ void mul_v2_m2v2(float r[2], float mat[2][2], const float vec[2])
r[1] = mat[0][1] * x + mat[1][1] * vec[1];
}
-void mul_m2v2(float mat[2][2], float vec[2])
+void mul_m2v2(const float mat[2][2], float vec[2])
{
mul_v2_m2v2(vec, mat, vec);
}
/* same as mul_m4_v3() but doesnt apply translation component */
-void mul_mat3_m4_v3(float mat[4][4], float vec[3])
+void mul_mat3_m4_v3(const float mat[4][4], float vec[3])
{
const float x = vec[0];
const float y = vec[1];
@@ -504,7 +549,7 @@ void mul_mat3_m4_v3(float mat[4][4], float vec[3])
vec[2] = x * mat[0][2] + y * mat[1][2] + mat[2][2] * vec[2];
}
-void mul_v3_mat3_m4v3(float r[3], float mat[4][4], const float vec[3])
+void mul_v3_mat3_m4v3(float r[3], const float mat[4][4], const float vec[3])
{
const float x = vec[0];
const float y = vec[1];
@@ -514,7 +559,7 @@ void mul_v3_mat3_m4v3(float r[3], float mat[4][4], const float vec[3])
r[2] = x * mat[0][2] + y * mat[1][2] + mat[2][2] * vec[2];
}
-void mul_project_m4_v3(float mat[4][4], float vec[3])
+void mul_project_m4_v3(const float mat[4][4], float vec[3])
{
/* absolute value to not flip the frustum upside down behind the camera */
const float w = fabsf(mul_project_m4_v3_zfac(mat, vec));
@@ -525,7 +570,7 @@ void mul_project_m4_v3(float mat[4][4], float vec[3])
vec[2] /= w;
}
-void mul_v3_project_m4_v3(float r[3], float mat[4][4], const float vec[3])
+void mul_v3_project_m4_v3(float r[3], const float mat[4][4], const float vec[3])
{
const float w = fabsf(mul_project_m4_v3_zfac(mat, vec));
mul_v3_m4v3(r, mat, vec);
@@ -535,7 +580,7 @@ void mul_v3_project_m4_v3(float r[3], float mat[4][4], const float vec[3])
r[2] /= w;
}
-void mul_v2_project_m4_v3(float r[2], float mat[4][4], const float vec[3])
+void mul_v2_project_m4_v3(float r[2], const float mat[4][4], const float vec[3])
{
const float w = fabsf(mul_project_m4_v3_zfac(mat, vec));
mul_v2_m4v3(r, mat, vec);
@@ -544,7 +589,7 @@ void mul_v2_project_m4_v3(float r[2], float mat[4][4], const float vec[3])
r[1] /= w;
}
-void mul_v4_m4v4(float r[4], float mat[4][4], const float v[4])
+void mul_v4_m4v4(float r[4], const float mat[4][4], const float v[4])
{
const float x = v[0];
const float y = v[1];
@@ -556,12 +601,12 @@ void mul_v4_m4v4(float r[4], float mat[4][4], const float v[4])
r[3] = x * mat[0][3] + y * mat[1][3] + z * mat[2][3] + mat[3][3] * v[3];
}
-void mul_m4_v4(float mat[4][4], float r[4])
+void mul_m4_v4(const float mat[4][4], float r[4])
{
mul_v4_m4v4(r, mat, r);
}
-void mul_v4d_m4v4d(double r[4], float mat[4][4], double v[4])
+void mul_v4d_m4v4d(double r[4], const float mat[4][4], const double v[4])
{
const double x = v[0];
const double y = v[1];
@@ -573,12 +618,21 @@ void mul_v4d_m4v4d(double r[4], float mat[4][4], double v[4])
r[3] = x * (double)mat[0][3] + y * (double)mat[1][3] + z * (double)mat[2][3] + (double)mat[3][3] * v[3];
}
-void mul_m4_v4d(float mat[4][4], double r[4])
+void mul_m4_v4d(const float mat[4][4], double r[4])
{
mul_v4d_m4v4d(r, mat, r);
}
-void mul_v3_m3v3(float r[3], float M[3][3], const float a[3])
+void mul_v4_m4v3(float r[4], const float M[4][4], const float v[3])
+{
+ /* v has implicit w = 1.0f */
+ r[0] = v[0] * M[0][0] + v[1] * M[1][0] + M[2][0] * v[2] + M[3][0];
+ r[1] = v[0] * M[0][1] + v[1] * M[1][1] + M[2][1] * v[2] + M[3][1];
+ r[2] = v[0] * M[0][2] + v[1] * M[1][2] + M[2][2] * v[2] + M[3][2];
+ r[3] = v[0] * M[0][3] + v[1] * M[1][3] + M[2][3] * v[2] + M[3][3];
+}
+
+void mul_v3_m3v3(float r[3], const float M[3][3], const float a[3])
{
BLI_assert(r != a);
@@ -587,7 +641,7 @@ void mul_v3_m3v3(float r[3], float M[3][3], const float a[3])
r[2] = M[0][2] * a[0] + M[1][2] * a[1] + M[2][2] * a[2];
}
-void mul_v3_m3v3_db(double r[3], double M[3][3], const double a[3])
+void mul_v3_m3v3_db(double r[3], const double M[3][3], const double a[3])
{
BLI_assert(r != a);
@@ -596,7 +650,7 @@ void mul_v3_m3v3_db(double r[3], double M[3][3], const double a[3])
r[2] = M[0][2] * a[0] + M[1][2] * a[1] + M[2][2] * a[2];
}
-void mul_v2_m3v3(float r[2], float M[3][3], const float a[3])
+void mul_v2_m3v3(float r[2], const float M[3][3], const float a[3])
{
BLI_assert(r != a);
@@ -604,17 +658,17 @@ void mul_v2_m3v3(float r[2], float M[3][3], const float a[3])
r[1] = M[0][1] * a[0] + M[1][1] * a[1] + M[2][1] * a[2];
}
-void mul_m3_v3(float M[3][3], float r[3])
+void mul_m3_v3(const float M[3][3], float r[3])
{
mul_v3_m3v3(r, M, (const float[3]){UNPACK3(r)});
}
-void mul_m3_v3_db(double M[3][3], double r[3])
+void mul_m3_v3_db(const double M[3][3], double r[3])
{
mul_v3_m3v3_db(r, M, (const double[3]){UNPACK3(r)});
}
-void mul_transposed_m3_v3(float mat[3][3], float vec[3])
+void mul_transposed_m3_v3(const float mat[3][3], float vec[3])
{
const float x = vec[0];
const float y = vec[1];
@@ -624,7 +678,7 @@ void mul_transposed_m3_v3(float mat[3][3], float vec[3])
vec[2] = x * mat[2][0] + y * mat[2][1] + mat[2][2] * vec[2];
}
-void mul_transposed_mat3_m4_v3(float mat[4][4], float vec[3])
+void mul_transposed_mat3_m4_v3(const float mat[4][4], float vec[3])
{
const float x = vec[0];
const float y = vec[1];
@@ -688,7 +742,7 @@ void negate_m4(float m[4][4])
m[i][j] *= -1.0f;
}
-void mul_m3_v3_double(float mat[3][3], double vec[3])
+void mul_m3_v3_double(const float mat[3][3], double vec[3])
{
const double x = vec[0];
const double y = vec[1];
@@ -698,7 +752,7 @@ void mul_m3_v3_double(float mat[3][3], double vec[3])
vec[2] = x * (double)mat[0][2] + y * (double)mat[1][2] + (double)mat[2][2] * vec[2];
}
-void add_m3_m3m3(float m1[3][3], float m2[3][3], float m3[3][3])
+void add_m3_m3m3(float m1[3][3], const float m2[3][3], const float m3[3][3])
{
int i, j;
@@ -707,7 +761,7 @@ void add_m3_m3m3(float m1[3][3], float m2[3][3], float m3[3][3])
m1[i][j] = m2[i][j] + m3[i][j];
}
-void add_m4_m4m4(float m1[4][4], float m2[4][4], float m3[4][4])
+void add_m4_m4m4(float m1[4][4], const float m2[4][4], const float m3[4][4])
{
int i, j;
@@ -716,7 +770,7 @@ void add_m4_m4m4(float m1[4][4], float m2[4][4], float m3[4][4])
m1[i][j] = m2[i][j] + m3[i][j];
}
-void sub_m3_m3m3(float m1[3][3], float m2[3][3], float m3[3][3])
+void sub_m3_m3m3(float m1[3][3], const float m2[3][3], const float m3[3][3])
{
int i, j;
@@ -725,7 +779,7 @@ void sub_m3_m3m3(float m1[3][3], float m2[3][3], float m3[3][3])
m1[i][j] = m2[i][j] - m3[i][j];
}
-void sub_m4_m4m4(float m1[4][4], float m2[4][4], float m3[4][4])
+void sub_m4_m4m4(float m1[4][4], const float m2[4][4], const float m3[4][4])
{
int i, j;
@@ -734,7 +788,7 @@ void sub_m4_m4m4(float m1[4][4], float m2[4][4], float m3[4][4])
m1[i][j] = m2[i][j] - m3[i][j];
}
-float determinant_m3_array(float m[3][3])
+float determinant_m3_array(const float m[3][3])
{
return (m[0][0] * (m[1][1] * m[2][2] - m[1][2] * m[2][1]) -
m[1][0] * (m[0][1] * m[2][2] - m[0][2] * m[2][1]) +
@@ -750,7 +804,7 @@ bool invert_m3_ex(float m[3][3], const float epsilon)
return success;
}
-bool invert_m3_m3_ex(float m1[3][3], float m2[3][3], const float epsilon)
+bool invert_m3_m3_ex(float m1[3][3], const float m2[3][3], const float epsilon)
{
float det;
int a, b;
@@ -786,7 +840,7 @@ bool invert_m3(float m[3][3])
return success;
}
-bool invert_m3_m3(float m1[3][3], float m2[3][3])
+bool invert_m3_m3(float m1[3][3], const float m2[3][3])
{
float det;
int a, b;
@@ -830,7 +884,7 @@ bool invert_m4(float m[4][4])
* Mark Segal - 1992
*/
-bool invert_m4_m4(float inverse[4][4], float mat[4][4])
+bool invert_m4_m4(float inverse[4][4], const float mat[4][4])
{
int i, j, k;
double temp;
@@ -908,7 +962,7 @@ void transpose_m3(float mat[3][3])
mat[2][1] = t;
}
-void transpose_m3_m3(float rmat[3][3], float mat[3][3])
+void transpose_m3_m3(float rmat[3][3], const float mat[3][3])
{
BLI_assert(rmat != mat);
@@ -924,7 +978,7 @@ void transpose_m3_m3(float rmat[3][3], float mat[3][3])
}
/* seems obscure but in-fact a common operation */
-void transpose_m3_m4(float rmat[3][3], float mat[4][4])
+void transpose_m3_m4(float rmat[3][3], const float mat[4][4])
{
BLI_assert(&rmat[0][0] != &mat[0][0]);
@@ -965,7 +1019,7 @@ void transpose_m4(float mat[4][4])
mat[3][2] = t;
}
-void transpose_m4_m4(float rmat[4][4], float mat[4][4])
+void transpose_m4_m4(float rmat[4][4], const float mat[4][4])
{
BLI_assert(rmat != mat);
@@ -987,7 +1041,8 @@ void transpose_m4_m4(float rmat[4][4], float mat[4][4])
rmat[3][3] = mat[3][3];
}
-int compare_m4m4(float mat1[4][4], float mat2[4][4], float limit)
+/* TODO: return bool */
+int compare_m4m4(const float mat1[4][4], const float mat2[4][4], float limit)
{
if (compare_v4v4(mat1[0], mat2[0], limit))
if (compare_v4v4(mat1[1], mat2[1], limit))
@@ -1165,7 +1220,7 @@ void orthogonalize_m4(float mat[4][4], int axis)
mul_v3_fl(mat[2], size[2]);
}
-bool is_orthogonal_m3(float m[3][3])
+bool is_orthogonal_m3(const float m[3][3])
{
int i, j;
@@ -1179,7 +1234,7 @@ bool is_orthogonal_m3(float m[3][3])
return true;
}
-bool is_orthogonal_m4(float m[4][4])
+bool is_orthogonal_m4(const float m[4][4])
{
int i, j;
@@ -1194,7 +1249,7 @@ bool is_orthogonal_m4(float m[4][4])
return true;
}
-bool is_orthonormal_m3(float m[3][3])
+bool is_orthonormal_m3(const float m[3][3])
{
if (is_orthogonal_m3(m)) {
int i;
@@ -1209,7 +1264,7 @@ bool is_orthonormal_m3(float m[3][3])
return false;
}
-bool is_orthonormal_m4(float m[4][4])
+bool is_orthonormal_m4(const float m[4][4])
{
if (is_orthogonal_m4(m)) {
int i;
@@ -1224,7 +1279,7 @@ bool is_orthonormal_m4(float m[4][4])
return false;
}
-bool is_uniform_scaled_m3(float m[3][3])
+bool is_uniform_scaled_m3(const float m[3][3])
{
const float eps = 1e-7f;
float t[3][3];
@@ -1252,7 +1307,7 @@ bool is_uniform_scaled_m3(float m[3][3])
return false;
}
-bool is_uniform_scaled_m4(float m[4][4])
+bool is_uniform_scaled_m4(const float m[4][4])
{
float t[3][3];
copy_m3_m4(t, m);
@@ -1274,14 +1329,14 @@ void normalize_m3(float mat[3][3])
}
}
-void normalize_m3_m3_ex(float rmat[3][3], float mat[3][3], float r_scale[3])
+void normalize_m3_m3_ex(float rmat[3][3], const float mat[3][3], float r_scale[3])
{
int i;
for (i = 0; i < 3; i++) {
r_scale[i] = normalize_v3_v3(rmat[i], mat[i]);
}
}
-void normalize_m3_m3(float rmat[3][3], float mat[3][3])
+void normalize_m3_m3(float rmat[3][3], const float mat[3][3])
{
int i;
for (i = 0; i < 3; i++) {
@@ -1310,7 +1365,7 @@ void normalize_m4(float mat[4][4])
}
}
-void normalize_m4_m4_ex(float rmat[4][4], float mat[4][4], float r_scale[3])
+void normalize_m4_m4_ex(float rmat[4][4], const float mat[4][4], float r_scale[3])
{
int i;
for (i = 0; i < 3; i++) {
@@ -1319,7 +1374,7 @@ void normalize_m4_m4_ex(float rmat[4][4], float mat[4][4], float r_scale[3])
}
copy_v4_v4(rmat[3], mat[3]);
}
-void normalize_m4_m4(float rmat[4][4], float mat[4][4])
+void normalize_m4_m4(float rmat[4][4], const float mat[4][4])
{
int i;
for (i = 0; i < 3; i++) {
@@ -1329,7 +1384,7 @@ void normalize_m4_m4(float rmat[4][4], float mat[4][4])
copy_v4_v4(rmat[3], mat[3]);
}
-void adjoint_m2_m2(float m1[2][2], float m[2][2])
+void adjoint_m2_m2(float m1[2][2], const float m[2][2])
{
BLI_assert(m1 != m);
m1[0][0] = m[1][1];
@@ -1338,7 +1393,7 @@ void adjoint_m2_m2(float m1[2][2], float m[2][2])
m1[1][1] = m[0][0];
}
-void adjoint_m3_m3(float m1[3][3], float m[3][3])
+void adjoint_m3_m3(float m1[3][3], const float m[3][3])
{
BLI_assert(m1 != m);
m1[0][0] = m[1][1] * m[2][2] - m[1][2] * m[2][1];
@@ -1354,7 +1409,7 @@ void adjoint_m3_m3(float m1[3][3], float m[3][3])
m1[2][2] = m[0][0] * m[1][1] - m[0][1] * m[1][0];
}
-void adjoint_m4_m4(float out[4][4], float in[4][4]) /* out = ADJ(in) */
+void adjoint_m4_m4(float out[4][4], const float in[4][4]) /* out = ADJ(in) */
{
float a1, a2, a3, a4, b1, b2, b3, b4;
float c1, c2, c3, c4, d1, d2, d3, d4;
@@ -1420,7 +1475,7 @@ float determinant_m3(float a1, float a2, float a3,
return ans;
}
-float determinant_m4(float m[4][4])
+float determinant_m4(const float m[4][4])
{
float ans;
float a1, a2, a3, a4, b1, b2, b3, b4, c1, c2, c3, c4, d1, d2, d3, d4;
@@ -1488,14 +1543,14 @@ void size_to_mat4(float mat[4][4], const float size[3])
mat[3][3] = 1.0f;
}
-void mat3_to_size(float size[3], float mat[3][3])
+void mat3_to_size(float size[3], const float mat[3][3])
{
size[0] = len_v3(mat[0]);
size[1] = len_v3(mat[1]);
size[2] = len_v3(mat[2]);
}
-void mat4_to_size(float size[3], float mat[4][4])
+void mat4_to_size(float size[3], const float mat[4][4])
{
size[0] = len_v3(mat[0]);
size[1] = len_v3(mat[1]);
@@ -1505,7 +1560,7 @@ void mat4_to_size(float size[3], float mat[4][4])
/* this gets the average scale of a matrix, only use when your scaling
* data that has no idea of scale axis, examples are bone-envelope-radius
* and curve radius */
-float mat3_to_scale(float mat[3][3])
+float mat3_to_scale(const float mat[3][3])
{
/* unit length vector */
float unit_vec[3];
@@ -1514,7 +1569,7 @@ float mat3_to_scale(float mat[3][3])
return len_v3(unit_vec);
}
-float mat4_to_scale(float mat[4][4])
+float mat4_to_scale(const float mat[4][4])
{
/* unit length vector */
float unit_vec[3];
@@ -1524,7 +1579,7 @@ float mat4_to_scale(float mat[4][4])
}
/** Return 2D scale (in XY plane) of given mat4. */
-float mat4_to_xy_scale(float M[4][4])
+float mat4_to_xy_scale(const float M[4][4])
{
/* unit length vector in xy plane */
float unit_vec[3] = {(float)M_SQRT1_2, (float)M_SQRT1_2, 0.0f};
@@ -1532,7 +1587,7 @@ float mat4_to_xy_scale(float M[4][4])
return len_v3(unit_vec);
}
-void mat3_to_rot_size(float rot[3][3], float size[3], float mat3[3][3])
+void mat3_to_rot_size(float rot[3][3], float size[3], const float mat3[3][3])
{
/* keep rot as a 3x3 matrix, the caller can convert into a quat or euler */
size[0] = normalize_v3_v3(rot[0], mat3[0]);
@@ -1544,7 +1599,7 @@ void mat3_to_rot_size(float rot[3][3], float size[3], float mat3[3][3])
}
}
-void mat4_to_loc_rot_size(float loc[3], float rot[3][3], float size[3], float wmat[4][4])
+void mat4_to_loc_rot_size(float loc[3], float rot[3][3], float size[3], const float wmat[4][4])
{
float mat3[3][3]; /* wmat -> 3x3 */
@@ -1555,7 +1610,7 @@ void mat4_to_loc_rot_size(float loc[3], float rot[3][3], float size[3], float wm
copy_v3_v3(loc, wmat[3]);
}
-void mat4_to_loc_quat(float loc[3], float quat[4], float wmat[4][4])
+void mat4_to_loc_quat(float loc[3], float quat[4], const float wmat[4][4])
{
float mat3[3][3];
float mat3_n[3][3]; /* normalized mat3 */
@@ -1573,7 +1628,7 @@ void mat4_to_loc_quat(float loc[3], float quat[4], float wmat[4][4])
copy_v3_v3(loc, wmat[3]);
}
-void mat4_decompose(float loc[3], float quat[4], float size[3], float wmat[4][4])
+void mat4_decompose(float loc[3], float quat[4], float size[3], const float wmat[4][4])
{
float rot[3][3];
mat4_to_loc_rot_size(loc, rot, size, wmat);
@@ -1590,7 +1645,7 @@ void mat4_decompose(float loc[3], float quat[4], float size[3], float wmat[4][4]
* See https://en.wikipedia.org/wiki/Polar_decomposition for more.
*/
#ifndef MATH_STANDALONE
-void mat3_polar_decompose(float mat3[3][3], float r_U[3][3], float r_P[3][3])
+void mat3_polar_decompose(const float mat3[3][3], float r_U[3][3], float r_P[3][3])
{
/* From svd decomposition (M = WSV*), we have:
* U = WV*
@@ -1701,7 +1756,7 @@ void transform_pivot_set_m4(float mat[4][4], const float pivot[3])
mul_m4_m4m4(mat, mat, tmat);
}
-void blend_m3_m3m3(float out[3][3], float dst[3][3], float src[3][3], const float srcweight)
+void blend_m3_m3m3(float out[3][3], const float dst[3][3], const float src[3][3], const float srcweight)
{
float srot[3][3], drot[3][3];
float squat[4], dquat[4], fquat[4];
@@ -1724,7 +1779,7 @@ void blend_m3_m3m3(float out[3][3], float dst[3][3], float src[3][3], const floa
mul_m3_m3m3(out, rmat, smat);
}
-void blend_m4_m4m4(float out[4][4], float dst[4][4], float src[4][4], const float srcweight)
+void blend_m4_m4m4(float out[4][4], const float dst[4][4], const float src[4][4], const float srcweight)
{
float sloc[3], dloc[3], floc[3];
float srot[3][3], drot[3][3];
@@ -1762,7 +1817,7 @@ void blend_m4_m4m4(float out[4][4], float dst[4][4], float src[4][4], const floa
* \param B: Input matrix which is totally effective with `t = 1.0`.
* \param t: Interpolation factor.
*/
-void interp_m3_m3m3(float R[3][3], float A[3][3], float B[3][3], const float t)
+void interp_m3_m3m3(float R[3][3], const float A[3][3], const float B[3][3], const float t)
{
/* 'Rotation' component ('U' part of polar decomposition, the closest orthogonal matrix to M3 rot/scale
* transformation matrix), spherically interpolated. */
@@ -1797,7 +1852,7 @@ void interp_m3_m3m3(float R[3][3], float A[3][3], float B[3][3], const float t)
* \param B: Input matrix which is totally effective with `t = 1.0`.
* \param t: Interpolation factor.
*/
-void interp_m4_m4m4(float R[4][4], float A[4][4], float B[4][4], const float t)
+void interp_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4], const float t)
{
float A3[3][3], B3[3][3], R3[3][3];
@@ -1818,27 +1873,27 @@ void interp_m4_m4m4(float R[4][4], float A[4][4], float B[4][4], const float t)
}
#endif /* MATH_STANDALONE */
-bool is_negative_m3(float mat[3][3])
+bool is_negative_m3(const float mat[3][3])
{
float vec[3];
cross_v3_v3v3(vec, mat[0], mat[1]);
return (dot_v3v3(vec, mat[2]) < 0.0f);
}
-bool is_negative_m4(float mat[4][4])
+bool is_negative_m4(const float mat[4][4])
{
float vec[3];
cross_v3_v3v3(vec, mat[0], mat[1]);
return (dot_v3v3(vec, mat[2]) < 0.0f);
}
-bool is_zero_m3(float mat[3][3])
+bool is_zero_m3(const float mat[3][3])
{
return (is_zero_v3(mat[0]) &&
is_zero_v3(mat[1]) &&
is_zero_v3(mat[2]));
}
-bool is_zero_m4(float mat[4][4])
+bool is_zero_m4(const float mat[4][4])
{
return (is_zero_v4(mat[0]) &&
is_zero_v4(mat[1]) &&
@@ -1846,14 +1901,14 @@ bool is_zero_m4(float mat[4][4])
is_zero_v4(mat[3]));
}
-bool equals_m3m3(float mat1[3][3], float mat2[3][3])
+bool equals_m3m3(const float mat1[3][3], const float mat2[3][3])
{
return (equals_v3v3(mat1[0], mat2[0]) &&
equals_v3v3(mat1[1], mat2[1]) &&
equals_v3v3(mat1[2], mat2[2]));
}
-bool equals_m4m4(float mat1[4][4], float mat2[4][4])
+bool equals_m4m4(const float mat1[4][4], const float mat2[4][4])
{
return (equals_v4v4(mat1[0], mat2[0]) &&
equals_v4v4(mat1[1], mat2[1]) &&
@@ -1944,7 +1999,7 @@ void loc_axisangle_size_to_mat4(float mat[4][4], const float loc[3], const float
/*********************************** Other ***********************************/
-void print_m3(const char *str, float m[3][3])
+void print_m3(const char *str, const float m[3][3])
{
printf("%s\n", str);
printf("%f %f %f\n", m[0][0], m[1][0], m[2][0]);
@@ -1953,7 +2008,7 @@ void print_m3(const char *str, float m[3][3])
printf("\n");
}
-void print_m4(const char *str, float m[4][4])
+void print_m4(const char *str, const float m[4][4])
{
printf("%s\n", str);
printf("%f %f %f %f\n", m[0][0], m[1][0], m[2][0], m[3][0]);
@@ -2407,7 +2462,7 @@ void svd_m4(float U[4][4], float s[4], float V[4][4], float A_[4][4])
}
}
-void pseudoinverse_m4_m4(float Ainv[4][4], float A_[4][4], float epsilon)
+void pseudoinverse_m4_m4(float Ainv[4][4], const float A_[4][4], float epsilon)
{
/* compute Moore-Penrose pseudo inverse of matrix, singular values
* below epsilon are ignored for stability (truncated SVD) */
@@ -2428,7 +2483,7 @@ void pseudoinverse_m4_m4(float Ainv[4][4], float A_[4][4], float epsilon)
mul_m4_series(Ainv, U, Wm, V);
}
-void pseudoinverse_m3_m3(float Ainv[3][3], float A[3][3], float epsilon)
+void pseudoinverse_m3_m3(float Ainv[3][3], const float A[3][3], float epsilon)
{
/* try regular inverse when possible, otherwise fall back to slow svd */
if (!invert_m3_m3(Ainv, A)) {
@@ -2440,14 +2495,14 @@ void pseudoinverse_m3_m3(float Ainv[3][3], float A[3][3], float epsilon)
}
}
-bool has_zero_axis_m4(float matrix[4][4])
+bool has_zero_axis_m4(const float matrix[4][4])
{
return len_squared_v3(matrix[0]) < FLT_EPSILON ||
len_squared_v3(matrix[1]) < FLT_EPSILON ||
len_squared_v3(matrix[2]) < FLT_EPSILON;
}
-void invert_m4_m4_safe(float Ainv[4][4], float A[4][4])
+void invert_m4_m4_safe(float Ainv[4][4], const float A[4][4])
{
if (!invert_m4_m4(Ainv, A)) {
float Atemp[4][4];
@@ -2495,7 +2550,7 @@ void invert_m4_m4_safe(float Ainv[4][4], float A[4][4])
* this defines a transform matrix TM such that (x', y', z') = TM * (x, y, z)
* where (x', y', z') are the coordinates of P' in target space such that it keeps (X, Y, Z) coordinates in global space.
*/
-void BLI_space_transform_from_matrices(SpaceTransform *data, float local[4][4], float target[4][4])
+void BLI_space_transform_from_matrices(SpaceTransform *data, const float local[4][4], const float target[4][4])
{
float itarget[4][4];
invert_m4_m4(itarget, target);
@@ -2513,7 +2568,7 @@ void BLI_space_transform_from_matrices(SpaceTransform *data, float local[4][4],
* this defines a transform matrix TM such that (X', Y', Z') = TM * (X, Y, Z)
* where (X', Y', Z') are the coordinates of p' in global space such that it keeps (x, y, z) coordinates in target space.
*/
-void BLI_space_transform_global_from_matrices(SpaceTransform *data, float local[4][4], float target[4][4])
+void BLI_space_transform_global_from_matrices(SpaceTransform *data, const float local[4][4], const float target[4][4])
{
float ilocal[4][4];
invert_m4_m4(ilocal, local);
diff --git a/source/blender/blenlib/intern/math_vector_inline.c b/source/blender/blenlib/intern/math_vector_inline.c
index 08687a1ab47..4f658ef015f 100644
--- a/source/blender/blenlib/intern/math_vector_inline.c
+++ b/source/blender/blenlib/intern/math_vector_inline.c
@@ -491,7 +491,7 @@ MINLINE void mul_v2_v2_ccw(float r[2], const float mat[2], const float vec[2])
* return co_4d[3];
* \endcode
*/
-MINLINE float mul_project_m4_v3_zfac(float mat[4][4], const float co[3])
+MINLINE float mul_project_m4_v3_zfac(const float mat[4][4], const float co[3])
{
return (mat[0][3] * co[0]) +
(mat[1][3] * co[1]) +
diff --git a/source/blender/blenlib/intern/scanfill_utils.c b/source/blender/blenlib/intern/scanfill_utils.c
index 3b6ab99ae86..ef1df479f13 100644
--- a/source/blender/blenlib/intern/scanfill_utils.c
+++ b/source/blender/blenlib/intern/scanfill_utils.c
@@ -95,20 +95,6 @@ void BLI_scanfill_obj_dump(ScanFillContext *sf_ctx)
}
#endif
-#if 0
-void BLI_scanfill_view3d_dump(ScanFillContext *sf_ctx)
-{
- ScanFillEdge *eed;
-
- bl_debug_draw_quad_clear();
- bl_debug_color_set(0x0000ff);
-
- for (eed = sf_ctx->filledgebase.first; eed; eed = eed->next) {
- bl_debug_draw_edge_add(eed->v1->co, eed->v2->co);
- }
-}
-#endif
-
static ListBase *edge_isect_ls_ensure(GHash *isect_hash, ScanFillEdge *eed)
{
ListBase *e_ls;
diff --git a/source/blender/blenloader/BLO_readfile.h b/source/blender/blenloader/BLO_readfile.h
index 4fd2e227bc5..0da15fe5bbc 100644
--- a/source/blender/blenloader/BLO_readfile.h
+++ b/source/blender/blenloader/BLO_readfile.h
@@ -39,15 +39,18 @@ extern "C" {
struct BlendThumbnail;
struct bScreen;
struct LinkNode;
+struct ListBase;
struct Main;
struct MemFile;
struct ReportList;
struct Scene;
+struct ViewLayer;
struct UserDef;
struct View3D;
struct bContext;
struct BHead;
struct FileData;
+struct wmWindowManager;
typedef struct BlendHandle BlendHandle;
@@ -64,13 +67,20 @@ typedef struct BlendFileData {
int fileflags;
int globalf;
char filename[1024]; /* 1024 = FILE_MAX */
-
- struct bScreen *curscreen;
+
+ struct bScreen *curscreen; /* TODO think this isn't needed anymore? */
struct Scene *curscene;
-
+ struct ViewLayer *cur_view_layer; /* layer to activate in workspaces when reading without UI */
+
eBlenFileType type;
} BlendFileData;
+typedef struct WorkspaceConfigFileData {
+ struct Main *main; /* has to be freed when done reading file data */
+
+ struct ListBase workspaces;
+} WorkspaceConfigFileData;
+
/* skip reading some data-block types (may want to skip screen data too). */
typedef enum eBLOReadSkip {
@@ -124,8 +134,9 @@ struct ID *BLO_library_link_named_part(struct Main *mainl, BlendHandle **bh, con
struct ID *BLO_library_link_named_part_ex(
struct Main *mainl, BlendHandle **bh,
const short idcode, const char *name, const int flag,
- struct Scene *scene, struct View3D *v3d);
-void BLO_library_link_end(struct Main *mainl, BlendHandle **bh, short flag, struct Scene *scene, struct View3D *v3d);
+ struct Scene *scene, struct ViewLayer *view_layer);
+void BLO_library_link_end(
+ struct Main *mainl, BlendHandle **bh, int flag, struct Scene *scene, struct ViewLayer *view_layer);
void BLO_library_link_copypaste(struct Main *mainl, BlendHandle *bh);
@@ -134,7 +145,9 @@ void *BLO_library_read_struct(struct FileData *fd, struct BHead *bh, const char
BlendFileData *blo_read_blendafterruntime(int file, const char *name, int actualsize, struct ReportList *reports);
/* internal function but we need to expose it */
-void blo_lib_link_screen_restore(struct Main *newmain, struct bScreen *curscreen, struct Scene *curscene);
+void blo_lib_link_restore(
+ struct Main *newmain, struct wmWindowManager *curwm,
+ struct Scene *curscene, struct ViewLayer *cur_render_layer);
typedef void (*BLOExpandDoitCallback) (void *fdhandle, struct Main *mainvar, void *idv);
diff --git a/source/blender/blenloader/CMakeLists.txt b/source/blender/blenloader/CMakeLists.txt
index 3d2e8a306de..61d1aa18b3c 100644
--- a/source/blender/blenloader/CMakeLists.txt
+++ b/source/blender/blenloader/CMakeLists.txt
@@ -29,6 +29,7 @@ set(INC
../blenkernel
../blenlib
../blentranslation
+ ../depsgraph
../imbuf
../makesdna
../makesrna
@@ -53,6 +54,7 @@ set(SRC
intern/versioning_250.c
intern/versioning_260.c
intern/versioning_270.c
+ intern/versioning_280.c
intern/versioning_defaults.c
intern/versioning_legacy.c
intern/writefile.c
@@ -79,6 +81,10 @@ if(WITH_INTERNATIONAL)
add_definitions(-DWITH_INTERNATIONAL)
endif()
+if(WITH_CLAY_ENGINE)
+ add_definitions(-DWITH_CLAY_ENGINE)
+endif()
+
if(WITH_CODEC_FFMPEG)
add_definitions(-DWITH_FFMPEG)
endif()
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 2a25de121b3..a91aeee52df 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -54,6 +54,10 @@
/* allow readfile to use deprecated functionality */
#define DNA_DEPRECATED_ALLOW
+/* Allow using DNA struct members that are marked as private for read/write.
+ * Note: Each header that uses this needs to define its own way of handling
+ * it. There's no generic implementation, direct use does nothing. */
+#define DNA_PRIVATE_READ_WRITE_ALLOW
#include "DNA_anim_types.h"
#include "DNA_armature_types.h"
@@ -73,6 +77,7 @@
#include "DNA_ipo_types.h"
#include "DNA_key_types.h"
#include "DNA_lattice_types.h"
+#include "DNA_layer_types.h"
#include "DNA_lamp_types.h"
#include "DNA_linestyle_types.h"
#include "DNA_meta_types.h"
@@ -85,6 +90,7 @@
#include "DNA_object_types.h"
#include "DNA_packedFile_types.h"
#include "DNA_particle_types.h"
+#include "DNA_lightprobe_types.h"
#include "DNA_property_types.h"
#include "DNA_rigidbody_types.h"
#include "DNA_text_types.h"
@@ -99,10 +105,13 @@
#include "DNA_sound_types.h"
#include "DNA_space_types.h"
#include "DNA_vfont_types.h"
+#include "DNA_workspace_types.h"
#include "DNA_world_types.h"
#include "DNA_movieclip_types.h"
#include "DNA_mask_types.h"
+#include "RNA_access.h"
+
#include "MEM_guardedalloc.h"
#include "BLI_endian_switch.h"
@@ -121,13 +130,14 @@
#include "BKE_constraint.h"
#include "BKE_context.h"
#include "BKE_curve.h"
-#include "BKE_depsgraph.h"
#include "BKE_effect.h"
#include "BKE_fcurve.h"
#include "BKE_global.h" // for G
#include "BKE_group.h"
+#include "BKE_layer.h"
#include "BKE_library.h" // for which_libbase
#include "BKE_library_idmap.h"
+#include "BKE_library_override.h"
#include "BKE_library_query.h"
#include "BKE_idcode.h"
#include "BKE_idprop.h"
@@ -149,6 +159,9 @@
#include "BKE_outliner_treehash.h"
#include "BKE_sound.h"
#include "BKE_colortools.h"
+#include "BKE_workspace.h"
+
+#include "DEG_depsgraph.h"
#include "NOD_common.h"
#include "NOD_socket.h"
@@ -248,9 +261,11 @@ typedef struct OldNewMap {
/* local prototypes */
static void *read_struct(FileData *fd, BHead *bh, const char *blockname);
static void direct_link_modifiers(FileData *fd, ListBase *lb);
-static void convert_tface_mt(FileData *fd, Main *main);
static BHead *find_bhead_from_code_name(FileData *fd, const short idcode, const char *name);
static BHead *find_bhead_from_idname(FileData *fd, const char *idname);
+static void expand_scene_collection(FileData *fd, Main *mainvar, SceneCollection *sc);
+static SceneCollection *get_scene_collection_active_or_create(
+ struct Scene *scene, struct ViewLayer *view_layer, const int flag);
/* this function ensures that reports are printed,
* in the case of libraray linking errors this is important!
@@ -2226,6 +2241,42 @@ static PreviewImage *direct_link_preview_image(FileData *fd, PreviewImage *old_p
/* ************ READ ID *************** */
+static void lib_link_id(FileData *fd, Main *main)
+{
+ ListBase *lbarray[MAX_LIBARRAY];
+ int base_count, i;
+
+ base_count = set_listbasepointers(main, lbarray);
+
+ for (i = 0; i < base_count; i++) {
+ ListBase *lb = lbarray[i];
+ ID *id;
+
+ for (id = lb->first; id; id = id->next) {
+ if (id->override_static) {
+ id->override_static->reference = newlibadr_us(fd, id->lib, id->override_static->reference);
+ id->override_static->storage = newlibadr_us(fd, id->lib, id->override_static->storage);
+ }
+ }
+ }
+}
+
+static void direct_link_id_override_property_operation_cb(FileData *fd, void *data)
+{
+ IDOverrideStaticPropertyOperation *opop = data;
+
+ opop->subitem_reference_name = newdataadr(fd, opop->subitem_reference_name);
+ opop->subitem_local_name = newdataadr(fd, opop->subitem_local_name);
+}
+
+static void direct_link_id_override_property_cb(FileData *fd, void *data)
+{
+ IDOverrideStaticProperty *op = data;
+
+ op->rna_path = newdataadr(fd, op->rna_path);
+ link_list_ex(fd, &op->operations, direct_link_id_override_property_operation_cb);
+}
+
static void direct_link_id(FileData *fd, ID *id)
{
/*link direct data of ID properties*/
@@ -2235,6 +2286,12 @@ static void direct_link_id(FileData *fd, ID *id)
IDP_DirectLinkGroup_OrFree(&id->properties, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd);
}
id->py_instance = NULL;
+
+ /* Link direct data of overrides. */
+ if (id->override_static) {
+ id->override_static = newdataadr(fd, id->override_static);
+ link_list_ex(fd, &id->override_static->properties, direct_link_id_override_property_cb);
+ }
}
/* ************ READ CurveMapping *************** */
@@ -2798,6 +2855,89 @@ static void direct_link_cachefile(FileData *fd, CacheFile *cache_file)
direct_link_animdata(fd, cache_file->adt);
}
+/* ************ READ WORKSPACES *************** */
+
+static void lib_link_workspaces(FileData *fd, Main *bmain)
+{
+ for (WorkSpace *workspace = bmain->workspaces.first; workspace; workspace = workspace->id.next) {
+ ListBase *layouts = BKE_workspace_layouts_get(workspace);
+ ID *id = (ID *)workspace;
+
+ if ((id->tag & LIB_TAG_NEED_LINK) == 0) {
+ continue;
+ }
+ IDP_LibLinkProperty(id->properties, fd);
+ id_us_ensure_real(id);
+
+ for (WorkSpaceDataRelation *relation = workspace->scene_viewlayer_relations.first;
+ relation != NULL;
+ relation = relation->next)
+ {
+ relation->parent = newlibadr(fd, id->lib, relation->parent);
+ /* relation->value is set in direct_link_workspace_link_scene_data */
+ }
+
+ for (WorkSpaceLayout *layout = layouts->first, *layout_next; layout; layout = layout_next) {
+ bScreen *screen = newlibadr(fd, id->lib, BKE_workspace_layout_screen_get(layout));
+
+ layout_next = layout->next;
+ if (screen) {
+ BKE_workspace_layout_screen_set(layout, screen);
+
+ if (ID_IS_LINKED(id)) {
+ screen->winid = 0;
+ if (screen->temp) {
+ /* delete temp layouts when appending */
+ BKE_workspace_layout_remove(bmain, workspace, layout);
+ }
+ }
+ }
+ }
+
+ id->tag &= ~LIB_TAG_NEED_LINK;
+ }
+}
+
+static void direct_link_workspace(FileData *fd, WorkSpace *workspace, const Main *main)
+{
+ link_list(fd, BKE_workspace_layouts_get(workspace));
+ link_list(fd, &workspace->hook_layout_relations);
+ link_list(fd, &workspace->scene_viewlayer_relations);
+ link_list(fd, BKE_workspace_transform_orientations_get(workspace));
+
+ for (WorkSpaceDataRelation *relation = workspace->hook_layout_relations.first;
+ relation;
+ relation = relation->next)
+ {
+ relation->parent = newglobadr(fd, relation->parent); /* data from window - need to access through global oldnew-map */
+ relation->value = newdataadr(fd, relation->value);
+ }
+
+ if (ID_IS_LINKED(&workspace->id)) {
+ /* Appending workspace so render layer is likely from a different scene. Unset
+ * now, when activating workspace later we set a valid one from current scene. */
+ BKE_workspace_relations_free(&workspace->scene_viewlayer_relations);
+ }
+
+ /* Same issue/fix as in direct_link_workspace_link_scene_data: Can't read workspace data
+ * when reading windows, so have to update windows after/when reading workspaces. */
+ for (wmWindowManager *wm = main->wm.first; wm; wm = wm->id.next) {
+ for (wmWindow *win = wm->windows.first; win; win = win->next) {
+ WorkSpaceLayout *act_layout = newdataadr(fd, BKE_workspace_active_layout_get(win->workspace_hook));
+ if (act_layout) {
+ BKE_workspace_active_layout_set(win->workspace_hook, act_layout);
+ }
+ }
+ }
+}
+
+static void lib_link_workspace_instance_hook(FileData *fd, WorkSpaceInstanceHook *hook, ID *id)
+{
+ WorkSpace *workspace = BKE_workspace_active_get(hook);
+ BKE_workspace_active_set(hook, newlibadr(fd, id->lib, workspace));
+}
+
+
/* ************ READ MOTION PATHS *************** */
/* direct data for cache */
@@ -3365,7 +3505,7 @@ static void lib_link_pose(FileData *fd, Main *bmain, Object *ob, bPose *pose)
if (rebuild) {
- DAG_id_tag_update_ex(bmain, &ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+ DEG_id_tag_update_ex(bmain, &ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
BKE_pose_tag_recalc(bmain, pose);
}
}
@@ -3443,6 +3583,11 @@ static void lib_link_camera(FileData *fd, Main *main)
ca->dof_ob = newlibadr(fd, ca->id.lib, ca->dof_ob);
+ for (CameraBGImage *bgpic = ca->bg_images.first; bgpic; bgpic = bgpic->next) {
+ bgpic->ima = newlibadr_us(fd, ca->id.lib, bgpic->ima);
+ bgpic->clip = newlibadr_us(fd, ca->id.lib, bgpic->clip);
+ }
+
ca->id.tag &= ~LIB_TAG_NEED_LINK;
}
}
@@ -3452,6 +3597,12 @@ static void direct_link_camera(FileData *fd, Camera *ca)
{
ca->adt = newdataadr(fd, ca->adt);
direct_link_animdata(fd, ca->adt);
+
+ link_list(fd, &ca->bg_images);
+
+ for (CameraBGImage *bgpic = ca->bg_images.first; bgpic; bgpic = bgpic->next) {
+ bgpic->iuser.ok = 1;
+ }
}
@@ -3619,6 +3770,7 @@ static void direct_link_mball(FileData *fd, MetaBall *mb)
mb->editelems = NULL;
/* mb->edit_elems.first= mb->edit_elems.last= NULL;*/
mb->lastelem = NULL;
+ mb->batch_cache = NULL;
}
/* ************ READ WORLD ***************** */
@@ -3891,6 +4043,7 @@ static void direct_link_curve(FileData *fd, Curve *cu)
cu->editnurb = NULL;
cu->editfont = NULL;
+ cu->batch_cache = NULL;
for (nu = cu->nurb.first; nu; nu = nu->next) {
nu->bezt = newdataadr(fd, nu->bezt);
@@ -4396,55 +4549,14 @@ static void direct_link_particlesystems(FileData *fd, ListBase *particles)
psys->tree = NULL;
psys->bvhtree = NULL;
+
+ psys->batch_cache = NULL;
}
return;
}
/* ************ READ MESH ***************** */
-static void lib_link_mtface(FileData *fd, Mesh *me, MTFace *mtface, int totface)
-{
- MTFace *tf= mtface;
- int i;
-
- /* Add pseudo-references (not fake users!) to images used by texface. A
- * little bogus; it would be better if each mesh consistently added one ref
- * to each image it used. - z0r */
- for (i = 0; i < totface; i++, tf++) {
- tf->tpage = newlibadr_real_us(fd, me->id.lib, tf->tpage);
- }
-}
-
-static void lib_link_customdata_mtface(FileData *fd, Mesh *me, CustomData *fdata, int totface)
-{
- int i;
- for (i = 0; i < fdata->totlayer; i++) {
- CustomDataLayer *layer = &fdata->layers[i];
-
- if (layer->type == CD_MTFACE)
- lib_link_mtface(fd, me, layer->data, totface);
- }
-
-}
-
-static void lib_link_customdata_mtpoly(FileData *fd, Mesh *me, CustomData *pdata, int totface)
-{
- int i;
-
- for (i=0; i < pdata->totlayer; i++) {
- CustomDataLayer *layer = &pdata->layers[i];
-
- if (layer->type == CD_MTEXPOLY) {
- MTexPoly *tf= layer->data;
- int j;
-
- for (j = 0; j < totface; j++, tf++) {
- tf->tpage = newlibadr_real_us(fd, me->id.lib, tf->tpage);
- }
- }
- }
-}
-
static void lib_link_mesh(FileData *fd, Main *main)
{
Mesh *me;
@@ -4471,19 +4583,9 @@ static void lib_link_mesh(FileData *fd, Main *main)
me->ipo = newlibadr_us(fd, me->id.lib, me->ipo); // XXX: deprecated: old anim sys
me->key = newlibadr_us(fd, me->id.lib, me->key);
me->texcomesh = newlibadr_us(fd, me->id.lib, me->texcomesh);
-
- lib_link_customdata_mtface(fd, me, &me->fdata, me->totface);
- lib_link_customdata_mtpoly(fd, me, &me->pdata, me->totpoly);
- if (me->mr && me->mr->levels.first) {
- lib_link_customdata_mtface(fd, me, &me->mr->fdata,
- ((MultiresLevel*)me->mr->levels.first)->totface);
- }
}
}
- /* convert texface options to material */
- convert_tface_mt(fd, main);
-
for (me = main->mesh.first; me; me = me->id.next) {
if (me->id.tag & LIB_TAG_NEED_LINK) {
/*check if we need to convert mfaces to mpolys*/
@@ -4639,7 +4741,6 @@ static void direct_link_mesh(FileData *fd, Mesh *mesh)
mesh->dvert = newdataadr(fd, mesh->dvert);
mesh->mloopcol = newdataadr(fd, mesh->mloopcol);
mesh->mloopuv = newdataadr(fd, mesh->mloopuv);
- mesh->mtpoly = newdataadr(fd, mesh->mtpoly);
mesh->mselect = newdataadr(fd, mesh->mselect);
/* animdata */
@@ -4658,18 +4759,13 @@ static void direct_link_mesh(FileData *fd, Mesh *mesh)
mesh->bb = NULL;
mesh->edit_btmesh = NULL;
+ mesh->batch_cache = NULL;
/* happens with old files */
if (mesh->mselect == NULL) {
mesh->totselect = 0;
}
- if (mesh->mloopuv || mesh->mtpoly) {
- /* for now we have to ensure texpoly and mloopuv layers are aligned
- * in the future we may allow non-aligned layers */
- BKE_mesh_cd_validate(mesh);
- }
-
/* Multires data */
mesh->mr= newdataadr(fd, mesh->mr);
if (mesh->mr) {
@@ -4749,6 +4845,7 @@ static void direct_link_latt(FileData *fd, Lattice *lt)
direct_link_dverts(fd, lt->pntsu*lt->pntsv*lt->pntsw, lt->dvert);
lt->editlatt = NULL;
+ lt->batch_cache = NULL;
lt->adt = newdataadr(fd, lt->adt);
direct_link_animdata(fd, lt->adt);
@@ -4791,7 +4888,15 @@ static void lib_link_object(FileData *fd, Main *main)
ob->parent = newlibadr(fd, ob->id.lib, ob->parent);
ob->track = newlibadr(fd, ob->id.lib, ob->track);
ob->poselib = newlibadr_us(fd, ob->id.lib, ob->poselib);
- ob->dup_group = newlibadr_us(fd, ob->id.lib, ob->dup_group);
+
+ /* 2.8x drops support for non-empty dupli instances. */
+ if (ob->type == OB_EMPTY) {
+ ob->dup_group = newlibadr_us(fd, ob->id.lib, ob->dup_group);
+ }
+ else {
+ ob->dup_group = NULL;
+ ob->transflag &= ~OB_DUPLIGROUP;
+ }
ob->proxy = newlibadr_us(fd, ob->id.lib, ob->proxy);
if (ob->proxy) {
@@ -4835,8 +4940,7 @@ static void lib_link_object(FileData *fd, Main *main)
#else
MEM_freeN(ob->pose);
#endif
- ob->pose= NULL;
- ob->mode &= ~OB_MODE_POSE;
+ ob->pose = NULL;
}
}
for (a=0; a < ob->totcol; a++)
@@ -5097,6 +5201,8 @@ static void direct_link_pose(FileData *fd, bPose *pose)
/* in case this value changes in future, clamp else we get undefined behavior */
CLAMP(pchan->rotmode, ROT_MODE_MIN, ROT_MODE_MAX);
+
+ pchan->draw_data = NULL;
}
pose->ikdata = NULL;
if (pose->ikparam != NULL) {
@@ -5439,26 +5545,8 @@ static void direct_link_object(FileData *fd, Object *ob)
/* weak weak... this was only meant as draw flag, now is used in give_base_to_objects too */
ob->flag &= ~OB_FROMGROUP;
- /* This is a transient flag; clear in order to avoid unneeded object update pending from
- * time when file was saved.
- */
- ob->recalc = 0;
-
/* XXX This should not be needed - but seems like it can happen in some cases, so for now play safe... */
ob->proxy_from = NULL;
-
- /* loading saved files with editmode enabled works, but for undo we like
- * to stay in object mode during undo presses so keep editmode disabled.
- *
- * Also when linking in a file don't allow edit and pose modes.
- * See [#34776, #42780] for more information.
- */
- if (fd->memfile || (ob->id.tag & (LIB_TAG_EXTERN | LIB_TAG_INDIRECT))) {
- ob->mode &= ~(OB_MODE_EDIT | OB_MODE_PARTICLE_EDIT);
- if (!fd->memfile) {
- ob->mode &= ~OB_MODE_POSE;
- }
- }
ob->adt = newdataadr(fd, ob->adt);
direct_link_animdata(fd, ob->adt);
@@ -5471,6 +5559,7 @@ static void direct_link_object(FileData *fd, Object *ob)
direct_link_motionpath(fd, ob->mpath);
link_list(fd, &ob->defbase);
+ link_list(fd, &ob->fmaps);
// XXX deprecated - old animation system <<<
direct_link_nlastrips(fd, &ob->nlastrips);
link_list(fd, &ob->constraintChannels);
@@ -5657,6 +5746,7 @@ static void direct_link_object(FileData *fd, Object *ob)
ob->derivedDeform = NULL;
ob->derivedFinal = NULL;
BLI_listbase_clear(&ob->gpulamp);
+ BLI_listbase_clear(&ob->drawdata);
link_list(fd, &ob->pc_ids);
/* Runtime curve data */
@@ -5673,6 +5763,8 @@ static void direct_link_object(FileData *fd, Object *ob)
ob->currentlod = ob->lodlevels.first;
ob->preview = direct_link_preview_image(fd, ob->preview);
+
+ ob->base_collection_properties = NULL;
}
/* ************ READ SCENE ***************** */
@@ -5737,6 +5829,40 @@ static bool scene_validate_setscene__liblink(Scene *sce, const int totscene)
}
#endif
+static void lib_link_scene_collection(FileData *fd, Library *lib, SceneCollection *sc)
+{
+ for (LinkData *link = sc->objects.first; link; link = link->next) {
+ link->data = newlibadr_us(fd, lib, link->data);
+ BLI_assert(link->data);
+ }
+
+ for (SceneCollection *nsc = sc->scene_collections.first; nsc; nsc = nsc->next) {
+ lib_link_scene_collection(fd, lib, nsc);
+ }
+}
+
+static void lib_link_view_layer(FileData *fd, Library *lib, ViewLayer *view_layer)
+{
+ /* tag scene layer to update for collection tree evaluation */
+ view_layer->flag |= VIEW_LAYER_ENGINE_DIRTY;
+
+ for (FreestyleModuleConfig *fmc = view_layer->freestyle_config.modules.first; fmc; fmc = fmc->next) {
+ fmc->script = newlibadr(fd, lib, fmc->script);
+ }
+
+ for (FreestyleLineSet *fls = view_layer->freestyle_config.linesets.first; fls; fls = fls->next) {
+ fls->linestyle = newlibadr_us(fd, lib, fls->linestyle);
+ fls->group = newlibadr_us(fd, lib, fls->group);
+ }
+
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ /* we only bump the use count for the collection objects */
+ base->object = newlibadr(fd, lib, base->object);
+ base->flag |= BASE_DIRTY_ENGINE_SETTINGS;
+ base->collection_properties = NULL;
+ }
+}
+
static void lib_link_scene(FileData *fd, Main *main)
{
#ifdef USE_SETSCENE_CHECK
@@ -5784,17 +5910,17 @@ static void lib_link_scene(FileData *fd, Main *main)
sce->toolsettings->particle.shape_object = newlibadr(fd, sce->id.lib, sce->toolsettings->particle.shape_object);
- for (Base *next, *base = sce->base.first; base; base = next) {
- next = base->next;
+ for (Base *base_legacy_next, *base_legacy = sce->base.first; base_legacy; base_legacy = base_legacy_next) {
+ base_legacy_next = base_legacy->next;
- base->object = newlibadr_us(fd, sce->id.lib, base->object);
+ base_legacy->object = newlibadr_us(fd, sce->id.lib, base_legacy->object);
- if (base->object == NULL) {
+ if (base_legacy->object == NULL) {
blo_reportf_wrap(fd->reports, RPT_WARNING, TIP_("LIB: object lost from scene: '%s'"),
sce->id.name + 2);
- BLI_remlink(&sce->base, base);
- if (base == sce->basact) sce->basact = NULL;
- MEM_freeN(base);
+ BLI_remlink(&sce->base, base_legacy);
+ if (base_legacy == sce->basact) sce->basact = NULL;
+ MEM_freeN(base_legacy);
}
}
@@ -5868,7 +5994,6 @@ static void lib_link_scene(FileData *fd, Main *main)
for (SceneRenderLayer *srl = sce->r.layers.first; srl; srl = srl->next) {
srl->mat_override = newlibadr_us(fd, sce->id.lib, srl->mat_override);
- srl->light_override = newlibadr_us(fd, sce->id.lib, srl->light_override);
for (FreestyleModuleConfig *fmc = srl->freestyleConfig.modules.first; fmc; fmc = fmc->next) {
fmc->script = newlibadr(fd, sce->id.lib, fmc->script);
}
@@ -5883,6 +6008,12 @@ static void lib_link_scene(FileData *fd, Main *main)
/* Motion Tracking */
sce->clip = newlibadr_us(fd, sce->id.lib, sce->clip);
+ lib_link_scene_collection(fd, sce->id.lib, sce->collection);
+
+ for (ViewLayer *view_layer = sce->view_layers.first; view_layer; view_layer = view_layer->next) {
+ lib_link_view_layer(fd, sce->id.lib, view_layer);
+ }
+
#ifdef USE_SETSCENE_CHECK
if (sce->set != NULL) {
/* link flag for scenes with set would be reset later,
@@ -5986,18 +6117,106 @@ static void direct_link_view_settings(FileData *fd, ColorManagedViewSettings *vi
direct_link_curvemapping(fd, view_settings->curve_mapping);
}
-static void direct_link_scene(FileData *fd, Scene *sce)
+static void direct_link_scene_collection(FileData *fd, SceneCollection *sc)
+{
+ link_list(fd, &sc->objects);
+ link_list(fd, &sc->scene_collections);
+
+ for (SceneCollection *nsc = sc->scene_collections.first; nsc; nsc = nsc->next) {
+ direct_link_scene_collection(fd, nsc);
+ }
+}
+
+static void direct_link_layer_collections(FileData *fd, ListBase *lb)
+{
+ link_list(fd, lb);
+ for (LayerCollection *lc = lb->first; lc; lc = lc->next) {
+ lc->scene_collection = newdataadr(fd, lc->scene_collection);
+
+ link_list(fd, &lc->object_bases);
+
+ for (LinkData *link = lc->object_bases.first; link; link = link->next) {
+ link->data = newdataadr(fd, link->data);
+ }
+
+ link_list(fd, &lc->overrides);
+
+ if (lc->properties) {
+ lc->properties = newdataadr(fd, lc->properties);
+ IDP_DirectLinkGroup_OrFree(&lc->properties, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd);
+ BKE_layer_collection_engine_settings_validate_collection(lc);
+ }
+ lc->properties_evaluated = NULL;
+
+ direct_link_layer_collections(fd, &lc->layer_collections);
+ }
+}
+
+static void direct_link_view_layer(FileData *fd, ViewLayer *view_layer)
+{
+ view_layer->stats = NULL;
+ link_list(fd, &view_layer->object_bases);
+ view_layer->basact = newdataadr(fd, view_layer->basact);
+ direct_link_layer_collections(fd, &view_layer->layer_collections);
+
+ if (view_layer->properties != NULL) {
+ view_layer->properties = newdataadr(fd, view_layer->properties);
+ BLI_assert(view_layer->properties != NULL);
+ IDP_DirectLinkGroup_OrFree(&view_layer->properties, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd);
+ BKE_view_layer_engine_settings_validate_layer(view_layer);
+ }
+
+ view_layer->id_properties = newdataadr(fd, view_layer->id_properties);
+ IDP_DirectLinkGroup_OrFree(&view_layer->id_properties, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd);
+
+ link_list(fd, &(view_layer->freestyle_config.modules));
+ link_list(fd, &(view_layer->freestyle_config.linesets));
+
+ view_layer->properties_evaluated = NULL;
+
+ BLI_listbase_clear(&view_layer->drawdata);
+}
+
+/**
+ * Workspaces store a render layer pointer which can only be read after scene is read.
+ */
+static void direct_link_workspace_link_scene_data(
+ FileData *fd, Scene *scene, const ListBase *workspaces)
+{
+ for (WorkSpace *workspace = workspaces->first; workspace; workspace = workspace->id.next) {
+ for (WorkSpaceDataRelation *relation = workspace->scene_viewlayer_relations.first;
+ relation != NULL;
+ relation = relation->next)
+ {
+ ViewLayer *layer = newdataadr(fd, relation->value);
+ if (layer) {
+ BLI_assert(BLI_findindex(&scene->view_layers, layer) != -1);
+ /* relation->parent is set in lib_link_workspaces */
+ relation->value = layer;
+ }
+ }
+
+ if (workspace->view_layer) { /* this was temporariliy used during 2.8 project. Keep files compatible */
+ ViewLayer *layer = newdataadr(fd, workspace->view_layer);
+ /* only set when layer is from the scene we read */
+ if (layer && (BLI_findindex(&scene->view_layers, layer) != -1)) {
+ workspace->view_layer = layer;
+ }
+ }
+ }
+}
+
+static void direct_link_scene(FileData *fd, Scene *sce, Main *bmain)
{
Editing *ed;
Sequence *seq;
MetaStack *ms;
RigidBodyWorld *rbw;
+ ViewLayer *view_layer;
SceneRenderLayer *srl;
- sce->theDag = NULL;
- sce->depsgraph = NULL;
+ sce->depsgraph_hash = NULL;
sce->obedit = NULL;
- sce->stats = NULL;
sce->fps_info = NULL;
sce->customdata_mask_modal = 0;
sce->lay_updated = 0;
@@ -6029,6 +6248,7 @@ static void direct_link_scene(FileData *fd, Scene *sce)
sce->toolsettings->imapaint.paintcursor = NULL;
sce->toolsettings->particle.paintcursor = NULL;
sce->toolsettings->particle.scene = NULL;
+ sce->toolsettings->particle.view_layer = NULL;
sce->toolsettings->particle.object = NULL;
sce->toolsettings->gp_sculpt.paintcursor = NULL;
@@ -6174,12 +6394,7 @@ static void direct_link_scene(FileData *fd, Scene *sce)
}
}
}
-
-#ifdef DURIAN_CAMERA_SWITCH
- /* Runtime */
- sce->r.mode &= ~R_NO_CAMERA_SWITCH;
-#endif
-
+
sce->r.avicodecdata = newdataadr(fd, sce->r.avicodecdata);
if (sce->r.avicodecdata) {
sce->r.avicodecdata->lpFormat = newdataadr(fd, sce->r.avicodecdata->lpFormat);
@@ -6191,7 +6406,7 @@ static void direct_link_scene(FileData *fd, Scene *sce)
}
link_list(fd, &(sce->markers));
- link_list(fd, &(sce->transform_spaces));
+ link_list(fd, &(sce->transform_spaces)); /* only for old files */
link_list(fd, &(sce->r.layers));
link_list(fd, &(sce->r.views));
@@ -6199,11 +6414,7 @@ static void direct_link_scene(FileData *fd, Scene *sce)
for (srl = sce->r.layers.first; srl; srl = srl->next) {
srl->prop = newdataadr(fd, srl->prop);
IDP_DirectLinkGroup_OrFree(&srl->prop, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd);
- }
- for (srl = sce->r.layers.first; srl; srl = srl->next) {
link_list(fd, &(srl->freestyleConfig.modules));
- }
- for (srl = sce->r.layers.first; srl; srl = srl->next) {
link_list(fd, &(srl->freestyleConfig.linesets));
}
@@ -6241,6 +6452,29 @@ static void direct_link_scene(FileData *fd, Scene *sce)
sce->preview = direct_link_preview_image(fd, sce->preview);
direct_link_curvemapping(fd, &sce->r.mblur_shutter_curve);
+
+ /* this runs before the very first doversion */
+ if (sce->collection) {
+ sce->collection = newdataadr(fd, sce->collection);
+ direct_link_scene_collection(fd, sce->collection);
+ }
+
+ /* insert into global old-new map for reading without UI (link_global accesses it again) */
+ link_glob_list(fd, &sce->view_layers);
+ for (view_layer = sce->view_layers.first; view_layer; view_layer = view_layer->next) {
+ direct_link_view_layer(fd, view_layer);
+ }
+
+ sce->collection_properties = newdataadr(fd, sce->collection_properties);
+ IDP_DirectLinkGroup_OrFree(&sce->collection_properties, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd);
+
+ sce->layer_properties = newdataadr(fd, sce->layer_properties);
+ IDP_DirectLinkGroup_OrFree(&sce->layer_properties, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd);
+
+ BKE_layer_collection_engine_settings_validate_scene(sce);
+ BKE_view_layer_engine_settings_validate_scene(sce);
+
+ direct_link_workspace_link_scene_data(fd, sce, &bmain->workspaces);
}
/* ************ READ WM ***************** */
@@ -6253,6 +6487,12 @@ static void direct_link_windowmanager(FileData *fd, wmWindowManager *wm)
link_list(fd, &wm->windows);
for (win = wm->windows.first; win; win = win->next) {
+ WorkSpaceInstanceHook *hook = win->workspace_hook;
+
+ win->workspace_hook = newdataadr(fd, hook);
+ /* we need to restore a pointer to this later when reading workspaces, so store in global oldnew-map */
+ oldnewmap_insert(fd->globmap, hook, win->workspace_hook, 0);
+
win->ghostwin = NULL;
win->eventstate = NULL;
win->curswin = NULL;
@@ -6298,6 +6538,8 @@ static void direct_link_windowmanager(FileData *fd, wmWindowManager *wm)
wm->addonconf = NULL;
wm->userconf = NULL;
+ wm->message_bus = NULL;
+
BLI_listbase_clear(&wm->jobs);
BLI_listbase_clear(&wm->drags);
@@ -6317,6 +6559,11 @@ static void lib_link_windowmanager(FileData *fd, Main *main)
if (wm->id.tag & LIB_TAG_NEED_LINK) {
/* Note: WM IDProperties are never written to file, hence no need to read/link them here. */
for (win = wm->windows.first; win; win = win->next) {
+ if (win->workspace_hook) { /* NULL for old files */
+ lib_link_workspace_instance_hook(fd, win->workspace_hook, &wm->id);
+ }
+ win->scene = newlibadr(fd, wm->id.lib, win->scene);
+ /* deprecated, but needed for versioning (will be NULL'ed then) */
win->screen = newlibadr(fd, NULL, win->screen);
}
@@ -6402,13 +6649,9 @@ static void lib_link_screen(FileData *fd, Main *main)
IDP_LibLinkProperty(sc->id.properties, fd);
id_us_ensure_real(&sc->id);
+ /* deprecated, but needed for versioning (will be NULL'ed then) */
sc->scene = newlibadr(fd, sc->id.lib, sc->scene);
- /* this should not happen, but apparently it does somehow. Until we figure out the cause,
- * just assign first available scene */
- if (!sc->scene)
- sc->scene = main->scene.first;
-
sc->animtimer = NULL; /* saved in rare cases */
sc->tool_tip = NULL;
sc->scrubbing = false;
@@ -6421,22 +6664,10 @@ static void lib_link_screen(FileData *fd, Main *main)
case SPACE_VIEW3D:
{
View3D *v3d = (View3D*) sl;
- BGpic *bgpic = NULL;
v3d->camera= newlibadr(fd, sc->id.lib, v3d->camera);
v3d->ob_centre= newlibadr(fd, sc->id.lib, v3d->ob_centre);
- /* should be do_versions but not easy adding into the listbase */
- if (v3d->bgpic) {
- v3d->bgpic = newlibadr(fd, sc->id.lib, v3d->bgpic);
- BLI_addtail(&v3d->bgpicbase, bgpic);
- v3d->bgpic = NULL;
- }
-
- for (bgpic = v3d->bgpicbase.first; bgpic; bgpic = bgpic->next) {
- bgpic->ima = newlibadr_us(fd, sc->id.lib, bgpic->ima);
- bgpic->clip = newlibadr_us(fd, sc->id.lib, bgpic->clip);
- }
if (v3d->localvd) {
v3d->localvd->camera = newlibadr(fd, sc->id.lib, v3d->localvd->camera);
}
@@ -6717,88 +6948,60 @@ static void lib_link_clipboard_restore(struct IDNameLib_Map *id_map)
BKE_sequencer_base_recursive_apply(&seqbase_clipboard, lib_link_seq_clipboard_cb, id_map);
}
-/* called from kernel/blender.c */
-/* used to link a file (without UI) to the current UI */
-/* note that it assumes the old pointers in UI are still valid, so old Main is not freed */
-void blo_lib_link_screen_restore(Main *newmain, bScreen *curscreen, Scene *curscene)
+static void lib_link_workspace_scene_data_restore(wmWindow *win, Scene *scene)
{
- wmWindow *win;
- wmWindowManager *wm;
- bScreen *sc;
- ScrArea *sa;
+ bScreen *screen = BKE_workspace_active_screen_get(win->workspace_hook);
- struct IDNameLib_Map *id_map = BKE_main_idmap_create(newmain);
+ for (ScrArea *area = screen->areabase.first; area; area = area->next) {
+ for (SpaceLink *sl = area->spacedata.first; sl; sl = sl->next) {
+ if (sl->spacetype == SPACE_VIEW3D) {
+ View3D *v3d = (View3D *)sl;
- /* first windowmanager */
- for (wm = newmain->wm.first; wm; wm = wm->id.next) {
- for (win= wm->windows.first; win; win= win->next) {
- win->screen = restore_pointer_by_name(id_map, (ID *)win->screen, USER_REAL);
-
- if (win->screen == NULL)
- win->screen = curscreen;
-
- win->screen->winid = win->winid;
+ if (v3d->camera == NULL || v3d->scenelock) {
+ v3d->camera = scene->camera;
+ }
+
+ if (v3d->localvd) {
+ /*Base *base;*/
+
+ v3d->localvd->camera = scene->camera;
+
+ /* localview can become invalid during undo/redo steps, so we exit it when no could be found */
+#if 0 /* XXX regionlocalview ? */
+ for (base= sc->scene->base.first; base; base= base->next) {
+ if (base->lay & v3d->lay) break;
+ }
+ if (base==NULL) {
+ v3d->lay= v3d->localvd->lay;
+ v3d->layact= v3d->localvd->layact;
+ MEM_freeN(v3d->localvd);
+ v3d->localvd= NULL;
+ }
+#endif
+ }
+ else if (v3d->scenelock) {
+ v3d->lay = scene->lay;
+ }
+ }
}
}
-
-
- for (sc = newmain->screen.first; sc; sc = sc->id.next) {
- Scene *oldscene = sc->scene;
-
- sc->scene= restore_pointer_by_name(id_map, (ID *)sc->scene, USER_REAL);
- if (sc->scene == NULL)
- sc->scene = curscene;
-
- /* keep cursor location through undo */
- copy_v3_v3(sc->scene->cursor, oldscene->cursor);
-
- for (sa = sc->areabase.first; sa; sa = sa->next) {
- SpaceLink *sl;
-
- for (sl = sa->spacedata.first; sl; sl = sl->next) {
+}
+
+static void lib_link_workspace_layout_restore(struct IDNameLib_Map *id_map, Main *newmain, WorkSpaceLayout *layout)
+{
+ bScreen *screen = BKE_workspace_layout_screen_get(layout);
+
+ /* avoid conflicts with 2.8x branch */
+ {
+ for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
+ for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) {
if (sl->spacetype == SPACE_VIEW3D) {
View3D *v3d = (View3D *)sl;
- BGpic *bgpic;
ARegion *ar;
- if (v3d->scenelock)
- v3d->camera = NULL; /* always get from scene */
- else
- v3d->camera = restore_pointer_by_name(id_map, (ID *)v3d->camera, USER_REAL);
- if (v3d->camera == NULL)
- v3d->camera = sc->scene->camera;
+ v3d->camera = restore_pointer_by_name(id_map, (ID *)v3d->camera, USER_REAL);
v3d->ob_centre = restore_pointer_by_name(id_map, (ID *)v3d->ob_centre, USER_REAL);
-
- for (bgpic= v3d->bgpicbase.first; bgpic; bgpic= bgpic->next) {
- if ((bgpic->ima = restore_pointer_by_name(id_map, (ID *)bgpic->ima, USER_IGNORE))) {
- id_us_plus((ID *)bgpic->ima);
- }
- if ((bgpic->clip = restore_pointer_by_name(id_map, (ID *)bgpic->clip, USER_IGNORE))) {
- id_us_plus((ID *)bgpic->clip);
- }
- }
- if (v3d->localvd) {
- /*Base *base;*/
-
- v3d->localvd->camera = sc->scene->camera;
-
- /* localview can become invalid during undo/redo steps, so we exit it when no could be found */
-#if 0 /* XXX regionlocalview ? */
- for (base= sc->scene->base.first; base; base= base->next) {
- if (base->lay & v3d->lay) break;
- }
- if (base==NULL) {
- v3d->lay= v3d->localvd->lay;
- v3d->layact= v3d->localvd->layact;
- MEM_freeN(v3d->localvd);
- v3d->localvd= NULL;
- }
-#endif
- }
- else if (v3d->scenelock) {
- v3d->lay = sc->scene->lay;
- }
-
+
/* not very nice, but could help */
if ((v3d->layact & v3d->lay) == 0) v3d->layact = v3d->lay;
@@ -7000,6 +7203,44 @@ void blo_lib_link_screen_restore(Main *newmain, bScreen *curscreen, Scene *cursc
}
}
}
+}
+
+/**
+ * Used to link a file (without UI) to the current UI.
+ * Note that it assumes the old pointers in UI are still valid, so old Main is not freed.
+ */
+void blo_lib_link_restore(Main *newmain, wmWindowManager *curwm, Scene *curscene, ViewLayer *cur_view_layer)
+{
+ struct IDNameLib_Map *id_map = BKE_main_idmap_create(newmain);
+
+ for (WorkSpace *workspace = newmain->workspaces.first; workspace; workspace = workspace->id.next) {
+ ListBase *layouts = BKE_workspace_layouts_get(workspace);
+
+ for (WorkSpaceLayout *layout = layouts->first; layout; layout = layout->next) {
+ lib_link_workspace_layout_restore(id_map, newmain, layout);
+ }
+ BKE_workspace_view_layer_set(workspace, cur_view_layer, curscene);
+ }
+
+ for (wmWindow *win = curwm->windows.first; win; win = win->next) {
+ WorkSpace *workspace = BKE_workspace_active_get(win->workspace_hook);
+ ID *workspace_id = (ID *)workspace;
+ Scene *oldscene = win->scene;
+
+ workspace = restore_pointer_by_name(id_map, workspace_id, USER_REAL);
+ BKE_workspace_active_set(win->workspace_hook, workspace);
+ win->scene = restore_pointer_by_name(id_map, (ID *)win->scene, USER_REAL);
+ if (win->scene == NULL) {
+ win->scene = curscene;
+ }
+ BKE_workspace_active_set(win->workspace_hook, workspace);
+
+ /* keep cursor location through undo */
+ copy_v3_v3(win->scene->cursor, oldscene->cursor);
+ lib_link_workspace_scene_data_restore(win, win->scene);
+
+ BLI_assert(win->screen == NULL);
+ }
/* update IDs stored in all possible clipboards */
lib_link_clipboard_restore(id_map);
@@ -7053,6 +7294,7 @@ static void direct_link_region(FileData *fd, ARegion *ar, int spacetype)
rv3d->sms = NULL;
rv3d->smooth_timer = NULL;
rv3d->compositor = NULL;
+ rv3d->viewport = NULL;
}
}
}
@@ -7069,6 +7311,7 @@ static void direct_link_region(FileData *fd, ARegion *ar, int spacetype)
ar->type = NULL;
ar->swap = 0;
ar->do_draw = 0;
+ ar->manipulator_map = NULL;
ar->regiontimer = NULL;
memset(&ar->drawrct, 0, sizeof(ar->drawrct));
}
@@ -7115,6 +7358,8 @@ static bool direct_link_screen(FileData *fd, bScreen *sc)
sc->mainwin = sc->subwinactive= 0; /* indices */
sc->swap = 0;
+ sc->preview = direct_link_preview_image(fd, sc->preview);
+
/* edges */
for (se = sc->edgebase.first; se; se = se->next) {
se->v1 = newdataadr(fd, se->v1);
@@ -7179,22 +7424,8 @@ static bool direct_link_screen(FileData *fd, bScreen *sc)
if (sl->spacetype == SPACE_VIEW3D) {
View3D *v3d= (View3D*) sl;
- BGpic *bgpic;
-
v3d->flag |= V3D_INVALID_BACKBUF;
- link_list(fd, &v3d->bgpicbase);
-
- /* should be do_versions except this doesnt fit well there */
- if (v3d->bgpic) {
- bgpic = newdataadr(fd, v3d->bgpic);
- BLI_addtail(&v3d->bgpicbase, bgpic);
- v3d->bgpic = NULL;
- }
-
- for (bgpic = v3d->bgpicbase.first; bgpic; bgpic = bgpic->next)
- bgpic->iuser.ok = 1;
-
if (v3d->gpd) {
v3d->gpd = newdataadr(fd, v3d->gpd);
direct_link_gpencil(fd, v3d->gpd);
@@ -7480,6 +7711,26 @@ static void fix_relpaths_library(const char *basepath, Main *main)
}
}
+/* ************ READ PROBE ***************** */
+
+static void lib_link_lightprobe(FileData *fd, Main *main)
+{
+ for (LightProbe *prb = main->speaker.first; prb; prb = prb->id.next) {
+ if (prb->id.tag & LIB_TAG_NEED_LINK) {
+ IDP_LibLinkProperty(prb->id.properties, fd);
+ lib_link_animdata(fd, &prb->id, prb->adt);
+
+ prb->id.tag &= ~LIB_TAG_NEED_LINK;
+ }
+ }
+}
+
+static void direct_link_lightprobe(FileData *fd, LightProbe *prb)
+{
+ prb->adt = newdataadr(fd, prb->adt);
+ direct_link_animdata(fd, prb->adt);
+}
+
/* ************ READ SPEAKER ***************** */
static void lib_link_speaker(FileData *fd, Main *main)
@@ -7559,30 +7810,61 @@ static void direct_link_group(FileData *fd, Group *group)
link_list(fd, &group->gobject);
group->preview = direct_link_preview_image(fd, group->preview);
+
+ /* This runs before the very first doversion. */
+ if (group->collection != NULL) {
+ group->collection = newdataadr(fd, group->collection);
+ direct_link_scene_collection(fd, group->collection);
+ }
+
+ if (group->view_layer != NULL) {
+ group->view_layer = newdataadr(fd, group->view_layer);
+ direct_link_view_layer(fd, group->view_layer);
+ }
}
static void lib_link_group(FileData *fd, Main *main)
{
for (Group *group = main->group.first; group; group = group->id.next) {
if (group->id.tag & LIB_TAG_NEED_LINK) {
+ group->id.tag &= ~LIB_TAG_NEED_LINK;
IDP_LibLinkProperty(group->id.properties, fd);
-
- bool add_us = false;
-
- for (GroupObject *go = group->gobject.first; go; go = go->next) {
- go->ob = newlibadr_real_us(fd, group->id.lib, go->ob);
- if (go->ob) {
- go->ob->flag |= OB_FROMGROUP;
- /* if group has an object, it increments user... */
- add_us = true;
+
+ if (group->view_layer == NULL) {
+ /* Old file, this is required for doversion. */
+ bool add_us = false;
+
+ GroupObject *go, *gon;
+ go = group->gobject.first;
+ while (go) {
+ gon = go->next;
+ go->ob = newlibadr_real_us(fd, group->id.lib, go->ob);
+ if (go->ob != NULL) {
+ go->ob->flag |= OB_FROMGROUP;
+ /* If group has an object, it increments user... */
+ add_us = true;
+ }
+ else {
+ /* Remove NULL objects. */
+ BLI_remlink(&group->gobject, go);
+ MEM_freeN(go);
+ }
+ go = gon;
}
+
+ if (add_us) {
+ id_us_ensure_real(&group->id);
+ }
+ /* The rest of the read code is only for new files, skip it. */
+ continue;
}
- if (add_us) {
+
+ lib_link_scene_collection(fd, group->id.lib, group->collection);
+ lib_link_view_layer(fd, group->id.lib, group->view_layer);
+
+ if (!BLI_listbase_is_empty(&group->view_layer->object_bases)) {
id_us_ensure_real(&group->id);
}
- BKE_group_object_unlink(group, NULL, NULL, NULL); /* removes NULL entries */
-
- group->id.tag &= ~LIB_TAG_NEED_LINK;
}
}
}
@@ -8095,6 +8377,7 @@ static const char *dataname(short id_code)
case ID_VF: return "Data from VF";
case ID_TXT : return "Data from TXT";
case ID_SPK: return "Data from SPK";
+ case ID_LP: return "Data from LP";
case ID_SO: return "Data from SO";
case ID_NT: return "Data from NT";
case ID_BR: return "Data from BR";
@@ -8107,6 +8390,7 @@ static const char *dataname(short id_code)
case ID_MSK: return "Data from MSK";
case ID_LS: return "Data from LS";
case ID_CF: return "Data from CF";
+ case ID_WS: return "Data from WS";
}
return "Data from Lib Block";
@@ -8230,6 +8514,7 @@ static BHead *read_libblock(FileData *fd, Main *main, BHead *bhead, const short
id->us = ID_FAKE_USERS(id);
id->icon_id = 0;
id->newid = NULL; /* Needed because .blend may have been saved with crap value here... */
+ id->orig_id = NULL;
/* this case cannot be direct_linked: it's just the ID part */
if (bhead->code == ID_ID) {
@@ -8256,7 +8541,7 @@ static BHead *read_libblock(FileData *fd, Main *main, BHead *bhead, const short
wrong_id = direct_link_screen(fd, (bScreen *)id);
break;
case ID_SCE:
- direct_link_scene(fd, (Scene *)id);
+ direct_link_scene(fd, (Scene *)id, main);
break;
case ID_OB:
direct_link_object(fd, (Object *)id);
@@ -8312,6 +8597,9 @@ static BHead *read_libblock(FileData *fd, Main *main, BHead *bhead, const short
case ID_SO:
direct_link_sound(fd, (bSound *)id);
break;
+ case ID_LP:
+ direct_link_lightprobe(fd, (LightProbe *)id);
+ break;
case ID_GR:
direct_link_group(fd, (Group *)id);
break;
@@ -8351,6 +8639,9 @@ static BHead *read_libblock(FileData *fd, Main *main, BHead *bhead, const short
case ID_CF:
direct_link_cachefile(fd, (CacheFile *)id);
break;
+ case ID_WS:
+ direct_link_workspace(fd, (WorkSpace *)id, main);
+ break;
}
oldnewmap_free_unused(fd->datamap);
@@ -8396,7 +8687,8 @@ static BHead *read_global(BlendFileData *bfd, FileData *fd, BHead *bhead)
bfd->curscreen = fg->curscreen;
bfd->curscene = fg->curscene;
-
+ bfd->cur_view_layer = fg->cur_view_layer;
+
MEM_freeN(fg);
fd->globalf = bfd->globalf;
@@ -8408,6 +8700,7 @@ static BHead *read_global(BlendFileData *bfd, FileData *fd, BHead *bhead)
/* note, this has to be kept for reading older files... */
static void link_global(FileData *fd, BlendFileData *bfd)
{
+ bfd->cur_view_layer = newglobadr(fd, bfd->cur_view_layer);
bfd->curscreen = newlibadr(fd, NULL, bfd->curscreen);
bfd->curscene = newlibadr(fd, NULL, bfd->curscene);
// this happens in files older than 2.35
@@ -8416,26 +8709,6 @@ static void link_global(FileData *fd, BlendFileData *bfd)
}
}
-static void convert_tface_mt(FileData *fd, Main *main)
-{
- Main *gmain;
-
- /* this is a delayed do_version (so it can create new materials) */
- if (main->versionfile < 259 || (main->versionfile == 259 && main->subversionfile < 3)) {
- //XXX hack, material.c uses G.main all over the place, instead of main
- // temporarily set G.main to the current main
- gmain = G.main;
- G.main = main;
-
- if (!(do_version_tface(main))) {
- BKE_report(fd->reports, RPT_WARNING, "Texface conversion problem (see error in console)");
- }
-
- //XXX hack, material.c uses G.main allover the place, instead of main
- G.main = gmain;
- }
-}
-
/* initialize userdef with non-UI dependency stuff */
/* other initializers (such as theme color defaults) go to resources.c */
static void do_versions_userdef(FileData *fd, BlendFileData *bfd)
@@ -8489,6 +8762,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
blo_do_versions_250(fd, lib, main);
blo_do_versions_260(fd, lib, main);
blo_do_versions_270(fd, lib, main);
+ blo_do_versions_280(fd, lib, main);
/* WATCH IT!!!: pointers from libdata have not been converted yet here! */
/* WATCH IT 2!: Userdef struct init see do_versions_userdef() above! */
@@ -8502,12 +8776,15 @@ static void do_versions_after_linking(Main *main)
// main->curlib ? "LIB" : "MAIN", main->versionfile, main->subversionfile);
do_versions_after_linking_270(main);
+ do_versions_after_linking_280(main);
}
static void lib_link_all(FileData *fd, Main *main)
{
oldnewmap_sort(fd);
+ lib_link_id(fd, main);
+
/* No load UI for undo memfiles */
if (fd->memfile == NULL) {
lib_link_windowmanager(fd, main);
@@ -8530,6 +8807,7 @@ static void lib_link_all(FileData *fd, Main *main)
lib_link_text(fd, main);
lib_link_camera(fd, main);
lib_link_speaker(fd, main);
+ lib_link_lightprobe(fd, main);
lib_link_sound(fd, main);
lib_link_group(fd, main);
lib_link_armature(fd, main);
@@ -8545,6 +8823,7 @@ static void lib_link_all(FileData *fd, Main *main)
lib_link_linestyle(fd, main);
lib_link_gpencil(fd, main);
lib_link_cachefiles(fd, main);
+ lib_link_workspaces(fd, main);
lib_link_library(fd, main); /* only init users */
}
@@ -8737,6 +9016,12 @@ BlendFileData *blo_read_file_internal(FileData *fd, const char *filepath)
BKE_main_id_tag_all(bfd->main, LIB_TAG_NEW, false);
+ /* Now that all our data-blocks are loaded, we can re-generate overrides from their references. */
+ if (fd->memfile == NULL) {
+ /* Do not apply in undo case! */
+ BKE_main_override_static_update(bfd->main);
+ }
+
lib_verify_nodetree(bfd->main, true);
fix_relpaths_library(fd->relabase, bfd->main); /* make all relative paths, relative to the open blend file */
@@ -8937,6 +9222,11 @@ static void expand_doit_library(void *fdhandle, Main *mainvar, void *old)
}
}
else {
+ /* in 2.50+ file identifier for screens is patched, forward compatibility */
+ if (bhead->code == ID_SCRN) {
+ bhead->code = ID_SCR;
+ }
+
id = is_yet_read(fd, mainvar, bhead);
if (id == NULL) {
read_libblock(fd, mainvar, bhead, LIB_TAG_TESTIND, NULL);
@@ -9170,6 +9460,11 @@ static void expand_group(FileData *fd, Main *mainvar, Group *group)
for (go = group->gobject.first; go; go = go->next) {
expand_doit(fd, mainvar, go->ob);
}
+
+ if (group->collection != NULL) {
+ expand_scene_collection(fd, mainvar, group->collection);
+ }
+
}
static void expand_key(FileData *fd, Main *mainvar, Key *key)
@@ -9251,6 +9546,10 @@ static void expand_material(FileData *fd, Main *mainvar, Material *ma)
if (ma->group)
expand_doit(fd, mainvar, ma->group);
+
+ if (ma->edit_image) {
+ expand_doit(fd, mainvar, ma->edit_image);
+ }
}
static void expand_lamp(FileData *fd, Main *mainvar, Lamp *la)
@@ -9340,9 +9639,7 @@ static void expand_curve(FileData *fd, Main *mainvar, Curve *cu)
static void expand_mesh(FileData *fd, Main *mainvar, Mesh *me)
{
- CustomDataLayer *layer;
- TFace *tf;
- int a, i;
+ int a;
if (me->adt)
expand_animdata(fd, mainvar, me->adt);
@@ -9353,46 +9650,6 @@ static void expand_mesh(FileData *fd, Main *mainvar, Mesh *me)
expand_doit(fd, mainvar, me->key);
expand_doit(fd, mainvar, me->texcomesh);
-
- if (me->tface) {
- tf = me->tface;
- for (i=0; i<me->totface; i++, tf++) {
- if (tf->tpage)
- expand_doit(fd, mainvar, tf->tpage);
- }
- }
-
- if (me->mface && !me->mpoly) {
- MTFace *mtf;
-
- for (a = 0; a < me->fdata.totlayer; a++) {
- layer = &me->fdata.layers[a];
-
- if (layer->type == CD_MTFACE) {
- mtf = (MTFace *) layer->data;
- for (i = 0; i < me->totface; i++, mtf++) {
- if (mtf->tpage)
- expand_doit(fd, mainvar, mtf->tpage);
- }
- }
- }
- }
- else {
- MTexPoly *mtp;
-
- for (a = 0; a < me->pdata.totlayer; a++) {
- layer = &me->pdata.layers[a];
-
- if (layer->type == CD_MTEXPOLY) {
- mtp = (MTexPoly *) layer->data;
-
- for (i = 0; i < me->totpoly; i++, mtp++) {
- if (mtp->tpage)
- expand_doit(fd, mainvar, mtp->tpage);
- }
- }
- }
- }
}
/* temp struct used to transport needed info to expand_constraint_cb() */
@@ -9635,15 +9892,25 @@ static void expand_object(FileData *fd, Main *mainvar, Object *ob)
}
}
+static void expand_scene_collection(FileData *fd, Main *mainvar, SceneCollection *sc)
+{
+ for (LinkData *link = sc->objects.first; link; link = link->next) {
+ expand_doit(fd, mainvar, link->data);
+ }
+
+ for (SceneCollection *nsc= sc->scene_collections.first; nsc; nsc = nsc->next) {
+ expand_scene_collection(fd, mainvar, nsc);
+ }
+}
+
static void expand_scene(FileData *fd, Main *mainvar, Scene *sce)
{
- Base *base;
SceneRenderLayer *srl;
FreestyleModuleConfig *module;
FreestyleLineSet *lineset;
- for (base = sce->base.first; base; base = base->next) {
- expand_doit(fd, mainvar, base->object);
+ for (Base *base_legacy = sce->base.first; base_legacy; base_legacy = base_legacy->next) {
+ expand_doit(fd, mainvar, base_legacy->object);
}
expand_doit(fd, mainvar, sce->camera);
expand_doit(fd, mainvar, sce->world);
@@ -9660,7 +9927,6 @@ static void expand_scene(FileData *fd, Main *mainvar, Scene *sce)
for (srl = sce->r.layers.first; srl; srl = srl->next) {
expand_doit(fd, mainvar, srl->mat_override);
- expand_doit(fd, mainvar, srl->light_override);
for (module = srl->freestyleConfig.modules.first; module; module = module->next) {
if (module->script)
expand_doit(fd, mainvar, module->script);
@@ -9671,7 +9937,22 @@ static void expand_scene(FileData *fd, Main *mainvar, Scene *sce)
expand_doit(fd, mainvar, lineset->linestyle);
}
}
-
+
+ for (ViewLayer *view_layer = sce->view_layers.first; view_layer; view_layer = view_layer->next) {
+ for (module = view_layer->freestyle_config.modules.first; module; module = module->next) {
+ if (module->script) {
+ expand_doit(fd, mainvar, module->script);
+ }
+ }
+
+ for (lineset = view_layer->freestyle_config.linesets.first; lineset; lineset = lineset->next) {
+ if (lineset->group) {
+ expand_doit(fd, mainvar, lineset->group);
+ }
+ expand_doit(fd, mainvar, lineset->linestyle);
+ }
+ }
+
if (sce->r.dometext)
expand_doit(fd, mainvar, sce->gm.dome.warptext);
@@ -9706,6 +9987,8 @@ static void expand_scene(FileData *fd, Main *mainvar, Scene *sce)
}
expand_doit(fd, mainvar, sce->clip);
+
+ expand_scene_collection(fd, mainvar, sce->collection);
}
static void expand_camera(FileData *fd, Main *mainvar, Camera *ca)
@@ -9736,6 +10019,12 @@ static void expand_sound(FileData *fd, Main *mainvar, bSound *snd)
expand_doit(fd, mainvar, snd->ipo); // XXX deprecated - old animation system
}
+static void expand_lightprobe(FileData *fd, Main *mainvar, LightProbe *prb)
+{
+ if (prb->adt)
+ expand_animdata(fd, mainvar, prb->adt);
+}
+
static void expand_movieclip(FileData *fd, Main *mainvar, MovieClip *clip)
{
if (clip->adt)
@@ -9809,6 +10098,15 @@ static void expand_gpencil(FileData *fd, Main *mainvar, bGPdata *gpd)
expand_animdata(fd, mainvar, gpd->adt);
}
+static void expand_workspace(FileData *fd, Main *mainvar, WorkSpace *workspace)
+{
+ ListBase *layouts = BKE_workspace_layouts_get(workspace);
+
+ for (WorkSpaceLayout *layout = layouts->first; layout; layout = layout->next) {
+ expand_doit(fd, mainvar, BKE_workspace_layout_screen_get(layout));
+ }
+}
+
/**
* Set the callback func used over all ID data found by \a BLO_expand_main func.
*
@@ -9887,6 +10185,9 @@ void BLO_expand_main(void *fdhandle, Main *mainvar)
case ID_SO:
expand_sound(fd, mainvar, (bSound *)id);
break;
+ case ID_LP:
+ expand_lightprobe(fd, mainvar, (LightProbe *)id);
+ break;
case ID_AR:
expand_armature(fd, mainvar, (bArmature *)id);
break;
@@ -9923,6 +10224,8 @@ void BLO_expand_main(void *fdhandle, Main *mainvar)
case ID_CF:
expand_cachefile(fd, mainvar, (CacheFile *)id);
break;
+ case ID_WS:
+ expand_workspace(fd, mainvar, (WorkSpace *)id);
default:
break;
}
@@ -9945,7 +10248,7 @@ static bool object_in_any_scene(Main *mainvar, Object *ob)
Scene *sce;
for (sce = mainvar->scene.first; sce; sce = sce->id.next) {
- if (BKE_scene_base_find(sce, ob)) {
+ if (BKE_scene_object_find(sce, ob)) {
return true;
}
}
@@ -9953,16 +10256,17 @@ static bool object_in_any_scene(Main *mainvar, Object *ob)
return false;
}
-static void give_base_to_objects(Main *mainvar, Scene *scene, View3D *v3d, Library *lib, const short flag)
+static void give_base_to_objects(
+ Main *mainvar, Scene *scene, ViewLayer *view_layer, Library *lib, const short flag)
{
Object *ob;
Base *base;
- const unsigned int active_lay = (flag & FILE_ACTIVELAY) ? BKE_screen_view3d_layer_active(v3d, scene) : 0;
+ SceneCollection *scene_collection = NULL;
const bool is_link = (flag & FILE_LINK) != 0;
BLI_assert(scene);
- /* give all objects which are LIB_TAG_INDIRECT a base, or for a group when *lib has been set */
+ /* Give all objects which are LIB_TAG_INDIRECT a base, or for a group when *lib has been set. */
for (ob = mainvar->object.first; ob; ob = ob->id.next) {
if ((ob->id.tag & LIB_TAG_INDIRECT) && (ob->id.tag & LIB_TAG_PRE_EXISTING) == 0) {
bool do_it = false;
@@ -9977,26 +10281,26 @@ static void give_base_to_objects(Main *mainvar, Scene *scene, View3D *v3d, Libra
}
if (do_it) {
- base = MEM_callocN(sizeof(Base), __func__);
- BLI_addtail(&scene->base, base);
+ CLAMP_MIN(ob->id.us, 0);
- if (active_lay) {
- ob->lay = active_lay;
+ if (scene_collection == NULL) {
+ scene_collection = get_scene_collection_active_or_create(scene, view_layer, FILE_ACTIVE_COLLECTION);
}
+
+ BKE_collection_object_add(&scene->id, scene_collection, ob);
+ base = BKE_view_layer_base_find(view_layer, ob);
+ BKE_scene_object_base_flag_sync_from_base(base);
+
if (flag & FILE_AUTOSELECT) {
/* Note that link_object_postprocess() already checks for FILE_AUTOSELECT flag,
* but it will miss objects from non-instantiated groups... */
- ob->flag |= SELECT;
- /* do NOT make base active here! screws up GUI stuff, if you want it do it on src/ level */
+ if (base->flag & BASE_SELECTABLED) {
+ base->flag |= BASE_SELECTED;
+ BKE_scene_object_base_flag_sync_from_base(base);
+ }
+ /* Do NOT make base active here! screws up GUI stuff, if you want it do it on src/ level. */
}
- base->object = ob;
- base->lay = ob->lay;
- base->flag = ob->flag;
-
- CLAMP_MIN(ob->id.us, 0);
- id_us_plus_no_lib((ID *)ob);
-
ob->id.tag &= ~LIB_TAG_INDIRECT;
ob->id.tag |= LIB_TAG_EXTERN;
}
@@ -10005,32 +10309,38 @@ static void give_base_to_objects(Main *mainvar, Scene *scene, View3D *v3d, Libra
}
static void give_base_to_groups(
- Main *mainvar, Scene *scene, View3D *v3d, Library *UNUSED(lib), const short UNUSED(flag))
+ Main *mainvar, Scene *scene, ViewLayer *view_layer, Library *UNUSED(lib), const short UNUSED(flag))
{
Group *group;
Base *base;
Object *ob;
- const unsigned int active_lay = BKE_screen_view3d_layer_active(v3d, scene);
+ SceneCollection *scene_collection;
- /* give all objects which are tagged a base */
+ /* If the group is empty this function is not even called, so it's safe to ensure a collection at this point. */
+ scene_collection = get_scene_collection_active_or_create(scene, view_layer, FILE_ACTIVE_COLLECTION);
+
+ /* Give all objects which are tagged a base. */
for (group = mainvar->group.first; group; group = group->id.next) {
if (group->id.tag & LIB_TAG_DOIT) {
- /* any indirect group should not have been tagged */
+ /* Any indirect group should not have been tagged. */
BLI_assert((group->id.tag & LIB_TAG_INDIRECT) == 0);
- /* BKE_object_add(...) messes with the selection */
+ /* BKE_object_add(...) messes with the selection. */
ob = BKE_object_add_only_object(mainvar, OB_EMPTY, group->id.name + 2);
ob->type = OB_EMPTY;
- ob->lay = active_lay;
- /* assign the base */
- base = BKE_scene_base_add(scene, ob);
- base->flag |= SELECT;
- base->object->flag = base->flag;
- DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
- scene->basact = base;
+ BKE_collection_object_add(&scene->id, scene_collection, ob);
+ base = BKE_view_layer_base_find(view_layer, ob);
+
+ if (base->flag & BASE_SELECTABLED) {
+ base->flag |= BASE_SELECTED;
+ }
+
+ BKE_scene_object_base_flag_sync_from_base(base);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+ view_layer->basact = base;
- /* assign the group */
+ /* Assign the group. */
ob->dup_group = group;
ob->transflag |= OB_DUPLIGROUP;
copy_v3_v3(ob->loc, scene->cursor);
@@ -10107,31 +10417,42 @@ static ID *link_named_part(
return id;
}
-static void link_object_postprocess(ID *id, Scene *scene, View3D *v3d, const int flag)
+static SceneCollection *get_scene_collection_active_or_create(
+ struct Scene *scene, struct ViewLayer *view_layer, const int flag)
+{
+ LayerCollection *lc = NULL;
+
+ if (flag & FILE_ACTIVE_COLLECTION) {
+ lc = BKE_layer_collection_get_active_ensure(scene, view_layer);
+ }
+ else {
+ SceneCollection *sc = BKE_collection_add(&scene->id, NULL, COLLECTION_TYPE_NONE, NULL);
+ lc = BKE_collection_link(view_layer, sc);
+ }
+
+ return lc->scene_collection;
+}
+
+static void link_object_postprocess(ID *id, Scene *scene, ViewLayer *view_layer, const int flag)
{
if (scene) {
+ /* link to scene */
Base *base;
Object *ob;
-
- base = MEM_callocN(sizeof(Base), "app_nam_part");
- BLI_addtail(&scene->base, base);
+ SceneCollection *sc;
ob = (Object *)id;
- /* link at active layer (view3d if available in context, else scene one */
- if (flag & FILE_ACTIVELAY) {
- ob->lay = BKE_screen_view3d_layer_active(v3d, scene);
- }
-
- ob->mode = OB_MODE_OBJECT;
- base->lay = ob->lay;
- base->object = ob;
- base->flag = ob->flag;
- id_us_plus_no_lib((ID *)ob);
+ sc = get_scene_collection_active_or_create(scene, view_layer, flag);
+ BKE_collection_object_add(&scene->id, sc, ob);
+ base = BKE_view_layer_base_find(view_layer, ob);
+ BKE_scene_object_base_flag_sync_from_base(base);
if (flag & FILE_AUTOSELECT) {
- base->flag |= SELECT;
- base->object->flag = base->flag;
+ if (base->flag & BASE_SELECTABLED) {
+ base->flag |= BASE_SELECTED;
+ BKE_scene_object_base_flag_sync_from_base(base);
+ }
/* do NOT make base active here! screws up GUI stuff, if you want it do it on src/ level */
}
}
@@ -10163,8 +10484,6 @@ void BLO_library_link_copypaste(Main *mainl, BlendHandle *bh)
if (bhead->code == ID_OB) {
/* Instead of instancing Base's directly, postpone until after groups are loaded
* otherwise the base's flag is set incorrectly when groups are used */
- Object *ob = (Object *)id;
- ob->mode = OB_MODE_OBJECT;
/* ensure give_base_to_objects runs on this object */
BLI_assert(id->us == 0);
}
@@ -10174,12 +10493,12 @@ void BLO_library_link_copypaste(Main *mainl, BlendHandle *bh)
static ID *link_named_part_ex(
Main *mainl, FileData *fd, const short idcode, const char *name, const int flag,
- Scene *scene, View3D *v3d)
+ Scene *scene, ViewLayer *view_layer)
{
ID *id = link_named_part(mainl, fd, idcode, name, flag);
if (id && (GS(id->name) == ID_OB)) { /* loose object: give a base */
- link_object_postprocess(id, scene, v3d, flag);
+ link_object_postprocess(id, scene, view_layer, flag);
}
else if (id && (GS(id->name) == ID_GR)) {
/* tag as needing to be instantiated */
@@ -10221,10 +10540,10 @@ ID *BLO_library_link_named_part(Main *mainl, BlendHandle **bh, const short idcod
ID *BLO_library_link_named_part_ex(
Main *mainl, BlendHandle **bh,
const short idcode, const char *name, const int flag,
- Scene *scene, View3D *v3d)
+ Scene *scene, ViewLayer *view_layer)
{
FileData *fd = (FileData*)(*bh);
- return link_named_part_ex(mainl, fd, idcode, name, flag, scene, v3d);
+ return link_named_part_ex(mainl, fd, idcode, name, flag, scene, view_layer);
}
static void link_id_part(ReportList *reports, FileData *fd, Main *mainvar, ID *id, ID **r_id)
@@ -10337,7 +10656,7 @@ static void split_main_newid(Main *mainptr, Main *main_newid)
}
/* scene and v3d may be NULL. */
-static void library_link_end(Main *mainl, FileData **fd, const short flag, Scene *scene, View3D *v3d)
+static void library_link_end(Main *mainl, FileData **fd, const short flag, Scene *scene, ViewLayer *view_layer)
{
Main *mainvar;
Library *curlib;
@@ -10393,10 +10712,10 @@ static void library_link_end(Main *mainl, FileData **fd, const short flag, Scene
* Only directly linked objects & groups are instantiated by `BLO_library_link_named_part_ex()` & co,
* here we handle indirect ones and other possible edge-cases. */
if (scene) {
- give_base_to_objects(mainvar, scene, v3d, curlib, flag);
+ give_base_to_objects(mainvar, scene, view_layer, curlib, flag);
if (flag & FILE_GROUP_INSTANCE) {
- give_base_to_groups(mainvar, scene, v3d, curlib, flag);
+ give_base_to_groups(mainvar, scene, view_layer, curlib, flag);
}
}
else {
@@ -10422,12 +10741,12 @@ static void library_link_end(Main *mainl, FileData **fd, const short flag, Scene
* \param bh The blender file handle (WARNING! may be freed by this function!).
* \param flag Options for linking, used for instantiating.
* \param scene The scene in which to instantiate objects/groups (if NULL, no instantiation is done).
- * \param v3d The active View3D (only to define active layers for instantiated objects & groups, can be NULL).
+ * \param view_layer The scene layer in which to instantiate objects/groups (if NULL, no instantiation is done).
*/
-void BLO_library_link_end(Main *mainl, BlendHandle **bh, short flag, Scene *scene, View3D *v3d)
+void BLO_library_link_end(Main *mainl, BlendHandle **bh, int flag, Scene *scene, ViewLayer *view_layer)
{
FileData *fd = (FileData*)(*bh);
- library_link_end(mainl, &fd, flag, scene, v3d);
+ library_link_end(mainl, &fd, flag, scene, view_layer);
*bh = (BlendHandle*)fd;
}
diff --git a/source/blender/blenloader/intern/readfile.h b/source/blender/blenloader/intern/readfile.h
index 62ce15a640e..299c66f2bbb 100644
--- a/source/blender/blenloader/intern/readfile.h
+++ b/source/blender/blenloader/intern/readfile.h
@@ -34,6 +34,8 @@
#define __READFILE_H__
#include "zlib.h"
+#include "DNA_sdna_types.h"
+#include "DNA_space_types.h"
#include "DNA_windowmanager_types.h" /* for ReportType */
struct OldNewMap;
@@ -171,8 +173,10 @@ void blo_do_versions_pre250(struct FileData *fd, struct Library *lib, struct Mai
void blo_do_versions_250(struct FileData *fd, struct Library *lib, struct Main *main);
void blo_do_versions_260(struct FileData *fd, struct Library *lib, struct Main *main);
void blo_do_versions_270(struct FileData *fd, struct Library *lib, struct Main *main);
+void blo_do_versions_280(struct FileData *fd, struct Library *lib, struct Main *main);
void do_versions_after_linking_270(struct Main *main);
+void do_versions_after_linking_280(struct Main *main);
#endif
diff --git a/source/blender/blenloader/intern/versioning_250.c b/source/blender/blenloader/intern/versioning_250.c
index d308bd54da3..59dc6e9d6b7 100644
--- a/source/blender/blenloader/intern/versioning_250.c
+++ b/source/blender/blenloader/intern/versioning_250.c
@@ -1087,8 +1087,6 @@ void blo_do_versions_250(FileData *fd, Library *lib, Main *main)
if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 2)) {
Scene *sce;
- Object *ob;
-
for (sce = main->scene.first; sce; sce = sce->id.next) {
if (fd->fileflags & G_FILE_ENABLE_ALL_FRAMES)
sce->gm.flag |= GAME_ENABLE_ALL_FRAMES;
@@ -1119,13 +1117,6 @@ void blo_do_versions_250(FileData *fd, Library *lib, Main *main)
sce->gm.matmode = GAME_MAT_MULTITEX;
else
sce->gm.matmode = GAME_MAT_TEXFACE;
-
- sce->gm.flag |= GAME_DISPLAY_LISTS;
- }
-
- for (ob = main->object.first; ob; ob = ob->id.next) {
- if (ob->flag & 8192) // OB_POSEMODE = 8192
- ob->mode |= OB_MODE_POSE;
}
}
diff --git a/source/blender/blenloader/intern/versioning_260.c b/source/blender/blenloader/intern/versioning_260.c
index dad61868961..f7301fe4664 100644
--- a/source/blender/blenloader/intern/versioning_260.c
+++ b/source/blender/blenloader/intern/versioning_260.c
@@ -2453,11 +2453,14 @@ void blo_do_versions_260(FileData *fd, Library *UNUSED(lib), Main *main)
if (sl->spacetype == SPACE_OUTLINER) {
SpaceOops *so = (SpaceOops *)sl;
- if (!ELEM(so->outlinevis, SO_ALL_SCENES, SO_CUR_SCENE, SO_VISIBLE, SO_SELECTED, SO_ACTIVE,
- SO_SAME_TYPE, SO_GROUPS, SO_LIBRARIES, SO_SEQUENCE, SO_DATABLOCKS,
- SO_USERDEF))
+ if (!ELEM(so->outlinevis,
+ SO_SCENES,
+ SO_GROUPS,
+ SO_LIBRARIES,
+ SO_SEQUENCE,
+ SO_DATABLOCKS))
{
- so->outlinevis = SO_ALL_SCENES;
+ so->outlinevis = SO_SCENES;
}
}
}
diff --git a/source/blender/blenloader/intern/versioning_270.c b/source/blender/blenloader/intern/versioning_270.c
index d27c1ce16d3..044c47847be 100644
--- a/source/blender/blenloader/intern/versioning_270.c
+++ b/source/blender/blenloader/intern/versioning_270.c
@@ -1733,6 +1733,27 @@ void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *main)
for (Mesh *me = main->mesh.first; me; me = me->id.next) {
CustomData_set_layer_name(&me->vdata, CD_MDEFORMVERT, 0, "");
}
+
+ if (!DNA_struct_elem_find(fd->filesdna, "View3DDebug", "char", "background")) {
+ bScreen *screen;
+
+ for (screen = main->screen.first; screen; screen = screen->id.next) {
+ ScrArea *sa;
+ for (sa = screen->areabase.first; sa; sa = sa->next) {
+ SpaceLink *sl;
+
+ for (sl = sa->spacedata.first; sl; sl = sl->next) {
+ switch (sl->spacetype) {
+ case SPACE_VIEW3D:
+ {
+ View3D *v3d = (View3D *)sl;
+ v3d->debug.background = V3D_DEBUG_BACKGROUND_NONE;
+ }
+ }
+ }
+ }
+ }
+ }
}
{
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
new file mode 100644
index 00000000000..2f07ca43ff0
--- /dev/null
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -0,0 +1,926 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Dalai Felinto
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ *
+ */
+
+/** \file blender/blenloader/intern/versioning_280.c
+ * \ingroup blenloader
+ */
+
+/* allow readfile to use deprecated functionality */
+#define DNA_DEPRECATED_ALLOW
+
+#include <string.h>
+
+#include "BLI_listbase.h"
+#include "BLI_mempool.h"
+#include "BLI_string.h"
+#include "BLI_string_utf8.h"
+#include "BLI_utildefines.h"
+
+#include "DNA_object_types.h"
+#include "DNA_camera_types.h"
+#include "DNA_gpu_types.h"
+#include "DNA_group_types.h"
+#include "DNA_lamp_types.h"
+#include "DNA_layer_types.h"
+#include "DNA_lightprobe_types.h"
+#include "DNA_material_types.h"
+#include "DNA_mesh_types.h"
+#include "DNA_particle_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_screen_types.h"
+#include "DNA_view3d_types.h"
+#include "DNA_genfile.h"
+#include "DNA_workspace_types.h"
+
+#include "BKE_collection.h"
+#include "BKE_customdata.h"
+#include "BKE_freestyle.h"
+#include "BKE_group.h"
+#include "BKE_idprop.h"
+#include "BKE_layer.h"
+#include "BKE_main.h"
+#include "BKE_mesh.h"
+#include "BKE_node.h"
+#include "BKE_report.h"
+#include "BKE_scene.h"
+#include "BKE_workspace.h"
+
+#include "BLO_readfile.h"
+#include "readfile.h"
+
+#include "MEM_guardedalloc.h"
+
+
+static bScreen *screen_parent_find(const bScreen *screen)
+{
+ /* can avoid lookup if screen state isn't maximized/full (parent and child store the same state) */
+ if (ELEM(screen->state, SCREENMAXIMIZED, SCREENFULL)) {
+ for (const ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
+ if (sa->full && sa->full != screen) {
+ BLI_assert(sa->full->state == screen->state);
+ return sa->full;
+ }
+ }
+ }
+
+ return NULL;
+}
+
+static void do_version_workspaces_create_from_screens(Main *bmain)
+{
+ for (bScreen *screen = bmain->screen.first; screen; screen = screen->id.next) {
+ const bScreen *screen_parent = screen_parent_find(screen);
+ Scene *scene = screen->scene;
+ WorkSpace *workspace;
+ ViewLayer *layer = BKE_view_layer_from_scene_get(scene);
+ ListBase *transform_orientations;
+
+ if (screen_parent) {
+ /* fullscreen with "Back to Previous" option, don't create
+ * a new workspace, add layout workspace containing parent */
+ workspace = BLI_findstring(
+ &bmain->workspaces, screen_parent->id.name + 2, offsetof(ID, name) + 2);
+ }
+ else {
+ workspace = BKE_workspace_add(bmain, screen->id.name + 2);
+ }
+ BKE_workspace_layout_add(workspace, screen, screen->id.name + 2);
+ BKE_workspace_view_layer_set(workspace, layer, scene);
+
+#ifdef WITH_CLAY_ENGINE
+ BLI_strncpy(workspace->view_render.engine_id, RE_engine_id_BLENDER_CLAY,
+ sizeof(workspace->view_render.engine_id));
+#else
+ BLI_strncpy(workspace->view_render.engine_id, RE_engine_id_BLENDER_EEVEE,
+ sizeof(workspace->view_render.engine_id));
+#endif
+
+ transform_orientations = BKE_workspace_transform_orientations_get(workspace);
+ BLI_duplicatelist(transform_orientations, &scene->transform_spaces);
+ }
+}
+
+/**
+ * \brief After lib-link versioning for new workspace design.
+ *
+ * * Adds a workspace for (almost) each screen of the old file
+ * and adds the needed workspace-layout to wrap the screen.
+ * * Active screen isn't stored directly in window anymore, but in the active workspace.
+ * * Active scene isn't stored in screen anymore, but in window.
+ * * Create workspace instance hook for each window.
+ *
+ * \note Some of the created workspaces might be deleted again in case of reading the default startup.blend.
+ */
+static void do_version_workspaces_after_lib_link(Main *bmain)
+{
+ BLI_assert(BLI_listbase_is_empty(&bmain->workspaces));
+
+ do_version_workspaces_create_from_screens(bmain);
+
+ for (wmWindowManager *wm = bmain->wm.first; wm; wm = wm->id.next) {
+ for (wmWindow *win = wm->windows.first; win; win = win->next) {
+ bScreen *screen_parent = screen_parent_find(win->screen);
+ bScreen *screen = screen_parent ? screen_parent : win->screen;
+ WorkSpace *workspace = BLI_findstring(&bmain->workspaces, screen->id.name + 2, offsetof(ID, name) + 2);
+ ListBase *layouts = BKE_workspace_layouts_get(workspace);
+
+ win->workspace_hook = BKE_workspace_instance_hook_create(bmain);
+
+ BKE_workspace_active_set(win->workspace_hook, workspace);
+ BKE_workspace_active_layout_set(win->workspace_hook, layouts->first);
+
+ win->scene = screen->scene;
+ /* Deprecated from now on! */
+ win->screen = NULL;
+ }
+ }
+
+ for (bScreen *screen = bmain->screen.first; screen; screen = screen->id.next) {
+ /* Deprecated from now on! */
+ BLI_freelistN(&screen->scene->transform_spaces);
+ screen->scene = NULL;
+ }
+}
+
+enum {
+ DO_VERSION_COLLECTION_VISIBLE = 0,
+ DO_VERSION_COLLECTION_HIDE = 1,
+ DO_VERSION_COLLECTION_HIDE_RENDER = 2,
+ DO_VERSION_COLLECTION_HIDE_ALL = 3,
+};
+
+void do_versions_after_linking_280(Main *main)
+{
+ if (!MAIN_VERSION_ATLEAST(main, 280, 0)) {
+ for (Scene *scene = main->scene.first; scene; scene = scene->id.next) {
+ /* since we don't have access to FileData we check the (always valid) first render layer instead */
+ if (scene->view_layers.first == NULL) {
+ SceneCollection *sc_master = BKE_collection_master(&scene->id);
+ BLI_strncpy(sc_master->name, "Master Collection", sizeof(sc_master->name));
+
+ struct DoVersionSceneCollections {
+ SceneCollection *collections[20];
+ int created;
+ const char *suffix;
+ int flag_viewport;
+ int flag_render;
+ } collections[] =
+ {
+ {
+ .collections = {NULL},
+ .created = 0,
+ .suffix = "",
+ .flag_viewport = COLLECTION_SELECTABLE,
+ .flag_render = COLLECTION_SELECTABLE
+ },
+ {
+ .collections = {NULL},
+ .created = 0,
+ .suffix = " - Hide Viewport",
+ .flag_viewport = COLLECTION_SELECTABLE,
+ .flag_render = COLLECTION_SELECTABLE
+ },
+ {
+ .collections = {NULL},
+ .created = 0,
+ .suffix = " - Hide Render",
+ .flag_viewport = COLLECTION_SELECTABLE,
+ .flag_render = COLLECTION_SELECTABLE | COLLECTION_DISABLED
+ },
+ {
+ .collections = {NULL},
+ .created = 0,
+ .suffix = " - Hide Render All",
+ .flag_viewport = COLLECTION_SELECTABLE | COLLECTION_DISABLED,
+ .flag_render = COLLECTION_SELECTABLE | COLLECTION_DISABLED
+ }
+ };
+
+ for (int layer = 0; layer < 20; layer++) {
+ for (Base *base = scene->base.first; base; base = base->next) {
+ if (base->lay & (1 << layer)) {
+ int collection_index = -1;
+ if ((base->object->restrictflag & OB_RESTRICT_VIEW) &&
+ (base->object->restrictflag & OB_RESTRICT_RENDER))
+ {
+ collection_index = DO_VERSION_COLLECTION_HIDE_ALL;
+ }
+ else if (base->object->restrictflag & OB_RESTRICT_VIEW) {
+ collection_index = DO_VERSION_COLLECTION_HIDE;
+ }
+ else if (base->object->restrictflag & OB_RESTRICT_RENDER) {
+ collection_index = DO_VERSION_COLLECTION_HIDE_RENDER;
+ }
+ else {
+ collection_index = DO_VERSION_COLLECTION_VISIBLE;
+ }
+
+ /* Create collections when needed only. */
+ if ((collections[collection_index].created & (1 << layer)) == 0) {
+ char name[MAX_NAME];
+
+ if ((collections[DO_VERSION_COLLECTION_VISIBLE].created & (1 << layer)) == 0) {
+ BLI_snprintf(name,
+ sizeof(sc_master->name),
+ "Collection %d%s",
+ layer + 1,
+ collections[DO_VERSION_COLLECTION_VISIBLE].suffix);
+ collections[DO_VERSION_COLLECTION_VISIBLE].collections[layer] =
+ BKE_collection_add(&scene->id, sc_master, COLLECTION_TYPE_NONE, name);
+ collections[DO_VERSION_COLLECTION_VISIBLE].created |= (1 << layer);
+ }
+
+ if (collection_index != DO_VERSION_COLLECTION_VISIBLE) {
+ SceneCollection *sc_parent;
+ sc_parent = collections[DO_VERSION_COLLECTION_VISIBLE].collections[layer];
+ BLI_snprintf(name,
+ sizeof(sc_master->name),
+ "Collection %d%s",
+ layer + 1,
+ collections[collection_index].suffix);
+ collections[collection_index].collections[layer] = BKE_collection_add(
+ &scene->id,
+ sc_parent,
+ COLLECTION_TYPE_NONE,
+ name);
+ collections[collection_index].created |= (1 << layer);
+ }
+ }
+
+ BKE_collection_object_add(
+ &scene->id, collections[collection_index].collections[layer], base->object);
+ }
+
+ if (base->flag & SELECT) {
+ base->object->flag |= SELECT;
+ }
+ else {
+ base->object->flag &= ~SELECT;
+ }
+ }
+ }
+
+ /* Re-order the nested hidden collections. */
+ SceneCollection *scene_collection_parent = sc_master->scene_collections.first;
+
+ for (int layer = 0; layer < 20; layer++) {
+ if (collections[DO_VERSION_COLLECTION_VISIBLE].created & (1 << layer)) {
+
+ if ((collections[DO_VERSION_COLLECTION_HIDE].created & (1 << layer)) &&
+ (collections[DO_VERSION_COLLECTION_HIDE].collections[layer] !=
+ scene_collection_parent->scene_collections.first))
+ {
+ BLI_listbase_swaplinks(
+ &scene_collection_parent->scene_collections,
+ collections[DO_VERSION_COLLECTION_HIDE].collections[layer],
+ scene_collection_parent->scene_collections.first);
+ }
+
+ if ((collections[DO_VERSION_COLLECTION_HIDE_ALL].created & (1 << layer)) &&
+ (collections[DO_VERSION_COLLECTION_HIDE_ALL].collections[layer] !=
+ scene_collection_parent->scene_collections.last))
+ {
+ BLI_listbase_swaplinks(
+ &scene_collection_parent->scene_collections,
+ collections[DO_VERSION_COLLECTION_HIDE_ALL].collections[layer],
+ scene_collection_parent->scene_collections.last);
+ }
+
+ scene_collection_parent = scene_collection_parent->next;
+ }
+ }
+ BLI_assert(scene_collection_parent == NULL);
+
+ scene->active_view_layer = 0;
+
+ /* Handle legacy render layers. */
+ if (!BKE_scene_uses_blender_game(scene)) {
+ for (SceneRenderLayer *srl = scene->r.layers.first; srl; srl = srl->next) {
+
+ ViewLayer *view_layer = BKE_view_layer_add(scene, srl->name);
+
+ if (srl->samples != 0) {
+ /* It is up to the external engine to handle
+ * its own doversion in this case. */
+ BKE_override_view_layer_int_add(
+ view_layer,
+ ID_SCE,
+ "samples",
+ srl->samples);
+ }
+
+ if (srl->mat_override) {
+ BKE_override_view_layer_datablock_add(
+ view_layer,
+ ID_MA,
+ "self",
+ (ID *)srl->mat_override);
+ }
+
+ if (srl->layflag & SCE_LAY_DISABLE) {
+ view_layer->flag &= ~VIEW_LAYER_RENDER;
+ }
+
+ if ((srl->layflag & SCE_LAY_FRS) == 0) {
+ view_layer->flag &= ~VIEW_LAYER_FREESTYLE;
+ }
+
+ /* XXX If we are to keep layflag it should be merged with flag (dfelinto). */
+ view_layer->layflag = srl->layflag;
+ /* XXX Not sure if we should keep the passes (dfelinto). */
+ view_layer->passflag = srl->passflag;
+ view_layer->pass_xor = srl->pass_xor;
+ view_layer->pass_alpha_threshold = srl->pass_alpha_threshold;
+
+ BKE_freestyle_config_free(&view_layer->freestyle_config, true);
+ view_layer->freestyle_config = srl->freestyleConfig;
+ view_layer->id_properties = srl->prop;
+
+ /* unlink master collection */
+ BKE_collection_unlink(view_layer, view_layer->layer_collections.first);
+
+ /* Add new collection bases. */
+ for (int layer = 0; layer < 20; layer++) {
+ if ((scene->lay & srl->lay & ~(srl->lay_exclude) & (1 << layer)) ||
+ (srl->lay_zmask & (scene->lay | srl->lay_exclude) & (1 << layer)))
+ {
+ if (collections[DO_VERSION_COLLECTION_VISIBLE].created & (1 << layer)) {
+
+ LayerCollection *layer_collection_parent;
+ layer_collection_parent = BKE_collection_link(
+ view_layer,
+ collections[DO_VERSION_COLLECTION_VISIBLE].collections[layer]);
+
+ if (srl->lay_zmask & (1 << layer)) {
+ BKE_override_layer_collection_boolean_add(
+ layer_collection_parent,
+ ID_OB,
+ "cycles.is_holdout",
+ true);
+ }
+
+ if ((srl->lay & (1 << layer)) == 0) {
+ BKE_override_layer_collection_boolean_add(
+ layer_collection_parent,
+ ID_OB,
+ "cycles_visibility.camera",
+ false);
+ }
+
+ LayerCollection *layer_collection_child;
+ layer_collection_child = layer_collection_parent->layer_collections.first;
+
+ for (int j = 1; j < 4; j++) {
+ if (collections[j].created & (1 << layer)) {
+ layer_collection_child->flag = COLLECTION_VIEWPORT |
+ COLLECTION_RENDER |
+ collections[j].flag_render;
+ layer_collection_child = layer_collection_child->next;
+ }
+ }
+ BLI_assert(layer_collection_child == NULL);
+ }
+ }
+ }
+
+ /* for convenience set the same active object in all the layers */
+ if (scene->basact) {
+ view_layer->basact = BKE_view_layer_base_find(view_layer, scene->basact->object);
+ }
+
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ if ((base->flag & BASE_SELECTABLED) && (base->object->flag & SELECT)) {
+ base->flag |= BASE_SELECTED;
+ }
+ }
+ }
+
+ if (BLI_findlink(&scene->view_layers, scene->r.actlay)) {
+ scene->active_view_layer = scene->r.actlay;
+ }
+ }
+ else {
+ for (SceneRenderLayer *srl = scene->r.layers.first; srl; srl = srl->next) {
+ if (srl->prop) {
+ IDP_FreeProperty(srl->prop);
+ MEM_freeN(srl->prop);
+ }
+ BKE_freestyle_config_free(&srl->freestyleConfig, true);
+ }
+ }
+ BLI_freelistN(&scene->r.layers);
+
+ ViewLayer *view_layer = BKE_view_layer_add(scene, "Viewport");
+ /* If we ported all the original render layers, we don't need to make the viewport layer renderable. */
+ if (!BLI_listbase_is_single(&scene->view_layers)) {
+ view_layer->flag &= ~VIEW_LAYER_RENDER;
+ }
+
+ /* If layer was not set, disable it. */
+ LayerCollection *layer_collection_parent;
+ layer_collection_parent =
+ ((LayerCollection *)view_layer->layer_collections.first)->layer_collections.first;
+
+ for (int layer = 0; layer < 20; layer++) {
+ if (collections[DO_VERSION_COLLECTION_VISIBLE].created & (1 << layer)) {
+ const bool is_disabled = (scene->lay & (1 << layer)) == 0;
+
+ /* We only need to disable the parent collection. */
+ if (is_disabled) {
+ layer_collection_parent->flag |= COLLECTION_DISABLED;
+ }
+
+ LayerCollection *layer_collection_child;
+ layer_collection_child = layer_collection_parent->layer_collections.first;
+
+ for (int j = 1; j < 4; j++) {
+ if (collections[j].created & (1 << layer)) {
+ layer_collection_child->flag = COLLECTION_VIEWPORT |
+ COLLECTION_RENDER |
+ collections[j].flag_viewport;
+ layer_collection_child = layer_collection_child->next;
+ }
+ }
+ BLI_assert(layer_collection_child == NULL);
+ layer_collection_parent = layer_collection_parent->next;
+ }
+ }
+ BLI_assert(layer_collection_parent == NULL);
+
+ /* convert active base */
+ if (scene->basact) {
+ view_layer->basact = BKE_view_layer_base_find(view_layer, scene->basact->object);
+ }
+
+ /* convert selected bases */
+ for (Base *base = scene->base.first; base; base = base->next) {
+ if ((base->flag & BASE_SELECTABLED) && (base->object->flag & SELECT)) {
+ base->flag |= BASE_SELECTED;
+ }
+
+ /* keep lay around for forward compatibility (open those files in 2.79) */
+ base->lay = base->object->lay;
+ }
+
+ /* remove bases once and for all */
+ for (Base *base = scene->base.first; base; base = base->next) {
+ id_us_min(&base->object->id);
+ }
+ BLI_freelistN(&scene->base);
+ scene->basact = NULL;
+ }
+ }
+ }
+
+ if (!MAIN_VERSION_ATLEAST(main, 280, 0)) {
+ for (bScreen *screen = main->screen.first; screen; screen = screen->id.next) {
+ /* same render-layer as do_version_workspaces_after_lib_link will activate,
+ * so same layer as BKE_view_layer_from_workspace_get would return */
+ ViewLayer *layer = screen->scene->view_layers.first;
+
+ for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
+ for (SpaceLink *view_layer = sa->spacedata.first; view_layer; view_layer = view_layer->next) {
+ if (view_layer->spacetype == SPACE_OUTLINER) {
+ SpaceOops *soutliner = (SpaceOops *)view_layer;
+
+ soutliner->outlinevis = SO_VIEW_LAYER;
+
+ if (BLI_listbase_count_ex(&layer->layer_collections, 2) == 1) {
+ if (soutliner->treestore == NULL) {
+ soutliner->treestore = BLI_mempool_create(
+ sizeof(TreeStoreElem), 1, 512, BLI_MEMPOOL_ALLOW_ITER);
+ }
+
+ /* Create a tree store element for the collection. This is normally
+ * done in check_persistent (outliner_tree.c), but we need to access
+ * it here :/ (expand element if it's the only one) */
+ TreeStoreElem *tselem = BLI_mempool_calloc(soutliner->treestore);
+ tselem->type = TSE_LAYER_COLLECTION;
+ tselem->id = layer->layer_collections.first;
+ tselem->nr = tselem->used = 0;
+ tselem->flag &= ~TSE_CLOSED;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /* New workspace design */
+ if (!MAIN_VERSION_ATLEAST(main, 280, 1)) {
+ do_version_workspaces_after_lib_link(main);
+ }
+
+ if (!MAIN_VERSION_ATLEAST(main, 280, 2)) {
+ /* Cleanup any remaining SceneRenderLayer data for files that were created
+ * with Blender 2.8 before the SceneRenderLayer > RenderLayer refactor. */
+ for (Scene *scene = main->scene.first; scene; scene = scene->id.next) {
+ for (SceneRenderLayer *srl = scene->r.layers.first; srl; srl = srl->next) {
+ if (srl->prop) {
+ IDP_FreeProperty(srl->prop);
+ MEM_freeN(srl->prop);
+ }
+ BKE_freestyle_config_free(&srl->freestyleConfig, true);
+ }
+ BLI_freelistN(&scene->r.layers);
+ }
+ }
+
+ {
+ for (WorkSpace *workspace = main->workspaces.first; workspace; workspace = workspace->id.next) {
+ if (workspace->view_layer) {
+ /* During 2.8 work we temporarly stored view-layer in the
+ * workspace directly, but should be stored there per-scene. */
+ for (Scene *scene = main->scene.first; scene; scene = scene->id.next) {
+ if (BLI_findindex(&scene->view_layers, workspace->view_layer) != -1) {
+ BKE_workspace_view_layer_set(workspace, workspace->view_layer, scene);
+ workspace->view_layer = NULL;
+ }
+ }
+ }
+ /* While this should apply to most cases, it fails when reading workspaces.blend
+ * to get its list of workspaces without actually appending any of them. */
+// BLI_assert(workspace->view_layer == NULL);
+ }
+ }
+
+ {
+ /* Since we don't have access to FileData we check the (always valid) master collection of the group. */
+ for (Group *group = main->group.first; group; group = group->id.next) {
+ if (group->collection == NULL) {
+ BKE_group_init(group);
+ SceneCollection *sc = GROUP_MASTER_COLLECTION(group);
+ SceneCollection *sc_hidden = NULL;
+
+ for (GroupObject *go = group->gobject.first; go; go = go->next) {
+ if (go->ob->lay & group->layer) {
+ BKE_collection_object_add(&group->id, sc, go->ob);
+ }
+ else {
+ if (sc_hidden == NULL) {
+ sc_hidden = BKE_collection_add(&group->id, sc, COLLECTION_TYPE_GROUP_INTERNAL, "Hidden");
+ }
+ BKE_collection_object_add(&group->id, sc_hidden, go->ob);
+ }
+ }
+
+ if (sc_hidden != NULL) {
+ LayerCollection *layer_collection_master, *layer_collection_hidden;
+ layer_collection_master = group->view_layer->layer_collections.first;
+ layer_collection_hidden = layer_collection_master->layer_collections.first;
+ layer_collection_hidden->flag |= COLLECTION_DISABLED;
+ }
+ }
+
+ GroupObject *go;
+ while ((go = BLI_pophead(&group->gobject))) {
+ MEM_freeN(go);
+ }
+ }
+ }
+
+ {
+ for (Object *object = main->object.first; object; object = object->id.next) {
+#ifndef VERSION_280_SUBVERSION_4
+ /* If any object already has an initialized value for
+ * duplicator_visibility_flag it means we've already doversioned it.
+ * TODO(all) remove the VERSION_280_SUBVERSION_4 code once the subversion was bumped. */
+ if (object->duplicator_visibility_flag != 0) {
+ break;
+ }
+#endif
+ if (object->particlesystem.first) {
+ object->duplicator_visibility_flag = OB_DUPLI_FLAG_VIEWPORT;
+ for (ParticleSystem *psys = object->particlesystem.first; psys; psys=psys->next) {
+ if (psys->part->draw & PART_DRAW_EMITTER) {
+ object->duplicator_visibility_flag |= OB_DUPLI_FLAG_RENDER;
+#ifndef VERSION_280_SUBVERSION_4
+ psys->part->draw &= ~PART_DRAW_EMITTER;
+#else
+ break;
+#endif
+ }
+ }
+ }
+ else if (object->transflag & OB_DUPLI){
+ object->duplicator_visibility_flag = OB_DUPLI_FLAG_VIEWPORT;
+ }
+ else {
+ object->duplicator_visibility_flag = OB_DUPLI_FLAG_VIEWPORT | OB_DUPLI_FLAG_RENDER;
+ }
+ }
+ }
+}
+
+static void do_version_layer_collections_idproperties(ListBase *lb)
+{
+ IDPropertyTemplate val = {0};
+ for (LayerCollection *lc = lb->first; lc; lc = lc->next) {
+ lc->properties = IDP_New(IDP_GROUP, &val, ROOT_PROP);
+ BKE_layer_collection_engine_settings_create(lc->properties);
+
+ /* No overrides at first */
+ for (IDProperty *prop = lc->properties->data.group.first; prop; prop = prop->next) {
+ while (prop->data.group.first) {
+ IDP_FreeFromGroup(prop, prop->data.group.first);
+ }
+ }
+
+ /* Do it recursively */
+ do_version_layer_collections_idproperties(&lc->layer_collections);
+ }
+}
+
+static void do_version_view_layer_visibility(ViewLayer *view_layer)
+{
+ LayerCollection *layer_collection;
+ for (layer_collection = view_layer->layer_collections.first;
+ layer_collection;
+ layer_collection = layer_collection->next)
+ {
+ if (layer_collection->flag & COLLECTION_DISABLED) {
+ BKE_collection_enable(view_layer, layer_collection);
+ layer_collection->flag &= ~COLLECTION_DISABLED;
+ }
+
+ if ((layer_collection->flag & (1 << 0)) == 0) { /* !COLLECTION_VISIBLE */
+ layer_collection->flag |= COLLECTION_DISABLED;
+ }
+ layer_collection->flag |= COLLECTION_VIEWPORT | COLLECTION_RENDER;
+ }
+}
+
+void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *main)
+{
+
+ if (!MAIN_VERSION_ATLEAST(main, 280, 0)) {
+ for (Scene *scene = main->scene.first; scene; scene = scene->id.next) {
+ if (STREQ(scene->r.engine, RE_engine_id_BLENDER_RENDER)) {
+#ifdef WITH_CLAY_ENGINE
+ BLI_strncpy(scene->r.engine, RE_engine_id_BLENDER_CLAY, sizeof(scene->r.engine));
+#else
+ BLI_strncpy(scene->r.engine, RE_engine_id_BLENDER_EEVEE, sizeof(scene->r.engine));
+#endif
+ }
+ }
+
+ if (!DNA_struct_elem_find(fd->filesdna, "Scene", "ListBase", "view_layers")) {
+ for (Scene *scene = main->scene.first; scene; scene = scene->id.next) {
+ /* Master Collection */
+ scene->collection = MEM_callocN(sizeof(SceneCollection), "Master Collection");
+ BLI_strncpy(scene->collection->name, "Master Collection", sizeof(scene->collection->name));
+ }
+ }
+
+ if (DNA_struct_elem_find(fd->filesdna, "LayerCollection", "ListBase", "engine_settings") &&
+ !DNA_struct_elem_find(fd->filesdna, "LayerCollection", "IDProperty", "properties"))
+ {
+ for (Scene *scene = main->scene.first; scene; scene = scene->id.next) {
+ for (ViewLayer *view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
+ do_version_layer_collections_idproperties(&view_layer->layer_collections);
+ }
+ }
+ }
+ }
+
+ if (!MAIN_VERSION_ATLEAST(main, 280, 1)) {
+ if (!DNA_struct_elem_find(fd->filesdna, "Lamp", "float", "bleedexp")) {
+ for (Lamp *la = main->lamp.first; la; la = la->id.next) {
+ la->bleedexp = 2.5f;
+ }
+ }
+
+ if (!DNA_struct_elem_find(fd->filesdna, "GPUDOFSettings", "float", "ratio")) {
+ for (Camera *ca = main->camera.first; ca; ca = ca->id.next) {
+ ca->gpu_dof.ratio = 1.0f;
+ }
+ }
+
+ if (!DNA_struct_elem_find(fd->filesdna, "ViewLayer", "IDProperty", "*properties")) {
+ for (Scene *scene = main->scene.first; scene; scene = scene->id.next) {
+ for (ViewLayer *view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
+ IDPropertyTemplate val = {0};
+ view_layer->properties = IDP_New(IDP_GROUP, &val, ROOT_PROP);
+ BKE_view_layer_engine_settings_create(view_layer->properties);
+ }
+ }
+ }
+
+ /* MTexPoly now removed. */
+ if (DNA_struct_find(fd->filesdna, "MTexPoly")) {
+ const int cd_mtexpoly = 15; /* CD_MTEXPOLY, deprecated */
+ for (Mesh *me = main->mesh.first; me; me = me->id.next) {
+ /* If we have UV's, so this file will have MTexPoly layers too! */
+ if (me->mloopuv != NULL) {
+ CustomData_update_typemap(&me->pdata);
+ CustomData_free_layers(&me->pdata, cd_mtexpoly, me->totpoly);
+ BKE_mesh_update_customdata_pointers(me, false);
+ }
+ }
+ }
+ }
+
+ if (!MAIN_VERSION_ATLEAST(main, 280, 2)) {
+ if (!DNA_struct_elem_find(fd->filesdna, "View3D", "short", "custom_orientation_index")) {
+ for (bScreen *screen = main->screen.first; screen; screen = screen->id.next) {
+ for (ScrArea *area = screen->areabase.first; area; area = area->next) {
+ for (SpaceLink *sl = area->spacedata.first; sl; sl = sl->next) {
+ if (sl->spacetype == SPACE_VIEW3D) {
+ View3D *v3d = (View3D *)sl;
+ if (v3d->twmode >= V3D_MANIP_CUSTOM) {
+ v3d->custom_orientation_index = v3d->twmode - V3D_MANIP_CUSTOM;
+ v3d->twmode = V3D_MANIP_CUSTOM;
+ }
+ else {
+ v3d->custom_orientation_index = -1;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if (!DNA_struct_elem_find(fd->filesdna, "Lamp", "float", "cascade_max_dist")) {
+ for (Lamp *la = main->lamp.first; la; la = la->id.next) {
+ la->cascade_max_dist = 1000.0f;
+ la->cascade_count = 4;
+ la->cascade_exponent = 0.8f;
+ la->cascade_fade = 0.1f;
+ }
+ }
+
+ if (!DNA_struct_elem_find(fd->filesdna, "Lamp", "float", "contact_dist")) {
+ for (Lamp *la = main->lamp.first; la; la = la->id.next) {
+ la->contact_dist = 1.0f;
+ la->contact_bias = 0.03f;
+ la->contact_spread = 0.2f;
+ la->contact_thickness = 0.5f;
+ }
+ }
+
+ if (!DNA_struct_elem_find(fd->filesdna, "LightProbe", "float", "vis_bias")) {
+ for (LightProbe *probe = main->lightprobe.first; probe; probe = probe->id.next) {
+ probe->vis_bias = 1.0f;
+ probe->vis_blur = 0.2f;
+ }
+ }
+
+ typedef enum eNTreeDoVersionErrors {
+ NTREE_DOVERSION_NO_ERROR = 0,
+ NTREE_DOVERSION_NEED_OUTPUT = (1 << 0),
+ NTREE_DOVERSION_TRANSPARENCY_EMISSION = (1 << 1),
+ } eNTreeDoVersionErrors;
+
+ /* Eevee shader nodes renamed because of the output node system.
+ * Note that a new output node is not being added here, because it would be overkill
+ * to handle this case in lib_verify_nodetree.
+ *
+ * Also, metallic node is now unified into the principled node. */
+ eNTreeDoVersionErrors error = NTREE_DOVERSION_NO_ERROR;
+
+ FOREACH_NODETREE(main, ntree, id) {
+ if (ntree->type == NTREE_SHADER) {
+ for (bNode *node = ntree->nodes.first; node; node = node->next) {
+ if (node->type == 194 /* SH_NODE_EEVEE_METALLIC */ &&
+ STREQ(node->idname, "ShaderNodeOutputMetallic"))
+ {
+ BLI_strncpy(node->idname, "ShaderNodeEeveeMetallic", sizeof(node->idname));
+ error |= NTREE_DOVERSION_NEED_OUTPUT;
+ }
+
+ else if (node->type == SH_NODE_EEVEE_SPECULAR && STREQ(node->idname, "ShaderNodeOutputSpecular")) {
+ BLI_strncpy(node->idname, "ShaderNodeEeveeSpecular", sizeof(node->idname));
+ error |= NTREE_DOVERSION_NEED_OUTPUT;
+ }
+
+ else if (node->type == 196 /* SH_NODE_OUTPUT_EEVEE_MATERIAL */ &&
+ STREQ(node->idname, "ShaderNodeOutputEeveeMaterial"))
+ {
+ node->type = SH_NODE_OUTPUT_MATERIAL;
+ BLI_strncpy(node->idname, "ShaderNodeOutputMaterial", sizeof(node->idname));
+ }
+
+ else if (node->type == 194 /* SH_NODE_EEVEE_METALLIC */ &&
+ STREQ(node->idname, "ShaderNodeEeveeMetallic"))
+ {
+ node->type = SH_NODE_BSDF_PRINCIPLED;
+ BLI_strncpy(node->idname, "ShaderNodeBsdfPrincipled", sizeof(node->idname));
+ node->custom1 = SHD_GLOSSY_MULTI_GGX;
+ error |= NTREE_DOVERSION_TRANSPARENCY_EMISSION;
+ }
+ }
+ }
+ } FOREACH_NODETREE_END
+
+ if (error & NTREE_DOVERSION_NEED_OUTPUT) {
+ BKE_report(fd->reports, RPT_ERROR, "Eevee material conversion problem. Error in console");
+ printf("You need to connect Principled and Eevee Specular shader nodes to new material output nodes.\n");
+ }
+
+ if (error & NTREE_DOVERSION_TRANSPARENCY_EMISSION) {
+ BKE_report(fd->reports, RPT_ERROR, "Eevee material conversion problem. Error in console");
+ printf("You need to combine transparency and emission shaders to the converted Principled shader nodes.\n");
+ }
+
+ if (!DNA_struct_elem_find(fd->filesdna, "Scene", "ViewRender", "view_render")) {
+ for (Scene *scene = main->scene.first; scene; scene = scene->id.next) {
+ BLI_strncpy_utf8(scene->view_render.engine_id, scene->r.engine,
+ sizeof(scene->view_render.engine_id));
+ }
+
+ for (WorkSpace *workspace = main->workspaces.first; workspace; workspace = workspace->id.next) {
+ BKE_viewrender_init(&workspace->view_render);
+ }
+ }
+
+ if ((DNA_struct_elem_find(fd->filesdna, "ViewLayer", "FreestyleConfig", "freestyle_config") == false) &&
+ DNA_struct_elem_find(fd->filesdna, "Scene", "ListBase", "view_layers"))
+ {
+ for (Scene *scene = main->scene.first; scene; scene = scene->id.next) {
+ ViewLayer *view_layer;
+ for (view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
+ view_layer->flag |= VIEW_LAYER_FREESTYLE;
+ view_layer->layflag = 0x7FFF; /* solid ztra halo edge strand */
+ view_layer->passflag = SCE_PASS_COMBINED | SCE_PASS_Z;
+ view_layer->pass_alpha_threshold = 0.5f;
+ BKE_freestyle_config_init(&view_layer->freestyle_config);
+ }
+ }
+ }
+ }
+
+ if (!MAIN_VERSION_ATLEAST(main, 280, 3)) {
+ for (Scene *scene = main->scene.first; scene; scene = scene->id.next) {
+ ViewLayer *view_layer;
+ for (view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
+ do_version_view_layer_visibility(view_layer);
+ }
+ }
+
+ for (Group *group = main->group.first; group; group = group->id.next) {
+ if (group->view_layer != NULL){
+ do_version_view_layer_visibility(group->view_layer);
+ }
+ }
+ }
+
+ {
+ if (DNA_struct_elem_find(fd->filesdna, "SpaceOops", "int", "filter") == false) {
+ bScreen *sc;
+ ScrArea *sa;
+ SpaceLink *sl;
+
+ /* Update files using invalid (outdated) outlinevis Outliner values. */
+ for (sc = main->screen.first; sc; sc = sc->id.next) {
+ for (sa = sc->areabase.first; sa; sa = sa->next) {
+ for (sl = sa->spacedata.first; sl; sl = sl->next) {
+ if (sl->spacetype == SPACE_OUTLINER) {
+ SpaceOops *so = (SpaceOops *)sl;
+
+ if (!ELEM(so->outlinevis,
+ SO_SCENES,
+ SO_GROUPS,
+ SO_LIBRARIES,
+ SO_SEQUENCE,
+ SO_DATABLOCKS,
+ SO_ID_ORPHANS,
+ SO_VIEW_LAYER,
+ SO_COLLECTIONS))
+ {
+ so->outlinevis = SO_VIEW_LAYER;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ {
+ if (!DNA_struct_elem_find(fd->filesdna, "LightProbe", "float", "intensity")) {
+ for (LightProbe *probe = main->lightprobe.first; probe; probe = probe->id.next) {
+ probe->intensity = 1.0f;
+ }
+ }
+ }
+}
diff --git a/source/blender/blenloader/intern/versioning_defaults.c b/source/blender/blenloader/intern/versioning_defaults.c
index 7e05ba1f529..b09c7d77e59 100644
--- a/source/blender/blenloader/intern/versioning_defaults.c
+++ b/source/blender/blenloader/intern/versioning_defaults.c
@@ -28,6 +28,7 @@
#include "BLI_utildefines.h"
#include "BLI_listbase.h"
#include "BLI_math.h"
+#include "BLI_string.h"
#include "DNA_brush_types.h"
#include "DNA_freestyle_types.h"
@@ -39,10 +40,13 @@
#include "DNA_mesh_types.h"
#include "DNA_material_types.h"
#include "DNA_object_types.h"
+#include "DNA_workspace_types.h"
#include "BKE_brush.h"
#include "BKE_library.h"
#include "BKE_main.h"
+#include "BKE_scene.h"
+#include "BKE_workspace.h"
#include "BLO_readfile.h"
@@ -86,17 +90,46 @@ void BLO_update_defaults_userpref_blend(void)
}
/**
+ * New workspace design: Remove all screens/workspaces except of "Default" one and rename the workspace to "General".
+ * For compatibility, a new workspace has been created for each screen of old files,
+ * we only want one workspace and one screen in the default startup file however.
+ */
+static void update_defaults_startup_workspaces(Main *bmain)
+{
+ WorkSpace *workspace_default = NULL;
+
+ for (WorkSpace *workspace = bmain->workspaces.first, *workspace_next; workspace; workspace = workspace_next) {
+ workspace_next = workspace->id.next;
+
+ if (STREQ(workspace->id.name + 2, "Default")) {
+ /* don't rename within iterator, renaming causes listbase to be re-sorted */
+ workspace_default = workspace;
+ BKE_viewrender_init(&workspace->view_render);
+ }
+ else {
+ BKE_workspace_remove(bmain, workspace);
+ }
+ }
+
+ /* rename "Default" workspace to "General" */
+ BKE_libblock_rename(bmain, (ID *)workspace_default, "General");
+ BLI_assert(BLI_listbase_count(BKE_workspace_layouts_get(workspace_default)) == 1);
+}
+
+/**
* Update defaults in startup.blend, without having to save and embed the file.
* This function can be emptied each time the startup.blend is updated. */
void BLO_update_defaults_startup_blend(Main *bmain)
{
for (Scene *scene = bmain->scene.first; scene; scene = scene->id.next) {
+ BLI_strncpy(scene->view_render.engine_id, RE_engine_id_BLENDER_EEVEE, sizeof(scene->view_render.engine_id));
+
scene->r.im_format.planes = R_IMF_PLANES_RGBA;
scene->r.im_format.compress = 15;
- for (SceneRenderLayer *srl = scene->r.layers.first; srl; srl = srl->next) {
- srl->freestyleConfig.sphere_radius = 0.1f;
- srl->pass_alpha_threshold = 0.5f;
+ for (ViewLayer *view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
+ view_layer->freestyle_config.sphere_radius = 0.1f;
+ view_layer->pass_alpha_threshold = 0.5f;
}
if (scene->toolsettings) {
@@ -191,20 +224,18 @@ void BLO_update_defaults_startup_blend(Main *bmain)
linestyle->chain_count = 10;
}
- for (bScreen *screen = bmain->screen.first; screen; screen = screen->id.next) {
- ScrArea *area;
- for (area = screen->areabase.first; area; area = area->next) {
- SpaceLink *space_link;
- ARegion *ar;
+ update_defaults_startup_workspaces(bmain);
- for (space_link = area->spacedata.first; space_link; space_link = space_link->next) {
+ for (bScreen *screen = bmain->screen.first; screen; screen = screen->id.next) {
+ for (ScrArea *area = screen->areabase.first; area; area = area->next) {
+ for (SpaceLink *space_link = area->spacedata.first; space_link; space_link = space_link->next) {
if (space_link->spacetype == SPACE_CLIP) {
SpaceClip *space_clip = (SpaceClip *) space_link;
space_clip->flag &= ~SC_MANUAL_CALIBRATION;
}
}
- for (ar = area->regionbase.first; ar; ar = ar->next) {
+ for (ARegion *ar = area->regionbase.first; ar; ar = ar->next) {
/* Remove all stored panels, we want to use defaults (order, open/closed) as defined by UI code here! */
BLI_freelistN(&ar->panels);
diff --git a/source/blender/blenloader/intern/versioning_legacy.c b/source/blender/blenloader/intern/versioning_legacy.c
index 80490081337..fa2287ff6da 100644
--- a/source/blender/blenloader/intern/versioning_legacy.c
+++ b/source/blender/blenloader/intern/versioning_legacy.c
@@ -319,55 +319,6 @@ static void idproperties_fix_group_lengths(ListBase idlist)
}
}
-static void alphasort_version_246(FileData *fd, Library *lib, Mesh *me)
-{
- Material *ma;
- MFace *mf;
- MTFace *tf;
- int a, b, texalpha;
-
- /* verify we have a tface layer */
- for (b = 0; b < me->fdata.totlayer; b++)
- if (me->fdata.layers[b].type == CD_MTFACE)
- break;
-
- if (b == me->fdata.totlayer)
- return;
-
- /* if we do, set alpha sort if the game engine did it before */
- for (a = 0, mf = me->mface; a < me->totface; a++, mf++) {
- if (mf->mat_nr < me->totcol) {
- ma = blo_do_versions_newlibadr(fd, lib, me->mat[mf->mat_nr]);
- texalpha = 0;
-
- /* we can't read from this if it comes from a library,
- * because direct_link might not have happened on it,
- * so ma->mtex is not pointing to valid memory yet */
- if (ma && ma->id.lib)
- ma = NULL;
-
- for (b = 0; ma && b < MAX_MTEX; b++)
- if (ma->mtex[b] && ma->mtex[b]->mapto & MAP_ALPHA)
- texalpha = 1;
- }
- else {
- ma = NULL;
- texalpha = 0;
- }
-
- for (b = 0; b < me->fdata.totlayer; b++) {
- if (me->fdata.layers[b].type == CD_MTFACE) {
- tf = ((MTFace*)me->fdata.layers[b].data) + a;
-
- tf->mode &= ~TF_ALPHASORT;
- if (ma && (ma->mode & MA_ZTRANSP))
- if (ELEM(tf->transp, TF_ALPHA, TF_ADD) || (texalpha && (tf->transp != TF_CLIP)))
- tf->mode |= TF_ALPHASORT;
- }
- }
- }
-}
-
static void customdata_version_242(Mesh *me)
{
CustomDataLayer *layer;
@@ -403,13 +354,6 @@ static void customdata_version_242(Mesh *me)
for (a = 0; a < me->totface; a++, mtf++, tf++, mcol += 4) {
memcpy(mcol, tf->col, sizeof(tf->col));
memcpy(mtf->uv, tf->uv, sizeof(tf->uv));
-
- mtf->flag = tf->flag;
- mtf->unwrap = tf->unwrap;
- mtf->mode = tf->mode;
- mtf->tile = tf->tile;
- mtf->tpage = tf->tpage;
- mtf->transp = tf->transp;
}
MEM_freeN(me->tface);
@@ -916,23 +860,6 @@ void blo_do_versions_pre250(FileData *fd, Library *lib, Main *main)
}
}
- if (main->versionfile <= 196) {
- Mesh *me = main->mesh.first;
- int a, b;
- while (me) {
- if (me->tface) {
- TFace *tface = me->tface;
- for (a = 0; a < me->totface; a++, tface++) {
- for (b = 0; b < 4; b++) {
- tface->mode |= TF_DYNAMIC;
- tface->mode &= ~TF_INVISIBLE;
- }
- }
- }
- me = me->id.next;
- }
- }
-
if (main->versionfile <= 200) {
Object *ob = main->object.first;
while (ob) {
@@ -1944,7 +1871,7 @@ void blo_do_versions_pre250(FileData *fd, Library *lib, Main *main)
BKE_pose_tag_recalc(main, ob->pose);
/* cannot call stuff now (pointers!), done in setup_app_data */
- ob->recalc |= OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME;
+ ob->id.recalc |= ID_RECALC_ALL;
/* new generic xray option */
arm = blo_do_versions_newlibadr(fd, lib, ob->data);
@@ -2218,18 +2145,16 @@ void blo_do_versions_pre250(FileData *fd, Library *lib, Main *main)
if (sce->r.yparts < 2)
sce->r.yparts = 4;
- /* adds default layer */
- if (BLI_listbase_is_empty(&sce->r.layers)) {
- BKE_scene_add_render_layer(sce, NULL);
- }
- else {
- SceneRenderLayer *srl;
- /* new layer flag for sky, was default for solid */
- for (srl = sce->r.layers.first; srl; srl = srl->next) {
- if (srl->layflag & SCE_LAY_SOLID)
- srl->layflag |= SCE_LAY_SKY;
- srl->passflag &= (SCE_PASS_COMBINED|SCE_PASS_Z|SCE_PASS_NORMAL|SCE_PASS_VECTOR);
- }
+ /* We don't add default layer since blender2.8 because the layers
+ * are now in Scene->view_layers and a default layer is created in
+ * the doversion later on.
+ */
+ SceneRenderLayer *srl;
+ /* new layer flag for sky, was default for solid */
+ for (srl = sce->r.layers.first; srl; srl = srl->next) {
+ if (srl->layflag & SCE_LAY_SOLID)
+ srl->layflag |= SCE_LAY_SKY;
+ srl->passflag &= (SCE_PASS_COMBINED|SCE_PASS_Z|SCE_PASS_NORMAL|SCE_PASS_VECTOR);
}
/* node version changes */
@@ -2529,13 +2454,8 @@ void blo_do_versions_pre250(FileData *fd, Library *lib, Main *main)
for (sa = sc->areabase.first; sa; sa = sa->next) {
SpaceLink *sl;
for (sl = sa->spacedata.first; sl; sl = sl->next) {
- if (sl->spacetype == SPACE_IMAGE)
+ if (sl->spacetype == SPACE_IMAGE) {
((SpaceImage *)sl)->iuser.fie_ima = 2;
- else if (sl->spacetype == SPACE_VIEW3D) {
- View3D *v3d = (View3D *)sl;
- BGpic *bgpic;
- for (bgpic = v3d->bgpicbase.first; bgpic; bgpic = bgpic->next)
- bgpic->iuser.fie_ima = 2;
}
}
}
@@ -3290,14 +3210,6 @@ void blo_do_versions_pre250(FileData *fd, Library *lib, Main *main)
}
}
-
- if (main->versionfile < 246 || (main->versionfile == 246 && main->subversionfile < 1)) {
- Mesh *me;
-
- for (me = main->mesh.first; me; me = me->id.next)
- alphasort_version_246(fd, lib, me);
- }
-
if (main->versionfile < 246 || (main->versionfile == 246 && main->subversionfile < 1)) {
Object *ob;
for (ob = main->object.first; ob; ob = ob->id.next) {
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index ceb1233596a..712ce334002 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -102,6 +102,10 @@
/* allow writefile to use deprecated functionality (for forward compatibility code) */
#define DNA_DEPRECATED_ALLOW
+/* Allow using DNA struct members that are marked as private for read/write.
+ * Note: Each header that uses this needs to define its own way of handling
+ * it. There's no generic implementation, direct use does nothing. */
+#define DNA_PRIVATE_READ_WRITE_ALLOW
#include "DNA_anim_types.h"
#include "DNA_armature_types.h"
@@ -120,6 +124,7 @@
#include "DNA_key_types.h"
#include "DNA_lattice_types.h"
#include "DNA_lamp_types.h"
+#include "DNA_layer_types.h"
#include "DNA_linestyle_types.h"
#include "DNA_meta_types.h"
#include "DNA_mesh_types.h"
@@ -130,6 +135,7 @@
#include "DNA_object_force_types.h"
#include "DNA_packedFile_types.h"
#include "DNA_particle_types.h"
+#include "DNA_lightprobe_types.h"
#include "DNA_property_types.h"
#include "DNA_rigidbody_types.h"
#include "DNA_scene_types.h"
@@ -146,6 +152,7 @@
#include "DNA_vfont_types.h"
#include "DNA_world_types.h"
#include "DNA_windowmanager_types.h"
+#include "DNA_workspace_types.h"
#include "DNA_movieclip_types.h"
#include "DNA_mask_types.h"
@@ -161,8 +168,10 @@
#include "BKE_curve.h"
#include "BKE_constraint.h"
#include "BKE_global.h" // for G
+#include "BKE_group.h"
#include "BKE_idcode.h"
#include "BKE_library.h" // for set_listbasepointers
+#include "BKE_library_override.h"
#include "BKE_main.h"
#include "BKE_node.h"
#include "BKE_report.h"
@@ -172,6 +181,7 @@
#include "BKE_fcurve.h"
#include "BKE_pointcache.h"
#include "BKE_mesh.h"
+#include "BKE_workspace.h"
#ifdef USE_NODE_COMPAT_CUSTOMNODES
#include "NOD_socket.h" /* for sock->default_value data */
@@ -675,6 +685,25 @@ static void write_iddata(void *wd, const ID *id)
if (id->properties && !ELEM(GS(id->name), ID_WM)) {
IDP_WriteProperty(id->properties, wd);
}
+
+ if (id->override_static) {
+ writestruct(wd, DATA, IDOverrideStatic, 1, id->override_static);
+
+ writelist(wd, DATA, IDOverrideStaticProperty, &id->override_static->properties);
+ for (IDOverrideStaticProperty *op = id->override_static->properties.first; op; op = op->next) {
+ writedata(wd, DATA, strlen(op->rna_path) + 1, op->rna_path);
+
+ writelist(wd, DATA, IDOverrideStaticPropertyOperation, &op->operations);
+ for (IDOverrideStaticPropertyOperation *opop = op->operations.first; opop; opop = opop->next) {
+ if (opop->subitem_reference_name) {
+ writedata(wd, DATA, strlen(opop->subitem_reference_name) + 1, opop->subitem_reference_name);
+ }
+ if (opop->subitem_local_name) {
+ writedata(wd, DATA, strlen(opop->subitem_local_name) + 1, opop->subitem_local_name);
+ }
+ }
+ }
+ }
}
static void write_previews(WriteData *wd, const PreviewImage *prv_orig)
@@ -1078,10 +1107,13 @@ static void write_nodetree_nolib(WriteData *wd, bNodeTree *ntree)
* Take care using 'use_active_win', since we wont want the currently active window
* to change which scene renders (currently only used for undo).
*/
-static void current_screen_compat(Main *mainvar, bScreen **r_screen, bool use_active_win)
+static void current_screen_compat(
+ Main *mainvar, bool use_active_win,
+ bScreen **r_screen, Scene **r_scene, ViewLayer **r_render_layer)
{
wmWindowManager *wm;
wmWindow *window = NULL;
+ WorkSpace *workspace;
/* find a global current screen in the first open window, to have
* a reasonable default for reading in older versions */
@@ -1105,8 +1137,11 @@ static void current_screen_compat(Main *mainvar, bScreen **r_screen, bool use_ac
window = wm->windows.first;
}
}
+ workspace = (window) ? BKE_workspace_active_get(window->workspace_hook) : NULL;
- *r_screen = (window) ? window->screen : NULL;
+ *r_screen = (window) ? BKE_workspace_active_screen_get(window->workspace_hook) : NULL;
+ *r_scene = (window) ? window->scene : NULL;
+ *r_render_layer = (window) ? BKE_workspace_view_layer_get(workspace, *r_scene) : NULL;
}
typedef struct RenderInfo {
@@ -1122,13 +1157,11 @@ static void write_renderinfo(WriteData *wd, Main *mainvar)
{
bScreen *curscreen;
Scene *sce, *curscene = NULL;
+ ViewLayer *render_layer;
RenderInfo data;
/* XXX in future, handle multiple windows with multiple screens? */
- current_screen_compat(mainvar, &curscreen, false);
- if (curscreen) {
- curscene = curscreen->scene;
- }
+ current_screen_compat(mainvar, false, &curscreen, &curscene, &render_layer);
for (sce = mainvar->scene.first; sce; sce = sce->id.next) {
if (sce->id.lib == NULL && (sce == curscene || (sce->r.scemode & R_BG_RENDER))) {
@@ -1310,9 +1343,13 @@ static void write_particlesettings(WriteData *wd, ParticleSettings *part)
if (dw->ob != NULL) {
dw->index = 0;
if (part->dup_group) { /* can be NULL if lining fails or set to None */
- for (GroupObject *go = part->dup_group->gobject.first;
- go && go->ob != dw->ob;
- go = go->next, dw->index++);
+ FOREACH_GROUP_OBJECT(part->dup_group, object)
+ {
+ if (object != dw->ob) {
+ dw->index++;
+ }
+ }
+ FOREACH_GROUP_OBJECT_END
}
}
writestruct(wd, DATA, ParticleDupliWeight, 1, dw);
@@ -1681,6 +1718,13 @@ static void write_defgroups(WriteData *wd, ListBase *defbase)
}
}
+static void write_fmaps(WriteData *wd, ListBase *fbase)
+{
+ for (bFaceMap *fmap = fbase->first; fmap; fmap = fmap->next) {
+ writestruct(wd, DATA, bFaceMap, 1, fmap);
+ }
+}
+
static void write_modifiers(WriteData *wd, ListBase *modbase)
{
ModifierData *md;
@@ -1718,6 +1762,8 @@ static void write_modifiers(WriteData *wd, ListBase *modbase)
SmokeModifierData *smd = (SmokeModifierData *)md;
if (smd->type & MOD_SMOKE_TYPE_DOMAIN) {
+ writestruct(wd, DATA, SmokeDomainSettings, 1, smd->domain);
+
if (smd->domain) {
write_pointcaches(wd, &(smd->domain->ptcaches[0]));
@@ -1731,11 +1777,8 @@ static void write_modifiers(WriteData *wd, ListBase *modbase)
if (smd->domain->coba) {
writestruct(wd, DATA, ColorBand, 1, smd->domain->coba);
}
- }
- writestruct(wd, DATA, SmokeDomainSettings, 1, smd->domain);
- if (smd->domain) {
/* cleanup the fake pointcache */
BKE_ptcache_free_list(&smd->domain->ptcaches[1]);
smd->domain->point_cache[1] = NULL;
@@ -1885,6 +1928,7 @@ static void write_object(WriteData *wd, Object *ob)
write_pose(wd, ob->pose);
write_defgroups(wd, &ob->defbase);
+ write_fmaps(wd, &ob->fmaps);
write_constraints(wd, &ob->constraints);
write_motionpath(wd, ob->mpath);
@@ -1967,6 +2011,10 @@ static void write_camera(WriteData *wd, Camera *cam)
if (cam->adt) {
write_animdata(wd, cam->adt);
}
+
+ for (CameraBGImage *bgpic = cam->bg_images.first; bgpic; bgpic = bgpic->next) {
+ writestruct(wd, DATA, CameraBGImage, 1, bgpic);
+ }
}
}
@@ -2117,6 +2165,10 @@ static void write_customdata(
else if (layer->type == CD_GRID_PAINT_MASK) {
write_grid_paint_mask(wd, count, layer->data);
}
+ else if (layer->type == CD_FACEMAP) {
+ const int *layer_data = layer->data;
+ writedata(wd, DATA, sizeof(*layer_data) * count, layer_data);
+ }
else {
CustomData_file_write_info(layer->type, &structname, &structnum);
if (structnum) {
@@ -2531,6 +2583,55 @@ static void write_paint(WriteData *wd, Paint *p)
}
}
+static void write_scene_collection(WriteData *wd, SceneCollection *sc)
+{
+ writestruct(wd, DATA, SceneCollection, 1, sc);
+
+ writelist(wd, DATA, LinkData, &sc->objects);
+
+ for (SceneCollection *nsc = sc->scene_collections.first; nsc; nsc = nsc->next) {
+ write_scene_collection(wd, nsc);
+ }
+}
+
+static void write_layer_collections(WriteData *wd, ListBase *lb)
+{
+ for (LayerCollection *lc = lb->first; lc; lc = lc->next) {
+ writestruct(wd, DATA, LayerCollection, 1, lc);
+
+ writelist(wd, DATA, LinkData, &lc->object_bases);
+ writelist(wd, DATA, CollectionOverride, &lc->overrides);
+
+ if (lc->properties) {
+ IDP_WriteProperty(lc->properties, wd);
+ }
+
+ write_layer_collections(wd, &lc->layer_collections);
+ }
+}
+
+static void write_view_layer(WriteData *wd, ViewLayer *view_layer)
+{
+ writestruct(wd, DATA, ViewLayer, 1, view_layer);
+ writelist(wd, DATA, Base, &view_layer->object_bases);
+ if (view_layer->properties) {
+ IDP_WriteProperty(view_layer->properties, wd);
+ }
+
+ if (view_layer->id_properties) {
+ IDP_WriteProperty(view_layer->id_properties, wd);
+ }
+
+ for (FreestyleModuleConfig *fmc = view_layer->freestyle_config.modules.first; fmc; fmc = fmc->next) {
+ writestruct(wd, DATA, FreestyleModuleConfig, 1, fmc);
+ }
+
+ for (FreestyleLineSet *fls = view_layer->freestyle_config.linesets.first; fls; fls = fls->next) {
+ writestruct(wd, DATA, FreestyleLineSet, 1, fls);
+ }
+ write_layer_collections(wd, &view_layer->layer_collections);
+}
+
static void write_scene(WriteData *wd, Scene *sce)
{
/* write LibData */
@@ -2543,10 +2644,6 @@ static void write_scene(WriteData *wd, Scene *sce)
write_keyingsets(wd, &sce->keyingsets);
/* direct data */
- for (Base *base = sce->base.first; base; base = base->next) {
- writestruct(wd, DATA, Base, 1, base);
- }
-
ToolSettings *tos = sce->toolsettings;
writestruct(wd, DATA, ToolSettings, 1, tos);
if (tos->vpaint) {
@@ -2694,24 +2791,6 @@ static void write_scene(WriteData *wd, Scene *sce)
writestruct(wd, DATA, TimeMarker, 1, marker);
}
- /* writing dynamic list of TransformOrientations to the blend file */
- for (TransformOrientation *ts = sce->transform_spaces.first; ts; ts = ts->next) {
- writestruct(wd, DATA, TransformOrientation, 1, ts);
- }
-
- for (SceneRenderLayer *srl = sce->r.layers.first; srl; srl = srl->next) {
- writestruct(wd, DATA, SceneRenderLayer, 1, srl);
- if (srl->prop) {
- IDP_WriteProperty(srl->prop, wd);
- }
- for (FreestyleModuleConfig *fmc = srl->freestyleConfig.modules.first; fmc; fmc = fmc->next) {
- writestruct(wd, DATA, FreestyleModuleConfig, 1, fmc);
- }
- for (FreestyleLineSet *fls = srl->freestyleConfig.linesets.first; fls; fls = fls->next) {
- writestruct(wd, DATA, FreestyleLineSet, 1, fls);
- }
- }
-
/* writing MultiView to the blend file */
for (SceneRenderView *srv = sce->r.views.first; srv; srv = srv->next) {
writestruct(wd, DATA, SceneRenderView, 1, srv);
@@ -2733,6 +2812,19 @@ static void write_scene(WriteData *wd, Scene *sce)
write_previews(wd, sce->preview);
write_curvemapping_curves(wd, &sce->r.mblur_shutter_curve);
+ write_scene_collection(wd, sce->collection);
+
+ for (ViewLayer *view_layer = sce->view_layers.first; view_layer; view_layer = view_layer->next) {
+ write_view_layer(wd, view_layer);
+ }
+
+ if (sce->layer_properties) {
+ IDP_WriteProperty(sce->layer_properties, wd);
+ }
+
+ if (sce->collection_properties) {
+ IDP_WriteProperty(sce->collection_properties, wd);
+ }
}
static void write_gpencil(WriteData *wd, bGPdata *gpd)
@@ -2774,8 +2866,16 @@ static void write_windowmanager(WriteData *wd, wmWindowManager *wm)
write_iddata(wd, &wm->id);
for (wmWindow *win = wm->windows.first; win; win = win->next) {
+
+ /* update deprecated screen member (for so loading in 2.7x uses the correct screen) */
+ win->screen = BKE_workspace_active_screen_get(win->workspace_hook);
+
writestruct(wd, DATA, wmWindow, 1, win);
+ writestruct(wd, DATA, WorkSpaceInstanceHook, 1, win->workspace_hook);
writestruct(wd, DATA, Stereo3dFormat, 1, win->stereo3d_format);
+
+ /* data is written, clear deprecated data again */
+ win->screen = NULL;
}
}
@@ -2866,6 +2966,8 @@ static void write_screen(WriteData *wd, bScreen *sc)
writestruct(wd, ID_SCRN, bScreen, 1, sc);
write_iddata(wd, &sc->id);
+ write_previews(wd, sc->preview);
+
/* direct data */
for (ScrVert *sv = sc->vertbase.first; sv; sv = sv->next) {
writestruct(wd, DATA, ScrVert, 1, sv);
@@ -2912,11 +3014,8 @@ static void write_screen(WriteData *wd, bScreen *sc)
if (sl->spacetype == SPACE_VIEW3D) {
View3D *v3d = (View3D *)sl;
- BGpic *bgpic;
writestruct(wd, DATA, View3D, 1, v3d);
- for (bgpic = v3d->bgpicbase.first; bgpic; bgpic = bgpic->next) {
- writestruct(wd, DATA, BGpic, 1, bgpic);
- }
+
if (v3d->localvd) {
writestruct(wd, DATA, View3D, 1, v3d->localvd);
}
@@ -3114,6 +3213,19 @@ static void write_sound(WriteData *wd, bSound *sound)
}
}
+static void write_probe(WriteData *wd, LightProbe *prb)
+{
+ if (prb->id.us > 0 || wd->current) {
+ /* write LibData */
+ writestruct(wd, ID_LP, LightProbe, 1, prb);
+ write_iddata(wd, &prb->id);
+
+ if (prb->adt) {
+ write_animdata(wd, prb->adt);
+ }
+ }
+}
+
static void write_group(WriteData *wd, Group *group)
{
if (group->id.us > 0 || wd->current) {
@@ -3122,10 +3234,8 @@ static void write_group(WriteData *wd, Group *group)
write_iddata(wd, &group->id);
write_previews(wd, group->preview);
-
- for (GroupObject *go = group->gobject.first; go; go = go->next) {
- writestruct(wd, DATA, GroupObject, 1, go);
- }
+ write_scene_collection(wd, group->collection);
+ write_view_layer(wd, group->view_layer);
}
}
@@ -3659,6 +3769,18 @@ static void write_cachefile(WriteData *wd, CacheFile *cache_file)
}
}
+static void write_workspace(WriteData *wd, WorkSpace *workspace)
+{
+ ListBase *layouts = BKE_workspace_layouts_get(workspace);
+ ListBase *transform_orientations = BKE_workspace_transform_orientations_get(workspace);
+
+ writestruct(wd, ID_WS, WorkSpace, 1, workspace);
+ writelist(wd, DATA, WorkSpaceLayout, layouts);
+ writelist(wd, DATA, WorkSpaceDataRelation, &workspace->hook_layout_relations);
+ writelist(wd, DATA, WorkSpaceDataRelation, &workspace->scene_viewlayer_relations);
+ writelist(wd, DATA, TransformOrientation, transform_orientations);
+}
+
/* Keep it last of write_foodata functions. */
static void write_libraries(WriteData *wd, Main *main)
{
@@ -3690,6 +3812,8 @@ static void write_libraries(WriteData *wd, Main *main)
/* XXX needs rethink, just like save UI in undo files now - would be nice to append things only for the]
* quit.blend and temp saves */
if (found_one) {
+ /* Not overridable. */
+
writestruct(wd, ID_LI, Library, 1, main->curlib);
write_iddata(wd, &main->curlib->id);
@@ -3728,18 +3852,22 @@ static void write_global(WriteData *wd, int fileflags, Main *mainvar)
const bool is_undo = (wd->current != NULL);
FileGlobal fg;
bScreen *screen;
+ Scene *scene;
+ ViewLayer *render_layer;
char subvstr[8];
/* prevent mem checkers from complaining */
memset(fg.pad, 0, sizeof(fg.pad));
memset(fg.filename, 0, sizeof(fg.filename));
memset(fg.build_hash, 0, sizeof(fg.build_hash));
+ fg.pad1 = NULL;
- current_screen_compat(mainvar, &screen, is_undo);
+ current_screen_compat(mainvar, is_undo, &screen, &scene, &render_layer);
/* XXX still remap G */
fg.curscreen = screen;
- fg.curscene = screen ? screen->scene : NULL;
+ fg.curscene = scene;
+ fg.cur_view_layer = render_layer;
/* prevent to save this, is not good convention, and feature with concerns... */
fg.fileflags = (fileflags & ~G_FILE_FLAGS_RUNTIME);
@@ -3821,131 +3949,159 @@ static bool write_file_handle(
* avoid thumbnail detecting changes because of this. */
mywrite_flush(wd);
- ListBase *lbarray[MAX_LIBARRAY];
- int a = set_listbasepointers(mainvar, lbarray);
- while (a--) {
- ID *id = lbarray[a]->first;
+ OverrideStaticStorage *override_storage = !wd->current ? BKE_override_static_operations_store_initialize() : NULL;
- if (id && GS(id->name) == ID_LI) {
- continue; /* Libraries are handled separately below. */
- }
+ /* This outer loop allows to save first datablocks from real mainvar, then the temp ones from override process,
+ * if needed, without duplicating whole code. */
+ Main *bmain = mainvar;
+ do {
+ ListBase *lbarray[MAX_LIBARRAY];
+ int a = set_listbasepointers(bmain, lbarray);
+ while (a--) {
+ ID *id = lbarray[a]->first;
- for (; id; id = id->next) {
- /* We should never attempt to write non-regular IDs (i.e. all kind of temp/runtime ones). */
- BLI_assert((id->tag & (LIB_TAG_NO_MAIN | LIB_TAG_NO_USER_REFCOUNT | LIB_TAG_NOT_ALLOCATED)) == 0);
+ if (id && GS(id->name) == ID_LI) {
+ continue; /* Libraries are handled separately below. */
+ }
- switch ((ID_Type)GS(id->name)) {
- case ID_WM:
- write_windowmanager(wd, (wmWindowManager *)id);
- break;
- case ID_SCR:
- write_screen(wd, (bScreen *)id);
- break;
- case ID_MC:
- write_movieclip(wd, (MovieClip *)id);
- break;
- case ID_MSK:
- write_mask(wd, (Mask *)id);
- break;
- case ID_SCE:
- write_scene(wd, (Scene *)id);
- break;
- case ID_CU:
- write_curve(wd, (Curve *)id);
- break;
- case ID_MB:
- write_mball(wd, (MetaBall *)id);
- break;
- case ID_IM:
- write_image(wd, (Image *)id);
- break;
- case ID_CA:
- write_camera(wd, (Camera *)id);
- break;
- case ID_LA:
- write_lamp(wd, (Lamp *)id);
- break;
- case ID_LT:
- write_lattice(wd, (Lattice *)id);
- break;
- case ID_VF:
- write_vfont(wd, (VFont *)id);
- break;
- case ID_KE:
- write_key(wd, (Key *)id);
- break;
- case ID_WO:
- write_world(wd, (World *)id);
- break;
- case ID_TXT:
- write_text(wd, (Text *)id);
- break;
- case ID_SPK:
- write_speaker(wd, (Speaker *)id);
- break;
- case ID_SO:
- write_sound(wd, (bSound *)id);
- break;
- case ID_GR:
- write_group(wd, (Group *)id);
- break;
- case ID_AR:
- write_armature(wd, (bArmature *)id);
- break;
- case ID_AC:
- write_action(wd, (bAction *)id);
- break;
- case ID_OB:
- write_object(wd, (Object *)id);
- break;
- case ID_MA:
- write_material(wd, (Material *)id);
- break;
- case ID_TE:
- write_texture(wd, (Tex *)id);
- break;
- case ID_ME:
- write_mesh(wd, (Mesh *)id);
- break;
- case ID_PA:
- write_particlesettings(wd, (ParticleSettings *)id);
- break;
- case ID_NT:
- write_nodetree(wd, (bNodeTree *)id);
- break;
- case ID_BR:
- write_brush(wd, (Brush *)id);
- break;
- case ID_PAL:
- write_palette(wd, (Palette *)id);
- break;
- case ID_PC:
- write_paintcurve(wd, (PaintCurve *)id);
- break;
- case ID_GD:
- write_gpencil(wd, (bGPdata *)id);
- break;
- case ID_LS:
- write_linestyle(wd, (FreestyleLineStyle *)id);
- break;
- case ID_CF:
- write_cachefile(wd, (CacheFile *)id);
- break;
- case ID_LI:
- /* Do nothing, handled below - and should never be reached. */
- BLI_assert(0);
- break;
- case ID_IP:
- /* Do nothing, deprecated. */
- break;
- default:
- /* Should never be reached. */
- BLI_assert(0);
- break;
+ for (; id; id = id->next) {
+ /* We should never attempt to write non-regular IDs (i.e. all kind of temp/runtime ones). */
+ BLI_assert((id->tag & (LIB_TAG_NO_MAIN | LIB_TAG_NO_USER_REFCOUNT | LIB_TAG_NOT_ALLOCATED)) == 0);
+
+ const bool do_override = !ELEM(override_storage, NULL, bmain) && id->override_static;
+
+ if (do_override) {
+ BKE_override_static_operations_store_start(override_storage, id);
+ }
+
+ switch ((ID_Type)GS(id->name)) {
+ case ID_WM:
+ write_windowmanager(wd, (wmWindowManager *)id);
+ break;
+ case ID_WS:
+ write_workspace(wd, (WorkSpace *)id);
+ break;
+ case ID_SCR:
+ write_screen(wd, (bScreen *)id);
+ break;
+ case ID_MC:
+ write_movieclip(wd, (MovieClip *)id);
+ break;
+ case ID_MSK:
+ write_mask(wd, (Mask *)id);
+ break;
+ case ID_SCE:
+ write_scene(wd, (Scene *)id);
+ break;
+ case ID_CU:
+ write_curve(wd, (Curve *)id);
+ break;
+ case ID_MB:
+ write_mball(wd, (MetaBall *)id);
+ break;
+ case ID_IM:
+ write_image(wd, (Image *)id);
+ break;
+ case ID_CA:
+ write_camera(wd, (Camera *)id);
+ break;
+ case ID_LA:
+ write_lamp(wd, (Lamp *)id);
+ break;
+ case ID_LT:
+ write_lattice(wd, (Lattice *)id);
+ break;
+ case ID_VF:
+ write_vfont(wd, (VFont *)id);
+ break;
+ case ID_KE:
+ write_key(wd, (Key *)id);
+ break;
+ case ID_WO:
+ write_world(wd, (World *)id);
+ break;
+ case ID_TXT:
+ write_text(wd, (Text *)id);
+ break;
+ case ID_SPK:
+ write_speaker(wd, (Speaker *)id);
+ break;
+ case ID_LP:
+ write_probe(wd, (LightProbe *)id);
+ break;
+ case ID_SO:
+ write_sound(wd, (bSound *)id);
+ break;
+ case ID_GR:
+ write_group(wd, (Group *)id);
+ break;
+ case ID_AR:
+ write_armature(wd, (bArmature *)id);
+ break;
+ case ID_AC:
+ write_action(wd, (bAction *)id);
+ break;
+ case ID_OB:
+ write_object(wd, (Object *)id);
+ break;
+ case ID_MA:
+ write_material(wd, (Material *)id);
+ break;
+ case ID_TE:
+ write_texture(wd, (Tex *)id);
+ break;
+ case ID_ME:
+ write_mesh(wd, (Mesh *)id);
+ break;
+ case ID_PA:
+ write_particlesettings(wd, (ParticleSettings *)id);
+ break;
+ case ID_NT:
+ write_nodetree(wd, (bNodeTree *)id);
+ break;
+ case ID_BR:
+ write_brush(wd, (Brush *)id);
+ break;
+ case ID_PAL:
+ write_palette(wd, (Palette *)id);
+ break;
+ case ID_PC:
+ write_paintcurve(wd, (PaintCurve *)id);
+ break;
+ case ID_GD:
+ write_gpencil(wd, (bGPdata *)id);
+ break;
+ case ID_LS:
+ write_linestyle(wd, (FreestyleLineStyle *)id);
+ break;
+ case ID_CF:
+ write_cachefile(wd, (CacheFile *)id);
+ break;
+ case ID_LI:
+ /* Do nothing, handled below - and should never be reached. */
+ BLI_assert(0);
+ break;
+ case ID_IP:
+ /* Do nothing, deprecated. */
+ break;
+ default:
+ /* Should never be reached. */
+ BLI_assert(0);
+ break;
+ }
+
+ if (do_override) {
+ BKE_override_static_operations_store_end(override_storage, id);
+ }
}
+
+ mywrite_flush(wd);
}
+ } while ((bmain != override_storage) && (bmain = override_storage));
- mywrite_flush(wd);
+ if (override_storage) {
+ BKE_override_static_operations_store_finalize(override_storage);
+ override_storage = NULL;
}
/* Special handling, operating over split Mains... */
diff --git a/source/blender/blentranslation/BLT_translation.h b/source/blender/blentranslation/BLT_translation.h
index 1d76077c9f1..ed1993015f6 100644
--- a/source/blender/blentranslation/BLT_translation.h
+++ b/source/blender/blentranslation/BLT_translation.h
@@ -140,6 +140,7 @@ bool BLT_lang_is_ime_supported(void);
#define BLT_I18NCONTEXT_ID_PAINTCURVE "PaintCurve"
#define BLT_I18NCONTEXT_ID_PALETTE "Palette"
#define BLT_I18NCONTEXT_ID_PARTICLESETTINGS "ParticleSettings"
+#define BLT_I18NCONTEXT_ID_LIGHTPROBE "LightProbe"
#define BLT_I18NCONTEXT_ID_SCENE "Scene"
#define BLT_I18NCONTEXT_ID_SCREEN "Screen"
#define BLT_I18NCONTEXT_ID_SEQUENCE "Sequence"
@@ -149,6 +150,7 @@ bool BLT_lang_is_ime_supported(void);
#define BLT_I18NCONTEXT_ID_TEXT "Text"
#define BLT_I18NCONTEXT_ID_VFONT "VFont"
#define BLT_I18NCONTEXT_ID_WORLD "World"
+#define BLT_I18NCONTEXT_ID_WORKSPACE "WorkSpace"
#define BLT_I18NCONTEXT_ID_WINDOWMANAGER "WindowManager"
#define BLT_I18NCONTEXT_ID_MOVIECLIP "MovieClip"
#define BLT_I18NCONTEXT_ID_MASK "Mask"
@@ -194,6 +196,7 @@ typedef struct {
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_PAINTCURVE, "id_paintcurve"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_PALETTE, "id_palette"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_PARTICLESETTINGS, "id_particlesettings"), \
+ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_LIGHTPROBE, "id_lightprobe"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_SCENE, "id_scene"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_SCREEN, "id_screen"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_SEQUENCE, "id_sequence"), \
@@ -203,6 +206,7 @@ typedef struct {
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_TEXT, "id_text"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_VFONT, "id_vfont"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_WORLD, "id_world"), \
+ BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_WORKSPACE, "id_workspace"), \
BLT_I18NCONTEXTS_ITEM(BLT_I18NCONTEXT_ID_WINDOWMANAGER, "id_windowmanager"), \
{NULL, NULL, NULL} \
}
diff --git a/source/blender/bmesh/intern/bmesh_mesh.c b/source/blender/bmesh/intern/bmesh_mesh.c
index 67db51446df..8533083af22 100644
--- a/source/blender/bmesh/intern/bmesh_mesh.c
+++ b/source/blender/bmesh/intern/bmesh_mesh.c
@@ -1019,7 +1019,8 @@ void BM_loops_calc_normal_vcos(
}
}
-static void UNUSED_FUNCTION(bm_mdisps_space_set)(Object *ob, BMesh *bm, int from, int to)
+static void UNUSED_FUNCTION(bm_mdisps_space_set)(
+ Object *ob, BMesh *bm, int from, int to, eObjectMode object_mode)
{
/* switch multires data out of tangent space */
if (CustomData_has_layer(&bm->ldata, CD_MDISPS)) {
@@ -1030,7 +1031,7 @@ static void UNUSED_FUNCTION(bm_mdisps_space_set)(Object *ob, BMesh *bm, int from
BMIter iter;
// int i = 0; // UNUSED
- multires_set_space(dm, ob, from, to);
+ multires_set_space(dm, ob, from, to, object_mode);
mdisps = CustomData_get_layer(&dm->loopData, CD_MDISPS);
diff --git a/source/blender/bmesh/intern/bmesh_mesh_conv.c b/source/blender/bmesh/intern/bmesh_mesh_conv.c
index 7787d704b59..6cc1f37db43 100644
--- a/source/blender/bmesh/intern/bmesh_mesh_conv.c
+++ b/source/blender/bmesh/intern/bmesh_mesh_conv.c
@@ -98,42 +98,6 @@
#include "bmesh.h"
#include "intern/bmesh_private.h" /* for element checking */
-/**
- * Currently this is only used for Python scripts
- * which may fail to keep matching UV/TexFace layers.
- *
- * \note This should only perform any changes in exceptional cases,
- * if we need this to be faster we could inline #BM_data_layer_add and only
- * call #update_data_blocks once at the end.
- */
-void BM_mesh_cd_validate(BMesh *bm)
-{
- int totlayer_mtex = CustomData_number_of_layers(&bm->pdata, CD_MTEXPOLY);
- int totlayer_uv = CustomData_number_of_layers(&bm->ldata, CD_MLOOPUV);
-
- if (LIKELY(totlayer_mtex == totlayer_uv)) {
- /* pass */
- }
- else if (totlayer_mtex < totlayer_uv) {
- const int uv_index_first = CustomData_get_layer_index(&bm->ldata, CD_MLOOPUV);
- do {
- const char *from_name = bm->ldata.layers[uv_index_first + totlayer_mtex].name;
- BM_data_layer_add_named(bm, &bm->pdata, CD_MTEXPOLY, from_name);
- CustomData_set_layer_unique_name(&bm->pdata, totlayer_mtex);
- } while (totlayer_uv != ++totlayer_mtex);
- }
- else if (totlayer_uv < totlayer_mtex) {
- const int mtex_index_first = CustomData_get_layer_index(&bm->pdata, CD_MTEXPOLY);
- do {
- const char *from_name = bm->pdata.layers[mtex_index_first + totlayer_uv].name;
- BM_data_layer_add_named(bm, &bm->ldata, CD_MLOOPUV, from_name);
- CustomData_set_layer_unique_name(&bm->ldata, totlayer_uv);
- } while (totlayer_mtex != ++totlayer_uv);
- }
-
- BLI_assert(totlayer_mtex == totlayer_uv);
-}
-
void BM_mesh_cd_flag_ensure(BMesh *bm, Mesh *mesh, const char cd_flag)
{
const char cd_flag_all = BM_mesh_cd_flag_from_bmesh(bm) | cd_flag;
@@ -243,7 +207,7 @@ void BM_mesh_bm_from_me(
BMEdge *e, **etable = NULL;
BMFace *f, **ftable = NULL;
float (*keyco)[3] = NULL;
- int totuv, totloops, i;
+ int totloops, i;
if (!me || !me->totvert) {
if (me && is_new) { /*no verts? still copy customdata layout*/
@@ -265,13 +229,6 @@ void BM_mesh_bm_from_me(
CustomData_copy(&me->edata, &bm->edata, CD_MASK_BMESH, CD_CALLOC, 0);
CustomData_copy(&me->ldata, &bm->ldata, CD_MASK_BMESH, CD_CALLOC, 0);
CustomData_copy(&me->pdata, &bm->pdata, CD_MASK_BMESH, CD_CALLOC, 0);
-
- /* make sure uv layer names are consisten */
- totuv = CustomData_number_of_layers(&bm->pdata, CD_MTEXPOLY);
- for (i = 0; i < totuv; i++) {
- int li = CustomData_get_layer_index_n(&bm->pdata, CD_MTEXPOLY, i);
- CustomData_set_layer_name(&bm->ldata, CD_MLOOPUV, i, bm->pdata.layers[li].name);
- }
}
/* -------------------------------------------------------------------- */
diff --git a/source/blender/bmesh/intern/bmesh_operators.h b/source/blender/bmesh/intern/bmesh_operators.h
index b670f31ad9f..80b57eb3565 100644
--- a/source/blender/bmesh/intern/bmesh_operators.h
+++ b/source/blender/bmesh/intern/bmesh_operators.h
@@ -77,13 +77,13 @@ enum {
/* similar face selection slot values */
enum {
SIMFACE_MATERIAL = 201,
- SIMFACE_IMAGE,
SIMFACE_AREA,
SIMFACE_SIDES,
SIMFACE_PERIMETER,
SIMFACE_NORMAL,
SIMFACE_COPLANAR,
SIMFACE_SMOOTH,
+ SIMFACE_FACEMAP,
#ifdef WITH_FREESTYLE
SIMFACE_FREESTYLE
#endif
diff --git a/source/blender/bmesh/operators/bmo_similar.c b/source/blender/bmesh/operators/bmo_similar.c
index 454d6d8c6c8..0cd17258834 100644
--- a/source/blender/bmesh/operators/bmo_similar.c
+++ b/source/blender/bmesh/operators/bmo_similar.c
@@ -106,11 +106,28 @@ void bmo_similar_faces_exec(BMesh *bm, BMOperator *op)
const float thresh = BMO_slot_float_get(op->slots_in, "thresh");
const float thresh_radians = thresh * (float)M_PI;
const int compare = BMO_slot_int_get(op->slots_in, "compare");
+ /* for comparison types that use custom-data */
+ int cd_offset = -1;
/* initial_elem - other_elem */
float delta_fl;
int delta_i;
+ if (type == SIMFACE_FACEMAP) {
+ cd_offset = CustomData_get_offset(&bm->pdata, CD_FACEMAP);
+ if (cd_offset == -1) {
+ return;
+ }
+ }
+#ifdef WITH_FREESTYLE
+ else if (type == SIMFACE_FREESTYLE) {
+ cd_offset = CustomData_get_offset(&bm->pdata, CD_FREESTYLE_FACE);
+ if (cd_offset == -1) {
+ return;
+ }
+ }
+#endif
+
num_total = BM_mesh_elem_count(bm, BM_FACE);
/*
@@ -145,7 +162,7 @@ void bmo_similar_faces_exec(BMesh *bm, BMOperator *op)
* Save us some computation burden: In case of perimeter/area/coplanar selection we compute
* only once.
*/
- if (type == SIMFACE_PERIMETER || type == SIMFACE_AREA || type == SIMFACE_COPLANAR || type == SIMFACE_IMAGE) {
+ if (type == SIMFACE_PERIMETER || type == SIMFACE_AREA || type == SIMFACE_COPLANAR) {
for (i = 0; i < num_total; i++) {
switch (type) {
case SIMFACE_PERIMETER:
@@ -164,14 +181,6 @@ void bmo_similar_faces_exec(BMesh *bm, BMOperator *op)
case SIMFACE_AREA:
f_ext[i].area = BM_face_calc_area(f_ext[i].f);
break;
-
- case SIMFACE_IMAGE:
- f_ext[i].t = NULL;
- if (CustomData_has_layer(&(bm->pdata), CD_MTEXPOLY)) {
- MTexPoly *mtpoly = CustomData_bmesh_get(&bm->pdata, f_ext[i].f->head.data, CD_MTEXPOLY);
- f_ext[i].t = mtpoly->tpage;
- }
- break;
}
}
}
@@ -190,14 +199,6 @@ void bmo_similar_faces_exec(BMesh *bm, BMOperator *op)
cont = false;
}
break;
-
- case SIMFACE_IMAGE:
- if (f_ext[i].t == f_ext[indices[idx]].t) {
- BMO_face_flag_enable(bm, fm, FACE_MARK);
- cont = false;
- }
- break;
-
case SIMFACE_NORMAL:
angle = angle_normalized_v3v3(fs->no, fm->no); /* if the angle between the normals -> 0 */
if (angle <= thresh_radians) {
@@ -254,20 +255,29 @@ void bmo_similar_faces_exec(BMesh *bm, BMOperator *op)
cont = false;
}
break;
+ case SIMFACE_FACEMAP:
+ {
+ BLI_assert(cd_offset != -1);
+ const int *fmap1 = BM_ELEM_CD_GET_VOID_P(fs, cd_offset);
+ const int *fmap2 = BM_ELEM_CD_GET_VOID_P(fm, cd_offset);
+ if (*fmap1 == *fmap2) {
+ BMO_face_flag_enable(bm, fm, FACE_MARK);
+ cont = false;
+ }
+ break;
+ }
#ifdef WITH_FREESTYLE
case SIMFACE_FREESTYLE:
- if (CustomData_has_layer(&bm->pdata, CD_FREESTYLE_FACE)) {
- FreestyleEdge *ffa1, *ffa2;
-
- ffa1 = CustomData_bmesh_get(&bm->pdata, fs->head.data, CD_FREESTYLE_FACE);
- ffa2 = CustomData_bmesh_get(&bm->pdata, fm->head.data, CD_FREESTYLE_FACE);
-
- if (ffa1 && ffa2 && (ffa1->flag & FREESTYLE_FACE_MARK) == (ffa2->flag & FREESTYLE_FACE_MARK)) {
- BMO_face_flag_enable(bm, fm, FACE_MARK);
- cont = false;
- }
+ {
+ BLI_assert(cd_offset != -1);
+ const FreestyleEdge *ffa1 = BM_ELEM_CD_GET_VOID_P(fs, cd_offset);
+ const FreestyleEdge *ffa2 = BM_ELEM_CD_GET_VOID_P(fm, cd_offset);
+ if ((ffa1->flag & FREESTYLE_FACE_MARK) == (ffa2->flag & FREESTYLE_FACE_MARK)) {
+ BMO_face_flag_enable(bm, fm, FACE_MARK);
+ cont = false;
}
break;
+ }
#endif
default:
BLI_assert(0);
diff --git a/source/blender/bmesh/tools/bmesh_intersect.c b/source/blender/bmesh/tools/bmesh_intersect.c
index 9d1b20cb4d2..82545a5e011 100644
--- a/source/blender/bmesh/tools/bmesh_intersect.c
+++ b/source/blender/bmesh/tools/bmesh_intersect.c
@@ -81,12 +81,6 @@
/* use accelerated overlap check */
#define USE_BVH
-// #define USE_BOOLEAN_RAYCAST_DRAW
-
-#ifdef USE_BOOLEAN_RAYCAST_DRAW
-/* insert bl_debug_draw_quad_clear... here */
-#endif
-
// #define USE_DUMP
static void tri_v3_scale(
@@ -1006,10 +1000,6 @@ bool BM_mesh_intersect(
int i_a, i_b;
#endif
-#ifdef USE_BOOLEAN_RAYCAST_DRAW
- bl_debug_draw_quad_clear();
-#endif
-
s.bm = bm;
s.edgetri_cache = BLI_ghash_new(BLI_ghashutil_inthash_v4_p, BLI_ghashutil_inthash_v4_cmp, __func__);
@@ -1607,17 +1597,6 @@ bool BM_mesh_intersect(
do_flip = (side == 0);
break;
}
-
-#ifdef USE_BOOLEAN_RAYCAST_DRAW
- {
- uint colors[4] = {0x00000000, 0xffffffff, 0xff000000, 0x0000ff};
- float co_other[3] = {UNPACK3(co)};
- co_other[0] += 1000.0f;
- bl_debug_color_set(colors[(hits & 1) == 1]);
- bl_debug_draw_edge_add(co, co_other);
- }
-#endif
-
}
if (do_remove) {
diff --git a/source/blender/collada/AnimationExporter.cpp b/source/blender/collada/AnimationExporter.cpp
index d4f434d56fd..01f800b08e1 100644
--- a/source/blender/collada/AnimationExporter.cpp
+++ b/source/blender/collada/AnimationExporter.cpp
@@ -34,10 +34,11 @@ void forEachObjectInExportSet(Scene *sce, Functor &f, LinkNode *export_set)
}
}
-bool AnimationExporter::exportAnimations(Scene *sce)
+bool AnimationExporter::exportAnimations(const struct EvaluationContext *eval_ctx, Scene *sce)
{
bool has_animations = hasAnimations(sce);
if (has_animations) {
+ this->eval_ctx = eval_ctx;
this->scene = sce;
openLibrary();
@@ -177,7 +178,7 @@ void AnimationExporter::export_morph_animation(Object *ob)
void AnimationExporter::make_anim_frames_from_targets(Object *ob, std::vector<float> &frames )
{
- ListBase *conlist = get_active_constraints(ob);
+ ListBase *conlist = get_active_constraints(this->eval_ctx, ob);
if (conlist == NULL) return;
bConstraint *con;
for (con = (bConstraint *)conlist->first; con; con = con->next) {
@@ -480,7 +481,7 @@ void AnimationExporter::sample_and_write_bone_animation_matrix(Object *ob_arm, B
if (flag & ARM_RESTPOS) {
arm->flag &= ~ARM_RESTPOS;
- BKE_pose_where_is(scene, ob_arm);
+ BKE_pose_where_is(eval_ctx, scene, ob_arm);
}
if (fra.size()) {
@@ -489,7 +490,7 @@ void AnimationExporter::sample_and_write_bone_animation_matrix(Object *ob_arm, B
if (flag & ARM_RESTPOS)
arm->flag = flag;
- BKE_pose_where_is(scene, ob_arm);
+ BKE_pose_where_is(eval_ctx, scene, ob_arm);
}
void AnimationExporter::dae_baked_animation(std::vector<float> &fra, Object *ob_arm, Bone *bone)
@@ -938,17 +939,17 @@ std::string AnimationExporter::create_4x4_source(std::vector<float> &frames, Obj
float ctime = BKE_scene_frame_get_from_ctime(scene, *it);
CFRA = BKE_scene_frame_get_from_ctime(scene, *it);
- //BKE_scene_update_for_newframe(G.main->eval_ctx, G.main,scene,scene->lay);
+ //BKE_scene_graph_update_for_newframe(G.main->eval_ctx, depsgraph, G.main,scene);
BKE_animsys_evaluate_animdata(scene, &ob->id, ob->adt, ctime, ADT_RECALC_ALL);
if (bone) {
if (pchan->flag & POSE_CHAIN) {
enable_fcurves(ob->adt->action, NULL);
BKE_animsys_evaluate_animdata(scene, &ob->id, ob->adt, ctime, ADT_RECALC_ALL);
- BKE_pose_where_is(scene, ob);
+ BKE_pose_where_is(eval_ctx, scene, ob);
}
else {
- BKE_pose_where_is_bone(scene, ob, pchan, ctime, 1);
+ BKE_pose_where_is_bone(eval_ctx, scene, ob, pchan, ctime, 1);
}
// compute bone local mat
@@ -1438,7 +1439,7 @@ void AnimationExporter::sample_and_write_bone_animation(Object *ob_arm, Bone *bo
// exit rest position
if (flag & ARM_RESTPOS) {
arm->flag &= ~ARM_RESTPOS;
- BKE_pose_where_is(scene, ob_arm);
+ BKE_pose_where_is(eval_ctx, scene, ob_arm);
}
//v array will hold all values which will be exported.
if (fra.size()) {
@@ -1468,7 +1469,7 @@ void AnimationExporter::sample_and_write_bone_animation(Object *ob_arm, Bone *bo
// restore restpos
if (flag & ARM_RESTPOS)
arm->flag = flag;
- BKE_pose_where_is(scene, ob_arm);
+ BKE_pose_where_is(eval_ctx, scene, ob_arm);
}
void AnimationExporter::sample_animation(float *v, std::vector<float> &frames, int type, Bone *bone, Object *ob_arm, bPoseChannel *pchan)
@@ -1493,7 +1494,7 @@ void AnimationExporter::sample_animation(float *v, std::vector<float> &frames, i
BKE_animsys_evaluate_animdata(scene, &ob_arm->id, ob_arm->adt, ctime, ADT_RECALC_ANIM);
- BKE_pose_where_is_bone(scene, ob_arm, pchan, ctime, 1);
+ BKE_pose_where_is_bone(eval_ctx, scene, ob_arm, pchan, ctime, 1);
// compute bone local mat
if (bone->parent) {
@@ -1538,7 +1539,7 @@ bool AnimationExporter::validateConstraints(bConstraint *con)
void AnimationExporter::calc_ob_mat_at_time(Object *ob, float ctime , float mat[][4])
{
- ListBase *conlist = get_active_constraints(ob);
+ ListBase *conlist = get_active_constraints(this->eval_ctx, ob);
bConstraint *con;
for (con = (bConstraint *)conlist->first; con; con = con->next) {
ListBase targets = {NULL, NULL};
@@ -1554,7 +1555,7 @@ void AnimationExporter::calc_ob_mat_at_time(Object *ob, float ctime , float mat[
if (obtar) {
BKE_animsys_evaluate_animdata(scene, &obtar->id, obtar->adt, ctime, ADT_RECALC_ANIM);
- BKE_object_where_is_calc_time(scene, obtar, ctime);
+ BKE_object_where_is_calc_time(eval_ctx, scene, obtar, ctime);
}
}
@@ -1562,7 +1563,7 @@ void AnimationExporter::calc_ob_mat_at_time(Object *ob, float ctime , float mat[
cti->flush_constraint_targets(con, &targets, 1);
}
}
- BKE_object_where_is_calc_time(scene, ob, ctime);
+ BKE_object_where_is_calc_time(eval_ctx, scene, ob, ctime);
copy_m4_m4(mat, ob->obmat);
}
diff --git a/source/blender/collada/AnimationExporter.h b/source/blender/collada/AnimationExporter.h
index 4736361ad13..5af5d884455 100644
--- a/source/blender/collada/AnimationExporter.h
+++ b/source/blender/collada/AnimationExporter.h
@@ -79,12 +79,13 @@ extern "C"
#include <vector>
#include <algorithm> // std::find
-
+struct EvaluationContext;
class AnimationExporter: COLLADASW::LibraryAnimations
{
private:
Scene *scene;
+ const struct EvaluationContext *eval_ctx;
COLLADASW::StreamWriter *sw;
public:
@@ -94,7 +95,7 @@ public:
{ this->sw = sw; }
- bool exportAnimations(Scene *sce);
+ bool exportAnimations(const struct EvaluationContext *eval_ctx, Scene *sce);
// called for each exported object
void operator() (Object *ob);
diff --git a/source/blender/collada/AnimationImporter.cpp b/source/blender/collada/AnimationImporter.cpp
index fec8d62933a..65acce41046 100644
--- a/source/blender/collada/AnimationImporter.cpp
+++ b/source/blender/collada/AnimationImporter.cpp
@@ -1919,7 +1919,7 @@ Object *AnimationImporter::get_joint_object(COLLADAFW::Node *root, COLLADAFW::No
job->lay = BKE_scene_base_find(scene, job)->lay = 2;
mul_v3_fl(job->size, 0.5f);
- DAG_id_tag_update(&job->id, OB_RECALC_OB);
+ DEG_id_tag_update(&job->id, OB_RECALC_OB);
verify_adt_action((ID *)&job->id, 1);
@@ -1940,14 +1940,14 @@ Object *AnimationImporter::get_joint_object(COLLADAFW::Node *root, COLLADAFW::No
if (par_job) {
job->parent = par_job;
- DAG_id_tag_update(&par_job->id, OB_RECALC_OB);
+ DEG_id_tag_update(&par_job->id, OB_RECALC_OB);
job->parsubstr[0] = 0;
}
BKE_object_where_is_calc(scene, job);
// after parenting and layer change
- DAG_relations_tag_update(CTX_data_main(C));
+ DEG_relations_tag_update(CTX_data_main(C));
joint_objects[node->getUniqueId()] = job;
}
diff --git a/source/blender/collada/ArmatureExporter.cpp b/source/blender/collada/ArmatureExporter.cpp
index d2495a8cb9f..844be2dd60b 100644
--- a/source/blender/collada/ArmatureExporter.cpp
+++ b/source/blender/collada/ArmatureExporter.cpp
@@ -62,8 +62,8 @@ ArmatureExporter::ArmatureExporter(COLLADASW::StreamWriter *sw, const ExportSett
}
// write bone nodes
-void ArmatureExporter::add_armature_bones(Object *ob_arm, Scene *sce,
- SceneExporter *se,
+void ArmatureExporter::add_armature_bones(const EvaluationContext *eval_ctx, Object *ob_arm,
+ Scene *sce, SceneExporter *se,
std::list<Object *>& child_objects)
{
// write bone nodes
@@ -77,7 +77,7 @@ void ArmatureExporter::add_armature_bones(Object *ob_arm, Scene *sce,
for (Bone *bone = (Bone *)armature->bonebase.first; bone; bone = bone->next) {
// start from root bones
if (!bone->parent)
- add_bone_node(bone, ob_arm, sce, se, child_objects);
+ add_bone_node(eval_ctx, bone, ob_arm, sce, se, child_objects);
}
if (!is_edited) {
@@ -116,10 +116,7 @@ bool ArmatureExporter::add_instance_controller(Object *ob)
write_bone_URLs(ins, ob_arm, bone);
}
- InstanceWriter::add_material_bindings(ins.getBindMaterial(),
- ob,
- this->export_settings->active_uv_only,
- this->export_settings->export_texture_type);
+ InstanceWriter::add_material_bindings(ins.getBindMaterial(), ob, this->export_settings->active_uv_only);
ins.add();
return true;
@@ -160,7 +157,7 @@ void ArmatureExporter::find_objects_using_armature(Object *ob_arm, std::vector<O
#endif
// parent_mat is armature-space
-void ArmatureExporter::add_bone_node(Bone *bone, Object *ob_arm, Scene *sce,
+void ArmatureExporter::add_bone_node(const EvaluationContext *eval_ctx, Bone *bone, Object *ob_arm, Scene *sce,
SceneExporter *se,
std::list<Object *>& child_objects)
{
@@ -234,7 +231,7 @@ void ArmatureExporter::add_bone_node(Bone *bone, Object *ob_arm, Scene *sce,
mul_m4_m4m4((*i)->parentinv, temp, (*i)->parentinv);
}
- se->writeNodes(*i, sce);
+ se->writeNodes(eval_ctx, *i, sce);
copy_m4_m4((*i)->parentinv, backup_parinv);
child_objects.erase(i++);
@@ -243,13 +240,13 @@ void ArmatureExporter::add_bone_node(Bone *bone, Object *ob_arm, Scene *sce,
}
for (Bone *child = (Bone *)bone->childbase.first; child; child = child->next) {
- add_bone_node(child, ob_arm, sce, se, child_objects);
+ add_bone_node(eval_ctx, child, ob_arm, sce, se, child_objects);
}
node.end();
}
else {
for (Bone *child = (Bone *)bone->childbase.first; child; child = child->next) {
- add_bone_node(child, ob_arm, sce, se, child_objects);
+ add_bone_node(eval_ctx, child, ob_arm, sce, se, child_objects);
}
}
}
diff --git a/source/blender/collada/ArmatureExporter.h b/source/blender/collada/ArmatureExporter.h
index d271b505aa9..a3ed97c3a43 100644
--- a/source/blender/collada/ArmatureExporter.h
+++ b/source/blender/collada/ArmatureExporter.h
@@ -60,7 +60,7 @@ public:
ArmatureExporter(COLLADASW::StreamWriter *sw, const ExportSettings *export_settings);
// write bone nodes
- void add_armature_bones(Object *ob_arm, Scene *sce, SceneExporter *se,
+ void add_armature_bones(const struct EvaluationContext *eval_ctx, Object *ob_arm, Scene *sce, SceneExporter *se,
std::list<Object *>& child_objects);
bool add_instance_controller(Object *ob);
@@ -85,7 +85,7 @@ private:
// Scene, SceneExporter and the list of child_objects
// are required for writing bone parented objects
- void add_bone_node(Bone *bone, Object *ob_arm, Scene *sce, SceneExporter *se,
+ void add_bone_node(const struct EvaluationContext *eval_ctx, Bone *bone, Object *ob_arm, Scene *sce, SceneExporter *se,
std::list<Object *>& child_objects);
void add_bone_transform(Object *ob_arm, Bone *bone, COLLADASW::Node& node);
diff --git a/source/blender/collada/ArmatureImporter.cpp b/source/blender/collada/ArmatureImporter.cpp
index 0ea8324ed7c..8832e0fd577 100644
--- a/source/blender/collada/ArmatureImporter.cpp
+++ b/source/blender/collada/ArmatureImporter.cpp
@@ -34,7 +34,6 @@
extern "C" {
#include "BKE_action.h"
-#include "BKE_depsgraph.h"
#include "BKE_object.h"
#include "BKE_armature.h"
#include "BLI_string.h"
@@ -42,6 +41,8 @@ extern "C" {
#include "ED_armature.h"
}
+#include "DEG_depsgraph.h"
+
#include "collada_utils.h"
#include "ArmatureImporter.h"
@@ -54,9 +55,10 @@ static const char *bc_get_joint_name(T *node)
}
-ArmatureImporter::ArmatureImporter(UnitConverter *conv, MeshImporterBase *mesh, Scene *sce, const ImportSettings *import_settings) :
+ArmatureImporter::ArmatureImporter(UnitConverter *conv, MeshImporterBase *mesh, Scene *sce, ViewLayer *view_layer, const ImportSettings *import_settings) :
TransformReader(conv),
scene(sce),
+ view_layer(view_layer),
unit_converter(conv),
import_settings(import_settings),
empty(NULL),
@@ -410,7 +412,7 @@ Object *ArmatureImporter::get_empty_for_leaves()
{
if (empty) return empty;
- empty = bc_add_object(scene, OB_EMPTY, NULL);
+ empty = bc_add_object(scene, view_layer, OB_EMPTY, NULL);
empty->empty_drawtype = OB_EMPTY_SPHERE;
return empty;
@@ -496,7 +498,7 @@ void ArmatureImporter::create_armature_bones(std::vector<Object *> &ob_arms)
ob_arms.push_back(ob_arm);
}
- DAG_id_tag_update(&ob_arm->id, OB_RECALC_OB | OB_RECALC_DATA);
+ DEG_id_tag_update(&ob_arm->id, OB_RECALC_OB | OB_RECALC_DATA);
}
}
@@ -585,7 +587,7 @@ Object *ArmatureImporter::create_armature_bones(SkinInfo& skin)
ob_arm = skin.set_armature(shared);
}
else {
- ob_arm = skin.create_armature(scene); //once for every armature
+ ob_arm = skin.create_armature(scene, view_layer); //once for every armature
}
// enter armature edit mode
@@ -629,7 +631,7 @@ Object *ArmatureImporter::create_armature_bones(SkinInfo& skin)
ED_armature_from_edit(armature);
ED_armature_edit_free(armature);
- DAG_id_tag_update(&ob_arm->id, OB_RECALC_OB | OB_RECALC_DATA);
+ DEG_id_tag_update(&ob_arm->id, OB_RECALC_OB | OB_RECALC_DATA);
return ob_arm;
}
diff --git a/source/blender/collada/ArmatureImporter.h b/source/blender/collada/ArmatureImporter.h
index 17173f157e5..f260bb2307c 100644
--- a/source/blender/collada/ArmatureImporter.h
+++ b/source/blender/collada/ArmatureImporter.h
@@ -63,6 +63,7 @@ class ArmatureImporter : private TransformReader
{
private:
Scene *scene;
+ ViewLayer *view_layer;
UnitConverter *unit_converter;
const ImportSettings *import_settings;
@@ -137,7 +138,7 @@ private:
TagsMap uid_tags_map;
public:
- ArmatureImporter(UnitConverter *conv, MeshImporterBase *mesh, Scene *sce, const ImportSettings *import_settings);
+ ArmatureImporter(UnitConverter *conv, MeshImporterBase *mesh, Scene *sce, ViewLayer *view_layer, const ImportSettings *import_settings);
~ArmatureImporter();
void add_root_joint(COLLADAFW::Node *node, Object *parent);
diff --git a/source/blender/collada/CMakeLists.txt b/source/blender/collada/CMakeLists.txt
index 293049a1a05..8642bbee698 100644
--- a/source/blender/collada/CMakeLists.txt
+++ b/source/blender/collada/CMakeLists.txt
@@ -30,6 +30,7 @@ set(INC
../blenkernel
../blenlib
../blentranslation
+ ../depsgraph
../editors/include
../makesdna
../makesrna
diff --git a/source/blender/collada/ControllerExporter.cpp b/source/blender/collada/ControllerExporter.cpp
index 5cd5e6d271a..f413651167c 100644
--- a/source/blender/collada/ControllerExporter.cpp
+++ b/source/blender/collada/ControllerExporter.cpp
@@ -98,17 +98,15 @@ bool ControllerExporter::add_instance_controller(Object *ob)
write_bone_URLs(ins, ob_arm, bone);
}
- InstanceWriter::add_material_bindings(ins.getBindMaterial(),
- ob,
- this->export_settings->active_uv_only,
- this->export_settings->export_texture_type);
+ InstanceWriter::add_material_bindings(ins.getBindMaterial(), ob, this->export_settings->active_uv_only);
ins.add();
return true;
}
-void ControllerExporter::export_controllers(Scene *sce)
+void ControllerExporter::export_controllers(const struct EvaluationContext *eval_ctx, Scene *sce)
{
+ this->eval_ctx = eval_ctx;
scene = sce;
openLibrary();
@@ -200,7 +198,7 @@ void ControllerExporter::export_skin_controller(Object *ob, Object *ob_arm)
bool use_instantiation = this->export_settings->use_object_instantiation;
Mesh *me;
- me = bc_get_mesh_copy(scene,
+ me = bc_get_mesh_copy(eval_ctx, scene,
ob,
this->export_settings->export_mesh_type,
this->export_settings->apply_modifiers,
@@ -302,7 +300,7 @@ void ControllerExporter::export_morph_controller(Object *ob, Key *key)
bool use_instantiation = this->export_settings->use_object_instantiation;
Mesh *me;
- me = bc_get_mesh_copy(scene,
+ me = bc_get_mesh_copy(eval_ctx, scene,
ob,
this->export_settings->export_mesh_type,
this->export_settings->apply_modifiers,
@@ -497,7 +495,7 @@ std::string ControllerExporter::add_inv_bind_mats_source(Object *ob_arm, ListBas
// put armature in rest position
if (!(arm->flag & ARM_RESTPOS)) {
arm->flag |= ARM_RESTPOS;
- BKE_pose_where_is(scene, ob_arm);
+ BKE_pose_where_is(eval_ctx, scene, ob_arm);
}
for (bDeformGroup *def = (bDeformGroup *)defbase->first; def; def = def->next) {
@@ -545,7 +543,7 @@ std::string ControllerExporter::add_inv_bind_mats_source(Object *ob_arm, ListBas
// back from rest positon
if (!(flag & ARM_RESTPOS)) {
arm->flag = flag;
- BKE_pose_where_is(scene, ob_arm);
+ BKE_pose_where_is(eval_ctx, scene, ob_arm);
}
source.finish();
diff --git a/source/blender/collada/ControllerExporter.h b/source/blender/collada/ControllerExporter.h
index 80b858ca6dd..a1d46c5aafb 100644
--- a/source/blender/collada/ControllerExporter.h
+++ b/source/blender/collada/ControllerExporter.h
@@ -54,6 +54,7 @@
#include "BKE_key.h"
+struct EvaluationContext;
class SceneExporter;
class ControllerExporter : public COLLADASW::LibraryControllers, protected TransformWriter, protected InstanceWriter
@@ -65,11 +66,12 @@ public:
bool add_instance_controller(Object *ob);
- void export_controllers(Scene *sce);
+ void export_controllers(const struct EvaluationContext *eval_ctx, Scene *sce);
void operator()(Object *ob);
private:
+ const struct EvaluationContext *eval_ctx;
Scene *scene;
UnitConverter converter;
const ExportSettings *export_settings;
diff --git a/source/blender/collada/DocumentExporter.cpp b/source/blender/collada/DocumentExporter.cpp
index 957fec50e4b..1741312af5f 100644
--- a/source/blender/collada/DocumentExporter.cpp
+++ b/source/blender/collada/DocumentExporter.cpp
@@ -138,8 +138,7 @@ extern bool bc_has_object_type(LinkNode *export_set, short obtype);
char *bc_CustomData_get_layer_name(const struct CustomData *data, int type, int n)
{
int layer_index = CustomData_get_layer_index(data, type);
- if (layer_index < 0)
- return NULL;
+ if (layer_index < 0) return NULL;
return data->layers[layer_index + n].name;
}
@@ -148,10 +147,9 @@ char *bc_CustomData_get_active_layer_name(const CustomData *data, int type)
{
/* get the layer index of the active layer of type */
int layer_index = CustomData_get_active_layer_index(data, type);
- if (layer_index < 1)
- return NULL;
+ if (layer_index < 0) return NULL;
- return bc_CustomData_get_layer_name(data, type, layer_index-1);
+ return data->layers[layer_index].name;
}
DocumentExporter::DocumentExporter(const ExportSettings *export_settings) : export_settings(export_settings) {
@@ -181,7 +179,7 @@ static COLLADABU::NativeString make_temp_filepath(const char *name, const char *
// COLLADA allows this through multiple <channel>s in <animation>.
// For this to work, we need to know objects that use a certain action.
-int DocumentExporter::exportCurrentScene(Scene *sce)
+int DocumentExporter::exportCurrentScene(const EvaluationContext *eval_ctx, Scene *sce)
{
PointerRNA sceneptr, unit_settings;
PropertyRNA *system; /* unused , *scale; */
@@ -287,7 +285,7 @@ int DocumentExporter::exportCurrentScene(Scene *sce)
// <library_geometries>
if (bc_has_object_type(export_set, OB_MESH)) {
GeometryExporter ge(writer, this->export_settings);
- ge.exportGeom(sce);
+ ge.exportGeom(eval_ctx, sce);
}
// <library_controllers>
@@ -295,7 +293,7 @@ int DocumentExporter::exportCurrentScene(Scene *sce)
ControllerExporter controller_exporter(writer, this->export_settings);
if (bc_has_object_type(export_set, OB_ARMATURE) || this->export_settings->include_shapekeys)
{
- controller_exporter.export_controllers(sce);
+ controller_exporter.export_controllers(eval_ctx, sce);
}
// <library_visual_scenes>
@@ -306,7 +304,7 @@ int DocumentExporter::exportCurrentScene(Scene *sce)
AnimationExporter ae(writer, this->export_settings);
#if 0
- bool has_animations = ae.exportAnimations(sce);
+ bool has_animations = ae.exportAnimations(eval_ctx, sce);
/* The following code seems to be an obsolete workaround
Comment out until it proofs correct that we no longer need it.
*/
@@ -322,10 +320,10 @@ int DocumentExporter::exportCurrentScene(Scene *sce)
se.setExportTransformationType(this->export_settings->export_transformation_type);
}
#else
- ae.exportAnimations(sce);
+ ae.exportAnimations(eval_ctx, sce);
se.setExportTransformationType(this->export_settings->export_transformation_type);
#endif
- se.exportScene(sce);
+ se.exportScene(eval_ctx, sce);
// <scene>
std::string scene_name(translate_id(id_name(sce)));
diff --git a/source/blender/collada/DocumentExporter.h b/source/blender/collada/DocumentExporter.h
index 6e3c1ecd7cd..895787c7bbc 100644
--- a/source/blender/collada/DocumentExporter.h
+++ b/source/blender/collada/DocumentExporter.h
@@ -39,7 +39,7 @@ class DocumentExporter
{
public:
DocumentExporter(const ExportSettings *export_settings);
- int exportCurrentScene(Scene *sce);
+ int exportCurrentScene(const struct EvaluationContext *eval_ctx, Scene *sce);
void exportScenes(const char *filename);
private:
const ExportSettings *export_settings;
diff --git a/source/blender/collada/DocumentImporter.cpp b/source/blender/collada/DocumentImporter.cpp
index f7fdfb06a40..dfd662aa66c 100644
--- a/source/blender/collada/DocumentImporter.cpp
+++ b/source/blender/collada/DocumentImporter.cpp
@@ -57,12 +57,13 @@ extern "C" {
#include "BLI_fileops.h"
#include "BKE_camera.h"
+#include "BKE_collection.h"
#include "BKE_main.h"
+#include "BKE_layer.h"
#include "BKE_lamp.h"
#include "BKE_library.h"
#include "BKE_texture.h"
#include "BKE_fcurve.h"
-#include "BKE_depsgraph.h"
#include "BKE_scene.h"
#include "BKE_global.h"
#include "BKE_material.h"
@@ -82,6 +83,9 @@ extern "C" {
}
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#include "ExtraHandler.h"
#include "ErrorHandler.h"
#include "DocumentImporter.h"
@@ -104,8 +108,9 @@ DocumentImporter::DocumentImporter(bContext *C, const ImportSettings *import_set
import_settings(import_settings),
mImportStage(General),
mContext(C),
- armature_importer(&unit_converter, &mesh_importer, CTX_data_scene(C), import_settings),
- mesh_importer(&unit_converter, &armature_importer, CTX_data_scene(C)),
+ view_layer(CTX_data_view_layer(mContext)),
+ armature_importer(&unit_converter, &mesh_importer, CTX_data_scene(C), view_layer, import_settings),
+ mesh_importer(&unit_converter, &armature_importer, CTX_data_scene(C), view_layer),
anim_importer(&unit_converter, &armature_importer, CTX_data_scene(C))
{
}
@@ -130,7 +135,7 @@ bool DocumentImporter::import()
loader.registerExtraDataCallbackHandler(ehandler);
// deselect all to select new objects
- BKE_scene_base_deselect_all(CTX_data_scene(mContext));
+ BKE_view_layer_base_deselect_all(view_layer);
std::string mFilename = std::string(this->import_settings->filepath);
const std::string encodedFilename = bc_url_encode(mFilename);
@@ -230,7 +235,7 @@ void DocumentImporter::finish()
}
// update scene
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
WM_event_add_notifier(mContext, NC_OBJECT | ND_TRANSFORM, NULL);
}
@@ -241,7 +246,7 @@ void DocumentImporter::finish()
armature_importer.set_tags_map(this->uid_tags_map);
armature_importer.make_armatures(mContext, *objects_to_scale);
armature_importer.make_shape_keys();
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
#if 0
armature_importer.fix_animation();
@@ -263,19 +268,11 @@ void DocumentImporter::finish()
std::vector<Object *>::iterator it;
for (it = libnode_ob.begin(); it != libnode_ob.end(); it++) {
Object *ob = *it;
-
- Base *base = BKE_scene_base_find(sce, ob);
- if (base) {
- BLI_remlink(&sce->base, base);
- BKE_libblock_free_us(G.main, base->object);
- if (sce->basact == base)
- sce->basact = NULL;
- MEM_freeN(base);
- }
+ BKE_collections_object_remove(G.main, &sce->id, ob, true);
}
libnode_ob.clear();
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
}
bc_match_scale(objects_to_scale, unit_converter, !this->import_settings->import_units);
@@ -384,7 +381,7 @@ Object *DocumentImporter::create_camera_object(COLLADAFW::InstanceCamera *camera
return NULL;
}
- Object *ob = bc_add_object(sce, OB_CAMERA, NULL);
+ Object *ob = bc_add_object(sce, view_layer, OB_CAMERA, NULL);
Camera *cam = uid_camera_map[cam_uid];
Camera *old_cam = (Camera *)ob->data;
ob->data = cam;
@@ -400,7 +397,7 @@ Object *DocumentImporter::create_lamp_object(COLLADAFW::InstanceLight *lamp, Sce
return NULL;
}
- Object *ob = bc_add_object(sce, OB_LAMP, NULL);
+ Object *ob = bc_add_object(sce, view_layer, OB_LAMP, NULL);
Lamp *la = uid_lamp_map[lamp_uid];
Lamp *old_lamp = (Lamp *)ob->data;
ob->data = la;
@@ -413,8 +410,8 @@ Object *DocumentImporter::create_instance_node(Object *source_ob, COLLADAFW::Nod
fprintf(stderr, "create <instance_node> under node id=%s from node id=%s\n", instance_node ? instance_node->getOriginalId().c_str() : NULL, source_node ? source_node->getOriginalId().c_str() : NULL);
Object *obn = BKE_object_copy(G.main, source_ob);
- DAG_id_tag_update(&obn->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
- BKE_scene_base_add(sce, obn);
+ DEG_id_tag_update(&obn->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+ BKE_collection_object_add_from(sce, source_ob, obn);
if (instance_node) {
anim_importer.read_node_transform(instance_node, obn);
@@ -516,7 +513,7 @@ std::vector<Object *> *DocumentImporter::write_node(COLLADAFW::Node *node, COLLA
if (parent_node == NULL && !is_library_node) {
// A Joint on root level is a skeleton without root node.
// Here we add the armature "on the fly":
- par = bc_add_object(sce, OB_ARMATURE, std::string("Armature").c_str());
+ par = bc_add_object(sce, view_layer, OB_ARMATURE, std::string("Armature").c_str());
objects_done->push_back(par);
root_objects->push_back(par);
object_map.insert(std::pair<COLLADAFW::UniqueId, Object *>(node->getUniqueId(), par));
@@ -630,10 +627,10 @@ std::vector<Object *> *DocumentImporter::write_node(COLLADAFW::Node *node, COLLA
if ( (geom_done + camera_done + lamp_done + controller_done + inst_done) < 1) {
//Check if Object is armature, by checking if immediate child is a JOINT node.
if (is_armature(node)) {
- ob = bc_add_object(sce, OB_ARMATURE, name.c_str());
+ ob = bc_add_object(sce, view_layer, OB_ARMATURE, name.c_str());
}
else {
- ob = bc_add_object(sce, OB_EMPTY, NULL);
+ ob = bc_add_object(sce, view_layer, OB_EMPTY, NULL);
}
objects_done->push_back(ob);
if (parent_node == NULL) {
diff --git a/source/blender/collada/DocumentImporter.h b/source/blender/collada/DocumentImporter.h
index 62f76dbc022..fd61f3a68da 100644
--- a/source/blender/collada/DocumentImporter.h
+++ b/source/blender/collada/DocumentImporter.h
@@ -144,6 +144,7 @@ private:
ImportStage mImportStage;
bContext *mContext;
+ ViewLayer *view_layer;
UnitConverter unit_converter;
ArmatureImporter armature_importer;
diff --git a/source/blender/collada/EffectExporter.cpp b/source/blender/collada/EffectExporter.cpp
index 2bf0859b0f0..5e7f92047d3 100644
--- a/source/blender/collada/EffectExporter.cpp
+++ b/source/blender/collada/EffectExporter.cpp
@@ -27,6 +27,7 @@
#include <map>
+#include <set>
#include "COLLADASWEffectProfile.h"
#include "COLLADAFWColorOrTexture.h"
@@ -43,21 +44,31 @@ extern "C" {
#include "DNA_texture_types.h"
#include "DNA_world_types.h"
+ #include "BKE_collection.h"
#include "BKE_customdata.h"
#include "BKE_mesh.h"
#include "BKE_material.h"
}
-EffectsExporter::EffectsExporter(COLLADASW::StreamWriter *sw, const ExportSettings *export_settings) : COLLADASW::LibraryEffects(sw), export_settings(export_settings) {
+// OB_MESH is assumed
+static std::string getActiveUVLayerName(Object *ob)
+{
+ Mesh *me = (Mesh *)ob->data;
+
+ int num_layers = CustomData_number_of_layers(&me->fdata, CD_MTFACE);
+ if (num_layers)
+ return std::string(bc_CustomData_get_active_layer_name(&me->fdata, CD_MTFACE));
+
+ return "";
}
+EffectsExporter::EffectsExporter(COLLADASW::StreamWriter *sw, const ExportSettings *export_settings) : COLLADASW::LibraryEffects(sw), export_settings(export_settings) {
+}
bool EffectsExporter::hasEffects(Scene *sce)
{
- Base *base = (Base *)sce->base.first;
-
- while (base) {
- Object *ob = base->object;
+ FOREACH_SCENE_OBJECT(sce, ob)
+ {
int a;
for (a = 0; a < ob->totcol; a++) {
Material *ma = give_current_material(ob, a + 1);
@@ -67,56 +78,20 @@ bool EffectsExporter::hasEffects(Scene *sce)
return true;
}
- base = base->next;
}
+ FOREACH_SCENE_OBJECT_END
return false;
}
void EffectsExporter::exportEffects(Scene *sce)
{
- this->scene = sce;
-
- if (this->export_settings->export_texture_type == BC_TEXTURE_TYPE_MAT) {
- if (hasEffects(sce)) {
- MaterialFunctor mf;
- openLibrary();
- mf.forEachMaterialInExportSet<EffectsExporter>(sce, *this, this->export_settings->export_set);
- closeLibrary();
- }
- }
- else {
- std::set<Object *> uv_textured_obs = bc_getUVTexturedObjects(sce, !this->export_settings->active_uv_only);
- std::set<Image *> uv_images = bc_getUVImages(sce, !this->export_settings->active_uv_only);
- if (uv_images.size() > 0) {
- openLibrary();
- std::set<Image *>::iterator uv_images_iter;
- for (uv_images_iter = uv_images.begin();
- uv_images_iter != uv_images.end();
- uv_images_iter++) {
-
- Image *ima = *uv_images_iter;
- std::string key(id_name(ima));
- key = translate_id(key);
- COLLADASW::Sampler sampler(COLLADASW::Sampler::SAMPLER_TYPE_2D,
- key + COLLADASW::Sampler::SAMPLER_SID_SUFFIX,
- key + COLLADASW::Sampler::SURFACE_SID_SUFFIX);
- sampler.setImageId(key);
-
- openEffect(key + "-effect");
- COLLADASW::EffectProfile ep(mSW);
- ep.setProfileType(COLLADASW::EffectProfile::COMMON);
- ep.setShaderType(COLLADASW::EffectProfile::PHONG);
- ep.setDiffuse(createTexture(ima, key, &sampler), false, "diffuse");
- COLLADASW::ColorOrTexture cot = getcol(0, 0, 0, 1.0f);
- ep.setSpecular(cot, false, "specular");
- ep.openProfile();
- ep.addProfileElements();
- ep.addExtraTechniques(mSW);
- ep.closeProfile();
- closeEffect();
- }
- closeLibrary();
- }
+ if (hasEffects(sce)) {
+ this->scene = sce;
+ openLibrary();
+ MaterialFunctor mf;
+ mf.forEachMaterialInExportSet<EffectsExporter>(sce, *this, this->export_settings->export_set);
+
+ closeLibrary();
}
}
@@ -200,7 +175,8 @@ void EffectsExporter::operator()(Material *ma, Object *ob)
{
// create a list of indices to textures of type TEX_IMAGE
std::vector<int> tex_indices;
- createTextureIndices(ma, tex_indices);
+ if (this->export_settings->include_material_textures)
+ createTextureIndices(ma, tex_indices);
openEffect(translate_id(id_name(ma)) + "-effect");
@@ -336,7 +312,7 @@ void EffectsExporter::operator()(Material *ma, Object *ob)
// used as fallback when MTex->uvname is "" (this is pretty common)
// it is indeed the correct value to use in that case
- std::string active_uv(bc_get_active_uvlayer_name(ob));
+ std::string active_uv(getActiveUVLayerName(ob));
// write textures
// XXX very slow
diff --git a/source/blender/collada/EffectExporter.h b/source/blender/collada/EffectExporter.h
index 7d45a085777..d20cbfdfe0b 100644
--- a/source/blender/collada/EffectExporter.h
+++ b/source/blender/collada/EffectExporter.h
@@ -48,6 +48,7 @@ class EffectsExporter: COLLADASW::LibraryEffects
public:
EffectsExporter(COLLADASW::StreamWriter *sw, const ExportSettings *export_settings);
void exportEffects(Scene *sce);
+
void operator()(Material *ma, Object *ob);
COLLADASW::ColorOrTexture createTexture(Image *ima,
diff --git a/source/blender/collada/ExportSettings.h b/source/blender/collada/ExportSettings.h
index 6d90edd2f67..33a7527f383 100644
--- a/source/blender/collada/ExportSettings.h
+++ b/source/blender/collada/ExportSettings.h
@@ -28,6 +28,7 @@
#define __EXPORTSETTINGS_H__
#include "collada.h"
+#include "collada.h"
struct ExportSettings {
public:
@@ -41,7 +42,7 @@ public:
bool deform_bones_only;
bool active_uv_only;
- BC_export_texture_type export_texture_type;
+ bool include_material_textures;
bool use_texture_copies;
bool triangulate;
diff --git a/source/blender/collada/GeometryExporter.cpp b/source/blender/collada/GeometryExporter.cpp
index 73b00fd07ec..8dbee607b01 100644
--- a/source/blender/collada/GeometryExporter.cpp
+++ b/source/blender/collada/GeometryExporter.cpp
@@ -52,16 +52,16 @@ extern "C" {
#include "collada_internal.h"
#include "collada_utils.h"
-
// TODO: optimize UV sets by making indexed list with duplicates removed
GeometryExporter::GeometryExporter(COLLADASW::StreamWriter *sw, const ExportSettings *export_settings) : COLLADASW::LibraryGeometries(sw), export_settings(export_settings)
{
}
-void GeometryExporter::exportGeom(Scene *sce)
+void GeometryExporter::exportGeom(const struct EvaluationContext *eval_ctx, Scene *sce)
{
openLibrary();
+ mEvalCtx = eval_ctx;
mScene = sce;
GeometryFunctor gf;
gf.forEachMeshObjectInExportSet<GeometryExporter>(sce, *this, this->export_settings->export_set);
@@ -77,7 +77,7 @@ void GeometryExporter::operator()(Object *ob)
#endif
bool use_instantiation = this->export_settings->use_object_instantiation;
- Mesh *me = bc_get_mesh_copy( mScene,
+ Mesh *me = bc_get_mesh_copy(mEvalCtx, mScene,
ob,
this->export_settings->export_mesh_type,
this->export_settings->apply_modifiers,
@@ -135,22 +135,13 @@ void GeometryExporter::operator()(Object *ob)
// Only create Polylists if number of faces > 0
if (me->totface > 0) {
// XXX slow
- std::set<Image *> uv_images = bc_getUVImages(ob, !this->export_settings->active_uv_only);
- if (this->export_settings->export_texture_type == BC_TEXTURE_TYPE_MAT || uv_images.size() == 0) {
- if (ob->totcol) {
- for (int a = 0; a < ob->totcol; a++) {
- createPolylist(a, has_uvs, has_color, ob, me, geom_id, norind);
- }
- }
- else {
- int i = 0;
- createPolylist(i, has_uvs, has_color, ob, me, geom_id, norind);
+ if (ob->totcol) {
+ for (int a = 0; a < ob->totcol; a++) {
+ createPolylist(a, has_uvs, has_color, ob, me, geom_id, norind);
}
}
else {
- bool all_uv_layers = !this->export_settings->active_uv_only;
- std::set<Image *> uv_images = bc_getUVImages(ob, all_uv_layers);
- createPolylists(uv_images, has_uvs, has_color, ob, me, geom_id, norind);
+ createPolylist(0, has_uvs, has_color, ob, me, geom_id, norind);
}
}
@@ -230,15 +221,13 @@ void GeometryExporter::export_key_mesh(Object *ob, Mesh *me, KeyBlock *kb)
//createLooseEdgeList(ob, me, geom_id, norind);
// XXX slow
- if (ob->totcol && this->export_settings->export_texture_type == BC_TEXTURE_TYPE_MAT) {
+ if (ob->totcol) {
for (int a = 0; a < ob->totcol; a++) {
createPolylist(a, has_uvs, has_color, ob, me, geom_id, norind);
}
}
else {
- bool all_uv_layers = !this->export_settings->active_uv_only;
- std::set<Image *> uv_images = bc_getUVImages(ob, all_uv_layers);
- createPolylists(uv_images, has_uvs, has_color, ob, me, geom_id, norind);
+ createPolylist(0, has_uvs, has_color, ob, me, geom_id, norind);
}
closeMesh();
@@ -307,44 +296,7 @@ std::string GeometryExporter::makeVertexColorSourceId(std::string& geom_id, char
return result;
}
-static void prepareToAppendValues(bool is_triangulated, COLLADASW::PrimitivesBase *facelist, std::vector<unsigned long> &vcount_list)
-{
- // performs the actual writing
- if (is_triangulated) {
- ((COLLADASW::Triangles *)facelist)->prepareToAppendValues();
- }
- else {
- // sets <vcount>
- facelist->setVCountList(vcount_list);
- ((COLLADASW::Polylist *)facelist)-> prepareToAppendValues();
- }
-}
-
-static void finishList(bool is_triangulated, COLLADASW::PrimitivesBase *facelist)
-{
- if (is_triangulated) {
- ((COLLADASW::Triangles *)facelist)->finish();
- }
- else {
- ((COLLADASW::Polylist *)facelist)->finish();
- }
-}
-
-COLLADASW::PrimitivesBase *getFacelist(bool is_triangulated, COLLADASW::StreamWriter *mSW)
-{
- COLLADASW::PrimitivesBase *facelist;
-
- if (is_triangulated)
- {
- facelist = new COLLADASW::Triangles(mSW);
- }
- else {
- facelist = new COLLADASW::Polylist(mSW);
- }
- return facelist;
-}
-
-// Export meshes with Materials
+// powerful because it handles both cases when there is material and when there's not
void GeometryExporter::createPolylist(short material_index,
bool has_uvs,
bool has_color,
@@ -362,7 +314,7 @@ void GeometryExporter::createPolylist(short material_index,
int i;
int faces_in_polylist = 0;
std::vector<unsigned long> vcount_list;
- bool is_triangulated = true;
+
// count faces with this material
for (i = 0; i < totpolys; i++) {
MPoly *p = &mpolys[i];
@@ -370,9 +322,6 @@ void GeometryExporter::createPolylist(short material_index,
if (p->mat_nr == material_index) {
faces_in_polylist++;
vcount_list.push_back(p->totloop);
- if (p->totloop != 3) {
- is_triangulated = false;
- }
}
}
@@ -383,21 +332,20 @@ void GeometryExporter::createPolylist(short material_index,
}
Material *ma = ob->totcol ? give_current_material(ob, material_index + 1) : NULL;
- COLLADASW::PrimitivesBase *facelist = getFacelist(is_triangulated, mSW);
-
+ COLLADASW::Polylist polylist(mSW);
// sets count attribute in <polylist>
- facelist->setCount(faces_in_polylist);
+ polylist.setCount(faces_in_polylist);
// sets material name
if (ma) {
std::string material_id = get_material_id(ma);
std::ostringstream ostr;
ostr << translate_id(material_id);
- facelist->setMaterial(ostr.str());
+ polylist.setMaterial(ostr.str());
}
-
- COLLADASW::InputList &til = facelist->getInputList();
+
+ COLLADASW::InputList &til = polylist.getInputList();
// creates <input> in <polylist> for vertices
COLLADASW::Input input1(COLLADASW::InputSemantic::VERTEX, getUrlBySemantics(geom_id, COLLADASW::InputSemantic::VERTEX), 0);
@@ -413,21 +361,13 @@ void GeometryExporter::createPolylist(short material_index,
int active_uv_index = CustomData_get_active_layer_index(&me->fdata, CD_MTFACE)-1;
for (i = 0; i < num_layers; i++) {
if (!this->export_settings->active_uv_only || i == active_uv_index) {
-
- std::string uv_name(bc_get_uvlayer_name(me, i));
- std::string effective_id = geom_id; // (uv_name == "") ? geom_id : uv_name;
- std::string layer_id = makeTexcoordSourceId(
- effective_id,
- i, this->export_settings->active_uv_only);
-
- /* Note: the third parameter denotes the offset of TEXCOORD in polylist elements
- For now this is always 2 (This may change sometime/maybe)
- */
+
+ // char *name = CustomData_get_layer_name(&me->fdata, CD_MTFACE, i);
COLLADASW::Input input3(COLLADASW::InputSemantic::TEXCOORD,
- makeUrl(layer_id),
- 2, // this is only until we have optimized UV sets
- (this->export_settings->active_uv_only) ? 0 : i // only_active_uv exported -> we have only one set
- );
+ makeUrl(makeTexcoordSourceId(geom_id, i, this->export_settings->active_uv_only)),
+ 2, // this is only until we have optimized UV sets
+ (this->export_settings->active_uv_only) ? 0 : i // only_active_uv exported -> we have only one set
+ );
til.push_back(input3);
}
}
@@ -448,10 +388,12 @@ void GeometryExporter::createPolylist(short material_index,
}
}
+ // sets <vcount>
+ polylist.setVCountList(vcount_list);
// performs the actual writing
- prepareToAppendValues(is_triangulated, facelist, vcount_list);
-
+ polylist.prepareToAppendValues();
+
// <p>
int texindex = 0;
for (i = 0; i < totpolys; i++) {
@@ -463,201 +405,20 @@ void GeometryExporter::createPolylist(short material_index,
BCPolygonNormalsIndices normal_indices = norind[i];
for (int j = 0; j < loop_count; j++) {
- facelist->appendValues(l[j].v);
- facelist->appendValues(normal_indices[j]);
- if (has_uvs)
- facelist->appendValues(texindex + j);
-
- if (has_color)
- facelist->appendValues(texindex + j);
- }
- }
-
- texindex += loop_count;
- }
-
- finishList(is_triangulated, facelist);
- delete facelist;
-}
-
-void GeometryExporter::createPolylists(std::set<Image *> uv_images,
- bool has_uvs,
- bool has_color,
- Object *ob,
- Mesh *me,
- std::string& geom_id,
- std::vector<BCPolygonNormalsIndices>& norind)
-{
- std::set<Image *>::iterator uv_images_iter;
- for (uv_images_iter = uv_images.begin();
- uv_images_iter != uv_images.end();
- uv_images_iter++) {
-
- Image *ima = *uv_images_iter;
- std::string imageid(id_name(ima));
- createPolylist(imageid, has_uvs,
- has_color,
- ob,
- me,
- geom_id,
- norind);
- }
-
- /* We msut add an additional collector for the case when
- * some parts of the object are not textured at all.
- * The next call creates a polylist for all untextured polygons
- */
-
- createPolylist("", has_uvs,
- has_color,
- ob,
- me,
- geom_id,
- norind);
-
-}
-
-/* ===========================================================================
- * Export Meshes with UV Textures (export as materials, see also in
- * effectExporter and MaterialExporter)
- *
- * If imageid is the empty string, then collect only untextured polygons
- * =========================================================================== */
-void GeometryExporter::createPolylist(std::string imageid,
- bool has_uvs,
- bool has_color,
- Object *ob,
- Mesh *me,
- std::string& geom_id,
- std::vector<BCPolygonNormalsIndices>& norind)
-{
-
- MPoly *mpolys = me->mpoly;
- MLoop *mloops = me->mloop;
- MTexPoly *mtpolys = me->mtpoly;
-
- int totpolys = me->totpoly;
-
- // <vcount>
- int i;
- int faces_in_polylist = 0;
- std::vector<unsigned long> vcount_list;
- bool is_triangulated = true;
- // count faces with this material
- for (i = 0; i < totpolys; i++) {
- MTexPoly *tp = &mtpolys[i];
- MPoly *p = &mpolys[i];
-
- std::string tpageid = (mtpolys && tp->tpage) ? id_name(tp->tpage) : "";
- if (tpageid == imageid) {
- faces_in_polylist++;
- vcount_list.push_back(p->totloop);
- if (p->totloop != 3) {
- is_triangulated = false;
- }
- }
- }
-
- // no faces using this imageid
- if (faces_in_polylist == 0) {
- if (imageid != "")
- fprintf(stderr, "%s: Image %s is not used.\n", id_name(ob).c_str(), imageid.c_str());
- return;
- }
-
- COLLADASW::PrimitivesBase *facelist = getFacelist(is_triangulated, mSW);
-
- // sets count attribute in <polylist>
- facelist->setCount(faces_in_polylist);
-
- if (imageid != "") {
- // sets material name
- std::string material_id = get_material_id_from_id(imageid);
- std::ostringstream ostr;
- ostr << translate_id(material_id);
- facelist->setMaterial(ostr.str());
- }
- COLLADASW::InputList &til = facelist->getInputList();
-
- // creates <input> in <polylist> for vertices
- COLLADASW::Input input1(COLLADASW::InputSemantic::VERTEX, getUrlBySemantics(geom_id, COLLADASW::InputSemantic::VERTEX), 0);
-
- // creates <input> in <polylist> for normals
- COLLADASW::Input input2(COLLADASW::InputSemantic::NORMAL, getUrlBySemantics(geom_id, COLLADASW::InputSemantic::NORMAL), 1);
-
- til.push_back(input1);
- til.push_back(input2);
-
- // if mesh has uv coords writes <input> for TEXCOORD
- int num_layers = CustomData_number_of_layers(&me->fdata, CD_MTFACE);
- int active_uv_index = CustomData_get_active_layer_index(&me->fdata, CD_MTFACE) - 1;
- for (i = 0; i < num_layers; i++) {
- if (!this->export_settings->active_uv_only || i == active_uv_index) {
-
- std::string uv_name(bc_get_uvlayer_name(me, i));
- std::string effective_id = geom_id; // (uv_name == "") ? geom_id : uv_name;
- std::string layer_id = makeTexcoordSourceId(
- effective_id,
- i, this->export_settings->active_uv_only);
-
- /* Note: the third parameter denotes the offset of TEXCOORD in polylist elements
- For now this is always 2 (This may change sometime/maybe)
- */
- COLLADASW::Input input3(COLLADASW::InputSemantic::TEXCOORD,
- makeUrl(layer_id),
- 2, // this is only until we have optimized UV sets
- (this->export_settings->active_uv_only) ? 0 : i // only_active_uv exported -> we have only one set
- );
- til.push_back(input3);
- }
- }
-
- int totlayer_mcol = CustomData_number_of_layers(&me->ldata, CD_MLOOPCOL);
- if (totlayer_mcol > 0) {
- int map_index = 0;
-
- for (int a = 0; a < totlayer_mcol; a++) {
- char *layer_name = bc_CustomData_get_layer_name(&me->ldata, CD_MLOOPCOL, a);
- COLLADASW::Input input4(COLLADASW::InputSemantic::COLOR,
- makeUrl(makeVertexColorSourceId(geom_id, layer_name)),
- (has_uvs) ? 3 : 2, // all color layers have same index order
- map_index // set number equals color map index
- );
- til.push_back(input4);
- map_index++;
- }
- }
-
- // performs the actual writing
- prepareToAppendValues(is_triangulated, facelist, vcount_list);
-
- // <p>
- int texindex = 0;
- for (i = 0; i < totpolys; i++) {
- MTexPoly *tp = &mtpolys[i];
- MPoly *p = &mpolys[i];
- int loop_count = p->totloop;
- std::string tpageid = (mtpolys && tp->tpage) ? id_name(tp->tpage) : "";
- if (tpageid == imageid) {
- MLoop *l = &mloops[p->loopstart];
- BCPolygonNormalsIndices normal_indices = norind[i];
-
- for (int j = 0; j < loop_count; j++) {
- facelist->appendValues(l[j].v);
- facelist->appendValues(normal_indices[j]);
+ polylist.appendValues(l[j].v);
+ polylist.appendValues(normal_indices[j]);
if (has_uvs)
- facelist->appendValues(texindex + j);
+ polylist.appendValues(texindex + j);
if (has_color)
- facelist->appendValues(texindex + j);
+ polylist.appendValues(texindex + j);
}
}
texindex += loop_count;
}
-
- finishList(is_triangulated, facelist);
- delete facelist;
+
+ polylist.finish();
}
// creates <source> for positions
@@ -778,13 +539,7 @@ void GeometryExporter::createTexcoordsSource(std::string geom_id, Mesh *me)
MLoopUV *mloops = (MLoopUV *)CustomData_get_layer_n(&me->ldata, CD_MLOOPUV, a);
COLLADASW::FloatSourceF source(mSW);
- std::string active_uv_name(bc_get_active_uvlayer_name(me));
- std::string effective_id = geom_id; // (active_uv_name == "") ? geom_id : active_uv_name;
- std::string layer_id = makeTexcoordSourceId(
- effective_id,
- a,
- this->export_settings->active_uv_only );
-
+ std::string layer_id = makeTexcoordSourceId(geom_id, a, this->export_settings->active_uv_only);
source.setId(layer_id);
source.setArrayId(layer_id + ARRAY_ID_SUFFIX);
diff --git a/source/blender/collada/GeometryExporter.h b/source/blender/collada/GeometryExporter.h
index 890304f4568..7527195fdd8 100644
--- a/source/blender/collada/GeometryExporter.h
+++ b/source/blender/collada/GeometryExporter.h
@@ -46,6 +46,8 @@
#include "BKE_key.h"
+struct EvaluationContext;
+
extern Object *bc_get_highest_selected_ancestor_or_self(Object *ob);
class Normal
@@ -72,12 +74,13 @@ class GeometryExporter : COLLADASW::LibraryGeometries
Normal n;
+ const struct EvaluationContext *mEvalCtx;
Scene *mScene;
public:
GeometryExporter(COLLADASW::StreamWriter *sw, const ExportSettings *export_settings);
- void exportGeom(Scene *sce);
+ void exportGeom(const struct EvaluationContext *eval_ctx, Scene *sce);
void operator()(Object *ob);
@@ -85,33 +88,15 @@ public:
Mesh *me,
std::string& geom_id);
- // Create polylists for meshes with Materials
+ // powerful because it handles both cases when there is material and when there's not
void createPolylist(short material_index,
- bool has_uvs,
- bool has_color,
- Object *ob,
- Mesh *me,
- std::string& geom_id,
- std::vector<BCPolygonNormalsIndices>& norind);
-
- // Create polylists for meshes with UV Textures
- void createPolylists(std::set<Image *> uv_images,
- bool has_uvs,
- bool has_color,
- Object *ob,
- Mesh *me,
- std::string& geom_id,
- std::vector<BCPolygonNormalsIndices>& norind);
-
- // Create polylists for meshes with UV Textures
- void createPolylist(std::string imageid,
- bool has_uvs,
- bool has_color,
- Object *ob,
- Mesh *me,
- std::string& geom_id,
- std::vector<BCPolygonNormalsIndices>& norind);
-
+ bool has_uvs,
+ bool has_color,
+ Object *ob,
+ Mesh *me,
+ std::string& geom_id,
+ std::vector<BCPolygonNormalsIndices>& norind);
+
// creates <source> for positions
void createVertsSource(std::string geom_id, Mesh *me);
diff --git a/source/blender/collada/ImageExporter.cpp b/source/blender/collada/ImageExporter.cpp
index 93be7de6236..a2ab3ce520b 100644
--- a/source/blender/collada/ImageExporter.cpp
+++ b/source/blender/collada/ImageExporter.cpp
@@ -55,9 +55,9 @@ ImagesExporter::ImagesExporter(COLLADASW::StreamWriter *sw, const ExportSettings
void ImagesExporter::export_UV_Image(Image *image, bool use_copies)
{
- std::string id(id_name(image));
- std::string translated_id(translate_id(id));
- bool not_yet_exported = find(mImages.begin(), mImages.end(), translated_id) == mImages.end();
+ std::string name(id_name(image));
+ std::string translated_name(translate_id(name));
+ bool not_yet_exported = find(mImages.begin(), mImages.end(), translated_name) == mImages.end();
if (not_yet_exported) {
@@ -88,7 +88,7 @@ void ImagesExporter::export_UV_Image(Image *image, bool use_copies)
// make absolute destination path
- BLI_strncpy(export_file, id.c_str(), sizeof(export_file));
+ BLI_strncpy(export_file, name.c_str(), sizeof(export_file));
BKE_image_path_ensure_ext_from_imformat(export_file, &imageFormat);
BLI_join_dirfile(export_path, sizeof(export_path), export_dir, export_file);
@@ -143,60 +143,15 @@ void ImagesExporter::export_UV_Image(Image *image, bool use_copies)
}
}
- /* set name also to mNameNC. This helps other viewers import files exported from Blender better */
- COLLADASW::Image img(COLLADABU::URI(COLLADABU::URI::nativePathToUri(export_path)), translated_id, translated_id);
+ COLLADASW::Image img(COLLADABU::URI(COLLADABU::URI::nativePathToUri(export_path)), translated_name, translated_name); /* set name also to mNameNC. This helps other viewers import files exported from Blender better */
img.add(mSW);
fprintf(stdout, "Collada export: Added image: %s\n", export_file);
- mImages.push_back(translated_id);
+ mImages.push_back(translated_name);
BKE_image_release_ibuf(image, imbuf, NULL);
}
}
-void ImagesExporter::export_UV_Images()
-{
- std::set<Image *> uv_textures;
- LinkNode *node;
- bool use_texture_copies = this->export_settings->use_texture_copies;
- bool active_uv_only = this->export_settings->active_uv_only;
-
- for (node = this->export_settings->export_set; node; node = node->next) {
- Object *ob = (Object *)node->link;
- if (ob->type == OB_MESH) {
- Mesh *me = (Mesh *) ob->data;
- BKE_mesh_tessface_ensure(me);
- int active_uv_layer = CustomData_get_active_layer_index(&me->pdata, CD_MTEXPOLY);
- for (int i = 0; i < me->pdata.totlayer; i++) {
- if (me->pdata.layers[i].type == CD_MTEXPOLY) {
- if (!active_uv_only || active_uv_layer == i)
- {
- MTexPoly *txface = (MTexPoly *)me->pdata.layers[i].data;
- for (int j = 0; j < me->totpoly; j++, txface++) {
-
- Image *ima = txface->tpage;
- if (ima == NULL)
- continue;
-
- bool not_in_list = uv_textures.find(ima) == uv_textures.end();
- if (not_in_list) {
- uv_textures.insert(ima);
- export_UV_Image(ima, use_texture_copies);
- }
- }
- }
- }
- }
- }
- }
-}
-
-/* ============================================================
- * Check if there are any images to be exported
- * Returns true as soon as an object is detected that
- * either has an UV Texture assigned, or has a material
- * assigned that uses an Image Texture.
- * ============================================================
- */
bool ImagesExporter::hasImages(Scene *sce)
{
LinkNode *node;
@@ -216,20 +171,6 @@ bool ImagesExporter::hasImages(Scene *sce)
}
}
- if (ob->type == OB_MESH) {
- Mesh *me = (Mesh *) ob->data;
- BKE_mesh_tessface_ensure(me);
- bool has_uvs = (bool)CustomData_has_layer(&me->fdata, CD_MTFACE);
- if (has_uvs) {
- int num_layers = CustomData_number_of_layers(&me->fdata, CD_MTFACE);
- for (int a = 0; a < num_layers; a++) {
- MTFace *tface = (MTFace *)CustomData_get_layer_n(&me->fdata, CD_MTFACE, a);
- Image *img = tface->tpage;
- if (img) return true;
- }
- }
- }
-
}
return false;
}
@@ -239,12 +180,9 @@ void ImagesExporter::exportImages(Scene *sce)
openLibrary();
MaterialFunctor mf;
- if (this->export_settings->export_texture_type == BC_TEXTURE_TYPE_MAT) {
+ if (this->export_settings->include_material_textures) {
mf.forEachMaterialInExportSet<ImagesExporter>(sce, *this, this->export_settings->export_set);
}
- else {
- export_UV_Images();
- }
closeLibrary();
}
diff --git a/source/blender/collada/ImageExporter.h b/source/blender/collada/ImageExporter.h
index 0eaebdd5cdd..f3dd2b336e4 100644
--- a/source/blender/collada/ImageExporter.h
+++ b/source/blender/collada/ImageExporter.h
@@ -51,7 +51,6 @@ public:
private:
std::vector<std::string> mImages; // contains list of written images, to avoid duplicates
- void export_UV_Images();
void export_UV_Image(Image *image, bool use_texture_copies);
bool hasImages(Scene *sce);
const ExportSettings *export_settings;
diff --git a/source/blender/collada/InstanceWriter.cpp b/source/blender/collada/InstanceWriter.cpp
index de1a4075462..71371d280df 100644
--- a/source/blender/collada/InstanceWriter.cpp
+++ b/source/blender/collada/InstanceWriter.cpp
@@ -32,76 +32,43 @@
#include "COLLADASWInstanceMaterial.h"
extern "C" {
-#include "BKE_customdata.h"
-#include "BKE_material.h"
-#include "DNA_mesh_types.h"
+ #include "BKE_customdata.h"
+ #include "BKE_material.h"
+ #include "DNA_mesh_types.h"
}
#include "InstanceWriter.h"
#include "collada_internal.h"
#include "collada_utils.h"
-void InstanceWriter::add_material_bindings(COLLADASW::BindMaterial& bind_material, Object *ob, bool active_uv_only, BC_export_texture_type export_texture_type)
+void InstanceWriter::add_material_bindings(COLLADASW::BindMaterial& bind_material, Object *ob, bool active_uv_only)
{
- bool all_uv_layers = !active_uv_only;
- COLLADASW::InstanceMaterialList& iml = bind_material.getInstanceMaterialList();
+ for (int a = 0; a < ob->totcol; a++) {
+ Material *ma = give_current_material(ob, a + 1);
+
+ COLLADASW::InstanceMaterialList& iml = bind_material.getInstanceMaterialList();
- if (export_texture_type == BC_TEXTURE_TYPE_UV)
- {
- std::set<Image *> uv_images = bc_getUVImages(ob, all_uv_layers);
- std::set<Image *>::iterator uv_images_iter;
- for (uv_images_iter = uv_images.begin();
- uv_images_iter != uv_images.end();
- uv_images_iter++) {
- Image *ima = *uv_images_iter;
- std::string matid(id_name(ima));
- matid = get_material_id_from_id(matid);
+ if (ma) {
+ std::string matid(get_material_id(ma));
+ matid = translate_id(matid);
std::ostringstream ostr;
ostr << matid;
COLLADASW::InstanceMaterial im(ostr.str(), COLLADASW::URI(COLLADABU::Utils::EMPTY_STRING, matid));
-
+
// create <bind_vertex_input> for each uv map
Mesh *me = (Mesh *)ob->data;
int totlayer = CustomData_number_of_layers(&me->fdata, CD_MTFACE);
-
+
int map_index = 0;
- int active_uv_index = CustomData_get_active_layer_index(&me->fdata, CD_MTFACE) - 1;
+ int active_uv_index = CustomData_get_active_layer_index(&me->fdata, CD_MTFACE) -1;
for (int b = 0; b < totlayer; b++) {
if (!active_uv_only || b == active_uv_index) {
char *name = bc_CustomData_get_layer_name(&me->fdata, CD_MTFACE, b);
im.push_back(COLLADASW::BindVertexInput(name, "TEXCOORD", map_index++));
}
}
-
+
iml.push_back(im);
}
}
-
- else {
- for (int a = 0; a < ob->totcol; a++) {
- Material *ma = give_current_material(ob, a + 1);
- if (ma) {
- std::string matid(get_material_id(ma));
- matid = translate_id(matid);
- std::ostringstream ostr;
- ostr << matid;
- COLLADASW::InstanceMaterial im(ostr.str(), COLLADASW::URI(COLLADABU::Utils::EMPTY_STRING, matid));
-
- // create <bind_vertex_input> for each uv map
- Mesh *me = (Mesh *)ob->data;
- int totlayer = CustomData_number_of_layers(&me->fdata, CD_MTFACE);
-
- int map_index = 0;
- int active_uv_index = CustomData_get_active_layer_index(&me->fdata, CD_MTFACE) - 1;
- for (int b = 0; b < totlayer; b++) {
- if (!active_uv_only || b == active_uv_index) {
- char *name = bc_CustomData_get_layer_name(&me->fdata, CD_MTFACE, b);
- im.push_back(COLLADASW::BindVertexInput(name, "TEXCOORD", map_index++));
- }
- }
-
- iml.push_back(im);
- }
- }
- }
}
diff --git a/source/blender/collada/InstanceWriter.h b/source/blender/collada/InstanceWriter.h
index a46027325a2..49ddf091b1c 100644
--- a/source/blender/collada/InstanceWriter.h
+++ b/source/blender/collada/InstanceWriter.h
@@ -31,12 +31,11 @@
#include "COLLADASWBindMaterial.h"
#include "DNA_object_types.h"
-#include "collada.h"
class InstanceWriter
{
protected:
- void add_material_bindings(COLLADASW::BindMaterial& bind_material, Object *ob, bool active_uv_only, BC_export_texture_type export_texture_type);
+ void add_material_bindings(COLLADASW::BindMaterial& bind_material, Object *ob, bool active_uv_only);
};
#endif
diff --git a/source/blender/collada/MaterialExporter.cpp b/source/blender/collada/MaterialExporter.cpp
index 6e6cc24be20..4aece997f72 100644
--- a/source/blender/collada/MaterialExporter.cpp
+++ b/source/blender/collada/MaterialExporter.cpp
@@ -38,39 +38,14 @@ MaterialsExporter::MaterialsExporter(COLLADASW::StreamWriter *sw, const ExportSe
void MaterialsExporter::exportMaterials(Scene *sce)
{
- if (this->export_settings->export_texture_type == BC_TEXTURE_TYPE_MAT)
- {
- if (hasMaterials(sce)) {
- openLibrary();
+ if (hasMaterials(sce)) {
+ openLibrary();
- MaterialFunctor mf;
- mf.forEachMaterialInExportSet<MaterialsExporter>(sce, *this, this->export_settings->export_set);
+ MaterialFunctor mf;
+ mf.forEachMaterialInExportSet<MaterialsExporter>(sce, *this, this->export_settings->export_set);
- closeLibrary();
- }
+ closeLibrary();
}
-
- else {
- std::set<Image *> uv_images = bc_getUVImages(sce, !this->export_settings->active_uv_only);
- if (uv_images.size() > 0) {
- openLibrary();
- std::set<Image *>::iterator uv_images_iter;
- for (uv_images_iter = uv_images.begin();
- uv_images_iter != uv_images.end();
- uv_images_iter++) {
-
- Image *ima = *uv_images_iter;
- std::string matid(id_name(ima));
-
- openMaterial(get_material_id_from_id(matid), translate_id(matid));
- std::string efid = translate_id(matid) + "-effect";
- addInstanceEffect(COLLADASW::URI(COLLADABU::Utils::EMPTY_STRING, efid));
- closeMaterial();
- }
- closeLibrary();
- }
- }
-
}
bool MaterialsExporter::hasMaterials(Scene *sce)
diff --git a/source/blender/collada/MeshImporter.cpp b/source/blender/collada/MeshImporter.cpp
index 6ca53c64299..f8cd487c355 100644
--- a/source/blender/collada/MeshImporter.cpp
+++ b/source/blender/collada/MeshImporter.cpp
@@ -207,7 +207,11 @@ void VCOLDataWrapper::get_vcol(int v_index, MLoopCol *mloopcol)
}
-MeshImporter::MeshImporter(UnitConverter *unitconv, ArmatureImporter *arm, Scene *sce) : unitconverter(unitconv), scene(sce), armature_importer(arm) {
+MeshImporter::MeshImporter(UnitConverter *unitconv, ArmatureImporter *arm, Scene *sce, ViewLayer *view_layer):
+ unitconverter(unitconv),
+ scene(sce),
+ view_layer(view_layer),
+ armature_importer(arm) {
}
bool MeshImporter::set_poly_indices(MPoly *mpoly, MLoop *mloop, int loop_index, unsigned int *indices, int loop_count)
@@ -472,11 +476,9 @@ void MeshImporter::allocate_poly_data(COLLADAFW::Mesh *collada_mesh, Mesh *me)
COLLADAFW::MeshVertexData::InputInfos *info = collada_mesh->getUVCoords().getInputInfosArray()[i];
COLLADAFW::String &uvname = info->mName;
// Allocate space for UV_data
- CustomData_add_layer_named(&me->pdata, CD_MTEXPOLY, CD_DEFAULT, NULL, me->totpoly, uvname.c_str());
CustomData_add_layer_named(&me->ldata, CD_MLOOPUV, CD_DEFAULT, NULL, me->totloop, uvname.c_str());
}
// activate the first uv map
- me->mtpoly = (MTexPoly *)CustomData_get_layer_n(&me->pdata, CD_MTEXPOLY, 0);
me->mloopuv = (MLoopUV *) CustomData_get_layer_n(&me->ldata, CD_MLOOPUV, 0);
}
@@ -1051,11 +1053,11 @@ void MeshImporter::optimize_material_assignements()
* which materials shall be moved to the created geometries. Also see
* optimize_material_assignements() above.
*/
-MTFace *MeshImporter::assign_material_to_geom(COLLADAFW::MaterialBinding cmaterial,
- std::map<COLLADAFW::UniqueId, Material *>& uid_material_map,
- Object *ob, const COLLADAFW::UniqueId *geom_uid,
- char *layername, MTFace *texture_face,
- std::map<Material *, TexIndexTextureArrayMap>& material_texture_mapping_map, short mat_index)
+void MeshImporter::assign_material_to_geom(
+ COLLADAFW::MaterialBinding cmaterial,
+ std::map<COLLADAFW::UniqueId, Material *>& uid_material_map,
+ Object *ob, const COLLADAFW::UniqueId *geom_uid,
+ std::map<Material *, TexIndexTextureArrayMap>& material_texture_mapping_map, short mat_index)
{
MTex *color_texture = NULL;
Mesh *me = (Mesh *)ob->data;
@@ -1065,7 +1067,7 @@ MTFace *MeshImporter::assign_material_to_geom(COLLADAFW::MaterialBinding cmateri
if (uid_material_map.find(ma_uid) == uid_material_map.end()) {
fprintf(stderr, "Cannot find material by UID.\n");
- return NULL;
+ return;
}
// first time we get geom_uid, ma_uid pair. Save for later check.
@@ -1089,15 +1091,6 @@ MTFace *MeshImporter::assign_material_to_geom(COLLADAFW::MaterialBinding cmateri
color_texture);
}
- // set texture face
- if (color_texture &&
- strlen((color_texture)->uvname) &&
- !STREQ(layername, color_texture->uvname)) {
- texture_face = (MTFace *)CustomData_get_layer_named(&me->fdata, CD_MTFACE,
- color_texture->uvname);
- strcpy(layername, color_texture->uvname);
- }
-
MaterialIdPrimitiveArrayMap& mat_prim_map = geom_uid_mat_mapping_map[*geom_uid];
COLLADAFW::MaterialId mat_id = cmaterial.getMaterialId();
@@ -1114,15 +1107,9 @@ MTFace *MeshImporter::assign_material_to_geom(COLLADAFW::MaterialBinding cmateri
for (i = 0; i < prim.totpoly; i++, mpoly++) {
mpoly->mat_nr = mat_index;
- // bind texture images to faces
- if (texture_face && color_texture) {
- texture_face->tpage = (Image *)color_texture->tex->ima;
- texture_face++;
- }
}
}
}
- return texture_face;
}
Object *MeshImporter::create_mesh_object(COLLADAFW::Node *node, COLLADAFW::InstanceGeometry *geom,
@@ -1158,7 +1145,7 @@ Object *MeshImporter::create_mesh_object(COLLADAFW::Node *node, COLLADAFW::Insta
const char *name = (id.length()) ? id.c_str() : NULL;
// add object
- Object *ob = bc_add_object(scene, OB_MESH, name);
+ Object *ob = bc_add_object(scene, view_layer, OB_MESH, name);
bc_set_mark(ob); // used later for material assignement optimization
@@ -1176,10 +1163,6 @@ Object *MeshImporter::create_mesh_object(COLLADAFW::Node *node, COLLADAFW::Insta
id_us_plus(&old_mesh->id); /* Because BKE_mesh_assign_object would have already decreased it... */
BKE_libblock_free_us(G.main, old_mesh);
- char layername[100];
- layername[0] = '\0';
- MTFace *texture_face = NULL;
-
COLLADAFW::MaterialBindingArray& mat_array =
geom->getMaterialBindings();
@@ -1187,9 +1170,9 @@ Object *MeshImporter::create_mesh_object(COLLADAFW::Node *node, COLLADAFW::Insta
for (unsigned int i = 0; i < mat_array.getCount(); i++) {
if (mat_array[i].getReferencedMaterial().isValid()) {
- texture_face = assign_material_to_geom(mat_array[i], uid_material_map, ob, geom_uid,
- layername, texture_face,
- material_texture_mapping_map, i);
+ assign_material_to_geom(
+ mat_array[i], uid_material_map, ob, geom_uid,
+ material_texture_mapping_map, i);
}
else {
fprintf(stderr, "invalid referenced material for %s\n", mat_array[i].getName().c_str());
diff --git a/source/blender/collada/MeshImporter.h b/source/blender/collada/MeshImporter.h
index d6426fbaf56..f57f57e07a7 100644
--- a/source/blender/collada/MeshImporter.h
+++ b/source/blender/collada/MeshImporter.h
@@ -92,6 +92,8 @@ private:
UnitConverter *unitconverter;
Scene *scene;
+ ViewLayer *view_layer;
+
ArmatureImporter *armature_importer;
std::map<std::string, std::string> mesh_geom_map; // needed for correct shape key naming
@@ -159,7 +161,7 @@ private:
public:
- MeshImporter(UnitConverter *unitconv, ArmatureImporter *arm, Scene *sce);
+ MeshImporter(UnitConverter *unitconv, ArmatureImporter *arm, Scene *sce, ViewLayer *view_layer);
virtual Object *get_object_by_geom_uid(const COLLADAFW::UniqueId& geom_uid);
@@ -171,11 +173,11 @@ public:
void optimize_material_assignements();
- MTFace *assign_material_to_geom(COLLADAFW::MaterialBinding cmaterial,
- std::map<COLLADAFW::UniqueId, Material*>& uid_material_map,
- Object *ob, const COLLADAFW::UniqueId *geom_uid,
- char *layername, MTFace *texture_face,
- std::map<Material*, TexIndexTextureArrayMap>& material_texture_mapping_map, short mat_index);
+ void assign_material_to_geom(
+ COLLADAFW::MaterialBinding cmaterial,
+ std::map<COLLADAFW::UniqueId, Material*>& uid_material_map,
+ Object *ob, const COLLADAFW::UniqueId *geom_uid,
+ std::map<Material*, TexIndexTextureArrayMap>& material_texture_mapping_map, short mat_index);
Object *create_mesh_object(COLLADAFW::Node *node, COLLADAFW::InstanceGeometry *geom,
diff --git a/source/blender/collada/SceneExporter.cpp b/source/blender/collada/SceneExporter.cpp
index 73945539931..c375c09d869 100644
--- a/source/blender/collada/SceneExporter.cpp
+++ b/source/blender/collada/SceneExporter.cpp
@@ -26,6 +26,7 @@
extern "C" {
#include "BLI_utildefines.h"
+ #include "BKE_group.h"
#include "BKE_object.h"
#include "BLI_listbase.h"
}
@@ -43,17 +44,17 @@ void SceneExporter::setExportTransformationType(BC_export_transformation_type tr
this->transformation_type = transformation_type;
}
-void SceneExporter::exportScene(Scene *sce)
+void SceneExporter::exportScene(const EvaluationContext *eval_ctx, Scene *sce)
{
// <library_visual_scenes> <visual_scene>
std::string id_naming = id_name(sce);
openVisualScene(translate_id(id_naming), id_naming);
- exportHierarchy(sce);
+ exportHierarchy(eval_ctx, sce);
closeVisualScene();
closeLibrary();
}
-void SceneExporter::exportHierarchy(Scene *sce)
+void SceneExporter::exportHierarchy(const EvaluationContext *eval_ctx, Scene *sce)
{
LinkNode *node;
std::vector<Object *> base_objects;
@@ -85,13 +86,13 @@ void SceneExporter::exportHierarchy(Scene *sce)
Object *ob = base_objects[index];
if (bc_is_marked(ob)) {
bc_remove_mark(ob);
- writeNodes(ob, sce);
+ writeNodes(eval_ctx, ob, sce);
}
}
}
-void SceneExporter::writeNodes(Object *ob, Scene *sce)
+void SceneExporter::writeNodes(const EvaluationContext *eval_ctx, Object *ob, Scene *sce)
{
// Add associated armature first if available
bool armature_exported = false;
@@ -100,7 +101,7 @@ void SceneExporter::writeNodes(Object *ob, Scene *sce)
armature_exported = bc_is_in_Export_set(this->export_settings->export_set, ob_arm);
if (armature_exported && bc_is_marked(ob_arm)) {
bc_remove_mark(ob_arm);
- writeNodes(ob_arm, sce);
+ writeNodes(eval_ctx, ob_arm, sce);
armature_exported = true;
}
}
@@ -151,10 +152,7 @@ void SceneExporter::writeNodes(Object *ob, Scene *sce)
COLLADASW::InstanceGeometry instGeom(mSW);
instGeom.setUrl(COLLADASW::URI(COLLADABU::Utils::EMPTY_STRING, get_geometry_id(ob, this->export_settings->use_object_instantiation)));
instGeom.setName(translate_id(id_name(ob)));
- InstanceWriter::add_material_bindings(instGeom.getBindMaterial(),
- ob,
- this->export_settings->active_uv_only,
- this->export_settings->export_texture_type);
+ InstanceWriter::add_material_bindings(instGeom.getBindMaterial(), ob, this->export_settings->active_uv_only);
instGeom.add();
}
@@ -162,7 +160,7 @@ void SceneExporter::writeNodes(Object *ob, Scene *sce)
// <instance_controller>
else if (ob->type == OB_ARMATURE) {
- arm_exporter->add_armature_bones(ob, sce, this, child_objects);
+ arm_exporter->add_armature_bones(eval_ctx, ob, sce, this, child_objects);
}
// <instance_camera>
@@ -180,12 +178,13 @@ void SceneExporter::writeNodes(Object *ob, Scene *sce)
// empty object
else if (ob->type == OB_EMPTY) { // TODO: handle groups (OB_DUPLIGROUP
if ((ob->transflag & OB_DUPLIGROUP) == OB_DUPLIGROUP && ob->dup_group) {
- GroupObject *go = NULL;
- Group *gr = ob->dup_group;
- /* printf("group detected '%s'\n", gr->id.name + 2); */
- for (go = (GroupObject *)(gr->gobject.first); go; go = go->next) {
- printf("\t%s\n", go->ob->id.name);
+ Group *group = ob->dup_group;
+ /* printf("group detected '%s'\n", group->id.name + 2); */
+ FOREACH_GROUP_OBJECT(group, object)
+ {
+ printf("\t%s\n", object->id.name);
}
+ FOREACH_GROUP_OBJECT_END
}
}
@@ -240,7 +239,7 @@ void SceneExporter::writeNodes(Object *ob, Scene *sce)
for (std::list<Object *>::iterator i = child_objects.begin(); i != child_objects.end(); ++i) {
if (bc_is_marked(*i)) {
bc_remove_mark(*i);
- writeNodes(*i, sce);
+ writeNodes(eval_ctx, *i, sce);
}
}
diff --git a/source/blender/collada/SceneExporter.h b/source/blender/collada/SceneExporter.h
index c7c15dba2cb..ded48983bd9 100644
--- a/source/blender/collada/SceneExporter.h
+++ b/source/blender/collada/SceneExporter.h
@@ -96,15 +96,15 @@ class SceneExporter: COLLADASW::LibraryVisualScenes, protected TransformWriter,
{
public:
SceneExporter(COLLADASW::StreamWriter *sw, ArmatureExporter *arm, const ExportSettings *export_settings);
- void exportScene(Scene *sce);
+ void exportScene(const struct EvaluationContext *eval_ctx, Scene *sce);
void setExportTransformationType(BC_export_transformation_type transformation_type);
private:
BC_export_transformation_type transformation_type;
// required for writeNodes() for bone-parented objects
friend class ArmatureExporter;
- void exportHierarchy(Scene *sce);
- void writeNodes(Object *ob, Scene *sce);
+ void exportHierarchy(const struct EvaluationContext *eval_ctx, Scene *sce);
+ void writeNodes(const struct EvaluationContext *eval_ctx, Object *ob, Scene *sce);
ArmatureExporter *arm_exporter;
const ExportSettings *export_settings;
diff --git a/source/blender/collada/SkinInfo.cpp b/source/blender/collada/SkinInfo.cpp
index c48c060dc95..24b47f8db3c 100644
--- a/source/blender/collada/SkinInfo.cpp
+++ b/source/blender/collada/SkinInfo.cpp
@@ -159,9 +159,9 @@ void SkinInfo::set_controller(const COLLADAFW::SkinController *co)
}
// called from write_controller
-Object *SkinInfo::create_armature(Scene *scene)
+Object *SkinInfo::create_armature(Scene *scene, ViewLayer *view_layer)
{
- ob_arm = bc_add_object(scene, OB_ARMATURE, NULL);
+ ob_arm = bc_add_object(scene, view_layer, OB_ARMATURE, NULL);
return ob_arm;
}
@@ -227,7 +227,7 @@ void SkinInfo::link_armature(bContext *C, Object *ob, std::map<COLLADAFW::Unique
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
- ModifierData *md = ED_object_modifier_add(NULL, bmain, scene, ob, NULL, eModifierType_Armature);
+ ModifierData *md = ED_object_modifier_add(NULL, bmain, scene, ob, OB_MODE_OBJECT, NULL, eModifierType_Armature);
ArmatureModifierData *amd = (ArmatureModifierData *)md;
amd->object = ob_arm;
@@ -241,9 +241,9 @@ void SkinInfo::link_armature(bContext *C, Object *ob, std::map<COLLADAFW::Unique
BKE_object_workob_calc_parent(scene, ob, &workob);
invert_m4_m4(ob->parentinv, workob.obmat);
- DAG_id_tag_update(&obn->id, OB_RECALC_OB | OB_RECALC_DATA);
+ DEG_id_tag_update(&obn->id, OB_RECALC_OB | OB_RECALC_DATA);
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
#endif
copy_m4_m4(ob->obmat, bind_shape_matrix);
diff --git a/source/blender/collada/SkinInfo.h b/source/blender/collada/SkinInfo.h
index e074f59cffc..a399bff9e3c 100644
--- a/source/blender/collada/SkinInfo.h
+++ b/source/blender/collada/SkinInfo.h
@@ -99,7 +99,7 @@ public:
void set_controller(const COLLADAFW::SkinController* co);
// called from write_controller
- Object *create_armature(Scene *scene);
+ Object *create_armature(Scene *scene, ViewLayer *view_layer);
Object* set_armature(Object *ob_arm);
diff --git a/source/blender/collada/TransformWriter.cpp b/source/blender/collada/TransformWriter.cpp
index b7eeff3b074..84817d76073 100644
--- a/source/blender/collada/TransformWriter.cpp
+++ b/source/blender/collada/TransformWriter.cpp
@@ -61,7 +61,8 @@ void TransformWriter::add_node_transform(COLLADASW::Node& node, float mat[4][4],
}
}
-void TransformWriter::add_node_transform_ob(COLLADASW::Node& node, Object *ob, BC_export_transformation_type transformation_type)
+void TransformWriter::add_node_transform_ob(COLLADASW::Node& node, Object *ob,
+ BC_export_transformation_type transformation_type)
{
#if 0
float rot[3], loc[3], scale[3];
diff --git a/source/blender/collada/TransformWriter.h b/source/blender/collada/TransformWriter.h
index 5bb13d4aac9..580430911f7 100644
--- a/source/blender/collada/TransformWriter.h
+++ b/source/blender/collada/TransformWriter.h
@@ -41,7 +41,8 @@ class TransformWriter
protected:
void add_node_transform(COLLADASW::Node& node, float mat[4][4], float parent_mat[4][4]);
- void add_node_transform_ob(COLLADASW::Node& node, Object *ob, BC_export_transformation_type transformation_type);
+ void add_node_transform_ob(COLLADASW::Node& node, Object *ob,
+ BC_export_transformation_type transformation_type);
void add_node_transform_identity(COLLADASW::Node& node);
diff --git a/source/blender/collada/collada.cpp b/source/blender/collada/collada.cpp
index 024bc4a4a5c..6c5fb0b33f3 100644
--- a/source/blender/collada/collada.cpp
+++ b/source/blender/collada/collada.cpp
@@ -67,7 +67,9 @@ int collada_import(bContext *C,
return 0;
}
-int collada_export(Scene *sce,
+int collada_export(const EvaluationContext *eval_ctx,
+ Scene *sce,
+ ViewLayer *view_layer,
const char *filepath,
int apply_modifiers,
@@ -80,7 +82,7 @@ int collada_export(Scene *sce,
int deform_bones_only,
int active_uv_only,
- BC_export_texture_type export_texture_type,
+ int include_material_textures,
int use_texture_copies,
int triangulate,
@@ -105,7 +107,7 @@ int collada_export(Scene *sce,
export_settings.deform_bones_only = deform_bones_only != 0;
export_settings.active_uv_only = active_uv_only != 0;
- export_settings.export_texture_type = export_texture_type;
+ export_settings.include_material_textures= include_material_textures != 0;
export_settings.use_texture_copies = use_texture_copies != 0;
export_settings.triangulate = triangulate != 0;
@@ -122,7 +124,7 @@ int collada_export(Scene *sce,
if (export_settings.include_children) includeFilter |= OB_REL_CHILDREN_RECURSIVE;
eObjectSet objectSet = (export_settings.selected) ? OB_SET_SELECTED : OB_SET_ALL;
- export_settings.export_set = BKE_object_relational_superset(sce, objectSet, (eObRelationTypes)includeFilter);
+ export_settings.export_set = BKE_object_relational_superset(view_layer, objectSet, (eObRelationTypes)includeFilter);
int export_count = BLI_linklist_count(export_settings.export_set);
if (export_count == 0) {
@@ -139,7 +141,7 @@ int collada_export(Scene *sce,
}
DocumentExporter exporter(&export_settings);
- int status = exporter.exportCurrentScene(sce);
+ int status = exporter.exportCurrentScene(eval_ctx, sce);
BLI_linklist_free(export_settings.export_set, NULL);
diff --git a/source/blender/collada/collada.h b/source/blender/collada/collada.h
index d31f5a8ba62..eb3964f9cb7 100644
--- a/source/blender/collada/collada.h
+++ b/source/blender/collada/collada.h
@@ -46,13 +46,10 @@ typedef enum BC_export_transformation_type {
BC_TRANSFORMATION_TYPE_TRANSROTLOC
} BC_export_transformation_type;
-typedef enum BC_export_texture_type {
- BC_TEXTURE_TYPE_MAT,
- BC_TEXTURE_TYPE_UV
-} BC_export_texture_type;
-
struct bContext;
struct Scene;
+struct ViewLayer;
+struct EvaluationContext;
/*
* both return 1 on success, 0 on error
@@ -67,7 +64,9 @@ int collada_import(struct bContext *C,
int keep_bind_info);
-int collada_export(struct Scene *sce,
+int collada_export(const struct EvaluationContext *eval_ctx,
+ struct Scene *sce,
+ struct ViewLayer *view_layer,
const char *filepath,
int apply_modifiers,
BC_export_mesh_type export_mesh_type,
@@ -79,7 +78,7 @@ int collada_export(struct Scene *sce,
int deform_bones_only,
int active_uv_only,
- BC_export_texture_type export_texture_type,
+ int include_material_textures,
int use_texture_copies,
int triangulate,
@@ -88,9 +87,9 @@ int collada_export(struct Scene *sce,
int sort_by_name,
BC_export_transformation_type export_transformation_type,
- int open_sim,
- int limit_precision,
- int keep_bind_info);
+ int open_sim,
+ int limit_precision,
+ int keep_bind_info);
#ifdef __cplusplus
}
diff --git a/source/blender/collada/collada_internal.cpp b/source/blender/collada/collada_internal.cpp
index 8974acb3460..6ebde6bd773 100644
--- a/source/blender/collada/collada_internal.cpp
+++ b/source/blender/collada/collada_internal.cpp
@@ -344,13 +344,7 @@ std::string get_camera_id(Object *ob)
std::string get_material_id(Material *mat)
{
- std::string id = id_name(mat);
- return get_material_id_from_id(id);
-}
-
-std::string get_material_id_from_id(std::string id)
-{
- return translate_id(id) + "-material";
+ return translate_id(id_name(mat)) + "-material";
}
std::string get_morph_id(Object *ob)
diff --git a/source/blender/collada/collada_internal.h b/source/blender/collada/collada_internal.h
index 5f3fa34edc1..1c7aa160f57 100644
--- a/source/blender/collada/collada_internal.h
+++ b/source/blender/collada/collada_internal.h
@@ -103,7 +103,6 @@ extern std::string get_joint_sid(Bone *bone, Object *ob_arm);
extern std::string get_camera_id(Object *ob);
extern std::string get_material_id(Material *mat);
-extern std::string get_material_id_from_id(std::string id);
extern std::string get_morph_id(Object *ob);
diff --git a/source/blender/collada/collada_utils.cpp b/source/blender/collada/collada_utils.cpp
index 37bd1a2a9c1..f351ebf7952 100644
--- a/source/blender/collada/collada_utils.cpp
+++ b/source/blender/collada/collada_utils.cpp
@@ -32,8 +32,6 @@
#include "COLLADAFWMeshPrimitive.h"
#include "COLLADAFWMeshVertexData.h"
-#include <set>
-
extern "C" {
#include "DNA_modifier_types.h"
#include "DNA_customdata_types.h"
@@ -47,9 +45,9 @@ extern "C" {
#include "BKE_context.h"
#include "BKE_customdata.h"
-#include "BKE_depsgraph.h"
#include "BKE_object.h"
#include "BKE_global.h"
+#include "BKE_layer.h"
#include "BKE_mesh.h"
#include "BKE_scene.h"
#include "BKE_DerivedMesh.h"
@@ -63,6 +61,8 @@ extern "C" {
#include "bmesh_tools.h"
}
+#include "DEG_depsgraph.h"
+
#include "collada_utils.h"
#include "ExportSettings.h"
@@ -94,6 +94,9 @@ int bc_set_parent(Object *ob, Object *par, bContext *C, bool is_parent_space)
{
Object workob;
Scene *sce = CTX_data_scene(C);
+ EvaluationContext eval_ctx;
+
+ CTX_data_eval_ctx(C, &eval_ctx);
if (!par || bc_test_parent_loop(par, ob))
return false;
@@ -106,7 +109,7 @@ int bc_set_parent(Object *ob, Object *par, bContext *C, bool is_parent_space)
if (is_parent_space) {
float mat[4][4];
// calc par->obmat
- BKE_object_where_is_calc(sce, par);
+ BKE_object_where_is_calc(&eval_ctx, sce, par);
// move child obmat into world space
mul_m4_m4m4(mat, par->obmat, ob->obmat);
@@ -117,35 +120,39 @@ int bc_set_parent(Object *ob, Object *par, bContext *C, bool is_parent_space)
BKE_object_apply_mat4(ob, ob->obmat, 0, 0);
// compute parentinv
- BKE_object_workob_calc_parent(sce, ob, &workob);
+ BKE_object_workob_calc_parent(&eval_ctx, sce, ob, &workob);
invert_m4_m4(ob->parentinv, workob.obmat);
- DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA);
- DAG_id_tag_update(&par->id, OB_RECALC_OB);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA);
+ DEG_id_tag_update(&par->id, OB_RECALC_OB);
/** done once after import */
#if 0
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
#endif
return true;
}
-Object *bc_add_object(Scene *scene, int type, const char *name)
+Object *bc_add_object(Scene *scene, ViewLayer *view_layer, int type, const char *name)
{
Object *ob = BKE_object_add_only_object(G.main, type, name);
ob->data = BKE_object_obdata_add_from_type(G.main, type, name);
ob->lay = scene->lay;
- DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+
+ LayerCollection *layer_collection = BKE_layer_collection_get_active_ensure(scene, view_layer);
+ BKE_collection_object_add(&scene->id, layer_collection->scene_collection, ob);
- BKE_scene_base_select(scene, BKE_scene_base_add(scene, ob));
+ Base *base = BKE_view_layer_base_find(view_layer, ob);
+ BKE_view_layer_base_select(view_layer, base);
return ob;
}
-Mesh *bc_get_mesh_copy(Scene *scene, Object *ob, BC_export_mesh_type export_mesh_type, bool apply_modifiers, bool triangulate)
+Mesh *bc_get_mesh_copy(const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, BC_export_mesh_type export_mesh_type, bool apply_modifiers, bool triangulate)
{
Mesh *tmpmesh;
CustomDataMask mask = CD_MASK_MESH;
@@ -155,12 +162,12 @@ Mesh *bc_get_mesh_copy(Scene *scene, Object *ob, BC_export_mesh_type export_mesh
switch (export_mesh_type) {
case BC_MESH_TYPE_VIEW:
{
- dm = mesh_create_derived_view(scene, ob, mask);
+ dm = mesh_create_derived_view(eval_ctx, scene, ob, mask);
break;
}
case BC_MESH_TYPE_RENDER:
{
- dm = mesh_create_derived_render(scene, ob, mask);
+ dm = mesh_create_derived_render(eval_ctx, scene, ob, mask);
break;
}
}
@@ -834,165 +841,3 @@ void bc_sanitize_mat(float mat[4][4], int precision)
for (int j = 0; j < 4; j++)
mat[i][j] = double_round(mat[i][j], precision);
}
-
-/*
-* Returns name of Active UV Layer or empty String if no active UV Layer defined.
-* Assuming the Object is of type MESH
-*/
-std::string bc_get_active_uvlayer_name(Object *ob)
-{
- Mesh *me = (Mesh *)ob->data;
- return bc_get_active_uvlayer_name(me);
-}
-
-/*
- * Returns name of Active UV Layer or empty String if no active UV Layer defined
- */
-std::string bc_get_active_uvlayer_name(Mesh *me)
-{
- int num_layers = CustomData_number_of_layers(&me->fdata, CD_MTFACE);
- if (num_layers) {
- char *layer_name = bc_CustomData_get_active_layer_name(&me->fdata, CD_MTFACE);
- if (layer_name) {
- return std::string(layer_name);
- }
- }
- return "";
-}
-
-/*
- * Returns UV Layer name or empty string if layer index is out of range
- */
-std::string bc_get_uvlayer_name(Mesh *me, int layer)
-{
- int num_layers = CustomData_number_of_layers(&me->fdata, CD_MTFACE);
- if (num_layers && layer < num_layers) {
- char *layer_name = bc_CustomData_get_layer_name(&me->fdata, CD_MTFACE, layer);
- if (layer_name) {
- return std::string(layer_name);
- }
- }
- return "";
-}
-
-/**********************************************************************
-*
-* Return the list of Mesh objects with assigned UVtextures and Images
-* Note: We need to create artificaial materials for each of them
-*
-***********************************************************************/
-std::set<Object *> bc_getUVTexturedObjects(Scene *sce, bool all_uv_layers)
-{
- std::set <Object *> UVObjects;
- Base *base = (Base *)sce->base.first;
-
- while (base) {
- Object *ob = base->object;
- bool has_uvimage = false;
- if (ob->type == OB_MESH) {
- Mesh *me = (Mesh *)ob->data;
- int active_uv_layer = CustomData_get_active_layer_index(&me->pdata, CD_MTEXPOLY);
-
- for (int i = 0; i < me->pdata.totlayer && !has_uvimage; i++) {
- if (all_uv_layers || active_uv_layer == i)
- {
- if (me->pdata.layers[i].type == CD_MTEXPOLY) {
- MTexPoly *txface = (MTexPoly *)me->pdata.layers[i].data;
- MPoly *mpoly = me->mpoly;
- for (int j = 0; j < me->totpoly; j++, mpoly++, txface++) {
-
- Image *ima = txface->tpage;
- if (ima != NULL) {
- has_uvimage = true;
- break;
- }
- }
- }
- }
- }
-
- if (has_uvimage) {
- UVObjects.insert(ob);
- }
- }
- base = base->next;
- }
- return UVObjects;
-}
-
-/**********************************************************************
-*
-* Return the list of UV Texture images from all exported Mesh Items
-* Note: We need to create one artificial material for each Image.
-*
-***********************************************************************/
-std::set<Image *> bc_getUVImages(Scene *sce, bool all_uv_layers)
-{
- std::set <Image *> UVImages;
- Base *base = (Base *)sce->base.first;
-
- while (base) {
- Object *ob = base->object;
- bool has_uvimage = false;
- if (ob->type == OB_MESH) {
- Mesh *me = (Mesh *)ob->data;
- int active_uv_layer = CustomData_get_active_layer_index(&me->pdata, CD_MTEXPOLY);
-
- for (int i = 0; i < me->pdata.totlayer && !has_uvimage; i++) {
- if (all_uv_layers || active_uv_layer == i)
- {
- if (me->pdata.layers[i].type == CD_MTEXPOLY) {
- MTexPoly *txface = (MTexPoly *)me->pdata.layers[i].data;
- MPoly *mpoly = me->mpoly;
- for (int j = 0; j < me->totpoly; j++, mpoly++, txface++) {
-
- Image *ima = txface->tpage;
- if (ima != NULL) {
- if (UVImages.find(ima) == UVImages.end())
- UVImages.insert(ima);
- }
- }
- }
- }
- }
- }
- base = base->next;
- }
- return UVImages;
-}
-
-/**********************************************************************
-*
-* Return the list of UV Texture images for the given Object
-* Note: We need to create one artificial material for each Image.
-*
-***********************************************************************/
-std::set<Image *> bc_getUVImages(Object *ob, bool all_uv_layers)
-{
- std::set <Image *> UVImages;
-
- bool has_uvimage = false;
- if (ob->type == OB_MESH) {
- Mesh *me = (Mesh *)ob->data;
- int active_uv_layer = CustomData_get_active_layer_index(&me->pdata, CD_MTEXPOLY);
-
- for (int i = 0; i < me->pdata.totlayer && !has_uvimage; i++) {
- if (all_uv_layers || active_uv_layer == i)
- {
- if (me->pdata.layers[i].type == CD_MTEXPOLY) {
- MTexPoly *txface = (MTexPoly *)me->pdata.layers[i].data;
- MPoly *mpoly = me->mpoly;
- for (int j = 0; j < me->totpoly; j++, mpoly++, txface++) {
-
- Image *ima = txface->tpage;
- if (ima != NULL) {
- if (UVImages.find(ima) == UVImages.end())
- UVImages.insert(ima);
- }
- }
- }
- }
- }
- }
- return UVImages;
-} \ No newline at end of file
diff --git a/source/blender/collada/collada_utils.h b/source/blender/collada/collada_utils.h
index 93741fb0e70..5d6e836b9c3 100644
--- a/source/blender/collada/collada_utils.h
+++ b/source/blender/collada/collada_utils.h
@@ -34,7 +34,6 @@
#include <vector>
#include <map>
-#include <set>
#include <algorithm>
extern "C" {
@@ -61,13 +60,15 @@ extern "C" {
#include "ExportSettings.h"
#include "collada_internal.h"
+struct EvaluationContext;
+
typedef std::map<COLLADAFW::TextureMapId, std::vector<MTex *> > TexIndexTextureArrayMap;
extern float bc_get_float_value(const COLLADAFW::FloatOrDoubleArray& array, unsigned int index);
extern int bc_test_parent_loop(Object *par, Object *ob);
extern int bc_set_parent(Object *ob, Object *par, bContext *C, bool is_parent_space = true);
-extern Object *bc_add_object(Scene *scene, int type, const char *name);
-extern Mesh *bc_get_mesh_copy(Scene *scene, Object *ob, BC_export_mesh_type export_mesh_type, bool apply_modifiers, bool triangulate);
+extern Object *bc_add_object(Scene *scene, ViewLayer *view_layer, int type, const char *name);
+extern Mesh *bc_get_mesh_copy(const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, BC_export_mesh_type export_mesh_type, bool apply_modifiers, bool triangulate);
extern Object *bc_get_assigned_armature(Object *ob);
extern Object *bc_get_highest_selected_ancestor_or_self(LinkNode *export_set, Object *ob);
@@ -110,14 +111,6 @@ extern bool bc_get_property_matrix(Bone *bone, std::string key, float mat[4][4])
extern void bc_create_restpose_mat(const ExportSettings *export_settings, Bone *bone, float to_mat[4][4], float world[4][4], bool use_local_space);
-extern std::string bc_get_active_uvlayer_name(Object *ob);
-extern std::string bc_get_active_uvlayer_name(Mesh *me);
-extern std::string bc_get_uvlayer_name(Mesh *me, int layer);
-
-extern std::set<Image *> bc_getUVImages(Scene *sce, bool all_uv_layers);
-extern std::set<Image *> bc_getUVImages(Object *ob, bool all_uv_layers);
-extern std::set<Object *> bc_getUVTexturedObjects(Scene *sce, bool all_uv_layers);
-
class BCPolygonNormalsIndices
{
std::vector<unsigned int> normal_indices;
diff --git a/source/blender/compositor/nodes/COM_RenderLayersNode.cpp b/source/blender/compositor/nodes/COM_RenderLayersNode.cpp
index 2286db81860..e16aca3fdee 100644
--- a/source/blender/compositor/nodes/COM_RenderLayersNode.cpp
+++ b/source/blender/compositor/nodes/COM_RenderLayersNode.cpp
@@ -65,12 +65,12 @@ void RenderLayersNode::testRenderLink(NodeConverter &converter,
missingRenderLink(converter);
return;
}
- SceneRenderLayer *srl = (SceneRenderLayer *)BLI_findlink(&scene->r.layers, layerId);
- if (srl == NULL) {
+ ViewLayer *view_layer = (ViewLayer *)BLI_findlink(&scene->view_layers, layerId);
+ if (view_layer == NULL) {
missingRenderLink(converter);
return;
}
- RenderLayer *rl = RE_GetRenderLayer(rr, srl->name);
+ RenderLayer *rl = RE_GetRenderLayer(rr, view_layer->name);
if (rl == NULL) {
missingRenderLink(converter);
return;
diff --git a/source/blender/compositor/operations/COM_RenderLayersProg.cpp b/source/blender/compositor/operations/COM_RenderLayersProg.cpp
index d1c654ddb6c..a5e2d275e4f 100644
--- a/source/blender/compositor/operations/COM_RenderLayersProg.cpp
+++ b/source/blender/compositor/operations/COM_RenderLayersProg.cpp
@@ -55,10 +55,10 @@ void RenderLayersProg::initExecution()
rr = RE_AcquireResultRead(re);
if (rr) {
- SceneRenderLayer *srl = (SceneRenderLayer *)BLI_findlink(&scene->r.layers, getLayerId());
- if (srl) {
+ ViewLayer *view_layer = (ViewLayer *)BLI_findlink(&scene->view_layers, getLayerId());
+ if (view_layer) {
- RenderLayer *rl = RE_GetRenderLayer(rr, srl->name);
+ RenderLayer *rl = RE_GetRenderLayer(rr, view_layer->name);
if (rl) {
this->m_inputBuffer = RE_RenderLayerGetPass(rl, this->m_passName.c_str(), this->m_viewName);
}
@@ -189,9 +189,9 @@ void RenderLayersProg::determineResolution(unsigned int resolution[2], unsigned
rr = RE_AcquireResultRead(re);
if (rr) {
- SceneRenderLayer *srl = (SceneRenderLayer *)BLI_findlink(&sce->r.layers, getLayerId());
- if (srl) {
- RenderLayer *rl = RE_GetRenderLayer(rr, srl->name);
+ ViewLayer *view_layer = (ViewLayer *)BLI_findlink(&sce->view_layers, getLayerId());
+ if (view_layer) {
+ RenderLayer *rl = RE_GetRenderLayer(rr, view_layer->name);
if (rl) {
resolution[0] = rl->rectx;
resolution[1] = rl->recty;
diff --git a/source/blender/depsgraph/CMakeLists.txt b/source/blender/depsgraph/CMakeLists.txt
index af2c2ecb67f..c42d06bd0a2 100644
--- a/source/blender/depsgraph/CMakeLists.txt
+++ b/source/blender/depsgraph/CMakeLists.txt
@@ -43,17 +43,20 @@ set(SRC
intern/builder/deg_builder.cc
intern/builder/deg_builder_cycle.cc
intern/builder/deg_builder_nodes.cc
+ intern/builder/deg_builder_nodes_layer_collection.cc
intern/builder/deg_builder_nodes_rig.cc
- intern/builder/deg_builder_nodes_scene.cc
+ intern/builder/deg_builder_nodes_view_layer.cc
intern/builder/deg_builder_pchanmap.cc
intern/builder/deg_builder_relations.cc
intern/builder/deg_builder_relations_keys.cc
+ intern/builder/deg_builder_relations_layer_collection.cc
intern/builder/deg_builder_relations_rig.cc
- intern/builder/deg_builder_relations_scene.cc
+ intern/builder/deg_builder_relations_view_layer.cc
intern/builder/deg_builder_transitive.cc
intern/debug/deg_debug_relations_graphviz.cc
intern/debug/deg_debug_stats_gnuplot.cc
intern/eval/deg_eval.cc
+ intern/eval/deg_eval_copy_on_write.cc
intern/eval/deg_eval_flush.cc
intern/eval/deg_eval_stats.cc
intern/nodes/deg_node.cc
@@ -67,6 +70,7 @@ set(SRC
intern/depsgraph_eval.cc
intern/depsgraph_query.cc
intern/depsgraph_query_foreach.cc
+ intern/depsgraph_query_iter.cc
intern/depsgraph_tag.cc
intern/depsgraph_type_defines.cc
@@ -83,6 +87,7 @@ set(SRC
intern/builder/deg_builder_relations_impl.h
intern/builder/deg_builder_transitive.h
intern/eval/deg_eval.h
+ intern/eval/deg_eval_copy_on_write.h
intern/eval/deg_eval_flush.h
intern/eval/deg_eval_stats.h
intern/nodes/deg_node.h
@@ -120,10 +125,6 @@ else()
endif()
endif()
-if(WITH_LEGACY_DEPSGRAPH)
- add_definitions(-DWITH_LEGACY_DEPSGRAPH)
-endif()
-
if(WITH_BOOST)
list(APPEND INC_SYS
${BOOST_INCLUDE_DIR}
diff --git a/source/blender/depsgraph/DEG_depsgraph.h b/source/blender/depsgraph/DEG_depsgraph.h
index 0837f147275..8110899048d 100644
--- a/source/blender/depsgraph/DEG_depsgraph.h
+++ b/source/blender/depsgraph/DEG_depsgraph.h
@@ -65,14 +65,52 @@ struct Main;
struct PointerRNA;
struct PropertyRNA;
+struct RenderEngineType;
+struct Scene;
+struct ViewLayer;
+
+typedef enum eEvaluationMode {
+ DAG_EVAL_VIEWPORT = 0, /* evaluate for OpenGL viewport */
+ DAG_EVAL_PREVIEW = 1, /* evaluate for render with preview settings */
+ DAG_EVAL_RENDER = 2, /* evaluate for render purposes */
+} eEvaluationMode;
+
+#include "DNA_object_enums.h"
+
+/* Dependency graph evaluation context
+ *
+ * This structure stores all the local dependency graph data,
+ * which is needed for it's evaluation,
+ */
+typedef struct EvaluationContext {
+ eEvaluationMode mode;
+ float ctime;
+ eObjectMode object_mode;
+
+ struct Depsgraph *depsgraph;
+ struct ViewLayer *view_layer;
+ struct RenderEngineType *engine_type;
+} EvaluationContext;
+
+/* DagNode->eval_flags */
+enum {
+ /* Regardless to curve->path animation flag path is to be evaluated anyway,
+ * to meet dependencies with such a things as curve modifier and other guys
+ * who're using curve deform, where_on_path and so.
+ */
+ DAG_EVAL_NEED_CURVE_PATH = 1,
+ /* Scene evaluation would need to have object's data on CPU,
+ * meaning no GPU shortcuts is allowed.
+ */
+ DAG_EVAL_NEED_CPU = 2,
+};
#ifdef __cplusplus
extern "C" {
#endif
-bool DEG_depsgraph_use_legacy(void);
-void DEG_depsgraph_switch_to_legacy(void);
-void DEG_depsgraph_switch_to_new(void);
+bool DEG_depsgraph_use_copy_on_write(void);
+void DEG_depsgraph_enable_copy_on_write(void);
/* ************************************************ */
/* Depsgraph API */
@@ -98,47 +136,70 @@ void DEG_free_node_types(void);
/* Update Tagging -------------------------------- */
-/* Tag node(s) associated with states such as time and visibility */
-void DEG_scene_update_flags(Depsgraph *graph, const bool do_time);
-
/* Update dependency graph when visible scenes/layers changes. */
-void DEG_graph_on_visible_update(struct Main *bmain, struct Scene *scene);
+void DEG_graph_on_visible_update(struct Main *bmain, Depsgraph *depsgraph);
/* Update all dependency graphs when visible scenes/layers changes. */
void DEG_on_visible_update(struct Main *bmain, const bool do_time);
-/* Tag node(s) associated with changed data for later updates */
-void DEG_graph_id_tag_update(struct Main *bmain,
- Depsgraph *graph,
- struct ID *id);
-
/* Tag given ID for an update in all the dependency graphs. */
-void DEG_id_tag_update(struct ID *id, short flag);
-void DEG_id_tag_update_ex(struct Main *bmain,
- struct ID *id,
- short flag);
+typedef enum eDepsgraph_Tag {
+ /* Object transformation changed, corresponds to OB_RECALC_OB. */
+ DEG_TAG_TRANSFORM = (1 << 0),
+ /* Object geometry changed, corresponds to OB_RECALC_DATA. */
+ DEG_TAG_GEOMETRY = (1 << 1),
+ /* Time changed and animation is to be re-evaluated, OB_RECALC_TIME. */
+ DEG_TAG_TIME = (1 << 2),
+ /* Particle system changed. */
+ DEG_TAG_PSYS_REDO = (1 << 3),
+ DEG_TAG_PSYS_RESET = (1 << 4),
+ DEG_TAG_PSYS_TYPE = (1 << 5),
+ DEG_TAG_PSYS_CHILD = (1 << 6),
+ DEG_TAG_PSYS_PHYS = (1 << 7),
+ DEG_TAG_PSYS_ALL = (DEG_TAG_PSYS_REDO |
+ DEG_TAG_PSYS_RESET |
+ DEG_TAG_PSYS_TYPE |
+ DEG_TAG_PSYS_CHILD |
+ DEG_TAG_PSYS_PHYS),
+ /* Update copy on write component without flushing down the road. */
+ DEG_TAG_COPY_ON_WRITE = (1 << 8),
+ /* Tag shading components for update.
+ * Only parameters of material changed).
+ */
+ DEG_TAG_SHADING_UPDATE = (1 << 9),
+ DEG_TAG_SELECT_UPDATE = (1 << 10),
+ DEG_TAG_BASE_FLAGS_UPDATE = (1 << 11),
+ /* Only inform editors about the change. Don't modify datablock itself. */
+ DEG_TAG_EDITORS_UPDATE = (1 << 12),
+} eDepsgraph_Tag;
+void DEG_id_tag_update(struct ID *id, int flag);
+void DEG_id_tag_update_ex(struct Main *bmain, struct ID *id, int flag);
+
+void DEG_graph_id_tag_update(struct Main *bmain,
+ struct Depsgraph *depsgraph,
+ struct ID *id,
+ int flag);
/* Mark a particular datablock type as having changing. This does
* not cause any updates but is used by external render engines to detect if for
* example a datablock was removed.
*/
-void DEG_id_type_tag(struct Main *bmain, short idtype);
+void DEG_id_type_tag(struct Main *bmain, short id_type);
void DEG_ids_clear_recalc(struct Main *bmain);
/* Update Flushing ------------------------------- */
-/* Flush updates for all IDs */
-void DEG_ids_flush_tagged(struct Main *bmain);
-
/* Flush updates for IDs in a single scene. */
-void DEG_scene_flush_update(struct Main *bmain, struct Scene *scene);
+void DEG_graph_flush_update(struct Main *bmain, Depsgraph *depsgraph);
/* Check if something was changed in the database and inform
* editors about this.
*/
void DEG_ids_check_recalc(struct Main *bmain,
+ struct Depsgraph *depsgraph,
struct Scene *scene,
+ struct ViewLayer *view_layer,
bool time);
/* ************************************************ */
@@ -147,13 +208,21 @@ void DEG_ids_check_recalc(struct Main *bmain,
/* Evaluation Context ---------------------------- */
/* Create new evaluation context. */
-struct EvaluationContext *DEG_evaluation_context_new(int mode);
+struct EvaluationContext *DEG_evaluation_context_new(eEvaluationMode mode);
/* Initialize evaluation context.
* Used by the areas which currently overrides the context or doesn't have
* access to a proper one.
*/
-void DEG_evaluation_context_init(struct EvaluationContext *eval_ctx, int mode);
+void DEG_evaluation_context_init(struct EvaluationContext *eval_ctx,
+ eEvaluationMode mode);
+void DEG_evaluation_context_init_from_scene(
+ struct EvaluationContext *eval_ctx,
+ struct Scene *scene,
+ struct ViewLayer *view_layer,
+ struct RenderEngineType *engine_type,
+ const eObjectMode object_mode,
+ eEvaluationMode mode);
/* Free evaluation context. */
void DEG_evaluation_context_free(struct EvaluationContext *eval_ctx);
@@ -167,23 +236,13 @@ void DEG_evaluation_context_free(struct EvaluationContext *eval_ctx);
void DEG_evaluate_on_framechange(struct EvaluationContext *eval_ctx,
struct Main *bmain,
Depsgraph *graph,
- float ctime,
- const unsigned int layer);
-
-/* Data changed recalculation entry point.
- * < context_type: context to perform evaluation for
- * < layers: visible layers bitmask to update the graph for
- */
-void DEG_evaluate_on_refresh_ex(struct EvaluationContext *eval_ctx,
- Depsgraph *graph,
- const unsigned int layers);
+ float ctime);
/* Data changed recalculation entry point.
* < context_type: context to perform evaluation for
*/
void DEG_evaluate_on_refresh(struct EvaluationContext *eval_ctx,
- Depsgraph *graph,
- struct Scene *scene);
+ Depsgraph *graph);
bool DEG_needs_eval(Depsgraph *graph);
@@ -193,20 +252,22 @@ bool DEG_needs_eval(Depsgraph *graph);
* to do their own updates based on changes.
*/
-typedef void (*DEG_EditorUpdateIDCb)(struct Main *bmain, struct ID *id);
-typedef void (*DEG_EditorUpdateSceneCb)(struct Main *bmain,
- struct Scene *scene,
- int updated);
-typedef void (*DEG_EditorUpdateScenePreCb)(struct Main *bmain,
- struct Scene *scene,
- bool time);
+typedef struct DEGEditorUpdateContext {
+ struct Main *bmain;
+ struct Depsgraph *depsgraph;
+ struct Scene *scene;
+ struct ViewLayer *view_layer;
+} DEGEditorUpdateContext;
+
+typedef void (*DEG_EditorUpdateIDCb)(
+ const DEGEditorUpdateContext *update_ctx,
+ struct ID *id);
+typedef void (*DEG_EditorUpdateSceneCb)(
+ const DEGEditorUpdateContext *update_ctx, int updated);
/* Set callbacks which are being called when depsgraph changes. */
void DEG_editors_set_update_cb(DEG_EditorUpdateIDCb id_func,
- DEG_EditorUpdateSceneCb scene_func,
- DEG_EditorUpdateScenePreCb scene_pre_func);
-
-void DEG_editors_update_pre(struct Main *bmain, struct Scene *scene, bool time);
+ DEG_EditorUpdateSceneCb scene_func);
#ifdef __cplusplus
} /* extern "C" */
diff --git a/source/blender/depsgraph/DEG_depsgraph_build.h b/source/blender/depsgraph/DEG_depsgraph_build.h
index b268822f659..334b15cc638 100644
--- a/source/blender/depsgraph/DEG_depsgraph_build.h
+++ b/source/blender/depsgraph/DEG_depsgraph_build.h
@@ -40,12 +40,15 @@ struct Depsgraph;
/* ------------------------------------------------ */
-struct Main;
-struct Scene;
-struct Group;
+struct CacheFile;
struct EffectorWeights;
+struct EvaluationContext;
+struct Group;
+struct Main;
struct ModifierData;
struct Object;
+struct Scene;
+struct ViewLayer;
#ifdef __cplusplus
extern "C" {
@@ -56,28 +59,23 @@ extern "C" {
/* Build depsgraph for the given scene, and dump results in given
* graph container.
*/
-void DEG_graph_build_from_scene(struct Depsgraph *graph,
- struct Main *bmain,
- struct Scene *scene);
+void DEG_graph_build_from_view_layer(struct Depsgraph *graph,
+ struct Main *bmain,
+ struct Scene *scene,
+ struct ViewLayer *view_layer);
/* Tag relations from the given graph for update. */
void DEG_graph_tag_relations_update(struct Depsgraph *graph);
+/* Create or update relations in the specified graph. */
+void DEG_graph_relations_update(struct Depsgraph *graph,
+ struct Main *bmain,
+ struct Scene *scene,
+ struct ViewLayer *view_layer);
+
/* Tag all relations in the database for update.*/
void DEG_relations_tag_update(struct Main *bmain);
-/* Create new graph if didn't exist yet,
- * or update relations if graph was tagged for update.
- */
-void DEG_scene_relations_update(struct Main *bmain, struct Scene *scene);
-
-/* Rebuild dependency graph only for a given scene. */
-void DEG_scene_relations_rebuild(struct Main *bmain,
- struct Scene *scene);
-
-/* Delete scene graph. */
-void DEG_scene_graph_free(struct Scene *scene);
-
/* Add Dependencies ----------------------------- */
/* Handle for components to define their dependencies from callbacks.
@@ -87,9 +85,6 @@ void DEG_scene_graph_free(struct Scene *scene);
*/
struct DepsNodeHandle;
-struct CacheFile;
-struct Object;
-
typedef enum eDepsSceneComponentType {
/* Parameters Component - Default when nothing else fits
* (i.e. just SDNA property setting).
@@ -166,7 +161,6 @@ void DEG_add_collision_relations(struct DepsNodeHandle *handle,
struct Scene *scene,
struct Object *object,
struct Group *group,
- int layer,
unsigned int modifier_type,
DEG_CollobjFilterFunction fn,
bool dupli,
diff --git a/source/blender/depsgraph/DEG_depsgraph_debug.h b/source/blender/depsgraph/DEG_depsgraph_debug.h
index bc93fcc94cb..363749dab26 100644
--- a/source/blender/depsgraph/DEG_depsgraph_debug.h
+++ b/source/blender/depsgraph/DEG_depsgraph_debug.h
@@ -40,6 +40,8 @@ extern "C" {
#endif
struct Depsgraph;
+struct Scene;
+struct ViewLayer;
/* ------------------------------------------------ */
@@ -67,9 +69,10 @@ bool DEG_debug_compare(const struct Depsgraph *graph1,
const struct Depsgraph *graph2);
/* Check that dependnecies in the graph are really up to date. */
-bool DEG_debug_scene_relations_validate(struct Main *bmain,
- struct Scene *scene);
-
+bool DEG_debug_graph_relations_validate(struct Depsgraph *graph,
+ struct Main *bmain,
+ struct Scene *scene,
+ struct ViewLayer *view_layer);
/* Perform consistency check on the graph. */
bool DEG_debug_consistency_check(struct Depsgraph *graph);
diff --git a/source/blender/depsgraph/DEG_depsgraph_query.h b/source/blender/depsgraph/DEG_depsgraph_query.h
index f8cfb407831..fffdccf3efc 100644
--- a/source/blender/depsgraph/DEG_depsgraph_query.h
+++ b/source/blender/depsgraph/DEG_depsgraph_query.h
@@ -33,19 +33,126 @@
#ifndef __DEG_DEPSGRAPH_QUERY_H__
#define __DEG_DEPSGRAPH_QUERY_H__
+#include "DEG_depsgraph.h"
+
struct ID;
+struct Base;
+struct BLI_Iterator;
struct Depsgraph;
+struct DupliObject;
+struct ListBase;
+struct Scene;
+struct ViewLayer;
#ifdef __cplusplus
extern "C" {
#endif
/* Check if given ID type was tagged for update. */
-bool DEG_id_type_tagged(struct Main *bmain, short idtype);
+bool DEG_id_type_tagged(struct Main *bmain, short id_type);
/* Get additional evaluation flags for the given ID. */
-short DEG_get_eval_flags_for_id(struct Depsgraph *graph, struct ID *id);
+short DEG_get_eval_flags_for_id(const struct Depsgraph *graph, struct ID *id);
+
+/* Get scene the despgraph is created for. */
+struct Scene *DEG_get_evaluated_scene(const struct Depsgraph *graph);
+
+/* Get scene layer the despgraph is created for. */
+struct ViewLayer *DEG_get_evaluated_view_layer(const struct Depsgraph *graph);
+
+/* Get evaluated version of object for given original one. */
+struct Object *DEG_get_evaluated_object(const struct Depsgraph *depsgraph,
+ struct Object *object);
+
+/* Get evaluated version of given ID datablock. */
+struct ID *DEG_get_evaluated_id(const struct Depsgraph *depsgraph,
+ struct ID *id);
+
+/* ************************ DEG iterators ********************* */
+
+enum {
+ DEG_ITER_OBJECT_FLAG_LINKED_DIRECTLY = (1 << 0),
+ DEG_ITER_OBJECT_FLAG_LINKED_INDIRECTLY = (1 << 1),
+ DEG_ITER_OBJECT_FLAG_LINKED_VIA_SET = (1 << 2),
+ DEG_ITER_OBJECT_FLAG_VISIBLE = (1 << 3),
+ DEG_ITER_OBJECT_FLAG_DUPLI = (1 << 4),
+};
+
+typedef enum eDepsObjectIteratorMode {
+ DEG_ITER_OBJECT_MODE_VIEWPORT = 0,
+ DEG_ITER_OBJECT_MODE_RENDER = 1,
+} eDepsObjectIteratorMode;
+
+typedef struct DEGObjectIterData {
+ struct Depsgraph *graph;
+ struct Scene *scene;
+ struct EvaluationContext eval_ctx;
+
+ int flag;
+ eDepsObjectIteratorMode mode;
+ int visibility_check; /* eObjectVisibilityCheck. */
+
+ /* **** Iteration over dupli-list. *** */
+
+ /* Object which created the dupli-list. */
+ struct Object *dupli_parent;
+ /* List of duplicated objects. */
+ struct ListBase *dupli_list;
+ /* Next duplicated object to step into. */
+ struct DupliObject *dupli_object_next;
+ /* Corresponds to current object: current iterator object is evaluated from
+ * this duplicated object.
+ */
+ struct DupliObject *dupli_object_current;
+ /* Temporary storage to report fully populated DNA to the render engine or
+ * other users of the iterator.
+ */
+ struct Object temp_dupli_object;
+
+ /* **** Iteration ober ID nodes **** */
+ size_t id_node_index;
+ size_t num_id_nodes;
+} DEGObjectIterData;
+
+void DEG_iterator_objects_begin(struct BLI_Iterator *iter, DEGObjectIterData *data);
+void DEG_iterator_objects_next(struct BLI_Iterator *iter);
+void DEG_iterator_objects_end(struct BLI_Iterator *iter);
+
+/**
+ * Note: Be careful with DEG_ITER_OBJECT_FLAG_LINKED_INDIRECTLY objects.
+ * Although they are available they have no overrides (collection_properties)
+ * and will crash if you try to access it.
+ */
+#define DEG_OBJECT_ITER(graph_, instance_, mode_, flag_) \
+ { \
+ DEGObjectIterData data_ = { \
+ .graph = (graph_), \
+ .mode = (mode_), \
+ .flag = (flag_), \
+ }; \
+ \
+ ITER_BEGIN(DEG_iterator_objects_begin, \
+ DEG_iterator_objects_next, \
+ DEG_iterator_objects_end, \
+ &data_, Object *, instance_)
+
+#define DEG_OBJECT_ITER_END \
+ ITER_END \
+ }
+
+/**
+ * Depsgraph objects iterator for draw manager and final render
+ */
+#define DEG_OBJECT_ITER_FOR_RENDER_ENGINE(graph_, instance_, mode_) \
+ DEG_OBJECT_ITER(graph_, instance_, mode_, \
+ DEG_ITER_OBJECT_FLAG_LINKED_DIRECTLY | \
+ DEG_ITER_OBJECT_FLAG_LINKED_VIA_SET | \
+ DEG_ITER_OBJECT_FLAG_VISIBLE | \
+ DEG_ITER_OBJECT_FLAG_DUPLI)
+
+#define DEG_OBJECT_ITER_FOR_RENDER_ENGINE_END \
+ DEG_OBJECT_ITER_END
/* ************************ DEG traversal ********************* */
diff --git a/source/blender/depsgraph/intern/builder/deg_builder.cc b/source/blender/depsgraph/intern/builder/deg_builder.cc
index 5713297d658..2fcad233044 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder.cc
@@ -30,142 +30,38 @@
#include "intern/builder/deg_builder.h"
-#include "DNA_anim_types.h"
#include "DNA_object_types.h"
#include "DNA_ID.h"
-#include "BLI_utildefines.h"
-#include "BLI_ghash.h"
-#include "BLI_stack.h"
-
#include "intern/depsgraph.h"
#include "intern/depsgraph_types.h"
#include "intern/nodes/deg_node.h"
-#include "intern/nodes/deg_node_component.h"
#include "intern/nodes/deg_node_id.h"
-#include "intern/nodes/deg_node_operation.h"
#include "util/deg_util_foreach.h"
-#include <cstdio>
+#include "DEG_depsgraph.h"
namespace DEG {
-static bool check_object_needs_evaluation(Object *object)
+void deg_graph_build_finalize(Main *bmain, Depsgraph *graph)
{
- if (object->recalc & OB_RECALC_ALL) {
- /* Object is tagged for update anyway, no need to re-tag it. */
- return false;
- }
- if (object->type == OB_MESH) {
- return object->derivedFinal == NULL;
- }
- else if (ELEM(object->type,
- OB_CURVE, OB_SURF, OB_FONT, OB_MBALL, OB_LATTICE))
- {
- return object->curve_cache == NULL;
- }
- return false;
-}
-
-void deg_graph_build_flush_layers(Depsgraph *graph)
-{
- BLI_Stack *stack = BLI_stack_new(sizeof(OperationDepsNode *),
- "DEG flush layers stack");
- foreach (OperationDepsNode *node, graph->operations) {
- IDDepsNode *id_node = node->owner->owner;
- node->done = 0;
- node->num_links_pending = 0;
- foreach (DepsRelation *rel, node->outlinks) {
- if ((rel->from->type == DEG_NODE_TYPE_OPERATION) &&
- (rel->flag & DEPSREL_FLAG_CYCLIC) == 0)
- {
- ++node->num_links_pending;
- }
- }
- if (node->num_links_pending == 0) {
- BLI_stack_push(stack, &node);
- node->done = 1;
- }
- node->owner->layers = id_node->layers;
- id_node->id->tag |= LIB_TAG_DOIT;
- }
- while (!BLI_stack_is_empty(stack)) {
- OperationDepsNode *node;
- BLI_stack_pop(stack, &node);
- /* Flush layers to parents. */
- foreach (DepsRelation *rel, node->inlinks) {
- if (rel->from->type == DEG_NODE_TYPE_OPERATION) {
- OperationDepsNode *from = (OperationDepsNode *)rel->from;
- from->owner->layers |= node->owner->layers;
- }
- }
- /* Schedule parent nodes. */
- foreach (DepsRelation *rel, node->inlinks) {
- if (rel->from->type == DEG_NODE_TYPE_OPERATION) {
- OperationDepsNode *from = (OperationDepsNode *)rel->from;
- if ((rel->flag & DEPSREL_FLAG_CYCLIC) == 0) {
- BLI_assert(from->num_links_pending > 0);
- --from->num_links_pending;
- }
- if (from->num_links_pending == 0 && from->done == 0) {
- BLI_stack_push(stack, &from);
- from->done = 1;
- }
- }
- }
- }
- BLI_stack_free(stack);
-}
-
-void deg_graph_build_finalize(Depsgraph *graph)
-{
- /* STEP 1: Make sure new invisible dependencies are ready for use.
- *
- * TODO(sergey): This might do a bit of extra tagging, but it's kinda nice
- * to do it ahead of a time and don't spend time on flushing updates on
- * every frame change.
- */
- foreach (IDDepsNode *id_node, graph->id_nodes) {
- if (id_node->layers == 0) {
- ID *id = id_node->id;
- if (GS(id->name) == ID_OB) {
- Object *object = (Object *)id;
- if (check_object_needs_evaluation(object)) {
- id_node->tag_update(graph);
- }
- }
- }
- }
- /* STEP 2: Flush visibility layers from children to parent. */
- deg_graph_build_flush_layers(graph);
- /* STEP 3: Re-tag IDs for update if it was tagged before the relations
+ const bool use_copy_on_write = DEG_depsgraph_use_copy_on_write();
+ /* Re-tag IDs for update if it was tagged before the relations
* update tag.
*/
foreach (IDDepsNode *id_node, graph->id_nodes) {
- GHASH_FOREACH_BEGIN(ComponentDepsNode *, comp, id_node->components)
- {
- id_node->layers |= comp->layers;
+ ID *id = id_node->id_orig;
+ id_node->finalize_build(graph);
+ if ((id->recalc & ID_RECALC_ALL)) {
+ id_node->tag_update(graph);
}
- GHASH_FOREACH_END();
-
- if ((id_node->layers & graph->layers) != 0 || graph->layers == 0) {
- ID *id = id_node->id;
- if ((id->recalc & ID_RECALC_ALL) &&
- (id->tag & LIB_TAG_DOIT))
- {
- id_node->tag_update(graph);
- id->tag &= ~LIB_TAG_DOIT;
- }
- else if (GS(id->name) == ID_OB) {
- Object *object = (Object *)id;
- if (object->recalc & OB_RECALC_ALL) {
- id_node->tag_update(graph);
- id->tag &= ~LIB_TAG_DOIT;
- }
- }
+ /* TODO(sergey): This is not ideal at all, since this forces
+ * re-evaluaiton of the whole tree.
+ */
+ if (use_copy_on_write) {
+ DEG_id_tag_update_ex(bmain, id_node->id_orig, DEG_TAG_COPY_ON_WRITE);
}
- id_node->finalize_build();
}
}
diff --git a/source/blender/depsgraph/intern/builder/deg_builder.h b/source/blender/depsgraph/intern/builder/deg_builder.h
index b8ea8c8e599..c7ff668504c 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder.h
@@ -30,15 +30,12 @@
#pragma once
-#include "intern/depsgraph_types.h"
-
-struct FCurve;
+struct Main;
namespace DEG {
struct Depsgraph;
-void deg_graph_build_finalize(struct Depsgraph *graph);
-void deg_graph_build_flush_layers(struct Depsgraph *graph);
+void deg_graph_build_finalize(struct Main *bmain, struct Depsgraph *graph);
} // namespace DEG
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index 1d18d6def8d..db1e8aeb9bd 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -62,6 +62,7 @@ extern "C" {
#include "DNA_node_types.h"
#include "DNA_particle_types.h"
#include "DNA_object_types.h"
+#include "DNA_lightprobe_types.h"
#include "DNA_rigidbody_types.h"
#include "DNA_scene_types.h"
#include "DNA_texture_types.h"
@@ -72,7 +73,6 @@ extern "C" {
#include "BKE_animsys.h"
#include "BKE_constraint.h"
#include "BKE_curve.h"
-#include "BKE_depsgraph.h"
#include "BKE_effect.h"
#include "BKE_fcurve.h"
#include "BKE_idcode.h"
@@ -90,6 +90,7 @@ extern "C" {
#include "BKE_node.h"
#include "BKE_object.h"
#include "BKE_particle.h"
+#include "BKE_pointcache.h"
#include "BKE_rigidbody.h"
#include "BKE_sound.h"
#include "BKE_tracking.h"
@@ -103,6 +104,7 @@ extern "C" {
#include "DEG_depsgraph_build.h"
#include "intern/builder/deg_builder.h"
+#include "intern/eval/deg_eval_copy_on_write.h"
#include "intern/nodes/deg_node.h"
#include "intern/nodes/deg_node_component.h"
#include "intern/nodes/deg_node_id.h"
@@ -127,7 +129,9 @@ static void modifier_walk(void *user_data,
{
BuilderWalkUserData *data = (BuilderWalkUserData *)user_data;
if (*obpoin) {
- data->builder->build_object(NULL, *obpoin);
+ data->builder->build_object(NULL,
+ *obpoin,
+ DEG_ID_LINKED_INDIRECTLY);
}
}
@@ -140,11 +144,19 @@ void constraint_walk(bConstraint * /*con*/,
if (*idpoin) {
ID *id = *idpoin;
if (GS(id->name) == ID_OB) {
- data->builder->build_object(NULL, (Object *)id);
+ data->builder->build_object(NULL,
+ (Object *)id,
+ DEG_ID_LINKED_INDIRECTLY);
}
}
}
+void free_copy_on_write_datablock(void *id_v)
+{
+ ID *id = (ID *)id_v;
+ deg_free_copy_on_write_datablock(id);
+}
+
} /* namespace */
/* ************ */
@@ -155,17 +167,51 @@ void constraint_walk(bConstraint * /*con*/,
DepsgraphNodeBuilder::DepsgraphNodeBuilder(Main *bmain, Depsgraph *graph)
: bmain_(bmain),
graph_(graph),
- scene_(NULL)
+ scene_(NULL),
+ cow_id_hash_(NULL)
{
}
DepsgraphNodeBuilder::~DepsgraphNodeBuilder()
{
+ if (cow_id_hash_ != NULL) {
+ BLI_ghash_free(cow_id_hash_, NULL, free_copy_on_write_datablock);
+ }
+}
+
+IDDepsNode *DepsgraphNodeBuilder::add_id_node(ID *id, bool do_tag)
+{
+ if (!DEG_depsgraph_use_copy_on_write()) {
+ return graph_->add_id_node(id, do_tag);
+ }
+ IDDepsNode *id_node = NULL;
+ ID *id_cow = (ID *)BLI_ghash_lookup(cow_id_hash_, id);
+ if (id_cow != NULL) {
+ /* TODO(sergey): Is it possible to lookup and pop element from GHash
+ * at the same time?
+ */
+ BLI_ghash_remove(cow_id_hash_, id, NULL, NULL);
+ }
+ id_node = graph_->add_id_node(id, do_tag, id_cow);
+ /* Currently all ID nodes are supposed to have copy-on-write logic.
+ *
+ * NOTE: Zero number of components indicates that ID node was just created.
+ */
+ if (BLI_ghash_size(id_node->components) == 0) {
+ ComponentDepsNode *comp_cow =
+ id_node->add_component(DEG_NODE_TYPE_COPY_ON_WRITE);
+ OperationDepsNode *op_cow = comp_cow->add_operation(
+ function_bind(deg_evaluate_copy_on_write, _1, graph_, id_node),
+ DEG_OPCODE_COPY_ON_WRITE,
+ "", -1);
+ graph_->operations.push_back(op_cow);
+ }
+ return id_node;
}
-IDDepsNode *DepsgraphNodeBuilder::add_id_node(ID *id)
+IDDepsNode *DepsgraphNodeBuilder::find_id_node(ID *id)
{
- return graph_->add_id_node(id, id->name);
+ return graph_->find_id_node(id);
}
TimeSourceDepsNode *DepsgraphNodeBuilder::add_time_source()
@@ -276,6 +322,32 @@ OperationDepsNode *DepsgraphNodeBuilder::find_operation_node(
return find_operation_node(id, comp_type, "", opcode, name, name_tag);
}
+ID *DepsgraphNodeBuilder::get_cow_id(const ID *id_orig) const
+{
+ return graph_->get_cow_id(id_orig);
+}
+
+ID *DepsgraphNodeBuilder::ensure_cow_id(ID *id_orig)
+{
+ if (id_orig->tag & LIB_TAG_COPY_ON_WRITE) {
+ /* ID is already remapped to copy-on-write. */
+ return id_orig;
+ }
+ IDDepsNode *id_node = add_id_node(id_orig, false);
+ return id_node->id_cow;
+}
+
+ID *DepsgraphNodeBuilder::expand_cow_id(IDDepsNode *id_node)
+{
+ return deg_expand_copy_on_write_datablock(graph_, id_node, this, true);
+}
+
+ID *DepsgraphNodeBuilder::expand_cow_id(ID *id_orig)
+{
+ IDDepsNode *id_node = add_id_node(id_orig);
+ return expand_cow_id(id_node);
+}
+
/* **** Build functions for entity nodes **** */
void DepsgraphNodeBuilder::begin_build() {
@@ -295,52 +367,116 @@ void DepsgraphNodeBuilder::begin_build() {
}
}
FOREACH_NODETREE_END;
+
+ if (DEG_depsgraph_use_copy_on_write()) {
+ /* Store existing copy-on-write versions of datablock, so we can re-use
+ * them for new ID nodes.
+ */
+ cow_id_hash_ = BLI_ghash_ptr_new("Depsgraph id hash");
+ foreach (IDDepsNode *id_node, graph_->id_nodes) {
+ if (deg_copy_on_write_is_expanded(id_node->id_cow)) {
+ BLI_ghash_insert(cow_id_hash_,
+ id_node->id_orig,
+ id_node->id_cow);
+ id_node->id_cow = NULL;
+ }
+ }
+ }
+
+ GSET_FOREACH_BEGIN(OperationDepsNode *, op_node, graph_->entry_tags)
+ {
+ ComponentDepsNode *comp_node = op_node->owner;
+ IDDepsNode *id_node = comp_node->owner;
+
+ SavedEntryTag entry_tag;
+ entry_tag.id = id_node->id_orig;
+ entry_tag.component_type = comp_node->type;
+ entry_tag.opcode = op_node->opcode;
+ saved_entry_tags_.push_back(entry_tag);
+ };
+ GSET_FOREACH_END();
+
+ /* Make sure graph has no nodes left from previous state. */
+ graph_->clear_all_nodes();
+ graph_->operations.clear();
+ BLI_gset_clear(graph_->entry_tags, NULL);
+}
+
+void DepsgraphNodeBuilder::end_build()
+{
+ foreach (const SavedEntryTag& entry_tag, saved_entry_tags_) {
+ IDDepsNode *id_node = find_id_node(entry_tag.id);
+ if (id_node == NULL) {
+ continue;
+ }
+ ComponentDepsNode *comp_node =
+ id_node->find_component(entry_tag.component_type);
+ if (comp_node == NULL) {
+ continue;
+ }
+ OperationDepsNode *op_node = comp_node->find_operation(entry_tag.opcode);
+ if (op_node == NULL) {
+ continue;
+ }
+ op_node->tag_update(graph_);
+ }
}
-void DepsgraphNodeBuilder::build_group(Base *base, Group *group)
+void DepsgraphNodeBuilder::build_group(Group *group)
{
ID *group_id = &group->id;
if (group_id->tag & LIB_TAG_DOIT) {
return;
}
group_id->tag |= LIB_TAG_DOIT;
-
- BLI_LISTBASE_FOREACH (GroupObject *, go, &group->gobject) {
- build_object(base, go->ob);
+ /* Build group objects. */
+ BLI_LISTBASE_FOREACH (Base *, base, &group->view_layer->object_bases) {
+ build_object(NULL, base->object, DEG_ID_LINKED_INDIRECTLY);
}
+ /* Operation to evaluate the whole view layer.
+ *
+ * NOTE: We re-use DONE opcode even though the function does everything.
+ * This way we wouldn't need to worry about possible relations from DONE,
+ * regardless whether it's a group or scene or something else.
+ */
+ add_id_node(group_id);
+ Group *group_cow = get_cow_datablock(group);
+ add_operation_node(group_id,
+ DEG_NODE_TYPE_LAYER_COLLECTIONS,
+ function_bind(BKE_group_eval_view_layers,
+ _1,
+ group_cow),
+ DEG_OPCODE_VIEW_LAYER_DONE);
}
-void DepsgraphNodeBuilder::build_object(Base *base, Object *object)
+void DepsgraphNodeBuilder::build_object(Base *base,
+ Object *object,
+ eDepsNode_LinkedState_Type linked_state)
{
- const bool has_object = (object->id.tag & LIB_TAG_DOIT);
- IDDepsNode *id_node = (has_object)
- ? graph_->find_id_node(&object->id)
- : add_id_node(&object->id);
- /* Update node layers.
- * Do it for both new and existing ID nodes. This is so because several
- * bases might be sharing same object.
- */
- if (base != NULL) {
- id_node->layers |= base->lay;
- }
- if (object->type == OB_CAMERA) {
- /* Camera should always be updated, it used directly by viewport.
- *
- * TODO(sergey): Make it only for active scene camera.
- */
- id_node->layers |= (unsigned int)(-1);
- }
/* Skip rest of components if the ID node was already there. */
- if (has_object) {
+ if (object->id.tag & LIB_TAG_DOIT) {
+ IDDepsNode *id_node = find_id_node(&object->id);
+ /* We need to build some extra stuff if object becomes linked
+ * directly.
+ */
+ if (id_node->linked_state == DEG_ID_LINKED_INDIRECTLY) {
+ build_object_flags(base, object, linked_state);
+ }
+ id_node->linked_state = max(id_node->linked_state, linked_state);
return;
}
object->id.tag |= LIB_TAG_DOIT;
+ /* Create ID node for object and begin init. */
+ IDDepsNode *id_node = add_id_node(&object->id);
+ id_node->linked_state = linked_state;
object->customdata_mask = 0;
+ /* Various flags, flushing from bases/collections. */
+ build_object_flags(base, object, linked_state);
/* Transform. */
build_object_transform(object);
/* Parent. */
if (object->parent != NULL) {
- build_object(NULL, object->parent);
+ build_object(NULL, object->parent, DEG_ID_LINKED_INDIRECTLY);
}
/* Modifiers. */
if (object->modifiers.first != NULL) {
@@ -374,23 +510,41 @@ void DepsgraphNodeBuilder::build_object(Base *base, Object *object)
/* Object that this is a proxy for. */
if (object->proxy) {
object->proxy->proxy_from = object;
- build_object(base, object->proxy);
+ build_object(NULL, object->proxy, DEG_ID_LINKED_INDIRECTLY);
}
/* Object dupligroup. */
if (object->dup_group != NULL) {
- build_group(base, object->dup_group);
+ build_group(object->dup_group);
}
}
+void DepsgraphNodeBuilder::build_object_flags(
+ Base *base,
+ Object *object,
+ eDepsNode_LinkedState_Type linked_state)
+{
+ if (base == NULL) {
+ return;
+ }
+ /* TODO(sergey): Is this really best component to be used? */
+ Object *object_cow = get_cow_datablock(object);
+ const bool is_from_set = (linked_state == DEG_ID_LINKED_VIA_SET);
+ add_operation_node(&object->id,
+ DEG_NODE_TYPE_LAYER_COLLECTIONS,
+ function_bind(BKE_object_eval_flush_base_flags,
+ _1, object_cow, base, is_from_set),
+ DEG_OPCODE_OBJECT_BASE_FLAGS);
+}
+
void DepsgraphNodeBuilder::build_object_data(Object *object)
{
if (object->data == NULL) {
return;
}
IDDepsNode *id_node = graph_->find_id_node(&object->id);
- /* type-specific data... */
+ /* type-specific data. */
switch (object->type) {
- case OB_MESH: /* Geometry */
+ case OB_MESH:
case OB_CURVE:
case OB_FONT:
case OB_SURF:
@@ -421,6 +575,9 @@ void DepsgraphNodeBuilder::build_object_data(Object *object)
case OB_CAMERA:
build_camera(object);
break;
+ case OB_LIGHTPROBE:
+ build_lightprobe(object);
+ break;
default:
{
ID *obdata = (ID *)object->data;
@@ -435,39 +592,44 @@ void DepsgraphNodeBuilder::build_object_data(Object *object)
void DepsgraphNodeBuilder::build_object_transform(Object *object)
{
OperationDepsNode *op_node;
+ Scene *scene_cow = get_cow_datablock(scene_);
+ Object *ob_cow = get_cow_datablock(object);
/* local transforms (from transform channels - loc/rot/scale + deltas) */
op_node = add_operation_node(&object->id, DEG_NODE_TYPE_TRANSFORM,
- function_bind(BKE_object_eval_local_transform, _1, object),
+ function_bind(BKE_object_eval_local_transform,
+ _1,
+ ob_cow),
DEG_OPCODE_TRANSFORM_LOCAL);
op_node->set_as_entry();
/* object parent */
- if (object->parent) {
+ if (object->parent != NULL) {
add_operation_node(&object->id, DEG_NODE_TYPE_TRANSFORM,
- function_bind(BKE_object_eval_parent, _1, scene_, object),
+ function_bind(BKE_object_eval_parent,
+ _1,
+ scene_cow,
+ ob_cow),
DEG_OPCODE_TRANSFORM_PARENT);
}
/* object constraints */
- if (object->constraints.first) {
+ if (object->constraints.first != NULL) {
build_object_constraints(object);
}
- /* Temporary uber-update node, which does everything.
- * It is for the being we're porting old dependencies into the new system.
- * We'll get rid of this node as soon as all the granular update functions
- * are filled in.
- *
- * TODO(sergey): Get rid of this node.
- */
+ /* Rest of transformation update. */
add_operation_node(&object->id, DEG_NODE_TYPE_TRANSFORM,
- function_bind(BKE_object_eval_uber_transform, _1, object),
+ function_bind(BKE_object_eval_uber_transform,
+ _1,
+ ob_cow),
DEG_OPCODE_TRANSFORM_OBJECT_UBEREVAL);
/* object transform is done */
op_node = add_operation_node(&object->id, DEG_NODE_TYPE_TRANSFORM,
- function_bind(BKE_object_eval_done, _1, object),
+ function_bind(BKE_object_eval_done,
+ _1,
+ ob_cow),
DEG_OPCODE_TRANSFORM_FINAL);
op_node->set_as_exit();
}
@@ -493,7 +655,10 @@ void DepsgraphNodeBuilder::build_object_constraints(Object *object)
{
/* create node for constraint stack */
add_operation_node(&object->id, DEG_NODE_TYPE_TRANSFORM,
- function_bind(BKE_object_eval_constraints, _1, scene_, object),
+ function_bind(BKE_object_eval_constraints,
+ _1,
+ get_cow_datablock(scene_),
+ get_cow_datablock(object)),
DEG_OPCODE_TRANSFORM_CONSTRAINTS);
}
@@ -504,23 +669,34 @@ void DepsgraphNodeBuilder::build_object_constraints(Object *object)
void DepsgraphNodeBuilder::build_animdata(ID *id)
{
AnimData *adt = BKE_animdata_from_id(id);
-
- if (adt == NULL)
+ if (adt == NULL) {
return;
+ }
/* animation */
if (adt->action || adt->nla_tracks.first || adt->drivers.first) {
- // XXX: Hook up specific update callbacks for special properties which may need it...
+ (void) add_id_node(id);
+ ID *id_cow = get_cow_id(id);
+
+ // XXX: Hook up specific update callbacks for special properties which
+ // may need it...
- /* actions and NLA - as a single unit for now, as it gets complicated to schedule otherwise */
+ /* actions and NLA - as a single unit for now, as it gets complicated to
+ * schedule otherwise.
+ */
if ((adt->action) || (adt->nla_tracks.first)) {
/* create the node */
add_operation_node(id, DEG_NODE_TYPE_ANIMATION,
- function_bind(BKE_animsys_eval_animdata, _1, id),
- DEG_OPCODE_ANIMATION, id->name);
-
- // TODO: for each channel affected, we might also want to add some support for running RNA update callbacks on them
- // (which will be needed for proper handling of drivers later)
+ function_bind(BKE_animsys_eval_animdata,
+ _1,
+ id_cow),
+ DEG_OPCODE_ANIMATION,
+ id->name);
+
+ /* TODO: for each channel affected, we might also want to add some
+ * support for running RNA update callbacks on them
+ * (which will be needed for proper handling of drivers later)
+ */
}
/* drivers */
@@ -538,21 +714,28 @@ void DepsgraphNodeBuilder::build_animdata(ID *id)
*/
OperationDepsNode *DepsgraphNodeBuilder::build_driver(ID *id, FCurve *fcu)
{
+ ID *id_cow = get_cow_id(id);
+
/* Create data node for this driver */
/* TODO(sergey): Avoid creating same operation multiple times,
* in the future we need to avoid lookup of the operation as well
* and use some tagging magic instead.
*/
- OperationDepsNode *driver_op = find_operation_node(id,
- DEG_NODE_TYPE_PARAMETERS,
- DEG_OPCODE_DRIVER,
- fcu->rna_path ? fcu->rna_path : "",
- fcu->array_index);
+ OperationDepsNode *driver_op = find_operation_node(
+ id,
+ DEG_NODE_TYPE_PARAMETERS,
+ DEG_OPCODE_DRIVER,
+ fcu->rna_path ? fcu->rna_path : "",
+ fcu->array_index);
if (driver_op == NULL) {
+ /* TODO(sergey): Shall we use COW of fcu itself here? */
driver_op = add_operation_node(id,
DEG_NODE_TYPE_PARAMETERS,
- function_bind(BKE_animsys_eval_driver, _1, id, fcu),
+ function_bind(BKE_animsys_eval_driver,
+ _1,
+ id_cow,
+ fcu),
DEG_OPCODE_DRIVER,
fcu->rna_path ? fcu->rna_path : "",
fcu->array_index);
@@ -569,20 +752,19 @@ void DepsgraphNodeBuilder::build_world(World *world)
if (world_id->tag & LIB_TAG_DOIT) {
return;
}
-
+ /* Animation. */
build_animdata(world_id);
-
/* world itself */
add_operation_node(world_id,
- DEG_NODE_TYPE_PARAMETERS,
- NULL,
- DEG_OPCODE_PARAMETERS_EVAL);
-
+ DEG_NODE_TYPE_SHADING,
+ function_bind(BKE_world_eval,
+ _1,
+ get_cow_datablock(world)),
+ DEG_OPCODE_WORLD_UPDATE);
/* textures */
build_texture_stack(world->mtex);
-
/* world's nodetree */
- if (world->nodetree) {
+ if (world->nodetree != NULL) {
build_nodetree(world->nodetree);
}
}
@@ -591,55 +773,66 @@ void DepsgraphNodeBuilder::build_world(World *world)
void DepsgraphNodeBuilder::build_rigidbody(Scene *scene)
{
RigidBodyWorld *rbw = scene->rigidbody_world;
+ Scene *scene_cow = get_cow_datablock(scene);
/**
* Rigidbody Simulation Nodes
* ==========================
*
* There are 3 nodes related to Rigidbody Simulation:
- * 1) "Initialize/Rebuild World" - this is called sparingly, only when the simulation
- * needs to be rebuilt (mainly after file reload, or moving back to start frame)
- * 2) "Do Simulation" - perform a simulation step - interleaved between the evaluation
- * steps for clusters of objects (i.e. between those affected and/or not affected by
- * the sim for instance)
+ * 1) "Initialize/Rebuild World" - this is called sparingly, only when the
+ * simulation needs to be rebuilt (mainly after file reload, or moving
+ * back to start frame)
+ * 2) "Do Simulation" - perform a simulation step - interleaved between the
+ * evaluation steps for clusters of objects (i.e. between those affected
+ * and/or not affected by the sim for instance).
*
- * 3) "Pull Results" - grab the specific transforms applied for a specific object -
- * performed as part of object's transform-stack building
+ * 3) "Pull Results" - grab the specific transforms applied for a specific
+ * object - performed as part of object's transform-stack building.
*/
- /* create nodes ------------------------------------------------------------------------ */
- /* XXX: is this the right component, or do we want to use another one instead? */
+ /* Create nodes --------------------------------------------------------- */
+
+ /* XXX: is this the right component, or do we want to use another one
+ * instead?
+ */
/* init/rebuild operation */
- /*OperationDepsNode *init_node =*/ add_operation_node(&scene->id, DEG_NODE_TYPE_TRANSFORM,
- function_bind(BKE_rigidbody_rebuild_sim, _1, scene),
- DEG_OPCODE_RIGIDBODY_REBUILD);
+ /*OperationDepsNode *init_node =*/ add_operation_node(
+ &scene->id, DEG_NODE_TYPE_TRANSFORM,
+ function_bind(BKE_rigidbody_rebuild_sim, _1, scene_cow),
+ DEG_OPCODE_RIGIDBODY_REBUILD);
/* do-sim operation */
// XXX: what happens if we need to split into several groups?
- OperationDepsNode *sim_node = add_operation_node(&scene->id, DEG_NODE_TYPE_TRANSFORM,
- function_bind(BKE_rigidbody_eval_simulation, _1, scene),
- DEG_OPCODE_RIGIDBODY_SIM);
+ OperationDepsNode *sim_node = add_operation_node(
+ &scene->id, DEG_NODE_TYPE_TRANSFORM,
+ function_bind(BKE_rigidbody_eval_simulation, _1, scene_cow),
+ DEG_OPCODE_RIGIDBODY_SIM);
- /* XXX: For now, the sim node is the only one that really matters here. If any other
- * sims get added later, we may have to remove these hacks...
+ /* XXX: For now, the sim node is the only one that really matters here.
+ * If any other sims get added later, we may have to remove these hacks...
*/
sim_node->owner->entry_operation = sim_node;
sim_node->owner->exit_operation = sim_node;
-
/* objects - simulation participants */
if (rbw->group) {
- BLI_LISTBASE_FOREACH (GroupObject *, go, &rbw->group->gobject) {
- Object *object = go->ob;
+ BLI_LISTBASE_FOREACH (Base *, base, &rbw->group->view_layer->object_bases) {
+ Object *object = base->object;
if (!object || (object->type != OB_MESH))
continue;
/* 2) create operation for flushing results */
- /* object's transform component - where the rigidbody operation lives */
+ /* object's transform component - where the rigidbody operation
+ * lives. */
add_operation_node(&object->id, DEG_NODE_TYPE_TRANSFORM,
- function_bind(BKE_rigidbody_object_sync_transforms, _1, scene, object),
+ function_bind(
+ BKE_rigidbody_object_sync_transforms,
+ _1,
+ scene_cow,
+ get_cow_datablock(object)),
DEG_OPCODE_RIGIDBODY_TRANSFORM_COPY);
}
}
@@ -664,20 +857,33 @@ void DepsgraphNodeBuilder::build_particles(Object *object)
/* Component for all particle systems. */
ComponentDepsNode *psys_comp =
add_component_node(&object->id, DEG_NODE_TYPE_EVAL_PARTICLES);
+
+ /* TODO(sergey): Need to get COW of PSYS. */
+ Scene *scene_cow = get_cow_datablock(scene_);
+ Object *ob_cow = get_cow_datablock(object);
+
add_operation_node(psys_comp,
function_bind(BKE_particle_system_eval_init,
_1,
- scene_,
- object),
+ scene_cow,
+ ob_cow),
DEG_OPCODE_PARTICLE_SYSTEM_EVAL_INIT);
/* Build all particle systems. */
BLI_LISTBASE_FOREACH (ParticleSystem *, psys, &object->particlesystem) {
ParticleSettings *part = psys->part;
- /* Particle settings. */
- // XXX: what if this is used more than once!
- build_animdata(&part->id);
- /* This particle system evaluation. */
- // TODO: for now, this will just be a placeholder "ubereval" node
+ /* Build particle settings operations.
+ *
+ * NOTE: The call itself ensures settings are only build once.
+ */
+ build_particle_settings(part);
+ /* Update on particle settings change. */
+ add_operation_node(psys_comp,
+ function_bind(BKE_particle_system_settings_eval,
+ _1,
+ psys),
+ DEG_OPCODE_PARTICLE_SETTINGS_EVAL,
+ psys->name);
+ /* Particle system evaluation. */
add_operation_node(psys_comp,
NULL,
DEG_OPCODE_PARTICLE_SYSTEM_EVAL,
@@ -686,29 +892,60 @@ void DepsgraphNodeBuilder::build_particles(Object *object)
switch (part->ren_as) {
case PART_DRAW_OB:
if (part->dup_ob != NULL) {
- build_object(NULL, part->dup_ob);
+ build_object(NULL,
+ part->dup_ob,
+ DEG_ID_LINKED_INDIRECTLY);
}
break;
case PART_DRAW_GR:
if (part->dup_group != NULL) {
- build_group(NULL, part->dup_group);
+ build_group(part->dup_group);
}
break;
}
}
- /* pointcache */
- // TODO...
+ /* TODO(sergey): Do we need a point cache operations here? */
+ add_operation_node(&object->id,
+ DEG_NODE_TYPE_CACHE,
+ function_bind(BKE_ptcache_object_reset,
+ scene_cow,
+ ob_cow,
+ PTCACHE_RESET_DEPSGRAPH),
+ DEG_OPCODE_POINT_CACHE_RESET);
+}
+
+void DepsgraphNodeBuilder::build_particle_settings(ParticleSettings *part) {
+ ID *part_id = &part->id;
+ if (part_id->tag & LIB_TAG_DOIT) {
+ return;
+ }
+ part_id->tag |= LIB_TAG_DOIT;
+ /* Animation data. */
+ build_animdata(part_id);
+ /* Parameters change. */
+ add_operation_node(part_id,
+ DEG_NODE_TYPE_PARAMETERS,
+ NULL,
+ DEG_OPCODE_PARTICLE_SETTINGS_EVAL);
+ add_operation_node(part_id,
+ DEG_NODE_TYPE_PARAMETERS,
+ function_bind(BKE_particle_system_settings_recalc_clear,
+ _1,
+ part),
+ DEG_OPCODE_PARTICLE_SETTINGS_RECALC_CLEAR);
}
void DepsgraphNodeBuilder::build_cloth(Object *object)
{
+ Scene *scene_cow = get_cow_datablock(scene_);
+ Object *object_cow = get_cow_datablock(object);
add_operation_node(&object->id,
DEG_NODE_TYPE_CACHE,
function_bind(BKE_object_eval_cloth,
_1,
- scene_,
- object),
+ scene_cow,
+ object_cow),
DEG_OPCODE_GEOMETRY_CLOTH_MODIFIER);
}
@@ -726,8 +963,9 @@ void DepsgraphNodeBuilder::build_shapekeys(Key *key)
// XXX: what happens if the datablock is shared!
void DepsgraphNodeBuilder::build_obdata_geom(Object *object)
{
- ID *obdata = (ID *)object->data;
OperationDepsNode *op_node;
+ Scene *scene_cow = get_cow_datablock(scene_);
+ Object *object_cow = get_cow_datablock(object);
/* TODO(sergey): This way using this object's properties as driver target
* works fine.
@@ -751,8 +989,8 @@ void DepsgraphNodeBuilder::build_obdata_geom(Object *object)
DEG_NODE_TYPE_GEOMETRY,
function_bind(BKE_object_eval_uber_data,
_1,
- scene_,
- object),
+ scene_cow,
+ object_cow),
DEG_OPCODE_GEOMETRY_UBEREVAL);
op_node->set_as_exit();
@@ -773,10 +1011,21 @@ void DepsgraphNodeBuilder::build_obdata_geom(Object *object)
}
/* materials */
- for (int a = 1; a <= object->totcol; a++) {
- Material *ma = give_current_material(object, a);
- if (ma != NULL) {
- build_material(ma);
+ if (object->totcol != 0) {
+ if (object->type == OB_MESH) {
+ add_operation_node(&object->id,
+ DEG_NODE_TYPE_SHADING,
+ function_bind(BKE_object_eval_update_shading,
+ _1,
+ object_cow),
+ DEG_OPCODE_SHADING);
+ }
+
+ for (int a = 1; a <= object->totcol; a++) {
+ Material *ma = give_current_material(object, a);
+ if (ma != NULL) {
+ build_material(ma);
+ }
}
}
@@ -785,9 +1034,14 @@ void DepsgraphNodeBuilder::build_obdata_geom(Object *object)
// add geometry collider relations
}
+ ID *obdata = (ID *)object->data;
if (obdata->tag & LIB_TAG_DOIT) {
return;
}
+ obdata->tag |= LIB_TAG_DOIT;
+ /* Make sure we've got an ID node before requesting CoW pointer. */
+ (void) add_id_node((ID *)obdata);
+ ID *obdata_cow = get_cow_id(obdata);
/* ShapeKeys */
Key *key = BKE_key_from_object(object);
@@ -810,7 +1064,7 @@ void DepsgraphNodeBuilder::build_obdata_geom(Object *object)
DEG_NODE_TYPE_GEOMETRY,
function_bind(BKE_mesh_eval_geometry,
_1,
- (Mesh *)obdata),
+ (Mesh *)obdata_cow),
DEG_OPCODE_PLACEHOLDER,
"Geometry Eval");
op_node->set_as_entry();
@@ -827,9 +1081,10 @@ void DepsgraphNodeBuilder::build_obdata_geom(Object *object)
/* metaball evaluation operations */
op_node = add_operation_node(obdata,
DEG_NODE_TYPE_GEOMETRY,
- function_bind(BKE_mball_eval_geometry,
- _1,
- (MetaBall *)obdata),
+ function_bind(
+ BKE_mball_eval_geometry,
+ _1,
+ (MetaBall *)obdata_cow),
DEG_OPCODE_PLACEHOLDER,
"Geometry Eval");
}
@@ -854,23 +1109,22 @@ void DepsgraphNodeBuilder::build_obdata_geom(Object *object)
DEG_NODE_TYPE_GEOMETRY,
function_bind(BKE_curve_eval_geometry,
_1,
- (Curve *)obdata),
+ (Curve *)obdata_cow),
DEG_OPCODE_PLACEHOLDER,
"Geometry Eval");
op_node->set_as_entry();
-
/* Make sure objects used for bevel.taper are in the graph.
* NOTE: This objects might be not linked to the scene.
*/
Curve *cu = (Curve *)obdata;
if (cu->bevobj != NULL) {
- build_object(NULL, cu->bevobj);
+ build_object(NULL, cu->bevobj, DEG_ID_LINKED_INDIRECTLY);
}
if (cu->taperobj != NULL) {
- build_object(NULL, cu->taperobj);
+ build_object(NULL, cu->taperobj, DEG_ID_LINKED_INDIRECTLY);
}
if (object->type == OB_FONT && cu->textoncurve != NULL) {
- build_object(NULL, cu->textoncurve);
+ build_object(NULL, cu->textoncurve, DEG_ID_LINKED_INDIRECTLY);
}
break;
}
@@ -882,7 +1136,7 @@ void DepsgraphNodeBuilder::build_obdata_geom(Object *object)
DEG_NODE_TYPE_GEOMETRY,
function_bind(BKE_lattice_eval_geometry,
_1,
- (Lattice *)obdata),
+ (Lattice *)obdata_cow),
DEG_OPCODE_PLACEHOLDER,
"Geometry Eval");
op_node->set_as_entry();
@@ -899,12 +1153,28 @@ void DepsgraphNodeBuilder::build_obdata_geom(Object *object)
DEG_NODE_TYPE_PARAMETERS,
NULL,
DEG_OPCODE_PARAMETERS_EVAL);
+
+ /* Batch cache. */
+ add_operation_node(obdata,
+ DEG_NODE_TYPE_BATCH_CACHE,
+ function_bind(BKE_object_data_select_update,
+ _1,
+ obdata_cow),
+ DEG_OPCODE_GEOMETRY_SELECT_UPDATE);
}
/* Cameras */
void DepsgraphNodeBuilder::build_camera(Object *object)
{
- /* TODO: Link scene-camera links in somehow... */
+ /* Object itself. */
+ add_operation_node(&object->id,
+ DEG_NODE_TYPE_PARAMETERS,
+ NULL,
+ DEG_OPCODE_PARAMETERS_EVAL,
+ "Camera Parameters");
+
+ /* Object data. */
+ /* TODO: Link scene-camera links in somehow. */
Camera *cam = (Camera *)object->data;
ID *camera_id = &cam->id;
if (camera_id->tag & LIB_TAG_DOIT) {
@@ -917,17 +1187,19 @@ void DepsgraphNodeBuilder::build_camera(Object *object)
DEG_NODE_TYPE_PARAMETERS,
NULL,
DEG_OPCODE_PARAMETERS_EVAL);
-
- if (cam->dof_ob != NULL) {
- /* TODO(sergey): For now parametrs are on object level. */
- add_operation_node(&object->id, DEG_NODE_TYPE_PARAMETERS, NULL,
- DEG_OPCODE_PLACEHOLDER, "Camera DOF");
- }
}
/* Lamps */
void DepsgraphNodeBuilder::build_lamp(Object *object)
{
+ /* Object itself. */
+ add_operation_node(&object->id,
+ DEG_NODE_TYPE_PARAMETERS,
+ NULL,
+ DEG_OPCODE_PARAMETERS_EVAL,
+ "Lamp Parameters");
+
+ /* Object data. */
Lamp *la = (Lamp *)object->data;
ID *lamp_id = &la->id;
if (lamp_id->tag & LIB_TAG_DOIT) {
@@ -936,7 +1208,6 @@ void DepsgraphNodeBuilder::build_lamp(Object *object)
build_animdata(&la->id);
- /* TODO(sergey): Is it really how we're supposed to work with drivers? */
add_operation_node(lamp_id,
DEG_NODE_TYPE_PARAMETERS,
NULL,
@@ -953,22 +1224,30 @@ void DepsgraphNodeBuilder::build_lamp(Object *object)
void DepsgraphNodeBuilder::build_nodetree(bNodeTree *ntree)
{
- if (!ntree)
+ if (ntree == NULL) {
return;
-
+ }
/* nodetree itself */
ID *ntree_id = &ntree->id;
- OperationDepsNode *op_node;
-
+ add_id_node(ntree_id);
+ bNodeTree *ntree_cow = get_cow_datablock(ntree);
+ /* Animation, */
build_animdata(ntree_id);
-
- /* Parameters for drivers. */
- op_node = add_operation_node(ntree_id,
- DEG_NODE_TYPE_PARAMETERS,
- NULL,
- DEG_OPCODE_PARAMETERS_EVAL);
- op_node->set_as_exit();
-
+ /* Shading update. */
+ add_operation_node(ntree_id,
+ DEG_NODE_TYPE_SHADING,
+ NULL,
+ DEG_OPCODE_MATERIAL_UPDATE);
+ /* NOTE: We really pass original and CoW node trees here, this is how the
+ * callback works. Ideally we need to find a better way for that.
+ */
+ add_operation_node(ntree_id,
+ DEG_NODE_TYPE_SHADING_PARAMETERS,
+ function_bind(BKE_nodetree_shading_params_eval,
+ _1,
+ ntree_cow,
+ ntree),
+ DEG_OPCODE_MATERIAL_UPDATE);
/* nodetree's nodes... */
BLI_LISTBASE_FOREACH (bNode *, bnode, &ntree->nodes) {
ID *id = bnode->id;
@@ -986,7 +1265,7 @@ void DepsgraphNodeBuilder::build_nodetree(bNodeTree *ntree)
build_image((Image *)id);
}
else if (id_type == ID_OB) {
- build_object(NULL, (Object *)id);
+ build_object(NULL, (Object *)id, DEG_ID_LINKED_INDIRECTLY);
}
else if (id_type == ID_SCE) {
/* Scenes are used by compositor trees, and handled by render
@@ -1011,36 +1290,40 @@ void DepsgraphNodeBuilder::build_nodetree(bNodeTree *ntree)
}
/* Recursively build graph for material */
-void DepsgraphNodeBuilder::build_material(Material *ma)
+void DepsgraphNodeBuilder::build_material(Material *material)
{
- ID *ma_id = &ma->id;
- if (ma_id->tag & LIB_TAG_DOIT) {
+ ID *material_id = &material->id;
+ if (material_id->tag & LIB_TAG_DOIT) {
return;
}
-
- add_operation_node(ma_id, DEG_NODE_TYPE_SHADING, NULL,
- DEG_OPCODE_PLACEHOLDER, "Material Update");
-
- /* material animation */
- build_animdata(ma_id);
-
- /* textures */
- build_texture_stack(ma->mtex);
-
- /* material's nodetree */
- build_nodetree(ma->nodetree);
+ material_id->tag |= LIB_TAG_DOIT;
+ /* Material itself. */
+ add_id_node(material_id);
+ Material *material_cow = get_cow_datablock(material);
+ /* Shading update. */
+ add_operation_node(material_id,
+ DEG_NODE_TYPE_SHADING,
+ function_bind(BKE_material_eval,
+ _1,
+ material_cow),
+ DEG_OPCODE_MATERIAL_UPDATE);
+ /* Material animation. */
+ build_animdata(material_id);
+ /* Textures. */
+ build_texture_stack(material->mtex);
+ /* Material's nodetree. */
+ build_nodetree(material->nodetree);
}
/* Texture-stack attached to some shading datablock */
void DepsgraphNodeBuilder::build_texture_stack(MTex **texture_stack)
{
- int i;
-
/* for now assume that all texture-stacks have same number of max items */
- for (i = 0; i < MAX_MTEX; i++) {
+ for (int i = 0; i < MAX_MTEX; i++) {
MTex *mtex = texture_stack[i];
- if (mtex && mtex->tex)
+ if (mtex && mtex->tex) {
build_texture(mtex->tex);
+ }
}
}
@@ -1085,7 +1368,9 @@ void DepsgraphNodeBuilder::build_compositor(Scene *scene)
// XXX: component type undefined!
//graph->get_node(&scene->id, NULL, DEG_NODE_TYPE_COMPOSITING, NULL);
- /* for now, nodetrees are just parameters; compositing occurs in internals of renderer... */
+ /* for now, nodetrees are just parameters; compositing occurs in internals
+ * of renderer...
+ */
add_component_node(&scene->id, DEG_NODE_TYPE_PARAMETERS);
build_nodetree(scene->nodetree);
}
@@ -1117,29 +1402,55 @@ void DepsgraphNodeBuilder::build_cachefile(CacheFile *cache_file)
void DepsgraphNodeBuilder::build_mask(Mask *mask)
{
ID *mask_id = &mask->id;
+ Mask *mask_cow = get_cow_datablock(mask);
/* F-Curve based animation. */
build_animdata(mask_id);
/* Animation based on mask's shapes. */
add_operation_node(mask_id,
DEG_NODE_TYPE_ANIMATION,
- function_bind(BKE_mask_eval_animation, _1, mask),
+ function_bind(BKE_mask_eval_animation, _1, mask_cow),
DEG_OPCODE_MASK_ANIMATION);
/* Final mask evaluation. */
add_operation_node(mask_id,
DEG_NODE_TYPE_PARAMETERS,
- function_bind(BKE_mask_eval_update, _1, mask),
+ function_bind(BKE_mask_eval_update, _1, mask_cow),
DEG_OPCODE_MASK_EVAL);
}
-void DepsgraphNodeBuilder::build_movieclip(MovieClip *clip) {
+void DepsgraphNodeBuilder::build_movieclip(MovieClip *clip)
+{
ID *clip_id = &clip->id;
+ MovieClip *clip_cow = get_cow_datablock(clip);
/* Animation. */
build_animdata(clip_id);
/* Movie clip evaluation. */
add_operation_node(clip_id,
DEG_NODE_TYPE_PARAMETERS,
- function_bind(BKE_movieclip_eval_update, _1, clip),
+ function_bind(BKE_movieclip_eval_update, _1, clip_cow),
DEG_OPCODE_MOVIECLIP_EVAL);
}
+void DepsgraphNodeBuilder::build_lightprobe(Object *object)
+{
+ LightProbe *probe = (LightProbe *)object->data;
+ ID *probe_id = &probe->id;
+ if (probe_id->tag & LIB_TAG_DOIT) {
+ return;
+ }
+ probe_id->tag |= LIB_TAG_DOIT;
+ /* Placeholder so we can add relations and tag ID node for update. */
+ add_operation_node(probe_id,
+ DEG_NODE_TYPE_PARAMETERS,
+ NULL,
+ DEG_OPCODE_PLACEHOLDER,
+ "LightProbe Eval");
+ add_operation_node(&object->id,
+ DEG_NODE_TYPE_PARAMETERS,
+ NULL,
+ DEG_OPCODE_PLACEHOLDER,
+ "LightProbe Eval");
+
+ build_animdata(probe_id);
+}
+
} // namespace DEG
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
index 2fa9ba01cc7..cc8ad08ea3b 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
@@ -32,6 +32,8 @@
#include "intern/depsgraph_types.h"
+#include "DEG_depsgraph.h" /* used for DEG_depsgraph_use_copy_on_write() */
+
struct Base;
struct CacheFile;
struct bGPdata;
@@ -42,6 +44,7 @@ struct Image;
struct FCurve;
struct Group;
struct Key;
+struct LayerCollection;
struct Main;
struct Material;
struct Mask;
@@ -49,6 +52,8 @@ struct MTex;
struct MovieClip;
struct bNodeTree;
struct Object;
+struct ParticleSettings;
+struct Probe;
struct bPoseChannel;
struct bConstraint;
struct Scene;
@@ -70,9 +75,45 @@ struct DepsgraphNodeBuilder {
DepsgraphNodeBuilder(Main *bmain, Depsgraph *graph);
~DepsgraphNodeBuilder();
+ /* For given original ID get ID which is created by CoW system. */
+ ID *get_cow_id(const ID *id_orig) const;
+ /* Similar to above, but for the cases when there is no ID node we create
+ * one.
+ */
+ ID *ensure_cow_id(ID *id_orig);
+
+ /* Helper wrapper function which wraps get_cow_id with a needed type cast. */
+ template<typename T>
+ T *get_cow_datablock(const T *orig) const {
+ return (T *)get_cow_id(&orig->id);
+ }
+
+ /* Get fully expanded (ready for use) copy-on-write datablock for the given
+ * original datablock.
+ */
+ ID *expand_cow_id(IDDepsNode *id_node);
+ ID *expand_cow_id(ID *id_orig);
+ template<typename T>
+ T *expand_cow_datablock(T *orig) {
+ return (T *)expand_cow_id(&orig->id);
+ }
+
+ /* For a given COW datablock get corresponding original one. */
+ template<typename T>
+ T *get_orig_datablock(const T *cow) const {
+ if (DEG_depsgraph_use_copy_on_write()) {
+ return (T *)cow->id.orig_id;
+ }
+ else {
+ return (T *)cow;
+ }
+ }
+
void begin_build();
+ void end_build();
- IDDepsNode *add_id_node(ID *id);
+ IDDepsNode *add_id_node(ID *id, bool do_tag = true);
+ IDDepsNode *find_id_node(ID *id);
TimeSourceDepsNode *add_time_source();
ComponentDepsNode *add_component_node(ID *id,
@@ -118,15 +159,23 @@ struct DepsgraphNodeBuilder {
const char *name = "",
int name_tag = -1);
- void build_scene(Scene *scene);
- void build_group(Base *base, Group *group);
- void build_object(Base *base, Object *object);
+ void build_view_layer(Scene *scene,
+ ViewLayer *view_layer,
+ eDepsNode_LinkedState_Type linked_state);
+ void build_group(Group *group);
+ void build_object(Base *base,
+ Object *object,
+ eDepsNode_LinkedState_Type linked_state);
+ void build_object_flags(Base *base,
+ Object *object,
+ eDepsNode_LinkedState_Type linked_state);
void build_object_data(Object *object);
void build_object_transform(Object *object);
void build_object_constraints(Object *object);
void build_pose_constraints(Object *object, bPoseChannel *pchan);
void build_rigidbody(Scene *scene);
void build_particles(Object *object);
+ void build_particle_settings(ParticleSettings *part);
void build_cloth(Object *object);
void build_animdata(ID *id);
OperationDepsNode *build_driver(ID *id, FCurve *fcurve);
@@ -153,14 +202,35 @@ struct DepsgraphNodeBuilder {
void build_cachefile(CacheFile *cache_file);
void build_mask(Mask *mask);
void build_movieclip(MovieClip *clip);
-
+ void build_lightprobe(Object *object);
+
+ struct LayerCollectionState {
+ int index;
+ LayerCollection *parent;
+ };
+ void build_layer_collection(ID *owner_id,
+ LayerCollection *layer_collection,
+ LayerCollectionState *state);
+ void build_layer_collections(ID *owner_id,
+ ListBase *layer_collections,
+ LayerCollectionState *state);
+ void build_view_layer_collections(ID *owner_id, ViewLayer *view_layer);
protected:
+ struct SavedEntryTag {
+ ID *id;
+ eDepsNode_Type component_type;
+ eDepsOperation_Code opcode;
+ };
+ vector<SavedEntryTag> saved_entry_tags_;
+
/* State which never changes, same for the whole builder time. */
Main *bmain_;
Depsgraph *graph_;
/* State which demotes currently built entities. */
Scene *scene_;
+
+ GHash *cow_id_hash_;
};
} // namespace DEG
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes_layer_collection.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes_layer_collection.cc
new file mode 100644
index 00000000000..137a79e7276
--- /dev/null
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes_layer_collection.cc
@@ -0,0 +1,126 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2013 Blender Foundation.
+ * All rights reserved.
+ *
+ * Original Author: Joshua Leung
+ * Contributor(s): Based on original depsgraph.c code - Blender Foundation (2005-2013)
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/depsgraph/intern/builder/deg_builder_nodes_layer_collection.cc
+ * \ingroup depsgraph
+ *
+ * Methods for constructing depsgraph's nodes
+ */
+
+#include "intern/builder/deg_builder_nodes.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "MEM_guardedalloc.h"
+
+extern "C" {
+#include "BLI_utildefines.h"
+#include "BLI_listbase.h"
+#include "BLI_string.h"
+
+#include "BKE_layer.h"
+
+#include "DNA_scene_types.h"
+
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+} /* extern "C" */
+
+#include "intern/builder/deg_builder.h"
+#include "intern/eval/deg_eval_copy_on_write.h"
+#include "intern/nodes/deg_node.h"
+#include "intern/nodes/deg_node_component.h"
+#include "intern/nodes/deg_node_operation.h"
+#include "intern/depsgraph_types.h"
+#include "intern/depsgraph_intern.h"
+#include "util/deg_util_foreach.h"
+
+namespace DEG {
+
+void DepsgraphNodeBuilder::build_layer_collection(
+ ID *owner_id,
+ LayerCollection *layer_collection,
+ LayerCollectionState *state)
+{
+ /* TODO(sergey): This will attempt to create component for each collection.
+ * Harmless but could be optimized.
+ */
+ ComponentDepsNode *comp = add_component_node(
+ owner_id,
+ DEG_NODE_TYPE_LAYER_COLLECTIONS);
+
+ add_operation_node(comp,
+ function_bind(BKE_layer_eval_layer_collection,
+ _1,
+ layer_collection,
+ state->parent),
+ DEG_OPCODE_VIEW_LAYER_EVAL,
+ layer_collection->scene_collection->name,
+ state->index);
+ ++state->index;
+
+ /* Recurs into nested layer collections. */
+ LayerCollection *parent = state->parent;
+ state->parent = layer_collection;
+ build_layer_collections(owner_id, &layer_collection->layer_collections, state);
+ state->parent = parent;
+}
+
+void DepsgraphNodeBuilder::build_layer_collections(ID *owner_id,
+ ListBase *layer_collections,
+ LayerCollectionState *state)
+{
+ BLI_LISTBASE_FOREACH (LayerCollection *, layer_collection, layer_collections) {
+ build_layer_collection(owner_id, layer_collection, state);
+ }
+}
+
+void DepsgraphNodeBuilder::build_view_layer_collections(
+ ID *owner_id,
+ ViewLayer *view_layer)
+{
+ LayerCollectionState state;
+ state.index = 0;
+ ComponentDepsNode *comp = add_component_node(
+ owner_id,
+ DEG_NODE_TYPE_LAYER_COLLECTIONS);
+ add_operation_node(comp,
+ function_bind(BKE_layer_eval_layer_collection_pre,
+ _1,
+ owner_id,
+ view_layer),
+ DEG_OPCODE_VIEW_LAYER_INIT);
+ add_operation_node(comp,
+ function_bind(BKE_layer_eval_layer_collection_post,
+ _1,
+ view_layer),
+ DEG_OPCODE_VIEW_LAYER_DONE);
+ state.parent = NULL;
+ build_layer_collections(owner_id, &view_layer->layer_collections, &state);
+}
+
+} // namespace DEG
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc
index 29cd72c13fd..8be974aae39 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc
@@ -46,6 +46,7 @@ extern "C" {
#include "DNA_armature_types.h"
#include "DNA_constraint_types.h"
#include "DNA_object_types.h"
+#include "DNA_scene_types.h"
#include "BKE_action.h"
#include "BKE_armature.h"
@@ -55,6 +56,7 @@ extern "C" {
#include "DEG_depsgraph_build.h"
#include "intern/builder/deg_builder.h"
+#include "intern/eval/deg_eval_copy_on_write.h"
#include "intern/nodes/deg_node.h"
#include "intern/nodes/deg_node_component.h"
#include "intern/nodes/deg_node_operation.h"
@@ -64,16 +66,23 @@ extern "C" {
namespace DEG {
-void DepsgraphNodeBuilder::build_pose_constraints(Object *object, bPoseChannel *pchan)
+void DepsgraphNodeBuilder::build_pose_constraints(Object *object,
+ bPoseChannel *pchan)
{
/* create node for constraint stack */
add_operation_node(&object->id, DEG_NODE_TYPE_BONE, pchan->name,
- function_bind(BKE_pose_constraints_evaluate, _1, scene_, object, pchan),
+ function_bind(BKE_pose_constraints_evaluate,
+ _1,
+ get_cow_datablock(scene_),
+ get_cow_datablock(object),
+ pchan),
DEG_OPCODE_BONE_CONSTRAINTS);
}
/* IK Solver Eval Steps */
-void DepsgraphNodeBuilder::build_ik_pose(Object *object, bPoseChannel *pchan, bConstraint *con)
+void DepsgraphNodeBuilder::build_ik_pose(Object *object,
+ bPoseChannel *pchan,
+ bConstraint *con)
{
bKinematicConstraint *data = (bKinematicConstraint *)con->data;
@@ -91,12 +100,18 @@ void DepsgraphNodeBuilder::build_ik_pose(Object *object, bPoseChannel *pchan, bC
/* Operation node for evaluating/running IK Solver. */
add_operation_node(&object->id, DEG_NODE_TYPE_EVAL_POSE, rootchan->name,
- function_bind(BKE_pose_iktree_evaluate, _1, scene_, object, rootchan),
+ function_bind(BKE_pose_iktree_evaluate,
+ _1,
+ get_cow_datablock(scene_),
+ get_cow_datablock(object),
+ rootchan),
DEG_OPCODE_POSE_IK_SOLVER);
}
/* Spline IK Eval Steps */
-void DepsgraphNodeBuilder::build_splineik_pose(Object *object, bPoseChannel *pchan, bConstraint *con)
+void DepsgraphNodeBuilder::build_splineik_pose(Object *object,
+ bPoseChannel *pchan,
+ bConstraint *con)
{
bSplineIKConstraint *data = (bSplineIKConstraint *)con->data;
@@ -104,30 +119,55 @@ void DepsgraphNodeBuilder::build_splineik_pose(Object *object, bPoseChannel *pch
bPoseChannel *rootchan = BKE_armature_splineik_solver_find_root(pchan, data);
/* Operation node for evaluating/running Spline IK Solver.
- * Store the "root bone" of this chain in the solver, so it knows where to start.
+ * Store the "root bone" of this chain in the solver, so it knows where to
+ * start.
*/
add_operation_node(&object->id, DEG_NODE_TYPE_EVAL_POSE, rootchan->name,
- function_bind(BKE_pose_splineik_evaluate, _1, scene_, object, rootchan),
+ function_bind(BKE_pose_splineik_evaluate,
+ _1,
+ get_cow_datablock(scene_),
+ get_cow_datablock(object),
+ rootchan),
DEG_OPCODE_POSE_SPLINE_IK_SOLVER);
}
/* Pose/Armature Bones Graph */
void DepsgraphNodeBuilder::build_rig(Object *object)
{
- bArmature *arm = (bArmature *)object->data;
+ bArmature *armature = (bArmature *)object->data;
+ const short armature_tag = armature->id.tag;
+ Scene *scene_cow;
+ Object *object_cow;
+ bArmature *armature_cow;
+ if (DEG_depsgraph_use_copy_on_write()) {
+ /* NOTE: We need to expand both object and armature, so this way we can
+ * safely create object level pose.
+ */
+ scene_cow = get_cow_datablock(scene_);
+ object_cow = expand_cow_datablock(object);
+ armature_cow = expand_cow_datablock(armature);
+ }
+ else {
+ scene_cow = scene_;
+ object_cow = object;
+ armature_cow = armature;
+ }
OperationDepsNode *op_node;
- /* animation and/or drivers linking posebones to base-armature used to define them
+ /* Animation and/or drivers linking posebones to base-armature used to
+ * define them.
+ *
* NOTE: AnimData here is really used to control animated deform properties,
- * which ideally should be able to be unique across different instances.
- * Eventually, we need some type of proxy/isolation mechanism in-between here
- * to ensure that we can use same rig multiple times in same scene...
+ * which ideally should be able to be unique across different
+ * instances. Eventually, we need some type of proxy/isolation
+ * mechanism in-between here to ensure that we can use same rig
+ * multiple times in same scene.
*/
- if ((arm->id.tag & LIB_TAG_DOIT) == 0) {
- build_animdata(&arm->id);
+ if ((armature_tag & LIB_TAG_DOIT) == 0) {
+ build_animdata(&armature->id);
/* Make sure pose is up-to-date with armature updates. */
- add_operation_node(&arm->id,
+ add_operation_node(&armature->id,
DEG_NODE_TYPE_PARAMETERS,
NULL,
DEG_OPCODE_PLACEHOLDER,
@@ -135,22 +175,22 @@ void DepsgraphNodeBuilder::build_rig(Object *object)
}
/* Rebuild pose if not up to date. */
- if (object->pose == NULL || (object->pose->flag & POSE_RECALC)) {
- BKE_pose_rebuild_ex(object, arm, false);
+ if (object_cow->pose == NULL || (object->pose->flag & POSE_RECALC)) {
+ BKE_pose_rebuild(object_cow, armature_cow);
/* XXX: Without this animation gets lost in certain circumstances
* after loading file. Need to investigate further since it does
* not happen with simple scenes..
*/
- if (object->adt) {
- object->adt->recalc |= ADT_RECALC_ANIM;
+ if (object_cow->adt) {
+ object_cow->adt->recalc |= ADT_RECALC_ANIM;
}
}
/* speed optimization for animation lookups */
- if (object->pose) {
- BKE_pose_channels_hash_make(object->pose);
- if (object->pose->flag & POSE_CONSTRAINTS_NEED_UPDATE_FLAGS) {
- BKE_pose_update_constraint_flags(object->pose);
+ if (object_cow->pose != NULL) {
+ BKE_pose_channels_hash_make(object_cow->pose);
+ if (object_cow->pose->flag & POSE_CONSTRAINTS_NEED_UPDATE_FLAGS) {
+ BKE_pose_update_constraint_flags(object_cow->pose);
}
}
@@ -171,42 +211,58 @@ void DepsgraphNodeBuilder::build_rig(Object *object)
* - Used for representing each bone within the rig
* - Acts to encapsulate the evaluation operations (base matrix + parenting,
* and constraint stack) so that they can be easily found.
- * - Everything else which depends on bone-results hook up to the component only
- * so that we can redirect those to point at either the the post-IK/
+ * - Everything else which depends on bone-results hook up to the component
+ * only so that we can redirect those to point at either the the post-IK/
* post-constraint/post-matrix steps, as needed.
*/
/* pose eval context */
op_node = add_operation_node(&object->id,
DEG_NODE_TYPE_EVAL_POSE,
- function_bind(BKE_pose_eval_init, _1, scene_, object, object->pose),
+ function_bind(BKE_pose_eval_init,
+ _1,
+ scene_cow,
+ object_cow,
+ object_cow->pose),
DEG_OPCODE_POSE_INIT);
op_node->set_as_entry();
op_node = add_operation_node(&object->id,
DEG_NODE_TYPE_EVAL_POSE,
- function_bind(BKE_pose_eval_init_ik, _1, scene_, object, object->pose),
+ function_bind(BKE_pose_eval_init_ik,
+ _1,
+ scene_cow,
+ object_cow,
+ object_cow->pose),
DEG_OPCODE_POSE_INIT_IK);
op_node = add_operation_node(&object->id,
DEG_NODE_TYPE_EVAL_POSE,
- function_bind(BKE_pose_eval_flush, _1, scene_, object, object->pose),
+ function_bind(BKE_pose_eval_flush,
+ _1,
+ scene_cow,
+ object_cow,
+ object_cow->pose),
DEG_OPCODE_POSE_DONE);
op_node->set_as_exit();
/* bones */
- BLI_LISTBASE_FOREACH (bPoseChannel *, pchan, &object->pose->chanbase) {
+ BLI_LISTBASE_FOREACH (bPoseChannel *, pchan, &object_cow->pose->chanbase) {
/* Node for bone evaluation. */
op_node = add_operation_node(&object->id, DEG_NODE_TYPE_BONE, pchan->name, NULL,
DEG_OPCODE_BONE_LOCAL);
op_node->set_as_entry();
add_operation_node(&object->id, DEG_NODE_TYPE_BONE, pchan->name,
- function_bind(BKE_pose_eval_bone, _1, scene_, object, pchan),
+ function_bind(BKE_pose_eval_bone, _1,
+ scene_cow,
+ object_cow,
+ pchan),
DEG_OPCODE_BONE_POSE_PARENT);
+ /* NOTE: Dedicated noop for easier relationship construction. */
add_operation_node(&object->id, DEG_NODE_TYPE_BONE, pchan->name,
- NULL, /* NOTE: dedicated noop for easier relationship construction */
+ NULL,
DEG_OPCODE_BONE_READY);
op_node = add_operation_node(&object->id, DEG_NODE_TYPE_BONE, pchan->name,
@@ -221,7 +277,7 @@ void DepsgraphNodeBuilder::build_rig(Object *object)
DEG_OPCODE_PARAMETERS_EVAL,
pchan->name);
}
- /* Constraints. */
+ /* Build constraints. */
if (pchan->constraints.first != NULL) {
build_pose_constraints(object, pchan);
}
@@ -233,8 +289,9 @@ void DepsgraphNodeBuilder::build_rig(Object *object)
* base transforms of a bunch of bones is done)
*
* Unsolved Issues:
- * - Care is needed to ensure that multi-headed trees work out the same as in ik-tree building
- * - Animated chain-lengths are a problem...
+ * - Care is needed to ensure that multi-headed trees work out the same
+ * as in ik-tree building
+ * - Animated chain-lengths are a problem.
*/
BLI_LISTBASE_FOREACH (bConstraint *, con, &pchan->constraints) {
switch (con->type) {
@@ -250,6 +307,13 @@ void DepsgraphNodeBuilder::build_rig(Object *object)
break;
}
}
+ /* Custom shape. */
+ /* NOTE: Custom shape datablock is already remapped to CoW version. */
+ if (pchan->custom != NULL) {
+ build_object(NULL,
+ get_orig_datablock(pchan->custom),
+ DEG_ID_LINKED_INDIRECTLY);
+ }
}
}
@@ -257,34 +321,52 @@ void DepsgraphNodeBuilder::build_proxy_rig(Object *object)
{
bArmature *arm = (bArmature *)object->data;
OperationDepsNode *op_node;
-
- build_animdata(&arm->id);
-
+ Object *object_cow;
+ if (DEG_depsgraph_use_copy_on_write()) {
+ /* NOTE: We need to expand both object and armature, so this way we can
+ * safely create object level pose.
+ */
+ object_cow = expand_cow_datablock(object);
+ }
+ else {
+ object_cow = object;
+ }
+ /* Sanity check. */
BLI_assert(object->pose != NULL);
-
+ /* Animation. */
+ build_animdata(&arm->id);
/* speed optimization for animation lookups */
BKE_pose_channels_hash_make(object->pose);
- if (object->pose->flag & POSE_CONSTRAINTS_NEED_UPDATE_FLAGS) {
- BKE_pose_update_constraint_flags(object->pose);
+ if (object_cow->pose->flag & POSE_CONSTRAINTS_NEED_UPDATE_FLAGS) {
+ BKE_pose_update_constraint_flags(object_cow->pose);
}
-
op_node = add_operation_node(&object->id,
DEG_NODE_TYPE_EVAL_POSE,
- function_bind(BKE_pose_eval_proxy_copy, _1, object),
+ function_bind(BKE_pose_eval_proxy_copy,
+ _1,
+ object_cow),
DEG_OPCODE_POSE_INIT);
op_node->set_as_entry();
-
BLI_LISTBASE_FOREACH (bPoseChannel *, pchan, &object->pose->chanbase) {
- op_node = add_operation_node(&object->id, DEG_NODE_TYPE_BONE, pchan->name,
- NULL, DEG_OPCODE_BONE_LOCAL);
+ op_node = add_operation_node(&object->id,
+ DEG_NODE_TYPE_BONE,
+ pchan->name,
+ NULL,
+ DEG_OPCODE_BONE_LOCAL);
op_node->set_as_entry();
-
- add_operation_node(&object->id, DEG_NODE_TYPE_BONE, pchan->name,
- NULL, DEG_OPCODE_BONE_READY);
-
- op_node = add_operation_node(&object->id, DEG_NODE_TYPE_BONE, pchan->name,
- NULL, DEG_OPCODE_BONE_DONE);
+ /* Bone is ready for solvers. */
+ add_operation_node(&object->id,
+ DEG_NODE_TYPE_BONE,
+ pchan->name,
+ NULL,
+ DEG_OPCODE_BONE_READY);
+ /* Bone is fully evaluated. */
+ op_node = add_operation_node(&object->id,
+ DEG_NODE_TYPE_BONE,
+ pchan->name,
+ NULL,
+ DEG_OPCODE_BONE_DONE);
op_node->set_as_exit();
/* Custom properties. */
@@ -296,9 +378,10 @@ void DepsgraphNodeBuilder::build_proxy_rig(Object *object)
pchan->name);
}
}
-
- op_node = add_operation_node(&object->id, DEG_NODE_TYPE_EVAL_POSE,
- NULL, DEG_OPCODE_POSE_DONE);
+ op_node = add_operation_node(&object->id,
+ DEG_NODE_TYPE_EVAL_POSE,
+ NULL,
+ DEG_OPCODE_POSE_DONE);
op_node->set_as_exit();
}
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes_scene.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes_scene.cc
deleted file mode 100644
index 4a487f13c3a..00000000000
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes_scene.cc
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2013 Blender Foundation.
- * All rights reserved.
- *
- * Original Author: Joshua Leung
- * Contributor(s): Based on original depsgraph.c code - Blender Foundation (2005-2013)
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file blender/depsgraph/intern/builder/deg_builder_nodes_scene.cc
- * \ingroup depsgraph
- *
- * Methods for constructing depsgraph's nodes
- */
-
-#include "intern/builder/deg_builder_nodes.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "MEM_guardedalloc.h"
-
-#include "BLI_utildefines.h"
-#include "BLI_blenlib.h"
-#include "BLI_string.h"
-
-extern "C" {
-#include "DNA_node_types.h"
-#include "DNA_object_types.h"
-#include "DNA_scene_types.h"
-
-#include "BKE_main.h"
-#include "BKE_node.h"
-} /* extern "C" */
-
-#include "DEG_depsgraph.h"
-#include "DEG_depsgraph_build.h"
-
-#include "intern/builder/deg_builder.h"
-#include "intern/nodes/deg_node.h"
-#include "intern/nodes/deg_node_component.h"
-#include "intern/nodes/deg_node_operation.h"
-#include "intern/depsgraph_types.h"
-#include "intern/depsgraph_intern.h"
-#include "util/deg_util_foreach.h"
-
-namespace DEG {
-
-void DepsgraphNodeBuilder::build_scene(Scene *scene)
-{
- /* Scene ID block. */
- add_id_node(&scene->id);
- /* timesource */
- add_time_source();
- /* build subgraph for set, and link this in... */
- // XXX: depending on how this goes, that scene itself could probably store its
- // own little partial depsgraph?
- if (scene->set != NULL) {
- build_scene(scene->set);
- }
- /* Setup currently building context. */
- scene_ = scene;
- /* scene objects */
- BLI_LISTBASE_FOREACH (Base *, base, &scene->base) {
- Object *object = base->object;
- build_object(base, object);
- }
- /* Rigidbody. */
- if (scene->rigidbody_world != NULL) {
- build_rigidbody(scene);
- }
- /* Scene's animation and drivers. */
- if (scene->adt != NULL) {
- build_animdata(&scene->id);
- }
- /* World. */
- if (scene->world != NULL) {
- build_world(scene->world);
- }
- /* Compositor nodes. */
- if (scene->nodetree != NULL) {
- build_compositor(scene);
- }
- /* Grease pencil. */
- if (scene->gpd != NULL) {
- build_gpencil(scene->gpd);
- }
- /* Cache file. */
- BLI_LISTBASE_FOREACH (CacheFile *, cachefile, &bmain_->cachefiles) {
- build_cachefile(cachefile);
- }
- /* Masks. */
- BLI_LISTBASE_FOREACH (Mask *, mask, &bmain_->mask) {
- build_mask(mask);
- }
- /* Movie clips. */
- BLI_LISTBASE_FOREACH (MovieClip *, clip, &bmain_->movieclip) {
- build_movieclip(clip);
- }
- /* Parameters evaluation for scene relations mainly. */
- add_operation_node(&scene->id,
- DEG_NODE_TYPE_PARAMETERS,
- NULL,
- DEG_OPCODE_PLACEHOLDER,
- "Scene Eval");
-}
-
-} // namespace DEG
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc
new file mode 100644
index 00000000000..4ca19f4e14f
--- /dev/null
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc
@@ -0,0 +1,174 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2013 Blender Foundation.
+ * All rights reserved.
+ *
+ * Original Author: Joshua Leung
+ * Contributor(s): Based on original depsgraph.c code - Blender Foundation (2005-2013)
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc
+ * \ingroup depsgraph
+ *
+ * Methods for constructing depsgraph's nodes
+ */
+
+#include "intern/builder/deg_builder_nodes.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_utildefines.h"
+#include "BLI_blenlib.h"
+#include "BLI_string.h"
+
+extern "C" {
+#include "DNA_node_types.h"
+#include "DNA_layer_types.h"
+#include "DNA_object_types.h"
+#include "DNA_scene_types.h"
+
+#include "BKE_layer.h"
+#include "BKE_main.h"
+#include "BKE_node.h"
+} /* extern "C" */
+
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
+#include "intern/builder/deg_builder.h"
+#include "intern/nodes/deg_node.h"
+#include "intern/nodes/deg_node_component.h"
+#include "intern/nodes/deg_node_operation.h"
+#include "intern/depsgraph_types.h"
+#include "intern/depsgraph_intern.h"
+#include "util/deg_util_foreach.h"
+
+namespace DEG {
+
+void DepsgraphNodeBuilder::build_view_layer(
+ Scene *scene,
+ ViewLayer *view_layer,
+ eDepsNode_LinkedState_Type linked_state)
+{
+ /* Scene ID block. */
+ add_id_node(&scene->id);
+ /* Time source. */
+ add_time_source();
+ /* Setup currently building context. */
+ scene_ = scene;
+ /* Expand Scene Cow datablock to get proper pointers to bases. */
+ Scene *scene_cow;
+ ViewLayer *view_layer_cow;
+ if (DEG_depsgraph_use_copy_on_write()) {
+ /* NOTE: We need to create ID nodes for all objects coming from bases,
+ * otherwise remapping will not replace objects with their CoW versions
+ * for CoW bases.
+ */
+ BLI_LISTBASE_FOREACH (Base *, base, &view_layer->object_bases) {
+ Object *object = base->object;
+ add_id_node(&object->id, false);
+ }
+ /* Create ID node for nested ID of nodetree as well, otherwise remapping
+ * will not work correct either.
+ */
+ if (scene->nodetree != NULL) {
+ add_id_node(&scene->nodetree->id, false);
+ }
+ /* Make sure we've got ID node, so we can get pointer to CoW datablock.
+ */
+ scene_cow = expand_cow_datablock(scene);
+ view_layer_cow = (ViewLayer *)BLI_findstring(
+ &scene_cow->view_layers,
+ view_layer->name,
+ offsetof(ViewLayer, name));
+ }
+ else {
+ scene_cow = scene;
+ view_layer_cow = view_layer;
+ }
+ /* Scene objects. */
+ int select_color = 1;
+ /* NOTE: Base is used for function bindings as-is, so need to pass CoW base,
+ * but object is expected to be an original one. Hence we go into some
+ * tricks here iterating over the view layer.
+ */
+ for (Base *base_orig = (Base *)view_layer->object_bases.first,
+ *base_cow = (Base *)view_layer_cow->object_bases.first;
+ base_orig != NULL;
+ base_orig = base_orig->next, base_cow = base_cow->next)
+ {
+ /* object itself */
+ build_object(base_cow, base_orig->object, linked_state);
+ base_orig->object->select_color = select_color++;
+ }
+ if (scene->camera != NULL) {
+ build_object(NULL, scene->camera, DEG_ID_LINKED_INDIRECTLY);
+ }
+ /* Rigidbody. */
+ if (scene->rigidbody_world != NULL) {
+ build_rigidbody(scene);
+ }
+ /* Scene's animation and drivers. */
+ if (scene->adt != NULL) {
+ build_animdata(&scene->id);
+ }
+ /* World. */
+ if (scene->world != NULL) {
+ build_world(scene->world);
+ }
+ /* Compositor nodes */
+ if (scene->nodetree != NULL) {
+ build_compositor(scene);
+ }
+ /* Grease pencil. */
+ if (scene->gpd != NULL) {
+ build_gpencil(scene->gpd);
+ }
+ /* Cache file. */
+ BLI_LISTBASE_FOREACH (CacheFile *, cachefile, &bmain_->cachefiles) {
+ build_cachefile(cachefile);
+ }
+ /* Masks. */
+ BLI_LISTBASE_FOREACH (Mask *, mask, &bmain_->mask) {
+ build_mask(mask);
+ }
+ /* Movie clips. */
+ BLI_LISTBASE_FOREACH (MovieClip *, clip, &bmain_->movieclip) {
+ build_movieclip(clip);
+ }
+ /* Collections. */
+ build_view_layer_collections(&scene->id, view_layer_cow);
+ /* Parameters evaluation for scene relations mainly. */
+ add_operation_node(&scene->id,
+ DEG_NODE_TYPE_PARAMETERS,
+ NULL,
+ DEG_OPCODE_PLACEHOLDER,
+ "Scene Eval");
+ /* Build all set scenes. */
+ if (scene->set != NULL) {
+ ViewLayer *set_view_layer = BKE_view_layer_from_scene_get(scene->set);
+ build_view_layer(scene->set, set_view_layer, DEG_ID_LINKED_VIA_SET);
+ }
+}
+
+} // namespace DEG
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
index 65f45186ba4..12560fa8aa1 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -61,6 +61,7 @@ extern "C" {
#include "DNA_movieclip_types.h"
#include "DNA_node_types.h"
#include "DNA_particle_types.h"
+#include "DNA_lightprobe_types.h"
#include "DNA_object_types.h"
#include "DNA_rigidbody_types.h"
#include "DNA_scene_types.h"
@@ -127,7 +128,7 @@ void modifier_walk(void *user_data,
{
BuilderWalkUserData *data = (BuilderWalkUserData *)user_data;
if (*obpoin) {
- data->builder->build_object(*obpoin);
+ data->builder->build_object(NULL, *obpoin);
}
}
@@ -140,7 +141,7 @@ void constraint_walk(bConstraint * /*con*/,
if (*idpoin) {
ID *id = *idpoin;
if (GS(id->name) == ID_OB) {
- data->builder->build_object((Object *)id);
+ data->builder->build_object(NULL, (Object *)id);
}
}
}
@@ -311,19 +312,16 @@ void DepsgraphRelationBuilder::add_collision_relations(
Scene *scene,
Object *object,
Group *group,
- int layer,
bool dupli,
const char *name)
{
unsigned int numcollobj;
- Object **collobjs = get_collisionobjects_ext(
- scene,
- object,
- group,
- layer,
- &numcollobj,
- eModifierType_Collision,
- dupli);
+ Object **collobjs = get_collisionobjects_ext(scene,
+ object,
+ group,
+ &numcollobj,
+ eModifierType_Collision,
+ dupli);
for (unsigned int i = 0; i < numcollobj; i++) {
Object *ob1 = collobjs[i];
@@ -347,9 +345,9 @@ void DepsgraphRelationBuilder::add_forcefield_relations(
bool add_absorption,
const char *name)
{
- ListBase *effectors = pdInitEffectors(scene, object, psys, eff, false);
+ ListBase *effectors = pdInitEffectors(NULL, scene, object, psys, eff, false);
if (effectors != NULL) {
- BLI_LISTBASE_FOREACH(EffectorCache *, eff, effectors) {
+ BLI_LISTBASE_FOREACH (EffectorCache *, eff, effectors) {
if (eff->ob != object) {
ComponentKey eff_key(&eff->ob->id, DEG_NODE_TYPE_TRANSFORM);
add_relation(eff_key, key, name);
@@ -387,7 +385,6 @@ void DepsgraphRelationBuilder::add_forcefield_relations(
scene,
object,
NULL,
- eff->ob->lay,
true,
"Force Absorption");
}
@@ -419,7 +416,7 @@ void DepsgraphRelationBuilder::begin_build()
nodetree->id.tag &= ~LIB_TAG_DOIT;
}
}
- FOREACH_NODETREE_END;
+ FOREACH_NODETREE_END
}
void DepsgraphRelationBuilder::build_group(Object *object, Group *group)
@@ -429,21 +426,26 @@ void DepsgraphRelationBuilder::build_group(Object *object, Group *group)
OperationKey object_local_transform_key(object != NULL ? &object->id : NULL,
DEG_NODE_TYPE_TRANSFORM,
DEG_OPCODE_TRANSFORM_LOCAL);
- BLI_LISTBASE_FOREACH (GroupObject *, go, &group->gobject) {
- if (!group_done) {
- build_object(go->ob);
+ if (!group_done) {
+ BLI_LISTBASE_FOREACH (Base *, base, &group->view_layer->object_bases) {
+ build_object(NULL, base->object);
}
- if (object != NULL) {
- ComponentKey dupli_transform_key(&go->ob->id, DEG_NODE_TYPE_TRANSFORM);
+ group_id->tag |= LIB_TAG_DOIT;
+ }
+ if (object != NULL) {
+ BLI_LISTBASE_FOREACH (Base *, base, &group->view_layer->object_bases) {
+ ComponentKey dupli_transform_key(&base->object->id, DEG_NODE_TYPE_TRANSFORM);
add_relation(dupli_transform_key, object_local_transform_key, "Dupligroup");
}
}
- group_id->tag |= LIB_TAG_DOIT;
}
-void DepsgraphRelationBuilder::build_object(Object *object)
+void DepsgraphRelationBuilder::build_object(Base *base, Object *object)
{
if (object->id.tag & LIB_TAG_DOIT) {
+ if (base != NULL) {
+ build_object_flags(base, object);
+ }
return;
}
object->id.tag |= LIB_TAG_DOIT;
@@ -463,6 +465,8 @@ void DepsgraphRelationBuilder::build_object(Object *object)
OperationKey ob_ubereval_key(&object->id,
DEG_NODE_TYPE_TRANSFORM,
DEG_OPCODE_TRANSFORM_OBJECT_UBEREVAL);
+ /* Various flags, flushing from bases/collections. */
+ build_object_flags(base, object);
/* Parenting. */
if (object->parent != NULL) {
/* Parent relationship. */
@@ -530,7 +534,7 @@ void DepsgraphRelationBuilder::build_object(Object *object)
/* Object that this is a proxy for. */
if (object->proxy != NULL) {
object->proxy->proxy_from = object;
- build_object(object->proxy);
+ build_object(NULL, object->proxy);
/* TODO(sergey): This is an inverted relation, matches old depsgraph
* behavior and need to be investigated if it still need to be inverted.
*/
@@ -544,6 +548,20 @@ void DepsgraphRelationBuilder::build_object(Object *object)
}
}
+void DepsgraphRelationBuilder::build_object_flags(Base *base, Object *object)
+{
+ if (base == NULL) {
+ return;
+ }
+ OperationKey view_layer_done_key(&scene_->id,
+ DEG_NODE_TYPE_LAYER_COLLECTIONS,
+ DEG_OPCODE_VIEW_LAYER_DONE);
+ OperationKey object_flags_key(&object->id,
+ DEG_NODE_TYPE_LAYER_COLLECTIONS,
+ DEG_OPCODE_OBJECT_BASE_FLAGS);
+ add_relation(view_layer_done_key, object_flags_key, "Base flags flush");
+}
+
void DepsgraphRelationBuilder::build_object_data(Object *object)
{
if (object->data == NULL) {
@@ -578,6 +596,9 @@ void DepsgraphRelationBuilder::build_object_data(Object *object)
case OB_CAMERA:
build_camera(object);
break;
+ case OB_LIGHTPROBE:
+ build_lightprobe(object);
+ break;
}
Key *key = BKE_key_from_object(object);
if (key != NULL) {
@@ -975,6 +996,18 @@ void DepsgraphRelationBuilder::build_animdata_curves_targets(
graph_->add_new_relation(operation_from, operation_to,
"Animation -> Prop",
true);
+ /* It is possible that animation is writing to a nested ID datablock,
+ * need to make sure animation is evaluated after target ID is copied.
+ */
+ if (DEG_depsgraph_use_copy_on_write()) {
+ const IDDepsNode *id_node_from = operation_from->owner->owner;
+ const IDDepsNode *id_node_to = operation_to->owner->owner;
+ if (id_node_from != id_node_to) {
+ ComponentKey cow_key(id_node_to->id_orig,
+ DEG_NODE_TYPE_COPY_ON_WRITE);
+ add_relation(cow_key, adt_key, "Target CoW -> Animation", true);
+ }
+ }
}
}
@@ -1013,7 +1046,6 @@ void DepsgraphRelationBuilder::build_animdata_drivers(ID *id)
/* create the driver's relations to targets */
build_driver(id, fcu);
-
/* Special case for array drivers: we can not multithread them because
* of the way how they work internally: animation system will write the
* whole array back to RNA even when changing individual array value.
@@ -1108,18 +1140,18 @@ void DepsgraphRelationBuilder::build_driver_data(ID *id, FCurve *fcu)
*/
IDDepsNode *arm_node = graph_->find_id_node(id);
char *bone_name = BLI_str_quoted_substrN(rna_path, "bones[");
- if (arm_node && bone_name) {
+ if (arm_node != NULL && bone_name != NULL) {
/* Find objects which use this, and make their eval callbacks
* depend on this.
*/
foreach (DepsRelation *rel, arm_node->outlinks) {
IDDepsNode *to_node = (IDDepsNode *)rel->to;
/* We only care about objects with pose data which use this. */
- if (GS(to_node->id->name) == ID_OB) {
- Object *object = (Object *)to_node->id;
- /* NOTE: object->pose may be NULL. */
- bPoseChannel *pchan = BKE_pose_channel_find_name(
- object->pose, bone_name);
+ if (GS(to_node->id_orig->name) == ID_OB) {
+ Object *object = (Object *)to_node->id_orig;
+ // NOTE: object->pose may be NULL
+ bPoseChannel *pchan = BKE_pose_channel_find_name(object->pose,
+ bone_name);
if (pchan != NULL) {
OperationKey bone_key(&object->id,
DEG_NODE_TYPE_BONE,
@@ -1144,6 +1176,25 @@ void DepsgraphRelationBuilder::build_driver_data(ID *id, FCurve *fcu)
else {
RNAPathKey target_key(id, rna_path);
add_relation(driver_key, target_key, "Driver -> Target");
+ /* Similar to the case with f-curves, driver might drive a nested
+ * datablock, which means driver execution should wait for that
+ * datablock to be copied.
+ */
+ if (DEG_depsgraph_use_copy_on_write()) {
+ PointerRNA id_ptr;
+ PointerRNA ptr;
+ RNA_id_pointer_create(id, &id_ptr);
+ if (RNA_path_resolve_full(&id_ptr, fcu->rna_path, &ptr, NULL, NULL)) {
+ if (id_ptr.id.data != ptr.id.data) {
+ ComponentKey cow_key((ID *)ptr.id.data,
+ DEG_NODE_TYPE_COPY_ON_WRITE);
+ add_relation(cow_key,
+ driver_key,
+ "Target CoW -> Driver",
+ true);
+ }
+ }
+ }
}
}
@@ -1249,9 +1300,9 @@ void DepsgraphRelationBuilder::build_world(World *world)
/* world's nodetree */
if (world->nodetree != NULL) {
build_nodetree(world->nodetree);
- ComponentKey ntree_key(&world->nodetree->id, DEG_NODE_TYPE_PARAMETERS);
- ComponentKey world_key(world_id, DEG_NODE_TYPE_PARAMETERS);
- add_relation(ntree_key, world_key, "NTree->World Parameters");
+ ComponentKey ntree_key(&world->nodetree->id, DEG_NODE_TYPE_SHADING);
+ ComponentKey world_key(world_id, DEG_NODE_TYPE_SHADING);
+ add_relation(ntree_key, world_key, "NTree->World Shading Update");
}
}
@@ -1273,8 +1324,8 @@ void DepsgraphRelationBuilder::build_rigidbody(Scene *scene)
/* objects - simulation participants */
if (rbw->group) {
- BLI_LISTBASE_FOREACH (GroupObject *, go, &rbw->group->gobject) {
- Object *object = go->ob;
+ BLI_LISTBASE_FOREACH (Base *, base, &rbw->group->view_layer->object_bases) {
+ Object *object = base->object;
if (object == NULL || object->type != OB_MESH) {
continue;
}
@@ -1327,8 +1378,8 @@ void DepsgraphRelationBuilder::build_rigidbody(Scene *scene)
/* constraints */
if (rbw->constraints) {
- BLI_LISTBASE_FOREACH (GroupObject *, go, &rbw->constraints->gobject) {
- Object *object = go->ob;
+ BLI_LISTBASE_FOREACH (Base *, base, &rbw->constraints->view_layer->object_bases) {
+ Object *object = base->object;
if (object == NULL || !object->rigidbody_constraint) {
continue;
}
@@ -1365,13 +1416,36 @@ void DepsgraphRelationBuilder::build_particles(Object *object)
/* Particle systems. */
BLI_LISTBASE_FOREACH (ParticleSystem *, psys, &object->particlesystem) {
ParticleSettings *part = psys->part;
- /* Animation of particle settings, */
- build_animdata(&part->id);
+
+ /* Build particle settings relations.
+ *
+ * NOTE: The call itself ensures settings are only build once.
+ */
+ build_particle_settings(part);
+
/* This particle system. */
OperationKey psys_key(&object->id,
DEG_NODE_TYPE_EVAL_PARTICLES,
DEG_OPCODE_PARTICLE_SYSTEM_EVAL,
psys->name);
+
+ /* Update particle system when settings changes. */
+ OperationKey particle_settings_key(&part->id,
+ DEG_NODE_TYPE_PARAMETERS,
+ DEG_OPCODE_PARTICLE_SETTINGS_EVAL);
+ OperationKey particle_settings_recalc_clear_key(
+ &part->id,
+ DEG_NODE_TYPE_PARAMETERS,
+ DEG_OPCODE_PARTICLE_SETTINGS_RECALC_CLEAR);
+ OperationKey psys_settings_key(&object->id,
+ DEG_NODE_TYPE_EVAL_PARTICLES,
+ DEG_OPCODE_PARTICLE_SETTINGS_EVAL,
+ psys->name);
+ add_relation(particle_settings_key, psys_settings_key, "Particle Settings Change");
+ add_relation(psys_settings_key, psys_key, "Particle Settings Update");
+ add_relation(psys_key,
+ particle_settings_recalc_clear_key,
+ "Particle Settings Recalc Clear");
add_relation(eval_init_key, psys_key, "Init -> PSys");
/* TODO(sergey): Currently particle update is just a placeholder,
* hook it to the ubereval node so particle system is getting updated
@@ -1384,18 +1458,17 @@ void DepsgraphRelationBuilder::build_particles(Object *object)
scene_,
object,
part->collision_group,
- object->lay,
true,
"Particle Collision");
}
else if ((psys->flag & PSYS_HAIR_DYNAMICS) &&
- psys->clmd && psys->clmd->coll_parms)
+ psys->clmd != NULL &&
+ psys->clmd->coll_parms != NULL)
{
add_collision_relations(psys_key,
scene_,
object,
psys->clmd->coll_parms->group,
- object->lay | scene_->lay,
true,
"Hair Collision");
}
@@ -1407,7 +1480,7 @@ void DepsgraphRelationBuilder::build_particles(Object *object)
part->effector_weights,
part->type == PART_HAIR,
"Particle Field");
- /* Boids. */
+ /* Boids .*/
if (part->boids) {
BLI_LISTBASE_FOREACH (BoidState *, state, &part->boids->states) {
BLI_LISTBASE_FOREACH (BoidRule *, rule, &state->rules) {
@@ -1426,12 +1499,11 @@ void DepsgraphRelationBuilder::build_particles(Object *object)
}
}
}
-
switch (part->ren_as) {
case PART_DRAW_OB:
if (part->dup_ob != NULL) {
/* Make sure object's relations are all built. */
- build_object(part->dup_ob);
+ build_object(NULL, part->dup_ob);
/* Build relation for the particle visualization. */
build_particles_visualization_object(object,
psys,
@@ -1460,8 +1532,31 @@ void DepsgraphRelationBuilder::build_particles(Object *object)
ComponentKey transform_key(&object->id, DEG_NODE_TYPE_TRANSFORM);
add_relation(transform_key, obdata_ubereval_key, "Partcile Eval");
- /* pointcache */
- // TODO...
+ OperationKey point_cache_reset_key(&object->id,
+ DEG_NODE_TYPE_CACHE,
+ DEG_OPCODE_POINT_CACHE_RESET);
+ add_relation(transform_key, point_cache_reset_key, "Object Transform -> Point Cache Reset");
+ add_relation(point_cache_reset_key, obdata_ubereval_key, "Point Cache Reset -> UberEval");
+}
+
+void DepsgraphRelationBuilder::build_particle_settings(ParticleSettings *part)
+{
+ ID *part_id = &part->id;
+ if (part_id->tag & LIB_TAG_DOIT) {
+ return;
+ }
+ part_id->tag |= LIB_TAG_DOIT;
+
+ /* Animation data relations. */
+ build_animdata(&part->id);
+
+ OperationKey eval_key(part_id,
+ DEG_NODE_TYPE_PARAMETERS,
+ DEG_OPCODE_PARTICLE_SETTINGS_EVAL);
+ OperationKey recalc_clear_key(part_id,
+ DEG_NODE_TYPE_PARAMETERS,
+ DEG_OPCODE_PARTICLE_SETTINGS_RECALC_CLEAR);
+ add_relation(eval_key, recalc_clear_key, "Particle Settings Clear Recalc");
}
void DepsgraphRelationBuilder::build_particles_visualization_object(
@@ -1557,12 +1652,22 @@ void DepsgraphRelationBuilder::build_obdata_geom(Object *object)
/* link components to each other */
add_relation(obdata_geom_key, geom_key, "Object Geometry Base Data");
+ OperationKey obdata_ubereval_key(&object->id,
+ DEG_NODE_TYPE_GEOMETRY,
+ DEG_OPCODE_GEOMETRY_UBEREVAL);
+
+ /* Special case: modifiers and DerivedMesh creation queries scene for various
+ * things like data mask to be used. We add relation here to ensure object is
+ * never evaluated prior to Scene's CoW is ready.
+ */
+ OperationKey scene_key(&scene_->id,
+ DEG_NODE_TYPE_PARAMETERS,
+ DEG_OPCODE_PLACEHOLDER,
+ "Scene Eval");
+ add_relation(scene_key, obdata_ubereval_key, "CoW Relation");
+
/* Modifiers */
if (object->modifiers.first != NULL) {
- OperationKey obdata_ubereval_key(&object->id,
- DEG_NODE_TYPE_GEOMETRY,
- DEG_OPCODE_GEOMETRY_UBEREVAL);
-
BLI_LISTBASE_FOREACH (ModifierData *, md, &object->modifiers) {
const ModifierTypeInfo *mti = modifierType_getInfo((ModifierType)md->type);
if (mti->updateDepsgraph) {
@@ -1590,6 +1695,14 @@ void DepsgraphRelationBuilder::build_obdata_geom(Object *object)
Material *ma = give_current_material(object, a);
if (ma != NULL) {
build_material(ma);
+
+ if (object->type == OB_MESH) {
+ OperationKey material_key(&ma->id,
+ DEG_NODE_TYPE_SHADING,
+ DEG_OPCODE_MATERIAL_UPDATE);
+ OperationKey shading_key(&object->id, DEG_NODE_TYPE_SHADING, DEG_OPCODE_SHADING);
+ add_relation(material_key, shading_key, "Material Update");
+ }
}
}
}
@@ -1668,18 +1781,18 @@ void DepsgraphRelationBuilder::build_obdata_geom(Object *object)
// XXX: these needs geom data, but where is geom stored?
if (cu->bevobj) {
ComponentKey bevob_key(&cu->bevobj->id, DEG_NODE_TYPE_GEOMETRY);
- build_object(cu->bevobj);
+ build_object(NULL, cu->bevobj);
add_relation(bevob_key, geom_key, "Curve Bevel");
}
if (cu->taperobj) {
ComponentKey taperob_key(&cu->taperobj->id, DEG_NODE_TYPE_GEOMETRY);
- build_object(cu->taperobj);
+ build_object(NULL, cu->taperobj);
add_relation(taperob_key, geom_key, "Curve Taper");
}
if (object->type == OB_FONT) {
if (cu->textoncurve) {
ComponentKey textoncurve_key(&cu->textoncurve->id, DEG_NODE_TYPE_GEOMETRY);
- build_object(cu->textoncurve);
+ build_object(NULL, cu->textoncurve);
add_relation(textoncurve_key, geom_key, "Text on Curve");
}
}
@@ -1714,11 +1827,17 @@ void DepsgraphRelationBuilder::build_camera(Object *object)
return;
}
camera_id->tag |= LIB_TAG_DOIT;
+
+ ComponentKey object_parameters_key(&object->id, DEG_NODE_TYPE_PARAMETERS);
+ ComponentKey camera_parameters_key(camera_id, DEG_NODE_TYPE_PARAMETERS);
+
+ add_relation(camera_parameters_key, object_parameters_key,
+ "Camera -> Object");
+
/* DOF */
- if (cam->dof_ob) {
- ComponentKey ob_param_key(&object->id, DEG_NODE_TYPE_PARAMETERS);
+ if (cam->dof_ob != NULL) {
ComponentKey dof_ob_key(&cam->dof_ob->id, DEG_NODE_TYPE_TRANSFORM);
- add_relation(dof_ob_key, ob_param_key, "Camera DOF");
+ add_relation(dof_ob_key, object_parameters_key, "Camera DOF");
}
}
@@ -1731,30 +1850,44 @@ void DepsgraphRelationBuilder::build_lamp(Object *object)
return;
}
lamp_id->tag |= LIB_TAG_DOIT;
+
+ ComponentKey object_parameters_key(&object->id, DEG_NODE_TYPE_PARAMETERS);
+ ComponentKey lamp_parameters_key(lamp_id, DEG_NODE_TYPE_PARAMETERS);
+
+ add_relation(lamp_parameters_key, object_parameters_key,
+ "Lamp -> Object");
+
/* lamp's nodetree */
if (la->nodetree != NULL) {
build_nodetree(la->nodetree);
- ComponentKey parameters_key(lamp_id, DEG_NODE_TYPE_PARAMETERS);
- ComponentKey nodetree_key(&la->nodetree->id, DEG_NODE_TYPE_PARAMETERS);
- add_relation(nodetree_key, parameters_key, "NTree->Lamp Parameters");
+ ComponentKey nodetree_key(&la->nodetree->id, DEG_NODE_TYPE_SHADING);
+ add_relation(nodetree_key, lamp_parameters_key, "NTree->Lamp Parameters");
}
/* textures */
build_texture_stack(la->mtex);
+
+ if (DEG_depsgraph_use_copy_on_write()) {
+ /* Make sure copy on write of lamp data is always properly updated for
+ * visible lamps.
+ */
+ OperationKey ob_copy_on_write_key(&object->id,
+ DEG_NODE_TYPE_COPY_ON_WRITE,
+ DEG_OPCODE_COPY_ON_WRITE);
+ OperationKey lamp_copy_on_write_key(lamp_id,
+ DEG_NODE_TYPE_COPY_ON_WRITE,
+ DEG_OPCODE_COPY_ON_WRITE);
+ add_relation(lamp_copy_on_write_key, ob_copy_on_write_key, "Eval Order");
+ }
}
void DepsgraphRelationBuilder::build_nodetree(bNodeTree *ntree)
{
- if (!ntree)
+ if (ntree == NULL) {
return;
-
+ }
ID *ntree_id = &ntree->id;
-
build_animdata(ntree_id);
-
- OperationKey parameters_key(ntree_id,
- DEG_NODE_TYPE_PARAMETERS,
- DEG_OPCODE_PARAMETERS_EVAL);
-
+ ComponentKey shading_key(ntree_id, DEG_NODE_TYPE_SHADING);
/* nodetree's nodes... */
BLI_LISTBASE_FOREACH (bNode *, bnode, &ntree->nodes) {
ID *id = bnode->id;
@@ -1772,7 +1905,7 @@ void DepsgraphRelationBuilder::build_nodetree(bNodeTree *ntree)
/* nothing for now. */
}
else if (id_type == ID_OB) {
- build_object((Object *)id);
+ build_object(NULL, (Object *)id);
}
else if (id_type == ID_SCE) {
/* Scenes are used by compositor trees, and handled by render
@@ -1788,15 +1921,22 @@ void DepsgraphRelationBuilder::build_nodetree(bNodeTree *ntree)
build_nodetree(group_ntree);
group_ntree->id.tag |= LIB_TAG_DOIT;
}
- OperationKey group_parameters_key(&group_ntree->id,
- DEG_NODE_TYPE_PARAMETERS,
- DEG_OPCODE_PARAMETERS_EVAL);
- add_relation(group_parameters_key, parameters_key, "Group Node");
+ ComponentKey group_shading_key(&group_ntree->id,
+ DEG_NODE_TYPE_SHADING);
+ add_relation(group_shading_key, shading_key, "Group Node");
}
else {
BLI_assert(!"Unknown ID type used for node");
}
}
+
+ OperationKey shading_update_key(ntree_id,
+ DEG_NODE_TYPE_SHADING,
+ DEG_OPCODE_MATERIAL_UPDATE);
+ OperationKey shading_parameters_key(ntree_id,
+ DEG_NODE_TYPE_SHADING_PARAMETERS,
+ DEG_OPCODE_MATERIAL_UPDATE);
+ add_relation(shading_parameters_key, shading_update_key, "NTree Shading Parameters");
}
/* Recursively build graph for material */
@@ -1818,12 +1958,11 @@ void DepsgraphRelationBuilder::build_material(Material *ma)
if (ma->nodetree != NULL) {
build_nodetree(ma->nodetree);
OperationKey ntree_key(&ma->nodetree->id,
- DEG_NODE_TYPE_PARAMETERS,
- DEG_OPCODE_PARAMETERS_EVAL);
+ DEG_NODE_TYPE_SHADING,
+ DEG_OPCODE_MATERIAL_UPDATE);
OperationKey material_key(&ma->id,
DEG_NODE_TYPE_SHADING,
- DEG_OPCODE_PLACEHOLDER,
- "Material Update");
+ DEG_OPCODE_MATERIAL_UPDATE);
add_relation(ntree_key, material_key, "Material's NTree");
}
}
@@ -1899,4 +2038,117 @@ void DepsgraphRelationBuilder::build_movieclip(MovieClip *clip)
build_animdata(&clip->id);
}
+void DepsgraphRelationBuilder::build_lightprobe(Object *object)
+{
+ LightProbe *probe = (LightProbe *)object->data;
+ ID *probe_id = &probe->id;
+ if (probe_id->tag & LIB_TAG_DOIT) {
+ return;
+ }
+ probe_id->tag |= LIB_TAG_DOIT;
+ build_animdata(&probe->id);
+
+ OperationKey probe_key(probe_id,
+ DEG_NODE_TYPE_PARAMETERS,
+ DEG_OPCODE_PLACEHOLDER,
+ "LightProbe Eval");
+ OperationKey object_key(&object->id,
+ DEG_NODE_TYPE_PARAMETERS,
+ DEG_OPCODE_PLACEHOLDER,
+ "LightProbe Eval");
+ add_relation(probe_key, object_key, "LightProbe Update");
+}
+
+void DepsgraphRelationBuilder::build_copy_on_write_relations()
+{
+ foreach (IDDepsNode *id_node, graph_->id_nodes) {
+ build_copy_on_write_relations(id_node);
+ }
+}
+
+void DepsgraphRelationBuilder::build_copy_on_write_relations(IDDepsNode *id_node)
+{
+ ID *id_orig = id_node->id_orig;
+
+ TimeSourceKey time_source_key;
+ OperationKey copy_on_write_key(id_orig,
+ DEG_NODE_TYPE_COPY_ON_WRITE,
+ DEG_OPCODE_COPY_ON_WRITE);
+ /* XXX: This is a quick hack to make Alt-A to work. */
+ // add_relation(time_source_key, copy_on_write_key, "Fluxgate capacitor hack");
+ /* Resat of code is using rather low level trickery, so need to get some
+ * explicit pointers.
+ */
+ DepsNode *node_cow = find_node(copy_on_write_key);
+ OperationDepsNode *op_cow = node_cow->get_exit_operation();
+ /* Plug any other components to this one. */
+ GHASH_FOREACH_BEGIN(ComponentDepsNode *, comp_node, id_node->components)
+ {
+ if (comp_node->type == DEG_NODE_TYPE_COPY_ON_WRITE) {
+ /* Copy-on-write component never depends on itself. */
+ continue;
+ }
+ if (!comp_node->depends_on_cow()) {
+ /* Component explicitly requests to not add relation. */
+ continue;
+ }
+ /* All entry operations of each component should wait for a proper
+ * copy of ID.
+ */
+ OperationDepsNode *op_entry = comp_node->get_entry_operation();
+ if (op_entry != NULL) {
+ graph_->add_new_relation(op_cow, op_entry, "CoW Dependency");
+ }
+ /* All dangling operations should also be executed after copy-on-write. */
+ GHASH_FOREACH_BEGIN(OperationDepsNode *, op_node, comp_node->operations_map)
+ {
+ if (op_node->inlinks.size() == 0) {
+ graph_->add_new_relation(op_cow, op_node, "CoW Dependency");
+ }
+ else {
+ bool has_same_id_dependency = false;
+ foreach (DepsRelation *rel, op_node->inlinks) {
+ if (rel->from->type != DEG_NODE_TYPE_OPERATION) {
+ continue;
+ }
+ OperationDepsNode *op_node_from = (OperationDepsNode *)rel->from;
+ if (op_node_from->owner->owner == op_node->owner->owner) {
+ has_same_id_dependency = true;
+ break;
+ }
+ }
+ if (!has_same_id_dependency) {
+ graph_->add_new_relation(op_cow, op_node, "CoW Dependency");
+ }
+ }
+ }
+ GHASH_FOREACH_END();
+ /* NOTE: We currently ignore implicit relations to an external
+ * datablocks for copy-on-write operations. This means, for example,
+ * copy-on-write component of Object will not wait for copy-on-write
+ * component of it's Mesh. This is because pointers are all known
+ * already so remapping will happen all correct. And then If some object
+ * evaluation step needs geometry, it will have transitive dependency
+ * to Mesh copy-on-write already.
+ */
+ }
+ GHASH_FOREACH_END();
+ /* TODO(sergey): This solves crash for now, but causes too many
+ * updates potentially.
+ */
+ if (GS(id_orig->name) == ID_OB) {
+ Object *object = (Object *)id_orig;
+ ID *object_data_id = (ID *)object->data;
+ if (object_data_id != NULL) {
+ OperationKey data_copy_on_write_key(object_data_id,
+ DEG_NODE_TYPE_COPY_ON_WRITE,
+ DEG_OPCODE_COPY_ON_WRITE);
+ add_relation(data_copy_on_write_key, copy_on_write_key, "Eval Order");
+ }
+ else {
+ BLI_assert(object->type == OB_EMPTY);
+ }
+ }
+}
+
} // namespace DEG
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.h b/source/blender/depsgraph/intern/builder/deg_builder_relations.h
index aa8dc2a4982..ea7e23eca79 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.h
@@ -56,6 +56,7 @@ struct ID;
struct FCurve;
struct Group;
struct Key;
+struct LayerCollection;
struct Main;
struct Mask;
struct Material;
@@ -67,7 +68,9 @@ struct Object;
struct bPoseChannel;
struct bConstraint;
struct ParticleSystem;
+struct ParticleSettings;
struct Scene;
+struct ViewLayer;
struct Tex;
struct World;
struct EffectorWeights;
@@ -189,9 +192,10 @@ struct DepsgraphRelationBuilder
const char *description,
bool check_unique = false);
- void build_scene(Scene *scene);
+ void build_view_layer(Scene *scene, ViewLayer *view_layer);
void build_group(Object *object, Group *group);
- void build_object(Object *object);
+ void build_object(Base *base, Object *object);
+ void build_object_flags(Base *base, Object *object);
void build_object_data(Object *object);
void build_object_parent(Object *object);
void build_constraints(ID *id,
@@ -216,6 +220,7 @@ struct DepsgraphRelationBuilder
void build_world(World *world);
void build_rigidbody(Scene *scene);
void build_particles(Object *object);
+ void build_particle_settings(ParticleSettings *part);
void build_particles_visualization_object(Object *object,
ParticleSystem *psys,
Object *draw_object);
@@ -243,12 +248,12 @@ struct DepsgraphRelationBuilder
void build_cachefile(CacheFile *cache_file);
void build_mask(Mask *mask);
void build_movieclip(MovieClip *clip);
+ void build_lightprobe(Object *object);
void add_collision_relations(const OperationKey &key,
Scene *scene,
Object *object,
Group *group,
- int layer,
bool dupli,
const char *name);
void add_forcefield_relations(const OperationKey &key,
@@ -256,8 +261,24 @@ struct DepsgraphRelationBuilder
Object *object,
ParticleSystem *psys,
EffectorWeights *eff,
- bool add_absorption,
- const char *name);
+ bool add_absorption, const char *name);
+
+ struct LayerCollectionState {
+ int index;
+ OperationKey init_key;
+ OperationKey done_key;
+ OperationKey prev_key;
+ };
+ void build_layer_collection(ID *owner_id,
+ LayerCollection *layer_collection,
+ LayerCollectionState *state);
+ void build_layer_collections(ID *owner_id,
+ ListBase *layer_collections,
+ LayerCollectionState *state);
+ void build_view_layer_collections(struct ID *owner_id, ViewLayer *view_layer);
+
+ void build_copy_on_write_relations();
+ void build_copy_on_write_relations(IDDepsNode *id_node);
template <typename KeyType>
OperationDepsNode *find_operation_node(const KeyType &key);
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations_impl.h b/source/blender/depsgraph/intern/builder/deg_builder_relations_impl.h
index b7dd05517cf..485586e844f 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations_impl.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations_impl.h
@@ -180,7 +180,7 @@ bool DepsgraphRelationBuilder::is_same_nodetree_node_dependency(
return false;
}
/* Check if this is actually a node tree. */
- if (GS(op_from->owner->owner->id->name) != ID_NT) {
+ if (GS(op_from->owner->owner->id_orig->name) != ID_NT) {
return false;
}
/* Different node trees. */
@@ -213,7 +213,7 @@ bool DepsgraphRelationBuilder::is_same_shapekey_dependency(
return false;
}
/* Check if this is actually a shape key datablock. */
- if (GS(op_from->owner->owner->id->name) != ID_KE) {
+ if (GS(op_from->owner->owner->id_orig->name) != ID_KE) {
return false;
}
/* Different key data blocks. */
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations_layer_collection.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations_layer_collection.cc
new file mode 100644
index 00000000000..9cf82b5fb47
--- /dev/null
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations_layer_collection.cc
@@ -0,0 +1,124 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2013 Blender Foundation.
+ * All rights reserved.
+ *
+ * Original Author: Joshua Leung
+ * Contributor(s): Based on original depsgraph.c code - Blender Foundation (2005-2013)
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/depsgraph/intern/builder/deg_builder_relations_layer_collection.cc
+ * \ingroup depsgraph
+ *
+ * Methods for constructing depsgraph
+ */
+
+#include "intern/builder/deg_builder_relations.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <cstring> /* required for STREQ later on. */
+
+#include "MEM_guardedalloc.h"
+
+extern "C" {
+#include "BLI_blenlib.h"
+#include "BLI_utildefines.h"
+
+#include "DNA_node_types.h"
+#include "DNA_object_types.h"
+#include "DNA_scene_types.h"
+
+#include "BKE_layer.h"
+#include "BKE_main.h"
+#include "BKE_node.h"
+
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+} /* extern "C" */
+
+#include "intern/builder/deg_builder.h"
+#include "intern/builder/deg_builder_pchanmap.h"
+
+#include "intern/nodes/deg_node.h"
+#include "intern/nodes/deg_node_component.h"
+#include "intern/nodes/deg_node_operation.h"
+
+#include "intern/depsgraph_intern.h"
+#include "intern/depsgraph_types.h"
+
+#include "util/deg_util_foreach.h"
+
+namespace DEG {
+
+void DepsgraphRelationBuilder::build_layer_collection(
+ ID *owner_id,
+ LayerCollection *layer_collection,
+ LayerCollectionState *state)
+{
+ OperationKey layer_key(owner_id,
+ DEG_NODE_TYPE_LAYER_COLLECTIONS,
+ DEG_OPCODE_VIEW_LAYER_EVAL,
+ layer_collection->scene_collection->name,
+ state->index);
+ add_relation(state->prev_key, layer_key, "Layer collection order");
+
+ ++state->index;
+ state->prev_key = layer_key;
+
+ /* Recurs into nested layer collections. */
+ build_layer_collections(owner_id, &layer_collection->layer_collections, state);
+}
+
+void DepsgraphRelationBuilder::build_layer_collections(
+ ID *owner_id,
+ ListBase *layer_collections,
+ LayerCollectionState *state)
+{
+ BLI_LISTBASE_FOREACH (LayerCollection *, layer_collection, layer_collections) {
+ /* Recurs into the layer. */
+ build_layer_collection(owner_id, layer_collection, state);
+ }
+}
+
+void DepsgraphRelationBuilder::build_view_layer_collections(
+ ID *owner_id,
+ ViewLayer *view_layer)
+{
+ LayerCollectionState state;
+ state.index = 0;
+
+ OperationKey init_key(owner_id,
+ DEG_NODE_TYPE_LAYER_COLLECTIONS,
+ DEG_OPCODE_VIEW_LAYER_INIT);
+ OperationKey done_key(owner_id,
+ DEG_NODE_TYPE_LAYER_COLLECTIONS,
+ DEG_OPCODE_VIEW_LAYER_DONE);
+
+ state.init_key = init_key;
+ state.done_key = done_key;
+ state.prev_key = init_key;
+
+ build_layer_collections(owner_id, &view_layer->layer_collections, &state);
+
+ add_relation(state.prev_key, done_key, "Layer collection order");
+}
+
+} // namespace DEG
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations_rig.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations_rig.cc
index 4a822fe7477..563acd01bf2 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations_rig.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations_rig.cc
@@ -387,16 +387,12 @@ void DepsgraphRelationBuilder::build_rig(Object *object)
OperationKey bone_pose_key(&object->id, DEG_NODE_TYPE_BONE, pchan->name, DEG_OPCODE_BONE_POSE_PARENT);
OperationKey bone_ready_key(&object->id, DEG_NODE_TYPE_BONE, pchan->name, DEG_OPCODE_BONE_READY);
OperationKey bone_done_key(&object->id, DEG_NODE_TYPE_BONE, pchan->name, DEG_OPCODE_BONE_DONE);
-
pchan->flag &= ~POSE_DONE;
-
- /* pose init to bone local */
+ /* Pose init to bone local. */
add_relation(init_key, bone_local_key, "PoseEval Source-Bone Link");
-
- /* local to pose parenting operation */
+ /* Local to pose parenting operation. */
add_relation(bone_local_key, bone_pose_key, "Bone Local - PoseSpace Link");
-
- /* parent relation */
+ /* Parent relation. */
if (pchan->parent != NULL) {
eDepsOperation_Code parent_key_opcode;
@@ -411,8 +407,7 @@ void DepsgraphRelationBuilder::build_rig(Object *object)
OperationKey parent_key(&object->id, DEG_NODE_TYPE_BONE, pchan->parent->name, parent_key_opcode);
add_relation(parent_key, bone_pose_key, "Parent Bone -> Child Bone");
}
-
- /* constraints */
+ /* Buil constraints. */
if (pchan->constraints.first != NULL) {
/* constraints stack and constraint dependencies */
build_constraints(&object->id, DEG_NODE_TYPE_BONE, pchan->name, &pchan->constraints, &root_map);
@@ -439,6 +434,10 @@ void DepsgraphRelationBuilder::build_rig(Object *object)
/* assume that all bones must be done for the pose to be ready (for deformers) */
add_relation(bone_done_key, flush_key, "PoseEval Result-Bone Link");
+ /* Custom shape. */
+ if (pchan->custom != NULL) {
+ build_object(NULL, pchan->custom);
+ }
}
}
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations_scene.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations_scene.cc
deleted file mode 100644
index 93b4f77bb6e..00000000000
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations_scene.cc
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2013 Blender Foundation.
- * All rights reserved.
- *
- * Original Author: Joshua Leung
- * Contributor(s): Based on original depsgraph.c code - Blender Foundation (2005-2013)
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file blender/depsgraph/intern/builder/deg_builder_relations_scene.cc
- * \ingroup depsgraph
- *
- * Methods for constructing depsgraph
- */
-
-#include "intern/builder/deg_builder_relations.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <cstring> /* required for STREQ later on. */
-
-#include "MEM_guardedalloc.h"
-
-#include "BLI_utildefines.h"
-#include "BLI_blenlib.h"
-
-extern "C" {
-#include "DNA_node_types.h"
-#include "DNA_object_types.h"
-#include "DNA_scene_types.h"
-
-#include "BKE_main.h"
-#include "BKE_node.h"
-} /* extern "C" */
-
-#include "DEG_depsgraph.h"
-#include "DEG_depsgraph_build.h"
-
-#include "intern/builder/deg_builder.h"
-#include "intern/builder/deg_builder_pchanmap.h"
-
-#include "intern/nodes/deg_node.h"
-#include "intern/nodes/deg_node_component.h"
-#include "intern/nodes/deg_node_id.h"
-#include "intern/nodes/deg_node_operation.h"
-
-#include "intern/depsgraph_intern.h"
-#include "intern/depsgraph_types.h"
-
-#include "util/deg_util_foreach.h"
-
-namespace DEG {
-
-void DepsgraphRelationBuilder::build_scene(Scene *scene)
-{
- if (scene->set != NULL) {
- build_scene(scene->set);
- }
- /* Setup currently building context. */
- scene_ = scene;
- /* Scene objects. */
- BLI_LISTBASE_FOREACH (Base *, base, &scene->base) {
- Object *object = base->object;
- build_object(object);
- }
- /* Rigidbody. */
- if (scene->rigidbody_world != NULL) {
- build_rigidbody(scene);
- }
- /* Scene's animation and drivers. */
- if (scene->adt != NULL) {
- build_animdata(&scene->id);
- }
- /* World. */
- if (scene->world != NULL) {
- build_world(scene->world);
- }
- /* Compositor nodes. */
- if (scene->nodetree != NULL) {
- build_compositor(scene);
- }
- /* Grease pencil. */
- if (scene->gpd != NULL) {
- build_gpencil(scene->gpd);
- }
- /* Masks. */
- BLI_LISTBASE_FOREACH (Mask *, mask, &bmain_->mask) {
- build_mask(mask);
- }
- /* Movie clips. */
- BLI_LISTBASE_FOREACH (MovieClip *, clip, &bmain_->movieclip) {
- build_movieclip(clip);
- }
- for (Depsgraph::OperationNodes::const_iterator it_op = graph_->operations.begin();
- it_op != graph_->operations.end();
- ++it_op)
- {
- OperationDepsNode *node = *it_op;
- IDDepsNode *id_node = node->owner->owner;
- ID *id = id_node->id;
- if (GS(id->name) == ID_OB) {
- Object *object = (Object *)id;
- object->customdata_mask |= node->customdata_mask;
- }
- }
-}
-
-} // namespace DEG
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc
new file mode 100644
index 00000000000..cfb98fe2f79
--- /dev/null
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc
@@ -0,0 +1,136 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2013 Blender Foundation.
+ * All rights reserved.
+ *
+ * Original Author: Joshua Leung
+ * Contributor(s): Based on original depsgraph.c code - Blender Foundation (2005-2013)
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc
+ * \ingroup depsgraph
+ *
+ * Methods for constructing depsgraph
+ */
+
+#include "intern/builder/deg_builder_relations.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <cstring> /* required for STREQ later on. */
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_utildefines.h"
+#include "BLI_blenlib.h"
+
+extern "C" {
+#include "DNA_node_types.h"
+#include "DNA_object_types.h"
+#include "DNA_scene_types.h"
+
+#include "BKE_layer.h"
+#include "BKE_main.h"
+#include "BKE_node.h"
+} /* extern "C" */
+
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
+#include "intern/builder/deg_builder.h"
+#include "intern/builder/deg_builder_pchanmap.h"
+
+#include "intern/nodes/deg_node.h"
+#include "intern/nodes/deg_node_component.h"
+#include "intern/nodes/deg_node_id.h"
+#include "intern/nodes/deg_node_operation.h"
+
+#include "intern/depsgraph_intern.h"
+#include "intern/depsgraph_types.h"
+
+#include "util/deg_util_foreach.h"
+
+namespace DEG {
+
+void DepsgraphRelationBuilder::build_view_layer(Scene *scene, ViewLayer *view_layer)
+{
+ /* Setup currently building context. */
+ scene_ = scene;
+ /* Scene objects. */
+ /* NOTE: Nodes builder requires us to pass CoW base because it's being
+ * passed to the evaluation functions. During relations builder we only
+ * do NULL-pointer check of the base, so it's fine to pass original one.
+ */
+ BLI_LISTBASE_FOREACH (Base *, base, &view_layer->object_bases) {
+ build_object(base, base->object);
+ }
+ if (scene->camera != NULL) {
+ build_object(NULL, scene->camera);
+ }
+ /* Rigidbody. */
+ if (scene->rigidbody_world != NULL) {
+ build_rigidbody(scene);
+ }
+ /* Scene's animation and drivers. */
+ if (scene->adt != NULL) {
+ build_animdata(&scene->id);
+ }
+ /* World. */
+ if (scene->world != NULL) {
+ build_world(scene->world);
+ }
+ /* Compositor nodes. */
+ if (scene->nodetree != NULL) {
+ build_compositor(scene);
+ }
+ /* Grease pencil. */
+ if (scene->gpd != NULL) {
+ build_gpencil(scene->gpd);
+ }
+ /* Masks. */
+ BLI_LISTBASE_FOREACH (Mask *, mask, &bmain_->mask) {
+ build_mask(mask);
+ }
+ /* Movie clips. */
+ BLI_LISTBASE_FOREACH (MovieClip *, clip, &bmain_->movieclip) {
+ build_movieclip(clip);
+ }
+ /* Collections. */
+ build_view_layer_collections(&scene_->id, view_layer);
+ /* TODO(sergey): Do this flush on CoW object? */
+ foreach (OperationDepsNode *node, graph_->operations) {
+ IDDepsNode *id_node = node->owner->owner;
+ ID *id = id_node->id_orig;
+ if (GS(id->name) == ID_OB) {
+ Object *object = (Object *)id;
+ object->customdata_mask |= node->customdata_mask;
+ }
+ }
+ /* Build all set scenes. */
+ if (scene->set != NULL) {
+ ViewLayer *set_view_layer = BKE_view_layer_from_scene_get(scene->set);
+ build_view_layer(scene->set, set_view_layer);
+ }
+
+ graph_->scene = scene;
+ graph_->view_layer = view_layer;
+}
+
+} // namespace DEG
diff --git a/source/blender/depsgraph/intern/debug/deg_debug_relations_graphviz.cc b/source/blender/depsgraph/intern/debug/deg_debug_relations_graphviz.cc
index b76cd9eaadd..a717448df4a 100644
--- a/source/blender/depsgraph/intern/debug/deg_debug_relations_graphviz.cc
+++ b/source/blender/depsgraph/intern/debug/deg_debug_relations_graphviz.cc
@@ -81,18 +81,21 @@ static const char *deg_debug_colors_light[] = {
#ifdef COLOR_SCHEME_NODE_TYPE
static const int deg_debug_node_type_color_map[][2] = {
{DEG_NODE_TYPE_TIMESOURCE, 0},
- {DEG_NODE_TYPE_ID_REF, 2},
+ {DEG_NODE_TYPE_ID_REF, 1},
/* Outer Types */
- {DEG_NODE_TYPE_PARAMETERS, 2},
- {DEG_NODE_TYPE_PROXY, 3},
- {DEG_NODE_TYPE_ANIMATION, 4},
- {DEG_NODE_TYPE_TRANSFORM, 5},
- {DEG_NODE_TYPE_GEOMETRY, 6},
- {DEG_NODE_TYPE_SEQUENCER, 7},
- {DEG_NODE_TYPE_SHADING, 8},
- {DEG_NODE_TYPE_CACHE, 9},
- {-1, 0}
+ {DEG_NODE_TYPE_PARAMETERS, 2},
+ {DEG_NODE_TYPE_PROXY, 3},
+ {DEG_NODE_TYPE_ANIMATION, 4},
+ {DEG_NODE_TYPE_TRANSFORM, 5},
+ {DEG_NODE_TYPE_GEOMETRY, 6},
+ {DEG_NODE_TYPE_SEQUENCER, 7},
+ {DEG_NODE_TYPE_SHADING, 8},
+ {DEG_NODE_TYPE_SHADING_PARAMETERS, 9},
+ {DEG_NODE_TYPE_CACHE, 10},
+ {DEG_NODE_TYPE_LAYER_COLLECTIONS, 11},
+ {DEG_NODE_TYPE_COPY_ON_WRITE, 12},
+ {-1, 0}
};
#endif
@@ -285,12 +288,6 @@ static void deg_debug_graphviz_node_single(const DebugContext &ctx,
{
const char *shape = "box";
string name = node->identifier();
- if (node->type == DEG_NODE_TYPE_ID_REF) {
- IDDepsNode *id_node = (IDDepsNode *)node;
- char buf[256];
- BLI_snprintf(buf, sizeof(buf), " (Layers: %u)", id_node->layers);
- name += buf;
- }
deg_debug_fprintf(ctx, "// %s\n", name.c_str());
deg_debug_fprintf(ctx, "\"node_%p\"", node);
deg_debug_fprintf(ctx, "[");
@@ -311,12 +308,6 @@ static void deg_debug_graphviz_node_cluster_begin(const DebugContext &ctx,
const DepsNode *node)
{
string name = node->identifier();
- if (node->type == DEG_NODE_TYPE_ID_REF) {
- IDDepsNode *id_node = (IDDepsNode *)node;
- char buf[256];
- BLI_snprintf(buf, sizeof(buf), " (Layers: %u)", id_node->layers);
- name += buf;
- }
deg_debug_fprintf(ctx, "// %s\n", name.c_str());
deg_debug_fprintf(ctx, "subgraph \"cluster_%p\" {" NL, node);
// deg_debug_fprintf(ctx, "label=<<B>%s</B>>;" NL, name);
@@ -378,8 +369,12 @@ static void deg_debug_graphviz_node(const DebugContext &ctx,
case DEG_NODE_TYPE_EVAL_POSE:
case DEG_NODE_TYPE_BONE:
case DEG_NODE_TYPE_SHADING:
+ case DEG_NODE_TYPE_SHADING_PARAMETERS:
case DEG_NODE_TYPE_CACHE:
+ case DEG_NODE_TYPE_LAYER_COLLECTIONS:
case DEG_NODE_TYPE_EVAL_PARTICLES:
+ case DEG_NODE_TYPE_COPY_ON_WRITE:
+ case DEG_NODE_TYPE_BATCH_CACHE:
{
ComponentDepsNode *comp_node = (ComponentDepsNode *)node;
if (!comp_node->operations.empty()) {
@@ -394,9 +389,13 @@ static void deg_debug_graphviz_node(const DebugContext &ctx,
}
break;
}
- default:
+ case DEG_NODE_TYPE_UNDEFINED:
+ case DEG_NODE_TYPE_TIMESOURCE:
+ case DEG_NODE_TYPE_OPERATION:
deg_debug_graphviz_node_single(ctx, node);
break;
+ case NUM_DEG_NODE_TYPES:
+ break;
}
}
diff --git a/source/blender/depsgraph/intern/debug/deg_debug_stats_gnuplot.cc b/source/blender/depsgraph/intern/debug/deg_debug_stats_gnuplot.cc
index e92c7730482..35888f8d5e3 100644
--- a/source/blender/depsgraph/intern/debug/deg_debug_stats_gnuplot.cc
+++ b/source/blender/depsgraph/intern/debug/deg_debug_stats_gnuplot.cc
@@ -110,7 +110,7 @@ void write_stats_data(const DebugContext& ctx)
deg_debug_fprintf(ctx, "$data << EOD" NL);
foreach (const StatsEntry& entry, stats) {
deg_debug_fprintf(ctx, "\"%s\",%f" NL,
- entry.id_node->id->name + 2,
+ entry.id_node->id_orig->name + 2,
entry.time);
}
deg_debug_fprintf(ctx, "EOD" NL);
diff --git a/source/blender/depsgraph/intern/depsgraph.cc b/source/blender/depsgraph/intern/depsgraph.cc
index a016d623ea9..01a4aad13ae 100644
--- a/source/blender/depsgraph/intern/depsgraph.cc
+++ b/source/blender/depsgraph/intern/depsgraph.cc
@@ -46,8 +46,6 @@ extern "C" {
#include "DNA_object_types.h"
#include "DNA_sequence_types.h"
-#include "BKE_depsgraph.h"
-
#include "RNA_access.h"
}
@@ -56,6 +54,8 @@ extern "C" {
#include "DEG_depsgraph.h"
+#include "intern/eval/deg_eval_copy_on_write.h"
+
#include "intern/nodes/deg_node.h"
#include "intern/nodes/deg_node_component.h"
#include "intern/nodes/deg_node_id.h"
@@ -65,11 +65,22 @@ extern "C" {
#include "intern/depsgraph_intern.h"
#include "util/deg_util_foreach.h"
+static bool use_copy_on_write = false;
+
+bool DEG_depsgraph_use_copy_on_write(void)
+{
+ return use_copy_on_write;
+}
+
+void DEG_depsgraph_enable_copy_on_write(void)
+{
+ use_copy_on_write = true;
+}
+
namespace DEG {
static DEG_EditorUpdateIDCb deg_editor_update_id_cb = NULL;
static DEG_EditorUpdateSceneCb deg_editor_update_scene_cb = NULL;
-static DEG_EditorUpdateScenePreCb deg_editor_update_scene_pre_cb = NULL;
/* TODO(sergey): Find a better place for this. */
template <typename T>
@@ -81,8 +92,9 @@ static void remove_from_vector(vector<T> *vector, const T& value)
Depsgraph::Depsgraph()
: time_source(NULL),
- need_update(false),
- layers(0)
+ need_update(true),
+ scene(NULL),
+ view_layer(NULL)
{
BLI_spin_init(&lock);
id_hash = BLI_ghash_ptr_new("Depsgraph id hash");
@@ -208,6 +220,10 @@ static bool pointer_to_component_node_criteria(
*subdata = seq->name; // xxx?
return true;
}
+ else if (RNA_struct_is_a(ptr->type, &RNA_NodeSocket)) {
+ *type = DEG_NODE_TYPE_SHADING;
+ return true;
+ }
if (prop != NULL) {
/* All unknown data effectively falls under "parameter evaluation". */
*type = DEG_NODE_TYPE_PARAMETERS;
@@ -255,12 +271,6 @@ DepsNode *Depsgraph::find_node_from_pointer(const PointerRNA *ptr,
/* Node Management ---------------------------- */
-static void id_node_deleter(void *value)
-{
- IDDepsNode *id_node = reinterpret_cast<IDDepsNode *>(value);
- OBJECT_GUARDED_DELETE(id_node, IDDepsNode);
-}
-
TimeSourceDepsNode *Depsgraph::add_time_source()
{
if (time_source == NULL) {
@@ -280,23 +290,57 @@ IDDepsNode *Depsgraph::find_id_node(const ID *id) const
return reinterpret_cast<IDDepsNode *>(BLI_ghash_lookup(id_hash, id));
}
-IDDepsNode *Depsgraph::add_id_node(ID *id, const char *name)
+IDDepsNode *Depsgraph::add_id_node(ID *id, bool do_tag, ID *id_cow_hint)
{
+ BLI_assert((id->tag & LIB_TAG_COPY_ON_WRITE) == 0);
IDDepsNode *id_node = find_id_node(id);
if (!id_node) {
DepsNodeFactory *factory = deg_type_get_factory(DEG_NODE_TYPE_ID_REF);
- id_node = (IDDepsNode *)factory->create_node(id, "", name);
- id->tag |= LIB_TAG_DOIT;
- /* register */
+ id_node = (IDDepsNode *)factory->create_node(id, "", id->name);
+ id_node->init_copy_on_write(id_cow_hint);
+ if (do_tag) {
+ id->tag |= LIB_TAG_DOIT;
+ }
+ /* Register node in ID hash.
+ *
+ * NOTE: We address ID nodes by the original ID pointer they are
+ * referencing to.
+ */
BLI_ghash_insert(id_hash, id, id_node);
id_nodes.push_back(id_node);
}
+ else if (do_tag) {
+ id->tag |= LIB_TAG_DOIT;
+ }
return id_node;
}
void Depsgraph::clear_id_nodes()
{
- BLI_ghash_clear(id_hash, NULL, id_node_deleter);
+ /* Free memory used by ID nodes. */
+ if (use_copy_on_write) {
+ /* Stupid workaround to ensure we free IDs in a proper order. */
+ foreach (IDDepsNode *id_node, id_nodes) {
+ if (id_node->id_cow == NULL) {
+ /* This means builder "stole" ownership of the copy-on-written
+ * datablock for her own dirty needs.
+ */
+ continue;
+ }
+ if (!deg_copy_on_write_is_expanded(id_node->id_cow)) {
+ continue;
+ }
+ const ID_Type id_type = GS(id_node->id_cow->name);
+ if (id_type != ID_PA) {
+ id_node->destroy();
+ }
+ }
+ }
+ foreach (IDDepsNode *id_node, id_nodes) {
+ OBJECT_GUARDED_DELETE(id_node, IDDepsNode);
+ }
+ /* Clear containers. */
+ BLI_ghash_clear(id_hash, NULL, NULL);
id_nodes.clear();
}
@@ -321,7 +365,7 @@ DepsRelation *Depsgraph::add_new_relation(OperationDepsNode *from,
if (comp_node->type == DEG_NODE_TYPE_GEOMETRY) {
IDDepsNode *id_to = to->owner->owner;
IDDepsNode *id_from = from->owner->owner;
- if (id_to != id_from && (id_to->id->recalc & ID_RECALC_ALL)) {
+ if (id_to != id_from && (id_to->id_orig->recalc & ID_RECALC_ALL)) {
if ((id_from->eval_flags & DAG_EVAL_NEED_CPU) == 0) {
id_from->tag_update(this);
id_from->eval_flags |= DAG_EVAL_NEED_CPU;
@@ -415,9 +459,9 @@ void DepsRelation::unlink()
void Depsgraph::add_entry_tag(OperationDepsNode *node)
{
/* Sanity check. */
- if (!node)
+ if (node == NULL) {
return;
-
+ }
/* Add to graph-level set of directly modified nodes to start searching from.
* NOTE: this is necessary since we have several thousand nodes to play with...
*/
@@ -433,17 +477,46 @@ void Depsgraph::clear_all_nodes()
}
}
-void deg_editors_id_update(Main *bmain, ID *id)
+ID *Depsgraph::get_cow_id(const ID *id_orig) const
+{
+ IDDepsNode *id_node = find_id_node(id_orig);
+ if (id_node == NULL) {
+ /* This function is used from places where we expect ID to be either
+ * already a copy-on-write version or have a corresponding copy-on-write
+ * version.
+ *
+ * We try to enforce that in debug builds, for for release we play a bit
+ * safer game here.
+ */
+ if ((id_orig->tag & LIB_TAG_COPY_ON_WRITE) == 0) {
+ /* TODO(sergey): This is nice sanity check to have, but it fails
+ * in following situations:
+ *
+ * - Material has link to texture, which is not needed by new
+ * shading system and hence can be ignored at construction.
+ * - Object or mesh has material at a slot which is not used (for
+ * example, object has material slot by materials are set to
+ * object data).
+ */
+ // BLI_assert(!"Request for non-existing copy-on-write ID");
+ }
+ return (ID *)id_orig;
+ }
+ return id_node->id_cow;
+}
+
+void deg_editors_id_update(const DEGEditorUpdateContext *update_ctx, ID *id)
{
if (deg_editor_update_id_cb != NULL) {
- deg_editor_update_id_cb(bmain, id);
+ deg_editor_update_id_cb(update_ctx, id);
}
}
-void deg_editors_scene_update(Main *bmain, Scene *scene, bool updated)
+void deg_editors_scene_update(const DEGEditorUpdateContext *update_ctx,
+ bool updated)
{
if (deg_editor_update_scene_cb != NULL) {
- deg_editor_update_scene_cb(bmain, scene, updated);
+ deg_editor_update_scene_cb(update_ctx, updated);
}
}
@@ -469,17 +542,8 @@ void DEG_graph_free(Depsgraph *graph)
/* Set callbacks which are being called when depsgraph changes. */
void DEG_editors_set_update_cb(DEG_EditorUpdateIDCb id_func,
- DEG_EditorUpdateSceneCb scene_func,
- DEG_EditorUpdateScenePreCb scene_pre_func)
+ DEG_EditorUpdateSceneCb scene_func)
{
DEG::deg_editor_update_id_cb = id_func;
DEG::deg_editor_update_scene_cb = scene_func;
- DEG::deg_editor_update_scene_pre_cb = scene_pre_func;
-}
-
-void DEG_editors_update_pre(Main *bmain, Scene *scene, bool time)
-{
- if (DEG::deg_editor_update_scene_pre_cb != NULL) {
- DEG::deg_editor_update_scene_pre_cb(bmain, scene, time);
- }
}
diff --git a/source/blender/depsgraph/intern/depsgraph.h b/source/blender/depsgraph/intern/depsgraph.h
index ce56d67b6de..f18b93c9807 100644
--- a/source/blender/depsgraph/intern/depsgraph.h
+++ b/source/blender/depsgraph/intern/depsgraph.h
@@ -42,9 +42,12 @@
struct ID;
struct GHash;
+struct Main;
struct GSet;
struct PointerRNA;
struct PropertyRNA;
+struct Scene;
+struct ViewLayer;
namespace DEG {
@@ -104,7 +107,8 @@ struct Depsgraph {
* Convenience wrapper to find node given just pointer + property.
*
* \param ptr: pointer to the data that node will represent
- * \param prop: optional property affected - providing this effectively results in inner nodes being returned
+ * \param prop: optional property affected - providing this effectively
+ * results in inner nodes being returned
*
* \return A node matching the required characteristics if it exists
* or NULL if no such node exists in the graph
@@ -115,7 +119,7 @@ struct Depsgraph {
TimeSourceDepsNode *find_time_source() const;
IDDepsNode *find_id_node(const ID *id) const;
- IDDepsNode *add_id_node(ID *id, const char *name = "");
+ IDDepsNode *add_id_node(ID *id, bool do_tag = true, ID *id_cow_hint = NULL);
void clear_id_nodes();
/* Add new relationship between two nodes. */
@@ -143,6 +147,11 @@ struct Depsgraph {
/* Clear storage used by all nodes. */
void clear_all_nodes();
+ /* Copy-on-Write Functionality ........ */
+
+ /* For given original ID get ID which is created by CoW system. */
+ ID *get_cow_id(const ID *id_orig) const;
+
/* Core Graph Functionality ........... */
/* <ID : IDDepsNode> mapping from ID blocks to nodes representing these
@@ -178,12 +187,9 @@ struct Depsgraph {
*/
SpinLock lock;
- /* Layers Visibility .................. */
-
- /* Visible layers bitfield, used for skipping invisible objects updates. */
- unsigned int layers;
-
- // XXX: additional stuff like eval contexts, mempools for allocating nodes from, etc.
+ /* Scene and layer this dependency graph is built for. */
+ Scene *scene;
+ ViewLayer *view_layer;
};
} // namespace DEG
diff --git a/source/blender/depsgraph/intern/depsgraph_build.cc b/source/blender/depsgraph/intern/depsgraph_build.cc
index 0c093c26fc5..b9264a25277 100644
--- a/source/blender/depsgraph/intern/depsgraph_build.cc
+++ b/source/blender/depsgraph/intern/depsgraph_build.cc
@@ -36,6 +36,7 @@
#include "BLI_utildefines.h"
#include "BLI_ghash.h"
+#include "BLI_listbase.h"
#ifdef DEBUG_TIME
# include "PIL_time.h"
@@ -52,6 +53,7 @@ extern "C" {
#include "BKE_collision.h"
#include "BKE_effect.h"
#include "BKE_modifier.h"
+#include "BKE_scene.h"
} /* extern "C" */
#include "DEG_depsgraph.h"
@@ -192,31 +194,46 @@ void DEG_add_special_eval_flag(Depsgraph *graph, ID *id, short flag)
/* ******************** */
/* Graph Building API's */
-/* Build depsgraph for the given scene, and dump results in given
+/* Build depsgraph for the given scene layer, and dump results in given
* graph container.
*/
-/* XXX: assume that this is called from outside, given the current scene as
- * the "main" scene.
- */
-void DEG_graph_build_from_scene(Depsgraph *graph, Main *bmain, Scene *scene)
+void DEG_graph_build_from_view_layer(Depsgraph *graph,
+ Main *bmain,
+ Scene *scene,
+ ViewLayer *view_layer)
{
#ifdef DEBUG_TIME
- TIMEIT_START(DEG_graph_build_from_scene);
+ TIMEIT_START(DEG_graph_build_from_view_layer);
#endif
DEG::Depsgraph *deg_graph = reinterpret_cast<DEG::Depsgraph *>(graph);
+ BLI_assert(BLI_findindex(&scene->view_layers, view_layer) != -1);
+
+ /* TODO(sergey): This is a bit tricky, but ensures that all the data
+ * is evaluated properly when depsgraph is becoming "visible".
+ *
+ * This now could happen for both visible scene is changed and extra
+ * dependency graph was created for render engine.
+ */
+ const bool need_on_visible_update = (deg_graph->id_nodes.size() == 0);
/* 1) Generate all the nodes in the graph first */
DEG::DepsgraphNodeBuilder node_builder(bmain, deg_graph);
node_builder.begin_build();
- node_builder.build_scene(scene);
+ node_builder.build_view_layer(scene,
+ view_layer,
+ DEG::DEG_ID_LINKED_DIRECTLY);
+ node_builder.end_build();
/* 2) Hook up relationships between operations - to determine evaluation
* order.
*/
DEG::DepsgraphRelationBuilder relation_builder(bmain, deg_graph);
relation_builder.begin_build();
- relation_builder.build_scene(scene);
+ relation_builder.build_view_layer(scene, view_layer);
+ if (DEG_depsgraph_use_copy_on_write()) {
+ relation_builder.build_copy_on_write_relations();
+ }
/* Detect and solve cycles. */
DEG::deg_graph_detect_cycles(deg_graph);
@@ -231,7 +248,7 @@ void DEG_graph_build_from_scene(Depsgraph *graph, Main *bmain, Scene *scene)
}
/* 4) Flush visibility layer and re-schedule nodes for update. */
- DEG::deg_graph_build_finalize(deg_graph);
+ DEG::deg_graph_build_finalize(bmain, deg_graph);
#if 0
if (!DEG_debug_consistency_check(deg_graph)) {
@@ -241,8 +258,15 @@ void DEG_graph_build_from_scene(Depsgraph *graph, Main *bmain, Scene *scene)
#endif
#ifdef DEBUG_TIME
- TIMEIT_END(DEG_graph_build_from_scene);
+ TIMEIT_END(DEG_graph_build_from_view_layer);
#endif
+
+ /* Relations are up to date. */
+ deg_graph->need_update = false;
+
+ if (need_on_visible_update) {
+ DEG_graph_on_visible_update(bmain, graph);
+ }
}
/* Tag graph relations for update. */
@@ -252,64 +276,34 @@ void DEG_graph_tag_relations_update(Depsgraph *graph)
deg_graph->need_update = true;
}
-/* Tag all relations for update. */
-void DEG_relations_tag_update(Main *bmain)
-{
- for (Scene *scene = (Scene *)bmain->scene.first;
- scene != NULL;
- scene = (Scene *)scene->id.next)
- {
- if (scene->depsgraph != NULL) {
- DEG_graph_tag_relations_update(scene->depsgraph);
- }
- }
-}
-
-/* Create new graph if didn't exist yet,
- * or update relations if graph was tagged for update.
- */
-void DEG_scene_relations_update(Main *bmain, Scene *scene)
+/* Create or update relations in the specified graph. */
+void DEG_graph_relations_update(Depsgraph *graph,
+ Main *bmain,
+ Scene *scene,
+ ViewLayer *view_layer)
{
- if (scene->depsgraph == NULL) {
- /* Rebuild graph from scratch and exit. */
- scene->depsgraph = DEG_graph_new();
- DEG_graph_build_from_scene(scene->depsgraph, bmain, scene);
- return;
- }
-
- DEG::Depsgraph *graph = reinterpret_cast<DEG::Depsgraph *>(scene->depsgraph);
- if (!graph->need_update) {
+ DEG::Depsgraph *deg_graph = (DEG::Depsgraph *)graph;
+ if (!deg_graph->need_update) {
/* Graph is up to date, nothing to do. */
return;
}
-
- /* Clear all previous nodes and operations. */
- graph->clear_all_nodes();
- graph->operations.clear();
- BLI_gset_clear(graph->entry_tags, NULL);
-
- /* Build new nodes and relations. */
- DEG_graph_build_from_scene(reinterpret_cast< ::Depsgraph * >(graph),
- bmain,
- scene);
-
- graph->need_update = false;
-}
-
-/* Rebuild dependency graph only for a given scene. */
-void DEG_scene_relations_rebuild(Main *bmain, Scene *scene)
-{
- if (scene->depsgraph != NULL) {
- DEG_graph_tag_relations_update(scene->depsgraph);
- }
- DEG_scene_relations_update(bmain, scene);
+ DEG_graph_build_from_view_layer(graph, bmain, scene, view_layer);
}
-void DEG_scene_graph_free(Scene *scene)
+/* Tag all relations for update. */
+void DEG_relations_tag_update(Main *bmain)
{
- if (scene->depsgraph) {
- DEG_graph_free(scene->depsgraph);
- scene->depsgraph = NULL;
+ DEG_DEBUG_PRINTF("%s: Tagging relations for update.\n", __func__);
+ BLI_LISTBASE_FOREACH (Scene *, scene, &bmain->scene) {
+ BLI_LISTBASE_FOREACH (ViewLayer *, view_layer, &scene->view_layers) {
+ Depsgraph *depsgraph =
+ (Depsgraph *)BKE_scene_get_depsgraph(scene,
+ view_layer,
+ false);
+ if (depsgraph != NULL) {
+ DEG_graph_tag_relations_update(depsgraph);
+ }
+ }
}
}
@@ -317,14 +311,13 @@ void DEG_add_collision_relations(DepsNodeHandle *handle,
Scene *scene,
Object *object,
Group *group,
- int layer,
unsigned int modifier_type,
DEG_CollobjFilterFunction fn,
bool dupli,
const char *name)
{
unsigned int numcollobj;
- Object **collobjs = get_collisionobjects_ext(scene, object, group, layer, &numcollobj, modifier_type, dupli);
+ Object **collobjs = get_collisionobjects_ext(scene, object, group, &numcollobj, modifier_type, dupli);
for (unsigned int i = 0; i < numcollobj; i++) {
Object *ob1 = collobjs[i];
@@ -347,7 +340,7 @@ void DEG_add_forcefield_relations(DepsNodeHandle *handle,
int skip_forcefield,
const char *name)
{
- ListBase *effectors = pdInitEffectors(scene, object, NULL, effector_weights, false);
+ ListBase *effectors = pdInitEffectors(NULL, scene, object, NULL, effector_weights, false);
if (effectors) {
for (EffectorCache *eff = (EffectorCache*)effectors->first; eff; eff = eff->next) {
@@ -379,7 +372,6 @@ void DEG_add_forcefield_relations(DepsNodeHandle *handle,
scene,
object,
NULL,
- eff->ob->lay,
eModifierType_Collision,
NULL,
true,
diff --git a/source/blender/depsgraph/intern/depsgraph_debug.cc b/source/blender/depsgraph/intern/depsgraph_debug.cc
index b7bf63e0cb0..e8d166532ad 100644
--- a/source/blender/depsgraph/intern/depsgraph_debug.cc
+++ b/source/blender/depsgraph/intern/depsgraph_debug.cc
@@ -67,18 +67,20 @@ bool DEG_debug_compare(const struct Depsgraph *graph1,
return true;
}
-bool DEG_debug_scene_relations_validate(Main *bmain,
- Scene *scene)
+bool DEG_debug_graph_relations_validate(Depsgraph *graph,
+ Main *bmain,
+ Scene *scene,
+ ViewLayer *view_layer)
{
- Depsgraph *depsgraph = DEG_graph_new();
+ Depsgraph *temp_depsgraph = DEG_graph_new();
bool valid = true;
- DEG_graph_build_from_scene(depsgraph, bmain, scene);
- if (!DEG_debug_compare(depsgraph, scene->depsgraph)) {
+ DEG_graph_build_from_view_layer(temp_depsgraph, bmain, scene, view_layer);
+ if (!DEG_debug_compare(temp_depsgraph, graph)) {
fprintf(stderr, "ERROR! Depsgraph wasn't tagged for update when it should have!\n");
BLI_assert(!"This should not happen!");
valid = false;
}
- DEG_graph_free(depsgraph);
+ DEG_graph_free(temp_depsgraph);
return valid;
}
diff --git a/source/blender/depsgraph/intern/depsgraph_eval.cc b/source/blender/depsgraph/intern/depsgraph_eval.cc
index 0448dbe2c8d..466808338f8 100644
--- a/source/blender/depsgraph/intern/depsgraph_eval.cc
+++ b/source/blender/depsgraph/intern/depsgraph_eval.cc
@@ -36,10 +36,9 @@
#include "BLI_ghash.h"
extern "C" {
-#include "DNA_scene_types.h"
-
-#include "BKE_depsgraph.h"
#include "BKE_scene.h"
+
+#include "DNA_scene_types.h"
} /* extern "C" */
#include "DEG_depsgraph.h"
@@ -53,50 +52,16 @@ extern "C" {
#include "intern/depsgraph.h"
-#ifdef WITH_LEGACY_DEPSGRAPH
-static bool use_legacy_depsgraph = true;
-#endif
-
-bool DEG_depsgraph_use_legacy(void)
-{
-#ifdef DISABLE_NEW_DEPSGRAPH
- return true;
-#elif defined(WITH_LEGACY_DEPSGRAPH)
- return use_legacy_depsgraph;
-#else
- BLI_assert(!"Should not be used with new depsgraph");
- return false;
-#endif
-}
-
-void DEG_depsgraph_switch_to_legacy(void)
-{
-#ifdef WITH_LEGACY_DEPSGRAPH
- use_legacy_depsgraph = true;
-#else
- BLI_assert(!"Should not be used with new depsgraph");
-#endif
-}
-
-void DEG_depsgraph_switch_to_new(void)
-{
-#ifdef WITH_LEGACY_DEPSGRAPH
- use_legacy_depsgraph = false;
-#else
- BLI_assert(!"Should not be used with new depsgraph");
-#endif
-}
-
/* ****************** */
/* Evaluation Context */
/* Create new evaluation context. */
-EvaluationContext *DEG_evaluation_context_new(int mode)
+EvaluationContext *DEG_evaluation_context_new(eEvaluationMode mode)
{
EvaluationContext *eval_ctx =
(EvaluationContext *)MEM_callocN(sizeof(EvaluationContext),
"EvaluationContext");
- eval_ctx->mode = mode;
+ DEG_evaluation_context_init(eval_ctx, mode);
return eval_ctx;
}
@@ -105,11 +70,28 @@ EvaluationContext *DEG_evaluation_context_new(int mode)
* Used by the areas which currently overrides the context or doesn't have
* access to a proper one.
*/
-void DEG_evaluation_context_init(EvaluationContext *eval_ctx, int mode)
+void DEG_evaluation_context_init(EvaluationContext *eval_ctx,
+ eEvaluationMode mode)
{
eval_ctx->mode = mode;
}
+void DEG_evaluation_context_init_from_scene(
+ EvaluationContext *eval_ctx,
+ Scene *scene,
+ ViewLayer *view_layer,
+ RenderEngineType *engine_type,
+ eObjectMode object_mode,
+ eEvaluationMode mode)
+{
+ DEG_evaluation_context_init(eval_ctx, mode);
+ eval_ctx->depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true);
+ eval_ctx->view_layer = view_layer;
+ eval_ctx->engine_type = engine_type;
+ eval_ctx->ctime = BKE_scene_frame_get(scene);
+ eval_ctx->object_mode = object_mode;
+}
+
/* Free evaluation context. */
void DEG_evaluation_context_free(EvaluationContext *eval_ctx)
{
@@ -118,29 +100,20 @@ void DEG_evaluation_context_free(EvaluationContext *eval_ctx)
/* Evaluate all nodes tagged for updating. */
void DEG_evaluate_on_refresh(EvaluationContext *eval_ctx,
- Depsgraph *graph,
- Scene *scene)
+ Depsgraph *graph)
{
DEG::Depsgraph *deg_graph = reinterpret_cast<DEG::Depsgraph *>(graph);
/* Update time on primary timesource. */
DEG::TimeSourceDepsNode *tsrc = deg_graph->find_time_source();
- tsrc->cfra = BKE_scene_frame_get(scene);
- unsigned int layers = deg_graph->layers;
- /* XXX(sergey): This works around missing updates in temp scenes used
- * by various scripts, but is weak and needs closer investigation.
- */
- if (layers == 0) {
- layers = scene->lay;
- }
- DEG::deg_evaluate_on_refresh(eval_ctx, deg_graph, layers);
+ tsrc->cfra = BKE_scene_frame_get(deg_graph->scene);
+ DEG::deg_evaluate_on_refresh(eval_ctx, deg_graph);
}
/* Frame-change happened for root scene that graph belongs to. */
void DEG_evaluate_on_framechange(EvaluationContext *eval_ctx,
Main *bmain,
Depsgraph *graph,
- float ctime,
- const unsigned int layers)
+ float ctime)
{
DEG::Depsgraph *deg_graph = reinterpret_cast<DEG::Depsgraph *>(graph);
/* Update time on primary timesource. */
@@ -149,7 +122,7 @@ void DEG_evaluate_on_framechange(EvaluationContext *eval_ctx,
tsrc->tag_update(deg_graph);
DEG::deg_graph_flush_updates(bmain, deg_graph);
/* Perform recalculation updates. */
- DEG::deg_evaluate_on_refresh(eval_ctx, deg_graph, layers);
+ DEG::deg_evaluate_on_refresh(eval_ctx, deg_graph);
}
bool DEG_needs_eval(Depsgraph *graph)
diff --git a/source/blender/depsgraph/intern/depsgraph_intern.h b/source/blender/depsgraph/intern/depsgraph_intern.h
index 40229ef8f37..df5e51a3910 100644
--- a/source/blender/depsgraph/intern/depsgraph_intern.h
+++ b/source/blender/depsgraph/intern/depsgraph_intern.h
@@ -46,8 +46,9 @@ extern "C" {
#include "intern/nodes/deg_node_operation.h"
#include "intern/depsgraph.h"
-struct Main;
+struct DEGEditorUpdateContext;
struct Group;
+struct Main;
struct Scene;
namespace DEG {
@@ -105,15 +106,24 @@ DepsNodeFactory *deg_type_get_factory(const eDepsNode_Type type);
/* Editors Integration -------------------------------------------------- */
-void deg_editors_id_update(struct Main *bmain, struct ID *id);
+void deg_editors_id_update(const DEGEditorUpdateContext *update_ctx,
+ struct ID *id);
-void deg_editors_scene_update(struct Main *bmain, struct Scene *scene, bool updated);
+void deg_editors_scene_update(const DEGEditorUpdateContext *update_ctx,
+ bool updated);
+
+#define DEG_DEBUG_PRINTF(...) \
+ do { \
+ if (G.debug & G_DEBUG_DEPSGRAPH) { \
+ fprintf(stderr, __VA_ARGS__); \
+ fflush(stderr); \
+ } \
+ } while (0)
-#define DEG_DEBUG_PRINTF(...) \
- do { \
- if (G.debug & G_DEBUG_DEPSGRAPH) { \
- fprintf(stderr, __VA_ARGS__); \
- } \
+#define DEG_ERROR_PRINTF(...) \
+ do { \
+ fprintf(stderr, __VA_ARGS__); \
+ fflush(stderr); \
} while (0)
} // namespace DEG
diff --git a/source/blender/depsgraph/intern/depsgraph_query.cc b/source/blender/depsgraph/intern/depsgraph_query.cc
index 9b1961baa48..63c9aa1407a 100644
--- a/source/blender/depsgraph/intern/depsgraph_query.cc
+++ b/source/blender/depsgraph/intern/depsgraph_query.cc
@@ -33,21 +33,27 @@
#include "MEM_guardedalloc.h"
extern "C" {
+#include "BLI_utildefines.h"
#include "BKE_idcode.h"
#include "BKE_main.h"
+#include "BLI_listbase.h"
} /* extern "C" */
+#include "DNA_object_types.h"
+#include "DNA_scene_types.h"
+
+#include "DEG_depsgraph.h"
#include "DEG_depsgraph_query.h"
#include "intern/depsgraph_intern.h"
#include "intern/nodes/deg_node_id.h"
-bool DEG_id_type_tagged(Main *bmain, short idtype)
+bool DEG_id_type_tagged(Main *bmain, short id_type)
{
- return bmain->id_tag_update[BKE_idcode_to_index(idtype)] != 0;
+ return bmain->id_tag_update[BKE_idcode_to_index(id_type)] != 0;
}
-short DEG_get_eval_flags_for_id(Depsgraph *graph, ID *id)
+short DEG_get_eval_flags_for_id(const Depsgraph *graph, ID *id)
{
if (graph == NULL) {
/* Happens when converting objects to mesh from a python script
@@ -59,9 +65,8 @@ short DEG_get_eval_flags_for_id(Depsgraph *graph, ID *id)
return 0;
}
- DEG::Depsgraph *deg_graph = reinterpret_cast<DEG::Depsgraph *>(graph);
-
- DEG::IDDepsNode *id_node = deg_graph->find_id_node(id);
+ const DEG::Depsgraph *deg_graph = reinterpret_cast<const DEG::Depsgraph *>(graph);
+ const DEG::IDDepsNode *id_node = deg_graph->find_id_node(id);
if (id_node == NULL) {
/* TODO(sergey): Does it mean we need to check set scene? */
return 0;
@@ -69,3 +74,42 @@ short DEG_get_eval_flags_for_id(Depsgraph *graph, ID *id)
return id_node->eval_flags;
}
+
+Scene *DEG_get_evaluated_scene(const Depsgraph *graph)
+{
+ const DEG::Depsgraph *deg_graph = reinterpret_cast<const DEG::Depsgraph *>(graph);
+ Scene *scene_orig = deg_graph->scene;
+ return reinterpret_cast<Scene *>(deg_graph->get_cow_id(&scene_orig->id));
+}
+
+ViewLayer *DEG_get_evaluated_view_layer(const Depsgraph *graph)
+{
+ const DEG::Depsgraph *deg_graph = reinterpret_cast<const DEG::Depsgraph *>(graph);
+ Scene *scene_cow = DEG_get_evaluated_scene(graph);
+ ViewLayer *view_layer_orig = deg_graph->view_layer;
+ ViewLayer *view_layer_cow =
+ (ViewLayer *)BLI_findstring(&scene_cow->view_layers,
+ view_layer_orig->name,
+ offsetof(ViewLayer, name));
+ return view_layer_cow;
+}
+
+Object *DEG_get_evaluated_object(const Depsgraph *depsgraph, Object *object)
+{
+ return (Object *)DEG_get_evaluated_id(depsgraph, &object->id);
+}
+
+ID *DEG_get_evaluated_id(const Depsgraph *depsgraph, ID *id)
+{
+ /* TODO(sergey): This is a duplicate of Depsgraph::get_cow_id(),
+ * but here we never do assert, since we don't know nature of the
+ * incoming ID datablock.
+ */
+ const DEG::Depsgraph *deg_graph = (const DEG::Depsgraph *)depsgraph;
+ const DEG::IDDepsNode *id_node = deg_graph->find_id_node(id);
+ if (id_node == NULL) {
+ return id;
+ }
+ return id_node->id_cow;
+}
+
diff --git a/source/blender/depsgraph/intern/depsgraph_query_foreach.cc b/source/blender/depsgraph/intern/depsgraph_query_foreach.cc
index 65d8f58b851..e6692cf49b3 100644
--- a/source/blender/depsgraph/intern/depsgraph_query_foreach.cc
+++ b/source/blender/depsgraph/intern/depsgraph_query_foreach.cc
@@ -108,7 +108,7 @@ static void deg_foreach_dependent_ID(const Depsgraph *graph,
IDDepsNode *id_node = comp_node->owner;
if (!id_node->done) {
/* TODO(sergey): Is it orig or CoW? */
- callback(id_node->id, user_data);
+ callback(id_node->id_orig, user_data);
id_node->done = true;
}
/* Schedule outgoing operation nodes. */
diff --git a/source/blender/depsgraph/intern/depsgraph_query_iter.cc b/source/blender/depsgraph/intern/depsgraph_query_iter.cc
new file mode 100644
index 00000000000..fd54030a4e0
--- /dev/null
+++ b/source/blender/depsgraph/intern/depsgraph_query_iter.cc
@@ -0,0 +1,282 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2017 Blender Foundation.
+ * All rights reserved.
+ *
+ * Original Author: Dalai Felinto
+ * Contributor(s): Sergey Sharybin
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/depsgraph/intern/depsgraph_query_iter.cc
+ * \ingroup depsgraph
+ *
+ * Implementation of Querying and Filtering API's
+ */
+
+#include "MEM_guardedalloc.h"
+
+extern "C" {
+#include "BLI_utildefines.h"
+#include "BLI_math.h"
+#include "BKE_anim.h"
+#include "BKE_idprop.h"
+#include "BKE_layer.h"
+#include "BKE_object.h"
+} /* extern "C" */
+
+#include "DNA_object_types.h"
+#include "DNA_scene_types.h"
+
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_query.h"
+
+#include "intern/depsgraph_intern.h"
+#include "util/deg_util_foreach.h"
+
+#include "intern/nodes/deg_node_id.h"
+
+#ifndef NDEBUG
+# include "intern/eval/deg_eval_copy_on_write.h"
+#endif
+
+/* ************************ DEG ITERATORS ********************* */
+
+static void verify_id_proeprties_freed(DEGObjectIterData *data)
+{
+ if (data->dupli_object_current == NULL) {
+ // We didn't enter duplication yet, so we can't have any dangling
+ // pointers.
+ return;
+ }
+ const Object *dupli_object = data->dupli_object_current->ob;
+ Object *temp_dupli_object = &data->temp_dupli_object;
+ if (temp_dupli_object->id.properties == NULL) {
+ // No ID proeprties in temp datablock -- no leak is possible.
+ return;
+ }
+ if (temp_dupli_object->id.properties == dupli_object->id.properties) {
+ // Temp copy of object did not modify ID properties.
+ return;
+ }
+ // Free memory which is owned by temporary storage which is about to
+ // get overwritten.
+ IDP_FreeProperty(temp_dupli_object->id.properties);
+ MEM_freeN(temp_dupli_object->id.properties);
+ temp_dupli_object->id.properties = NULL;
+}
+
+static bool deg_objects_dupli_iterator_next(BLI_Iterator *iter)
+{
+ DEGObjectIterData *data = (DEGObjectIterData *)iter->data;
+ while (data->dupli_object_next != NULL) {
+ DupliObject *dob = data->dupli_object_next;
+ Object *obd = dob->ob;
+
+ data->dupli_object_next = data->dupli_object_next->next;
+
+ /* Group duplis need to set ob matrices correct, for deform. so no_draw
+ * is part handled.
+ */
+ if ((obd->transflag & OB_RENDER_DUPLI) == 0 && dob->no_draw) {
+ continue;
+ }
+
+ if (obd->type == OB_MBALL) {
+ continue;
+ }
+
+ verify_id_proeprties_freed(data);
+
+ data->dupli_object_current = dob;
+
+ /* Temporary object to evaluate. */
+ Object *dupli_parent = data->dupli_parent;
+ Object *temp_dupli_object = &data->temp_dupli_object;
+ *temp_dupli_object = *dob->ob;
+ temp_dupli_object->select_color = dupli_parent->select_color;
+ temp_dupli_object->base_flag = dupli_parent->base_flag | BASE_FROMDUPLI;
+
+ /* Duplicated elements shouldn't care whether their original collection is visible or not. */
+ temp_dupli_object->base_flag |= BASE_VISIBLED;
+
+ if (BKE_object_is_visible(temp_dupli_object, (eObjectVisibilityCheck)data->visibility_check) == false) {
+ continue;
+ }
+
+ temp_dupli_object->transflag &= ~OB_DUPLI;
+
+ if (dob->collection_properties != NULL) {
+ temp_dupli_object->base_collection_properties = dob->collection_properties;
+ IDP_MergeGroup(temp_dupli_object->base_collection_properties,
+ dupli_parent->base_collection_properties,
+ false);
+ }
+ else {
+ temp_dupli_object->base_collection_properties =
+ dupli_parent->base_collection_properties;
+ }
+
+ copy_m4_m4(data->temp_dupli_object.obmat, dob->mat);
+ iter->current = &data->temp_dupli_object;
+ BLI_assert(
+ DEG::deg_validate_copy_on_write_datablock(
+ &data->temp_dupli_object.id));
+ return true;
+ }
+
+ return false;
+}
+
+static void DEG_iterator_objects_step(BLI_Iterator *iter, DEG::IDDepsNode *id_node)
+{
+ /* Set it early in case we need to exit and we are running from within a loop. */
+ iter->skip = true;
+
+ DEGObjectIterData *data = (DEGObjectIterData *)iter->data;
+ const ID_Type id_type = GS(id_node->id_orig->name);
+
+ if (id_type != ID_OB) {
+ return;
+ }
+
+ switch (id_node->linked_state) {
+ case DEG::DEG_ID_LINKED_DIRECTLY:
+ if ((data->flag & DEG_ITER_OBJECT_FLAG_LINKED_DIRECTLY) == 0) {
+ return;
+ }
+ break;
+ case DEG::DEG_ID_LINKED_VIA_SET:
+ if ((data->flag & DEG_ITER_OBJECT_FLAG_LINKED_VIA_SET) == 0) {
+ return;
+ }
+ break;
+ case DEG::DEG_ID_LINKED_INDIRECTLY:
+ if ((data->flag & DEG_ITER_OBJECT_FLAG_LINKED_INDIRECTLY) == 0) {
+ return;
+ }
+ break;
+ }
+
+ Object *object = (Object *)id_node->id_cow;
+ BLI_assert(DEG::deg_validate_copy_on_write_datablock(&object->id));
+
+ if ((BKE_object_is_visible(object, OB_VISIBILITY_CHECK_UNKNOWN_RENDER_MODE) == false) &&
+ ((data->flag & DEG_ITER_OBJECT_FLAG_VISIBLE) != 0))
+ {
+ return;
+ }
+
+ if ((data->flag & DEG_ITER_OBJECT_FLAG_DUPLI) &&
+ (object->transflag & OB_DUPLI))
+ {
+ data->dupli_parent = object;
+ data->dupli_list = object_duplilist(&data->eval_ctx, data->scene, object);
+ data->dupli_object_next = (DupliObject *)data->dupli_list->first;
+ if (BKE_object_is_visible(object, (eObjectVisibilityCheck)data->visibility_check) == false) {
+ return;
+ }
+ }
+
+ iter->current = object;
+ iter->skip = false;
+}
+
+void DEG_iterator_objects_begin(BLI_Iterator *iter, DEGObjectIterData *data)
+{
+ Depsgraph *depsgraph = data->graph;
+ DEG::Depsgraph *deg_graph = reinterpret_cast<DEG::Depsgraph *>(depsgraph);
+ const size_t num_id_nodes = deg_graph->id_nodes.size();
+
+ if (num_id_nodes == 0) {
+ iter->valid = false;
+ return;
+ }
+
+ /* TODO(sergey): What evaluation type we want here? */
+ /* TODO(dfelinto): Get rid of evaluation context here, it's only used to do
+ * direct dupli-objects update in group.c. Which is terribly bad, and all
+ * objects are expected to be evaluated already. */
+ DEG_evaluation_context_init(&data->eval_ctx, DAG_EVAL_VIEWPORT);
+ data->eval_ctx.view_layer = DEG_get_evaluated_view_layer(depsgraph);
+
+ iter->data = data;
+ data->dupli_parent = NULL;
+ data->dupli_list = NULL;
+ data->dupli_object_next = NULL;
+ data->dupli_object_current = NULL;
+ data->scene = DEG_get_evaluated_scene(depsgraph);
+ data->id_node_index = 0;
+ data->num_id_nodes = num_id_nodes;
+ data->visibility_check = (data->mode == DEG_ITER_OBJECT_MODE_RENDER)
+ ? OB_VISIBILITY_CHECK_FOR_RENDER
+ : OB_VISIBILITY_CHECK_FOR_VIEWPORT;
+
+ DEG::IDDepsNode *id_node = deg_graph->id_nodes[data->id_node_index];
+ DEG_iterator_objects_step(iter, id_node);
+
+ if (iter->skip) {
+ DEG_iterator_objects_next(iter);
+ }
+}
+
+void DEG_iterator_objects_next(BLI_Iterator *iter)
+{
+ DEGObjectIterData *data = (DEGObjectIterData *)iter->data;
+ Depsgraph *depsgraph = data->graph;
+ DEG::Depsgraph *deg_graph = reinterpret_cast<DEG::Depsgraph *>(depsgraph);
+ do {
+ iter->skip = false;
+ if (data->dupli_list) {
+ if (deg_objects_dupli_iterator_next(iter)) {
+ return;
+ }
+ else {
+ verify_id_proeprties_freed(data);
+ free_object_duplilist(data->dupli_list);
+ data->dupli_parent = NULL;
+ data->dupli_list = NULL;
+ data->dupli_object_next = NULL;
+ data->dupli_object_current = NULL;
+ }
+ }
+
+ ++data->id_node_index;
+ if (data->id_node_index == data->num_id_nodes) {
+ iter->valid = false;
+ return;
+ }
+
+ DEG::IDDepsNode *id_node = deg_graph->id_nodes[data->id_node_index];
+ DEG_iterator_objects_step(iter, id_node);
+ } while (iter->skip);
+}
+
+void DEG_iterator_objects_end(BLI_Iterator *iter)
+{
+#ifndef NDEBUG
+ DEGObjectIterData *data = (DEGObjectIterData *)iter->data;
+ /* Force crash in case the iterator data is referenced and accessed down
+ * the line. (T51718)
+ */
+ memset(&data->temp_dupli_object, 0xff, sizeof(data->temp_dupli_object));
+#else
+ (void) iter;
+#endif
+}
diff --git a/source/blender/depsgraph/intern/depsgraph_tag.cc b/source/blender/depsgraph/intern/depsgraph_tag.cc
index d9f6fb07ae3..0dc1391d3a6 100644
--- a/source/blender/depsgraph/intern/depsgraph_tag.cc
+++ b/source/blender/depsgraph/intern/depsgraph_tag.cc
@@ -35,20 +35,26 @@
#include <queue>
#include "BLI_utildefines.h"
-#include "BLI_task.h"
#include "BLI_listbase.h"
+#include "BLI_math_bits.h"
+#include "BLI_task.h"
extern "C" {
+#include "DNA_curve_types.h"
+#include "DNA_key_types.h"
+#include "DNA_lattice_types.h"
+#include "DNA_mesh_types.h"
#include "DNA_object_types.h"
#include "DNA_particle_types.h"
#include "DNA_screen_types.h"
#include "DNA_windowmanager_types.h"
-
#include "BKE_idcode.h"
#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_node.h"
+#include "BKE_scene.h"
+#include "BKE_workspace.h"
#define new new_
#include "BKE_screen.h"
@@ -70,298 +76,494 @@ extern "C" {
/* *********************** */
/* Update Tagging/Flushing */
-/* Legacy depsgraph did some special trickery for things like particle systems
- * when tagging ID for an update. Ideally that tagging needs to become obsolete
- * in favor of havng dedicated node for that which gets tagged, but for until
- * design of those areas is more clear we'll do the same legacy code here.
- * - sergey -
- */
-#define DEPSGRAPH_USE_LEGACY_TAGGING
+namespace DEG {
namespace {
-/* Data-Based Tagging ------------------------------- */
+void deg_graph_id_tag_update(Main *bmain, Depsgraph *graph, ID *id, int flag);
-void lib_id_recalc_tag(Main *bmain, ID *id)
+void depsgraph_geometry_tag_to_component(const ID *id,
+ eDepsNode_Type *component_type)
{
- id->recalc |= ID_RECALC;
- DEG_id_type_tag(bmain, GS(id->name));
-}
-
-void lib_id_recalc_data_tag(Main *bmain, ID *id)
-{
- id->recalc |= ID_RECALC_DATA;
- DEG_id_type_tag(bmain, GS(id->name));
+ const ID_Type id_type = GS(id->name);
+ switch (id_type) {
+ case ID_OB:
+ {
+ const Object *object = (Object *)id;
+ switch (object->type) {
+ case OB_MESH:
+ case OB_CURVE:
+ case OB_SURF:
+ case OB_FONT:
+ case OB_LATTICE:
+ case OB_MBALL:
+ *component_type = DEG_NODE_TYPE_GEOMETRY;
+ break;
+ case OB_ARMATURE:
+ *component_type = DEG_NODE_TYPE_EVAL_POSE;
+ break;
+ /* TODO(sergey): More cases here? */
+ }
+ break;
+ }
+ case ID_ME:
+ *component_type = DEG_NODE_TYPE_GEOMETRY;
+ break;
+ case ID_PA:
+ return;
+ case ID_LP:
+ *component_type = DEG_NODE_TYPE_PARAMETERS;
+ break;
+ default:
+ break;
+ }
}
-void lib_id_recalc_tag_flag(Main *bmain, ID *id, int flag)
+void depsgraph_select_tag_to_component_opcode(
+ const ID *id,
+ eDepsNode_Type *component_type,
+ eDepsOperation_Code *operation_code)
{
- if (flag) {
- /* This bit of code ensures legacy object->recalc flags
- * are still filled in the same way as it was expected
- * with the old dependency graph.
- *
- * This is because some areas like motion paths and likely
- * some other physics baking process are doing manual scene
- * update on all the frames, trying to minimize number of
- * updates.
+ const ID_Type id_type = GS(id->name);
+ if (id_type == ID_SCE) {
+ /* We need to flush base flags to all objects in a scene since we
+ * don't know which ones changed. However, we don't want to update
+ * the whole scene, so pick up some operation which will do as less
+ * as possible.
*
- * But this flag will also let us to re-construct entry
- * nodes for update after relations update and after layer
- * visibility changes.
+ * TODO(sergey): We can introduce explicit exit operation which
+ * does nothing and which is only used to cascade flush down the
+ * road.
*/
- ID_Type idtype = GS(id->name);
- if (idtype == ID_OB) {
- Object *object = (Object *)id;
- object->recalc |= (flag & OB_RECALC_ALL);
- }
-
- if (flag & OB_RECALC_OB)
- lib_id_recalc_tag(bmain, id);
- if (flag & (OB_RECALC_DATA | PSYS_RECALC))
- lib_id_recalc_data_tag(bmain, id);
+ *component_type = DEG_NODE_TYPE_LAYER_COLLECTIONS;
+ *operation_code = DEG_OPCODE_VIEW_LAYER_DONE;
+ }
+ else if (id_type == ID_OB) {
+ *component_type = DEG_NODE_TYPE_LAYER_COLLECTIONS;
+ *operation_code = DEG_OPCODE_OBJECT_BASE_FLAGS;
}
else {
- lib_id_recalc_tag(bmain, id);
+ *component_type = DEG_NODE_TYPE_BATCH_CACHE;
+ *operation_code = DEG_OPCODE_GEOMETRY_SELECT_UPDATE;
}
}
-#ifdef DEPSGRAPH_USE_LEGACY_TAGGING
-void depsgraph_legacy_handle_update_tag(Main *bmain, ID *id, short flag)
+void depsgraph_base_flags_tag_to_component_opcode(
+ const ID *id,
+ eDepsNode_Type *component_type,
+ eDepsOperation_Code *operation_code)
{
- if (flag) {
- Object *object;
- short idtype = GS(id->name);
- if (idtype == ID_PA) {
- ParticleSystem *psys;
- for (object = (Object *)bmain->object.first;
- object != NULL;
- object = (Object *)object->id.next)
- {
- for (psys = (ParticleSystem *)object->particlesystem.first;
- psys != NULL;
- psys = (ParticleSystem *)psys->next)
- {
- if (&psys->part->id == id) {
- DEG_id_tag_update_ex(bmain, &object->id, flag & OB_RECALC_ALL);
- psys->recalc |= (flag & PSYS_RECALC);
- }
- }
- }
- }
+ const ID_Type id_type = GS(id->name);
+ if (id_type == ID_SCE) {
+ *component_type = DEG_NODE_TYPE_LAYER_COLLECTIONS;
+ *operation_code = DEG_OPCODE_VIEW_LAYER_INIT;
+ }
+ else if (id_type == ID_OB) {
+ *component_type = DEG_NODE_TYPE_LAYER_COLLECTIONS;
+ *operation_code = DEG_OPCODE_OBJECT_BASE_FLAGS;
}
}
-#endif
-} /* namespace */
+void depsgraph_tag_to_component_opcode(const ID *id,
+ eDepsgraph_Tag tag,
+ eDepsNode_Type *component_type,
+ eDepsOperation_Code *operation_code)
+{
+ const ID_Type id_type = GS(id->name);
+ *component_type = DEG_NODE_TYPE_UNDEFINED;
+ *operation_code = DEG_OPCODE_OPERATION;
+ /* Special case for now, in the future we should get rid of this. */
+ if (tag == 0) {
+ *component_type = DEG_NODE_TYPE_ID_REF;
+ *operation_code = DEG_OPCODE_OPERATION;
+ return;
+ }
+ switch (tag) {
+ case DEG_TAG_TRANSFORM:
+ *component_type = DEG_NODE_TYPE_TRANSFORM;
+ break;
+ case DEG_TAG_GEOMETRY:
+ depsgraph_geometry_tag_to_component(id, component_type);
+ break;
+ case DEG_TAG_TIME:
+ *component_type = DEG_NODE_TYPE_ANIMATION;
+ break;
+ case DEG_TAG_PSYS_REDO:
+ case DEG_TAG_PSYS_RESET:
+ case DEG_TAG_PSYS_TYPE:
+ case DEG_TAG_PSYS_CHILD:
+ case DEG_TAG_PSYS_PHYS:
+ if (id_type == ID_PA) {
+ /* NOTES:
+ * - For particle settings node we need to use different
+ * component. Will be nice to get this unified with object,
+ * but we can survive for now with single exception here.
+ * Particles needs reconsideration anyway,
+ * - We do direct injection of particle settings recalc flag
+ * here. This is what we need to do for until particles
+ * are switched away from own recalc flag and are using
+ * ID->recalc flags instead.
+ */
+ ParticleSettings *particle_settings = (ParticleSettings *)id;
+ particle_settings->recalc |= (tag & DEG_TAG_PSYS_ALL);
+ *component_type = DEG_NODE_TYPE_PARAMETERS;
+ }
+ else {
+ *component_type = DEG_NODE_TYPE_EVAL_PARTICLES;
+ }
+ break;
+ case DEG_TAG_COPY_ON_WRITE:
+ *component_type = DEG_NODE_TYPE_COPY_ON_WRITE;
+ break;
+ case DEG_TAG_SHADING_UPDATE:
+ if (id_type == ID_NT) {
+ *component_type = DEG_NODE_TYPE_SHADING_PARAMETERS;
+ }
+ else {
+ *component_type = DEG_NODE_TYPE_SHADING;
+ }
+ break;
+ case DEG_TAG_SELECT_UPDATE:
+ depsgraph_select_tag_to_component_opcode(id,
+ component_type,
+ operation_code);
+ break;
+ case DEG_TAG_BASE_FLAGS_UPDATE:
+ depsgraph_base_flags_tag_to_component_opcode(id,
+ component_type,
+ operation_code);
+ case DEG_TAG_EDITORS_UPDATE:
+ /* There is no such node in depsgraph, this tag is to be handled
+ * separately.
+ */
+ break;
+ case DEG_TAG_PSYS_ALL:
+ BLI_assert(!"Should not happen");
+ break;
+ }
+}
-/* Tag all nodes in ID-block for update.
- * This is a crude measure, but is most convenient for old code.
- */
-void DEG_graph_id_tag_update(Main *bmain, Depsgraph *graph, ID *id)
+void id_tag_update_ntree_special(Main *bmain, Depsgraph *graph, ID *id, int flag)
{
- DEG::Depsgraph *deg_graph = reinterpret_cast<DEG::Depsgraph *>(graph);
- DEG::IDDepsNode *node = deg_graph->find_id_node(id);
- lib_id_recalc_tag(bmain, id);
- if (node != NULL) {
- node->tag_update(deg_graph);
+ bNodeTree *ntree = ntreeFromID(id);
+ if (ntree == NULL) {
+ return;
}
+ deg_graph_id_tag_update(bmain, graph, &ntree->id, flag);
}
-/* Tag given ID for an update in all the dependency graphs. */
-void DEG_id_tag_update(ID *id, short flag)
+void depsgraph_update_editors_tag(Main *bmain, Depsgraph *graph, ID *id)
{
- DEG_id_tag_update_ex(G.main, id, flag);
+ /* NOTE: We handle this immediately, without delaying anything, to be
+ * sure we don't cause threading issues with OpenGL.
+ */
+ /* TODO(sergey): Make sure this works for CoW-ed datablocks as well. */
+ DEGEditorUpdateContext update_ctx = {NULL};
+ update_ctx.bmain = bmain;
+ update_ctx.depsgraph = (::Depsgraph *)graph;
+ update_ctx.scene = graph->scene;
+ update_ctx.view_layer = graph->view_layer;
+ deg_editors_id_update(&update_ctx, id);
}
-void DEG_id_tag_update_ex(Main *bmain, ID *id, short flag)
+void depsgraph_tag_component(Depsgraph *graph,
+ IDDepsNode *id_node,
+ eDepsNode_Type component_type,
+ eDepsOperation_Code operation_code)
{
- if (id == NULL) {
- /* Ideally should not happen, but old depsgraph allowed this. */
+ ComponentDepsNode *component_node =
+ id_node->find_component(component_type);
+ if (component_node == NULL) {
return;
}
- DEG_DEBUG_PRINTF("%s: id=%s flag=%d\n", __func__, id->name, flag);
- lib_id_recalc_tag_flag(bmain, id, flag);
- for (Scene *scene = (Scene *)bmain->scene.first;
- scene != NULL;
- scene = (Scene *)scene->id.next)
- {
- if (scene->depsgraph) {
- Depsgraph *graph = scene->depsgraph;
- if (flag == 0) {
- /* TODO(sergey): Currently blender is still tagging IDs
- * for recalc just using flag=0. This isn't totally correct
- * but we'd better deal with such cases and don't fail.
- */
- DEG_graph_id_tag_update(bmain, graph, id);
- continue;
- }
- if (flag & OB_RECALC_DATA && GS(id->name) == ID_OB) {
+ if (operation_code == DEG_OPCODE_OPERATION) {
+ component_node->tag_update(graph);
+ }
+ else {
+ OperationDepsNode *operation_node =
+ component_node->find_operation(operation_code);
+ if (operation_node != NULL) {
+ operation_node->tag_update(graph);
+ }
+ }
+}
+
+/* This is a tag compatibility with legacy code.
+ *
+ * Mainly, old code was tagging object with OB_RECALC_DATA tag to inform
+ * that object's data datablock changed. Now API expects that ID is given
+ * explicitly, but not all areas are aware of this yet.
+ */
+void deg_graph_id_tag_legacy_compat(Main *bmain,
+ ID *id,
+ eDepsgraph_Tag tag)
+{
+ if (tag == DEG_TAG_GEOMETRY || tag == 0) {
+ switch (GS(id->name)) {
+ case ID_OB:
+ {
Object *object = (Object *)id;
- if (object->data != NULL) {
- DEG_graph_id_tag_update(bmain,
- graph,
- (ID *)object->data);
+ ID *data_id = (ID *)object->data;
+ if (data_id != NULL) {
+ DEG_id_tag_update_ex(bmain, data_id, 0);
}
+ break;
}
- if (flag & (OB_RECALC_OB | OB_RECALC_DATA)) {
- DEG_graph_id_tag_update(bmain, graph, id);
+ /* TODO(sergey): Shape keys are annoying, maybe we should find a
+ * way to chain geometry evaluation to them, so we don't need extra
+ * tagging here.
+ */
+ case ID_ME:
+ {
+ Mesh *mesh = (Mesh *)id;
+ ID *key_id = &mesh->key->id;
+ if (key_id != NULL) {
+ DEG_id_tag_update_ex(bmain, key_id, 0);
+ }
+ break;
+ }
+ case ID_LT:
+ {
+ Lattice *lattice = (Lattice *)id;
+ ID *key_id = &lattice->key->id;
+ if (key_id != NULL) {
+ DEG_id_tag_update_ex(bmain, key_id, 0);
+ }
+ break;
}
- else if (flag & OB_RECALC_TIME) {
- DEG_graph_id_tag_update(bmain, graph, id);
+ case ID_CU:
+ {
+ Curve *curve = (Curve *)id;
+ ID *key_id = &curve->key->id;
+ if (key_id != NULL) {
+ DEG_id_tag_update_ex(bmain, key_id, 0);
+ }
+ break;
}
+ default:
+ break;
}
}
-
-#ifdef DEPSGRAPH_USE_LEGACY_TAGGING
- /* Special handling from the legacy depsgraph.
- * TODO(sergey): Need to get rid of those once all the areas
- * are re-formulated in terms of franular nodes.
- */
- depsgraph_legacy_handle_update_tag(bmain, id, flag);
-#endif
}
-/* Mark a particular datablock type as having changing. */
-void DEG_id_type_tag(Main *bmain, short idtype)
+void deg_graph_id_tag_update_single_flag(Main *bmain,
+ Depsgraph *graph,
+ ID *id,
+ IDDepsNode *id_node,
+ eDepsgraph_Tag tag)
{
- if (idtype == ID_NT) {
- /* Stupid workaround so parent datablocks of nested nodetree get looped
- * over when we loop over tagged datablock types.
+ if (tag == DEG_TAG_EDITORS_UPDATE) {
+ if (graph != NULL) {
+ depsgraph_update_editors_tag(bmain, graph, id);
+ }
+ return;
+ }
+ /* Get description of what is to be tagged. */
+ eDepsNode_Type component_type;
+ eDepsOperation_Code operation_code;
+ depsgraph_tag_to_component_opcode(id,
+ tag,
+ &component_type,
+ &operation_code);
+ /* Check whether we've got something to tag. */
+ if (component_type == DEG_NODE_TYPE_UNDEFINED) {
+ /* Given ID does not support tag. */
+ /* TODO(sergey): Shall we raise some panic here? */
+ return;
+ }
+ /* Tag ID recalc flag. */
+ DepsNodeFactory *factory = deg_type_get_factory(component_type);
+ BLI_assert(factory != NULL);
+ id->recalc |= factory->id_recalc_tag();
+ /* Some sanity checks before moving forward. */
+ if (id_node == NULL) {
+ /* Happens when object is tagged for update and not yet in the
+ * dependency graph (but will be after relations update).
*/
- DEG_id_type_tag(bmain, ID_MA);
- DEG_id_type_tag(bmain, ID_TE);
- DEG_id_type_tag(bmain, ID_LA);
- DEG_id_type_tag(bmain, ID_WO);
- DEG_id_type_tag(bmain, ID_SCE);
+ return;
}
+ /* Tag corresponding dependency graph operation for update. */
+ if (component_type == DEG_NODE_TYPE_ID_REF) {
+ id_node->tag_update(graph);
+ }
+ else {
+ depsgraph_tag_component(graph, id_node, component_type, operation_code);
+ }
+ /* TODO(sergey): Get rid of this once all areas are using proper data ID
+ * for tagging.
+ */
+ deg_graph_id_tag_legacy_compat(bmain, id, tag);
- bmain->id_tag_update[BKE_idcode_to_index(idtype)] = 1;
}
-/* Recursively push updates out to all nodes dependent on this,
- * until all affected are tagged and/or scheduled up for eval
- */
-void DEG_ids_flush_tagged(Main *bmain)
+void deg_graph_id_tag_update(Main *bmain, Depsgraph *graph, ID *id, int flag)
{
- for (Scene *scene = (Scene *)bmain->scene.first;
- scene != NULL;
- scene = (Scene *)scene->id.next)
- {
- DEG_scene_flush_update(bmain, scene);
+ IDDepsNode *id_node = (graph != NULL) ? graph->find_id_node(id)
+ : NULL;
+ DEG_id_type_tag(bmain, GS(id->name));
+ if (flag == 0) {
+ /* TODO(sergey): Which recalc flags to set here? */
+ id->recalc |= ID_RECALC_ALL;
+ if (id_node != NULL) {
+ id_node->tag_update(graph);
+ }
+ deg_graph_id_tag_legacy_compat(bmain, id, (eDepsgraph_Tag)0);
+ }
+ int current_flag = flag;
+ while (current_flag != 0) {
+ eDepsgraph_Tag tag =
+ (eDepsgraph_Tag)(1 << bitscan_forward_clear_i(&current_flag));
+ deg_graph_id_tag_update_single_flag(bmain,
+ graph,
+ id,
+ id_node,
+ tag);
}
+ /* Special case for nested node tree datablocks. */
+ id_tag_update_ntree_special(bmain, graph, id, flag);
}
-void DEG_scene_flush_update(Main *bmain, Scene *scene)
+/* TODO(sergey): Consider storing scene and view layer at depsgraph allocation
+ * time.
+ */
+void deg_ensure_scene_view_layer(Depsgraph *graph,
+ Scene *scene,
+ ViewLayer *view_layer)
{
- if (scene->depsgraph == NULL) {
+ if (!graph->need_update) {
return;
}
- DEG::deg_graph_flush_updates(
- bmain,
- reinterpret_cast<DEG::Depsgraph *>(scene->depsgraph));
+ graph->scene = scene;
+ graph->view_layer = view_layer;
}
-/* Update dependency graph when visible scenes/layers changes. */
-void DEG_graph_on_visible_update(Main *bmain, Scene *scene)
+void deg_id_tag_update(Main *bmain, ID *id, int flag)
{
- DEG::Depsgraph *graph = reinterpret_cast<DEG::Depsgraph *>(scene->depsgraph);
- wmWindowManager *wm = (wmWindowManager *)bmain->wm.first;
- int old_layers = graph->layers;
- if (wm != NULL) {
- BKE_main_id_tag_listbase(&bmain->scene, LIB_TAG_DOIT, true);
- graph->layers = 0;
- for (wmWindow *win = (wmWindow *)wm->windows.first;
- win != NULL;
- win = (wmWindow *)win->next)
- {
- Scene *scene = win->screen->scene;
- if (scene->id.tag & LIB_TAG_DOIT) {
- graph->layers |= BKE_screen_visible_layers(win->screen, scene);
- scene->id.tag &= ~LIB_TAG_DOIT;
+ deg_graph_id_tag_update(bmain, NULL, id, flag);
+ BLI_LISTBASE_FOREACH (Scene *, scene, &bmain->scene) {
+ BLI_LISTBASE_FOREACH (ViewLayer *, view_layer, &scene->view_layers) {
+ Depsgraph *depsgraph =
+ (Depsgraph *)BKE_scene_get_depsgraph(scene,
+ view_layer,
+ false);
+ if (depsgraph != NULL) {
+ /* Make sure depsgraph is pointing to a correct scene and
+ * view layer. This is mainly required in cases when depsgraph
+ * was not built yet.
+ */
+ deg_ensure_scene_view_layer(depsgraph, scene, view_layer);
+ deg_graph_id_tag_update(bmain, depsgraph, id, flag);
}
}
}
- else {
- /* All the layers for background render for now. */
- graph->layers = (1 << 20) - 1;
- }
- if (old_layers != graph->layers) {
- /* Tag all objects which becomes visible (or which becomes needed for dependencies)
- * for recalc.
+}
+
+void deg_graph_on_visible_update(Main *bmain, Depsgraph *graph)
+{
+ /* Make sure objects are up to date. */
+ foreach (DEG::IDDepsNode *id_node, graph->id_nodes) {
+ const ID_Type id_type = GS(id_node->id_orig->name);
+ int flag = 0;
+ /* We only tag components which needs an update. Tagging everything is
+ * not a good idea because that might reset particles cache (or any
+ * other type of cache).
*
- * This is mainly needed on file load only, after that updates of invisible objects
- * will be stored in the pending list.
+ * TODO(sergey): Need to generalize this somehow.
*/
- foreach (DEG::IDDepsNode *id_node, graph->id_nodes) {
- ID *id = id_node->id;
- if ((id->recalc & ID_RECALC_ALL) != 0 ||
- (id_node->layers & scene->lay_updated) == 0)
- {
- id_node->tag_update(graph);
- }
- /* A bit of magic: if object->recalc is set it means somebody tagged
- * it for update. If corresponding ID recalc flags are zero it means
- * graph has been evaluated after that and the recalc was skipped
- * because of visibility check.
- */
- if (GS(id->name) == ID_OB) {
- Object *object = (Object *)id;
- if ((id->recalc & ID_RECALC_ALL) == 0 &&
- (object->recalc & OB_RECALC_ALL) != 0)
- {
- id_node->tag_update(graph);
- DEG::ComponentDepsNode *anim_comp =
- id_node->find_component(DEG::DEG_NODE_TYPE_ANIMATION);
- if (anim_comp != NULL && object->recalc & OB_RECALC_TIME) {
- anim_comp->tag_update(graph);
- }
- }
- }
+ if (id_type == ID_OB) {
+ flag |= OB_RECALC_OB | OB_RECALC_DATA | DEG_TAG_COPY_ON_WRITE;
}
+ deg_graph_id_tag_update(bmain, graph, id_node->id_orig, flag);
}
- scene->lay_updated |= graph->layers;
- /* If graph is tagged for update, we don't need to bother with updates here,
- * nodes will be re-created.
- */
- if (graph->need_update) {
- return;
+ /* Make sure collection properties are up to date. */
+ for (Scene *scene_iter = graph->scene;
+ scene_iter != NULL;
+ scene_iter = scene_iter->set)
+ {
+ IDDepsNode *scene_id_node = graph->find_id_node(&scene_iter->id);
+ if (scene_id_node != NULL) {
+ scene_id_node->tag_update(graph);
+ }
+ else {
+ BLI_assert(graph->need_update);
+ }
}
- /* Special trick to get local view to work. */
- BLI_LISTBASE_FOREACH (Base *, base, &scene->base) {
- Object *object = base->object;
- DEG::IDDepsNode *id_node = graph->find_id_node(&object->id);
- id_node->layers = 0;
+}
+
+} /* namespace */
+
+} // namespace DEG
+
+/* Data-Based Tagging */
+
+/* Tag given ID for an update in all the dependency graphs. */
+void DEG_id_tag_update(ID *id, int flag)
+{
+ DEG_id_tag_update_ex(G.main, id, flag);
+}
+
+void DEG_id_tag_update_ex(Main *bmain, ID *id, int flag)
+{
+ if (id == NULL) {
+ /* Ideally should not happen, but old depsgraph allowed this. */
+ return;
}
- BLI_LISTBASE_FOREACH (Base *, base, &scene->base) {
- Object *object = base->object;
- DEG::IDDepsNode *id_node = graph->find_id_node(&object->id);
- id_node->layers |= base->lay;
- if (object == scene->camera || object->type == OB_CAMERA) {
- /* Camera should always be updated, it used directly by viewport. */
- id_node->layers |= (unsigned int)(-1);
- }
+ DEG_DEBUG_PRINTF("%s: id=%s flag=%d\n", __func__, id->name, flag);
+ DEG::deg_id_tag_update(bmain, id, flag);
+}
+
+void DEG_graph_id_tag_update(struct Main *bmain,
+ struct Depsgraph *depsgraph,
+ struct ID *id,
+ int flag)
+{
+ DEG::Depsgraph *graph = (DEG::Depsgraph *)depsgraph;
+ DEG::deg_graph_id_tag_update(bmain, graph, id, flag);
+}
+
+/* Mark a particular datablock type as having changing. */
+void DEG_id_type_tag(Main *bmain, short id_type)
+{
+ if (id_type == ID_NT) {
+ /* Stupid workaround so parent datablocks of nested nodetree get looped
+ * over when we loop over tagged datablock types.
+ */
+ DEG_id_type_tag(bmain, ID_MA);
+ DEG_id_type_tag(bmain, ID_TE);
+ DEG_id_type_tag(bmain, ID_LA);
+ DEG_id_type_tag(bmain, ID_WO);
+ DEG_id_type_tag(bmain, ID_SCE);
}
- DEG::deg_graph_build_flush_layers(graph);
- BLI_LISTBASE_FOREACH (Base *, base, &scene->base) {
- Object *object = base->object;
- DEG::IDDepsNode *id_node = graph->find_id_node(&object->id);
- GHASH_FOREACH_BEGIN(DEG::ComponentDepsNode *, comp, id_node->components)
- {
- id_node->layers |= comp->layers;
- }
- GHASH_FOREACH_END();
+
+ bmain->id_tag_update[BKE_idcode_to_index(id_type)] = 1;
+}
+
+void DEG_graph_flush_update(Main *bmain, Depsgraph *depsgraph)
+{
+ if (depsgraph == NULL) {
+ return;
}
+ DEG::deg_graph_flush_updates(bmain, (DEG::Depsgraph *)depsgraph);
+}
+
+/* Update dependency graph when visible scenes/layers changes. */
+void DEG_graph_on_visible_update(Main *bmain, Depsgraph *depsgraph)
+{
+ DEG::Depsgraph *graph = (DEG::Depsgraph *)depsgraph;
+ DEG::deg_graph_on_visible_update(bmain, graph);
}
void DEG_on_visible_update(Main *bmain, const bool UNUSED(do_time))
{
- for (Scene *scene = (Scene *)bmain->scene.first;
- scene != NULL;
- scene = (Scene *)scene->id.next)
- {
- if (scene->depsgraph != NULL) {
- DEG_graph_on_visible_update(bmain, scene);
+ BLI_LISTBASE_FOREACH (Scene *, scene, &bmain->scene) {
+ BLI_LISTBASE_FOREACH (ViewLayer *, view_layer, &scene->view_layers) {
+ Depsgraph *depsgraph =
+ (Depsgraph *)BKE_scene_get_depsgraph(scene,
+ view_layer,
+ false);
+ if (depsgraph != NULL) {
+ DEG_graph_on_visible_update(bmain, depsgraph);
+ }
}
}
}
@@ -369,7 +571,11 @@ void DEG_on_visible_update(Main *bmain, const bool UNUSED(do_time))
/* Check if something was changed in the database and inform
* editors about this.
*/
-void DEG_ids_check_recalc(Main *bmain, Scene *scene, bool time)
+void DEG_ids_check_recalc(Main *bmain,
+ Depsgraph *depsgraph,
+ Scene *scene,
+ ViewLayer *view_layer,
+ bool time)
{
ListBase *lbarray[MAX_LIBARRAY];
int a;
@@ -387,7 +593,12 @@ void DEG_ids_check_recalc(Main *bmain, Scene *scene, bool time)
}
}
- DEG::deg_editors_scene_update(bmain, scene, (updated || time));
+ DEGEditorUpdateContext update_ctx = {NULL};
+ update_ctx.bmain = bmain;
+ update_ctx.depsgraph = depsgraph;
+ update_ctx.scene = scene;
+ update_ctx.view_layer = view_layer;
+ DEG::deg_editors_scene_update(&update_ctx, (updated || time));
}
void DEG_ids_clear_recalc(Main *bmain)
diff --git a/source/blender/depsgraph/intern/depsgraph_type_defines.cc b/source/blender/depsgraph/intern/depsgraph_type_defines.cc
index 675002d6b90..886601225c7 100644
--- a/source/blender/depsgraph/intern/depsgraph_type_defines.cc
+++ b/source/blender/depsgraph/intern/depsgraph_type_defines.cc
@@ -86,6 +86,8 @@ static const char *stringify_opcode(eDepsOperation_Code opcode)
/* Animation, Drivers, etc. */
STRINGIFY_OPCODE(ANIMATION);
STRINGIFY_OPCODE(DRIVER);
+ /* Object related. */
+ STRINGIFY_OPCODE(OBJECT_BASE_FLAGS);
/* Transform. */
STRINGIFY_OPCODE(TRANSFORM_LOCAL);
STRINGIFY_OPCODE(TRANSFORM_PARENT);
@@ -115,11 +117,25 @@ static const char *stringify_opcode(eDepsOperation_Code opcode)
/* Particles. */
STRINGIFY_OPCODE(PARTICLE_SYSTEM_EVAL_INIT);
STRINGIFY_OPCODE(PARTICLE_SYSTEM_EVAL);
+ STRINGIFY_OPCODE(PARTICLE_SETTINGS_EVAL);
+ STRINGIFY_OPCODE(PARTICLE_SETTINGS_RECALC_CLEAR);
+ /* Point Cache. */
+ STRINGIFY_OPCODE(POINT_CACHE_RESET);
+ /* Batch cache. */
+ STRINGIFY_OPCODE(GEOMETRY_SELECT_UPDATE);
/* Masks. */
STRINGIFY_OPCODE(MASK_ANIMATION);
STRINGIFY_OPCODE(MASK_EVAL);
+ /* Collections. */
+ STRINGIFY_OPCODE(VIEW_LAYER_INIT);
+ STRINGIFY_OPCODE(VIEW_LAYER_EVAL);
+ STRINGIFY_OPCODE(VIEW_LAYER_DONE);
+ /* Copy on write. */
+ STRINGIFY_OPCODE(COPY_ON_WRITE);
/* Shading. */
STRINGIFY_OPCODE(SHADING);
+ STRINGIFY_OPCODE(MATERIAL_UPDATE);
+ STRINGIFY_OPCODE(WORLD_UPDATE);
/* Movie clip. */
STRINGIFY_OPCODE(MOVIECLIP_EVAL);
diff --git a/source/blender/depsgraph/intern/depsgraph_types.h b/source/blender/depsgraph/intern/depsgraph_types.h
index b2dbe5d2a62..3f4df21b8d6 100644
--- a/source/blender/depsgraph/intern/depsgraph_types.h
+++ b/source/blender/depsgraph/intern/depsgraph_types.h
@@ -53,8 +53,10 @@ struct FCurve;
namespace DEG {
+/* TODO(sergey): Find a better place for this. */
using std::string;
using std::vector;
+using std::max;
/* Evaluation Operation for atomic operation */
// XXX: move this to another header that can be exposed?
@@ -79,6 +81,18 @@ typedef enum eDepsNode_Class {
DEG_NODE_CLASS_OPERATION = 2,
} eDepsNode_Class;
+/* Note: We use max comparison to mark an id node that is linked more than once
+ * So keep this enum ordered accordingly.
+ */
+typedef enum eDepsNode_LinkedState_Type {
+ /* Generic indirectly linked id node. */
+ DEG_ID_LINKED_INDIRECTLY = 0,
+ /* Id node present in the set (background) only. */
+ DEG_ID_LINKED_VIA_SET = 1,
+ /* Id node directly linked via the ScenLayer. */
+ DEG_ID_LINKED_DIRECTLY = 2,
+} eDepsNode_LinkedState_Type;
+
/* Types of Nodes */
typedef enum eDepsNode_Type {
/* Fallback type for invalid return value */
@@ -111,6 +125,14 @@ typedef enum eDepsNode_Type {
DEG_NODE_TYPE_GEOMETRY,
/* Sequencer Component (Scene Only) */
DEG_NODE_TYPE_SEQUENCER,
+ /* Component which contains all operations needed for layer collections
+ * evaluation.
+ */
+ DEG_NODE_TYPE_LAYER_COLLECTIONS,
+ /* Entry component of majority of ID nodes: prepares CoW pointers for
+ * execution.
+ */
+ DEG_NODE_TYPE_COPY_ON_WRITE,
/* **** Evaluation-Related Outer Types (with Subdata) **** */
@@ -122,8 +144,11 @@ typedef enum eDepsNode_Type {
DEG_NODE_TYPE_EVAL_PARTICLES,
/* Material Shading Component */
DEG_NODE_TYPE_SHADING,
+ DEG_NODE_TYPE_SHADING_PARAMETERS,
/* Cache Component */
DEG_NODE_TYPE_CACHE,
+ /* Batch Cache Component */
+ DEG_NODE_TYPE_BATCH_CACHE,
/* Total number of meaningful node types. */
NUM_DEG_NODE_TYPES,
@@ -148,6 +173,9 @@ typedef enum eDepsOperation_Code {
/* Driver */
DEG_OPCODE_DRIVER,
+ /* Object related. --------------------------------- */
+ DEG_OPCODE_OBJECT_BASE_FLAGS,
+
/* Transform. -------------------------------------- */
/* Transform entry point - local transforms only */
DEG_OPCODE_TRANSFORM_LOCAL,
@@ -209,9 +237,27 @@ typedef enum eDepsOperation_Code {
/* Particle System evaluation. */
DEG_OPCODE_PARTICLE_SYSTEM_EVAL_INIT,
DEG_OPCODE_PARTICLE_SYSTEM_EVAL,
+ DEG_OPCODE_PARTICLE_SETTINGS_EVAL,
+ DEG_OPCODE_PARTICLE_SETTINGS_RECALC_CLEAR,
+
+ /* Point Cache. ------------------------------------- */
+ DEG_OPCODE_POINT_CACHE_RESET,
+
+ /* Collections. ------------------------------------- */
+ DEG_OPCODE_VIEW_LAYER_INIT,
+ DEG_OPCODE_VIEW_LAYER_EVAL,
+ DEG_OPCODE_VIEW_LAYER_DONE,
+
+ /* Copy on Write. ------------------------------------ */
+ DEG_OPCODE_COPY_ON_WRITE,
/* Shading. ------------------------------------------- */
DEG_OPCODE_SHADING,
+ DEG_OPCODE_MATERIAL_UPDATE,
+ DEG_OPCODE_WORLD_UPDATE,
+
+ /* Batch caches. -------------------------------------- */
+ DEG_OPCODE_GEOMETRY_SELECT_UPDATE,
/* Masks. ------------------------------------------ */
DEG_OPCODE_MASK_ANIMATION,
diff --git a/source/blender/depsgraph/intern/eval/deg_eval.cc b/source/blender/depsgraph/intern/eval/deg_eval.cc
index c29a0708cef..a6c6a16a528 100644
--- a/source/blender/depsgraph/intern/eval/deg_eval.cc
+++ b/source/blender/depsgraph/intern/eval/deg_eval.cc
@@ -38,12 +38,10 @@
#include "BLI_task.h"
#include "BLI_ghash.h"
-extern "C" {
-#include "BKE_depsgraph.h"
-#include "BKE_global.h"
-} /* extern "C" */
+#include "DNA_object_types.h"
#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_query.h"
#include "atomic_ops.h"
@@ -68,13 +66,11 @@ namespace DEG {
static void schedule_children(TaskPool *pool,
Depsgraph *graph,
OperationDepsNode *node,
- const unsigned int layers,
const int thread_id);
struct DepsgraphEvalState {
EvaluationContext *eval_ctx;
Depsgraph *graph;
- unsigned int layers;
bool do_stats;
};
@@ -98,13 +94,12 @@ static void deg_task_run_func(TaskPool *pool,
}
/* Schedule children. */
BLI_task_pool_delayed_push_begin(pool, thread_id);
- schedule_children(pool, state->graph, node, state->layers, thread_id);
+ schedule_children(pool, state->graph, node, thread_id);
BLI_task_pool_delayed_push_end(pool, thread_id);
}
typedef struct CalculatePengindData {
Depsgraph *graph;
- unsigned int layers;
} CalculatePengindData;
static void calculate_pending_func(
@@ -114,26 +109,19 @@ static void calculate_pending_func(
{
CalculatePengindData *data = (CalculatePengindData *)data_v;
Depsgraph *graph = data->graph;
- unsigned int layers = data->layers;
OperationDepsNode *node = graph->operations[i];
- IDDepsNode *id_node = node->owner->owner;
node->num_links_pending = 0;
node->scheduled = false;
/* count number of inputs that need updates */
- if ((id_node->layers & layers) != 0 &&
- (node->flag & DEPSOP_FLAG_NEEDS_UPDATE) != 0)
- {
+ if ((node->flag & DEPSOP_FLAG_NEEDS_UPDATE) != 0) {
foreach (DepsRelation *rel, node->inlinks) {
if (rel->from->type == DEG_NODE_TYPE_OPERATION &&
(rel->flag & DEPSREL_FLAG_CYCLIC) == 0)
{
OperationDepsNode *from = (OperationDepsNode *)rel->from;
- IDDepsNode *id_from_node = from->owner->owner;
- if ((id_from_node->layers & layers) != 0 &&
- (from->flag & DEPSOP_FLAG_NEEDS_UPDATE) != 0)
- {
+ if ((from->flag & DEPSOP_FLAG_NEEDS_UPDATE) != 0) {
++node->num_links_pending;
}
}
@@ -141,12 +129,11 @@ static void calculate_pending_func(
}
}
-static void calculate_pending_parents(Depsgraph *graph, unsigned int layers)
+static void calculate_pending_parents(Depsgraph *graph)
{
const int num_operations = graph->operations.size();
CalculatePengindData data;
data.graph = graph;
- data.layers = layers;
ParallelRangeSettings settings;
BLI_parallel_range_settings_defaults(&settings);
settings.min_iter_per_thread = 1024;
@@ -160,7 +147,7 @@ static void calculate_pending_parents(Depsgraph *graph, unsigned int layers)
static void initialize_execution(DepsgraphEvalState *state, Depsgraph *graph)
{
const bool do_stats = state->do_stats;
- calculate_pending_parents(graph, state->layers);
+ calculate_pending_parents(graph);
/* Clear tags and other things which needs to be clear. */
foreach (OperationDepsNode *node, graph->operations) {
node->done = 0;
@@ -174,15 +161,11 @@ static void initialize_execution(DepsgraphEvalState *state, Depsgraph *graph)
* dec_parents: Decrement pending parents count, true when child nodes are
* scheduled after a task has been completed.
*/
-static void schedule_node(TaskPool *pool, Depsgraph *graph, unsigned int layers,
+static void schedule_node(TaskPool *pool, Depsgraph *graph,
OperationDepsNode *node, bool dec_parents,
const int thread_id)
{
- unsigned int id_layers = node->owner->owner->layers;
-
- if ((node->flag & DEPSOP_FLAG_NEEDS_UPDATE) != 0 &&
- (id_layers & layers) != 0)
- {
+ if ((node->flag & DEPSOP_FLAG_NEEDS_UPDATE) != 0) {
if (dec_parents) {
BLI_assert(node->num_links_pending > 0);
atomic_sub_and_fetch_uint32(&node->num_links_pending, 1);
@@ -194,7 +177,7 @@ static void schedule_node(TaskPool *pool, Depsgraph *graph, unsigned int layers,
if (!is_scheduled) {
if (node->is_noop()) {
/* skip NOOP node, schedule children right away */
- schedule_children(pool, graph, node, layers, thread_id);
+ schedule_children(pool, graph, node, thread_id);
}
else {
/* children are scheduled once this task is completed */
@@ -210,19 +193,16 @@ static void schedule_node(TaskPool *pool, Depsgraph *graph, unsigned int layers,
}
}
-static void schedule_graph(TaskPool *pool,
- Depsgraph *graph,
- const unsigned int layers)
+static void schedule_graph(TaskPool *pool, Depsgraph *graph)
{
foreach (OperationDepsNode *node, graph->operations) {
- schedule_node(pool, graph, layers, node, false, 0);
+ schedule_node(pool, graph, node, false, 0);
}
}
static void schedule_children(TaskPool *pool,
Depsgraph *graph,
OperationDepsNode *node,
- const unsigned int layers,
const int thread_id)
{
foreach (DepsRelation *rel, node->outlinks) {
@@ -234,7 +214,6 @@ static void schedule_children(TaskPool *pool,
}
schedule_node(pool,
graph,
- layers,
child,
(rel->flag & DEPSREL_FLAG_CYCLIC) == 0,
thread_id);
@@ -249,25 +228,21 @@ static void schedule_children(TaskPool *pool,
* \note Time sources should be all valid!
*/
void deg_evaluate_on_refresh(EvaluationContext *eval_ctx,
- Depsgraph *graph,
- const unsigned int layers)
+ Depsgraph *graph)
{
/* Nothing to update, early out. */
if (BLI_gset_size(graph->entry_tags) == 0) {
return;
}
- DEG_DEBUG_PRINTF("%s: layers:%u, graph->layers:%u\n",
- __func__,
- layers,
- graph->layers);
/* Set time for the current graph evaluation context. */
TimeSourceDepsNode *time_src = graph->find_time_source();
+ eval_ctx->depsgraph = (::Depsgraph *)graph;
+ eval_ctx->view_layer = DEG_get_evaluated_view_layer((::Depsgraph *)graph);
eval_ctx->ctime = time_src->cfra;
/* Set up evaluation context for depsgraph itself. */
DepsgraphEvalState state;
state.eval_ctx = eval_ctx;
state.graph = graph;
- state.layers = layers;
state.do_stats = (G.debug_value != 0);
/* Set up task scheduler and pull for threaded evaluation. */
TaskScheduler *task_scheduler;
@@ -284,7 +259,7 @@ void deg_evaluate_on_refresh(EvaluationContext *eval_ctx,
/* Prepare all nodes for evaluation. */
initialize_execution(&state, graph);
/* Do actual evaluation now. */
- schedule_graph(task_pool, graph, layers);
+ schedule_graph(task_pool, graph);
BLI_task_pool_work_and_wait(task_pool);
BLI_task_pool_free(task_pool);
/* Finalize statistics gathering. This is because we only gather single
diff --git a/source/blender/depsgraph/intern/eval/deg_eval.h b/source/blender/depsgraph/intern/eval/deg_eval.h
index 49c0379939e..576ab89dec1 100644
--- a/source/blender/depsgraph/intern/eval/deg_eval.h
+++ b/source/blender/depsgraph/intern/eval/deg_eval.h
@@ -46,7 +46,6 @@ struct Depsgraph;
* \note Time sources should be all valid!
*/
void deg_evaluate_on_refresh(EvaluationContext *eval_ctx,
- Depsgraph *graph,
- const unsigned int layers);
+ Depsgraph *graph);
} // namespace DEG
diff --git a/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
new file mode 100644
index 00000000000..5daf4629708
--- /dev/null
+++ b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
@@ -0,0 +1,1056 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 20137Blender Foundation.
+ * All rights reserved.
+ *
+ * Original Author: Sergey Sharybin
+ * Contributor(s): None Yet
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+
+/** \file blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
+ * \ingroup depsgraph
+ */
+
+/* Enable special; trickery to treat nested owned IDs (such as nodetree of
+ * material) to be handled in same way as "real" datablocks, even tho some
+ * internal BKE routines doesn't treat them like that.
+ *
+ * TODO(sergey): Re-evaluate that after new ID handling is in place.
+ */
+#define NESTED_ID_NASTY_WORKAROUND
+
+#include "intern/eval/deg_eval_copy_on_write.h"
+
+#include <cstring>
+
+#include "BLI_utildefines.h"
+#include "BLI_threads.h"
+#include "BLI_string.h"
+
+#include "BKE_global.h"
+#include "BKE_idprop.h"
+#include "BKE_layer.h"
+#include "BKE_library.h"
+#include "BKE_main.h"
+#include "BKE_scene.h"
+
+#include "DEG_depsgraph.h"
+
+#include "MEM_guardedalloc.h"
+
+extern "C" {
+#include "DNA_ID.h"
+#include "DNA_mesh_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
+
+#ifdef NESTED_ID_NASTY_WORKAROUND
+# include "DNA_curve_types.h"
+# include "DNA_key_types.h"
+# include "DNA_lamp_types.h"
+# include "DNA_lattice_types.h"
+# include "DNA_linestyle_types.h"
+# include "DNA_material_types.h"
+# include "DNA_node_types.h"
+# include "DNA_texture_types.h"
+# include "DNA_world_types.h"
+#endif
+
+#include "BKE_action.h"
+#include "BKE_editmesh.h"
+#include "BKE_library_query.h"
+#include "BKE_object.h"
+}
+
+#include "intern/depsgraph.h"
+#include "intern/builder/deg_builder_nodes.h"
+#include "intern/nodes/deg_node.h"
+#include "intern/nodes/deg_node_id.h"
+
+namespace DEG {
+
+#define DEBUG_PRINT if (G.debug & G_DEBUG_DEPSGRAPH) printf
+
+namespace {
+
+#ifdef NESTED_ID_NASTY_WORKAROUND
+union NestedIDHackTempStorage {
+ Curve curve;
+ FreestyleLineStyle linestyle;
+ Lamp lamp;
+ Lattice lattice;
+ Material material;
+ Mesh mesh;
+ Scene scene;
+ Tex tex;
+ World world;
+};
+
+/* Set nested owned ID pointers to NULL. */
+void nested_id_hack_discard_pointers(ID *id_cow)
+{
+ switch (GS(id_cow->name)) {
+# define SPECIAL_CASE(id_type, dna_type, field) \
+ case id_type: \
+ { \
+ ((dna_type *)id_cow)->field = NULL; \
+ break; \
+ }
+
+ SPECIAL_CASE(ID_LS, FreestyleLineStyle, nodetree)
+ SPECIAL_CASE(ID_LA, Lamp, nodetree)
+ SPECIAL_CASE(ID_MA, Material, nodetree)
+ SPECIAL_CASE(ID_SCE, Scene, nodetree)
+ SPECIAL_CASE(ID_TE, Tex, nodetree)
+ SPECIAL_CASE(ID_WO, World, nodetree)
+
+ SPECIAL_CASE(ID_CU, Curve, key)
+ SPECIAL_CASE(ID_LT, Lattice, key)
+ SPECIAL_CASE(ID_ME, Mesh, key)
+
+# undef SPECIAL_CASE
+
+ default:
+ break;
+ }
+}
+
+/* Set ID pointer of nested owned IDs (nodetree, key) to NULL.
+ *
+ * Return pointer to a new ID to be used.
+ */
+const ID *nested_id_hack_get_discarded_pointers(NestedIDHackTempStorage *storage,
+ const ID *id)
+{
+ switch (GS(id->name)) {
+# define SPECIAL_CASE(id_type, dna_type, field, variable) \
+ case id_type: \
+ { \
+ storage->variable = *(dna_type *)id; \
+ storage->variable.field = NULL; \
+ return &storage->variable.id; \
+ }
+
+ SPECIAL_CASE(ID_LS, FreestyleLineStyle, nodetree, linestyle)
+ SPECIAL_CASE(ID_LA, Lamp, nodetree, lamp)
+ SPECIAL_CASE(ID_MA, Material, nodetree, material)
+ SPECIAL_CASE(ID_SCE, Scene, nodetree, scene)
+ SPECIAL_CASE(ID_TE, Tex, nodetree, tex)
+ SPECIAL_CASE(ID_WO, World, nodetree, world)
+
+ SPECIAL_CASE(ID_CU, Curve, key, curve)
+ SPECIAL_CASE(ID_LT, Lattice, key, lattice)
+ SPECIAL_CASE(ID_ME, Mesh, key, mesh)
+
+# undef SPECIAL_CASE
+
+ default:
+ break;
+ }
+ return id;
+}
+
+/* Set ID pointer of nested owned IDs (nodetree, key) to the original value. */
+void nested_id_hack_restore_pointers(const ID *old_id, ID *new_id)
+{
+ if (new_id == NULL) {
+ return;
+ }
+ switch (GS(old_id->name)) {
+# define SPECIAL_CASE(id_type, dna_type, field) \
+ case id_type: \
+ { \
+ ((dna_type *)(new_id))->field = \
+ ((dna_type *)(old_id))->field; \
+ break; \
+ }
+
+ SPECIAL_CASE(ID_LS, FreestyleLineStyle, nodetree)
+ SPECIAL_CASE(ID_LA, Lamp, nodetree)
+ SPECIAL_CASE(ID_MA, Material, nodetree)
+ SPECIAL_CASE(ID_SCE, Scene, nodetree)
+ SPECIAL_CASE(ID_TE, Tex, nodetree)
+ SPECIAL_CASE(ID_WO, World, nodetree)
+
+ SPECIAL_CASE(ID_CU, Curve, key)
+ SPECIAL_CASE(ID_LT, Lattice, key)
+ SPECIAL_CASE(ID_ME, Mesh, key)
+
+#undef SPECIAL_CASE
+ default:
+ break;
+ }
+}
+
+/* Remap pointer of nested owned IDs (nodetree. key) to the new ID values. */
+void ntree_hack_remap_pointers(const Depsgraph *depsgraph, ID *id_cow)
+{
+ switch (GS(id_cow->name)) {
+# define SPECIAL_CASE(id_type, dna_type, field, field_type) \
+ case id_type: \
+ { \
+ dna_type *data = (dna_type *)id_cow; \
+ if (data->field != NULL) { \
+ ID *ntree_id_cow = depsgraph->get_cow_id(&data->field->id); \
+ if (ntree_id_cow != NULL) { \
+ DEG_COW_PRINT(" Remapping datablock for %s: id_orig=%p id_cow=%p\n", \
+ data->field->id.name, \
+ data->field, \
+ ntree_id_cow); \
+ data->field = (field_type *)ntree_id_cow; \
+ } \
+ } \
+ break; \
+ }
+
+ SPECIAL_CASE(ID_LS, FreestyleLineStyle, nodetree, bNodeTree)
+ SPECIAL_CASE(ID_LA, Lamp, nodetree, bNodeTree)
+ SPECIAL_CASE(ID_MA, Material, nodetree, bNodeTree)
+ SPECIAL_CASE(ID_SCE, Scene, nodetree, bNodeTree)
+ SPECIAL_CASE(ID_TE, Tex, nodetree, bNodeTree)
+ SPECIAL_CASE(ID_WO, World, nodetree, bNodeTree)
+
+ SPECIAL_CASE(ID_CU, Curve, key, Key)
+ SPECIAL_CASE(ID_LT, Lattice, key, Key)
+ SPECIAL_CASE(ID_ME, Mesh, key, Key)
+
+#undef SPECIAL_CASE
+ default:
+ break;
+ }
+}
+#endif /* NODETREE_NASTY_WORKAROUND */
+
+struct ValidateData {
+ bool is_valid;
+};
+
+/* Similar to generic id_copy() but does not require main and assumes pointer
+ * is already allocated,
+ */
+bool id_copy_inplace_no_main(const ID *id, ID *newid)
+{
+ const ID *id_for_copy = id;
+
+#ifdef NESTED_ID_NASTY_WORKAROUND
+ NestedIDHackTempStorage id_hack_storage;
+ id_for_copy = nested_id_hack_get_discarded_pointers(&id_hack_storage, id);
+#endif
+
+ bool result = BKE_id_copy_ex(NULL,
+ (ID *)id_for_copy,
+ &newid,
+ LIB_ID_CREATE_NO_MAIN |
+ LIB_ID_CREATE_NO_USER_REFCOUNT |
+ LIB_ID_CREATE_NO_ALLOCATE |
+ LIB_ID_CREATE_NO_DEG_TAG,
+ false);
+
+#ifdef NESTED_ID_NASTY_WORKAROUND
+ if (result) {
+ nested_id_hack_restore_pointers(id, newid);
+ }
+#endif
+
+ return result;
+}
+
+/* Similar to BKE_scene_copy() but does not require main and assumes pointer
+ * is already allocated.
+ */
+bool scene_copy_inplace_no_main(const Scene *scene, Scene *new_scene)
+{
+ const ID *id_for_copy = &scene->id;
+
+#ifdef NESTED_ID_NASTY_WORKAROUND
+ NestedIDHackTempStorage id_hack_storage;
+ id_for_copy = nested_id_hack_get_discarded_pointers(&id_hack_storage,
+ &scene->id);
+#endif
+
+ bool result = BKE_id_copy_ex(NULL,
+ id_for_copy,
+ (ID **)&new_scene,
+ LIB_ID_COPY_ACTIONS |
+ LIB_ID_CREATE_NO_MAIN |
+ LIB_ID_CREATE_NO_USER_REFCOUNT |
+ LIB_ID_CREATE_NO_ALLOCATE |
+ LIB_ID_CREATE_NO_DEG_TAG,
+ false);
+
+#ifdef NESTED_ID_NASTY_WORKAROUND
+ if (result) {
+ nested_id_hack_restore_pointers(&scene->id, &new_scene->id);
+ }
+#endif
+
+ return result;
+}
+
+/* Check whether given ID is expanded or still a shallow copy. */
+BLI_INLINE bool check_datablock_expanded(const ID *id_cow)
+{
+ return (id_cow->name[0] != '\0');
+}
+
+/* Check whether datablock was already expanded during depsgraph
+ * construction.
+ */
+static bool check_datablock_expanded_at_construction(const ID *id_orig)
+{
+ const ID_Type id_type = GS(id_orig->name);
+ return (id_type == ID_SCE) ||
+ (id_type == ID_OB && ((Object *)id_orig)->type == OB_ARMATURE) ||
+ (id_type == ID_AR);
+}
+
+/* Those are datablocks which are not covered by dependency graph and hence
+ * does not need any remapping or anything.
+ *
+ * TODO(sergey): How to make it more robust for the future, so we don't have
+ * to maintain exception lists all over the code?
+ */
+static bool check_datablocks_copy_on_writable(const ID *id_orig)
+{
+ const ID_Type id_type = GS(id_orig->name);
+ /* We shouldn't bother if copied ID is same as original one. */
+ if (!deg_copy_on_write_is_needed(id_orig)) {
+ return false;
+ }
+ return !ELEM(id_type, ID_BR,
+ ID_LS,
+ ID_AC,
+ ID_PAL);
+}
+
+/* Callback for BKE_library_foreach_ID_link which remaps original ID pointer
+ * with the one created by CoW system.
+ */
+
+struct RemapCallbackUserData {
+ /* Dependency graph for which remapping is happening. */
+ const Depsgraph *depsgraph;
+ /* Temporarily allocated memory for copying purposes. This ID will
+ * be discarded after expanding is done, so need to make sure temp_id
+ * is replaced with proper real_id.
+ *
+ * NOTE: This is due to our logic of "inplace" duplication, where we
+ * use generic duplication routines (which gives us new ID) which then
+ * is followed with copying data to a placeholder we prepared before and
+ * discarding pointer returned by duplication routines.
+ */
+ const ID *temp_id;
+ ID *real_id;
+ /* Create placeholder for ID nodes for cases when we need to remap original
+ * ID to it[s CoW version but we don't have required ID node yet.
+ *
+ * This happens when expansion happens a ta construction time.
+ */
+ DepsgraphNodeBuilder *node_builder;
+ bool create_placeholders;
+};
+
+int foreach_libblock_remap_callback(void *user_data_v,
+ ID *id_self,
+ ID **id_p,
+ int /*cb_flag*/)
+{
+ RemapCallbackUserData *user_data = (RemapCallbackUserData *)user_data_v;
+ const Depsgraph *depsgraph = user_data->depsgraph;
+ if (*id_p != NULL) {
+ ID *id_orig = *id_p;
+ if (id_orig == user_data->temp_id) {
+ DEG_COW_PRINT(" Remapping datablock for %s: id_temp=%p id_cow=%p\n",
+ id_orig->name, id_orig, user_data->real_id);
+ *id_p = user_data->real_id;
+ }
+ else if (check_datablocks_copy_on_writable(id_orig)) {
+ ID *id_cow;
+ if (user_data->create_placeholders) {
+ /* Special workaround to stop creating temp datablocks for
+ * objects which are coming from scene's collection and which
+ * are never linked to any of layers.
+ *
+ * TODO(sergey): Ideally we need to tell ID looper to ignore
+ * those or at least make it more reliable check where the
+ * pointer is coming from.
+ */
+ const ID_Type id_type = GS(id_orig->name);
+ const ID_Type id_type_self = GS(id_self->name);
+ if (id_type == ID_OB && id_type_self == ID_SCE) {
+ IDDepsNode *id_node = depsgraph->find_id_node(id_orig);
+ if (id_node == NULL) {
+ id_cow = id_orig;
+ }
+ else {
+ id_cow = id_node->id_cow;
+ }
+ }
+ else {
+ id_cow = user_data->node_builder->ensure_cow_id(id_orig);
+ }
+ }
+ else {
+ id_cow = depsgraph->get_cow_id(id_orig);
+ }
+ BLI_assert(id_cow != NULL);
+ DEG_COW_PRINT(" Remapping datablock for %s: id_orig=%p id_cow=%p\n",
+ id_orig->name, id_orig, id_cow);
+ *id_p = id_cow;
+ }
+ }
+ return IDWALK_RET_NOP;
+}
+
+/* Do some special treatment of data transfer from original ID to it's
+ * CoW complementary part.
+ *
+ * Only use for the newly created CoW datablocks.
+ */
+void update_special_pointers(const Depsgraph *depsgraph,
+ const ID *id_orig, ID *id_cow)
+{
+ const ID_Type type = GS(id_orig->name);
+ switch (type) {
+ case ID_OB:
+ {
+ /* Ensure we don't drag someone's else derived mesh to the
+ * new copy of the object.
+ */
+ Object *object_cow = (Object *)id_cow;
+ (void) object_cow; /* Ignored for release builds. */
+ BLI_assert(object_cow->derivedFinal == NULL);
+ BLI_assert(object_cow->derivedDeform == NULL);
+ break;
+ }
+ case ID_ME:
+ {
+ /* For meshes we need to update edit_btmesh to make it to point
+ * to the CoW version of object.
+ *
+ * This is kind of confusing, because actual bmesh is not owned by
+ * the CoW object, so need to be accurate about using link from
+ * edit_btmesh to object.
+ */
+ const Mesh *mesh_orig = (const Mesh *)id_orig;
+ Mesh *mesh_cow = (Mesh *)id_cow;
+ if (mesh_orig->edit_btmesh != NULL) {
+ mesh_cow->edit_btmesh = (BMEditMesh *)MEM_dupallocN(mesh_orig->edit_btmesh);
+ mesh_cow->edit_btmesh->ob =
+ (Object *)depsgraph->get_cow_id(&mesh_orig->edit_btmesh->ob->id);
+ mesh_cow->edit_btmesh->derivedFinal = NULL;
+ mesh_cow->edit_btmesh->derivedCage = NULL;
+ }
+ break;
+ }
+ case ID_SCE:
+ {
+ const Scene *scene_orig = (const Scene *)id_orig;
+ Scene *scene_cow = (Scene *)id_cow;
+ if (scene_orig->obedit != NULL) {
+ scene_cow->obedit = (Object *)depsgraph->get_cow_id(&scene_orig->obedit->id);
+ }
+ else {
+ scene_cow->obedit = NULL;
+ }
+ break;
+ }
+ default:
+ break;
+ }
+}
+
+void update_copy_on_write_layer_collections(
+ ListBase *layer_collections_cow,
+ const ListBase *layer_collections_orig);
+
+void update_copy_on_write_layer_collection(
+ LayerCollection *layer_collection_cow,
+ const LayerCollection *layer_collection_orig)
+{
+ // Make a local copy of original layer collection, so we can start
+ // modifying it.
+ LayerCollection local = *layer_collection_orig;
+ // Copy all pointer data from original CoW version of layer collection.
+ local.next = layer_collection_cow->next;
+ local.prev = layer_collection_cow->prev;
+ local.scene_collection = layer_collection_cow->scene_collection;
+ local.object_bases = layer_collection_cow->object_bases;
+ local.overrides = layer_collection_cow->overrides;
+ local.layer_collections = layer_collection_cow->layer_collections;
+ local.properties = layer_collection_cow->properties;
+ local.properties_evaluated = layer_collection_cow->properties_evaluated;
+ // Synchronize pointer-related data.
+ IDP_Reset(local.properties, layer_collection_orig->properties);
+ // Copy synchronized version back.
+ *layer_collection_cow = local;
+ // Recurs into nested layer collections.
+ update_copy_on_write_layer_collections(
+ &layer_collection_cow->layer_collections,
+ &layer_collection_orig->layer_collections);
+}
+
+void update_copy_on_write_layer_collections(
+ ListBase *layer_collections_cow,
+ const ListBase *layer_collections_orig)
+{
+ const LayerCollection *layer_collection_orig =
+ (const LayerCollection *)layer_collections_orig->first;
+ LayerCollection *layer_collection_cow =
+ (LayerCollection *)layer_collections_cow->first;
+ while (layer_collection_orig != NULL) {
+ update_copy_on_write_layer_collection(layer_collection_cow,
+ layer_collection_orig);
+ layer_collection_orig = layer_collection_orig->next;
+ layer_collection_cow = layer_collection_cow->next;
+ }
+}
+
+void update_copy_on_write_view_layer(const Depsgraph *depsgraph,
+ ViewLayer *view_layer_cow,
+ const ViewLayer *view_layer_orig)
+{
+ // Update pointers to active base.
+ if (view_layer_orig->basact == NULL) {
+ view_layer_cow->basact = NULL;
+ }
+ else {
+ const Object *obact_orig = view_layer_orig->basact->object;
+ Object *obact_cow = (Object *)depsgraph->get_cow_id(&obact_orig->id);
+ view_layer_cow->basact = BKE_view_layer_base_find(view_layer_cow, obact_cow);
+ }
+ // Update base flags.
+ //
+ // TODO(sergey): We should probably check visibled/selectabled.
+ // flag here?
+ const Base *base_orig = (Base *)view_layer_orig->object_bases.first;
+ Base *base_cow = (Base *)view_layer_cow->object_bases.first;;
+ while (base_orig != NULL) {
+ base_cow->flag = base_orig->flag;
+ base_orig = base_orig->next;
+ base_cow = base_cow->next;
+ }
+ // Synchronize settings.
+ view_layer_cow->active_collection = view_layer_orig->active_collection;
+ view_layer_cow->flag = view_layer_orig->flag;
+ view_layer_cow->layflag = view_layer_orig->layflag;
+ view_layer_cow->passflag = view_layer_orig->passflag;
+ view_layer_cow->pass_alpha_threshold = view_layer_orig->pass_alpha_threshold;
+ // Synchronize ID properties.
+ IDP_Reset(view_layer_cow->properties, view_layer_orig->properties);
+ IDP_Reset(view_layer_cow->id_properties, view_layer_orig->id_properties);
+ // Synchronize layer collections.
+ update_copy_on_write_layer_collections(
+ &view_layer_cow->layer_collections,
+ &view_layer_orig->layer_collections);
+}
+
+void update_copy_on_write_view_layers(const Depsgraph *depsgraph,
+ Scene *scene_cow,
+ const Scene *scene_orig)
+{
+ const ViewLayer *view_layer_orig = (const ViewLayer *)scene_orig->view_layers.first;
+ ViewLayer *view_layer_cow = (ViewLayer *)scene_cow->view_layers.first;
+ while (view_layer_orig != NULL) {
+ update_copy_on_write_view_layer(depsgraph,
+ view_layer_cow,
+ view_layer_orig);
+ view_layer_orig = view_layer_orig->next;
+ view_layer_cow = view_layer_cow->next;
+ }
+}
+
+void update_copy_on_write_scene_collections(
+ ListBase *collections_cow,
+ const ListBase *collections_orig);
+
+void update_copy_on_write_scene_collection(
+ SceneCollection *collection_cow,
+ const SceneCollection *collection_orig)
+{
+ collection_cow->active_object_index = collection_orig->active_object_index;
+ update_copy_on_write_scene_collections(
+ &collection_cow->scene_collections,
+ &collection_orig->scene_collections);
+}
+
+void update_copy_on_write_scene_collections(
+ ListBase *collections_cow,
+ const ListBase *collections_orig)
+{
+ const SceneCollection *nested_collection_orig =
+ (const SceneCollection *)collections_orig->first;
+ SceneCollection *nested_collection_cow =
+ (SceneCollection *)collections_cow->first;
+ while (nested_collection_orig != NULL) {
+ update_copy_on_write_scene_collection(
+ nested_collection_cow,
+ nested_collection_orig);
+ nested_collection_orig = nested_collection_orig->next;
+ nested_collection_cow = nested_collection_cow->next;
+ }
+}
+
+/* Update copy-on-write version of scene from original scene. */
+void update_copy_on_write_scene(const Depsgraph *depsgraph,
+ Scene *scene_cow,
+ const Scene *scene_orig)
+{
+ // Some non-pointer data sync, current frame for now.
+ // TODO(sergey): Are we missing something here?
+ scene_cow->r.cfra = scene_orig->r.cfra;
+ scene_cow->r.subframe = scene_orig->r.subframe;
+ // Update view layers and collections.
+ update_copy_on_write_view_layers(depsgraph, scene_cow, scene_orig);
+ update_copy_on_write_scene_collection(scene_cow->collection,
+ scene_orig->collection);
+ // Update edit object pointer.
+ if (scene_orig->obedit != NULL) {
+ scene_cow->obedit = (Object *)depsgraph->get_cow_id(&scene_orig->obedit->id);
+ }
+ else {
+ scene_cow->obedit = NULL;
+ }
+ /* Synchronize active render engine. */
+ BLI_strncpy(scene_cow->view_render.engine_id,
+ scene_orig->view_render.engine_id,
+ sizeof(scene_cow->view_render.engine_id));
+ /* TODO(sergey): What else do we need here? */
+}
+
+/* Update copy-on-write version of armature object from original scene. */
+void update_copy_on_write_object(const Depsgraph * /*depsgraph*/,
+ Object *object_cow,
+ const Object *object_orig)
+{
+ /* TODO(sergey): This function might be split into a smaller ones,
+ * reused for different updates. And maybe even moved to BKE.
+ */
+ /* Update armature/pose related flags. */
+ bPose *pose_cow = object_cow->pose;
+ const bPose *pose_orig = object_orig->pose;
+ extract_pose_from_pose(pose_cow, pose_orig);
+ /* Update object itself. */
+ BKE_object_transform_copy(object_cow, object_orig);
+}
+
+/* Update copy-on-write version of datablock from it's original ID without re-building
+ * the whole datablock from scratch.
+ *
+ * Used for such special cases as scene collections and armatures, which can not use full
+ * re-alloc due to pointers used as function bindings.
+ */
+void update_copy_on_write_datablock(const Depsgraph *depsgraph,
+ const ID *id_orig, ID *id_cow)
+{
+ bool ok = false;
+ const ID_Type id_type = GS(id_orig->name);
+ switch (id_type) {
+ case ID_SCE: {
+ const Scene *scene_orig = (const Scene *)id_orig;
+ Scene *scene_cow = (Scene *)id_cow;
+ update_copy_on_write_scene(depsgraph, scene_cow, scene_orig);
+ ok = true;
+ break;
+ }
+ case ID_OB: {
+ const Object *object_orig = (const Object *)id_orig;
+ Object *object_cow = (Object *)id_cow;
+ if (object_orig->type == OB_ARMATURE) {
+ update_copy_on_write_object(depsgraph,
+ object_cow,
+ object_orig);
+ ok = true;
+ }
+ break;
+ }
+ case ID_AR:
+ /* Nothing to do currently. */
+ ok = true;
+ break;
+ default:
+ break;
+ }
+ // TODO(sergey): Other ID types here.
+ if (!ok) {
+ BLI_assert(!"Missing update logic of expanded datablock");
+ }
+}
+
+/* This callback is used to validate that all nested ID datablocks are
+ * properly expanded.
+ */
+int foreach_libblock_validate_callback(void *user_data,
+ ID * /*id_self*/,
+ ID **id_p,
+ int /*cb_flag*/)
+{
+ ValidateData *data = (ValidateData *)user_data;
+ if (*id_p != NULL) {
+ if (!check_datablock_expanded(*id_p)) {
+ data->is_valid = false;
+ /* TODO(sergey): Store which is is not valid? */
+ }
+ }
+ return IDWALK_RET_NOP;
+}
+
+} // namespace
+
+/* Actual implementation of logic which "expands" all the data which was not
+ * yet copied-on-write.
+ *
+ * NOTE: Expects that CoW datablock is empty.
+ */
+ID *deg_expand_copy_on_write_datablock(const Depsgraph *depsgraph,
+ const IDDepsNode *id_node,
+ DepsgraphNodeBuilder *node_builder,
+ bool create_placeholders)
+{
+ BLI_assert(!create_placeholders ||
+ check_datablock_expanded_at_construction(id_node->id_orig));
+ const ID *id_orig = id_node->id_orig;
+ ID *id_cow = id_node->id_cow;
+ /* No need to expand such datablocks, their copied ID is same as original
+ * one already.
+ */
+ if (!deg_copy_on_write_is_needed(id_orig)) {
+ return id_cow;
+ }
+ DEG_COW_PRINT("Expanding datablock for %s: id_orig=%p id_cow=%p\n",
+ id_orig->name, id_orig, id_cow);
+ /* Sanity checks. */
+ /* NOTE: Disabled for now, conflicts when re-using evaluated datablock when
+ * rebuilding dependencies.
+ */
+ if (check_datablock_expanded(id_cow) && create_placeholders) {
+ deg_free_copy_on_write_datablock(id_cow);
+ }
+ // BLI_assert(check_datablock_expanded(id_cow) == false);
+ /* Copy data from original ID to a copied version. */
+ /* TODO(sergey): Avoid doing full ID copy somehow, make Mesh to reference
+ * original geometry arrays for until those are modified.
+ */
+ /* TODO(sergey): We do some trickery with temp bmain and extra ID pointer
+ * just to be able to use existing API. Ideally we need to replace this with
+ * in-place copy from existing datablock to a prepared memory.
+ *
+ * NOTE: We don't use BKE_main_{new,free} because:
+ * - We don't want heap-allocations here.
+ * - We don't want bmain's content to be freed when main is freed.
+ */
+ bool done = false;
+ /* Need to make sure the possibly temporary allocated memory is correct for
+ * until we are fully done with remapping original pointers with copied on
+ * write ones.
+ */
+ ID *newid = NULL;
+ /* First we handle special cases which are not covered by id_copy() yet.
+ * or cases where we want to do something smarter than simple datablock
+ * copy.
+ */
+ const ID_Type id_type = GS(id_orig->name);
+ switch (id_type) {
+ case ID_SCE:
+ {
+ done = scene_copy_inplace_no_main((Scene *)id_orig, (Scene *)id_cow);
+ break;
+ }
+ case ID_ME:
+ {
+ /* TODO(sergey): Ideally we want to handle meshes in a special
+ * manner here to avoid initial copy of all the geometry arrays.
+ */
+ break;
+ }
+ default:
+ break;
+ }
+ if (!done) {
+ done = id_copy_inplace_no_main(id_orig, id_cow);
+ }
+ if (!done) {
+ BLI_assert(!"No idea how to perform CoW on datablock");
+ }
+ /* Update pointers to nested ID datablocks. */
+ DEG_COW_PRINT(" Remapping ID links for %s: id_orig=%p id_cow=%p\n",
+ id_orig->name, id_orig, id_cow);
+
+#ifdef NESTED_ID_NASTY_WORKAROUND
+ ntree_hack_remap_pointers(depsgraph, id_cow);
+#endif
+ /* Do it now, so remapping will understand that possibly remapped self ID
+ * is not to be remapped again.
+ */
+ deg_tag_copy_on_write_id(id_cow, id_orig);
+ /* Perform remapping of the nodes. */
+ RemapCallbackUserData user_data;
+ user_data.depsgraph = depsgraph;
+ user_data.temp_id = newid;
+ user_data.real_id = id_cow;
+ user_data.node_builder = node_builder;
+ user_data.create_placeholders = create_placeholders;
+ BKE_library_foreach_ID_link(NULL,
+ id_cow,
+ foreach_libblock_remap_callback,
+ (void *)&user_data,
+ IDWALK_NOP);
+ /* Correct or tweak some pointers which are not taken care by foreach
+ * from above.
+ */
+ update_special_pointers(depsgraph, id_orig, id_cow);
+ /* Now we can safely discard temporary memory used for copying. */
+ if (newid != NULL) {
+ MEM_freeN(newid);
+ }
+ return id_cow;
+}
+
+/* NOTE: Depsgraph is supposed to have ID node already. */
+ID *deg_expand_copy_on_write_datablock(const Depsgraph *depsgraph,
+ ID *id_orig,
+ DepsgraphNodeBuilder *node_builder,
+ bool create_placeholders)
+{
+ DEG::IDDepsNode *id_node = depsgraph->find_id_node(id_orig);
+ BLI_assert(id_node != NULL);
+ return deg_expand_copy_on_write_datablock(depsgraph,
+ id_node,
+ node_builder,
+ create_placeholders);
+}
+
+ID *deg_update_copy_on_write_datablock(const Depsgraph *depsgraph,
+ const IDDepsNode *id_node)
+{
+ const ID *id_orig = id_node->id_orig;
+ const ID_Type id_type = GS(id_orig->name);
+ ID *id_cow = id_node->id_cow;
+ /* Similar to expansion, no need to do anything here. */
+ if (!deg_copy_on_write_is_needed(id_orig)) {
+ return id_cow;
+ }
+ /* Special case for datablocks which are expanded at the dependency graph
+ * construction time. This datablocks must never change pointers of their
+ * nested data since it is used for function bindings.
+ */
+ if (check_datablock_expanded_at_construction(id_orig)) {
+ BLI_assert(check_datablock_expanded(id_cow) == true);
+ update_copy_on_write_datablock(depsgraph, id_orig, id_cow);
+ return id_cow;
+ }
+ /* For the rest if datablock types we use simple logic:
+ * - Free previously expanded data, if any.
+ * - Perform full datablock copy.
+ *
+ * Note that we never free GPU materials from here since that's not
+ * safe for threading and GPU materials are likely to be re-used.
+ */
+ /* TODO(sergey): Either move this to an utility function or redesign
+ * Copy-on-Write components in a way that only needed parts are being
+ * copied over.
+ */
+ ListBase gpumaterial_backup;
+ ListBase *gpumaterial_ptr = NULL;
+ Mesh *mesh_evaluated = NULL;
+ IDProperty *base_collection_properties = NULL;
+ short base_flag = 0;
+ if (check_datablock_expanded(id_cow)) {
+ switch (id_type) {
+ case ID_MA:
+ {
+ Material *material = (Material *)id_cow;
+ gpumaterial_ptr = &material->gpumaterial;
+ break;
+ }
+ case ID_WO:
+ {
+ World *world = (World *)id_cow;
+ gpumaterial_ptr = &world->gpumaterial;
+ break;
+ }
+ case ID_OB:
+ {
+ Object *object = (Object *)id_cow;
+ /* Store evaluated mesh, make sure we don't free it. */
+ mesh_evaluated = object->mesh_evaluated;
+ object->mesh_evaluated = NULL;
+ /* Currently object update will override actual object->data
+ * to an evaluated version. Need to make sure we don't have
+ * data set to evaluated one before free anything.
+ */
+ if (mesh_evaluated != NULL) {
+ if (object->data == mesh_evaluated) {
+ object->data = mesh_evaluated->id.orig_id;
+ }
+ }
+ /* Make a backup of base flags. */
+ base_collection_properties = object->base_collection_properties;
+ base_flag = object->base_flag;
+ break;
+ }
+ default:
+ break;
+ }
+ if (gpumaterial_ptr != NULL) {
+ gpumaterial_backup = *gpumaterial_ptr;
+ gpumaterial_ptr->first = gpumaterial_ptr->last = NULL;
+ }
+ }
+ deg_free_copy_on_write_datablock(id_cow);
+ deg_expand_copy_on_write_datablock(depsgraph, id_node);
+ /* Restore GPU materials. */
+ if (gpumaterial_ptr != NULL) {
+ *gpumaterial_ptr = gpumaterial_backup;
+ }
+ if (id_type == ID_OB) {
+ Object *object = (Object *)id_cow;
+ if (mesh_evaluated != NULL) {
+ object->mesh_evaluated = mesh_evaluated;
+ /* Do same thing as object update: override actual object data
+ * pointer with evaluated datablock.
+ */
+ if (object->type == OB_MESH) {
+ object->data = mesh_evaluated;
+ /* Evaluated mesh simply copied edit_btmesh pointer from
+ * original mesh during update, need to make sure no dead
+ * pointers are left behind.
+ */
+ mesh_evaluated->edit_btmesh =
+ ((Mesh *)mesh_evaluated->id.orig_id)->edit_btmesh;
+ }
+ }
+ if (base_collection_properties != NULL) {
+ object->base_collection_properties = base_collection_properties;
+ object->base_flag = base_flag;
+ }
+ }
+ return id_cow;
+}
+
+/* NOTE: Depsgraph is supposed to have ID node already. */
+ID *deg_update_copy_on_write_datablock(const Depsgraph *depsgraph,
+ ID *id_orig)
+{
+ DEG::IDDepsNode *id_node = depsgraph->find_id_node(id_orig);
+ BLI_assert(id_node != NULL);
+ return deg_update_copy_on_write_datablock(depsgraph, id_node);
+}
+
+/* Free content of the CoW datablock
+ * Notes:
+ * - Does not recurs into nested ID datablocks.
+ * - Does not free datablock itself.
+ */
+void deg_free_copy_on_write_datablock(ID *id_cow)
+{
+ if (!check_datablock_expanded(id_cow)) {
+ /* Actual content was never copied on top of CoW block, we have
+ * nothing to free.
+ */
+ return;
+ }
+ const ID_Type type = GS(id_cow->name);
+#ifdef NESTED_ID_NASTY_WORKAROUND
+ nested_id_hack_discard_pointers(id_cow);
+#endif
+ switch (type) {
+ case ID_OB:
+ {
+ /* TODO(sergey): This workaround is only to prevent free derived
+ * caches from modifying object->data. This is currently happening
+ * due to mesh/curve datablock boundbox tagging dirty.
+ */
+ Object *ob_cow = (Object *)id_cow;
+ ob_cow->data = NULL;
+ break;
+ }
+ case ID_ME:
+ {
+ Mesh *mesh_cow = (Mesh *)id_cow;
+ if (mesh_cow->edit_btmesh != NULL) {
+ BKE_editmesh_free_derivedmesh(mesh_cow->edit_btmesh);
+ MEM_freeN(mesh_cow->edit_btmesh);
+ mesh_cow->edit_btmesh = NULL;
+ }
+ break;
+ }
+ case ID_SCE:
+ {
+ /* Special case for scene: we use explicit function call which
+ * ensures no access to other datablocks is done.
+ */
+ Scene *scene = (Scene *)id_cow;
+ BKE_scene_free_ex(scene, false);
+ BKE_libblock_free_data(id_cow, false);
+ id_cow->name[0] = '\0';
+ return;
+ }
+ default:
+ break;
+ }
+ BKE_libblock_free_datablock(id_cow, 0);
+ BKE_libblock_free_data(id_cow, false);
+ /* Signal datablock as not being expanded. */
+ id_cow->name[0] = '\0';
+}
+
+void deg_evaluate_copy_on_write(const EvaluationContext * /*eval_ctx*/,
+ const Depsgraph *depsgraph,
+ const IDDepsNode *id_node)
+{
+ DEBUG_PRINT("%s on %s\n", __func__, id_node->id_orig->name);
+ deg_update_copy_on_write_datablock(depsgraph, id_node);
+}
+
+bool deg_validate_copy_on_write_datablock(ID *id_cow)
+{
+ if (id_cow == NULL) {
+ return false;
+ }
+ ValidateData data;
+ data.is_valid = true;
+ BKE_library_foreach_ID_link(NULL,
+ id_cow,
+ foreach_libblock_validate_callback,
+ &data,
+ IDWALK_NOP);
+ return data.is_valid;
+}
+
+void deg_tag_copy_on_write_id(ID *id_cow, const ID *id_orig)
+{
+ id_cow->tag |= LIB_TAG_COPY_ON_WRITE;
+ id_cow->orig_id = (ID *)id_orig;
+}
+
+bool deg_copy_on_write_is_expanded(const ID *id_cow)
+{
+ return check_datablock_expanded(id_cow);
+}
+
+bool deg_copy_on_write_is_needed(const ID *id_orig)
+{
+ const ID_Type id_type = GS(id_orig->name);
+ return !ELEM(id_type, ID_IM);
+}
+
+} // namespace DEG
diff --git a/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.h b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.h
new file mode 100644
index 00000000000..a2b57cb7198
--- /dev/null
+++ b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.h
@@ -0,0 +1,109 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 20137Blender Foundation.
+ * All rights reserved.
+ *
+ * Original Author: Sergey Sharybin
+ * Contributor(s): None Yet
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/depsgraph/intern/eval/deg_eval_copy_on_write.h
+ * \ingroup depsgraph
+ */
+
+#pragma once
+
+#include <stddef.h>
+
+struct EvaluationContext;
+struct ID;
+
+/* Unkomment this to have verbose log about original and CoW pointers
+ * logged, with detailed information when they are allocated, expanded
+ * and remapped.
+ */
+// #define DEG_DEBUG_COW_POINTERS
+
+#ifdef DEG_DEBUG_COW_POINTERS
+# define DEG_COW_PRINT(format, ...) printf(format, __VA_ARGS__);
+#else
+# define DEG_COW_PRINT(format, ...)
+#endif
+
+namespace DEG {
+
+struct Depsgraph;
+struct DepsgraphNodeBuilder;
+struct IDDepsNode;
+
+/* Get fully expanded (ready for use) copy-on-write datablock for the given
+ * original datablock.
+ */
+ID *deg_expand_copy_on_write_datablock(const struct Depsgraph *depsgraph,
+ const IDDepsNode *id_node,
+ DepsgraphNodeBuilder *node_builder = NULL,
+ bool create_placeholders = false);
+ID *deg_expand_copy_on_write_datablock(const struct Depsgraph *depsgraph,
+ struct ID *id_orig,
+ DepsgraphNodeBuilder *node_builder = NULL,
+ bool create_placeholders = false);
+
+/* Makes sure given CoW datablock is brought back to state of the original
+ * datablock.
+ */
+ID *deg_update_copy_on_write_datablock(const struct Depsgraph *depsgraph,
+ const IDDepsNode *id_node);
+ID *deg_update_copy_on_write_datablock(const struct Depsgraph *depsgraph,
+ struct ID *id_orig);
+
+/* Helper function which frees memory used by copy-on-written databnlock. */
+void deg_free_copy_on_write_datablock(struct ID *id_cow);
+
+/* Callback function for depsgraph operation node which ensures copy-on-write
+ * datablock is ready for use by further evaluation routines.
+ */
+void deg_evaluate_copy_on_write(const struct EvaluationContext *eval_ctx,
+ const struct Depsgraph *depsgraph,
+ const struct IDDepsNode *id_node);
+
+/* Check that given ID is propely expanded and does not have any shallow
+ * copies inside.
+ */
+bool deg_validate_copy_on_write_datablock(ID *id_cow);
+
+/* Tag given ID block as being copy-on-wtritten. */
+void deg_tag_copy_on_write_id(struct ID *id_cow, const struct ID *id_orig);
+
+/* Check whether ID datablock is expanded.
+ *
+ * TODO(sergey): Make it an inline function or a macro.
+ */
+bool deg_copy_on_write_is_expanded(const struct ID *id_cow);
+
+/* Check whether copy-on-write datablock is needed for given ID.
+ *
+ * There are some exceptions on datablocks which are covered by dependency graph
+ * but which we don't want to start duplicating.
+ *
+ * This includes images.
+ */
+bool deg_copy_on_write_is_needed(const ID *id_orig);
+
+} // namespace DEG
diff --git a/source/blender/depsgraph/intern/eval/deg_eval_flush.cc b/source/blender/depsgraph/intern/eval/deg_eval_flush.cc
index daf008ddb7d..c0d5e08b80f 100644
--- a/source/blender/depsgraph/intern/eval/deg_eval_flush.cc
+++ b/source/blender/depsgraph/intern/eval/deg_eval_flush.cc
@@ -36,6 +36,7 @@
#include <deque>
#include "BLI_utildefines.h"
+#include "BLI_listbase.h"
#include "BLI_task.h"
#include "BLI_ghash.h"
@@ -51,6 +52,7 @@ extern "C" {
#include "intern/nodes/deg_node_operation.h"
#include "intern/depsgraph_intern.h"
+#include "intern/eval/deg_eval_copy_on_write.h"
#include "util/deg_util_foreach.h"
namespace DEG {
@@ -70,19 +72,6 @@ typedef std::deque<OperationDepsNode *> FlushQueue;
namespace {
-// TODO(sergey): De-duplicate with depsgraph_tag,cc
-void lib_id_recalc_tag(Main *bmain, ID *id)
-{
- id->recalc |= ID_RECALC;
- DEG_id_type_tag(bmain, GS(id->name));
-}
-
-void lib_id_recalc_data_tag(Main *bmain, ID *id)
-{
- id->recalc |= ID_RECALC_DATA;
- DEG_id_type_tag(bmain, GS(id->name));
-}
-
void flush_init_operation_node_func(
void *__restrict data_v,
const int i,
@@ -146,9 +135,10 @@ BLI_INLINE void flush_handle_id_node(IDDepsNode *id_node)
}
/* TODO(sergey): We can reduce number of arguments here. */
-BLI_INLINE void flush_handle_component_node(Depsgraph * /*graph*/,
+BLI_INLINE void flush_handle_component_node(Depsgraph *graph,
IDDepsNode *id_node,
ComponentDepsNode *comp_node,
+ bool use_copy_on_write,
FlushQueue *queue)
{
/* We only handle component once. */
@@ -156,46 +146,27 @@ BLI_INLINE void flush_handle_component_node(Depsgraph * /*graph*/,
return;
}
comp_node->done = COMPONENT_STATE_DONE;
+ /* Currently this is needed to get object->mesh to be replaced with
+ * original mesh (rather than being evaluated_mesh).
+ *
+ * TODO(sergey): This is something we need to avoid.
+ */
+ if (use_copy_on_write && comp_node->depends_on_cow()) {
+ ComponentDepsNode *cow_comp =
+ id_node->find_component(DEG_NODE_TYPE_COPY_ON_WRITE);
+ cow_comp->tag_update(graph);
+ }
/* Tag all required operations in component for update. */
foreach (OperationDepsNode *op, comp_node->operations) {
- op->flag |= DEPSOP_FLAG_NEEDS_UPDATE;
- }
- if (GS(id_node->id->name) == ID_OB) {
- Object *object = (Object *)id_node->id;
- /* This code is used to preserve those areas which does
- * direct object update,
+ /* We don't want to flush tags in "upstream" direction for
+ * certain types of operations.
*
- * Plus it ensures visibility changes and relations and
- * layers visibility update has proper flags to work with.
+ * TODO(sergey): Need a more generic solution for this.
*/
- switch (comp_node->type) {
- case DEG_NODE_TYPE_UNDEFINED:
- case DEG_NODE_TYPE_OPERATION:
- case DEG_NODE_TYPE_TIMESOURCE:
- case DEG_NODE_TYPE_ID_REF:
- case DEG_NODE_TYPE_SEQUENCER:
- case NUM_DEG_NODE_TYPES:
- /* Ignore, does not translate to object component. */
- BLI_assert(!"This should never happen!");
- break;
- case DEG_NODE_TYPE_ANIMATION:
- object->recalc |= OB_RECALC_TIME;
- break;
- case DEG_NODE_TYPE_TRANSFORM:
- object->recalc |= OB_RECALC_OB;
- break;
- case DEG_NODE_TYPE_GEOMETRY:
- case DEG_NODE_TYPE_EVAL_POSE:
- case DEG_NODE_TYPE_BONE:
- case DEG_NODE_TYPE_EVAL_PARTICLES:
- case DEG_NODE_TYPE_SHADING:
- case DEG_NODE_TYPE_CACHE:
- case DEG_NODE_TYPE_PROXY:
- object->recalc |= OB_RECALC_DATA;
- break;
- case DEG_NODE_TYPE_PARAMETERS:
- break;
+ if (op->opcode == DEG_OPCODE_PARTICLE_SETTINGS_EVAL) {
+ continue;
}
+ op->flag |= DEPSOP_FLAG_NEEDS_UPDATE;
}
/* When some target changes bone, we might need to re-run the
* whole IK solver, otherwise result might be unpredictable.
@@ -237,19 +208,54 @@ BLI_INLINE OperationDepsNode *flush_schedule_children(
return result;
}
-BLI_INLINE void flush_editors_id_update(Main *bmain,
- Depsgraph *graph)
+void flush_engine_data_update(ID *id)
+{
+ if (GS(id->name) != ID_OB) {
+ return;
+ }
+ Object *object = (Object *)id;
+ BLI_LISTBASE_FOREACH(ObjectEngineData *, engine_data, &object->drawdata) {
+ engine_data->recalc |= id->recalc;
+ }
+}
+
+/* NOTE: It will also accumulate flags from changed components. */
+void flush_editors_id_update(Main *bmain,
+ Depsgraph *graph,
+ const DEGEditorUpdateContext *update_ctx)
{
foreach (IDDepsNode *id_node, graph->id_nodes) {
if (id_node->done != ID_STATE_MODIFIED) {
continue;
}
+ DEG_id_type_tag(bmain, GS(id_node->id_orig->name));
/* TODO(sergey): Do we need to pass original or evaluated ID here? */
- ID *id = id_node->id;
- deg_editors_id_update(bmain, id);
- lib_id_recalc_tag(bmain, id);
- /* TODO(sergey): For until we've got proper data nodes in the graph. */
- lib_id_recalc_data_tag(bmain, id);
+ ID *id_orig = id_node->id_orig;
+ ID *id_cow = id_node->id_cow;
+ /* Copy tag from original data to CoW storage.
+ * This is because DEG_id_tag_update() sets tags on original
+ * data.
+ */
+ id_cow->recalc |= (id_orig->recalc & ID_RECALC_ALL);
+ /* Gather recalc flags from all changed components. */
+ GHASH_FOREACH_BEGIN(ComponentDepsNode *, comp_node, id_node->components)
+ {
+ if (comp_node->done != COMPONENT_STATE_DONE) {
+ continue;
+ }
+ DepsNodeFactory *factory = deg_type_get_factory(comp_node->type);
+ BLI_assert(factory != NULL);
+ id_cow->recalc |= factory->id_recalc_tag();
+ }
+ GHASH_FOREACH_END();
+ DEG_DEBUG_PRINTF("Accumulated recalc bits for %s: %u\n",
+ id_orig->name, (unsigned int)id_cow->recalc);
+ /* Inform editors. */
+ if (deg_copy_on_write_is_expanded(id_cow)) {
+ deg_editors_id_update(update_ctx, id_cow);
+ /* Inform draw engines that something was changed. */
+ flush_engine_data_update(id_cow);
+ }
}
}
@@ -260,6 +266,7 @@ BLI_INLINE void flush_editors_id_update(Main *bmain,
*/
void deg_graph_flush_updates(Main *bmain, Depsgraph *graph)
{
+ const bool use_copy_on_write = DEG_depsgraph_use_copy_on_write();
/* Sanity checks. */
BLI_assert(bmain != NULL);
BLI_assert(graph != NULL);
@@ -272,6 +279,12 @@ void deg_graph_flush_updates(Main *bmain, Depsgraph *graph)
/* Starting from the tagged "entry" nodes, flush outwards. */
FlushQueue queue;
flush_schedule_entrypoints(graph, &queue);
+ /* Prepare update context for editors. */
+ DEGEditorUpdateContext update_ctx;
+ update_ctx.bmain = bmain;
+ update_ctx.depsgraph = (::Depsgraph *)graph;
+ update_ctx.scene = graph->scene;
+ update_ctx.view_layer = graph->view_layer;
/* Do actual flush. */
while (!queue.empty()) {
OperationDepsNode *op_node = queue.front();
@@ -286,13 +299,14 @@ void deg_graph_flush_updates(Main *bmain, Depsgraph *graph)
flush_handle_component_node(graph,
id_node,
comp_node,
+ use_copy_on_write,
&queue);
/* Flush to nodes along links. */
op_node = flush_schedule_children(op_node, &queue);
}
}
/* Inform editors about all changes. */
- flush_editors_id_update(bmain, graph);
+ flush_editors_id_update(bmain, graph, &update_ctx);
}
static void graph_clear_func(
diff --git a/source/blender/depsgraph/intern/nodes/deg_node.cc b/source/blender/depsgraph/intern/nodes/deg_node.cc
index d72ca384044..fdcfc129073 100644
--- a/source/blender/depsgraph/intern/nodes/deg_node.cc
+++ b/source/blender/depsgraph/intern/nodes/deg_node.cc
@@ -34,6 +34,7 @@
#include "BLI_utildefines.h"
+#include "intern/eval/deg_eval_copy_on_write.h"
#include "intern/nodes/deg_node_component.h"
#include "intern/nodes/deg_node_id.h"
#include "intern/nodes/deg_node_operation.h"
@@ -41,6 +42,7 @@
#include "intern/depsgraph_intern.h"
#include "util/deg_util_foreach.h"
+#include "util/deg_util_function.h"
namespace DEG {
diff --git a/source/blender/depsgraph/intern/nodes/deg_node_component.cc b/source/blender/depsgraph/intern/nodes/deg_node_component.cc
index 9450ed7f17d..1f56edd1f87 100644
--- a/source/blender/depsgraph/intern/nodes/deg_node_component.cc
+++ b/source/blender/depsgraph/intern/nodes/deg_node_component.cc
@@ -124,8 +124,7 @@ static void comp_node_hash_value_free(void *value_v)
ComponentDepsNode::ComponentDepsNode() :
entry_operation(NULL),
- exit_operation(NULL),
- layers(0)
+ exit_operation(NULL)
{
operations_map = BLI_ghash_new(comp_node_hash_key,
comp_node_hash_key_cmp,
@@ -158,15 +157,12 @@ string ComponentDepsNode::identifier() const
char typebuf[16];
sprintf(typebuf, "(%d)", type);
- char layers[16];
- sprintf(layers, "%u", this->layers);
-
- return string(typebuf) + name + " : " + idname + " (Layers: " + layers + ")";
+ return string(typebuf) + name + " : " + idname;
}
OperationDepsNode *ComponentDepsNode::find_operation(OperationIDKey key) const
{
- OperationDepsNode *node;
+ OperationDepsNode *node = NULL;
if (operations_map != NULL) {
node = (OperationDepsNode *)BLI_ghash_lookup(operations_map, &key);
}
@@ -233,7 +229,7 @@ OperationDepsNode *ComponentDepsNode::add_operation(const DepsEvalOperationCb& o
OperationDepsNode *op_node = find_operation(opcode, name, name_tag);
if (!op_node) {
DepsNodeFactory *factory = deg_type_get_factory(DEG_NODE_TYPE_OPERATION);
- op_node = (OperationDepsNode *)factory->create_node(this->owner->id, "", name);
+ op_node = (OperationDepsNode *)factory->create_node(this->owner->id_orig, "", name);
/* register opnode in this component's operation set */
OperationIDKey *key = OBJECT_GUARDED_NEW(OperationIDKey, opcode, name, name_tag);
@@ -346,7 +342,7 @@ OperationDepsNode *ComponentDepsNode::get_exit_operation()
return NULL;
}
-void ComponentDepsNode::finalize_build()
+void ComponentDepsNode::finalize_build(Depsgraph * /*graph*/)
{
operations.reserve(BLI_ghash_size(operations_map));
GHASH_FOREACH_BEGIN(OperationDepsNode *, op_node, operations_map)
@@ -381,36 +377,41 @@ void BoneComponentDepsNode::init(const ID *id, const char *subdata)
/* Register all components. =============================== */
-DEG_COMPONENT_NODE_DEFINE(Animation, ANIMATION, ID_RECALC_NONE);
-DEG_COMPONENT_NODE_DEFINE(Bone, BONE, ID_RECALC_NONE);
-DEG_COMPONENT_NODE_DEFINE(Cache, CACHE, ID_RECALC_NONE);
-DEG_COMPONENT_NODE_DEFINE(Geometry, GEOMETRY, ID_RECALC_NONE);
-DEG_COMPONENT_NODE_DEFINE(Parameters, PARAMETERS, ID_RECALC_NONE);
-DEG_COMPONENT_NODE_DEFINE(Particles, EVAL_PARTICLES, ID_RECALC_NONE);
-DEG_COMPONENT_NODE_DEFINE(Proxy, PROXY, ID_RECALC_NONE);
-DEG_COMPONENT_NODE_DEFINE(Pose, EVAL_POSE, ID_RECALC_NONE);
-DEG_COMPONENT_NODE_DEFINE(Sequencer, SEQUENCER, ID_RECALC_NONE);
-DEG_COMPONENT_NODE_DEFINE(Shading, SHADING, ID_RECALC_NONE);
-DEG_COMPONENT_NODE_DEFINE(Transform, TRANSFORM, ID_RECALC_NONE);
+DEG_COMPONENT_NODE_DEFINE(Animation, ANIMATION, ID_RECALC_ANIMATION);
+DEG_COMPONENT_NODE_DEFINE(BatchCache, BATCH_CACHE, ID_RECALC_DRAW_CACHE);
+DEG_COMPONENT_NODE_DEFINE(Bone, BONE, ID_RECALC_GEOMETRY);
+DEG_COMPONENT_NODE_DEFINE(Cache, CACHE, ID_RECALC);
+DEG_COMPONENT_NODE_DEFINE(CopyOnWrite, COPY_ON_WRITE, ID_RECALC);
+DEG_COMPONENT_NODE_DEFINE(Geometry, GEOMETRY, ID_RECALC_GEOMETRY);
+DEG_COMPONENT_NODE_DEFINE(LayerCollections, LAYER_COLLECTIONS, ID_RECALC_COLLECTIONS);
+DEG_COMPONENT_NODE_DEFINE(Parameters, PARAMETERS, ID_RECALC);
+DEG_COMPONENT_NODE_DEFINE(Particles, EVAL_PARTICLES, ID_RECALC_GEOMETRY);
+DEG_COMPONENT_NODE_DEFINE(Proxy, PROXY, ID_RECALC_GEOMETRY);
+DEG_COMPONENT_NODE_DEFINE(Pose, EVAL_POSE, ID_RECALC_GEOMETRY);
+DEG_COMPONENT_NODE_DEFINE(Sequencer, SEQUENCER, ID_RECALC);
+DEG_COMPONENT_NODE_DEFINE(Shading, SHADING, ID_RECALC_DRAW);
+DEG_COMPONENT_NODE_DEFINE(ShadingParameters, SHADING_PARAMETERS, ID_RECALC_DRAW);
+DEG_COMPONENT_NODE_DEFINE(Transform, TRANSFORM, ID_RECALC_TRANSFORM);
/* Node Types Register =================================== */
void deg_register_component_depsnodes()
{
- deg_register_node_typeinfo(&DNTI_PARAMETERS);
- deg_register_node_typeinfo(&DNTI_PROXY);
deg_register_node_typeinfo(&DNTI_ANIMATION);
- deg_register_node_typeinfo(&DNTI_TRANSFORM);
- deg_register_node_typeinfo(&DNTI_GEOMETRY);
- deg_register_node_typeinfo(&DNTI_SEQUENCER);
-
- deg_register_node_typeinfo(&DNTI_EVAL_POSE);
deg_register_node_typeinfo(&DNTI_BONE);
-
+ deg_register_node_typeinfo(&DNTI_CACHE);
+ deg_register_node_typeinfo(&DNTI_BATCH_CACHE);
+ deg_register_node_typeinfo(&DNTI_COPY_ON_WRITE);
+ deg_register_node_typeinfo(&DNTI_GEOMETRY);
+ deg_register_node_typeinfo(&DNTI_LAYER_COLLECTIONS);
+ deg_register_node_typeinfo(&DNTI_PARAMETERS);
deg_register_node_typeinfo(&DNTI_EVAL_PARTICLES);
+ deg_register_node_typeinfo(&DNTI_PROXY);
+ deg_register_node_typeinfo(&DNTI_EVAL_POSE);
+ deg_register_node_typeinfo(&DNTI_SEQUENCER);
deg_register_node_typeinfo(&DNTI_SHADING);
-
- deg_register_node_typeinfo(&DNTI_CACHE);
+ deg_register_node_typeinfo(&DNTI_SHADING_PARAMETERS);
+ deg_register_node_typeinfo(&DNTI_TRANSFORM);
}
} // namespace DEG
diff --git a/source/blender/depsgraph/intern/nodes/deg_node_component.h b/source/blender/depsgraph/intern/nodes/deg_node_component.h
index 985716deaac..b8009cc0a7f 100644
--- a/source/blender/depsgraph/intern/nodes/deg_node_component.h
+++ b/source/blender/depsgraph/intern/nodes/deg_node_component.h
@@ -127,7 +127,7 @@ struct ComponentDepsNode : public DepsNode {
OperationDepsNode *get_entry_operation();
OperationDepsNode *get_exit_operation();
- void finalize_build();
+ void finalize_build(Depsgraph *graph);
IDDepsNode *owner;
@@ -147,9 +147,7 @@ struct ComponentDepsNode : public DepsNode {
OperationDepsNode *exit_operation;
// XXX: a poll() callback to check if component's first node can be started?
-
- /* Temporary bitmask, used during graph construction. */
- unsigned int layers;
+ virtual bool depends_on_cow() { return true; }
};
/* ---------------------------------------- */
@@ -173,14 +171,18 @@ struct ComponentDepsNode : public DepsNode {
}
DEG_COMPONENT_NODE_DECLARE_GENERIC(Animation);
+DEG_COMPONENT_NODE_DECLARE_GENERIC(BatchCache);
DEG_COMPONENT_NODE_DECLARE_GENERIC(Cache);
+DEG_COMPONENT_NODE_DECLARE_GENERIC(CopyOnWrite);
DEG_COMPONENT_NODE_DECLARE_GENERIC(Geometry);
+DEG_COMPONENT_NODE_DECLARE_GENERIC(LayerCollections);
DEG_COMPONENT_NODE_DECLARE_GENERIC(Parameters);
DEG_COMPONENT_NODE_DECLARE_GENERIC(Particles);
DEG_COMPONENT_NODE_DECLARE_GENERIC(Proxy);
DEG_COMPONENT_NODE_DECLARE_GENERIC(Pose);
DEG_COMPONENT_NODE_DECLARE_GENERIC(Sequencer);
DEG_COMPONENT_NODE_DECLARE_GENERIC(Shading);
+DEG_COMPONENT_NODE_DECLARE_GENERIC(ShadingParameters);
DEG_COMPONENT_NODE_DECLARE_GENERIC(Transform);
/* Bone Component */
diff --git a/source/blender/depsgraph/intern/nodes/deg_node_id.cc b/source/blender/depsgraph/intern/nodes/deg_node_id.cc
index 478cc2863b0..edc5c0114f9 100644
--- a/source/blender/depsgraph/intern/nodes/deg_node_id.cc
+++ b/source/blender/depsgraph/intern/nodes/deg_node_id.cc
@@ -41,8 +41,12 @@ extern "C" {
#include "DNA_anim_types.h"
#include "BKE_animsys.h"
+#include "BKE_library.h"
}
+#include "DEG_depsgraph.h"
+
+#include "intern/eval/deg_eval_copy_on_write.h"
#include "intern/nodes/deg_node_time.h"
#include "intern/depsgraph_intern.h"
@@ -58,8 +62,8 @@ IDDepsNode::ComponentIDKey::ComponentIDKey(eDepsNode_Type type,
bool IDDepsNode::ComponentIDKey::operator== (const ComponentIDKey &other) const
{
- return type == other.type &&
- STREQ(name, other.name);
+ return type == other.type &&
+ STREQ(name, other.name);
}
static unsigned int id_deps_node_hash_key(const void *key_v)
@@ -95,33 +99,77 @@ static void id_deps_node_hash_value_free(void *value_v)
/* Initialize 'id' node - from pointer data given. */
void IDDepsNode::init(const ID *id, const char *UNUSED(subdata))
{
- /* Store ID-pointer. */
BLI_assert(id != NULL);
- this->id = (ID *)id;
- this->layers = (1 << 20) - 1;
- this->eval_flags = 0;
-
- /* For object we initialize layers to layer from base. */
- if (GS(id->name) == ID_OB) {
- this->layers = 0;
- }
+ /* Store ID-pointer. */
+ id_orig = (ID *)id;
+ eval_flags = 0;
+ linked_state = DEG_ID_LINKED_INDIRECTLY;
components = BLI_ghash_new(id_deps_node_hash_key,
id_deps_node_hash_key_cmp,
"Depsgraph id components hash");
+}
- /* NOTE: components themselves are created if/when needed.
- * This prevents problems with components getting added
- * twice if an ID-Ref needs to be created to house it...
+void IDDepsNode::init_copy_on_write(ID *id_cow_hint)
+{
+ /* Early output for non-copy-on-write case: we keep CoW pointer same as
+ * an original one.
+ */
+ if (!DEG_depsgraph_use_copy_on_write()) {
+ UNUSED_VARS(id_cow_hint);
+ id_cow = id_orig;
+ return;
+ }
+ /* Create pointer as early as possible, so we can use it for function
+ * bindings. Rest of data we'll be copying to the new datablock when
+ * it is actually needed.
*/
+ if (id_cow_hint != NULL) {
+ // BLI_assert(deg_copy_on_write_is_needed(id_orig));
+ if (deg_copy_on_write_is_needed(id_orig)) {
+ id_cow = id_cow_hint;
+ }
+ else {
+ id_cow = id_orig;
+ }
+ }
+ else if (deg_copy_on_write_is_needed(id_orig)) {
+ id_cow = (ID *)BKE_libblock_alloc_notest(GS(id_orig->name));
+ DEG_COW_PRINT("Create shallow copy for %s: id_orig=%p id_cow=%p\n",
+ id_orig->name, id_orig, id_cow);
+ deg_tag_copy_on_write_id(id_cow, id_orig);
+ }
+ else {
+ id_cow = id_orig;
+ }
}
/* Free 'id' node. */
IDDepsNode::~IDDepsNode()
{
+ destroy();
+}
+
+void IDDepsNode::destroy()
+{
+ if (id_orig == NULL) {
+ return;
+ }
+
BLI_ghash_free(components,
id_deps_node_hash_key_free,
id_deps_node_hash_value_free);
+
+ /* Free memory used by this CoW ID. */
+ if (id_cow != id_orig && id_cow != NULL) {
+ deg_free_copy_on_write_datablock(id_cow);
+ MEM_freeN(id_cow);
+ DEG_COW_PRINT("Destroy CoW for %s: id_orig=%p id_cow=%p\n",
+ id_orig->name, id_orig, id_cow);
+ }
+
+ /* Tag that the node is freed. */
+ id_orig = NULL;
}
ComponentDepsNode *IDDepsNode::find_component(eDepsNode_Type type,
@@ -137,7 +185,7 @@ ComponentDepsNode *IDDepsNode::add_component(eDepsNode_Type type,
ComponentDepsNode *comp_node = find_component(type, name);
if (!comp_node) {
DepsNodeFactory *factory = deg_type_get_factory(type);
- comp_node = (ComponentDepsNode *)factory->create_node(this->id, "", name);
+ comp_node = (ComponentDepsNode *)factory->create_node(this->id_orig, "", name);
/* Register. */
ComponentIDKey *key = OBJECT_GUARDED_NEW(ComponentIDKey, type, name);
@@ -151,27 +199,17 @@ void IDDepsNode::tag_update(Depsgraph *graph)
{
GHASH_FOREACH_BEGIN(ComponentDepsNode *, comp_node, components)
{
- /* TODO(sergey): What about drievrs? */
- bool do_component_tag = comp_node->type != DEG_NODE_TYPE_ANIMATION;
- if (comp_node->type == DEG_NODE_TYPE_ANIMATION) {
- AnimData *adt = BKE_animdata_from_id(id);
- /* Animation data might be null if relations are tagged for update. */
- if (adt != NULL && (adt->recalc & ADT_RECALC_ANIM)) {
- do_component_tag = true;
- }
- }
- if (do_component_tag) {
- comp_node->tag_update(graph);
- }
+ comp_node->tag_update(graph);
}
GHASH_FOREACH_END();
}
-void IDDepsNode::finalize_build()
+void IDDepsNode::finalize_build(Depsgraph *graph)
{
+ /* Finalize build of all components. */
GHASH_FOREACH_BEGIN(ComponentDepsNode *, comp_node, components)
{
- comp_node->finalize_build();
+ comp_node->finalize_build(graph);
}
GHASH_FOREACH_END();
}
diff --git a/source/blender/depsgraph/intern/nodes/deg_node_id.h b/source/blender/depsgraph/intern/nodes/deg_node_id.h
index 55022916c4d..505a1129192 100644
--- a/source/blender/depsgraph/intern/nodes/deg_node_id.h
+++ b/source/blender/depsgraph/intern/nodes/deg_node_id.h
@@ -47,7 +47,9 @@ struct IDDepsNode : public DepsNode {
};
void init(const ID *id, const char *subdata);
+ void init_copy_on_write(ID *id_cow_hint = NULL);
~IDDepsNode();
+ void destroy();
ComponentDepsNode *find_component(eDepsNode_Type type,
const char *name = "") const;
@@ -56,23 +58,23 @@ struct IDDepsNode : public DepsNode {
void tag_update(Depsgraph *graph);
- void finalize_build();
+ void finalize_build(Depsgraph *graph);
/* ID Block referenced. */
- ID *id;
+ ID *id_orig;
+ ID *id_cow;
/* Hash to make it faster to look up components. */
GHash *components;
- /* Layers of this node with accumulated layers of it's output relations. */
- unsigned int layers;
-
/* Additional flags needed for scene evaluation.
* TODO(sergey): Only needed for until really granular updates
* of all the entities.
*/
int eval_flags;
+ eDepsNode_LinkedState_Type linked_state;
+
DEG_DEPSNODE_DECLARE;
};
diff --git a/source/blender/depsgraph/util/deg_util_foreach.h b/source/blender/depsgraph/util/deg_util_foreach.h
index cb7361fc708..e00aa5dbb5e 100644
--- a/source/blender/depsgraph/util/deg_util_foreach.h
+++ b/source/blender/depsgraph/util/deg_util_foreach.h
@@ -36,13 +36,5 @@
# include <boost/foreach.hpp>
# define foreach BOOST_FOREACH
#else
-#pragma message("No available foreach() implementation. Using stub instead, disabling new depsgraph")
-
-#ifndef WITH_LEGACY_DEPSGRAPH
-# error "Unable to build new depsgraph and legacy one is disabled."
-#endif
-
-#define DISABLE_NEW_DEPSGRAPH
-
-# define foreach(x, y) for (x; false; (void)y)
+# error "Depsgraph requires either Boost or C++11 for range-based loops."
#endif
diff --git a/source/blender/depsgraph/util/deg_util_function.h b/source/blender/depsgraph/util/deg_util_function.h
index 1e34ae04d9a..da31bb037f9 100644
--- a/source/blender/depsgraph/util/deg_util_function.h
+++ b/source/blender/depsgraph/util/deg_util_function.h
@@ -47,64 +47,5 @@ using boost::function;
#define function_bind boost::bind
#else
-
-#pragma message("No available function binding implementation. Using stub instead, disabling new depsgraph")
-
-#ifndef WITH_LEGACY_DEPSGRAPH
-# error "Unable to build new depsgraph and legacy one is disabled."
-#endif
-
-#define DISABLE_NEW_DEPSGRAPH
-
-#include "BLI_utildefines.h"
-#include <cstdlib>
-
-template<typename T>
-class function {
-public:
- function() {};
- function(void *) {}
- operator bool() const { return false; }
- bool operator== (void *) { return false; }
-
- template<typename T1>
- void operator() (T1) {
- BLI_assert(!"Should not be used");
- }
-};
-
-class Wrap {
-public:
- Wrap() {}
- template <typename T>
- Wrap(T /*arg*/) {}
-};
-
-template <typename T>
-void *function_bind(T func,
- Wrap arg1 = Wrap(),
- Wrap arg2 = Wrap(),
- Wrap arg3 = Wrap(),
- Wrap arg4 = Wrap(),
- Wrap arg5 = Wrap(),
- Wrap arg6 = Wrap(),
- Wrap arg7 = Wrap())
-{
- BLI_assert(!"Should not be used");
- (void)func;
- (void)arg1;
- (void)arg2;
- (void)arg3;
- (void)arg4;
- (void)arg5;
- (void)arg6;
- (void)arg7;
- return NULL;
-}
-
-#define _1 Wrap()
-#define _2 Wrap()
-#define _3 Wrap()
-#define _4 Wrap()
-
+# error "Depsgraph requires either Boost or C++11 for function bindings."
#endif
diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
new file mode 100644
index 00000000000..51b3db695c2
--- /dev/null
+++ b/source/blender/draw/CMakeLists.txt
@@ -0,0 +1,238 @@
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# The Original Code is Copyright (C) 2016, Blender Foundation
+# All rights reserved.
+#
+# The Original Code is: all of this file.
+#
+# Contributor(s): Blender Institute
+#
+# ***** END GPL LICENSE BLOCK *****
+
+set(INC
+ .
+ intern
+ modes
+
+ ../blenfont
+ ../blenkernel
+ ../blenlib
+ ../blentranslation
+ ../bmesh
+ ../depsgraph
+ ../editors/include
+ ../editors/space_view3d
+ ../gpu
+ ../imbuf
+ ../makesdna
+ ../makesrna
+ ../render/extern/include
+ ../render/intern/include
+ ../windowmanager
+
+ ../../../intern/glew-mx
+ ../../../intern/guardedalloc
+)
+
+set(INC_SYS
+ ${GLEW_INCLUDE_PATH}
+)
+
+set(SRC
+ intern/draw_armature.c
+ intern/draw_cache.c
+ intern/draw_cache_impl_curve.c
+ intern/draw_cache_impl_displist.c
+ intern/draw_cache_impl_lattice.c
+ intern/draw_cache_impl_mesh.c
+ intern/draw_cache_impl_metaball.c
+ intern/draw_cache_impl_particles.c
+ intern/draw_common.c
+ intern/draw_instance_data.c
+ intern/draw_manager.c
+ intern/draw_manager_text.c
+ intern/draw_manager_profiling.c
+ intern/draw_view.c
+ modes/edit_armature_mode.c
+ modes/edit_curve_mode.c
+ modes/edit_lattice_mode.c
+ modes/edit_mesh_mode.c
+ modes/edit_mesh_mode_text.c
+ modes/edit_metaball_mode.c
+ modes/edit_surface_mode.c
+ modes/edit_text_mode.c
+ modes/object_mode.c
+ modes/paint_texture_mode.c
+ modes/paint_vertex_mode.c
+ modes/paint_weight_mode.c
+ modes/particle_mode.c
+ modes/pose_mode.c
+ modes/sculpt_mode.c
+ engines/basic/basic_engine.c
+ engines/clay/clay_engine.c
+ engines/eevee/eevee_bloom.c
+ engines/eevee/eevee_data.c
+ engines/eevee/eevee_depth_of_field.c
+ engines/eevee/eevee_effects.c
+ engines/eevee/eevee_engine.c
+ engines/eevee/eevee_lightprobes.c
+ engines/eevee/eevee_lights.c
+ engines/eevee/eevee_materials.c
+ engines/eevee/eevee_mist.c
+ engines/eevee/eevee_motion_blur.c
+ engines/eevee/eevee_occlusion.c
+ engines/eevee/eevee_render.c
+ engines/eevee/eevee_screen_raytrace.c
+ engines/eevee/eevee_subsurface.c
+ engines/eevee/eevee_temporal_sampling.c
+ engines/eevee/eevee_volumes.c
+ engines/external/external_engine.c
+
+ DRW_engine.h
+ intern/DRW_render.h
+ intern/draw_cache.h
+ intern/draw_cache_impl.h
+ intern/draw_common.h
+ intern/draw_instance_data.h
+ intern/draw_manager_text.h
+ intern/draw_manager_profiling.h
+ intern/draw_view.h
+ modes/draw_mode_engines.h
+ modes/edit_mesh_mode_intern.h
+ engines/basic/basic_engine.h
+ engines/clay/clay_engine.h
+ engines/eevee/eevee_engine.h
+ engines/eevee/eevee_lut.h
+ engines/eevee/eevee_private.h
+ engines/external/external_engine.h
+)
+
+if(WITH_CLAY_ENGINE)
+ add_definitions(-DWITH_CLAY_ENGINE)
+endif()
+
+data_to_c_simple(engines/clay/shaders/clay_frag.glsl SRC)
+data_to_c_simple(engines/clay/shaders/clay_vert.glsl SRC)
+data_to_c_simple(engines/clay/shaders/clay_particle_vert.glsl SRC)
+data_to_c_simple(engines/clay/shaders/clay_particle_strand_frag.glsl SRC)
+data_to_c_simple(engines/clay/shaders/ssao_alchemy.glsl SRC)
+data_to_c_simple(engines/clay/shaders/ssao_groundtruth.glsl SRC)
+
+data_to_c_simple(engines/eevee/shaders/ambient_occlusion_lib.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/default_frag.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/default_world_frag.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/background_vert.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/concentric_samples_lib.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/common_uniforms_lib.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/lamps_lib.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/lightprobe_lib.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/lightprobe_filter_glossy_frag.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/lightprobe_filter_diffuse_frag.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/lightprobe_filter_visibility_frag.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/lightprobe_geom.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/lightprobe_vert.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/lightprobe_cube_display_frag.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/lightprobe_cube_display_vert.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/lightprobe_grid_display_frag.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/lightprobe_grid_display_vert.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/lightprobe_grid_fill_frag.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/lightprobe_planar_display_frag.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/lightprobe_planar_display_vert.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/lit_surface_frag.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/lit_surface_vert.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/effect_bloom_frag.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/effect_dof_vert.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/effect_dof_geom.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/effect_dof_frag.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/effect_downsample_frag.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/effect_downsample_cube_frag.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/effect_gtao_frag.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/effect_minmaxz_frag.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/effect_mist_frag.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/effect_motion_blur_frag.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/effect_ssr_frag.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/effect_subsurface_frag.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/effect_temporal_aa.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/lightprobe_planar_downsample_frag.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/lightprobe_planar_downsample_geom.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/lightprobe_planar_downsample_vert.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/prepass_frag.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/prepass_vert.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/shadow_frag.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/shadow_geom.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/shadow_vert.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/shadow_store_frag.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/shadow_copy_frag.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/bsdf_lut_frag.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/btdf_lut_frag.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/bsdf_direct_lib.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/bsdf_common_lib.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/irradiance_lib.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/octahedron_lib.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/bsdf_sampling_lib.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/raytrace_lib.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/ltc_lib.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/ssr_lib.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/update_noise_frag.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/volumetric_lib.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/volumetric_frag.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/volumetric_geom.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/volumetric_vert.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/volumetric_resolve_frag.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/volumetric_scatter_frag.glsl SRC)
+data_to_c_simple(engines/eevee/shaders/volumetric_integration_frag.glsl SRC)
+
+data_to_c_simple(modes/shaders/common_globals_lib.glsl SRC)
+data_to_c_simple(modes/shaders/common_fxaa_lib.glsl SRC)
+data_to_c_simple(modes/shaders/edit_mesh_overlay_frag.glsl SRC)
+data_to_c_simple(modes/shaders/edit_mesh_overlay_vert.glsl SRC)
+data_to_c_simple(modes/shaders/edit_mesh_overlay_geom_tri.glsl SRC)
+data_to_c_simple(modes/shaders/edit_mesh_overlay_geom_edge.glsl SRC)
+data_to_c_simple(modes/shaders/edit_mesh_overlay_loosevert_vert.glsl SRC)
+data_to_c_simple(modes/shaders/edit_mesh_overlay_facedot_frag.glsl SRC)
+data_to_c_simple(modes/shaders/edit_mesh_overlay_facedot_vert.glsl SRC)
+data_to_c_simple(modes/shaders/edit_mesh_overlay_mix_frag.glsl SRC)
+data_to_c_simple(modes/shaders/edit_mesh_overlay_facefill_vert.glsl SRC)
+data_to_c_simple(modes/shaders/edit_mesh_overlay_facefill_frag.glsl SRC)
+data_to_c_simple(modes/shaders/edit_curve_overlay_frag.glsl SRC)
+data_to_c_simple(modes/shaders/edit_curve_overlay_handle_geom.glsl SRC)
+data_to_c_simple(modes/shaders/edit_curve_overlay_loosevert_vert.glsl SRC)
+data_to_c_simple(modes/shaders/edit_lattice_overlay_frag.glsl SRC)
+data_to_c_simple(modes/shaders/edit_lattice_overlay_loosevert_vert.glsl SRC)
+data_to_c_simple(modes/shaders/edit_normals_vert.glsl SRC)
+data_to_c_simple(modes/shaders/edit_normals_geom.glsl SRC)
+data_to_c_simple(modes/shaders/object_empty_image_frag.glsl SRC)
+data_to_c_simple(modes/shaders/object_empty_image_vert.glsl SRC)
+data_to_c_simple(modes/shaders/object_outline_resolve_frag.glsl SRC)
+data_to_c_simple(modes/shaders/object_outline_expand_frag.glsl SRC)
+data_to_c_simple(modes/shaders/object_outline_detect_frag.glsl SRC)
+data_to_c_simple(modes/shaders/object_grid_frag.glsl SRC)
+data_to_c_simple(modes/shaders/object_grid_vert.glsl SRC)
+data_to_c_simple(modes/shaders/object_lightprobe_grid_vert.glsl SRC)
+data_to_c_simple(modes/shaders/object_particle_prim_vert.glsl SRC)
+data_to_c_simple(modes/shaders/object_particle_dot_vert.glsl SRC)
+data_to_c_simple(modes/shaders/object_particle_dot_frag.glsl SRC)
+data_to_c_simple(modes/shaders/paint_texture_frag.glsl SRC)
+data_to_c_simple(modes/shaders/paint_texture_vert.glsl SRC)
+data_to_c_simple(modes/shaders/paint_wire_frag.glsl SRC)
+data_to_c_simple(modes/shaders/paint_wire_vert.glsl SRC)
+data_to_c_simple(modes/shaders/paint_vert_frag.glsl SRC)
+
+list(APPEND INC
+)
+
+blender_add_lib(bf_draw "${SRC}" "${INC}" "${INC_SYS}")
diff --git a/source/blender/draw/DRW_engine.h b/source/blender/draw/DRW_engine.h
new file mode 100644
index 00000000000..9baad113c42
--- /dev/null
+++ b/source/blender/draw/DRW_engine.h
@@ -0,0 +1,128 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file DRW_engine.h
+ * \ingroup draw
+ */
+
+#ifndef __DRW_ENGINE_H__
+#define __DRW_ENGINE_H__
+
+#include "BLI_sys_types.h" /* for bool */
+
+struct ARegion;
+struct CollectionEngineSettings;
+struct Depsgraph;
+struct DRWPass;
+struct DRWInstanceDataList;
+struct Main;
+struct Material;
+struct Scene;
+struct DrawEngineType;
+struct ID;
+struct IDProperty;
+struct bContext;
+struct Object;
+struct ViewLayer;
+struct ViewContext;
+struct ViewportEngineData;
+struct View3D;
+struct rcti;
+struct GPUOffScreen;
+struct GPUViewport;
+struct RenderEngine;
+struct RenderEngineType;
+struct WorkSpace;
+
+#include "DNA_object_enums.h"
+
+/* Buffer and textures used by the viewport by default */
+typedef struct DefaultFramebufferList {
+ struct GPUFrameBuffer *default_fb;
+ struct GPUFrameBuffer *multisample_fb;
+} DefaultFramebufferList;
+
+typedef struct DefaultTextureList {
+ struct GPUTexture *color;
+ struct GPUTexture *depth;
+ struct GPUTexture *multisample_color;
+ struct GPUTexture *multisample_depth;
+} DefaultTextureList;
+
+void DRW_engines_register(void);
+void DRW_engines_free(void);
+
+bool DRW_engine_render_support(struct DrawEngineType *draw_engine_type);
+void DRW_engine_register(struct DrawEngineType *draw_engine_type);
+void DRW_engine_viewport_data_size_get(
+ const void *engine_type,
+ int *r_fbl_len, int *r_txl_len, int *r_psl_len, int *r_stl_len);
+
+typedef struct DRWUpdateContext {
+ struct Main *bmain;
+ struct Depsgraph *depsgraph;
+ struct Scene *scene;
+ struct ViewLayer *view_layer;
+ struct ARegion *ar;
+ struct View3D *v3d;
+ struct RenderEngineType *engine_type;
+} DRWUpdateContext;
+void DRW_notify_view_update(const DRWUpdateContext *update_ctx);
+void DRW_notify_id_update(const DRWUpdateContext *update_ctx, struct ID *id);
+
+void DRW_draw_view(const struct bContext *C);
+
+void DRW_draw_render_loop_ex(
+ struct Depsgraph *depsgraph,
+ struct RenderEngineType *engine_type,
+ struct ARegion *ar, struct View3D *v3d, const eObjectMode object_mode,
+ const struct bContext *evil_C);
+void DRW_draw_render_loop(
+ struct Depsgraph *depsgraph,
+ struct ARegion *ar, struct View3D *v3d, const eObjectMode object_mode);
+void DRW_draw_render_loop_offscreen(
+ struct Depsgraph *depsgraph,
+ struct RenderEngineType *engine_type,
+ struct ARegion *ar, struct View3D *v3d, const eObjectMode object_mode,
+ const bool draw_background,
+ struct GPUOffScreen *ofs,
+ struct GPUViewport *viewport);
+void DRW_draw_select_loop(
+ struct Depsgraph *depsgraph,
+ struct ARegion *ar, struct View3D *v3d, const eObjectMode object_mode,
+ bool use_obedit_skip, bool use_nearest, const struct rcti *rect);
+void DRW_draw_depth_loop(
+ struct Depsgraph *depsgraph,
+ struct ARegion *ar, struct View3D *v3d, const eObjectMode object_mode);
+
+/* This is here because GPUViewport needs it */
+void DRW_pass_free(struct DRWPass *pass);
+struct DRWInstanceDataList *DRW_instance_data_list_create(void);
+void DRW_instance_data_list_free(struct DRWInstanceDataList *idatalist);
+
+/* Mode engines initialization */
+void OBJECT_collection_settings_create(struct IDProperty *properties);
+void EDIT_MESH_collection_settings_create(struct IDProperty *properties);
+void EDIT_ARMATURE_collection_settings_create(struct IDProperty *properties);
+void PAINT_WEIGHT_collection_settings_create(struct IDProperty *properties);
+void PAINT_VERTEX_collection_settings_create(struct IDProperty *properties);
+
+#endif /* __DRW_ENGINE_H__ */
diff --git a/source/blender/draw/engines/basic/basic_engine.c b/source/blender/draw/engines/basic/basic_engine.c
new file mode 100644
index 00000000000..31a431e3001
--- /dev/null
+++ b/source/blender/draw/engines/basic/basic_engine.c
@@ -0,0 +1,281 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file basic_engine.c
+ * \ingroup draw_engine
+ *
+ * Simple engine for drawing color and/or depth.
+ * When we only need simple flat shaders.
+ */
+
+#include "DRW_render.h"
+
+#include "BKE_icons.h"
+#include "BKE_idprop.h"
+#include "BKE_main.h"
+
+#include "GPU_shader.h"
+
+#include "basic_engine.h"
+/* Shaders */
+
+#define BASIC_ENGINE "BLENDER_BASIC"
+
+/* we may want this later? */
+#define USE_DEPTH
+
+/* *********** LISTS *********** */
+
+/* GPUViewport.storage
+ * Is freed everytime the viewport engine changes */
+typedef struct BASIC_Storage {
+ int dummy;
+} BASIC_Storage;
+
+typedef struct BASIC_StorageList {
+ struct BASIC_Storage *storage;
+ struct BASIC_PrivateData *g_data;
+} BASIC_StorageList;
+
+typedef struct BASIC_FramebufferList {
+ /* default */
+ struct GPUFrameBuffer *default_fb;
+ /* engine specific */
+#ifdef USE_DEPTH
+ struct GPUFrameBuffer *dupli_depth;
+#endif
+} BASIC_FramebufferList;
+
+typedef struct BASIC_TextureList {
+ /* default */
+ struct GPUTexture *color;
+#ifdef USE_DEPTH
+ struct GPUTexture *depth;
+ /* engine specific */
+ struct GPUTexture *depth_dup;
+#endif
+} BASIC_TextureList;
+
+typedef struct BASIC_PassList {
+#ifdef USE_DEPTH
+ struct DRWPass *depth_pass;
+ struct DRWPass *depth_pass_cull;
+#endif
+ struct DRWPass *color_pass;
+} BASIC_PassList;
+
+typedef struct BASIC_Data {
+ void *engine_type;
+ BASIC_FramebufferList *fbl;
+ BASIC_TextureList *txl;
+ BASIC_PassList *psl;
+ BASIC_StorageList *stl;
+} BASIC_Data;
+
+/* *********** STATIC *********** */
+
+static struct {
+#ifdef USE_DEPTH
+ /* Depth Pre Pass */
+ struct GPUShader *depth_sh;
+#endif
+ /* Shading Pass */
+ struct GPUShader *color_sh;
+} e_data = {NULL}; /* Engine data */
+
+typedef struct BASIC_PrivateData {
+#ifdef USE_DEPTH
+ DRWShadingGroup *depth_shgrp;
+ DRWShadingGroup *depth_shgrp_cull;
+#endif
+ DRWShadingGroup *color_shgrp;
+} BASIC_PrivateData; /* Transient data */
+
+/* Functions */
+
+static void basic_engine_init(void *vedata)
+{
+ BASIC_StorageList *stl = ((BASIC_Data *)vedata)->stl;
+ BASIC_TextureList *txl = ((BASIC_Data *)vedata)->txl;
+ BASIC_FramebufferList *fbl = ((BASIC_Data *)vedata)->fbl;
+
+#ifdef USE_DEPTH
+ /* Depth prepass */
+ if (!e_data.depth_sh) {
+ e_data.depth_sh = DRW_shader_create_3D_depth_only();
+ }
+#endif
+
+ /* Shading pass */
+ if (!e_data.color_sh) {
+ e_data.color_sh = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
+ }
+
+ if (!stl->storage) {
+ stl->storage = MEM_callocN(sizeof(BASIC_Storage), "BASIC_Storage");
+ }
+
+#ifdef USE_DEPTH
+ if (DRW_state_is_fbo()) {
+ const float *viewport_size = DRW_viewport_size_get();
+ DRWFboTexture tex = {&txl->depth_dup, DRW_TEX_DEPTH_24_STENCIL_8, 0};
+ DRW_framebuffer_init(&fbl->dupli_depth, &draw_engine_basic_type,
+ (int)viewport_size[0], (int)viewport_size[1],
+ &tex, 1);
+ }
+#endif
+}
+
+static void basic_cache_init(void *vedata)
+{
+ BASIC_PassList *psl = ((BASIC_Data *)vedata)->psl;
+ BASIC_StorageList *stl = ((BASIC_Data *)vedata)->stl;
+
+ if (!stl->g_data) {
+ /* Alloc transient pointers */
+ stl->g_data = MEM_mallocN(sizeof(*stl->g_data), __func__);
+ }
+
+#ifdef USE_DEPTH
+ /* Depth Pass */
+ {
+ psl->depth_pass = DRW_pass_create("Depth Pass", DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS);
+ stl->g_data->depth_shgrp = DRW_shgroup_create(e_data.depth_sh, psl->depth_pass);
+
+ psl->depth_pass_cull = DRW_pass_create(
+ "Depth Pass Cull",
+ DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_CULL_BACK);
+ stl->g_data->depth_shgrp_cull = DRW_shgroup_create(e_data.depth_sh, psl->depth_pass_cull);
+ }
+#endif
+
+ /* Color Pass */
+ {
+ psl->color_pass = DRW_pass_create("Color Pass", DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL);
+ stl->g_data->color_shgrp = DRW_shgroup_create(e_data.color_sh, psl->color_pass);
+ }
+}
+
+static void basic_cache_populate(void *vedata, Object *ob)
+{
+ BASIC_StorageList *stl = ((BASIC_Data *)vedata)->stl;
+
+ if (!DRW_object_is_renderable(ob))
+ return;
+
+ struct Gwn_Batch *geom = DRW_cache_object_surface_get(ob);
+ if (geom) {
+ bool do_cull = false; /* TODO (we probably wan't to take this from the viewport?) */
+#ifdef USE_DEPTH
+ /* Depth Prepass */
+ DRW_shgroup_call_add((do_cull) ? stl->g_data->depth_shgrp_cull : stl->g_data->depth_shgrp, geom, ob->obmat);
+#endif
+ /* Shading */
+ DRW_shgroup_call_add(stl->g_data->color_shgrp, geom, ob->obmat);
+ }
+}
+
+static void basic_cache_finish(void *vedata)
+{
+ BASIC_StorageList *stl = ((BASIC_Data *)vedata)->stl;
+
+ UNUSED_VARS(stl);
+}
+
+static void basic_draw_scene(void *vedata)
+{
+
+ BASIC_PassList *psl = ((BASIC_Data *)vedata)->psl;
+ BASIC_FramebufferList *fbl = ((BASIC_Data *)vedata)->fbl;
+ DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
+ const bool is_select = DRW_state_is_select();
+
+ bool use_color = true;
+ bool use_depth = true;
+ bool use_depth_cull = true;
+
+ if (is_select) {
+ /* Needed for depth-picking,
+ * for other selection types there are no need for extra passes either. */
+ use_color = false;
+ use_depth_cull = false;
+ }
+
+#ifdef USE_DEPTH
+ /* Pass 1 : Depth pre-pass */
+ if (use_depth) {
+ DRW_draw_pass(psl->depth_pass);
+ }
+
+ if (use_depth_cull) {
+ DRW_draw_pass(psl->depth_pass_cull);
+ }
+
+ /* Pass 2 : Duplicate depth */
+ if (use_depth || use_depth_cull) {
+ /* Unless we go for deferred shading we need this to avoid manual depth test and artifacts */
+ if (DRW_state_is_fbo()) {
+ DRW_framebuffer_blit(dfbl->default_fb, fbl->dupli_depth, true, false);
+ }
+ }
+#endif
+
+ /* Pass 3 : Shading */
+ if (use_color) {
+ DRW_draw_pass(psl->color_pass);
+ }
+}
+
+static void basic_engine_free(void)
+{
+ /* all shaders are builtin */
+}
+
+static const DrawEngineDataSize basic_data_size = DRW_VIEWPORT_DATA_SIZE(BASIC_Data);
+
+DrawEngineType draw_engine_basic_type = {
+ NULL, NULL,
+ N_("Basic"),
+ &basic_data_size,
+ &basic_engine_init,
+ &basic_engine_free,
+ &basic_cache_init,
+ &basic_cache_populate,
+ &basic_cache_finish,
+ NULL,
+ &basic_draw_scene,
+ NULL,
+ NULL,
+ NULL,
+};
+
+/* Note: currently unused, we may want to register so we can see this when debugging the view. */
+
+RenderEngineType DRW_engine_viewport_basic_type = {
+ NULL, NULL,
+ BASIC_ENGINE, N_("Basic"), RE_INTERNAL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ &draw_engine_basic_type,
+ {NULL, NULL, NULL}
+};
+
+
+#undef BASIC_ENGINE
diff --git a/source/blender/draw/engines/basic/basic_engine.h b/source/blender/draw/engines/basic/basic_engine.h
new file mode 100644
index 00000000000..0adf99835a2
--- /dev/null
+++ b/source/blender/draw/engines/basic/basic_engine.h
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file basic_engine.h
+ * \ingroup draw_engine
+ */
+
+#ifndef __BASIC_ENGINE_H__
+#define __BASIC_ENGINE_H__
+
+extern DrawEngineType draw_engine_basic_type;
+extern RenderEngineType DRW_engine_viewport_basic_type;
+
+#endif /* __BASIC_ENGINE_H__ */
diff --git a/source/blender/draw/engines/clay/clay_engine.c b/source/blender/draw/engines/clay/clay_engine.c
new file mode 100644
index 00000000000..50c6790f817
--- /dev/null
+++ b/source/blender/draw/engines/clay/clay_engine.c
@@ -0,0 +1,977 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+#include "BLI_utildefines.h"
+#include "BLI_dynstr.h"
+#include "BLI_rand.h"
+
+#include "DNA_particle_types.h"
+
+#include "BKE_icons.h"
+#include "BKE_idprop.h"
+#include "BKE_main.h"
+#include "BKE_particle.h"
+
+#include "GPU_shader.h"
+
+#include "IMB_imbuf.h"
+#include "IMB_imbuf_types.h"
+
+#include "UI_resources.h"
+#include "UI_interface_icons.h"
+
+#include "DRW_render.h"
+
+#include "clay_engine.h"
+
+#ifdef WITH_CLAY_ENGINE
+#include "../eevee/eevee_lut.h" /* TODO find somewhere to share blue noise Table */
+
+/* Shaders */
+
+#define CLAY_ENGINE "BLENDER_CLAY"
+
+#define MAX_CLAY_MAT 512 /* 512 = 9 bit material id */
+
+#define SHADER_DEFINES \
+ "#define MAX_MATERIAL " STRINGIFY(MAX_CLAY_MAT) "\n" \
+ "#define USE_ROTATION\n" \
+ "#define USE_AO\n" \
+ "#define USE_HSV\n"
+
+extern char datatoc_clay_frag_glsl[];
+extern char datatoc_clay_vert_glsl[];
+extern char datatoc_clay_particle_vert_glsl[];
+extern char datatoc_clay_particle_strand_frag_glsl[];
+extern char datatoc_ssao_alchemy_glsl[];
+
+/* *********** LISTS *********** */
+
+/**
+ * UBOs data needs to be 16 byte aligned (size of vec4)
+ *
+ * Reminder: float, int, bool are 4 bytes
+ *
+ * \note struct is expected to be initialized with all pad-bits zero'd
+ * so we can use 'memcmp' to check for duplicates. Possibly hash data later.
+ */
+typedef struct CLAY_UBO_Material {
+ float ssao_params_var[4];
+ /* - 16 -*/
+ float matcap_hsv[3];
+ float matcap_id; /* even float encoding have enough precision */
+ /* - 16 -*/
+ float matcap_rot[2];
+ float pad[2]; /* ensure 16 bytes alignement */
+} CLAY_UBO_Material; /* 48 bytes */
+BLI_STATIC_ASSERT_ALIGN(CLAY_UBO_Material, 16)
+
+typedef struct CLAY_HAIR_UBO_Material {
+ float hair_randomness;
+ float matcap_id;
+ float matcap_rot[2];
+ float matcap_hsv[3];
+ float pad;
+} CLAY_HAIR_UBO_Material; /* 32 bytes */
+BLI_STATIC_ASSERT_ALIGN(CLAY_HAIR_UBO_Material, 16)
+
+typedef struct CLAY_UBO_Storage {
+ CLAY_UBO_Material materials[MAX_CLAY_MAT];
+} CLAY_UBO_Storage;
+
+typedef struct CLAY_HAIR_UBO_Storage {
+ CLAY_HAIR_UBO_Material materials[MAX_CLAY_MAT];
+} CLAY_HAIR_UBO_Storage;
+
+/* GPUViewport.storage
+ * Is freed everytime the viewport engine changes */
+typedef struct CLAY_Storage {
+ /* Materials Parameter UBO */
+ CLAY_UBO_Storage mat_storage;
+ CLAY_HAIR_UBO_Storage hair_mat_storage;
+ int ubo_current_id;
+ int hair_ubo_current_id;
+ DRWShadingGroup *shgrps[MAX_CLAY_MAT];
+ DRWShadingGroup *shgrps_flat[MAX_CLAY_MAT];
+ DRWShadingGroup *hair_shgrps[MAX_CLAY_MAT];
+} CLAY_Storage;
+
+typedef struct CLAY_StorageList {
+ struct CLAY_Storage *storage;
+ struct CLAY_PrivateData *g_data;
+} CLAY_StorageList;
+
+typedef struct CLAY_FramebufferList {
+ /* default */
+ struct GPUFrameBuffer *default_fb;
+ /* engine specific */
+ struct GPUFrameBuffer *dupli_depth;
+} CLAY_FramebufferList;
+
+typedef struct CLAY_PassList {
+ struct DRWPass *depth_pass;
+ struct DRWPass *depth_pass_cull;
+ struct DRWPass *clay_pass;
+ struct DRWPass *clay_pass_flat;
+ struct DRWPass *hair_pass;
+} CLAY_PassList;
+
+typedef struct CLAY_Data {
+ void *engine_type;
+ CLAY_FramebufferList *fbl;
+ DRWViewportEmptyList *txl;
+ CLAY_PassList *psl;
+ CLAY_StorageList *stl;
+} CLAY_Data;
+
+typedef struct CLAY_ViewLayerData {
+ struct GPUTexture *jitter_tx;
+ struct GPUUniformBuffer *mat_ubo;
+ struct GPUUniformBuffer *matcaps_ubo;
+ struct GPUUniformBuffer *hair_mat_ubo;
+ struct GPUUniformBuffer *sampling_ubo;
+ int cached_sample_num;
+} CLAY_ViewLayerData;
+
+/* *********** STATIC *********** */
+
+static struct {
+ /* Depth Pre Pass */
+ struct GPUShader *depth_sh;
+ /* Shading Pass */
+ struct GPUShader *clay_sh;
+ struct GPUShader *clay_flat_sh;
+ struct GPUShader *hair_sh;
+
+ /* Matcap textures */
+ struct GPUTexture *matcap_array;
+ float matcap_colors[24][4];
+
+ /* Ssao */
+ float winmat[4][4];
+ float viewvecs[3][4];
+ float ssao_params[4];
+
+ /* Just a serie of int from 0 to MAX_CLAY_MAT-1 */
+ int ubo_mat_idxs[MAX_CLAY_MAT];
+
+ /* engine specific */
+ struct GPUTexture *depth_dup;
+} e_data = {NULL}; /* Engine data */
+
+typedef struct CLAY_PrivateData {
+ DRWShadingGroup *depth_shgrp;
+ DRWShadingGroup *depth_shgrp_select;
+ DRWShadingGroup *depth_shgrp_active;
+ DRWShadingGroup *depth_shgrp_cull;
+ DRWShadingGroup *depth_shgrp_cull_select;
+ DRWShadingGroup *depth_shgrp_cull_active;
+ bool enable_ao;
+} CLAY_PrivateData; /* Transient data */
+
+/* Functions */
+
+static void clay_view_layer_data_free(void *storage)
+{
+ CLAY_ViewLayerData *sldata = (CLAY_ViewLayerData *)storage;
+
+ DRW_UBO_FREE_SAFE(sldata->mat_ubo);
+ DRW_UBO_FREE_SAFE(sldata->matcaps_ubo);
+ DRW_UBO_FREE_SAFE(sldata->hair_mat_ubo);
+ DRW_UBO_FREE_SAFE(sldata->sampling_ubo);
+ DRW_TEXTURE_FREE_SAFE(sldata->jitter_tx);
+}
+
+static CLAY_ViewLayerData *CLAY_view_layer_data_get(void)
+{
+ CLAY_ViewLayerData **sldata = (CLAY_ViewLayerData **)DRW_view_layer_engine_data_ensure(&draw_engine_clay_type, &clay_view_layer_data_free);
+
+ if (*sldata == NULL) {
+ *sldata = MEM_callocN(sizeof(**sldata), "CLAY_ViewLayerData");
+ }
+
+ return *sldata;
+}
+
+static void add_icon_to_rect(PreviewImage *prv, float *final_rect, int layer)
+{
+ int image_size = prv->w[0] * prv->h[0];
+ float *new_rect = &final_rect[image_size * 4 * layer];
+
+ IMB_buffer_float_from_byte(new_rect, (unsigned char *)prv->rect[0], IB_PROFILE_SRGB, IB_PROFILE_SRGB,
+ false, prv->w[0], prv->h[0], prv->w[0], prv->w[0]);
+
+ /* Find overall color */
+ for (int y = 0; y < 4; ++y) {
+ for (int x = 0; x < 4; ++x) {
+ e_data.matcap_colors[layer][0] += new_rect[y * 512 * 128 * 4 + x * 128 * 4 + 0];
+ e_data.matcap_colors[layer][1] += new_rect[y * 512 * 128 * 4 + x * 128 * 4 + 1];
+ e_data.matcap_colors[layer][2] += new_rect[y * 512 * 128 * 4 + x * 128 * 4 + 2];
+ }
+ }
+
+ e_data.matcap_colors[layer][0] /= 16.0f * 2.0f; /* the * 2 is to darken for shadows */
+ e_data.matcap_colors[layer][1] /= 16.0f * 2.0f;
+ e_data.matcap_colors[layer][2] /= 16.0f * 2.0f;
+}
+
+static struct GPUTexture *load_matcaps(PreviewImage *prv[24], int nbr)
+{
+ struct GPUTexture *tex;
+ int w = prv[0]->w[0];
+ int h = prv[0]->h[0];
+ float *final_rect = MEM_callocN(sizeof(float) * 4 * w * h * nbr, "Clay Matcap array rect");
+
+ for (int i = 0; i < nbr; ++i) {
+ add_icon_to_rect(prv[i], final_rect, i);
+ BKE_previewimg_free(&prv[i]);
+ }
+
+ tex = DRW_texture_create_2D_array(w, h, nbr, DRW_TEX_RGBA_8, DRW_TEX_FILTER, final_rect);
+ MEM_freeN(final_rect);
+
+ return tex;
+}
+
+static int matcap_to_index(int matcap)
+{
+ switch (matcap) {
+ case ICON_MATCAP_01: return 0;
+ case ICON_MATCAP_02: return 1;
+ case ICON_MATCAP_03: return 2;
+ case ICON_MATCAP_04: return 3;
+ case ICON_MATCAP_05: return 4;
+ case ICON_MATCAP_06: return 5;
+ case ICON_MATCAP_07: return 6;
+ case ICON_MATCAP_08: return 7;
+ case ICON_MATCAP_09: return 8;
+ case ICON_MATCAP_10: return 9;
+ case ICON_MATCAP_11: return 10;
+ case ICON_MATCAP_12: return 11;
+ case ICON_MATCAP_13: return 12;
+ case ICON_MATCAP_14: return 13;
+ case ICON_MATCAP_15: return 14;
+ case ICON_MATCAP_16: return 15;
+ case ICON_MATCAP_17: return 16;
+ case ICON_MATCAP_18: return 17;
+ case ICON_MATCAP_19: return 18;
+ case ICON_MATCAP_20: return 19;
+ case ICON_MATCAP_21: return 20;
+ case ICON_MATCAP_22: return 21;
+ case ICON_MATCAP_23: return 22;
+ case ICON_MATCAP_24: return 23;
+ }
+ BLI_assert(!"Should not happen");
+ return 0;
+}
+
+/* Using Hammersley distribution */
+static float *create_disk_samples(int num_samples)
+{
+ /* vec4 to ensure memory alignment. */
+ float (*texels)[4] = MEM_mallocN(sizeof(float[4]) * num_samples, "concentric_tex");
+ const float num_samples_inv = 1.0f / num_samples;
+
+ for (int i = 0; i < num_samples; i++) {
+ float r = (i + 0.5f) * num_samples_inv;
+ double dphi;
+ BLI_hammersley_1D(i, &dphi);
+
+ float phi = (float)dphi * 2.0f * M_PI;
+ texels[i][0] = cosf(phi);
+ texels[i][1] = sinf(phi);
+ /* This deliberatly distribute more samples
+ * at the center of the disk (and thus the shadow). */
+ texels[i][2] = r;
+ }
+
+ return (float *)texels;
+}
+
+static struct GPUTexture *create_jitter_texture(int num_samples)
+{
+ float jitter[64 * 64][3];
+ const float num_samples_inv = 1.0f / num_samples;
+
+ for (int i = 0; i < 64 * 64; i++) {
+ float phi = blue_noise[i][0] * 2.0f * M_PI;
+ /* This rotate the sample per pixels */
+ jitter[i][0] = cosf(phi);
+ jitter[i][1] = sinf(phi);
+ /* This offset the sample along it's direction axis (reduce banding) */
+ float bn = blue_noise[i][1] - 0.5f;
+ CLAMP(bn, -0.499f, 0.499f); /* fix fireflies */
+ jitter[i][2] = bn * num_samples_inv;
+ }
+
+ UNUSED_VARS(bsdf_split_sum_ggx, btdf_split_sum_ggx, ltc_mag_ggx, ltc_mat_ggx, ltc_disk_integral);
+
+ return DRW_texture_create_2D(64, 64, DRW_TEX_RGB_16, DRW_TEX_FILTER | DRW_TEX_WRAP, &jitter[0][0]);
+}
+
+static void clay_engine_init(void *vedata)
+{
+ CLAY_StorageList *stl = ((CLAY_Data *)vedata)->stl;
+ CLAY_FramebufferList *fbl = ((CLAY_Data *)vedata)->fbl;
+ CLAY_ViewLayerData *sldata = CLAY_view_layer_data_get();
+
+ /* Create Texture Array */
+ if (!e_data.matcap_array) {
+ PreviewImage *prv[24]; /* For now use all of the 24 internal matcaps */
+
+ /* TODO only load used matcaps */
+ prv[0] = UI_icon_to_preview(ICON_MATCAP_01);
+ prv[1] = UI_icon_to_preview(ICON_MATCAP_02);
+ prv[2] = UI_icon_to_preview(ICON_MATCAP_03);
+ prv[3] = UI_icon_to_preview(ICON_MATCAP_04);
+ prv[4] = UI_icon_to_preview(ICON_MATCAP_05);
+ prv[5] = UI_icon_to_preview(ICON_MATCAP_06);
+ prv[6] = UI_icon_to_preview(ICON_MATCAP_07);
+ prv[7] = UI_icon_to_preview(ICON_MATCAP_08);
+ prv[8] = UI_icon_to_preview(ICON_MATCAP_09);
+ prv[9] = UI_icon_to_preview(ICON_MATCAP_10);
+ prv[10] = UI_icon_to_preview(ICON_MATCAP_11);
+ prv[11] = UI_icon_to_preview(ICON_MATCAP_12);
+ prv[12] = UI_icon_to_preview(ICON_MATCAP_13);
+ prv[13] = UI_icon_to_preview(ICON_MATCAP_14);
+ prv[14] = UI_icon_to_preview(ICON_MATCAP_15);
+ prv[15] = UI_icon_to_preview(ICON_MATCAP_16);
+ prv[16] = UI_icon_to_preview(ICON_MATCAP_17);
+ prv[17] = UI_icon_to_preview(ICON_MATCAP_18);
+ prv[18] = UI_icon_to_preview(ICON_MATCAP_19);
+ prv[19] = UI_icon_to_preview(ICON_MATCAP_20);
+ prv[20] = UI_icon_to_preview(ICON_MATCAP_21);
+ prv[21] = UI_icon_to_preview(ICON_MATCAP_22);
+ prv[22] = UI_icon_to_preview(ICON_MATCAP_23);
+ prv[23] = UI_icon_to_preview(ICON_MATCAP_24);
+
+ e_data.matcap_array = load_matcaps(prv, 24);
+ }
+
+ /* Depth prepass */
+ if (!e_data.depth_sh) {
+ e_data.depth_sh = DRW_shader_create_3D_depth_only();
+ }
+
+ /* Shading pass */
+ if (!e_data.clay_sh) {
+ DynStr *ds = BLI_dynstr_new();
+ char *matcap_with_ao;
+
+ BLI_dynstr_append(ds, datatoc_clay_frag_glsl);
+ BLI_dynstr_append(ds, datatoc_ssao_alchemy_glsl);
+
+ matcap_with_ao = BLI_dynstr_get_cstring(ds);
+
+ e_data.clay_sh = DRW_shader_create(
+ datatoc_clay_vert_glsl, NULL, matcap_with_ao,
+ SHADER_DEFINES);
+ e_data.clay_flat_sh = DRW_shader_create(
+ datatoc_clay_vert_glsl, NULL, matcap_with_ao,
+ SHADER_DEFINES
+ "#define USE_FLAT_NORMAL\n");
+
+ BLI_dynstr_free(ds);
+ MEM_freeN(matcap_with_ao);
+ }
+
+ if (!e_data.hair_sh) {
+ e_data.hair_sh = DRW_shader_create(
+ datatoc_clay_particle_vert_glsl, NULL, datatoc_clay_particle_strand_frag_glsl,
+ "#define MAX_MATERIAL 512\n");
+ }
+
+ if (!stl->storage) {
+ stl->storage = MEM_callocN(sizeof(CLAY_Storage), "CLAY_Storage");
+ }
+
+ if (!sldata->mat_ubo) {
+ sldata->mat_ubo = DRW_uniformbuffer_create(sizeof(CLAY_UBO_Storage), NULL);
+ }
+
+ if (!sldata->hair_mat_ubo) {
+ sldata->hair_mat_ubo = DRW_uniformbuffer_create(sizeof(CLAY_HAIR_UBO_Storage), NULL);
+ }
+
+ if (!sldata->matcaps_ubo) {
+ sldata->matcaps_ubo = DRW_uniformbuffer_create(sizeof(e_data.matcap_colors), e_data.matcap_colors);
+ }
+
+ if (e_data.ubo_mat_idxs[1] == 0) {
+ /* Just int to have pointers to them */
+ for (int i = 0; i < MAX_CLAY_MAT; ++i) {
+ e_data.ubo_mat_idxs[i] = i;
+ }
+ }
+
+ if (DRW_state_is_fbo()) {
+ const float *viewport_size = DRW_viewport_size_get();
+ DRWFboTexture tex = {&e_data.depth_dup, DRW_TEX_DEPTH_24_STENCIL_8, DRW_TEX_TEMP};
+ DRW_framebuffer_init(&fbl->dupli_depth, &draw_engine_clay_type,
+ (int)viewport_size[0], (int)viewport_size[1],
+ &tex, 1);
+ }
+
+ /* SSAO setup */
+ {
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ ViewLayer *view_layer = draw_ctx->view_layer;
+ IDProperty *props = BKE_view_layer_engine_evaluated_get(
+ view_layer, COLLECTION_MODE_NONE, RE_engine_id_BLENDER_CLAY);
+ int ssao_samples = BKE_collection_engine_property_value_get_int(props, "ssao_samples");
+
+ float invproj[4][4];
+ float dfdyfacs[2];
+ const bool is_persp = DRW_viewport_is_persp_get();
+ /* view vectors for the corners of the view frustum.
+ * Can be used to recreate the world space position easily */
+ float viewvecs[3][4] = {
+ {-1.0f, -1.0f, -1.0f, 1.0f},
+ {1.0f, -1.0f, -1.0f, 1.0f},
+ {-1.0f, 1.0f, -1.0f, 1.0f}
+ };
+ int i;
+ const float *size = DRW_viewport_size_get();
+
+ DRW_state_dfdy_factors_get(dfdyfacs);
+
+ e_data.ssao_params[0] = ssao_samples;
+ e_data.ssao_params[1] = size[0] / 64.0;
+ e_data.ssao_params[2] = size[1] / 64.0;
+ e_data.ssao_params[3] = dfdyfacs[1]; /* dfdy sign for offscreen */
+
+ /* invert the view matrix */
+ DRW_viewport_matrix_get(e_data.winmat, DRW_MAT_WIN);
+ invert_m4_m4(invproj, e_data.winmat);
+
+ /* convert the view vectors to view space */
+ for (i = 0; i < 3; i++) {
+ mul_m4_v4(invproj, viewvecs[i]);
+ /* normalized trick see:
+ * http://www.derschmale.com/2014/01/26/reconstructing-positions-from-the-depth-buffer */
+ mul_v3_fl(viewvecs[i], 1.0f / viewvecs[i][3]);
+ if (is_persp)
+ mul_v3_fl(viewvecs[i], 1.0f / viewvecs[i][2]);
+ viewvecs[i][3] = 1.0;
+
+ copy_v4_v4(e_data.viewvecs[i], viewvecs[i]);
+ }
+
+ /* we need to store the differences */
+ e_data.viewvecs[1][0] -= e_data.viewvecs[0][0];
+ e_data.viewvecs[1][1] = e_data.viewvecs[2][1] - e_data.viewvecs[0][1];
+
+ /* calculate a depth offset as well */
+ if (!is_persp) {
+ float vec_far[] = {-1.0f, -1.0f, 1.0f, 1.0f};
+ mul_m4_v4(invproj, vec_far);
+ mul_v3_fl(vec_far, 1.0f / vec_far[3]);
+ e_data.viewvecs[1][2] = vec_far[2] - e_data.viewvecs[0][2];
+ }
+
+ /* AO Samples Tex */
+ if (sldata->sampling_ubo && (sldata->cached_sample_num != ssao_samples)) {
+ DRW_UBO_FREE_SAFE(sldata->sampling_ubo);
+ DRW_TEXTURE_FREE_SAFE(sldata->jitter_tx);
+ }
+
+ if (sldata->sampling_ubo == NULL) {
+ float *samples = create_disk_samples(ssao_samples);
+ sldata->jitter_tx = create_jitter_texture(ssao_samples);
+ sldata->sampling_ubo = DRW_uniformbuffer_create(sizeof(float[4]) * ssao_samples, samples);
+ sldata->cached_sample_num = ssao_samples;
+ MEM_freeN(samples);
+ }
+ }
+}
+
+static DRWShadingGroup *CLAY_shgroup_create(CLAY_Data *UNUSED(vedata), DRWPass *pass, int *material_id, bool use_flat)
+{
+ CLAY_ViewLayerData *sldata = CLAY_view_layer_data_get();
+ DRWShadingGroup *grp = DRW_shgroup_create(use_flat ? e_data.clay_flat_sh : e_data.clay_sh, pass);
+
+ DRW_shgroup_uniform_vec2(grp, "screenres", DRW_viewport_size_get(), 1);
+ DRW_shgroup_uniform_buffer(grp, "depthtex", &e_data.depth_dup);
+ DRW_shgroup_uniform_texture(grp, "matcaps", e_data.matcap_array);
+ DRW_shgroup_uniform_mat4(grp, "WinMatrix", (float *)e_data.winmat);
+ DRW_shgroup_uniform_vec4(grp, "viewvecs[0]", (float *)e_data.viewvecs, 3);
+ DRW_shgroup_uniform_vec4(grp, "ssao_params", e_data.ssao_params, 1);
+
+ DRW_shgroup_uniform_int(grp, "mat_id", material_id, 1);
+
+ DRW_shgroup_uniform_texture(grp, "ssao_jitter", sldata->jitter_tx);
+ DRW_shgroup_uniform_block(grp, "samples_block", sldata->sampling_ubo);
+ DRW_shgroup_uniform_block(grp, "material_block", sldata->mat_ubo);
+ DRW_shgroup_uniform_block(grp, "matcaps_block", sldata->matcaps_ubo);
+
+ return grp;
+}
+
+static DRWShadingGroup *CLAY_hair_shgroup_create(CLAY_Data *UNUSED(vedata), DRWPass *pass, int *material_id)
+{
+ CLAY_ViewLayerData *sldata = CLAY_view_layer_data_get();
+ DRWShadingGroup *grp = DRW_shgroup_create(e_data.hair_sh, pass);
+
+ DRW_shgroup_uniform_texture(grp, "matcaps", e_data.matcap_array);
+ DRW_shgroup_uniform_int(grp, "mat_id", material_id, 1);
+ DRW_shgroup_uniform_block(grp, "material_block", sldata->mat_ubo);
+ DRW_shgroup_uniform_block(grp, "matcaps_block", sldata->matcaps_ubo);
+
+ return grp;
+}
+
+static int search_mat_to_ubo(CLAY_Storage *storage, const CLAY_UBO_Material *mat_ubo_test)
+{
+ /* For now just use a linear search and test all parameters */
+ /* TODO make a hash table */
+ for (int i = 0; i < storage->ubo_current_id; ++i) {
+ CLAY_UBO_Material *ubo = &storage->mat_storage.materials[i];
+ if (memcmp(ubo, mat_ubo_test, sizeof(*mat_ubo_test)) == 0) {
+ return i;
+ }
+ }
+
+ return -1;
+}
+
+static int search_hair_mat_to_ubo(CLAY_Storage *storage, const CLAY_HAIR_UBO_Material *hair_mat_ubo_test)
+{
+ /* For now just use a linear search and test all parameters */
+ /* TODO make a hash table */
+ for (int i = 0; i < storage->hair_ubo_current_id; ++i) {
+ CLAY_HAIR_UBO_Material *ubo = &storage->hair_mat_storage.materials[i];
+ if (memcmp(ubo, hair_mat_ubo_test, sizeof(*hair_mat_ubo_test)) == 0) {
+ return i;
+ }
+ }
+
+ return -1;
+}
+
+static int push_mat_to_ubo(CLAY_Storage *storage, const CLAY_UBO_Material *mat_ubo_test)
+{
+ int id = storage->ubo_current_id;
+ CLAY_UBO_Material *ubo = &storage->mat_storage.materials[id];
+
+ *ubo = *mat_ubo_test;
+
+ storage->ubo_current_id++;
+
+ return id;
+}
+
+static int push_hair_mat_to_ubo(CLAY_Storage *storage, const CLAY_HAIR_UBO_Material *hair_mat_ubo_test)
+{
+ int id = storage->hair_ubo_current_id;
+ CLAY_HAIR_UBO_Material *ubo = &storage->hair_mat_storage.materials[id];
+
+ *ubo = *hair_mat_ubo_test;
+
+ storage->hair_ubo_current_id++;
+
+ return id;
+}
+
+static int mat_in_ubo(CLAY_Storage *storage, const CLAY_UBO_Material *mat_ubo_test)
+{
+ /* Search material in UBO */
+ int id = search_mat_to_ubo(storage, mat_ubo_test);
+
+ /* if not found create it */
+ if (id == -1) {
+ id = push_mat_to_ubo(storage, mat_ubo_test);
+ }
+
+ return id;
+}
+
+static int hair_mat_in_ubo(CLAY_Storage *storage, const CLAY_HAIR_UBO_Material *hair_mat_ubo_test)
+{
+ /* Search material in UBO */
+ int id = search_hair_mat_to_ubo(storage, hair_mat_ubo_test);
+
+ /* if not found create it */
+ if (id == -1) {
+ id = push_hair_mat_to_ubo(storage, hair_mat_ubo_test);
+ }
+
+ return id;
+}
+
+static void ubo_mat_from_object(Object *ob, CLAY_UBO_Material *r_ubo, bool *r_needs_ao)
+{
+ IDProperty *props = BKE_layer_collection_engine_evaluated_get(ob, COLLECTION_MODE_NONE, RE_engine_id_BLENDER_CLAY);
+
+ /* Default Settings */
+ float matcap_rot = BKE_collection_engine_property_value_get_float(props, "matcap_rotation");
+ float matcap_hue = BKE_collection_engine_property_value_get_float(props, "matcap_hue");
+ float matcap_sat = BKE_collection_engine_property_value_get_float(props, "matcap_saturation");
+ float matcap_val = BKE_collection_engine_property_value_get_float(props, "matcap_value");
+ float ssao_distance = BKE_collection_engine_property_value_get_float(props, "ssao_distance");
+ float ssao_factor_cavity = BKE_collection_engine_property_value_get_float(props, "ssao_factor_cavity");
+ float ssao_factor_edge = BKE_collection_engine_property_value_get_float(props, "ssao_factor_edge");
+ float ssao_attenuation = BKE_collection_engine_property_value_get_float(props, "ssao_attenuation");
+ int matcap_icon = BKE_collection_engine_property_value_get_int(props, "matcap_icon");
+
+ if (((ssao_factor_cavity > 0.0) || (ssao_factor_edge > 0.0)) &&
+ (ssao_distance > 0.0))
+ {
+ *r_needs_ao = true;
+ }
+
+ memset(r_ubo, 0x0, sizeof(*r_ubo));
+
+ r_ubo->matcap_rot[0] = cosf(matcap_rot * 3.14159f * 2.0f);
+ r_ubo->matcap_rot[1] = sinf(matcap_rot * 3.14159f * 2.0f);
+
+ r_ubo->matcap_hsv[0] = matcap_hue + 0.5f;
+ r_ubo->matcap_hsv[1] = matcap_sat * 2.0f;
+ r_ubo->matcap_hsv[2] = matcap_val * 2.0f;
+
+ r_ubo->ssao_params_var[0] = ssao_distance;
+ r_ubo->ssao_params_var[1] = ssao_factor_cavity;
+ r_ubo->ssao_params_var[2] = ssao_factor_edge;
+ r_ubo->ssao_params_var[3] = ssao_attenuation;
+ r_ubo->matcap_id = matcap_to_index(matcap_icon);
+}
+
+static void hair_ubo_mat_from_object(Object *ob, CLAY_HAIR_UBO_Material *r_ubo)
+{
+ IDProperty *props = BKE_layer_collection_engine_evaluated_get(ob, COLLECTION_MODE_NONE, RE_engine_id_BLENDER_CLAY);
+
+ /* Default Settings */
+ float matcap_rot = BKE_collection_engine_property_value_get_float(props, "matcap_rotation");
+ float matcap_hue = BKE_collection_engine_property_value_get_float(props, "matcap_hue");
+ float matcap_sat = BKE_collection_engine_property_value_get_float(props, "matcap_saturation");
+ float matcap_val = BKE_collection_engine_property_value_get_float(props, "matcap_value");
+ float hair_randomness = BKE_collection_engine_property_value_get_float(props, "hair_brightness_randomness");
+ int matcap_icon = BKE_collection_engine_property_value_get_int(props, "matcap_icon");
+
+ memset(r_ubo, 0x0, sizeof(*r_ubo));
+
+ r_ubo->matcap_rot[0] = cosf(matcap_rot * 3.14159f * 2.0f);
+ r_ubo->matcap_rot[1] = sinf(matcap_rot * 3.14159f * 2.0f);
+ r_ubo->matcap_hsv[0] = matcap_hue + 0.5f;
+ r_ubo->matcap_hsv[1] = matcap_sat * 2.0f;
+ r_ubo->matcap_hsv[2] = matcap_val * 2.0f;
+ r_ubo->hair_randomness = hair_randomness;
+ r_ubo->matcap_id = matcap_to_index(matcap_icon);
+}
+
+static DRWShadingGroup *CLAY_object_shgrp_get(
+ CLAY_Data *vedata, Object *ob, CLAY_StorageList *stl, CLAY_PassList *psl, bool use_flat)
+{
+ DRWShadingGroup **shgrps = use_flat ? stl->storage->shgrps_flat : stl->storage->shgrps;
+ CLAY_UBO_Material mat_ubo_test;
+
+ ubo_mat_from_object(ob, &mat_ubo_test, &stl->g_data->enable_ao);
+
+ int id = mat_in_ubo(stl->storage, &mat_ubo_test);
+
+ if (shgrps[id] == NULL) {
+ shgrps[id] = CLAY_shgroup_create(
+ vedata, use_flat ? psl->clay_pass_flat : psl->clay_pass, &e_data.ubo_mat_idxs[id], use_flat);
+ }
+
+ return shgrps[id];
+}
+
+static DRWShadingGroup *CLAY_hair_shgrp_get(CLAY_Data *vedata, Object *ob, CLAY_StorageList *stl, CLAY_PassList *psl)
+{
+ DRWShadingGroup **hair_shgrps = stl->storage->hair_shgrps;
+
+ CLAY_HAIR_UBO_Material hair_mat_ubo_test;
+ hair_ubo_mat_from_object(ob, &hair_mat_ubo_test);
+
+ int hair_id = hair_mat_in_ubo(stl->storage, &hair_mat_ubo_test);
+
+ if (hair_shgrps[hair_id] == NULL) {
+ hair_shgrps[hair_id] = CLAY_hair_shgroup_create(vedata, psl->hair_pass, &e_data.ubo_mat_idxs[hair_id]);
+ }
+
+ return hair_shgrps[hair_id];
+}
+
+static DRWShadingGroup *CLAY_object_shgrp_default_mode_get(
+ CLAY_Data *vedata, Object *ob, CLAY_StorageList *stl, CLAY_PassList *psl)
+{
+ bool use_flat = DRW_object_is_flat_normal(ob);
+ return CLAY_object_shgrp_get(vedata, ob, stl, psl, use_flat);
+}
+
+static void clay_cache_init(void *vedata)
+{
+ CLAY_PassList *psl = ((CLAY_Data *)vedata)->psl;
+ CLAY_StorageList *stl = ((CLAY_Data *)vedata)->stl;
+
+ if (!stl->g_data) {
+ /* Alloc transient pointers */
+ stl->g_data = MEM_mallocN(sizeof(*stl->g_data), __func__);
+ }
+
+ /* Disable AO unless a material needs it. */
+ stl->g_data->enable_ao = false;
+
+ /* Depth Pass */
+ {
+ psl->depth_pass = DRW_pass_create("Depth Pass", DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS);
+ stl->g_data->depth_shgrp = DRW_shgroup_create(e_data.depth_sh, psl->depth_pass);
+
+ psl->depth_pass_cull = DRW_pass_create(
+ "Depth Pass Cull",
+ DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_CULL_BACK);
+ stl->g_data->depth_shgrp_cull = DRW_shgroup_create(e_data.depth_sh, psl->depth_pass_cull);
+ }
+
+ /* Clay Pass */
+ {
+ psl->clay_pass = DRW_pass_create("Clay Pass", DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL);
+ stl->storage->ubo_current_id = 0;
+ memset(stl->storage->shgrps, 0, sizeof(DRWShadingGroup *) * MAX_CLAY_MAT);
+ }
+
+ /* Clay Pass (Flat) */
+ {
+ psl->clay_pass_flat = DRW_pass_create("Clay Pass Flat", DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL);
+ memset(stl->storage->shgrps_flat, 0, sizeof(DRWShadingGroup *) * MAX_CLAY_MAT);
+ }
+
+ /* Hair Pass */
+ {
+ psl->hair_pass = DRW_pass_create(
+ "Hair Pass",
+ DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_WIRE);
+ stl->storage->hair_ubo_current_id = 0;
+ memset(stl->storage->hair_shgrps, 0, sizeof(DRWShadingGroup *) * MAX_CLAY_MAT);
+ }
+}
+
+static void clay_cache_populate_particles(void *vedata, Object *ob)
+{
+ CLAY_PassList *psl = ((CLAY_Data *)vedata)->psl;
+ CLAY_StorageList *stl = ((CLAY_Data *)vedata)->stl;
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+
+
+ Scene *scene = draw_ctx->scene;
+ Object *obedit = scene->obedit;
+
+ if (ob != obedit) {
+ for (ParticleSystem *psys = ob->particlesystem.first; psys; psys = psys->next) {
+ if (psys_check_enabled(ob, psys, false)) {
+ ParticleSettings *part = psys->part;
+ int draw_as = (part->draw_as == PART_DRAW_REND) ? part->ren_as : part->draw_as;
+
+ if (draw_as == PART_DRAW_PATH && !psys->pathcache && !psys->childcache) {
+ draw_as = PART_DRAW_DOT;
+ }
+
+ static float mat[4][4];
+ unit_m4(mat);
+
+ if (draw_as == PART_DRAW_PATH) {
+ struct Gwn_Batch *geom = DRW_cache_particles_get_hair(psys, NULL);
+ DRWShadingGroup *hair_shgrp = CLAY_hair_shgrp_get(vedata, ob, stl, psl);
+ DRW_shgroup_call_add(hair_shgrp, geom, mat);
+ }
+ }
+ }
+ }
+}
+
+static void clay_cache_populate(void *vedata, Object *ob)
+{
+ CLAY_PassList *psl = ((CLAY_Data *)vedata)->psl;
+ CLAY_StorageList *stl = ((CLAY_Data *)vedata)->stl;
+
+ DRWShadingGroup *clay_shgrp;
+
+ if (!DRW_object_is_renderable(ob))
+ return;
+
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ const bool is_active = (ob == draw_ctx->obact);
+ if (is_active) {
+ if (DRW_object_is_mode_shade(ob) == true) {
+ return;
+ }
+ }
+
+ /* Handle particles first in case the emitter itself shouldn't be rendered. */
+ if (ob->type == OB_MESH) {
+ clay_cache_populate_particles(vedata, ob);
+ }
+
+ if (DRW_check_object_visible_within_active_context(ob) == false) {
+ return;
+ }
+
+ struct Gwn_Batch *geom = DRW_cache_object_surface_get(ob);
+ if (geom) {
+ IDProperty *ces_mode_ob = BKE_layer_collection_engine_evaluated_get(ob, COLLECTION_MODE_OBJECT, "");
+ const bool do_cull = BKE_collection_engine_property_value_get_bool(ces_mode_ob, "show_backface_culling");
+ const bool is_sculpt_mode = is_active && (draw_ctx->object_mode & OB_MODE_SCULPT) != 0;
+ const bool is_default_mode_shader = is_sculpt_mode;
+
+ /* Depth Prepass */
+ {
+ DRWShadingGroup *depth_shgrp = do_cull ? stl->g_data->depth_shgrp_cull : stl->g_data->depth_shgrp;
+ if (is_sculpt_mode) {
+ DRW_shgroup_call_sculpt_add(depth_shgrp, ob, ob->obmat);
+ }
+ else {
+ DRW_shgroup_call_object_add(depth_shgrp, geom, ob);
+ }
+ }
+
+ /* Shading */
+ if (is_default_mode_shader) {
+ clay_shgrp = CLAY_object_shgrp_default_mode_get(vedata, ob, stl, psl);
+ }
+ else {
+ clay_shgrp = CLAY_object_shgrp_get(vedata, ob, stl, psl, false);
+ }
+
+ if (is_sculpt_mode) {
+ DRW_shgroup_call_sculpt_add(clay_shgrp, ob, ob->obmat);
+ }
+ else {
+ DRW_shgroup_call_add(clay_shgrp, geom, ob->obmat);
+ }
+ }
+}
+
+static void clay_cache_finish(void *vedata)
+{
+ CLAY_ViewLayerData *sldata = CLAY_view_layer_data_get();
+ CLAY_StorageList *stl = ((CLAY_Data *)vedata)->stl;
+
+ DRW_uniformbuffer_update(sldata->mat_ubo, &stl->storage->mat_storage);
+ DRW_uniformbuffer_update(sldata->hair_mat_ubo, &stl->storage->hair_mat_storage);
+}
+
+static void clay_draw_scene(void *vedata)
+{
+ CLAY_StorageList *stl = ((CLAY_Data *)vedata)->stl;
+ CLAY_PassList *psl = ((CLAY_Data *)vedata)->psl;
+ CLAY_FramebufferList *fbl = ((CLAY_Data *)vedata)->fbl;
+ DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
+
+ /* Pass 1 : Depth pre-pass */
+ if (stl->g_data->enable_ao) {
+ DRW_draw_pass(psl->depth_pass);
+ DRW_draw_pass(psl->depth_pass_cull);
+ }
+ else {
+ DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS;
+ DRW_pass_state_set(psl->clay_pass, state);
+ DRW_pass_state_set(psl->clay_pass_flat, state);
+ }
+
+ /* Pass 2 : Duplicate depth */
+ /* Unless we go for deferred shading we need this to avoid manual depth test and artifacts */
+ if (DRW_state_is_fbo() && stl->g_data->enable_ao) {
+ /* attach temp textures */
+ DRW_framebuffer_texture_attach(fbl->dupli_depth, e_data.depth_dup, 0, 0);
+
+ DRW_framebuffer_blit(dfbl->default_fb, fbl->dupli_depth, true, false);
+
+ /* detach temp textures */
+ DRW_framebuffer_texture_detach(e_data.depth_dup);
+
+ /* restore default fb */
+ DRW_framebuffer_bind(dfbl->default_fb);
+ }
+
+ /* Pass 3 : Shading */
+ DRW_draw_pass(psl->clay_pass);
+ DRW_draw_pass(psl->clay_pass_flat);
+ DRW_draw_pass(psl->hair_pass);
+}
+
+static void clay_layer_collection_settings_create(RenderEngine *UNUSED(engine), IDProperty *props)
+{
+ BLI_assert(props &&
+ props->type == IDP_GROUP &&
+ props->subtype == IDP_GROUP_SUB_ENGINE_RENDER);
+
+ BKE_collection_engine_property_add_int(props, "matcap_icon", ICON_MATCAP_01);
+ BKE_collection_engine_property_add_int(props, "type", CLAY_MATCAP_NONE);
+ BKE_collection_engine_property_add_float(props, "matcap_rotation", 0.0f);
+ BKE_collection_engine_property_add_float(props, "matcap_hue", 0.5f);
+ BKE_collection_engine_property_add_float(props, "matcap_saturation", 0.5f);
+ BKE_collection_engine_property_add_float(props, "matcap_value", 0.5f);
+ BKE_collection_engine_property_add_float(props, "ssao_distance", 0.2f);
+ BKE_collection_engine_property_add_float(props, "ssao_attenuation", 1.0f);
+ BKE_collection_engine_property_add_float(props, "ssao_factor_cavity", 1.0f);
+ BKE_collection_engine_property_add_float(props, "ssao_factor_edge", 1.0f);
+ BKE_collection_engine_property_add_float(props, "hair_brightness_randomness", 0.0f);
+}
+
+static void clay_view_layer_settings_create(RenderEngine *UNUSED(engine), IDProperty *props)
+{
+ BLI_assert(props &&
+ props->type == IDP_GROUP &&
+ props->subtype == IDP_GROUP_SUB_ENGINE_RENDER);
+
+ BKE_collection_engine_property_add_int(props, "ssao_samples", 16);
+}
+
+static void clay_engine_free(void)
+{
+ DRW_SHADER_FREE_SAFE(e_data.clay_sh);
+ DRW_SHADER_FREE_SAFE(e_data.clay_flat_sh);
+ DRW_SHADER_FREE_SAFE(e_data.hair_sh);
+ DRW_TEXTURE_FREE_SAFE(e_data.matcap_array);
+}
+
+static const DrawEngineDataSize clay_data_size = DRW_VIEWPORT_DATA_SIZE(CLAY_Data);
+
+DrawEngineType draw_engine_clay_type = {
+ NULL, NULL,
+ N_("Clay"),
+ &clay_data_size,
+ &clay_engine_init,
+ &clay_engine_free,
+ &clay_cache_init,
+ &clay_cache_populate,
+ &clay_cache_finish,
+ NULL,
+ &clay_draw_scene,
+ NULL,
+ NULL,
+ NULL,
+};
+
+RenderEngineType DRW_engine_viewport_clay_type = {
+ NULL, NULL,
+ CLAY_ENGINE, N_("Clay"), RE_INTERNAL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ &clay_layer_collection_settings_create,
+ &clay_view_layer_settings_create,
+ &draw_engine_clay_type,
+ {NULL, NULL, NULL}
+};
+
+
+#undef CLAY_ENGINE
+
+#endif /* WITH_CLAY_ENGINE */
diff --git a/source/blender/draw/engines/clay/clay_engine.h b/source/blender/draw/engines/clay/clay_engine.h
new file mode 100644
index 00000000000..b7c9d00c9ae
--- /dev/null
+++ b/source/blender/draw/engines/clay/clay_engine.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file clay_engine.h
+ * \ingroup draw_engine
+ */
+
+#ifndef __CLAY_ENGINE_H__
+#define __CLAY_ENGINE_H__
+
+extern DrawEngineType draw_engine_clay_type;
+extern RenderEngineType DRW_engine_viewport_clay_type;
+
+struct IDProperty;
+
+struct IDProperty *CLAY_render_settings_create(void);
+
+#endif /* __CLAY_ENGINE_H__ */
diff --git a/source/blender/draw/engines/clay/shaders/clay_frag.glsl b/source/blender/draw/engines/clay/shaders/clay_frag.glsl
new file mode 100644
index 00000000000..619843e2a02
--- /dev/null
+++ b/source/blender/draw/engines/clay/shaders/clay_frag.glsl
@@ -0,0 +1,204 @@
+uniform vec2 screenres;
+uniform sampler2D depthtex;
+uniform mat4 WinMatrix;
+
+/* Matcap */
+uniform sampler2DArray matcaps;
+
+/* Screen Space Occlusion */
+/* store the view space vectors for the corners of the view frustum here.
+ * It helps to quickly reconstruct view space vectors by using uv coordinates,
+ * see http://www.derschmale.com/2014/01/26/reconstructing-positions-from-the-depth-buffer */
+uniform vec4 viewvecs[3];
+uniform vec4 ssao_params;
+
+uniform sampler2D ssao_jitter;
+
+/* Material Parameters packed in an UBO */
+struct Material {
+ vec4 ssao_params_var;
+ vec4 matcap_hsv_id;
+ vec4 matcap_rot; /* vec4 to ensure 16 bytes alignement (don't trust compiler) */
+};
+
+layout(std140) uniform samples_block {
+ vec4 ssao_samples[500];
+};
+
+layout(std140) uniform matcaps_block {
+ vec4 matcaps_color[24];
+};
+
+layout(std140) uniform material_block {
+ Material matcaps_param[MAX_MATERIAL];
+};
+
+uniform int mat_id;
+
+/* Aliases */
+#define ssao_samples_num ssao_params.x
+#define jitter_tilling ssao_params.yz
+#define dfdy_sign ssao_params.w
+
+#define matcap_hsv matcaps_param[mat_id].matcap_hsv_id.xyz
+#define matcap_index matcaps_param[mat_id].matcap_hsv_id.w
+#define matcap_rotation matcaps_param[mat_id].matcap_rot.xy
+
+#ifdef USE_FLAT_NORMAL
+flat in vec3 normal;
+#else
+in vec3 normal;
+#endif
+
+out vec4 fragColor;
+
+/* TODO Move this to SSAO modules */
+/* simple depth reconstruction, see http://www.derschmale.com/2014/01/26/reconstructing-positions-from-the-depth-buffer
+ * we change the factors from the article to fit the OpennGL model. */
+vec3 get_view_space_from_depth(in vec2 uvcoords, in float depth)
+{
+ if (WinMatrix[3][3] == 0.0) {
+ /* Perspective */
+ float d = 2.0 * depth - 1.0;
+
+ float zview = -WinMatrix[3][2] / (d + WinMatrix[2][2]);
+
+ return zview * (viewvecs[0].xyz + vec3(uvcoords, 0.0) * viewvecs[1].xyz);
+ }
+ else {
+ /* Orthographic */
+ vec3 offset = vec3(uvcoords, depth);
+
+ return viewvecs[0].xyz + offset * viewvecs[1].xyz;
+ }
+}
+
+#ifdef USE_HSV
+void rgb_to_hsv(vec3 rgb, out vec3 outcol)
+{
+ float cmax, cmin, h, s, v, cdelta;
+ vec3 c;
+
+ cmax = max(rgb[0], max(rgb[1], rgb[2]));
+ cmin = min(rgb[0], min(rgb[1], rgb[2]));
+ cdelta = cmax - cmin;
+
+ v = cmax;
+ if (cmax != 0.0)
+ s = cdelta / cmax;
+ else {
+ s = 0.0;
+ h = 0.0;
+ }
+
+ if (s == 0.0) {
+ h = 0.0;
+ }
+ else {
+ c = (vec3(cmax, cmax, cmax) - rgb.xyz) / cdelta;
+
+ if (rgb.x == cmax) h = c[2] - c[1];
+ else if (rgb.y == cmax) h = 2.0 + c[0] - c[2];
+ else h = 4.0 + c[1] - c[0];
+
+ h /= 6.0;
+
+ if (h < 0.0)
+ h += 1.0;
+ }
+
+ outcol = vec3(h, s, v);
+}
+
+void hsv_to_rgb(vec3 hsv, out vec3 outcol)
+{
+ float i, f, p, q, t, h, s, v;
+ vec3 rgb;
+
+ h = hsv[0];
+ s = hsv[1];
+ v = hsv[2];
+
+ if (s == 0.0) {
+ rgb = vec3(v, v, v);
+ }
+ else {
+ if (h == 1.0)
+ h = 0.0;
+
+ h *= 6.0;
+ i = floor(h);
+ f = h - i;
+ rgb = vec3(f, f, f);
+ p = v * (1.0 - s);
+ q = v * (1.0 - (s * f));
+ t = v * (1.0 - (s * (1.0 - f)));
+
+ if (i == 0.0) rgb = vec3(v, t, p);
+ else if (i == 1.0) rgb = vec3(q, v, p);
+ else if (i == 2.0) rgb = vec3(p, v, t);
+ else if (i == 3.0) rgb = vec3(p, q, v);
+ else if (i == 4.0) rgb = vec3(t, p, v);
+ else rgb = vec3(v, p, q);
+ }
+
+ outcol = rgb;
+}
+
+void hue_sat(float hue, float sat, float value, inout vec3 col)
+{
+ vec3 hsv;
+
+ rgb_to_hsv(col, hsv);
+
+ hsv.x += hue;
+ hsv.x -= floor(hsv.x);
+ hsv.y *= sat;
+ hsv.y = clamp(hsv.y, 0.0, 1.0);
+ hsv.z *= value;
+ hsv.z = clamp(hsv.z, 0.0, 1.0);
+
+ hsv_to_rgb(hsv, col);
+}
+#endif
+
+#ifdef USE_AO
+/* Prototype */
+void ssao_factors(
+ in float depth, in vec3 normal, in vec3 position, in vec2 screenco,
+ out float cavities, out float edges);
+#endif
+
+void main() {
+ vec2 screenco = vec2(gl_FragCoord.xy) / screenres;
+ float depth = texture(depthtex, screenco).r;
+
+ vec3 position = get_view_space_from_depth(screenco, depth);
+
+#ifdef USE_ROTATION
+ /* Rotate texture coordinates */
+ vec2 rotY = vec2(-matcap_rotation.y, matcap_rotation.x);
+ vec2 texco = abs(vec2(dot(normal.xy, matcap_rotation), dot(normal.xy, rotY)) * .49 + 0.5);
+#else
+ vec2 texco = abs(normal.xy * .49 + 0.5);
+#endif
+ vec3 col = texture(matcaps, vec3(texco, matcap_index)).rgb;
+
+#ifdef USE_AO
+ float cavity, edges;
+ ssao_factors(depth, normal, position, screenco, cavity, edges);
+
+ col *= mix(vec3(1.0), matcaps_color[int(matcap_index)].rgb, cavity);
+#endif
+
+#ifdef USE_HSV
+ hue_sat(matcap_hsv.x, matcap_hsv.y, matcap_hsv.z, col);
+#endif
+
+#ifdef USE_AO
+ /* Apply highlights after hue shift */
+ col *= edges + 1.0;
+#endif
+
+ fragColor = vec4(col, 1.0);
+}
diff --git a/source/blender/draw/engines/clay/shaders/clay_particle_strand_frag.glsl b/source/blender/draw/engines/clay/shaders/clay_particle_strand_frag.glsl
new file mode 100644
index 00000000000..980a1e4690d
--- /dev/null
+++ b/source/blender/draw/engines/clay/shaders/clay_particle_strand_frag.glsl
@@ -0,0 +1,144 @@
+
+/* Material Parameters packed in an UBO */
+struct Material {
+ vec4 one;
+ vec4 two;
+};
+
+layout(std140) uniform material_block {
+ Material shader_param[MAX_MATERIAL];
+};
+
+uniform mat4 ProjectionMatrix;
+uniform sampler2DArray matcaps;
+uniform int mat_id;
+
+#define randomness shader_param[mat_id].one.x
+#define matcap_index shader_param[mat_id].one.y
+#define matcap_rotation shader_param[mat_id].one.zw
+#define matcap_hsv shader_param[mat_id].two.xyz
+
+in vec3 tangent;
+in vec3 viewPosition;
+flat in float colRand;
+out vec4 fragColor;
+
+vec3 rotate(vec3 norm, vec3 ortho, float ang)
+{
+ return norm * cos(ang) + ortho * sin(ang);
+}
+
+void rgb_to_hsv(vec3 rgb, out vec3 outcol)
+{
+ float cmax, cmin, h, s, v, cdelta;
+ vec3 c;
+
+ cmax = max(rgb[0], max(rgb[1], rgb[2]));
+ cmin = min(rgb[0], min(rgb[1], rgb[2]));
+ cdelta = cmax - cmin;
+
+ v = cmax;
+ if (cmax != 0.0)
+ s = cdelta / cmax;
+ else {
+ s = 0.0;
+ h = 0.0;
+ }
+
+ if (s == 0.0) {
+ h = 0.0;
+ }
+ else {
+ c = (vec3(cmax, cmax, cmax) - rgb.xyz) / cdelta;
+
+ if (rgb.x == cmax) h = c[2] - c[1];
+ else if (rgb.y == cmax) h = 2.0 + c[0] - c[2];
+ else h = 4.0 + c[1] - c[0];
+
+ h /= 6.0;
+
+ if (h < 0.0)
+ h += 1.0;
+ }
+
+ outcol = vec3(h, s, v);
+}
+
+void hsv_to_rgb(vec3 hsv, out vec3 outcol)
+{
+ float i, f, p, q, t, h, s, v;
+ vec3 rgb;
+
+ h = hsv[0];
+ s = hsv[1];
+ v = hsv[2];
+
+ if (s == 0.0) {
+ rgb = vec3(v, v, v);
+ }
+ else {
+ if (h == 1.0)
+ h = 0.0;
+
+ h *= 6.0;
+ i = floor(h);
+ f = h - i;
+ rgb = vec3(f, f, f);
+ p = v * (1.0 - s);
+ q = v * (1.0 - (s * f));
+ t = v * (1.0 - (s * (1.0 - f)));
+
+ if (i == 0.0) rgb = vec3(v, t, p);
+ else if (i == 1.0) rgb = vec3(q, v, p);
+ else if (i == 2.0) rgb = vec3(p, v, t);
+ else if (i == 3.0) rgb = vec3(p, q, v);
+ else if (i == 4.0) rgb = vec3(t, p, v);
+ else rgb = vec3(v, p, q);
+ }
+
+ outcol = rgb;
+}
+
+void hue_sat(float hue, float sat, float value, inout vec3 col)
+{
+ vec3 hsv;
+
+ rgb_to_hsv(col, hsv);
+
+ hsv.x += hue;
+ hsv.x -= floor(hsv.x);
+ hsv.y *= sat;
+ hsv.y = clamp(hsv.y, 0.0, 1.0);
+ hsv.z *= value;
+ hsv.z = clamp(hsv.z, 0.0, 1.0);
+
+ hsv_to_rgb(hsv, col);
+}
+
+void main()
+{
+ vec3 viewvec = (ProjectionMatrix[3][3] == 0.0) ? normalize(viewPosition) : vec3(0.0, 0.0, -1.0);
+ vec3 ortho = normalize(cross(viewvec, tangent));
+ vec3 norm = normalize(cross(ortho, tangent));
+
+ vec3 col = vec3(0);
+
+ vec2 rotY = vec2(-matcap_rotation.y, matcap_rotation.x);
+
+ for (int i = 0; i < 9; i++) {
+ vec3 rotNorm = rotate(norm, ortho, -0.5 + (i * 0.125));
+ vec3 ray = reflect(viewvec, rotNorm);
+ vec2 texco = abs(vec2(dot(ray.xy, matcap_rotation), dot(ray.xy, rotY)) * .49 + 0.5);
+
+ col += texture(matcaps, vec3(texco, matcap_index)).rgb / 9.0;
+ }
+
+ hue_sat(matcap_hsv.x, matcap_hsv.y, matcap_hsv.z, col);
+
+ float maxChan = max(max(col.r, col.g), col.b);
+
+ col += (colRand * maxChan * randomness * 1.5) - (maxChan * randomness * 0.75);
+
+ fragColor.rgb = col;
+ fragColor.a = 1.0;
+}
diff --git a/source/blender/draw/engines/clay/shaders/clay_particle_vert.glsl b/source/blender/draw/engines/clay/shaders/clay_particle_vert.glsl
new file mode 100644
index 00000000000..d4c35d14182
--- /dev/null
+++ b/source/blender/draw/engines/clay/shaders/clay_particle_vert.glsl
@@ -0,0 +1,34 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+uniform mat3 NormalMatrix;
+uniform mat4 ModelViewMatrix;
+
+in vec3 pos;
+in vec3 nor;
+in int ind;
+out vec3 tangent;
+out vec3 viewPosition;
+flat out float colRand;
+
+float rand(int s)
+{
+ int seed = s * 1023423;
+
+ seed = (seed ^ 61) ^ (seed >> 16);
+ seed *= 9;
+ seed = seed ^ (seed >> 4);
+ seed *= 0x27d4eb2d;
+ seed = seed ^ (seed >> 15);
+
+ float value = float(seed);
+ value *= 1.0 / 42596.0;
+ return fract(value);
+}
+
+void main()
+{
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
+ tangent = normalize(NormalMatrix * nor);
+ viewPosition = (ModelViewMatrix * vec4(pos, 1.0)).xyz;
+ colRand = rand(ind);
+}
diff --git a/source/blender/draw/engines/clay/shaders/clay_vert.glsl b/source/blender/draw/engines/clay/shaders/clay_vert.glsl
new file mode 100644
index 00000000000..8f8866b3839
--- /dev/null
+++ b/source/blender/draw/engines/clay/shaders/clay_vert.glsl
@@ -0,0 +1,17 @@
+uniform mat4 ModelViewProjectionMatrix;
+uniform mat3 NormalMatrix;
+
+in vec3 pos;
+in vec3 nor;
+
+#ifdef USE_FLAT_NORMAL
+flat out vec3 normal;
+#else
+out vec3 normal;
+#endif
+
+void main()
+{
+ normal = normalize(NormalMatrix * nor);
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
+}
diff --git a/source/blender/draw/engines/clay/shaders/ssao_alchemy.glsl b/source/blender/draw/engines/clay/shaders/ssao_alchemy.glsl
new file mode 100644
index 00000000000..48c117c3d8d
--- /dev/null
+++ b/source/blender/draw/engines/clay/shaders/ssao_alchemy.glsl
@@ -0,0 +1,78 @@
+#define ssao_distance matcaps_param[mat_id].ssao_params_var.x
+#define ssao_factor_cavity matcaps_param[mat_id].ssao_params_var.y
+#define ssao_factor_edge matcaps_param[mat_id].ssao_params_var.z
+#define ssao_attenuation matcaps_param[mat_id].ssao_params_var.w
+
+/* from The Alchemy screen-space ambient obscurance algorithm
+ * http://graphics.cs.williams.edu/papers/AlchemyHPG11/VV11AlchemyAO.pdf */
+
+void ssao_factors(
+ in float depth, in vec3 normal, in vec3 position, in vec2 screenco,
+ out float cavities, out float edges)
+{
+ /* take the normalized ray direction here */
+ vec3 noise = texture(ssao_jitter, screenco.xy * jitter_tilling).rgb;
+
+ /* find the offset in screen space by multiplying a point
+ * in camera space at the depth of the point by the projection matrix. */
+ vec2 offset;
+ float homcoord = WinMatrix[2][3] * position.z + WinMatrix[3][3];
+ offset.x = WinMatrix[0][0] * ssao_distance / homcoord;
+ offset.y = WinMatrix[1][1] * ssao_distance / homcoord;
+ /* convert from -1.0...1.0 range to 0.0..1.0 for easy use with texture coordinates */
+ offset *= 0.5;
+
+ cavities = edges = 0.0;
+ int num_samples = int(ssao_samples_num);
+
+ /* Note. Putting noise usage here to put some ALU after texture fetch. */
+ vec2 rotX = noise.rg;
+ vec2 rotY = vec2(-rotX.y, rotX.x);
+
+ for (int x = 0; x < num_samples && x < 500; x++) {
+ /* ssao_samples[x].xy is sample direction (normalized).
+ * ssao_samples[x].z is sample distance from disk center. */
+
+ /* Rotate with random direction to get jittered result. */
+ vec2 dir_jittered = vec2(dot(ssao_samples[x].xy, rotX), dot(ssao_samples[x].xy, rotY));
+ dir_jittered.xy *= ssao_samples[x].z + noise.b;
+
+ vec2 uvcoords = screenco.xy + dir_jittered * offset;
+
+ if (uvcoords.x > 1.0 || uvcoords.x < 0.0 || uvcoords.y > 1.0 || uvcoords.y < 0.0)
+ continue;
+
+ float depth_new = texture(depthtex, uvcoords).r;
+
+ /* Handle Background case */
+ bool is_background = (depth_new == 1.0);
+
+ /* This trick provide good edge effect even if no neighboor is found. */
+ vec3 pos_new = get_view_space_from_depth(uvcoords, (is_background) ? depth : depth_new);
+
+ if (is_background)
+ pos_new.z -= ssao_distance;
+
+ vec3 dir = pos_new - position;
+ float len = length(dir);
+ float f_cavities = dot(dir, normal);
+ float f_edge = -f_cavities;
+ float f_bias = 0.05 * len + 0.0001;
+
+ float attenuation = 1.0 / (len * (1.0 + len * len * ssao_attenuation));
+
+ /* use minor bias here to avoid self shadowing */
+ if (f_cavities > -f_bias)
+ cavities += f_cavities * attenuation;
+
+ if (f_edge > f_bias)
+ edges += f_edge * attenuation;
+ }
+
+ cavities /= ssao_samples_num;
+ edges /= ssao_samples_num;
+
+ /* don't let cavity wash out the surface appearance */
+ cavities = clamp(cavities * ssao_factor_cavity, 0.0, 1.0);
+ edges = edges * ssao_factor_edge;
+}
diff --git a/source/blender/draw/engines/clay/shaders/ssao_groundtruth.glsl b/source/blender/draw/engines/clay/shaders/ssao_groundtruth.glsl
new file mode 100644
index 00000000000..9c203a4246c
--- /dev/null
+++ b/source/blender/draw/engines/clay/shaders/ssao_groundtruth.glsl
@@ -0,0 +1,122 @@
+#define ssao_distance matcaps_param[mat_id].ssao_params_var.x
+#define ssao_factor_cavity matcaps_param[mat_id].ssao_params_var.y
+#define ssao_factor_edge matcaps_param[mat_id].ssao_params_var.z
+#define ssao_attenuation matcaps_param[mat_id].ssao_params_var.w
+
+/* Based on Practical Realtime Strategies for Accurate Indirect Occlusion
+ * http://blog.selfshadow.com/publications/s2016-shading-course/activision/s2016_pbs_activision_occlusion.pdf
+ * http://blog.selfshadow.com/publications/s2016-shading-course/activision/s2016_pbs_activision_occlusion.pptx */
+
+#define COSINE_WEIGHTING
+
+float integrate_arc(in float h1, in float h2, in float gamma, in float n_proj_len)
+{
+ float a = 0.0;
+#ifdef COSINE_WEIGHTING
+ float cos_gamma = cos(gamma);
+ float sin_gamma_2 = 2.0 * sin(gamma);
+ a += -cos(2.0 * h1 - gamma) + cos_gamma + h1 * sin_gamma_2;
+ a += -cos(2.0 * h2 - gamma) + cos_gamma + h2 * sin_gamma_2;
+ a *= 0.25; /* 1/4 */
+ a *= n_proj_len;
+#else
+ /* Uniform weighting (slide 59) */
+ a += 1 - cos(h1);
+ a += 1 - cos(h2);
+#endif
+ return a;
+}
+
+float get_max_horizon(in vec2 co, in vec3 x, in vec3 omega_o, in float h)
+{
+ if (co.x > 1.0 || co.x < 0.0 || co.y > 1.0 || co.y < 0.0)
+ return h;
+
+ float depth = texture(depthtex, co).r;
+
+ /* Background case */
+ if (depth == 1.0)
+ return h;
+
+ vec3 s = get_view_space_from_depth(co, depth); /* s View coordinate */
+ vec3 omega_s = s - x;
+ float len = length(omega_s);
+
+ if (len < ssao_distance) {
+ omega_s /= len;
+ h = max(h, dot(omega_s, omega_o));
+ }
+ return h;
+}
+
+void ssao_factors(
+ in float depth, in vec3 normal, in vec3 position, in vec2 screenco,
+ out float cavities, out float edges)
+{
+ /* Renaming */
+ vec3 omega_o = -normalize(position); /* viewvec */
+ vec2 x_ = screenco; /* x^ Screen coordinate */
+ vec3 x = position; /* x view space coordinate */
+
+#ifdef SPATIAL_DENOISE
+ float noise_dir = (1.0 / 16.0) * float(((int(gl_FragCoord.x + gl_FragCoord.y) & 0x3) << 2) + (int(gl_FragCoord.x) & 0x3));
+ float noise_offset = (1.0 / 4.0) * float(int(gl_FragCoord.y - gl_FragCoord.x) & 0x3);
+#else
+ float noise_dir = (1.0 / 16.0) * float(((int(gl_FragCoord.x + gl_FragCoord.y) & 0x3) << 2) + (int(gl_FragCoord.x) & 0x3));
+ float noise_offset = (0.5 / 16.0) + (1.0 / 16.0) * float(((int(gl_FragCoord.x - gl_FragCoord.y) & 0x3) << 2) + (int(gl_FragCoord.x) & 0x3));
+#endif
+
+ const float phi_step = 16.0;
+ const float theta_step = 16.0;
+ const float m_pi = 3.14159265358979323846;
+ vec2 pixel_ratio = vec2(screenres.y / screenres.x, 1.0);
+ vec2 pixel_size = vec2(1.0) / screenres.xy;
+ float min_stride = length(pixel_size);
+ float homcco = WinMatrix[2][3] * position.z + WinMatrix[3][3];
+ float n = max(min_stride * theta_step, ssao_distance / homcco); /* Search distance */
+
+ /* Integral over PI */
+ float A = 0.0;
+ for (float i = 0.0; i < phi_step; i++) {
+ float phi = m_pi * ((noise_dir + i) / phi_step);
+
+ vec2 t_phi = vec2(cos(phi), sin(phi)); /* Screen space direction */
+
+ /* Search maximum horizon angles Theta1 and Theta2 */
+ float theta1 = -1.0, theta2 = -1.0; /* init at cos(pi) */
+ for (float j = 0.0; j < theta_step; j++) {
+ vec2 s_ = t_phi * pixel_ratio * n * ((j + noise_offset)/ theta_step); /* s^ Screen coordinate */
+ vec2 co;
+
+ co = x_ + s_;
+ theta1 = get_max_horizon(co, x, omega_o, theta1);
+
+ co = x_ - s_;
+ theta2 = get_max_horizon(co, x, omega_o, theta2);
+ }
+
+ /* (Slide 54) */
+ theta1 = -acos(theta1);
+ theta2 = acos(theta2);
+
+ /* Projecting Normal to Plane P defined by t_phi and omega_o */
+ vec3 h = normalize(cross(vec3(t_phi, 0.0), omega_o)); /* Normal vector to Integration plane */
+ vec3 t = cross(h, omega_o); /* Normal vector to plane */
+ vec3 n_proj = normal - h * dot(normal, h);
+ float n_proj_len = length(n_proj);
+ vec3 n_proj_norm = normalize(n_proj);
+
+ /* Clamping thetas (slide 58) */
+ float gamma = sign(dot(n_proj_norm, t)) * acos(dot(normal, omega_o)); /* Angle between view vec and normal */
+ theta1 = gamma + max(theta1 - gamma, -m_pi * 0.5);
+ theta2 = gamma + min(theta2 - gamma, m_pi * 0.5);
+
+ /* Solving inner integral */
+ A += integrate_arc(theta1, theta2, gamma, n_proj_len);
+ }
+
+ A /= phi_step;
+
+ cavities = 1.0 - A;
+ edges = 0.0;
+}
diff --git a/source/blender/draw/engines/eevee/eevee_bloom.c b/source/blender/draw/engines/eevee/eevee_bloom.c
new file mode 100644
index 00000000000..1b015a51f6a
--- /dev/null
+++ b/source/blender/draw/engines/eevee/eevee_bloom.c
@@ -0,0 +1,337 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file eevee_bloom.c
+ * \ingroup draw_engine
+ *
+ * Eevee's bloom shader.
+ */
+
+#include "DRW_render.h"
+
+#include "BLI_dynstr.h"
+
+#include "BKE_global.h" /* for G.debug_value */
+
+#include "eevee_private.h"
+#include "GPU_extensions.h"
+#include "GPU_texture.h"
+
+static struct {
+ /* Bloom */
+ struct GPUShader *bloom_blit_sh[2];
+ struct GPUShader *bloom_downsample_sh[2];
+ struct GPUShader *bloom_upsample_sh[2];
+ struct GPUShader *bloom_resolve_sh[2];
+} e_data = {NULL}; /* Engine data */
+
+extern char datatoc_effect_bloom_frag_glsl[];
+
+static void eevee_create_shader_bloom(void)
+{
+ e_data.bloom_blit_sh[0] = DRW_shader_create_fullscreen(
+ datatoc_effect_bloom_frag_glsl,
+ "#define STEP_BLIT\n");
+ e_data.bloom_blit_sh[1] = DRW_shader_create_fullscreen(
+ datatoc_effect_bloom_frag_glsl,
+ "#define STEP_BLIT\n"
+ "#define HIGH_QUALITY\n");
+
+ e_data.bloom_downsample_sh[0] = DRW_shader_create_fullscreen(
+ datatoc_effect_bloom_frag_glsl,
+ "#define STEP_DOWNSAMPLE\n");
+ e_data.bloom_downsample_sh[1] = DRW_shader_create_fullscreen(
+ datatoc_effect_bloom_frag_glsl,
+ "#define STEP_DOWNSAMPLE\n"
+ "#define HIGH_QUALITY\n");
+
+ e_data.bloom_upsample_sh[0] = DRW_shader_create_fullscreen(
+ datatoc_effect_bloom_frag_glsl,
+ "#define STEP_UPSAMPLE\n");
+ e_data.bloom_upsample_sh[1] = DRW_shader_create_fullscreen(
+ datatoc_effect_bloom_frag_glsl,
+ "#define STEP_UPSAMPLE\n"
+ "#define HIGH_QUALITY\n");
+
+ e_data.bloom_resolve_sh[0] = DRW_shader_create_fullscreen(
+ datatoc_effect_bloom_frag_glsl,
+ "#define STEP_RESOLVE\n");
+ e_data.bloom_resolve_sh[1] = DRW_shader_create_fullscreen(
+ datatoc_effect_bloom_frag_glsl,
+ "#define STEP_RESOLVE\n"
+ "#define HIGH_QUALITY\n");
+}
+
+int EEVEE_bloom_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
+{
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_FramebufferList *fbl = vedata->fbl;
+ EEVEE_TextureList *txl = vedata->txl;
+ EEVEE_EffectsInfo *effects = stl->effects;
+
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ ViewLayer *view_layer = draw_ctx->view_layer;
+ IDProperty *props = BKE_view_layer_engine_evaluated_get(view_layer, COLLECTION_MODE_NONE, RE_engine_id_BLENDER_EEVEE);
+
+ if (BKE_collection_engine_property_value_get_bool(props, "bloom_enable")) {
+ const float *viewport_size = DRW_viewport_size_get();
+
+ /* Shaders */
+ if (!e_data.bloom_blit_sh[0]) {
+ eevee_create_shader_bloom();
+ }
+
+ /* Bloom */
+ int blitsize[2], texsize[2];
+
+ /* Blit Buffer */
+ effects->source_texel_size[0] = 1.0f / viewport_size[0];
+ effects->source_texel_size[1] = 1.0f / viewport_size[1];
+
+ blitsize[0] = (int)viewport_size[0];
+ blitsize[1] = (int)viewport_size[1];
+
+ effects->blit_texel_size[0] = 1.0f / (float)blitsize[0];
+ effects->blit_texel_size[1] = 1.0f / (float)blitsize[1];
+
+ DRWFboTexture tex_blit = {&txl->bloom_blit, DRW_TEX_RGB_11_11_10, DRW_TEX_FILTER};
+ DRW_framebuffer_init(&fbl->bloom_blit_fb, &draw_engine_eevee_type,
+ (int)blitsize[0], (int)blitsize[1],
+ &tex_blit, 1);
+
+ /* Parameters */
+ float threshold = BKE_collection_engine_property_value_get_float(props, "bloom_threshold");
+ float knee = BKE_collection_engine_property_value_get_float(props, "bloom_knee");
+ float intensity = BKE_collection_engine_property_value_get_float(props, "bloom_intensity");
+ const float *color = BKE_collection_engine_property_value_get_float_array(props, "bloom_color");
+ float radius = BKE_collection_engine_property_value_get_float(props, "bloom_radius");
+ effects->bloom_clamp = BKE_collection_engine_property_value_get_float(props, "bloom_clamp");
+
+ /* determine the iteration count */
+ const float minDim = (float)MIN2(blitsize[0], blitsize[1]);
+ const float maxIter = (radius - 8.0f) + log(minDim) / log(2);
+ const int maxIterInt = effects->bloom_iteration_ct = (int)maxIter;
+
+ CLAMP(effects->bloom_iteration_ct, 1, MAX_BLOOM_STEP);
+
+ effects->bloom_sample_scale = 0.5f + maxIter - (float)maxIterInt;
+ effects->bloom_curve_threshold[0] = threshold - knee;
+ effects->bloom_curve_threshold[1] = knee * 2.0f;
+ effects->bloom_curve_threshold[2] = 0.25f / max_ff(1e-5f, knee);
+ effects->bloom_curve_threshold[3] = threshold;
+
+ mul_v3_v3fl(effects->bloom_color, color, intensity);
+
+ /* Downsample buffers */
+ copy_v2_v2_int(texsize, blitsize);
+ for (int i = 0; i < effects->bloom_iteration_ct; ++i) {
+ texsize[0] /= 2; texsize[1] /= 2;
+
+ texsize[0] = MAX2(texsize[0], 2);
+ texsize[1] = MAX2(texsize[1], 2);
+
+ effects->downsamp_texel_size[i][0] = 1.0f / (float)texsize[0];
+ effects->downsamp_texel_size[i][1] = 1.0f / (float)texsize[1];
+
+ DRWFboTexture tex_bloom = {&txl->bloom_downsample[i], DRW_TEX_RGB_11_11_10, DRW_TEX_FILTER};
+ DRW_framebuffer_init(&fbl->bloom_down_fb[i], &draw_engine_eevee_type,
+ (int)texsize[0], (int)texsize[1],
+ &tex_bloom, 1);
+ }
+
+ /* Upsample buffers */
+ copy_v2_v2_int(texsize, blitsize);
+ for (int i = 0; i < effects->bloom_iteration_ct - 1; ++i) {
+ texsize[0] /= 2; texsize[1] /= 2;
+
+ texsize[0] = MAX2(texsize[0], 2);
+ texsize[1] = MAX2(texsize[1], 2);
+
+ DRWFboTexture tex_bloom = {&txl->bloom_upsample[i], DRW_TEX_RGB_11_11_10, DRW_TEX_FILTER};
+ DRW_framebuffer_init(&fbl->bloom_accum_fb[i], &draw_engine_eevee_type,
+ (int)texsize[0], (int)texsize[1],
+ &tex_bloom, 1);
+ }
+
+ return EFFECT_BLOOM | EFFECT_POST_BUFFER;
+ }
+
+ /* Cleanup to release memory */
+ DRW_TEXTURE_FREE_SAFE(txl->bloom_blit);
+ DRW_FRAMEBUFFER_FREE_SAFE(fbl->bloom_blit_fb);
+
+ /* Bloom and dof share this buffer. This
+ * tells dof to reconfigure it's framebuffer. */
+ if (txl->bloom_downsample[0] != NULL) {
+ DRW_FRAMEBUFFER_FREE_SAFE(fbl->dof_down_fb);
+ }
+
+ for (int i = 0; i < MAX_BLOOM_STEP - 1; ++i) {
+ DRW_TEXTURE_FREE_SAFE(txl->bloom_downsample[i]);
+ DRW_TEXTURE_FREE_SAFE(txl->bloom_upsample[i]);
+ DRW_FRAMEBUFFER_FREE_SAFE(fbl->bloom_down_fb[i]);
+ DRW_FRAMEBUFFER_FREE_SAFE(fbl->bloom_accum_fb[i]);
+ }
+
+ return 0;
+}
+
+static DRWShadingGroup *eevee_create_bloom_pass(
+ const char *name, EEVEE_EffectsInfo *effects, struct GPUShader *sh, DRWPass **pass, bool upsample)
+{
+ struct Gwn_Batch *quad = DRW_cache_fullscreen_quad_get();
+
+ *pass = DRW_pass_create(name, DRW_STATE_WRITE_COLOR);
+
+ DRWShadingGroup *grp = DRW_shgroup_create(sh, *pass);
+ DRW_shgroup_call_add(grp, quad, NULL);
+ DRW_shgroup_uniform_buffer(grp, "sourceBuffer", &effects->unf_source_buffer);
+ DRW_shgroup_uniform_vec2(grp, "sourceBufferTexelSize", effects->unf_source_texel_size, 1);
+ if (upsample) {
+ DRW_shgroup_uniform_buffer(grp, "baseBuffer", &effects->unf_base_buffer);
+ DRW_shgroup_uniform_float(grp, "sampleScale", &effects->bloom_sample_scale, 1);
+ }
+
+ return grp;
+}
+
+void EEVEE_bloom_cache_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
+{
+ EEVEE_PassList *psl = vedata->psl;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_EffectsInfo *effects = stl->effects;
+
+ if ((effects->enabled_effects & EFFECT_BLOOM) != 0) {
+ /** Bloom algorithm
+ *
+ * Overview :
+ * - Downsample the color buffer doing a small blur during each step.
+ * - Accumulate bloom color using previously downsampled color buffers
+ * and do an upsample blur for each new accumulated layer.
+ * - Finally add accumulation buffer onto the source color buffer.
+ *
+ * [1/1] is original copy resolution (can be half or quater res for performance)
+ *
+ * [DOWNSAMPLE CHAIN] [UPSAMPLE CHAIN]
+ *
+ * Source Color ── [Blit] ──> Bright Color Extract [1/1] Final Color
+ * | Λ
+ * [Downsample First] Source Color ─> + [Resolve]
+ * v |
+ * Color Downsampled [1/2] ────────────> + Accumulation Buffer [1/2]
+ * | Λ
+ * ─── ───
+ * Repeat Repeat
+ * ─── ───
+ * v |
+ * Color Downsampled [1/N-1] ──────────> + Accumulation Buffer [1/N-1]
+ * | Λ
+ * [Downsample] [Upsample]
+ * v |
+ * Color Downsampled [1/N] ─────────────────────────┘
+ **/
+ DRWShadingGroup *grp;
+ const bool use_highres = true;
+ const bool use_antiflicker = true;
+ eevee_create_bloom_pass("Bloom Downsample First", effects, e_data.bloom_downsample_sh[use_antiflicker], &psl->bloom_downsample_first, false);
+ eevee_create_bloom_pass("Bloom Downsample", effects, e_data.bloom_downsample_sh[0], &psl->bloom_downsample, false);
+ eevee_create_bloom_pass("Bloom Upsample", effects, e_data.bloom_upsample_sh[use_highres], &psl->bloom_upsample, true);
+
+ grp = eevee_create_bloom_pass("Bloom Blit", effects, e_data.bloom_blit_sh[use_antiflicker], &psl->bloom_blit, false);
+ DRW_shgroup_uniform_vec4(grp, "curveThreshold", effects->bloom_curve_threshold, 1);
+ DRW_shgroup_uniform_float(grp, "clampIntensity", &effects->bloom_clamp, 1);
+
+ grp = eevee_create_bloom_pass("Bloom Resolve", effects, e_data.bloom_resolve_sh[use_highres], &psl->bloom_resolve, true);
+ DRW_shgroup_uniform_vec3(grp, "bloomColor", effects->bloom_color, 1);
+ }
+}
+
+void EEVEE_bloom_draw(EEVEE_Data *vedata)
+{
+ EEVEE_PassList *psl = vedata->psl;
+ EEVEE_TextureList *txl = vedata->txl;
+ EEVEE_FramebufferList *fbl = vedata->fbl;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_EffectsInfo *effects = stl->effects;
+
+ /* Bloom */
+ if ((effects->enabled_effects & EFFECT_BLOOM) != 0) {
+ struct GPUTexture *last;
+
+ /* Extract bright pixels */
+ copy_v2_v2(effects->unf_source_texel_size, effects->source_texel_size);
+ effects->unf_source_buffer = effects->source_buffer;
+
+ DRW_framebuffer_bind(fbl->bloom_blit_fb);
+ DRW_draw_pass(psl->bloom_blit);
+
+ /* Downsample */
+ copy_v2_v2(effects->unf_source_texel_size, effects->blit_texel_size);
+ effects->unf_source_buffer = txl->bloom_blit;
+
+ DRW_framebuffer_bind(fbl->bloom_down_fb[0]);
+ DRW_draw_pass(psl->bloom_downsample_first);
+
+ last = txl->bloom_downsample[0];
+
+ for (int i = 1; i < effects->bloom_iteration_ct; ++i) {
+ copy_v2_v2(effects->unf_source_texel_size, effects->downsamp_texel_size[i - 1]);
+ effects->unf_source_buffer = last;
+
+ DRW_framebuffer_bind(fbl->bloom_down_fb[i]);
+ DRW_draw_pass(psl->bloom_downsample);
+
+ /* Used in next loop */
+ last = txl->bloom_downsample[i];
+ }
+
+ /* Upsample and accumulate */
+ for (int i = effects->bloom_iteration_ct - 2; i >= 0; --i) {
+ copy_v2_v2(effects->unf_source_texel_size, effects->downsamp_texel_size[i]);
+ effects->unf_source_buffer = txl->bloom_downsample[i];
+ effects->unf_base_buffer = last;
+
+ DRW_framebuffer_bind(fbl->bloom_accum_fb[i]);
+ DRW_draw_pass(psl->bloom_upsample);
+
+ last = txl->bloom_upsample[i];
+ }
+
+ /* Resolve */
+ copy_v2_v2(effects->unf_source_texel_size, effects->downsamp_texel_size[0]);
+ effects->unf_source_buffer = last;
+ effects->unf_base_buffer = effects->source_buffer;
+
+ DRW_framebuffer_bind(effects->target_buffer);
+ DRW_draw_pass(psl->bloom_resolve);
+ SWAP_BUFFERS();
+ }
+}
+
+void EEVEE_bloom_free(void)
+{
+ for (int i = 0; i < 2; ++i) {
+ DRW_SHADER_FREE_SAFE(e_data.bloom_blit_sh[i]);
+ DRW_SHADER_FREE_SAFE(e_data.bloom_downsample_sh[i]);
+ DRW_SHADER_FREE_SAFE(e_data.bloom_upsample_sh[i]);
+ DRW_SHADER_FREE_SAFE(e_data.bloom_resolve_sh[i]);
+ }
+}
diff --git a/source/blender/draw/engines/eevee/eevee_data.c b/source/blender/draw/engines/eevee/eevee_data.c
new file mode 100644
index 00000000000..449668d8590
--- /dev/null
+++ b/source/blender/draw/engines/eevee/eevee_data.c
@@ -0,0 +1,177 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file eevee_data.c
+ * \ingroup draw_engine
+ *
+ * All specific data handler for Objects, Lights, ViewLayers, ...
+ */
+
+#include "DRW_render.h"
+
+#include "eevee_private.h"
+
+static void eevee_view_layer_data_free(void *storage)
+{
+ EEVEE_ViewLayerData *sldata = (EEVEE_ViewLayerData *)storage;
+
+ /* Lights */
+ MEM_SAFE_FREE(sldata->lamps);
+ DRW_UBO_FREE_SAFE(sldata->light_ubo);
+ DRW_UBO_FREE_SAFE(sldata->shadow_ubo);
+ DRW_UBO_FREE_SAFE(sldata->shadow_render_ubo);
+ DRW_FRAMEBUFFER_FREE_SAFE(sldata->shadow_target_fb);
+ DRW_FRAMEBUFFER_FREE_SAFE(sldata->shadow_store_fb);
+ DRW_TEXTURE_FREE_SAFE(sldata->shadow_cube_target);
+ DRW_TEXTURE_FREE_SAFE(sldata->shadow_cube_blur);
+ DRW_TEXTURE_FREE_SAFE(sldata->shadow_cascade_target);
+ DRW_TEXTURE_FREE_SAFE(sldata->shadow_cascade_blur);
+ DRW_TEXTURE_FREE_SAFE(sldata->shadow_pool);
+ MEM_SAFE_FREE(sldata->shcasters_buffers[0].shadow_casters);
+ MEM_SAFE_FREE(sldata->shcasters_buffers[0].flags);
+ MEM_SAFE_FREE(sldata->shcasters_buffers[1].shadow_casters);
+ MEM_SAFE_FREE(sldata->shcasters_buffers[1].flags);
+
+ /* Probes */
+ MEM_SAFE_FREE(sldata->probes);
+ DRW_UBO_FREE_SAFE(sldata->probe_ubo);
+ DRW_UBO_FREE_SAFE(sldata->grid_ubo);
+ DRW_UBO_FREE_SAFE(sldata->planar_ubo);
+ DRW_UBO_FREE_SAFE(sldata->common_ubo);
+ DRW_FRAMEBUFFER_FREE_SAFE(sldata->probe_fb);
+ DRW_FRAMEBUFFER_FREE_SAFE(sldata->probe_filter_fb);
+ DRW_TEXTURE_FREE_SAFE(sldata->probe_rt);
+ DRW_TEXTURE_FREE_SAFE(sldata->probe_depth_rt);
+ DRW_TEXTURE_FREE_SAFE(sldata->probe_pool);
+ DRW_TEXTURE_FREE_SAFE(sldata->irradiance_pool);
+ DRW_TEXTURE_FREE_SAFE(sldata->irradiance_rt);
+}
+
+EEVEE_ViewLayerData *EEVEE_view_layer_data_get(void)
+{
+ return (EEVEE_ViewLayerData *)DRW_view_layer_engine_data_get(
+ &draw_engine_eevee_type);
+}
+
+EEVEE_ViewLayerData *EEVEE_view_layer_data_ensure(void)
+{
+ EEVEE_ViewLayerData **sldata = (EEVEE_ViewLayerData **)DRW_view_layer_engine_data_ensure(
+ &draw_engine_eevee_type, &eevee_view_layer_data_free);
+
+ if (*sldata == NULL) {
+ *sldata = MEM_callocN(sizeof(**sldata), "EEVEE_ViewLayerData");
+ }
+
+ return *sldata;
+}
+
+/* Object data. */
+
+static void eevee_object_data_init(ObjectEngineData *engine_data)
+{
+ EEVEE_ObjectEngineData *eevee_data = (EEVEE_ObjectEngineData *)engine_data;
+ eevee_data->shadow_caster_id = -1;
+}
+
+EEVEE_ObjectEngineData *EEVEE_object_data_get(Object *ob)
+{
+ if (ELEM(ob->type, OB_LIGHTPROBE, OB_LAMP)) {
+ return NULL;
+ }
+ return (EEVEE_ObjectEngineData *)DRW_object_engine_data_get(
+ ob, &draw_engine_eevee_type);
+}
+
+EEVEE_ObjectEngineData *EEVEE_object_data_ensure(Object *ob)
+{
+ BLI_assert(!ELEM(ob->type, OB_LIGHTPROBE, OB_LAMP));
+ return (EEVEE_ObjectEngineData *)DRW_object_engine_data_ensure(
+ ob,
+ &draw_engine_eevee_type,
+ sizeof(EEVEE_ObjectEngineData),
+ eevee_object_data_init,
+ NULL);
+}
+
+/* Light probe data. */
+
+static void eevee_lightprobe_data_init(ObjectEngineData *engine_data)
+{
+ EEVEE_LightProbeEngineData *ped = (EEVEE_LightProbeEngineData *)engine_data;
+ ped->need_full_update = true;
+ ped->need_update = true;
+}
+
+static void eevee_lightprobe_data_free(ObjectEngineData *engine_data)
+{
+ EEVEE_LightProbeEngineData *ped = (EEVEE_LightProbeEngineData *)engine_data;
+
+ BLI_freelistN(&ped->captured_object_list);
+}
+
+EEVEE_LightProbeEngineData *EEVEE_lightprobe_data_get(Object *ob)
+{
+ if (ob->type != OB_LIGHTPROBE) {
+ return NULL;
+ }
+ return (EEVEE_LightProbeEngineData *)DRW_object_engine_data_get(
+ ob, &draw_engine_eevee_type);
+}
+
+EEVEE_LightProbeEngineData *EEVEE_lightprobe_data_ensure(Object *ob)
+{
+ BLI_assert(ob->type == OB_LIGHTPROBE);
+ return (EEVEE_LightProbeEngineData *)DRW_object_engine_data_ensure(
+ ob,
+ &draw_engine_eevee_type,
+ sizeof(EEVEE_LightProbeEngineData),
+ eevee_lightprobe_data_init,
+ eevee_lightprobe_data_free);
+}
+
+/* Lamp data. */
+
+static void eevee_lamp_data_init(ObjectEngineData *engine_data)
+{
+ EEVEE_LampEngineData *led = (EEVEE_LampEngineData *)engine_data;
+ led->need_update = true;
+ led->prev_cube_shadow_id = -1;
+}
+
+EEVEE_LampEngineData *EEVEE_lamp_data_get(Object *ob)
+{
+ if (ob->type != OB_LAMP) {
+ return NULL;
+ }
+ return (EEVEE_LampEngineData *)DRW_object_engine_data_get(
+ ob, &draw_engine_eevee_type);
+}
+
+EEVEE_LampEngineData *EEVEE_lamp_data_ensure(Object *ob)
+{
+ BLI_assert(ob->type == OB_LAMP);
+ return (EEVEE_LampEngineData *)DRW_object_engine_data_ensure(
+ ob,
+ &draw_engine_eevee_type,
+ sizeof(EEVEE_LampEngineData),
+ eevee_lamp_data_init,
+ NULL);
+}
diff --git a/source/blender/draw/engines/eevee/eevee_depth_of_field.c b/source/blender/draw/engines/eevee/eevee_depth_of_field.c
new file mode 100644
index 00000000000..dcd45e27337
--- /dev/null
+++ b/source/blender/draw/engines/eevee/eevee_depth_of_field.c
@@ -0,0 +1,297 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file eevee_depth_of_field.c
+ * \ingroup draw_engine
+ *
+ * Depth of field post process effect.
+ */
+
+#include "DRW_render.h"
+
+#include "BLI_dynstr.h"
+#include "BLI_rand.h"
+
+#include "DNA_anim_types.h"
+#include "DNA_camera_types.h"
+#include "DNA_object_force_types.h"
+#include "DNA_screen_types.h"
+#include "DNA_view3d_types.h"
+#include "DNA_world_types.h"
+
+#include "BKE_global.h" /* for G.debug_value */
+#include "BKE_camera.h"
+#include "BKE_mesh.h"
+#include "BKE_object.h"
+#include "BKE_animsys.h"
+#include "BKE_screen.h"
+
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_query.h"
+
+#include "eevee_private.h"
+#include "GPU_extensions.h"
+#include "GPU_framebuffer.h"
+#include "GPU_texture.h"
+
+#include "ED_screen.h"
+
+static struct {
+ /* Depth Of Field */
+ struct GPUShader *dof_downsample_sh;
+ struct GPUShader *dof_scatter_sh;
+ struct GPUShader *dof_resolve_sh;
+} e_data = {NULL}; /* Engine data */
+
+extern char datatoc_effect_dof_vert_glsl[];
+extern char datatoc_effect_dof_geom_glsl[];
+extern char datatoc_effect_dof_frag_glsl[];
+
+static void eevee_create_shader_depth_of_field(void)
+{
+ e_data.dof_downsample_sh = DRW_shader_create(datatoc_effect_dof_vert_glsl, NULL,
+ datatoc_effect_dof_frag_glsl, "#define STEP_DOWNSAMPLE\n");
+ e_data.dof_scatter_sh = DRW_shader_create(datatoc_effect_dof_vert_glsl, NULL,
+ datatoc_effect_dof_frag_glsl, "#define STEP_SCATTER\n");
+ e_data.dof_resolve_sh = DRW_shader_create(datatoc_effect_dof_vert_glsl, NULL,
+ datatoc_effect_dof_frag_glsl, "#define STEP_RESOLVE\n");
+}
+
+int EEVEE_depth_of_field_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata, Object *camera)
+{
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_FramebufferList *fbl = vedata->fbl;
+ EEVEE_TextureList *txl = vedata->txl;
+ EEVEE_EffectsInfo *effects = stl->effects;
+
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ ViewLayer *view_layer = draw_ctx->view_layer;
+ IDProperty *props = BKE_view_layer_engine_evaluated_get(view_layer, COLLECTION_MODE_NONE, RE_engine_id_BLENDER_EEVEE);
+
+ if (BKE_collection_engine_property_value_get_bool(props, "dof_enable")) {
+ Scene *scene = draw_ctx->scene;
+ RegionView3D *rv3d = draw_ctx->rv3d;
+
+ if (!e_data.dof_downsample_sh) {
+ eevee_create_shader_depth_of_field();
+ }
+
+ if (camera) {
+ const float *viewport_size = DRW_viewport_size_get();
+ Camera *cam = (Camera *)camera->data;
+
+ /* Retreive Near and Far distance */
+ effects->dof_near_far[0] = -cam->clipsta;
+ effects->dof_near_far[1] = -cam->clipend;
+
+ int buffer_size[2] = {(int)viewport_size[0] / 2, (int)viewport_size[1] / 2};
+
+ /* Reuse buffer from Bloom if available */
+ /* WATCH IT : must have the same size */
+ struct GPUTexture **dof_down_near;
+
+ if ((effects->enabled_effects & EFFECT_BLOOM) != 0) {
+ dof_down_near = &txl->bloom_downsample[0];
+ }
+ else {
+ dof_down_near = &txl->dof_down_near;
+ }
+
+ /* Setup buffers */
+ DRWFboTexture tex_down[3] = {
+ {dof_down_near, DRW_TEX_RGB_11_11_10, DRW_TEX_FILTER}, /* filter to not interfeer with bloom */
+ {&txl->dof_down_far, DRW_TEX_RGB_11_11_10, 0},
+ {&txl->dof_coc, DRW_TEX_RG_16, 0},
+ };
+ DRW_framebuffer_init(
+ &fbl->dof_down_fb, &draw_engine_eevee_type,
+ buffer_size[0], buffer_size[1], tex_down, 3);
+
+ /* Go full 32bits for rendering and reduce the color artifacts. */
+ DRWTextureFormat fb_format = DRW_state_is_image_render() ? DRW_TEX_RGBA_32 : DRW_TEX_RGBA_16;
+
+ DRWFboTexture tex_scatter_far = {&txl->dof_far_blur, fb_format, DRW_TEX_FILTER};
+ DRW_framebuffer_init(
+ &fbl->dof_scatter_far_fb, &draw_engine_eevee_type,
+ buffer_size[0], buffer_size[1], &tex_scatter_far, 1);
+
+ DRWFboTexture tex_scatter_near = {&txl->dof_near_blur, fb_format, DRW_TEX_FILTER};
+ DRW_framebuffer_init(
+ &fbl->dof_scatter_near_fb, &draw_engine_eevee_type,
+ buffer_size[0], buffer_size[1], &tex_scatter_near, 1);
+
+ /* Parameters */
+ /* TODO UI Options */
+ float fstop = cam->gpu_dof.fstop;
+ float blades = cam->gpu_dof.num_blades;
+ float rotation = cam->gpu_dof.rotation;
+ float ratio = 1.0f / cam->gpu_dof.ratio;
+ float sensor = BKE_camera_sensor_size(cam->sensor_fit, cam->sensor_x, cam->sensor_y);
+ float focus_dist = BKE_camera_object_dof_distance(camera);
+ float focal_len = cam->lens;
+
+ UNUSED_VARS(rotation, ratio);
+
+ /* this is factor that converts to the scene scale. focal length and sensor are expressed in mm
+ * unit.scale_length is how many meters per blender unit we have. We want to convert to blender units though
+ * because the shader reads coordinates in world space, which is in blender units.
+ * Note however that focus_distance is already in blender units and shall not be scaled here (see T48157). */
+ float scale = (scene->unit.system) ? scene->unit.scale_length : 1.0f;
+ float scale_camera = 0.001f / scale;
+ /* we want radius here for the aperture number */
+ float aperture = 0.5f * scale_camera * focal_len / fstop;
+ float focal_len_scaled = scale_camera * focal_len;
+ float sensor_scaled = scale_camera * sensor;
+
+ if (rv3d != NULL) {
+ sensor_scaled *= rv3d->viewcamtexcofac[0];
+ }
+
+ effects->dof_params[0] = aperture * fabsf(focal_len_scaled / (focus_dist - focal_len_scaled));
+ effects->dof_params[1] = -focus_dist;
+ effects->dof_params[2] = viewport_size[0] / sensor_scaled;
+ effects->dof_bokeh[0] = blades;
+ effects->dof_bokeh[1] = rotation;
+ effects->dof_bokeh[2] = ratio;
+ effects->dof_bokeh[3] = BKE_collection_engine_property_value_get_float(props, "bokeh_max_size");
+
+ return EFFECT_DOF | EFFECT_POST_BUFFER;
+ }
+ }
+
+ /* Cleanup to release memory */
+ DRW_TEXTURE_FREE_SAFE(txl->dof_down_near);
+ DRW_TEXTURE_FREE_SAFE(txl->dof_down_far);
+ DRW_TEXTURE_FREE_SAFE(txl->dof_coc);
+ DRW_TEXTURE_FREE_SAFE(txl->dof_far_blur);
+ DRW_TEXTURE_FREE_SAFE(txl->dof_near_blur);
+ DRW_FRAMEBUFFER_FREE_SAFE(fbl->dof_down_fb);
+ DRW_FRAMEBUFFER_FREE_SAFE(fbl->dof_scatter_far_fb);
+ DRW_FRAMEBUFFER_FREE_SAFE(fbl->dof_scatter_near_fb);
+
+ return 0;
+}
+
+void EEVEE_depth_of_field_cache_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
+{
+ EEVEE_PassList *psl = vedata->psl;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_TextureList *txl = vedata->txl;
+ EEVEE_EffectsInfo *effects = stl->effects;
+ DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
+
+ if ((effects->enabled_effects & EFFECT_DOF) != 0) {
+ /** Depth of Field algorithm
+ *
+ * Overview :
+ * - Downsample the color buffer into 2 buffers weighted with
+ * CoC values. Also output CoC into a texture.
+ * - Shoot quads for every pixel and expand it depending on the CoC.
+ * Do one pass for near Dof and one pass for far Dof.
+ * - Finally composite the 2 blurred buffers with the original render.
+ **/
+ DRWShadingGroup *grp;
+ struct Gwn_Batch *quad = DRW_cache_fullscreen_quad_get();
+
+ psl->dof_down = DRW_pass_create("DoF Downsample", DRW_STATE_WRITE_COLOR);
+
+ grp = DRW_shgroup_create(e_data.dof_downsample_sh, psl->dof_down);
+ DRW_shgroup_uniform_buffer(grp, "colorBuffer", &effects->source_buffer);
+ DRW_shgroup_uniform_buffer(grp, "depthBuffer", &dtxl->depth);
+ DRW_shgroup_uniform_vec2(grp, "nearFar", effects->dof_near_far, 1);
+ DRW_shgroup_uniform_vec3(grp, "dofParams", effects->dof_params, 1);
+ DRW_shgroup_call_add(grp, quad, NULL);
+
+ psl->dof_scatter = DRW_pass_create("DoF Scatter", DRW_STATE_WRITE_COLOR | DRW_STATE_ADDITIVE_FULL);
+
+ /* This create an empty batch of N triangles to be positioned
+ * by the vertex shader 0.4ms against 6ms with instancing */
+ const float *viewport_size = DRW_viewport_size_get();
+ const int sprite_ct = ((int)viewport_size[0] / 2) * ((int)viewport_size[1] / 2); /* brackets matters */
+ grp = DRW_shgroup_empty_tri_batch_create(e_data.dof_scatter_sh, psl->dof_scatter, sprite_ct);
+
+ DRW_shgroup_uniform_buffer(grp, "colorBuffer", &effects->unf_source_buffer);
+ DRW_shgroup_uniform_buffer(grp, "cocBuffer", &txl->dof_coc);
+ DRW_shgroup_uniform_vec2(grp, "layerSelection", effects->dof_layer_select, 1);
+ DRW_shgroup_uniform_vec4(grp, "bokehParams", effects->dof_bokeh, 1);
+
+ psl->dof_resolve = DRW_pass_create("DoF Resolve", DRW_STATE_WRITE_COLOR);
+
+ grp = DRW_shgroup_create(e_data.dof_resolve_sh, psl->dof_resolve);
+ DRW_shgroup_uniform_buffer(grp, "colorBuffer", &effects->source_buffer);
+ DRW_shgroup_uniform_buffer(grp, "nearBuffer", &txl->dof_near_blur);
+ DRW_shgroup_uniform_buffer(grp, "farBuffer", &txl->dof_far_blur);
+ DRW_shgroup_uniform_buffer(grp, "depthBuffer", &dtxl->depth);
+ DRW_shgroup_uniform_vec2(grp, "nearFar", effects->dof_near_far, 1);
+ DRW_shgroup_uniform_vec3(grp, "dofParams", effects->dof_params, 1);
+ DRW_shgroup_call_add(grp, quad, NULL);
+ }
+}
+
+void EEVEE_depth_of_field_draw(EEVEE_Data *vedata)
+{
+ EEVEE_PassList *psl = vedata->psl;
+ EEVEE_TextureList *txl = vedata->txl;
+ EEVEE_FramebufferList *fbl = vedata->fbl;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_EffectsInfo *effects = stl->effects;
+
+ /* Depth Of Field */
+ if ((effects->enabled_effects & EFFECT_DOF) != 0) {
+ float clear_col[4] = {0.0f, 0.0f, 0.0f, 0.0f};
+
+ /* Downsample */
+ DRW_framebuffer_bind(fbl->dof_down_fb);
+ DRW_draw_pass(psl->dof_down);
+
+ /* Scatter Far */
+ effects->unf_source_buffer = txl->dof_down_far;
+ copy_v2_fl2(effects->dof_layer_select, 0.0f, 1.0f);
+ DRW_framebuffer_bind(fbl->dof_scatter_far_fb);
+ DRW_framebuffer_clear(true, false, false, clear_col, 0.0f);
+ DRW_draw_pass(psl->dof_scatter);
+
+ /* Scatter Near */
+ if ((effects->enabled_effects & EFFECT_BLOOM) != 0) {
+ /* Reuse bloom half res buffer */
+ effects->unf_source_buffer = txl->bloom_downsample[0];
+ }
+ else {
+ effects->unf_source_buffer = txl->dof_down_near;
+ }
+ copy_v2_fl2(effects->dof_layer_select, 1.0f, 0.0f);
+ DRW_framebuffer_bind(fbl->dof_scatter_near_fb);
+ DRW_framebuffer_clear(true, false, false, clear_col, 0.0f);
+ DRW_draw_pass(psl->dof_scatter);
+
+ /* Resolve */
+ DRW_framebuffer_bind(effects->target_buffer);
+ DRW_draw_pass(psl->dof_resolve);
+ SWAP_BUFFERS();
+ }
+}
+
+void EEVEE_depth_of_field_free(void)
+{
+ DRW_SHADER_FREE_SAFE(e_data.dof_downsample_sh);
+ DRW_SHADER_FREE_SAFE(e_data.dof_scatter_sh);
+ DRW_SHADER_FREE_SAFE(e_data.dof_resolve_sh);
+}
diff --git a/source/blender/draw/engines/eevee/eevee_effects.c b/source/blender/draw/engines/eevee/eevee_effects.c
new file mode 100644
index 00000000000..be39e06bac9
--- /dev/null
+++ b/source/blender/draw/engines/eevee/eevee_effects.c
@@ -0,0 +1,473 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file eevee_effects.c
+ * \ingroup draw_engine
+ *
+ * Gather all screen space effects technique such as Bloom, Motion Blur, DoF, SSAO, SSR, ...
+ */
+
+#include "DRW_render.h"
+
+#include "eevee_private.h"
+#include "GPU_texture.h"
+#include "GPU_extensions.h"
+
+static struct {
+ /* Downsample Depth */
+ struct GPUShader *minz_downlevel_sh;
+ struct GPUShader *maxz_downlevel_sh;
+ struct GPUShader *minz_downdepth_sh;
+ struct GPUShader *maxz_downdepth_sh;
+ struct GPUShader *minz_downdepth_layer_sh;
+ struct GPUShader *maxz_downdepth_layer_sh;
+ struct GPUShader *minz_copydepth_sh;
+ struct GPUShader *maxz_copydepth_sh;
+
+ /* Simple Downsample */
+ struct GPUShader *downsample_sh;
+ struct GPUShader *downsample_cube_sh;
+
+ /* Theses are just references, not actually allocated */
+ struct GPUTexture *depth_src;
+ struct GPUTexture *color_src;
+
+ int depth_src_layer;
+ float cube_texel_size;
+} e_data = {NULL}; /* Engine data */
+
+extern char datatoc_effect_minmaxz_frag_glsl[];
+extern char datatoc_effect_downsample_frag_glsl[];
+extern char datatoc_effect_downsample_cube_frag_glsl[];
+extern char datatoc_lightprobe_vert_glsl[];
+extern char datatoc_lightprobe_geom_glsl[];
+
+static void eevee_create_shader_downsample(void)
+{
+ e_data.downsample_sh = DRW_shader_create_fullscreen(datatoc_effect_downsample_frag_glsl, NULL);
+ e_data.downsample_cube_sh = DRW_shader_create(
+ datatoc_lightprobe_vert_glsl,
+ datatoc_lightprobe_geom_glsl,
+ datatoc_effect_downsample_cube_frag_glsl, NULL);
+
+ e_data.minz_downlevel_sh = DRW_shader_create_fullscreen(
+ datatoc_effect_minmaxz_frag_glsl,
+ "#define MIN_PASS\n");
+ e_data.maxz_downlevel_sh = DRW_shader_create_fullscreen(
+ datatoc_effect_minmaxz_frag_glsl,
+ "#define MAX_PASS\n");
+ e_data.minz_downdepth_sh = DRW_shader_create_fullscreen(
+ datatoc_effect_minmaxz_frag_glsl,
+ "#define MIN_PASS\n");
+ e_data.maxz_downdepth_sh = DRW_shader_create_fullscreen(
+ datatoc_effect_minmaxz_frag_glsl,
+ "#define MAX_PASS\n");
+ e_data.minz_downdepth_layer_sh = DRW_shader_create_fullscreen(
+ datatoc_effect_minmaxz_frag_glsl,
+ "#define MIN_PASS\n"
+ "#define LAYERED\n");
+ e_data.maxz_downdepth_layer_sh = DRW_shader_create_fullscreen(
+ datatoc_effect_minmaxz_frag_glsl,
+ "#define MAX_PASS\n"
+ "#define LAYERED\n");
+ e_data.minz_copydepth_sh = DRW_shader_create_fullscreen(
+ datatoc_effect_minmaxz_frag_glsl,
+ "#define MIN_PASS\n"
+ "#define COPY_DEPTH\n");
+ e_data.maxz_copydepth_sh = DRW_shader_create_fullscreen(
+ datatoc_effect_minmaxz_frag_glsl,
+ "#define MAX_PASS\n"
+ "#define COPY_DEPTH\n");
+}
+
+void EEVEE_effects_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, Object *camera)
+{
+ EEVEE_CommonUniformBuffer *common_data = &sldata->common_data;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_FramebufferList *fbl = vedata->fbl;
+ EEVEE_TextureList *txl = vedata->txl;
+ EEVEE_EffectsInfo *effects;
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ ViewLayer *view_layer = draw_ctx->view_layer;
+
+ const float *viewport_size = DRW_viewport_size_get();
+ /* Shaders */
+ if (!e_data.downsample_sh) {
+ eevee_create_shader_downsample();
+ }
+
+ if (!stl->effects) {
+ stl->effects = MEM_callocN(sizeof(EEVEE_EffectsInfo), "EEVEE_EffectsInfo");
+ }
+
+ effects = stl->effects;
+
+ effects->enabled_effects = 0;
+ effects->enabled_effects |= EEVEE_motion_blur_init(sldata, vedata, camera);
+ effects->enabled_effects |= EEVEE_bloom_init(sldata, vedata);
+ effects->enabled_effects |= EEVEE_depth_of_field_init(sldata, vedata, camera);
+ effects->enabled_effects |= EEVEE_temporal_sampling_init(sldata, vedata);
+ effects->enabled_effects |= EEVEE_occlusion_init(sldata, vedata);
+ effects->enabled_effects |= EEVEE_subsurface_init(sldata, vedata);
+ effects->enabled_effects |= EEVEE_screen_raytrace_init(sldata, vedata);
+ effects->enabled_effects |= EEVEE_volumes_init(sldata, vedata);
+
+ /* Force normal buffer creation. */
+ if (DRW_state_is_image_render() &&
+ (view_layer->passflag & SCE_PASS_NORMAL) != 0)
+ {
+ effects->enabled_effects |= EFFECT_NORMAL_BUFFER;
+ }
+
+ /**
+ * Ping Pong buffer
+ */
+ if ((effects->enabled_effects & EFFECT_POST_BUFFER) != 0) {
+ DRWFboTexture tex = {&txl->color_post, DRW_TEX_RGBA_16, DRW_TEX_FILTER | DRW_TEX_MIPMAP};
+ DRW_framebuffer_init(&fbl->effect_fb, &draw_engine_eevee_type,
+ (int)viewport_size[0], (int)viewport_size[1],
+ &tex, 1);
+ }
+ else {
+ /* Cleanup to release memory */
+ DRW_TEXTURE_FREE_SAFE(txl->color_post);
+ DRW_FRAMEBUFFER_FREE_SAFE(fbl->effect_fb);
+ }
+
+ /**
+ * MinMax Pyramid
+ */
+ DRWFboTexture texmax = {&txl->maxzbuffer, DRW_TEX_DEPTH_24, DRW_TEX_MIPMAP};
+
+ if (GPU_type_matches(GPU_DEVICE_INTEL, GPU_OS_ANY, GPU_DRIVER_ANY)) {
+ /* Intel gpu seems to have problem rendering to only depth format */
+ texmax.format = DRW_TEX_R_32;
+ }
+
+ DRW_framebuffer_init(&fbl->downsample_fb, &draw_engine_eevee_type,
+ max_ii((int)viewport_size[0] / 2, 1), max_ii((int)viewport_size[1] / 2, 1),
+ &texmax, 1);
+
+
+ /**
+ * Compute Mipmap texel alignement.
+ */
+ for (int i = 0; i < 10; ++i) {
+ float mip_size[2] = {viewport_size[0], viewport_size[1]};
+ for (int j = 0; j < i; ++j) {
+ mip_size[0] = floorf(fmaxf(1.0f, mip_size[0] / 2.0f));
+ mip_size[1] = floorf(fmaxf(1.0f, mip_size[1] / 2.0f));
+ }
+ common_data->mip_ratio[i][0] = viewport_size[0] / (mip_size[0] * powf(2.0f, floorf(log2f(floorf(viewport_size[0] / mip_size[0])))));
+ common_data->mip_ratio[i][1] = viewport_size[1] / (mip_size[1] * powf(2.0f, floorf(log2f(floorf(viewport_size[1] / mip_size[1])))));
+ }
+
+
+ /**
+ * Normal buffer for deferred passes.
+ */
+ if ((effects->enabled_effects & EFFECT_NORMAL_BUFFER) != 0) {
+ if (txl->ssr_normal_input == NULL) {
+ DRWTextureFormat nor_format = DRW_TEX_RG_16;
+ txl->ssr_normal_input = DRW_texture_create_2D((int)viewport_size[0], (int)viewport_size[1], nor_format, 0, NULL);
+ }
+
+ /* Reattach textures to the right buffer (because we are alternating between buffers) */
+ /* TODO multiple FBO per texture!!!! */
+ DRW_framebuffer_texture_detach(txl->ssr_normal_input);
+ DRW_framebuffer_texture_attach(fbl->main, txl->ssr_normal_input, 1, 0);
+ }
+ else {
+ /* Cleanup to release memory */
+ DRW_TEXTURE_FREE_SAFE(txl->ssr_normal_input);
+ }
+
+ /**
+ * Setup double buffer so we can access last frame as it was before post processes.
+ */
+ if ((effects->enabled_effects & EFFECT_DOUBLE_BUFFER) != 0) {
+ DRWFboTexture tex_double_buffer = {&txl->color_double_buffer, DRW_TEX_RGBA_16, DRW_TEX_FILTER | DRW_TEX_MIPMAP};
+ DRW_framebuffer_init(&fbl->double_buffer, &draw_engine_eevee_type,
+ (int)viewport_size[0], (int)viewport_size[1],
+ &tex_double_buffer, 1);
+ }
+ else {
+ /* Cleanup to release memory */
+ DRW_TEXTURE_FREE_SAFE(txl->color_double_buffer);
+ DRW_FRAMEBUFFER_FREE_SAFE(fbl->double_buffer);
+ }
+}
+
+void EEVEE_effects_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
+{
+ EEVEE_PassList *psl = vedata->psl;
+ EEVEE_TextureList *txl = vedata->txl;
+ int downsample_write = DRW_STATE_WRITE_DEPTH;
+
+ /* Intel gpu seems to have problem rendering to only depth format.
+ * Use color texture instead. */
+ if (GPU_type_matches(GPU_DEVICE_INTEL, GPU_OS_ANY, GPU_DRIVER_ANY)) {
+ downsample_write = DRW_STATE_WRITE_COLOR;
+ }
+
+ struct Gwn_Batch *quad = DRW_cache_fullscreen_quad_get();
+
+ {
+ psl->color_downsample_ps = DRW_pass_create("Downsample", DRW_STATE_WRITE_COLOR);
+ DRWShadingGroup *grp = DRW_shgroup_create(e_data.downsample_sh, psl->color_downsample_ps);
+ DRW_shgroup_uniform_buffer(grp, "source", &e_data.color_src);
+ DRW_shgroup_uniform_float(grp, "fireflyFactor", &sldata->common_data.ssr_firefly_fac, 1);
+ DRW_shgroup_call_add(grp, quad, NULL);
+ }
+
+ {
+ static int zero = 0;
+ psl->color_downsample_cube_ps = DRW_pass_create("Downsample Cube", DRW_STATE_WRITE_COLOR);
+ DRWShadingGroup *grp = DRW_shgroup_instance_create(e_data.downsample_cube_sh, psl->color_downsample_cube_ps, quad);
+ DRW_shgroup_uniform_buffer(grp, "source", &e_data.color_src);
+ DRW_shgroup_uniform_float(grp, "texelSize", &e_data.cube_texel_size, 1);
+ DRW_shgroup_uniform_int(grp, "Layer", &zero, 1);
+ DRW_shgroup_set_instance_count(grp, 6);
+ }
+
+ {
+ /* Perform min/max downsample */
+ DRWShadingGroup *grp;
+
+#if 0 /* Not used for now */
+ psl->minz_downlevel_ps = DRW_pass_create("HiZ Min Down Level", downsample_write | DRW_STATE_DEPTH_ALWAYS);
+ grp = DRW_shgroup_create(e_data.minz_downlevel_sh, psl->minz_downlevel_ps);
+ DRW_shgroup_uniform_buffer(grp, "depthBuffer", &stl->g_data->minzbuffer);
+ DRW_shgroup_call_add(grp, quad, NULL);
+#endif
+
+ psl->maxz_downlevel_ps = DRW_pass_create("HiZ Max Down Level", downsample_write | DRW_STATE_DEPTH_ALWAYS);
+ grp = DRW_shgroup_create(e_data.maxz_downlevel_sh, psl->maxz_downlevel_ps);
+ DRW_shgroup_uniform_buffer(grp, "depthBuffer", &txl->maxzbuffer);
+ DRW_shgroup_call_add(grp, quad, NULL);
+
+ /* Copy depth buffer to halfres top level of HiZ */
+#if 0 /* Not used for now */
+ psl->minz_downdepth_ps = DRW_pass_create("HiZ Min Copy Depth Halfres", downsample_write | DRW_STATE_DEPTH_ALWAYS);
+ grp = DRW_shgroup_create(e_data.minz_downdepth_sh, psl->minz_downdepth_ps);
+ DRW_shgroup_uniform_buffer(grp, "depthBuffer", &e_data.depth_src);
+ DRW_shgroup_call_add(grp, quad, NULL);
+#endif
+
+ psl->maxz_downdepth_ps = DRW_pass_create("HiZ Max Copy Depth Halfres", downsample_write | DRW_STATE_DEPTH_ALWAYS);
+ grp = DRW_shgroup_create(e_data.maxz_downdepth_sh, psl->maxz_downdepth_ps);
+ DRW_shgroup_uniform_buffer(grp, "depthBuffer", &e_data.depth_src);
+ DRW_shgroup_call_add(grp, quad, NULL);
+
+#if 0 /* Not used for now */
+ psl->minz_downdepth_layer_ps = DRW_pass_create("HiZ Min Copy DepthLayer Halfres", downsample_write | DRW_STATE_DEPTH_ALWAYS);
+ grp = DRW_shgroup_create(e_data.minz_downdepth_layer_sh, psl->minz_downdepth_layer_ps);
+ DRW_shgroup_uniform_buffer(grp, "depthBuffer", &e_data.depth_src);
+ DRW_shgroup_uniform_int(grp, "depthLayer", &e_data.depth_src_layer, 1);
+ DRW_shgroup_call_add(grp, quad, NULL);
+#endif
+
+ psl->maxz_downdepth_layer_ps = DRW_pass_create("HiZ Max Copy DepthLayer Halfres", downsample_write | DRW_STATE_DEPTH_ALWAYS);
+ grp = DRW_shgroup_create(e_data.maxz_downdepth_layer_sh, psl->maxz_downdepth_layer_ps);
+ DRW_shgroup_uniform_buffer(grp, "depthBuffer", &e_data.depth_src);
+ DRW_shgroup_uniform_int(grp, "depthLayer", &e_data.depth_src_layer, 1);
+ DRW_shgroup_call_add(grp, quad, NULL);
+
+ /* Copy depth buffer to halfres top level of HiZ */
+#if 0 /* Not used for now */
+ psl->minz_copydepth_ps = DRW_pass_create("HiZ Min Copy Depth Fullres", downsample_write | DRW_STATE_DEPTH_ALWAYS);
+ grp = DRW_shgroup_create(e_data.minz_copydepth_sh, psl->minz_copydepth_ps);
+ DRW_shgroup_uniform_buffer(grp, "depthBuffer", &e_data.depth_src);
+ DRW_shgroup_call_add(grp, quad, NULL);
+#endif
+
+ psl->maxz_copydepth_ps = DRW_pass_create("HiZ Max Copy Depth Fullres", downsample_write | DRW_STATE_DEPTH_ALWAYS);
+ grp = DRW_shgroup_create(e_data.maxz_copydepth_sh, psl->maxz_copydepth_ps);
+ DRW_shgroup_uniform_buffer(grp, "depthBuffer", &e_data.depth_src);
+ DRW_shgroup_call_add(grp, quad, NULL);
+ }
+}
+
+#if 0 /* Not required for now */
+static void min_downsample_cb(void *vedata, int UNUSED(level))
+{
+ EEVEE_PassList *psl = ((EEVEE_Data *)vedata)->psl;
+ DRW_draw_pass(psl->minz_downlevel_ps);
+}
+#endif
+
+static void max_downsample_cb(void *vedata, int UNUSED(level))
+{
+ EEVEE_PassList *psl = ((EEVEE_Data *)vedata)->psl;
+ DRW_draw_pass(psl->maxz_downlevel_ps);
+}
+
+static void simple_downsample_cb(void *vedata, int UNUSED(level))
+{
+ EEVEE_PassList *psl = ((EEVEE_Data *)vedata)->psl;
+ DRW_draw_pass(psl->color_downsample_ps);
+}
+
+static void simple_downsample_cube_cb(void *vedata, int level)
+{
+ EEVEE_PassList *psl = ((EEVEE_Data *)vedata)->psl;
+ e_data.cube_texel_size = (float)(1 << level) / (float)GPU_texture_width(e_data.color_src);
+ DRW_draw_pass(psl->color_downsample_cube_ps);
+}
+
+void EEVEE_create_minmax_buffer(EEVEE_Data *vedata, GPUTexture *depth_src, int layer)
+{
+ EEVEE_PassList *psl = vedata->psl;
+ EEVEE_FramebufferList *fbl = vedata->fbl;
+ EEVEE_TextureList *txl = vedata->txl;
+
+ e_data.depth_src = depth_src;
+ e_data.depth_src_layer = layer;
+
+#if 0 /* Not required for now */
+ DRW_stats_group_start("Min buffer");
+ /* Copy depth buffer to min texture top level */
+ DRW_framebuffer_texture_attach(fbl->downsample_fb, stl->g_data->minzbuffer, 0, 0);
+ DRW_framebuffer_bind(fbl->downsample_fb);
+ if (layer >= 0) {
+ DRW_draw_pass(psl->minz_downdepth_layer_ps);
+ }
+ else {
+ DRW_draw_pass(psl->minz_downdepth_ps);
+ }
+ DRW_framebuffer_texture_detach(stl->g_data->minzbuffer);
+
+ /* Create lower levels */
+ DRW_framebuffer_recursive_downsample(fbl->downsample_fb, stl->g_data->minzbuffer, 8, &min_downsample_cb, vedata);
+ DRW_stats_group_end();
+#endif
+
+ DRW_stats_group_start("Max buffer");
+ /* Copy depth buffer to max texture top level */
+ DRW_framebuffer_texture_attach(fbl->downsample_fb, txl->maxzbuffer, 0, 0);
+ DRW_framebuffer_bind(fbl->downsample_fb);
+ if (layer >= 0) {
+ DRW_draw_pass(psl->maxz_downdepth_layer_ps);
+ }
+ else {
+ DRW_draw_pass(psl->maxz_downdepth_ps);
+ }
+ DRW_framebuffer_texture_detach(txl->maxzbuffer);
+
+ /* Create lower levels */
+ DRW_framebuffer_recursive_downsample(fbl->downsample_fb, txl->maxzbuffer, 8, &max_downsample_cb, vedata);
+ DRW_stats_group_end();
+
+ /* Restore */
+ DRW_framebuffer_bind(fbl->main);
+}
+
+/**
+ * Simple downsampling algorithm. Reconstruct mip chain up to mip level.
+ **/
+void EEVEE_downsample_buffer(EEVEE_Data *vedata, struct GPUFrameBuffer *fb_src, GPUTexture *texture_src, int level)
+{
+ e_data.color_src = texture_src;
+
+ DRW_stats_group_start("Downsample buffer");
+ /* Create lower levels */
+ DRW_framebuffer_recursive_downsample(fb_src, texture_src, level, &simple_downsample_cb, vedata);
+ DRW_stats_group_end();
+}
+
+/**
+ * Simple downsampling algorithm for cubemap. Reconstruct mip chain up to mip level.
+ **/
+void EEVEE_downsample_cube_buffer(EEVEE_Data *vedata, struct GPUFrameBuffer *fb_src, GPUTexture *texture_src, int level)
+{
+ e_data.color_src = texture_src;
+
+ DRW_stats_group_start("Downsample Cube buffer");
+ /* Create lower levels */
+ DRW_framebuffer_recursive_downsample(fb_src, texture_src, level, &simple_downsample_cube_cb, vedata);
+ DRW_stats_group_end();
+}
+
+void EEVEE_draw_effects(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
+{
+ EEVEE_TextureList *txl = vedata->txl;
+ EEVEE_FramebufferList *fbl = vedata->fbl;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_EffectsInfo *effects = stl->effects;
+ DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
+
+ /* only once per frame after the first post process */
+ effects->swap_double_buffer = ((effects->enabled_effects & EFFECT_DOUBLE_BUFFER) != 0);
+
+ /* Init pointers */
+ effects->source_buffer = txl->color; /* latest updated texture */
+ effects->target_buffer = fbl->effect_fb; /* next target to render to */
+
+ /* Temporal Anti-Aliasing MUST come first */
+ EEVEE_temporal_sampling_draw(vedata);
+
+ /* Detach depth for effects to use it */
+ DRW_framebuffer_texture_detach(dtxl->depth);
+
+ /* Post process stack (order matters) */
+ EEVEE_motion_blur_draw(vedata);
+ EEVEE_depth_of_field_draw(vedata);
+ EEVEE_bloom_draw(vedata);
+
+ /* Save the final texture and framebuffer for final transformation or read. */
+ effects->final_tx = effects->source_buffer;
+ effects->final_fb = (effects->target_buffer != fbl->main) ? fbl->main : fbl->effect_fb;
+
+ /* If no post processes is enabled, buffers are still not swapped, do it now. */
+ SWAP_DOUBLE_BUFFERS();
+
+ if (!stl->g_data->valid_double_buffer &&
+ ((effects->enabled_effects & EFFECT_DOUBLE_BUFFER) != 0) &&
+ (DRW_state_is_image_render() == false))
+ {
+ /* If history buffer is not valid request another frame.
+ * This fix black reflections on area resize. */
+ DRW_viewport_request_redraw();
+ }
+
+ /* Record pers matrix for the next frame. */
+ DRW_viewport_matrix_get(sldata->common_data.prev_persmat, DRW_MAT_PERS);
+
+ /* Update double buffer status if render mode. */
+ if (DRW_state_is_image_render()) {
+ stl->g_data->valid_double_buffer = (txl->color_double_buffer != NULL);
+ }
+}
+
+void EEVEE_effects_free(void)
+{
+ DRW_SHADER_FREE_SAFE(e_data.downsample_sh);
+ DRW_SHADER_FREE_SAFE(e_data.downsample_cube_sh);
+
+ DRW_SHADER_FREE_SAFE(e_data.minz_downlevel_sh);
+ DRW_SHADER_FREE_SAFE(e_data.maxz_downlevel_sh);
+ DRW_SHADER_FREE_SAFE(e_data.minz_downdepth_sh);
+ DRW_SHADER_FREE_SAFE(e_data.maxz_downdepth_sh);
+ DRW_SHADER_FREE_SAFE(e_data.minz_downdepth_layer_sh);
+ DRW_SHADER_FREE_SAFE(e_data.maxz_downdepth_layer_sh);
+ DRW_SHADER_FREE_SAFE(e_data.minz_copydepth_sh);
+ DRW_SHADER_FREE_SAFE(e_data.maxz_copydepth_sh);
+}
diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c
new file mode 100644
index 00000000000..1967762a36d
--- /dev/null
+++ b/source/blender/draw/engines/eevee/eevee_engine.c
@@ -0,0 +1,514 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file eevee_engine.c
+ * \ingroup draw_engine
+ */
+
+#include "DRW_render.h"
+
+#include "BLI_dynstr.h"
+#include "BLI_rand.h"
+
+#include "BKE_object.h"
+#include "BKE_global.h" /* for G.debug_value */
+#include "BKE_screen.h"
+
+#include "DNA_world_types.h"
+
+#include "ED_screen.h"
+
+#include "GPU_material.h"
+#include "GPU_glew.h"
+
+#include "eevee_engine.h"
+#include "eevee_private.h"
+
+#define EEVEE_ENGINE "BLENDER_EEVEE"
+
+extern GlobalsUboStorage ts;
+
+/* *********** FUNCTIONS *********** */
+
+static void eevee_engine_init(void *ved)
+{
+ EEVEE_Data *vedata = (EEVEE_Data *)ved;
+ EEVEE_TextureList *txl = vedata->txl;
+ EEVEE_FramebufferList *fbl = vedata->fbl;
+ EEVEE_StorageList *stl = ((EEVEE_Data *)vedata)->stl;
+ EEVEE_ViewLayerData *sldata = EEVEE_view_layer_data_ensure();
+
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ View3D *v3d = draw_ctx->v3d;
+ RegionView3D *rv3d = draw_ctx->rv3d;
+ Object *camera = (rv3d->persp == RV3D_CAMOB) ? v3d->camera : NULL;
+
+ if (!stl->g_data) {
+ /* Alloc transient pointers */
+ stl->g_data = MEM_callocN(sizeof(*stl->g_data), __func__);
+ }
+ stl->g_data->background_alpha = DRW_state_draw_background() ? 1.0f : 0.0f;
+ stl->g_data->valid_double_buffer = (txl->color_double_buffer != NULL);
+
+ DRWFboTexture tex = {&txl->color, DRW_TEX_RGBA_16, DRW_TEX_FILTER | DRW_TEX_MIPMAP};
+
+ const float *viewport_size = DRW_viewport_size_get();
+ DRW_framebuffer_init(&fbl->main, &draw_engine_eevee_type,
+ (int)viewport_size[0], (int)viewport_size[1],
+ &tex, 1);
+
+ if (sldata->common_ubo == NULL) {
+ sldata->common_ubo = DRW_uniformbuffer_create(sizeof(sldata->common_data), &sldata->common_data);
+ }
+
+ /* EEVEE_effects_init needs to go first for TAA */
+ EEVEE_effects_init(sldata, vedata, camera);
+ EEVEE_materials_init(sldata, stl, fbl);
+ EEVEE_lights_init(sldata);
+ EEVEE_lightprobes_init(sldata, vedata);
+
+ if ((stl->effects->taa_current_sample > 1) && !DRW_state_is_image_render()) {
+ /* XXX otherwise it would break the other engines. */
+ DRW_viewport_matrix_override_unset(DRW_MAT_PERS);
+ DRW_viewport_matrix_override_unset(DRW_MAT_PERSINV);
+ DRW_viewport_matrix_override_unset(DRW_MAT_WIN);
+ DRW_viewport_matrix_override_unset(DRW_MAT_WININV);
+ }
+}
+
+static void eevee_cache_init(void *vedata)
+{
+ EEVEE_PassList *psl = ((EEVEE_Data *)vedata)->psl;
+ EEVEE_ViewLayerData *sldata = EEVEE_view_layer_data_ensure();
+
+ EEVEE_bloom_cache_init(sldata, vedata);
+ EEVEE_depth_of_field_cache_init(sldata, vedata);
+ EEVEE_effects_cache_init(sldata, vedata);
+ EEVEE_lightprobes_cache_init(sldata, vedata);
+ EEVEE_lights_cache_init(sldata, psl);
+ EEVEE_materials_cache_init(vedata);
+ EEVEE_motion_blur_cache_init(sldata, vedata);
+ EEVEE_occlusion_cache_init(sldata, vedata);
+ EEVEE_screen_raytrace_cache_init(sldata, vedata);
+ EEVEE_subsurface_cache_init(sldata, vedata);
+ EEVEE_temporal_sampling_cache_init(sldata, vedata);
+ EEVEE_volumes_cache_init(sldata, vedata);
+}
+
+static void eevee_cache_populate(void *vedata, Object *ob)
+{
+ EEVEE_ViewLayerData *sldata = EEVEE_view_layer_data_ensure();
+
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ const bool is_active = (ob == draw_ctx->obact);
+ if (is_active) {
+ if (DRW_object_is_mode_shade(ob) == true) {
+ return;
+ }
+ }
+
+ if (DRW_check_object_visible_within_active_context(ob) == false) {
+ return;
+ }
+
+ if (ELEM(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT)) {
+ EEVEE_materials_cache_populate(vedata, sldata, ob);
+
+ const bool cast_shadow = true;
+
+ if (cast_shadow) {
+ EEVEE_lights_cache_shcaster_object_add(sldata, ob);
+ }
+ }
+ else if (ob->type == OB_LIGHTPROBE) {
+ if ((ob->base_flag & BASE_FROMDUPLI) != 0) {
+ /* TODO: Special case for dupli objects because we cannot save the object pointer. */
+ }
+ else {
+ EEVEE_lightprobes_cache_add(sldata, ob);
+ }
+ }
+ else if (ob->type == OB_LAMP) {
+ EEVEE_lights_cache_add(sldata, ob);
+ }
+}
+
+static void eevee_cache_finish(void *vedata)
+{
+ EEVEE_ViewLayerData *sldata = EEVEE_view_layer_data_ensure();
+
+ EEVEE_materials_cache_finish(vedata);
+ EEVEE_lights_cache_finish(sldata);
+ EEVEE_lightprobes_cache_finish(sldata, vedata);
+}
+
+/* As renders in an HDR offscreen buffer, we need draw everything once
+ * during the background pass. This way the other drawing callback between
+ * the background and the scene pass are visible.
+ * Note: we could break it up in two passes using some depth test
+ * to reduce the fillrate */
+static void eevee_draw_background(void *vedata)
+{
+ EEVEE_PassList *psl = ((EEVEE_Data *)vedata)->psl;
+ EEVEE_TextureList *txl = ((EEVEE_Data *)vedata)->txl;
+ EEVEE_StorageList *stl = ((EEVEE_Data *)vedata)->stl;
+ EEVEE_FramebufferList *fbl = ((EEVEE_Data *)vedata)->fbl;
+ EEVEE_ViewLayerData *sldata = EEVEE_view_layer_data_ensure();
+
+ /* Default framebuffer and texture */
+ DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
+ DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
+
+ /* Sort transparents before the loop. */
+ DRW_pass_sort_shgroup_z(psl->transparent_pass);
+
+ /* Number of iteration: needed for all temporal effect (SSR, TAA)
+ * when using opengl render. */
+ int loop_ct = DRW_state_is_image_render() ? 4 : 1;
+
+ while (loop_ct--) {
+ unsigned int primes[3] = {2, 3, 7};
+ double offset[3] = {0.0, 0.0, 0.0};
+ double r[3];
+
+ if (DRW_state_is_image_render() ||
+ ((stl->effects->enabled_effects & EFFECT_TAA) != 0))
+ {
+ BLI_halton_3D(primes, offset, stl->effects->taa_current_sample, r);
+ EEVEE_update_noise(psl, fbl, r);
+ EEVEE_volumes_set_jitter(sldata, stl->effects->taa_current_sample - 1);
+ EEVEE_materials_init(sldata, stl, fbl);
+ }
+
+ /* Refresh Probes */
+ DRW_stats_group_start("Probes Refresh");
+ EEVEE_lightprobes_refresh(sldata, vedata);
+ EEVEE_lightprobes_refresh_planar(sldata, vedata);
+ DRW_stats_group_end();
+
+ /* Update common buffer after probe rendering. */
+ DRW_uniformbuffer_update(sldata->common_ubo, &sldata->common_data);
+
+ /* Refresh shadows */
+ DRW_stats_group_start("Shadows");
+ EEVEE_draw_shadows(sldata, psl);
+ DRW_stats_group_end();
+
+ /* Attach depth to the hdr buffer and bind it */
+ DRW_framebuffer_texture_detach(dtxl->depth);
+ DRW_framebuffer_texture_attach(fbl->main, dtxl->depth, 0, 0);
+ DRW_framebuffer_bind(fbl->main);
+ if (DRW_state_draw_background()) {
+ DRW_framebuffer_clear(false, true, true, NULL, 1.0f);
+ }
+ else {
+ /* We need to clear the alpha chanel in this case. */
+ float clear_col[4] = {0.0f, 0.0f, 0.0f, 0.0f};
+ DRW_framebuffer_clear(true, true, true, clear_col, 1.0f);
+ }
+
+ if (((stl->effects->enabled_effects & EFFECT_TAA) != 0) &&
+ (stl->effects->taa_current_sample > 1) &&
+ !DRW_state_is_image_render())
+ {
+ DRW_viewport_matrix_override_set(stl->effects->overide_persmat, DRW_MAT_PERS);
+ DRW_viewport_matrix_override_set(stl->effects->overide_persinv, DRW_MAT_PERSINV);
+ DRW_viewport_matrix_override_set(stl->effects->overide_winmat, DRW_MAT_WIN);
+ DRW_viewport_matrix_override_set(stl->effects->overide_wininv, DRW_MAT_WININV);
+ }
+
+ /* Depth prepass */
+ DRW_stats_group_start("Prepass");
+ DRW_draw_pass(psl->depth_pass);
+ DRW_draw_pass(psl->depth_pass_cull);
+ DRW_stats_group_end();
+
+ /* Create minmax texture */
+ DRW_stats_group_start("Main MinMax buffer");
+ EEVEE_create_minmax_buffer(vedata, dtxl->depth, -1);
+ DRW_stats_group_end();
+
+ EEVEE_occlusion_compute(sldata, vedata, dtxl->depth, -1);
+ EEVEE_volumes_compute(sldata, vedata);
+
+ /* Shading pass */
+ DRW_stats_group_start("Shading");
+ if (DRW_state_draw_background()) {
+ DRW_draw_pass(psl->background_pass);
+ }
+ EEVEE_draw_default_passes(psl);
+ DRW_draw_pass(psl->material_pass);
+ EEVEE_subsurface_data_render(sldata, vedata);
+ DRW_stats_group_end();
+
+ /* Effects pre-transparency */
+ EEVEE_subsurface_compute(sldata, vedata);
+ EEVEE_reflection_compute(sldata, vedata);
+ EEVEE_occlusion_draw_debug(sldata, vedata);
+ DRW_draw_pass(psl->probe_display);
+ EEVEE_refraction_compute(sldata, vedata);
+
+ /* Opaque refraction */
+ DRW_stats_group_start("Opaque Refraction");
+ DRW_draw_pass(psl->refract_depth_pass);
+ DRW_draw_pass(psl->refract_depth_pass_cull);
+ DRW_draw_pass(psl->refract_pass);
+ DRW_stats_group_end();
+
+ /* Volumetrics Resolve Opaque */
+ EEVEE_volumes_resolve(sldata, vedata);
+
+ /* Transparent */
+ DRW_draw_pass(psl->transparent_pass);
+
+ /* Post Process */
+ DRW_stats_group_start("Post FX");
+ EEVEE_draw_effects(sldata, vedata);
+ DRW_stats_group_end();
+
+ if ((stl->effects->taa_current_sample > 1) && !DRW_state_is_image_render()) {
+ DRW_viewport_matrix_override_unset(DRW_MAT_PERS);
+ DRW_viewport_matrix_override_unset(DRW_MAT_PERSINV);
+ DRW_viewport_matrix_override_unset(DRW_MAT_WIN);
+ DRW_viewport_matrix_override_unset(DRW_MAT_WININV);
+ }
+ }
+
+ /* Restore default framebuffer */
+ DRW_framebuffer_texture_attach(dfbl->default_fb, dtxl->depth, 0, 0);
+ DRW_framebuffer_bind(dfbl->default_fb);
+
+ /* Tonemapping */
+ DRW_transform_to_display(stl->effects->final_tx);
+
+ /* Debug : Ouput buffer to view. */
+ switch (G.debug_value) {
+ case 1:
+ if (txl->maxzbuffer) DRW_transform_to_display(txl->maxzbuffer);
+ break;
+ case 2:
+ if (stl->g_data->ssr_pdf_output) DRW_transform_to_display(stl->g_data->ssr_pdf_output);
+ break;
+ case 3:
+ if (txl->ssr_normal_input) DRW_transform_to_display(txl->ssr_normal_input);
+ break;
+ case 4:
+ if (txl->ssr_specrough_input) DRW_transform_to_display(txl->ssr_specrough_input);
+ break;
+ case 5:
+ if (txl->color_double_buffer) DRW_transform_to_display(txl->color_double_buffer);
+ break;
+ case 6:
+ if (stl->g_data->gtao_horizons_debug) DRW_transform_to_display(stl->g_data->gtao_horizons_debug);
+ break;
+ case 7:
+ if (txl->gtao_horizons) DRW_transform_to_display(txl->gtao_horizons);
+ break;
+ case 8:
+ if (txl->sss_data) DRW_transform_to_display(txl->sss_data);
+ break;
+ default:
+ break;
+ }
+
+ EEVEE_volumes_free_smoke_textures();
+
+ stl->g_data->view_updated = false;
+}
+
+static void eevee_view_update(void *vedata)
+{
+ EEVEE_StorageList *stl = ((EEVEE_Data *)vedata)->stl;
+ if (stl->g_data) {
+ stl->g_data->view_updated = true;
+ }
+}
+
+static void eevee_id_object_update(void *UNUSED(vedata), Object *object)
+{
+ /* This is a bit mask of components which update is to be ignored. */
+ const int ignore_updates = ID_RECALC_COLLECTIONS;
+ const int allowed_updates = ~ignore_updates;
+ EEVEE_LightProbeEngineData *ped = EEVEE_lightprobe_data_get(object);
+ if (ped != NULL && (ped->engine_data.recalc & allowed_updates) != 0) {
+ ped->need_full_update = true;
+ ped->engine_data.recalc = 0;
+ }
+ EEVEE_LampEngineData *led = EEVEE_lamp_data_get(object);
+ if (led != NULL && (led->engine_data.recalc & allowed_updates) != 0) {
+ led->need_update = true;
+ led->engine_data.recalc = 0;
+ }
+ EEVEE_ObjectEngineData *oedata = EEVEE_object_data_get(object);
+ if (oedata != NULL && (oedata->engine_data.recalc & allowed_updates) != 0) {
+ oedata->need_update = true;
+ oedata->engine_data.recalc = 0;
+ }
+}
+
+static void eevee_id_update(void *vedata, ID *id)
+{
+ /* Handle updates based on ID type. */
+ switch (GS(id->name)) {
+ case ID_OB:
+ eevee_id_object_update(vedata, (Object *)id);
+ break;
+ default:
+ /* pass */
+ break;
+ }
+}
+
+static void eevee_render_to_image(void *vedata, struct RenderEngine *engine, struct Depsgraph *depsgraph)
+{
+ EEVEE_render_init(vedata, engine, depsgraph);
+
+ DRW_render_object_iter(vedata, engine, depsgraph, EEVEE_render_cache);
+
+ /* Actually do the rendering. */
+ EEVEE_render_draw(vedata, engine, depsgraph);
+}
+
+static void eevee_engine_free(void)
+{
+ EEVEE_bloom_free();
+ EEVEE_depth_of_field_free();
+ EEVEE_effects_free();
+ EEVEE_lightprobes_free();
+ EEVEE_lights_free();
+ EEVEE_materials_free();
+ EEVEE_mist_free();
+ EEVEE_motion_blur_free();
+ EEVEE_occlusion_free();
+ EEVEE_screen_raytrace_free();
+ EEVEE_subsurface_free();
+ EEVEE_temporal_sampling_free();
+ EEVEE_volumes_free();
+}
+
+static void eevee_layer_collection_settings_create(RenderEngine *UNUSED(engine), IDProperty *props)
+{
+ BLI_assert(props &&
+ props->type == IDP_GROUP &&
+ props->subtype == IDP_GROUP_SUB_ENGINE_RENDER);
+ // BKE_collection_engine_property_add_int(props, "high_quality_sphere_lamps", false);
+ UNUSED_VARS_NDEBUG(props);
+}
+
+static void eevee_view_layer_settings_create(RenderEngine *UNUSED(engine), IDProperty *props)
+{
+ BLI_assert(props &&
+ props->type == IDP_GROUP &&
+ props->subtype == IDP_GROUP_SUB_ENGINE_RENDER);
+
+ BKE_collection_engine_property_add_int(props, "gi_diffuse_bounces", 3);
+ BKE_collection_engine_property_add_int(props, "gi_cubemap_resolution", 512);
+ BKE_collection_engine_property_add_int(props, "gi_visibility_resolution", 32);
+
+ BKE_collection_engine_property_add_int(props, "taa_samples", 16);
+ BKE_collection_engine_property_add_int(props, "taa_render_samples", 64);
+
+ BKE_collection_engine_property_add_bool(props, "sss_enable", false);
+ BKE_collection_engine_property_add_int(props, "sss_samples", 7);
+ BKE_collection_engine_property_add_float(props, "sss_jitter_threshold", 0.3f);
+ BKE_collection_engine_property_add_bool(props, "sss_separate_albedo", false);
+
+ BKE_collection_engine_property_add_bool(props, "ssr_enable", false);
+ BKE_collection_engine_property_add_bool(props, "ssr_refraction", false);
+ BKE_collection_engine_property_add_bool(props, "ssr_halfres", true);
+ BKE_collection_engine_property_add_float(props, "ssr_quality", 0.25f);
+ BKE_collection_engine_property_add_float(props, "ssr_max_roughness", 0.5f);
+ BKE_collection_engine_property_add_float(props, "ssr_thickness", 0.2f);
+ BKE_collection_engine_property_add_float(props, "ssr_border_fade", 0.075f);
+ BKE_collection_engine_property_add_float(props, "ssr_firefly_fac", 10.0f);
+
+ BKE_collection_engine_property_add_bool(props, "volumetric_enable", false);
+ BKE_collection_engine_property_add_float(props, "volumetric_start", 0.1f);
+ BKE_collection_engine_property_add_float(props, "volumetric_end", 100.0f);
+ BKE_collection_engine_property_add_int(props, "volumetric_tile_size", 8);
+ BKE_collection_engine_property_add_int(props, "volumetric_samples", 64);
+ BKE_collection_engine_property_add_float(props, "volumetric_sample_distribution", 0.8f);
+ BKE_collection_engine_property_add_bool(props, "volumetric_lights", true);
+ BKE_collection_engine_property_add_float(props, "volumetric_light_clamp", 0.0f);
+ BKE_collection_engine_property_add_bool(props, "volumetric_shadows", false);
+ BKE_collection_engine_property_add_int(props, "volumetric_shadow_samples", 16);
+ BKE_collection_engine_property_add_bool(props, "volumetric_colored_transmittance", true);
+
+ BKE_collection_engine_property_add_bool(props, "gtao_enable", false);
+ BKE_collection_engine_property_add_bool(props, "gtao_use_bent_normals", true);
+ BKE_collection_engine_property_add_bool(props, "gtao_bounce", true);
+ BKE_collection_engine_property_add_float(props, "gtao_distance", 0.2f);
+ BKE_collection_engine_property_add_float(props, "gtao_factor", 1.0f);
+ BKE_collection_engine_property_add_float(props, "gtao_quality", 0.25f);
+
+ BKE_collection_engine_property_add_bool(props, "dof_enable", false);
+ BKE_collection_engine_property_add_float(props, "bokeh_max_size", 100.0f);
+ BKE_collection_engine_property_add_float(props, "bokeh_threshold", 1.0f);
+
+ float default_bloom_color[3] = {1.0f, 1.0f, 1.0f};
+ BKE_collection_engine_property_add_bool(props, "bloom_enable", false);
+ BKE_collection_engine_property_add_float_array(props, "bloom_color", default_bloom_color, 3);
+ BKE_collection_engine_property_add_float(props, "bloom_threshold", 0.8f);
+ BKE_collection_engine_property_add_float(props, "bloom_knee", 0.5f);
+ BKE_collection_engine_property_add_float(props, "bloom_intensity", 0.8f);
+ BKE_collection_engine_property_add_float(props, "bloom_radius", 6.5f);
+ BKE_collection_engine_property_add_float(props, "bloom_clamp", 1.0f);
+
+ BKE_collection_engine_property_add_bool(props, "motion_blur_enable", false);
+ BKE_collection_engine_property_add_int(props, "motion_blur_samples", 8);
+ BKE_collection_engine_property_add_float(props, "motion_blur_shutter", 1.0f);
+
+ BKE_collection_engine_property_add_int(props, "shadow_method", SHADOW_ESM);
+ BKE_collection_engine_property_add_int(props, "shadow_size", 512);
+ BKE_collection_engine_property_add_bool(props, "shadow_high_bitdepth", false);
+}
+
+static const DrawEngineDataSize eevee_data_size = DRW_VIEWPORT_DATA_SIZE(EEVEE_Data);
+
+DrawEngineType draw_engine_eevee_type = {
+ NULL, NULL,
+ N_("Eevee"),
+ &eevee_data_size,
+ &eevee_engine_init,
+ &eevee_engine_free,
+ &eevee_cache_init,
+ &eevee_cache_populate,
+ &eevee_cache_finish,
+ &eevee_draw_background,
+ NULL, /* Everything is drawn in the background pass (see comment on function) */
+ &eevee_view_update,
+ &eevee_id_update,
+ &eevee_render_to_image,
+};
+
+RenderEngineType DRW_engine_viewport_eevee_type = {
+ NULL, NULL,
+ EEVEE_ENGINE, N_("Eevee"), RE_INTERNAL | RE_USE_SHADING_NODES,
+ NULL, &DRW_render_to_image, NULL, NULL, NULL, NULL,
+ &EEVEE_render_update_passes,
+ &eevee_layer_collection_settings_create,
+ &eevee_view_layer_settings_create,
+ &draw_engine_eevee_type,
+ {NULL, NULL, NULL}
+};
+
+
+#undef EEVEE_ENGINE
diff --git a/source/blender/draw/engines/eevee/eevee_engine.h b/source/blender/draw/engines/eevee/eevee_engine.h
new file mode 100644
index 00000000000..0cbd89a79fa
--- /dev/null
+++ b/source/blender/draw/engines/eevee/eevee_engine.h
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file eevee_engine.h
+ * \ingroup DNA
+ */
+
+#ifndef __EEVEE_ENGINE_H__
+#define __EEVEE_ENGINE_H__
+
+extern RenderEngineType DRW_engine_viewport_eevee_type;
+
+#endif /* __EEVEE_ENGINE_H__ */ \ No newline at end of file
diff --git a/source/blender/draw/engines/eevee/eevee_lightprobes.c b/source/blender/draw/engines/eevee/eevee_lightprobes.c
new file mode 100644
index 00000000000..6fd20233784
--- /dev/null
+++ b/source/blender/draw/engines/eevee/eevee_lightprobes.c
@@ -0,0 +1,1711 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file eevee_lightprobes.c
+ * \ingroup DNA
+ */
+
+#include "DRW_render.h"
+
+#include "BLI_utildefines.h"
+#include "BLI_string_utils.h"
+#include "BLI_rand.h"
+
+#include "DNA_world_types.h"
+#include "DNA_texture_types.h"
+#include "DNA_image_types.h"
+#include "DNA_lightprobe_types.h"
+#include "DNA_view3d_types.h"
+
+#include "BKE_object.h"
+
+#include "GPU_material.h"
+#include "GPU_texture.h"
+#include "GPU_glew.h"
+
+#include "eevee_engine.h"
+#include "eevee_private.h"
+
+#include "ED_screen.h"
+
+/* Rounded to nearest PowerOfTwo */
+#if defined(IRRADIANCE_SH_L2)
+#define IRRADIANCE_SAMPLE_SIZE_X 4 /* 3 in reality */
+#define IRRADIANCE_SAMPLE_SIZE_Y 4 /* 3 in reality */
+#elif defined(IRRADIANCE_CUBEMAP)
+#define IRRADIANCE_SAMPLE_SIZE_X 8
+#define IRRADIANCE_SAMPLE_SIZE_Y 8
+#elif defined(IRRADIANCE_HL2)
+#define IRRADIANCE_SAMPLE_SIZE_X 4 /* 3 in reality */
+#define IRRADIANCE_SAMPLE_SIZE_Y 2
+#endif
+
+#define IRRADIANCE_MAX_POOL_LAYER 256 /* OpenGL 3.3 core requirement, can be extended but it's already very big */
+#define IRRADIANCE_MAX_POOL_SIZE 1024
+#define MAX_IRRADIANCE_SAMPLES \
+ (IRRADIANCE_MAX_POOL_SIZE / IRRADIANCE_SAMPLE_SIZE_X) * \
+ (IRRADIANCE_MAX_POOL_SIZE / IRRADIANCE_SAMPLE_SIZE_Y)
+#define HAMMERSLEY_SIZE 1024
+
+static struct {
+ struct GPUShader *probe_default_sh;
+ struct GPUShader *probe_filter_glossy_sh;
+ struct GPUShader *probe_filter_diffuse_sh;
+ struct GPUShader *probe_filter_visibility_sh;
+ struct GPUShader *probe_grid_fill_sh;
+ struct GPUShader *probe_grid_display_sh;
+ struct GPUShader *probe_planar_display_sh;
+ struct GPUShader *probe_planar_downsample_sh;
+ struct GPUShader *probe_cube_display_sh;
+
+ struct GPUTexture *hammersley;
+ struct GPUTexture *planar_pool_placeholder;
+ struct GPUTexture *depth_placeholder;
+ struct GPUTexture *depth_array_placeholder;
+ struct GPUTexture *cube_face_minmaxz;
+
+ int update_world;
+} e_data = {NULL}; /* Engine data */
+
+extern char datatoc_background_vert_glsl[];
+extern char datatoc_default_world_frag_glsl[];
+extern char datatoc_lightprobe_filter_glossy_frag_glsl[];
+extern char datatoc_lightprobe_filter_diffuse_frag_glsl[];
+extern char datatoc_lightprobe_filter_visibility_frag_glsl[];
+extern char datatoc_lightprobe_geom_glsl[];
+extern char datatoc_lightprobe_vert_glsl[];
+extern char datatoc_lightprobe_planar_display_frag_glsl[];
+extern char datatoc_lightprobe_planar_display_vert_glsl[];
+extern char datatoc_lightprobe_planar_downsample_frag_glsl[];
+extern char datatoc_lightprobe_planar_downsample_geom_glsl[];
+extern char datatoc_lightprobe_planar_downsample_vert_glsl[];
+extern char datatoc_lightprobe_cube_display_frag_glsl[];
+extern char datatoc_lightprobe_cube_display_vert_glsl[];
+extern char datatoc_lightprobe_grid_display_frag_glsl[];
+extern char datatoc_lightprobe_grid_display_vert_glsl[];
+extern char datatoc_lightprobe_grid_fill_frag_glsl[];
+extern char datatoc_irradiance_lib_glsl[];
+extern char datatoc_lightprobe_lib_glsl[];
+extern char datatoc_octahedron_lib_glsl[];
+extern char datatoc_bsdf_common_lib_glsl[];
+extern char datatoc_common_uniforms_lib_glsl[];
+extern char datatoc_bsdf_sampling_lib_glsl[];
+
+extern GlobalsUboStorage ts;
+
+/* *********** FUNCTIONS *********** */
+
+static void irradiance_pool_size_get(int visibility_size, int total_samples, int r_size[3])
+{
+ /* Compute how many irradiance samples we can store per visibility sample. */
+ int irr_per_vis = (visibility_size / IRRADIANCE_SAMPLE_SIZE_X) *
+ (visibility_size / IRRADIANCE_SAMPLE_SIZE_Y);
+
+ /* The irradiance itself take one layer, hence the +1 */
+ int layer_ct = MIN2(irr_per_vis + 1, IRRADIANCE_MAX_POOL_LAYER);
+
+ int texel_ct = (int)ceilf((float)total_samples / (float)(layer_ct - 1));
+ r_size[0] = visibility_size * max_ii(1, min_ii(texel_ct, (IRRADIANCE_MAX_POOL_SIZE / visibility_size)));
+ r_size[1] = visibility_size * max_ii(1, (texel_ct / (IRRADIANCE_MAX_POOL_SIZE / visibility_size)));
+ r_size[2] = layer_ct;
+}
+
+static struct GPUTexture *create_hammersley_sample_texture(int samples)
+{
+ struct GPUTexture *tex;
+ float (*texels)[2] = MEM_mallocN(sizeof(float[2]) * samples, "hammersley_tex");
+ int i;
+
+ for (i = 0; i < samples; i++) {
+ double dphi;
+ BLI_hammersley_1D(i, &dphi);
+ float phi = (float)dphi * 2.0f * M_PI;
+ texels[i][0] = cosf(phi);
+ texels[i][1] = sinf(phi);
+ }
+
+ tex = DRW_texture_create_1D(samples, DRW_TEX_RG_16, DRW_TEX_WRAP, (float *)texels);
+ MEM_freeN(texels);
+ return tex;
+}
+
+static void planar_pool_ensure_alloc(EEVEE_Data *vedata, int num_planar_ref)
+{
+ /* XXX TODO OPTIMISATION : This is a complete waist of texture memory.
+ * Instead of allocating each planar probe for each viewport,
+ * only alloc them once using the biggest viewport resolution. */
+ EEVEE_FramebufferList *fbl = vedata->fbl;
+ EEVEE_TextureList *txl = vedata->txl;
+
+ const float *viewport_size = DRW_viewport_size_get();
+
+ /* TODO get screen percentage from layer setting */
+ // const DRWContextState *draw_ctx = DRW_context_state_get();
+ // ViewLayer *view_layer = draw_ctx->view_layer;
+ float screen_percentage = 1.0f;
+
+ int width = (int)(viewport_size[0] * screen_percentage);
+ int height = (int)(viewport_size[1] * screen_percentage);
+
+ /* We need an Array texture so allocate it ourself */
+ if (!txl->planar_pool) {
+ if (num_planar_ref > 0) {
+ txl->planar_pool = DRW_texture_create_2D_array(width, height, max_ff(1, num_planar_ref),
+ DRW_TEX_RGB_11_11_10, DRW_TEX_FILTER | DRW_TEX_MIPMAP, NULL);
+ txl->planar_depth = DRW_texture_create_2D_array(width, height, max_ff(1, num_planar_ref),
+ DRW_TEX_DEPTH_24, 0, NULL);
+ }
+ else if (num_planar_ref == 0) {
+ /* Makes Opengl Happy : Create a placeholder texture that will never be sampled but still bound to shader. */
+ txl->planar_pool = DRW_texture_create_2D_array(1, 1, 1, DRW_TEX_RGBA_8, DRW_TEX_FILTER | DRW_TEX_MIPMAP, NULL);
+ txl->planar_depth = DRW_texture_create_2D_array(1, 1, 1, DRW_TEX_DEPTH_24, 0, NULL);
+ }
+ }
+
+ if (num_planar_ref > 0) {
+ /* NOTE : Depth buffer is 2D but the planar_pool tex is 2D array.
+ * DRW_framebuffer_init binds the whole texture making the framebuffer invalid.
+ * To overcome this, we bind the planar pool ourselves later */
+
+ /* XXX Do this one first so it gets it's mipmap done. */
+ DRW_framebuffer_init(&fbl->planarref_fb, &draw_engine_eevee_type, 1, 1, NULL, 0);
+ }
+}
+
+static void lightprobe_shaders_init(void)
+{
+ const char *filter_defines = "#define HAMMERSLEY_SIZE " STRINGIFY(HAMMERSLEY_SIZE) "\n"
+#if defined(IRRADIANCE_SH_L2)
+ "#define IRRADIANCE_SH_L2\n"
+#elif defined(IRRADIANCE_CUBEMAP)
+ "#define IRRADIANCE_CUBEMAP\n"
+#elif defined(IRRADIANCE_HL2)
+ "#define IRRADIANCE_HL2\n"
+#endif
+ "#define NOISE_SIZE 64\n";
+
+ char *shader_str = NULL;
+
+ shader_str = BLI_string_joinN(
+ datatoc_common_uniforms_lib_glsl,
+ datatoc_bsdf_common_lib_glsl,
+ datatoc_bsdf_sampling_lib_glsl,
+ datatoc_lightprobe_filter_glossy_frag_glsl);
+
+ e_data.probe_filter_glossy_sh = DRW_shader_create(
+ datatoc_lightprobe_vert_glsl, datatoc_lightprobe_geom_glsl, shader_str, filter_defines);
+
+ e_data.probe_default_sh = DRW_shader_create(
+ datatoc_background_vert_glsl, NULL, datatoc_default_world_frag_glsl, NULL);
+
+ MEM_freeN(shader_str);
+
+ shader_str = BLI_string_joinN(
+ datatoc_common_uniforms_lib_glsl,
+ datatoc_bsdf_common_lib_glsl,
+ datatoc_bsdf_sampling_lib_glsl,
+ datatoc_lightprobe_filter_diffuse_frag_glsl);
+
+ e_data.probe_filter_diffuse_sh = DRW_shader_create_fullscreen(shader_str, filter_defines);
+
+ MEM_freeN(shader_str);
+
+ shader_str = BLI_string_joinN(
+ datatoc_common_uniforms_lib_glsl,
+ datatoc_bsdf_common_lib_glsl,
+ datatoc_bsdf_sampling_lib_glsl,
+ datatoc_lightprobe_filter_visibility_frag_glsl);
+
+ e_data.probe_filter_visibility_sh = DRW_shader_create_fullscreen(shader_str, filter_defines);
+
+ MEM_freeN(shader_str);
+
+ shader_str = BLI_string_joinN(
+ datatoc_octahedron_lib_glsl,
+ datatoc_common_uniforms_lib_glsl,
+ datatoc_bsdf_common_lib_glsl,
+ datatoc_irradiance_lib_glsl,
+ datatoc_lightprobe_lib_glsl,
+ datatoc_lightprobe_grid_display_frag_glsl);
+
+ e_data.probe_grid_display_sh = DRW_shader_create(
+ datatoc_lightprobe_grid_display_vert_glsl, NULL, shader_str, filter_defines);
+
+ MEM_freeN(shader_str);
+
+ e_data.probe_grid_fill_sh = DRW_shader_create_fullscreen(
+ datatoc_lightprobe_grid_fill_frag_glsl, filter_defines);
+
+ shader_str = BLI_string_joinN(
+ datatoc_octahedron_lib_glsl,
+ datatoc_common_uniforms_lib_glsl,
+ datatoc_bsdf_common_lib_glsl,
+ datatoc_lightprobe_lib_glsl,
+ datatoc_lightprobe_cube_display_frag_glsl);
+
+ e_data.probe_cube_display_sh = DRW_shader_create(
+ datatoc_lightprobe_cube_display_vert_glsl, NULL, shader_str, NULL);
+
+ MEM_freeN(shader_str);
+
+ e_data.probe_planar_display_sh = DRW_shader_create(
+ datatoc_lightprobe_planar_display_vert_glsl, NULL,
+ datatoc_lightprobe_planar_display_frag_glsl, NULL);
+
+ e_data.probe_planar_downsample_sh = DRW_shader_create(
+ datatoc_lightprobe_planar_downsample_vert_glsl,
+ datatoc_lightprobe_planar_downsample_geom_glsl,
+ datatoc_lightprobe_planar_downsample_frag_glsl,
+ NULL);
+
+ e_data.hammersley = create_hammersley_sample_texture(HAMMERSLEY_SIZE);
+}
+
+void EEVEE_lightprobes_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *UNUSED(vedata))
+{
+ EEVEE_CommonUniformBuffer *common_data = &sldata->common_data;
+ bool update_all = false;
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ ViewLayer *view_layer = draw_ctx->view_layer;
+ IDProperty *props = BKE_view_layer_engine_evaluated_get(view_layer, COLLECTION_MODE_NONE, RE_engine_id_BLENDER_EEVEE);
+
+ /* Shaders */
+ if (!e_data.probe_filter_glossy_sh) {
+ lightprobe_shaders_init();
+ }
+
+ if (!sldata->probes) {
+ sldata->probes = MEM_callocN(sizeof(EEVEE_LightProbesInfo), "EEVEE_LightProbesInfo");
+ sldata->probes->grid_initialized = false;
+ sldata->probe_ubo = DRW_uniformbuffer_create(sizeof(EEVEE_LightProbe) * MAX_PROBE, NULL);
+ sldata->grid_ubo = DRW_uniformbuffer_create(sizeof(EEVEE_LightGrid) * MAX_GRID, NULL);
+ sldata->planar_ubo = DRW_uniformbuffer_create(sizeof(EEVEE_PlanarReflection) * MAX_PLANAR, NULL);
+ }
+
+ common_data->spec_toggle = true;
+ common_data->ssr_toggle = true;
+ common_data->sss_toggle = true;
+
+ int prop_bounce_num = BKE_collection_engine_property_value_get_int(props, "gi_diffuse_bounces");
+ if (sldata->probes->num_bounce != prop_bounce_num) {
+ sldata->probes->num_bounce = prop_bounce_num;
+ update_all = true;
+ }
+
+ int prop_cubemap_res = BKE_collection_engine_property_value_get_int(props, "gi_cubemap_resolution");
+ if (sldata->probes->cubemap_res != prop_cubemap_res) {
+ sldata->probes->cubemap_res = prop_cubemap_res;
+ update_all = true;
+
+ sldata->probes->target_size = prop_cubemap_res >> 1;
+
+ DRW_TEXTURE_FREE_SAFE(sldata->probe_rt);
+ DRW_TEXTURE_FREE_SAFE(sldata->probe_pool);
+ }
+
+ int visibility_res = BKE_collection_engine_property_value_get_int(props, "gi_visibility_resolution");
+ if (common_data->prb_irradiance_vis_size != visibility_res) {
+ common_data->prb_irradiance_vis_size = visibility_res;
+ update_all = true;
+ }
+
+ if (update_all) {
+ e_data.update_world |= PROBE_UPDATE_ALL;
+ sldata->probes->updated_bounce = 0;
+ sldata->probes->grid_initialized = false;
+ }
+
+ /* Setup Render Target Cubemap */
+ if (!sldata->probe_rt) {
+ sldata->probe_depth_rt = DRW_texture_create_cube(sldata->probes->target_size, DRW_TEX_DEPTH_24, 0, NULL);
+ sldata->probe_rt = DRW_texture_create_cube(sldata->probes->target_size, DRW_TEX_RGBA_16, DRW_TEX_FILTER | DRW_TEX_MIPMAP, NULL);
+ }
+
+ DRWFboTexture tex_probe[2] = {{&sldata->probe_depth_rt, DRW_TEX_DEPTH_24, 0},
+ {&sldata->probe_rt, DRW_TEX_RGBA_16, DRW_TEX_FILTER | DRW_TEX_MIPMAP}};
+ DRW_framebuffer_init(&sldata->probe_fb, &draw_engine_eevee_type, sldata->probes->target_size, sldata->probes->target_size, tex_probe, 2);
+
+ /* Minmaxz Pyramid */
+ // DRWFboTexture tex_minmaxz = {&e_data.cube_face_minmaxz, DRW_TEX_RG_32, DRW_TEX_MIPMAP | DRW_TEX_TEMP};
+ // DRW_framebuffer_init(&vedata->fbl->downsample_fb, &draw_engine_eevee_type, PROBE_RT_SIZE / 2, PROBE_RT_SIZE / 2, &tex_minmaxz, 1);
+
+ /* Placeholder planar pool: used when rendering planar reflections (avoid dependency loop). */
+ if (!e_data.planar_pool_placeholder) {
+ e_data.planar_pool_placeholder = DRW_texture_create_2D_array(1, 1, 1, DRW_TEX_RGBA_8, DRW_TEX_FILTER, NULL);
+ }
+
+ if (!e_data.depth_placeholder) {
+ e_data.depth_placeholder = DRW_texture_create_2D(1, 1, DRW_TEX_DEPTH_24, 0, NULL);
+ }
+ if (!e_data.depth_array_placeholder) {
+ e_data.depth_array_placeholder = DRW_texture_create_2D_array(1, 1, 1, DRW_TEX_DEPTH_24, 0, NULL);
+ }
+}
+
+void EEVEE_lightprobes_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
+{
+ EEVEE_TextureList *txl = vedata->txl;
+ EEVEE_PassList *psl = vedata->psl;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_LightProbesInfo *pinfo = sldata->probes;
+
+ pinfo->do_cube_update = false;
+ pinfo->num_cube = 1; /* at least one for the world */
+ pinfo->num_grid = 1;
+ pinfo->num_planar = 0;
+ pinfo->total_irradiance_samples = 1;
+ memset(pinfo->probes_cube_ref, 0, sizeof(pinfo->probes_cube_ref));
+ memset(pinfo->probes_grid_ref, 0, sizeof(pinfo->probes_grid_ref));
+ memset(pinfo->probes_planar_ref, 0, sizeof(pinfo->probes_planar_ref));
+
+ {
+ psl->probe_background = DRW_pass_create("World Probe Background Pass", DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL);
+
+ struct Gwn_Batch *geom = DRW_cache_fullscreen_quad_get();
+ DRWShadingGroup *grp = NULL;
+
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ Scene *scene = draw_ctx->scene;
+ World *wo = scene->world;
+
+ float *col = ts.colorBackground;
+ if (wo) {
+ col = &wo->horr;
+ if (wo->update_flag != 0 || pinfo->prev_world != wo) {
+ e_data.update_world |= PROBE_UPDATE_ALL;
+ pinfo->updated_bounce = 0;
+ pinfo->grid_initialized = false;
+ }
+ wo->update_flag = 0;
+
+ if (wo->use_nodes && wo->nodetree) {
+ struct GPUMaterial *gpumat = EEVEE_material_world_lightprobe_get(scene, wo);
+
+ grp = DRW_shgroup_material_create(gpumat, psl->probe_background);
+
+ if (grp) {
+ DRW_shgroup_uniform_float(grp, "backgroundAlpha", &stl->g_data->background_alpha, 1);
+ DRW_shgroup_call_add(grp, geom, NULL);
+ }
+ else {
+ /* Shader failed : pink background */
+ static float pink[3] = {1.0f, 0.0f, 1.0f};
+ col = pink;
+ }
+ }
+
+ pinfo->prev_world = wo;
+ }
+ else if (pinfo->prev_world) {
+ pinfo->prev_world = NULL;
+ e_data.update_world |= PROBE_UPDATE_ALL;
+ pinfo->updated_bounce = 0;
+ pinfo->grid_initialized = false;
+ }
+
+ /* Fallback if shader fails or if not using nodetree. */
+ if (grp == NULL) {
+ grp = DRW_shgroup_create(e_data.probe_default_sh, psl->probe_background);
+ DRW_shgroup_uniform_vec3(grp, "color", col, 1);
+ DRW_shgroup_uniform_float(grp, "backgroundAlpha", &stl->g_data->background_alpha, 1);
+ DRW_shgroup_call_add(grp, geom, NULL);
+ }
+ }
+
+ {
+ psl->probe_glossy_compute = DRW_pass_create("LightProbe Glossy Compute", DRW_STATE_WRITE_COLOR);
+
+ struct Gwn_Batch *geom = DRW_cache_fullscreen_quad_get();
+
+ DRWShadingGroup *grp = DRW_shgroup_instance_create(e_data.probe_filter_glossy_sh, psl->probe_glossy_compute, geom);
+ DRW_shgroup_uniform_float(grp, "intensityFac", &pinfo->intensity_fac, 1);
+ DRW_shgroup_uniform_float(grp, "sampleCount", &pinfo->samples_ct, 1);
+ DRW_shgroup_uniform_float(grp, "invSampleCount", &pinfo->invsamples_ct, 1);
+ DRW_shgroup_uniform_float(grp, "roughnessSquared", &pinfo->roughness, 1);
+ DRW_shgroup_uniform_float(grp, "lodFactor", &pinfo->lodfactor, 1);
+ DRW_shgroup_uniform_float(grp, "lodMax", &pinfo->lod_rt_max, 1);
+ DRW_shgroup_uniform_float(grp, "texelSize", &pinfo->texel_size, 1);
+ DRW_shgroup_uniform_float(grp, "paddingSize", &pinfo->padding_size, 1);
+ DRW_shgroup_uniform_int(grp, "Layer", &pinfo->layer, 1);
+ DRW_shgroup_uniform_texture(grp, "texHammersley", e_data.hammersley);
+ // DRW_shgroup_uniform_texture(grp, "texJitter", e_data.jitter);
+ DRW_shgroup_uniform_texture(grp, "probeHdr", sldata->probe_rt);
+
+ DRW_shgroup_set_instance_count(grp, 1);
+ }
+
+ {
+ psl->probe_diffuse_compute = DRW_pass_create("LightProbe Diffuse Compute", DRW_STATE_WRITE_COLOR);
+
+ DRWShadingGroup *grp = DRW_shgroup_create(e_data.probe_filter_diffuse_sh, psl->probe_diffuse_compute);
+#ifdef IRRADIANCE_SH_L2
+ DRW_shgroup_uniform_int(grp, "probeSize", &pinfo->shres, 1);
+#else
+ DRW_shgroup_uniform_float(grp, "sampleCount", &pinfo->samples_ct, 1);
+ DRW_shgroup_uniform_float(grp, "invSampleCount", &pinfo->invsamples_ct, 1);
+ DRW_shgroup_uniform_float(grp, "lodFactor", &pinfo->lodfactor, 1);
+ DRW_shgroup_uniform_float(grp, "lodMax", &pinfo->lod_rt_max, 1);
+ DRW_shgroup_uniform_texture(grp, "texHammersley", e_data.hammersley);
+#endif
+ DRW_shgroup_uniform_float(grp, "intensityFac", &pinfo->intensity_fac, 1);
+ DRW_shgroup_uniform_texture(grp, "probeHdr", sldata->probe_rt);
+
+ struct Gwn_Batch *geom = DRW_cache_fullscreen_quad_get();
+ DRW_shgroup_call_add(grp, geom, NULL);
+ }
+
+ {
+ psl->probe_visibility_compute = DRW_pass_create("LightProbe Visibility Compute", DRW_STATE_WRITE_COLOR);
+
+ DRWShadingGroup *grp = DRW_shgroup_create(e_data.probe_filter_visibility_sh, psl->probe_visibility_compute);
+ DRW_shgroup_uniform_int(grp, "outputSize", &pinfo->shres, 1);
+ DRW_shgroup_uniform_float(grp, "visibilityRange", &pinfo->visibility_range, 1);
+ DRW_shgroup_uniform_float(grp, "visibilityBlur", &pinfo->visibility_blur, 1);
+ DRW_shgroup_uniform_float(grp, "sampleCount", &pinfo->samples_ct, 1);
+ DRW_shgroup_uniform_float(grp, "invSampleCount", &pinfo->invsamples_ct, 1);
+ DRW_shgroup_uniform_float(grp, "storedTexelSize", &pinfo->texel_size, 1);
+ DRW_shgroup_uniform_float(grp, "nearClip", &pinfo->near_clip, 1);
+ DRW_shgroup_uniform_float(grp, "farClip", &pinfo->far_clip, 1);
+ DRW_shgroup_uniform_texture(grp, "texHammersley", e_data.hammersley);
+ DRW_shgroup_uniform_texture(grp, "probeDepth", sldata->probe_depth_rt);
+
+ struct Gwn_Batch *geom = DRW_cache_fullscreen_quad_get();
+ DRW_shgroup_call_add(grp, geom, NULL);
+ }
+
+ {
+ psl->probe_grid_fill = DRW_pass_create("LightProbe Grid Floodfill", DRW_STATE_WRITE_COLOR);
+
+ DRWShadingGroup *grp = DRW_shgroup_create(e_data.probe_grid_fill_sh, psl->probe_grid_fill);
+ DRW_shgroup_uniform_buffer(grp, "irradianceGrid", &sldata->irradiance_pool);
+
+ struct Gwn_Batch *geom = DRW_cache_fullscreen_quad_get();
+ DRW_shgroup_call_add(grp, geom, NULL);
+ }
+
+ {
+ DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_CULL_BACK;
+ psl->probe_display = DRW_pass_create("LightProbe Display", state);
+
+ struct Gwn_Batch *geom = DRW_cache_sphere_get();
+ DRWShadingGroup *grp = stl->g_data->cube_display_shgrp = DRW_shgroup_instance_create(e_data.probe_cube_display_sh, psl->probe_display, geom);
+ DRW_shgroup_attrib_float(grp, "probe_id", 1); /* XXX this works because we are still uploading 4bytes and using the right stride */
+ DRW_shgroup_attrib_float(grp, "probe_location", 3);
+ DRW_shgroup_attrib_float(grp, "sphere_size", 1);
+ DRW_shgroup_uniform_buffer(grp, "probeCubes", &sldata->probe_pool);
+ DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
+
+ geom = DRW_cache_quad_get();
+ grp = stl->g_data->planar_display_shgrp = DRW_shgroup_instance_create(e_data.probe_planar_display_sh, psl->probe_display, geom);
+ DRW_shgroup_attrib_float(grp, "probe_id", 1); /* XXX this works because we are still uploading 4bytes and using the right stride */
+ DRW_shgroup_attrib_float(grp, "probe_mat", 16);
+ DRW_shgroup_uniform_buffer(grp, "probePlanars", &txl->planar_pool);
+ }
+
+ {
+ psl->probe_planar_downsample_ps = DRW_pass_create("LightProbe Planar Downsample", DRW_STATE_WRITE_COLOR);
+
+ struct Gwn_Batch *geom = DRW_cache_fullscreen_quad_get();
+ DRWShadingGroup *grp = stl->g_data->planar_downsample = DRW_shgroup_instance_create(e_data.probe_planar_downsample_sh, psl->probe_planar_downsample_ps, geom);
+ DRW_shgroup_uniform_buffer(grp, "source", &txl->planar_pool);
+ DRW_shgroup_uniform_float(grp, "fireflyFactor", &sldata->common_data.ssr_firefly_fac, 1);
+ }
+}
+
+void EEVEE_lightprobes_cache_add(EEVEE_ViewLayerData *sldata, Object *ob)
+{
+ EEVEE_LightProbesInfo *pinfo = sldata->probes;
+ LightProbe *probe = (LightProbe *)ob->data;
+
+ /* Step 1 find all lamps in the scene and setup them */
+ if ((probe->type == LIGHTPROBE_TYPE_CUBE && pinfo->num_cube >= MAX_PROBE) ||
+ (probe->type == LIGHTPROBE_TYPE_GRID && pinfo->num_grid >= MAX_PROBE))
+ {
+ printf("Too much probes in the scene !!!\n");
+ return;
+ }
+
+ EEVEE_LightProbeEngineData *ped = EEVEE_lightprobe_data_ensure(ob);
+
+ ped->num_cell = probe->grid_resolution_x * probe->grid_resolution_y * probe->grid_resolution_z;
+
+ if ((probe->type == LIGHTPROBE_TYPE_GRID) &&
+ ((pinfo->total_irradiance_samples + ped->num_cell) >= MAX_IRRADIANCE_SAMPLES))
+ {
+ printf("Too much grid samples !!!\n");
+ return;
+ }
+
+ if (ped->need_full_update) {
+ ped->need_full_update = false;
+
+ ped->need_update = true;
+ ped->probe_id = 0;
+ if (probe->type == LIGHTPROBE_TYPE_GRID) {
+ ped->updated_cells = 0;
+ ped->updated_lvl = 0;
+ pinfo->updated_bounce = 0;
+ pinfo->grid_initialized = false;
+ }
+ }
+
+ if (e_data.update_world) {
+ ped->need_update = true;
+ ped->updated_cells = 0;
+ ped->updated_lvl = 0;
+ ped->probe_id = 0;
+ }
+
+ pinfo->do_cube_update |= ped->need_update;
+
+ if (probe->type == LIGHTPROBE_TYPE_CUBE) {
+ pinfo->probes_cube_ref[pinfo->num_cube] = ob;
+ pinfo->num_cube++;
+ }
+ else if (probe->type == LIGHTPROBE_TYPE_PLANAR) {
+ pinfo->probes_planar_ref[pinfo->num_planar] = ob;
+ pinfo->num_planar++;
+ }
+ else { /* GRID */
+ pinfo->probes_grid_ref[pinfo->num_grid] = ob;
+ pinfo->num_grid++;
+ pinfo->total_irradiance_samples += ped->num_cell;
+ }
+}
+
+/* TODO find a nice name to push it to math_matrix.c */
+static void scale_m4_v3(float R[4][4], float v[3])
+{
+ for (int i = 0; i < 4; ++i)
+ mul_v3_v3(R[i], v);
+}
+
+static void EEVEE_planar_reflections_updates(EEVEE_ViewLayerData *sldata, EEVEE_StorageList *stl)
+{
+ EEVEE_LightProbesInfo *pinfo = sldata->probes;
+ Object *ob;
+ float mtx[4][4], normat[4][4], imat[4][4], rangemat[4][4];
+
+ float viewmat[4][4], winmat[4][4];
+ DRW_viewport_matrix_get(viewmat, DRW_MAT_VIEW);
+ DRW_viewport_matrix_get(winmat, DRW_MAT_WIN);
+
+ zero_m4(rangemat);
+ rangemat[0][0] = rangemat[1][1] = rangemat[2][2] = 0.5f;
+ rangemat[3][0] = rangemat[3][1] = rangemat[3][2] = 0.5f;
+ rangemat[3][3] = 1.0f;
+
+ /* PLANAR REFLECTION */
+ for (int i = 0; (ob = pinfo->probes_planar_ref[i]) && (i < MAX_PLANAR); i++) {
+ LightProbe *probe = (LightProbe *)ob->data;
+ EEVEE_PlanarReflection *eplanar = &pinfo->planar_data[i];
+ EEVEE_LightProbeEngineData *ped = EEVEE_lightprobe_data_ensure(ob);
+
+ /* Computing mtx : matrix that mirror position around object's XY plane. */
+ normalize_m4_m4(normat, ob->obmat); /* object > world */
+ invert_m4_m4(imat, normat); /* world > object */
+
+ float reflect[3] = {1.0f, 1.0f, -1.0f}; /* XY reflection plane */
+ scale_m4_v3(imat, reflect); /* world > object > mirrored obj */
+ mul_m4_m4m4(mtx, normat, imat); /* world > object > mirrored obj > world */
+
+ /* Reflect Camera Matrix. */
+ mul_m4_m4m4(ped->viewmat, viewmat, mtx);
+
+ /* TODO FOV margin */
+ float winmat_fov[4][4];
+ copy_m4_m4(winmat_fov, winmat);
+
+ /* Apply Perspective Matrix. */
+ mul_m4_m4m4(ped->persmat, winmat_fov, ped->viewmat);
+
+ /* This is the matrix used to reconstruct texture coordinates.
+ * We use the original view matrix because it does not create
+ * visual artifacts if receiver is not perfectly aligned with
+ * the planar reflection probe. */
+ mul_m4_m4m4(eplanar->reflectionmat, winmat_fov, viewmat); /* TODO FOV margin */
+ /* Convert from [-1, 1] to [0, 1] (NDC to Texture coord). */
+ mul_m4_m4m4(eplanar->reflectionmat, rangemat, eplanar->reflectionmat);
+
+ /* TODO frustum check. */
+ ped->need_update = true;
+
+ /* Compute clip plane equation / normal. */
+ float refpoint[3];
+ copy_v3_v3(eplanar->plane_equation, ob->obmat[2]);
+ normalize_v3(eplanar->plane_equation); /* plane normal */
+ eplanar->plane_equation[3] = -dot_v3v3(eplanar->plane_equation, ob->obmat[3]);
+
+ /* Compute offset plane equation (fix missing texels near reflection plane). */
+ copy_v3_v3(ped->planer_eq_offset, eplanar->plane_equation);
+ mul_v3_v3fl(refpoint, eplanar->plane_equation, -probe->clipsta);
+ add_v3_v3(refpoint, ob->obmat[3]);
+ ped->planer_eq_offset[3] = -dot_v3v3(eplanar->plane_equation, refpoint);
+
+ /* Compute XY clip planes. */
+ normalize_v3_v3(eplanar->clip_vec_x, ob->obmat[0]);
+ normalize_v3_v3(eplanar->clip_vec_y, ob->obmat[1]);
+
+ float vec[3] = {0.0f, 0.0f, 0.0f};
+ vec[0] = 1.0f; vec[1] = 0.0f; vec[2] = 0.0f;
+ mul_m4_v3(ob->obmat, vec); /* Point on the edge */
+ eplanar->clip_edge_x_pos = dot_v3v3(eplanar->clip_vec_x, vec);
+
+ vec[0] = 0.0f; vec[1] = 1.0f; vec[2] = 0.0f;
+ mul_m4_v3(ob->obmat, vec); /* Point on the edge */
+ eplanar->clip_edge_y_pos = dot_v3v3(eplanar->clip_vec_y, vec);
+
+ vec[0] = -1.0f; vec[1] = 0.0f; vec[2] = 0.0f;
+ mul_m4_v3(ob->obmat, vec); /* Point on the edge */
+ eplanar->clip_edge_x_neg = dot_v3v3(eplanar->clip_vec_x, vec);
+
+ vec[0] = 0.0f; vec[1] = -1.0f; vec[2] = 0.0f;
+ mul_m4_v3(ob->obmat, vec); /* Point on the edge */
+ eplanar->clip_edge_y_neg = dot_v3v3(eplanar->clip_vec_y, vec);
+
+ /* Facing factors */
+ float max_angle = max_ff(1e-2f, probe->falloff) * M_PI * 0.5f;
+ float min_angle = 0.0f;
+ eplanar->facing_scale = 1.0f / max_ff(1e-8f, cosf(min_angle) - cosf(max_angle));
+ eplanar->facing_bias = -min_ff(1.0f - 1e-8f, cosf(max_angle)) * eplanar->facing_scale;
+
+ /* Distance factors */
+ float max_dist = probe->distinf;
+ float min_dist = min_ff(1.0f - 1e-8f, 1.0f - probe->falloff) * probe->distinf;
+ eplanar->attenuation_scale = -1.0f / max_ff(1e-8f, max_dist - min_dist);
+ eplanar->attenuation_bias = max_dist * -eplanar->attenuation_scale;
+
+ /* Debug Display */
+ if (DRW_state_draw_support() &&
+ (probe->flag & LIGHTPROBE_FLAG_SHOW_DATA))
+ {
+ DRW_shgroup_call_dynamic_add(stl->g_data->planar_display_shgrp, &ped->probe_id, ob->obmat);
+ }
+ }
+}
+
+static void EEVEE_lightprobes_updates(EEVEE_ViewLayerData *sldata, EEVEE_PassList *psl, EEVEE_StorageList *stl)
+{
+ EEVEE_LightProbesInfo *pinfo = sldata->probes;
+ Object *ob;
+
+ /* CUBE REFLECTION */
+ for (int i = 1; (ob = pinfo->probes_cube_ref[i]) && (i < MAX_PROBE); i++) {
+ LightProbe *probe = (LightProbe *)ob->data;
+ EEVEE_LightProbe *eprobe = &pinfo->probe_data[i];
+ EEVEE_LightProbeEngineData *ped = EEVEE_lightprobe_data_ensure(ob);
+
+ /* Update transforms */
+ copy_v3_v3(eprobe->position, ob->obmat[3]);
+
+ /* Attenuation */
+ eprobe->attenuation_type = probe->attenuation_type;
+ eprobe->attenuation_fac = 1.0f / max_ff(1e-8f, probe->falloff);
+
+ unit_m4(eprobe->attenuationmat);
+ scale_m4_fl(eprobe->attenuationmat, probe->distinf);
+ mul_m4_m4m4(eprobe->attenuationmat, ob->obmat, eprobe->attenuationmat);
+ invert_m4(eprobe->attenuationmat);
+
+ /* Parallax */
+ float dist;
+ if ((probe->flag & LIGHTPROBE_FLAG_CUSTOM_PARALLAX) != 0) {
+ eprobe->parallax_type = probe->parallax_type;
+ dist = probe->distpar;
+ }
+ else {
+ eprobe->parallax_type = probe->attenuation_type;
+ dist = probe->distinf;
+ }
+
+ unit_m4(eprobe->parallaxmat);
+ scale_m4_fl(eprobe->parallaxmat, dist);
+ mul_m4_m4m4(eprobe->parallaxmat, ob->obmat, eprobe->parallaxmat);
+ invert_m4(eprobe->parallaxmat);
+
+ /* Debug Display */
+ if (DRW_state_draw_support() &&
+ (probe->flag & LIGHTPROBE_FLAG_SHOW_DATA))
+ {
+ ped->probe_size = probe->data_draw_size * 0.1f;
+ DRW_shgroup_call_dynamic_add(
+ stl->g_data->cube_display_shgrp, &ped->probe_id, ob->obmat[3], &ped->probe_size);
+ }
+ }
+
+ /* IRRADIANCE GRID */
+ int offset = 1; /* to account for the world probe */
+ for (int i = 1; (ob = pinfo->probes_grid_ref[i]) && (i < MAX_GRID); i++) {
+ LightProbe *probe = (LightProbe *)ob->data;
+ EEVEE_LightGrid *egrid = &pinfo->grid_data[i];
+ EEVEE_LightProbeEngineData *ped = EEVEE_lightprobe_data_ensure(ob);
+
+ /* If one grid has move we need to recompute all the lighting. */
+ if (!pinfo->grid_initialized) {
+ ped->updated_cells = 0;
+ ped->updated_lvl = 0;
+ ped->need_update = true;
+ }
+
+ /* Add one for level 0 */
+ ped->max_lvl = 1.0f + floorf(log2f((float)MAX3(probe->grid_resolution_x,
+ probe->grid_resolution_y,
+ probe->grid_resolution_z)));
+
+ egrid->offset = offset;
+ float fac = 1.0f / max_ff(1e-8f, probe->falloff);
+ egrid->attenuation_scale = fac / max_ff(1e-8f, probe->distinf);
+ egrid->attenuation_bias = fac;
+
+ /* Set offset for the next grid */
+ offset += ped->num_cell;
+
+ /* Update transforms */
+ float cell_dim[3], half_cell_dim[3];
+ cell_dim[0] = 2.0f / (float)(probe->grid_resolution_x);
+ cell_dim[1] = 2.0f / (float)(probe->grid_resolution_y);
+ cell_dim[2] = 2.0f / (float)(probe->grid_resolution_z);
+
+ mul_v3_v3fl(half_cell_dim, cell_dim, 0.5f);
+
+ /* Matrix converting world space to cell ranges. */
+ invert_m4_m4(egrid->mat, ob->obmat);
+
+ /* First cell. */
+ copy_v3_fl(egrid->corner, -1.0f);
+ add_v3_v3(egrid->corner, half_cell_dim);
+ mul_m4_v3(ob->obmat, egrid->corner);
+
+ /* Opposite neighbor cell. */
+ copy_v3_fl3(egrid->increment_x, cell_dim[0], 0.0f, 0.0f);
+ add_v3_v3(egrid->increment_x, half_cell_dim);
+ add_v3_fl(egrid->increment_x, -1.0f);
+ mul_m4_v3(ob->obmat, egrid->increment_x);
+ sub_v3_v3(egrid->increment_x, egrid->corner);
+
+ copy_v3_fl3(egrid->increment_y, 0.0f, cell_dim[1], 0.0f);
+ add_v3_v3(egrid->increment_y, half_cell_dim);
+ add_v3_fl(egrid->increment_y, -1.0f);
+ mul_m4_v3(ob->obmat, egrid->increment_y);
+ sub_v3_v3(egrid->increment_y, egrid->corner);
+
+ copy_v3_fl3(egrid->increment_z, 0.0f, 0.0f, cell_dim[2]);
+ add_v3_v3(egrid->increment_z, half_cell_dim);
+ add_v3_fl(egrid->increment_z, -1.0f);
+ mul_m4_v3(ob->obmat, egrid->increment_z);
+ sub_v3_v3(egrid->increment_z, egrid->corner);
+
+ copy_v3_v3_int(egrid->resolution, &probe->grid_resolution_x);
+
+ /* Visibility bias */
+ egrid->visibility_bias = 0.05f * probe->vis_bias;
+ egrid->visibility_bleed = probe->vis_bleedbias;
+ egrid->visibility_range = max_ff(max_ff(len_v3(egrid->increment_x),
+ len_v3(egrid->increment_y)),
+ len_v3(egrid->increment_z)) + 1.0f;
+
+ /* Debug Display */
+ if (DRW_state_draw_support() &&
+ (probe->flag & LIGHTPROBE_FLAG_SHOW_DATA))
+ {
+ struct Gwn_Batch *geom = DRW_cache_sphere_get();
+ DRWShadingGroup *grp = DRW_shgroup_instance_create(e_data.probe_grid_display_sh, psl->probe_display, geom);
+ DRW_shgroup_set_instance_count(grp, ped->num_cell);
+ DRW_shgroup_uniform_int(grp, "offset", &egrid->offset, 1);
+ DRW_shgroup_uniform_ivec3(grp, "grid_resolution", egrid->resolution, 1);
+ DRW_shgroup_uniform_vec3(grp, "corner", egrid->corner, 1);
+ DRW_shgroup_uniform_vec3(grp, "increment_x", egrid->increment_x, 1);
+ DRW_shgroup_uniform_vec3(grp, "increment_y", egrid->increment_y, 1);
+ DRW_shgroup_uniform_vec3(grp, "increment_z", egrid->increment_z, 1);
+ DRW_shgroup_uniform_buffer(grp, "irradianceGrid", &sldata->irradiance_pool);
+ DRW_shgroup_uniform_float(grp, "sphere_size", &probe->data_draw_size, 1);
+ }
+ }
+}
+
+void EEVEE_lightprobes_cache_finish(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
+{
+ EEVEE_CommonUniformBuffer *common_data = &sldata->common_data;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_LightProbesInfo *pinfo = sldata->probes;
+ Object *ob;
+
+ /* Setup enough layers. */
+ /* Free textures if number mismatch. */
+ if (pinfo->num_cube != pinfo->cache_num_cube) {
+ DRW_TEXTURE_FREE_SAFE(sldata->probe_pool);
+ }
+
+ if (pinfo->num_planar != pinfo->cache_num_planar) {
+ DRW_TEXTURE_FREE_SAFE(vedata->txl->planar_pool);
+ DRW_TEXTURE_FREE_SAFE(vedata->txl->planar_depth);
+ pinfo->cache_num_planar = pinfo->num_planar;
+ }
+
+ int irr_size[3];
+ irradiance_pool_size_get(common_data->prb_irradiance_vis_size, pinfo->total_irradiance_samples, irr_size);
+
+ if ((irr_size[0] != pinfo->cache_irradiance_size[0]) ||
+ (irr_size[1] != pinfo->cache_irradiance_size[1]) ||
+ (irr_size[2] != pinfo->cache_irradiance_size[2]))
+ {
+ DRW_TEXTURE_FREE_SAFE(sldata->irradiance_pool);
+ DRW_TEXTURE_FREE_SAFE(sldata->irradiance_rt);
+ copy_v3_v3_int(pinfo->cache_irradiance_size, irr_size);
+ }
+
+ /* XXX this should be run each frame as it ensure planar_depth is set */
+ planar_pool_ensure_alloc(vedata, pinfo->num_planar);
+
+ /* Setup planar filtering pass */
+ DRW_shgroup_set_instance_count(stl->g_data->planar_downsample, pinfo->num_planar);
+
+ if (!sldata->probe_pool) {
+ sldata->probe_pool = DRW_texture_create_2D_array(pinfo->cubemap_res, pinfo->cubemap_res, max_ff(1, pinfo->num_cube),
+ DRW_TEX_RGB_11_11_10, DRW_TEX_FILTER | DRW_TEX_MIPMAP, NULL);
+ if (sldata->probe_filter_fb) {
+ DRW_framebuffer_texture_attach(sldata->probe_filter_fb, sldata->probe_pool, 0, 0);
+ }
+
+ /* Tag probes to refresh */
+ e_data.update_world |= PROBE_UPDATE_CUBE;
+ common_data->prb_num_render_cube = 0;
+ pinfo->cache_num_cube = pinfo->num_cube;
+
+ for (int i = 1; (ob = pinfo->probes_cube_ref[i]) && (i < MAX_PROBE); i++) {
+ EEVEE_LightProbeEngineData *ped = EEVEE_lightprobe_data_ensure(ob);
+ ped->need_update = true;
+ ped->ready_to_shade = false;
+ ped->probe_id = 0;
+ }
+ }
+
+ DRWFboTexture tex_filter = {&sldata->probe_pool, DRW_TEX_RGBA_16, DRW_TEX_FILTER | DRW_TEX_MIPMAP};
+
+ DRW_framebuffer_init(&sldata->probe_filter_fb, &draw_engine_eevee_type, pinfo->cubemap_res, pinfo->cubemap_res, &tex_filter, 1);
+
+
+#ifdef IRRADIANCE_SH_L2
+ /* we need a signed format for Spherical Harmonics */
+ int irradiance_format = DRW_TEX_RGBA_16;
+#else
+ int irradiance_format = DRW_TEX_RGBA_8;
+#endif
+
+ if (!sldata->irradiance_pool || !sldata->irradiance_rt) {
+ if (!sldata->irradiance_pool) {
+ sldata->irradiance_pool = DRW_texture_create_2D_array(irr_size[0], irr_size[1], irr_size[2],
+ irradiance_format, DRW_TEX_FILTER, NULL);
+ }
+ if (!sldata->irradiance_rt) {
+ sldata->irradiance_rt = DRW_texture_create_2D_array(irr_size[0], irr_size[1], irr_size[2],
+ irradiance_format, DRW_TEX_FILTER, NULL);
+ }
+ common_data->prb_num_render_grid = 0;
+ pinfo->updated_bounce = 0;
+ pinfo->grid_initialized = false;
+ e_data.update_world |= PROBE_UPDATE_GRID;
+
+ for (int i = 1; (ob = pinfo->probes_grid_ref[i]) && (i < MAX_PROBE); i++) {
+ EEVEE_LightProbeEngineData *ped = EEVEE_lightprobe_data_ensure(ob);
+ ped->need_update = true;
+ ped->updated_cells = 0;
+ }
+ }
+
+ if (common_data->prb_num_render_grid > pinfo->num_grid) {
+ /* This can happen when deleting a probe. */
+ common_data->prb_num_render_grid = pinfo->num_grid;
+ }
+
+ EEVEE_lightprobes_updates(sldata, vedata->psl, vedata->stl);
+ EEVEE_planar_reflections_updates(sldata, vedata->stl);
+
+ DRW_uniformbuffer_update(sldata->probe_ubo, &sldata->probes->probe_data);
+ DRW_uniformbuffer_update(sldata->grid_ubo, &sldata->probes->grid_data);
+ DRW_uniformbuffer_update(sldata->planar_ubo, &sldata->probes->planar_data);
+}
+
+static void downsample_planar(void *vedata, int level)
+{
+ EEVEE_PassList *psl = ((EEVEE_Data *)vedata)->psl;
+ EEVEE_StorageList *stl = ((EEVEE_Data *)vedata)->stl;
+
+ const float *size = DRW_viewport_size_get();
+ copy_v2_v2(stl->g_data->planar_texel_size, size);
+ for (int i = 0; i < level - 1; ++i) {
+ stl->g_data->planar_texel_size[0] /= 2.0f;
+ stl->g_data->planar_texel_size[1] /= 2.0f;
+ min_ff(floorf(stl->g_data->planar_texel_size[0]), 1.0f);
+ min_ff(floorf(stl->g_data->planar_texel_size[1]), 1.0f);
+ }
+ invert_v2(stl->g_data->planar_texel_size);
+
+ DRW_draw_pass(psl->probe_planar_downsample_ps);
+}
+
+/* Glossy filter probe_rt to probe_pool at index probe_idx */
+static void glossy_filter_probe(
+ EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, EEVEE_PassList *psl, int probe_idx, float intensity)
+{
+ EEVEE_LightProbesInfo *pinfo = sldata->probes;
+
+ pinfo->intensity_fac = intensity;
+
+ /* Max lod used from the render target probe */
+ pinfo->lod_rt_max = floorf(log2f(pinfo->target_size)) - 2.0f;
+
+ /* 2 - Let gpu create Mipmaps for Filtered Importance Sampling. */
+ /* Bind next framebuffer to be able to gen. mips for probe_rt. */
+ DRW_framebuffer_bind(sldata->probe_filter_fb);
+ EEVEE_downsample_cube_buffer(vedata, sldata->probe_filter_fb, sldata->probe_rt, (int)(pinfo->lod_rt_max));
+
+ /* 3 - Render to probe array to the specified layer, do prefiltering. */
+ /* Detach to rebind the right mipmap. */
+ DRW_framebuffer_texture_detach(sldata->probe_pool);
+ float mipsize = pinfo->cubemap_res;
+ const int maxlevel = (int)floorf(log2f(pinfo->cubemap_res));
+ const int min_lod_level = 3;
+ for (int i = 0; i < maxlevel - min_lod_level; i++) {
+ float bias = (i == 0) ? -1.0f : 1.0f;
+ pinfo->texel_size = 1.0f / mipsize;
+ pinfo->padding_size = powf(2.0f, (float)(maxlevel - min_lod_level - 1 - i));
+ /* XXX : WHY THE HECK DO WE NEED THIS ??? */
+ /* padding is incorrect without this! float precision issue? */
+ if (pinfo->padding_size > 32) {
+ pinfo->padding_size += 5;
+ }
+ if (pinfo->padding_size > 16) {
+ pinfo->padding_size += 4;
+ }
+ else if (pinfo->padding_size > 8) {
+ pinfo->padding_size += 2;
+ }
+ else if (pinfo->padding_size > 4) {
+ pinfo->padding_size += 1;
+ }
+ pinfo->layer = probe_idx;
+ pinfo->roughness = (float)i / ((float)maxlevel - 4.0f);
+ pinfo->roughness *= pinfo->roughness; /* Disney Roughness */
+ pinfo->roughness *= pinfo->roughness; /* Distribute Roughness accros lod more evenly */
+ CLAMP(pinfo->roughness, 1e-8f, 0.99999f); /* Avoid artifacts */
+
+#if 1 /* Variable Sample count (fast) */
+ switch (i) {
+ case 0: pinfo->samples_ct = 1.0f; break;
+ case 1: pinfo->samples_ct = 16.0f; break;
+ case 2: pinfo->samples_ct = 32.0f; break;
+ case 3: pinfo->samples_ct = 64.0f; break;
+ default: pinfo->samples_ct = 128.0f; break;
+ }
+#else /* Constant Sample count (slow) */
+ pinfo->samples_ct = 1024.0f;
+#endif
+
+ pinfo->invsamples_ct = 1.0f / pinfo->samples_ct;
+ pinfo->lodfactor = bias + 0.5f * log((float)(pinfo->target_size * pinfo->target_size) * pinfo->invsamples_ct) / log(2);
+
+ DRW_framebuffer_texture_attach(sldata->probe_filter_fb, sldata->probe_pool, 0, i);
+ DRW_framebuffer_viewport_size(sldata->probe_filter_fb, 0, 0, mipsize, mipsize);
+ DRW_draw_pass(psl->probe_glossy_compute);
+ DRW_framebuffer_texture_detach(sldata->probe_pool);
+
+ mipsize /= 2;
+ CLAMP_MIN(mipsize, 1);
+ }
+ /* For shading, save max level of the octahedron map */
+ sldata->common_data.prb_lod_cube_max = (float)(maxlevel - min_lod_level) - 1.0f;
+
+ /* reattach to have a valid framebuffer. */
+ DRW_framebuffer_texture_attach(sldata->probe_filter_fb, sldata->probe_pool, 0, 0);
+}
+
+/* Diffuse filter probe_rt to irradiance_pool at index probe_idx */
+static void diffuse_filter_probe(
+ EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, EEVEE_PassList *psl, int offset,
+ float clipsta, float clipend, float vis_range, float vis_blur, float intensity)
+{
+ EEVEE_CommonUniformBuffer *common_data = &sldata->common_data;
+ EEVEE_LightProbesInfo *pinfo = sldata->probes;
+
+ pinfo->intensity_fac = intensity;
+
+ int pool_size[3];
+ irradiance_pool_size_get(common_data->prb_irradiance_vis_size, pinfo->total_irradiance_samples, pool_size);
+
+ /* find cell position on the virtual 3D texture */
+ /* NOTE : Keep in sync with load_irradiance_cell() */
+#if defined(IRRADIANCE_SH_L2)
+ int size[2] = {3, 3};
+#elif defined(IRRADIANCE_CUBEMAP)
+ int size[2] = {8, 8};
+ pinfo->samples_ct = 1024.0f;
+#elif defined(IRRADIANCE_HL2)
+ int size[2] = {3, 2};
+ pinfo->samples_ct = 1024.0f;
+#endif
+
+ int cell_per_row = pool_size[0] / size[0];
+ int x = size[0] * (offset % cell_per_row);
+ int y = size[1] * (offset / cell_per_row);
+
+#ifndef IRRADIANCE_SH_L2
+ /* Tweaking parameters to balance perf. vs precision */
+ const float bias = 0.0f;
+ pinfo->invsamples_ct = 1.0f / pinfo->samples_ct;
+ pinfo->lodfactor = bias + 0.5f * log((float)(pinfo->target_size * pinfo->target_size) * pinfo->invsamples_ct) / log(2);
+ pinfo->lod_rt_max = floorf(log2f(pinfo->target_size)) - 2.0f;
+#else
+ pinfo->shres = 32; /* Less texture fetches & reduce branches */
+ pinfo->lod_rt_max = 2.0f; /* Improve cache reuse */
+#endif
+
+ /* 4 - Compute spherical harmonics */
+ DRW_framebuffer_bind(sldata->probe_filter_fb);
+ EEVEE_downsample_cube_buffer(vedata, sldata->probe_filter_fb, sldata->probe_rt, (int)(pinfo->lod_rt_max));
+
+ DRW_framebuffer_texture_detach(sldata->probe_pool);
+ DRW_framebuffer_texture_layer_attach(sldata->probe_filter_fb, sldata->irradiance_rt, 0, 0, 0);
+
+ DRW_framebuffer_viewport_size(sldata->probe_filter_fb, x, y, size[0], size[1]);
+ DRW_draw_pass(psl->probe_diffuse_compute);
+
+ /* World irradiance have no visibility */
+ if (offset > 0) {
+ /* Compute visibility */
+ pinfo->samples_ct = 512.0f; /* TODO refine */
+ pinfo->invsamples_ct = 1.0f / pinfo->samples_ct;
+ pinfo->shres = common_data->prb_irradiance_vis_size;
+ pinfo->visibility_range = vis_range;
+ pinfo->visibility_blur = vis_blur;
+ pinfo->near_clip = -clipsta;
+ pinfo->far_clip = -clipend;
+ pinfo->texel_size = 1.0f / (float)common_data->prb_irradiance_vis_size;
+
+ int cell_per_col = pool_size[1] / common_data->prb_irradiance_vis_size;
+ cell_per_row = pool_size[0] / common_data->prb_irradiance_vis_size;
+ x = common_data->prb_irradiance_vis_size * (offset % cell_per_row);
+ y = common_data->prb_irradiance_vis_size * ((offset / cell_per_row) % cell_per_col);
+ int layer = 1 + ((offset / cell_per_row) / cell_per_col);
+
+ DRW_framebuffer_texture_detach(sldata->irradiance_rt);
+ DRW_framebuffer_texture_layer_attach(sldata->probe_filter_fb, sldata->irradiance_rt, 0, layer, 0);
+
+ DRW_framebuffer_viewport_size(sldata->probe_filter_fb, x, y, common_data->prb_irradiance_vis_size,
+ common_data->prb_irradiance_vis_size);
+ DRW_draw_pass(psl->probe_visibility_compute);
+ }
+
+ /* reattach to have a valid framebuffer. */
+ DRW_framebuffer_texture_detach(sldata->irradiance_rt);
+ DRW_framebuffer_texture_attach(sldata->probe_filter_fb, sldata->probe_pool, 0, 0);
+}
+
+/* Render the scene to the probe_rt texture. */
+static void render_scene_to_probe(
+ EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata,
+ const float pos[3], float clipsta, float clipend)
+{
+ EEVEE_TextureList *txl = vedata->txl;
+ EEVEE_PassList *psl = vedata->psl;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_LightProbesInfo *pinfo = sldata->probes;
+
+ float winmat[4][4], wininv[4][4], posmat[4][4];
+
+ unit_m4(posmat);
+
+ /* Move to capture position */
+ negate_v3_v3(posmat[3], pos);
+
+ /* 1 - Render to each cubeface individually.
+ * We do this instead of using geometry shader because a) it's faster,
+ * b) it's easier than fixing the nodetree shaders (for view dependant effects). */
+ pinfo->layer = 0;
+ perspective_m4(winmat, -clipsta, clipsta, -clipsta, clipsta, clipsta, clipend);
+
+ /* Avoid using the texture attached to framebuffer when rendering. */
+ /* XXX */
+ GPUTexture *tmp_planar_pool = txl->planar_pool;
+ GPUTexture *tmp_minz = stl->g_data->minzbuffer;
+ GPUTexture *tmp_maxz = txl->maxzbuffer;
+ txl->planar_pool = e_data.planar_pool_placeholder;
+ stl->g_data->minzbuffer = e_data.depth_placeholder;
+ txl->maxzbuffer = e_data.depth_placeholder;
+
+ /* Update common uniforms */
+ DRW_uniformbuffer_update(sldata->common_ubo, &sldata->common_data);
+
+ /* Detach to rebind the right cubeface. */
+ DRW_framebuffer_bind(sldata->probe_fb);
+ DRW_framebuffer_texture_detach(sldata->probe_rt);
+ DRW_framebuffer_texture_detach(sldata->probe_depth_rt);
+ for (int i = 0; i < 6; ++i) {
+ float viewmat[4][4], persmat[4][4];
+ float viewinv[4][4], persinv[4][4];
+
+ /* Setup custom matrices */
+ mul_m4_m4m4(viewmat, cubefacemat[i], posmat);
+ mul_m4_m4m4(persmat, winmat, viewmat);
+ invert_m4_m4(persinv, persmat);
+ invert_m4_m4(viewinv, viewmat);
+ invert_m4_m4(wininv, winmat);
+
+ DRW_viewport_matrix_override_set(persmat, DRW_MAT_PERS);
+ DRW_viewport_matrix_override_set(persinv, DRW_MAT_PERSINV);
+ DRW_viewport_matrix_override_set(viewmat, DRW_MAT_VIEW);
+ DRW_viewport_matrix_override_set(viewinv, DRW_MAT_VIEWINV);
+ DRW_viewport_matrix_override_set(winmat, DRW_MAT_WIN);
+ DRW_viewport_matrix_override_set(wininv, DRW_MAT_WININV);
+
+ /* Be sure that cascaded shadow maps are updated. */
+ EEVEE_draw_shadows(sldata, psl);
+
+ DRW_framebuffer_cubeface_attach(sldata->probe_fb, sldata->probe_rt, 0, i, 0);
+ DRW_framebuffer_cubeface_attach(sldata->probe_fb, sldata->probe_depth_rt, 0, i, 0);
+ DRW_framebuffer_viewport_size(sldata->probe_fb, 0, 0, pinfo->target_size, pinfo->target_size);
+
+ DRW_framebuffer_clear(false, true, false, NULL, 1.0);
+
+ /* Depth prepass */
+ DRW_draw_pass(psl->depth_pass);
+ DRW_draw_pass(psl->depth_pass_cull);
+
+ DRW_draw_pass(psl->probe_background);
+
+ // EEVEE_create_minmax_buffer(vedata, sldata->probe_depth_rt);
+
+ /* Rebind Planar FB */
+ DRW_framebuffer_bind(sldata->probe_fb);
+
+ /* Shading pass */
+ EEVEE_draw_default_passes(psl);
+ DRW_draw_pass(psl->material_pass);
+ DRW_draw_pass(psl->sss_pass); /* Only output standard pass */
+
+ DRW_framebuffer_texture_detach(sldata->probe_rt);
+ DRW_framebuffer_texture_detach(sldata->probe_depth_rt);
+ }
+ DRW_framebuffer_texture_attach(sldata->probe_fb, sldata->probe_rt, 0, 0);
+ DRW_framebuffer_texture_attach(sldata->probe_fb, sldata->probe_depth_rt, 0, 0);
+
+ DRW_viewport_matrix_override_unset(DRW_MAT_PERS);
+ DRW_viewport_matrix_override_unset(DRW_MAT_PERSINV);
+ DRW_viewport_matrix_override_unset(DRW_MAT_VIEW);
+ DRW_viewport_matrix_override_unset(DRW_MAT_VIEWINV);
+ DRW_viewport_matrix_override_unset(DRW_MAT_WIN);
+ DRW_viewport_matrix_override_unset(DRW_MAT_WININV);
+
+ /* Restore */
+ txl->planar_pool = tmp_planar_pool;
+ stl->g_data->minzbuffer = tmp_minz;
+ txl->maxzbuffer = tmp_maxz;
+}
+
+static void render_scene_to_planar(
+ EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, int layer,
+ float (*viewmat)[4], float (*persmat)[4],
+ float clip_plane[4])
+{
+ EEVEE_FramebufferList *fbl = vedata->fbl;
+ EEVEE_TextureList *txl = vedata->txl;
+ EEVEE_PassList *psl = vedata->psl;
+
+ float viewinv[4][4];
+ float persinv[4][4];
+
+ invert_m4_m4(viewinv, viewmat);
+ invert_m4_m4(persinv, persmat);
+
+ DRW_viewport_matrix_override_set(persmat, DRW_MAT_PERS);
+ DRW_viewport_matrix_override_set(persinv, DRW_MAT_PERSINV);
+ DRW_viewport_matrix_override_set(viewmat, DRW_MAT_VIEW);
+ DRW_viewport_matrix_override_set(viewinv, DRW_MAT_VIEWINV);
+
+ /* Since we are rendering with an inverted view matrix, we need
+ * to invert the facing for backface culling to be the same. */
+ DRW_state_invert_facing();
+
+ /* Be sure that cascaded shadow maps are updated. */
+ EEVEE_draw_shadows(sldata, psl);
+
+ DRW_state_clip_planes_add(clip_plane);
+
+ /* Attach depth here since it's a DRW_TEX_TEMP */
+ DRW_framebuffer_texture_layer_attach(fbl->planarref_fb, txl->planar_depth, 0, layer, 0);
+ DRW_framebuffer_texture_layer_attach(fbl->planarref_fb, txl->planar_pool, 0, layer, 0);
+ DRW_framebuffer_bind(fbl->planarref_fb);
+
+ DRW_framebuffer_clear(false, true, false, NULL, 1.0);
+
+ /* Avoid using the texture attached to framebuffer when rendering. */
+ /* XXX */
+ GPUTexture *tmp_planar_pool = txl->planar_pool;
+ GPUTexture *tmp_planar_depth = txl->planar_depth;
+ txl->planar_pool = e_data.planar_pool_placeholder;
+ txl->planar_depth = e_data.depth_array_placeholder;
+
+ /* Depth prepass */
+ DRW_draw_pass(psl->depth_pass_clip);
+ DRW_draw_pass(psl->depth_pass_clip_cull);
+
+ /* Background */
+ DRW_draw_pass(psl->probe_background);
+
+ EEVEE_create_minmax_buffer(vedata, tmp_planar_depth, layer);
+
+ /* Compute GTAO Horizons */
+ EEVEE_occlusion_compute(sldata, vedata, tmp_planar_depth, layer);
+
+ /* Rebind Planar FB */
+ DRW_framebuffer_bind(fbl->planarref_fb);
+
+ /* Shading pass */
+ EEVEE_draw_default_passes(psl);
+ DRW_draw_pass(psl->material_pass);
+ DRW_draw_pass(psl->sss_pass); /* Only output standard pass */
+
+ DRW_state_invert_facing();
+ DRW_state_clip_planes_reset();
+
+ /* Restore */
+ txl->planar_pool = tmp_planar_pool;
+ txl->planar_depth = tmp_planar_depth;
+ DRW_viewport_matrix_override_unset(DRW_MAT_PERS);
+ DRW_viewport_matrix_override_unset(DRW_MAT_PERSINV);
+ DRW_viewport_matrix_override_unset(DRW_MAT_VIEW);
+ DRW_viewport_matrix_override_unset(DRW_MAT_VIEWINV);
+
+ DRW_framebuffer_texture_detach(txl->planar_pool);
+ DRW_framebuffer_texture_detach(txl->planar_depth);
+}
+
+static void render_world_to_probe(EEVEE_ViewLayerData *sldata, EEVEE_PassList *psl)
+{
+ EEVEE_LightProbesInfo *pinfo = sldata->probes;
+ float winmat[4][4], wininv[4][4];
+
+ /* 1 - Render to cubemap target using geometry shader. */
+ /* For world probe, we don't need to clear since we render the background directly. */
+ pinfo->layer = 0;
+
+ perspective_m4(winmat, -0.1f, 0.1f, -0.1f, 0.1f, 0.1f, 1.0f);
+ invert_m4_m4(wininv, winmat);
+
+ /* Detach to rebind the right cubeface. */
+ DRW_framebuffer_bind(sldata->probe_fb);
+ DRW_framebuffer_texture_detach(sldata->probe_rt);
+ DRW_framebuffer_texture_detach(sldata->probe_depth_rt);
+ for (int i = 0; i < 6; ++i) {
+ float viewmat[4][4], persmat[4][4];
+ float viewinv[4][4], persinv[4][4];
+
+ DRW_framebuffer_cubeface_attach(sldata->probe_fb, sldata->probe_rt, 0, i, 0);
+ DRW_framebuffer_viewport_size(sldata->probe_fb, 0, 0, pinfo->target_size, pinfo->target_size);
+
+ /* Setup custom matrices */
+ copy_m4_m4(viewmat, cubefacemat[i]);
+ mul_m4_m4m4(persmat, winmat, viewmat);
+ invert_m4_m4(persinv, persmat);
+ invert_m4_m4(viewinv, viewmat);
+
+ DRW_viewport_matrix_override_set(persmat, DRW_MAT_PERS);
+ DRW_viewport_matrix_override_set(persinv, DRW_MAT_PERSINV);
+ DRW_viewport_matrix_override_set(viewmat, DRW_MAT_VIEW);
+ DRW_viewport_matrix_override_set(viewinv, DRW_MAT_VIEWINV);
+ DRW_viewport_matrix_override_set(winmat, DRW_MAT_WIN);
+ DRW_viewport_matrix_override_set(wininv, DRW_MAT_WININV);
+
+ DRW_draw_pass(psl->probe_background);
+
+ DRW_framebuffer_texture_detach(sldata->probe_rt);
+ }
+ DRW_framebuffer_texture_attach(sldata->probe_fb, sldata->probe_rt, 0, 0);
+ DRW_framebuffer_texture_attach(sldata->probe_fb, sldata->probe_depth_rt, 0, 0);
+
+ DRW_viewport_matrix_override_unset(DRW_MAT_PERS);
+ DRW_viewport_matrix_override_unset(DRW_MAT_PERSINV);
+ DRW_viewport_matrix_override_unset(DRW_MAT_VIEW);
+ DRW_viewport_matrix_override_unset(DRW_MAT_VIEWINV);
+ DRW_viewport_matrix_override_unset(DRW_MAT_WIN);
+ DRW_viewport_matrix_override_unset(DRW_MAT_WININV);
+}
+
+static void lightprobe_cell_grid_location_get(EEVEE_LightGrid *egrid, int cell_idx, float r_local_cell[3])
+{
+ /* Keep in sync with lightprobe_grid_display_vert */
+ r_local_cell[2] = (float)(cell_idx % egrid->resolution[2]);
+ r_local_cell[1] = (float)((cell_idx / egrid->resolution[2]) % egrid->resolution[1]);
+ r_local_cell[0] = (float)(cell_idx / (egrid->resolution[2] * egrid->resolution[1]));
+}
+
+static void lightprobe_cell_world_location_get(EEVEE_LightGrid *egrid, float local_cell[3], float r_pos[3])
+{
+ float tmp[3];
+
+ copy_v3_v3(r_pos, egrid->corner);
+ mul_v3_v3fl(tmp, egrid->increment_x, local_cell[0]);
+ add_v3_v3(r_pos, tmp);
+ mul_v3_v3fl(tmp, egrid->increment_y, local_cell[1]);
+ add_v3_v3(r_pos, tmp);
+ mul_v3_v3fl(tmp, egrid->increment_z, local_cell[2]);
+ add_v3_v3(r_pos, tmp);
+}
+
+static void lightprobes_refresh_world(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
+{
+ EEVEE_CommonUniformBuffer *common_data = &sldata->common_data;
+ EEVEE_PassList *psl = vedata->psl;
+
+ render_world_to_probe(sldata, psl);
+ if (e_data.update_world & PROBE_UPDATE_CUBE) {
+ glossy_filter_probe(sldata, vedata, psl, 0, 1.0);
+ common_data->prb_num_render_cube = 1;
+ }
+ if (e_data.update_world & PROBE_UPDATE_GRID) {
+ diffuse_filter_probe(sldata, vedata, psl, 0, 0.0, 0.0, 0.0, 0.0, 1.0);
+ SWAP(GPUTexture *, sldata->irradiance_pool, sldata->irradiance_rt);
+ DRW_framebuffer_texture_detach(sldata->probe_pool);
+ DRW_framebuffer_texture_attach(sldata->probe_filter_fb, sldata->irradiance_rt, 0, 0);
+ DRW_draw_pass(psl->probe_grid_fill);
+ DRW_framebuffer_texture_detach(sldata->irradiance_rt);
+ DRW_framebuffer_texture_attach(sldata->probe_filter_fb, sldata->probe_pool, 0, 0);
+ common_data->prb_num_render_grid = 1;
+ }
+ e_data.update_world = 0;
+ DRW_viewport_request_redraw();
+}
+
+static void lightprobes_refresh_initialize_grid(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
+{
+ EEVEE_LightProbesInfo *pinfo = sldata->probes;
+ EEVEE_PassList *psl = vedata->psl;
+ if (pinfo->grid_initialized) {
+ /* Grid is already initialized, nothing to do. */
+ return;
+ }
+ DRW_framebuffer_texture_detach(sldata->probe_pool);
+ /* Flood fill with world irradiance. */
+ DRW_framebuffer_texture_attach(sldata->probe_filter_fb, sldata->irradiance_rt, 0, 0);
+ DRW_framebuffer_bind(sldata->probe_filter_fb);
+ DRW_draw_pass(psl->probe_grid_fill);
+ DRW_framebuffer_texture_detach(sldata->irradiance_rt);
+
+ SWAP(GPUTexture *, sldata->irradiance_pool, sldata->irradiance_rt);
+ DRW_framebuffer_texture_attach(sldata->probe_filter_fb, sldata->irradiance_rt, 0, 0);
+ DRW_draw_pass(psl->probe_grid_fill);
+
+ DRW_framebuffer_texture_detach(sldata->irradiance_rt);
+ SWAP(GPUTexture *, sldata->irradiance_pool, sldata->irradiance_rt);
+ /* Reattach to have a valid framebuffer. */
+ DRW_framebuffer_texture_attach(sldata->probe_filter_fb, sldata->probe_pool, 0, 0);
+ pinfo->grid_initialized = true;
+}
+
+void EEVEE_lightprobes_refresh_planar(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
+{
+ EEVEE_CommonUniformBuffer *common_data = &sldata->common_data;
+ EEVEE_TextureList *txl = vedata->txl;
+ Object *ob;
+ EEVEE_LightProbesInfo *pinfo = sldata->probes;
+
+ if (pinfo->num_planar == 0) {
+ /* Disable SSR if we cannot read previous frame */
+ common_data->ssr_toggle = vedata->stl->g_data->valid_double_buffer;
+ return;
+ }
+
+ /* Temporary Remove all planar reflections (avoid lag effect). */
+ common_data->prb_num_planar = 0;
+ /* Turn off ssr to avoid black specular */
+ /* TODO : Enable SSR in planar reflections? (Would be very heavy) */
+ common_data->ssr_toggle = false;
+ common_data->sss_toggle = false;
+
+ DRW_uniformbuffer_update(sldata->common_ubo, &sldata->common_data);
+
+ for (int i = 0; (ob = pinfo->probes_planar_ref[i]) && (i < MAX_PLANAR); i++) {
+ EEVEE_LightProbeEngineData *ped = EEVEE_lightprobe_data_ensure(ob);
+ if (!ped->need_update) {
+ continue;
+ }
+ render_scene_to_planar(sldata, vedata, i, ped->viewmat, ped->persmat, ped->planer_eq_offset);
+ ped->need_update = false;
+ ped->probe_id = i;
+ }
+
+ /* Restore */
+ common_data->prb_num_planar = pinfo->num_planar;
+ common_data->ssr_toggle = true;
+ common_data->sss_toggle = true;
+
+ /* If there is at least one planar probe */
+ if (pinfo->num_planar > 0 && (vedata->stl->effects->enabled_effects & EFFECT_SSR) != 0) {
+ const int max_lod = 9;
+ DRW_stats_group_start("Planar Probe Downsample");
+ DRW_framebuffer_recursive_downsample(vedata->fbl->downsample_fb, txl->planar_pool, max_lod, &downsample_planar, vedata);
+ /* For shading, save max level of the planar map */
+ common_data->prb_lod_planar_max = (float)(max_lod);
+ DRW_stats_group_end();
+ }
+
+ /* Disable SSR if we cannot read previous frame */
+ common_data->ssr_toggle = vedata->stl->g_data->valid_double_buffer;
+}
+
+static void lightprobes_refresh_cube(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
+{
+ EEVEE_CommonUniformBuffer *common_data = &sldata->common_data;
+ EEVEE_PassList *psl = vedata->psl;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_LightProbesInfo *pinfo = sldata->probes;
+ Object *ob;
+ for (int i = 1; (ob = pinfo->probes_cube_ref[i]) && (i < MAX_PROBE); i++) {
+ EEVEE_LightProbeEngineData *ped = EEVEE_lightprobe_data_ensure(ob);
+ if (!ped->need_update) {
+ continue;
+ }
+ LightProbe *prb = (LightProbe *)ob->data;
+ render_scene_to_probe(sldata, vedata, ob->obmat[3], prb->clipsta, prb->clipend);
+ glossy_filter_probe(sldata, vedata, psl, i, prb->intensity);
+ ped->need_update = false;
+ ped->probe_id = i;
+ if (!ped->ready_to_shade) {
+ common_data->prb_num_render_cube++;
+ ped->ready_to_shade = true;
+ }
+#if 0
+ printf("Update Cubemap %d\n", i);
+#endif
+ DRW_viewport_request_redraw();
+ /* Do not let this frame accumulate. */
+ stl->effects->taa_current_sample = 1;
+
+ /* Only do one probe per frame */
+ return;
+ }
+
+ pinfo->do_cube_update = false;
+}
+
+static void lightprobes_refresh_all_no_world(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
+{
+ EEVEE_CommonUniformBuffer *common_data = &sldata->common_data;
+ EEVEE_PassList *psl = vedata->psl;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_LightProbesInfo *pinfo = sldata->probes;
+ Object *ob;
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ RegionView3D *rv3d = draw_ctx->rv3d;
+
+ if (draw_ctx->evil_C != NULL) {
+ /* Only compute probes if not navigating or in playback */
+ struct wmWindowManager *wm = CTX_wm_manager(draw_ctx->evil_C);
+ if (((rv3d->rflag & RV3D_NAVIGATING) != 0) || ED_screen_animation_no_scrub(wm) != NULL) {
+ return;
+ }
+ }
+ /* Make sure grid is initialized. */
+ lightprobes_refresh_initialize_grid(sldata, vedata);
+ /* Reflection probes depend on diffuse lighting thus on irradiance grid,
+ * so update them first. */
+ while (pinfo->updated_bounce < pinfo->num_bounce) {
+ common_data->prb_num_render_grid = pinfo->num_grid;
+ /* TODO(sergey): This logic can be split into smaller functions. */
+ for (int i = 1; (ob = pinfo->probes_grid_ref[i]) && (i < MAX_GRID); i++) {
+ EEVEE_LightProbeEngineData *ped = EEVEE_lightprobe_data_ensure(ob);
+ if (!ped->need_update) {
+ continue;
+ }
+ EEVEE_LightGrid *egrid = &pinfo->grid_data[i];
+ LightProbe *prb = (LightProbe *)ob->data;
+ /* Find the next cell corresponding to the current level. */
+ bool valid_cell = false;
+ int cell_id = ped->updated_cells;
+ float pos[3], grid_loc[3];
+ /* Other levels */
+ int current_stride = 1 << max_ii(0, ped->max_lvl - ped->updated_lvl);
+ int prev_stride = current_stride << 1;
+ bool do_rendering = true;
+ while (!valid_cell) {
+ cell_id = ped->updated_cells;
+ lightprobe_cell_grid_location_get(egrid, cell_id, grid_loc);
+ if (ped->updated_lvl == 0 && cell_id == 0) {
+ valid_cell = true;
+ ped->updated_cells = ped->num_cell;
+ continue;
+ }
+ else if (((((int)grid_loc[0] % current_stride) == 0) &&
+ (((int)grid_loc[1] % current_stride) == 0) &&
+ (((int)grid_loc[2] % current_stride) == 0)) &&
+ !((((int)grid_loc[0] % prev_stride) == 0) &&
+ (((int)grid_loc[1] % prev_stride) == 0) &&
+ (((int)grid_loc[2] % prev_stride) == 0)))
+ {
+ valid_cell = true;
+ }
+ ped->updated_cells++;
+ if (ped->updated_cells > ped->num_cell) {
+ do_rendering = false;
+ break;
+ }
+ }
+ if (do_rendering) {
+ lightprobe_cell_world_location_get(egrid, grid_loc, pos);
+ SWAP(GPUTexture *, sldata->irradiance_pool, sldata->irradiance_rt);
+ /* Temporary Remove all probes. */
+ int tmp_num_render_grid = common_data->prb_num_render_grid;
+ int tmp_num_render_cube = common_data->prb_num_render_cube;
+ int tmp_num_planar = common_data->prb_num_planar;
+ float tmp_level_bias = egrid->level_bias;
+ common_data->prb_num_render_cube = 0;
+ common_data->prb_num_planar = 0;
+ /* Use light from previous bounce when capturing radiance. */
+ if (pinfo->updated_bounce == 0) {
+ /* But not on first bounce. */
+ common_data->prb_num_render_grid = 0;
+ }
+ else {
+ /* Remove bias */
+ egrid->level_bias = (float)(1 << 0);
+ DRW_uniformbuffer_update(sldata->grid_ubo, &sldata->probes->grid_data);
+ }
+ render_scene_to_probe(sldata, vedata, pos, prb->clipsta, prb->clipend);
+ diffuse_filter_probe(sldata, vedata, psl, egrid->offset + cell_id,
+ prb->clipsta, prb->clipend, egrid->visibility_range, prb->vis_blur,
+ prb->intensity);
+ /* To see what is going on. */
+ SWAP(GPUTexture *, sldata->irradiance_pool, sldata->irradiance_rt);
+ /* Restore */
+ common_data->prb_num_render_cube = tmp_num_render_cube;
+ pinfo->num_planar = tmp_num_planar;
+ if (pinfo->updated_bounce == 0) {
+ common_data->prb_num_render_grid = tmp_num_render_grid;
+ }
+ else {
+ egrid->level_bias = tmp_level_bias;
+ DRW_uniformbuffer_update(sldata->grid_ubo, &sldata->probes->grid_data);
+ }
+#if 0
+ printf("Updated Grid %d : cell %d / %d, bounce %d / %d\n",
+ i, cell_id + 1, ped->num_cell, pinfo->updated_bounce + 1, pinfo->num_bounce);
+#endif
+ }
+ if (ped->updated_cells >= ped->num_cell) {
+ ped->updated_lvl++;
+ ped->updated_cells = 0;
+ if (ped->updated_lvl > ped->max_lvl) {
+ ped->need_update = false;
+ }
+ egrid->level_bias = (float)(1 << max_ii(0, ped->max_lvl - ped->updated_lvl + 1));
+ DRW_uniformbuffer_update(sldata->grid_ubo, &sldata->probes->grid_data);
+ }
+ /* Only do one probe per frame */
+ DRW_viewport_request_redraw();
+ /* Do not let this frame accumulate. */
+ stl->effects->taa_current_sample = 1;
+ return;
+ }
+
+ pinfo->updated_bounce++;
+ common_data->prb_num_render_grid = pinfo->num_grid;
+
+ if (pinfo->updated_bounce < pinfo->num_bounce) {
+ /* Retag all grids to update for next bounce */
+ for (int i = 1; (ob = pinfo->probes_grid_ref[i]) && (i < MAX_GRID); i++) {
+ EEVEE_LightProbeEngineData *ped = EEVEE_lightprobe_data_ensure(ob);
+ ped->need_update = true;
+ ped->updated_cells = 0;
+ ped->updated_lvl = 0;
+ }
+ /* Reset the next buffer so we can see the progress. */
+ /* irradiance_rt is already the next rt because of the previous SWAP */
+ DRW_framebuffer_texture_detach(sldata->probe_pool);
+ DRW_framebuffer_texture_attach(sldata->probe_filter_fb, sldata->irradiance_rt, 0, 0);
+ DRW_framebuffer_bind(sldata->probe_filter_fb);
+ DRW_draw_pass(psl->probe_grid_fill);
+ DRW_framebuffer_texture_detach(sldata->irradiance_rt);
+ DRW_framebuffer_texture_attach(sldata->probe_filter_fb, sldata->probe_pool, 0, 0);
+ /* Swap AFTER */
+ SWAP(GPUTexture *, sldata->irradiance_pool, sldata->irradiance_rt);
+ }
+ }
+ /* Refresh cube probe when needed. */
+ lightprobes_refresh_cube(sldata, vedata);
+}
+
+bool EEVEE_lightprobes_all_probes_ready(EEVEE_ViewLayerData *sldata, EEVEE_Data *UNUSED(vedata))
+{
+ EEVEE_LightProbesInfo *pinfo = sldata->probes;
+ EEVEE_CommonUniformBuffer *common_data = &sldata->common_data;
+
+ return ((pinfo->do_cube_update == false) &&
+ (pinfo->updated_bounce == pinfo->num_bounce) &&
+ (common_data->prb_num_render_cube == pinfo->num_cube));
+}
+
+void EEVEE_lightprobes_refresh(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
+{
+ EEVEE_CommonUniformBuffer *common_data = &sldata->common_data;
+
+ /* Disable specular lighting when rendering probes to avoid feedback loops (looks bad). */
+ common_data->spec_toggle = false;
+ common_data->ssr_toggle = false;
+ common_data->sss_toggle = false;
+
+ /* Disable AO until we find a way to hide really bad discontinuities between cubefaces. */
+ float tmp_ao_dist = common_data->ao_dist;
+ float tmp_ao_settings = common_data->ao_settings;
+ common_data->ao_settings = 0.0f;
+ common_data->ao_dist = 0.0f;
+
+ /* Render world in priority */
+ if (e_data.update_world) {
+ lightprobes_refresh_world(sldata, vedata);
+ }
+ else if (EEVEE_lightprobes_all_probes_ready(sldata, vedata) == false) {
+ lightprobes_refresh_all_no_world(sldata, vedata);
+ }
+
+ /* Restore */
+ common_data->spec_toggle = true;
+ common_data->ssr_toggle = true;
+ common_data->sss_toggle = true;
+ common_data->ao_dist = tmp_ao_dist;
+ common_data->ao_settings = tmp_ao_settings;
+}
+
+void EEVEE_lightprobes_free(void)
+{
+ DRW_SHADER_FREE_SAFE(e_data.probe_default_sh);
+ DRW_SHADER_FREE_SAFE(e_data.probe_filter_glossy_sh);
+ DRW_SHADER_FREE_SAFE(e_data.probe_filter_diffuse_sh);
+ DRW_SHADER_FREE_SAFE(e_data.probe_filter_visibility_sh);
+ DRW_SHADER_FREE_SAFE(e_data.probe_grid_fill_sh);
+ DRW_SHADER_FREE_SAFE(e_data.probe_grid_display_sh);
+ DRW_SHADER_FREE_SAFE(e_data.probe_planar_display_sh);
+ DRW_SHADER_FREE_SAFE(e_data.probe_planar_downsample_sh);
+ DRW_SHADER_FREE_SAFE(e_data.probe_cube_display_sh);
+ DRW_TEXTURE_FREE_SAFE(e_data.hammersley);
+ DRW_TEXTURE_FREE_SAFE(e_data.planar_pool_placeholder);
+ DRW_TEXTURE_FREE_SAFE(e_data.depth_placeholder);
+ DRW_TEXTURE_FREE_SAFE(e_data.depth_array_placeholder);
+}
diff --git a/source/blender/draw/engines/eevee/eevee_lights.c b/source/blender/draw/engines/eevee/eevee_lights.c
new file mode 100644
index 00000000000..69b58bf9670
--- /dev/null
+++ b/source/blender/draw/engines/eevee/eevee_lights.c
@@ -0,0 +1,1167 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file eevee_lights.c
+ * \ingroup DNA
+ */
+
+#include "DRW_render.h"
+
+#include "BLI_dynstr.h"
+
+#include "BKE_object.h"
+
+#include "eevee_engine.h"
+#include "eevee_private.h"
+
+#define SHADOW_CASTER_ALLOC_CHUNK 16
+
+static struct {
+ struct GPUShader *shadow_sh;
+ struct GPUShader *shadow_store_cube_sh[SHADOW_METHOD_MAX];
+ struct GPUShader *shadow_store_cascade_sh[SHADOW_METHOD_MAX];
+ struct GPUShader *shadow_copy_cube_sh[SHADOW_METHOD_MAX];
+ struct GPUShader *shadow_copy_cascade_sh[SHADOW_METHOD_MAX];
+} e_data = {NULL}; /* Engine data */
+
+extern char datatoc_shadow_vert_glsl[];
+extern char datatoc_shadow_geom_glsl[];
+extern char datatoc_shadow_frag_glsl[];
+extern char datatoc_shadow_store_frag_glsl[];
+extern char datatoc_shadow_copy_frag_glsl[];
+extern char datatoc_concentric_samples_lib_glsl[];
+
+/* Prototype */
+static void eevee_light_setup(Object *ob, EEVEE_Light *evli);
+
+/* *********** LIGHT BITS *********** */
+static void lightbits_set_single(EEVEE_LightBits *bitf, unsigned int idx, bool val)
+{
+ if (val) {
+ bitf->fields[idx / 8] |= (1 << (idx % 8));
+ }
+ else {
+ bitf->fields[idx / 8] &= ~(1 << (idx % 8));
+ }
+}
+
+static void lightbits_set_all(EEVEE_LightBits *bitf, bool val)
+{
+ memset(bitf, (val) ? 0xFF : 0x00, sizeof(EEVEE_LightBits));
+}
+
+static void lightbits_or(EEVEE_LightBits *r, const EEVEE_LightBits *v)
+{
+ for (int i = 0; i < MAX_LIGHTBITS_FIELDS; ++i) {
+ r->fields[i] |= v->fields[i];
+ }
+}
+
+static bool lightbits_get(const EEVEE_LightBits *r, unsigned int idx)
+{
+ return r->fields[idx / 8] & (1 << (idx % 8));
+}
+
+static void lightbits_convert(EEVEE_LightBits *r, const EEVEE_LightBits *bitf, const int *light_bit_conv_table, unsigned int table_length)
+{
+ for (int i = 0; i < table_length; ++i) {
+ if (lightbits_get(bitf, i) != 0) {
+ if (light_bit_conv_table[i] >= 0) {
+ r->fields[i / 8] |= (1 << (i % 8));
+ }
+ }
+ }
+}
+
+/* *********** FUNCTIONS *********** */
+
+void EEVEE_lights_init(EEVEE_ViewLayerData *sldata)
+{
+ const unsigned int shadow_ubo_size = sizeof(EEVEE_Shadow) * MAX_SHADOW +
+ sizeof(EEVEE_ShadowCube) * MAX_SHADOW_CUBE +
+ sizeof(EEVEE_ShadowCascade) * MAX_SHADOW_CASCADE;
+
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ ViewLayer *view_layer = draw_ctx->view_layer;
+ IDProperty *props = BKE_view_layer_engine_evaluated_get(view_layer, COLLECTION_MODE_NONE, RE_engine_id_BLENDER_EEVEE);
+
+ if (!e_data.shadow_sh) {
+ e_data.shadow_sh = DRW_shader_create(
+ datatoc_shadow_vert_glsl, datatoc_shadow_geom_glsl, datatoc_shadow_frag_glsl, NULL);
+
+ DynStr *ds_frag = BLI_dynstr_new();
+ BLI_dynstr_append(ds_frag, datatoc_concentric_samples_lib_glsl);
+ BLI_dynstr_append(ds_frag, datatoc_shadow_store_frag_glsl);
+ char *store_shadow_shader_str = BLI_dynstr_get_cstring(ds_frag);
+ BLI_dynstr_free(ds_frag);
+
+ e_data.shadow_store_cube_sh[SHADOW_ESM] = DRW_shader_create_fullscreen(
+ store_shadow_shader_str,
+ "#define ESM\n");
+ e_data.shadow_store_cascade_sh[SHADOW_ESM] = DRW_shader_create_fullscreen(
+ store_shadow_shader_str,
+ "#define ESM\n"
+ "#define CSM\n");
+
+ e_data.shadow_store_cube_sh[SHADOW_VSM] = DRW_shader_create_fullscreen(
+ store_shadow_shader_str,
+ "#define VSM\n");
+ e_data.shadow_store_cascade_sh[SHADOW_VSM] = DRW_shader_create_fullscreen(
+ store_shadow_shader_str,
+ "#define VSM\n"
+ "#define CSM\n");
+
+ MEM_freeN(store_shadow_shader_str);
+
+ e_data.shadow_copy_cube_sh[SHADOW_ESM] = DRW_shader_create_fullscreen(
+ datatoc_shadow_copy_frag_glsl,
+ "#define ESM\n"
+ "#define COPY\n");
+ e_data.shadow_copy_cascade_sh[SHADOW_ESM] = DRW_shader_create_fullscreen(
+ datatoc_shadow_copy_frag_glsl,
+ "#define ESM\n"
+ "#define COPY\n"
+ "#define CSM\n");
+
+ e_data.shadow_copy_cube_sh[SHADOW_VSM] = DRW_shader_create_fullscreen(
+ datatoc_shadow_copy_frag_glsl,
+ "#define VSM\n"
+ "#define COPY\n");
+ e_data.shadow_copy_cascade_sh[SHADOW_VSM] = DRW_shader_create_fullscreen(
+ datatoc_shadow_copy_frag_glsl,
+ "#define VSM\n"
+ "#define COPY\n"
+ "#define CSM\n");
+ }
+
+ if (!sldata->lamps) {
+ sldata->lamps = MEM_callocN(sizeof(EEVEE_LampsInfo), "EEVEE_LampsInfo");
+ sldata->light_ubo = DRW_uniformbuffer_create(sizeof(EEVEE_Light) * MAX_LIGHT, NULL);
+ sldata->shadow_ubo = DRW_uniformbuffer_create(shadow_ubo_size, NULL);
+ sldata->shadow_render_ubo = DRW_uniformbuffer_create(sizeof(EEVEE_ShadowRender), NULL);
+
+ for (int i = 0; i < 2; ++i) {
+ sldata->shcasters_buffers[i].shadow_casters = MEM_callocN(sizeof(EEVEE_ShadowCaster) * SHADOW_CASTER_ALLOC_CHUNK, "EEVEE_ShadowCaster buf");
+ sldata->shcasters_buffers[i].flags = MEM_callocN(sizeof(sldata->shcasters_buffers[0].flags) * SHADOW_CASTER_ALLOC_CHUNK, "EEVEE_shcast_buffer flags buf");
+ sldata->shcasters_buffers[i].alloc_count = SHADOW_CASTER_ALLOC_CHUNK;
+ sldata->shcasters_buffers[i].count = 0;
+ }
+
+ sldata->lamps->shcaster_frontbuffer = &sldata->shcasters_buffers[0];
+ sldata->lamps->shcaster_backbuffer = &sldata->shcasters_buffers[1];
+ }
+
+ /* Flip buffers */
+ SWAP(EEVEE_ShadowCasterBuffer *, sldata->lamps->shcaster_frontbuffer, sldata->lamps->shcaster_backbuffer);
+
+ int sh_method = BKE_collection_engine_property_value_get_int(props, "shadow_method");
+ int sh_size = BKE_collection_engine_property_value_get_int(props, "shadow_size");
+ int sh_high_bitdepth = BKE_collection_engine_property_value_get_int(props, "shadow_high_bitdepth");
+
+ EEVEE_LampsInfo *linfo = sldata->lamps;
+ if ((linfo->shadow_size != sh_size) ||
+ (linfo->shadow_method != sh_method) ||
+ (linfo->shadow_high_bitdepth != sh_high_bitdepth))
+ {
+ BLI_assert((sh_size > 0) && (sh_size <= 8192));
+ DRW_TEXTURE_FREE_SAFE(sldata->shadow_pool);
+ DRW_TEXTURE_FREE_SAFE(sldata->shadow_cube_target);
+ DRW_TEXTURE_FREE_SAFE(sldata->shadow_cascade_target);
+ DRW_TEXTURE_FREE_SAFE(sldata->shadow_cube_blur);
+ DRW_TEXTURE_FREE_SAFE(sldata->shadow_cascade_blur);
+
+ linfo->shadow_high_bitdepth = sh_high_bitdepth;
+ linfo->shadow_method = sh_method;
+ linfo->shadow_size = sh_size;
+ linfo->shadow_render_data.stored_texel_size = 1.0 / (float)linfo->shadow_size;
+
+ /* Compute adequate size for the cubemap render target.
+ * The 3.0f factor is here to make sure there is no under sampling between
+ * the octahedron mapping and the cubemap. */
+ int new_cube_target_size = (int)ceil(sqrt((float)(sh_size * sh_size) / 6.0f) * 3.0f);
+
+ CLAMP(new_cube_target_size, 1, 4096);
+
+ linfo->shadow_cube_target_size = new_cube_target_size;
+ linfo->shadow_render_data.cube_texel_size = 1.0 / (float)linfo->shadow_cube_target_size;
+ }
+}
+
+void EEVEE_lights_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_PassList *psl)
+{
+ EEVEE_LampsInfo *linfo = sldata->lamps;
+
+ linfo->shcaster_frontbuffer->count = 0;
+ linfo->num_light = 0;
+ linfo->num_layer = 0;
+ linfo->gpu_cube_ct = linfo->gpu_cascade_ct = linfo->gpu_shadow_ct = 0;
+ linfo->cpu_cube_ct = linfo->cpu_cascade_ct = 0;
+ memset(linfo->light_ref, 0, sizeof(linfo->light_ref));
+ memset(linfo->shadow_cube_ref, 0, sizeof(linfo->shadow_cube_ref));
+ memset(linfo->shadow_cascade_ref, 0, sizeof(linfo->shadow_cascade_ref));
+ memset(linfo->new_shadow_id, -1, sizeof(linfo->new_shadow_id));
+
+ /* Shadow Casters: Reset flags. */
+ memset(linfo->shcaster_backbuffer->flags, (char)SHADOW_CASTER_PRUNED, linfo->shcaster_backbuffer->alloc_count);
+ memset(linfo->shcaster_frontbuffer->flags, 0x00, linfo->shcaster_frontbuffer->alloc_count);
+
+ {
+ psl->shadow_cube_store_pass = DRW_pass_create("Shadow Storage Pass", DRW_STATE_WRITE_COLOR);
+
+ DRWShadingGroup *grp = DRW_shgroup_create(
+ e_data.shadow_store_cube_sh[linfo->shadow_method], psl->shadow_cube_store_pass);
+ DRW_shgroup_uniform_buffer(grp, "shadowTexture", &sldata->shadow_cube_blur);
+ DRW_shgroup_uniform_block(grp, "shadow_render_block", sldata->shadow_render_ubo);
+ DRW_shgroup_uniform_float(grp, "shadowFilterSize", &linfo->filter_size, 1);
+ DRW_shgroup_call_add(grp, DRW_cache_fullscreen_quad_get(), NULL);
+ }
+
+ {
+ psl->shadow_cascade_store_pass = DRW_pass_create("Shadow Cascade Storage Pass", DRW_STATE_WRITE_COLOR);
+
+ DRWShadingGroup *grp = DRW_shgroup_create(
+ e_data.shadow_store_cascade_sh[linfo->shadow_method], psl->shadow_cascade_store_pass);
+ DRW_shgroup_uniform_buffer(grp, "shadowTexture", &sldata->shadow_cascade_blur);
+ DRW_shgroup_uniform_block(grp, "shadow_render_block", sldata->shadow_render_ubo);
+ DRW_shgroup_uniform_int(grp, "cascadeId", &linfo->current_shadow_cascade, 1);
+ DRW_shgroup_uniform_float(grp, "shadowFilterSize", &linfo->filter_size, 1);
+ DRW_shgroup_call_add(grp, DRW_cache_fullscreen_quad_get(), NULL);
+ }
+
+ {
+ psl->shadow_cube_copy_pass = DRW_pass_create("Shadow Copy Pass", DRW_STATE_WRITE_COLOR);
+
+ DRWShadingGroup *grp = DRW_shgroup_create(
+ e_data.shadow_copy_cube_sh[linfo->shadow_method], psl->shadow_cube_copy_pass);
+ DRW_shgroup_uniform_buffer(grp, "shadowTexture", &sldata->shadow_cube_target);
+ DRW_shgroup_uniform_block(grp, "shadow_render_block", sldata->shadow_render_ubo);
+ DRW_shgroup_uniform_float(grp, "shadowFilterSize", &linfo->filter_size, 1);
+ DRW_shgroup_uniform_int(grp, "faceId", &linfo->current_shadow_face, 1);
+ DRW_shgroup_call_add(grp, DRW_cache_fullscreen_quad_get(), NULL);
+ }
+
+ {
+ psl->shadow_cascade_copy_pass = DRW_pass_create("Shadow Cascade Copy Pass", DRW_STATE_WRITE_COLOR);
+
+ DRWShadingGroup *grp = DRW_shgroup_create(
+ e_data.shadow_copy_cascade_sh[linfo->shadow_method], psl->shadow_cascade_copy_pass);
+ DRW_shgroup_uniform_buffer(grp, "shadowTexture", &sldata->shadow_cascade_target);
+ DRW_shgroup_uniform_block(grp, "shadow_render_block", sldata->shadow_render_ubo);
+ DRW_shgroup_uniform_float(grp, "shadowFilterSize", &linfo->filter_size, 1);
+ DRW_shgroup_uniform_int(grp, "cascadeId", &linfo->current_shadow_cascade, 1);
+ DRW_shgroup_call_add(grp, DRW_cache_fullscreen_quad_get(), NULL);
+ }
+
+ {
+ psl->shadow_cube_pass = DRW_pass_create(
+ "Shadow Cube Pass",
+ DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS);
+ }
+
+ {
+ psl->shadow_cascade_pass = DRW_pass_create(
+ "Shadow Cascade Pass",
+ DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS);
+ }
+}
+
+void EEVEE_lights_cache_add(EEVEE_ViewLayerData *sldata, Object *ob)
+{
+ EEVEE_LampsInfo *linfo = sldata->lamps;
+
+ /* Step 1 find all lamps in the scene and setup them */
+ if (linfo->num_light >= MAX_LIGHT) {
+ printf("Too many lamps in the scene !!!\n");
+ }
+ else {
+ Lamp *la = (Lamp *)ob->data;
+ EEVEE_Light *evli = linfo->light_data + linfo->num_light;
+ eevee_light_setup(ob, evli);
+
+ /* We do not support shadowmaps for dupli lamps. */
+ if ((ob->base_flag & BASE_FROMDUPLI) != 0) {
+ linfo->num_light++;
+ return;
+ }
+
+ EEVEE_LampEngineData *led = EEVEE_lamp_data_ensure(ob);
+
+ /* Save previous shadow id. */
+ int prev_cube_sh_id = led->prev_cube_shadow_id;
+
+ /* Default light without shadows */
+ led->data.ld.shadow_id = -1;
+ led->prev_cube_shadow_id = -1;
+
+ if (la->mode & (LA_SHAD_BUF | LA_SHAD_RAY)) {
+ if (la->type == LA_SUN) {
+ int sh_nbr = 1; /* TODO : MSM */
+ int cascade_nbr = MAX_CASCADE_NUM; /* TODO : Custom cascade number */
+
+ if ((linfo->gpu_cascade_ct + sh_nbr) <= MAX_SHADOW_CASCADE) {
+ /* Save Light object. */
+ linfo->shadow_cascade_ref[linfo->cpu_cascade_ct] = ob;
+
+ /* Store indices. */
+ EEVEE_ShadowCascadeData *data = &led->data.scad;
+ data->shadow_id = linfo->gpu_shadow_ct;
+ data->cascade_id = linfo->gpu_cascade_ct;
+ data->layer_id = linfo->num_layer;
+
+ /* Increment indices. */
+ linfo->gpu_shadow_ct += 1;
+ linfo->gpu_cascade_ct += sh_nbr;
+ linfo->num_layer += sh_nbr * cascade_nbr;
+
+ linfo->cpu_cascade_ct += 1;
+ }
+ }
+ else if (la->type == LA_SPOT || la->type == LA_LOCAL || la->type == LA_AREA) {
+ int sh_nbr = 1; /* TODO : MSM */
+
+ if ((linfo->gpu_cube_ct + sh_nbr) <= MAX_SHADOW_CUBE) {
+ /* Save Light object. */
+ linfo->shadow_cube_ref[linfo->cpu_cube_ct] = ob;
+
+ /* For light update tracking. */
+ if ((prev_cube_sh_id >= 0) &&
+ (prev_cube_sh_id < linfo->shcaster_backbuffer->count))
+ {
+ linfo->new_shadow_id[prev_cube_sh_id] = linfo->cpu_cube_ct;
+ }
+ led->prev_cube_shadow_id = linfo->cpu_cube_ct;
+
+ /* Saving lamp bounds for later. */
+ BLI_assert(linfo->cpu_cube_ct >= 0 && linfo->cpu_cube_ct < MAX_LIGHT);
+ copy_v3_v3(linfo->shadow_bounds[linfo->cpu_cube_ct].center, ob->obmat[3]);
+ linfo->shadow_bounds[linfo->cpu_cube_ct].radius = la->clipend;
+
+ EEVEE_ShadowCubeData *data = &led->data.scd;
+ /* Store indices. */
+ data->shadow_id = linfo->gpu_shadow_ct;
+ data->cube_id = linfo->gpu_cube_ct;
+ data->layer_id = linfo->num_layer;
+
+ /* Increment indices. */
+ linfo->gpu_shadow_ct += 1;
+ linfo->gpu_cube_ct += sh_nbr;
+ linfo->num_layer += sh_nbr;
+
+ linfo->cpu_cube_ct += 1;
+ }
+ }
+ }
+
+ led->data.ld.light_id = linfo->num_light;
+ linfo->light_ref[linfo->num_light] = ob;
+ linfo->num_light++;
+ }
+}
+
+/* Add a shadow caster to the shadowpasses */
+void EEVEE_lights_cache_shcaster_add(
+ EEVEE_ViewLayerData *sldata, EEVEE_PassList *psl, struct Gwn_Batch *geom, float (*obmat)[4])
+{
+ DRWShadingGroup *grp = DRW_shgroup_instance_create(e_data.shadow_sh, psl->shadow_cube_pass, geom);
+ DRW_shgroup_uniform_block(grp, "shadow_render_block", sldata->shadow_render_ubo);
+ DRW_shgroup_uniform_mat4(grp, "ShadowModelMatrix", (float *)obmat);
+ DRW_shgroup_set_instance_count(grp, 6);
+
+ grp = DRW_shgroup_instance_create(e_data.shadow_sh, psl->shadow_cascade_pass, geom);
+ DRW_shgroup_uniform_block(grp, "shadow_render_block", sldata->shadow_render_ubo);
+ DRW_shgroup_uniform_mat4(grp, "ShadowModelMatrix", (float *)obmat);
+ DRW_shgroup_set_instance_count(grp, MAX_CASCADE_NUM);
+}
+
+void EEVEE_lights_cache_shcaster_material_add(
+ EEVEE_ViewLayerData *sldata, EEVEE_PassList *psl, struct GPUMaterial *gpumat,
+ struct Gwn_Batch *geom, struct Object *ob, float (*obmat)[4], float *alpha_threshold)
+{
+ DRWShadingGroup *grp = DRW_shgroup_material_instance_create(gpumat, psl->shadow_cube_pass, geom, ob);
+
+ if (grp == NULL) return;
+
+ DRW_shgroup_uniform_block(grp, "shadow_render_block", sldata->shadow_render_ubo);
+ DRW_shgroup_uniform_mat4(grp, "ShadowModelMatrix", (float *)obmat);
+
+ if (alpha_threshold != NULL)
+ DRW_shgroup_uniform_float(grp, "alphaThreshold", alpha_threshold, 1);
+
+ DRW_shgroup_set_instance_count(grp, 6);
+
+ grp = DRW_shgroup_material_instance_create(gpumat, psl->shadow_cascade_pass, geom, ob);
+ DRW_shgroup_uniform_block(grp, "shadow_render_block", sldata->shadow_render_ubo);
+ DRW_shgroup_uniform_mat4(grp, "ShadowModelMatrix", (float *)obmat);
+
+ if (alpha_threshold != NULL)
+ DRW_shgroup_uniform_float(grp, "alphaThreshold", alpha_threshold, 1);
+
+ DRW_shgroup_set_instance_count(grp, MAX_CASCADE_NUM);
+}
+
+/* Make that object update shadow casting lamps inside its influence bounding box. */
+void EEVEE_lights_cache_shcaster_object_add(EEVEE_ViewLayerData *sldata, Object *ob)
+{
+ if ((ob->base_flag & BASE_FROMDUPLI) != 0) {
+ /* TODO: Special case for dupli objects because we cannot save the object pointer. */
+ return;
+ }
+
+ EEVEE_ObjectEngineData *oedata = EEVEE_object_data_ensure(ob);
+ EEVEE_LampsInfo *linfo = sldata->lamps;
+ EEVEE_ShadowCasterBuffer *backbuffer = linfo->shcaster_backbuffer;
+ EEVEE_ShadowCasterBuffer *frontbuffer = linfo->shcaster_frontbuffer;
+ int past_id = oedata->shadow_caster_id;
+
+ /* Update flags in backbuffer. */
+ if (past_id > -1 && past_id < backbuffer->count) {
+ backbuffer->flags[past_id] &= ~SHADOW_CASTER_PRUNED;
+
+ if (oedata->need_update) {
+ backbuffer->flags[past_id] |= SHADOW_CASTER_UPDATED;
+ }
+ }
+
+ /* Update id. */
+ oedata->shadow_caster_id = frontbuffer->count++;
+
+ /* Make sure shadow_casters is big enough. */
+ if (oedata->shadow_caster_id >= frontbuffer->alloc_count) {
+ frontbuffer->alloc_count += SHADOW_CASTER_ALLOC_CHUNK;
+ frontbuffer->shadow_casters = MEM_reallocN(frontbuffer->shadow_casters, sizeof(EEVEE_ShadowCaster) * frontbuffer->alloc_count);
+ frontbuffer->flags = MEM_reallocN(frontbuffer->flags, sizeof(EEVEE_ShadowCaster) * frontbuffer->alloc_count);
+ }
+
+ EEVEE_ShadowCaster *shcaster = frontbuffer->shadow_casters + oedata->shadow_caster_id;
+
+ if (oedata->need_update) {
+ frontbuffer->flags[oedata->shadow_caster_id] = SHADOW_CASTER_UPDATED;
+ }
+
+ /* Update World AABB in frontbuffer. */
+ BoundBox *bb = BKE_object_boundbox_get(ob);
+ float min[3], max[3];
+ INIT_MINMAX(min, max);
+ for (int i = 0; i < 8; ++i) {
+ float vec[3];
+ copy_v3_v3(vec, bb->vec[i]);
+ mul_m4_v3(ob->obmat, vec);
+ minmax_v3v3_v3(min, max, vec);
+ }
+
+ EEVEE_BoundBox *aabb = &shcaster->bbox;
+ add_v3_v3v3(aabb->center, min, max);
+ mul_v3_fl(aabb->center, 0.5f);
+ sub_v3_v3v3(aabb->halfdim, aabb->center, max);
+
+ aabb->halfdim[0] = fabsf(aabb->halfdim[0]);
+ aabb->halfdim[1] = fabsf(aabb->halfdim[1]);
+ aabb->halfdim[2] = fabsf(aabb->halfdim[2]);
+
+ oedata->need_update = false;
+}
+
+void EEVEE_lights_cache_finish(EEVEE_ViewLayerData *sldata)
+{
+ EEVEE_LampsInfo *linfo = sldata->lamps;
+ DRWTextureFormat shadow_pool_format = DRW_TEX_R_32;
+
+ sldata->common_data.la_num_light = linfo->num_light;
+
+ /* Setup enough layers. */
+ /* Free textures if number mismatch. */
+ if (linfo->num_layer != linfo->cache_num_layer) {
+ DRW_TEXTURE_FREE_SAFE(sldata->shadow_pool);
+ linfo->cache_num_layer = linfo->num_layer;
+ linfo->update_flag |= LIGHT_UPDATE_SHADOW_CUBE;
+ }
+
+ switch (linfo->shadow_method) {
+ case SHADOW_ESM: shadow_pool_format = ((linfo->shadow_high_bitdepth) ? DRW_TEX_R_32 : DRW_TEX_R_16); break;
+ case SHADOW_VSM: shadow_pool_format = ((linfo->shadow_high_bitdepth) ? DRW_TEX_RG_32 : DRW_TEX_RG_16); break;
+ default:
+ BLI_assert(!"Incorrect Shadow Method");
+ break;
+ }
+
+ if (!sldata->shadow_cube_target) {
+ /* TODO render everything on the same 2d render target using clip planes and no Geom Shader. */
+ /* Cubemaps */
+ sldata->shadow_cube_target = DRW_texture_create_cube(
+ linfo->shadow_cube_target_size, DRW_TEX_DEPTH_24, 0, NULL);
+ sldata->shadow_cube_blur = DRW_texture_create_cube(
+ linfo->shadow_cube_target_size, shadow_pool_format, DRW_TEX_FILTER, NULL);
+ }
+
+ if (!sldata->shadow_cascade_target) {
+ /* CSM */
+ sldata->shadow_cascade_target = DRW_texture_create_2D_array(
+ linfo->shadow_size, linfo->shadow_size, MAX_CASCADE_NUM, DRW_TEX_DEPTH_24, 0, NULL);
+ sldata->shadow_cascade_blur = DRW_texture_create_2D_array(
+ linfo->shadow_size, linfo->shadow_size, MAX_CASCADE_NUM, shadow_pool_format, DRW_TEX_FILTER, NULL);
+ }
+
+ /* Initialize Textures Array first so DRW_framebuffer_init just bind them. */
+ if (!sldata->shadow_pool) {
+ /* All shadows fit in this array */
+ sldata->shadow_pool = DRW_texture_create_2D_array(
+ linfo->shadow_size, linfo->shadow_size, max_ff(1, linfo->num_layer),
+ shadow_pool_format, DRW_TEX_FILTER, NULL);
+ }
+
+ /* Render FB */
+ DRWFboTexture tex_cascade = {&sldata->shadow_cube_target, DRW_TEX_DEPTH_24, 0};
+ DRW_framebuffer_init(&sldata->shadow_target_fb, &draw_engine_eevee_type,
+ linfo->shadow_size, linfo->shadow_size,
+ &tex_cascade, 1);
+
+ /* Storage FB */
+ DRWFboTexture tex_pool = {&sldata->shadow_pool, shadow_pool_format, DRW_TEX_FILTER};
+ DRW_framebuffer_init(&sldata->shadow_store_fb, &draw_engine_eevee_type,
+ linfo->shadow_size, linfo->shadow_size,
+ &tex_pool, 1);
+
+ /* Restore */
+ DRW_framebuffer_texture_detach(sldata->shadow_cube_target);
+
+ /* Update Lamps UBOs. */
+ EEVEE_lights_update(sldata);
+}
+
+/* Update buffer with lamp data */
+static void eevee_light_setup(Object *ob, EEVEE_Light *evli)
+{
+ Lamp *la = (Lamp *)ob->data;
+ float mat[4][4], scale[3], power;
+
+ /* Position */
+ copy_v3_v3(evli->position, ob->obmat[3]);
+
+ /* Color */
+ copy_v3_v3(evli->color, &la->r);
+
+ /* Influence Radius */
+ evli->dist = la->dist;
+
+ /* Vectors */
+ normalize_m4_m4_ex(mat, ob->obmat, scale);
+ copy_v3_v3(evli->forwardvec, mat[2]);
+ normalize_v3(evli->forwardvec);
+ negate_v3(evli->forwardvec);
+
+ copy_v3_v3(evli->rightvec, mat[0]);
+ normalize_v3(evli->rightvec);
+
+ copy_v3_v3(evli->upvec, mat[1]);
+ normalize_v3(evli->upvec);
+
+ /* Spot size & blend */
+ if (la->type == LA_SPOT) {
+ evli->sizex = scale[0] / scale[2];
+ evli->sizey = scale[1] / scale[2];
+ evli->spotsize = cosf(la->spotsize * 0.5f);
+ evli->spotblend = (1.0f - evli->spotsize) * la->spotblend;
+ evli->radius = max_ff(0.001f, la->area_size);
+ }
+ else if (la->type == LA_AREA) {
+ evli->sizex = max_ff(0.0001f, la->area_size * scale[0] * 0.5f);
+ if (la->area_shape == LA_AREA_RECT) {
+ evli->sizey = max_ff(0.0001f, la->area_sizey * scale[1] * 0.5f);
+ }
+ else {
+ evli->sizey = max_ff(0.0001f, la->area_size * scale[1] * 0.5f);
+ }
+ }
+ else {
+ evli->radius = max_ff(0.001f, la->area_size);
+ }
+
+ /* Make illumination power constant */
+ if (la->type == LA_AREA) {
+ power = 1.0f / (evli->sizex * evli->sizey * 4.0f * M_PI) * /* 1/(w*h*Pi) */
+ 80.0f; /* XXX : Empirical, Fit cycles power */
+ }
+ else if (la->type == LA_SPOT || la->type == LA_LOCAL) {
+ power = 1.0f / (4.0f * evli->radius * evli->radius * M_PI * M_PI) * /* 1/(4*r²*Pi²) */
+ M_PI * M_PI * 10.0; /* XXX : Empirical, Fit cycles power */
+
+ /* for point lights (a.k.a radius == 0.0) */
+ // power = M_PI * M_PI * 0.78; /* XXX : Empirical, Fit cycles power */
+ }
+ else {
+ power = 1.0f / (4.0f * evli->radius * evli->radius * M_PI * M_PI) * /* 1/(r²*Pi) */
+ 12.5f; /* XXX : Empirical, Fit cycles power */
+ }
+ mul_v3_fl(evli->color, power * la->energy);
+
+ /* Lamp Type */
+ evli->lamptype = (float)la->type;
+
+ /* No shadow by default */
+ evli->shadowid = -1.0f;
+}
+
+static void eevee_shadow_cube_setup(Object *ob, EEVEE_LampsInfo *linfo, EEVEE_LampEngineData *led)
+{
+ EEVEE_ShadowCubeData *sh_data = &led->data.scd;
+ EEVEE_Light *evli = linfo->light_data + sh_data->light_id;
+ EEVEE_Shadow *ubo_data = linfo->shadow_data + sh_data->shadow_id;
+ EEVEE_ShadowCube *cube_data = linfo->shadow_cube_data + sh_data->cube_id;
+ Lamp *la = (Lamp *)ob->data;
+
+ int sh_nbr = 1; /* TODO: MSM */
+
+ for (int i = 0; i < sh_nbr; ++i) {
+ /* TODO : choose MSM sample point here. */
+ copy_v3_v3(cube_data->position, ob->obmat[3]);
+ }
+
+ ubo_data->bias = 0.05f * la->bias;
+ ubo_data->near = la->clipsta;
+ ubo_data->far = la->clipend;
+ ubo_data->exp = (linfo->shadow_method == SHADOW_VSM) ? la->bleedbias : la->bleedexp;
+
+ evli->shadowid = (float)(sh_data->shadow_id);
+ ubo_data->shadow_start = (float)(sh_data->layer_id);
+ ubo_data->data_start = (float)(sh_data->cube_id);
+ ubo_data->multi_shadow_count = (float)(sh_nbr);
+ ubo_data->shadow_blur = la->soft * 0.02f; /* Used by translucence shadowmap blur */
+
+ ubo_data->contact_dist = (la->mode & LA_SHAD_CONTACT) ? la->contact_dist : 0.0f;
+ ubo_data->contact_bias = 0.05f * la->contact_bias;
+ ubo_data->contact_spread = la->contact_spread;
+ ubo_data->contact_thickness = la->contact_thickness;
+}
+
+#define LERP(t, a, b) ((a) + (t) * ((b) - (a)))
+
+static void frustum_min_bounding_sphere(const float corners[8][4], float r_center[3], float *r_radius)
+{
+#if 0 /* Simple solution but waist too much space. */
+ float minvec[3], maxvec[3];
+
+ /* compute the bounding box */
+ INIT_MINMAX(minvec, maxvec);
+ for (int i = 0; i < 8; ++i) {
+ minmax_v3v3_v3(minvec, maxvec, corners[i]);
+ }
+
+ /* compute the bounding sphere of this box */
+ r_radius = len_v3v3(minvec, maxvec) * 0.5f;
+ add_v3_v3v3(r_center, minvec, maxvec);
+ mul_v3_fl(r_center, 0.5f);
+#else
+ /* Make the bouding sphere always centered on the front diagonal */
+ add_v3_v3v3(r_center, corners[4], corners[7]);
+ mul_v3_fl(r_center, 0.5f);
+ *r_radius = len_v3v3(corners[0], r_center);
+
+ /* Search the largest distance between the sphere center
+ * and the front plane corners. */
+ for (int i = 0; i < 4; ++i) {
+ float rad = len_v3v3(corners[4 + i], r_center);
+ if (rad > *r_radius) {
+ *r_radius = rad;
+ }
+ }
+#endif
+}
+
+static void eevee_shadow_cascade_setup(Object *ob, EEVEE_LampsInfo *linfo, EEVEE_LampEngineData *led)
+{
+ Lamp *la = (Lamp *)ob->data;
+
+ /* Camera Matrices */
+ float persmat[4][4], persinv[4][4];
+ float viewprojmat[4][4], projinv[4][4];
+ float view_near, view_far;
+ float near_v[4] = {0.0f, 0.0f, -1.0f, 1.0f};
+ float far_v[4] = {0.0f, 0.0f, 1.0f, 1.0f};
+ bool is_persp = DRW_viewport_is_persp_get();
+ DRW_viewport_matrix_get(persmat, DRW_MAT_PERS);
+ invert_m4_m4(persinv, persmat);
+ /* FIXME : Get near / far from Draw manager? */
+ DRW_viewport_matrix_get(viewprojmat, DRW_MAT_WIN);
+ invert_m4_m4(projinv, viewprojmat);
+ mul_m4_v4(projinv, near_v);
+ mul_m4_v4(projinv, far_v);
+ view_near = near_v[2];
+ view_far = far_v[2]; /* TODO: Should be a shadow parameter */
+ if (is_persp) {
+ view_near /= near_v[3];
+ view_far /= far_v[3];
+ }
+
+ /* Lamps Matrices */
+ float viewmat[4][4], projmat[4][4];
+ int sh_nbr = 1; /* TODO : MSM */
+ int cascade_nbr = la->cascade_count;
+
+ EEVEE_ShadowCascadeData *sh_data = &led->data.scad;
+ EEVEE_Light *evli = linfo->light_data + sh_data->light_id;
+ EEVEE_Shadow *ubo_data = linfo->shadow_data + sh_data->shadow_id;
+ EEVEE_ShadowCascade *cascade_data = linfo->shadow_cascade_data + sh_data->cascade_id;
+
+ /* The technique consists into splitting
+ * the view frustum into several sub-frustum
+ * that are individually receiving one shadow map */
+
+ float csm_start, csm_end;
+
+ if (is_persp) {
+ csm_start = view_near;
+ csm_end = max_ff(view_far, -la->cascade_max_dist);
+ /* Avoid artifacts */
+ csm_end = min_ff(view_near, csm_end);
+ }
+ else {
+ csm_start = -view_far;
+ csm_end = view_far;
+ }
+
+ /* init near/far */
+ for (int c = 0; c < MAX_CASCADE_NUM; ++c) {
+ cascade_data->split_start[c] = csm_end;
+ cascade_data->split_end[c] = csm_end;
+ }
+
+ /* Compute split planes */
+ float splits_start_ndc[MAX_CASCADE_NUM];
+ float splits_end_ndc[MAX_CASCADE_NUM];
+
+ {
+ /* Nearest plane */
+ float p[4] = {1.0f, 1.0f, csm_start, 1.0f};
+ /* TODO: we don't need full m4 multiply here */
+ mul_m4_v4(viewprojmat, p);
+ splits_start_ndc[0] = p[2];
+ if (is_persp) {
+ splits_start_ndc[0] /= p[3];
+ }
+ }
+
+ {
+ /* Farthest plane */
+ float p[4] = {1.0f, 1.0f, csm_end, 1.0f};
+ /* TODO: we don't need full m4 multiply here */
+ mul_m4_v4(viewprojmat, p);
+ splits_end_ndc[cascade_nbr - 1] = p[2];
+ if (is_persp) {
+ splits_end_ndc[cascade_nbr - 1] /= p[3];
+ }
+ }
+
+ cascade_data->split_start[0] = csm_start;
+ cascade_data->split_end[cascade_nbr - 1] = csm_end;
+
+ for (int c = 1; c < cascade_nbr; ++c) {
+ /* View Space */
+ float linear_split = LERP(((float)(c) / (float)cascade_nbr), csm_start, csm_end);
+ float exp_split = csm_start * powf(csm_end / csm_start, (float)(c) / (float)cascade_nbr);
+
+ if (is_persp) {
+ cascade_data->split_start[c] = LERP(la->cascade_exponent, linear_split, exp_split);
+ }
+ else {
+ cascade_data->split_start[c] = linear_split;
+ }
+ cascade_data->split_end[c - 1] = cascade_data->split_start[c];
+
+ /* Add some overlap for smooth transition */
+ cascade_data->split_start[c] = LERP(la->cascade_fade, cascade_data->split_end[c - 1],
+ (c > 1) ? cascade_data->split_end[c - 2] : cascade_data->split_start[0]);
+
+ /* NDC Space */
+ {
+ float p[4] = {1.0f, 1.0f, cascade_data->split_start[c], 1.0f};
+ /* TODO: we don't need full m4 multiply here */
+ mul_m4_v4(viewprojmat, p);
+ splits_start_ndc[c] = p[2];
+
+ if (is_persp) {
+ splits_start_ndc[c] /= p[3];
+ }
+ }
+
+ {
+ float p[4] = {1.0f, 1.0f, cascade_data->split_end[c - 1], 1.0f};
+ /* TODO: we don't need full m4 multiply here */
+ mul_m4_v4(viewprojmat, p);
+ splits_end_ndc[c - 1] = p[2];
+
+ if (is_persp) {
+ splits_end_ndc[c - 1] /= p[3];
+ }
+ }
+ }
+
+ /* Set last cascade split fade distance into the first split_start. */
+ float prev_split = (cascade_nbr > 1) ? cascade_data->split_end[cascade_nbr - 2] : cascade_data->split_start[0];
+ cascade_data->split_start[0] = LERP(la->cascade_fade, cascade_data->split_end[cascade_nbr - 1], prev_split);
+
+ /* For each cascade */
+ for (int c = 0; c < cascade_nbr; ++c) {
+ /* Given 8 frustum corners */
+ float corners[8][4] = {
+ /* Near Cap */
+ {-1.0f, -1.0f, splits_start_ndc[c], 1.0f},
+ { 1.0f, -1.0f, splits_start_ndc[c], 1.0f},
+ {-1.0f, 1.0f, splits_start_ndc[c], 1.0f},
+ { 1.0f, 1.0f, splits_start_ndc[c], 1.0f},
+ /* Far Cap */
+ {-1.0f, -1.0f, splits_end_ndc[c], 1.0f},
+ { 1.0f, -1.0f, splits_end_ndc[c], 1.0f},
+ {-1.0f, 1.0f, splits_end_ndc[c], 1.0f},
+ { 1.0f, 1.0f, splits_end_ndc[c], 1.0f}
+ };
+
+ /* Transform them into world space */
+ for (int i = 0; i < 8; ++i) {
+ mul_m4_v4(persinv, corners[i]);
+ mul_v3_fl(corners[i], 1.0f / corners[i][3]);
+ corners[i][3] = 1.0f;
+ }
+
+
+ /* Project them into light space */
+ invert_m4_m4(viewmat, ob->obmat);
+ normalize_v3(viewmat[0]);
+ normalize_v3(viewmat[1]);
+ normalize_v3(viewmat[2]);
+
+ for (int i = 0; i < 8; ++i) {
+ mul_m4_v4(viewmat, corners[i]);
+ }
+
+ float center[3];
+ frustum_min_bounding_sphere(corners, center, &(sh_data->radius[c]));
+
+ /* Snap projection center to nearest texel to cancel shimmering. */
+ float shadow_origin[2], shadow_texco[2];
+ /* Light to texture space. */
+ mul_v2_v2fl(shadow_origin, center, linfo->shadow_size / (2.0f * sh_data->radius[c]));
+
+ /* Find the nearest texel. */
+ shadow_texco[0] = round(shadow_origin[0]);
+ shadow_texco[1] = round(shadow_origin[1]);
+
+ /* Compute offset. */
+ sub_v2_v2(shadow_texco, shadow_origin);
+ mul_v2_fl(shadow_texco, (2.0f * sh_data->radius[c]) / linfo->shadow_size); /* Texture to light space. */
+
+ /* Apply offset. */
+ add_v2_v2(center, shadow_texco);
+
+ /* Expand the projection to cover frustum range */
+ orthographic_m4(projmat,
+ center[0] - sh_data->radius[c],
+ center[0] + sh_data->radius[c],
+ center[1] - sh_data->radius[c],
+ center[1] + sh_data->radius[c],
+ la->clipsta, la->clipend);
+
+ mul_m4_m4m4(sh_data->viewprojmat[c], projmat, viewmat);
+ mul_m4_m4m4(cascade_data->shadowmat[c], texcomat, sh_data->viewprojmat[c]);
+ }
+
+ ubo_data->bias = 0.05f * la->bias;
+ ubo_data->near = la->clipsta;
+ ubo_data->far = la->clipend;
+ ubo_data->exp = (linfo->shadow_method == SHADOW_VSM) ? la->bleedbias : la->bleedexp;
+
+ evli->shadowid = (float)(sh_data->shadow_id);
+ ubo_data->shadow_start = (float)(sh_data->layer_id);
+ ubo_data->data_start = (float)(sh_data->cascade_id);
+ ubo_data->multi_shadow_count = (float)(sh_nbr);
+ ubo_data->shadow_blur = la->soft * 0.02f; /* Used by translucence shadowmap blur */
+
+ ubo_data->contact_dist = (la->mode & LA_SHAD_CONTACT) ? la->contact_dist : 0.0f;
+ ubo_data->contact_bias = 0.05f * la->contact_bias;
+ ubo_data->contact_spread = la->contact_spread;
+ ubo_data->contact_thickness = la->contact_thickness;
+}
+
+/* Used for checking if object is inside the shadow volume. */
+static bool sphere_bbox_intersect(const EEVEE_BoundSphere *bs, const EEVEE_BoundBox *bb)
+{
+ /* We are testing using a rougher AABB vs AABB test instead of full AABB vs Sphere. */
+ /* TODO test speed with AABB vs Sphere. */
+ bool x = fabsf(bb->center[0] - bs->center[0]) <= (bb->halfdim[0] + bs->radius);
+ bool y = fabsf(bb->center[1] - bs->center[1]) <= (bb->halfdim[1] + bs->radius);
+ bool z = fabsf(bb->center[2] - bs->center[2]) <= (bb->halfdim[2] + bs->radius);
+
+ return x && y && z;
+}
+
+void EEVEE_lights_update(EEVEE_ViewLayerData *sldata)
+{
+ EEVEE_LampsInfo *linfo = sldata->lamps;
+ Object *ob;
+ int i;
+ char *flag;
+ EEVEE_ShadowCaster *shcaster;
+ EEVEE_BoundSphere *bsphere;
+ EEVEE_ShadowCasterBuffer *frontbuffer = linfo->shcaster_frontbuffer;
+ EEVEE_ShadowCasterBuffer *backbuffer = linfo->shcaster_backbuffer;
+
+ EEVEE_LightBits update_bits = {{0}};
+ if ((linfo->update_flag & LIGHT_UPDATE_SHADOW_CUBE) != 0) {
+ /* Update all lights. */
+ lightbits_set_all(&update_bits, true);
+ }
+ else {
+ /* Search for deleted shadow casters and if shcaster WAS in shadow radius. */
+ /* No need to run this if we already update all lamps. */
+ EEVEE_LightBits past_bits = {{0}};
+ EEVEE_LightBits curr_bits = {{0}};
+ shcaster = backbuffer->shadow_casters;
+ flag = backbuffer->flags;
+ for (i = 0; i < backbuffer->count; ++i, ++flag, ++shcaster) {
+ /* If the shadowcaster has been deleted or updated. */
+ if (*flag != 0) {
+ /* Add the lamps that were intersecting with its BBox. */
+ lightbits_or(&past_bits, &shcaster->bits);
+ }
+ }
+ /* Convert old bits to new bits and add result to final update bits. */
+ /* NOTE: This might be overkill since all lights are tagged to refresh if
+ * the light count changes. */
+ lightbits_convert(&curr_bits, &past_bits, linfo->new_shadow_id, MAX_LIGHT);
+ lightbits_or(&update_bits, &curr_bits);
+ }
+
+ /* Search for updates in current shadow casters. */
+ shcaster = frontbuffer->shadow_casters;
+ flag = frontbuffer->flags;
+ for (i = 0; i < frontbuffer->count; i++, flag++, shcaster++) {
+ /* Run intersection checks to fill the bitfields. */
+ bsphere = linfo->shadow_bounds;
+ for (int j = 0; j < linfo->cpu_cube_ct; j++, bsphere++) {
+ bool iter = sphere_bbox_intersect(bsphere, &shcaster->bbox);
+ lightbits_set_single(&shcaster->bits, j, iter);
+ }
+ /* Only add to final bits if objects has been updated. */
+ if (*flag != 0) {
+ lightbits_or(&update_bits, &shcaster->bits);
+ }
+ }
+
+ /* Setup shadow cube in UBO and tag for update if necessary. */
+ for (i = 0; (i < MAX_SHADOW_CUBE) && (ob = linfo->shadow_cube_ref[i]); i++) {
+ EEVEE_LampEngineData *led = EEVEE_lamp_data_ensure(ob);
+
+ eevee_shadow_cube_setup(ob, linfo, led);
+ if (lightbits_get(&update_bits, i) != 0) {
+ led->need_update = true;
+ }
+ }
+
+ /* Resize shcasters buffers if too big. */
+ if (frontbuffer->alloc_count - frontbuffer->count > SHADOW_CASTER_ALLOC_CHUNK) {
+ frontbuffer->alloc_count = (frontbuffer->count / SHADOW_CASTER_ALLOC_CHUNK) * SHADOW_CASTER_ALLOC_CHUNK;
+ frontbuffer->alloc_count += (frontbuffer->count % SHADOW_CASTER_ALLOC_CHUNK != 0) ? SHADOW_CASTER_ALLOC_CHUNK : 0;
+ frontbuffer->shadow_casters = MEM_reallocN(frontbuffer->shadow_casters, sizeof(EEVEE_ShadowCaster) * frontbuffer->alloc_count);
+ frontbuffer->flags = MEM_reallocN(frontbuffer->flags, sizeof(EEVEE_ShadowCaster) * frontbuffer->alloc_count);
+ }
+}
+
+/* this refresh lamps shadow buffers */
+void EEVEE_draw_shadows(EEVEE_ViewLayerData *sldata, EEVEE_PassList *psl)
+{
+ EEVEE_LampsInfo *linfo = sldata->lamps;
+ Object *ob;
+ int i;
+ float clear_col[4] = {FLT_MAX};
+
+ /* Cube Shadow Maps */
+ DRW_stats_group_start("Cube Shadow Maps");
+ DRW_framebuffer_texture_attach(sldata->shadow_target_fb, sldata->shadow_cube_target, 0, 0);
+ /* Render each shadow to one layer of the array */
+ for (i = 0; (ob = linfo->shadow_cube_ref[i]) && (i < MAX_SHADOW_CUBE); i++) {
+ EEVEE_LampEngineData *led = EEVEE_lamp_data_ensure(ob);
+ Lamp *la = (Lamp *)ob->data;
+
+ float cube_projmat[4][4];
+ perspective_m4(cube_projmat, -la->clipsta, la->clipsta, -la->clipsta, la->clipsta, la->clipsta, la->clipend);
+
+ if (!led->need_update) {
+ continue;
+ }
+
+ EEVEE_ShadowRender *srd = &linfo->shadow_render_data;
+ EEVEE_ShadowCubeData *evscd = &led->data.scd;
+
+ srd->clip_near = la->clipsta;
+ srd->clip_far = la->clipend;
+ copy_v3_v3(srd->position, ob->obmat[3]);
+ for (int j = 0; j < 6; j++) {
+ float tmp[4][4];
+
+ unit_m4(tmp);
+ negate_v3_v3(tmp[3], ob->obmat[3]);
+ mul_m4_m4m4(srd->viewmat[j], cubefacemat[j], tmp);
+
+ mul_m4_m4m4(srd->shadowmat[j], cube_projmat, srd->viewmat[j]);
+ }
+ DRW_uniformbuffer_update(sldata->shadow_render_ubo, srd);
+
+ DRW_framebuffer_bind(sldata->shadow_target_fb);
+ DRW_framebuffer_clear(true, true, false, clear_col, 1.0f);
+
+ /* Render shadow cube */
+ DRW_draw_pass(psl->shadow_cube_pass);
+
+ /* 0.001f is arbitrary, but it should be relatively small so that filter size is not too big. */
+ float filter_texture_size = la->soft * 0.001f;
+ float filter_pixel_size = ceil(filter_texture_size / linfo->shadow_render_data.cube_texel_size);
+ linfo->filter_size = linfo->shadow_render_data.cube_texel_size * ((filter_pixel_size > 1.0f) ? 1.5f : 0.0f);
+
+ /* TODO: OPTI: Filter all faces in one/two draw call */
+ for (linfo->current_shadow_face = 0;
+ linfo->current_shadow_face < 6;
+ linfo->current_shadow_face++)
+ {
+ /* Copy using a small 3x3 box filter */
+ DRW_framebuffer_cubeface_attach(sldata->shadow_store_fb, sldata->shadow_cube_blur, 0, linfo->current_shadow_face, 0);
+ DRW_framebuffer_bind(sldata->shadow_store_fb);
+ DRW_draw_pass(psl->shadow_cube_copy_pass);
+ DRW_framebuffer_texture_detach(sldata->shadow_cube_blur);
+ }
+
+ /* Push it to shadowmap array */
+
+ /* Adjust constants if concentric samples change. */
+ const float max_filter_size = 7.5f;
+ const float previous_box_filter_size = 9.0f; /* Dunno why but that works. */
+ const int max_sample = 256;
+
+ if (filter_pixel_size > 2.0f) {
+ linfo->filter_size = linfo->shadow_render_data.cube_texel_size * max_filter_size * previous_box_filter_size;
+ filter_pixel_size = max_ff(0.0f, filter_pixel_size - 3.0f);
+ /* Compute number of concentric samples. Depends directly on filter size. */
+ float pix_size_sqr = filter_pixel_size * filter_pixel_size;
+ srd->shadow_samples_ct = min_ii(max_sample, 4 + 8 * (int)filter_pixel_size + 4 * (int)(pix_size_sqr));
+ }
+ else {
+ linfo->filter_size = 0.0f;
+ srd->shadow_samples_ct = 4;
+ }
+ srd->shadow_inv_samples_ct = 1.0f / (float)srd->shadow_samples_ct;
+ DRW_uniformbuffer_update(sldata->shadow_render_ubo, srd);
+
+ DRW_framebuffer_texture_layer_attach(sldata->shadow_store_fb, sldata->shadow_pool, 0, evscd->layer_id, 0);
+ DRW_framebuffer_bind(sldata->shadow_store_fb);
+ DRW_draw_pass(psl->shadow_cube_store_pass);
+
+ led->need_update = false;
+ }
+ linfo->update_flag &= ~LIGHT_UPDATE_SHADOW_CUBE;
+
+ DRW_framebuffer_texture_detach(sldata->shadow_cube_target);
+ DRW_stats_group_end();
+
+ /* Cascaded Shadow Maps */
+ DRW_stats_group_start("Cascaded Shadow Maps");
+ DRW_framebuffer_texture_attach(sldata->shadow_target_fb, sldata->shadow_cascade_target, 0, 0);
+ for (i = 0; (ob = linfo->shadow_cascade_ref[i]) && (i < MAX_SHADOW_CASCADE); i++) {
+ EEVEE_LampEngineData *led = EEVEE_lamp_data_ensure(ob);
+ Lamp *la = (Lamp *)ob->data;
+
+ EEVEE_ShadowCascadeData *evscd = &led->data.scad;
+ EEVEE_ShadowRender *srd = &linfo->shadow_render_data;
+
+ eevee_shadow_cascade_setup(ob, linfo, led);
+
+ srd->clip_near = la->clipsta;
+ srd->clip_far = la->clipend;
+ for (int j = 0; j < la->cascade_count; ++j) {
+ copy_m4_m4(srd->shadowmat[j], evscd->viewprojmat[j]);
+ }
+ DRW_uniformbuffer_update(sldata->shadow_render_ubo, &linfo->shadow_render_data);
+
+ DRW_framebuffer_bind(sldata->shadow_target_fb);
+ DRW_framebuffer_clear(false, true, false, NULL, 1.0);
+
+ /* Render shadow cascades */
+ DRW_draw_pass(psl->shadow_cascade_pass);
+
+ /* TODO: OPTI: Filter all cascade in one/two draw call */
+ for (linfo->current_shadow_cascade = 0;
+ linfo->current_shadow_cascade < la->cascade_count;
+ ++linfo->current_shadow_cascade)
+ {
+ /* 0.01f factor to convert to percentage */
+ float filter_texture_size = la->soft * 0.01f / evscd->radius[linfo->current_shadow_cascade];
+ float filter_pixel_size = ceil(linfo->shadow_size * filter_texture_size);
+
+ /* Copy using a small 3x3 box filter */
+ linfo->filter_size = linfo->shadow_render_data.stored_texel_size * ((filter_pixel_size > 1.0f) ? 1.0f : 0.0f);
+ DRW_framebuffer_texture_layer_attach(
+ sldata->shadow_store_fb, sldata->shadow_cascade_blur, 0, linfo->current_shadow_cascade, 0);
+ DRW_framebuffer_bind(sldata->shadow_store_fb);
+ DRW_draw_pass(psl->shadow_cascade_copy_pass);
+ DRW_framebuffer_texture_detach(sldata->shadow_cascade_blur);
+
+ /* Push it to shadowmap array and blur more */
+
+ /* Adjust constants if concentric samples change. */
+ const float max_filter_size = 7.5f;
+ const float previous_box_filter_size = 3.2f; /* Arbitrary: less banding */
+ const int max_sample = 256;
+
+ if (filter_pixel_size > 2.0f) {
+ linfo->filter_size = linfo->shadow_render_data.stored_texel_size * max_filter_size * previous_box_filter_size;
+ filter_pixel_size = max_ff(0.0f, filter_pixel_size - 3.0f);
+ /* Compute number of concentric samples. Depends directly on filter size. */
+ float pix_size_sqr = filter_pixel_size * filter_pixel_size;
+ srd->shadow_samples_ct = min_ii(max_sample, 4 + 8 * (int)filter_pixel_size + 4 * (int)(pix_size_sqr));
+ }
+ else {
+ linfo->filter_size = 0.0f;
+ srd->shadow_samples_ct = 4;
+ }
+ srd->shadow_inv_samples_ct = 1.0f / (float)srd->shadow_samples_ct;
+ DRW_uniformbuffer_update(sldata->shadow_render_ubo, &linfo->shadow_render_data);
+
+ int layer = evscd->layer_id + linfo->current_shadow_cascade;
+ DRW_framebuffer_texture_layer_attach(sldata->shadow_store_fb, sldata->shadow_pool, 0, layer, 0);
+ DRW_framebuffer_bind(sldata->shadow_store_fb);
+ DRW_draw_pass(psl->shadow_cascade_store_pass);
+ }
+ }
+
+ DRW_framebuffer_texture_detach(sldata->shadow_cascade_target);
+ DRW_stats_group_end();
+
+ DRW_uniformbuffer_update(sldata->light_ubo, &linfo->light_data);
+ DRW_uniformbuffer_update(sldata->shadow_ubo, &linfo->shadow_data); /* Update all data at once */
+}
+
+void EEVEE_lights_free(void)
+{
+ DRW_SHADER_FREE_SAFE(e_data.shadow_sh);
+ for (int i = 0; i < SHADOW_METHOD_MAX; ++i) {
+ DRW_SHADER_FREE_SAFE(e_data.shadow_store_cube_sh[i]);
+ DRW_SHADER_FREE_SAFE(e_data.shadow_store_cascade_sh[i]);
+ DRW_SHADER_FREE_SAFE(e_data.shadow_copy_cube_sh[i]);
+ DRW_SHADER_FREE_SAFE(e_data.shadow_copy_cascade_sh[i]);
+ }
+}
diff --git a/source/blender/draw/engines/eevee/eevee_lut.h b/source/blender/draw/engines/eevee/eevee_lut.h
new file mode 100644
index 00000000000..3c2ffeb11a7
--- /dev/null
+++ b/source/blender/draw/engines/eevee/eevee_lut.h
@@ -0,0 +1,16926 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2005 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Clement Foucault.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file eevee_lut.h
+ * \ingroup gpu
+ */
+
+#ifndef __EEVEE_LUT_H__
+#define __EEVEE_LUT_H__
+
+static float ltc_mat_ggx[64 * 64 * 4] = {
+ 0.000200, -0.000000, 1.000000, -0.000000, 0.000504, -0.000000, 1.000000, -0.000000, 0.002016,
+ -0.000000, 1.000000, -0.000000, 0.004535, -0.000000, 1.000000, -0.000000, 0.008063, -0.000000,
+ 1.000000, -0.000000, 0.012598, -0.000000, 1.000000, -0.000000, 0.018141, -0.000000, 1.000000,
+ -0.000000, 0.024692, -0.000000, 1.000000, -0.000000, 0.032252, -0.000000, 1.000000, -0.000000,
+ 0.040821, -0.000000, 1.000000, -0.000000, 0.050400, -0.000000, 1.000000, -0.000000, 0.060989,
+ -0.000000, 1.000000, -0.000000, 0.072591, -0.000000, 1.000000, -0.000000, 0.085206, -0.000000,
+ 1.000000, -0.000000, 0.098836, -0.000000, 1.000000, -0.000000, 0.113483, -0.000000, 1.000000,
+ -0.000000, 0.129147, -0.000000, 1.000000, -0.000000, 0.145828, -0.000000, 1.000000, -0.000000,
+ 0.163499, -0.000000, 1.000000, -0.000000, 0.181972, -0.000000, 1.000000, -0.000000, 0.199498,
+ -0.000000, 1.000000, -0.000000, 0.220031, -0.000000, 1.000000, -0.000000, 0.241588, -0.000000,
+ 1.000000, -0.000000, 0.264120, -0.000000, 1.000000, -0.000000, 0.287521, -0.000000, 1.000000,
+ -0.000000, 0.311478, -0.000000, 1.000000, -0.000000, 0.335127, -0.000000, 1.000000, -0.000000,
+ 0.359811, -0.000000, 1.000000, -0.000000, 0.386446, -0.000000, 1.000000, -0.000000, 0.413161,
+ -0.000000, 1.000000, -0.000000, 0.439142, -0.000000, 1.000000, -0.000000, 0.467039, -0.000000,
+ 1.000000, -0.000000, 0.495170, -0.000000, 1.000000, -0.000000, 0.522324, -0.000000, 1.000000,
+ -0.000000, 0.551482, -0.000000, 1.000000, -0.000000, 0.579621, -0.000000, 1.000000, -0.000000,
+ 0.608255, -0.000000, 1.000000, -0.000000, 0.636515, -0.000000, 1.000000, -0.000000, 0.664835,
+ -0.000000, 1.000000, -0.000000, 0.692549, -0.000000, 1.000000, -0.000000, 0.720375, -0.000000,
+ 1.000000, -0.000000, 0.747238, -0.000000, 1.000000, -0.000000, 0.773956, -0.000000, 1.000000,
+ -0.000000, 0.799879, -0.000000, 1.000000, -0.000000, 0.824889, -0.000000, 1.000000, -0.000000,
+ 0.849357, -0.000000, 1.000000, -0.000000, 0.873016, -0.000000, 1.000000, -0.000000, 0.895670,
+ -0.000000, 1.000000, -0.000000, 0.917194, -0.000000, 1.000000, -0.000000, 0.937978, -0.000000,
+ 1.000000, -0.000000, 0.957872, -0.000000, 1.000000, -0.000000, 0.976736, -0.000000, 1.000000,
+ -0.000000, 0.994433, -0.000000, 1.000000, -0.000000, 1.011206, -0.000000, 1.000000, -0.000000,
+ 1.026820, -0.000000, 1.000000, -0.000000, 1.041720, -0.000000, 1.000000, -0.000000, 1.055657,
+ -0.000000, 1.000000, -0.000000, 1.068642, -0.000000, 1.000000, -0.000000, 1.080646, -0.000000,
+ 1.000000, -0.000000, 1.091637, -0.000000, 1.000000, -0.000000, 1.101837, -0.000000, 1.000000,
+ -0.000000, 1.111292, -0.000000, 1.000000, -0.000000, 1.120025, -0.000000, 1.000000, -0.000000,
+ 1.127918, -0.000000, 1.000000, -0.000000, 0.000200, -0.000005, 1.000623, 0.024938, 0.000504,
+ -0.000013, 1.000643, 0.024938, 0.002016, -0.000050, 1.000618, 0.024938, 0.004535, -0.000113,
+ 1.000621, 0.024938, 0.008063, -0.000201, 1.000746, 0.024938, 0.012596, -0.000314, 1.000463,
+ 0.024937, 0.018140, -0.000452, 1.000511, 0.024939, 0.024693, -0.000616, 1.000541, 0.024938,
+ 0.032253, -0.000804, 1.000684, 0.024938, 0.040815, -0.001018, 1.000524, 0.024940, 0.050399,
+ -0.001257, 1.000582, 0.024937, 0.060989, -0.001521, 1.000655, 0.024937, 0.072591, -0.001810,
+ 1.000608, 0.024938, 0.085204, -0.002125, 1.000622, 0.024939, 0.098835, -0.002465, 1.000632,
+ 0.024937, 0.113483, -0.002830, 1.000640, 0.024939, 0.129143, -0.003220, 1.000568, 0.024938,
+ 0.145830, -0.003633, 1.000635, 0.024938, 0.163497, -0.004062, 1.000626, 0.024938, 0.181956,
+ -0.004424, 1.000612, 0.024924, 0.199791, -0.004593, 1.000627, 0.024890, 0.220029, -0.005480,
+ 1.000594, 0.024935, 0.241586, -0.006010, 1.000616, 0.024933, 0.264115, -0.006550, 1.000607,
+ 0.024927, 0.287514, -0.007072, 1.000595, 0.024909, 0.311455, -0.007472, 1.000616, 0.024872,
+ 0.335083, -0.007491, 1.000589, 0.024755, 0.359805, -0.008810, 1.000601, 0.024877, 0.386438,
+ -0.009282, 1.000640, 0.024824, 0.413131, -0.009534, 1.000599, 0.024708, 0.439249, -0.009701,
+ 1.000497, 0.024573, 0.466997, -0.010878, 1.000467, 0.024652, 0.495138, -0.010959, 1.000539,
+ 0.024455, 0.522654, -0.011386, 1.000518, 0.024318, 0.551415, -0.012022, 1.000533, 0.024216,
+ 0.579610, -0.011805, 1.000495, 0.023867, 0.608185, -0.012773, 1.000474, 0.023834, 0.636492,
+ -0.012377, 1.000488, 0.023327, 0.664826, -0.013172, 1.000576, 0.023205, 0.692674, -0.012847,
+ 1.000505, 0.022708, 0.720341, -0.013141, 1.000424, 0.022349, 0.747373, -0.013227, 1.000449,
+ 0.021871, 0.773980, -0.012739, 1.000478, 0.021171, 0.799839, -0.012999, 1.000396, 0.020606,
+ 0.825113, -0.012727, 1.000425, 0.020006, 0.849579, -0.012170, 1.000469, 0.019089, 0.873046,
+ -0.011855, 1.000411, 0.018291, 0.895777, -0.011711, 1.000426, 0.017534, 0.917518, -0.011107,
+ 1.000373, 0.016542, 0.938264, -0.010439, 1.000322, 0.015512, 0.958032, -0.009807, 1.000324,
+ 0.014491, 0.976838, -0.009268, 1.000341, 0.013468, 0.994631, -0.008662, 1.000318, 0.012376,
+ 1.011434, -0.007923, 1.000289, 0.011187, 1.027169, -0.007132, 1.000216, 0.010078, 1.041929,
+ -0.006332, 1.000096, 0.008924, 1.055767, -0.005554, 1.000156, 0.007770, 1.068595, -0.004811,
+ 1.000084, 0.006611, 1.080612, -0.003950, 1.000047, 0.005485, 1.091785, -0.003174, 1.000109,
+ 0.004352, 1.101998, -0.002363, 1.000029, 0.003180, 1.111423, -0.001552, 0.999985, 0.002091,
+ 1.120007, -0.000786, 0.999947, 0.000991, 1.127918, 0.000004, 1.000000, -0.000004, 0.000200,
+ -0.000010, 1.002495, 0.049907, 0.000504, -0.000025, 1.002476, 0.049908, 0.002016, -0.000101,
+ 1.002500, 0.049908, 0.004535, -0.000226, 1.002487, 0.049908, 0.008062, -0.000402, 1.002364,
+ 0.049908, 0.012598, -0.000629, 1.002412, 0.049908, 0.018140, -0.000905, 1.002379, 0.049908,
+ 0.024691, -0.001232, 1.002490, 0.049907, 0.032251, -0.001610, 1.002398, 0.049908, 0.040821,
+ -0.002037, 1.002392, 0.049908, 0.050398, -0.002515, 1.002431, 0.049907, 0.060989, -0.003044,
+ 1.002475, 0.049908, 0.072592, -0.003623, 1.002546, 0.049907, 0.085204, -0.004252, 1.002467,
+ 0.049907, 0.098832, -0.004932, 1.002450, 0.049908, 0.113481, -0.005663, 1.002482, 0.049907,
+ 0.129145, -0.006443, 1.002443, 0.049907, 0.145825, -0.007271, 1.002495, 0.049906, 0.163491,
+ -0.008128, 1.002475, 0.049903, 0.181911, -0.008826, 1.002459, 0.049879, 0.200065, -0.009285,
+ 1.002443, 0.049824, 0.220025, -0.010966, 1.002450, 0.049897, 0.241581, -0.012025, 1.002463,
+ 0.049893, 0.264099, -0.013105, 1.002395, 0.049881, 0.287493, -0.014145, 1.002390, 0.049855,
+ 0.311399, -0.014925, 1.002414, 0.049769, 0.335096, -0.015239, 1.002363, 0.049591, 0.359815,
+ -0.017559, 1.002415, 0.049777, 0.386365, -0.018554, 1.002354, 0.049675, 0.413017, -0.019043,
+ 1.002297, 0.049444, 0.439519, -0.019815, 1.002284, 0.049253, 0.466938, -0.021741, 1.002307,
+ 0.049327, 0.494999, -0.021887, 1.002181, 0.048922, 0.522922, -0.022844, 1.002107, 0.048677,
+ 0.551270, -0.024014, 1.002101, 0.048478, 0.579771, -0.024156, 1.002060, 0.047904, 0.608156,
+ -0.025317, 1.002077, 0.047594, 0.636662, -0.025321, 1.001975, 0.046876, 0.664846, -0.026018,
+ 1.001992, 0.046354, 0.692877, -0.026041, 1.001846, 0.045504, 0.720316, -0.026252, 1.001846,
+ 0.044655, 0.747658, -0.026159, 1.001931, 0.043670, 0.774252, -0.026086, 1.001845, 0.042515,
+ 0.800179, -0.025653, 1.001794, 0.041211, 0.825525, -0.025170, 1.001787, 0.039823, 0.850013,
+ -0.024788, 1.001806, 0.038409, 0.873593, -0.023992, 1.001688, 0.036767, 0.896343, -0.022985,
+ 1.001666, 0.034900, 0.918062, -0.022005, 1.001548, 0.033010, 0.938928, -0.021110, 1.001503,
+ 0.031143, 0.958667, -0.019893, 1.001341, 0.029059, 0.977457, -0.018546, 1.001194, 0.026888,
+ 0.995243, -0.017152, 1.001095, 0.024713, 1.012023, -0.015750, 1.001100, 0.022496, 1.027614,
+ -0.014289, 1.000851, 0.020153, 1.042389, -0.012688, 1.000724, 0.017839, 1.056161, -0.011118,
+ 1.000572, 0.015529, 1.068968, -0.009540, 1.000407, 0.013240, 1.080866, -0.007963, 1.000258,
+ 0.010940, 1.091944, -0.006416, 1.000254, 0.008716, 1.102104, -0.004771, 1.000175, 0.006434,
+ 1.111571, -0.003056, 1.000148, 0.004169, 1.120084, -0.001458, 1.000050, 0.002033, 1.127981,
+ 0.000021, 0.999987, -0.000027, 0.000200, -0.000015, 1.005620, 0.074940, 0.000504, -0.000038,
+ 1.005650, 0.074939, 0.002016, -0.000151, 1.005613, 0.074939, 0.004535, -0.000340, 1.005618,
+ 0.074939, 0.008062, -0.000604, 1.005614, 0.074939, 0.012597, -0.000944, 1.005616, 0.074940,
+ 0.018141, -0.001359, 1.005558, 0.074939, 0.024695, -0.001851, 1.005495, 0.074940, 0.032253,
+ -0.002417, 1.005616, 0.074939, 0.040822, -0.003059, 1.005591, 0.074940, 0.050399, -0.003777,
+ 1.005596, 0.074940, 0.060989, -0.004570, 1.005599, 0.074939, 0.072591, -0.005440, 1.005616,
+ 0.074940, 0.085203, -0.006385, 1.005616, 0.074939, 0.098833, -0.007406, 1.005595, 0.074938,
+ 0.113481, -0.008502, 1.005605, 0.074938, 0.129147, -0.009674, 1.005605, 0.074937, 0.145817,
+ -0.010916, 1.005513, 0.074937, 0.163485, -0.012199, 1.005579, 0.074928, 0.181824, -0.013172,
+ 1.005552, 0.074885, 0.200274, -0.014100, 1.005524, 0.074825, 0.220017, -0.016464, 1.005529,
+ 0.074928, 0.241568, -0.018052, 1.005490, 0.074914, 0.264084, -0.019671, 1.005457, 0.074898,
+ 0.287450, -0.021217, 1.005431, 0.074860, 0.311281, -0.022341, 1.005395, 0.074717, 0.335228,
+ -0.023296, 1.005320, 0.074526, 0.360047, -0.025965, 1.005302, 0.074649, 0.386273, -0.027808,
+ 1.005285, 0.074575, 0.412855, -0.028504, 1.005167, 0.074237, 0.439705, -0.030007, 1.005129,
+ 0.074013, 0.466975, -0.032263, 1.005082, 0.073967, 0.494874, -0.032931, 1.004960, 0.073475,
+ 0.523066, -0.034348, 1.004834, 0.073084, 0.551198, -0.035739, 1.004806, 0.072657, 0.579889,
+ -0.036575, 1.004687, 0.072029, 0.608282, -0.037434, 1.004605, 0.071309, 0.636812, -0.038323,
+ 1.004589, 0.070507, 0.665010, -0.038676, 1.004403, 0.069424, 0.693063, -0.039237, 1.004340,
+ 0.068370, 0.720750, -0.039332, 1.004224, 0.066988, 0.747911, -0.039179, 1.004117, 0.065447,
+ 0.774576, -0.039110, 1.004035, 0.063838, 0.800737, -0.038542, 1.004027, 0.061923, 0.825966,
+ -0.037966, 1.003825, 0.059859, 0.850534, -0.036943, 1.003786, 0.057529, 0.874289, -0.035853,
+ 1.003560, 0.055081, 0.897152, -0.034730, 1.003549, 0.052476, 0.919029, -0.033242, 1.003454,
+ 0.049647, 0.939851, -0.031508, 1.003215, 0.046670, 0.959599, -0.029695, 1.002916, 0.043588,
+ 0.978293, -0.027845, 1.002720, 0.040401, 0.996085, -0.025775, 1.002445, 0.037060, 1.012768,
+ -0.023607, 1.002133, 0.033726, 1.028404, -0.021374, 1.001822, 0.030217, 1.043150, -0.019108,
+ 1.001602, 0.026820, 1.056760, -0.016823, 1.001274, 0.023372, 1.069471, -0.014378, 1.000964,
+ 0.019891, 1.081283, -0.011884, 1.000684, 0.016405, 1.092238, -0.009398, 1.000514, 0.012950,
+ 1.102384, -0.007030, 1.000319, 0.009579, 1.111737, -0.004751, 1.000225, 0.006384, 1.120274,
+ -0.002404, 1.000046, 0.003192, 1.128182, 0.000031, 1.000020, 0.000033, 0.000200, -0.000020,
+ 1.010006, 0.100065, 0.000504, -0.000050, 1.009927, 0.100065, 0.002016, -0.000202, 1.010026,
+ 0.100064, 0.004535, -0.000454, 1.010018, 0.100065, 0.008062, -0.000807, 1.009891, 0.100064,
+ 0.012599, -0.001261, 1.010175, 0.100064, 0.018141, -0.001815, 1.010067, 0.100065, 0.024692,
+ -0.002471, 1.010014, 0.100066, 0.032251, -0.003227, 1.009950, 0.100065, 0.040818, -0.004084,
+ 1.009963, 0.100067, 0.050401, -0.005043, 1.010032, 0.100064, 0.060988, -0.006102, 1.009979,
+ 0.100064, 0.072588, -0.007263, 1.009984, 0.100063, 0.085205, -0.008525, 1.010023, 0.100063,
+ 0.098832, -0.009888, 1.009960, 0.100062, 0.113479, -0.011352, 1.009974, 0.100063, 0.129142,
+ -0.012916, 1.009945, 0.100062, 0.145817, -0.014573, 1.009924, 0.100058, 0.163468, -0.016276,
+ 1.009912, 0.100050, 0.181674, -0.017411, 1.009859, 0.099975, 0.200435, -0.019002, 1.009842,
+ 0.099932, 0.220005, -0.021978, 1.009820, 0.100043, 0.241550, -0.024096, 1.009778, 0.100031,
+ 0.264058, -0.026250, 1.009765, 0.100002, 0.287399, -0.028286, 1.009724, 0.099939, 0.311134,
+ -0.029698, 1.009596, 0.099748, 0.335350, -0.031442, 1.009508, 0.099582, 0.360295, -0.034401,
+ 1.009475, 0.099613, 0.386112, -0.037030, 1.009329, 0.099558, 0.412733, -0.038163, 1.009250,
+ 0.099137, 0.439833, -0.040250, 1.009125, 0.098866, 0.467099, -0.042583, 1.009011, 0.098626,
+ 0.494828, -0.044299, 1.008803, 0.098149, 0.523217, -0.045876, 1.008712, 0.097600, 0.551338,
+ -0.047440, 1.008509, 0.096929, 0.579917, -0.048995, 1.008371, 0.096178, 0.608454, -0.049901,
+ 1.008212, 0.095145, 0.636785, -0.051224, 1.007963, 0.094151, 0.665220, -0.051675, 1.007741,
+ 0.092728, 0.693194, -0.052278, 1.007616, 0.091195, 0.721008, -0.052406, 1.007327, 0.089384,
+ 0.748196, -0.052529, 1.007219, 0.087461, 0.774975, -0.051950, 1.006851, 0.085133, 0.801129,
+ -0.051456, 1.006732, 0.082628, 0.826668, -0.050569, 1.006612, 0.079817, 0.851291, -0.049328,
+ 1.006374, 0.076710, 0.875056, -0.047988, 1.006183, 0.073481, 0.897872, -0.046149, 1.005742,
+ 0.069943, 0.919803, -0.044144, 1.005514, 0.066151, 0.940701, -0.042095, 1.005153, 0.062247,
+ 0.960580, -0.039730, 1.004843, 0.058158, 0.979427, -0.037104, 1.004535, 0.053850, 0.997157,
+ -0.034369, 1.004023, 0.049403, 1.013777, -0.031555, 1.003622, 0.044944, 1.029452, -0.028571,
+ 1.003212, 0.040414, 1.044029, -0.025416, 1.002698, 0.035723, 1.057586, -0.022217, 1.002202,
+ 0.031072, 1.070148, -0.019037, 1.001703, 0.026429, 1.081875, -0.015936, 1.001322, 0.021896,
+ 1.092789, -0.012734, 1.001053, 0.017288, 1.102704, -0.009454, 1.000604, 0.012841, 1.112011,
+ -0.006199, 1.000387, 0.008446, 1.120590, -0.003010, 1.000166, 0.004122, 1.128283, 0.000027,
+ 0.999956, -0.000038, 0.000200, -0.000025, 1.015664, 0.125315, 0.000504, -0.000063, 1.015664,
+ 0.125316, 0.002016, -0.000253, 1.015727, 0.125315, 0.004535, -0.000568, 1.015695, 0.125314,
+ 0.008063, -0.001010, 1.015823, 0.125316, 0.012599, -0.001579, 1.015867, 0.125315, 0.018141,
+ -0.002273, 1.015758, 0.125316, 0.024691, -0.003094, 1.015662, 0.125316, 0.032252, -0.004042,
+ 1.015674, 0.125316, 0.040820, -0.005115, 1.015678, 0.125316, 0.050400, -0.006316, 1.015684,
+ 0.125315, 0.060989, -0.007642, 1.015685, 0.125315, 0.072590, -0.009096, 1.015703, 0.125314,
+ 0.085203, -0.010676, 1.015654, 0.125314, 0.098833, -0.012383, 1.015670, 0.125315, 0.113477,
+ -0.014215, 1.015635, 0.125312, 0.129138, -0.016173, 1.015599, 0.125311, 0.145815, -0.018246,
+ 1.015610, 0.125306, 0.163450, -0.020360, 1.015564, 0.125294, 0.181595, -0.021807, 1.015460,
+ 0.125204, 0.200563, -0.023971, 1.015440, 0.125165, 0.220186, -0.027280, 1.015412, 0.125250,
+ 0.241528, -0.030164, 1.015342, 0.125267, 0.264020, -0.032847, 1.015269, 0.125233, 0.287311,
+ -0.035345, 1.015232, 0.125138, 0.310993, -0.037108, 1.015063, 0.124903, 0.335467, -0.039653,
+ 1.014970, 0.124749, 0.360497, -0.042914, 1.014819, 0.124702, 0.385986, -0.046142, 1.014685,
+ 0.124623, 0.412703, -0.048050, 1.014543, 0.124193, 0.439929, -0.050527, 1.014315, 0.123833,
+ 0.467163, -0.052880, 1.014087, 0.123375, 0.494824, -0.055672, 1.013898, 0.122982, 0.523222,
+ -0.057388, 1.013647, 0.122166, 0.551557, -0.059328, 1.013403, 0.121343, 0.579884, -0.061315,
+ 1.013059, 0.120430, 0.608619, -0.062531, 1.012745, 0.119140, 0.637014, -0.063778, 1.012425,
+ 0.117721, 0.665425, -0.064734, 1.012067, 0.116069, 0.693580, -0.065315, 1.011712, 0.114146,
+ 0.721194, -0.065535, 1.011200, 0.111846, 0.748586, -0.065501, 1.010896, 0.109309, 0.775437,
+ -0.065091, 1.010576, 0.106504, 0.801554, -0.064332, 1.010136, 0.103308, 0.827079, -0.063078,
+ 1.009629, 0.099695, 0.851693, -0.061728, 1.009233, 0.095946, 0.875586, -0.059853, 1.008726,
+ 0.091802, 0.898589, -0.057727, 1.008412, 0.087339, 0.920421, -0.055377, 1.007767, 0.082687,
+ 0.941533, -0.052571, 1.007529, 0.077716, 0.961426, -0.049544, 1.006929, 0.072574, 0.980287,
+ -0.046400, 1.006393, 0.067217, 0.998080, -0.042966, 1.005872, 0.061757, 1.014940, -0.039321,
+ 1.005346, 0.056072, 1.030455, -0.035585, 1.004609, 0.050410, 1.045078, -0.031823, 1.004151,
+ 0.044622, 1.058555, -0.027947, 1.003421, 0.038893, 1.071009, -0.023891, 1.002704, 0.032977,
+ 1.082594, -0.019822, 1.002023, 0.027290, 1.093265, -0.015765, 1.001403, 0.021543, 1.103132,
+ -0.011790, 1.000944, 0.016072, 1.112348, -0.007784, 1.000550, 0.010511, 1.120845, -0.003849,
+ 1.000224, 0.005174, 1.128573, 0.000057, 0.999975, -0.000039, 0.000200, -0.000030, 1.022609,
+ 0.150725, 0.000504, -0.000076, 1.022728, 0.150725, 0.002016, -0.000304, 1.022728, 0.150725,
+ 0.004535, -0.000684, 1.022733, 0.150725, 0.008062, -0.001215, 1.022715, 0.150725, 0.012598,
+ -0.001899, 1.022720, 0.150725, 0.018141, -0.002734, 1.022659, 0.150725, 0.024694, -0.003722,
+ 1.022801, 0.150724, 0.032254, -0.004861, 1.022779, 0.150726, 0.040815, -0.006152, 1.022693,
+ 0.150724, 0.050400, -0.007596, 1.022716, 0.150725, 0.060990, -0.009192, 1.022733, 0.150725,
+ 0.072587, -0.010939, 1.022630, 0.150723, 0.085203, -0.012839, 1.022676, 0.150725, 0.098828,
+ -0.014891, 1.022659, 0.150725, 0.113473, -0.017095, 1.022589, 0.150720, 0.129137, -0.019449,
+ 1.022572, 0.150716, 0.145803, -0.021938, 1.022508, 0.150712, 0.163417, -0.024443, 1.022471,
+ 0.150691, 0.181580, -0.026329, 1.022406, 0.150600, 0.200667, -0.028997, 1.022336, 0.150553,
+ 0.220429, -0.032584, 1.022296, 0.150610, 0.241497, -0.036260, 1.022202, 0.150658, 0.263975,
+ -0.039465, 1.022119, 0.150619, 0.287210, -0.042385, 1.021988, 0.150490, 0.310935, -0.044758,
+ 1.021771, 0.150241, 0.335556, -0.047922, 1.021658, 0.150076, 0.360667, -0.051493, 1.021437,
+ 0.149931, 0.386028, -0.054931, 1.021228, 0.149754, 0.412665, -0.058007, 1.021023, 0.149400,
+ 0.439951, -0.060813, 1.020723, 0.148913, 0.467262, -0.063461, 1.020332, 0.148319, 0.494972,
+ -0.066738, 1.020097, 0.147798, 0.523153, -0.068976, 1.019630, 0.146903, 0.551700, -0.071268,
+ 1.019245, 0.145863, 0.580046, -0.073439, 1.018797, 0.144695, 0.608649, -0.075193, 1.018201,
+ 0.143237, 0.637239, -0.076536, 1.017746, 0.141463, 0.665388, -0.077771, 1.017111, 0.139462,
+ 0.693755, -0.078344, 1.016609, 0.137082, 0.721345, -0.078817, 1.015863, 0.134403, 0.748879,
+ -0.078512, 1.015390, 0.131252, 0.775560, -0.078128, 1.014652, 0.127866, 0.801897, -0.077094,
+ 1.013877, 0.123928, 0.827193, -0.075863, 1.013021, 0.119733, 0.851990, -0.073973, 1.012395,
+ 0.115055, 0.875823, -0.071765, 1.011595, 0.110098, 0.898655, -0.069241, 1.010862, 0.104722,
+ 0.920915, -0.066232, 1.010185, 0.098991, 0.941969, -0.062980, 1.009588, 0.093044, 0.961882,
+ -0.059507, 1.008777, 0.086925, 0.980952, -0.055606, 1.008252, 0.080520, 0.998955, -0.051503,
+ 1.007633, 0.073890, 1.015756, -0.047292, 1.006908, 0.067302, 1.031571, -0.042804, 1.006338,
+ 0.060412, 1.046095, -0.038132, 1.005512, 0.053497, 1.059542, -0.033380, 1.004592, 0.046569,
+ 1.072006, -0.028613, 1.003731, 0.039679, 1.083348, -0.023811, 1.002871, 0.032772, 1.093969,
+ -0.018930, 1.002068, 0.025894, 1.103697, -0.014098, 1.001284, 0.019178, 1.112813, -0.009339,
+ 1.000820, 0.012652, 1.121193, -0.004661, 1.000324, 0.006226, 1.128930, 0.000052, 0.999988,
+ -0.000008, 0.000200, -0.000035, 1.030857, 0.176327, 0.000504, -0.000089, 1.031137, 0.176326,
+ 0.002016, -0.000355, 1.031049, 0.176325, 0.004535, -0.000800, 1.031105, 0.176326, 0.008062,
+ -0.001422, 1.030973, 0.176326, 0.012598, -0.002221, 1.031168, 0.176326, 0.018141, -0.003199,
+ 1.031093, 0.176326, 0.024695, -0.004354, 1.031297, 0.176326, 0.032253, -0.005687, 1.031091,
+ 0.176327, 0.040821, -0.007197, 1.031012, 0.176326, 0.050399, -0.008886, 1.031068, 0.176325,
+ 0.060987, -0.010752, 1.030967, 0.176323, 0.072588, -0.012797, 1.031028, 0.176324, 0.085200,
+ -0.015019, 1.030985, 0.176322, 0.098829, -0.017419, 1.030983, 0.176320, 0.113474, -0.019997,
+ 1.030953, 0.176317, 0.129133, -0.022748, 1.030891, 0.176312, 0.145800, -0.025655, 1.030825,
+ 0.176306, 0.163372, -0.028510, 1.030781, 0.176279, 0.181578, -0.030914, 1.030683, 0.176187,
+ 0.200761, -0.034076, 1.030574, 0.176139, 0.220645, -0.037985, 1.030476, 0.176160, 0.241473,
+ -0.042391, 1.030384, 0.176238, 0.263922, -0.046105, 1.030241, 0.176175, 0.287074, -0.049390,
+ 1.030049, 0.176013, 0.310915, -0.052511, 1.029839, 0.175776, 0.335604, -0.056236, 1.029608,
+ 0.175578, 0.360775, -0.060118, 1.029355, 0.175359, 0.386196, -0.063907, 1.029052, 0.175083,
+ 0.412599, -0.067997, 1.028766, 0.174791, 0.439916, -0.071088, 1.028326, 0.174174, 0.467444,
+ -0.074247, 1.027890, 0.173487, 0.495132, -0.077728, 1.027374, 0.172774, 0.523117, -0.080822,
+ 1.026763, 0.171824, 0.551783, -0.083228, 1.026205, 0.170554, 0.580234, -0.085682, 1.025614,
+ 0.169090, 0.608568, -0.087860, 1.024668, 0.167468, 0.637357, -0.089346, 1.023939, 0.165283,
+ 0.665507, -0.090704, 1.022946, 0.162966, 0.693704, -0.091388, 1.022010, 0.160131, 0.721396,
+ -0.091783, 1.021085, 0.156957, 0.748676, -0.091688, 1.019894, 0.153292, 0.775370, -0.090992,
+ 1.018608, 0.149158, 0.801547, -0.089881, 1.017646, 0.144551, 0.827013, -0.088267, 1.016355,
+ 0.139614, 0.851708, -0.086132, 1.015446, 0.134026, 0.875652, -0.083707, 1.014321, 0.128101,
+ 0.898703, -0.080619, 1.013454, 0.121841, 0.920904, -0.077280, 1.012634, 0.115379, 0.942077,
+ -0.073484, 1.011770, 0.108355, 0.962245, -0.069252, 1.010894, 0.101153, 0.981385, -0.064807,
+ 1.010114, 0.093666, 0.999379, -0.060080, 1.009294, 0.086007, 1.016494, -0.055007, 1.008591,
+ 0.078194, 1.032357, -0.049760, 1.007821, 0.070328, 1.047061, -0.044468, 1.006871, 0.062358,
+ 1.060675, -0.038960, 1.006062, 0.054279, 1.073032, -0.033343, 1.004911, 0.046158, 1.084293,
+ -0.027699, 1.003791, 0.038111, 1.094724, -0.022130, 1.002744, 0.030239, 1.104302, -0.016508,
+ 1.001815, 0.022397, 1.113290, -0.010846, 1.001083, 0.014747, 1.121649, -0.005294, 1.000490,
+ 0.007234, 1.129230, 0.000071, 0.999975, -0.000053, 0.000200, -0.000040, 1.040431, 0.202155,
+ 0.000504, -0.000102, 1.040912, 0.202154, 0.002016, -0.000407, 1.041328, 0.202152, 0.004535,
+ -0.000917, 1.040877, 0.202154, 0.008063, -0.001630, 1.040867, 0.202153, 0.012598, -0.002547,
+ 1.040870, 0.202153, 0.018140, -0.003667, 1.040808, 0.202153, 0.024692, -0.004991, 1.040861,
+ 0.202153, 0.032252, -0.006519, 1.040861, 0.202153, 0.040822, -0.008252, 1.040864, 0.202153,
+ 0.050397, -0.010187, 1.040717, 0.202151, 0.060988, -0.012327, 1.040791, 0.202152, 0.072582,
+ -0.014669, 1.040640, 0.202149, 0.085198, -0.017217, 1.040716, 0.202147, 0.098827, -0.019968,
+ 1.040748, 0.202141, 0.113467, -0.022921, 1.040632, 0.202142, 0.129129, -0.026074, 1.040606,
+ 0.202137, 0.145793, -0.029399, 1.040566, 0.202127, 0.163294, -0.032524, 1.040459, 0.202078,
+ 0.181589, -0.035552, 1.040315, 0.201996, 0.200844, -0.039208, 1.040221, 0.201948, 0.220835,
+ -0.043489, 1.040047, 0.201945, 0.241471, -0.048523, 1.039921, 0.202031, 0.263854, -0.052764,
+ 1.039756, 0.201957, 0.286935, -0.056387, 1.039497, 0.201743, 0.310902, -0.060338, 1.039252,
+ 0.201531, 0.335642, -0.064594, 1.038954, 0.201286, 0.360859, -0.068772, 1.038582, 0.200983,
+ 0.386419, -0.073086, 1.038160, 0.200651, 0.412588, -0.077887, 1.037724, 0.200343, 0.439836,
+ -0.081391, 1.037182, 0.199618, 0.467538, -0.085121, 1.036602, 0.198839, 0.495286, -0.088718,
+ 1.035893, 0.197895, 0.523231, -0.092514, 1.035121, 0.196887, 0.551730, -0.095238, 1.034127,
+ 0.195390, 0.580302, -0.097949, 1.033131, 0.193668, 0.608559, -0.100418, 1.031962, 0.191773,
+ 0.637224, -0.102129, 1.030838, 0.189319, 0.665597, -0.103578, 1.029511, 0.186529, 0.693535,
+ -0.104652, 1.028263, 0.183303, 0.721325, -0.104766, 1.026611, 0.179497, 0.748384, -0.104717,
+ 1.025128, 0.175283, 0.775058, -0.103846, 1.023385, 0.170493, 0.801387, -0.102728, 1.022236,
+ 0.165187, 0.826412, -0.100679, 1.019908, 0.159362, 0.851314, -0.098451, 1.018839, 0.153059,
+ 0.875100, -0.095363, 1.017306, 0.146284, 0.898280, -0.092008, 1.016151, 0.138975, 0.920450,
+ -0.088095, 1.014880, 0.131361, 0.941727, -0.083690, 1.013556, 0.123417, 0.962308, -0.079077,
+ 1.012998, 0.115201, 0.981364, -0.073894, 1.011841, 0.106711, 0.999798, -0.068435, 1.011021,
+ 0.098063, 1.016983, -0.062830, 1.010194, 0.089183, 1.033039, -0.056914, 1.009292, 0.080190,
+ 1.047994, -0.050721, 1.008474, 0.071010, 1.061580, -0.044454, 1.007386, 0.061867, 1.074023,
+ -0.038145, 1.006135, 0.052711, 1.085470, -0.031679, 1.004890, 0.043595, 1.095673, -0.025157,
+ 1.003627, 0.034506, 1.105000, -0.018702, 1.002331, 0.025468, 1.113795, -0.012458, 1.001278,
+ 0.016834, 1.122012, -0.006169, 1.000548, 0.008265, 1.129683, 0.000078, 0.999988, -0.000072,
+ 0.000200, -0.000046, 1.052496, 0.228243, 0.000504, -0.000115, 1.052079, 0.228243, 0.002016,
+ -0.000460, 1.052079, 0.228241, 0.004535, -0.001035, 1.052091, 0.228242, 0.008062, -0.001840,
+ 1.051962, 0.228242, 0.012598, -0.002875, 1.052087, 0.228242, 0.018141, -0.004140, 1.052088,
+ 0.228242, 0.024692, -0.005636, 1.052096, 0.228239, 0.032251, -0.007361, 1.052029, 0.228243,
+ 0.040820, -0.009316, 1.052038, 0.228241, 0.050399, -0.011501, 1.052042, 0.228239, 0.060990,
+ -0.013917, 1.052046, 0.228238, 0.072586, -0.016562, 1.051990, 0.228236, 0.085198, -0.019437,
+ 1.051946, 0.228234, 0.098824, -0.022542, 1.051879, 0.228229, 0.113467, -0.025875, 1.051841,
+ 0.228227, 0.129121, -0.029430, 1.051724, 0.228219, 0.145780, -0.033170, 1.051672, 0.228205,
+ 0.163222, -0.036567, 1.051556, 0.228143, 0.181604, -0.040245, 1.051382, 0.228069, 0.200913,
+ -0.044395, 1.051230, 0.228010, 0.221005, -0.049088, 1.051062, 0.227988, 0.241667, -0.054506,
+ 1.050881, 0.228044, 0.263777, -0.059437, 1.050643, 0.227986, 0.286841, -0.063590, 1.050312,
+ 0.227755, 0.310879, -0.068224, 1.050009, 0.227525, 0.335650, -0.072986, 1.049597, 0.227253,
+ 0.360869, -0.077435, 1.049121, 0.226845, 0.386609, -0.082385, 1.048587, 0.226466, 0.412742,
+ -0.087570, 1.047987, 0.226059, 0.439789, -0.091929, 1.047308, 0.225331, 0.467558, -0.096038,
+ 1.046423, 0.224409, 0.495406, -0.099938, 1.045481, 0.223288, 0.523417, -0.104050, 1.044512,
+ 0.222066, 0.551755, -0.107503, 1.043408, 0.220487, 0.580468, -0.110234, 1.042016, 0.218451,
+ 0.608904, -0.112993, 1.040535, 0.216200, 0.637230, -0.115173, 1.038934, 0.213458, 0.665566,
+ -0.116433, 1.036961, 0.210158, 0.693413, -0.117589, 1.035130, 0.206457, 0.721025, -0.117885,
+ 1.033080, 0.202197, 0.748054, -0.117606, 1.030752, 0.197296, 0.774631, -0.116771, 1.028608,
+ 0.191813, 0.800677, -0.115194, 1.026350, 0.185691, 0.826062, -0.113138, 1.024472, 0.179053,
+ 0.850590, -0.110359, 1.022174, 0.171839, 0.874550, -0.107072, 1.020381, 0.164067, 0.897567,
+ -0.103268, 1.018777, 0.155959, 0.919609, -0.098794, 1.016886, 0.147320, 0.941177, -0.094067,
+ 1.015880, 0.138365, 0.961752, -0.088670, 1.014616, 0.129051, 0.981518, -0.082965, 1.013807,
+ 0.119515, 0.999880, -0.076971, 1.012793, 0.109897, 1.017370, -0.070518, 1.011894, 0.099872,
+ 1.033661, -0.063830, 1.010943, 0.089883, 1.048672, -0.057040, 1.009802, 0.079691, 1.062479,
+ -0.049917, 1.008670, 0.069458, 1.075052, -0.042735, 1.007429, 0.059191, 1.086371, -0.035513,
+ 1.005991, 0.048894, 1.096623, -0.028359, 1.004468, 0.038770, 1.105871, -0.021111, 1.002927,
+ 0.028745, 1.114481, -0.013908, 1.001728, 0.018884, 1.122610, -0.006843, 1.000740, 0.009264,
+ 1.130165, 0.000062, 0.999983, -0.000006, 0.000200, -0.000051, 1.064931, 0.254630, 0.000504,
+ -0.000128, 1.064668, 0.254630, 0.002016, -0.000513, 1.064794, 0.254630, 0.004535, -0.001155,
+ 1.064851, 0.254630, 0.008063, -0.002053, 1.064966, 0.254630, 0.012598, -0.003208, 1.064840,
+ 0.254630, 0.018140, -0.004619, 1.064602, 0.254631, 0.024695, -0.006288, 1.064965, 0.254632,
+ 0.032251, -0.008211, 1.064795, 0.254630, 0.040821, -0.010393, 1.064802, 0.254628, 0.050398,
+ -0.012830, 1.064758, 0.254627, 0.060987, -0.015525, 1.064731, 0.254625, 0.072584, -0.018474,
+ 1.064615, 0.254621, 0.085199, -0.021682, 1.064672, 0.254619, 0.098826, -0.025144, 1.064630,
+ 0.254613, 0.113465, -0.028860, 1.064515, 0.254606, 0.129119, -0.032823, 1.064416, 0.254598,
+ 0.145767, -0.036969, 1.064347, 0.254579, 0.163190, -0.040754, 1.064132, 0.254506, 0.181622,
+ -0.044989, 1.063951, 0.254437, 0.200981, -0.049642, 1.063745, 0.254370, 0.221145, -0.054776,
+ 1.063547, 0.254324, 0.241896, -0.060538, 1.063289, 0.254346, 0.263684, -0.066113, 1.063013,
+ 0.254296, 0.286796, -0.070925, 1.062625, 0.254059, 0.310867, -0.076187, 1.062216, 0.253817,
+ 0.335644, -0.081406, 1.061703, 0.253481, 0.360917, -0.086336, 1.061066, 0.253005, 0.386786,
+ -0.091790, 1.060454, 0.252558, 0.412921, -0.097230, 1.059568, 0.252008, 0.439722, -0.102574,
+ 1.058706, 0.251323, 0.467559, -0.106972, 1.057682, 0.250239, 0.495605, -0.111329, 1.056612,
+ 0.248944, 0.523589, -0.115561, 1.055101, 0.247471, 0.551787, -0.119732, 1.053745, 0.245777,
+ 0.580426, -0.122711, 1.051829, 0.243448, 0.608778, -0.125436, 1.049642, 0.240769, 0.637069,
+ -0.127993, 1.047749, 0.237739, 0.665251, -0.129448, 1.045244, 0.233928, 0.692977, -0.130408,
+ 1.042279, 0.229640, 0.720346, -0.130931, 1.039693, 0.224829, 0.747365, -0.130392, 1.036675,
+ 0.219144, 0.773734, -0.129540, 1.033719, 0.212965, 0.799578, -0.127689, 1.030774, 0.206047,
+ 0.825002, -0.125456, 1.028551, 0.198576, 0.849564, -0.122291, 1.025800, 0.190471, 0.873412,
+ -0.118720, 1.023657, 0.181739, 0.896628, -0.114323, 1.021381, 0.172586, 0.918952, -0.109587,
+ 1.019674, 0.162914, 0.940602, -0.104093, 1.018126, 0.153039, 0.960917, -0.098187, 1.016339,
+ 0.142774, 0.980911, -0.091963, 1.015440, 0.132316, 0.999686, -0.085159, 1.014377, 0.121453,
+ 1.017538, -0.078139, 1.013498, 0.110527, 1.033918, -0.070797, 1.012332, 0.099437, 1.049390,
+ -0.063129, 1.011368, 0.088157, 1.063402, -0.055354, 1.010111, 0.076951, 1.076096, -0.047522,
+ 1.008774, 0.065616, 1.087562, -0.039447, 1.007202, 0.054310, 1.097591, -0.031359, 1.005346,
+ 0.042948, 1.106782, -0.023393, 1.003710, 0.031799, 1.115234, -0.015461, 1.002116, 0.020943,
+ 1.123166, -0.007589, 1.000858, 0.010288, 1.130796, 0.000104, 1.000032, -0.000024, 0.000200,
+ -0.000056, 1.078780, 0.281356, 0.000504, -0.000142, 1.079271, 0.281355, 0.002015, -0.000567,
+ 1.078635, 0.281355, 0.004535, -0.001276, 1.079164, 0.281356, 0.008064, -0.002269, 1.079300,
+ 0.281355, 0.012598, -0.003544, 1.079149, 0.281355, 0.018143, -0.005104, 1.079329, 0.281355,
+ 0.024691, -0.006947, 1.079073, 0.281353, 0.032254, -0.009074, 1.079253, 0.281354, 0.040822,
+ -0.011484, 1.079176, 0.281353, 0.050399, -0.014177, 1.079057, 0.281349, 0.060987, -0.017153,
+ 1.079007, 0.281347, 0.072586, -0.020412, 1.078998, 0.281343, 0.085203, -0.023956, 1.078962,
+ 0.281336, 0.098823, -0.027778, 1.078839, 0.281332, 0.113464, -0.031882, 1.078783, 0.281325,
+ 0.129114, -0.036255, 1.078633, 0.281315, 0.145748, -0.040790, 1.078545, 0.281287, 0.163179,
+ -0.045024, 1.078311, 0.281208, 0.181649, -0.049791, 1.078135, 0.281137, 0.201042, -0.054953,
+ 1.077845, 0.281063, 0.221267, -0.060551, 1.077576, 0.281006, 0.242114, -0.066663, 1.077257,
+ 0.280978, 0.263568, -0.072771, 1.076897, 0.280925, 0.286744, -0.078349, 1.076405, 0.280689,
+ 0.310840, -0.084201, 1.075898, 0.280418, 0.335612, -0.089846, 1.075287, 0.280020, 0.360975,
+ -0.095394, 1.074482, 0.279513, 0.386932, -0.101290, 1.073617, 0.278961, 0.413171, -0.107042,
+ 1.072719, 0.278283, 0.439886, -0.113083, 1.071698, 0.277547, 0.467535, -0.118010, 1.070213,
+ 0.276311, 0.495701, -0.122793, 1.068857, 0.274867, 0.523772, -0.127278, 1.067037, 0.273153,
+ 0.551849, -0.131671, 1.064923, 0.271176, 0.580338, -0.135293, 1.062749, 0.268626, 0.608771,
+ -0.138065, 1.059944, 0.265569, 0.636756, -0.140565, 1.056851, 0.262054, 0.664574, -0.142434,
+ 1.053461, 0.257807, 0.692151, -0.143237, 1.049910, 0.252930, 0.719376, -0.143717, 1.046426,
+ 0.247414, 0.745852, -0.143117, 1.042377, 0.241001, 0.772300, -0.141975, 1.038789, 0.233797,
+ 0.798050, -0.140114, 1.035290, 0.226218, 0.823370, -0.137379, 1.032374, 0.217785, 0.847735,
+ -0.134119, 1.028853, 0.208748, 0.871897, -0.129985, 1.026395, 0.198877, 0.894950, -0.125324,
+ 1.023787, 0.188803, 0.917909, -0.120007, 1.022073, 0.178493, 0.939567, -0.114099, 1.020098,
+ 0.167466, 0.960534, -0.107748, 1.018851, 0.156223, 0.980423, -0.100748, 1.017362, 0.144716,
+ 0.999334, -0.093494, 1.015961, 0.133028, 1.017561, -0.085728, 1.015059, 0.120953, 1.034225,
+ -0.077627, 1.013888, 0.108943, 1.049937, -0.069375, 1.012898, 0.096678, 1.064265, -0.060807,
+ 1.011635, 0.084350, 1.077188, -0.052052, 1.010095, 0.071964, 1.088637, -0.043304, 1.008399,
+ 0.059531, 1.098766, -0.034458, 1.006397, 0.047134, 1.107697, -0.025637, 1.004354, 0.034887,
+ 1.116055, -0.016932, 1.002611, 0.022948, 1.123819, -0.008437, 1.001023, 0.011386, 1.131333,
+ 0.000087, 0.999952, -0.000097, 0.000200, -0.000062, 1.095622, 0.308458, 0.000504, -0.000155,
+ 1.094863, 0.308458, 0.002016, -0.000622, 1.095169, 0.308458, 0.004535, -0.001399, 1.095156,
+ 0.308458, 0.008063, -0.002487, 1.095413, 0.308455, 0.012598, -0.003886, 1.095147, 0.308458,
+ 0.018141, -0.005596, 1.095150, 0.308457, 0.024692, -0.007616, 1.095140, 0.308457, 0.032252,
+ -0.009947, 1.095098, 0.308456, 0.040822, -0.012589, 1.095096, 0.308453, 0.050399, -0.015541,
+ 1.095070, 0.308451, 0.060985, -0.018803, 1.094922, 0.308448, 0.072583, -0.022375, 1.094902,
+ 0.308444, 0.085197, -0.026258, 1.094882, 0.308438, 0.098822, -0.030448, 1.094775, 0.308429,
+ 0.113460, -0.034944, 1.094641, 0.308419, 0.129112, -0.039731, 1.094530, 0.308403, 0.145711,
+ -0.044610, 1.094332, 0.308365, 0.163178, -0.049362, 1.094149, 0.308285, 0.181679, -0.054666,
+ 1.093876, 0.308210, 0.201109, -0.060336, 1.093603, 0.308132, 0.221388, -0.066414, 1.093250,
+ 0.308047, 0.242315, -0.072881, 1.092835, 0.307985, 0.263651, -0.079453, 1.092391, 0.307902,
+ 0.286720, -0.085882, 1.091866, 0.307688, 0.310817, -0.092274, 1.091225, 0.307379, 0.335562,
+ -0.098306, 1.090346, 0.306906, 0.361043, -0.104572, 1.089423, 0.306374, 0.387051, -0.110843,
+ 1.088437, 0.305710, 0.413405, -0.117062, 1.087228, 0.304906, 0.440122, -0.123501, 1.085879,
+ 0.304017, 0.467522, -0.129245, 1.084197, 0.302783, 0.495721, -0.134285, 1.082284, 0.301104,
+ 0.523925, -0.139143, 1.080109, 0.299142, 0.551814, -0.143638, 1.077043, 0.296825, 0.579878,
+ -0.147774, 1.074071, 0.294071, 0.608316, -0.150724, 1.070621, 0.290519, 0.636059, -0.153168,
+ 1.066390, 0.286424, 0.663481, -0.155139, 1.062069, 0.281559, 0.690753, -0.155944, 1.057211,
+ 0.276024, 0.717767, -0.156176, 1.052682, 0.269622, 0.743937, -0.155783, 1.047747, 0.262532,
+ 0.770214, -0.154245, 1.043510, 0.254609, 0.795542, -0.152192, 1.039121, 0.246007, 0.821099,
+ -0.149256, 1.035962, 0.236663, 0.845452, -0.145605, 1.032320, 0.226751, 0.869780, -0.141186,
+ 1.029390, 0.216165, 0.893141, -0.136137, 1.026485, 0.204937, 0.916034, -0.130332, 1.024389,
+ 0.193624, 0.938089, -0.124040, 1.022270, 0.181756, 0.959488, -0.117011, 1.020457, 0.169339,
+ 0.979594, -0.109617, 1.018871, 0.156875, 0.998912, -0.101562, 1.017533, 0.144288, 1.017100,
+ -0.093164, 1.016445, 0.131370, 1.034413, -0.084488, 1.015453, 0.118322, 1.050347, -0.075377,
+ 1.014259, 0.104963, 1.064958, -0.066108, 1.013057, 0.091722, 1.078045, -0.056702, 1.011491,
+ 0.078231, 1.089749, -0.047106, 1.009662, 0.064797, 1.099831, -0.037467, 1.007417, 0.051315,
+ 1.108789, -0.027990, 1.005144, 0.038064, 1.116865, -0.018464, 1.002925, 0.025008, 1.124609,
+ -0.009068, 1.001221, 0.012250, 1.132040, 0.000093, 0.999984, -0.000071, 0.000200, -0.000067,
+ 1.112554, 0.335981, 0.000504, -0.000169, 1.112660, 0.335981, 0.002016, -0.000677, 1.112827,
+ 0.335981, 0.004533, -0.001523, 1.112147, 0.335982, 0.008063, -0.002709, 1.112882, 0.335979,
+ 0.012598, -0.004233, 1.112891, 0.335980, 0.018141, -0.006095, 1.112882, 0.335980, 0.024693,
+ -0.008296, 1.112877, 0.335978, 0.032252, -0.010834, 1.112860, 0.335976, 0.040824, -0.013713,
+ 1.112965, 0.335974, 0.050398, -0.016927, 1.112753, 0.335971, 0.060991, -0.020482, 1.112826,
+ 0.335970, 0.072587, -0.024371, 1.112676, 0.335962, 0.085199, -0.028597, 1.112593, 0.335955,
+ 0.098822, -0.033159, 1.112453, 0.335943, 0.113461, -0.038052, 1.112329, 0.335930, 0.129108,
+ -0.043255, 1.112144, 0.335910, 0.145665, -0.048412, 1.111905, 0.335857, 0.163185, -0.053786,
+ 1.111668, 0.335781, 0.181710, -0.059608, 1.111345, 0.335696, 0.201166, -0.065794, 1.110979,
+ 0.335606, 0.221489, -0.072361, 1.110553, 0.335505, 0.242471, -0.079184, 1.110112, 0.335396,
+ 0.263900, -0.086213, 1.109584, 0.335271, 0.286688, -0.093491, 1.108927, 0.335089, 0.310773,
+ -0.100406, 1.108091, 0.334737, 0.335573, -0.106987, 1.107169, 0.334208, 0.361117, -0.113844,
+ 1.106097, 0.333600, 0.387175, -0.120463, 1.104826, 0.332828, 0.413665, -0.127245, 1.103415,
+ 0.331929, 0.440386, -0.133927, 1.101632, 0.330851, 0.467527, -0.140496, 1.099563, 0.329538,
+ 0.495630, -0.145874, 1.096956, 0.327618, 0.523864, -0.150997, 1.094201, 0.325390, 0.551705,
+ -0.155713, 1.090342, 0.322688, 0.579383, -0.159993, 1.086010, 0.319483, 0.607301, -0.163238,
+ 1.081226, 0.315522, 0.634873, -0.165667, 1.076065, 0.310840, 0.662028, -0.167606, 1.070466,
+ 0.305377, 0.688755, -0.168626, 1.064601, 0.299056, 0.715612, -0.168578, 1.059269, 0.291963,
+ 0.741604, -0.167961, 1.053648, 0.284018, 0.767757, -0.166439, 1.048928, 0.275474, 0.793264,
+ -0.164023, 1.044343, 0.266056, 0.818165, -0.160965, 1.039909, 0.255750, 0.843255, -0.156896,
+ 1.036180, 0.244843, 0.867249, -0.152262, 1.032303, 0.233464, 0.890994, -0.146655, 1.029365,
+ 0.221128, 0.913829, -0.140574, 1.026607, 0.208554, 0.936508, -0.133640, 1.024512, 0.195772,
+ 0.957720, -0.126220, 1.022421, 0.182420, 0.978940, -0.118164, 1.021293, 0.168852, 0.998285,
+ -0.109558, 1.019444, 0.155261, 1.016764, -0.100562, 1.017825, 0.141395, 1.034387, -0.091064,
+ 1.016996, 0.127311, 1.050916, -0.081468, 1.015945, 0.113089, 1.065652, -0.071463, 1.014547,
+ 0.098879, 1.079155, -0.061240, 1.013066, 0.084468, 1.090822, -0.050980, 1.010788, 0.069940,
+ 1.101100, -0.040549, 1.008563, 0.055475, 1.109824, -0.030101, 1.005950, 0.041033, 1.117828,
+ -0.019884, 1.003453, 0.027022, 1.125443, -0.009900, 1.001484, 0.013306, 1.132869, 0.000094,
+ 1.000004, -0.000046, 0.000200, -0.000073, 1.132849, 0.363970, 0.000504, -0.000183, 1.132155,
+ 0.363969, 0.002016, -0.000734, 1.132516, 0.363969, 0.004535, -0.001651, 1.132256, 0.363969,
+ 0.008062, -0.002934, 1.132318, 0.363966, 0.012597, -0.004585, 1.132386, 0.363968, 0.018141,
+ -0.006602, 1.132457, 0.363967, 0.024693, -0.008987, 1.132511, 0.363967, 0.032252, -0.011737,
+ 1.132488, 0.363965, 0.040819, -0.014853, 1.132241, 0.363959, 0.050398, -0.018336, 1.132372,
+ 0.363958, 0.060988, -0.022185, 1.132373, 0.363954, 0.072582, -0.026396, 1.132137, 0.363943,
+ 0.085195, -0.030973, 1.132071, 0.363935, 0.098822, -0.035913, 1.131978, 0.363922, 0.113461,
+ -0.041209, 1.131801, 0.363905, 0.129116, -0.046833, 1.131535, 0.363867, 0.145640, -0.052346,
+ 1.131290, 0.363814, 0.163199, -0.058275, 1.131046, 0.363734, 0.181742, -0.064623, 1.130671,
+ 0.363642, 0.201227, -0.071336, 1.130224, 0.363539, 0.221587, -0.078396, 1.129758, 0.363419,
+ 0.242625, -0.085545, 1.129213, 0.363256, 0.264183, -0.093110, 1.128549, 0.363097, 0.286668,
+ -0.101206, 1.127767, 0.362939, 0.310745, -0.108586, 1.126796, 0.362516, 0.335602, -0.115827,
+ 1.125686, 0.361953, 0.361202, -0.123212, 1.124451, 0.361275, 0.387298, -0.130294, 1.122861,
+ 0.360376, 0.413918, -0.137553, 1.121154, 0.359362, 0.440680, -0.144577, 1.118825, 0.358069,
+ 0.467667, -0.151558, 1.116002, 0.356581, 0.495449, -0.157621, 1.112778, 0.354531, 0.523514,
+ -0.162844, 1.108842, 0.351915, 0.551250, -0.167744, 1.104075, 0.348797, 0.578629, -0.172132,
+ 1.098733, 0.345222, 0.605757, -0.175733, 1.092224, 0.340665, 0.633392, -0.178109, 1.086201,
+ 0.335286, 0.660783, -0.180009, 1.080110, 0.329286, 0.687219, -0.181105, 1.073419, 0.322319,
+ 0.713873, -0.181046, 1.067410, 0.314616, 0.740094, -0.180219, 1.061414, 0.306014, 0.765233,
+ -0.178559, 1.055287, 0.296704, 0.790885, -0.175806, 1.049727, 0.286394, 0.815464, -0.172354,
+ 1.044519, 0.275189, 0.840259, -0.168048, 1.040375, 0.263441, 0.864285, -0.162904, 1.036010,
+ 0.250918, 0.888806, -0.157194, 1.033525, 0.237611, 0.911682, -0.150486, 1.029490, 0.223809,
+ 0.934481, -0.143212, 1.026778, 0.209705, 0.956337, -0.135233, 1.024632, 0.195281, 0.977380,
+ -0.126650, 1.022737, 0.180878, 0.997427, -0.117552, 1.021110, 0.166112, 1.016666, -0.107814,
+ 1.019869, 0.151231, 1.034337, -0.097814, 1.018543, 0.136375, 1.051082, -0.087330, 1.017476,
+ 0.121187, 1.066326, -0.076614, 1.016083, 0.106043, 1.079897, -0.065793, 1.014227, 0.090566,
+ 1.092136, -0.054654, 1.012334, 0.074988, 1.102315, -0.043516, 1.009627, 0.059577, 1.111105,
+ -0.032509, 1.006808, 0.044202, 1.118861, -0.021381, 1.003917, 0.028995, 1.126363, -0.010489,
+ 1.001670, 0.014269, 1.133598, 0.000083, 0.999989, -0.000035, 0.000200, -0.000079, 1.155026,
+ 0.392470, 0.000504, -0.000198, 1.154184, 0.392469, 0.002016, -0.000791, 1.153990, 0.392469,
+ 0.004535, -0.001780, 1.154045, 0.392469, 0.008063, -0.003164, 1.154007, 0.392466, 0.012598,
+ -0.004944, 1.154022, 0.392469, 0.018141, -0.007119, 1.154015, 0.392468, 0.024692, -0.009690,
+ 1.154017, 0.392466, 0.032254, -0.012656, 1.154069, 0.392465, 0.040826, -0.016018, 1.153980,
+ 0.392459, 0.050399, -0.019771, 1.153911, 0.392456, 0.060987, -0.023919, 1.153860, 0.392447,
+ 0.072588, -0.028461, 1.153777, 0.392442, 0.085197, -0.033393, 1.153582, 0.392428, 0.098822,
+ -0.038716, 1.153434, 0.392412, 0.113462, -0.044422, 1.153271, 0.392390, 0.129101, -0.050455,
+ 1.153019, 0.392359, 0.145642, -0.056392, 1.152721, 0.392283, 0.163223, -0.062859, 1.152404,
+ 0.392201, 0.181779, -0.069721, 1.151941, 0.392099, 0.201289, -0.076968, 1.151422, 0.391978,
+ 0.221678, -0.084518, 1.150861, 0.391833, 0.242752, -0.092017, 1.150156, 0.391618, 0.264474,
+ -0.100184, 1.149402, 0.391421, 0.286768, -0.108921, 1.148545, 0.391249, 0.310719, -0.116815,
+ 1.147388, 0.390773, 0.335638, -0.124785, 1.146042, 0.390168, 0.361240, -0.132630, 1.144529,
+ 0.389394, 0.387443, -0.140298, 1.142602, 0.388391, 0.414067, -0.147913, 1.140361, 0.387199,
+ 0.440904, -0.155362, 1.137612, 0.385742, 0.467771, -0.162574, 1.133659, 0.383926, 0.494907,
+ -0.169312, 1.129246, 0.381715, 0.522801, -0.174778, 1.124228, 0.378678, 0.550751, -0.179824,
+ 1.118697, 0.375158, 0.578018, -0.184284, 1.112019, 0.370851, 0.605291, -0.188215, 1.105151,
+ 0.365928, 0.632269, -0.190760, 1.097677, 0.360114, 0.659432, -0.192457, 1.090816, 0.353498,
+ 0.685839, -0.193458, 1.083286, 0.346094, 0.711876, -0.193502, 1.076245, 0.337754, 0.738184,
+ -0.192371, 1.069684, 0.328412, 0.763723, -0.190531, 1.063249, 0.318164, 0.789192, -0.187726,
+ 1.057265, 0.306900, 0.813744, -0.183783, 1.051177, 0.295021, 0.838408, -0.179328, 1.045902,
+ 0.282144, 0.862116, -0.173573, 1.040853, 0.268438, 0.885636, -0.167350, 1.036515, 0.254108,
+ 0.909342, -0.160229, 1.033269, 0.239082, 0.931962, -0.152529, 1.029627, 0.224024, 0.954671,
+ -0.144080, 1.027507, 0.208393, 0.975707, -0.135023, 1.024657, 0.192630, 0.996644, -0.125258,
+ 1.022998, 0.176741, 1.015817, -0.115089, 1.021234, 0.160926, 1.034301, -0.104317, 1.020025,
+ 0.145042, 1.051131, -0.093218, 1.018739, 0.129052, 1.066836, -0.081828, 1.017419, 0.112905,
+ 1.081027, -0.070132, 1.015714, 0.096578, 1.093225, -0.058382, 1.013465, 0.080077, 1.103691,
+ -0.046527, 1.010853, 0.063580, 1.112431, -0.034624, 1.007702, 0.047118, 1.120035, -0.022913,
+ 1.004551, 0.031018, 1.127336, -0.011284, 1.001924, 0.015283, 1.134510, 0.000170, 0.999937,
+ -0.000058, 0.000200, -0.000084, 1.177044, 0.421534, 0.000504, -0.000212, 1.177312, 0.421533,
+ 0.002016, -0.000850, 1.177730, 0.421533, 0.004535, -0.001912, 1.177722, 0.421533, 0.008063,
+ -0.003399, 1.177844, 0.421529, 0.012598, -0.005310, 1.177768, 0.421533, 0.018141, -0.007646,
+ 1.177730, 0.421531, 0.024692, -0.010407, 1.177663, 0.421530, 0.032252, -0.013592, 1.177681,
+ 0.421527, 0.040821, -0.017201, 1.177562, 0.421524, 0.050401, -0.021234, 1.177445, 0.421516,
+ 0.060988, -0.025688, 1.177461, 0.421509, 0.072590, -0.030565, 1.177364, 0.421498, 0.085200,
+ -0.035860, 1.177205, 0.421482, 0.098823, -0.041572, 1.177011, 0.421462, 0.113465, -0.047694,
+ 1.176794, 0.421436, 0.129094, -0.054122, 1.176504, 0.421396, 0.145652, -0.060530, 1.176203,
+ 0.421311, 0.163245, -0.067517, 1.175805, 0.421218, 0.181825, -0.074919, 1.175271, 0.421108,
+ 0.201360, -0.082700, 1.174717, 0.420974, 0.221773, -0.090727, 1.174021, 0.420795, 0.242908,
+ -0.098719, 1.173173, 0.420536, 0.264742, -0.107417, 1.172285, 0.420296, 0.287091, -0.116601,
+ 1.171326, 0.420065, 0.310723, -0.125265, 1.169907, 0.419582, 0.335685, -0.133876, 1.168352,
+ 0.418912, 0.361285, -0.142140, 1.166322, 0.418006, 0.387562, -0.150436, 1.164136, 0.416899,
+ 0.414175, -0.158388, 1.161162, 0.415513, 0.441021, -0.166258, 1.157608, 0.413836, 0.467698,
+ -0.173720, 1.152519, 0.411702, 0.494730, -0.180843, 1.147020, 0.409102, 0.522524, -0.186906,
+ 1.141256, 0.405789, 0.550055, -0.192004, 1.134114, 0.401759, 0.577512, -0.196588, 1.127086,
+ 0.397153, 0.604348, -0.200420, 1.119029, 0.391767, 0.630970, -0.203320, 1.110308, 0.385573,
+ 0.658023, -0.204883, 1.102643, 0.378245, 0.684422, -0.205716, 1.094573, 0.370191, 0.710405,
+ -0.205767, 1.086405, 0.361231, 0.736417, -0.204513, 1.078712, 0.351106, 0.761836, -0.202281,
+ 1.071619, 0.340096, 0.787140, -0.199395, 1.064873, 0.328139, 0.812197, -0.195185, 1.058313,
+ 0.315044, 0.836342, -0.190191, 1.052085, 0.300933, 0.860311, -0.184343, 1.046705, 0.286411,
+ 0.883597, -0.177415, 1.041072, 0.270897, 0.906852, -0.170003, 1.036797, 0.254825, 0.929991,
+ -0.161592, 1.033264, 0.238176, 0.952478, -0.152792, 1.030250, 0.221581, 0.974216, -0.143032,
+ 1.027331, 0.204378, 0.995372, -0.132922, 1.025135, 0.187470, 1.015330, -0.122009, 1.023250,
+ 0.170538, 1.034070, -0.110740, 1.022021, 0.153777, 1.051295, -0.099016, 1.020271, 0.136916,
+ 1.067460, -0.086920, 1.018948, 0.119880, 1.082022, -0.074729, 1.017336, 0.102565, 1.094378,
+ -0.062036, 1.014820, 0.084994, 1.104998, -0.049413, 1.011999, 0.067650, 1.113773, -0.036812,
+ 1.008711, 0.050148, 1.121263, -0.024274, 1.005141, 0.032976, 1.128420, -0.012038, 1.002196,
+ 0.016239, 1.135496, 0.000106, 1.000042, -0.000062, 0.000200, -0.000090, 1.203048, 0.451217,
+ 0.000504, -0.000227, 1.203226, 0.451215, 0.002016, -0.000909, 1.203450, 0.451215, 0.004535,
+ -0.002046, 1.203569, 0.451215, 0.008062, -0.003638, 1.203609, 0.451209, 0.012598, -0.005684,
+ 1.203580, 0.451214, 0.018141, -0.008185, 1.203515, 0.451212, 0.024694, -0.011141, 1.203618,
+ 0.451211, 0.032253, -0.014549, 1.203609, 0.451207, 0.040815, -0.018409, 1.203302, 0.451203,
+ 0.050401, -0.022727, 1.203454, 0.451195, 0.060990, -0.027495, 1.203480, 0.451188, 0.072591,
+ -0.032713, 1.203220, 0.451172, 0.085203, -0.038378, 1.203058, 0.451154, 0.098829, -0.044489,
+ 1.202838, 0.451130, 0.113466, -0.051031, 1.202530, 0.451098, 0.129084, -0.057808, 1.202270,
+ 0.451041, 0.145669, -0.064769, 1.201904, 0.450956, 0.163278, -0.072278, 1.201411, 0.450853,
+ 0.181880, -0.080224, 1.200825, 0.450721, 0.201436, -0.088537, 1.200164, 0.450566, 0.221865,
+ -0.097009, 1.199335, 0.450351, 0.243083, -0.105591, 1.198383, 0.450062, 0.265033, -0.114818,
+ 1.197380, 0.449769, 0.287456, -0.124372, 1.196137, 0.449438, 0.310758, -0.133892, 1.194554,
+ 0.448974, 0.335721, -0.143052, 1.192649, 0.448216, 0.361348, -0.151868, 1.190233, 0.447202,
+ 0.387573, -0.160644, 1.187211, 0.445926, 0.414159, -0.169028, 1.183452, 0.444313, 0.440950,
+ -0.177169, 1.178562, 0.442315, 0.467998, -0.185090, 1.173540, 0.439960, 0.494566, -0.192396,
+ 1.166344, 0.436989, 0.521730, -0.198915, 1.159283, 0.433439, 0.549405, -0.204240, 1.151503,
+ 0.428984, 0.576755, -0.208861, 1.143004, 0.423839, 0.603635, -0.212734, 1.134099, 0.418012,
+ 0.629979, -0.215712, 1.124555, 0.411445, 0.656597, -0.217385, 1.115293, 0.403628, 0.683317,
+ -0.218093, 1.106460, 0.394639, 0.708990, -0.217835, 1.097389, 0.385012, 0.734898, -0.216774,
+ 1.088940, 0.373999, 0.760342, -0.214120, 1.080385, 0.362128, 0.785517, -0.210821, 1.072959,
+ 0.349184, 0.809933, -0.206443, 1.065450, 0.335080, 0.834339, -0.200942, 1.058701, 0.320257,
+ 0.858793, -0.194938, 1.052711, 0.304133, 0.882300, -0.187615, 1.047044, 0.287771, 0.905560,
+ -0.179626, 1.042083, 0.270571, 0.927916, -0.170753, 1.037077, 0.252741, 0.950415, -0.161270,
+ 1.033200, 0.234656, 0.972920, -0.151239, 1.030418, 0.216652, 0.993893, -0.140358, 1.027479,
+ 0.198252, 1.014204, -0.128963, 1.024897, 0.180113, 1.033878, -0.117128, 1.023648, 0.162282,
+ 1.051754, -0.104678, 1.022230, 0.144366, 1.067924, -0.092000, 1.020453, 0.126455, 1.082643,
+ -0.078837, 1.018518, 0.108194, 1.095503, -0.065669, 1.016199, 0.089966, 1.106290, -0.052345,
+ 1.013113, 0.071530, 1.115219, -0.039024, 1.009636, 0.053158, 1.122587, -0.025789, 1.005801,
+ 0.034959, 1.129461, -0.012622, 1.002442, 0.017222, 1.136468, 0.000152, 0.999964, -0.000065,
+ 0.000200, -0.000096, 1.231156, 0.481574, 0.000504, -0.000243, 1.232187, 0.481572, 0.002016,
+ -0.000971, 1.231948, 0.481572, 0.004535, -0.002184, 1.231919, 0.481572, 0.008061, -0.003882,
+ 1.231453, 0.481566, 0.012597, -0.006066, 1.231800, 0.481572, 0.018142, -0.008736, 1.231756,
+ 0.481569, 0.024693, -0.011889, 1.232062, 0.481570, 0.032254, -0.015528, 1.231915, 0.481563,
+ 0.040822, -0.019650, 1.231863, 0.481559, 0.050402, -0.024255, 1.231737, 0.481550, 0.060992,
+ -0.029342, 1.231678, 0.481537, 0.072592, -0.034908, 1.231537, 0.481521, 0.085207, -0.040953,
+ 1.231336, 0.481499, 0.098834, -0.047469, 1.231071, 0.481469, 0.113474, -0.054441, 1.230757,
+ 0.481431, 0.129077, -0.061556, 1.230424, 0.481359, 0.145691, -0.069091, 1.230022, 0.481269,
+ 0.163321, -0.077151, 1.229461, 0.481156, 0.181936, -0.085636, 1.228718, 0.481011, 0.201516,
+ -0.094484, 1.228023, 0.480830, 0.221963, -0.103362, 1.227057, 0.480562, 0.243264, -0.112628,
+ 1.225997, 0.480247, 0.265291, -0.122366, 1.224744, 0.479891, 0.287824, -0.132256, 1.223255,
+ 0.479461, 0.310927, -0.142614, 1.221348, 0.478978, 0.335749, -0.152326, 1.218953, 0.478132,
+ 0.361361, -0.161747, 1.215806, 0.476971, 0.387480, -0.170879, 1.211853, 0.475477, 0.414231,
+ -0.179865, 1.207783, 0.473686, 0.441065, -0.188331, 1.202051, 0.471415, 0.467923, -0.196454,
+ 1.195463, 0.468647, 0.494526, -0.204048, 1.187542, 0.465459, 0.521318, -0.211020, 1.179235,
+ 0.461650, 0.548654, -0.216520, 1.170110, 0.456868, 0.575778, -0.221098, 1.160163, 0.451227,
+ 0.602610, -0.224923, 1.149751, 0.444866, 0.628891, -0.227895, 1.139169, 0.437577, 0.655635,
+ -0.230020, 1.129736, 0.429369, 0.682115, -0.230419, 1.119516, 0.419673, 0.707514, -0.229789,
+ 1.108277, 0.409143, 0.733169, -0.228520, 1.099159, 0.397296, 0.758342, -0.225793, 1.089839,
+ 0.384578, 0.783477, -0.222049, 1.081428, 0.370323, 0.808497, -0.217562, 1.073742, 0.355253,
+ 0.832790, -0.211697, 1.065850, 0.339282, 0.856677, -0.204989, 1.058834, 0.322181, 0.880662,
+ -0.197653, 1.053291, 0.304610, 0.903474, -0.188858, 1.046822, 0.286042, 0.926313, -0.179746,
+ 1.041663, 0.267224, 0.948458, -0.169542, 1.036532, 0.247978, 0.970873, -0.159005, 1.033008,
+ 0.228535, 0.992958, -0.147658, 1.029844, 0.208819, 1.013413, -0.135771, 1.026930, 0.189486,
+ 1.033483, -0.123256, 1.025545, 0.170422, 1.051872, -0.110401, 1.023935, 0.152075, 1.068396,
+ -0.096860, 1.022092, 0.133169, 1.083731, -0.083259, 1.020221, 0.114022, 1.096849, -0.069266,
+ 1.017663, 0.094772, 1.107864, -0.055203, 1.014524, 0.075432, 1.116600, -0.041097, 1.010514,
+ 0.055980, 1.123871, -0.027083, 1.006313, 0.036839, 1.130718, -0.013510, 1.002778, 0.018156,
+ 1.137649, 0.000154, 1.000033, -0.000028, 0.000200, -0.000103, 1.264025, 0.512670, 0.000504,
+ -0.000258, 1.262437, 0.512667, 0.002016, -0.001033, 1.262691, 0.512668, 0.004535, -0.002325,
+ 1.262834, 0.512667, 0.008063, -0.004133, 1.262783, 0.512659, 0.012598, -0.006458, 1.262803,
+ 0.512666, 0.018141, -0.009299, 1.262720, 0.512665, 0.024683, -0.012652, 1.262061, 0.512655,
+ 0.032257, -0.016532, 1.262858, 0.512656, 0.040826, -0.020919, 1.262709, 0.512649, 0.050403,
+ -0.025820, 1.262685, 0.512639, 0.060993, -0.031233, 1.262544, 0.512625, 0.072597, -0.037157,
+ 1.262435, 0.512607, 0.085211, -0.043587, 1.262209, 0.512581, 0.098842, -0.050520, 1.261907,
+ 0.512544, 0.113484, -0.057926, 1.261575, 0.512500, 0.129097, -0.065460, 1.261293, 0.512420,
+ 0.145727, -0.073543, 1.260736, 0.512316, 0.163375, -0.082134, 1.260117, 0.512190, 0.182011,
+ -0.091173, 1.259299, 0.512024, 0.201598, -0.100540, 1.258381, 0.511810, 0.222084, -0.109931,
+ 1.257293, 0.511505, 0.243446, -0.119838, 1.256050, 0.511151, 0.265574, -0.130090, 1.254607,
+ 0.510724, 0.288230, -0.140421, 1.252808, 0.510191, 0.311336, -0.151343, 1.250489, 0.509627,
+ 0.335719, -0.161689, 1.247279, 0.508688, 0.361314, -0.171748, 1.243467, 0.507393, 0.387541,
+ -0.181399, 1.239145, 0.505758, 0.414204, -0.190768, 1.233760, 0.503676, 0.441092, -0.199659,
+ 1.227433, 0.501129, 0.467789, -0.207934, 1.219247, 0.498078, 0.494454, -0.215747, 1.210441,
+ 0.494630, 0.520950, -0.222869, 1.200559, 0.490467, 0.547802, -0.228881, 1.189872, 0.485444,
+ 0.575563, -0.233760, 1.180081, 0.479268, 0.602426, -0.237566, 1.168544, 0.472272, 0.628772,
+ -0.240447, 1.156546, 0.464390, 0.654963, -0.242427, 1.145123, 0.455345, 0.681384, -0.242980,
+ 1.134322, 0.444885, 0.707173, -0.242150, 1.122665, 0.433338, 0.732477, -0.240435, 1.111733,
+ 0.420647, 0.757567, -0.237806, 1.101271, 0.406799, 0.782341, -0.233503, 1.091341, 0.391761,
+ 0.806690, -0.228346, 1.082042, 0.375576, 0.830804, -0.222386, 1.073504, 0.358545, 0.854940,
+ -0.215141, 1.065880, 0.340431, 0.878709, -0.207207, 1.058850, 0.321690, 0.901928, -0.198273,
+ 1.052588, 0.301930, 0.924845, -0.188476, 1.046521, 0.281513, 0.946932, -0.177996, 1.040966,
+ 0.261234, 0.969256, -0.166644, 1.036670, 0.240356, 0.991323, -0.154968, 1.032694, 0.219748,
+ 1.013013, -0.142425, 1.030061, 0.199103, 1.032845, -0.129456, 1.027254, 0.178936, 1.051887,
+ -0.115763, 1.025497, 0.159243, 1.069179, -0.101851, 1.023807, 0.139560, 1.084499, -0.087357,
+ 1.021441, 0.119607, 1.097921, -0.072796, 1.018780, 0.099501, 1.109281, -0.058037, 1.015566,
+ 0.079211, 1.118194, -0.043226, 1.011494, 0.058873, 1.125351, -0.028633, 1.007089, 0.038736,
+ 1.132002, -0.013996, 1.003014, 0.019063, 1.138951, 0.000132, 1.000036, -0.000007, 0.000200,
+ -0.000109, 1.296791, 0.544571, 0.000504, -0.000274, 1.296055, 0.544568, 0.002016, -0.001098,
+ 1.297239, 0.544568, 0.004535, -0.002470, 1.296600, 0.544568, 0.008062, -0.004390, 1.296368,
+ 0.544559, 0.012597, -0.006860, 1.296454, 0.544566, 0.018141, -0.009878, 1.296522, 0.544565,
+ 0.024693, -0.013444, 1.296536, 0.544560, 0.032256, -0.017559, 1.296638, 0.544557, 0.040824,
+ -0.022218, 1.296491, 0.544547, 0.050408, -0.027426, 1.296552, 0.544532, 0.060997, -0.033173,
+ 1.296283, 0.544518, 0.072600, -0.039463, 1.296113, 0.544496, 0.085220, -0.046292, 1.295894,
+ 0.544466, 0.098851, -0.053648, 1.295545, 0.544422, 0.113496, -0.061487, 1.295201, 0.544371,
+ 0.129112, -0.069467, 1.294754, 0.544273, 0.145765, -0.078092, 1.294209, 0.544160, 0.163431,
+ -0.087231, 1.293534, 0.544017, 0.182088, -0.096837, 1.292580, 0.543828, 0.201698, -0.106713,
+ 1.291586, 0.543585, 0.222231, -0.116699, 1.290325, 0.543238, 0.243653, -0.127208, 1.288888,
+ 0.542836, 0.265855, -0.137949, 1.287131, 0.542329, 0.288623, -0.148847, 1.284936, 0.541700,
+ 0.311830, -0.160204, 1.282109, 0.540997, 0.335728, -0.171324, 1.278036, 0.540045, 0.361403,
+ -0.181915, 1.273912, 0.538603, 0.387647, -0.192124, 1.268881, 0.536741, 0.414217, -0.201807,
+ 1.262363, 0.534432, 0.441090, -0.211093, 1.254755, 0.531623, 0.467823, -0.219678, 1.245456,
+ 0.528314, 0.494361, -0.227581, 1.234953, 0.524391, 0.521264, -0.235087, 1.224839, 0.519902,
+ 0.547881, -0.241508, 1.213175, 0.514574, 0.574965, -0.246315, 1.200505, 0.507837, 0.601847,
+ -0.250061, 1.187901, 0.500286, 0.628207, -0.252822, 1.174601, 0.491502, 0.654445, -0.254691,
+ 1.161944, 0.481726, 0.680175, -0.255318, 1.149305, 0.470727, 0.706168, -0.254257, 1.136708,
+ 0.458045, 0.731458, -0.252100, 1.124047, 0.444438, 0.756378, -0.249115, 1.112942, 0.429611,
+ 0.781311, -0.244899, 1.101800, 0.413501, 0.805755, -0.239225, 1.091662, 0.395889, 0.829867,
+ -0.232830, 1.082291, 0.377860, 0.853067, -0.225193, 1.072820, 0.358704, 0.877084, -0.216648,
+ 1.065415, 0.338413, 0.900123, -0.207390, 1.058403, 0.317596, 0.923370, -0.197095, 1.051412,
+ 0.296301, 0.946021, -0.186084, 1.045877, 0.274498, 0.967669, -0.174262, 1.040316, 0.252565,
+ 0.989761, -0.161814, 1.035489, 0.230312, 1.012163, -0.149076, 1.032540, 0.208746, 1.032547,
+ -0.135299, 1.029598, 0.187180, 1.052032, -0.121277, 1.027355, 0.166482, 1.069907, -0.106582,
+ 1.025622, 0.145939, 1.085563, -0.091589, 1.023244, 0.125362, 1.099447, -0.076263, 1.020661,
+ 0.104087, 1.110848, -0.060825, 1.017035, 0.083036, 1.119923, -0.045319, 1.012675, 0.061719,
+ 1.126805, -0.029852, 1.007668, 0.040583, 1.133282, -0.014846, 1.003335, 0.019969, 1.140128,
+ 0.000149, 1.000024, -0.000037, 0.000200, -0.000116, 1.334863, 0.577350, 0.000504, -0.000291,
+ 1.333350, 0.577348, 0.002015, -0.001164, 1.332853, 0.577347, 0.004535, -0.002618, 1.333295,
+ 0.577347, 0.008062, -0.004655, 1.333189, 0.577336, 0.012598, -0.007273, 1.333309, 0.577345,
+ 0.018141, -0.010472, 1.333274, 0.577342, 0.024694, -0.014253, 1.333231, 0.577339, 0.032254,
+ -0.018614, 1.333265, 0.577332, 0.040827, -0.023556, 1.333261, 0.577321, 0.050400, -0.029069,
+ 1.332893, 0.577309, 0.061000, -0.035166, 1.332998, 0.577288, 0.072608, -0.041833, 1.332901,
+ 0.577263, 0.085227, -0.049067, 1.332603, 0.577226, 0.098864, -0.056860, 1.332264, 0.577177,
+ 0.113507, -0.065114, 1.331825, 0.577109, 0.129146, -0.073610, 1.331311, 0.577005, 0.145808,
+ -0.082766, 1.330639, 0.576872, 0.163494, -0.092458, 1.329878, 0.576709, 0.182176, -0.102639,
+ 1.328889, 0.576501, 0.201804, -0.112983, 1.327710, 0.576207, 0.222394, -0.123650, 1.326256,
+ 0.575823, 0.243881, -0.134780, 1.324593, 0.575363, 0.266122, -0.145931, 1.322426, 0.574751,
+ 0.289043, -0.157500, 1.319837, 0.574033, 0.312330, -0.169208, 1.316301, 0.573181, 0.336120,
+ -0.181125, 1.312251, 0.572188, 0.361506, -0.192232, 1.307003, 0.570631, 0.387757, -0.202981,
+ 1.301068, 0.568558, 0.414365, -0.213160, 1.293695, 0.566027, 0.440986, -0.222617, 1.283958,
+ 0.562942, 0.467943, -0.231583, 1.274057, 0.559219, 0.494821, -0.239881, 1.262864, 0.554913,
+ 0.521486, -0.247336, 1.250633, 0.549953, 0.547884, -0.253921, 1.237448, 0.544251, 0.574582,
+ -0.259099, 1.223164, 0.537120, 0.601342, -0.262695, 1.208784, 0.528650, 0.627861, -0.265337,
+ 1.194424, 0.518978, 0.653745, -0.266872, 1.179361, 0.508525, 0.679348, -0.267403, 1.165010,
+ 0.496705, 0.705068, -0.266429, 1.151693, 0.482926, 0.730312, -0.263829, 1.137584, 0.468519,
+ 0.755576, -0.260491, 1.125328, 0.452213, 0.780371, -0.256166, 1.113759, 0.435127, 0.804632,
+ -0.250079, 1.101656, 0.416833, 0.828983, -0.243181, 1.091235, 0.397009, 0.852585, -0.235383,
+ 1.081475, 0.376647, 0.875237, -0.226031, 1.071806, 0.355506, 0.899152, -0.216343, 1.064453,
+ 0.333133, 0.922121, -0.205772, 1.057161, 0.311073, 0.944523, -0.193980, 1.050447, 0.287781,
+ 0.967313, -0.181920, 1.044531, 0.264350, 0.989042, -0.168822, 1.039312, 0.241128, 1.010881,
+ -0.155350, 1.035298, 0.218138, 1.032368, -0.141231, 1.032073, 0.195579, 1.052254, -0.126521,
+ 1.029395, 0.173399, 1.070207, -0.111243, 1.026938, 0.151866, 1.086528, -0.095617, 1.024957,
+ 0.130711, 1.100670, -0.079687, 1.021924, 0.108865, 1.112461, -0.063593, 1.018281, 0.086760,
+ 1.121588, -0.047313, 1.013747, 0.064575, 1.128522, -0.031385, 1.008433, 0.042499, 1.134759,
+ -0.015356, 1.003569, 0.020840, 1.141448, 0.000114, 0.999978, -0.000056, 0.000200, -0.000122,
+ 1.372763, 0.611086, 0.000503, -0.000308, 1.371456, 0.611084, 0.002016, -0.001232, 1.373440,
+ 0.611084, 0.004535, -0.002771, 1.373387, 0.611083, 0.008061, -0.004926, 1.372916, 0.611083,
+ 0.012601, -0.007700, 1.373956, 0.611084, 0.018142, -0.011084, 1.373419, 0.611078, 0.024695,
+ -0.015087, 1.373492, 0.611074, 0.032255, -0.019701, 1.373360, 0.611066, 0.040827, -0.024930,
+ 1.373327, 0.611055, 0.050408, -0.030769, 1.373222, 0.611037, 0.061004, -0.037217, 1.373079,
+ 0.611014, 0.072613, -0.044270, 1.372895, 0.610982, 0.085238, -0.051923, 1.372624, 0.610941,
+ 0.098878, -0.060161, 1.372252, 0.610883, 0.113522, -0.068785, 1.371785, 0.610798, 0.129176,
+ -0.077863, 1.371103, 0.610683, 0.145876, -0.087593, 1.370541, 0.610537, 0.163570, -0.097847,
+ 1.369496, 0.610349, 0.182283, -0.108592, 1.368477, 0.610109, 0.201930, -0.119420, 1.366980,
+ 0.609763, 0.222570, -0.130789, 1.365375, 0.609343, 0.244123, -0.142514, 1.363456, 0.608815,
+ 0.266437, -0.154232, 1.360916, 0.608114, 0.289467, -0.166370, 1.357909, 0.607291, 0.312861,
+ -0.178505, 1.353588, 0.606272, 0.336736, -0.190980, 1.349211, 0.605153, 0.361740, -0.202859,
+ 1.343319, 0.603548, 0.387878, -0.213997, 1.335908, 0.601268, 0.414357, -0.224584, 1.326676,
+ 0.598499, 0.441442, -0.234664, 1.317331, 0.595066, 0.468409, -0.243875, 1.305818, 0.590996,
+ 0.494999, -0.252121, 1.291863, 0.586293, 0.521730, -0.259714, 1.278212, 0.580840, 0.547894,
+ -0.266242, 1.262656, 0.574494, 0.573865, -0.271578, 1.246364, 0.567007, 0.601124, -0.275503,
+ 1.231274, 0.557771, 0.627606, -0.277954, 1.215252, 0.547255, 0.654004, -0.279404, 1.199977,
+ 0.535766, 0.679554, -0.279632, 1.183995, 0.522792, 0.704280, -0.278457, 1.167428, 0.508488,
+ 0.729830, -0.275706, 1.152760, 0.492425, 0.754376, -0.271640, 1.137942, 0.475285, 0.779209,
+ -0.266911, 1.125222, 0.456679, 0.803562, -0.260838, 1.112179, 0.437267, 0.827985, -0.253353,
+ 1.101439, 0.416227, 0.851737, -0.245027, 1.089890, 0.394728, 0.874850, -0.235719, 1.080018,
+ 0.372244, 0.897680, -0.225051, 1.070807, 0.348846, 0.921351, -0.214051, 1.063180, 0.324961,
+ 0.943818, -0.202039, 1.056148, 0.300836, 0.966368, -0.189134, 1.049277, 0.276333, 0.987426,
+ -0.175613, 1.042176, 0.251862, 1.010162, -0.161473, 1.038567, 0.227217, 1.031224, -0.146866,
+ 1.034102, 0.203582, 1.052317, -0.131644, 1.031600, 0.180629, 1.070879, -0.115909, 1.028913,
+ 0.158165, 1.087407, -0.099638, 1.026193, 0.135905, 1.102159, -0.083091, 1.023567, 0.113394,
+ 1.114006, -0.066178, 1.019567, 0.090325, 1.123374, -0.049430, 1.014856, 0.067302, 1.130310,
+ -0.032557, 1.009141, 0.044264, 1.136334, -0.016157, 1.003984, 0.021807, 1.142961, 0.000172,
+ 0.999951, -0.000077, 0.000200, -0.000129, 1.416584, 0.645866, 0.000504, -0.000326, 1.417762,
+ 0.645865, 0.002016, -0.001302, 1.417825, 0.645866, 0.004535, -0.002929, 1.417142, 0.645865,
+ 0.008062, -0.005207, 1.416968, 0.645864, 0.012598, -0.008136, 1.417109, 0.645862, 0.018141,
+ -0.011715, 1.417001, 0.645859, 0.024690, -0.015941, 1.416878, 0.645853, 0.032257, -0.020823,
+ 1.417134, 0.645843, 0.040827, -0.026347, 1.416983, 0.645829, 0.050411, -0.032518, 1.416949,
+ 0.645808, 0.061007, -0.039330, 1.416694, 0.645781, 0.072621, -0.046783, 1.416599, 0.645746,
+ 0.085249, -0.054865, 1.416241, 0.645695, 0.098897, -0.063563, 1.415832, 0.645630, 0.113546,
+ -0.072607, 1.415264, 0.645529, 0.129220, -0.082257, 1.414482, 0.645396, 0.145888, -0.092515,
+ 1.413626, 0.645268, 0.163659, -0.103393, 1.412710, 0.645018, 0.182385, -0.114684, 1.411418,
+ 0.644739, 0.202078, -0.126098, 1.409822, 0.644348, 0.222772, -0.138145, 1.407948, 0.643872,
+ 0.244370, -0.150405, 1.405678, 0.643255, 0.266787, -0.162798, 1.402763, 0.642463, 0.289844,
+ -0.175434, 1.398863, 0.641504, 0.313540, -0.188158, 1.394695, 0.640346, 0.337489, -0.201014,
+ 1.389376, 0.639042, 0.362008, -0.213719, 1.382439, 0.637412, 0.387990, -0.225248, 1.373281,
+ 0.634930, 0.414728, -0.236348, 1.363729, 0.631861, 0.441635, -0.246701, 1.352304, 0.628155,
+ 0.468588, -0.256167, 1.339162, 0.623625, 0.495337, -0.264662, 1.323811, 0.618458, 0.521886,
+ -0.272207, 1.307630, 0.612373, 0.548355, -0.278890, 1.291265, 0.605263, 0.574535, -0.284442,
+ 1.273752, 0.597048, 0.600870, -0.288389, 1.256171, 0.587401, 0.627715, -0.290816, 1.238447,
+ 0.576001, 0.653830, -0.291886, 1.221036, 0.563198, 0.679175, -0.291629, 1.202283, 0.549249,
+ 0.704539, -0.290489, 1.185866, 0.533881, 0.729126, -0.287529, 1.168822, 0.516966, 0.754297,
+ -0.283184, 1.152934, 0.498501, 0.778678, -0.277732, 1.137821, 0.478728, 0.802473, -0.271203,
+ 1.123387, 0.457814, 0.826596, -0.263494, 1.110573, 0.435865, 0.850835, -0.254572, 1.099099,
+ 0.412597, 0.874203, -0.244815, 1.088403, 0.388995, 0.897271, -0.233993, 1.078085, 0.364487,
+ 0.919667, -0.221934, 1.068543, 0.339344, 0.943001, -0.209714, 1.061081, 0.313770, 0.965688,
+ -0.196367, 1.054023, 0.287928, 0.987598, -0.182263, 1.047247, 0.262157, 1.009280, -0.167775,
+ 1.041376, 0.236855, 1.031762, -0.152530, 1.037647, 0.211847, 1.051965, -0.136809, 1.033396,
+ 0.187546, 1.071699, -0.120418, 1.031021, 0.164186, 1.088881, -0.103618, 1.028403, 0.141184,
+ 1.103482, -0.086271, 1.024987, 0.117665, 1.115646, -0.068973, 1.020884, 0.093896, 1.125258,
+ -0.051285, 1.015966, 0.069978, 1.132045, -0.033998, 1.009990, 0.046126, 1.138004, -0.016696,
+ 1.004270, 0.022635, 1.144463, 0.000089, 0.999987, -0.000016, 0.000200, -0.000136, 1.463614,
+ 0.681786, 0.000504, -0.000344, 1.465345, 0.681785, 0.002015, -0.001374, 1.464172, 0.681783,
+ 0.004535, -0.003092, 1.464846, 0.681784, 0.008062, -0.005496, 1.464783, 0.681784, 0.012598,
+ -0.008588, 1.464883, 0.681781, 0.018141, -0.012366, 1.464740, 0.681777, 0.024692, -0.016829,
+ 1.464665, 0.681770, 0.032258, -0.021980, 1.464720, 0.681760, 0.040829, -0.027811, 1.464625,
+ 0.681742, 0.050415, -0.034324, 1.464571, 0.681720, 0.061013, -0.041513, 1.464346, 0.681688,
+ 0.072628, -0.049375, 1.464131, 0.681644, 0.085264, -0.057903, 1.463847, 0.681588, 0.098918,
+ -0.067067, 1.463369, 0.681509, 0.113568, -0.076570, 1.462549, 0.681389, 0.129265, -0.086782,
+ 1.461703, 0.681239, 0.145997, -0.097637, 1.460840, 0.681047, 0.163751, -0.109101, 1.459737,
+ 0.680806, 0.182505, -0.120922, 1.458231, 0.680480, 0.202241, -0.133007, 1.456393, 0.680042,
+ 0.222987, -0.145693, 1.454258, 0.679503, 0.244638, -0.158488, 1.451543, 0.678792, 0.267132,
+ -0.171585, 1.448115, 0.677907, 0.290365, -0.184746, 1.443992, 0.676796, 0.314178, -0.198101,
+ 1.439271, 0.675498, 0.338289, -0.211370, 1.432830, 0.673922, 0.362543, -0.224489, 1.424163,
+ 0.672151, 0.388470, -0.236914, 1.415160, 0.669601, 0.415105, -0.248342, 1.403811, 0.666255,
+ 0.441925, -0.258957, 1.390149, 0.662166, 0.468668, -0.268556, 1.374104, 0.657229, 0.495720,
+ -0.277359, 1.358102, 0.651347, 0.522574, -0.285078, 1.340754, 0.644598, 0.548981, -0.291718,
+ 1.322033, 0.636820, 0.574946, -0.297087, 1.302148, 0.627812, 0.600744, -0.301079, 1.282130,
+ 0.617485, 0.627565, -0.303566, 1.263339, 0.605047, 0.653598, -0.304330, 1.242712, 0.591167,
+ 0.679239, -0.303820, 1.223212, 0.576025, 0.704043, -0.302064, 1.203763, 0.559649, 0.728796,
+ -0.299095, 1.185434, 0.541271, 0.753581, -0.294392, 1.167630, 0.521800, 0.778577, -0.288603,
+ 1.151930, 0.500628, 0.802550, -0.281604, 1.136072, 0.478434, 0.825803, -0.273472, 1.121673,
+ 0.455384, 0.849768, -0.264011, 1.108491, 0.430811, 0.873250, -0.253653, 1.096550, 0.405524,
+ 0.896725, -0.242642, 1.085905, 0.380038, 0.919158, -0.230191, 1.075091, 0.353482, 0.942236,
+ -0.217145, 1.066848, 0.326605, 0.965031, -0.203555, 1.059310, 0.299842, 0.987048, -0.188777,
+ 1.051749, 0.272859, 1.008718, -0.173613, 1.044999, 0.246040, 1.031097, -0.157972, 1.040066,
+ 0.219826, 1.052493, -0.141589, 1.035951, 0.194278, 1.071773, -0.124814, 1.032520, 0.169830,
+ 1.089646, -0.107321, 1.029803, 0.146135, 1.104932, -0.089726, 1.026612, 0.122127, 1.117687,
+ -0.071433, 1.022391, 0.097461, 1.127188, -0.053395, 1.017113, 0.072556, 1.134010, -0.035151,
+ 1.010934, 0.047749, 1.139746, -0.017427, 1.004633, 0.023530, 1.146205, 0.000151, 1.000020,
+ -0.000106, 0.000200, -0.000144, 1.517643, 0.718949, 0.000504, -0.000362, 1.516387, 0.718947,
+ 0.002016, -0.001449, 1.516742, 0.718946, 0.004536, -0.003261, 1.517196, 0.718946, 0.008063,
+ -0.005796, 1.516806, 0.718945, 0.012598, -0.009057, 1.516986, 0.718943, 0.018140, -0.013039,
+ 1.516603, 0.718937, 0.024694, -0.017747, 1.516739, 0.718929, 0.032260, -0.023178, 1.516994,
+ 0.718917, 0.040831, -0.029325, 1.516649, 0.718896, 0.050419, -0.036192, 1.516594, 0.718870,
+ 0.061019, -0.043770, 1.516327, 0.718833, 0.072638, -0.052056, 1.516054, 0.718782, 0.085274,
+ -0.061039, 1.515628, 0.718714, 0.098938, -0.070676, 1.515199, 0.718623, 0.113607, -0.080679,
+ 1.514222, 0.718483, 0.129329, -0.091485, 1.513354, 0.718316, 0.146077, -0.102931, 1.512301,
+ 0.718096, 0.163856, -0.114986, 1.510977, 0.717818, 0.182640, -0.127305, 1.509225, 0.717432,
+ 0.202432, -0.140147, 1.507152, 0.716939, 0.223229, -0.153468, 1.504780, 0.716331, 0.244943,
+ -0.166875, 1.501612, 0.715527, 0.267559, -0.180658, 1.497898, 0.714523, 0.290926, -0.194405,
+ 1.493208, 0.713266, 0.314863, -0.208302, 1.487388, 0.711758, 0.339053, -0.222020, 1.479677,
+ 0.709982, 0.363627, -0.235683, 1.470950, 0.707958, 0.388887, -0.248723, 1.459907, 0.705346,
+ 0.415474, -0.260563, 1.446579, 0.701644, 0.442065, -0.271352, 1.429962, 0.697134, 0.469418,
+ -0.281541, 1.414343, 0.691665, 0.496419, -0.290429, 1.395681, 0.685227, 0.523071, -0.298032,
+ 1.375347, 0.677815, 0.549641, -0.304679, 1.354816, 0.669063, 0.575489, -0.309902, 1.332505,
+ 0.659071, 0.601108, -0.313771, 1.309752, 0.647799, 0.627199, -0.316225, 1.288381, 0.634856,
+ 0.653243, -0.316679, 1.265785, 0.619627, 0.678960, -0.315816, 1.244333, 0.603244, 0.704055,
+ -0.313776, 1.223315, 0.585191, 0.728713, -0.310417, 1.203142, 0.565969, 0.753301, -0.305786,
+ 1.184323, 0.545347, 0.777890, -0.299262, 1.166070, 0.522753, 0.802354, -0.291830, 1.149599,
+ 0.499017, 0.826005, -0.283281, 1.133655, 0.474335, 0.848920, -0.273512, 1.118132, 0.449019,
+ 0.872765, -0.262525, 1.105606, 0.422329, 0.895950, -0.250769, 1.093539, 0.395057, 0.918816,
+ -0.238257, 1.082388, 0.367709, 0.941089, -0.224381, 1.072484, 0.339350, 0.964514, -0.210289,
+ 1.064054, 0.311239, 0.987128, -0.195488, 1.056645, 0.283272, 1.009064, -0.179491, 1.049549,
+ 0.255163, 1.030163, -0.163172, 1.042741, 0.227757, 1.052502, -0.146457, 1.038270, 0.200970,
+ 1.072971, -0.129054, 1.035014, 0.175767, 1.091223, -0.111285, 1.032231, 0.151118, 1.106518,
+ -0.092617, 1.028211, 0.126196, 1.119235, -0.074168, 1.023686, 0.100828, 1.129311, -0.055212,
+ 1.018311, 0.075240, 1.135983, -0.036571, 1.011485, 0.049558, 1.141648, -0.017954, 1.004952,
+ 0.024273, 1.147938, 0.000125, 1.000009, -0.000048, 0.000199, -0.000151, 1.566887, 0.757466,
+ 0.000504, -0.000382, 1.574111, 0.757466, 0.002016, -0.001527, 1.573735, 0.757466, 0.004535,
+ -0.003435, 1.573737, 0.757466, 0.008062, -0.006107, 1.573782, 0.757464, 0.012599, -0.009542,
+ 1.573796, 0.757460, 0.018142, -0.013739, 1.573710, 0.757455, 0.024694, -0.018697, 1.573562,
+ 0.757446, 0.032259, -0.024418, 1.573667, 0.757429, 0.040834, -0.030895, 1.573555, 0.757407,
+ 0.050422, -0.038127, 1.573383, 0.757376, 0.061025, -0.046108, 1.573086, 0.757332, 0.072650,
+ -0.054835, 1.572833, 0.757274, 0.085296, -0.064294, 1.572395, 0.757195, 0.098962, -0.074376,
+ 1.571729, 0.757087, 0.113649, -0.084955, 1.570571, 0.756925, 0.129389, -0.096334, 1.569582,
+ 0.756729, 0.146167, -0.108406, 1.568444, 0.756481, 0.163973, -0.121056, 1.566905, 0.756158,
+ 0.182798, -0.133970, 1.564939, 0.755715, 0.202650, -0.147522, 1.562666, 0.755167, 0.223502,
+ -0.161466, 1.559877, 0.754465, 0.245269, -0.175539, 1.556008, 0.753552, 0.268010, -0.189957,
+ 1.552013, 0.752420, 0.291474, -0.204361, 1.546509, 0.751008, 0.315527, -0.218714, 1.539575,
+ 0.749266, 0.339954, -0.233029, 1.530968, 0.747232, 0.364649, -0.247149, 1.520994, 0.744906,
+ 0.389520, -0.260672, 1.507748, 0.742123, 0.415717, -0.272873, 1.491777, 0.738187, 0.442862,
+ -0.284317, 1.475658, 0.733189, 0.469939, -0.294552, 1.456572, 0.727165, 0.496916, -0.303517,
+ 1.435237, 0.720043, 0.523480, -0.311061, 1.412192, 0.711640, 0.550092, -0.317596, 1.389033,
+ 0.702174, 0.576384, -0.322921, 1.365086, 0.691225, 0.602280, -0.326806, 1.341317, 0.678841,
+ 0.627676, -0.329057, 1.316518, 0.664815, 0.653458, -0.329372, 1.291877, 0.648548, 0.679227,
+ -0.328067, 1.268126, 0.630676, 0.704476, -0.325585, 1.244424, 0.611585, 0.729232, -0.321775,
+ 1.223010, 0.590803, 0.753405, -0.316713, 1.201297, 0.568653, 0.777274, -0.309858, 1.181071,
+ 0.544763, 0.801882, -0.301866, 1.162826, 0.519747, 0.826030, -0.292861, 1.145704, 0.493531,
+ 0.849359, -0.282794, 1.129629, 0.466900, 0.871837, -0.271197, 1.114155, 0.439230, 0.895896,
+ -0.258954, 1.102334, 0.410570, 0.918951, -0.245878, 1.090163, 0.381314, 0.941148, -0.231897,
+ 1.078738, 0.352268, 0.963464, -0.216743, 1.068862, 0.322688, 0.986628, -0.201486, 1.061077,
+ 0.293523, 1.009289, -0.185521, 1.053561, 0.264125, 1.030659, -0.168429, 1.046627, 0.235706,
+ 1.052382, -0.151210, 1.040953, 0.208022, 1.073476, -0.133289, 1.036534, 0.181245, 1.092237,
+ -0.114768, 1.033580, 0.155661, 1.108200, -0.095917, 1.029997, 0.130223, 1.121435, -0.076492,
+ 1.025374, 0.104098, 1.131382, -0.057204, 1.019485, 0.077776, 1.137994, -0.037747, 1.012188,
+ 0.051250, 1.143441, -0.018673, 1.005309, 0.025245, 1.149714, 0.000216, 1.000004, -0.000120,
+ 0.000200, -0.000159, 1.633988, 0.797469, 0.000504, -0.000402, 1.636076, 0.797469, 0.002016,
+ -0.001607, 1.635679, 0.797467, 0.004535, -0.003617, 1.636040, 0.797468, 0.008063, -0.006430,
+ 1.636159, 0.797467, 0.012599, -0.010046, 1.636128, 0.797462, 0.018141, -0.014464, 1.635730,
+ 0.797457, 0.024696, -0.019685, 1.635836, 0.797445, 0.032259, -0.025705, 1.635719, 0.797426,
+ 0.040835, -0.032523, 1.635610, 0.797401, 0.050425, -0.040135, 1.635460, 0.797363, 0.061033,
+ -0.048536, 1.635182, 0.797313, 0.072661, -0.057718, 1.634817, 0.797243, 0.085315, -0.067666,
+ 1.634314, 0.797150, 0.098985, -0.078179, 1.633350, 0.797016, 0.113699, -0.089383, 1.632253,
+ 0.796839, 0.129456, -0.101364, 1.631025, 0.796623, 0.146275, -0.114081, 1.629867, 0.796331,
+ 0.164108, -0.127318, 1.628043, 0.795956, 0.182983, -0.140901, 1.625813, 0.795458, 0.202891,
+ -0.155174, 1.623149, 0.794834, 0.223787, -0.169654, 1.619686, 0.794015, 0.245678, -0.184540,
+ 1.615694, 0.793013, 0.268495, -0.199543, 1.610812, 0.791727, 0.292093, -0.214639, 1.604629,
+ 0.790107, 0.316184, -0.229499, 1.596061, 0.788154, 0.340986, -0.244407, 1.587195, 0.785797,
+ 0.365808, -0.258907, 1.575031, 0.783093, 0.390528, -0.272746, 1.559448, 0.779970, 0.416510,
+ -0.285845, 1.543294, 0.775852, 0.443443, -0.297404, 1.523476, 0.770323, 0.470442, -0.307757,
+ 1.501515, 0.763721, 0.497499, -0.316846, 1.477841, 0.755889, 0.524316, -0.324561, 1.452427,
+ 0.746662, 0.551212, -0.331060, 1.427421, 0.736004, 0.577323, -0.335956, 1.400369, 0.723810,
+ 0.602976, -0.339501, 1.373093, 0.710184, 0.628357, -0.341577, 1.345853, 0.695017, 0.653642,
+ -0.342031, 1.319040, 0.677972, 0.679440, -0.340342, 1.292490, 0.658877, 0.704744, -0.337356,
+ 1.267182, 0.638085, 0.729692, -0.333042, 1.243280, 0.615615, 0.753920, -0.327504, 1.219751,
+ 0.592054, 0.777695, -0.320537, 1.197796, 0.566967, 0.801426, -0.311880, 1.176872, 0.540643,
+ 0.825649, -0.302211, 1.158160, 0.512906, 0.849282, -0.291665, 1.141257, 0.484587, 0.872341,
+ -0.280050, 1.125469, 0.455556, 0.895110, -0.266978, 1.110222, 0.425652, 0.918841, -0.253326,
+ 1.097419, 0.395015, 0.941209, -0.238899, 1.086101, 0.364948, 0.963142, -0.223523, 1.075023,
+ 0.334151, 0.985996, -0.207346, 1.065628, 0.303708, 1.008718, -0.190889, 1.057256, 0.273008,
+ 1.030554, -0.173517, 1.049720, 0.243221, 1.053085, -0.155645, 1.043837, 0.214426, 1.074267,
+ -0.137472, 1.039312, 0.187036, 1.093591, -0.118385, 1.035457, 0.160512, 1.109850, -0.098883,
+ 1.031630, 0.134384, 1.123516, -0.079050, 1.026762, 0.107424, 1.133578, -0.058977, 1.020640,
+ 0.080317, 1.140289, -0.039013, 1.013096, 0.052944, 1.145610, -0.019228, 1.005694, 0.025989,
+ 1.151704, 0.000105, 0.999981, -0.000019, 0.000200, -0.000168, 1.704841, 0.839096, 0.000504,
+ -0.000423, 1.704242, 0.839097, 0.002016, -0.001691, 1.703821, 0.839091, 0.004534, -0.003805,
+ 1.703804, 0.839094, 0.008063, -0.006765, 1.704224, 0.839092, 0.012598, -0.010570, 1.704013,
+ 0.839087, 0.018142, -0.015219, 1.703889, 0.839079, 0.024697, -0.020712, 1.704023, 0.839066,
+ 0.032261, -0.027046, 1.703836, 0.839045, 0.040837, -0.034218, 1.703608, 0.839014, 0.050429,
+ -0.042224, 1.703414, 0.838972, 0.061041, -0.051061, 1.703148, 0.838912, 0.072676, -0.060717,
+ 1.702744, 0.838831, 0.085340, -0.071175, 1.702223, 0.838724, 0.099023, -0.082182, 1.700984,
+ 0.838567, 0.113759, -0.094007, 1.699764, 0.838367, 0.129546, -0.106621, 1.698462, 0.838112,
+ 0.146382, -0.119956, 1.696938, 0.837782, 0.164260, -0.133760, 1.694868, 0.837346, 0.183188,
+ -0.148108, 1.692262, 0.836780, 0.203158, -0.163075, 1.689251, 0.836073, 0.224147, -0.178255,
+ 1.685408, 0.835148, 0.246147, -0.193900, 1.680946, 0.833992, 0.269072, -0.209553, 1.675277,
+ 0.832546, 0.292718, -0.225226, 1.667626, 0.830727, 0.317159, -0.240836, 1.658952, 0.828510,
+ 0.341979, -0.256103, 1.647624, 0.825843, 0.366844, -0.270887, 1.633014, 0.822760, 0.392043,
+ -0.285324, 1.617191, 0.819159, 0.417356, -0.298817, 1.597501, 0.814788, 0.444093, -0.310711,
+ 1.575184, 0.808751, 0.471379, -0.321410, 1.551590, 0.801294, 0.498267, -0.330421, 1.524134,
+ 0.792711, 0.525401, -0.338331, 1.496672, 0.782480, 0.551846, -0.344430, 1.467062, 0.770659,
+ 0.578009, -0.349047, 1.436943, 0.757348, 0.604054, -0.352490, 1.407611, 0.742541, 0.629387,
+ -0.354158, 1.377441, 0.726071, 0.654435, -0.354422, 1.347651, 0.707524, 0.679845, -0.352663,
+ 1.318769, 0.687067, 0.704892, -0.348994, 1.290600, 0.664637, 0.729763, -0.344105, 1.263997,
+ 0.640663, 0.754345, -0.338129, 1.239273, 0.615484, 0.778629, -0.330905, 1.215858, 0.589210,
+ 0.801939, -0.322113, 1.192318, 0.561550, 0.825723, -0.311673, 1.171380, 0.532175, 0.849387,
+ -0.300410, 1.152991, 0.502055, 0.872792, -0.288328, 1.136139, 0.471308, 0.895083, -0.275087,
+ 1.119534, 0.440427, 0.918335, -0.260700, 1.105542, 0.409260, 0.941577, -0.245717, 1.093070,
+ 0.377142, 0.963992, -0.230079, 1.081207, 0.345289, 0.986510, -0.213523, 1.071488, 0.313508,
+ 1.008806, -0.196157, 1.062011, 0.281962, 1.030724, -0.178467, 1.053240, 0.251177, 1.053782,
+ -0.160291, 1.047057, 0.220986, 1.075451, -0.141308, 1.041842, 0.192256, 1.094947, -0.121975,
+ 1.037704, 0.165023, 1.111783, -0.101744, 1.033300, 0.138228, 1.125525, -0.081476, 1.028234,
+ 0.110679, 1.135873, -0.060770, 1.021695, 0.082672, 1.142478, -0.040207, 1.013838, 0.054506,
+ 1.147889, -0.019908, 1.006166, 0.026938, 1.153852, 0.000204, 0.999983, -0.000123, 0.000199,
+ -0.000176, 1.771601, 0.882501, 0.000504, -0.000445, 1.779195, 0.882504, 0.002016, -0.001779,
+ 1.779635, 0.882498, 0.004536, -0.004003, 1.779586, 0.882499, 0.008062, -0.007115, 1.778613,
+ 0.882496, 0.012598, -0.011116, 1.778678, 0.882492, 0.018142, -0.016005, 1.778531, 0.882481,
+ 0.024696, -0.021782, 1.778556, 0.882466, 0.032262, -0.028444, 1.778507, 0.882442, 0.040842,
+ -0.035987, 1.778385, 0.882408, 0.050436, -0.044404, 1.778034, 0.882364, 0.061053, -0.053695,
+ 1.777761, 0.882287, 0.072692, -0.063842, 1.777256, 0.882190, 0.085364, -0.074821, 1.776518,
+ 0.882067, 0.099064, -0.086368, 1.775080, 0.881884, 0.113828, -0.098805, 1.773836, 0.881657,
+ 0.129649, -0.112090, 1.772370, 0.881361, 0.146518, -0.126067, 1.770594, 0.880982, 0.164440,
+ -0.140493, 1.768089, 0.880484, 0.183437, -0.155646, 1.765301, 0.879843, 0.203468, -0.171266,
+ 1.761698, 0.879035, 0.224562, -0.187231, 1.757518, 0.877982, 0.246665, -0.203540, 1.752318,
+ 0.876667, 0.269652, -0.219916, 1.745356, 0.875028, 0.293531, -0.236255, 1.737186, 0.872977,
+ 0.318048, -0.252410, 1.726709, 0.870448, 0.342963, -0.268192, 1.713109, 0.867400, 0.368336,
+ -0.283587, 1.698087, 0.863882, 0.393512, -0.298186, 1.678638, 0.859724, 0.418602, -0.311882,
+ 1.655604, 0.854835, 0.445080, -0.324500, 1.632250, 0.848353, 0.472289, -0.335295, 1.605069,
+ 0.840218, 0.499128, -0.344256, 1.573846, 0.830556, 0.525834, -0.351716, 1.541120, 0.819269,
+ 0.553177, -0.358241, 1.511385, 0.806222, 0.579480, -0.362640, 1.477866, 0.791647, 0.605205,
+ -0.365513, 1.444218, 0.775398, 0.630617, -0.366822, 1.410954, 0.757144, 0.655730, -0.366785,
+ 1.379010, 0.737323, 0.680529, -0.364904, 1.347280, 0.715601, 0.705800, -0.360990, 1.316416,
+ 0.691547, 0.730550, -0.355397, 1.286344, 0.666141, 0.754970, -0.348664, 1.258954, 0.638929,
+ 0.779042, -0.340774, 1.232965, 0.611015, 0.802839, -0.331767, 1.209775, 0.581877, 0.825793,
+ -0.321054, 1.185813, 0.551509, 0.849512, -0.309016, 1.165080, 0.519698, 0.873120, -0.296369,
+ 1.147091, 0.487506, 0.895942, -0.282704, 1.129658, 0.455320, 0.917996, -0.268007, 1.113463,
+ 0.422605, 0.941281, -0.252329, 1.100040, 0.389347, 0.964584, -0.236203, 1.087973, 0.356430,
+ 0.986371, -0.219209, 1.075983, 0.323089, 1.009522, -0.201588, 1.066940, 0.290806, 1.031976,
+ -0.183296, 1.057999, 0.258682, 1.053461, -0.164509, 1.049542, 0.227722, 1.076121, -0.145165,
+ 1.043718, 0.197439, 1.096597, -0.125199, 1.039607, 0.169578, 1.113908, -0.104921, 1.035528,
+ 0.142222, 1.127939, -0.083623, 1.029807, 0.113802, 1.138391, -0.062589, 1.023312, 0.085164,
+ 1.145110, -0.041376, 1.014806, 0.056186, 1.150141, -0.020433, 1.006501, 0.027654, 1.156069,
+ 0.000097, 0.999949, -0.000046, 0.000200, -0.000185, 1.858268, 0.927857, 0.000504, -0.000468,
+ 1.861583, 0.927859, 0.002016, -0.001870, 1.860659, 0.927855, 0.004535, -0.004208, 1.860963,
+ 0.927867, 0.008063, -0.007480, 1.860766, 0.927855, 0.012594, -0.011683, 1.859996, 0.927851,
+ 0.018142, -0.016828, 1.860739, 0.927839, 0.024698, -0.022901, 1.860763, 0.927818, 0.032263,
+ -0.029903, 1.860501, 0.927791, 0.040846, -0.037834, 1.860431, 0.927751, 0.050440, -0.046680,
+ 1.859827, 0.927690, 0.061066, -0.056446, 1.859624, 0.927610, 0.072713, -0.067109, 1.859039,
+ 0.927505, 0.085393, -0.078613, 1.858144, 0.927357, 0.099120, -0.090747, 1.856618, 0.927145,
+ 0.113910, -0.103850, 1.855221, 0.926884, 0.129755, -0.117777, 1.853470, 0.926546, 0.146669,
+ -0.132441, 1.851413, 0.926104, 0.164648, -0.147565, 1.848498, 0.925530, 0.183708, -0.163470,
+ 1.845281, 0.924802, 0.203832, -0.179763, 1.841273, 0.923871, 0.225029, -0.196564, 1.836481,
+ 0.922691, 0.247221, -0.213537, 1.830273, 0.921198, 0.270343, -0.230662, 1.822374, 0.919320,
+ 0.294399, -0.247740, 1.812975, 0.917008, 0.319040, -0.264448, 1.800693, 0.914141, 0.344269,
+ -0.280831, 1.785923, 0.910707, 0.369625, -0.296478, 1.767203, 0.906585, 0.394925, -0.311287,
+ 1.744434, 0.901918, 0.420583, -0.325578, 1.720938, 0.896240, 0.446200, -0.338384, 1.693005,
+ 0.889335, 0.472969, -0.349187, 1.660901, 0.880394, 0.500490, -0.358687, 1.628806, 0.869705,
+ 0.527312, -0.366042, 1.593001, 0.857145, 0.554207, -0.372045, 1.557046, 0.842943, 0.580620,
+ -0.376134, 1.520192, 0.826837, 0.606480, -0.378636, 1.482947, 0.808891, 0.631815, -0.379414,
+ 1.445954, 0.789119, 0.657021, -0.378972, 1.410833, 0.767564, 0.681686, -0.376728, 1.376575,
+ 0.744338, 0.706498, -0.372844, 1.342935, 0.718799, 0.731258, -0.366649, 1.311052, 0.691756,
+ 0.755937, -0.359354, 1.280478, 0.662683, 0.779259, -0.350487, 1.250585, 0.632892, 0.803295,
+ -0.340941, 1.225722, 0.602160, 0.826570, -0.330174, 1.201003, 0.570520, 0.849954, -0.317854,
+ 1.178488, 0.537651, 0.873696, -0.304426, 1.158302, 0.503799, 0.896695, -0.290120, 1.139886,
+ 0.469645, 0.919149, -0.275106, 1.122884, 0.435625, 0.942121, -0.259282, 1.107691, 0.401228,
+ 0.964627, -0.242123, 1.093661, 0.367086, 0.986614, -0.224575, 1.081580, 0.332885, 1.009623,
+ -0.206837, 1.071375, 0.299209, 1.033126, -0.188092, 1.062241, 0.266187, 1.054954, -0.168637,
+ 1.052912, 0.233733, 1.077660, -0.149166, 1.047047, 0.203192, 1.097983, -0.128587, 1.041607,
+ 0.173918, 1.115586, -0.107339, 1.036850, 0.145531, 1.130170, -0.086203, 1.031427, 0.116890,
+ 1.141018, -0.064171, 1.024395, 0.087388, 1.147681, -0.042530, 1.015719, 0.057733, 1.152560,
+ -0.021011, 1.006883, 0.028413, 1.158406, 0.000158, 0.999897, -0.000106, 0.000200, -0.000195,
+ 1.950982, 0.975366, 0.000504, -0.000491, 1.950207, 0.975365, 0.002015, -0.001966, 1.950675,
+ 0.975362, 0.004535, -0.004423, 1.951281, 0.975370, 0.008062, -0.007863, 1.951045, 0.975362,
+ 0.012597, -0.012285, 1.951199, 0.975356, 0.018145, -0.017692, 1.951528, 0.975340, 0.024699,
+ -0.024074, 1.951194, 0.975321, 0.032266, -0.031434, 1.950865, 0.975288, 0.040853, -0.039771,
+ 1.951038, 0.975244, 0.050452, -0.049067, 1.950336, 0.975173, 0.061077, -0.059324, 1.949805,
+ 0.975078, 0.072736, -0.070526, 1.949133, 0.974951, 0.085431, -0.082528, 1.947947, 0.974777,
+ 0.099182, -0.095345, 1.946337, 0.974540, 0.113999, -0.109118, 1.944725, 0.974241, 0.129888,
+ -0.123741, 1.942857, 0.973852, 0.146842, -0.139071, 1.940251, 0.973342, 0.164890, -0.154986,
+ 1.937086, 0.972684, 0.184025, -0.171661, 1.933404, 0.971856, 0.204245, -0.188672, 1.928770,
+ 0.970785, 0.225528, -0.206252, 1.923041, 0.969448, 0.247841, -0.223972, 1.915788, 0.967742,
+ 0.271157, -0.241827, 1.907008, 0.965607, 0.295297, -0.259562, 1.895854, 0.963007, 0.320121,
+ -0.276909, 1.881289, 0.959722, 0.345566, -0.293883, 1.864528, 0.955831, 0.371012, -0.309816,
+ 1.842062, 0.951127, 0.396834, -0.325157, 1.818068, 0.945725, 0.422277, -0.339357, 1.788874,
+ 0.939318, 0.447928, -0.352387, 1.758283, 0.931470, 0.474315, -0.363680, 1.723668, 0.921900,
+ 0.501560, -0.372963, 1.686081, 0.909996, 0.528391, -0.380159, 1.645816, 0.896244, 0.554754,
+ -0.385545, 1.603709, 0.880326, 0.581888, -0.389778, 1.565475, 0.862716, 0.607791, -0.391839,
+ 1.524196, 0.843146, 0.633511, -0.392331, 1.483921, 0.821554, 0.658621, -0.391193, 1.445013,
+ 0.798336, 0.683160, -0.388424, 1.406963, 0.773299, 0.707429, -0.384104, 1.370996, 0.746668,
+ 0.732212, -0.377945, 1.335879, 0.717502, 0.756871, -0.369856, 1.302489, 0.686954, 0.781065,
+ -0.360707, 1.271815, 0.655372, 0.804167, -0.350091, 1.242416, 0.622683, 0.827948, -0.338941,
+ 1.217208, 0.589185, 0.850901, -0.326427, 1.192354, 0.555005, 0.873589, -0.312199, 1.169639,
+ 0.519594, 0.897085, -0.297374, 1.150181, 0.484105, 0.920459, -0.281932, 1.132858, 0.448661,
+ 0.942637, -0.265625, 1.115401, 0.413051, 0.965341, -0.248332, 1.101078, 0.377329, 0.987530,
+ -0.229983, 1.087377, 0.342349, 1.010739, -0.211647, 1.076582, 0.307824, 1.033449, -0.192725,
+ 1.065900, 0.273368, 1.055618, -0.172726, 1.056958, 0.240238, 1.079345, -0.152640, 1.049620,
+ 0.208322, 1.100058, -0.131931, 1.044084, 0.178242, 1.118547, -0.110351, 1.039387, 0.149493,
+ 1.132748, -0.088128, 1.033049, 0.119673, 1.143419, -0.066069, 1.025521, 0.089728, 1.150316,
+ -0.043513, 1.016378, 0.059253, 1.155208, -0.021593, 1.007506, 0.029140, 1.160871, 0.000111,
+ 0.999916, -0.000035, 0.000201, -0.000206, 2.061000, 1.025243, 0.000504, -0.000516, 2.049647,
+ 1.025237, 0.002015, -0.002066, 2.050169, 1.025237, 0.004535, -0.004650, 2.051254, 1.025255,
+ 0.008063, -0.008266, 2.051302, 1.025236, 0.012600, -0.012915, 2.051508, 1.025226, 0.018144,
+ -0.018594, 2.050981, 1.025215, 0.024700, -0.025304, 2.050841, 1.025190, 0.032267, -0.033038,
+ 2.050537, 1.025152, 0.040852, -0.041795, 2.050660, 1.025090, 0.050460, -0.051570, 2.049921,
+ 1.025017, 0.061094, -0.062347, 2.049350, 1.024908, 0.072762, -0.074111, 2.048517, 1.024760,
+ 0.085475, -0.086661, 2.047009, 1.024555, 0.099249, -0.100160, 2.045261, 1.024278, 0.114106,
+ -0.114628, 2.043508, 1.023941, 0.130032, -0.130002, 2.041321, 1.023488, 0.147050, -0.145985,
+ 2.038299, 1.022905, 0.165164, -0.162762, 2.034658, 1.022151, 0.184380, -0.180172, 2.030312,
+ 1.021200, 0.204704, -0.198022, 2.024944, 1.019966, 0.226129, -0.216359, 2.018546, 1.018424,
+ 0.248582, -0.234923, 2.010153, 1.016519, 0.272011, -0.253474, 1.999659, 1.014072, 0.296259,
+ -0.271820, 1.986076, 1.011071, 0.321423, -0.289959, 1.970618, 1.007389, 0.346897, -0.307283,
+ 1.949667, 1.002955, 0.372750, -0.323817, 1.925287, 0.997633, 0.398603, -0.339241, 1.896006,
+ 0.991354, 0.424351, -0.353633, 1.863658, 0.983937, 0.449887, -0.366660, 1.827430, 0.975254,
+ 0.475715, -0.378213, 1.789521, 0.964753, 0.502204, -0.387133, 1.745632, 0.951594, 0.530179,
+ -0.394976, 1.705347, 0.936344, 0.556732, -0.400134, 1.658928, 0.918907, 0.583123, -0.403439,
+ 1.613077, 0.899504, 0.609477, -0.405285, 1.567884, 0.878172, 0.634927, -0.405055, 1.523507,
+ 0.854396, 0.660357, -0.403494, 1.481712, 0.829259, 0.684851, -0.400104, 1.439000, 0.802359,
+ 0.709654, -0.395536, 1.400956, 0.773534, 0.733472, -0.388996, 1.362156, 0.743230, 0.757502,
+ -0.380263, 1.325113, 0.711090, 0.782249, -0.370594, 1.292913, 0.677166, 0.806017, -0.359509,
+ 1.262088, 0.642527, 0.828687, -0.347126, 1.232059, 0.607589, 0.852372, -0.334474, 1.207160,
+ 0.571938, 0.874266, -0.320074, 1.181978, 0.535518, 0.898168, -0.304719, 1.161156, 0.498375,
+ 0.920456, -0.288246, 1.140667, 0.461179, 0.942832, -0.271311, 1.122780, 0.424533, 0.966458,
+ -0.254154, 1.108743, 0.387784, 0.988907, -0.235659, 1.093872, 0.351689, 1.011557, -0.216322,
+ 1.081959, 0.315743, 1.035099, -0.197007, 1.070885, 0.280402, 1.056354, -0.176878, 1.059968,
+ 0.246472, 1.079854, -0.156058, 1.051815, 0.212818, 1.101494, -0.134772, 1.045757, 0.182143,
+ 1.120587, -0.113071, 1.041169, 0.152867, 1.135399, -0.090411, 1.034844, 0.122796, 1.146612,
+ -0.067477, 1.026974, 0.091888, 1.153168, -0.044849, 1.017303, 0.060779, 1.157912, -0.021998,
+ 1.007735, 0.029919, 1.163607, 0.000121, 0.999959, 0.000003, 0.000200, -0.000216, 2.163956,
+ 1.077737, 0.000504, -0.000543, 2.161128, 1.077732, 0.002016, -0.002173, 2.162732, 1.077729,
+ 0.004535, -0.004887, 2.161402, 1.077749, 0.008066, -0.008692, 2.163252, 1.077732, 0.012599,
+ -0.013576, 2.161300, 1.077727, 0.018145, -0.019546, 2.161151, 1.077702, 0.024702, -0.026599,
+ 2.161223, 1.077675, 0.032272, -0.034729, 2.160949, 1.077632, 0.040862, -0.043936, 2.160967,
+ 1.077575, 0.050470, -0.054203, 2.160035, 1.077473, 0.061113, -0.065528, 2.159490, 1.077348,
+ 0.072794, -0.077882, 2.158517, 1.077178, 0.085528, -0.091030, 2.156605, 1.076937, 0.099337,
+ -0.105251, 2.154828, 1.076631, 0.114228, -0.120456, 2.152812, 1.076229, 0.130202, -0.136573,
+ 2.150298, 1.075713, 0.147284, -0.153306, 2.146752, 1.075031, 0.165480, -0.170931, 2.142744,
+ 1.074173, 0.184793, -0.189083, 2.137475, 1.073063, 0.205224, -0.207840, 2.131320, 1.071683,
+ 0.226743, -0.226939, 2.123154, 1.069914, 0.249401, -0.246344, 2.114086, 1.067718, 0.272955,
+ -0.265640, 2.101599, 1.064924, 0.297494, -0.284846, 2.086612, 1.061512, 0.322731, -0.303452,
+ 2.067356, 1.057359, 0.348451, -0.321330, 2.043711, 1.052294, 0.374451, -0.338201, 2.015033,
+ 1.046153, 0.400454, -0.353816, 1.981139, 1.039003, 0.426434, -0.368216, 1.944128, 1.030498,
+ 0.452088, -0.381251, 1.903094, 1.020454, 0.477901, -0.392833, 1.860402, 1.008793, 0.504173,
+ -0.402408, 1.814402, 0.994791, 0.531520, -0.409545, 1.766273, 0.977733, 0.558049, -0.414351,
+ 1.714119, 0.958625, 0.584778, -0.417437, 1.664612, 0.937189, 0.610808, -0.418519, 1.613793,
+ 0.913543, 0.636915, -0.418094, 1.565942, 0.888137, 0.662204, -0.415742, 1.518783, 0.860728,
+ 0.686848, -0.411746, 1.473306, 0.831793, 0.710992, -0.406153, 1.430153, 0.800862, 0.735382,
+ -0.399519, 1.389824, 0.768768, 0.759079, -0.390927, 1.350744, 0.734825, 0.782912, -0.380111,
+ 1.313559, 0.699450, 0.806746, -0.368383, 1.280028, 0.663191, 0.830269, -0.355606, 1.249814,
+ 0.625927, 0.853305, -0.341988, 1.221138, 0.588644, 0.876326, -0.327545, 1.195837, 0.550849,
+ 0.898322, -0.311779, 1.171844, 0.512694, 0.921811, -0.294944, 1.150671, 0.474225, 0.944563,
+ -0.277333, 1.132224, 0.435772, 0.967089, -0.259340, 1.115422, 0.398001, 0.989754, -0.240836,
+ 1.100405, 0.360802, 1.012470, -0.221293, 1.086533, 0.323566, 1.036426, -0.201191, 1.075496,
+ 0.287387, 1.058709, -0.180590, 1.064233, 0.252184, 1.081593, -0.159810, 1.055296, 0.218441,
+ 1.103146, -0.137772, 1.047978, 0.186223, 1.122814, -0.115347, 1.042693, 0.156019, 1.137790,
+ -0.092582, 1.036049, 0.125579, 1.149184, -0.069152, 1.027944, 0.093986, 1.156062, -0.045661,
+ 1.018039, 0.062122, 1.160733, -0.022719, 1.008072, 0.030650, 1.166487, 0.000231, 1.000063,
+ -0.000120, 0.000201, -0.000228, 2.308308, 1.133128, 0.000504, -0.000571, 2.283756, 1.133123,
+ 0.002016, -0.002284, 2.283756, 1.133123, 0.004535, -0.005138, 2.283310, 1.133144, 0.008048,
+ -0.009119, 2.266192, 1.133138, 0.012600, -0.014274, 2.284377, 1.133110, 0.018147, -0.020553,
+ 2.284204, 1.133093, 0.024702, -0.027964, 2.283517, 1.133060, 0.032272, -0.036510, 2.282997,
+ 1.133007, 0.040866, -0.046188, 2.282986, 1.132930, 0.050481, -0.056979, 2.282260, 1.132824,
+ 0.061133, -0.068881, 2.281533, 1.132678, 0.072830, -0.081850, 2.280504, 1.132481, 0.085592,
+ -0.095657, 2.278304, 1.132202, 0.099431, -0.110594, 2.276269, 1.131845, 0.114360, -0.126590,
+ 2.273890, 1.131383, 0.130388, -0.143454, 2.270761, 1.130784, 0.147547, -0.161029, 2.266794,
+ 1.130003, 0.165836, -0.179523, 2.262332, 1.129016, 0.185269, -0.198527, 2.256326, 1.127738,
+ 0.205822, -0.218138, 2.249031, 1.126156, 0.227527, -0.238141, 2.239993, 1.124132, 0.250325,
+ -0.258302, 2.228878, 1.121594, 0.274070, -0.278329, 2.214204, 1.118449, 0.298793, -0.298310,
+ 2.196654, 1.114528, 0.324131, -0.317462, 2.173394, 1.109783, 0.350101, -0.335853, 2.146395,
+ 1.103901, 0.376293, -0.353064, 2.112341, 1.096954, 0.402547, -0.368950, 2.073700, 1.088642,
+ 0.428791, -0.383462, 2.031152, 1.078946, 0.454976, -0.396635, 1.986661, 1.067536, 0.480566,
+ -0.407873, 1.937038, 1.054403, 0.506154, -0.417303, 1.885155, 1.038894, 0.532862, -0.424194,
+ 1.830369, 1.020535, 0.560354, -0.429344, 1.776976, 0.999295, 0.587114, -0.431949, 1.721214,
+ 0.975990, 0.613345, -0.432547, 1.665739, 0.950239, 0.639335, -0.431338, 1.612200, 0.922467,
+ 0.664996, -0.428473, 1.561035, 0.892593, 0.688947, -0.423355, 1.508240, 0.861325, 0.713403,
+ -0.417235, 1.461776, 0.828289, 0.737649, -0.409848, 1.418888, 0.793863, 0.761275, -0.400901,
+ 1.376807, 0.758074, 0.784778, -0.390174, 1.337204, 0.721974, 0.808762, -0.377683, 1.301527,
+ 0.682718, 0.831993, -0.364037, 1.267144, 0.644001, 0.854696, -0.349494, 1.236023, 0.605478,
+ 0.877933, -0.334499, 1.209284, 0.565588, 0.900180, -0.318435, 1.183967, 0.526138, 0.923039,
+ -0.301669, 1.161513, 0.486524, 0.945895, -0.283298, 1.140838, 0.446747, 0.968069, -0.264438,
+ 1.122475, 0.408041, 0.991179, -0.245463, 1.106968, 0.369477, 1.012926, -0.225680, 1.091435,
+ 0.331626, 1.036995, -0.205401, 1.079561, 0.294288, 1.060909, -0.184310, 1.068215, 0.257696,
+ 1.083531, -0.162846, 1.058133, 0.223343, 1.105644, -0.141040, 1.050851, 0.190541, 1.125691,
+ -0.117965, 1.045001, 0.159310, 1.141297, -0.094377, 1.038028, 0.128238, 1.152672, -0.070831,
+ 1.029694, 0.096282, 1.159333, -0.046853, 1.019136, 0.063720, 1.163819, -0.022991, 1.008518,
+ 0.031234, 1.169564, 0.000125, 1.000069, -0.000024, 0.000202, -0.000241, 2.458341, 1.191742,
+ 0.000504, -0.000600, 2.418738, 1.191740, 0.002015, -0.002401, 2.418821, 1.191730, 0.004535,
+ -0.005405, 2.421986, 1.191756, 0.008071, -0.009618, 2.424988, 1.191753, 0.012600, -0.015012,
+ 2.420242, 1.191727, 0.018145, -0.021612, 2.419937, 1.191703, 0.024704, -0.029410, 2.419746,
+ 1.191662, 0.032278, -0.038398, 2.419409, 1.191604, 0.040874, -0.048574, 2.418995, 1.191515,
+ 0.050496, -0.059920, 2.418190, 1.191389, 0.061160, -0.072432, 2.417487, 1.191221, 0.072871,
+ -0.086009, 2.415853, 1.190984, 0.085664, -0.100559, 2.413669, 1.190664, 0.099543, -0.116283,
+ 2.411423, 1.190256, 0.114520, -0.133071, 2.408711, 1.189719, 0.130616, -0.150670, 2.404900,
+ 1.189019, 0.147856, -0.169197, 2.400512, 1.188125, 0.166235, -0.188545, 2.394939, 1.186972,
+ 0.185804, -0.208480, 2.388232, 1.185515, 0.206488, -0.228883, 2.379190, 1.183673, 0.228383,
+ -0.249897, 2.369208, 1.181382, 0.251305, -0.270851, 2.355459, 1.178478, 0.275349, -0.291780,
+ 2.339142, 1.174857, 0.300106, -0.312257, 2.316655, 1.170411, 0.325849, -0.332225, 2.291540,
+ 1.164883, 0.351782, -0.350862, 2.257242, 1.158196, 0.378248, -0.368431, 2.218671, 1.150173,
+ 0.404674, -0.384428, 2.173680, 1.140703, 0.431385, -0.399230, 2.127083, 1.129555, 0.457407,
+ -0.411875, 2.073236, 1.116436, 0.483275, -0.423013, 2.018223, 1.101373, 0.509278, -0.432624,
+ 1.962674, 1.084257, 0.534751, -0.439261, 1.900814, 1.064592, 0.561895, -0.443801, 1.839558,
+ 1.040881, 0.588677, -0.445872, 1.777763, 1.015208, 0.614900, -0.445896, 1.716550, 0.987252,
+ 0.641051, -0.444148, 1.657984, 0.957271, 0.666409, -0.440299, 1.600832, 0.924841, 0.691872,
+ -0.435318, 1.548237, 0.891185, 0.716638, -0.428631, 1.497572, 0.855929, 0.739864, -0.419872,
+ 1.447043, 0.819676, 0.763707, -0.410456, 1.403648, 0.781455, 0.786744, -0.399390, 1.360844,
+ 0.742965, 0.809585, -0.386381, 1.320529, 0.703260, 0.834164, -0.372622, 1.286467, 0.662385,
+ 0.856713, -0.357177, 1.252306, 0.621379, 0.879820, -0.341458, 1.223070, 0.580238, 0.902721,
+ -0.325024, 1.197115, 0.539028, 0.924650, -0.307543, 1.172314, 0.498592, 0.947613, -0.289557,
+ 1.151171, 0.457980, 0.969590, -0.269799, 1.129986, 0.417696, 0.992961, -0.250111, 1.113321,
+ 0.377529, 1.014582, -0.229761, 1.097149, 0.339096, 1.038069, -0.209375, 1.083913, 0.301119,
+ 1.061661, -0.188038, 1.071241, 0.263506, 1.085069, -0.165874, 1.060508, 0.227921, 1.107744,
+ -0.143437, 1.052930, 0.194062, 1.127982, -0.120574, 1.046396, 0.162506, 1.144541, -0.096569,
+ 1.039880, 0.130788, 1.155876, -0.072039, 1.030946, 0.098057, 1.162719, -0.047888, 1.020124,
+ 0.064956, 1.167089, -0.023740, 1.008953, 0.031966, 1.172775, 0.000277, 1.000067, -0.000111,
+ 0.000200, -0.000251, 2.573709, 1.253951, 0.000504, -0.000632, 2.572401, 1.253940, 0.002015,
+ -0.002527, 2.571267, 1.253927, 0.004535, -0.005687, 2.572481, 1.253948, 0.008062, -0.010108,
+ 2.571851, 1.253941, 0.012588, -0.015780, 2.568431, 1.253934, 0.018139, -0.022731, 2.569765,
+ 1.253893, 0.024709, -0.030948, 2.572115, 1.253853, 0.032283, -0.040401, 2.571456, 1.253785,
+ 0.040883, -0.051105, 2.571041, 1.253683, 0.050514, -0.063041, 2.570153, 1.253538, 0.061188,
+ -0.076195, 2.569085, 1.253336, 0.072926, -0.090402, 2.567184, 1.253065, 0.085746, -0.105745,
+ 2.564731, 1.252697, 0.099661, -0.122296, 2.561995, 1.252218, 0.114699, -0.139912, 2.559019,
+ 1.251590, 0.130882, -0.158362, 2.555017, 1.250766, 0.148202, -0.177856, 2.549419, 1.249744,
+ 0.166706, -0.198049, 2.542908, 1.248423, 0.186404, -0.219014, 2.535205, 1.246741, 0.207272,
+ -0.240376, 2.524893, 1.244596, 0.229345, -0.262230, 2.512804, 1.241917, 0.252494, -0.284134,
+ 2.496923, 1.238610, 0.276690, -0.305828, 2.476583, 1.234474, 0.301798, -0.327107, 2.451548,
+ 1.229292, 0.327423, -0.347300, 2.418630, 1.222997, 0.353848, -0.366699, 2.381002, 1.215366,
+ 0.380342, -0.384421, 2.334413, 1.206199, 0.407390, -0.400855, 2.285660, 1.195374, 0.433913,
+ -0.415241, 2.228604, 1.182290, 0.460837, -0.428275, 2.171532, 1.167385, 0.486381, -0.438573,
+ 2.105639, 1.150401, 0.511959, -0.447348, 2.040835, 1.130990, 0.537586, -0.454152, 1.974797,
+ 1.109302, 0.564035, -0.458684, 1.907895, 1.084131, 0.590690, -0.460058, 1.839482, 1.055803,
+ 0.617250, -0.459662, 1.772332, 1.025103, 0.643406, -0.457260, 1.707313, 0.992502, 0.668794,
+ -0.452666, 1.644722, 0.957657, 0.693930, -0.446641, 1.586832, 0.921340, 0.718708, -0.439121,
+ 1.531197, 0.883841, 0.743469, -0.430429, 1.480765, 0.844931, 0.766080, -0.419622, 1.430338,
+ 0.804786, 0.789801, -0.408368, 1.386295, 0.764206, 0.812718, -0.395392, 1.343758, 0.722565,
+ 0.835453, -0.380699, 1.304655, 0.680585, 0.858801, -0.364834, 1.269287, 0.637235, 0.881537,
+ -0.348092, 1.237493, 0.594579, 0.904656, -0.331087, 1.208862, 0.552313, 0.926357, -0.312966,
+ 1.182365, 0.510080, 0.949001, -0.294684, 1.159452, 0.468677, 0.971598, -0.275361, 1.138706,
+ 0.426723, 0.994905, -0.254947, 1.120552, 0.385875, 1.017981, -0.234109, 1.104215, 0.345751,
+ 1.040840, -0.213040, 1.089276, 0.306762, 1.063893, -0.191616, 1.075845, 0.269066, 1.086907,
+ -0.169272, 1.063788, 0.232171, 1.109937, -0.146076, 1.054977, 0.197826, 1.130808, -0.122544,
+ 1.048572, 0.165272, 1.146831, -0.098492, 1.040742, 0.133280, 1.158955, -0.073710, 1.031818,
+ 0.100262, 1.166161, -0.048610, 1.020747, 0.066165, 1.170491, -0.024209, 1.009380, 0.032741,
+ 1.176111, 0.000010, 1.000042, 0.000056, 0.000202, -0.000267, 2.786357, 1.320169, 0.000504,
+ -0.000665, 2.741889, 1.320168, 0.002015, -0.002660, 2.740000, 1.320143, 0.004536, -0.005987,
+ 2.744276, 1.320161, 0.008063, -0.010644, 2.743432, 1.320162, 0.012600, -0.016628, 2.741741,
+ 1.320148, 0.018144, -0.023937, 2.741314, 1.320127, 0.024708, -0.032577, 2.741916, 1.320061,
+ 0.032290, -0.042536, 2.742132, 1.319976, 0.040894, -0.053799, 2.741199, 1.319861, 0.050533,
+ -0.066361, 2.740258, 1.319691, 0.061223, -0.080202, 2.739045, 1.319458, 0.072985, -0.095109,
+ 2.736519, 1.319138, 0.085841, -0.111296, 2.733903, 1.318715, 0.099808, -0.128685, 2.730944,
+ 1.318156, 0.114903, -0.147202, 2.727293, 1.317424, 0.131164, -0.166575, 2.722169, 1.316485,
+ 0.148599, -0.187019, 2.716148, 1.315274, 0.167245, -0.208240, 2.708701, 1.313733, 0.187078,
+ -0.230151, 2.698998, 1.311792, 0.208153, -0.252538, 2.687341, 1.309343, 0.230418, -0.275295,
+ 2.672621, 1.306247, 0.253802, -0.298066, 2.653619, 1.302374, 0.278261, -0.320673, 2.629943,
+ 1.297573, 0.303527, -0.342528, 2.599228, 1.291625, 0.329571, -0.363531, 2.562226, 1.284374,
+ 0.355939, -0.382963, 2.515491, 1.275478, 0.382987, -0.401306, 2.464858, 1.264866, 0.409917,
+ -0.417455, 2.404877, 1.252184, 0.437015, -0.432067, 2.341408, 1.237415, 0.463474, -0.444204,
+ 2.271837, 1.220687, 0.489835, -0.454631, 2.200593, 1.200973, 0.516054, -0.463338, 2.129733,
+ 1.179346, 0.541397, -0.469425, 2.055635, 1.155039, 0.566798, -0.473526, 1.980812, 1.127866,
+ 0.593114, -0.474632, 1.904723, 1.097304, 0.619945, -0.473597, 1.832456, 1.063603, 0.646325,
+ -0.470656, 1.761501, 1.027971, 0.672320, -0.465675, 1.694248, 0.990692, 0.697163, -0.458527,
+ 1.629227, 0.951582, 0.721472, -0.449904, 1.568132, 0.911197, 0.745855, -0.440140, 1.512084,
+ 0.869745, 0.770089, -0.429338, 1.460694, 0.827648, 0.792546, -0.416701, 1.410739, 0.784728,
+ 0.815161, -0.403151, 1.365438, 0.741884, 0.837994, -0.388714, 1.324811, 0.697800, 0.861220,
+ -0.372573, 1.287723, 0.653341, 0.883737, -0.355024, 1.252491, 0.609455, 0.906784, -0.337092,
+ 1.221844, 0.565275, 0.928493, -0.318370, 1.192881, 0.521558, 0.951495, -0.299605, 1.169131,
+ 0.478149, 0.973586, -0.280067, 1.146316, 0.436325, 0.996400, -0.259823, 1.127860, 0.394409,
+ 1.019780, -0.238313, 1.110521, 0.353045, 1.042775, -0.216506, 1.093915, 0.312803, 1.066822,
+ -0.194695, 1.080326, 0.274100, 1.089869, -0.172290, 1.067722, 0.236657, 1.113606, -0.149264,
+ 1.058471, 0.201603, 1.134229, -0.124814, 1.050701, 0.168398, 1.150922, -0.100070, 1.043051,
+ 0.135616, 1.163224, -0.075155, 1.033742, 0.102144, 1.169965, -0.049933, 1.021818, 0.067532,
+ 1.174200, -0.024461, 1.009916, 0.033215, 1.179766, 0.000188, 1.000045, -0.000014, 0.000202,
+ -0.000281, 2.964186, 1.390880, 0.000505, -0.000702, 2.945157, 1.390903, 0.002015, -0.002802,
+ 2.931184, 1.390863, 0.004535, -0.006307, 2.935673, 1.390900, 0.008063, -0.011213, 2.934274,
+ 1.390890, 0.012598, -0.017516, 2.932216, 1.390876, 0.018147, -0.025221, 2.933324, 1.390832,
+ 0.024711, -0.034322, 2.933945, 1.390769, 0.032295, -0.044810, 2.933496, 1.390674, 0.040904,
+ -0.056673, 2.932487, 1.390538, 0.050555, -0.069906, 2.931571, 1.390342, 0.061259, -0.084468,
+ 2.929914, 1.390064, 0.073053, -0.100152, 2.927039, 1.389695, 0.085948, -0.117202, 2.924241,
+ 1.389201, 0.099968, -0.135531, 2.920760, 1.388548, 0.115135, -0.154906, 2.915998, 1.387692,
+ 0.131496, -0.175352, 2.910285, 1.386611, 0.149049, -0.196783, 2.903174, 1.385190, 0.167848,
+ -0.219066, 2.894584, 1.383407, 0.187879, -0.241983, 2.883171, 1.381148, 0.209143, -0.265398,
+ 2.869102, 1.378261, 0.231689, -0.289254, 2.852238, 1.374690, 0.255223, -0.312776, 2.828264,
+ 1.370166, 0.279952, -0.336260, 2.800175, 1.364591, 0.305572, -0.358865, 2.764282, 1.357758,
+ 0.331650, -0.380223, 2.717845, 1.349413, 0.358491, -0.400252, 2.665326, 1.339084, 0.385445,
+ -0.418422, 2.602293, 1.326773, 0.412947, -0.434993, 2.536973, 1.312141, 0.439681, -0.448757,
+ 2.459463, 1.295205, 0.467272, -0.461427, 2.386250, 1.275573, 0.493568, -0.471102, 2.303225,
+ 1.253400, 0.519743, -0.478930, 2.221945, 1.228890, 0.544882, -0.484098, 2.136425, 1.201730,
+ 0.570690, -0.488125, 2.057093, 1.172022, 0.595905, -0.489185, 1.975334, 1.139312, 0.622747,
+ -0.487535, 1.895055, 1.103038, 0.648695, -0.483482, 1.815995, 1.064364, 0.675159, -0.478096,
+ 1.744272, 1.024098, 0.700714, -0.470492, 1.675257, 0.982186, 0.725641, -0.461398, 1.609135,
+ 0.939137, 0.748552, -0.449825, 1.545091, 0.894791, 0.772808, -0.438185, 1.489394, 0.850373,
+ 0.795928, -0.425073, 1.437026, 0.805287, 0.818900, -0.411028, 1.389654, 0.760003, 0.841633,
+ -0.396047, 1.345873, 0.714914, 0.863213, -0.379637, 1.305185, 0.669271, 0.886662, -0.362227,
+ 1.269147, 0.622935, 0.908504, -0.343068, 1.234714, 0.577757, 0.931425, -0.323982, 1.204997,
+ 0.532922, 0.953835, -0.304347, 1.178871, 0.488154, 0.975813, -0.284219, 1.155019, 0.444885,
+ 0.997662, -0.263544, 1.133941, 0.402224, 1.021167, -0.242611, 1.116100, 0.360530, 1.044038,
+ -0.220065, 1.098348, 0.318968, 1.068837, -0.197580, 1.084605, 0.279107, 1.092548, -0.174779,
+ 1.071217, 0.241111, 1.116157, -0.151596, 1.060486, 0.204913, 1.137486, -0.127478, 1.052751,
+ 0.171410, 1.154694, -0.101915, 1.044807, 0.137999, 1.166867, -0.076246, 1.034824, 0.103807,
+ 1.173715, -0.050661, 1.022501, 0.068802, 1.178236, -0.025355, 1.010324, 0.034155, 1.183545,
+ 0.000205, 1.000059, -0.000110, 0.000201, -0.000294, 3.161080, 1.466721, 0.000505, -0.000740,
+ 3.155526, 1.466737, 0.002016, -0.002957, 3.152852, 1.466688, 0.004537, -0.006655, 3.150654,
+ 1.466667, 0.008066, -0.011828, 3.153109, 1.466694, 0.012604, -0.018479, 3.152143, 1.466721,
+ 0.018150, -0.026598, 3.151025, 1.466636, 0.024714, -0.036191, 3.150300, 1.466562, 0.032301,
+ -0.047249, 3.149861, 1.466450, 0.040924, -0.059766, 3.149548, 1.466289, 0.050579, -0.073703,
+ 3.147516, 1.466055, 0.061306, -0.089022, 3.145680, 1.465738, 0.073135, -0.105563, 3.142428,
+ 1.465301, 0.086075, -0.123544, 3.139113, 1.464715, 0.100153, -0.142853, 3.135064, 1.463956,
+ 0.115411, -0.163183, 3.129509, 1.462962, 0.131876, -0.184760, 3.122959, 1.461670, 0.149570,
+ -0.207172, 3.114153, 1.460045, 0.168523, -0.230578, 3.103626, 1.457945, 0.188784, -0.254658,
+ 3.090818, 1.455279, 0.210264, -0.279114, 3.073352, 1.451998, 0.233030, -0.303930, 3.052592,
+ 1.447780, 0.256959, -0.328517, 3.025187, 1.442568, 0.281901, -0.352755, 2.990341, 1.436026,
+ 0.307728, -0.375894, 2.946820, 1.427979, 0.334197, -0.397924, 2.892845, 1.418249, 0.360966,
+ -0.417914, 2.827937, 1.406370, 0.388478, -0.436526, 2.758006, 1.392134, 0.415567, -0.452366,
+ 2.674696, 1.375244, 0.443518, -0.466917, 2.595136, 1.355660, 0.470631, -0.478417, 2.504173,
+ 1.333123, 0.497419, -0.487825, 2.413227, 1.308181, 0.523961, -0.495064, 2.321239, 1.280227,
+ 0.549708, -0.499844, 2.228911, 1.249894, 0.575296, -0.502844, 2.138834, 1.217130, 0.600168,
+ -0.503368, 2.049030, 1.181412, 0.625874, -0.501622, 1.962267, 1.142648, 0.652164, -0.496936,
+ 1.876900, 1.101268, 0.678029, -0.490319, 1.796344, 1.057782, 0.703248, -0.481575, 1.718925,
+ 1.012884, 0.728520, -0.471822, 1.648358, 0.966487, 0.752577, -0.460134, 1.581989, 0.919880,
+ 0.776163, -0.447164, 1.520109, 0.873087, 0.800016, -0.433601, 1.465081, 0.825803, 0.822176,
+ -0.418388, 1.412564, 0.778249, 0.844873, -0.402704, 1.366184, 0.730849, 0.865955, -0.385633,
+ 1.321865, 0.684037, 0.888173, -0.368255, 1.283464, 0.637192, 0.910994, -0.349332, 1.249215,
+ 0.590131, 0.934270, -0.329612, 1.218366, 0.543213, 0.956653, -0.309228, 1.189808, 0.497752,
+ 0.978476, -0.288310, 1.163674, 0.452837, 1.000755, -0.267243, 1.141389, 0.409481, 1.023827,
+ -0.246015, 1.122012, 0.367354, 1.045572, -0.223777, 1.103303, 0.325171, 1.070445, -0.200837,
+ 1.088010, 0.284442, 1.094268, -0.177211, 1.073650, 0.245138, 1.118639, -0.153531, 1.063051,
+ 0.208289, 1.139786, -0.129074, 1.053921, 0.173607, 1.157848, -0.104051, 1.045968, 0.140467,
+ 1.170697, -0.077694, 1.035782, 0.105594, 1.177874, -0.051393, 1.023483, 0.069898, 1.182242,
+ -0.025392, 1.010620, 0.034532, 1.187612, -0.000032, 1.000062, -0.000035, 0.000202, -0.000313,
+ 3.450327, 1.548291, 0.000504, -0.000780, 3.396162, 1.548289, 0.002015, -0.003120, 3.395621,
+ 1.548260, 0.004533, -0.007019, 3.394299, 1.548217, 0.008066, -0.012486, 3.398803, 1.548274,
+ 0.012600, -0.019500, 3.396363, 1.548245, 0.018151, -0.028076, 3.396805, 1.548192, 0.024722,
+ -0.038209, 3.396384, 1.548109, 0.032306, -0.049868, 3.395158, 1.547979, 0.040936, -0.063077,
+ 3.394303, 1.547785, 0.050610, -0.077791, 3.392979, 1.547513, 0.061360, -0.093869, 3.389910,
+ 1.547134, 0.073227, -0.111380, 3.386669, 1.546619, 0.086217, -0.130371, 3.382974, 1.545938,
+ 0.100364, -0.150684, 3.378046, 1.545039, 0.115733, -0.172116, 3.371719, 1.543880, 0.132309,
+ -0.194809, 3.363764, 1.542380, 0.150174, -0.218431, 3.353699, 1.540462, 0.169340, -0.242954,
+ 3.341397, 1.538002, 0.189788, -0.268175, 3.324957, 1.534894, 0.211581, -0.293776, 3.304776,
+ 1.530954, 0.234561, -0.319619, 3.278192, 1.526033, 0.258776, -0.345089, 3.244910, 1.519926,
+ 0.284059, -0.370176, 3.203338, 1.512296, 0.310312, -0.394171, 3.152477, 1.502956, 0.336748,
+ -0.416137, 3.083616, 1.491463, 0.364029, -0.436752, 3.010481, 1.477493, 0.391575, -0.455102,
+ 2.925454, 1.460933, 0.419409, -0.471378, 2.834380, 1.441554, 0.446811, -0.484714, 2.733329,
+ 1.418861, 0.474489, -0.496021, 2.633630, 1.393405, 0.501751, -0.504991, 2.530935, 1.364633,
+ 0.528488, -0.511392, 2.426653, 1.333234, 0.554428, -0.515395, 2.323633, 1.299138, 0.580434,
+ -0.517761, 2.224964, 1.262462, 0.605474, -0.517598, 2.127228, 1.223784, 0.629888, -0.514946,
+ 2.030545, 1.182321, 0.655579, -0.510177, 1.939070, 1.138515, 0.681940, -0.503097, 1.852355,
+ 1.091502, 0.707228, -0.493537, 1.768084, 1.043464, 0.731894, -0.482372, 1.690840, 0.994242,
+ 0.756741, -0.470312, 1.619277, 0.944749, 0.780160, -0.456412, 1.553430, 0.894816, 0.803384,
+ -0.441492, 1.493357, 0.845202, 0.826347, -0.425944, 1.437830, 0.795954, 0.849145, -0.409532,
+ 1.388578, 0.746915, 0.870617, -0.391988, 1.341527, 0.698025, 0.892943, -0.374229, 1.302188,
+ 0.649579, 0.913828, -0.355148, 1.262877, 0.601833, 0.936830, -0.335238, 1.230136, 0.554521,
+ 0.958687, -0.313939, 1.199596, 0.507208, 0.982008, -0.292741, 1.173619, 0.461357, 1.003691,
+ -0.270940, 1.149015, 0.416031, 1.027223, -0.249102, 1.128689, 0.372457, 1.050048, -0.226899,
+ 1.109444, 0.330281, 1.074105, -0.204329, 1.092943, 0.288987, 1.098971, -0.180560, 1.078591,
+ 0.249075, 1.123324, -0.155987, 1.066885, 0.211519, 1.145445, -0.130929, 1.057617, 0.176506,
+ 1.162856, -0.105269, 1.048453, 0.142345, 1.175360, -0.079267, 1.037439, 0.107452, 1.182514,
+ -0.052547, 1.024393, 0.071252, 1.186575, -0.025744, 1.011093, 0.035019, 1.192050, 0.000318,
+ 1.000013, -0.000152, 0.000204, -0.000334, 3.909175, 1.636412, 0.000504, -0.000825, 3.678647,
+ 1.636410, 0.002015, -0.003298, 3.678315, 1.636387, 0.004533, -0.007417, 3.674126, 1.636310,
+ 0.008062, -0.013190, 3.676771, 1.636376, 0.012603, -0.020613, 3.678135, 1.636369, 0.018153,
+ -0.029675, 3.677315, 1.636299, 0.024723, -0.040378, 3.676872, 1.636196, 0.032318, -0.052708,
+ 3.675750, 1.636038, 0.040955, -0.066660, 3.674803, 1.635810, 0.050645, -0.082203, 3.672735,
+ 1.635494, 0.061429, -0.099150, 3.669047, 1.635048, 0.073333, -0.117679, 3.665401, 1.634437,
+ 0.086388, -0.137725, 3.661315, 1.633634, 0.100620, -0.159081, 3.654992, 1.632571, 0.116087,
+ -0.181721, 3.647341, 1.631202, 0.132820, -0.205611, 3.637877, 1.629432, 0.150867, -0.230542,
+ 3.626333, 1.627161, 0.170234, -0.256239, 3.610671, 1.624266, 0.190981, -0.282751, 3.591685,
+ 1.620589, 0.213013, -0.309430, 3.565864, 1.615999, 0.236387, -0.336427, 3.534826, 1.610216,
+ 0.260943, -0.362931, 3.493984, 1.603047, 0.286497, -0.388644, 3.442075, 1.593920, 0.312769,
+ -0.412912, 3.375973, 1.582961, 0.339832, -0.435635, 3.299355, 1.569343, 0.367214, -0.456181,
+ 3.208994, 1.553137, 0.394935, -0.474325, 3.108910, 1.533791, 0.422935, -0.490318, 3.001767,
+ 1.511093, 0.451166, -0.503827, 2.891735, 1.485145, 0.478695, -0.514185, 2.773430, 1.455617,
+ 0.506313, -0.522502, 2.657639, 1.422946, 0.533427, -0.528119, 2.541132, 1.387843, 0.559942,
+ -0.531430, 2.426950, 1.349542, 0.585150, -0.531978, 2.312437, 1.309303, 0.610500, -0.531054,
+ 2.205966, 1.266280, 0.635380, -0.528058, 2.101993, 1.221709, 0.659852, -0.522751, 2.002950,
+ 1.175062, 0.685151, -0.515026, 1.908647, 1.125078, 0.710920, -0.505020, 1.819389, 1.074296,
+ 0.736066, -0.493268, 1.735806, 1.022420, 0.760503, -0.480032, 1.658607, 0.970230, 0.785091,
+ -0.465986, 1.589424, 0.917077, 0.807523, -0.449721, 1.522533, 0.864888, 0.830974, -0.433461,
+ 1.465416, 0.813006, 0.852659, -0.415808, 1.409076, 0.761689, 0.874841, -0.397855, 1.360758,
+ 0.711258, 0.896322, -0.379041, 1.316829, 0.661721, 0.918134, -0.360048, 1.278574, 0.612263,
+ 0.939356, -0.340108, 1.242200, 0.564369, 0.961025, -0.318877, 1.210305, 0.516506, 0.984371,
+ -0.297130, 1.183689, 0.469342, 1.006905, -0.274661, 1.157466, 0.423080, 1.029941, -0.252234,
+ 1.135066, 0.378315, 1.052751, -0.229268, 1.114518, 0.335169, 1.077981, -0.206662, 1.097760,
+ 0.293336, 1.102542, -0.183331, 1.082051, 0.252984, 1.126539, -0.158797, 1.068935, 0.214990,
+ 1.149023, -0.133014, 1.058996, 0.178903, 1.167550, -0.106641, 1.050245, 0.144559, 1.179994,
+ -0.079952, 1.038648, 0.108667, 1.187104, -0.053316, 1.025284, 0.072209, 1.191406, -0.026826,
+ 1.011453, 0.035833, 1.196748, 0.000226, 1.000034, -0.000061, 0.000200, -0.000346, 3.996419,
+ 1.732034, 0.000504, -0.000873, 4.000138, 1.732038, 0.002016, -0.003492, 4.002078, 1.732012,
+ 0.004538, -0.007859, 4.005626, 1.731962, 0.008064, -0.013963, 3.998500, 1.731999, 0.012590,
+ -0.021794, 3.995024, 1.732004, 0.018154, -0.031406, 3.999233, 1.731901, 0.024727, -0.042733,
+ 3.998497, 1.731774, 0.032327, -0.055781, 3.997064, 1.731599, 0.040974, -0.070543, 3.995856,
+ 1.731325, 0.050685, -0.086984, 3.993839, 1.730945, 0.061506, -0.104897, 3.989519, 1.730417,
+ 0.073458, -0.124506, 3.985313, 1.729697, 0.086573, -0.145706, 3.979984, 1.728747, 0.100909,
+ -0.168211, 3.972562, 1.727491, 0.116509, -0.192198, 3.963836, 1.725854, 0.133404, -0.217280,
+ 3.951919, 1.723749, 0.151659, -0.243556, 3.937734, 1.721093, 0.171288, -0.270611, 3.919021,
+ 1.717640, 0.192301, -0.298389, 3.895171, 1.713272, 0.214683, -0.326338, 3.864171, 1.707825,
+ 0.238392, -0.354394, 3.824682, 1.700956, 0.263151, -0.381636, 3.771168, 1.692392, 0.289155,
+ -0.408266, 3.709961, 1.681769, 0.315832, -0.433070, 3.630302, 1.668539, 0.342942, -0.455741,
+ 3.534719, 1.652513, 0.370892, -0.476655, 3.431531, 1.633428, 0.398985, -0.494692, 3.314933,
+ 1.610694, 0.427206, -0.510313, 3.189741, 1.584240, 0.455266, -0.522760, 3.058325, 1.554195,
+ 0.483472, -0.532872, 2.927213, 1.520805, 0.511192, -0.540229, 2.794112, 1.484026, 0.538706,
+ -0.545105, 2.663786, 1.443796, 0.565422, -0.547251, 2.534841, 1.401429, 0.591270, -0.547115,
+ 2.408437, 1.356231, 0.616787, -0.545113, 2.291284, 1.308887, 0.641380, -0.540853, 2.177478,
+ 1.260447, 0.665344, -0.534561, 2.069265, 1.210634, 0.690147, -0.527115, 1.969776, 1.158569,
+ 0.714578, -0.516171, 1.870847, 1.104593, 0.740349, -0.504048, 1.782674, 1.049578, 0.764563,
+ -0.489683, 1.698614, 0.994458, 0.788710, -0.474541, 1.624447, 0.938612, 0.812154, -0.458099,
+ 1.554453, 0.883694, 0.834566, -0.440345, 1.490045, 0.830220, 0.857486, -0.422491, 1.432889,
+ 0.776499, 0.879224, -0.403588, 1.380669, 0.724257, 0.899971, -0.383819, 1.333124, 0.673311,
+ 0.922111, -0.364250, 1.292648, 0.622999, 0.942842, -0.343873, 1.253933, 0.573304, 0.964398,
+ -0.323206, 1.221027, 0.525090, 0.986860, -0.301711, 1.191806, 0.477580, 1.009760, -0.278695,
+ 1.165162, 0.430624, 1.033347, -0.255591, 1.141715, 0.384482, 1.055937, -0.232039, 1.119739,
+ 0.340532, 1.081178, -0.208664, 1.102117, 0.297311, 1.105696, -0.184935, 1.085062, 0.256227,
+ 1.129575, -0.160673, 1.070918, 0.217709, 1.152135, -0.135414, 1.060642, 0.181471, 1.171221,
+ -0.108462, 1.051041, 0.146380, 1.184412, -0.081008, 1.039694, 0.110120, 1.191820, -0.053710,
+ 1.025903, 0.073052, 1.196195, -0.026625, 1.011816, 0.036129, 1.201677, -0.000175, 0.999945,
+ 0.000098, 0.000196, -0.000360, 4.100786, 1.836290, 0.000504, -0.000925, 4.370184, 1.836295,
+ 0.002018, -0.003706, 4.385247, 1.836243, 0.004534, -0.008324, 4.370146, 1.836210, 0.008064,
+ -0.014805, 4.372335, 1.836256, 0.012597, -0.023116, 4.359918, 1.836259, 0.018158, -0.033299,
+ 4.371503, 1.836123, 0.024732, -0.045301, 4.370533, 1.835988, 0.032344, -0.059143, 4.369649,
+ 1.835768, 0.040999, -0.074779, 4.367861, 1.835454, 0.050739, -0.092178, 4.364322, 1.834974,
+ 0.061594, -0.111161, 4.359221, 1.834355, 0.073604, -0.131958, 4.354620, 1.833499, 0.086796,
+ -0.154393, 4.347915, 1.832355, 0.101246, -0.178201, 4.339152, 1.830880, 0.116990, -0.203531,
+ 4.328327, 1.828936, 0.134086, -0.230043, 4.314240, 1.826442, 0.152589, -0.257718, 4.296795,
+ 1.823230, 0.172514, -0.286176, 4.273985, 1.819124, 0.193853, -0.315295, 4.244136, 1.813909,
+ 0.216582, -0.344507, 4.205152, 1.807410, 0.240668, -0.373646, 4.154781, 1.799084, 0.265904,
+ -0.401897, 4.091563, 1.788905, 0.292226, -0.429136, 4.013199, 1.776206, 0.319045, -0.454057,
+ 3.912886, 1.760500, 0.346721, -0.477219, 3.800927, 1.741586, 0.374849, -0.497883, 3.675652,
+ 1.718818, 0.403078, -0.515504, 3.536892, 1.692138, 0.431597, -0.530621, 3.391351, 1.661434,
+ 0.460246, -0.542852, 3.242817, 1.626989, 0.488899, -0.552238, 3.093685, 1.588582, 0.517215,
+ -0.559045, 2.944163, 1.546300, 0.544480, -0.562351, 2.794189, 1.501299, 0.571542, -0.563394,
+ 2.650239, 1.453758, 0.598167, -0.562590, 2.513757, 1.403321, 0.624104, -0.559636, 2.384203,
+ 1.352431, 0.648789, -0.554148, 2.259149, 1.298758, 0.672715, -0.546779, 2.140250, 1.244943,
+ 0.696258, -0.537896, 2.030401, 1.189971, 0.720048, -0.527401, 1.928311, 1.134526, 0.744078,
+ -0.514142, 1.830175, 1.076504, 0.768895, -0.499352, 1.740731, 1.018032, 0.792551, -0.482982,
+ 1.658911, 0.960250, 0.817007, -0.466406, 1.586579, 0.903029, 0.839035, -0.447616, 1.516969,
+ 0.846484, 0.862742, -0.429261, 1.458675, 0.791420, 0.884307, -0.409479, 1.402989, 0.737125,
+ 0.905641, -0.389303, 1.352817, 0.683912, 0.926185, -0.368344, 1.306684, 0.632690, 0.947229,
+ -0.347366, 1.267395, 0.581739, 0.969502, -0.326720, 1.233192, 0.532305, 0.990758, -0.304973,
+ 1.201017, 0.484166, 1.012749, -0.282816, 1.173018, 0.437385, 1.035533, -0.259084, 1.147184,
+ 0.390755, 1.059915, -0.235239, 1.125388, 0.345399, 1.084348, -0.211044, 1.105859, 0.301356,
+ 1.109544, -0.186698, 1.088888, 0.259708, 1.133770, -0.161900, 1.073848, 0.220324, 1.157553,
+ -0.136604, 1.063190, 0.183857, 1.176461, -0.110428, 1.053110, 0.148521, 1.190137, -0.082898,
+ 1.041484, 0.112124, 1.197215, -0.054554, 1.026844, 0.074160, 1.201654, -0.026744, 1.012264,
+ 0.036527, 1.207085, 0.000399, 1.000034, -0.000201, 0.000191, -0.000373, 4.194318, 1.950551,
+ 0.000504, -0.000983, 4.804350, 1.950552, 0.002015, -0.003931, 4.802820, 1.950518, 0.004536,
+ -0.008847, 4.805254, 1.950472, 0.008064, -0.015725, 4.804152, 1.950517, 0.012693, -0.024740,
+ 4.826828, 1.949914, 0.018159, -0.035365, 4.803103, 1.950349, 0.024740, -0.048122, 4.803220,
+ 1.950183, 0.032361, -0.062822, 4.801522, 1.949917, 0.041034, -0.079430, 4.799593, 1.949538,
+ 0.050815, -0.097841, 4.797179, 1.948972, 0.061702, -0.118026, 4.789557, 1.948246, 0.073766,
+ -0.140112, 4.783293, 1.947204, 0.087066, -0.163819, 4.775698, 1.945855, 0.101637, -0.189122,
+ 4.764612, 1.944052, 0.117558, -0.215884, 4.751486, 1.941710, 0.134884, -0.243968, 4.734791,
+ 1.938727, 0.153637, -0.273170, 4.712078, 1.934891, 0.173890, -0.303146, 4.683575, 1.929976,
+ 0.195643, -0.333704, 4.646766, 1.923740, 0.218767, -0.364170, 4.596814, 1.915888, 0.243337,
+ -0.394530, 4.535509, 1.905970, 0.268860, -0.423512, 4.452006, 1.893623, 0.295173, -0.450609,
+ 4.345682, 1.878286, 0.322784, -0.476488, 4.231632, 1.859391, 0.350616, -0.499420, 4.093553,
+ 1.836912, 0.379127, -0.519862, 3.944127, 1.809625, 0.407860, -0.537373, 3.782223, 1.778529,
+ 0.436717, -0.551802, 3.615563, 1.742684, 0.465345, -0.562951, 3.440672, 1.702289, 0.494158,
+ -0.571334, 3.268070, 1.658666, 0.522896, -0.577227, 3.100668, 1.611027, 0.551379, -0.580514,
+ 2.937615, 1.559742, 0.578992, -0.580610, 2.778703, 1.507257, 0.605095, -0.577729, 2.621626,
+ 1.451941, 0.630653, -0.573000, 2.476506, 1.395218, 0.656175, -0.566944, 2.341592, 1.337862,
+ 0.681036, -0.558988, 2.216478, 1.279275, 0.704713, -0.549211, 2.096972, 1.220526, 0.726894,
+ -0.537190, 1.983311, 1.161709, 0.749865, -0.524167, 1.881100, 1.102095, 0.773553, -0.508991,
+ 1.785637, 1.042039, 0.797102, -0.491658, 1.697234, 0.981588, 0.821187, -0.474093, 1.620250,
+ 0.921265, 0.843848, -0.454980, 1.547071, 0.862757, 0.866662, -0.435421, 1.482008, 0.804700,
+ 0.888696, -0.414990, 1.424116, 0.749432, 0.910945, -0.394472, 1.372658, 0.694767, 0.932300,
+ -0.373239, 1.325157, 0.641106, 0.952850, -0.351347, 1.282217, 0.589689, 0.974718, -0.329809,
+ 1.244897, 0.539322, 0.996445, -0.307902, 1.212306, 0.490083, 1.017580, -0.285392, 1.181402,
+ 0.442702, 1.040342, -0.262782, 1.155996, 0.395911, 1.064399, -0.238995, 1.131708, 0.350206,
+ 1.089464, -0.214297, 1.111215, 0.305175, 1.115565, -0.189293, 1.093094, 0.262686, 1.140640,
+ -0.163843, 1.077994, 0.223078, 1.163824, -0.137789, 1.066014, 0.185651, 1.182577, -0.111087,
+ 1.055615, 0.150045, 1.195775, -0.083945, 1.042940, 0.113457, 1.203175, -0.056145, 1.028015,
+ 0.075453, 1.207282, -0.027685, 1.012552, 0.037217, 1.213019, 0.000362, 0.999938, -0.000293,
+ 0.000187, -0.000388, 4.316009, 2.076500, 0.000504, -0.001048, 5.317799, 2.076499, 0.002014,
+ -0.004182, 5.306557, 2.076523, 0.004539, -0.009425, 5.317505, 2.076453, 0.008063, -0.016737,
+ 5.312143, 2.076410, 0.012614, -0.026171, 5.316434, 2.076389, 0.018158, -0.037641, 5.307836,
+ 2.076265, 0.024767, -0.051266, 5.315297, 2.076044, 0.032372, -0.066859, 5.307433, 2.075743,
+ 0.041066, -0.084538, 5.304809, 2.075270, 0.050871, -0.104062, 5.299277, 2.074622, 0.061821,
+ -0.125613, 5.293419, 2.073708, 0.073970, -0.149085, 5.286629, 2.072457, 0.087375, -0.174214,
+ 5.275937, 2.070804, 0.102105, -0.201136, 5.263267, 2.068647, 0.118223, -0.229505, 5.246309,
+ 2.065846, 0.135814, -0.259217, 5.225496, 2.062189, 0.154887, -0.289990, 5.196580, 2.057566,
+ 0.175510, -0.321618, 5.160716, 2.051593, 0.197636, -0.353632, 5.112202, 2.043949, 0.221168,
+ -0.385303, 5.046981, 2.034445, 0.246099, -0.416511, 4.965386, 2.022368, 0.272070, -0.446377,
+ 4.860735, 2.007160, 0.299090, -0.474279, 4.735140, 1.988598, 0.326702, -0.499809, 4.584962,
+ 1.965865, 0.355017, -0.522790, 4.420447, 1.938705, 0.383856, -0.542755, 4.241942, 1.906370,
+ 0.413059, -0.559903, 4.053302, 1.869455, 0.441882, -0.573174, 3.852753, 1.827946, 0.471516,
+ -0.584151, 3.660377, 1.781652, 0.500872, -0.591843, 3.466027, 1.730885, 0.529677, -0.596253,
+ 3.272812, 1.676821, 0.557683, -0.597604, 3.084286, 1.620064, 0.585652, -0.596591, 2.906111,
+ 1.560909, 0.612819, -0.593138, 2.738258, 1.500318, 0.639848, -0.588245, 2.584172, 1.438127,
+ 0.664758, -0.580140, 2.430697, 1.375746, 0.688754, -0.570189, 2.290701, 1.312727, 0.712848,
+ -0.559420, 2.162679, 1.250063, 0.735111, -0.546570, 2.042186, 1.187840, 0.757521, -0.532944,
+ 1.933435, 1.125513, 0.780056, -0.517981, 1.833524, 1.063827, 0.802513, -0.500724, 1.739053,
+ 1.002154, 0.825462, -0.481625, 1.652381, 0.939811, 0.848973, -0.462327, 1.577560, 0.878279,
+ 0.871521, -0.441928, 1.509291, 0.819200, 0.892325, -0.420297, 1.443799, 0.761607, 0.914935,
+ -0.399072, 1.389647, 0.705351, 0.936429, -0.377232, 1.339903, 0.650213, 0.957614, -0.355091,
+ 1.295467, 0.597773, 0.979578, -0.332767, 1.256692, 0.545914, 1.000860, -0.310147, 1.221666,
+ 0.495661, 1.022550, -0.287395, 1.190775, 0.448026, 1.045005, -0.264582, 1.162641, 0.400490,
+ 1.068703, -0.241464, 1.138358, 0.354088, 1.093098, -0.217504, 1.115973, 0.309812, 1.119230,
+ -0.192140, 1.096284, 0.266297, 1.144608, -0.165975, 1.080042, 0.225831, 1.168599, -0.139174,
+ 1.067749, 0.187761, 1.187970, -0.111910, 1.056635, 0.151322, 1.201240, -0.083978, 1.043566,
+ 0.114337, 1.208895, -0.056089, 1.028366, 0.076083, 1.213344, -0.028369, 1.013074, 0.037735,
+ 1.219220, -0.000534, 0.999968, 0.000076, 0.000182, -0.000404, 4.433519, 2.216201, 0.000504,
+ -0.001117, 5.911693, 2.216198, 0.002017, -0.004469, 5.919142, 2.216190, 0.004536, -0.010051,
+ 5.913172, 2.216130, 0.008065, -0.017867, 5.911791, 2.216145, 0.012467, -0.027603, 5.785357,
+ 2.216447, 0.018156, -0.040159, 5.901121, 2.215958, 0.024758, -0.054670, 5.908781, 2.215654,
+ 0.032395, -0.071352, 5.906098, 2.215283, 0.041108, -0.090201, 5.902558, 2.214715, 0.050955,
+ -0.111004, 5.895707, 2.213905, 0.061968, -0.134002, 5.888736, 2.212807, 0.074206, -0.159038,
+ 5.880633, 2.211303, 0.087742, -0.185801, 5.867001, 2.209297, 0.102652, -0.214368, 5.851446,
+ 2.206657, 0.119006, -0.244573, 5.830722, 2.203232, 0.136883, -0.276067, 5.802688, 2.198778,
+ 0.156335, -0.308660, 5.767185, 2.193091, 0.177396, -0.341940, 5.719726, 2.185858, 0.200070,
+ -0.375591, 5.658792, 2.176584, 0.224067, -0.408564, 5.573508, 2.164759, 0.249420, -0.440668,
+ 5.465696, 2.149777, 0.275879, -0.471138, 5.332207, 2.131225, 0.303307, -0.499204, 5.173339,
+ 2.108794, 0.331189, -0.524547, 4.985102, 2.080585, 0.359932, -0.547256, 4.785788, 2.047792,
+ 0.389063, -0.566479, 4.569344, 2.009518, 0.418725, -0.583031, 4.349557, 1.965601, 0.448181,
+ -0.595809, 4.121278, 1.916911, 0.477703, -0.605102, 3.892291, 1.863530, 0.507999, -0.612462,
+ 3.676557, 1.806286, 0.536889, -0.615451, 3.456241, 1.745841, 0.565778, -0.616029, 3.249464,
+ 1.681137, 0.593863, -0.613644, 3.050273, 1.615238, 0.620770, -0.608268, 2.859599, 1.548003,
+ 0.647171, -0.601116, 2.683287, 1.480447, 0.673458, -0.592840, 2.524036, 1.412084, 0.698064,
+ -0.581973, 2.371046, 1.345130, 0.721011, -0.568963, 2.229104, 1.278440, 0.744293, -0.555642,
+ 2.103213, 1.212448, 0.766314, -0.540934, 1.985370, 1.146287, 0.788164, -0.525271, 1.878842,
+ 1.082600, 0.809019, -0.507986, 1.779821, 1.019978, 0.830947, -0.489717, 1.691630, 0.956931,
+ 0.853732, -0.469345, 1.607513, 0.894207, 0.874904, -0.447618, 1.531176, 0.833436, 0.897289,
+ -0.426124, 1.467302, 0.773611, 0.919226, -0.404025, 1.408321, 0.716016, 0.940860, -0.381454,
+ 1.356209, 0.659515, 0.962764, -0.358901, 1.310082, 0.604629, 0.984322, -0.335983, 1.268485,
+ 0.552335, 1.005343, -0.312533, 1.230662, 0.501591, 1.028153, -0.289452, 1.199168, 0.452032,
+ 1.049283, -0.265754, 1.168575, 0.404347, 1.073687, -0.242571, 1.143533, 0.357445, 1.097546,
+ -0.218681, 1.119859, 0.312534, 1.123340, -0.194465, 1.099634, 0.269437, 1.148166, -0.168797,
+ 1.081968, 0.228586, 1.172518, -0.141552, 1.068789, 0.189866, 1.192930, -0.113325, 1.057548,
+ 0.152772, 1.206816, -0.084800, 1.044145, 0.115390, 1.215045, -0.056019, 1.028938, 0.076493,
+ 1.220048, -0.027733, 1.013338, 0.037767, 1.225852, 0.000050, 0.999927, -0.000160, 0.000178,
+ -0.000422, 4.587902, 2.372253, 0.000504, -0.001195, 6.624675, 2.372248, 0.002016, -0.004782,
+ 6.626884, 2.372187, 0.004531, -0.010746, 6.607379, 2.372318, 0.008081, -0.019161, 6.640102,
+ 2.372084, 0.012637, -0.029945, 6.653708, 2.372128, 0.018167, -0.042999, 6.623837, 2.371902,
+ 0.024769, -0.058516, 6.624484, 2.371595, 0.032421, -0.076370, 6.620877, 2.371120, 0.041164,
+ -0.096474, 6.615235, 2.370428, 0.051057, -0.118786, 6.607844, 2.369440, 0.062136, -0.143390,
+ 6.599216, 2.368075, 0.074490, -0.170034, 6.588018, 2.366218, 0.088179, -0.198717, 6.572526,
+ 2.363747, 0.103307, -0.229147, 6.551868, 2.360517, 0.119964, -0.261253, 6.526089, 2.356304,
+ 0.138173, -0.294703, 6.489593, 2.350797, 0.158072, -0.329261, 6.443573, 2.343783, 0.179592,
+ -0.364298, 6.379764, 2.334673, 0.202709, -0.399375, 6.295845, 2.323125, 0.227335, -0.433616,
+ 6.184929, 2.308547, 0.253230, -0.466794, 6.045905, 2.289980, 0.280100, -0.497509, 5.871803,
+ 2.266964, 0.308146, -0.525956, 5.672422, 2.239074, 0.336544, -0.551101, 5.443256, 2.204809,
+ 0.365223, -0.572471, 5.188034, 2.164827, 0.395484, -0.592088, 4.943783, 2.119489, 0.424416,
+ -0.606026, 4.666400, 2.067262, 0.455641, -0.619671, 4.418961, 2.009937, 0.485298, -0.627583,
+ 4.152737, 1.948900, 0.514774, -0.632072, 3.893344, 1.882692, 0.544172, -0.634033, 3.645332,
+ 1.814073, 0.573283, -0.633239, 3.414651, 1.742717, 0.602155, -0.630008, 3.195712, 1.669703,
+ 0.630520, -0.624550, 2.994536, 1.596021, 0.657121, -0.615749, 2.799373, 1.522572, 0.682071,
+ -0.604738, 2.616102, 1.448978, 0.707605, -0.593301, 2.456112, 1.376250, 0.731492, -0.579628,
+ 2.303517, 1.305297, 0.754139, -0.564473, 2.165340, 1.235548, 0.776505, -0.548787, 2.041646,
+ 1.167051, 0.796833, -0.531415, 1.923334, 1.100534, 0.817565, -0.513778, 1.818176, 1.035144,
+ 0.837981, -0.495167, 1.723830, 0.971583, 0.858513, -0.475690, 1.638448, 0.908841, 0.879892,
+ -0.454099, 1.559420, 0.846701, 0.902258, -0.432038, 1.491471, 0.785332, 0.924114, -0.409316,
+ 1.428878, 0.726409, 0.944230, -0.385618, 1.370785, 0.668588, 0.967001, -0.362604, 1.323529,
+ 0.612943, 0.988579, -0.339117, 1.279679, 0.559038, 1.010210, -0.315355, 1.240104, 0.506867,
+ 1.032084, -0.291408, 1.205261, 0.456934, 1.054671, -0.267387, 1.175197, 0.407792, 1.078314,
+ -0.243346, 1.148153, 0.360992, 1.102443, -0.219205, 1.123799, 0.315577, 1.128524, -0.194996,
+ 1.102624, 0.271742, 1.153989, -0.169897, 1.085134, 0.230702, 1.179420, -0.143960, 1.071699,
+ 0.192146, 1.200098, -0.116173, 1.060179, 0.155164, 1.214837, -0.086655, 1.046290, 0.117071,
+ 1.222749, -0.056956, 1.030040, 0.077450, 1.227273, -0.027883, 1.013650, 0.038092, 1.233293,
+ 0.000831, 1.000043, -0.000462, 0.000173, -0.000442, 4.741539, 2.547922, 0.000504, -0.001284,
+ 7.491127, 2.547919, 0.002014, -0.005132, 7.484889, 2.547844, 0.004523, -0.011521, 7.439875,
+ 2.547587, 0.008059, -0.020524, 7.483694, 2.547725, 0.012586, -0.032029, 7.470912, 2.547685,
+ 0.018081, -0.045948, 7.422534, 2.547686, 0.024783, -0.062844, 7.487581, 2.547107, 0.032451,
+ -0.082011, 7.483603, 2.546522, 0.041233, -0.103540, 7.475124, 2.545684, 0.051181, -0.127537,
+ 7.467521, 2.544438, 0.062347, -0.153921, 7.456266, 2.542744, 0.074829, -0.182427, 7.440422,
+ 2.540459, 0.088703, -0.213134, 7.420694, 2.537380, 0.104080, -0.245750, 7.394875, 2.533347,
+ 0.121050, -0.279941, 7.358515, 2.528069, 0.139697, -0.315591, 7.313001, 2.521237, 0.160036,
+ -0.351980, 7.246342, 2.512378, 0.182147, -0.388993, 7.163688, 2.500993, 0.205799, -0.425570,
+ 7.048339, 2.486450, 0.231091, -0.461093, 6.902586, 2.468174, 0.257405, -0.494668, 6.712721,
+ 2.444774, 0.284956, -0.525889, 6.491261, 2.415538, 0.313180, -0.553693, 6.232833, 2.380610,
+ 0.342327, -0.578724, 5.953834, 2.338525, 0.371689, -0.599706, 5.649698, 2.290256, 0.401919,
+ -0.617615, 5.347900, 2.235157, 0.432204, -0.631632, 5.036417, 2.173932, 0.463151, -0.643082,
+ 4.735976, 2.107298, 0.493388, -0.649970, 4.432044, 2.036121, 0.524128, -0.654188, 4.145472,
+ 1.961595, 0.553930, -0.654671, 3.866877, 1.883602, 0.583856, -0.653051, 3.607848, 1.804521,
+ 0.611762, -0.646994, 3.356237, 1.724047, 0.639117, -0.638860, 3.122531, 1.643016, 0.666279,
+ -0.629093, 2.913178, 1.563932, 0.692936, -0.617862, 2.722675, 1.484614, 0.716498, -0.603279,
+ 2.536926, 1.406734, 0.742273, -0.589878, 2.381054, 1.331469, 0.764031, -0.572744, 2.228312,
+ 1.256796, 0.786601, -0.555933, 2.095451, 1.185290, 0.807776, -0.537992, 1.972866, 1.115940,
+ 0.828400, -0.519596, 1.863394, 1.048371, 0.847412, -0.499847, 1.760630, 0.982934, 0.866850,
+ -0.479920, 1.670998, 0.919972, 0.886340, -0.459434, 1.587962, 0.858100, 0.906933, -0.437767,
+ 1.515505, 0.796714, 0.927490, -0.414068, 1.448243, 0.736162, 0.950217, -0.390910, 1.390505,
+ 0.677613, 0.971545, -0.366964, 1.337865, 0.620477, 0.992901, -0.342603, 1.291104, 0.565807,
+ 1.015460, -0.318596, 1.251138, 0.513086, 1.037859, -0.294242, 1.214291, 0.461573, 1.060535,
+ -0.269601, 1.182517, 0.411838, 1.086885, -0.245608, 1.155300, 0.363221, 1.111237, -0.220589,
+ 1.129715, 0.317174, 1.138718, -0.196008, 1.108103, 0.273213, 1.164223, -0.170408, 1.089640,
+ 0.231968, 1.187256, -0.144205, 1.074145, 0.192987, 1.207851, -0.116945, 1.061615, 0.156118,
+ 1.222217, -0.088852, 1.047599, 0.118674, 1.230315, -0.059381, 1.030869, 0.078993, 1.235052,
+ -0.029145, 1.014126, 0.038924, 1.241359, 0.000479, 1.000114, -0.000211, 0.000169, -0.000465,
+ 4.953966, 2.747437, 0.000504, -0.001384, 8.544530, 2.747430, 0.002015, -0.005537, 8.545147,
+ 2.747339, 0.004542, -0.012477, 8.557734, 2.747125, 0.008064, -0.022143, 8.530193, 2.747341,
+ 0.012543, -0.034411, 8.465151, 2.747411, 0.018178, -0.049792, 8.543328, 2.746874, 0.024810,
+ -0.067784, 8.547247, 2.746396, 0.032489, -0.088416, 8.537436, 2.745730, 0.041313, -0.111580,
+ 8.526655, 2.744596, 0.051332, -0.137462, 8.517438, 2.743082, 0.062603, -0.165860, 8.502803,
+ 2.740950, 0.075240, -0.196548, 8.481507, 2.738057, 0.089341, -0.229440, 8.454287, 2.734174,
+ 0.105021, -0.264395, 8.420289, 2.729086, 0.122399, -0.301020, 8.373503, 2.722420, 0.141526,
+ -0.338997, 8.309059, 2.713686, 0.162451, -0.377589, 8.221539, 2.702492, 0.185098, -0.416349,
+ 8.100116, 2.687893, 0.209406, -0.454284, 7.941704, 2.669386, 0.235098, -0.490450, 7.733318,
+ 2.645590, 0.262100, -0.524592, 7.486120, 2.615709, 0.290103, -0.555558, 7.193498, 2.579231,
+ 0.319135, -0.583516, 6.874796, 2.534957, 0.348286, -0.606714, 6.516118, 2.483017, 0.378840,
+ -0.627850, 6.163912, 2.424214, 0.409608, -0.644715, 5.801404, 2.357563, 0.440553, -0.657657,
+ 5.435955, 2.285835, 0.470599, -0.665621, 5.063481, 2.207940, 0.503172, -0.673767, 4.743532,
+ 2.126440, 0.533884, -0.676009, 4.413409, 2.040694, 0.563808, -0.674536, 4.092169, 1.953979,
+ 0.591849, -0.668913, 3.787057, 1.865897, 0.621474, -0.663159, 3.520578, 1.777762, 0.650500,
+ -0.655018, 3.275065, 1.689902, 0.678011, -0.643949, 3.043141, 1.603528, 0.703490, -0.630030,
+ 2.827104, 1.519484, 0.728250, -0.614910, 2.632620, 1.436677, 0.752165, -0.598649, 2.455570,
+ 1.355753, 0.775894, -0.581771, 2.295932, 1.278884, 0.797650, -0.563193, 2.152291, 1.202767,
+ 0.818505, -0.543750, 2.022099, 1.130338, 0.838596, -0.524017, 1.903562, 1.060263, 0.858396,
+ -0.504064, 1.797204, 0.993077, 0.877088, -0.483418, 1.701208, 0.928606, 0.896606, -0.462786,
+ 1.617736, 0.866039, 0.914342, -0.440943, 1.539227, 0.804293, 0.933550, -0.419129, 1.470383,
+ 0.745206, 0.955237, -0.396100, 1.409100, 0.685832, 0.976700, -0.371743, 1.354930, 0.627953,
+ 0.997681, -0.346882, 1.305249, 0.572127, 1.020784, -0.322391, 1.262603, 0.517941, 1.043840,
+ -0.297564, 1.225115, 0.466188, 1.067224, -0.272639, 1.190817, 0.415499, 1.092358, -0.247664,
+ 1.161265, 0.366782, 1.117573, -0.222260, 1.133935, 0.319377, 1.145730, -0.196933, 1.111750,
+ 0.275293, 1.170822, -0.170577, 1.091981, 0.233306, 1.194559, -0.143878, 1.075810, 0.193950,
+ 1.214819, -0.116347, 1.062438, 0.156724, 1.229830, -0.088233, 1.048092, 0.118984, 1.238185,
+ -0.059408, 1.031325, 0.079385, 1.243527, -0.030703, 1.014698, 0.039893, 1.249724, -0.001520,
+ 0.999819, 0.000760, 0.000164, -0.000489, 5.157359, 2.976300, 0.000505, -0.001502, 9.891415,
+ 2.976286, 0.002016, -0.006000, 9.857730, 2.976197, 0.004543, -0.013519, 9.870651, 2.975832,
+ 0.008064, -0.023985, 9.855780, 2.976170, 0.012611, -0.037471, 9.850209, 2.975941, 0.018162,
+ -0.053866, 9.827134, 2.974968, 0.024820, -0.073390, 9.849955, 2.975010, 0.032545, -0.095758,
+ 9.842021, 2.974073, 0.041418, -0.120834, 9.829989, 2.972700, 0.051511, -0.148861, 9.817421,
+ 2.970736, 0.062920, -0.179456, 9.797347, 2.968033, 0.075744, -0.212674, 9.771533, 2.964371,
+ 0.090131, -0.248193, 9.735924, 2.959437, 0.106187, -0.285748, 9.687707, 2.952881, 0.124035,
+ -0.325017, 9.622684, 2.944273, 0.143733, -0.365463, 9.531452, 2.933093, 0.165262, -0.406157,
+ 9.401732, 2.918484, 0.188622, -0.446833, 9.232451, 2.899529, 0.213693, -0.486209, 9.013432,
+ 2.875137, 0.239987, -0.522925, 8.725671, 2.844166, 0.267796, -0.557452, 8.400028, 2.805649,
+ 0.296547, -0.588266, 8.023041, 2.758720, 0.325838, -0.614837, 7.606773, 2.702676, 0.355479,
+ -0.636760, 7.160680, 2.638483, 0.386984, -0.657230, 6.736765, 2.566849, 0.418853, -0.673592,
+ 6.313742, 2.488091, 0.450302, -0.684966, 5.884479, 2.402458, 0.481149, -0.691591, 5.455771,
+ 2.311816, 0.512177, -0.695337, 5.055698, 2.217330, 0.543437, -0.696370, 4.681506, 2.121285,
+ 0.574309, -0.694186, 4.334716, 2.024160, 0.604787, -0.689158, 4.008524, 1.927738, 0.633483,
+ -0.680580, 3.703505, 1.830456, 0.660766, -0.669088, 3.418386, 1.734934, 0.688471, -0.656673,
+ 3.168101, 1.642316, 0.715729, -0.642820, 2.941735, 1.550744, 0.740435, -0.626155, 2.730570,
+ 1.463345, 0.764114, -0.608299, 2.537561, 1.378151, 0.787028, -0.589519, 2.364323, 1.297630,
+ 0.807985, -0.569257, 2.207970, 1.217830, 0.830663, -0.550055, 2.076646, 1.142746, 0.850416,
+ -0.528812, 1.948085, 1.070757, 0.869609, -0.507478, 1.834684, 1.001282, 0.888324, -0.486131,
+ 1.734879, 0.934987, 0.907482, -0.464910, 1.645974, 0.871203, 0.924829, -0.442742, 1.563550,
+ 0.809260, 0.942958, -0.420777, 1.491264, 0.750037, 0.961999, -0.398842, 1.428069, 0.691715,
+ 0.981043, -0.375967, 1.369668, 0.635669, 1.002371, -0.351469, 1.318588, 0.578689, 1.025343,
+ -0.326601, 1.273628, 0.524424, 1.048511, -0.301395, 1.234572, 0.471403, 1.072242, -0.275835,
+ 1.198354, 0.419950, 1.096758, -0.250200, 1.166392, 0.370733, 1.122781, -0.224474, 1.138991,
+ 0.322864, 1.150871, -0.198592, 1.114313, 0.277723, 1.177319, -0.171805, 1.093534, 0.234950,
+ 1.201765, -0.144291, 1.077462, 0.195376, 1.222629, -0.115949, 1.063288, 0.157315, 1.237334,
+ -0.087140, 1.048366, 0.118843, 1.246153, -0.058094, 1.031224, 0.079207, 1.252570, -0.029194,
+ 1.014695, 0.039376, 1.259060, -0.000418, 0.999881, 0.000307, 0.000159, -0.000515, 5.393984,
+ 3.241865, 0.000505, -0.001636, 11.548038, 3.241848, 0.002016, -0.006534, 11.506640, 3.241718,
+ 0.004537, -0.014706, 11.513460, 3.241196, 0.008068, -0.026134, 11.510533, 3.241693, 0.012573,
+ -0.040676, 11.428978, 3.241030, 0.018212, -0.058794, 11.510745, 3.240924, 0.024847, -0.079926,
+ 11.497339, 3.240201, 0.032603, -0.104160, 11.484607, 3.238994, 0.041543, -0.131552, 11.470801,
+ 3.237182, 0.051738, -0.162012, 11.453219, 3.234635, 0.063313, -0.195260, 11.427244, 3.231153,
+ 0.076381, -0.231205, 11.388534, 3.226361, 0.091096, -0.269678, 11.340406, 3.219943, 0.107600,
+ -0.310170, 11.270127, 3.211448, 0.126017, -0.352435, 11.178583, 3.200168, 0.146411, -0.395551,
+ 11.046559, 3.185328, 0.168663, -0.438627, 10.858624, 3.165972, 0.192730, -0.480660, 10.606379,
+ 3.140735, 0.218497, -0.520987, 10.288093, 3.108388, 0.245752, -0.558483, 9.907480, 3.067586,
+ 0.273993, -0.592090, 9.453246, 3.016931, 0.303495, -0.622416, 8.966138, 2.956444, 0.333717,
+ -0.648303, 8.443776, 2.885116, 0.363928, -0.668640, 7.894122, 2.805963, 0.396240, -0.687748,
+ 7.385728, 2.718338, 0.427161, -0.699903, 6.838511, 2.622346, 0.460175, -0.711210, 6.356371,
+ 2.522476, 0.492593, -0.717734, 5.878312, 2.417984, 0.524449, -0.719956, 5.423285, 2.310941,
+ 0.556010, -0.719127, 4.997909, 2.201885, 0.587032, -0.715077, 4.600426, 2.093330, 0.617030,
+ -0.707574, 4.235885, 1.986585, 0.644684, -0.695781, 3.881712, 1.881279, 0.674483, -0.685313,
+ 3.590960, 1.777918, 0.700290, -0.669619, 3.303138, 1.678004, 0.727892, -0.654728, 3.057771,
+ 1.581162, 0.751694, -0.635727, 2.826642, 1.487769, 0.776271, -0.617343, 2.622178, 1.399628,
+ 0.799502, -0.597683, 2.441265, 1.313195, 0.821768, -0.577090, 2.276954, 1.232316, 0.841960,
+ -0.555165, 2.125744, 1.153914, 0.861582, -0.532983, 1.991236, 1.079598, 0.881460, -0.510933,
+ 1.874027, 1.008883, 0.899952, -0.488321, 1.766812, 0.940802, 0.918954, -0.466405, 1.673436,
+ 0.875653, 0.936130, -0.443623, 1.586986, 0.813130, 0.954799, -0.421532, 1.513558, 0.752241,
+ 0.972435, -0.398897, 1.445787, 0.694711, 0.990147, -0.376302, 1.384382, 0.638770, 1.009189,
+ -0.353623, 1.331934, 0.583826, 1.029687, -0.330635, 1.284478, 0.530476, 1.052604, -0.305698,
+ 1.243632, 0.477187, 1.076524, -0.279917, 1.204997, 0.425349, 1.101701, -0.253951, 1.171750,
+ 0.375165, 1.127264, -0.227541, 1.142519, 0.326869, 1.156397, -0.201265, 1.116817, 0.280912,
+ 1.183020, -0.173943, 1.095289, 0.237447, 1.208448, -0.145860, 1.078296, 0.196694, 1.230417,
+ -0.116901, 1.064416, 0.158409, 1.248617, -0.087507, 1.050504, 0.119483, 1.257310, -0.057353,
+ 1.032796, 0.079092, 1.263076, -0.027785, 1.015128, 0.038883, 1.269870, 0.001331, 0.999935,
+ -0.000557, 0.000154, -0.000549, 5.705205, 3.554136, 0.000506, -0.001797, 13.703335, 3.554133,
+ 0.002014, -0.007156, 13.614074, 3.553937, 0.004544, -0.016145, 13.657344, 3.553096, 0.008070,
+ -0.028652, 13.627997, 3.553894, 0.012584, -0.044617, 13.606235, 3.554000, 0.018180, -0.064288,
+ 13.581339, 3.549637, 0.024887, -0.087627, 13.608851, 3.552006, 0.032690, -0.114134, 13.599099,
+ 3.550341, 0.041705, -0.144154, 13.579829, 3.547982, 0.052035, -0.177400, 13.552845, 3.544641,
+ 0.063810, -0.213813, 13.515619, 3.539941, 0.077171, -0.252978, 13.460460, 3.533696, 0.092329,
+ -0.294852, 13.393559, 3.524977, 0.109390, -0.338688, 13.292376, 3.513655, 0.128455, -0.384018,
+ 13.147332, 3.498484, 0.149661, -0.429960, 12.945774, 3.478323, 0.172694, -0.475024, 12.658979,
+ 3.451862, 0.197650, -0.518614, 12.289564, 3.417602, 0.224156, -0.559298, 11.828307, 3.372913,
+ 0.252008, -0.596110, 11.285162, 3.317454, 0.281165, -0.629292, 10.684922, 3.251171, 0.311434,
+ -0.658379, 10.052939, 3.172222, 0.342741, -0.683455, 9.405296, 3.082825, 0.373543, -0.701674,
+ 8.716078, 2.983976, 0.407008, -0.719664, 8.108425, 2.876244, 0.438623, -0.729882, 7.461252,
+ 2.763279, 0.471872, -0.738696, 6.880182, 2.645590, 0.504700, -0.743136, 6.324308, 2.524680,
+ 0.537118, -0.743676, 5.808302, 2.402723, 0.569412, -0.741181, 5.332306, 2.281437, 0.598202,
+ -0.732348, 4.857402, 2.161401, 0.629640, -0.724832, 4.465554, 2.043872, 0.659239, -0.713435,
+ 4.093661, 1.930129, 0.686547, -0.698539, 3.752593, 1.817654, 0.715529, -0.684471, 3.457593,
+ 1.712567, 0.739456, -0.664983, 3.171220, 1.610687, 0.764892, -0.646322, 2.929674, 1.512031,
+ 0.789301, -0.626393, 2.710719, 1.419033, 0.809881, -0.603498, 2.506139, 1.330115, 0.833385,
+ -0.582934, 2.336089, 1.245859, 0.854254, -0.560419, 2.178470, 1.165042, 0.873964, -0.537294,
+ 2.040087, 1.086633, 0.893433, -0.514264, 1.911969, 1.015028, 0.911756, -0.490657, 1.799840,
+ 0.944938, 0.930894, -0.467601, 1.703188, 0.878743, 0.948078, -0.444043, 1.612092, 0.815356,
+ 0.966162, -0.421155, 1.534444, 0.753883, 0.984166, -0.398238, 1.462397, 0.695534, 1.002184,
+ -0.375278, 1.400793, 0.638806, 1.019669, -0.352159, 1.344172, 0.584549, 1.039571, -0.329651,
+ 1.295227, 0.531660, 1.059989, -0.306804, 1.251281, 0.480529, 1.081116, -0.283345, 1.211504,
+ 0.430071, 1.105742, -0.258568, 1.176400, 0.380277, 1.133080, -0.232146, 1.144519, 0.331076,
+ 1.161888, -0.205244, 1.118059, 0.284040, 1.192408, -0.177932, 1.097561, 0.239958, 1.221043,
+ -0.149532, 1.082021, 0.198751, 1.244141, -0.120046, 1.067634, 0.160114, 1.259465, -0.089542,
+ 1.051626, 0.121101, 1.268124, -0.058593, 1.033296, 0.079898, 1.274330, -0.028011, 1.015382,
+ 0.039038, 1.281590, 0.002330, 1.000087, -0.001259, 0.000149, -0.000587, 6.059834, 3.927143,
+ 0.000507, -0.001992, 16.560400, 3.927149, 0.002014, -0.007910, 16.406326, 3.926821, 0.004549,
+ -0.017856, 16.545532, 3.927027, 0.008064, -0.031632, 16.375853, 3.925487, 0.012450, -0.048749,
+ 15.928564, 3.928272, 0.018030, -0.070371, 16.072989, 3.917862, 0.024964, -0.096897, 16.458925,
+ 3.924489, 0.032807, -0.126073, 16.377851, 3.921896, 0.041917, -0.159205, 16.351561, 3.918860,
+ 0.052416, -0.195762, 16.307037, 3.914339, 0.064464, -0.235784, 16.255514, 3.907954, 0.078225,
+ -0.278812, 16.176226, 3.899254, 0.093900, -0.324457, 16.066530, 3.887455, 0.111657, -0.372174,
+ 15.913818, 3.871777, 0.131478, -0.420530, 15.669197, 3.850776, 0.153574, -0.469330, 15.355453,
+ 3.822348, 0.177505, -0.516029, 14.908978, 3.785168, 0.203383, -0.560585, 14.352687, 3.736602,
+ 0.230569, -0.600607, 13.666022, 3.675046, 0.259188, -0.636296, 12.900244, 3.599811, 0.289272,
+ -0.668312, 12.111226, 3.510550, 0.320490, -0.695986, 11.292102, 3.408535, 0.353031, -0.719848,
+ 10.493485, 3.295667, 0.385228, -0.737073, 9.661955, 3.171998, 0.419219, -0.752419, 8.909942,
+ 3.042428, 0.452096, -0.761179, 8.155107, 2.907108, 0.484909, -0.766166, 7.450609, 2.769858,
+ 0.518306, -0.768596, 6.811866, 2.631935, 0.550067, -0.765683, 6.205275, 2.492870, 0.582562,
+ -0.761197, 5.663215, 2.358645, 0.614450, -0.753834, 5.165358, 2.227377, 0.644563, -0.742860,
+ 4.712554, 2.097547, 0.673658, -0.729294, 4.306101, 1.974920, 0.702857, -0.714839, 3.943352,
+ 1.857613, 0.729350, -0.696774, 3.609432, 1.743601, 0.754958, -0.677394, 3.308389, 1.636607,
+ 0.779575, -0.657018, 3.043803, 1.533841, 0.800491, -0.633342, 2.793592, 1.437092, 0.825030,
+ -0.612471, 2.590307, 1.344272, 0.847535, -0.589882, 2.406477, 1.256436, 0.865979, -0.564850,
+ 2.231999, 1.173938, 0.886254, -0.541357, 2.083556, 1.094722, 0.905566, -0.517353, 1.950928,
+ 1.021107, 0.924607, -0.493320, 1.835979, 0.948941, 0.943365, -0.469366, 1.731417, 0.881060,
+ 0.960405, -0.444745, 1.635838, 0.816479, 0.977893, -0.420493, 1.552981, 0.754604, 0.996573,
+ -0.397150, 1.481595, 0.694917, 1.014000, -0.373483, 1.414070, 0.638445, 1.031807, -0.349985,
+ 1.356031, 0.584035, 1.051877, -0.327062, 1.305041, 0.530010, 1.071701, -0.304134, 1.258836,
+ 0.479439, 1.093109, -0.280962, 1.217297, 0.429763, 1.116681, -0.258121, 1.182063, 0.381050,
+ 1.143886, -0.235365, 1.150039, 0.333395, 1.175163, -0.211621, 1.125074, 0.287477, 1.203675,
+ -0.184061, 1.102339, 0.243301, 1.230477, -0.154815, 1.083927, 0.201826, 1.253134, -0.124513,
+ 1.067989, 0.162271, 1.270092, -0.093383, 1.052032, 0.122855, 1.279576, -0.061770, 1.033685,
+ 0.081639, 1.286472, -0.030317, 1.015583, 0.040411, 1.294476, 0.000964, 1.000206, -0.000454,
+ 0.000144, -0.000630, 6.467978, 4.381146, 0.000504, -0.002208, 20.193617, 4.381151, 0.002017,
+ -0.008834, 20.206446, 4.380687, 0.004536, -0.019864, 20.183254, 4.380550, 0.008174, -0.035759,
+ 20.564249, 4.381247, 0.012608, -0.055034, 20.111612, 4.382390, 0.018198, -0.079119, 20.106096,
+ 4.379815, 0.025057, -0.108067, 20.215635, 4.376874, 0.032962, -0.140630, 20.153549, 4.374143,
+ 0.042199, -0.177350, 20.084061, 4.369558, 0.052928, -0.218094, 20.026609, 4.363287, 0.065327,
+ -0.262407, 19.940054, 4.354386, 0.079568, -0.309833, 19.806814, 4.342127, 0.095961, -0.360074,
+ 19.641878, 4.325533, 0.114516, -0.411747, 19.370914, 4.302950, 0.135349, -0.463726, 18.983900,
+ 4.271991, 0.158293, -0.514211, 18.433926, 4.230856, 0.183348, -0.562511, 17.733471, 4.176250,
+ 0.209959, -0.606310, 16.864214, 4.105895, 0.238736, -0.646958, 15.935207, 4.020104, 0.268543,
+ -0.681574, 14.890014, 3.916094, 0.299996, -0.712458, 13.846786, 3.798239, 0.331930, -0.737130,
+ 12.758296, 3.664191, 0.365222, -0.758156, 11.732940, 3.521867, 0.399061, -0.774364, 10.741743,
+ 3.369831, 0.433480, -0.786412, 9.812527, 3.212079, 0.467002, -0.792373, 8.915130, 3.053715,
+ 0.500754, -0.795410, 8.094276, 2.894526, 0.534023, -0.794617, 7.342067, 2.735959, 0.566988,
+ -0.790689, 6.664186, 2.581160, 0.599960, -0.784433, 6.052983, 2.432318, 0.630599, -0.773378,
+ 5.486277, 2.287630, 0.660807, -0.760334, 4.982516, 2.150183, 0.690103, -0.745430, 4.531104,
+ 2.017266, 0.717315, -0.727511, 4.120734, 1.891699, 0.743819, -0.708376, 3.759599, 1.772680,
+ 0.770147, -0.688632, 3.441912, 1.660620, 0.793510, -0.665931, 3.152600, 1.553166, 0.816535,
+ -0.643045, 2.898883, 1.452080, 0.839163, -0.619917, 2.674488, 1.355544, 0.859066, -0.594923,
+ 2.469262, 1.267232, 0.879489, -0.570343, 2.292209, 1.181702, 0.898525, -0.544975, 2.131086,
+ 1.102089, 0.918359, -0.520585, 1.994526, 1.024744, 0.937502, -0.496044, 1.873079, 0.951712,
+ 0.955573, -0.471010, 1.761232, 0.883374, 0.972957, -0.445712, 1.661604, 0.818008, 0.991248,
+ -0.421201, 1.577169, 0.754446, 1.008997, -0.396444, 1.499653, 0.694518, 1.028127, -0.372362,
+ 1.432030, 0.637259, 1.045710, -0.347895, 1.369870, 0.581515, 1.065977, -0.324409, 1.317341,
+ 0.527713, 1.087469, -0.301181, 1.270447, 0.476281, 1.109943, -0.277866, 1.228398, 0.426403,
+ 1.134440, -0.254849, 1.190986, 0.377822, 1.160986, -0.231754, 1.157681, 0.330740, 1.188458,
+ -0.207973, 1.128665, 0.286014, 1.214405, -0.183424, 1.103711, 0.243600, 1.239504, -0.157972,
+ 1.084253, 0.203686, 1.262961, -0.130607, 1.068258, 0.165214, 1.280340, -0.099652, 1.051919,
+ 0.126067, 1.292129, -0.067363, 1.034016, 0.084791, 1.299876, -0.035026, 1.015775, 0.042786,
+ 1.308328, -0.002944, 0.999963, 0.001385, 0.000138, -0.000681, 6.943771, 4.946556, 0.000503,
+ -0.002486, 25.346689, 4.946532, 0.002016, -0.009973, 25.494320, 4.946311, 0.004539, -0.022440,
+ 25.484949, 4.945823, 0.008069, -0.039836, 25.420902, 4.945311, 0.012628, -0.062172, 25.394403,
+ 4.945041, 0.018294, -0.089609, 25.440279, 4.943295, 0.025079, -0.121584, 25.399988, 4.939368,
+ 0.033142, -0.158595, 25.356537, 4.936200, 0.042596, -0.199971, 25.295067, 4.929842, 0.053628,
+ -0.245624, 25.196465, 4.920586, 0.066496, -0.295240, 25.055311, 4.907700, 0.081434, -0.348006,
+ 24.846170, 4.889647, 0.098640, -0.403167, 24.527803, 4.864680, 0.118231, -0.459106, 24.051735,
+ 4.830574, 0.140139, -0.513907, 23.352467, 4.783530, 0.164198, -0.565953, 22.418245, 4.720530,
+ 0.190502, -0.614858, 21.324049, 4.638075, 0.218530, -0.658304, 20.038671, 4.535464, 0.248094,
+ -0.696133, 18.639786, 4.411646, 0.279435, -0.729388, 17.234526, 4.268872, 0.312002, -0.757534,
+ 15.830426, 4.109603, 0.346173, -0.781866, 14.495901, 3.938782, 0.379435, -0.797579, 13.136444,
+ 3.756138, 0.414945, -0.812334, 11.946491, 3.571258, 0.449991, -0.821119, 10.811908, 3.384217,
+ 0.484636, -0.825066, 9.763482, 3.198076, 0.518675, -0.824728, 8.796811, 3.015808, 0.552559,
+ -0.821710, 7.932528, 2.836886, 0.587272, -0.817478, 7.185156, 2.664995, 0.616960, -0.804441,
+ 6.445302, 2.502223, 0.648054, -0.792063, 5.818812, 2.345851, 0.678575, -0.777793, 5.264731,
+ 2.197150, 0.707287, -0.760476, 4.766033, 2.056042, 0.735851, -0.742541, 4.335871, 1.922805,
+ 0.760594, -0.720503, 3.928021, 1.798585, 0.784534, -0.697719, 3.579153, 1.680605, 0.811029,
+ -0.677036, 3.285307, 1.568942, 0.831809, -0.651479, 3.001423, 1.465496, 0.854364, -0.627376,
+ 2.760672, 1.367849, 0.872639, -0.600496, 2.540697, 1.275644, 0.894296, -0.576297, 2.355273,
+ 1.188638, 0.913123, -0.550377, 2.188563, 1.105652, 0.932025, -0.524640, 2.040739, 1.028614,
+ 0.949876, -0.498402, 1.910315, 0.954421, 0.968933, -0.473220, 1.795750, 0.884061, 0.985366,
+ -0.447086, 1.690336, 0.817765, 1.004940, -0.422394, 1.599626, 0.753295, 1.022217, -0.396726,
+ 1.519055, 0.693380, 1.041490, -0.371854, 1.448745, 0.635747, 1.059920, -0.346769, 1.384292,
+ 0.579508, 1.080408, -0.322343, 1.328798, 0.525045, 1.101632, -0.297979, 1.279898, 0.473773,
+ 1.124812, -0.274059, 1.234005, 0.422949, 1.148503, -0.249954, 1.195373, 0.374609, 1.174554,
+ -0.225988, 1.160362, 0.327350, 1.202931, -0.201932, 1.131307, 0.283494, 1.229335, -0.176886,
+ 1.105885, 0.241092, 1.254254, -0.151225, 1.085802, 0.201514, 1.275743, -0.124282, 1.068524,
+ 0.162866, 1.292929, -0.097122, 1.051493, 0.124991, 1.305805, -0.068939, 1.033890, 0.085521,
+ 1.314991, -0.040082, 1.015927, 0.045247, 1.324033, -0.009923, 0.999893, 0.004738, 0.000131,
+ -0.000745, 7.562414, 5.671075, 0.000473, -0.002681, 27.216688, 5.670949, 0.002021, -0.011462,
+ 32.962402, 5.670177, 0.004540, -0.025728, 33.183949, 5.670197, 0.008087, -0.045746, 33.185688,
+ 5.667313, 0.012673, -0.071427, 33.170441, 5.668396, 0.018358, -0.102673, 33.145138, 5.665252,
+ 0.025299, -0.139780, 33.303326, 5.653404, 0.033469, -0.181718, 33.107243, 5.652829, 0.043139,
+ -0.228698, 32.859524, 5.645676, 0.054622, -0.280648, 32.694893, 5.631547, 0.068115, -0.336524,
+ 32.422569, 5.611561, 0.083957, -0.395671, 32.035511, 5.583449, 0.102259, -0.456164, 31.415047,
+ 5.543651, 0.123021, -0.515765, 30.470440, 5.488278, 0.146127, -0.572309, 29.186451, 5.413118,
+ 0.171749, -0.625710, 27.653852, 5.312369, 0.199549, -0.673853, 25.902435, 5.185774, 0.229188,
+ -0.715905, 23.978609, 5.030582, 0.260421, -0.751533, 21.999035, 4.853484, 0.293421, -0.782309,
+ 20.087366, 4.656137, 0.327077, -0.806332, 18.186535, 4.443975, 0.361892, -0.825818, 16.418409,
+ 4.223844, 0.397146, -0.840019, 14.774344, 3.998959, 0.434169, -0.852434, 13.321097, 3.775443,
+ 0.469288, -0.856632, 11.929448, 3.552818, 0.504319, -0.857130, 10.675201, 3.338825, 0.540067,
+ -0.855903, 9.591900, 3.130547, 0.575404, -0.851565, 8.607655, 2.932930, 0.606782, -0.839818,
+ 7.690560, 2.743876, 0.638660, -0.827508, 6.900781, 2.565115, 0.670577, -0.814154, 6.216821,
+ 2.395215, 0.696718, -0.793162, 5.551886, 2.238233, 0.725990, -0.775291, 5.015406, 2.090264,
+ 0.754140, -0.755758, 4.546843, 1.950834, 0.775992, -0.729824, 4.094254, 1.820582, 0.802990,
+ -0.708909, 3.732984, 1.699191, 0.828291, -0.686483, 3.413194, 1.583805, 0.847406, -0.659162,
+ 3.103861, 1.478093, 0.864951, -0.631051, 2.832976, 1.378496, 0.887154, -0.606590, 2.616645,
+ 1.282127, 0.906337, -0.580124, 2.413988, 1.194643, 0.927184, -0.554835, 2.244380, 1.110354,
+ 0.943810, -0.527583, 2.081964, 1.031996, 0.963630, -0.502243, 1.948979, 0.956718, 0.979691,
+ -0.475006, 1.822701, 0.886957, 0.997690, -0.448815, 1.715714, 0.819006, 1.016460, -0.423044,
+ 1.621868, 0.754892, 1.035485, -0.397637, 1.539537, 0.693707, 1.053165, -0.371775, 1.462285,
+ 0.634867, 1.072394, -0.346372, 1.396193, 0.578574, 1.093397, -0.321291, 1.338344, 0.524341,
+ 1.115194, -0.296102, 1.287594, 0.472059, 1.137943, -0.271023, 1.240495, 0.421674, 1.164163,
+ -0.246367, 1.201224, 0.371963, 1.191457, -0.221414, 1.164472, 0.325040, 1.220253, -0.196228,
+ 1.134325, 0.280343, 1.245456, -0.169991, 1.108214, 0.238098, 1.270647, -0.143314, 1.087277,
+ 0.197886, 1.292124, -0.115881, 1.069397, 0.159560, 1.309091, -0.087816, 1.051426, 0.120547,
+ 1.321130, -0.059301, 1.032904, 0.080834, 1.332484, -0.030912, 1.015767, 0.040933, 1.342834,
+ -0.002172, 0.999591, 0.001185, 0.000125, -0.000830, 8.392562, 6.634228, 0.000443, -0.002936,
+ 29.687805, 6.634032, 0.002016, -0.013374, 45.025234, 6.633008, 0.004540, -0.030089, 45.020294,
+ 6.633056, 0.008092, -0.053499, 45.066029, 6.626466, 0.012710, -0.083610, 44.810101, 6.630330,
+ 0.018485, -0.120260, 45.216747, 6.614516, 0.025134, -0.161031, 44.674168, 6.600349, 0.033897,
+ -0.212161, 44.819195, 6.610186, 0.043978, -0.266661, 44.450245, 6.593605, 0.056094, -0.326582,
+ 44.134544, 6.570142, 0.070528, -0.390342, 43.591648, 6.536712, 0.087498, -0.456162, 42.708160,
+ 6.488329, 0.107138, -0.521609, 41.365093, 6.420198, 0.129461, -0.584225, 39.525822, 6.323702,
+ 0.154245, -0.641931, 37.186111, 6.193606, 0.181228, -0.692829, 34.478470, 6.026897, 0.210711,
+ -0.738440, 31.680904, 5.825769, 0.242181, -0.777397, 28.828054, 5.595428, 0.275337, -0.809980,
+ 26.042755, 5.342321, 0.309698, -0.835990, 23.376804, 5.073076, 0.345702, -0.858077, 20.965754,
+ 4.794572, 0.382135, -0.874122, 18.710079, 4.516676, 0.419871, -0.887133, 16.713011, 4.241767,
+ 0.455609, -0.891199, 14.819674, 3.972124, 0.492617, -0.894082, 13.187921, 3.717271, 0.528186,
+ -0.891270, 11.708584, 3.471719, 0.563462, -0.885719, 10.422834, 3.237760, 0.596013, -0.874241,
+ 9.237741, 3.019060, 0.629455, -0.862814, 8.248549, 2.813572, 0.661110, -0.848126, 7.358398,
+ 2.621046, 0.690314, -0.829798, 6.569392, 2.441627, 0.720589, -0.812314, 5.905934, 2.274629,
+ 0.745631, -0.788704, 5.276800, 2.119423, 0.771488, -0.766133, 4.752773, 1.974380, 0.798704,
+ -0.744726, 4.306095, 1.839482, 0.820172, -0.718062, 3.889792, 1.713244, 0.844368, -0.693972,
+ 3.545456, 1.594809, 0.863128, -0.665748, 3.212762, 1.487512, 0.880094, -0.637003, 2.926572,
+ 1.386724, 0.904252, -0.613728, 2.704260, 1.288131, 0.920506, -0.585217, 2.483164, 1.199845,
+ 0.940919, -0.559603, 2.300348, 1.114958, 0.957044, -0.531597, 2.130516, 1.034754, 0.972648,
+ -0.503583, 1.979313, 0.960912, 0.994318, -0.478813, 1.859664, 0.889786, 1.008754, -0.450943,
+ 1.742705, 0.820833, 1.028667, -0.425516, 1.645220, 0.756332, 1.046145, -0.398977, 1.557184,
+ 0.693921, 1.067212, -0.373657, 1.480814, 0.635955, 1.084111, -0.346657, 1.408762, 0.578832,
+ 1.106749, -0.321392, 1.350468, 0.523561, 1.128440, -0.295773, 1.294865, 0.471146, 1.151073,
+ -0.270028, 1.246118, 0.420298, 1.178601, -0.244816, 1.204226, 0.370575, 1.206845, -0.219027,
+ 1.166896, 0.323716, 1.235963, -0.192622, 1.135756, 0.278058, 1.263030, -0.165331, 1.109240,
+ 0.235743, 1.288937, -0.137489, 1.088379, 0.195390, 1.310681, -0.108685, 1.068987, 0.156439,
+ 1.334352, -0.079710, 1.054273, 0.117096, 1.344847, -0.049947, 1.034598, 0.076554, 1.354943,
+ -0.020272, 1.016079, 0.035585, 1.365515, 0.009170, 0.999969, -0.004771, 0.000117, -0.000935,
+ 9.424866, 7.979243, 0.000410, -0.003275, 33.013195, 7.979422, 0.002009, -0.016024, 64.370331,
+ 7.977156, 0.004541, -0.036176, 64.655952, 7.976128, 0.008109, -0.064384, 64.864494, 7.964988,
+ 0.012694, -0.099984, 64.487198, 7.971348, 0.018554, -0.143991, 64.637970, 7.923116, 0.025303,
+ -0.192040, 61.930538, 7.953975, 0.035297, -0.259442, 66.274422, 7.921861, 0.045226, -0.318370,
+ 63.334690, 7.909609, 0.058370, -0.388821, 62.686401, 7.864696, 0.074083, -0.461667, 61.332054,
+ 7.801843, 0.092537, -0.533744, 59.125607, 7.708949, 0.113781, -0.601905, 55.997845, 7.575799,
+ 0.137786, -0.664409, 52.177567, 7.393524, 0.164770, -0.721193, 48.019485, 7.161756, 0.193894,
+ -0.768842, 43.460278, 6.882018, 0.225586, -0.810332, 39.086590, 6.564607, 0.259311, -0.845096,
+ 34.896049, 6.221983, 0.294517, -0.872849, 30.952213, 5.865831, 0.331163, -0.895159, 27.375792,
+ 5.507064, 0.368964, -0.912860, 24.213310, 5.149763, 0.407255, -0.925338, 21.364958, 4.806172,
+ 0.444704, -0.930956, 18.791691, 4.472272, 0.482041, -0.932576, 16.521160, 4.160864, 0.519572,
+ -0.931547, 14.589918, 3.865206, 0.556236, -0.926554, 12.887797, 3.590445, 0.590431, -0.915839,
+ 11.352402, 3.332747, 0.622723, -0.901266, 10.002660, 3.093264, 0.657029, -0.888747, 8.905210,
+ 2.873842, 0.686164, -0.868666, 7.876704, 2.666740, 0.719168, -0.853152, 7.051816, 2.479017,
+ 0.742294, -0.826169, 6.226034, 2.306498, 0.770320, -0.804936, 5.590831, 2.141328, 0.792337,
+ -0.777772, 4.984083, 1.994663, 0.819050, -0.755478, 4.507655, 1.853950, 0.837684, -0.726072,
+ 4.049884, 1.725590, 0.861324, -0.701424, 3.678201, 1.606303, 0.880741, -0.673615, 3.337163,
+ 1.495452, 0.903335, -0.648506, 3.055720, 1.391162, 0.920311, -0.619640, 2.792068, 1.294734,
+ 0.935769, -0.590245, 2.554566, 1.204518, 0.956592, -0.564944, 2.366468, 1.118630, 0.972424,
+ -0.536842, 2.187863, 1.038323, 0.986269, -0.508020, 2.023480, 0.963803, 1.006122, -0.482411,
+ 1.895137, 0.890986, 1.022504, -0.455110, 1.775886, 0.820936, 1.037905, -0.427450, 1.665951,
+ 0.758556, 1.059281, -0.402198, 1.577363, 0.696126, 1.076613, -0.375156, 1.493391, 0.636676,
+ 1.097828, -0.349577, 1.421129, 0.579947, 1.116671, -0.322955, 1.355205, 0.525140, 1.140514,
+ -0.297406, 1.299979, 0.471460, 1.166473, -0.271786, 1.249847, 0.420473, 1.192591, -0.245461,
+ 1.204625, 0.371118, 1.223349, -0.219412, 1.166686, 0.322600, 1.254833, -0.192660, 1.134121,
+ 0.277572, 1.285808, -0.165167, 1.108617, 0.234417, 1.322015, -0.137236, 1.093841, 0.194640,
+ 1.342172, -0.106871, 1.074616, 0.155001, 1.357238, -0.075759, 1.053550, 0.114648, 1.367725,
+ -0.044279, 1.033851, 0.073254, 1.379461, -0.013001, 1.015713, 0.031895, 1.391625, 0.018075,
+ 1.000203, -0.009397, 0.000109, -0.001093, 10.986820, 9.992467, 0.000378, -0.003779, 37.989063,
+ 9.992861, 0.002028, -0.020252, 101.850441, 9.988345, 0.004557, -0.045429, 101.106750, 9.983879,
+ 0.008115, -0.080453, 100.646606, 9.953411, 0.012864, -0.125836, 101.366592, 9.943727, 0.018734,
+ -0.179350, 100.786118, 9.908408, 0.026314, -0.243680, 99.779343, 9.821631, 0.035500, -0.313552,
+ 98.608231, 9.782450, 0.047562, -0.394644, 97.689568, 9.845875, 0.062065, -0.476697, 95.177795,
+ 9.755218, 0.079552, -0.557933, 91.095581, 9.615121, 0.099905, -0.632818, 85.110382, 9.408299,
+ 0.123231, -0.699926, 77.948921, 9.120996, 0.149980, -0.760671, 70.491119, 8.764173, 0.179550,
+ -0.812251, 62.821407, 8.341752, 0.211839, -0.855909, 55.512890, 7.876337, 0.246434, -0.892023,
+ 48.744549, 7.386268, 0.282317, -0.919200, 42.462059, 6.886009, 0.319580, -0.940333, 36.901031,
+ 6.400318, 0.360135, -0.962176, 32.353752, 5.937503, 0.397805, -0.969755, 27.996445, 5.489783,
+ 0.437077, -0.976494, 24.359192, 5.072855, 0.474388, -0.975265, 21.124300, 4.684682, 0.513695,
+ -0.975335, 18.476677, 4.326597, 0.551542, -0.970264, 16.167391, 3.999049, 0.587525, -0.960365,
+ 14.143442, 3.696317, 0.621251, -0.945944, 12.374341, 3.414176, 0.654738, -0.930709, 10.877112,
+ 3.160455, 0.685794, -0.911702, 9.580887, 2.921461, 0.717135, -0.892948, 8.481939, 2.707478,
+ 0.740798, -0.865086, 7.435941, 2.510382, 0.770920, -0.845137, 6.650625, 2.329648, 0.792303,
+ -0.815956, 5.879976, 2.163206, 0.818363, -0.792225, 5.274404, 2.008042, 0.837362, -0.762396,
+ 4.700960, 1.867576, 0.862266, -0.738465, 4.254798, 1.735819, 0.880069, -0.708890, 3.828697,
+ 1.614690, 0.896021, -0.678588, 3.451655, 1.503477, 0.920156, -0.654832, 3.168722, 1.395800,
+ 0.934948, -0.624740, 2.879533, 1.299955, 0.949686, -0.595203, 2.628258, 1.208597, 0.970989,
+ -0.570041, 2.433689, 1.122310, 0.985606, -0.541116, 2.241461, 1.042168, 1.000819, -0.512835,
+ 2.075567, 0.966543, 1.012209, -0.483024, 1.919932, 0.895758, 1.035320, -0.459125, 1.807884,
+ 0.825668, 1.052077, -0.432333, 1.695689, 0.760812, 1.070459, -0.406131, 1.595491, 0.699897,
+ 1.088704, -0.379721, 1.508512, 0.640575, 1.103817, -0.352104, 1.428159, 0.583765, 1.131711,
+ -0.328122, 1.366565, 0.528240, 1.156448, -0.302568, 1.306843, 0.473988, 1.181821, -0.276487,
+ 1.252861, 0.422189, 1.211347, -0.250540, 1.205265, 0.372005, 1.243636, -0.224264, 1.165943,
+ 0.324184, 1.283038, -0.198289, 1.137772, 0.278419, 1.316722, -0.170179, 1.115057, 0.235425,
+ 1.342715, -0.140095, 1.092994, 0.195084, 1.363288, -0.108794, 1.071875, 0.155439, 1.380656,
+ -0.076774, 1.052475, 0.114636, 1.394826, -0.044509, 1.032525, 0.072890, 1.408830, -0.011968,
+ 1.015459, 0.031101, 1.422370, 0.020555, 0.999808, -0.011002, 0.000100, -0.001334, 13.377127,
+ 13.342275, 0.000342, -0.004563, 45.758434, 13.342710, 0.002026, -0.027004, 179.672058,
+ 13.331846, 0.004559, -0.060563, 179.294235, 13.314877, 0.008232, -0.108154, 181.242035,
+ 13.222856, 0.013031, -0.167590, 179.684509, 13.153860, 0.019526, -0.242041, 181.004608,
+ 12.986094, 0.026364, -0.309289, 159.606293, 13.247752, 0.037670, -0.409755, 179.468521,
+ 12.368877, 0.051804, -0.512051, 167.955582, 12.981333, 0.068214, -0.601994, 156.278793,
+ 12.704532, 0.088295, -0.686849, 143.096878, 12.316531, 0.111478, -0.758670, 127.423111,
+ 11.793048, 0.138336, -0.821348, 111.763031, 11.157992, 0.168447, -0.873616, 96.887924,
+ 10.447472, 0.201411, -0.916322, 83.225327, 9.696606, 0.237443, -0.953090, 71.403137, 8.949244,
+ 0.274234, -0.977751, 60.739277, 8.225874, 0.314566, -1.003135, 52.115578, 7.547433, 0.353932,
+ -1.016312, 44.341869, 6.910326, 0.393858, -1.024848, 37.827263, 6.324401, 0.433805, -1.028950,
+ 32.380932, 5.790555, 0.475812, -1.034084, 27.955982, 5.312826, 0.513254, -1.026743, 23.977417,
+ 4.866118, 0.549965, -1.016740, 20.628025, 4.468437, 0.590300, -1.012030, 18.036856, 4.105483,
+ 0.626420, -0.998919, 15.669224, 3.780593, 0.658897, -0.979874, 13.603898, 3.482054, 0.687252,
+ -0.955238, 11.788331, 3.211213, 0.718941, -0.935663, 10.355552, 2.962083, 0.749877, -0.915206,
+ 9.131123, 2.741382, 0.772094, -0.884837, 7.973935, 2.536501, 0.799495, -0.861214, 7.086230,
+ 2.347282, 0.820136, -0.830976, 6.240769, 2.179332, 0.846715, -0.807408, 5.604792, 2.018005,
+ 0.865176, -0.776657, 4.975034, 1.877021, 0.881100, -0.744657, 4.442767, 1.743528, 0.907637,
+ -0.722088, 4.035177, 1.621563, 0.922239, -0.690432, 3.633160, 1.506158, 0.936558, -0.659650,
+ 3.281798, 1.403606, 0.950047, -0.629105, 2.974179, 1.304276, 0.961959, -0.598277, 2.704483,
+ 1.213888, 0.987410, -0.576085, 2.510453, 1.125569, 0.999996, -0.546494, 2.304016, 1.045567,
+ 1.014127, -0.518186, 2.127867, 0.970718, 1.036275, -0.494009, 1.985804, 0.897557, 1.049695,
+ -0.465659, 1.845074, 0.830584, 1.064617, -0.438159, 1.725130, 0.766083, 1.077131, -0.409813,
+ 1.613818, 0.705101, 1.101054, -0.385632, 1.528694, 0.644828, 1.122361, -0.360045, 1.447086,
+ 0.587878, 1.147359, -0.335186, 1.377588, 0.532130, 1.169881, -0.309040, 1.313673, 0.478843,
+ 1.200554, -0.284590, 1.257256, 0.426855, 1.232047, -0.259332, 1.208431, 0.376125, 1.275402,
+ -0.235215, 1.174692, 0.326614, 1.306595, -0.207508, 1.141042, 0.281524, 1.334304, -0.178290,
+ 1.111778, 0.238694, 1.364678, -0.148530, 1.090976, 0.198549, 1.387168, -0.117114, 1.069308,
+ 0.158529, 1.408657, -0.084977, 1.050625, 0.118042, 1.426214, -0.052052, 1.031444, 0.076541,
+ 1.444257, -0.018653, 1.014298, 0.034061, 1.460618, 0.015206, 0.999413, -0.008132, 0.000100,
+ -0.002003, 20.052612, 20.032721, 0.000297, -0.005947, 59.540512, 20.033842, 0.002022,
+ -0.040439, 404.848511, 20.032743, 0.004588, -0.090999, 403.741241, 19.910591, 0.008769,
+ -0.169802, 441.471558, 19.572552, 0.013708, -0.253629, 411.667816, 19.145721, 0.020331,
+ -0.349396, 371.322571, 18.591049, 0.030259, -0.468121, 385.816498, 18.331083, 0.045190,
+ -0.611444, 391.924133, 15.807686, 0.058476, -0.676875, 319.638641, 16.947781, 0.079894,
+ -0.781421, 278.804260, 17.512903, 0.103871, -0.855116, 235.999786, 16.290295, 0.131756,
+ -0.915747, 197.168076, 14.956566, 0.163487, -0.966333, 163.452347, 13.608010, 0.198693,
+ -1.008386, 135.632706, 12.299661, 0.236157, -1.039862, 111.919281, 11.088790, 0.274579,
+ -1.059988, 92.136581, 9.983883, 0.317164, -1.084069, 77.063034, 9.008505, 0.357624, -1.092124,
+ 63.963051, 8.127298, 0.399009, -1.097560, 53.483341, 7.347628, 0.441182, -1.100981, 45.052429,
+ 6.658191, 0.481606, -1.097318, 37.932640, 6.047333, 0.524253, -1.096570, 32.395638, 5.505878,
+ 0.564351, -1.088739, 27.679380, 5.018494, 0.600843, -1.073396, 23.611519, 4.580770, 0.635527,
+ -1.055024, 20.207081, 4.194785, 0.672045, -1.039775, 17.469036, 3.847436, 0.698372, -1.009545,
+ 14.928226, 3.532546, 0.729336, -0.987168, 12.953170, 3.248834, 0.761147, -0.966299, 11.346271,
+ 2.994166, 0.782270, -0.932841, 9.813129, 2.762244, 0.811832, -0.910431, 8.672224, 2.549933,
+ 0.832053, -0.878369, 7.578633, 2.363132, 0.849383, -0.844673, 6.648379, 2.189266, 0.866020,
+ -0.811703, 5.850784, 2.031716, 0.893083, -0.789181, 5.273372, 1.884480, 0.909212, -0.757541,
+ 4.700618, 1.750298, 0.923169, -0.725157, 4.196640, 1.627590, 0.937112, -0.693769, 3.764841,
+ 1.514906, 0.961901, -0.670828, 3.444598, 1.406839, 0.975245, -0.640240, 3.120745, 1.307873,
+ 0.989696, -0.611032, 2.840732, 1.216417, 1.002057, -0.581144, 2.591596, 1.132553, 1.014022,
+ -0.551620, 2.373820, 1.051695, 1.025307, -0.522268, 2.177992, 0.977500, 1.052190, -0.500826,
+ 2.042511, 0.904301, 1.064408, -0.472355, 1.891934, 0.837557, 1.077876, -0.444815, 1.761054,
+ 0.773004, 1.088939, -0.416531, 1.638939, 0.713958, 1.118551, -0.395057, 1.555724, 0.652485,
+ 1.134469, -0.368289, 1.465490, 0.596330, 1.162778, -0.345095, 1.390977, 0.539703, 1.185298,
+ -0.319527, 1.321225, 0.486250, 1.208419, -0.293590, 1.259318, 0.434178, 1.261013, -0.273471,
+ 1.219767, 0.382032, 1.297811, -0.248226, 1.176422, 0.334190, 1.326591, -0.220354, 1.139881,
+ 0.289075, 1.357918, -0.191937, 1.111418, 0.246259, 1.387590, -0.162282, 1.086511, 0.205129,
+ 1.415797, -0.131515, 1.067072, 0.165601, 1.440194, -0.099555, 1.047799, 0.125462, 1.465600,
+ -0.066957, 1.030406, 0.084082, 1.487714, -0.033496, 1.013889, 0.041981, 1.509947, 0.000663,
+ 0.998773, -0.000485, 0.000100, -0.004009, 40.102047, 40.087105, 0.000228, -0.009141, 91.431366,
+ 40.074432, 0.001522, -0.060544, 605.651733, 39.918827, 0.004919, -0.188871, 1712.982300,
+ 38.873421, 0.009053, -0.320325, 1583.453125, 39.715633, 0.015375, -0.471415, 1486.033691,
+ 39.162876, 0.029306, -0.735111, 1751.701050, 28.083200, 0.043450, -0.859759, 1392.475220,
+ 24.599945, 0.079075, -1.220033, 1629.972656, 18.507019, 0.090130, -1.091255, 940.347351,
+ 17.961655, 0.098008, -0.945965, 425.901093, 24.478010, 0.138246, -1.084105, 416.823944,
+ 20.003433, 0.174489, -1.133148, 302.730042, 18.550846, 0.207969, -1.138483, 242.853577,
+ 15.923334, 0.249132, -1.168197, 191.649445, 13.940813, 0.291391, -1.187038, 152.910309,
+ 12.263267, 0.332856, -1.192793, 121.905075, 10.822873, 0.377473, -1.202846, 99.145561,
+ 9.618412, 0.422601, -1.208871, 81.343315, 8.591735, 0.465276, -1.204545, 66.742569, 7.692911,
+ 0.504710, -1.190839, 54.787876, 6.915612, 0.544909, -1.178827, 45.507313, 6.242786, 0.582125,
+ -1.160590, 37.819912, 5.651690, 0.620694, -1.145481, 31.926588, 5.123660, 0.659127, -1.130178,
+ 27.147310, 4.669475, 0.684358, -1.093728, 22.650702, 4.258717, 0.719453, -1.074591, 19.454103,
+ 3.901225, 0.751695, -1.051678, 16.735672, 3.576870, 0.775082, -1.017716, 14.281039, 3.287471,
+ 0.796233, -0.982759, 12.261332, 3.023708, 0.827404, -0.961227, 10.767912, 2.787740, 0.848149,
+ -0.928433, 9.371350, 2.570737, 0.864891, -0.892838, 8.142364, 2.379204, 0.880979, -0.858193,
+ 7.118954, 2.204470, 0.910434, -0.837281, 6.389041, 2.041554, 0.925396, -0.803638, 5.643217,
+ 1.893353, 0.942463, -0.772925, 5.031223, 1.757331, 0.955217, -0.739720, 4.486978, 1.633572,
+ 0.968570, -0.708048, 4.014621, 1.520414, 0.981672, -0.677109, 3.617768, 1.412506, 0.992829,
+ -0.645712, 3.258773, 1.317079, 1.021270, -0.625746, 3.006640, 1.222611, 1.031247, -0.594628,
+ 2.733073, 1.137911, 1.043581, -0.565540, 2.498495, 1.058439, 1.055930, -0.536962, 2.289843,
+ 0.984428, 1.066727, -0.508076, 2.108603, 0.912794, 1.081225, -0.481297, 1.951454, 0.845536,
+ 1.088198, -0.451563, 1.801891, 0.782718, 1.123316, -0.433247, 1.704316, 0.721664, 1.133206,
+ -0.404812, 1.586153, 0.662761, 1.152889, -0.379901, 1.490958, 0.606866, 1.188158, -0.359421,
+ 1.415730, 0.550666, 1.217064, -0.336049, 1.344172, 0.496748, 1.257727, -0.314816, 1.283196,
+ 0.443538, 1.286647, -0.289530, 1.225903, 0.394018, 1.308729, -0.262053, 1.173928, 0.346255,
+ 1.351453, -0.237704, 1.139992, 0.300393, 1.380284, -0.209733, 1.105997, 0.256661, 1.414621,
+ -0.181613, 1.082109, 0.215429, 1.453045, -0.152797, 1.063853, 0.177098, 1.481066, -0.121803,
+ 1.043185, 0.137203, 1.514113, -0.090250, 1.027072, 0.096998, 1.547317, -0.057603, 1.012551,
+ 0.055328, 1.577983, -0.023799, 0.999267, 0.013094, 0.000108, -0.124970, 1249.704346,
+ 1249.703491, 0.000140, -0.119585, 1195.855469, 1195.854370, 0.003995, -0.927433, 9274.246094,
+ 232.443573, 0.012013, -1.131580, 11315.999023, 98.211105, 0.023892, -1.216018, 12162.739258,
+ 67.214500, 0.047506, -1.517865, 15186.294922, 42.410069, 0.082523, -1.812564, 18145.718750,
+ 24.421545, 0.112452, -1.805072, 11112.966797, 18.450365, 0.164460, -2.016784, 8086.032715,
+ 14.043465, 0.195870, -1.898199, 4245.658203, 13.178202, 0.197797, -1.556158, 1315.561768,
+ 30.760096, 0.219540, -1.433455, 802.380371, 25.037956, 0.268696, -1.483235, 579.715515,
+ 20.975695, 0.265968, -1.261051, 386.583649, 12.017023, 0.325369, -1.343349, 316.795959,
+ 12.612406, 0.387968, -1.411606, 232.491623, 13.296940, 0.435543, -1.411236, 181.515228,
+ 11.646996, 0.482729, -1.405722, 143.425354, 10.265131, 0.531742, -1.402782, 114.920082,
+ 9.114828, 0.559383, -1.346165, 88.589005, 8.089214, 0.607851, -1.342407, 73.056610, 7.249064,
+ 0.656928, -1.338238, 60.826897, 6.531094, 0.681212, -1.285692, 48.727219, 5.868711, 0.729238,
+ -1.279951, 41.256016, 5.324553, 0.751172, -1.230045, 33.728260, 4.816513, 0.773107, -1.184288,
+ 27.913816, 4.377203, 0.815726, -1.171653, 24.065962, 3.999965, 0.837886, -1.130636, 20.254860,
+ 3.658493, 0.857674, -1.089071, 17.138168, 3.347930, 0.876120, -1.048303, 14.572968, 3.072666,
+ 0.893935, -1.009040, 12.496377, 2.825165, 0.927998, -0.989064, 11.040731, 2.605520, 0.928445,
+ -0.935017, 9.365102, 2.401481, 0.945279, -0.899993, 8.177711, 2.222282, 0.959378, -0.863854,
+ 7.155303, 2.059342, 0.971761, -0.827684, 6.284632, 1.909314, 0.987812, -0.795878, 5.583837,
+ 1.771094, 1.001958, -0.763540, 4.962345, 1.645968, 1.014357, -0.730897, 4.435898, 1.527438,
+ 1.025946, -0.698675, 3.973241, 1.421337, 1.036435, -0.666662, 3.568025, 1.323677, 1.046807,
+ -0.635466, 3.218647, 1.232678, 1.052974, -0.602660, 2.902273, 1.147675, 1.086089, -0.585364,
+ 2.694939, 1.068352, 1.094660, -0.554784, 2.454491, 0.993445, 1.117131, -0.531500, 2.270746,
+ 0.923758, 1.114009, -0.496581, 2.063934, 0.858381, 1.137328, -0.473914, 1.917990, 0.794980,
+ 1.158671, -0.450127, 1.786523, 0.735697, 1.177878, -0.425306, 1.662454, 0.677498, 1.207510,
+ -0.403797, 1.559058, 0.621762, 1.244496, -0.383812, 1.466801, 0.566190, 1.240412, -0.351080,
+ 1.366853, 0.514288, 1.321257, -0.341200, 1.309808, 0.464621, 1.336512, -0.312710, 1.241822,
+ 0.413228, 1.365047, -0.286935, 1.186612, 0.366092, 1.418984, -0.265184, 1.152120, 0.321528,
+ 1.388864, -0.227750, 1.089937, 0.271827, 1.464383, -0.207168, 1.077271, 0.232838, 1.473125,
+ -0.175770, 1.041835, 0.193289, 1.542908, -0.150424, 1.036794, 0.156153, 1.563005, -0.118748,
+ 1.013029, 0.114866, 1.637048, -0.089604, 1.013493, 0.076804, 1.670777, -0.056398, 0.999208,
+ 0.032691,
+};
+static float ltc_mag_ggx[64 * 64] = {
+ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000,
+ 1.000000, 1.000000, 1.000000, 0.999995, 0.999990, 0.999971, 0.999937, 0.999853, 0.999670,
+ 0.999138, 0.996746, 0.979578, 0.979309, 0.978836, 0.977972, 0.976223, 0.972205, 0.962466,
+ 0.953919, 0.949829, 0.942492, 0.929870, 0.921319, 0.911112, 0.896015, 0.885105, 0.869971,
+ 0.855017, 0.838328, 0.821241, 0.802352, 0.783873, 0.763309, 0.743058, 0.721929, 0.699755,
+ 0.677721, 0.655456, 0.632681, 0.609629, 0.586831, 0.564287, 0.541772, 0.519428, 0.497353,
+ 0.475624, 0.454606, 0.434099, 0.414085, 0.394605, 0.375698, 0.357386, 0.339871, 0.323085,
+ 0.306905, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000,
+ 0.999999, 0.999999, 0.999998, 0.999995, 0.999990, 0.999980, 0.999959, 0.999923, 0.999842,
+ 0.999660, 0.999119, 0.996613, 0.981824, 0.979298, 0.978826, 0.977957, 0.976184, 0.972091,
+ 0.962188, 0.953875, 0.949746, 0.942335, 0.930166, 0.921211, 0.910927, 0.896979, 0.884940,
+ 0.869864, 0.854835, 0.838200, 0.821049, 0.802552, 0.783659, 0.763512, 0.742927, 0.721715,
+ 0.699938, 0.677775, 0.655246, 0.632555, 0.609805, 0.586996, 0.564225, 0.541606, 0.519346,
+ 0.497419, 0.475863, 0.454738, 0.434099, 0.414003, 0.394547, 0.375747, 0.357564, 0.340012,
+ 0.323099, 0.306861, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000,
+ 1.000000, 1.000000, 0.999999, 0.999998, 0.999995, 0.999991, 0.999979, 0.999959, 0.999917,
+ 0.999839, 0.999648, 0.999074, 0.996168, 0.983770, 0.979279, 0.978800, 0.977905, 0.976058,
+ 0.971727, 0.962120, 0.953901, 0.949485, 0.941859, 0.930911, 0.920853, 0.910394, 0.897600,
+ 0.884427, 0.870101, 0.854522, 0.838325, 0.820754, 0.802707, 0.783223, 0.763605, 0.742872,
+ 0.721565, 0.699935, 0.677726, 0.655242, 0.632580, 0.609766, 0.586946, 0.564275, 0.541759,
+ 0.519467, 0.497478, 0.475886, 0.454794, 0.434233, 0.414207, 0.394751, 0.375892, 0.357683,
+ 0.340146, 0.323287, 0.307095, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000,
+ 1.000000, 0.999999, 0.999999, 0.999998, 0.999996, 0.999992, 0.999987, 0.999975, 0.999953,
+ 0.999913, 0.999830, 0.999630, 0.998993, 0.995279, 0.985142, 0.979252, 0.978754, 0.977821,
+ 0.975838, 0.971088, 0.962563, 0.954785, 0.949048, 0.941052, 0.931420, 0.920812, 0.909750,
+ 0.897867, 0.883856, 0.870091, 0.854353, 0.838166, 0.820661, 0.802465, 0.783308, 0.763346,
+ 0.742734, 0.721608, 0.699747, 0.677626, 0.655245, 0.632547, 0.609793, 0.587044, 0.564340,
+ 0.541779, 0.519529, 0.497633, 0.476114, 0.455030, 0.434430, 0.414406, 0.394974, 0.376154,
+ 0.357979, 0.340443, 0.323572, 0.307379, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000,
+ 1.000000, 1.000000, 1.000000, 0.999998, 0.999998, 0.999996, 0.999991, 0.999984, 0.999970,
+ 0.999946, 0.999905, 0.999815, 0.999599, 0.998856, 0.993704, 0.986135, 0.979212, 0.978690,
+ 0.977691, 0.975504, 0.970133, 0.962951, 0.955649, 0.948405, 0.940418, 0.931660, 0.920881,
+ 0.909376, 0.897785, 0.883844, 0.869756, 0.854326, 0.837732, 0.820617, 0.802053, 0.783195,
+ 0.763119, 0.742610, 0.721344, 0.699709, 0.677624, 0.655114, 0.632523, 0.609812, 0.587052,
+ 0.564417, 0.541966, 0.519751, 0.497824, 0.476309, 0.455271, 0.434735, 0.414736, 0.395317,
+ 0.376524, 0.358364, 0.340852, 0.323988, 0.307786, 1.000000, 1.000000, 1.000000, 1.000000,
+ 1.000000, 1.000000, 0.999999, 0.999999, 0.999997, 0.999996, 0.999994, 0.999989, 0.999980,
+ 0.999965, 0.999940, 0.999895, 0.999796, 0.999559, 0.998638, 0.992774, 0.986878, 0.980297,
+ 0.978602, 0.977514, 0.975026, 0.969169, 0.963214, 0.956267, 0.947689, 0.940054, 0.931637,
+ 0.920678, 0.908990, 0.897349, 0.883905, 0.869139, 0.854177, 0.837476, 0.820295, 0.801977,
+ 0.782798, 0.762978, 0.742418, 0.721193, 0.699560, 0.677402, 0.655108, 0.632543, 0.609804,
+ 0.587158, 0.564557, 0.542096, 0.519908, 0.498088, 0.476632, 0.455623, 0.435104, 0.415161,
+ 0.395783, 0.377005, 0.358843, 0.341345, 0.324529, 0.308355, 1.000000, 1.000000, 1.000000,
+ 1.000000, 1.000000, 0.999999, 0.999999, 0.999998, 0.999997, 0.999992, 0.999991, 0.999985,
+ 0.999977, 0.999959, 0.999935, 0.999878, 0.999773, 0.999505, 0.998284, 0.992353, 0.987457,
+ 0.981665, 0.978492, 0.977277, 0.974360, 0.968716, 0.963373, 0.956629, 0.947397, 0.939657,
+ 0.931339, 0.920588, 0.908975, 0.896712, 0.883763, 0.868890, 0.853731, 0.837333, 0.819702,
+ 0.801738, 0.782454, 0.762712, 0.742024, 0.721037, 0.699325, 0.677359, 0.655030, 0.632439,
+ 0.609869, 0.587221, 0.564663, 0.542328, 0.520220, 0.498400, 0.476997, 0.456053, 0.435593,
+ 0.415658, 0.396300, 0.377577, 0.359473, 0.342004, 0.325170, 0.308997, 1.000000, 1.000000,
+ 1.000000, 1.000000, 1.000000, 0.999999, 0.999998, 0.999998, 0.999996, 0.999993, 0.999988,
+ 0.999981, 0.999971, 0.999951, 0.999921, 0.999863, 0.999748, 0.999433, 0.997681, 0.992120,
+ 0.987920, 0.982864, 0.978353, 0.976961, 0.973451, 0.968396, 0.963400, 0.956680, 0.947529,
+ 0.939151, 0.930747, 0.920511, 0.908867, 0.896142, 0.883335, 0.868764, 0.853025, 0.837015,
+ 0.819452, 0.801249, 0.782176, 0.762345, 0.741843, 0.720721, 0.699135, 0.677194, 0.654889,
+ 0.632487, 0.609902, 0.587328, 0.564891, 0.542567, 0.520501, 0.498793, 0.477442, 0.456528,
+ 0.436131, 0.416273, 0.396980, 0.378276, 0.360176, 0.342738, 0.325950, 0.309803, 1.000000,
+ 1.000000, 1.000000, 1.000000, 0.999999, 0.999998, 0.999999, 0.999997, 0.999995, 0.999991,
+ 0.999985, 0.999978, 0.999963, 0.999942, 0.999907, 0.999844, 0.999715, 0.999332, 0.996612,
+ 0.991974, 0.988297, 0.983843, 0.978349, 0.976540, 0.972351, 0.968109, 0.963280, 0.956464,
+ 0.947779, 0.938754, 0.929952, 0.920253, 0.908530, 0.895785, 0.882679, 0.868456, 0.852669,
+ 0.836406, 0.819138, 0.800708, 0.781803, 0.761855, 0.741534, 0.720405, 0.698959, 0.676964,
+ 0.654827, 0.632411, 0.609922, 0.587477, 0.565051, 0.542829, 0.520889, 0.499225, 0.477951,
+ 0.457148, 0.436792, 0.416963, 0.397723, 0.379068, 0.361025, 0.343608, 0.326842, 0.310718,
+ 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.999999, 0.999998, 0.999995, 0.999994,
+ 0.999990, 0.999983, 0.999971, 0.999954, 0.999932, 0.999892, 0.999820, 0.999675, 0.999190,
+ 0.995492, 0.991911, 0.988610, 0.984662, 0.979221, 0.975975, 0.971671, 0.967788, 0.963002,
+ 0.955938, 0.947965, 0.938692, 0.929309, 0.919781, 0.908268, 0.895518, 0.882022, 0.867884,
+ 0.852346, 0.835746, 0.818607, 0.800261, 0.781335, 0.761539, 0.741063, 0.720116, 0.698617,
+ 0.676815, 0.654700, 0.632389, 0.610037, 0.587591, 0.565328, 0.543205, 0.521293, 0.499745,
+ 0.478562, 0.457776, 0.437515, 0.417776, 0.398586, 0.379963, 0.361984, 0.344616, 0.327857,
+ 0.311751, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.999999, 0.999997, 0.999996,
+ 0.999992, 0.999986, 0.999977, 0.999965, 0.999947, 0.999916, 0.999873, 0.999794, 0.999628,
+ 0.998966, 0.994914, 0.991849, 0.988873, 0.985288, 0.980170, 0.975207, 0.971156, 0.967476,
+ 0.962538, 0.955601, 0.947978, 0.938542, 0.928618, 0.919056, 0.907890, 0.895098, 0.881352,
+ 0.867263, 0.851806, 0.835168, 0.818003, 0.799785, 0.780633, 0.761080, 0.740618, 0.719795,
+ 0.698332, 0.676629, 0.654544, 0.632411, 0.610042, 0.587805, 0.565593, 0.543549, 0.521793,
+ 0.500309, 0.479195, 0.458546, 0.438353, 0.418669, 0.399557, 0.381012, 0.363049, 0.345710,
+ 0.329006, 0.312948, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.999999, 0.999997,
+ 0.999993, 0.999990, 0.999984, 0.999972, 0.999960, 0.999939, 0.999906, 0.999853, 0.999765,
+ 0.999567, 0.998603, 0.994519, 0.991794, 0.989089, 0.985781, 0.980956, 0.974161, 0.970688,
+ 0.967064, 0.961890, 0.955292, 0.947848, 0.938359, 0.928226, 0.918214, 0.907361, 0.894702,
+ 0.880834, 0.866500, 0.851209, 0.834627, 0.817211, 0.799250, 0.780131, 0.760512, 0.740218,
+ 0.719264, 0.698063, 0.676325, 0.654450, 0.632316, 0.610170, 0.587988, 0.565891, 0.544013,
+ 0.522305, 0.500958, 0.479971, 0.459376, 0.439271, 0.419699, 0.400620, 0.382126, 0.364246,
+ 0.346967, 0.330273, 0.314236, 1.000000, 1.000000, 1.000000, 1.000000, 0.999999, 0.999998,
+ 0.999996, 0.999994, 0.999988, 0.999979, 0.999967, 0.999952, 0.999924, 0.999888, 0.999833,
+ 0.999733, 0.999490, 0.997946, 0.994192, 0.991812, 0.989274, 0.986224, 0.981547, 0.974000,
+ 0.970269, 0.966545, 0.961031, 0.954921, 0.947416, 0.938226, 0.928003, 0.917390, 0.906553,
+ 0.894191, 0.880329, 0.865540, 0.850476, 0.834058, 0.816467, 0.798509, 0.779561, 0.759828,
+ 0.739738, 0.718878, 0.697718, 0.676138, 0.654342, 0.632317, 0.610292, 0.588207, 0.566289,
+ 0.544443, 0.522927, 0.501674, 0.480765, 0.460314, 0.440304, 0.420782, 0.401824, 0.383410,
+ 0.365538, 0.348312, 0.331692, 0.315688, 1.000000, 1.000000, 1.000000, 1.000000, 0.999999,
+ 0.999998, 0.999996, 0.999993, 0.999985, 0.999976, 0.999961, 0.999943, 0.999913, 0.999872,
+ 0.999807, 0.999691, 0.999390, 0.996859, 0.994003, 0.991808, 0.989423, 0.986523, 0.981783,
+ 0.974511, 0.969791, 0.965933, 0.960377, 0.954434, 0.946803, 0.938026, 0.927620, 0.916545,
+ 0.905639, 0.893489, 0.879820, 0.864852, 0.849513, 0.833311, 0.815878, 0.797621, 0.778938,
+ 0.759253, 0.739142, 0.718479, 0.697274, 0.675902, 0.654135, 0.632357, 0.610364, 0.588497,
+ 0.566631, 0.545012, 0.523579, 0.502429, 0.481680, 0.461304, 0.441425, 0.422039, 0.403135,
+ 0.384779, 0.366976, 0.349796, 0.333231, 0.317277, 1.000000, 1.000000, 1.000000, 1.000000,
+ 0.999999, 0.999998, 0.999996, 0.999991, 0.999983, 0.999974, 0.999956, 0.999932, 0.999901,
+ 0.999852, 0.999780, 0.999646, 0.999248, 0.996193, 0.993784, 0.991782, 0.989539, 0.986694,
+ 0.981765, 0.975135, 0.969309, 0.965128, 0.959788, 0.953831, 0.946255, 0.937664, 0.927351,
+ 0.916044, 0.904715, 0.892528, 0.879111, 0.864256, 0.848452, 0.832434, 0.815129, 0.796806,
+ 0.778118, 0.758668, 0.738466, 0.718024, 0.696958, 0.675642, 0.654067, 0.632325, 0.610546,
+ 0.588786, 0.567123, 0.545617, 0.524312, 0.503348, 0.482637, 0.462418, 0.442657, 0.423338,
+ 0.404564, 0.386277, 0.368545, 0.351448, 0.334906, 0.318961, 1.000000, 1.000000, 1.000000,
+ 0.999999, 0.999999, 0.999998, 0.999994, 0.999989, 0.999979, 0.999968, 0.999949, 0.999921,
+ 0.999886, 0.999833, 0.999747, 0.999596, 0.999029, 0.995749, 0.993677, 0.991724, 0.989620,
+ 0.986723, 0.981515, 0.975767, 0.969056, 0.964124, 0.959142, 0.953036, 0.945650, 0.937022,
+ 0.926971, 0.915515, 0.903584, 0.891603, 0.878212, 0.863472, 0.847652, 0.831398, 0.814299,
+ 0.796105, 0.777231, 0.757977, 0.737895, 0.717415, 0.696595, 0.675317, 0.653980, 0.632343,
+ 0.610735, 0.589076, 0.567620, 0.546251, 0.525165, 0.504255, 0.483759, 0.463666, 0.443987,
+ 0.424783, 0.406042, 0.387891, 0.370293, 0.353221, 0.336715, 0.320806, 1.000000, 1.000000,
+ 1.000000, 0.999999, 0.999998, 0.999998, 0.999993, 0.999987, 0.999977, 0.999964, 0.999943,
+ 0.999911, 0.999867, 0.999807, 0.999714, 0.999531, 0.998645, 0.995399, 0.993512, 0.991717,
+ 0.989661, 0.986652, 0.981559, 0.976183, 0.969411, 0.963317, 0.958457, 0.952091, 0.944951,
+ 0.936307, 0.926454, 0.915043, 0.902668, 0.890462, 0.877245, 0.862672, 0.846823, 0.830201,
+ 0.813293, 0.795306, 0.776393, 0.757199, 0.737324, 0.716808, 0.696187, 0.675094, 0.653814,
+ 0.632453, 0.610885, 0.589483, 0.568099, 0.546975, 0.525953, 0.505268, 0.484936, 0.464988,
+ 0.445458, 0.426314, 0.407750, 0.389670, 0.372098, 0.355105, 0.338682, 0.322825, 1.000000,
+ 1.000000, 1.000000, 1.000000, 0.999999, 0.999996, 0.999992, 0.999983, 0.999976, 0.999959,
+ 0.999933, 0.999898, 0.999849, 0.999780, 0.999676, 0.999454, 0.997884, 0.995166, 0.993394,
+ 0.991723, 0.989654, 0.986389, 0.981632, 0.976607, 0.969701, 0.962555, 0.957605, 0.951232,
+ 0.944099, 0.935556, 0.925699, 0.914492, 0.902027, 0.889116, 0.876093, 0.861649, 0.845956,
+ 0.829238, 0.812220, 0.794420, 0.775657, 0.756265, 0.736673, 0.716372, 0.695669, 0.674886,
+ 0.653728, 0.632568, 0.611217, 0.589929, 0.568783, 0.547752, 0.526931, 0.506425, 0.486238,
+ 0.466425, 0.446945, 0.428026, 0.409536, 0.391551, 0.374087, 0.357155, 0.340787, 0.324974,
+ 1.000000, 1.000000, 1.000000, 1.000000, 0.999998, 0.999996, 0.999990, 0.999984, 0.999970,
+ 0.999952, 0.999925, 0.999886, 0.999831, 0.999757, 0.999633, 0.999356, 0.997017, 0.994868,
+ 0.993337, 0.991710, 0.989580, 0.985848, 0.981640, 0.976711, 0.969755, 0.962166, 0.956609,
+ 0.950365, 0.943026, 0.934693, 0.924880, 0.913729, 0.901350, 0.887966, 0.874726, 0.860474,
+ 0.844905, 0.828269, 0.810905, 0.793364, 0.774812, 0.755478, 0.735886, 0.715847, 0.695231,
+ 0.674537, 0.653667, 0.632527, 0.611475, 0.590363, 0.569462, 0.548571, 0.527976, 0.507634,
+ 0.487632, 0.467901, 0.448680, 0.429833, 0.411467, 0.393568, 0.376197, 0.359374, 0.343034,
+ 0.327273, 1.000000, 1.000000, 1.000000, 0.999999, 0.999998, 0.999993, 0.999989, 0.999980,
+ 0.999965, 0.999945, 0.999913, 0.999869, 0.999810, 0.999723, 0.999583, 0.999213, 0.996540,
+ 0.994740, 0.993244, 0.991671, 0.989411, 0.985533, 0.981616, 0.976847, 0.969968, 0.962315,
+ 0.955468, 0.949420, 0.942016, 0.933617, 0.923949, 0.912899, 0.900495, 0.887022, 0.873283,
+ 0.859153, 0.843830, 0.827325, 0.809888, 0.792172, 0.773832, 0.754686, 0.735035, 0.715297,
+ 0.694955, 0.674242, 0.653660, 0.632752, 0.611804, 0.590993, 0.570154, 0.549539, 0.529087,
+ 0.508974, 0.489030, 0.469599, 0.450466, 0.431761, 0.413508, 0.395761, 0.378480, 0.361679,
+ 0.345465, 0.329752, 1.000000, 1.000000, 1.000000, 1.000000, 0.999997, 0.999994, 0.999987,
+ 0.999978, 0.999961, 0.999936, 0.999903, 0.999855, 0.999786, 0.999689, 0.999527, 0.998988,
+ 0.996137, 0.994527, 0.993108, 0.991599, 0.989084, 0.985308, 0.981527, 0.976677, 0.970079,
+ 0.962535, 0.954490, 0.948271, 0.940942, 0.932422, 0.922836, 0.911896, 0.899632, 0.886118,
+ 0.871864, 0.857719, 0.842536, 0.826163, 0.808849, 0.790860, 0.772802, 0.753860, 0.734335,
+ 0.714582, 0.694543, 0.674071, 0.653544, 0.632922, 0.612153, 0.591573, 0.570951, 0.550520,
+ 0.530352, 0.510311, 0.490707, 0.471359, 0.452396, 0.433837, 0.415736, 0.398052, 0.380874,
+ 0.364232, 0.348023, 0.332368, 1.000000, 1.000000, 1.000000, 0.999999, 0.999998, 0.999994,
+ 0.999988, 0.999976, 0.999957, 0.999928, 0.999891, 0.999837, 0.999759, 0.999650, 0.999463,
+ 0.998551, 0.995879, 0.994366, 0.992964, 0.991479, 0.988521, 0.985101, 0.981482, 0.976168,
+ 0.970242, 0.962585, 0.953950, 0.946973, 0.939686, 0.931248, 0.921614, 0.910765, 0.898617,
+ 0.885183, 0.870772, 0.856138, 0.841120, 0.824962, 0.807732, 0.789813, 0.771638, 0.753008,
+ 0.733686, 0.713927, 0.694082, 0.673967, 0.653549, 0.633135, 0.612702, 0.592200, 0.571904,
+ 0.551679, 0.531678, 0.511898, 0.492437, 0.473239, 0.454451, 0.436067, 0.418054, 0.400542,
+ 0.383486, 0.366848, 0.350781, 0.335182, 1.000000, 1.000000, 1.000000, 0.999999, 0.999997,
+ 0.999993, 0.999985, 0.999972, 0.999951, 0.999919, 0.999877, 0.999817, 0.999733, 0.999608,
+ 0.999380, 0.997685, 0.995603, 0.994264, 0.992911, 0.991287, 0.987923, 0.984871, 0.981239,
+ 0.975933, 0.970149, 0.962511, 0.953824, 0.945699, 0.938285, 0.929907, 0.920343, 0.909537,
+ 0.897435, 0.884056, 0.869626, 0.854490, 0.839459, 0.823511, 0.806511, 0.788752, 0.770440,
+ 0.751995, 0.732962, 0.713424, 0.693525, 0.673798, 0.653622, 0.633301, 0.613224, 0.592938,
+ 0.572833, 0.552904, 0.533030, 0.513556, 0.494215, 0.475279, 0.456673, 0.438411, 0.420583,
+ 0.403178, 0.386178, 0.369728, 0.353688, 0.338147, 1.000000, 1.000000, 1.000000, 0.999999,
+ 0.999997, 0.999991, 0.999984, 0.999967, 0.999944, 0.999912, 0.999863, 0.999796, 0.999703,
+ 0.999563, 0.999279, 0.997104, 0.995394, 0.994111, 0.992825, 0.990979, 0.987529, 0.984661,
+ 0.980774, 0.975758, 0.969866, 0.962465, 0.953678, 0.944489, 0.936886, 0.928356, 0.918820,
+ 0.908073, 0.896092, 0.882833, 0.868463, 0.853212, 0.837744, 0.822048, 0.805333, 0.787643,
+ 0.769414, 0.750830, 0.732178, 0.712972, 0.693227, 0.673569, 0.653744, 0.633739, 0.613735,
+ 0.593822, 0.573916, 0.554158, 0.534652, 0.515248, 0.496233, 0.477436, 0.459009, 0.440929,
+ 0.423259, 0.405951, 0.389136, 0.372690, 0.356789, 0.341329, 1.000000, 1.000000, 1.000000,
+ 0.999999, 0.999996, 0.999991, 0.999981, 0.999966, 0.999939, 0.999903, 0.999847, 0.999771,
+ 0.999666, 0.999510, 0.999131, 0.996690, 0.995147, 0.993882, 0.992696, 0.990474, 0.987227,
+ 0.984334, 0.980153, 0.975438, 0.969406, 0.962238, 0.953598, 0.943868, 0.935356, 0.926721,
+ 0.917122, 0.906430, 0.894550, 0.881354, 0.867131, 0.851954, 0.835972, 0.820331, 0.803911,
+ 0.786452, 0.768420, 0.749821, 0.731298, 0.712393, 0.692979, 0.673418, 0.653859, 0.634232,
+ 0.614327, 0.594732, 0.575131, 0.555584, 0.536346, 0.517175, 0.498323, 0.479744, 0.461485,
+ 0.443645, 0.426061, 0.408969, 0.392155, 0.375921, 0.360060, 0.344677, 1.000000, 1.000000,
+ 1.000000, 0.999999, 0.999997, 0.999991, 0.999979, 0.999960, 0.999931, 0.999891, 0.999832,
+ 0.999748, 0.999629, 0.999449, 0.998880, 0.996305, 0.995024, 0.993812, 0.992508, 0.989721,
+ 0.986936, 0.983936, 0.979629, 0.974979, 0.968928, 0.961970, 0.953291, 0.943458, 0.933644,
+ 0.925007, 0.915388, 0.904755, 0.892932, 0.879831, 0.865794, 0.850672, 0.834591, 0.818398,
+ 0.802304, 0.785151, 0.767450, 0.748987, 0.730325, 0.711758, 0.692761, 0.673417, 0.653908,
+ 0.634686, 0.615168, 0.595707, 0.576393, 0.557198, 0.538018, 0.519253, 0.500555, 0.482220,
+ 0.464197, 0.446414, 0.429106, 0.412035, 0.395508, 0.379284, 0.363538, 0.348220, 1.000000,
+ 1.000000, 1.000000, 0.999999, 0.999995, 0.999989, 0.999977, 0.999955, 0.999924, 0.999879,
+ 0.999813, 0.999722, 0.999590, 0.999381, 0.998335, 0.996088, 0.994814, 0.993709, 0.992220,
+ 0.989209, 0.986575, 0.983383, 0.979084, 0.974272, 0.968359, 0.961275, 0.953025, 0.943098,
+ 0.932434, 0.923101, 0.913477, 0.902861, 0.891059, 0.878072, 0.864118, 0.849188, 0.833281,
+ 0.816808, 0.800596, 0.783745, 0.766331, 0.748123, 0.729686, 0.711078, 0.692527, 0.673491,
+ 0.654296, 0.635113, 0.616048, 0.596847, 0.577720, 0.558879, 0.540028, 0.521371, 0.502996,
+ 0.484858, 0.466997, 0.449477, 0.432217, 0.415426, 0.398924, 0.382890, 0.367206, 0.351955,
+ 1.000000, 1.000000, 1.000000, 0.999998, 0.999996, 0.999988, 0.999974, 0.999953, 0.999918,
+ 0.999865, 0.999791, 0.999690, 0.999542, 0.999293, 0.997535, 0.995790, 0.994609, 0.993557,
+ 0.991766, 0.988767, 0.986255, 0.982544, 0.978541, 0.973528, 0.967700, 0.960596, 0.952299,
+ 0.942684, 0.931653, 0.921211, 0.911489, 0.900818, 0.889018, 0.876245, 0.862406, 0.847517,
+ 0.831852, 0.815367, 0.798719, 0.782224, 0.765167, 0.747304, 0.729133, 0.710485, 0.692196,
+ 0.673589, 0.654770, 0.635717, 0.616986, 0.598119, 0.579298, 0.560560, 0.542163, 0.523669,
+ 0.505564, 0.487642, 0.469991, 0.452658, 0.435620, 0.418937, 0.402612, 0.386633, 0.371091,
+ 0.355949, 1.000000, 1.000000, 0.999999, 0.999998, 0.999995, 0.999986, 0.999973, 0.999948,
+ 0.999909, 0.999852, 0.999769, 0.999656, 0.999490, 0.999186, 0.997059, 0.995624, 0.994510,
+ 0.993327, 0.991020, 0.988379, 0.985771, 0.981971, 0.978051, 0.972892, 0.967020, 0.959965,
+ 0.951625, 0.941902, 0.930951, 0.919370, 0.909285, 0.898562, 0.886809, 0.874251, 0.860597,
+ 0.845808, 0.830365, 0.813972, 0.797260, 0.780597, 0.763854, 0.746401, 0.728519, 0.710203,
+ 0.691882, 0.673687, 0.655275, 0.636621, 0.617909, 0.599473, 0.581032, 0.562560, 0.544295,
+ 0.526228, 0.508293, 0.490652, 0.473242, 0.456004, 0.439212, 0.422663, 0.406476, 0.390647,
+ 0.375204, 0.360129, 1.000000, 1.000000, 1.000000, 0.999999, 0.999994, 0.999984, 0.999969,
+ 0.999940, 0.999898, 0.999837, 0.999746, 0.999617, 0.999438, 0.999016, 0.996703, 0.995302,
+ 0.994356, 0.992993, 0.990390, 0.988072, 0.985152, 0.981447, 0.977273, 0.972234, 0.966113,
+ 0.959033, 0.950869, 0.941217, 0.930175, 0.918279, 0.906941, 0.896201, 0.884509, 0.871920,
+ 0.858420, 0.843906, 0.828730, 0.812524, 0.795978, 0.778979, 0.762450, 0.745459, 0.727966,
+ 0.710046, 0.691808, 0.673739, 0.655756, 0.637574, 0.619153, 0.600887, 0.582796, 0.564748,
+ 0.546636, 0.528904, 0.511252, 0.493791, 0.476563, 0.459695, 0.442942, 0.426632, 0.410558,
+ 0.394895, 0.379517, 0.364560, 1.000000, 1.000000, 1.000000, 0.999998, 0.999994, 0.999984,
+ 0.999966, 0.999934, 0.999887, 0.999819, 0.999720, 0.999578, 0.999367, 0.998696, 0.996353,
+ 0.995201, 0.994115, 0.992665, 0.989948, 0.987633, 0.984331, 0.980827, 0.976390, 0.971327,
+ 0.965201, 0.957977, 0.949712, 0.940128, 0.929187, 0.917237, 0.904645, 0.893711, 0.882112,
+ 0.869516, 0.856236, 0.841929, 0.826924, 0.810991, 0.794686, 0.777761, 0.760980, 0.744384,
+ 0.727314, 0.709877, 0.691988, 0.674098, 0.656243, 0.638603, 0.620606, 0.602574, 0.584694,
+ 0.567018, 0.549311, 0.531673, 0.514403, 0.497148, 0.480177, 0.463439, 0.446998, 0.430743,
+ 0.414943, 0.399304, 0.384121, 0.369251, 1.000000, 1.000000, 1.000000, 0.999997, 0.999992,
+ 0.999981, 0.999962, 0.999927, 0.999874, 0.999798, 0.999691, 0.999533, 0.999291, 0.997909,
+ 0.996117, 0.995029, 0.993880, 0.992142, 0.989576, 0.987185, 0.983587, 0.980055, 0.975487,
+ 0.970172, 0.963998, 0.956738, 0.948637, 0.939083, 0.928169, 0.916144, 0.903147, 0.890916,
+ 0.879389, 0.866895, 0.853826, 0.839729, 0.824957, 0.809472, 0.793341, 0.776743, 0.759808,
+ 0.743277, 0.726643, 0.709685, 0.692249, 0.674639, 0.657008, 0.639576, 0.622114, 0.604471,
+ 0.586851, 0.569340, 0.552135, 0.534806, 0.517599, 0.500765, 0.484035, 0.467440, 0.451212,
+ 0.435240, 0.419399, 0.404083, 0.388944, 0.374182, 1.000000, 1.000000, 1.000000, 0.999998,
+ 0.999993, 0.999979, 0.999958, 0.999919, 0.999861, 0.999774, 0.999656, 0.999482, 0.999195,
+ 0.997307, 0.995837, 0.994722, 0.993707, 0.991391, 0.989169, 0.986461, 0.982904, 0.979062,
+ 0.974536, 0.969035, 0.962653, 0.955486, 0.947243, 0.937747, 0.926861, 0.914936, 0.901835,
+ 0.888472, 0.876571, 0.864223, 0.851252, 0.837374, 0.822985, 0.807788, 0.791927, 0.775702,
+ 0.758928, 0.742347, 0.725914, 0.709495, 0.692569, 0.675363, 0.658085, 0.640639, 0.623698,
+ 0.606505, 0.589267, 0.572008, 0.554939, 0.538132, 0.521211, 0.504487, 0.488048, 0.471807,
+ 0.455651, 0.439858, 0.424332, 0.408983, 0.394071, 0.379402, 1.000000, 1.000000, 1.000000,
+ 0.999997, 0.999992, 0.999978, 0.999954, 0.999913, 0.999844, 0.999753, 0.999618, 0.999424,
+ 0.999067, 0.996875, 0.995659, 0.994603, 0.993420, 0.990874, 0.988713, 0.985585, 0.982193,
+ 0.978145, 0.973416, 0.967801, 0.961483, 0.954069, 0.945704, 0.936138, 0.925374, 0.913395,
+ 0.900339, 0.886675, 0.873512, 0.861326, 0.848513, 0.834956, 0.820820, 0.805943, 0.790574,
+ 0.774677, 0.758279, 0.741807, 0.725271, 0.709231, 0.692874, 0.676189, 0.659352, 0.642296,
+ 0.625250, 0.608700, 0.591823, 0.575012, 0.558143, 0.541491, 0.525075, 0.508558, 0.492277,
+ 0.476270, 0.460459, 0.444740, 0.429400, 0.414309, 0.399421, 0.384907, 1.000000, 1.000000,
+ 1.000000, 0.999997, 0.999990, 0.999977, 0.999947, 0.999902, 0.999832, 0.999730, 0.999577,
+ 0.999359, 0.998845, 0.996554, 0.995328, 0.994442, 0.992919, 0.990393, 0.988170, 0.984855,
+ 0.981312, 0.977149, 0.972137, 0.966207, 0.959967, 0.952454, 0.943873, 0.934434, 0.923813,
+ 0.911942, 0.898928, 0.885120, 0.871043, 0.858248, 0.845666, 0.832346, 0.818482, 0.804029,
+ 0.788982, 0.773571, 0.757700, 0.741484, 0.725186, 0.708915, 0.693244, 0.677028, 0.660656,
+ 0.644079, 0.627377, 0.610804, 0.594542, 0.578112, 0.561650, 0.545163, 0.528962, 0.512926,
+ 0.496893, 0.481007, 0.465397, 0.450042, 0.434740, 0.419831, 0.405156, 0.390692, 1.000000,
+ 1.000000, 0.999999, 0.999997, 0.999989, 0.999973, 0.999942, 0.999891, 0.999813, 0.999698,
+ 0.999532, 0.999285, 0.998286, 0.996295, 0.995215, 0.994182, 0.992032, 0.989855, 0.987415,
+ 0.984047, 0.980050, 0.976017, 0.970845, 0.964767, 0.958269, 0.950600, 0.942033, 0.932501,
+ 0.921807, 0.910017, 0.897149, 0.883414, 0.869182, 0.855055, 0.842687, 0.829548, 0.816162,
+ 0.802072, 0.787436, 0.772533, 0.757043, 0.741263, 0.725330, 0.709262, 0.693497, 0.678038,
+ 0.662128, 0.646068, 0.629824, 0.613437, 0.597334, 0.581401, 0.565372, 0.549288, 0.533182,
+ 0.517405, 0.501765, 0.486143, 0.470675, 0.455465, 0.440532, 0.425630, 0.411113, 0.396887,
+ 1.000000, 1.000000, 0.999999, 0.999996, 0.999989, 0.999970, 0.999934, 0.999879, 0.999793,
+ 0.999665, 0.999481, 0.999192, 0.997506, 0.995926, 0.995009, 0.993736, 0.991298, 0.989326,
+ 0.986371, 0.983199, 0.979032, 0.974596, 0.969364, 0.963198, 0.956385, 0.948509, 0.939993,
+ 0.930421, 0.919590, 0.908140, 0.895349, 0.881699, 0.867456, 0.852784, 0.839500, 0.826629,
+ 0.813602, 0.799983, 0.785873, 0.771340, 0.756480, 0.741190, 0.725687, 0.709997, 0.694192,
+ 0.678975, 0.663673, 0.648135, 0.632442, 0.616477, 0.600565, 0.584772, 0.569202, 0.553595,
+ 0.537881, 0.522193, 0.506784, 0.491554, 0.476349, 0.461278, 0.446419, 0.431913, 0.417443,
+ 0.403271, 1.000000, 1.000000, 0.999999, 0.999995, 0.999986, 0.999966, 0.999927, 0.999867,
+ 0.999772, 0.999629, 0.999423, 0.999075, 0.997024, 0.995773, 0.994651, 0.993353, 0.990822,
+ 0.988569, 0.985596, 0.982182, 0.977871, 0.973140, 0.967584, 0.961408, 0.954294, 0.946398,
+ 0.937603, 0.927937, 0.917305, 0.905833, 0.893138, 0.879770, 0.865720, 0.851023, 0.836801,
+ 0.823784, 0.810909, 0.797886, 0.784177, 0.770243, 0.755925, 0.741144, 0.726214, 0.710971,
+ 0.695563, 0.680212, 0.665304, 0.650297, 0.635168, 0.619796, 0.604217, 0.588692, 0.573254,
+ 0.557998, 0.542839, 0.527470, 0.512162, 0.497115, 0.482296, 0.467477, 0.452812, 0.438310,
+ 0.424184, 0.410163, 1.000000, 1.000000, 0.999999, 0.999996, 0.999984, 0.999962, 0.999920,
+ 0.999852, 0.999745, 0.999586, 0.999354, 0.998894, 0.996686, 0.995485, 0.994493, 0.992573,
+ 0.990323, 0.987772, 0.984692, 0.980887, 0.976446, 0.971625, 0.965717, 0.959421, 0.951975,
+ 0.944086, 0.935066, 0.925403, 0.914814, 0.903208, 0.890958, 0.877817, 0.863828, 0.849289,
+ 0.834872, 0.820889, 0.808183, 0.795660, 0.782556, 0.769066, 0.755386, 0.741229, 0.726726,
+ 0.712170, 0.697209, 0.682170, 0.667203, 0.652689, 0.637938, 0.623262, 0.608190, 0.593002,
+ 0.577817, 0.562737, 0.547836, 0.533036, 0.518052, 0.503135, 0.488422, 0.473986, 0.459552,
+ 0.445282, 0.431149, 0.417407, 1.000000, 1.000000, 0.999999, 0.999994, 0.999983, 0.999957,
+ 0.999914, 0.999835, 0.999718, 0.999538, 0.999275, 0.998454, 0.996341, 0.995246, 0.994222,
+ 0.991844, 0.989829, 0.986688, 0.983562, 0.979638, 0.974932, 0.969827, 0.963621, 0.957146,
+ 0.949365, 0.941398, 0.932245, 0.922556, 0.911949, 0.900627, 0.888440, 0.875544, 0.862005,
+ 0.847810, 0.833372, 0.819134, 0.805508, 0.793339, 0.780916, 0.767837, 0.754858, 0.741307,
+ 0.727496, 0.713386, 0.699131, 0.684542, 0.669878, 0.655261, 0.641035, 0.626685, 0.612377,
+ 0.597625, 0.582805, 0.568030, 0.553204, 0.538684, 0.524269, 0.509662, 0.495119, 0.480735,
+ 0.466634, 0.452593, 0.438748, 0.424915, 1.000000, 1.000000, 0.999998, 0.999994, 0.999982,
+ 0.999956, 0.999901, 0.999818, 0.999683, 0.999487, 0.999185, 0.997584, 0.996004, 0.995050,
+ 0.993715, 0.991212, 0.989057, 0.985879, 0.982243, 0.978206, 0.973119, 0.967919, 0.961343,
+ 0.954603, 0.946712, 0.938378, 0.929266, 0.919443, 0.908911, 0.897725, 0.885589, 0.873254,
+ 0.859889, 0.846123, 0.832094, 0.817898, 0.803866, 0.791061, 0.779235, 0.766885, 0.754292,
+ 0.741565, 0.728331, 0.714861, 0.701179, 0.687166, 0.673012, 0.658716, 0.644442, 0.630472,
+ 0.616519, 0.602514, 0.588172, 0.573689, 0.559281, 0.544768, 0.530543, 0.516485, 0.502303,
+ 0.488100, 0.474095, 0.460245, 0.446598, 0.433169, 1.000000, 1.000000, 0.999997, 0.999993,
+ 0.999980, 0.999947, 0.999891, 0.999794, 0.999647, 0.999425, 0.999062, 0.997049, 0.995778,
+ 0.994652, 0.992778, 0.990482, 0.988004, 0.984893, 0.980881, 0.976605, 0.971199, 0.965610,
+ 0.958925, 0.951746, 0.943791, 0.935200, 0.926018, 0.916028, 0.905724, 0.894528, 0.882914,
+ 0.870740, 0.857802, 0.844552, 0.830857, 0.816921, 0.803102, 0.789625, 0.777480, 0.765891,
+ 0.753908, 0.741795, 0.729390, 0.716440, 0.703411, 0.690068, 0.676438, 0.662586, 0.648697,
+ 0.634732, 0.620997, 0.607451, 0.593765, 0.579748, 0.565661, 0.551594, 0.537396, 0.523433,
+ 0.509708, 0.495972, 0.482082, 0.468427, 0.454890, 0.441623, 1.000000, 1.000000, 0.999999,
+ 0.999991, 0.999977, 0.999940, 0.999875, 0.999769, 0.999605, 0.999352, 0.998882, 0.996665,
+ 0.995459, 0.994380, 0.992014, 0.989912, 0.986796, 0.983537, 0.979326, 0.974792, 0.969140,
+ 0.963160, 0.956222, 0.948807, 0.940518, 0.931755, 0.922452, 0.912319, 0.902227, 0.891142,
+ 0.879838, 0.868047, 0.855745, 0.842718, 0.829827, 0.816398, 0.802786, 0.789396, 0.776581,
+ 0.764901, 0.753710, 0.742102, 0.730448, 0.718337, 0.705768, 0.693172, 0.680153, 0.666882,
+ 0.653401, 0.639837, 0.626152, 0.612676, 0.599435, 0.586109, 0.572473, 0.558715, 0.544964,
+ 0.531112, 0.517416, 0.503992, 0.490653, 0.477162, 0.463832, 0.450645, 1.000000, 1.000000,
+ 0.999999, 0.999992, 0.999973, 0.999933, 0.999861, 0.999741, 0.999554, 0.999267, 0.998411,
+ 0.996303, 0.995191, 0.993945, 0.991406, 0.989019, 0.985720, 0.982057, 0.977501, 0.972605,
+ 0.966697, 0.960340, 0.953031, 0.945347, 0.936866, 0.927917, 0.918562, 0.908598, 0.898486,
+ 0.887794, 0.876545, 0.865379, 0.853428, 0.841167, 0.828649, 0.815967, 0.802957, 0.789865,
+ 0.777077, 0.764695, 0.753544, 0.742694, 0.731571, 0.720304, 0.708490, 0.696351, 0.684134,
+ 0.671470, 0.658541, 0.645376, 0.632209, 0.618776, 0.605511, 0.592527, 0.579546, 0.566310,
+ 0.552860, 0.539492, 0.526005, 0.512564, 0.499340, 0.486360, 0.473357, 0.460306, 1.000000,
+ 1.000000, 0.999998, 0.999991, 0.999970, 0.999926, 0.999842, 0.999710, 0.999498, 0.999164,
+ 0.997464, 0.995870, 0.994917, 0.992911, 0.990682, 0.987816, 0.984410, 0.980551, 0.975693,
+ 0.970263, 0.963946, 0.957248, 0.949765, 0.941571, 0.932941, 0.923873, 0.914332, 0.904560,
+ 0.894394, 0.884127, 0.873294, 0.862503, 0.851335, 0.839566, 0.827776, 0.815708, 0.803370,
+ 0.790821, 0.778386, 0.766121, 0.754193, 0.743420, 0.732975, 0.722326, 0.711376, 0.699992,
+ 0.688180, 0.676354, 0.664004, 0.651449, 0.638600, 0.625776, 0.612660, 0.599603, 0.586719,
+ 0.574078, 0.561273, 0.548129, 0.535155, 0.522015, 0.508851, 0.495837, 0.483190, 0.470624,
+ 1.000000, 1.000000, 0.999998, 0.999988, 0.999965, 0.999916, 0.999823, 0.999669, 0.999425,
+ 0.999025, 0.996874, 0.995670, 0.994415, 0.991991, 0.989766, 0.986646, 0.982812, 0.978356,
+ 0.973317, 0.967612, 0.960820, 0.953603, 0.945969, 0.937323, 0.928661, 0.919507, 0.909833,
+ 0.900245, 0.890390, 0.880252, 0.870000, 0.859518, 0.849163, 0.838101, 0.826960, 0.815688,
+ 0.804126, 0.792234, 0.780356, 0.768474, 0.756678, 0.745159, 0.734601, 0.724624, 0.714339,
+ 0.703751, 0.692766, 0.681267, 0.669799, 0.657871, 0.645577, 0.633102, 0.620560, 0.607737,
+ 0.594890, 0.582143, 0.569779, 0.557360, 0.544651, 0.531942, 0.519228, 0.506467, 0.493710,
+ 0.481143, 1.000000, 1.000000, 0.999998, 0.999988, 0.999961, 0.999902, 0.999798, 0.999622,
+ 0.999341, 0.998801, 0.996397, 0.995225, 0.993927, 0.991338, 0.988500, 0.985327, 0.981195,
+ 0.976383, 0.970726, 0.964471, 0.957386, 0.949813, 0.941694, 0.932681, 0.923974, 0.914755,
+ 0.905026, 0.895649, 0.886178, 0.876277, 0.866629, 0.856890, 0.846934, 0.836887, 0.826373,
+ 0.815885, 0.805169, 0.794133, 0.782812, 0.771547, 0.760175, 0.748896, 0.737687, 0.727152,
+ 0.717601, 0.707670, 0.697425, 0.686788, 0.675664, 0.664513, 0.652962, 0.640965, 0.628851,
+ 0.616551, 0.604168, 0.591559, 0.579009, 0.566648, 0.554597, 0.542382, 0.529999, 0.517655,
+ 0.505254, 0.492894, 1.000000, 1.000000, 0.999997, 0.999986, 0.999956, 0.999889, 0.999766,
+ 0.999562, 0.999240, 0.997952, 0.996094, 0.994979, 0.992773, 0.990536, 0.987214, 0.983322,
+ 0.978938, 0.973714, 0.967681, 0.960981, 0.953144, 0.945475, 0.936909, 0.927734, 0.918826,
+ 0.909590, 0.900085, 0.890867, 0.881801, 0.872565, 0.863236, 0.854239, 0.845060, 0.835686,
+ 0.826251, 0.816284, 0.806586, 0.796419, 0.785914, 0.775210, 0.764461, 0.753599, 0.742805,
+ 0.731872, 0.721370, 0.711898, 0.702337, 0.692383, 0.682137, 0.671365, 0.660479, 0.649314,
+ 0.637685, 0.625899, 0.613898, 0.601865, 0.589582, 0.577285, 0.565013, 0.553106, 0.541280,
+ 0.529367, 0.517320, 0.505411, 1.000000, 1.000000, 0.999997, 0.999983, 0.999948, 0.999869,
+ 0.999732, 0.999499, 0.999111, 0.997167, 0.995720, 0.994349, 0.991727, 0.989197, 0.985883,
+ 0.981483, 0.976618, 0.970597, 0.964122, 0.956994, 0.948639, 0.940500, 0.931606, 0.922385,
+ 0.913291, 0.904205, 0.894938, 0.885890, 0.877334, 0.868754, 0.860053, 0.851683, 0.843447,
+ 0.834889, 0.826304, 0.817441, 0.808285, 0.799141, 0.789570, 0.779600, 0.769510, 0.759155,
+ 0.748882, 0.738346, 0.727629, 0.717273, 0.707467, 0.698283, 0.688609, 0.678748, 0.668371,
+ 0.657739, 0.646951, 0.635765, 0.624254, 0.612647, 0.600900, 0.589061, 0.576998, 0.564991,
+ 0.553102, 0.541517, 0.530027, 0.518495, 1.000000, 1.000000, 0.999997, 0.999983, 0.999939,
+ 0.999851, 0.999684, 0.999412, 0.998925, 0.996597, 0.995207, 0.993603, 0.990903, 0.987594,
+ 0.983814, 0.979016, 0.973647, 0.967048, 0.960109, 0.952123, 0.943560, 0.934900, 0.925747,
+ 0.916566, 0.907305, 0.898441, 0.889629, 0.881042, 0.872874, 0.865064, 0.857225, 0.849446,
+ 0.842063, 0.834561, 0.826814, 0.818875, 0.810748, 0.802316, 0.793699, 0.784704, 0.775198,
+ 0.765643, 0.755735, 0.745873, 0.735526, 0.725229, 0.714892, 0.704807, 0.695502, 0.686241,
+ 0.676633, 0.666688, 0.656384, 0.645871, 0.635174, 0.624113, 0.612788, 0.601426, 0.589925,
+ 0.578399, 0.566612, 0.554931, 0.543383, 0.532065, 1.000000, 1.000000, 0.999996, 0.999977,
+ 0.999928, 0.999824, 0.999633, 0.999306, 0.998429, 0.996133, 0.994890, 0.992316, 0.989752,
+ 0.986095, 0.981564, 0.976234, 0.970081, 0.962779, 0.955232, 0.946702, 0.937716, 0.928604,
+ 0.919281, 0.910167, 0.901046, 0.892446, 0.884183, 0.876253, 0.868619, 0.861545, 0.854673,
+ 0.847885, 0.841074, 0.834610, 0.827984, 0.820945, 0.813648, 0.806232, 0.798444, 0.790232,
+ 0.781853, 0.772897, 0.763648, 0.754227, 0.744542, 0.734689, 0.724526, 0.714204, 0.704152,
+ 0.694222, 0.685143, 0.675860, 0.666319, 0.656415, 0.646273, 0.635902, 0.625399, 0.614563,
+ 0.603490, 0.592413, 0.581217, 0.570000, 0.558608, 0.547242, 1.000000, 0.999999, 0.999995,
+ 0.999972, 0.999915, 0.999790, 0.999562, 0.999168, 0.997237, 0.995672, 0.994074, 0.991220,
+ 0.987792, 0.983822, 0.978599, 0.972804, 0.965718, 0.958053, 0.949460, 0.940503, 0.931011,
+ 0.921608, 0.912409, 0.903378, 0.894606, 0.886369, 0.878756, 0.871573, 0.864862, 0.858421,
+ 0.852541, 0.846802, 0.841027, 0.835206, 0.829628, 0.823730, 0.817415, 0.810655, 0.803873,
+ 0.796659, 0.788887, 0.780940, 0.772537, 0.763507, 0.754487, 0.745163, 0.735572, 0.725687,
+ 0.715611, 0.705398, 0.695418, 0.685592, 0.676518, 0.667304, 0.657875, 0.648182, 0.638235,
+ 0.628062, 0.617813, 0.607283, 0.596552, 0.585770, 0.575033, 0.564153, 1.000000, 1.000000,
+ 0.999995, 0.999970, 0.999898, 0.999748, 0.999472, 0.998969, 0.996528, 0.995102, 0.992701,
+ 0.989963, 0.985981, 0.981194, 0.975183, 0.968501, 0.960502, 0.952012, 0.942861, 0.933376,
+ 0.923506, 0.914042, 0.904921, 0.896282, 0.887987, 0.880341, 0.873536, 0.867293, 0.861556,
+ 0.856148, 0.850987, 0.846352, 0.841684, 0.836880, 0.832036, 0.827091, 0.821900, 0.816206,
+ 0.810042, 0.803629, 0.796918, 0.789653, 0.781915, 0.774014, 0.765530, 0.756526, 0.747669,
+ 0.738342, 0.728770, 0.718942, 0.708942, 0.698855, 0.688933, 0.679131, 0.669855, 0.660811,
+ 0.651549, 0.642127, 0.632454, 0.622651, 0.612709, 0.602606, 0.592344, 0.581877, 1.000000,
+ 0.999999, 0.999993, 0.999963, 0.999874, 0.999691, 0.999350, 0.998431, 0.995873, 0.994456,
+ 0.991327, 0.987798, 0.983232, 0.977500, 0.970828, 0.962815, 0.954228, 0.944752, 0.935126,
+ 0.925179, 0.915102, 0.905763, 0.897087, 0.888933, 0.881452, 0.874687, 0.868716, 0.863585,
+ 0.858931, 0.854662, 0.850569, 0.846719, 0.843151, 0.839426, 0.835588, 0.831443, 0.827004,
+ 0.822395, 0.817254, 0.811630, 0.805464, 0.799124, 0.792382, 0.785091, 0.777315, 0.769360,
+ 0.760908, 0.751957, 0.743128, 0.733917, 0.724340, 0.714713, 0.704721, 0.694835, 0.684862,
+ 0.675099, 0.665570, 0.656644, 0.647651, 0.638581, 0.629337, 0.619926, 0.610358, 0.600707,
+ 1.000000, 1.000000, 0.999990, 0.999953, 0.999843, 0.999613, 0.999186, 0.997025, 0.995317,
+ 0.992850, 0.989760, 0.985270, 0.979807, 0.973049, 0.965228, 0.956248, 0.946394, 0.936324,
+ 0.926124, 0.915808, 0.905942, 0.897060, 0.889001, 0.881755, 0.875351, 0.869688, 0.864736,
+ 0.860745, 0.857305, 0.854190, 0.851261, 0.848484, 0.845642, 0.842948, 0.840060, 0.836901,
+ 0.833379, 0.829393, 0.825103, 0.820431, 0.815288, 0.809575, 0.803326, 0.796949, 0.790174,
+ 0.782873, 0.775048, 0.767139, 0.758772, 0.750019, 0.741120, 0.732127, 0.722743, 0.713225,
+ 0.703637, 0.693768, 0.684016, 0.674277, 0.664703, 0.655328, 0.646550, 0.637812, 0.629036,
+ 0.620129, 1.000000, 1.000000, 0.999988, 0.999933, 0.999800, 0.999508, 0.998917, 0.996236,
+ 0.994617, 0.991176, 0.987089, 0.981880, 0.974966, 0.967156, 0.957914, 0.947585, 0.936937,
+ 0.926318, 0.915662, 0.905567, 0.896223, 0.888166, 0.881117, 0.875079, 0.869981, 0.865675,
+ 0.862091, 0.859183, 0.856981, 0.855065, 0.853273, 0.851572, 0.849782, 0.847768, 0.845668,
+ 0.843345, 0.840703, 0.837646, 0.834094, 0.830030, 0.825631, 0.820873, 0.815619, 0.809856,
+ 0.803578, 0.797096, 0.790359, 0.783152, 0.775507, 0.767504, 0.759411, 0.750982, 0.742208,
+ 0.733383, 0.724445, 0.715190, 0.705827, 0.696440, 0.686773, 0.677242, 0.667735, 0.658471,
+ 0.649236, 0.640305, 1.000000, 0.999999, 0.999984, 0.999918, 0.999737, 0.999350, 0.997576,
+ 0.995476, 0.992614, 0.988817, 0.983601, 0.976880, 0.968694, 0.959092, 0.948297, 0.936831,
+ 0.925592, 0.914494, 0.904159, 0.894643, 0.886417, 0.879620, 0.874023, 0.869533, 0.865967,
+ 0.863238, 0.861113, 0.859527, 0.858367, 0.857594, 0.856882, 0.856172, 0.855316, 0.854197,
+ 0.852818, 0.851062, 0.849046, 0.846747, 0.844043, 0.840842, 0.837164, 0.832985, 0.828344,
+ 0.823544, 0.818276, 0.812543, 0.806374, 0.799838, 0.793170, 0.786246, 0.778956, 0.771297,
+ 0.763278, 0.755252, 0.746984, 0.738445, 0.729688, 0.721045, 0.712189, 0.703099, 0.694045,
+ 0.684930, 0.675601, 0.666480, 1.000000, 0.999999, 0.999978, 0.999888, 0.999639, 0.999093,
+ 0.996310, 0.994405, 0.990527, 0.985186, 0.978518, 0.969748, 0.959597, 0.948104, 0.935724,
+ 0.923704, 0.912023, 0.901356, 0.891850, 0.883847, 0.877280, 0.872289, 0.868583, 0.865913,
+ 0.864098, 0.862993, 0.862356, 0.862125, 0.862107, 0.862168, 0.862359, 0.862490, 0.862430,
+ 0.862063, 0.861431, 0.860386, 0.858950, 0.857090, 0.854848, 0.852381, 0.849503, 0.846167,
+ 0.842399, 0.838194, 0.833566, 0.828579, 0.823464, 0.817951, 0.812079, 0.805873, 0.799320,
+ 0.792533, 0.785715, 0.778636, 0.771260, 0.763618, 0.755719, 0.747815, 0.739825, 0.731602,
+ 0.723212, 0.714845, 0.706465, 0.697933, 1.000000, 0.999998, 0.999969, 0.999836, 0.999475,
+ 0.997943, 0.995219, 0.991760, 0.986663, 0.979592, 0.970218, 0.959155, 0.946575, 0.933047,
+ 0.920022, 0.907749, 0.896801, 0.887506, 0.880077, 0.874322, 0.870126, 0.867481, 0.865949,
+ 0.865293, 0.865287, 0.865746, 0.866502, 0.867439, 0.868442, 0.869382, 0.870161, 0.870782,
+ 0.871303, 0.871511, 0.871427, 0.870978, 0.870136, 0.868892, 0.867248, 0.865209, 0.862775,
+ 0.859944, 0.857004, 0.853671, 0.849984, 0.845927, 0.841518, 0.836774, 0.831750, 0.826407,
+ 0.821001, 0.815333, 0.809412, 0.803238, 0.796802, 0.790204, 0.783457, 0.776713, 0.769749,
+ 0.762596, 0.755239, 0.747690, 0.740127, 0.732595, 1.000000, 0.999997, 0.999950, 0.999744,
+ 0.999162, 0.996124, 0.992844, 0.987757, 0.980062, 0.969642, 0.957087, 0.942735, 0.927747,
+ 0.913622, 0.900889, 0.890115, 0.881584, 0.875288, 0.870926, 0.868307, 0.867033, 0.866972,
+ 0.867692, 0.868950, 0.870549, 0.872320, 0.874144, 0.875947, 0.877674, 0.879192, 0.880478,
+ 0.881539, 0.882307, 0.882739, 0.882902, 0.882847, 0.882461, 0.881725, 0.880636, 0.879197,
+ 0.877422, 0.875296, 0.872849, 0.870076, 0.866988, 0.863637, 0.860159, 0.856475, 0.852525,
+ 0.848328, 0.843883, 0.839198, 0.834322, 0.829221, 0.823907, 0.818461, 0.812972, 0.807316,
+ 0.801474, 0.795459, 0.789276, 0.783025, 0.776615, 0.770223, 0.999999, 0.999994, 0.999909,
+ 0.999536, 0.997195, 0.994123, 0.988168, 0.979344, 0.967003, 0.951763, 0.934724, 0.917948,
+ 0.902918, 0.890432, 0.880902, 0.874401, 0.870394, 0.868503, 0.868209, 0.869062, 0.870725,
+ 0.873006, 0.875558, 0.878230, 0.880893, 0.883445, 0.885832, 0.888059, 0.890058, 0.891782,
+ 0.893247, 0.894460, 0.895397, 0.896023, 0.896380, 0.896433, 0.896198, 0.895673, 0.894865,
+ 0.893908, 0.892700, 0.891224, 0.889501, 0.887539, 0.885336, 0.882903, 0.880244, 0.877373,
+ 0.874296, 0.871019, 0.867549, 0.863933, 0.860153, 0.856355, 0.852395, 0.848277, 0.844006,
+ 0.839587, 0.835045, 0.830378, 0.825579, 0.820649, 0.815592, 0.810432, 0.999998, 0.999988,
+ 0.999795, 0.998892, 0.994635, 0.987290, 0.975397, 0.958508, 0.938352, 0.917733, 0.899800,
+ 0.885878, 0.876516, 0.871200, 0.869099, 0.869317, 0.871112, 0.873870, 0.877160, 0.880682,
+ 0.884228, 0.887737, 0.891076, 0.894161, 0.896981, 0.899543, 0.901847, 0.903882, 0.905672,
+ 0.907188, 0.908451, 0.909480, 0.910289, 0.910878, 0.911259, 0.911430, 0.911396, 0.911154,
+ 0.910712, 0.910081, 0.909266, 0.908264, 0.907094, 0.905752, 0.904244, 0.902577, 0.900799,
+ 0.898931, 0.896923, 0.894782, 0.892513, 0.890117, 0.887600, 0.884968, 0.882222, 0.879369,
+ 0.876408, 0.873345, 0.870183, 0.866926, 0.863575, 0.860160, 0.856672, 0.853098, 0.999991,
+ 0.999947, 0.999158, 0.992842, 0.980107, 0.957230, 0.928231, 0.901539, 0.882688, 0.872588,
+ 0.869394, 0.870671, 0.874458, 0.879378, 0.884639, 0.889770, 0.894601, 0.898972, 0.902930,
+ 0.906456, 0.909568, 0.912329, 0.914750, 0.916893, 0.918774, 0.920429, 0.921868, 0.923110,
+ 0.924185, 0.925089, 0.925842, 0.926457, 0.926934, 0.927285, 0.927522, 0.927639, 0.927650,
+ 0.927553, 0.927356, 0.927061, 0.926671, 0.926187, 0.925617, 0.924962, 0.924224, 0.923409,
+ 0.922519, 0.921555, 0.920521, 0.919419, 0.918252, 0.917021, 0.915729, 0.914377, 0.912967,
+ 0.911503, 0.909984, 0.908414, 0.906791, 0.905122, 0.903401, 0.901637, 0.899826, 0.897972,
+ 0.987461, 0.940121, 0.871507, 0.898572, 0.916705, 0.926425, 0.931922, 0.935265, 0.937431,
+ 0.938899, 0.939950, 0.940717, 0.941301, 0.941754, 0.942111, 0.942397, 0.942631, 0.942823,
+ 0.942983, 0.943117, 0.943231, 0.943329, 0.943412, 0.943484, 0.943545, 0.943599, 0.943644,
+ 0.943682, 0.943716, 0.943744, 0.943766, 0.943785, 0.943799, 0.943808, 0.943815, 0.943818,
+ 0.943818, 0.943814, 0.943807, 0.943797, 0.943784, 0.943769, 0.943751, 0.943730, 0.943707,
+ 0.943681, 0.943652, 0.943623, 0.943589, 0.943554, 0.943518, 0.943479, 0.943438, 0.943396,
+ 0.943351, 0.943305, 0.943257, 0.943207, 0.943156, 0.943104, 0.943049, 0.942993, 0.942936,
+ 0.942877,
+};
+
+static float bsdf_split_sum_ggx[64 * 64 * 2] = {
+ 1.000000f, 0.000000f, 1.000000f, 0.000000f, 1.000000f, 0.000000f, 1.000000f, 0.000000f,
+ 1.000000f, 0.000000f, 1.000000f, 0.000000f, 0.999512f, 0.000000f, 0.999512f, 0.000000f,
+ 0.999512f, 0.000000f, 0.999023f, 0.000001f, 0.999023f, 0.000001f, 0.998535f, 0.000001f,
+ 0.998047f, 0.000001f, 0.997559f, 0.000002f, 0.997070f, 0.000003f, 0.996094f, 0.000004f,
+ 0.994629f, 0.000004f, 0.993652f, 0.000006f, 0.991699f, 0.000007f, 0.989746f, 0.000008f,
+ 0.987305f, 0.000010f, 0.984375f, 0.000012f, 0.980957f, 0.000013f, 0.977539f, 0.000016f,
+ 0.973145f, 0.000018f, 0.967773f, 0.000020f, 0.961914f, 0.000023f, 0.955566f, 0.000025f,
+ 0.947754f, 0.000028f, 0.939941f, 0.000031f, 0.930664f, 0.000033f, 0.920410f, 0.000036f,
+ 0.909180f, 0.000039f, 0.896973f, 0.000042f, 0.884277f, 0.000044f, 0.870117f, 0.000047f,
+ 0.854980f, 0.000049f, 0.838867f, 0.000051f, 0.821777f, 0.000053f, 0.803711f, 0.000055f,
+ 0.785156f, 0.000057f, 0.765625f, 0.000058f, 0.745605f, 0.000059f, 0.724609f, 0.000060f,
+ 0.703613f, 0.000061f, 0.681641f, 0.000061f, 0.659668f, 0.000061f, 0.637695f, 0.000061f,
+ 0.615234f, 0.000061f, 0.592773f, 0.000060f, 0.570801f, 0.000060f, 0.548340f, 0.000059f,
+ 0.526855f, 0.000058f, 0.504883f, 0.000057f, 0.483887f, 0.000055f, 0.462891f, 0.000054f,
+ 0.442627f, 0.000053f, 0.422607f, 0.000051f, 0.403320f, 0.000050f, 0.384766f, 0.000048f,
+ 0.366455f, 0.000046f, 0.348877f, 0.000045f, 0.332031f, 0.000043f, 0.315918f, 0.000041f,
+ 0.999512f, 0.000000f, 0.999512f, 0.000000f, 1.000000f, 0.000000f, 1.000000f, 0.000000f,
+ 0.999512f, 0.000000f, 1.000000f, 0.000000f, 0.999512f, 0.000000f, 0.999512f, 0.000000f,
+ 0.999512f, 0.000000f, 0.999023f, 0.000001f, 0.999023f, 0.000001f, 0.998535f, 0.000002f,
+ 0.998047f, 0.000003f, 0.997559f, 0.000004f, 0.997070f, 0.000005f, 0.996094f, 0.000006f,
+ 0.994629f, 0.000008f, 0.993164f, 0.000010f, 0.991699f, 0.000012f, 0.989746f, 0.000015f,
+ 0.987305f, 0.000018f, 0.984375f, 0.000020f, 0.980957f, 0.000024f, 0.977051f, 0.000027f,
+ 0.972168f, 0.000031f, 0.967285f, 0.000035f, 0.961426f, 0.000039f, 0.954590f, 0.000043f,
+ 0.947266f, 0.000048f, 0.938965f, 0.000052f, 0.929199f, 0.000057f, 0.919434f, 0.000061f,
+ 0.908203f, 0.000065f, 0.895996f, 0.000069f, 0.882812f, 0.000073f, 0.868652f, 0.000077f,
+ 0.853027f, 0.000080f, 0.837402f, 0.000083f, 0.820312f, 0.000086f, 0.802246f, 0.000088f,
+ 0.783691f, 0.000090f, 0.764160f, 0.000092f, 0.744141f, 0.000093f, 0.723633f, 0.000093f,
+ 0.702637f, 0.000094f, 0.681152f, 0.000094f, 0.659180f, 0.000093f, 0.637207f, 0.000093f,
+ 0.615234f, 0.000091f, 0.593262f, 0.000090f, 0.571289f, 0.000088f, 0.549316f, 0.000087f,
+ 0.527344f, 0.000085f, 0.505859f, 0.000082f, 0.485107f, 0.000080f, 0.464355f, 0.000078f,
+ 0.444336f, 0.000075f, 0.424561f, 0.000072f, 0.405273f, 0.000070f, 0.386719f, 0.000067f,
+ 0.368652f, 0.000065f, 0.351318f, 0.000062f, 0.334473f, 0.000059f, 0.318115f, 0.000057f,
+ 0.999512f, 0.000000f, 0.999512f, 0.000000f, 0.999512f, 0.000000f, 1.000000f, 0.000000f,
+ 0.999512f, 0.000000f, 0.999512f, 0.000000f, 0.999512f, 0.000001f, 0.999512f, 0.000001f,
+ 0.999512f, 0.000001f, 0.999512f, 0.000003f, 0.999023f, 0.000002f, 0.998535f, 0.000004f,
+ 0.998047f, 0.000005f, 0.997559f, 0.000007f, 0.997070f, 0.000009f, 0.996094f, 0.000011f,
+ 0.994629f, 0.000013f, 0.993164f, 0.000017f, 0.991211f, 0.000020f, 0.989258f, 0.000024f,
+ 0.986816f, 0.000028f, 0.983887f, 0.000033f, 0.980469f, 0.000038f, 0.976562f, 0.000043f,
+ 0.971680f, 0.000049f, 0.966797f, 0.000055f, 0.960449f, 0.000062f, 0.953613f, 0.000068f,
+ 0.946289f, 0.000075f, 0.937500f, 0.000081f, 0.928223f, 0.000088f, 0.917969f, 0.000094f,
+ 0.906738f, 0.000100f, 0.894531f, 0.000106f, 0.880859f, 0.000111f, 0.866699f, 0.000116f,
+ 0.851562f, 0.000120f, 0.835449f, 0.000124f, 0.818359f, 0.000127f, 0.800781f, 0.000130f,
+ 0.782227f, 0.000132f, 0.762695f, 0.000134f, 0.742676f, 0.000134f, 0.722656f, 0.000135f,
+ 0.701660f, 0.000134f, 0.680176f, 0.000133f, 0.658691f, 0.000132f, 0.636719f, 0.000130f,
+ 0.615234f, 0.000128f, 0.593262f, 0.000125f, 0.571289f, 0.000123f, 0.549805f, 0.000119f,
+ 0.528320f, 0.000116f, 0.507324f, 0.000112f, 0.486328f, 0.000109f, 0.466064f, 0.000105f,
+ 0.446045f, 0.000101f, 0.426514f, 0.000097f, 0.407471f, 0.000093f, 0.388916f, 0.000089f,
+ 0.370850f, 0.000085f, 0.353516f, 0.000082f, 0.336914f, 0.000078f, 0.320557f, 0.000074f,
+ 1.000000f, 0.000000f, 0.999512f, 0.000000f, 0.999512f, 0.000000f, 0.999512f, 0.000000f,
+ 1.000000f, 0.000000f, 1.000000f, 0.000001f, 0.999512f, 0.000001f, 0.999512f, 0.000002f,
+ 0.999512f, 0.000002f, 0.999023f, 0.000003f, 0.999023f, 0.000005f, 0.998535f, 0.000006f,
+ 0.998535f, 0.000008f, 0.997559f, 0.000011f, 0.997070f, 0.000014f, 0.996094f, 0.000017f,
+ 0.994629f, 0.000020f, 0.993164f, 0.000026f, 0.991211f, 0.000030f, 0.989258f, 0.000036f,
+ 0.986816f, 0.000043f, 0.983398f, 0.000050f, 0.979980f, 0.000058f, 0.976074f, 0.000066f,
+ 0.971191f, 0.000074f, 0.965820f, 0.000082f, 0.959961f, 0.000093f, 0.952637f, 0.000101f,
+ 0.945312f, 0.000111f, 0.936523f, 0.000120f, 0.927246f, 0.000129f, 0.916504f, 0.000137f,
+ 0.905273f, 0.000145f, 0.892578f, 0.000153f, 0.879395f, 0.000160f, 0.865234f, 0.000166f,
+ 0.850098f, 0.000171f, 0.833984f, 0.000176f, 0.816895f, 0.000179f, 0.799316f, 0.000182f,
+ 0.780762f, 0.000184f, 0.761230f, 0.000185f, 0.741699f, 0.000185f, 0.721191f, 0.000184f,
+ 0.700684f, 0.000183f, 0.679688f, 0.000181f, 0.658203f, 0.000178f, 0.636719f, 0.000175f,
+ 0.615234f, 0.000171f, 0.593262f, 0.000167f, 0.571777f, 0.000162f, 0.550293f, 0.000158f,
+ 0.529297f, 0.000152f, 0.508301f, 0.000147f, 0.487793f, 0.000142f, 0.467529f, 0.000136f,
+ 0.447754f, 0.000131f, 0.428223f, 0.000125f, 0.409424f, 0.000120f, 0.391113f, 0.000115f,
+ 0.373291f, 0.000109f, 0.355957f, 0.000104f, 0.339355f, 0.000099f, 0.323242f, 0.000094f,
+ 0.999512f, 0.000002f, 0.999512f, 0.000002f, 1.000000f, 0.000002f, 0.999512f, 0.000002f,
+ 1.000000f, 0.000002f, 0.999512f, 0.000002f, 0.999512f, 0.000002f, 0.999512f, 0.000003f,
+ 0.999512f, 0.000004f, 0.999512f, 0.000005f, 0.999023f, 0.000007f, 0.998535f, 0.000010f,
+ 0.998047f, 0.000012f, 0.997559f, 0.000017f, 0.996582f, 0.000020f, 0.995605f, 0.000025f,
+ 0.994629f, 0.000032f, 0.993164f, 0.000038f, 0.991211f, 0.000047f, 0.988770f, 0.000055f,
+ 0.986328f, 0.000063f, 0.983398f, 0.000074f, 0.979492f, 0.000085f, 0.975586f, 0.000095f,
+ 0.970703f, 0.000108f, 0.965332f, 0.000121f, 0.958984f, 0.000132f, 0.952148f, 0.000145f,
+ 0.944336f, 0.000157f, 0.935547f, 0.000170f, 0.925781f, 0.000181f, 0.915039f, 0.000192f,
+ 0.903809f, 0.000203f, 0.891113f, 0.000212f, 0.877930f, 0.000220f, 0.863281f, 0.000227f,
+ 0.848145f, 0.000234f, 0.832031f, 0.000239f, 0.814941f, 0.000242f, 0.797363f, 0.000245f,
+ 0.778809f, 0.000247f, 0.759766f, 0.000247f, 0.740234f, 0.000246f, 0.720215f, 0.000244f,
+ 0.699707f, 0.000241f, 0.678711f, 0.000237f, 0.657715f, 0.000233f, 0.636230f, 0.000228f,
+ 0.614746f, 0.000222f, 0.593750f, 0.000216f, 0.572266f, 0.000209f, 0.551270f, 0.000202f,
+ 0.530273f, 0.000195f, 0.509277f, 0.000187f, 0.489014f, 0.000180f, 0.468994f, 0.000172f,
+ 0.449463f, 0.000165f, 0.430176f, 0.000157f, 0.411377f, 0.000150f, 0.393311f, 0.000143f,
+ 0.375488f, 0.000136f, 0.358398f, 0.000129f, 0.341797f, 0.000123f, 0.325684f, 0.000116f,
+ 0.999512f, 0.000005f, 0.999512f, 0.000005f, 0.999512f, 0.000005f, 0.999512f, 0.000005f,
+ 0.999512f, 0.000005f, 0.999512f, 0.000005f, 0.999512f, 0.000006f, 0.999512f, 0.000007f,
+ 0.999512f, 0.000008f, 0.999512f, 0.000011f, 0.999023f, 0.000013f, 0.998535f, 0.000015f,
+ 0.998047f, 0.000019f, 0.997559f, 0.000026f, 0.996582f, 0.000033f, 0.995605f, 0.000040f,
+ 0.994141f, 0.000047f, 0.993164f, 0.000058f, 0.991211f, 0.000069f, 0.988770f, 0.000080f,
+ 0.985840f, 0.000093f, 0.982910f, 0.000106f, 0.979004f, 0.000121f, 0.975098f, 0.000137f,
+ 0.970215f, 0.000153f, 0.964355f, 0.000169f, 0.958008f, 0.000186f, 0.951172f, 0.000201f,
+ 0.943359f, 0.000218f, 0.934082f, 0.000233f, 0.924316f, 0.000248f, 0.914062f, 0.000262f,
+ 0.902344f, 0.000275f, 0.889648f, 0.000286f, 0.875977f, 0.000295f, 0.861816f, 0.000304f,
+ 0.846680f, 0.000311f, 0.830566f, 0.000316f, 0.813477f, 0.000319f, 0.795898f, 0.000321f,
+ 0.777344f, 0.000322f, 0.758301f, 0.000320f, 0.739258f, 0.000318f, 0.719238f, 0.000314f,
+ 0.698730f, 0.000309f, 0.678223f, 0.000303f, 0.657227f, 0.000296f, 0.636230f, 0.000288f,
+ 0.614746f, 0.000280f, 0.593750f, 0.000271f, 0.572754f, 0.000262f, 0.551758f, 0.000252f,
+ 0.531250f, 0.000243f, 0.510742f, 0.000233f, 0.490479f, 0.000223f, 0.470703f, 0.000213f,
+ 0.451172f, 0.000203f, 0.432129f, 0.000194f, 0.413574f, 0.000184f, 0.395508f, 0.000175f,
+ 0.377930f, 0.000166f, 0.360840f, 0.000157f, 0.344238f, 0.000149f, 0.328125f, 0.000141f,
+ 0.999512f, 0.000011f, 0.999512f, 0.000011f, 0.999512f, 0.000011f, 0.999512f, 0.000011f,
+ 0.999512f, 0.000011f, 0.999512f, 0.000012f, 0.999512f, 0.000014f, 0.999512f, 0.000015f,
+ 0.999512f, 0.000017f, 0.999023f, 0.000020f, 0.998535f, 0.000022f, 0.998535f, 0.000028f,
+ 0.998047f, 0.000034f, 0.997559f, 0.000042f, 0.996582f, 0.000050f, 0.995605f, 0.000060f,
+ 0.994141f, 0.000072f, 0.992676f, 0.000084f, 0.990723f, 0.000099f, 0.988281f, 0.000115f,
+ 0.985840f, 0.000133f, 0.982422f, 0.000150f, 0.978516f, 0.000171f, 0.974609f, 0.000191f,
+ 0.969238f, 0.000211f, 0.963867f, 0.000232f, 0.957520f, 0.000253f, 0.950195f, 0.000274f,
+ 0.941895f, 0.000294f, 0.933105f, 0.000314f, 0.922852f, 0.000332f, 0.912109f, 0.000348f,
+ 0.900879f, 0.000363f, 0.888184f, 0.000377f, 0.874512f, 0.000387f, 0.859863f, 0.000397f,
+ 0.844727f, 0.000404f, 0.828613f, 0.000408f, 0.811523f, 0.000411f, 0.793945f, 0.000412f,
+ 0.775879f, 0.000411f, 0.756836f, 0.000407f, 0.737793f, 0.000403f, 0.717773f, 0.000396f,
+ 0.697754f, 0.000389f, 0.677246f, 0.000380f, 0.656738f, 0.000370f, 0.635742f, 0.000359f,
+ 0.614746f, 0.000347f, 0.594238f, 0.000335f, 0.573242f, 0.000323f, 0.552734f, 0.000310f,
+ 0.532227f, 0.000297f, 0.511719f, 0.000284f, 0.491943f, 0.000272f, 0.472412f, 0.000259f,
+ 0.453125f, 0.000246f, 0.434082f, 0.000234f, 0.415771f, 0.000222f, 0.397705f, 0.000211f,
+ 0.380127f, 0.000199f, 0.363281f, 0.000189f, 0.346680f, 0.000178f, 0.330811f, 0.000168f,
+ 0.999512f, 0.000022f, 0.999512f, 0.000022f, 0.999512f, 0.000022f, 0.999512f, 0.000022f,
+ 0.999512f, 0.000023f, 0.999512f, 0.000025f, 0.999512f, 0.000024f, 0.999512f, 0.000028f,
+ 0.999023f, 0.000030f, 0.999023f, 0.000035f, 0.999023f, 0.000040f, 0.998535f, 0.000046f,
+ 0.998047f, 0.000056f, 0.997559f, 0.000063f, 0.996094f, 0.000077f, 0.995605f, 0.000089f,
+ 0.994141f, 0.000106f, 0.992188f, 0.000123f, 0.990234f, 0.000143f, 0.987793f, 0.000163f,
+ 0.985352f, 0.000185f, 0.981934f, 0.000211f, 0.978027f, 0.000236f, 0.973633f, 0.000261f,
+ 0.968750f, 0.000288f, 0.962891f, 0.000314f, 0.956055f, 0.000341f, 0.949219f, 0.000366f,
+ 0.940918f, 0.000391f, 0.931641f, 0.000414f, 0.921875f, 0.000436f, 0.910645f, 0.000455f,
+ 0.898926f, 0.000471f, 0.886230f, 0.000487f, 0.872559f, 0.000499f, 0.858398f, 0.000509f,
+ 0.842773f, 0.000515f, 0.826660f, 0.000518f, 0.810059f, 0.000520f, 0.792480f, 0.000519f,
+ 0.774414f, 0.000515f, 0.755371f, 0.000509f, 0.736328f, 0.000501f, 0.716797f, 0.000492f,
+ 0.696777f, 0.000480f, 0.676758f, 0.000468f, 0.656250f, 0.000454f, 0.635742f, 0.000439f,
+ 0.615234f, 0.000424f, 0.594238f, 0.000408f, 0.573730f, 0.000392f, 0.553223f, 0.000375f,
+ 0.533203f, 0.000359f, 0.513184f, 0.000342f, 0.493408f, 0.000326f, 0.474121f, 0.000310f,
+ 0.455078f, 0.000294f, 0.436279f, 0.000279f, 0.417969f, 0.000264f, 0.400146f, 0.000250f,
+ 0.382812f, 0.000237f, 0.365723f, 0.000223f, 0.349365f, 0.000211f, 0.333496f, 0.000199f,
+ 0.999512f, 0.000041f, 0.999512f, 0.000041f, 0.999512f, 0.000041f, 0.999512f, 0.000042f,
+ 0.999512f, 0.000042f, 0.999512f, 0.000044f, 0.999512f, 0.000046f, 0.999512f, 0.000049f,
+ 0.999512f, 0.000054f, 0.999512f, 0.000059f, 0.999023f, 0.000065f, 0.998535f, 0.000076f,
+ 0.998047f, 0.000087f, 0.997070f, 0.000098f, 0.996582f, 0.000117f, 0.995117f, 0.000135f,
+ 0.993652f, 0.000152f, 0.992188f, 0.000176f, 0.989746f, 0.000201f, 0.987793f, 0.000228f,
+ 0.984863f, 0.000256f, 0.981445f, 0.000286f, 0.977539f, 0.000318f, 0.973145f, 0.000352f,
+ 0.967773f, 0.000384f, 0.961914f, 0.000417f, 0.955566f, 0.000451f, 0.947754f, 0.000481f,
+ 0.939453f, 0.000510f, 0.930176f, 0.000537f, 0.919922f, 0.000563f, 0.909180f, 0.000585f,
+ 0.897461f, 0.000604f, 0.884766f, 0.000620f, 0.871094f, 0.000632f, 0.856445f, 0.000641f,
+ 0.841309f, 0.000647f, 0.825195f, 0.000648f, 0.808105f, 0.000648f, 0.790527f, 0.000643f,
+ 0.772949f, 0.000637f, 0.754395f, 0.000627f, 0.735352f, 0.000615f, 0.715820f, 0.000601f,
+ 0.695801f, 0.000585f, 0.675781f, 0.000568f, 0.655762f, 0.000550f, 0.635742f, 0.000530f,
+ 0.615234f, 0.000510f, 0.594727f, 0.000490f, 0.574707f, 0.000469f, 0.554199f, 0.000448f,
+ 0.534180f, 0.000428f, 0.514648f, 0.000407f, 0.495117f, 0.000387f, 0.475830f, 0.000367f,
+ 0.456787f, 0.000348f, 0.438232f, 0.000329f, 0.420166f, 0.000311f, 0.402344f, 0.000294f,
+ 0.385254f, 0.000277f, 0.368408f, 0.000262f, 0.352051f, 0.000246f, 0.336182f, 0.000232f,
+ 0.999512f, 0.000072f, 0.999512f, 0.000072f, 0.999512f, 0.000072f, 0.999512f, 0.000072f,
+ 0.999512f, 0.000073f, 0.999512f, 0.000076f, 0.999512f, 0.000078f, 0.999512f, 0.000082f,
+ 0.999023f, 0.000086f, 0.999023f, 0.000095f, 0.998535f, 0.000102f, 0.998047f, 0.000116f,
+ 0.998047f, 0.000131f, 0.997070f, 0.000147f, 0.996094f, 0.000167f, 0.995117f, 0.000195f,
+ 0.993652f, 0.000219f, 0.991699f, 0.000246f, 0.989746f, 0.000278f, 0.987305f, 0.000315f,
+ 0.984375f, 0.000350f, 0.980957f, 0.000385f, 0.976562f, 0.000427f, 0.972168f, 0.000467f,
+ 0.967285f, 0.000509f, 0.960938f, 0.000548f, 0.954102f, 0.000587f, 0.946777f, 0.000623f,
+ 0.937988f, 0.000657f, 0.928711f, 0.000690f, 0.918457f, 0.000718f, 0.907715f, 0.000741f,
+ 0.895508f, 0.000762f, 0.882812f, 0.000778f, 0.869141f, 0.000791f, 0.854492f, 0.000798f,
+ 0.839355f, 0.000802f, 0.823242f, 0.000801f, 0.806152f, 0.000796f, 0.789062f, 0.000788f,
+ 0.770996f, 0.000777f, 0.752930f, 0.000762f, 0.733887f, 0.000745f, 0.714844f, 0.000726f,
+ 0.695312f, 0.000704f, 0.675293f, 0.000682f, 0.655273f, 0.000658f, 0.635254f, 0.000633f,
+ 0.615234f, 0.000607f, 0.595215f, 0.000582f, 0.575195f, 0.000556f, 0.555176f, 0.000530f,
+ 0.535645f, 0.000504f, 0.515625f, 0.000479f, 0.496582f, 0.000455f, 0.477539f, 0.000431f,
+ 0.458984f, 0.000407f, 0.440430f, 0.000385f, 0.422363f, 0.000363f, 0.404785f, 0.000343f,
+ 0.387695f, 0.000323f, 0.370850f, 0.000304f, 0.354736f, 0.000286f, 0.338867f, 0.000268f,
+ 0.999512f, 0.000119f, 0.999512f, 0.000119f, 0.999512f, 0.000119f, 0.999512f, 0.000119f,
+ 0.999512f, 0.000121f, 0.999512f, 0.000122f, 0.999512f, 0.000128f, 0.999512f, 0.000131f,
+ 0.999512f, 0.000139f, 0.999023f, 0.000149f, 0.998535f, 0.000161f, 0.998047f, 0.000179f,
+ 0.998047f, 0.000194f, 0.997070f, 0.000220f, 0.996094f, 0.000247f, 0.994629f, 0.000275f,
+ 0.993652f, 0.000309f, 0.991699f, 0.000344f, 0.989746f, 0.000385f, 0.986816f, 0.000429f,
+ 0.983887f, 0.000471f, 0.980469f, 0.000519f, 0.976074f, 0.000565f, 0.971680f, 0.000614f,
+ 0.966309f, 0.000664f, 0.959961f, 0.000710f, 0.953125f, 0.000754f, 0.945312f, 0.000797f,
+ 0.936523f, 0.000837f, 0.927246f, 0.000873f, 0.916992f, 0.000902f, 0.905762f, 0.000929f,
+ 0.893555f, 0.000950f, 0.880859f, 0.000966f, 0.866699f, 0.000977f, 0.852539f, 0.000981f,
+ 0.836914f, 0.000981f, 0.821289f, 0.000977f, 0.804688f, 0.000968f, 0.787109f, 0.000955f,
+ 0.769531f, 0.000937f, 0.751465f, 0.000917f, 0.732422f, 0.000894f, 0.713379f, 0.000868f,
+ 0.694336f, 0.000840f, 0.674805f, 0.000811f, 0.655273f, 0.000780f, 0.635254f, 0.000749f,
+ 0.615723f, 0.000716f, 0.595703f, 0.000685f, 0.575684f, 0.000653f, 0.556152f, 0.000621f,
+ 0.536621f, 0.000590f, 0.517090f, 0.000559f, 0.498291f, 0.000530f, 0.479492f, 0.000501f,
+ 0.460938f, 0.000473f, 0.442627f, 0.000446f, 0.424805f, 0.000420f, 0.407227f, 0.000396f,
+ 0.390137f, 0.000373f, 0.373535f, 0.000350f, 0.357422f, 0.000329f, 0.341553f, 0.000309f,
+ 0.999512f, 0.000187f, 0.999512f, 0.000187f, 0.999512f, 0.000188f, 0.999512f, 0.000188f,
+ 0.999512f, 0.000190f, 0.999512f, 0.000194f, 0.999512f, 0.000201f, 0.999023f, 0.000204f,
+ 0.999023f, 0.000213f, 0.999023f, 0.000228f, 0.998535f, 0.000242f, 0.998535f, 0.000264f,
+ 0.997559f, 0.000285f, 0.997070f, 0.000311f, 0.996094f, 0.000351f, 0.995117f, 0.000386f,
+ 0.993164f, 0.000429f, 0.991211f, 0.000470f, 0.989258f, 0.000520f, 0.986328f, 0.000575f,
+ 0.983398f, 0.000628f, 0.979492f, 0.000683f, 0.975586f, 0.000741f, 0.970703f, 0.000801f,
+ 0.965332f, 0.000855f, 0.958984f, 0.000910f, 0.951660f, 0.000961f, 0.943848f, 0.001009f,
+ 0.935059f, 0.001053f, 0.925781f, 0.001090f, 0.915039f, 0.001123f, 0.903809f, 0.001152f,
+ 0.891602f, 0.001172f, 0.878906f, 0.001186f, 0.864746f, 0.001194f, 0.850586f, 0.001195f,
+ 0.835449f, 0.001191f, 0.819336f, 0.001181f, 0.802734f, 0.001164f, 0.785645f, 0.001144f,
+ 0.768066f, 0.001121f, 0.750000f, 0.001092f, 0.731445f, 0.001061f, 0.712402f, 0.001027f,
+ 0.693359f, 0.000992f, 0.674316f, 0.000955f, 0.654785f, 0.000916f, 0.635254f, 0.000877f,
+ 0.615723f, 0.000838f, 0.596191f, 0.000799f, 0.576660f, 0.000760f, 0.557129f, 0.000721f,
+ 0.538086f, 0.000684f, 0.518555f, 0.000648f, 0.500000f, 0.000612f, 0.481445f, 0.000578f,
+ 0.462891f, 0.000545f, 0.444824f, 0.000513f, 0.427246f, 0.000483f, 0.409912f, 0.000454f,
+ 0.392822f, 0.000427f, 0.376221f, 0.000401f, 0.360107f, 0.000376f, 0.344482f, 0.000353f,
+ 0.999512f, 0.000284f, 0.999512f, 0.000284f, 0.999512f, 0.000284f, 0.999512f, 0.000285f,
+ 0.999512f, 0.000287f, 0.999512f, 0.000292f, 0.999512f, 0.000296f, 0.999023f, 0.000307f,
+ 0.999023f, 0.000320f, 0.999023f, 0.000338f, 0.998535f, 0.000349f, 0.998047f, 0.000381f,
+ 0.997559f, 0.000407f, 0.996582f, 0.000447f, 0.995605f, 0.000480f, 0.994629f, 0.000531f,
+ 0.992676f, 0.000579f, 0.990723f, 0.000637f, 0.988770f, 0.000693f, 0.985840f, 0.000755f,
+ 0.982422f, 0.000824f, 0.979004f, 0.000889f, 0.975098f, 0.000958f, 0.969727f, 0.001024f,
+ 0.963867f, 0.001090f, 0.957520f, 0.001152f, 0.950684f, 0.001211f, 0.942383f, 0.001263f,
+ 0.933594f, 0.001309f, 0.923828f, 0.001353f, 0.913086f, 0.001387f, 0.901855f, 0.001413f,
+ 0.889648f, 0.001432f, 0.876465f, 0.001443f, 0.862793f, 0.001446f, 0.848145f, 0.001442f,
+ 0.833008f, 0.001431f, 0.817383f, 0.001413f, 0.800781f, 0.001390f, 0.783691f, 0.001362f,
+ 0.766113f, 0.001328f, 0.748535f, 0.001291f, 0.729980f, 0.001250f, 0.711426f, 0.001207f,
+ 0.692871f, 0.001163f, 0.673828f, 0.001116f, 0.654785f, 0.001068f, 0.635254f, 0.001020f,
+ 0.616211f, 0.000973f, 0.596680f, 0.000926f, 0.577637f, 0.000878f, 0.558105f, 0.000833f,
+ 0.539062f, 0.000788f, 0.520508f, 0.000745f, 0.501465f, 0.000702f, 0.483154f, 0.000663f,
+ 0.465088f, 0.000624f, 0.447266f, 0.000587f, 0.429443f, 0.000552f, 0.412354f, 0.000518f,
+ 0.395508f, 0.000486f, 0.378906f, 0.000456f, 0.363037f, 0.000427f, 0.347168f, 0.000400f,
+ 0.999512f, 0.000417f, 0.999512f, 0.000417f, 0.999512f, 0.000418f, 0.999512f, 0.000419f,
+ 0.999512f, 0.000422f, 0.999512f, 0.000425f, 0.999023f, 0.000434f, 0.999023f, 0.000447f,
+ 0.999023f, 0.000462f, 0.999023f, 0.000480f, 0.998047f, 0.000508f, 0.998047f, 0.000538f,
+ 0.997070f, 0.000576f, 0.996582f, 0.000621f, 0.995605f, 0.000669f, 0.993652f, 0.000721f,
+ 0.992188f, 0.000784f, 0.990723f, 0.000849f, 0.987793f, 0.000918f, 0.985840f, 0.000996f,
+ 0.982422f, 0.001071f, 0.978516f, 0.001148f, 0.973633f, 0.001225f, 0.968750f, 0.001304f,
+ 0.962891f, 0.001378f, 0.956543f, 0.001447f, 0.948730f, 0.001511f, 0.940918f, 0.001568f,
+ 0.931641f, 0.001617f, 0.921875f, 0.001660f, 0.911621f, 0.001697f, 0.899902f, 0.001719f,
+ 0.887695f, 0.001735f, 0.874512f, 0.001740f, 0.860840f, 0.001738f, 0.846191f, 0.001725f,
+ 0.831055f, 0.001706f, 0.815430f, 0.001679f, 0.798828f, 0.001646f, 0.782227f, 0.001607f,
+ 0.764648f, 0.001562f, 0.747070f, 0.001514f, 0.729004f, 0.001462f, 0.710449f, 0.001409f,
+ 0.691895f, 0.001352f, 0.673340f, 0.001295f, 0.654297f, 0.001237f, 0.635254f, 0.001179f,
+ 0.616211f, 0.001122f, 0.597168f, 0.001065f, 0.578125f, 0.001010f, 0.559570f, 0.000955f,
+ 0.540527f, 0.000902f, 0.521973f, 0.000852f, 0.503418f, 0.000803f, 0.485352f, 0.000755f,
+ 0.467285f, 0.000710f, 0.449463f, 0.000668f, 0.431885f, 0.000626f, 0.414795f, 0.000587f,
+ 0.398193f, 0.000551f, 0.381836f, 0.000516f, 0.365723f, 0.000483f, 0.350098f, 0.000452f,
+ 0.999023f, 0.000597f, 0.999023f, 0.000597f, 0.999023f, 0.000597f, 0.999023f, 0.000598f,
+ 0.999023f, 0.000602f, 0.999023f, 0.000610f, 0.999023f, 0.000618f, 0.999023f, 0.000632f,
+ 0.998535f, 0.000651f, 0.998535f, 0.000675f, 0.998047f, 0.000704f, 0.997559f, 0.000742f,
+ 0.997070f, 0.000787f, 0.996094f, 0.000843f, 0.995117f, 0.000902f, 0.993652f, 0.000966f,
+ 0.992188f, 0.001039f, 0.990234f, 0.001117f, 0.987793f, 0.001197f, 0.984863f, 0.001286f,
+ 0.981445f, 0.001372f, 0.977539f, 0.001464f, 0.972656f, 0.001553f, 0.967773f, 0.001639f,
+ 0.961914f, 0.001722f, 0.955078f, 0.001798f, 0.947754f, 0.001868f, 0.938965f, 0.001928f,
+ 0.930176f, 0.001982f, 0.920410f, 0.002026f, 0.909668f, 0.002056f, 0.897949f, 0.002075f,
+ 0.885254f, 0.002085f, 0.872559f, 0.002083f, 0.858398f, 0.002071f, 0.844238f, 0.002048f,
+ 0.828613f, 0.002018f, 0.812988f, 0.001980f, 0.796875f, 0.001934f, 0.780273f, 0.001883f,
+ 0.763184f, 0.001824f, 0.745605f, 0.001763f, 0.728027f, 0.001698f, 0.709473f, 0.001632f,
+ 0.691406f, 0.001563f, 0.672852f, 0.001494f, 0.654297f, 0.001422f, 0.635254f, 0.001355f,
+ 0.616699f, 0.001286f, 0.598145f, 0.001218f, 0.579102f, 0.001152f, 0.560547f, 0.001089f,
+ 0.541992f, 0.001027f, 0.523438f, 0.000968f, 0.505371f, 0.000911f, 0.487305f, 0.000857f,
+ 0.469482f, 0.000804f, 0.451904f, 0.000755f, 0.434570f, 0.000708f, 0.417480f, 0.000663f,
+ 0.400879f, 0.000621f, 0.384521f, 0.000581f, 0.368652f, 0.000544f, 0.353027f, 0.000508f,
+ 0.999023f, 0.000833f, 0.999023f, 0.000833f, 0.999023f, 0.000834f, 0.999023f, 0.000835f,
+ 0.999023f, 0.000840f, 0.999023f, 0.000845f, 0.998535f, 0.000861f, 0.998535f, 0.000875f,
+ 0.998535f, 0.000897f, 0.998047f, 0.000928f, 0.997559f, 0.000965f, 0.997070f, 0.001007f,
+ 0.996582f, 0.001061f, 0.995605f, 0.001128f, 0.994629f, 0.001195f, 0.993164f, 0.001276f,
+ 0.991699f, 0.001362f, 0.989258f, 0.001453f, 0.986816f, 0.001539f, 0.983887f, 0.001645f,
+ 0.980469f, 0.001747f, 0.976562f, 0.001849f, 0.971680f, 0.001945f, 0.966309f, 0.002045f,
+ 0.959961f, 0.002136f, 0.953613f, 0.002218f, 0.945801f, 0.002291f, 0.937500f, 0.002357f,
+ 0.928223f, 0.002407f, 0.917969f, 0.002447f, 0.907227f, 0.002472f, 0.895508f, 0.002487f,
+ 0.883301f, 0.002485f, 0.870117f, 0.002474f, 0.856445f, 0.002451f, 0.841797f, 0.002417f,
+ 0.826660f, 0.002373f, 0.811035f, 0.002317f, 0.794922f, 0.002258f, 0.778320f, 0.002190f,
+ 0.761230f, 0.002117f, 0.744141f, 0.002041f, 0.726562f, 0.001961f, 0.708496f, 0.001880f,
+ 0.690430f, 0.001796f, 0.672363f, 0.001713f, 0.654297f, 0.001630f, 0.635742f, 0.001547f,
+ 0.617188f, 0.001466f, 0.598633f, 0.001387f, 0.580078f, 0.001310f, 0.561523f, 0.001235f,
+ 0.543457f, 0.001164f, 0.524902f, 0.001095f, 0.507324f, 0.001029f, 0.489258f, 0.000967f,
+ 0.471680f, 0.000906f, 0.454346f, 0.000850f, 0.437012f, 0.000796f, 0.420166f, 0.000745f,
+ 0.403564f, 0.000698f, 0.387451f, 0.000652f, 0.371582f, 0.000609f, 0.356201f, 0.000569f,
+ 0.998535f, 0.001139f, 0.998535f, 0.001139f, 0.998535f, 0.001140f, 0.998535f, 0.001142f,
+ 0.998535f, 0.001147f, 0.998535f, 0.001159f, 0.998535f, 0.001168f, 0.998047f, 0.001190f,
+ 0.998047f, 0.001217f, 0.997559f, 0.001254f, 0.997559f, 0.001301f, 0.997070f, 0.001356f,
+ 0.996094f, 0.001416f, 0.995605f, 0.001493f, 0.994141f, 0.001574f, 0.992676f, 0.001663f,
+ 0.990723f, 0.001759f, 0.988770f, 0.001867f, 0.986328f, 0.001980f, 0.982910f, 0.002087f,
+ 0.979492f, 0.002199f, 0.975586f, 0.002319f, 0.970703f, 0.002422f, 0.965332f, 0.002531f,
+ 0.958496f, 0.002628f, 0.952148f, 0.002714f, 0.944336f, 0.002792f, 0.935547f, 0.002851f,
+ 0.926270f, 0.002903f, 0.916016f, 0.002935f, 0.904785f, 0.002954f, 0.893066f, 0.002956f,
+ 0.880859f, 0.002947f, 0.867676f, 0.002920f, 0.853516f, 0.002882f, 0.839355f, 0.002831f,
+ 0.824219f, 0.002769f, 0.809082f, 0.002699f, 0.792969f, 0.002619f, 0.776367f, 0.002533f,
+ 0.759766f, 0.002443f, 0.742676f, 0.002350f, 0.725586f, 0.002251f, 0.708008f, 0.002151f,
+ 0.689941f, 0.002052f, 0.671875f, 0.001953f, 0.653809f, 0.001854f, 0.635742f, 0.001758f,
+ 0.617676f, 0.001663f, 0.599121f, 0.001572f, 0.581055f, 0.001482f, 0.562988f, 0.001395f,
+ 0.544922f, 0.001313f, 0.526855f, 0.001234f, 0.508789f, 0.001158f, 0.491455f, 0.001086f,
+ 0.473877f, 0.001018f, 0.456787f, 0.000954f, 0.439697f, 0.000892f, 0.422852f, 0.000834f,
+ 0.406494f, 0.000780f, 0.390381f, 0.000729f, 0.374512f, 0.000680f, 0.359131f, 0.000635f,
+ 0.998047f, 0.001528f, 0.998047f, 0.001528f, 0.998047f, 0.001529f, 0.998047f, 0.001532f,
+ 0.998047f, 0.001539f, 0.998047f, 0.001546f, 0.998047f, 0.001562f, 0.998047f, 0.001589f,
+ 0.997559f, 0.001621f, 0.997559f, 0.001668f, 0.996582f, 0.001715f, 0.996582f, 0.001777f,
+ 0.995605f, 0.001859f, 0.994629f, 0.001939f, 0.993652f, 0.002035f, 0.992188f, 0.002140f,
+ 0.990234f, 0.002243f, 0.987793f, 0.002369f, 0.985352f, 0.002489f, 0.981934f, 0.002621f,
+ 0.978516f, 0.002750f, 0.974121f, 0.002876f, 0.969238f, 0.002991f, 0.963867f, 0.003105f,
+ 0.957031f, 0.003206f, 0.950195f, 0.003300f, 0.942383f, 0.003374f, 0.933594f, 0.003431f,
+ 0.923828f, 0.003473f, 0.913574f, 0.003498f, 0.902344f, 0.003506f, 0.890625f, 0.003494f,
+ 0.878418f, 0.003468f, 0.865234f, 0.003426f, 0.851074f, 0.003366f, 0.836914f, 0.003296f,
+ 0.822266f, 0.003216f, 0.806641f, 0.003122f, 0.791016f, 0.003023f, 0.774902f, 0.002916f,
+ 0.758301f, 0.002804f, 0.741211f, 0.002689f, 0.724121f, 0.002573f, 0.707031f, 0.002453f,
+ 0.689453f, 0.002335f, 0.671875f, 0.002216f, 0.653809f, 0.002102f, 0.636230f, 0.001987f,
+ 0.618164f, 0.001878f, 0.600098f, 0.001771f, 0.582031f, 0.001668f, 0.564453f, 0.001569f,
+ 0.546387f, 0.001475f, 0.528809f, 0.001384f, 0.511230f, 0.001297f, 0.493652f, 0.001217f,
+ 0.476318f, 0.001139f, 0.459229f, 0.001065f, 0.442383f, 0.000996f, 0.425781f, 0.000930f,
+ 0.409424f, 0.000869f, 0.393311f, 0.000811f, 0.377686f, 0.000757f, 0.362305f, 0.000707f,
+ 0.997559f, 0.002018f, 0.997559f, 0.002018f, 0.997559f, 0.002018f, 0.997559f, 0.002022f,
+ 0.997559f, 0.002028f, 0.997559f, 0.002045f, 0.997559f, 0.002066f, 0.997559f, 0.002092f,
+ 0.997559f, 0.002129f, 0.996582f, 0.002176f, 0.996094f, 0.002235f, 0.995605f, 0.002312f,
+ 0.995605f, 0.002407f, 0.993652f, 0.002491f, 0.992676f, 0.002605f, 0.991211f, 0.002729f,
+ 0.989258f, 0.002846f, 0.987305f, 0.002987f, 0.984375f, 0.003120f, 0.980957f, 0.003263f,
+ 0.977051f, 0.003403f, 0.972656f, 0.003542f, 0.967285f, 0.003666f, 0.961914f, 0.003782f,
+ 0.955566f, 0.003889f, 0.947754f, 0.003967f, 0.939941f, 0.004044f, 0.931152f, 0.004097f,
+ 0.921387f, 0.004131f, 0.911133f, 0.004139f, 0.899902f, 0.004131f, 0.888184f, 0.004108f,
+ 0.875488f, 0.004055f, 0.862305f, 0.003990f, 0.848633f, 0.003914f, 0.834473f, 0.003819f,
+ 0.819824f, 0.003712f, 0.804199f, 0.003593f, 0.788574f, 0.003469f, 0.772949f, 0.003338f,
+ 0.756348f, 0.003201f, 0.739746f, 0.003063f, 0.723145f, 0.002924f, 0.706055f, 0.002781f,
+ 0.688965f, 0.002644f, 0.671387f, 0.002506f, 0.653809f, 0.002371f, 0.636230f, 0.002239f,
+ 0.618652f, 0.002111f, 0.601074f, 0.001989f, 0.583496f, 0.001871f, 0.565430f, 0.001759f,
+ 0.547852f, 0.001650f, 0.530273f, 0.001547f, 0.513184f, 0.001449f, 0.495850f, 0.001356f,
+ 0.478760f, 0.001269f, 0.461670f, 0.001185f, 0.445068f, 0.001107f, 0.428467f, 0.001035f,
+ 0.412354f, 0.000965f, 0.396240f, 0.000901f, 0.380615f, 0.000840f, 0.365479f, 0.000783f,
+ 0.997070f, 0.002625f, 0.997070f, 0.002625f, 0.997070f, 0.002626f, 0.997070f, 0.002630f,
+ 0.997070f, 0.002640f, 0.997070f, 0.002659f, 0.997070f, 0.002676f, 0.996582f, 0.002708f,
+ 0.996582f, 0.002752f, 0.996094f, 0.002813f, 0.995605f, 0.002886f, 0.995117f, 0.002956f,
+ 0.994141f, 0.003071f, 0.992676f, 0.003172f, 0.991699f, 0.003292f, 0.990234f, 0.003433f,
+ 0.988281f, 0.003580f, 0.985840f, 0.003727f, 0.982910f, 0.003870f, 0.979492f, 0.004028f,
+ 0.975586f, 0.004177f, 0.971191f, 0.004322f, 0.966309f, 0.004456f, 0.959961f, 0.004570f,
+ 0.953125f, 0.004669f, 0.945801f, 0.004757f, 0.937500f, 0.004826f, 0.928711f, 0.004864f,
+ 0.918945f, 0.004883f, 0.908691f, 0.004875f, 0.897461f, 0.004845f, 0.885254f, 0.004795f,
+ 0.872559f, 0.004723f, 0.859863f, 0.004631f, 0.846191f, 0.004520f, 0.832031f, 0.004398f,
+ 0.817383f, 0.004261f, 0.802246f, 0.004116f, 0.786621f, 0.003963f, 0.770996f, 0.003805f,
+ 0.754883f, 0.003639f, 0.738770f, 0.003475f, 0.722168f, 0.003307f, 0.705078f, 0.003143f,
+ 0.688477f, 0.002981f, 0.671387f, 0.002821f, 0.653809f, 0.002665f, 0.636719f, 0.002512f,
+ 0.619141f, 0.002367f, 0.602051f, 0.002226f, 0.584473f, 0.002090f, 0.566895f, 0.001963f,
+ 0.549805f, 0.001840f, 0.532227f, 0.001722f, 0.515137f, 0.001613f, 0.498047f, 0.001508f,
+ 0.481201f, 0.001409f, 0.464355f, 0.001316f, 0.447754f, 0.001228f, 0.431396f, 0.001145f,
+ 0.415283f, 0.001069f, 0.399414f, 0.000997f, 0.383789f, 0.000929f, 0.368652f, 0.000865f,
+ 0.996582f, 0.003370f, 0.996582f, 0.003370f, 0.996582f, 0.003372f, 0.996582f, 0.003378f,
+ 0.996582f, 0.003389f, 0.996094f, 0.003410f, 0.996094f, 0.003435f, 0.996094f, 0.003471f,
+ 0.996094f, 0.003523f, 0.995117f, 0.003588f, 0.995117f, 0.003664f, 0.994141f, 0.003754f,
+ 0.993164f, 0.003864f, 0.992676f, 0.003990f, 0.990723f, 0.004128f, 0.989746f, 0.004288f,
+ 0.987793f, 0.004429f, 0.984375f, 0.004601f, 0.981445f, 0.004757f, 0.978027f, 0.004925f,
+ 0.974121f, 0.005089f, 0.969727f, 0.005241f, 0.964355f, 0.005375f, 0.958008f, 0.005486f,
+ 0.951172f, 0.005596f, 0.943848f, 0.005665f, 0.935547f, 0.005718f, 0.925781f, 0.005737f,
+ 0.916016f, 0.005733f, 0.905762f, 0.005707f, 0.894531f, 0.005650f, 0.882324f, 0.005569f,
+ 0.870117f, 0.005466f, 0.856934f, 0.005341f, 0.843262f, 0.005199f, 0.829102f, 0.005043f,
+ 0.814941f, 0.004871f, 0.799805f, 0.004692f, 0.784668f, 0.004505f, 0.769043f, 0.004314f,
+ 0.753418f, 0.004116f, 0.737305f, 0.003922f, 0.721191f, 0.003729f, 0.704590f, 0.003536f,
+ 0.687988f, 0.003347f, 0.670898f, 0.003162f, 0.654297f, 0.002983f, 0.637207f, 0.002810f,
+ 0.620117f, 0.002642f, 0.603027f, 0.002481f, 0.585938f, 0.002329f, 0.568359f, 0.002182f,
+ 0.551270f, 0.002045f, 0.534180f, 0.001913f, 0.517090f, 0.001788f, 0.500488f, 0.001671f,
+ 0.483643f, 0.001560f, 0.467041f, 0.001456f, 0.450684f, 0.001358f, 0.434326f, 0.001266f,
+ 0.418213f, 0.001181f, 0.402588f, 0.001101f, 0.386963f, 0.001025f, 0.371826f, 0.000954f,
+ 0.995605f, 0.004276f, 0.995605f, 0.004276f, 0.995605f, 0.004280f, 0.995605f, 0.004284f,
+ 0.995605f, 0.004299f, 0.995117f, 0.004318f, 0.995117f, 0.004349f, 0.995117f, 0.004383f,
+ 0.994629f, 0.004456f, 0.994629f, 0.004524f, 0.994141f, 0.004612f, 0.993164f, 0.004704f,
+ 0.992676f, 0.004848f, 0.991699f, 0.004974f, 0.990234f, 0.005142f, 0.987793f, 0.005291f,
+ 0.986328f, 0.005474f, 0.982910f, 0.005638f, 0.980469f, 0.005825f, 0.976562f, 0.005989f,
+ 0.972656f, 0.006157f, 0.967773f, 0.006313f, 0.961914f, 0.006443f, 0.955566f, 0.006554f,
+ 0.948730f, 0.006645f, 0.940918f, 0.006702f, 0.932617f, 0.006733f, 0.923340f, 0.006733f,
+ 0.913574f, 0.006699f, 0.902832f, 0.006645f, 0.891602f, 0.006550f, 0.879395f, 0.006435f,
+ 0.867188f, 0.006294f, 0.854004f, 0.006130f, 0.840332f, 0.005951f, 0.826660f, 0.005756f,
+ 0.812500f, 0.005543f, 0.797363f, 0.005325f, 0.782715f, 0.005100f, 0.767090f, 0.004871f,
+ 0.751465f, 0.004642f, 0.735840f, 0.004414f, 0.719727f, 0.004185f, 0.703613f, 0.003960f,
+ 0.687500f, 0.003744f, 0.670898f, 0.003531f, 0.654297f, 0.003326f, 0.637695f, 0.003128f,
+ 0.620605f, 0.002939f, 0.604004f, 0.002756f, 0.586914f, 0.002584f, 0.569824f, 0.002420f,
+ 0.553223f, 0.002264f, 0.536133f, 0.002117f, 0.519531f, 0.001978f, 0.502930f, 0.001847f,
+ 0.486328f, 0.001723f, 0.469727f, 0.001607f, 0.453369f, 0.001498f, 0.437256f, 0.001395f,
+ 0.421387f, 0.001300f, 0.405762f, 0.001211f, 0.390381f, 0.001127f, 0.375244f, 0.001050f,
+ 0.994141f, 0.005367f, 0.994141f, 0.005367f, 0.994141f, 0.005371f, 0.994141f, 0.005375f,
+ 0.994141f, 0.005394f, 0.994141f, 0.005413f, 0.994141f, 0.005447f, 0.994141f, 0.005508f,
+ 0.993652f, 0.005558f, 0.993652f, 0.005650f, 0.992676f, 0.005741f, 0.991699f, 0.005848f,
+ 0.991211f, 0.006004f, 0.990234f, 0.006149f, 0.988281f, 0.006317f, 0.986328f, 0.006504f,
+ 0.984863f, 0.006687f, 0.981934f, 0.006866f, 0.978516f, 0.007050f, 0.974609f, 0.007233f,
+ 0.970215f, 0.007393f, 0.965820f, 0.007553f, 0.959961f, 0.007675f, 0.953125f, 0.007774f,
+ 0.946289f, 0.007843f, 0.938477f, 0.007889f, 0.929688f, 0.007889f, 0.920410f, 0.007858f,
+ 0.910156f, 0.007793f, 0.899414f, 0.007694f, 0.888672f, 0.007565f, 0.876465f, 0.007401f,
+ 0.864258f, 0.007214f, 0.851074f, 0.007008f, 0.837402f, 0.006779f, 0.823730f, 0.006535f,
+ 0.809570f, 0.006279f, 0.794922f, 0.006023f, 0.780273f, 0.005753f, 0.765137f, 0.005482f,
+ 0.750000f, 0.005215f, 0.734375f, 0.004944f, 0.718750f, 0.004681f, 0.703125f, 0.004425f,
+ 0.687012f, 0.004173f, 0.670898f, 0.003929f, 0.654297f, 0.003700f, 0.638184f, 0.003473f,
+ 0.621582f, 0.003260f, 0.604980f, 0.003056f, 0.588379f, 0.002861f, 0.571777f, 0.002676f,
+ 0.555176f, 0.002502f, 0.538574f, 0.002337f, 0.521973f, 0.002180f, 0.505371f, 0.002035f,
+ 0.488770f, 0.001898f, 0.472656f, 0.001769f, 0.456299f, 0.001649f, 0.440430f, 0.001534f,
+ 0.424561f, 0.001430f, 0.408936f, 0.001329f, 0.393555f, 0.001238f, 0.378418f, 0.001151f,
+ 0.993164f, 0.006672f, 0.993164f, 0.006672f, 0.993164f, 0.006676f, 0.993164f, 0.006687f,
+ 0.993164f, 0.006699f, 0.993164f, 0.006721f, 0.992676f, 0.006760f, 0.992676f, 0.006821f,
+ 0.992188f, 0.006897f, 0.991699f, 0.006973f, 0.991211f, 0.007099f, 0.990234f, 0.007206f,
+ 0.990234f, 0.007366f, 0.988281f, 0.007519f, 0.986328f, 0.007706f, 0.984863f, 0.007912f,
+ 0.982422f, 0.008087f, 0.979980f, 0.008286f, 0.977051f, 0.008476f, 0.972656f, 0.008667f,
+ 0.968262f, 0.008827f, 0.962891f, 0.008980f, 0.957520f, 0.009079f, 0.951172f, 0.009171f,
+ 0.943848f, 0.009216f, 0.935547f, 0.009224f, 0.926758f, 0.009193f, 0.917480f, 0.009125f,
+ 0.906738f, 0.009010f, 0.895996f, 0.008865f, 0.885254f, 0.008682f, 0.873047f, 0.008469f,
+ 0.860840f, 0.008232f, 0.847656f, 0.007973f, 0.834473f, 0.007690f, 0.820801f, 0.007397f,
+ 0.807129f, 0.007092f, 0.792969f, 0.006783f, 0.778320f, 0.006462f, 0.763184f, 0.006145f,
+ 0.748535f, 0.005833f, 0.733398f, 0.005524f, 0.717773f, 0.005219f, 0.702148f, 0.004925f,
+ 0.686523f, 0.004639f, 0.670898f, 0.004364f, 0.654785f, 0.004097f, 0.638672f, 0.003847f,
+ 0.622559f, 0.003605f, 0.605957f, 0.003376f, 0.589844f, 0.003157f, 0.573242f, 0.002951f,
+ 0.556641f, 0.002756f, 0.540527f, 0.002573f, 0.523926f, 0.002399f, 0.507812f, 0.002237f,
+ 0.491455f, 0.002085f, 0.475342f, 0.001943f, 0.459229f, 0.001809f, 0.443359f, 0.001684f,
+ 0.427734f, 0.001567f, 0.412109f, 0.001457f, 0.396973f, 0.001356f, 0.382080f, 0.001261f,
+ 0.991699f, 0.008217f, 0.991699f, 0.008217f, 0.991699f, 0.008217f, 0.991699f, 0.008232f,
+ 0.991211f, 0.008240f, 0.991211f, 0.008270f, 0.991211f, 0.008324f, 0.991211f, 0.008377f,
+ 0.990723f, 0.008461f, 0.990234f, 0.008553f, 0.989746f, 0.008682f, 0.988770f, 0.008820f,
+ 0.987793f, 0.008972f, 0.986816f, 0.009163f, 0.985352f, 0.009338f, 0.982910f, 0.009567f,
+ 0.980957f, 0.009758f, 0.977539f, 0.009956f, 0.974609f, 0.010155f, 0.970215f, 0.010330f,
+ 0.965820f, 0.010483f, 0.960449f, 0.010597f, 0.954590f, 0.010696f, 0.947754f, 0.010750f,
+ 0.940430f, 0.010757f, 0.932129f, 0.010735f, 0.923340f, 0.010651f, 0.913574f, 0.010536f,
+ 0.903809f, 0.010376f, 0.892578f, 0.010162f, 0.881348f, 0.009926f, 0.869629f, 0.009651f,
+ 0.857422f, 0.009354f, 0.844727f, 0.009026f, 0.831543f, 0.008690f, 0.817871f, 0.008331f,
+ 0.804199f, 0.007973f, 0.790527f, 0.007603f, 0.775879f, 0.007233f, 0.761719f, 0.006866f,
+ 0.747070f, 0.006500f, 0.731934f, 0.006145f, 0.716797f, 0.005798f, 0.701660f, 0.005466f,
+ 0.686523f, 0.005138f, 0.670898f, 0.004829f, 0.655273f, 0.004532f, 0.639160f, 0.004246f,
+ 0.623535f, 0.003975f, 0.607422f, 0.003719f, 0.591309f, 0.003477f, 0.575195f, 0.003246f,
+ 0.558594f, 0.003029f, 0.542480f, 0.002827f, 0.526367f, 0.002634f, 0.510254f, 0.002455f,
+ 0.494141f, 0.002285f, 0.478271f, 0.002129f, 0.462402f, 0.001980f, 0.446533f, 0.001843f,
+ 0.430908f, 0.001715f, 0.415527f, 0.001594f, 0.400391f, 0.001483f, 0.385498f, 0.001378f,
+ 0.989746f, 0.010040f, 0.989746f, 0.010040f, 0.989746f, 0.010040f, 0.989746f, 0.010048f,
+ 0.989746f, 0.010071f, 0.989746f, 0.010094f, 0.989258f, 0.010147f, 0.989258f, 0.010223f,
+ 0.988770f, 0.010300f, 0.988770f, 0.010406f, 0.987793f, 0.010529f, 0.986816f, 0.010696f,
+ 0.986328f, 0.010857f, 0.984863f, 0.011055f, 0.982422f, 0.011238f, 0.981445f, 0.011467f,
+ 0.978516f, 0.011673f, 0.975098f, 0.011871f, 0.972168f, 0.012062f, 0.967285f, 0.012215f,
+ 0.962402f, 0.012352f, 0.957031f, 0.012459f, 0.951172f, 0.012535f, 0.944336f, 0.012535f,
+ 0.937012f, 0.012520f, 0.928711f, 0.012428f, 0.919922f, 0.012299f, 0.910156f, 0.012115f,
+ 0.899414f, 0.011879f, 0.889160f, 0.011612f, 0.877441f, 0.011299f, 0.865723f, 0.010956f,
+ 0.853516f, 0.010582f, 0.841309f, 0.010193f, 0.828125f, 0.009773f, 0.814941f, 0.009361f,
+ 0.801270f, 0.008926f, 0.787598f, 0.008499f, 0.773926f, 0.008064f, 0.759766f, 0.007641f,
+ 0.745117f, 0.007225f, 0.730469f, 0.006817f, 0.716309f, 0.006424f, 0.701172f, 0.006042f,
+ 0.686035f, 0.005676f, 0.670898f, 0.005329f, 0.655273f, 0.004993f, 0.640137f, 0.004673f,
+ 0.624512f, 0.004372f, 0.608398f, 0.004086f, 0.592773f, 0.003817f, 0.576660f, 0.003561f,
+ 0.561035f, 0.003323f, 0.544922f, 0.003098f, 0.528809f, 0.002884f, 0.512695f, 0.002686f,
+ 0.497070f, 0.002501f, 0.481201f, 0.002327f, 0.465332f, 0.002165f, 0.449707f, 0.002014f,
+ 0.434326f, 0.001873f, 0.418945f, 0.001740f, 0.403809f, 0.001617f, 0.388916f, 0.001504f,
+ 0.987793f, 0.012169f, 0.987793f, 0.012169f, 0.987793f, 0.012169f, 0.987793f, 0.012184f,
+ 0.987305f, 0.012207f, 0.987305f, 0.012245f, 0.987305f, 0.012291f, 0.986816f, 0.012360f,
+ 0.986816f, 0.012459f, 0.986328f, 0.012573f, 0.985840f, 0.012695f, 0.984863f, 0.012878f,
+ 0.983887f, 0.013046f, 0.982422f, 0.013237f, 0.980469f, 0.013466f, 0.979004f, 0.013680f,
+ 0.976074f, 0.013878f, 0.972656f, 0.014069f, 0.969238f, 0.014259f, 0.964355f, 0.014397f,
+ 0.959961f, 0.014488f, 0.954102f, 0.014580f, 0.947754f, 0.014595f, 0.940430f, 0.014557f,
+ 0.933105f, 0.014481f, 0.925293f, 0.014328f, 0.915527f, 0.014122f, 0.906250f, 0.013870f,
+ 0.895996f, 0.013565f, 0.885254f, 0.013206f, 0.873535f, 0.012817f, 0.862305f, 0.012383f,
+ 0.850098f, 0.011932f, 0.837891f, 0.011452f, 0.824707f, 0.010963f, 0.812012f, 0.010460f,
+ 0.798828f, 0.009964f, 0.785156f, 0.009460f, 0.771484f, 0.008965f, 0.757812f, 0.008484f,
+ 0.743652f, 0.008003f, 0.729492f, 0.007542f, 0.715332f, 0.007095f, 0.700684f, 0.006668f,
+ 0.686035f, 0.006256f, 0.670898f, 0.005863f, 0.655762f, 0.005489f, 0.640625f, 0.005135f,
+ 0.625488f, 0.004799f, 0.609863f, 0.004478f, 0.594238f, 0.004181f, 0.578613f, 0.003901f,
+ 0.562988f, 0.003635f, 0.547363f, 0.003386f, 0.531250f, 0.003153f, 0.515625f, 0.002935f,
+ 0.500000f, 0.002729f, 0.484131f, 0.002539f, 0.468506f, 0.002361f, 0.453125f, 0.002195f,
+ 0.437744f, 0.002041f, 0.422363f, 0.001897f, 0.407471f, 0.001763f, 0.392578f, 0.001637f,
+ 0.985352f, 0.014641f, 0.985352f, 0.014641f, 0.984863f, 0.014648f, 0.984863f, 0.014656f,
+ 0.984863f, 0.014679f, 0.984863f, 0.014717f, 0.984863f, 0.014771f, 0.984375f, 0.014839f,
+ 0.984375f, 0.014938f, 0.983398f, 0.015060f, 0.983398f, 0.015244f, 0.981934f, 0.015388f,
+ 0.980957f, 0.015587f, 0.979492f, 0.015778f, 0.977539f, 0.015976f, 0.975586f, 0.016190f,
+ 0.972656f, 0.016388f, 0.969727f, 0.016571f, 0.965820f, 0.016739f, 0.961426f, 0.016861f,
+ 0.956055f, 0.016922f, 0.950684f, 0.016953f, 0.943848f, 0.016922f, 0.937012f, 0.016815f,
+ 0.929199f, 0.016663f, 0.920410f, 0.016434f, 0.911621f, 0.016144f, 0.901855f, 0.015793f,
+ 0.891602f, 0.015411f, 0.880859f, 0.014954f, 0.869629f, 0.014473f, 0.857910f, 0.013947f,
+ 0.846191f, 0.013390f, 0.833984f, 0.012825f, 0.821289f, 0.012253f, 0.809082f, 0.011665f,
+ 0.795898f, 0.011086f, 0.782715f, 0.010506f, 0.769531f, 0.009933f, 0.755859f, 0.009377f,
+ 0.742188f, 0.008842f, 0.728516f, 0.008316f, 0.714355f, 0.007812f, 0.700195f, 0.007336f,
+ 0.685547f, 0.006874f, 0.670898f, 0.006435f, 0.656250f, 0.006020f, 0.641602f, 0.005623f,
+ 0.626465f, 0.005253f, 0.611328f, 0.004902f, 0.596191f, 0.004570f, 0.580566f, 0.004261f,
+ 0.564941f, 0.003967f, 0.549316f, 0.003695f, 0.533691f, 0.003437f, 0.518066f, 0.003199f,
+ 0.502930f, 0.002975f, 0.487305f, 0.002766f, 0.471680f, 0.002571f, 0.456299f, 0.002388f,
+ 0.441162f, 0.002220f, 0.426025f, 0.002062f, 0.411133f, 0.001916f, 0.396240f, 0.001781f,
+ 0.982422f, 0.017502f, 0.982422f, 0.017502f, 0.982422f, 0.017502f, 0.982422f, 0.017517f,
+ 0.981934f, 0.017532f, 0.981934f, 0.017593f, 0.981934f, 0.017639f, 0.981934f, 0.017731f,
+ 0.981445f, 0.017838f, 0.980957f, 0.017960f, 0.979980f, 0.018112f, 0.979004f, 0.018295f,
+ 0.978027f, 0.018478f, 0.975586f, 0.018677f, 0.974609f, 0.018860f, 0.972168f, 0.019073f,
+ 0.969238f, 0.019287f, 0.965820f, 0.019455f, 0.962402f, 0.019562f, 0.958008f, 0.019653f,
+ 0.952637f, 0.019653f, 0.946289f, 0.019623f, 0.939453f, 0.019516f, 0.932617f, 0.019348f,
+ 0.924316f, 0.019089f, 0.916016f, 0.018784f, 0.907227f, 0.018387f, 0.897461f, 0.017944f,
+ 0.887207f, 0.017426f, 0.876465f, 0.016861f, 0.865234f, 0.016266f, 0.854004f, 0.015640f,
+ 0.842285f, 0.014999f, 0.830078f, 0.014320f, 0.818359f, 0.013641f, 0.805664f, 0.012962f,
+ 0.792969f, 0.012291f, 0.780273f, 0.011627f, 0.767090f, 0.010979f, 0.753906f, 0.010345f,
+ 0.740723f, 0.009735f, 0.727539f, 0.009155f, 0.713867f, 0.008591f, 0.699707f, 0.008049f,
+ 0.685547f, 0.007534f, 0.671387f, 0.007050f, 0.656738f, 0.006588f, 0.642578f, 0.006149f,
+ 0.627441f, 0.005737f, 0.612793f, 0.005352f, 0.597656f, 0.004986f, 0.582520f, 0.004642f,
+ 0.567383f, 0.004322f, 0.551758f, 0.004021f, 0.536621f, 0.003744f, 0.520996f, 0.003481f,
+ 0.505859f, 0.003235f, 0.490479f, 0.003006f, 0.475098f, 0.002794f, 0.459717f, 0.002596f,
+ 0.444580f, 0.002411f, 0.429688f, 0.002241f, 0.414795f, 0.002081f, 0.400146f, 0.001933f,
+ 0.979004f, 0.020798f, 0.979004f, 0.020798f, 0.979004f, 0.020798f, 0.979004f, 0.020813f,
+ 0.979004f, 0.020844f, 0.978516f, 0.020874f, 0.978516f, 0.020935f, 0.978027f, 0.021027f,
+ 0.978027f, 0.021149f, 0.977539f, 0.021286f, 0.977051f, 0.021454f, 0.975586f, 0.021622f,
+ 0.974121f, 0.021820f, 0.972656f, 0.021988f, 0.970215f, 0.022186f, 0.968750f, 0.022385f,
+ 0.965820f, 0.022552f, 0.961914f, 0.022675f, 0.958008f, 0.022736f, 0.953613f, 0.022751f,
+ 0.948242f, 0.022736f, 0.942383f, 0.022614f, 0.935547f, 0.022415f, 0.927734f, 0.022156f,
+ 0.919922f, 0.021790f, 0.911621f, 0.021362f, 0.901855f, 0.020859f, 0.892090f, 0.020279f,
+ 0.882324f, 0.019638f, 0.872070f, 0.018951f, 0.860840f, 0.018234f, 0.849609f, 0.017487f,
+ 0.838379f, 0.016708f, 0.826172f, 0.015930f, 0.814453f, 0.015144f, 0.802246f, 0.014359f,
+ 0.790527f, 0.013588f, 0.777832f, 0.012833f, 0.765137f, 0.012100f, 0.752441f, 0.011383f,
+ 0.739258f, 0.010696f, 0.726074f, 0.010040f, 0.712891f, 0.009415f, 0.699219f, 0.008812f,
+ 0.685547f, 0.008240f, 0.671875f, 0.007698f, 0.657715f, 0.007191f, 0.643555f, 0.006710f,
+ 0.628906f, 0.006252f, 0.614258f, 0.005829f, 0.599609f, 0.005428f, 0.584473f, 0.005051f,
+ 0.569336f, 0.004704f, 0.554199f, 0.004372f, 0.539062f, 0.004063f, 0.523926f, 0.003780f,
+ 0.508789f, 0.003513f, 0.493652f, 0.003263f, 0.478271f, 0.003033f, 0.463135f, 0.002817f,
+ 0.448242f, 0.002615f, 0.433350f, 0.002430f, 0.418457f, 0.002256f, 0.403809f, 0.002094f,
+ 0.975098f, 0.024582f, 0.975098f, 0.024567f, 0.975098f, 0.024582f, 0.975098f, 0.024597f,
+ 0.975098f, 0.024628f, 0.975098f, 0.024658f, 0.975098f, 0.024734f, 0.974609f, 0.024826f,
+ 0.973633f, 0.024933f, 0.973633f, 0.025055f, 0.972656f, 0.025223f, 0.972168f, 0.025421f,
+ 0.970215f, 0.025589f, 0.968262f, 0.025742f, 0.966309f, 0.025925f, 0.964355f, 0.026108f,
+ 0.960938f, 0.026230f, 0.957520f, 0.026321f, 0.953613f, 0.026352f, 0.948242f, 0.026260f,
+ 0.943848f, 0.026154f, 0.937500f, 0.025970f, 0.930664f, 0.025650f, 0.922852f, 0.025253f,
+ 0.915039f, 0.024765f, 0.906738f, 0.024200f, 0.897461f, 0.023560f, 0.887207f, 0.022827f,
+ 0.877441f, 0.022064f, 0.866699f, 0.021225f, 0.855957f, 0.020370f, 0.845215f, 0.019470f,
+ 0.833984f, 0.018570f, 0.822266f, 0.017654f, 0.811035f, 0.016754f, 0.799316f, 0.015854f,
+ 0.787109f, 0.014984f, 0.775391f, 0.014122f, 0.763184f, 0.013298f, 0.750488f, 0.012489f,
+ 0.737793f, 0.011726f, 0.725098f, 0.010986f, 0.712402f, 0.010284f, 0.699219f, 0.009621f,
+ 0.685547f, 0.008987f, 0.671875f, 0.008392f, 0.658203f, 0.007828f, 0.644531f, 0.007305f,
+ 0.630371f, 0.006802f, 0.615723f, 0.006336f, 0.601562f, 0.005898f, 0.586914f, 0.005489f,
+ 0.571777f, 0.005104f, 0.557129f, 0.004745f, 0.541992f, 0.004414f, 0.526855f, 0.004101f,
+ 0.511719f, 0.003809f, 0.496826f, 0.003538f, 0.481689f, 0.003286f, 0.466797f, 0.003052f,
+ 0.451904f, 0.002832f, 0.437012f, 0.002630f, 0.422363f, 0.002441f, 0.407715f, 0.002268f,
+ 0.970703f, 0.028870f, 0.970703f, 0.028870f, 0.970703f, 0.028885f, 0.970703f, 0.028900f,
+ 0.970703f, 0.028915f, 0.970703f, 0.028961f, 0.970215f, 0.029022f, 0.970215f, 0.029114f,
+ 0.969727f, 0.029251f, 0.968750f, 0.029373f, 0.968262f, 0.029526f, 0.966797f, 0.029678f,
+ 0.966309f, 0.029877f, 0.964844f, 0.030045f, 0.962402f, 0.030167f, 0.959473f, 0.030304f,
+ 0.956543f, 0.030411f, 0.953125f, 0.030411f, 0.948242f, 0.030319f, 0.943359f, 0.030197f,
+ 0.938477f, 0.029968f, 0.931641f, 0.029648f, 0.924805f, 0.029221f, 0.917969f, 0.028687f,
+ 0.909180f, 0.028030f, 0.900879f, 0.027313f, 0.891602f, 0.026505f, 0.881836f, 0.025620f,
+ 0.871582f, 0.024673f, 0.861816f, 0.023697f, 0.851074f, 0.022659f, 0.840820f, 0.021622f,
+ 0.829590f, 0.020569f, 0.818359f, 0.019516f, 0.807129f, 0.018478f, 0.795898f, 0.017456f,
+ 0.784180f, 0.016464f, 0.772461f, 0.015503f, 0.760742f, 0.014572f, 0.748535f, 0.013672f,
+ 0.736816f, 0.012817f, 0.724121f, 0.012001f, 0.711914f, 0.011215f, 0.698730f, 0.010483f,
+ 0.686035f, 0.009789f, 0.672852f, 0.009132f, 0.659180f, 0.008514f, 0.645508f, 0.007935f,
+ 0.631836f, 0.007389f, 0.617676f, 0.006878f, 0.603516f, 0.006397f, 0.588867f, 0.005951f,
+ 0.574219f, 0.005531f, 0.559570f, 0.005142f, 0.544922f, 0.004776f, 0.529785f, 0.004436f,
+ 0.515137f, 0.004120f, 0.500000f, 0.003828f, 0.485352f, 0.003555f, 0.470215f, 0.003302f,
+ 0.455566f, 0.003065f, 0.440918f, 0.002844f, 0.426270f, 0.002642f, 0.411621f, 0.002451f,
+ 0.965820f, 0.033752f, 0.965820f, 0.033752f, 0.965820f, 0.033752f, 0.965820f, 0.033783f,
+ 0.965820f, 0.033783f, 0.965820f, 0.033875f, 0.965332f, 0.033905f, 0.965332f, 0.033997f,
+ 0.964844f, 0.034088f, 0.963867f, 0.034241f, 0.963379f, 0.034393f, 0.962402f, 0.034546f,
+ 0.960938f, 0.034698f, 0.958496f, 0.034851f, 0.957520f, 0.034973f, 0.954102f, 0.035034f,
+ 0.951172f, 0.035034f, 0.947754f, 0.034943f, 0.942871f, 0.034821f, 0.937988f, 0.034576f,
+ 0.932129f, 0.034180f, 0.926270f, 0.033722f, 0.918945f, 0.033142f, 0.911133f, 0.032410f,
+ 0.902832f, 0.031616f, 0.894531f, 0.030685f, 0.885254f, 0.029694f, 0.876465f, 0.028641f,
+ 0.866699f, 0.027512f, 0.856445f, 0.026337f, 0.846191f, 0.025146f, 0.835449f, 0.023926f,
+ 0.825195f, 0.022720f, 0.814453f, 0.021515f, 0.803711f, 0.020340f, 0.792480f, 0.019165f,
+ 0.781250f, 0.018051f, 0.770020f, 0.016968f, 0.758789f, 0.015915f, 0.747070f, 0.014931f,
+ 0.735352f, 0.013977f, 0.723145f, 0.013069f, 0.710938f, 0.012215f, 0.698730f, 0.011398f,
+ 0.686035f, 0.010635f, 0.673340f, 0.009918f, 0.660156f, 0.009239f, 0.646484f, 0.008598f,
+ 0.633301f, 0.008003f, 0.619141f, 0.007446f, 0.605469f, 0.006927f, 0.591309f, 0.006439f,
+ 0.576660f, 0.005985f, 0.562500f, 0.005562f, 0.547852f, 0.005165f, 0.533203f, 0.004795f,
+ 0.518066f, 0.004456f, 0.503418f, 0.004135f, 0.488770f, 0.003841f, 0.474121f, 0.003565f,
+ 0.459229f, 0.003311f, 0.444580f, 0.003073f, 0.430176f, 0.002853f, 0.415771f, 0.002647f,
+ 0.960449f, 0.039276f, 0.960449f, 0.039276f, 0.960449f, 0.039276f, 0.960449f, 0.039307f,
+ 0.960449f, 0.039337f, 0.959961f, 0.039368f, 0.959961f, 0.039429f, 0.959961f, 0.039520f,
+ 0.959473f, 0.039612f, 0.958984f, 0.039764f, 0.958008f, 0.039886f, 0.956543f, 0.040009f,
+ 0.955566f, 0.040131f, 0.953125f, 0.040253f, 0.951172f, 0.040314f, 0.948242f, 0.040283f,
+ 0.945801f, 0.040222f, 0.940918f, 0.040039f, 0.936523f, 0.039764f, 0.931152f, 0.039368f,
+ 0.926270f, 0.038879f, 0.919434f, 0.038208f, 0.913086f, 0.037445f, 0.905273f, 0.036530f,
+ 0.897461f, 0.035522f, 0.888184f, 0.034393f, 0.879395f, 0.033173f, 0.870117f, 0.031891f,
+ 0.860352f, 0.030563f, 0.850586f, 0.029190f, 0.840820f, 0.027802f, 0.830566f, 0.026398f,
+ 0.820312f, 0.025009f, 0.810059f, 0.023636f, 0.799805f, 0.022308f, 0.789062f, 0.020996f,
+ 0.778809f, 0.019730f, 0.767578f, 0.018524f, 0.756348f, 0.017365f, 0.745605f, 0.016251f,
+ 0.733887f, 0.015213f, 0.722656f, 0.014206f, 0.710938f, 0.013260f, 0.698730f, 0.012367f,
+ 0.686523f, 0.011536f, 0.673828f, 0.010742f, 0.661133f, 0.010002f, 0.647949f, 0.009308f,
+ 0.634766f, 0.008659f, 0.621094f, 0.008057f, 0.607422f, 0.007488f, 0.593262f, 0.006958f,
+ 0.579102f, 0.006466f, 0.564941f, 0.006004f, 0.550781f, 0.005577f, 0.536133f, 0.005177f,
+ 0.521484f, 0.004807f, 0.506836f, 0.004463f, 0.492432f, 0.004143f, 0.477783f, 0.003847f,
+ 0.463135f, 0.003571f, 0.448730f, 0.003315f, 0.434082f, 0.003077f, 0.419922f, 0.002857f,
+ 0.954102f, 0.045502f, 0.954102f, 0.045502f, 0.954102f, 0.045502f, 0.954102f, 0.045532f,
+ 0.954102f, 0.045563f, 0.954102f, 0.045593f, 0.953613f, 0.045654f, 0.953613f, 0.045715f,
+ 0.953125f, 0.045868f, 0.952148f, 0.045990f, 0.951660f, 0.046082f, 0.950195f, 0.046143f,
+ 0.948242f, 0.046265f, 0.946777f, 0.046265f, 0.943848f, 0.046265f, 0.941895f, 0.046204f,
+ 0.938477f, 0.046021f, 0.935059f, 0.045685f, 0.929199f, 0.045258f, 0.925293f, 0.044708f,
+ 0.919434f, 0.044006f, 0.912109f, 0.043121f, 0.905273f, 0.042145f, 0.897949f, 0.041016f,
+ 0.890137f, 0.039734f, 0.881348f, 0.038391f, 0.872559f, 0.036926f, 0.863770f, 0.035431f,
+ 0.854004f, 0.033813f, 0.844727f, 0.032227f, 0.835449f, 0.030640f, 0.825195f, 0.029037f,
+ 0.815430f, 0.027451f, 0.806152f, 0.025909f, 0.795898f, 0.024399f, 0.785645f, 0.022934f,
+ 0.775391f, 0.021530f, 0.765137f, 0.020187f, 0.754883f, 0.018890f, 0.743652f, 0.017670f,
+ 0.732910f, 0.016510f, 0.721680f, 0.015411f, 0.710449f, 0.014374f, 0.698730f, 0.013405f,
+ 0.686523f, 0.012482f, 0.674316f, 0.011620f, 0.662109f, 0.010811f, 0.649414f, 0.010063f,
+ 0.636230f, 0.009354f, 0.623047f, 0.008698f, 0.609375f, 0.008080f, 0.595703f, 0.007507f,
+ 0.582031f, 0.006973f, 0.567871f, 0.006477f, 0.553711f, 0.006016f, 0.539551f, 0.005585f,
+ 0.524902f, 0.005180f, 0.510254f, 0.004810f, 0.496094f, 0.004463f, 0.481689f, 0.004147f,
+ 0.467041f, 0.003847f, 0.452637f, 0.003571f, 0.438232f, 0.003315f, 0.424072f, 0.003077f,
+ 0.947266f, 0.052490f, 0.947266f, 0.052490f, 0.947266f, 0.052490f, 0.947266f, 0.052521f,
+ 0.947266f, 0.052551f, 0.946777f, 0.052582f, 0.946777f, 0.052612f, 0.946289f, 0.052734f,
+ 0.945801f, 0.052795f, 0.945312f, 0.052887f, 0.944336f, 0.052948f, 0.942871f, 0.053040f,
+ 0.941406f, 0.053009f, 0.939941f, 0.053009f, 0.937012f, 0.052917f, 0.934570f, 0.052704f,
+ 0.931641f, 0.052399f, 0.926758f, 0.051971f, 0.922852f, 0.051331f, 0.917480f, 0.050568f,
+ 0.911133f, 0.049622f, 0.904297f, 0.048523f, 0.898438f, 0.047272f, 0.890137f, 0.045868f,
+ 0.882812f, 0.044312f, 0.874512f, 0.042694f, 0.865723f, 0.040955f, 0.856934f, 0.039154f,
+ 0.847656f, 0.037354f, 0.838867f, 0.035522f, 0.829590f, 0.033661f, 0.820312f, 0.031830f,
+ 0.811035f, 0.030060f, 0.801270f, 0.028305f, 0.791992f, 0.026611f, 0.782227f, 0.024994f,
+ 0.772461f, 0.023422f, 0.762695f, 0.021927f, 0.752441f, 0.020508f, 0.742188f, 0.019165f,
+ 0.731445f, 0.017883f, 0.721191f, 0.016678f, 0.709961f, 0.015556f, 0.698730f, 0.014488f,
+ 0.687012f, 0.013489f, 0.675293f, 0.012550f, 0.663086f, 0.011673f, 0.650879f, 0.010849f,
+ 0.638184f, 0.010086f, 0.625000f, 0.009369f, 0.611816f, 0.008705f, 0.598145f, 0.008087f,
+ 0.584961f, 0.007511f, 0.570801f, 0.006977f, 0.556641f, 0.006474f, 0.542480f, 0.006012f,
+ 0.528320f, 0.005581f, 0.514160f, 0.005180f, 0.499756f, 0.004807f, 0.485596f, 0.004459f,
+ 0.471191f, 0.004139f, 0.456787f, 0.003843f, 0.442383f, 0.003569f, 0.428467f, 0.003313f,
+ 0.939453f, 0.060333f, 0.939453f, 0.060333f, 0.939453f, 0.060333f, 0.939453f, 0.060333f,
+ 0.939453f, 0.060394f, 0.938965f, 0.060394f, 0.938965f, 0.060455f, 0.938477f, 0.060516f,
+ 0.937988f, 0.060577f, 0.937500f, 0.060638f, 0.936035f, 0.060669f, 0.935547f, 0.060669f,
+ 0.933594f, 0.060608f, 0.931641f, 0.060516f, 0.929688f, 0.060272f, 0.927246f, 0.059967f,
+ 0.922363f, 0.059448f, 0.918945f, 0.058868f, 0.914062f, 0.057953f, 0.908691f, 0.056946f,
+ 0.902832f, 0.055786f, 0.897461f, 0.054382f, 0.890137f, 0.052826f, 0.882324f, 0.051117f,
+ 0.874023f, 0.049255f, 0.866211f, 0.047302f, 0.858398f, 0.045288f, 0.849609f, 0.043213f,
+ 0.840820f, 0.041107f, 0.832031f, 0.038971f, 0.823730f, 0.036896f, 0.814453f, 0.034821f,
+ 0.806152f, 0.032806f, 0.796875f, 0.030853f, 0.788086f, 0.028961f, 0.778809f, 0.027161f,
+ 0.769531f, 0.025421f, 0.760254f, 0.023788f, 0.750488f, 0.022217f, 0.740723f, 0.020737f,
+ 0.730957f, 0.019333f, 0.720703f, 0.018021f, 0.709961f, 0.016785f, 0.698730f, 0.015625f,
+ 0.687500f, 0.014549f, 0.676270f, 0.013535f, 0.664551f, 0.012573f, 0.652344f, 0.011688f,
+ 0.640137f, 0.010864f, 0.627441f, 0.010086f, 0.614258f, 0.009369f, 0.601074f, 0.008698f,
+ 0.587402f, 0.008080f, 0.573730f, 0.007500f, 0.560059f, 0.006962f, 0.545898f, 0.006462f,
+ 0.531738f, 0.006001f, 0.517578f, 0.005569f, 0.503418f, 0.005165f, 0.489502f, 0.004795f,
+ 0.475098f, 0.004452f, 0.460938f, 0.004131f, 0.446777f, 0.003838f, 0.432861f, 0.003563f,
+ 0.930664f, 0.069031f, 0.930664f, 0.069031f, 0.930664f, 0.069031f, 0.930664f, 0.069031f,
+ 0.930664f, 0.069092f, 0.930664f, 0.069092f, 0.930176f, 0.069214f, 0.929688f, 0.069153f,
+ 0.929199f, 0.069214f, 0.929199f, 0.069275f, 0.927246f, 0.069214f, 0.926758f, 0.069153f,
+ 0.925293f, 0.069031f, 0.923340f, 0.068787f, 0.920410f, 0.068420f, 0.917480f, 0.067932f,
+ 0.914551f, 0.067261f, 0.911133f, 0.066345f, 0.905273f, 0.065247f, 0.900391f, 0.063965f,
+ 0.894043f, 0.062469f, 0.888184f, 0.060699f, 0.880859f, 0.058807f, 0.873535f, 0.056763f,
+ 0.866211f, 0.054565f, 0.858887f, 0.052277f, 0.850586f, 0.049896f, 0.841797f, 0.047485f,
+ 0.833496f, 0.045105f, 0.825684f, 0.042664f, 0.817383f, 0.040283f, 0.809082f, 0.037964f,
+ 0.800781f, 0.035706f, 0.792480f, 0.033539f, 0.784180f, 0.031433f, 0.775391f, 0.029449f,
+ 0.766602f, 0.027542f, 0.757812f, 0.025726f, 0.748535f, 0.024017f, 0.739258f, 0.022400f,
+ 0.729980f, 0.020874f, 0.719727f, 0.019440f, 0.709961f, 0.018097f, 0.699219f, 0.016830f,
+ 0.688477f, 0.015656f, 0.677246f, 0.014557f, 0.665527f, 0.013527f, 0.653809f, 0.012573f,
+ 0.641602f, 0.011681f, 0.629395f, 0.010841f, 0.616699f, 0.010071f, 0.603516f, 0.009346f,
+ 0.590332f, 0.008682f, 0.577148f, 0.008057f, 0.563477f, 0.007481f, 0.549316f, 0.006943f,
+ 0.535645f, 0.006443f, 0.521484f, 0.005978f, 0.507324f, 0.005550f, 0.493408f, 0.005150f,
+ 0.479248f, 0.004780f, 0.465332f, 0.004436f, 0.451172f, 0.004124f, 0.437256f, 0.003828f,
+ 0.920898f, 0.078735f, 0.920898f, 0.078735f, 0.920898f, 0.078735f, 0.920898f, 0.078735f,
+ 0.920898f, 0.078796f, 0.920898f, 0.078796f, 0.920410f, 0.078796f, 0.919922f, 0.078857f,
+ 0.919922f, 0.078857f, 0.918945f, 0.078796f, 0.917480f, 0.078735f, 0.916992f, 0.078613f,
+ 0.915039f, 0.078308f, 0.913086f, 0.077942f, 0.910645f, 0.077454f, 0.908691f, 0.076660f,
+ 0.905273f, 0.075745f, 0.899902f, 0.074585f, 0.895996f, 0.073181f, 0.889648f, 0.071533f,
+ 0.883789f, 0.069641f, 0.877930f, 0.067566f, 0.872070f, 0.065247f, 0.864258f, 0.062805f,
+ 0.856934f, 0.060242f, 0.849121f, 0.057556f, 0.841797f, 0.054810f, 0.833984f, 0.052063f,
+ 0.827148f, 0.049316f, 0.818848f, 0.046570f, 0.811035f, 0.043915f, 0.803223f, 0.041290f,
+ 0.795898f, 0.038788f, 0.788086f, 0.036377f, 0.779785f, 0.034058f, 0.771973f, 0.031830f,
+ 0.763672f, 0.029755f, 0.755371f, 0.027771f, 0.747070f, 0.025894f, 0.738281f, 0.024139f,
+ 0.729004f, 0.022476f, 0.719238f, 0.020935f, 0.709473f, 0.019470f, 0.699707f, 0.018097f,
+ 0.688965f, 0.016830f, 0.678223f, 0.015640f, 0.666992f, 0.014534f, 0.655762f, 0.013496f,
+ 0.643555f, 0.012535f, 0.631348f, 0.011642f, 0.619141f, 0.010803f, 0.606445f, 0.010033f,
+ 0.593262f, 0.009308f, 0.580078f, 0.008644f, 0.566406f, 0.008018f, 0.553223f, 0.007446f,
+ 0.539062f, 0.006908f, 0.525391f, 0.006413f, 0.511230f, 0.005951f, 0.497559f, 0.005527f,
+ 0.483643f, 0.005131f, 0.469482f, 0.004765f, 0.455566f, 0.004421f, 0.441650f, 0.004108f,
+ 0.910156f, 0.089539f, 0.910156f, 0.089539f, 0.910156f, 0.089539f, 0.910156f, 0.089539f,
+ 0.910156f, 0.089539f, 0.909668f, 0.089539f, 0.909668f, 0.089539f, 0.909180f, 0.089539f,
+ 0.908691f, 0.089478f, 0.907715f, 0.089417f, 0.907227f, 0.089233f, 0.905762f, 0.088989f,
+ 0.904297f, 0.088562f, 0.902832f, 0.088013f, 0.900391f, 0.087280f, 0.896973f, 0.086243f,
+ 0.895020f, 0.085083f, 0.889160f, 0.083557f, 0.884766f, 0.081787f, 0.878906f, 0.079712f,
+ 0.874512f, 0.077393f, 0.867676f, 0.074951f, 0.860840f, 0.072205f, 0.854492f, 0.069275f,
+ 0.848145f, 0.066223f, 0.840820f, 0.063171f, 0.833008f, 0.060059f, 0.826172f, 0.056885f,
+ 0.819336f, 0.053741f, 0.812012f, 0.050690f, 0.804688f, 0.047699f, 0.797852f, 0.044800f,
+ 0.790527f, 0.042023f, 0.783691f, 0.039337f, 0.776367f, 0.036804f, 0.768555f, 0.034393f,
+ 0.761230f, 0.032074f, 0.753418f, 0.029922f, 0.745117f, 0.027893f, 0.736816f, 0.025970f,
+ 0.728516f, 0.024170f, 0.719238f, 0.022491f, 0.709961f, 0.020905f, 0.700195f, 0.019440f,
+ 0.689941f, 0.018066f, 0.679688f, 0.016785f, 0.668457f, 0.015587f, 0.657227f, 0.014473f,
+ 0.645996f, 0.013443f, 0.633789f, 0.012474f, 0.621582f, 0.011581f, 0.609375f, 0.010750f,
+ 0.596191f, 0.009972f, 0.583496f, 0.009262f, 0.569824f, 0.008591f, 0.556641f, 0.007973f,
+ 0.542969f, 0.007404f, 0.529297f, 0.006874f, 0.515625f, 0.006378f, 0.501465f, 0.005920f,
+ 0.487793f, 0.005501f, 0.474121f, 0.005108f, 0.460205f, 0.004742f, 0.446289f, 0.004406f,
+ 0.898438f, 0.101440f, 0.898438f, 0.101440f, 0.898438f, 0.101440f, 0.898438f, 0.101440f,
+ 0.897949f, 0.101440f, 0.897949f, 0.101440f, 0.897461f, 0.101440f, 0.896973f, 0.101379f,
+ 0.896973f, 0.101318f, 0.895996f, 0.101135f, 0.895508f, 0.100830f, 0.894043f, 0.100464f,
+ 0.893066f, 0.099854f, 0.890625f, 0.099121f, 0.888184f, 0.098083f, 0.885254f, 0.096802f,
+ 0.882324f, 0.095215f, 0.878418f, 0.093323f, 0.872559f, 0.091125f, 0.869629f, 0.088623f,
+ 0.862793f, 0.085815f, 0.855957f, 0.082764f, 0.850098f, 0.079590f, 0.844727f, 0.076172f,
+ 0.837402f, 0.072693f, 0.831055f, 0.069092f, 0.824219f, 0.065491f, 0.817871f, 0.061981f,
+ 0.811035f, 0.058472f, 0.804688f, 0.055023f, 0.797852f, 0.051697f, 0.791992f, 0.048492f,
+ 0.785645f, 0.045410f, 0.778809f, 0.042480f, 0.771973f, 0.039673f, 0.765625f, 0.037018f,
+ 0.758789f, 0.034515f, 0.750977f, 0.032166f, 0.743652f, 0.029968f, 0.735840f, 0.027878f,
+ 0.727539f, 0.025940f, 0.718750f, 0.024124f, 0.709961f, 0.022430f, 0.700684f, 0.020844f,
+ 0.690918f, 0.019363f, 0.680664f, 0.017975f, 0.670410f, 0.016693f, 0.659180f, 0.015495f,
+ 0.647949f, 0.014389f, 0.636230f, 0.013359f, 0.624512f, 0.012398f, 0.611816f, 0.011505f,
+ 0.599609f, 0.010681f, 0.586426f, 0.009911f, 0.573730f, 0.009201f, 0.560547f, 0.008537f,
+ 0.546875f, 0.007927f, 0.533203f, 0.007355f, 0.519531f, 0.006828f, 0.505859f, 0.006340f,
+ 0.492432f, 0.005890f, 0.478516f, 0.005470f, 0.464844f, 0.005077f, 0.450928f, 0.004719f,
+ 0.885254f, 0.114624f, 0.885254f, 0.114624f, 0.885254f, 0.114624f, 0.885254f, 0.114624f,
+ 0.884766f, 0.114624f, 0.884766f, 0.114563f, 0.884766f, 0.114502f, 0.884277f, 0.114380f,
+ 0.883789f, 0.114258f, 0.883301f, 0.114014f, 0.882324f, 0.113525f, 0.881348f, 0.112976f,
+ 0.879395f, 0.112183f, 0.877441f, 0.111145f, 0.875977f, 0.109802f, 0.872559f, 0.108215f,
+ 0.869141f, 0.106201f, 0.865723f, 0.103821f, 0.860352f, 0.101196f, 0.854492f, 0.098145f,
+ 0.850586f, 0.094849f, 0.845215f, 0.091187f, 0.838379f, 0.087463f, 0.833496f, 0.083496f,
+ 0.826660f, 0.079468f, 0.820801f, 0.075378f, 0.814453f, 0.071289f, 0.809082f, 0.067322f,
+ 0.803711f, 0.063354f, 0.797363f, 0.059540f, 0.791992f, 0.055878f, 0.786133f, 0.052338f,
+ 0.780762f, 0.048950f, 0.774414f, 0.045746f, 0.768555f, 0.042664f, 0.762207f, 0.039795f,
+ 0.755859f, 0.037079f, 0.749023f, 0.034546f, 0.741699f, 0.032135f, 0.734863f, 0.029892f,
+ 0.727051f, 0.027802f, 0.718750f, 0.025833f, 0.710449f, 0.024002f, 0.701172f, 0.022293f,
+ 0.691895f, 0.020706f, 0.682129f, 0.019226f, 0.671875f, 0.017853f, 0.661133f, 0.016571f,
+ 0.650391f, 0.015381f, 0.639160f, 0.014282f, 0.626953f, 0.013252f, 0.615234f, 0.012299f,
+ 0.602539f, 0.011414f, 0.590332f, 0.010597f, 0.577148f, 0.009834f, 0.563965f, 0.009132f,
+ 0.550781f, 0.008476f, 0.537598f, 0.007866f, 0.523926f, 0.007309f, 0.510254f, 0.006786f,
+ 0.496826f, 0.006306f, 0.483154f, 0.005856f, 0.469482f, 0.005440f, 0.455811f, 0.005054f,
+ 0.870605f, 0.129028f, 0.870605f, 0.129028f, 0.870605f, 0.129028f, 0.870605f, 0.129028f,
+ 0.870605f, 0.129028f, 0.870605f, 0.129028f, 0.870117f, 0.128906f, 0.870117f, 0.128784f,
+ 0.869629f, 0.128540f, 0.869141f, 0.128052f, 0.868164f, 0.127563f, 0.867188f, 0.126709f,
+ 0.865723f, 0.125732f, 0.863281f, 0.124329f, 0.862305f, 0.122742f, 0.858887f, 0.120544f,
+ 0.854980f, 0.118103f, 0.850098f, 0.115173f, 0.847168f, 0.111938f, 0.843750f, 0.108276f,
+ 0.836426f, 0.104309f, 0.832031f, 0.100159f, 0.827148f, 0.095764f, 0.821289f, 0.091187f,
+ 0.815918f, 0.086609f, 0.810547f, 0.081970f, 0.806152f, 0.077393f, 0.800781f, 0.072937f,
+ 0.795410f, 0.068542f, 0.790039f, 0.064270f, 0.785645f, 0.060242f, 0.780762f, 0.056335f,
+ 0.775391f, 0.052643f, 0.770020f, 0.049133f, 0.765137f, 0.045807f, 0.759766f, 0.042694f,
+ 0.753906f, 0.039734f, 0.747559f, 0.036987f, 0.740723f, 0.034393f, 0.733887f, 0.031982f,
+ 0.726562f, 0.029739f, 0.719238f, 0.027618f, 0.710449f, 0.025650f, 0.702148f, 0.023834f,
+ 0.692871f, 0.022125f, 0.683594f, 0.020538f, 0.673828f, 0.019058f, 0.663574f, 0.017685f,
+ 0.652832f, 0.016418f, 0.641602f, 0.015244f, 0.629883f, 0.014153f, 0.618164f, 0.013138f,
+ 0.605957f, 0.012192f, 0.593750f, 0.011314f, 0.581055f, 0.010506f, 0.567871f, 0.009750f,
+ 0.555176f, 0.009056f, 0.541504f, 0.008408f, 0.528320f, 0.007809f, 0.514648f, 0.007252f,
+ 0.501465f, 0.006741f, 0.487793f, 0.006260f, 0.474365f, 0.005817f, 0.460938f, 0.005409f,
+ 0.854492f, 0.145020f, 0.854492f, 0.145020f, 0.854492f, 0.145020f, 0.854492f, 0.145020f,
+ 0.854492f, 0.144897f, 0.854492f, 0.144897f, 0.854004f, 0.144653f, 0.854492f, 0.144531f,
+ 0.854004f, 0.144165f, 0.853027f, 0.143555f, 0.852051f, 0.142822f, 0.851074f, 0.141724f,
+ 0.850586f, 0.140503f, 0.848145f, 0.138672f, 0.846191f, 0.136475f, 0.843262f, 0.133911f,
+ 0.839844f, 0.130859f, 0.835449f, 0.127319f, 0.832031f, 0.123474f, 0.828613f, 0.119141f,
+ 0.823242f, 0.114502f, 0.819824f, 0.109558f, 0.813477f, 0.104431f, 0.809570f, 0.099304f,
+ 0.804199f, 0.094055f, 0.799316f, 0.088867f, 0.794922f, 0.083740f, 0.791992f, 0.078735f,
+ 0.786621f, 0.073914f, 0.783203f, 0.069214f, 0.779297f, 0.064758f, 0.774902f, 0.060516f,
+ 0.770508f, 0.056488f, 0.765625f, 0.052673f, 0.761230f, 0.049072f, 0.756348f, 0.045715f,
+ 0.750977f, 0.042511f, 0.745605f, 0.039551f, 0.739746f, 0.036774f, 0.733398f, 0.034180f,
+ 0.726562f, 0.031738f, 0.719238f, 0.029495f, 0.711426f, 0.027390f, 0.703125f, 0.025421f,
+ 0.694336f, 0.023605f, 0.685059f, 0.021912f, 0.675781f, 0.020340f, 0.665527f, 0.018875f,
+ 0.655273f, 0.017517f, 0.644043f, 0.016251f, 0.632812f, 0.015091f, 0.621582f, 0.014008f,
+ 0.609375f, 0.013000f, 0.597168f, 0.012070f, 0.584473f, 0.011200f, 0.571777f, 0.010406f,
+ 0.559082f, 0.009659f, 0.545898f, 0.008972f, 0.532715f, 0.008339f, 0.519531f, 0.007748f,
+ 0.505859f, 0.007198f, 0.492676f, 0.006691f, 0.479248f, 0.006218f, 0.465820f, 0.005783f,
+ 0.837402f, 0.162476f, 0.837402f, 0.162476f, 0.837402f, 0.162476f, 0.837402f, 0.162354f,
+ 0.837402f, 0.162354f, 0.836914f, 0.162231f, 0.836914f, 0.161987f, 0.836426f, 0.161743f,
+ 0.836426f, 0.161133f, 0.835449f, 0.160522f, 0.835449f, 0.159546f, 0.834473f, 0.158203f,
+ 0.833496f, 0.156372f, 0.831055f, 0.154175f, 0.830078f, 0.151489f, 0.826660f, 0.148315f,
+ 0.823242f, 0.144531f, 0.821289f, 0.140381f, 0.817383f, 0.135620f, 0.812012f, 0.130615f,
+ 0.810547f, 0.125122f, 0.805176f, 0.119507f, 0.800293f, 0.113647f, 0.797852f, 0.107788f,
+ 0.792480f, 0.101868f, 0.788574f, 0.096008f, 0.785156f, 0.090332f, 0.782715f, 0.084839f,
+ 0.779297f, 0.079468f, 0.774902f, 0.074341f, 0.772461f, 0.069458f, 0.769531f, 0.064819f,
+ 0.765137f, 0.060486f, 0.761719f, 0.056366f, 0.758301f, 0.052490f, 0.753418f, 0.048828f,
+ 0.749023f, 0.045410f, 0.743652f, 0.042206f, 0.738770f, 0.039215f, 0.732422f, 0.036438f,
+ 0.726074f, 0.033844f, 0.719238f, 0.031433f, 0.711914f, 0.029190f, 0.704102f, 0.027100f,
+ 0.695801f, 0.025146f, 0.687012f, 0.023346f, 0.677734f, 0.021667f, 0.667969f, 0.020111f,
+ 0.657715f, 0.018646f, 0.646973f, 0.017319f, 0.636230f, 0.016068f, 0.624512f, 0.014923f,
+ 0.612793f, 0.013855f, 0.601074f, 0.012863f, 0.588379f, 0.011948f, 0.576172f, 0.011093f,
+ 0.563477f, 0.010300f, 0.550293f, 0.009567f, 0.537109f, 0.008896f, 0.523926f, 0.008263f,
+ 0.510742f, 0.007687f, 0.497559f, 0.007145f, 0.484375f, 0.006645f, 0.470947f, 0.006180f,
+ 0.818359f, 0.181519f, 0.818359f, 0.181519f, 0.818359f, 0.181519f, 0.817871f, 0.181519f,
+ 0.817871f, 0.181396f, 0.817871f, 0.181274f, 0.817871f, 0.181030f, 0.817871f, 0.180542f,
+ 0.817871f, 0.179932f, 0.817383f, 0.178955f, 0.816406f, 0.177612f, 0.815918f, 0.175903f,
+ 0.814941f, 0.173584f, 0.812500f, 0.170898f, 0.811035f, 0.167603f, 0.808594f, 0.163696f,
+ 0.805664f, 0.159180f, 0.802246f, 0.154175f, 0.799805f, 0.148560f, 0.796875f, 0.142700f,
+ 0.792480f, 0.136353f, 0.789551f, 0.129883f, 0.787598f, 0.123230f, 0.782227f, 0.116577f,
+ 0.780273f, 0.109985f, 0.777344f, 0.103516f, 0.774414f, 0.097168f, 0.771973f, 0.091125f,
+ 0.770508f, 0.085205f, 0.767578f, 0.079651f, 0.765625f, 0.074341f, 0.763184f, 0.069336f,
+ 0.760254f, 0.064636f, 0.757812f, 0.060181f, 0.754395f, 0.056000f, 0.750977f, 0.052063f,
+ 0.747559f, 0.048431f, 0.742188f, 0.044983f, 0.737793f, 0.041779f, 0.732422f, 0.038818f,
+ 0.726074f, 0.036041f, 0.719727f, 0.033447f, 0.712891f, 0.031052f, 0.705566f, 0.028824f,
+ 0.697266f, 0.026749f, 0.688965f, 0.024826f, 0.679688f, 0.023041f, 0.670410f, 0.021393f,
+ 0.660645f, 0.019852f, 0.649902f, 0.018433f, 0.639160f, 0.017105f, 0.627930f, 0.015869f,
+ 0.616211f, 0.014748f, 0.604492f, 0.013687f, 0.592773f, 0.012718f, 0.580078f, 0.011818f,
+ 0.567871f, 0.010979f, 0.554688f, 0.010201f, 0.541992f, 0.009483f, 0.528809f, 0.008812f,
+ 0.515625f, 0.008194f, 0.502441f, 0.007626f, 0.489502f, 0.007088f, 0.476318f, 0.006599f,
+ 0.797363f, 0.202393f, 0.797363f, 0.202393f, 0.797363f, 0.202393f, 0.797363f, 0.202393f,
+ 0.797363f, 0.202148f, 0.797363f, 0.202026f, 0.797363f, 0.201660f, 0.797363f, 0.201050f,
+ 0.796875f, 0.200195f, 0.796875f, 0.198975f, 0.796387f, 0.197266f, 0.795898f, 0.195068f,
+ 0.794922f, 0.192261f, 0.792969f, 0.188843f, 0.792480f, 0.184937f, 0.789551f, 0.180298f,
+ 0.787598f, 0.174927f, 0.785645f, 0.168823f, 0.782715f, 0.162231f, 0.779297f, 0.155273f,
+ 0.775879f, 0.148071f, 0.775391f, 0.140747f, 0.772461f, 0.133179f, 0.770508f, 0.125732f,
+ 0.767578f, 0.118347f, 0.766113f, 0.111206f, 0.764648f, 0.104248f, 0.763184f, 0.097595f,
+ 0.762695f, 0.091187f, 0.761719f, 0.085144f, 0.759277f, 0.079407f, 0.758301f, 0.073975f,
+ 0.755859f, 0.068909f, 0.754395f, 0.064087f, 0.751465f, 0.059631f, 0.748535f, 0.055450f,
+ 0.745117f, 0.051514f, 0.741211f, 0.047852f, 0.737305f, 0.044434f, 0.731934f, 0.041260f,
+ 0.726562f, 0.038300f, 0.720215f, 0.035553f, 0.713867f, 0.032990f, 0.706543f, 0.030624f,
+ 0.699219f, 0.028427f, 0.690918f, 0.026382f, 0.682129f, 0.024475f, 0.672852f, 0.022720f,
+ 0.663086f, 0.021088f, 0.652832f, 0.019577f, 0.642578f, 0.018173f, 0.631348f, 0.016876f,
+ 0.620117f, 0.015671f, 0.608398f, 0.014565f, 0.596680f, 0.013535f, 0.584473f, 0.012573f,
+ 0.572266f, 0.011681f, 0.559570f, 0.010857f, 0.546875f, 0.010101f, 0.533691f, 0.009392f,
+ 0.520996f, 0.008736f, 0.507812f, 0.008125f, 0.494629f, 0.007565f, 0.481689f, 0.007042f,
+ 0.774414f, 0.225098f, 0.774414f, 0.225098f, 0.774414f, 0.225098f, 0.774414f, 0.225098f,
+ 0.774414f, 0.224854f, 0.774902f, 0.224609f, 0.774414f, 0.224121f, 0.774414f, 0.223389f,
+ 0.774414f, 0.222290f, 0.773926f, 0.220581f, 0.773926f, 0.218628f, 0.773926f, 0.215942f,
+ 0.773438f, 0.212524f, 0.772461f, 0.208374f, 0.771484f, 0.203491f, 0.770508f, 0.197754f,
+ 0.769043f, 0.191284f, 0.766113f, 0.184204f, 0.763672f, 0.176514f, 0.760742f, 0.168457f,
+ 0.760742f, 0.160278f, 0.757812f, 0.151855f, 0.757812f, 0.143433f, 0.756836f, 0.135132f,
+ 0.754395f, 0.126953f, 0.755371f, 0.119141f, 0.755371f, 0.111511f, 0.754395f, 0.104309f,
+ 0.753418f, 0.097351f, 0.754395f, 0.090820f, 0.753906f, 0.084595f, 0.752441f, 0.078796f,
+ 0.751465f, 0.073303f, 0.750000f, 0.068176f, 0.748535f, 0.063354f, 0.746094f, 0.058899f,
+ 0.743164f, 0.054718f, 0.740234f, 0.050812f, 0.736816f, 0.047150f, 0.731934f, 0.043793f,
+ 0.727051f, 0.040649f, 0.721191f, 0.037720f, 0.714844f, 0.035004f, 0.708008f, 0.032501f,
+ 0.700684f, 0.030167f, 0.692871f, 0.027985f, 0.684570f, 0.025986f, 0.675781f, 0.024124f,
+ 0.666016f, 0.022385f, 0.656250f, 0.020782f, 0.645996f, 0.019302f, 0.635254f, 0.017929f,
+ 0.624023f, 0.016647f, 0.612793f, 0.015480f, 0.601074f, 0.014381f, 0.588867f, 0.013367f,
+ 0.576660f, 0.012428f, 0.563965f, 0.011559f, 0.551270f, 0.010750f, 0.539062f, 0.010002f,
+ 0.525879f, 0.009308f, 0.513184f, 0.008659f, 0.500000f, 0.008064f, 0.487061f, 0.007511f,
+ 0.750000f, 0.249878f, 0.749512f, 0.249878f, 0.750000f, 0.249878f, 0.750000f, 0.249756f,
+ 0.750000f, 0.249512f, 0.750000f, 0.249146f, 0.750000f, 0.248413f, 0.750488f, 0.247559f,
+ 0.750488f, 0.246094f, 0.750488f, 0.244141f, 0.750488f, 0.241577f, 0.750488f, 0.238281f,
+ 0.748535f, 0.234009f, 0.749512f, 0.229004f, 0.749023f, 0.223022f, 0.747070f, 0.216309f,
+ 0.745117f, 0.208496f, 0.743164f, 0.200195f, 0.744629f, 0.191406f, 0.741211f, 0.182251f,
+ 0.741699f, 0.172852f, 0.740234f, 0.163330f, 0.742676f, 0.154053f, 0.741211f, 0.144775f,
+ 0.743652f, 0.135864f, 0.744629f, 0.127197f, 0.743164f, 0.118958f, 0.744629f, 0.111145f,
+ 0.745605f, 0.103638f, 0.746582f, 0.096558f, 0.748047f, 0.089966f, 0.747559f, 0.083679f,
+ 0.747559f, 0.077820f, 0.746582f, 0.072327f, 0.745605f, 0.067261f, 0.744629f, 0.062469f,
+ 0.742676f, 0.058014f, 0.739746f, 0.053864f, 0.735840f, 0.049988f, 0.731934f, 0.046417f,
+ 0.727539f, 0.043091f, 0.722168f, 0.039978f, 0.716309f, 0.037079f, 0.709473f, 0.034424f,
+ 0.702637f, 0.031952f, 0.695312f, 0.029663f, 0.687012f, 0.027542f, 0.678223f, 0.025558f,
+ 0.668945f, 0.023743f, 0.659180f, 0.022049f, 0.649414f, 0.020477f, 0.638672f, 0.019028f,
+ 0.627930f, 0.017670f, 0.616699f, 0.016434f, 0.604980f, 0.015274f, 0.593262f, 0.014198f,
+ 0.581055f, 0.013206f, 0.568848f, 0.012283f, 0.556641f, 0.011429f, 0.543945f, 0.010643f,
+ 0.531250f, 0.009903f, 0.518066f, 0.009224f, 0.505371f, 0.008591f, 0.492676f, 0.008003f,
+ 0.723145f, 0.276611f, 0.723145f, 0.276611f, 0.723145f, 0.276611f, 0.723145f, 0.276611f,
+ 0.723145f, 0.276123f, 0.723145f, 0.275635f, 0.723145f, 0.274902f, 0.723633f, 0.273682f,
+ 0.723633f, 0.271973f, 0.724121f, 0.269531f, 0.724609f, 0.266113f, 0.725098f, 0.262207f,
+ 0.725098f, 0.257080f, 0.724609f, 0.250732f, 0.722656f, 0.243652f, 0.725586f, 0.235474f,
+ 0.724121f, 0.226685f, 0.723145f, 0.216919f, 0.722656f, 0.206787f, 0.720703f, 0.196289f,
+ 0.723145f, 0.185791f, 0.723633f, 0.175171f, 0.724121f, 0.164795f, 0.728027f, 0.154663f,
+ 0.730469f, 0.144897f, 0.731934f, 0.135498f, 0.734863f, 0.126587f, 0.737305f, 0.118103f,
+ 0.739258f, 0.110107f, 0.739746f, 0.102478f, 0.741699f, 0.095398f, 0.743164f, 0.088745f,
+ 0.743652f, 0.082520f, 0.743652f, 0.076660f, 0.743652f, 0.071228f, 0.742676f, 0.066101f,
+ 0.741211f, 0.061401f, 0.739258f, 0.057007f, 0.735840f, 0.052887f, 0.732422f, 0.049103f,
+ 0.728516f, 0.045563f, 0.723145f, 0.042297f, 0.717773f, 0.039246f, 0.711914f, 0.036438f,
+ 0.704590f, 0.033813f, 0.697754f, 0.031403f, 0.689453f, 0.029160f, 0.681152f, 0.027069f,
+ 0.671875f, 0.025146f, 0.662598f, 0.023346f, 0.652832f, 0.021698f, 0.642578f, 0.020157f,
+ 0.631836f, 0.018738f, 0.621094f, 0.017426f, 0.609375f, 0.016205f, 0.597656f, 0.015076f,
+ 0.585938f, 0.014023f, 0.573730f, 0.013054f, 0.561523f, 0.012146f, 0.548828f, 0.011314f,
+ 0.536621f, 0.010536f, 0.523926f, 0.009811f, 0.511230f, 0.009148f, 0.498291f, 0.008530f,
+ 0.693848f, 0.305664f, 0.693848f, 0.305664f, 0.693848f, 0.305664f, 0.693848f, 0.305664f,
+ 0.693848f, 0.305176f, 0.694336f, 0.304443f, 0.694824f, 0.303467f, 0.695312f, 0.302002f,
+ 0.695312f, 0.299561f, 0.696289f, 0.296631f, 0.696777f, 0.292725f, 0.696777f, 0.287598f,
+ 0.697754f, 0.281250f, 0.698242f, 0.273926f, 0.698730f, 0.265137f, 0.697266f, 0.255615f,
+ 0.699707f, 0.245239f, 0.699707f, 0.234131f, 0.700195f, 0.222412f, 0.702637f, 0.210693f,
+ 0.705078f, 0.198853f, 0.708496f, 0.187134f, 0.708984f, 0.175781f, 0.715332f, 0.164673f,
+ 0.718750f, 0.154053f, 0.722168f, 0.143921f, 0.724121f, 0.134277f, 0.727539f, 0.125244f,
+ 0.731934f, 0.116638f, 0.733398f, 0.108582f, 0.736816f, 0.101013f, 0.738281f, 0.093872f,
+ 0.740234f, 0.087219f, 0.741699f, 0.081055f, 0.741211f, 0.075256f, 0.741211f, 0.069885f,
+ 0.740723f, 0.064880f, 0.738281f, 0.060211f, 0.736328f, 0.055908f, 0.732910f, 0.051849f,
+ 0.729004f, 0.048157f, 0.724609f, 0.044678f, 0.719727f, 0.041473f, 0.713379f, 0.038483f,
+ 0.707031f, 0.035736f, 0.699707f, 0.033173f, 0.692383f, 0.030823f, 0.684082f, 0.028625f,
+ 0.675293f, 0.026596f, 0.666016f, 0.024704f, 0.656738f, 0.022964f, 0.646484f, 0.021347f,
+ 0.636230f, 0.019852f, 0.625488f, 0.018463f, 0.614258f, 0.017181f, 0.602539f, 0.015976f,
+ 0.590820f, 0.014877f, 0.578613f, 0.013855f, 0.566895f, 0.012901f, 0.554688f, 0.012024f,
+ 0.541992f, 0.011200f, 0.529297f, 0.010437f, 0.516602f, 0.009735f, 0.503906f, 0.009079f,
+ 0.662598f, 0.337158f, 0.662598f, 0.337158f, 0.662598f, 0.337158f, 0.662598f, 0.336914f,
+ 0.662598f, 0.336670f, 0.663086f, 0.335938f, 0.663086f, 0.334473f, 0.664062f, 0.332520f,
+ 0.665039f, 0.329834f, 0.666016f, 0.325928f, 0.665527f, 0.320801f, 0.667969f, 0.314697f,
+ 0.667480f, 0.306885f, 0.669922f, 0.298096f, 0.669434f, 0.287842f, 0.671387f, 0.276367f,
+ 0.675781f, 0.264404f, 0.675781f, 0.251465f, 0.677734f, 0.238403f, 0.681152f, 0.225342f,
+ 0.686035f, 0.212036f, 0.690430f, 0.199219f, 0.694824f, 0.186768f, 0.700684f, 0.174805f,
+ 0.702637f, 0.163330f, 0.708008f, 0.152466f, 0.714844f, 0.142212f, 0.718750f, 0.132446f,
+ 0.724609f, 0.123291f, 0.728516f, 0.114685f, 0.731445f, 0.106628f, 0.734375f, 0.099121f,
+ 0.736816f, 0.092102f, 0.738770f, 0.085510f, 0.740723f, 0.079407f, 0.740234f, 0.073730f,
+ 0.739258f, 0.068420f, 0.738770f, 0.063538f, 0.736328f, 0.058960f, 0.734375f, 0.054718f,
+ 0.730469f, 0.050781f, 0.726562f, 0.047150f, 0.721191f, 0.043762f, 0.715332f, 0.040619f,
+ 0.709473f, 0.037720f, 0.702637f, 0.035034f, 0.695312f, 0.032532f, 0.687500f, 0.030243f,
+ 0.678711f, 0.028107f, 0.669922f, 0.026123f, 0.660645f, 0.024277f, 0.650391f, 0.022583f,
+ 0.640137f, 0.021011f, 0.629395f, 0.019547f, 0.618652f, 0.018188f, 0.607422f, 0.016937f,
+ 0.595703f, 0.015778f, 0.583984f, 0.014694f, 0.572266f, 0.013695f, 0.560059f, 0.012764f,
+ 0.547852f, 0.011902f, 0.535156f, 0.011101f, 0.522461f, 0.010353f, 0.510254f, 0.009666f,
+ 0.628418f, 0.371338f, 0.628418f, 0.371338f, 0.628418f, 0.371094f, 0.628418f, 0.371094f,
+ 0.628418f, 0.370361f, 0.629395f, 0.369385f, 0.629883f, 0.367920f, 0.630859f, 0.365234f,
+ 0.631836f, 0.361816f, 0.633301f, 0.357178f, 0.634766f, 0.350830f, 0.635742f, 0.343262f,
+ 0.638184f, 0.333984f, 0.640137f, 0.322998f, 0.641113f, 0.311035f, 0.645508f, 0.297852f,
+ 0.647949f, 0.283691f, 0.652344f, 0.269043f, 0.657227f, 0.254395f, 0.662598f, 0.239868f,
+ 0.669922f, 0.225464f, 0.673340f, 0.211426f, 0.680664f, 0.197876f, 0.685547f, 0.184937f,
+ 0.693359f, 0.172729f, 0.700684f, 0.161011f, 0.705566f, 0.150146f, 0.711426f, 0.139771f,
+ 0.718750f, 0.130005f, 0.722168f, 0.120911f, 0.727051f, 0.112427f, 0.732422f, 0.104431f,
+ 0.733887f, 0.097046f, 0.737305f, 0.090088f, 0.738770f, 0.083618f, 0.740234f, 0.077637f,
+ 0.739258f, 0.072083f, 0.738281f, 0.066895f, 0.736816f, 0.062073f, 0.734375f, 0.057648f,
+ 0.731934f, 0.053497f, 0.728027f, 0.049683f, 0.723145f, 0.046112f, 0.717773f, 0.042816f,
+ 0.712402f, 0.039764f, 0.705566f, 0.036957f, 0.698242f, 0.034332f, 0.690430f, 0.031891f,
+ 0.682617f, 0.029663f, 0.673340f, 0.027573f, 0.664551f, 0.025650f, 0.654785f, 0.023865f,
+ 0.644531f, 0.022202f, 0.634277f, 0.020676f, 0.623535f, 0.019257f, 0.612305f, 0.017929f,
+ 0.601074f, 0.016708f, 0.589355f, 0.015579f, 0.577637f, 0.014526f, 0.565430f, 0.013550f,
+ 0.553223f, 0.012642f, 0.541016f, 0.011787f, 0.528809f, 0.011009f, 0.516113f, 0.010277f,
+ 0.591309f, 0.407959f, 0.591797f, 0.407959f, 0.591797f, 0.407959f, 0.591797f, 0.407471f,
+ 0.592285f, 0.406982f, 0.592773f, 0.405762f, 0.593750f, 0.403564f, 0.594727f, 0.400391f,
+ 0.596680f, 0.396240f, 0.598145f, 0.390137f, 0.600098f, 0.382568f, 0.602539f, 0.373047f,
+ 0.604980f, 0.361816f, 0.606934f, 0.348877f, 0.611816f, 0.334473f, 0.616699f, 0.319336f,
+ 0.620605f, 0.302979f, 0.627930f, 0.286865f, 0.634277f, 0.270508f, 0.638672f, 0.254150f,
+ 0.647949f, 0.238525f, 0.654297f, 0.223389f, 0.663086f, 0.208862f, 0.673828f, 0.195068f,
+ 0.680176f, 0.182007f, 0.689941f, 0.169678f, 0.696289f, 0.157959f, 0.705078f, 0.147095f,
+ 0.713867f, 0.136841f, 0.719727f, 0.127197f, 0.724121f, 0.118225f, 0.729980f, 0.109863f,
+ 0.731934f, 0.101990f, 0.735840f, 0.094727f, 0.737305f, 0.087952f, 0.738770f, 0.081604f,
+ 0.740234f, 0.075745f, 0.739258f, 0.070312f, 0.738281f, 0.065247f, 0.735840f, 0.060608f,
+ 0.733398f, 0.056274f, 0.729492f, 0.052246f, 0.725098f, 0.048523f, 0.720703f, 0.045074f,
+ 0.714355f, 0.041870f, 0.708496f, 0.038910f, 0.701660f, 0.036163f, 0.693848f, 0.033630f,
+ 0.686035f, 0.031281f, 0.677734f, 0.029099f, 0.668457f, 0.027069f, 0.659180f, 0.025192f,
+ 0.648926f, 0.023453f, 0.639160f, 0.021851f, 0.628418f, 0.020355f, 0.617676f, 0.018967f,
+ 0.605957f, 0.017685f, 0.594727f, 0.016495f, 0.583008f, 0.015388f, 0.571289f, 0.014366f,
+ 0.559570f, 0.013412f, 0.546875f, 0.012520f, 0.534668f, 0.011696f, 0.522461f, 0.010925f,
+ 0.551758f, 0.447754f, 0.551758f, 0.447754f, 0.552246f, 0.447510f, 0.552246f, 0.447266f,
+ 0.552734f, 0.446289f, 0.553223f, 0.444580f, 0.555176f, 0.441895f, 0.556152f, 0.438232f,
+ 0.558594f, 0.432617f, 0.561035f, 0.425049f, 0.563477f, 0.415527f, 0.566406f, 0.404053f,
+ 0.570312f, 0.390381f, 0.575195f, 0.375000f, 0.578613f, 0.358154f, 0.584473f, 0.340332f,
+ 0.593750f, 0.322266f, 0.600098f, 0.303955f, 0.611328f, 0.286133f, 0.617676f, 0.268555f,
+ 0.629395f, 0.251709f, 0.640625f, 0.235352f, 0.649902f, 0.219849f, 0.661621f, 0.205078f,
+ 0.671387f, 0.191284f, 0.678711f, 0.178223f, 0.688965f, 0.166016f, 0.699707f, 0.154419f,
+ 0.707031f, 0.143555f, 0.714844f, 0.133545f, 0.719727f, 0.124084f, 0.726074f, 0.115295f,
+ 0.731445f, 0.107056f, 0.734863f, 0.099365f, 0.737305f, 0.092285f, 0.739258f, 0.085632f,
+ 0.740234f, 0.079529f, 0.739746f, 0.073792f, 0.739258f, 0.068542f, 0.737793f, 0.063599f,
+ 0.734863f, 0.059082f, 0.731934f, 0.054871f, 0.727539f, 0.050964f, 0.723633f, 0.047394f,
+ 0.717773f, 0.044006f, 0.711426f, 0.040924f, 0.705078f, 0.038055f, 0.697754f, 0.035400f,
+ 0.689941f, 0.032928f, 0.681641f, 0.030655f, 0.672852f, 0.028534f, 0.663574f, 0.026581f,
+ 0.653809f, 0.024750f, 0.644043f, 0.023071f, 0.633301f, 0.021515f, 0.622559f, 0.020050f,
+ 0.611328f, 0.018707f, 0.600098f, 0.017456f, 0.588867f, 0.016296f, 0.577148f, 0.015221f,
+ 0.565430f, 0.014221f, 0.553223f, 0.013290f, 0.541504f, 0.012421f, 0.528809f, 0.011620f,
+ 0.509277f, 0.490234f, 0.509277f, 0.490234f, 0.509277f, 0.489990f, 0.509766f, 0.489502f,
+ 0.510254f, 0.488525f, 0.511230f, 0.486328f, 0.512695f, 0.482910f, 0.514160f, 0.478027f,
+ 0.517578f, 0.470947f, 0.520996f, 0.461670f, 0.523926f, 0.449707f, 0.528809f, 0.435303f,
+ 0.534180f, 0.418945f, 0.540527f, 0.400635f, 0.548340f, 0.381348f, 0.554688f, 0.361328f,
+ 0.566895f, 0.340820f, 0.577637f, 0.320801f, 0.588867f, 0.301270f, 0.601074f, 0.282471f,
+ 0.610352f, 0.264404f, 0.624023f, 0.247070f, 0.637207f, 0.230591f, 0.649414f, 0.215210f,
+ 0.662109f, 0.200562f, 0.672852f, 0.186768f, 0.685547f, 0.173828f, 0.693359f, 0.161743f,
+ 0.702148f, 0.150391f, 0.711426f, 0.139771f, 0.720703f, 0.129883f, 0.726074f, 0.120667f,
+ 0.730469f, 0.112061f, 0.733887f, 0.104065f, 0.738281f, 0.096619f, 0.739258f, 0.089722f,
+ 0.740234f, 0.083252f, 0.741699f, 0.077332f, 0.740723f, 0.071777f, 0.739258f, 0.066711f,
+ 0.736816f, 0.061951f, 0.734375f, 0.057556f, 0.730469f, 0.053497f, 0.726074f, 0.049713f,
+ 0.720703f, 0.046234f, 0.714844f, 0.042999f, 0.708496f, 0.039978f, 0.701172f, 0.037231f,
+ 0.693848f, 0.034637f, 0.685547f, 0.032257f, 0.677246f, 0.030060f, 0.667969f, 0.028000f,
+ 0.658691f, 0.026108f, 0.648926f, 0.024338f, 0.638672f, 0.022705f, 0.627930f, 0.021194f,
+ 0.617188f, 0.019775f, 0.605957f, 0.018463f, 0.594727f, 0.017258f, 0.583008f, 0.016129f,
+ 0.571289f, 0.015076f, 0.559570f, 0.014099f, 0.547852f, 0.013191f, 0.535645f, 0.012337f,
+ 0.463623f, 0.536133f, 0.463623f, 0.536133f, 0.463867f, 0.535645f, 0.464111f, 0.535156f,
+ 0.465088f, 0.533691f, 0.466064f, 0.530762f, 0.468506f, 0.526367f, 0.471191f, 0.520020f,
+ 0.474609f, 0.511230f, 0.478516f, 0.499268f, 0.483643f, 0.484375f, 0.489990f, 0.466797f,
+ 0.495361f, 0.447266f, 0.502441f, 0.425537f, 0.515137f, 0.403564f, 0.526855f, 0.380859f,
+ 0.540039f, 0.358887f, 0.553711f, 0.336914f, 0.564453f, 0.315918f, 0.587891f, 0.295898f,
+ 0.600098f, 0.276611f, 0.610840f, 0.258545f, 0.624512f, 0.241211f, 0.641113f, 0.225098f,
+ 0.657715f, 0.209717f, 0.668457f, 0.195312f, 0.678223f, 0.181763f, 0.687988f, 0.169067f,
+ 0.701172f, 0.157104f, 0.707031f, 0.146118f, 0.715332f, 0.135620f, 0.723145f, 0.125977f,
+ 0.728516f, 0.117126f, 0.734375f, 0.108704f, 0.736328f, 0.100952f, 0.739746f, 0.093750f,
+ 0.741699f, 0.087036f, 0.742188f, 0.080872f, 0.741699f, 0.075134f, 0.741211f, 0.069763f,
+ 0.739258f, 0.064819f, 0.736816f, 0.060272f, 0.733398f, 0.056030f, 0.729004f, 0.052124f,
+ 0.724121f, 0.048492f, 0.718750f, 0.045105f, 0.712402f, 0.041992f, 0.705078f, 0.039093f,
+ 0.698242f, 0.036407f, 0.689941f, 0.033905f, 0.681641f, 0.031616f, 0.672852f, 0.029480f,
+ 0.663574f, 0.027512f, 0.653809f, 0.025665f, 0.644043f, 0.023956f, 0.633301f, 0.022369f,
+ 0.622559f, 0.020889f, 0.611816f, 0.019516f, 0.601074f, 0.018250f, 0.589355f, 0.017059f,
+ 0.578125f, 0.015961f, 0.565918f, 0.014946f, 0.554199f, 0.013992f, 0.542480f, 0.013107f,
+ 0.414551f, 0.584961f, 0.414551f, 0.584961f, 0.414795f, 0.584961f, 0.415039f, 0.583984f,
+ 0.416260f, 0.582031f, 0.418457f, 0.578613f, 0.420166f, 0.572754f, 0.424072f, 0.563965f,
+ 0.428467f, 0.552246f, 0.433838f, 0.537109f, 0.441162f, 0.518066f, 0.448730f, 0.497070f,
+ 0.458984f, 0.473633f, 0.467773f, 0.449219f, 0.480713f, 0.424072f, 0.497559f, 0.399414f,
+ 0.511719f, 0.375244f, 0.529297f, 0.352051f, 0.543945f, 0.329834f, 0.566895f, 0.308838f,
+ 0.581543f, 0.288574f, 0.598633f, 0.269531f, 0.619629f, 0.251465f, 0.635742f, 0.234497f,
+ 0.646973f, 0.218506f, 0.659668f, 0.203369f, 0.674805f, 0.189331f, 0.684570f, 0.176025f,
+ 0.695801f, 0.163696f, 0.707031f, 0.152222f, 0.718750f, 0.141357f, 0.723145f, 0.131348f,
+ 0.729004f, 0.122009f, 0.734375f, 0.113342f, 0.738281f, 0.105286f, 0.741211f, 0.097778f,
+ 0.743164f, 0.090820f, 0.744629f, 0.084412f, 0.744629f, 0.078430f, 0.743652f, 0.072876f,
+ 0.742676f, 0.067749f, 0.739746f, 0.062988f, 0.735840f, 0.058624f, 0.731934f, 0.054535f,
+ 0.727539f, 0.050751f, 0.721680f, 0.047241f, 0.715820f, 0.044006f, 0.709473f, 0.040985f,
+ 0.702148f, 0.038208f, 0.694824f, 0.035614f, 0.686523f, 0.033234f, 0.677734f, 0.031006f,
+ 0.668457f, 0.028946f, 0.659180f, 0.027023f, 0.649414f, 0.025238f, 0.639160f, 0.023590f,
+ 0.628906f, 0.022049f, 0.618164f, 0.020630f, 0.606934f, 0.019287f, 0.595703f, 0.018051f,
+ 0.584473f, 0.016907f, 0.572754f, 0.015839f, 0.561035f, 0.014839f, 0.549316f, 0.013908f,
+ 0.361816f, 0.637695f, 0.361816f, 0.637695f, 0.362061f, 0.637207f, 0.362793f, 0.636230f,
+ 0.364258f, 0.633301f, 0.366455f, 0.628906f, 0.369873f, 0.621094f, 0.374512f, 0.609375f,
+ 0.378906f, 0.593750f, 0.387451f, 0.573730f, 0.396484f, 0.550293f, 0.407471f, 0.524414f,
+ 0.419189f, 0.497314f, 0.433594f, 0.469971f, 0.453613f, 0.442627f, 0.473633f, 0.416016f,
+ 0.488037f, 0.390381f, 0.509277f, 0.365967f, 0.528809f, 0.343262f, 0.549805f, 0.320801f,
+ 0.574707f, 0.299805f, 0.590332f, 0.280029f, 0.609375f, 0.261475f, 0.631836f, 0.243774f,
+ 0.641602f, 0.227173f, 0.659668f, 0.211426f, 0.671387f, 0.196777f, 0.685059f, 0.183105f,
+ 0.698730f, 0.170166f, 0.705078f, 0.158203f, 0.715820f, 0.146973f, 0.723145f, 0.136597f,
+ 0.730469f, 0.126831f, 0.737793f, 0.117920f, 0.740723f, 0.109558f, 0.741699f, 0.101807f,
+ 0.745117f, 0.094604f, 0.747559f, 0.087891f, 0.747070f, 0.081726f, 0.747070f, 0.075989f,
+ 0.744141f, 0.070679f, 0.742676f, 0.065796f, 0.739258f, 0.061218f, 0.735840f, 0.056976f,
+ 0.730957f, 0.053070f, 0.725586f, 0.049438f, 0.719727f, 0.046082f, 0.713867f, 0.042938f,
+ 0.706543f, 0.040070f, 0.699219f, 0.037384f, 0.690918f, 0.034882f, 0.682617f, 0.032562f,
+ 0.673828f, 0.030426f, 0.664551f, 0.028442f, 0.654785f, 0.026581f, 0.645020f, 0.024857f,
+ 0.634766f, 0.023254f, 0.624023f, 0.021774f, 0.613281f, 0.020386f, 0.602051f, 0.019089f,
+ 0.590820f, 0.017899f, 0.579590f, 0.016769f, 0.567871f, 0.015732f, 0.556641f, 0.014755f,
+ 0.305420f, 0.694336f, 0.305420f, 0.694336f, 0.305664f, 0.693848f, 0.306641f, 0.691895f,
+ 0.308105f, 0.687988f, 0.311279f, 0.681152f, 0.316162f, 0.669922f, 0.321777f, 0.654297f,
+ 0.330078f, 0.632812f, 0.344238f, 0.606934f, 0.353027f, 0.578125f, 0.367432f, 0.547852f,
+ 0.385498f, 0.517578f, 0.405273f, 0.487793f, 0.422852f, 0.458496f, 0.448730f, 0.431152f,
+ 0.473633f, 0.404541f, 0.493896f, 0.379639f, 0.519531f, 0.355469f, 0.539551f, 0.332520f,
+ 0.563477f, 0.310791f, 0.583008f, 0.290283f, 0.604004f, 0.270752f, 0.626953f, 0.252686f,
+ 0.642090f, 0.235352f, 0.657715f, 0.218994f, 0.672852f, 0.203857f, 0.686523f, 0.189575f,
+ 0.699219f, 0.176270f, 0.707031f, 0.163818f, 0.717285f, 0.152344f, 0.723633f, 0.141602f,
+ 0.730469f, 0.131592f, 0.739258f, 0.122375f, 0.741699f, 0.113708f, 0.745605f, 0.105713f,
+ 0.747559f, 0.098267f, 0.748047f, 0.091370f, 0.749023f, 0.085022f, 0.748535f, 0.079102f,
+ 0.747070f, 0.073608f, 0.746582f, 0.068542f, 0.742188f, 0.063843f, 0.739258f, 0.059448f,
+ 0.734375f, 0.055420f, 0.730469f, 0.051666f, 0.724609f, 0.048187f, 0.717773f, 0.044952f,
+ 0.710938f, 0.041962f, 0.704102f, 0.039154f, 0.695801f, 0.036591f, 0.687988f, 0.034180f,
+ 0.679199f, 0.031952f, 0.670410f, 0.029892f, 0.660645f, 0.027969f, 0.650879f, 0.026184f,
+ 0.640625f, 0.024521f, 0.630371f, 0.022964f, 0.619629f, 0.021515f, 0.608887f, 0.020172f,
+ 0.598145f, 0.018921f, 0.586914f, 0.017761f, 0.575195f, 0.016663f, 0.563965f, 0.015656f,
+ 0.244995f, 0.754395f, 0.245117f, 0.754395f, 0.245483f, 0.753418f, 0.246704f, 0.750977f,
+ 0.249634f, 0.745117f, 0.253662f, 0.734863f, 0.260010f, 0.717773f, 0.268555f, 0.694336f,
+ 0.277344f, 0.665527f, 0.292480f, 0.632812f, 0.309814f, 0.599121f, 0.331787f, 0.565918f,
+ 0.352539f, 0.533203f, 0.376465f, 0.501953f, 0.405518f, 0.472412f, 0.433838f, 0.444336f,
+ 0.456787f, 0.417236f, 0.488281f, 0.391357f, 0.510254f, 0.366211f, 0.540039f, 0.343018f,
+ 0.564941f, 0.320557f, 0.579590f, 0.299561f, 0.606445f, 0.279541f, 0.627441f, 0.260498f,
+ 0.638184f, 0.242676f, 0.666504f, 0.226074f, 0.670898f, 0.210327f, 0.687988f, 0.195801f,
+ 0.700684f, 0.182129f, 0.706055f, 0.169312f, 0.718262f, 0.157471f, 0.727539f, 0.146362f,
+ 0.735840f, 0.136108f, 0.738770f, 0.126587f, 0.743164f, 0.117737f, 0.746582f, 0.109497f,
+ 0.751953f, 0.101868f, 0.751953f, 0.094788f, 0.753906f, 0.088257f, 0.752930f, 0.082153f,
+ 0.750977f, 0.076538f, 0.749512f, 0.071289f, 0.745605f, 0.066406f, 0.742188f, 0.061951f,
+ 0.738281f, 0.057770f, 0.734375f, 0.053894f, 0.729004f, 0.050293f, 0.722656f, 0.046967f,
+ 0.715332f, 0.043854f, 0.708496f, 0.040985f, 0.701172f, 0.038330f, 0.693359f, 0.035828f,
+ 0.684570f, 0.033539f, 0.676270f, 0.031403f, 0.666992f, 0.029404f, 0.657227f, 0.027542f,
+ 0.646973f, 0.025818f, 0.636719f, 0.024200f, 0.626465f, 0.022705f, 0.615723f, 0.021301f,
+ 0.604980f, 0.020004f, 0.593750f, 0.018784f, 0.582520f, 0.017654f, 0.571289f, 0.016586f,
+ 0.180542f, 0.818848f, 0.180664f, 0.818848f, 0.181274f, 0.817383f, 0.183350f, 0.812988f,
+ 0.187134f, 0.802734f, 0.193237f, 0.784180f, 0.201416f, 0.757324f, 0.214355f, 0.723145f,
+ 0.231445f, 0.685547f, 0.248901f, 0.648438f, 0.272217f, 0.611816f, 0.302979f, 0.577148f,
+ 0.329834f, 0.544922f, 0.364258f, 0.514160f, 0.394043f, 0.484619f, 0.425781f, 0.456055f,
+ 0.456543f, 0.428467f, 0.481934f, 0.402344f, 0.512207f, 0.376709f, 0.540039f, 0.352783f,
+ 0.566406f, 0.329346f, 0.579102f, 0.307617f, 0.607910f, 0.286865f, 0.627930f, 0.267822f,
+ 0.645996f, 0.249512f, 0.661621f, 0.232178f, 0.677734f, 0.216309f, 0.691406f, 0.201172f,
+ 0.702637f, 0.187256f, 0.711426f, 0.174194f, 0.721680f, 0.161987f, 0.730957f, 0.150879f,
+ 0.736328f, 0.140259f, 0.742188f, 0.130493f, 0.746582f, 0.121582f, 0.750488f, 0.113159f,
+ 0.751953f, 0.105347f, 0.752930f, 0.098083f, 0.756836f, 0.091370f, 0.755859f, 0.085144f,
+ 0.755371f, 0.079346f, 0.752441f, 0.073975f, 0.750488f, 0.069031f, 0.746582f, 0.064392f,
+ 0.743652f, 0.060120f, 0.737793f, 0.056152f, 0.733398f, 0.052460f, 0.727051f, 0.049011f,
+ 0.720215f, 0.045837f, 0.713867f, 0.042847f, 0.706543f, 0.040100f, 0.699219f, 0.037537f,
+ 0.690430f, 0.035156f, 0.682129f, 0.032928f, 0.672852f, 0.030884f, 0.663086f, 0.028961f,
+ 0.653809f, 0.027161f, 0.644043f, 0.025497f, 0.633301f, 0.023941f, 0.622559f, 0.022491f,
+ 0.612305f, 0.021133f, 0.601074f, 0.019867f, 0.590332f, 0.018692f, 0.579102f, 0.017578f,
+ 0.111816f, 0.888184f, 0.112000f, 0.887207f, 0.112976f, 0.883789f, 0.115845f, 0.873047f,
+ 0.122864f, 0.849609f, 0.133301f, 0.813477f, 0.147217f, 0.770996f, 0.167236f, 0.728027f,
+ 0.196411f, 0.688965f, 0.222290f, 0.653320f, 0.258057f, 0.619629f, 0.293457f, 0.587402f,
+ 0.328613f, 0.556152f, 0.361328f, 0.524902f, 0.392578f, 0.495850f, 0.430420f, 0.466064f,
+ 0.459961f, 0.437744f, 0.482422f, 0.410889f, 0.511230f, 0.385010f, 0.536621f, 0.359863f,
+ 0.568848f, 0.336182f, 0.592773f, 0.313721f, 0.614258f, 0.293213f, 0.626953f, 0.273193f,
+ 0.646484f, 0.254639f, 0.657227f, 0.237427f, 0.683105f, 0.221191f, 0.693359f, 0.205933f,
+ 0.698242f, 0.191772f, 0.709473f, 0.178589f, 0.724609f, 0.166260f, 0.733398f, 0.154907f,
+ 0.739746f, 0.144165f, 0.745605f, 0.134399f, 0.750977f, 0.125122f, 0.753906f, 0.116577f,
+ 0.754883f, 0.108704f, 0.758301f, 0.101257f, 0.759766f, 0.094482f, 0.757812f, 0.088074f,
+ 0.759766f, 0.082092f, 0.758301f, 0.076660f, 0.756348f, 0.071594f, 0.752441f, 0.066833f,
+ 0.748047f, 0.062469f, 0.741699f, 0.058380f, 0.736816f, 0.054596f, 0.732910f, 0.051086f,
+ 0.726074f, 0.047791f, 0.719727f, 0.044769f, 0.711914f, 0.041901f, 0.704590f, 0.039276f,
+ 0.696289f, 0.036804f, 0.688477f, 0.034546f, 0.678711f, 0.032410f, 0.669922f, 0.030411f,
+ 0.660156f, 0.028564f, 0.650391f, 0.026840f, 0.640625f, 0.025223f, 0.630371f, 0.023727f,
+ 0.619629f, 0.022324f, 0.608887f, 0.020996f, 0.597656f, 0.019775f, 0.586914f, 0.018631f,
+ 0.038452f, 0.960938f, 0.039124f, 0.957520f, 0.042480f, 0.933594f, 0.051575f, 0.879395f,
+ 0.069275f, 0.824219f, 0.091064f, 0.785156f, 0.126343f, 0.753906f, 0.154419f, 0.725586f,
+ 0.192139f, 0.695312f, 0.234375f, 0.663086f, 0.273438f, 0.630371f, 0.305908f, 0.597656f,
+ 0.338379f, 0.565430f, 0.379150f, 0.532227f, 0.413818f, 0.501465f, 0.444336f, 0.471191f,
+ 0.471436f, 0.442383f, 0.504395f, 0.414795f, 0.531250f, 0.388672f, 0.547363f, 0.364014f,
+ 0.579590f, 0.340088f, 0.603516f, 0.317627f, 0.622559f, 0.297119f, 0.635742f, 0.276855f,
+ 0.669434f, 0.258301f, 0.670410f, 0.241089f, 0.685547f, 0.224854f, 0.699219f, 0.209717f,
+ 0.712402f, 0.195190f, 0.720703f, 0.182373f, 0.729980f, 0.169678f, 0.746582f, 0.158325f,
+ 0.744629f, 0.147705f, 0.748535f, 0.137695f, 0.760254f, 0.128296f, 0.757812f, 0.119629f,
+ 0.761230f, 0.111755f, 0.762207f, 0.104248f, 0.764160f, 0.097290f, 0.763184f, 0.090881f,
+ 0.762207f, 0.084900f, 0.760742f, 0.079285f, 0.759766f, 0.074097f, 0.755859f, 0.069275f,
+ 0.752930f, 0.064758f, 0.747559f, 0.060669f, 0.742676f, 0.056793f, 0.737305f, 0.053131f,
+ 0.731445f, 0.049774f, 0.725586f, 0.046661f, 0.718262f, 0.043732f, 0.710449f, 0.041077f,
+ 0.702637f, 0.038544f, 0.694336f, 0.036163f, 0.685547f, 0.033966f, 0.676758f, 0.031921f,
+ 0.667480f, 0.030014f, 0.657715f, 0.028229f, 0.647461f, 0.026566f, 0.637207f, 0.025009f,
+ 0.626953f, 0.023544f, 0.616699f, 0.022186f, 0.605957f, 0.020920f, 0.594727f, 0.019730f
+};
+
+static float ltc_disk_integral[64 * 64] = {
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.015873f, 0.047619f, 0.079365f, 0.111111f, 0.142857f, 0.174603f, 0.206349f, 0.238095f,
+ 0.269841f, 0.301587f, 0.333333f, 0.365079f, 0.396825f, 0.428571f, 0.460317f, 0.492064f,
+ 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000148f, 0.002454f, 0.008675f, 0.019560f,
+ 0.035433f, 0.056294f, 0.081819f, 0.111259f, 0.142857f, 0.174603f, 0.206349f, 0.238095f,
+ 0.269841f, 0.301587f, 0.333333f, 0.365079f, 0.396825f, 0.428571f, 0.460317f, 0.492064f,
+ 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000002f, 0.000761f, 0.003673f, 0.009403f, 0.018333f, 0.030683f,
+ 0.046556f, 0.065952f, 0.088768f, 0.114784f, 0.143618f, 0.174606f, 0.206349f, 0.238095f,
+ 0.269841f, 0.301587f, 0.333333f, 0.365079f, 0.396825f, 0.428571f, 0.460318f, 0.492064f,
+ 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000039f, 0.000969f, 0.003703f, 0.008684f, 0.016189f, 0.026395f, 0.039409f,
+ 0.055282f, 0.074014f, 0.095554f, 0.119795f, 0.146560f, 0.175573f, 0.206388f, 0.238095f,
+ 0.269841f, 0.301587f, 0.333333f, 0.365079f, 0.396825f, 0.428571f, 0.460317f, 0.492064f,
+ 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000047f, 0.000895f, 0.003265f, 0.007514f, 0.013873f, 0.022495f, 0.033483f, 0.046897f,
+ 0.062770f, 0.081102f, 0.101860f, 0.124985f, 0.150372f, 0.177868f, 0.207245f, 0.238143f,
+ 0.269841f, 0.301587f, 0.333333f, 0.365079f, 0.396825f, 0.428571f, 0.460317f, 0.492064f,
+ 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000028f,
+ 0.000695f, 0.002655f, 0.006230f, 0.011623f, 0.018976f, 0.028384f, 0.039915f, 0.053606f,
+ 0.069479f, 0.087534f, 0.107749f, 0.130087f, 0.154481f, 0.180833f, 0.209005f, 0.238791f,
+ 0.269869f, 0.301587f, 0.333333f, 0.365079f, 0.396825f, 0.428571f, 0.460317f, 0.492064f,
+ 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000007f, 0.000465f,
+ 0.002017f, 0.004975f, 0.009533f, 0.015821f, 0.023934f, 0.033937f, 0.045874f, 0.059772f,
+ 0.075645f, 0.093493f, 0.113302f, 0.135045f, 0.158678f, 0.184136f, 0.211325f, 0.240113f,
+ 0.270306f, 0.301594f, 0.333333f, 0.365079f, 0.396825f, 0.428571f, 0.460317f, 0.492064f,
+ 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000260f, 0.001426f,
+ 0.003823f, 0.007642f, 0.013012f, 0.020025f, 0.028745f, 0.039218f, 0.051475f, 0.065535f,
+ 0.081408f, 0.099094f, 0.118583f, 0.139856f, 0.162882f, 0.187615f, 0.213991f, 0.241918f,
+ 0.271267f, 0.301847f, 0.333333f, 0.365079f, 0.396826f, 0.428572f, 0.460318f, 0.492064f,
+ 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000109f, 0.000921f, 0.002807f,
+ 0.005966f, 0.010528f, 0.016585f, 0.024200f, 0.033420f, 0.044278f, 0.056796f, 0.070988f,
+ 0.086861f, 0.104415f, 0.123643f, 0.144531f, 0.167057f, 0.191188f, 0.216878f, 0.244062f,
+ 0.272649f, 0.302509f, 0.333442f, 0.365079f, 0.396826f, 0.428572f, 0.460318f, 0.492064f,
+ 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000024f, 0.000524f, 0.001947f, 0.004511f,
+ 0.008351f, 0.013561f, 0.020206f, 0.028332f, 0.037974f, 0.049155f, 0.061892f, 0.076194f,
+ 0.092067f, 0.109511f, 0.128520f, 0.149085f, 0.171189f, 0.194809f, 0.219910f, 0.246447f,
+ 0.274352f, 0.303535f, 0.333857f, 0.365104f, 0.396826f, 0.428572f, 0.460318f, 0.492064f,
+ 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000242f, 0.001250f, 0.003275f, 0.006463f,
+ 0.010913f, 0.016693f, 0.023849f, 0.032418f, 0.042423f, 0.053881f, 0.066805f, 0.081201f,
+ 0.097074f, 0.114424f, 0.133246f, 0.153534f, 0.175275f, 0.198453f, 0.223042f, 0.249009f,
+ 0.276304f, 0.304862f, 0.334584f, 0.365322f, 0.396826f, 0.428571f, 0.460318f, 0.492064f,
+ 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000074f, 0.000716f, 0.002252f, 0.004848f, 0.008610f,
+ 0.013608f, 0.019894f, 0.027502f, 0.036458f, 0.046780f, 0.058480f, 0.071567f, 0.086045f,
+ 0.101918f, 0.119186f, 0.137845f, 0.157891f, 0.179316f, 0.202106f, 0.226243f, 0.251704f,
+ 0.278451f, 0.306436f, 0.335586f, 0.365796f, 0.396900f, 0.428571f, 0.460318f, 0.492064f,
+ 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000006f, 0.000342f, 0.001437f, 0.003492f, 0.006624f, 0.010911f,
+ 0.016406f, 0.023146f, 0.031157f, 0.040457f, 0.051059f, 0.062972f, 0.076203f, 0.090753f,
+ 0.106626f, 0.123822f, 0.142337f, 0.162170f, 0.183314f, 0.205760f, 0.229496f, 0.254502f,
+ 0.280753f, 0.308212f, 0.336825f, 0.366517f, 0.397167f, 0.428578f, 0.460318f, 0.492064f,
+ 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000114f, 0.000820f, 0.002381f, 0.004935f, 0.008569f, 0.013339f,
+ 0.019286f, 0.026437f, 0.034810f, 0.044418f, 0.055271f, 0.067375f, 0.080733f, 0.095348f,
+ 0.111221f, 0.128352f, 0.146740f, 0.166382f, 0.187276f, 0.209413f, 0.232786f, 0.257382f,
+ 0.283181f, 0.310156f, 0.338269f, 0.367461f, 0.397646f, 0.428685f, 0.460318f, 0.492064f,
+ 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000014f, 0.000390f, 0.001503f, 0.003525f, 0.006554f, 0.010655f, 0.015872f,
+ 0.022233f, 0.029758f, 0.038460f, 0.048347f, 0.059427f, 0.071702f, 0.085175f, 0.099848f,
+ 0.115721f, 0.132794f, 0.151067f, 0.170538f, 0.191204f, 0.213063f, 0.236107f, 0.260329f,
+ 0.285714f, 0.312243f, 0.339887f, 0.368604f, 0.398329f, 0.428961f, 0.460331f, 0.492064f,
+ 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000130f, 0.000845f, 0.002376f, 0.004845f, 0.008325f, 0.012864f, 0.018495f,
+ 0.025237f, 0.033105f, 0.042107f, 0.052249f, 0.063534f, 0.075965f, 0.089543f, 0.104269f,
+ 0.120142f, 0.137163f, 0.155330f, 0.174645f, 0.195106f, 0.216710f, 0.239454f, 0.263332f,
+ 0.288336f, 0.314451f, 0.341658f, 0.369924f, 0.399202f, 0.429416f, 0.460447f, 0.492064f,
+ 0.523809f, 0.555555f, 0.587301f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000016f, 0.000391f, 0.001475f, 0.003423f, 0.006322f, 0.010230f, 0.015179f, 0.021195f,
+ 0.028290f, 0.036474f, 0.045752f, 0.056128f, 0.067602f, 0.080176f, 0.093850f, 0.108623f,
+ 0.124496f, 0.141469f, 0.159541f, 0.178713f, 0.198985f, 0.220355f, 0.242823f, 0.266385f,
+ 0.291036f, 0.316767f, 0.343563f, 0.371402f, 0.400248f, 0.430047f, 0.460709f, 0.492079f,
+ 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000123f, 0.000807f, 0.002272f, 0.004628f, 0.007942f, 0.012253f, 0.017589f, 0.023963f,
+ 0.031387f, 0.039864f, 0.049398f, 0.059990f, 0.071638f, 0.084344f, 0.098106f, 0.112923f,
+ 0.128796f, 0.145725f, 0.163709f, 0.182749f, 0.202847f, 0.224001f, 0.246214f, 0.269482f,
+ 0.293805f, 0.319176f, 0.345587f, 0.373021f, 0.401454f, 0.430844f, 0.461125f, 0.492187f,
+ 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000012f,
+ 0.000356f, 0.001378f, 0.003225f, 0.005979f, 0.009689f, 0.014384f, 0.020083f, 0.026795f,
+ 0.034525f, 0.043276f, 0.053047f, 0.063839f, 0.075649f, 0.088476f, 0.102320f, 0.117178f,
+ 0.133051f, 0.149939f, 0.167841f, 0.186760f, 0.206696f, 0.227650f, 0.249625f, 0.272620f,
+ 0.296636f, 0.321671f, 0.347718f, 0.374768f, 0.402804f, 0.431796f, 0.461695f, 0.492420f,
+ 0.523822f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000100f,
+ 0.000725f, 0.002097f, 0.004323f, 0.007463f, 0.011553f, 0.016613f, 0.022655f, 0.029684f,
+ 0.037702f, 0.046708f, 0.056701f, 0.067680f, 0.079640f, 0.092581f, 0.106501f, 0.121397f,
+ 0.137270f, 0.154120f, 0.171946f, 0.190751f, 0.210537f, 0.231305f, 0.253057f, 0.275797f,
+ 0.299525f, 0.324242f, 0.349947f, 0.376633f, 0.404289f, 0.432895f, 0.462415f, 0.492788f,
+ 0.523909f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000005f, 0.000296f,
+ 0.001231f, 0.002960f, 0.005558f, 0.009072f, 0.013526f, 0.018933f, 0.025299f, 0.032627f,
+ 0.040916f, 0.050162f, 0.060364f, 0.071517f, 0.083619f, 0.096666f, 0.110656f, 0.125588f,
+ 0.141461f, 0.158275f, 0.176031f, 0.194730f, 0.214374f, 0.234967f, 0.256512f, 0.279011f,
+ 0.302468f, 0.326887f, 0.352266f, 0.378605f, 0.405897f, 0.434130f, 0.463277f, 0.493295f,
+ 0.524106f, 0.555561f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000068f, 0.000613f,
+ 0.001874f, 0.003958f, 0.006921f, 0.010796f, 0.015599f, 0.021336f, 0.028011f, 0.035623f,
+ 0.044167f, 0.053640f, 0.064038f, 0.075355f, 0.087589f, 0.100736f, 0.114793f, 0.129759f,
+ 0.145632f, 0.162412f, 0.180101f, 0.198700f, 0.218213f, 0.238641f, 0.259989f, 0.282262f,
+ 0.305464f, 0.329599f, 0.354670f, 0.380678f, 0.407622f, 0.435493f, 0.464275f, 0.493938f,
+ 0.524422f, 0.555624f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000223f, 0.001054f,
+ 0.002649f, 0.005086f, 0.008406f, 0.012629f, 0.017766f, 0.023820f, 0.030789f, 0.038669f,
+ 0.047455f, 0.057143f, 0.067726f, 0.079199f, 0.091558f, 0.104798f, 0.118918f, 0.133915f,
+ 0.149788f, 0.166537f, 0.184164f, 0.202669f, 0.222056f, 0.242329f, 0.263492f, 0.285551f,
+ 0.308510f, 0.332376f, 0.357153f, 0.382845f, 0.409454f, 0.436977f, 0.465404f, 0.494713f,
+ 0.524864f, 0.555779f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000037f, 0.000486f, 0.001621f,
+ 0.003553f, 0.006338f, 0.010004f, 0.014565f, 0.020024f, 0.026380f, 0.033629f, 0.041765f,
+ 0.050782f, 0.060673f, 0.071431f, 0.083052f, 0.095529f, 0.108859f, 0.123038f, 0.138065f,
+ 0.153938f, 0.170657f, 0.188224f, 0.206640f, 0.225909f, 0.246035f, 0.267022f, 0.288878f,
+ 0.311607f, 0.335216f, 0.359713f, 0.385103f, 0.411390f, 0.438576f, 0.466656f, 0.495617f,
+ 0.525431f, 0.556041f, 0.587338f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000149f, 0.000861f, 0.002312f,
+ 0.004581f, 0.007709f, 0.011713f, 0.016599f, 0.022367f, 0.029014f, 0.036531f, 0.044912f,
+ 0.054148f, 0.064233f, 0.075158f, 0.086918f, 0.099507f, 0.112922f, 0.127157f, 0.142212f,
+ 0.158085f, 0.174776f, 0.192287f, 0.210619f, 0.229775f, 0.249761f, 0.270582f, 0.292243f,
+ 0.314753f, 0.338118f, 0.362347f, 0.387447f, 0.413424f, 0.440284f, 0.468027f, 0.496645f,
+ 0.526122f, 0.556417f, 0.587451f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000012f, 0.000355f, 0.001353f, 0.003126f,
+ 0.005730f, 0.009194f, 0.013526f, 0.018728f, 0.024795f, 0.031720f, 0.039494f, 0.048109f,
+ 0.057555f, 0.067824f, 0.078909f, 0.090802f, 0.103499f, 0.116993f, 0.131282f, 0.146364f,
+ 0.162237f, 0.178902f, 0.196358f, 0.214610f, 0.233660f, 0.253512f, 0.274174f, 0.295650f,
+ 0.317950f, 0.341081f, 0.365053f, 0.389874f, 0.415553f, 0.442098f, 0.469512f, 0.497794f,
+ 0.526935f, 0.556908f, 0.587657f, 0.619060f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000083f, 0.000665f, 0.001962f, 0.004059f,
+ 0.006997f, 0.010790f, 0.015442f, 0.020949f, 0.027304f, 0.034497f, 0.042518f, 0.051358f,
+ 0.061005f, 0.071451f, 0.082688f, 0.094709f, 0.107507f, 0.121078f, 0.135419f, 0.150526f,
+ 0.166399f, 0.183038f, 0.200443f, 0.218618f, 0.237566f, 0.257291f, 0.277800f, 0.299100f,
+ 0.321199f, 0.344106f, 0.367830f, 0.392383f, 0.417774f, 0.444013f, 0.471107f, 0.499060f,
+ 0.527869f, 0.557517f, 0.587966f, 0.619130f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000233f, 0.001082f, 0.002688f, 0.005111f,
+ 0.008377f, 0.012493f, 0.017456f, 0.023260f, 0.029893f, 0.037345f, 0.045604f, 0.054659f,
+ 0.064499f, 0.075115f, 0.086498f, 0.098641f, 0.111537f, 0.125182f, 0.139571f, 0.154703f,
+ 0.170576f, 0.187190f, 0.204547f, 0.222648f, 0.241498f, 0.261101f, 0.281465f, 0.302595f,
+ 0.324501f, 0.347192f, 0.370679f, 0.394973f, 0.420085f, 0.446027f, 0.472810f, 0.500441f,
+ 0.528921f, 0.558244f, 0.588384f, 0.619281f, 0.650795f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000033f, 0.000477f, 0.001611f, 0.003532f, 0.006280f,
+ 0.009869f, 0.014301f, 0.019568f, 0.025659f, 0.032563f, 0.040265f, 0.048753f, 0.058016f,
+ 0.068042f, 0.078821f, 0.090344f, 0.102604f, 0.115594f, 0.129309f, 0.143745f, 0.158901f,
+ 0.174774f, 0.191365f, 0.208674f, 0.226705f, 0.245461f, 0.264947f, 0.285170f, 0.306137f,
+ 0.327857f, 0.350341f, 0.373598f, 0.397642f, 0.422485f, 0.448139f, 0.474619f, 0.501933f,
+ 0.530089f, 0.559087f, 0.588913f, 0.619525f, 0.650826f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000130f, 0.000821f, 0.002252f, 0.004491f, 0.007562f,
+ 0.011472f, 0.016213f, 0.021776f, 0.028147f, 0.035312f, 0.043256f, 0.051966f, 0.061430f,
+ 0.071635f, 0.082571f, 0.094229f, 0.106602f, 0.119682f, 0.133465f, 0.147947f, 0.163125f,
+ 0.178998f, 0.195566f, 0.212830f, 0.230793f, 0.249459f, 0.268832f, 0.288920f, 0.309730f,
+ 0.331271f, 0.353554f, 0.376590f, 0.400391f, 0.424973f, 0.450347f, 0.476531f, 0.503535f,
+ 0.531372f, 0.560047f, 0.589554f, 0.619869f, 0.650923f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000005f, 0.000309f, 0.001270f, 0.003008f, 0.005566f, 0.008959f,
+ 0.013183f, 0.018228f, 0.024080f, 0.030723f, 0.038142f, 0.046321f, 0.055246f, 0.064903f,
+ 0.075281f, 0.086369f, 0.098158f, 0.110639f, 0.123806f, 0.137655f, 0.152180f, 0.167380f,
+ 0.183253f, 0.199799f, 0.217020f, 0.234918f, 0.253496f, 0.272761f, 0.292719f, 0.313377f,
+ 0.334745f, 0.356833f, 0.379654f, 0.403221f, 0.427548f, 0.452651f, 0.478545f, 0.505246f,
+ 0.532768f, 0.561122f, 0.590309f, 0.620318f, 0.651102f, 0.682545f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000053f, 0.000579f, 0.001828f, 0.003878f, 0.006757f, 0.010468f,
+ 0.015002f, 0.020344f, 0.026479f, 0.033388f, 0.041054f, 0.049461f, 0.058594f, 0.068440f,
+ 0.078985f, 0.090220f, 0.102134f, 0.114721f, 0.127972f, 0.141884f, 0.156451f, 0.171672f,
+ 0.187545f, 0.204070f, 0.221249f, 0.239083f, 0.257578f, 0.276738f, 0.296569f, 0.317080f,
+ 0.338281f, 0.360181f, 0.382794f, 0.406133f, 0.430213f, 0.455050f, 0.480662f, 0.507065f,
+ 0.534278f, 0.562313f, 0.591180f, 0.620875f, 0.651373f, 0.682593f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000169f, 0.000949f, 0.002497f, 0.004864f, 0.008063f, 0.012089f,
+ 0.016929f, 0.022563f, 0.028974f, 0.036142f, 0.044049f, 0.052678f, 0.062014f, 0.072042f,
+ 0.082750f, 0.094127f, 0.106164f, 0.118852f, 0.132185f, 0.146157f, 0.160766f, 0.176007f,
+ 0.191880f, 0.208385f, 0.225523f, 0.243296f, 0.261709f, 0.280767f, 0.300476f, 0.320845f,
+ 0.341883f, 0.363601f, 0.386011f, 0.409128f, 0.432967f, 0.457545f, 0.482881f, 0.508992f,
+ 0.535899f, 0.563619f, 0.592165f, 0.621544f, 0.651743f, 0.682709f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000010f, 0.000368f, 0.001423f, 0.003279f, 0.005966f, 0.009485f, 0.013824f,
+ 0.018964f, 0.024886f, 0.031567f, 0.038988f, 0.047130f, 0.055975f, 0.065508f, 0.075714f,
+ 0.086580f, 0.098095f, 0.110251f, 0.123038f, 0.136450f, 0.150482f, 0.165129f, 0.180390f,
+ 0.196263f, 0.212748f, 0.229847f, 0.247561f, 0.265895f, 0.284854f, 0.304445f, 0.324675f,
+ 0.345555f, 0.367095f, 0.389309f, 0.412210f, 0.435814f, 0.460138f, 0.485203f, 0.511028f,
+ 0.537634f, 0.565041f, 0.593268f, 0.622327f, 0.652217f, 0.682907f, 0.714296f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000068f, 0.000658f, 0.002006f, 0.004178f, 0.007186f, 0.011024f, 0.015672f,
+ 0.021109f, 0.027312f, 0.034259f, 0.041928f, 0.050300f, 0.059356f, 0.069081f, 0.079460f,
+ 0.090480f, 0.102130f, 0.114400f, 0.127284f, 0.140772f, 0.154862f, 0.169548f, 0.184828f,
+ 0.200701f, 0.217167f, 0.234227f, 0.251884f, 0.270141f, 0.289004f, 0.308479f, 0.328575f,
+ 0.349301f, 0.370668f, 0.392689f, 0.415379f, 0.438754f, 0.462830f, 0.487630f, 0.513173f,
+ 0.539482f, 0.566579f, 0.594488f, 0.623226f, 0.652800f, 0.683198f, 0.714354f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000196f, 0.001048f, 0.002702f, 0.005194f, 0.008526f, 0.012680f, 0.017635f,
+ 0.023365f, 0.029846f, 0.037053f, 0.044965f, 0.053561f, 0.062824f, 0.072737f, 0.083284f,
+ 0.094454f, 0.106236f, 0.118619f, 0.131595f, 0.145159f, 0.159305f, 0.174028f, 0.189327f,
+ 0.205200f, 0.221647f, 0.238670f, 0.256270f, 0.274453f, 0.293222f, 0.312585f, 0.332550f,
+ 0.353126f, 0.374324f, 0.396158f, 0.418641f, 0.441790f, 0.465624f, 0.490163f, 0.515429f,
+ 0.541445f, 0.568236f, 0.595828f, 0.624242f, 0.653496f, 0.683588f, 0.714482f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000012f, 0.000407f, 0.001545f, 0.003514f, 0.006332f, 0.009987f, 0.014457f, 0.019715f,
+ 0.025734f, 0.032488f, 0.039952f, 0.048102f, 0.056919f, 0.066384f, 0.076480f, 0.087193f,
+ 0.098509f, 0.110419f, 0.122912f, 0.135980f, 0.149617f, 0.163817f, 0.178577f, 0.193894f,
+ 0.209767f, 0.226196f, 0.243182f, 0.260728f, 0.278837f, 0.297515f, 0.316768f, 0.336605f,
+ 0.357034f, 0.378067f, 0.399717f, 0.421998f, 0.444928f, 0.468523f, 0.492806f, 0.517798f,
+ 0.543525f, 0.570012f, 0.597288f, 0.625379f, 0.654307f, 0.684084f, 0.714693f, 0.746044f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000074f, 0.000713f, 0.002152f, 0.004446f, 0.007592f, 0.011571f, 0.016356f, 0.021915f,
+ 0.028220f, 0.035243f, 0.042959f, 0.051344f, 0.060377f, 0.070040f, 0.080316f, 0.091191f,
+ 0.102651f, 0.114686f, 0.127286f, 0.140443f, 0.154151f, 0.168405f, 0.183201f, 0.198536f,
+ 0.214409f, 0.230820f, 0.247770f, 0.265263f, 0.283301f, 0.301889f, 0.321035f, 0.340746f,
+ 0.361032f, 0.381904f, 0.403374f, 0.425457f, 0.448169f, 0.471530f, 0.495561f, 0.520284f,
+ 0.545725f, 0.571911f, 0.598873f, 0.626640f, 0.655239f, 0.684692f, 0.714999f, 0.746106f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000208f, 0.001121f, 0.002877f, 0.005501f, 0.008979f, 0.013283f, 0.018380f, 0.024238f,
+ 0.030826f, 0.038115f, 0.046079f, 0.054695f, 0.063941f, 0.073799f, 0.084252f, 0.095285f,
+ 0.106886f, 0.119044f, 0.131749f, 0.144994f, 0.158772f, 0.173078f, 0.187908f, 0.203261f,
+ 0.219134f, 0.235527f, 0.252443f, 0.269883f, 0.287851f, 0.306352f, 0.325393f, 0.344981f,
+ 0.365126f, 0.385839f, 0.407132f, 0.429020f, 0.451520f, 0.474651f, 0.498433f, 0.522890f,
+ 0.548048f, 0.573936f, 0.600584f, 0.628027f, 0.656295f, 0.685417f, 0.715406f, 0.746240f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000011f,
+ 0.000427f, 0.001638f, 0.003724f, 0.006685f, 0.010497f, 0.015125f, 0.020534f, 0.026688f,
+ 0.033557f, 0.041109f, 0.049318f, 0.058161f, 0.067617f, 0.077666f, 0.088293f, 0.099482f,
+ 0.111221f, 0.123499f, 0.136308f, 0.149639f, 0.163485f, 0.177843f, 0.192707f, 0.208077f,
+ 0.223950f, 0.240326f, 0.257208f, 0.274596f, 0.292496f, 0.310911f, 0.329849f, 0.349316f,
+ 0.369323f, 0.389880f, 0.410999f, 0.432696f, 0.454987f, 0.477890f, 0.501426f, 0.525620f,
+ 0.550498f, 0.576089f, 0.602427f, 0.629544f, 0.657479f, 0.686264f, 0.715924f, 0.746459f,
+ 0.777789f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000071f,
+ 0.000744f, 0.002274f, 0.004698f, 0.008002f, 0.012149f, 0.017102f, 0.022822f, 0.029271f,
+ 0.036417f, 0.044229f, 0.052681f, 0.061749f, 0.071411f, 0.081649f, 0.092447f, 0.103790f,
+ 0.115665f, 0.128062f, 0.140972f, 0.154387f, 0.168301f, 0.182709f, 0.197608f, 0.212994f,
+ 0.228867f, 0.245227f, 0.262074f, 0.279412f, 0.297244f, 0.315575f, 0.334412f, 0.353760f,
+ 0.373631f, 0.394034f, 0.414983f, 0.436491f, 0.458575f, 0.481253f, 0.504547f, 0.528481f,
+ 0.553081f, 0.578377f, 0.604404f, 0.631197f, 0.658795f, 0.687238f, 0.716559f, 0.746776f,
+ 0.777849f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000205f,
+ 0.001168f, 0.003033f, 0.005806f, 0.009456f, 0.013942f, 0.019220f, 0.025250f, 0.031992f,
+ 0.039414f, 0.047484f, 0.056176f, 0.065466f, 0.075333f, 0.085757f, 0.096724f, 0.108218f,
+ 0.120227f, 0.132741f, 0.145751f, 0.159249f, 0.173230f, 0.187687f, 0.202619f, 0.218021f,
+ 0.233894f, 0.250238f, 0.267052f, 0.284341f, 0.302106f, 0.320354f, 0.339090f, 0.358322f,
+ 0.378059f, 0.398311f, 0.419090f, 0.440412f, 0.462292f, 0.484748f, 0.507802f, 0.531477f,
+ 0.555802f, 0.580805f, 0.606522f, 0.632990f, 0.660250f, 0.688346f, 0.717319f, 0.747200f,
+ 0.777982f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000007f, 0.000427f,
+ 0.001710f, 0.003925f, 0.007054f, 0.011055f, 0.015881f, 0.021485f, 0.027824f, 0.034859f,
+ 0.042554f, 0.050881f, 0.059811f, 0.069321f, 0.079390f, 0.089998f, 0.101132f, 0.112775f,
+ 0.124917f, 0.137547f, 0.150655f, 0.164236f, 0.178281f, 0.192788f, 0.207752f, 0.223171f,
+ 0.239044f, 0.255371f, 0.272153f, 0.289393f, 0.307093f, 0.325259f, 0.343896f, 0.363012f,
+ 0.382617f, 0.402719f, 0.423332f, 0.444469f, 0.466146f, 0.488383f, 0.511199f, 0.534618f,
+ 0.558668f, 0.583380f, 0.608787f, 0.634929f, 0.661849f, 0.689594f, 0.718211f, 0.747742f,
+ 0.778205f, 0.809530f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000059f, 0.000754f,
+ 0.002379f, 0.004956f, 0.008449f, 0.012806f, 0.017974f, 0.023905f, 0.030553f, 0.037879f,
+ 0.045847f, 0.054429f, 0.063595f, 0.073323f, 0.083592f, 0.094384f, 0.105682f, 0.117474f,
+ 0.129747f, 0.142491f, 0.155697f, 0.169358f, 0.183469f, 0.198024f, 0.213020f, 0.228455f,
+ 0.244329f, 0.260639f, 0.277389f, 0.294580f, 0.312216f, 0.330300f, 0.348840f, 0.367842f,
+ 0.387315f, 0.407270f, 0.427717f, 0.448671f, 0.470149f, 0.492167f, 0.514746f, 0.537911f,
+ 0.561688f, 0.586108f, 0.611206f, 0.637022f, 0.663599f, 0.690989f, 0.719242f, 0.748411f,
+ 0.778531f, 0.809583f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000187f, 0.001196f,
+ 0.003184f, 0.006136f, 0.010000f, 0.014716f, 0.020230f, 0.026488f, 0.033445f, 0.041062f,
+ 0.049303f, 0.058138f, 0.067540f, 0.077485f, 0.087953f, 0.098926f, 0.110388f, 0.122327f,
+ 0.134729f, 0.147587f, 0.160889f, 0.174631f, 0.188806f, 0.203409f, 0.218437f, 0.233888f,
+ 0.249761f, 0.266056f, 0.282774f, 0.299917f, 0.317488f, 0.335493f, 0.353936f, 0.372825f,
+ 0.392168f, 0.411976f, 0.432259f, 0.453032f, 0.474310f, 0.496111f, 0.518456f, 0.541367f,
+ 0.564872f, 0.589001f, 0.613789f, 0.639277f, 0.665510f, 0.692539f, 0.720422f, 0.749216f,
+ 0.778974f, 0.809711f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000002f, 0.000409f, 0.001767f,
+ 0.004137f, 0.007474f, 0.011716f, 0.016797f, 0.022657f, 0.029244f, 0.036512f, 0.044420f,
+ 0.052933f, 0.062021f, 0.071657f, 0.081819f, 0.092485f, 0.103638f, 0.115263f, 0.127348f,
+ 0.139880f, 0.152849f, 0.166248f, 0.180070f, 0.194308f, 0.208958f, 0.224018f, 0.239485f,
+ 0.255359f, 0.271638f, 0.288324f, 0.305419f, 0.322927f, 0.340851f, 0.359199f, 0.377975f,
+ 0.397189f, 0.416851f, 0.436971f, 0.457564f, 0.478644f, 0.500229f, 0.522339f, 0.544997f,
+ 0.568230f, 0.592068f, 0.616546f, 0.641705f, 0.667590f, 0.694255f, 0.721760f, 0.750168f,
+ 0.779545f, 0.809933f, 0.841272f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000041f, 0.000744f, 0.002481f,
+ 0.005248f, 0.008982f, 0.013608f, 0.019058f, 0.025269f, 0.032188f, 0.039767f, 0.047967f,
+ 0.056752f, 0.066093f, 0.075963f, 0.086340f, 0.097203f, 0.108537f, 0.120325f, 0.132554f,
+ 0.145215f, 0.158296f, 0.171790f, 0.185691f, 0.199993f, 0.214691f, 0.229782f, 0.245265f,
+ 0.261138f, 0.277401f, 0.294056f, 0.311104f, 0.328548f, 0.346394f, 0.364645f, 0.383310f,
+ 0.402396f, 0.421912f, 0.441870f, 0.462283f, 0.483165f, 0.504535f, 0.526410f, 0.548816f,
+ 0.571776f, 0.595323f, 0.619489f, 0.644317f, 0.669852f, 0.696148f, 0.723267f, 0.751280f,
+ 0.780258f, 0.810268f, 0.841311f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000156f, 0.001209f, 0.003349f,
+ 0.006531f, 0.010672f, 0.015691f, 0.021515f, 0.028080f, 0.035332f, 0.043225f, 0.051717f,
+ 0.060775f, 0.070370f, 0.080474f, 0.091067f, 0.102128f, 0.113641f, 0.125591f, 0.137965f,
+ 0.150754f, 0.163947f, 0.177537f, 0.191516f, 0.205881f, 0.220626f, 0.235749f, 0.251248f,
+ 0.267121f, 0.283368f, 0.299992f, 0.316992f, 0.334374f, 0.352140f, 0.370296f, 0.388849f,
+ 0.407807f, 0.427178f, 0.446974f, 0.467207f, 0.487892f, 0.509046f, 0.530687f, 0.552839f,
+ 0.575527f, 0.598780f, 0.622634f, 0.647128f, 0.672308f, 0.698231f, 0.724958f, 0.752563f,
+ 0.781127f, 0.810733f, 0.841426f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000374f, 0.001821f, 0.004389f,
+ 0.008001f, 0.012559f, 0.017979f, 0.024182f, 0.031106f, 0.038695f, 0.046903f, 0.055690f,
+ 0.065023f, 0.074872f, 0.085211f, 0.096020f, 0.107279f, 0.118971f, 0.131084f, 0.143604f,
+ 0.156521f, 0.169825f, 0.183510f, 0.197569f, 0.211997f, 0.226789f, 0.241944f, 0.257458f,
+ 0.273331f, 0.289563f, 0.306154f, 0.323108f, 0.340426f, 0.358113f, 0.376175f, 0.394616f,
+ 0.413445f, 0.432671f, 0.452305f, 0.472358f, 0.492845f, 0.513783f, 0.535189f, 0.557087f,
+ 0.579500f, 0.602459f, 0.625997f, 0.650154f, 0.674976f, 0.700518f, 0.726845f, 0.754032f,
+ 0.782167f, 0.811344f, 0.841644f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000020f, 0.000719f, 0.002598f, 0.005618f,
+ 0.009675f, 0.014663f, 0.020490f, 0.027080f, 0.034367f, 0.042297f, 0.050824f, 0.059909f,
+ 0.069517f, 0.079622f, 0.090198f, 0.101224f, 0.112682f, 0.124555f, 0.136831f, 0.149496f,
+ 0.162542f, 0.175958f, 0.189739f, 0.203877f, 0.218368f, 0.233208f, 0.248393f, 0.263923f,
+ 0.279796f, 0.296012f, 0.312573f, 0.329479f, 0.346734f, 0.364342f, 0.382307f, 0.400637f,
+ 0.419337f, 0.438418f, 0.457889f, 0.477761f, 0.498050f, 0.518770f, 0.539940f, 0.561581f,
+ 0.583718f, 0.606380f, 0.629599f, 0.653415f, 0.677874f, 0.703030f, 0.728948f, 0.755706f,
+ 0.783396f, 0.812121f, 0.841989f, 0.873035f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000114f, 0.001215f, 0.003561f, 0.007056f,
+ 0.011574f, 0.017003f, 0.023248f, 0.030232f, 0.037888f, 0.046164f, 0.055014f, 0.064399f,
+ 0.074287f, 0.084650f, 0.095464f, 0.106709f, 0.118367f, 0.130423f, 0.142862f, 0.155674f,
+ 0.168849f, 0.182378f, 0.196255f, 0.210473f, 0.225027f, 0.239915f, 0.255132f, 0.270678f,
+ 0.286551f, 0.302751f, 0.319280f, 0.336138f, 0.353330f, 0.370858f, 0.388728f, 0.406944f,
+ 0.425515f, 0.444449f, 0.463756f, 0.483447f, 0.503535f, 0.524036f, 0.544968f, 0.566350f,
+ 0.588208f, 0.610569f, 0.633466f, 0.656936f, 0.681025f, 0.705788f, 0.731289f, 0.757606f,
+ 0.784834f, 0.813085f, 0.842485f, 0.873130f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000324f, 0.001887f, 0.004735f, 0.008727f,
+ 0.013724f, 0.019607f, 0.026280f, 0.033666f, 0.041699f, 0.050326f, 0.059504f, 0.069194f,
+ 0.079365f, 0.089989f, 0.101045f, 0.112512f, 0.124372f, 0.136611f, 0.149216f, 0.162176f,
+ 0.175482f, 0.189125f, 0.203098f, 0.217396f, 0.232015f, 0.246950f, 0.262200f, 0.277761f,
+ 0.293634f, 0.309819f, 0.326315f, 0.343126f, 0.360254f, 0.377701f, 0.395474f, 0.413577f,
+ 0.432018f, 0.450804f, 0.469944f, 0.489451f, 0.509337f, 0.529617f, 0.550307f, 0.571428f,
+ 0.593003f, 0.615059f, 0.637628f, 0.660746f, 0.684460f, 0.708820f, 0.733893f, 0.759756f,
+ 0.786505f, 0.814259f, 0.843157f, 0.873340f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000003f, 0.000683f, 0.002764f, 0.006148f, 0.010661f,
+ 0.016155f, 0.022506f, 0.029620f, 0.037417f, 0.045835f, 0.054821f, 0.064333f, 0.074333f,
+ 0.084792f, 0.095683f, 0.106984f, 0.118675f, 0.130741f, 0.143166f, 0.155939f, 0.169049f,
+ 0.182487f, 0.196245f, 0.210317f, 0.224697f, 0.239380f, 0.254364f, 0.269646f, 0.285223f,
+ 0.301096f, 0.317265f, 0.333729f, 0.350491f, 0.367554f, 0.384920f, 0.402594f, 0.420582f,
+ 0.438891f, 0.457527f, 0.476499f, 0.495820f, 0.515500f, 0.535555f, 0.556000f, 0.576855f,
+ 0.598143f, 0.619888f, 0.642123f, 0.664883f, 0.688211f, 0.712160f, 0.736792f, 0.762186f,
+ 0.788439f, 0.815672f, 0.844034f, 0.873699f, 0.904765f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000066f, 0.001228f, 0.003880f, 0.007835f, 0.012895f,
+ 0.018905f, 0.025742f, 0.033309f, 0.041530f, 0.050342f, 0.059696f, 0.069550f, 0.079868f,
+ 0.090620f, 0.101783f, 0.113333f, 0.125254f, 0.137529f, 0.150144f, 0.163088f, 0.176351f,
+ 0.189924f, 0.203799f, 0.217970f, 0.232433f, 0.247182f, 0.262216f, 0.277530f, 0.293124f,
+ 0.308997f, 0.325149f, 0.341581f, 0.358294f, 0.375290f, 0.392573f, 0.410148f, 0.428019f,
+ 0.446192f, 0.464676f, 0.483478f, 0.502608f, 0.522079f, 0.541905f, 0.562100f, 0.582684f,
+ 0.603677f, 0.625106f, 0.646998f, 0.669390f, 0.692324f, 0.715849f, 0.740028f, 0.764937f,
+ 0.790673f, 0.817358f, 0.845150f, 0.874244f, 0.904828f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000260f, 0.002001f, 0.005278f, 0.009840f, 0.015475f,
+ 0.022025f, 0.029365f, 0.037402f, 0.046060f, 0.055280f, 0.065013f, 0.075218f, 0.085861f,
+ 0.096916f, 0.108356f, 0.120163f, 0.132319f, 0.144808f, 0.157618f, 0.170737f, 0.184155f,
+ 0.197866f, 0.211861f, 0.226134f, 0.240682f, 0.255499f, 0.270583f, 0.285931f, 0.301542f,
+ 0.317415f, 0.333550f, 0.349948f, 0.366610f, 0.383539f, 0.400738f, 0.418210f, 0.435961f,
+ 0.453997f, 0.472324f, 0.490951f, 0.509887f, 0.529144f, 0.548735f, 0.568674f, 0.588979f,
+ 0.609671f, 0.630773f, 0.652314f, 0.674328f, 0.696854f, 0.719942f, 0.743651f, 0.768057f,
+ 0.793253f, 0.819363f, 0.846547f, 0.875017f, 0.905021f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000642f, 0.003053f, 0.007010f, 0.012219f, 0.018462f,
+ 0.025577f, 0.033444f, 0.041970f, 0.051082f, 0.060724f, 0.070849f, 0.081417f, 0.092397f,
+ 0.103763f, 0.115491f, 0.127562f, 0.139960f, 0.152670f, 0.165679f, 0.178979f, 0.192558f,
+ 0.206410f, 0.220529f, 0.234907f, 0.249542f, 0.264428f, 0.279564f, 0.294947f, 0.310575f,
+ 0.326448f, 0.342566f, 0.358929f, 0.375540f, 0.392399f, 0.409511f, 0.426878f, 0.444506f,
+ 0.462400f, 0.480566f, 0.499013f, 0.517749f, 0.536785f, 0.556134f, 0.575809f, 0.595827f,
+ 0.616207f, 0.636973f, 0.658150f, 0.679772f, 0.701876f, 0.724509f, 0.747730f, 0.771609f,
+ 0.796240f, 0.821743f, 0.848280f, 0.876069f, 0.905404f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000020f, 0.001278f, 0.004450f, 0.009147f, 0.015050f, 0.021937f,
+ 0.029649f, 0.038068f, 0.047106f, 0.056694f, 0.066777f, 0.077310f, 0.088257f, 0.099588f,
+ 0.111277f, 0.123304f, 0.135650f, 0.148299f, 0.161237f, 0.174455f, 0.187941f, 0.201687f,
+ 0.215687f, 0.229933f, 0.244420f, 0.259145f, 0.274103f, 0.289293f, 0.304711f, 0.320357f,
+ 0.336230f, 0.352330f, 0.368658f, 0.385214f, 0.402002f, 0.419023f, 0.436282f, 0.453782f,
+ 0.471529f, 0.489528f, 0.507788f, 0.526317f, 0.545124f, 0.564221f, 0.583621f, 0.603341f,
+ 0.623397f, 0.643812f, 0.664611f, 0.685824f, 0.707488f, 0.729646f, 0.752354f, 0.775680f,
+ 0.799715f, 0.824574f, 0.850417f, 0.877466f, 0.906040f, 0.936528f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000183f, 0.002253f, 0.006282f, 0.011786f, 0.018436f, 0.026011f,
+ 0.034358f, 0.043364f, 0.052944f, 0.063033f, 0.073580f, 0.084544f, 0.095889f, 0.107588f,
+ 0.119617f, 0.131957f, 0.144591f, 0.157503f, 0.170682f, 0.184117f, 0.197799f, 0.211720f,
+ 0.225873f, 0.240253f, 0.254854f, 0.269673f, 0.284707f, 0.299953f, 0.315408f, 0.331073f,
+ 0.346946f, 0.363028f, 0.379318f, 0.395818f, 0.412530f, 0.429457f, 0.446602f, 0.463968f,
+ 0.481561f, 0.499386f, 0.517450f, 0.535761f, 0.554328f, 0.573162f, 0.592275f, 0.611681f,
+ 0.631398f, 0.651445f, 0.671845f, 0.692628f, 0.713827f, 0.735484f, 0.757650f, 0.780390f,
+ 0.803789f, 0.827960f, 0.853056f, 0.879298f, 0.907014f, 0.936691f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000617f, 0.003679f, 0.008674f, 0.015068f, 0.022531f, 0.030851f,
+ 0.039880f, 0.049515f, 0.059675f, 0.070300f, 0.081343f, 0.092764f, 0.104533f, 0.116624f,
+ 0.129015f, 0.141687f, 0.154626f, 0.167818f, 0.181252f, 0.194918f, 0.208807f, 0.222913f,
+ 0.237229f, 0.251750f, 0.266473f, 0.281392f, 0.296505f, 0.311811f, 0.327306f, 0.342991f,
+ 0.358864f, 0.374925f, 0.391176f, 0.407616f, 0.424249f, 0.441076f, 0.458100f, 0.475324f,
+ 0.492754f, 0.510394f, 0.528251f, 0.546331f, 0.564644f, 0.583198f, 0.602005f, 0.621078f,
+ 0.640434f, 0.660089f, 0.680066f, 0.700390f, 0.721094f, 0.742215f, 0.763800f, 0.785912f,
+ 0.808628f, 0.832055f, 0.856338f, 0.881690f, 0.908441f, 0.937125f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.001477f, 0.005732f, 0.011826f, 0.019212f, 0.027573f, 0.036710f,
+ 0.046487f, 0.056807f, 0.067598f, 0.078806f, 0.090386f, 0.102304f, 0.114532f, 0.127047f,
+ 0.139828f, 0.152861f, 0.166130f, 0.179624f, 0.193332f, 0.207247f, 0.221360f, 0.235666f,
+ 0.250158f, 0.264832f, 0.279684f, 0.294711f, 0.309911f, 0.325280f, 0.340819f, 0.356524f,
+ 0.372397f, 0.388438f, 0.404645f, 0.421022f, 0.437569f, 0.454287f, 0.471181f, 0.488253f,
+ 0.505507f, 0.522947f, 0.540580f, 0.558412f, 0.576449f, 0.594701f, 0.613178f, 0.631892f,
+ 0.650856f, 0.670088f, 0.689606f, 0.709434f, 0.729600f, 0.750138f, 0.771093f, 0.792519f,
+ 0.814488f, 0.837097f, 0.860481f, 0.884842f, 0.910494f, 0.937985f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000096f, 0.003012f, 0.008704f, 0.016071f, 0.024590f, 0.033968f, 0.044025f,
+ 0.054641f, 0.065728f, 0.077225f, 0.089081f, 0.101260f, 0.113731f, 0.126469f, 0.139454f,
+ 0.152670f, 0.166101f, 0.179736f, 0.193565f, 0.207578f, 0.221769f, 0.236130f, 0.250656f,
+ 0.265343f, 0.280187f, 0.295183f, 0.310330f, 0.325624f, 0.341065f, 0.356650f, 0.372380f,
+ 0.388253f, 0.404269f, 0.420430f, 0.436735f, 0.453187f, 0.469786f, 0.486536f, 0.503439f,
+ 0.520498f, 0.537717f, 0.555102f, 0.572657f, 0.590390f, 0.608307f, 0.626419f, 0.644733f,
+ 0.663264f, 0.682025f, 0.701032f, 0.720308f, 0.739875f, 0.759764f, 0.780014f, 0.800673f,
+ 0.821803f, 0.843492f, 0.865860f, 0.889087f, 0.913466f, 0.939520f, 0.968350f, 1.000000f,
+ 0.000000f, 0.000727f, 0.005696f, 0.013170f, 0.022074f, 0.031940f, 0.042520f, 0.053660f,
+ 0.065258f, 0.077243f, 0.089562f, 0.102175f, 0.115050f, 0.128164f, 0.141495f, 0.155026f,
+ 0.168745f, 0.182639f, 0.196699f, 0.210915f, 0.225282f, 0.239792f, 0.254440f, 0.269223f,
+ 0.284135f, 0.299174f, 0.314337f, 0.329622f, 0.345026f, 0.360549f, 0.376189f, 0.391946f,
+ 0.407819f, 0.423808f, 0.439914f, 0.456137f, 0.472479f, 0.488940f, 0.505523f, 0.522230f,
+ 0.539064f, 0.556028f, 0.573125f, 0.590361f, 0.607741f, 0.625270f, 0.642957f, 0.660809f,
+ 0.678836f, 0.697050f, 0.715465f, 0.734098f, 0.752968f, 0.772101f, 0.791529f, 0.811290f,
+ 0.831438f, 0.852044f, 0.873210f, 0.895090f, 0.917932f, 0.942204f, 0.968981f, 1.000000f,
+ 0.000000f, 0.002796f, 0.010764f, 0.020645f, 0.031576f, 0.043202f, 0.055340f, 0.067877f,
+ 0.080740f, 0.093877f, 0.107250f, 0.120832f, 0.134598f, 0.148533f, 0.162620f, 0.176849f,
+ 0.191210f, 0.205694f, 0.220294f, 0.235005f, 0.249820f, 0.264737f, 0.279751f, 0.294859f,
+ 0.310058f, 0.325346f, 0.340721f, 0.356181f, 0.371725f, 0.387353f, 0.403063f, 0.418854f,
+ 0.434727f, 0.450682f, 0.466718f, 0.482837f, 0.499038f, 0.515324f, 0.531695f, 0.548153f,
+ 0.564700f, 0.581338f, 0.598070f, 0.614900f, 0.631830f, 0.648865f, 0.666011f, 0.683273f,
+ 0.700659f, 0.718176f, 0.735834f, 0.753646f, 0.771625f, 0.789790f, 0.808162f, 0.826771f,
+ 0.845654f, 0.864863f, 0.884472f, 0.904592f, 0.925407f, 0.947271f, 0.971050f, 1.000000f,
+ 0.000000f, 0.015873f, 0.031746f, 0.047619f, 0.063492f, 0.079365f, 0.095238f, 0.111111f,
+ 0.126984f, 0.142857f, 0.158730f, 0.174603f, 0.190476f, 0.206349f, 0.222222f, 0.238095f,
+ 0.253968f, 0.269841f, 0.285714f, 0.301587f, 0.317460f, 0.333333f, 0.349206f, 0.365079f,
+ 0.380952f, 0.396825f, 0.412698f, 0.428571f, 0.444444f, 0.460317f, 0.476190f, 0.492063f,
+ 0.507937f, 0.523810f, 0.539683f, 0.555556f, 0.571429f, 0.587302f, 0.603175f, 0.619048f,
+ 0.634921f, 0.650794f, 0.666667f, 0.682540f, 0.698413f, 0.714286f, 0.730159f, 0.746032f,
+ 0.761905f, 0.777778f, 0.793651f, 0.809524f, 0.825397f, 0.841270f, 0.857143f, 0.873016f,
+ 0.888889f, 0.904762f, 0.920635f, 0.936508f, 0.952381f, 0.968254f, 0.984127f, 1.000000f
+};
+
+static float btdf_split_sum_ggx[32][64 * 64] = {
+ {
+ 0.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f,
+ 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.999512f, 1.000000f, 0.999512f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.999512f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.999512f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 0.999512f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 0.999512f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 0.999512f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.039917f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.999512f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 0.999512f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 0.999512f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f,
+ 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 0.999512f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
+ 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.999512f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.999512f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 0.999512f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 0.999512f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 0.999512f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ },
+ {
+ 0.000122f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000122f, 0.004147f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.897949f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000732f, 0.996094f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.002439f,
+ 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000366f, 0.078308f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f,
+ 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.001098f, 0.992188f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 0.999512f,
+ 1.000000f, 1.000000f, 0.999512f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.005001f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.999512f,
+ 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 0.999512f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000732f, 0.902344f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000122f, 0.000122f, 0.000122f, 0.002928f, 0.997070f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 1.000000f, 0.999512f, 0.999512f, 1.000000f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000732f, 0.301758f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.999512f, 1.000000f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.002562f, 0.996094f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000732f, 0.433594f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000244f, 0.004021f, 0.996582f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.001098f, 0.949219f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000610f,
+ 0.012039f, 0.998047f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.002073f, 0.993652f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000854f, 0.725586f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000610f, 0.011856f, 0.998047f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000243f, 0.002905f, 0.995117f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.001098f, 0.978027f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000732f, 0.314941f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000731f, 0.017670f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000366f, 0.005852f, 0.997559f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.003050f,
+ 0.996094f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.001957f, 0.993652f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.001586f, 0.990234f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.001220f, 0.986816f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.001220f, 0.984375f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000122f, 0.000122f, 0.000122f,
+ 0.001098f, 0.985352f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.001220f, 0.989258f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.001341f, 0.993652f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000122f, 0.000122f, 0.000122f, 0.001586f, 0.996094f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.002802f, 0.997559f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000117f, 0.000122f, 0.000122f,
+ 0.000243f, 0.006088f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000366f, 0.026321f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000732f, 0.892578f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000975f, 0.993652f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.002317f, 0.998535f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000122f, 0.017944f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000731f, 0.983887f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000119f, 0.000122f, 0.000122f, 0.001653f, 0.998535f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000122f, 0.000122f, 0.000122f, 0.026108f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000732f, 0.995605f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.003777f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000365f, 0.991211f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.002195f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000122f, 0.000364f, 0.993164f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.002672f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000360f, 0.998047f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000122f, 0.000122f, 0.017075f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000731f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.997070f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.006874f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000480f, 0.999512f, 0.999512f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000122f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.996582f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000067f, 0.005440f, 0.999512f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000365f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.995605f, 0.995117f,
+ 0.995117f, 0.995605f, 0.995117f, 0.995117f,
+ },
+ {
+ 0.003168f, 0.995605f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 1.000000f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f,
+ 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000976f, 0.053314f, 0.994629f, 0.998535f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000122f, 0.000122f, 0.000732f, 0.003660f,
+ 0.653809f, 0.995117f, 0.998047f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000488f, 0.001463f, 0.010452f, 0.947266f, 0.995605f, 0.998535f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000365f, 0.000853f, 0.002928f, 0.037750f,
+ 0.980957f, 0.996582f, 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000243f, 0.000610f, 0.001342f, 0.006100f, 0.314453f, 0.989746f, 0.997070f, 0.998535f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000487f, 0.001091f, 0.002317f, 0.015839f, 0.910645f,
+ 0.993652f, 0.997559f, 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 0.999512f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000366f, 0.000732f, 0.001463f, 0.005302f, 0.068909f, 0.977539f, 0.995605f, 0.998047f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000244f, 0.000732f, 0.001098f, 0.002560f, 0.011551f, 0.658691f, 0.989746f,
+ 0.997070f, 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000366f,
+ 0.000732f, 0.001585f, 0.004868f, 0.041077f, 0.958984f, 0.994141f, 0.997559f, 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000244f, 0.000732f, 0.001215f, 0.002802f, 0.010834f, 0.441895f, 0.987305f, 0.996094f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000242f, 0.000488f, 0.000850f,
+ 0.001586f, 0.004753f, 0.039154f, 0.948242f, 0.993652f, 0.997559f, 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000366f, 0.000732f, 0.001220f, 0.003159f, 0.012032f, 0.480713f, 0.985840f, 0.996094f, 0.998047f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000240f, 0.000731f, 0.001097f, 0.001950f,
+ 0.005966f, 0.054413f, 0.957520f, 0.994141f, 0.997070f, 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000486f, 0.000732f, 0.001534f, 0.003536f, 0.016937f, 0.726562f, 0.988281f, 0.996582f, 0.998047f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000365f, 0.000732f, 0.001098f, 0.002192f, 0.008278f,
+ 0.125244f, 0.974121f, 0.994629f, 0.997559f, 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000365f, 0.000731f, 0.000947f, 0.001828f, 0.005314f, 0.031677f, 0.916016f, 0.991699f, 0.997070f, 0.998535f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000488f, 0.000732f, 0.001339f, 0.003294f, 0.014389f, 0.562012f,
+ 0.985840f, 0.996094f, 0.998047f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000487f,
+ 0.000732f, 0.001098f, 0.002310f, 0.008163f, 0.123779f, 0.973633f, 0.994629f, 0.997559f, 0.998535f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000365f, 0.000732f, 0.001097f, 0.002071f, 0.005669f, 0.041199f, 0.937988f, 0.992676f,
+ 0.997070f, 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000118f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000366f, 0.000728f, 0.000732f,
+ 0.001585f, 0.004143f, 0.020813f, 0.813965f, 0.989746f, 0.996582f, 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000116f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000488f, 0.000732f, 0.001220f, 0.003292f, 0.012581f, 0.446533f, 0.984863f, 0.996094f, 0.998047f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000471f, 0.000732f, 0.001220f, 0.002796f,
+ 0.009338f, 0.161865f, 0.977051f, 0.995117f, 0.997559f, 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000365f, 0.000732f, 0.001098f, 0.002285f, 0.006870f, 0.074097f, 0.965820f, 0.994141f, 0.997559f, 0.998535f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000366f, 0.000731f, 0.001086f, 0.001945f, 0.005238f, 0.043732f,
+ 0.947754f, 0.993652f, 0.997559f, 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000120f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000366f,
+ 0.000730f, 0.000893f, 0.001826f, 0.004871f, 0.030411f, 0.922852f, 0.992188f, 0.997559f, 0.998535f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000243f, 0.000609f, 0.000732f, 0.001407f, 0.004375f, 0.023758f, 0.892090f, 0.992188f,
+ 0.997070f, 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000605f, 0.000732f,
+ 0.001579f, 0.003941f, 0.020767f, 0.862793f, 0.991699f, 0.997559f, 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000238f, 0.000483f, 0.000732f, 0.001449f, 0.003654f, 0.018951f, 0.847656f, 0.991699f, 0.997559f, 0.998535f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000233f, 0.000485f, 0.000732f, 0.001308f, 0.003353f,
+ 0.018997f, 0.855469f, 0.991699f, 0.997559f, 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000118f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000487f, 0.000732f, 0.001292f, 0.003649f, 0.019791f, 0.881836f, 0.992188f, 0.997559f, 0.998535f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000432f, 0.000732f, 0.001220f, 0.003635f, 0.021912f, 0.916992f,
+ 0.993652f, 0.997559f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000116f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000487f,
+ 0.000732f, 0.001245f, 0.004002f, 0.028107f, 0.946289f, 0.994141f, 0.998047f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000085f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000475f, 0.000732f, 0.001611f, 0.004581f, 0.040466f, 0.966309f, 0.995605f, 0.998535f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000487f, 0.000732f, 0.001703f,
+ 0.005589f, 0.073486f, 0.979980f, 0.996094f, 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000475f, 0.000732f, 0.001706f, 0.006809f, 0.198730f, 0.987305f, 0.997559f, 0.998535f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000488f, 0.000732f, 0.002071f, 0.009590f, 0.647949f,
+ 0.992188f, 0.997559f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000120f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000710f, 0.001093f, 0.002541f, 0.015533f, 0.922852f, 0.995117f, 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000116f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000242f, 0.000728f, 0.001218f, 0.003387f, 0.034454f, 0.975586f, 0.996582f, 0.998535f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000365f, 0.000731f, 0.001219f,
+ 0.004959f, 0.161865f, 0.989746f, 0.998047f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000366f, 0.000731f, 0.001767f, 0.009331f, 0.849121f, 0.994629f, 0.998535f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000487f, 0.000732f, 0.002644f, 0.024231f, 0.977051f,
+ 0.997559f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000685f, 0.001217f, 0.004139f, 0.195435f, 0.992676f, 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000362f, 0.000731f, 0.001570f, 0.010086f, 0.944824f, 0.997070f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000365f, 0.000745f, 0.002781f,
+ 0.051758f, 0.990723f, 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000599f, 0.001176f, 0.006641f, 0.899414f, 0.997070f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000120f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000731f, 0.002066f, 0.032654f, 0.991211f, 0.998535f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000119f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000448f,
+ 0.001088f, 0.005440f, 0.918457f, 0.997070f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000119f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000725f, 0.001822f, 0.038452f, 0.994141f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000120f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000329f, 0.000848f, 0.005672f, 0.972168f,
+ 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000581f, 0.001982f, 0.155273f, 0.997070f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000120f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000330f, 0.000848f, 0.009247f, 0.992676f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000589f, 0.002625f,
+ 0.958496f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.001199f, 0.083374f, 0.998047f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000716f, 0.007244f, 0.996582f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000122f, 0.000122f, 0.000122f,
+ 0.002277f, 0.991211f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000070f, 0.000121f, 0.000122f, 0.000122f, 0.000854f, 0.950684f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000111f, 0.000121f, 0.000122f, 0.000475f, 0.067139f, 0.999512f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000118f, 0.000122f,
+ 0.000002f, 0.005859f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000014f, 0.001376f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000572f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000077f, 0.000002f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000103f, 0.992188f, 0.991699f, 0.991699f, 0.992188f, 0.992188f, 0.991699f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.940430f, 0.940430f,
+ 0.940918f, 0.940918f, 0.940430f, 0.940430f,
+ },
+ {
+ 0.014023f, 0.979492f, 0.994629f, 0.997070f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000488f, 0.004757f, 0.163330f, 0.975098f, 0.993164f, 0.996582f, 0.997559f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000610f, 0.002928f, 0.017166f,
+ 0.563965f, 0.978027f, 0.992676f, 0.996094f, 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000364f, 0.000732f, 0.002192f, 0.006573f, 0.044952f, 0.830566f, 0.980957f, 0.992676f, 0.996094f, 0.997070f, 0.998047f,
+ 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 1.000000f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000366f, 0.000854f, 0.001586f, 0.004253f, 0.014313f, 0.130371f,
+ 0.919922f, 0.984375f, 0.993652f, 0.996094f, 0.997070f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000488f,
+ 0.000854f, 0.001342f, 0.003025f, 0.007305f, 0.028870f, 0.407715f, 0.954590f, 0.987305f, 0.993652f, 0.996094f, 0.997070f, 0.998047f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000609f, 0.000842f, 0.000976f, 0.002193f, 0.005112f, 0.012505f, 0.066589f, 0.768066f,
+ 0.970703f, 0.989746f, 0.994629f, 0.996582f, 0.997070f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000244f, 0.000599f, 0.000609f, 0.000976f,
+ 0.001829f, 0.003046f, 0.007256f, 0.023499f, 0.194946f, 0.908691f, 0.979980f, 0.991699f, 0.995117f, 0.996582f, 0.997559f, 0.998535f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000244f, 0.000488f, 0.000609f, 0.000976f, 0.001583f, 0.002647f, 0.004726f, 0.012169f, 0.050537f, 0.568359f, 0.954102f,
+ 0.985840f, 0.993164f, 0.995605f, 0.997070f, 0.998047f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000244f, 0.000488f, 0.000610f, 0.000975f, 0.001211f, 0.001946f,
+ 0.003532f, 0.007793f, 0.022446f, 0.139648f, 0.856445f, 0.974121f, 0.989746f, 0.994141f, 0.996094f, 0.997559f, 0.998047f, 0.998535f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000241f,
+ 0.000310f, 0.000609f, 0.000807f, 0.001098f, 0.001822f, 0.002794f, 0.005699f, 0.012878f, 0.047821f, 0.469238f, 0.941406f, 0.982910f,
+ 0.991699f, 0.995117f, 0.996582f, 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000244f, 0.000244f, 0.000609f, 0.000732f, 0.001098f, 0.001461f, 0.002274f, 0.004025f,
+ 0.008247f, 0.023254f, 0.135254f, 0.833984f, 0.969727f, 0.987793f, 0.993652f, 0.995605f, 0.997070f, 0.998047f, 0.998535f, 0.998535f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000207f, 0.000244f, 0.000609f,
+ 0.000610f, 0.001096f, 0.001098f, 0.002071f, 0.003370f, 0.006172f, 0.014442f, 0.052795f, 0.486572f, 0.940430f, 0.981934f, 0.991699f,
+ 0.994629f, 0.996582f, 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000244f, 0.000485f, 0.000610f, 0.001080f, 0.001098f, 0.001742f, 0.002668f, 0.004692f, 0.010147f,
+ 0.028076f, 0.168701f, 0.854004f, 0.970703f, 0.988770f, 0.993652f, 0.996094f, 0.997070f, 0.998047f, 0.998047f, 0.998535f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000244f, 0.000487f, 0.000610f, 0.000731f,
+ 0.001098f, 0.001413f, 0.002411f, 0.003895f, 0.007072f, 0.017242f, 0.069580f, 0.605957f, 0.948730f, 0.983398f, 0.992188f, 0.995117f,
+ 0.996582f, 0.997559f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000244f, 0.000244f, 0.000609f, 0.000610f, 0.001094f, 0.001337f, 0.001828f, 0.003275f, 0.005814f, 0.012054f, 0.036987f,
+ 0.270752f, 0.899414f, 0.975586f, 0.989746f, 0.993652f, 0.996094f, 0.997070f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000241f, 0.000365f, 0.000597f, 0.000610f, 0.000970f, 0.001098f,
+ 0.001815f, 0.002771f, 0.005009f, 0.008888f, 0.023804f, 0.115845f, 0.775879f, 0.962891f, 0.986328f, 0.993164f, 0.995605f, 0.997070f,
+ 0.997559f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000244f, 0.000536f, 0.000731f, 0.000937f, 0.001203f, 0.001581f, 0.002186f, 0.004005f, 0.007061f, 0.016830f, 0.061218f, 0.522949f,
+ 0.940430f, 0.981934f, 0.991211f, 0.994629f, 0.996582f, 0.997559f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000363f, 0.000487f, 0.000731f, 0.000732f, 0.001097f, 0.001339f, 0.002071f,
+ 0.003498f, 0.005947f, 0.012390f, 0.037964f, 0.268799f, 0.896973f, 0.975586f, 0.989258f, 0.994141f, 0.996094f, 0.997070f, 0.998047f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000244f, 0.000366f,
+ 0.000609f, 0.000610f, 0.001094f, 0.001215f, 0.002056f, 0.003183f, 0.004742f, 0.009880f, 0.026337f, 0.139526f, 0.813477f, 0.966309f,
+ 0.986816f, 0.993164f, 0.996094f, 0.997070f, 0.997559f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000163f, 0.000363f, 0.000600f, 0.000731f, 0.001088f, 0.001216f, 0.001616f, 0.002640f, 0.004402f,
+ 0.008156f, 0.019669f, 0.083191f, 0.664062f, 0.953125f, 0.984375f, 0.992188f, 0.995117f, 0.997070f, 0.998047f, 0.998535f, 0.998535f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000243f, 0.000244f, 0.000523f, 0.000731f,
+ 0.000732f, 0.001097f, 0.001690f, 0.002169f, 0.003998f, 0.006939f, 0.015808f, 0.055634f, 0.471191f, 0.935059f, 0.980957f, 0.991211f,
+ 0.995117f, 0.996582f, 0.997559f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000336f, 0.000486f, 0.000731f, 0.000732f, 0.001097f, 0.001558f, 0.002069f, 0.003525f, 0.006058f, 0.013062f,
+ 0.040894f, 0.306396f, 0.910156f, 0.978027f, 0.990234f, 0.994141f, 0.996582f, 0.997559f, 0.998535f, 0.998535f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000113f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000360f, 0.000515f, 0.000731f, 0.000731f, 0.001094f,
+ 0.001219f, 0.002148f, 0.003159f, 0.005577f, 0.011360f, 0.031952f, 0.203979f, 0.874512f, 0.973633f, 0.989258f, 0.994141f, 0.996582f,
+ 0.997559f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000325f, 0.000366f, 0.000731f, 0.000731f, 0.001093f, 0.001219f, 0.001820f, 0.002916f, 0.005291f, 0.009758f, 0.026352f, 0.145020f,
+ 0.832520f, 0.969238f, 0.988281f, 0.993652f, 0.996094f, 0.997559f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000244f, 0.000440f, 0.000605f, 0.000731f, 0.001086f, 0.001097f, 0.001646f,
+ 0.002670f, 0.004230f, 0.008835f, 0.022415f, 0.112183f, 0.786133f, 0.966309f, 0.987793f, 0.993652f, 0.996094f, 0.997559f, 0.998047f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000120f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000272f, 0.000358f,
+ 0.000565f, 0.000731f, 0.000790f, 0.001210f, 0.001573f, 0.002434f, 0.004360f, 0.008102f, 0.020660f, 0.092896f, 0.741699f, 0.962891f,
+ 0.987305f, 0.993164f, 0.996094f, 0.997070f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000364f, 0.000723f, 0.000731f, 0.000731f, 0.001216f, 0.001698f, 0.002510f, 0.003998f,
+ 0.007484f, 0.018463f, 0.082336f, 0.709961f, 0.961426f, 0.986816f, 0.993652f, 0.996094f, 0.997559f, 0.998535f, 0.998535f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000242f, 0.000362f, 0.000704f, 0.000730f,
+ 0.000845f, 0.001096f, 0.001513f, 0.002302f, 0.003941f, 0.007168f, 0.017746f, 0.076782f, 0.693848f, 0.961426f, 0.987305f, 0.993652f,
+ 0.996094f, 0.997559f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000364f, 0.000579f, 0.000728f, 0.000731f, 0.001096f, 0.001491f, 0.002069f, 0.003899f, 0.007195f, 0.017059f,
+ 0.075439f, 0.701172f, 0.962402f, 0.987793f, 0.993652f, 0.996094f, 0.997559f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000119f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000357f, 0.000482f, 0.000730f, 0.000731f, 0.001094f,
+ 0.001334f, 0.002230f, 0.003708f, 0.007217f, 0.017410f, 0.079163f, 0.730469f, 0.965820f, 0.988281f, 0.994141f, 0.996582f, 0.998047f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000112f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000238f,
+ 0.000243f, 0.000365f, 0.000729f, 0.000731f, 0.001095f, 0.001330f, 0.002066f, 0.003637f, 0.007118f, 0.018112f, 0.087708f, 0.775391f,
+ 0.969238f, 0.989258f, 0.994629f, 0.997070f, 0.997559f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000073f, 0.000121f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000323f, 0.000390f, 0.000729f, 0.000731f, 0.001094f, 0.001332f, 0.002275f,
+ 0.003782f, 0.007252f, 0.019379f, 0.105042f, 0.827637f, 0.973145f, 0.990723f, 0.994629f, 0.997070f, 0.998047f, 0.998535f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000114f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000240f, 0.000369f,
+ 0.000729f, 0.000731f, 0.001093f, 0.001330f, 0.002209f, 0.003937f, 0.007896f, 0.021805f, 0.137207f, 0.876953f, 0.979004f, 0.991699f,
+ 0.995605f, 0.997559f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000119f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000272f, 0.000479f, 0.000727f, 0.000731f, 0.001085f, 0.001331f, 0.002291f, 0.004105f, 0.008446f,
+ 0.025024f, 0.202271f, 0.916504f, 0.982910f, 0.993164f, 0.996094f, 0.997559f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000120f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000360f, 0.000469f, 0.000681f, 0.000731f,
+ 0.001092f, 0.001331f, 0.002184f, 0.004227f, 0.009521f, 0.030899f, 0.335205f, 0.945312f, 0.986816f, 0.993652f, 0.996582f, 0.998535f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000116f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000241f, 0.000429f, 0.000726f, 0.000731f, 0.001091f, 0.001649f, 0.002464f, 0.004810f, 0.010895f, 0.041931f, 0.563477f,
+ 0.963867f, 0.989746f, 0.995117f, 0.997070f, 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000101f, 0.000120f,
+ 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000288f, 0.000481f, 0.000720f, 0.000731f, 0.001093f, 0.001571f,
+ 0.002735f, 0.005405f, 0.013199f, 0.064880f, 0.786133f, 0.976562f, 0.992188f, 0.995605f, 0.997559f, 0.998535f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000112f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000240f,
+ 0.000481f, 0.000727f, 0.000731f, 0.001093f, 0.001655f, 0.003132f, 0.005909f, 0.017181f, 0.123169f, 0.904297f, 0.984375f, 0.993652f,
+ 0.996582f, 0.998047f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000110f, 0.000120f, 0.000121f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000264f, 0.000392f, 0.000727f, 0.000835f, 0.001196f, 0.001765f, 0.003252f, 0.007343f,
+ 0.024521f, 0.304199f, 0.954102f, 0.989258f, 0.995605f, 0.997559f, 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000034f, 0.000119f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000235f, 0.000375f, 0.000728f,
+ 0.000822f, 0.001095f, 0.002024f, 0.003952f, 0.009193f, 0.040894f, 0.694824f, 0.975586f, 0.992676f, 0.996582f, 0.998047f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000112f, 0.000121f, 0.000121f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000307f, 0.000475f, 0.000728f, 0.000943f, 0.001216f, 0.002283f, 0.004829f, 0.013008f, 0.092224f, 0.908203f,
+ 0.986328f, 0.995117f, 0.997559f, 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000073f, 0.000118f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000240f, 0.000576f, 0.000728f, 0.001073f, 0.001569f,
+ 0.002668f, 0.005947f, 0.020889f, 0.331543f, 0.965820f, 0.992188f, 0.996582f, 0.998047f, 0.998535f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000100f, 0.000120f, 0.000121f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000362f, 0.000630f, 0.000729f, 0.001087f, 0.001567f, 0.003241f, 0.008240f, 0.043793f, 0.824219f, 0.984375f, 0.994629f, 0.997559f,
+ 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000075f, 0.000119f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000363f, 0.000689f, 0.000730f, 0.001185f, 0.002022f, 0.004108f, 0.013702f,
+ 0.161011f, 0.957031f, 0.991699f, 0.996582f, 0.998047f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000003f, 0.000105f, 0.000120f, 0.000121f, 0.000121f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000156f, 0.000372f, 0.000689f,
+ 0.000730f, 0.001198f, 0.002651f, 0.006214f, 0.028854f, 0.750000f, 0.984375f, 0.995605f, 0.998047f, 0.998535f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000102f,
+ 0.000118f, 0.000120f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000472f, 0.000724f, 0.000966f, 0.001658f, 0.003397f, 0.010582f, 0.116028f, 0.959473f, 0.993164f,
+ 0.997559f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000111f, 0.000119f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000130f, 0.000479f, 0.000726f, 0.001163f, 0.002157f,
+ 0.004829f, 0.024338f, 0.776855f, 0.987793f, 0.996582f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000097f, 0.000117f,
+ 0.000120f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000219f, 0.000580f, 0.000728f, 0.001203f, 0.002872f, 0.009109f, 0.130371f, 0.972168f, 0.995117f, 0.998047f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000112f, 0.000118f, 0.000121f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000333f, 0.000681f, 0.000940f, 0.001629f, 0.004120f, 0.025467f, 0.890625f,
+ 0.991699f, 0.997559f, 0.999512f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000083f, 0.000116f, 0.000120f,
+ 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000353f, 0.000722f,
+ 0.000961f, 0.002403f, 0.009354f, 0.295166f, 0.985840f, 0.997070f, 0.999512f, 0.999023f, 0.999512f, 0.999023f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000105f, 0.000118f, 0.000120f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000130f, 0.000427f, 0.000605f, 0.001345f, 0.004620f, 0.041229f, 0.966797f, 0.996094f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000074f, 0.000114f, 0.000119f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000089f, 0.000562f, 0.000942f, 0.002352f, 0.012459f,
+ 0.854004f, 0.994141f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000103f, 0.000117f, 0.000120f, 0.000121f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000007f, 0.000002f,
+ 0.000231f, 0.000596f, 0.001180f, 0.005474f, 0.211426f, 0.991211f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000111f, 0.000118f, 0.000120f, 0.000121f,
+ 0.000121f, 0.000122f, 0.000029f, 0.000004f, 0.000001f, 0.000348f, 0.000896f, 0.002764f, 0.032562f, 0.984375f, 0.998535f, 0.998535f,
+ 0.999023f, 0.998535f, 0.999023f, 0.999023f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000089f, 0.000116f, 0.000119f, 0.000121f, 0.000121f, 0.000121f, 0.000013f, 0.000003f, 0.000075f, 0.000586f, 0.001508f,
+ 0.010292f, 0.963379f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000006f, 0.000107f, 0.000118f, 0.000120f, 0.000121f, 0.000116f,
+ 0.000008f, 0.000002f, 0.000233f, 0.000857f, 0.004566f, 0.834961f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000083f, 0.000114f, 0.000119f, 0.000120f, 0.000060f, 0.000005f, 0.000001f, 0.000557f, 0.002064f, 0.182373f, 0.997559f, 0.997559f,
+ 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000103f, 0.000117f, 0.000120f, 0.000024f, 0.000003f, 0.000168f,
+ 0.000968f, 0.026428f, 0.996582f, 0.997070f, 0.996582f, 0.996582f, 0.996582f, 0.997070f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000047f,
+ 0.000110f, 0.000118f, 0.000017f, 0.000002f, 0.000513f, 0.006870f, 0.995605f, 0.995605f, 0.995117f, 0.995117f, 0.995117f, 0.995117f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000096f, 0.000115f, 0.000011f, 0.000042f, 0.001919f, 0.992676f, 0.992676f,
+ 0.992676f, 0.992676f, 0.992676f, 0.992676f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000044f, 0.000109f,
+ 0.000008f, 0.000314f, 0.985840f, 0.985840f, 0.985840f, 0.985840f, 0.986328f, 0.985840f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000089f, 0.000060f, 0.964355f, 0.964355f, 0.963867f, 0.963867f, 0.963379f, 0.964355f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000022f, 0.818848f, 0.819824f,
+ 0.819336f, 0.819824f, 0.819824f, 0.819824f,
+ },
+ {
+ 0.038849f, 0.941406f, 0.984375f, 0.992188f, 0.994141f, 0.996094f, 0.996582f, 0.997070f, 0.998047f, 0.998047f, 0.998047f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 1.000000f, 1.000000f, 1.000000f, 0.999512f, 0.001582f, 0.014984f, 0.262451f, 0.930664f, 0.979980f, 0.989258f, 0.993164f, 0.995117f,
+ 0.996094f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.999512f, 0.000244f, 0.002317f, 0.009003f, 0.047180f,
+ 0.524902f, 0.936523f, 0.978027f, 0.988281f, 0.992188f, 0.994629f, 0.995605f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f,
+ 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000122f, 0.001098f, 0.002560f, 0.006824f, 0.020493f, 0.108826f, 0.715820f, 0.946289f, 0.978516f, 0.988281f, 0.992188f, 0.994141f,
+ 0.995605f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000607f, 0.001098f, 0.002310f, 0.005646f, 0.012825f, 0.040131f, 0.231201f,
+ 0.825195f, 0.954590f, 0.979980f, 0.988281f, 0.992188f, 0.994141f, 0.995117f, 0.996582f, 0.996582f, 0.997559f, 0.998047f, 0.998047f,
+ 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 0.000000f, 0.000244f, 0.000609f, 0.001341f,
+ 0.002310f, 0.004208f, 0.008865f, 0.021591f, 0.074585f, 0.439209f, 0.885742f, 0.962402f, 0.981934f, 0.989258f, 0.992676f, 0.994141f,
+ 0.995605f, 0.996582f, 0.997070f, 0.997070f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.999512f,
+ 0.000000f, 0.000122f, 0.000483f, 0.000610f, 0.001460f, 0.002192f, 0.003994f, 0.007030f, 0.013847f, 0.036316f, 0.146362f, 0.661621f,
+ 0.921875f, 0.969238f, 0.983398f, 0.989746f, 0.993164f, 0.994141f, 0.995605f, 0.996582f, 0.996582f, 0.997559f, 0.998047f, 0.998047f,
+ 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.000000f, 0.000000f, 0.000243f, 0.000604f, 0.000730f, 0.001307f, 0.001944f, 0.003017f,
+ 0.004997f, 0.009834f, 0.021606f, 0.063416f, 0.295410f, 0.808594f, 0.944336f, 0.974609f, 0.985352f, 0.990234f, 0.993652f, 0.995117f,
+ 0.995605f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000119f, 0.000366f,
+ 0.000495f, 0.000731f, 0.001217f, 0.001823f, 0.002796f, 0.004398f, 0.007656f, 0.015366f, 0.035828f, 0.119263f, 0.531738f, 0.886230f,
+ 0.958496f, 0.979004f, 0.986816f, 0.991699f, 0.993652f, 0.995117f, 0.996094f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998535f,
+ 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000244f, 0.000366f, 0.000607f, 0.000731f, 0.001211f, 0.001650f, 0.002441f, 0.003975f, 0.006207f,
+ 0.011536f, 0.023315f, 0.060822f, 0.242798f, 0.744141f, 0.927734f, 0.969238f, 0.982422f, 0.989258f, 0.992188f, 0.994141f, 0.995605f,
+ 0.996094f, 0.996582f, 0.997559f, 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000211f, 0.000455f, 0.000486f, 0.000853f,
+ 0.001081f, 0.001810f, 0.002426f, 0.003759f, 0.005501f, 0.009094f, 0.016876f, 0.037109f, 0.114075f, 0.475586f, 0.862305f, 0.951172f,
+ 0.975586f, 0.985840f, 0.990234f, 0.992676f, 0.995117f, 0.995605f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998535f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000364f, 0.000366f, 0.000464f, 0.000731f, 0.001093f, 0.001577f, 0.002235f, 0.002798f, 0.004841f, 0.007637f, 0.013008f,
+ 0.025635f, 0.063965f, 0.238403f, 0.720215f, 0.919434f, 0.965820f, 0.981445f, 0.987793f, 0.991211f, 0.993652f, 0.995117f, 0.996094f,
+ 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000238f, 0.000609f, 0.000712f, 0.000974f, 0.000976f, 0.001507f,
+ 0.002031f, 0.002680f, 0.004066f, 0.006294f, 0.010284f, 0.018326f, 0.040924f, 0.124146f, 0.485596f, 0.859375f, 0.949707f, 0.975586f,
+ 0.984375f, 0.989746f, 0.992676f, 0.994629f, 0.995605f, 0.996582f, 0.997070f, 0.997070f, 0.998047f, 0.998047f, 0.998535f, 0.998535f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000113f, 0.000487f,
+ 0.000488f, 0.000610f, 0.000961f, 0.000976f, 0.001337f, 0.001705f, 0.002663f, 0.003521f, 0.005417f, 0.008408f, 0.014809f, 0.028793f,
+ 0.073120f, 0.270996f, 0.741699f, 0.922363f, 0.965332f, 0.980957f, 0.987793f, 0.991699f, 0.993652f, 0.995117f, 0.996094f, 0.997070f,
+ 0.997070f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000122f, 0.000244f, 0.000224f, 0.000486f, 0.000609f, 0.000610f, 0.000973f, 0.000975f, 0.001306f, 0.001703f, 0.002350f,
+ 0.003239f, 0.004848f, 0.007122f, 0.011955f, 0.021820f, 0.048859f, 0.152710f, 0.554199f, 0.875977f, 0.953125f, 0.976562f, 0.985352f,
+ 0.990234f, 0.993164f, 0.994629f, 0.995605f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000234f, 0.000244f, 0.000485f, 0.000488f, 0.000610f,
+ 0.000969f, 0.000975f, 0.001335f, 0.001693f, 0.001991f, 0.002811f, 0.004097f, 0.006397f, 0.009903f, 0.017303f, 0.035034f, 0.094421f,
+ 0.354736f, 0.795898f, 0.933594f, 0.969238f, 0.981934f, 0.988281f, 0.991699f, 0.993652f, 0.995117f, 0.996094f, 0.997070f, 0.997559f,
+ 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000244f, 0.000244f, 0.000480f, 0.000608f, 0.000488f, 0.000922f, 0.000975f, 0.000976f, 0.001339f, 0.001827f, 0.002674f, 0.003891f,
+ 0.005688f, 0.008324f, 0.014320f, 0.026917f, 0.064392f, 0.216431f, 0.668945f, 0.904785f, 0.959961f, 0.978516f, 0.986816f, 0.990723f,
+ 0.993652f, 0.994141f, 0.996094f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000188f, 0.000220f, 0.000480f, 0.000608f, 0.000609f, 0.000876f, 0.000975f,
+ 0.000976f, 0.001454f, 0.002068f, 0.002649f, 0.003481f, 0.004757f, 0.007801f, 0.012230f, 0.021698f, 0.046814f, 0.138306f, 0.506348f,
+ 0.859375f, 0.947754f, 0.974121f, 0.984375f, 0.989746f, 0.992188f, 0.994141f, 0.995605f, 0.996582f, 0.997070f, 0.997559f, 0.998047f,
+ 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000244f,
+ 0.000446f, 0.000487f, 0.000609f, 0.000731f, 0.000973f, 0.000975f, 0.001310f, 0.001823f, 0.002304f, 0.002869f, 0.004890f, 0.006813f,
+ 0.010475f, 0.017731f, 0.036163f, 0.095337f, 0.353516f, 0.792480f, 0.932129f, 0.968262f, 0.982422f, 0.988770f, 0.992188f, 0.993652f,
+ 0.995605f, 0.996094f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000243f, 0.000241f, 0.000362f, 0.000487f, 0.000609f, 0.000609f, 0.000973f, 0.001213f, 0.001419f,
+ 0.001807f, 0.002068f, 0.002794f, 0.004070f, 0.005917f, 0.009140f, 0.015129f, 0.029053f, 0.070068f, 0.242554f, 0.700684f, 0.911621f,
+ 0.961914f, 0.979492f, 0.987305f, 0.991211f, 0.993164f, 0.995117f, 0.995605f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998535f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000243f, 0.000243f, 0.000483f, 0.000603f,
+ 0.000609f, 0.000730f, 0.001076f, 0.000975f, 0.001327f, 0.001598f, 0.002056f, 0.002848f, 0.003519f, 0.005589f, 0.008041f, 0.013321f,
+ 0.024155f, 0.054718f, 0.171875f, 0.590332f, 0.885742f, 0.955566f, 0.977051f, 0.985840f, 0.990723f, 0.993164f, 0.994629f, 0.995605f,
+ 0.997070f, 0.997070f, 0.997559f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000192f, 0.000122f, 0.000244f, 0.000483f, 0.000606f, 0.000608f, 0.000731f, 0.000953f, 0.001095f, 0.001258f, 0.001575f, 0.002066f,
+ 0.002594f, 0.003857f, 0.004734f, 0.007683f, 0.011642f, 0.021179f, 0.044464f, 0.127930f, 0.476807f, 0.850586f, 0.947266f, 0.974121f,
+ 0.984375f, 0.989746f, 0.992676f, 0.994141f, 0.995605f, 0.996582f, 0.997070f, 0.997559f, 0.998535f, 0.998535f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000229f, 0.000239f, 0.000244f, 0.000343f, 0.000483f, 0.000608f, 0.000609f,
+ 0.000857f, 0.000973f, 0.001097f, 0.001571f, 0.002041f, 0.002399f, 0.002922f, 0.004471f, 0.006836f, 0.010643f, 0.018661f, 0.037354f,
+ 0.100037f, 0.378418f, 0.810547f, 0.937988f, 0.971191f, 0.983887f, 0.989258f, 0.992188f, 0.994141f, 0.995605f, 0.996582f, 0.997070f,
+ 0.997559f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000161f,
+ 0.000230f, 0.000244f, 0.000486f, 0.000607f, 0.000609f, 0.000819f, 0.000972f, 0.000975f, 0.001431f, 0.001945f, 0.002283f, 0.003031f,
+ 0.004238f, 0.006424f, 0.009995f, 0.016068f, 0.032104f, 0.081360f, 0.302246f, 0.765625f, 0.928223f, 0.968750f, 0.982422f, 0.988770f,
+ 0.992676f, 0.994629f, 0.995605f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000240f, 0.000240f, 0.000244f, 0.000450f, 0.000607f, 0.000609f, 0.000731f, 0.001084f,
+ 0.000974f, 0.001341f, 0.001910f, 0.002254f, 0.003216f, 0.004017f, 0.005692f, 0.008980f, 0.014832f, 0.028854f, 0.069641f, 0.248657f,
+ 0.719238f, 0.918945f, 0.965820f, 0.981445f, 0.988770f, 0.992188f, 0.994629f, 0.995605f, 0.996094f, 0.997070f, 0.997559f, 0.998535f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000243f, 0.000360f,
+ 0.000461f, 0.000607f, 0.000608f, 0.000731f, 0.001086f, 0.001202f, 0.001307f, 0.001592f, 0.002066f, 0.003134f, 0.003990f, 0.005611f,
+ 0.008133f, 0.013680f, 0.025986f, 0.061462f, 0.211670f, 0.676758f, 0.910156f, 0.963867f, 0.980957f, 0.988281f, 0.991699f, 0.994629f,
+ 0.995605f, 0.996582f, 0.997070f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000240f, 0.000243f, 0.000482f, 0.000604f, 0.000608f, 0.000730f, 0.001040f, 0.001188f, 0.001287f,
+ 0.001574f, 0.002064f, 0.002613f, 0.003721f, 0.005428f, 0.008018f, 0.013161f, 0.024200f, 0.055573f, 0.186401f, 0.642578f, 0.904785f,
+ 0.962402f, 0.980469f, 0.987793f, 0.991699f, 0.994141f, 0.995605f, 0.996582f, 0.997070f, 0.998047f, 0.998535f, 0.998535f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000243f, 0.000480f, 0.000602f,
+ 0.000721f, 0.000705f, 0.000907f, 0.001094f, 0.001096f, 0.001493f, 0.002058f, 0.002607f, 0.003639f, 0.004826f, 0.007595f, 0.012413f,
+ 0.022171f, 0.051697f, 0.171143f, 0.619629f, 0.899414f, 0.961426f, 0.980957f, 0.987793f, 0.992188f, 0.994629f, 0.995605f, 0.996582f,
+ 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000172f, 0.000232f, 0.000243f, 0.000244f, 0.000576f, 0.000711f, 0.000608f, 0.000767f, 0.001089f, 0.001213f, 0.001509f, 0.002029f,
+ 0.002684f, 0.003550f, 0.005161f, 0.007107f, 0.011871f, 0.021545f, 0.049347f, 0.163086f, 0.609863f, 0.900391f, 0.962891f, 0.980957f,
+ 0.988281f, 0.992676f, 0.994629f, 0.996094f, 0.996582f, 0.997559f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000210f, 0.000122f, 0.000337f, 0.000290f, 0.000594f, 0.000726f, 0.000730f,
+ 0.000731f, 0.001090f, 0.001212f, 0.001506f, 0.002029f, 0.002335f, 0.003489f, 0.005077f, 0.007000f, 0.011398f, 0.021027f, 0.048218f,
+ 0.161133f, 0.614258f, 0.903809f, 0.963379f, 0.981934f, 0.988770f, 0.992188f, 0.994629f, 0.996094f, 0.997070f, 0.997559f, 0.998047f,
+ 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000281f, 0.000440f, 0.000683f, 0.000726f, 0.000730f, 0.000731f, 0.001087f, 0.001095f, 0.001485f, 0.001793f, 0.002214f, 0.002991f,
+ 0.004951f, 0.006912f, 0.011162f, 0.020905f, 0.048187f, 0.165527f, 0.633789f, 0.910156f, 0.965820f, 0.982422f, 0.989746f, 0.993164f,
+ 0.995117f, 0.996094f, 0.997070f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000241f, 0.000243f, 0.000480f, 0.000725f, 0.000697f, 0.000731f, 0.001007f,
+ 0.001094f, 0.001360f, 0.001795f, 0.002161f, 0.003244f, 0.004871f, 0.006966f, 0.011330f, 0.020706f, 0.049591f, 0.178345f, 0.667969f,
+ 0.918457f, 0.968262f, 0.983887f, 0.990234f, 0.993652f, 0.995605f, 0.996582f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000086f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000243f, 0.000243f,
+ 0.000465f, 0.000592f, 0.000729f, 0.000730f, 0.001079f, 0.001093f, 0.001332f, 0.001885f, 0.002129f, 0.003254f, 0.004818f, 0.006889f,
+ 0.011429f, 0.021957f, 0.052521f, 0.201294f, 0.714355f, 0.929199f, 0.972168f, 0.985352f, 0.991211f, 0.994141f, 0.995605f, 0.997070f,
+ 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000115f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000184f, 0.000241f, 0.000347f, 0.000453f, 0.000579f, 0.000728f, 0.000729f, 0.001034f, 0.001093f, 0.001292f,
+ 0.001857f, 0.002131f, 0.003296f, 0.004826f, 0.006958f, 0.011726f, 0.023071f, 0.057983f, 0.239258f, 0.767578f, 0.939453f, 0.976074f,
+ 0.987305f, 0.992676f, 0.994629f, 0.996094f, 0.997070f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000088f, 0.000119f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000191f, 0.000242f, 0.000425f, 0.000558f,
+ 0.000723f, 0.000730f, 0.001058f, 0.001092f, 0.001297f, 0.001653f, 0.002352f, 0.003124f, 0.004860f, 0.007072f, 0.012131f, 0.024551f,
+ 0.066406f, 0.300537f, 0.820312f, 0.951172f, 0.979492f, 0.988281f, 0.993164f, 0.995117f, 0.996582f, 0.997070f, 0.998047f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000119f,
+ 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000227f, 0.000239f, 0.000341f, 0.000359f, 0.000587f, 0.000605f, 0.000729f, 0.001040f, 0.001185f, 0.001275f, 0.001849f, 0.002390f,
+ 0.003399f, 0.005001f, 0.007404f, 0.012871f, 0.027237f, 0.079529f, 0.395264f, 0.868164f, 0.960938f, 0.982910f, 0.990234f, 0.993164f,
+ 0.995605f, 0.997070f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000119f, 0.000120f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000211f, 0.000239f, 0.000307f, 0.000394f, 0.000704f, 0.000711f, 0.000728f,
+ 0.001001f, 0.001088f, 0.001204f, 0.001713f, 0.002367f, 0.003151f, 0.004639f, 0.007820f, 0.014084f, 0.030609f, 0.102722f, 0.527344f,
+ 0.906250f, 0.969727f, 0.985840f, 0.991699f, 0.994629f, 0.996094f, 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000117f, 0.000115f, 0.000121f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000196f,
+ 0.000332f, 0.000363f, 0.000686f, 0.000719f, 0.000723f, 0.000963f, 0.001089f, 0.001290f, 0.001849f, 0.002394f, 0.003458f, 0.004833f,
+ 0.008301f, 0.015579f, 0.036926f, 0.143188f, 0.676270f, 0.934570f, 0.976562f, 0.988281f, 0.992676f, 0.995605f, 0.996582f, 0.998047f,
+ 0.998047f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000102f, 0.000120f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000311f, 0.000345f, 0.000479f, 0.000723f, 0.000728f, 0.000934f, 0.001085f,
+ 0.001282f, 0.001821f, 0.002399f, 0.003355f, 0.005524f, 0.008881f, 0.017807f, 0.047058f, 0.222046f, 0.803223f, 0.954102f, 0.981445f,
+ 0.990723f, 0.994141f, 0.996582f, 0.997559f, 0.998047f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000090f, 0.000116f, 0.000121f, 0.000121f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000201f, 0.000239f, 0.000358f,
+ 0.000618f, 0.000719f, 0.000727f, 0.000863f, 0.001087f, 0.001350f, 0.001945f, 0.002689f, 0.003731f, 0.005817f, 0.010033f, 0.021332f,
+ 0.064514f, 0.374512f, 0.885254f, 0.969238f, 0.986328f, 0.992676f, 0.995605f, 0.996582f, 0.998047f, 0.998535f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000086f, 0.000117f, 0.000121f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000164f, 0.000238f, 0.000353f, 0.000596f, 0.000591f, 0.000727f, 0.000901f, 0.001085f, 0.001266f, 0.001767f,
+ 0.002663f, 0.003914f, 0.006153f, 0.011612f, 0.026871f, 0.100525f, 0.605957f, 0.934082f, 0.978027f, 0.989746f, 0.994141f, 0.996094f,
+ 0.997559f, 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999023f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000107f, 0.000120f, 0.000120f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000195f, 0.000323f, 0.000339f, 0.000461f, 0.000706f,
+ 0.000726f, 0.000845f, 0.001086f, 0.001298f, 0.001843f, 0.003027f, 0.004387f, 0.007011f, 0.013832f, 0.036530f, 0.183228f, 0.805664f,
+ 0.959961f, 0.984863f, 0.991699f, 0.995605f, 0.997070f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000117f, 0.000120f, 0.000120f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000224f, 0.000336f, 0.000464f, 0.000708f, 0.000726f, 0.000965f, 0.001083f, 0.001458f, 0.002180f, 0.003096f, 0.004425f,
+ 0.008377f, 0.017639f, 0.056610f, 0.390869f, 0.909180f, 0.975586f, 0.989746f, 0.994141f, 0.996582f, 0.998047f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000110f, 0.000113f, 0.000120f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000135f, 0.000336f, 0.000467f, 0.000713f, 0.000725f, 0.000959f,
+ 0.001191f, 0.001287f, 0.001939f, 0.003231f, 0.005306f, 0.009888f, 0.024414f, 0.105835f, 0.709961f, 0.955078f, 0.984863f, 0.993164f,
+ 0.996094f, 0.997559f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000061f, 0.000089f,
+ 0.000118f, 0.000120f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000309f,
+ 0.000299f, 0.000460f, 0.000710f, 0.000724f, 0.000997f, 0.001073f, 0.001410f, 0.002117f, 0.003506f, 0.006031f, 0.012863f, 0.038391f,
+ 0.260742f, 0.892090f, 0.975098f, 0.990723f, 0.995117f, 0.997559f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000085f, 0.000110f, 0.000118f, 0.000120f, 0.000120f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000317f, 0.000499f, 0.000706f, 0.000599f, 0.000851f, 0.001069f, 0.001633f,
+ 0.002367f, 0.003918f, 0.007580f, 0.017929f, 0.074646f, 0.645508f, 0.956055f, 0.986328f, 0.994141f, 0.996582f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000099f, 0.000113f,
+ 0.000119f, 0.000119f, 0.000120f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000160f, 0.000326f, 0.000308f,
+ 0.000578f, 0.000602f, 0.000921f, 0.001071f, 0.001807f, 0.002783f, 0.004620f, 0.010017f, 0.029465f, 0.211792f, 0.896484f, 0.979004f,
+ 0.992188f, 0.996094f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000027f, 0.000103f, 0.000114f, 0.000118f, 0.000120f, 0.000120f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000090f, 0.000212f, 0.000309f, 0.000586f, 0.000602f, 0.000937f, 0.001147f, 0.002031f, 0.003237f, 0.006134f,
+ 0.014969f, 0.063171f, 0.665527f, 0.964355f, 0.989258f, 0.995117f, 0.999023f, 0.998535f, 0.999023f, 0.999023f, 0.998535f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000018f, 0.000103f, 0.000113f,
+ 0.000117f, 0.000119f, 0.000120f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000004f, 0.000002f, 0.000199f, 0.000390f, 0.000586f, 0.000665f,
+ 0.000946f, 0.001365f, 0.002207f, 0.003767f, 0.008308f, 0.025955f, 0.227661f, 0.924316f, 0.984863f, 0.994141f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000098f, 0.000109f, 0.000117f, 0.000119f, 0.000120f, 0.000120f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000011f, 0.000005f, 0.000003f,
+ 0.000002f, 0.000193f, 0.000388f, 0.000586f, 0.000659f, 0.000952f, 0.001580f, 0.002762f, 0.005363f, 0.013153f, 0.066589f, 0.781738f,
+ 0.977051f, 0.993164f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000075f, 0.000112f,
+ 0.000116f, 0.000118f, 0.000119f, 0.000120f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000122f,
+ 0.000088f, 0.000026f, 0.000010f, 0.000005f, 0.000003f, 0.000002f, 0.000186f, 0.000407f, 0.000586f, 0.000760f, 0.000986f, 0.001796f,
+ 0.003275f, 0.007565f, 0.026794f, 0.363281f, 0.959473f, 0.990723f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000010f, 0.000090f, 0.000110f, 0.000115f, 0.000117f, 0.000119f, 0.000120f, 0.000120f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000077f, 0.000023f, 0.000011f, 0.000005f, 0.000003f, 0.000002f, 0.000158f,
+ 0.000407f, 0.000587f, 0.000826f, 0.001264f, 0.002174f, 0.004894f, 0.013359f, 0.098511f, 0.911133f, 0.987793f, 0.998047f, 0.998047f,
+ 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000084f, 0.000107f,
+ 0.000114f, 0.000117f, 0.000119f, 0.000119f, 0.000120f, 0.000120f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000093f, 0.000024f,
+ 0.000011f, 0.000005f, 0.000003f, 0.000002f, 0.000220f, 0.000476f, 0.000585f, 0.000913f, 0.001374f, 0.002951f, 0.007511f, 0.034973f,
+ 0.736328f, 0.982910f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000056f, 0.000102f, 0.000112f, 0.000116f, 0.000117f, 0.000119f, 0.000120f, 0.000120f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000075f, 0.000025f, 0.000010f, 0.000005f, 0.000003f, 0.000034f, 0.000222f, 0.000491f, 0.000589f,
+ 0.001020f, 0.001881f, 0.004669f, 0.015717f, 0.298340f, 0.974609f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000048f, 0.000095f,
+ 0.000106f, 0.000114f, 0.000117f, 0.000118f, 0.000119f, 0.000120f, 0.000120f, 0.000121f, 0.000089f, 0.000029f, 0.000012f, 0.000006f,
+ 0.000003f, 0.000002f, 0.000223f, 0.000525f, 0.000687f, 0.001122f, 0.002672f, 0.008255f, 0.079590f, 0.954590f, 0.996582f, 0.996582f,
+ 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000077f, 0.000104f, 0.000112f, 0.000115f, 0.000117f, 0.000119f, 0.000119f,
+ 0.000120f, 0.000109f, 0.000031f, 0.000013f, 0.000006f, 0.000003f, 0.000002f, 0.000254f, 0.000550f, 0.000846f, 0.001545f, 0.004223f,
+ 0.027771f, 0.901855f, 0.996094f, 0.996094f, 0.996094f, 0.996094f, 0.996094f, 0.996094f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000037f,
+ 0.000090f, 0.000107f, 0.000113f, 0.000116f, 0.000118f, 0.000119f, 0.000120f, 0.000041f, 0.000015f, 0.000007f, 0.000004f, 0.000002f,
+ 0.000271f, 0.000563f, 0.000786f, 0.002211f, 0.012207f, 0.711426f, 0.994629f, 0.994629f, 0.995117f, 0.994629f, 0.994629f, 0.994629f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000028f, 0.000083f, 0.000102f, 0.000110f, 0.000114f, 0.000117f, 0.000118f,
+ 0.000052f, 0.000019f, 0.000008f, 0.000004f, 0.000002f, 0.000314f, 0.000444f, 0.001049f, 0.005669f, 0.266846f, 0.993164f, 0.993652f,
+ 0.993164f, 0.993652f, 0.993164f, 0.993164f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000048f, 0.000089f, 0.000106f, 0.000112f, 0.000115f, 0.000077f, 0.000026f, 0.000010f, 0.000005f, 0.000079f, 0.000425f, 0.000405f,
+ 0.002468f, 0.064209f, 0.990234f, 0.990723f, 0.990234f, 0.990234f, 0.990234f, 0.991211f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000020f, 0.000075f, 0.000098f, 0.000108f, 0.000113f, 0.000044f,
+ 0.000016f, 0.000006f, 0.000027f, 0.000270f, 0.000825f, 0.018448f, 0.986328f, 0.986328f, 0.986328f, 0.986328f, 0.986328f, 0.986328f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000049f, 0.000085f, 0.000102f, 0.000070f, 0.000022f, 0.000008f, 0.000133f, 0.000295f, 0.005318f, 0.978516f, 0.979004f,
+ 0.977539f, 0.977539f, 0.978027f, 0.978516f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000066f, 0.000092f, 0.000036f, 0.000011f,
+ 0.000135f, 0.000925f, 0.959473f, 0.959961f, 0.959961f, 0.959473f, 0.959961f, 0.959473f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000027f, 0.000065f, 0.000016f, 0.000109f, 0.907715f, 0.907227f, 0.907715f, 0.907227f, 0.907715f, 0.907715f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000017f, 0.711914f, 0.712402f,
+ 0.711426f, 0.711426f, 0.711914f, 0.712402f,
+ },
+ {
+ 0.076172f, 0.877441f, 0.964355f, 0.980957f, 0.987305f, 0.990723f, 0.992676f, 0.993652f, 0.994629f, 0.995605f, 0.996094f, 0.996582f,
+ 0.997070f, 0.997070f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.003897f, 0.033173f, 0.320557f, 0.863770f, 0.953613f, 0.975586f, 0.984863f, 0.988770f,
+ 0.991211f, 0.992676f, 0.994141f, 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997559f, 0.997559f, 0.997559f, 0.998047f,
+ 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000975f, 0.005951f, 0.020935f, 0.093140f,
+ 0.501465f, 0.873047f, 0.950684f, 0.973145f, 0.981934f, 0.986816f, 0.990234f, 0.992188f, 0.993164f, 0.994629f, 0.995605f, 0.996094f,
+ 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.998535f, 0.998047f, 0.998535f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000610f, 0.002430f, 0.006081f, 0.015915f, 0.045593f, 0.179810f, 0.635254f, 0.889648f, 0.951172f, 0.972168f, 0.981445f, 0.986328f,
+ 0.989746f, 0.991699f, 0.993652f, 0.994629f, 0.995117f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.997559f,
+ 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000244f, 0.001219f, 0.002796f, 0.006172f, 0.012848f, 0.028458f, 0.081177f, 0.301758f,
+ 0.733398f, 0.905273f, 0.953613f, 0.972168f, 0.981445f, 0.986328f, 0.989258f, 0.991699f, 0.993652f, 0.994141f, 0.995117f, 0.996094f,
+ 0.996094f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000244f, 0.000731f, 0.001706f, 0.003166f,
+ 0.005470f, 0.010406f, 0.020813f, 0.047089f, 0.136719f, 0.449951f, 0.803223f, 0.919434f, 0.957520f, 0.973633f, 0.981934f, 0.986328f,
+ 0.989746f, 0.991699f, 0.993164f, 0.994629f, 0.995117f, 0.995605f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.998047f,
+ 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000244f, 0.000366f, 0.001214f, 0.001894f, 0.003159f, 0.005108f, 0.008720f, 0.015839f, 0.031586f, 0.074951f, 0.224121f, 0.596680f,
+ 0.851074f, 0.932617f, 0.962402f, 0.975586f, 0.982910f, 0.987305f, 0.989746f, 0.991699f, 0.993164f, 0.994141f, 0.995117f, 0.995605f,
+ 0.996094f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000366f, 0.000731f, 0.000976f, 0.001827f, 0.002987f, 0.004757f, 0.007988f,
+ 0.013023f, 0.023544f, 0.048431f, 0.120239f, 0.352783f, 0.717285f, 0.887207f, 0.943848f, 0.966309f, 0.978027f, 0.983887f, 0.987305f,
+ 0.990234f, 0.992188f, 0.993652f, 0.994629f, 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.998047f, 0.998047f,
+ 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000434f, 0.000488f, 0.000704f,
+ 0.001218f, 0.002190f, 0.002783f, 0.004723f, 0.006878f, 0.011040f, 0.018372f, 0.034241f, 0.073242f, 0.194336f, 0.510742f, 0.803711f,
+ 0.912598f, 0.952637f, 0.970703f, 0.979004f, 0.984863f, 0.988281f, 0.991211f, 0.992676f, 0.994141f, 0.994629f, 0.995605f, 0.996094f,
+ 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000243f, 0.000488f, 0.000488f, 0.000916f, 0.001219f, 0.002308f, 0.002914f, 0.004124f, 0.006523f, 0.009537f, 0.014793f,
+ 0.025833f, 0.050446f, 0.116089f, 0.312744f, 0.661133f, 0.860840f, 0.931641f, 0.960449f, 0.974121f, 0.981445f, 0.986328f, 0.989258f,
+ 0.991211f, 0.992676f, 0.994141f, 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f,
+ 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000121f, 0.000356f, 0.000488f, 0.000609f, 0.000944f, 0.001339f, 0.002296f,
+ 0.002964f, 0.003880f, 0.005676f, 0.008476f, 0.012909f, 0.020874f, 0.036926f, 0.075500f, 0.187988f, 0.474854f, 0.774414f, 0.900391f,
+ 0.946289f, 0.966309f, 0.978027f, 0.983887f, 0.987793f, 0.990234f, 0.991699f, 0.993164f, 0.994141f, 0.995117f, 0.995605f, 0.996094f,
+ 0.997070f, 0.997070f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000244f, 0.000483f,
+ 0.000488f, 0.000731f, 0.001070f, 0.001551f, 0.002024f, 0.002520f, 0.003990f, 0.004738f, 0.007584f, 0.010834f, 0.016800f, 0.028763f,
+ 0.054535f, 0.120728f, 0.309082f, 0.642090f, 0.848145f, 0.926270f, 0.957031f, 0.971191f, 0.980469f, 0.985352f, 0.988770f, 0.990723f,
+ 0.992188f, 0.993652f, 0.994629f, 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998047f,
+ 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000242f, 0.000485f, 0.000608f, 0.000731f, 0.001091f, 0.001339f, 0.001943f, 0.002602f, 0.003466f,
+ 0.004845f, 0.006649f, 0.009529f, 0.014824f, 0.023407f, 0.041351f, 0.083496f, 0.199951f, 0.482422f, 0.770996f, 0.896484f, 0.944336f,
+ 0.965332f, 0.976562f, 0.982910f, 0.986816f, 0.990234f, 0.991699f, 0.993164f, 0.994141f, 0.995117f, 0.995117f, 0.996094f, 0.996582f,
+ 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000121f, 0.000243f, 0.000243f, 0.000602f, 0.000609f, 0.000799f,
+ 0.001088f, 0.001459f, 0.001822f, 0.002432f, 0.003033f, 0.004375f, 0.006042f, 0.008560f, 0.012810f, 0.019791f, 0.032715f, 0.061584f,
+ 0.135254f, 0.335693f, 0.660156f, 0.853027f, 0.926758f, 0.956543f, 0.972168f, 0.980469f, 0.984863f, 0.988281f, 0.991211f, 0.992676f,
+ 0.993652f, 0.994141f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000119f,
+ 0.000243f, 0.000366f, 0.000605f, 0.000730f, 0.000731f, 0.001201f, 0.001458f, 0.001804f, 0.002428f, 0.003593f, 0.004234f, 0.005745f,
+ 0.007755f, 0.011139f, 0.016754f, 0.027054f, 0.047424f, 0.097107f, 0.231323f, 0.525879f, 0.791016f, 0.902832f, 0.945801f, 0.966797f,
+ 0.977051f, 0.982910f, 0.987793f, 0.990234f, 0.991699f, 0.993164f, 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.997070f,
+ 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000116f, 0.000122f, 0.000365f, 0.000244f, 0.000602f, 0.000721f, 0.000730f, 0.000852f, 0.001451f,
+ 0.001842f, 0.002518f, 0.002993f, 0.004097f, 0.005253f, 0.007099f, 0.009865f, 0.014908f, 0.022827f, 0.038879f, 0.072815f, 0.163940f,
+ 0.396484f, 0.707031f, 0.869141f, 0.932129f, 0.960449f, 0.973145f, 0.980957f, 0.986328f, 0.988770f, 0.991211f, 0.992676f, 0.993652f,
+ 0.994629f, 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000110f, 0.000361f, 0.000242f, 0.000244f,
+ 0.000602f, 0.000728f, 0.000853f, 0.001260f, 0.001569f, 0.001704f, 0.002287f, 0.003103f, 0.003857f, 0.004848f, 0.006680f, 0.009003f,
+ 0.012978f, 0.019897f, 0.032135f, 0.057983f, 0.121033f, 0.291504f, 0.604980f, 0.827148f, 0.915039f, 0.953125f, 0.969238f, 0.978516f,
+ 0.984375f, 0.988281f, 0.991211f, 0.992188f, 0.993652f, 0.994141f, 0.995117f, 0.995605f, 0.996582f, 0.996582f, 0.997070f, 0.998047f,
+ 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000241f, 0.000241f, 0.000365f, 0.000365f, 0.000589f, 0.000852f, 0.000852f, 0.001246f, 0.001562f, 0.001812f, 0.002241f,
+ 0.002794f, 0.003633f, 0.004669f, 0.006069f, 0.008202f, 0.011772f, 0.016891f, 0.027618f, 0.047089f, 0.093506f, 0.216309f, 0.495605f,
+ 0.771484f, 0.894531f, 0.942383f, 0.965332f, 0.976074f, 0.982910f, 0.987305f, 0.989746f, 0.991699f, 0.993164f, 0.994629f, 0.995117f,
+ 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000364f, 0.000242f, 0.000487f, 0.000737f, 0.000730f,
+ 0.000974f, 0.001083f, 0.001520f, 0.001701f, 0.001938f, 0.002768f, 0.003658f, 0.004227f, 0.005741f, 0.007671f, 0.010796f, 0.015511f,
+ 0.023529f, 0.040009f, 0.074158f, 0.165405f, 0.395264f, 0.703613f, 0.868164f, 0.932129f, 0.959473f, 0.973633f, 0.980957f, 0.985840f,
+ 0.988770f, 0.991699f, 0.992676f, 0.994141f, 0.995117f, 0.995117f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f,
+ 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000100f, 0.000000f, 0.000241f,
+ 0.000224f, 0.000487f, 0.000488f, 0.000710f, 0.000972f, 0.000848f, 0.001181f, 0.001333f, 0.001910f, 0.001830f, 0.002661f, 0.003298f,
+ 0.004154f, 0.005386f, 0.007271f, 0.009735f, 0.013908f, 0.021149f, 0.034149f, 0.062042f, 0.130371f, 0.313477f, 0.627930f, 0.837402f,
+ 0.919922f, 0.954590f, 0.970215f, 0.979492f, 0.985352f, 0.988770f, 0.991211f, 0.992676f, 0.993652f, 0.995117f, 0.995605f, 0.996094f,
+ 0.996582f, 0.996582f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000049f, 0.000242f, 0.000483f, 0.000606f, 0.000487f, 0.000695f, 0.000970f, 0.000974f, 0.001136f,
+ 0.001328f, 0.001694f, 0.002028f, 0.002617f, 0.002953f, 0.003847f, 0.004951f, 0.006653f, 0.009193f, 0.012672f, 0.018661f, 0.029968f,
+ 0.052673f, 0.106689f, 0.250977f, 0.549805f, 0.801758f, 0.907227f, 0.948242f, 0.967773f, 0.978027f, 0.984375f, 0.987793f, 0.990723f,
+ 0.992188f, 0.993652f, 0.994629f, 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000166f, 0.000243f, 0.000485f, 0.000487f,
+ 0.000487f, 0.000945f, 0.000834f, 0.000974f, 0.000974f, 0.001300f, 0.001810f, 0.002058f, 0.002573f, 0.002703f, 0.003761f, 0.004887f,
+ 0.006393f, 0.008514f, 0.011818f, 0.016937f, 0.026672f, 0.046051f, 0.089478f, 0.204712f, 0.476807f, 0.762207f, 0.891602f, 0.942383f,
+ 0.965820f, 0.976562f, 0.983398f, 0.987793f, 0.990234f, 0.992188f, 0.993652f, 0.994629f, 0.995605f, 0.996094f, 0.996582f, 0.997070f,
+ 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000224f, 0.000358f, 0.000477f, 0.000486f, 0.000487f, 0.000580f, 0.000841f, 0.000973f, 0.001079f, 0.001255f, 0.001649f,
+ 0.002045f, 0.002241f, 0.002995f, 0.003841f, 0.004826f, 0.005920f, 0.007866f, 0.010925f, 0.015930f, 0.024109f, 0.040619f, 0.077454f,
+ 0.171509f, 0.412354f, 0.720215f, 0.876953f, 0.936035f, 0.962402f, 0.975098f, 0.982422f, 0.987305f, 0.990234f, 0.992188f, 0.993164f,
+ 0.994629f, 0.995117f, 0.996094f, 0.996582f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000165f, 0.000205f, 0.000411f, 0.000480f, 0.000486f, 0.000608f, 0.000688f,
+ 0.000966f, 0.000968f, 0.000974f, 0.001421f, 0.001489f, 0.001695f, 0.002090f, 0.002886f, 0.003326f, 0.004608f, 0.005604f, 0.007317f,
+ 0.010414f, 0.014862f, 0.022232f, 0.036469f, 0.067810f, 0.146973f, 0.359375f, 0.680664f, 0.861816f, 0.931152f, 0.959961f, 0.974609f,
+ 0.981934f, 0.986816f, 0.989746f, 0.991699f, 0.993652f, 0.994629f, 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.998047f,
+ 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000242f,
+ 0.000453f, 0.000539f, 0.000486f, 0.000487f, 0.000487f, 0.000957f, 0.000969f, 0.001202f, 0.001139f, 0.001393f, 0.001986f, 0.002045f,
+ 0.002863f, 0.003216f, 0.004128f, 0.005417f, 0.007378f, 0.009689f, 0.013466f, 0.020432f, 0.033722f, 0.060883f, 0.129395f, 0.318115f,
+ 0.642090f, 0.847656f, 0.926270f, 0.958008f, 0.973145f, 0.981934f, 0.986328f, 0.989746f, 0.992188f, 0.993164f, 0.994629f, 0.995605f,
+ 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000243f, 0.000380f, 0.000482f, 0.000606f, 0.000607f, 0.000608f, 0.000829f, 0.000970f,
+ 0.000972f, 0.001070f, 0.001402f, 0.001812f, 0.002138f, 0.002619f, 0.003246f, 0.004082f, 0.005318f, 0.006699f, 0.009262f, 0.012764f,
+ 0.019318f, 0.031052f, 0.055878f, 0.116821f, 0.286621f, 0.610352f, 0.835938f, 0.922852f, 0.956543f, 0.973145f, 0.981445f, 0.986328f,
+ 0.989746f, 0.991699f, 0.993652f, 0.995117f, 0.995605f, 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000243f, 0.000350f, 0.000480f,
+ 0.000605f, 0.000596f, 0.000608f, 0.000890f, 0.000963f, 0.000972f, 0.000974f, 0.001316f, 0.001798f, 0.002058f, 0.002560f, 0.002811f,
+ 0.003983f, 0.005108f, 0.006489f, 0.008888f, 0.012314f, 0.018021f, 0.029495f, 0.051941f, 0.107422f, 0.263428f, 0.585449f, 0.827148f,
+ 0.919434f, 0.956055f, 0.971680f, 0.981445f, 0.986816f, 0.989746f, 0.992188f, 0.994141f, 0.995117f, 0.995605f, 0.996582f, 0.996582f,
+ 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000130f, 0.000176f, 0.000462f, 0.000483f, 0.000604f, 0.000607f, 0.000638f, 0.000922f, 0.000965f, 0.000971f, 0.001235f,
+ 0.001376f, 0.001769f, 0.002041f, 0.002575f, 0.003130f, 0.003487f, 0.004936f, 0.006264f, 0.008415f, 0.012047f, 0.017517f, 0.027786f,
+ 0.049164f, 0.101257f, 0.249512f, 0.568848f, 0.821777f, 0.918945f, 0.956055f, 0.972168f, 0.981445f, 0.986816f, 0.990234f, 0.992188f,
+ 0.993652f, 0.995117f, 0.995605f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000130f, 0.000122f, 0.000242f, 0.000352f, 0.000560f, 0.000602f, 0.000604f,
+ 0.000606f, 0.000767f, 0.001046f, 0.001089f, 0.000973f, 0.001327f, 0.001583f, 0.002033f, 0.002272f, 0.002657f, 0.003563f, 0.004589f,
+ 0.006138f, 0.008194f, 0.011299f, 0.016861f, 0.026718f, 0.047119f, 0.097656f, 0.240967f, 0.562500f, 0.821289f, 0.919922f, 0.957031f,
+ 0.973145f, 0.981934f, 0.987305f, 0.990234f, 0.992676f, 0.994141f, 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.998047f, 0.998047f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000241f, 0.000314f, 0.000459f, 0.000600f, 0.000605f, 0.000598f, 0.000804f, 0.000958f, 0.001084f, 0.001104f, 0.001389f, 0.001709f,
+ 0.002041f, 0.002211f, 0.002645f, 0.003635f, 0.004467f, 0.005718f, 0.008072f, 0.011185f, 0.016846f, 0.026184f, 0.046112f, 0.094971f,
+ 0.239014f, 0.565430f, 0.825684f, 0.922363f, 0.958496f, 0.973633f, 0.983398f, 0.987793f, 0.990723f, 0.992676f, 0.994141f, 0.995605f,
+ 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000238f, 0.000122f, 0.000173f, 0.000246f, 0.000387f, 0.000480f, 0.000604f, 0.000604f, 0.000701f,
+ 0.000951f, 0.000968f, 0.001184f, 0.001315f, 0.001597f, 0.001899f, 0.002268f, 0.002813f, 0.003716f, 0.004372f, 0.005886f, 0.007759f,
+ 0.010918f, 0.015915f, 0.025726f, 0.045685f, 0.095459f, 0.243774f, 0.579102f, 0.833984f, 0.926270f, 0.960449f, 0.976074f, 0.983887f,
+ 0.988770f, 0.991211f, 0.993164f, 0.994629f, 0.995605f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998535f, 0.999512f, 0.999512f,
+ 0.999023f, 0.999512f, 0.999023f, 0.999023f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000238f, 0.000237f, 0.000242f,
+ 0.000463f, 0.000585f, 0.000587f, 0.000718f, 0.000607f, 0.000885f, 0.001081f, 0.001087f, 0.001299f, 0.001553f, 0.001982f, 0.002104f,
+ 0.002777f, 0.003494f, 0.004406f, 0.005798f, 0.007645f, 0.010750f, 0.016159f, 0.025467f, 0.045959f, 0.097778f, 0.256104f, 0.603516f,
+ 0.847168f, 0.931152f, 0.963379f, 0.977539f, 0.985352f, 0.989258f, 0.991699f, 0.993652f, 0.995117f, 0.996094f, 0.996582f, 0.997559f,
+ 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.000000f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000231f, 0.000122f, 0.000242f, 0.000242f, 0.000400f, 0.000525f, 0.000495f, 0.000605f, 0.000607f, 0.000898f, 0.001075f,
+ 0.001191f, 0.001133f, 0.001420f, 0.001794f, 0.002041f, 0.002733f, 0.003548f, 0.004448f, 0.005585f, 0.007656f, 0.010735f, 0.015671f,
+ 0.025589f, 0.047363f, 0.102783f, 0.276855f, 0.637695f, 0.862793f, 0.938477f, 0.966797f, 0.979004f, 0.985840f, 0.990234f, 0.992676f,
+ 0.994141f, 0.995117f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000226f, 0.000242f, 0.000470f, 0.000469f,
+ 0.000547f, 0.000711f, 0.000723f, 0.000829f, 0.001024f, 0.001188f, 0.001081f, 0.001415f, 0.001765f, 0.002048f, 0.002708f, 0.003252f,
+ 0.004448f, 0.005711f, 0.007557f, 0.010780f, 0.016220f, 0.026398f, 0.048950f, 0.111267f, 0.309082f, 0.680664f, 0.880371f, 0.945801f,
+ 0.970703f, 0.980957f, 0.986816f, 0.990723f, 0.993164f, 0.994629f, 0.995605f, 0.996582f, 0.997559f, 0.998047f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000204f, 0.000239f, 0.000242f, 0.000283f, 0.000479f, 0.000594f, 0.000603f, 0.000606f, 0.000779f, 0.001068f, 0.001084f, 0.001118f,
+ 0.001515f, 0.001926f, 0.002098f, 0.002674f, 0.002975f, 0.004040f, 0.005478f, 0.007488f, 0.010651f, 0.016327f, 0.027222f, 0.052460f,
+ 0.123718f, 0.355713f, 0.729980f, 0.899902f, 0.952637f, 0.973145f, 0.983887f, 0.988770f, 0.991699f, 0.994141f, 0.995117f, 0.996094f,
+ 0.997070f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.000122f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000236f, 0.000207f, 0.000240f, 0.000435f, 0.000534f, 0.000594f, 0.000602f,
+ 0.000722f, 0.000727f, 0.000947f, 0.001081f, 0.001090f, 0.001471f, 0.001829f, 0.002010f, 0.002478f, 0.002956f, 0.004051f, 0.005753f,
+ 0.007717f, 0.011040f, 0.017105f, 0.028748f, 0.057159f, 0.142944f, 0.421387f, 0.780762f, 0.916992f, 0.960449f, 0.976562f, 0.985352f,
+ 0.989746f, 0.992676f, 0.994629f, 0.996094f, 0.997070f, 0.997559f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000224f, 0.000232f,
+ 0.000230f, 0.000382f, 0.000472f, 0.000576f, 0.000715f, 0.000721f, 0.000727f, 0.001046f, 0.001078f, 0.001186f, 0.001434f, 0.001674f,
+ 0.002066f, 0.002546f, 0.003407f, 0.004181f, 0.005634f, 0.007542f, 0.011330f, 0.017609f, 0.031189f, 0.064392f, 0.172729f, 0.506836f,
+ 0.828125f, 0.933105f, 0.966309f, 0.980469f, 0.987305f, 0.991211f, 0.993652f, 0.995117f, 0.996582f, 0.997070f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000232f, 0.000234f, 0.000352f, 0.000461f, 0.000535f, 0.000594f, 0.000722f, 0.000725f,
+ 0.000921f, 0.001116f, 0.001192f, 0.001416f, 0.001637f, 0.001911f, 0.002380f, 0.002949f, 0.003948f, 0.005589f, 0.007942f, 0.011650f,
+ 0.018631f, 0.034302f, 0.075867f, 0.219238f, 0.607422f, 0.870605f, 0.946777f, 0.972656f, 0.983887f, 0.989258f, 0.992676f, 0.995117f,
+ 0.996094f, 0.997070f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000239f, 0.000302f,
+ 0.000396f, 0.000564f, 0.000674f, 0.000617f, 0.000722f, 0.001003f, 0.001068f, 0.001084f, 0.001302f, 0.001598f, 0.001929f, 0.002375f,
+ 0.002935f, 0.004349f, 0.005714f, 0.007957f, 0.012306f, 0.020493f, 0.039001f, 0.092590f, 0.293213f, 0.711426f, 0.905762f, 0.958984f,
+ 0.978027f, 0.986328f, 0.990723f, 0.994141f, 0.995605f, 0.996582f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000232f, 0.000227f, 0.000240f, 0.000282f, 0.000542f, 0.000703f, 0.000718f, 0.000724f, 0.000833f, 0.001069f,
+ 0.001184f, 0.001346f, 0.001464f, 0.001898f, 0.002649f, 0.003164f, 0.004467f, 0.005863f, 0.008400f, 0.013199f, 0.022614f, 0.046051f,
+ 0.120605f, 0.406738f, 0.801270f, 0.931641f, 0.968262f, 0.982422f, 0.988770f, 0.992676f, 0.994629f, 0.996094f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.000120f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000219f, 0.000237f, 0.000235f, 0.000241f, 0.000480f,
+ 0.000584f, 0.000715f, 0.000723f, 0.000775f, 0.001061f, 0.000959f, 0.001139f, 0.001526f, 0.001770f, 0.002546f, 0.003151f, 0.004250f,
+ 0.006195f, 0.009071f, 0.014595f, 0.026413f, 0.056763f, 0.169067f, 0.557617f, 0.869141f, 0.951172f, 0.976074f, 0.986328f, 0.990723f,
+ 0.994141f, 0.995605f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.000000f, 0.000120f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000216f, 0.000228f, 0.000285f, 0.000339f, 0.000454f, 0.000572f, 0.000595f, 0.000721f, 0.000604f, 0.000930f, 0.000958f, 0.001171f,
+ 0.001431f, 0.001888f, 0.002663f, 0.003256f, 0.004402f, 0.006527f, 0.009964f, 0.016281f, 0.031189f, 0.074524f, 0.258301f, 0.714355f,
+ 0.916016f, 0.965332f, 0.982422f, 0.989746f, 0.992676f, 0.995117f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000000f, 0.000063f, 0.000120f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000194f, 0.000184f, 0.000228f, 0.000340f, 0.000396f, 0.000668f, 0.000571f,
+ 0.000478f, 0.000602f, 0.000919f, 0.000956f, 0.001061f, 0.001497f, 0.001888f, 0.002565f, 0.003523f, 0.004578f, 0.006935f, 0.010765f,
+ 0.018417f, 0.038635f, 0.107727f, 0.416260f, 0.832520f, 0.946289f, 0.975586f, 0.986328f, 0.991699f, 0.994629f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.000000f, 0.000000f, 0.000045f, 0.000118f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000234f, 0.000294f, 0.000220f, 0.000486f, 0.000579f, 0.000588f, 0.000669f, 0.000878f, 0.001038f, 0.001135f, 0.001451f, 0.001820f,
+ 0.002529f, 0.003551f, 0.005199f, 0.007542f, 0.012230f, 0.022369f, 0.051910f, 0.174927f, 0.630859f, 0.905273f, 0.965332f, 0.982910f,
+ 0.990234f, 0.993652f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.000000f, 0.000000f, 0.000000f, 0.000091f,
+ 0.000117f, 0.000120f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000171f, 0.000151f, 0.000166f, 0.000195f, 0.000342f, 0.000452f, 0.000594f, 0.000599f,
+ 0.000862f, 0.001019f, 0.001135f, 0.001465f, 0.002031f, 0.002676f, 0.003714f, 0.005497f, 0.008286f, 0.014320f, 0.028854f, 0.077332f,
+ 0.322754f, 0.809082f, 0.946289f, 0.977051f, 0.987793f, 0.993164f, 0.998047f, 0.998535f, 0.998047f, 0.998047f, 0.998535f, 0.998047f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000079f, 0.000105f, 0.000120f, 0.000120f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000008f, 0.000006f, 0.000098f, 0.000137f,
+ 0.000233f, 0.000324f, 0.000566f, 0.000589f, 0.000618f, 0.000874f, 0.000941f, 0.001108f, 0.001621f, 0.001880f, 0.002726f, 0.003788f,
+ 0.005840f, 0.009583f, 0.017563f, 0.039368f, 0.133545f, 0.582520f, 0.906738f, 0.968262f, 0.984863f, 0.992188f, 0.998047f, 0.998047f,
+ 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000069f, 0.000114f,
+ 0.000117f, 0.000120f, 0.000120f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000021f,
+ 0.000013f, 0.000009f, 0.000006f, 0.000004f, 0.000090f, 0.000206f, 0.000305f, 0.000538f, 0.000585f, 0.000596f, 0.000869f, 0.000941f,
+ 0.001149f, 0.001516f, 0.002150f, 0.002729f, 0.004475f, 0.006660f, 0.011360f, 0.022690f, 0.061401f, 0.281494f, 0.813965f, 0.952148f,
+ 0.980957f, 0.990723f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000006f, 0.000085f, 0.000114f, 0.000117f, 0.000119f, 0.000119f, 0.000120f, 0.000120f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000122f, 0.000122f, 0.000077f, 0.000041f, 0.000022f, 0.000013f, 0.000009f, 0.000006f, 0.000066f, 0.000107f, 0.000223f, 0.000250f,
+ 0.000532f, 0.000576f, 0.000593f, 0.000784f, 0.000937f, 0.001126f, 0.001523f, 0.002306f, 0.003193f, 0.004574f, 0.007717f, 0.014191f,
+ 0.032410f, 0.116577f, 0.595215f, 0.921875f, 0.974609f, 0.988770f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000056f, 0.000112f,
+ 0.000114f, 0.000118f, 0.000119f, 0.000120f, 0.000120f, 0.000120f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000074f, 0.000038f, 0.000021f, 0.000013f, 0.000009f,
+ 0.000006f, 0.000004f, 0.000003f, 0.000179f, 0.000258f, 0.000367f, 0.000469f, 0.000583f, 0.000770f, 0.000932f, 0.001131f, 0.001758f,
+ 0.002483f, 0.003517f, 0.005432f, 0.009232f, 0.019302f, 0.054504f, 0.293457f, 0.853516f, 0.964844f, 0.986816f, 0.997070f, 0.997070f,
+ 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000015f, 0.000084f, 0.000107f, 0.000113f, 0.000117f, 0.000118f, 0.000119f, 0.000120f, 0.000120f,
+ 0.000120f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000076f, 0.000042f, 0.000023f, 0.000015f, 0.000009f, 0.000007f, 0.000005f, 0.000004f, 0.000147f, 0.000238f, 0.000457f, 0.000545f,
+ 0.000586f, 0.000821f, 0.000936f, 0.001139f, 0.001849f, 0.002665f, 0.003687f, 0.006367f, 0.011810f, 0.028931f, 0.120605f, 0.687988f,
+ 0.947754f, 0.982910f, 0.996094f, 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000082f, 0.000095f,
+ 0.000111f, 0.000115f, 0.000117f, 0.000118f, 0.000119f, 0.000119f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000083f, 0.000042f, 0.000026f, 0.000015f, 0.000010f, 0.000007f, 0.000005f,
+ 0.000013f, 0.000086f, 0.000185f, 0.000309f, 0.000552f, 0.000577f, 0.000796f, 0.000925f, 0.001251f, 0.001838f, 0.002878f, 0.004509f,
+ 0.007572f, 0.016617f, 0.054932f, 0.391602f, 0.912109f, 0.978516f, 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.996094f, 0.996094f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000095f, 0.000106f, 0.000112f, 0.000113f, 0.000115f, 0.000118f, 0.000118f,
+ 0.000119f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000099f, 0.000048f,
+ 0.000027f, 0.000017f, 0.000011f, 0.000008f, 0.000006f, 0.000004f, 0.000089f, 0.000182f, 0.000347f, 0.000495f, 0.000570f, 0.000777f,
+ 0.000922f, 0.001316f, 0.001831f, 0.003004f, 0.005028f, 0.010078f, 0.028183f, 0.161865f, 0.833496f, 0.972168f, 0.995117f, 0.995605f,
+ 0.995605f, 0.995117f, 0.995117f, 0.995605f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000074f,
+ 0.000093f, 0.000107f, 0.000111f, 0.000115f, 0.000116f, 0.000117f, 0.000118f, 0.000119f, 0.000119f, 0.000119f, 0.000120f, 0.000120f,
+ 0.000120f, 0.000120f, 0.000120f, 0.000121f, 0.000057f, 0.000032f, 0.000021f, 0.000013f, 0.000008f, 0.000006f, 0.000005f, 0.000034f,
+ 0.000159f, 0.000267f, 0.000514f, 0.000566f, 0.000714f, 0.000888f, 0.001348f, 0.001995f, 0.003302f, 0.006447f, 0.015945f, 0.069153f,
+ 0.646484f, 0.960449f, 0.994629f, 0.995117f, 0.994629f, 0.995117f, 0.994629f, 0.995117f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000080f, 0.000095f, 0.000102f, 0.000109f, 0.000114f, 0.000115f,
+ 0.000116f, 0.000118f, 0.000118f, 0.000119f, 0.000119f, 0.000119f, 0.000120f, 0.000120f, 0.000120f, 0.000077f, 0.000044f, 0.000025f,
+ 0.000015f, 0.000011f, 0.000007f, 0.000005f, 0.000004f, 0.000106f, 0.000244f, 0.000476f, 0.000561f, 0.000622f, 0.000893f, 0.001266f,
+ 0.001968f, 0.003990f, 0.009476f, 0.033234f, 0.342529f, 0.940918f, 0.993652f, 0.993652f, 0.993652f, 0.993652f, 0.993652f, 0.993652f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000046f, 0.000079f, 0.000093f, 0.000104f, 0.000110f, 0.000111f, 0.000113f, 0.000116f, 0.000117f, 0.000118f, 0.000118f, 0.000119f,
+ 0.000119f, 0.000119f, 0.000092f, 0.000050f, 0.000029f, 0.000019f, 0.000012f, 0.000009f, 0.000006f, 0.000004f, 0.000061f, 0.000188f,
+ 0.000324f, 0.000456f, 0.000525f, 0.000657f, 0.001371f, 0.002445f, 0.005634f, 0.017563f, 0.135986f, 0.902832f, 0.992188f, 0.992188f,
+ 0.992676f, 0.992188f, 0.992676f, 0.992188f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000038f, 0.000075f, 0.000092f, 0.000100f, 0.000105f,
+ 0.000111f, 0.000112f, 0.000114f, 0.000116f, 0.000117f, 0.000117f, 0.000118f, 0.000118f, 0.000074f, 0.000041f, 0.000024f, 0.000016f,
+ 0.000010f, 0.000007f, 0.000005f, 0.000033f, 0.000167f, 0.000423f, 0.000410f, 0.000413f, 0.000575f, 0.001446f, 0.003387f, 0.009644f,
+ 0.056183f, 0.817383f, 0.990234f, 0.990234f, 0.990234f, 0.990723f, 0.990234f, 0.990723f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000011f, 0.000067f, 0.000084f, 0.000096f, 0.000103f, 0.000108f, 0.000110f, 0.000113f, 0.000115f, 0.000115f,
+ 0.000116f, 0.000104f, 0.000057f, 0.000035f, 0.000021f, 0.000013f, 0.000009f, 0.000006f, 0.000054f, 0.000161f, 0.000317f, 0.000332f,
+ 0.000393f, 0.000723f, 0.001760f, 0.005203f, 0.025345f, 0.617676f, 0.987793f, 0.987793f, 0.987793f, 0.988281f, 0.988281f, 0.988281f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000017f, 0.000052f, 0.000075f,
+ 0.000091f, 0.000097f, 0.000105f, 0.000108f, 0.000111f, 0.000113f, 0.000114f, 0.000085f, 0.000050f, 0.000031f, 0.000018f, 0.000012f,
+ 0.000008f, 0.000005f, 0.000095f, 0.000314f, 0.000306f, 0.000363f, 0.000813f, 0.002583f, 0.011734f, 0.308105f, 0.983887f, 0.984375f,
+ 0.984375f, 0.984375f, 0.983887f, 0.983887f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000037f, 0.000065f, 0.000083f, 0.000093f, 0.000099f, 0.000105f, 0.000108f,
+ 0.000110f, 0.000082f, 0.000045f, 0.000027f, 0.000017f, 0.000011f, 0.000007f, 0.000114f, 0.000245f, 0.000209f, 0.000379f, 0.001151f,
+ 0.005260f, 0.107971f, 0.977539f, 0.979004f, 0.978027f, 0.978027f, 0.978027f, 0.978027f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000007f, 0.000045f, 0.000069f, 0.000084f, 0.000093f, 0.000099f, 0.000104f, 0.000076f, 0.000044f, 0.000026f, 0.000016f, 0.000010f,
+ 0.000012f, 0.000152f, 0.000179f, 0.000373f, 0.001760f, 0.035522f, 0.969238f, 0.968750f, 0.968750f, 0.968750f, 0.968750f, 0.968750f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000014f, 0.000050f, 0.000070f, 0.000082f,
+ 0.000092f, 0.000075f, 0.000044f, 0.000026f, 0.000015f, 0.000009f, 0.000121f, 0.000117f, 0.000611f, 0.010231f, 0.951172f, 0.951172f,
+ 0.951172f, 0.951172f, 0.950684f, 0.951660f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000020f, 0.000047f, 0.000069f, 0.000077f, 0.000042f, 0.000024f, 0.000013f, 0.000078f,
+ 0.000130f, 0.001914f, 0.915039f, 0.915527f, 0.915039f, 0.915527f, 0.916016f, 0.915039f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000017f, 0.000047f, 0.000040f, 0.000019f, 0.000035f, 0.000188f, 0.833984f, 0.833496f, 0.833496f, 0.834473f, 0.834473f, 0.833984f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000014f, 0.000007f, 0.642578f, 0.643555f,
+ 0.643066f, 0.643555f, 0.642578f, 0.642578f,
+ },
+ {
+ 0.113464f, 0.797852f, 0.930176f, 0.961914f, 0.974609f, 0.980469f, 0.984863f, 0.987793f, 0.989258f, 0.991211f, 0.992188f, 0.993164f,
+ 0.993652f, 0.994141f, 0.995117f, 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997559f,
+ 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.007183f, 0.058716f, 0.349609f, 0.784668f, 0.912598f, 0.952148f, 0.968262f, 0.977539f,
+ 0.981934f, 0.985352f, 0.988281f, 0.990234f, 0.991211f, 0.992188f, 0.993652f, 0.993652f, 0.994141f, 0.995117f, 0.995605f, 0.995605f,
+ 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998535f,
+ 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.002432f, 0.011818f, 0.039581f, 0.143677f,
+ 0.482910f, 0.800293f, 0.908691f, 0.947266f, 0.964844f, 0.974609f, 0.980469f, 0.984375f, 0.987305f, 0.989258f, 0.990723f, 0.991699f,
+ 0.992676f, 0.993652f, 0.994141f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997559f,
+ 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.001096f, 0.005062f, 0.012482f, 0.030151f, 0.079956f, 0.239014f, 0.581055f, 0.819824f, 0.909180f, 0.946289f, 0.963379f, 0.973145f,
+ 0.979492f, 0.983398f, 0.986328f, 0.988281f, 0.990234f, 0.991699f, 0.992188f, 0.993164f, 0.994141f, 0.994629f, 0.995605f, 0.996094f,
+ 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000610f, 0.002434f, 0.005779f, 0.012207f, 0.023972f, 0.052765f, 0.129883f, 0.342773f,
+ 0.660156f, 0.841309f, 0.914062f, 0.947266f, 0.963379f, 0.973145f, 0.979004f, 0.982910f, 0.985840f, 0.987793f, 0.989746f, 0.991211f,
+ 0.992188f, 0.993164f, 0.994141f, 0.994629f, 0.995605f, 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997559f,
+ 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000397f, 0.001559f, 0.003397f, 0.006058f,
+ 0.011177f, 0.020355f, 0.039307f, 0.083130f, 0.196777f, 0.452148f, 0.724121f, 0.862305f, 0.920410f, 0.949219f, 0.964355f, 0.973145f,
+ 0.979004f, 0.982910f, 0.985840f, 0.988770f, 0.989258f, 0.991211f, 0.992188f, 0.993164f, 0.994141f, 0.994629f, 0.995605f, 0.995605f,
+ 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998535f,
+ 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000366f, 0.001097f, 0.002163f, 0.003523f, 0.006268f, 0.010941f, 0.017487f, 0.030930f, 0.058411f, 0.122925f, 0.281738f, 0.556152f,
+ 0.776367f, 0.881348f, 0.928223f, 0.951660f, 0.966309f, 0.973633f, 0.979492f, 0.983398f, 0.986328f, 0.988281f, 0.989746f, 0.991211f,
+ 0.992188f, 0.993164f, 0.994141f, 0.994629f, 0.995605f, 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997559f,
+ 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000244f, 0.000728f, 0.001340f, 0.002533f, 0.003813f, 0.006081f, 0.009750f, 0.015419f,
+ 0.025177f, 0.044067f, 0.084473f, 0.179077f, 0.384033f, 0.649902f, 0.818848f, 0.897949f, 0.935547f, 0.956055f, 0.967285f, 0.975098f,
+ 0.980957f, 0.983887f, 0.986328f, 0.988281f, 0.990234f, 0.991699f, 0.992676f, 0.993652f, 0.994141f, 0.995117f, 0.995605f, 0.996094f,
+ 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000244f, 0.000609f, 0.000854f, 0.001898f,
+ 0.002781f, 0.004246f, 0.006218f, 0.008835f, 0.013504f, 0.021362f, 0.035400f, 0.062347f, 0.121460f, 0.255127f, 0.495361f, 0.726562f,
+ 0.852539f, 0.912598f, 0.943359f, 0.959473f, 0.969238f, 0.976562f, 0.981445f, 0.984375f, 0.987305f, 0.988770f, 0.990234f, 0.991699f,
+ 0.992676f, 0.993652f, 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997559f,
+ 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000244f, 0.000244f, 0.000731f, 0.001295f, 0.002159f, 0.003092f, 0.004051f, 0.005836f, 0.008560f, 0.011925f, 0.018585f, 0.029373f,
+ 0.048950f, 0.088013f, 0.174194f, 0.354980f, 0.604492f, 0.788086f, 0.880371f, 0.925293f, 0.950195f, 0.963867f, 0.972168f, 0.978027f,
+ 0.982422f, 0.985840f, 0.987793f, 0.990234f, 0.991699f, 0.992188f, 0.993164f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996094f,
+ 0.996094f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000114f, 0.000244f, 0.000709f, 0.001089f, 0.001580f, 0.002100f, 0.002848f, 0.004028f,
+ 0.005646f, 0.008232f, 0.011276f, 0.016647f, 0.024948f, 0.039215f, 0.067566f, 0.125244f, 0.249878f, 0.471436f, 0.698242f, 0.834961f,
+ 0.902344f, 0.937012f, 0.955078f, 0.967773f, 0.974609f, 0.979492f, 0.983887f, 0.987305f, 0.988770f, 0.990723f, 0.991699f, 0.992676f,
+ 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.997559f,
+ 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000244f, 0.000480f, 0.001081f,
+ 0.001216f, 0.001684f, 0.002287f, 0.003113f, 0.004246f, 0.005711f, 0.007412f, 0.010658f, 0.014900f, 0.021408f, 0.033173f, 0.053711f,
+ 0.094299f, 0.179688f, 0.351807f, 0.591309f, 0.774902f, 0.871582f, 0.919922f, 0.946289f, 0.961426f, 0.971191f, 0.977051f, 0.981934f,
+ 0.984863f, 0.987305f, 0.989258f, 0.991211f, 0.992188f, 0.993164f, 0.994141f, 0.994629f, 0.995117f, 0.995117f, 0.995605f, 0.996094f,
+ 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000364f, 0.000366f, 0.000729f, 0.001195f, 0.001218f, 0.001693f, 0.002209f, 0.003038f, 0.004192f, 0.005249f, 0.006981f,
+ 0.009926f, 0.013405f, 0.019165f, 0.028473f, 0.044250f, 0.073975f, 0.134521f, 0.260010f, 0.476562f, 0.696289f, 0.830566f, 0.898438f,
+ 0.933594f, 0.954102f, 0.966309f, 0.974609f, 0.979492f, 0.982910f, 0.986328f, 0.988281f, 0.989746f, 0.991699f, 0.992676f, 0.993652f,
+ 0.994141f, 0.995117f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.998047f, 0.998047f,
+ 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000226f, 0.000365f, 0.000488f, 0.000731f, 0.001090f, 0.001245f, 0.002028f,
+ 0.002169f, 0.003023f, 0.003952f, 0.005043f, 0.006790f, 0.009026f, 0.012276f, 0.016754f, 0.024628f, 0.037384f, 0.060120f, 0.104431f,
+ 0.196045f, 0.372803f, 0.604980f, 0.779785f, 0.872070f, 0.919922f, 0.945312f, 0.960938f, 0.970703f, 0.977539f, 0.980957f, 0.984863f,
+ 0.987305f, 0.989258f, 0.991211f, 0.992188f, 0.993164f, 0.993652f, 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.996582f,
+ 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000364f, 0.000487f,
+ 0.000488f, 0.000608f, 0.001092f, 0.001323f, 0.001909f, 0.002028f, 0.002829f, 0.003754f, 0.004940f, 0.006329f, 0.008850f, 0.011353f,
+ 0.015572f, 0.022110f, 0.032196f, 0.050293f, 0.083984f, 0.151978f, 0.288574f, 0.507812f, 0.715332f, 0.839844f, 0.902832f, 0.936035f,
+ 0.955566f, 0.966797f, 0.974609f, 0.979492f, 0.983887f, 0.986816f, 0.988281f, 0.989746f, 0.991699f, 0.992676f, 0.993652f, 0.994141f,
+ 0.994629f, 0.995605f, 0.995605f, 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
+ 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000341f, 0.000486f, 0.000487f, 0.000591f, 0.000846f, 0.001213f, 0.001407f, 0.002018f, 0.002306f, 0.003119f,
+ 0.003736f, 0.004700f, 0.005936f, 0.007858f, 0.010498f, 0.013939f, 0.019913f, 0.028564f, 0.043060f, 0.069275f, 0.120972f, 0.225830f,
+ 0.416748f, 0.642090f, 0.798828f, 0.881836f, 0.924805f, 0.948730f, 0.962891f, 0.971191f, 0.978516f, 0.982422f, 0.985352f, 0.987793f,
+ 0.989746f, 0.991211f, 0.992676f, 0.993164f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996582f, 0.996582f, 0.996582f, 0.997070f,
+ 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000121f, 0.000122f, 0.000475f, 0.000486f, 0.000487f, 0.000714f, 0.000913f,
+ 0.001296f, 0.001350f, 0.001884f, 0.002163f, 0.002871f, 0.003702f, 0.004578f, 0.005573f, 0.007278f, 0.009819f, 0.013039f, 0.017883f,
+ 0.025589f, 0.037445f, 0.058655f, 0.099243f, 0.180542f, 0.338867f, 0.563965f, 0.751465f, 0.857422f, 0.912109f, 0.941406f, 0.958496f,
+ 0.968262f, 0.976074f, 0.980957f, 0.984375f, 0.986816f, 0.989258f, 0.990723f, 0.992188f, 0.993164f, 0.994141f, 0.994629f, 0.995117f,
+ 0.995605f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000122f, 0.000242f,
+ 0.000417f, 0.000607f, 0.000602f, 0.000644f, 0.001016f, 0.001223f, 0.001337f, 0.002010f, 0.002087f, 0.002752f, 0.003380f, 0.004486f,
+ 0.005760f, 0.007523f, 0.009048f, 0.012169f, 0.016312f, 0.022949f, 0.033295f, 0.050812f, 0.082886f, 0.146851f, 0.275635f, 0.486572f,
+ 0.696777f, 0.828613f, 0.896484f, 0.933594f, 0.953613f, 0.965820f, 0.973633f, 0.979980f, 0.983887f, 0.986328f, 0.988770f, 0.990723f,
+ 0.992188f, 0.993164f, 0.993652f, 0.994141f, 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997559f, 0.997559f, 0.997559f,
+ 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000262f, 0.000463f, 0.000603f, 0.000665f, 0.000716f, 0.001069f, 0.001322f, 0.001538f,
+ 0.001895f, 0.002293f, 0.003120f, 0.003323f, 0.004166f, 0.005638f, 0.006828f, 0.008942f, 0.011368f, 0.015465f, 0.021057f, 0.029663f,
+ 0.044861f, 0.070923f, 0.123169f, 0.228149f, 0.416504f, 0.640137f, 0.797363f, 0.880859f, 0.924805f, 0.948730f, 0.963379f, 0.971680f,
+ 0.978516f, 0.982422f, 0.985840f, 0.988281f, 0.990723f, 0.991699f, 0.992676f, 0.993652f, 0.994141f, 0.995117f, 0.995117f, 0.996094f,
+ 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000120f, 0.000172f, 0.000243f, 0.000365f, 0.000475f, 0.000607f,
+ 0.000608f, 0.000609f, 0.001013f, 0.001424f, 0.001456f, 0.001904f, 0.002411f, 0.002903f, 0.003145f, 0.004314f, 0.004944f, 0.006607f,
+ 0.008156f, 0.010719f, 0.014297f, 0.018906f, 0.027069f, 0.040070f, 0.062103f, 0.104858f, 0.191162f, 0.355469f, 0.581543f, 0.762695f,
+ 0.863281f, 0.915039f, 0.943848f, 0.960449f, 0.970703f, 0.977051f, 0.981445f, 0.985840f, 0.987793f, 0.989746f, 0.991211f, 0.992676f,
+ 0.993652f, 0.994141f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.997070f, 0.997070f, 0.998047f, 0.997559f, 0.998047f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000000f, 0.000000f, 0.000096f,
+ 0.000239f, 0.000241f, 0.000336f, 0.000482f, 0.000719f, 0.000729f, 0.000831f, 0.001049f, 0.001552f, 0.001576f, 0.001710f, 0.002373f,
+ 0.002846f, 0.003254f, 0.004051f, 0.005035f, 0.006405f, 0.007706f, 0.009987f, 0.013092f, 0.017715f, 0.024872f, 0.035980f, 0.055328f,
+ 0.091248f, 0.163330f, 0.305664f, 0.524902f, 0.726562f, 0.845215f, 0.906250f, 0.938965f, 0.957031f, 0.969238f, 0.976074f, 0.981445f,
+ 0.984863f, 0.987305f, 0.989258f, 0.991211f, 0.992188f, 0.993164f, 0.994141f, 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.996582f,
+ 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000118f, 0.000120f, 0.000351f, 0.000364f, 0.000421f, 0.000480f, 0.000606f, 0.000728f, 0.000852f,
+ 0.001175f, 0.001535f, 0.001673f, 0.001671f, 0.002277f, 0.002743f, 0.003220f, 0.003922f, 0.004868f, 0.005951f, 0.007488f, 0.009430f,
+ 0.012527f, 0.016266f, 0.022964f, 0.033142f, 0.049805f, 0.080688f, 0.141846f, 0.265625f, 0.473145f, 0.688477f, 0.825684f, 0.897949f,
+ 0.934082f, 0.954102f, 0.966797f, 0.975098f, 0.980469f, 0.984375f, 0.987305f, 0.989258f, 0.991211f, 0.992676f, 0.993164f, 0.993652f,
+ 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.999512f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999023f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000058f, 0.000235f, 0.000360f, 0.000243f,
+ 0.000440f, 0.000583f, 0.000847f, 0.000851f, 0.000852f, 0.001189f, 0.001411f, 0.001645f, 0.001898f, 0.002417f, 0.002617f, 0.003435f,
+ 0.003695f, 0.004616f, 0.005733f, 0.007278f, 0.009216f, 0.012016f, 0.015701f, 0.021561f, 0.030396f, 0.045746f, 0.073120f, 0.125732f,
+ 0.233521f, 0.428223f, 0.653320f, 0.807617f, 0.887695f, 0.929688f, 0.951660f, 0.965820f, 0.974121f, 0.980469f, 0.984375f, 0.986816f,
+ 0.989746f, 0.991211f, 0.992676f, 0.993164f, 0.994141f, 0.995117f, 0.995605f, 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.998047f,
+ 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000237f, 0.000237f, 0.000362f, 0.000365f, 0.000558f, 0.000814f, 0.000727f, 0.000729f, 0.000935f, 0.001189f, 0.001403f,
+ 0.001569f, 0.001989f, 0.002216f, 0.002533f, 0.003307f, 0.003906f, 0.004463f, 0.005646f, 0.006908f, 0.008980f, 0.011230f, 0.014755f,
+ 0.020020f, 0.028320f, 0.041931f, 0.065979f, 0.113098f, 0.209229f, 0.389648f, 0.620605f, 0.789551f, 0.879395f, 0.924805f, 0.950684f,
+ 0.964844f, 0.974121f, 0.979980f, 0.983398f, 0.987305f, 0.989258f, 0.991211f, 0.992676f, 0.993652f, 0.993652f, 0.995117f, 0.995605f,
+ 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000121f, 0.000241f, 0.000486f, 0.000575f, 0.000707f,
+ 0.000726f, 0.000971f, 0.000849f, 0.000966f, 0.001350f, 0.001660f, 0.001678f, 0.002224f, 0.002483f, 0.003197f, 0.003611f, 0.004200f,
+ 0.005318f, 0.006744f, 0.008476f, 0.010506f, 0.014145f, 0.019089f, 0.026627f, 0.039001f, 0.061096f, 0.103333f, 0.189819f, 0.358887f,
+ 0.591309f, 0.773438f, 0.872559f, 0.922363f, 0.948730f, 0.963867f, 0.973145f, 0.979492f, 0.983887f, 0.986816f, 0.989258f, 0.991211f,
+ 0.992188f, 0.993164f, 0.994629f, 0.995117f, 0.995605f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000175f, 0.000361f,
+ 0.000481f, 0.000485f, 0.000364f, 0.000562f, 0.000703f, 0.000827f, 0.000842f, 0.000972f, 0.001172f, 0.001321f, 0.001675f, 0.001684f,
+ 0.002153f, 0.002455f, 0.003122f, 0.003391f, 0.004177f, 0.005314f, 0.006325f, 0.007896f, 0.010368f, 0.013527f, 0.018082f, 0.025162f,
+ 0.037140f, 0.057343f, 0.095886f, 0.175659f, 0.334473f, 0.567871f, 0.760742f, 0.866699f, 0.919922f, 0.947754f, 0.963379f, 0.972656f,
+ 0.979492f, 0.984375f, 0.987305f, 0.989258f, 0.991211f, 0.992676f, 0.993652f, 0.994629f, 0.995117f, 0.996094f, 0.996582f, 0.997070f,
+ 0.998047f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000325f, 0.000311f, 0.000243f, 0.000484f, 0.000486f, 0.000536f, 0.000698f, 0.000723f, 0.000844f,
+ 0.000972f, 0.001081f, 0.001312f, 0.001658f, 0.001914f, 0.001932f, 0.002390f, 0.003017f, 0.003668f, 0.004353f, 0.005199f, 0.006336f,
+ 0.007812f, 0.009972f, 0.012802f, 0.017029f, 0.024200f, 0.035034f, 0.053833f, 0.090027f, 0.164185f, 0.316162f, 0.549805f, 0.751465f,
+ 0.863281f, 0.918457f, 0.947266f, 0.963379f, 0.974121f, 0.979492f, 0.984375f, 0.987793f, 0.989746f, 0.991699f, 0.993164f, 0.994141f,
+ 0.995117f, 0.995605f, 0.996094f, 0.997070f, 0.997559f, 0.997559f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000231f, 0.000453f, 0.000480f, 0.000484f,
+ 0.000485f, 0.000486f, 0.000917f, 0.000963f, 0.000969f, 0.000970f, 0.001043f, 0.001288f, 0.001523f, 0.001684f, 0.001885f, 0.002464f,
+ 0.002531f, 0.003565f, 0.004124f, 0.004745f, 0.006077f, 0.007580f, 0.009605f, 0.012634f, 0.016953f, 0.023346f, 0.033386f, 0.051697f,
+ 0.085632f, 0.156250f, 0.303955f, 0.537598f, 0.746582f, 0.860840f, 0.918457f, 0.947754f, 0.963867f, 0.973633f, 0.979980f, 0.984863f,
+ 0.987793f, 0.990234f, 0.991699f, 0.993652f, 0.994141f, 0.995117f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000235f, 0.000239f, 0.000359f, 0.000484f, 0.000485f, 0.000486f, 0.000628f, 0.000957f, 0.000967f, 0.000969f, 0.001065f,
+ 0.001288f, 0.001602f, 0.001850f, 0.001995f, 0.002409f, 0.002523f, 0.003462f, 0.003838f, 0.004993f, 0.005917f, 0.007233f, 0.009338f,
+ 0.012230f, 0.015610f, 0.022415f, 0.032288f, 0.049805f, 0.082947f, 0.151489f, 0.296631f, 0.532715f, 0.745117f, 0.862793f, 0.919434f,
+ 0.948242f, 0.964844f, 0.974609f, 0.980957f, 0.985352f, 0.988281f, 0.990723f, 0.992676f, 0.994141f, 0.994629f, 0.995605f, 0.996094f,
+ 0.996582f, 0.997070f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000187f, 0.000437f, 0.000473f, 0.000483f, 0.000485f, 0.000606f,
+ 0.000583f, 0.000711f, 0.000772f, 0.000968f, 0.001107f, 0.001287f, 0.001434f, 0.001662f, 0.001984f, 0.002449f, 0.002634f, 0.003145f,
+ 0.003777f, 0.004410f, 0.005722f, 0.007114f, 0.008926f, 0.011696f, 0.016006f, 0.021683f, 0.031342f, 0.048309f, 0.080750f, 0.149170f,
+ 0.294678f, 0.534668f, 0.749512f, 0.866211f, 0.922363f, 0.950684f, 0.966309f, 0.975586f, 0.981934f, 0.985840f, 0.989258f, 0.991699f,
+ 0.992676f, 0.994141f, 0.994629f, 0.996094f, 0.996582f, 0.997070f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000247f,
+ 0.000238f, 0.000407f, 0.000482f, 0.000484f, 0.000604f, 0.000869f, 0.000909f, 0.000721f, 0.000955f, 0.001000f, 0.001241f, 0.001342f,
+ 0.001655f, 0.001721f, 0.002329f, 0.002623f, 0.003086f, 0.003677f, 0.004349f, 0.005600f, 0.006962f, 0.008835f, 0.011581f, 0.015274f,
+ 0.021286f, 0.030884f, 0.047760f, 0.079895f, 0.148926f, 0.298584f, 0.543945f, 0.758301f, 0.872559f, 0.925781f, 0.953125f, 0.967773f,
+ 0.977051f, 0.982910f, 0.986816f, 0.989258f, 0.991211f, 0.993164f, 0.994629f, 0.995605f, 0.996094f, 0.996582f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000237f, 0.000410f, 0.000472f, 0.000481f, 0.000483f, 0.000485f, 0.000687f, 0.000913f,
+ 0.000956f, 0.000966f, 0.000997f, 0.001341f, 0.001415f, 0.001813f, 0.002029f, 0.002043f, 0.002594f, 0.003210f, 0.003641f, 0.004734f,
+ 0.005356f, 0.006882f, 0.008675f, 0.011360f, 0.014816f, 0.020920f, 0.030380f, 0.047485f, 0.080200f, 0.151733f, 0.308105f, 0.561523f,
+ 0.772949f, 0.881348f, 0.931152f, 0.956055f, 0.969727f, 0.978516f, 0.983887f, 0.987793f, 0.990234f, 0.992188f, 0.993652f, 0.994629f,
+ 0.995605f, 0.996094f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000254f, 0.000345f, 0.000468f,
+ 0.000585f, 0.000482f, 0.000603f, 0.000485f, 0.000862f, 0.000928f, 0.000965f, 0.001174f, 0.001162f, 0.001405f, 0.001761f, 0.002016f,
+ 0.002182f, 0.002733f, 0.002831f, 0.003504f, 0.004456f, 0.005440f, 0.006775f, 0.008553f, 0.011055f, 0.014694f, 0.020859f, 0.030334f,
+ 0.047852f, 0.081970f, 0.157593f, 0.325439f, 0.586914f, 0.790527f, 0.890137f, 0.936523f, 0.959473f, 0.973145f, 0.980469f, 0.985352f,
+ 0.988770f, 0.990723f, 0.992676f, 0.994141f, 0.995117f, 0.996094f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000241f, 0.000237f, 0.000340f, 0.000457f, 0.000580f, 0.000481f, 0.000601f, 0.000605f, 0.000742f, 0.000951f, 0.000953f,
+ 0.001131f, 0.001257f, 0.001396f, 0.001730f, 0.001936f, 0.002102f, 0.002682f, 0.002762f, 0.003733f, 0.004425f, 0.005344f, 0.006516f,
+ 0.008354f, 0.010971f, 0.014793f, 0.020859f, 0.030640f, 0.048859f, 0.085144f, 0.167358f, 0.350586f, 0.620117f, 0.811035f, 0.900391f,
+ 0.942383f, 0.963379f, 0.975098f, 0.981934f, 0.986816f, 0.989746f, 0.992188f, 0.993164f, 0.994629f, 0.995117f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000131f, 0.000301f, 0.000430f, 0.000470f, 0.000593f,
+ 0.000571f, 0.000587f, 0.000693f, 0.000906f, 0.000959f, 0.000965f, 0.001094f, 0.001364f, 0.001522f, 0.001783f, 0.002094f, 0.002615f,
+ 0.003038f, 0.003365f, 0.004307f, 0.005135f, 0.006493f, 0.008347f, 0.011055f, 0.014824f, 0.020844f, 0.031204f, 0.050507f, 0.090027f,
+ 0.182129f, 0.385498f, 0.659668f, 0.834473f, 0.913086f, 0.949219f, 0.967285f, 0.978027f, 0.983887f, 0.987793f, 0.991211f, 0.992188f,
+ 0.994141f, 0.995117f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000189f, 0.000122f, 0.000122f,
+ 0.000241f, 0.000295f, 0.000425f, 0.000457f, 0.000592f, 0.000481f, 0.000603f, 0.000697f, 0.000926f, 0.000943f, 0.000960f, 0.001022f,
+ 0.001435f, 0.001632f, 0.001658f, 0.002024f, 0.002468f, 0.003010f, 0.003210f, 0.004124f, 0.005219f, 0.006351f, 0.008163f, 0.010933f,
+ 0.015030f, 0.021271f, 0.032257f, 0.053009f, 0.097534f, 0.203003f, 0.432373f, 0.704102f, 0.858887f, 0.924805f, 0.955566f, 0.970703f,
+ 0.979492f, 0.985840f, 0.989258f, 0.991699f, 0.993164f, 0.995117f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000214f, 0.000201f, 0.000239f, 0.000241f, 0.000383f, 0.000461f, 0.000474f, 0.000479f, 0.000598f,
+ 0.000736f, 0.000905f, 0.000947f, 0.001072f, 0.001180f, 0.001376f, 0.001572f, 0.001752f, 0.001900f, 0.002258f, 0.002792f, 0.003487f,
+ 0.004055f, 0.005161f, 0.006424f, 0.008209f, 0.010933f, 0.015030f, 0.021942f, 0.033630f, 0.056671f, 0.107666f, 0.233276f, 0.492188f,
+ 0.752441f, 0.881836f, 0.937012f, 0.961914f, 0.975098f, 0.982910f, 0.987305f, 0.990234f, 0.992676f, 0.994629f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998047f, 0.998535f, 0.998535f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000132f, 0.000224f, 0.000129f, 0.000237f, 0.000240f,
+ 0.000337f, 0.000430f, 0.000468f, 0.000579f, 0.000593f, 0.000602f, 0.000881f, 0.000936f, 0.000956f, 0.000963f, 0.001282f, 0.001519f,
+ 0.001607f, 0.001852f, 0.002150f, 0.002737f, 0.003508f, 0.003990f, 0.005077f, 0.006516f, 0.008179f, 0.011185f, 0.015511f, 0.022446f,
+ 0.035614f, 0.061859f, 0.122681f, 0.275879f, 0.563965f, 0.798828f, 0.903809f, 0.946777f, 0.967773f, 0.978516f, 0.984863f, 0.988770f,
+ 0.991699f, 0.993652f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000149f, 0.000122f, 0.000207f, 0.000371f, 0.000430f, 0.000573f, 0.000591f, 0.000598f, 0.000597f, 0.000804f,
+ 0.000901f, 0.000948f, 0.001053f, 0.001083f, 0.001376f, 0.001584f, 0.001878f, 0.002331f, 0.002529f, 0.003376f, 0.003944f, 0.005230f,
+ 0.006504f, 0.008537f, 0.011459f, 0.015747f, 0.024002f, 0.038361f, 0.069458f, 0.144409f, 0.336914f, 0.644043f, 0.841797f, 0.922363f,
+ 0.957520f, 0.972656f, 0.981934f, 0.987305f, 0.990234f, 0.993164f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000230f, 0.000234f, 0.000235f, 0.000268f, 0.000400f,
+ 0.000448f, 0.000585f, 0.000590f, 0.000599f, 0.000641f, 0.000788f, 0.000930f, 0.000968f, 0.001107f, 0.001251f, 0.001656f, 0.001701f,
+ 0.002047f, 0.002691f, 0.003437f, 0.003998f, 0.004829f, 0.006329f, 0.008492f, 0.011757f, 0.016525f, 0.025345f, 0.042297f, 0.080200f,
+ 0.177490f, 0.420654f, 0.724121f, 0.878906f, 0.938965f, 0.964355f, 0.977539f, 0.984863f, 0.989746f, 0.992188f, 0.997559f, 0.997559f,
+ 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000214f, 0.000235f, 0.000228f, 0.000240f, 0.000429f, 0.000439f, 0.000574f, 0.000654f, 0.000583f, 0.000493f, 0.000788f, 0.000813f,
+ 0.000947f, 0.001062f, 0.001225f, 0.001569f, 0.001721f, 0.002048f, 0.002844f, 0.002979f, 0.003902f, 0.004997f, 0.006454f, 0.008698f,
+ 0.012192f, 0.018143f, 0.027634f, 0.047913f, 0.095886f, 0.228394f, 0.526855f, 0.796875f, 0.910156f, 0.953125f, 0.973145f, 0.982422f,
+ 0.987793f, 0.991699f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.000000f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000205f, 0.000236f, 0.000232f, 0.000299f, 0.000446f, 0.000417f,
+ 0.000466f, 0.000580f, 0.000508f, 0.000710f, 0.000800f, 0.000940f, 0.000954f, 0.001228f, 0.001496f, 0.001631f, 0.002043f, 0.002798f,
+ 0.003359f, 0.004139f, 0.004951f, 0.006680f, 0.008995f, 0.012764f, 0.018860f, 0.030823f, 0.056061f, 0.120911f, 0.307617f, 0.645508f,
+ 0.855957f, 0.934082f, 0.964355f, 0.978516f, 0.985840f, 0.990234f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000226f,
+ 0.000122f, 0.000226f, 0.000373f, 0.000272f, 0.000325f, 0.000460f, 0.000471f, 0.000477f, 0.000673f, 0.000877f, 0.000929f, 0.000951f,
+ 0.001129f, 0.001446f, 0.001614f, 0.002096f, 0.002619f, 0.002939f, 0.003941f, 0.005363f, 0.006844f, 0.009491f, 0.013596f, 0.020905f,
+ 0.035370f, 0.068420f, 0.161743f, 0.426270f, 0.755859f, 0.900879f, 0.952148f, 0.973145f, 0.983398f, 0.989746f, 0.997070f, 0.997070f,
+ 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000111f, 0.000236f, 0.000297f, 0.000368f, 0.000449f, 0.000467f,
+ 0.000588f, 0.000641f, 0.000813f, 0.000924f, 0.001035f, 0.001124f, 0.001348f, 0.001764f, 0.001922f, 0.002439f, 0.003160f, 0.004005f,
+ 0.005280f, 0.007107f, 0.010109f, 0.014748f, 0.023148f, 0.041595f, 0.088440f, 0.232910f, 0.578125f, 0.841797f, 0.933594f, 0.965820f,
+ 0.980469f, 0.987305f, 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.000000f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000014f, 0.000011f, 0.000116f,
+ 0.000148f, 0.000128f, 0.000369f, 0.000418f, 0.000563f, 0.000470f, 0.000592f, 0.000776f, 0.000901f, 0.000937f, 0.001112f, 0.001348f,
+ 0.001743f, 0.001904f, 0.002470f, 0.003187f, 0.003986f, 0.005360f, 0.007557f, 0.010674f, 0.016068f, 0.026871f, 0.051666f, 0.122925f,
+ 0.356445f, 0.729492f, 0.901855f, 0.955078f, 0.976074f, 0.985840f, 0.996094f, 0.996582f, 0.996094f, 0.996582f, 0.996094f, 0.996582f,
+ 0.000122f, 0.000122f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000028f, 0.000019f, 0.000014f, 0.000011f, 0.000033f, 0.000118f, 0.000247f, 0.000305f, 0.000412f, 0.000447f, 0.000576f, 0.000587f,
+ 0.000693f, 0.000850f, 0.000949f, 0.001083f, 0.001319f, 0.001557f, 0.001957f, 0.002424f, 0.003340f, 0.004417f, 0.005688f, 0.007774f,
+ 0.011497f, 0.017731f, 0.032257f, 0.068604f, 0.189575f, 0.541992f, 0.843262f, 0.938477f, 0.970703f, 0.983887f, 0.995605f, 0.996094f,
+ 0.996094f, 0.996094f, 0.996094f, 0.996094f, 0.000121f, 0.000118f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000067f, 0.000042f, 0.000028f, 0.000020f, 0.000015f, 0.000066f, 0.000009f, 0.000101f, 0.000118f,
+ 0.000260f, 0.000358f, 0.000520f, 0.000456f, 0.000563f, 0.000711f, 0.000872f, 0.000980f, 0.001059f, 0.001309f, 0.001699f, 0.002066f,
+ 0.002708f, 0.003248f, 0.004166f, 0.005836f, 0.008224f, 0.012619f, 0.021484f, 0.041260f, 0.101074f, 0.323486f, 0.733887f, 0.912109f,
+ 0.962402f, 0.980957f, 0.995117f, 0.995117f, 0.995605f, 0.995605f, 0.995605f, 0.995605f, 0.000000f, 0.000000f, 0.000119f, 0.000119f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000105f, 0.000067f, 0.000042f, 0.000029f, 0.000022f,
+ 0.000015f, 0.000011f, 0.000040f, 0.000033f, 0.000153f, 0.000204f, 0.000313f, 0.000501f, 0.000554f, 0.000575f, 0.000585f, 0.000778f,
+ 0.000925f, 0.000980f, 0.001245f, 0.001634f, 0.001989f, 0.002413f, 0.003433f, 0.004028f, 0.005989f, 0.008911f, 0.014374f, 0.026443f,
+ 0.057495f, 0.170166f, 0.549805f, 0.864746f, 0.951172f, 0.977051f, 0.994629f, 0.994629f, 0.994629f, 0.994629f, 0.995605f, 0.994629f,
+ 0.000000f, 0.000046f, 0.000088f, 0.000118f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000108f, 0.000069f, 0.000047f, 0.000030f, 0.000022f, 0.000016f, 0.000012f, 0.000052f, 0.000081f, 0.000100f, 0.000184f, 0.000226f,
+ 0.000400f, 0.000467f, 0.000452f, 0.000597f, 0.000807f, 0.000895f, 0.000942f, 0.001219f, 0.001611f, 0.002022f, 0.002352f, 0.003222f,
+ 0.004177f, 0.006481f, 0.009850f, 0.017517f, 0.034668f, 0.090637f, 0.331055f, 0.776367f, 0.932129f, 0.972656f, 0.994141f, 0.994141f,
+ 0.994629f, 0.994141f, 0.994629f, 0.994629f, 0.000000f, 0.000000f, 0.000000f, 0.000107f, 0.000115f, 0.000112f, 0.000119f, 0.000118f,
+ 0.000119f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000117f, 0.000072f, 0.000049f, 0.000032f, 0.000023f, 0.000017f, 0.000013f,
+ 0.000011f, 0.000008f, 0.000075f, 0.000151f, 0.000207f, 0.000305f, 0.000509f, 0.000499f, 0.000560f, 0.000704f, 0.000863f, 0.000917f,
+ 0.001220f, 0.001505f, 0.001740f, 0.002174f, 0.003153f, 0.004559f, 0.007095f, 0.011826f, 0.022247f, 0.051147f, 0.173462f, 0.618652f,
+ 0.902344f, 0.966309f, 0.993164f, 0.993652f, 0.992676f, 0.992676f, 0.993164f, 0.993164f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000060f, 0.000102f, 0.000113f, 0.000117f, 0.000118f, 0.000119f, 0.000119f, 0.000119f, 0.000120f, 0.000120f, 0.000120f,
+ 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000078f,
+ 0.000052f, 0.000038f, 0.000027f, 0.000019f, 0.000015f, 0.000011f, 0.000054f, 0.000007f, 0.000085f, 0.000108f, 0.000258f, 0.000466f,
+ 0.000533f, 0.000560f, 0.000662f, 0.000849f, 0.000856f, 0.000965f, 0.001180f, 0.001678f, 0.002075f, 0.003193f, 0.005016f, 0.008095f,
+ 0.014343f, 0.030899f, 0.090820f, 0.401367f, 0.848145f, 0.956543f, 0.992188f, 0.992188f, 0.992188f, 0.992676f, 0.991699f, 0.992188f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000059f, 0.000096f, 0.000107f, 0.000112f, 0.000115f, 0.000116f,
+ 0.000117f, 0.000118f, 0.000118f, 0.000119f, 0.000119f, 0.000119f, 0.000119f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f,
+ 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000088f, 0.000059f, 0.000041f, 0.000031f, 0.000022f, 0.000017f, 0.000013f, 0.000010f,
+ 0.000056f, 0.000091f, 0.000183f, 0.000201f, 0.000309f, 0.000506f, 0.000547f, 0.000525f, 0.000629f, 0.000613f, 0.000817f, 0.001012f,
+ 0.001640f, 0.002420f, 0.003588f, 0.005520f, 0.009453f, 0.019119f, 0.050415f, 0.214722f, 0.751465f, 0.943848f, 0.990723f, 0.990723f,
+ 0.991211f, 0.991211f, 0.991211f, 0.991211f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000055f, 0.000095f, 0.000103f, 0.000105f, 0.000112f, 0.000114f, 0.000115f, 0.000117f, 0.000117f, 0.000117f, 0.000118f,
+ 0.000118f, 0.000119f, 0.000119f, 0.000119f, 0.000119f, 0.000119f, 0.000119f, 0.000120f, 0.000120f, 0.000105f, 0.000069f, 0.000048f,
+ 0.000035f, 0.000025f, 0.000019f, 0.000015f, 0.000011f, 0.000014f, 0.000008f, 0.000071f, 0.000193f, 0.000311f, 0.000315f, 0.000524f,
+ 0.000483f, 0.000558f, 0.000591f, 0.000705f, 0.000950f, 0.001389f, 0.002428f, 0.003494f, 0.006321f, 0.012306f, 0.029480f, 0.108948f,
+ 0.581543f, 0.924316f, 0.989746f, 0.989746f, 0.989258f, 0.989746f, 0.989258f, 0.989746f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000069f, 0.000096f, 0.000103f, 0.000107f,
+ 0.000109f, 0.000112f, 0.000113f, 0.000115f, 0.000115f, 0.000116f, 0.000117f, 0.000117f, 0.000118f, 0.000118f, 0.000118f, 0.000118f,
+ 0.000119f, 0.000119f, 0.000119f, 0.000084f, 0.000061f, 0.000042f, 0.000031f, 0.000023f, 0.000018f, 0.000014f, 0.000011f, 0.000009f,
+ 0.000095f, 0.000127f, 0.000223f, 0.000402f, 0.000432f, 0.000399f, 0.000494f, 0.000535f, 0.000557f, 0.000933f, 0.001474f, 0.002300f,
+ 0.004192f, 0.007919f, 0.017838f, 0.057068f, 0.360840f, 0.890625f, 0.986816f, 0.987793f, 0.987305f, 0.987305f, 0.987793f, 0.987305f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000035f, 0.000041f, 0.000088f, 0.000098f, 0.000103f, 0.000106f, 0.000110f, 0.000110f, 0.000113f, 0.000113f,
+ 0.000115f, 0.000116f, 0.000116f, 0.000117f, 0.000117f, 0.000117f, 0.000117f, 0.000118f, 0.000111f, 0.000074f, 0.000053f, 0.000038f,
+ 0.000029f, 0.000022f, 0.000016f, 0.000013f, 0.000010f, 0.000008f, 0.000073f, 0.000152f, 0.000296f, 0.000369f, 0.000365f, 0.000437f,
+ 0.000507f, 0.000661f, 0.000876f, 0.001451f, 0.002531f, 0.004898f, 0.010384f, 0.031113f, 0.183838f, 0.833008f, 0.984375f, 0.984863f,
+ 0.984863f, 0.984375f, 0.984863f, 0.984863f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000024f, 0.000044f, 0.000073f,
+ 0.000087f, 0.000097f, 0.000102f, 0.000105f, 0.000108f, 0.000110f, 0.000111f, 0.000113f, 0.000114f, 0.000114f, 0.000115f, 0.000115f,
+ 0.000116f, 0.000116f, 0.000101f, 0.000070f, 0.000052f, 0.000037f, 0.000027f, 0.000021f, 0.000016f, 0.000013f, 0.000010f, 0.000008f,
+ 0.000083f, 0.000183f, 0.000352f, 0.000355f, 0.000362f, 0.000365f, 0.000528f, 0.000790f, 0.001469f, 0.003029f, 0.005970f, 0.017242f,
+ 0.089050f, 0.728516f, 0.980957f, 0.981445f, 0.981445f, 0.980957f, 0.980957f, 0.981445f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000033f, 0.000041f, 0.000073f, 0.000083f, 0.000088f, 0.000097f, 0.000102f,
+ 0.000105f, 0.000108f, 0.000108f, 0.000111f, 0.000112f, 0.000113f, 0.000113f, 0.000114f, 0.000097f, 0.000068f, 0.000049f, 0.000038f,
+ 0.000028f, 0.000021f, 0.000016f, 0.000013f, 0.000010f, 0.000056f, 0.000151f, 0.000243f, 0.000264f, 0.000221f, 0.000328f, 0.000449f,
+ 0.000850f, 0.001612f, 0.003340f, 0.009361f, 0.043121f, 0.548340f, 0.976074f, 0.976562f, 0.975586f, 0.976074f, 0.976074f, 0.976562f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000019f, 0.000052f, 0.000065f, 0.000077f, 0.000088f, 0.000094f, 0.000098f, 0.000100f, 0.000104f, 0.000106f, 0.000108f,
+ 0.000109f, 0.000110f, 0.000095f, 0.000069f, 0.000052f, 0.000037f, 0.000028f, 0.000021f, 0.000017f, 0.000013f, 0.000025f, 0.000063f,
+ 0.000195f, 0.000233f, 0.000205f, 0.000264f, 0.000401f, 0.000789f, 0.001532f, 0.004520f, 0.020844f, 0.321289f, 0.969238f, 0.968750f,
+ 0.969238f, 0.968750f, 0.969238f, 0.969238f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000018f, 0.000039f, 0.000053f,
+ 0.000066f, 0.000079f, 0.000086f, 0.000090f, 0.000096f, 0.000100f, 0.000102f, 0.000105f, 0.000098f, 0.000074f, 0.000053f, 0.000041f,
+ 0.000031f, 0.000023f, 0.000017f, 0.000013f, 0.000028f, 0.000139f, 0.000189f, 0.000179f, 0.000219f, 0.000333f, 0.000840f, 0.002119f,
+ 0.009193f, 0.144775f, 0.958496f, 0.958496f, 0.958008f, 0.958496f, 0.958008f, 0.958008f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000025f, 0.000040f, 0.000052f, 0.000067f, 0.000077f, 0.000082f,
+ 0.000089f, 0.000093f, 0.000097f, 0.000079f, 0.000059f, 0.000044f, 0.000033f, 0.000024f, 0.000018f, 0.000014f, 0.000034f, 0.000084f,
+ 0.000157f, 0.000199f, 0.000309f, 0.000817f, 0.003424f, 0.054901f, 0.940918f, 0.940918f, 0.940918f, 0.940918f, 0.941406f, 0.940430f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000021f, 0.000040f, 0.000054f, 0.000063f, 0.000072f, 0.000078f, 0.000085f, 0.000065f, 0.000049f,
+ 0.000036f, 0.000026f, 0.000019f, 0.000014f, 0.000042f, 0.000114f, 0.000122f, 0.000276f, 0.001024f, 0.016357f, 0.912109f, 0.912598f,
+ 0.911621f, 0.912598f, 0.911621f, 0.913086f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000016f, 0.000032f, 0.000045f, 0.000056f, 0.000065f, 0.000054f, 0.000039f, 0.000028f, 0.000019f, 0.000013f, 0.000049f, 0.000079f,
+ 0.000226f, 0.003199f, 0.860840f, 0.859863f, 0.860352f, 0.860840f, 0.860840f, 0.860352f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000004f, 0.000021f, 0.000035f,
+ 0.000040f, 0.000027f, 0.000018f, 0.000013f, 0.000033f, 0.000333f, 0.764160f, 0.765137f, 0.764648f, 0.764648f, 0.764648f, 0.765137f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000006f, 0.000011f, 0.000009f, 0.600586f, 0.602051f,
+ 0.602051f, 0.601562f, 0.601074f, 0.601074f,
+ },
+ {
+ 0.142456f, 0.713867f, 0.883789f, 0.933105f, 0.953613f, 0.964844f, 0.972168f, 0.977539f, 0.980957f, 0.983398f, 0.985352f, 0.987305f,
+ 0.989258f, 0.989746f, 0.990723f, 0.991699f, 0.992676f, 0.993164f, 0.993652f, 0.993652f, 0.994141f, 0.995117f, 0.995117f, 0.995605f,
+ 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f,
+ 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.012886f, 0.087646f, 0.360840f, 0.709473f, 0.859863f, 0.916992f, 0.943848f, 0.958496f,
+ 0.967773f, 0.973633f, 0.978516f, 0.980957f, 0.984375f, 0.986328f, 0.987793f, 0.988770f, 0.990234f, 0.991211f, 0.992188f, 0.993164f,
+ 0.993164f, 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.997070f,
+ 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.003895f, 0.020126f, 0.063599f, 0.188721f,
+ 0.464844f, 0.727539f, 0.853027f, 0.909668f, 0.938477f, 0.954590f, 0.965332f, 0.971680f, 0.976562f, 0.979980f, 0.982910f, 0.985840f,
+ 0.986816f, 0.988770f, 0.990234f, 0.990723f, 0.991699f, 0.992188f, 0.993164f, 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.995605f,
+ 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.998047f,
+ 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.002062f, 0.008438f, 0.021774f, 0.049713f, 0.117676f, 0.279541f, 0.541016f, 0.751465f, 0.855469f, 0.909180f, 0.936035f, 0.952637f,
+ 0.963379f, 0.970703f, 0.975098f, 0.979492f, 0.982910f, 0.984863f, 0.986328f, 0.987793f, 0.989258f, 0.990234f, 0.990723f, 0.992188f,
+ 0.992676f, 0.993164f, 0.993652f, 0.994629f, 0.995117f, 0.995117f, 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.996582f, 0.997070f,
+ 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.001335f, 0.004597f, 0.010628f, 0.020844f, 0.040283f, 0.082764f, 0.177612f, 0.366211f,
+ 0.605469f, 0.773926f, 0.863281f, 0.910156f, 0.936035f, 0.952148f, 0.962402f, 0.969727f, 0.975098f, 0.979004f, 0.982422f, 0.984863f,
+ 0.986328f, 0.988281f, 0.988770f, 0.989746f, 0.991211f, 0.991699f, 0.992676f, 0.993164f, 0.993652f, 0.994629f, 0.995117f, 0.995117f,
+ 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f,
+ 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000851f, 0.002769f, 0.006130f, 0.010994f,
+ 0.019394f, 0.034943f, 0.063293f, 0.122253f, 0.244019f, 0.448242f, 0.660156f, 0.798828f, 0.872559f, 0.914062f, 0.937988f, 0.954102f,
+ 0.961914f, 0.970215f, 0.974609f, 0.978516f, 0.981934f, 0.984375f, 0.986328f, 0.987793f, 0.988770f, 0.989746f, 0.991211f, 0.991699f,
+ 0.992676f, 0.993164f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997070f,
+ 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000466f, 0.001933f, 0.003809f, 0.007095f, 0.011353f, 0.018204f, 0.030029f, 0.050568f, 0.090759f, 0.170898f, 0.318848f, 0.526367f,
+ 0.708496f, 0.820801f, 0.884277f, 0.918457f, 0.940918f, 0.954102f, 0.963867f, 0.970215f, 0.975098f, 0.978516f, 0.981934f, 0.984863f,
+ 0.986328f, 0.988281f, 0.988770f, 0.990234f, 0.991211f, 0.991699f, 0.993164f, 0.993652f, 0.994141f, 0.994629f, 0.994629f, 0.995605f,
+ 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998535f,
+ 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000487f, 0.001685f, 0.002766f, 0.004467f, 0.007305f, 0.011215f, 0.017136f, 0.026489f,
+ 0.042419f, 0.071716f, 0.125244f, 0.228271f, 0.399658f, 0.599609f, 0.751953f, 0.842773f, 0.894531f, 0.924805f, 0.943359f, 0.955566f,
+ 0.965820f, 0.971191f, 0.976562f, 0.979980f, 0.981934f, 0.984863f, 0.986816f, 0.988281f, 0.989258f, 0.990723f, 0.991211f, 0.992188f,
+ 0.992676f, 0.993652f, 0.994141f, 0.995117f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997070f,
+ 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000244f, 0.000965f, 0.002024f, 0.003202f,
+ 0.005009f, 0.007050f, 0.011070f, 0.015869f, 0.023987f, 0.036835f, 0.058563f, 0.097168f, 0.169800f, 0.297852f, 0.484131f, 0.664062f,
+ 0.789062f, 0.861816f, 0.905273f, 0.930176f, 0.947266f, 0.958984f, 0.967285f, 0.972168f, 0.976562f, 0.980469f, 0.982910f, 0.984863f,
+ 0.986816f, 0.988770f, 0.989746f, 0.990723f, 0.992188f, 0.992188f, 0.993652f, 0.993652f, 0.994629f, 0.995117f, 0.995117f, 0.995605f,
+ 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000244f, 0.000974f, 0.001576f, 0.002403f, 0.003510f, 0.005344f, 0.007332f, 0.010567f, 0.015099f, 0.022064f, 0.032104f, 0.048706f,
+ 0.078003f, 0.130249f, 0.224243f, 0.378174f, 0.566406f, 0.720703f, 0.820312f, 0.879883f, 0.915039f, 0.936523f, 0.951660f, 0.961426f,
+ 0.968262f, 0.974121f, 0.978027f, 0.980957f, 0.983887f, 0.985840f, 0.987793f, 0.989258f, 0.990234f, 0.991211f, 0.992188f, 0.992676f,
+ 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997070f, 0.997070f,
+ 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000240f, 0.000609f, 0.001096f, 0.001580f, 0.002674f, 0.004131f, 0.005245f, 0.007660f,
+ 0.010757f, 0.014221f, 0.019775f, 0.028381f, 0.041870f, 0.064697f, 0.103638f, 0.173706f, 0.293945f, 0.466553f, 0.642090f, 0.769531f,
+ 0.849121f, 0.895996f, 0.924316f, 0.942871f, 0.956055f, 0.963867f, 0.970703f, 0.975098f, 0.979004f, 0.981934f, 0.984863f, 0.986328f,
+ 0.988770f, 0.989746f, 0.990723f, 0.991699f, 0.992676f, 0.993164f, 0.993652f, 0.994629f, 0.995117f, 0.995117f, 0.995605f, 0.996094f,
+ 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000000f, 0.000608f, 0.001062f, 0.001268f,
+ 0.002001f, 0.003099f, 0.003937f, 0.005379f, 0.007595f, 0.010078f, 0.013176f, 0.018524f, 0.025787f, 0.036896f, 0.054932f, 0.085327f,
+ 0.137573f, 0.229980f, 0.376953f, 0.555664f, 0.708984f, 0.810547f, 0.873047f, 0.909180f, 0.933594f, 0.948730f, 0.959961f, 0.967285f,
+ 0.973145f, 0.977539f, 0.980469f, 0.983398f, 0.985840f, 0.986816f, 0.988770f, 0.989746f, 0.991211f, 0.992188f, 0.993164f, 0.993652f,
+ 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.998047f,
+ 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000244f, 0.000606f, 0.000609f, 0.001317f, 0.001564f, 0.002674f, 0.003273f, 0.004402f, 0.005630f, 0.007141f, 0.009514f, 0.012398f,
+ 0.016678f, 0.023331f, 0.032776f, 0.047363f, 0.071594f, 0.112610f, 0.183960f, 0.303711f, 0.470215f, 0.639648f, 0.766113f, 0.844727f,
+ 0.892090f, 0.921875f, 0.941895f, 0.954590f, 0.963379f, 0.970215f, 0.975098f, 0.979004f, 0.981934f, 0.984863f, 0.986328f, 0.987793f,
+ 0.989746f, 0.991211f, 0.991699f, 0.992676f, 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.995605f, 0.996094f, 0.996094f,
+ 0.996582f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000244f, 0.000244f, 0.000727f, 0.000803f, 0.001575f, 0.002035f, 0.002821f, 0.003527f,
+ 0.004475f, 0.005421f, 0.007023f, 0.009491f, 0.011879f, 0.015976f, 0.021530f, 0.029587f, 0.041809f, 0.061737f, 0.094360f, 0.150146f,
+ 0.246460f, 0.393066f, 0.566406f, 0.712891f, 0.812500f, 0.872070f, 0.909180f, 0.933105f, 0.948242f, 0.959961f, 0.967773f, 0.972656f,
+ 0.977539f, 0.980957f, 0.982910f, 0.986328f, 0.987305f, 0.988770f, 0.989746f, 0.991211f, 0.992188f, 0.993164f, 0.993652f, 0.994629f,
+ 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000244f, 0.000244f, 0.000471f, 0.000727f,
+ 0.000967f, 0.001572f, 0.002161f, 0.002680f, 0.003246f, 0.004337f, 0.005241f, 0.006950f, 0.009087f, 0.011497f, 0.015038f, 0.019913f,
+ 0.026688f, 0.037537f, 0.054352f, 0.080383f, 0.125122f, 0.202515f, 0.327148f, 0.493652f, 0.656250f, 0.774414f, 0.849609f, 0.895508f,
+ 0.923828f, 0.942383f, 0.954590f, 0.963867f, 0.971191f, 0.975586f, 0.979004f, 0.982422f, 0.984863f, 0.987305f, 0.988281f, 0.989746f,
+ 0.990723f, 0.992188f, 0.992676f, 0.993652f, 0.994141f, 0.995117f, 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997070f,
+ 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.999512f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999023f,
+ 0.000121f, 0.000244f, 0.000244f, 0.000715f, 0.001089f, 0.001278f, 0.001781f, 0.002275f, 0.002548f, 0.003334f, 0.004150f, 0.005314f,
+ 0.006824f, 0.008430f, 0.011200f, 0.014145f, 0.018631f, 0.024750f, 0.033905f, 0.047760f, 0.069885f, 0.106445f, 0.169312f, 0.273682f,
+ 0.426270f, 0.596191f, 0.732422f, 0.823242f, 0.879883f, 0.914062f, 0.936035f, 0.950684f, 0.960938f, 0.968750f, 0.973633f, 0.978516f,
+ 0.981934f, 0.984375f, 0.986328f, 0.988281f, 0.989258f, 0.990234f, 0.991699f, 0.992676f, 0.993652f, 0.994141f, 0.994629f, 0.995117f,
+ 0.995605f, 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.998535f, 0.999023f, 0.999512f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999023f, 0.000241f, 0.000244f, 0.000365f, 0.000600f, 0.000961f, 0.000972f, 0.001621f, 0.001697f,
+ 0.002274f, 0.002684f, 0.003359f, 0.004238f, 0.005573f, 0.006691f, 0.008057f, 0.010529f, 0.013832f, 0.017593f, 0.022812f, 0.031174f,
+ 0.042786f, 0.061462f, 0.092407f, 0.143799f, 0.231201f, 0.366943f, 0.535645f, 0.688477f, 0.794922f, 0.861816f, 0.902832f, 0.928711f,
+ 0.945801f, 0.957520f, 0.966797f, 0.972656f, 0.976562f, 0.980469f, 0.983398f, 0.985840f, 0.987793f, 0.989258f, 0.990234f, 0.991699f,
+ 0.992676f, 0.993164f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.995605f, 0.996094f, 0.997070f, 0.997070f, 0.997559f, 0.997559f,
+ 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.000000f, 0.000243f, 0.000365f, 0.000365f,
+ 0.000798f, 0.000968f, 0.001249f, 0.001528f, 0.001798f, 0.002457f, 0.002798f, 0.003494f, 0.004353f, 0.005306f, 0.006363f, 0.008141f,
+ 0.010147f, 0.012596f, 0.016006f, 0.021423f, 0.028503f, 0.039185f, 0.055420f, 0.081116f, 0.124390f, 0.198120f, 0.316895f, 0.478516f,
+ 0.641113f, 0.763672f, 0.842773f, 0.891113f, 0.921387f, 0.941406f, 0.954590f, 0.963867f, 0.970215f, 0.975586f, 0.979492f, 0.982910f,
+ 0.985352f, 0.987305f, 0.988770f, 0.989746f, 0.991211f, 0.992188f, 0.993164f, 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.995605f,
+ 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000238f, 0.000365f, 0.000365f, 0.000598f, 0.000820f, 0.001200f, 0.001279f, 0.001631f, 0.001736f, 0.002172f, 0.002874f,
+ 0.003576f, 0.004391f, 0.005096f, 0.006176f, 0.007545f, 0.009674f, 0.012505f, 0.015945f, 0.020187f, 0.026550f, 0.035706f, 0.049835f,
+ 0.072510f, 0.109253f, 0.171631f, 0.275391f, 0.426514f, 0.594238f, 0.730469f, 0.822754f, 0.877930f, 0.913574f, 0.936523f, 0.951172f,
+ 0.961426f, 0.969727f, 0.974609f, 0.978027f, 0.982422f, 0.984863f, 0.986816f, 0.988770f, 0.989746f, 0.991699f, 0.992188f, 0.993164f,
+ 0.993652f, 0.994629f, 0.994629f, 0.995117f, 0.996094f, 0.996094f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.000000f, 0.000000f, 0.000364f, 0.000486f, 0.000487f, 0.000562f, 0.000822f, 0.000967f,
+ 0.001213f, 0.001871f, 0.001803f, 0.002485f, 0.002796f, 0.003410f, 0.004242f, 0.005070f, 0.006153f, 0.007698f, 0.009262f, 0.011635f,
+ 0.014709f, 0.019104f, 0.024521f, 0.033295f, 0.045746f, 0.065674f, 0.096741f, 0.150635f, 0.241455f, 0.380127f, 0.548828f, 0.698242f,
+ 0.802246f, 0.867188f, 0.906738f, 0.931152f, 0.948242f, 0.959473f, 0.967285f, 0.973633f, 0.978516f, 0.981445f, 0.984375f, 0.986328f,
+ 0.988281f, 0.989258f, 0.990723f, 0.992188f, 0.993164f, 0.993652f, 0.994629f, 0.994629f, 0.995117f, 0.996094f, 0.996582f, 0.996582f,
+ 0.997559f, 0.997559f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.000000f, 0.000000f, 0.000350f, 0.000483f,
+ 0.000486f, 0.000604f, 0.000743f, 0.001093f, 0.001187f, 0.001297f, 0.001601f, 0.001921f, 0.002501f, 0.002922f, 0.003296f, 0.004200f,
+ 0.005211f, 0.006054f, 0.007603f, 0.008904f, 0.011169f, 0.014091f, 0.017685f, 0.023331f, 0.030991f, 0.042358f, 0.059326f, 0.087646f,
+ 0.134521f, 0.213867f, 0.341309f, 0.506348f, 0.665039f, 0.780762f, 0.854492f, 0.899414f, 0.927246f, 0.945312f, 0.957520f, 0.966309f,
+ 0.973145f, 0.977539f, 0.981445f, 0.984375f, 0.986328f, 0.988770f, 0.989746f, 0.991211f, 0.992188f, 0.993164f, 0.993652f, 0.994629f,
+ 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.997070f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000120f, 0.000360f, 0.000485f, 0.000486f, 0.000487f, 0.000604f, 0.000947f, 0.001201f, 0.001374f, 0.001715f,
+ 0.002127f, 0.002239f, 0.002876f, 0.003426f, 0.004063f, 0.005276f, 0.005810f, 0.006744f, 0.008713f, 0.010597f, 0.013680f, 0.016754f,
+ 0.021744f, 0.028778f, 0.039093f, 0.054901f, 0.079956f, 0.121399f, 0.191895f, 0.307861f, 0.468262f, 0.633301f, 0.760742f, 0.842285f,
+ 0.892090f, 0.923340f, 0.942383f, 0.956543f, 0.965332f, 0.972168f, 0.977539f, 0.980469f, 0.983887f, 0.985840f, 0.988281f, 0.989746f,
+ 0.990723f, 0.992188f, 0.993164f, 0.994141f, 0.994629f, 0.995117f, 0.996094f, 0.996582f, 0.997070f, 0.997070f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.000000f, 0.000000f, 0.000121f, 0.000219f, 0.000474f, 0.000484f, 0.000486f, 0.000487f,
+ 0.000720f, 0.001108f, 0.001199f, 0.001209f, 0.001689f, 0.002253f, 0.002489f, 0.002916f, 0.003714f, 0.004040f, 0.005054f, 0.006001f,
+ 0.006737f, 0.008713f, 0.010376f, 0.012665f, 0.016251f, 0.020615f, 0.027145f, 0.036499f, 0.050720f, 0.073181f, 0.110474f, 0.174072f,
+ 0.280518f, 0.434570f, 0.604980f, 0.742188f, 0.830566f, 0.885742f, 0.918945f, 0.940918f, 0.954102f, 0.964355f, 0.971680f, 0.977051f,
+ 0.980957f, 0.984375f, 0.986816f, 0.988281f, 0.989746f, 0.990723f, 0.992188f, 0.993652f, 0.994141f, 0.995117f, 0.995605f, 0.996094f,
+ 0.996582f, 0.997070f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.000000f, 0.000000f, 0.000120f, 0.000239f,
+ 0.000319f, 0.000475f, 0.000484f, 0.000485f, 0.000618f, 0.000844f, 0.001094f, 0.001201f, 0.001570f, 0.001782f, 0.002010f, 0.002407f,
+ 0.003046f, 0.003099f, 0.004208f, 0.004700f, 0.005882f, 0.006878f, 0.007980f, 0.009949f, 0.012344f, 0.015358f, 0.019821f, 0.026047f,
+ 0.034271f, 0.047455f, 0.067993f, 0.102112f, 0.160034f, 0.258057f, 0.406494f, 0.578613f, 0.723633f, 0.820312f, 0.880371f, 0.916016f,
+ 0.938965f, 0.953125f, 0.963867f, 0.971191f, 0.976562f, 0.980469f, 0.983887f, 0.985840f, 0.988770f, 0.989746f, 0.991699f, 0.992676f,
+ 0.993652f, 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.999023f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000242f, 0.000455f, 0.000481f, 0.000583f, 0.000601f, 0.000804f, 0.000912f, 0.001247f,
+ 0.001319f, 0.001571f, 0.001793f, 0.002337f, 0.002464f, 0.003099f, 0.003164f, 0.003809f, 0.004627f, 0.005764f, 0.006397f, 0.008118f,
+ 0.009605f, 0.011917f, 0.015083f, 0.018692f, 0.024384f, 0.032806f, 0.044983f, 0.063477f, 0.095337f, 0.148560f, 0.240112f, 0.382324f,
+ 0.556641f, 0.708984f, 0.812500f, 0.875488f, 0.913574f, 0.937500f, 0.953125f, 0.963867f, 0.971191f, 0.977051f, 0.980957f, 0.983887f,
+ 0.986816f, 0.988281f, 0.990234f, 0.992188f, 0.993164f, 0.993652f, 0.994141f, 0.995605f, 0.995605f, 0.996094f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000240f, 0.000242f, 0.000524f, 0.000597f,
+ 0.000604f, 0.000606f, 0.000674f, 0.001040f, 0.001238f, 0.001427f, 0.001637f, 0.001670f, 0.002104f, 0.002432f, 0.002775f, 0.003416f,
+ 0.003860f, 0.004482f, 0.005573f, 0.006374f, 0.007828f, 0.009384f, 0.011635f, 0.014175f, 0.018219f, 0.023224f, 0.031052f, 0.042603f,
+ 0.060730f, 0.089661f, 0.139526f, 0.225464f, 0.363525f, 0.538574f, 0.696289f, 0.806152f, 0.872559f, 0.912109f, 0.937012f, 0.952637f,
+ 0.963867f, 0.971191f, 0.976562f, 0.981445f, 0.984863f, 0.987305f, 0.988770f, 0.990723f, 0.992188f, 0.993164f, 0.994141f, 0.994629f,
+ 0.995117f, 0.996094f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.000000f, 0.000000f, 0.000000f, 0.000119f,
+ 0.000192f, 0.000240f, 0.000242f, 0.000535f, 0.000478f, 0.000600f, 0.000843f, 0.000925f, 0.001027f, 0.001236f, 0.001502f, 0.001490f,
+ 0.001658f, 0.002256f, 0.002430f, 0.002880f, 0.003056f, 0.003983f, 0.004292f, 0.005333f, 0.006264f, 0.007393f, 0.009064f, 0.011131f,
+ 0.013741f, 0.017242f, 0.022690f, 0.029922f, 0.040680f, 0.057831f, 0.085022f, 0.132446f, 0.214844f, 0.349121f, 0.524414f, 0.688477f,
+ 0.801758f, 0.871094f, 0.912109f, 0.937500f, 0.953125f, 0.964355f, 0.971680f, 0.977539f, 0.981445f, 0.985352f, 0.987305f, 0.989258f,
+ 0.991211f, 0.992188f, 0.993652f, 0.994629f, 0.995117f, 0.995605f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000119f, 0.000232f, 0.000233f, 0.000363f, 0.000457f, 0.000714f, 0.000724f, 0.000727f,
+ 0.000847f, 0.000992f, 0.001177f, 0.001525f, 0.001560f, 0.001740f, 0.002090f, 0.002329f, 0.002718f, 0.003372f, 0.003902f, 0.004307f,
+ 0.005184f, 0.005886f, 0.007446f, 0.008667f, 0.010574f, 0.013588f, 0.016556f, 0.021744f, 0.028854f, 0.039124f, 0.055176f, 0.081726f,
+ 0.127075f, 0.206421f, 0.338867f, 0.515625f, 0.683105f, 0.800293f, 0.870605f, 0.912598f, 0.937500f, 0.954590f, 0.965332f, 0.973145f,
+ 0.978516f, 0.982422f, 0.985840f, 0.988281f, 0.989746f, 0.991211f, 0.992676f, 0.993652f, 0.994141f, 0.995117f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000103f, 0.000120f, 0.000240f, 0.000240f,
+ 0.000484f, 0.000574f, 0.000596f, 0.000837f, 0.000820f, 0.000859f, 0.000985f, 0.001070f, 0.001509f, 0.001554f, 0.001785f, 0.002214f,
+ 0.002476f, 0.002754f, 0.002991f, 0.003487f, 0.004303f, 0.005074f, 0.005920f, 0.007126f, 0.008743f, 0.010361f, 0.013023f, 0.016403f,
+ 0.021011f, 0.027817f, 0.037811f, 0.053375f, 0.079041f, 0.123291f, 0.201172f, 0.333252f, 0.511719f, 0.682129f, 0.801270f, 0.872070f,
+ 0.914062f, 0.939941f, 0.955078f, 0.966309f, 0.973633f, 0.979004f, 0.982910f, 0.986328f, 0.988770f, 0.990234f, 0.991699f, 0.992676f,
+ 0.993652f, 0.995117f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000079f, 0.000053f, 0.000118f, 0.000418f, 0.000358f, 0.000363f, 0.000678f, 0.000708f, 0.000825f, 0.000838f, 0.000878f, 0.001146f,
+ 0.000978f, 0.001483f, 0.001541f, 0.001769f, 0.001812f, 0.002434f, 0.002699f, 0.003225f, 0.003298f, 0.004002f, 0.004948f, 0.005932f,
+ 0.007084f, 0.008461f, 0.010414f, 0.012665f, 0.015915f, 0.020615f, 0.027023f, 0.036743f, 0.051941f, 0.077332f, 0.120789f, 0.198608f,
+ 0.331543f, 0.512695f, 0.686523f, 0.805664f, 0.875488f, 0.917480f, 0.941406f, 0.957031f, 0.968262f, 0.975098f, 0.980469f, 0.983887f,
+ 0.986816f, 0.989258f, 0.990723f, 0.992188f, 0.993164f, 0.994629f, 0.998047f, 0.998047f, 0.998535f, 0.998047f, 0.998535f, 0.998535f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000109f, 0.000232f, 0.000349f, 0.000478f, 0.000483f, 0.000483f, 0.000609f,
+ 0.000795f, 0.000835f, 0.000806f, 0.000726f, 0.001022f, 0.001222f, 0.001442f, 0.001536f, 0.001650f, 0.001714f, 0.002377f, 0.002588f,
+ 0.003159f, 0.003643f, 0.004036f, 0.004929f, 0.005718f, 0.006813f, 0.008072f, 0.009880f, 0.012527f, 0.015854f, 0.020035f, 0.026352f,
+ 0.035950f, 0.051178f, 0.076416f, 0.119751f, 0.198730f, 0.334229f, 0.519531f, 0.694824f, 0.812988f, 0.880859f, 0.920898f, 0.944336f,
+ 0.958984f, 0.969727f, 0.976562f, 0.980957f, 0.984863f, 0.987793f, 0.989746f, 0.991211f, 0.992676f, 0.993652f, 0.997559f, 0.998047f,
+ 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000068f, 0.000265f,
+ 0.000361f, 0.000478f, 0.000480f, 0.000479f, 0.000568f, 0.000693f, 0.000714f, 0.000806f, 0.000843f, 0.000919f, 0.001222f, 0.001376f,
+ 0.001531f, 0.001554f, 0.001987f, 0.002342f, 0.002558f, 0.002798f, 0.003132f, 0.004021f, 0.004864f, 0.005455f, 0.006664f, 0.008110f,
+ 0.009613f, 0.011955f, 0.015335f, 0.019608f, 0.025879f, 0.035522f, 0.050629f, 0.075623f, 0.120239f, 0.201416f, 0.342041f, 0.533203f,
+ 0.707031f, 0.821777f, 0.887695f, 0.925293f, 0.946777f, 0.961914f, 0.971680f, 0.977539f, 0.982422f, 0.985352f, 0.988281f, 0.989746f,
+ 0.992188f, 0.993164f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000122f, 0.000000f, 0.000122f, 0.000322f, 0.000241f, 0.000478f, 0.000480f, 0.000480f, 0.000510f, 0.000695f, 0.000710f,
+ 0.000958f, 0.000765f, 0.001075f, 0.001116f, 0.001318f, 0.001606f, 0.001546f, 0.001916f, 0.002306f, 0.002499f, 0.002905f, 0.003202f,
+ 0.003914f, 0.004498f, 0.005459f, 0.006611f, 0.007687f, 0.009331f, 0.011757f, 0.014923f, 0.019241f, 0.025833f, 0.035492f, 0.050507f,
+ 0.076233f, 0.122131f, 0.207153f, 0.355225f, 0.551758f, 0.724609f, 0.833496f, 0.894531f, 0.930664f, 0.951660f, 0.964844f, 0.973145f,
+ 0.979492f, 0.983887f, 0.986816f, 0.989258f, 0.991211f, 0.993164f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.997559f, 0.997559f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000351f, 0.000458f, 0.000476f,
+ 0.000480f, 0.000482f, 0.000528f, 0.000650f, 0.000704f, 0.000956f, 0.000828f, 0.000963f, 0.001111f, 0.001265f, 0.001474f, 0.001806f,
+ 0.001872f, 0.002308f, 0.002445f, 0.002701f, 0.003229f, 0.003851f, 0.004375f, 0.005356f, 0.006317f, 0.007458f, 0.009300f, 0.011574f,
+ 0.014725f, 0.019165f, 0.025696f, 0.035461f, 0.050812f, 0.077637f, 0.125977f, 0.216797f, 0.374756f, 0.576660f, 0.745117f, 0.848145f,
+ 0.904785f, 0.936523f, 0.956055f, 0.967773f, 0.975586f, 0.980957f, 0.984863f, 0.987793f, 0.990234f, 0.992188f, 0.997070f, 0.997559f,
+ 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000292f, 0.000224f, 0.000452f, 0.000453f, 0.000479f, 0.000480f, 0.000517f, 0.000614f, 0.000902f, 0.000712f, 0.000959f,
+ 0.000978f, 0.001100f, 0.001276f, 0.001461f, 0.001524f, 0.001651f, 0.002041f, 0.002350f, 0.002853f, 0.003433f, 0.003622f, 0.004166f,
+ 0.005043f, 0.006187f, 0.007534f, 0.009209f, 0.011551f, 0.014908f, 0.019012f, 0.025406f, 0.035461f, 0.051575f, 0.079651f, 0.131714f,
+ 0.230957f, 0.401367f, 0.607910f, 0.769531f, 0.863281f, 0.914062f, 0.942871f, 0.959961f, 0.970703f, 0.978027f, 0.982910f, 0.986816f,
+ 0.988770f, 0.991699f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000238f, 0.000355f, 0.000449f, 0.000462f, 0.000474f, 0.000477f,
+ 0.000482f, 0.000846f, 0.000726f, 0.000706f, 0.000953f, 0.000889f, 0.001012f, 0.001259f, 0.001390f, 0.001755f, 0.001658f, 0.002060f,
+ 0.002369f, 0.002539f, 0.003170f, 0.003460f, 0.004131f, 0.004993f, 0.006008f, 0.007431f, 0.009109f, 0.011444f, 0.014252f, 0.019058f,
+ 0.025574f, 0.036011f, 0.053162f, 0.083435f, 0.140381f, 0.250488f, 0.436035f, 0.645996f, 0.795898f, 0.880371f, 0.924316f, 0.949219f,
+ 0.963867f, 0.973145f, 0.980469f, 0.984863f, 0.988281f, 0.990723f, 0.997070f, 0.997559f, 0.997070f, 0.997559f, 0.997559f, 0.997070f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000239f,
+ 0.000306f, 0.000440f, 0.000437f, 0.000474f, 0.000478f, 0.000481f, 0.000523f, 0.000664f, 0.000731f, 0.000802f, 0.000935f, 0.001022f,
+ 0.001173f, 0.001314f, 0.001504f, 0.001831f, 0.001984f, 0.002317f, 0.002472f, 0.003199f, 0.003370f, 0.004189f, 0.004868f, 0.005924f,
+ 0.007320f, 0.008926f, 0.011421f, 0.014595f, 0.019119f, 0.026260f, 0.036987f, 0.055176f, 0.088440f, 0.152466f, 0.277832f, 0.479980f,
+ 0.686523f, 0.823242f, 0.895508f, 0.933105f, 0.955566f, 0.969238f, 0.976562f, 0.982422f, 0.986816f, 0.989746f, 0.996582f, 0.997070f,
+ 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000194f, 0.000280f, 0.000417f, 0.000448f, 0.000468f, 0.000476f, 0.000479f, 0.000490f,
+ 0.000845f, 0.000688f, 0.000740f, 0.000945f, 0.000998f, 0.001148f, 0.001266f, 0.001414f, 0.001475f, 0.001667f, 0.002262f, 0.002537f,
+ 0.003019f, 0.003288f, 0.004223f, 0.004768f, 0.005890f, 0.007259f, 0.009026f, 0.011360f, 0.014297f, 0.019272f, 0.026474f, 0.038116f,
+ 0.058197f, 0.095032f, 0.168945f, 0.313965f, 0.533203f, 0.731445f, 0.850098f, 0.911133f, 0.942871f, 0.961914f, 0.972656f, 0.979980f,
+ 0.984863f, 0.988770f, 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.000000f, 0.000000f, 0.000122f, 0.000000f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000187f, 0.000233f, 0.000141f, 0.000271f, 0.000341f,
+ 0.000380f, 0.000465f, 0.000473f, 0.000590f, 0.000605f, 0.000798f, 0.000847f, 0.000934f, 0.000946f, 0.000836f, 0.001009f, 0.001142f,
+ 0.001430f, 0.001495f, 0.001850f, 0.002111f, 0.002541f, 0.003035f, 0.003300f, 0.004139f, 0.004913f, 0.005718f, 0.007141f, 0.008934f,
+ 0.011475f, 0.014832f, 0.019653f, 0.027573f, 0.039917f, 0.062225f, 0.104919f, 0.192017f, 0.362305f, 0.594238f, 0.775879f, 0.875977f,
+ 0.925293f, 0.952148f, 0.967773f, 0.977051f, 0.983398f, 0.988281f, 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.996094f, 0.996582f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000238f, 0.000243f, 0.000238f, 0.000424f, 0.000453f, 0.000467f, 0.000475f, 0.000581f, 0.000689f, 0.000795f,
+ 0.000634f, 0.000823f, 0.001014f, 0.000900f, 0.001083f, 0.001485f, 0.001731f, 0.001851f, 0.002056f, 0.002373f, 0.002621f, 0.003445f,
+ 0.004082f, 0.004578f, 0.005821f, 0.007217f, 0.008881f, 0.011330f, 0.014778f, 0.020416f, 0.028473f, 0.042419f, 0.067993f, 0.118286f,
+ 0.225342f, 0.425293f, 0.661621f, 0.818848f, 0.899902f, 0.939453f, 0.960449f, 0.973145f, 0.980957f, 0.985840f, 0.995605f, 0.996094f,
+ 0.996094f, 0.996094f, 0.996094f, 0.996094f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000205f, 0.000224f, 0.000122f, 0.000231f, 0.000245f, 0.000411f, 0.000520f,
+ 0.000463f, 0.000470f, 0.000587f, 0.000361f, 0.000712f, 0.000694f, 0.000815f, 0.000978f, 0.001055f, 0.001105f, 0.001390f, 0.001438f,
+ 0.001705f, 0.001984f, 0.002333f, 0.002546f, 0.003408f, 0.003876f, 0.004627f, 0.005783f, 0.007198f, 0.008995f, 0.011383f, 0.015396f,
+ 0.020828f, 0.030029f, 0.045654f, 0.075439f, 0.137451f, 0.271973f, 0.503418f, 0.728516f, 0.857910f, 0.920410f, 0.951172f, 0.968262f,
+ 0.977539f, 0.984375f, 0.995117f, 0.995605f, 0.995605f, 0.995605f, 0.995605f, 0.995605f, 0.000000f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000173f, 0.000150f, 0.000278f, 0.000376f, 0.000427f, 0.000470f, 0.000352f, 0.000356f, 0.000475f, 0.000441f, 0.000709f, 0.000774f,
+ 0.000970f, 0.001013f, 0.000998f, 0.001193f, 0.001397f, 0.001677f, 0.001957f, 0.002268f, 0.002529f, 0.003353f, 0.003874f, 0.004555f,
+ 0.005692f, 0.007160f, 0.008987f, 0.011543f, 0.015732f, 0.021896f, 0.032135f, 0.050140f, 0.086548f, 0.165894f, 0.337646f, 0.593750f,
+ 0.791504f, 0.892090f, 0.938477f, 0.961914f, 0.974609f, 0.982422f, 0.994629f, 0.995117f, 0.995117f, 0.995605f, 0.995117f, 0.995605f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000187f, 0.000130f, 0.000231f, 0.000315f, 0.000298f, 0.000332f, 0.000343f,
+ 0.000465f, 0.000472f, 0.000579f, 0.000717f, 0.000839f, 0.000932f, 0.000817f, 0.001086f, 0.001090f, 0.001545f, 0.001735f, 0.001837f,
+ 0.002485f, 0.002493f, 0.003288f, 0.003828f, 0.004520f, 0.005833f, 0.007156f, 0.009193f, 0.012123f, 0.015839f, 0.022934f, 0.034760f,
+ 0.056488f, 0.102600f, 0.208862f, 0.427734f, 0.687988f, 0.846191f, 0.919434f, 0.952637f, 0.969727f, 0.979980f, 0.993652f, 0.994629f,
+ 0.994141f, 0.994629f, 0.994629f, 0.994629f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000133f,
+ 0.000141f, 0.000234f, 0.000300f, 0.000397f, 0.000436f, 0.000456f, 0.000465f, 0.000534f, 0.000663f, 0.000810f, 0.000796f, 0.000812f,
+ 0.001062f, 0.001237f, 0.001428f, 0.001565f, 0.001818f, 0.002182f, 0.002783f, 0.002943f, 0.003773f, 0.004715f, 0.005482f, 0.007195f,
+ 0.009285f, 0.012207f, 0.016922f, 0.024567f, 0.038483f, 0.066101f, 0.127563f, 0.274170f, 0.540527f, 0.774414f, 0.891113f, 0.940430f,
+ 0.965332f, 0.977539f, 0.993652f, 0.994141f, 0.994629f, 0.994141f, 0.994629f, 0.994141f, 0.000000f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000124f, 0.000116f, 0.000119f, 0.000125f, 0.000121f, 0.000197f, 0.000323f, 0.000418f, 0.000446f, 0.000433f,
+ 0.000467f, 0.000612f, 0.000710f, 0.000783f, 0.000911f, 0.000817f, 0.001161f, 0.001343f, 0.001514f, 0.001707f, 0.002081f, 0.002386f,
+ 0.002882f, 0.003609f, 0.004627f, 0.005478f, 0.007011f, 0.009384f, 0.012695f, 0.017960f, 0.026901f, 0.044067f, 0.080078f, 0.167114f,
+ 0.374023f, 0.664062f, 0.845703f, 0.923340f, 0.957031f, 0.974121f, 0.992676f, 0.993652f, 0.993164f, 0.993652f, 0.993652f, 0.993164f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000121f, 0.000121f, 0.000052f, 0.000039f, 0.000029f, 0.000054f, 0.000045f, 0.000118f,
+ 0.000128f, 0.000231f, 0.000387f, 0.000429f, 0.000446f, 0.000544f, 0.000539f, 0.000648f, 0.000749f, 0.000790f, 0.000978f, 0.001102f,
+ 0.001195f, 0.001501f, 0.001761f, 0.001978f, 0.002661f, 0.003170f, 0.003519f, 0.004509f, 0.005344f, 0.007004f, 0.009361f, 0.013229f,
+ 0.019196f, 0.030258f, 0.052002f, 0.102661f, 0.234131f, 0.511230f, 0.774902f, 0.898438f, 0.947754f, 0.970215f, 0.992188f, 0.992676f,
+ 0.993164f, 0.992676f, 0.992188f, 0.992188f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000070f, 0.000052f,
+ 0.000038f, 0.000030f, 0.000023f, 0.000060f, 0.000116f, 0.000121f, 0.000252f, 0.000337f, 0.000306f, 0.000435f, 0.000450f, 0.000562f,
+ 0.000584f, 0.000722f, 0.000858f, 0.000888f, 0.000969f, 0.001230f, 0.001429f, 0.001576f, 0.001827f, 0.002361f, 0.002863f, 0.003267f,
+ 0.004047f, 0.005394f, 0.007256f, 0.009781f, 0.013855f, 0.021439f, 0.035034f, 0.065063f, 0.141724f, 0.346680f, 0.665527f, 0.859375f,
+ 0.934570f, 0.965820f, 0.991699f, 0.991699f, 0.991699f, 0.992188f, 0.991699f, 0.991699f, 0.000000f, 0.000000f, 0.000122f, 0.000121f,
+ 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000099f, 0.000069f, 0.000051f, 0.000039f, 0.000030f, 0.000023f, 0.000024f, 0.000115f, 0.000103f, 0.000224f,
+ 0.000204f, 0.000339f, 0.000407f, 0.000437f, 0.000452f, 0.000489f, 0.000663f, 0.000821f, 0.000922f, 0.001004f, 0.001086f, 0.001279f,
+ 0.001554f, 0.001651f, 0.001997f, 0.002390f, 0.003136f, 0.004223f, 0.005508f, 0.007339f, 0.010094f, 0.014854f, 0.024048f, 0.042664f,
+ 0.087036f, 0.213867f, 0.516113f, 0.799805f, 0.915527f, 0.958984f, 0.990723f, 0.991211f, 0.990723f, 0.990723f, 0.990723f, 0.991211f,
+ 0.000000f, 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000096f, 0.000073f, 0.000053f, 0.000040f, 0.000031f,
+ 0.000025f, 0.000020f, 0.000017f, 0.000105f, 0.000110f, 0.000135f, 0.000235f, 0.000380f, 0.000462f, 0.000513f, 0.000556f, 0.000638f,
+ 0.000804f, 0.000868f, 0.000897f, 0.001002f, 0.001079f, 0.001246f, 0.001596f, 0.002153f, 0.002213f, 0.003094f, 0.004158f, 0.005306f,
+ 0.007458f, 0.010887f, 0.017166f, 0.028748f, 0.055176f, 0.128174f, 0.350586f, 0.703613f, 0.888184f, 0.951172f, 0.988770f, 0.989746f,
+ 0.989746f, 0.989746f, 0.989746f, 0.989746f, 0.000122f, 0.000120f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000101f, 0.000073f, 0.000057f, 0.000043f, 0.000033f, 0.000027f, 0.000021f, 0.000018f, 0.000105f, 0.000112f, 0.000111f, 0.000161f,
+ 0.000320f, 0.000390f, 0.000421f, 0.000438f, 0.000559f, 0.000665f, 0.000735f, 0.000719f, 0.000704f, 0.000887f, 0.001223f, 0.001384f,
+ 0.001867f, 0.002462f, 0.003216f, 0.004032f, 0.005367f, 0.007988f, 0.012054f, 0.019943f, 0.035919f, 0.078064f, 0.215332f, 0.566895f,
+ 0.845703f, 0.939941f, 0.987793f, 0.988281f, 0.987793f, 0.987793f, 0.988281f, 0.988281f, 0.000000f, 0.000120f, 0.000120f, 0.000120f,
+ 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f,
+ 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000103f, 0.000077f, 0.000061f, 0.000046f, 0.000037f, 0.000030f, 0.000023f,
+ 0.000019f, 0.000016f, 0.000039f, 0.000094f, 0.000181f, 0.000205f, 0.000350f, 0.000392f, 0.000423f, 0.000510f, 0.000619f, 0.000672f,
+ 0.000705f, 0.000632f, 0.000807f, 0.001038f, 0.001278f, 0.001894f, 0.002245f, 0.002758f, 0.003883f, 0.005863f, 0.008636f, 0.013672f,
+ 0.023880f, 0.048828f, 0.127441f, 0.400879f, 0.779297f, 0.925781f, 0.985840f, 0.986328f, 0.986328f, 0.985840f, 0.986328f, 0.986328f,
+ 0.000000f, 0.000100f, 0.000108f, 0.000118f, 0.000119f, 0.000118f, 0.000119f, 0.000119f, 0.000119f, 0.000119f, 0.000120f, 0.000120f,
+ 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000111f, 0.000086f,
+ 0.000066f, 0.000051f, 0.000041f, 0.000032f, 0.000026f, 0.000021f, 0.000018f, 0.000015f, 0.000086f, 0.000131f, 0.000190f, 0.000293f,
+ 0.000419f, 0.000481f, 0.000477f, 0.000438f, 0.000542f, 0.000564f, 0.000599f, 0.000700f, 0.000916f, 0.001122f, 0.001589f, 0.001997f,
+ 0.002678f, 0.004017f, 0.005814f, 0.009361f, 0.015808f, 0.031250f, 0.075989f, 0.250732f, 0.676758f, 0.904297f, 0.983887f, 0.983887f,
+ 0.983887f, 0.984375f, 0.984375f, 0.983887f, 0.000000f, 0.000000f, 0.000077f, 0.000112f, 0.000104f, 0.000115f, 0.000115f, 0.000117f,
+ 0.000117f, 0.000117f, 0.000118f, 0.000118f, 0.000118f, 0.000118f, 0.000119f, 0.000118f, 0.000119f, 0.000119f, 0.000119f, 0.000119f,
+ 0.000119f, 0.000119f, 0.000119f, 0.000119f, 0.000097f, 0.000076f, 0.000060f, 0.000046f, 0.000037f, 0.000030f, 0.000024f, 0.000020f,
+ 0.000045f, 0.000063f, 0.000091f, 0.000140f, 0.000202f, 0.000333f, 0.000305f, 0.000399f, 0.000462f, 0.000452f, 0.000535f, 0.000531f,
+ 0.000631f, 0.000866f, 0.000858f, 0.001307f, 0.001844f, 0.002823f, 0.004070f, 0.006264f, 0.010536f, 0.020035f, 0.045990f, 0.145996f,
+ 0.532227f, 0.874023f, 0.980957f, 0.981445f, 0.980957f, 0.981445f, 0.980957f, 0.981445f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000091f, 0.000103f, 0.000105f, 0.000106f, 0.000111f, 0.000113f, 0.000115f, 0.000114f, 0.000116f, 0.000116f, 0.000117f, 0.000117f,
+ 0.000117f, 0.000117f, 0.000117f, 0.000118f, 0.000118f, 0.000118f, 0.000118f, 0.000118f, 0.000118f, 0.000112f, 0.000084f, 0.000069f,
+ 0.000055f, 0.000043f, 0.000036f, 0.000028f, 0.000024f, 0.000020f, 0.000028f, 0.000039f, 0.000083f, 0.000141f, 0.000211f, 0.000262f,
+ 0.000413f, 0.000305f, 0.000370f, 0.000358f, 0.000489f, 0.000564f, 0.000599f, 0.000893f, 0.001084f, 0.001696f, 0.002697f, 0.004074f,
+ 0.006836f, 0.012878f, 0.028122f, 0.083496f, 0.364014f, 0.826660f, 0.976562f, 0.977539f, 0.977051f, 0.977539f, 0.978027f, 0.977051f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000015f, 0.000086f, 0.000077f, 0.000103f, 0.000100f, 0.000109f,
+ 0.000110f, 0.000111f, 0.000112f, 0.000112f, 0.000114f, 0.000114f, 0.000115f, 0.000115f, 0.000116f, 0.000115f, 0.000116f, 0.000116f,
+ 0.000117f, 0.000117f, 0.000117f, 0.000100f, 0.000079f, 0.000066f, 0.000053f, 0.000041f, 0.000035f, 0.000028f, 0.000023f, 0.000019f,
+ 0.000017f, 0.000034f, 0.000113f, 0.000174f, 0.000257f, 0.000325f, 0.000356f, 0.000324f, 0.000409f, 0.000454f, 0.000474f, 0.000659f,
+ 0.000778f, 0.001243f, 0.001575f, 0.002472f, 0.004105f, 0.007957f, 0.016800f, 0.047852f, 0.217529f, 0.755371f, 0.972656f, 0.973145f,
+ 0.973145f, 0.973145f, 0.973145f, 0.973145f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000028f, 0.000049f, 0.000085f, 0.000081f, 0.000096f, 0.000101f, 0.000104f, 0.000106f, 0.000108f, 0.000109f, 0.000110f,
+ 0.000111f, 0.000112f, 0.000113f, 0.000113f, 0.000114f, 0.000114f, 0.000114f, 0.000115f, 0.000115f, 0.000096f, 0.000078f, 0.000064f,
+ 0.000051f, 0.000043f, 0.000035f, 0.000029f, 0.000024f, 0.000020f, 0.000026f, 0.000055f, 0.000087f, 0.000135f, 0.000248f, 0.000261f,
+ 0.000274f, 0.000258f, 0.000296f, 0.000359f, 0.000474f, 0.000627f, 0.001012f, 0.001484f, 0.002630f, 0.004536f, 0.010277f, 0.027405f,
+ 0.119507f, 0.645996f, 0.966797f, 0.967285f, 0.967285f, 0.967285f, 0.966797f, 0.966797f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000014f, 0.000021f, 0.000065f, 0.000074f,
+ 0.000077f, 0.000091f, 0.000091f, 0.000099f, 0.000098f, 0.000103f, 0.000103f, 0.000106f, 0.000107f, 0.000108f, 0.000109f, 0.000110f,
+ 0.000111f, 0.000111f, 0.000112f, 0.000096f, 0.000079f, 0.000064f, 0.000053f, 0.000043f, 0.000036f, 0.000030f, 0.000024f, 0.000021f,
+ 0.000018f, 0.000028f, 0.000072f, 0.000125f, 0.000233f, 0.000243f, 0.000220f, 0.000258f, 0.000320f, 0.000353f, 0.000630f, 0.000932f,
+ 0.001324f, 0.002357f, 0.005402f, 0.014534f, 0.062561f, 0.493164f, 0.958008f, 0.958008f, 0.958984f, 0.958496f, 0.958496f, 0.958008f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000011f, 0.000035f, 0.000041f, 0.000064f, 0.000074f, 0.000081f, 0.000082f, 0.000090f,
+ 0.000092f, 0.000096f, 0.000099f, 0.000100f, 0.000102f, 0.000104f, 0.000105f, 0.000106f, 0.000107f, 0.000099f, 0.000082f, 0.000067f,
+ 0.000055f, 0.000047f, 0.000038f, 0.000031f, 0.000026f, 0.000022f, 0.000018f, 0.000037f, 0.000071f, 0.000111f, 0.000190f, 0.000204f,
+ 0.000153f, 0.000245f, 0.000299f, 0.000482f, 0.000790f, 0.001330f, 0.002619f, 0.007282f, 0.031097f, 0.318115f, 0.946289f, 0.946777f,
+ 0.946777f, 0.946777f, 0.946777f, 0.946777f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000008f, 0.000029f, 0.000044f, 0.000055f, 0.000063f, 0.000073f, 0.000075f, 0.000081f, 0.000087f, 0.000090f, 0.000092f,
+ 0.000094f, 0.000097f, 0.000099f, 0.000100f, 0.000087f, 0.000071f, 0.000059f, 0.000049f, 0.000040f, 0.000034f, 0.000028f, 0.000024f,
+ 0.000020f, 0.000016f, 0.000072f, 0.000114f, 0.000169f, 0.000147f, 0.000181f, 0.000246f, 0.000367f, 0.000626f, 0.001325f, 0.003117f,
+ 0.013741f, 0.167480f, 0.929688f, 0.929688f, 0.929688f, 0.930176f, 0.930664f, 0.930176f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000019f,
+ 0.000030f, 0.000044f, 0.000049f, 0.000062f, 0.000068f, 0.000072f, 0.000078f, 0.000081f, 0.000084f, 0.000087f, 0.000090f, 0.000079f,
+ 0.000065f, 0.000054f, 0.000044f, 0.000037f, 0.000030f, 0.000025f, 0.000021f, 0.000017f, 0.000052f, 0.000100f, 0.000132f, 0.000130f,
+ 0.000164f, 0.000297f, 0.000552f, 0.001273f, 0.005009f, 0.071594f, 0.903809f, 0.905273f, 0.904297f, 0.904785f, 0.904785f, 0.904785f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000013f, 0.000028f, 0.000036f,
+ 0.000045f, 0.000053f, 0.000060f, 0.000066f, 0.000071f, 0.000075f, 0.000071f, 0.000058f, 0.000049f, 0.000040f, 0.000033f, 0.000027f,
+ 0.000022f, 0.000018f, 0.000032f, 0.000078f, 0.000090f, 0.000123f, 0.000175f, 0.000441f, 0.001637f, 0.022537f, 0.865234f, 0.865234f,
+ 0.865723f, 0.865723f, 0.865234f, 0.864746f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000004f, 0.000017f, 0.000027f, 0.000036f, 0.000042f,
+ 0.000050f, 0.000056f, 0.000052f, 0.000043f, 0.000035f, 0.000028f, 0.000022f, 0.000018f, 0.000049f, 0.000055f, 0.000047f, 0.000108f,
+ 0.000342f, 0.004566f, 0.802734f, 0.803711f, 0.803711f, 0.803711f, 0.803711f, 0.803711f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000013f, 0.000022f, 0.000030f, 0.000033f, 0.000027f,
+ 0.000021f, 0.000015f, 0.000011f, 0.000031f, 0.000045f, 0.000449f, 0.708496f, 0.707520f, 0.708984f, 0.708496f, 0.707520f, 0.708008f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000004f, 0.000011f, 0.000006f, 0.000007f, 0.575195f, 0.575195f,
+ 0.575195f, 0.575195f, 0.575195f, 0.575195f,
+ },
+ {
+ 0.158813f, 0.632812f, 0.824219f, 0.891602f, 0.924805f, 0.942383f, 0.954102f, 0.962402f, 0.968262f, 0.972656f, 0.976074f, 0.978516f,
+ 0.980957f, 0.982910f, 0.984375f, 0.985840f, 0.986816f, 0.988770f, 0.989746f, 0.989746f, 0.990234f, 0.991211f, 0.992188f, 0.992676f,
+ 0.993652f, 0.993652f, 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.996582f,
+ 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.019775f, 0.115845f, 0.361084f, 0.642578f, 0.798340f, 0.872559f, 0.911133f, 0.933594f,
+ 0.947266f, 0.957031f, 0.964355f, 0.968750f, 0.973145f, 0.976562f, 0.979492f, 0.981934f, 0.983398f, 0.984863f, 0.986816f, 0.987793f,
+ 0.988770f, 0.989258f, 0.990234f, 0.991211f, 0.991699f, 0.992676f, 0.993164f, 0.993164f, 0.993652f, 0.994141f, 0.995117f, 0.995117f,
+ 0.995605f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.998047f,
+ 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.006638f, 0.031082f, 0.089661f, 0.222168f,
+ 0.448242f, 0.663086f, 0.794434f, 0.864258f, 0.903320f, 0.926758f, 0.942383f, 0.953613f, 0.961426f, 0.966797f, 0.972168f, 0.975586f,
+ 0.978027f, 0.980469f, 0.982910f, 0.984375f, 0.985840f, 0.986816f, 0.988281f, 0.989258f, 0.990234f, 0.991211f, 0.991699f, 0.992188f,
+ 0.992676f, 0.993164f, 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.996582f,
+ 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.003246f, 0.013367f, 0.032806f, 0.072754f, 0.152954f, 0.304199f, 0.509766f, 0.687500f, 0.797852f, 0.862305f, 0.900391f, 0.923828f,
+ 0.940430f, 0.950684f, 0.959473f, 0.965820f, 0.970703f, 0.974121f, 0.977051f, 0.979492f, 0.981934f, 0.983887f, 0.985840f, 0.987305f,
+ 0.987793f, 0.989258f, 0.989746f, 0.990723f, 0.991211f, 0.992188f, 0.992188f, 0.993164f, 0.993652f, 0.993652f, 0.994629f, 0.995117f,
+ 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f,
+ 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.002029f, 0.007267f, 0.016678f, 0.032288f, 0.061462f, 0.115051f, 0.215088f, 0.376709f,
+ 0.562988f, 0.712891f, 0.807617f, 0.865234f, 0.901367f, 0.923828f, 0.939453f, 0.950684f, 0.958984f, 0.965332f, 0.970215f, 0.974609f,
+ 0.977051f, 0.979980f, 0.981934f, 0.983887f, 0.984863f, 0.986328f, 0.988281f, 0.988770f, 0.989746f, 0.990723f, 0.990723f, 0.991699f,
+ 0.992188f, 0.992676f, 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.995117f, 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.996582f,
+ 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.001274f, 0.004623f, 0.009880f, 0.017792f,
+ 0.030869f, 0.052673f, 0.091431f, 0.160645f, 0.277832f, 0.442383f, 0.610352f, 0.737793f, 0.819824f, 0.870605f, 0.902832f, 0.924805f,
+ 0.939941f, 0.950195f, 0.958496f, 0.964844f, 0.970215f, 0.973633f, 0.977051f, 0.979980f, 0.981934f, 0.983398f, 0.984863f, 0.986328f,
+ 0.987305f, 0.988770f, 0.989746f, 0.990723f, 0.991211f, 0.992188f, 0.992676f, 0.993164f, 0.993652f, 0.994141f, 0.994629f, 0.995117f,
+ 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.998047f, 0.997559f, 0.998047f,
+ 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000943f, 0.003231f, 0.006317f, 0.011040f, 0.018051f, 0.029190f, 0.046936f, 0.075867f, 0.125488f, 0.210449f, 0.341797f, 0.503906f,
+ 0.652344f, 0.761230f, 0.832031f, 0.877441f, 0.906738f, 0.927734f, 0.940918f, 0.951172f, 0.959473f, 0.965820f, 0.970703f, 0.974121f,
+ 0.977051f, 0.979492f, 0.981934f, 0.983398f, 0.985352f, 0.987305f, 0.988281f, 0.989258f, 0.990234f, 0.990723f, 0.991211f, 0.992188f,
+ 0.992676f, 0.993164f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.996582f,
+ 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000731f, 0.001970f, 0.004425f, 0.007351f, 0.011627f, 0.017975f, 0.027161f, 0.041779f,
+ 0.064270f, 0.101685f, 0.164917f, 0.265137f, 0.406494f, 0.561035f, 0.692383f, 0.785156f, 0.845703f, 0.884766f, 0.911621f, 0.930176f,
+ 0.942871f, 0.953125f, 0.959961f, 0.965332f, 0.970703f, 0.974121f, 0.977539f, 0.979492f, 0.982422f, 0.983887f, 0.985840f, 0.987305f,
+ 0.987793f, 0.989258f, 0.990234f, 0.991211f, 0.991699f, 0.992676f, 0.993164f, 0.993652f, 0.994141f, 0.995117f, 0.995117f, 0.995605f,
+ 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.000487f, 0.001872f, 0.003445f, 0.005367f,
+ 0.008400f, 0.012405f, 0.017822f, 0.025345f, 0.037964f, 0.056244f, 0.085327f, 0.132935f, 0.210327f, 0.325928f, 0.471924f, 0.615723f,
+ 0.729004f, 0.807617f, 0.859375f, 0.894043f, 0.916504f, 0.934570f, 0.945801f, 0.955078f, 0.961426f, 0.967285f, 0.972168f, 0.975586f,
+ 0.978516f, 0.980957f, 0.982422f, 0.984863f, 0.985840f, 0.986816f, 0.988770f, 0.989258f, 0.990723f, 0.991699f, 0.992188f, 0.992676f,
+ 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.997070f, 0.997070f, 0.997559f,
+ 0.997559f, 0.998047f, 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000363f, 0.001300f, 0.002499f, 0.003784f, 0.006153f, 0.008896f, 0.012367f, 0.017227f, 0.024185f, 0.034241f, 0.049591f, 0.072754f,
+ 0.111023f, 0.170776f, 0.263184f, 0.391113f, 0.535645f, 0.665527f, 0.761719f, 0.828613f, 0.871582f, 0.902344f, 0.922852f, 0.937988f,
+ 0.949219f, 0.957031f, 0.963867f, 0.968750f, 0.972656f, 0.976074f, 0.979004f, 0.981445f, 0.983887f, 0.984863f, 0.986328f, 0.988281f,
+ 0.989258f, 0.990234f, 0.991211f, 0.991699f, 0.992676f, 0.993652f, 0.993652f, 0.994629f, 0.995117f, 0.995117f, 0.995605f, 0.996094f,
+ 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999023f, 0.999023f, 0.000365f, 0.000972f, 0.001874f, 0.003323f, 0.004669f, 0.006599f, 0.008919f, 0.012360f,
+ 0.016785f, 0.022720f, 0.031616f, 0.044647f, 0.064026f, 0.094055f, 0.141235f, 0.215332f, 0.323486f, 0.459229f, 0.597168f, 0.710449f,
+ 0.791992f, 0.847656f, 0.885254f, 0.910645f, 0.929199f, 0.941895f, 0.952148f, 0.960449f, 0.965332f, 0.970703f, 0.974121f, 0.977539f,
+ 0.979980f, 0.981934f, 0.984375f, 0.985840f, 0.987305f, 0.988770f, 0.989746f, 0.990723f, 0.991211f, 0.992188f, 0.993164f, 0.993164f,
+ 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.997559f,
+ 0.998047f, 0.998535f, 0.999023f, 0.999512f, 0.999023f, 0.999512f, 0.999512f, 0.999023f, 0.000244f, 0.000764f, 0.001375f, 0.002415f,
+ 0.003582f, 0.004963f, 0.006973f, 0.008751f, 0.011726f, 0.016113f, 0.021683f, 0.029129f, 0.040283f, 0.057098f, 0.081421f, 0.119019f,
+ 0.178955f, 0.268311f, 0.390625f, 0.528809f, 0.654785f, 0.751465f, 0.820312f, 0.866211f, 0.896973f, 0.919434f, 0.935547f, 0.946777f,
+ 0.956055f, 0.962402f, 0.968262f, 0.972168f, 0.975098f, 0.979004f, 0.981445f, 0.983398f, 0.985352f, 0.986816f, 0.987793f, 0.989258f,
+ 0.990723f, 0.991211f, 0.992188f, 0.992188f, 0.993164f, 0.993652f, 0.994629f, 0.995117f, 0.995117f, 0.995605f, 0.996094f, 0.996094f,
+ 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000122f, 0.000606f, 0.001439f, 0.002058f, 0.002743f, 0.004169f, 0.005035f, 0.006775f, 0.009010f, 0.012085f, 0.015717f, 0.020813f,
+ 0.027573f, 0.037170f, 0.050812f, 0.071472f, 0.102905f, 0.151489f, 0.225708f, 0.332031f, 0.463623f, 0.596191f, 0.707031f, 0.787598f,
+ 0.844238f, 0.881348f, 0.908691f, 0.927246f, 0.940918f, 0.951660f, 0.958984f, 0.965820f, 0.970215f, 0.974121f, 0.977539f, 0.979980f,
+ 0.982422f, 0.984375f, 0.985840f, 0.987305f, 0.988281f, 0.990234f, 0.990723f, 0.991699f, 0.992676f, 0.993164f, 0.993652f, 0.994141f,
+ 0.994629f, 0.995117f, 0.995605f, 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.000118f, 0.000846f, 0.001303f, 0.001593f, 0.002180f, 0.003050f, 0.004353f, 0.005577f,
+ 0.006954f, 0.009331f, 0.011826f, 0.015007f, 0.019653f, 0.025391f, 0.034119f, 0.046112f, 0.063660f, 0.090210f, 0.130737f, 0.192139f,
+ 0.283203f, 0.404053f, 0.537598f, 0.658691f, 0.753418f, 0.818848f, 0.865234f, 0.896973f, 0.918945f, 0.934570f, 0.946289f, 0.955566f,
+ 0.962402f, 0.967285f, 0.972168f, 0.976074f, 0.979004f, 0.981445f, 0.983398f, 0.985840f, 0.986816f, 0.988281f, 0.989258f, 0.990723f,
+ 0.991211f, 0.992676f, 0.993164f, 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.997070f,
+ 0.997559f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.000117f, 0.000487f, 0.000957f, 0.001514f,
+ 0.002008f, 0.002619f, 0.003424f, 0.004551f, 0.005836f, 0.007381f, 0.009155f, 0.011459f, 0.014366f, 0.018646f, 0.024017f, 0.031281f,
+ 0.042664f, 0.057068f, 0.080139f, 0.113586f, 0.165894f, 0.243164f, 0.352051f, 0.481934f, 0.610840f, 0.716309f, 0.793945f, 0.847168f,
+ 0.884766f, 0.910645f, 0.928223f, 0.942383f, 0.952637f, 0.959961f, 0.965332f, 0.970703f, 0.975098f, 0.978027f, 0.980957f, 0.983398f,
+ 0.984863f, 0.986816f, 0.988281f, 0.989258f, 0.990723f, 0.991211f, 0.992188f, 0.992676f, 0.993164f, 0.993652f, 0.994629f, 0.995117f,
+ 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.997559f, 0.997070f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000608f, 0.000952f, 0.001111f, 0.001660f, 0.002102f, 0.002817f, 0.003517f, 0.004742f, 0.005585f, 0.007080f, 0.008980f,
+ 0.011078f, 0.014191f, 0.017838f, 0.022614f, 0.029404f, 0.038940f, 0.052551f, 0.071533f, 0.100769f, 0.145020f, 0.211548f, 0.307373f,
+ 0.430176f, 0.561523f, 0.676758f, 0.764648f, 0.828613f, 0.872070f, 0.900879f, 0.921875f, 0.937012f, 0.948730f, 0.957520f, 0.964355f,
+ 0.969238f, 0.973633f, 0.977539f, 0.979980f, 0.982422f, 0.984863f, 0.986328f, 0.987793f, 0.988770f, 0.990234f, 0.991211f, 0.991699f,
+ 0.992676f, 0.993652f, 0.994141f, 0.994629f, 0.994629f, 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.997070f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.000244f, 0.000576f, 0.000727f, 0.001083f, 0.001186f, 0.001810f, 0.002558f, 0.002968f,
+ 0.003725f, 0.004913f, 0.005955f, 0.007011f, 0.008759f, 0.010918f, 0.013718f, 0.016953f, 0.021423f, 0.027832f, 0.035980f, 0.047913f,
+ 0.064941f, 0.090332f, 0.128174f, 0.185791f, 0.270264f, 0.384033f, 0.514160f, 0.638184f, 0.736328f, 0.807617f, 0.856934f, 0.891602f,
+ 0.915039f, 0.932617f, 0.945801f, 0.954102f, 0.962402f, 0.968262f, 0.972168f, 0.976562f, 0.979492f, 0.981445f, 0.983887f, 0.985840f,
+ 0.987305f, 0.988281f, 0.990234f, 0.990723f, 0.992188f, 0.992676f, 0.993164f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996094f,
+ 0.996582f, 0.997070f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.000000f, 0.000244f, 0.000708f, 0.000903f,
+ 0.001129f, 0.001511f, 0.002031f, 0.002565f, 0.003189f, 0.004112f, 0.004696f, 0.005989f, 0.006954f, 0.008865f, 0.010826f, 0.013031f,
+ 0.016312f, 0.020493f, 0.026154f, 0.033966f, 0.044159f, 0.059845f, 0.081665f, 0.114929f, 0.164917f, 0.239624f, 0.343750f, 0.469971f,
+ 0.598145f, 0.706055f, 0.786133f, 0.842773f, 0.881348f, 0.908203f, 0.927246f, 0.941895f, 0.952148f, 0.959961f, 0.966797f, 0.971191f,
+ 0.976074f, 0.978516f, 0.981445f, 0.983887f, 0.985352f, 0.987305f, 0.988281f, 0.989258f, 0.990723f, 0.991699f, 0.992676f, 0.993652f,
+ 0.994141f, 0.994629f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000122f, 0.000244f, 0.000482f, 0.000674f, 0.001029f, 0.001440f, 0.001746f, 0.002153f, 0.002804f, 0.003206f, 0.003859f, 0.004948f,
+ 0.005722f, 0.007206f, 0.008568f, 0.010498f, 0.012413f, 0.015793f, 0.019989f, 0.024826f, 0.031799f, 0.041382f, 0.054932f, 0.074768f,
+ 0.103882f, 0.147949f, 0.213867f, 0.308838f, 0.429932f, 0.560059f, 0.675781f, 0.765625f, 0.827148f, 0.871582f, 0.901367f, 0.923340f,
+ 0.937988f, 0.949707f, 0.958496f, 0.965820f, 0.969727f, 0.974609f, 0.978027f, 0.980469f, 0.983398f, 0.985840f, 0.986816f, 0.988281f,
+ 0.989258f, 0.990723f, 0.992188f, 0.992676f, 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996582f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.000244f, 0.000244f, 0.000363f, 0.000604f, 0.000834f, 0.001020f, 0.001548f, 0.001970f,
+ 0.002262f, 0.002548f, 0.003157f, 0.003914f, 0.004681f, 0.005962f, 0.006943f, 0.008263f, 0.010277f, 0.012589f, 0.015144f, 0.018951f,
+ 0.023788f, 0.030014f, 0.039001f, 0.051056f, 0.069092f, 0.094666f, 0.133911f, 0.192993f, 0.279053f, 0.394287f, 0.524414f, 0.646484f,
+ 0.743652f, 0.812988f, 0.861328f, 0.895020f, 0.917969f, 0.935547f, 0.947754f, 0.957520f, 0.963867f, 0.969238f, 0.974121f, 0.978027f,
+ 0.980469f, 0.983398f, 0.984863f, 0.987305f, 0.988281f, 0.989258f, 0.990723f, 0.991699f, 0.992676f, 0.993652f, 0.994141f, 0.994629f,
+ 0.995117f, 0.996094f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.000118f, 0.000244f, 0.000244f, 0.000584f,
+ 0.000837f, 0.000847f, 0.001295f, 0.001681f, 0.002018f, 0.002348f, 0.003014f, 0.003157f, 0.004124f, 0.004547f, 0.005432f, 0.006607f,
+ 0.008163f, 0.010071f, 0.011925f, 0.014786f, 0.017990f, 0.022659f, 0.028824f, 0.036621f, 0.047882f, 0.063477f, 0.087158f, 0.122559f,
+ 0.175781f, 0.254639f, 0.363037f, 0.492188f, 0.618652f, 0.722168f, 0.799805f, 0.852051f, 0.889648f, 0.914551f, 0.932129f, 0.944824f,
+ 0.955078f, 0.962891f, 0.968262f, 0.973633f, 0.977051f, 0.980469f, 0.982910f, 0.984863f, 0.987305f, 0.988281f, 0.990234f, 0.991211f,
+ 0.992188f, 0.993164f, 0.993652f, 0.994141f, 0.995117f, 0.995605f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000242f, 0.000243f, 0.000243f, 0.000481f, 0.000742f, 0.000843f, 0.000969f, 0.001348f, 0.001726f, 0.001791f, 0.002348f, 0.002853f,
+ 0.003452f, 0.003735f, 0.004757f, 0.005516f, 0.006744f, 0.008102f, 0.009621f, 0.011948f, 0.014320f, 0.017365f, 0.021698f, 0.027298f,
+ 0.034546f, 0.044891f, 0.059875f, 0.081055f, 0.112915f, 0.161255f, 0.234009f, 0.335693f, 0.462646f, 0.592285f, 0.702637f, 0.785645f,
+ 0.843750f, 0.883301f, 0.911133f, 0.929688f, 0.944336f, 0.954590f, 0.961914f, 0.967773f, 0.973633f, 0.977539f, 0.980469f, 0.982910f,
+ 0.985352f, 0.986816f, 0.988770f, 0.990234f, 0.991211f, 0.992188f, 0.993164f, 0.993652f, 0.994629f, 0.995117f, 0.998047f, 0.998535f,
+ 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.000100f, 0.000216f, 0.000243f, 0.000365f, 0.000517f, 0.000836f, 0.000964f, 0.001148f,
+ 0.001472f, 0.001674f, 0.001785f, 0.002438f, 0.002815f, 0.003490f, 0.004070f, 0.004837f, 0.005608f, 0.006630f, 0.008095f, 0.009483f,
+ 0.011551f, 0.013847f, 0.016953f, 0.020584f, 0.025879f, 0.033051f, 0.042664f, 0.055817f, 0.075500f, 0.105103f, 0.149536f, 0.216553f,
+ 0.312988f, 0.436768f, 0.568359f, 0.685059f, 0.773926f, 0.835449f, 0.878418f, 0.907227f, 0.927734f, 0.943359f, 0.953125f, 0.962402f,
+ 0.967285f, 0.973145f, 0.977051f, 0.980469f, 0.983887f, 0.985352f, 0.987305f, 0.989258f, 0.990234f, 0.991699f, 0.992188f, 0.993164f,
+ 0.994141f, 0.994629f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.000000f, 0.000150f, 0.000242f, 0.000364f,
+ 0.000441f, 0.000627f, 0.000916f, 0.000959f, 0.000968f, 0.001463f, 0.001671f, 0.002222f, 0.002577f, 0.002714f, 0.003479f, 0.004208f,
+ 0.004723f, 0.005669f, 0.006886f, 0.007637f, 0.009315f, 0.011154f, 0.013596f, 0.016205f, 0.019821f, 0.024963f, 0.031250f, 0.040375f,
+ 0.053009f, 0.071167f, 0.098511f, 0.139648f, 0.202271f, 0.293457f, 0.414307f, 0.548340f, 0.669434f, 0.762695f, 0.829590f, 0.874512f,
+ 0.904785f, 0.926758f, 0.941895f, 0.953613f, 0.961914f, 0.968262f, 0.973633f, 0.977539f, 0.980957f, 0.983398f, 0.985352f, 0.987793f,
+ 0.989258f, 0.990234f, 0.991211f, 0.992188f, 0.993164f, 0.994629f, 0.998047f, 0.998535f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
+ 0.000000f, 0.000231f, 0.000232f, 0.000363f, 0.000486f, 0.000503f, 0.000724f, 0.001104f, 0.001080f, 0.001271f, 0.001509f, 0.001976f,
+ 0.002247f, 0.002476f, 0.002895f, 0.003553f, 0.004192f, 0.004871f, 0.005623f, 0.006332f, 0.007584f, 0.008957f, 0.010849f, 0.012917f,
+ 0.015396f, 0.019226f, 0.023941f, 0.030060f, 0.038513f, 0.050385f, 0.067627f, 0.093140f, 0.131714f, 0.190674f, 0.278076f, 0.395752f,
+ 0.530273f, 0.655762f, 0.753906f, 0.823242f, 0.870605f, 0.903320f, 0.925781f, 0.941406f, 0.953125f, 0.961914f, 0.969238f, 0.974121f,
+ 0.978027f, 0.980957f, 0.983887f, 0.985840f, 0.988281f, 0.989258f, 0.990723f, 0.991699f, 0.992676f, 0.993652f, 0.997559f, 0.998047f,
+ 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.000000f, 0.000009f, 0.000116f, 0.000360f, 0.000484f, 0.000485f, 0.000536f, 0.000827f,
+ 0.000935f, 0.001077f, 0.001204f, 0.001561f, 0.001974f, 0.002136f, 0.002777f, 0.002964f, 0.003517f, 0.004192f, 0.004711f, 0.005505f,
+ 0.006283f, 0.007408f, 0.008713f, 0.010674f, 0.012375f, 0.015099f, 0.018677f, 0.022797f, 0.028732f, 0.036835f, 0.047974f, 0.064270f,
+ 0.088318f, 0.124634f, 0.180664f, 0.264893f, 0.380615f, 0.516113f, 0.645020f, 0.747559f, 0.819824f, 0.870117f, 0.902344f, 0.925293f,
+ 0.941406f, 0.953613f, 0.962402f, 0.969238f, 0.974121f, 0.978027f, 0.981934f, 0.984375f, 0.986328f, 0.988281f, 0.989746f, 0.990723f,
+ 0.992676f, 0.993164f, 0.997559f, 0.998047f, 0.998047f, 0.997559f, 0.998047f, 0.998047f, 0.000000f, 0.000000f, 0.000074f, 0.000337f,
+ 0.000481f, 0.000484f, 0.000485f, 0.000556f, 0.000823f, 0.001143f, 0.001187f, 0.001391f, 0.001781f, 0.002155f, 0.002327f, 0.002760f,
+ 0.003008f, 0.003433f, 0.004101f, 0.004681f, 0.005417f, 0.006443f, 0.007393f, 0.008560f, 0.010345f, 0.012177f, 0.014496f, 0.018127f,
+ 0.022125f, 0.027740f, 0.035736f, 0.046173f, 0.061920f, 0.084717f, 0.119324f, 0.173218f, 0.254883f, 0.368652f, 0.505371f, 0.637207f,
+ 0.742676f, 0.818359f, 0.868164f, 0.902832f, 0.925781f, 0.942383f, 0.953613f, 0.963379f, 0.970215f, 0.975098f, 0.979004f, 0.982422f,
+ 0.984863f, 0.986328f, 0.988770f, 0.990723f, 0.991699f, 0.992676f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000188f, 0.000358f, 0.000481f, 0.000484f, 0.000484f, 0.000704f, 0.000852f, 0.001165f, 0.001316f,
+ 0.001500f, 0.001685f, 0.001933f, 0.002079f, 0.002720f, 0.003136f, 0.003727f, 0.003723f, 0.004513f, 0.005207f, 0.006275f, 0.007236f,
+ 0.008453f, 0.010056f, 0.011848f, 0.014191f, 0.017212f, 0.021652f, 0.026978f, 0.034241f, 0.044678f, 0.058990f, 0.081421f, 0.114929f,
+ 0.167236f, 0.247070f, 0.360596f, 0.498291f, 0.632812f, 0.741211f, 0.818359f, 0.869629f, 0.903809f, 0.927734f, 0.943848f, 0.955566f,
+ 0.964355f, 0.970703f, 0.976074f, 0.979492f, 0.982422f, 0.985840f, 0.987793f, 0.989258f, 0.990723f, 0.992188f, 0.997070f, 0.997559f,
+ 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.000000f, 0.000000f, 0.000121f, 0.000120f, 0.000288f, 0.000357f, 0.000479f, 0.000483f,
+ 0.000535f, 0.000711f, 0.000862f, 0.001256f, 0.001351f, 0.001502f, 0.001719f, 0.002146f, 0.002037f, 0.002653f, 0.003248f, 0.003222f,
+ 0.003820f, 0.004456f, 0.005173f, 0.006008f, 0.007072f, 0.008247f, 0.009758f, 0.011826f, 0.013771f, 0.016861f, 0.020935f, 0.025986f,
+ 0.032928f, 0.043030f, 0.057587f, 0.078918f, 0.111755f, 0.162964f, 0.241943f, 0.355713f, 0.495117f, 0.632324f, 0.742676f, 0.819336f,
+ 0.871582f, 0.905762f, 0.929688f, 0.945312f, 0.957031f, 0.965332f, 0.972168f, 0.976562f, 0.980957f, 0.983887f, 0.986328f, 0.988281f,
+ 0.990234f, 0.991699f, 0.997070f, 0.997559f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.000000f, 0.000000f, 0.000000f, 0.000121f,
+ 0.000200f, 0.000412f, 0.000471f, 0.000599f, 0.000598f, 0.000596f, 0.000805f, 0.001099f, 0.001334f, 0.001417f, 0.001456f, 0.001723f,
+ 0.002102f, 0.002283f, 0.002579f, 0.003208f, 0.003233f, 0.003740f, 0.004574f, 0.005287f, 0.006012f, 0.006870f, 0.008018f, 0.009354f,
+ 0.011208f, 0.013542f, 0.016495f, 0.020370f, 0.025284f, 0.032410f, 0.041901f, 0.056183f, 0.077087f, 0.109558f, 0.160278f, 0.239380f,
+ 0.354492f, 0.496094f, 0.635254f, 0.747070f, 0.823730f, 0.875488f, 0.908691f, 0.931641f, 0.947266f, 0.958008f, 0.966309f, 0.972656f,
+ 0.978027f, 0.981445f, 0.984863f, 0.986816f, 0.989258f, 0.990723f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997070f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000117f, 0.000237f, 0.000239f, 0.000430f, 0.000465f, 0.000599f, 0.000724f, 0.000716f, 0.000815f,
+ 0.000981f, 0.001334f, 0.001299f, 0.001545f, 0.001617f, 0.001935f, 0.002110f, 0.002501f, 0.002823f, 0.003408f, 0.003790f, 0.004467f,
+ 0.005112f, 0.005848f, 0.006718f, 0.007942f, 0.009514f, 0.011093f, 0.013092f, 0.015945f, 0.019608f, 0.024689f, 0.031494f, 0.041046f,
+ 0.054901f, 0.075989f, 0.108032f, 0.158936f, 0.239014f, 0.356201f, 0.500488f, 0.642090f, 0.753418f, 0.830566f, 0.880859f, 0.912598f,
+ 0.935059f, 0.950195f, 0.960449f, 0.968262f, 0.975098f, 0.979980f, 0.982910f, 0.985352f, 0.987793f, 0.990234f, 0.996582f, 0.997070f,
+ 0.997070f, 0.996582f, 0.997070f, 0.996582f, 0.000000f, 0.000000f, 0.000000f, 0.000117f, 0.000120f, 0.000121f, 0.000312f, 0.000407f,
+ 0.000707f, 0.000597f, 0.000648f, 0.000720f, 0.000941f, 0.001008f, 0.001229f, 0.001289f, 0.001423f, 0.001726f, 0.002060f, 0.002211f,
+ 0.002506f, 0.002985f, 0.003036f, 0.003683f, 0.004066f, 0.004833f, 0.005592f, 0.006611f, 0.007675f, 0.008965f, 0.010811f, 0.012833f,
+ 0.015854f, 0.019485f, 0.024429f, 0.031036f, 0.040466f, 0.054108f, 0.074890f, 0.107727f, 0.159180f, 0.241699f, 0.362549f, 0.510742f,
+ 0.653809f, 0.763184f, 0.837891f, 0.887207f, 0.917480f, 0.938477f, 0.953613f, 0.962891f, 0.970703f, 0.976562f, 0.980469f, 0.984375f,
+ 0.986816f, 0.988770f, 0.996094f, 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.000000f, 0.000000f, 0.000000f, 0.000117f,
+ 0.000118f, 0.000120f, 0.000129f, 0.000434f, 0.000536f, 0.000613f, 0.000716f, 0.000799f, 0.000720f, 0.000768f, 0.001024f, 0.001202f,
+ 0.001501f, 0.001530f, 0.001568f, 0.001897f, 0.002190f, 0.002502f, 0.002893f, 0.003105f, 0.003551f, 0.004021f, 0.004791f, 0.005405f,
+ 0.006313f, 0.007309f, 0.008720f, 0.010712f, 0.012657f, 0.015472f, 0.018982f, 0.023697f, 0.030579f, 0.040009f, 0.054138f, 0.075012f,
+ 0.107849f, 0.161377f, 0.247070f, 0.373047f, 0.525391f, 0.667969f, 0.776855f, 0.847656f, 0.894043f, 0.923340f, 0.942871f, 0.956543f,
+ 0.965820f, 0.973145f, 0.978027f, 0.982422f, 0.985352f, 0.987793f, 0.996094f, 0.996094f, 0.996582f, 0.996094f, 0.996582f, 0.996094f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000081f, 0.000116f, 0.000227f, 0.000360f, 0.000366f, 0.000642f, 0.000691f, 0.000711f,
+ 0.000806f, 0.000721f, 0.000925f, 0.000947f, 0.001155f, 0.001478f, 0.001554f, 0.001612f, 0.001929f, 0.002354f, 0.002291f, 0.002712f,
+ 0.003029f, 0.003441f, 0.003876f, 0.004452f, 0.005276f, 0.006256f, 0.007149f, 0.008568f, 0.010040f, 0.012566f, 0.015160f, 0.018677f,
+ 0.023376f, 0.030411f, 0.039642f, 0.053986f, 0.075134f, 0.109436f, 0.165527f, 0.255127f, 0.387695f, 0.544434f, 0.686523f, 0.791016f,
+ 0.858398f, 0.901367f, 0.928711f, 0.947266f, 0.959961f, 0.968262f, 0.975098f, 0.980469f, 0.983887f, 0.987305f, 0.995605f, 0.996094f,
+ 0.996094f, 0.996094f, 0.996094f, 0.996094f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000088f, 0.000085f, 0.000338f, 0.000351f,
+ 0.000359f, 0.000480f, 0.000539f, 0.000698f, 0.000798f, 0.000793f, 0.000834f, 0.000891f, 0.000941f, 0.001143f, 0.001422f, 0.001512f,
+ 0.001833f, 0.001955f, 0.002144f, 0.002426f, 0.002716f, 0.003262f, 0.003572f, 0.003860f, 0.004456f, 0.005173f, 0.006191f, 0.006939f,
+ 0.008545f, 0.010162f, 0.012375f, 0.014969f, 0.018555f, 0.023376f, 0.029953f, 0.039673f, 0.054077f, 0.076477f, 0.112000f, 0.171509f,
+ 0.268066f, 0.408203f, 0.569336f, 0.709961f, 0.808105f, 0.872070f, 0.910645f, 0.935059f, 0.951660f, 0.963379f, 0.971680f, 0.977539f,
+ 0.982422f, 0.985840f, 0.995117f, 0.995605f, 0.995605f, 0.995605f, 0.995605f, 0.995605f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000122f, 0.000116f, 0.000340f, 0.000353f, 0.000349f, 0.000480f, 0.000576f, 0.000668f, 0.000700f, 0.000818f, 0.000833f,
+ 0.000787f, 0.001125f, 0.001110f, 0.001407f, 0.001489f, 0.001563f, 0.001804f, 0.002073f, 0.002285f, 0.002409f, 0.002985f, 0.003052f,
+ 0.003853f, 0.004433f, 0.005100f, 0.006046f, 0.007046f, 0.008156f, 0.009827f, 0.012138f, 0.014740f, 0.018311f, 0.023071f, 0.029770f,
+ 0.040009f, 0.054810f, 0.078003f, 0.116150f, 0.180176f, 0.284668f, 0.434570f, 0.599121f, 0.735352f, 0.827637f, 0.885254f, 0.919922f,
+ 0.941895f, 0.957031f, 0.967285f, 0.975098f, 0.979980f, 0.984375f, 0.995117f, 0.995117f, 0.995117f, 0.995117f, 0.995117f, 0.995605f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000000f, 0.000122f, 0.000235f, 0.000320f, 0.000351f, 0.000353f, 0.000478f,
+ 0.000602f, 0.000651f, 0.000793f, 0.000706f, 0.000816f, 0.000814f, 0.000898f, 0.001062f, 0.001259f, 0.001441f, 0.001564f, 0.001772f,
+ 0.001743f, 0.002134f, 0.002512f, 0.002668f, 0.003193f, 0.003746f, 0.004341f, 0.004902f, 0.005909f, 0.006920f, 0.008125f, 0.009605f,
+ 0.011711f, 0.014549f, 0.018280f, 0.023163f, 0.030334f, 0.040375f, 0.055939f, 0.080566f, 0.122070f, 0.192383f, 0.307373f, 0.467773f,
+ 0.634277f, 0.763184f, 0.846191f, 0.897461f, 0.928711f, 0.948730f, 0.962402f, 0.971680f, 0.978516f, 0.982422f, 0.994141f, 0.994629f,
+ 0.994629f, 0.995117f, 0.995117f, 0.995117f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000185f, 0.000190f,
+ 0.000272f, 0.000281f, 0.000464f, 0.000466f, 0.000476f, 0.000521f, 0.000654f, 0.000680f, 0.000699f, 0.000815f, 0.000814f, 0.000890f,
+ 0.001110f, 0.001283f, 0.001311f, 0.001590f, 0.001727f, 0.001801f, 0.002020f, 0.002312f, 0.002897f, 0.003267f, 0.003592f, 0.004143f,
+ 0.004810f, 0.005844f, 0.006618f, 0.008018f, 0.009697f, 0.011597f, 0.014374f, 0.018127f, 0.023056f, 0.030258f, 0.041107f, 0.057373f,
+ 0.084045f, 0.129517f, 0.208618f, 0.337646f, 0.508789f, 0.673828f, 0.793457f, 0.866211f, 0.911133f, 0.938965f, 0.955566f, 0.967285f,
+ 0.975586f, 0.980469f, 0.994141f, 0.994141f, 0.994629f, 0.994629f, 0.994629f, 0.994141f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000226f, 0.000431f, 0.000456f, 0.000467f, 0.000352f, 0.000496f, 0.000588f,
+ 0.000891f, 0.000771f, 0.000803f, 0.000947f, 0.000972f, 0.001078f, 0.001033f, 0.001279f, 0.001436f, 0.001483f, 0.001831f, 0.002033f,
+ 0.002264f, 0.002710f, 0.002996f, 0.003582f, 0.004032f, 0.004665f, 0.005592f, 0.006527f, 0.007820f, 0.009323f, 0.011581f, 0.014328f,
+ 0.018219f, 0.023239f, 0.030777f, 0.042084f, 0.059448f, 0.089233f, 0.140869f, 0.230713f, 0.375977f, 0.556641f, 0.715332f, 0.822266f,
+ 0.885742f, 0.924316f, 0.947266f, 0.962402f, 0.972656f, 0.978516f, 0.993164f, 0.994141f, 0.994141f, 0.994141f, 0.994141f, 0.994141f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000283f, 0.000229f, 0.000425f,
+ 0.000303f, 0.000336f, 0.000469f, 0.000474f, 0.000728f, 0.000663f, 0.000883f, 0.000695f, 0.000679f, 0.000858f, 0.000919f, 0.000980f,
+ 0.001218f, 0.001330f, 0.001665f, 0.001637f, 0.002054f, 0.002335f, 0.002508f, 0.002880f, 0.003323f, 0.004055f, 0.004730f, 0.005463f,
+ 0.006485f, 0.007740f, 0.009293f, 0.011566f, 0.014175f, 0.017944f, 0.023346f, 0.031433f, 0.043304f, 0.063232f, 0.096313f, 0.155518f,
+ 0.260498f, 0.424561f, 0.611328f, 0.758789f, 0.852051f, 0.904785f, 0.937012f, 0.955566f, 0.968262f, 0.977051f, 0.992676f, 0.992676f,
+ 0.993164f, 0.993652f, 0.993164f, 0.993652f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000256f, 0.000216f, 0.000406f, 0.000426f, 0.000457f, 0.000453f, 0.000472f, 0.000651f, 0.000593f, 0.000876f,
+ 0.000571f, 0.000590f, 0.000819f, 0.000809f, 0.001000f, 0.001224f, 0.001293f, 0.001637f, 0.001790f, 0.001863f, 0.002298f, 0.002550f,
+ 0.002995f, 0.003201f, 0.003933f, 0.004677f, 0.005360f, 0.006447f, 0.007763f, 0.009377f, 0.011330f, 0.014420f, 0.017944f, 0.023560f,
+ 0.032196f, 0.045380f, 0.067383f, 0.105469f, 0.175659f, 0.301025f, 0.484375f, 0.669922f, 0.801270f, 0.879395f, 0.922852f, 0.948242f,
+ 0.963379f, 0.974121f, 0.992188f, 0.992188f, 0.992188f, 0.993164f, 0.992188f, 0.993164f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000230f, 0.000206f, 0.000355f, 0.000335f, 0.000305f,
+ 0.000461f, 0.000565f, 0.000474f, 0.000429f, 0.000520f, 0.000758f, 0.000777f, 0.000668f, 0.000821f, 0.001013f, 0.001089f, 0.001325f,
+ 0.001570f, 0.001787f, 0.001707f, 0.002037f, 0.002457f, 0.002892f, 0.003359f, 0.003881f, 0.004616f, 0.005203f, 0.006336f, 0.007477f,
+ 0.009048f, 0.011345f, 0.014015f, 0.018356f, 0.024307f, 0.033661f, 0.048279f, 0.073303f, 0.118774f, 0.204102f, 0.354492f, 0.554688f,
+ 0.729492f, 0.840332f, 0.902832f, 0.937988f, 0.958008f, 0.971191f, 0.991699f, 0.992188f, 0.992188f, 0.991699f, 0.992188f, 0.991699f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000205f, 0.000248f, 0.000213f, 0.000344f, 0.000437f, 0.000351f, 0.000352f, 0.000359f, 0.000389f, 0.000482f, 0.000676f, 0.000560f,
+ 0.000806f, 0.000813f, 0.000927f, 0.001230f, 0.001392f, 0.001526f, 0.001627f, 0.001629f, 0.002047f, 0.002321f, 0.002661f, 0.003317f,
+ 0.003752f, 0.004406f, 0.005119f, 0.005936f, 0.007156f, 0.009003f, 0.010941f, 0.013985f, 0.018539f, 0.025131f, 0.035248f, 0.051880f,
+ 0.081543f, 0.137207f, 0.244507f, 0.424561f, 0.632812f, 0.787598f, 0.876465f, 0.924805f, 0.951172f, 0.966797f, 0.990723f, 0.991211f,
+ 0.991211f, 0.991211f, 0.991211f, 0.991211f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000224f, 0.000171f, 0.000276f, 0.000278f, 0.000288f, 0.000329f, 0.000365f,
+ 0.000459f, 0.000483f, 0.000626f, 0.000716f, 0.000767f, 0.000793f, 0.000800f, 0.000897f, 0.000976f, 0.001156f, 0.001322f, 0.001427f,
+ 0.001799f, 0.001997f, 0.002256f, 0.002773f, 0.002806f, 0.003515f, 0.004040f, 0.004910f, 0.005730f, 0.007046f, 0.008858f, 0.011124f,
+ 0.014374f, 0.018982f, 0.026123f, 0.037659f, 0.057129f, 0.093445f, 0.164062f, 0.301514f, 0.511230f, 0.712402f, 0.838867f, 0.906738f,
+ 0.942383f, 0.961914f, 0.989746f, 0.990234f, 0.989746f, 0.990234f, 0.989746f, 0.990234f, 0.000000f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000173f, 0.000140f,
+ 0.000138f, 0.000232f, 0.000291f, 0.000318f, 0.000338f, 0.000346f, 0.000422f, 0.000368f, 0.000680f, 0.000722f, 0.000765f, 0.000766f,
+ 0.000803f, 0.001069f, 0.001103f, 0.001185f, 0.001611f, 0.001593f, 0.001939f, 0.002211f, 0.002569f, 0.003008f, 0.003239f, 0.003952f,
+ 0.004681f, 0.005630f, 0.007008f, 0.008720f, 0.011200f, 0.014587f, 0.019653f, 0.027527f, 0.040955f, 0.064514f, 0.110413f, 0.204224f,
+ 0.381104f, 0.609863f, 0.785645f, 0.881836f, 0.931152f, 0.956543f, 0.988770f, 0.989258f, 0.989258f, 0.989258f, 0.989258f, 0.988770f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000121f,
+ 0.000121f, 0.000123f, 0.000121f, 0.000090f, 0.000102f, 0.000063f, 0.000156f, 0.000248f, 0.000333f, 0.000321f, 0.000431f, 0.000392f,
+ 0.000349f, 0.000434f, 0.000674f, 0.000741f, 0.000776f, 0.000936f, 0.000888f, 0.001049f, 0.001179f, 0.001326f, 0.001686f, 0.001732f,
+ 0.002050f, 0.002150f, 0.002453f, 0.003016f, 0.003601f, 0.004444f, 0.005692f, 0.006741f, 0.008324f, 0.011093f, 0.014709f, 0.020752f,
+ 0.029800f, 0.045654f, 0.074951f, 0.136108f, 0.264893f, 0.486816f, 0.710938f, 0.848145f, 0.916992f, 0.950684f, 0.987305f, 0.987793f,
+ 0.987793f, 0.988281f, 0.987793f, 0.987793f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000100f, 0.000049f, 0.000039f, 0.000125f, 0.000121f,
+ 0.000184f, 0.000280f, 0.000366f, 0.000392f, 0.000333f, 0.000341f, 0.000477f, 0.000597f, 0.000607f, 0.000747f, 0.000767f, 0.000961f,
+ 0.000936f, 0.001056f, 0.001306f, 0.001388f, 0.001633f, 0.001836f, 0.001997f, 0.002348f, 0.002878f, 0.003332f, 0.004131f, 0.005165f,
+ 0.006519f, 0.008568f, 0.011444f, 0.015419f, 0.021881f, 0.032532f, 0.052032f, 0.091187f, 0.177246f, 0.357910f, 0.610352f, 0.800781f,
+ 0.897461f, 0.942871f, 0.985352f, 0.986328f, 0.986816f, 0.986328f, 0.986328f, 0.986328f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000099f, 0.000076f,
+ 0.000060f, 0.000108f, 0.000040f, 0.000127f, 0.000127f, 0.000121f, 0.000200f, 0.000265f, 0.000360f, 0.000316f, 0.000428f, 0.000455f,
+ 0.000456f, 0.000583f, 0.000682f, 0.000750f, 0.000773f, 0.000824f, 0.000937f, 0.001220f, 0.001262f, 0.001384f, 0.001622f, 0.001862f,
+ 0.002157f, 0.002817f, 0.003414f, 0.004082f, 0.004993f, 0.006561f, 0.008560f, 0.011696f, 0.016022f, 0.023529f, 0.036469f, 0.062286f,
+ 0.117126f, 0.245605f, 0.487549f, 0.732910f, 0.870605f, 0.933105f, 0.983887f, 0.984863f, 0.984863f, 0.984863f, 0.984375f, 0.984863f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000096f, 0.000075f, 0.000061f, 0.000083f, 0.000096f, 0.000034f, 0.000101f, 0.000121f, 0.000137f,
+ 0.000211f, 0.000324f, 0.000381f, 0.000373f, 0.000420f, 0.000472f, 0.000494f, 0.000690f, 0.000793f, 0.000768f, 0.000853f, 0.000867f,
+ 0.000978f, 0.001003f, 0.001145f, 0.001416f, 0.001888f, 0.002125f, 0.002491f, 0.003004f, 0.003864f, 0.005028f, 0.006500f, 0.008682f,
+ 0.011856f, 0.016922f, 0.025757f, 0.042603f, 0.078247f, 0.161743f, 0.358398f, 0.641602f, 0.833496f, 0.920410f, 0.981934f, 0.982910f,
+ 0.982910f, 0.982910f, 0.982910f, 0.982910f, 0.000122f, 0.000000f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000120f, 0.000097f, 0.000078f, 0.000062f, 0.000051f,
+ 0.000043f, 0.000072f, 0.000030f, 0.000060f, 0.000109f, 0.000206f, 0.000216f, 0.000333f, 0.000347f, 0.000395f, 0.000415f, 0.000458f,
+ 0.000568f, 0.000664f, 0.000709f, 0.000598f, 0.000781f, 0.000628f, 0.001053f, 0.001046f, 0.001179f, 0.001579f, 0.001649f, 0.002386f,
+ 0.002857f, 0.003727f, 0.004894f, 0.006363f, 0.008789f, 0.012314f, 0.018616f, 0.029709f, 0.052429f, 0.105652f, 0.244385f, 0.524414f,
+ 0.782715f, 0.904785f, 0.979492f, 0.980957f, 0.979980f, 0.979980f, 0.980469f, 0.980469f, 0.000000f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f,
+ 0.000120f, 0.000097f, 0.000079f, 0.000065f, 0.000054f, 0.000045f, 0.000073f, 0.000032f, 0.000089f, 0.000038f, 0.000134f, 0.000138f,
+ 0.000211f, 0.000333f, 0.000370f, 0.000400f, 0.000420f, 0.000496f, 0.000566f, 0.000494f, 0.000584f, 0.000714f, 0.000708f, 0.000843f,
+ 0.001056f, 0.001019f, 0.001327f, 0.001812f, 0.001908f, 0.002798f, 0.003479f, 0.004578f, 0.006195f, 0.008881f, 0.012901f, 0.020599f,
+ 0.035339f, 0.069214f, 0.159058f, 0.394531f, 0.709961f, 0.882812f, 0.977051f, 0.978027f, 0.977539f, 0.976562f, 0.977051f, 0.977539f,
+ 0.000000f, 0.000121f, 0.000120f, 0.000121f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f,
+ 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000119f, 0.000120f, 0.000102f, 0.000084f, 0.000071f, 0.000059f, 0.000048f, 0.000041f,
+ 0.000035f, 0.000062f, 0.000026f, 0.000098f, 0.000103f, 0.000136f, 0.000230f, 0.000327f, 0.000356f, 0.000338f, 0.000387f, 0.000499f,
+ 0.000577f, 0.000627f, 0.000669f, 0.000611f, 0.000699f, 0.000904f, 0.000893f, 0.001340f, 0.001666f, 0.002068f, 0.002377f, 0.003105f,
+ 0.004345f, 0.006218f, 0.009178f, 0.013962f, 0.024170f, 0.045441f, 0.101868f, 0.271973f, 0.612305f, 0.853027f, 0.973145f, 0.974121f,
+ 0.973633f, 0.974121f, 0.973633f, 0.974121f, 0.000121f, 0.000120f, 0.000119f, 0.000120f, 0.000119f, 0.000119f, 0.000119f, 0.000119f,
+ 0.000119f, 0.000119f, 0.000119f, 0.000119f, 0.000119f, 0.000119f, 0.000119f, 0.000119f, 0.000119f, 0.000119f, 0.000119f, 0.000108f,
+ 0.000091f, 0.000075f, 0.000063f, 0.000053f, 0.000045f, 0.000039f, 0.000034f, 0.000040f, 0.000090f, 0.000068f, 0.000104f, 0.000127f,
+ 0.000220f, 0.000302f, 0.000412f, 0.000316f, 0.000444f, 0.000495f, 0.000428f, 0.000510f, 0.000463f, 0.000614f, 0.000726f, 0.000719f,
+ 0.001164f, 0.001533f, 0.001707f, 0.002079f, 0.002848f, 0.004189f, 0.006142f, 0.009491f, 0.016113f, 0.029343f, 0.064758f, 0.175415f,
+ 0.490723f, 0.812012f, 0.968750f, 0.969727f, 0.969238f, 0.969727f, 0.969727f, 0.969727f, 0.000000f, 0.000117f, 0.000117f, 0.000115f,
+ 0.000118f, 0.000118f, 0.000117f, 0.000117f, 0.000117f, 0.000117f, 0.000118f, 0.000117f, 0.000117f, 0.000118f, 0.000117f, 0.000117f,
+ 0.000117f, 0.000117f, 0.000117f, 0.000118f, 0.000117f, 0.000100f, 0.000082f, 0.000070f, 0.000060f, 0.000051f, 0.000043f, 0.000038f,
+ 0.000033f, 0.000053f, 0.000027f, 0.000089f, 0.000105f, 0.000137f, 0.000227f, 0.000277f, 0.000293f, 0.000284f, 0.000300f, 0.000420f,
+ 0.000367f, 0.000473f, 0.000467f, 0.000555f, 0.000625f, 0.000870f, 0.001177f, 0.001563f, 0.001982f, 0.002714f, 0.004051f, 0.006134f,
+ 0.010384f, 0.018967f, 0.040314f, 0.108887f, 0.358643f, 0.755859f, 0.962891f, 0.963867f, 0.964355f, 0.963867f, 0.963379f, 0.963379f,
+ 0.000000f, 0.000000f, 0.000098f, 0.000103f, 0.000111f, 0.000112f, 0.000112f, 0.000114f, 0.000113f, 0.000115f, 0.000114f, 0.000115f,
+ 0.000115f, 0.000115f, 0.000115f, 0.000115f, 0.000116f, 0.000116f, 0.000116f, 0.000116f, 0.000116f, 0.000116f, 0.000109f, 0.000094f,
+ 0.000078f, 0.000067f, 0.000058f, 0.000050f, 0.000043f, 0.000038f, 0.000033f, 0.000054f, 0.000025f, 0.000078f, 0.000091f, 0.000173f,
+ 0.000203f, 0.000252f, 0.000331f, 0.000277f, 0.000264f, 0.000407f, 0.000342f, 0.000444f, 0.000470f, 0.000542f, 0.000773f, 0.001081f,
+ 0.001245f, 0.001682f, 0.002602f, 0.003744f, 0.006248f, 0.011566f, 0.025040f, 0.065491f, 0.236938f, 0.678223f, 0.956055f, 0.956543f,
+ 0.956543f, 0.956543f, 0.957031f, 0.957031f, 0.000000f, 0.000000f, 0.000021f, 0.000080f, 0.000072f, 0.000089f, 0.000100f, 0.000099f,
+ 0.000105f, 0.000107f, 0.000107f, 0.000110f, 0.000109f, 0.000110f, 0.000111f, 0.000111f, 0.000112f, 0.000112f, 0.000112f, 0.000113f,
+ 0.000113f, 0.000113f, 0.000113f, 0.000113f, 0.000105f, 0.000090f, 0.000078f, 0.000067f, 0.000057f, 0.000050f, 0.000043f, 0.000038f,
+ 0.000033f, 0.000029f, 0.000025f, 0.000055f, 0.000091f, 0.000130f, 0.000225f, 0.000275f, 0.000254f, 0.000290f, 0.000259f, 0.000378f,
+ 0.000333f, 0.000362f, 0.000458f, 0.000587f, 0.000876f, 0.001062f, 0.001382f, 0.002398f, 0.003763f, 0.006603f, 0.014496f, 0.038300f,
+ 0.143677f, 0.573730f, 0.946777f, 0.947266f, 0.947266f, 0.947266f, 0.948242f, 0.947266f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000014f, 0.000036f, 0.000072f, 0.000082f, 0.000080f, 0.000094f, 0.000096f, 0.000099f, 0.000098f, 0.000103f, 0.000103f,
+ 0.000103f, 0.000106f, 0.000105f, 0.000107f, 0.000107f, 0.000108f, 0.000108f, 0.000109f, 0.000109f, 0.000109f, 0.000105f, 0.000090f,
+ 0.000078f, 0.000067f, 0.000059f, 0.000051f, 0.000045f, 0.000039f, 0.000034f, 0.000030f, 0.000026f, 0.000045f, 0.000086f, 0.000108f,
+ 0.000143f, 0.000212f, 0.000227f, 0.000204f, 0.000231f, 0.000263f, 0.000315f, 0.000354f, 0.000481f, 0.000702f, 0.000888f, 0.001257f,
+ 0.002018f, 0.003738f, 0.007675f, 0.021317f, 0.080933f, 0.444336f, 0.934082f, 0.935059f, 0.935059f, 0.935059f, 0.935059f, 0.935059f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000024f, 0.000038f, 0.000059f,
+ 0.000063f, 0.000076f, 0.000080f, 0.000085f, 0.000089f, 0.000091f, 0.000092f, 0.000095f, 0.000097f, 0.000099f, 0.000098f, 0.000101f,
+ 0.000101f, 0.000102f, 0.000103f, 0.000104f, 0.000104f, 0.000091f, 0.000080f, 0.000069f, 0.000062f, 0.000053f, 0.000046f, 0.000041f,
+ 0.000035f, 0.000032f, 0.000027f, 0.000039f, 0.000052f, 0.000103f, 0.000139f, 0.000178f, 0.000190f, 0.000178f, 0.000185f, 0.000247f,
+ 0.000274f, 0.000368f, 0.000528f, 0.000637f, 0.001027f, 0.001937f, 0.003853f, 0.010445f, 0.041718f, 0.304199f, 0.917480f, 0.917480f,
+ 0.917969f, 0.917480f, 0.918457f, 0.917969f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000023f, 0.000037f, 0.000048f, 0.000048f, 0.000063f, 0.000063f,
+ 0.000074f, 0.000077f, 0.000080f, 0.000083f, 0.000086f, 0.000088f, 0.000090f, 0.000091f, 0.000092f, 0.000094f, 0.000095f, 0.000096f,
+ 0.000084f, 0.000073f, 0.000064f, 0.000057f, 0.000049f, 0.000043f, 0.000037f, 0.000033f, 0.000029f, 0.000025f, 0.000060f, 0.000061f,
+ 0.000087f, 0.000118f, 0.000156f, 0.000131f, 0.000175f, 0.000226f, 0.000230f, 0.000373f, 0.000507f, 0.000992f, 0.001814f, 0.004639f,
+ 0.018799f, 0.176758f, 0.894043f, 0.894531f, 0.895508f, 0.895020f, 0.895020f, 0.895996f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000019f, 0.000028f, 0.000034f, 0.000043f, 0.000052f, 0.000057f, 0.000062f, 0.000067f,
+ 0.000070f, 0.000074f, 0.000075f, 0.000079f, 0.000081f, 0.000083f, 0.000085f, 0.000076f, 0.000068f, 0.000059f, 0.000051f, 0.000046f,
+ 0.000040f, 0.000035f, 0.000030f, 0.000026f, 0.000028f, 0.000038f, 0.000072f, 0.000100f, 0.000120f, 0.000107f, 0.000152f, 0.000156f,
+ 0.000254f, 0.000436f, 0.000722f, 0.001875f, 0.007088f, 0.083069f, 0.863281f, 0.862305f, 0.863281f, 0.862305f, 0.863281f, 0.862793f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000005f, 0.000015f, 0.000022f, 0.000030f, 0.000037f, 0.000042f, 0.000048f, 0.000053f, 0.000058f, 0.000060f,
+ 0.000064f, 0.000067f, 0.000069f, 0.000061f, 0.000053f, 0.000047f, 0.000041f, 0.000036f, 0.000031f, 0.000027f, 0.000023f, 0.000020f,
+ 0.000036f, 0.000063f, 0.000082f, 0.000081f, 0.000104f, 0.000149f, 0.000263f, 0.000616f, 0.002337f, 0.028168f, 0.816406f, 0.816895f,
+ 0.816895f, 0.816895f, 0.817383f, 0.816895f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000003f, 0.000011f, 0.000019f, 0.000026f, 0.000031f, 0.000036f, 0.000041f, 0.000045f, 0.000050f, 0.000047f,
+ 0.000041f, 0.000036f, 0.000031f, 0.000027f, 0.000023f, 0.000019f, 0.000028f, 0.000029f, 0.000053f, 0.000052f, 0.000072f, 0.000165f,
+ 0.000511f, 0.006050f, 0.751465f, 0.752441f, 0.752930f, 0.752441f, 0.752441f, 0.752930f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000004f, 0.000011f, 0.000017f, 0.000021f, 0.000027f, 0.000028f, 0.000024f, 0.000020f, 0.000017f,
+ 0.000013f, 0.000020f, 0.000021f, 0.000029f, 0.000057f, 0.000588f, 0.665039f, 0.664551f, 0.665527f, 0.665039f, 0.665039f, 0.665039f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000003f, 0.000009f, 0.000006f, 0.000004f, 0.000007f, 0.557129f, 0.558105f,
+ 0.557617f, 0.557617f, 0.558594f, 0.558105f,
+ },
+ {
+ 0.163818f, 0.558105f, 0.755859f, 0.841797f, 0.886230f, 0.912109f, 0.929199f, 0.941406f, 0.950195f, 0.957031f, 0.961914f, 0.966309f,
+ 0.970215f, 0.972656f, 0.975586f, 0.978027f, 0.979492f, 0.981445f, 0.982910f, 0.984375f, 0.985840f, 0.986328f, 0.987305f, 0.988770f,
+ 0.989258f, 0.989746f, 0.990234f, 0.991211f, 0.991699f, 0.992188f, 0.993164f, 0.993652f, 0.993652f, 0.993652f, 0.994141f, 0.995117f,
+ 0.995117f, 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997559f, 0.998047f, 0.998047f,
+ 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.027023f, 0.138184f, 0.353760f, 0.583984f, 0.735352f, 0.819336f, 0.868652f, 0.898926f,
+ 0.918945f, 0.933594f, 0.943848f, 0.952148f, 0.958984f, 0.963867f, 0.967773f, 0.971680f, 0.974121f, 0.976562f, 0.978516f, 0.980469f,
+ 0.982422f, 0.983398f, 0.984863f, 0.986328f, 0.986816f, 0.988281f, 0.989258f, 0.989746f, 0.990723f, 0.990723f, 0.991699f, 0.992676f,
+ 0.993164f, 0.993164f, 0.993652f, 0.994141f, 0.994141f, 0.995117f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.997070f,
+ 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.009819f, 0.044250f, 0.113525f, 0.244995f,
+ 0.430420f, 0.608887f, 0.733887f, 0.810547f, 0.860352f, 0.892578f, 0.913086f, 0.929688f, 0.940918f, 0.949219f, 0.956055f, 0.961426f,
+ 0.966309f, 0.970215f, 0.972656f, 0.975586f, 0.977539f, 0.979980f, 0.980957f, 0.983398f, 0.983887f, 0.985352f, 0.986328f, 0.987793f,
+ 0.988281f, 0.989746f, 0.989746f, 0.991211f, 0.991699f, 0.992188f, 0.992676f, 0.993164f, 0.993652f, 0.993652f, 0.994141f, 0.995117f,
+ 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998535f,
+ 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.004848f, 0.020447f, 0.046814f, 0.096313f, 0.183228f, 0.319092f, 0.484375f, 0.631836f, 0.739258f, 0.810547f, 0.857422f, 0.888672f,
+ 0.910645f, 0.925781f, 0.938965f, 0.947754f, 0.954590f, 0.960449f, 0.964355f, 0.968750f, 0.971191f, 0.974609f, 0.977051f, 0.979004f,
+ 0.980957f, 0.982422f, 0.983887f, 0.985840f, 0.986816f, 0.987793f, 0.988770f, 0.989258f, 0.990234f, 0.990723f, 0.991211f, 0.991699f,
+ 0.992676f, 0.992676f, 0.993652f, 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.996582f,
+ 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.003096f, 0.011017f, 0.024399f, 0.046600f, 0.083191f, 0.145386f, 0.243774f, 0.379395f,
+ 0.529297f, 0.656738f, 0.750977f, 0.813965f, 0.857910f, 0.887695f, 0.909668f, 0.925293f, 0.937500f, 0.946289f, 0.953613f, 0.959473f,
+ 0.964355f, 0.968262f, 0.971191f, 0.974121f, 0.976562f, 0.979004f, 0.980957f, 0.982910f, 0.984375f, 0.985840f, 0.986328f, 0.987793f,
+ 0.988281f, 0.989258f, 0.989746f, 0.991211f, 0.991699f, 0.991699f, 0.992676f, 0.993164f, 0.993652f, 0.994141f, 0.994629f, 0.995117f,
+ 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.998047f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.001808f, 0.006992f, 0.014923f, 0.026413f,
+ 0.044403f, 0.073120f, 0.119446f, 0.193115f, 0.300537f, 0.433594f, 0.568848f, 0.680664f, 0.763184f, 0.821289f, 0.860840f, 0.890137f,
+ 0.909668f, 0.925293f, 0.937500f, 0.945801f, 0.953613f, 0.959473f, 0.963867f, 0.968262f, 0.971680f, 0.974609f, 0.977051f, 0.979004f,
+ 0.980957f, 0.982422f, 0.983887f, 0.984863f, 0.986816f, 0.987305f, 0.987793f, 0.989746f, 0.989746f, 0.991211f, 0.991699f, 0.992188f,
+ 0.992676f, 0.993652f, 0.994141f, 0.994629f, 0.994629f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997070f,
+ 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.001668f, 0.005253f, 0.010010f, 0.016602f, 0.026459f, 0.042023f, 0.065369f, 0.101868f, 0.158081f, 0.241455f, 0.354248f, 0.483887f,
+ 0.606934f, 0.706055f, 0.777832f, 0.830566f, 0.867188f, 0.893066f, 0.912109f, 0.926270f, 0.938477f, 0.946289f, 0.953125f, 0.959473f,
+ 0.964355f, 0.968750f, 0.971680f, 0.975098f, 0.977051f, 0.979492f, 0.980957f, 0.982910f, 0.984375f, 0.985840f, 0.986328f, 0.987305f,
+ 0.988770f, 0.989746f, 0.990234f, 0.991211f, 0.992188f, 0.993164f, 0.993164f, 0.994141f, 0.994629f, 0.994629f, 0.995117f, 0.995605f,
+ 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999023f, 0.001086f, 0.003477f, 0.006756f, 0.011604f, 0.018066f, 0.027222f, 0.039978f, 0.059448f,
+ 0.088257f, 0.132690f, 0.198120f, 0.291504f, 0.408447f, 0.531250f, 0.641602f, 0.728516f, 0.793457f, 0.839844f, 0.873047f, 0.896973f,
+ 0.915527f, 0.929199f, 0.939941f, 0.948730f, 0.955566f, 0.960938f, 0.965332f, 0.969238f, 0.972168f, 0.975098f, 0.977539f, 0.979492f,
+ 0.981445f, 0.983398f, 0.984375f, 0.985840f, 0.986816f, 0.988281f, 0.989258f, 0.989746f, 0.990723f, 0.991699f, 0.992188f, 0.993164f,
+ 0.993652f, 0.994141f, 0.994629f, 0.994629f, 0.995605f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.997559f, 0.997559f,
+ 0.997559f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.000982f, 0.002764f, 0.004925f, 0.008194f,
+ 0.012703f, 0.018417f, 0.026154f, 0.037964f, 0.053894f, 0.078552f, 0.113770f, 0.166626f, 0.242310f, 0.343262f, 0.460449f, 0.576660f,
+ 0.675293f, 0.753418f, 0.809570f, 0.851074f, 0.879883f, 0.902344f, 0.919434f, 0.931152f, 0.941895f, 0.950195f, 0.956055f, 0.960938f,
+ 0.965820f, 0.969727f, 0.973145f, 0.976074f, 0.978027f, 0.980469f, 0.981934f, 0.983887f, 0.985352f, 0.986328f, 0.987793f, 0.988770f,
+ 0.989746f, 0.990234f, 0.991211f, 0.991699f, 0.992676f, 0.993164f, 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996094f,
+ 0.996094f, 0.996582f, 0.996582f, 0.997559f, 0.997559f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000723f, 0.002268f, 0.003639f, 0.006371f, 0.009392f, 0.013046f, 0.018570f, 0.026016f, 0.035919f, 0.049957f, 0.070618f, 0.099609f,
+ 0.142212f, 0.204590f, 0.290039f, 0.396973f, 0.512207f, 0.619141f, 0.707520f, 0.775391f, 0.825195f, 0.860352f, 0.887207f, 0.907715f,
+ 0.923340f, 0.935547f, 0.944824f, 0.951660f, 0.958496f, 0.963379f, 0.967773f, 0.971191f, 0.974121f, 0.977051f, 0.979492f, 0.980957f,
+ 0.982910f, 0.984375f, 0.985352f, 0.987305f, 0.988281f, 0.989258f, 0.989746f, 0.990723f, 0.991699f, 0.992188f, 0.993164f, 0.993164f,
+ 0.994141f, 0.994629f, 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.000364f, 0.001690f, 0.003056f, 0.004982f, 0.007217f, 0.010124f, 0.013931f, 0.018738f,
+ 0.025177f, 0.034332f, 0.045990f, 0.063599f, 0.088501f, 0.124146f, 0.175781f, 0.248047f, 0.341797f, 0.451416f, 0.562012f, 0.659668f,
+ 0.738281f, 0.797852f, 0.841797f, 0.872559f, 0.896484f, 0.914062f, 0.928711f, 0.938477f, 0.947266f, 0.954590f, 0.959473f, 0.964844f,
+ 0.969238f, 0.972168f, 0.975098f, 0.977539f, 0.979980f, 0.981934f, 0.983398f, 0.985352f, 0.986816f, 0.987793f, 0.988770f, 0.989746f,
+ 0.990723f, 0.991211f, 0.992188f, 0.993164f, 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.995117f, 0.995605f, 0.996094f, 0.996582f,
+ 0.997070f, 0.997070f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.000365f, 0.001221f, 0.002531f, 0.003979f,
+ 0.005829f, 0.007874f, 0.010475f, 0.013962f, 0.018402f, 0.024368f, 0.032257f, 0.042847f, 0.057983f, 0.079346f, 0.109375f, 0.153198f,
+ 0.214233f, 0.295898f, 0.397705f, 0.506836f, 0.609863f, 0.698730f, 0.767578f, 0.817871f, 0.854980f, 0.883301f, 0.903809f, 0.920410f,
+ 0.933105f, 0.942871f, 0.950195f, 0.957031f, 0.962402f, 0.966797f, 0.970703f, 0.973633f, 0.976562f, 0.979004f, 0.981445f, 0.982910f,
+ 0.984375f, 0.985840f, 0.986816f, 0.988281f, 0.989746f, 0.989746f, 0.991211f, 0.992188f, 0.992676f, 0.993164f, 0.993652f, 0.994141f,
+ 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000343f, 0.001357f, 0.002039f, 0.003130f, 0.004398f, 0.006432f, 0.008141f, 0.010925f, 0.014008f, 0.018326f, 0.023331f, 0.030655f,
+ 0.040558f, 0.053680f, 0.071960f, 0.098206f, 0.134644f, 0.187012f, 0.258057f, 0.349854f, 0.455566f, 0.562012f, 0.656738f, 0.734863f,
+ 0.792969f, 0.836914f, 0.868652f, 0.894043f, 0.912598f, 0.926758f, 0.937988f, 0.947266f, 0.954590f, 0.960449f, 0.964355f, 0.968750f,
+ 0.972656f, 0.975586f, 0.978027f, 0.980469f, 0.981934f, 0.983398f, 0.985840f, 0.986816f, 0.988281f, 0.989258f, 0.990723f, 0.990723f,
+ 0.991699f, 0.992676f, 0.993164f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.000244f, 0.001185f, 0.001561f, 0.002504f, 0.003990f, 0.005272f, 0.006573f, 0.008606f,
+ 0.010933f, 0.013878f, 0.017715f, 0.022415f, 0.029068f, 0.038086f, 0.049774f, 0.066162f, 0.088257f, 0.120361f, 0.164917f, 0.227173f,
+ 0.308838f, 0.407959f, 0.515137f, 0.615723f, 0.700684f, 0.767090f, 0.817383f, 0.854492f, 0.882812f, 0.904297f, 0.920898f, 0.932617f,
+ 0.943359f, 0.951172f, 0.957520f, 0.962891f, 0.967773f, 0.971191f, 0.974121f, 0.977539f, 0.979492f, 0.981445f, 0.983887f, 0.985352f,
+ 0.986816f, 0.988281f, 0.988770f, 0.989258f, 0.990723f, 0.991699f, 0.992188f, 0.993164f, 0.993652f, 0.994141f, 0.995117f, 0.995605f,
+ 0.995605f, 0.996582f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.000243f, 0.000847f, 0.001555f, 0.002224f,
+ 0.003141f, 0.004093f, 0.005264f, 0.006817f, 0.008850f, 0.010948f, 0.014053f, 0.017456f, 0.022339f, 0.028351f, 0.036011f, 0.046326f,
+ 0.060791f, 0.080444f, 0.107788f, 0.146851f, 0.201660f, 0.274658f, 0.366699f, 0.470215f, 0.574707f, 0.666016f, 0.740234f, 0.797363f,
+ 0.839355f, 0.871094f, 0.895508f, 0.913574f, 0.927734f, 0.938965f, 0.947754f, 0.955566f, 0.960449f, 0.965332f, 0.969727f, 0.973145f,
+ 0.976074f, 0.979004f, 0.981445f, 0.982910f, 0.984863f, 0.986328f, 0.987305f, 0.988770f, 0.989258f, 0.990723f, 0.991699f, 0.992188f,
+ 0.993164f, 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.996094f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000244f, 0.000767f, 0.001042f, 0.001934f, 0.002502f, 0.003588f, 0.004292f, 0.005558f, 0.006824f, 0.008667f, 0.010872f, 0.013802f,
+ 0.017426f, 0.021637f, 0.027176f, 0.033936f, 0.043304f, 0.056549f, 0.073914f, 0.098083f, 0.132446f, 0.180664f, 0.245239f, 0.330078f,
+ 0.429199f, 0.533203f, 0.631348f, 0.711914f, 0.775879f, 0.823242f, 0.860352f, 0.886230f, 0.907227f, 0.923340f, 0.935059f, 0.944824f,
+ 0.952148f, 0.958984f, 0.964844f, 0.968750f, 0.972168f, 0.975586f, 0.978516f, 0.980957f, 0.982422f, 0.983887f, 0.985840f, 0.987305f,
+ 0.988770f, 0.989746f, 0.990234f, 0.992188f, 0.992676f, 0.992676f, 0.994141f, 0.994141f, 0.995117f, 0.995605f, 0.998047f, 0.998535f,
+ 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.000000f, 0.000485f, 0.001062f, 0.001658f, 0.002398f, 0.002998f, 0.003805f, 0.004723f,
+ 0.006004f, 0.007084f, 0.009102f, 0.011093f, 0.013489f, 0.016876f, 0.020813f, 0.025803f, 0.032257f, 0.040924f, 0.052673f, 0.068298f,
+ 0.090149f, 0.120239f, 0.162598f, 0.221313f, 0.298096f, 0.392822f, 0.496582f, 0.597656f, 0.684082f, 0.754883f, 0.807617f, 0.848145f,
+ 0.877930f, 0.900391f, 0.917969f, 0.931641f, 0.941406f, 0.950684f, 0.957031f, 0.962402f, 0.967773f, 0.971680f, 0.974609f, 0.978027f,
+ 0.980469f, 0.982422f, 0.984375f, 0.985840f, 0.987305f, 0.988281f, 0.989746f, 0.990723f, 0.991699f, 0.992188f, 0.993164f, 0.993652f,
+ 0.994141f, 0.995117f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.000244f, 0.000477f, 0.000852f, 0.001439f,
+ 0.002045f, 0.002424f, 0.003101f, 0.004093f, 0.004887f, 0.005989f, 0.007751f, 0.008606f, 0.011002f, 0.013420f, 0.016251f, 0.020035f,
+ 0.024628f, 0.030579f, 0.039093f, 0.049255f, 0.063599f, 0.083191f, 0.109924f, 0.148071f, 0.200928f, 0.270996f, 0.359863f, 0.461670f,
+ 0.564453f, 0.656738f, 0.732910f, 0.791992f, 0.836426f, 0.869629f, 0.894531f, 0.913086f, 0.928223f, 0.939453f, 0.949219f, 0.956055f,
+ 0.961914f, 0.966797f, 0.970703f, 0.975098f, 0.977051f, 0.979492f, 0.982422f, 0.983887f, 0.985352f, 0.987305f, 0.988770f, 0.989746f,
+ 0.990723f, 0.991699f, 0.992676f, 0.993164f, 0.993652f, 0.994629f, 0.998047f, 0.998535f, 0.998535f, 0.998047f, 0.998047f, 0.998535f,
+ 0.000242f, 0.000650f, 0.000847f, 0.001138f, 0.001621f, 0.002239f, 0.002527f, 0.003325f, 0.004227f, 0.005165f, 0.006462f, 0.007389f,
+ 0.008904f, 0.011024f, 0.013130f, 0.015915f, 0.019272f, 0.023819f, 0.029205f, 0.036652f, 0.046417f, 0.059418f, 0.077209f, 0.101562f,
+ 0.136230f, 0.183350f, 0.248047f, 0.331055f, 0.429688f, 0.533203f, 0.630859f, 0.711426f, 0.776367f, 0.824219f, 0.861328f, 0.887695f,
+ 0.908691f, 0.924805f, 0.937500f, 0.946777f, 0.954102f, 0.960938f, 0.966309f, 0.970215f, 0.974121f, 0.977539f, 0.979492f, 0.981934f,
+ 0.983887f, 0.985840f, 0.987305f, 0.989258f, 0.989746f, 0.990723f, 0.991211f, 0.992676f, 0.993164f, 0.994141f, 0.997559f, 0.998047f,
+ 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.000089f, 0.000243f, 0.000827f, 0.000964f, 0.001418f, 0.001579f, 0.002296f, 0.002914f,
+ 0.003632f, 0.004280f, 0.005344f, 0.006130f, 0.007545f, 0.008949f, 0.010498f, 0.012733f, 0.015686f, 0.018646f, 0.023010f, 0.028229f,
+ 0.034851f, 0.044098f, 0.056122f, 0.072388f, 0.094788f, 0.125610f, 0.168945f, 0.228271f, 0.306396f, 0.401123f, 0.504883f, 0.604492f,
+ 0.691895f, 0.760742f, 0.813477f, 0.853027f, 0.881836f, 0.904297f, 0.921387f, 0.934570f, 0.944824f, 0.953125f, 0.959961f, 0.964844f,
+ 0.969727f, 0.973633f, 0.976562f, 0.979492f, 0.981934f, 0.983887f, 0.986328f, 0.987305f, 0.988281f, 0.989258f, 0.991211f, 0.992188f,
+ 0.992676f, 0.993652f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.000069f, 0.000461f, 0.000609f, 0.000933f,
+ 0.001088f, 0.001488f, 0.001900f, 0.002378f, 0.003101f, 0.003687f, 0.004547f, 0.005276f, 0.006233f, 0.007282f, 0.008820f, 0.010239f,
+ 0.012581f, 0.015312f, 0.018341f, 0.022095f, 0.027344f, 0.034027f, 0.041687f, 0.053467f, 0.067810f, 0.088440f, 0.117126f, 0.156616f,
+ 0.211426f, 0.284180f, 0.375977f, 0.478760f, 0.581543f, 0.672363f, 0.746094f, 0.802734f, 0.845703f, 0.877441f, 0.900879f, 0.918457f,
+ 0.933105f, 0.943848f, 0.951660f, 0.959473f, 0.964355f, 0.968750f, 0.974121f, 0.977051f, 0.979492f, 0.982422f, 0.984375f, 0.985840f,
+ 0.987305f, 0.988770f, 0.990234f, 0.991211f, 0.992188f, 0.993164f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
+ 0.000244f, 0.000348f, 0.000606f, 0.000737f, 0.001079f, 0.001458f, 0.001783f, 0.002192f, 0.002924f, 0.003231f, 0.003862f, 0.004551f,
+ 0.005169f, 0.006367f, 0.007381f, 0.008682f, 0.010590f, 0.012199f, 0.014900f, 0.017761f, 0.021530f, 0.026108f, 0.032349f, 0.039642f,
+ 0.050446f, 0.064392f, 0.083313f, 0.109436f, 0.145996f, 0.197021f, 0.266357f, 0.354248f, 0.455811f, 0.560059f, 0.654785f, 0.732910f,
+ 0.793457f, 0.837891f, 0.873047f, 0.897461f, 0.917480f, 0.931641f, 0.941895f, 0.951172f, 0.958984f, 0.964844f, 0.969727f, 0.973633f,
+ 0.977051f, 0.979980f, 0.981934f, 0.984375f, 0.985840f, 0.988281f, 0.989258f, 0.990234f, 0.991211f, 0.992676f, 0.997070f, 0.997559f,
+ 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.000244f, 0.000520f, 0.000592f, 0.000720f, 0.000812f, 0.001174f, 0.001500f, 0.001884f,
+ 0.002178f, 0.002831f, 0.003321f, 0.003885f, 0.004471f, 0.005436f, 0.006275f, 0.007584f, 0.008675f, 0.010521f, 0.012238f, 0.014557f,
+ 0.017197f, 0.020874f, 0.025467f, 0.030960f, 0.038208f, 0.047821f, 0.061249f, 0.078552f, 0.103149f, 0.136841f, 0.184937f, 0.249878f,
+ 0.334473f, 0.435059f, 0.539551f, 0.638184f, 0.720215f, 0.784668f, 0.832031f, 0.868164f, 0.894531f, 0.914062f, 0.929688f, 0.942383f,
+ 0.950684f, 0.958984f, 0.964844f, 0.970215f, 0.974121f, 0.977539f, 0.979980f, 0.982422f, 0.984863f, 0.985840f, 0.988281f, 0.989258f,
+ 0.990723f, 0.992188f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.000000f, 0.000243f, 0.000351f, 0.000603f,
+ 0.000708f, 0.001079f, 0.001493f, 0.001752f, 0.001936f, 0.002171f, 0.002911f, 0.003382f, 0.003906f, 0.004578f, 0.005222f, 0.006161f,
+ 0.007362f, 0.008850f, 0.010010f, 0.011971f, 0.014145f, 0.016983f, 0.020477f, 0.024582f, 0.029739f, 0.036804f, 0.045837f, 0.057648f,
+ 0.074829f, 0.097534f, 0.130127f, 0.174438f, 0.236572f, 0.318604f, 0.416992f, 0.523926f, 0.624023f, 0.709961f, 0.777344f, 0.827148f,
+ 0.865234f, 0.893066f, 0.914062f, 0.929688f, 0.941406f, 0.951660f, 0.958496f, 0.965820f, 0.969238f, 0.974609f, 0.977539f, 0.980469f,
+ 0.983398f, 0.985352f, 0.986816f, 0.988281f, 0.989746f, 0.990723f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997070f,
+ 0.000243f, 0.000244f, 0.000456f, 0.000592f, 0.000602f, 0.001025f, 0.001282f, 0.001656f, 0.001856f, 0.002073f, 0.002535f, 0.002768f,
+ 0.003487f, 0.003822f, 0.004574f, 0.005589f, 0.006519f, 0.007336f, 0.008453f, 0.009911f, 0.011581f, 0.013985f, 0.016373f, 0.019638f,
+ 0.023819f, 0.028473f, 0.035339f, 0.043945f, 0.055939f, 0.071350f, 0.093140f, 0.123474f, 0.165771f, 0.225342f, 0.304199f, 0.402344f,
+ 0.509277f, 0.612305f, 0.702148f, 0.771973f, 0.824219f, 0.863281f, 0.891113f, 0.913086f, 0.930176f, 0.942383f, 0.951660f, 0.959473f,
+ 0.965820f, 0.970215f, 0.974609f, 0.977539f, 0.980957f, 0.983887f, 0.985352f, 0.987305f, 0.988770f, 0.990723f, 0.996582f, 0.996582f,
+ 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.000000f, 0.000243f, 0.000276f, 0.000557f, 0.000594f, 0.000849f, 0.000845f, 0.001282f,
+ 0.001520f, 0.001774f, 0.002119f, 0.002499f, 0.002840f, 0.003252f, 0.004005f, 0.004555f, 0.005245f, 0.006168f, 0.007233f, 0.008301f,
+ 0.009911f, 0.011330f, 0.013748f, 0.015945f, 0.019089f, 0.023071f, 0.027786f, 0.034058f, 0.042542f, 0.053619f, 0.068237f, 0.089539f,
+ 0.117798f, 0.158325f, 0.215698f, 0.293213f, 0.389893f, 0.498291f, 0.603027f, 0.694824f, 0.767090f, 0.821777f, 0.862305f, 0.891113f,
+ 0.914062f, 0.930176f, 0.942383f, 0.952148f, 0.959473f, 0.965820f, 0.971680f, 0.975098f, 0.978516f, 0.981445f, 0.983887f, 0.985840f,
+ 0.988281f, 0.989258f, 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.996094f, 0.996582f, 0.000240f, 0.000240f, 0.000242f, 0.000365f,
+ 0.000678f, 0.000779f, 0.000957f, 0.001003f, 0.001390f, 0.001656f, 0.001828f, 0.002274f, 0.002455f, 0.003210f, 0.003704f, 0.004097f,
+ 0.004616f, 0.005409f, 0.006180f, 0.007092f, 0.008453f, 0.009521f, 0.011154f, 0.013397f, 0.015656f, 0.018509f, 0.022247f, 0.026810f,
+ 0.032928f, 0.041046f, 0.051727f, 0.065613f, 0.085205f, 0.113098f, 0.152832f, 0.208496f, 0.284424f, 0.380371f, 0.489258f, 0.596680f,
+ 0.690918f, 0.764648f, 0.821777f, 0.862305f, 0.892578f, 0.914551f, 0.931152f, 0.943848f, 0.953613f, 0.960938f, 0.967773f, 0.971680f,
+ 0.976074f, 0.979492f, 0.982422f, 0.984863f, 0.986816f, 0.988281f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.996094f,
+ 0.000000f, 0.000242f, 0.000242f, 0.000364f, 0.000465f, 0.000803f, 0.000927f, 0.000956f, 0.001275f, 0.001335f, 0.001570f, 0.001968f,
+ 0.002184f, 0.002726f, 0.003069f, 0.003294f, 0.003906f, 0.004662f, 0.005245f, 0.006027f, 0.007191f, 0.008202f, 0.009460f, 0.010735f,
+ 0.012970f, 0.015404f, 0.018051f, 0.021484f, 0.026321f, 0.032135f, 0.039581f, 0.049805f, 0.063538f, 0.082458f, 0.109497f, 0.147827f,
+ 0.202393f, 0.277344f, 0.373535f, 0.483887f, 0.593262f, 0.688477f, 0.764648f, 0.821289f, 0.863281f, 0.894043f, 0.916016f, 0.932129f,
+ 0.944336f, 0.954590f, 0.962402f, 0.968262f, 0.973633f, 0.977051f, 0.980957f, 0.983398f, 0.985352f, 0.987793f, 0.995605f, 0.996094f,
+ 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.000000f, 0.000239f, 0.000360f, 0.000362f, 0.000363f, 0.000475f, 0.000767f, 0.000931f,
+ 0.000951f, 0.001211f, 0.001491f, 0.001634f, 0.002129f, 0.002457f, 0.002678f, 0.002995f, 0.003393f, 0.003922f, 0.004711f, 0.005135f,
+ 0.005955f, 0.006935f, 0.008072f, 0.009270f, 0.010841f, 0.012558f, 0.014618f, 0.017502f, 0.020828f, 0.025269f, 0.030884f, 0.038269f,
+ 0.048218f, 0.061554f, 0.080505f, 0.106567f, 0.144287f, 0.197998f, 0.272705f, 0.369141f, 0.480469f, 0.591797f, 0.690430f, 0.767090f,
+ 0.824707f, 0.866699f, 0.896484f, 0.918457f, 0.934570f, 0.946777f, 0.956543f, 0.963379f, 0.969727f, 0.974609f, 0.978027f, 0.981934f,
+ 0.984375f, 0.986328f, 0.995117f, 0.995605f, 0.995605f, 0.995605f, 0.995605f, 0.995605f, 0.000000f, 0.000208f, 0.000238f, 0.000362f,
+ 0.000363f, 0.000555f, 0.000600f, 0.000888f, 0.001140f, 0.001140f, 0.001272f, 0.001661f, 0.001811f, 0.002041f, 0.002550f, 0.002636f,
+ 0.002941f, 0.003492f, 0.004032f, 0.004593f, 0.005062f, 0.005875f, 0.007015f, 0.007965f, 0.009079f, 0.010300f, 0.012291f, 0.014229f,
+ 0.016937f, 0.020248f, 0.024689f, 0.030151f, 0.037354f, 0.047028f, 0.060211f, 0.078491f, 0.104431f, 0.141602f, 0.195068f, 0.270264f,
+ 0.367676f, 0.480957f, 0.594238f, 0.693848f, 0.770996f, 0.828613f, 0.869629f, 0.898438f, 0.921875f, 0.937012f, 0.949219f, 0.958008f,
+ 0.964844f, 0.971680f, 0.976074f, 0.979980f, 0.982422f, 0.985840f, 0.994629f, 0.995117f, 0.995605f, 0.995605f, 0.995117f, 0.995117f,
+ 0.000000f, 0.000000f, 0.000229f, 0.000358f, 0.000479f, 0.000362f, 0.000498f, 0.000634f, 0.000836f, 0.000927f, 0.001288f, 0.001244f,
+ 0.001605f, 0.001732f, 0.002106f, 0.002478f, 0.002613f, 0.003183f, 0.003510f, 0.004021f, 0.004528f, 0.005047f, 0.005768f, 0.006859f,
+ 0.007759f, 0.008865f, 0.009933f, 0.011742f, 0.013741f, 0.016678f, 0.019897f, 0.024017f, 0.029297f, 0.036469f, 0.045990f, 0.058990f,
+ 0.077026f, 0.102722f, 0.140015f, 0.193604f, 0.269531f, 0.369141f, 0.485107f, 0.600098f, 0.700195f, 0.777344f, 0.833984f, 0.873535f,
+ 0.903809f, 0.924316f, 0.940430f, 0.951172f, 0.960938f, 0.968262f, 0.973145f, 0.978027f, 0.980957f, 0.983887f, 0.994629f, 0.995117f,
+ 0.995117f, 0.995605f, 0.995117f, 0.995117f, 0.000000f, 0.000000f, 0.000078f, 0.000353f, 0.000354f, 0.000360f, 0.000482f, 0.000573f,
+ 0.000757f, 0.000923f, 0.001230f, 0.001266f, 0.001485f, 0.001679f, 0.001963f, 0.002161f, 0.002235f, 0.002739f, 0.003115f, 0.003563f,
+ 0.003933f, 0.004436f, 0.004917f, 0.005623f, 0.006599f, 0.007469f, 0.008484f, 0.010101f, 0.011665f, 0.013695f, 0.016403f, 0.019531f,
+ 0.023300f, 0.028870f, 0.035889f, 0.045135f, 0.058014f, 0.075928f, 0.101746f, 0.139160f, 0.193848f, 0.271729f, 0.374023f, 0.492920f,
+ 0.609863f, 0.709473f, 0.786133f, 0.842285f, 0.880859f, 0.908691f, 0.928711f, 0.943848f, 0.954102f, 0.963867f, 0.969727f, 0.975098f,
+ 0.979004f, 0.982422f, 0.994141f, 0.994629f, 0.994141f, 0.994141f, 0.994141f, 0.994629f, 0.000000f, 0.000000f, 0.000000f, 0.000330f,
+ 0.000336f, 0.000352f, 0.000478f, 0.000481f, 0.000676f, 0.000822f, 0.001072f, 0.001228f, 0.001283f, 0.001417f, 0.001621f, 0.001938f,
+ 0.001953f, 0.002377f, 0.002737f, 0.002914f, 0.003624f, 0.003721f, 0.004555f, 0.004845f, 0.005531f, 0.006325f, 0.007244f, 0.008255f,
+ 0.009911f, 0.011467f, 0.013496f, 0.016068f, 0.018951f, 0.022888f, 0.028183f, 0.035126f, 0.044617f, 0.057220f, 0.075134f, 0.101501f,
+ 0.139526f, 0.195679f, 0.276123f, 0.381592f, 0.503418f, 0.622070f, 0.721680f, 0.796387f, 0.850098f, 0.887207f, 0.914551f, 0.933594f,
+ 0.947266f, 0.957520f, 0.966797f, 0.972656f, 0.977539f, 0.980957f, 0.993164f, 0.994141f, 0.994141f, 0.994141f, 0.994141f, 0.994141f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000243f, 0.000466f, 0.000474f, 0.000475f, 0.000600f, 0.000740f, 0.000796f, 0.001130f,
+ 0.001333f, 0.001339f, 0.001440f, 0.001575f, 0.001961f, 0.002031f, 0.002388f, 0.002563f, 0.003174f, 0.003345f, 0.003555f, 0.004143f,
+ 0.004681f, 0.005333f, 0.006191f, 0.007111f, 0.008278f, 0.009666f, 0.011177f, 0.013451f, 0.015511f, 0.018707f, 0.022629f, 0.027847f,
+ 0.034515f, 0.043976f, 0.056671f, 0.075012f, 0.101685f, 0.140869f, 0.199341f, 0.282959f, 0.393311f, 0.519043f, 0.639160f, 0.736328f,
+ 0.809082f, 0.860352f, 0.896484f, 0.920898f, 0.939453f, 0.951660f, 0.961914f, 0.969238f, 0.975098f, 0.979492f, 0.993164f, 0.993652f,
+ 0.994141f, 0.993652f, 0.993652f, 0.993652f, 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000120f, 0.000367f, 0.000448f, 0.000589f,
+ 0.000595f, 0.000719f, 0.000707f, 0.000809f, 0.000966f, 0.001217f, 0.001369f, 0.001405f, 0.001579f, 0.001786f, 0.002100f, 0.002260f,
+ 0.002600f, 0.002762f, 0.003023f, 0.003531f, 0.004219f, 0.004810f, 0.005409f, 0.006092f, 0.007053f, 0.008064f, 0.009163f, 0.010941f,
+ 0.012733f, 0.015251f, 0.018280f, 0.022202f, 0.027573f, 0.034271f, 0.043732f, 0.056458f, 0.075134f, 0.102661f, 0.143433f, 0.205078f,
+ 0.293701f, 0.409668f, 0.538574f, 0.658203f, 0.753418f, 0.823242f, 0.870605f, 0.905273f, 0.927734f, 0.943848f, 0.956055f, 0.964844f,
+ 0.972168f, 0.977539f, 0.992188f, 0.992676f, 0.993164f, 0.993652f, 0.993164f, 0.992676f, 0.000000f, 0.000000f, 0.000000f, 0.000111f,
+ 0.000224f, 0.000231f, 0.000314f, 0.000562f, 0.000589f, 0.000699f, 0.000717f, 0.000776f, 0.000926f, 0.000968f, 0.001242f, 0.001360f,
+ 0.001487f, 0.001564f, 0.001713f, 0.002073f, 0.002169f, 0.002380f, 0.002941f, 0.003229f, 0.003534f, 0.003914f, 0.004509f, 0.005127f,
+ 0.005939f, 0.006596f, 0.007812f, 0.009354f, 0.010559f, 0.012581f, 0.015007f, 0.018021f, 0.022079f, 0.027191f, 0.034119f, 0.043427f,
+ 0.057190f, 0.075623f, 0.104492f, 0.147949f, 0.213135f, 0.308105f, 0.430664f, 0.562500f, 0.681641f, 0.772949f, 0.839355f, 0.884277f,
+ 0.913574f, 0.934570f, 0.950195f, 0.961426f, 0.969238f, 0.975098f, 0.991211f, 0.992676f, 0.992676f, 0.992676f, 0.992676f, 0.992188f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000084f, 0.000117f, 0.000119f, 0.000367f, 0.000473f, 0.000555f, 0.000576f, 0.000674f, 0.000713f,
+ 0.000816f, 0.000913f, 0.001049f, 0.001168f, 0.001263f, 0.001473f, 0.001580f, 0.001781f, 0.002005f, 0.002123f, 0.002316f, 0.002674f,
+ 0.003094f, 0.003475f, 0.003967f, 0.004318f, 0.004833f, 0.005798f, 0.006699f, 0.007801f, 0.008888f, 0.010429f, 0.012268f, 0.014824f,
+ 0.017792f, 0.021790f, 0.026978f, 0.033844f, 0.043518f, 0.057068f, 0.077148f, 0.107605f, 0.154053f, 0.224609f, 0.326904f, 0.456543f,
+ 0.591797f, 0.708984f, 0.795410f, 0.855957f, 0.895508f, 0.923340f, 0.942383f, 0.955566f, 0.965332f, 0.973145f, 0.991211f, 0.991699f,
+ 0.992188f, 0.992188f, 0.992188f, 0.991699f, 0.000000f, 0.000000f, 0.000000f, 0.000092f, 0.000070f, 0.000236f, 0.000119f, 0.000376f,
+ 0.000433f, 0.000561f, 0.000688f, 0.000586f, 0.000742f, 0.000842f, 0.000881f, 0.000937f, 0.001141f, 0.001300f, 0.001434f, 0.001464f,
+ 0.001598f, 0.001829f, 0.002062f, 0.002338f, 0.002583f, 0.003036f, 0.003460f, 0.003704f, 0.004383f, 0.004986f, 0.005615f, 0.006439f,
+ 0.007267f, 0.008797f, 0.010330f, 0.012146f, 0.014473f, 0.017532f, 0.021622f, 0.026535f, 0.033539f, 0.043579f, 0.058044f, 0.079041f,
+ 0.111572f, 0.162109f, 0.239746f, 0.350830f, 0.488770f, 0.625000f, 0.737305f, 0.817871f, 0.871582f, 0.908203f, 0.932129f, 0.949219f,
+ 0.961914f, 0.970215f, 0.990234f, 0.991211f, 0.991211f, 0.991211f, 0.991211f, 0.991211f, 0.000000f, 0.000000f, 0.000000f, 0.000080f,
+ 0.000100f, 0.000115f, 0.000335f, 0.000350f, 0.000355f, 0.000473f, 0.000633f, 0.000678f, 0.000695f, 0.000694f, 0.000812f, 0.000733f,
+ 0.001109f, 0.001098f, 0.001260f, 0.001452f, 0.001377f, 0.001534f, 0.001972f, 0.001982f, 0.002232f, 0.002567f, 0.002764f, 0.003273f,
+ 0.003542f, 0.004181f, 0.004738f, 0.005466f, 0.006268f, 0.007126f, 0.008614f, 0.010170f, 0.012093f, 0.014359f, 0.017075f, 0.021042f,
+ 0.026459f, 0.033722f, 0.044159f, 0.059113f, 0.082092f, 0.117249f, 0.173218f, 0.259766f, 0.382080f, 0.526367f, 0.662598f, 0.768066f,
+ 0.840332f, 0.889648f, 0.920410f, 0.940918f, 0.956543f, 0.966309f, 0.989746f, 0.990234f, 0.990723f, 0.990723f, 0.990723f, 0.990723f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000191f, 0.000236f, 0.000335f, 0.000337f, 0.000466f, 0.000399f, 0.000608f,
+ 0.000626f, 0.000669f, 0.000696f, 0.000808f, 0.000859f, 0.000915f, 0.000903f, 0.001168f, 0.001245f, 0.001500f, 0.001525f, 0.001863f,
+ 0.001941f, 0.002121f, 0.002399f, 0.002861f, 0.002953f, 0.003632f, 0.004105f, 0.004745f, 0.005333f, 0.006317f, 0.007236f, 0.008255f,
+ 0.009857f, 0.011414f, 0.014015f, 0.016922f, 0.020828f, 0.026321f, 0.034149f, 0.044861f, 0.061279f, 0.085571f, 0.124878f, 0.187866f,
+ 0.285645f, 0.420654f, 0.570801f, 0.703125f, 0.799805f, 0.864258f, 0.905273f, 0.932129f, 0.950684f, 0.963379f, 0.988770f, 0.989258f,
+ 0.989746f, 0.989746f, 0.989746f, 0.989746f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000000f, 0.000122f, 0.000125f, 0.000232f,
+ 0.000360f, 0.000342f, 0.000463f, 0.000388f, 0.000569f, 0.000638f, 0.000671f, 0.000791f, 0.000774f, 0.000943f, 0.000774f, 0.001018f,
+ 0.001044f, 0.001245f, 0.001377f, 0.001410f, 0.001643f, 0.001970f, 0.002041f, 0.002316f, 0.002758f, 0.003023f, 0.003433f, 0.003859f,
+ 0.004444f, 0.005180f, 0.006134f, 0.006920f, 0.008102f, 0.009354f, 0.011475f, 0.013649f, 0.016739f, 0.021011f, 0.026566f, 0.034454f,
+ 0.046051f, 0.063843f, 0.090942f, 0.135498f, 0.207642f, 0.319580f, 0.467529f, 0.620605f, 0.745605f, 0.830566f, 0.886230f, 0.920898f,
+ 0.943848f, 0.958984f, 0.987793f, 0.988281f, 0.988770f, 0.988770f, 0.988281f, 0.988770f, 0.000000f, 0.000000f, 0.000000f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000188f, 0.000200f, 0.000332f, 0.000417f, 0.000338f, 0.000459f, 0.000349f, 0.000558f, 0.000642f, 0.000636f,
+ 0.000629f, 0.000807f, 0.000695f, 0.000747f, 0.000827f, 0.001058f, 0.001182f, 0.001269f, 0.001422f, 0.001472f, 0.001921f, 0.002100f,
+ 0.002337f, 0.002462f, 0.003073f, 0.003374f, 0.003708f, 0.004265f, 0.004826f, 0.005646f, 0.006596f, 0.007710f, 0.008926f, 0.011063f,
+ 0.013580f, 0.016495f, 0.020737f, 0.026459f, 0.035126f, 0.047791f, 0.066833f, 0.097778f, 0.149170f, 0.233887f, 0.363037f, 0.523438f,
+ 0.674805f, 0.788086f, 0.860352f, 0.906250f, 0.935547f, 0.954102f, 0.986328f, 0.987305f, 0.987305f, 0.987305f, 0.987305f, 0.987793f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000175f, 0.000155f, 0.000319f, 0.000241f, 0.000318f,
+ 0.000455f, 0.000462f, 0.000496f, 0.000593f, 0.000516f, 0.000564f, 0.000667f, 0.000668f, 0.000715f, 0.000749f, 0.000925f, 0.001111f,
+ 0.001246f, 0.001381f, 0.001443f, 0.001856f, 0.001997f, 0.002264f, 0.002363f, 0.002880f, 0.003212f, 0.003727f, 0.004208f, 0.004673f,
+ 0.005394f, 0.006367f, 0.007404f, 0.009003f, 0.010651f, 0.013138f, 0.016312f, 0.020767f, 0.027054f, 0.036377f, 0.050262f, 0.071655f,
+ 0.107361f, 0.167969f, 0.269287f, 0.418457f, 0.587402f, 0.730957f, 0.828125f, 0.888184f, 0.924805f, 0.948242f, 0.984863f, 0.986328f,
+ 0.986328f, 0.985840f, 0.986328f, 0.986328f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000202f, 0.000133f, 0.000215f, 0.000263f, 0.000304f, 0.000442f, 0.000332f, 0.000365f, 0.000403f, 0.000549f, 0.000607f, 0.000750f,
+ 0.000788f, 0.000802f, 0.000841f, 0.000958f, 0.001049f, 0.001188f, 0.001354f, 0.001318f, 0.001582f, 0.001928f, 0.002064f, 0.002321f,
+ 0.002594f, 0.003042f, 0.003222f, 0.003796f, 0.004440f, 0.005112f, 0.006081f, 0.007259f, 0.008736f, 0.010612f, 0.013077f, 0.016464f,
+ 0.020950f, 0.027664f, 0.037506f, 0.052795f, 0.077698f, 0.120361f, 0.194336f, 0.317627f, 0.486572f, 0.657227f, 0.785156f, 0.865234f,
+ 0.913086f, 0.942871f, 0.983887f, 0.984863f, 0.984375f, 0.984863f, 0.984375f, 0.984863f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000152f, 0.000257f, 0.000243f, 0.000288f, 0.000345f, 0.000228f,
+ 0.000358f, 0.000363f, 0.000432f, 0.000494f, 0.000530f, 0.000582f, 0.000762f, 0.000771f, 0.000913f, 0.000978f, 0.001100f, 0.001305f,
+ 0.001373f, 0.001706f, 0.001712f, 0.001922f, 0.002155f, 0.002569f, 0.002573f, 0.003094f, 0.003401f, 0.004272f, 0.004978f, 0.005829f,
+ 0.006924f, 0.008453f, 0.010452f, 0.012871f, 0.016617f, 0.021072f, 0.028427f, 0.039429f, 0.056732f, 0.086243f, 0.138916f, 0.231812f,
+ 0.381592f, 0.566406f, 0.726562f, 0.833496f, 0.896973f, 0.933594f, 0.981934f, 0.982910f, 0.982910f, 0.982910f, 0.982910f, 0.982910f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000121f, 0.000127f, 0.000215f,
+ 0.000159f, 0.000233f, 0.000284f, 0.000326f, 0.000339f, 0.000339f, 0.000352f, 0.000394f, 0.000623f, 0.000622f, 0.000731f, 0.000730f,
+ 0.000741f, 0.000829f, 0.000914f, 0.001017f, 0.001151f, 0.001469f, 0.001263f, 0.001480f, 0.001740f, 0.002069f, 0.002104f, 0.002443f,
+ 0.002831f, 0.003519f, 0.003929f, 0.004627f, 0.005455f, 0.006634f, 0.008316f, 0.009949f, 0.012596f, 0.016495f, 0.021729f, 0.029877f,
+ 0.042084f, 0.062805f, 0.098694f, 0.165283f, 0.284668f, 0.465088f, 0.654297f, 0.793945f, 0.877930f, 0.924805f, 0.979980f, 0.980957f,
+ 0.980957f, 0.981445f, 0.981445f, 0.980957f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000150f, 0.000163f, 0.000069f, 0.000057f, 0.000121f, 0.000231f, 0.000291f, 0.000304f, 0.000334f, 0.000339f,
+ 0.000346f, 0.000569f, 0.000648f, 0.000674f, 0.000649f, 0.000697f, 0.000772f, 0.000834f, 0.000972f, 0.001005f, 0.001189f, 0.001359f,
+ 0.001237f, 0.001567f, 0.001794f, 0.001963f, 0.002378f, 0.002712f, 0.002867f, 0.003853f, 0.004330f, 0.005196f, 0.006516f, 0.008026f,
+ 0.009888f, 0.012703f, 0.016479f, 0.022110f, 0.031158f, 0.045746f, 0.070557f, 0.117004f, 0.204956f, 0.360596f, 0.564453f, 0.740723f,
+ 0.852051f, 0.912598f, 0.977539f, 0.979492f, 0.979492f, 0.979004f, 0.979492f, 0.979004f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000098f, 0.000082f, 0.000067f, 0.000056f, 0.000124f,
+ 0.000193f, 0.000240f, 0.000258f, 0.000310f, 0.000326f, 0.000335f, 0.000341f, 0.000471f, 0.000613f, 0.000494f, 0.000716f, 0.000742f,
+ 0.000804f, 0.000873f, 0.000832f, 0.001070f, 0.001120f, 0.001146f, 0.001225f, 0.001696f, 0.001814f, 0.002041f, 0.002419f, 0.002941f,
+ 0.003433f, 0.004154f, 0.004818f, 0.006077f, 0.007652f, 0.009521f, 0.012444f, 0.017029f, 0.023193f, 0.033539f, 0.050690f, 0.082092f,
+ 0.144043f, 0.265869f, 0.463379f, 0.672363f, 0.818848f, 0.898438f, 0.975586f, 0.976562f, 0.976562f, 0.976562f, 0.976074f, 0.976562f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000114f,
+ 0.000096f, 0.000079f, 0.000125f, 0.000056f, 0.000142f, 0.000120f, 0.000195f, 0.000246f, 0.000321f, 0.000305f, 0.000319f, 0.000395f,
+ 0.000442f, 0.000540f, 0.000642f, 0.000638f, 0.000696f, 0.000674f, 0.000687f, 0.000857f, 0.000955f, 0.001128f, 0.001224f, 0.001364f,
+ 0.001347f, 0.001555f, 0.001910f, 0.002245f, 0.002714f, 0.003229f, 0.003824f, 0.004673f, 0.005676f, 0.007225f, 0.009293f, 0.012802f,
+ 0.017273f, 0.024368f, 0.036682f, 0.058075f, 0.100952f, 0.188721f, 0.358154f, 0.587891f, 0.775879f, 0.881348f, 0.972168f, 0.972656f,
+ 0.972656f, 0.973145f, 0.973145f, 0.973633f, 0.000000f, 0.000000f, 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000120f, 0.000112f, 0.000093f, 0.000079f, 0.000067f, 0.000057f, 0.000049f, 0.000133f, 0.000137f,
+ 0.000163f, 0.000244f, 0.000328f, 0.000366f, 0.000356f, 0.000415f, 0.000436f, 0.000543f, 0.000555f, 0.000638f, 0.000597f, 0.000702f,
+ 0.000786f, 0.000648f, 0.000891f, 0.000804f, 0.001218f, 0.001070f, 0.001355f, 0.001731f, 0.002171f, 0.002352f, 0.002796f, 0.003546f,
+ 0.004189f, 0.005558f, 0.006939f, 0.009209f, 0.012337f, 0.017776f, 0.026016f, 0.040833f, 0.069946f, 0.130981f, 0.262207f, 0.489258f,
+ 0.719238f, 0.859375f, 0.968262f, 0.969238f, 0.969727f, 0.969727f, 0.969727f, 0.969727f, 0.000000f, 0.000122f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000110f, 0.000093f, 0.000080f,
+ 0.000068f, 0.000094f, 0.000119f, 0.000117f, 0.000120f, 0.000123f, 0.000173f, 0.000263f, 0.000263f, 0.000359f, 0.000386f, 0.000390f,
+ 0.000401f, 0.000556f, 0.000549f, 0.000573f, 0.000502f, 0.000707f, 0.000789f, 0.000629f, 0.000847f, 0.001003f, 0.001024f, 0.001242f,
+ 0.001423f, 0.001877f, 0.002012f, 0.002571f, 0.003071f, 0.003925f, 0.005131f, 0.006767f, 0.009140f, 0.012672f, 0.018509f, 0.028992f,
+ 0.048309f, 0.089233f, 0.183838f, 0.383545f, 0.646973f, 0.830078f, 0.963867f, 0.964844f, 0.964844f, 0.965820f, 0.965820f, 0.965820f,
+ 0.000000f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f,
+ 0.000119f, 0.000119f, 0.000113f, 0.000095f, 0.000083f, 0.000070f, 0.000061f, 0.000054f, 0.000048f, 0.000042f, 0.000115f, 0.000112f,
+ 0.000151f, 0.000213f, 0.000309f, 0.000298f, 0.000359f, 0.000337f, 0.000382f, 0.000440f, 0.000576f, 0.000477f, 0.000453f, 0.000690f,
+ 0.000687f, 0.000795f, 0.000776f, 0.000911f, 0.001117f, 0.001119f, 0.001352f, 0.002001f, 0.002140f, 0.002832f, 0.003609f, 0.004715f,
+ 0.006302f, 0.008835f, 0.013115f, 0.020004f, 0.032867f, 0.060333f, 0.124512f, 0.281982f, 0.557617f, 0.794434f, 0.959473f, 0.959961f,
+ 0.960449f, 0.960449f, 0.960449f, 0.959961f, 0.000122f, 0.000121f, 0.000121f, 0.000120f, 0.000120f, 0.000120f, 0.000119f, 0.000119f,
+ 0.000119f, 0.000119f, 0.000119f, 0.000119f, 0.000118f, 0.000118f, 0.000118f, 0.000116f, 0.000098f, 0.000087f, 0.000076f, 0.000065f,
+ 0.000057f, 0.000050f, 0.000045f, 0.000091f, 0.000074f, 0.000106f, 0.000185f, 0.000193f, 0.000228f, 0.000328f, 0.000323f, 0.000399f,
+ 0.000429f, 0.000498f, 0.000552f, 0.000432f, 0.000542f, 0.000592f, 0.000599f, 0.000729f, 0.000734f, 0.000885f, 0.001304f, 0.001273f,
+ 0.001756f, 0.001931f, 0.002445f, 0.003120f, 0.004456f, 0.006165f, 0.008751f, 0.013466f, 0.022141f, 0.040192f, 0.082397f, 0.195679f,
+ 0.455322f, 0.745117f, 0.952637f, 0.953613f, 0.953613f, 0.954102f, 0.952637f, 0.953613f, 0.000000f, 0.000120f, 0.000120f, 0.000119f,
+ 0.000119f, 0.000119f, 0.000118f, 0.000118f, 0.000118f, 0.000118f, 0.000118f, 0.000117f, 0.000117f, 0.000117f, 0.000117f, 0.000117f,
+ 0.000117f, 0.000104f, 0.000092f, 0.000079f, 0.000071f, 0.000062f, 0.000055f, 0.000049f, 0.000044f, 0.000039f, 0.000099f, 0.000106f,
+ 0.000158f, 0.000169f, 0.000241f, 0.000274f, 0.000293f, 0.000389f, 0.000360f, 0.000399f, 0.000387f, 0.000446f, 0.000401f, 0.000530f,
+ 0.000565f, 0.000691f, 0.000722f, 0.000848f, 0.001147f, 0.001418f, 0.001677f, 0.002087f, 0.002972f, 0.004169f, 0.005623f, 0.008835f,
+ 0.014404f, 0.026077f, 0.053467f, 0.129395f, 0.346924f, 0.685059f, 0.943848f, 0.945801f, 0.945801f, 0.945312f, 0.945801f, 0.945801f,
+ 0.000000f, 0.000000f, 0.000117f, 0.000116f, 0.000117f, 0.000117f, 0.000116f, 0.000116f, 0.000115f, 0.000116f, 0.000115f, 0.000116f,
+ 0.000115f, 0.000115f, 0.000115f, 0.000115f, 0.000115f, 0.000115f, 0.000110f, 0.000097f, 0.000086f, 0.000077f, 0.000067f, 0.000060f,
+ 0.000053f, 0.000048f, 0.000043f, 0.000061f, 0.000090f, 0.000083f, 0.000139f, 0.000139f, 0.000216f, 0.000254f, 0.000307f, 0.000358f,
+ 0.000269f, 0.000377f, 0.000324f, 0.000369f, 0.000405f, 0.000455f, 0.000524f, 0.000706f, 0.000701f, 0.001012f, 0.001206f, 0.001316f,
+ 0.001663f, 0.002350f, 0.003571f, 0.005505f, 0.008873f, 0.016006f, 0.033234f, 0.081848f, 0.244751f, 0.605469f, 0.934082f, 0.935059f,
+ 0.936035f, 0.935547f, 0.935547f, 0.935547f, 0.000105f, 0.000114f, 0.000113f, 0.000113f, 0.000111f, 0.000111f, 0.000112f, 0.000111f,
+ 0.000112f, 0.000112f, 0.000112f, 0.000112f, 0.000111f, 0.000112f, 0.000112f, 0.000112f, 0.000112f, 0.000112f, 0.000112f, 0.000112f,
+ 0.000105f, 0.000093f, 0.000083f, 0.000074f, 0.000066f, 0.000059f, 0.000053f, 0.000048f, 0.000043f, 0.000062f, 0.000052f, 0.000063f,
+ 0.000092f, 0.000146f, 0.000176f, 0.000216f, 0.000227f, 0.000263f, 0.000244f, 0.000267f, 0.000370f, 0.000326f, 0.000360f, 0.000391f,
+ 0.000505f, 0.000618f, 0.000726f, 0.000969f, 0.001117f, 0.001651f, 0.002131f, 0.003090f, 0.005188f, 0.009499f, 0.019836f, 0.049042f,
+ 0.159180f, 0.509766f, 0.921875f, 0.922852f, 0.922852f, 0.922363f, 0.923340f, 0.922852f, 0.000000f, 0.000000f, 0.000065f, 0.000098f,
+ 0.000096f, 0.000101f, 0.000100f, 0.000104f, 0.000104f, 0.000103f, 0.000106f, 0.000106f, 0.000106f, 0.000105f, 0.000107f, 0.000107f,
+ 0.000106f, 0.000107f, 0.000107f, 0.000108f, 0.000107f, 0.000108f, 0.000104f, 0.000092f, 0.000082f, 0.000075f, 0.000067f, 0.000059f,
+ 0.000054f, 0.000048f, 0.000044f, 0.000039f, 0.000037f, 0.000058f, 0.000066f, 0.000122f, 0.000137f, 0.000175f, 0.000208f, 0.000194f,
+ 0.000208f, 0.000240f, 0.000270f, 0.000281f, 0.000323f, 0.000364f, 0.000479f, 0.000591f, 0.000712f, 0.000986f, 0.001224f, 0.001896f,
+ 0.002996f, 0.005196f, 0.010506f, 0.027527f, 0.095581f, 0.399658f, 0.905762f, 0.906738f, 0.906250f, 0.905762f, 0.905762f, 0.907227f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000017f, 0.000030f, 0.000054f, 0.000061f, 0.000081f, 0.000087f, 0.000088f, 0.000089f, 0.000093f,
+ 0.000093f, 0.000096f, 0.000096f, 0.000097f, 0.000098f, 0.000099f, 0.000098f, 0.000100f, 0.000100f, 0.000101f, 0.000100f, 0.000101f,
+ 0.000101f, 0.000092f, 0.000082f, 0.000074f, 0.000067f, 0.000060f, 0.000054f, 0.000049f, 0.000045f, 0.000040f, 0.000036f, 0.000037f,
+ 0.000059f, 0.000077f, 0.000093f, 0.000143f, 0.000155f, 0.000188f, 0.000178f, 0.000184f, 0.000231f, 0.000234f, 0.000272f, 0.000352f,
+ 0.000420f, 0.000525f, 0.000764f, 0.001091f, 0.001653f, 0.002705f, 0.005474f, 0.013939f, 0.051880f, 0.283691f, 0.883789f, 0.884766f,
+ 0.885254f, 0.885254f, 0.885742f, 0.885254f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000013f,
+ 0.000032f, 0.000046f, 0.000050f, 0.000060f, 0.000065f, 0.000065f, 0.000075f, 0.000078f, 0.000080f, 0.000079f, 0.000084f, 0.000083f,
+ 0.000087f, 0.000087f, 0.000089f, 0.000090f, 0.000091f, 0.000091f, 0.000092f, 0.000092f, 0.000083f, 0.000075f, 0.000068f, 0.000062f,
+ 0.000056f, 0.000050f, 0.000046f, 0.000042f, 0.000037f, 0.000039f, 0.000044f, 0.000072f, 0.000068f, 0.000089f, 0.000125f, 0.000124f,
+ 0.000126f, 0.000153f, 0.000183f, 0.000212f, 0.000219f, 0.000311f, 0.000363f, 0.000566f, 0.000846f, 0.001332f, 0.002522f, 0.006252f,
+ 0.023834f, 0.175415f, 0.855957f, 0.856934f, 0.856934f, 0.856934f, 0.857422f, 0.856934f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000007f, 0.000024f, 0.000028f,
+ 0.000040f, 0.000044f, 0.000051f, 0.000053f, 0.000060f, 0.000063f, 0.000064f, 0.000067f, 0.000071f, 0.000072f, 0.000074f, 0.000076f,
+ 0.000077f, 0.000079f, 0.000079f, 0.000075f, 0.000068f, 0.000062f, 0.000056f, 0.000051f, 0.000046f, 0.000042f, 0.000038f, 0.000034f,
+ 0.000031f, 0.000030f, 0.000045f, 0.000079f, 0.000081f, 0.000107f, 0.000114f, 0.000106f, 0.000144f, 0.000136f, 0.000171f, 0.000254f,
+ 0.000377f, 0.000531f, 0.001037f, 0.002504f, 0.009140f, 0.088379f, 0.818848f, 0.820801f, 0.819824f, 0.820312f, 0.819336f, 0.820801f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000007f, 0.000014f, 0.000021f, 0.000028f,
+ 0.000034f, 0.000036f, 0.000042f, 0.000046f, 0.000049f, 0.000052f, 0.000054f, 0.000056f, 0.000059f, 0.000061f, 0.000064f, 0.000061f,
+ 0.000055f, 0.000050f, 0.000045f, 0.000041f, 0.000037f, 0.000033f, 0.000030f, 0.000027f, 0.000024f, 0.000033f, 0.000060f, 0.000059f,
+ 0.000075f, 0.000073f, 0.000101f, 0.000089f, 0.000144f, 0.000226f, 0.000384f, 0.000847f, 0.003033f, 0.031860f, 0.770020f, 0.770996f,
+ 0.772461f, 0.771973f, 0.772461f, 0.771973f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000006f, 0.000010f, 0.000016f,
+ 0.000021f, 0.000023f, 0.000029f, 0.000032f, 0.000036f, 0.000039f, 0.000042f, 0.000044f, 0.000042f, 0.000038f, 0.000035f, 0.000031f,
+ 0.000028f, 0.000025f, 0.000022f, 0.000020f, 0.000017f, 0.000024f, 0.000040f, 0.000047f, 0.000053f, 0.000063f, 0.000087f, 0.000190f,
+ 0.000666f, 0.007278f, 0.708496f, 0.709961f, 0.710449f, 0.710938f, 0.710938f, 0.710449f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f,
+ 0.000005f, 0.000010f, 0.000014f, 0.000018f, 0.000021f, 0.000024f, 0.000024f, 0.000021f, 0.000018f, 0.000016f, 0.000014f, 0.000012f,
+ 0.000008f, 0.000020f, 0.000022f, 0.000025f, 0.000073f, 0.000744f, 0.632324f, 0.632812f, 0.633789f, 0.633789f, 0.633301f, 0.632812f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000003f, 0.000007f, 0.000006f, 0.000004f, 0.000005f, 0.000007f, 0.543945f, 0.545410f,
+ 0.545410f, 0.545410f, 0.546387f, 0.545898f,
+ },
+ {
+ 0.159546f, 0.492676f, 0.684570f, 0.783203f, 0.838379f, 0.873535f, 0.897949f, 0.913574f, 0.926270f, 0.936035f, 0.943359f, 0.950195f,
+ 0.955566f, 0.959473f, 0.963379f, 0.966797f, 0.969238f, 0.972168f, 0.973633f, 0.976562f, 0.978027f, 0.979492f, 0.980957f, 0.982422f,
+ 0.983887f, 0.984863f, 0.985840f, 0.986816f, 0.987793f, 0.988770f, 0.989258f, 0.989746f, 0.990234f, 0.990723f, 0.991699f, 0.992676f,
+ 0.993164f, 0.993652f, 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.995117f, 0.995605f, 0.996582f, 0.996582f, 0.997070f, 0.997070f,
+ 0.997070f, 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.034119f, 0.154175f, 0.341309f, 0.532227f, 0.672363f, 0.763184f, 0.820801f, 0.858398f,
+ 0.885742f, 0.904297f, 0.918945f, 0.929199f, 0.938965f, 0.945801f, 0.951660f, 0.956543f, 0.961426f, 0.964355f, 0.968262f, 0.970703f,
+ 0.973145f, 0.975586f, 0.977539f, 0.979004f, 0.980469f, 0.981934f, 0.983398f, 0.984375f, 0.985352f, 0.986328f, 0.987305f, 0.988281f,
+ 0.988770f, 0.989746f, 0.990234f, 0.991211f, 0.991699f, 0.992676f, 0.993164f, 0.993164f, 0.993652f, 0.994141f, 0.994629f, 0.995117f,
+ 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.013390f, 0.056915f, 0.134155f, 0.257080f,
+ 0.412109f, 0.560547f, 0.675781f, 0.755859f, 0.812012f, 0.851074f, 0.877930f, 0.898926f, 0.913574f, 0.925781f, 0.935059f, 0.942871f,
+ 0.949707f, 0.954590f, 0.959473f, 0.963379f, 0.966797f, 0.969238f, 0.971680f, 0.975098f, 0.976562f, 0.978516f, 0.979980f, 0.980957f,
+ 0.982422f, 0.984375f, 0.985352f, 0.985840f, 0.987305f, 0.987793f, 0.988770f, 0.989746f, 0.990723f, 0.991211f, 0.991699f, 0.992188f,
+ 0.992676f, 0.993164f, 0.993652f, 0.994141f, 0.994629f, 0.995605f, 0.995605f, 0.995605f, 0.996582f, 0.996582f, 0.997070f, 0.997070f,
+ 0.997559f, 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.006939f, 0.027863f, 0.061951f, 0.117859f, 0.204834f, 0.324707f, 0.460205f, 0.585449f, 0.684570f, 0.757324f, 0.810059f, 0.847168f,
+ 0.874023f, 0.895996f, 0.910645f, 0.922852f, 0.933105f, 0.940918f, 0.947754f, 0.953613f, 0.958496f, 0.961914f, 0.965820f, 0.968750f,
+ 0.971680f, 0.974121f, 0.976074f, 0.978027f, 0.979492f, 0.981445f, 0.982910f, 0.983887f, 0.984863f, 0.986328f, 0.987305f, 0.988281f,
+ 0.988770f, 0.989746f, 0.990234f, 0.990723f, 0.991699f, 0.992188f, 0.993164f, 0.993652f, 0.993652f, 0.994141f, 0.995117f, 0.995605f,
+ 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.004211f, 0.016022f, 0.034119f, 0.061432f, 0.104797f, 0.170288f, 0.262695f, 0.377686f,
+ 0.499756f, 0.608887f, 0.696777f, 0.762207f, 0.810547f, 0.847168f, 0.873535f, 0.893066f, 0.910156f, 0.922852f, 0.932617f, 0.939941f,
+ 0.946777f, 0.953125f, 0.958496f, 0.961914f, 0.965332f, 0.968750f, 0.971680f, 0.973633f, 0.975586f, 0.977539f, 0.979492f, 0.981445f,
+ 0.982910f, 0.984375f, 0.985840f, 0.986328f, 0.987793f, 0.987793f, 0.989258f, 0.989746f, 0.990723f, 0.991211f, 0.992188f, 0.992676f,
+ 0.992676f, 0.993652f, 0.994141f, 0.994629f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.997559f,
+ 0.998047f, 0.998535f, 0.999512f, 0.999512f, 0.999023f, 0.999512f, 0.999023f, 0.999023f, 0.002724f, 0.010384f, 0.020813f, 0.036285f,
+ 0.059784f, 0.093933f, 0.145508f, 0.218018f, 0.313232f, 0.424072f, 0.534180f, 0.632812f, 0.709961f, 0.769531f, 0.815918f, 0.848145f,
+ 0.874512f, 0.894043f, 0.909668f, 0.922363f, 0.932129f, 0.939941f, 0.946777f, 0.953125f, 0.958008f, 0.961914f, 0.965332f, 0.968750f,
+ 0.971680f, 0.973633f, 0.976562f, 0.978516f, 0.979980f, 0.981445f, 0.982910f, 0.984863f, 0.985352f, 0.986816f, 0.987793f, 0.988281f,
+ 0.988770f, 0.989746f, 0.990723f, 0.991211f, 0.992188f, 0.992676f, 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996094f,
+ 0.996094f, 0.996582f, 0.996582f, 0.997559f, 0.997559f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.002113f, 0.007004f, 0.014091f, 0.023895f, 0.037811f, 0.057373f, 0.085632f, 0.127075f, 0.185425f, 0.263672f, 0.360596f, 0.465576f,
+ 0.566895f, 0.655762f, 0.725586f, 0.779297f, 0.822266f, 0.853516f, 0.877441f, 0.895996f, 0.911621f, 0.923828f, 0.933105f, 0.940918f,
+ 0.947754f, 0.953613f, 0.957520f, 0.962402f, 0.965820f, 0.968750f, 0.972168f, 0.974121f, 0.976074f, 0.978027f, 0.980469f, 0.981934f,
+ 0.983398f, 0.984863f, 0.985352f, 0.986328f, 0.988281f, 0.988281f, 0.989258f, 0.990234f, 0.991211f, 0.992188f, 0.992676f, 0.993164f,
+ 0.993652f, 0.994629f, 0.994629f, 0.995605f, 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.001575f, 0.005211f, 0.010040f, 0.016220f, 0.025665f, 0.037415f, 0.054138f, 0.078491f,
+ 0.112915f, 0.160156f, 0.225464f, 0.308594f, 0.405029f, 0.506348f, 0.599121f, 0.678711f, 0.743164f, 0.791016f, 0.829590f, 0.859375f,
+ 0.881836f, 0.899414f, 0.913086f, 0.924805f, 0.934570f, 0.942383f, 0.948730f, 0.955078f, 0.958984f, 0.963379f, 0.966797f, 0.970215f,
+ 0.972168f, 0.974609f, 0.977051f, 0.979004f, 0.980957f, 0.981934f, 0.983398f, 0.984863f, 0.986328f, 0.987305f, 0.988281f, 0.989258f,
+ 0.990234f, 0.991211f, 0.991699f, 0.992188f, 0.993164f, 0.993652f, 0.994629f, 0.994629f, 0.995117f, 0.995605f, 0.995605f, 0.996094f,
+ 0.996582f, 0.997559f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.000985f, 0.004086f, 0.007362f, 0.011887f,
+ 0.018127f, 0.026199f, 0.036804f, 0.052002f, 0.072754f, 0.101318f, 0.140747f, 0.195190f, 0.266113f, 0.352539f, 0.448730f, 0.543945f,
+ 0.630371f, 0.702637f, 0.759277f, 0.803711f, 0.839355f, 0.865234f, 0.886719f, 0.903320f, 0.916504f, 0.927734f, 0.936523f, 0.944336f,
+ 0.950195f, 0.955566f, 0.959961f, 0.964355f, 0.967773f, 0.970215f, 0.973145f, 0.975586f, 0.978027f, 0.979004f, 0.980957f, 0.982910f,
+ 0.984375f, 0.985352f, 0.987305f, 0.987305f, 0.988770f, 0.990234f, 0.990234f, 0.991699f, 0.991699f, 0.993164f, 0.993164f, 0.993652f,
+ 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.998535f, 0.999023f,
+ 0.000829f, 0.002878f, 0.005596f, 0.009109f, 0.013359f, 0.019089f, 0.026901f, 0.036774f, 0.049347f, 0.067200f, 0.091736f, 0.125854f,
+ 0.171631f, 0.232544f, 0.308594f, 0.397461f, 0.491455f, 0.581055f, 0.659668f, 0.724609f, 0.775879f, 0.817383f, 0.848633f, 0.873047f,
+ 0.892090f, 0.907715f, 0.920410f, 0.930664f, 0.939453f, 0.946289f, 0.951660f, 0.957520f, 0.960938f, 0.965820f, 0.968750f, 0.972168f,
+ 0.974609f, 0.976562f, 0.978516f, 0.980469f, 0.981934f, 0.983887f, 0.984863f, 0.986328f, 0.986816f, 0.988770f, 0.989746f, 0.990234f,
+ 0.991211f, 0.991699f, 0.992676f, 0.993164f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.995605f, 0.996582f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.000836f, 0.002403f, 0.004837f, 0.006950f, 0.010269f, 0.014679f, 0.019699f, 0.026291f,
+ 0.035431f, 0.046875f, 0.062744f, 0.084045f, 0.113403f, 0.152588f, 0.204712f, 0.271729f, 0.353271f, 0.443115f, 0.532715f, 0.617188f,
+ 0.688477f, 0.748047f, 0.793945f, 0.829102f, 0.857422f, 0.880371f, 0.898438f, 0.912598f, 0.924316f, 0.934082f, 0.941406f, 0.948242f,
+ 0.954590f, 0.959473f, 0.963379f, 0.967285f, 0.970215f, 0.973145f, 0.975586f, 0.977539f, 0.979980f, 0.981445f, 0.982910f, 0.984375f,
+ 0.985840f, 0.987305f, 0.988281f, 0.988770f, 0.990234f, 0.990723f, 0.991699f, 0.992676f, 0.993164f, 0.993652f, 0.994141f, 0.995117f,
+ 0.995605f, 0.996094f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.000698f, 0.002052f, 0.003618f, 0.005703f,
+ 0.008430f, 0.011230f, 0.015083f, 0.019821f, 0.026474f, 0.034393f, 0.044922f, 0.059204f, 0.077698f, 0.102661f, 0.136963f, 0.182373f,
+ 0.241089f, 0.314941f, 0.398926f, 0.489014f, 0.575195f, 0.652344f, 0.717285f, 0.769043f, 0.810059f, 0.842773f, 0.869141f, 0.888672f,
+ 0.904785f, 0.917969f, 0.928711f, 0.936523f, 0.945312f, 0.951660f, 0.957031f, 0.961426f, 0.964844f, 0.968750f, 0.971680f, 0.974121f,
+ 0.976562f, 0.979004f, 0.980469f, 0.982422f, 0.983887f, 0.985352f, 0.986816f, 0.987793f, 0.988770f, 0.990234f, 0.990723f, 0.991699f,
+ 0.992676f, 0.993164f, 0.994141f, 0.994141f, 0.994629f, 0.995605f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000244f, 0.001565f, 0.002975f, 0.004433f, 0.006596f, 0.008957f, 0.012215f, 0.015533f, 0.020294f, 0.026062f, 0.033722f, 0.042816f,
+ 0.055237f, 0.071960f, 0.094543f, 0.124023f, 0.164185f, 0.216309f, 0.281738f, 0.360352f, 0.446533f, 0.534180f, 0.615234f, 0.686523f,
+ 0.743652f, 0.790527f, 0.825684f, 0.855957f, 0.878418f, 0.895996f, 0.911133f, 0.923340f, 0.933105f, 0.941406f, 0.948242f, 0.953613f,
+ 0.959473f, 0.963379f, 0.966797f, 0.970703f, 0.973145f, 0.976074f, 0.978516f, 0.980469f, 0.982422f, 0.983398f, 0.984863f, 0.986328f,
+ 0.987305f, 0.989258f, 0.989746f, 0.990723f, 0.991699f, 0.992676f, 0.993164f, 0.993652f, 0.994141f, 0.995117f, 0.998047f, 0.998535f,
+ 0.998535f, 0.998535f, 0.998535f, 0.998047f, 0.000365f, 0.001394f, 0.002546f, 0.004055f, 0.005394f, 0.007465f, 0.009674f, 0.012070f,
+ 0.015556f, 0.019913f, 0.025696f, 0.032623f, 0.041046f, 0.052643f, 0.067383f, 0.087463f, 0.113708f, 0.148315f, 0.194946f, 0.254395f,
+ 0.326416f, 0.408691f, 0.495117f, 0.579102f, 0.654297f, 0.716797f, 0.768066f, 0.809570f, 0.843262f, 0.868652f, 0.888184f, 0.904785f,
+ 0.918457f, 0.929199f, 0.937500f, 0.945801f, 0.951660f, 0.957520f, 0.961914f, 0.965820f, 0.969238f, 0.972656f, 0.975098f, 0.978027f,
+ 0.979492f, 0.981934f, 0.983398f, 0.984863f, 0.986328f, 0.987793f, 0.989258f, 0.989746f, 0.991211f, 0.991211f, 0.992188f, 0.993164f,
+ 0.993652f, 0.994629f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.000596f, 0.001077f, 0.001882f, 0.003033f,
+ 0.004559f, 0.006241f, 0.007805f, 0.010002f, 0.012840f, 0.015900f, 0.019974f, 0.025131f, 0.031250f, 0.039337f, 0.049988f, 0.063843f,
+ 0.080933f, 0.105164f, 0.135986f, 0.176880f, 0.230103f, 0.296631f, 0.374268f, 0.459961f, 0.544434f, 0.623535f, 0.691895f, 0.748535f,
+ 0.792969f, 0.829102f, 0.857422f, 0.880371f, 0.897949f, 0.913086f, 0.924805f, 0.934570f, 0.942383f, 0.949219f, 0.955566f, 0.960938f,
+ 0.964844f, 0.968750f, 0.971191f, 0.974121f, 0.977051f, 0.979004f, 0.980957f, 0.982910f, 0.984863f, 0.985840f, 0.987305f, 0.989258f,
+ 0.989746f, 0.991211f, 0.991211f, 0.992676f, 0.993164f, 0.993652f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
+ 0.000243f, 0.001173f, 0.001889f, 0.002661f, 0.003933f, 0.005131f, 0.006496f, 0.008324f, 0.010574f, 0.013115f, 0.015839f, 0.019913f,
+ 0.024445f, 0.030609f, 0.037781f, 0.047333f, 0.059906f, 0.075928f, 0.097229f, 0.124939f, 0.161743f, 0.209595f, 0.271240f, 0.343994f,
+ 0.426758f, 0.511719f, 0.592773f, 0.666504f, 0.727051f, 0.776855f, 0.815918f, 0.847656f, 0.871582f, 0.892090f, 0.907715f, 0.920898f,
+ 0.931152f, 0.940918f, 0.947754f, 0.953613f, 0.958496f, 0.963867f, 0.967773f, 0.970703f, 0.974121f, 0.976074f, 0.979004f, 0.980469f,
+ 0.982910f, 0.984375f, 0.985840f, 0.987305f, 0.988770f, 0.990234f, 0.990234f, 0.992188f, 0.992188f, 0.993164f, 0.997070f, 0.997559f,
+ 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.000351f, 0.000842f, 0.001560f, 0.002363f, 0.003258f, 0.004131f, 0.005272f, 0.007179f,
+ 0.008682f, 0.010643f, 0.013016f, 0.016037f, 0.019516f, 0.024078f, 0.029602f, 0.036591f, 0.045044f, 0.056641f, 0.071350f, 0.090576f,
+ 0.116211f, 0.149414f, 0.193237f, 0.248779f, 0.317871f, 0.396973f, 0.481201f, 0.564453f, 0.640137f, 0.705566f, 0.759766f, 0.802734f,
+ 0.836914f, 0.863281f, 0.885742f, 0.902832f, 0.916992f, 0.927734f, 0.937012f, 0.945801f, 0.952637f, 0.958008f, 0.961914f, 0.966309f,
+ 0.970703f, 0.974121f, 0.976074f, 0.978516f, 0.980957f, 0.982910f, 0.984863f, 0.985840f, 0.987305f, 0.988281f, 0.989746f, 0.990723f,
+ 0.991211f, 0.992676f, 0.997070f, 0.997559f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.000000f, 0.000886f, 0.001405f, 0.001915f,
+ 0.002651f, 0.003870f, 0.004845f, 0.006035f, 0.006912f, 0.008812f, 0.010887f, 0.013229f, 0.016022f, 0.019196f, 0.023590f, 0.028992f,
+ 0.035248f, 0.043304f, 0.053711f, 0.066956f, 0.085083f, 0.107727f, 0.138428f, 0.178589f, 0.229980f, 0.293945f, 0.370117f, 0.453369f,
+ 0.537109f, 0.616699f, 0.685059f, 0.743164f, 0.790039f, 0.826660f, 0.856445f, 0.878906f, 0.897949f, 0.913574f, 0.925293f, 0.935547f,
+ 0.943848f, 0.951172f, 0.957031f, 0.961914f, 0.966797f, 0.970215f, 0.973145f, 0.976562f, 0.979004f, 0.980469f, 0.982910f, 0.984375f,
+ 0.985840f, 0.987305f, 0.988770f, 0.989746f, 0.991211f, 0.992188f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997070f,
+ 0.000104f, 0.000719f, 0.001065f, 0.001970f, 0.002544f, 0.003149f, 0.004230f, 0.005138f, 0.006119f, 0.007580f, 0.009201f, 0.010902f,
+ 0.013260f, 0.015526f, 0.019272f, 0.022858f, 0.027512f, 0.033569f, 0.041199f, 0.050873f, 0.063782f, 0.079895f, 0.101135f, 0.128906f,
+ 0.165771f, 0.213745f, 0.273193f, 0.345703f, 0.427002f, 0.511719f, 0.592773f, 0.666016f, 0.727051f, 0.776367f, 0.817871f, 0.848633f,
+ 0.875000f, 0.894531f, 0.909668f, 0.922852f, 0.934082f, 0.942383f, 0.949707f, 0.956055f, 0.961914f, 0.966309f, 0.970215f, 0.973145f,
+ 0.976562f, 0.978516f, 0.980957f, 0.982910f, 0.984375f, 0.986328f, 0.987305f, 0.988281f, 0.989746f, 0.991211f, 0.996582f, 0.997070f,
+ 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.000240f, 0.000686f, 0.001052f, 0.001375f, 0.002308f, 0.002735f, 0.003510f, 0.004269f,
+ 0.005173f, 0.006649f, 0.007442f, 0.009109f, 0.011246f, 0.012886f, 0.015732f, 0.018829f, 0.022354f, 0.026672f, 0.032867f, 0.039764f,
+ 0.048492f, 0.060455f, 0.075806f, 0.095276f, 0.121033f, 0.155273f, 0.199097f, 0.255859f, 0.324463f, 0.404053f, 0.488525f, 0.571289f,
+ 0.646484f, 0.711426f, 0.765625f, 0.808105f, 0.841797f, 0.869141f, 0.890137f, 0.907227f, 0.920898f, 0.931641f, 0.940918f, 0.948730f,
+ 0.955078f, 0.960449f, 0.965820f, 0.969727f, 0.972656f, 0.976562f, 0.978516f, 0.980957f, 0.982910f, 0.984863f, 0.986328f, 0.987793f,
+ 0.989746f, 0.990723f, 0.996094f, 0.996582f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.000244f, 0.000597f, 0.000939f, 0.001369f,
+ 0.001999f, 0.002329f, 0.003105f, 0.003786f, 0.004395f, 0.005413f, 0.006474f, 0.007793f, 0.009254f, 0.010971f, 0.012970f, 0.015526f,
+ 0.018112f, 0.022049f, 0.026581f, 0.031586f, 0.038666f, 0.046967f, 0.057617f, 0.071777f, 0.089783f, 0.113953f, 0.145264f, 0.186646f,
+ 0.239990f, 0.305908f, 0.383301f, 0.467285f, 0.551270f, 0.629883f, 0.697266f, 0.754883f, 0.799805f, 0.835938f, 0.864258f, 0.886719f,
+ 0.905273f, 0.918945f, 0.931152f, 0.940918f, 0.948242f, 0.955078f, 0.961426f, 0.965332f, 0.969727f, 0.973633f, 0.976074f, 0.979004f,
+ 0.980957f, 0.983398f, 0.984863f, 0.987305f, 0.988281f, 0.989258f, 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.996582f, 0.996582f,
+ 0.000000f, 0.000475f, 0.000891f, 0.001390f, 0.001730f, 0.002060f, 0.002501f, 0.003109f, 0.003836f, 0.004837f, 0.005852f, 0.006859f,
+ 0.007740f, 0.009216f, 0.010918f, 0.012863f, 0.014915f, 0.017731f, 0.021317f, 0.025482f, 0.030930f, 0.037262f, 0.044891f, 0.055115f,
+ 0.068298f, 0.085510f, 0.107910f, 0.137207f, 0.176025f, 0.226929f, 0.289551f, 0.364746f, 0.447998f, 0.532715f, 0.613770f, 0.685547f,
+ 0.744629f, 0.791992f, 0.830078f, 0.860352f, 0.884277f, 0.903320f, 0.917969f, 0.930176f, 0.939941f, 0.947754f, 0.954590f, 0.961426f,
+ 0.966309f, 0.970215f, 0.973145f, 0.976562f, 0.979492f, 0.981445f, 0.983398f, 0.985352f, 0.987793f, 0.988281f, 0.995605f, 0.996094f,
+ 0.996094f, 0.996582f, 0.996094f, 0.996094f, 0.000102f, 0.000243f, 0.000844f, 0.001124f, 0.001554f, 0.002077f, 0.002098f, 0.002682f,
+ 0.003357f, 0.004280f, 0.005035f, 0.005764f, 0.006805f, 0.007633f, 0.009354f, 0.010872f, 0.012665f, 0.015099f, 0.017258f, 0.020599f,
+ 0.024887f, 0.029495f, 0.035522f, 0.042999f, 0.053070f, 0.065125f, 0.081299f, 0.102661f, 0.130371f, 0.166992f, 0.215088f, 0.275635f,
+ 0.348877f, 0.431641f, 0.517578f, 0.600098f, 0.672852f, 0.735352f, 0.785645f, 0.826172f, 0.856934f, 0.881836f, 0.900879f, 0.916992f,
+ 0.930176f, 0.940430f, 0.947754f, 0.955078f, 0.960938f, 0.966309f, 0.969238f, 0.973633f, 0.977051f, 0.979492f, 0.981934f, 0.983887f,
+ 0.986328f, 0.987793f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996094f, 0.996094f, 0.000241f, 0.000242f, 0.000823f, 0.000956f,
+ 0.001225f, 0.001549f, 0.002031f, 0.002613f, 0.003124f, 0.003574f, 0.004467f, 0.004955f, 0.005672f, 0.006752f, 0.007603f, 0.009186f,
+ 0.010704f, 0.012741f, 0.014366f, 0.017487f, 0.020142f, 0.024002f, 0.028915f, 0.034943f, 0.041656f, 0.050964f, 0.062622f, 0.077881f,
+ 0.097961f, 0.124207f, 0.158936f, 0.204590f, 0.263184f, 0.334961f, 0.416748f, 0.502930f, 0.587891f, 0.664062f, 0.728516f, 0.780762f,
+ 0.822266f, 0.854492f, 0.879395f, 0.900879f, 0.916504f, 0.928711f, 0.940430f, 0.948730f, 0.955566f, 0.961914f, 0.967285f, 0.970215f,
+ 0.974121f, 0.977539f, 0.979980f, 0.982422f, 0.984863f, 0.986816f, 0.994629f, 0.995605f, 0.995605f, 0.995605f, 0.995605f, 0.995605f,
+ 0.000000f, 0.000473f, 0.000607f, 0.000921f, 0.000957f, 0.001448f, 0.001884f, 0.002270f, 0.002703f, 0.002998f, 0.003862f, 0.004307f,
+ 0.005074f, 0.005665f, 0.006737f, 0.007851f, 0.009216f, 0.010735f, 0.012459f, 0.014572f, 0.016998f, 0.019821f, 0.023605f, 0.027969f,
+ 0.033783f, 0.040192f, 0.049286f, 0.060303f, 0.074829f, 0.093750f, 0.118774f, 0.152222f, 0.195801f, 0.252441f, 0.322754f, 0.404053f,
+ 0.491943f, 0.577637f, 0.655273f, 0.722168f, 0.776367f, 0.820312f, 0.854004f, 0.878906f, 0.900879f, 0.916992f, 0.929688f, 0.940430f,
+ 0.949707f, 0.956055f, 0.962402f, 0.967285f, 0.971191f, 0.975586f, 0.978516f, 0.980957f, 0.983398f, 0.985352f, 0.994141f, 0.995117f,
+ 0.995117f, 0.995605f, 0.995117f, 0.995605f, 0.000000f, 0.000444f, 0.000605f, 0.000649f, 0.000926f, 0.001096f, 0.001624f, 0.001669f,
+ 0.002373f, 0.002716f, 0.003231f, 0.003769f, 0.004395f, 0.005005f, 0.005878f, 0.006710f, 0.007793f, 0.008957f, 0.010712f, 0.012230f,
+ 0.014244f, 0.016693f, 0.019531f, 0.022827f, 0.027100f, 0.032318f, 0.038971f, 0.047302f, 0.058105f, 0.072021f, 0.089966f, 0.114319f,
+ 0.146362f, 0.188965f, 0.244019f, 0.312988f, 0.394287f, 0.482178f, 0.569824f, 0.650391f, 0.718262f, 0.774414f, 0.819336f, 0.853027f,
+ 0.880371f, 0.900879f, 0.917969f, 0.930664f, 0.940918f, 0.950684f, 0.957031f, 0.962891f, 0.968262f, 0.972656f, 0.976562f, 0.979004f,
+ 0.981934f, 0.984375f, 0.994141f, 0.994629f, 0.994629f, 0.995117f, 0.994629f, 0.995117f, 0.000000f, 0.000336f, 0.000601f, 0.000712f,
+ 0.000810f, 0.001174f, 0.001286f, 0.001618f, 0.002037f, 0.002592f, 0.002920f, 0.003223f, 0.003847f, 0.004463f, 0.005119f, 0.006020f,
+ 0.006783f, 0.007957f, 0.008888f, 0.010590f, 0.012230f, 0.013885f, 0.016220f, 0.019318f, 0.022278f, 0.026474f, 0.031403f, 0.037781f,
+ 0.046021f, 0.055969f, 0.069397f, 0.086975f, 0.110413f, 0.140991f, 0.182739f, 0.236694f, 0.304932f, 0.385986f, 0.475586f, 0.563965f,
+ 0.646484f, 0.716797f, 0.772461f, 0.818359f, 0.853027f, 0.880859f, 0.901855f, 0.918945f, 0.932129f, 0.942383f, 0.951172f, 0.958496f,
+ 0.964355f, 0.969238f, 0.973633f, 0.977051f, 0.979980f, 0.982910f, 0.993652f, 0.994141f, 0.994629f, 0.994141f, 0.994141f, 0.994629f,
+ 0.000000f, 0.000244f, 0.000418f, 0.000597f, 0.000600f, 0.001085f, 0.001236f, 0.001535f, 0.001970f, 0.002096f, 0.002354f, 0.002834f,
+ 0.003323f, 0.003822f, 0.004463f, 0.005146f, 0.005798f, 0.006859f, 0.007587f, 0.008827f, 0.009956f, 0.011833f, 0.013725f, 0.015945f,
+ 0.018585f, 0.021988f, 0.025665f, 0.030807f, 0.036774f, 0.044373f, 0.054108f, 0.067383f, 0.084229f, 0.106812f, 0.137207f, 0.177734f,
+ 0.230835f, 0.299072f, 0.380127f, 0.470215f, 0.560547f, 0.644531f, 0.715820f, 0.774414f, 0.820312f, 0.854980f, 0.882324f, 0.903809f,
+ 0.921387f, 0.933594f, 0.944824f, 0.952637f, 0.960449f, 0.965820f, 0.971191f, 0.974609f, 0.978027f, 0.981934f, 0.993164f, 0.994629f,
+ 0.994141f, 0.994141f, 0.994141f, 0.994141f, 0.000000f, 0.000244f, 0.000411f, 0.000589f, 0.000820f, 0.000729f, 0.001086f, 0.001301f,
+ 0.001677f, 0.001935f, 0.002312f, 0.002678f, 0.002846f, 0.003590f, 0.003914f, 0.004578f, 0.005020f, 0.005753f, 0.006706f, 0.007710f,
+ 0.008911f, 0.010155f, 0.011528f, 0.013504f, 0.015747f, 0.018036f, 0.021408f, 0.024994f, 0.029816f, 0.035858f, 0.043152f, 0.053009f,
+ 0.065491f, 0.082031f, 0.104065f, 0.133789f, 0.174072f, 0.226929f, 0.294434f, 0.376465f, 0.467773f, 0.560059f, 0.644531f, 0.717285f,
+ 0.777344f, 0.823242f, 0.857910f, 0.885742f, 0.906738f, 0.922852f, 0.936523f, 0.947266f, 0.955078f, 0.961426f, 0.967285f, 0.972656f,
+ 0.976562f, 0.979980f, 0.992676f, 0.993164f, 0.993652f, 0.993652f, 0.993652f, 0.993652f, 0.000000f, 0.000243f, 0.000243f, 0.000442f,
+ 0.000695f, 0.000759f, 0.000837f, 0.001089f, 0.001625f, 0.001702f, 0.002045f, 0.002176f, 0.002756f, 0.003063f, 0.003687f, 0.003893f,
+ 0.004456f, 0.005337f, 0.006062f, 0.006523f, 0.007572f, 0.008430f, 0.009880f, 0.011612f, 0.013237f, 0.015114f, 0.017487f, 0.020584f,
+ 0.024445f, 0.028931f, 0.034729f, 0.042023f, 0.051788f, 0.063843f, 0.079956f, 0.102295f, 0.131592f, 0.171021f, 0.223877f, 0.292236f,
+ 0.375000f, 0.468018f, 0.562012f, 0.648438f, 0.721191f, 0.781250f, 0.826660f, 0.862305f, 0.888672f, 0.909668f, 0.926270f, 0.938965f,
+ 0.949707f, 0.957520f, 0.964355f, 0.969727f, 0.974121f, 0.978027f, 0.992676f, 0.993164f, 0.993164f, 0.992676f, 0.993164f, 0.993164f,
+ 0.000000f, 0.000242f, 0.000242f, 0.000242f, 0.000564f, 0.000692f, 0.000826f, 0.001094f, 0.001280f, 0.001457f, 0.001673f, 0.002232f,
+ 0.002411f, 0.002789f, 0.003174f, 0.003649f, 0.003859f, 0.004349f, 0.004990f, 0.005898f, 0.006622f, 0.007496f, 0.008209f, 0.009583f,
+ 0.011284f, 0.013062f, 0.014763f, 0.017120f, 0.020020f, 0.023804f, 0.028412f, 0.033905f, 0.041016f, 0.050140f, 0.062469f, 0.078552f,
+ 0.100159f, 0.129272f, 0.169067f, 0.222290f, 0.291504f, 0.376465f, 0.470703f, 0.566406f, 0.653320f, 0.728027f, 0.786621f, 0.832031f,
+ 0.866699f, 0.893555f, 0.914062f, 0.929688f, 0.942383f, 0.952148f, 0.959961f, 0.966797f, 0.972168f, 0.976074f, 0.991211f, 0.992188f,
+ 0.992676f, 0.992188f, 0.992676f, 0.992676f, 0.000241f, 0.000241f, 0.000240f, 0.000242f, 0.000486f, 0.000637f, 0.000916f, 0.000933f,
+ 0.001003f, 0.001284f, 0.001584f, 0.001925f, 0.002134f, 0.002502f, 0.002731f, 0.003134f, 0.003435f, 0.004036f, 0.004379f, 0.005077f,
+ 0.005688f, 0.006557f, 0.007347f, 0.007942f, 0.009506f, 0.010712f, 0.012527f, 0.014603f, 0.016693f, 0.019592f, 0.023285f, 0.027512f,
+ 0.033173f, 0.040283f, 0.049347f, 0.061432f, 0.077271f, 0.098938f, 0.128052f, 0.168091f, 0.222168f, 0.292725f, 0.379150f, 0.476807f,
+ 0.573730f, 0.662598f, 0.735840f, 0.794434f, 0.839844f, 0.873535f, 0.898926f, 0.918945f, 0.934082f, 0.945312f, 0.955566f, 0.962402f,
+ 0.969238f, 0.974609f, 0.990723f, 0.991699f, 0.992188f, 0.992188f, 0.992188f, 0.992188f, 0.000000f, 0.000238f, 0.000240f, 0.000362f,
+ 0.000362f, 0.000521f, 0.000631f, 0.000909f, 0.000937f, 0.001249f, 0.001373f, 0.001693f, 0.001746f, 0.002184f, 0.002436f, 0.002680f,
+ 0.003094f, 0.003576f, 0.003828f, 0.004463f, 0.004990f, 0.005589f, 0.006439f, 0.006943f, 0.008217f, 0.009384f, 0.010719f, 0.012184f,
+ 0.014130f, 0.016373f, 0.019241f, 0.022675f, 0.027161f, 0.032379f, 0.039307f, 0.048645f, 0.060455f, 0.076416f, 0.097778f, 0.127441f,
+ 0.168213f, 0.223633f, 0.296387f, 0.385986f, 0.485107f, 0.583984f, 0.673340f, 0.746582f, 0.804199f, 0.848633f, 0.880371f, 0.905273f,
+ 0.923828f, 0.938477f, 0.949707f, 0.958984f, 0.965820f, 0.972656f, 0.990234f, 0.991211f, 0.991211f, 0.991211f, 0.991211f, 0.991211f,
+ 0.000000f, 0.000234f, 0.000238f, 0.000236f, 0.000360f, 0.000482f, 0.000614f, 0.000786f, 0.000900f, 0.001056f, 0.001336f, 0.001466f,
+ 0.001671f, 0.001907f, 0.002333f, 0.002546f, 0.002871f, 0.003067f, 0.003500f, 0.003813f, 0.004425f, 0.004574f, 0.005459f, 0.006092f,
+ 0.006660f, 0.007660f, 0.008987f, 0.010071f, 0.011841f, 0.013847f, 0.016022f, 0.018829f, 0.022339f, 0.026779f, 0.031677f, 0.038910f,
+ 0.047913f, 0.059601f, 0.075684f, 0.097290f, 0.127319f, 0.169189f, 0.226807f, 0.302490f, 0.394775f, 0.497314f, 0.598633f, 0.686523f,
+ 0.759766f, 0.814941f, 0.857422f, 0.888672f, 0.912109f, 0.930176f, 0.943359f, 0.954102f, 0.962402f, 0.968750f, 0.988770f, 0.990234f,
+ 0.990234f, 0.990234f, 0.991211f, 0.990723f, 0.000000f, 0.000036f, 0.000166f, 0.000357f, 0.000356f, 0.000478f, 0.000566f, 0.000638f,
+ 0.000893f, 0.001146f, 0.001242f, 0.001330f, 0.001502f, 0.001773f, 0.001918f, 0.002024f, 0.002501f, 0.002604f, 0.003067f, 0.003334f,
+ 0.003708f, 0.004044f, 0.004646f, 0.005268f, 0.006241f, 0.006931f, 0.007774f, 0.008911f, 0.010277f, 0.011475f, 0.013542f, 0.015732f,
+ 0.018417f, 0.022049f, 0.026154f, 0.031189f, 0.038269f, 0.047119f, 0.059265f, 0.075256f, 0.097534f, 0.128906f, 0.172119f, 0.231934f,
+ 0.311035f, 0.407715f, 0.513184f, 0.615723f, 0.703613f, 0.773926f, 0.827637f, 0.867188f, 0.897461f, 0.919434f, 0.936035f, 0.948730f,
+ 0.958984f, 0.966309f, 0.988770f, 0.989746f, 0.989746f, 0.990234f, 0.989746f, 0.989746f, 0.000000f, 0.000028f, 0.000093f, 0.000334f,
+ 0.000465f, 0.000472f, 0.000373f, 0.000685f, 0.000695f, 0.001027f, 0.001128f, 0.001155f, 0.001419f, 0.001435f, 0.001760f, 0.001850f,
+ 0.002241f, 0.002373f, 0.002604f, 0.002821f, 0.003334f, 0.003666f, 0.004139f, 0.004627f, 0.005207f, 0.005886f, 0.006596f, 0.007580f,
+ 0.008705f, 0.009911f, 0.011520f, 0.013237f, 0.015427f, 0.017944f, 0.021423f, 0.025497f, 0.030945f, 0.037537f, 0.046692f, 0.058624f,
+ 0.075317f, 0.098267f, 0.130493f, 0.176025f, 0.239136f, 0.323242f, 0.424561f, 0.533691f, 0.636230f, 0.723145f, 0.790039f, 0.841797f,
+ 0.880371f, 0.906738f, 0.926758f, 0.941406f, 0.953613f, 0.963379f, 0.987793f, 0.988770f, 0.988770f, 0.989258f, 0.989258f, 0.989258f,
+ 0.000000f, 0.000000f, 0.000047f, 0.000321f, 0.000332f, 0.000351f, 0.000470f, 0.000596f, 0.000655f, 0.000727f, 0.001008f, 0.001112f,
+ 0.001350f, 0.001379f, 0.001380f, 0.001751f, 0.002008f, 0.002151f, 0.002327f, 0.002548f, 0.002691f, 0.003056f, 0.003475f, 0.003925f,
+ 0.004749f, 0.005161f, 0.005863f, 0.006538f, 0.007153f, 0.008453f, 0.009789f, 0.010986f, 0.013168f, 0.015121f, 0.017563f, 0.020966f,
+ 0.025009f, 0.030151f, 0.037048f, 0.046570f, 0.058624f, 0.075623f, 0.099243f, 0.133667f, 0.181641f, 0.249756f, 0.338623f, 0.445312f,
+ 0.556641f, 0.659180f, 0.744141f, 0.808594f, 0.855957f, 0.890137f, 0.916992f, 0.934570f, 0.949219f, 0.959473f, 0.986816f, 0.987793f,
+ 0.987793f, 0.987793f, 0.987793f, 0.988281f, 0.000000f, 0.000000f, 0.000000f, 0.000244f, 0.000429f, 0.000440f, 0.000348f, 0.000592f,
+ 0.000606f, 0.000755f, 0.000690f, 0.000935f, 0.001172f, 0.001257f, 0.001368f, 0.001458f, 0.001786f, 0.001809f, 0.002060f, 0.002274f,
+ 0.002478f, 0.002642f, 0.002987f, 0.003435f, 0.003866f, 0.004337f, 0.005066f, 0.005409f, 0.006355f, 0.007111f, 0.008011f, 0.009392f,
+ 0.011032f, 0.012321f, 0.014717f, 0.017319f, 0.020432f, 0.024551f, 0.029953f, 0.036835f, 0.045929f, 0.058716f, 0.076416f, 0.101562f,
+ 0.137695f, 0.189453f, 0.262451f, 0.358154f, 0.470215f, 0.584961f, 0.686523f, 0.767578f, 0.828125f, 0.871582f, 0.903809f, 0.926270f,
+ 0.941895f, 0.956055f, 0.985352f, 0.986328f, 0.986816f, 0.986816f, 0.986816f, 0.986816f, 0.000000f, 0.000000f, 0.000000f, 0.000119f,
+ 0.000237f, 0.000314f, 0.000570f, 0.000575f, 0.000583f, 0.000632f, 0.000651f, 0.000789f, 0.000947f, 0.001097f, 0.001300f, 0.001320f,
+ 0.001384f, 0.001443f, 0.001641f, 0.001869f, 0.002047f, 0.002396f, 0.002634f, 0.003025f, 0.003412f, 0.003757f, 0.004238f, 0.004620f,
+ 0.005463f, 0.006168f, 0.007072f, 0.008080f, 0.009155f, 0.010590f, 0.012306f, 0.014175f, 0.016769f, 0.020081f, 0.023972f, 0.029495f,
+ 0.036560f, 0.045959f, 0.059265f, 0.078125f, 0.104797f, 0.143677f, 0.199951f, 0.279785f, 0.382812f, 0.500977f, 0.616699f, 0.716309f,
+ 0.791992f, 0.847168f, 0.887207f, 0.915527f, 0.936523f, 0.950684f, 0.984375f, 0.985352f, 0.986328f, 0.985840f, 0.986328f, 0.985840f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000205f, 0.000239f, 0.000299f, 0.000537f, 0.000574f, 0.000696f, 0.000583f, 0.000740f,
+ 0.000778f, 0.000867f, 0.001013f, 0.001257f, 0.001325f, 0.001277f, 0.001416f, 0.001718f, 0.001965f, 0.002079f, 0.002356f, 0.002577f,
+ 0.002771f, 0.003305f, 0.003693f, 0.004028f, 0.004593f, 0.005234f, 0.005905f, 0.006802f, 0.007698f, 0.008553f, 0.009995f, 0.011635f,
+ 0.013824f, 0.016174f, 0.019547f, 0.023544f, 0.029114f, 0.036377f, 0.046417f, 0.060211f, 0.080017f, 0.108643f, 0.151611f, 0.213379f,
+ 0.301758f, 0.414062f, 0.537598f, 0.653320f, 0.748047f, 0.817871f, 0.868164f, 0.903320f, 0.928711f, 0.945801f, 0.982910f, 0.983887f,
+ 0.984375f, 0.984375f, 0.984863f, 0.984375f, 0.000000f, 0.000000f, 0.000045f, 0.000105f, 0.000114f, 0.000340f, 0.000371f, 0.000501f,
+ 0.000639f, 0.000554f, 0.000687f, 0.000675f, 0.000711f, 0.000738f, 0.000824f, 0.001092f, 0.001040f, 0.001185f, 0.001212f, 0.001408f,
+ 0.001624f, 0.001813f, 0.001982f, 0.002182f, 0.002634f, 0.002748f, 0.003252f, 0.003540f, 0.004089f, 0.004505f, 0.005001f, 0.005657f,
+ 0.006500f, 0.007195f, 0.008286f, 0.009750f, 0.011208f, 0.013420f, 0.015762f, 0.019226f, 0.023209f, 0.029144f, 0.036591f, 0.047150f,
+ 0.061615f, 0.082947f, 0.114014f, 0.161621f, 0.231323f, 0.329834f, 0.451416f, 0.579590f, 0.692871f, 0.780273f, 0.844238f, 0.888184f,
+ 0.917969f, 0.939453f, 0.981445f, 0.982422f, 0.982910f, 0.982910f, 0.982910f, 0.982910f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000208f, 0.000311f, 0.000238f, 0.000337f, 0.000524f, 0.000617f, 0.000533f, 0.000675f, 0.000665f, 0.000776f, 0.000840f, 0.000819f,
+ 0.000902f, 0.001169f, 0.001130f, 0.001178f, 0.001382f, 0.001571f, 0.001941f, 0.001932f, 0.002138f, 0.002306f, 0.002586f, 0.002937f,
+ 0.003468f, 0.003740f, 0.004292f, 0.004704f, 0.005444f, 0.006081f, 0.007019f, 0.008255f, 0.009521f, 0.010796f, 0.012840f, 0.015503f,
+ 0.018784f, 0.023178f, 0.029129f, 0.036774f, 0.047699f, 0.063416f, 0.086548f, 0.121399f, 0.175293f, 0.254883f, 0.365234f, 0.496582f,
+ 0.626953f, 0.733398f, 0.813477f, 0.869629f, 0.906738f, 0.933105f, 0.979980f, 0.980957f, 0.981445f, 0.981445f, 0.980957f, 0.981445f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000208f, 0.000312f, 0.000236f, 0.000343f, 0.000475f, 0.000496f, 0.000528f,
+ 0.000659f, 0.000582f, 0.000685f, 0.000710f, 0.000761f, 0.000784f, 0.000941f, 0.001013f, 0.001117f, 0.001339f, 0.001500f, 0.001623f,
+ 0.001769f, 0.002039f, 0.002298f, 0.002565f, 0.002802f, 0.003119f, 0.003471f, 0.003857f, 0.004658f, 0.005177f, 0.005836f, 0.006752f,
+ 0.007324f, 0.008911f, 0.010422f, 0.012527f, 0.015373f, 0.018585f, 0.022964f, 0.029037f, 0.037231f, 0.049072f, 0.066345f, 0.091492f,
+ 0.131470f, 0.193359f, 0.285645f, 0.409912f, 0.548828f, 0.676758f, 0.776367f, 0.845703f, 0.893066f, 0.924805f, 0.978027f, 0.979492f,
+ 0.979492f, 0.979004f, 0.979492f, 0.979492f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000166f, 0.000228f, 0.000227f,
+ 0.000369f, 0.000337f, 0.000368f, 0.000452f, 0.000500f, 0.000547f, 0.000543f, 0.000575f, 0.000623f, 0.000723f, 0.000783f, 0.000874f,
+ 0.001141f, 0.001226f, 0.001279f, 0.001336f, 0.001499f, 0.001655f, 0.001922f, 0.002090f, 0.002453f, 0.002298f, 0.003139f, 0.003181f,
+ 0.003674f, 0.004166f, 0.004814f, 0.005447f, 0.006348f, 0.007179f, 0.008736f, 0.010406f, 0.012321f, 0.014984f, 0.018219f, 0.022934f,
+ 0.028824f, 0.037598f, 0.050476f, 0.069397f, 0.098694f, 0.144775f, 0.218018f, 0.325439f, 0.464111f, 0.607910f, 0.729492f, 0.817383f,
+ 0.876953f, 0.915527f, 0.976562f, 0.977539f, 0.977539f, 0.977051f, 0.977051f, 0.977539f, 0.000000f, 0.000000f, 0.000000f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000154f, 0.000200f, 0.000267f, 0.000316f, 0.000324f, 0.000449f, 0.000319f, 0.000379f, 0.000515f, 0.000519f,
+ 0.000558f, 0.000628f, 0.000645f, 0.000690f, 0.000777f, 0.000940f, 0.001096f, 0.001204f, 0.001278f, 0.001485f, 0.001670f, 0.001929f,
+ 0.001961f, 0.002016f, 0.002367f, 0.002785f, 0.003025f, 0.003248f, 0.003805f, 0.004539f, 0.004845f, 0.005733f, 0.006851f, 0.008278f,
+ 0.010017f, 0.011841f, 0.014542f, 0.017807f, 0.022705f, 0.029190f, 0.038544f, 0.052612f, 0.073853f, 0.108093f, 0.162842f, 0.250977f,
+ 0.377930f, 0.529785f, 0.672363f, 0.782715f, 0.855957f, 0.904297f, 0.973145f, 0.974121f, 0.974609f, 0.975586f, 0.974609f, 0.975098f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000158f, 0.000121f, 0.000190f, 0.000238f, 0.000397f, 0.000354f,
+ 0.000364f, 0.000365f, 0.000440f, 0.000474f, 0.000509f, 0.000612f, 0.000611f, 0.000648f, 0.000804f, 0.000755f, 0.000943f, 0.001050f,
+ 0.001221f, 0.001340f, 0.001338f, 0.001443f, 0.001635f, 0.001822f, 0.002083f, 0.002226f, 0.002480f, 0.002682f, 0.003185f, 0.003609f,
+ 0.003948f, 0.005074f, 0.005558f, 0.006741f, 0.007904f, 0.009384f, 0.011360f, 0.014000f, 0.017883f, 0.022675f, 0.029648f, 0.039917f,
+ 0.055695f, 0.080261f, 0.120728f, 0.188354f, 0.296143f, 0.443848f, 0.603027f, 0.737793f, 0.831055f, 0.891113f, 0.970703f, 0.971680f,
+ 0.972168f, 0.972656f, 0.971680f, 0.972168f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000251f, 0.000260f, 0.000278f, 0.000315f, 0.000334f, 0.000235f, 0.000357f, 0.000442f, 0.000513f, 0.000504f, 0.000598f,
+ 0.000556f, 0.000771f, 0.000831f, 0.000886f, 0.000977f, 0.001145f, 0.001105f, 0.001244f, 0.001281f, 0.001431f, 0.001544f, 0.001850f,
+ 0.001986f, 0.002131f, 0.002537f, 0.002737f, 0.003252f, 0.003826f, 0.004555f, 0.005184f, 0.006199f, 0.007195f, 0.009041f, 0.011337f,
+ 0.013878f, 0.017395f, 0.022552f, 0.030502f, 0.041962f, 0.059875f, 0.089111f, 0.139404f, 0.224609f, 0.357910f, 0.524902f, 0.684082f,
+ 0.800781f, 0.875977f, 0.967773f, 0.968750f, 0.968262f, 0.968750f, 0.969238f, 0.969238f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000095f, 0.000081f, 0.000217f, 0.000149f, 0.000204f, 0.000212f, 0.000338f,
+ 0.000345f, 0.000348f, 0.000456f, 0.000463f, 0.000495f, 0.000570f, 0.000583f, 0.000748f, 0.000799f, 0.000731f, 0.000965f, 0.001041f,
+ 0.001071f, 0.001210f, 0.001318f, 0.001238f, 0.001410f, 0.001631f, 0.001932f, 0.002327f, 0.002577f, 0.003057f, 0.003452f, 0.003956f,
+ 0.004639f, 0.005714f, 0.006817f, 0.008446f, 0.010605f, 0.013443f, 0.017319f, 0.022964f, 0.031021f, 0.044281f, 0.065857f, 0.102112f,
+ 0.166504f, 0.277344f, 0.439941f, 0.617188f, 0.762207f, 0.856445f, 0.963379f, 0.964355f, 0.965332f, 0.964844f, 0.965332f, 0.965332f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000107f, 0.000091f, 0.000161f,
+ 0.000119f, 0.000184f, 0.000266f, 0.000284f, 0.000314f, 0.000319f, 0.000334f, 0.000344f, 0.000565f, 0.000455f, 0.000488f, 0.000667f,
+ 0.000710f, 0.000713f, 0.000787f, 0.000755f, 0.000849f, 0.000972f, 0.001097f, 0.001286f, 0.001427f, 0.001556f, 0.001667f, 0.001687f,
+ 0.002155f, 0.002369f, 0.002674f, 0.003086f, 0.003710f, 0.004536f, 0.005585f, 0.006783f, 0.007957f, 0.010262f, 0.013115f, 0.017212f,
+ 0.023102f, 0.032715f, 0.047943f, 0.074158f, 0.121155f, 0.207520f, 0.353027f, 0.541504f, 0.715332f, 0.834473f, 0.959473f, 0.960449f,
+ 0.960938f, 0.960938f, 0.960938f, 0.961426f, 0.000000f, 0.000000f, 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000120f, 0.000120f, 0.000103f, 0.000089f, 0.000077f, 0.000080f, 0.000121f, 0.000218f, 0.000209f, 0.000245f, 0.000303f, 0.000316f,
+ 0.000388f, 0.000341f, 0.000549f, 0.000594f, 0.000604f, 0.000679f, 0.000625f, 0.000628f, 0.000795f, 0.000883f, 0.000857f, 0.000991f,
+ 0.001166f, 0.000955f, 0.001194f, 0.001347f, 0.001548f, 0.001804f, 0.002048f, 0.002388f, 0.002911f, 0.003130f, 0.003933f, 0.004845f,
+ 0.006031f, 0.007385f, 0.009705f, 0.012688f, 0.017044f, 0.023788f, 0.034882f, 0.053284f, 0.086670f, 0.151123f, 0.271484f, 0.457031f,
+ 0.658203f, 0.805176f, 0.954102f, 0.955078f, 0.956055f, 0.956055f, 0.956055f, 0.955566f, 0.000000f, 0.000122f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000116f, 0.000101f, 0.000088f, 0.000077f, 0.000131f, 0.000071f,
+ 0.000146f, 0.000200f, 0.000237f, 0.000270f, 0.000289f, 0.000302f, 0.000311f, 0.000441f, 0.000396f, 0.000588f, 0.000630f, 0.000570f,
+ 0.000575f, 0.000537f, 0.000589f, 0.000750f, 0.000721f, 0.001048f, 0.001122f, 0.000951f, 0.001243f, 0.001346f, 0.001703f, 0.001592f,
+ 0.001880f, 0.002340f, 0.002804f, 0.003637f, 0.004356f, 0.005329f, 0.006805f, 0.009094f, 0.012566f, 0.017181f, 0.025040f, 0.038147f,
+ 0.061249f, 0.107788f, 0.200195f, 0.369629f, 0.587891f, 0.771973f, 0.948242f, 0.949707f, 0.950195f, 0.949707f, 0.950195f, 0.950195f,
+ 0.000000f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000119f, 0.000119f, 0.000114f,
+ 0.000101f, 0.000088f, 0.000079f, 0.000070f, 0.000063f, 0.000136f, 0.000136f, 0.000183f, 0.000207f, 0.000277f, 0.000271f, 0.000291f,
+ 0.000369f, 0.000344f, 0.000494f, 0.000459f, 0.000515f, 0.000509f, 0.000532f, 0.000504f, 0.000716f, 0.000589f, 0.000691f, 0.000902f,
+ 0.000972f, 0.000968f, 0.001067f, 0.001483f, 0.001780f, 0.001652f, 0.002090f, 0.002602f, 0.003113f, 0.003738f, 0.004738f, 0.006420f,
+ 0.008522f, 0.012100f, 0.017334f, 0.026489f, 0.042786f, 0.074524f, 0.142578f, 0.283936f, 0.509277f, 0.729492f, 0.940918f, 0.941895f,
+ 0.942383f, 0.942383f, 0.942383f, 0.942871f, 0.000122f, 0.000121f, 0.000121f, 0.000120f, 0.000120f, 0.000120f, 0.000119f, 0.000119f,
+ 0.000119f, 0.000118f, 0.000118f, 0.000118f, 0.000116f, 0.000102f, 0.000090f, 0.000081f, 0.000091f, 0.000066f, 0.000059f, 0.000110f,
+ 0.000109f, 0.000155f, 0.000184f, 0.000227f, 0.000297f, 0.000333f, 0.000355f, 0.000349f, 0.000344f, 0.000421f, 0.000459f, 0.000561f,
+ 0.000600f, 0.000563f, 0.000630f, 0.000563f, 0.000682f, 0.000737f, 0.000892f, 0.001037f, 0.001026f, 0.001163f, 0.001743f, 0.001782f,
+ 0.002117f, 0.002573f, 0.003389f, 0.004429f, 0.005871f, 0.007942f, 0.011841f, 0.018066f, 0.029190f, 0.050842f, 0.098511f, 0.207397f,
+ 0.422363f, 0.677734f, 0.932129f, 0.933594f, 0.933594f, 0.934082f, 0.934082f, 0.934082f, 0.000000f, 0.000121f, 0.000120f, 0.000119f,
+ 0.000119f, 0.000119f, 0.000118f, 0.000118f, 0.000118f, 0.000117f, 0.000117f, 0.000117f, 0.000117f, 0.000116f, 0.000104f, 0.000093f,
+ 0.000084f, 0.000076f, 0.000069f, 0.000091f, 0.000057f, 0.000051f, 0.000112f, 0.000120f, 0.000179f, 0.000232f, 0.000225f, 0.000283f,
+ 0.000301f, 0.000308f, 0.000353f, 0.000437f, 0.000395f, 0.000523f, 0.000486f, 0.000504f, 0.000469f, 0.000614f, 0.000581f, 0.000755f,
+ 0.000789f, 0.001121f, 0.000981f, 0.001218f, 0.001565f, 0.001795f, 0.002296f, 0.002958f, 0.003866f, 0.005329f, 0.007675f, 0.011658f,
+ 0.019043f, 0.033478f, 0.065430f, 0.144043f, 0.331299f, 0.613770f, 0.921387f, 0.922852f, 0.923340f, 0.923340f, 0.923340f, 0.923340f,
+ 0.000000f, 0.000000f, 0.000119f, 0.000118f, 0.000118f, 0.000117f, 0.000116f, 0.000116f, 0.000116f, 0.000116f, 0.000115f, 0.000115f,
+ 0.000115f, 0.000115f, 0.000114f, 0.000108f, 0.000097f, 0.000087f, 0.000079f, 0.000072f, 0.000065f, 0.000060f, 0.000094f, 0.000050f,
+ 0.000104f, 0.000104f, 0.000121f, 0.000164f, 0.000195f, 0.000247f, 0.000265f, 0.000328f, 0.000290f, 0.000355f, 0.000395f, 0.000356f,
+ 0.000361f, 0.000459f, 0.000470f, 0.000515f, 0.000580f, 0.000624f, 0.000751f, 0.000964f, 0.001105f, 0.001279f, 0.001413f, 0.001823f,
+ 0.002441f, 0.003407f, 0.004852f, 0.007210f, 0.011803f, 0.021225f, 0.041473f, 0.095032f, 0.244019f, 0.537598f, 0.907715f, 0.910156f,
+ 0.910156f, 0.909180f, 0.909668f, 0.911133f, 0.000120f, 0.000118f, 0.000117f, 0.000116f, 0.000114f, 0.000114f, 0.000114f, 0.000113f,
+ 0.000113f, 0.000112f, 0.000112f, 0.000112f, 0.000111f, 0.000112f, 0.000111f, 0.000111f, 0.000111f, 0.000101f, 0.000093f, 0.000084f,
+ 0.000077f, 0.000070f, 0.000064f, 0.000059f, 0.000074f, 0.000079f, 0.000059f, 0.000087f, 0.000097f, 0.000128f, 0.000185f, 0.000213f,
+ 0.000265f, 0.000235f, 0.000239f, 0.000288f, 0.000299f, 0.000371f, 0.000341f, 0.000369f, 0.000460f, 0.000446f, 0.000490f, 0.000602f,
+ 0.000694f, 0.000904f, 0.001012f, 0.001234f, 0.001544f, 0.002096f, 0.002989f, 0.004299f, 0.006840f, 0.012383f, 0.024948f, 0.059204f,
+ 0.166626f, 0.452637f, 0.892578f, 0.894043f, 0.894043f, 0.894531f, 0.894531f, 0.894043f, 0.000115f, 0.000107f, 0.000108f, 0.000111f,
+ 0.000108f, 0.000109f, 0.000108f, 0.000108f, 0.000108f, 0.000107f, 0.000108f, 0.000107f, 0.000107f, 0.000106f, 0.000107f, 0.000107f,
+ 0.000106f, 0.000107f, 0.000106f, 0.000097f, 0.000090f, 0.000082f, 0.000075f, 0.000069f, 0.000063f, 0.000058f, 0.000053f, 0.000070f,
+ 0.000073f, 0.000085f, 0.000077f, 0.000088f, 0.000136f, 0.000168f, 0.000190f, 0.000204f, 0.000199f, 0.000252f, 0.000233f, 0.000270f,
+ 0.000325f, 0.000295f, 0.000348f, 0.000383f, 0.000435f, 0.000534f, 0.000581f, 0.000803f, 0.001004f, 0.001330f, 0.001812f, 0.002489f,
+ 0.003944f, 0.006832f, 0.013748f, 0.033997f, 0.104858f, 0.356689f, 0.873047f, 0.873047f, 0.875000f, 0.874023f, 0.874023f, 0.874023f,
+ 0.000000f, 0.000071f, 0.000063f, 0.000094f, 0.000092f, 0.000094f, 0.000093f, 0.000098f, 0.000098f, 0.000098f, 0.000098f, 0.000099f,
+ 0.000098f, 0.000099f, 0.000099f, 0.000099f, 0.000099f, 0.000099f, 0.000099f, 0.000100f, 0.000100f, 0.000094f, 0.000087f, 0.000080f,
+ 0.000074f, 0.000068f, 0.000062f, 0.000058f, 0.000053f, 0.000049f, 0.000059f, 0.000059f, 0.000045f, 0.000078f, 0.000082f, 0.000118f,
+ 0.000155f, 0.000160f, 0.000174f, 0.000180f, 0.000226f, 0.000213f, 0.000248f, 0.000258f, 0.000288f, 0.000352f, 0.000396f, 0.000465f,
+ 0.000566f, 0.000789f, 0.000941f, 0.001343f, 0.002199f, 0.003616f, 0.006912f, 0.017380f, 0.058960f, 0.259521f, 0.847656f, 0.849121f,
+ 0.850586f, 0.850098f, 0.849121f, 0.850586f, 0.000000f, 0.000000f, 0.000019f, 0.000044f, 0.000048f, 0.000061f, 0.000071f, 0.000073f,
+ 0.000076f, 0.000079f, 0.000079f, 0.000082f, 0.000082f, 0.000082f, 0.000085f, 0.000086f, 0.000087f, 0.000086f, 0.000088f, 0.000087f,
+ 0.000089f, 0.000089f, 0.000089f, 0.000090f, 0.000084f, 0.000078f, 0.000072f, 0.000067f, 0.000062f, 0.000057f, 0.000052f, 0.000049f,
+ 0.000045f, 0.000041f, 0.000038f, 0.000040f, 0.000062f, 0.000092f, 0.000100f, 0.000121f, 0.000144f, 0.000133f, 0.000137f, 0.000170f,
+ 0.000181f, 0.000168f, 0.000215f, 0.000286f, 0.000327f, 0.000397f, 0.000504f, 0.000738f, 0.001039f, 0.001729f, 0.003317f, 0.007721f,
+ 0.028458f, 0.166626f, 0.815430f, 0.818359f, 0.818359f, 0.817383f, 0.818848f, 0.818359f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000008f, 0.000016f, 0.000031f, 0.000035f, 0.000048f, 0.000050f, 0.000053f, 0.000058f, 0.000059f,
+ 0.000063f, 0.000064f, 0.000067f, 0.000067f, 0.000070f, 0.000071f, 0.000072f, 0.000073f, 0.000075f, 0.000075f, 0.000076f, 0.000075f,
+ 0.000069f, 0.000064f, 0.000060f, 0.000055f, 0.000051f, 0.000047f, 0.000043f, 0.000040f, 0.000037f, 0.000034f, 0.000040f, 0.000041f,
+ 0.000054f, 0.000069f, 0.000096f, 0.000111f, 0.000109f, 0.000113f, 0.000142f, 0.000136f, 0.000158f, 0.000196f, 0.000237f, 0.000349f,
+ 0.000423f, 0.000744f, 0.001380f, 0.003214f, 0.011124f, 0.088135f, 0.777344f, 0.779297f, 0.780273f, 0.779785f, 0.779785f, 0.779785f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000003f, 0.000007f, 0.000021f, 0.000023f, 0.000031f, 0.000034f, 0.000038f, 0.000041f, 0.000043f, 0.000047f,
+ 0.000049f, 0.000050f, 0.000053f, 0.000055f, 0.000056f, 0.000057f, 0.000059f, 0.000060f, 0.000055f, 0.000051f, 0.000048f, 0.000044f,
+ 0.000041f, 0.000038f, 0.000035f, 0.000032f, 0.000029f, 0.000028f, 0.000028f, 0.000037f, 0.000044f, 0.000064f, 0.000078f, 0.000072f,
+ 0.000089f, 0.000098f, 0.000104f, 0.000146f, 0.000200f, 0.000272f, 0.000479f, 0.001077f, 0.003733f, 0.033752f, 0.729492f, 0.730957f,
+ 0.732422f, 0.731934f, 0.732422f, 0.732422f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000002f, 0.000006f, 0.000009f, 0.000013f, 0.000019f, 0.000021f, 0.000025f, 0.000027f, 0.000030f,
+ 0.000033f, 0.000034f, 0.000037f, 0.000039f, 0.000041f, 0.000039f, 0.000036f, 0.000033f, 0.000031f, 0.000028f, 0.000026f, 0.000024f,
+ 0.000021f, 0.000019f, 0.000017f, 0.000023f, 0.000033f, 0.000041f, 0.000043f, 0.000058f, 0.000061f, 0.000081f, 0.000121f, 0.000248f,
+ 0.000821f, 0.008255f, 0.673340f, 0.674805f, 0.674316f, 0.674805f, 0.674805f, 0.673828f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000004f, 0.000006f, 0.000010f, 0.000013f,
+ 0.000015f, 0.000017f, 0.000020f, 0.000022f, 0.000021f, 0.000019f, 0.000017f, 0.000015f, 0.000013f, 0.000012f, 0.000010f, 0.000011f,
+ 0.000016f, 0.000019f, 0.000019f, 0.000036f, 0.000090f, 0.000897f, 0.606934f, 0.609863f, 0.609375f, 0.609863f, 0.609863f, 0.610352f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000001f, 0.000003f, 0.000006f, 0.000005f, 0.000004f, 0.000003f, 0.000004f, 0.000008f, 0.534668f, 0.536621f,
+ 0.537109f, 0.537109f, 0.536621f, 0.536621f,
+ },
+ {
+ 0.149292f, 0.432373f, 0.614258f, 0.719238f, 0.784180f, 0.826660f, 0.856934f, 0.879883f, 0.896484f, 0.909180f, 0.919922f, 0.928711f,
+ 0.936035f, 0.942383f, 0.947266f, 0.952148f, 0.956055f, 0.959473f, 0.962891f, 0.965820f, 0.968262f, 0.970703f, 0.972656f, 0.974609f,
+ 0.976562f, 0.978027f, 0.979492f, 0.980469f, 0.981934f, 0.983398f, 0.984863f, 0.985352f, 0.986328f, 0.987305f, 0.988281f, 0.989258f,
+ 0.989746f, 0.990234f, 0.990723f, 0.991699f, 0.992676f, 0.993164f, 0.993652f, 0.993652f, 0.994629f, 0.995117f, 0.995117f, 0.996094f,
+ 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999023f, 0.040161f, 0.161255f, 0.324951f, 0.486572f, 0.612305f, 0.704590f, 0.767090f, 0.811523f,
+ 0.844238f, 0.868652f, 0.887695f, 0.902344f, 0.913574f, 0.924316f, 0.932129f, 0.937988f, 0.944336f, 0.949707f, 0.954102f, 0.957520f,
+ 0.960938f, 0.964355f, 0.966797f, 0.969727f, 0.971191f, 0.973633f, 0.975586f, 0.977539f, 0.979004f, 0.980469f, 0.981445f, 0.982910f,
+ 0.983887f, 0.985352f, 0.985840f, 0.987305f, 0.987793f, 0.988770f, 0.989258f, 0.990234f, 0.991211f, 0.992188f, 0.992676f, 0.993164f,
+ 0.993164f, 0.993652f, 0.994141f, 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998535f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999023f, 0.017395f, 0.068542f, 0.149292f, 0.262451f,
+ 0.392822f, 0.518066f, 0.621582f, 0.700195f, 0.759766f, 0.803711f, 0.836426f, 0.862305f, 0.880859f, 0.896484f, 0.909668f, 0.919434f,
+ 0.929199f, 0.935547f, 0.941895f, 0.947754f, 0.952637f, 0.956055f, 0.959961f, 0.963867f, 0.965820f, 0.968750f, 0.970703f, 0.973145f,
+ 0.975098f, 0.977051f, 0.979004f, 0.979980f, 0.981934f, 0.983398f, 0.983887f, 0.984863f, 0.985840f, 0.986816f, 0.987793f, 0.989258f,
+ 0.989746f, 0.990234f, 0.991211f, 0.991699f, 0.992188f, 0.992676f, 0.993652f, 0.994141f, 0.994629f, 0.995605f, 0.996094f, 0.996094f,
+ 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999023f,
+ 0.009125f, 0.035492f, 0.075806f, 0.135864f, 0.219971f, 0.324707f, 0.437012f, 0.543457f, 0.633789f, 0.704102f, 0.758789f, 0.802246f,
+ 0.833496f, 0.857910f, 0.878418f, 0.894043f, 0.906738f, 0.917480f, 0.925781f, 0.933594f, 0.940918f, 0.946777f, 0.951172f, 0.954590f,
+ 0.959473f, 0.962891f, 0.965820f, 0.968262f, 0.971191f, 0.973145f, 0.975098f, 0.976562f, 0.978516f, 0.979980f, 0.981445f, 0.982422f,
+ 0.983887f, 0.985840f, 0.986328f, 0.987305f, 0.988281f, 0.988770f, 0.989746f, 0.990234f, 0.991699f, 0.992188f, 0.992676f, 0.993652f,
+ 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.997559f, 0.997559f, 0.998047f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.005848f, 0.021225f, 0.043640f, 0.076782f, 0.124084f, 0.189575f, 0.274414f, 0.372559f,
+ 0.473633f, 0.567383f, 0.646973f, 0.711426f, 0.761230f, 0.801758f, 0.833496f, 0.857422f, 0.876953f, 0.893066f, 0.905273f, 0.916504f,
+ 0.925293f, 0.932617f, 0.939941f, 0.945801f, 0.950684f, 0.955566f, 0.958984f, 0.962402f, 0.965820f, 0.968262f, 0.970703f, 0.972656f,
+ 0.975098f, 0.977051f, 0.978516f, 0.980469f, 0.981934f, 0.982422f, 0.983887f, 0.985840f, 0.986328f, 0.987305f, 0.988281f, 0.989258f,
+ 0.989746f, 0.990723f, 0.991211f, 0.992188f, 0.993164f, 0.993652f, 0.994629f, 0.995117f, 0.995117f, 0.996094f, 0.996094f, 0.997070f,
+ 0.997559f, 0.997559f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.998535f, 0.998535f, 0.003937f, 0.014107f, 0.027664f, 0.047211f,
+ 0.075195f, 0.113953f, 0.166748f, 0.236328f, 0.320312f, 0.412354f, 0.504395f, 0.589844f, 0.661621f, 0.719727f, 0.768066f, 0.805664f,
+ 0.834961f, 0.858398f, 0.877441f, 0.893066f, 0.906738f, 0.916992f, 0.926270f, 0.933105f, 0.940430f, 0.946289f, 0.951172f, 0.955566f,
+ 0.959473f, 0.962891f, 0.965820f, 0.968262f, 0.970703f, 0.973145f, 0.975098f, 0.977051f, 0.979004f, 0.980469f, 0.981934f, 0.983398f,
+ 0.984375f, 0.985840f, 0.986328f, 0.987305f, 0.988770f, 0.989746f, 0.990723f, 0.991211f, 0.992188f, 0.992676f, 0.993652f, 0.994629f,
+ 0.994629f, 0.995117f, 0.995605f, 0.995605f, 0.996582f, 0.997070f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.998535f, 0.998535f,
+ 0.002962f, 0.009674f, 0.019348f, 0.031708f, 0.049255f, 0.072754f, 0.105164f, 0.149048f, 0.206665f, 0.278076f, 0.361572f, 0.448730f,
+ 0.534668f, 0.611816f, 0.677734f, 0.730957f, 0.775879f, 0.809570f, 0.837891f, 0.861328f, 0.879395f, 0.894531f, 0.907227f, 0.916992f,
+ 0.926270f, 0.934082f, 0.940918f, 0.946289f, 0.951172f, 0.956055f, 0.959473f, 0.962891f, 0.966797f, 0.969238f, 0.971191f, 0.973633f,
+ 0.976074f, 0.977539f, 0.979492f, 0.980957f, 0.982422f, 0.983398f, 0.984863f, 0.986328f, 0.986816f, 0.988281f, 0.989746f, 0.989746f,
+ 0.991211f, 0.991699f, 0.992676f, 0.993164f, 0.994141f, 0.994629f, 0.994629f, 0.995605f, 0.996094f, 0.997070f, 0.998535f, 0.999023f,
+ 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.001900f, 0.007225f, 0.013733f, 0.022552f, 0.033661f, 0.049164f, 0.070374f, 0.097534f,
+ 0.135132f, 0.183350f, 0.244507f, 0.317871f, 0.400146f, 0.483643f, 0.562988f, 0.633301f, 0.693848f, 0.743652f, 0.784180f, 0.816895f,
+ 0.842773f, 0.865234f, 0.882812f, 0.896973f, 0.908691f, 0.919434f, 0.927734f, 0.935547f, 0.942383f, 0.947266f, 0.952637f, 0.957031f,
+ 0.960938f, 0.964355f, 0.967285f, 0.969727f, 0.971680f, 0.974609f, 0.976074f, 0.978027f, 0.979980f, 0.981445f, 0.982910f, 0.984375f,
+ 0.985840f, 0.986328f, 0.988281f, 0.988770f, 0.989746f, 0.990723f, 0.991699f, 0.992188f, 0.993164f, 0.993652f, 0.994629f, 0.995117f,
+ 0.995605f, 0.996094f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998047f, 0.001921f, 0.005543f, 0.010223f, 0.016312f,
+ 0.024918f, 0.035217f, 0.049164f, 0.067017f, 0.091125f, 0.122986f, 0.164673f, 0.217896f, 0.282471f, 0.356934f, 0.436768f, 0.516602f,
+ 0.590820f, 0.656250f, 0.711426f, 0.757812f, 0.794922f, 0.825684f, 0.850098f, 0.870605f, 0.885742f, 0.900879f, 0.912109f, 0.921387f,
+ 0.929688f, 0.937500f, 0.943848f, 0.949219f, 0.953125f, 0.958496f, 0.961426f, 0.964844f, 0.967773f, 0.970703f, 0.973145f, 0.975098f,
+ 0.977539f, 0.979004f, 0.980957f, 0.982422f, 0.983887f, 0.985352f, 0.986328f, 0.987793f, 0.988770f, 0.989258f, 0.990723f, 0.991211f,
+ 0.992188f, 0.993164f, 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998047f, 0.998047f,
+ 0.001360f, 0.004257f, 0.007988f, 0.013092f, 0.018753f, 0.026352f, 0.035645f, 0.048096f, 0.064270f, 0.085449f, 0.113770f, 0.149292f,
+ 0.195190f, 0.251953f, 0.320557f, 0.395020f, 0.474121f, 0.549316f, 0.618652f, 0.678223f, 0.729492f, 0.770996f, 0.805176f, 0.833496f,
+ 0.855957f, 0.875977f, 0.891113f, 0.904785f, 0.915039f, 0.924316f, 0.933105f, 0.939453f, 0.945312f, 0.950684f, 0.955078f, 0.959473f,
+ 0.962891f, 0.966309f, 0.969727f, 0.972168f, 0.974121f, 0.976562f, 0.978516f, 0.979980f, 0.981934f, 0.983398f, 0.984375f, 0.986328f,
+ 0.986816f, 0.988281f, 0.989746f, 0.990234f, 0.991699f, 0.992188f, 0.992676f, 0.994141f, 0.994141f, 0.994629f, 0.998047f, 0.998047f,
+ 0.998535f, 0.998047f, 0.998047f, 0.998047f, 0.001075f, 0.003492f, 0.006275f, 0.010223f, 0.014473f, 0.019821f, 0.026581f, 0.035492f,
+ 0.046967f, 0.061829f, 0.080750f, 0.105164f, 0.136475f, 0.177246f, 0.227783f, 0.288818f, 0.358154f, 0.433594f, 0.509277f, 0.581543f,
+ 0.645508f, 0.701172f, 0.747070f, 0.783691f, 0.817383f, 0.842773f, 0.864258f, 0.881836f, 0.896484f, 0.908691f, 0.918945f, 0.928223f,
+ 0.935547f, 0.941895f, 0.948730f, 0.952637f, 0.957031f, 0.962402f, 0.964844f, 0.967773f, 0.970703f, 0.973633f, 0.975586f, 0.977539f,
+ 0.979492f, 0.981445f, 0.982910f, 0.984375f, 0.985840f, 0.986816f, 0.988281f, 0.988770f, 0.990234f, 0.991211f, 0.992188f, 0.992676f,
+ 0.993164f, 0.994141f, 0.997559f, 0.997559f, 0.998047f, 0.997559f, 0.997559f, 0.998047f, 0.000967f, 0.002928f, 0.005283f, 0.007759f,
+ 0.011612f, 0.015823f, 0.020966f, 0.027802f, 0.035461f, 0.045959f, 0.059235f, 0.075928f, 0.097778f, 0.126099f, 0.162598f, 0.207153f,
+ 0.261963f, 0.326416f, 0.398193f, 0.471680f, 0.543945f, 0.612305f, 0.671875f, 0.722656f, 0.765137f, 0.799805f, 0.828125f, 0.854004f,
+ 0.872070f, 0.888184f, 0.902344f, 0.914062f, 0.923340f, 0.931641f, 0.938965f, 0.945312f, 0.950684f, 0.955566f, 0.958984f, 0.962891f,
+ 0.966309f, 0.969727f, 0.972168f, 0.974609f, 0.977051f, 0.978516f, 0.980469f, 0.982422f, 0.984375f, 0.985352f, 0.987305f, 0.987793f,
+ 0.988770f, 0.990234f, 0.991211f, 0.992188f, 0.992676f, 0.993164f, 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.997559f, 0.998047f,
+ 0.000602f, 0.002605f, 0.004345f, 0.006706f, 0.009590f, 0.012650f, 0.016617f, 0.021423f, 0.027893f, 0.035004f, 0.044495f, 0.056610f,
+ 0.072327f, 0.092285f, 0.116821f, 0.148926f, 0.189697f, 0.238892f, 0.298340f, 0.365723f, 0.437988f, 0.511230f, 0.579590f, 0.642090f,
+ 0.698242f, 0.744141f, 0.781738f, 0.814453f, 0.840332f, 0.861816f, 0.880371f, 0.895996f, 0.907715f, 0.918945f, 0.928223f, 0.935547f,
+ 0.942871f, 0.948730f, 0.953125f, 0.958008f, 0.961914f, 0.965332f, 0.968750f, 0.971680f, 0.973633f, 0.976562f, 0.978516f, 0.979980f,
+ 0.981934f, 0.983398f, 0.985352f, 0.986816f, 0.988281f, 0.988770f, 0.989746f, 0.990723f, 0.991699f, 0.992676f, 0.997070f, 0.997559f,
+ 0.997559f, 0.997070f, 0.997070f, 0.997070f, 0.000607f, 0.001955f, 0.003616f, 0.005772f, 0.007656f, 0.010269f, 0.013496f, 0.017273f,
+ 0.022018f, 0.027466f, 0.034729f, 0.043488f, 0.054932f, 0.068359f, 0.086365f, 0.108765f, 0.137939f, 0.174316f, 0.219360f, 0.273926f,
+ 0.336670f, 0.406494f, 0.478516f, 0.549316f, 0.614746f, 0.673340f, 0.722656f, 0.765137f, 0.800293f, 0.828125f, 0.853516f, 0.872070f,
+ 0.888672f, 0.902832f, 0.914551f, 0.924316f, 0.932129f, 0.940430f, 0.946289f, 0.951660f, 0.956055f, 0.960449f, 0.964355f, 0.967773f,
+ 0.970703f, 0.972656f, 0.975586f, 0.978027f, 0.980469f, 0.981934f, 0.983398f, 0.985352f, 0.986328f, 0.988281f, 0.988770f, 0.990234f,
+ 0.990723f, 0.992188f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.000600f, 0.001813f, 0.003101f, 0.004559f,
+ 0.006580f, 0.008873f, 0.011047f, 0.014091f, 0.017639f, 0.022049f, 0.027557f, 0.033997f, 0.042297f, 0.052704f, 0.065369f, 0.081238f,
+ 0.101929f, 0.127930f, 0.161255f, 0.202515f, 0.252686f, 0.311523f, 0.378174f, 0.449707f, 0.519531f, 0.587891f, 0.647949f, 0.701660f,
+ 0.746582f, 0.784668f, 0.817383f, 0.843262f, 0.864746f, 0.882324f, 0.896973f, 0.910156f, 0.920898f, 0.929688f, 0.937012f, 0.943848f,
+ 0.949707f, 0.955078f, 0.959473f, 0.963379f, 0.966797f, 0.970215f, 0.973145f, 0.975098f, 0.978027f, 0.980469f, 0.982422f, 0.983887f,
+ 0.984863f, 0.986328f, 0.987793f, 0.988770f, 0.989746f, 0.991211f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997070f,
+ 0.000604f, 0.001429f, 0.002676f, 0.003708f, 0.005745f, 0.006973f, 0.009270f, 0.011452f, 0.014503f, 0.018295f, 0.022369f, 0.027222f,
+ 0.033417f, 0.040833f, 0.050171f, 0.062744f, 0.077454f, 0.095886f, 0.119995f, 0.150391f, 0.187622f, 0.234253f, 0.289307f, 0.353027f,
+ 0.421631f, 0.492676f, 0.561523f, 0.625488f, 0.681152f, 0.730469f, 0.770996f, 0.806152f, 0.833984f, 0.857422f, 0.876465f, 0.893066f,
+ 0.906250f, 0.916992f, 0.926758f, 0.935059f, 0.942871f, 0.948242f, 0.954102f, 0.958496f, 0.962891f, 0.966309f, 0.969727f, 0.972168f,
+ 0.975098f, 0.977539f, 0.979492f, 0.981934f, 0.983398f, 0.984863f, 0.986328f, 0.987793f, 0.989258f, 0.990234f, 0.996094f, 0.996582f,
+ 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.000365f, 0.001367f, 0.002123f, 0.003353f, 0.004692f, 0.006054f, 0.007675f, 0.009819f,
+ 0.012314f, 0.014862f, 0.018066f, 0.022064f, 0.026901f, 0.032471f, 0.039764f, 0.048584f, 0.060089f, 0.073730f, 0.090698f, 0.112854f,
+ 0.140381f, 0.175415f, 0.218018f, 0.269775f, 0.329834f, 0.396240f, 0.467285f, 0.537598f, 0.603516f, 0.662109f, 0.712891f, 0.757324f,
+ 0.793945f, 0.823730f, 0.849121f, 0.869629f, 0.887695f, 0.902344f, 0.914062f, 0.924805f, 0.932129f, 0.940430f, 0.947266f, 0.952148f,
+ 0.957031f, 0.962402f, 0.966309f, 0.969238f, 0.972656f, 0.975586f, 0.977051f, 0.979492f, 0.981934f, 0.983398f, 0.984863f, 0.986328f,
+ 0.988281f, 0.988770f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996094f, 0.996094f, 0.000356f, 0.001341f, 0.001913f, 0.002897f,
+ 0.003983f, 0.005322f, 0.006607f, 0.008514f, 0.010399f, 0.012451f, 0.015282f, 0.018356f, 0.021912f, 0.026443f, 0.031982f, 0.038635f,
+ 0.047150f, 0.057495f, 0.070007f, 0.086609f, 0.106689f, 0.131714f, 0.164429f, 0.203613f, 0.252441f, 0.310059f, 0.374512f, 0.444092f,
+ 0.514160f, 0.582031f, 0.643066f, 0.697266f, 0.743652f, 0.783691f, 0.814941f, 0.842773f, 0.865234f, 0.882812f, 0.897949f, 0.910645f,
+ 0.922363f, 0.931152f, 0.938965f, 0.945801f, 0.952148f, 0.957520f, 0.961426f, 0.965820f, 0.969727f, 0.972168f, 0.975098f, 0.977539f,
+ 0.979980f, 0.981934f, 0.983887f, 0.985352f, 0.986816f, 0.988281f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996094f,
+ 0.000243f, 0.000937f, 0.001662f, 0.002617f, 0.003527f, 0.004555f, 0.005642f, 0.007217f, 0.008820f, 0.010483f, 0.012383f, 0.015175f,
+ 0.018341f, 0.022049f, 0.026245f, 0.031067f, 0.037903f, 0.045563f, 0.054962f, 0.066956f, 0.082092f, 0.101074f, 0.124939f, 0.154663f,
+ 0.191528f, 0.237305f, 0.291992f, 0.354492f, 0.422852f, 0.492676f, 0.562012f, 0.625488f, 0.682617f, 0.731934f, 0.772949f, 0.807129f,
+ 0.835449f, 0.859863f, 0.878906f, 0.895020f, 0.908203f, 0.920898f, 0.929199f, 0.937988f, 0.945312f, 0.951660f, 0.957031f, 0.961914f,
+ 0.965332f, 0.968750f, 0.972656f, 0.975098f, 0.977539f, 0.979980f, 0.982422f, 0.983887f, 0.986328f, 0.987793f, 0.995117f, 0.995605f,
+ 0.995605f, 0.995605f, 0.995605f, 0.995605f, 0.000362f, 0.000970f, 0.001489f, 0.002251f, 0.002892f, 0.003727f, 0.004978f, 0.006264f,
+ 0.007530f, 0.009125f, 0.010551f, 0.012756f, 0.015259f, 0.018097f, 0.021637f, 0.025986f, 0.030594f, 0.036804f, 0.044006f, 0.053162f,
+ 0.064148f, 0.078003f, 0.096130f, 0.118042f, 0.146118f, 0.181030f, 0.224487f, 0.276123f, 0.336670f, 0.403320f, 0.473633f, 0.543457f,
+ 0.609375f, 0.667480f, 0.719238f, 0.763184f, 0.799316f, 0.829590f, 0.854492f, 0.875488f, 0.892578f, 0.906738f, 0.918945f, 0.928711f,
+ 0.937012f, 0.944336f, 0.951172f, 0.956543f, 0.961426f, 0.965820f, 0.968750f, 0.972656f, 0.975098f, 0.978027f, 0.980469f, 0.982910f,
+ 0.984375f, 0.985840f, 0.994629f, 0.995117f, 0.995117f, 0.995117f, 0.995117f, 0.995117f, 0.000346f, 0.000923f, 0.001273f, 0.002010f,
+ 0.002619f, 0.003689f, 0.004452f, 0.005177f, 0.006290f, 0.007561f, 0.009033f, 0.010902f, 0.012970f, 0.015495f, 0.018280f, 0.021576f,
+ 0.024948f, 0.030304f, 0.035400f, 0.042480f, 0.051086f, 0.061401f, 0.074890f, 0.091187f, 0.112427f, 0.138794f, 0.171631f, 0.212158f,
+ 0.262451f, 0.320557f, 0.385986f, 0.456055f, 0.525391f, 0.593262f, 0.654297f, 0.708984f, 0.754883f, 0.792969f, 0.824707f, 0.850098f,
+ 0.872070f, 0.890137f, 0.904785f, 0.917480f, 0.927734f, 0.937012f, 0.944336f, 0.951172f, 0.956055f, 0.961914f, 0.966309f, 0.969727f,
+ 0.973145f, 0.976074f, 0.978516f, 0.980469f, 0.982910f, 0.984863f, 0.993652f, 0.995117f, 0.994629f, 0.994629f, 0.994629f, 0.994629f,
+ 0.000242f, 0.000666f, 0.001081f, 0.001806f, 0.002512f, 0.003397f, 0.003866f, 0.004894f, 0.005566f, 0.006859f, 0.007957f, 0.009506f,
+ 0.011009f, 0.013046f, 0.015266f, 0.018173f, 0.021027f, 0.024811f, 0.029526f, 0.034790f, 0.041443f, 0.049835f, 0.059265f, 0.071899f,
+ 0.087769f, 0.107422f, 0.132202f, 0.163208f, 0.201782f, 0.249512f, 0.305908f, 0.370361f, 0.440430f, 0.511230f, 0.578613f, 0.642090f,
+ 0.698730f, 0.746582f, 0.787109f, 0.819824f, 0.848145f, 0.869141f, 0.888672f, 0.903809f, 0.916992f, 0.927246f, 0.936523f, 0.943848f,
+ 0.951660f, 0.957031f, 0.961426f, 0.965820f, 0.970215f, 0.973145f, 0.976074f, 0.979004f, 0.981445f, 0.983398f, 0.994141f, 0.994141f,
+ 0.994629f, 0.994141f, 0.994629f, 0.994141f, 0.000242f, 0.000709f, 0.000917f, 0.001194f, 0.002018f, 0.002634f, 0.003504f, 0.003918f,
+ 0.005020f, 0.005726f, 0.006935f, 0.008141f, 0.009666f, 0.011040f, 0.012848f, 0.014961f, 0.017624f, 0.020660f, 0.024368f, 0.028381f,
+ 0.033905f, 0.040283f, 0.047760f, 0.057312f, 0.069214f, 0.083984f, 0.102539f, 0.126221f, 0.155640f, 0.193359f, 0.238892f, 0.293701f,
+ 0.356689f, 0.425537f, 0.497070f, 0.568359f, 0.632812f, 0.690918f, 0.739746f, 0.782227f, 0.816406f, 0.845703f, 0.868652f, 0.887695f,
+ 0.903320f, 0.916992f, 0.927734f, 0.937012f, 0.944824f, 0.951660f, 0.957031f, 0.962891f, 0.966797f, 0.971191f, 0.973633f, 0.976562f,
+ 0.979492f, 0.981934f, 0.992676f, 0.993652f, 0.994141f, 0.993652f, 0.993652f, 0.994141f, 0.000244f, 0.000660f, 0.000918f, 0.001343f,
+ 0.002117f, 0.002407f, 0.002779f, 0.003626f, 0.004246f, 0.005207f, 0.005913f, 0.007145f, 0.008163f, 0.009438f, 0.011101f, 0.012871f,
+ 0.014999f, 0.017426f, 0.020096f, 0.024185f, 0.027725f, 0.032623f, 0.038910f, 0.046387f, 0.055298f, 0.066467f, 0.080627f, 0.098328f,
+ 0.120972f, 0.149658f, 0.184814f, 0.229492f, 0.282715f, 0.344727f, 0.414062f, 0.486084f, 0.556641f, 0.624023f, 0.683594f, 0.735352f,
+ 0.778320f, 0.814453f, 0.843750f, 0.867188f, 0.887207f, 0.903320f, 0.916504f, 0.928223f, 0.937500f, 0.945312f, 0.953125f, 0.958008f,
+ 0.964355f, 0.967285f, 0.971680f, 0.975098f, 0.978516f, 0.980957f, 0.992676f, 0.993652f, 0.994141f, 0.993652f, 0.993652f, 0.993164f,
+ 0.000200f, 0.000480f, 0.000808f, 0.001303f, 0.001680f, 0.002104f, 0.002510f, 0.002934f, 0.003468f, 0.004429f, 0.005539f, 0.006046f,
+ 0.006889f, 0.008438f, 0.009415f, 0.011108f, 0.012787f, 0.014572f, 0.017517f, 0.020279f, 0.023483f, 0.027359f, 0.031860f, 0.037964f,
+ 0.045227f, 0.053711f, 0.064148f, 0.077759f, 0.095093f, 0.116272f, 0.143311f, 0.177856f, 0.221191f, 0.273193f, 0.334473f, 0.403320f,
+ 0.476318f, 0.548828f, 0.617188f, 0.677734f, 0.730957f, 0.775879f, 0.812500f, 0.842285f, 0.866699f, 0.887695f, 0.903809f, 0.916992f,
+ 0.928711f, 0.938477f, 0.946777f, 0.953125f, 0.959473f, 0.963867f, 0.968750f, 0.972656f, 0.976074f, 0.979004f, 0.992188f, 0.992676f,
+ 0.993164f, 0.993164f, 0.992676f, 0.993164f, 0.000243f, 0.000469f, 0.000878f, 0.001158f, 0.001382f, 0.001801f, 0.002220f, 0.002699f,
+ 0.003273f, 0.004063f, 0.004715f, 0.005447f, 0.005917f, 0.007099f, 0.008385f, 0.009521f, 0.011032f, 0.012627f, 0.014870f, 0.016922f,
+ 0.019836f, 0.023010f, 0.026642f, 0.031174f, 0.036926f, 0.043549f, 0.051941f, 0.062561f, 0.075317f, 0.091553f, 0.112427f, 0.138428f,
+ 0.172485f, 0.213867f, 0.265381f, 0.326172f, 0.394775f, 0.467773f, 0.541504f, 0.610840f, 0.673340f, 0.728516f, 0.774414f, 0.812012f,
+ 0.842773f, 0.867676f, 0.887695f, 0.904297f, 0.918457f, 0.929688f, 0.939453f, 0.948242f, 0.955078f, 0.959961f, 0.965820f, 0.970215f,
+ 0.974121f, 0.977051f, 0.991211f, 0.993164f, 0.993164f, 0.992188f, 0.993164f, 0.992188f, 0.000000f, 0.000242f, 0.000799f, 0.000998f,
+ 0.001273f, 0.001671f, 0.002069f, 0.002485f, 0.003212f, 0.003578f, 0.003948f, 0.004559f, 0.005524f, 0.006321f, 0.007046f, 0.008438f,
+ 0.009438f, 0.010986f, 0.012390f, 0.014320f, 0.016663f, 0.019165f, 0.022476f, 0.025833f, 0.030487f, 0.035675f, 0.042358f, 0.050018f,
+ 0.060211f, 0.072693f, 0.088379f, 0.108948f, 0.134766f, 0.166626f, 0.208008f, 0.258545f, 0.318848f, 0.387451f, 0.461670f, 0.536621f,
+ 0.606934f, 0.671387f, 0.727539f, 0.773438f, 0.811523f, 0.843750f, 0.868164f, 0.889160f, 0.906250f, 0.920410f, 0.932617f, 0.941895f,
+ 0.949707f, 0.956055f, 0.962402f, 0.967285f, 0.971680f, 0.975586f, 0.990723f, 0.991699f, 0.991699f, 0.992188f, 0.992188f, 0.991699f,
+ 0.000237f, 0.000482f, 0.000772f, 0.000877f, 0.001109f, 0.001494f, 0.001991f, 0.002041f, 0.002537f, 0.002975f, 0.003469f, 0.004128f,
+ 0.004841f, 0.005550f, 0.006306f, 0.007359f, 0.008369f, 0.009415f, 0.010788f, 0.012306f, 0.014160f, 0.016571f, 0.018921f, 0.021896f,
+ 0.025497f, 0.029587f, 0.034576f, 0.041260f, 0.049011f, 0.058319f, 0.070557f, 0.086060f, 0.105774f, 0.130737f, 0.162720f, 0.203247f,
+ 0.252930f, 0.313477f, 0.382568f, 0.457275f, 0.532715f, 0.605469f, 0.671387f, 0.728027f, 0.774902f, 0.814453f, 0.844727f, 0.870605f,
+ 0.891113f, 0.909180f, 0.922852f, 0.934082f, 0.943359f, 0.951660f, 0.958008f, 0.964355f, 0.968750f, 0.973145f, 0.990234f, 0.990723f,
+ 0.991699f, 0.991211f, 0.991211f, 0.991211f, 0.000235f, 0.000461f, 0.000484f, 0.000891f, 0.001105f, 0.001346f, 0.001634f, 0.001936f,
+ 0.002438f, 0.002874f, 0.003353f, 0.003925f, 0.004189f, 0.004887f, 0.005684f, 0.006279f, 0.007298f, 0.008339f, 0.009384f, 0.010674f,
+ 0.012360f, 0.013901f, 0.016113f, 0.018677f, 0.021469f, 0.024841f, 0.029144f, 0.033783f, 0.039948f, 0.047272f, 0.056915f, 0.068726f,
+ 0.083801f, 0.102905f, 0.127563f, 0.159058f, 0.199341f, 0.248901f, 0.309570f, 0.379395f, 0.454834f, 0.532715f, 0.606934f, 0.672852f,
+ 0.729980f, 0.778320f, 0.817383f, 0.849121f, 0.874512f, 0.895020f, 0.911621f, 0.924805f, 0.937012f, 0.946289f, 0.954102f, 0.960938f,
+ 0.965820f, 0.971191f, 0.989258f, 0.990234f, 0.990723f, 0.991211f, 0.990723f, 0.990723f, 0.000000f, 0.000360f, 0.000477f, 0.000756f,
+ 0.000896f, 0.001065f, 0.001570f, 0.001622f, 0.002064f, 0.002525f, 0.002819f, 0.003004f, 0.003700f, 0.004356f, 0.005077f, 0.005428f,
+ 0.006283f, 0.007370f, 0.008339f, 0.009323f, 0.010567f, 0.012070f, 0.013672f, 0.015839f, 0.018066f, 0.020844f, 0.024002f, 0.028183f,
+ 0.033051f, 0.039246f, 0.046417f, 0.055450f, 0.067200f, 0.082031f, 0.100586f, 0.125122f, 0.156250f, 0.196167f, 0.245972f, 0.307129f,
+ 0.378174f, 0.454834f, 0.533203f, 0.608398f, 0.675781f, 0.734375f, 0.782715f, 0.821777f, 0.853516f, 0.878906f, 0.898926f, 0.915039f,
+ 0.929199f, 0.939941f, 0.948730f, 0.956055f, 0.963379f, 0.968262f, 0.988770f, 0.989746f, 0.990234f, 0.989746f, 0.989746f, 0.990234f,
+ 0.000000f, 0.000256f, 0.000467f, 0.000590f, 0.000772f, 0.001095f, 0.001356f, 0.001781f, 0.001984f, 0.002161f, 0.002546f, 0.002956f,
+ 0.003338f, 0.003899f, 0.004440f, 0.004986f, 0.005486f, 0.006310f, 0.006969f, 0.008148f, 0.009148f, 0.010284f, 0.011902f, 0.013573f,
+ 0.015465f, 0.017853f, 0.020340f, 0.023590f, 0.027298f, 0.032227f, 0.038208f, 0.045563f, 0.054047f, 0.065796f, 0.080322f, 0.098999f,
+ 0.122864f, 0.153809f, 0.193970f, 0.244629f, 0.306396f, 0.378662f, 0.457031f, 0.536621f, 0.613770f, 0.681641f, 0.740723f, 0.788574f,
+ 0.827637f, 0.858398f, 0.884277f, 0.903320f, 0.919922f, 0.932129f, 0.942871f, 0.951660f, 0.959961f, 0.965820f, 0.987305f, 0.988281f,
+ 0.989258f, 0.989258f, 0.989258f, 0.989258f, 0.000244f, 0.000243f, 0.000583f, 0.000585f, 0.000822f, 0.001073f, 0.001159f, 0.001452f,
+ 0.001525f, 0.002001f, 0.002201f, 0.002714f, 0.002932f, 0.003525f, 0.003904f, 0.004482f, 0.004997f, 0.005581f, 0.006233f, 0.006954f,
+ 0.007820f, 0.008949f, 0.009941f, 0.011482f, 0.013168f, 0.015099f, 0.017151f, 0.020111f, 0.022949f, 0.026947f, 0.031647f, 0.037354f,
+ 0.044342f, 0.053375f, 0.064331f, 0.078857f, 0.097351f, 0.121033f, 0.152588f, 0.192749f, 0.244263f, 0.307129f, 0.380615f, 0.461426f,
+ 0.543457f, 0.621582f, 0.690430f, 0.748047f, 0.796387f, 0.834961f, 0.865723f, 0.889160f, 0.908691f, 0.924316f, 0.937500f, 0.946777f,
+ 0.955078f, 0.962891f, 0.986328f, 0.987793f, 0.988770f, 0.988770f, 0.988770f, 0.988770f, 0.000000f, 0.000243f, 0.000308f, 0.000541f,
+ 0.000801f, 0.000827f, 0.001057f, 0.001280f, 0.001460f, 0.001781f, 0.002090f, 0.002481f, 0.002756f, 0.003054f, 0.003321f, 0.003948f,
+ 0.004303f, 0.004898f, 0.005306f, 0.006405f, 0.006954f, 0.007851f, 0.008537f, 0.009918f, 0.011208f, 0.012825f, 0.014534f, 0.016861f,
+ 0.019379f, 0.022629f, 0.026276f, 0.030838f, 0.036407f, 0.043488f, 0.051819f, 0.063416f, 0.077209f, 0.095825f, 0.119812f, 0.151489f,
+ 0.192749f, 0.245361f, 0.309814f, 0.385986f, 0.469238f, 0.552246f, 0.630859f, 0.699707f, 0.757324f, 0.805176f, 0.842773f, 0.873047f,
+ 0.895508f, 0.914062f, 0.929688f, 0.941406f, 0.952148f, 0.959473f, 0.985840f, 0.986816f, 0.987305f, 0.987305f, 0.987305f, 0.987305f,
+ 0.000000f, 0.000243f, 0.000242f, 0.000548f, 0.000695f, 0.000803f, 0.001053f, 0.001198f, 0.001363f, 0.001513f, 0.001886f, 0.002069f,
+ 0.002447f, 0.002676f, 0.003138f, 0.003551f, 0.003868f, 0.004261f, 0.004936f, 0.005337f, 0.005852f, 0.006615f, 0.007519f, 0.008575f,
+ 0.009705f, 0.010872f, 0.012688f, 0.014397f, 0.016479f, 0.019119f, 0.022064f, 0.025589f, 0.030304f, 0.035828f, 0.042603f, 0.050812f,
+ 0.062012f, 0.076355f, 0.094971f, 0.119263f, 0.151367f, 0.193726f, 0.247925f, 0.314941f, 0.393311f, 0.478271f, 0.563965f, 0.642578f,
+ 0.711914f, 0.769043f, 0.815430f, 0.851562f, 0.881348f, 0.902832f, 0.921387f, 0.934570f, 0.945801f, 0.955078f, 0.984375f, 0.986328f,
+ 0.986328f, 0.986328f, 0.986328f, 0.986328f, 0.000000f, 0.000234f, 0.000239f, 0.000308f, 0.000597f, 0.000690f, 0.000868f, 0.000937f,
+ 0.001189f, 0.001404f, 0.001696f, 0.001854f, 0.002180f, 0.002249f, 0.002672f, 0.002979f, 0.003494f, 0.003761f, 0.004257f, 0.004745f,
+ 0.005154f, 0.005821f, 0.006561f, 0.007557f, 0.008575f, 0.009575f, 0.010963f, 0.012238f, 0.014130f, 0.016113f, 0.018539f, 0.021545f,
+ 0.025162f, 0.029404f, 0.034851f, 0.041626f, 0.050354f, 0.061218f, 0.075562f, 0.094482f, 0.119507f, 0.152344f, 0.196167f, 0.252197f,
+ 0.322266f, 0.404053f, 0.490967f, 0.577637f, 0.658203f, 0.726074f, 0.782715f, 0.827637f, 0.861816f, 0.889648f, 0.910645f, 0.926758f,
+ 0.940918f, 0.950684f, 0.983398f, 0.985352f, 0.984863f, 0.985352f, 0.985840f, 0.985352f, 0.000000f, 0.000240f, 0.000237f, 0.000239f,
+ 0.000436f, 0.000648f, 0.000661f, 0.000892f, 0.001089f, 0.001484f, 0.001446f, 0.001586f, 0.001896f, 0.002176f, 0.002325f, 0.002634f,
+ 0.003057f, 0.003315f, 0.003561f, 0.004150f, 0.004578f, 0.005180f, 0.005768f, 0.006485f, 0.007286f, 0.008400f, 0.009453f, 0.010429f,
+ 0.011795f, 0.013680f, 0.015671f, 0.018005f, 0.020981f, 0.024521f, 0.028748f, 0.034119f, 0.040863f, 0.049622f, 0.060303f, 0.074829f,
+ 0.094116f, 0.119995f, 0.154297f, 0.199341f, 0.258301f, 0.331787f, 0.416504f, 0.507812f, 0.595703f, 0.675781f, 0.743164f, 0.797852f,
+ 0.840820f, 0.873535f, 0.899414f, 0.919434f, 0.934082f, 0.947266f, 0.982422f, 0.983887f, 0.983887f, 0.984375f, 0.984375f, 0.983887f,
+ 0.000136f, 0.000115f, 0.000237f, 0.000238f, 0.000358f, 0.000452f, 0.000759f, 0.000961f, 0.001026f, 0.001113f, 0.001433f, 0.001564f,
+ 0.001659f, 0.001955f, 0.002024f, 0.002384f, 0.002647f, 0.002974f, 0.003267f, 0.003611f, 0.003971f, 0.004498f, 0.005043f, 0.005539f,
+ 0.006344f, 0.007168f, 0.007942f, 0.009010f, 0.010353f, 0.011711f, 0.013458f, 0.015213f, 0.017548f, 0.020279f, 0.023926f, 0.028061f,
+ 0.033356f, 0.040283f, 0.048615f, 0.060455f, 0.074890f, 0.094727f, 0.121216f, 0.156860f, 0.204102f, 0.266846f, 0.344238f, 0.433105f,
+ 0.526855f, 0.616699f, 0.696289f, 0.761230f, 0.813965f, 0.854492f, 0.884766f, 0.909180f, 0.927734f, 0.941895f, 0.980957f, 0.982422f,
+ 0.982910f, 0.982422f, 0.982422f, 0.982910f, 0.000000f, 0.000103f, 0.000208f, 0.000356f, 0.000355f, 0.000400f, 0.000454f, 0.000861f,
+ 0.000922f, 0.001202f, 0.001088f, 0.001401f, 0.001493f, 0.001779f, 0.001881f, 0.002180f, 0.002329f, 0.002483f, 0.002846f, 0.003178f,
+ 0.003542f, 0.003914f, 0.004406f, 0.004871f, 0.005352f, 0.006119f, 0.006927f, 0.007904f, 0.008759f, 0.009972f, 0.011284f, 0.013046f,
+ 0.014938f, 0.016998f, 0.019943f, 0.023224f, 0.027161f, 0.032776f, 0.039917f, 0.048218f, 0.059937f, 0.075134f, 0.095642f, 0.123169f,
+ 0.160767f, 0.211670f, 0.278320f, 0.360352f, 0.454102f, 0.550293f, 0.640625f, 0.718262f, 0.781738f, 0.831055f, 0.869141f, 0.897461f,
+ 0.919434f, 0.936035f, 0.979492f, 0.980957f, 0.980957f, 0.981934f, 0.981445f, 0.981445f, 0.000000f, 0.000192f, 0.000191f, 0.000350f,
+ 0.000352f, 0.000354f, 0.000599f, 0.000721f, 0.000835f, 0.001044f, 0.000988f, 0.001141f, 0.001255f, 0.001479f, 0.001705f, 0.001815f,
+ 0.001843f, 0.002151f, 0.002369f, 0.002831f, 0.003067f, 0.003431f, 0.003698f, 0.004295f, 0.004738f, 0.005352f, 0.005859f, 0.006615f,
+ 0.007587f, 0.008583f, 0.009682f, 0.010735f, 0.012405f, 0.014381f, 0.016708f, 0.018921f, 0.022736f, 0.026947f, 0.032104f, 0.039032f,
+ 0.048004f, 0.059784f, 0.075500f, 0.096924f, 0.125977f, 0.166626f, 0.221069f, 0.292969f, 0.380371f, 0.479004f, 0.577637f, 0.667969f,
+ 0.743164f, 0.803711f, 0.849609f, 0.883789f, 0.910645f, 0.930176f, 0.977539f, 0.979492f, 0.979492f, 0.979492f, 0.979980f, 0.979492f,
+ 0.000000f, 0.000000f, 0.000191f, 0.000214f, 0.000441f, 0.000465f, 0.000351f, 0.000656f, 0.000672f, 0.000957f, 0.000881f, 0.001092f,
+ 0.001209f, 0.001259f, 0.001315f, 0.001583f, 0.001630f, 0.001834f, 0.002033f, 0.002367f, 0.002596f, 0.002924f, 0.003387f, 0.003693f,
+ 0.004063f, 0.004601f, 0.004986f, 0.005676f, 0.006557f, 0.006973f, 0.007801f, 0.008781f, 0.010475f, 0.012100f, 0.013817f, 0.015625f,
+ 0.018784f, 0.021927f, 0.026260f, 0.031677f, 0.038879f, 0.048004f, 0.059845f, 0.076233f, 0.098633f, 0.130005f, 0.173950f, 0.233032f,
+ 0.311035f, 0.405518f, 0.507812f, 0.608887f, 0.698242f, 0.769531f, 0.826172f, 0.868164f, 0.899414f, 0.922852f, 0.976074f, 0.977539f,
+ 0.977539f, 0.977051f, 0.978027f, 0.978027f, 0.000000f, 0.000000f, 0.000117f, 0.000211f, 0.000326f, 0.000573f, 0.000574f, 0.000583f,
+ 0.000584f, 0.000659f, 0.000901f, 0.001014f, 0.001064f, 0.001033f, 0.001163f, 0.001234f, 0.001546f, 0.001585f, 0.001894f, 0.002085f,
+ 0.002361f, 0.002504f, 0.003023f, 0.003147f, 0.003580f, 0.004032f, 0.004314f, 0.004936f, 0.005215f, 0.006081f, 0.006725f, 0.007927f,
+ 0.008743f, 0.009918f, 0.011642f, 0.013367f, 0.015404f, 0.018219f, 0.021545f, 0.025787f, 0.031174f, 0.038361f, 0.047577f, 0.060425f,
+ 0.077881f, 0.102051f, 0.135376f, 0.182861f, 0.249023f, 0.333984f, 0.436035f, 0.542969f, 0.644043f, 0.730469f, 0.798340f, 0.848633f,
+ 0.886719f, 0.914062f, 0.973633f, 0.974609f, 0.975098f, 0.976074f, 0.975098f, 0.976074f, 0.000000f, 0.000000f, 0.000114f, 0.000112f,
+ 0.000271f, 0.000510f, 0.000450f, 0.000565f, 0.000572f, 0.000581f, 0.000654f, 0.000825f, 0.000954f, 0.001085f, 0.001050f, 0.001087f,
+ 0.001282f, 0.001547f, 0.001585f, 0.001825f, 0.002066f, 0.002182f, 0.002384f, 0.002659f, 0.003172f, 0.003357f, 0.003721f, 0.004238f,
+ 0.004505f, 0.005024f, 0.005878f, 0.006512f, 0.007324f, 0.008293f, 0.009201f, 0.011040f, 0.012993f, 0.015007f, 0.017639f, 0.020920f,
+ 0.025131f, 0.030899f, 0.038269f, 0.047760f, 0.061188f, 0.079651f, 0.105469f, 0.142944f, 0.195801f, 0.268799f, 0.363525f, 0.472168f,
+ 0.582520f, 0.683594f, 0.765137f, 0.826660f, 0.872070f, 0.905273f, 0.972168f, 0.973633f, 0.973145f, 0.973633f, 0.973633f, 0.973633f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000111f, 0.000224f, 0.000412f, 0.000494f, 0.000543f, 0.000561f, 0.000680f, 0.000665f, 0.000675f,
+ 0.000679f, 0.000797f, 0.000926f, 0.001122f, 0.001132f, 0.001207f, 0.001375f, 0.001606f, 0.001838f, 0.001963f, 0.002163f, 0.002314f,
+ 0.002480f, 0.002956f, 0.003189f, 0.003489f, 0.003744f, 0.004311f, 0.004749f, 0.005276f, 0.005867f, 0.006962f, 0.008186f, 0.008987f,
+ 0.010498f, 0.012283f, 0.014374f, 0.017075f, 0.020355f, 0.024719f, 0.030640f, 0.037720f, 0.048309f, 0.062134f, 0.082336f, 0.110840f,
+ 0.151978f, 0.212891f, 0.294922f, 0.399170f, 0.515137f, 0.628418f, 0.724609f, 0.799805f, 0.854980f, 0.894043f, 0.968750f, 0.970215f,
+ 0.970703f, 0.971191f, 0.970703f, 0.970703f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000228f, 0.000233f, 0.000436f, 0.000457f,
+ 0.000621f, 0.000546f, 0.000622f, 0.000633f, 0.000576f, 0.000644f, 0.000717f, 0.000909f, 0.000994f, 0.001127f, 0.001179f, 0.001267f,
+ 0.001513f, 0.001628f, 0.001742f, 0.001974f, 0.002111f, 0.002403f, 0.002810f, 0.003139f, 0.003231f, 0.003466f, 0.004021f, 0.004459f,
+ 0.004971f, 0.005581f, 0.006809f, 0.007568f, 0.008759f, 0.010002f, 0.011665f, 0.013847f, 0.016342f, 0.019714f, 0.024368f, 0.030106f,
+ 0.037811f, 0.048706f, 0.063843f, 0.085327f, 0.118042f, 0.164917f, 0.234131f, 0.328125f, 0.443359f, 0.565430f, 0.677246f, 0.767578f,
+ 0.833496f, 0.882812f, 0.965820f, 0.967285f, 0.967773f, 0.968262f, 0.967773f, 0.968262f, 0.000000f, 0.000000f, 0.000000f, 0.000214f,
+ 0.000210f, 0.000296f, 0.000309f, 0.000386f, 0.000462f, 0.000482f, 0.000525f, 0.000572f, 0.000525f, 0.000558f, 0.000689f, 0.000685f,
+ 0.000841f, 0.000934f, 0.001008f, 0.001182f, 0.001271f, 0.001412f, 0.001757f, 0.001787f, 0.001769f, 0.002110f, 0.002321f, 0.002331f,
+ 0.002737f, 0.002951f, 0.003189f, 0.003588f, 0.004253f, 0.004627f, 0.005505f, 0.006119f, 0.006969f, 0.008018f, 0.009583f, 0.010971f,
+ 0.013245f, 0.015915f, 0.019257f, 0.023651f, 0.030014f, 0.038086f, 0.049683f, 0.066406f, 0.091125f, 0.127441f, 0.182617f, 0.262939f,
+ 0.370605f, 0.497070f, 0.623047f, 0.729004f, 0.810547f, 0.867188f, 0.962891f, 0.963867f, 0.964844f, 0.964844f, 0.964355f, 0.964355f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000200f, 0.000215f, 0.000229f, 0.000319f, 0.000330f, 0.000411f, 0.000491f, 0.000527f,
+ 0.000547f, 0.000560f, 0.000634f, 0.000648f, 0.000716f, 0.000778f, 0.000855f, 0.000998f, 0.001182f, 0.001111f, 0.001274f, 0.001625f,
+ 0.001584f, 0.001559f, 0.001864f, 0.002037f, 0.002296f, 0.002438f, 0.002600f, 0.002993f, 0.003290f, 0.003801f, 0.004467f, 0.005085f,
+ 0.005508f, 0.006519f, 0.007645f, 0.008743f, 0.010757f, 0.012558f, 0.014946f, 0.018661f, 0.023422f, 0.029556f, 0.038574f, 0.050964f,
+ 0.069702f, 0.097351f, 0.140015f, 0.205566f, 0.301025f, 0.424561f, 0.559082f, 0.683594f, 0.781250f, 0.852051f, 0.958496f, 0.960449f,
+ 0.960938f, 0.960938f, 0.960938f, 0.960449f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000194f, 0.000214f, 0.000251f,
+ 0.000302f, 0.000365f, 0.000370f, 0.000429f, 0.000495f, 0.000521f, 0.000504f, 0.000547f, 0.000632f, 0.000656f, 0.000695f, 0.000795f,
+ 0.000922f, 0.001074f, 0.001125f, 0.001192f, 0.001166f, 0.001303f, 0.001555f, 0.001575f, 0.001763f, 0.001970f, 0.002232f, 0.002560f,
+ 0.002657f, 0.003082f, 0.003559f, 0.003799f, 0.004620f, 0.005241f, 0.006081f, 0.007103f, 0.008385f, 0.009796f, 0.012192f, 0.014702f,
+ 0.018234f, 0.022934f, 0.029556f, 0.039307f, 0.053009f, 0.073547f, 0.106628f, 0.157715f, 0.237793f, 0.351318f, 0.490479f, 0.629883f,
+ 0.746094f, 0.832031f, 0.954590f, 0.956055f, 0.956055f, 0.957031f, 0.956543f, 0.956055f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000121f, 0.000146f, 0.000191f, 0.000200f, 0.000255f, 0.000232f, 0.000252f, 0.000359f, 0.000291f, 0.000342f, 0.000406f, 0.000498f,
+ 0.000520f, 0.000533f, 0.000632f, 0.000605f, 0.000689f, 0.000768f, 0.000908f, 0.001013f, 0.001087f, 0.001030f, 0.001211f, 0.001318f,
+ 0.001497f, 0.001609f, 0.001753f, 0.001957f, 0.002234f, 0.002352f, 0.002663f, 0.003040f, 0.003635f, 0.004082f, 0.004723f, 0.005516f,
+ 0.006367f, 0.007675f, 0.009224f, 0.011360f, 0.013695f, 0.017868f, 0.022598f, 0.029724f, 0.040222f, 0.055542f, 0.080078f, 0.119202f,
+ 0.182617f, 0.281738f, 0.417725f, 0.568848f, 0.705566f, 0.807129f, 0.948730f, 0.951172f, 0.951172f, 0.951172f, 0.951660f, 0.951660f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000203f, 0.000186f, 0.000184f, 0.000321f,
+ 0.000231f, 0.000337f, 0.000359f, 0.000430f, 0.000455f, 0.000531f, 0.000502f, 0.000517f, 0.000728f, 0.000643f, 0.000673f, 0.000816f,
+ 0.000930f, 0.000991f, 0.001028f, 0.001161f, 0.001284f, 0.001369f, 0.001474f, 0.001719f, 0.001781f, 0.001883f, 0.002258f, 0.002518f,
+ 0.002831f, 0.003201f, 0.003744f, 0.004349f, 0.005127f, 0.006130f, 0.007210f, 0.008423f, 0.010696f, 0.013405f, 0.017136f, 0.022522f,
+ 0.030029f, 0.041321f, 0.059631f, 0.089050f, 0.138062f, 0.218994f, 0.343750f, 0.500488f, 0.657227f, 0.780762f, 0.943848f, 0.945312f,
+ 0.945312f, 0.945801f, 0.945801f, 0.946289f, 0.000000f, 0.000000f, 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000120f,
+ 0.000118f, 0.000137f, 0.000139f, 0.000241f, 0.000202f, 0.000304f, 0.000313f, 0.000332f, 0.000357f, 0.000420f, 0.000435f, 0.000463f,
+ 0.000645f, 0.000544f, 0.000700f, 0.000717f, 0.000669f, 0.000834f, 0.000865f, 0.000916f, 0.001109f, 0.001193f, 0.001246f, 0.001300f,
+ 0.001488f, 0.001538f, 0.001806f, 0.001929f, 0.002001f, 0.002462f, 0.002666f, 0.003260f, 0.003904f, 0.004364f, 0.005325f, 0.006306f,
+ 0.008041f, 0.009720f, 0.012718f, 0.016525f, 0.022217f, 0.030579f, 0.043854f, 0.065247f, 0.101929f, 0.166016f, 0.273193f, 0.428223f,
+ 0.600586f, 0.748047f, 0.936523f, 0.938477f, 0.938965f, 0.939453f, 0.938965f, 0.938965f, 0.000000f, 0.000122f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000120f, 0.000120f, 0.000120f, 0.000114f, 0.000102f, 0.000090f, 0.000096f, 0.000131f, 0.000245f, 0.000276f, 0.000257f,
+ 0.000307f, 0.000316f, 0.000322f, 0.000373f, 0.000411f, 0.000440f, 0.000433f, 0.000650f, 0.000578f, 0.000704f, 0.000746f, 0.000723f,
+ 0.000819f, 0.000756f, 0.000758f, 0.000878f, 0.001009f, 0.001270f, 0.001399f, 0.001530f, 0.001798f, 0.001803f, 0.002151f, 0.002317f,
+ 0.002728f, 0.003222f, 0.003782f, 0.004612f, 0.005951f, 0.006985f, 0.009308f, 0.011955f, 0.016052f, 0.022324f, 0.031525f, 0.047272f,
+ 0.073853f, 0.122192f, 0.209717f, 0.352783f, 0.537109f, 0.709473f, 0.928223f, 0.930664f, 0.931152f, 0.930664f, 0.931641f, 0.931152f,
+ 0.000000f, 0.000000f, 0.000121f, 0.000121f, 0.000120f, 0.000120f, 0.000120f, 0.000119f, 0.000119f, 0.000111f, 0.000100f, 0.000139f,
+ 0.000082f, 0.000154f, 0.000121f, 0.000216f, 0.000147f, 0.000271f, 0.000288f, 0.000298f, 0.000386f, 0.000463f, 0.000370f, 0.000485f,
+ 0.000555f, 0.000530f, 0.000578f, 0.000574f, 0.000612f, 0.000712f, 0.000776f, 0.000716f, 0.000931f, 0.000831f, 0.000967f, 0.001154f,
+ 0.001176f, 0.001284f, 0.001497f, 0.001884f, 0.002270f, 0.002415f, 0.002947f, 0.003412f, 0.004032f, 0.005066f, 0.006485f, 0.008400f,
+ 0.011215f, 0.015404f, 0.022079f, 0.033264f, 0.052124f, 0.087646f, 0.155029f, 0.279297f, 0.465820f, 0.664062f, 0.918945f, 0.921387f,
+ 0.921875f, 0.922363f, 0.922363f, 0.921875f, 0.000000f, 0.000121f, 0.000121f, 0.000120f, 0.000120f, 0.000119f, 0.000119f, 0.000119f,
+ 0.000118f, 0.000118f, 0.000110f, 0.000100f, 0.000091f, 0.000082f, 0.000075f, 0.000095f, 0.000166f, 0.000113f, 0.000163f, 0.000248f,
+ 0.000258f, 0.000277f, 0.000336f, 0.000301f, 0.000445f, 0.000495f, 0.000473f, 0.000505f, 0.000494f, 0.000470f, 0.000584f, 0.000752f,
+ 0.000821f, 0.000814f, 0.000845f, 0.000807f, 0.000932f, 0.000996f, 0.001380f, 0.001481f, 0.001507f, 0.001757f, 0.002146f, 0.002443f,
+ 0.002869f, 0.003546f, 0.004559f, 0.005878f, 0.007561f, 0.010475f, 0.015320f, 0.022675f, 0.036133f, 0.060883f, 0.110352f, 0.211670f,
+ 0.389160f, 0.610352f, 0.908691f, 0.909180f, 0.910645f, 0.912109f, 0.909668f, 0.910156f, 0.000000f, 0.000121f, 0.000120f, 0.000119f,
+ 0.000119f, 0.000118f, 0.000118f, 0.000117f, 0.000117f, 0.000117f, 0.000116f, 0.000110f, 0.000100f, 0.000099f, 0.000083f, 0.000077f,
+ 0.000071f, 0.000081f, 0.000087f, 0.000166f, 0.000177f, 0.000233f, 0.000238f, 0.000273f, 0.000325f, 0.000357f, 0.000292f, 0.000406f,
+ 0.000418f, 0.000440f, 0.000428f, 0.000568f, 0.000459f, 0.000628f, 0.000678f, 0.000688f, 0.000647f, 0.000830f, 0.000925f, 0.001111f,
+ 0.001011f, 0.001420f, 0.001504f, 0.001771f, 0.001997f, 0.002495f, 0.003147f, 0.003944f, 0.005077f, 0.006958f, 0.010040f, 0.015053f,
+ 0.023727f, 0.040680f, 0.075989f, 0.153076f, 0.312012f, 0.547363f, 0.894531f, 0.897461f, 0.897949f, 0.897949f, 0.897949f, 0.898438f,
+ 0.000000f, 0.000000f, 0.000119f, 0.000118f, 0.000118f, 0.000117f, 0.000116f, 0.000116f, 0.000115f, 0.000115f, 0.000114f, 0.000114f,
+ 0.000111f, 0.000101f, 0.000093f, 0.000086f, 0.000079f, 0.000095f, 0.000095f, 0.000090f, 0.000117f, 0.000109f, 0.000158f, 0.000199f,
+ 0.000207f, 0.000223f, 0.000286f, 0.000288f, 0.000267f, 0.000347f, 0.000368f, 0.000450f, 0.000377f, 0.000460f, 0.000504f, 0.000498f,
+ 0.000494f, 0.000616f, 0.000632f, 0.000699f, 0.000755f, 0.000938f, 0.000978f, 0.001222f, 0.001355f, 0.001673f, 0.002016f, 0.002539f,
+ 0.003258f, 0.004410f, 0.006332f, 0.009285f, 0.014847f, 0.025864f, 0.049042f, 0.104736f, 0.236572f, 0.477295f, 0.879395f, 0.881348f,
+ 0.882324f, 0.881836f, 0.882324f, 0.882324f, 0.000000f, 0.000119f, 0.000118f, 0.000116f, 0.000115f, 0.000114f, 0.000114f, 0.000113f,
+ 0.000112f, 0.000112f, 0.000111f, 0.000111f, 0.000110f, 0.000110f, 0.000103f, 0.000095f, 0.000088f, 0.000081f, 0.000076f, 0.000070f,
+ 0.000065f, 0.000100f, 0.000104f, 0.000099f, 0.000120f, 0.000145f, 0.000190f, 0.000204f, 0.000213f, 0.000230f, 0.000241f, 0.000279f,
+ 0.000325f, 0.000322f, 0.000328f, 0.000381f, 0.000351f, 0.000466f, 0.000452f, 0.000516f, 0.000591f, 0.000622f, 0.000733f, 0.000882f,
+ 0.000895f, 0.001092f, 0.001456f, 0.001765f, 0.002069f, 0.002821f, 0.003851f, 0.005558f, 0.008865f, 0.015579f, 0.029999f, 0.066895f,
+ 0.167480f, 0.400391f, 0.860352f, 0.862793f, 0.863281f, 0.864258f, 0.863281f, 0.863770f, 0.000119f, 0.000114f, 0.000113f, 0.000113f,
+ 0.000111f, 0.000110f, 0.000109f, 0.000109f, 0.000108f, 0.000107f, 0.000107f, 0.000107f, 0.000106f, 0.000105f, 0.000106f, 0.000105f,
+ 0.000098f, 0.000090f, 0.000084f, 0.000078f, 0.000073f, 0.000068f, 0.000063f, 0.000063f, 0.000066f, 0.000053f, 0.000080f, 0.000107f,
+ 0.000126f, 0.000150f, 0.000188f, 0.000187f, 0.000206f, 0.000205f, 0.000235f, 0.000242f, 0.000277f, 0.000340f, 0.000323f, 0.000308f,
+ 0.000417f, 0.000411f, 0.000445f, 0.000536f, 0.000622f, 0.000673f, 0.000887f, 0.000985f, 0.001289f, 0.001623f, 0.002337f, 0.003241f,
+ 0.004929f, 0.008560f, 0.016739f, 0.039307f, 0.109619f, 0.317383f, 0.837402f, 0.840332f, 0.841309f, 0.840820f, 0.840820f, 0.841309f,
+ 0.000000f, 0.000106f, 0.000099f, 0.000104f, 0.000102f, 0.000101f, 0.000100f, 0.000101f, 0.000101f, 0.000100f, 0.000099f, 0.000100f,
+ 0.000099f, 0.000099f, 0.000099f, 0.000098f, 0.000098f, 0.000098f, 0.000093f, 0.000086f, 0.000080f, 0.000075f, 0.000070f, 0.000065f,
+ 0.000061f, 0.000057f, 0.000059f, 0.000054f, 0.000061f, 0.000080f, 0.000087f, 0.000101f, 0.000136f, 0.000147f, 0.000163f, 0.000171f,
+ 0.000179f, 0.000205f, 0.000223f, 0.000237f, 0.000281f, 0.000272f, 0.000299f, 0.000364f, 0.000373f, 0.000448f, 0.000507f, 0.000643f,
+ 0.000801f, 0.001000f, 0.001276f, 0.001765f, 0.002712f, 0.004585f, 0.008492f, 0.020462f, 0.063721f, 0.233643f, 0.811035f, 0.813477f,
+ 0.814453f, 0.813965f, 0.813965f, 0.814453f, 0.000000f, 0.000057f, 0.000085f, 0.000085f, 0.000083f, 0.000085f, 0.000087f, 0.000086f,
+ 0.000087f, 0.000087f, 0.000086f, 0.000087f, 0.000087f, 0.000086f, 0.000087f, 0.000087f, 0.000088f, 0.000086f, 0.000088f, 0.000087f,
+ 0.000087f, 0.000081f, 0.000076f, 0.000071f, 0.000067f, 0.000063f, 0.000058f, 0.000055f, 0.000051f, 0.000048f, 0.000046f, 0.000042f,
+ 0.000051f, 0.000063f, 0.000081f, 0.000101f, 0.000122f, 0.000137f, 0.000147f, 0.000143f, 0.000157f, 0.000183f, 0.000205f, 0.000188f,
+ 0.000196f, 0.000249f, 0.000310f, 0.000329f, 0.000413f, 0.000534f, 0.000679f, 0.000944f, 0.001365f, 0.002199f, 0.004150f, 0.009369f,
+ 0.031677f, 0.153564f, 0.779297f, 0.781250f, 0.782227f, 0.782715f, 0.781738f, 0.781250f, 0.000000f, 0.000000f, 0.000000f, 0.000009f,
+ 0.000030f, 0.000048f, 0.000051f, 0.000054f, 0.000055f, 0.000059f, 0.000060f, 0.000065f, 0.000065f, 0.000066f, 0.000068f, 0.000068f,
+ 0.000070f, 0.000070f, 0.000071f, 0.000071f, 0.000072f, 0.000073f, 0.000073f, 0.000073f, 0.000071f, 0.000066f, 0.000062f, 0.000058f,
+ 0.000055f, 0.000051f, 0.000048f, 0.000045f, 0.000042f, 0.000039f, 0.000044f, 0.000036f, 0.000046f, 0.000056f, 0.000067f, 0.000085f,
+ 0.000099f, 0.000108f, 0.000107f, 0.000113f, 0.000139f, 0.000144f, 0.000165f, 0.000169f, 0.000196f, 0.000266f, 0.000311f, 0.000426f,
+ 0.000598f, 0.000948f, 0.001744f, 0.003975f, 0.012856f, 0.084351f, 0.739746f, 0.743164f, 0.743652f, 0.743652f, 0.743652f, 0.743164f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000012f, 0.000012f, 0.000020f,
+ 0.000028f, 0.000030f, 0.000033f, 0.000034f, 0.000041f, 0.000041f, 0.000045f, 0.000047f, 0.000048f, 0.000049f, 0.000051f, 0.000052f,
+ 0.000054f, 0.000054f, 0.000056f, 0.000057f, 0.000056f, 0.000052f, 0.000049f, 0.000046f, 0.000043f, 0.000041f, 0.000038f, 0.000035f,
+ 0.000033f, 0.000031f, 0.000029f, 0.000029f, 0.000036f, 0.000055f, 0.000048f, 0.000067f, 0.000067f, 0.000073f, 0.000075f, 0.000097f,
+ 0.000085f, 0.000111f, 0.000137f, 0.000191f, 0.000233f, 0.000371f, 0.000609f, 0.001319f, 0.004341f, 0.033844f, 0.696289f, 0.698730f,
+ 0.699219f, 0.698242f, 0.698730f, 0.698730f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000003f, 0.000007f,
+ 0.000009f, 0.000012f, 0.000015f, 0.000020f, 0.000022f, 0.000023f, 0.000026f, 0.000029f, 0.000030f, 0.000032f, 0.000033f, 0.000035f,
+ 0.000037f, 0.000037f, 0.000036f, 0.000034f, 0.000032f, 0.000030f, 0.000028f, 0.000026f, 0.000024f, 0.000022f, 0.000021f, 0.000019f,
+ 0.000024f, 0.000024f, 0.000029f, 0.000037f, 0.000043f, 0.000046f, 0.000059f, 0.000058f, 0.000075f, 0.000095f, 0.000160f, 0.000306f,
+ 0.001006f, 0.008865f, 0.643066f, 0.647461f, 0.647949f, 0.647461f, 0.647949f, 0.648438f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000003f, 0.000005f, 0.000007f, 0.000010f, 0.000012f, 0.000013f, 0.000015f, 0.000017f,
+ 0.000019f, 0.000020f, 0.000018f, 0.000017f, 0.000015f, 0.000014f, 0.000013f, 0.000012f, 0.000010f, 0.000012f, 0.000014f, 0.000018f,
+ 0.000018f, 0.000025f, 0.000028f, 0.000045f, 0.000110f, 0.001030f, 0.586914f, 0.589844f, 0.590820f, 0.591309f, 0.591309f, 0.590820f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000002f, 0.000004f, 0.000005f, 0.000004f, 0.000004f, 0.000003f, 0.000003f, 0.000004f, 0.000009f, 0.527344f, 0.529785f,
+ 0.529785f, 0.530273f, 0.530762f, 0.530762f,
+ },
+ {
+ 0.135132f, 0.377441f, 0.544434f, 0.653320f, 0.724609f, 0.773926f, 0.811035f, 0.838867f, 0.860840f, 0.876465f, 0.891113f, 0.902832f,
+ 0.912109f, 0.920898f, 0.928223f, 0.934082f, 0.938965f, 0.943848f, 0.948242f, 0.952637f, 0.955566f, 0.958984f, 0.961914f, 0.964844f,
+ 0.966797f, 0.969238f, 0.971191f, 0.973145f, 0.975098f, 0.976562f, 0.978027f, 0.979492f, 0.980469f, 0.982422f, 0.983398f, 0.984863f,
+ 0.985840f, 0.986328f, 0.987793f, 0.988770f, 0.989746f, 0.989746f, 0.990234f, 0.991699f, 0.992676f, 0.993164f, 0.993652f, 0.994141f,
+ 0.994629f, 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.044891f, 0.163330f, 0.306885f, 0.444336f, 0.559570f, 0.645020f, 0.710938f, 0.760742f,
+ 0.797852f, 0.827148f, 0.850098f, 0.868652f, 0.883789f, 0.895996f, 0.907227f, 0.916016f, 0.923340f, 0.930176f, 0.936523f, 0.941406f,
+ 0.946777f, 0.950684f, 0.954102f, 0.957031f, 0.960938f, 0.963379f, 0.965820f, 0.968262f, 0.970703f, 0.972168f, 0.974609f, 0.976562f,
+ 0.977539f, 0.979492f, 0.980469f, 0.981934f, 0.982910f, 0.984375f, 0.985840f, 0.986816f, 0.987793f, 0.988770f, 0.988770f, 0.990234f,
+ 0.991211f, 0.991699f, 0.992676f, 0.993164f, 0.993164f, 0.994141f, 0.995605f, 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.997559f,
+ 0.998047f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999023f, 0.999023f, 0.999023f, 0.020325f, 0.077820f, 0.158936f, 0.260498f,
+ 0.372314f, 0.479736f, 0.572754f, 0.648438f, 0.707520f, 0.754883f, 0.791016f, 0.820312f, 0.843750f, 0.862793f, 0.878906f, 0.891602f,
+ 0.903320f, 0.912598f, 0.920898f, 0.928223f, 0.933594f, 0.939941f, 0.944824f, 0.949219f, 0.952637f, 0.956543f, 0.959961f, 0.962402f,
+ 0.965332f, 0.967773f, 0.970215f, 0.971680f, 0.974121f, 0.976074f, 0.977539f, 0.979004f, 0.980957f, 0.981445f, 0.983398f, 0.984375f,
+ 0.985352f, 0.986328f, 0.987793f, 0.988770f, 0.989746f, 0.990234f, 0.991211f, 0.992188f, 0.992676f, 0.993164f, 0.994141f, 0.994629f,
+ 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997559f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.998535f, 0.998535f,
+ 0.012032f, 0.042908f, 0.088196f, 0.149292f, 0.228027f, 0.319824f, 0.415527f, 0.506348f, 0.586914f, 0.653809f, 0.709473f, 0.752441f,
+ 0.787598f, 0.817383f, 0.840820f, 0.860352f, 0.876465f, 0.889648f, 0.900879f, 0.910156f, 0.918945f, 0.926270f, 0.933105f, 0.938965f,
+ 0.944336f, 0.948730f, 0.952637f, 0.956055f, 0.958984f, 0.962402f, 0.965332f, 0.967773f, 0.970215f, 0.972656f, 0.974609f, 0.976562f,
+ 0.978027f, 0.979492f, 0.980957f, 0.982422f, 0.983887f, 0.984375f, 0.985352f, 0.986816f, 0.987793f, 0.988770f, 0.989746f, 0.990234f,
+ 0.991211f, 0.992188f, 0.993164f, 0.994141f, 0.994629f, 0.995117f, 0.996094f, 0.996094f, 0.996582f, 0.997559f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.007637f, 0.026825f, 0.053436f, 0.090759f, 0.140137f, 0.203125f, 0.279053f, 0.363281f,
+ 0.449463f, 0.529785f, 0.601562f, 0.663574f, 0.713379f, 0.756348f, 0.789551f, 0.816895f, 0.840332f, 0.858887f, 0.875488f, 0.887695f,
+ 0.900391f, 0.909668f, 0.918945f, 0.926270f, 0.932617f, 0.938477f, 0.943848f, 0.948242f, 0.952148f, 0.955566f, 0.959473f, 0.962402f,
+ 0.965332f, 0.967773f, 0.970215f, 0.972168f, 0.974121f, 0.976562f, 0.978516f, 0.979492f, 0.980957f, 0.981934f, 0.984375f, 0.985352f,
+ 0.985840f, 0.987793f, 0.988281f, 0.989258f, 0.990723f, 0.991211f, 0.991699f, 0.992676f, 0.993652f, 0.994141f, 0.994629f, 0.995605f,
+ 0.996094f, 0.997070f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998047f, 0.004784f, 0.018082f, 0.035400f, 0.058868f,
+ 0.089783f, 0.130981f, 0.183716f, 0.248047f, 0.321289f, 0.400391f, 0.478760f, 0.552734f, 0.617188f, 0.673828f, 0.720703f, 0.759766f,
+ 0.792480f, 0.818359f, 0.840820f, 0.859863f, 0.875000f, 0.888184f, 0.899902f, 0.910645f, 0.918945f, 0.926270f, 0.931641f, 0.938965f,
+ 0.943848f, 0.948242f, 0.952148f, 0.957031f, 0.959473f, 0.962891f, 0.965332f, 0.968262f, 0.970215f, 0.972656f, 0.975098f, 0.977051f,
+ 0.978516f, 0.979980f, 0.981445f, 0.982910f, 0.984863f, 0.985352f, 0.986328f, 0.987305f, 0.988770f, 0.989746f, 0.990723f, 0.991699f,
+ 0.992676f, 0.993164f, 0.994141f, 0.994629f, 0.995605f, 0.996094f, 0.998047f, 0.998535f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
+ 0.004044f, 0.012550f, 0.024628f, 0.040466f, 0.060760f, 0.087708f, 0.122742f, 0.167236f, 0.222534f, 0.287109f, 0.358643f, 0.432617f,
+ 0.506348f, 0.573242f, 0.632812f, 0.685059f, 0.728516f, 0.766602f, 0.797363f, 0.822266f, 0.843750f, 0.861328f, 0.877441f, 0.890625f,
+ 0.901367f, 0.910645f, 0.919434f, 0.926758f, 0.933105f, 0.940430f, 0.944824f, 0.948730f, 0.953125f, 0.957520f, 0.960449f, 0.963867f,
+ 0.966309f, 0.969238f, 0.970703f, 0.973633f, 0.976074f, 0.977539f, 0.979004f, 0.980469f, 0.982422f, 0.983398f, 0.984863f, 0.986816f,
+ 0.986816f, 0.988281f, 0.989746f, 0.990723f, 0.991211f, 0.992188f, 0.993164f, 0.994141f, 0.994629f, 0.995117f, 0.998047f, 0.998047f,
+ 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.002975f, 0.009315f, 0.017868f, 0.029129f, 0.043243f, 0.062012f, 0.084961f, 0.115540f,
+ 0.154419f, 0.201660f, 0.257812f, 0.322754f, 0.391846f, 0.463135f, 0.530762f, 0.594727f, 0.650391f, 0.698730f, 0.739258f, 0.773926f,
+ 0.803711f, 0.826660f, 0.847656f, 0.865723f, 0.879883f, 0.892090f, 0.903809f, 0.913086f, 0.921387f, 0.928223f, 0.935059f, 0.940918f,
+ 0.945801f, 0.950684f, 0.954102f, 0.958008f, 0.961426f, 0.964844f, 0.967285f, 0.970215f, 0.972168f, 0.974609f, 0.976074f, 0.978027f,
+ 0.979980f, 0.981934f, 0.983398f, 0.984375f, 0.985352f, 0.987305f, 0.988281f, 0.989258f, 0.990234f, 0.991211f, 0.992188f, 0.993164f,
+ 0.993652f, 0.994629f, 0.997559f, 0.998047f, 0.998047f, 0.997559f, 0.997559f, 0.997559f, 0.002329f, 0.007256f, 0.013611f, 0.021790f,
+ 0.032043f, 0.044617f, 0.061554f, 0.082336f, 0.108765f, 0.142578f, 0.184448f, 0.234375f, 0.292725f, 0.357422f, 0.424805f, 0.493164f,
+ 0.556641f, 0.615723f, 0.666504f, 0.711914f, 0.750977f, 0.782715f, 0.809570f, 0.832520f, 0.853516f, 0.868652f, 0.882812f, 0.895508f,
+ 0.905762f, 0.916016f, 0.923340f, 0.931152f, 0.936523f, 0.942383f, 0.947266f, 0.951172f, 0.956055f, 0.958984f, 0.962402f, 0.965820f,
+ 0.968750f, 0.971191f, 0.973633f, 0.975586f, 0.977539f, 0.979980f, 0.980957f, 0.982422f, 0.983887f, 0.985352f, 0.985840f, 0.988281f,
+ 0.989746f, 0.990234f, 0.991211f, 0.991699f, 0.993164f, 0.993652f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
+ 0.001871f, 0.006084f, 0.010963f, 0.016953f, 0.024277f, 0.033722f, 0.046234f, 0.060669f, 0.079224f, 0.103638f, 0.132812f, 0.169678f,
+ 0.214478f, 0.267090f, 0.326172f, 0.390137f, 0.456543f, 0.519531f, 0.581543f, 0.636230f, 0.685547f, 0.726562f, 0.762207f, 0.792969f,
+ 0.818359f, 0.839844f, 0.858398f, 0.874023f, 0.887695f, 0.898926f, 0.909668f, 0.918945f, 0.926270f, 0.933105f, 0.938965f, 0.944336f,
+ 0.949219f, 0.953613f, 0.958008f, 0.961426f, 0.964844f, 0.967773f, 0.969727f, 0.972168f, 0.974609f, 0.976074f, 0.979004f, 0.979980f,
+ 0.981934f, 0.983887f, 0.985352f, 0.986328f, 0.987793f, 0.989746f, 0.989746f, 0.990723f, 0.991211f, 0.992676f, 0.996582f, 0.997070f,
+ 0.997559f, 0.997070f, 0.997070f, 0.997070f, 0.001322f, 0.004795f, 0.008530f, 0.013504f, 0.018921f, 0.026154f, 0.035065f, 0.045807f,
+ 0.059662f, 0.076416f, 0.098267f, 0.124512f, 0.157715f, 0.197388f, 0.244873f, 0.299805f, 0.359619f, 0.423096f, 0.487549f, 0.549316f,
+ 0.605957f, 0.657715f, 0.703125f, 0.741211f, 0.774902f, 0.802734f, 0.827148f, 0.847656f, 0.865234f, 0.879883f, 0.893066f, 0.903320f,
+ 0.913086f, 0.920898f, 0.929199f, 0.935547f, 0.941406f, 0.947266f, 0.951172f, 0.956055f, 0.959473f, 0.962891f, 0.965332f, 0.969238f,
+ 0.971191f, 0.974121f, 0.976562f, 0.977539f, 0.979980f, 0.981445f, 0.982910f, 0.984863f, 0.986328f, 0.988281f, 0.988281f, 0.989746f,
+ 0.990723f, 0.991699f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.996582f, 0.001077f, 0.003971f, 0.006985f, 0.010750f,
+ 0.015579f, 0.020920f, 0.027420f, 0.035522f, 0.045776f, 0.058228f, 0.074097f, 0.093140f, 0.117310f, 0.146851f, 0.182495f, 0.225952f,
+ 0.276611f, 0.332764f, 0.394287f, 0.456543f, 0.518555f, 0.577637f, 0.630371f, 0.679199f, 0.720703f, 0.756836f, 0.787598f, 0.813477f,
+ 0.836426f, 0.855469f, 0.872070f, 0.885742f, 0.897949f, 0.908203f, 0.917480f, 0.925293f, 0.933105f, 0.939453f, 0.944336f, 0.949219f,
+ 0.954590f, 0.957520f, 0.961426f, 0.964844f, 0.968262f, 0.970703f, 0.974121f, 0.975586f, 0.978027f, 0.979492f, 0.981445f, 0.983398f,
+ 0.984863f, 0.986328f, 0.987793f, 0.988770f, 0.989746f, 0.991211f, 0.996094f, 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.996582f,
+ 0.000954f, 0.003330f, 0.005733f, 0.008904f, 0.012505f, 0.016617f, 0.022446f, 0.028351f, 0.036041f, 0.045807f, 0.056854f, 0.071350f,
+ 0.088867f, 0.110596f, 0.137451f, 0.170654f, 0.209717f, 0.256592f, 0.309326f, 0.366943f, 0.427979f, 0.489502f, 0.549316f, 0.604980f,
+ 0.655762f, 0.700195f, 0.738770f, 0.772461f, 0.801270f, 0.825195f, 0.845703f, 0.864258f, 0.879395f, 0.893066f, 0.903809f, 0.914062f,
+ 0.922363f, 0.929688f, 0.936523f, 0.942871f, 0.947266f, 0.952148f, 0.956055f, 0.960449f, 0.963867f, 0.966797f, 0.969727f, 0.972656f,
+ 0.975586f, 0.976562f, 0.979004f, 0.981445f, 0.982910f, 0.984375f, 0.985840f, 0.986816f, 0.988770f, 0.989746f, 0.995605f, 0.996094f,
+ 0.996094f, 0.996094f, 0.996094f, 0.996094f, 0.000949f, 0.002804f, 0.004730f, 0.007236f, 0.010384f, 0.014160f, 0.018478f, 0.023102f,
+ 0.028992f, 0.036346f, 0.044647f, 0.055542f, 0.068481f, 0.085144f, 0.105286f, 0.130005f, 0.159668f, 0.195557f, 0.238647f, 0.287842f,
+ 0.343018f, 0.402588f, 0.463135f, 0.522949f, 0.580566f, 0.632812f, 0.680664f, 0.721680f, 0.757812f, 0.788574f, 0.814453f, 0.836914f,
+ 0.856934f, 0.872070f, 0.887207f, 0.899414f, 0.909668f, 0.918945f, 0.926758f, 0.933594f, 0.940430f, 0.946289f, 0.950684f, 0.954590f,
+ 0.959473f, 0.963379f, 0.966797f, 0.969238f, 0.972168f, 0.975098f, 0.977051f, 0.979492f, 0.980957f, 0.982910f, 0.984375f, 0.986328f,
+ 0.987793f, 0.988770f, 0.995117f, 0.996094f, 0.995605f, 0.996094f, 0.996094f, 0.995605f, 0.000828f, 0.002361f, 0.004116f, 0.006119f,
+ 0.008797f, 0.011391f, 0.014854f, 0.018890f, 0.023666f, 0.029083f, 0.036011f, 0.044434f, 0.053986f, 0.066589f, 0.081543f, 0.100159f,
+ 0.122314f, 0.149536f, 0.183350f, 0.222900f, 0.269043f, 0.321533f, 0.378418f, 0.438477f, 0.499023f, 0.556641f, 0.611328f, 0.661133f,
+ 0.703613f, 0.742188f, 0.775391f, 0.804199f, 0.828613f, 0.849121f, 0.866211f, 0.881348f, 0.894043f, 0.905762f, 0.916016f, 0.924316f,
+ 0.931641f, 0.938477f, 0.944336f, 0.949707f, 0.954590f, 0.958496f, 0.962402f, 0.966309f, 0.969238f, 0.972168f, 0.974121f, 0.977051f,
+ 0.979004f, 0.980957f, 0.982910f, 0.984863f, 0.985840f, 0.987793f, 0.995117f, 0.995605f, 0.995605f, 0.995605f, 0.995605f, 0.995605f,
+ 0.000606f, 0.001948f, 0.003483f, 0.005394f, 0.007290f, 0.009735f, 0.012352f, 0.015747f, 0.019485f, 0.023788f, 0.029358f, 0.035706f,
+ 0.043732f, 0.053162f, 0.064331f, 0.077942f, 0.094971f, 0.116089f, 0.140991f, 0.172485f, 0.209473f, 0.252686f, 0.302002f, 0.356934f,
+ 0.415283f, 0.475830f, 0.534180f, 0.589844f, 0.641602f, 0.687500f, 0.728516f, 0.763184f, 0.792969f, 0.819336f, 0.841309f, 0.860840f,
+ 0.876953f, 0.890625f, 0.902344f, 0.913086f, 0.921875f, 0.930176f, 0.937012f, 0.943359f, 0.948242f, 0.954102f, 0.958008f, 0.961914f,
+ 0.965820f, 0.969238f, 0.971680f, 0.974609f, 0.977051f, 0.979004f, 0.981445f, 0.983398f, 0.984863f, 0.986816f, 0.994141f, 0.994629f,
+ 0.995117f, 0.995117f, 0.995117f, 0.994629f, 0.000672f, 0.001569f, 0.002895f, 0.004528f, 0.006180f, 0.008324f, 0.010864f, 0.013161f,
+ 0.016357f, 0.020096f, 0.024216f, 0.029327f, 0.035583f, 0.042664f, 0.051453f, 0.062073f, 0.075012f, 0.091125f, 0.110291f, 0.134155f,
+ 0.162476f, 0.197266f, 0.238037f, 0.285156f, 0.337646f, 0.395020f, 0.454590f, 0.513672f, 0.570312f, 0.624023f, 0.672363f, 0.714844f,
+ 0.750977f, 0.783691f, 0.811035f, 0.834473f, 0.854004f, 0.872070f, 0.886230f, 0.899414f, 0.911133f, 0.918945f, 0.928223f, 0.936035f,
+ 0.942871f, 0.948242f, 0.953613f, 0.957031f, 0.961426f, 0.965820f, 0.968750f, 0.972168f, 0.974121f, 0.976562f, 0.979492f, 0.981445f,
+ 0.983398f, 0.985352f, 0.994141f, 0.994629f, 0.995117f, 0.995117f, 0.995117f, 0.994629f, 0.000413f, 0.001430f, 0.002577f, 0.004269f,
+ 0.005703f, 0.007137f, 0.008888f, 0.011124f, 0.013885f, 0.016891f, 0.020355f, 0.024384f, 0.029221f, 0.035217f, 0.041748f, 0.049988f,
+ 0.060059f, 0.072083f, 0.086914f, 0.105286f, 0.126953f, 0.154175f, 0.186523f, 0.224731f, 0.269287f, 0.320557f, 0.375732f, 0.434570f,
+ 0.493896f, 0.552246f, 0.606934f, 0.655762f, 0.701660f, 0.740723f, 0.774902f, 0.803711f, 0.827637f, 0.848633f, 0.867188f, 0.882812f,
+ 0.895996f, 0.908203f, 0.917969f, 0.926758f, 0.934570f, 0.941895f, 0.947266f, 0.952637f, 0.957520f, 0.960938f, 0.965820f, 0.968750f,
+ 0.971680f, 0.974609f, 0.977051f, 0.979980f, 0.981934f, 0.983887f, 0.993652f, 0.994629f, 0.994141f, 0.994141f, 0.994141f, 0.994141f,
+ 0.000240f, 0.001406f, 0.002373f, 0.003283f, 0.004620f, 0.006264f, 0.007744f, 0.009552f, 0.011711f, 0.014069f, 0.017273f, 0.020584f,
+ 0.024429f, 0.028946f, 0.034393f, 0.041046f, 0.048798f, 0.058289f, 0.070312f, 0.083618f, 0.100403f, 0.121338f, 0.146118f, 0.177002f,
+ 0.213257f, 0.255371f, 0.304443f, 0.358887f, 0.416504f, 0.476562f, 0.534668f, 0.590332f, 0.642090f, 0.688965f, 0.729492f, 0.766113f,
+ 0.796387f, 0.822754f, 0.844727f, 0.862305f, 0.880371f, 0.894043f, 0.905762f, 0.916992f, 0.926270f, 0.934082f, 0.940918f, 0.946777f,
+ 0.953125f, 0.956543f, 0.961426f, 0.964844f, 0.969238f, 0.972656f, 0.974609f, 0.977539f, 0.979980f, 0.982422f, 0.992676f, 0.994141f,
+ 0.993652f, 0.993652f, 0.993652f, 0.993652f, 0.000242f, 0.001257f, 0.001991f, 0.003138f, 0.004299f, 0.005302f, 0.006584f, 0.008308f,
+ 0.010048f, 0.012283f, 0.014526f, 0.017578f, 0.020340f, 0.023972f, 0.028671f, 0.033661f, 0.040161f, 0.047821f, 0.056213f, 0.067261f,
+ 0.080444f, 0.096191f, 0.115784f, 0.139771f, 0.168457f, 0.203125f, 0.243286f, 0.290527f, 0.343506f, 0.400879f, 0.459473f, 0.519043f,
+ 0.576172f, 0.629395f, 0.678223f, 0.721191f, 0.757324f, 0.789062f, 0.816895f, 0.839844f, 0.859863f, 0.877930f, 0.892578f, 0.904297f,
+ 0.915527f, 0.925293f, 0.933105f, 0.940430f, 0.946777f, 0.952148f, 0.957031f, 0.961914f, 0.965820f, 0.969238f, 0.973145f, 0.975586f,
+ 0.978516f, 0.980469f, 0.992188f, 0.993652f, 0.993164f, 0.993164f, 0.993652f, 0.993164f, 0.000434f, 0.001172f, 0.001865f, 0.002825f,
+ 0.003633f, 0.004757f, 0.005722f, 0.007175f, 0.009010f, 0.010651f, 0.012520f, 0.014412f, 0.017532f, 0.020599f, 0.024139f, 0.028488f,
+ 0.033356f, 0.039001f, 0.046295f, 0.054749f, 0.064758f, 0.077209f, 0.092834f, 0.111084f, 0.134033f, 0.160767f, 0.193604f, 0.233032f,
+ 0.278320f, 0.329590f, 0.386230f, 0.445068f, 0.504395f, 0.563477f, 0.617188f, 0.666504f, 0.711426f, 0.750000f, 0.783691f, 0.812500f,
+ 0.836426f, 0.857422f, 0.875488f, 0.891113f, 0.903809f, 0.915039f, 0.924805f, 0.933105f, 0.940430f, 0.947266f, 0.953125f, 0.958496f,
+ 0.962402f, 0.966309f, 0.969727f, 0.973145f, 0.976562f, 0.978516f, 0.991699f, 0.992188f, 0.992676f, 0.993164f, 0.993164f, 0.992676f,
+ 0.000358f, 0.000835f, 0.001738f, 0.002270f, 0.002996f, 0.004078f, 0.005157f, 0.006416f, 0.007904f, 0.009331f, 0.010826f, 0.012245f,
+ 0.014938f, 0.017303f, 0.020233f, 0.023926f, 0.027954f, 0.032715f, 0.038147f, 0.045166f, 0.053070f, 0.062561f, 0.074768f, 0.089661f,
+ 0.106689f, 0.128052f, 0.154175f, 0.185547f, 0.223022f, 0.266846f, 0.317383f, 0.373047f, 0.431152f, 0.491943f, 0.550293f, 0.606445f,
+ 0.658203f, 0.704102f, 0.744141f, 0.779297f, 0.809082f, 0.833984f, 0.855957f, 0.875000f, 0.889648f, 0.903320f, 0.915039f, 0.924805f,
+ 0.933594f, 0.940918f, 0.947754f, 0.954102f, 0.958984f, 0.962402f, 0.966797f, 0.970703f, 0.974121f, 0.977539f, 0.990723f, 0.992188f,
+ 0.992676f, 0.992676f, 0.992188f, 0.992676f, 0.000428f, 0.000789f, 0.001460f, 0.002172f, 0.002695f, 0.003561f, 0.004608f, 0.005848f,
+ 0.006886f, 0.007736f, 0.009560f, 0.011078f, 0.012817f, 0.015015f, 0.017563f, 0.020157f, 0.023666f, 0.027145f, 0.031891f, 0.037384f,
+ 0.044189f, 0.051788f, 0.061188f, 0.072327f, 0.085999f, 0.102966f, 0.123413f, 0.148071f, 0.178101f, 0.214478f, 0.256836f, 0.306396f,
+ 0.360840f, 0.419678f, 0.479736f, 0.540527f, 0.597656f, 0.649902f, 0.697754f, 0.738770f, 0.775391f, 0.805664f, 0.831543f, 0.854004f,
+ 0.873535f, 0.889160f, 0.902832f, 0.915039f, 0.925293f, 0.934082f, 0.941895f, 0.948730f, 0.954102f, 0.959961f, 0.963867f, 0.968262f,
+ 0.971680f, 0.975586f, 0.990723f, 0.991699f, 0.991699f, 0.991699f, 0.991699f, 0.991211f, 0.000237f, 0.000782f, 0.001245f, 0.001923f,
+ 0.002417f, 0.003225f, 0.004101f, 0.005062f, 0.005920f, 0.007030f, 0.008102f, 0.009743f, 0.011009f, 0.013054f, 0.015190f, 0.017380f,
+ 0.020126f, 0.023346f, 0.027161f, 0.031464f, 0.036316f, 0.042664f, 0.050110f, 0.058807f, 0.069946f, 0.083191f, 0.099121f, 0.118835f,
+ 0.142822f, 0.171997f, 0.206665f, 0.248413f, 0.296143f, 0.350586f, 0.408936f, 0.469727f, 0.530762f, 0.589844f, 0.643555f, 0.691895f,
+ 0.734375f, 0.772461f, 0.803223f, 0.830566f, 0.854492f, 0.873047f, 0.889648f, 0.903809f, 0.916016f, 0.926270f, 0.935059f, 0.943359f,
+ 0.949219f, 0.955566f, 0.960938f, 0.965332f, 0.969727f, 0.973145f, 0.989746f, 0.990723f, 0.990723f, 0.990723f, 0.991211f, 0.990723f,
+ 0.000243f, 0.000793f, 0.001210f, 0.001616f, 0.002260f, 0.003069f, 0.003649f, 0.004444f, 0.005322f, 0.006088f, 0.006954f, 0.008278f,
+ 0.009766f, 0.011139f, 0.012970f, 0.014908f, 0.016968f, 0.019897f, 0.023193f, 0.026962f, 0.030792f, 0.035522f, 0.041931f, 0.048920f,
+ 0.057404f, 0.067993f, 0.080383f, 0.095825f, 0.114929f, 0.137695f, 0.165771f, 0.199585f, 0.241089f, 0.287842f, 0.341553f, 0.400391f,
+ 0.462402f, 0.523438f, 0.583008f, 0.638184f, 0.687988f, 0.732422f, 0.770020f, 0.802246f, 0.830566f, 0.854004f, 0.873047f, 0.891113f,
+ 0.904785f, 0.916992f, 0.926758f, 0.936523f, 0.943848f, 0.951172f, 0.956543f, 0.961914f, 0.966797f, 0.971191f, 0.989258f, 0.990234f,
+ 0.990234f, 0.990234f, 0.990234f, 0.989746f, 0.000000f, 0.000484f, 0.000973f, 0.001453f, 0.001999f, 0.002689f, 0.003359f, 0.003864f,
+ 0.004726f, 0.005444f, 0.006516f, 0.007404f, 0.008461f, 0.009720f, 0.011261f, 0.012985f, 0.014908f, 0.017120f, 0.019699f, 0.022614f,
+ 0.026093f, 0.030228f, 0.034668f, 0.040619f, 0.047699f, 0.055756f, 0.066284f, 0.078308f, 0.092834f, 0.111328f, 0.133423f, 0.160889f,
+ 0.194214f, 0.233765f, 0.281006f, 0.334473f, 0.392822f, 0.455078f, 0.517090f, 0.578125f, 0.634766f, 0.686035f, 0.730957f, 0.768555f,
+ 0.803223f, 0.831055f, 0.854492f, 0.875488f, 0.892090f, 0.906250f, 0.918457f, 0.929688f, 0.937988f, 0.945801f, 0.952148f, 0.958496f,
+ 0.963867f, 0.968750f, 0.988281f, 0.989258f, 0.989746f, 0.989258f, 0.989746f, 0.989258f, 0.000241f, 0.000699f, 0.000835f, 0.001354f,
+ 0.002066f, 0.002405f, 0.003073f, 0.003466f, 0.003847f, 0.004868f, 0.005798f, 0.006325f, 0.007446f, 0.008553f, 0.009789f, 0.011375f,
+ 0.013031f, 0.014702f, 0.016937f, 0.019455f, 0.022171f, 0.025467f, 0.029541f, 0.034271f, 0.039734f, 0.046295f, 0.054291f, 0.063904f,
+ 0.075745f, 0.089966f, 0.107727f, 0.129395f, 0.156250f, 0.188965f, 0.228394f, 0.274658f, 0.327637f, 0.386963f, 0.449219f, 0.512695f,
+ 0.574707f, 0.632324f, 0.684570f, 0.730469f, 0.770508f, 0.804688f, 0.832520f, 0.857422f, 0.876953f, 0.893066f, 0.908691f, 0.920410f,
+ 0.931152f, 0.940430f, 0.947754f, 0.954590f, 0.960938f, 0.965820f, 0.986816f, 0.988770f, 0.988770f, 0.988770f, 0.988770f, 0.988770f,
+ 0.000122f, 0.000480f, 0.000793f, 0.001184f, 0.001847f, 0.002220f, 0.002459f, 0.003109f, 0.003740f, 0.004234f, 0.005127f, 0.005730f,
+ 0.006557f, 0.007458f, 0.008469f, 0.009911f, 0.011162f, 0.012848f, 0.014519f, 0.016693f, 0.019135f, 0.021820f, 0.025024f, 0.028931f,
+ 0.033508f, 0.038757f, 0.045135f, 0.052856f, 0.062042f, 0.073547f, 0.087646f, 0.104736f, 0.126099f, 0.152588f, 0.184570f, 0.223511f,
+ 0.269775f, 0.323242f, 0.382324f, 0.445801f, 0.510254f, 0.573242f, 0.631348f, 0.685059f, 0.731934f, 0.772461f, 0.806641f, 0.834961f,
+ 0.859375f, 0.879883f, 0.897461f, 0.911133f, 0.923828f, 0.933594f, 0.942383f, 0.950195f, 0.956055f, 0.962402f, 0.985840f, 0.987305f,
+ 0.987793f, 0.987793f, 0.988281f, 0.987793f, 0.000244f, 0.000471f, 0.000666f, 0.001267f, 0.001592f, 0.001838f, 0.002251f, 0.002855f,
+ 0.003225f, 0.003828f, 0.004372f, 0.005112f, 0.005695f, 0.006340f, 0.007534f, 0.008797f, 0.009895f, 0.011215f, 0.012604f, 0.014503f,
+ 0.016602f, 0.018738f, 0.021408f, 0.024567f, 0.028305f, 0.032654f, 0.037872f, 0.043732f, 0.051239f, 0.060669f, 0.071716f, 0.085510f,
+ 0.102356f, 0.123230f, 0.149170f, 0.180664f, 0.219849f, 0.265869f, 0.319092f, 0.379150f, 0.443604f, 0.508789f, 0.572754f, 0.633301f,
+ 0.686523f, 0.734863f, 0.775391f, 0.809570f, 0.838379f, 0.862305f, 0.883301f, 0.900391f, 0.914551f, 0.926270f, 0.937012f, 0.944824f,
+ 0.953125f, 0.959473f, 0.985352f, 0.986816f, 0.986816f, 0.986816f, 0.986816f, 0.986816f, 0.000242f, 0.000346f, 0.000827f, 0.001065f,
+ 0.001428f, 0.001572f, 0.001984f, 0.002367f, 0.002851f, 0.003277f, 0.003786f, 0.004501f, 0.005253f, 0.005955f, 0.006573f, 0.007736f,
+ 0.008659f, 0.009880f, 0.011177f, 0.012459f, 0.014153f, 0.016403f, 0.018173f, 0.020859f, 0.024017f, 0.027496f, 0.031708f, 0.036682f,
+ 0.042877f, 0.050446f, 0.059174f, 0.070068f, 0.083374f, 0.100159f, 0.120728f, 0.145874f, 0.177612f, 0.216187f, 0.262695f, 0.316650f,
+ 0.377686f, 0.443115f, 0.509766f, 0.575195f, 0.635742f, 0.691406f, 0.738281f, 0.779785f, 0.813965f, 0.843750f, 0.866699f, 0.887207f,
+ 0.904297f, 0.918945f, 0.930176f, 0.940918f, 0.948730f, 0.956055f, 0.984375f, 0.985840f, 0.985840f, 0.985840f, 0.986328f, 0.985840f,
+ 0.000242f, 0.000540f, 0.000708f, 0.000830f, 0.001143f, 0.001451f, 0.001861f, 0.002249f, 0.002661f, 0.003010f, 0.003435f, 0.003922f,
+ 0.004707f, 0.005165f, 0.005787f, 0.006840f, 0.007374f, 0.008545f, 0.009651f, 0.011147f, 0.012581f, 0.014084f, 0.015991f, 0.017899f,
+ 0.020325f, 0.023392f, 0.026978f, 0.031113f, 0.035919f, 0.042023f, 0.049103f, 0.057831f, 0.068420f, 0.081543f, 0.098145f, 0.118530f,
+ 0.143921f, 0.175293f, 0.213989f, 0.260742f, 0.316162f, 0.377441f, 0.444336f, 0.512207f, 0.579590f, 0.641113f, 0.696289f, 0.744629f,
+ 0.786621f, 0.820801f, 0.849609f, 0.872559f, 0.892578f, 0.908691f, 0.922363f, 0.934570f, 0.944336f, 0.951660f, 0.982910f, 0.984375f,
+ 0.984863f, 0.984863f, 0.985352f, 0.984863f, 0.000106f, 0.000477f, 0.000649f, 0.000901f, 0.001110f, 0.001206f, 0.001630f, 0.002121f,
+ 0.002192f, 0.002743f, 0.003128f, 0.003538f, 0.003941f, 0.004688f, 0.005276f, 0.005905f, 0.006546f, 0.007568f, 0.008461f, 0.009483f,
+ 0.010674f, 0.011864f, 0.013649f, 0.015549f, 0.017731f, 0.020111f, 0.023010f, 0.026199f, 0.030304f, 0.035278f, 0.040833f, 0.047821f,
+ 0.056580f, 0.066895f, 0.079895f, 0.096191f, 0.116760f, 0.141968f, 0.173584f, 0.212646f, 0.260498f, 0.316162f, 0.379883f, 0.447754f,
+ 0.517578f, 0.584961f, 0.647949f, 0.704102f, 0.752930f, 0.792969f, 0.827148f, 0.855957f, 0.877930f, 0.898438f, 0.914062f, 0.928223f,
+ 0.938965f, 0.948242f, 0.981445f, 0.983398f, 0.983887f, 0.983887f, 0.983887f, 0.983398f, 0.000208f, 0.000456f, 0.000582f, 0.000788f,
+ 0.001016f, 0.001428f, 0.001507f, 0.001769f, 0.002203f, 0.002525f, 0.002718f, 0.003187f, 0.003761f, 0.004238f, 0.004635f, 0.005348f,
+ 0.005901f, 0.006805f, 0.007500f, 0.008545f, 0.009270f, 0.010437f, 0.011742f, 0.013344f, 0.015198f, 0.017242f, 0.019516f, 0.022430f,
+ 0.025665f, 0.029922f, 0.034180f, 0.040161f, 0.046936f, 0.055420f, 0.065735f, 0.078552f, 0.094666f, 0.114563f, 0.140503f, 0.172485f,
+ 0.212646f, 0.260986f, 0.318359f, 0.383545f, 0.453125f, 0.524414f, 0.593750f, 0.656738f, 0.712891f, 0.761230f, 0.801270f, 0.835938f,
+ 0.862305f, 0.885742f, 0.904785f, 0.919922f, 0.933594f, 0.943359f, 0.980469f, 0.982422f, 0.982422f, 0.981934f, 0.982422f, 0.982422f,
+ 0.000170f, 0.000350f, 0.000583f, 0.000682f, 0.000845f, 0.001036f, 0.001265f, 0.001821f, 0.001953f, 0.002163f, 0.002525f, 0.002771f,
+ 0.003418f, 0.003729f, 0.004040f, 0.004871f, 0.005188f, 0.005726f, 0.006512f, 0.007130f, 0.008087f, 0.009018f, 0.010216f, 0.011490f,
+ 0.013084f, 0.014565f, 0.016891f, 0.019073f, 0.021851f, 0.025253f, 0.029022f, 0.033539f, 0.039124f, 0.045563f, 0.054230f, 0.064270f,
+ 0.077271f, 0.093323f, 0.113403f, 0.139648f, 0.172485f, 0.213379f, 0.262939f, 0.322266f, 0.389404f, 0.461426f, 0.534180f, 0.604492f,
+ 0.668457f, 0.724609f, 0.772461f, 0.812500f, 0.845703f, 0.872070f, 0.894043f, 0.911621f, 0.926758f, 0.938477f, 0.979004f, 0.980469f,
+ 0.980957f, 0.980957f, 0.980957f, 0.980957f, 0.000000f, 0.000332f, 0.000583f, 0.000583f, 0.000848f, 0.000959f, 0.001125f, 0.001425f,
+ 0.001810f, 0.001899f, 0.002300f, 0.002529f, 0.002996f, 0.003162f, 0.003607f, 0.004150f, 0.004761f, 0.005146f, 0.005791f, 0.006329f,
+ 0.007099f, 0.008110f, 0.008949f, 0.009941f, 0.011253f, 0.012756f, 0.014565f, 0.016434f, 0.018707f, 0.021271f, 0.024475f, 0.028290f,
+ 0.032745f, 0.037964f, 0.044769f, 0.052795f, 0.063416f, 0.076050f, 0.092102f, 0.113464f, 0.139526f, 0.172974f, 0.214600f, 0.266602f,
+ 0.327637f, 0.397461f, 0.471191f, 0.546387f, 0.617188f, 0.682129f, 0.737793f, 0.784668f, 0.823730f, 0.854980f, 0.881348f, 0.902344f,
+ 0.918945f, 0.933105f, 0.977539f, 0.979492f, 0.979492f, 0.979492f, 0.979492f, 0.979492f, 0.000000f, 0.000243f, 0.000553f, 0.000575f,
+ 0.000591f, 0.000798f, 0.000991f, 0.001234f, 0.001419f, 0.001812f, 0.001935f, 0.002186f, 0.002518f, 0.002975f, 0.003202f, 0.003614f,
+ 0.004047f, 0.004425f, 0.005013f, 0.005718f, 0.006172f, 0.007046f, 0.007740f, 0.008835f, 0.009819f, 0.011192f, 0.012444f, 0.014114f,
+ 0.015884f, 0.018204f, 0.020844f, 0.023392f, 0.027420f, 0.031921f, 0.037170f, 0.043610f, 0.052032f, 0.062408f, 0.075256f, 0.091675f,
+ 0.112610f, 0.140015f, 0.173950f, 0.217651f, 0.271973f, 0.335693f, 0.407715f, 0.484619f, 0.561035f, 0.633789f, 0.698242f, 0.752930f,
+ 0.798828f, 0.836426f, 0.867676f, 0.891602f, 0.911621f, 0.926270f, 0.975098f, 0.977539f, 0.978516f, 0.977539f, 0.977539f, 0.978027f,
+ 0.000121f, 0.000121f, 0.000241f, 0.000385f, 0.000684f, 0.000693f, 0.000932f, 0.001156f, 0.001410f, 0.001648f, 0.001893f, 0.002184f,
+ 0.002367f, 0.002579f, 0.002872f, 0.003319f, 0.003653f, 0.003922f, 0.004425f, 0.004925f, 0.005436f, 0.006180f, 0.006836f, 0.007645f,
+ 0.008278f, 0.009476f, 0.010788f, 0.012169f, 0.013695f, 0.015305f, 0.017319f, 0.020111f, 0.022858f, 0.026718f, 0.030975f, 0.036255f,
+ 0.042938f, 0.051270f, 0.061493f, 0.074768f, 0.091187f, 0.112976f, 0.140747f, 0.176392f, 0.222168f, 0.278809f, 0.345703f, 0.421387f,
+ 0.500488f, 0.578613f, 0.651855f, 0.715820f, 0.769531f, 0.813965f, 0.850586f, 0.878418f, 0.901855f, 0.920410f, 0.973633f, 0.975586f,
+ 0.976074f, 0.976562f, 0.976562f, 0.975098f, 0.000240f, 0.000120f, 0.000281f, 0.000333f, 0.000498f, 0.000680f, 0.000684f, 0.001083f,
+ 0.001312f, 0.001618f, 0.001606f, 0.001834f, 0.002087f, 0.002316f, 0.002735f, 0.002792f, 0.003084f, 0.003386f, 0.003944f, 0.004353f,
+ 0.004761f, 0.005390f, 0.005997f, 0.006615f, 0.007389f, 0.008324f, 0.008987f, 0.010284f, 0.011703f, 0.013382f, 0.014717f, 0.016953f,
+ 0.019424f, 0.022278f, 0.026047f, 0.030029f, 0.035492f, 0.042145f, 0.050446f, 0.060608f, 0.073975f, 0.091187f, 0.113831f, 0.142700f,
+ 0.180176f, 0.228271f, 0.288086f, 0.359131f, 0.437988f, 0.519531f, 0.600098f, 0.673340f, 0.735352f, 0.787598f, 0.830566f, 0.865234f,
+ 0.891602f, 0.913086f, 0.971680f, 0.974121f, 0.974121f, 0.974121f, 0.974121f, 0.974609f, 0.000000f, 0.000239f, 0.000236f, 0.000425f,
+ 0.000487f, 0.000608f, 0.000850f, 0.001012f, 0.001140f, 0.001260f, 0.001410f, 0.001640f, 0.001953f, 0.002003f, 0.002342f, 0.002434f,
+ 0.002686f, 0.002934f, 0.003305f, 0.003771f, 0.004169f, 0.004692f, 0.005028f, 0.005817f, 0.006371f, 0.007179f, 0.007919f, 0.008965f,
+ 0.009857f, 0.011261f, 0.012703f, 0.014229f, 0.016312f, 0.018494f, 0.021744f, 0.025024f, 0.029633f, 0.034790f, 0.041199f, 0.049561f,
+ 0.060242f, 0.073608f, 0.091675f, 0.114502f, 0.144897f, 0.185547f, 0.236328f, 0.300049f, 0.375732f, 0.458496f, 0.542969f, 0.624023f,
+ 0.696289f, 0.758301f, 0.808105f, 0.847656f, 0.879395f, 0.903809f, 0.968750f, 0.971191f, 0.972168f, 0.971680f, 0.972168f, 0.971680f,
+ 0.000000f, 0.000217f, 0.000235f, 0.000235f, 0.000321f, 0.000560f, 0.000588f, 0.000897f, 0.001034f, 0.001040f, 0.001246f, 0.001369f,
+ 0.001611f, 0.001692f, 0.001942f, 0.002153f, 0.002337f, 0.002638f, 0.002878f, 0.003330f, 0.003672f, 0.003986f, 0.004498f, 0.004826f,
+ 0.005535f, 0.006176f, 0.006561f, 0.007538f, 0.008362f, 0.009544f, 0.010612f, 0.011879f, 0.013794f, 0.015839f, 0.018326f, 0.020889f,
+ 0.024567f, 0.028625f, 0.033783f, 0.040527f, 0.049133f, 0.059998f, 0.073608f, 0.092041f, 0.116394f, 0.148682f, 0.191528f, 0.246582f,
+ 0.315186f, 0.395508f, 0.482910f, 0.570312f, 0.651367f, 0.722168f, 0.781738f, 0.828613f, 0.866211f, 0.895508f, 0.966797f, 0.968750f,
+ 0.969238f, 0.969727f, 0.969238f, 0.969238f, 0.000000f, 0.000108f, 0.000215f, 0.000346f, 0.000352f, 0.000501f, 0.000783f, 0.000828f,
+ 0.000954f, 0.000980f, 0.001130f, 0.001353f, 0.001429f, 0.001522f, 0.001690f, 0.001760f, 0.002172f, 0.002363f, 0.002522f, 0.002777f,
+ 0.003202f, 0.003550f, 0.004040f, 0.004364f, 0.004734f, 0.005192f, 0.005909f, 0.006271f, 0.007015f, 0.007957f, 0.008774f, 0.010185f,
+ 0.011681f, 0.013306f, 0.015327f, 0.017517f, 0.020264f, 0.023636f, 0.027740f, 0.033234f, 0.039856f, 0.048340f, 0.059387f, 0.074097f,
+ 0.093567f, 0.118896f, 0.153931f, 0.200073f, 0.260254f, 0.334473f, 0.420410f, 0.511719f, 0.601562f, 0.682129f, 0.750488f, 0.807617f,
+ 0.851074f, 0.884277f, 0.963867f, 0.966309f, 0.966797f, 0.966797f, 0.966797f, 0.966797f, 0.000000f, 0.000059f, 0.000292f, 0.000331f,
+ 0.000344f, 0.000613f, 0.000532f, 0.000703f, 0.000853f, 0.000915f, 0.000936f, 0.001102f, 0.001284f, 0.001430f, 0.001417f, 0.001475f,
+ 0.001791f, 0.001989f, 0.002161f, 0.002388f, 0.002775f, 0.003017f, 0.003357f, 0.003763f, 0.004124f, 0.004383f, 0.004917f, 0.005436f,
+ 0.005840f, 0.006733f, 0.007511f, 0.008667f, 0.009567f, 0.011032f, 0.012474f, 0.014610f, 0.016739f, 0.019379f, 0.022873f, 0.027252f,
+ 0.032410f, 0.039062f, 0.048065f, 0.059296f, 0.074646f, 0.094971f, 0.123108f, 0.161011f, 0.211426f, 0.277344f, 0.358154f, 0.450195f,
+ 0.545410f, 0.636230f, 0.715332f, 0.781250f, 0.832520f, 0.872070f, 0.960449f, 0.962402f, 0.963867f, 0.963379f, 0.962891f, 0.963379f,
+ 0.000000f, 0.000000f, 0.000098f, 0.000301f, 0.000315f, 0.000566f, 0.000587f, 0.000627f, 0.000643f, 0.000795f, 0.000974f, 0.001023f,
+ 0.000987f, 0.001031f, 0.001245f, 0.001470f, 0.001637f, 0.001820f, 0.001884f, 0.002146f, 0.002357f, 0.002630f, 0.002913f, 0.003164f,
+ 0.003380f, 0.003824f, 0.004189f, 0.004353f, 0.004940f, 0.005688f, 0.006409f, 0.007347f, 0.008018f, 0.009163f, 0.010559f, 0.012039f,
+ 0.013695f, 0.016144f, 0.018723f, 0.022354f, 0.026337f, 0.031433f, 0.038818f, 0.047546f, 0.059662f, 0.075623f, 0.097473f, 0.127808f,
+ 0.169556f, 0.225830f, 0.299072f, 0.387451f, 0.486084f, 0.583984f, 0.674805f, 0.751465f, 0.812012f, 0.859375f, 0.957031f, 0.958984f,
+ 0.959473f, 0.959961f, 0.959961f, 0.959961f, 0.000000f, 0.000000f, 0.000004f, 0.000078f, 0.000408f, 0.000432f, 0.000563f, 0.000560f,
+ 0.000566f, 0.000623f, 0.000782f, 0.000829f, 0.000896f, 0.000956f, 0.001056f, 0.001249f, 0.001414f, 0.001473f, 0.001646f, 0.001764f,
+ 0.002066f, 0.002230f, 0.002436f, 0.002651f, 0.003012f, 0.003252f, 0.003414f, 0.004055f, 0.004143f, 0.004784f, 0.005356f, 0.006077f,
+ 0.006870f, 0.007538f, 0.008728f, 0.009834f, 0.011322f, 0.013130f, 0.015427f, 0.017914f, 0.021271f, 0.025436f, 0.030960f, 0.038086f,
+ 0.047485f, 0.060303f, 0.077087f, 0.101196f, 0.134521f, 0.180786f, 0.244507f, 0.326172f, 0.423584f, 0.527832f, 0.628418f, 0.716797f,
+ 0.788086f, 0.843262f, 0.953125f, 0.955566f, 0.955566f, 0.956543f, 0.956055f, 0.956543f, 0.000000f, 0.000000f, 0.000000f, 0.000236f,
+ 0.000320f, 0.000484f, 0.000521f, 0.000549f, 0.000556f, 0.000584f, 0.000574f, 0.000690f, 0.000758f, 0.000841f, 0.001003f, 0.001013f,
+ 0.001169f, 0.001292f, 0.001437f, 0.001658f, 0.001830f, 0.002001f, 0.002081f, 0.002146f, 0.002434f, 0.002712f, 0.002964f, 0.003220f,
+ 0.003513f, 0.003963f, 0.004410f, 0.004875f, 0.005608f, 0.006245f, 0.007179f, 0.008118f, 0.009201f, 0.010582f, 0.012360f, 0.014343f,
+ 0.016968f, 0.020401f, 0.024628f, 0.030365f, 0.037567f, 0.047455f, 0.060913f, 0.079529f, 0.105774f, 0.143555f, 0.196167f, 0.268799f,
+ 0.361084f, 0.467041f, 0.576172f, 0.676758f, 0.760254f, 0.825195f, 0.948242f, 0.951660f, 0.951660f, 0.951660f, 0.951660f, 0.951660f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000257f, 0.000334f, 0.000390f, 0.000496f, 0.000520f, 0.000539f, 0.000590f, 0.000602f,
+ 0.000646f, 0.000725f, 0.000909f, 0.000949f, 0.001023f, 0.001121f, 0.001181f, 0.001308f, 0.001474f, 0.001457f, 0.001714f, 0.002007f,
+ 0.001929f, 0.002039f, 0.002468f, 0.002672f, 0.003025f, 0.003317f, 0.003635f, 0.004047f, 0.004433f, 0.004864f, 0.005756f, 0.006493f,
+ 0.007515f, 0.008331f, 0.009697f, 0.011383f, 0.014000f, 0.016235f, 0.019653f, 0.024185f, 0.029465f, 0.037109f, 0.047699f, 0.062164f,
+ 0.082642f, 0.112488f, 0.155151f, 0.216919f, 0.300049f, 0.404541f, 0.520020f, 0.631836f, 0.728516f, 0.805664f, 0.943848f, 0.946289f,
+ 0.946777f, 0.946777f, 0.947266f, 0.947266f, 0.000000f, 0.000000f, 0.000122f, 0.000088f, 0.000219f, 0.000229f, 0.000355f, 0.000414f,
+ 0.000482f, 0.000545f, 0.000559f, 0.000568f, 0.000481f, 0.000668f, 0.000636f, 0.000728f, 0.000924f, 0.000980f, 0.001017f, 0.001109f,
+ 0.001258f, 0.001353f, 0.001451f, 0.001564f, 0.001621f, 0.001740f, 0.002066f, 0.002289f, 0.002459f, 0.002621f, 0.002975f, 0.003349f,
+ 0.003588f, 0.003998f, 0.004723f, 0.005116f, 0.006035f, 0.006859f, 0.007957f, 0.009064f, 0.010658f, 0.012711f, 0.015511f, 0.018555f,
+ 0.023026f, 0.028854f, 0.037140f, 0.048035f, 0.064026f, 0.086914f, 0.121033f, 0.171387f, 0.244141f, 0.341797f, 0.458740f, 0.580078f,
+ 0.691895f, 0.780762f, 0.937988f, 0.940430f, 0.941406f, 0.940918f, 0.941895f, 0.941406f, 0.000000f, 0.000000f, 0.000000f, 0.000080f,
+ 0.000211f, 0.000221f, 0.000225f, 0.000192f, 0.000352f, 0.000368f, 0.000397f, 0.000529f, 0.000510f, 0.000504f, 0.000540f, 0.000671f,
+ 0.000694f, 0.000763f, 0.000902f, 0.000998f, 0.001063f, 0.001074f, 0.001128f, 0.001407f, 0.001370f, 0.001449f, 0.001682f, 0.001635f,
+ 0.001976f, 0.002108f, 0.002335f, 0.002558f, 0.002905f, 0.003176f, 0.003637f, 0.003948f, 0.004650f, 0.005341f, 0.006237f, 0.007034f,
+ 0.008415f, 0.009811f, 0.012032f, 0.014565f, 0.017731f, 0.022324f, 0.028427f, 0.036713f, 0.048859f, 0.066406f, 0.092957f, 0.133057f,
+ 0.193848f, 0.281250f, 0.395508f, 0.524902f, 0.648926f, 0.754395f, 0.931152f, 0.934570f, 0.934570f, 0.934570f, 0.935547f, 0.935059f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000181f, 0.000196f, 0.000236f, 0.000250f, 0.000226f, 0.000281f, 0.000335f, 0.000457f,
+ 0.000406f, 0.000511f, 0.000522f, 0.000593f, 0.000539f, 0.000663f, 0.000661f, 0.000779f, 0.000978f, 0.000855f, 0.000937f, 0.001128f,
+ 0.001163f, 0.001253f, 0.001241f, 0.001531f, 0.001595f, 0.001796f, 0.001888f, 0.002226f, 0.002350f, 0.002609f, 0.002787f, 0.003260f,
+ 0.003656f, 0.004303f, 0.004910f, 0.005577f, 0.006683f, 0.007603f, 0.009102f, 0.011017f, 0.013603f, 0.016968f, 0.021652f, 0.027939f,
+ 0.037109f, 0.050262f, 0.070374f, 0.101624f, 0.150391f, 0.225220f, 0.331543f, 0.463867f, 0.601074f, 0.723145f, 0.923828f, 0.927246f,
+ 0.927246f, 0.928223f, 0.927734f, 0.928223f, 0.000000f, 0.000000f, 0.000122f, 0.000121f, 0.000121f, 0.000174f, 0.000156f, 0.000204f,
+ 0.000180f, 0.000221f, 0.000246f, 0.000346f, 0.000313f, 0.000426f, 0.000468f, 0.000482f, 0.000559f, 0.000582f, 0.000536f, 0.000611f,
+ 0.000770f, 0.000666f, 0.000919f, 0.000947f, 0.001013f, 0.000948f, 0.001129f, 0.001169f, 0.001463f, 0.001579f, 0.001540f, 0.001555f,
+ 0.001888f, 0.002007f, 0.002390f, 0.002623f, 0.002708f, 0.003235f, 0.003584f, 0.004223f, 0.005001f, 0.005791f, 0.006905f, 0.008118f,
+ 0.010117f, 0.012512f, 0.015961f, 0.020798f, 0.027374f, 0.037628f, 0.052673f, 0.076172f, 0.114197f, 0.175659f, 0.270752f, 0.399658f,
+ 0.546875f, 0.687012f, 0.915527f, 0.918457f, 0.919434f, 0.919434f, 0.919434f, 0.919434f, 0.000000f, 0.000000f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000120f, 0.000139f, 0.000141f, 0.000152f, 0.000186f, 0.000209f, 0.000222f, 0.000297f, 0.000330f, 0.000367f, 0.000403f,
+ 0.000433f, 0.000456f, 0.000457f, 0.000484f, 0.000521f, 0.000544f, 0.000594f, 0.000807f, 0.000790f, 0.000841f, 0.000784f, 0.001025f,
+ 0.001112f, 0.001014f, 0.001146f, 0.001287f, 0.001485f, 0.001541f, 0.001740f, 0.002014f, 0.002264f, 0.002460f, 0.002825f, 0.003124f,
+ 0.003683f, 0.004177f, 0.005024f, 0.006004f, 0.007454f, 0.009041f, 0.011833f, 0.014839f, 0.019791f, 0.027283f, 0.038361f, 0.055817f,
+ 0.084656f, 0.133057f, 0.213013f, 0.334717f, 0.488770f, 0.645996f, 0.905762f, 0.909668f, 0.909668f, 0.909180f, 0.910645f, 0.908691f,
+ 0.000000f, 0.000000f, 0.000121f, 0.000121f, 0.000120f, 0.000120f, 0.000119f, 0.000115f, 0.000104f, 0.000105f, 0.000203f, 0.000235f,
+ 0.000185f, 0.000290f, 0.000201f, 0.000306f, 0.000259f, 0.000370f, 0.000401f, 0.000428f, 0.000596f, 0.000617f, 0.000474f, 0.000593f,
+ 0.000641f, 0.000676f, 0.000682f, 0.000826f, 0.000897f, 0.000934f, 0.000972f, 0.000972f, 0.001213f, 0.001281f, 0.001410f, 0.001451f,
+ 0.001562f, 0.001786f, 0.002031f, 0.002417f, 0.002764f, 0.003162f, 0.003763f, 0.004406f, 0.005310f, 0.006454f, 0.008156f, 0.010849f,
+ 0.014305f, 0.019318f, 0.027328f, 0.039856f, 0.061310f, 0.097717f, 0.162354f, 0.270752f, 0.424805f, 0.599609f, 0.894043f, 0.897949f,
+ 0.898438f, 0.898438f, 0.898926f, 0.898438f, 0.000000f, 0.000121f, 0.000121f, 0.000120f, 0.000119f, 0.000119f, 0.000118f, 0.000118f,
+ 0.000112f, 0.000102f, 0.000094f, 0.000109f, 0.000131f, 0.000145f, 0.000232f, 0.000171f, 0.000278f, 0.000230f, 0.000347f, 0.000331f,
+ 0.000379f, 0.000381f, 0.000512f, 0.000427f, 0.000541f, 0.000566f, 0.000547f, 0.000613f, 0.000706f, 0.000660f, 0.000809f, 0.000941f,
+ 0.000950f, 0.001035f, 0.001069f, 0.001220f, 0.001149f, 0.001314f, 0.001603f, 0.001801f, 0.002062f, 0.002394f, 0.002737f, 0.003057f,
+ 0.003771f, 0.004471f, 0.005875f, 0.007217f, 0.009651f, 0.013344f, 0.018829f, 0.027710f, 0.043091f, 0.069214f, 0.119141f, 0.210571f,
+ 0.358398f, 0.544922f, 0.881348f, 0.883789f, 0.885254f, 0.885742f, 0.885254f, 0.885254f, 0.000000f, 0.000121f, 0.000120f, 0.000119f,
+ 0.000119f, 0.000118f, 0.000117f, 0.000116f, 0.000116f, 0.000110f, 0.000101f, 0.000094f, 0.000087f, 0.000157f, 0.000151f, 0.000168f,
+ 0.000146f, 0.000219f, 0.000214f, 0.000261f, 0.000313f, 0.000363f, 0.000311f, 0.000415f, 0.000476f, 0.000448f, 0.000429f, 0.000460f,
+ 0.000481f, 0.000560f, 0.000544f, 0.000695f, 0.000626f, 0.000789f, 0.000877f, 0.000894f, 0.000948f, 0.001177f, 0.001175f, 0.001366f,
+ 0.001487f, 0.001738f, 0.002008f, 0.002304f, 0.002663f, 0.003250f, 0.004002f, 0.004932f, 0.006416f, 0.008636f, 0.012344f, 0.018127f,
+ 0.028610f, 0.047150f, 0.083923f, 0.156860f, 0.291260f, 0.487305f, 0.866211f, 0.869141f, 0.870605f, 0.870117f, 0.871094f, 0.870117f,
+ 0.000000f, 0.000000f, 0.000119f, 0.000118f, 0.000117f, 0.000116f, 0.000115f, 0.000115f, 0.000114f, 0.000114f, 0.000109f, 0.000101f,
+ 0.000094f, 0.000087f, 0.000081f, 0.000085f, 0.000129f, 0.000150f, 0.000176f, 0.000193f, 0.000216f, 0.000257f, 0.000241f, 0.000302f,
+ 0.000259f, 0.000299f, 0.000397f, 0.000403f, 0.000384f, 0.000402f, 0.000425f, 0.000582f, 0.000467f, 0.000614f, 0.000660f, 0.000625f,
+ 0.000650f, 0.000819f, 0.000790f, 0.000879f, 0.001001f, 0.001140f, 0.001403f, 0.001555f, 0.001844f, 0.002213f, 0.002636f, 0.003235f,
+ 0.004082f, 0.005604f, 0.007896f, 0.011292f, 0.018005f, 0.030472f, 0.055786f, 0.109985f, 0.224976f, 0.421875f, 0.848145f, 0.852539f,
+ 0.853027f, 0.852539f, 0.852539f, 0.853027f, 0.000000f, 0.000119f, 0.000118f, 0.000116f, 0.000115f, 0.000114f, 0.000113f, 0.000112f,
+ 0.000111f, 0.000111f, 0.000110f, 0.000108f, 0.000101f, 0.000094f, 0.000088f, 0.000082f, 0.000077f, 0.000109f, 0.000068f, 0.000102f,
+ 0.000127f, 0.000158f, 0.000177f, 0.000192f, 0.000207f, 0.000214f, 0.000249f, 0.000278f, 0.000296f, 0.000320f, 0.000330f, 0.000342f,
+ 0.000415f, 0.000371f, 0.000389f, 0.000508f, 0.000463f, 0.000586f, 0.000606f, 0.000649f, 0.000724f, 0.000841f, 0.000910f, 0.001065f,
+ 0.001236f, 0.001475f, 0.001807f, 0.002138f, 0.002716f, 0.003622f, 0.004921f, 0.006950f, 0.010574f, 0.018433f, 0.034607f, 0.072449f,
+ 0.163818f, 0.352295f, 0.827637f, 0.831055f, 0.831543f, 0.832031f, 0.833008f, 0.832520f, 0.000120f, 0.000116f, 0.000114f, 0.000113f,
+ 0.000111f, 0.000110f, 0.000109f, 0.000108f, 0.000107f, 0.000106f, 0.000106f, 0.000105f, 0.000104f, 0.000101f, 0.000094f, 0.000088f,
+ 0.000083f, 0.000078f, 0.000073f, 0.000092f, 0.000064f, 0.000097f, 0.000073f, 0.000105f, 0.000125f, 0.000162f, 0.000179f, 0.000177f,
+ 0.000191f, 0.000221f, 0.000241f, 0.000235f, 0.000270f, 0.000277f, 0.000287f, 0.000329f, 0.000319f, 0.000428f, 0.000417f, 0.000409f,
+ 0.000524f, 0.000537f, 0.000612f, 0.000750f, 0.000770f, 0.000961f, 0.001153f, 0.001347f, 0.001702f, 0.002081f, 0.002903f, 0.003956f,
+ 0.006184f, 0.010368f, 0.019592f, 0.043427f, 0.109924f, 0.280518f, 0.803223f, 0.806152f, 0.807617f, 0.808594f, 0.809082f, 0.808105f,
+ 0.000000f, 0.000111f, 0.000106f, 0.000107f, 0.000104f, 0.000103f, 0.000101f, 0.000101f, 0.000101f, 0.000100f, 0.000099f, 0.000098f,
+ 0.000097f, 0.000097f, 0.000097f, 0.000094f, 0.000088f, 0.000083f, 0.000078f, 0.000073f, 0.000069f, 0.000070f, 0.000061f, 0.000068f,
+ 0.000059f, 0.000067f, 0.000084f, 0.000097f, 0.000128f, 0.000137f, 0.000165f, 0.000160f, 0.000176f, 0.000185f, 0.000217f, 0.000239f,
+ 0.000237f, 0.000238f, 0.000272f, 0.000281f, 0.000314f, 0.000372f, 0.000395f, 0.000430f, 0.000504f, 0.000578f, 0.000665f, 0.000856f,
+ 0.000969f, 0.001210f, 0.001594f, 0.002216f, 0.003370f, 0.005527f, 0.010170f, 0.023239f, 0.066101f, 0.207275f, 0.775391f, 0.779785f,
+ 0.780273f, 0.780762f, 0.780273f, 0.780762f, 0.000000f, 0.000094f, 0.000097f, 0.000095f, 0.000092f, 0.000091f, 0.000091f, 0.000090f,
+ 0.000089f, 0.000089f, 0.000088f, 0.000088f, 0.000087f, 0.000086f, 0.000087f, 0.000086f, 0.000086f, 0.000085f, 0.000081f, 0.000076f,
+ 0.000072f, 0.000068f, 0.000064f, 0.000060f, 0.000057f, 0.000054f, 0.000058f, 0.000048f, 0.000048f, 0.000069f, 0.000068f, 0.000092f,
+ 0.000110f, 0.000122f, 0.000133f, 0.000136f, 0.000146f, 0.000154f, 0.000175f, 0.000194f, 0.000204f, 0.000206f, 0.000238f, 0.000262f,
+ 0.000266f, 0.000338f, 0.000361f, 0.000432f, 0.000527f, 0.000659f, 0.000848f, 0.001183f, 0.001713f, 0.002661f, 0.004921f, 0.010887f,
+ 0.033936f, 0.138428f, 0.743652f, 0.747559f, 0.748047f, 0.748535f, 0.749512f, 0.749023f, 0.000045f, 0.000047f, 0.000059f, 0.000059f,
+ 0.000063f, 0.000068f, 0.000068f, 0.000068f, 0.000067f, 0.000069f, 0.000068f, 0.000070f, 0.000070f, 0.000070f, 0.000071f, 0.000070f,
+ 0.000071f, 0.000071f, 0.000071f, 0.000071f, 0.000071f, 0.000069f, 0.000065f, 0.000062f, 0.000058f, 0.000055f, 0.000052f, 0.000049f,
+ 0.000046f, 0.000044f, 0.000041f, 0.000050f, 0.000051f, 0.000048f, 0.000061f, 0.000070f, 0.000084f, 0.000095f, 0.000107f, 0.000104f,
+ 0.000111f, 0.000128f, 0.000143f, 0.000154f, 0.000157f, 0.000186f, 0.000198f, 0.000216f, 0.000268f, 0.000315f, 0.000414f, 0.000537f,
+ 0.000735f, 0.001149f, 0.002075f, 0.004669f, 0.014175f, 0.077881f, 0.707031f, 0.710449f, 0.712402f, 0.711914f, 0.712891f, 0.712402f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000012f, 0.000013f, 0.000029f, 0.000028f, 0.000037f, 0.000035f, 0.000039f,
+ 0.000043f, 0.000043f, 0.000045f, 0.000045f, 0.000048f, 0.000048f, 0.000050f, 0.000051f, 0.000052f, 0.000052f, 0.000053f, 0.000054f,
+ 0.000054f, 0.000053f, 0.000050f, 0.000048f, 0.000045f, 0.000043f, 0.000040f, 0.000038f, 0.000036f, 0.000034f, 0.000032f, 0.000030f,
+ 0.000028f, 0.000030f, 0.000038f, 0.000043f, 0.000057f, 0.000069f, 0.000072f, 0.000073f, 0.000082f, 0.000095f, 0.000101f, 0.000099f,
+ 0.000116f, 0.000130f, 0.000184f, 0.000211f, 0.000301f, 0.000443f, 0.000737f, 0.001601f, 0.004978f, 0.032593f, 0.666504f, 0.669922f,
+ 0.669922f, 0.672363f, 0.670898f, 0.670410f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000006f, 0.000010f, 0.000012f, 0.000015f, 0.000018f, 0.000021f,
+ 0.000022f, 0.000023f, 0.000025f, 0.000028f, 0.000029f, 0.000029f, 0.000031f, 0.000033f, 0.000033f, 0.000035f, 0.000035f, 0.000035f,
+ 0.000033f, 0.000031f, 0.000029f, 0.000028f, 0.000026f, 0.000024f, 0.000023f, 0.000021f, 0.000020f, 0.000019f, 0.000022f, 0.000022f,
+ 0.000030f, 0.000038f, 0.000042f, 0.000041f, 0.000052f, 0.000047f, 0.000064f, 0.000072f, 0.000078f, 0.000129f, 0.000201f, 0.000382f,
+ 0.001180f, 0.009117f, 0.620605f, 0.624512f, 0.625000f, 0.625000f, 0.625000f, 0.625488f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000003f, 0.000005f, 0.000007f, 0.000008f, 0.000010f, 0.000011f, 0.000012f, 0.000014f, 0.000016f, 0.000016f, 0.000018f, 0.000017f,
+ 0.000016f, 0.000015f, 0.000014f, 0.000013f, 0.000012f, 0.000011f, 0.000010f, 0.000009f, 0.000011f, 0.000014f, 0.000018f, 0.000018f,
+ 0.000021f, 0.000028f, 0.000035f, 0.000053f, 0.000136f, 0.001152f, 0.571777f, 0.575684f, 0.575684f, 0.576172f, 0.576660f, 0.576660f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f,
+ 0.000002f, 0.000004f, 0.000004f, 0.000004f, 0.000003f, 0.000003f, 0.000002f, 0.000004f, 0.000003f, 0.000011f, 0.520020f, 0.523926f,
+ 0.524902f, 0.524902f, 0.524902f, 0.524902f,
+ },
+ {
+ 0.119934f, 0.328857f, 0.480713f, 0.586914f, 0.663086f, 0.717773f, 0.759766f, 0.791504f, 0.818359f, 0.838867f, 0.856934f, 0.871094f,
+ 0.883301f, 0.894043f, 0.902832f, 0.911621f, 0.917969f, 0.924805f, 0.930664f, 0.936035f, 0.939941f, 0.944824f, 0.948242f, 0.951660f,
+ 0.954590f, 0.958008f, 0.961426f, 0.962891f, 0.966309f, 0.967285f, 0.970215f, 0.972656f, 0.973633f, 0.975586f, 0.977539f, 0.978516f,
+ 0.979980f, 0.981445f, 0.982910f, 0.984375f, 0.985352f, 0.986328f, 0.987793f, 0.988770f, 0.989746f, 0.990234f, 0.991699f, 0.992676f,
+ 0.993164f, 0.993652f, 0.994629f, 0.995117f, 0.996094f, 0.996582f, 0.997559f, 0.998047f, 0.998535f, 0.999023f, 0.999512f, 0.999023f,
+ 0.999023f, 0.998535f, 0.998535f, 0.998047f, 0.046875f, 0.160400f, 0.286621f, 0.405518f, 0.507812f, 0.590820f, 0.656250f, 0.708008f,
+ 0.748535f, 0.781250f, 0.809082f, 0.830566f, 0.848633f, 0.864258f, 0.877441f, 0.888672f, 0.898926f, 0.906738f, 0.915039f, 0.921387f,
+ 0.928223f, 0.933105f, 0.937988f, 0.942871f, 0.946777f, 0.950684f, 0.954102f, 0.957031f, 0.959961f, 0.962402f, 0.965332f, 0.966797f,
+ 0.969727f, 0.971191f, 0.973145f, 0.975098f, 0.977539f, 0.978027f, 0.980469f, 0.981934f, 0.982910f, 0.984375f, 0.985352f, 0.986816f,
+ 0.987793f, 0.988770f, 0.989258f, 0.990723f, 0.991699f, 0.992676f, 0.993164f, 0.993652f, 0.994629f, 0.995605f, 0.996582f, 0.996582f,
+ 0.997559f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.998535f, 0.998535f, 0.998047f, 0.023788f, 0.084473f, 0.163696f, 0.255615f,
+ 0.351807f, 0.445312f, 0.527832f, 0.597656f, 0.656738f, 0.703613f, 0.742676f, 0.775879f, 0.802734f, 0.824707f, 0.843262f, 0.858887f,
+ 0.873047f, 0.884766f, 0.895508f, 0.903809f, 0.913086f, 0.919434f, 0.925781f, 0.931641f, 0.937012f, 0.941406f, 0.945801f, 0.949707f,
+ 0.953125f, 0.956543f, 0.959473f, 0.962402f, 0.964844f, 0.967285f, 0.969238f, 0.972168f, 0.973633f, 0.975098f, 0.977539f, 0.979492f,
+ 0.980469f, 0.981445f, 0.982910f, 0.984375f, 0.985840f, 0.986816f, 0.988281f, 0.988770f, 0.989746f, 0.990723f, 0.992188f, 0.992676f,
+ 0.993652f, 0.994629f, 0.995605f, 0.996094f, 0.996582f, 0.997559f, 0.998535f, 0.998535f, 0.998535f, 0.998047f, 0.998047f, 0.997559f,
+ 0.014595f, 0.050110f, 0.097717f, 0.158569f, 0.230347f, 0.311523f, 0.394531f, 0.473145f, 0.544922f, 0.606934f, 0.660645f, 0.705566f,
+ 0.743164f, 0.775391f, 0.800781f, 0.822266f, 0.841309f, 0.856934f, 0.870605f, 0.883301f, 0.894043f, 0.902832f, 0.911133f, 0.918945f,
+ 0.925293f, 0.931152f, 0.936035f, 0.941406f, 0.945801f, 0.949707f, 0.953125f, 0.956055f, 0.959473f, 0.962402f, 0.964844f, 0.967285f,
+ 0.970215f, 0.972168f, 0.974121f, 0.975098f, 0.977539f, 0.979004f, 0.980957f, 0.981934f, 0.983398f, 0.984375f, 0.985840f, 0.987305f,
+ 0.988281f, 0.989258f, 0.990723f, 0.991699f, 0.992676f, 0.993652f, 0.994629f, 0.995117f, 0.995605f, 0.996582f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998047f, 0.998047f, 0.997559f, 0.009178f, 0.032379f, 0.062561f, 0.102417f, 0.151611f, 0.210938f, 0.279785f, 0.352783f,
+ 0.426758f, 0.496826f, 0.561035f, 0.618164f, 0.666992f, 0.708496f, 0.744141f, 0.773926f, 0.800781f, 0.821777f, 0.840820f, 0.856445f,
+ 0.870117f, 0.882324f, 0.893066f, 0.901855f, 0.910645f, 0.918457f, 0.925293f, 0.930176f, 0.935547f, 0.941406f, 0.946289f, 0.949707f,
+ 0.953125f, 0.956543f, 0.959961f, 0.962891f, 0.965332f, 0.967773f, 0.969727f, 0.972656f, 0.974121f, 0.976074f, 0.977539f, 0.979492f,
+ 0.981445f, 0.982422f, 0.984375f, 0.985840f, 0.986328f, 0.987793f, 0.989258f, 0.990234f, 0.991211f, 0.992188f, 0.993164f, 0.994141f,
+ 0.994629f, 0.995605f, 0.998047f, 0.998047f, 0.998047f, 0.997559f, 0.997559f, 0.997559f, 0.006382f, 0.022430f, 0.042908f, 0.068970f,
+ 0.102844f, 0.144653f, 0.195557f, 0.253906f, 0.318848f, 0.386230f, 0.454590f, 0.518066f, 0.577148f, 0.628906f, 0.675293f, 0.714844f,
+ 0.748535f, 0.777344f, 0.802246f, 0.823730f, 0.841797f, 0.856934f, 0.871094f, 0.882812f, 0.893555f, 0.902832f, 0.911133f, 0.918457f,
+ 0.925293f, 0.930176f, 0.937012f, 0.940918f, 0.945801f, 0.950195f, 0.953613f, 0.957031f, 0.960449f, 0.963379f, 0.966309f, 0.968262f,
+ 0.970703f, 0.973145f, 0.974609f, 0.976562f, 0.978516f, 0.980469f, 0.981934f, 0.983398f, 0.984375f, 0.985840f, 0.988281f, 0.988770f,
+ 0.989746f, 0.990723f, 0.991699f, 0.992676f, 0.993652f, 0.994629f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997070f,
+ 0.004585f, 0.015961f, 0.030930f, 0.049133f, 0.072144f, 0.101013f, 0.137451f, 0.181519f, 0.232544f, 0.290039f, 0.352539f, 0.416748f,
+ 0.479736f, 0.538574f, 0.592773f, 0.641602f, 0.684570f, 0.723145f, 0.754395f, 0.782715f, 0.805176f, 0.825195f, 0.843750f, 0.859863f,
+ 0.872559f, 0.884766f, 0.895020f, 0.904297f, 0.912109f, 0.919922f, 0.926270f, 0.932129f, 0.937500f, 0.942383f, 0.946289f, 0.950195f,
+ 0.955078f, 0.958008f, 0.961426f, 0.964355f, 0.967285f, 0.969238f, 0.971680f, 0.974121f, 0.975586f, 0.977539f, 0.979492f, 0.980957f,
+ 0.982910f, 0.984375f, 0.985840f, 0.986328f, 0.988281f, 0.989746f, 0.990723f, 0.992188f, 0.992676f, 0.993164f, 0.997559f, 0.997559f,
+ 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.003483f, 0.012291f, 0.023209f, 0.036041f, 0.052429f, 0.073486f, 0.099182f, 0.131226f,
+ 0.169678f, 0.214844f, 0.266846f, 0.323242f, 0.383545f, 0.444580f, 0.503418f, 0.559082f, 0.609375f, 0.655762f, 0.695312f, 0.730957f,
+ 0.760254f, 0.788086f, 0.810059f, 0.829590f, 0.847168f, 0.862793f, 0.875488f, 0.886719f, 0.896973f, 0.906250f, 0.914551f, 0.921387f,
+ 0.927734f, 0.933594f, 0.938965f, 0.944336f, 0.948242f, 0.952148f, 0.956543f, 0.958984f, 0.961914f, 0.965332f, 0.968262f, 0.970703f,
+ 0.972656f, 0.974609f, 0.977051f, 0.979004f, 0.980469f, 0.981934f, 0.983887f, 0.985352f, 0.986328f, 0.987793f, 0.989746f, 0.990234f,
+ 0.991699f, 0.992676f, 0.996582f, 0.997070f, 0.997070f, 0.996582f, 0.996582f, 0.996094f, 0.002962f, 0.009613f, 0.017792f, 0.027481f,
+ 0.039429f, 0.055176f, 0.073914f, 0.096985f, 0.125610f, 0.159180f, 0.199707f, 0.246216f, 0.297607f, 0.353760f, 0.412842f, 0.470215f,
+ 0.526367f, 0.578613f, 0.626953f, 0.669434f, 0.707031f, 0.740723f, 0.769043f, 0.794922f, 0.814941f, 0.835449f, 0.851074f, 0.866699f,
+ 0.879395f, 0.890137f, 0.899902f, 0.909180f, 0.916992f, 0.924316f, 0.929688f, 0.936035f, 0.941406f, 0.945312f, 0.950195f, 0.953613f,
+ 0.957520f, 0.960938f, 0.963867f, 0.966797f, 0.969238f, 0.971680f, 0.974121f, 0.976562f, 0.979004f, 0.979980f, 0.981934f, 0.982910f,
+ 0.984375f, 0.986816f, 0.987793f, 0.988770f, 0.990234f, 0.991699f, 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.996094f, 0.996094f,
+ 0.002077f, 0.007637f, 0.013802f, 0.021606f, 0.031006f, 0.042419f, 0.055969f, 0.073242f, 0.094055f, 0.119446f, 0.150513f, 0.186401f,
+ 0.228638f, 0.276123f, 0.328857f, 0.384277f, 0.440674f, 0.496338f, 0.549805f, 0.598633f, 0.644043f, 0.683594f, 0.719727f, 0.750977f,
+ 0.779297f, 0.802246f, 0.823730f, 0.840820f, 0.855957f, 0.871582f, 0.882324f, 0.893555f, 0.903809f, 0.911621f, 0.920410f, 0.926758f,
+ 0.932617f, 0.938477f, 0.943359f, 0.947754f, 0.953125f, 0.955566f, 0.959473f, 0.962402f, 0.965332f, 0.968262f, 0.970703f, 0.972656f,
+ 0.976074f, 0.977051f, 0.979492f, 0.981445f, 0.983398f, 0.984863f, 0.986328f, 0.987793f, 0.989258f, 0.990723f, 0.995605f, 0.996094f,
+ 0.996094f, 0.996094f, 0.996094f, 0.995605f, 0.002014f, 0.006035f, 0.011299f, 0.017410f, 0.024368f, 0.033020f, 0.043701f, 0.056458f,
+ 0.072205f, 0.091431f, 0.114807f, 0.141968f, 0.174316f, 0.213257f, 0.256836f, 0.306152f, 0.358887f, 0.413330f, 0.468018f, 0.520996f,
+ 0.572266f, 0.618652f, 0.661621f, 0.699707f, 0.732910f, 0.762695f, 0.788574f, 0.810547f, 0.830078f, 0.848145f, 0.862305f, 0.875977f,
+ 0.887695f, 0.898438f, 0.907227f, 0.915527f, 0.922852f, 0.929199f, 0.936035f, 0.940918f, 0.946289f, 0.950684f, 0.953613f, 0.958496f,
+ 0.960938f, 0.964355f, 0.967285f, 0.970215f, 0.972656f, 0.975586f, 0.977539f, 0.979492f, 0.980957f, 0.982910f, 0.984863f, 0.986328f,
+ 0.987793f, 0.988770f, 0.995117f, 0.995605f, 0.995605f, 0.995605f, 0.995605f, 0.995605f, 0.001496f, 0.005196f, 0.009201f, 0.013985f,
+ 0.019806f, 0.026413f, 0.034943f, 0.044647f, 0.056641f, 0.070923f, 0.088623f, 0.109680f, 0.135254f, 0.164795f, 0.200073f, 0.240845f,
+ 0.285645f, 0.335449f, 0.387939f, 0.441650f, 0.495850f, 0.546875f, 0.595215f, 0.639160f, 0.679199f, 0.715820f, 0.746582f, 0.774414f,
+ 0.798828f, 0.819824f, 0.837402f, 0.854492f, 0.869629f, 0.881348f, 0.893066f, 0.902832f, 0.912109f, 0.918945f, 0.926758f, 0.933105f,
+ 0.938477f, 0.943359f, 0.948730f, 0.952637f, 0.956055f, 0.960449f, 0.963379f, 0.966797f, 0.969238f, 0.972656f, 0.975098f, 0.977051f,
+ 0.979004f, 0.981445f, 0.982910f, 0.984375f, 0.986328f, 0.987305f, 0.994629f, 0.995605f, 0.995117f, 0.995117f, 0.995117f, 0.994629f,
+ 0.001187f, 0.004314f, 0.007740f, 0.011337f, 0.016373f, 0.021759f, 0.028198f, 0.035889f, 0.045197f, 0.056580f, 0.069946f, 0.085938f,
+ 0.105408f, 0.128784f, 0.155884f, 0.187866f, 0.225830f, 0.268066f, 0.315186f, 0.365479f, 0.418213f, 0.471680f, 0.522949f, 0.572754f,
+ 0.617676f, 0.659668f, 0.697754f, 0.730957f, 0.760742f, 0.787109f, 0.809570f, 0.830078f, 0.846680f, 0.862793f, 0.875488f, 0.888184f,
+ 0.898926f, 0.907715f, 0.916016f, 0.923340f, 0.930664f, 0.936523f, 0.941895f, 0.947754f, 0.951660f, 0.955566f, 0.959473f, 0.963867f,
+ 0.966309f, 0.969238f, 0.972168f, 0.974121f, 0.976562f, 0.979004f, 0.980957f, 0.982910f, 0.984863f, 0.986816f, 0.994141f, 0.994629f,
+ 0.994629f, 0.994629f, 0.994629f, 0.994141f, 0.001187f, 0.003733f, 0.006496f, 0.009918f, 0.013634f, 0.017899f, 0.023026f, 0.029343f,
+ 0.036621f, 0.045227f, 0.055786f, 0.068298f, 0.083740f, 0.101135f, 0.122314f, 0.147827f, 0.177612f, 0.212891f, 0.252686f, 0.297119f,
+ 0.345215f, 0.395996f, 0.448730f, 0.500488f, 0.550781f, 0.597656f, 0.641113f, 0.680664f, 0.716309f, 0.747559f, 0.774414f, 0.799316f,
+ 0.820312f, 0.838867f, 0.855957f, 0.870117f, 0.883301f, 0.894531f, 0.904785f, 0.913086f, 0.920898f, 0.928223f, 0.935059f, 0.940430f,
+ 0.945312f, 0.950684f, 0.955566f, 0.958496f, 0.962891f, 0.965820f, 0.968750f, 0.971680f, 0.974609f, 0.976562f, 0.978516f, 0.980957f,
+ 0.982910f, 0.984863f, 0.994141f, 0.994141f, 0.994629f, 0.994141f, 0.994141f, 0.994629f, 0.000998f, 0.003178f, 0.005444f, 0.008179f,
+ 0.011337f, 0.015091f, 0.019058f, 0.024368f, 0.029587f, 0.037140f, 0.045197f, 0.055115f, 0.066772f, 0.080688f, 0.097229f, 0.117371f,
+ 0.140869f, 0.169312f, 0.201538f, 0.238770f, 0.280762f, 0.326660f, 0.376709f, 0.427490f, 0.479248f, 0.530273f, 0.578613f, 0.623535f,
+ 0.664551f, 0.701660f, 0.733887f, 0.763672f, 0.790039f, 0.812500f, 0.832520f, 0.849121f, 0.865234f, 0.878906f, 0.890625f, 0.901367f,
+ 0.910645f, 0.919434f, 0.926758f, 0.933105f, 0.939453f, 0.944824f, 0.949707f, 0.954590f, 0.958008f, 0.961914f, 0.965332f, 0.968750f,
+ 0.971680f, 0.974121f, 0.977051f, 0.979004f, 0.980957f, 0.982910f, 0.993164f, 0.993164f, 0.994141f, 0.993652f, 0.993652f, 0.993164f,
+ 0.000948f, 0.002638f, 0.004784f, 0.007153f, 0.009590f, 0.012505f, 0.016388f, 0.020599f, 0.025299f, 0.031097f, 0.037323f, 0.045197f,
+ 0.054047f, 0.065002f, 0.078674f, 0.094055f, 0.112305f, 0.134399f, 0.160889f, 0.191040f, 0.226318f, 0.265869f, 0.310303f, 0.358154f,
+ 0.409180f, 0.459473f, 0.510254f, 0.559082f, 0.606445f, 0.648926f, 0.687500f, 0.722168f, 0.753418f, 0.781250f, 0.804199f, 0.825684f,
+ 0.843262f, 0.860840f, 0.874512f, 0.886719f, 0.898926f, 0.907227f, 0.916992f, 0.924805f, 0.932129f, 0.937988f, 0.943848f, 0.949219f,
+ 0.954102f, 0.958496f, 0.961426f, 0.965332f, 0.968750f, 0.972168f, 0.974609f, 0.977051f, 0.979492f, 0.981445f, 0.992188f, 0.993164f,
+ 0.993164f, 0.993164f, 0.993164f, 0.992676f, 0.000696f, 0.002352f, 0.004002f, 0.006138f, 0.008446f, 0.010826f, 0.013840f, 0.017258f,
+ 0.021194f, 0.025970f, 0.031128f, 0.037140f, 0.044281f, 0.053436f, 0.063660f, 0.076050f, 0.090271f, 0.107727f, 0.128662f, 0.152832f,
+ 0.182007f, 0.214111f, 0.252930f, 0.295166f, 0.341553f, 0.390625f, 0.442139f, 0.492676f, 0.541992f, 0.589844f, 0.633301f, 0.674316f,
+ 0.710938f, 0.743652f, 0.772461f, 0.796875f, 0.819824f, 0.839355f, 0.854980f, 0.870605f, 0.884277f, 0.895508f, 0.906738f, 0.915527f,
+ 0.923828f, 0.931152f, 0.937500f, 0.944336f, 0.949219f, 0.953613f, 0.958008f, 0.962402f, 0.965332f, 0.968750f, 0.972168f, 0.974609f,
+ 0.977051f, 0.979980f, 0.991211f, 0.992676f, 0.992188f, 0.992188f, 0.992188f, 0.992676f, 0.000838f, 0.002033f, 0.003664f, 0.005077f,
+ 0.007282f, 0.009415f, 0.011749f, 0.014931f, 0.017853f, 0.021606f, 0.025864f, 0.031219f, 0.037231f, 0.044464f, 0.052338f, 0.062500f,
+ 0.073853f, 0.087463f, 0.104065f, 0.123230f, 0.146362f, 0.173340f, 0.205078f, 0.240845f, 0.281982f, 0.326660f, 0.374756f, 0.425049f,
+ 0.476807f, 0.526855f, 0.574219f, 0.620117f, 0.662598f, 0.699219f, 0.733398f, 0.764160f, 0.791016f, 0.813965f, 0.833984f, 0.851074f,
+ 0.867676f, 0.880859f, 0.893555f, 0.904785f, 0.914062f, 0.922852f, 0.930176f, 0.937012f, 0.942383f, 0.948242f, 0.953125f, 0.957520f,
+ 0.962402f, 0.966309f, 0.969238f, 0.973145f, 0.975098f, 0.978027f, 0.991699f, 0.991699f, 0.992676f, 0.992188f, 0.991699f, 0.992188f,
+ 0.000600f, 0.001687f, 0.003023f, 0.004963f, 0.006405f, 0.008163f, 0.010368f, 0.012718f, 0.015480f, 0.018311f, 0.022064f, 0.026169f,
+ 0.031097f, 0.036926f, 0.043457f, 0.051392f, 0.060669f, 0.071350f, 0.084473f, 0.100220f, 0.118103f, 0.140259f, 0.166016f, 0.195679f,
+ 0.230469f, 0.269531f, 0.313232f, 0.360596f, 0.410156f, 0.460693f, 0.511719f, 0.560547f, 0.607422f, 0.650879f, 0.689941f, 0.724609f,
+ 0.756348f, 0.784180f, 0.808594f, 0.828613f, 0.847656f, 0.864258f, 0.879395f, 0.892090f, 0.903320f, 0.912598f, 0.921875f, 0.929688f,
+ 0.936523f, 0.942871f, 0.947754f, 0.953125f, 0.957520f, 0.961914f, 0.966309f, 0.969238f, 0.972656f, 0.975586f, 0.990234f, 0.991211f,
+ 0.991211f, 0.991699f, 0.991211f, 0.991211f, 0.000269f, 0.001538f, 0.002800f, 0.003868f, 0.005524f, 0.007179f, 0.008987f, 0.011063f,
+ 0.013084f, 0.015747f, 0.019211f, 0.022324f, 0.026474f, 0.031311f, 0.036530f, 0.042969f, 0.050201f, 0.059174f, 0.069641f, 0.081543f,
+ 0.096680f, 0.114075f, 0.134644f, 0.158691f, 0.187622f, 0.220581f, 0.258301f, 0.300781f, 0.347168f, 0.395996f, 0.447266f, 0.498291f,
+ 0.547852f, 0.595215f, 0.640625f, 0.680176f, 0.717285f, 0.749512f, 0.778320f, 0.803223f, 0.825684f, 0.845215f, 0.862793f, 0.877441f,
+ 0.890625f, 0.901855f, 0.912109f, 0.920898f, 0.929688f, 0.937012f, 0.942871f, 0.949707f, 0.954102f, 0.958496f, 0.962402f, 0.966309f,
+ 0.970215f, 0.974121f, 0.989746f, 0.990234f, 0.990723f, 0.990723f, 0.990723f, 0.990234f, 0.000341f, 0.001337f, 0.002573f, 0.003475f,
+ 0.004765f, 0.006329f, 0.007717f, 0.009499f, 0.011642f, 0.014107f, 0.016556f, 0.019470f, 0.022491f, 0.026169f, 0.030945f, 0.036011f,
+ 0.042389f, 0.049042f, 0.057678f, 0.067993f, 0.079468f, 0.093384f, 0.110046f, 0.129883f, 0.152710f, 0.180420f, 0.212158f, 0.248291f,
+ 0.289551f, 0.334961f, 0.383301f, 0.434570f, 0.485596f, 0.536133f, 0.584473f, 0.630371f, 0.671875f, 0.710449f, 0.743652f, 0.773926f,
+ 0.799316f, 0.823242f, 0.843262f, 0.860352f, 0.875977f, 0.889648f, 0.901367f, 0.911621f, 0.921387f, 0.929688f, 0.937012f, 0.943848f,
+ 0.950195f, 0.955078f, 0.959473f, 0.963379f, 0.967773f, 0.971191f, 0.988770f, 0.989746f, 0.990234f, 0.990234f, 0.990234f, 0.990234f,
+ 0.000564f, 0.001324f, 0.002092f, 0.003191f, 0.004471f, 0.005348f, 0.007069f, 0.008438f, 0.010201f, 0.011810f, 0.014297f, 0.016586f,
+ 0.019470f, 0.022644f, 0.026428f, 0.030579f, 0.035797f, 0.041718f, 0.048248f, 0.056213f, 0.065857f, 0.076782f, 0.090271f, 0.106262f,
+ 0.125122f, 0.147095f, 0.173462f, 0.204224f, 0.239746f, 0.279785f, 0.323730f, 0.372314f, 0.422607f, 0.474121f, 0.526367f, 0.575195f,
+ 0.621582f, 0.664062f, 0.703613f, 0.738770f, 0.769043f, 0.796387f, 0.820312f, 0.841797f, 0.858887f, 0.875488f, 0.889648f, 0.900879f,
+ 0.912598f, 0.921875f, 0.930664f, 0.937500f, 0.944336f, 0.950195f, 0.955566f, 0.959961f, 0.964844f, 0.968750f, 0.987305f, 0.989258f,
+ 0.989258f, 0.989258f, 0.989258f, 0.988770f, 0.000369f, 0.001128f, 0.001871f, 0.002792f, 0.003712f, 0.004723f, 0.006016f, 0.007542f,
+ 0.008896f, 0.010773f, 0.012421f, 0.014381f, 0.016632f, 0.019791f, 0.022354f, 0.025955f, 0.030609f, 0.035065f, 0.040924f, 0.047333f,
+ 0.055084f, 0.064209f, 0.075012f, 0.087769f, 0.102966f, 0.120911f, 0.142456f, 0.167358f, 0.197144f, 0.231812f, 0.270752f, 0.314209f,
+ 0.362549f, 0.412598f, 0.464844f, 0.515625f, 0.566895f, 0.614258f, 0.657715f, 0.698730f, 0.734863f, 0.766602f, 0.794922f, 0.818848f,
+ 0.839844f, 0.858887f, 0.875000f, 0.889648f, 0.901855f, 0.912598f, 0.922852f, 0.931152f, 0.938965f, 0.945312f, 0.951660f, 0.957520f,
+ 0.961426f, 0.966309f, 0.986816f, 0.988281f, 0.988281f, 0.988770f, 0.988281f, 0.988281f, 0.000466f, 0.000900f, 0.001792f, 0.002695f,
+ 0.003458f, 0.004204f, 0.005356f, 0.006512f, 0.007896f, 0.009300f, 0.010895f, 0.012459f, 0.014786f, 0.016739f, 0.019424f, 0.022461f,
+ 0.026062f, 0.029831f, 0.034851f, 0.039764f, 0.046417f, 0.053711f, 0.062164f, 0.072388f, 0.085205f, 0.099365f, 0.117004f, 0.137573f,
+ 0.162231f, 0.190674f, 0.224121f, 0.262451f, 0.305664f, 0.353027f, 0.403809f, 0.456055f, 0.508301f, 0.559082f, 0.608398f, 0.652832f,
+ 0.694824f, 0.731445f, 0.764160f, 0.793945f, 0.817871f, 0.839355f, 0.858398f, 0.875488f, 0.890137f, 0.902832f, 0.913574f, 0.923828f,
+ 0.932617f, 0.940918f, 0.946777f, 0.953613f, 0.958984f, 0.963379f, 0.985840f, 0.987305f, 0.987305f, 0.987793f, 0.987305f, 0.987305f,
+ 0.000234f, 0.001040f, 0.001661f, 0.002392f, 0.003101f, 0.003681f, 0.004944f, 0.005844f, 0.007065f, 0.008217f, 0.009247f, 0.010925f,
+ 0.012894f, 0.014549f, 0.017090f, 0.019455f, 0.022385f, 0.025650f, 0.029449f, 0.033936f, 0.039215f, 0.045135f, 0.052612f, 0.060944f,
+ 0.070312f, 0.082397f, 0.096924f, 0.113525f, 0.133179f, 0.156860f, 0.184814f, 0.217773f, 0.255127f, 0.298340f, 0.345215f, 0.395996f,
+ 0.448242f, 0.501953f, 0.553223f, 0.603516f, 0.649414f, 0.691895f, 0.729980f, 0.763184f, 0.792480f, 0.818359f, 0.841309f, 0.858887f,
+ 0.877441f, 0.891113f, 0.904785f, 0.915527f, 0.925781f, 0.933594f, 0.941895f, 0.949219f, 0.955566f, 0.960449f, 0.984863f, 0.985840f,
+ 0.986328f, 0.986816f, 0.986328f, 0.986816f, 0.000241f, 0.000808f, 0.001395f, 0.001986f, 0.002731f, 0.003429f, 0.004131f, 0.005402f,
+ 0.006077f, 0.007347f, 0.008522f, 0.009544f, 0.011345f, 0.013046f, 0.014534f, 0.016953f, 0.019241f, 0.022339f, 0.025208f, 0.029175f,
+ 0.033691f, 0.038300f, 0.044067f, 0.051331f, 0.059143f, 0.068726f, 0.080322f, 0.093567f, 0.109802f, 0.129883f, 0.152466f, 0.179810f,
+ 0.211792f, 0.249390f, 0.291748f, 0.338623f, 0.389404f, 0.442139f, 0.496338f, 0.548340f, 0.599121f, 0.645996f, 0.689941f, 0.728516f,
+ 0.762695f, 0.792969f, 0.818848f, 0.842285f, 0.862793f, 0.878906f, 0.894043f, 0.906250f, 0.917969f, 0.927734f, 0.935547f, 0.944336f,
+ 0.951172f, 0.957031f, 0.983398f, 0.985352f, 0.985840f, 0.985352f, 0.985840f, 0.985352f, 0.000340f, 0.000735f, 0.001377f, 0.001853f,
+ 0.002382f, 0.003159f, 0.004021f, 0.004642f, 0.005604f, 0.006340f, 0.007298f, 0.008591f, 0.009895f, 0.011154f, 0.012871f, 0.014580f,
+ 0.016876f, 0.019180f, 0.022141f, 0.024979f, 0.028748f, 0.032745f, 0.037964f, 0.043213f, 0.050171f, 0.057831f, 0.066833f, 0.078247f,
+ 0.091553f, 0.107178f, 0.125977f, 0.148315f, 0.175415f, 0.207153f, 0.244019f, 0.286377f, 0.333008f, 0.383789f, 0.437744f, 0.491943f,
+ 0.545410f, 0.597168f, 0.645508f, 0.688965f, 0.729004f, 0.764160f, 0.794434f, 0.821289f, 0.843750f, 0.864258f, 0.881348f, 0.895996f,
+ 0.909180f, 0.920898f, 0.929199f, 0.938965f, 0.946777f, 0.952637f, 0.982910f, 0.983887f, 0.984863f, 0.984863f, 0.984375f, 0.984863f,
+ 0.000236f, 0.000605f, 0.001135f, 0.001415f, 0.002329f, 0.002747f, 0.003551f, 0.004158f, 0.004723f, 0.005535f, 0.006687f, 0.007534f,
+ 0.008545f, 0.009979f, 0.011375f, 0.012993f, 0.014656f, 0.016754f, 0.018921f, 0.021759f, 0.024506f, 0.028183f, 0.032043f, 0.036743f,
+ 0.042236f, 0.048645f, 0.056030f, 0.065125f, 0.075928f, 0.089050f, 0.104370f, 0.122681f, 0.145142f, 0.171509f, 0.202759f, 0.239258f,
+ 0.281250f, 0.328369f, 0.379639f, 0.433838f, 0.489014f, 0.543945f, 0.596191f, 0.645020f, 0.690430f, 0.730957f, 0.766113f, 0.797852f,
+ 0.824219f, 0.846680f, 0.867188f, 0.884766f, 0.899414f, 0.912109f, 0.923828f, 0.933105f, 0.942383f, 0.949707f, 0.980957f, 0.982910f,
+ 0.983398f, 0.983398f, 0.983887f, 0.982910f, 0.000214f, 0.000710f, 0.001021f, 0.001429f, 0.001858f, 0.002607f, 0.003220f, 0.003738f,
+ 0.004459f, 0.005032f, 0.005726f, 0.006748f, 0.007748f, 0.008659f, 0.010002f, 0.011368f, 0.012985f, 0.014656f, 0.016525f, 0.018921f,
+ 0.021286f, 0.024231f, 0.027649f, 0.031464f, 0.035858f, 0.041321f, 0.047363f, 0.054840f, 0.063538f, 0.074097f, 0.086609f, 0.101990f,
+ 0.120117f, 0.141846f, 0.168213f, 0.199219f, 0.235352f, 0.277344f, 0.324707f, 0.376953f, 0.432373f, 0.488037f, 0.543457f, 0.597168f,
+ 0.646973f, 0.692871f, 0.732910f, 0.769531f, 0.801270f, 0.828125f, 0.850586f, 0.871582f, 0.888184f, 0.903809f, 0.915527f, 0.927246f,
+ 0.936523f, 0.946289f, 0.979492f, 0.981445f, 0.981934f, 0.982422f, 0.981934f, 0.981934f, 0.000000f, 0.000468f, 0.001076f, 0.001489f,
+ 0.002048f, 0.002413f, 0.002853f, 0.003468f, 0.003952f, 0.004444f, 0.005211f, 0.005917f, 0.006733f, 0.007763f, 0.008713f, 0.010262f,
+ 0.011368f, 0.012733f, 0.014458f, 0.016296f, 0.018478f, 0.021072f, 0.023666f, 0.026810f, 0.030746f, 0.035278f, 0.040131f, 0.046295f,
+ 0.053711f, 0.062195f, 0.072327f, 0.084717f, 0.099487f, 0.117371f, 0.139038f, 0.164795f, 0.195923f, 0.232422f, 0.274414f, 0.322266f,
+ 0.374756f, 0.431641f, 0.488525f, 0.545410f, 0.599121f, 0.650879f, 0.697754f, 0.738770f, 0.774414f, 0.806641f, 0.832520f, 0.856445f,
+ 0.875488f, 0.893555f, 0.907715f, 0.920410f, 0.931152f, 0.940918f, 0.978027f, 0.980469f, 0.980469f, 0.980957f, 0.980957f, 0.980957f,
+ 0.000279f, 0.000497f, 0.000763f, 0.001353f, 0.001794f, 0.002079f, 0.002451f, 0.002956f, 0.003498f, 0.004150f, 0.004589f, 0.005310f,
+ 0.006130f, 0.006958f, 0.007828f, 0.008888f, 0.009895f, 0.011124f, 0.012772f, 0.014282f, 0.016235f, 0.018127f, 0.020630f, 0.022873f,
+ 0.026321f, 0.029938f, 0.034241f, 0.039368f, 0.045319f, 0.052338f, 0.060852f, 0.070801f, 0.082947f, 0.097595f, 0.115051f, 0.136353f,
+ 0.162231f, 0.193481f, 0.229858f, 0.272217f, 0.321777f, 0.375000f, 0.432373f, 0.490479f, 0.548340f, 0.604004f, 0.655762f, 0.702637f,
+ 0.743652f, 0.780273f, 0.812500f, 0.838867f, 0.862305f, 0.881348f, 0.897949f, 0.912598f, 0.925293f, 0.935547f, 0.976562f, 0.978516f,
+ 0.979492f, 0.979980f, 0.979492f, 0.979004f, 0.000110f, 0.000473f, 0.000781f, 0.001262f, 0.001584f, 0.001890f, 0.002270f, 0.002607f,
+ 0.003241f, 0.003704f, 0.004055f, 0.004795f, 0.005356f, 0.005997f, 0.006760f, 0.007896f, 0.008896f, 0.009918f, 0.011200f, 0.012451f,
+ 0.013802f, 0.015556f, 0.017838f, 0.020065f, 0.022751f, 0.025864f, 0.029358f, 0.033600f, 0.038574f, 0.044342f, 0.050995f, 0.059296f,
+ 0.069214f, 0.081116f, 0.095459f, 0.113159f, 0.133911f, 0.160400f, 0.191406f, 0.228638f, 0.272217f, 0.321289f, 0.375732f, 0.434326f,
+ 0.493896f, 0.552734f, 0.609863f, 0.662109f, 0.709961f, 0.750977f, 0.787598f, 0.819336f, 0.846680f, 0.868164f, 0.887695f, 0.904297f,
+ 0.917969f, 0.930176f, 0.975098f, 0.977539f, 0.977051f, 0.977539f, 0.977539f, 0.977539f, 0.000242f, 0.000464f, 0.000831f, 0.001027f,
+ 0.001271f, 0.001722f, 0.001965f, 0.002243f, 0.002714f, 0.003036f, 0.003651f, 0.004025f, 0.004902f, 0.005638f, 0.006176f, 0.006943f,
+ 0.007763f, 0.008789f, 0.009804f, 0.010872f, 0.012070f, 0.013695f, 0.015381f, 0.017395f, 0.019608f, 0.022232f, 0.025009f, 0.028885f,
+ 0.032623f, 0.037659f, 0.043182f, 0.050018f, 0.058167f, 0.067810f, 0.079224f, 0.093811f, 0.111328f, 0.132324f, 0.158569f, 0.190063f,
+ 0.228149f, 0.271973f, 0.322510f, 0.378906f, 0.438477f, 0.499756f, 0.560059f, 0.618164f, 0.671387f, 0.718750f, 0.760742f, 0.796875f,
+ 0.826660f, 0.854492f, 0.875000f, 0.894531f, 0.911133f, 0.923828f, 0.973145f, 0.976074f, 0.975586f, 0.976074f, 0.976074f, 0.977051f,
+ 0.000242f, 0.000552f, 0.000701f, 0.001063f, 0.001186f, 0.001462f, 0.001690f, 0.002340f, 0.002703f, 0.002728f, 0.003325f, 0.003828f,
+ 0.004333f, 0.004913f, 0.005474f, 0.006077f, 0.006943f, 0.007607f, 0.008553f, 0.009460f, 0.010582f, 0.011871f, 0.013451f, 0.015091f,
+ 0.016983f, 0.019165f, 0.021637f, 0.024673f, 0.027863f, 0.031525f, 0.036713f, 0.041962f, 0.048615f, 0.056396f, 0.066162f, 0.077942f,
+ 0.092590f, 0.110046f, 0.130981f, 0.157593f, 0.189331f, 0.228394f, 0.273926f, 0.325684f, 0.383301f, 0.444580f, 0.507324f, 0.569824f,
+ 0.627441f, 0.682129f, 0.729980f, 0.770508f, 0.807129f, 0.837402f, 0.863281f, 0.884766f, 0.902832f, 0.917969f, 0.971191f, 0.973633f,
+ 0.974609f, 0.974121f, 0.974609f, 0.974609f, 0.000239f, 0.000239f, 0.000658f, 0.000899f, 0.001204f, 0.001252f, 0.001629f, 0.001815f,
+ 0.002470f, 0.002430f, 0.003134f, 0.003321f, 0.003925f, 0.004238f, 0.004856f, 0.005341f, 0.006161f, 0.006615f, 0.007511f, 0.008224f,
+ 0.009277f, 0.010445f, 0.011818f, 0.013046f, 0.014473f, 0.016510f, 0.018814f, 0.021057f, 0.023834f, 0.027237f, 0.030853f, 0.035675f,
+ 0.040894f, 0.047241f, 0.055145f, 0.064758f, 0.076782f, 0.090942f, 0.108398f, 0.130371f, 0.157104f, 0.189819f, 0.229248f, 0.276367f,
+ 0.329834f, 0.390137f, 0.453125f, 0.517578f, 0.580566f, 0.640625f, 0.694336f, 0.741699f, 0.782715f, 0.817871f, 0.848145f, 0.872559f,
+ 0.893555f, 0.910645f, 0.969727f, 0.971191f, 0.972656f, 0.972168f, 0.972168f, 0.972168f, 0.000222f, 0.000463f, 0.000620f, 0.000837f,
+ 0.000900f, 0.001048f, 0.001381f, 0.001820f, 0.001957f, 0.002329f, 0.002747f, 0.002964f, 0.003330f, 0.003986f, 0.004322f, 0.004677f,
+ 0.005302f, 0.005760f, 0.006569f, 0.007359f, 0.008141f, 0.009293f, 0.010101f, 0.011452f, 0.012779f, 0.014496f, 0.016144f, 0.018097f,
+ 0.020157f, 0.023148f, 0.026611f, 0.029785f, 0.034515f, 0.039856f, 0.046478f, 0.054016f, 0.063843f, 0.075378f, 0.089233f, 0.107666f,
+ 0.129639f, 0.156860f, 0.190674f, 0.231445f, 0.280518f, 0.336426f, 0.398193f, 0.463379f, 0.530273f, 0.595215f, 0.654785f, 0.708984f,
+ 0.755371f, 0.796875f, 0.831543f, 0.860352f, 0.883789f, 0.903809f, 0.966797f, 0.968750f, 0.969727f, 0.970215f, 0.970215f, 0.969727f,
+ 0.000000f, 0.000345f, 0.000464f, 0.000686f, 0.000782f, 0.001030f, 0.001139f, 0.001598f, 0.001846f, 0.002237f, 0.002489f, 0.002684f,
+ 0.003067f, 0.003344f, 0.003895f, 0.004158f, 0.004845f, 0.005131f, 0.005886f, 0.006561f, 0.007195f, 0.007912f, 0.008965f, 0.009941f,
+ 0.010956f, 0.012383f, 0.013893f, 0.015602f, 0.017303f, 0.019623f, 0.022156f, 0.025452f, 0.028976f, 0.033722f, 0.038910f, 0.045288f,
+ 0.052887f, 0.062561f, 0.074097f, 0.088623f, 0.106812f, 0.129639f, 0.157715f, 0.192261f, 0.235107f, 0.285889f, 0.344482f, 0.408691f,
+ 0.476807f, 0.545410f, 0.610840f, 0.671387f, 0.725098f, 0.771484f, 0.811035f, 0.843750f, 0.871582f, 0.894043f, 0.964355f, 0.967285f,
+ 0.967285f, 0.967773f, 0.967773f, 0.967773f, 0.000000f, 0.000320f, 0.000576f, 0.000572f, 0.000767f, 0.000945f, 0.001066f, 0.001375f,
+ 0.001848f, 0.001980f, 0.002190f, 0.002399f, 0.002695f, 0.002943f, 0.003397f, 0.003664f, 0.004063f, 0.004566f, 0.005119f, 0.005688f,
+ 0.006130f, 0.007057f, 0.007778f, 0.008675f, 0.009590f, 0.010666f, 0.011971f, 0.013443f, 0.015129f, 0.016953f, 0.018875f, 0.021576f,
+ 0.024658f, 0.028488f, 0.032959f, 0.037811f, 0.043793f, 0.051819f, 0.061371f, 0.073181f, 0.088257f, 0.106506f, 0.129883f, 0.159180f,
+ 0.195679f, 0.240479f, 0.293457f, 0.355225f, 0.422852f, 0.492432f, 0.563477f, 0.629883f, 0.690918f, 0.743652f, 0.789062f, 0.827148f,
+ 0.858398f, 0.884277f, 0.961914f, 0.964844f, 0.964355f, 0.964844f, 0.964355f, 0.965332f, 0.000000f, 0.000242f, 0.000435f, 0.000547f,
+ 0.000688f, 0.000803f, 0.001175f, 0.001318f, 0.001593f, 0.001652f, 0.001961f, 0.002209f, 0.002481f, 0.002716f, 0.002911f, 0.003210f,
+ 0.003595f, 0.004005f, 0.004490f, 0.004894f, 0.005508f, 0.006107f, 0.006714f, 0.007462f, 0.008438f, 0.009277f, 0.010170f, 0.011436f,
+ 0.012756f, 0.014145f, 0.016205f, 0.018433f, 0.020966f, 0.023819f, 0.027405f, 0.031464f, 0.036713f, 0.043152f, 0.050842f, 0.060577f,
+ 0.071960f, 0.087219f, 0.106689f, 0.130371f, 0.161377f, 0.199585f, 0.246948f, 0.303467f, 0.367920f, 0.439697f, 0.512207f, 0.584473f,
+ 0.651855f, 0.712402f, 0.764160f, 0.808105f, 0.844727f, 0.875000f, 0.958008f, 0.961426f, 0.961914f, 0.961914f, 0.962402f, 0.961914f,
+ 0.000000f, 0.000237f, 0.000266f, 0.000387f, 0.000557f, 0.000691f, 0.000774f, 0.001221f, 0.001455f, 0.001492f, 0.001769f, 0.001896f,
+ 0.002151f, 0.002386f, 0.002529f, 0.002911f, 0.003147f, 0.003523f, 0.003862f, 0.004311f, 0.004848f, 0.005260f, 0.005795f, 0.006416f,
+ 0.007114f, 0.007942f, 0.008667f, 0.009666f, 0.010818f, 0.012184f, 0.013718f, 0.015541f, 0.017685f, 0.020126f, 0.023056f, 0.026306f,
+ 0.030853f, 0.035797f, 0.042053f, 0.049683f, 0.059784f, 0.072144f, 0.086914f, 0.106873f, 0.132202f, 0.164429f, 0.205200f, 0.255615f,
+ 0.315918f, 0.384521f, 0.458984f, 0.534668f, 0.607910f, 0.676758f, 0.735840f, 0.785645f, 0.828125f, 0.862305f, 0.955566f, 0.958008f,
+ 0.958984f, 0.958496f, 0.958984f, 0.958984f, 0.000000f, 0.000119f, 0.000234f, 0.000484f, 0.000603f, 0.000758f, 0.000934f, 0.000999f,
+ 0.001200f, 0.001343f, 0.001534f, 0.001725f, 0.001860f, 0.002056f, 0.002235f, 0.002445f, 0.002783f, 0.003115f, 0.003448f, 0.003757f,
+ 0.004192f, 0.004723f, 0.005077f, 0.005653f, 0.006172f, 0.006527f, 0.007328f, 0.008247f, 0.009140f, 0.010368f, 0.011711f, 0.013351f,
+ 0.014702f, 0.016937f, 0.019226f, 0.022156f, 0.025604f, 0.029877f, 0.034668f, 0.040710f, 0.048920f, 0.058624f, 0.071289f, 0.087219f,
+ 0.107727f, 0.134521f, 0.168701f, 0.212769f, 0.267090f, 0.331543f, 0.404785f, 0.482910f, 0.561523f, 0.635742f, 0.702637f, 0.760742f,
+ 0.809570f, 0.849121f, 0.951660f, 0.954590f, 0.955566f, 0.955566f, 0.956055f, 0.955566f, 0.000238f, 0.000218f, 0.000229f, 0.000242f,
+ 0.000313f, 0.000859f, 0.000623f, 0.000978f, 0.001021f, 0.001150f, 0.001320f, 0.001431f, 0.001546f, 0.001746f, 0.001895f, 0.002106f,
+ 0.002502f, 0.002630f, 0.002926f, 0.003296f, 0.003651f, 0.003918f, 0.004391f, 0.004910f, 0.005249f, 0.005558f, 0.006413f, 0.007114f,
+ 0.007866f, 0.008789f, 0.009872f, 0.011093f, 0.012413f, 0.013939f, 0.015945f, 0.018692f, 0.021225f, 0.024643f, 0.028687f, 0.033936f,
+ 0.040192f, 0.047791f, 0.058014f, 0.070923f, 0.087585f, 0.109131f, 0.137573f, 0.174683f, 0.222290f, 0.280762f, 0.350830f, 0.428955f,
+ 0.511230f, 0.592285f, 0.666992f, 0.733398f, 0.789062f, 0.834473f, 0.947754f, 0.951172f, 0.951660f, 0.951172f, 0.951660f, 0.951172f,
+ 0.000000f, 0.000205f, 0.000222f, 0.000344f, 0.000301f, 0.000775f, 0.000827f, 0.000719f, 0.000944f, 0.000976f, 0.001306f, 0.001249f,
+ 0.001404f, 0.001569f, 0.001604f, 0.001819f, 0.002182f, 0.002354f, 0.002569f, 0.002857f, 0.003113f, 0.003426f, 0.003649f, 0.004112f,
+ 0.004307f, 0.004925f, 0.005508f, 0.005802f, 0.006565f, 0.007450f, 0.008125f, 0.009079f, 0.010269f, 0.011665f, 0.013565f, 0.015213f,
+ 0.017410f, 0.020203f, 0.023743f, 0.028168f, 0.032684f, 0.039062f, 0.047058f, 0.057404f, 0.070984f, 0.088623f, 0.111389f, 0.142090f,
+ 0.182373f, 0.234253f, 0.298828f, 0.375000f, 0.458008f, 0.543945f, 0.627441f, 0.702148f, 0.765137f, 0.818359f, 0.942871f, 0.946289f,
+ 0.947266f, 0.947266f, 0.946777f, 0.947266f, 0.000064f, 0.000095f, 0.000197f, 0.000213f, 0.000459f, 0.000491f, 0.000647f, 0.000696f,
+ 0.000884f, 0.000911f, 0.001121f, 0.001115f, 0.001234f, 0.001371f, 0.001410f, 0.001743f, 0.001905f, 0.002016f, 0.002207f, 0.002438f,
+ 0.002714f, 0.002939f, 0.003183f, 0.003323f, 0.003727f, 0.004143f, 0.004555f, 0.005276f, 0.005531f, 0.006264f, 0.006702f, 0.007572f,
+ 0.008705f, 0.009712f, 0.011238f, 0.012650f, 0.014320f, 0.016815f, 0.019516f, 0.022400f, 0.026566f, 0.031799f, 0.038055f, 0.046417f,
+ 0.057037f, 0.071350f, 0.089722f, 0.114868f, 0.148193f, 0.192749f, 0.249878f, 0.321045f, 0.404053f, 0.493408f, 0.583008f, 0.666016f,
+ 0.739258f, 0.799316f, 0.937988f, 0.941406f, 0.941895f, 0.942383f, 0.942383f, 0.942383f, 0.000000f, 0.000007f, 0.000144f, 0.000427f,
+ 0.000443f, 0.000566f, 0.000589f, 0.000615f, 0.000725f, 0.000731f, 0.000896f, 0.000953f, 0.001062f, 0.001167f, 0.001344f, 0.001345f,
+ 0.001636f, 0.001774f, 0.001893f, 0.002069f, 0.002350f, 0.002457f, 0.002678f, 0.002743f, 0.003105f, 0.003513f, 0.003830f, 0.004227f,
+ 0.004589f, 0.005047f, 0.005669f, 0.006176f, 0.007153f, 0.007896f, 0.008911f, 0.010231f, 0.011818f, 0.013618f, 0.015465f, 0.018188f,
+ 0.021576f, 0.025452f, 0.030533f, 0.037048f, 0.045685f, 0.056915f, 0.071533f, 0.091675f, 0.118958f, 0.156006f, 0.205444f, 0.270020f,
+ 0.349609f, 0.439941f, 0.533691f, 0.625977f, 0.708984f, 0.778320f, 0.931641f, 0.936035f, 0.936523f, 0.937012f, 0.937012f, 0.937012f,
+ 0.000000f, 0.000000f, 0.000137f, 0.000262f, 0.000432f, 0.000437f, 0.000444f, 0.000590f, 0.000558f, 0.000606f, 0.000817f, 0.000877f,
+ 0.000909f, 0.000951f, 0.001191f, 0.001244f, 0.001373f, 0.001506f, 0.001702f, 0.001690f, 0.001955f, 0.001940f, 0.002283f, 0.002340f,
+ 0.002571f, 0.002871f, 0.003265f, 0.003475f, 0.003910f, 0.004181f, 0.004608f, 0.005112f, 0.005833f, 0.006416f, 0.007145f, 0.008209f,
+ 0.009636f, 0.010750f, 0.012642f, 0.014481f, 0.017197f, 0.020203f, 0.024353f, 0.029694f, 0.036041f, 0.045105f, 0.056702f, 0.072388f,
+ 0.094482f, 0.124329f, 0.166504f, 0.223022f, 0.295898f, 0.384766f, 0.482910f, 0.582031f, 0.675293f, 0.754883f, 0.926270f, 0.929688f,
+ 0.930664f, 0.930664f, 0.931152f, 0.930664f, 0.000000f, 0.000000f, 0.000000f, 0.000232f, 0.000357f, 0.000411f, 0.000513f, 0.000527f,
+ 0.000490f, 0.000504f, 0.000653f, 0.000750f, 0.000780f, 0.000976f, 0.000942f, 0.000967f, 0.001180f, 0.001252f, 0.001385f, 0.001425f,
+ 0.001559f, 0.001801f, 0.001886f, 0.002144f, 0.002111f, 0.002354f, 0.002645f, 0.002827f, 0.003187f, 0.003414f, 0.003792f, 0.004360f,
+ 0.004662f, 0.005146f, 0.005875f, 0.006783f, 0.007610f, 0.008797f, 0.010033f, 0.011566f, 0.013565f, 0.016006f, 0.019165f, 0.023163f,
+ 0.028320f, 0.035400f, 0.044647f, 0.057129f, 0.074402f, 0.098572f, 0.132812f, 0.180542f, 0.245728f, 0.330078f, 0.428955f, 0.535156f,
+ 0.638184f, 0.728516f, 0.919434f, 0.922852f, 0.923828f, 0.923828f, 0.923828f, 0.924316f, 0.000000f, 0.000000f, 0.000000f, 0.000114f,
+ 0.000248f, 0.000359f, 0.000386f, 0.000342f, 0.000465f, 0.000461f, 0.000490f, 0.000609f, 0.000638f, 0.000694f, 0.000807f, 0.000923f,
+ 0.000961f, 0.001074f, 0.001123f, 0.001268f, 0.001311f, 0.001494f, 0.001537f, 0.001754f, 0.001899f, 0.001917f, 0.002199f, 0.002241f,
+ 0.002583f, 0.002769f, 0.003101f, 0.003441f, 0.003775f, 0.004200f, 0.004787f, 0.005272f, 0.006062f, 0.006702f, 0.007732f, 0.009102f,
+ 0.010582f, 0.012466f, 0.014984f, 0.017990f, 0.021957f, 0.027222f, 0.034332f, 0.044128f, 0.057434f, 0.076538f, 0.104126f, 0.143799f,
+ 0.199829f, 0.275879f, 0.373047f, 0.482422f, 0.594727f, 0.698730f, 0.910645f, 0.914551f, 0.916504f, 0.916016f, 0.916504f, 0.915527f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000221f, 0.000222f, 0.000392f, 0.000402f, 0.000396f, 0.000434f, 0.000476f, 0.000548f,
+ 0.000536f, 0.000644f, 0.000642f, 0.000793f, 0.000795f, 0.000912f, 0.000953f, 0.000989f, 0.001164f, 0.001197f, 0.001285f, 0.001480f,
+ 0.001511f, 0.001674f, 0.001703f, 0.001901f, 0.002075f, 0.002340f, 0.002499f, 0.002800f, 0.003019f, 0.003296f, 0.003695f, 0.004093f,
+ 0.004780f, 0.005260f, 0.006207f, 0.006939f, 0.008034f, 0.009598f, 0.011353f, 0.013702f, 0.016678f, 0.020874f, 0.026062f, 0.033539f,
+ 0.044006f, 0.058746f, 0.080139f, 0.111877f, 0.158447f, 0.226318f, 0.317627f, 0.428711f, 0.548828f, 0.665039f, 0.901367f, 0.907227f,
+ 0.907715f, 0.908203f, 0.908203f, 0.907227f, 0.000000f, 0.000000f, 0.000122f, 0.000173f, 0.000191f, 0.000215f, 0.000224f, 0.000261f,
+ 0.000340f, 0.000374f, 0.000380f, 0.000496f, 0.000416f, 0.000535f, 0.000592f, 0.000622f, 0.000701f, 0.000772f, 0.000742f, 0.000774f,
+ 0.000990f, 0.000945f, 0.001088f, 0.001105f, 0.001348f, 0.001231f, 0.001460f, 0.001620f, 0.001758f, 0.001941f, 0.002008f, 0.002092f,
+ 0.002430f, 0.002615f, 0.002886f, 0.003208f, 0.003519f, 0.004112f, 0.004704f, 0.005371f, 0.006149f, 0.007351f, 0.008659f, 0.010201f,
+ 0.012550f, 0.015549f, 0.019577f, 0.025436f, 0.032928f, 0.044220f, 0.060608f, 0.084961f, 0.123474f, 0.180664f, 0.263184f, 0.372314f,
+ 0.498291f, 0.626465f, 0.892578f, 0.895996f, 0.896973f, 0.896973f, 0.897949f, 0.897949f, 0.000000f, 0.000000f, 0.000121f, 0.000121f,
+ 0.000120f, 0.000192f, 0.000201f, 0.000222f, 0.000222f, 0.000276f, 0.000295f, 0.000344f, 0.000433f, 0.000470f, 0.000485f, 0.000549f,
+ 0.000555f, 0.000558f, 0.000566f, 0.000639f, 0.000678f, 0.000757f, 0.000840f, 0.000905f, 0.000999f, 0.000946f, 0.001018f, 0.001309f,
+ 0.001402f, 0.001417f, 0.001624f, 0.001692f, 0.001869f, 0.002003f, 0.002184f, 0.002602f, 0.002851f, 0.003157f, 0.003595f, 0.004063f,
+ 0.004734f, 0.005398f, 0.006275f, 0.007542f, 0.009148f, 0.011383f, 0.014275f, 0.018250f, 0.024063f, 0.032135f, 0.044922f, 0.063721f,
+ 0.093811f, 0.139648f, 0.211914f, 0.314697f, 0.444092f, 0.584961f, 0.879883f, 0.884766f, 0.885254f, 0.885742f, 0.886230f, 0.885742f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000120f, 0.000154f, 0.000150f, 0.000160f, 0.000202f, 0.000217f, 0.000308f, 0.000319f,
+ 0.000278f, 0.000392f, 0.000362f, 0.000432f, 0.000416f, 0.000448f, 0.000495f, 0.000526f, 0.000710f, 0.000754f, 0.000657f, 0.000755f,
+ 0.000806f, 0.000919f, 0.000815f, 0.001080f, 0.001152f, 0.001207f, 0.001218f, 0.001373f, 0.001320f, 0.001685f, 0.001764f, 0.001819f,
+ 0.002068f, 0.002380f, 0.002668f, 0.003033f, 0.003584f, 0.003979f, 0.004829f, 0.005402f, 0.006630f, 0.008080f, 0.010254f, 0.013069f,
+ 0.017044f, 0.023422f, 0.031647f, 0.046417f, 0.068604f, 0.104919f, 0.165161f, 0.258789f, 0.387207f, 0.537598f, 0.867188f, 0.871582f,
+ 0.872559f, 0.872559f, 0.872559f, 0.873047f, 0.000000f, 0.000121f, 0.000120f, 0.000120f, 0.000119f, 0.000118f, 0.000122f, 0.000108f,
+ 0.000143f, 0.000149f, 0.000184f, 0.000194f, 0.000189f, 0.000210f, 0.000321f, 0.000282f, 0.000376f, 0.000420f, 0.000533f, 0.000437f,
+ 0.000467f, 0.000477f, 0.000587f, 0.000519f, 0.000673f, 0.000662f, 0.000679f, 0.000845f, 0.000881f, 0.000863f, 0.001016f, 0.001093f,
+ 0.001176f, 0.001191f, 0.001336f, 0.001561f, 0.001573f, 0.001754f, 0.001919f, 0.002264f, 0.002596f, 0.002911f, 0.003372f, 0.003870f,
+ 0.004723f, 0.005733f, 0.007092f, 0.008965f, 0.011650f, 0.015701f, 0.022339f, 0.032043f, 0.048370f, 0.076050f, 0.124084f, 0.204834f,
+ 0.328369f, 0.485596f, 0.852539f, 0.856934f, 0.858887f, 0.858887f, 0.858887f, 0.858398f, 0.000000f, 0.000121f, 0.000120f, 0.000119f,
+ 0.000118f, 0.000117f, 0.000116f, 0.000114f, 0.000105f, 0.000110f, 0.000165f, 0.000133f, 0.000157f, 0.000240f, 0.000256f, 0.000257f,
+ 0.000249f, 0.000303f, 0.000342f, 0.000346f, 0.000485f, 0.000510f, 0.000398f, 0.000493f, 0.000492f, 0.000524f, 0.000590f, 0.000585f,
+ 0.000601f, 0.000740f, 0.000647f, 0.000871f, 0.000834f, 0.000969f, 0.001020f, 0.001190f, 0.001244f, 0.001432f, 0.001393f, 0.001702f,
+ 0.001912f, 0.002171f, 0.002445f, 0.002958f, 0.003330f, 0.004025f, 0.004860f, 0.006161f, 0.007896f, 0.010742f, 0.014671f, 0.021378f,
+ 0.032928f, 0.052612f, 0.089050f, 0.155884f, 0.268555f, 0.430664f, 0.836426f, 0.841309f, 0.841309f, 0.842285f, 0.842773f, 0.842285f,
+ 0.000000f, 0.000000f, 0.000119f, 0.000117f, 0.000116f, 0.000115f, 0.000114f, 0.000114f, 0.000111f, 0.000103f, 0.000097f, 0.000118f,
+ 0.000115f, 0.000130f, 0.000176f, 0.000130f, 0.000223f, 0.000235f, 0.000244f, 0.000252f, 0.000274f, 0.000389f, 0.000309f, 0.000430f,
+ 0.000340f, 0.000399f, 0.000408f, 0.000459f, 0.000514f, 0.000501f, 0.000519f, 0.000657f, 0.000588f, 0.000775f, 0.000813f, 0.000789f,
+ 0.000904f, 0.001076f, 0.001027f, 0.001170f, 0.001342f, 0.001425f, 0.001662f, 0.002005f, 0.002298f, 0.002699f, 0.003227f, 0.003990f,
+ 0.005062f, 0.006855f, 0.009415f, 0.013504f, 0.020905f, 0.034424f, 0.060333f, 0.112000f, 0.210693f, 0.371094f, 0.816406f, 0.822754f,
+ 0.822754f, 0.823242f, 0.823242f, 0.823730f, 0.000000f, 0.000119f, 0.000117f, 0.000116f, 0.000114f, 0.000113f, 0.000112f, 0.000111f,
+ 0.000110f, 0.000109f, 0.000102f, 0.000095f, 0.000090f, 0.000084f, 0.000093f, 0.000103f, 0.000118f, 0.000165f, 0.000162f, 0.000190f,
+ 0.000204f, 0.000218f, 0.000223f, 0.000237f, 0.000256f, 0.000272f, 0.000344f, 0.000365f, 0.000365f, 0.000396f, 0.000386f, 0.000412f,
+ 0.000530f, 0.000466f, 0.000492f, 0.000615f, 0.000611f, 0.000748f, 0.000712f, 0.000795f, 0.000908f, 0.000971f, 0.001106f, 0.001353f,
+ 0.001572f, 0.001822f, 0.002251f, 0.002676f, 0.003290f, 0.004349f, 0.005951f, 0.008316f, 0.012543f, 0.021149f, 0.038025f, 0.075500f,
+ 0.156006f, 0.308838f, 0.794922f, 0.800293f, 0.800781f, 0.801270f, 0.801758f, 0.802246f, 0.000121f, 0.000116f, 0.000114f, 0.000113f,
+ 0.000111f, 0.000109f, 0.000108f, 0.000107f, 0.000106f, 0.000104f, 0.000104f, 0.000100f, 0.000094f, 0.000088f, 0.000083f, 0.000078f,
+ 0.000074f, 0.000105f, 0.000078f, 0.000122f, 0.000113f, 0.000153f, 0.000174f, 0.000175f, 0.000207f, 0.000216f, 0.000225f, 0.000215f,
+ 0.000262f, 0.000308f, 0.000297f, 0.000287f, 0.000307f, 0.000342f, 0.000363f, 0.000411f, 0.000401f, 0.000453f, 0.000522f, 0.000555f,
+ 0.000680f, 0.000701f, 0.000751f, 0.000873f, 0.000966f, 0.001181f, 0.001445f, 0.001666f, 0.002077f, 0.002512f, 0.003359f, 0.004856f,
+ 0.007347f, 0.012001f, 0.022049f, 0.046417f, 0.107117f, 0.245361f, 0.770508f, 0.775879f, 0.776367f, 0.776855f, 0.777344f, 0.777832f,
+ 0.000000f, 0.000113f, 0.000108f, 0.000107f, 0.000104f, 0.000103f, 0.000101f, 0.000100f, 0.000099f, 0.000098f, 0.000097f, 0.000096f,
+ 0.000095f, 0.000091f, 0.000086f, 0.000081f, 0.000077f, 0.000073f, 0.000069f, 0.000079f, 0.000084f, 0.000091f, 0.000074f, 0.000100f,
+ 0.000117f, 0.000140f, 0.000144f, 0.000166f, 0.000174f, 0.000178f, 0.000225f, 0.000197f, 0.000234f, 0.000239f, 0.000273f, 0.000289f,
+ 0.000283f, 0.000293f, 0.000338f, 0.000386f, 0.000386f, 0.000432f, 0.000459f, 0.000525f, 0.000625f, 0.000691f, 0.000800f, 0.001004f,
+ 0.001227f, 0.001479f, 0.001984f, 0.002745f, 0.003983f, 0.006413f, 0.011642f, 0.025269f, 0.066040f, 0.182495f, 0.743164f, 0.748535f,
+ 0.749023f, 0.749512f, 0.750000f, 0.749512f, 0.000000f, 0.000102f, 0.000101f, 0.000098f, 0.000094f, 0.000093f, 0.000092f, 0.000090f,
+ 0.000089f, 0.000088f, 0.000087f, 0.000086f, 0.000085f, 0.000084f, 0.000085f, 0.000082f, 0.000078f, 0.000074f, 0.000070f, 0.000066f,
+ 0.000063f, 0.000060f, 0.000057f, 0.000056f, 0.000061f, 0.000060f, 0.000073f, 0.000087f, 0.000100f, 0.000105f, 0.000124f, 0.000136f,
+ 0.000140f, 0.000140f, 0.000159f, 0.000179f, 0.000186f, 0.000205f, 0.000214f, 0.000229f, 0.000248f, 0.000267f, 0.000299f, 0.000344f,
+ 0.000367f, 0.000422f, 0.000496f, 0.000557f, 0.000639f, 0.000837f, 0.001037f, 0.001419f, 0.002081f, 0.003202f, 0.005730f, 0.012199f,
+ 0.034943f, 0.122925f, 0.711426f, 0.716797f, 0.718750f, 0.718262f, 0.718262f, 0.718750f, 0.000094f, 0.000079f, 0.000078f, 0.000074f,
+ 0.000074f, 0.000075f, 0.000074f, 0.000073f, 0.000071f, 0.000072f, 0.000070f, 0.000071f, 0.000071f, 0.000070f, 0.000070f, 0.000069f,
+ 0.000070f, 0.000069f, 0.000068f, 0.000065f, 0.000062f, 0.000059f, 0.000056f, 0.000053f, 0.000050f, 0.000048f, 0.000045f, 0.000044f,
+ 0.000041f, 0.000050f, 0.000050f, 0.000061f, 0.000068f, 0.000085f, 0.000091f, 0.000101f, 0.000102f, 0.000107f, 0.000119f, 0.000129f,
+ 0.000144f, 0.000151f, 0.000160f, 0.000184f, 0.000212f, 0.000213f, 0.000235f, 0.000294f, 0.000315f, 0.000392f, 0.000505f, 0.000637f,
+ 0.000880f, 0.001400f, 0.002462f, 0.005333f, 0.015160f, 0.070312f, 0.678223f, 0.683105f, 0.684082f, 0.684570f, 0.684570f, 0.684570f,
+ 0.000000f, 0.000000f, 0.000023f, 0.000034f, 0.000032f, 0.000038f, 0.000037f, 0.000044f, 0.000043f, 0.000047f, 0.000045f, 0.000047f,
+ 0.000049f, 0.000049f, 0.000049f, 0.000048f, 0.000051f, 0.000050f, 0.000051f, 0.000051f, 0.000052f, 0.000052f, 0.000052f, 0.000049f,
+ 0.000047f, 0.000045f, 0.000042f, 0.000040f, 0.000038f, 0.000036f, 0.000035f, 0.000033f, 0.000031f, 0.000029f, 0.000038f, 0.000037f,
+ 0.000042f, 0.000051f, 0.000055f, 0.000067f, 0.000074f, 0.000073f, 0.000083f, 0.000093f, 0.000088f, 0.000102f, 0.000122f, 0.000122f,
+ 0.000142f, 0.000169f, 0.000206f, 0.000265f, 0.000355f, 0.000531f, 0.000897f, 0.001822f, 0.005493f, 0.030579f, 0.640137f, 0.644531f,
+ 0.647461f, 0.647949f, 0.647461f, 0.648438f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000001f, 0.000000f, 0.000008f, 0.000012f, 0.000014f, 0.000014f, 0.000019f, 0.000021f, 0.000022f, 0.000024f, 0.000026f, 0.000027f,
+ 0.000027f, 0.000028f, 0.000029f, 0.000031f, 0.000031f, 0.000032f, 0.000032f, 0.000033f, 0.000033f, 0.000032f, 0.000030f, 0.000029f,
+ 0.000027f, 0.000026f, 0.000024f, 0.000023f, 0.000022f, 0.000021f, 0.000019f, 0.000018f, 0.000021f, 0.000024f, 0.000028f, 0.000033f,
+ 0.000043f, 0.000041f, 0.000046f, 0.000053f, 0.000050f, 0.000059f, 0.000068f, 0.000094f, 0.000096f, 0.000140f, 0.000239f, 0.000447f,
+ 0.001340f, 0.009087f, 0.600098f, 0.605957f, 0.606934f, 0.606934f, 0.607422f, 0.606934f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000002f, 0.000004f, 0.000006f, 0.000006f,
+ 0.000009f, 0.000010f, 0.000011f, 0.000012f, 0.000013f, 0.000014f, 0.000015f, 0.000016f, 0.000017f, 0.000016f, 0.000015f, 0.000014f,
+ 0.000013f, 0.000012f, 0.000012f, 0.000011f, 0.000010f, 0.000009f, 0.000008f, 0.000012f, 0.000014f, 0.000018f, 0.000017f, 0.000022f,
+ 0.000022f, 0.000026f, 0.000040f, 0.000060f, 0.000157f, 0.001244f, 0.557129f, 0.563477f, 0.563477f, 0.564941f, 0.564941f, 0.564941f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000002f, 0.000003f,
+ 0.000003f, 0.000004f, 0.000003f, 0.000003f, 0.000003f, 0.000002f, 0.000003f, 0.000003f, 0.000003f, 0.000012f, 0.513672f, 0.520020f,
+ 0.520020f, 0.520508f, 0.521484f, 0.521484f,
+ },
+ {
+ 0.103943f, 0.284912f, 0.422119f, 0.523438f, 0.600586f, 0.659668f, 0.705078f, 0.741699f, 0.771484f, 0.795898f, 0.816895f, 0.834961f,
+ 0.850586f, 0.862793f, 0.874512f, 0.884277f, 0.894043f, 0.901855f, 0.909180f, 0.915039f, 0.921387f, 0.926270f, 0.932129f, 0.936035f,
+ 0.940430f, 0.944336f, 0.948242f, 0.951660f, 0.954590f, 0.957520f, 0.959961f, 0.962891f, 0.965332f, 0.967285f, 0.969727f, 0.971680f,
+ 0.973145f, 0.975586f, 0.977051f, 0.979004f, 0.979980f, 0.981934f, 0.983887f, 0.984375f, 0.985840f, 0.986816f, 0.988770f, 0.989258f,
+ 0.990723f, 0.992188f, 0.992676f, 0.993652f, 0.994629f, 0.995605f, 0.996582f, 0.997559f, 0.998535f, 0.999023f, 0.999512f, 0.999023f,
+ 0.998535f, 0.998047f, 0.997559f, 0.997070f, 0.046997f, 0.153564f, 0.264160f, 0.369385f, 0.460205f, 0.538574f, 0.602051f, 0.654785f,
+ 0.697754f, 0.733398f, 0.762695f, 0.787598f, 0.809082f, 0.827637f, 0.843262f, 0.856934f, 0.868652f, 0.880859f, 0.889648f, 0.898438f,
+ 0.906738f, 0.912598f, 0.918945f, 0.924805f, 0.929688f, 0.935059f, 0.938965f, 0.943359f, 0.947266f, 0.951172f, 0.954102f, 0.956543f,
+ 0.959961f, 0.961914f, 0.964844f, 0.966797f, 0.969727f, 0.971191f, 0.974121f, 0.975098f, 0.977051f, 0.979492f, 0.980469f, 0.981934f,
+ 0.983887f, 0.985352f, 0.985840f, 0.987305f, 0.989258f, 0.990234f, 0.991211f, 0.992188f, 0.993164f, 0.994141f, 0.995117f, 0.996094f,
+ 0.996582f, 0.997559f, 0.999023f, 0.998535f, 0.998047f, 0.997559f, 0.997070f, 0.997070f, 0.025940f, 0.088501f, 0.162964f, 0.246094f,
+ 0.331055f, 0.411865f, 0.486328f, 0.550293f, 0.606934f, 0.655762f, 0.695312f, 0.729980f, 0.758301f, 0.783691f, 0.804199f, 0.823730f,
+ 0.838867f, 0.853027f, 0.865723f, 0.877441f, 0.887207f, 0.895996f, 0.904785f, 0.911133f, 0.916992f, 0.923828f, 0.928223f, 0.933594f,
+ 0.937988f, 0.942871f, 0.946777f, 0.950195f, 0.953613f, 0.956543f, 0.959473f, 0.962402f, 0.964844f, 0.967285f, 0.970215f, 0.971680f,
+ 0.973633f, 0.976074f, 0.977539f, 0.979492f, 0.980469f, 0.982422f, 0.984863f, 0.985352f, 0.986816f, 0.987793f, 0.989258f, 0.990234f,
+ 0.991699f, 0.992676f, 0.994141f, 0.995117f, 0.995605f, 0.996582f, 0.998535f, 0.998047f, 0.998047f, 0.997559f, 0.997070f, 0.996582f,
+ 0.016159f, 0.055176f, 0.104126f, 0.162720f, 0.229126f, 0.300781f, 0.372803f, 0.442871f, 0.506836f, 0.563477f, 0.613281f, 0.657715f,
+ 0.696289f, 0.729004f, 0.757324f, 0.782227f, 0.802734f, 0.821289f, 0.837402f, 0.852539f, 0.865234f, 0.875977f, 0.885742f, 0.895508f,
+ 0.903320f, 0.910156f, 0.917480f, 0.922852f, 0.928711f, 0.934082f, 0.937988f, 0.942871f, 0.947266f, 0.950195f, 0.954102f, 0.957031f,
+ 0.959473f, 0.962402f, 0.964844f, 0.968262f, 0.969727f, 0.972168f, 0.974121f, 0.976562f, 0.978516f, 0.979980f, 0.981934f, 0.982910f,
+ 0.983887f, 0.985840f, 0.986816f, 0.988770f, 0.989746f, 0.991211f, 0.992188f, 0.993652f, 0.994141f, 0.995117f, 0.998047f, 0.997559f,
+ 0.997559f, 0.997070f, 0.996582f, 0.996582f, 0.010841f, 0.036865f, 0.070007f, 0.110962f, 0.159546f, 0.214355f, 0.276367f, 0.340576f,
+ 0.405029f, 0.465820f, 0.523926f, 0.576172f, 0.623535f, 0.664062f, 0.699707f, 0.731445f, 0.758301f, 0.782227f, 0.803223f, 0.821289f,
+ 0.837891f, 0.852051f, 0.864258f, 0.875488f, 0.884766f, 0.894531f, 0.903320f, 0.910156f, 0.916992f, 0.923828f, 0.928223f, 0.933594f,
+ 0.938477f, 0.943359f, 0.947266f, 0.950684f, 0.954102f, 0.957520f, 0.960449f, 0.962891f, 0.965820f, 0.968750f, 0.971191f, 0.973145f,
+ 0.975586f, 0.977539f, 0.978516f, 0.980957f, 0.982422f, 0.984375f, 0.985352f, 0.987305f, 0.988281f, 0.989746f, 0.990723f, 0.992188f,
+ 0.993164f, 0.994141f, 0.997559f, 0.997559f, 0.997070f, 0.996582f, 0.996582f, 0.996094f, 0.007637f, 0.026566f, 0.049896f, 0.078247f,
+ 0.113403f, 0.154663f, 0.202637f, 0.255371f, 0.313232f, 0.372314f, 0.431152f, 0.488037f, 0.540039f, 0.588867f, 0.633301f, 0.670898f,
+ 0.704102f, 0.734375f, 0.761230f, 0.785156f, 0.804688f, 0.822754f, 0.838867f, 0.852539f, 0.864746f, 0.876953f, 0.886230f, 0.895996f,
+ 0.903320f, 0.910645f, 0.917480f, 0.923828f, 0.929199f, 0.935059f, 0.938965f, 0.943359f, 0.948730f, 0.952148f, 0.954590f, 0.958496f,
+ 0.961426f, 0.964355f, 0.966797f, 0.969238f, 0.971680f, 0.974121f, 0.976074f, 0.978027f, 0.979980f, 0.981445f, 0.982910f, 0.984863f,
+ 0.986816f, 0.987793f, 0.989258f, 0.990723f, 0.991699f, 0.993164f, 0.996582f, 0.996582f, 0.996094f, 0.996094f, 0.996094f, 0.995605f,
+ 0.005714f, 0.019485f, 0.036194f, 0.056976f, 0.082336f, 0.113342f, 0.149048f, 0.191284f, 0.238770f, 0.290039f, 0.344727f, 0.400391f,
+ 0.454590f, 0.507324f, 0.557129f, 0.602539f, 0.642578f, 0.679199f, 0.711426f, 0.740234f, 0.766602f, 0.788574f, 0.807617f, 0.825195f,
+ 0.841309f, 0.854980f, 0.867676f, 0.877930f, 0.888184f, 0.896484f, 0.904785f, 0.912109f, 0.918945f, 0.925293f, 0.930176f, 0.935547f,
+ 0.940918f, 0.944336f, 0.948730f, 0.952637f, 0.956055f, 0.959473f, 0.962402f, 0.965332f, 0.967773f, 0.970703f, 0.972656f, 0.975098f,
+ 0.977051f, 0.979004f, 0.981445f, 0.982910f, 0.984375f, 0.985840f, 0.987793f, 0.989258f, 0.990234f, 0.991211f, 0.996094f, 0.996094f,
+ 0.996094f, 0.996094f, 0.995605f, 0.995117f, 0.004505f, 0.014908f, 0.027634f, 0.043274f, 0.061707f, 0.084045f, 0.111694f, 0.143921f,
+ 0.180542f, 0.223877f, 0.270996f, 0.320557f, 0.373291f, 0.425781f, 0.478027f, 0.526855f, 0.573242f, 0.615723f, 0.654785f, 0.688965f,
+ 0.720215f, 0.747559f, 0.771973f, 0.793457f, 0.812500f, 0.829102f, 0.844238f, 0.858398f, 0.870117f, 0.881348f, 0.890625f, 0.898926f,
+ 0.906738f, 0.914062f, 0.921387f, 0.926758f, 0.932617f, 0.937500f, 0.942383f, 0.945801f, 0.950684f, 0.954102f, 0.958008f, 0.960938f,
+ 0.964355f, 0.966797f, 0.969727f, 0.972656f, 0.974609f, 0.976562f, 0.978516f, 0.980469f, 0.981934f, 0.984375f, 0.985840f, 0.987793f,
+ 0.988281f, 0.990234f, 0.995605f, 0.995605f, 0.995605f, 0.995605f, 0.995117f, 0.994629f, 0.003691f, 0.011925f, 0.021622f, 0.033203f,
+ 0.047241f, 0.065247f, 0.085266f, 0.109558f, 0.138550f, 0.172363f, 0.210205f, 0.253418f, 0.299805f, 0.348877f, 0.400146f, 0.450195f,
+ 0.499512f, 0.546387f, 0.589844f, 0.629883f, 0.666016f, 0.700195f, 0.728516f, 0.755371f, 0.778320f, 0.798828f, 0.817383f, 0.833984f,
+ 0.848145f, 0.861816f, 0.874023f, 0.883789f, 0.893555f, 0.902344f, 0.910645f, 0.916992f, 0.922852f, 0.929688f, 0.934570f, 0.938965f,
+ 0.944336f, 0.948730f, 0.951660f, 0.956543f, 0.959473f, 0.962891f, 0.965820f, 0.968262f, 0.970703f, 0.974121f, 0.976074f, 0.978516f,
+ 0.979980f, 0.981934f, 0.983887f, 0.985840f, 0.987305f, 0.988281f, 0.994629f, 0.995117f, 0.995117f, 0.994629f, 0.994629f, 0.994141f,
+ 0.002726f, 0.009560f, 0.017136f, 0.026871f, 0.037415f, 0.050079f, 0.066406f, 0.084717f, 0.107849f, 0.133423f, 0.164062f, 0.198853f,
+ 0.238281f, 0.281250f, 0.327148f, 0.375977f, 0.424805f, 0.473877f, 0.521973f, 0.564941f, 0.606934f, 0.644531f, 0.679199f, 0.710449f,
+ 0.738770f, 0.764160f, 0.786133f, 0.805664f, 0.824219f, 0.838867f, 0.853516f, 0.866211f, 0.876953f, 0.887695f, 0.896484f, 0.905762f,
+ 0.912598f, 0.919922f, 0.925781f, 0.932129f, 0.937500f, 0.942383f, 0.946777f, 0.951660f, 0.955078f, 0.958984f, 0.961426f, 0.965332f,
+ 0.967773f, 0.970703f, 0.972656f, 0.975586f, 0.978027f, 0.979492f, 0.981934f, 0.983887f, 0.984863f, 0.986816f, 0.994629f, 0.994629f,
+ 0.994629f, 0.994141f, 0.994141f, 0.993652f, 0.002487f, 0.007553f, 0.013863f, 0.021439f, 0.029755f, 0.040771f, 0.052643f, 0.067444f,
+ 0.084473f, 0.104980f, 0.128784f, 0.157227f, 0.189087f, 0.224609f, 0.265381f, 0.308838f, 0.354004f, 0.401611f, 0.450439f, 0.496582f,
+ 0.541992f, 0.583984f, 0.623047f, 0.660645f, 0.693359f, 0.722168f, 0.749512f, 0.772949f, 0.793457f, 0.812988f, 0.830078f, 0.845215f,
+ 0.859375f, 0.871094f, 0.882812f, 0.892090f, 0.900879f, 0.908691f, 0.916504f, 0.922852f, 0.930176f, 0.935547f, 0.940430f, 0.944824f,
+ 0.949219f, 0.952637f, 0.956543f, 0.960449f, 0.963867f, 0.967285f, 0.970215f, 0.972656f, 0.974609f, 0.977539f, 0.979492f, 0.981934f,
+ 0.983887f, 0.985352f, 0.993652f, 0.994141f, 0.994141f, 0.993652f, 0.993652f, 0.993164f, 0.001893f, 0.006641f, 0.011551f, 0.017319f,
+ 0.024612f, 0.032959f, 0.042023f, 0.053772f, 0.067444f, 0.083435f, 0.102356f, 0.123840f, 0.150024f, 0.179688f, 0.213501f, 0.250488f,
+ 0.291992f, 0.335938f, 0.381592f, 0.427246f, 0.473877f, 0.518555f, 0.563477f, 0.603027f, 0.640625f, 0.676270f, 0.707031f, 0.735352f,
+ 0.760254f, 0.782715f, 0.802734f, 0.821777f, 0.838379f, 0.851562f, 0.865234f, 0.876953f, 0.886719f, 0.896484f, 0.905273f, 0.913086f,
+ 0.921387f, 0.927734f, 0.933105f, 0.938477f, 0.942871f, 0.948242f, 0.951660f, 0.955566f, 0.959961f, 0.963867f, 0.966309f, 0.969238f,
+ 0.972168f, 0.975098f, 0.977539f, 0.979492f, 0.981934f, 0.983887f, 0.993164f, 0.993652f, 0.993164f, 0.993164f, 0.993164f, 0.992676f,
+ 0.001740f, 0.005634f, 0.009407f, 0.014992f, 0.020157f, 0.026840f, 0.035156f, 0.043793f, 0.054718f, 0.067505f, 0.082092f, 0.099731f,
+ 0.120239f, 0.143921f, 0.171265f, 0.202393f, 0.237915f, 0.276367f, 0.318848f, 0.362793f, 0.407959f, 0.454346f, 0.499023f, 0.542480f,
+ 0.583984f, 0.623535f, 0.659180f, 0.691895f, 0.721680f, 0.748047f, 0.772461f, 0.793457f, 0.812988f, 0.829102f, 0.845215f, 0.859863f,
+ 0.872559f, 0.883789f, 0.893555f, 0.902344f, 0.911133f, 0.918457f, 0.924805f, 0.930664f, 0.937012f, 0.941895f, 0.947266f, 0.951172f,
+ 0.956055f, 0.959473f, 0.962402f, 0.966309f, 0.968750f, 0.972168f, 0.974609f, 0.977051f, 0.979492f, 0.981934f, 0.992188f, 0.992676f,
+ 0.992676f, 0.992676f, 0.992188f, 0.992676f, 0.001502f, 0.004482f, 0.008278f, 0.012276f, 0.016800f, 0.022644f, 0.029129f, 0.036194f,
+ 0.045197f, 0.055298f, 0.067017f, 0.080750f, 0.096863f, 0.115906f, 0.138184f, 0.163940f, 0.192993f, 0.225952f, 0.262695f, 0.302490f,
+ 0.344971f, 0.389648f, 0.434814f, 0.480469f, 0.523926f, 0.566406f, 0.605957f, 0.643066f, 0.677246f, 0.708496f, 0.736816f, 0.761719f,
+ 0.784668f, 0.804688f, 0.823242f, 0.840332f, 0.854004f, 0.867188f, 0.878906f, 0.890137f, 0.898438f, 0.907715f, 0.916016f, 0.922852f,
+ 0.930176f, 0.935547f, 0.940918f, 0.946289f, 0.950684f, 0.955078f, 0.959473f, 0.961914f, 0.966309f, 0.969238f, 0.972168f, 0.974609f,
+ 0.977539f, 0.979492f, 0.991211f, 0.992188f, 0.991699f, 0.992188f, 0.991699f, 0.991211f, 0.001411f, 0.003645f, 0.007160f, 0.010414f,
+ 0.014397f, 0.018677f, 0.024338f, 0.030426f, 0.037384f, 0.045654f, 0.055054f, 0.066101f, 0.079529f, 0.094543f, 0.112793f, 0.133057f,
+ 0.157227f, 0.183960f, 0.215210f, 0.250488f, 0.288086f, 0.329102f, 0.372314f, 0.416992f, 0.461914f, 0.505859f, 0.549316f, 0.589355f,
+ 0.627930f, 0.664062f, 0.695801f, 0.725098f, 0.752441f, 0.775879f, 0.797363f, 0.815918f, 0.833984f, 0.849121f, 0.863281f, 0.875488f,
+ 0.886230f, 0.895996f, 0.904785f, 0.914062f, 0.920898f, 0.928223f, 0.935059f, 0.940918f, 0.945312f, 0.950195f, 0.954102f, 0.958984f,
+ 0.962402f, 0.966309f, 0.969238f, 0.972656f, 0.974609f, 0.977539f, 0.990234f, 0.992188f, 0.991211f, 0.991211f, 0.990723f, 0.991211f,
+ 0.000926f, 0.003523f, 0.006207f, 0.008949f, 0.012718f, 0.016312f, 0.020447f, 0.025467f, 0.031128f, 0.037994f, 0.045532f, 0.054901f,
+ 0.065430f, 0.077576f, 0.091797f, 0.109131f, 0.128418f, 0.151245f, 0.176636f, 0.206055f, 0.238525f, 0.275146f, 0.314697f, 0.357178f,
+ 0.400391f, 0.445312f, 0.489746f, 0.531738f, 0.574219f, 0.613281f, 0.650391f, 0.683594f, 0.714355f, 0.742188f, 0.768066f, 0.790039f,
+ 0.810059f, 0.828125f, 0.843262f, 0.858398f, 0.871582f, 0.883789f, 0.893555f, 0.903809f, 0.912598f, 0.919434f, 0.926758f, 0.933594f,
+ 0.939453f, 0.944336f, 0.950195f, 0.954590f, 0.958008f, 0.962402f, 0.966309f, 0.969727f, 0.972656f, 0.975586f, 0.989746f, 0.990723f,
+ 0.990723f, 0.990234f, 0.990234f, 0.990234f, 0.001140f, 0.003021f, 0.005527f, 0.008102f, 0.010445f, 0.013977f, 0.017349f, 0.021637f,
+ 0.026535f, 0.031677f, 0.038330f, 0.045776f, 0.054382f, 0.064392f, 0.076233f, 0.089844f, 0.105713f, 0.123840f, 0.145020f, 0.169556f,
+ 0.196899f, 0.229248f, 0.263672f, 0.302002f, 0.342529f, 0.385986f, 0.429932f, 0.473877f, 0.517578f, 0.560547f, 0.600586f, 0.638184f,
+ 0.672852f, 0.704590f, 0.733398f, 0.759277f, 0.782715f, 0.803711f, 0.823242f, 0.840820f, 0.854980f, 0.869141f, 0.881348f, 0.892090f,
+ 0.902344f, 0.910645f, 0.919922f, 0.927246f, 0.933105f, 0.938965f, 0.944824f, 0.949707f, 0.954102f, 0.959473f, 0.962891f, 0.966309f,
+ 0.969727f, 0.972168f, 0.988770f, 0.990234f, 0.989746f, 0.989746f, 0.989746f, 0.989258f, 0.000870f, 0.002666f, 0.004578f, 0.006737f,
+ 0.009430f, 0.012077f, 0.015381f, 0.018463f, 0.022293f, 0.027313f, 0.032654f, 0.038727f, 0.045746f, 0.053619f, 0.063232f, 0.074524f,
+ 0.087219f, 0.102356f, 0.119324f, 0.139648f, 0.162842f, 0.189941f, 0.219482f, 0.253174f, 0.289795f, 0.329346f, 0.372070f, 0.415039f,
+ 0.459717f, 0.503418f, 0.546387f, 0.587402f, 0.625977f, 0.661621f, 0.694336f, 0.725586f, 0.752441f, 0.776855f, 0.798828f, 0.818359f,
+ 0.837402f, 0.852539f, 0.866699f, 0.878906f, 0.891113f, 0.900879f, 0.910156f, 0.918457f, 0.926270f, 0.932617f, 0.938965f, 0.944824f,
+ 0.950195f, 0.955078f, 0.958984f, 0.962891f, 0.966797f, 0.970703f, 0.987793f, 0.988770f, 0.989258f, 0.989258f, 0.988770f, 0.988770f,
+ 0.000835f, 0.002302f, 0.004078f, 0.005802f, 0.008026f, 0.010490f, 0.013153f, 0.016235f, 0.019485f, 0.023636f, 0.027847f, 0.033081f,
+ 0.038849f, 0.045441f, 0.053253f, 0.062500f, 0.072571f, 0.085205f, 0.098999f, 0.115662f, 0.135254f, 0.156860f, 0.182373f, 0.211060f,
+ 0.243042f, 0.279053f, 0.318115f, 0.359619f, 0.402832f, 0.447021f, 0.490234f, 0.533691f, 0.575195f, 0.615234f, 0.651855f, 0.686035f,
+ 0.717285f, 0.746094f, 0.771484f, 0.793945f, 0.813965f, 0.833496f, 0.848633f, 0.864258f, 0.877930f, 0.889648f, 0.900391f, 0.909180f,
+ 0.918945f, 0.926270f, 0.932129f, 0.939453f, 0.945312f, 0.950684f, 0.955566f, 0.959473f, 0.963867f, 0.967773f, 0.987305f, 0.988281f,
+ 0.988281f, 0.988281f, 0.988281f, 0.987793f, 0.000815f, 0.001984f, 0.003475f, 0.005302f, 0.007103f, 0.009354f, 0.011528f, 0.013977f,
+ 0.017197f, 0.020111f, 0.023788f, 0.027771f, 0.033447f, 0.038452f, 0.045013f, 0.052704f, 0.061066f, 0.071228f, 0.082886f, 0.096313f,
+ 0.112488f, 0.130737f, 0.151245f, 0.175659f, 0.203125f, 0.234619f, 0.269043f, 0.306885f, 0.347656f, 0.390381f, 0.434570f, 0.478760f,
+ 0.522461f, 0.564453f, 0.605957f, 0.644043f, 0.678223f, 0.710449f, 0.739746f, 0.766602f, 0.791016f, 0.811035f, 0.831055f, 0.847168f,
+ 0.862793f, 0.875977f, 0.888672f, 0.899414f, 0.909180f, 0.917480f, 0.926270f, 0.933105f, 0.939941f, 0.945801f, 0.950684f, 0.955566f,
+ 0.960938f, 0.964844f, 0.985840f, 0.987305f, 0.987793f, 0.987305f, 0.987305f, 0.987305f, 0.000587f, 0.002005f, 0.003122f, 0.004707f,
+ 0.006283f, 0.007778f, 0.009972f, 0.012581f, 0.014435f, 0.017426f, 0.020691f, 0.024475f, 0.028519f, 0.033203f, 0.038513f, 0.044708f,
+ 0.051727f, 0.060028f, 0.069763f, 0.080627f, 0.093506f, 0.109009f, 0.125977f, 0.146362f, 0.169678f, 0.196533f, 0.226685f, 0.259766f,
+ 0.297119f, 0.337646f, 0.380127f, 0.424072f, 0.468018f, 0.512207f, 0.555176f, 0.596680f, 0.635254f, 0.671387f, 0.704590f, 0.734863f,
+ 0.762207f, 0.787109f, 0.809082f, 0.828613f, 0.846191f, 0.860840f, 0.875977f, 0.888184f, 0.899902f, 0.908691f, 0.918457f, 0.926270f,
+ 0.934082f, 0.940430f, 0.947266f, 0.951660f, 0.958008f, 0.961914f, 0.984863f, 0.986328f, 0.986816f, 0.986816f, 0.986328f, 0.986328f,
+ 0.000475f, 0.001671f, 0.003019f, 0.004379f, 0.005592f, 0.006882f, 0.008682f, 0.010757f, 0.012856f, 0.015343f, 0.018112f, 0.021164f,
+ 0.024353f, 0.028595f, 0.033020f, 0.038086f, 0.044006f, 0.050812f, 0.058594f, 0.067993f, 0.078735f, 0.091248f, 0.105530f, 0.122009f,
+ 0.142212f, 0.164062f, 0.189697f, 0.219238f, 0.251953f, 0.288330f, 0.328125f, 0.369629f, 0.413818f, 0.458008f, 0.503418f, 0.547363f,
+ 0.588867f, 0.628418f, 0.665039f, 0.699707f, 0.730469f, 0.758301f, 0.784668f, 0.807129f, 0.826660f, 0.844727f, 0.862305f, 0.875977f,
+ 0.888672f, 0.900879f, 0.910156f, 0.919434f, 0.927734f, 0.935059f, 0.941406f, 0.947754f, 0.953125f, 0.958496f, 0.983887f, 0.985352f,
+ 0.985352f, 0.985352f, 0.984863f, 0.985352f, 0.000325f, 0.001517f, 0.002554f, 0.003811f, 0.004990f, 0.006638f, 0.007706f, 0.009399f,
+ 0.011177f, 0.013580f, 0.015671f, 0.018478f, 0.021393f, 0.024612f, 0.028442f, 0.032990f, 0.037750f, 0.043427f, 0.050354f, 0.057861f,
+ 0.066101f, 0.076294f, 0.088684f, 0.102417f, 0.119080f, 0.137451f, 0.159058f, 0.183838f, 0.212524f, 0.244385f, 0.280273f, 0.319336f,
+ 0.361084f, 0.405029f, 0.449707f, 0.494873f, 0.539551f, 0.582031f, 0.622559f, 0.660156f, 0.695801f, 0.727539f, 0.756348f, 0.782715f,
+ 0.805664f, 0.826172f, 0.845215f, 0.861328f, 0.875977f, 0.889648f, 0.901367f, 0.910645f, 0.920410f, 0.928711f, 0.937012f, 0.942871f,
+ 0.949219f, 0.955078f, 0.982422f, 0.983887f, 0.984375f, 0.984375f, 0.983887f, 0.983887f, 0.000349f, 0.001533f, 0.002413f, 0.003326f,
+ 0.004463f, 0.005524f, 0.006954f, 0.008202f, 0.010025f, 0.011864f, 0.013924f, 0.015884f, 0.018478f, 0.021484f, 0.024658f, 0.028671f,
+ 0.032562f, 0.037170f, 0.042969f, 0.049194f, 0.056641f, 0.065063f, 0.074951f, 0.086182f, 0.099731f, 0.115662f, 0.133789f, 0.154175f,
+ 0.178589f, 0.206421f, 0.237671f, 0.272949f, 0.312012f, 0.352783f, 0.396973f, 0.442627f, 0.487793f, 0.532227f, 0.576660f, 0.617188f,
+ 0.657227f, 0.692383f, 0.725586f, 0.754395f, 0.780762f, 0.805664f, 0.826172f, 0.845215f, 0.861816f, 0.876465f, 0.890137f, 0.902344f,
+ 0.912598f, 0.921875f, 0.930176f, 0.937988f, 0.945312f, 0.952148f, 0.981445f, 0.982910f, 0.982910f, 0.983398f, 0.983398f, 0.983398f,
+ 0.000475f, 0.001141f, 0.002058f, 0.002846f, 0.004120f, 0.005013f, 0.006207f, 0.007664f, 0.009193f, 0.010368f, 0.012222f, 0.014404f,
+ 0.016403f, 0.018799f, 0.021439f, 0.024567f, 0.028076f, 0.032379f, 0.036652f, 0.042145f, 0.048157f, 0.055389f, 0.063660f, 0.073059f,
+ 0.083740f, 0.097046f, 0.112366f, 0.129517f, 0.149780f, 0.173584f, 0.200684f, 0.231812f, 0.266357f, 0.304688f, 0.346680f, 0.390137f,
+ 0.435547f, 0.481445f, 0.526367f, 0.572266f, 0.613770f, 0.653320f, 0.690430f, 0.723633f, 0.754395f, 0.781250f, 0.806152f, 0.826172f,
+ 0.847168f, 0.862793f, 0.878906f, 0.892090f, 0.904297f, 0.914551f, 0.924316f, 0.933105f, 0.940430f, 0.947754f, 0.979492f, 0.981934f,
+ 0.981934f, 0.981934f, 0.981445f, 0.981445f, 0.000239f, 0.000882f, 0.001744f, 0.002878f, 0.003819f, 0.004532f, 0.005550f, 0.006653f,
+ 0.007942f, 0.009277f, 0.010628f, 0.012421f, 0.014397f, 0.016312f, 0.018845f, 0.021576f, 0.024536f, 0.027817f, 0.031860f, 0.036346f,
+ 0.041595f, 0.047333f, 0.054138f, 0.062317f, 0.071350f, 0.081970f, 0.094299f, 0.109070f, 0.126221f, 0.146118f, 0.169067f, 0.195801f,
+ 0.226196f, 0.260742f, 0.298584f, 0.340088f, 0.384277f, 0.429688f, 0.476807f, 0.522461f, 0.568359f, 0.611328f, 0.651855f, 0.689453f,
+ 0.723633f, 0.754395f, 0.782715f, 0.807617f, 0.829590f, 0.848145f, 0.865723f, 0.880859f, 0.894531f, 0.906738f, 0.917969f, 0.927246f,
+ 0.936035f, 0.943359f, 0.978027f, 0.979980f, 0.980469f, 0.980469f, 0.980469f, 0.980469f, 0.000240f, 0.000948f, 0.001495f, 0.002592f,
+ 0.003241f, 0.004055f, 0.004856f, 0.006111f, 0.007133f, 0.008125f, 0.009445f, 0.011108f, 0.012474f, 0.014374f, 0.016586f, 0.018784f,
+ 0.021286f, 0.024475f, 0.027481f, 0.031403f, 0.035828f, 0.040710f, 0.046204f, 0.052704f, 0.060577f, 0.069519f, 0.079651f, 0.092224f,
+ 0.106506f, 0.122986f, 0.142456f, 0.165161f, 0.191284f, 0.221924f, 0.255615f, 0.293457f, 0.335205f, 0.379395f, 0.425537f, 0.472900f,
+ 0.519531f, 0.566406f, 0.610840f, 0.652344f, 0.689941f, 0.724609f, 0.755371f, 0.784180f, 0.808594f, 0.831055f, 0.851562f, 0.869141f,
+ 0.884277f, 0.897461f, 0.909668f, 0.920410f, 0.930176f, 0.937988f, 0.976562f, 0.979004f, 0.979492f, 0.979492f, 0.979492f, 0.979492f,
+ 0.000302f, 0.000863f, 0.001315f, 0.002195f, 0.002905f, 0.003592f, 0.004784f, 0.005478f, 0.006199f, 0.007389f, 0.008545f, 0.009811f,
+ 0.011185f, 0.012787f, 0.014603f, 0.016342f, 0.018784f, 0.021347f, 0.024033f, 0.027496f, 0.031006f, 0.034790f, 0.039856f, 0.045288f,
+ 0.051636f, 0.059052f, 0.067566f, 0.078003f, 0.089905f, 0.103760f, 0.119934f, 0.139282f, 0.161865f, 0.187622f, 0.217407f, 0.251221f,
+ 0.288818f, 0.330811f, 0.375244f, 0.422607f, 0.470703f, 0.518066f, 0.565430f, 0.609863f, 0.651855f, 0.691406f, 0.726562f, 0.758301f,
+ 0.787109f, 0.812500f, 0.835449f, 0.855957f, 0.872559f, 0.887695f, 0.901367f, 0.913574f, 0.923828f, 0.933105f, 0.975098f, 0.977539f,
+ 0.977539f, 0.977539f, 0.978027f, 0.977051f, 0.000240f, 0.000808f, 0.001537f, 0.002106f, 0.002493f, 0.003729f, 0.004036f, 0.004982f,
+ 0.005539f, 0.006454f, 0.007526f, 0.008690f, 0.009987f, 0.011421f, 0.012894f, 0.014618f, 0.016464f, 0.018539f, 0.021118f, 0.023865f,
+ 0.026794f, 0.030487f, 0.034241f, 0.038879f, 0.044067f, 0.050690f, 0.057678f, 0.066040f, 0.076111f, 0.087524f, 0.101379f, 0.117737f,
+ 0.136353f, 0.158325f, 0.183594f, 0.213501f, 0.247192f, 0.284912f, 0.327393f, 0.372803f, 0.420410f, 0.468750f, 0.518066f, 0.565430f,
+ 0.611328f, 0.654297f, 0.694336f, 0.729980f, 0.762207f, 0.791504f, 0.817383f, 0.839844f, 0.859863f, 0.876953f, 0.891602f, 0.905762f,
+ 0.917480f, 0.928711f, 0.973633f, 0.975098f, 0.976562f, 0.975586f, 0.976562f, 0.976562f, 0.000240f, 0.000587f, 0.001223f, 0.001691f,
+ 0.002499f, 0.003008f, 0.003643f, 0.004295f, 0.004795f, 0.005726f, 0.006649f, 0.007671f, 0.008766f, 0.010002f, 0.011307f, 0.012764f,
+ 0.014465f, 0.016388f, 0.018387f, 0.020599f, 0.023453f, 0.026291f, 0.029572f, 0.033417f, 0.037964f, 0.043427f, 0.049316f, 0.056519f,
+ 0.064819f, 0.074219f, 0.085693f, 0.099121f, 0.115112f, 0.133301f, 0.155273f, 0.180420f, 0.210205f, 0.244751f, 0.282715f, 0.324951f,
+ 0.371338f, 0.419434f, 0.468994f, 0.518555f, 0.566895f, 0.613770f, 0.658203f, 0.698242f, 0.735352f, 0.766602f, 0.796875f, 0.821289f,
+ 0.844238f, 0.863770f, 0.881836f, 0.896973f, 0.910156f, 0.922363f, 0.971191f, 0.974121f, 0.974609f, 0.974121f, 0.974609f, 0.974609f,
+ 0.000228f, 0.000671f, 0.001122f, 0.001607f, 0.002291f, 0.002836f, 0.003319f, 0.003817f, 0.004509f, 0.005253f, 0.005894f, 0.006840f,
+ 0.007820f, 0.008972f, 0.010086f, 0.011391f, 0.012848f, 0.014328f, 0.016266f, 0.018158f, 0.020447f, 0.022720f, 0.026031f, 0.029053f,
+ 0.032593f, 0.037109f, 0.042236f, 0.048340f, 0.055115f, 0.063049f, 0.072632f, 0.083801f, 0.097351f, 0.112488f, 0.130493f, 0.152222f,
+ 0.178101f, 0.208008f, 0.241943f, 0.280762f, 0.323730f, 0.370117f, 0.419434f, 0.470459f, 0.520996f, 0.570801f, 0.617676f, 0.663086f,
+ 0.704102f, 0.740234f, 0.773438f, 0.802246f, 0.829102f, 0.850098f, 0.870117f, 0.887695f, 0.902832f, 0.916016f, 0.969238f, 0.972168f,
+ 0.972168f, 0.972656f, 0.972656f, 0.972168f, 0.000121f, 0.000526f, 0.001092f, 0.001670f, 0.001744f, 0.002420f, 0.002945f, 0.003237f,
+ 0.004013f, 0.004894f, 0.005421f, 0.005932f, 0.006996f, 0.007904f, 0.008873f, 0.009995f, 0.011391f, 0.012756f, 0.014053f, 0.015884f,
+ 0.017715f, 0.019775f, 0.022324f, 0.025406f, 0.028290f, 0.032349f, 0.036560f, 0.041412f, 0.047058f, 0.053772f, 0.061493f, 0.070862f,
+ 0.081848f, 0.094666f, 0.110229f, 0.128662f, 0.150024f, 0.175903f, 0.205566f, 0.239990f, 0.279785f, 0.323486f, 0.370850f, 0.421143f,
+ 0.473633f, 0.524902f, 0.576172f, 0.625000f, 0.668457f, 0.710938f, 0.748535f, 0.781250f, 0.810059f, 0.835449f, 0.857910f, 0.877441f,
+ 0.894531f, 0.908691f, 0.966797f, 0.970215f, 0.970703f, 0.970703f, 0.970703f, 0.970215f, 0.000127f, 0.000521f, 0.001083f, 0.001460f,
+ 0.001684f, 0.002111f, 0.002563f, 0.003048f, 0.003618f, 0.004124f, 0.004936f, 0.005543f, 0.006340f, 0.007111f, 0.008049f, 0.008774f,
+ 0.009865f, 0.011162f, 0.012360f, 0.013840f, 0.015465f, 0.017181f, 0.019531f, 0.021973f, 0.024582f, 0.027847f, 0.031342f, 0.035706f,
+ 0.040100f, 0.045990f, 0.052521f, 0.060089f, 0.069214f, 0.080017f, 0.093079f, 0.108521f, 0.126709f, 0.148071f, 0.174072f, 0.204224f,
+ 0.239502f, 0.279541f, 0.324219f, 0.373047f, 0.424805f, 0.477295f, 0.530762f, 0.583008f, 0.632324f, 0.677246f, 0.719727f, 0.756348f,
+ 0.789551f, 0.819336f, 0.842773f, 0.866211f, 0.885742f, 0.901855f, 0.965332f, 0.967773f, 0.968262f, 0.967773f, 0.968750f, 0.968262f,
+ 0.000244f, 0.000397f, 0.001001f, 0.001181f, 0.001642f, 0.001872f, 0.002460f, 0.002712f, 0.003061f, 0.003723f, 0.004520f, 0.005043f,
+ 0.005547f, 0.006451f, 0.007057f, 0.007828f, 0.008942f, 0.009872f, 0.010857f, 0.012131f, 0.013557f, 0.015198f, 0.017059f, 0.019241f,
+ 0.021454f, 0.024048f, 0.027069f, 0.030594f, 0.034332f, 0.039001f, 0.044952f, 0.050873f, 0.058716f, 0.067505f, 0.078369f, 0.091309f,
+ 0.106506f, 0.124695f, 0.146484f, 0.172852f, 0.203369f, 0.239014f, 0.280273f, 0.326172f, 0.376465f, 0.429443f, 0.483643f, 0.538574f,
+ 0.591309f, 0.641602f, 0.687500f, 0.729492f, 0.766602f, 0.800293f, 0.828613f, 0.854004f, 0.874512f, 0.893555f, 0.961914f, 0.965332f,
+ 0.965820f, 0.966309f, 0.966309f, 0.965820f, 0.000243f, 0.000453f, 0.000888f, 0.001245f, 0.001342f, 0.001847f, 0.002060f, 0.002541f,
+ 0.002991f, 0.003355f, 0.003679f, 0.004379f, 0.005177f, 0.005413f, 0.006283f, 0.007038f, 0.007896f, 0.008507f, 0.009552f, 0.010628f,
+ 0.011909f, 0.013306f, 0.015038f, 0.016388f, 0.018433f, 0.020752f, 0.023254f, 0.026413f, 0.029617f, 0.033447f, 0.037842f, 0.043701f,
+ 0.049896f, 0.057190f, 0.066101f, 0.076660f, 0.089600f, 0.104553f, 0.123230f, 0.145386f, 0.171387f, 0.202637f, 0.239624f, 0.281982f,
+ 0.329346f, 0.380859f, 0.436035f, 0.491943f, 0.547852f, 0.602539f, 0.653809f, 0.699707f, 0.741699f, 0.778320f, 0.811035f, 0.838867f,
+ 0.862793f, 0.884766f, 0.959961f, 0.963379f, 0.963379f, 0.963379f, 0.964355f, 0.963379f, 0.000241f, 0.000452f, 0.000798f, 0.001119f,
+ 0.001220f, 0.001430f, 0.001902f, 0.002277f, 0.002737f, 0.002893f, 0.003624f, 0.003937f, 0.004436f, 0.005089f, 0.005669f, 0.006226f,
+ 0.006680f, 0.007519f, 0.008568f, 0.009384f, 0.010422f, 0.011795f, 0.012840f, 0.014526f, 0.016235f, 0.017929f, 0.020218f, 0.022736f,
+ 0.025146f, 0.028580f, 0.032684f, 0.036896f, 0.042511f, 0.048431f, 0.055634f, 0.064453f, 0.075317f, 0.088196f, 0.103333f, 0.121948f,
+ 0.144287f, 0.171143f, 0.203491f, 0.241577f, 0.285156f, 0.334229f, 0.387939f, 0.444580f, 0.501953f, 0.559570f, 0.614746f, 0.666504f,
+ 0.712402f, 0.755371f, 0.791504f, 0.823242f, 0.851074f, 0.875000f, 0.956543f, 0.959961f, 0.960938f, 0.960449f, 0.960449f, 0.960449f,
+ 0.000000f, 0.000263f, 0.000693f, 0.000873f, 0.001183f, 0.001447f, 0.001476f, 0.002068f, 0.002171f, 0.002857f, 0.003164f, 0.003542f,
+ 0.003778f, 0.004326f, 0.004906f, 0.005436f, 0.006126f, 0.006687f, 0.007229f, 0.008377f, 0.009232f, 0.010223f, 0.011436f, 0.012527f,
+ 0.013832f, 0.015747f, 0.017365f, 0.019363f, 0.021667f, 0.024231f, 0.027695f, 0.031769f, 0.035889f, 0.041016f, 0.047028f, 0.054504f,
+ 0.063110f, 0.073975f, 0.086487f, 0.101807f, 0.120972f, 0.143555f, 0.171753f, 0.204956f, 0.244263f, 0.289551f, 0.340576f, 0.396484f,
+ 0.455078f, 0.514648f, 0.573730f, 0.630371f, 0.681152f, 0.729004f, 0.770020f, 0.806641f, 0.837402f, 0.863770f, 0.953613f, 0.956543f,
+ 0.957520f, 0.957031f, 0.957031f, 0.958008f, 0.000000f, 0.000356f, 0.000641f, 0.000870f, 0.000998f, 0.001134f, 0.001495f, 0.001724f,
+ 0.002436f, 0.002478f, 0.002775f, 0.003113f, 0.003435f, 0.003864f, 0.004314f, 0.004704f, 0.005276f, 0.005886f, 0.006599f, 0.007309f,
+ 0.008003f, 0.008987f, 0.009987f, 0.010941f, 0.012192f, 0.013466f, 0.015030f, 0.016708f, 0.018906f, 0.021103f, 0.023788f, 0.026886f,
+ 0.030457f, 0.034943f, 0.040009f, 0.045959f, 0.053162f, 0.061920f, 0.072144f, 0.085205f, 0.101257f, 0.120422f, 0.143555f, 0.172363f,
+ 0.206909f, 0.248047f, 0.295410f, 0.349121f, 0.407715f, 0.468750f, 0.530762f, 0.589844f, 0.647949f, 0.699707f, 0.746094f, 0.786621f,
+ 0.823242f, 0.852051f, 0.950195f, 0.953125f, 0.954102f, 0.954102f, 0.954102f, 0.954102f, 0.000231f, 0.000449f, 0.000516f, 0.000760f,
+ 0.000868f, 0.001152f, 0.001403f, 0.001773f, 0.002165f, 0.002245f, 0.002550f, 0.002783f, 0.003277f, 0.003660f, 0.003782f, 0.004120f,
+ 0.004631f, 0.005268f, 0.005795f, 0.006344f, 0.007053f, 0.007835f, 0.008598f, 0.009460f, 0.010689f, 0.011551f, 0.012726f, 0.014359f,
+ 0.016052f, 0.017975f, 0.020218f, 0.022812f, 0.025803f, 0.029251f, 0.033386f, 0.038574f, 0.044556f, 0.051941f, 0.060577f, 0.071045f,
+ 0.084106f, 0.100342f, 0.119751f, 0.144043f, 0.174194f, 0.209961f, 0.253418f, 0.303467f, 0.359619f, 0.420898f, 0.483887f, 0.547852f,
+ 0.609375f, 0.667480f, 0.719727f, 0.765625f, 0.804688f, 0.839844f, 0.946289f, 0.949707f, 0.950195f, 0.950684f, 0.950684f, 0.950195f,
+ 0.000201f, 0.000336f, 0.000452f, 0.000627f, 0.000793f, 0.000966f, 0.001134f, 0.001578f, 0.001790f, 0.001896f, 0.002254f, 0.002464f,
+ 0.002825f, 0.003012f, 0.003414f, 0.003626f, 0.004131f, 0.004608f, 0.005058f, 0.005642f, 0.006191f, 0.006771f, 0.007378f, 0.008057f,
+ 0.009132f, 0.009918f, 0.010826f, 0.012314f, 0.013794f, 0.015381f, 0.017197f, 0.019257f, 0.021912f, 0.024841f, 0.028259f, 0.032318f,
+ 0.037262f, 0.043427f, 0.050537f, 0.059021f, 0.070007f, 0.083191f, 0.099609f, 0.120239f, 0.145508f, 0.176636f, 0.214600f, 0.260254f,
+ 0.313232f, 0.372803f, 0.437012f, 0.503418f, 0.568359f, 0.631836f, 0.688965f, 0.741211f, 0.786621f, 0.825195f, 0.941406f, 0.946289f,
+ 0.946289f, 0.946777f, 0.946289f, 0.947266f, 0.000000f, 0.000317f, 0.000445f, 0.000453f, 0.000781f, 0.000794f, 0.001183f, 0.001289f,
+ 0.001479f, 0.001832f, 0.001874f, 0.002256f, 0.002270f, 0.002716f, 0.002960f, 0.003273f, 0.003630f, 0.003948f, 0.004467f, 0.004833f,
+ 0.005451f, 0.005962f, 0.006367f, 0.007088f, 0.007717f, 0.008400f, 0.009506f, 0.010445f, 0.011658f, 0.012993f, 0.014618f, 0.016357f,
+ 0.018524f, 0.021210f, 0.023712f, 0.027252f, 0.031219f, 0.036041f, 0.041962f, 0.049194f, 0.057892f, 0.068604f, 0.082642f, 0.099304f,
+ 0.120728f, 0.147217f, 0.180054f, 0.221191f, 0.269287f, 0.325928f, 0.388916f, 0.457275f, 0.525391f, 0.593262f, 0.657715f, 0.714355f,
+ 0.766113f, 0.809082f, 0.937500f, 0.940918f, 0.941895f, 0.941895f, 0.941895f, 0.942383f, 0.000243f, 0.000238f, 0.000411f, 0.000532f,
+ 0.000530f, 0.000764f, 0.000853f, 0.001171f, 0.001417f, 0.001545f, 0.001799f, 0.001900f, 0.002094f, 0.002354f, 0.002577f, 0.002703f,
+ 0.003155f, 0.003428f, 0.003809f, 0.004227f, 0.004677f, 0.004997f, 0.005386f, 0.005913f, 0.006741f, 0.007225f, 0.008057f, 0.008873f,
+ 0.009819f, 0.011101f, 0.012253f, 0.013725f, 0.015488f, 0.017410f, 0.019791f, 0.022598f, 0.025635f, 0.030014f, 0.034973f, 0.040527f,
+ 0.047729f, 0.056702f, 0.067505f, 0.081848f, 0.099609f, 0.121521f, 0.149902f, 0.185181f, 0.228516f, 0.280762f, 0.341553f, 0.408936f,
+ 0.480225f, 0.552246f, 0.622070f, 0.686035f, 0.742188f, 0.792480f, 0.932129f, 0.935547f, 0.937012f, 0.937012f, 0.936523f, 0.937500f,
+ 0.000000f, 0.000232f, 0.000330f, 0.000512f, 0.000523f, 0.000907f, 0.000953f, 0.001018f, 0.001234f, 0.001344f, 0.001610f, 0.001612f,
+ 0.001845f, 0.002054f, 0.002218f, 0.002453f, 0.002829f, 0.003105f, 0.003300f, 0.003712f, 0.003853f, 0.004280f, 0.004631f, 0.005112f,
+ 0.005665f, 0.006279f, 0.006779f, 0.007481f, 0.008362f, 0.009270f, 0.010338f, 0.011505f, 0.012848f, 0.014549f, 0.016403f, 0.018936f,
+ 0.021622f, 0.024750f, 0.028900f, 0.033447f, 0.039185f, 0.046448f, 0.055603f, 0.067078f, 0.081238f, 0.100037f, 0.123230f, 0.153564f,
+ 0.191284f, 0.238525f, 0.295166f, 0.361084f, 0.432861f, 0.507812f, 0.582520f, 0.653320f, 0.717285f, 0.772461f, 0.926270f, 0.931152f,
+ 0.931152f, 0.932129f, 0.932129f, 0.932129f, 0.000118f, 0.000219f, 0.000227f, 0.000405f, 0.000689f, 0.000726f, 0.000910f, 0.000847f,
+ 0.001072f, 0.001114f, 0.001388f, 0.001447f, 0.001656f, 0.001811f, 0.001897f, 0.002253f, 0.002373f, 0.002617f, 0.002796f, 0.003054f,
+ 0.003414f, 0.003681f, 0.003929f, 0.004353f, 0.004902f, 0.005322f, 0.005863f, 0.006424f, 0.007000f, 0.007755f, 0.008675f, 0.009506f,
+ 0.010704f, 0.012215f, 0.013557f, 0.015686f, 0.017807f, 0.020630f, 0.023376f, 0.027328f, 0.032013f, 0.038177f, 0.045288f, 0.054626f,
+ 0.066284f, 0.081543f, 0.100891f, 0.125977f, 0.158447f, 0.199951f, 0.251465f, 0.313965f, 0.384521f, 0.461670f, 0.540527f, 0.617188f,
+ 0.688965f, 0.750977f, 0.920410f, 0.924805f, 0.925781f, 0.926270f, 0.926758f, 0.925781f, 0.000230f, 0.000198f, 0.000217f, 0.000338f,
+ 0.000584f, 0.000786f, 0.000699f, 0.000893f, 0.000954f, 0.000959f, 0.001153f, 0.001165f, 0.001375f, 0.001545f, 0.001752f, 0.001752f,
+ 0.002062f, 0.002235f, 0.002399f, 0.002699f, 0.002853f, 0.002995f, 0.003372f, 0.003603f, 0.003944f, 0.004513f, 0.004704f, 0.005226f,
+ 0.005878f, 0.006527f, 0.006992f, 0.007889f, 0.008919f, 0.010002f, 0.011124f, 0.012604f, 0.014526f, 0.016510f, 0.019104f, 0.022308f,
+ 0.026077f, 0.030701f, 0.036774f, 0.044098f, 0.053558f, 0.065735f, 0.081299f, 0.101990f, 0.129517f, 0.164917f, 0.210938f, 0.268066f,
+ 0.336914f, 0.413818f, 0.496094f, 0.579102f, 0.657227f, 0.727539f, 0.913574f, 0.917969f, 0.918945f, 0.919434f, 0.919922f, 0.919922f,
+ 0.000000f, 0.000101f, 0.000214f, 0.000208f, 0.000339f, 0.000461f, 0.000577f, 0.000780f, 0.000777f, 0.000840f, 0.000853f, 0.001064f,
+ 0.001198f, 0.001327f, 0.001489f, 0.001687f, 0.001809f, 0.001884f, 0.002008f, 0.002129f, 0.002434f, 0.002514f, 0.002949f, 0.003000f,
+ 0.003351f, 0.003674f, 0.003918f, 0.004356f, 0.004875f, 0.005310f, 0.005768f, 0.006458f, 0.007244f, 0.008255f, 0.008949f, 0.010361f,
+ 0.011589f, 0.013290f, 0.015335f, 0.017776f, 0.020828f, 0.024521f, 0.029236f, 0.035431f, 0.042694f, 0.052490f, 0.065369f, 0.082336f,
+ 0.104492f, 0.134277f, 0.173828f, 0.225464f, 0.290039f, 0.365234f, 0.449707f, 0.536133f, 0.623047f, 0.702637f, 0.905273f, 0.911133f,
+ 0.912598f, 0.913086f, 0.913086f, 0.913086f, 0.000000f, 0.000167f, 0.000167f, 0.000316f, 0.000432f, 0.000444f, 0.000608f, 0.000611f,
+ 0.000678f, 0.000750f, 0.000899f, 0.000925f, 0.001043f, 0.001125f, 0.001222f, 0.001343f, 0.001470f, 0.001608f, 0.001679f, 0.001804f,
+ 0.001976f, 0.002234f, 0.002361f, 0.002710f, 0.002748f, 0.003035f, 0.003290f, 0.003647f, 0.003990f, 0.004295f, 0.004745f, 0.005318f,
+ 0.005920f, 0.006618f, 0.007347f, 0.008270f, 0.009361f, 0.010719f, 0.012291f, 0.014221f, 0.016693f, 0.019592f, 0.023239f, 0.027969f,
+ 0.033752f, 0.041534f, 0.051666f, 0.065369f, 0.083618f, 0.108276f, 0.141357f, 0.186035f, 0.244141f, 0.316650f, 0.400635f, 0.491699f,
+ 0.585938f, 0.672852f, 0.897461f, 0.903320f, 0.904297f, 0.903809f, 0.903809f, 0.904297f, 0.000000f, 0.000098f, 0.000145f, 0.000289f,
+ 0.000399f, 0.000424f, 0.000429f, 0.000382f, 0.000529f, 0.000613f, 0.000660f, 0.000836f, 0.000907f, 0.000940f, 0.001005f, 0.001188f,
+ 0.001306f, 0.001451f, 0.001420f, 0.001554f, 0.001667f, 0.001783f, 0.001955f, 0.002125f, 0.002357f, 0.002493f, 0.002760f, 0.002867f,
+ 0.003298f, 0.003626f, 0.003878f, 0.004341f, 0.004704f, 0.005356f, 0.005905f, 0.006512f, 0.007435f, 0.008377f, 0.009598f, 0.011055f,
+ 0.012978f, 0.015388f, 0.018036f, 0.021698f, 0.026337f, 0.032532f, 0.040192f, 0.050995f, 0.065125f, 0.085510f, 0.113037f, 0.150513f,
+ 0.201538f, 0.268799f, 0.351318f, 0.444824f, 0.543457f, 0.641602f, 0.888672f, 0.894043f, 0.894531f, 0.895508f, 0.895020f, 0.895508f,
+ 0.000000f, 0.000000f, 0.000032f, 0.000169f, 0.000338f, 0.000372f, 0.000468f, 0.000471f, 0.000460f, 0.000493f, 0.000588f, 0.000715f,
+ 0.000762f, 0.000912f, 0.000831f, 0.001001f, 0.001043f, 0.001133f, 0.001242f, 0.001312f, 0.001446f, 0.001529f, 0.001647f, 0.001829f,
+ 0.001982f, 0.002121f, 0.002165f, 0.002438f, 0.002628f, 0.002865f, 0.003113f, 0.003424f, 0.003622f, 0.004131f, 0.004639f, 0.005222f,
+ 0.005875f, 0.006622f, 0.007496f, 0.008575f, 0.009987f, 0.011665f, 0.013985f, 0.016617f, 0.019913f, 0.024704f, 0.030960f, 0.039185f,
+ 0.050323f, 0.066284f, 0.088196f, 0.119568f, 0.163208f, 0.223511f, 0.302002f, 0.395752f, 0.499756f, 0.605957f, 0.878418f, 0.883301f,
+ 0.884766f, 0.884766f, 0.885254f, 0.885254f, 0.000000f, 0.000000f, 0.000000f, 0.000216f, 0.000237f, 0.000338f, 0.000387f, 0.000341f,
+ 0.000435f, 0.000441f, 0.000461f, 0.000577f, 0.000544f, 0.000720f, 0.000813f, 0.000823f, 0.000912f, 0.000936f, 0.000994f, 0.001026f,
+ 0.001240f, 0.001268f, 0.001365f, 0.001415f, 0.001590f, 0.001565f, 0.001870f, 0.001929f, 0.002123f, 0.002377f, 0.002430f, 0.002565f,
+ 0.002947f, 0.003384f, 0.003662f, 0.004105f, 0.004513f, 0.005047f, 0.005741f, 0.006550f, 0.007549f, 0.008865f, 0.010612f, 0.012466f,
+ 0.015350f, 0.018677f, 0.023270f, 0.029800f, 0.038361f, 0.050323f, 0.067932f, 0.092590f, 0.129395f, 0.181274f, 0.253418f, 0.345459f,
+ 0.452637f, 0.567383f, 0.866699f, 0.872559f, 0.873047f, 0.873535f, 0.873047f, 0.873535f, 0.000000f, 0.000000f, 0.000121f, 0.000182f,
+ 0.000187f, 0.000237f, 0.000264f, 0.000360f, 0.000360f, 0.000397f, 0.000398f, 0.000412f, 0.000432f, 0.000546f, 0.000575f, 0.000690f,
+ 0.000731f, 0.000727f, 0.000807f, 0.000843f, 0.000924f, 0.001034f, 0.001093f, 0.001111f, 0.001251f, 0.001249f, 0.001334f, 0.001612f,
+ 0.001717f, 0.001820f, 0.002090f, 0.002161f, 0.002354f, 0.002600f, 0.002787f, 0.003119f, 0.003586f, 0.003878f, 0.004452f, 0.004913f,
+ 0.005772f, 0.006508f, 0.007679f, 0.009285f, 0.011086f, 0.013840f, 0.016968f, 0.021820f, 0.028259f, 0.037628f, 0.050812f, 0.070129f,
+ 0.099670f, 0.143433f, 0.207031f, 0.294922f, 0.403076f, 0.525879f, 0.853516f, 0.859375f, 0.860840f, 0.860352f, 0.862305f, 0.861328f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000181f, 0.000198f, 0.000181f, 0.000240f, 0.000275f, 0.000311f, 0.000427f, 0.000447f,
+ 0.000395f, 0.000472f, 0.000456f, 0.000557f, 0.000518f, 0.000562f, 0.000635f, 0.000664f, 0.000868f, 0.000887f, 0.000865f, 0.001025f,
+ 0.001014f, 0.001164f, 0.001096f, 0.001317f, 0.001382f, 0.001432f, 0.001445f, 0.001765f, 0.001744f, 0.002100f, 0.002144f, 0.002350f,
+ 0.002655f, 0.002947f, 0.003294f, 0.003780f, 0.004265f, 0.004971f, 0.005699f, 0.006786f, 0.007957f, 0.009636f, 0.011932f, 0.015823f,
+ 0.020142f, 0.026749f, 0.036530f, 0.051392f, 0.073792f, 0.109375f, 0.164185f, 0.244629f, 0.351562f, 0.479980f, 0.839355f, 0.844727f,
+ 0.846680f, 0.847656f, 0.847168f, 0.846680f, 0.000000f, 0.000121f, 0.000120f, 0.000119f, 0.000162f, 0.000133f, 0.000170f, 0.000201f,
+ 0.000204f, 0.000222f, 0.000258f, 0.000285f, 0.000324f, 0.000327f, 0.000422f, 0.000395f, 0.000431f, 0.000517f, 0.000632f, 0.000529f,
+ 0.000589f, 0.000592f, 0.000735f, 0.000714f, 0.000795f, 0.000778f, 0.000823f, 0.001063f, 0.001080f, 0.001141f, 0.001154f, 0.001308f,
+ 0.001439f, 0.001546f, 0.001689f, 0.001886f, 0.001978f, 0.002174f, 0.002377f, 0.002798f, 0.003277f, 0.003519f, 0.004181f, 0.004780f,
+ 0.005768f, 0.006863f, 0.008644f, 0.010750f, 0.014030f, 0.018448f, 0.025635f, 0.036194f, 0.053223f, 0.080811f, 0.125610f, 0.196533f,
+ 0.299316f, 0.430176f, 0.822754f, 0.830078f, 0.831055f, 0.831543f, 0.832031f, 0.831543f, 0.000000f, 0.000121f, 0.000120f, 0.000118f,
+ 0.000117f, 0.000120f, 0.000123f, 0.000151f, 0.000154f, 0.000175f, 0.000254f, 0.000190f, 0.000211f, 0.000306f, 0.000335f, 0.000358f,
+ 0.000394f, 0.000417f, 0.000443f, 0.000410f, 0.000565f, 0.000565f, 0.000491f, 0.000623f, 0.000616f, 0.000631f, 0.000738f, 0.000676f,
+ 0.000759f, 0.000924f, 0.000895f, 0.001030f, 0.001064f, 0.001176f, 0.001267f, 0.001438f, 0.001518f, 0.001704f, 0.001742f, 0.002028f,
+ 0.002384f, 0.002703f, 0.002972f, 0.003393f, 0.004051f, 0.004959f, 0.005993f, 0.007271f, 0.009277f, 0.012390f, 0.016968f, 0.024368f,
+ 0.036560f, 0.056610f, 0.091797f, 0.151245f, 0.246460f, 0.379639f, 0.805664f, 0.812500f, 0.813477f, 0.813965f, 0.813965f, 0.813965f,
+ 0.000000f, 0.000000f, 0.000118f, 0.000117f, 0.000116f, 0.000114f, 0.000113f, 0.000108f, 0.000127f, 0.000153f, 0.000133f, 0.000202f,
+ 0.000217f, 0.000223f, 0.000242f, 0.000186f, 0.000280f, 0.000304f, 0.000318f, 0.000342f, 0.000338f, 0.000473f, 0.000360f, 0.000484f,
+ 0.000422f, 0.000514f, 0.000527f, 0.000571f, 0.000633f, 0.000568f, 0.000639f, 0.000816f, 0.000789f, 0.000889f, 0.000891f, 0.000966f,
+ 0.001125f, 0.001276f, 0.001316f, 0.001496f, 0.001658f, 0.001818f, 0.002047f, 0.002502f, 0.002781f, 0.003201f, 0.003914f, 0.004795f,
+ 0.006096f, 0.007996f, 0.010918f, 0.015617f, 0.023697f, 0.037567f, 0.063477f, 0.111084f, 0.194824f, 0.324951f, 0.786133f, 0.792969f,
+ 0.794434f, 0.793945f, 0.794922f, 0.794434f, 0.000000f, 0.000119f, 0.000117f, 0.000115f, 0.000113f, 0.000112f, 0.000110f, 0.000109f,
+ 0.000104f, 0.000098f, 0.000099f, 0.000136f, 0.000112f, 0.000126f, 0.000175f, 0.000189f, 0.000196f, 0.000220f, 0.000216f, 0.000247f,
+ 0.000258f, 0.000274f, 0.000285f, 0.000309f, 0.000308f, 0.000321f, 0.000381f, 0.000390f, 0.000475f, 0.000511f, 0.000485f, 0.000501f,
+ 0.000641f, 0.000588f, 0.000652f, 0.000764f, 0.000808f, 0.000952f, 0.000906f, 0.001037f, 0.001110f, 0.001249f, 0.001411f, 0.001647f,
+ 0.001894f, 0.002159f, 0.002687f, 0.003223f, 0.004036f, 0.005150f, 0.006989f, 0.009644f, 0.014420f, 0.023361f, 0.040802f, 0.076050f,
+ 0.146362f, 0.269287f, 0.763184f, 0.770996f, 0.771973f, 0.771973f, 0.772461f, 0.772461f, 0.000121f, 0.000116f, 0.000114f, 0.000112f,
+ 0.000109f, 0.000108f, 0.000106f, 0.000105f, 0.000104f, 0.000101f, 0.000095f, 0.000090f, 0.000085f, 0.000083f, 0.000104f, 0.000097f,
+ 0.000094f, 0.000154f, 0.000127f, 0.000178f, 0.000197f, 0.000194f, 0.000233f, 0.000213f, 0.000279f, 0.000294f, 0.000293f, 0.000258f,
+ 0.000319f, 0.000394f, 0.000344f, 0.000369f, 0.000394f, 0.000410f, 0.000438f, 0.000509f, 0.000514f, 0.000580f, 0.000617f, 0.000684f,
+ 0.000807f, 0.000812f, 0.000914f, 0.001094f, 0.001183f, 0.001436f, 0.001639f, 0.002033f, 0.002523f, 0.003073f, 0.004063f, 0.005680f,
+ 0.008560f, 0.013466f, 0.024109f, 0.047791f, 0.102051f, 0.213867f, 0.740234f, 0.746582f, 0.748047f, 0.748535f, 0.749023f, 0.749023f,
+ 0.000000f, 0.000113f, 0.000108f, 0.000107f, 0.000104f, 0.000102f, 0.000099f, 0.000099f, 0.000097f, 0.000096f, 0.000095f, 0.000091f,
+ 0.000086f, 0.000081f, 0.000077f, 0.000073f, 0.000085f, 0.000091f, 0.000070f, 0.000102f, 0.000117f, 0.000131f, 0.000145f, 0.000148f,
+ 0.000171f, 0.000178f, 0.000178f, 0.000207f, 0.000225f, 0.000209f, 0.000285f, 0.000238f, 0.000260f, 0.000298f, 0.000331f, 0.000360f,
+ 0.000371f, 0.000346f, 0.000407f, 0.000443f, 0.000494f, 0.000516f, 0.000578f, 0.000662f, 0.000767f, 0.000847f, 0.001004f, 0.001149f,
+ 0.001451f, 0.001783f, 0.002310f, 0.003262f, 0.004593f, 0.007309f, 0.012985f, 0.026703f, 0.064026f, 0.158813f, 0.712891f, 0.719238f,
+ 0.722168f, 0.721680f, 0.722168f, 0.722656f, 0.000000f, 0.000105f, 0.000102f, 0.000098f, 0.000094f, 0.000092f, 0.000091f, 0.000089f,
+ 0.000088f, 0.000086f, 0.000085f, 0.000084f, 0.000083f, 0.000080f, 0.000076f, 0.000073f, 0.000069f, 0.000065f, 0.000062f, 0.000059f,
+ 0.000068f, 0.000063f, 0.000069f, 0.000074f, 0.000087f, 0.000102f, 0.000112f, 0.000130f, 0.000137f, 0.000129f, 0.000143f, 0.000168f,
+ 0.000180f, 0.000178f, 0.000189f, 0.000198f, 0.000222f, 0.000240f, 0.000262f, 0.000285f, 0.000304f, 0.000317f, 0.000339f, 0.000399f,
+ 0.000439f, 0.000490f, 0.000570f, 0.000658f, 0.000781f, 0.000988f, 0.001235f, 0.001674f, 0.002407f, 0.003725f, 0.006485f, 0.013199f,
+ 0.034546f, 0.107605f, 0.682129f, 0.691406f, 0.692871f, 0.691406f, 0.692871f, 0.692871f, 0.000105f, 0.000089f, 0.000085f, 0.000080f,
+ 0.000078f, 0.000078f, 0.000075f, 0.000074f, 0.000072f, 0.000072f, 0.000070f, 0.000071f, 0.000069f, 0.000069f, 0.000069f, 0.000068f,
+ 0.000066f, 0.000063f, 0.000060f, 0.000057f, 0.000054f, 0.000052f, 0.000049f, 0.000047f, 0.000046f, 0.000045f, 0.000048f, 0.000055f,
+ 0.000060f, 0.000068f, 0.000083f, 0.000087f, 0.000092f, 0.000103f, 0.000109f, 0.000117f, 0.000130f, 0.000150f, 0.000148f, 0.000142f,
+ 0.000167f, 0.000186f, 0.000210f, 0.000213f, 0.000232f, 0.000280f, 0.000292f, 0.000329f, 0.000391f, 0.000456f, 0.000596f, 0.000764f,
+ 0.001065f, 0.001633f, 0.002806f, 0.005909f, 0.015488f, 0.062378f, 0.651367f, 0.659668f, 0.661133f, 0.661133f, 0.660645f, 0.661621f,
+ 0.000034f, 0.000037f, 0.000048f, 0.000051f, 0.000047f, 0.000049f, 0.000047f, 0.000051f, 0.000049f, 0.000051f, 0.000049f, 0.000050f,
+ 0.000051f, 0.000050f, 0.000050f, 0.000049f, 0.000051f, 0.000050f, 0.000051f, 0.000050f, 0.000049f, 0.000047f, 0.000045f, 0.000043f,
+ 0.000041f, 0.000039f, 0.000037f, 0.000035f, 0.000033f, 0.000032f, 0.000030f, 0.000029f, 0.000034f, 0.000041f, 0.000046f, 0.000057f,
+ 0.000063f, 0.000067f, 0.000065f, 0.000072f, 0.000083f, 0.000093f, 0.000096f, 0.000102f, 0.000102f, 0.000135f, 0.000134f, 0.000151f,
+ 0.000184f, 0.000198f, 0.000245f, 0.000306f, 0.000425f, 0.000607f, 0.001032f, 0.002081f, 0.005886f, 0.027924f, 0.617188f, 0.625977f,
+ 0.627441f, 0.627930f, 0.626953f, 0.628418f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000006f, 0.000010f, 0.000014f,
+ 0.000016f, 0.000014f, 0.000019f, 0.000022f, 0.000022f, 0.000022f, 0.000025f, 0.000026f, 0.000027f, 0.000028f, 0.000029f, 0.000029f,
+ 0.000029f, 0.000030f, 0.000030f, 0.000031f, 0.000032f, 0.000032f, 0.000031f, 0.000030f, 0.000028f, 0.000027f, 0.000026f, 0.000024f,
+ 0.000023f, 0.000022f, 0.000021f, 0.000020f, 0.000019f, 0.000021f, 0.000022f, 0.000024f, 0.000027f, 0.000035f, 0.000041f, 0.000034f,
+ 0.000041f, 0.000052f, 0.000051f, 0.000051f, 0.000058f, 0.000070f, 0.000074f, 0.000103f, 0.000119f, 0.000169f, 0.000277f, 0.000510f,
+ 0.001495f, 0.008766f, 0.583008f, 0.590332f, 0.591797f, 0.591797f, 0.592285f, 0.592285f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000002f, 0.000003f, 0.000005f, 0.000006f, 0.000008f, 0.000009f, 0.000010f, 0.000010f,
+ 0.000012f, 0.000012f, 0.000013f, 0.000014f, 0.000015f, 0.000015f, 0.000015f, 0.000015f, 0.000014f, 0.000013f, 0.000013f, 0.000012f,
+ 0.000011f, 0.000010f, 0.000010f, 0.000009f, 0.000009f, 0.000014f, 0.000011f, 0.000015f, 0.000017f, 0.000017f, 0.000021f, 0.000020f,
+ 0.000026f, 0.000026f, 0.000042f, 0.000069f, 0.000178f, 0.001302f, 0.544434f, 0.553711f, 0.554688f, 0.554688f, 0.556152f, 0.556641f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000001f, 0.000002f, 0.000003f, 0.000003f,
+ 0.000003f, 0.000003f, 0.000003f, 0.000002f, 0.000002f, 0.000001f, 0.000003f, 0.000003f, 0.000004f, 0.000014f, 0.506836f, 0.515137f,
+ 0.516113f, 0.516602f, 0.517090f, 0.517578f,
+ },
+ {
+ 0.089539f, 0.244873f, 0.368164f, 0.464355f, 0.539551f, 0.599121f, 0.648438f, 0.688477f, 0.721680f, 0.749512f, 0.772461f, 0.793945f,
+ 0.811523f, 0.826172f, 0.841309f, 0.854004f, 0.863770f, 0.874512f, 0.883301f, 0.891602f, 0.898438f, 0.906250f, 0.912109f, 0.917969f,
+ 0.922852f, 0.928223f, 0.932617f, 0.937012f, 0.940918f, 0.944336f, 0.948242f, 0.951660f, 0.954590f, 0.957520f, 0.960449f, 0.962891f,
+ 0.965820f, 0.967773f, 0.970215f, 0.972656f, 0.974609f, 0.976074f, 0.978516f, 0.979492f, 0.981934f, 0.983398f, 0.984863f, 0.986328f,
+ 0.987793f, 0.988770f, 0.990234f, 0.991699f, 0.993164f, 0.994141f, 0.995117f, 0.996582f, 0.997559f, 0.998535f, 0.999023f, 0.998535f,
+ 0.997559f, 0.997070f, 0.996582f, 0.995605f, 0.045563f, 0.143921f, 0.242798f, 0.334717f, 0.417969f, 0.489258f, 0.550293f, 0.602051f,
+ 0.646484f, 0.683594f, 0.715820f, 0.743652f, 0.767090f, 0.788086f, 0.805664f, 0.822266f, 0.836426f, 0.849609f, 0.861328f, 0.870117f,
+ 0.879883f, 0.889160f, 0.896973f, 0.903320f, 0.909668f, 0.916016f, 0.921875f, 0.926758f, 0.931641f, 0.936523f, 0.940430f, 0.943848f,
+ 0.947266f, 0.951172f, 0.954102f, 0.957520f, 0.960449f, 0.962891f, 0.965820f, 0.968262f, 0.970215f, 0.973145f, 0.974121f, 0.976074f,
+ 0.979004f, 0.980469f, 0.982422f, 0.983887f, 0.985352f, 0.986816f, 0.988281f, 0.989746f, 0.991211f, 0.992188f, 0.994141f, 0.995117f,
+ 0.996094f, 0.997070f, 0.998535f, 0.997559f, 0.997070f, 0.996582f, 0.996094f, 0.995117f, 0.026855f, 0.089233f, 0.159790f, 0.234619f,
+ 0.308838f, 0.381348f, 0.447754f, 0.507812f, 0.561035f, 0.606934f, 0.646484f, 0.683105f, 0.712402f, 0.740234f, 0.763184f, 0.784668f,
+ 0.802246f, 0.819336f, 0.833984f, 0.846680f, 0.857910f, 0.868652f, 0.878418f, 0.886719f, 0.895508f, 0.903320f, 0.909668f, 0.915527f,
+ 0.920410f, 0.926270f, 0.931152f, 0.935547f, 0.940430f, 0.943848f, 0.947754f, 0.951172f, 0.954590f, 0.958008f, 0.960449f, 0.963379f,
+ 0.966309f, 0.968750f, 0.971191f, 0.973145f, 0.975586f, 0.977051f, 0.979004f, 0.981445f, 0.982910f, 0.983887f, 0.985840f, 0.987305f,
+ 0.988770f, 0.990723f, 0.992188f, 0.993164f, 0.994629f, 0.996094f, 0.998047f, 0.997070f, 0.996582f, 0.996094f, 0.995605f, 0.995117f,
+ 0.017746f, 0.058746f, 0.108276f, 0.163818f, 0.224365f, 0.288086f, 0.351562f, 0.413086f, 0.470947f, 0.522949f, 0.569824f, 0.612793f,
+ 0.650879f, 0.684570f, 0.713867f, 0.739258f, 0.762695f, 0.783203f, 0.800781f, 0.817871f, 0.833008f, 0.845215f, 0.857422f, 0.868164f,
+ 0.877441f, 0.886230f, 0.894043f, 0.902832f, 0.908691f, 0.915039f, 0.921387f, 0.925781f, 0.930664f, 0.936035f, 0.939941f, 0.944336f,
+ 0.948242f, 0.951660f, 0.955078f, 0.957520f, 0.961426f, 0.964355f, 0.967285f, 0.968750f, 0.971680f, 0.974121f, 0.975586f, 0.978027f,
+ 0.979980f, 0.981934f, 0.983887f, 0.985352f, 0.987305f, 0.988770f, 0.989746f, 0.991211f, 0.992676f, 0.993652f, 0.997070f, 0.996582f,
+ 0.996582f, 0.996094f, 0.995117f, 0.994629f, 0.012337f, 0.041229f, 0.075928f, 0.117065f, 0.163208f, 0.214478f, 0.270020f, 0.327148f,
+ 0.383301f, 0.437500f, 0.490234f, 0.536621f, 0.581543f, 0.621094f, 0.656250f, 0.688477f, 0.716797f, 0.741699f, 0.763672f, 0.784668f,
+ 0.802246f, 0.818359f, 0.832520f, 0.845703f, 0.857422f, 0.868164f, 0.877930f, 0.886230f, 0.895020f, 0.902344f, 0.909668f, 0.915039f,
+ 0.921875f, 0.926758f, 0.931641f, 0.937012f, 0.940430f, 0.946289f, 0.949219f, 0.952637f, 0.956055f, 0.958984f, 0.961914f, 0.964844f,
+ 0.967773f, 0.970215f, 0.972656f, 0.974609f, 0.976562f, 0.979004f, 0.980957f, 0.982910f, 0.984863f, 0.986816f, 0.987793f, 0.989746f,
+ 0.990723f, 0.992676f, 0.996582f, 0.996094f, 0.995605f, 0.995117f, 0.994629f, 0.994141f, 0.009315f, 0.030411f, 0.055756f, 0.085632f,
+ 0.121094f, 0.160889f, 0.206055f, 0.254150f, 0.305664f, 0.357422f, 0.408447f, 0.459717f, 0.506836f, 0.551270f, 0.592773f, 0.629395f,
+ 0.662598f, 0.692871f, 0.719727f, 0.745117f, 0.767090f, 0.786133f, 0.804688f, 0.819336f, 0.834473f, 0.847168f, 0.858398f, 0.869629f,
+ 0.879395f, 0.888672f, 0.895020f, 0.903320f, 0.910156f, 0.916016f, 0.922363f, 0.928223f, 0.933105f, 0.937012f, 0.941406f, 0.946289f,
+ 0.950195f, 0.954102f, 0.957031f, 0.960449f, 0.963379f, 0.965820f, 0.969238f, 0.971191f, 0.974121f, 0.976074f, 0.978027f, 0.979980f,
+ 0.982422f, 0.984375f, 0.985840f, 0.987793f, 0.989258f, 0.990723f, 0.995605f, 0.995605f, 0.995117f, 0.994629f, 0.994629f, 0.993652f,
+ 0.006634f, 0.022736f, 0.041962f, 0.064026f, 0.090759f, 0.122192f, 0.157593f, 0.197510f, 0.240356f, 0.287354f, 0.335693f, 0.384766f,
+ 0.432373f, 0.479736f, 0.523438f, 0.565430f, 0.604004f, 0.639160f, 0.670898f, 0.699219f, 0.726562f, 0.749023f, 0.770508f, 0.790527f,
+ 0.806641f, 0.822754f, 0.836426f, 0.848633f, 0.859863f, 0.871582f, 0.881348f, 0.889160f, 0.897949f, 0.905273f, 0.912598f, 0.918945f,
+ 0.924316f, 0.929199f, 0.935059f, 0.938965f, 0.943848f, 0.947266f, 0.951660f, 0.955078f, 0.958496f, 0.961914f, 0.964844f, 0.967773f,
+ 0.970703f, 0.973145f, 0.975098f, 0.977539f, 0.979492f, 0.981445f, 0.983887f, 0.985352f, 0.987305f, 0.989258f, 0.995117f, 0.994629f,
+ 0.994141f, 0.994141f, 0.993652f, 0.993164f, 0.005428f, 0.017807f, 0.032166f, 0.049652f, 0.070007f, 0.093811f, 0.121765f, 0.153564f,
+ 0.189087f, 0.228516f, 0.270752f, 0.316162f, 0.362061f, 0.408936f, 0.453857f, 0.498779f, 0.540527f, 0.579590f, 0.615723f, 0.649902f,
+ 0.679688f, 0.707520f, 0.732422f, 0.755371f, 0.775391f, 0.794922f, 0.811035f, 0.826172f, 0.839844f, 0.852051f, 0.864258f, 0.875000f,
+ 0.883301f, 0.892578f, 0.899902f, 0.907715f, 0.914062f, 0.920410f, 0.926270f, 0.931641f, 0.936035f, 0.940918f, 0.945312f, 0.949219f,
+ 0.954102f, 0.957031f, 0.960938f, 0.963379f, 0.966797f, 0.969238f, 0.972168f, 0.974609f, 0.977051f, 0.979492f, 0.980957f, 0.983398f,
+ 0.985352f, 0.987305f, 0.994141f, 0.994141f, 0.994141f, 0.993652f, 0.993164f, 0.992676f, 0.004223f, 0.014046f, 0.025452f, 0.039062f,
+ 0.055115f, 0.073608f, 0.095642f, 0.120239f, 0.149292f, 0.182251f, 0.217529f, 0.257080f, 0.298828f, 0.342773f, 0.387207f, 0.431152f,
+ 0.474609f, 0.516602f, 0.556641f, 0.593750f, 0.628418f, 0.660156f, 0.689453f, 0.715820f, 0.740723f, 0.762207f, 0.782227f, 0.799805f,
+ 0.816406f, 0.830566f, 0.844727f, 0.855469f, 0.867188f, 0.877441f, 0.886230f, 0.895020f, 0.903809f, 0.910645f, 0.917480f, 0.923340f,
+ 0.928711f, 0.934570f, 0.939453f, 0.943848f, 0.948242f, 0.952148f, 0.956055f, 0.959473f, 0.961914f, 0.965820f, 0.968750f, 0.971680f,
+ 0.974121f, 0.975586f, 0.979004f, 0.980957f, 0.983398f, 0.985352f, 0.993652f, 0.993652f, 0.993164f, 0.993164f, 0.992676f, 0.991699f,
+ 0.003532f, 0.011536f, 0.020645f, 0.031342f, 0.044098f, 0.058624f, 0.075989f, 0.096252f, 0.119141f, 0.145386f, 0.175049f, 0.208130f,
+ 0.244385f, 0.283203f, 0.324463f, 0.367432f, 0.410400f, 0.453369f, 0.495361f, 0.534668f, 0.572266f, 0.607910f, 0.641602f, 0.672852f,
+ 0.700195f, 0.725098f, 0.748047f, 0.769531f, 0.789062f, 0.806152f, 0.821777f, 0.835938f, 0.848633f, 0.860352f, 0.872070f, 0.881836f,
+ 0.890625f, 0.898926f, 0.906738f, 0.913086f, 0.919922f, 0.925781f, 0.931641f, 0.936523f, 0.941406f, 0.946289f, 0.950684f, 0.954590f,
+ 0.958008f, 0.961426f, 0.964844f, 0.968262f, 0.970703f, 0.973633f, 0.976074f, 0.978516f, 0.980469f, 0.982910f, 0.992676f, 0.992676f,
+ 0.992188f, 0.992188f, 0.991699f, 0.990723f, 0.002850f, 0.009483f, 0.016647f, 0.025833f, 0.035889f, 0.047424f, 0.061646f, 0.076660f,
+ 0.095642f, 0.117065f, 0.141113f, 0.168457f, 0.198975f, 0.233032f, 0.269775f, 0.308838f, 0.349854f, 0.391357f, 0.432861f, 0.474121f,
+ 0.515625f, 0.552734f, 0.589355f, 0.622559f, 0.654785f, 0.683594f, 0.710938f, 0.735352f, 0.757812f, 0.777344f, 0.795898f, 0.812988f,
+ 0.827637f, 0.842285f, 0.854492f, 0.866211f, 0.876953f, 0.886719f, 0.895508f, 0.902832f, 0.911133f, 0.917969f, 0.924316f, 0.929688f,
+ 0.935059f, 0.940430f, 0.945312f, 0.949219f, 0.953125f, 0.958008f, 0.961426f, 0.964844f, 0.967285f, 0.970703f, 0.973633f, 0.975586f,
+ 0.978516f, 0.981445f, 0.991699f, 0.992188f, 0.991699f, 0.991211f, 0.991211f, 0.990723f, 0.002628f, 0.007713f, 0.014069f, 0.021484f,
+ 0.029709f, 0.038910f, 0.050201f, 0.063171f, 0.078186f, 0.094849f, 0.114563f, 0.137329f, 0.162720f, 0.190918f, 0.222656f, 0.257568f,
+ 0.293945f, 0.332764f, 0.372803f, 0.414551f, 0.455078f, 0.495361f, 0.533691f, 0.571289f, 0.606445f, 0.639160f, 0.668457f, 0.697754f,
+ 0.723633f, 0.746094f, 0.767090f, 0.787598f, 0.804199f, 0.820801f, 0.834473f, 0.848633f, 0.860352f, 0.872559f, 0.882324f, 0.891602f,
+ 0.899902f, 0.907715f, 0.915039f, 0.921387f, 0.927734f, 0.934082f, 0.938965f, 0.944824f, 0.948730f, 0.953125f, 0.956543f, 0.960938f,
+ 0.963867f, 0.967285f, 0.970215f, 0.973145f, 0.976074f, 0.978516f, 0.990234f, 0.990723f, 0.990723f, 0.991211f, 0.990234f, 0.990234f,
+ 0.002131f, 0.006535f, 0.012016f, 0.017670f, 0.024780f, 0.032837f, 0.041199f, 0.051819f, 0.063904f, 0.077759f, 0.093689f, 0.112610f,
+ 0.133057f, 0.156860f, 0.183472f, 0.213257f, 0.245605f, 0.281006f, 0.318115f, 0.357422f, 0.397217f, 0.437500f, 0.478271f, 0.516602f,
+ 0.554688f, 0.589844f, 0.623535f, 0.654785f, 0.684082f, 0.710938f, 0.734375f, 0.757812f, 0.777832f, 0.795898f, 0.813477f, 0.828613f,
+ 0.843262f, 0.855957f, 0.867676f, 0.878906f, 0.888184f, 0.897461f, 0.905273f, 0.912598f, 0.919922f, 0.926758f, 0.932129f, 0.937988f,
+ 0.942871f, 0.947754f, 0.951660f, 0.955566f, 0.960449f, 0.964355f, 0.967285f, 0.970215f, 0.973145f, 0.976074f, 0.989746f, 0.990234f,
+ 0.990234f, 0.990234f, 0.989746f, 0.988770f, 0.001566f, 0.005798f, 0.010231f, 0.015259f, 0.020920f, 0.027176f, 0.034607f, 0.043335f,
+ 0.052887f, 0.064392f, 0.077576f, 0.092712f, 0.109802f, 0.129639f, 0.151611f, 0.176758f, 0.204346f, 0.235474f, 0.269043f, 0.304688f,
+ 0.342529f, 0.381836f, 0.421143f, 0.460449f, 0.500488f, 0.538086f, 0.574219f, 0.608887f, 0.640625f, 0.670898f, 0.699219f, 0.725098f,
+ 0.748535f, 0.769043f, 0.788574f, 0.807129f, 0.823242f, 0.837402f, 0.850586f, 0.863281f, 0.874512f, 0.885254f, 0.894043f, 0.902832f,
+ 0.910645f, 0.917969f, 0.924805f, 0.931152f, 0.936523f, 0.941895f, 0.947266f, 0.951172f, 0.955566f, 0.960449f, 0.963867f, 0.966797f,
+ 0.970703f, 0.973145f, 0.988281f, 0.989258f, 0.989258f, 0.989258f, 0.988770f, 0.988281f, 0.001427f, 0.004749f, 0.008934f, 0.012833f,
+ 0.017670f, 0.023483f, 0.029114f, 0.036438f, 0.044556f, 0.054047f, 0.064453f, 0.077148f, 0.091309f, 0.107544f, 0.125854f, 0.146729f,
+ 0.170776f, 0.197266f, 0.226440f, 0.257568f, 0.292236f, 0.329346f, 0.367188f, 0.405762f, 0.445557f, 0.484619f, 0.522949f, 0.559570f,
+ 0.595215f, 0.627441f, 0.659180f, 0.687012f, 0.714355f, 0.739258f, 0.761719f, 0.781738f, 0.800781f, 0.817383f, 0.833984f, 0.847168f,
+ 0.859375f, 0.872070f, 0.882324f, 0.891602f, 0.900879f, 0.909668f, 0.916504f, 0.923828f, 0.930176f, 0.936523f, 0.941895f, 0.946777f,
+ 0.951172f, 0.956055f, 0.960449f, 0.963867f, 0.967285f, 0.970703f, 0.987305f, 0.988770f, 0.988281f, 0.987793f, 0.987793f, 0.987793f,
+ 0.001357f, 0.004501f, 0.007557f, 0.011284f, 0.015236f, 0.019791f, 0.025101f, 0.030838f, 0.037628f, 0.045532f, 0.054596f, 0.064636f,
+ 0.076355f, 0.089905f, 0.105042f, 0.122498f, 0.142334f, 0.164307f, 0.189697f, 0.217896f, 0.248413f, 0.281494f, 0.316406f, 0.354004f,
+ 0.391846f, 0.430664f, 0.469971f, 0.508301f, 0.545898f, 0.582031f, 0.615723f, 0.647461f, 0.677734f, 0.704590f, 0.731445f, 0.754395f,
+ 0.775391f, 0.794922f, 0.811523f, 0.829102f, 0.842773f, 0.856934f, 0.868652f, 0.880371f, 0.891113f, 0.899414f, 0.908203f, 0.915527f,
+ 0.922852f, 0.930176f, 0.936035f, 0.941406f, 0.947266f, 0.951660f, 0.957031f, 0.960449f, 0.963867f, 0.968262f, 0.986328f, 0.987305f,
+ 0.987793f, 0.987305f, 0.987305f, 0.986816f, 0.001239f, 0.003864f, 0.006699f, 0.009621f, 0.013008f, 0.017059f, 0.021805f, 0.026703f,
+ 0.032562f, 0.039185f, 0.045807f, 0.054352f, 0.064514f, 0.075439f, 0.088257f, 0.102478f, 0.119263f, 0.138306f, 0.159546f, 0.183228f,
+ 0.209961f, 0.239258f, 0.271484f, 0.305176f, 0.341797f, 0.379639f, 0.417480f, 0.456787f, 0.495605f, 0.532227f, 0.570801f, 0.604980f,
+ 0.637207f, 0.666992f, 0.696289f, 0.722656f, 0.746582f, 0.768555f, 0.789062f, 0.808105f, 0.824219f, 0.839844f, 0.854492f, 0.865723f,
+ 0.878418f, 0.888672f, 0.897461f, 0.906738f, 0.915039f, 0.922363f, 0.929199f, 0.935547f, 0.941895f, 0.946289f, 0.952148f, 0.956543f,
+ 0.960449f, 0.964844f, 0.985352f, 0.986816f, 0.986816f, 0.986328f, 0.986328f, 0.985840f, 0.001151f, 0.003429f, 0.005753f, 0.008400f,
+ 0.011391f, 0.014877f, 0.018494f, 0.022858f, 0.028046f, 0.033112f, 0.039642f, 0.046661f, 0.054565f, 0.064026f, 0.074280f, 0.086243f,
+ 0.100403f, 0.116150f, 0.133789f, 0.154053f, 0.176636f, 0.202393f, 0.230957f, 0.261719f, 0.295166f, 0.330322f, 0.367432f, 0.405518f,
+ 0.445312f, 0.483398f, 0.520996f, 0.558105f, 0.594238f, 0.626465f, 0.659668f, 0.688477f, 0.714844f, 0.740723f, 0.763672f, 0.784180f,
+ 0.804199f, 0.821289f, 0.837402f, 0.852051f, 0.864258f, 0.876465f, 0.886719f, 0.897949f, 0.906250f, 0.915039f, 0.922363f, 0.929199f,
+ 0.935547f, 0.941406f, 0.946777f, 0.952637f, 0.958008f, 0.961914f, 0.983887f, 0.985840f, 0.985352f, 0.985352f, 0.984863f, 0.984863f,
+ 0.001000f, 0.002768f, 0.005127f, 0.007515f, 0.010155f, 0.013283f, 0.016205f, 0.019714f, 0.023987f, 0.028854f, 0.033905f, 0.040161f,
+ 0.046814f, 0.054199f, 0.063110f, 0.073303f, 0.084839f, 0.098145f, 0.112854f, 0.129883f, 0.149292f, 0.171387f, 0.195435f, 0.222778f,
+ 0.252686f, 0.285400f, 0.320312f, 0.356689f, 0.394531f, 0.433105f, 0.471924f, 0.510742f, 0.547852f, 0.584473f, 0.617676f, 0.650879f,
+ 0.680664f, 0.708984f, 0.734375f, 0.759277f, 0.780762f, 0.799805f, 0.817383f, 0.834473f, 0.849121f, 0.862793f, 0.875488f, 0.886719f,
+ 0.896484f, 0.906250f, 0.915039f, 0.923828f, 0.930176f, 0.936035f, 0.942871f, 0.948242f, 0.953613f, 0.958008f, 0.982910f, 0.983887f,
+ 0.984375f, 0.983887f, 0.984375f, 0.983398f, 0.000799f, 0.002705f, 0.004459f, 0.006573f, 0.008842f, 0.011375f, 0.014099f, 0.017487f,
+ 0.020798f, 0.024963f, 0.029465f, 0.034637f, 0.039703f, 0.046478f, 0.054047f, 0.062256f, 0.072388f, 0.082947f, 0.095764f, 0.110229f,
+ 0.126099f, 0.144775f, 0.165771f, 0.189697f, 0.216187f, 0.244995f, 0.276123f, 0.310303f, 0.346191f, 0.384521f, 0.422607f, 0.461670f,
+ 0.500000f, 0.538574f, 0.575195f, 0.609863f, 0.643555f, 0.673828f, 0.702637f, 0.730469f, 0.754395f, 0.777344f, 0.797363f, 0.815430f,
+ 0.833008f, 0.848633f, 0.861328f, 0.875000f, 0.886719f, 0.896973f, 0.906738f, 0.915039f, 0.923340f, 0.930176f, 0.936523f, 0.943848f,
+ 0.948730f, 0.954102f, 0.981445f, 0.983398f, 0.982910f, 0.983398f, 0.982910f, 0.982910f, 0.000774f, 0.002554f, 0.003899f, 0.005875f,
+ 0.007759f, 0.009949f, 0.012733f, 0.015060f, 0.018280f, 0.021667f, 0.025574f, 0.029678f, 0.034698f, 0.040405f, 0.046570f, 0.053650f,
+ 0.061462f, 0.071106f, 0.081360f, 0.093323f, 0.107300f, 0.122864f, 0.140747f, 0.160522f, 0.183960f, 0.209229f, 0.237305f, 0.268799f,
+ 0.302002f, 0.337402f, 0.374023f, 0.413330f, 0.451904f, 0.490967f, 0.529785f, 0.567383f, 0.603027f, 0.636719f, 0.668457f, 0.698242f,
+ 0.725586f, 0.750977f, 0.773926f, 0.793945f, 0.813965f, 0.831543f, 0.847656f, 0.861816f, 0.874512f, 0.886719f, 0.897461f, 0.906738f,
+ 0.915527f, 0.923828f, 0.931641f, 0.937988f, 0.944824f, 0.949707f, 0.979980f, 0.981934f, 0.981934f, 0.981934f, 0.981934f, 0.981445f,
+ 0.000657f, 0.001934f, 0.003330f, 0.005280f, 0.006748f, 0.009079f, 0.010994f, 0.013763f, 0.015945f, 0.019150f, 0.022003f, 0.026001f,
+ 0.030350f, 0.034790f, 0.040253f, 0.045898f, 0.052795f, 0.060852f, 0.069641f, 0.079346f, 0.091187f, 0.104492f, 0.119751f, 0.136963f,
+ 0.156372f, 0.178345f, 0.203247f, 0.230957f, 0.260742f, 0.294189f, 0.328613f, 0.365723f, 0.403564f, 0.443115f, 0.482910f, 0.521484f,
+ 0.559570f, 0.596680f, 0.630859f, 0.664062f, 0.694336f, 0.722168f, 0.747559f, 0.771484f, 0.793457f, 0.813477f, 0.830078f, 0.846191f,
+ 0.861816f, 0.874023f, 0.887207f, 0.898438f, 0.908691f, 0.916992f, 0.925293f, 0.933594f, 0.939941f, 0.946777f, 0.978516f, 0.980469f,
+ 0.980469f, 0.980469f, 0.980469f, 0.980469f, 0.000818f, 0.001935f, 0.003246f, 0.004658f, 0.006229f, 0.007912f, 0.010017f, 0.012093f,
+ 0.014259f, 0.016586f, 0.019653f, 0.022659f, 0.026413f, 0.030289f, 0.034790f, 0.039917f, 0.045441f, 0.052338f, 0.059479f, 0.068115f,
+ 0.077759f, 0.089050f, 0.102051f, 0.116272f, 0.133179f, 0.152344f, 0.173340f, 0.197876f, 0.224243f, 0.254150f, 0.286621f, 0.321533f,
+ 0.357666f, 0.396729f, 0.436279f, 0.475830f, 0.514648f, 0.553711f, 0.590332f, 0.626465f, 0.659180f, 0.689941f, 0.719238f, 0.746094f,
+ 0.770020f, 0.792480f, 0.812500f, 0.830566f, 0.846680f, 0.862305f, 0.875977f, 0.888184f, 0.899414f, 0.910156f, 0.918945f, 0.927246f,
+ 0.935059f, 0.941895f, 0.977051f, 0.979004f, 0.979492f, 0.979004f, 0.979492f, 0.979004f, 0.000583f, 0.001696f, 0.003044f, 0.004276f,
+ 0.005394f, 0.007111f, 0.009048f, 0.010727f, 0.012802f, 0.014549f, 0.017319f, 0.019943f, 0.023132f, 0.026459f, 0.030212f, 0.034576f,
+ 0.039612f, 0.045105f, 0.051422f, 0.058594f, 0.066833f, 0.076416f, 0.087341f, 0.099792f, 0.113647f, 0.130005f, 0.147827f, 0.168945f,
+ 0.192261f, 0.218750f, 0.247803f, 0.280029f, 0.314209f, 0.351074f, 0.389404f, 0.429199f, 0.468750f, 0.508301f, 0.547852f, 0.585938f,
+ 0.622070f, 0.655762f, 0.687988f, 0.718262f, 0.744629f, 0.769531f, 0.792480f, 0.812500f, 0.832520f, 0.848633f, 0.863770f, 0.877441f,
+ 0.890137f, 0.901367f, 0.912109f, 0.921387f, 0.929199f, 0.937500f, 0.975586f, 0.978027f, 0.978027f, 0.977539f, 0.977539f, 0.977051f,
+ 0.000463f, 0.001634f, 0.002899f, 0.003574f, 0.004932f, 0.006233f, 0.007866f, 0.009644f, 0.011055f, 0.012894f, 0.015518f, 0.017792f,
+ 0.020279f, 0.023178f, 0.026657f, 0.030136f, 0.034271f, 0.039062f, 0.044586f, 0.050446f, 0.057739f, 0.065613f, 0.074646f, 0.084900f,
+ 0.097107f, 0.111023f, 0.126099f, 0.143921f, 0.164673f, 0.187500f, 0.213257f, 0.242065f, 0.273926f, 0.308594f, 0.344971f, 0.383301f,
+ 0.423340f, 0.463623f, 0.503906f, 0.543945f, 0.582520f, 0.619629f, 0.653809f, 0.686523f, 0.717285f, 0.744629f, 0.770020f, 0.792969f,
+ 0.814453f, 0.833496f, 0.850098f, 0.866211f, 0.879395f, 0.893066f, 0.904297f, 0.914551f, 0.923828f, 0.932129f, 0.973145f, 0.976074f,
+ 0.976562f, 0.976074f, 0.976074f, 0.976074f, 0.000472f, 0.001289f, 0.002508f, 0.003481f, 0.004459f, 0.005894f, 0.007042f, 0.008232f,
+ 0.009972f, 0.011719f, 0.013435f, 0.015884f, 0.017899f, 0.020386f, 0.023422f, 0.026428f, 0.030411f, 0.034180f, 0.038757f, 0.043854f,
+ 0.049652f, 0.056549f, 0.064270f, 0.073303f, 0.083252f, 0.095093f, 0.107910f, 0.123169f, 0.141113f, 0.160645f, 0.183472f, 0.208618f,
+ 0.237305f, 0.268799f, 0.302734f, 0.339600f, 0.377930f, 0.418457f, 0.459473f, 0.500000f, 0.540527f, 0.579102f, 0.617188f, 0.652832f,
+ 0.685547f, 0.716309f, 0.745117f, 0.771484f, 0.794922f, 0.815918f, 0.834961f, 0.853027f, 0.868652f, 0.882324f, 0.895996f, 0.907227f,
+ 0.916992f, 0.927246f, 0.972168f, 0.974121f, 0.975098f, 0.973633f, 0.974609f, 0.973633f, 0.000238f, 0.001453f, 0.002047f, 0.002985f,
+ 0.004227f, 0.005272f, 0.006096f, 0.007309f, 0.008957f, 0.010437f, 0.012184f, 0.014214f, 0.015793f, 0.018082f, 0.020538f, 0.023270f,
+ 0.026505f, 0.029648f, 0.033813f, 0.038300f, 0.043457f, 0.049042f, 0.055298f, 0.062744f, 0.070984f, 0.081299f, 0.092590f, 0.105591f,
+ 0.120361f, 0.137695f, 0.156982f, 0.179443f, 0.204346f, 0.232788f, 0.263672f, 0.297363f, 0.334229f, 0.373047f, 0.414307f, 0.455322f,
+ 0.497314f, 0.538086f, 0.578613f, 0.616211f, 0.653320f, 0.686523f, 0.718262f, 0.747559f, 0.773438f, 0.797363f, 0.818848f, 0.838867f,
+ 0.856934f, 0.871582f, 0.885742f, 0.898926f, 0.910645f, 0.920410f, 0.970215f, 0.971680f, 0.972656f, 0.972656f, 0.972168f, 0.972168f,
+ 0.000376f, 0.001075f, 0.002052f, 0.002823f, 0.003603f, 0.004509f, 0.005619f, 0.007008f, 0.008064f, 0.009132f, 0.010849f, 0.012314f,
+ 0.013817f, 0.015945f, 0.018188f, 0.020676f, 0.022995f, 0.026230f, 0.029587f, 0.033234f, 0.037598f, 0.042328f, 0.048004f, 0.054230f,
+ 0.061188f, 0.069824f, 0.079468f, 0.090454f, 0.103271f, 0.117493f, 0.134644f, 0.153931f, 0.175293f, 0.200806f, 0.228149f, 0.259277f,
+ 0.293945f, 0.330566f, 0.370117f, 0.410889f, 0.453369f, 0.495605f, 0.537109f, 0.578125f, 0.616699f, 0.653809f, 0.689453f, 0.721191f,
+ 0.750000f, 0.776855f, 0.800293f, 0.822754f, 0.841309f, 0.859863f, 0.876465f, 0.890137f, 0.902832f, 0.914062f, 0.967773f, 0.970703f,
+ 0.970703f, 0.970703f, 0.970703f, 0.970703f, 0.000237f, 0.000972f, 0.001674f, 0.002413f, 0.003336f, 0.003956f, 0.005093f, 0.006039f,
+ 0.007069f, 0.008202f, 0.009613f, 0.011017f, 0.012520f, 0.014282f, 0.016068f, 0.017853f, 0.020508f, 0.023117f, 0.025986f, 0.029160f,
+ 0.032898f, 0.036865f, 0.041565f, 0.046997f, 0.052887f, 0.060089f, 0.068176f, 0.077515f, 0.088257f, 0.100586f, 0.114929f, 0.131592f,
+ 0.150635f, 0.172241f, 0.196411f, 0.224731f, 0.255859f, 0.290039f, 0.327393f, 0.367188f, 0.409180f, 0.451172f, 0.493896f, 0.536621f,
+ 0.578613f, 0.618164f, 0.655762f, 0.691406f, 0.724121f, 0.753906f, 0.781738f, 0.805176f, 0.827637f, 0.847656f, 0.864746f, 0.880859f,
+ 0.895508f, 0.907715f, 0.965332f, 0.968262f, 0.968750f, 0.969238f, 0.967773f, 0.967773f, 0.000450f, 0.001033f, 0.001554f, 0.002131f,
+ 0.002939f, 0.003662f, 0.004551f, 0.005722f, 0.006405f, 0.007542f, 0.008484f, 0.009750f, 0.011017f, 0.012596f, 0.014046f, 0.015854f,
+ 0.017975f, 0.020264f, 0.022736f, 0.025497f, 0.028671f, 0.031952f, 0.036011f, 0.040741f, 0.045746f, 0.051910f, 0.058868f, 0.066772f,
+ 0.075867f, 0.086304f, 0.098328f, 0.112244f, 0.128784f, 0.147217f, 0.168945f, 0.193848f, 0.221558f, 0.252441f, 0.287109f, 0.324951f,
+ 0.365234f, 0.407715f, 0.450684f, 0.494629f, 0.539062f, 0.580566f, 0.621094f, 0.659668f, 0.695801f, 0.729004f, 0.758789f, 0.786133f,
+ 0.810547f, 0.833008f, 0.852539f, 0.870117f, 0.886719f, 0.900879f, 0.962891f, 0.966309f, 0.966309f, 0.966797f, 0.966797f, 0.966309f,
+ 0.000304f, 0.001050f, 0.001257f, 0.002295f, 0.002689f, 0.003885f, 0.004284f, 0.004726f, 0.005547f, 0.006721f, 0.007595f, 0.008667f,
+ 0.009811f, 0.011330f, 0.012642f, 0.014130f, 0.016098f, 0.017975f, 0.019867f, 0.022247f, 0.024811f, 0.028030f, 0.031403f, 0.035461f,
+ 0.039642f, 0.044800f, 0.050720f, 0.057495f, 0.065002f, 0.073914f, 0.084290f, 0.095947f, 0.109985f, 0.126343f, 0.144409f, 0.166138f,
+ 0.190918f, 0.218750f, 0.250244f, 0.285400f, 0.323730f, 0.364258f, 0.407471f, 0.452148f, 0.496338f, 0.540527f, 0.584473f, 0.625977f,
+ 0.665039f, 0.701172f, 0.735352f, 0.765137f, 0.792480f, 0.817383f, 0.840332f, 0.859863f, 0.876953f, 0.893066f, 0.959961f, 0.963379f,
+ 0.963867f, 0.964355f, 0.963867f, 0.963867f, 0.000228f, 0.000682f, 0.001293f, 0.001717f, 0.002352f, 0.003160f, 0.003626f, 0.004360f,
+ 0.005348f, 0.005871f, 0.006870f, 0.007660f, 0.008957f, 0.010002f, 0.011299f, 0.012375f, 0.014099f, 0.015900f, 0.017670f, 0.019363f,
+ 0.022034f, 0.024216f, 0.027420f, 0.030930f, 0.034454f, 0.038910f, 0.044006f, 0.049530f, 0.055878f, 0.063477f, 0.072083f, 0.082275f,
+ 0.094177f, 0.107666f, 0.123840f, 0.142090f, 0.163452f, 0.188477f, 0.216919f, 0.248047f, 0.283447f, 0.322754f, 0.364990f, 0.408447f,
+ 0.453613f, 0.500000f, 0.544922f, 0.589355f, 0.631348f, 0.671387f, 0.708008f, 0.742188f, 0.773438f, 0.800781f, 0.824219f, 0.846680f,
+ 0.866699f, 0.884277f, 0.958008f, 0.960938f, 0.961426f, 0.962402f, 0.961914f, 0.960938f, 0.000239f, 0.000731f, 0.001204f, 0.001637f,
+ 0.002144f, 0.002913f, 0.003521f, 0.003828f, 0.004517f, 0.005291f, 0.006203f, 0.006954f, 0.007740f, 0.008911f, 0.010239f, 0.011017f,
+ 0.012413f, 0.013863f, 0.015396f, 0.017181f, 0.019196f, 0.021439f, 0.024078f, 0.026993f, 0.030182f, 0.033752f, 0.038055f, 0.042664f,
+ 0.048004f, 0.054657f, 0.061920f, 0.070312f, 0.080688f, 0.092041f, 0.105774f, 0.121094f, 0.140015f, 0.161255f, 0.186523f, 0.214966f,
+ 0.246948f, 0.283203f, 0.322998f, 0.365967f, 0.410400f, 0.457275f, 0.503906f, 0.550781f, 0.596191f, 0.638672f, 0.678711f, 0.716797f,
+ 0.750488f, 0.781738f, 0.809082f, 0.833496f, 0.855469f, 0.874512f, 0.954590f, 0.958008f, 0.958984f, 0.958984f, 0.958984f, 0.958984f,
+ 0.000226f, 0.000663f, 0.001073f, 0.001420f, 0.002163f, 0.002567f, 0.003052f, 0.003433f, 0.004181f, 0.004734f, 0.005516f, 0.006424f,
+ 0.007050f, 0.008003f, 0.008659f, 0.009827f, 0.011086f, 0.012398f, 0.013649f, 0.015266f, 0.016891f, 0.018921f, 0.021118f, 0.023560f,
+ 0.026505f, 0.029556f, 0.032715f, 0.036865f, 0.041077f, 0.046570f, 0.053314f, 0.060150f, 0.068787f, 0.078552f, 0.090027f, 0.103638f,
+ 0.119690f, 0.138184f, 0.159546f, 0.184692f, 0.213745f, 0.245972f, 0.283203f, 0.324219f, 0.367920f, 0.414062f, 0.461914f, 0.509766f,
+ 0.557129f, 0.604492f, 0.647461f, 0.688965f, 0.727051f, 0.761230f, 0.791504f, 0.819824f, 0.844238f, 0.865234f, 0.951660f, 0.955566f,
+ 0.955566f, 0.956055f, 0.955078f, 0.956543f, 0.000156f, 0.000587f, 0.001056f, 0.001499f, 0.001647f, 0.002380f, 0.002594f, 0.003469f,
+ 0.003777f, 0.004112f, 0.004925f, 0.005699f, 0.006180f, 0.007019f, 0.007957f, 0.008942f, 0.009560f, 0.010727f, 0.011963f, 0.013123f,
+ 0.014885f, 0.016556f, 0.018494f, 0.020355f, 0.022766f, 0.025330f, 0.028320f, 0.031830f, 0.035736f, 0.040161f, 0.045532f, 0.052032f,
+ 0.059113f, 0.066833f, 0.076782f, 0.088501f, 0.101868f, 0.117310f, 0.136108f, 0.157959f, 0.183105f, 0.212769f, 0.247070f, 0.284424f,
+ 0.326660f, 0.371338f, 0.419189f, 0.468994f, 0.518066f, 0.567383f, 0.613770f, 0.658691f, 0.700684f, 0.738770f, 0.771973f, 0.803223f,
+ 0.829590f, 0.854492f, 0.947266f, 0.952637f, 0.952637f, 0.952637f, 0.953125f, 0.952637f, 0.000155f, 0.000358f, 0.000859f, 0.001402f,
+ 0.001830f, 0.002092f, 0.002499f, 0.002672f, 0.003410f, 0.003763f, 0.004375f, 0.005077f, 0.005535f, 0.006554f, 0.007004f, 0.007874f,
+ 0.008537f, 0.009529f, 0.010742f, 0.011749f, 0.013016f, 0.014427f, 0.015945f, 0.017929f, 0.019775f, 0.022018f, 0.024460f, 0.027618f,
+ 0.030640f, 0.034668f, 0.039154f, 0.044250f, 0.050293f, 0.057068f, 0.065491f, 0.074951f, 0.086487f, 0.099670f, 0.115906f, 0.134277f,
+ 0.156860f, 0.182495f, 0.213135f, 0.248047f, 0.286621f, 0.329834f, 0.376709f, 0.426025f, 0.476562f, 0.527832f, 0.577637f, 0.626465f,
+ 0.671387f, 0.713379f, 0.752441f, 0.784668f, 0.815430f, 0.841797f, 0.944336f, 0.948242f, 0.949219f, 0.949219f, 0.949219f, 0.949707f,
+ 0.000233f, 0.000639f, 0.000930f, 0.001277f, 0.001579f, 0.001916f, 0.002041f, 0.002625f, 0.003035f, 0.003571f, 0.004124f, 0.004375f,
+ 0.004978f, 0.005379f, 0.006348f, 0.006886f, 0.007526f, 0.008430f, 0.009216f, 0.010262f, 0.011436f, 0.012779f, 0.014160f, 0.015549f,
+ 0.017120f, 0.019089f, 0.021164f, 0.023621f, 0.026352f, 0.029724f, 0.033447f, 0.037842f, 0.042603f, 0.048737f, 0.055573f, 0.063721f,
+ 0.073364f, 0.084778f, 0.098206f, 0.114197f, 0.133423f, 0.155762f, 0.182739f, 0.213623f, 0.249512f, 0.289795f, 0.335205f, 0.383789f,
+ 0.434814f, 0.487305f, 0.540039f, 0.591797f, 0.640137f, 0.686035f, 0.727539f, 0.765137f, 0.800293f, 0.830078f, 0.940430f, 0.944336f,
+ 0.945312f, 0.946289f, 0.945801f, 0.945312f, 0.000217f, 0.000519f, 0.000848f, 0.001180f, 0.001366f, 0.001589f, 0.001986f, 0.002354f,
+ 0.002987f, 0.003170f, 0.003576f, 0.003901f, 0.004440f, 0.004738f, 0.005543f, 0.006058f, 0.006508f, 0.007511f, 0.008163f, 0.009132f,
+ 0.010078f, 0.011246f, 0.012390f, 0.013412f, 0.014938f, 0.016632f, 0.018433f, 0.020676f, 0.022995f, 0.025726f, 0.028702f, 0.032227f,
+ 0.036377f, 0.041992f, 0.047394f, 0.053986f, 0.062195f, 0.071716f, 0.082825f, 0.096802f, 0.112732f, 0.132202f, 0.155273f, 0.182861f,
+ 0.215210f, 0.252441f, 0.294678f, 0.341553f, 0.392090f, 0.445557f, 0.499512f, 0.553711f, 0.606445f, 0.656250f, 0.703125f, 0.745605f,
+ 0.782715f, 0.816895f, 0.935547f, 0.939941f, 0.941406f, 0.941406f, 0.941406f, 0.940918f, 0.000242f, 0.000678f, 0.000781f, 0.000928f,
+ 0.001200f, 0.001592f, 0.001694f, 0.002096f, 0.002703f, 0.002903f, 0.003170f, 0.003531f, 0.003918f, 0.004433f, 0.004955f, 0.005390f,
+ 0.005939f, 0.006454f, 0.007298f, 0.007782f, 0.008759f, 0.009567f, 0.010559f, 0.011650f, 0.013046f, 0.014420f, 0.015793f, 0.017715f,
+ 0.019699f, 0.021774f, 0.024460f, 0.027481f, 0.031082f, 0.035065f, 0.039917f, 0.045715f, 0.052246f, 0.060486f, 0.070129f, 0.081482f,
+ 0.095093f, 0.111755f, 0.131714f, 0.155273f, 0.183838f, 0.217285f, 0.256348f, 0.300781f, 0.350342f, 0.403076f, 0.458252f, 0.514160f,
+ 0.570312f, 0.624512f, 0.675781f, 0.722168f, 0.763672f, 0.800293f, 0.930664f, 0.935547f, 0.937500f, 0.937012f, 0.937500f, 0.937012f,
+ 0.000239f, 0.000297f, 0.000667f, 0.000785f, 0.001044f, 0.001269f, 0.001569f, 0.001950f, 0.002224f, 0.002419f, 0.002810f, 0.003063f,
+ 0.003626f, 0.003895f, 0.004261f, 0.004749f, 0.005066f, 0.005726f, 0.006260f, 0.007019f, 0.007771f, 0.008369f, 0.008919f, 0.009941f,
+ 0.011101f, 0.012375f, 0.013519f, 0.015190f, 0.016891f, 0.018631f, 0.021011f, 0.023590f, 0.026581f, 0.029892f, 0.033875f, 0.038757f,
+ 0.044281f, 0.051147f, 0.058746f, 0.068481f, 0.079834f, 0.094116f, 0.110779f, 0.131348f, 0.155884f, 0.185669f, 0.220825f, 0.261963f,
+ 0.308594f, 0.360352f, 0.416260f, 0.473877f, 0.532715f, 0.589844f, 0.645508f, 0.696289f, 0.743652f, 0.784668f, 0.925781f, 0.930664f,
+ 0.932129f, 0.932129f, 0.932129f, 0.932129f, 0.000226f, 0.000351f, 0.000434f, 0.000624f, 0.000887f, 0.001040f, 0.001246f, 0.001665f,
+ 0.001856f, 0.002384f, 0.002420f, 0.002842f, 0.002874f, 0.003471f, 0.003735f, 0.004078f, 0.004639f, 0.004910f, 0.005531f, 0.006065f,
+ 0.006664f, 0.007370f, 0.007690f, 0.008690f, 0.009544f, 0.010536f, 0.011795f, 0.012833f, 0.014183f, 0.015900f, 0.017899f, 0.019684f,
+ 0.022430f, 0.025253f, 0.028412f, 0.032410f, 0.037201f, 0.042633f, 0.049316f, 0.057159f, 0.066772f, 0.078186f, 0.092590f, 0.110107f,
+ 0.131348f, 0.156982f, 0.188232f, 0.225342f, 0.269043f, 0.318604f, 0.373535f, 0.431641f, 0.492188f, 0.554199f, 0.613281f, 0.668945f,
+ 0.720703f, 0.766602f, 0.919922f, 0.925781f, 0.926758f, 0.926758f, 0.927246f, 0.926758f, 0.000000f, 0.000340f, 0.000458f, 0.000715f,
+ 0.000823f, 0.000895f, 0.001165f, 0.001518f, 0.001636f, 0.001876f, 0.002190f, 0.002472f, 0.002640f, 0.002964f, 0.003340f, 0.003527f,
+ 0.004005f, 0.004227f, 0.004803f, 0.005260f, 0.005878f, 0.006042f, 0.006805f, 0.007500f, 0.008469f, 0.009132f, 0.009949f, 0.011009f,
+ 0.012077f, 0.013687f, 0.014938f, 0.016785f, 0.018997f, 0.021194f, 0.023895f, 0.027283f, 0.030945f, 0.035583f, 0.040955f, 0.047760f,
+ 0.055573f, 0.065247f, 0.077209f, 0.091736f, 0.109619f, 0.131470f, 0.159058f, 0.192017f, 0.231812f, 0.278076f, 0.331543f, 0.389404f,
+ 0.450928f, 0.513672f, 0.577637f, 0.638672f, 0.695801f, 0.746582f, 0.914062f, 0.919922f, 0.920898f, 0.921387f, 0.921387f, 0.921387f,
+ 0.000146f, 0.000319f, 0.000443f, 0.000458f, 0.000704f, 0.000894f, 0.001199f, 0.001324f, 0.001549f, 0.001592f, 0.002081f, 0.002092f,
+ 0.002237f, 0.002604f, 0.002815f, 0.003159f, 0.003510f, 0.003937f, 0.004147f, 0.004425f, 0.004814f, 0.005318f, 0.005878f, 0.006413f,
+ 0.006924f, 0.007782f, 0.008408f, 0.009239f, 0.010414f, 0.011505f, 0.012642f, 0.014015f, 0.015884f, 0.017563f, 0.019852f, 0.022598f,
+ 0.025650f, 0.029663f, 0.033875f, 0.039307f, 0.045898f, 0.053955f, 0.063782f, 0.075928f, 0.090820f, 0.109497f, 0.132690f, 0.161621f,
+ 0.196777f, 0.239624f, 0.290039f, 0.346436f, 0.408203f, 0.473633f, 0.540527f, 0.605957f, 0.667969f, 0.725586f, 0.907715f, 0.914062f,
+ 0.914062f, 0.915039f, 0.915039f, 0.915039f, 0.000121f, 0.000251f, 0.000506f, 0.000532f, 0.000665f, 0.000830f, 0.001190f, 0.001164f,
+ 0.001290f, 0.001413f, 0.001755f, 0.001900f, 0.002157f, 0.002319f, 0.002422f, 0.002853f, 0.003042f, 0.003254f, 0.003529f, 0.003725f,
+ 0.004288f, 0.004585f, 0.005043f, 0.005539f, 0.005970f, 0.006386f, 0.007126f, 0.007812f, 0.008652f, 0.009598f, 0.010651f, 0.011803f,
+ 0.013130f, 0.014702f, 0.016510f, 0.018814f, 0.021011f, 0.024368f, 0.028122f, 0.032379f, 0.037506f, 0.044128f, 0.052277f, 0.062042f,
+ 0.075073f, 0.090088f, 0.110107f, 0.134766f, 0.165405f, 0.203613f, 0.249268f, 0.303955f, 0.365234f, 0.431396f, 0.501465f, 0.571777f,
+ 0.638672f, 0.702148f, 0.900879f, 0.906738f, 0.907227f, 0.908203f, 0.907227f, 0.908203f, 0.000241f, 0.000122f, 0.000417f, 0.000505f,
+ 0.000741f, 0.000782f, 0.000916f, 0.001145f, 0.001189f, 0.001289f, 0.001331f, 0.001565f, 0.001779f, 0.002020f, 0.002171f, 0.002228f,
+ 0.002623f, 0.002752f, 0.002949f, 0.003157f, 0.003515f, 0.003847f, 0.004082f, 0.004429f, 0.004990f, 0.005405f, 0.006008f, 0.006603f,
+ 0.007103f, 0.007889f, 0.008789f, 0.009766f, 0.010605f, 0.012177f, 0.013672f, 0.015305f, 0.017487f, 0.019913f, 0.022781f, 0.026245f,
+ 0.030670f, 0.035980f, 0.042389f, 0.050812f, 0.060883f, 0.073792f, 0.090088f, 0.111145f, 0.138062f, 0.171143f, 0.212524f, 0.262695f,
+ 0.322266f, 0.388184f, 0.460205f, 0.533203f, 0.606445f, 0.676758f, 0.893066f, 0.898926f, 0.899414f, 0.899414f, 0.900879f, 0.900391f,
+ 0.000000f, 0.000114f, 0.000227f, 0.000407f, 0.000532f, 0.000732f, 0.000714f, 0.000922f, 0.000993f, 0.001072f, 0.001190f, 0.001412f,
+ 0.001569f, 0.001726f, 0.001959f, 0.002071f, 0.002159f, 0.002350f, 0.002565f, 0.002729f, 0.003090f, 0.003248f, 0.003702f, 0.003761f,
+ 0.004192f, 0.004585f, 0.004925f, 0.005272f, 0.005966f, 0.006405f, 0.007275f, 0.007965f, 0.008850f, 0.009872f, 0.011017f, 0.012383f,
+ 0.014275f, 0.015900f, 0.018463f, 0.021194f, 0.024673f, 0.028870f, 0.034271f, 0.040955f, 0.048981f, 0.059723f, 0.073059f, 0.090149f,
+ 0.112549f, 0.141357f, 0.178467f, 0.223755f, 0.280029f, 0.345215f, 0.417969f, 0.494385f, 0.572266f, 0.648438f, 0.884277f, 0.890137f,
+ 0.891602f, 0.891602f, 0.893066f, 0.892090f, 0.000000f, 0.000219f, 0.000211f, 0.000333f, 0.000559f, 0.000609f, 0.000788f, 0.000805f,
+ 0.000869f, 0.000903f, 0.001101f, 0.001166f, 0.001302f, 0.001399f, 0.001456f, 0.001668f, 0.001853f, 0.001999f, 0.002102f, 0.002256f,
+ 0.002447f, 0.002728f, 0.002943f, 0.003178f, 0.003515f, 0.003836f, 0.004074f, 0.004475f, 0.004745f, 0.005325f, 0.005970f, 0.006569f,
+ 0.007248f, 0.008102f, 0.008888f, 0.010132f, 0.011169f, 0.012947f, 0.014763f, 0.016891f, 0.019760f, 0.023087f, 0.027176f, 0.032562f,
+ 0.038940f, 0.047516f, 0.058167f, 0.072754f, 0.090698f, 0.114929f, 0.146851f, 0.187744f, 0.239258f, 0.301514f, 0.373291f, 0.452637f,
+ 0.535645f, 0.617676f, 0.874512f, 0.880859f, 0.882324f, 0.883301f, 0.883301f, 0.882324f, 0.000204f, 0.000207f, 0.000204f, 0.000322f,
+ 0.000435f, 0.000480f, 0.000556f, 0.000615f, 0.000747f, 0.000782f, 0.000844f, 0.001006f, 0.001159f, 0.001191f, 0.001231f, 0.001450f,
+ 0.001585f, 0.001633f, 0.001790f, 0.001919f, 0.002117f, 0.002298f, 0.002432f, 0.002651f, 0.002939f, 0.003172f, 0.003399f, 0.003614f,
+ 0.003944f, 0.004421f, 0.004704f, 0.005203f, 0.005886f, 0.006454f, 0.007160f, 0.008049f, 0.009041f, 0.010201f, 0.011627f, 0.013237f,
+ 0.015404f, 0.018097f, 0.021469f, 0.025284f, 0.030884f, 0.036987f, 0.045990f, 0.056915f, 0.072083f, 0.092163f, 0.119141f, 0.154419f,
+ 0.200928f, 0.259277f, 0.328857f, 0.409424f, 0.495605f, 0.584473f, 0.864258f, 0.871094f, 0.872070f, 0.873047f, 0.872559f, 0.873047f,
+ 0.000000f, 0.000044f, 0.000176f, 0.000290f, 0.000410f, 0.000390f, 0.000513f, 0.000546f, 0.000647f, 0.000680f, 0.000827f, 0.000858f,
+ 0.000958f, 0.001131f, 0.001102f, 0.001223f, 0.001367f, 0.001401f, 0.001525f, 0.001610f, 0.001826f, 0.001821f, 0.002039f, 0.002253f,
+ 0.002459f, 0.002617f, 0.002708f, 0.003036f, 0.003279f, 0.003431f, 0.003805f, 0.004219f, 0.004471f, 0.004929f, 0.005569f, 0.006310f,
+ 0.007107f, 0.007988f, 0.009003f, 0.010384f, 0.011856f, 0.014015f, 0.016418f, 0.019669f, 0.023666f, 0.028809f, 0.035583f, 0.044159f,
+ 0.056458f, 0.072571f, 0.094604f, 0.124329f, 0.164917f, 0.218018f, 0.284912f, 0.364746f, 0.454102f, 0.549316f, 0.853027f, 0.859863f,
+ 0.861328f, 0.861816f, 0.861816f, 0.861816f, 0.000000f, 0.000069f, 0.000120f, 0.000345f, 0.000371f, 0.000398f, 0.000452f, 0.000396f,
+ 0.000498f, 0.000530f, 0.000596f, 0.000648f, 0.000781f, 0.000921f, 0.000995f, 0.001007f, 0.001101f, 0.001146f, 0.001282f, 0.001278f,
+ 0.001471f, 0.001554f, 0.001710f, 0.001811f, 0.001995f, 0.001986f, 0.002314f, 0.002399f, 0.002499f, 0.002903f, 0.002975f, 0.003305f,
+ 0.003605f, 0.004086f, 0.004425f, 0.005081f, 0.005402f, 0.006035f, 0.006889f, 0.007755f, 0.009041f, 0.010422f, 0.012672f, 0.014885f,
+ 0.017746f, 0.021530f, 0.026733f, 0.033691f, 0.043060f, 0.055847f, 0.073181f, 0.097473f, 0.132324f, 0.179077f, 0.241821f, 0.320068f,
+ 0.410400f, 0.510742f, 0.839844f, 0.847656f, 0.849121f, 0.849609f, 0.849121f, 0.849609f, 0.000000f, 0.000000f, 0.000121f, 0.000243f,
+ 0.000321f, 0.000354f, 0.000341f, 0.000431f, 0.000423f, 0.000444f, 0.000473f, 0.000508f, 0.000595f, 0.000706f, 0.000737f, 0.000861f,
+ 0.000869f, 0.000926f, 0.001055f, 0.001104f, 0.001199f, 0.001306f, 0.001360f, 0.001433f, 0.001530f, 0.001555f, 0.001673f, 0.001942f,
+ 0.002138f, 0.002247f, 0.002562f, 0.002609f, 0.002911f, 0.003204f, 0.003466f, 0.003757f, 0.004192f, 0.004845f, 0.005482f, 0.006008f,
+ 0.006874f, 0.007904f, 0.009171f, 0.011124f, 0.013260f, 0.015839f, 0.019821f, 0.024872f, 0.031982f, 0.041534f, 0.055054f, 0.075012f,
+ 0.103516f, 0.143677f, 0.199951f, 0.273438f, 0.364502f, 0.469482f, 0.825684f, 0.834473f, 0.834961f, 0.835938f, 0.835938f, 0.835938f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000199f, 0.000272f, 0.000265f, 0.000363f, 0.000379f, 0.000388f, 0.000489f, 0.000500f,
+ 0.000488f, 0.000569f, 0.000604f, 0.000700f, 0.000683f, 0.000720f, 0.000784f, 0.000844f, 0.001009f, 0.001047f, 0.001108f, 0.001258f,
+ 0.001276f, 0.001388f, 0.001410f, 0.001565f, 0.001592f, 0.001814f, 0.001800f, 0.002167f, 0.002192f, 0.002556f, 0.002665f, 0.002905f,
+ 0.003195f, 0.003574f, 0.004028f, 0.004513f, 0.005127f, 0.005859f, 0.006847f, 0.008018f, 0.009491f, 0.011452f, 0.014099f, 0.017792f,
+ 0.022995f, 0.030258f, 0.040588f, 0.055878f, 0.078308f, 0.111450f, 0.160278f, 0.229248f, 0.318359f, 0.425781f, 0.810547f, 0.818359f,
+ 0.820312f, 0.821777f, 0.821777f, 0.820801f, 0.000000f, 0.000121f, 0.000120f, 0.000172f, 0.000195f, 0.000171f, 0.000208f, 0.000272f,
+ 0.000316f, 0.000333f, 0.000348f, 0.000355f, 0.000412f, 0.000410f, 0.000515f, 0.000485f, 0.000545f, 0.000656f, 0.000777f, 0.000659f,
+ 0.000705f, 0.000762f, 0.000874f, 0.000927f, 0.000959f, 0.000978f, 0.001045f, 0.001228f, 0.001294f, 0.001398f, 0.001443f, 0.001637f,
+ 0.001752f, 0.001925f, 0.002005f, 0.002230f, 0.002407f, 0.002670f, 0.002895f, 0.003267f, 0.003933f, 0.004280f, 0.005051f, 0.005772f,
+ 0.006718f, 0.008141f, 0.010117f, 0.012383f, 0.015930f, 0.020920f, 0.028671f, 0.039673f, 0.056702f, 0.083313f, 0.124695f, 0.185791f,
+ 0.270996f, 0.379639f, 0.793457f, 0.801270f, 0.803711f, 0.803711f, 0.804688f, 0.804688f, 0.000000f, 0.000121f, 0.000119f, 0.000144f,
+ 0.000149f, 0.000166f, 0.000173f, 0.000167f, 0.000214f, 0.000245f, 0.000334f, 0.000287f, 0.000303f, 0.000391f, 0.000401f, 0.000440f,
+ 0.000469f, 0.000493f, 0.000534f, 0.000513f, 0.000690f, 0.000682f, 0.000645f, 0.000712f, 0.000715f, 0.000747f, 0.000842f, 0.000849f,
+ 0.000967f, 0.000995f, 0.001178f, 0.001167f, 0.001273f, 0.001395f, 0.001586f, 0.001748f, 0.001796f, 0.001986f, 0.002132f, 0.002476f,
+ 0.002893f, 0.003294f, 0.003653f, 0.004086f, 0.004890f, 0.005821f, 0.006927f, 0.008553f, 0.010857f, 0.014137f, 0.019211f, 0.027084f,
+ 0.039642f, 0.059448f, 0.092468f, 0.144775f, 0.224487f, 0.332764f, 0.775391f, 0.784668f, 0.786133f, 0.786133f, 0.787109f, 0.786621f,
+ 0.000000f, 0.000000f, 0.000118f, 0.000116f, 0.000115f, 0.000113f, 0.000140f, 0.000140f, 0.000149f, 0.000220f, 0.000171f, 0.000255f,
+ 0.000274f, 0.000292f, 0.000318f, 0.000295f, 0.000346f, 0.000352f, 0.000380f, 0.000406f, 0.000401f, 0.000533f, 0.000490f, 0.000551f,
+ 0.000558f, 0.000648f, 0.000628f, 0.000723f, 0.000788f, 0.000749f, 0.000836f, 0.000941f, 0.000997f, 0.001065f, 0.001112f, 0.001207f,
+ 0.001328f, 0.001535f, 0.001621f, 0.001840f, 0.002022f, 0.002163f, 0.002522f, 0.002825f, 0.003391f, 0.003830f, 0.004616f, 0.005665f,
+ 0.007172f, 0.009247f, 0.012482f, 0.017532f, 0.025970f, 0.040161f, 0.064941f, 0.107422f, 0.178833f, 0.283447f, 0.754883f, 0.764648f,
+ 0.766113f, 0.767090f, 0.767578f, 0.767090f, 0.000000f, 0.000119f, 0.000116f, 0.000114f, 0.000112f, 0.000110f, 0.000109f, 0.000117f,
+ 0.000114f, 0.000117f, 0.000125f, 0.000193f, 0.000141f, 0.000196f, 0.000221f, 0.000235f, 0.000259f, 0.000278f, 0.000308f, 0.000316f,
+ 0.000323f, 0.000315f, 0.000329f, 0.000351f, 0.000388f, 0.000422f, 0.000465f, 0.000512f, 0.000571f, 0.000568f, 0.000588f, 0.000633f,
+ 0.000747f, 0.000751f, 0.000829f, 0.000958f, 0.000914f, 0.001104f, 0.001145f, 0.001255f, 0.001337f, 0.001499f, 0.001701f, 0.001966f,
+ 0.002275f, 0.002609f, 0.003119f, 0.003773f, 0.004658f, 0.005920f, 0.007935f, 0.010948f, 0.015900f, 0.025284f, 0.042511f, 0.075012f,
+ 0.135010f, 0.234619f, 0.733398f, 0.743164f, 0.744629f, 0.745117f, 0.745605f, 0.745605f, 0.000000f, 0.000116f, 0.000113f, 0.000111f,
+ 0.000108f, 0.000106f, 0.000104f, 0.000103f, 0.000098f, 0.000092f, 0.000099f, 0.000085f, 0.000098f, 0.000105f, 0.000163f, 0.000162f,
+ 0.000128f, 0.000193f, 0.000203f, 0.000214f, 0.000284f, 0.000239f, 0.000303f, 0.000268f, 0.000327f, 0.000326f, 0.000329f, 0.000330f,
+ 0.000407f, 0.000486f, 0.000406f, 0.000454f, 0.000465f, 0.000495f, 0.000535f, 0.000592f, 0.000648f, 0.000727f, 0.000753f, 0.000807f,
+ 0.000956f, 0.000992f, 0.001108f, 0.001294f, 0.001418f, 0.001703f, 0.001978f, 0.002390f, 0.002930f, 0.003643f, 0.004753f, 0.006519f,
+ 0.009499f, 0.014824f, 0.025497f, 0.048065f, 0.095154f, 0.185425f, 0.709961f, 0.719727f, 0.721191f, 0.721191f, 0.721680f, 0.721680f,
+ 0.000000f, 0.000113f, 0.000107f, 0.000106f, 0.000102f, 0.000100f, 0.000097f, 0.000096f, 0.000095f, 0.000092f, 0.000087f, 0.000083f,
+ 0.000078f, 0.000098f, 0.000077f, 0.000091f, 0.000114f, 0.000128f, 0.000114f, 0.000147f, 0.000154f, 0.000162f, 0.000186f, 0.000174f,
+ 0.000220f, 0.000233f, 0.000235f, 0.000245f, 0.000250f, 0.000253f, 0.000321f, 0.000296f, 0.000311f, 0.000354f, 0.000417f, 0.000419f,
+ 0.000438f, 0.000443f, 0.000495f, 0.000513f, 0.000585f, 0.000634f, 0.000705f, 0.000778f, 0.000912f, 0.001002f, 0.001163f, 0.001379f,
+ 0.001745f, 0.002092f, 0.002697f, 0.003721f, 0.005230f, 0.008194f, 0.013870f, 0.027359f, 0.061066f, 0.138062f, 0.685547f, 0.694336f,
+ 0.696777f, 0.696289f, 0.697754f, 0.697754f, 0.000000f, 0.000106f, 0.000102f, 0.000097f, 0.000093f, 0.000091f, 0.000089f, 0.000087f,
+ 0.000085f, 0.000084f, 0.000082f, 0.000080f, 0.000076f, 0.000072f, 0.000069f, 0.000074f, 0.000076f, 0.000059f, 0.000075f, 0.000062f,
+ 0.000085f, 0.000091f, 0.000103f, 0.000111f, 0.000121f, 0.000135f, 0.000128f, 0.000159f, 0.000171f, 0.000160f, 0.000178f, 0.000193f,
+ 0.000196f, 0.000202f, 0.000220f, 0.000230f, 0.000273f, 0.000289f, 0.000312f, 0.000330f, 0.000335f, 0.000397f, 0.000408f, 0.000463f,
+ 0.000517f, 0.000577f, 0.000691f, 0.000771f, 0.000919f, 0.001150f, 0.001436f, 0.001955f, 0.002737f, 0.004185f, 0.007103f, 0.013863f,
+ 0.033661f, 0.093628f, 0.657227f, 0.667480f, 0.668945f, 0.669434f, 0.670898f, 0.669922f, 0.000108f, 0.000093f, 0.000087f, 0.000082f,
+ 0.000079f, 0.000078f, 0.000075f, 0.000073f, 0.000071f, 0.000070f, 0.000069f, 0.000069f, 0.000067f, 0.000066f, 0.000064f, 0.000061f,
+ 0.000059f, 0.000056f, 0.000053f, 0.000051f, 0.000053f, 0.000049f, 0.000044f, 0.000047f, 0.000055f, 0.000058f, 0.000071f, 0.000077f,
+ 0.000093f, 0.000094f, 0.000103f, 0.000102f, 0.000110f, 0.000126f, 0.000130f, 0.000138f, 0.000143f, 0.000166f, 0.000166f, 0.000178f,
+ 0.000194f, 0.000217f, 0.000228f, 0.000231f, 0.000265f, 0.000330f, 0.000341f, 0.000411f, 0.000459f, 0.000549f, 0.000705f, 0.000867f,
+ 0.001228f, 0.001863f, 0.003143f, 0.006283f, 0.015594f, 0.054993f, 0.628418f, 0.638184f, 0.640137f, 0.640137f, 0.641602f, 0.641602f,
+ 0.000071f, 0.000058f, 0.000059f, 0.000058f, 0.000054f, 0.000054f, 0.000051f, 0.000053f, 0.000051f, 0.000052f, 0.000050f, 0.000050f,
+ 0.000051f, 0.000050f, 0.000049f, 0.000049f, 0.000049f, 0.000049f, 0.000047f, 0.000045f, 0.000043f, 0.000041f, 0.000039f, 0.000038f,
+ 0.000036f, 0.000034f, 0.000035f, 0.000037f, 0.000033f, 0.000034f, 0.000038f, 0.000047f, 0.000054f, 0.000061f, 0.000064f, 0.000068f,
+ 0.000069f, 0.000076f, 0.000083f, 0.000092f, 0.000098f, 0.000103f, 0.000112f, 0.000129f, 0.000113f, 0.000139f, 0.000152f, 0.000185f,
+ 0.000204f, 0.000238f, 0.000282f, 0.000365f, 0.000503f, 0.000685f, 0.001178f, 0.002274f, 0.006100f, 0.025162f, 0.597656f, 0.607910f,
+ 0.610840f, 0.611816f, 0.610352f, 0.611328f, 0.000000f, 0.000000f, 0.000004f, 0.000012f, 0.000014f, 0.000020f, 0.000022f, 0.000023f,
+ 0.000024f, 0.000022f, 0.000025f, 0.000027f, 0.000027f, 0.000026f, 0.000028f, 0.000029f, 0.000029f, 0.000029f, 0.000030f, 0.000030f,
+ 0.000030f, 0.000030f, 0.000030f, 0.000030f, 0.000029f, 0.000028f, 0.000027f, 0.000026f, 0.000024f, 0.000023f, 0.000022f, 0.000021f,
+ 0.000020f, 0.000019f, 0.000018f, 0.000019f, 0.000023f, 0.000024f, 0.000027f, 0.000032f, 0.000038f, 0.000040f, 0.000041f, 0.000045f,
+ 0.000054f, 0.000052f, 0.000055f, 0.000060f, 0.000068f, 0.000089f, 0.000089f, 0.000115f, 0.000146f, 0.000198f, 0.000318f, 0.000586f,
+ 0.001614f, 0.008278f, 0.565918f, 0.576660f, 0.578125f, 0.579102f, 0.579590f, 0.580078f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f,
+ 0.000003f, 0.000003f, 0.000005f, 0.000005f, 0.000006f, 0.000007f, 0.000009f, 0.000009f, 0.000010f, 0.000011f, 0.000012f, 0.000012f,
+ 0.000013f, 0.000014f, 0.000014f, 0.000015f, 0.000014f, 0.000014f, 0.000013f, 0.000012f, 0.000012f, 0.000011f, 0.000011f, 0.000010f,
+ 0.000009f, 0.000009f, 0.000008f, 0.000010f, 0.000013f, 0.000013f, 0.000013f, 0.000017f, 0.000017f, 0.000022f, 0.000021f, 0.000023f,
+ 0.000031f, 0.000032f, 0.000049f, 0.000079f, 0.000204f, 0.001328f, 0.533203f, 0.543945f, 0.545410f, 0.546387f, 0.546875f, 0.546875f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000002f, 0.000002f, 0.000003f, 0.000003f, 0.000003f,
+ 0.000003f, 0.000003f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000003f, 0.000003f, 0.000004f, 0.000016f, 0.499756f, 0.510254f,
+ 0.513184f, 0.513672f, 0.514160f, 0.514160f,
+ },
+ {
+ 0.076172f, 0.209839f, 0.320312f, 0.408691f, 0.481689f, 0.541016f, 0.591309f, 0.633789f, 0.668945f, 0.699707f, 0.727051f, 0.749512f,
+ 0.770020f, 0.788086f, 0.803711f, 0.817871f, 0.832520f, 0.843750f, 0.854492f, 0.864258f, 0.873535f, 0.881836f, 0.889160f, 0.895996f,
+ 0.903320f, 0.909180f, 0.914551f, 0.920410f, 0.925781f, 0.929199f, 0.933594f, 0.938965f, 0.942383f, 0.946289f, 0.949219f, 0.953125f,
+ 0.955566f, 0.959473f, 0.961914f, 0.964355f, 0.967285f, 0.970215f, 0.971680f, 0.974609f, 0.976562f, 0.978516f, 0.980469f, 0.982422f,
+ 0.984375f, 0.986328f, 0.987793f, 0.989746f, 0.990723f, 0.992676f, 0.993652f, 0.995117f, 0.996582f, 0.998047f, 0.999023f, 0.997559f,
+ 0.996582f, 0.995605f, 0.994629f, 0.993652f, 0.043396f, 0.133301f, 0.221313f, 0.303223f, 0.377441f, 0.442871f, 0.500000f, 0.550781f,
+ 0.595215f, 0.632812f, 0.666992f, 0.696777f, 0.723145f, 0.745605f, 0.765137f, 0.783691f, 0.799805f, 0.815430f, 0.828613f, 0.839844f,
+ 0.851562f, 0.861328f, 0.871582f, 0.879395f, 0.887207f, 0.894531f, 0.901855f, 0.907227f, 0.914062f, 0.919434f, 0.924316f, 0.928711f,
+ 0.933594f, 0.937988f, 0.942383f, 0.945801f, 0.949219f, 0.953125f, 0.956055f, 0.959473f, 0.962402f, 0.964355f, 0.967773f, 0.970215f,
+ 0.972656f, 0.975098f, 0.977051f, 0.979492f, 0.980957f, 0.983398f, 0.985352f, 0.986816f, 0.988281f, 0.990234f, 0.991699f, 0.993652f,
+ 0.995117f, 0.996094f, 0.998047f, 0.997070f, 0.996094f, 0.995117f, 0.994141f, 0.993164f, 0.027832f, 0.088440f, 0.153198f, 0.221313f,
+ 0.288086f, 0.352051f, 0.411621f, 0.466797f, 0.515625f, 0.561523f, 0.601074f, 0.637207f, 0.667969f, 0.695312f, 0.721680f, 0.743652f,
+ 0.763184f, 0.781738f, 0.797852f, 0.812500f, 0.826172f, 0.838867f, 0.850098f, 0.859863f, 0.869141f, 0.877930f, 0.886230f, 0.893555f,
+ 0.900879f, 0.907227f, 0.912598f, 0.918457f, 0.922852f, 0.928711f, 0.934082f, 0.938477f, 0.942383f, 0.946289f, 0.950195f, 0.953125f,
+ 0.956543f, 0.959961f, 0.962402f, 0.965820f, 0.968262f, 0.970703f, 0.973145f, 0.975586f, 0.978027f, 0.979980f, 0.982422f, 0.984375f,
+ 0.985840f, 0.987793f, 0.989746f, 0.991211f, 0.993164f, 0.994141f, 0.997559f, 0.996582f, 0.995605f, 0.994629f, 0.993652f, 0.993164f,
+ 0.018921f, 0.061493f, 0.109497f, 0.161987f, 0.217041f, 0.273438f, 0.330811f, 0.384521f, 0.437500f, 0.486084f, 0.530273f, 0.570312f,
+ 0.607910f, 0.640137f, 0.670410f, 0.697266f, 0.722656f, 0.743652f, 0.763672f, 0.781250f, 0.797363f, 0.812012f, 0.825684f, 0.837891f,
+ 0.848633f, 0.859863f, 0.869141f, 0.878418f, 0.886719f, 0.893066f, 0.900879f, 0.906738f, 0.913574f, 0.919434f, 0.924316f, 0.930176f,
+ 0.934082f, 0.939453f, 0.942871f, 0.946777f, 0.950684f, 0.954590f, 0.958008f, 0.960449f, 0.963379f, 0.966797f, 0.969238f, 0.971680f,
+ 0.974121f, 0.977051f, 0.978516f, 0.980957f, 0.983398f, 0.985352f, 0.987305f, 0.989258f, 0.991211f, 0.992676f, 0.996094f, 0.995605f,
+ 0.994629f, 0.993652f, 0.993164f, 0.992188f, 0.013596f, 0.044495f, 0.080017f, 0.119873f, 0.164307f, 0.211670f, 0.261475f, 0.311523f,
+ 0.362793f, 0.410645f, 0.458008f, 0.501953f, 0.542969f, 0.580078f, 0.614746f, 0.645996f, 0.674805f, 0.701172f, 0.723633f, 0.745117f,
+ 0.765625f, 0.782227f, 0.798828f, 0.812988f, 0.826172f, 0.838867f, 0.849609f, 0.861328f, 0.870605f, 0.878906f, 0.887695f, 0.895020f,
+ 0.901855f, 0.907715f, 0.914551f, 0.920898f, 0.925781f, 0.930664f, 0.934570f, 0.940918f, 0.943848f, 0.947754f, 0.951660f, 0.955566f,
+ 0.958984f, 0.961914f, 0.964844f, 0.967773f, 0.970703f, 0.973145f, 0.975586f, 0.978027f, 0.979980f, 0.982422f, 0.984863f, 0.986328f,
+ 0.988770f, 0.990234f, 0.995117f, 0.995117f, 0.994141f, 0.993652f, 0.992676f, 0.991699f, 0.010414f, 0.033203f, 0.060364f, 0.090942f,
+ 0.125610f, 0.163818f, 0.206421f, 0.250488f, 0.295898f, 0.341797f, 0.388428f, 0.433350f, 0.475830f, 0.517090f, 0.555176f, 0.589844f,
+ 0.622559f, 0.652344f, 0.680176f, 0.704590f, 0.729004f, 0.748535f, 0.767578f, 0.784668f, 0.800293f, 0.814941f, 0.828125f, 0.839844f,
+ 0.852051f, 0.861816f, 0.871582f, 0.879883f, 0.888672f, 0.895996f, 0.903320f, 0.909180f, 0.916016f, 0.921387f, 0.927246f, 0.931641f,
+ 0.937012f, 0.940918f, 0.946289f, 0.950195f, 0.953125f, 0.957520f, 0.960449f, 0.963867f, 0.966309f, 0.969238f, 0.972168f, 0.975098f,
+ 0.976562f, 0.979492f, 0.981934f, 0.983887f, 0.985840f, 0.988281f, 0.994629f, 0.994141f, 0.993652f, 0.992676f, 0.991699f, 0.990723f,
+ 0.007889f, 0.025772f, 0.046539f, 0.070312f, 0.097168f, 0.128540f, 0.162354f, 0.200195f, 0.239868f, 0.281738f, 0.325195f, 0.368896f,
+ 0.411621f, 0.453125f, 0.493652f, 0.531738f, 0.566406f, 0.601074f, 0.631836f, 0.659668f, 0.687988f, 0.709961f, 0.732422f, 0.753418f,
+ 0.770996f, 0.788086f, 0.804199f, 0.818359f, 0.831543f, 0.843750f, 0.854492f, 0.864746f, 0.873535f, 0.882812f, 0.890137f, 0.898438f,
+ 0.905273f, 0.912598f, 0.917969f, 0.923828f, 0.929199f, 0.934570f, 0.938477f, 0.942871f, 0.948242f, 0.951660f, 0.955078f, 0.958496f,
+ 0.961914f, 0.965332f, 0.968262f, 0.971680f, 0.973633f, 0.976562f, 0.979492f, 0.981445f, 0.983398f, 0.985352f, 0.993164f, 0.993164f,
+ 0.992676f, 0.991699f, 0.991211f, 0.990234f, 0.006332f, 0.020325f, 0.036438f, 0.055573f, 0.077026f, 0.101562f, 0.129028f, 0.160278f,
+ 0.194458f, 0.230347f, 0.268555f, 0.309326f, 0.350830f, 0.391846f, 0.432373f, 0.472412f, 0.509277f, 0.545410f, 0.579102f, 0.611816f,
+ 0.640625f, 0.668945f, 0.693848f, 0.716797f, 0.739258f, 0.758789f, 0.775879f, 0.793945f, 0.807617f, 0.821777f, 0.834961f, 0.846680f,
+ 0.857422f, 0.867676f, 0.877441f, 0.885742f, 0.893555f, 0.900391f, 0.908203f, 0.915039f, 0.920898f, 0.926270f, 0.931152f, 0.937012f,
+ 0.940918f, 0.946289f, 0.949219f, 0.954102f, 0.958008f, 0.960938f, 0.964355f, 0.967773f, 0.970703f, 0.973145f, 0.975586f, 0.978516f,
+ 0.981445f, 0.983398f, 0.992188f, 0.992188f, 0.991699f, 0.990723f, 0.990723f, 0.989746f, 0.005226f, 0.016647f, 0.029556f, 0.044434f,
+ 0.061523f, 0.081543f, 0.103760f, 0.129150f, 0.157837f, 0.188477f, 0.221924f, 0.257812f, 0.295654f, 0.334473f, 0.374023f, 0.412842f,
+ 0.451904f, 0.489990f, 0.525391f, 0.560059f, 0.593262f, 0.623047f, 0.651855f, 0.678223f, 0.702148f, 0.725098f, 0.745605f, 0.764160f,
+ 0.781738f, 0.799316f, 0.812500f, 0.827148f, 0.838867f, 0.851074f, 0.861328f, 0.871582f, 0.880371f, 0.889648f, 0.896973f, 0.904297f,
+ 0.911621f, 0.917480f, 0.923340f, 0.929688f, 0.934570f, 0.939941f, 0.943848f, 0.948242f, 0.951660f, 0.957031f, 0.959473f, 0.963379f,
+ 0.966797f, 0.969727f, 0.972656f, 0.976074f, 0.979004f, 0.980957f, 0.991699f, 0.991211f, 0.990723f, 0.990234f, 0.989746f, 0.988770f,
+ 0.004108f, 0.013542f, 0.023819f, 0.036194f, 0.050262f, 0.066223f, 0.084717f, 0.104797f, 0.128174f, 0.153809f, 0.182861f, 0.213989f,
+ 0.247437f, 0.282471f, 0.319580f, 0.357422f, 0.395508f, 0.433350f, 0.470947f, 0.506348f, 0.542480f, 0.575684f, 0.605957f, 0.635254f,
+ 0.662109f, 0.687988f, 0.711426f, 0.732910f, 0.753418f, 0.771973f, 0.789062f, 0.804688f, 0.819336f, 0.831543f, 0.843750f, 0.855469f,
+ 0.866211f, 0.875488f, 0.884766f, 0.893066f, 0.901367f, 0.907715f, 0.914062f, 0.921387f, 0.927246f, 0.932129f, 0.937012f, 0.942383f,
+ 0.946777f, 0.951660f, 0.956055f, 0.959473f, 0.962891f, 0.966309f, 0.969238f, 0.972168f, 0.975098f, 0.978027f, 0.989746f, 0.990234f,
+ 0.990234f, 0.989258f, 0.989258f, 0.988281f, 0.003597f, 0.011330f, 0.020065f, 0.029938f, 0.041412f, 0.054504f, 0.068970f, 0.086182f,
+ 0.105469f, 0.126709f, 0.151123f, 0.177612f, 0.206909f, 0.237915f, 0.271484f, 0.305664f, 0.342529f, 0.378906f, 0.416748f, 0.453125f,
+ 0.489502f, 0.524414f, 0.558105f, 0.589844f, 0.619629f, 0.646973f, 0.673828f, 0.698242f, 0.721191f, 0.742676f, 0.761230f, 0.778809f,
+ 0.796387f, 0.810547f, 0.824707f, 0.837891f, 0.850098f, 0.861328f, 0.871094f, 0.881348f, 0.889648f, 0.896973f, 0.904785f, 0.912109f,
+ 0.919434f, 0.924316f, 0.931152f, 0.936523f, 0.941895f, 0.946289f, 0.951172f, 0.955078f, 0.959473f, 0.962402f, 0.965820f, 0.969238f,
+ 0.972656f, 0.975586f, 0.988770f, 0.989258f, 0.989258f, 0.988770f, 0.987793f, 0.987305f, 0.002836f, 0.009857f, 0.016693f, 0.025208f,
+ 0.034668f, 0.045288f, 0.057617f, 0.071106f, 0.087463f, 0.104858f, 0.125000f, 0.147461f, 0.172119f, 0.199829f, 0.229248f, 0.260742f,
+ 0.294434f, 0.329102f, 0.365479f, 0.400879f, 0.437012f, 0.472656f, 0.508301f, 0.541992f, 0.574219f, 0.604980f, 0.634766f, 0.660645f,
+ 0.686523f, 0.709473f, 0.731445f, 0.751953f, 0.770996f, 0.789062f, 0.804199f, 0.817871f, 0.832520f, 0.844727f, 0.856445f, 0.867188f,
+ 0.876953f, 0.886719f, 0.895020f, 0.902832f, 0.909668f, 0.916504f, 0.923340f, 0.929688f, 0.935547f, 0.939941f, 0.944824f, 0.949707f,
+ 0.954102f, 0.958496f, 0.961914f, 0.965820f, 0.969238f, 0.972656f, 0.987793f, 0.988281f, 0.988281f, 0.987793f, 0.986816f, 0.986328f,
+ 0.002541f, 0.008118f, 0.014244f, 0.021194f, 0.029480f, 0.037811f, 0.048584f, 0.060028f, 0.073242f, 0.088196f, 0.104370f, 0.123047f,
+ 0.144531f, 0.167114f, 0.193237f, 0.220947f, 0.250977f, 0.282227f, 0.316162f, 0.351074f, 0.386719f, 0.422119f, 0.457520f, 0.492432f,
+ 0.526367f, 0.559082f, 0.590332f, 0.621094f, 0.648438f, 0.674316f, 0.698730f, 0.721191f, 0.742188f, 0.762207f, 0.780762f, 0.797363f,
+ 0.812500f, 0.826172f, 0.840332f, 0.852051f, 0.863770f, 0.873535f, 0.883301f, 0.892090f, 0.900391f, 0.908203f, 0.915039f, 0.922363f,
+ 0.928711f, 0.933594f, 0.939453f, 0.944824f, 0.950195f, 0.953125f, 0.958008f, 0.962402f, 0.965332f, 0.969238f, 0.986816f, 0.987305f,
+ 0.986816f, 0.986328f, 0.985840f, 0.984863f, 0.002115f, 0.007030f, 0.012138f, 0.017944f, 0.024521f, 0.032318f, 0.040955f, 0.050476f,
+ 0.061676f, 0.073914f, 0.087769f, 0.103271f, 0.121033f, 0.140747f, 0.162598f, 0.187256f, 0.213379f, 0.242065f, 0.272705f, 0.305176f,
+ 0.338623f, 0.373047f, 0.408691f, 0.443848f, 0.478760f, 0.512695f, 0.545898f, 0.577637f, 0.607910f, 0.636719f, 0.663086f, 0.688965f,
+ 0.712402f, 0.734863f, 0.754395f, 0.774414f, 0.791016f, 0.806641f, 0.822266f, 0.835449f, 0.848145f, 0.859863f, 0.870605f, 0.880371f,
+ 0.890137f, 0.898438f, 0.906250f, 0.914551f, 0.921387f, 0.926758f, 0.933594f, 0.938965f, 0.944336f, 0.949219f, 0.954102f, 0.958984f,
+ 0.961914f, 0.965820f, 0.985840f, 0.986328f, 0.985840f, 0.985352f, 0.985352f, 0.984375f, 0.001999f, 0.006226f, 0.010384f, 0.015594f,
+ 0.021027f, 0.027435f, 0.034637f, 0.042969f, 0.052124f, 0.062469f, 0.074097f, 0.087646f, 0.102173f, 0.119141f, 0.137695f, 0.158203f,
+ 0.181396f, 0.206543f, 0.233643f, 0.263184f, 0.295166f, 0.327148f, 0.360596f, 0.395264f, 0.430420f, 0.464600f, 0.499023f, 0.532227f,
+ 0.564941f, 0.595703f, 0.625000f, 0.651855f, 0.679199f, 0.703613f, 0.726074f, 0.747559f, 0.766602f, 0.784668f, 0.801758f, 0.816895f,
+ 0.831055f, 0.843750f, 0.856934f, 0.867188f, 0.878418f, 0.887207f, 0.896484f, 0.904785f, 0.913086f, 0.919922f, 0.926270f, 0.932617f,
+ 0.938477f, 0.944336f, 0.949707f, 0.953613f, 0.958496f, 0.962891f, 0.983887f, 0.984863f, 0.984863f, 0.984375f, 0.983887f, 0.983398f,
+ 0.001891f, 0.004959f, 0.009300f, 0.013786f, 0.018433f, 0.023560f, 0.029892f, 0.037018f, 0.044586f, 0.053284f, 0.062805f, 0.074341f,
+ 0.086975f, 0.100586f, 0.116760f, 0.133789f, 0.154175f, 0.176025f, 0.200317f, 0.226318f, 0.254395f, 0.284424f, 0.316650f, 0.349365f,
+ 0.383301f, 0.418213f, 0.452393f, 0.487061f, 0.520508f, 0.553223f, 0.584473f, 0.613770f, 0.643066f, 0.668945f, 0.695312f, 0.718262f,
+ 0.740234f, 0.761230f, 0.778809f, 0.797363f, 0.812988f, 0.827148f, 0.840332f, 0.854004f, 0.865723f, 0.875977f, 0.886230f, 0.895020f,
+ 0.904297f, 0.912598f, 0.919922f, 0.926270f, 0.932617f, 0.938965f, 0.943359f, 0.949219f, 0.955078f, 0.958984f, 0.982422f, 0.983887f,
+ 0.983398f, 0.982910f, 0.982910f, 0.981934f, 0.001368f, 0.004715f, 0.008041f, 0.011948f, 0.016235f, 0.020889f, 0.025848f, 0.031921f,
+ 0.038391f, 0.045563f, 0.054108f, 0.063477f, 0.074036f, 0.085815f, 0.099304f, 0.114563f, 0.131104f, 0.150146f, 0.170654f, 0.193970f,
+ 0.219360f, 0.246338f, 0.275146f, 0.306396f, 0.338867f, 0.372559f, 0.406494f, 0.440918f, 0.474609f, 0.508789f, 0.541992f, 0.574219f,
+ 0.604492f, 0.634277f, 0.661133f, 0.687500f, 0.710938f, 0.733887f, 0.754883f, 0.774414f, 0.792480f, 0.809570f, 0.824707f, 0.838379f,
+ 0.852051f, 0.862793f, 0.874023f, 0.885254f, 0.895020f, 0.903320f, 0.912109f, 0.919434f, 0.926758f, 0.932617f, 0.939941f, 0.945312f,
+ 0.951172f, 0.955078f, 0.980957f, 0.982910f, 0.982422f, 0.982422f, 0.981445f, 0.981445f, 0.001393f, 0.004227f, 0.007011f, 0.010323f,
+ 0.014107f, 0.018234f, 0.022766f, 0.027649f, 0.032898f, 0.039581f, 0.046539f, 0.054230f, 0.063293f, 0.073608f, 0.085144f, 0.097961f,
+ 0.112305f, 0.127930f, 0.146362f, 0.166260f, 0.188599f, 0.212524f, 0.238647f, 0.266846f, 0.297363f, 0.328369f, 0.361816f, 0.395752f,
+ 0.429932f, 0.464844f, 0.498535f, 0.531250f, 0.564453f, 0.596191f, 0.625488f, 0.653320f, 0.680176f, 0.704590f, 0.728027f, 0.750977f,
+ 0.770020f, 0.788574f, 0.805176f, 0.821289f, 0.835449f, 0.849609f, 0.862793f, 0.874023f, 0.884277f, 0.894043f, 0.903320f, 0.911621f,
+ 0.919434f, 0.926758f, 0.933594f, 0.939453f, 0.945312f, 0.951172f, 0.979492f, 0.980957f, 0.980957f, 0.980957f, 0.980469f, 0.979980f,
+ 0.001163f, 0.003527f, 0.006229f, 0.009323f, 0.012199f, 0.015808f, 0.019928f, 0.024200f, 0.028870f, 0.033997f, 0.040161f, 0.046967f,
+ 0.054871f, 0.063477f, 0.073181f, 0.083618f, 0.096252f, 0.109863f, 0.125122f, 0.142334f, 0.161743f, 0.182739f, 0.206421f, 0.232300f,
+ 0.259277f, 0.288086f, 0.320068f, 0.352783f, 0.386475f, 0.420410f, 0.454590f, 0.489258f, 0.521973f, 0.555176f, 0.586914f, 0.617188f,
+ 0.646484f, 0.673828f, 0.699707f, 0.723633f, 0.746094f, 0.766113f, 0.785645f, 0.803223f, 0.819336f, 0.834961f, 0.848633f, 0.861328f,
+ 0.873535f, 0.884766f, 0.893555f, 0.903809f, 0.911621f, 0.920410f, 0.928223f, 0.934082f, 0.939941f, 0.946777f, 0.978027f, 0.979492f,
+ 0.979492f, 0.979004f, 0.979004f, 0.978516f, 0.000981f, 0.002987f, 0.005329f, 0.008186f, 0.010895f, 0.013832f, 0.017532f, 0.021149f,
+ 0.025253f, 0.029999f, 0.035034f, 0.040985f, 0.047485f, 0.054993f, 0.063049f, 0.072510f, 0.082581f, 0.094421f, 0.107727f, 0.122498f,
+ 0.138794f, 0.157471f, 0.178467f, 0.200562f, 0.225586f, 0.251953f, 0.281250f, 0.311279f, 0.343750f, 0.377197f, 0.411621f, 0.445557f,
+ 0.479736f, 0.513672f, 0.546875f, 0.579590f, 0.610352f, 0.640625f, 0.668457f, 0.694336f, 0.718750f, 0.742188f, 0.762695f, 0.782715f,
+ 0.801270f, 0.817871f, 0.833496f, 0.847168f, 0.860840f, 0.872559f, 0.884277f, 0.894531f, 0.904297f, 0.912598f, 0.920898f, 0.928711f,
+ 0.935547f, 0.942383f, 0.976074f, 0.978027f, 0.978516f, 0.978027f, 0.977539f, 0.977051f, 0.000880f, 0.002707f, 0.005089f, 0.007305f,
+ 0.010147f, 0.012596f, 0.015160f, 0.018616f, 0.022507f, 0.026230f, 0.030777f, 0.035767f, 0.041351f, 0.047455f, 0.054565f, 0.062256f,
+ 0.071289f, 0.081299f, 0.092346f, 0.105408f, 0.119812f, 0.135620f, 0.153320f, 0.173462f, 0.195068f, 0.219482f, 0.245361f, 0.273682f,
+ 0.303711f, 0.335938f, 0.368896f, 0.402588f, 0.437500f, 0.472168f, 0.505859f, 0.539551f, 0.573242f, 0.604492f, 0.634766f, 0.663086f,
+ 0.689453f, 0.714844f, 0.738770f, 0.760254f, 0.780762f, 0.799316f, 0.817383f, 0.833496f, 0.847168f, 0.860840f, 0.873535f, 0.884766f,
+ 0.895508f, 0.905273f, 0.914062f, 0.922363f, 0.930176f, 0.937012f, 0.974609f, 0.976074f, 0.976074f, 0.976562f, 0.976074f, 0.975586f,
+ 0.000851f, 0.002659f, 0.004692f, 0.006466f, 0.008545f, 0.011055f, 0.013649f, 0.016403f, 0.019714f, 0.023056f, 0.026962f, 0.031235f,
+ 0.035828f, 0.041656f, 0.047699f, 0.054077f, 0.061859f, 0.070496f, 0.080200f, 0.091125f, 0.103088f, 0.116882f, 0.132446f, 0.149780f,
+ 0.168701f, 0.190430f, 0.213379f, 0.239258f, 0.267334f, 0.296631f, 0.328369f, 0.360840f, 0.395020f, 0.429932f, 0.464355f, 0.499512f,
+ 0.533203f, 0.566406f, 0.599121f, 0.629883f, 0.658203f, 0.687012f, 0.712402f, 0.735840f, 0.758789f, 0.779297f, 0.798828f, 0.816406f,
+ 0.832520f, 0.847168f, 0.861328f, 0.874023f, 0.886230f, 0.896973f, 0.907227f, 0.915527f, 0.924805f, 0.931641f, 0.972168f, 0.975586f,
+ 0.975586f, 0.974609f, 0.974121f, 0.973633f, 0.000762f, 0.002214f, 0.004040f, 0.005859f, 0.007790f, 0.009689f, 0.012161f, 0.014786f,
+ 0.017441f, 0.020493f, 0.023956f, 0.027618f, 0.031860f, 0.036255f, 0.041595f, 0.047394f, 0.053894f, 0.061188f, 0.069214f, 0.078735f,
+ 0.089050f, 0.101135f, 0.114441f, 0.129150f, 0.145874f, 0.164673f, 0.185303f, 0.208862f, 0.233765f, 0.260742f, 0.290283f, 0.321045f,
+ 0.354248f, 0.388184f, 0.422607f, 0.457764f, 0.493652f, 0.526855f, 0.561523f, 0.594238f, 0.625977f, 0.655273f, 0.683594f, 0.710449f,
+ 0.734863f, 0.758301f, 0.779297f, 0.798828f, 0.817383f, 0.833984f, 0.848145f, 0.862793f, 0.875488f, 0.887207f, 0.899414f, 0.908691f,
+ 0.917969f, 0.926270f, 0.970215f, 0.972656f, 0.974121f, 0.973145f, 0.972656f, 0.972168f, 0.000732f, 0.001928f, 0.003513f, 0.005234f,
+ 0.007042f, 0.008629f, 0.010620f, 0.012985f, 0.015244f, 0.018158f, 0.020935f, 0.024475f, 0.027908f, 0.032013f, 0.036316f, 0.041290f,
+ 0.046661f, 0.053040f, 0.060089f, 0.068115f, 0.077087f, 0.087463f, 0.099121f, 0.111633f, 0.126221f, 0.142578f, 0.160767f, 0.181396f,
+ 0.203003f, 0.228149f, 0.255127f, 0.284180f, 0.315186f, 0.347900f, 0.381836f, 0.416748f, 0.451904f, 0.487549f, 0.522949f, 0.556641f,
+ 0.590332f, 0.623047f, 0.652832f, 0.682129f, 0.708984f, 0.733887f, 0.757324f, 0.779785f, 0.799316f, 0.818359f, 0.835449f, 0.850586f,
+ 0.865234f, 0.877441f, 0.890137f, 0.901367f, 0.912109f, 0.920410f, 0.968262f, 0.970703f, 0.971191f, 0.970703f, 0.971191f, 0.971191f,
+ 0.000524f, 0.001758f, 0.003185f, 0.004864f, 0.006081f, 0.007820f, 0.009705f, 0.011467f, 0.013634f, 0.016068f, 0.018707f, 0.021378f,
+ 0.024597f, 0.028030f, 0.032135f, 0.036224f, 0.041016f, 0.046692f, 0.052399f, 0.059265f, 0.067505f, 0.076050f, 0.085510f, 0.096558f,
+ 0.109253f, 0.123657f, 0.138794f, 0.157227f, 0.176880f, 0.198730f, 0.223267f, 0.250000f, 0.278809f, 0.309326f, 0.342041f, 0.375977f,
+ 0.410889f, 0.447021f, 0.483154f, 0.518555f, 0.554199f, 0.586914f, 0.620117f, 0.650879f, 0.681641f, 0.708496f, 0.734375f, 0.757324f,
+ 0.780762f, 0.801270f, 0.819336f, 0.837891f, 0.852539f, 0.867188f, 0.880371f, 0.893066f, 0.903809f, 0.914551f, 0.966309f, 0.968750f,
+ 0.969238f, 0.969727f, 0.968750f, 0.968750f, 0.000503f, 0.001896f, 0.002653f, 0.004128f, 0.005627f, 0.007004f, 0.008797f, 0.010361f,
+ 0.012230f, 0.014175f, 0.016647f, 0.019348f, 0.021454f, 0.024872f, 0.028290f, 0.031830f, 0.036163f, 0.040649f, 0.045715f, 0.051941f,
+ 0.058319f, 0.065979f, 0.074402f, 0.083618f, 0.094360f, 0.106812f, 0.120239f, 0.135742f, 0.153320f, 0.172974f, 0.194824f, 0.218506f,
+ 0.245117f, 0.273926f, 0.304688f, 0.336426f, 0.371094f, 0.406982f, 0.442627f, 0.479492f, 0.514648f, 0.550781f, 0.584961f, 0.618652f,
+ 0.650879f, 0.681152f, 0.709473f, 0.735352f, 0.760742f, 0.782715f, 0.803711f, 0.821777f, 0.838867f, 0.855957f, 0.870605f, 0.884277f,
+ 0.895996f, 0.906738f, 0.964355f, 0.966309f, 0.967285f, 0.966797f, 0.966309f, 0.966309f, 0.000636f, 0.001421f, 0.002768f, 0.003761f,
+ 0.004944f, 0.006462f, 0.007889f, 0.009262f, 0.010780f, 0.013000f, 0.014946f, 0.017029f, 0.019516f, 0.022049f, 0.024933f, 0.028091f,
+ 0.031616f, 0.035553f, 0.040161f, 0.045380f, 0.051239f, 0.057281f, 0.064270f, 0.072693f, 0.081970f, 0.092468f, 0.104736f, 0.117859f,
+ 0.132690f, 0.150391f, 0.169189f, 0.190796f, 0.214233f, 0.240601f, 0.268555f, 0.299561f, 0.332520f, 0.367188f, 0.402344f, 0.438965f,
+ 0.476074f, 0.512695f, 0.549805f, 0.584473f, 0.619141f, 0.651367f, 0.681152f, 0.709961f, 0.737305f, 0.762695f, 0.785156f, 0.806641f,
+ 0.826172f, 0.843262f, 0.859375f, 0.874023f, 0.888184f, 0.900391f, 0.961426f, 0.964355f, 0.965332f, 0.964844f, 0.964355f, 0.964844f,
+ 0.000295f, 0.001419f, 0.002342f, 0.003471f, 0.004539f, 0.005821f, 0.006882f, 0.008354f, 0.010155f, 0.011574f, 0.013283f, 0.015129f,
+ 0.017090f, 0.019333f, 0.022125f, 0.024643f, 0.028122f, 0.031586f, 0.035522f, 0.039825f, 0.044586f, 0.050110f, 0.056091f, 0.063354f,
+ 0.071045f, 0.080078f, 0.090637f, 0.102112f, 0.115479f, 0.130127f, 0.147217f, 0.165649f, 0.186768f, 0.210571f, 0.236694f, 0.265137f,
+ 0.295654f, 0.328857f, 0.363770f, 0.399902f, 0.436523f, 0.474365f, 0.511230f, 0.548828f, 0.584961f, 0.619141f, 0.652344f, 0.684082f,
+ 0.712891f, 0.741211f, 0.766113f, 0.789062f, 0.810547f, 0.830078f, 0.848633f, 0.864258f, 0.879395f, 0.892578f, 0.958496f, 0.962402f,
+ 0.962402f, 0.962402f, 0.961914f, 0.962402f, 0.000464f, 0.001313f, 0.002159f, 0.003134f, 0.004463f, 0.005001f, 0.006466f, 0.007595f,
+ 0.008842f, 0.010277f, 0.011971f, 0.013550f, 0.015434f, 0.017242f, 0.019348f, 0.021805f, 0.024734f, 0.027817f, 0.031174f, 0.034821f,
+ 0.039124f, 0.043823f, 0.049164f, 0.055237f, 0.062164f, 0.069336f, 0.078430f, 0.088501f, 0.099976f, 0.112854f, 0.127319f, 0.143555f,
+ 0.162354f, 0.183350f, 0.207031f, 0.233032f, 0.260986f, 0.291992f, 0.325195f, 0.361084f, 0.397217f, 0.435059f, 0.473389f, 0.510742f,
+ 0.549316f, 0.586426f, 0.620605f, 0.654785f, 0.686523f, 0.716797f, 0.744629f, 0.769043f, 0.793945f, 0.815918f, 0.834961f, 0.852539f,
+ 0.869141f, 0.884277f, 0.955078f, 0.959473f, 0.959473f, 0.959473f, 0.959961f, 0.959961f, 0.000541f, 0.001223f, 0.002172f, 0.002886f,
+ 0.003679f, 0.004681f, 0.005512f, 0.006683f, 0.008049f, 0.009346f, 0.010704f, 0.012024f, 0.013626f, 0.015213f, 0.017227f, 0.019516f,
+ 0.022079f, 0.024612f, 0.027313f, 0.030731f, 0.034180f, 0.038239f, 0.042969f, 0.048187f, 0.053864f, 0.060516f, 0.068298f, 0.076843f,
+ 0.086670f, 0.097473f, 0.110107f, 0.124268f, 0.140869f, 0.159302f, 0.180420f, 0.203613f, 0.229614f, 0.258057f, 0.289062f, 0.323486f,
+ 0.358398f, 0.395996f, 0.434082f, 0.472900f, 0.511719f, 0.550293f, 0.587402f, 0.624023f, 0.658203f, 0.690918f, 0.721191f, 0.749512f,
+ 0.774902f, 0.799316f, 0.821289f, 0.840820f, 0.859375f, 0.875488f, 0.952637f, 0.956543f, 0.957520f, 0.957520f, 0.957520f, 0.957031f,
+ 0.000252f, 0.001056f, 0.001923f, 0.002523f, 0.003414f, 0.003960f, 0.005146f, 0.006172f, 0.007130f, 0.008179f, 0.009567f, 0.010735f,
+ 0.012077f, 0.013878f, 0.015640f, 0.017456f, 0.019638f, 0.021622f, 0.024170f, 0.026978f, 0.030121f, 0.033630f, 0.037445f, 0.042053f,
+ 0.047119f, 0.052826f, 0.059174f, 0.066711f, 0.075012f, 0.084473f, 0.095276f, 0.107727f, 0.122070f, 0.138184f, 0.156250f, 0.177246f,
+ 0.200928f, 0.226929f, 0.255371f, 0.286865f, 0.321289f, 0.356934f, 0.395264f, 0.434326f, 0.473877f, 0.514160f, 0.553711f, 0.591797f,
+ 0.628418f, 0.663574f, 0.696777f, 0.728027f, 0.755859f, 0.782715f, 0.806152f, 0.829102f, 0.847656f, 0.867188f, 0.949707f, 0.954102f,
+ 0.954590f, 0.954590f, 0.954102f, 0.954590f, 0.000365f, 0.000963f, 0.001581f, 0.002337f, 0.002996f, 0.003952f, 0.004608f, 0.005459f,
+ 0.006489f, 0.007351f, 0.008484f, 0.009544f, 0.011108f, 0.012413f, 0.013901f, 0.015388f, 0.017181f, 0.019012f, 0.021439f, 0.023727f,
+ 0.026520f, 0.029449f, 0.032898f, 0.036835f, 0.041046f, 0.045868f, 0.051575f, 0.058075f, 0.064758f, 0.073120f, 0.082520f, 0.093079f,
+ 0.105652f, 0.119385f, 0.135620f, 0.153687f, 0.174683f, 0.198364f, 0.224365f, 0.253662f, 0.285400f, 0.320557f, 0.357178f, 0.395752f,
+ 0.435791f, 0.476318f, 0.516602f, 0.557129f, 0.596191f, 0.633789f, 0.669434f, 0.703613f, 0.734375f, 0.763672f, 0.790039f, 0.812988f,
+ 0.836914f, 0.855957f, 0.946289f, 0.949707f, 0.951172f, 0.951172f, 0.951172f, 0.951172f, 0.000404f, 0.001028f, 0.001410f, 0.002098f,
+ 0.002657f, 0.003445f, 0.004391f, 0.005039f, 0.005665f, 0.006569f, 0.007549f, 0.008614f, 0.009743f, 0.011108f, 0.012390f, 0.013611f,
+ 0.015396f, 0.017044f, 0.018921f, 0.020874f, 0.023453f, 0.025833f, 0.028809f, 0.032501f, 0.036011f, 0.040161f, 0.044952f, 0.050018f,
+ 0.056091f, 0.063477f, 0.071533f, 0.080200f, 0.091064f, 0.103027f, 0.117065f, 0.133057f, 0.151489f, 0.171997f, 0.196045f, 0.222290f,
+ 0.251709f, 0.284424f, 0.319824f, 0.357422f, 0.397217f, 0.438232f, 0.479492f, 0.521484f, 0.562500f, 0.602051f, 0.641113f, 0.677734f,
+ 0.711914f, 0.743164f, 0.772461f, 0.799316f, 0.822754f, 0.845215f, 0.942383f, 0.946777f, 0.947754f, 0.947754f, 0.948242f, 0.948242f,
+ 0.000406f, 0.000992f, 0.001447f, 0.001986f, 0.002499f, 0.003149f, 0.003769f, 0.004272f, 0.005016f, 0.005981f, 0.006924f, 0.007675f,
+ 0.008766f, 0.009727f, 0.010765f, 0.011986f, 0.013588f, 0.014915f, 0.016724f, 0.018478f, 0.020508f, 0.022873f, 0.025497f, 0.028336f,
+ 0.031525f, 0.034882f, 0.038818f, 0.043243f, 0.048615f, 0.054626f, 0.061707f, 0.069214f, 0.078430f, 0.089111f, 0.101013f, 0.115112f,
+ 0.130859f, 0.148926f, 0.170166f, 0.193604f, 0.220947f, 0.250732f, 0.283936f, 0.320068f, 0.358887f, 0.400391f, 0.442139f, 0.483887f,
+ 0.527344f, 0.569824f, 0.610352f, 0.649414f, 0.686523f, 0.722168f, 0.753906f, 0.782227f, 0.809570f, 0.833496f, 0.938477f, 0.942871f,
+ 0.944824f, 0.944336f, 0.943848f, 0.943848f, 0.000235f, 0.000984f, 0.001204f, 0.001706f, 0.002239f, 0.002998f, 0.003462f, 0.004093f,
+ 0.004372f, 0.005371f, 0.006149f, 0.006962f, 0.007736f, 0.008766f, 0.009804f, 0.010780f, 0.011887f, 0.013336f, 0.014618f, 0.016159f,
+ 0.018158f, 0.020050f, 0.022232f, 0.024597f, 0.027313f, 0.030334f, 0.033752f, 0.037872f, 0.042389f, 0.047516f, 0.053192f, 0.059937f,
+ 0.067749f, 0.076599f, 0.086975f, 0.098755f, 0.112610f, 0.128662f, 0.146973f, 0.168091f, 0.192383f, 0.220215f, 0.250732f, 0.284668f,
+ 0.322021f, 0.361572f, 0.403564f, 0.446777f, 0.490723f, 0.534668f, 0.577637f, 0.619629f, 0.660156f, 0.697754f, 0.731934f, 0.764648f,
+ 0.794922f, 0.820312f, 0.934082f, 0.939453f, 0.939941f, 0.941406f, 0.940430f, 0.940918f, 0.000237f, 0.000591f, 0.001098f, 0.001619f,
+ 0.002241f, 0.002636f, 0.003176f, 0.003521f, 0.004101f, 0.004631f, 0.005398f, 0.006378f, 0.007000f, 0.007767f, 0.008713f, 0.009758f,
+ 0.010475f, 0.011734f, 0.013016f, 0.014404f, 0.015762f, 0.017517f, 0.019440f, 0.021469f, 0.023651f, 0.026199f, 0.029495f, 0.033112f,
+ 0.036499f, 0.040955f, 0.045959f, 0.051849f, 0.058197f, 0.065552f, 0.074585f, 0.085022f, 0.096680f, 0.110535f, 0.126709f, 0.145264f,
+ 0.166626f, 0.191406f, 0.219482f, 0.250488f, 0.286133f, 0.323975f, 0.365723f, 0.408447f, 0.453125f, 0.498779f, 0.542969f, 0.588379f,
+ 0.631836f, 0.671387f, 0.709473f, 0.745117f, 0.777344f, 0.807617f, 0.930176f, 0.935059f, 0.936523f, 0.936523f, 0.936523f, 0.936035f,
+ 0.000242f, 0.000761f, 0.000943f, 0.001624f, 0.001858f, 0.002390f, 0.002638f, 0.003054f, 0.003805f, 0.004559f, 0.005035f, 0.005493f,
+ 0.006157f, 0.006878f, 0.007687f, 0.008530f, 0.009178f, 0.010406f, 0.011406f, 0.012520f, 0.014053f, 0.015579f, 0.017105f, 0.018661f,
+ 0.020737f, 0.022903f, 0.025650f, 0.028259f, 0.031433f, 0.035065f, 0.039581f, 0.044342f, 0.049988f, 0.056366f, 0.064026f, 0.072632f,
+ 0.082825f, 0.094666f, 0.108582f, 0.124634f, 0.143799f, 0.165405f, 0.190796f, 0.219360f, 0.251953f, 0.287842f, 0.328125f, 0.370605f,
+ 0.415283f, 0.461670f, 0.507812f, 0.555176f, 0.600586f, 0.645020f, 0.685547f, 0.724121f, 0.759277f, 0.792969f, 0.924805f, 0.931152f,
+ 0.931641f, 0.932129f, 0.932129f, 0.931641f, 0.000240f, 0.000685f, 0.000955f, 0.001395f, 0.001768f, 0.002157f, 0.002533f, 0.002970f,
+ 0.003223f, 0.003813f, 0.004601f, 0.004993f, 0.005428f, 0.005981f, 0.006878f, 0.007484f, 0.008110f, 0.009132f, 0.009964f, 0.011208f,
+ 0.012138f, 0.013374f, 0.015099f, 0.016190f, 0.018112f, 0.020187f, 0.022202f, 0.024780f, 0.027573f, 0.030411f, 0.034119f, 0.037964f,
+ 0.042755f, 0.048553f, 0.054474f, 0.061890f, 0.070984f, 0.080688f, 0.092590f, 0.106812f, 0.123291f, 0.142456f, 0.164551f, 0.190430f,
+ 0.220459f, 0.253418f, 0.291504f, 0.332520f, 0.376709f, 0.423340f, 0.471436f, 0.520508f, 0.567383f, 0.614746f, 0.660156f, 0.702148f,
+ 0.741211f, 0.776367f, 0.920410f, 0.925293f, 0.926270f, 0.926758f, 0.927246f, 0.926758f, 0.000244f, 0.000431f, 0.000799f, 0.001309f,
+ 0.001587f, 0.001945f, 0.002317f, 0.002514f, 0.003290f, 0.003548f, 0.004082f, 0.004349f, 0.004707f, 0.005348f, 0.006027f, 0.006565f,
+ 0.007141f, 0.008011f, 0.008850f, 0.009552f, 0.010757f, 0.011650f, 0.012794f, 0.014145f, 0.015778f, 0.017303f, 0.019028f, 0.021088f,
+ 0.023575f, 0.026169f, 0.029175f, 0.032562f, 0.036713f, 0.041382f, 0.046448f, 0.052948f, 0.060303f, 0.068787f, 0.079041f, 0.090942f,
+ 0.105103f, 0.121643f, 0.141113f, 0.164185f, 0.190308f, 0.221191f, 0.256836f, 0.295898f, 0.339355f, 0.385010f, 0.433838f, 0.484619f,
+ 0.534668f, 0.583496f, 0.631348f, 0.678223f, 0.719727f, 0.759766f, 0.913574f, 0.920410f, 0.921387f, 0.921875f, 0.921875f, 0.921387f,
+ 0.000243f, 0.000496f, 0.000847f, 0.001157f, 0.001426f, 0.001634f, 0.002020f, 0.002338f, 0.002607f, 0.003035f, 0.003502f, 0.003872f,
+ 0.004459f, 0.004726f, 0.005402f, 0.005779f, 0.006325f, 0.007095f, 0.007767f, 0.008568f, 0.009331f, 0.010086f, 0.011009f, 0.012314f,
+ 0.013611f, 0.015060f, 0.016312f, 0.018158f, 0.020401f, 0.022476f, 0.024979f, 0.027863f, 0.031036f, 0.034943f, 0.039581f, 0.044830f,
+ 0.050903f, 0.058289f, 0.066895f, 0.076782f, 0.088989f, 0.103210f, 0.120422f, 0.140259f, 0.164185f, 0.191772f, 0.223877f, 0.260742f,
+ 0.301758f, 0.347168f, 0.395508f, 0.446533f, 0.497803f, 0.551270f, 0.601562f, 0.651855f, 0.697754f, 0.741211f, 0.908203f, 0.915039f,
+ 0.916016f, 0.916016f, 0.916504f, 0.915527f, 0.000239f, 0.000345f, 0.000690f, 0.000913f, 0.001250f, 0.001343f, 0.001579f, 0.002050f,
+ 0.002331f, 0.002861f, 0.003048f, 0.003616f, 0.003696f, 0.004211f, 0.004723f, 0.005074f, 0.005657f, 0.006100f, 0.006893f, 0.007290f,
+ 0.008118f, 0.008659f, 0.009552f, 0.010704f, 0.011681f, 0.012764f, 0.014114f, 0.015533f, 0.017227f, 0.018982f, 0.021286f, 0.023560f,
+ 0.026489f, 0.029861f, 0.033417f, 0.037933f, 0.043121f, 0.049286f, 0.056519f, 0.065002f, 0.075073f, 0.087158f, 0.101624f, 0.118835f,
+ 0.139648f, 0.164185f, 0.193481f, 0.226929f, 0.265625f, 0.309570f, 0.356934f, 0.408203f, 0.461426f, 0.516113f, 0.569824f, 0.623047f,
+ 0.674316f, 0.720703f, 0.902344f, 0.908203f, 0.909668f, 0.910645f, 0.910645f, 0.911133f, 0.000000f, 0.000281f, 0.000560f, 0.000977f,
+ 0.001063f, 0.001171f, 0.001569f, 0.001903f, 0.002075f, 0.002413f, 0.002695f, 0.003004f, 0.003399f, 0.003553f, 0.003998f, 0.004333f,
+ 0.004971f, 0.005314f, 0.005806f, 0.006340f, 0.007015f, 0.007492f, 0.008377f, 0.009186f, 0.010094f, 0.010910f, 0.012199f, 0.013351f,
+ 0.014618f, 0.016266f, 0.018082f, 0.019852f, 0.022491f, 0.025085f, 0.028168f, 0.031799f, 0.036041f, 0.041107f, 0.047394f, 0.054321f,
+ 0.062866f, 0.073181f, 0.085327f, 0.100525f, 0.118408f, 0.139648f, 0.165527f, 0.196411f, 0.231812f, 0.273193f, 0.318848f, 0.369629f,
+ 0.423828f, 0.480225f, 0.536621f, 0.592773f, 0.647949f, 0.699707f, 0.894043f, 0.900879f, 0.903809f, 0.903320f, 0.903320f, 0.902832f,
+ 0.000232f, 0.000227f, 0.000555f, 0.000656f, 0.000937f, 0.000985f, 0.001351f, 0.001723f, 0.001925f, 0.002010f, 0.002445f, 0.002625f,
+ 0.002760f, 0.003220f, 0.003551f, 0.003870f, 0.004303f, 0.004826f, 0.005028f, 0.005451f, 0.005985f, 0.006523f, 0.007000f, 0.007744f,
+ 0.008499f, 0.009361f, 0.010109f, 0.011185f, 0.012413f, 0.013603f, 0.015121f, 0.016891f, 0.018753f, 0.020920f, 0.023407f, 0.026764f,
+ 0.030197f, 0.034302f, 0.039429f, 0.044891f, 0.052368f, 0.060822f, 0.071167f, 0.083557f, 0.098877f, 0.117493f, 0.139893f, 0.167725f,
+ 0.200195f, 0.238037f, 0.281982f, 0.331543f, 0.385010f, 0.442627f, 0.501465f, 0.561523f, 0.620605f, 0.675781f, 0.887207f, 0.894531f,
+ 0.895020f, 0.896484f, 0.896484f, 0.895996f, 0.000000f, 0.000332f, 0.000577f, 0.000723f, 0.000720f, 0.001210f, 0.001469f, 0.001456f,
+ 0.001546f, 0.001775f, 0.002159f, 0.002291f, 0.002659f, 0.002916f, 0.003046f, 0.003439f, 0.003752f, 0.003883f, 0.004375f, 0.004635f,
+ 0.005241f, 0.005638f, 0.006054f, 0.006630f, 0.007191f, 0.007744f, 0.008545f, 0.009178f, 0.010498f, 0.011536f, 0.012802f, 0.013931f,
+ 0.015808f, 0.017548f, 0.019379f, 0.022110f, 0.025040f, 0.028473f, 0.032471f, 0.037323f, 0.043152f, 0.050476f, 0.058807f, 0.069214f,
+ 0.082520f, 0.098145f, 0.116821f, 0.141602f, 0.170044f, 0.204834f, 0.245728f, 0.293213f, 0.346436f, 0.403564f, 0.464111f, 0.527832f,
+ 0.589844f, 0.650879f, 0.878418f, 0.886719f, 0.888184f, 0.887695f, 0.888672f, 0.888672f, 0.000243f, 0.000307f, 0.000526f, 0.000561f,
+ 0.000923f, 0.000980f, 0.001143f, 0.001386f, 0.001414f, 0.001683f, 0.001735f, 0.001972f, 0.002232f, 0.002481f, 0.002657f, 0.002754f,
+ 0.003193f, 0.003359f, 0.003603f, 0.003956f, 0.004368f, 0.004692f, 0.005119f, 0.005596f, 0.005955f, 0.006634f, 0.007256f, 0.007881f,
+ 0.008652f, 0.009552f, 0.010376f, 0.011719f, 0.012634f, 0.014595f, 0.016113f, 0.018219f, 0.020554f, 0.023254f, 0.026520f, 0.030502f,
+ 0.035553f, 0.041168f, 0.048065f, 0.057190f, 0.067261f, 0.080811f, 0.097107f, 0.117737f, 0.143066f, 0.173950f, 0.211182f, 0.256592f,
+ 0.307129f, 0.364502f, 0.427002f, 0.491943f, 0.557617f, 0.624023f, 0.869629f, 0.877930f, 0.879883f, 0.879883f, 0.879883f, 0.880371f,
+ 0.000000f, 0.000270f, 0.000342f, 0.000509f, 0.000668f, 0.000989f, 0.000945f, 0.001105f, 0.001230f, 0.001335f, 0.001492f, 0.001757f,
+ 0.001917f, 0.002140f, 0.002386f, 0.002501f, 0.002644f, 0.002884f, 0.003199f, 0.003441f, 0.003620f, 0.003891f, 0.004337f, 0.004631f,
+ 0.005119f, 0.005520f, 0.006100f, 0.006504f, 0.007301f, 0.007771f, 0.008751f, 0.009521f, 0.010658f, 0.011765f, 0.013145f, 0.014641f,
+ 0.016785f, 0.018829f, 0.021545f, 0.024719f, 0.028381f, 0.033203f, 0.038849f, 0.046112f, 0.055084f, 0.065552f, 0.079529f, 0.096985f,
+ 0.118530f, 0.145630f, 0.179321f, 0.220337f, 0.269287f, 0.325439f, 0.387207f, 0.454102f, 0.524414f, 0.595215f, 0.859863f, 0.868652f,
+ 0.870605f, 0.869629f, 0.870117f, 0.870605f, 0.000000f, 0.000230f, 0.000334f, 0.000416f, 0.000700f, 0.000726f, 0.000921f, 0.001008f,
+ 0.001065f, 0.001186f, 0.001365f, 0.001471f, 0.001627f, 0.001796f, 0.001843f, 0.002069f, 0.002266f, 0.002438f, 0.002596f, 0.002831f,
+ 0.003000f, 0.003298f, 0.003597f, 0.003887f, 0.004265f, 0.004581f, 0.004986f, 0.005505f, 0.005947f, 0.006454f, 0.007069f, 0.007801f,
+ 0.008621f, 0.009575f, 0.010612f, 0.011848f, 0.013321f, 0.015259f, 0.017410f, 0.019775f, 0.022934f, 0.026550f, 0.031464f, 0.036713f,
+ 0.043945f, 0.052887f, 0.064209f, 0.078735f, 0.096924f, 0.120361f, 0.149536f, 0.186768f, 0.232422f, 0.285889f, 0.347656f, 0.415527f,
+ 0.488281f, 0.563965f, 0.849121f, 0.857910f, 0.859375f, 0.860840f, 0.860840f, 0.860352f, 0.000233f, 0.000225f, 0.000219f, 0.000431f,
+ 0.000579f, 0.000648f, 0.000671f, 0.000744f, 0.000946f, 0.000994f, 0.001091f, 0.001307f, 0.001364f, 0.001490f, 0.001561f, 0.001712f,
+ 0.001892f, 0.001999f, 0.002190f, 0.002369f, 0.002512f, 0.002733f, 0.003014f, 0.003145f, 0.003553f, 0.003822f, 0.004135f, 0.004326f,
+ 0.004799f, 0.005344f, 0.005718f, 0.006378f, 0.007008f, 0.007721f, 0.008400f, 0.009537f, 0.010597f, 0.011917f, 0.013542f, 0.015579f,
+ 0.018051f, 0.020889f, 0.024765f, 0.029236f, 0.034668f, 0.041779f, 0.051056f, 0.062439f, 0.077576f, 0.097595f, 0.122864f, 0.155273f,
+ 0.196655f, 0.247437f, 0.307617f, 0.375977f, 0.450684f, 0.531250f, 0.837891f, 0.847168f, 0.848633f, 0.849609f, 0.849121f, 0.849609f,
+ 0.000202f, 0.000180f, 0.000206f, 0.000339f, 0.000479f, 0.000536f, 0.000687f, 0.000739f, 0.000771f, 0.000849f, 0.001051f, 0.001060f,
+ 0.001154f, 0.001219f, 0.001389f, 0.001505f, 0.001469f, 0.001729f, 0.001858f, 0.001980f, 0.002209f, 0.002243f, 0.002483f, 0.002695f,
+ 0.002951f, 0.003149f, 0.003374f, 0.003654f, 0.004002f, 0.004154f, 0.004539f, 0.005032f, 0.005428f, 0.005989f, 0.006760f, 0.007549f,
+ 0.008423f, 0.009499f, 0.010620f, 0.012016f, 0.013992f, 0.016434f, 0.019135f, 0.022583f, 0.026840f, 0.032501f, 0.039551f, 0.048828f,
+ 0.061066f, 0.077393f, 0.098755f, 0.127075f, 0.163208f, 0.209717f, 0.267578f, 0.334961f, 0.411133f, 0.494629f, 0.825684f, 0.834473f,
+ 0.836426f, 0.837402f, 0.837402f, 0.837402f, 0.000000f, 0.000185f, 0.000184f, 0.000404f, 0.000408f, 0.000454f, 0.000480f, 0.000506f,
+ 0.000660f, 0.000694f, 0.000742f, 0.000801f, 0.000989f, 0.001111f, 0.001167f, 0.001250f, 0.001311f, 0.001424f, 0.001541f, 0.001574f,
+ 0.001712f, 0.001930f, 0.001982f, 0.002201f, 0.002375f, 0.002439f, 0.002792f, 0.002905f, 0.003065f, 0.003412f, 0.003653f, 0.003952f,
+ 0.004463f, 0.004723f, 0.005230f, 0.005936f, 0.006386f, 0.007092f, 0.008240f, 0.009247f, 0.010765f, 0.012344f, 0.014420f, 0.017090f,
+ 0.020493f, 0.024551f, 0.030014f, 0.037689f, 0.047302f, 0.060028f, 0.077820f, 0.100830f, 0.132812f, 0.174561f, 0.228516f, 0.294434f,
+ 0.371582f, 0.457031f, 0.812012f, 0.820801f, 0.823730f, 0.824219f, 0.824707f, 0.824219f, 0.000000f, 0.000053f, 0.000206f, 0.000360f,
+ 0.000379f, 0.000391f, 0.000379f, 0.000478f, 0.000549f, 0.000589f, 0.000626f, 0.000674f, 0.000762f, 0.000832f, 0.000894f, 0.001050f,
+ 0.001111f, 0.001155f, 0.001286f, 0.001345f, 0.001449f, 0.001564f, 0.001666f, 0.001750f, 0.001856f, 0.001925f, 0.002056f, 0.002359f,
+ 0.002542f, 0.002728f, 0.003042f, 0.003164f, 0.003460f, 0.003786f, 0.004116f, 0.004578f, 0.005116f, 0.005688f, 0.006508f, 0.007229f,
+ 0.008125f, 0.009232f, 0.010796f, 0.012741f, 0.015137f, 0.018158f, 0.022186f, 0.028030f, 0.035248f, 0.045593f, 0.059052f, 0.078308f,
+ 0.105042f, 0.141602f, 0.190308f, 0.252930f, 0.329102f, 0.417969f, 0.797852f, 0.807129f, 0.810059f, 0.810547f, 0.811035f, 0.810547f,
+ 0.000000f, 0.000000f, 0.000082f, 0.000195f, 0.000309f, 0.000336f, 0.000324f, 0.000414f, 0.000439f, 0.000460f, 0.000599f, 0.000643f,
+ 0.000637f, 0.000690f, 0.000733f, 0.000834f, 0.000821f, 0.000922f, 0.000989f, 0.001067f, 0.001207f, 0.001293f, 0.001327f, 0.001476f,
+ 0.001581f, 0.001663f, 0.001725f, 0.001906f, 0.001934f, 0.002180f, 0.002258f, 0.002602f, 0.002701f, 0.003019f, 0.003229f, 0.003502f,
+ 0.003847f, 0.004261f, 0.004795f, 0.005318f, 0.006130f, 0.007008f, 0.008118f, 0.009277f, 0.011024f, 0.013229f, 0.016205f, 0.020203f,
+ 0.025620f, 0.033020f, 0.043854f, 0.059021f, 0.080383f, 0.111206f, 0.154419f, 0.212646f, 0.287354f, 0.378418f, 0.781250f, 0.792480f,
+ 0.793457f, 0.795410f, 0.795898f, 0.794922f, 0.000000f, 0.000121f, 0.000120f, 0.000198f, 0.000275f, 0.000249f, 0.000290f, 0.000360f,
+ 0.000375f, 0.000379f, 0.000391f, 0.000438f, 0.000505f, 0.000534f, 0.000669f, 0.000629f, 0.000659f, 0.000754f, 0.000890f, 0.000833f,
+ 0.000849f, 0.000975f, 0.001029f, 0.001117f, 0.001193f, 0.001203f, 0.001269f, 0.001424f, 0.001594f, 0.001675f, 0.001737f, 0.001957f,
+ 0.002094f, 0.002319f, 0.002342f, 0.002609f, 0.002928f, 0.003248f, 0.003523f, 0.003967f, 0.004547f, 0.005138f, 0.005871f, 0.006760f,
+ 0.007912f, 0.009430f, 0.011528f, 0.014236f, 0.017899f, 0.023346f, 0.031235f, 0.042694f, 0.059235f, 0.084229f, 0.120972f, 0.173950f,
+ 0.245239f, 0.334473f, 0.764160f, 0.775391f, 0.777344f, 0.778809f, 0.777832f, 0.778809f, 0.000000f, 0.000121f, 0.000119f, 0.000182f,
+ 0.000177f, 0.000179f, 0.000262f, 0.000239f, 0.000309f, 0.000322f, 0.000404f, 0.000370f, 0.000361f, 0.000430f, 0.000458f, 0.000540f,
+ 0.000589f, 0.000615f, 0.000648f, 0.000632f, 0.000777f, 0.000782f, 0.000798f, 0.000871f, 0.000857f, 0.000925f, 0.001000f, 0.001045f,
+ 0.001191f, 0.001223f, 0.001426f, 0.001419f, 0.001512f, 0.001635f, 0.001884f, 0.002092f, 0.002100f, 0.002293f, 0.002577f, 0.003012f,
+ 0.003258f, 0.003761f, 0.004253f, 0.004814f, 0.005619f, 0.006676f, 0.008064f, 0.009750f, 0.012268f, 0.015854f, 0.021255f, 0.029282f,
+ 0.041687f, 0.061005f, 0.091370f, 0.136230f, 0.202759f, 0.291504f, 0.746582f, 0.757324f, 0.759277f, 0.760254f, 0.760254f, 0.760254f,
+ 0.000000f, 0.000000f, 0.000117f, 0.000126f, 0.000113f, 0.000146f, 0.000158f, 0.000155f, 0.000189f, 0.000288f, 0.000254f, 0.000336f,
+ 0.000347f, 0.000353f, 0.000370f, 0.000355f, 0.000390f, 0.000417f, 0.000456f, 0.000480f, 0.000525f, 0.000587f, 0.000596f, 0.000620f,
+ 0.000676f, 0.000740f, 0.000758f, 0.000852f, 0.000907f, 0.000947f, 0.001057f, 0.001122f, 0.001170f, 0.001293f, 0.001316f, 0.001437f,
+ 0.001531f, 0.001813f, 0.001952f, 0.002090f, 0.002346f, 0.002560f, 0.002974f, 0.003334f, 0.003899f, 0.004547f, 0.005360f, 0.006516f,
+ 0.008179f, 0.010468f, 0.013947f, 0.019241f, 0.027832f, 0.041443f, 0.064941f, 0.102600f, 0.162231f, 0.247437f, 0.726074f, 0.737793f,
+ 0.739258f, 0.740723f, 0.741211f, 0.741211f, 0.000000f, 0.000118f, 0.000115f, 0.000113f, 0.000110f, 0.000126f, 0.000121f, 0.000139f,
+ 0.000147f, 0.000160f, 0.000161f, 0.000233f, 0.000199f, 0.000266f, 0.000286f, 0.000297f, 0.000329f, 0.000313f, 0.000347f, 0.000358f,
+ 0.000364f, 0.000394f, 0.000435f, 0.000446f, 0.000489f, 0.000506f, 0.000546f, 0.000625f, 0.000648f, 0.000674f, 0.000723f, 0.000782f,
+ 0.000865f, 0.000918f, 0.000979f, 0.001104f, 0.001100f, 0.001196f, 0.001352f, 0.001488f, 0.001586f, 0.001749f, 0.001955f, 0.002275f,
+ 0.002644f, 0.003054f, 0.003563f, 0.004322f, 0.005314f, 0.006786f, 0.008980f, 0.012115f, 0.017319f, 0.026520f, 0.043121f, 0.072693f,
+ 0.123535f, 0.203613f, 0.705566f, 0.716797f, 0.719238f, 0.719727f, 0.720703f, 0.721191f, 0.000000f, 0.000000f, 0.000112f, 0.000109f,
+ 0.000106f, 0.000104f, 0.000102f, 0.000096f, 0.000091f, 0.000113f, 0.000147f, 0.000129f, 0.000155f, 0.000134f, 0.000196f, 0.000205f,
+ 0.000181f, 0.000239f, 0.000297f, 0.000255f, 0.000317f, 0.000273f, 0.000335f, 0.000299f, 0.000379f, 0.000385f, 0.000398f, 0.000402f,
+ 0.000473f, 0.000552f, 0.000489f, 0.000543f, 0.000557f, 0.000606f, 0.000662f, 0.000698f, 0.000747f, 0.000810f, 0.000902f, 0.000961f,
+ 0.001063f, 0.001166f, 0.001312f, 0.001523f, 0.001662f, 0.001908f, 0.002298f, 0.002758f, 0.003365f, 0.004135f, 0.005394f, 0.007290f,
+ 0.010490f, 0.015991f, 0.026215f, 0.047180f, 0.087646f, 0.160645f, 0.682617f, 0.695801f, 0.697266f, 0.697266f, 0.697266f, 0.698730f,
+ 0.000000f, 0.000112f, 0.000106f, 0.000104f, 0.000100f, 0.000098f, 0.000095f, 0.000094f, 0.000090f, 0.000085f, 0.000080f, 0.000081f,
+ 0.000085f, 0.000123f, 0.000123f, 0.000138f, 0.000151f, 0.000158f, 0.000147f, 0.000171f, 0.000183f, 0.000192f, 0.000242f, 0.000215f,
+ 0.000253f, 0.000256f, 0.000269f, 0.000278f, 0.000293f, 0.000315f, 0.000377f, 0.000357f, 0.000357f, 0.000423f, 0.000479f, 0.000493f,
+ 0.000489f, 0.000535f, 0.000579f, 0.000628f, 0.000683f, 0.000731f, 0.000833f, 0.000935f, 0.001068f, 0.001200f, 0.001347f, 0.001581f,
+ 0.001995f, 0.002419f, 0.003109f, 0.004147f, 0.005829f, 0.008919f, 0.014641f, 0.027405f, 0.056885f, 0.119385f, 0.658691f, 0.669922f,
+ 0.673828f, 0.673828f, 0.675293f, 0.675293f, 0.000000f, 0.000105f, 0.000101f, 0.000096f, 0.000092f, 0.000089f, 0.000087f, 0.000085f,
+ 0.000083f, 0.000081f, 0.000077f, 0.000073f, 0.000070f, 0.000066f, 0.000080f, 0.000084f, 0.000089f, 0.000068f, 0.000101f, 0.000094f,
+ 0.000116f, 0.000118f, 0.000125f, 0.000129f, 0.000150f, 0.000168f, 0.000153f, 0.000192f, 0.000195f, 0.000185f, 0.000200f, 0.000217f,
+ 0.000226f, 0.000247f, 0.000257f, 0.000262f, 0.000319f, 0.000334f, 0.000347f, 0.000376f, 0.000395f, 0.000447f, 0.000504f, 0.000544f,
+ 0.000590f, 0.000670f, 0.000789f, 0.000887f, 0.001069f, 0.001345f, 0.001670f, 0.002167f, 0.003065f, 0.004562f, 0.007660f, 0.014290f,
+ 0.032135f, 0.081299f, 0.632812f, 0.645996f, 0.648926f, 0.649414f, 0.648926f, 0.649902f, 0.000109f, 0.000094f, 0.000087f, 0.000082f,
+ 0.000078f, 0.000076f, 0.000074f, 0.000071f, 0.000069f, 0.000068f, 0.000067f, 0.000066f, 0.000064f, 0.000061f, 0.000058f, 0.000055f,
+ 0.000053f, 0.000050f, 0.000051f, 0.000046f, 0.000059f, 0.000056f, 0.000057f, 0.000068f, 0.000078f, 0.000088f, 0.000096f, 0.000096f,
+ 0.000105f, 0.000107f, 0.000128f, 0.000121f, 0.000133f, 0.000141f, 0.000156f, 0.000151f, 0.000160f, 0.000200f, 0.000209f, 0.000198f,
+ 0.000222f, 0.000242f, 0.000258f, 0.000275f, 0.000314f, 0.000352f, 0.000410f, 0.000468f, 0.000537f, 0.000639f, 0.000799f, 0.001002f,
+ 0.001390f, 0.002092f, 0.003466f, 0.006653f, 0.015305f, 0.048004f, 0.606934f, 0.618652f, 0.622559f, 0.623047f, 0.623535f, 0.624023f,
+ 0.000084f, 0.000067f, 0.000064f, 0.000062f, 0.000057f, 0.000056f, 0.000053f, 0.000054f, 0.000051f, 0.000052f, 0.000050f, 0.000050f,
+ 0.000050f, 0.000049f, 0.000048f, 0.000047f, 0.000046f, 0.000044f, 0.000042f, 0.000040f, 0.000039f, 0.000037f, 0.000035f, 0.000036f,
+ 0.000037f, 0.000031f, 0.000040f, 0.000041f, 0.000042f, 0.000051f, 0.000058f, 0.000063f, 0.000067f, 0.000069f, 0.000072f, 0.000079f,
+ 0.000085f, 0.000092f, 0.000093f, 0.000101f, 0.000107f, 0.000123f, 0.000125f, 0.000139f, 0.000147f, 0.000154f, 0.000181f, 0.000204f,
+ 0.000229f, 0.000270f, 0.000327f, 0.000425f, 0.000559f, 0.000772f, 0.001265f, 0.002462f, 0.006191f, 0.022415f, 0.578613f, 0.592285f,
+ 0.595215f, 0.596191f, 0.596191f, 0.597656f, 0.000008f, 0.000022f, 0.000022f, 0.000024f, 0.000024f, 0.000027f, 0.000028f, 0.000028f,
+ 0.000028f, 0.000026f, 0.000028f, 0.000029f, 0.000029f, 0.000028f, 0.000029f, 0.000029f, 0.000029f, 0.000029f, 0.000030f, 0.000030f,
+ 0.000030f, 0.000029f, 0.000028f, 0.000027f, 0.000026f, 0.000025f, 0.000024f, 0.000023f, 0.000022f, 0.000021f, 0.000020f, 0.000019f,
+ 0.000021f, 0.000020f, 0.000022f, 0.000026f, 0.000028f, 0.000033f, 0.000037f, 0.000036f, 0.000039f, 0.000045f, 0.000051f, 0.000046f,
+ 0.000056f, 0.000059f, 0.000061f, 0.000071f, 0.000084f, 0.000098f, 0.000110f, 0.000133f, 0.000169f, 0.000223f, 0.000356f, 0.000648f,
+ 0.001702f, 0.007713f, 0.550293f, 0.564453f, 0.566895f, 0.567871f, 0.568359f, 0.568848f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000002f, 0.000003f, 0.000004f, 0.000006f,
+ 0.000007f, 0.000007f, 0.000008f, 0.000008f, 0.000009f, 0.000010f, 0.000011f, 0.000011f, 0.000012f, 0.000012f, 0.000013f, 0.000013f,
+ 0.000013f, 0.000014f, 0.000014f, 0.000013f, 0.000012f, 0.000012f, 0.000011f, 0.000011f, 0.000010f, 0.000010f, 0.000009f, 0.000009f,
+ 0.000008f, 0.000008f, 0.000009f, 0.000011f, 0.000014f, 0.000017f, 0.000015f, 0.000018f, 0.000021f, 0.000022f, 0.000023f, 0.000026f,
+ 0.000035f, 0.000040f, 0.000056f, 0.000089f, 0.000225f, 0.001332f, 0.520996f, 0.535156f, 0.538086f, 0.540039f, 0.540039f, 0.540039f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000003f, 0.000003f, 0.000003f, 0.000003f,
+ 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000001f, 0.000002f, 0.000003f, 0.000003f, 0.000004f, 0.000017f, 0.491211f, 0.506348f,
+ 0.508789f, 0.510254f, 0.510254f, 0.510742f,
+ },
+ {
+ 0.064758f, 0.179688f, 0.277344f, 0.358398f, 0.427002f, 0.485107f, 0.535156f, 0.578613f, 0.615234f, 0.647949f, 0.677734f, 0.703125f,
+ 0.725586f, 0.745605f, 0.763672f, 0.780273f, 0.795410f, 0.810059f, 0.821777f, 0.833496f, 0.843750f, 0.854004f, 0.862793f, 0.871582f,
+ 0.879883f, 0.886719f, 0.894043f, 0.900879f, 0.906250f, 0.912109f, 0.917969f, 0.922852f, 0.927246f, 0.932129f, 0.936523f, 0.940918f,
+ 0.944824f, 0.948242f, 0.951660f, 0.955078f, 0.958496f, 0.961426f, 0.964844f, 0.967773f, 0.970215f, 0.973145f, 0.975586f, 0.977539f,
+ 0.979980f, 0.982422f, 0.984863f, 0.986328f, 0.988770f, 0.990234f, 0.992676f, 0.993652f, 0.995605f, 0.997559f, 0.998535f, 0.996582f,
+ 0.995117f, 0.993652f, 0.992188f, 0.990723f, 0.040344f, 0.121460f, 0.199341f, 0.272949f, 0.339600f, 0.401123f, 0.455078f, 0.501953f,
+ 0.546875f, 0.583984f, 0.618164f, 0.648926f, 0.676270f, 0.700195f, 0.723145f, 0.743164f, 0.761230f, 0.776855f, 0.793457f, 0.806641f,
+ 0.819336f, 0.831543f, 0.842285f, 0.852051f, 0.861328f, 0.869629f, 0.877930f, 0.886230f, 0.892578f, 0.899902f, 0.905273f, 0.911621f,
+ 0.917480f, 0.922852f, 0.927246f, 0.932129f, 0.936035f, 0.940430f, 0.945312f, 0.949219f, 0.952148f, 0.956055f, 0.958984f, 0.961914f,
+ 0.965332f, 0.967773f, 0.970703f, 0.973633f, 0.976074f, 0.978516f, 0.980957f, 0.983398f, 0.985840f, 0.987305f, 0.989258f, 0.991699f,
+ 0.993652f, 0.995117f, 0.997070f, 0.995605f, 0.994141f, 0.993164f, 0.991699f, 0.990234f, 0.027191f, 0.084961f, 0.145630f, 0.206177f,
+ 0.266113f, 0.323242f, 0.377930f, 0.428711f, 0.474609f, 0.517090f, 0.554688f, 0.591309f, 0.621582f, 0.650391f, 0.676758f, 0.700684f,
+ 0.723145f, 0.741699f, 0.760254f, 0.776855f, 0.791504f, 0.805664f, 0.818359f, 0.830566f, 0.841309f, 0.851074f, 0.861816f, 0.870117f,
+ 0.878418f, 0.885254f, 0.892090f, 0.899414f, 0.906250f, 0.912598f, 0.916992f, 0.922363f, 0.928223f, 0.932617f, 0.937500f, 0.941895f,
+ 0.945801f, 0.949219f, 0.953613f, 0.957031f, 0.960449f, 0.963379f, 0.966797f, 0.969727f, 0.971680f, 0.974609f, 0.977539f, 0.979980f,
+ 0.981934f, 0.984375f, 0.986328f, 0.989258f, 0.991211f, 0.992676f, 0.996094f, 0.994629f, 0.993652f, 0.992188f, 0.990723f, 0.989746f,
+ 0.019577f, 0.061340f, 0.108337f, 0.156860f, 0.207153f, 0.258789f, 0.310059f, 0.358887f, 0.405762f, 0.450928f, 0.491211f, 0.530273f,
+ 0.565430f, 0.597656f, 0.627441f, 0.654297f, 0.680176f, 0.702637f, 0.724121f, 0.743164f, 0.760742f, 0.776855f, 0.791992f, 0.806152f,
+ 0.817871f, 0.830078f, 0.841797f, 0.852539f, 0.861816f, 0.870117f, 0.878906f, 0.886230f, 0.893066f, 0.900391f, 0.906738f, 0.912598f,
+ 0.918457f, 0.923340f, 0.928223f, 0.933594f, 0.938477f, 0.942871f, 0.946777f, 0.950684f, 0.954590f, 0.958496f, 0.960938f, 0.964844f,
+ 0.967773f, 0.970703f, 0.973633f, 0.976074f, 0.979004f, 0.981445f, 0.983398f, 0.985840f, 0.987793f, 0.990234f, 0.995117f, 0.993652f,
+ 0.992676f, 0.991699f, 0.990234f, 0.989258f, 0.014397f, 0.046295f, 0.081543f, 0.120728f, 0.162842f, 0.206177f, 0.250977f, 0.296143f,
+ 0.342041f, 0.385986f, 0.427979f, 0.468262f, 0.506348f, 0.542480f, 0.575195f, 0.605469f, 0.633789f, 0.660156f, 0.684570f, 0.706543f,
+ 0.727539f, 0.745117f, 0.763184f, 0.778809f, 0.793945f, 0.807617f, 0.820312f, 0.833008f, 0.842773f, 0.852539f, 0.862305f, 0.872070f,
+ 0.879395f, 0.887207f, 0.894531f, 0.900879f, 0.907227f, 0.914551f, 0.919922f, 0.925293f, 0.930176f, 0.935547f, 0.938965f, 0.943359f,
+ 0.948730f, 0.952637f, 0.956055f, 0.959473f, 0.962891f, 0.966309f, 0.969238f, 0.972656f, 0.975098f, 0.977539f, 0.980957f, 0.982910f,
+ 0.984863f, 0.987793f, 0.994141f, 0.993164f, 0.991699f, 0.990723f, 0.989746f, 0.988281f, 0.010925f, 0.035828f, 0.063660f, 0.094360f,
+ 0.128174f, 0.164551f, 0.203247f, 0.244385f, 0.285645f, 0.326416f, 0.367432f, 0.409424f, 0.447998f, 0.484131f, 0.520508f, 0.553711f,
+ 0.584473f, 0.614258f, 0.641113f, 0.666016f, 0.689453f, 0.710938f, 0.730469f, 0.750488f, 0.766602f, 0.781250f, 0.796387f, 0.809570f,
+ 0.822266f, 0.833496f, 0.844727f, 0.854980f, 0.864258f, 0.873047f, 0.881348f, 0.889648f, 0.895996f, 0.903809f, 0.910156f, 0.916504f,
+ 0.921387f, 0.926758f, 0.932129f, 0.937500f, 0.941895f, 0.946777f, 0.950684f, 0.954102f, 0.958008f, 0.960938f, 0.965332f, 0.968262f,
+ 0.971680f, 0.975098f, 0.977539f, 0.979492f, 0.982422f, 0.984863f, 0.992676f, 0.991699f, 0.990723f, 0.989746f, 0.988770f, 0.987793f,
+ 0.008698f, 0.028244f, 0.049866f, 0.074463f, 0.102295f, 0.132935f, 0.165161f, 0.200073f, 0.236206f, 0.275391f, 0.313477f, 0.352051f,
+ 0.391113f, 0.428955f, 0.465088f, 0.500977f, 0.534180f, 0.565430f, 0.593750f, 0.622559f, 0.648438f, 0.671875f, 0.694824f, 0.715820f,
+ 0.734863f, 0.753906f, 0.771484f, 0.784668f, 0.799805f, 0.813477f, 0.825195f, 0.836914f, 0.847656f, 0.857910f, 0.866699f, 0.875488f,
+ 0.884766f, 0.892090f, 0.898438f, 0.906250f, 0.913086f, 0.918457f, 0.923828f, 0.929688f, 0.935059f, 0.939941f, 0.944336f, 0.948730f,
+ 0.952637f, 0.956055f, 0.959961f, 0.963379f, 0.967285f, 0.970703f, 0.973633f, 0.976074f, 0.979492f, 0.982422f, 0.991211f, 0.990723f,
+ 0.990234f, 0.988770f, 0.987793f, 0.986328f, 0.007210f, 0.022797f, 0.040039f, 0.060181f, 0.082153f, 0.107300f, 0.134155f, 0.164673f,
+ 0.196167f, 0.229492f, 0.265381f, 0.301025f, 0.338379f, 0.374756f, 0.411133f, 0.446533f, 0.481201f, 0.515625f, 0.546387f, 0.576660f,
+ 0.605957f, 0.631348f, 0.656738f, 0.681152f, 0.702148f, 0.722168f, 0.741699f, 0.758789f, 0.775391f, 0.791016f, 0.803711f, 0.817383f,
+ 0.829102f, 0.840820f, 0.851562f, 0.860840f, 0.871094f, 0.879395f, 0.887695f, 0.895020f, 0.901855f, 0.909180f, 0.915527f, 0.921387f,
+ 0.927734f, 0.932129f, 0.937500f, 0.941895f, 0.947266f, 0.950684f, 0.955078f, 0.958984f, 0.962891f, 0.966797f, 0.969727f, 0.973145f,
+ 0.976562f, 0.979004f, 0.990234f, 0.989746f, 0.988770f, 0.987793f, 0.986816f, 0.985840f, 0.005863f, 0.018936f, 0.032898f, 0.049377f,
+ 0.067261f, 0.088257f, 0.110535f, 0.135254f, 0.162231f, 0.191895f, 0.223389f, 0.255371f, 0.290039f, 0.324707f, 0.359863f, 0.395996f,
+ 0.429932f, 0.464355f, 0.497314f, 0.529297f, 0.559570f, 0.587891f, 0.616699f, 0.642090f, 0.665527f, 0.688965f, 0.709961f, 0.729492f,
+ 0.747559f, 0.765625f, 0.780762f, 0.794922f, 0.809082f, 0.822754f, 0.833984f, 0.844727f, 0.855957f, 0.864746f, 0.875000f, 0.883789f,
+ 0.891113f, 0.898926f, 0.906250f, 0.912598f, 0.918457f, 0.925293f, 0.930664f, 0.935059f, 0.940918f, 0.945312f, 0.950195f, 0.954590f,
+ 0.958496f, 0.962402f, 0.965820f, 0.969238f, 0.972656f, 0.976074f, 0.988770f, 0.988770f, 0.987793f, 0.986816f, 0.985840f, 0.984863f,
+ 0.004925f, 0.015518f, 0.027451f, 0.041199f, 0.055786f, 0.072998f, 0.091492f, 0.112427f, 0.135254f, 0.160767f, 0.187500f, 0.216919f,
+ 0.247314f, 0.280273f, 0.313477f, 0.346680f, 0.381592f, 0.415283f, 0.448730f, 0.481201f, 0.513184f, 0.543945f, 0.573242f, 0.601562f,
+ 0.627441f, 0.652344f, 0.675293f, 0.697754f, 0.718262f, 0.737793f, 0.754883f, 0.771973f, 0.787109f, 0.800781f, 0.815430f, 0.828125f,
+ 0.839844f, 0.851074f, 0.860840f, 0.870117f, 0.879883f, 0.887695f, 0.896484f, 0.902832f, 0.911133f, 0.916992f, 0.922852f, 0.928711f,
+ 0.934082f, 0.939941f, 0.944336f, 0.948730f, 0.954102f, 0.958008f, 0.961426f, 0.965332f, 0.969238f, 0.972168f, 0.987305f, 0.987305f,
+ 0.986816f, 0.985840f, 0.984863f, 0.983887f, 0.004139f, 0.012955f, 0.022781f, 0.034088f, 0.046997f, 0.061005f, 0.076538f, 0.094360f,
+ 0.113464f, 0.134888f, 0.158203f, 0.183716f, 0.210693f, 0.239990f, 0.270264f, 0.302734f, 0.334961f, 0.367676f, 0.400635f, 0.434082f,
+ 0.467041f, 0.497803f, 0.528809f, 0.558105f, 0.586426f, 0.614258f, 0.638672f, 0.663574f, 0.686035f, 0.707520f, 0.728027f, 0.745605f,
+ 0.762695f, 0.779297f, 0.794434f, 0.808594f, 0.821777f, 0.834473f, 0.845215f, 0.855957f, 0.866699f, 0.876465f, 0.884766f, 0.892090f,
+ 0.900391f, 0.908203f, 0.915039f, 0.920898f, 0.927246f, 0.932617f, 0.937988f, 0.943848f, 0.948730f, 0.952637f, 0.957520f, 0.961426f,
+ 0.965820f, 0.968750f, 0.985840f, 0.985840f, 0.985840f, 0.984375f, 0.983887f, 0.982910f, 0.003492f, 0.011307f, 0.019608f, 0.028793f,
+ 0.039246f, 0.051544f, 0.064392f, 0.078796f, 0.095337f, 0.113953f, 0.134033f, 0.155396f, 0.179688f, 0.205200f, 0.232300f, 0.261475f,
+ 0.291748f, 0.323730f, 0.355225f, 0.387939f, 0.420410f, 0.452637f, 0.483887f, 0.514648f, 0.544922f, 0.573730f, 0.601074f, 0.626953f,
+ 0.651367f, 0.675293f, 0.697266f, 0.717285f, 0.736816f, 0.755371f, 0.771973f, 0.786621f, 0.803223f, 0.815430f, 0.828613f, 0.840820f,
+ 0.851562f, 0.863281f, 0.873047f, 0.880859f, 0.890625f, 0.898438f, 0.905762f, 0.913086f, 0.919434f, 0.925781f, 0.931641f, 0.937500f,
+ 0.942871f, 0.947754f, 0.952637f, 0.957520f, 0.960938f, 0.965820f, 0.984375f, 0.984863f, 0.984375f, 0.983398f, 0.982422f, 0.981445f,
+ 0.002977f, 0.009415f, 0.016708f, 0.024811f, 0.033356f, 0.043457f, 0.054535f, 0.067017f, 0.080322f, 0.096130f, 0.113708f, 0.132080f,
+ 0.152710f, 0.175415f, 0.199829f, 0.226440f, 0.253662f, 0.282959f, 0.313232f, 0.343750f, 0.375000f, 0.406982f, 0.439453f, 0.471191f,
+ 0.501465f, 0.531738f, 0.560547f, 0.587891f, 0.615234f, 0.640625f, 0.664062f, 0.687500f, 0.708496f, 0.728516f, 0.747559f, 0.765137f,
+ 0.781738f, 0.795898f, 0.811523f, 0.824707f, 0.836426f, 0.847656f, 0.858887f, 0.869141f, 0.878906f, 0.887695f, 0.895996f, 0.904297f,
+ 0.911133f, 0.917969f, 0.925293f, 0.931152f, 0.937012f, 0.942383f, 0.947266f, 0.953125f, 0.957031f, 0.961426f, 0.982910f, 0.983398f,
+ 0.982910f, 0.982422f, 0.981445f, 0.980957f, 0.002743f, 0.008568f, 0.014305f, 0.021378f, 0.028732f, 0.037201f, 0.046387f, 0.057068f,
+ 0.068848f, 0.082336f, 0.096924f, 0.113159f, 0.130859f, 0.150146f, 0.171509f, 0.194824f, 0.219482f, 0.246338f, 0.273926f, 0.302734f,
+ 0.333496f, 0.364502f, 0.395752f, 0.426758f, 0.458252f, 0.489990f, 0.519531f, 0.548340f, 0.576660f, 0.604004f, 0.630859f, 0.654297f,
+ 0.678223f, 0.700684f, 0.720215f, 0.740234f, 0.758301f, 0.775391f, 0.790527f, 0.805176f, 0.818848f, 0.833008f, 0.844238f, 0.855469f,
+ 0.866699f, 0.876953f, 0.886230f, 0.894043f, 0.902832f, 0.910645f, 0.917480f, 0.924316f, 0.930664f, 0.937012f, 0.941895f, 0.947266f,
+ 0.952148f, 0.957031f, 0.981445f, 0.982422f, 0.981445f, 0.980957f, 0.980469f, 0.979004f, 0.002504f, 0.007004f, 0.012634f, 0.018555f,
+ 0.024933f, 0.032654f, 0.040283f, 0.048920f, 0.059357f, 0.070007f, 0.082642f, 0.096741f, 0.112122f, 0.128906f, 0.147339f, 0.167603f,
+ 0.189697f, 0.213257f, 0.238770f, 0.265869f, 0.293701f, 0.323242f, 0.354004f, 0.384766f, 0.415283f, 0.447021f, 0.478516f, 0.507812f,
+ 0.536621f, 0.565918f, 0.593750f, 0.620605f, 0.645508f, 0.668945f, 0.692383f, 0.712891f, 0.733398f, 0.751465f, 0.769531f, 0.785156f,
+ 0.801270f, 0.814941f, 0.828125f, 0.841797f, 0.853516f, 0.864746f, 0.874512f, 0.883789f, 0.893555f, 0.900879f, 0.910156f, 0.917480f,
+ 0.923340f, 0.930664f, 0.936523f, 0.942383f, 0.947754f, 0.952637f, 0.979492f, 0.980469f, 0.980469f, 0.979492f, 0.978516f, 0.978027f,
+ 0.002039f, 0.006287f, 0.010864f, 0.016129f, 0.021637f, 0.027786f, 0.034485f, 0.042450f, 0.051331f, 0.060760f, 0.071594f, 0.082886f,
+ 0.096313f, 0.110840f, 0.126587f, 0.145020f, 0.164185f, 0.185181f, 0.207520f, 0.232300f, 0.258301f, 0.285889f, 0.314941f, 0.344238f,
+ 0.374268f, 0.405029f, 0.436035f, 0.466797f, 0.498291f, 0.527344f, 0.555664f, 0.583984f, 0.611328f, 0.636230f, 0.661133f, 0.684082f,
+ 0.705566f, 0.726562f, 0.745605f, 0.764648f, 0.781250f, 0.797852f, 0.812500f, 0.825195f, 0.838867f, 0.851074f, 0.862305f, 0.873535f,
+ 0.883301f, 0.892578f, 0.901367f, 0.908203f, 0.916992f, 0.923828f, 0.931152f, 0.937012f, 0.942383f, 0.947266f, 0.978027f, 0.978516f,
+ 0.979004f, 0.978027f, 0.977051f, 0.977051f, 0.001762f, 0.005489f, 0.009804f, 0.013931f, 0.019028f, 0.024445f, 0.030518f, 0.036865f,
+ 0.044189f, 0.052460f, 0.061432f, 0.071960f, 0.083008f, 0.095642f, 0.109558f, 0.124756f, 0.141602f, 0.160156f, 0.180664f, 0.202148f,
+ 0.225952f, 0.250977f, 0.278076f, 0.305664f, 0.334961f, 0.364990f, 0.394775f, 0.425537f, 0.456543f, 0.487061f, 0.517090f, 0.546387f,
+ 0.575195f, 0.602539f, 0.627930f, 0.653809f, 0.676758f, 0.699707f, 0.721191f, 0.740723f, 0.759766f, 0.777832f, 0.793945f, 0.809082f,
+ 0.823242f, 0.836426f, 0.849609f, 0.861328f, 0.872070f, 0.881836f, 0.892578f, 0.900391f, 0.908691f, 0.916992f, 0.924316f, 0.931152f,
+ 0.937500f, 0.943359f, 0.976074f, 0.977051f, 0.977051f, 0.976562f, 0.976074f, 0.975098f, 0.001675f, 0.005020f, 0.008400f, 0.012253f,
+ 0.016724f, 0.021469f, 0.026428f, 0.032104f, 0.039062f, 0.045563f, 0.053741f, 0.062103f, 0.072205f, 0.082947f, 0.094666f, 0.107727f,
+ 0.122681f, 0.139038f, 0.156250f, 0.176514f, 0.197388f, 0.220581f, 0.244629f, 0.270752f, 0.297607f, 0.326172f, 0.355957f, 0.386475f,
+ 0.416748f, 0.447754f, 0.478027f, 0.507812f, 0.538086f, 0.566406f, 0.594727f, 0.621582f, 0.647461f, 0.671387f, 0.694336f, 0.716797f,
+ 0.737305f, 0.755859f, 0.773438f, 0.791016f, 0.807129f, 0.820801f, 0.834961f, 0.848145f, 0.860352f, 0.871582f, 0.881836f, 0.891602f,
+ 0.901367f, 0.909180f, 0.917480f, 0.925293f, 0.932129f, 0.938965f, 0.974609f, 0.975586f, 0.976074f, 0.974609f, 0.974121f, 0.973633f,
+ 0.001437f, 0.004513f, 0.007427f, 0.010994f, 0.014526f, 0.018829f, 0.023331f, 0.028229f, 0.034058f, 0.040192f, 0.046844f, 0.054321f,
+ 0.062683f, 0.071716f, 0.082397f, 0.093933f, 0.106567f, 0.120728f, 0.136230f, 0.153320f, 0.172485f, 0.192627f, 0.214233f, 0.237915f,
+ 0.263672f, 0.290527f, 0.318115f, 0.347412f, 0.377197f, 0.408203f, 0.438477f, 0.469482f, 0.499512f, 0.529785f, 0.558594f, 0.586914f,
+ 0.614258f, 0.641602f, 0.665527f, 0.689941f, 0.711914f, 0.732422f, 0.752930f, 0.771484f, 0.789062f, 0.805664f, 0.819824f, 0.833984f,
+ 0.847656f, 0.860840f, 0.871094f, 0.881836f, 0.891602f, 0.902344f, 0.910156f, 0.918457f, 0.926270f, 0.932617f, 0.972168f, 0.973633f,
+ 0.973633f, 0.973145f, 0.973145f, 0.971680f, 0.001390f, 0.003952f, 0.006779f, 0.009941f, 0.013062f, 0.017029f, 0.020905f, 0.024994f,
+ 0.029877f, 0.035187f, 0.041077f, 0.047119f, 0.055145f, 0.062500f, 0.071594f, 0.081543f, 0.092712f, 0.104736f, 0.118530f, 0.133179f,
+ 0.150024f, 0.168091f, 0.187378f, 0.209717f, 0.232178f, 0.256836f, 0.283447f, 0.311279f, 0.339844f, 0.369873f, 0.399658f, 0.429932f,
+ 0.461426f, 0.492188f, 0.521973f, 0.551758f, 0.580566f, 0.608887f, 0.635254f, 0.660645f, 0.685059f, 0.708008f, 0.729492f, 0.750488f,
+ 0.769043f, 0.786621f, 0.802734f, 0.818848f, 0.832520f, 0.846680f, 0.860352f, 0.871582f, 0.882324f, 0.892578f, 0.902832f, 0.911133f,
+ 0.919922f, 0.926758f, 0.970703f, 0.971680f, 0.971680f, 0.971680f, 0.971680f, 0.969238f, 0.001328f, 0.003641f, 0.006138f, 0.008690f,
+ 0.011444f, 0.014786f, 0.018311f, 0.022125f, 0.026337f, 0.031403f, 0.036011f, 0.041809f, 0.047943f, 0.054901f, 0.062622f, 0.071106f,
+ 0.081299f, 0.091614f, 0.103455f, 0.116333f, 0.130493f, 0.146484f, 0.164307f, 0.183228f, 0.204224f, 0.226685f, 0.251221f, 0.277100f,
+ 0.303711f, 0.332764f, 0.361572f, 0.391846f, 0.422852f, 0.454102f, 0.485352f, 0.515625f, 0.545410f, 0.574707f, 0.603027f, 0.630371f,
+ 0.656250f, 0.681641f, 0.705078f, 0.726562f, 0.747070f, 0.767578f, 0.784668f, 0.803223f, 0.818848f, 0.833008f, 0.847656f, 0.860352f,
+ 0.872559f, 0.883301f, 0.894043f, 0.903809f, 0.913574f, 0.921387f, 0.967773f, 0.970215f, 0.970215f, 0.968750f, 0.969238f, 0.968750f,
+ 0.001053f, 0.002905f, 0.005432f, 0.007912f, 0.010658f, 0.012901f, 0.016464f, 0.019363f, 0.023376f, 0.027237f, 0.031799f, 0.036346f,
+ 0.042145f, 0.048248f, 0.054871f, 0.062256f, 0.070618f, 0.079834f, 0.089844f, 0.101440f, 0.113831f, 0.128174f, 0.143433f, 0.160156f,
+ 0.179077f, 0.199707f, 0.222046f, 0.245483f, 0.271240f, 0.297363f, 0.325684f, 0.355469f, 0.385254f, 0.416016f, 0.447754f, 0.479004f,
+ 0.508789f, 0.539551f, 0.570312f, 0.598145f, 0.626465f, 0.652344f, 0.678223f, 0.702148f, 0.725098f, 0.746094f, 0.765625f, 0.785645f,
+ 0.803223f, 0.819336f, 0.834961f, 0.848145f, 0.861328f, 0.873535f, 0.884766f, 0.895508f, 0.905762f, 0.915527f, 0.965332f, 0.967773f,
+ 0.968262f, 0.967773f, 0.967285f, 0.966309f, 0.001106f, 0.002684f, 0.004913f, 0.006733f, 0.009300f, 0.011955f, 0.014435f, 0.017700f,
+ 0.020477f, 0.024124f, 0.028091f, 0.032532f, 0.037231f, 0.042511f, 0.048309f, 0.054596f, 0.061798f, 0.069885f, 0.078857f, 0.089050f,
+ 0.099915f, 0.112183f, 0.125488f, 0.140503f, 0.157104f, 0.175293f, 0.195068f, 0.216309f, 0.240356f, 0.265381f, 0.291748f, 0.319580f,
+ 0.348633f, 0.379150f, 0.410156f, 0.441406f, 0.472900f, 0.503418f, 0.534668f, 0.565430f, 0.594727f, 0.622070f, 0.649902f, 0.676270f,
+ 0.700195f, 0.723633f, 0.746094f, 0.766602f, 0.786133f, 0.802734f, 0.819824f, 0.835449f, 0.849609f, 0.863281f, 0.875977f, 0.887695f,
+ 0.898438f, 0.908203f, 0.962891f, 0.965820f, 0.966309f, 0.965332f, 0.964844f, 0.964355f, 0.000782f, 0.002707f, 0.004574f, 0.006184f,
+ 0.008286f, 0.010681f, 0.012878f, 0.015640f, 0.018478f, 0.021912f, 0.025208f, 0.028976f, 0.032867f, 0.037598f, 0.042938f, 0.048370f,
+ 0.054443f, 0.061432f, 0.069214f, 0.077515f, 0.087402f, 0.098145f, 0.109497f, 0.122803f, 0.137329f, 0.153564f, 0.171509f, 0.190918f,
+ 0.212158f, 0.235352f, 0.259766f, 0.286133f, 0.314209f, 0.343262f, 0.373535f, 0.404297f, 0.436279f, 0.467773f, 0.499512f, 0.530273f,
+ 0.561523f, 0.590820f, 0.620117f, 0.647461f, 0.674316f, 0.699219f, 0.722656f, 0.745605f, 0.766602f, 0.785645f, 0.804688f, 0.821777f,
+ 0.836426f, 0.852051f, 0.865234f, 0.878418f, 0.890625f, 0.901855f, 0.959961f, 0.962891f, 0.963867f, 0.963379f, 0.962402f, 0.962402f,
+ 0.000787f, 0.002195f, 0.004250f, 0.005775f, 0.007774f, 0.009445f, 0.011795f, 0.013725f, 0.016678f, 0.019531f, 0.022018f, 0.025665f,
+ 0.029495f, 0.033142f, 0.037598f, 0.042664f, 0.048248f, 0.053772f, 0.060699f, 0.067993f, 0.076416f, 0.085815f, 0.095764f, 0.107422f,
+ 0.120239f, 0.134277f, 0.150269f, 0.167358f, 0.186646f, 0.207764f, 0.230347f, 0.255127f, 0.281250f, 0.308838f, 0.337891f, 0.368408f,
+ 0.399414f, 0.431396f, 0.463135f, 0.495605f, 0.526855f, 0.558594f, 0.588379f, 0.618652f, 0.646973f, 0.673828f, 0.699707f, 0.723633f,
+ 0.746094f, 0.767090f, 0.788086f, 0.806641f, 0.823730f, 0.840332f, 0.854980f, 0.869141f, 0.881836f, 0.893555f, 0.957520f, 0.960938f,
+ 0.960938f, 0.961426f, 0.960449f, 0.959961f, 0.000765f, 0.002207f, 0.003666f, 0.005177f, 0.006973f, 0.008301f, 0.010704f, 0.012794f,
+ 0.015015f, 0.017303f, 0.020309f, 0.022568f, 0.026123f, 0.029587f, 0.033325f, 0.037659f, 0.042206f, 0.047516f, 0.053223f, 0.059814f,
+ 0.067017f, 0.075195f, 0.083801f, 0.094055f, 0.105042f, 0.117737f, 0.131470f, 0.146851f, 0.163940f, 0.182739f, 0.203369f, 0.225952f,
+ 0.250244f, 0.276367f, 0.304199f, 0.333008f, 0.364258f, 0.395264f, 0.427002f, 0.459961f, 0.491699f, 0.524414f, 0.555664f, 0.586914f,
+ 0.617676f, 0.645996f, 0.673340f, 0.699707f, 0.724121f, 0.748047f, 0.770020f, 0.790039f, 0.809082f, 0.827148f, 0.842773f, 0.858398f,
+ 0.873047f, 0.885742f, 0.954102f, 0.958008f, 0.958496f, 0.958496f, 0.958496f, 0.957520f, 0.000586f, 0.001937f, 0.003107f, 0.004745f,
+ 0.006168f, 0.007610f, 0.009590f, 0.011345f, 0.013321f, 0.015587f, 0.017593f, 0.020294f, 0.023346f, 0.026154f, 0.029205f, 0.033234f,
+ 0.037415f, 0.041962f, 0.046906f, 0.052673f, 0.058533f, 0.065796f, 0.073669f, 0.082642f, 0.092346f, 0.103027f, 0.115234f, 0.128784f,
+ 0.143799f, 0.160889f, 0.179199f, 0.199585f, 0.221802f, 0.246094f, 0.271973f, 0.299805f, 0.329102f, 0.359863f, 0.391357f, 0.423340f,
+ 0.456299f, 0.490234f, 0.522949f, 0.555176f, 0.586426f, 0.617188f, 0.645996f, 0.675293f, 0.701660f, 0.726074f, 0.750488f, 0.773926f,
+ 0.793945f, 0.812988f, 0.831543f, 0.847656f, 0.862793f, 0.877441f, 0.951660f, 0.955078f, 0.955566f, 0.955566f, 0.955078f, 0.954590f,
+ 0.000678f, 0.001864f, 0.003138f, 0.004333f, 0.005707f, 0.006893f, 0.008224f, 0.009850f, 0.012215f, 0.013954f, 0.015747f, 0.018219f,
+ 0.020584f, 0.023148f, 0.026047f, 0.029434f, 0.033020f, 0.037018f, 0.041626f, 0.046509f, 0.051910f, 0.058105f, 0.064636f, 0.072510f,
+ 0.080750f, 0.090149f, 0.100891f, 0.112549f, 0.126343f, 0.141113f, 0.157593f, 0.175537f, 0.195801f, 0.218018f, 0.242554f, 0.268311f,
+ 0.295898f, 0.325195f, 0.355713f, 0.388184f, 0.421143f, 0.454834f, 0.488281f, 0.522949f, 0.554199f, 0.587402f, 0.618164f, 0.648438f,
+ 0.676758f, 0.704102f, 0.730957f, 0.754395f, 0.776855f, 0.798340f, 0.817871f, 0.836426f, 0.852051f, 0.868164f, 0.948242f, 0.952637f,
+ 0.953125f, 0.952637f, 0.952148f, 0.951660f, 0.000470f, 0.001578f, 0.002934f, 0.003838f, 0.005032f, 0.006310f, 0.007725f, 0.008972f,
+ 0.010826f, 0.012657f, 0.014359f, 0.015991f, 0.018402f, 0.020721f, 0.023102f, 0.026230f, 0.029495f, 0.032867f, 0.036743f, 0.040680f,
+ 0.045654f, 0.050812f, 0.056763f, 0.063477f, 0.071045f, 0.078918f, 0.088440f, 0.098938f, 0.110657f, 0.123535f, 0.138062f, 0.154175f,
+ 0.172363f, 0.192627f, 0.214478f, 0.238770f, 0.264404f, 0.292236f, 0.322266f, 0.353271f, 0.385742f, 0.419189f, 0.453857f, 0.487549f,
+ 0.521484f, 0.555664f, 0.588867f, 0.621094f, 0.651367f, 0.680176f, 0.708008f, 0.733887f, 0.759766f, 0.780762f, 0.802734f, 0.821289f,
+ 0.840820f, 0.858398f, 0.943848f, 0.949219f, 0.949707f, 0.949707f, 0.949707f, 0.949219f, 0.000485f, 0.001689f, 0.002386f, 0.003698f,
+ 0.004547f, 0.005936f, 0.006851f, 0.008217f, 0.009834f, 0.011055f, 0.012810f, 0.014473f, 0.016449f, 0.018509f, 0.020950f, 0.023209f,
+ 0.025940f, 0.029114f, 0.032410f, 0.036133f, 0.040161f, 0.044861f, 0.050018f, 0.055664f, 0.061859f, 0.069153f, 0.077515f, 0.086365f,
+ 0.096680f, 0.108093f, 0.120605f, 0.135132f, 0.151489f, 0.169556f, 0.189209f, 0.211426f, 0.235352f, 0.261475f, 0.289307f, 0.319580f,
+ 0.351074f, 0.384521f, 0.418701f, 0.452881f, 0.487549f, 0.522461f, 0.556641f, 0.591309f, 0.623535f, 0.653809f, 0.684570f, 0.712891f,
+ 0.739258f, 0.764160f, 0.787109f, 0.809570f, 0.829102f, 0.847168f, 0.940918f, 0.945801f, 0.946289f, 0.946777f, 0.946777f, 0.945312f,
+ 0.000620f, 0.001351f, 0.002413f, 0.003273f, 0.004307f, 0.004971f, 0.006138f, 0.007542f, 0.008835f, 0.009972f, 0.011581f, 0.013069f,
+ 0.014717f, 0.016495f, 0.018738f, 0.020691f, 0.023315f, 0.025879f, 0.028793f, 0.031860f, 0.035309f, 0.039246f, 0.043762f, 0.048950f,
+ 0.054474f, 0.060669f, 0.067932f, 0.075378f, 0.084351f, 0.094055f, 0.105774f, 0.118469f, 0.132690f, 0.148315f, 0.166504f, 0.186401f,
+ 0.208130f, 0.232544f, 0.258789f, 0.287109f, 0.317627f, 0.349854f, 0.383057f, 0.417725f, 0.453125f, 0.488770f, 0.523926f, 0.559082f,
+ 0.594238f, 0.627441f, 0.659180f, 0.689941f, 0.719238f, 0.745117f, 0.770508f, 0.794434f, 0.815430f, 0.836914f, 0.936523f, 0.941895f,
+ 0.942871f, 0.942871f, 0.942871f, 0.942383f, 0.000404f, 0.001095f, 0.002087f, 0.002983f, 0.003986f, 0.004673f, 0.005844f, 0.006878f,
+ 0.007740f, 0.008873f, 0.010323f, 0.011757f, 0.013176f, 0.014915f, 0.016586f, 0.018585f, 0.020523f, 0.022720f, 0.025391f, 0.028244f,
+ 0.031219f, 0.034821f, 0.038788f, 0.042908f, 0.047943f, 0.053040f, 0.058960f, 0.066162f, 0.073547f, 0.082397f, 0.092285f, 0.102844f,
+ 0.115234f, 0.129883f, 0.146118f, 0.163452f, 0.183350f, 0.205688f, 0.229614f, 0.256592f, 0.285156f, 0.316162f, 0.348633f, 0.383057f,
+ 0.418457f, 0.454590f, 0.490967f, 0.526855f, 0.563477f, 0.598633f, 0.632812f, 0.665527f, 0.696777f, 0.726074f, 0.752930f, 0.779297f,
+ 0.803223f, 0.825684f, 0.933105f, 0.938477f, 0.938477f, 0.938965f, 0.938477f, 0.938477f, 0.000415f, 0.000864f, 0.001907f, 0.002775f,
+ 0.003519f, 0.004204f, 0.005352f, 0.006237f, 0.007019f, 0.008064f, 0.009239f, 0.010483f, 0.011742f, 0.013130f, 0.014877f, 0.016571f,
+ 0.018494f, 0.020126f, 0.022537f, 0.024826f, 0.027649f, 0.030701f, 0.033875f, 0.037964f, 0.042114f, 0.046356f, 0.051605f, 0.057587f,
+ 0.064209f, 0.071777f, 0.080261f, 0.089722f, 0.100952f, 0.113220f, 0.127075f, 0.143066f, 0.160767f, 0.180664f, 0.202759f, 0.227417f,
+ 0.254395f, 0.284180f, 0.315674f, 0.348633f, 0.383789f, 0.420166f, 0.457275f, 0.494385f, 0.531250f, 0.569336f, 0.605469f, 0.639160f,
+ 0.672363f, 0.705078f, 0.735352f, 0.762207f, 0.788574f, 0.811523f, 0.928711f, 0.934082f, 0.934570f, 0.935059f, 0.935059f, 0.935059f,
+ 0.000236f, 0.001136f, 0.001664f, 0.002502f, 0.003187f, 0.004082f, 0.004631f, 0.005386f, 0.006275f, 0.007385f, 0.008217f, 0.009453f,
+ 0.010567f, 0.011787f, 0.013115f, 0.014420f, 0.016083f, 0.017944f, 0.019867f, 0.022079f, 0.024414f, 0.026962f, 0.029755f, 0.033112f,
+ 0.036926f, 0.040771f, 0.045258f, 0.050232f, 0.056183f, 0.062500f, 0.069946f, 0.078430f, 0.087708f, 0.098389f, 0.110779f, 0.124634f,
+ 0.140259f, 0.158203f, 0.178223f, 0.200928f, 0.225708f, 0.253174f, 0.282715f, 0.315430f, 0.349365f, 0.385254f, 0.422363f, 0.460938f,
+ 0.499023f, 0.537109f, 0.574707f, 0.612305f, 0.646484f, 0.682129f, 0.713867f, 0.745117f, 0.772461f, 0.799316f, 0.923828f, 0.930176f,
+ 0.930664f, 0.931152f, 0.930664f, 0.930664f, 0.000229f, 0.000964f, 0.001582f, 0.002182f, 0.002838f, 0.003653f, 0.004341f, 0.004921f,
+ 0.005615f, 0.006626f, 0.007423f, 0.008545f, 0.009483f, 0.010666f, 0.011612f, 0.013000f, 0.014275f, 0.015900f, 0.017487f, 0.019333f,
+ 0.021484f, 0.023773f, 0.026276f, 0.028992f, 0.032135f, 0.035492f, 0.039398f, 0.044037f, 0.049072f, 0.054443f, 0.061035f, 0.067871f,
+ 0.076111f, 0.085632f, 0.096252f, 0.108154f, 0.122253f, 0.138306f, 0.156006f, 0.175903f, 0.199219f, 0.224243f, 0.251953f, 0.282715f,
+ 0.315918f, 0.350830f, 0.387451f, 0.425781f, 0.465332f, 0.504395f, 0.544434f, 0.583008f, 0.620117f, 0.657715f, 0.692383f, 0.725098f,
+ 0.755371f, 0.783691f, 0.919434f, 0.925781f, 0.926270f, 0.926758f, 0.926758f, 0.925781f, 0.000410f, 0.000856f, 0.001542f, 0.001844f,
+ 0.002565f, 0.003380f, 0.003971f, 0.004246f, 0.005047f, 0.005863f, 0.006653f, 0.007744f, 0.008568f, 0.009407f, 0.010529f, 0.011482f,
+ 0.012657f, 0.013924f, 0.015602f, 0.017105f, 0.018997f, 0.020859f, 0.022980f, 0.025192f, 0.028030f, 0.031036f, 0.034515f, 0.038300f,
+ 0.042236f, 0.047180f, 0.052795f, 0.059113f, 0.065857f, 0.074097f, 0.083374f, 0.094360f, 0.105896f, 0.119873f, 0.135620f, 0.154175f,
+ 0.174072f, 0.197632f, 0.223267f, 0.251465f, 0.283447f, 0.317139f, 0.353760f, 0.391113f, 0.431152f, 0.470703f, 0.512207f, 0.552734f,
+ 0.592285f, 0.631348f, 0.669434f, 0.704590f, 0.737793f, 0.768555f, 0.913574f, 0.919922f, 0.920898f, 0.920898f, 0.921387f, 0.921387f,
+ 0.000214f, 0.000619f, 0.001172f, 0.001941f, 0.002228f, 0.002960f, 0.003490f, 0.003994f, 0.004761f, 0.005180f, 0.005806f, 0.006622f,
+ 0.007565f, 0.008301f, 0.009262f, 0.010170f, 0.011208f, 0.012482f, 0.013855f, 0.015060f, 0.016739f, 0.018311f, 0.020248f, 0.022034f,
+ 0.024597f, 0.027084f, 0.030045f, 0.033051f, 0.036743f, 0.041016f, 0.045807f, 0.050964f, 0.056946f, 0.063904f, 0.071899f, 0.080994f,
+ 0.091675f, 0.103699f, 0.117920f, 0.133667f, 0.151978f, 0.172729f, 0.196533f, 0.222534f, 0.252197f, 0.284424f, 0.319580f, 0.356689f,
+ 0.396973f, 0.437500f, 0.479492f, 0.521484f, 0.562500f, 0.604004f, 0.644043f, 0.682129f, 0.718262f, 0.751465f, 0.907715f, 0.915039f,
+ 0.916016f, 0.916504f, 0.916504f, 0.916504f, 0.000405f, 0.000760f, 0.001116f, 0.001688f, 0.002180f, 0.002670f, 0.003313f, 0.003569f,
+ 0.003979f, 0.004543f, 0.005466f, 0.005985f, 0.006699f, 0.007359f, 0.008102f, 0.009094f, 0.009949f, 0.011055f, 0.012047f, 0.013412f,
+ 0.014488f, 0.016068f, 0.017532f, 0.019348f, 0.021210f, 0.023834f, 0.025986f, 0.028854f, 0.031891f, 0.035339f, 0.039490f, 0.043976f,
+ 0.049347f, 0.055084f, 0.061951f, 0.069763f, 0.078918f, 0.089478f, 0.101379f, 0.115479f, 0.131592f, 0.150024f, 0.171387f, 0.195068f,
+ 0.222900f, 0.252686f, 0.286621f, 0.323242f, 0.362061f, 0.402588f, 0.445312f, 0.488770f, 0.532715f, 0.575684f, 0.618652f, 0.659180f,
+ 0.698242f, 0.734375f, 0.901367f, 0.909180f, 0.911133f, 0.910645f, 0.911133f, 0.910645f, 0.000218f, 0.000539f, 0.001187f, 0.001617f,
+ 0.001987f, 0.002316f, 0.002666f, 0.003176f, 0.003841f, 0.004425f, 0.004917f, 0.005402f, 0.005768f, 0.006462f, 0.007233f, 0.008018f,
+ 0.008575f, 0.009758f, 0.010582f, 0.011520f, 0.012756f, 0.013832f, 0.015312f, 0.016968f, 0.018509f, 0.020279f, 0.022644f, 0.024857f,
+ 0.027740f, 0.030472f, 0.033783f, 0.037567f, 0.042175f, 0.047150f, 0.052979f, 0.059601f, 0.067505f, 0.076538f, 0.087158f, 0.099243f,
+ 0.113281f, 0.129272f, 0.148315f, 0.170532f, 0.194702f, 0.223267f, 0.254639f, 0.289795f, 0.327393f, 0.368408f, 0.410889f, 0.455322f,
+ 0.499756f, 0.544434f, 0.590332f, 0.633789f, 0.676270f, 0.716309f, 0.895508f, 0.902344f, 0.903809f, 0.905762f, 0.903809f, 0.904297f,
+ 0.000184f, 0.000612f, 0.001122f, 0.001464f, 0.001848f, 0.002150f, 0.002514f, 0.002651f, 0.003391f, 0.003666f, 0.004368f, 0.004677f,
+ 0.005219f, 0.005882f, 0.006531f, 0.007019f, 0.007675f, 0.008530f, 0.009224f, 0.010269f, 0.011017f, 0.012146f, 0.013321f, 0.014626f,
+ 0.016098f, 0.017639f, 0.019440f, 0.021317f, 0.023773f, 0.026123f, 0.029144f, 0.032410f, 0.036072f, 0.040314f, 0.045013f, 0.051086f,
+ 0.057587f, 0.065308f, 0.074402f, 0.084961f, 0.097107f, 0.111267f, 0.127930f, 0.147217f, 0.169556f, 0.195312f, 0.224365f, 0.257568f,
+ 0.294189f, 0.333496f, 0.375977f, 0.420166f, 0.467041f, 0.514160f, 0.561035f, 0.607422f, 0.652344f, 0.695312f, 0.888672f, 0.896484f,
+ 0.897461f, 0.897461f, 0.897949f, 0.897949f, 0.000159f, 0.000537f, 0.000830f, 0.001206f, 0.001578f, 0.001760f, 0.002050f, 0.002504f,
+ 0.002951f, 0.003397f, 0.003674f, 0.004238f, 0.004520f, 0.005245f, 0.005692f, 0.006138f, 0.006748f, 0.007240f, 0.008087f, 0.008728f,
+ 0.009636f, 0.010437f, 0.011543f, 0.012611f, 0.013763f, 0.015266f, 0.016617f, 0.018433f, 0.020248f, 0.022354f, 0.024887f, 0.027390f,
+ 0.030716f, 0.034454f, 0.038422f, 0.043365f, 0.048950f, 0.055511f, 0.062988f, 0.072021f, 0.082336f, 0.094727f, 0.109375f, 0.125977f,
+ 0.145874f, 0.169556f, 0.195679f, 0.226929f, 0.260986f, 0.299805f, 0.341309f, 0.385498f, 0.432129f, 0.480957f, 0.529297f, 0.579102f,
+ 0.627441f, 0.673828f, 0.881348f, 0.889160f, 0.890625f, 0.891113f, 0.891602f, 0.891113f, 0.000204f, 0.000566f, 0.000741f, 0.001033f,
+ 0.001378f, 0.001599f, 0.001961f, 0.002354f, 0.002609f, 0.002974f, 0.003300f, 0.003609f, 0.004101f, 0.004463f, 0.004906f, 0.005337f,
+ 0.006020f, 0.006290f, 0.007023f, 0.007656f, 0.008301f, 0.009140f, 0.009918f, 0.010933f, 0.011940f, 0.013107f, 0.014252f, 0.015656f,
+ 0.017136f, 0.019058f, 0.021057f, 0.023209f, 0.025940f, 0.029190f, 0.032715f, 0.036591f, 0.041138f, 0.046661f, 0.053253f, 0.060944f,
+ 0.069702f, 0.080444f, 0.092651f, 0.107788f, 0.124695f, 0.145630f, 0.169189f, 0.197632f, 0.229736f, 0.266113f, 0.306396f, 0.350586f,
+ 0.397217f, 0.447021f, 0.497803f, 0.549805f, 0.600586f, 0.650391f, 0.872559f, 0.881836f, 0.882812f, 0.883301f, 0.884277f, 0.884277f,
+ 0.000240f, 0.000349f, 0.000795f, 0.000892f, 0.001151f, 0.001377f, 0.001773f, 0.001984f, 0.002415f, 0.002602f, 0.002932f, 0.003168f,
+ 0.003483f, 0.003906f, 0.004257f, 0.004681f, 0.005173f, 0.005596f, 0.006119f, 0.006550f, 0.007126f, 0.007759f, 0.008522f, 0.009270f,
+ 0.010086f, 0.011108f, 0.012138f, 0.013199f, 0.014549f, 0.015884f, 0.017776f, 0.019623f, 0.022003f, 0.024384f, 0.027237f, 0.030624f,
+ 0.034515f, 0.039215f, 0.044342f, 0.050873f, 0.058411f, 0.067017f, 0.078003f, 0.090332f, 0.105530f, 0.123718f, 0.144775f, 0.170410f,
+ 0.200195f, 0.234131f, 0.272461f, 0.315674f, 0.362305f, 0.412354f, 0.465332f, 0.518555f, 0.572754f, 0.626465f, 0.863770f, 0.873047f,
+ 0.875488f, 0.875488f, 0.875977f, 0.875977f, 0.000102f, 0.000298f, 0.000604f, 0.000950f, 0.001089f, 0.001472f, 0.001760f, 0.001823f,
+ 0.001903f, 0.002325f, 0.002611f, 0.002775f, 0.003185f, 0.003405f, 0.003674f, 0.004005f, 0.004406f, 0.004814f, 0.005203f, 0.005665f,
+ 0.006062f, 0.006702f, 0.007317f, 0.007881f, 0.008560f, 0.009239f, 0.010193f, 0.010994f, 0.012161f, 0.013588f, 0.015068f, 0.016479f,
+ 0.018250f, 0.020386f, 0.022781f, 0.025665f, 0.028809f, 0.032501f, 0.037048f, 0.042297f, 0.048553f, 0.055908f, 0.065491f, 0.075378f,
+ 0.088501f, 0.104248f, 0.122742f, 0.145874f, 0.171997f, 0.203247f, 0.239990f, 0.281250f, 0.326904f, 0.376953f, 0.430176f, 0.486328f,
+ 0.542480f, 0.600586f, 0.855469f, 0.864746f, 0.866211f, 0.867188f, 0.867188f, 0.867188f, 0.000000f, 0.000357f, 0.000576f, 0.000692f,
+ 0.001013f, 0.001069f, 0.001383f, 0.001702f, 0.001789f, 0.002102f, 0.002182f, 0.002377f, 0.002686f, 0.002985f, 0.003347f, 0.003359f,
+ 0.003782f, 0.004036f, 0.004436f, 0.004749f, 0.005169f, 0.005672f, 0.006145f, 0.006649f, 0.007187f, 0.007828f, 0.008644f, 0.009529f,
+ 0.010269f, 0.011200f, 0.012337f, 0.013596f, 0.015038f, 0.017044f, 0.018784f, 0.021011f, 0.023727f, 0.026871f, 0.030457f, 0.034637f,
+ 0.039978f, 0.046478f, 0.053436f, 0.062622f, 0.073730f, 0.086792f, 0.102661f, 0.122437f, 0.146240f, 0.174561f, 0.208252f, 0.247437f,
+ 0.291748f, 0.341064f, 0.395020f, 0.451904f, 0.511230f, 0.571777f, 0.844238f, 0.854980f, 0.857422f, 0.858887f, 0.857910f, 0.857910f,
+ 0.000101f, 0.000326f, 0.000535f, 0.000683f, 0.000848f, 0.001161f, 0.001184f, 0.001284f, 0.001576f, 0.001701f, 0.001839f, 0.002167f,
+ 0.002321f, 0.002584f, 0.002645f, 0.002941f, 0.003141f, 0.003538f, 0.003817f, 0.004112f, 0.004395f, 0.004646f, 0.005165f, 0.005531f,
+ 0.006096f, 0.006496f, 0.007217f, 0.007767f, 0.008629f, 0.009163f, 0.010239f, 0.011276f, 0.012611f, 0.013779f, 0.015213f, 0.017120f,
+ 0.019379f, 0.021606f, 0.024994f, 0.028351f, 0.032379f, 0.037201f, 0.043640f, 0.050903f, 0.060120f, 0.071045f, 0.084900f, 0.101868f,
+ 0.122559f, 0.147827f, 0.178223f, 0.214722f, 0.257080f, 0.305664f, 0.358887f, 0.416992f, 0.478027f, 0.542969f, 0.834473f, 0.845215f,
+ 0.847656f, 0.847656f, 0.847656f, 0.848633f, 0.000092f, 0.000316f, 0.000410f, 0.000556f, 0.000808f, 0.000918f, 0.001094f, 0.001287f,
+ 0.001309f, 0.001411f, 0.001671f, 0.001780f, 0.001909f, 0.002092f, 0.002274f, 0.002523f, 0.002733f, 0.002974f, 0.003101f, 0.003401f,
+ 0.003677f, 0.003956f, 0.004311f, 0.004551f, 0.004940f, 0.005444f, 0.005768f, 0.006451f, 0.006977f, 0.007568f, 0.008270f, 0.009201f,
+ 0.010170f, 0.011230f, 0.012566f, 0.013939f, 0.015503f, 0.017761f, 0.020111f, 0.022873f, 0.025940f, 0.029938f, 0.035217f, 0.040985f,
+ 0.048431f, 0.057770f, 0.069092f, 0.083618f, 0.100891f, 0.123047f, 0.150146f, 0.183838f, 0.223633f, 0.269531f, 0.322510f, 0.381348f,
+ 0.444824f, 0.511719f, 0.823730f, 0.834473f, 0.835938f, 0.836914f, 0.836914f, 0.837402f, 0.000240f, 0.000273f, 0.000326f, 0.000564f,
+ 0.000682f, 0.000807f, 0.000854f, 0.000949f, 0.001139f, 0.001238f, 0.001404f, 0.001548f, 0.001637f, 0.001840f, 0.001893f, 0.002077f,
+ 0.002321f, 0.002434f, 0.002642f, 0.002821f, 0.003044f, 0.003271f, 0.003649f, 0.003763f, 0.004208f, 0.004448f, 0.004986f, 0.005169f,
+ 0.005657f, 0.006279f, 0.006680f, 0.007442f, 0.008194f, 0.008881f, 0.009895f, 0.010918f, 0.012138f, 0.013924f, 0.015915f, 0.018112f,
+ 0.020645f, 0.023743f, 0.027817f, 0.032745f, 0.038361f, 0.045990f, 0.055481f, 0.066895f, 0.082031f, 0.100769f, 0.124573f, 0.154541f,
+ 0.190796f, 0.235107f, 0.286133f, 0.344238f, 0.408936f, 0.478271f, 0.810547f, 0.822266f, 0.824707f, 0.825195f, 0.825684f, 0.825684f,
+ 0.000115f, 0.000222f, 0.000252f, 0.000524f, 0.000574f, 0.000673f, 0.000869f, 0.000928f, 0.000963f, 0.001022f, 0.001246f, 0.001292f,
+ 0.001404f, 0.001477f, 0.001652f, 0.001811f, 0.001822f, 0.002058f, 0.002237f, 0.002371f, 0.002588f, 0.002645f, 0.003019f, 0.003080f,
+ 0.003506f, 0.003689f, 0.003904f, 0.004383f, 0.004707f, 0.005020f, 0.005386f, 0.006023f, 0.006451f, 0.007038f, 0.007809f, 0.008911f,
+ 0.009949f, 0.011200f, 0.012222f, 0.014137f, 0.016068f, 0.018692f, 0.021683f, 0.025314f, 0.029861f, 0.035889f, 0.043335f, 0.052582f,
+ 0.065186f, 0.080627f, 0.101501f, 0.127441f, 0.159912f, 0.200806f, 0.250000f, 0.307129f, 0.371582f, 0.444580f, 0.798340f, 0.809570f,
+ 0.811523f, 0.812988f, 0.812988f, 0.812988f, 0.000000f, 0.000211f, 0.000204f, 0.000474f, 0.000555f, 0.000583f, 0.000600f, 0.000593f,
+ 0.000812f, 0.000865f, 0.000941f, 0.001013f, 0.001162f, 0.001348f, 0.001418f, 0.001465f, 0.001616f, 0.001722f, 0.001856f, 0.001888f,
+ 0.002048f, 0.002321f, 0.002396f, 0.002632f, 0.002821f, 0.002974f, 0.003265f, 0.003477f, 0.003632f, 0.004051f, 0.004299f, 0.004700f,
+ 0.005238f, 0.005592f, 0.006199f, 0.006756f, 0.007614f, 0.008324f, 0.009727f, 0.010811f, 0.012337f, 0.014168f, 0.016434f, 0.019257f,
+ 0.022858f, 0.027451f, 0.033295f, 0.040619f, 0.050690f, 0.063416f, 0.080261f, 0.102295f, 0.131104f, 0.168335f, 0.214355f, 0.270508f,
+ 0.334717f, 0.408936f, 0.783691f, 0.795898f, 0.798340f, 0.799316f, 0.800293f, 0.800293f, 0.000174f, 0.000090f, 0.000281f, 0.000397f,
+ 0.000401f, 0.000450f, 0.000488f, 0.000640f, 0.000674f, 0.000713f, 0.000753f, 0.000845f, 0.000872f, 0.001020f, 0.001115f, 0.001264f,
+ 0.001327f, 0.001373f, 0.001520f, 0.001616f, 0.001767f, 0.001875f, 0.001968f, 0.002090f, 0.002232f, 0.002333f, 0.002472f, 0.002802f,
+ 0.002926f, 0.003189f, 0.003569f, 0.003752f, 0.004009f, 0.004513f, 0.004860f, 0.005375f, 0.005997f, 0.006561f, 0.007378f, 0.008347f,
+ 0.009384f, 0.010612f, 0.012466f, 0.014526f, 0.017075f, 0.020447f, 0.024887f, 0.030533f, 0.038300f, 0.048584f, 0.062042f, 0.080383f,
+ 0.104736f, 0.137329f, 0.180176f, 0.232544f, 0.296875f, 0.371338f, 0.769043f, 0.781250f, 0.784180f, 0.784668f, 0.786133f, 0.786133f,
+ 0.000025f, 0.000135f, 0.000154f, 0.000260f, 0.000353f, 0.000364f, 0.000380f, 0.000520f, 0.000548f, 0.000587f, 0.000712f, 0.000735f,
+ 0.000772f, 0.000822f, 0.000886f, 0.001004f, 0.000946f, 0.001115f, 0.001177f, 0.001266f, 0.001454f, 0.001527f, 0.001575f, 0.001680f,
+ 0.001883f, 0.001961f, 0.002043f, 0.002193f, 0.002281f, 0.002520f, 0.002712f, 0.003021f, 0.003147f, 0.003561f, 0.003786f, 0.004116f,
+ 0.004570f, 0.005058f, 0.005634f, 0.006165f, 0.007095f, 0.008049f, 0.009201f, 0.010674f, 0.012550f, 0.014854f, 0.018051f, 0.022385f,
+ 0.027908f, 0.035522f, 0.046295f, 0.061035f, 0.081238f, 0.109131f, 0.146729f, 0.197021f, 0.258301f, 0.333008f, 0.752441f, 0.766113f,
+ 0.768555f, 0.769531f, 0.770020f, 0.769531f, 0.000000f, 0.000121f, 0.000209f, 0.000291f, 0.000337f, 0.000307f, 0.000324f, 0.000415f,
+ 0.000426f, 0.000453f, 0.000491f, 0.000573f, 0.000644f, 0.000650f, 0.000781f, 0.000746f, 0.000830f, 0.000803f, 0.000997f, 0.001017f,
+ 0.001020f, 0.001158f, 0.001241f, 0.001317f, 0.001375f, 0.001432f, 0.001524f, 0.001656f, 0.001858f, 0.001955f, 0.002050f, 0.002274f,
+ 0.002460f, 0.002724f, 0.002831f, 0.003050f, 0.003441f, 0.003790f, 0.004162f, 0.004623f, 0.005219f, 0.005951f, 0.006721f, 0.007729f,
+ 0.008926f, 0.010620f, 0.013000f, 0.015686f, 0.019852f, 0.025436f, 0.033295f, 0.044617f, 0.060608f, 0.083313f, 0.116211f, 0.161499f,
+ 0.220093f, 0.293945f, 0.734863f, 0.749512f, 0.752441f, 0.752930f, 0.753906f, 0.753906f, 0.000000f, 0.000121f, 0.000118f, 0.000246f,
+ 0.000233f, 0.000252f, 0.000338f, 0.000282f, 0.000353f, 0.000355f, 0.000448f, 0.000435f, 0.000464f, 0.000530f, 0.000578f, 0.000649f,
+ 0.000677f, 0.000710f, 0.000749f, 0.000792f, 0.000881f, 0.000903f, 0.000967f, 0.001049f, 0.001041f, 0.001100f, 0.001176f, 0.001254f,
+ 0.001402f, 0.001451f, 0.001697f, 0.001674f, 0.001804f, 0.001914f, 0.002195f, 0.002451f, 0.002474f, 0.002758f, 0.003029f, 0.003483f,
+ 0.003824f, 0.004272f, 0.004833f, 0.005573f, 0.006477f, 0.007629f, 0.009041f, 0.010918f, 0.013573f, 0.017319f, 0.022842f, 0.031036f,
+ 0.043030f, 0.061096f, 0.088440f, 0.127563f, 0.182861f, 0.254395f, 0.717285f, 0.731934f, 0.734863f, 0.735352f, 0.735840f, 0.736328f,
+ 0.000000f, 0.000000f, 0.000117f, 0.000163f, 0.000109f, 0.000208f, 0.000212f, 0.000208f, 0.000270f, 0.000356f, 0.000324f, 0.000377f,
+ 0.000391f, 0.000420f, 0.000449f, 0.000440f, 0.000484f, 0.000504f, 0.000534f, 0.000561f, 0.000639f, 0.000667f, 0.000715f, 0.000722f,
+ 0.000799f, 0.000845f, 0.000939f, 0.000945f, 0.001053f, 0.001149f, 0.001252f, 0.001310f, 0.001392f, 0.001507f, 0.001526f, 0.001710f,
+ 0.001773f, 0.002111f, 0.002300f, 0.002443f, 0.002661f, 0.002996f, 0.003376f, 0.003880f, 0.004482f, 0.005150f, 0.006115f, 0.007401f,
+ 0.009132f, 0.011696f, 0.015076f, 0.020416f, 0.029236f, 0.042389f, 0.063782f, 0.096802f, 0.146362f, 0.215576f, 0.698242f, 0.712891f,
+ 0.715332f, 0.716797f, 0.717285f, 0.717285f, 0.000000f, 0.000118f, 0.000115f, 0.000133f, 0.000144f, 0.000147f, 0.000162f, 0.000150f,
+ 0.000194f, 0.000215f, 0.000228f, 0.000299f, 0.000271f, 0.000313f, 0.000328f, 0.000358f, 0.000378f, 0.000360f, 0.000407f, 0.000438f,
+ 0.000441f, 0.000488f, 0.000515f, 0.000544f, 0.000576f, 0.000617f, 0.000659f, 0.000715f, 0.000741f, 0.000773f, 0.000850f, 0.000921f,
+ 0.000979f, 0.001066f, 0.001128f, 0.001292f, 0.001279f, 0.001400f, 0.001572f, 0.001668f, 0.001869f, 0.002029f, 0.002295f, 0.002607f,
+ 0.002985f, 0.003464f, 0.004066f, 0.004913f, 0.006023f, 0.007519f, 0.009827f, 0.013016f, 0.018524f, 0.027481f, 0.042847f, 0.068970f,
+ 0.111938f, 0.176392f, 0.675781f, 0.692871f, 0.695801f, 0.696777f, 0.698242f, 0.697754f, 0.000000f, 0.000000f, 0.000111f, 0.000108f,
+ 0.000104f, 0.000102f, 0.000118f, 0.000120f, 0.000134f, 0.000128f, 0.000188f, 0.000154f, 0.000197f, 0.000188f, 0.000245f, 0.000256f,
+ 0.000233f, 0.000266f, 0.000345f, 0.000281f, 0.000355f, 0.000322f, 0.000392f, 0.000358f, 0.000437f, 0.000425f, 0.000458f, 0.000477f,
+ 0.000564f, 0.000636f, 0.000578f, 0.000607f, 0.000668f, 0.000719f, 0.000769f, 0.000832f, 0.000880f, 0.000953f, 0.001060f, 0.001116f,
+ 0.001226f, 0.001363f, 0.001486f, 0.001760f, 0.001944f, 0.002216f, 0.002605f, 0.003107f, 0.003778f, 0.004715f, 0.005989f, 0.007942f,
+ 0.011292f, 0.016632f, 0.026550f, 0.045532f, 0.079956f, 0.138550f, 0.655762f, 0.671875f, 0.674805f, 0.675293f, 0.675781f, 0.678223f,
+ 0.000000f, 0.000112f, 0.000105f, 0.000102f, 0.000098f, 0.000095f, 0.000093f, 0.000088f, 0.000089f, 0.000085f, 0.000095f, 0.000126f,
+ 0.000109f, 0.000154f, 0.000153f, 0.000162f, 0.000176f, 0.000190f, 0.000202f, 0.000204f, 0.000212f, 0.000214f, 0.000266f, 0.000239f,
+ 0.000279f, 0.000293f, 0.000329f, 0.000329f, 0.000339f, 0.000365f, 0.000437f, 0.000424f, 0.000429f, 0.000474f, 0.000525f, 0.000596f,
+ 0.000572f, 0.000612f, 0.000666f, 0.000723f, 0.000791f, 0.000850f, 0.000977f, 0.001066f, 0.001225f, 0.001351f, 0.001555f, 0.001837f,
+ 0.002279f, 0.002760f, 0.003445f, 0.004612f, 0.006386f, 0.009438f, 0.015221f, 0.027008f, 0.052551f, 0.102966f, 0.633789f, 0.649414f,
+ 0.652832f, 0.653809f, 0.655273f, 0.655273f, 0.000000f, 0.000105f, 0.000099f, 0.000094f, 0.000090f, 0.000087f, 0.000084f, 0.000082f,
+ 0.000079f, 0.000075f, 0.000071f, 0.000068f, 0.000064f, 0.000072f, 0.000096f, 0.000105f, 0.000112f, 0.000088f, 0.000123f, 0.000129f,
+ 0.000132f, 0.000140f, 0.000147f, 0.000170f, 0.000188f, 0.000192f, 0.000171f, 0.000210f, 0.000217f, 0.000223f, 0.000237f, 0.000251f,
+ 0.000258f, 0.000294f, 0.000298f, 0.000316f, 0.000350f, 0.000382f, 0.000400f, 0.000437f, 0.000479f, 0.000514f, 0.000576f, 0.000620f,
+ 0.000688f, 0.000782f, 0.000916f, 0.001026f, 0.001219f, 0.001502f, 0.001892f, 0.002424f, 0.003359f, 0.004974f, 0.008118f, 0.014343f,
+ 0.030075f, 0.070068f, 0.610352f, 0.626953f, 0.629883f, 0.631348f, 0.632324f, 0.632324f, 0.000110f, 0.000094f, 0.000087f, 0.000081f,
+ 0.000077f, 0.000075f, 0.000072f, 0.000069f, 0.000067f, 0.000066f, 0.000064f, 0.000062f, 0.000058f, 0.000056f, 0.000053f, 0.000051f,
+ 0.000054f, 0.000047f, 0.000057f, 0.000055f, 0.000075f, 0.000078f, 0.000086f, 0.000093f, 0.000093f, 0.000102f, 0.000112f, 0.000113f,
+ 0.000130f, 0.000128f, 0.000142f, 0.000145f, 0.000156f, 0.000153f, 0.000180f, 0.000178f, 0.000183f, 0.000223f, 0.000230f, 0.000240f,
+ 0.000265f, 0.000276f, 0.000300f, 0.000332f, 0.000357f, 0.000411f, 0.000449f, 0.000540f, 0.000615f, 0.000741f, 0.000916f, 0.001144f,
+ 0.001566f, 0.002310f, 0.003731f, 0.006905f, 0.014793f, 0.041779f, 0.585938f, 0.603027f, 0.605957f, 0.608398f, 0.608398f, 0.609375f,
+ 0.000090f, 0.000071f, 0.000066f, 0.000062f, 0.000058f, 0.000056f, 0.000053f, 0.000053f, 0.000051f, 0.000051f, 0.000049f, 0.000048f,
+ 0.000048f, 0.000047f, 0.000045f, 0.000043f, 0.000042f, 0.000040f, 0.000038f, 0.000036f, 0.000036f, 0.000033f, 0.000034f, 0.000040f,
+ 0.000040f, 0.000040f, 0.000048f, 0.000053f, 0.000060f, 0.000064f, 0.000067f, 0.000070f, 0.000075f, 0.000081f, 0.000085f, 0.000090f,
+ 0.000091f, 0.000103f, 0.000106f, 0.000120f, 0.000134f, 0.000138f, 0.000142f, 0.000156f, 0.000174f, 0.000180f, 0.000212f, 0.000239f,
+ 0.000253f, 0.000310f, 0.000377f, 0.000479f, 0.000627f, 0.000875f, 0.001396f, 0.002623f, 0.006184f, 0.019897f, 0.560547f, 0.578125f,
+ 0.581543f, 0.583008f, 0.583984f, 0.583984f, 0.000038f, 0.000035f, 0.000031f, 0.000031f, 0.000030f, 0.000031f, 0.000031f, 0.000030f,
+ 0.000030f, 0.000028f, 0.000029f, 0.000030f, 0.000029f, 0.000028f, 0.000029f, 0.000029f, 0.000029f, 0.000029f, 0.000029f, 0.000028f,
+ 0.000027f, 0.000026f, 0.000025f, 0.000024f, 0.000023f, 0.000022f, 0.000021f, 0.000020f, 0.000019f, 0.000021f, 0.000019f, 0.000022f,
+ 0.000023f, 0.000027f, 0.000031f, 0.000035f, 0.000037f, 0.000039f, 0.000039f, 0.000043f, 0.000049f, 0.000052f, 0.000056f, 0.000050f,
+ 0.000068f, 0.000062f, 0.000070f, 0.000087f, 0.000094f, 0.000107f, 0.000122f, 0.000140f, 0.000191f, 0.000247f, 0.000388f, 0.000710f,
+ 0.001781f, 0.007076f, 0.535156f, 0.553223f, 0.556152f, 0.558105f, 0.559082f, 0.559082f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000003f, 0.000003f, 0.000005f, 0.000006f, 0.000007f, 0.000007f, 0.000009f,
+ 0.000009f, 0.000009f, 0.000010f, 0.000010f, 0.000011f, 0.000011f, 0.000012f, 0.000012f, 0.000012f, 0.000013f, 0.000013f, 0.000013f,
+ 0.000013f, 0.000012f, 0.000012f, 0.000011f, 0.000011f, 0.000010f, 0.000010f, 0.000009f, 0.000009f, 0.000009f, 0.000008f, 0.000009f,
+ 0.000009f, 0.000010f, 0.000011f, 0.000015f, 0.000017f, 0.000016f, 0.000018f, 0.000021f, 0.000020f, 0.000024f, 0.000024f, 0.000032f,
+ 0.000035f, 0.000045f, 0.000065f, 0.000105f, 0.000246f, 0.001313f, 0.508789f, 0.527344f, 0.530762f, 0.531738f, 0.532715f, 0.533691f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000003f, 0.000003f, 0.000002f, 0.000002f, 0.000002f,
+ 0.000002f, 0.000002f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000003f, 0.000003f, 0.000005f, 0.000018f, 0.481934f, 0.500977f,
+ 0.504883f, 0.505859f, 0.507324f, 0.507812f,
+ },
+ {
+ 0.053833f, 0.152832f, 0.239014f, 0.313477f, 0.377686f, 0.433838f, 0.481689f, 0.524414f, 0.562988f, 0.596680f, 0.626953f, 0.654785f,
+ 0.678711f, 0.700684f, 0.720703f, 0.739746f, 0.755859f, 0.771973f, 0.787109f, 0.798828f, 0.812012f, 0.823730f, 0.833984f, 0.844238f,
+ 0.853027f, 0.862793f, 0.870605f, 0.878418f, 0.885254f, 0.892090f, 0.898926f, 0.904297f, 0.910645f, 0.916504f, 0.921875f, 0.926270f,
+ 0.931641f, 0.936035f, 0.939941f, 0.944336f, 0.948242f, 0.952148f, 0.955566f, 0.959961f, 0.962402f, 0.966309f, 0.969238f, 0.972168f,
+ 0.975098f, 0.978027f, 0.980957f, 0.983398f, 0.985840f, 0.988281f, 0.990723f, 0.992676f, 0.995117f, 0.996582f, 0.998047f, 0.995117f,
+ 0.993164f, 0.990723f, 0.988770f, 0.986816f, 0.036804f, 0.109497f, 0.178589f, 0.244751f, 0.305908f, 0.361084f, 0.411621f, 0.457275f,
+ 0.498535f, 0.536133f, 0.569824f, 0.601562f, 0.629883f, 0.655273f, 0.679688f, 0.700195f, 0.720215f, 0.737793f, 0.755859f, 0.770508f,
+ 0.785645f, 0.798340f, 0.811035f, 0.822754f, 0.833008f, 0.843750f, 0.852539f, 0.861328f, 0.869629f, 0.877441f, 0.885742f, 0.892578f,
+ 0.898926f, 0.905273f, 0.911133f, 0.916504f, 0.921875f, 0.926758f, 0.931641f, 0.936523f, 0.940430f, 0.945312f, 0.949219f, 0.953613f,
+ 0.956543f, 0.960449f, 0.963867f, 0.967285f, 0.970703f, 0.973633f, 0.976562f, 0.979004f, 0.981934f, 0.984375f, 0.986816f, 0.989746f,
+ 0.992188f, 0.994141f, 0.996582f, 0.994141f, 0.992188f, 0.990234f, 0.988281f, 0.986328f, 0.025787f, 0.080383f, 0.136230f, 0.191650f,
+ 0.245239f, 0.297119f, 0.345947f, 0.392822f, 0.436035f, 0.476807f, 0.513184f, 0.547363f, 0.578125f, 0.607910f, 0.634766f, 0.658203f,
+ 0.681152f, 0.702637f, 0.721191f, 0.738770f, 0.755371f, 0.770508f, 0.784668f, 0.798828f, 0.810547f, 0.821777f, 0.833984f, 0.843262f,
+ 0.852539f, 0.861816f, 0.869629f, 0.877930f, 0.885254f, 0.893555f, 0.898926f, 0.906250f, 0.911621f, 0.917969f, 0.923340f, 0.928223f,
+ 0.933105f, 0.937500f, 0.941406f, 0.946289f, 0.950195f, 0.954102f, 0.958496f, 0.961914f, 0.965820f, 0.968750f, 0.971680f, 0.975098f,
+ 0.978027f, 0.980469f, 0.983887f, 0.985840f, 0.988770f, 0.991211f, 0.995117f, 0.993164f, 0.991211f, 0.989258f, 0.987305f, 0.985352f,
+ 0.019455f, 0.060944f, 0.104553f, 0.150513f, 0.196411f, 0.243164f, 0.289062f, 0.333740f, 0.376709f, 0.417725f, 0.454346f, 0.491211f,
+ 0.524414f, 0.556641f, 0.585938f, 0.613770f, 0.639160f, 0.662598f, 0.682617f, 0.703613f, 0.723633f, 0.740723f, 0.756836f, 0.771973f,
+ 0.787109f, 0.798828f, 0.812012f, 0.823242f, 0.833984f, 0.844238f, 0.853516f, 0.863281f, 0.871094f, 0.879395f, 0.886719f, 0.893555f,
+ 0.899902f, 0.907227f, 0.913086f, 0.918945f, 0.924805f, 0.928711f, 0.934082f, 0.938965f, 0.943848f, 0.947754f, 0.952637f, 0.955566f,
+ 0.959961f, 0.963867f, 0.966797f, 0.970215f, 0.973633f, 0.977051f, 0.979004f, 0.982422f, 0.985840f, 0.987793f, 0.993652f, 0.991699f,
+ 0.989746f, 0.988281f, 0.986328f, 0.984375f, 0.015221f, 0.047363f, 0.082092f, 0.119202f, 0.159058f, 0.199219f, 0.239380f, 0.280762f,
+ 0.321533f, 0.362061f, 0.400146f, 0.436768f, 0.472900f, 0.504883f, 0.536621f, 0.566406f, 0.594238f, 0.621094f, 0.645508f, 0.667969f,
+ 0.688477f, 0.707520f, 0.726562f, 0.742676f, 0.759277f, 0.773926f, 0.787598f, 0.800781f, 0.812988f, 0.825195f, 0.835938f, 0.846191f,
+ 0.856445f, 0.865234f, 0.872559f, 0.880859f, 0.888672f, 0.895020f, 0.902832f, 0.908203f, 0.914551f, 0.919922f, 0.926758f, 0.931152f,
+ 0.937012f, 0.941406f, 0.945312f, 0.949707f, 0.954102f, 0.958496f, 0.962402f, 0.965820f, 0.969238f, 0.972168f, 0.976074f, 0.978516f,
+ 0.981934f, 0.984863f, 0.992188f, 0.990723f, 0.988770f, 0.987305f, 0.985352f, 0.983887f, 0.011658f, 0.037170f, 0.065430f, 0.096008f,
+ 0.128784f, 0.162842f, 0.198975f, 0.235596f, 0.273926f, 0.310791f, 0.348145f, 0.385010f, 0.420410f, 0.454834f, 0.488037f, 0.519043f,
+ 0.548828f, 0.577148f, 0.603516f, 0.627441f, 0.650879f, 0.672363f, 0.693848f, 0.712402f, 0.729980f, 0.748535f, 0.762207f, 0.778809f,
+ 0.791504f, 0.804199f, 0.815918f, 0.827637f, 0.838867f, 0.848145f, 0.857910f, 0.866211f, 0.875977f, 0.883301f, 0.891602f, 0.898438f,
+ 0.905273f, 0.911133f, 0.917480f, 0.923340f, 0.928711f, 0.933594f, 0.938477f, 0.942871f, 0.948242f, 0.952637f, 0.956543f, 0.960449f,
+ 0.964355f, 0.968262f, 0.971191f, 0.974609f, 0.978027f, 0.980957f, 0.990723f, 0.989258f, 0.987793f, 0.985840f, 0.984375f, 0.983398f,
+ 0.009758f, 0.030121f, 0.052490f, 0.077576f, 0.104309f, 0.134277f, 0.164917f, 0.197510f, 0.231812f, 0.266113f, 0.301025f, 0.336426f,
+ 0.372070f, 0.405762f, 0.438721f, 0.471436f, 0.502441f, 0.531738f, 0.560059f, 0.587402f, 0.612793f, 0.634766f, 0.658691f, 0.679199f,
+ 0.699219f, 0.718262f, 0.735352f, 0.751953f, 0.767090f, 0.780762f, 0.794922f, 0.808105f, 0.820801f, 0.831055f, 0.842285f, 0.851562f,
+ 0.861328f, 0.870117f, 0.878906f, 0.886719f, 0.893555f, 0.900879f, 0.907715f, 0.913574f, 0.919434f, 0.926270f, 0.932129f, 0.936523f,
+ 0.941895f, 0.945801f, 0.951172f, 0.955078f, 0.959473f, 0.963867f, 0.966797f, 0.970703f, 0.974121f, 0.977539f, 0.989746f, 0.988281f,
+ 0.986328f, 0.984863f, 0.983398f, 0.982422f, 0.007744f, 0.024567f, 0.043365f, 0.063782f, 0.086487f, 0.111389f, 0.137451f, 0.166260f,
+ 0.195435f, 0.226929f, 0.259033f, 0.291748f, 0.324951f, 0.358398f, 0.391113f, 0.424316f, 0.456299f, 0.486328f, 0.516113f, 0.543945f,
+ 0.571289f, 0.597656f, 0.621094f, 0.644531f, 0.666504f, 0.686523f, 0.705078f, 0.724121f, 0.741211f, 0.757324f, 0.773438f, 0.786621f,
+ 0.801270f, 0.812988f, 0.823730f, 0.835938f, 0.846191f, 0.855957f, 0.865723f, 0.873047f, 0.882324f, 0.889648f, 0.897949f, 0.905762f,
+ 0.911133f, 0.917969f, 0.923828f, 0.929199f, 0.934082f, 0.940430f, 0.944824f, 0.949707f, 0.954102f, 0.958008f, 0.962891f, 0.966309f,
+ 0.970215f, 0.974121f, 0.987793f, 0.986816f, 0.985352f, 0.983887f, 0.981934f, 0.980469f, 0.006672f, 0.020828f, 0.035950f, 0.053345f,
+ 0.071594f, 0.092834f, 0.114624f, 0.139282f, 0.165649f, 0.192627f, 0.222290f, 0.252197f, 0.283203f, 0.314941f, 0.346680f, 0.377930f,
+ 0.409668f, 0.441650f, 0.471680f, 0.500977f, 0.529297f, 0.557129f, 0.583008f, 0.607422f, 0.630859f, 0.654297f, 0.674805f, 0.694824f,
+ 0.713867f, 0.731445f, 0.748535f, 0.763672f, 0.778320f, 0.791992f, 0.805664f, 0.817871f, 0.829590f, 0.840332f, 0.850098f, 0.860352f,
+ 0.869141f, 0.878906f, 0.886719f, 0.894043f, 0.901855f, 0.909180f, 0.915527f, 0.920898f, 0.927246f, 0.933105f, 0.938477f, 0.943848f,
+ 0.948730f, 0.953125f, 0.957520f, 0.961914f, 0.965820f, 0.970215f, 0.985840f, 0.985352f, 0.983887f, 0.981934f, 0.980957f, 0.979492f,
+ 0.005592f, 0.017181f, 0.030457f, 0.044739f, 0.060638f, 0.077454f, 0.097046f, 0.117981f, 0.140625f, 0.164673f, 0.190552f, 0.217896f,
+ 0.246582f, 0.275635f, 0.305176f, 0.336426f, 0.366943f, 0.397949f, 0.428711f, 0.457764f, 0.487061f, 0.515137f, 0.542480f, 0.568848f,
+ 0.593750f, 0.619141f, 0.641602f, 0.662598f, 0.683594f, 0.703613f, 0.721191f, 0.738281f, 0.755859f, 0.770996f, 0.784180f, 0.799316f,
+ 0.811035f, 0.823730f, 0.833984f, 0.845703f, 0.855957f, 0.865234f, 0.875000f, 0.883301f, 0.891602f, 0.898926f, 0.906738f, 0.912598f,
+ 0.919922f, 0.926270f, 0.931152f, 0.937988f, 0.942871f, 0.948242f, 0.952148f, 0.957520f, 0.961914f, 0.966309f, 0.984375f, 0.983398f,
+ 0.982422f, 0.981445f, 0.979492f, 0.978027f, 0.004829f, 0.014816f, 0.025711f, 0.037964f, 0.051300f, 0.065796f, 0.082458f, 0.100037f,
+ 0.120178f, 0.141357f, 0.163330f, 0.187622f, 0.213013f, 0.240601f, 0.268311f, 0.296387f, 0.325928f, 0.356445f, 0.385742f, 0.415771f,
+ 0.445557f, 0.474121f, 0.501465f, 0.530762f, 0.556152f, 0.581543f, 0.606445f, 0.630859f, 0.651855f, 0.672852f, 0.693359f, 0.712402f,
+ 0.730469f, 0.746582f, 0.762695f, 0.777832f, 0.791992f, 0.806152f, 0.818359f, 0.830566f, 0.840820f, 0.852051f, 0.862305f, 0.871094f,
+ 0.880371f, 0.888184f, 0.896484f, 0.904297f, 0.910645f, 0.917969f, 0.924316f, 0.931152f, 0.936035f, 0.942383f, 0.947266f, 0.951660f,
+ 0.957031f, 0.960938f, 0.982422f, 0.982422f, 0.981445f, 0.979492f, 0.978516f, 0.977051f, 0.004040f, 0.012436f, 0.022064f, 0.032440f,
+ 0.044006f, 0.056549f, 0.070068f, 0.085999f, 0.102539f, 0.120239f, 0.140625f, 0.161621f, 0.184448f, 0.208496f, 0.234253f, 0.260742f,
+ 0.288086f, 0.316406f, 0.345215f, 0.374512f, 0.404297f, 0.433350f, 0.462402f, 0.490234f, 0.518066f, 0.543945f, 0.570312f, 0.594727f,
+ 0.618652f, 0.642090f, 0.663086f, 0.683594f, 0.703613f, 0.721680f, 0.739258f, 0.755859f, 0.772461f, 0.786621f, 0.798828f, 0.812500f,
+ 0.825195f, 0.836914f, 0.848633f, 0.858887f, 0.869141f, 0.877441f, 0.886230f, 0.894531f, 0.902832f, 0.909668f, 0.916992f, 0.923340f,
+ 0.929688f, 0.935547f, 0.941406f, 0.947266f, 0.951660f, 0.957031f, 0.980469f, 0.980469f, 0.979492f, 0.978516f, 0.977051f, 0.976074f,
+ 0.003536f, 0.010872f, 0.018829f, 0.027893f, 0.037872f, 0.048492f, 0.060883f, 0.073425f, 0.088074f, 0.103638f, 0.120789f, 0.139038f,
+ 0.159912f, 0.181274f, 0.204102f, 0.227905f, 0.253906f, 0.280518f, 0.307861f, 0.335938f, 0.364746f, 0.393311f, 0.421631f, 0.451416f,
+ 0.479004f, 0.505859f, 0.533203f, 0.560059f, 0.584473f, 0.608398f, 0.631836f, 0.653320f, 0.674805f, 0.695801f, 0.714355f, 0.731934f,
+ 0.749512f, 0.765137f, 0.781250f, 0.794434f, 0.808594f, 0.821289f, 0.833496f, 0.844238f, 0.855469f, 0.866211f, 0.875000f, 0.883789f,
+ 0.892578f, 0.901855f, 0.908691f, 0.915527f, 0.922852f, 0.929199f, 0.935059f, 0.941406f, 0.947266f, 0.951172f, 0.978516f, 0.979004f,
+ 0.978027f, 0.977051f, 0.975586f, 0.974121f, 0.002989f, 0.009476f, 0.016785f, 0.024246f, 0.032745f, 0.041809f, 0.052246f, 0.063782f,
+ 0.076111f, 0.089722f, 0.104675f, 0.120605f, 0.138306f, 0.157959f, 0.178101f, 0.200073f, 0.223145f, 0.247192f, 0.273193f, 0.300293f,
+ 0.327148f, 0.354736f, 0.383545f, 0.411621f, 0.439941f, 0.468018f, 0.495605f, 0.522949f, 0.548828f, 0.574219f, 0.598145f, 0.622559f,
+ 0.645508f, 0.666016f, 0.687500f, 0.706543f, 0.725586f, 0.743164f, 0.759766f, 0.775391f, 0.791016f, 0.803711f, 0.817871f, 0.829590f,
+ 0.841797f, 0.852539f, 0.863281f, 0.873047f, 0.882812f, 0.891113f, 0.900391f, 0.906738f, 0.915039f, 0.922852f, 0.929688f, 0.936035f,
+ 0.941895f, 0.946777f, 0.976074f, 0.977051f, 0.976074f, 0.975586f, 0.974121f, 0.972656f, 0.002846f, 0.008568f, 0.014557f, 0.021484f,
+ 0.028442f, 0.036377f, 0.045074f, 0.055054f, 0.066101f, 0.077759f, 0.090759f, 0.104797f, 0.120483f, 0.136719f, 0.155029f, 0.175171f,
+ 0.196045f, 0.218262f, 0.241943f, 0.266357f, 0.292480f, 0.319336f, 0.345703f, 0.373535f, 0.402100f, 0.429932f, 0.457764f, 0.484863f,
+ 0.512207f, 0.539062f, 0.564941f, 0.589844f, 0.613281f, 0.636719f, 0.659180f, 0.680664f, 0.700684f, 0.718750f, 0.736816f, 0.754883f,
+ 0.770508f, 0.785645f, 0.799805f, 0.813965f, 0.826172f, 0.838867f, 0.850586f, 0.861328f, 0.871582f, 0.881836f, 0.890625f, 0.898926f,
+ 0.906738f, 0.915039f, 0.922363f, 0.928711f, 0.936035f, 0.941895f, 0.974609f, 0.975098f, 0.974609f, 0.973633f, 0.972656f, 0.971191f,
+ 0.002285f, 0.007290f, 0.012634f, 0.018280f, 0.024918f, 0.032074f, 0.039673f, 0.048157f, 0.057220f, 0.067810f, 0.078735f, 0.091248f,
+ 0.104370f, 0.119873f, 0.135742f, 0.152344f, 0.171631f, 0.191650f, 0.213501f, 0.236206f, 0.260010f, 0.285156f, 0.310547f, 0.338135f,
+ 0.364746f, 0.392578f, 0.420410f, 0.448242f, 0.476562f, 0.502441f, 0.529785f, 0.555664f, 0.581543f, 0.605469f, 0.629395f, 0.652344f,
+ 0.673340f, 0.693848f, 0.713867f, 0.732910f, 0.750000f, 0.767090f, 0.782715f, 0.797852f, 0.811035f, 0.825195f, 0.836914f, 0.848633f,
+ 0.860840f, 0.870605f, 0.880371f, 0.890137f, 0.898926f, 0.907227f, 0.915527f, 0.923340f, 0.929688f, 0.936523f, 0.972168f, 0.973145f,
+ 0.972656f, 0.972168f, 0.970703f, 0.969727f, 0.002064f, 0.006584f, 0.011154f, 0.016266f, 0.022263f, 0.028397f, 0.034973f, 0.042145f,
+ 0.050232f, 0.059235f, 0.069031f, 0.079346f, 0.091736f, 0.104553f, 0.118652f, 0.133789f, 0.150635f, 0.168457f, 0.188110f, 0.208984f,
+ 0.230225f, 0.253906f, 0.278076f, 0.303955f, 0.329346f, 0.356689f, 0.384033f, 0.411865f, 0.439941f, 0.467285f, 0.493896f, 0.520996f,
+ 0.547363f, 0.573730f, 0.597168f, 0.622559f, 0.645508f, 0.667969f, 0.688965f, 0.709473f, 0.728027f, 0.746094f, 0.762695f, 0.778809f,
+ 0.794922f, 0.809082f, 0.822754f, 0.834961f, 0.847168f, 0.858887f, 0.870117f, 0.880371f, 0.889648f, 0.898926f, 0.907227f, 0.915039f,
+ 0.923828f, 0.930176f, 0.970215f, 0.971680f, 0.970215f, 0.970215f, 0.968750f, 0.968262f, 0.001935f, 0.005634f, 0.010078f, 0.014389f,
+ 0.019669f, 0.024658f, 0.030716f, 0.037201f, 0.044098f, 0.051941f, 0.060333f, 0.070129f, 0.080383f, 0.091370f, 0.103638f, 0.116943f,
+ 0.131714f, 0.148193f, 0.165161f, 0.183838f, 0.203979f, 0.225220f, 0.247803f, 0.271240f, 0.296631f, 0.322510f, 0.349121f, 0.376221f,
+ 0.403076f, 0.431152f, 0.458984f, 0.485596f, 0.513672f, 0.540039f, 0.564941f, 0.590820f, 0.616211f, 0.638672f, 0.662109f, 0.683105f,
+ 0.704102f, 0.723633f, 0.741699f, 0.759766f, 0.776855f, 0.792480f, 0.807617f, 0.821777f, 0.833496f, 0.847168f, 0.858887f, 0.870117f,
+ 0.880859f, 0.889648f, 0.899414f, 0.908203f, 0.916992f, 0.924316f, 0.967285f, 0.968262f, 0.968750f, 0.968262f, 0.967285f, 0.966309f,
+ 0.001805f, 0.005119f, 0.009079f, 0.013023f, 0.017487f, 0.022278f, 0.027130f, 0.032684f, 0.038666f, 0.045959f, 0.052826f, 0.061401f,
+ 0.070801f, 0.080139f, 0.090698f, 0.102844f, 0.115845f, 0.130005f, 0.145264f, 0.162476f, 0.180176f, 0.199951f, 0.220459f, 0.242188f,
+ 0.265869f, 0.290283f, 0.315430f, 0.341309f, 0.368652f, 0.395752f, 0.423584f, 0.451416f, 0.479248f, 0.505859f, 0.532227f, 0.559082f,
+ 0.584961f, 0.609863f, 0.634277f, 0.656738f, 0.678711f, 0.700195f, 0.720703f, 0.738281f, 0.757324f, 0.774414f, 0.790527f, 0.805664f,
+ 0.820312f, 0.834473f, 0.846680f, 0.858887f, 0.869629f, 0.880859f, 0.890625f, 0.899902f, 0.909668f, 0.917969f, 0.964844f, 0.966797f,
+ 0.967285f, 0.965820f, 0.964844f, 0.963867f, 0.001437f, 0.004662f, 0.007919f, 0.011681f, 0.015404f, 0.019272f, 0.024261f, 0.029205f,
+ 0.034515f, 0.040619f, 0.046967f, 0.054138f, 0.061737f, 0.070496f, 0.080200f, 0.090271f, 0.101807f, 0.114136f, 0.127686f, 0.143188f,
+ 0.159058f, 0.176514f, 0.195190f, 0.215454f, 0.237305f, 0.260010f, 0.283936f, 0.309326f, 0.334717f, 0.361328f, 0.389160f, 0.416260f,
+ 0.444336f, 0.471436f, 0.499512f, 0.525879f, 0.552734f, 0.579590f, 0.604004f, 0.628906f, 0.651855f, 0.674805f, 0.696777f, 0.717773f,
+ 0.737305f, 0.755859f, 0.772949f, 0.789551f, 0.805664f, 0.819336f, 0.833984f, 0.847168f, 0.859375f, 0.871094f, 0.881836f, 0.892090f,
+ 0.902344f, 0.910156f, 0.962402f, 0.964355f, 0.964355f, 0.963867f, 0.962891f, 0.961914f, 0.001264f, 0.004036f, 0.007088f, 0.010170f,
+ 0.013672f, 0.017365f, 0.021423f, 0.025955f, 0.030533f, 0.035614f, 0.041321f, 0.047791f, 0.054626f, 0.062195f, 0.070679f, 0.080017f,
+ 0.089600f, 0.100769f, 0.112854f, 0.125977f, 0.139893f, 0.156128f, 0.172852f, 0.191650f, 0.211060f, 0.232056f, 0.254883f, 0.278076f,
+ 0.302979f, 0.328125f, 0.355225f, 0.381836f, 0.409912f, 0.437256f, 0.464844f, 0.492676f, 0.520508f, 0.547852f, 0.573242f, 0.599609f,
+ 0.625000f, 0.649414f, 0.672363f, 0.694336f, 0.714844f, 0.734863f, 0.753418f, 0.771484f, 0.788574f, 0.804688f, 0.820312f, 0.833496f,
+ 0.847656f, 0.859863f, 0.873047f, 0.883301f, 0.894043f, 0.903809f, 0.959961f, 0.961914f, 0.962402f, 0.960938f, 0.960449f, 0.959961f,
+ 0.001297f, 0.003721f, 0.006397f, 0.009308f, 0.012260f, 0.015808f, 0.019302f, 0.023010f, 0.027267f, 0.032013f, 0.037109f, 0.042419f,
+ 0.048523f, 0.054962f, 0.061920f, 0.070435f, 0.079407f, 0.088318f, 0.099121f, 0.111084f, 0.124023f, 0.137695f, 0.152832f, 0.169434f,
+ 0.187378f, 0.206421f, 0.227783f, 0.249268f, 0.272461f, 0.297363f, 0.322754f, 0.348389f, 0.376221f, 0.403809f, 0.431396f, 0.459229f,
+ 0.487305f, 0.515137f, 0.542480f, 0.569336f, 0.595215f, 0.621094f, 0.645996f, 0.669434f, 0.691406f, 0.712891f, 0.733887f, 0.753418f,
+ 0.770996f, 0.789062f, 0.805176f, 0.820801f, 0.835449f, 0.849121f, 0.861328f, 0.874512f, 0.885742f, 0.895508f, 0.956543f, 0.959473f,
+ 0.958984f, 0.958984f, 0.958008f, 0.957031f, 0.001267f, 0.003481f, 0.005955f, 0.008568f, 0.011185f, 0.014030f, 0.017151f, 0.020294f,
+ 0.024246f, 0.028427f, 0.032654f, 0.037476f, 0.042603f, 0.048523f, 0.054871f, 0.062408f, 0.070129f, 0.078552f, 0.087769f, 0.097534f,
+ 0.109192f, 0.121399f, 0.135010f, 0.150513f, 0.165894f, 0.183960f, 0.202881f, 0.222656f, 0.244385f, 0.267334f, 0.291260f, 0.317139f,
+ 0.343506f, 0.370605f, 0.397949f, 0.426025f, 0.454346f, 0.482666f, 0.511230f, 0.538086f, 0.565918f, 0.592285f, 0.618164f, 0.642578f,
+ 0.667480f, 0.690918f, 0.711914f, 0.732910f, 0.752930f, 0.771484f, 0.790039f, 0.806641f, 0.821777f, 0.837402f, 0.850586f, 0.864746f,
+ 0.875977f, 0.887695f, 0.953613f, 0.956543f, 0.957031f, 0.956055f, 0.956055f, 0.955078f, 0.001068f, 0.003025f, 0.005283f, 0.007442f,
+ 0.009857f, 0.012665f, 0.015930f, 0.018570f, 0.021820f, 0.025314f, 0.028931f, 0.033325f, 0.038147f, 0.042908f, 0.049011f, 0.055176f,
+ 0.061859f, 0.069397f, 0.077637f, 0.086792f, 0.096252f, 0.107117f, 0.119385f, 0.132690f, 0.147095f, 0.162720f, 0.180054f, 0.198486f,
+ 0.218384f, 0.239990f, 0.262207f, 0.287109f, 0.311523f, 0.337891f, 0.364990f, 0.392822f, 0.420654f, 0.449219f, 0.478027f, 0.505859f,
+ 0.535156f, 0.562012f, 0.588867f, 0.615723f, 0.641602f, 0.666016f, 0.688965f, 0.711914f, 0.732910f, 0.753906f, 0.773438f, 0.791016f,
+ 0.808594f, 0.823730f, 0.839355f, 0.854004f, 0.867188f, 0.879883f, 0.950195f, 0.954102f, 0.954102f, 0.953125f, 0.952637f, 0.952148f,
+ 0.000884f, 0.003082f, 0.004631f, 0.006931f, 0.008942f, 0.011513f, 0.013779f, 0.016663f, 0.019806f, 0.022934f, 0.026215f, 0.029999f,
+ 0.033813f, 0.038544f, 0.043365f, 0.048615f, 0.054352f, 0.061005f, 0.068420f, 0.076477f, 0.085022f, 0.095032f, 0.105469f, 0.117432f,
+ 0.130127f, 0.143799f, 0.159790f, 0.176270f, 0.194580f, 0.214478f, 0.235229f, 0.257568f, 0.281982f, 0.306641f, 0.332764f, 0.359863f,
+ 0.388184f, 0.416016f, 0.445557f, 0.474854f, 0.502441f, 0.531738f, 0.559570f, 0.586914f, 0.614258f, 0.640625f, 0.665039f, 0.689453f,
+ 0.712891f, 0.734863f, 0.755371f, 0.774902f, 0.793945f, 0.810547f, 0.827637f, 0.842773f, 0.857910f, 0.871094f, 0.946777f, 0.950684f,
+ 0.951172f, 0.950684f, 0.949707f, 0.949707f, 0.000848f, 0.002630f, 0.004330f, 0.006386f, 0.008148f, 0.010437f, 0.012436f, 0.014977f,
+ 0.017731f, 0.020645f, 0.023529f, 0.026413f, 0.030289f, 0.034302f, 0.038391f, 0.043365f, 0.048737f, 0.054413f, 0.060455f, 0.067383f,
+ 0.075134f, 0.083801f, 0.093262f, 0.103821f, 0.114746f, 0.127441f, 0.140991f, 0.156372f, 0.172729f, 0.190918f, 0.210449f, 0.231201f,
+ 0.253662f, 0.277344f, 0.302734f, 0.328857f, 0.355225f, 0.384033f, 0.413086f, 0.440918f, 0.471191f, 0.500488f, 0.529785f, 0.558594f,
+ 0.586426f, 0.613770f, 0.640137f, 0.666016f, 0.689453f, 0.714355f, 0.736328f, 0.757812f, 0.777832f, 0.796875f, 0.813965f, 0.831543f,
+ 0.847168f, 0.860840f, 0.943848f, 0.948242f, 0.947754f, 0.948242f, 0.946777f, 0.946777f, 0.000747f, 0.002462f, 0.004192f, 0.005573f,
+ 0.007454f, 0.009430f, 0.011253f, 0.013588f, 0.015762f, 0.018112f, 0.020859f, 0.023758f, 0.027084f, 0.030426f, 0.034332f, 0.038635f,
+ 0.042999f, 0.048340f, 0.053772f, 0.060028f, 0.066589f, 0.074402f, 0.082764f, 0.091553f, 0.101685f, 0.112854f, 0.125122f, 0.138184f,
+ 0.153320f, 0.169556f, 0.187500f, 0.206543f, 0.227539f, 0.249512f, 0.273193f, 0.298340f, 0.324463f, 0.351562f, 0.379883f, 0.409424f,
+ 0.438477f, 0.468750f, 0.498047f, 0.527832f, 0.556641f, 0.585449f, 0.614258f, 0.641113f, 0.666992f, 0.692383f, 0.716309f, 0.738281f,
+ 0.760742f, 0.780273f, 0.799805f, 0.818848f, 0.834473f, 0.851074f, 0.939941f, 0.944824f, 0.944336f, 0.944336f, 0.944336f, 0.943359f,
+ 0.000670f, 0.002079f, 0.003538f, 0.005146f, 0.006508f, 0.008247f, 0.010223f, 0.012260f, 0.014153f, 0.016479f, 0.018677f, 0.021515f,
+ 0.024323f, 0.027313f, 0.030518f, 0.034302f, 0.038422f, 0.042725f, 0.047760f, 0.053101f, 0.059113f, 0.065613f, 0.072937f, 0.080444f,
+ 0.089722f, 0.099426f, 0.110596f, 0.122314f, 0.135742f, 0.150513f, 0.166260f, 0.183716f, 0.202759f, 0.223633f, 0.245728f, 0.269287f,
+ 0.294189f, 0.320557f, 0.348633f, 0.376709f, 0.406494f, 0.436523f, 0.467285f, 0.497070f, 0.528320f, 0.557129f, 0.586426f, 0.614746f,
+ 0.642090f, 0.668945f, 0.694824f, 0.718750f, 0.742676f, 0.764648f, 0.786133f, 0.805176f, 0.823242f, 0.840820f, 0.936035f, 0.940918f,
+ 0.941406f, 0.941406f, 0.940430f, 0.939941f, 0.000645f, 0.001963f, 0.003384f, 0.004719f, 0.006042f, 0.007614f, 0.009384f, 0.011192f,
+ 0.012665f, 0.015083f, 0.016861f, 0.019165f, 0.021393f, 0.024445f, 0.027451f, 0.030716f, 0.034149f, 0.038116f, 0.042389f, 0.047028f,
+ 0.052277f, 0.058014f, 0.064270f, 0.071289f, 0.079041f, 0.087830f, 0.097351f, 0.108337f, 0.119995f, 0.132812f, 0.147217f, 0.163452f,
+ 0.180420f, 0.199585f, 0.219849f, 0.242065f, 0.265625f, 0.291260f, 0.318115f, 0.345703f, 0.375000f, 0.404541f, 0.434326f, 0.465820f,
+ 0.496582f, 0.526855f, 0.557617f, 0.587402f, 0.616699f, 0.645508f, 0.672363f, 0.698242f, 0.723145f, 0.747559f, 0.770020f, 0.791504f,
+ 0.810059f, 0.828613f, 0.931641f, 0.937012f, 0.937500f, 0.937500f, 0.937012f, 0.936523f, 0.000692f, 0.001705f, 0.003000f, 0.004238f,
+ 0.005798f, 0.006805f, 0.008659f, 0.009933f, 0.011681f, 0.013191f, 0.015259f, 0.017166f, 0.019379f, 0.021729f, 0.024796f, 0.027328f,
+ 0.030380f, 0.033661f, 0.037598f, 0.041718f, 0.046539f, 0.051270f, 0.056946f, 0.062988f, 0.069885f, 0.077271f, 0.085999f, 0.095398f,
+ 0.105652f, 0.117859f, 0.129883f, 0.144409f, 0.159912f, 0.177002f, 0.196045f, 0.216553f, 0.239014f, 0.262451f, 0.288086f, 0.314941f,
+ 0.343262f, 0.372314f, 0.403076f, 0.433594f, 0.465332f, 0.496826f, 0.527832f, 0.559082f, 0.589355f, 0.619629f, 0.648926f, 0.676758f,
+ 0.703125f, 0.728516f, 0.752930f, 0.775391f, 0.797363f, 0.817871f, 0.927246f, 0.933105f, 0.934082f, 0.933594f, 0.933594f, 0.933105f,
+ 0.000460f, 0.001622f, 0.002705f, 0.003983f, 0.004925f, 0.006363f, 0.007652f, 0.008965f, 0.010521f, 0.011963f, 0.013664f, 0.015480f,
+ 0.017258f, 0.019440f, 0.021912f, 0.024338f, 0.027084f, 0.030212f, 0.033356f, 0.037018f, 0.040833f, 0.045380f, 0.050110f, 0.055573f,
+ 0.061829f, 0.068359f, 0.075928f, 0.083984f, 0.093140f, 0.103333f, 0.115112f, 0.127441f, 0.141602f, 0.156982f, 0.174316f, 0.192871f,
+ 0.213257f, 0.235596f, 0.259766f, 0.285400f, 0.312256f, 0.341797f, 0.371094f, 0.402100f, 0.434082f, 0.465332f, 0.497314f, 0.529297f,
+ 0.562012f, 0.592773f, 0.623535f, 0.652832f, 0.681641f, 0.709473f, 0.735352f, 0.759766f, 0.783203f, 0.803711f, 0.922363f, 0.929199f,
+ 0.929688f, 0.929199f, 0.929688f, 0.928711f, 0.000341f, 0.001686f, 0.002537f, 0.003769f, 0.004745f, 0.005764f, 0.007034f, 0.008286f,
+ 0.009369f, 0.010742f, 0.012161f, 0.013931f, 0.015671f, 0.017563f, 0.019440f, 0.021851f, 0.024231f, 0.026672f, 0.029556f, 0.032776f,
+ 0.036255f, 0.040283f, 0.044464f, 0.049194f, 0.054413f, 0.060059f, 0.066589f, 0.074036f, 0.081909f, 0.091187f, 0.100769f, 0.112000f,
+ 0.124512f, 0.139038f, 0.154297f, 0.171265f, 0.189819f, 0.210571f, 0.232788f, 0.257324f, 0.283203f, 0.311035f, 0.339844f, 0.370850f,
+ 0.402100f, 0.433838f, 0.466797f, 0.499268f, 0.532227f, 0.565430f, 0.598145f, 0.628418f, 0.659180f, 0.687988f, 0.715820f, 0.742188f,
+ 0.767090f, 0.791504f, 0.917969f, 0.924805f, 0.925293f, 0.925293f, 0.924805f, 0.924805f, 0.000405f, 0.001282f, 0.002298f, 0.003269f,
+ 0.004448f, 0.005043f, 0.006294f, 0.007233f, 0.008606f, 0.009727f, 0.010849f, 0.012421f, 0.013885f, 0.015465f, 0.017426f, 0.019394f,
+ 0.021667f, 0.023819f, 0.026154f, 0.029175f, 0.032227f, 0.035706f, 0.039062f, 0.043427f, 0.047913f, 0.052856f, 0.058502f, 0.064880f,
+ 0.071960f, 0.079895f, 0.088867f, 0.098633f, 0.109619f, 0.122192f, 0.135742f, 0.151489f, 0.168457f, 0.187134f, 0.207764f, 0.230835f,
+ 0.254883f, 0.281494f, 0.310059f, 0.339355f, 0.370361f, 0.402588f, 0.435547f, 0.468994f, 0.502930f, 0.537109f, 0.569824f, 0.602051f,
+ 0.634766f, 0.665527f, 0.695801f, 0.724121f, 0.750488f, 0.776855f, 0.912598f, 0.919434f, 0.920410f, 0.920410f, 0.919922f, 0.920410f,
+ 0.000529f, 0.001217f, 0.002171f, 0.003035f, 0.003790f, 0.004784f, 0.005711f, 0.006756f, 0.007782f, 0.008987f, 0.009773f, 0.011185f,
+ 0.012650f, 0.013771f, 0.015656f, 0.017181f, 0.018890f, 0.021057f, 0.023239f, 0.025848f, 0.028488f, 0.031525f, 0.034607f, 0.038147f,
+ 0.042023f, 0.046539f, 0.051605f, 0.056793f, 0.063049f, 0.069946f, 0.078064f, 0.086548f, 0.096313f, 0.107117f, 0.119446f, 0.133301f,
+ 0.148560f, 0.165405f, 0.184570f, 0.205811f, 0.228394f, 0.253174f, 0.280029f, 0.308594f, 0.339111f, 0.370605f, 0.404053f, 0.437988f,
+ 0.471680f, 0.506348f, 0.541504f, 0.576172f, 0.609375f, 0.642578f, 0.674316f, 0.705078f, 0.734375f, 0.761719f, 0.907227f, 0.914062f,
+ 0.915527f, 0.915527f, 0.916016f, 0.915039f, 0.000402f, 0.001247f, 0.001841f, 0.002651f, 0.003414f, 0.004200f, 0.005337f, 0.005821f,
+ 0.006733f, 0.008041f, 0.008942f, 0.010201f, 0.011261f, 0.012749f, 0.013893f, 0.015472f, 0.016663f, 0.018829f, 0.020615f, 0.022873f,
+ 0.025299f, 0.027893f, 0.030533f, 0.033600f, 0.037140f, 0.040924f, 0.044983f, 0.049927f, 0.055359f, 0.061340f, 0.068176f, 0.075500f,
+ 0.084106f, 0.093933f, 0.104370f, 0.116638f, 0.130249f, 0.145996f, 0.162842f, 0.181885f, 0.203735f, 0.226562f, 0.251465f, 0.279297f,
+ 0.308594f, 0.339355f, 0.373047f, 0.406982f, 0.440918f, 0.477051f, 0.511719f, 0.548340f, 0.583496f, 0.618164f, 0.652344f, 0.684570f,
+ 0.715332f, 0.745605f, 0.901855f, 0.909180f, 0.910156f, 0.910645f, 0.910156f, 0.910156f, 0.000371f, 0.001090f, 0.001752f, 0.002409f,
+ 0.003042f, 0.003963f, 0.004898f, 0.005295f, 0.006077f, 0.006992f, 0.008102f, 0.009338f, 0.010101f, 0.011078f, 0.012375f, 0.013718f,
+ 0.015099f, 0.016403f, 0.018402f, 0.020203f, 0.022354f, 0.024475f, 0.026825f, 0.029388f, 0.032623f, 0.035522f, 0.039429f, 0.043762f,
+ 0.048462f, 0.053558f, 0.059265f, 0.065552f, 0.073120f, 0.081787f, 0.091431f, 0.102112f, 0.114136f, 0.127930f, 0.143066f, 0.160767f,
+ 0.179810f, 0.200928f, 0.224854f, 0.250732f, 0.279053f, 0.308838f, 0.340820f, 0.374756f, 0.410156f, 0.446045f, 0.482666f, 0.520020f,
+ 0.556152f, 0.593262f, 0.628906f, 0.663574f, 0.695801f, 0.728027f, 0.895508f, 0.903809f, 0.904297f, 0.904297f, 0.904297f, 0.904785f,
+ 0.000425f, 0.000937f, 0.001529f, 0.002129f, 0.002674f, 0.003696f, 0.004257f, 0.004990f, 0.005726f, 0.006161f, 0.007118f, 0.007919f,
+ 0.009109f, 0.009941f, 0.011055f, 0.011993f, 0.013191f, 0.014832f, 0.016281f, 0.017868f, 0.019562f, 0.021362f, 0.023514f, 0.025909f,
+ 0.028549f, 0.031189f, 0.034637f, 0.037994f, 0.042145f, 0.046570f, 0.051453f, 0.057129f, 0.063965f, 0.070984f, 0.079285f, 0.088806f,
+ 0.099426f, 0.111267f, 0.125366f, 0.140747f, 0.158203f, 0.178101f, 0.199585f, 0.223755f, 0.250732f, 0.279297f, 0.310059f, 0.343994f,
+ 0.377686f, 0.414307f, 0.451904f, 0.489258f, 0.527832f, 0.565918f, 0.603027f, 0.640137f, 0.675781f, 0.710449f, 0.888672f, 0.897461f,
+ 0.899902f, 0.900391f, 0.899414f, 0.899414f, 0.000317f, 0.000823f, 0.001386f, 0.002108f, 0.002684f, 0.003239f, 0.003883f, 0.004303f,
+ 0.004730f, 0.005569f, 0.006626f, 0.007214f, 0.008003f, 0.008865f, 0.009590f, 0.010948f, 0.011856f, 0.012871f, 0.014381f, 0.015640f,
+ 0.017075f, 0.018799f, 0.020569f, 0.022537f, 0.024704f, 0.027405f, 0.030090f, 0.033142f, 0.036346f, 0.040436f, 0.044830f, 0.049835f,
+ 0.055450f, 0.061584f, 0.068665f, 0.076904f, 0.086060f, 0.096741f, 0.109192f, 0.122559f, 0.138428f, 0.155762f, 0.176270f, 0.198242f,
+ 0.223145f, 0.250244f, 0.280518f, 0.312500f, 0.346680f, 0.382324f, 0.420410f, 0.458740f, 0.498779f, 0.538086f, 0.577637f, 0.616211f,
+ 0.654297f, 0.690918f, 0.881348f, 0.890625f, 0.892578f, 0.893066f, 0.893066f, 0.892578f, 0.000385f, 0.000766f, 0.001544f, 0.001925f,
+ 0.002359f, 0.002947f, 0.003176f, 0.003691f, 0.004288f, 0.005215f, 0.005917f, 0.006214f, 0.007019f, 0.007843f, 0.008469f, 0.009598f,
+ 0.010345f, 0.011559f, 0.012497f, 0.013634f, 0.014992f, 0.016373f, 0.017853f, 0.019608f, 0.021515f, 0.023788f, 0.026260f, 0.028931f,
+ 0.031860f, 0.034912f, 0.038635f, 0.042633f, 0.047638f, 0.053070f, 0.059540f, 0.066284f, 0.074524f, 0.083679f, 0.094177f, 0.106445f,
+ 0.120361f, 0.135620f, 0.154053f, 0.174072f, 0.197144f, 0.222900f, 0.251221f, 0.281982f, 0.315430f, 0.351318f, 0.388672f, 0.427734f,
+ 0.468506f, 0.508301f, 0.549805f, 0.591309f, 0.631348f, 0.670410f, 0.874512f, 0.884766f, 0.885742f, 0.886230f, 0.886230f, 0.886230f,
+ 0.000230f, 0.000832f, 0.001281f, 0.001865f, 0.002207f, 0.002605f, 0.003212f, 0.003284f, 0.004124f, 0.004597f, 0.005222f, 0.005703f,
+ 0.006260f, 0.007095f, 0.007790f, 0.008377f, 0.009010f, 0.010078f, 0.011009f, 0.011925f, 0.013153f, 0.014282f, 0.015610f, 0.017151f,
+ 0.018951f, 0.020416f, 0.022583f, 0.024826f, 0.027328f, 0.030136f, 0.033508f, 0.036835f, 0.040985f, 0.045410f, 0.050812f, 0.056854f,
+ 0.063965f, 0.071777f, 0.081177f, 0.091858f, 0.103699f, 0.117615f, 0.133423f, 0.152588f, 0.172974f, 0.196777f, 0.222900f, 0.252686f,
+ 0.284912f, 0.319824f, 0.356934f, 0.395996f, 0.436768f, 0.478516f, 0.521484f, 0.564453f, 0.607422f, 0.649414f, 0.866699f, 0.876953f,
+ 0.877930f, 0.879395f, 0.879883f, 0.878418f, 0.000228f, 0.000734f, 0.000993f, 0.001416f, 0.001935f, 0.002293f, 0.002541f, 0.003174f,
+ 0.003508f, 0.004040f, 0.004337f, 0.005039f, 0.005505f, 0.006054f, 0.006840f, 0.007366f, 0.008041f, 0.008644f, 0.009544f, 0.010460f,
+ 0.011238f, 0.012329f, 0.013542f, 0.014755f, 0.016083f, 0.017624f, 0.019424f, 0.021408f, 0.023422f, 0.025803f, 0.028366f, 0.031311f,
+ 0.034912f, 0.039124f, 0.043304f, 0.048492f, 0.054291f, 0.061188f, 0.069397f, 0.078552f, 0.089233f, 0.101074f, 0.115540f, 0.131226f,
+ 0.150757f, 0.172119f, 0.196533f, 0.224243f, 0.254883f, 0.288574f, 0.324707f, 0.364014f, 0.405029f, 0.447510f, 0.491699f, 0.536133f,
+ 0.581543f, 0.627441f, 0.858398f, 0.869141f, 0.870605f, 0.871582f, 0.871094f, 0.871582f, 0.000118f, 0.000713f, 0.000985f, 0.001328f,
+ 0.001612f, 0.001999f, 0.002399f, 0.002913f, 0.003139f, 0.003567f, 0.004055f, 0.004406f, 0.004986f, 0.005226f, 0.005856f, 0.006332f,
+ 0.007042f, 0.007553f, 0.008286f, 0.009064f, 0.009834f, 0.010696f, 0.011658f, 0.012726f, 0.013817f, 0.015289f, 0.016693f, 0.018265f,
+ 0.019699f, 0.021835f, 0.024307f, 0.026642f, 0.029770f, 0.033234f, 0.037048f, 0.041351f, 0.046478f, 0.052032f, 0.058960f, 0.066589f,
+ 0.075745f, 0.086182f, 0.099121f, 0.113037f, 0.129517f, 0.149048f, 0.171387f, 0.196899f, 0.225464f, 0.257812f, 0.293457f, 0.331787f,
+ 0.373291f, 0.416748f, 0.460938f, 0.507812f, 0.554688f, 0.602051f, 0.849609f, 0.859863f, 0.862793f, 0.863281f, 0.862793f, 0.862793f,
+ 0.000211f, 0.000522f, 0.000877f, 0.001204f, 0.001507f, 0.001724f, 0.002062f, 0.002426f, 0.002867f, 0.003157f, 0.003443f, 0.003752f,
+ 0.004192f, 0.004753f, 0.005154f, 0.005428f, 0.006065f, 0.006546f, 0.007210f, 0.007725f, 0.008530f, 0.009247f, 0.010025f, 0.010887f,
+ 0.011909f, 0.012970f, 0.014069f, 0.015335f, 0.017105f, 0.018433f, 0.020554f, 0.022552f, 0.025116f, 0.027802f, 0.031158f, 0.034485f,
+ 0.038971f, 0.044037f, 0.049469f, 0.055847f, 0.063843f, 0.072815f, 0.083618f, 0.095947f, 0.110840f, 0.128174f, 0.147949f, 0.171387f,
+ 0.198242f, 0.228271f, 0.262207f, 0.299805f, 0.340332f, 0.384277f, 0.430176f, 0.477295f, 0.527344f, 0.577637f, 0.839844f, 0.851074f,
+ 0.853516f, 0.854492f, 0.854980f, 0.854980f, 0.000218f, 0.000479f, 0.000706f, 0.001109f, 0.001245f, 0.001763f, 0.001800f, 0.002211f,
+ 0.002377f, 0.002783f, 0.003103f, 0.003223f, 0.003782f, 0.004089f, 0.004326f, 0.004711f, 0.005306f, 0.005569f, 0.006199f, 0.006653f,
+ 0.007168f, 0.007919f, 0.008560f, 0.009254f, 0.009979f, 0.010872f, 0.012054f, 0.012810f, 0.014221f, 0.015793f, 0.017181f, 0.018967f,
+ 0.021088f, 0.023361f, 0.026001f, 0.028915f, 0.032257f, 0.036469f, 0.040924f, 0.046875f, 0.053375f, 0.061218f, 0.070435f, 0.080811f,
+ 0.093628f, 0.108704f, 0.126709f, 0.147461f, 0.172241f, 0.199951f, 0.232788f, 0.268799f, 0.308594f, 0.351562f, 0.397705f, 0.447266f,
+ 0.498291f, 0.550293f, 0.830078f, 0.841797f, 0.843750f, 0.845215f, 0.845215f, 0.845703f, 0.000139f, 0.000379f, 0.000704f, 0.000896f,
+ 0.001095f, 0.001392f, 0.001649f, 0.002058f, 0.002235f, 0.002483f, 0.002621f, 0.002878f, 0.003214f, 0.003580f, 0.003820f, 0.004055f,
+ 0.004498f, 0.004791f, 0.005173f, 0.005692f, 0.006145f, 0.006691f, 0.007175f, 0.007874f, 0.008499f, 0.009239f, 0.010117f, 0.011032f,
+ 0.011864f, 0.012901f, 0.014282f, 0.015701f, 0.017242f, 0.019516f, 0.021469f, 0.024002f, 0.026749f, 0.029953f, 0.034027f, 0.038727f,
+ 0.044250f, 0.050568f, 0.058136f, 0.067139f, 0.078247f, 0.091614f, 0.106689f, 0.125366f, 0.147339f, 0.172974f, 0.202881f, 0.237671f,
+ 0.275879f, 0.318359f, 0.365234f, 0.415283f, 0.468018f, 0.521973f, 0.819336f, 0.832031f, 0.834473f, 0.834961f, 0.835449f, 0.835938f,
+ 0.000115f, 0.000396f, 0.000688f, 0.000885f, 0.000917f, 0.001393f, 0.001478f, 0.001590f, 0.001944f, 0.002123f, 0.002291f, 0.002644f,
+ 0.002666f, 0.003023f, 0.003197f, 0.003546f, 0.003714f, 0.004246f, 0.004551f, 0.004837f, 0.005108f, 0.005577f, 0.006054f, 0.006504f,
+ 0.007023f, 0.007633f, 0.008362f, 0.009148f, 0.009926f, 0.010742f, 0.011917f, 0.013062f, 0.014351f, 0.015991f, 0.017639f, 0.019455f,
+ 0.021729f, 0.024689f, 0.027740f, 0.031708f, 0.036102f, 0.041260f, 0.047882f, 0.055450f, 0.064392f, 0.075500f, 0.088928f, 0.104797f,
+ 0.124756f, 0.147949f, 0.175415f, 0.207275f, 0.244507f, 0.286133f, 0.332520f, 0.381836f, 0.436279f, 0.492432f, 0.808105f, 0.821289f,
+ 0.822754f, 0.824707f, 0.825195f, 0.824219f, 0.000209f, 0.000435f, 0.000493f, 0.000669f, 0.001040f, 0.001076f, 0.001254f, 0.001398f,
+ 0.001603f, 0.001697f, 0.001987f, 0.002140f, 0.002268f, 0.002472f, 0.002769f, 0.002991f, 0.003302f, 0.003572f, 0.003685f, 0.004002f,
+ 0.004337f, 0.004654f, 0.005062f, 0.005379f, 0.005871f, 0.006363f, 0.006733f, 0.007416f, 0.008102f, 0.008812f, 0.009727f, 0.010689f,
+ 0.011566f, 0.013145f, 0.014053f, 0.015762f, 0.017899f, 0.020096f, 0.022552f, 0.025528f, 0.028992f, 0.033325f, 0.038635f, 0.044952f,
+ 0.052582f, 0.061554f, 0.072998f, 0.086670f, 0.103577f, 0.124329f, 0.148804f, 0.178467f, 0.213501f, 0.253174f, 0.298828f, 0.348877f,
+ 0.403076f, 0.461914f, 0.795898f, 0.809570f, 0.812012f, 0.813477f, 0.813477f, 0.814453f, 0.000243f, 0.000322f, 0.000466f, 0.000710f,
+ 0.000863f, 0.000942f, 0.001051f, 0.001182f, 0.001369f, 0.001451f, 0.001716f, 0.001851f, 0.001968f, 0.002192f, 0.002323f, 0.002470f,
+ 0.002773f, 0.002850f, 0.003056f, 0.003399f, 0.003624f, 0.003832f, 0.004192f, 0.004467f, 0.004955f, 0.005276f, 0.005772f, 0.006084f,
+ 0.006672f, 0.007191f, 0.007828f, 0.008720f, 0.009575f, 0.010292f, 0.011505f, 0.012535f, 0.014114f, 0.016006f, 0.017838f, 0.020462f,
+ 0.023193f, 0.026489f, 0.030807f, 0.035858f, 0.041840f, 0.049652f, 0.059174f, 0.070435f, 0.084839f, 0.102783f, 0.124146f, 0.151489f,
+ 0.183472f, 0.221802f, 0.265137f, 0.315186f, 0.369629f, 0.430664f, 0.782715f, 0.796875f, 0.799805f, 0.800293f, 0.801758f, 0.801758f,
+ 0.000119f, 0.000369f, 0.000340f, 0.000595f, 0.000667f, 0.000841f, 0.001010f, 0.001086f, 0.001179f, 0.001225f, 0.001494f, 0.001555f,
+ 0.001654f, 0.001754f, 0.001965f, 0.002142f, 0.002197f, 0.002432f, 0.002619f, 0.002811f, 0.003021f, 0.003139f, 0.003567f, 0.003708f,
+ 0.004066f, 0.004360f, 0.004612f, 0.005123f, 0.005489f, 0.005878f, 0.006306f, 0.006824f, 0.007576f, 0.008286f, 0.008949f, 0.010155f,
+ 0.011322f, 0.012756f, 0.014046f, 0.015976f, 0.018250f, 0.020874f, 0.024094f, 0.027878f, 0.032867f, 0.039154f, 0.046509f, 0.055908f,
+ 0.068054f, 0.082886f, 0.102356f, 0.125732f, 0.155029f, 0.190674f, 0.232422f, 0.281006f, 0.335693f, 0.397949f, 0.770020f, 0.783691f,
+ 0.786621f, 0.787598f, 0.788086f, 0.789551f, 0.000000f, 0.000220f, 0.000275f, 0.000562f, 0.000618f, 0.000683f, 0.000733f, 0.000761f,
+ 0.000966f, 0.001022f, 0.001184f, 0.001237f, 0.001382f, 0.001552f, 0.001688f, 0.001724f, 0.001918f, 0.002024f, 0.002115f, 0.002243f,
+ 0.002403f, 0.002718f, 0.002840f, 0.003052f, 0.003330f, 0.003508f, 0.003860f, 0.004097f, 0.004314f, 0.004719f, 0.005074f, 0.005535f,
+ 0.006058f, 0.006584f, 0.007168f, 0.007874f, 0.008759f, 0.009651f, 0.011086f, 0.012459f, 0.013992f, 0.015945f, 0.018433f, 0.021408f,
+ 0.025192f, 0.029861f, 0.035950f, 0.043396f, 0.053406f, 0.065735f, 0.082031f, 0.102234f, 0.128052f, 0.160645f, 0.200073f, 0.247192f,
+ 0.301025f, 0.363281f, 0.755371f, 0.770996f, 0.772949f, 0.773926f, 0.775879f, 0.775879f, 0.000216f, 0.000102f, 0.000381f, 0.000487f,
+ 0.000429f, 0.000552f, 0.000579f, 0.000788f, 0.000804f, 0.000854f, 0.000937f, 0.000996f, 0.001078f, 0.001218f, 0.001315f, 0.001499f,
+ 0.001532f, 0.001642f, 0.001805f, 0.001825f, 0.002077f, 0.002178f, 0.002312f, 0.002396f, 0.002575f, 0.002735f, 0.002947f, 0.003317f,
+ 0.003428f, 0.003721f, 0.004185f, 0.004379f, 0.004704f, 0.005253f, 0.005650f, 0.006145f, 0.006870f, 0.007515f, 0.008415f, 0.009430f,
+ 0.010612f, 0.012093f, 0.013954f, 0.016052f, 0.018967f, 0.022476f, 0.027115f, 0.032898f, 0.040649f, 0.050690f, 0.063599f, 0.080811f,
+ 0.103210f, 0.132202f, 0.168823f, 0.213501f, 0.266602f, 0.329102f, 0.740234f, 0.756348f, 0.758789f, 0.760254f, 0.761230f, 0.761230f,
+ 0.000179f, 0.000181f, 0.000180f, 0.000289f, 0.000413f, 0.000458f, 0.000497f, 0.000620f, 0.000646f, 0.000688f, 0.000830f, 0.000868f,
+ 0.000904f, 0.000981f, 0.001024f, 0.001178f, 0.001146f, 0.001302f, 0.001382f, 0.001523f, 0.001679f, 0.001737f, 0.001824f, 0.001959f,
+ 0.002195f, 0.002283f, 0.002438f, 0.002579f, 0.002703f, 0.002939f, 0.003181f, 0.003454f, 0.003677f, 0.004051f, 0.004395f, 0.004738f,
+ 0.005283f, 0.005783f, 0.006420f, 0.007095f, 0.007988f, 0.009094f, 0.010384f, 0.011955f, 0.013939f, 0.016434f, 0.019836f, 0.024292f,
+ 0.030029f, 0.037659f, 0.048065f, 0.061890f, 0.080811f, 0.105774f, 0.138672f, 0.180542f, 0.231934f, 0.293213f, 0.724121f, 0.740234f,
+ 0.744141f, 0.745117f, 0.745605f, 0.746094f, 0.000000f, 0.000056f, 0.000263f, 0.000339f, 0.000369f, 0.000357f, 0.000376f, 0.000508f,
+ 0.000519f, 0.000558f, 0.000581f, 0.000678f, 0.000767f, 0.000775f, 0.000905f, 0.000849f, 0.000992f, 0.000942f, 0.001192f, 0.001169f,
+ 0.001204f, 0.001375f, 0.001439f, 0.001532f, 0.001634f, 0.001676f, 0.001799f, 0.001904f, 0.002165f, 0.002262f, 0.002377f, 0.002611f,
+ 0.002836f, 0.003103f, 0.003321f, 0.003550f, 0.004005f, 0.004356f, 0.004772f, 0.005295f, 0.005962f, 0.006756f, 0.007690f, 0.008690f,
+ 0.010078f, 0.011871f, 0.014252f, 0.017242f, 0.021393f, 0.027100f, 0.034851f, 0.046051f, 0.060455f, 0.081848f, 0.110474f, 0.148682f,
+ 0.197632f, 0.257568f, 0.706543f, 0.724121f, 0.727539f, 0.729492f, 0.729980f, 0.729492f, 0.000000f, 0.000130f, 0.000174f, 0.000312f,
+ 0.000290f, 0.000293f, 0.000372f, 0.000319f, 0.000397f, 0.000433f, 0.000550f, 0.000552f, 0.000564f, 0.000593f, 0.000638f, 0.000758f,
+ 0.000784f, 0.000797f, 0.000842f, 0.000937f, 0.001011f, 0.001068f, 0.001125f, 0.001231f, 0.001228f, 0.001288f, 0.001409f, 0.001465f,
+ 0.001644f, 0.001697f, 0.001965f, 0.001924f, 0.002136f, 0.002270f, 0.002436f, 0.002697f, 0.002916f, 0.003202f, 0.003492f, 0.003929f,
+ 0.004391f, 0.004887f, 0.005516f, 0.006233f, 0.007240f, 0.008461f, 0.010094f, 0.012070f, 0.014854f, 0.018585f, 0.024338f, 0.032379f,
+ 0.043884f, 0.060516f, 0.084656f, 0.118469f, 0.164185f, 0.222168f, 0.689941f, 0.708008f, 0.710449f, 0.711914f, 0.712891f, 0.712402f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000226f, 0.000145f, 0.000282f, 0.000255f, 0.000247f, 0.000323f, 0.000389f, 0.000379f, 0.000435f,
+ 0.000461f, 0.000509f, 0.000535f, 0.000517f, 0.000557f, 0.000604f, 0.000649f, 0.000690f, 0.000757f, 0.000773f, 0.000836f, 0.000865f,
+ 0.000924f, 0.000957f, 0.001095f, 0.001104f, 0.001243f, 0.001361f, 0.001458f, 0.001486f, 0.001619f, 0.001745f, 0.001791f, 0.001993f,
+ 0.002100f, 0.002321f, 0.002539f, 0.002771f, 0.003084f, 0.003412f, 0.003866f, 0.004368f, 0.005062f, 0.005821f, 0.006882f, 0.008278f,
+ 0.010071f, 0.012756f, 0.016327f, 0.021774f, 0.029785f, 0.042206f, 0.061462f, 0.090149f, 0.131348f, 0.187378f, 0.669434f, 0.688965f,
+ 0.692383f, 0.694824f, 0.695801f, 0.695312f, 0.000000f, 0.000118f, 0.000113f, 0.000158f, 0.000158f, 0.000176f, 0.000224f, 0.000202f,
+ 0.000251f, 0.000260f, 0.000280f, 0.000332f, 0.000316f, 0.000365f, 0.000389f, 0.000419f, 0.000454f, 0.000435f, 0.000476f, 0.000494f,
+ 0.000516f, 0.000576f, 0.000609f, 0.000656f, 0.000678f, 0.000712f, 0.000792f, 0.000800f, 0.000852f, 0.000919f, 0.000961f, 0.001070f,
+ 0.001120f, 0.001238f, 0.001300f, 0.001480f, 0.001459f, 0.001634f, 0.001798f, 0.001947f, 0.002111f, 0.002377f, 0.002615f, 0.002966f,
+ 0.003410f, 0.003933f, 0.004585f, 0.005489f, 0.006706f, 0.008148f, 0.010757f, 0.013962f, 0.019257f, 0.027771f, 0.041931f, 0.065125f,
+ 0.101135f, 0.152832f, 0.650391f, 0.670898f, 0.674316f, 0.675293f, 0.675781f, 0.677246f, 0.000000f, 0.000000f, 0.000109f, 0.000106f,
+ 0.000121f, 0.000117f, 0.000130f, 0.000151f, 0.000161f, 0.000174f, 0.000234f, 0.000197f, 0.000205f, 0.000236f, 0.000272f, 0.000296f,
+ 0.000267f, 0.000296f, 0.000397f, 0.000344f, 0.000413f, 0.000395f, 0.000433f, 0.000434f, 0.000504f, 0.000488f, 0.000532f, 0.000550f,
+ 0.000602f, 0.000711f, 0.000675f, 0.000704f, 0.000752f, 0.000817f, 0.000896f, 0.000955f, 0.001009f, 0.001091f, 0.001223f, 0.001271f,
+ 0.001415f, 0.001560f, 0.001721f, 0.001989f, 0.002214f, 0.002508f, 0.002930f, 0.003504f, 0.004208f, 0.005169f, 0.006603f, 0.008606f,
+ 0.011864f, 0.017090f, 0.026367f, 0.043396f, 0.072571f, 0.119751f, 0.630859f, 0.650879f, 0.653809f, 0.656250f, 0.657227f, 0.657227f,
+ 0.000000f, 0.000111f, 0.000104f, 0.000100f, 0.000096f, 0.000094f, 0.000105f, 0.000096f, 0.000101f, 0.000115f, 0.000119f, 0.000155f,
+ 0.000129f, 0.000180f, 0.000186f, 0.000199f, 0.000208f, 0.000214f, 0.000232f, 0.000230f, 0.000237f, 0.000247f, 0.000303f, 0.000276f,
+ 0.000324f, 0.000332f, 0.000381f, 0.000371f, 0.000393f, 0.000428f, 0.000490f, 0.000468f, 0.000512f, 0.000540f, 0.000598f, 0.000670f,
+ 0.000673f, 0.000711f, 0.000767f, 0.000842f, 0.000894f, 0.000985f, 0.001120f, 0.001200f, 0.001416f, 0.001544f, 0.001768f, 0.002052f,
+ 0.002510f, 0.003044f, 0.003796f, 0.005016f, 0.006870f, 0.009918f, 0.015335f, 0.026077f, 0.048004f, 0.088745f, 0.610352f, 0.630859f,
+ 0.634277f, 0.636230f, 0.637207f, 0.638184f, 0.000000f, 0.000104f, 0.000098f, 0.000092f, 0.000087f, 0.000084f, 0.000081f, 0.000078f,
+ 0.000074f, 0.000070f, 0.000073f, 0.000075f, 0.000081f, 0.000081f, 0.000119f, 0.000124f, 0.000129f, 0.000115f, 0.000142f, 0.000169f,
+ 0.000155f, 0.000169f, 0.000172f, 0.000196f, 0.000209f, 0.000211f, 0.000203f, 0.000238f, 0.000245f, 0.000260f, 0.000282f, 0.000281f,
+ 0.000297f, 0.000333f, 0.000343f, 0.000374f, 0.000398f, 0.000428f, 0.000473f, 0.000494f, 0.000534f, 0.000591f, 0.000643f, 0.000708f,
+ 0.000790f, 0.000893f, 0.001040f, 0.001169f, 0.001381f, 0.001676f, 0.002123f, 0.002686f, 0.003658f, 0.005329f, 0.008347f, 0.014244f,
+ 0.027954f, 0.060638f, 0.587891f, 0.609375f, 0.613281f, 0.614746f, 0.616699f, 0.616211f, 0.000110f, 0.000094f, 0.000085f, 0.000079f,
+ 0.000075f, 0.000072f, 0.000069f, 0.000067f, 0.000065f, 0.000063f, 0.000059f, 0.000059f, 0.000054f, 0.000051f, 0.000055f, 0.000051f,
+ 0.000066f, 0.000066f, 0.000078f, 0.000074f, 0.000089f, 0.000091f, 0.000102f, 0.000109f, 0.000114f, 0.000126f, 0.000133f, 0.000130f,
+ 0.000141f, 0.000141f, 0.000156f, 0.000172f, 0.000180f, 0.000179f, 0.000206f, 0.000199f, 0.000214f, 0.000254f, 0.000247f, 0.000282f,
+ 0.000300f, 0.000324f, 0.000349f, 0.000374f, 0.000413f, 0.000459f, 0.000513f, 0.000619f, 0.000711f, 0.000823f, 0.001030f, 0.001269f,
+ 0.001724f, 0.002487f, 0.003948f, 0.007015f, 0.014122f, 0.036346f, 0.565430f, 0.586426f, 0.592285f, 0.592773f, 0.594238f, 0.594727f,
+ 0.000092f, 0.000073f, 0.000067f, 0.000062f, 0.000057f, 0.000055f, 0.000052f, 0.000052f, 0.000049f, 0.000049f, 0.000047f, 0.000046f,
+ 0.000046f, 0.000043f, 0.000041f, 0.000039f, 0.000038f, 0.000036f, 0.000039f, 0.000036f, 0.000039f, 0.000037f, 0.000039f, 0.000047f,
+ 0.000051f, 0.000057f, 0.000059f, 0.000060f, 0.000067f, 0.000071f, 0.000078f, 0.000085f, 0.000087f, 0.000091f, 0.000098f, 0.000095f,
+ 0.000102f, 0.000122f, 0.000122f, 0.000137f, 0.000143f, 0.000145f, 0.000168f, 0.000171f, 0.000197f, 0.000209f, 0.000234f, 0.000264f,
+ 0.000295f, 0.000349f, 0.000418f, 0.000520f, 0.000678f, 0.000958f, 0.001512f, 0.002745f, 0.006092f, 0.017456f, 0.542969f, 0.565430f,
+ 0.568848f, 0.569824f, 0.572266f, 0.572266f, 0.000052f, 0.000042f, 0.000037f, 0.000035f, 0.000033f, 0.000033f, 0.000032f, 0.000031f,
+ 0.000031f, 0.000029f, 0.000030f, 0.000030f, 0.000029f, 0.000028f, 0.000028f, 0.000028f, 0.000028f, 0.000028f, 0.000027f, 0.000026f,
+ 0.000024f, 0.000023f, 0.000022f, 0.000022f, 0.000021f, 0.000020f, 0.000019f, 0.000022f, 0.000020f, 0.000023f, 0.000024f, 0.000026f,
+ 0.000028f, 0.000035f, 0.000037f, 0.000038f, 0.000039f, 0.000043f, 0.000048f, 0.000050f, 0.000053f, 0.000055f, 0.000062f, 0.000059f,
+ 0.000072f, 0.000070f, 0.000087f, 0.000099f, 0.000100f, 0.000119f, 0.000142f, 0.000162f, 0.000217f, 0.000283f, 0.000425f, 0.000760f,
+ 0.001818f, 0.006405f, 0.519043f, 0.541504f, 0.546387f, 0.548828f, 0.549316f, 0.550781f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000004f, 0.000004f, 0.000006f, 0.000006f, 0.000008f, 0.000009f, 0.000009f, 0.000009f, 0.000010f,
+ 0.000010f, 0.000010f, 0.000011f, 0.000011f, 0.000011f, 0.000012f, 0.000012f, 0.000012f, 0.000012f, 0.000013f, 0.000012f, 0.000012f,
+ 0.000011f, 0.000011f, 0.000011f, 0.000010f, 0.000010f, 0.000009f, 0.000009f, 0.000008f, 0.000008f, 0.000008f, 0.000008f, 0.000011f,
+ 0.000011f, 0.000012f, 0.000015f, 0.000016f, 0.000016f, 0.000018f, 0.000018f, 0.000020f, 0.000022f, 0.000024f, 0.000028f, 0.000035f,
+ 0.000036f, 0.000052f, 0.000071f, 0.000117f, 0.000260f, 0.001269f, 0.495605f, 0.518555f, 0.523926f, 0.525879f, 0.526855f, 0.527344f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000003f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f,
+ 0.000002f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000003f, 0.000003f, 0.000005f, 0.000021f, 0.473145f, 0.495605f,
+ 0.500000f, 0.502441f, 0.503418f, 0.503906f,
+ },
+ {
+ 0.045868f, 0.130493f, 0.205322f, 0.272705f, 0.331787f, 0.384521f, 0.431885f, 0.473389f, 0.511719f, 0.545898f, 0.576660f, 0.605469f,
+ 0.631348f, 0.654785f, 0.676758f, 0.696289f, 0.714355f, 0.732422f, 0.749023f, 0.763184f, 0.777832f, 0.790527f, 0.802734f, 0.813477f,
+ 0.824219f, 0.834961f, 0.844238f, 0.853027f, 0.862305f, 0.869629f, 0.877441f, 0.884277f, 0.892090f, 0.898926f, 0.904297f, 0.910645f,
+ 0.916992f, 0.921875f, 0.926758f, 0.931641f, 0.937012f, 0.941406f, 0.945801f, 0.950195f, 0.954102f, 0.958496f, 0.962402f, 0.966309f,
+ 0.969238f, 0.973145f, 0.976074f, 0.979492f, 0.982422f, 0.985352f, 0.988281f, 0.991211f, 0.993652f, 0.996094f, 0.997070f, 0.993164f,
+ 0.990234f, 0.987305f, 0.984375f, 0.981445f, 0.033447f, 0.097717f, 0.160400f, 0.219238f, 0.273438f, 0.323486f, 0.371582f, 0.414062f,
+ 0.454834f, 0.491211f, 0.524414f, 0.555176f, 0.583984f, 0.610840f, 0.635254f, 0.658203f, 0.678223f, 0.697754f, 0.716309f, 0.732422f,
+ 0.749023f, 0.763184f, 0.776855f, 0.790527f, 0.802734f, 0.812988f, 0.824707f, 0.834473f, 0.844238f, 0.853516f, 0.862305f, 0.870117f,
+ 0.877930f, 0.884766f, 0.892090f, 0.897949f, 0.905762f, 0.910645f, 0.917480f, 0.923340f, 0.927734f, 0.933105f, 0.937988f, 0.942871f,
+ 0.947266f, 0.951172f, 0.955566f, 0.960449f, 0.963379f, 0.967285f, 0.970703f, 0.974609f, 0.978027f, 0.981445f, 0.984863f, 0.986816f,
+ 0.989746f, 0.993164f, 0.995605f, 0.992188f, 0.988770f, 0.986328f, 0.983398f, 0.980957f, 0.024796f, 0.075195f, 0.126221f, 0.176025f,
+ 0.224976f, 0.271729f, 0.317383f, 0.359375f, 0.399902f, 0.437744f, 0.472656f, 0.505371f, 0.536133f, 0.565430f, 0.591797f, 0.615723f,
+ 0.639648f, 0.660156f, 0.681152f, 0.699219f, 0.718262f, 0.734375f, 0.749512f, 0.764648f, 0.777832f, 0.791016f, 0.802734f, 0.813965f,
+ 0.825195f, 0.835449f, 0.844727f, 0.854004f, 0.862305f, 0.871094f, 0.878418f, 0.886230f, 0.893555f, 0.900391f, 0.906738f, 0.912598f,
+ 0.917969f, 0.923828f, 0.929688f, 0.935059f, 0.939941f, 0.943848f, 0.949219f, 0.953613f, 0.958008f, 0.961914f, 0.965332f, 0.969238f,
+ 0.972656f, 0.976074f, 0.979492f, 0.982910f, 0.986328f, 0.989258f, 0.993652f, 0.990723f, 0.987793f, 0.985352f, 0.982910f, 0.979980f,
+ 0.019119f, 0.058624f, 0.100220f, 0.142578f, 0.185303f, 0.227417f, 0.269287f, 0.310059f, 0.348877f, 0.385254f, 0.421875f, 0.455566f,
+ 0.489014f, 0.518555f, 0.546875f, 0.574707f, 0.598633f, 0.624023f, 0.645508f, 0.666016f, 0.684082f, 0.702637f, 0.720703f, 0.736816f,
+ 0.751465f, 0.766113f, 0.779785f, 0.792969f, 0.804199f, 0.815918f, 0.826660f, 0.836426f, 0.846191f, 0.855957f, 0.864746f, 0.872559f,
+ 0.880371f, 0.888184f, 0.895508f, 0.902344f, 0.908691f, 0.914062f, 0.919922f, 0.925293f, 0.932129f, 0.936035f, 0.941895f, 0.946289f,
+ 0.951172f, 0.955566f, 0.959473f, 0.963867f, 0.967773f, 0.970703f, 0.975586f, 0.978516f, 0.981934f, 0.985352f, 0.991699f, 0.988770f,
+ 0.986328f, 0.983887f, 0.981445f, 0.979004f, 0.015175f, 0.046997f, 0.080688f, 0.116028f, 0.152466f, 0.189819f, 0.227417f, 0.264404f,
+ 0.301758f, 0.338623f, 0.374268f, 0.407471f, 0.439941f, 0.471924f, 0.501465f, 0.529785f, 0.556641f, 0.582031f, 0.606445f, 0.629395f,
+ 0.649902f, 0.670898f, 0.688965f, 0.708496f, 0.725098f, 0.740723f, 0.755371f, 0.769531f, 0.782715f, 0.795410f, 0.807129f, 0.818848f,
+ 0.829590f, 0.839844f, 0.849121f, 0.857910f, 0.866699f, 0.875488f, 0.882812f, 0.890625f, 0.897461f, 0.904297f, 0.910645f, 0.916992f,
+ 0.922363f, 0.928223f, 0.933594f, 0.938477f, 0.944824f, 0.949707f, 0.953613f, 0.958008f, 0.962402f, 0.966309f, 0.970703f, 0.974121f,
+ 0.977539f, 0.981934f, 0.990234f, 0.987793f, 0.984863f, 0.982910f, 0.980469f, 0.978516f, 0.012215f, 0.038452f, 0.066101f, 0.095825f,
+ 0.126831f, 0.159180f, 0.192749f, 0.226685f, 0.260986f, 0.294922f, 0.328857f, 0.363037f, 0.394531f, 0.426270f, 0.457520f, 0.486572f,
+ 0.514648f, 0.541016f, 0.567871f, 0.590820f, 0.614746f, 0.636230f, 0.657227f, 0.676270f, 0.694336f, 0.711914f, 0.729492f, 0.744141f,
+ 0.759277f, 0.773438f, 0.786621f, 0.798340f, 0.811523f, 0.822266f, 0.833496f, 0.842773f, 0.851562f, 0.861816f, 0.869629f, 0.878418f,
+ 0.885742f, 0.893066f, 0.900879f, 0.907715f, 0.913574f, 0.919922f, 0.925781f, 0.932129f, 0.937012f, 0.942871f, 0.946777f, 0.951660f,
+ 0.957031f, 0.960938f, 0.965332f, 0.969727f, 0.973633f, 0.977051f, 0.988281f, 0.986328f, 0.983887f, 0.981445f, 0.979492f, 0.976562f,
+ 0.009903f, 0.031525f, 0.054626f, 0.078979f, 0.105408f, 0.133789f, 0.162720f, 0.192993f, 0.224976f, 0.256592f, 0.288330f, 0.320312f,
+ 0.352295f, 0.383545f, 0.414062f, 0.443848f, 0.473389f, 0.500488f, 0.526367f, 0.553223f, 0.577637f, 0.600586f, 0.622070f, 0.644043f,
+ 0.664551f, 0.683105f, 0.701660f, 0.718262f, 0.734375f, 0.750000f, 0.764648f, 0.778320f, 0.791016f, 0.802734f, 0.815430f, 0.826172f,
+ 0.836426f, 0.845703f, 0.855957f, 0.864258f, 0.874023f, 0.881348f, 0.889648f, 0.896973f, 0.904297f, 0.911621f, 0.917480f, 0.922852f,
+ 0.929199f, 0.935059f, 0.939941f, 0.944824f, 0.950195f, 0.954590f, 0.959961f, 0.964355f, 0.968262f, 0.972656f, 0.986328f, 0.984375f,
+ 0.981934f, 0.979980f, 0.978027f, 0.975586f, 0.008385f, 0.026154f, 0.045319f, 0.066467f, 0.089111f, 0.113220f, 0.138916f, 0.165405f,
+ 0.192871f, 0.222290f, 0.252197f, 0.281494f, 0.311279f, 0.342285f, 0.372314f, 0.402832f, 0.431641f, 0.459473f, 0.486572f, 0.513672f,
+ 0.539062f, 0.562988f, 0.587402f, 0.609863f, 0.631348f, 0.652344f, 0.671875f, 0.689941f, 0.708008f, 0.724609f, 0.740234f, 0.755371f,
+ 0.768066f, 0.783203f, 0.795410f, 0.808105f, 0.819336f, 0.830078f, 0.840332f, 0.851074f, 0.860352f, 0.869141f, 0.877930f, 0.885742f,
+ 0.893555f, 0.900879f, 0.907715f, 0.915039f, 0.920410f, 0.926758f, 0.933105f, 0.938965f, 0.944336f, 0.949707f, 0.953613f, 0.958984f,
+ 0.962891f, 0.967285f, 0.984375f, 0.982910f, 0.980957f, 0.978516f, 0.976562f, 0.974609f, 0.006992f, 0.022324f, 0.038544f, 0.056396f,
+ 0.075317f, 0.095947f, 0.117981f, 0.141968f, 0.166504f, 0.192627f, 0.219238f, 0.246704f, 0.275879f, 0.304443f, 0.333252f, 0.362305f,
+ 0.390869f, 0.419678f, 0.447266f, 0.474121f, 0.500977f, 0.525879f, 0.551270f, 0.574219f, 0.597656f, 0.620117f, 0.641602f, 0.661133f,
+ 0.680664f, 0.698242f, 0.715332f, 0.731934f, 0.746582f, 0.761230f, 0.775391f, 0.789551f, 0.802246f, 0.813477f, 0.825195f, 0.835938f,
+ 0.846191f, 0.855957f, 0.865723f, 0.873535f, 0.882324f, 0.890625f, 0.898438f, 0.905762f, 0.912598f, 0.918945f, 0.925781f, 0.931641f,
+ 0.937012f, 0.943848f, 0.948730f, 0.954102f, 0.957520f, 0.963379f, 0.981934f, 0.980957f, 0.979004f, 0.977051f, 0.975098f, 0.973145f,
+ 0.006260f, 0.018387f, 0.032684f, 0.047821f, 0.064636f, 0.082153f, 0.101318f, 0.122009f, 0.143921f, 0.166870f, 0.191406f, 0.216187f,
+ 0.243164f, 0.269287f, 0.297119f, 0.324951f, 0.352783f, 0.380859f, 0.408691f, 0.435547f, 0.462402f, 0.489258f, 0.514160f, 0.540039f,
+ 0.563965f, 0.585938f, 0.608398f, 0.629395f, 0.649414f, 0.669434f, 0.689453f, 0.705566f, 0.722656f, 0.739258f, 0.753418f, 0.769043f,
+ 0.783203f, 0.795898f, 0.807617f, 0.819824f, 0.830566f, 0.842285f, 0.852051f, 0.862305f, 0.871094f, 0.878906f, 0.888184f, 0.895996f,
+ 0.902832f, 0.910645f, 0.917480f, 0.924316f, 0.930176f, 0.936523f, 0.942383f, 0.946777f, 0.953613f, 0.958496f, 0.979980f, 0.979004f,
+ 0.977539f, 0.975586f, 0.973633f, 0.972168f, 0.005268f, 0.016418f, 0.028091f, 0.041107f, 0.055420f, 0.070435f, 0.087341f, 0.105347f,
+ 0.124512f, 0.144531f, 0.166260f, 0.189453f, 0.213989f, 0.238037f, 0.263184f, 0.290039f, 0.317139f, 0.344238f, 0.370850f, 0.398438f,
+ 0.425293f, 0.451660f, 0.477539f, 0.503418f, 0.528320f, 0.551270f, 0.576172f, 0.598145f, 0.619629f, 0.640137f, 0.659668f, 0.680176f,
+ 0.697754f, 0.714844f, 0.731934f, 0.748047f, 0.762695f, 0.776367f, 0.790039f, 0.803223f, 0.814453f, 0.827148f, 0.837891f, 0.847656f,
+ 0.858398f, 0.868164f, 0.876953f, 0.885742f, 0.893066f, 0.901855f, 0.908691f, 0.916504f, 0.922852f, 0.929199f, 0.935059f, 0.941895f,
+ 0.947754f, 0.953125f, 0.978027f, 0.977539f, 0.975586f, 0.973633f, 0.971680f, 0.969727f, 0.004372f, 0.013802f, 0.024185f, 0.036011f,
+ 0.047729f, 0.060944f, 0.075684f, 0.090820f, 0.107788f, 0.125488f, 0.144653f, 0.165771f, 0.187012f, 0.210205f, 0.233643f, 0.258545f,
+ 0.283447f, 0.309326f, 0.335449f, 0.362305f, 0.388672f, 0.415771f, 0.441650f, 0.468018f, 0.492920f, 0.518066f, 0.542480f, 0.564941f,
+ 0.587891f, 0.609863f, 0.630859f, 0.651855f, 0.670898f, 0.689453f, 0.707520f, 0.724609f, 0.740723f, 0.755859f, 0.770996f, 0.785156f,
+ 0.799316f, 0.809570f, 0.822754f, 0.834473f, 0.845215f, 0.855469f, 0.865723f, 0.874023f, 0.883301f, 0.892090f, 0.899902f, 0.907715f,
+ 0.915039f, 0.922363f, 0.928711f, 0.935059f, 0.941406f, 0.947266f, 0.975586f, 0.975098f, 0.973633f, 0.971680f, 0.969727f, 0.968262f,
+ 0.003809f, 0.012253f, 0.021240f, 0.030884f, 0.041473f, 0.052887f, 0.065308f, 0.079224f, 0.094177f, 0.109558f, 0.126709f, 0.145142f,
+ 0.163940f, 0.184814f, 0.207397f, 0.229736f, 0.252686f, 0.276855f, 0.302246f, 0.327881f, 0.353271f, 0.380127f, 0.405762f, 0.432129f,
+ 0.457520f, 0.482422f, 0.507324f, 0.531250f, 0.556152f, 0.578125f, 0.600586f, 0.622559f, 0.642578f, 0.662109f, 0.681641f, 0.700195f,
+ 0.716797f, 0.734375f, 0.750000f, 0.766113f, 0.779297f, 0.793457f, 0.807129f, 0.819336f, 0.830078f, 0.842285f, 0.853027f, 0.862793f,
+ 0.872559f, 0.881348f, 0.890625f, 0.899414f, 0.907227f, 0.914551f, 0.920898f, 0.928223f, 0.935059f, 0.941406f, 0.973633f, 0.973145f,
+ 0.971680f, 0.970215f, 0.968262f, 0.966797f, 0.003462f, 0.010796f, 0.018646f, 0.026962f, 0.036377f, 0.046173f, 0.057190f, 0.068665f,
+ 0.081726f, 0.095520f, 0.110962f, 0.127563f, 0.144897f, 0.162476f, 0.182373f, 0.202881f, 0.225342f, 0.248291f, 0.271729f, 0.294922f,
+ 0.320312f, 0.345459f, 0.370850f, 0.397217f, 0.422607f, 0.447998f, 0.473145f, 0.498291f, 0.522461f, 0.546875f, 0.569824f, 0.591797f,
+ 0.614258f, 0.635742f, 0.655273f, 0.674805f, 0.693359f, 0.711426f, 0.729492f, 0.745605f, 0.760742f, 0.775391f, 0.789551f, 0.803223f,
+ 0.816406f, 0.828125f, 0.839844f, 0.850586f, 0.861328f, 0.871094f, 0.880371f, 0.889648f, 0.898438f, 0.906250f, 0.915039f, 0.921875f,
+ 0.928223f, 0.935547f, 0.970703f, 0.970215f, 0.970215f, 0.967773f, 0.966309f, 0.965332f, 0.002872f, 0.009338f, 0.016174f, 0.024231f,
+ 0.031525f, 0.040558f, 0.050140f, 0.060455f, 0.071472f, 0.084167f, 0.097168f, 0.111450f, 0.127197f, 0.143433f, 0.160889f, 0.179565f,
+ 0.199463f, 0.220825f, 0.242554f, 0.265625f, 0.288818f, 0.312744f, 0.338135f, 0.362793f, 0.387939f, 0.414307f, 0.439453f, 0.464355f,
+ 0.489014f, 0.514648f, 0.537598f, 0.561523f, 0.583984f, 0.606445f, 0.627930f, 0.648926f, 0.667480f, 0.687988f, 0.705566f, 0.723633f,
+ 0.740234f, 0.756348f, 0.771484f, 0.786621f, 0.799805f, 0.812012f, 0.825195f, 0.836426f, 0.849121f, 0.859375f, 0.870605f, 0.879883f,
+ 0.888672f, 0.897461f, 0.905762f, 0.915039f, 0.921387f, 0.928711f, 0.967773f, 0.969238f, 0.966797f, 0.966797f, 0.964355f, 0.963379f,
+ 0.002750f, 0.008202f, 0.014519f, 0.021301f, 0.028183f, 0.035828f, 0.044342f, 0.053375f, 0.063354f, 0.074219f, 0.085876f, 0.098083f,
+ 0.111938f, 0.126343f, 0.142212f, 0.158936f, 0.177124f, 0.196411f, 0.216553f, 0.237427f, 0.260010f, 0.282715f, 0.306641f, 0.330811f,
+ 0.355957f, 0.381104f, 0.405518f, 0.431152f, 0.456543f, 0.480957f, 0.504883f, 0.529785f, 0.553223f, 0.577148f, 0.599121f, 0.620605f,
+ 0.642090f, 0.662598f, 0.682617f, 0.701172f, 0.718750f, 0.735352f, 0.751953f, 0.768066f, 0.783691f, 0.796875f, 0.810547f, 0.822754f,
+ 0.835938f, 0.847656f, 0.858398f, 0.869141f, 0.879395f, 0.888672f, 0.897949f, 0.906250f, 0.914551f, 0.922363f, 0.965820f, 0.966797f,
+ 0.965820f, 0.963867f, 0.963379f, 0.961426f, 0.002264f, 0.007446f, 0.012741f, 0.018494f, 0.024536f, 0.031769f, 0.039154f, 0.047424f,
+ 0.056122f, 0.065308f, 0.075623f, 0.087219f, 0.098755f, 0.111328f, 0.125854f, 0.140869f, 0.157349f, 0.174805f, 0.193115f, 0.212402f,
+ 0.233643f, 0.254883f, 0.276855f, 0.300293f, 0.324463f, 0.348389f, 0.374023f, 0.398193f, 0.423340f, 0.448242f, 0.473877f, 0.498291f,
+ 0.521973f, 0.545898f, 0.569824f, 0.592773f, 0.614258f, 0.635742f, 0.657227f, 0.676270f, 0.695801f, 0.714844f, 0.731445f, 0.749512f,
+ 0.765137f, 0.779785f, 0.793945f, 0.808594f, 0.821777f, 0.833496f, 0.846191f, 0.858398f, 0.868652f, 0.879395f, 0.888672f, 0.897949f,
+ 0.906738f, 0.916016f, 0.962402f, 0.963867f, 0.962891f, 0.961914f, 0.960938f, 0.958984f, 0.002377f, 0.006668f, 0.011467f, 0.016693f,
+ 0.021820f, 0.028091f, 0.034485f, 0.041748f, 0.049347f, 0.057678f, 0.066589f, 0.076538f, 0.086975f, 0.098816f, 0.111816f, 0.125366f,
+ 0.139404f, 0.155151f, 0.171875f, 0.190186f, 0.208496f, 0.228760f, 0.250244f, 0.271973f, 0.294189f, 0.317871f, 0.341797f, 0.365479f,
+ 0.391357f, 0.415771f, 0.440430f, 0.466797f, 0.491699f, 0.515625f, 0.539551f, 0.563477f, 0.585938f, 0.608887f, 0.630371f, 0.651855f,
+ 0.672363f, 0.692383f, 0.710449f, 0.729492f, 0.745605f, 0.762695f, 0.778320f, 0.792480f, 0.807129f, 0.820801f, 0.833984f, 0.846680f,
+ 0.857910f, 0.869141f, 0.879395f, 0.889648f, 0.899414f, 0.907715f, 0.959473f, 0.961426f, 0.960449f, 0.959961f, 0.958496f, 0.957031f,
+ 0.002062f, 0.006180f, 0.010201f, 0.015053f, 0.019531f, 0.025116f, 0.030960f, 0.037292f, 0.043915f, 0.051117f, 0.059570f, 0.067749f,
+ 0.076843f, 0.087708f, 0.099060f, 0.110352f, 0.123413f, 0.138062f, 0.153198f, 0.169067f, 0.186768f, 0.204956f, 0.224487f, 0.244873f,
+ 0.265625f, 0.288330f, 0.311768f, 0.335205f, 0.359863f, 0.384521f, 0.409668f, 0.434082f, 0.459717f, 0.483887f, 0.508789f, 0.533203f,
+ 0.557617f, 0.580566f, 0.603516f, 0.626465f, 0.646484f, 0.667969f, 0.687500f, 0.708008f, 0.726074f, 0.744141f, 0.760742f, 0.776367f,
+ 0.791504f, 0.806641f, 0.820312f, 0.833496f, 0.846191f, 0.858398f, 0.869629f, 0.879883f, 0.890625f, 0.900879f, 0.956543f, 0.958496f,
+ 0.958008f, 0.956543f, 0.955566f, 0.954102f, 0.001774f, 0.005459f, 0.009155f, 0.013290f, 0.017807f, 0.022537f, 0.027527f, 0.033081f,
+ 0.038818f, 0.045380f, 0.052643f, 0.060516f, 0.068420f, 0.077942f, 0.087952f, 0.098572f, 0.109863f, 0.122925f, 0.136230f, 0.150146f,
+ 0.166382f, 0.183105f, 0.201172f, 0.219482f, 0.240112f, 0.261230f, 0.283203f, 0.305664f, 0.329590f, 0.353027f, 0.377930f, 0.402344f,
+ 0.427490f, 0.453369f, 0.478516f, 0.502930f, 0.527832f, 0.552246f, 0.575684f, 0.598145f, 0.621094f, 0.643555f, 0.664551f, 0.685547f,
+ 0.704590f, 0.723633f, 0.742188f, 0.759277f, 0.775879f, 0.791016f, 0.806152f, 0.820801f, 0.833496f, 0.847168f, 0.859375f, 0.870605f,
+ 0.881348f, 0.893066f, 0.953125f, 0.956055f, 0.955566f, 0.954102f, 0.953125f, 0.951660f, 0.001655f, 0.004757f, 0.008308f, 0.011993f,
+ 0.015808f, 0.020187f, 0.024780f, 0.029434f, 0.034851f, 0.040741f, 0.046997f, 0.053650f, 0.061096f, 0.069397f, 0.078064f, 0.087280f,
+ 0.097351f, 0.108887f, 0.121033f, 0.134277f, 0.148560f, 0.163330f, 0.180054f, 0.197144f, 0.215332f, 0.235718f, 0.255859f, 0.277588f,
+ 0.300049f, 0.323730f, 0.347656f, 0.371826f, 0.396729f, 0.422607f, 0.447021f, 0.472168f, 0.497803f, 0.521973f, 0.547363f, 0.571289f,
+ 0.594238f, 0.618164f, 0.640137f, 0.662109f, 0.682617f, 0.702637f, 0.722168f, 0.739746f, 0.758301f, 0.774902f, 0.790527f, 0.806641f,
+ 0.820801f, 0.834961f, 0.848633f, 0.860352f, 0.872559f, 0.883789f, 0.949707f, 0.953125f, 0.952148f, 0.951172f, 0.950684f, 0.948730f,
+ 0.001418f, 0.004456f, 0.007584f, 0.010803f, 0.014450f, 0.018005f, 0.022186f, 0.026398f, 0.031342f, 0.036224f, 0.041687f, 0.048126f,
+ 0.054382f, 0.061676f, 0.069641f, 0.077759f, 0.086914f, 0.097168f, 0.107910f, 0.119263f, 0.132446f, 0.145752f, 0.161011f, 0.176758f,
+ 0.193726f, 0.211914f, 0.231201f, 0.251709f, 0.272705f, 0.294922f, 0.318604f, 0.342041f, 0.366455f, 0.390869f, 0.416992f, 0.441895f,
+ 0.467285f, 0.493164f, 0.517578f, 0.541992f, 0.566895f, 0.590820f, 0.614746f, 0.637207f, 0.660156f, 0.681152f, 0.701172f, 0.720703f,
+ 0.739746f, 0.758301f, 0.775391f, 0.791992f, 0.807617f, 0.821289f, 0.836426f, 0.850586f, 0.863281f, 0.874512f, 0.946777f, 0.949707f,
+ 0.949707f, 0.948730f, 0.947266f, 0.946289f, 0.001213f, 0.003864f, 0.006721f, 0.009796f, 0.012932f, 0.016037f, 0.020218f, 0.024231f,
+ 0.028275f, 0.032379f, 0.037567f, 0.042603f, 0.048584f, 0.054993f, 0.061798f, 0.069519f, 0.077637f, 0.086182f, 0.095703f, 0.106323f,
+ 0.117676f, 0.130127f, 0.143555f, 0.158203f, 0.173462f, 0.189941f, 0.207886f, 0.226807f, 0.247192f, 0.267822f, 0.290527f, 0.312500f,
+ 0.336670f, 0.360352f, 0.385742f, 0.410889f, 0.437256f, 0.462646f, 0.488281f, 0.513184f, 0.539062f, 0.563477f, 0.588379f, 0.612305f,
+ 0.636230f, 0.657715f, 0.679199f, 0.700195f, 0.720703f, 0.740234f, 0.758301f, 0.775879f, 0.793945f, 0.809082f, 0.824219f, 0.838867f,
+ 0.852539f, 0.865234f, 0.942871f, 0.946777f, 0.946777f, 0.945312f, 0.944824f, 0.943359f, 0.001063f, 0.003754f, 0.005909f, 0.008789f,
+ 0.011780f, 0.014671f, 0.017792f, 0.021378f, 0.025238f, 0.029221f, 0.033417f, 0.038300f, 0.043488f, 0.048828f, 0.054779f, 0.061554f,
+ 0.068604f, 0.076721f, 0.085388f, 0.094482f, 0.104614f, 0.115845f, 0.128296f, 0.141113f, 0.155029f, 0.170044f, 0.186401f, 0.204224f,
+ 0.222778f, 0.242188f, 0.263916f, 0.285156f, 0.308350f, 0.331787f, 0.355957f, 0.381348f, 0.407227f, 0.432617f, 0.459229f, 0.484619f,
+ 0.509277f, 0.536133f, 0.560547f, 0.585938f, 0.609863f, 0.633301f, 0.657715f, 0.678711f, 0.699707f, 0.721191f, 0.740723f, 0.759277f,
+ 0.777344f, 0.794922f, 0.811035f, 0.826660f, 0.841797f, 0.855469f, 0.939453f, 0.943359f, 0.943359f, 0.942871f, 0.941895f, 0.940918f,
+ 0.001175f, 0.003069f, 0.005558f, 0.007912f, 0.010712f, 0.013199f, 0.016235f, 0.019547f, 0.022659f, 0.026138f, 0.030151f, 0.034424f,
+ 0.038940f, 0.044067f, 0.049255f, 0.054993f, 0.061493f, 0.068359f, 0.075928f, 0.084290f, 0.093262f, 0.103760f, 0.114319f, 0.126099f,
+ 0.138550f, 0.152466f, 0.167114f, 0.183472f, 0.200439f, 0.219238f, 0.239014f, 0.259277f, 0.281250f, 0.303711f, 0.327148f, 0.351807f,
+ 0.376709f, 0.402344f, 0.428955f, 0.453857f, 0.480713f, 0.507324f, 0.533203f, 0.558594f, 0.583984f, 0.609375f, 0.633301f, 0.656738f,
+ 0.678711f, 0.700195f, 0.722168f, 0.742188f, 0.761719f, 0.780273f, 0.797852f, 0.813477f, 0.830078f, 0.845703f, 0.935547f, 0.939453f,
+ 0.939453f, 0.938965f, 0.937988f, 0.937012f, 0.001089f, 0.002945f, 0.005066f, 0.007225f, 0.009575f, 0.012016f, 0.014656f, 0.017288f,
+ 0.020142f, 0.023712f, 0.026764f, 0.030640f, 0.034637f, 0.039490f, 0.043854f, 0.048706f, 0.054688f, 0.060913f, 0.067871f, 0.075256f,
+ 0.083191f, 0.092163f, 0.101868f, 0.111938f, 0.123657f, 0.136108f, 0.149658f, 0.164185f, 0.179932f, 0.196777f, 0.215454f, 0.234375f,
+ 0.255371f, 0.276611f, 0.299805f, 0.323486f, 0.347656f, 0.373047f, 0.398682f, 0.425293f, 0.451172f, 0.477783f, 0.504883f, 0.530762f,
+ 0.557617f, 0.583008f, 0.607910f, 0.632812f, 0.657227f, 0.680664f, 0.702637f, 0.724121f, 0.743652f, 0.764160f, 0.783691f, 0.800781f,
+ 0.818848f, 0.833984f, 0.930664f, 0.936035f, 0.936035f, 0.935547f, 0.934570f, 0.933594f, 0.000847f, 0.002800f, 0.004562f, 0.006786f,
+ 0.008804f, 0.011017f, 0.013145f, 0.015640f, 0.018509f, 0.021255f, 0.024277f, 0.027603f, 0.030991f, 0.035248f, 0.039642f, 0.043854f,
+ 0.048798f, 0.054504f, 0.060516f, 0.067017f, 0.073914f, 0.082092f, 0.090515f, 0.099854f, 0.109863f, 0.121521f, 0.133545f, 0.146851f,
+ 0.161133f, 0.176514f, 0.192993f, 0.211426f, 0.230957f, 0.251465f, 0.272705f, 0.295410f, 0.319092f, 0.343994f, 0.369385f, 0.395020f,
+ 0.421631f, 0.448242f, 0.475342f, 0.501953f, 0.529785f, 0.556152f, 0.582031f, 0.608887f, 0.633789f, 0.658203f, 0.681152f, 0.704590f,
+ 0.726074f, 0.748535f, 0.768555f, 0.787109f, 0.804199f, 0.822754f, 0.926758f, 0.931641f, 0.932129f, 0.931641f, 0.931152f, 0.930176f,
+ 0.001035f, 0.002598f, 0.004147f, 0.006062f, 0.007942f, 0.009933f, 0.012405f, 0.014565f, 0.016174f, 0.019135f, 0.021988f, 0.024811f,
+ 0.028259f, 0.031616f, 0.035065f, 0.039429f, 0.043884f, 0.048615f, 0.053833f, 0.059723f, 0.065796f, 0.072693f, 0.080383f, 0.088745f,
+ 0.098206f, 0.107727f, 0.119080f, 0.130981f, 0.143677f, 0.157959f, 0.173218f, 0.189941f, 0.207642f, 0.226929f, 0.247437f, 0.269043f,
+ 0.291748f, 0.315674f, 0.340576f, 0.366211f, 0.392578f, 0.419434f, 0.446533f, 0.473877f, 0.502441f, 0.528320f, 0.556152f, 0.583008f,
+ 0.609375f, 0.635254f, 0.660156f, 0.684082f, 0.706543f, 0.729980f, 0.751953f, 0.771973f, 0.792480f, 0.810547f, 0.922363f, 0.927734f,
+ 0.928223f, 0.928223f, 0.927246f, 0.926758f, 0.000775f, 0.002325f, 0.003843f, 0.005573f, 0.007397f, 0.009163f, 0.010857f, 0.012939f,
+ 0.015312f, 0.017273f, 0.019684f, 0.022537f, 0.025070f, 0.028183f, 0.031616f, 0.035461f, 0.038940f, 0.043671f, 0.048096f, 0.053131f,
+ 0.058411f, 0.064941f, 0.071777f, 0.078857f, 0.086731f, 0.096130f, 0.105835f, 0.116760f, 0.128296f, 0.140747f, 0.154907f, 0.170410f,
+ 0.186646f, 0.204834f, 0.223633f, 0.243896f, 0.265625f, 0.288330f, 0.312012f, 0.337402f, 0.363037f, 0.389648f, 0.417480f, 0.444824f,
+ 0.473633f, 0.500000f, 0.529297f, 0.556641f, 0.583984f, 0.610840f, 0.638184f, 0.662598f, 0.687988f, 0.711914f, 0.734375f, 0.755859f,
+ 0.777832f, 0.798828f, 0.916992f, 0.922852f, 0.923828f, 0.923828f, 0.923340f, 0.922363f, 0.000617f, 0.002234f, 0.003510f, 0.005035f,
+ 0.006397f, 0.008156f, 0.010033f, 0.011665f, 0.013481f, 0.015717f, 0.017700f, 0.020004f, 0.022766f, 0.025391f, 0.028214f, 0.031586f,
+ 0.035217f, 0.038757f, 0.042999f, 0.047668f, 0.052368f, 0.057434f, 0.063538f, 0.070190f, 0.077698f, 0.085449f, 0.094299f, 0.103394f,
+ 0.113953f, 0.125610f, 0.137817f, 0.151855f, 0.167236f, 0.183228f, 0.200806f, 0.219971f, 0.240479f, 0.262451f, 0.285645f, 0.309570f,
+ 0.334961f, 0.360596f, 0.387939f, 0.416016f, 0.444092f, 0.473145f, 0.501465f, 0.529785f, 0.558105f, 0.585938f, 0.614258f, 0.640137f,
+ 0.666992f, 0.692383f, 0.716797f, 0.739746f, 0.763184f, 0.784180f, 0.912109f, 0.918457f, 0.919434f, 0.919434f, 0.918457f, 0.917969f,
+ 0.000665f, 0.002039f, 0.003386f, 0.004520f, 0.005989f, 0.007511f, 0.009262f, 0.010902f, 0.012314f, 0.014320f, 0.015869f, 0.018127f,
+ 0.020248f, 0.022476f, 0.025284f, 0.028122f, 0.030991f, 0.034668f, 0.038239f, 0.042206f, 0.046539f, 0.051361f, 0.056610f, 0.062347f,
+ 0.068604f, 0.075623f, 0.083313f, 0.092041f, 0.101379f, 0.111572f, 0.122986f, 0.135132f, 0.148926f, 0.164062f, 0.180054f, 0.197510f,
+ 0.216797f, 0.237183f, 0.259521f, 0.282227f, 0.307129f, 0.332764f, 0.358887f, 0.386475f, 0.415527f, 0.443604f, 0.473389f, 0.501465f,
+ 0.530762f, 0.560059f, 0.588867f, 0.617676f, 0.645020f, 0.671387f, 0.698242f, 0.722656f, 0.746094f, 0.770020f, 0.906738f, 0.913574f,
+ 0.915039f, 0.914551f, 0.914062f, 0.914062f, 0.000661f, 0.001754f, 0.002831f, 0.004066f, 0.005333f, 0.006668f, 0.008286f, 0.009773f,
+ 0.011124f, 0.012794f, 0.014320f, 0.016357f, 0.018036f, 0.020386f, 0.022766f, 0.025192f, 0.027924f, 0.030807f, 0.034027f, 0.037628f,
+ 0.041321f, 0.045349f, 0.050262f, 0.055328f, 0.060699f, 0.066833f, 0.073669f, 0.081360f, 0.089600f, 0.099060f, 0.108826f, 0.119995f,
+ 0.132324f, 0.145874f, 0.160889f, 0.176880f, 0.194702f, 0.213379f, 0.234497f, 0.256104f, 0.280029f, 0.304688f, 0.330811f, 0.358154f,
+ 0.385986f, 0.415039f, 0.444092f, 0.474609f, 0.503418f, 0.534180f, 0.563965f, 0.592773f, 0.621094f, 0.650391f, 0.678223f, 0.704590f,
+ 0.730469f, 0.754883f, 0.901855f, 0.908691f, 0.910156f, 0.909668f, 0.909668f, 0.908691f, 0.000653f, 0.001667f, 0.002666f, 0.003887f,
+ 0.004986f, 0.006359f, 0.007202f, 0.008751f, 0.010300f, 0.011757f, 0.012939f, 0.014595f, 0.016281f, 0.018234f, 0.020142f, 0.022415f,
+ 0.025101f, 0.027466f, 0.030182f, 0.033539f, 0.036865f, 0.040680f, 0.044342f, 0.048798f, 0.053619f, 0.059479f, 0.065491f, 0.071716f,
+ 0.079285f, 0.087341f, 0.096497f, 0.106445f, 0.117615f, 0.129395f, 0.142822f, 0.157959f, 0.174194f, 0.192139f, 0.210938f, 0.231567f,
+ 0.253906f, 0.277832f, 0.302979f, 0.329590f, 0.357422f, 0.385986f, 0.415283f, 0.446045f, 0.475830f, 0.506348f, 0.537109f, 0.567871f,
+ 0.599121f, 0.628418f, 0.657227f, 0.685547f, 0.712891f, 0.739746f, 0.895508f, 0.902344f, 0.904297f, 0.904785f, 0.904297f, 0.904297f,
+ 0.000372f, 0.001397f, 0.002384f, 0.003529f, 0.004509f, 0.005505f, 0.007015f, 0.008026f, 0.009201f, 0.010292f, 0.011536f, 0.013130f,
+ 0.014915f, 0.016266f, 0.018387f, 0.020218f, 0.022034f, 0.024399f, 0.026901f, 0.029617f, 0.032623f, 0.035950f, 0.039032f, 0.043030f,
+ 0.047577f, 0.052612f, 0.057556f, 0.063477f, 0.070007f, 0.077209f, 0.085083f, 0.094177f, 0.103821f, 0.114563f, 0.126709f, 0.140015f,
+ 0.154785f, 0.171143f, 0.188477f, 0.208252f, 0.229004f, 0.251709f, 0.275879f, 0.302002f, 0.328613f, 0.356445f, 0.385986f, 0.416504f,
+ 0.447510f, 0.478760f, 0.510254f, 0.542480f, 0.573730f, 0.604980f, 0.635742f, 0.665527f, 0.694336f, 0.722656f, 0.887695f, 0.897949f,
+ 0.898926f, 0.899414f, 0.897949f, 0.898438f, 0.000661f, 0.001222f, 0.002275f, 0.003313f, 0.004181f, 0.005119f, 0.006275f, 0.007126f,
+ 0.007988f, 0.009354f, 0.010300f, 0.012062f, 0.013313f, 0.014786f, 0.016251f, 0.018021f, 0.019516f, 0.021896f, 0.024017f, 0.026428f,
+ 0.029022f, 0.031799f, 0.034698f, 0.038422f, 0.042236f, 0.046265f, 0.050598f, 0.055786f, 0.061493f, 0.067871f, 0.074951f, 0.082458f,
+ 0.091187f, 0.101135f, 0.111694f, 0.123779f, 0.137207f, 0.151978f, 0.167969f, 0.186157f, 0.205688f, 0.226929f, 0.249756f, 0.274658f,
+ 0.301025f, 0.328613f, 0.357178f, 0.387207f, 0.418457f, 0.450195f, 0.482422f, 0.516113f, 0.548340f, 0.580566f, 0.612305f, 0.644043f,
+ 0.674805f, 0.705566f, 0.882812f, 0.890625f, 0.892578f, 0.893066f, 0.892578f, 0.893066f, 0.000379f, 0.001211f, 0.002066f, 0.003040f,
+ 0.003834f, 0.004616f, 0.005608f, 0.006550f, 0.007347f, 0.008408f, 0.009529f, 0.010452f, 0.011940f, 0.013039f, 0.014313f, 0.015961f,
+ 0.017746f, 0.019180f, 0.021210f, 0.023239f, 0.025482f, 0.028030f, 0.030640f, 0.033661f, 0.036987f, 0.040466f, 0.044617f, 0.048828f,
+ 0.053894f, 0.059235f, 0.065674f, 0.072632f, 0.079956f, 0.089050f, 0.098267f, 0.109009f, 0.120789f, 0.134521f, 0.148926f, 0.165405f,
+ 0.183228f, 0.202881f, 0.224731f, 0.248779f, 0.273193f, 0.300049f, 0.329346f, 0.358887f, 0.390381f, 0.421387f, 0.454590f, 0.488770f,
+ 0.521484f, 0.555176f, 0.588379f, 0.621582f, 0.654785f, 0.686523f, 0.875488f, 0.885254f, 0.886719f, 0.886230f, 0.886719f, 0.886230f,
+ 0.000282f, 0.001126f, 0.002010f, 0.002661f, 0.003340f, 0.004269f, 0.005192f, 0.005711f, 0.006638f, 0.007278f, 0.008377f, 0.009483f,
+ 0.010567f, 0.011742f, 0.012871f, 0.014061f, 0.015480f, 0.017242f, 0.018799f, 0.020584f, 0.022461f, 0.024490f, 0.027100f, 0.029434f,
+ 0.032532f, 0.035706f, 0.038971f, 0.042969f, 0.047241f, 0.052094f, 0.057373f, 0.063232f, 0.070007f, 0.077637f, 0.086243f, 0.095764f,
+ 0.106323f, 0.118164f, 0.131470f, 0.146118f, 0.162720f, 0.181030f, 0.200928f, 0.223022f, 0.247070f, 0.272705f, 0.300537f, 0.330322f,
+ 0.360107f, 0.393066f, 0.426270f, 0.459473f, 0.494629f, 0.529297f, 0.564453f, 0.598633f, 0.633789f, 0.666504f, 0.868652f, 0.878418f,
+ 0.879395f, 0.880371f, 0.879883f, 0.879395f, 0.000340f, 0.000963f, 0.001826f, 0.002459f, 0.003307f, 0.003847f, 0.004719f, 0.004936f,
+ 0.005802f, 0.006695f, 0.007748f, 0.008522f, 0.009506f, 0.010376f, 0.011383f, 0.012787f, 0.013901f, 0.015182f, 0.016663f, 0.018051f,
+ 0.019821f, 0.021759f, 0.023590f, 0.025818f, 0.028519f, 0.030975f, 0.034210f, 0.037811f, 0.040802f, 0.045349f, 0.050201f, 0.055298f,
+ 0.061310f, 0.067688f, 0.074768f, 0.083557f, 0.092590f, 0.103149f, 0.115479f, 0.128906f, 0.142944f, 0.160278f, 0.178345f, 0.198975f,
+ 0.221802f, 0.246094f, 0.272949f, 0.301514f, 0.331543f, 0.363525f, 0.396729f, 0.430908f, 0.466553f, 0.501953f, 0.538086f, 0.574707f,
+ 0.610840f, 0.646973f, 0.860352f, 0.870605f, 0.873047f, 0.873047f, 0.873535f, 0.872559f, 0.000225f, 0.001021f, 0.001653f, 0.002302f,
+ 0.002827f, 0.003448f, 0.003937f, 0.004486f, 0.004986f, 0.006252f, 0.007000f, 0.007416f, 0.008224f, 0.009300f, 0.009972f, 0.011322f,
+ 0.012115f, 0.013428f, 0.014557f, 0.015991f, 0.017532f, 0.018982f, 0.020706f, 0.022781f, 0.024567f, 0.027161f, 0.029770f, 0.032623f,
+ 0.035828f, 0.039551f, 0.043030f, 0.047852f, 0.052795f, 0.058716f, 0.065125f, 0.072266f, 0.080566f, 0.089661f, 0.100403f, 0.112854f,
+ 0.125732f, 0.140991f, 0.157349f, 0.176514f, 0.197510f, 0.220581f, 0.245850f, 0.273438f, 0.302979f, 0.334717f, 0.367676f, 0.401855f,
+ 0.437256f, 0.474609f, 0.512695f, 0.549316f, 0.588379f, 0.625000f, 0.853027f, 0.863281f, 0.866211f, 0.866211f, 0.866699f, 0.866211f,
+ 0.000324f, 0.000845f, 0.001534f, 0.002172f, 0.002474f, 0.003115f, 0.003824f, 0.003937f, 0.004848f, 0.005417f, 0.006222f, 0.006760f,
+ 0.007446f, 0.008186f, 0.009102f, 0.009888f, 0.010620f, 0.011551f, 0.012878f, 0.013954f, 0.015106f, 0.016495f, 0.018143f, 0.019669f,
+ 0.021713f, 0.023468f, 0.025818f, 0.028183f, 0.031021f, 0.033783f, 0.037445f, 0.041534f, 0.045532f, 0.050598f, 0.056152f, 0.062500f,
+ 0.069580f, 0.077698f, 0.086914f, 0.097717f, 0.108948f, 0.123047f, 0.138184f, 0.155273f, 0.174438f, 0.196167f, 0.219604f, 0.246094f,
+ 0.274902f, 0.305420f, 0.338379f, 0.372314f, 0.408936f, 0.445801f, 0.484131f, 0.523438f, 0.562988f, 0.604492f, 0.843262f, 0.856445f,
+ 0.857422f, 0.857910f, 0.858398f, 0.858398f, 0.000331f, 0.000944f, 0.001288f, 0.001833f, 0.002388f, 0.002769f, 0.003216f, 0.003664f,
+ 0.004276f, 0.004822f, 0.005173f, 0.005951f, 0.006531f, 0.007156f, 0.007896f, 0.008438f, 0.009430f, 0.010117f, 0.011208f, 0.012253f,
+ 0.012970f, 0.014297f, 0.015572f, 0.017059f, 0.018692f, 0.020264f, 0.022125f, 0.024323f, 0.026474f, 0.029343f, 0.032288f, 0.035461f,
+ 0.039062f, 0.043335f, 0.047821f, 0.053558f, 0.059509f, 0.067078f, 0.074341f, 0.083862f, 0.094360f, 0.106323f, 0.120117f, 0.135254f,
+ 0.153442f, 0.172852f, 0.195190f, 0.220337f, 0.246948f, 0.276611f, 0.308594f, 0.343262f, 0.379150f, 0.416992f, 0.455811f, 0.496582f,
+ 0.537598f, 0.579590f, 0.834473f, 0.847656f, 0.850098f, 0.850098f, 0.849609f, 0.850098f, 0.000316f, 0.000824f, 0.001088f, 0.001693f,
+ 0.002062f, 0.002403f, 0.003027f, 0.003460f, 0.003712f, 0.004166f, 0.004765f, 0.005138f, 0.005871f, 0.006218f, 0.006924f, 0.007431f,
+ 0.008255f, 0.008850f, 0.009781f, 0.010590f, 0.011391f, 0.012367f, 0.013474f, 0.014709f, 0.015823f, 0.017685f, 0.018982f, 0.020844f,
+ 0.022629f, 0.025070f, 0.027496f, 0.030380f, 0.033447f, 0.037140f, 0.041168f, 0.045654f, 0.050720f, 0.057251f, 0.063965f, 0.071777f,
+ 0.080811f, 0.091248f, 0.103638f, 0.117126f, 0.133179f, 0.151001f, 0.171631f, 0.194580f, 0.220337f, 0.248413f, 0.279785f, 0.313965f,
+ 0.349365f, 0.386963f, 0.426514f, 0.468262f, 0.510742f, 0.555176f, 0.825684f, 0.838379f, 0.839844f, 0.841309f, 0.841309f, 0.841309f,
+ 0.000210f, 0.000717f, 0.001084f, 0.001454f, 0.001882f, 0.002096f, 0.002468f, 0.002996f, 0.003395f, 0.003632f, 0.004066f, 0.004467f,
+ 0.005020f, 0.005569f, 0.005917f, 0.006474f, 0.006958f, 0.007576f, 0.008453f, 0.009140f, 0.010002f, 0.010689f, 0.011520f, 0.012596f,
+ 0.013695f, 0.014938f, 0.016220f, 0.017593f, 0.019424f, 0.020996f, 0.023331f, 0.025696f, 0.028427f, 0.031067f, 0.034668f, 0.038422f,
+ 0.042908f, 0.048096f, 0.054016f, 0.060699f, 0.068909f, 0.077515f, 0.088501f, 0.100464f, 0.114624f, 0.130615f, 0.149048f, 0.170654f,
+ 0.194214f, 0.222046f, 0.251465f, 0.283936f, 0.319580f, 0.357422f, 0.397461f, 0.440186f, 0.484375f, 0.528320f, 0.814941f, 0.828613f,
+ 0.830078f, 0.832031f, 0.831543f, 0.833008f, 0.000234f, 0.000576f, 0.000939f, 0.001362f, 0.001481f, 0.001999f, 0.002228f, 0.002714f,
+ 0.002846f, 0.003218f, 0.003555f, 0.003933f, 0.004356f, 0.004787f, 0.005169f, 0.005604f, 0.006145f, 0.006554f, 0.007275f, 0.007675f,
+ 0.008293f, 0.009201f, 0.009979f, 0.010651f, 0.011497f, 0.012527f, 0.013893f, 0.014771f, 0.016373f, 0.017975f, 0.019455f, 0.021683f,
+ 0.023895f, 0.026077f, 0.029114f, 0.032257f, 0.036072f, 0.040405f, 0.045197f, 0.050903f, 0.057770f, 0.065613f, 0.074524f, 0.085388f,
+ 0.097656f, 0.111694f, 0.128540f, 0.147949f, 0.170166f, 0.195435f, 0.223389f, 0.255127f, 0.289551f, 0.327393f, 0.367432f, 0.410400f,
+ 0.455078f, 0.502441f, 0.804199f, 0.818848f, 0.821289f, 0.822266f, 0.822754f, 0.822266f, 0.000213f, 0.000506f, 0.000756f, 0.001184f,
+ 0.001396f, 0.001697f, 0.002010f, 0.002474f, 0.002569f, 0.002918f, 0.003090f, 0.003496f, 0.003855f, 0.004139f, 0.004478f, 0.004852f,
+ 0.005253f, 0.005665f, 0.006100f, 0.006638f, 0.007080f, 0.007744f, 0.008293f, 0.009132f, 0.009750f, 0.010658f, 0.011536f, 0.012413f,
+ 0.013779f, 0.014908f, 0.016510f, 0.017990f, 0.019623f, 0.021637f, 0.024109f, 0.026718f, 0.029922f, 0.033539f, 0.037567f, 0.042572f,
+ 0.048279f, 0.054413f, 0.062042f, 0.071472f, 0.081909f, 0.094604f, 0.109436f, 0.127075f, 0.146484f, 0.170044f, 0.196533f, 0.226929f,
+ 0.260254f, 0.296875f, 0.337402f, 0.380615f, 0.426025f, 0.475342f, 0.792969f, 0.807617f, 0.811035f, 0.811523f, 0.812012f, 0.813477f,
+ 0.000119f, 0.000422f, 0.000883f, 0.001027f, 0.001189f, 0.001604f, 0.001783f, 0.001913f, 0.002228f, 0.002522f, 0.002645f, 0.003086f,
+ 0.003199f, 0.003534f, 0.003790f, 0.004105f, 0.004421f, 0.004902f, 0.005283f, 0.005589f, 0.006039f, 0.006401f, 0.007088f, 0.007519f,
+ 0.008217f, 0.008812f, 0.009712f, 0.010460f, 0.011337f, 0.012413f, 0.013596f, 0.014687f, 0.016159f, 0.018051f, 0.019913f, 0.022018f,
+ 0.024551f, 0.027359f, 0.030792f, 0.035065f, 0.039703f, 0.044983f, 0.051392f, 0.059204f, 0.068176f, 0.079102f, 0.092041f, 0.106873f,
+ 0.125000f, 0.145874f, 0.170532f, 0.198975f, 0.230835f, 0.267090f, 0.306641f, 0.349854f, 0.395508f, 0.445801f, 0.780762f, 0.796875f,
+ 0.799805f, 0.801270f, 0.801270f, 0.801270f, 0.000227f, 0.000521f, 0.000698f, 0.000817f, 0.001236f, 0.001359f, 0.001540f, 0.001619f,
+ 0.001940f, 0.002089f, 0.002430f, 0.002552f, 0.002655f, 0.002932f, 0.003241f, 0.003532f, 0.003841f, 0.004120f, 0.004292f, 0.004761f,
+ 0.005051f, 0.005459f, 0.005886f, 0.006290f, 0.006821f, 0.007320f, 0.007889f, 0.008652f, 0.009399f, 0.010063f, 0.010887f, 0.012215f,
+ 0.013206f, 0.014648f, 0.016037f, 0.017853f, 0.019958f, 0.022491f, 0.024994f, 0.028091f, 0.032135f, 0.036530f, 0.041809f, 0.048096f,
+ 0.055908f, 0.064941f, 0.076050f, 0.089050f, 0.104980f, 0.123596f, 0.146118f, 0.172363f, 0.203003f, 0.237183f, 0.276123f, 0.318359f,
+ 0.365479f, 0.416504f, 0.768555f, 0.784668f, 0.788086f, 0.789551f, 0.790039f, 0.790039f, 0.000000f, 0.000448f, 0.000566f, 0.000688f,
+ 0.000985f, 0.001144f, 0.001305f, 0.001437f, 0.001622f, 0.001731f, 0.001989f, 0.002174f, 0.002338f, 0.002552f, 0.002739f, 0.002924f,
+ 0.003239f, 0.003405f, 0.003628f, 0.003933f, 0.004200f, 0.004463f, 0.004948f, 0.005245f, 0.005615f, 0.006138f, 0.006699f, 0.006989f,
+ 0.007793f, 0.008247f, 0.008980f, 0.009918f, 0.010857f, 0.011795f, 0.013016f, 0.014244f, 0.015930f, 0.017868f, 0.019882f, 0.022659f,
+ 0.025543f, 0.029160f, 0.033417f, 0.038635f, 0.044983f, 0.052338f, 0.061859f, 0.072693f, 0.086487f, 0.102966f, 0.122864f, 0.146973f,
+ 0.175049f, 0.207764f, 0.245605f, 0.287842f, 0.334229f, 0.385986f, 0.755371f, 0.771973f, 0.775879f, 0.777344f, 0.777832f, 0.778809f,
+ 0.000000f, 0.000303f, 0.000512f, 0.000752f, 0.000828f, 0.001036f, 0.001184f, 0.001292f, 0.001281f, 0.001460f, 0.001717f, 0.001843f,
+ 0.001955f, 0.002060f, 0.002317f, 0.002476f, 0.002542f, 0.002869f, 0.003088f, 0.003313f, 0.003559f, 0.003693f, 0.004082f, 0.004318f,
+ 0.004696f, 0.005070f, 0.005245f, 0.005741f, 0.006126f, 0.006771f, 0.007298f, 0.007828f, 0.008583f, 0.009338f, 0.010246f, 0.011528f,
+ 0.012794f, 0.014160f, 0.015717f, 0.017853f, 0.019958f, 0.022995f, 0.026291f, 0.030533f, 0.035553f, 0.041565f, 0.048981f, 0.058350f,
+ 0.069824f, 0.083801f, 0.101685f, 0.122437f, 0.148438f, 0.178833f, 0.215454f, 0.256104f, 0.302490f, 0.354736f, 0.741699f, 0.758789f,
+ 0.762695f, 0.763672f, 0.764648f, 0.765625f, 0.000097f, 0.000306f, 0.000370f, 0.000618f, 0.000713f, 0.000810f, 0.000953f, 0.000920f,
+ 0.001167f, 0.001238f, 0.001406f, 0.001483f, 0.001540f, 0.001794f, 0.001970f, 0.002028f, 0.002264f, 0.002354f, 0.002459f, 0.002636f,
+ 0.002827f, 0.003096f, 0.003342f, 0.003544f, 0.003881f, 0.003948f, 0.004459f, 0.004742f, 0.005005f, 0.005394f, 0.005867f, 0.006374f,
+ 0.006901f, 0.007507f, 0.008202f, 0.008881f, 0.010017f, 0.010986f, 0.012451f, 0.013809f, 0.015511f, 0.017776f, 0.020325f, 0.023453f,
+ 0.027390f, 0.032349f, 0.038330f, 0.045624f, 0.055359f, 0.067078f, 0.082275f, 0.101013f, 0.123657f, 0.151611f, 0.185791f, 0.225342f,
+ 0.270752f, 0.322754f, 0.727051f, 0.746094f, 0.749512f, 0.750977f, 0.751953f, 0.751953f, 0.000228f, 0.000211f, 0.000504f, 0.000443f,
+ 0.000523f, 0.000672f, 0.000703f, 0.000902f, 0.000975f, 0.001010f, 0.001122f, 0.001178f, 0.001257f, 0.001424f, 0.001575f, 0.001631f,
+ 0.001789f, 0.001910f, 0.002090f, 0.002144f, 0.002411f, 0.002520f, 0.002703f, 0.002827f, 0.003010f, 0.003195f, 0.003403f, 0.003750f,
+ 0.003960f, 0.004276f, 0.004780f, 0.005005f, 0.005432f, 0.005981f, 0.006428f, 0.007015f, 0.007812f, 0.008537f, 0.009415f, 0.010658f,
+ 0.011963f, 0.013443f, 0.015396f, 0.017731f, 0.020782f, 0.024414f, 0.029083f, 0.034912f, 0.042572f, 0.052216f, 0.064392f, 0.080017f,
+ 0.100220f, 0.126099f, 0.157227f, 0.194946f, 0.239136f, 0.290283f, 0.712402f, 0.731445f, 0.734863f, 0.736816f, 0.737305f, 0.737793f,
+ 0.000211f, 0.000198f, 0.000195f, 0.000413f, 0.000517f, 0.000531f, 0.000586f, 0.000736f, 0.000769f, 0.000809f, 0.000970f, 0.001007f,
+ 0.001067f, 0.001134f, 0.001211f, 0.001348f, 0.001341f, 0.001534f, 0.001617f, 0.001734f, 0.001942f, 0.002010f, 0.002110f, 0.002268f,
+ 0.002523f, 0.002607f, 0.002829f, 0.003004f, 0.003113f, 0.003403f, 0.003681f, 0.003990f, 0.004257f, 0.004601f, 0.005039f, 0.005444f,
+ 0.005993f, 0.006561f, 0.007278f, 0.008026f, 0.009041f, 0.010124f, 0.011513f, 0.013222f, 0.015320f, 0.017914f, 0.021408f, 0.025833f,
+ 0.031433f, 0.039429f, 0.049255f, 0.062286f, 0.079102f, 0.101135f, 0.130005f, 0.164917f, 0.207764f, 0.258057f, 0.696289f, 0.716309f,
+ 0.720215f, 0.722168f, 0.722656f, 0.723145f, 0.000000f, 0.000080f, 0.000286f, 0.000374f, 0.000434f, 0.000457f, 0.000460f, 0.000568f,
+ 0.000610f, 0.000669f, 0.000715f, 0.000773f, 0.000877f, 0.000918f, 0.001030f, 0.000998f, 0.001148f, 0.001134f, 0.001305f, 0.001369f,
+ 0.001410f, 0.001534f, 0.001688f, 0.001780f, 0.001899f, 0.001963f, 0.002081f, 0.002199f, 0.002470f, 0.002563f, 0.002758f, 0.003006f,
+ 0.003273f, 0.003531f, 0.003817f, 0.004093f, 0.004532f, 0.004993f, 0.005463f, 0.006027f, 0.006657f, 0.007492f, 0.008537f, 0.009689f,
+ 0.011246f, 0.012985f, 0.015518f, 0.018539f, 0.022827f, 0.028534f, 0.036072f, 0.046234f, 0.060028f, 0.078918f, 0.103943f, 0.136353f,
+ 0.176514f, 0.225952f, 0.679199f, 0.699707f, 0.703613f, 0.706055f, 0.706543f, 0.708008f, 0.000089f, 0.000176f, 0.000232f, 0.000342f,
+ 0.000317f, 0.000319f, 0.000420f, 0.000382f, 0.000494f, 0.000515f, 0.000612f, 0.000650f, 0.000671f, 0.000701f, 0.000732f, 0.000859f,
+ 0.000888f, 0.000923f, 0.001002f, 0.001048f, 0.001170f, 0.001234f, 0.001292f, 0.001426f, 0.001414f, 0.001476f, 0.001622f, 0.001723f,
+ 0.001892f, 0.001976f, 0.002237f, 0.002239f, 0.002476f, 0.002645f, 0.002817f, 0.003092f, 0.003355f, 0.003626f, 0.003979f, 0.004459f,
+ 0.004948f, 0.005527f, 0.006256f, 0.007027f, 0.008026f, 0.009270f, 0.010918f, 0.013184f, 0.016098f, 0.019913f, 0.025253f, 0.033112f,
+ 0.043762f, 0.059113f, 0.079956f, 0.109009f, 0.146729f, 0.193726f, 0.660645f, 0.682129f, 0.688477f, 0.690430f, 0.689941f, 0.690918f,
+ 0.000000f, 0.000063f, 0.000194f, 0.000281f, 0.000187f, 0.000325f, 0.000278f, 0.000272f, 0.000386f, 0.000466f, 0.000462f, 0.000510f,
+ 0.000519f, 0.000587f, 0.000613f, 0.000603f, 0.000671f, 0.000709f, 0.000744f, 0.000808f, 0.000858f, 0.000913f, 0.000963f, 0.000999f,
+ 0.001062f, 0.001106f, 0.001262f, 0.001266f, 0.001431f, 0.001562f, 0.001672f, 0.001693f, 0.001810f, 0.001976f, 0.002090f, 0.002289f,
+ 0.002422f, 0.002666f, 0.002916f, 0.003166f, 0.003513f, 0.003862f, 0.004318f, 0.004936f, 0.005646f, 0.006493f, 0.007626f, 0.009048f,
+ 0.010826f, 0.013519f, 0.017166f, 0.022476f, 0.030258f, 0.041687f, 0.058807f, 0.083435f, 0.117737f, 0.162598f, 0.644043f, 0.666504f,
+ 0.670410f, 0.673340f, 0.674316f, 0.675293f, 0.000000f, 0.000117f, 0.000112f, 0.000178f, 0.000216f, 0.000222f, 0.000271f, 0.000229f,
+ 0.000280f, 0.000283f, 0.000326f, 0.000376f, 0.000376f, 0.000443f, 0.000456f, 0.000470f, 0.000499f, 0.000507f, 0.000547f, 0.000566f,
+ 0.000613f, 0.000667f, 0.000692f, 0.000749f, 0.000773f, 0.000803f, 0.000917f, 0.000924f, 0.000997f, 0.001055f, 0.001096f, 0.001236f,
+ 0.001261f, 0.001376f, 0.001466f, 0.001693f, 0.001695f, 0.001826f, 0.002077f, 0.002226f, 0.002411f, 0.002686f, 0.002985f, 0.003368f,
+ 0.003801f, 0.004353f, 0.005131f, 0.005974f, 0.007370f, 0.008842f, 0.011345f, 0.014717f, 0.019699f, 0.027893f, 0.040619f, 0.060730f,
+ 0.090454f, 0.132080f, 0.625488f, 0.649414f, 0.653809f, 0.655273f, 0.656250f, 0.658203f, 0.000000f, 0.000000f, 0.000108f, 0.000121f,
+ 0.000136f, 0.000154f, 0.000158f, 0.000191f, 0.000203f, 0.000213f, 0.000270f, 0.000223f, 0.000232f, 0.000270f, 0.000296f, 0.000342f,
+ 0.000324f, 0.000352f, 0.000453f, 0.000407f, 0.000450f, 0.000459f, 0.000486f, 0.000524f, 0.000545f, 0.000565f, 0.000630f, 0.000620f,
+ 0.000678f, 0.000803f, 0.000763f, 0.000813f, 0.000860f, 0.000937f, 0.001035f, 0.001101f, 0.001141f, 0.001254f, 0.001399f, 0.001449f,
+ 0.001616f, 0.001779f, 0.001942f, 0.002220f, 0.002493f, 0.002808f, 0.003258f, 0.003895f, 0.004623f, 0.005714f, 0.007111f, 0.009178f,
+ 0.012367f, 0.017319f, 0.025879f, 0.040741f, 0.065552f, 0.103577f, 0.606934f, 0.630371f, 0.635254f, 0.637695f, 0.638672f, 0.639648f,
+ 0.000000f, 0.000109f, 0.000102f, 0.000098f, 0.000105f, 0.000110f, 0.000113f, 0.000122f, 0.000117f, 0.000132f, 0.000147f, 0.000189f,
+ 0.000163f, 0.000212f, 0.000213f, 0.000222f, 0.000224f, 0.000233f, 0.000258f, 0.000262f, 0.000274f, 0.000305f, 0.000340f, 0.000329f,
+ 0.000358f, 0.000376f, 0.000445f, 0.000418f, 0.000447f, 0.000478f, 0.000546f, 0.000530f, 0.000594f, 0.000626f, 0.000679f, 0.000745f,
+ 0.000763f, 0.000804f, 0.000869f, 0.000952f, 0.001025f, 0.001119f, 0.001254f, 0.001359f, 0.001584f, 0.001728f, 0.001993f, 0.002295f,
+ 0.002790f, 0.003298f, 0.004135f, 0.005363f, 0.007267f, 0.010277f, 0.015350f, 0.024994f, 0.043518f, 0.076599f, 0.585938f, 0.611816f,
+ 0.616211f, 0.619141f, 0.619629f, 0.620605f, 0.000000f, 0.000102f, 0.000095f, 0.000090f, 0.000085f, 0.000081f, 0.000078f, 0.000073f,
+ 0.000075f, 0.000079f, 0.000087f, 0.000092f, 0.000095f, 0.000094f, 0.000133f, 0.000143f, 0.000152f, 0.000155f, 0.000161f, 0.000195f,
+ 0.000174f, 0.000183f, 0.000188f, 0.000216f, 0.000233f, 0.000241f, 0.000241f, 0.000257f, 0.000269f, 0.000302f, 0.000325f, 0.000321f,
+ 0.000350f, 0.000363f, 0.000405f, 0.000426f, 0.000456f, 0.000486f, 0.000539f, 0.000560f, 0.000614f, 0.000671f, 0.000722f, 0.000811f,
+ 0.000891f, 0.000989f, 0.001162f, 0.001312f, 0.001545f, 0.001863f, 0.002340f, 0.002920f, 0.003963f, 0.005615f, 0.008499f, 0.013931f,
+ 0.025833f, 0.052094f, 0.566406f, 0.591797f, 0.597168f, 0.599609f, 0.601074f, 0.601562f, 0.000110f, 0.000092f, 0.000084f, 0.000077f,
+ 0.000073f, 0.000070f, 0.000067f, 0.000064f, 0.000061f, 0.000058f, 0.000055f, 0.000064f, 0.000051f, 0.000054f, 0.000071f, 0.000059f,
+ 0.000082f, 0.000081f, 0.000090f, 0.000087f, 0.000099f, 0.000103f, 0.000127f, 0.000131f, 0.000135f, 0.000139f, 0.000142f, 0.000143f,
+ 0.000156f, 0.000162f, 0.000173f, 0.000194f, 0.000206f, 0.000201f, 0.000233f, 0.000225f, 0.000246f, 0.000294f, 0.000279f, 0.000313f,
+ 0.000333f, 0.000356f, 0.000395f, 0.000432f, 0.000459f, 0.000511f, 0.000577f, 0.000664f, 0.000770f, 0.000916f, 0.001114f, 0.001400f,
+ 0.001881f, 0.002665f, 0.004093f, 0.006966f, 0.013290f, 0.031525f, 0.545410f, 0.571777f, 0.577637f, 0.579102f, 0.580566f, 0.581055f,
+ 0.000093f, 0.000073f, 0.000066f, 0.000061f, 0.000056f, 0.000054f, 0.000051f, 0.000050f, 0.000048f, 0.000047f, 0.000045f, 0.000044f,
+ 0.000042f, 0.000040f, 0.000038f, 0.000036f, 0.000039f, 0.000033f, 0.000041f, 0.000040f, 0.000046f, 0.000048f, 0.000051f, 0.000057f,
+ 0.000060f, 0.000066f, 0.000062f, 0.000067f, 0.000080f, 0.000085f, 0.000088f, 0.000092f, 0.000092f, 0.000097f, 0.000109f, 0.000109f,
+ 0.000117f, 0.000132f, 0.000134f, 0.000147f, 0.000154f, 0.000156f, 0.000188f, 0.000197f, 0.000219f, 0.000234f, 0.000266f, 0.000286f,
+ 0.000335f, 0.000397f, 0.000472f, 0.000566f, 0.000751f, 0.001039f, 0.001626f, 0.002834f, 0.005909f, 0.015411f, 0.524414f, 0.551270f,
+ 0.557129f, 0.559570f, 0.561035f, 0.561523f, 0.000060f, 0.000046f, 0.000039f, 0.000037f, 0.000034f, 0.000034f, 0.000032f, 0.000032f,
+ 0.000031f, 0.000029f, 0.000029f, 0.000029f, 0.000028f, 0.000028f, 0.000028f, 0.000027f, 0.000026f, 0.000025f, 0.000024f, 0.000023f,
+ 0.000022f, 0.000021f, 0.000020f, 0.000021f, 0.000020f, 0.000018f, 0.000018f, 0.000023f, 0.000024f, 0.000028f, 0.000032f, 0.000033f,
+ 0.000032f, 0.000038f, 0.000039f, 0.000043f, 0.000046f, 0.000050f, 0.000052f, 0.000053f, 0.000057f, 0.000067f, 0.000073f, 0.000068f,
+ 0.000076f, 0.000083f, 0.000097f, 0.000110f, 0.000116f, 0.000127f, 0.000157f, 0.000185f, 0.000246f, 0.000319f, 0.000466f, 0.000810f,
+ 0.001841f, 0.005795f, 0.503418f, 0.531250f, 0.536621f, 0.539062f, 0.540039f, 0.540527f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000004f, 0.000005f, 0.000005f, 0.000008f, 0.000008f, 0.000009f, 0.000009f, 0.000010f, 0.000010f, 0.000010f, 0.000010f, 0.000011f,
+ 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000012f, 0.000012f, 0.000012f, 0.000012f, 0.000012f, 0.000012f, 0.000011f, 0.000011f,
+ 0.000010f, 0.000010f, 0.000009f, 0.000009f, 0.000009f, 0.000008f, 0.000008f, 0.000008f, 0.000009f, 0.000009f, 0.000010f, 0.000012f,
+ 0.000013f, 0.000014f, 0.000015f, 0.000017f, 0.000020f, 0.000021f, 0.000018f, 0.000023f, 0.000023f, 0.000025f, 0.000030f, 0.000038f,
+ 0.000043f, 0.000059f, 0.000079f, 0.000131f, 0.000279f, 0.001210f, 0.481934f, 0.510254f, 0.516113f, 0.518555f, 0.520020f, 0.520508f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f,
+ 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000003f, 0.000004f, 0.000006f, 0.000022f, 0.460449f, 0.489258f,
+ 0.495850f, 0.498291f, 0.499512f, 0.500000f,
+ },
+ {
+ 0.038544f, 0.111450f, 0.177368f, 0.237061f, 0.290771f, 0.339600f, 0.384277f, 0.425293f, 0.462402f, 0.497070f, 0.527344f, 0.556152f,
+ 0.583496f, 0.607910f, 0.630859f, 0.652344f, 0.672852f, 0.690918f, 0.708496f, 0.724609f, 0.740723f, 0.754883f, 0.768066f, 0.780273f,
+ 0.792480f, 0.803711f, 0.815430f, 0.825684f, 0.835449f, 0.844727f, 0.853516f, 0.861816f, 0.870117f, 0.877930f, 0.885254f, 0.892578f,
+ 0.899414f, 0.905762f, 0.912109f, 0.918945f, 0.923828f, 0.928711f, 0.934082f, 0.939941f, 0.944824f, 0.949707f, 0.953613f, 0.958496f,
+ 0.962402f, 0.967285f, 0.971191f, 0.974609f, 0.979004f, 0.982422f, 0.985352f, 0.989258f, 0.992188f, 0.996094f, 0.996094f, 0.990723f,
+ 0.986328f, 0.982422f, 0.978516f, 0.975098f, 0.029068f, 0.087219f, 0.142578f, 0.195190f, 0.244629f, 0.291016f, 0.334717f, 0.375000f,
+ 0.412842f, 0.446533f, 0.481201f, 0.511230f, 0.539062f, 0.565918f, 0.590820f, 0.614258f, 0.636719f, 0.656250f, 0.675293f, 0.693359f,
+ 0.710449f, 0.726562f, 0.741699f, 0.755371f, 0.769043f, 0.781738f, 0.793457f, 0.805176f, 0.815918f, 0.826660f, 0.835938f, 0.845703f,
+ 0.854980f, 0.862793f, 0.871582f, 0.879395f, 0.885742f, 0.894531f, 0.900879f, 0.907227f, 0.913086f, 0.919434f, 0.925293f, 0.931152f,
+ 0.936523f, 0.941406f, 0.946777f, 0.951172f, 0.956055f, 0.960449f, 0.964355f, 0.968750f, 0.972656f, 0.976562f, 0.980469f, 0.984375f,
+ 0.987793f, 0.991211f, 0.994141f, 0.989258f, 0.984863f, 0.981445f, 0.977539f, 0.974121f, 0.023346f, 0.069641f, 0.115601f, 0.160767f,
+ 0.205078f, 0.248047f, 0.289062f, 0.328125f, 0.365723f, 0.401367f, 0.435059f, 0.466309f, 0.495361f, 0.523926f, 0.550781f, 0.574707f,
+ 0.597168f, 0.620117f, 0.641113f, 0.660156f, 0.679688f, 0.696777f, 0.713379f, 0.728516f, 0.743652f, 0.757324f, 0.770996f, 0.784180f,
+ 0.795410f, 0.806641f, 0.817383f, 0.828125f, 0.837891f, 0.847168f, 0.855957f, 0.864258f, 0.873047f, 0.880859f, 0.888672f, 0.895996f,
+ 0.902832f, 0.909668f, 0.915039f, 0.921875f, 0.927246f, 0.934082f, 0.937988f, 0.943848f, 0.948242f, 0.953613f, 0.958496f, 0.962402f,
+ 0.967285f, 0.971191f, 0.975098f, 0.979492f, 0.983398f, 0.985840f, 0.992188f, 0.987305f, 0.983398f, 0.979980f, 0.977051f, 0.973633f,
+ 0.018600f, 0.056366f, 0.094299f, 0.133545f, 0.172729f, 0.211670f, 0.249756f, 0.285889f, 0.322021f, 0.356934f, 0.390869f, 0.421875f,
+ 0.452148f, 0.481201f, 0.509277f, 0.535156f, 0.560059f, 0.583496f, 0.605957f, 0.626465f, 0.647949f, 0.665527f, 0.684570f, 0.700684f,
+ 0.717285f, 0.731934f, 0.746582f, 0.760254f, 0.773926f, 0.786621f, 0.799316f, 0.809082f, 0.820312f, 0.830566f, 0.840332f, 0.850098f,
+ 0.858887f, 0.867188f, 0.875000f, 0.883789f, 0.890625f, 0.898926f, 0.904297f, 0.912109f, 0.916992f, 0.924316f, 0.930176f, 0.935547f,
+ 0.941406f, 0.945801f, 0.951172f, 0.956055f, 0.960938f, 0.964844f, 0.969727f, 0.974609f, 0.978516f, 0.981934f, 0.989746f, 0.985840f,
+ 0.981934f, 0.978516f, 0.975586f, 0.972168f, 0.015068f, 0.046143f, 0.077881f, 0.111816f, 0.145264f, 0.179688f, 0.214600f, 0.249023f,
+ 0.282715f, 0.316406f, 0.348389f, 0.380615f, 0.411133f, 0.440430f, 0.468018f, 0.494873f, 0.520508f, 0.546387f, 0.568848f, 0.591309f,
+ 0.613281f, 0.634277f, 0.653809f, 0.670898f, 0.688477f, 0.706055f, 0.721191f, 0.736328f, 0.751465f, 0.764648f, 0.776855f, 0.789551f,
+ 0.801270f, 0.812500f, 0.823730f, 0.833496f, 0.843262f, 0.853027f, 0.861328f, 0.869629f, 0.878418f, 0.885742f, 0.893555f, 0.900391f,
+ 0.908203f, 0.914551f, 0.921387f, 0.927246f, 0.932617f, 0.938965f, 0.943848f, 0.949219f, 0.953613f, 0.959473f, 0.963867f, 0.968262f,
+ 0.972656f, 0.977051f, 0.987305f, 0.983887f, 0.980957f, 0.977051f, 0.974121f, 0.970703f, 0.012444f, 0.037933f, 0.065613f, 0.093811f,
+ 0.123474f, 0.153809f, 0.185059f, 0.215820f, 0.247559f, 0.279297f, 0.310547f, 0.341309f, 0.370361f, 0.399658f, 0.428467f, 0.457031f,
+ 0.482910f, 0.507812f, 0.533203f, 0.556152f, 0.579590f, 0.600098f, 0.621094f, 0.641113f, 0.659668f, 0.676270f, 0.695312f, 0.710449f,
+ 0.726074f, 0.740723f, 0.756348f, 0.769043f, 0.780762f, 0.794434f, 0.805176f, 0.816895f, 0.827637f, 0.837891f, 0.847168f, 0.855957f,
+ 0.865723f, 0.873535f, 0.882324f, 0.889648f, 0.897949f, 0.904297f, 0.911133f, 0.917480f, 0.924316f, 0.930176f, 0.936523f, 0.941895f,
+ 0.947266f, 0.952637f, 0.958008f, 0.962891f, 0.967285f, 0.971680f, 0.984863f, 0.981934f, 0.978516f, 0.975586f, 0.972656f, 0.969238f,
+ 0.010353f, 0.032043f, 0.055359f, 0.079529f, 0.104980f, 0.131836f, 0.159424f, 0.187866f, 0.216431f, 0.245239f, 0.275146f, 0.304199f,
+ 0.333496f, 0.362061f, 0.390869f, 0.417969f, 0.445068f, 0.471191f, 0.496582f, 0.520508f, 0.543457f, 0.566895f, 0.588867f, 0.608398f,
+ 0.628906f, 0.648438f, 0.666992f, 0.684570f, 0.701660f, 0.716797f, 0.732422f, 0.746582f, 0.760254f, 0.773438f, 0.786133f, 0.798340f,
+ 0.810547f, 0.821777f, 0.832520f, 0.842773f, 0.851074f, 0.860352f, 0.869629f, 0.878906f, 0.886230f, 0.894043f, 0.901855f, 0.908691f,
+ 0.915527f, 0.922363f, 0.928223f, 0.935059f, 0.939941f, 0.945312f, 0.950684f, 0.956055f, 0.962402f, 0.966797f, 0.982910f, 0.979980f,
+ 0.977051f, 0.973633f, 0.970703f, 0.968262f, 0.008598f, 0.027328f, 0.046417f, 0.067871f, 0.089905f, 0.113220f, 0.137695f, 0.163330f,
+ 0.189087f, 0.216064f, 0.243164f, 0.270752f, 0.298340f, 0.326416f, 0.354004f, 0.381348f, 0.407715f, 0.434082f, 0.460205f, 0.484863f,
+ 0.508789f, 0.532227f, 0.555176f, 0.577637f, 0.598145f, 0.618652f, 0.637695f, 0.657227f, 0.674805f, 0.691406f, 0.708008f, 0.723633f,
+ 0.738770f, 0.751953f, 0.766113f, 0.779785f, 0.791992f, 0.804199f, 0.815918f, 0.825684f, 0.836914f, 0.846680f, 0.856934f, 0.866211f,
+ 0.874512f, 0.882324f, 0.890625f, 0.898438f, 0.905273f, 0.913086f, 0.919922f, 0.926758f, 0.933105f, 0.938477f, 0.944824f, 0.951172f,
+ 0.955566f, 0.960938f, 0.980469f, 0.978027f, 0.974609f, 0.972168f, 0.969238f, 0.966797f, 0.007561f, 0.023315f, 0.040344f, 0.058228f,
+ 0.077148f, 0.097534f, 0.119995f, 0.142212f, 0.165649f, 0.190063f, 0.214722f, 0.240601f, 0.266846f, 0.293457f, 0.319824f, 0.346924f,
+ 0.372314f, 0.398438f, 0.424561f, 0.449463f, 0.474609f, 0.498535f, 0.521973f, 0.544434f, 0.566895f, 0.587402f, 0.608398f, 0.628418f,
+ 0.645996f, 0.665039f, 0.683105f, 0.699219f, 0.716309f, 0.731445f, 0.745117f, 0.760254f, 0.772949f, 0.786133f, 0.799316f, 0.809570f,
+ 0.820801f, 0.832031f, 0.843262f, 0.852051f, 0.861816f, 0.871094f, 0.880371f, 0.887695f, 0.895996f, 0.904297f, 0.911133f, 0.917969f,
+ 0.924805f, 0.931641f, 0.937012f, 0.943848f, 0.949707f, 0.954590f, 0.978027f, 0.976074f, 0.973145f, 0.970215f, 0.967773f, 0.965332f,
+ 0.006416f, 0.020065f, 0.034943f, 0.050537f, 0.067078f, 0.084900f, 0.104065f, 0.123962f, 0.145264f, 0.166748f, 0.189575f, 0.213501f,
+ 0.237305f, 0.262451f, 0.288574f, 0.313477f, 0.338623f, 0.364502f, 0.389893f, 0.414551f, 0.440186f, 0.464600f, 0.487549f, 0.510742f,
+ 0.534668f, 0.556641f, 0.578613f, 0.598145f, 0.618652f, 0.637207f, 0.655273f, 0.674805f, 0.690430f, 0.707031f, 0.724121f, 0.739258f,
+ 0.752930f, 0.767090f, 0.779785f, 0.792969f, 0.805176f, 0.816895f, 0.827637f, 0.838379f, 0.849121f, 0.858398f, 0.868652f, 0.876465f,
+ 0.885742f, 0.894043f, 0.901855f, 0.909180f, 0.916992f, 0.923828f, 0.930176f, 0.937012f, 0.943359f, 0.949707f, 0.975586f, 0.973633f,
+ 0.971191f, 0.968262f, 0.965820f, 0.963379f, 0.005802f, 0.017502f, 0.030045f, 0.043823f, 0.058014f, 0.074280f, 0.090759f, 0.108459f,
+ 0.127197f, 0.146484f, 0.167725f, 0.189087f, 0.211304f, 0.234497f, 0.258301f, 0.282471f, 0.307373f, 0.331299f, 0.356689f, 0.381104f,
+ 0.405762f, 0.430420f, 0.455078f, 0.478516f, 0.502441f, 0.524414f, 0.545898f, 0.568359f, 0.588867f, 0.608887f, 0.628906f, 0.646973f,
+ 0.665527f, 0.684082f, 0.701172f, 0.715820f, 0.731934f, 0.746582f, 0.760742f, 0.774414f, 0.787598f, 0.800781f, 0.812500f, 0.823730f,
+ 0.834961f, 0.845703f, 0.855469f, 0.865234f, 0.874512f, 0.883789f, 0.892090f, 0.899902f, 0.908203f, 0.916016f, 0.922852f, 0.930176f,
+ 0.936523f, 0.942871f, 0.972656f, 0.971191f, 0.968750f, 0.966309f, 0.963867f, 0.961426f, 0.004734f, 0.014984f, 0.026169f, 0.038177f,
+ 0.051208f, 0.065186f, 0.079468f, 0.095276f, 0.111633f, 0.129639f, 0.148071f, 0.167969f, 0.188599f, 0.208984f, 0.231689f, 0.254639f,
+ 0.277832f, 0.301025f, 0.325439f, 0.349854f, 0.373779f, 0.397705f, 0.422607f, 0.446045f, 0.469727f, 0.492676f, 0.514648f, 0.537598f,
+ 0.559570f, 0.580078f, 0.600586f, 0.620117f, 0.639648f, 0.658203f, 0.676758f, 0.692871f, 0.708984f, 0.725586f, 0.740723f, 0.755859f,
+ 0.769531f, 0.783691f, 0.796875f, 0.808594f, 0.820801f, 0.832520f, 0.842285f, 0.852539f, 0.862793f, 0.872070f, 0.881836f, 0.890137f,
+ 0.898926f, 0.906738f, 0.915039f, 0.922363f, 0.929199f, 0.936523f, 0.969727f, 0.968750f, 0.966797f, 0.964355f, 0.961914f, 0.959473f,
+ 0.004055f, 0.013588f, 0.023132f, 0.033722f, 0.044891f, 0.057343f, 0.069763f, 0.083923f, 0.098389f, 0.114441f, 0.131226f, 0.148682f,
+ 0.167603f, 0.186768f, 0.207031f, 0.228516f, 0.250732f, 0.272949f, 0.295410f, 0.318604f, 0.342285f, 0.365967f, 0.390381f, 0.413574f,
+ 0.437744f, 0.460938f, 0.484131f, 0.506348f, 0.528320f, 0.550781f, 0.572266f, 0.592773f, 0.613281f, 0.632812f, 0.651367f, 0.669922f,
+ 0.687500f, 0.704102f, 0.720215f, 0.735840f, 0.751465f, 0.764160f, 0.778809f, 0.792480f, 0.803711f, 0.816895f, 0.829102f, 0.840332f,
+ 0.850586f, 0.860352f, 0.870605f, 0.880371f, 0.889648f, 0.897949f, 0.905762f, 0.914551f, 0.922363f, 0.929199f, 0.967285f, 0.966797f,
+ 0.964844f, 0.961426f, 0.959473f, 0.958008f, 0.003611f, 0.011971f, 0.020401f, 0.030029f, 0.039185f, 0.050415f, 0.061737f, 0.074341f,
+ 0.086975f, 0.101074f, 0.115845f, 0.131958f, 0.148682f, 0.166626f, 0.185059f, 0.205200f, 0.224854f, 0.245483f, 0.267334f, 0.290771f,
+ 0.312988f, 0.335449f, 0.359619f, 0.382080f, 0.406250f, 0.429443f, 0.452881f, 0.475830f, 0.498779f, 0.520996f, 0.542480f, 0.563477f,
+ 0.584473f, 0.604980f, 0.625977f, 0.643555f, 0.663086f, 0.681152f, 0.698242f, 0.714355f, 0.729980f, 0.746582f, 0.760742f, 0.774902f,
+ 0.788086f, 0.801758f, 0.814941f, 0.826660f, 0.838867f, 0.848633f, 0.859863f, 0.869141f, 0.879395f, 0.889160f, 0.897949f, 0.906250f,
+ 0.914551f, 0.922363f, 0.963867f, 0.964355f, 0.961914f, 0.959961f, 0.957520f, 0.955078f, 0.003393f, 0.010361f, 0.018494f, 0.026337f,
+ 0.035187f, 0.044556f, 0.054596f, 0.065186f, 0.077515f, 0.089783f, 0.102783f, 0.117249f, 0.132446f, 0.148071f, 0.165649f, 0.183838f,
+ 0.202026f, 0.221313f, 0.241943f, 0.262939f, 0.285156f, 0.307129f, 0.329102f, 0.352539f, 0.375977f, 0.398438f, 0.421875f, 0.445312f,
+ 0.468750f, 0.490723f, 0.512695f, 0.534668f, 0.556641f, 0.577637f, 0.598633f, 0.619141f, 0.637695f, 0.656738f, 0.674805f, 0.692383f,
+ 0.709473f, 0.726074f, 0.742188f, 0.756836f, 0.771973f, 0.786133f, 0.799316f, 0.812012f, 0.824707f, 0.835938f, 0.848145f, 0.858887f,
+ 0.868164f, 0.878906f, 0.888184f, 0.897949f, 0.906250f, 0.914551f, 0.960938f, 0.960938f, 0.959473f, 0.957520f, 0.955078f, 0.953125f,
+ 0.003084f, 0.009521f, 0.016144f, 0.023346f, 0.031204f, 0.039520f, 0.048523f, 0.057953f, 0.068359f, 0.079895f, 0.091309f, 0.104126f,
+ 0.117920f, 0.132324f, 0.147949f, 0.164062f, 0.181396f, 0.199219f, 0.218872f, 0.238403f, 0.258545f, 0.279541f, 0.301758f, 0.323486f,
+ 0.346191f, 0.368408f, 0.391846f, 0.414795f, 0.437256f, 0.460693f, 0.483643f, 0.505371f, 0.527832f, 0.550293f, 0.571289f, 0.591797f,
+ 0.612305f, 0.632324f, 0.651855f, 0.670898f, 0.687500f, 0.705566f, 0.722168f, 0.737793f, 0.753418f, 0.768555f, 0.783691f, 0.796875f,
+ 0.811035f, 0.823242f, 0.834473f, 0.846191f, 0.857422f, 0.868652f, 0.878418f, 0.887695f, 0.897949f, 0.906250f, 0.958008f, 0.958008f,
+ 0.957031f, 0.954590f, 0.952637f, 0.950684f, 0.002666f, 0.008293f, 0.014297f, 0.021225f, 0.027847f, 0.035156f, 0.043274f, 0.051666f,
+ 0.060791f, 0.070801f, 0.081543f, 0.092407f, 0.104858f, 0.118530f, 0.131836f, 0.146606f, 0.162598f, 0.179443f, 0.196777f, 0.215210f,
+ 0.234375f, 0.254150f, 0.274414f, 0.295898f, 0.317871f, 0.340088f, 0.362549f, 0.385010f, 0.407959f, 0.430664f, 0.454590f, 0.476562f,
+ 0.499268f, 0.521484f, 0.543945f, 0.564941f, 0.585938f, 0.606934f, 0.626465f, 0.646484f, 0.665527f, 0.683594f, 0.701660f, 0.717773f,
+ 0.735352f, 0.751465f, 0.766113f, 0.781738f, 0.794922f, 0.808105f, 0.821289f, 0.833496f, 0.846191f, 0.857910f, 0.868164f, 0.878906f,
+ 0.889160f, 0.899414f, 0.954102f, 0.955566f, 0.953613f, 0.952148f, 0.950195f, 0.948730f, 0.002396f, 0.007427f, 0.012978f, 0.018646f,
+ 0.025024f, 0.031403f, 0.038788f, 0.046112f, 0.054260f, 0.063354f, 0.072693f, 0.082886f, 0.093689f, 0.105469f, 0.118164f, 0.130859f,
+ 0.145996f, 0.161011f, 0.177124f, 0.193359f, 0.211670f, 0.230225f, 0.249634f, 0.270020f, 0.290771f, 0.311768f, 0.333740f, 0.356201f,
+ 0.378906f, 0.401855f, 0.424561f, 0.447754f, 0.470215f, 0.493408f, 0.515137f, 0.537109f, 0.559570f, 0.580078f, 0.601074f, 0.621582f,
+ 0.642090f, 0.661621f, 0.679688f, 0.697754f, 0.715820f, 0.732422f, 0.749512f, 0.765137f, 0.779785f, 0.794434f, 0.808594f, 0.821289f,
+ 0.833496f, 0.846191f, 0.857910f, 0.869141f, 0.879883f, 0.889648f, 0.950195f, 0.952637f, 0.950684f, 0.948730f, 0.947266f, 0.945801f,
+ 0.002029f, 0.006672f, 0.011658f, 0.016937f, 0.022476f, 0.028305f, 0.034332f, 0.041351f, 0.048584f, 0.056671f, 0.064697f, 0.073853f,
+ 0.083923f, 0.094482f, 0.105225f, 0.117798f, 0.130615f, 0.144287f, 0.159302f, 0.174683f, 0.190430f, 0.208740f, 0.226318f, 0.245483f,
+ 0.264893f, 0.285400f, 0.307129f, 0.328369f, 0.350342f, 0.372803f, 0.395264f, 0.418701f, 0.441650f, 0.462891f, 0.486816f, 0.509277f,
+ 0.532227f, 0.553711f, 0.575684f, 0.596680f, 0.617676f, 0.638672f, 0.657715f, 0.676758f, 0.695312f, 0.712402f, 0.729492f, 0.746582f,
+ 0.762695f, 0.778320f, 0.793457f, 0.807129f, 0.820801f, 0.833984f, 0.846191f, 0.858887f, 0.869629f, 0.881836f, 0.947266f, 0.949219f,
+ 0.947754f, 0.946289f, 0.944824f, 0.942871f, 0.002142f, 0.006401f, 0.010841f, 0.015251f, 0.019760f, 0.025055f, 0.031113f, 0.037201f,
+ 0.043671f, 0.050598f, 0.057892f, 0.066101f, 0.075012f, 0.084351f, 0.093994f, 0.105164f, 0.117432f, 0.129517f, 0.142822f, 0.157104f,
+ 0.172119f, 0.188110f, 0.204956f, 0.223145f, 0.241577f, 0.260498f, 0.280762f, 0.301758f, 0.322998f, 0.345215f, 0.366943f, 0.389893f,
+ 0.412842f, 0.435791f, 0.458008f, 0.482178f, 0.504395f, 0.526855f, 0.548828f, 0.571289f, 0.592285f, 0.612793f, 0.634277f, 0.654297f,
+ 0.673340f, 0.692383f, 0.710938f, 0.729004f, 0.745117f, 0.762207f, 0.777832f, 0.792480f, 0.807129f, 0.821289f, 0.834961f, 0.847168f,
+ 0.859863f, 0.871582f, 0.943359f, 0.946289f, 0.944824f, 0.943359f, 0.941895f, 0.940430f, 0.001760f, 0.005562f, 0.009621f, 0.013710f,
+ 0.018417f, 0.022736f, 0.027939f, 0.033264f, 0.039185f, 0.045166f, 0.052460f, 0.059143f, 0.067261f, 0.075745f, 0.084106f, 0.094177f,
+ 0.104980f, 0.116455f, 0.128174f, 0.141113f, 0.155151f, 0.169922f, 0.184937f, 0.201660f, 0.219238f, 0.237549f, 0.256348f, 0.276367f,
+ 0.296875f, 0.317871f, 0.339844f, 0.361572f, 0.383789f, 0.407227f, 0.430908f, 0.453857f, 0.476807f, 0.498779f, 0.521973f, 0.543945f,
+ 0.567383f, 0.589355f, 0.609863f, 0.631348f, 0.651855f, 0.671875f, 0.690918f, 0.709961f, 0.727539f, 0.744141f, 0.761719f, 0.777344f,
+ 0.793457f, 0.808594f, 0.823242f, 0.835449f, 0.848633f, 0.861328f, 0.938965f, 0.941895f, 0.941406f, 0.940430f, 0.938477f, 0.937012f,
+ 0.001594f, 0.005283f, 0.008789f, 0.012383f, 0.016342f, 0.020523f, 0.025284f, 0.029968f, 0.035217f, 0.040741f, 0.046417f, 0.052948f,
+ 0.060120f, 0.067566f, 0.076294f, 0.084534f, 0.093750f, 0.104614f, 0.115173f, 0.126831f, 0.139160f, 0.152832f, 0.166748f, 0.181885f,
+ 0.198853f, 0.215698f, 0.233521f, 0.252197f, 0.271973f, 0.291992f, 0.313477f, 0.334717f, 0.357178f, 0.379395f, 0.401855f, 0.425537f,
+ 0.448242f, 0.471924f, 0.495361f, 0.517578f, 0.541016f, 0.562988f, 0.585938f, 0.607422f, 0.627930f, 0.649414f, 0.670410f, 0.688965f,
+ 0.708496f, 0.727539f, 0.744629f, 0.761719f, 0.778809f, 0.794922f, 0.809082f, 0.824219f, 0.838379f, 0.851074f, 0.935059f, 0.938965f,
+ 0.937988f, 0.937012f, 0.936035f, 0.933594f, 0.001564f, 0.004665f, 0.007973f, 0.011276f, 0.014908f, 0.018600f, 0.022675f, 0.027176f,
+ 0.031464f, 0.036621f, 0.042023f, 0.047974f, 0.054108f, 0.060822f, 0.068237f, 0.075684f, 0.084229f, 0.093567f, 0.103210f, 0.113892f,
+ 0.125000f, 0.137329f, 0.150269f, 0.164307f, 0.179810f, 0.194946f, 0.212158f, 0.229248f, 0.247925f, 0.267578f, 0.287842f, 0.308350f,
+ 0.330322f, 0.352051f, 0.374756f, 0.397461f, 0.420654f, 0.444092f, 0.466797f, 0.490723f, 0.514160f, 0.537109f, 0.560059f, 0.582031f,
+ 0.604980f, 0.626953f, 0.648926f, 0.668457f, 0.688477f, 0.708008f, 0.727539f, 0.745117f, 0.763672f, 0.779297f, 0.795410f, 0.811523f,
+ 0.826660f, 0.840332f, 0.930664f, 0.934570f, 0.934082f, 0.933594f, 0.932129f, 0.930664f, 0.001424f, 0.004261f, 0.007122f, 0.010239f,
+ 0.013374f, 0.016693f, 0.020401f, 0.024368f, 0.028595f, 0.033325f, 0.037964f, 0.043152f, 0.048340f, 0.054962f, 0.060730f, 0.067749f,
+ 0.075684f, 0.083862f, 0.092041f, 0.102051f, 0.112305f, 0.123657f, 0.135376f, 0.148071f, 0.161987f, 0.176270f, 0.192139f, 0.208252f,
+ 0.226196f, 0.244141f, 0.263672f, 0.283447f, 0.304199f, 0.325195f, 0.346924f, 0.370605f, 0.392822f, 0.416260f, 0.439209f, 0.463623f,
+ 0.486084f, 0.511230f, 0.534180f, 0.558105f, 0.580566f, 0.603516f, 0.625000f, 0.647461f, 0.668457f, 0.688965f, 0.708496f, 0.727539f,
+ 0.746582f, 0.764160f, 0.781738f, 0.798340f, 0.813477f, 0.829590f, 0.926758f, 0.931152f, 0.930664f, 0.929199f, 0.928223f, 0.927246f,
+ 0.001294f, 0.004196f, 0.006538f, 0.009346f, 0.012306f, 0.015335f, 0.018845f, 0.022003f, 0.025558f, 0.029816f, 0.034149f, 0.038605f,
+ 0.043915f, 0.049042f, 0.054810f, 0.061188f, 0.067993f, 0.075256f, 0.083130f, 0.091553f, 0.100769f, 0.110779f, 0.121643f, 0.133057f,
+ 0.145630f, 0.159058f, 0.173218f, 0.188721f, 0.204590f, 0.222290f, 0.240234f, 0.259277f, 0.279053f, 0.299561f, 0.321533f, 0.343506f,
+ 0.365723f, 0.389404f, 0.412354f, 0.436035f, 0.459961f, 0.484131f, 0.508301f, 0.532227f, 0.555176f, 0.579102f, 0.601562f, 0.624512f,
+ 0.646484f, 0.668457f, 0.688965f, 0.709473f, 0.729004f, 0.748047f, 0.766602f, 0.784668f, 0.800293f, 0.817383f, 0.921875f, 0.926270f,
+ 0.926270f, 0.925781f, 0.924316f, 0.923340f, 0.001081f, 0.003603f, 0.006027f, 0.008575f, 0.010979f, 0.013847f, 0.016937f, 0.020020f,
+ 0.023315f, 0.026917f, 0.030930f, 0.035156f, 0.039429f, 0.044098f, 0.049622f, 0.054779f, 0.060791f, 0.067566f, 0.074341f, 0.082336f,
+ 0.090515f, 0.099548f, 0.109070f, 0.119263f, 0.130981f, 0.143188f, 0.156250f, 0.170288f, 0.185303f, 0.201294f, 0.218262f, 0.236450f,
+ 0.255615f, 0.275391f, 0.295654f, 0.316895f, 0.339111f, 0.362061f, 0.385498f, 0.408936f, 0.432861f, 0.457275f, 0.481689f, 0.505371f,
+ 0.529785f, 0.553711f, 0.577637f, 0.601074f, 0.624023f, 0.646484f, 0.669434f, 0.689941f, 0.711426f, 0.731445f, 0.750977f, 0.770020f,
+ 0.787598f, 0.804688f, 0.916992f, 0.922363f, 0.922363f, 0.921875f, 0.920898f, 0.918945f, 0.001064f, 0.003231f, 0.005322f, 0.007710f,
+ 0.010323f, 0.012489f, 0.015244f, 0.018051f, 0.020798f, 0.024338f, 0.027893f, 0.031738f, 0.035553f, 0.039795f, 0.044495f, 0.049133f,
+ 0.054657f, 0.060608f, 0.066895f, 0.073792f, 0.081421f, 0.089050f, 0.097717f, 0.106934f, 0.117554f, 0.128540f, 0.140503f, 0.153442f,
+ 0.167236f, 0.182129f, 0.197998f, 0.214966f, 0.232422f, 0.251465f, 0.271240f, 0.291992f, 0.313232f, 0.335693f, 0.358643f, 0.382080f,
+ 0.406006f, 0.430176f, 0.454590f, 0.479004f, 0.503906f, 0.528320f, 0.552734f, 0.577637f, 0.601562f, 0.625000f, 0.648438f, 0.670898f,
+ 0.691895f, 0.713867f, 0.733887f, 0.754883f, 0.774414f, 0.791992f, 0.912109f, 0.917969f, 0.918457f, 0.916992f, 0.916016f, 0.915039f,
+ 0.000998f, 0.003012f, 0.005123f, 0.007114f, 0.009438f, 0.011360f, 0.013763f, 0.016510f, 0.018951f, 0.022171f, 0.025101f, 0.028305f,
+ 0.031830f, 0.035736f, 0.039795f, 0.044067f, 0.048950f, 0.053864f, 0.059601f, 0.066345f, 0.072815f, 0.079956f, 0.087402f, 0.096375f,
+ 0.105835f, 0.115479f, 0.126343f, 0.138184f, 0.150635f, 0.164062f, 0.178711f, 0.194214f, 0.210815f, 0.229004f, 0.247314f, 0.267090f,
+ 0.288330f, 0.309570f, 0.332275f, 0.355469f, 0.378418f, 0.402832f, 0.427490f, 0.452637f, 0.477783f, 0.501953f, 0.527832f, 0.552734f,
+ 0.577637f, 0.602051f, 0.626465f, 0.649902f, 0.672852f, 0.695312f, 0.717773f, 0.737793f, 0.758789f, 0.778809f, 0.906250f, 0.913086f,
+ 0.913574f, 0.912598f, 0.911621f, 0.910645f, 0.001059f, 0.002985f, 0.004475f, 0.006496f, 0.008545f, 0.010300f, 0.012581f, 0.014969f,
+ 0.017471f, 0.019852f, 0.022507f, 0.025864f, 0.028824f, 0.032135f, 0.036041f, 0.039795f, 0.043884f, 0.048706f, 0.053680f, 0.059113f,
+ 0.064819f, 0.071472f, 0.078491f, 0.086365f, 0.094360f, 0.103577f, 0.113403f, 0.124023f, 0.135620f, 0.147705f, 0.160889f, 0.175537f,
+ 0.191284f, 0.207764f, 0.225464f, 0.244263f, 0.264160f, 0.284912f, 0.306641f, 0.329102f, 0.352295f, 0.376465f, 0.400635f, 0.426025f,
+ 0.451416f, 0.476562f, 0.502930f, 0.527344f, 0.553711f, 0.579102f, 0.603027f, 0.627930f, 0.652344f, 0.675781f, 0.700195f, 0.722168f,
+ 0.742676f, 0.764648f, 0.901367f, 0.907715f, 0.908691f, 0.908203f, 0.907227f, 0.906250f, 0.000988f, 0.002577f, 0.004124f, 0.006042f,
+ 0.007603f, 0.009506f, 0.011299f, 0.013680f, 0.015778f, 0.017883f, 0.020554f, 0.023102f, 0.025940f, 0.028946f, 0.031891f, 0.035431f,
+ 0.039825f, 0.043671f, 0.048157f, 0.053009f, 0.058075f, 0.063782f, 0.069885f, 0.077087f, 0.084839f, 0.092712f, 0.101379f, 0.110779f,
+ 0.121155f, 0.132446f, 0.144775f, 0.157837f, 0.172363f, 0.187744f, 0.204590f, 0.222290f, 0.240601f, 0.260254f, 0.281494f, 0.303223f,
+ 0.325439f, 0.349609f, 0.373535f, 0.399170f, 0.424561f, 0.450439f, 0.475586f, 0.501953f, 0.528320f, 0.554688f, 0.580566f, 0.605957f,
+ 0.630859f, 0.656250f, 0.680176f, 0.704102f, 0.727051f, 0.749512f, 0.895508f, 0.902344f, 0.903320f, 0.902832f, 0.901855f, 0.901855f,
+ 0.000842f, 0.002253f, 0.003597f, 0.005352f, 0.007195f, 0.008804f, 0.010460f, 0.012100f, 0.014130f, 0.016281f, 0.018341f, 0.021057f,
+ 0.023193f, 0.025742f, 0.029022f, 0.031830f, 0.035278f, 0.039246f, 0.042999f, 0.047211f, 0.052032f, 0.056946f, 0.062744f, 0.068848f,
+ 0.075195f, 0.082642f, 0.090332f, 0.099060f, 0.108215f, 0.118469f, 0.129517f, 0.141724f, 0.154907f, 0.169434f, 0.184448f, 0.201172f,
+ 0.218506f, 0.237427f, 0.257324f, 0.278320f, 0.300293f, 0.323242f, 0.347412f, 0.372070f, 0.397217f, 0.423340f, 0.449707f, 0.476807f,
+ 0.502930f, 0.529785f, 0.556641f, 0.582520f, 0.609863f, 0.635254f, 0.660645f, 0.686035f, 0.710938f, 0.733887f, 0.889648f, 0.897461f,
+ 0.898926f, 0.896973f, 0.896973f, 0.896484f, 0.000660f, 0.002014f, 0.003531f, 0.004951f, 0.006424f, 0.007935f, 0.009392f, 0.011322f,
+ 0.012924f, 0.014824f, 0.016754f, 0.018906f, 0.020935f, 0.023376f, 0.026245f, 0.028809f, 0.031860f, 0.034821f, 0.038330f, 0.042236f,
+ 0.046387f, 0.050812f, 0.056061f, 0.061279f, 0.066956f, 0.073547f, 0.080566f, 0.088074f, 0.096802f, 0.106079f, 0.116089f, 0.127075f,
+ 0.138672f, 0.151855f, 0.165649f, 0.180908f, 0.197754f, 0.215332f, 0.234375f, 0.254150f, 0.275391f, 0.298096f, 0.321533f, 0.344971f,
+ 0.370361f, 0.396973f, 0.422852f, 0.449219f, 0.477295f, 0.504395f, 0.532227f, 0.558594f, 0.586914f, 0.614258f, 0.640625f, 0.666016f,
+ 0.692871f, 0.718262f, 0.882812f, 0.891602f, 0.892578f, 0.892090f, 0.892090f, 0.890625f, 0.000623f, 0.002073f, 0.003298f, 0.004292f,
+ 0.005589f, 0.007401f, 0.008377f, 0.010315f, 0.011871f, 0.013596f, 0.015213f, 0.016632f, 0.018829f, 0.020920f, 0.023239f, 0.025726f,
+ 0.028381f, 0.031250f, 0.034241f, 0.037781f, 0.041473f, 0.045349f, 0.049469f, 0.054199f, 0.059448f, 0.065186f, 0.071716f, 0.078613f,
+ 0.085999f, 0.093872f, 0.103516f, 0.112976f, 0.123840f, 0.135620f, 0.148804f, 0.162720f, 0.178223f, 0.194824f, 0.212280f, 0.231079f,
+ 0.251953f, 0.273193f, 0.295410f, 0.319580f, 0.343994f, 0.370117f, 0.396729f, 0.422852f, 0.450684f, 0.478516f, 0.507324f, 0.534668f,
+ 0.562988f, 0.591797f, 0.619629f, 0.646484f, 0.674316f, 0.700195f, 0.875488f, 0.885254f, 0.886719f, 0.886719f, 0.885742f, 0.885254f,
+ 0.000583f, 0.001746f, 0.002840f, 0.004143f, 0.005234f, 0.006516f, 0.007835f, 0.009460f, 0.010788f, 0.012062f, 0.013428f, 0.015053f,
+ 0.017349f, 0.018753f, 0.021271f, 0.023163f, 0.025284f, 0.027924f, 0.030655f, 0.033478f, 0.036957f, 0.040527f, 0.044037f, 0.048309f,
+ 0.053223f, 0.058319f, 0.063660f, 0.069763f, 0.076172f, 0.083679f, 0.091431f, 0.100647f, 0.110229f, 0.120667f, 0.132690f, 0.145386f,
+ 0.159668f, 0.174805f, 0.191284f, 0.208984f, 0.228516f, 0.248535f, 0.270996f, 0.293701f, 0.317383f, 0.342529f, 0.369629f, 0.396240f,
+ 0.424072f, 0.452148f, 0.480957f, 0.509277f, 0.539551f, 0.567871f, 0.596680f, 0.625977f, 0.654785f, 0.682129f, 0.868652f, 0.878906f,
+ 0.880371f, 0.879883f, 0.879883f, 0.879395f, 0.000535f, 0.001538f, 0.002930f, 0.003725f, 0.004986f, 0.005920f, 0.006973f, 0.008247f,
+ 0.009575f, 0.010841f, 0.012115f, 0.013550f, 0.015343f, 0.016983f, 0.018814f, 0.020523f, 0.022568f, 0.024887f, 0.027206f, 0.029907f,
+ 0.032959f, 0.035828f, 0.039185f, 0.042877f, 0.046967f, 0.051605f, 0.056213f, 0.061432f, 0.067749f, 0.073730f, 0.081238f, 0.089111f,
+ 0.097656f, 0.107300f, 0.118042f, 0.129883f, 0.142334f, 0.156250f, 0.171875f, 0.187866f, 0.206665f, 0.225708f, 0.246704f, 0.268799f,
+ 0.291992f, 0.316650f, 0.342529f, 0.369629f, 0.397217f, 0.425537f, 0.454590f, 0.484131f, 0.513672f, 0.544434f, 0.574219f, 0.604492f,
+ 0.633789f, 0.664062f, 0.861328f, 0.871582f, 0.873535f, 0.874512f, 0.873047f, 0.872559f, 0.000581f, 0.001668f, 0.002563f, 0.003471f,
+ 0.004494f, 0.005562f, 0.006580f, 0.007782f, 0.008690f, 0.009766f, 0.011261f, 0.012314f, 0.013901f, 0.014969f, 0.016479f, 0.018265f,
+ 0.020294f, 0.022156f, 0.024353f, 0.026505f, 0.029053f, 0.031799f, 0.034607f, 0.037964f, 0.041382f, 0.045471f, 0.049591f, 0.054047f,
+ 0.059326f, 0.065186f, 0.071411f, 0.078735f, 0.086304f, 0.094971f, 0.104126f, 0.114807f, 0.126587f, 0.138916f, 0.153564f, 0.169067f,
+ 0.185669f, 0.203613f, 0.223389f, 0.244629f, 0.266602f, 0.291260f, 0.316406f, 0.342773f, 0.370361f, 0.398926f, 0.427734f, 0.458008f,
+ 0.488770f, 0.520020f, 0.550293f, 0.582031f, 0.613281f, 0.645020f, 0.854004f, 0.865234f, 0.866699f, 0.867188f, 0.866699f, 0.866699f,
+ 0.000571f, 0.001365f, 0.002483f, 0.003033f, 0.004120f, 0.005054f, 0.005981f, 0.006737f, 0.007603f, 0.008675f, 0.009789f, 0.011078f,
+ 0.012413f, 0.013626f, 0.014908f, 0.016174f, 0.017792f, 0.019699f, 0.021591f, 0.023499f, 0.025635f, 0.028000f, 0.030533f, 0.033417f,
+ 0.036499f, 0.039948f, 0.043762f, 0.047943f, 0.052460f, 0.057465f, 0.062622f, 0.068848f, 0.076111f, 0.083557f, 0.092102f, 0.101562f,
+ 0.111816f, 0.123230f, 0.135864f, 0.150024f, 0.165771f, 0.182373f, 0.200806f, 0.221191f, 0.242920f, 0.265869f, 0.290283f, 0.316406f,
+ 0.343262f, 0.371582f, 0.400879f, 0.431396f, 0.463623f, 0.494629f, 0.526367f, 0.558105f, 0.591309f, 0.624023f, 0.845215f, 0.856934f,
+ 0.859375f, 0.859375f, 0.859863f, 0.860352f, 0.000411f, 0.001296f, 0.002012f, 0.002808f, 0.003754f, 0.004543f, 0.005215f, 0.006012f,
+ 0.006725f, 0.007851f, 0.008888f, 0.009979f, 0.010994f, 0.012009f, 0.013062f, 0.014549f, 0.016113f, 0.017441f, 0.019073f, 0.020767f,
+ 0.022598f, 0.024689f, 0.026764f, 0.029358f, 0.032043f, 0.034760f, 0.038391f, 0.041779f, 0.045380f, 0.050110f, 0.055054f, 0.060394f,
+ 0.066650f, 0.073120f, 0.080688f, 0.089233f, 0.098450f, 0.108582f, 0.120178f, 0.133057f, 0.146973f, 0.162354f, 0.179565f, 0.198364f,
+ 0.218750f, 0.240967f, 0.264648f, 0.290039f, 0.316650f, 0.344971f, 0.374023f, 0.404541f, 0.435791f, 0.467773f, 0.500977f, 0.535156f,
+ 0.569336f, 0.601562f, 0.836914f, 0.850098f, 0.852051f, 0.852539f, 0.852539f, 0.852051f, 0.000408f, 0.001071f, 0.001857f, 0.002573f,
+ 0.003338f, 0.004078f, 0.004692f, 0.005379f, 0.006046f, 0.007275f, 0.007957f, 0.008606f, 0.009598f, 0.010864f, 0.011658f, 0.013084f,
+ 0.013977f, 0.015366f, 0.016724f, 0.018402f, 0.019669f, 0.021759f, 0.023697f, 0.025726f, 0.027954f, 0.030640f, 0.033356f, 0.036530f,
+ 0.039948f, 0.043701f, 0.047791f, 0.052704f, 0.057770f, 0.063782f, 0.070129f, 0.077881f, 0.085999f, 0.095337f, 0.105591f, 0.116882f,
+ 0.130005f, 0.143921f, 0.159302f, 0.177246f, 0.196411f, 0.217163f, 0.239746f, 0.263916f, 0.290039f, 0.317871f, 0.346924f, 0.377441f,
+ 0.408936f, 0.442139f, 0.476074f, 0.509766f, 0.545410f, 0.580078f, 0.828613f, 0.841309f, 0.843262f, 0.844238f, 0.843750f, 0.844238f,
+ 0.000322f, 0.001009f, 0.001674f, 0.002262f, 0.002949f, 0.003633f, 0.004250f, 0.004780f, 0.005478f, 0.006256f, 0.007248f, 0.007919f,
+ 0.008720f, 0.009552f, 0.010277f, 0.011391f, 0.012291f, 0.013466f, 0.014786f, 0.015976f, 0.017288f, 0.019043f, 0.020477f, 0.022385f,
+ 0.024292f, 0.026276f, 0.029175f, 0.031769f, 0.034546f, 0.037842f, 0.041626f, 0.045868f, 0.050293f, 0.055084f, 0.060669f, 0.067688f,
+ 0.074585f, 0.083008f, 0.092102f, 0.102234f, 0.113525f, 0.126587f, 0.140869f, 0.156860f, 0.174805f, 0.194214f, 0.215698f, 0.239014f,
+ 0.264404f, 0.291016f, 0.320068f, 0.350098f, 0.382080f, 0.414551f, 0.449463f, 0.485107f, 0.520996f, 0.557617f, 0.818848f, 0.833496f,
+ 0.836426f, 0.836914f, 0.836426f, 0.835938f, 0.000483f, 0.000841f, 0.001632f, 0.002142f, 0.002678f, 0.003359f, 0.003830f, 0.004333f,
+ 0.005077f, 0.005527f, 0.006104f, 0.006908f, 0.007675f, 0.008392f, 0.009216f, 0.009789f, 0.010880f, 0.011719f, 0.012817f, 0.013809f,
+ 0.015068f, 0.016357f, 0.017883f, 0.019485f, 0.021271f, 0.022995f, 0.025162f, 0.027359f, 0.029755f, 0.032806f, 0.036133f, 0.039459f,
+ 0.043091f, 0.047821f, 0.052368f, 0.058258f, 0.064514f, 0.071472f, 0.079224f, 0.088623f, 0.098694f, 0.109924f, 0.123230f, 0.137817f,
+ 0.154053f, 0.172363f, 0.192261f, 0.214478f, 0.238647f, 0.265137f, 0.292725f, 0.322998f, 0.354492f, 0.387695f, 0.422363f, 0.458740f,
+ 0.495605f, 0.533691f, 0.809570f, 0.824219f, 0.826660f, 0.827148f, 0.828125f, 0.827148f, 0.000240f, 0.000906f, 0.001379f, 0.001807f,
+ 0.002495f, 0.002916f, 0.003490f, 0.004139f, 0.004471f, 0.004898f, 0.005638f, 0.005978f, 0.006874f, 0.007313f, 0.007957f, 0.008698f,
+ 0.009560f, 0.010178f, 0.011345f, 0.012177f, 0.012985f, 0.014214f, 0.015274f, 0.016708f, 0.017929f, 0.019882f, 0.021393f, 0.023560f,
+ 0.025406f, 0.028137f, 0.030472f, 0.033752f, 0.036896f, 0.040619f, 0.044952f, 0.049622f, 0.055298f, 0.061249f, 0.068420f, 0.075928f,
+ 0.084900f, 0.095398f, 0.107300f, 0.119934f, 0.134766f, 0.151733f, 0.170410f, 0.191284f, 0.213867f, 0.238647f, 0.265869f, 0.295654f,
+ 0.326660f, 0.359863f, 0.394775f, 0.432129f, 0.469482f, 0.508789f, 0.798340f, 0.814941f, 0.817871f, 0.818359f, 0.818848f, 0.818848f,
+ 0.000376f, 0.000870f, 0.001291f, 0.001619f, 0.002251f, 0.002520f, 0.003016f, 0.003502f, 0.004036f, 0.004299f, 0.004723f, 0.005234f,
+ 0.005840f, 0.006512f, 0.006908f, 0.007595f, 0.008003f, 0.008797f, 0.009773f, 0.010536f, 0.011284f, 0.012161f, 0.013237f, 0.014465f,
+ 0.015579f, 0.016968f, 0.018402f, 0.019882f, 0.021759f, 0.023621f, 0.026138f, 0.028488f, 0.031738f, 0.034668f, 0.038239f, 0.042389f,
+ 0.046783f, 0.052094f, 0.058319f, 0.064941f, 0.072815f, 0.081726f, 0.092102f, 0.103516f, 0.117188f, 0.132202f, 0.149048f, 0.168091f,
+ 0.189941f, 0.213745f, 0.239990f, 0.268311f, 0.299316f, 0.332275f, 0.367188f, 0.403076f, 0.442871f, 0.483398f, 0.788086f, 0.805176f,
+ 0.808105f, 0.808594f, 0.809082f, 0.809082f, 0.000386f, 0.000765f, 0.000998f, 0.001537f, 0.001833f, 0.002407f, 0.002529f, 0.003113f,
+ 0.003334f, 0.003841f, 0.004192f, 0.004585f, 0.005096f, 0.005543f, 0.006073f, 0.006405f, 0.007118f, 0.007641f, 0.008278f, 0.008957f,
+ 0.009651f, 0.010498f, 0.011307f, 0.012184f, 0.013199f, 0.014343f, 0.015671f, 0.016678f, 0.018585f, 0.019852f, 0.021881f, 0.023987f,
+ 0.026398f, 0.029099f, 0.032227f, 0.035339f, 0.039246f, 0.043915f, 0.048859f, 0.054688f, 0.061554f, 0.069519f, 0.078247f, 0.088379f,
+ 0.100037f, 0.113770f, 0.129272f, 0.146606f, 0.166626f, 0.189575f, 0.214111f, 0.241577f, 0.271973f, 0.304199f, 0.339844f, 0.375977f,
+ 0.415527f, 0.457275f, 0.776855f, 0.794434f, 0.797363f, 0.797852f, 0.798828f, 0.799316f, 0.000232f, 0.000636f, 0.000996f, 0.001201f,
+ 0.001721f, 0.002029f, 0.002340f, 0.002802f, 0.003012f, 0.003462f, 0.003693f, 0.004059f, 0.004295f, 0.004822f, 0.005077f, 0.005623f,
+ 0.006126f, 0.006653f, 0.007027f, 0.007561f, 0.008049f, 0.008904f, 0.009399f, 0.010300f, 0.011200f, 0.012115f, 0.013092f, 0.014221f,
+ 0.015671f, 0.016891f, 0.018433f, 0.020294f, 0.022064f, 0.024277f, 0.026688f, 0.029678f, 0.032654f, 0.036499f, 0.040955f, 0.045715f,
+ 0.051514f, 0.058014f, 0.065674f, 0.074707f, 0.084717f, 0.096802f, 0.111023f, 0.126709f, 0.144775f, 0.165771f, 0.189209f, 0.215820f,
+ 0.244385f, 0.275879f, 0.310547f, 0.348145f, 0.387695f, 0.429932f, 0.765137f, 0.783203f, 0.787109f, 0.788574f, 0.788574f, 0.789551f,
+ 0.000171f, 0.000518f, 0.001106f, 0.001242f, 0.001475f, 0.001939f, 0.002092f, 0.002254f, 0.002607f, 0.002930f, 0.003084f, 0.003382f,
+ 0.003674f, 0.004040f, 0.004395f, 0.004780f, 0.005157f, 0.005653f, 0.006088f, 0.006355f, 0.006870f, 0.007420f, 0.008057f, 0.008667f,
+ 0.009361f, 0.010040f, 0.011101f, 0.011803f, 0.012711f, 0.013962f, 0.015343f, 0.016586f, 0.018036f, 0.020142f, 0.022079f, 0.024399f,
+ 0.027023f, 0.030075f, 0.033569f, 0.037750f, 0.042603f, 0.048096f, 0.054718f, 0.062134f, 0.071045f, 0.081299f, 0.093445f, 0.107605f,
+ 0.124268f, 0.142944f, 0.165405f, 0.189941f, 0.218262f, 0.249268f, 0.282227f, 0.319336f, 0.359375f, 0.402832f, 0.752930f, 0.771973f,
+ 0.775879f, 0.776855f, 0.777832f, 0.777832f, 0.000204f, 0.000608f, 0.000865f, 0.001011f, 0.001362f, 0.001632f, 0.001817f, 0.001930f,
+ 0.002274f, 0.002491f, 0.002796f, 0.002932f, 0.003139f, 0.003429f, 0.003736f, 0.004055f, 0.004448f, 0.004829f, 0.004971f, 0.005497f,
+ 0.005859f, 0.006298f, 0.006741f, 0.007080f, 0.007687f, 0.008308f, 0.009087f, 0.009880f, 0.010735f, 0.011528f, 0.012375f, 0.013664f,
+ 0.014862f, 0.016464f, 0.017868f, 0.019852f, 0.022156f, 0.024490f, 0.027435f, 0.030853f, 0.034637f, 0.039154f, 0.044495f, 0.050964f,
+ 0.058441f, 0.067383f, 0.077759f, 0.090332f, 0.104797f, 0.121826f, 0.142334f, 0.164795f, 0.191528f, 0.221313f, 0.254150f, 0.290771f,
+ 0.330078f, 0.374268f, 0.740234f, 0.759277f, 0.763672f, 0.766113f, 0.766602f, 0.766113f, 0.000150f, 0.000514f, 0.000666f, 0.000865f,
+ 0.001163f, 0.001389f, 0.001540f, 0.001672f, 0.001940f, 0.002110f, 0.002302f, 0.002419f, 0.002745f, 0.002974f, 0.003120f, 0.003366f,
+ 0.003695f, 0.003815f, 0.004173f, 0.004574f, 0.004879f, 0.005165f, 0.005646f, 0.006058f, 0.006481f, 0.006969f, 0.007626f, 0.007881f,
+ 0.008751f, 0.009445f, 0.010231f, 0.011246f, 0.012222f, 0.013268f, 0.014641f, 0.015976f, 0.017792f, 0.019867f, 0.021912f, 0.024704f,
+ 0.027786f, 0.031494f, 0.036011f, 0.041229f, 0.047363f, 0.054962f, 0.063904f, 0.074463f, 0.087036f, 0.102295f, 0.120483f, 0.141113f,
+ 0.166260f, 0.194214f, 0.226196f, 0.261719f, 0.301514f, 0.345459f, 0.727051f, 0.747070f, 0.751953f, 0.753418f, 0.754395f, 0.754883f,
+ 0.000103f, 0.000251f, 0.000628f, 0.000912f, 0.000978f, 0.001191f, 0.001365f, 0.001507f, 0.001513f, 0.001757f, 0.001980f, 0.002121f,
+ 0.002316f, 0.002373f, 0.002645f, 0.002909f, 0.003012f, 0.003305f, 0.003538f, 0.003775f, 0.004070f, 0.004246f, 0.004642f, 0.004986f,
+ 0.005394f, 0.005802f, 0.006031f, 0.006565f, 0.006969f, 0.007618f, 0.008293f, 0.008980f, 0.009766f, 0.010612f, 0.011528f, 0.012802f,
+ 0.014198f, 0.015671f, 0.017517f, 0.019592f, 0.021957f, 0.024918f, 0.028442f, 0.032562f, 0.037567f, 0.043762f, 0.051025f, 0.059753f,
+ 0.071045f, 0.084412f, 0.099792f, 0.119385f, 0.141846f, 0.167969f, 0.199341f, 0.233521f, 0.272461f, 0.315674f, 0.712891f, 0.733887f,
+ 0.738770f, 0.740234f, 0.741211f, 0.741699f, 0.000185f, 0.000434f, 0.000489f, 0.000732f, 0.000874f, 0.000968f, 0.001122f, 0.001124f,
+ 0.001371f, 0.001423f, 0.001639f, 0.001693f, 0.001805f, 0.002094f, 0.002241f, 0.002356f, 0.002567f, 0.002691f, 0.002871f, 0.003063f,
+ 0.003195f, 0.003582f, 0.003790f, 0.004089f, 0.004372f, 0.004536f, 0.005085f, 0.005314f, 0.005699f, 0.006153f, 0.006672f, 0.007202f,
+ 0.007805f, 0.008522f, 0.009216f, 0.010071f, 0.011086f, 0.012184f, 0.013596f, 0.015297f, 0.017014f, 0.019363f, 0.021988f, 0.025299f,
+ 0.029282f, 0.033936f, 0.040070f, 0.047028f, 0.056519f, 0.067932f, 0.080872f, 0.098083f, 0.118469f, 0.143188f, 0.171753f, 0.205200f,
+ 0.243286f, 0.286133f, 0.698730f, 0.721680f, 0.725098f, 0.727051f, 0.728027f, 0.728516f, 0.000116f, 0.000267f, 0.000565f, 0.000505f,
+ 0.000648f, 0.000772f, 0.000813f, 0.001031f, 0.001107f, 0.001184f, 0.001335f, 0.001391f, 0.001451f, 0.001633f, 0.001798f, 0.001874f,
+ 0.002090f, 0.002192f, 0.002392f, 0.002464f, 0.002707f, 0.002895f, 0.003044f, 0.003206f, 0.003468f, 0.003666f, 0.003887f, 0.004261f,
+ 0.004524f, 0.004898f, 0.005379f, 0.005711f, 0.006130f, 0.006721f, 0.007267f, 0.007912f, 0.008659f, 0.009575f, 0.010475f, 0.011749f,
+ 0.013252f, 0.014717f, 0.016815f, 0.019302f, 0.022369f, 0.025955f, 0.030502f, 0.036285f, 0.043579f, 0.052795f, 0.064453f, 0.078735f,
+ 0.096497f, 0.118591f, 0.145508f, 0.177368f, 0.213989f, 0.256592f, 0.683105f, 0.707031f, 0.710938f, 0.713379f, 0.714844f, 0.714844f,
+ 0.000223f, 0.000239f, 0.000286f, 0.000476f, 0.000580f, 0.000647f, 0.000715f, 0.000843f, 0.000914f, 0.000950f, 0.001090f, 0.001163f,
+ 0.001259f, 0.001328f, 0.001392f, 0.001560f, 0.001549f, 0.001775f, 0.001868f, 0.001999f, 0.002199f, 0.002235f, 0.002436f, 0.002575f,
+ 0.002842f, 0.002892f, 0.003111f, 0.003401f, 0.003563f, 0.003887f, 0.004196f, 0.004505f, 0.004791f, 0.005142f, 0.005684f, 0.006153f,
+ 0.006710f, 0.007378f, 0.008064f, 0.008881f, 0.009979f, 0.011177f, 0.012779f, 0.014435f, 0.016647f, 0.019150f, 0.022583f, 0.027252f,
+ 0.033051f, 0.040039f, 0.049561f, 0.061340f, 0.076843f, 0.096313f, 0.120544f, 0.150513f, 0.185547f, 0.227173f, 0.668457f, 0.692383f,
+ 0.696289f, 0.698242f, 0.699219f, 0.701172f, 0.000000f, 0.000109f, 0.000315f, 0.000449f, 0.000511f, 0.000507f, 0.000538f, 0.000653f,
+ 0.000724f, 0.000749f, 0.000830f, 0.000893f, 0.001007f, 0.001079f, 0.001189f, 0.001163f, 0.001335f, 0.001307f, 0.001502f, 0.001575f,
+ 0.001627f, 0.001778f, 0.001933f, 0.002029f, 0.002155f, 0.002254f, 0.002401f, 0.002535f, 0.002829f, 0.002943f, 0.003143f, 0.003422f,
+ 0.003710f, 0.003990f, 0.004318f, 0.004627f, 0.005108f, 0.005585f, 0.006142f, 0.006641f, 0.007378f, 0.008354f, 0.009430f, 0.010628f,
+ 0.012123f, 0.014015f, 0.016541f, 0.019836f, 0.023849f, 0.029312f, 0.036774f, 0.046356f, 0.058868f, 0.075562f, 0.097107f, 0.124634f,
+ 0.157837f, 0.197754f, 0.653320f, 0.677734f, 0.682129f, 0.684082f, 0.685547f, 0.684570f, 0.000166f, 0.000195f, 0.000256f, 0.000372f,
+ 0.000386f, 0.000415f, 0.000515f, 0.000432f, 0.000579f, 0.000606f, 0.000706f, 0.000745f, 0.000764f, 0.000837f, 0.000853f, 0.000993f,
+ 0.001034f, 0.001066f, 0.001156f, 0.001203f, 0.001339f, 0.001418f, 0.001470f, 0.001612f, 0.001614f, 0.001707f, 0.001850f, 0.001986f,
+ 0.002151f, 0.002254f, 0.002499f, 0.002560f, 0.002794f, 0.003000f, 0.003212f, 0.003510f, 0.003761f, 0.004086f, 0.004475f, 0.004967f,
+ 0.005428f, 0.006134f, 0.006840f, 0.007786f, 0.008858f, 0.010033f, 0.011909f, 0.014137f, 0.016907f, 0.020767f, 0.025894f, 0.033386f,
+ 0.043274f, 0.056854f, 0.075439f, 0.099548f, 0.130737f, 0.169434f, 0.634277f, 0.661133f, 0.667480f, 0.668945f, 0.669922f, 0.670898f,
+ 0.000115f, 0.000119f, 0.000230f, 0.000304f, 0.000221f, 0.000380f, 0.000322f, 0.000351f, 0.000453f, 0.000527f, 0.000535f, 0.000558f,
+ 0.000595f, 0.000675f, 0.000707f, 0.000670f, 0.000776f, 0.000812f, 0.000839f, 0.000911f, 0.000974f, 0.001033f, 0.001082f, 0.001154f,
+ 0.001209f, 0.001268f, 0.001416f, 0.001432f, 0.001607f, 0.001775f, 0.001877f, 0.001911f, 0.002041f, 0.002207f, 0.002380f, 0.002563f,
+ 0.002741f, 0.002956f, 0.003281f, 0.003513f, 0.003902f, 0.004353f, 0.004803f, 0.005405f, 0.006256f, 0.007072f, 0.008263f, 0.009659f,
+ 0.011627f, 0.014221f, 0.017792f, 0.022919f, 0.030075f, 0.040497f, 0.055878f, 0.076721f, 0.104980f, 0.141357f, 0.618652f, 0.644531f,
+ 0.650391f, 0.652832f, 0.653320f, 0.654785f, 0.000000f, 0.000122f, 0.000142f, 0.000227f, 0.000248f, 0.000246f, 0.000296f, 0.000254f,
+ 0.000308f, 0.000329f, 0.000387f, 0.000437f, 0.000443f, 0.000504f, 0.000515f, 0.000535f, 0.000566f, 0.000592f, 0.000618f, 0.000641f,
+ 0.000706f, 0.000746f, 0.000787f, 0.000839f, 0.000878f, 0.000920f, 0.001043f, 0.001041f, 0.001136f, 0.001199f, 0.001258f, 0.001393f,
+ 0.001428f, 0.001549f, 0.001632f, 0.001856f, 0.001945f, 0.002079f, 0.002310f, 0.002489f, 0.002708f, 0.002996f, 0.003315f, 0.003759f,
+ 0.004177f, 0.004803f, 0.005619f, 0.006527f, 0.007793f, 0.009468f, 0.011917f, 0.015152f, 0.019897f, 0.027298f, 0.038910f, 0.055908f,
+ 0.080811f, 0.114563f, 0.600586f, 0.628906f, 0.634277f, 0.636719f, 0.637207f, 0.638672f, 0.000000f, 0.000000f, 0.000106f, 0.000137f,
+ 0.000172f, 0.000211f, 0.000189f, 0.000226f, 0.000230f, 0.000248f, 0.000293f, 0.000251f, 0.000264f, 0.000321f, 0.000343f, 0.000399f,
+ 0.000368f, 0.000401f, 0.000499f, 0.000479f, 0.000498f, 0.000526f, 0.000550f, 0.000595f, 0.000631f, 0.000645f, 0.000726f, 0.000717f,
+ 0.000786f, 0.000902f, 0.000865f, 0.000916f, 0.000989f, 0.001059f, 0.001165f, 0.001246f, 0.001279f, 0.001408f, 0.001566f, 0.001628f,
+ 0.001808f, 0.001991f, 0.002165f, 0.002466f, 0.002766f, 0.003084f, 0.003534f, 0.004250f, 0.005016f, 0.006130f, 0.007584f, 0.009605f,
+ 0.012718f, 0.017395f, 0.025131f, 0.038269f, 0.058899f, 0.089661f, 0.582031f, 0.611328f, 0.616699f, 0.620117f, 0.621094f, 0.622559f,
+ 0.000000f, 0.000108f, 0.000104f, 0.000095f, 0.000117f, 0.000117f, 0.000122f, 0.000143f, 0.000147f, 0.000164f, 0.000174f, 0.000216f,
+ 0.000191f, 0.000227f, 0.000241f, 0.000250f, 0.000257f, 0.000271f, 0.000301f, 0.000298f, 0.000317f, 0.000344f, 0.000370f, 0.000392f,
+ 0.000404f, 0.000427f, 0.000491f, 0.000491f, 0.000519f, 0.000535f, 0.000611f, 0.000601f, 0.000668f, 0.000698f, 0.000767f, 0.000838f,
+ 0.000865f, 0.000895f, 0.000993f, 0.001066f, 0.001161f, 0.001242f, 0.001415f, 0.001521f, 0.001743f, 0.001901f, 0.002209f, 0.002523f,
+ 0.003038f, 0.003601f, 0.004478f, 0.005699f, 0.007545f, 0.010437f, 0.015175f, 0.023682f, 0.039429f, 0.066406f, 0.563477f, 0.593262f,
+ 0.598633f, 0.602051f, 0.602539f, 0.603516f, 0.000000f, 0.000101f, 0.000093f, 0.000087f, 0.000082f, 0.000078f, 0.000084f, 0.000087f,
+ 0.000093f, 0.000094f, 0.000099f, 0.000104f, 0.000114f, 0.000123f, 0.000158f, 0.000163f, 0.000166f, 0.000178f, 0.000177f, 0.000214f,
+ 0.000191f, 0.000208f, 0.000212f, 0.000247f, 0.000268f, 0.000263f, 0.000272f, 0.000287f, 0.000310f, 0.000336f, 0.000353f, 0.000368f,
+ 0.000396f, 0.000408f, 0.000453f, 0.000476f, 0.000511f, 0.000540f, 0.000615f, 0.000635f, 0.000682f, 0.000751f, 0.000812f, 0.000908f,
+ 0.000987f, 0.001116f, 0.001278f, 0.001431f, 0.001702f, 0.002047f, 0.002512f, 0.003126f, 0.004181f, 0.005817f, 0.008553f, 0.013489f,
+ 0.023697f, 0.045288f, 0.544922f, 0.575684f, 0.581543f, 0.584473f, 0.585938f, 0.587402f, 0.000109f, 0.000091f, 0.000081f, 0.000075f,
+ 0.000070f, 0.000067f, 0.000064f, 0.000061f, 0.000057f, 0.000054f, 0.000058f, 0.000075f, 0.000062f, 0.000064f, 0.000085f, 0.000068f,
+ 0.000092f, 0.000094f, 0.000103f, 0.000110f, 0.000113f, 0.000119f, 0.000141f, 0.000141f, 0.000148f, 0.000152f, 0.000159f, 0.000164f,
+ 0.000175f, 0.000188f, 0.000184f, 0.000218f, 0.000233f, 0.000223f, 0.000253f, 0.000265f, 0.000282f, 0.000321f, 0.000322f, 0.000351f,
+ 0.000371f, 0.000405f, 0.000443f, 0.000478f, 0.000515f, 0.000571f, 0.000652f, 0.000733f, 0.000856f, 0.001011f, 0.001227f, 0.001531f,
+ 0.002029f, 0.002817f, 0.004215f, 0.006874f, 0.012390f, 0.027405f, 0.525879f, 0.557129f, 0.563477f, 0.566895f, 0.568848f, 0.569824f,
+ 0.000094f, 0.000073f, 0.000065f, 0.000060f, 0.000055f, 0.000052f, 0.000049f, 0.000048f, 0.000046f, 0.000045f, 0.000042f, 0.000040f,
+ 0.000040f, 0.000037f, 0.000035f, 0.000035f, 0.000042f, 0.000036f, 0.000049f, 0.000051f, 0.000055f, 0.000056f, 0.000059f, 0.000062f,
+ 0.000064f, 0.000078f, 0.000071f, 0.000079f, 0.000088f, 0.000091f, 0.000093f, 0.000099f, 0.000103f, 0.000110f, 0.000125f, 0.000123f,
+ 0.000127f, 0.000151f, 0.000151f, 0.000161f, 0.000169f, 0.000179f, 0.000204f, 0.000219f, 0.000240f, 0.000267f, 0.000294f, 0.000321f,
+ 0.000378f, 0.000438f, 0.000524f, 0.000628f, 0.000818f, 0.001125f, 0.001693f, 0.002888f, 0.005638f, 0.013580f, 0.505859f, 0.539062f,
+ 0.544922f, 0.548340f, 0.550293f, 0.550781f, 0.000064f, 0.000048f, 0.000041f, 0.000037f, 0.000035f, 0.000034f, 0.000032f, 0.000031f,
+ 0.000030f, 0.000029f, 0.000028f, 0.000028f, 0.000027f, 0.000027f, 0.000026f, 0.000025f, 0.000024f, 0.000023f, 0.000022f, 0.000021f,
+ 0.000020f, 0.000019f, 0.000019f, 0.000023f, 0.000021f, 0.000022f, 0.000026f, 0.000029f, 0.000032f, 0.000031f, 0.000036f, 0.000037f,
+ 0.000036f, 0.000044f, 0.000046f, 0.000048f, 0.000052f, 0.000054f, 0.000056f, 0.000061f, 0.000070f, 0.000073f, 0.000076f, 0.000081f,
+ 0.000082f, 0.000095f, 0.000105f, 0.000120f, 0.000126f, 0.000143f, 0.000173f, 0.000203f, 0.000267f, 0.000346f, 0.000505f, 0.000853f,
+ 0.001829f, 0.005222f, 0.487061f, 0.519531f, 0.527344f, 0.529785f, 0.531738f, 0.532715f, 0.000000f, 0.000002f, 0.000003f, 0.000004f,
+ 0.000008f, 0.000008f, 0.000008f, 0.000010f, 0.000009f, 0.000010f, 0.000010f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000011f,
+ 0.000012f, 0.000011f, 0.000012f, 0.000011f, 0.000012f, 0.000012f, 0.000012f, 0.000011f, 0.000011f, 0.000010f, 0.000010f, 0.000010f,
+ 0.000009f, 0.000009f, 0.000009f, 0.000008f, 0.000008f, 0.000007f, 0.000008f, 0.000009f, 0.000010f, 0.000012f, 0.000012f, 0.000015f,
+ 0.000013f, 0.000015f, 0.000018f, 0.000020f, 0.000021f, 0.000022f, 0.000022f, 0.000024f, 0.000026f, 0.000027f, 0.000034f, 0.000043f,
+ 0.000049f, 0.000065f, 0.000089f, 0.000138f, 0.000293f, 0.001143f, 0.466553f, 0.500488f, 0.508301f, 0.510742f, 0.512207f, 0.513672f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000003f, 0.000004f, 0.000006f, 0.000023f, 0.446777f, 0.482178f,
+ 0.489746f, 0.492676f, 0.494629f, 0.496094f,
+ },
+ {
+ 0.032318f, 0.095032f, 0.152344f, 0.205322f, 0.254883f, 0.299316f, 0.342041f, 0.380859f, 0.416504f, 0.449707f, 0.481201f, 0.508789f,
+ 0.537109f, 0.562012f, 0.584961f, 0.608398f, 0.628418f, 0.648926f, 0.666504f, 0.684570f, 0.701172f, 0.716797f, 0.731934f, 0.746094f,
+ 0.759766f, 0.770996f, 0.784668f, 0.795898f, 0.806641f, 0.817871f, 0.827637f, 0.837402f, 0.846680f, 0.855469f, 0.863770f, 0.872559f,
+ 0.879883f, 0.887695f, 0.895508f, 0.901367f, 0.909180f, 0.915527f, 0.921387f, 0.927734f, 0.934082f, 0.939453f, 0.944824f, 0.950684f,
+ 0.955566f, 0.960449f, 0.965332f, 0.969238f, 0.974121f, 0.978516f, 0.982910f, 0.986816f, 0.990723f, 0.994629f, 0.994629f, 0.987793f,
+ 0.981934f, 0.976562f, 0.971680f, 0.966797f, 0.025833f, 0.076965f, 0.125854f, 0.173096f, 0.217896f, 0.259766f, 0.299561f, 0.338135f,
+ 0.372559f, 0.407471f, 0.437500f, 0.468262f, 0.496582f, 0.522949f, 0.547852f, 0.571289f, 0.593750f, 0.614746f, 0.633789f, 0.652832f,
+ 0.671387f, 0.687988f, 0.705078f, 0.719727f, 0.734863f, 0.749023f, 0.761719f, 0.774414f, 0.786621f, 0.797363f, 0.808594f, 0.818848f,
+ 0.829590f, 0.838867f, 0.848633f, 0.858398f, 0.865723f, 0.874512f, 0.881836f, 0.890137f, 0.897949f, 0.904297f, 0.910645f, 0.917480f,
+ 0.923828f, 0.929688f, 0.935547f, 0.941895f, 0.947266f, 0.952637f, 0.957520f, 0.962402f, 0.967285f, 0.971680f, 0.976562f, 0.980957f,
+ 0.984863f, 0.989258f, 0.992676f, 0.985840f, 0.979980f, 0.975098f, 0.970703f, 0.966309f, 0.020828f, 0.063049f, 0.104797f, 0.146606f,
+ 0.187134f, 0.225464f, 0.263916f, 0.299072f, 0.333252f, 0.366943f, 0.398438f, 0.429199f, 0.457031f, 0.484131f, 0.509766f, 0.534668f,
+ 0.559082f, 0.579590f, 0.600586f, 0.622070f, 0.640625f, 0.659180f, 0.676758f, 0.692383f, 0.708984f, 0.722656f, 0.737793f, 0.751465f,
+ 0.764648f, 0.776367f, 0.789062f, 0.801270f, 0.811523f, 0.821289f, 0.832031f, 0.841309f, 0.850586f, 0.860352f, 0.868652f, 0.876953f,
+ 0.884766f, 0.892090f, 0.899902f, 0.906738f, 0.913086f, 0.920410f, 0.927246f, 0.933105f, 0.938477f, 0.944336f, 0.950195f, 0.955078f,
+ 0.959961f, 0.965332f, 0.970215f, 0.975098f, 0.979492f, 0.983887f, 0.989746f, 0.983398f, 0.978516f, 0.973633f, 0.969238f, 0.964844f,
+ 0.017273f, 0.052429f, 0.088745f, 0.124207f, 0.160034f, 0.195068f, 0.230103f, 0.263916f, 0.297119f, 0.329102f, 0.360596f, 0.390625f,
+ 0.418945f, 0.446289f, 0.472656f, 0.498535f, 0.521973f, 0.545898f, 0.567871f, 0.588867f, 0.609375f, 0.629395f, 0.646973f, 0.664551f,
+ 0.681641f, 0.698242f, 0.712402f, 0.727539f, 0.741699f, 0.755371f, 0.768555f, 0.780762f, 0.792480f, 0.803711f, 0.814941f, 0.825195f,
+ 0.834961f, 0.844727f, 0.854004f, 0.863281f, 0.871094f, 0.879883f, 0.887695f, 0.895508f, 0.902832f, 0.909668f, 0.916504f, 0.923828f,
+ 0.929688f, 0.936035f, 0.941895f, 0.947754f, 0.952637f, 0.958496f, 0.963379f, 0.968750f, 0.973633f, 0.978027f, 0.986816f, 0.980957f,
+ 0.976562f, 0.972168f, 0.967285f, 0.963379f, 0.014076f, 0.043915f, 0.074951f, 0.106140f, 0.137573f, 0.169189f, 0.201416f, 0.233154f,
+ 0.264648f, 0.295166f, 0.324707f, 0.354248f, 0.381836f, 0.410156f, 0.436279f, 0.462891f, 0.487793f, 0.510742f, 0.534180f, 0.556152f,
+ 0.576660f, 0.598145f, 0.616211f, 0.636719f, 0.653320f, 0.670410f, 0.687500f, 0.703125f, 0.718262f, 0.733398f, 0.746582f, 0.760742f,
+ 0.772949f, 0.785156f, 0.796875f, 0.808105f, 0.818848f, 0.829590f, 0.838867f, 0.848145f, 0.857910f, 0.867188f, 0.875977f, 0.883301f,
+ 0.891602f, 0.899414f, 0.906738f, 0.913086f, 0.919922f, 0.926270f, 0.932617f, 0.938477f, 0.944824f, 0.951660f, 0.957520f, 0.961914f,
+ 0.967285f, 0.972168f, 0.984863f, 0.979004f, 0.974609f, 0.970215f, 0.966309f, 0.961914f, 0.012077f, 0.037445f, 0.063660f, 0.090881f,
+ 0.118774f, 0.147827f, 0.176636f, 0.206055f, 0.234253f, 0.262939f, 0.291504f, 0.320312f, 0.347168f, 0.374756f, 0.401367f, 0.427734f,
+ 0.451904f, 0.477051f, 0.500488f, 0.523438f, 0.545898f, 0.566406f, 0.587402f, 0.605957f, 0.624512f, 0.643555f, 0.662109f, 0.676758f,
+ 0.693848f, 0.708984f, 0.724609f, 0.738770f, 0.751465f, 0.765137f, 0.777344f, 0.790039f, 0.800781f, 0.812500f, 0.823242f, 0.833984f,
+ 0.842773f, 0.853027f, 0.861816f, 0.871094f, 0.879395f, 0.887695f, 0.895508f, 0.903320f, 0.910156f, 0.917969f, 0.924316f, 0.931152f,
+ 0.937988f, 0.943848f, 0.949219f, 0.955566f, 0.960449f, 0.966309f, 0.981445f, 0.977051f, 0.972168f, 0.968262f, 0.964355f, 0.960938f,
+ 0.010445f, 0.032562f, 0.054657f, 0.078613f, 0.103333f, 0.128540f, 0.153564f, 0.181274f, 0.207520f, 0.234619f, 0.261475f, 0.288818f,
+ 0.315674f, 0.342041f, 0.368408f, 0.394287f, 0.418945f, 0.443604f, 0.467773f, 0.490479f, 0.512695f, 0.534180f, 0.555664f, 0.575684f,
+ 0.596191f, 0.616211f, 0.633301f, 0.651855f, 0.668457f, 0.685547f, 0.701172f, 0.714844f, 0.729492f, 0.743652f, 0.758301f, 0.770996f,
+ 0.783203f, 0.794922f, 0.806641f, 0.817383f, 0.827637f, 0.838867f, 0.847656f, 0.857422f, 0.866699f, 0.875000f, 0.884277f, 0.892578f,
+ 0.900391f, 0.907227f, 0.914551f, 0.922363f, 0.929199f, 0.935059f, 0.941895f, 0.948242f, 0.953125f, 0.959473f, 0.978516f, 0.974609f,
+ 0.970215f, 0.966309f, 0.962402f, 0.958984f, 0.009117f, 0.027466f, 0.047424f, 0.067871f, 0.089783f, 0.112244f, 0.135376f, 0.159668f,
+ 0.184082f, 0.209106f, 0.233887f, 0.259277f, 0.285400f, 0.311523f, 0.336182f, 0.360840f, 0.385986f, 0.410889f, 0.435059f, 0.458252f,
+ 0.480713f, 0.503418f, 0.524902f, 0.546387f, 0.566895f, 0.586426f, 0.605469f, 0.624512f, 0.642578f, 0.659668f, 0.676758f, 0.692383f,
+ 0.708008f, 0.722168f, 0.736816f, 0.749512f, 0.763184f, 0.776855f, 0.789062f, 0.800781f, 0.812012f, 0.823730f, 0.833496f, 0.843750f,
+ 0.854004f, 0.863281f, 0.872559f, 0.880371f, 0.889648f, 0.896973f, 0.905762f, 0.912598f, 0.919922f, 0.927734f, 0.934082f, 0.940918f,
+ 0.946289f, 0.952637f, 0.976074f, 0.972168f, 0.967773f, 0.963867f, 0.960938f, 0.957031f, 0.007561f, 0.024231f, 0.041077f, 0.059631f,
+ 0.078369f, 0.098145f, 0.119507f, 0.140747f, 0.163208f, 0.185913f, 0.209839f, 0.233154f, 0.257324f, 0.281494f, 0.305908f, 0.330566f,
+ 0.354736f, 0.378906f, 0.402588f, 0.425781f, 0.449219f, 0.471924f, 0.494385f, 0.516602f, 0.536621f, 0.557617f, 0.576660f, 0.596680f,
+ 0.616211f, 0.632812f, 0.650879f, 0.668457f, 0.684082f, 0.700684f, 0.715332f, 0.729492f, 0.744141f, 0.757812f, 0.771973f, 0.783691f,
+ 0.796387f, 0.807129f, 0.818359f, 0.829590f, 0.840820f, 0.850098f, 0.859375f, 0.868652f, 0.877930f, 0.886719f, 0.894531f, 0.903320f,
+ 0.910645f, 0.918945f, 0.925781f, 0.932617f, 0.939453f, 0.945801f, 0.972656f, 0.969727f, 0.965820f, 0.961914f, 0.958496f, 0.955078f,
+ 0.006832f, 0.020676f, 0.036224f, 0.051758f, 0.069214f, 0.086609f, 0.105225f, 0.124146f, 0.144653f, 0.165527f, 0.186646f, 0.209106f,
+ 0.232178f, 0.254883f, 0.277588f, 0.301758f, 0.325195f, 0.348633f, 0.371826f, 0.395264f, 0.418213f, 0.440674f, 0.463135f, 0.485596f,
+ 0.506348f, 0.527832f, 0.548340f, 0.567871f, 0.587891f, 0.606934f, 0.625977f, 0.642578f, 0.660645f, 0.677734f, 0.692871f, 0.708008f,
+ 0.723633f, 0.737793f, 0.752441f, 0.765137f, 0.778320f, 0.791504f, 0.802734f, 0.814453f, 0.825684f, 0.835449f, 0.847168f, 0.856934f,
+ 0.866699f, 0.875488f, 0.884766f, 0.893066f, 0.901367f, 0.910156f, 0.917480f, 0.924805f, 0.932129f, 0.938965f, 0.970215f, 0.966797f,
+ 0.963379f, 0.959961f, 0.956543f, 0.953125f, 0.006050f, 0.018585f, 0.031860f, 0.045807f, 0.060883f, 0.076538f, 0.093323f, 0.109985f,
+ 0.128174f, 0.147949f, 0.167480f, 0.186768f, 0.208496f, 0.230591f, 0.252441f, 0.274170f, 0.297363f, 0.319824f, 0.342773f, 0.365723f,
+ 0.388672f, 0.411133f, 0.433350f, 0.455811f, 0.477295f, 0.498291f, 0.519531f, 0.539551f, 0.560059f, 0.580566f, 0.599121f, 0.617676f,
+ 0.635254f, 0.653320f, 0.669434f, 0.686523f, 0.702148f, 0.717773f, 0.732422f, 0.747070f, 0.760742f, 0.773926f, 0.786621f, 0.798340f,
+ 0.811035f, 0.822754f, 0.833008f, 0.843750f, 0.854004f, 0.863770f, 0.873047f, 0.882812f, 0.891602f, 0.900879f, 0.908691f, 0.916504f,
+ 0.924316f, 0.931152f, 0.966309f, 0.964355f, 0.961426f, 0.957520f, 0.954102f, 0.951172f, 0.005352f, 0.016388f, 0.027985f, 0.040222f,
+ 0.053436f, 0.067261f, 0.082520f, 0.098022f, 0.114319f, 0.131836f, 0.150146f, 0.167969f, 0.187744f, 0.208008f, 0.228271f, 0.249634f,
+ 0.270996f, 0.292969f, 0.314697f, 0.337158f, 0.359375f, 0.380859f, 0.403809f, 0.426025f, 0.447510f, 0.469482f, 0.490967f, 0.511719f,
+ 0.532227f, 0.552734f, 0.571777f, 0.591309f, 0.609375f, 0.628418f, 0.645508f, 0.663086f, 0.680664f, 0.696289f, 0.711426f, 0.727051f,
+ 0.741699f, 0.755859f, 0.768555f, 0.782227f, 0.795410f, 0.807617f, 0.818359f, 0.830078f, 0.841309f, 0.851074f, 0.861816f, 0.871582f,
+ 0.880859f, 0.890625f, 0.898438f, 0.907715f, 0.915527f, 0.923828f, 0.962402f, 0.961914f, 0.958496f, 0.955078f, 0.951172f, 0.948730f,
+ 0.004700f, 0.014397f, 0.025208f, 0.035675f, 0.047485f, 0.060120f, 0.073242f, 0.087097f, 0.102173f, 0.117249f, 0.133789f, 0.150513f,
+ 0.168823f, 0.186890f, 0.206665f, 0.225830f, 0.246216f, 0.267334f, 0.288574f, 0.309814f, 0.331299f, 0.353271f, 0.375244f, 0.396729f,
+ 0.418701f, 0.440674f, 0.461182f, 0.483398f, 0.504883f, 0.524902f, 0.544434f, 0.564941f, 0.584473f, 0.603027f, 0.621582f, 0.639648f,
+ 0.656738f, 0.673828f, 0.690430f, 0.705566f, 0.721680f, 0.736816f, 0.750977f, 0.764648f, 0.778809f, 0.791016f, 0.804688f, 0.815918f,
+ 0.826660f, 0.838867f, 0.850098f, 0.860840f, 0.870605f, 0.879883f, 0.889648f, 0.898438f, 0.907227f, 0.915527f, 0.959961f, 0.958496f,
+ 0.955078f, 0.952148f, 0.949219f, 0.946777f, 0.004238f, 0.013138f, 0.022202f, 0.031769f, 0.042358f, 0.053040f, 0.065613f, 0.077637f,
+ 0.090759f, 0.104980f, 0.119995f, 0.135498f, 0.151855f, 0.167725f, 0.186646f, 0.205078f, 0.224121f, 0.243042f, 0.263672f, 0.283936f,
+ 0.305176f, 0.326416f, 0.347168f, 0.369629f, 0.390625f, 0.411865f, 0.433350f, 0.454590f, 0.475830f, 0.497314f, 0.517578f, 0.537109f,
+ 0.557617f, 0.577637f, 0.596191f, 0.615723f, 0.632812f, 0.651367f, 0.668945f, 0.685059f, 0.701172f, 0.716797f, 0.732422f, 0.747559f,
+ 0.761230f, 0.775391f, 0.788574f, 0.800781f, 0.813965f, 0.824707f, 0.837402f, 0.848145f, 0.859375f, 0.869141f, 0.879395f, 0.889160f,
+ 0.897949f, 0.906250f, 0.956055f, 0.955566f, 0.952148f, 0.950195f, 0.947266f, 0.943848f, 0.003944f, 0.011490f, 0.019943f, 0.028748f,
+ 0.037964f, 0.047485f, 0.058014f, 0.069702f, 0.081360f, 0.093994f, 0.107361f, 0.121277f, 0.136353f, 0.151978f, 0.167480f, 0.185669f,
+ 0.202637f, 0.222168f, 0.240601f, 0.259766f, 0.279541f, 0.300293f, 0.321533f, 0.342285f, 0.362549f, 0.384033f, 0.405762f, 0.427002f,
+ 0.447998f, 0.469238f, 0.490479f, 0.510742f, 0.532227f, 0.551758f, 0.570312f, 0.589844f, 0.609375f, 0.628418f, 0.645508f, 0.662598f,
+ 0.680664f, 0.696777f, 0.712402f, 0.728516f, 0.744141f, 0.757812f, 0.771973f, 0.785156f, 0.798828f, 0.811523f, 0.824707f, 0.835449f,
+ 0.847168f, 0.858887f, 0.869141f, 0.878906f, 0.888672f, 0.897949f, 0.952148f, 0.952148f, 0.949219f, 0.946777f, 0.944336f, 0.941406f,
+ 0.003448f, 0.010574f, 0.017807f, 0.025558f, 0.033875f, 0.042633f, 0.052307f, 0.062134f, 0.073059f, 0.084045f, 0.096375f, 0.109192f,
+ 0.122803f, 0.136475f, 0.151367f, 0.167603f, 0.183960f, 0.201416f, 0.218506f, 0.237427f, 0.256104f, 0.275635f, 0.295410f, 0.315918f,
+ 0.336426f, 0.357178f, 0.378906f, 0.399414f, 0.421143f, 0.442139f, 0.462891f, 0.484375f, 0.504883f, 0.524902f, 0.544922f, 0.564941f,
+ 0.583984f, 0.603516f, 0.622070f, 0.640625f, 0.658691f, 0.675781f, 0.692871f, 0.709473f, 0.725098f, 0.740234f, 0.754883f, 0.769531f,
+ 0.783203f, 0.796875f, 0.809570f, 0.823242f, 0.834473f, 0.846191f, 0.857422f, 0.868164f, 0.878906f, 0.889160f, 0.948730f, 0.948242f,
+ 0.946289f, 0.944336f, 0.940918f, 0.938477f, 0.003017f, 0.009422f, 0.015900f, 0.023041f, 0.030380f, 0.038574f, 0.047150f, 0.055969f,
+ 0.065735f, 0.075684f, 0.086426f, 0.098267f, 0.110535f, 0.123047f, 0.136841f, 0.151489f, 0.166138f, 0.182495f, 0.198975f, 0.216553f,
+ 0.233765f, 0.252930f, 0.271484f, 0.291016f, 0.310547f, 0.331299f, 0.351562f, 0.372559f, 0.393555f, 0.415039f, 0.435059f, 0.457275f,
+ 0.477539f, 0.498047f, 0.519043f, 0.538574f, 0.559570f, 0.579102f, 0.598633f, 0.617188f, 0.635742f, 0.654297f, 0.672363f, 0.688965f,
+ 0.706055f, 0.721191f, 0.737793f, 0.752930f, 0.768066f, 0.782227f, 0.795898f, 0.809082f, 0.821289f, 0.833496f, 0.846191f, 0.857422f,
+ 0.869141f, 0.879883f, 0.944824f, 0.945312f, 0.942871f, 0.940918f, 0.938477f, 0.936035f, 0.002802f, 0.008575f, 0.014763f, 0.020844f,
+ 0.027557f, 0.034576f, 0.042084f, 0.050476f, 0.058990f, 0.067993f, 0.077942f, 0.087952f, 0.098999f, 0.111267f, 0.122803f, 0.136719f,
+ 0.150269f, 0.165527f, 0.180542f, 0.196533f, 0.213257f, 0.230591f, 0.248779f, 0.267334f, 0.286865f, 0.306152f, 0.325928f, 0.346436f,
+ 0.367188f, 0.387695f, 0.409424f, 0.429199f, 0.450195f, 0.471680f, 0.492920f, 0.513184f, 0.534180f, 0.553711f, 0.573730f, 0.593750f,
+ 0.612793f, 0.631836f, 0.649414f, 0.668457f, 0.685059f, 0.703125f, 0.719238f, 0.735352f, 0.750000f, 0.766113f, 0.781738f, 0.794434f,
+ 0.808105f, 0.821777f, 0.833984f, 0.846191f, 0.858398f, 0.870117f, 0.940918f, 0.941895f, 0.939941f, 0.937500f, 0.935059f, 0.932617f,
+ 0.002573f, 0.007603f, 0.013100f, 0.018799f, 0.024719f, 0.031372f, 0.038147f, 0.045105f, 0.052795f, 0.061127f, 0.069519f, 0.079529f,
+ 0.089355f, 0.099976f, 0.111084f, 0.123718f, 0.136353f, 0.148926f, 0.163574f, 0.178345f, 0.194214f, 0.210083f, 0.227783f, 0.245361f,
+ 0.263672f, 0.282471f, 0.301758f, 0.321533f, 0.341797f, 0.361816f, 0.383057f, 0.403320f, 0.424316f, 0.445557f, 0.466797f, 0.487061f,
+ 0.507812f, 0.528809f, 0.549805f, 0.569336f, 0.589844f, 0.608887f, 0.627930f, 0.646973f, 0.665527f, 0.682129f, 0.700195f, 0.717773f,
+ 0.732910f, 0.749512f, 0.765137f, 0.779785f, 0.794434f, 0.808105f, 0.821777f, 0.834473f, 0.847168f, 0.859375f, 0.936523f, 0.937988f,
+ 0.936035f, 0.933594f, 0.932129f, 0.929688f, 0.002409f, 0.007107f, 0.011833f, 0.017075f, 0.022278f, 0.028351f, 0.034088f, 0.040558f,
+ 0.047943f, 0.055389f, 0.063232f, 0.072021f, 0.080322f, 0.090454f, 0.100220f, 0.111389f, 0.122986f, 0.135010f, 0.148438f, 0.162109f,
+ 0.176270f, 0.191772f, 0.207642f, 0.224121f, 0.241699f, 0.259277f, 0.278076f, 0.297363f, 0.316650f, 0.336670f, 0.356934f, 0.377686f,
+ 0.397949f, 0.418701f, 0.439941f, 0.461914f, 0.482178f, 0.502930f, 0.524414f, 0.544922f, 0.565918f, 0.585938f, 0.605957f, 0.625000f,
+ 0.643066f, 0.662109f, 0.680176f, 0.698730f, 0.715820f, 0.731934f, 0.748047f, 0.764648f, 0.780273f, 0.794434f, 0.808594f, 0.821777f,
+ 0.836914f, 0.848145f, 0.932129f, 0.934082f, 0.932617f, 0.930176f, 0.928711f, 0.926270f, 0.002066f, 0.006329f, 0.010986f, 0.015541f,
+ 0.020294f, 0.025452f, 0.030975f, 0.037201f, 0.043152f, 0.049835f, 0.056824f, 0.064331f, 0.072998f, 0.081177f, 0.090637f, 0.100525f,
+ 0.110718f, 0.122131f, 0.134033f, 0.146851f, 0.159912f, 0.173584f, 0.189331f, 0.204468f, 0.221191f, 0.237671f, 0.255615f, 0.273682f,
+ 0.292969f, 0.312012f, 0.331543f, 0.352295f, 0.372314f, 0.393311f, 0.413818f, 0.435547f, 0.456055f, 0.477539f, 0.499023f, 0.520508f,
+ 0.540039f, 0.561523f, 0.581543f, 0.602051f, 0.622070f, 0.641113f, 0.659668f, 0.678223f, 0.697266f, 0.714844f, 0.731445f, 0.748535f,
+ 0.765137f, 0.778809f, 0.794922f, 0.810059f, 0.824219f, 0.837402f, 0.926758f, 0.930176f, 0.928711f, 0.926758f, 0.924805f, 0.922852f,
+ 0.001840f, 0.005703f, 0.009918f, 0.014099f, 0.018311f, 0.023026f, 0.028000f, 0.033508f, 0.038971f, 0.045044f, 0.051880f, 0.058289f,
+ 0.065796f, 0.073425f, 0.081482f, 0.090698f, 0.100464f, 0.110413f, 0.121216f, 0.132812f, 0.145142f, 0.158203f, 0.171997f, 0.186401f,
+ 0.201538f, 0.217651f, 0.234497f, 0.251465f, 0.269287f, 0.288330f, 0.307129f, 0.327148f, 0.346924f, 0.367920f, 0.388428f, 0.409668f,
+ 0.430420f, 0.451416f, 0.474121f, 0.494873f, 0.516113f, 0.537598f, 0.558105f, 0.579102f, 0.598633f, 0.619629f, 0.639160f, 0.657715f,
+ 0.677734f, 0.695801f, 0.713867f, 0.731934f, 0.748047f, 0.764160f, 0.781738f, 0.796875f, 0.810547f, 0.826172f, 0.922363f, 0.925781f,
+ 0.924805f, 0.922852f, 0.921387f, 0.919434f, 0.001621f, 0.005188f, 0.008888f, 0.012939f, 0.016724f, 0.021271f, 0.025772f, 0.029984f,
+ 0.035553f, 0.040741f, 0.046417f, 0.052490f, 0.059265f, 0.066528f, 0.074097f, 0.081482f, 0.090271f, 0.100220f, 0.109741f, 0.120178f,
+ 0.131226f, 0.143188f, 0.156006f, 0.169189f, 0.183716f, 0.198486f, 0.214233f, 0.230713f, 0.247925f, 0.265381f, 0.284424f, 0.303711f,
+ 0.322754f, 0.342773f, 0.363525f, 0.384277f, 0.405518f, 0.427002f, 0.447754f, 0.469727f, 0.491455f, 0.512207f, 0.534180f, 0.554688f,
+ 0.576172f, 0.597168f, 0.617188f, 0.636719f, 0.657227f, 0.677734f, 0.695312f, 0.713379f, 0.731934f, 0.749512f, 0.766113f, 0.782715f,
+ 0.798340f, 0.813477f, 0.917480f, 0.920898f, 0.920410f, 0.919922f, 0.916992f, 0.915039f, 0.001581f, 0.004616f, 0.008049f, 0.011917f,
+ 0.015556f, 0.019547f, 0.023270f, 0.027908f, 0.031860f, 0.036652f, 0.041992f, 0.047577f, 0.053528f, 0.060150f, 0.066772f, 0.073914f,
+ 0.082153f, 0.090088f, 0.099304f, 0.108887f, 0.118835f, 0.129517f, 0.141357f, 0.154297f, 0.166992f, 0.180908f, 0.195557f, 0.210815f,
+ 0.227173f, 0.244141f, 0.261963f, 0.279785f, 0.299072f, 0.318359f, 0.338379f, 0.358887f, 0.380127f, 0.401123f, 0.422607f, 0.443848f,
+ 0.466309f, 0.487793f, 0.509277f, 0.530762f, 0.553223f, 0.573730f, 0.594727f, 0.616699f, 0.636719f, 0.656250f, 0.676270f, 0.695801f,
+ 0.713867f, 0.733398f, 0.750488f, 0.767090f, 0.784180f, 0.801270f, 0.912598f, 0.916992f, 0.916504f, 0.914551f, 0.913086f, 0.911133f,
+ 0.001476f, 0.004410f, 0.007374f, 0.010620f, 0.013931f, 0.017258f, 0.021057f, 0.024979f, 0.029144f, 0.033478f, 0.037872f, 0.042969f,
+ 0.048737f, 0.053986f, 0.060150f, 0.066895f, 0.074036f, 0.081665f, 0.089417f, 0.098083f, 0.107361f, 0.117371f, 0.127930f, 0.139648f,
+ 0.151489f, 0.164062f, 0.178589f, 0.192627f, 0.208130f, 0.223755f, 0.240601f, 0.258057f, 0.275879f, 0.295654f, 0.314697f, 0.334961f,
+ 0.354980f, 0.375977f, 0.396729f, 0.418945f, 0.440430f, 0.462402f, 0.484619f, 0.506348f, 0.528809f, 0.550781f, 0.572266f, 0.593750f,
+ 0.615234f, 0.637207f, 0.656738f, 0.676758f, 0.696289f, 0.716309f, 0.734863f, 0.752930f, 0.770508f, 0.788574f, 0.906738f, 0.911621f,
+ 0.912109f, 0.910156f, 0.908691f, 0.907227f, 0.001204f, 0.003998f, 0.006786f, 0.009850f, 0.012642f, 0.015762f, 0.019226f, 0.022751f,
+ 0.026749f, 0.030502f, 0.034698f, 0.038940f, 0.044006f, 0.048615f, 0.054352f, 0.060608f, 0.066711f, 0.073059f, 0.080505f, 0.088318f,
+ 0.097290f, 0.105835f, 0.115845f, 0.126343f, 0.137085f, 0.148804f, 0.161377f, 0.175049f, 0.189331f, 0.204346f, 0.219604f, 0.236816f,
+ 0.253662f, 0.272217f, 0.291260f, 0.310547f, 0.330811f, 0.350830f, 0.372314f, 0.393799f, 0.415771f, 0.437500f, 0.459717f, 0.481934f,
+ 0.504883f, 0.527344f, 0.549316f, 0.571777f, 0.593750f, 0.615723f, 0.636230f, 0.657715f, 0.678223f, 0.697754f, 0.718262f, 0.737793f,
+ 0.756348f, 0.774902f, 0.900879f, 0.907227f, 0.906738f, 0.905762f, 0.904297f, 0.902832f, 0.001290f, 0.003807f, 0.006207f, 0.008652f,
+ 0.011368f, 0.014618f, 0.017792f, 0.020813f, 0.023849f, 0.027588f, 0.031036f, 0.035400f, 0.039917f, 0.044250f, 0.049408f, 0.054321f,
+ 0.059937f, 0.065918f, 0.072937f, 0.079773f, 0.087463f, 0.095703f, 0.104553f, 0.113892f, 0.124146f, 0.134888f, 0.146606f, 0.159058f,
+ 0.171753f, 0.185913f, 0.201416f, 0.216309f, 0.232910f, 0.250000f, 0.268555f, 0.287354f, 0.306885f, 0.326904f, 0.347412f, 0.369141f,
+ 0.390381f, 0.412842f, 0.434570f, 0.457764f, 0.479736f, 0.502930f, 0.525879f, 0.547852f, 0.570801f, 0.592773f, 0.615723f, 0.637207f,
+ 0.659180f, 0.680176f, 0.700684f, 0.720703f, 0.740234f, 0.759766f, 0.895996f, 0.901855f, 0.901855f, 0.900879f, 0.899414f, 0.897949f,
+ 0.001030f, 0.003561f, 0.005718f, 0.008301f, 0.010582f, 0.013283f, 0.015839f, 0.018753f, 0.022156f, 0.025314f, 0.028427f, 0.032318f,
+ 0.035889f, 0.040039f, 0.044434f, 0.048737f, 0.054077f, 0.059723f, 0.065613f, 0.072083f, 0.079224f, 0.086426f, 0.094238f, 0.102966f,
+ 0.111938f, 0.122253f, 0.132568f, 0.143555f, 0.155884f, 0.168945f, 0.182861f, 0.197510f, 0.213379f, 0.229492f, 0.246948f, 0.264648f,
+ 0.283203f, 0.303467f, 0.322998f, 0.343994f, 0.365479f, 0.387451f, 0.409912f, 0.432129f, 0.455078f, 0.478760f, 0.501465f, 0.523926f,
+ 0.547852f, 0.570801f, 0.593750f, 0.616211f, 0.639160f, 0.661133f, 0.682617f, 0.703613f, 0.725098f, 0.745117f, 0.888672f, 0.896484f,
+ 0.896973f, 0.895020f, 0.895508f, 0.893555f, 0.001051f, 0.002956f, 0.005398f, 0.007523f, 0.009613f, 0.012024f, 0.014725f, 0.017059f,
+ 0.019714f, 0.022537f, 0.025681f, 0.029236f, 0.032715f, 0.036102f, 0.040100f, 0.043945f, 0.048859f, 0.053772f, 0.058838f, 0.064880f,
+ 0.070862f, 0.077576f, 0.084839f, 0.092712f, 0.101013f, 0.110229f, 0.119446f, 0.130005f, 0.141113f, 0.153198f, 0.166016f, 0.179565f,
+ 0.193970f, 0.209351f, 0.225830f, 0.242920f, 0.261230f, 0.280273f, 0.299316f, 0.320068f, 0.341309f, 0.363037f, 0.384521f, 0.407227f,
+ 0.429443f, 0.453369f, 0.477051f, 0.500977f, 0.524414f, 0.547852f, 0.571777f, 0.595215f, 0.619141f, 0.641602f, 0.664062f, 0.686035f,
+ 0.707520f, 0.729004f, 0.882812f, 0.891602f, 0.891113f, 0.890625f, 0.889160f, 0.888184f, 0.000934f, 0.002998f, 0.004883f, 0.006859f,
+ 0.009102f, 0.010925f, 0.012871f, 0.015656f, 0.017853f, 0.020767f, 0.023422f, 0.026413f, 0.029251f, 0.032593f, 0.036011f, 0.039825f,
+ 0.044495f, 0.048645f, 0.053284f, 0.058258f, 0.063782f, 0.069885f, 0.076111f, 0.083313f, 0.090881f, 0.099060f, 0.107788f, 0.117126f,
+ 0.127075f, 0.138428f, 0.150391f, 0.162720f, 0.176270f, 0.190796f, 0.206177f, 0.222290f, 0.239624f, 0.257568f, 0.276367f, 0.296387f,
+ 0.316895f, 0.338623f, 0.360352f, 0.382812f, 0.404785f, 0.428467f, 0.452148f, 0.476562f, 0.500488f, 0.524902f, 0.548828f, 0.572754f,
+ 0.597168f, 0.621094f, 0.644531f, 0.667480f, 0.689941f, 0.712402f, 0.875977f, 0.883789f, 0.884766f, 0.884766f, 0.883301f, 0.883789f,
+ 0.001108f, 0.002474f, 0.004707f, 0.006248f, 0.007744f, 0.009888f, 0.011787f, 0.014244f, 0.016205f, 0.018631f, 0.021286f, 0.023758f,
+ 0.026535f, 0.029510f, 0.032654f, 0.035919f, 0.039825f, 0.043762f, 0.047852f, 0.052368f, 0.057373f, 0.062561f, 0.068604f, 0.074707f,
+ 0.081360f, 0.088623f, 0.096802f, 0.105103f, 0.114624f, 0.124573f, 0.135498f, 0.147217f, 0.159424f, 0.172729f, 0.187378f, 0.202881f,
+ 0.219116f, 0.235962f, 0.254639f, 0.273438f, 0.293945f, 0.314453f, 0.335449f, 0.358154f, 0.380371f, 0.403564f, 0.428223f, 0.452148f,
+ 0.476074f, 0.500977f, 0.525879f, 0.550293f, 0.575195f, 0.599609f, 0.625000f, 0.649414f, 0.672852f, 0.695801f, 0.870117f, 0.879395f,
+ 0.879883f, 0.879395f, 0.878906f, 0.877441f, 0.000877f, 0.002495f, 0.003918f, 0.005669f, 0.007484f, 0.009148f, 0.010895f, 0.012634f,
+ 0.014717f, 0.017014f, 0.019302f, 0.021347f, 0.023849f, 0.026443f, 0.029388f, 0.032532f, 0.035492f, 0.039185f, 0.042816f, 0.046906f,
+ 0.051453f, 0.056122f, 0.061310f, 0.066895f, 0.072937f, 0.079590f, 0.086548f, 0.094360f, 0.103027f, 0.111938f, 0.121643f, 0.132568f,
+ 0.144043f, 0.156006f, 0.169434f, 0.184204f, 0.199341f, 0.215698f, 0.233032f, 0.251221f, 0.269531f, 0.290039f, 0.311768f, 0.333740f,
+ 0.355957f, 0.379395f, 0.402344f, 0.426758f, 0.451172f, 0.476562f, 0.501465f, 0.526855f, 0.552246f, 0.578613f, 0.603516f, 0.629395f,
+ 0.653809f, 0.679199f, 0.863281f, 0.872559f, 0.874023f, 0.873535f, 0.872559f, 0.871094f, 0.000779f, 0.002241f, 0.003813f, 0.005371f,
+ 0.006763f, 0.008186f, 0.009827f, 0.011574f, 0.013260f, 0.015274f, 0.017303f, 0.019119f, 0.021362f, 0.023972f, 0.026505f, 0.029144f,
+ 0.031860f, 0.035126f, 0.038422f, 0.041809f, 0.045929f, 0.050323f, 0.054840f, 0.059631f, 0.065002f, 0.070984f, 0.077759f, 0.084656f,
+ 0.091736f, 0.100037f, 0.109436f, 0.118835f, 0.129272f, 0.140625f, 0.152832f, 0.166138f, 0.180786f, 0.195679f, 0.211914f, 0.229736f,
+ 0.247803f, 0.267822f, 0.287598f, 0.309326f, 0.331055f, 0.354492f, 0.377686f, 0.401855f, 0.426270f, 0.451660f, 0.477051f, 0.503418f,
+ 0.529785f, 0.555664f, 0.583008f, 0.608887f, 0.635254f, 0.661133f, 0.855957f, 0.865234f, 0.866699f, 0.867188f, 0.866211f, 0.865723f,
+ 0.000778f, 0.002155f, 0.003584f, 0.004871f, 0.006149f, 0.007519f, 0.008858f, 0.010498f, 0.012100f, 0.013977f, 0.015511f, 0.017303f,
+ 0.019363f, 0.021515f, 0.023880f, 0.026230f, 0.028564f, 0.031555f, 0.034241f, 0.037476f, 0.041138f, 0.044983f, 0.048859f, 0.053436f,
+ 0.058014f, 0.063232f, 0.069214f, 0.075195f, 0.081848f, 0.089417f, 0.097168f, 0.106201f, 0.115479f, 0.126343f, 0.137695f, 0.149658f,
+ 0.162476f, 0.177002f, 0.192993f, 0.209473f, 0.226440f, 0.245239f, 0.264404f, 0.285156f, 0.306885f, 0.330078f, 0.353271f, 0.376465f,
+ 0.402100f, 0.426758f, 0.453857f, 0.479492f, 0.505859f, 0.532715f, 0.560547f, 0.587402f, 0.614258f, 0.640137f, 0.847168f, 0.858398f,
+ 0.860352f, 0.859863f, 0.859863f, 0.858887f, 0.000673f, 0.002026f, 0.003120f, 0.004242f, 0.005390f, 0.006874f, 0.008087f, 0.009346f,
+ 0.011192f, 0.012642f, 0.013855f, 0.015511f, 0.017502f, 0.019394f, 0.021301f, 0.023331f, 0.025681f, 0.028137f, 0.030792f, 0.033295f,
+ 0.036804f, 0.039917f, 0.043488f, 0.047363f, 0.051880f, 0.056580f, 0.061646f, 0.066956f, 0.072998f, 0.079407f, 0.086609f, 0.094971f,
+ 0.103027f, 0.112793f, 0.122742f, 0.134399f, 0.146118f, 0.159058f, 0.173828f, 0.188599f, 0.205444f, 0.223633f, 0.241943f, 0.262451f,
+ 0.283203f, 0.304932f, 0.328369f, 0.352051f, 0.376953f, 0.402100f, 0.428467f, 0.454834f, 0.481934f, 0.509766f, 0.537598f, 0.566406f,
+ 0.594238f, 0.622559f, 0.838867f, 0.852051f, 0.853516f, 0.853027f, 0.853027f, 0.852051f, 0.000419f, 0.001721f, 0.003044f, 0.003881f,
+ 0.005161f, 0.006329f, 0.007500f, 0.009117f, 0.009941f, 0.011147f, 0.013023f, 0.014053f, 0.015869f, 0.017181f, 0.018906f, 0.020889f,
+ 0.023026f, 0.025085f, 0.027435f, 0.029724f, 0.032440f, 0.035492f, 0.038605f, 0.042175f, 0.045898f, 0.049988f, 0.054504f, 0.059143f,
+ 0.064697f, 0.070435f, 0.076721f, 0.083984f, 0.091675f, 0.100037f, 0.109009f, 0.119629f, 0.130737f, 0.143066f, 0.156250f, 0.170654f,
+ 0.186157f, 0.202393f, 0.220825f, 0.239990f, 0.259521f, 0.281250f, 0.303467f, 0.327148f, 0.351318f, 0.376953f, 0.402832f, 0.430664f,
+ 0.458252f, 0.485596f, 0.514648f, 0.543457f, 0.572754f, 0.602051f, 0.830566f, 0.844238f, 0.845703f, 0.845703f, 0.845703f, 0.845215f,
+ 0.000503f, 0.001644f, 0.002455f, 0.003765f, 0.004906f, 0.005901f, 0.006805f, 0.007744f, 0.008789f, 0.009972f, 0.011314f, 0.012688f,
+ 0.014160f, 0.015480f, 0.016953f, 0.018555f, 0.020325f, 0.022232f, 0.024338f, 0.026535f, 0.028717f, 0.031403f, 0.034119f, 0.037384f,
+ 0.040680f, 0.044128f, 0.047943f, 0.052551f, 0.057098f, 0.062134f, 0.067871f, 0.074158f, 0.081543f, 0.088684f, 0.097107f, 0.106262f,
+ 0.116028f, 0.127563f, 0.139404f, 0.152344f, 0.167358f, 0.182739f, 0.199951f, 0.217773f, 0.237427f, 0.257812f, 0.279541f, 0.303223f,
+ 0.327148f, 0.351807f, 0.377441f, 0.405518f, 0.433105f, 0.460449f, 0.491211f, 0.520020f, 0.550293f, 0.581543f, 0.821777f, 0.835938f,
+ 0.837891f, 0.838867f, 0.838867f, 0.837891f, 0.000649f, 0.001432f, 0.002455f, 0.003469f, 0.004162f, 0.005192f, 0.006046f, 0.007053f,
+ 0.007919f, 0.009148f, 0.010185f, 0.011490f, 0.012558f, 0.013748f, 0.015083f, 0.016663f, 0.018341f, 0.019897f, 0.021561f, 0.023376f,
+ 0.025513f, 0.027725f, 0.030075f, 0.032745f, 0.035583f, 0.038544f, 0.041901f, 0.045898f, 0.049896f, 0.054443f, 0.059784f, 0.065186f,
+ 0.071228f, 0.078247f, 0.085632f, 0.093872f, 0.103088f, 0.113098f, 0.123840f, 0.135986f, 0.148682f, 0.163696f, 0.179321f, 0.196533f,
+ 0.214722f, 0.234985f, 0.256104f, 0.278320f, 0.302246f, 0.326660f, 0.352783f, 0.379395f, 0.406738f, 0.436279f, 0.465820f, 0.496338f,
+ 0.527344f, 0.559082f, 0.813477f, 0.827148f, 0.829590f, 0.830566f, 0.830566f, 0.829590f, 0.000427f, 0.001431f, 0.002077f, 0.002947f,
+ 0.004009f, 0.004860f, 0.005501f, 0.006416f, 0.007008f, 0.008171f, 0.009155f, 0.010063f, 0.011154f, 0.012474f, 0.013336f, 0.014793f,
+ 0.016006f, 0.017471f, 0.019119f, 0.020630f, 0.022079f, 0.024078f, 0.026505f, 0.028687f, 0.031128f, 0.033813f, 0.036804f, 0.040283f,
+ 0.043732f, 0.047882f, 0.052094f, 0.057281f, 0.062500f, 0.068726f, 0.075012f, 0.082581f, 0.090393f, 0.099487f, 0.109375f, 0.120728f,
+ 0.131958f, 0.145508f, 0.160278f, 0.176025f, 0.193848f, 0.212891f, 0.232788f, 0.253906f, 0.277344f, 0.302002f, 0.327637f, 0.354248f,
+ 0.382080f, 0.411621f, 0.441162f, 0.472656f, 0.504395f, 0.536621f, 0.803223f, 0.818359f, 0.821777f, 0.821777f, 0.822266f, 0.821777f,
+ 0.000574f, 0.001416f, 0.001961f, 0.002621f, 0.003527f, 0.004250f, 0.004894f, 0.005653f, 0.006340f, 0.007263f, 0.008255f, 0.008965f,
+ 0.009819f, 0.010857f, 0.011864f, 0.012917f, 0.014114f, 0.015358f, 0.016678f, 0.018005f, 0.019669f, 0.021347f, 0.023239f, 0.025070f,
+ 0.027267f, 0.029434f, 0.032318f, 0.035156f, 0.038269f, 0.041534f, 0.045624f, 0.049469f, 0.054321f, 0.059479f, 0.065369f, 0.071655f,
+ 0.078857f, 0.086853f, 0.095886f, 0.105652f, 0.116943f, 0.128662f, 0.142090f, 0.156860f, 0.173096f, 0.190918f, 0.210327f, 0.231201f,
+ 0.253418f, 0.277100f, 0.302490f, 0.328369f, 0.356445f, 0.385254f, 0.415771f, 0.446533f, 0.479736f, 0.513184f, 0.794434f, 0.810547f,
+ 0.812500f, 0.813477f, 0.812988f, 0.813477f, 0.000417f, 0.001152f, 0.002066f, 0.002480f, 0.003115f, 0.003778f, 0.004543f, 0.005001f,
+ 0.005936f, 0.006420f, 0.007130f, 0.007881f, 0.008789f, 0.009666f, 0.010605f, 0.011276f, 0.012352f, 0.013367f, 0.014626f, 0.015732f,
+ 0.017090f, 0.018509f, 0.020096f, 0.021759f, 0.023895f, 0.025681f, 0.027740f, 0.030121f, 0.032776f, 0.036011f, 0.039276f, 0.042694f,
+ 0.046906f, 0.051575f, 0.056488f, 0.061951f, 0.068481f, 0.075684f, 0.083191f, 0.092102f, 0.101990f, 0.112915f, 0.125122f, 0.138672f,
+ 0.153564f, 0.170410f, 0.188477f, 0.208008f, 0.229980f, 0.252441f, 0.276855f, 0.303711f, 0.331055f, 0.360596f, 0.391357f, 0.422607f,
+ 0.456299f, 0.490234f, 0.783203f, 0.799805f, 0.803223f, 0.804688f, 0.804199f, 0.805176f, 0.000422f, 0.000885f, 0.001743f, 0.002075f,
+ 0.002930f, 0.003460f, 0.004105f, 0.004696f, 0.005257f, 0.005753f, 0.006550f, 0.006916f, 0.007805f, 0.008308f, 0.009109f, 0.010056f,
+ 0.010918f, 0.011627f, 0.012787f, 0.013725f, 0.014732f, 0.016113f, 0.017319f, 0.018906f, 0.020264f, 0.022324f, 0.023911f, 0.026230f,
+ 0.028183f, 0.030884f, 0.033661f, 0.036865f, 0.040314f, 0.044189f, 0.048615f, 0.053284f, 0.058838f, 0.065491f, 0.072205f, 0.079651f,
+ 0.088379f, 0.098389f, 0.109314f, 0.121765f, 0.135010f, 0.150513f, 0.167358f, 0.186035f, 0.206543f, 0.228516f, 0.252197f, 0.278320f,
+ 0.305176f, 0.333496f, 0.364746f, 0.396973f, 0.430176f, 0.465820f, 0.772949f, 0.790527f, 0.794434f, 0.794922f, 0.795410f, 0.794922f,
+ 0.000211f, 0.000970f, 0.001484f, 0.002035f, 0.002586f, 0.003040f, 0.003540f, 0.004086f, 0.004696f, 0.005016f, 0.005508f, 0.006100f,
+ 0.006763f, 0.007401f, 0.008011f, 0.008675f, 0.009247f, 0.010071f, 0.011009f, 0.011940f, 0.012802f, 0.013870f, 0.014771f, 0.016281f,
+ 0.017487f, 0.018890f, 0.020584f, 0.022171f, 0.024200f, 0.026505f, 0.028870f, 0.031372f, 0.034363f, 0.037659f, 0.041412f, 0.045685f,
+ 0.050262f, 0.055664f, 0.061768f, 0.068359f, 0.076172f, 0.084717f, 0.094666f, 0.105835f, 0.117798f, 0.131958f, 0.147095f, 0.164795f,
+ 0.184326f, 0.204956f, 0.228271f, 0.253174f, 0.279785f, 0.307861f, 0.338379f, 0.370361f, 0.404785f, 0.440430f, 0.761230f, 0.780273f,
+ 0.783691f, 0.785645f, 0.786133f, 0.785156f, 0.000281f, 0.000954f, 0.001275f, 0.001745f, 0.002159f, 0.002810f, 0.003002f, 0.003622f,
+ 0.003918f, 0.004471f, 0.004776f, 0.005352f, 0.005852f, 0.006298f, 0.006989f, 0.007339f, 0.008087f, 0.008698f, 0.009499f, 0.010208f,
+ 0.010986f, 0.011871f, 0.012802f, 0.013809f, 0.014923f, 0.016129f, 0.017624f, 0.018753f, 0.020645f, 0.022156f, 0.024399f, 0.026382f,
+ 0.029037f, 0.031769f, 0.034851f, 0.038513f, 0.042542f, 0.047180f, 0.052063f, 0.058136f, 0.064819f, 0.072205f, 0.080933f, 0.090698f,
+ 0.101685f, 0.114441f, 0.128784f, 0.144287f, 0.162476f, 0.182617f, 0.203979f, 0.228149f, 0.253906f, 0.282227f, 0.312744f, 0.344482f,
+ 0.378418f, 0.415039f, 0.749023f, 0.770020f, 0.773438f, 0.774902f, 0.775391f, 0.776367f, 0.000200f, 0.000790f, 0.001209f, 0.001475f,
+ 0.002022f, 0.002375f, 0.002754f, 0.003136f, 0.003532f, 0.003851f, 0.004253f, 0.004719f, 0.004864f, 0.005455f, 0.005749f, 0.006435f,
+ 0.007053f, 0.007557f, 0.007988f, 0.008614f, 0.009216f, 0.010101f, 0.010712f, 0.011604f, 0.012596f, 0.013588f, 0.014877f, 0.016052f,
+ 0.017334f, 0.018753f, 0.020401f, 0.022415f, 0.024338f, 0.026642f, 0.029282f, 0.032196f, 0.035461f, 0.039215f, 0.043854f, 0.048706f,
+ 0.054413f, 0.060913f, 0.068237f, 0.076965f, 0.086792f, 0.097961f, 0.110657f, 0.125488f, 0.141846f, 0.160278f, 0.180542f, 0.203857f,
+ 0.229004f, 0.256348f, 0.286133f, 0.317627f, 0.351807f, 0.388184f, 0.737305f, 0.757812f, 0.762695f, 0.763672f, 0.764160f, 0.764648f,
+ 0.000214f, 0.000700f, 0.001134f, 0.001480f, 0.001724f, 0.002056f, 0.002468f, 0.002672f, 0.003069f, 0.003412f, 0.003618f, 0.003883f,
+ 0.004265f, 0.004627f, 0.004971f, 0.005508f, 0.005817f, 0.006397f, 0.006866f, 0.007244f, 0.007812f, 0.008446f, 0.009003f, 0.009872f,
+ 0.010544f, 0.011345f, 0.012375f, 0.013321f, 0.014275f, 0.015587f, 0.017075f, 0.018372f, 0.020050f, 0.022186f, 0.024246f, 0.026596f,
+ 0.029388f, 0.032562f, 0.036285f, 0.040344f, 0.045197f, 0.050568f, 0.056946f, 0.064514f, 0.072876f, 0.082886f, 0.093933f, 0.107056f,
+ 0.122070f, 0.139404f, 0.158325f, 0.180176f, 0.204590f, 0.231201f, 0.260010f, 0.290771f, 0.325195f, 0.361816f, 0.726074f, 0.747070f,
+ 0.751465f, 0.753418f, 0.753906f, 0.754395f, 0.000187f, 0.000637f, 0.001095f, 0.001133f, 0.001488f, 0.001872f, 0.002007f, 0.002253f,
+ 0.002590f, 0.002880f, 0.003010f, 0.003420f, 0.003593f, 0.003914f, 0.004322f, 0.004650f, 0.005051f, 0.005424f, 0.005733f, 0.006134f,
+ 0.006683f, 0.007183f, 0.007671f, 0.008072f, 0.008720f, 0.009483f, 0.010201f, 0.011070f, 0.011871f, 0.012863f, 0.013924f, 0.015167f,
+ 0.016434f, 0.018143f, 0.019669f, 0.021851f, 0.024109f, 0.026749f, 0.029587f, 0.033020f, 0.037109f, 0.041718f, 0.047119f, 0.053192f,
+ 0.060516f, 0.068848f, 0.078857f, 0.090149f, 0.104004f, 0.119202f, 0.136841f, 0.157471f, 0.180420f, 0.205322f, 0.234009f, 0.264648f,
+ 0.297852f, 0.335449f, 0.711914f, 0.735352f, 0.740234f, 0.741211f, 0.742676f, 0.742676f, 0.000201f, 0.000676f, 0.000884f, 0.001044f,
+ 0.001369f, 0.001633f, 0.001786f, 0.002001f, 0.002237f, 0.002460f, 0.002680f, 0.002777f, 0.003117f, 0.003408f, 0.003632f, 0.003910f,
+ 0.004211f, 0.004375f, 0.004772f, 0.005226f, 0.005520f, 0.005909f, 0.006302f, 0.006882f, 0.007385f, 0.007858f, 0.008553f, 0.008919f,
+ 0.009827f, 0.010582f, 0.011398f, 0.012520f, 0.013611f, 0.014725f, 0.016190f, 0.017593f, 0.019424f, 0.021622f, 0.023941f, 0.026703f,
+ 0.029938f, 0.033539f, 0.038055f, 0.043243f, 0.049408f, 0.056519f, 0.065002f, 0.074951f, 0.086548f, 0.100403f, 0.116394f, 0.135132f,
+ 0.156860f, 0.181030f, 0.208252f, 0.238281f, 0.271240f, 0.307861f, 0.698730f, 0.722656f, 0.727539f, 0.729980f, 0.730957f, 0.730469f,
+ 0.000185f, 0.000371f, 0.000784f, 0.001028f, 0.001153f, 0.001304f, 0.001567f, 0.001792f, 0.001790f, 0.002028f, 0.002283f, 0.002424f,
+ 0.002640f, 0.002764f, 0.003044f, 0.003313f, 0.003445f, 0.003748f, 0.004044f, 0.004337f, 0.004677f, 0.004879f, 0.005207f, 0.005661f,
+ 0.006027f, 0.006481f, 0.006870f, 0.007454f, 0.007874f, 0.008583f, 0.009239f, 0.009880f, 0.010849f, 0.011871f, 0.012833f, 0.014153f,
+ 0.015656f, 0.017151f, 0.018967f, 0.021118f, 0.023621f, 0.026703f, 0.030197f, 0.034576f, 0.039368f, 0.045441f, 0.052460f, 0.061157f,
+ 0.070862f, 0.083069f, 0.097290f, 0.114441f, 0.134155f, 0.157104f, 0.182983f, 0.212158f, 0.244507f, 0.281250f, 0.684570f, 0.710449f,
+ 0.715332f, 0.717285f, 0.717773f, 0.718750f, 0.000109f, 0.000455f, 0.000558f, 0.000757f, 0.000986f, 0.001166f, 0.001298f, 0.001310f,
+ 0.001566f, 0.001614f, 0.001852f, 0.001933f, 0.002062f, 0.002327f, 0.002571f, 0.002699f, 0.002909f, 0.003057f, 0.003254f, 0.003496f,
+ 0.003643f, 0.004066f, 0.004295f, 0.004665f, 0.004822f, 0.005161f, 0.005722f, 0.006008f, 0.006424f, 0.006897f, 0.007435f, 0.008049f,
+ 0.008789f, 0.009529f, 0.010284f, 0.011177f, 0.012321f, 0.013466f, 0.014885f, 0.016586f, 0.018417f, 0.020844f, 0.023575f, 0.026810f,
+ 0.030655f, 0.035400f, 0.041412f, 0.048462f, 0.056976f, 0.067322f, 0.079712f, 0.094543f, 0.112610f, 0.133789f, 0.158691f, 0.186279f,
+ 0.217896f, 0.253418f, 0.670898f, 0.696777f, 0.702148f, 0.704590f, 0.705078f, 0.705566f, 0.000000f, 0.000317f, 0.000556f, 0.000619f,
+ 0.000759f, 0.000889f, 0.001012f, 0.001163f, 0.001282f, 0.001353f, 0.001531f, 0.001621f, 0.001681f, 0.001862f, 0.001976f, 0.002140f,
+ 0.002392f, 0.002502f, 0.002745f, 0.002838f, 0.003019f, 0.003311f, 0.003477f, 0.003639f, 0.003889f, 0.004166f, 0.004429f, 0.004784f,
+ 0.005119f, 0.005547f, 0.006042f, 0.006317f, 0.006901f, 0.007442f, 0.008110f, 0.008751f, 0.009583f, 0.010590f, 0.011566f, 0.012894f,
+ 0.014404f, 0.015930f, 0.018158f, 0.020569f, 0.023697f, 0.027374f, 0.031830f, 0.037567f, 0.044434f, 0.053009f, 0.063599f, 0.076538f,
+ 0.092346f, 0.111511f, 0.134521f, 0.161133f, 0.191772f, 0.227173f, 0.654297f, 0.684082f, 0.687988f, 0.690918f, 0.691895f, 0.691895f,
+ 0.000000f, 0.000275f, 0.000368f, 0.000572f, 0.000683f, 0.000731f, 0.000877f, 0.000979f, 0.001039f, 0.001091f, 0.001234f, 0.001332f,
+ 0.001447f, 0.001547f, 0.001601f, 0.001760f, 0.001790f, 0.002007f, 0.002119f, 0.002245f, 0.002493f, 0.002565f, 0.002747f, 0.002920f,
+ 0.003168f, 0.003235f, 0.003551f, 0.003830f, 0.004040f, 0.004368f, 0.004658f, 0.005001f, 0.005337f, 0.005798f, 0.006287f, 0.006794f,
+ 0.007488f, 0.008087f, 0.008865f, 0.009773f, 0.010963f, 0.012199f, 0.013649f, 0.015610f, 0.017822f, 0.020493f, 0.023849f, 0.028320f,
+ 0.033752f, 0.040466f, 0.049377f, 0.060028f, 0.073853f, 0.090698f, 0.111572f, 0.136841f, 0.166016f, 0.199341f, 0.640137f, 0.667969f,
+ 0.675781f, 0.676758f, 0.678223f, 0.678223f, 0.000017f, 0.000193f, 0.000383f, 0.000487f, 0.000586f, 0.000597f, 0.000618f, 0.000733f,
+ 0.000826f, 0.000863f, 0.000902f, 0.001037f, 0.001121f, 0.001244f, 0.001342f, 0.001329f, 0.001514f, 0.001506f, 0.001719f, 0.001793f,
+ 0.001851f, 0.002016f, 0.002182f, 0.002281f, 0.002432f, 0.002554f, 0.002708f, 0.002859f, 0.003168f, 0.003344f, 0.003563f, 0.003845f,
+ 0.004158f, 0.004478f, 0.004852f, 0.005154f, 0.005714f, 0.006207f, 0.006752f, 0.007370f, 0.008186f, 0.009155f, 0.010193f, 0.011490f,
+ 0.013016f, 0.015144f, 0.017517f, 0.020752f, 0.024811f, 0.029922f, 0.036835f, 0.045593f, 0.056946f, 0.071533f, 0.090576f, 0.113159f,
+ 0.140991f, 0.173340f, 0.624023f, 0.653809f, 0.660156f, 0.663574f, 0.664551f, 0.664062f, 0.000194f, 0.000227f, 0.000316f, 0.000451f,
+ 0.000449f, 0.000482f, 0.000610f, 0.000511f, 0.000654f, 0.000673f, 0.000804f, 0.000844f, 0.000880f, 0.000955f, 0.000961f, 0.001127f,
+ 0.001169f, 0.001210f, 0.001318f, 0.001330f, 0.001507f, 0.001592f, 0.001657f, 0.001771f, 0.001839f, 0.001953f, 0.002083f, 0.002214f,
+ 0.002399f, 0.002518f, 0.002815f, 0.002882f, 0.003132f, 0.003361f, 0.003605f, 0.003925f, 0.004177f, 0.004528f, 0.004963f, 0.005527f,
+ 0.006027f, 0.006783f, 0.007381f, 0.008469f, 0.009644f, 0.010849f, 0.012772f, 0.014748f, 0.017578f, 0.021332f, 0.026367f, 0.033142f,
+ 0.042389f, 0.054413f, 0.070129f, 0.091064f, 0.116943f, 0.147339f, 0.608887f, 0.640137f, 0.645996f, 0.647461f, 0.650391f, 0.651367f,
+ 0.000166f, 0.000146f, 0.000248f, 0.000320f, 0.000288f, 0.000446f, 0.000375f, 0.000407f, 0.000468f, 0.000514f, 0.000629f, 0.000638f,
+ 0.000681f, 0.000773f, 0.000806f, 0.000766f, 0.000883f, 0.000927f, 0.000959f, 0.001036f, 0.001097f, 0.001172f, 0.001224f, 0.001297f,
+ 0.001392f, 0.001425f, 0.001592f, 0.001631f, 0.001793f, 0.001965f, 0.002089f, 0.002157f, 0.002321f, 0.002495f, 0.002680f, 0.002874f,
+ 0.003054f, 0.003305f, 0.003632f, 0.003902f, 0.004314f, 0.004753f, 0.005306f, 0.005901f, 0.006828f, 0.007645f, 0.008896f, 0.010323f,
+ 0.012283f, 0.014816f, 0.018234f, 0.023010f, 0.029678f, 0.039276f, 0.052307f, 0.070190f, 0.093811f, 0.123474f, 0.591797f, 0.623535f,
+ 0.631348f, 0.633301f, 0.634766f, 0.635254f, 0.000000f, 0.000154f, 0.000184f, 0.000257f, 0.000265f, 0.000266f, 0.000323f, 0.000291f,
+ 0.000369f, 0.000384f, 0.000450f, 0.000472f, 0.000505f, 0.000572f, 0.000577f, 0.000604f, 0.000636f, 0.000675f, 0.000699f, 0.000736f,
+ 0.000787f, 0.000840f, 0.000890f, 0.000945f, 0.000988f, 0.001039f, 0.001165f, 0.001165f, 0.001266f, 0.001318f, 0.001410f, 0.001550f,
+ 0.001618f, 0.001743f, 0.001866f, 0.001997f, 0.002151f, 0.002319f, 0.002562f, 0.002779f, 0.002975f, 0.003298f, 0.003674f, 0.004131f,
+ 0.004604f, 0.005268f, 0.006065f, 0.007027f, 0.008316f, 0.009949f, 0.012390f, 0.015526f, 0.019852f, 0.026733f, 0.036682f, 0.051666f,
+ 0.072449f, 0.099792f, 0.574707f, 0.608398f, 0.614746f, 0.618164f, 0.619629f, 0.621094f, 0.000000f, 0.000008f, 0.000146f, 0.000181f,
+ 0.000203f, 0.000243f, 0.000206f, 0.000250f, 0.000257f, 0.000283f, 0.000335f, 0.000293f, 0.000304f, 0.000368f, 0.000373f, 0.000435f,
+ 0.000418f, 0.000468f, 0.000539f, 0.000540f, 0.000564f, 0.000598f, 0.000628f, 0.000657f, 0.000716f, 0.000724f, 0.000797f, 0.000807f,
+ 0.000883f, 0.001002f, 0.000974f, 0.001037f, 0.001104f, 0.001196f, 0.001316f, 0.001394f, 0.001445f, 0.001574f, 0.001746f, 0.001829f,
+ 0.002005f, 0.002222f, 0.002401f, 0.002699f, 0.003057f, 0.003372f, 0.003874f, 0.004505f, 0.005360f, 0.006500f, 0.007927f, 0.009972f,
+ 0.012878f, 0.017258f, 0.024155f, 0.035339f, 0.052795f, 0.077637f, 0.558105f, 0.592285f, 0.600586f, 0.602539f, 0.604004f, 0.605469f,
+ 0.000000f, 0.000107f, 0.000122f, 0.000093f, 0.000133f, 0.000142f, 0.000149f, 0.000174f, 0.000174f, 0.000184f, 0.000190f, 0.000234f,
+ 0.000214f, 0.000250f, 0.000273f, 0.000286f, 0.000292f, 0.000302f, 0.000329f, 0.000336f, 0.000366f, 0.000391f, 0.000408f, 0.000444f,
+ 0.000452f, 0.000495f, 0.000531f, 0.000559f, 0.000578f, 0.000611f, 0.000659f, 0.000675f, 0.000757f, 0.000771f, 0.000854f, 0.000906f,
+ 0.000957f, 0.001004f, 0.001102f, 0.001187f, 0.001267f, 0.001394f, 0.001546f, 0.001683f, 0.001922f, 0.002094f, 0.002420f, 0.002754f,
+ 0.003254f, 0.003878f, 0.004757f, 0.005997f, 0.007812f, 0.010544f, 0.014786f, 0.022324f, 0.035522f, 0.057465f, 0.541504f, 0.576172f,
+ 0.583984f, 0.585938f, 0.588379f, 0.590332f, 0.000000f, 0.000099f, 0.000091f, 0.000084f, 0.000084f, 0.000086f, 0.000089f, 0.000101f,
+ 0.000105f, 0.000109f, 0.000122f, 0.000124f, 0.000132f, 0.000146f, 0.000171f, 0.000172f, 0.000176f, 0.000198f, 0.000197f, 0.000239f,
+ 0.000218f, 0.000235f, 0.000240f, 0.000281f, 0.000309f, 0.000301f, 0.000312f, 0.000321f, 0.000347f, 0.000370f, 0.000387f, 0.000419f,
+ 0.000444f, 0.000458f, 0.000513f, 0.000536f, 0.000570f, 0.000607f, 0.000688f, 0.000703f, 0.000754f, 0.000834f, 0.000890f, 0.000997f,
+ 0.001100f, 0.001238f, 0.001410f, 0.001584f, 0.001859f, 0.002207f, 0.002665f, 0.003323f, 0.004353f, 0.005947f, 0.008492f, 0.012909f,
+ 0.021606f, 0.039368f, 0.522461f, 0.559082f, 0.566406f, 0.569824f, 0.572266f, 0.572754f, 0.000108f, 0.000089f, 0.000079f, 0.000072f,
+ 0.000068f, 0.000065f, 0.000061f, 0.000057f, 0.000061f, 0.000062f, 0.000063f, 0.000086f, 0.000070f, 0.000071f, 0.000095f, 0.000080f,
+ 0.000107f, 0.000113f, 0.000115f, 0.000124f, 0.000121f, 0.000130f, 0.000151f, 0.000154f, 0.000164f, 0.000170f, 0.000176f, 0.000189f,
+ 0.000193f, 0.000215f, 0.000211f, 0.000242f, 0.000252f, 0.000260f, 0.000280f, 0.000293f, 0.000312f, 0.000350f, 0.000359f, 0.000389f,
+ 0.000410f, 0.000452f, 0.000481f, 0.000535f, 0.000578f, 0.000643f, 0.000718f, 0.000812f, 0.000939f, 0.001107f, 0.001329f, 0.001644f,
+ 0.002155f, 0.002930f, 0.004284f, 0.006706f, 0.011452f, 0.023895f, 0.504395f, 0.542480f, 0.550293f, 0.553711f, 0.555664f, 0.557129f,
+ 0.000093f, 0.000072f, 0.000063f, 0.000058f, 0.000053f, 0.000050f, 0.000047f, 0.000046f, 0.000044f, 0.000042f, 0.000039f, 0.000037f,
+ 0.000042f, 0.000035f, 0.000036f, 0.000037f, 0.000051f, 0.000046f, 0.000057f, 0.000058f, 0.000061f, 0.000062f, 0.000066f, 0.000069f,
+ 0.000072f, 0.000087f, 0.000077f, 0.000088f, 0.000093f, 0.000099f, 0.000103f, 0.000109f, 0.000115f, 0.000122f, 0.000139f, 0.000134f,
+ 0.000142f, 0.000170f, 0.000175f, 0.000179f, 0.000192f, 0.000203f, 0.000228f, 0.000245f, 0.000265f, 0.000291f, 0.000326f, 0.000360f,
+ 0.000420f, 0.000481f, 0.000574f, 0.000686f, 0.000887f, 0.001203f, 0.001759f, 0.002892f, 0.005318f, 0.011955f, 0.487305f, 0.524902f,
+ 0.534180f, 0.538086f, 0.539551f, 0.540527f, 0.000066f, 0.000049f, 0.000041f, 0.000037f, 0.000034f, 0.000033f, 0.000032f, 0.000030f,
+ 0.000029f, 0.000028f, 0.000028f, 0.000027f, 0.000026f, 0.000025f, 0.000024f, 0.000023f, 0.000022f, 0.000021f, 0.000022f, 0.000023f,
+ 0.000019f, 0.000018f, 0.000019f, 0.000024f, 0.000026f, 0.000029f, 0.000032f, 0.000032f, 0.000036f, 0.000034f, 0.000040f, 0.000041f,
+ 0.000043f, 0.000049f, 0.000049f, 0.000050f, 0.000056f, 0.000059f, 0.000067f, 0.000067f, 0.000074f, 0.000078f, 0.000082f, 0.000092f,
+ 0.000094f, 0.000103f, 0.000120f, 0.000130f, 0.000141f, 0.000163f, 0.000191f, 0.000230f, 0.000286f, 0.000374f, 0.000543f, 0.000890f,
+ 0.001802f, 0.004650f, 0.468994f, 0.507812f, 0.516602f, 0.520508f, 0.522461f, 0.523926f, 0.000007f, 0.000008f, 0.000008f, 0.000008f,
+ 0.000011f, 0.000010f, 0.000010f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000012f,
+ 0.000012f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000010f, 0.000010f, 0.000010f, 0.000009f, 0.000009f,
+ 0.000008f, 0.000008f, 0.000009f, 0.000009f, 0.000009f, 0.000009f, 0.000010f, 0.000011f, 0.000012f, 0.000014f, 0.000013f, 0.000016f,
+ 0.000015f, 0.000018f, 0.000020f, 0.000021f, 0.000022f, 0.000025f, 0.000024f, 0.000025f, 0.000030f, 0.000031f, 0.000040f, 0.000046f,
+ 0.000052f, 0.000071f, 0.000099f, 0.000147f, 0.000306f, 0.001072f, 0.450439f, 0.491211f, 0.499756f, 0.503418f, 0.505859f, 0.507324f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000002f,
+ 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000003f, 0.000003f, 0.000004f, 0.000007f, 0.000024f, 0.432129f, 0.474121f,
+ 0.482666f, 0.486572f, 0.489014f, 0.490234f,
+ },
+ {
+ 0.027573f, 0.080750f, 0.130981f, 0.177734f, 0.222290f, 0.263672f, 0.302002f, 0.338623f, 0.373291f, 0.405029f, 0.435791f, 0.464111f,
+ 0.490967f, 0.516602f, 0.540039f, 0.563477f, 0.584961f, 0.605469f, 0.625000f, 0.644043f, 0.660645f, 0.677246f, 0.693848f, 0.708496f,
+ 0.724121f, 0.738281f, 0.751465f, 0.764648f, 0.776855f, 0.789062f, 0.799805f, 0.810547f, 0.821289f, 0.831055f, 0.840820f, 0.850098f,
+ 0.859863f, 0.867676f, 0.876953f, 0.884277f, 0.892578f, 0.900391f, 0.907227f, 0.914551f, 0.921875f, 0.928223f, 0.934082f, 0.940430f,
+ 0.946777f, 0.952637f, 0.957520f, 0.964355f, 0.968262f, 0.974121f, 0.979004f, 0.983887f, 0.989258f, 0.994141f, 0.993164f, 0.983398f,
+ 0.976074f, 0.969238f, 0.962891f, 0.957031f, 0.022873f, 0.067871f, 0.111511f, 0.153809f, 0.193359f, 0.232788f, 0.268799f, 0.303223f,
+ 0.337402f, 0.368652f, 0.399414f, 0.427734f, 0.455078f, 0.481201f, 0.506348f, 0.529785f, 0.552246f, 0.573242f, 0.593750f, 0.613281f,
+ 0.632324f, 0.650391f, 0.667480f, 0.683105f, 0.698730f, 0.713867f, 0.728516f, 0.741211f, 0.755371f, 0.767578f, 0.779785f, 0.791504f,
+ 0.803223f, 0.813477f, 0.823242f, 0.834473f, 0.843750f, 0.853027f, 0.861816f, 0.870605f, 0.878906f, 0.887695f, 0.895996f, 0.901855f,
+ 0.910645f, 0.917480f, 0.923828f, 0.930176f, 0.937012f, 0.943359f, 0.949707f, 0.955078f, 0.960938f, 0.966797f, 0.972656f, 0.977051f,
+ 0.982422f, 0.987305f, 0.989746f, 0.981445f, 0.973633f, 0.967773f, 0.961426f, 0.956055f, 0.019089f, 0.057007f, 0.095215f, 0.132202f,
+ 0.168823f, 0.204712f, 0.238281f, 0.272217f, 0.304688f, 0.334717f, 0.364502f, 0.392822f, 0.420898f, 0.446533f, 0.471924f, 0.495850f,
+ 0.518555f, 0.541992f, 0.562988f, 0.582520f, 0.602539f, 0.621094f, 0.639160f, 0.655762f, 0.672852f, 0.687988f, 0.703613f, 0.718262f,
+ 0.732422f, 0.746094f, 0.758789f, 0.771484f, 0.783203f, 0.795898f, 0.807129f, 0.817383f, 0.827637f, 0.837402f, 0.846680f, 0.856445f,
+ 0.865234f, 0.874023f, 0.882324f, 0.890137f, 0.898438f, 0.905273f, 0.913574f, 0.920410f, 0.927246f, 0.934082f, 0.940918f, 0.946777f,
+ 0.953125f, 0.958496f, 0.964844f, 0.969727f, 0.975586f, 0.980957f, 0.986816f, 0.979004f, 0.971680f, 0.965332f, 0.959961f, 0.954590f,
+ 0.016327f, 0.048676f, 0.081787f, 0.114807f, 0.147705f, 0.180176f, 0.211426f, 0.243652f, 0.273438f, 0.303223f, 0.332031f, 0.360107f,
+ 0.386963f, 0.412598f, 0.438477f, 0.462891f, 0.487305f, 0.510254f, 0.530762f, 0.552246f, 0.572754f, 0.590820f, 0.610352f, 0.629883f,
+ 0.647461f, 0.662598f, 0.679688f, 0.693848f, 0.709961f, 0.723633f, 0.737305f, 0.750977f, 0.763672f, 0.776367f, 0.788086f, 0.799316f,
+ 0.810059f, 0.820801f, 0.832031f, 0.841309f, 0.851074f, 0.860352f, 0.868652f, 0.877930f, 0.886230f, 0.894531f, 0.902832f, 0.910156f,
+ 0.916504f, 0.924316f, 0.930664f, 0.937500f, 0.943848f, 0.950684f, 0.957031f, 0.962891f, 0.968262f, 0.974121f, 0.983887f, 0.976074f,
+ 0.969727f, 0.963867f, 0.958496f, 0.953125f, 0.013573f, 0.041901f, 0.070801f, 0.100098f, 0.129517f, 0.159058f, 0.187866f, 0.217041f,
+ 0.246216f, 0.274414f, 0.302002f, 0.328857f, 0.354980f, 0.381592f, 0.406738f, 0.431641f, 0.455322f, 0.478271f, 0.500000f, 0.521484f,
+ 0.541992f, 0.563477f, 0.583008f, 0.600098f, 0.619141f, 0.636719f, 0.653320f, 0.671387f, 0.684570f, 0.699707f, 0.715332f, 0.729492f,
+ 0.743164f, 0.755371f, 0.768555f, 0.780762f, 0.792480f, 0.804199f, 0.814453f, 0.824707f, 0.835449f, 0.845215f, 0.854980f, 0.864746f,
+ 0.874023f, 0.882812f, 0.890137f, 0.898438f, 0.905762f, 0.914062f, 0.921387f, 0.928223f, 0.935059f, 0.941406f, 0.948242f, 0.955078f,
+ 0.961426f, 0.966797f, 0.980957f, 0.973633f, 0.967773f, 0.961914f, 0.956543f, 0.951660f, 0.011681f, 0.036316f, 0.061584f, 0.087524f,
+ 0.113342f, 0.140259f, 0.167358f, 0.194214f, 0.220947f, 0.247437f, 0.273926f, 0.300537f, 0.325684f, 0.351074f, 0.375732f, 0.400146f,
+ 0.423828f, 0.446533f, 0.469482f, 0.491943f, 0.512695f, 0.532715f, 0.553223f, 0.573242f, 0.592285f, 0.609863f, 0.627930f, 0.644531f,
+ 0.660156f, 0.676758f, 0.691406f, 0.706055f, 0.720215f, 0.734863f, 0.749023f, 0.762207f, 0.774414f, 0.786133f, 0.797852f, 0.809082f,
+ 0.820801f, 0.831055f, 0.840332f, 0.850098f, 0.859863f, 0.869629f, 0.878418f, 0.886719f, 0.895508f, 0.903809f, 0.910645f, 0.918945f,
+ 0.925781f, 0.932617f, 0.939453f, 0.947754f, 0.953613f, 0.958984f, 0.977539f, 0.970703f, 0.964844f, 0.959473f, 0.954102f, 0.949707f,
+ 0.010330f, 0.031525f, 0.053406f, 0.076538f, 0.100159f, 0.124084f, 0.148193f, 0.173096f, 0.197998f, 0.223267f, 0.247681f, 0.273193f,
+ 0.297607f, 0.322021f, 0.346924f, 0.370117f, 0.394043f, 0.417236f, 0.439697f, 0.462158f, 0.483887f, 0.504883f, 0.524902f, 0.545410f,
+ 0.563477f, 0.583008f, 0.602539f, 0.618652f, 0.636230f, 0.652344f, 0.669922f, 0.685059f, 0.699219f, 0.714355f, 0.729004f, 0.741211f,
+ 0.755371f, 0.767578f, 0.780762f, 0.792480f, 0.803711f, 0.815918f, 0.825195f, 0.836914f, 0.846191f, 0.855957f, 0.864746f, 0.874512f,
+ 0.883301f, 0.891602f, 0.900391f, 0.908203f, 0.916016f, 0.923828f, 0.931152f, 0.937988f, 0.945801f, 0.952148f, 0.974121f, 0.967773f,
+ 0.962891f, 0.957520f, 0.952637f, 0.947754f, 0.009186f, 0.027359f, 0.047302f, 0.067505f, 0.088806f, 0.109924f, 0.132202f, 0.154907f,
+ 0.177246f, 0.201050f, 0.224121f, 0.247925f, 0.271240f, 0.295410f, 0.318359f, 0.341797f, 0.365234f, 0.387939f, 0.410156f, 0.432861f,
+ 0.454590f, 0.475586f, 0.495850f, 0.517090f, 0.536621f, 0.556152f, 0.575195f, 0.592773f, 0.609863f, 0.628418f, 0.645020f, 0.661133f,
+ 0.677246f, 0.692383f, 0.707520f, 0.721191f, 0.735352f, 0.748047f, 0.762207f, 0.774414f, 0.786621f, 0.798828f, 0.810547f, 0.820801f,
+ 0.831543f, 0.842285f, 0.852539f, 0.862305f, 0.871094f, 0.880859f, 0.889648f, 0.898438f, 0.906738f, 0.914551f, 0.921875f, 0.929199f,
+ 0.936035f, 0.944824f, 0.971191f, 0.965332f, 0.959473f, 0.955078f, 0.950195f, 0.945801f, 0.008041f, 0.024384f, 0.041321f, 0.059631f,
+ 0.078003f, 0.097656f, 0.117554f, 0.138428f, 0.159912f, 0.181152f, 0.203003f, 0.224976f, 0.247070f, 0.269531f, 0.292480f, 0.314697f,
+ 0.337891f, 0.360352f, 0.382324f, 0.403809f, 0.426025f, 0.447998f, 0.468018f, 0.488770f, 0.508301f, 0.528320f, 0.547852f, 0.567383f,
+ 0.585449f, 0.603516f, 0.620605f, 0.637695f, 0.654297f, 0.670410f, 0.686523f, 0.700195f, 0.715820f, 0.729980f, 0.743164f, 0.756836f,
+ 0.769531f, 0.782715f, 0.794434f, 0.805664f, 0.816895f, 0.827637f, 0.838379f, 0.848633f, 0.859375f, 0.868164f, 0.877930f, 0.887695f,
+ 0.895996f, 0.905273f, 0.912598f, 0.920898f, 0.928711f, 0.936035f, 0.966797f, 0.962402f, 0.957031f, 0.952637f, 0.947754f, 0.943848f,
+ 0.007095f, 0.021515f, 0.036926f, 0.052704f, 0.069641f, 0.087463f, 0.105347f, 0.123413f, 0.143188f, 0.163452f, 0.183105f, 0.204102f,
+ 0.225220f, 0.246704f, 0.268066f, 0.290283f, 0.311768f, 0.333740f, 0.355225f, 0.376465f, 0.397949f, 0.419434f, 0.440430f, 0.461670f,
+ 0.481445f, 0.500977f, 0.520020f, 0.540527f, 0.559570f, 0.578125f, 0.595703f, 0.613770f, 0.630371f, 0.646973f, 0.663086f, 0.678223f,
+ 0.694336f, 0.709473f, 0.723145f, 0.736328f, 0.750000f, 0.764648f, 0.777344f, 0.790039f, 0.801270f, 0.812988f, 0.824707f, 0.834961f,
+ 0.846191f, 0.856934f, 0.865723f, 0.875977f, 0.884766f, 0.894531f, 0.903320f, 0.911621f, 0.919922f, 0.927734f, 0.962891f, 0.959473f,
+ 0.954102f, 0.949219f, 0.945312f, 0.941406f, 0.006138f, 0.019150f, 0.033051f, 0.047089f, 0.061829f, 0.077515f, 0.094299f, 0.111084f,
+ 0.128174f, 0.146729f, 0.165771f, 0.185059f, 0.205200f, 0.224731f, 0.245361f, 0.265625f, 0.286865f, 0.307861f, 0.328857f, 0.350098f,
+ 0.370605f, 0.392090f, 0.413086f, 0.433594f, 0.454346f, 0.474609f, 0.493896f, 0.513672f, 0.532227f, 0.552734f, 0.569824f, 0.588867f,
+ 0.605957f, 0.623047f, 0.640625f, 0.656738f, 0.672852f, 0.688477f, 0.703613f, 0.717773f, 0.732910f, 0.746582f, 0.759766f, 0.772461f,
+ 0.786621f, 0.798340f, 0.810059f, 0.820312f, 0.832520f, 0.842773f, 0.853516f, 0.863770f, 0.873535f, 0.883789f, 0.892578f, 0.901367f,
+ 0.910645f, 0.919434f, 0.958984f, 0.955566f, 0.951172f, 0.946777f, 0.942871f, 0.938965f, 0.005424f, 0.017059f, 0.029541f, 0.042023f,
+ 0.055389f, 0.069397f, 0.083984f, 0.099670f, 0.115601f, 0.132324f, 0.149292f, 0.167114f, 0.185547f, 0.204468f, 0.224121f, 0.243896f,
+ 0.262939f, 0.283691f, 0.304443f, 0.323486f, 0.345459f, 0.365479f, 0.386230f, 0.407471f, 0.426758f, 0.448486f, 0.467529f, 0.487061f,
+ 0.506348f, 0.526367f, 0.545410f, 0.563965f, 0.581543f, 0.600098f, 0.617676f, 0.634277f, 0.650391f, 0.666016f, 0.682617f, 0.697754f,
+ 0.712891f, 0.727539f, 0.741211f, 0.755859f, 0.769043f, 0.782227f, 0.793945f, 0.806152f, 0.818848f, 0.830566f, 0.840332f, 0.851074f,
+ 0.861328f, 0.872070f, 0.881836f, 0.892090f, 0.900879f, 0.910645f, 0.955566f, 0.952637f, 0.948730f, 0.943359f, 0.939941f, 0.935547f,
+ 0.004833f, 0.015442f, 0.026169f, 0.037689f, 0.049683f, 0.062164f, 0.075806f, 0.089539f, 0.103760f, 0.119263f, 0.134888f, 0.151978f,
+ 0.168335f, 0.186646f, 0.204102f, 0.223022f, 0.242065f, 0.260986f, 0.280518f, 0.300537f, 0.320801f, 0.340820f, 0.360107f, 0.381104f,
+ 0.401367f, 0.421387f, 0.441650f, 0.460449f, 0.480957f, 0.500000f, 0.519531f, 0.538574f, 0.557129f, 0.575684f, 0.593262f, 0.610840f,
+ 0.628906f, 0.645508f, 0.662109f, 0.677246f, 0.692871f, 0.708008f, 0.723145f, 0.738281f, 0.751465f, 0.766113f, 0.778320f, 0.791504f,
+ 0.802246f, 0.816406f, 0.827637f, 0.838867f, 0.850098f, 0.860352f, 0.871582f, 0.881348f, 0.890137f, 0.899902f, 0.951660f, 0.948730f,
+ 0.944824f, 0.940918f, 0.937012f, 0.933594f, 0.004269f, 0.013809f, 0.023911f, 0.033569f, 0.044342f, 0.056213f, 0.068054f, 0.080811f,
+ 0.093933f, 0.107910f, 0.122131f, 0.137451f, 0.152710f, 0.169434f, 0.185791f, 0.203979f, 0.221436f, 0.239990f, 0.257812f, 0.277344f,
+ 0.296631f, 0.316162f, 0.335693f, 0.355713f, 0.375244f, 0.395996f, 0.416016f, 0.436035f, 0.455078f, 0.474365f, 0.494629f, 0.513184f,
+ 0.532715f, 0.550781f, 0.569336f, 0.586914f, 0.604980f, 0.622559f, 0.639648f, 0.655762f, 0.672363f, 0.688477f, 0.704102f, 0.718750f,
+ 0.733887f, 0.747559f, 0.761230f, 0.775391f, 0.788574f, 0.800781f, 0.814453f, 0.825684f, 0.837402f, 0.848633f, 0.859375f, 0.870605f,
+ 0.880371f, 0.891113f, 0.947754f, 0.945312f, 0.941895f, 0.937988f, 0.934082f, 0.931152f, 0.004028f, 0.012581f, 0.021133f, 0.030396f,
+ 0.039948f, 0.050323f, 0.061523f, 0.072815f, 0.084961f, 0.096985f, 0.110535f, 0.124756f, 0.138916f, 0.153687f, 0.169800f, 0.185669f,
+ 0.202881f, 0.219116f, 0.237305f, 0.255615f, 0.273926f, 0.293213f, 0.311768f, 0.331055f, 0.351074f, 0.370605f, 0.390381f, 0.409668f,
+ 0.429688f, 0.449707f, 0.468994f, 0.487549f, 0.506836f, 0.526367f, 0.545898f, 0.562988f, 0.581543f, 0.599121f, 0.616699f, 0.634766f,
+ 0.651367f, 0.667480f, 0.683594f, 0.699707f, 0.714844f, 0.730957f, 0.744141f, 0.758789f, 0.772949f, 0.785645f, 0.799316f, 0.812500f,
+ 0.823730f, 0.836914f, 0.847168f, 0.859375f, 0.869629f, 0.880371f, 0.942383f, 0.941406f, 0.937500f, 0.934570f, 0.931152f, 0.927734f,
+ 0.003613f, 0.011391f, 0.018875f, 0.027679f, 0.036133f, 0.045624f, 0.055420f, 0.065491f, 0.076416f, 0.088135f, 0.099487f, 0.112427f,
+ 0.126099f, 0.139771f, 0.154419f, 0.169556f, 0.184814f, 0.201050f, 0.218262f, 0.234985f, 0.252441f, 0.271484f, 0.289062f, 0.308594f,
+ 0.326660f, 0.346924f, 0.365234f, 0.384521f, 0.404541f, 0.424072f, 0.443359f, 0.463135f, 0.482422f, 0.501953f, 0.521484f, 0.539551f,
+ 0.558594f, 0.576660f, 0.595215f, 0.612793f, 0.629883f, 0.647949f, 0.663574f, 0.679688f, 0.695801f, 0.711426f, 0.727539f, 0.741699f,
+ 0.757324f, 0.770996f, 0.785156f, 0.798828f, 0.811035f, 0.823730f, 0.835449f, 0.848145f, 0.858887f, 0.870605f, 0.937988f, 0.937988f,
+ 0.934570f, 0.931152f, 0.927734f, 0.924805f, 0.003248f, 0.010185f, 0.017395f, 0.025055f, 0.032928f, 0.041321f, 0.049957f, 0.059265f,
+ 0.069092f, 0.079407f, 0.090820f, 0.101746f, 0.113770f, 0.126953f, 0.140381f, 0.154053f, 0.168701f, 0.184082f, 0.199951f, 0.216431f,
+ 0.232788f, 0.250000f, 0.267578f, 0.285645f, 0.303955f, 0.322998f, 0.341553f, 0.361084f, 0.379150f, 0.399414f, 0.418701f, 0.437988f,
+ 0.457275f, 0.477051f, 0.496094f, 0.515137f, 0.534180f, 0.553223f, 0.571289f, 0.589844f, 0.606934f, 0.625488f, 0.643066f, 0.659668f,
+ 0.676758f, 0.692871f, 0.708984f, 0.725098f, 0.740234f, 0.753906f, 0.769043f, 0.782227f, 0.796387f, 0.810059f, 0.822266f, 0.834961f,
+ 0.847168f, 0.859375f, 0.933594f, 0.933594f, 0.931152f, 0.927246f, 0.923828f, 0.921387f, 0.002914f, 0.009361f, 0.015793f, 0.022659f,
+ 0.029938f, 0.037354f, 0.045593f, 0.053406f, 0.062988f, 0.072083f, 0.081665f, 0.092712f, 0.103943f, 0.114990f, 0.128174f, 0.140503f,
+ 0.153809f, 0.167725f, 0.182251f, 0.198242f, 0.213623f, 0.230225f, 0.246826f, 0.263672f, 0.281494f, 0.300049f, 0.318604f, 0.337158f,
+ 0.356201f, 0.374756f, 0.394531f, 0.413574f, 0.433105f, 0.451904f, 0.471680f, 0.491211f, 0.509766f, 0.529297f, 0.547852f, 0.566895f,
+ 0.584961f, 0.603516f, 0.621094f, 0.638672f, 0.656738f, 0.673340f, 0.689453f, 0.706543f, 0.722656f, 0.737793f, 0.752930f, 0.767578f,
+ 0.781250f, 0.796875f, 0.809082f, 0.823242f, 0.835449f, 0.847656f, 0.929199f, 0.929199f, 0.927246f, 0.923828f, 0.920898f, 0.917969f,
+ 0.002766f, 0.008736f, 0.014442f, 0.020691f, 0.027054f, 0.033905f, 0.040924f, 0.048645f, 0.056976f, 0.065674f, 0.074951f, 0.084229f,
+ 0.094116f, 0.105225f, 0.116333f, 0.127563f, 0.139771f, 0.153564f, 0.166626f, 0.181030f, 0.196411f, 0.211182f, 0.227417f, 0.243896f,
+ 0.260742f, 0.277588f, 0.295898f, 0.314209f, 0.332031f, 0.351562f, 0.370117f, 0.389404f, 0.408203f, 0.428223f, 0.447266f, 0.467041f,
+ 0.486084f, 0.505859f, 0.524414f, 0.543945f, 0.562012f, 0.581543f, 0.600098f, 0.617676f, 0.636230f, 0.654297f, 0.670898f, 0.687500f,
+ 0.704102f, 0.720703f, 0.736816f, 0.751465f, 0.766113f, 0.781738f, 0.796387f, 0.809082f, 0.823242f, 0.835938f, 0.923828f, 0.925781f,
+ 0.922852f, 0.920410f, 0.916992f, 0.914551f, 0.002483f, 0.007599f, 0.013161f, 0.018555f, 0.024551f, 0.030670f, 0.037476f, 0.044464f,
+ 0.051636f, 0.059174f, 0.067688f, 0.075928f, 0.085693f, 0.095093f, 0.105591f, 0.116394f, 0.127441f, 0.139648f, 0.152344f, 0.165527f,
+ 0.179565f, 0.193970f, 0.208862f, 0.224487f, 0.240356f, 0.256836f, 0.274658f, 0.291748f, 0.310059f, 0.328369f, 0.346680f, 0.365234f,
+ 0.384521f, 0.404297f, 0.423340f, 0.442139f, 0.462646f, 0.481445f, 0.500977f, 0.520020f, 0.540039f, 0.559082f, 0.577148f, 0.596191f,
+ 0.614746f, 0.632812f, 0.651367f, 0.669434f, 0.685059f, 0.702637f, 0.718750f, 0.734375f, 0.750488f, 0.766113f, 0.780762f, 0.795410f,
+ 0.811035f, 0.823730f, 0.919434f, 0.920898f, 0.918457f, 0.916016f, 0.913086f, 0.910645f, 0.002457f, 0.007114f, 0.011757f, 0.016708f,
+ 0.022125f, 0.027786f, 0.033752f, 0.040375f, 0.046661f, 0.053864f, 0.061584f, 0.069336f, 0.077515f, 0.086365f, 0.095947f, 0.105896f,
+ 0.116638f, 0.127075f, 0.138916f, 0.151245f, 0.164062f, 0.177490f, 0.191528f, 0.206177f, 0.221802f, 0.237427f, 0.253906f, 0.270508f,
+ 0.287842f, 0.305664f, 0.323730f, 0.342285f, 0.361572f, 0.379639f, 0.399170f, 0.418457f, 0.438965f, 0.458252f, 0.477295f, 0.497559f,
+ 0.516113f, 0.536133f, 0.554688f, 0.574707f, 0.593750f, 0.612305f, 0.630859f, 0.648926f, 0.666504f, 0.684082f, 0.701660f, 0.717773f,
+ 0.734863f, 0.751465f, 0.766602f, 0.781738f, 0.797852f, 0.812012f, 0.913086f, 0.916016f, 0.913574f, 0.911621f, 0.909180f, 0.906250f,
+ 0.002132f, 0.006493f, 0.010750f, 0.015717f, 0.020569f, 0.025604f, 0.030823f, 0.036682f, 0.043060f, 0.049286f, 0.055786f, 0.062988f,
+ 0.070557f, 0.078918f, 0.086914f, 0.096191f, 0.105530f, 0.116028f, 0.126953f, 0.138306f, 0.149902f, 0.162231f, 0.175537f, 0.189453f,
+ 0.203491f, 0.218628f, 0.234131f, 0.250000f, 0.266602f, 0.284180f, 0.301514f, 0.319580f, 0.338135f, 0.356689f, 0.375977f, 0.395020f,
+ 0.413818f, 0.434082f, 0.452881f, 0.473145f, 0.492920f, 0.512207f, 0.532227f, 0.552246f, 0.570801f, 0.591309f, 0.609375f, 0.629395f,
+ 0.646973f, 0.665527f, 0.683105f, 0.700684f, 0.717773f, 0.734863f, 0.751465f, 0.767578f, 0.782715f, 0.799316f, 0.908203f, 0.911133f,
+ 0.909180f, 0.907227f, 0.904785f, 0.902832f, 0.001891f, 0.006008f, 0.010025f, 0.014122f, 0.018616f, 0.023239f, 0.028442f, 0.033691f,
+ 0.038757f, 0.044556f, 0.050964f, 0.057465f, 0.064087f, 0.071167f, 0.079224f, 0.087463f, 0.096008f, 0.105591f, 0.115356f, 0.125488f,
+ 0.136597f, 0.148193f, 0.160278f, 0.173218f, 0.186768f, 0.200684f, 0.215332f, 0.231323f, 0.246338f, 0.262939f, 0.279785f, 0.297607f,
+ 0.314941f, 0.333984f, 0.353271f, 0.371094f, 0.391357f, 0.409668f, 0.430420f, 0.448975f, 0.469482f, 0.489746f, 0.509277f, 0.528809f,
+ 0.549316f, 0.568848f, 0.588379f, 0.607910f, 0.626953f, 0.645996f, 0.664062f, 0.683105f, 0.700684f, 0.718262f, 0.735840f, 0.751953f,
+ 0.768555f, 0.785645f, 0.902344f, 0.906250f, 0.904785f, 0.902832f, 0.900391f, 0.898438f, 0.001732f, 0.005573f, 0.009193f, 0.012932f,
+ 0.017075f, 0.021286f, 0.025406f, 0.030289f, 0.035675f, 0.040344f, 0.046326f, 0.052032f, 0.058411f, 0.064575f, 0.072205f, 0.079834f,
+ 0.087708f, 0.095947f, 0.104797f, 0.114380f, 0.124451f, 0.134888f, 0.146606f, 0.158691f, 0.170776f, 0.184082f, 0.197510f, 0.212524f,
+ 0.227417f, 0.243164f, 0.259521f, 0.276367f, 0.293457f, 0.311768f, 0.329590f, 0.348633f, 0.367188f, 0.386230f, 0.406006f, 0.425781f,
+ 0.446533f, 0.465332f, 0.486084f, 0.505859f, 0.526367f, 0.545898f, 0.567383f, 0.585938f, 0.605957f, 0.625977f, 0.645508f, 0.664551f,
+ 0.683105f, 0.701172f, 0.718750f, 0.736816f, 0.754395f, 0.770508f, 0.896484f, 0.900879f, 0.900391f, 0.897949f, 0.895996f, 0.894043f,
+ 0.001713f, 0.004684f, 0.008339f, 0.011818f, 0.015450f, 0.019409f, 0.023605f, 0.027832f, 0.032349f, 0.036865f, 0.041809f, 0.047302f,
+ 0.052673f, 0.058838f, 0.065613f, 0.072083f, 0.079407f, 0.087280f, 0.095337f, 0.104126f, 0.113037f, 0.122986f, 0.133667f, 0.144897f,
+ 0.156250f, 0.168579f, 0.181396f, 0.195068f, 0.208984f, 0.224243f, 0.239624f, 0.255859f, 0.272461f, 0.289551f, 0.307617f, 0.326172f,
+ 0.344482f, 0.363770f, 0.383301f, 0.402588f, 0.422607f, 0.443115f, 0.463135f, 0.483154f, 0.503418f, 0.523926f, 0.544434f, 0.564941f,
+ 0.584473f, 0.604980f, 0.624512f, 0.645508f, 0.664551f, 0.683594f, 0.701660f, 0.721191f, 0.738281f, 0.755859f, 0.889648f, 0.895996f,
+ 0.895020f, 0.893066f, 0.891602f, 0.889160f, 0.001545f, 0.004745f, 0.007710f, 0.010979f, 0.014450f, 0.017807f, 0.021469f, 0.025238f,
+ 0.029282f, 0.033661f, 0.038177f, 0.043182f, 0.048157f, 0.053436f, 0.059326f, 0.065674f, 0.072205f, 0.078857f, 0.086548f, 0.094604f,
+ 0.102905f, 0.111816f, 0.121521f, 0.131592f, 0.142334f, 0.153442f, 0.165894f, 0.178345f, 0.192139f, 0.205933f, 0.220703f, 0.236084f,
+ 0.251709f, 0.268555f, 0.285645f, 0.303467f, 0.321777f, 0.340332f, 0.359619f, 0.379150f, 0.398682f, 0.419189f, 0.440430f, 0.460449f,
+ 0.480957f, 0.501465f, 0.521973f, 0.543457f, 0.563477f, 0.584961f, 0.604492f, 0.625488f, 0.645508f, 0.665039f, 0.684082f, 0.704102f,
+ 0.723145f, 0.741211f, 0.885254f, 0.890137f, 0.889160f, 0.887695f, 0.886719f, 0.884277f, 0.001487f, 0.004356f, 0.006828f, 0.010162f,
+ 0.012993f, 0.016022f, 0.019333f, 0.023087f, 0.026886f, 0.030518f, 0.034668f, 0.039062f, 0.043671f, 0.048370f, 0.053741f, 0.059326f,
+ 0.065308f, 0.071655f, 0.078125f, 0.085693f, 0.093323f, 0.101807f, 0.110657f, 0.119507f, 0.129517f, 0.140137f, 0.151367f, 0.163330f,
+ 0.175781f, 0.188843f, 0.202759f, 0.217163f, 0.232666f, 0.248413f, 0.264893f, 0.282227f, 0.299805f, 0.318115f, 0.336914f, 0.356445f,
+ 0.375488f, 0.395996f, 0.416504f, 0.436279f, 0.457520f, 0.479004f, 0.499023f, 0.520508f, 0.541504f, 0.562988f, 0.583984f, 0.604492f,
+ 0.625488f, 0.646973f, 0.666504f, 0.687012f, 0.706055f, 0.725098f, 0.877441f, 0.885254f, 0.884766f, 0.882324f, 0.881836f, 0.880371f,
+ 0.001443f, 0.003807f, 0.006336f, 0.009171f, 0.011909f, 0.015007f, 0.018097f, 0.020905f, 0.024384f, 0.027893f, 0.031555f, 0.035370f,
+ 0.039581f, 0.044128f, 0.048889f, 0.053894f, 0.059174f, 0.065125f, 0.070984f, 0.077698f, 0.084656f, 0.091919f, 0.100037f, 0.108093f,
+ 0.117493f, 0.127563f, 0.137817f, 0.148438f, 0.159912f, 0.172485f, 0.185547f, 0.199585f, 0.213867f, 0.229248f, 0.244995f, 0.261230f,
+ 0.278564f, 0.296387f, 0.314697f, 0.333252f, 0.353271f, 0.372314f, 0.393311f, 0.413330f, 0.433594f, 0.455078f, 0.476318f, 0.497314f,
+ 0.519531f, 0.540527f, 0.562500f, 0.583496f, 0.605469f, 0.626953f, 0.648438f, 0.669434f, 0.689941f, 0.709961f, 0.870605f, 0.878906f,
+ 0.878418f, 0.877441f, 0.875488f, 0.873535f, 0.001302f, 0.003712f, 0.005859f, 0.008286f, 0.010910f, 0.013779f, 0.016235f, 0.019135f,
+ 0.021912f, 0.025345f, 0.029022f, 0.032166f, 0.036011f, 0.040131f, 0.044128f, 0.048492f, 0.053528f, 0.058533f, 0.064209f, 0.070129f,
+ 0.076355f, 0.083191f, 0.090149f, 0.098328f, 0.106628f, 0.115662f, 0.124817f, 0.134766f, 0.145630f, 0.157104f, 0.169678f, 0.182495f,
+ 0.195801f, 0.210205f, 0.225342f, 0.241455f, 0.257812f, 0.274902f, 0.292725f, 0.311035f, 0.330322f, 0.349365f, 0.369873f, 0.390137f,
+ 0.411133f, 0.432373f, 0.453369f, 0.474609f, 0.496826f, 0.519043f, 0.541504f, 0.563477f, 0.585449f, 0.606445f, 0.629395f, 0.650391f,
+ 0.672363f, 0.693848f, 0.863281f, 0.872070f, 0.872070f, 0.871582f, 0.869629f, 0.868164f, 0.001170f, 0.003151f, 0.005295f, 0.007812f,
+ 0.010132f, 0.012466f, 0.015076f, 0.017517f, 0.019943f, 0.023178f, 0.026443f, 0.029312f, 0.032471f, 0.036041f, 0.039978f, 0.044037f,
+ 0.048828f, 0.053070f, 0.057983f, 0.063232f, 0.068909f, 0.075378f, 0.081909f, 0.088745f, 0.096375f, 0.104309f, 0.113281f, 0.122437f,
+ 0.132202f, 0.142944f, 0.154419f, 0.166138f, 0.178955f, 0.192505f, 0.206421f, 0.221558f, 0.237183f, 0.253906f, 0.270996f, 0.289062f,
+ 0.308105f, 0.326904f, 0.346924f, 0.366455f, 0.387695f, 0.408936f, 0.430176f, 0.451416f, 0.474365f, 0.496582f, 0.518066f, 0.541016f,
+ 0.563965f, 0.585938f, 0.608887f, 0.630859f, 0.654297f, 0.675781f, 0.856934f, 0.865234f, 0.866211f, 0.864746f, 0.863281f, 0.862793f,
+ 0.001049f, 0.003254f, 0.005234f, 0.007263f, 0.009270f, 0.011307f, 0.013596f, 0.015869f, 0.018555f, 0.020844f, 0.023972f, 0.026566f,
+ 0.029739f, 0.033020f, 0.036316f, 0.039856f, 0.044159f, 0.048096f, 0.052277f, 0.057281f, 0.062439f, 0.067871f, 0.073792f, 0.079956f,
+ 0.087158f, 0.094055f, 0.102234f, 0.110535f, 0.119934f, 0.129517f, 0.140259f, 0.151245f, 0.162842f, 0.175537f, 0.189209f, 0.203369f,
+ 0.218262f, 0.233643f, 0.250488f, 0.268066f, 0.285645f, 0.304443f, 0.324219f, 0.343750f, 0.364014f, 0.385254f, 0.406494f, 0.428223f,
+ 0.450928f, 0.472656f, 0.495605f, 0.519043f, 0.541504f, 0.565918f, 0.588379f, 0.612305f, 0.635742f, 0.659180f, 0.850098f, 0.859863f,
+ 0.859863f, 0.858398f, 0.857910f, 0.856934f, 0.000914f, 0.002861f, 0.004742f, 0.006569f, 0.008415f, 0.010521f, 0.012596f, 0.014648f,
+ 0.016708f, 0.019089f, 0.021515f, 0.023865f, 0.026688f, 0.029572f, 0.032928f, 0.036377f, 0.039337f, 0.043365f, 0.047333f, 0.051544f,
+ 0.056305f, 0.061066f, 0.066406f, 0.071960f, 0.078247f, 0.084961f, 0.092163f, 0.099426f, 0.108215f, 0.116943f, 0.126831f, 0.136719f,
+ 0.148193f, 0.159302f, 0.171875f, 0.185669f, 0.199585f, 0.214478f, 0.230469f, 0.247070f, 0.264160f, 0.282471f, 0.301270f, 0.321045f,
+ 0.341553f, 0.362061f, 0.383545f, 0.404785f, 0.427734f, 0.449951f, 0.473389f, 0.496582f, 0.520020f, 0.543457f, 0.568359f, 0.592285f,
+ 0.615723f, 0.639648f, 0.840820f, 0.851074f, 0.853027f, 0.853027f, 0.852051f, 0.850586f, 0.000679f, 0.002518f, 0.004173f, 0.006149f,
+ 0.008064f, 0.009369f, 0.011551f, 0.013222f, 0.015175f, 0.017212f, 0.019592f, 0.021835f, 0.024048f, 0.026932f, 0.029846f, 0.032623f,
+ 0.035675f, 0.038940f, 0.042542f, 0.046295f, 0.050354f, 0.055054f, 0.059601f, 0.064880f, 0.070190f, 0.076233f, 0.082703f, 0.089661f,
+ 0.097229f, 0.105103f, 0.113831f, 0.123474f, 0.133423f, 0.144409f, 0.156006f, 0.168335f, 0.182495f, 0.196411f, 0.211304f, 0.227295f,
+ 0.243530f, 0.260986f, 0.279053f, 0.298828f, 0.318359f, 0.339111f, 0.360107f, 0.381348f, 0.403809f, 0.427490f, 0.449463f, 0.473633f,
+ 0.497803f, 0.521484f, 0.546875f, 0.570801f, 0.595703f, 0.620605f, 0.833008f, 0.845215f, 0.845703f, 0.845703f, 0.845215f, 0.843750f,
+ 0.000719f, 0.002470f, 0.003975f, 0.005337f, 0.007275f, 0.008713f, 0.010376f, 0.012032f, 0.013580f, 0.015793f, 0.017609f, 0.019501f,
+ 0.021530f, 0.024277f, 0.026657f, 0.029312f, 0.031982f, 0.035187f, 0.038086f, 0.041565f, 0.045288f, 0.049103f, 0.053436f, 0.058136f,
+ 0.062927f, 0.068054f, 0.073853f, 0.080383f, 0.087341f, 0.094666f, 0.102173f, 0.111084f, 0.120300f, 0.130859f, 0.141235f, 0.152954f,
+ 0.164429f, 0.178223f, 0.192749f, 0.207642f, 0.223145f, 0.239868f, 0.258301f, 0.276611f, 0.295654f, 0.316162f, 0.337402f, 0.358643f,
+ 0.380859f, 0.403320f, 0.427002f, 0.450684f, 0.474609f, 0.499756f, 0.523926f, 0.550781f, 0.575195f, 0.600586f, 0.824707f, 0.836914f,
+ 0.838379f, 0.838867f, 0.837402f, 0.837402f, 0.000683f, 0.002361f, 0.003649f, 0.005116f, 0.006416f, 0.008202f, 0.009460f, 0.010941f,
+ 0.012817f, 0.014099f, 0.015839f, 0.017593f, 0.019867f, 0.021988f, 0.023926f, 0.026276f, 0.028824f, 0.031311f, 0.034363f, 0.036957f,
+ 0.040375f, 0.043823f, 0.047546f, 0.051758f, 0.056183f, 0.061249f, 0.066162f, 0.071777f, 0.077942f, 0.084534f, 0.091553f, 0.099487f,
+ 0.107910f, 0.116882f, 0.127075f, 0.137451f, 0.148804f, 0.161499f, 0.174805f, 0.188721f, 0.203735f, 0.220093f, 0.237427f, 0.254639f,
+ 0.273926f, 0.293457f, 0.313965f, 0.334961f, 0.357666f, 0.379883f, 0.403076f, 0.427002f, 0.451660f, 0.476807f, 0.501953f, 0.527344f,
+ 0.553711f, 0.581055f, 0.815918f, 0.829102f, 0.831055f, 0.831055f, 0.831055f, 0.830566f, 0.000607f, 0.001863f, 0.003416f, 0.004528f,
+ 0.005943f, 0.007191f, 0.008781f, 0.009964f, 0.011337f, 0.012939f, 0.014458f, 0.015808f, 0.018051f, 0.019394f, 0.021332f, 0.023529f,
+ 0.025803f, 0.028168f, 0.030502f, 0.033020f, 0.036072f, 0.039032f, 0.042419f, 0.046082f, 0.049927f, 0.054321f, 0.058411f, 0.063538f,
+ 0.069336f, 0.075684f, 0.081787f, 0.088562f, 0.096436f, 0.104553f, 0.113281f, 0.123596f, 0.133667f, 0.145386f, 0.157471f, 0.171021f,
+ 0.185547f, 0.200562f, 0.216553f, 0.234619f, 0.251709f, 0.271240f, 0.291504f, 0.312012f, 0.333496f, 0.355957f, 0.379395f, 0.403076f,
+ 0.428223f, 0.453857f, 0.479492f, 0.506348f, 0.532715f, 0.560059f, 0.805664f, 0.820801f, 0.823730f, 0.822754f, 0.822754f, 0.822266f,
+ 0.000593f, 0.001862f, 0.002966f, 0.004341f, 0.005600f, 0.006516f, 0.007626f, 0.008995f, 0.010223f, 0.011292f, 0.012848f, 0.014427f,
+ 0.016098f, 0.017532f, 0.019165f, 0.021027f, 0.022842f, 0.024918f, 0.027115f, 0.029739f, 0.032013f, 0.034637f, 0.037506f, 0.040955f,
+ 0.044220f, 0.048065f, 0.051941f, 0.056305f, 0.061768f, 0.066528f, 0.072327f, 0.078979f, 0.085571f, 0.092834f, 0.101135f, 0.110229f,
+ 0.119690f, 0.130127f, 0.141602f, 0.153564f, 0.167114f, 0.181763f, 0.196899f, 0.213623f, 0.230957f, 0.249268f, 0.268555f, 0.289062f,
+ 0.310059f, 0.333252f, 0.355957f, 0.379883f, 0.404541f, 0.430176f, 0.456055f, 0.483887f, 0.510254f, 0.539062f, 0.797852f, 0.812988f,
+ 0.814941f, 0.815430f, 0.815918f, 0.814453f, 0.000556f, 0.001811f, 0.002998f, 0.003815f, 0.004658f, 0.005905f, 0.007099f, 0.008232f,
+ 0.009239f, 0.010483f, 0.011559f, 0.013016f, 0.014305f, 0.015671f, 0.017090f, 0.018646f, 0.020370f, 0.022369f, 0.024124f, 0.026062f,
+ 0.028458f, 0.030624f, 0.033264f, 0.036041f, 0.039307f, 0.042053f, 0.045807f, 0.049530f, 0.054016f, 0.058441f, 0.063904f, 0.069641f,
+ 0.075745f, 0.082520f, 0.089539f, 0.097717f, 0.106750f, 0.116150f, 0.126587f, 0.137817f, 0.150024f, 0.163452f, 0.177490f, 0.193359f,
+ 0.209717f, 0.227539f, 0.246704f, 0.266602f, 0.287598f, 0.309326f, 0.332520f, 0.355713f, 0.380371f, 0.406494f, 0.432861f, 0.459961f,
+ 0.488525f, 0.517090f, 0.787598f, 0.804199f, 0.806641f, 0.807617f, 0.807617f, 0.807129f, 0.000507f, 0.001697f, 0.002468f, 0.003351f,
+ 0.004425f, 0.005486f, 0.006325f, 0.007412f, 0.008156f, 0.009270f, 0.010239f, 0.011497f, 0.012520f, 0.013954f, 0.015182f, 0.016617f,
+ 0.018036f, 0.019714f, 0.021362f, 0.022934f, 0.024704f, 0.026886f, 0.029419f, 0.031525f, 0.034302f, 0.037292f, 0.040558f, 0.043701f,
+ 0.047577f, 0.051849f, 0.056183f, 0.061249f, 0.066467f, 0.072876f, 0.078918f, 0.086548f, 0.094116f, 0.102844f, 0.112427f, 0.122620f,
+ 0.133667f, 0.146362f, 0.159668f, 0.174438f, 0.190063f, 0.207153f, 0.225098f, 0.244263f, 0.264648f, 0.286377f, 0.308350f, 0.332275f,
+ 0.357178f, 0.382080f, 0.408936f, 0.436035f, 0.465820f, 0.495361f, 0.776855f, 0.794922f, 0.797852f, 0.799316f, 0.798828f, 0.798340f,
+ 0.000366f, 0.001644f, 0.002289f, 0.003046f, 0.004082f, 0.005032f, 0.005550f, 0.006599f, 0.007389f, 0.008369f, 0.009201f, 0.010315f,
+ 0.011276f, 0.012405f, 0.013466f, 0.014587f, 0.015991f, 0.017303f, 0.018692f, 0.020081f, 0.021851f, 0.023865f, 0.025726f, 0.027771f,
+ 0.030136f, 0.032532f, 0.035309f, 0.038422f, 0.041626f, 0.045044f, 0.048767f, 0.053375f, 0.057861f, 0.063477f, 0.069031f, 0.075684f,
+ 0.082336f, 0.090515f, 0.099182f, 0.107849f, 0.118958f, 0.130005f, 0.142212f, 0.156128f, 0.170898f, 0.186890f, 0.203857f, 0.222534f,
+ 0.241821f, 0.263428f, 0.285156f, 0.308105f, 0.332275f, 0.359131f, 0.385010f, 0.413086f, 0.441895f, 0.472168f, 0.767090f, 0.785645f,
+ 0.789062f, 0.789551f, 0.790527f, 0.789551f, 0.000340f, 0.001434f, 0.002129f, 0.002827f, 0.003696f, 0.004463f, 0.005112f, 0.005730f,
+ 0.006836f, 0.007465f, 0.008217f, 0.008972f, 0.009972f, 0.010887f, 0.011948f, 0.012794f, 0.013947f, 0.015030f, 0.016266f, 0.017670f,
+ 0.019165f, 0.020813f, 0.022415f, 0.024216f, 0.026047f, 0.028336f, 0.030594f, 0.033142f, 0.035858f, 0.039154f, 0.042328f, 0.046265f,
+ 0.050537f, 0.055237f, 0.059998f, 0.065918f, 0.072083f, 0.078918f, 0.086243f, 0.094788f, 0.104309f, 0.114807f, 0.125854f, 0.138672f,
+ 0.152222f, 0.166992f, 0.183716f, 0.200928f, 0.220459f, 0.240112f, 0.261719f, 0.284668f, 0.308838f, 0.333740f, 0.360840f, 0.388672f,
+ 0.418213f, 0.448730f, 0.756348f, 0.775391f, 0.779297f, 0.780273f, 0.781250f, 0.780273f, 0.000511f, 0.001174f, 0.002163f, 0.002554f,
+ 0.003391f, 0.003990f, 0.004547f, 0.005211f, 0.005993f, 0.006653f, 0.007462f, 0.007942f, 0.008781f, 0.009476f, 0.010323f, 0.011444f,
+ 0.012207f, 0.013062f, 0.014336f, 0.015427f, 0.016464f, 0.017929f, 0.019287f, 0.021164f, 0.022461f, 0.024567f, 0.026474f, 0.028885f,
+ 0.031067f, 0.033630f, 0.036835f, 0.040070f, 0.043488f, 0.047394f, 0.051910f, 0.056732f, 0.062378f, 0.068481f, 0.075073f, 0.082764f,
+ 0.090881f, 0.100403f, 0.110779f, 0.122009f, 0.134399f, 0.148560f, 0.163940f, 0.180298f, 0.198120f, 0.218140f, 0.239014f, 0.260986f,
+ 0.285645f, 0.310059f, 0.336182f, 0.364502f, 0.393311f, 0.424316f, 0.744629f, 0.765137f, 0.769531f, 0.770508f, 0.771484f, 0.771484f,
+ 0.000374f, 0.000983f, 0.001696f, 0.002279f, 0.002924f, 0.003571f, 0.004139f, 0.004742f, 0.005390f, 0.005817f, 0.006371f, 0.006981f,
+ 0.007648f, 0.008354f, 0.009041f, 0.009727f, 0.010536f, 0.011375f, 0.012398f, 0.013535f, 0.014389f, 0.015541f, 0.016602f, 0.018112f,
+ 0.019516f, 0.020996f, 0.022644f, 0.024582f, 0.026627f, 0.028748f, 0.031586f, 0.034210f, 0.037415f, 0.040588f, 0.044464f, 0.048676f,
+ 0.053192f, 0.058472f, 0.064880f, 0.070984f, 0.078674f, 0.086914f, 0.096191f, 0.106445f, 0.117859f, 0.130859f, 0.144775f, 0.160522f,
+ 0.177490f, 0.196411f, 0.215942f, 0.237793f, 0.261475f, 0.285645f, 0.312012f, 0.339111f, 0.368652f, 0.400391f, 0.733887f, 0.755371f,
+ 0.759766f, 0.760742f, 0.761719f, 0.761719f, 0.000298f, 0.000924f, 0.001542f, 0.002125f, 0.002439f, 0.003153f, 0.003502f, 0.004196f,
+ 0.004585f, 0.005039f, 0.005531f, 0.006054f, 0.006531f, 0.007217f, 0.007935f, 0.008362f, 0.009171f, 0.009773f, 0.010704f, 0.011505f,
+ 0.012207f, 0.013321f, 0.014381f, 0.015556f, 0.016586f, 0.017792f, 0.019608f, 0.020844f, 0.022583f, 0.024536f, 0.026566f, 0.028885f,
+ 0.031494f, 0.034332f, 0.037689f, 0.041260f, 0.045258f, 0.049927f, 0.054901f, 0.060699f, 0.067322f, 0.074768f, 0.082764f, 0.091675f,
+ 0.102173f, 0.113831f, 0.126831f, 0.141113f, 0.157104f, 0.175049f, 0.194580f, 0.215210f, 0.237305f, 0.261475f, 0.287598f, 0.314697f,
+ 0.344482f, 0.375977f, 0.721680f, 0.744629f, 0.749512f, 0.751465f, 0.751465f, 0.751465f, 0.000275f, 0.001002f, 0.001335f, 0.001704f,
+ 0.002264f, 0.002790f, 0.003202f, 0.003555f, 0.004017f, 0.004368f, 0.004894f, 0.005318f, 0.005592f, 0.006241f, 0.006611f, 0.007317f,
+ 0.007851f, 0.008560f, 0.009071f, 0.009758f, 0.010429f, 0.011375f, 0.011986f, 0.013130f, 0.013916f, 0.015205f, 0.016403f, 0.017624f,
+ 0.019119f, 0.020660f, 0.022278f, 0.024582f, 0.026474f, 0.029007f, 0.031738f, 0.034668f, 0.038025f, 0.041962f, 0.046417f, 0.051270f,
+ 0.056915f, 0.063110f, 0.070312f, 0.078369f, 0.087769f, 0.098145f, 0.109863f, 0.123352f, 0.137451f, 0.154785f, 0.172363f, 0.192261f,
+ 0.214233f, 0.237793f, 0.262939f, 0.289795f, 0.319336f, 0.351074f, 0.708984f, 0.733398f, 0.738281f, 0.740234f, 0.741211f, 0.740723f,
+ 0.000334f, 0.000805f, 0.001231f, 0.001640f, 0.002033f, 0.002277f, 0.002871f, 0.003115f, 0.003481f, 0.003895f, 0.004147f, 0.004379f,
+ 0.004841f, 0.005306f, 0.005653f, 0.006241f, 0.006630f, 0.007217f, 0.007721f, 0.008133f, 0.008842f, 0.009529f, 0.010010f, 0.011017f,
+ 0.011780f, 0.012733f, 0.013626f, 0.014824f, 0.015656f, 0.017212f, 0.018829f, 0.020248f, 0.021973f, 0.023926f, 0.026306f, 0.028900f,
+ 0.031616f, 0.034973f, 0.038605f, 0.042816f, 0.047424f, 0.052765f, 0.059021f, 0.066162f, 0.074219f, 0.083435f, 0.093994f, 0.105835f,
+ 0.119385f, 0.134277f, 0.151611f, 0.170532f, 0.191284f, 0.214233f, 0.239014f, 0.265381f, 0.293701f, 0.325684f, 0.696289f, 0.722168f,
+ 0.727051f, 0.729004f, 0.729980f, 0.729980f, 0.000215f, 0.000635f, 0.001184f, 0.001348f, 0.001758f, 0.002171f, 0.002249f, 0.002596f,
+ 0.003004f, 0.003325f, 0.003487f, 0.003906f, 0.004108f, 0.004494f, 0.004955f, 0.005241f, 0.005726f, 0.006134f, 0.006485f, 0.006916f,
+ 0.007496f, 0.008072f, 0.008629f, 0.009071f, 0.009857f, 0.010651f, 0.011375f, 0.012283f, 0.013283f, 0.014320f, 0.015350f, 0.016739f,
+ 0.017975f, 0.019852f, 0.021454f, 0.023712f, 0.025925f, 0.028717f, 0.031769f, 0.035217f, 0.038910f, 0.043396f, 0.048767f, 0.054901f,
+ 0.061707f, 0.069824f, 0.078613f, 0.089783f, 0.101685f, 0.115479f, 0.131104f, 0.149292f, 0.168823f, 0.190674f, 0.214844f, 0.241211f,
+ 0.269775f, 0.299561f, 0.683594f, 0.709961f, 0.715332f, 0.717773f, 0.718262f, 0.718750f, 0.000199f, 0.000826f, 0.001047f, 0.001288f,
+ 0.001600f, 0.001857f, 0.002014f, 0.002329f, 0.002535f, 0.002785f, 0.003027f, 0.003210f, 0.003580f, 0.003788f, 0.004025f, 0.004444f,
+ 0.004791f, 0.004974f, 0.005417f, 0.005909f, 0.006248f, 0.006672f, 0.007118f, 0.007664f, 0.008232f, 0.008759f, 0.009598f, 0.009964f,
+ 0.010956f, 0.011650f, 0.012665f, 0.013702f, 0.014832f, 0.016144f, 0.017654f, 0.019211f, 0.021118f, 0.023102f, 0.025681f, 0.028320f,
+ 0.031708f, 0.035370f, 0.039673f, 0.044739f, 0.050812f, 0.057800f, 0.065796f, 0.074768f, 0.085510f, 0.097961f, 0.112000f, 0.128662f,
+ 0.147217f, 0.168213f, 0.190796f, 0.216309f, 0.244751f, 0.274902f, 0.669922f, 0.698730f, 0.703613f, 0.705566f, 0.707031f, 0.707031f,
+ 0.000212f, 0.000458f, 0.000959f, 0.001192f, 0.001321f, 0.001500f, 0.001823f, 0.002064f, 0.002073f, 0.002293f, 0.002512f, 0.002768f,
+ 0.002981f, 0.003138f, 0.003431f, 0.003765f, 0.003918f, 0.004238f, 0.004482f, 0.004814f, 0.005245f, 0.005531f, 0.005871f, 0.006214f,
+ 0.006660f, 0.007236f, 0.007664f, 0.008331f, 0.008812f, 0.009628f, 0.010277f, 0.010979f, 0.012016f, 0.012978f, 0.014084f, 0.015495f,
+ 0.016937f, 0.018494f, 0.020386f, 0.022659f, 0.025208f, 0.028183f, 0.031860f, 0.036072f, 0.040894f, 0.046326f, 0.053009f, 0.061127f,
+ 0.070374f, 0.081238f, 0.094238f, 0.109314f, 0.126343f, 0.145874f, 0.167847f, 0.192505f, 0.219604f, 0.249634f, 0.656738f, 0.686035f,
+ 0.690430f, 0.694336f, 0.694336f, 0.696777f, 0.000151f, 0.000529f, 0.000692f, 0.000883f, 0.001153f, 0.001337f, 0.001380f, 0.001520f,
+ 0.001753f, 0.001886f, 0.002077f, 0.002243f, 0.002386f, 0.002556f, 0.002832f, 0.003029f, 0.003277f, 0.003447f, 0.003683f, 0.003952f,
+ 0.004135f, 0.004578f, 0.004833f, 0.005222f, 0.005417f, 0.005810f, 0.006355f, 0.006718f, 0.007076f, 0.007652f, 0.008293f, 0.008980f,
+ 0.009674f, 0.010422f, 0.011276f, 0.012283f, 0.013443f, 0.014664f, 0.016113f, 0.017853f, 0.019897f, 0.022156f, 0.024826f, 0.028275f,
+ 0.032135f, 0.036865f, 0.042389f, 0.049011f, 0.056732f, 0.066223f, 0.077576f, 0.090820f, 0.106384f, 0.124512f, 0.145264f, 0.169067f,
+ 0.195190f, 0.224976f, 0.642578f, 0.671387f, 0.679688f, 0.682617f, 0.682617f, 0.683594f, 0.000127f, 0.000376f, 0.000600f, 0.000721f,
+ 0.000901f, 0.001066f, 0.001180f, 0.001332f, 0.001455f, 0.001549f, 0.001709f, 0.001831f, 0.001947f, 0.002150f, 0.002245f, 0.002443f,
+ 0.002682f, 0.002844f, 0.002989f, 0.003201f, 0.003403f, 0.003683f, 0.003883f, 0.004097f, 0.004372f, 0.004665f, 0.004963f, 0.005348f,
+ 0.005711f, 0.006165f, 0.006672f, 0.007004f, 0.007610f, 0.008278f, 0.008873f, 0.009636f, 0.010475f, 0.011475f, 0.012634f, 0.014053f,
+ 0.015404f, 0.017242f, 0.019104f, 0.021774f, 0.024750f, 0.028458f, 0.032745f, 0.038391f, 0.044861f, 0.052795f, 0.062103f, 0.073914f,
+ 0.087830f, 0.104553f, 0.123718f, 0.145996f, 0.171509f, 0.200439f, 0.627930f, 0.658691f, 0.666504f, 0.668945f, 0.671387f, 0.671387f,
+ 0.000013f, 0.000374f, 0.000443f, 0.000688f, 0.000819f, 0.000844f, 0.001004f, 0.001132f, 0.001216f, 0.001259f, 0.001405f, 0.001523f,
+ 0.001566f, 0.001753f, 0.001842f, 0.001997f, 0.002022f, 0.002287f, 0.002377f, 0.002541f, 0.002787f, 0.002878f, 0.003096f, 0.003283f,
+ 0.003551f, 0.003651f, 0.003971f, 0.004272f, 0.004524f, 0.004887f, 0.005196f, 0.005527f, 0.005939f, 0.006386f, 0.006977f, 0.007526f,
+ 0.008148f, 0.008835f, 0.009689f, 0.010689f, 0.011810f, 0.013000f, 0.014641f, 0.016388f, 0.018799f, 0.021469f, 0.024734f, 0.029022f,
+ 0.034210f, 0.040588f, 0.048401f, 0.058319f, 0.070435f, 0.085205f, 0.102905f, 0.123901f, 0.147827f, 0.175903f, 0.612793f, 0.645508f,
+ 0.653320f, 0.656250f, 0.657227f, 0.657227f, 0.000113f, 0.000234f, 0.000465f, 0.000547f, 0.000646f, 0.000684f, 0.000711f, 0.000832f,
+ 0.000963f, 0.000999f, 0.001042f, 0.001183f, 0.001279f, 0.001402f, 0.001494f, 0.001513f, 0.001688f, 0.001716f, 0.001919f, 0.001993f,
+ 0.002081f, 0.002253f, 0.002441f, 0.002575f, 0.002714f, 0.002876f, 0.003050f, 0.003214f, 0.003531f, 0.003714f, 0.003956f, 0.004276f,
+ 0.004604f, 0.004967f, 0.005386f, 0.005718f, 0.006283f, 0.006790f, 0.007290f, 0.008133f, 0.008957f, 0.009987f, 0.010956f, 0.012375f,
+ 0.013916f, 0.015991f, 0.018311f, 0.021347f, 0.025253f, 0.030289f, 0.036560f, 0.044586f, 0.054779f, 0.067749f, 0.083252f, 0.102722f,
+ 0.125732f, 0.152100f, 0.597168f, 0.631836f, 0.639160f, 0.643555f, 0.643066f, 0.645508f, 0.000207f, 0.000175f, 0.000364f, 0.000507f,
+ 0.000496f, 0.000569f, 0.000683f, 0.000584f, 0.000737f, 0.000764f, 0.000885f, 0.000964f, 0.000999f, 0.001076f, 0.001085f, 0.001272f,
+ 0.001327f, 0.001354f, 0.001491f, 0.001494f, 0.001677f, 0.001781f, 0.001862f, 0.001976f, 0.002079f, 0.002190f, 0.002338f, 0.002481f,
+ 0.002691f, 0.002811f, 0.003117f, 0.003214f, 0.003422f, 0.003706f, 0.003990f, 0.004314f, 0.004608f, 0.004982f, 0.005379f, 0.006027f,
+ 0.006580f, 0.007351f, 0.008049f, 0.009041f, 0.010323f, 0.011551f, 0.013428f, 0.015419f, 0.018219f, 0.021713f, 0.026550f, 0.032715f,
+ 0.040833f, 0.051605f, 0.065552f, 0.082458f, 0.104004f, 0.129395f, 0.582031f, 0.618652f, 0.625488f, 0.627930f, 0.630859f, 0.631348f,
+ 0.000189f, 0.000160f, 0.000272f, 0.000387f, 0.000335f, 0.000486f, 0.000424f, 0.000469f, 0.000551f, 0.000589f, 0.000700f, 0.000727f,
+ 0.000772f, 0.000859f, 0.000891f, 0.000872f, 0.001000f, 0.001048f, 0.001076f, 0.001172f, 0.001224f, 0.001311f, 0.001376f, 0.001450f,
+ 0.001554f, 0.001591f, 0.001760f, 0.001838f, 0.001999f, 0.002180f, 0.002333f, 0.002388f, 0.002584f, 0.002777f, 0.002907f, 0.003162f,
+ 0.003368f, 0.003677f, 0.003979f, 0.004303f, 0.004715f, 0.005188f, 0.005787f, 0.006378f, 0.007313f, 0.008194f, 0.009407f, 0.010887f,
+ 0.012779f, 0.015198f, 0.018494f, 0.022888f, 0.029037f, 0.037659f, 0.048920f, 0.064270f, 0.083740f, 0.107300f, 0.565918f, 0.603516f,
+ 0.611328f, 0.614746f, 0.617188f, 0.618164f, 0.000000f, 0.000170f, 0.000207f, 0.000274f, 0.000292f, 0.000309f, 0.000381f, 0.000326f,
+ 0.000418f, 0.000439f, 0.000519f, 0.000519f, 0.000560f, 0.000574f, 0.000652f, 0.000678f, 0.000717f, 0.000756f, 0.000782f, 0.000820f,
+ 0.000893f, 0.000937f, 0.000991f, 0.001063f, 0.001112f, 0.001174f, 0.001284f, 0.001302f, 0.001408f, 0.001460f, 0.001586f, 0.001711f,
+ 0.001826f, 0.001959f, 0.002058f, 0.002207f, 0.002388f, 0.002565f, 0.002836f, 0.003046f, 0.003284f, 0.003567f, 0.004009f, 0.004463f,
+ 0.005001f, 0.005661f, 0.006451f, 0.007473f, 0.008751f, 0.010368f, 0.012611f, 0.015587f, 0.019730f, 0.025787f, 0.034729f, 0.047272f,
+ 0.064392f, 0.087097f, 0.550293f, 0.587891f, 0.596680f, 0.600586f, 0.602539f, 0.603516f, 0.000000f, 0.000057f, 0.000175f, 0.000210f,
+ 0.000221f, 0.000261f, 0.000224f, 0.000285f, 0.000296f, 0.000329f, 0.000374f, 0.000329f, 0.000344f, 0.000416f, 0.000421f, 0.000479f,
+ 0.000455f, 0.000530f, 0.000552f, 0.000598f, 0.000640f, 0.000670f, 0.000695f, 0.000740f, 0.000798f, 0.000806f, 0.000883f, 0.000908f,
+ 0.000983f, 0.001094f, 0.001083f, 0.001169f, 0.001242f, 0.001340f, 0.001440f, 0.001536f, 0.001601f, 0.001752f, 0.001893f, 0.002029f,
+ 0.002218f, 0.002424f, 0.002651f, 0.002934f, 0.003294f, 0.003681f, 0.004200f, 0.004833f, 0.005688f, 0.006863f, 0.008202f, 0.010178f,
+ 0.012955f, 0.016846f, 0.023163f, 0.032745f, 0.047150f, 0.067383f, 0.534180f, 0.574219f, 0.582031f, 0.584961f, 0.586914f, 0.589844f,
+ 0.000000f, 0.000105f, 0.000145f, 0.000101f, 0.000161f, 0.000163f, 0.000165f, 0.000193f, 0.000190f, 0.000202f, 0.000205f, 0.000260f,
+ 0.000251f, 0.000281f, 0.000305f, 0.000316f, 0.000323f, 0.000346f, 0.000364f, 0.000383f, 0.000413f, 0.000436f, 0.000461f, 0.000486f,
+ 0.000515f, 0.000564f, 0.000594f, 0.000616f, 0.000639f, 0.000677f, 0.000729f, 0.000748f, 0.000842f, 0.000861f, 0.000943f, 0.000970f,
+ 0.001054f, 0.001120f, 0.001219f, 0.001310f, 0.001398f, 0.001534f, 0.001709f, 0.001852f, 0.002096f, 0.002291f, 0.002594f, 0.002987f,
+ 0.003481f, 0.004128f, 0.004997f, 0.006218f, 0.007950f, 0.010445f, 0.014313f, 0.020874f, 0.032166f, 0.049866f, 0.517578f, 0.558105f,
+ 0.567383f, 0.570801f, 0.573730f, 0.574707f, 0.000000f, 0.000097f, 0.000089f, 0.000082f, 0.000092f, 0.000096f, 0.000092f, 0.000118f,
+ 0.000126f, 0.000130f, 0.000138f, 0.000138f, 0.000143f, 0.000163f, 0.000181f, 0.000187f, 0.000195f, 0.000228f, 0.000221f, 0.000261f,
+ 0.000243f, 0.000254f, 0.000274f, 0.000299f, 0.000334f, 0.000332f, 0.000345f, 0.000362f, 0.000394f, 0.000410f, 0.000433f, 0.000463f,
+ 0.000497f, 0.000510f, 0.000562f, 0.000594f, 0.000636f, 0.000670f, 0.000731f, 0.000777f, 0.000832f, 0.000927f, 0.000991f, 0.001101f,
+ 0.001210f, 0.001350f, 0.001513f, 0.001720f, 0.001999f, 0.002373f, 0.002815f, 0.003498f, 0.004478f, 0.006001f, 0.008347f, 0.012299f,
+ 0.019669f, 0.034210f, 0.501465f, 0.542969f, 0.552246f, 0.556641f, 0.559082f, 0.559570f, 0.000107f, 0.000087f, 0.000077f, 0.000070f,
+ 0.000065f, 0.000066f, 0.000059f, 0.000064f, 0.000065f, 0.000071f, 0.000070f, 0.000095f, 0.000081f, 0.000085f, 0.000110f, 0.000097f,
+ 0.000117f, 0.000126f, 0.000127f, 0.000133f, 0.000132f, 0.000141f, 0.000169f, 0.000173f, 0.000185f, 0.000183f, 0.000192f, 0.000215f,
+ 0.000216f, 0.000235f, 0.000236f, 0.000265f, 0.000278f, 0.000290f, 0.000313f, 0.000317f, 0.000347f, 0.000365f, 0.000400f, 0.000422f,
+ 0.000457f, 0.000494f, 0.000535f, 0.000586f, 0.000639f, 0.000700f, 0.000786f, 0.000888f, 0.001019f, 0.001207f, 0.001435f, 0.001746f,
+ 0.002258f, 0.003019f, 0.004299f, 0.006523f, 0.010612f, 0.020859f, 0.484619f, 0.527344f, 0.536621f, 0.541504f, 0.542969f, 0.544922f,
+ 0.000092f, 0.000070f, 0.000062f, 0.000056f, 0.000051f, 0.000048f, 0.000045f, 0.000044f, 0.000041f, 0.000039f, 0.000038f, 0.000037f,
+ 0.000047f, 0.000039f, 0.000041f, 0.000041f, 0.000058f, 0.000053f, 0.000062f, 0.000064f, 0.000068f, 0.000072f, 0.000076f, 0.000076f,
+ 0.000078f, 0.000092f, 0.000085f, 0.000101f, 0.000104f, 0.000110f, 0.000115f, 0.000118f, 0.000127f, 0.000133f, 0.000152f, 0.000150f,
+ 0.000163f, 0.000190f, 0.000190f, 0.000202f, 0.000213f, 0.000225f, 0.000249f, 0.000268f, 0.000296f, 0.000321f, 0.000354f, 0.000402f,
+ 0.000458f, 0.000520f, 0.000618f, 0.000744f, 0.000950f, 0.001263f, 0.001822f, 0.002865f, 0.005028f, 0.010544f, 0.468018f, 0.511230f,
+ 0.521484f, 0.524902f, 0.529297f, 0.529785f, 0.000067f, 0.000049f, 0.000041f, 0.000037f, 0.000034f, 0.000032f, 0.000031f, 0.000029f,
+ 0.000028f, 0.000027f, 0.000027f, 0.000026f, 0.000025f, 0.000023f, 0.000022f, 0.000021f, 0.000020f, 0.000020f, 0.000023f, 0.000024f,
+ 0.000021f, 0.000022f, 0.000025f, 0.000029f, 0.000030f, 0.000034f, 0.000036f, 0.000034f, 0.000039f, 0.000038f, 0.000045f, 0.000045f,
+ 0.000048f, 0.000051f, 0.000053f, 0.000055f, 0.000063f, 0.000070f, 0.000073f, 0.000073f, 0.000080f, 0.000084f, 0.000089f, 0.000102f,
+ 0.000107f, 0.000115f, 0.000128f, 0.000145f, 0.000156f, 0.000178f, 0.000213f, 0.000253f, 0.000311f, 0.000400f, 0.000572f, 0.000916f,
+ 0.001751f, 0.004158f, 0.450439f, 0.496338f, 0.505859f, 0.510742f, 0.513184f, 0.514648f, 0.000016f, 0.000013f, 0.000011f, 0.000010f,
+ 0.000012f, 0.000012f, 0.000011f, 0.000012f, 0.000011f, 0.000012f, 0.000011f, 0.000012f, 0.000012f, 0.000011f, 0.000011f, 0.000011f,
+ 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000010f, 0.000010f, 0.000010f, 0.000009f, 0.000009f, 0.000009f, 0.000008f, 0.000008f,
+ 0.000008f, 0.000009f, 0.000009f, 0.000009f, 0.000009f, 0.000011f, 0.000012f, 0.000012f, 0.000015f, 0.000014f, 0.000014f, 0.000017f,
+ 0.000018f, 0.000020f, 0.000020f, 0.000022f, 0.000026f, 0.000027f, 0.000028f, 0.000027f, 0.000033f, 0.000036f, 0.000044f, 0.000051f,
+ 0.000057f, 0.000078f, 0.000103f, 0.000159f, 0.000315f, 0.000997f, 0.433350f, 0.479980f, 0.490234f, 0.495605f, 0.498291f, 0.499512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000002f,
+ 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000003f, 0.000004f, 0.000004f, 0.000007f, 0.000025f, 0.416016f, 0.464111f,
+ 0.474854f, 0.479248f, 0.481934f, 0.484375f,
+ },
+ {
+ 0.023209f, 0.069336f, 0.113037f, 0.154663f, 0.193726f, 0.231812f, 0.267578f, 0.301758f, 0.333740f, 0.364258f, 0.393555f, 0.421631f,
+ 0.447510f, 0.473145f, 0.497070f, 0.520020f, 0.541992f, 0.562988f, 0.583008f, 0.602539f, 0.620605f, 0.638184f, 0.655762f, 0.671387f,
+ 0.687500f, 0.702637f, 0.716309f, 0.729980f, 0.744141f, 0.757812f, 0.769531f, 0.782227f, 0.793945f, 0.804688f, 0.815918f, 0.826172f,
+ 0.836426f, 0.846191f, 0.855957f, 0.865234f, 0.874023f, 0.882812f, 0.891113f, 0.898926f, 0.907227f, 0.915039f, 0.922852f, 0.929688f,
+ 0.937012f, 0.943848f, 0.950684f, 0.956543f, 0.963379f, 0.969238f, 0.976074f, 0.981445f, 0.986816f, 0.992676f, 0.991211f, 0.978516f,
+ 0.968750f, 0.960449f, 0.952637f, 0.945312f, 0.019730f, 0.059631f, 0.098206f, 0.135864f, 0.172119f, 0.206421f, 0.239624f, 0.272461f,
+ 0.304932f, 0.333984f, 0.362549f, 0.389648f, 0.416016f, 0.441406f, 0.466309f, 0.489502f, 0.511230f, 0.533203f, 0.554199f, 0.573242f,
+ 0.593262f, 0.611816f, 0.629395f, 0.645508f, 0.662598f, 0.678711f, 0.693359f, 0.708496f, 0.722168f, 0.735840f, 0.750000f, 0.762207f,
+ 0.773926f, 0.786133f, 0.796875f, 0.808594f, 0.818848f, 0.829590f, 0.839355f, 0.850098f, 0.859863f, 0.868652f, 0.877441f, 0.886230f,
+ 0.895020f, 0.903809f, 0.911133f, 0.918457f, 0.925781f, 0.933105f, 0.940430f, 0.946777f, 0.954590f, 0.960938f, 0.966797f, 0.973145f,
+ 0.979004f, 0.984863f, 0.987793f, 0.976074f, 0.966797f, 0.958496f, 0.951172f, 0.943848f, 0.017151f, 0.051636f, 0.085510f, 0.119202f,
+ 0.152466f, 0.184814f, 0.216187f, 0.246582f, 0.276855f, 0.305664f, 0.332764f, 0.360107f, 0.385986f, 0.411621f, 0.435791f, 0.459473f,
+ 0.481445f, 0.502441f, 0.524414f, 0.546387f, 0.565430f, 0.583496f, 0.602051f, 0.619629f, 0.636719f, 0.653320f, 0.669434f, 0.684082f,
+ 0.699707f, 0.713867f, 0.728027f, 0.741211f, 0.754883f, 0.767090f, 0.779297f, 0.791016f, 0.802734f, 0.813965f, 0.824219f, 0.833984f,
+ 0.843750f, 0.854492f, 0.863281f, 0.873535f, 0.882324f, 0.890137f, 0.898926f, 0.906738f, 0.915039f, 0.922852f, 0.930176f, 0.937012f,
+ 0.944336f, 0.951172f, 0.958008f, 0.964844f, 0.970703f, 0.977051f, 0.983887f, 0.972656f, 0.964355f, 0.956543f, 0.949219f, 0.942383f,
+ 0.014885f, 0.044678f, 0.075195f, 0.104919f, 0.135254f, 0.165649f, 0.194702f, 0.223633f, 0.251221f, 0.279053f, 0.305420f, 0.331543f,
+ 0.357422f, 0.382568f, 0.406982f, 0.430420f, 0.453369f, 0.475586f, 0.496582f, 0.517090f, 0.536133f, 0.556641f, 0.575684f, 0.592773f,
+ 0.611328f, 0.628418f, 0.643555f, 0.661621f, 0.676270f, 0.691406f, 0.705566f, 0.720215f, 0.733887f, 0.746582f, 0.759766f, 0.772949f,
+ 0.784668f, 0.795898f, 0.807129f, 0.818359f, 0.828125f, 0.838867f, 0.848633f, 0.858887f, 0.867676f, 0.877441f, 0.886230f, 0.894531f,
+ 0.903320f, 0.911621f, 0.919434f, 0.927734f, 0.934570f, 0.940918f, 0.948730f, 0.956543f, 0.962402f, 0.969238f, 0.979980f, 0.970215f,
+ 0.961914f, 0.954102f, 0.947266f, 0.940918f, 0.013046f, 0.038940f, 0.066162f, 0.093323f, 0.120544f, 0.147583f, 0.174683f, 0.201538f,
+ 0.228516f, 0.254639f, 0.280518f, 0.304932f, 0.330566f, 0.354492f, 0.379395f, 0.402100f, 0.424561f, 0.446533f, 0.467529f, 0.488525f,
+ 0.509277f, 0.529297f, 0.547852f, 0.566895f, 0.585449f, 0.602539f, 0.620605f, 0.636230f, 0.653809f, 0.667480f, 0.684570f, 0.698242f,
+ 0.712891f, 0.726562f, 0.739746f, 0.753418f, 0.765625f, 0.777344f, 0.789551f, 0.801270f, 0.812500f, 0.823730f, 0.833984f, 0.844238f,
+ 0.854004f, 0.863770f, 0.874023f, 0.882324f, 0.891113f, 0.899902f, 0.908203f, 0.916504f, 0.924805f, 0.932129f, 0.939453f, 0.947266f,
+ 0.954102f, 0.960938f, 0.976562f, 0.967285f, 0.958984f, 0.951660f, 0.944824f, 0.938965f, 0.011696f, 0.034698f, 0.058807f, 0.083130f,
+ 0.107727f, 0.132324f, 0.156982f, 0.182251f, 0.207153f, 0.232178f, 0.256836f, 0.280762f, 0.304688f, 0.328369f, 0.352295f, 0.375244f,
+ 0.397461f, 0.419434f, 0.440430f, 0.461914f, 0.482178f, 0.501953f, 0.522461f, 0.540527f, 0.559570f, 0.577148f, 0.595703f, 0.613281f,
+ 0.628418f, 0.644531f, 0.661621f, 0.676270f, 0.691406f, 0.705078f, 0.719727f, 0.733887f, 0.746094f, 0.759766f, 0.771973f, 0.784180f,
+ 0.795898f, 0.807617f, 0.818359f, 0.829102f, 0.839844f, 0.850098f, 0.859375f, 0.869629f, 0.878906f, 0.887695f, 0.896484f, 0.905273f,
+ 0.914062f, 0.921875f, 0.929688f, 0.937988f, 0.944824f, 0.952637f, 0.973145f, 0.963379f, 0.956055f, 0.949219f, 0.942871f, 0.937012f,
+ 0.010094f, 0.030975f, 0.052063f, 0.073975f, 0.096069f, 0.118713f, 0.141479f, 0.164551f, 0.187866f, 0.211182f, 0.234985f, 0.258057f,
+ 0.280518f, 0.303467f, 0.326172f, 0.348145f, 0.370117f, 0.392822f, 0.413574f, 0.434814f, 0.455322f, 0.476074f, 0.495361f, 0.515137f,
+ 0.533203f, 0.551758f, 0.569824f, 0.586426f, 0.604492f, 0.621582f, 0.637695f, 0.654297f, 0.668945f, 0.683594f, 0.699219f, 0.712402f,
+ 0.728516f, 0.741699f, 0.753906f, 0.767090f, 0.778320f, 0.790527f, 0.802246f, 0.813965f, 0.824219f, 0.835449f, 0.846680f, 0.855957f,
+ 0.865723f, 0.875488f, 0.884766f, 0.894043f, 0.902832f, 0.911133f, 0.919434f, 0.927734f, 0.935547f, 0.943359f, 0.968750f, 0.960449f,
+ 0.953125f, 0.946289f, 0.940430f, 0.934570f, 0.008797f, 0.027466f, 0.045959f, 0.066223f, 0.086304f, 0.106506f, 0.127441f, 0.149170f,
+ 0.170532f, 0.192261f, 0.213867f, 0.236206f, 0.258057f, 0.280273f, 0.301758f, 0.323486f, 0.344727f, 0.367188f, 0.388184f, 0.408447f,
+ 0.429443f, 0.450439f, 0.469727f, 0.489014f, 0.508301f, 0.526855f, 0.545410f, 0.562500f, 0.581055f, 0.597656f, 0.613770f, 0.630859f,
+ 0.647461f, 0.663574f, 0.677734f, 0.693359f, 0.707031f, 0.720703f, 0.735352f, 0.748047f, 0.760254f, 0.772461f, 0.785156f, 0.797363f,
+ 0.810059f, 0.819824f, 0.831543f, 0.842285f, 0.852051f, 0.862793f, 0.873047f, 0.882324f, 0.891113f, 0.899902f, 0.909180f, 0.917969f,
+ 0.925781f, 0.934082f, 0.964355f, 0.957031f, 0.949707f, 0.943359f, 0.937988f, 0.932129f, 0.007927f, 0.024414f, 0.041077f, 0.059204f,
+ 0.077148f, 0.095581f, 0.115479f, 0.134644f, 0.154785f, 0.175293f, 0.196045f, 0.216553f, 0.236694f, 0.258057f, 0.278809f, 0.300049f,
+ 0.321289f, 0.342529f, 0.363281f, 0.383545f, 0.403564f, 0.424072f, 0.444092f, 0.463135f, 0.483154f, 0.501953f, 0.519531f, 0.539062f,
+ 0.555664f, 0.574707f, 0.591309f, 0.608398f, 0.624512f, 0.640137f, 0.655762f, 0.671875f, 0.686523f, 0.701172f, 0.715820f, 0.729004f,
+ 0.742676f, 0.755859f, 0.769043f, 0.781738f, 0.792969f, 0.805176f, 0.816895f, 0.827637f, 0.838867f, 0.849121f, 0.859375f, 0.870117f,
+ 0.879395f, 0.889160f, 0.898926f, 0.906738f, 0.916504f, 0.924805f, 0.960938f, 0.953125f, 0.947266f, 0.940430f, 0.935547f, 0.929688f,
+ 0.007080f, 0.022247f, 0.037445f, 0.053070f, 0.069336f, 0.086975f, 0.103577f, 0.121948f, 0.140503f, 0.158936f, 0.178833f, 0.198242f,
+ 0.217651f, 0.237793f, 0.257812f, 0.278076f, 0.297607f, 0.318604f, 0.338623f, 0.358643f, 0.378662f, 0.399170f, 0.418213f, 0.438721f,
+ 0.457520f, 0.477051f, 0.495361f, 0.513672f, 0.531250f, 0.549316f, 0.567383f, 0.583984f, 0.601562f, 0.617676f, 0.634277f, 0.650391f,
+ 0.666016f, 0.680176f, 0.695801f, 0.710449f, 0.723633f, 0.737305f, 0.750977f, 0.764648f, 0.776367f, 0.789551f, 0.802246f, 0.813477f,
+ 0.824219f, 0.835938f, 0.846680f, 0.857422f, 0.867188f, 0.876953f, 0.887207f, 0.895996f, 0.905762f, 0.915527f, 0.955566f, 0.949707f,
+ 0.943359f, 0.937988f, 0.932129f, 0.927246f, 0.006363f, 0.019516f, 0.033691f, 0.047577f, 0.062469f, 0.078186f, 0.093933f, 0.110657f,
+ 0.127563f, 0.144653f, 0.162598f, 0.181152f, 0.199707f, 0.218384f, 0.237427f, 0.257324f, 0.276367f, 0.295166f, 0.315674f, 0.335205f,
+ 0.355225f, 0.374756f, 0.393799f, 0.413574f, 0.432617f, 0.451904f, 0.470459f, 0.489258f, 0.508301f, 0.525879f, 0.543945f, 0.560059f,
+ 0.578613f, 0.595703f, 0.612793f, 0.628418f, 0.644531f, 0.659668f, 0.675293f, 0.689941f, 0.704590f, 0.719238f, 0.732910f, 0.747070f,
+ 0.759766f, 0.773438f, 0.785156f, 0.797852f, 0.809570f, 0.821289f, 0.833008f, 0.843750f, 0.854980f, 0.865723f, 0.875977f, 0.886230f,
+ 0.895508f, 0.904785f, 0.951660f, 0.945801f, 0.939941f, 0.934570f, 0.929199f, 0.924805f, 0.005985f, 0.017776f, 0.030212f, 0.043030f,
+ 0.056488f, 0.070190f, 0.085205f, 0.100342f, 0.115723f, 0.132446f, 0.148438f, 0.165771f, 0.183228f, 0.200684f, 0.218994f, 0.237183f,
+ 0.255859f, 0.274170f, 0.292725f, 0.313477f, 0.331299f, 0.351318f, 0.369873f, 0.389160f, 0.408936f, 0.426758f, 0.446533f, 0.464844f,
+ 0.483154f, 0.501465f, 0.519531f, 0.537598f, 0.555664f, 0.572754f, 0.589844f, 0.605957f, 0.622070f, 0.639648f, 0.654297f, 0.670898f,
+ 0.685059f, 0.700195f, 0.714844f, 0.728516f, 0.742188f, 0.754883f, 0.769043f, 0.781738f, 0.795410f, 0.808105f, 0.818359f, 0.830566f,
+ 0.841797f, 0.853027f, 0.863770f, 0.874023f, 0.884766f, 0.893555f, 0.947266f, 0.942383f, 0.936523f, 0.930664f, 0.926270f, 0.921387f,
+ 0.005173f, 0.016083f, 0.027359f, 0.038849f, 0.051056f, 0.063843f, 0.077026f, 0.091064f, 0.105591f, 0.120422f, 0.135498f, 0.150879f,
+ 0.167480f, 0.184326f, 0.201172f, 0.218384f, 0.236084f, 0.254395f, 0.272949f, 0.291260f, 0.309570f, 0.328125f, 0.346680f, 0.365967f,
+ 0.384766f, 0.403320f, 0.422119f, 0.440918f, 0.458984f, 0.477783f, 0.496094f, 0.513672f, 0.531738f, 0.548828f, 0.566406f, 0.583984f,
+ 0.600098f, 0.617188f, 0.632812f, 0.649902f, 0.665527f, 0.681152f, 0.694824f, 0.709473f, 0.724121f, 0.738770f, 0.752441f, 0.765137f,
+ 0.778809f, 0.791992f, 0.803711f, 0.815918f, 0.828125f, 0.839844f, 0.851562f, 0.862793f, 0.873535f, 0.883789f, 0.941895f, 0.938477f,
+ 0.933105f, 0.927246f, 0.922363f, 0.918457f, 0.004791f, 0.014610f, 0.024475f, 0.035126f, 0.046478f, 0.057922f, 0.069885f, 0.083008f,
+ 0.096069f, 0.109253f, 0.123840f, 0.137939f, 0.153076f, 0.168701f, 0.185059f, 0.200928f, 0.218262f, 0.234985f, 0.252686f, 0.270264f,
+ 0.288086f, 0.306396f, 0.324951f, 0.343018f, 0.362305f, 0.379883f, 0.398926f, 0.417236f, 0.435547f, 0.454346f, 0.472656f, 0.491211f,
+ 0.508301f, 0.526855f, 0.543457f, 0.561523f, 0.578125f, 0.595215f, 0.612305f, 0.628418f, 0.644043f, 0.660645f, 0.675781f, 0.691406f,
+ 0.706055f, 0.720215f, 0.735840f, 0.749023f, 0.762695f, 0.776855f, 0.789551f, 0.800781f, 0.814941f, 0.826172f, 0.838867f, 0.851074f,
+ 0.862305f, 0.872070f, 0.937500f, 0.933594f, 0.929199f, 0.923828f, 0.919434f, 0.915527f, 0.004387f, 0.013268f, 0.022385f, 0.031860f,
+ 0.041962f, 0.052612f, 0.063171f, 0.075073f, 0.086792f, 0.099854f, 0.113037f, 0.125977f, 0.140381f, 0.154663f, 0.169678f, 0.184814f,
+ 0.200562f, 0.217773f, 0.234131f, 0.250732f, 0.268066f, 0.284912f, 0.303223f, 0.321289f, 0.339355f, 0.357666f, 0.375488f, 0.394043f,
+ 0.411865f, 0.430664f, 0.448730f, 0.467041f, 0.485352f, 0.503418f, 0.520508f, 0.539062f, 0.556152f, 0.573242f, 0.590820f, 0.606934f,
+ 0.624512f, 0.640625f, 0.655762f, 0.672363f, 0.687500f, 0.702148f, 0.718750f, 0.731934f, 0.746582f, 0.759766f, 0.772949f, 0.787109f,
+ 0.800781f, 0.813477f, 0.825195f, 0.838379f, 0.850098f, 0.861816f, 0.932617f, 0.929688f, 0.925293f, 0.919922f, 0.915527f, 0.912109f,
+ 0.003941f, 0.011986f, 0.020630f, 0.029144f, 0.038544f, 0.048035f, 0.058075f, 0.068542f, 0.079590f, 0.090942f, 0.102661f, 0.115295f,
+ 0.128296f, 0.141602f, 0.155518f, 0.170654f, 0.185425f, 0.200684f, 0.216309f, 0.231812f, 0.249146f, 0.265137f, 0.282471f, 0.299072f,
+ 0.317139f, 0.334717f, 0.352783f, 0.371338f, 0.388916f, 0.406982f, 0.425537f, 0.443848f, 0.461914f, 0.479980f, 0.498291f, 0.515625f,
+ 0.533203f, 0.550293f, 0.568359f, 0.585449f, 0.603027f, 0.618652f, 0.635742f, 0.652344f, 0.668457f, 0.684082f, 0.699219f, 0.713867f,
+ 0.729004f, 0.743652f, 0.757812f, 0.771484f, 0.785645f, 0.798828f, 0.812012f, 0.824219f, 0.836914f, 0.850098f, 0.927246f, 0.925293f,
+ 0.920410f, 0.916504f, 0.912598f, 0.908203f, 0.003790f, 0.011009f, 0.018829f, 0.026779f, 0.035339f, 0.043762f, 0.053223f, 0.062408f,
+ 0.072693f, 0.082947f, 0.093689f, 0.105469f, 0.117554f, 0.130005f, 0.142822f, 0.156494f, 0.170166f, 0.184448f, 0.198975f, 0.213745f,
+ 0.230469f, 0.246460f, 0.262939f, 0.279541f, 0.296143f, 0.313721f, 0.331299f, 0.348633f, 0.367188f, 0.384521f, 0.402344f, 0.420410f,
+ 0.438965f, 0.457275f, 0.475830f, 0.493164f, 0.510742f, 0.528809f, 0.546387f, 0.564453f, 0.581055f, 0.598145f, 0.615234f, 0.631836f,
+ 0.647461f, 0.665527f, 0.680664f, 0.696289f, 0.711914f, 0.728027f, 0.741211f, 0.756836f, 0.770508f, 0.783691f, 0.798340f, 0.811523f,
+ 0.824219f, 0.837402f, 0.921387f, 0.920410f, 0.916504f, 0.913086f, 0.908691f, 0.904785f, 0.003479f, 0.009949f, 0.016937f, 0.024445f,
+ 0.031708f, 0.039948f, 0.048218f, 0.056793f, 0.066223f, 0.075928f, 0.085632f, 0.096313f, 0.107178f, 0.118958f, 0.130493f, 0.143311f,
+ 0.156494f, 0.170044f, 0.183960f, 0.197876f, 0.213501f, 0.228027f, 0.244019f, 0.260010f, 0.276611f, 0.293213f, 0.309814f, 0.327393f,
+ 0.344482f, 0.363037f, 0.379883f, 0.398438f, 0.416504f, 0.434082f, 0.451904f, 0.470215f, 0.488525f, 0.505859f, 0.523926f, 0.541504f,
+ 0.559570f, 0.577637f, 0.594238f, 0.611328f, 0.628418f, 0.645020f, 0.661133f, 0.677246f, 0.693848f, 0.709961f, 0.725586f, 0.739746f,
+ 0.755371f, 0.769531f, 0.783203f, 0.797852f, 0.810547f, 0.824707f, 0.916016f, 0.915527f, 0.912109f, 0.908691f, 0.904785f, 0.900879f,
+ 0.003014f, 0.008842f, 0.015640f, 0.022018f, 0.028885f, 0.036163f, 0.044250f, 0.051819f, 0.059967f, 0.069031f, 0.078247f, 0.088135f,
+ 0.098267f, 0.108337f, 0.119751f, 0.131470f, 0.143433f, 0.156006f, 0.169189f, 0.183105f, 0.196655f, 0.211304f, 0.226196f, 0.241211f,
+ 0.257080f, 0.273438f, 0.289307f, 0.306396f, 0.323975f, 0.340576f, 0.358398f, 0.375732f, 0.393799f, 0.411133f, 0.429688f, 0.447998f,
+ 0.466064f, 0.483887f, 0.501465f, 0.519531f, 0.537598f, 0.555664f, 0.573242f, 0.590820f, 0.607910f, 0.625000f, 0.642578f, 0.658203f,
+ 0.675293f, 0.691406f, 0.707520f, 0.724121f, 0.738770f, 0.753418f, 0.769531f, 0.783203f, 0.797363f, 0.811523f, 0.910156f, 0.910645f,
+ 0.907715f, 0.904785f, 0.900879f, 0.896973f, 0.002861f, 0.008591f, 0.014000f, 0.020203f, 0.026962f, 0.033203f, 0.040161f, 0.047485f,
+ 0.055237f, 0.062988f, 0.071594f, 0.080750f, 0.089905f, 0.099854f, 0.109741f, 0.120056f, 0.131592f, 0.143311f, 0.155640f, 0.167969f,
+ 0.181763f, 0.195190f, 0.209229f, 0.223877f, 0.238647f, 0.254150f, 0.269531f, 0.285889f, 0.302979f, 0.319824f, 0.336426f, 0.354004f,
+ 0.372070f, 0.389893f, 0.406982f, 0.424805f, 0.443359f, 0.461182f, 0.479492f, 0.498047f, 0.515625f, 0.533691f, 0.551270f, 0.569336f,
+ 0.587402f, 0.604492f, 0.622070f, 0.639160f, 0.656738f, 0.673828f, 0.689941f, 0.705566f, 0.722168f, 0.737793f, 0.753418f, 0.768066f,
+ 0.783203f, 0.798340f, 0.904297f, 0.905762f, 0.902832f, 0.899414f, 0.895996f, 0.893066f, 0.002535f, 0.007812f, 0.013252f, 0.018738f,
+ 0.024384f, 0.030548f, 0.036774f, 0.043427f, 0.050476f, 0.057556f, 0.065491f, 0.073425f, 0.082458f, 0.091370f, 0.100525f, 0.110413f,
+ 0.120605f, 0.131592f, 0.142822f, 0.154663f, 0.166870f, 0.180176f, 0.193237f, 0.207031f, 0.221191f, 0.236084f, 0.250732f, 0.266602f,
+ 0.282959f, 0.299072f, 0.315430f, 0.332520f, 0.350342f, 0.367676f, 0.385010f, 0.403076f, 0.421631f, 0.439209f, 0.457520f, 0.475342f,
+ 0.494141f, 0.512695f, 0.530273f, 0.547852f, 0.565918f, 0.584473f, 0.602051f, 0.619629f, 0.637207f, 0.655273f, 0.671387f, 0.688965f,
+ 0.706055f, 0.721191f, 0.737305f, 0.752930f, 0.769531f, 0.784668f, 0.898438f, 0.900879f, 0.897949f, 0.894531f, 0.891602f, 0.888672f,
+ 0.002411f, 0.007103f, 0.012161f, 0.017105f, 0.022385f, 0.027985f, 0.033203f, 0.039581f, 0.045532f, 0.052521f, 0.059814f, 0.067261f,
+ 0.074768f, 0.083313f, 0.092041f, 0.101013f, 0.110291f, 0.120361f, 0.130615f, 0.141724f, 0.153076f, 0.165283f, 0.177612f, 0.190918f,
+ 0.204346f, 0.218506f, 0.233154f, 0.247559f, 0.263428f, 0.279053f, 0.295166f, 0.312256f, 0.328857f, 0.345947f, 0.363281f, 0.381348f,
+ 0.398926f, 0.417236f, 0.435547f, 0.453369f, 0.471191f, 0.489502f, 0.508301f, 0.525879f, 0.545410f, 0.563477f, 0.581055f, 0.600098f,
+ 0.617676f, 0.635254f, 0.653809f, 0.670410f, 0.687500f, 0.705078f, 0.720703f, 0.736816f, 0.753418f, 0.769531f, 0.892090f, 0.895020f,
+ 0.892578f, 0.889648f, 0.887207f, 0.884277f, 0.002344f, 0.006565f, 0.011322f, 0.015686f, 0.020630f, 0.025574f, 0.030807f, 0.035980f,
+ 0.042084f, 0.048279f, 0.054352f, 0.061432f, 0.068848f, 0.076172f, 0.083618f, 0.092590f, 0.101135f, 0.109619f, 0.120178f, 0.130249f,
+ 0.140991f, 0.151978f, 0.163696f, 0.175781f, 0.188721f, 0.202026f, 0.215820f, 0.230103f, 0.244873f, 0.259766f, 0.275635f, 0.291504f,
+ 0.307617f, 0.324219f, 0.342041f, 0.358887f, 0.376709f, 0.394775f, 0.412354f, 0.431152f, 0.448975f, 0.468018f, 0.486328f, 0.504883f,
+ 0.523438f, 0.541992f, 0.560547f, 0.579102f, 0.597656f, 0.615234f, 0.633789f, 0.651855f, 0.669434f, 0.687500f, 0.704590f, 0.721680f,
+ 0.738770f, 0.755859f, 0.886719f, 0.889648f, 0.887695f, 0.884766f, 0.882812f, 0.879883f, 0.002003f, 0.006268f, 0.009987f, 0.014198f,
+ 0.018875f, 0.023605f, 0.028259f, 0.033203f, 0.038513f, 0.044495f, 0.049866f, 0.056152f, 0.062500f, 0.069458f, 0.076660f, 0.084473f,
+ 0.092163f, 0.100586f, 0.109741f, 0.119324f, 0.128662f, 0.139526f, 0.150146f, 0.161499f, 0.173706f, 0.185791f, 0.199341f, 0.212891f,
+ 0.227051f, 0.241455f, 0.256592f, 0.271729f, 0.288330f, 0.304199f, 0.321045f, 0.337891f, 0.355469f, 0.373291f, 0.391113f, 0.408936f,
+ 0.426758f, 0.446289f, 0.464600f, 0.483643f, 0.500977f, 0.520996f, 0.539551f, 0.558594f, 0.577148f, 0.595703f, 0.614746f, 0.632324f,
+ 0.650879f, 0.669434f, 0.687012f, 0.704590f, 0.722656f, 0.740234f, 0.880371f, 0.883301f, 0.881836f, 0.879883f, 0.877441f, 0.875000f,
+ 0.001739f, 0.005779f, 0.009598f, 0.013245f, 0.017334f, 0.021637f, 0.025955f, 0.030121f, 0.035217f, 0.040131f, 0.045990f, 0.051453f,
+ 0.056915f, 0.063354f, 0.070007f, 0.076965f, 0.084351f, 0.091980f, 0.100281f, 0.108826f, 0.117981f, 0.127441f, 0.137939f, 0.148315f,
+ 0.160034f, 0.171753f, 0.183594f, 0.196167f, 0.209961f, 0.223511f, 0.238037f, 0.252930f, 0.268066f, 0.284180f, 0.300537f, 0.317139f,
+ 0.333740f, 0.351074f, 0.368896f, 0.386719f, 0.405273f, 0.423584f, 0.442871f, 0.460938f, 0.479736f, 0.499512f, 0.517578f, 0.537109f,
+ 0.555664f, 0.575195f, 0.594238f, 0.613770f, 0.632324f, 0.650879f, 0.669922f, 0.687988f, 0.706055f, 0.724121f, 0.873047f, 0.876953f,
+ 0.875488f, 0.874023f, 0.872559f, 0.869141f, 0.001648f, 0.005039f, 0.008675f, 0.012161f, 0.015823f, 0.019760f, 0.023865f, 0.028015f,
+ 0.032318f, 0.036865f, 0.041504f, 0.046906f, 0.051758f, 0.057922f, 0.064087f, 0.070435f, 0.077209f, 0.084290f, 0.091736f, 0.099243f,
+ 0.108215f, 0.117004f, 0.126343f, 0.135620f, 0.146484f, 0.157349f, 0.168823f, 0.180908f, 0.193848f, 0.206909f, 0.220459f, 0.234619f,
+ 0.249634f, 0.264404f, 0.280273f, 0.296631f, 0.313232f, 0.329834f, 0.347412f, 0.365479f, 0.383545f, 0.401855f, 0.420166f, 0.438721f,
+ 0.458252f, 0.477783f, 0.496826f, 0.516602f, 0.535156f, 0.554199f, 0.574219f, 0.593750f, 0.612305f, 0.631836f, 0.651367f, 0.670410f,
+ 0.689453f, 0.708984f, 0.865234f, 0.872070f, 0.870605f, 0.868652f, 0.866699f, 0.863770f, 0.001492f, 0.004704f, 0.007973f, 0.011124f,
+ 0.014603f, 0.017792f, 0.021652f, 0.025314f, 0.029526f, 0.033722f, 0.038147f, 0.042694f, 0.047668f, 0.052673f, 0.057983f, 0.064209f,
+ 0.070068f, 0.076233f, 0.083313f, 0.090942f, 0.098572f, 0.106750f, 0.115295f, 0.124512f, 0.134277f, 0.144287f, 0.154663f, 0.166504f,
+ 0.178345f, 0.190063f, 0.203247f, 0.217041f, 0.231079f, 0.245850f, 0.260986f, 0.276611f, 0.293213f, 0.309570f, 0.326172f, 0.343994f,
+ 0.361816f, 0.379395f, 0.397949f, 0.417480f, 0.436523f, 0.455322f, 0.474854f, 0.493896f, 0.514160f, 0.533691f, 0.553711f, 0.573730f,
+ 0.593262f, 0.612793f, 0.632812f, 0.651855f, 0.672363f, 0.690918f, 0.857910f, 0.865723f, 0.864746f, 0.863281f, 0.860352f, 0.858887f,
+ 0.001657f, 0.004684f, 0.007290f, 0.010201f, 0.013657f, 0.016541f, 0.019989f, 0.023636f, 0.026932f, 0.030548f, 0.034576f, 0.039154f,
+ 0.043793f, 0.048126f, 0.053162f, 0.058319f, 0.063721f, 0.069885f, 0.076355f, 0.082947f, 0.089844f, 0.097046f, 0.105286f, 0.113281f,
+ 0.122559f, 0.131348f, 0.141357f, 0.152100f, 0.163330f, 0.175415f, 0.187256f, 0.199951f, 0.213501f, 0.227051f, 0.241943f, 0.257324f,
+ 0.273193f, 0.288818f, 0.305420f, 0.322754f, 0.340576f, 0.358643f, 0.375732f, 0.394775f, 0.414307f, 0.433105f, 0.453613f, 0.472168f,
+ 0.492188f, 0.512695f, 0.532715f, 0.552246f, 0.573242f, 0.593262f, 0.613770f, 0.632812f, 0.654785f, 0.673828f, 0.851074f, 0.859375f,
+ 0.858398f, 0.856934f, 0.855469f, 0.853027f, 0.001457f, 0.003944f, 0.006870f, 0.009392f, 0.012543f, 0.015190f, 0.018417f, 0.021576f,
+ 0.024811f, 0.028122f, 0.031708f, 0.035278f, 0.039398f, 0.043793f, 0.048218f, 0.052887f, 0.058044f, 0.063477f, 0.069397f, 0.075256f,
+ 0.081360f, 0.088318f, 0.095398f, 0.103210f, 0.111084f, 0.120361f, 0.129150f, 0.139038f, 0.149292f, 0.160645f, 0.172241f, 0.183716f,
+ 0.196533f, 0.209595f, 0.224121f, 0.238647f, 0.253174f, 0.268799f, 0.286133f, 0.302490f, 0.319092f, 0.337158f, 0.355225f, 0.373535f,
+ 0.392090f, 0.411133f, 0.430908f, 0.450928f, 0.470947f, 0.490967f, 0.511719f, 0.531250f, 0.551758f, 0.573730f, 0.594238f, 0.614746f,
+ 0.636230f, 0.656738f, 0.842773f, 0.852051f, 0.851562f, 0.851074f, 0.848633f, 0.846680f, 0.001404f, 0.003891f, 0.006233f, 0.008751f,
+ 0.011353f, 0.014175f, 0.017075f, 0.019592f, 0.022842f, 0.025772f, 0.028839f, 0.032410f, 0.036011f, 0.039764f, 0.043671f, 0.048126f,
+ 0.052704f, 0.057373f, 0.062561f, 0.067688f, 0.074158f, 0.080200f, 0.086853f, 0.093445f, 0.101379f, 0.109192f, 0.117432f, 0.126709f,
+ 0.136353f, 0.146484f, 0.157227f, 0.168823f, 0.180542f, 0.193115f, 0.206299f, 0.219727f, 0.234375f, 0.249756f, 0.265869f, 0.281738f,
+ 0.298096f, 0.315674f, 0.333252f, 0.352051f, 0.370850f, 0.389160f, 0.409180f, 0.428955f, 0.448730f, 0.469971f, 0.489502f, 0.510742f,
+ 0.531738f, 0.552246f, 0.574707f, 0.595215f, 0.617676f, 0.639160f, 0.835449f, 0.845215f, 0.845215f, 0.844238f, 0.843262f, 0.840332f,
+ 0.001275f, 0.003536f, 0.005600f, 0.007881f, 0.010628f, 0.012878f, 0.015610f, 0.018097f, 0.020996f, 0.023376f, 0.026443f, 0.029556f,
+ 0.032867f, 0.036163f, 0.039581f, 0.043915f, 0.047943f, 0.052216f, 0.056763f, 0.061981f, 0.067322f, 0.072449f, 0.078796f, 0.084717f,
+ 0.091919f, 0.098999f, 0.106995f, 0.115417f, 0.124084f, 0.133667f, 0.143433f, 0.154297f, 0.165161f, 0.177124f, 0.189697f, 0.202759f,
+ 0.216309f, 0.230713f, 0.245728f, 0.261719f, 0.278320f, 0.295410f, 0.312256f, 0.330566f, 0.349365f, 0.367676f, 0.386719f, 0.406494f,
+ 0.427246f, 0.447266f, 0.468506f, 0.489746f, 0.510742f, 0.532227f, 0.553711f, 0.575684f, 0.597656f, 0.619141f, 0.826172f, 0.837402f,
+ 0.837891f, 0.837402f, 0.835449f, 0.833984f, 0.001134f, 0.003105f, 0.005337f, 0.007462f, 0.009628f, 0.011833f, 0.014137f, 0.016113f,
+ 0.018875f, 0.021484f, 0.024063f, 0.026581f, 0.029709f, 0.032623f, 0.036194f, 0.039703f, 0.043335f, 0.047058f, 0.051422f, 0.055908f,
+ 0.060608f, 0.065491f, 0.071167f, 0.076843f, 0.083313f, 0.089661f, 0.097168f, 0.104492f, 0.112122f, 0.121155f, 0.130615f, 0.140137f,
+ 0.150757f, 0.161499f, 0.173462f, 0.185547f, 0.199341f, 0.212524f, 0.227051f, 0.242310f, 0.258057f, 0.274414f, 0.291016f, 0.309082f,
+ 0.327148f, 0.345459f, 0.364990f, 0.384521f, 0.404297f, 0.425781f, 0.445801f, 0.467285f, 0.489258f, 0.510254f, 0.533203f, 0.555664f,
+ 0.578125f, 0.601074f, 0.817871f, 0.830078f, 0.831055f, 0.830078f, 0.829102f, 0.828125f, 0.001101f, 0.003019f, 0.004818f, 0.006725f,
+ 0.008781f, 0.010864f, 0.013069f, 0.014801f, 0.017151f, 0.019531f, 0.021973f, 0.024429f, 0.026917f, 0.030121f, 0.033112f, 0.036041f,
+ 0.039337f, 0.042542f, 0.046509f, 0.050537f, 0.054596f, 0.058990f, 0.064209f, 0.069519f, 0.075134f, 0.080994f, 0.087158f, 0.094177f,
+ 0.102051f, 0.109741f, 0.117981f, 0.127319f, 0.136963f, 0.147095f, 0.158081f, 0.169434f, 0.182251f, 0.195557f, 0.208984f, 0.223267f,
+ 0.238281f, 0.254639f, 0.270996f, 0.288330f, 0.305908f, 0.324219f, 0.343018f, 0.362549f, 0.382324f, 0.402832f, 0.424805f, 0.445312f,
+ 0.467529f, 0.489258f, 0.511230f, 0.535645f, 0.558594f, 0.582031f, 0.809082f, 0.822266f, 0.824219f, 0.823242f, 0.821777f, 0.820801f,
+ 0.000987f, 0.002644f, 0.004562f, 0.006344f, 0.008133f, 0.009918f, 0.011696f, 0.013527f, 0.015572f, 0.017746f, 0.019714f, 0.021942f,
+ 0.024155f, 0.027069f, 0.029678f, 0.032288f, 0.035156f, 0.038574f, 0.041779f, 0.045319f, 0.049225f, 0.053284f, 0.057678f, 0.062225f,
+ 0.067505f, 0.072571f, 0.078613f, 0.084961f, 0.092041f, 0.098938f, 0.106506f, 0.115112f, 0.123779f, 0.133667f, 0.143311f, 0.154541f,
+ 0.165894f, 0.178345f, 0.191406f, 0.205200f, 0.219238f, 0.234985f, 0.250977f, 0.267578f, 0.284912f, 0.302734f, 0.321289f, 0.340332f,
+ 0.360352f, 0.380615f, 0.401611f, 0.423340f, 0.445312f, 0.467529f, 0.490967f, 0.514160f, 0.537598f, 0.561035f, 0.800293f, 0.814453f,
+ 0.815918f, 0.815918f, 0.814941f, 0.813965f, 0.000932f, 0.002567f, 0.004009f, 0.005722f, 0.007538f, 0.008812f, 0.010864f, 0.012413f,
+ 0.014290f, 0.015991f, 0.018051f, 0.019836f, 0.022247f, 0.024506f, 0.026520f, 0.029175f, 0.031769f, 0.034332f, 0.037689f, 0.040466f,
+ 0.043945f, 0.047607f, 0.051605f, 0.055817f, 0.060486f, 0.065125f, 0.070557f, 0.076111f, 0.081909f, 0.088806f, 0.095886f, 0.103210f,
+ 0.111755f, 0.120422f, 0.130249f, 0.140137f, 0.150513f, 0.162109f, 0.174561f, 0.187256f, 0.200928f, 0.215698f, 0.231323f, 0.246582f,
+ 0.264160f, 0.281982f, 0.299561f, 0.319092f, 0.338623f, 0.358643f, 0.379883f, 0.400879f, 0.423096f, 0.445557f, 0.468750f, 0.492188f,
+ 0.516113f, 0.541504f, 0.791016f, 0.805664f, 0.808105f, 0.808594f, 0.807129f, 0.806641f, 0.000871f, 0.002337f, 0.003727f, 0.005474f,
+ 0.006641f, 0.008377f, 0.009567f, 0.011154f, 0.012848f, 0.014610f, 0.016235f, 0.017960f, 0.019958f, 0.021729f, 0.023926f, 0.026154f,
+ 0.028351f, 0.030975f, 0.033722f, 0.036407f, 0.039459f, 0.042694f, 0.046082f, 0.049896f, 0.053833f, 0.058167f, 0.062744f, 0.067932f,
+ 0.073608f, 0.079468f, 0.085632f, 0.092651f, 0.100098f, 0.108521f, 0.116699f, 0.126099f, 0.136108f, 0.146606f, 0.157959f, 0.170410f,
+ 0.183594f, 0.197510f, 0.212280f, 0.227295f, 0.243652f, 0.260986f, 0.278564f, 0.297607f, 0.316406f, 0.336426f, 0.357178f, 0.378662f,
+ 0.400146f, 0.422852f, 0.446045f, 0.470215f, 0.494873f, 0.520020f, 0.781250f, 0.796875f, 0.800293f, 0.800781f, 0.799805f, 0.799316f,
+ 0.000782f, 0.002131f, 0.003649f, 0.004715f, 0.006054f, 0.007458f, 0.008759f, 0.010269f, 0.011711f, 0.012970f, 0.014664f, 0.016327f,
+ 0.017914f, 0.019699f, 0.021423f, 0.023499f, 0.025391f, 0.027374f, 0.029999f, 0.032501f, 0.035156f, 0.037872f, 0.040710f, 0.044403f,
+ 0.047791f, 0.051880f, 0.055969f, 0.060364f, 0.065247f, 0.070496f, 0.076172f, 0.082825f, 0.089294f, 0.096497f, 0.104431f, 0.112854f,
+ 0.122375f, 0.132202f, 0.142700f, 0.153931f, 0.166260f, 0.179565f, 0.193481f, 0.208008f, 0.223877f, 0.240479f, 0.257568f, 0.275879f,
+ 0.294922f, 0.314453f, 0.334961f, 0.355957f, 0.377686f, 0.400391f, 0.423828f, 0.448730f, 0.472900f, 0.498535f, 0.771484f, 0.789062f,
+ 0.791504f, 0.792480f, 0.791016f, 0.791016f, 0.000742f, 0.001822f, 0.003183f, 0.004444f, 0.005600f, 0.006550f, 0.008087f, 0.009247f,
+ 0.010559f, 0.011650f, 0.013184f, 0.014565f, 0.016083f, 0.017548f, 0.019119f, 0.020737f, 0.022644f, 0.024597f, 0.026627f, 0.028809f,
+ 0.031281f, 0.033539f, 0.036469f, 0.039429f, 0.042480f, 0.045654f, 0.049561f, 0.053406f, 0.057739f, 0.062469f, 0.067749f, 0.073364f,
+ 0.079773f, 0.086121f, 0.093262f, 0.100647f, 0.109253f, 0.118042f, 0.128174f, 0.138550f, 0.150024f, 0.162231f, 0.175171f, 0.189087f,
+ 0.204468f, 0.220215f, 0.236938f, 0.254639f, 0.273438f, 0.292236f, 0.312012f, 0.333252f, 0.355957f, 0.377686f, 0.401367f, 0.425781f,
+ 0.451416f, 0.476318f, 0.761230f, 0.779785f, 0.782227f, 0.782715f, 0.782715f, 0.782715f, 0.000632f, 0.001970f, 0.003042f, 0.004025f,
+ 0.005173f, 0.006435f, 0.007343f, 0.008522f, 0.009369f, 0.010475f, 0.011726f, 0.012962f, 0.014145f, 0.015411f, 0.016922f, 0.018478f,
+ 0.020111f, 0.021835f, 0.023682f, 0.025253f, 0.027466f, 0.029678f, 0.032196f, 0.034607f, 0.037415f, 0.040497f, 0.043610f, 0.047089f,
+ 0.051178f, 0.055573f, 0.059845f, 0.064758f, 0.070068f, 0.076111f, 0.082275f, 0.089417f, 0.096863f, 0.105286f, 0.114441f, 0.123535f,
+ 0.134399f, 0.145508f, 0.157959f, 0.171387f, 0.185425f, 0.200806f, 0.216919f, 0.233521f, 0.251953f, 0.270508f, 0.290527f, 0.310791f,
+ 0.332275f, 0.355469f, 0.378418f, 0.403564f, 0.428223f, 0.455322f, 0.750977f, 0.770996f, 0.774414f, 0.774414f, 0.774902f, 0.773926f,
+ 0.000517f, 0.001554f, 0.002741f, 0.003695f, 0.004669f, 0.005417f, 0.006466f, 0.007545f, 0.008453f, 0.009499f, 0.010468f, 0.011490f,
+ 0.012718f, 0.013985f, 0.014977f, 0.016235f, 0.017868f, 0.019211f, 0.020630f, 0.022263f, 0.024078f, 0.026291f, 0.028275f, 0.030380f,
+ 0.032928f, 0.035675f, 0.038513f, 0.041656f, 0.044769f, 0.048523f, 0.052216f, 0.057007f, 0.061493f, 0.066711f, 0.072510f, 0.078735f,
+ 0.085327f, 0.093201f, 0.101135f, 0.109619f, 0.119690f, 0.130371f, 0.141602f, 0.154053f, 0.167480f, 0.181396f, 0.197021f, 0.213623f,
+ 0.230835f, 0.248901f, 0.268066f, 0.289062f, 0.310303f, 0.332520f, 0.355225f, 0.379639f, 0.405273f, 0.432373f, 0.740234f, 0.760742f,
+ 0.763672f, 0.765625f, 0.765625f, 0.765625f, 0.000588f, 0.001405f, 0.002306f, 0.003370f, 0.004375f, 0.005116f, 0.005817f, 0.006630f,
+ 0.007797f, 0.008507f, 0.009216f, 0.010254f, 0.011246f, 0.012154f, 0.013191f, 0.014366f, 0.015503f, 0.016785f, 0.018127f, 0.019562f,
+ 0.021072f, 0.022919f, 0.024643f, 0.026749f, 0.028564f, 0.031006f, 0.033203f, 0.036072f, 0.039032f, 0.042114f, 0.045654f, 0.049561f,
+ 0.053650f, 0.058380f, 0.063049f, 0.068848f, 0.075256f, 0.081543f, 0.088562f, 0.096924f, 0.105652f, 0.115173f, 0.125977f, 0.137207f,
+ 0.149902f, 0.163208f, 0.177979f, 0.193726f, 0.210205f, 0.228027f, 0.247070f, 0.266602f, 0.287842f, 0.309326f, 0.333008f, 0.356934f,
+ 0.382568f, 0.408691f, 0.729004f, 0.751953f, 0.755371f, 0.756348f, 0.757324f, 0.756348f, 0.000431f, 0.001562f, 0.002253f, 0.003088f,
+ 0.003944f, 0.004536f, 0.005066f, 0.006020f, 0.006840f, 0.007542f, 0.008347f, 0.008949f, 0.009827f, 0.010719f, 0.011696f, 0.012756f,
+ 0.013649f, 0.014679f, 0.015808f, 0.017288f, 0.018356f, 0.019913f, 0.021332f, 0.023148f, 0.024719f, 0.026840f, 0.029007f, 0.031250f,
+ 0.033661f, 0.036469f, 0.039490f, 0.042969f, 0.046326f, 0.050293f, 0.054901f, 0.059845f, 0.064941f, 0.071289f, 0.077454f, 0.084656f,
+ 0.092529f, 0.101562f, 0.111145f, 0.121460f, 0.132935f, 0.145386f, 0.159302f, 0.174438f, 0.190186f, 0.206909f, 0.225098f, 0.244751f,
+ 0.265381f, 0.287109f, 0.310059f, 0.333984f, 0.359131f, 0.386230f, 0.716797f, 0.740723f, 0.744629f, 0.746582f, 0.747070f, 0.747070f,
+ 0.000576f, 0.001266f, 0.002028f, 0.002766f, 0.003317f, 0.004051f, 0.004742f, 0.005459f, 0.006054f, 0.006641f, 0.007240f, 0.007919f,
+ 0.008644f, 0.009300f, 0.010170f, 0.010925f, 0.011795f, 0.012733f, 0.013855f, 0.014885f, 0.015900f, 0.017212f, 0.018326f, 0.019684f,
+ 0.021469f, 0.023178f, 0.024734f, 0.026794f, 0.028946f, 0.031204f, 0.033844f, 0.036682f, 0.039948f, 0.043335f, 0.047150f, 0.051422f,
+ 0.055969f, 0.061066f, 0.067139f, 0.073242f, 0.080444f, 0.088440f, 0.096985f, 0.106445f, 0.116943f, 0.128906f, 0.141479f, 0.154907f,
+ 0.170410f, 0.186523f, 0.204102f, 0.222900f, 0.243774f, 0.264160f, 0.286865f, 0.310791f, 0.336182f, 0.362793f, 0.705078f, 0.730469f,
+ 0.735352f, 0.736816f, 0.737793f, 0.736816f, 0.000307f, 0.001126f, 0.001758f, 0.002436f, 0.002911f, 0.003540f, 0.004047f, 0.004711f,
+ 0.005245f, 0.005749f, 0.006302f, 0.006844f, 0.007355f, 0.008095f, 0.008835f, 0.009438f, 0.010139f, 0.010941f, 0.011963f, 0.012878f,
+ 0.013519f, 0.014847f, 0.015945f, 0.017029f, 0.018250f, 0.019669f, 0.021362f, 0.022675f, 0.024750f, 0.026657f, 0.028854f, 0.031219f,
+ 0.033844f, 0.036804f, 0.040222f, 0.043793f, 0.047791f, 0.052185f, 0.057251f, 0.062866f, 0.069275f, 0.075867f, 0.083923f, 0.092407f,
+ 0.102295f, 0.112366f, 0.124207f, 0.137085f, 0.151489f, 0.167114f, 0.183838f, 0.202148f, 0.221558f, 0.242065f, 0.263916f, 0.287842f,
+ 0.312256f, 0.339111f, 0.693848f, 0.719727f, 0.724609f, 0.726074f, 0.727539f, 0.727051f, 0.000428f, 0.000939f, 0.001581f, 0.002033f,
+ 0.002665f, 0.003222f, 0.003660f, 0.004059f, 0.004475f, 0.004997f, 0.005554f, 0.006031f, 0.006371f, 0.007080f, 0.007511f, 0.008263f,
+ 0.008820f, 0.009552f, 0.010124f, 0.010948f, 0.011665f, 0.012550f, 0.013397f, 0.014526f, 0.015388f, 0.016754f, 0.017960f, 0.019257f,
+ 0.020844f, 0.022583f, 0.024246f, 0.026642f, 0.028656f, 0.031128f, 0.033783f, 0.036865f, 0.040253f, 0.044312f, 0.048523f, 0.053314f,
+ 0.058655f, 0.064880f, 0.071594f, 0.079102f, 0.087891f, 0.097107f, 0.108276f, 0.119751f, 0.133179f, 0.148071f, 0.163818f, 0.180908f,
+ 0.199951f, 0.219849f, 0.241699f, 0.264160f, 0.288818f, 0.315918f, 0.680176f, 0.708496f, 0.713867f, 0.716309f, 0.716797f, 0.717285f,
+ 0.000467f, 0.001054f, 0.001476f, 0.001825f, 0.002386f, 0.002644f, 0.003218f, 0.003553f, 0.003866f, 0.004433f, 0.004700f, 0.004948f,
+ 0.005505f, 0.006023f, 0.006405f, 0.006920f, 0.007484f, 0.008057f, 0.008598f, 0.009178f, 0.009857f, 0.010551f, 0.011169f, 0.012199f,
+ 0.013092f, 0.014084f, 0.015091f, 0.016205f, 0.017303f, 0.018845f, 0.020538f, 0.021957f, 0.023773f, 0.025833f, 0.028152f, 0.030716f,
+ 0.033661f, 0.036896f, 0.040405f, 0.044708f, 0.049286f, 0.054321f, 0.060333f, 0.067322f, 0.074890f, 0.083435f, 0.092651f, 0.103516f,
+ 0.115784f, 0.129028f, 0.144287f, 0.160278f, 0.178345f, 0.197632f, 0.218994f, 0.241089f, 0.265869f, 0.292725f, 0.667969f, 0.697266f,
+ 0.702637f, 0.704590f, 0.706055f, 0.707031f, 0.000348f, 0.000841f, 0.001292f, 0.001580f, 0.001961f, 0.002508f, 0.002630f, 0.002993f,
+ 0.003458f, 0.003738f, 0.003952f, 0.004425f, 0.004639f, 0.005070f, 0.005547f, 0.005840f, 0.006462f, 0.006844f, 0.007214f, 0.007698f,
+ 0.008339f, 0.008980f, 0.009560f, 0.010094f, 0.010941f, 0.011711f, 0.012550f, 0.013565f, 0.014404f, 0.015579f, 0.016754f, 0.018082f,
+ 0.019592f, 0.021439f, 0.023209f, 0.025375f, 0.027863f, 0.030411f, 0.033478f, 0.037018f, 0.040680f, 0.045105f, 0.050476f, 0.056183f,
+ 0.062805f, 0.070251f, 0.078613f, 0.088196f, 0.099060f, 0.111450f, 0.125122f, 0.140869f, 0.158203f, 0.176880f, 0.197266f, 0.218506f,
+ 0.242798f, 0.268555f, 0.655273f, 0.686035f, 0.691406f, 0.694336f, 0.695312f, 0.695801f, 0.000170f, 0.000976f, 0.001161f, 0.001441f,
+ 0.001846f, 0.002144f, 0.002367f, 0.002632f, 0.002892f, 0.003178f, 0.003435f, 0.003618f, 0.004021f, 0.004292f, 0.004562f, 0.005028f,
+ 0.005405f, 0.005623f, 0.006069f, 0.006577f, 0.006973f, 0.007431f, 0.007904f, 0.008484f, 0.009018f, 0.009659f, 0.010559f, 0.010994f,
+ 0.012009f, 0.012840f, 0.013901f, 0.014915f, 0.016129f, 0.017502f, 0.019089f, 0.020676f, 0.022568f, 0.024673f, 0.027252f, 0.029984f,
+ 0.033234f, 0.037079f, 0.041016f, 0.045868f, 0.051758f, 0.058014f, 0.065613f, 0.073853f, 0.083801f, 0.094727f, 0.107483f, 0.121826f,
+ 0.137573f, 0.156006f, 0.175049f, 0.196167f, 0.219482f, 0.245850f, 0.641113f, 0.673340f, 0.679688f, 0.681641f, 0.683594f, 0.684082f,
+ 0.000293f, 0.000601f, 0.001049f, 0.001358f, 0.001532f, 0.001719f, 0.001882f, 0.002298f, 0.002317f, 0.002628f, 0.002750f, 0.003143f,
+ 0.003363f, 0.003559f, 0.003866f, 0.004204f, 0.004383f, 0.004753f, 0.005028f, 0.005348f, 0.005863f, 0.006176f, 0.006569f, 0.006954f,
+ 0.007401f, 0.008057f, 0.008537f, 0.009178f, 0.009735f, 0.010521f, 0.011208f, 0.011978f, 0.013130f, 0.014099f, 0.015289f, 0.016739f,
+ 0.018219f, 0.019821f, 0.021713f, 0.024200f, 0.026749f, 0.029785f, 0.033386f, 0.036987f, 0.041840f, 0.047089f, 0.053253f, 0.060760f,
+ 0.069214f, 0.079224f, 0.090515f, 0.103638f, 0.118652f, 0.135376f, 0.154175f, 0.174561f, 0.196777f, 0.222534f, 0.628906f, 0.660645f,
+ 0.668457f, 0.670410f, 0.672852f, 0.673340f, 0.000258f, 0.000656f, 0.000811f, 0.001049f, 0.001288f, 0.001462f, 0.001599f, 0.001740f,
+ 0.002012f, 0.002171f, 0.002367f, 0.002535f, 0.002705f, 0.002880f, 0.003115f, 0.003429f, 0.003666f, 0.003897f, 0.004116f, 0.004398f,
+ 0.004635f, 0.005066f, 0.005341f, 0.005779f, 0.006042f, 0.006454f, 0.006954f, 0.007450f, 0.007835f, 0.008400f, 0.009132f, 0.009819f,
+ 0.010536f, 0.011307f, 0.012245f, 0.013229f, 0.014580f, 0.015900f, 0.017303f, 0.019119f, 0.021103f, 0.023468f, 0.026123f, 0.029495f,
+ 0.033112f, 0.037628f, 0.042938f, 0.048859f, 0.056152f, 0.064941f, 0.074829f, 0.086548f, 0.100281f, 0.115967f, 0.133545f, 0.153198f,
+ 0.175171f, 0.199341f, 0.613770f, 0.648926f, 0.655273f, 0.658691f, 0.660645f, 0.662598f, 0.000176f, 0.000474f, 0.000602f, 0.000854f,
+ 0.001030f, 0.001240f, 0.001349f, 0.001505f, 0.001580f, 0.001738f, 0.001957f, 0.002068f, 0.002230f, 0.002420f, 0.002556f, 0.002705f,
+ 0.002998f, 0.003178f, 0.003345f, 0.003567f, 0.003811f, 0.004105f, 0.004284f, 0.004593f, 0.004848f, 0.005173f, 0.005527f, 0.005939f,
+ 0.006306f, 0.006817f, 0.007366f, 0.007729f, 0.008339f, 0.008995f, 0.009644f, 0.010551f, 0.011360f, 0.012344f, 0.013710f, 0.015030f,
+ 0.016510f, 0.018143f, 0.020279f, 0.022751f, 0.025650f, 0.029144f, 0.033508f, 0.038452f, 0.044556f, 0.052032f, 0.060364f, 0.070923f,
+ 0.082642f, 0.097290f, 0.113525f, 0.132446f, 0.153442f, 0.176880f, 0.600586f, 0.636719f, 0.644531f, 0.647461f, 0.648926f, 0.649414f,
+ 0.000121f, 0.000426f, 0.000509f, 0.000778f, 0.000931f, 0.000992f, 0.001135f, 0.001303f, 0.001359f, 0.001410f, 0.001519f, 0.001722f,
+ 0.001751f, 0.001951f, 0.002060f, 0.002218f, 0.002287f, 0.002487f, 0.002670f, 0.002848f, 0.003061f, 0.003233f, 0.003452f, 0.003664f,
+ 0.003883f, 0.004078f, 0.004379f, 0.004692f, 0.004982f, 0.005329f, 0.005756f, 0.006081f, 0.006504f, 0.007019f, 0.007599f, 0.008217f,
+ 0.008850f, 0.009628f, 0.010437f, 0.011597f, 0.012650f, 0.013931f, 0.015480f, 0.017380f, 0.019577f, 0.022247f, 0.025513f, 0.029617f,
+ 0.034363f, 0.040314f, 0.047241f, 0.056274f, 0.066711f, 0.079773f, 0.094482f, 0.112488f, 0.132446f, 0.154907f, 0.585449f, 0.624023f,
+ 0.630371f, 0.634277f, 0.636230f, 0.637207f, 0.000161f, 0.000263f, 0.000526f, 0.000627f, 0.000723f, 0.000775f, 0.000856f, 0.000960f,
+ 0.001079f, 0.001158f, 0.001208f, 0.001272f, 0.001441f, 0.001557f, 0.001657f, 0.001702f, 0.001897f, 0.001918f, 0.002151f, 0.002232f,
+ 0.002337f, 0.002522f, 0.002720f, 0.002865f, 0.003029f, 0.003193f, 0.003387f, 0.003601f, 0.003887f, 0.004124f, 0.004356f, 0.004639f,
+ 0.005070f, 0.005466f, 0.005863f, 0.006298f, 0.006874f, 0.007290f, 0.007965f, 0.008774f, 0.009560f, 0.010666f, 0.011719f, 0.013077f,
+ 0.014679f, 0.016693f, 0.019058f, 0.021881f, 0.025528f, 0.030121f, 0.036011f, 0.043396f, 0.052460f, 0.063477f, 0.076721f, 0.093079f,
+ 0.112305f, 0.133667f, 0.572266f, 0.609375f, 0.618164f, 0.622070f, 0.623535f, 0.625488f, 0.000109f, 0.000212f, 0.000404f, 0.000578f,
+ 0.000567f, 0.000655f, 0.000763f, 0.000676f, 0.000824f, 0.000869f, 0.000971f, 0.001064f, 0.001132f, 0.001210f, 0.001212f, 0.001398f,
+ 0.001486f, 0.001525f, 0.001653f, 0.001676f, 0.001867f, 0.001953f, 0.002062f, 0.002199f, 0.002295f, 0.002443f, 0.002586f, 0.002766f,
+ 0.002979f, 0.003128f, 0.003429f, 0.003551f, 0.003763f, 0.004074f, 0.004349f, 0.004688f, 0.005032f, 0.005470f, 0.005894f, 0.006519f,
+ 0.007092f, 0.007896f, 0.008629f, 0.009659f, 0.010910f, 0.012215f, 0.013962f, 0.015991f, 0.018646f, 0.021881f, 0.026428f, 0.032074f,
+ 0.039276f, 0.048645f, 0.060455f, 0.075256f, 0.092773f, 0.113220f, 0.554688f, 0.596191f, 0.605957f, 0.608887f, 0.610352f, 0.612305f,
+ 0.000202f, 0.000186f, 0.000312f, 0.000433f, 0.000382f, 0.000543f, 0.000482f, 0.000546f, 0.000621f, 0.000666f, 0.000789f, 0.000802f,
+ 0.000859f, 0.000950f, 0.000970f, 0.000975f, 0.001113f, 0.001162f, 0.001207f, 0.001312f, 0.001362f, 0.001433f, 0.001541f, 0.001618f,
+ 0.001720f, 0.001791f, 0.001966f, 0.002035f, 0.002199f, 0.002413f, 0.002546f, 0.002626f, 0.002855f, 0.003063f, 0.003204f, 0.003448f,
+ 0.003693f, 0.003986f, 0.004364f, 0.004684f, 0.005127f, 0.005619f, 0.006271f, 0.006870f, 0.007748f, 0.008713f, 0.009911f, 0.011368f,
+ 0.013191f, 0.015518f, 0.018646f, 0.022644f, 0.028107f, 0.035645f, 0.045471f, 0.058502f, 0.074646f, 0.093994f, 0.541016f, 0.583008f,
+ 0.591797f, 0.596191f, 0.599121f, 0.600098f, 0.000000f, 0.000179f, 0.000242f, 0.000318f, 0.000341f, 0.000345f, 0.000432f, 0.000364f,
+ 0.000475f, 0.000483f, 0.000572f, 0.000576f, 0.000619f, 0.000640f, 0.000716f, 0.000737f, 0.000791f, 0.000845f, 0.000871f, 0.000907f,
+ 0.000998f, 0.001025f, 0.001107f, 0.001181f, 0.001244f, 0.001303f, 0.001391f, 0.001462f, 0.001549f, 0.001631f, 0.001756f, 0.001906f,
+ 0.001984f, 0.002161f, 0.002264f, 0.002419f, 0.002613f, 0.002825f, 0.003103f, 0.003321f, 0.003584f, 0.003893f, 0.004349f, 0.004799f,
+ 0.005383f, 0.006020f, 0.006836f, 0.007858f, 0.009117f, 0.010674f, 0.012825f, 0.015533f, 0.019363f, 0.024780f, 0.032593f, 0.043274f,
+ 0.057770f, 0.076111f, 0.525879f, 0.569336f, 0.578613f, 0.583008f, 0.585449f, 0.586426f, 0.000000f, 0.000088f, 0.000192f, 0.000227f,
+ 0.000230f, 0.000286f, 0.000255f, 0.000317f, 0.000321f, 0.000371f, 0.000401f, 0.000373f, 0.000391f, 0.000457f, 0.000474f, 0.000530f,
+ 0.000509f, 0.000585f, 0.000625f, 0.000664f, 0.000707f, 0.000746f, 0.000772f, 0.000817f, 0.000877f, 0.000887f, 0.000978f, 0.001007f,
+ 0.001069f, 0.001202f, 0.001192f, 0.001290f, 0.001356f, 0.001464f, 0.001583f, 0.001678f, 0.001771f, 0.001929f, 0.002050f, 0.002230f,
+ 0.002424f, 0.002651f, 0.002888f, 0.003176f, 0.003534f, 0.003967f, 0.004475f, 0.005154f, 0.005993f, 0.007118f, 0.008469f, 0.010338f,
+ 0.012794f, 0.016403f, 0.021957f, 0.030090f, 0.042419f, 0.059052f, 0.510254f, 0.554199f, 0.564453f, 0.570312f, 0.572754f, 0.573242f,
+ 0.000000f, 0.000126f, 0.000180f, 0.000121f, 0.000178f, 0.000176f, 0.000177f, 0.000212f, 0.000210f, 0.000228f, 0.000238f, 0.000291f,
+ 0.000280f, 0.000298f, 0.000336f, 0.000350f, 0.000369f, 0.000387f, 0.000395f, 0.000427f, 0.000460f, 0.000476f, 0.000515f, 0.000536f,
+ 0.000573f, 0.000619f, 0.000650f, 0.000670f, 0.000703f, 0.000746f, 0.000798f, 0.000836f, 0.000902f, 0.000949f, 0.001031f, 0.001062f,
+ 0.001162f, 0.001227f, 0.001349f, 0.001442f, 0.001533f, 0.001690f, 0.001865f, 0.001995f, 0.002228f, 0.002495f, 0.002800f, 0.003191f,
+ 0.003653f, 0.004349f, 0.005203f, 0.006393f, 0.008026f, 0.010307f, 0.013710f, 0.019379f, 0.028854f, 0.043457f, 0.494873f, 0.541016f,
+ 0.550781f, 0.555664f, 0.558105f, 0.559570f, 0.000000f, 0.000095f, 0.000086f, 0.000079f, 0.000105f, 0.000124f, 0.000111f, 0.000137f,
+ 0.000141f, 0.000142f, 0.000147f, 0.000151f, 0.000160f, 0.000181f, 0.000202f, 0.000207f, 0.000214f, 0.000248f, 0.000244f, 0.000282f,
+ 0.000273f, 0.000283f, 0.000306f, 0.000334f, 0.000367f, 0.000378f, 0.000376f, 0.000399f, 0.000437f, 0.000459f, 0.000474f, 0.000516f,
+ 0.000552f, 0.000567f, 0.000616f, 0.000649f, 0.000693f, 0.000743f, 0.000805f, 0.000851f, 0.000918f, 0.000999f, 0.001085f, 0.001195f,
+ 0.001309f, 0.001466f, 0.001644f, 0.001850f, 0.002151f, 0.002487f, 0.002974f, 0.003654f, 0.004574f, 0.006001f, 0.008156f, 0.011452f,
+ 0.017853f, 0.029739f, 0.478271f, 0.526367f, 0.537109f, 0.541504f, 0.544434f, 0.545898f, 0.000106f, 0.000085f, 0.000074f, 0.000067f,
+ 0.000066f, 0.000070f, 0.000069f, 0.000073f, 0.000073f, 0.000080f, 0.000084f, 0.000109f, 0.000093f, 0.000098f, 0.000119f, 0.000108f,
+ 0.000128f, 0.000135f, 0.000137f, 0.000149f, 0.000150f, 0.000157f, 0.000182f, 0.000185f, 0.000207f, 0.000206f, 0.000214f, 0.000234f,
+ 0.000237f, 0.000253f, 0.000267f, 0.000289f, 0.000306f, 0.000313f, 0.000344f, 0.000352f, 0.000384f, 0.000406f, 0.000445f, 0.000467f,
+ 0.000503f, 0.000543f, 0.000593f, 0.000634f, 0.000697f, 0.000764f, 0.000850f, 0.000963f, 0.001105f, 0.001298f, 0.001536f, 0.001856f,
+ 0.002333f, 0.003069f, 0.004299f, 0.006271f, 0.009789f, 0.018234f, 0.462402f, 0.511719f, 0.522949f, 0.527344f, 0.530762f, 0.532715f,
+ 0.000091f, 0.000069f, 0.000060f, 0.000054f, 0.000049f, 0.000046f, 0.000043f, 0.000041f, 0.000040f, 0.000044f, 0.000040f, 0.000040f,
+ 0.000054f, 0.000044f, 0.000045f, 0.000044f, 0.000062f, 0.000062f, 0.000069f, 0.000071f, 0.000074f, 0.000079f, 0.000081f, 0.000081f,
+ 0.000085f, 0.000099f, 0.000098f, 0.000115f, 0.000115f, 0.000119f, 0.000125f, 0.000130f, 0.000140f, 0.000144f, 0.000165f, 0.000172f,
+ 0.000178f, 0.000191f, 0.000205f, 0.000222f, 0.000234f, 0.000251f, 0.000276f, 0.000293f, 0.000327f, 0.000354f, 0.000392f, 0.000437f,
+ 0.000494f, 0.000562f, 0.000662f, 0.000800f, 0.001005f, 0.001315f, 0.001852f, 0.002825f, 0.004723f, 0.009285f, 0.446533f, 0.497803f,
+ 0.508301f, 0.514160f, 0.516602f, 0.519043f, 0.000067f, 0.000048f, 0.000040f, 0.000036f, 0.000033f, 0.000031f, 0.000030f, 0.000028f,
+ 0.000027f, 0.000026f, 0.000025f, 0.000024f, 0.000023f, 0.000022f, 0.000021f, 0.000020f, 0.000019f, 0.000020f, 0.000024f, 0.000026f,
+ 0.000025f, 0.000027f, 0.000031f, 0.000032f, 0.000032f, 0.000037f, 0.000041f, 0.000038f, 0.000045f, 0.000042f, 0.000048f, 0.000049f,
+ 0.000053f, 0.000055f, 0.000059f, 0.000062f, 0.000071f, 0.000074f, 0.000077f, 0.000081f, 0.000086f, 0.000091f, 0.000098f, 0.000109f,
+ 0.000116f, 0.000125f, 0.000137f, 0.000158f, 0.000173f, 0.000193f, 0.000230f, 0.000273f, 0.000335f, 0.000425f, 0.000603f, 0.000935f,
+ 0.001694f, 0.003727f, 0.431396f, 0.481934f, 0.493652f, 0.499512f, 0.502930f, 0.504883f, 0.000021f, 0.000016f, 0.000013f, 0.000012f,
+ 0.000013f, 0.000012f, 0.000012f, 0.000012f, 0.000012f, 0.000012f, 0.000011f, 0.000012f, 0.000012f, 0.000011f, 0.000011f, 0.000011f,
+ 0.000011f, 0.000011f, 0.000011f, 0.000010f, 0.000010f, 0.000009f, 0.000009f, 0.000009f, 0.000008f, 0.000008f, 0.000008f, 0.000007f,
+ 0.000008f, 0.000009f, 0.000009f, 0.000010f, 0.000010f, 0.000013f, 0.000014f, 0.000013f, 0.000015f, 0.000016f, 0.000017f, 0.000019f,
+ 0.000019f, 0.000020f, 0.000023f, 0.000026f, 0.000027f, 0.000027f, 0.000032f, 0.000030f, 0.000036f, 0.000039f, 0.000050f, 0.000056f,
+ 0.000063f, 0.000082f, 0.000109f, 0.000168f, 0.000317f, 0.000922f, 0.415283f, 0.467773f, 0.479980f, 0.486328f, 0.489014f, 0.490723f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f,
+ 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000003f, 0.000003f, 0.000004f, 0.000005f, 0.000008f, 0.000026f, 0.398926f, 0.452881f,
+ 0.465576f, 0.471436f, 0.474854f, 0.477051f,
+ },
+ {
+ 0.019653f, 0.058990f, 0.097473f, 0.134277f, 0.169189f, 0.203491f, 0.236450f, 0.267578f, 0.297852f, 0.326416f, 0.354004f, 0.380859f,
+ 0.406250f, 0.431641f, 0.455078f, 0.477539f, 0.500000f, 0.520996f, 0.541504f, 0.560547f, 0.580566f, 0.598633f, 0.615723f, 0.633301f,
+ 0.649902f, 0.666016f, 0.681641f, 0.695801f, 0.709961f, 0.724609f, 0.738770f, 0.751953f, 0.765137f, 0.775879f, 0.788574f, 0.799805f,
+ 0.812012f, 0.822754f, 0.833496f, 0.844238f, 0.854004f, 0.864258f, 0.874023f, 0.883301f, 0.891602f, 0.900391f, 0.909668f, 0.917969f,
+ 0.925781f, 0.934570f, 0.941895f, 0.949707f, 0.956543f, 0.963379f, 0.970703f, 0.977539f, 0.984863f, 0.991211f, 0.988770f, 0.972656f,
+ 0.960449f, 0.949707f, 0.940430f, 0.931641f, 0.017303f, 0.052399f, 0.086548f, 0.119446f, 0.153076f, 0.183594f, 0.214722f, 0.245117f,
+ 0.273193f, 0.301270f, 0.328613f, 0.354492f, 0.379883f, 0.404541f, 0.427979f, 0.450195f, 0.472656f, 0.494629f, 0.515137f, 0.534668f,
+ 0.554199f, 0.573242f, 0.591309f, 0.608887f, 0.625977f, 0.642578f, 0.658203f, 0.672852f, 0.688477f, 0.704102f, 0.717285f, 0.731445f,
+ 0.744629f, 0.756836f, 0.769531f, 0.782715f, 0.793945f, 0.805664f, 0.816406f, 0.828125f, 0.838379f, 0.849121f, 0.858887f, 0.868652f,
+ 0.877930f, 0.888184f, 0.896973f, 0.905762f, 0.915039f, 0.921875f, 0.930176f, 0.937988f, 0.946777f, 0.954102f, 0.960938f, 0.968750f,
+ 0.975586f, 0.982422f, 0.984375f, 0.969238f, 0.957520f, 0.947754f, 0.938477f, 0.930176f, 0.015221f, 0.045837f, 0.076843f, 0.107666f,
+ 0.136719f, 0.166504f, 0.196045f, 0.223999f, 0.250244f, 0.278320f, 0.303711f, 0.329346f, 0.353271f, 0.378906f, 0.401367f, 0.424316f,
+ 0.447266f, 0.468018f, 0.487793f, 0.508301f, 0.529297f, 0.547363f, 0.566406f, 0.583984f, 0.601562f, 0.618652f, 0.634766f, 0.650879f,
+ 0.666016f, 0.681641f, 0.695801f, 0.710449f, 0.724121f, 0.737305f, 0.750488f, 0.762695f, 0.775391f, 0.788086f, 0.799316f, 0.811035f,
+ 0.821777f, 0.833008f, 0.844238f, 0.854004f, 0.864258f, 0.874023f, 0.882812f, 0.892578f, 0.901367f, 0.910156f, 0.918457f, 0.926758f,
+ 0.936035f, 0.942871f, 0.950684f, 0.958496f, 0.965820f, 0.973145f, 0.980469f, 0.965820f, 0.955078f, 0.945312f, 0.936523f, 0.928223f,
+ 0.013420f, 0.041138f, 0.068359f, 0.096436f, 0.124023f, 0.150879f, 0.177246f, 0.204224f, 0.230103f, 0.255859f, 0.281494f, 0.305420f,
+ 0.329834f, 0.352783f, 0.376709f, 0.398682f, 0.420654f, 0.442627f, 0.462646f, 0.483887f, 0.502441f, 0.521484f, 0.540527f, 0.559082f,
+ 0.576172f, 0.595703f, 0.611328f, 0.627930f, 0.644043f, 0.659668f, 0.674316f, 0.688965f, 0.703613f, 0.717285f, 0.730957f, 0.744629f,
+ 0.756836f, 0.770020f, 0.781738f, 0.793945f, 0.805176f, 0.816895f, 0.828125f, 0.838379f, 0.849121f, 0.859375f, 0.869141f, 0.878418f,
+ 0.888184f, 0.897461f, 0.906738f, 0.915039f, 0.923828f, 0.932129f, 0.940430f, 0.947754f, 0.956543f, 0.963867f, 0.976074f, 0.962402f,
+ 0.951660f, 0.942383f, 0.934082f, 0.926758f, 0.012001f, 0.036591f, 0.061737f, 0.086670f, 0.112000f, 0.136719f, 0.161743f, 0.186768f,
+ 0.211792f, 0.235840f, 0.259521f, 0.283203f, 0.307129f, 0.329590f, 0.352295f, 0.374268f, 0.395996f, 0.416992f, 0.437744f, 0.457520f,
+ 0.477295f, 0.497314f, 0.515625f, 0.534180f, 0.553223f, 0.570312f, 0.588379f, 0.604492f, 0.621582f, 0.636719f, 0.653320f, 0.666992f,
+ 0.683105f, 0.697266f, 0.710449f, 0.724609f, 0.737793f, 0.750977f, 0.764160f, 0.775879f, 0.788086f, 0.799805f, 0.812012f, 0.823242f,
+ 0.833496f, 0.844238f, 0.854492f, 0.864746f, 0.875000f, 0.884277f, 0.894043f, 0.902832f, 0.911621f, 0.920898f, 0.929688f, 0.937500f,
+ 0.945801f, 0.953613f, 0.971191f, 0.958984f, 0.949219f, 0.939941f, 0.932129f, 0.924316f, 0.010612f, 0.032684f, 0.054810f, 0.077759f,
+ 0.100952f, 0.124023f, 0.146851f, 0.171021f, 0.193604f, 0.217163f, 0.239380f, 0.261963f, 0.284424f, 0.307129f, 0.328613f, 0.351318f,
+ 0.371826f, 0.392334f, 0.413574f, 0.432617f, 0.453613f, 0.472656f, 0.491943f, 0.510254f, 0.528320f, 0.546387f, 0.563965f, 0.580078f,
+ 0.598633f, 0.613770f, 0.629883f, 0.645996f, 0.661621f, 0.675293f, 0.688965f, 0.705078f, 0.718262f, 0.731934f, 0.745605f, 0.757812f,
+ 0.770996f, 0.782715f, 0.795410f, 0.807129f, 0.818359f, 0.829102f, 0.839844f, 0.851074f, 0.860840f, 0.871094f, 0.880859f, 0.891113f,
+ 0.900391f, 0.909668f, 0.917969f, 0.927246f, 0.935547f, 0.943848f, 0.966797f, 0.955566f, 0.945801f, 0.937012f, 0.929199f, 0.921875f,
+ 0.009483f, 0.029556f, 0.050140f, 0.070129f, 0.091797f, 0.112549f, 0.134155f, 0.156372f, 0.177368f, 0.198975f, 0.220825f, 0.243286f,
+ 0.263916f, 0.285645f, 0.306885f, 0.327393f, 0.348145f, 0.368896f, 0.389404f, 0.409424f, 0.429199f, 0.448730f, 0.467529f, 0.486572f,
+ 0.505371f, 0.522461f, 0.540039f, 0.558105f, 0.574219f, 0.591309f, 0.607422f, 0.623535f, 0.639648f, 0.654785f, 0.669922f, 0.685547f,
+ 0.698730f, 0.712891f, 0.726074f, 0.740234f, 0.752441f, 0.765625f, 0.778320f, 0.789551f, 0.802246f, 0.813477f, 0.825195f, 0.836426f,
+ 0.847168f, 0.856934f, 0.868164f, 0.877930f, 0.888184f, 0.897461f, 0.906738f, 0.915527f, 0.925293f, 0.935059f, 0.962402f, 0.951660f,
+ 0.942383f, 0.933594f, 0.926270f, 0.919434f, 0.008934f, 0.026581f, 0.044708f, 0.063354f, 0.082825f, 0.102844f, 0.122437f, 0.141968f,
+ 0.162720f, 0.183105f, 0.202515f, 0.224609f, 0.244995f, 0.265381f, 0.285645f, 0.306152f, 0.326416f, 0.346680f, 0.365967f, 0.385498f,
+ 0.406006f, 0.425293f, 0.444092f, 0.461914f, 0.480225f, 0.499268f, 0.517090f, 0.535156f, 0.552246f, 0.568359f, 0.585449f, 0.601562f,
+ 0.616699f, 0.633789f, 0.649414f, 0.663574f, 0.678711f, 0.693848f, 0.706543f, 0.721680f, 0.734375f, 0.746582f, 0.760742f, 0.773438f,
+ 0.786133f, 0.797852f, 0.809082f, 0.821777f, 0.832031f, 0.843262f, 0.854492f, 0.864746f, 0.875000f, 0.884766f, 0.895020f, 0.904785f,
+ 0.914062f, 0.922852f, 0.957520f, 0.947266f, 0.938965f, 0.930664f, 0.923340f, 0.916992f, 0.007668f, 0.024017f, 0.040405f, 0.057831f,
+ 0.075195f, 0.093079f, 0.111694f, 0.130127f, 0.148926f, 0.168213f, 0.187500f, 0.206543f, 0.226440f, 0.246460f, 0.265869f, 0.285400f,
+ 0.305176f, 0.324707f, 0.344238f, 0.363281f, 0.383057f, 0.401123f, 0.420166f, 0.439941f, 0.457764f, 0.475586f, 0.493164f, 0.511719f,
+ 0.528809f, 0.545898f, 0.562988f, 0.579590f, 0.596191f, 0.612305f, 0.627441f, 0.643555f, 0.658203f, 0.672363f, 0.687988f, 0.702637f,
+ 0.715332f, 0.728516f, 0.742676f, 0.756348f, 0.768555f, 0.781250f, 0.794434f, 0.806152f, 0.818359f, 0.828613f, 0.840332f, 0.851074f,
+ 0.861816f, 0.872559f, 0.882812f, 0.892578f, 0.903320f, 0.912598f, 0.952637f, 0.943848f, 0.935059f, 0.927246f, 0.920410f, 0.914062f,
+ 0.007263f, 0.021530f, 0.037048f, 0.052429f, 0.068909f, 0.084961f, 0.102112f, 0.119568f, 0.136475f, 0.154541f, 0.172852f, 0.191528f,
+ 0.209717f, 0.228638f, 0.246948f, 0.265869f, 0.284912f, 0.304199f, 0.322510f, 0.341309f, 0.360596f, 0.379639f, 0.397461f, 0.416504f,
+ 0.434570f, 0.452881f, 0.470947f, 0.489014f, 0.505859f, 0.523438f, 0.541016f, 0.557129f, 0.574219f, 0.590332f, 0.606445f, 0.622070f,
+ 0.637695f, 0.653809f, 0.667969f, 0.682129f, 0.697754f, 0.711426f, 0.724609f, 0.737793f, 0.750977f, 0.765625f, 0.777832f, 0.790039f,
+ 0.801270f, 0.813477f, 0.825684f, 0.837402f, 0.848145f, 0.859375f, 0.870117f, 0.880859f, 0.891602f, 0.900391f, 0.947754f, 0.938965f,
+ 0.931152f, 0.923828f, 0.917480f, 0.911133f, 0.006401f, 0.019730f, 0.033813f, 0.047729f, 0.062561f, 0.077515f, 0.093140f, 0.108948f,
+ 0.125366f, 0.141968f, 0.159058f, 0.175781f, 0.193726f, 0.212036f, 0.229980f, 0.247681f, 0.265869f, 0.284424f, 0.302734f, 0.320557f,
+ 0.339111f, 0.357910f, 0.376221f, 0.394287f, 0.412109f, 0.429688f, 0.448486f, 0.466064f, 0.483398f, 0.500977f, 0.517090f, 0.535156f,
+ 0.552246f, 0.568359f, 0.583984f, 0.600586f, 0.616699f, 0.632324f, 0.647949f, 0.662598f, 0.677246f, 0.692383f, 0.706543f, 0.719727f,
+ 0.734375f, 0.747070f, 0.761230f, 0.773926f, 0.786621f, 0.797852f, 0.811523f, 0.823242f, 0.834961f, 0.846680f, 0.857422f, 0.868652f,
+ 0.879395f, 0.890137f, 0.942383f, 0.934082f, 0.927246f, 0.919922f, 0.913574f, 0.908203f, 0.005836f, 0.018158f, 0.030746f, 0.043335f,
+ 0.057007f, 0.070801f, 0.085754f, 0.099548f, 0.115112f, 0.130127f, 0.146362f, 0.162354f, 0.178711f, 0.195801f, 0.212769f, 0.230103f,
+ 0.247925f, 0.264893f, 0.283203f, 0.300293f, 0.318604f, 0.336426f, 0.354492f, 0.372314f, 0.390137f, 0.408203f, 0.425537f, 0.443848f,
+ 0.461182f, 0.478271f, 0.496094f, 0.513184f, 0.529297f, 0.546387f, 0.563477f, 0.580566f, 0.595703f, 0.611816f, 0.626465f, 0.642090f,
+ 0.658691f, 0.671875f, 0.686523f, 0.702148f, 0.716797f, 0.729980f, 0.744629f, 0.757324f, 0.770020f, 0.783203f, 0.796875f, 0.808105f,
+ 0.820312f, 0.832520f, 0.844727f, 0.855957f, 0.867188f, 0.877930f, 0.937012f, 0.930176f, 0.922852f, 0.916504f, 0.910645f, 0.904785f,
+ 0.005486f, 0.016525f, 0.028030f, 0.039612f, 0.052185f, 0.064636f, 0.077576f, 0.091553f, 0.105347f, 0.119568f, 0.134521f, 0.149536f,
+ 0.164917f, 0.180664f, 0.197388f, 0.213623f, 0.230347f, 0.246826f, 0.264160f, 0.280518f, 0.298584f, 0.315674f, 0.334229f, 0.350830f,
+ 0.369141f, 0.386963f, 0.404053f, 0.422119f, 0.438477f, 0.456299f, 0.474121f, 0.491211f, 0.507812f, 0.524902f, 0.541504f, 0.557617f,
+ 0.574707f, 0.590820f, 0.606934f, 0.622559f, 0.637207f, 0.652832f, 0.668945f, 0.683105f, 0.698730f, 0.711914f, 0.726074f, 0.740723f,
+ 0.753906f, 0.766602f, 0.780273f, 0.792969f, 0.805664f, 0.818848f, 0.830566f, 0.842285f, 0.854492f, 0.866211f, 0.931641f, 0.925781f,
+ 0.918945f, 0.913086f, 0.907227f, 0.900879f, 0.004810f, 0.014847f, 0.025604f, 0.036621f, 0.047577f, 0.059174f, 0.071472f, 0.084106f,
+ 0.096985f, 0.109863f, 0.124146f, 0.137939f, 0.152954f, 0.167358f, 0.182495f, 0.197754f, 0.213745f, 0.230103f, 0.246216f, 0.262939f,
+ 0.279297f, 0.296387f, 0.313477f, 0.329834f, 0.348145f, 0.365479f, 0.382080f, 0.399658f, 0.417480f, 0.434082f, 0.452148f, 0.469238f,
+ 0.486084f, 0.502441f, 0.520020f, 0.536621f, 0.552734f, 0.569336f, 0.585938f, 0.601562f, 0.617676f, 0.632812f, 0.648438f, 0.664062f,
+ 0.679688f, 0.693848f, 0.708008f, 0.722656f, 0.735840f, 0.750488f, 0.765137f, 0.777832f, 0.791016f, 0.803711f, 0.816895f, 0.829102f,
+ 0.841309f, 0.853027f, 0.925781f, 0.921387f, 0.914551f, 0.908203f, 0.903320f, 0.897461f, 0.004494f, 0.013809f, 0.023331f, 0.033264f,
+ 0.043549f, 0.053833f, 0.065369f, 0.076660f, 0.088684f, 0.100708f, 0.113464f, 0.127075f, 0.140381f, 0.154419f, 0.169067f, 0.183472f,
+ 0.198975f, 0.213623f, 0.229370f, 0.245117f, 0.261475f, 0.277832f, 0.294678f, 0.311523f, 0.327148f, 0.344727f, 0.362061f, 0.378418f,
+ 0.395996f, 0.413086f, 0.430176f, 0.447021f, 0.464111f, 0.481689f, 0.498047f, 0.514648f, 0.531738f, 0.547363f, 0.565430f, 0.582031f,
+ 0.597656f, 0.612793f, 0.628418f, 0.644043f, 0.660645f, 0.674805f, 0.689941f, 0.705078f, 0.718750f, 0.734375f, 0.747559f, 0.761719f,
+ 0.775391f, 0.788086f, 0.803223f, 0.814453f, 0.828125f, 0.840332f, 0.919434f, 0.916504f, 0.909668f, 0.904785f, 0.898926f, 0.894043f,
+ 0.004120f, 0.012512f, 0.021423f, 0.030655f, 0.039673f, 0.049500f, 0.059845f, 0.070374f, 0.081543f, 0.093323f, 0.104614f, 0.116577f,
+ 0.129395f, 0.142456f, 0.156250f, 0.169434f, 0.183594f, 0.198364f, 0.213257f, 0.228638f, 0.244141f, 0.259766f, 0.275635f, 0.291748f,
+ 0.308105f, 0.324707f, 0.341309f, 0.359131f, 0.375244f, 0.391846f, 0.408447f, 0.426025f, 0.442871f, 0.459473f, 0.477051f, 0.494141f,
+ 0.510254f, 0.527344f, 0.543457f, 0.560059f, 0.577148f, 0.592773f, 0.608887f, 0.625977f, 0.640625f, 0.656738f, 0.671875f, 0.686523f,
+ 0.702637f, 0.716797f, 0.731445f, 0.746582f, 0.759277f, 0.773926f, 0.787598f, 0.800293f, 0.814453f, 0.827148f, 0.914062f, 0.911133f,
+ 0.905273f, 0.899902f, 0.895508f, 0.890625f, 0.004120f, 0.011566f, 0.019180f, 0.027969f, 0.036255f, 0.045746f, 0.054901f, 0.064941f,
+ 0.074707f, 0.085327f, 0.096436f, 0.107239f, 0.119324f, 0.131470f, 0.144165f, 0.157104f, 0.169922f, 0.183594f, 0.198242f, 0.212769f,
+ 0.227295f, 0.242188f, 0.257568f, 0.273193f, 0.289307f, 0.305420f, 0.321289f, 0.337891f, 0.354492f, 0.371094f, 0.387451f, 0.405029f,
+ 0.421143f, 0.438477f, 0.455322f, 0.472656f, 0.488525f, 0.505859f, 0.521973f, 0.539551f, 0.555664f, 0.572754f, 0.588867f, 0.605469f,
+ 0.621582f, 0.637207f, 0.653320f, 0.668945f, 0.684570f, 0.698242f, 0.714844f, 0.729492f, 0.745117f, 0.758301f, 0.771973f, 0.787109f,
+ 0.800781f, 0.813477f, 0.907715f, 0.905762f, 0.900879f, 0.895508f, 0.890625f, 0.886719f, 0.003464f, 0.010536f, 0.018143f, 0.025604f,
+ 0.033600f, 0.041992f, 0.050659f, 0.059631f, 0.068481f, 0.078552f, 0.088196f, 0.099060f, 0.110107f, 0.121033f, 0.133057f, 0.145020f,
+ 0.157349f, 0.170166f, 0.183838f, 0.197632f, 0.210938f, 0.225464f, 0.241089f, 0.255371f, 0.270508f, 0.286377f, 0.302246f, 0.317871f,
+ 0.334229f, 0.349854f, 0.367188f, 0.383789f, 0.399414f, 0.417236f, 0.433838f, 0.450928f, 0.468018f, 0.484131f, 0.501465f, 0.519043f,
+ 0.535156f, 0.551758f, 0.568359f, 0.585449f, 0.601074f, 0.617676f, 0.634277f, 0.649902f, 0.666016f, 0.681152f, 0.695801f, 0.711914f,
+ 0.727539f, 0.741699f, 0.756836f, 0.770508f, 0.785645f, 0.800293f, 0.901855f, 0.900391f, 0.895996f, 0.891113f, 0.886230f, 0.881836f,
+ 0.003197f, 0.009903f, 0.016525f, 0.023849f, 0.030853f, 0.038605f, 0.046265f, 0.054657f, 0.063232f, 0.072266f, 0.081543f, 0.090881f,
+ 0.100769f, 0.112061f, 0.123047f, 0.134155f, 0.145752f, 0.157471f, 0.170166f, 0.182861f, 0.196289f, 0.210327f, 0.223755f, 0.238525f,
+ 0.253418f, 0.268066f, 0.283203f, 0.299316f, 0.314697f, 0.330811f, 0.346680f, 0.363281f, 0.379639f, 0.396484f, 0.412842f, 0.429443f,
+ 0.446289f, 0.462891f, 0.480225f, 0.497559f, 0.514648f, 0.531250f, 0.547852f, 0.564453f, 0.581055f, 0.598145f, 0.615234f, 0.631836f,
+ 0.646484f, 0.663086f, 0.679199f, 0.694824f, 0.710449f, 0.726074f, 0.740234f, 0.755859f, 0.770508f, 0.784668f, 0.895020f, 0.894531f,
+ 0.890625f, 0.886719f, 0.881836f, 0.877441f, 0.003071f, 0.009163f, 0.015602f, 0.021729f, 0.028412f, 0.035522f, 0.042755f, 0.050598f,
+ 0.057983f, 0.066284f, 0.075317f, 0.083862f, 0.092773f, 0.102905f, 0.113342f, 0.123840f, 0.134399f, 0.145752f, 0.157593f, 0.169556f,
+ 0.182129f, 0.194702f, 0.207886f, 0.222046f, 0.235840f, 0.250977f, 0.265137f, 0.280273f, 0.295898f, 0.311279f, 0.326660f, 0.342773f,
+ 0.359375f, 0.375732f, 0.392090f, 0.409180f, 0.425049f, 0.441895f, 0.459473f, 0.476318f, 0.493652f, 0.510742f, 0.527344f, 0.544434f,
+ 0.561035f, 0.578125f, 0.595215f, 0.611328f, 0.628418f, 0.645020f, 0.661133f, 0.677246f, 0.693359f, 0.708496f, 0.724609f, 0.740723f,
+ 0.755859f, 0.771484f, 0.889160f, 0.889160f, 0.885254f, 0.881348f, 0.876953f, 0.873047f, 0.002748f, 0.008171f, 0.014084f, 0.019638f,
+ 0.026108f, 0.032318f, 0.039154f, 0.045990f, 0.053619f, 0.061066f, 0.068665f, 0.076477f, 0.085632f, 0.094727f, 0.104187f, 0.113831f,
+ 0.123535f, 0.134888f, 0.145508f, 0.157104f, 0.168701f, 0.181030f, 0.193481f, 0.206665f, 0.220093f, 0.233398f, 0.248169f, 0.262695f,
+ 0.277344f, 0.292236f, 0.307617f, 0.322998f, 0.339355f, 0.355469f, 0.371582f, 0.388184f, 0.404541f, 0.420410f, 0.438477f, 0.455322f,
+ 0.472656f, 0.489014f, 0.506348f, 0.523926f, 0.541016f, 0.557617f, 0.575195f, 0.591309f, 0.608887f, 0.625977f, 0.643555f, 0.659180f,
+ 0.674805f, 0.691406f, 0.707520f, 0.724121f, 0.739746f, 0.755371f, 0.882812f, 0.883789f, 0.879883f, 0.875977f, 0.872559f, 0.868652f,
+ 0.002491f, 0.007809f, 0.012764f, 0.018448f, 0.024094f, 0.029861f, 0.036102f, 0.042572f, 0.049500f, 0.056091f, 0.063293f, 0.070984f,
+ 0.079285f, 0.087036f, 0.095825f, 0.104858f, 0.114441f, 0.124084f, 0.133789f, 0.144653f, 0.156250f, 0.167480f, 0.179199f, 0.191650f,
+ 0.204102f, 0.217896f, 0.231445f, 0.245239f, 0.259521f, 0.274170f, 0.289307f, 0.304199f, 0.319580f, 0.334961f, 0.351074f, 0.367676f,
+ 0.384277f, 0.400635f, 0.417480f, 0.434570f, 0.451660f, 0.468994f, 0.485352f, 0.502441f, 0.520508f, 0.537109f, 0.554688f, 0.571777f,
+ 0.588867f, 0.605957f, 0.623047f, 0.639648f, 0.656738f, 0.673828f, 0.690430f, 0.708008f, 0.723633f, 0.739746f, 0.874023f, 0.876953f,
+ 0.874023f, 0.871582f, 0.867188f, 0.862793f, 0.002279f, 0.007130f, 0.012291f, 0.016922f, 0.022171f, 0.027847f, 0.033325f, 0.039185f,
+ 0.045349f, 0.051849f, 0.058411f, 0.064880f, 0.072144f, 0.080017f, 0.087891f, 0.096313f, 0.105103f, 0.114197f, 0.123779f, 0.134155f,
+ 0.144043f, 0.155151f, 0.166016f, 0.177246f, 0.189697f, 0.202271f, 0.214722f, 0.228271f, 0.242310f, 0.256592f, 0.270752f, 0.285400f,
+ 0.300537f, 0.315674f, 0.331543f, 0.347656f, 0.363525f, 0.379639f, 0.396729f, 0.414307f, 0.430908f, 0.447754f, 0.465088f, 0.482178f,
+ 0.499512f, 0.517090f, 0.533203f, 0.552246f, 0.568848f, 0.586426f, 0.603516f, 0.621582f, 0.639648f, 0.656250f, 0.673828f, 0.690918f,
+ 0.707520f, 0.724121f, 0.867676f, 0.870605f, 0.868164f, 0.865723f, 0.861328f, 0.857910f, 0.002220f, 0.006565f, 0.011238f, 0.015961f,
+ 0.020401f, 0.025558f, 0.030853f, 0.036133f, 0.041199f, 0.047180f, 0.053436f, 0.059723f, 0.066162f, 0.073853f, 0.080688f, 0.088440f,
+ 0.096436f, 0.105042f, 0.114319f, 0.123047f, 0.132446f, 0.142822f, 0.153198f, 0.164062f, 0.175659f, 0.187378f, 0.199463f, 0.212402f,
+ 0.225464f, 0.239014f, 0.252686f, 0.266846f, 0.281494f, 0.296631f, 0.312500f, 0.328369f, 0.343750f, 0.359863f, 0.376221f, 0.393066f,
+ 0.409668f, 0.426514f, 0.444336f, 0.461670f, 0.478760f, 0.496826f, 0.513672f, 0.532227f, 0.549316f, 0.567383f, 0.584961f, 0.602051f,
+ 0.620605f, 0.637207f, 0.655273f, 0.672363f, 0.689941f, 0.708008f, 0.860840f, 0.864746f, 0.862793f, 0.859375f, 0.855957f, 0.853027f,
+ 0.002190f, 0.005993f, 0.010117f, 0.014420f, 0.018738f, 0.023361f, 0.028015f, 0.033142f, 0.037781f, 0.043732f, 0.048920f, 0.054840f,
+ 0.061218f, 0.067810f, 0.074219f, 0.081299f, 0.088562f, 0.096130f, 0.104614f, 0.113098f, 0.122253f, 0.131714f, 0.141113f, 0.151245f,
+ 0.162109f, 0.173462f, 0.184692f, 0.196899f, 0.209473f, 0.222534f, 0.236206f, 0.249634f, 0.263672f, 0.277588f, 0.293213f, 0.308350f,
+ 0.323975f, 0.339844f, 0.355957f, 0.372070f, 0.389404f, 0.405762f, 0.422852f, 0.439941f, 0.458008f, 0.475098f, 0.492920f, 0.510742f,
+ 0.528320f, 0.546875f, 0.564453f, 0.583496f, 0.601074f, 0.619141f, 0.636719f, 0.654785f, 0.672852f, 0.691406f, 0.852539f, 0.858398f,
+ 0.856445f, 0.853516f, 0.850586f, 0.847656f, 0.001787f, 0.005753f, 0.009300f, 0.013611f, 0.017410f, 0.021576f, 0.025665f, 0.030533f,
+ 0.035126f, 0.040039f, 0.044952f, 0.050446f, 0.055817f, 0.061890f, 0.068054f, 0.074707f, 0.081482f, 0.088501f, 0.095764f, 0.103943f,
+ 0.112183f, 0.120850f, 0.130249f, 0.139526f, 0.149658f, 0.160400f, 0.171021f, 0.182007f, 0.194336f, 0.206421f, 0.219360f, 0.232666f,
+ 0.245850f, 0.260010f, 0.274170f, 0.289307f, 0.304443f, 0.319580f, 0.335693f, 0.352295f, 0.369141f, 0.385498f, 0.402344f, 0.419189f,
+ 0.437012f, 0.454346f, 0.472412f, 0.490234f, 0.507812f, 0.525879f, 0.545410f, 0.562500f, 0.581055f, 0.600098f, 0.618164f, 0.636719f,
+ 0.655273f, 0.674316f, 0.845703f, 0.852051f, 0.849609f, 0.847168f, 0.845215f, 0.841309f, 0.001766f, 0.005241f, 0.008881f, 0.012024f,
+ 0.016129f, 0.020233f, 0.024124f, 0.027664f, 0.032135f, 0.036835f, 0.041321f, 0.046173f, 0.051392f, 0.056946f, 0.062225f, 0.068604f,
+ 0.074524f, 0.080933f, 0.088135f, 0.095398f, 0.103210f, 0.110779f, 0.119263f, 0.128296f, 0.137695f, 0.147217f, 0.157349f, 0.168091f,
+ 0.179688f, 0.191284f, 0.203613f, 0.215942f, 0.228882f, 0.242554f, 0.255859f, 0.270508f, 0.285400f, 0.300537f, 0.316406f, 0.331787f,
+ 0.348877f, 0.364746f, 0.382080f, 0.398682f, 0.415771f, 0.434082f, 0.451416f, 0.469482f, 0.487793f, 0.505859f, 0.524414f, 0.542969f,
+ 0.562012f, 0.580566f, 0.598145f, 0.618652f, 0.637695f, 0.657227f, 0.837891f, 0.844727f, 0.843750f, 0.841309f, 0.838379f, 0.836426f,
+ 0.001598f, 0.004887f, 0.008217f, 0.011497f, 0.014786f, 0.018326f, 0.021652f, 0.025513f, 0.029541f, 0.033813f, 0.038086f, 0.042236f,
+ 0.046844f, 0.052032f, 0.057251f, 0.062622f, 0.068237f, 0.074280f, 0.080505f, 0.086975f, 0.094116f, 0.101074f, 0.109314f, 0.117554f,
+ 0.126587f, 0.135254f, 0.144775f, 0.155029f, 0.165405f, 0.176392f, 0.187744f, 0.199829f, 0.212646f, 0.224976f, 0.238647f, 0.252441f,
+ 0.267090f, 0.281738f, 0.296631f, 0.312256f, 0.328369f, 0.344971f, 0.361328f, 0.377686f, 0.395264f, 0.412842f, 0.430908f, 0.448730f,
+ 0.467041f, 0.485596f, 0.503906f, 0.522461f, 0.541504f, 0.561523f, 0.580078f, 0.599121f, 0.618164f, 0.639648f, 0.828613f, 0.837891f,
+ 0.836914f, 0.834473f, 0.833008f, 0.830566f, 0.001709f, 0.004494f, 0.007416f, 0.010628f, 0.013680f, 0.016785f, 0.020203f, 0.023712f,
+ 0.027435f, 0.031006f, 0.034424f, 0.038635f, 0.043182f, 0.047668f, 0.052307f, 0.057159f, 0.062042f, 0.067749f, 0.073730f, 0.079956f,
+ 0.086182f, 0.092773f, 0.100159f, 0.107727f, 0.115479f, 0.123962f, 0.132935f, 0.142578f, 0.151978f, 0.162476f, 0.173340f, 0.184570f,
+ 0.196411f, 0.208740f, 0.221436f, 0.235229f, 0.248779f, 0.262939f, 0.277832f, 0.293213f, 0.308105f, 0.324219f, 0.341309f, 0.357178f,
+ 0.374756f, 0.391846f, 0.409424f, 0.427490f, 0.446533f, 0.464844f, 0.483643f, 0.501953f, 0.521484f, 0.541504f, 0.561035f, 0.579590f,
+ 0.599609f, 0.620605f, 0.821289f, 0.830566f, 0.830078f, 0.828125f, 0.825684f, 0.823242f, 0.001367f, 0.004105f, 0.007023f, 0.009552f,
+ 0.012611f, 0.015289f, 0.018341f, 0.021652f, 0.024857f, 0.027878f, 0.031769f, 0.035614f, 0.039276f, 0.043610f, 0.047333f, 0.052155f,
+ 0.056549f, 0.061401f, 0.066895f, 0.072449f, 0.078613f, 0.084778f, 0.091309f, 0.098083f, 0.105774f, 0.113281f, 0.121399f, 0.130371f,
+ 0.139648f, 0.148926f, 0.159546f, 0.169922f, 0.180908f, 0.192749f, 0.204834f, 0.217651f, 0.231567f, 0.244385f, 0.259277f, 0.273926f,
+ 0.289307f, 0.304688f, 0.320557f, 0.336914f, 0.354248f, 0.371338f, 0.388184f, 0.406982f, 0.424316f, 0.443115f, 0.462646f, 0.481445f,
+ 0.501465f, 0.520508f, 0.541016f, 0.559570f, 0.580078f, 0.601074f, 0.812988f, 0.823242f, 0.823242f, 0.821289f, 0.819824f, 0.817383f,
+ 0.001398f, 0.003883f, 0.006351f, 0.008911f, 0.011559f, 0.014343f, 0.017212f, 0.020035f, 0.022797f, 0.026062f, 0.028793f, 0.031891f,
+ 0.035858f, 0.039368f, 0.043213f, 0.047607f, 0.051483f, 0.056030f, 0.060883f, 0.065979f, 0.071350f, 0.076843f, 0.083130f, 0.089172f,
+ 0.096069f, 0.103333f, 0.111023f, 0.119019f, 0.127319f, 0.136719f, 0.145996f, 0.156128f, 0.166138f, 0.177368f, 0.189453f, 0.201416f,
+ 0.213745f, 0.227295f, 0.240601f, 0.255371f, 0.269287f, 0.285400f, 0.301270f, 0.317139f, 0.333740f, 0.350586f, 0.367920f, 0.385986f,
+ 0.404297f, 0.422852f, 0.442383f, 0.460938f, 0.479980f, 0.500488f, 0.520508f, 0.541016f, 0.560547f, 0.582520f, 0.803711f, 0.814941f,
+ 0.815430f, 0.814453f, 0.812500f, 0.810547f, 0.001259f, 0.003464f, 0.006332f, 0.008286f, 0.010384f, 0.013000f, 0.015587f, 0.018234f,
+ 0.021027f, 0.023422f, 0.026566f, 0.029480f, 0.032379f, 0.035919f, 0.039215f, 0.043060f, 0.046997f, 0.050995f, 0.055267f, 0.059998f,
+ 0.065002f, 0.069946f, 0.075317f, 0.081299f, 0.087280f, 0.094116f, 0.101135f, 0.108276f, 0.116150f, 0.124695f, 0.133545f, 0.142700f,
+ 0.152222f, 0.162720f, 0.173950f, 0.185303f, 0.197754f, 0.210205f, 0.223022f, 0.237061f, 0.250732f, 0.265869f, 0.281250f, 0.297119f,
+ 0.313477f, 0.330322f, 0.347656f, 0.364746f, 0.383301f, 0.401367f, 0.420898f, 0.440186f, 0.459229f, 0.479736f, 0.499512f, 0.520996f,
+ 0.541016f, 0.562988f, 0.794434f, 0.807129f, 0.807617f, 0.807129f, 0.805176f, 0.803711f, 0.001070f, 0.003237f, 0.005432f, 0.007359f,
+ 0.009857f, 0.012337f, 0.014191f, 0.016586f, 0.019257f, 0.021561f, 0.024094f, 0.026901f, 0.029724f, 0.032745f, 0.035675f, 0.039368f,
+ 0.042572f, 0.045990f, 0.050354f, 0.054535f, 0.058746f, 0.063232f, 0.068420f, 0.073608f, 0.079529f, 0.085266f, 0.091370f, 0.098083f,
+ 0.105835f, 0.113159f, 0.121094f, 0.129639f, 0.139038f, 0.148926f, 0.159058f, 0.169678f, 0.181274f, 0.193481f, 0.205811f, 0.219482f,
+ 0.233032f, 0.247192f, 0.262207f, 0.277100f, 0.293213f, 0.309814f, 0.326660f, 0.344238f, 0.361816f, 0.380615f, 0.398926f, 0.418945f,
+ 0.438477f, 0.458008f, 0.479004f, 0.499512f, 0.520996f, 0.543945f, 0.784668f, 0.798828f, 0.800293f, 0.799805f, 0.797852f, 0.796875f,
+ 0.001074f, 0.002916f, 0.004955f, 0.007149f, 0.009033f, 0.011055f, 0.013268f, 0.015495f, 0.017365f, 0.019485f, 0.022095f, 0.024002f,
+ 0.026688f, 0.029633f, 0.032593f, 0.035370f, 0.038361f, 0.041870f, 0.045319f, 0.049225f, 0.052948f, 0.057068f, 0.061676f, 0.066345f,
+ 0.071167f, 0.076782f, 0.082581f, 0.088867f, 0.095886f, 0.102539f, 0.109802f, 0.118042f, 0.126709f, 0.135132f, 0.144897f, 0.155151f,
+ 0.165771f, 0.177368f, 0.189209f, 0.201904f, 0.215210f, 0.229370f, 0.242798f, 0.258057f, 0.274170f, 0.290039f, 0.306885f, 0.323242f,
+ 0.341309f, 0.359375f, 0.378418f, 0.397461f, 0.416260f, 0.437500f, 0.457031f, 0.479004f, 0.501465f, 0.522461f, 0.775391f, 0.790527f,
+ 0.791992f, 0.791504f, 0.791016f, 0.789551f, 0.000837f, 0.002916f, 0.004738f, 0.006477f, 0.008575f, 0.010170f, 0.012161f, 0.014023f,
+ 0.015808f, 0.017792f, 0.020111f, 0.022064f, 0.024414f, 0.026794f, 0.029251f, 0.032074f, 0.034698f, 0.037598f, 0.040741f, 0.043915f,
+ 0.047577f, 0.051361f, 0.055389f, 0.059692f, 0.064209f, 0.068787f, 0.074585f, 0.079712f, 0.085632f, 0.092346f, 0.099487f, 0.106323f,
+ 0.114929f, 0.122925f, 0.131958f, 0.141235f, 0.151123f, 0.161865f, 0.172974f, 0.184937f, 0.197632f, 0.210693f, 0.224854f, 0.239136f,
+ 0.254395f, 0.269531f, 0.285889f, 0.302979f, 0.320557f, 0.338623f, 0.356689f, 0.375977f, 0.395752f, 0.415527f, 0.436523f, 0.458252f,
+ 0.479248f, 0.501465f, 0.765137f, 0.781738f, 0.783691f, 0.784180f, 0.783203f, 0.781250f, 0.000854f, 0.002817f, 0.004089f, 0.005684f,
+ 0.007675f, 0.009277f, 0.010864f, 0.012413f, 0.014427f, 0.016235f, 0.017838f, 0.019913f, 0.021805f, 0.023987f, 0.026276f, 0.028915f,
+ 0.030960f, 0.033875f, 0.036652f, 0.039551f, 0.042816f, 0.045837f, 0.049591f, 0.053589f, 0.057526f, 0.061829f, 0.066650f, 0.071655f,
+ 0.077393f, 0.083008f, 0.088989f, 0.096008f, 0.103210f, 0.110657f, 0.119141f, 0.127930f, 0.137085f, 0.146973f, 0.157593f, 0.169312f,
+ 0.181274f, 0.193481f, 0.207031f, 0.220581f, 0.235229f, 0.250732f, 0.266357f, 0.282227f, 0.299805f, 0.317627f, 0.335449f, 0.354736f,
+ 0.374268f, 0.394531f, 0.415527f, 0.436279f, 0.458252f, 0.481689f, 0.754883f, 0.773438f, 0.775391f, 0.775879f, 0.774902f, 0.773926f,
+ 0.000852f, 0.002520f, 0.003937f, 0.005527f, 0.006836f, 0.008408f, 0.009773f, 0.011620f, 0.013039f, 0.014687f, 0.016327f, 0.017944f,
+ 0.019760f, 0.021774f, 0.023697f, 0.025894f, 0.027969f, 0.030121f, 0.032501f, 0.035370f, 0.038208f, 0.041046f, 0.044098f, 0.047791f,
+ 0.051453f, 0.055176f, 0.059570f, 0.064026f, 0.068787f, 0.074158f, 0.079834f, 0.085938f, 0.092590f, 0.099304f, 0.106873f, 0.114990f,
+ 0.124023f, 0.133301f, 0.143066f, 0.153687f, 0.164551f, 0.176392f, 0.189209f, 0.202637f, 0.216553f, 0.231323f, 0.246704f, 0.262451f,
+ 0.279297f, 0.296387f, 0.314697f, 0.333496f, 0.353516f, 0.373047f, 0.394775f, 0.415039f, 0.437500f, 0.460449f, 0.745117f, 0.763672f,
+ 0.766602f, 0.767090f, 0.767090f, 0.765625f, 0.000762f, 0.002342f, 0.003563f, 0.004787f, 0.006447f, 0.007648f, 0.009193f, 0.010353f,
+ 0.012016f, 0.013138f, 0.014557f, 0.016312f, 0.017929f, 0.019470f, 0.021103f, 0.023056f, 0.024918f, 0.026886f, 0.029099f, 0.031586f,
+ 0.034058f, 0.036499f, 0.039307f, 0.042450f, 0.045685f, 0.049072f, 0.052826f, 0.056915f, 0.061096f, 0.065918f, 0.070984f, 0.076538f,
+ 0.082520f, 0.088928f, 0.095520f, 0.102905f, 0.111206f, 0.119629f, 0.128662f, 0.138184f, 0.148682f, 0.160156f, 0.171997f, 0.184937f,
+ 0.198364f, 0.212524f, 0.227173f, 0.243042f, 0.259277f, 0.276611f, 0.294189f, 0.312500f, 0.331055f, 0.350830f, 0.372070f, 0.392334f,
+ 0.415771f, 0.438232f, 0.734375f, 0.754395f, 0.758789f, 0.758789f, 0.758789f, 0.757812f, 0.000848f, 0.002024f, 0.003553f, 0.004646f,
+ 0.005726f, 0.007050f, 0.008362f, 0.009438f, 0.010536f, 0.011810f, 0.013123f, 0.014481f, 0.015778f, 0.017242f, 0.018753f, 0.020447f,
+ 0.022278f, 0.023819f, 0.025940f, 0.027771f, 0.029999f, 0.032410f, 0.034851f, 0.037354f, 0.040375f, 0.043610f, 0.046631f, 0.050354f,
+ 0.054108f, 0.058563f, 0.062805f, 0.067871f, 0.073242f, 0.078796f, 0.085083f, 0.091797f, 0.098816f, 0.106689f, 0.115540f, 0.124207f,
+ 0.134155f, 0.144409f, 0.155762f, 0.167725f, 0.180664f, 0.193848f, 0.208618f, 0.223389f, 0.239746f, 0.256104f, 0.273438f, 0.291260f,
+ 0.310059f, 0.330078f, 0.349854f, 0.370850f, 0.393555f, 0.416992f, 0.724121f, 0.744629f, 0.748535f, 0.750000f, 0.749512f, 0.749512f,
+ 0.000736f, 0.001780f, 0.002937f, 0.004314f, 0.005211f, 0.006214f, 0.007423f, 0.008537f, 0.009392f, 0.010773f, 0.011726f, 0.012970f,
+ 0.014183f, 0.015373f, 0.016724f, 0.017990f, 0.019730f, 0.021194f, 0.022644f, 0.024368f, 0.026443f, 0.028610f, 0.030685f, 0.032898f,
+ 0.035583f, 0.038300f, 0.041351f, 0.044556f, 0.047638f, 0.051422f, 0.055359f, 0.059875f, 0.064392f, 0.069580f, 0.075195f, 0.080872f,
+ 0.087646f, 0.094849f, 0.102173f, 0.110596f, 0.119690f, 0.129761f, 0.139893f, 0.151367f, 0.163452f, 0.176147f, 0.190063f, 0.204590f,
+ 0.219238f, 0.235718f, 0.252441f, 0.270264f, 0.289062f, 0.307861f, 0.328613f, 0.350098f, 0.372314f, 0.395020f, 0.712402f, 0.734863f,
+ 0.739746f, 0.740723f, 0.740723f, 0.740234f, 0.000589f, 0.001616f, 0.002674f, 0.003841f, 0.004940f, 0.005676f, 0.006554f, 0.007442f,
+ 0.008812f, 0.009537f, 0.010277f, 0.011528f, 0.012634f, 0.013527f, 0.014671f, 0.016037f, 0.017136f, 0.018631f, 0.019943f, 0.021530f,
+ 0.023071f, 0.025146f, 0.026825f, 0.029037f, 0.030853f, 0.033447f, 0.035736f, 0.038849f, 0.041656f, 0.044922f, 0.048462f, 0.052277f,
+ 0.056519f, 0.061127f, 0.065796f, 0.071411f, 0.077148f, 0.083435f, 0.090393f, 0.097900f, 0.106079f, 0.115356f, 0.125122f, 0.135132f,
+ 0.146729f, 0.158936f, 0.171509f, 0.185059f, 0.200439f, 0.215576f, 0.232056f, 0.249756f, 0.267822f, 0.286621f, 0.306885f, 0.328125f,
+ 0.349854f, 0.373291f, 0.701172f, 0.725586f, 0.729980f, 0.730957f, 0.731934f, 0.730957f, 0.000547f, 0.001666f, 0.002367f, 0.003559f,
+ 0.004238f, 0.005028f, 0.005852f, 0.006859f, 0.007755f, 0.008530f, 0.009163f, 0.010056f, 0.010956f, 0.011978f, 0.013062f, 0.014076f,
+ 0.015053f, 0.016251f, 0.017471f, 0.018921f, 0.020233f, 0.021774f, 0.023315f, 0.025162f, 0.026871f, 0.029007f, 0.031204f, 0.033661f,
+ 0.036102f, 0.039062f, 0.042053f, 0.045380f, 0.048859f, 0.053040f, 0.057343f, 0.062225f, 0.067261f, 0.073120f, 0.079407f, 0.086243f,
+ 0.093567f, 0.101868f, 0.110596f, 0.120239f, 0.130859f, 0.141968f, 0.154053f, 0.167358f, 0.181274f, 0.196045f, 0.212158f, 0.229248f,
+ 0.247192f, 0.265381f, 0.285400f, 0.305664f, 0.327637f, 0.350586f, 0.689453f, 0.715820f, 0.720215f, 0.722168f, 0.722168f, 0.722168f,
+ 0.000492f, 0.001634f, 0.002342f, 0.003111f, 0.003866f, 0.004574f, 0.005417f, 0.005928f, 0.006588f, 0.007393f, 0.008041f, 0.008873f,
+ 0.009689f, 0.010391f, 0.011375f, 0.012146f, 0.013100f, 0.014183f, 0.015274f, 0.016479f, 0.017456f, 0.018768f, 0.020157f, 0.021606f,
+ 0.023300f, 0.024933f, 0.026855f, 0.028885f, 0.031143f, 0.033417f, 0.036133f, 0.039032f, 0.042236f, 0.045776f, 0.049713f, 0.053680f,
+ 0.058228f, 0.063232f, 0.069092f, 0.074829f, 0.081482f, 0.089050f, 0.096924f, 0.105591f, 0.115417f, 0.126221f, 0.137329f, 0.149658f,
+ 0.162964f, 0.176880f, 0.192505f, 0.208740f, 0.226318f, 0.244873f, 0.263428f, 0.283936f, 0.306396f, 0.329346f, 0.676270f, 0.705078f,
+ 0.709961f, 0.711914f, 0.712891f, 0.711914f, 0.000506f, 0.001342f, 0.002157f, 0.002813f, 0.003353f, 0.004105f, 0.004658f, 0.005344f,
+ 0.005871f, 0.006538f, 0.007050f, 0.007751f, 0.008247f, 0.009109f, 0.009865f, 0.010559f, 0.011269f, 0.012169f, 0.013290f, 0.014191f,
+ 0.015015f, 0.016312f, 0.017395f, 0.018570f, 0.019989f, 0.021439f, 0.023102f, 0.024536f, 0.026535f, 0.028702f, 0.030899f, 0.033356f,
+ 0.035980f, 0.039093f, 0.042328f, 0.046051f, 0.049927f, 0.054199f, 0.059052f, 0.064575f, 0.070496f, 0.076782f, 0.084412f, 0.092285f,
+ 0.100708f, 0.110779f, 0.121399f, 0.132690f, 0.145508f, 0.158813f, 0.173584f, 0.189453f, 0.205688f, 0.223755f, 0.242554f, 0.263184f,
+ 0.284180f, 0.306641f, 0.664551f, 0.693848f, 0.699707f, 0.702148f, 0.702637f, 0.703125f, 0.000500f, 0.001122f, 0.001810f, 0.002363f,
+ 0.002987f, 0.003576f, 0.004158f, 0.004620f, 0.005032f, 0.005627f, 0.006161f, 0.006721f, 0.007179f, 0.007790f, 0.008385f, 0.009163f,
+ 0.009758f, 0.010536f, 0.011284f, 0.011986f, 0.012878f, 0.013710f, 0.014725f, 0.015823f, 0.016937f, 0.018326f, 0.019547f, 0.020874f,
+ 0.022522f, 0.024399f, 0.026077f, 0.028427f, 0.030609f, 0.032990f, 0.035736f, 0.038788f, 0.042236f, 0.045990f, 0.050354f, 0.054901f,
+ 0.059967f, 0.065918f, 0.072205f, 0.079468f, 0.087219f, 0.096252f, 0.105713f, 0.116272f, 0.128174f, 0.140747f, 0.154419f, 0.169556f,
+ 0.186279f, 0.203125f, 0.221313f, 0.240601f, 0.261719f, 0.284424f, 0.652344f, 0.683105f, 0.688965f, 0.691406f, 0.692383f, 0.693359f,
+ 0.000482f, 0.001184f, 0.001604f, 0.002171f, 0.002562f, 0.003029f, 0.003656f, 0.003941f, 0.004410f, 0.004948f, 0.005325f, 0.005577f,
+ 0.006157f, 0.006702f, 0.007172f, 0.007751f, 0.008331f, 0.008904f, 0.009514f, 0.010063f, 0.010925f, 0.011719f, 0.012306f, 0.013321f,
+ 0.014275f, 0.015465f, 0.016510f, 0.017593f, 0.018845f, 0.020401f, 0.022095f, 0.023682f, 0.025513f, 0.027679f, 0.029968f, 0.032593f,
+ 0.035461f, 0.038757f, 0.042175f, 0.046326f, 0.050873f, 0.055939f, 0.061462f, 0.067444f, 0.074402f, 0.082520f, 0.091125f, 0.100830f,
+ 0.111572f, 0.123413f, 0.136719f, 0.150513f, 0.165894f, 0.182251f, 0.200684f, 0.219727f, 0.240234f, 0.261963f, 0.640137f, 0.671387f,
+ 0.679199f, 0.680664f, 0.682617f, 0.683105f, 0.000501f, 0.000919f, 0.001424f, 0.001853f, 0.002266f, 0.002789f, 0.002998f, 0.003397f,
+ 0.003902f, 0.004192f, 0.004417f, 0.004974f, 0.005207f, 0.005676f, 0.006134f, 0.006527f, 0.007179f, 0.007465f, 0.008018f, 0.008537f,
+ 0.009178f, 0.009888f, 0.010544f, 0.011093f, 0.011986f, 0.012794f, 0.013664f, 0.014717f, 0.015747f, 0.016983f, 0.018127f, 0.019470f,
+ 0.021103f, 0.022919f, 0.024826f, 0.026962f, 0.029358f, 0.031769f, 0.035065f, 0.038239f, 0.042297f, 0.046570f, 0.051422f, 0.056671f,
+ 0.062805f, 0.069763f, 0.077698f, 0.086182f, 0.095825f, 0.106812f, 0.119080f, 0.132568f, 0.147217f, 0.162598f, 0.180176f, 0.198730f,
+ 0.218628f, 0.241211f, 0.627441f, 0.660156f, 0.668457f, 0.669922f, 0.672363f, 0.671875f, 0.000235f, 0.001120f, 0.001356f, 0.001651f,
+ 0.002117f, 0.002441f, 0.002678f, 0.002993f, 0.003244f, 0.003519f, 0.003876f, 0.004086f, 0.004505f, 0.004787f, 0.005085f, 0.005604f,
+ 0.005985f, 0.006271f, 0.006783f, 0.007145f, 0.007679f, 0.008217f, 0.008728f, 0.009277f, 0.009956f, 0.010605f, 0.011490f, 0.012062f,
+ 0.013084f, 0.013962f, 0.014984f, 0.016113f, 0.017395f, 0.018829f, 0.020416f, 0.022125f, 0.023972f, 0.025955f, 0.028625f, 0.031616f,
+ 0.034515f, 0.038147f, 0.042114f, 0.046783f, 0.052094f, 0.058075f, 0.065002f, 0.072510f, 0.081604f, 0.091125f, 0.102539f, 0.114807f,
+ 0.128662f, 0.143921f, 0.160034f, 0.178467f, 0.198364f, 0.218750f, 0.613281f, 0.648926f, 0.657227f, 0.659668f, 0.661621f, 0.661621f,
+ 0.000382f, 0.000704f, 0.001099f, 0.001557f, 0.001774f, 0.001976f, 0.002132f, 0.002575f, 0.002634f, 0.002916f, 0.003103f, 0.003494f,
+ 0.003754f, 0.003956f, 0.004269f, 0.004684f, 0.004902f, 0.005234f, 0.005569f, 0.005890f, 0.006416f, 0.006786f, 0.007160f, 0.007645f,
+ 0.008118f, 0.008781f, 0.009346f, 0.010025f, 0.010658f, 0.011475f, 0.012230f, 0.013016f, 0.014122f, 0.015251f, 0.016342f, 0.017807f,
+ 0.019424f, 0.021103f, 0.023026f, 0.025436f, 0.027817f, 0.030914f, 0.034210f, 0.037750f, 0.042450f, 0.047455f, 0.053101f, 0.059998f,
+ 0.067688f, 0.076660f, 0.086670f, 0.097961f, 0.110779f, 0.125366f, 0.140747f, 0.158081f, 0.176880f, 0.197632f, 0.600098f, 0.637207f,
+ 0.644531f, 0.647949f, 0.649414f, 0.651855f, 0.000182f, 0.000738f, 0.000942f, 0.001220f, 0.001469f, 0.001634f, 0.001820f, 0.002005f,
+ 0.002291f, 0.002441f, 0.002636f, 0.002832f, 0.003019f, 0.003242f, 0.003502f, 0.003824f, 0.004017f, 0.004333f, 0.004570f, 0.004883f,
+ 0.005173f, 0.005615f, 0.005909f, 0.006317f, 0.006649f, 0.007160f, 0.007656f, 0.008156f, 0.008583f, 0.009209f, 0.009857f, 0.010696f,
+ 0.011322f, 0.012367f, 0.013229f, 0.014259f, 0.015686f, 0.016815f, 0.018402f, 0.020126f, 0.022095f, 0.024414f, 0.027176f, 0.030273f,
+ 0.033722f, 0.038086f, 0.042969f, 0.048645f, 0.055237f, 0.063171f, 0.071960f, 0.082031f, 0.093994f, 0.107300f, 0.122131f, 0.138550f,
+ 0.156494f, 0.177002f, 0.586426f, 0.625488f, 0.633789f, 0.637207f, 0.638672f, 0.639648f, 0.000199f, 0.000534f, 0.000745f, 0.000995f,
+ 0.001190f, 0.001387f, 0.001516f, 0.001691f, 0.001790f, 0.001941f, 0.002214f, 0.002346f, 0.002449f, 0.002686f, 0.002832f, 0.003042f,
+ 0.003304f, 0.003531f, 0.003662f, 0.003952f, 0.004181f, 0.004517f, 0.004704f, 0.005074f, 0.005352f, 0.005718f, 0.006096f, 0.006481f,
+ 0.006947f, 0.007454f, 0.007988f, 0.008484f, 0.009140f, 0.009804f, 0.010475f, 0.011307f, 0.012299f, 0.013268f, 0.014511f, 0.015823f,
+ 0.017410f, 0.018936f, 0.021225f, 0.023621f, 0.026367f, 0.029770f, 0.033661f, 0.038452f, 0.044067f, 0.050812f, 0.058411f, 0.067444f,
+ 0.077942f, 0.090149f, 0.104187f, 0.119812f, 0.137085f, 0.156372f, 0.572754f, 0.613770f, 0.621582f, 0.625977f, 0.627441f, 0.628906f,
+ 0.000165f, 0.000486f, 0.000618f, 0.000880f, 0.001063f, 0.001140f, 0.001258f, 0.001464f, 0.001498f, 0.001561f, 0.001707f, 0.001899f,
+ 0.001976f, 0.002171f, 0.002285f, 0.002474f, 0.002571f, 0.002764f, 0.002968f, 0.003170f, 0.003389f, 0.003580f, 0.003822f, 0.004036f,
+ 0.004269f, 0.004505f, 0.004738f, 0.005157f, 0.005474f, 0.005821f, 0.006279f, 0.006649f, 0.007107f, 0.007610f, 0.008240f, 0.008835f,
+ 0.009598f, 0.010361f, 0.011276f, 0.012299f, 0.013466f, 0.014740f, 0.016251f, 0.018021f, 0.020294f, 0.022797f, 0.025833f, 0.029739f,
+ 0.034058f, 0.039612f, 0.046021f, 0.053833f, 0.063110f, 0.074158f, 0.086914f, 0.101562f, 0.118164f, 0.136841f, 0.558594f, 0.601074f,
+ 0.608887f, 0.613281f, 0.615234f, 0.617188f, 0.000096f, 0.000348f, 0.000585f, 0.000707f, 0.000837f, 0.000866f, 0.000972f, 0.001095f,
+ 0.001198f, 0.001309f, 0.001355f, 0.001417f, 0.001615f, 0.001740f, 0.001863f, 0.001880f, 0.002048f, 0.002159f, 0.002380f, 0.002487f,
+ 0.002613f, 0.002777f, 0.003000f, 0.003143f, 0.003353f, 0.003521f, 0.003748f, 0.003963f, 0.004265f, 0.004490f, 0.004776f, 0.005093f,
+ 0.005577f, 0.005966f, 0.006321f, 0.006828f, 0.007320f, 0.007904f, 0.008575f, 0.009392f, 0.010231f, 0.011276f, 0.012321f, 0.013832f,
+ 0.015343f, 0.017242f, 0.019501f, 0.022247f, 0.025696f, 0.029922f, 0.035187f, 0.041779f, 0.049683f, 0.059387f, 0.070801f, 0.084106f,
+ 0.100037f, 0.117798f, 0.544434f, 0.588867f, 0.597656f, 0.602539f, 0.604492f, 0.605469f, 0.000123f, 0.000248f, 0.000443f, 0.000625f,
+ 0.000663f, 0.000733f, 0.000843f, 0.000780f, 0.000921f, 0.000986f, 0.001081f, 0.001178f, 0.001254f, 0.001348f, 0.001364f, 0.001515f,
+ 0.001565f, 0.001705f, 0.001824f, 0.001870f, 0.002066f, 0.002155f, 0.002274f, 0.002422f, 0.002525f, 0.002695f, 0.002863f, 0.003038f,
+ 0.003271f, 0.003441f, 0.003736f, 0.003901f, 0.004112f, 0.004478f, 0.004719f, 0.005093f, 0.005482f, 0.005913f, 0.006413f, 0.007019f,
+ 0.007626f, 0.008408f, 0.009201f, 0.010201f, 0.011436f, 0.012749f, 0.014389f, 0.016373f, 0.018906f, 0.022034f, 0.025909f, 0.031082f,
+ 0.037628f, 0.045715f, 0.055939f, 0.068176f, 0.082764f, 0.099365f, 0.529785f, 0.574707f, 0.584961f, 0.589844f, 0.591797f, 0.593750f,
+ 0.000210f, 0.000212f, 0.000365f, 0.000494f, 0.000438f, 0.000597f, 0.000538f, 0.000623f, 0.000638f, 0.000736f, 0.000866f, 0.000882f,
+ 0.000954f, 0.001040f, 0.001070f, 0.001086f, 0.001220f, 0.001274f, 0.001341f, 0.001457f, 0.001513f, 0.001598f, 0.001697f, 0.001781f,
+ 0.001898f, 0.001970f, 0.002131f, 0.002241f, 0.002401f, 0.002645f, 0.002783f, 0.002892f, 0.003120f, 0.003347f, 0.003508f, 0.003757f,
+ 0.004032f, 0.004314f, 0.004688f, 0.005066f, 0.005520f, 0.006012f, 0.006702f, 0.007332f, 0.008171f, 0.009140f, 0.010399f, 0.011787f,
+ 0.013496f, 0.015732f, 0.018509f, 0.022278f, 0.027267f, 0.033813f, 0.042328f, 0.053070f, 0.066406f, 0.082825f, 0.516602f, 0.562500f,
+ 0.573242f, 0.577637f, 0.580078f, 0.581543f, 0.000000f, 0.000216f, 0.000281f, 0.000346f, 0.000374f, 0.000388f, 0.000491f, 0.000416f,
+ 0.000516f, 0.000535f, 0.000635f, 0.000625f, 0.000681f, 0.000719f, 0.000790f, 0.000813f, 0.000879f, 0.000926f, 0.000968f, 0.001004f,
+ 0.001097f, 0.001135f, 0.001229f, 0.001300f, 0.001361f, 0.001431f, 0.001541f, 0.001610f, 0.001711f, 0.001802f, 0.001922f, 0.002094f,
+ 0.002169f, 0.002346f, 0.002468f, 0.002644f, 0.002844f, 0.003094f, 0.003368f, 0.003586f, 0.003883f, 0.004223f, 0.004662f, 0.005093f,
+ 0.005680f, 0.006348f, 0.007206f, 0.008202f, 0.009392f, 0.010895f, 0.012939f, 0.015465f, 0.018906f, 0.023682f, 0.030502f, 0.039825f,
+ 0.051331f, 0.066528f, 0.500977f, 0.548828f, 0.560059f, 0.564453f, 0.567871f, 0.569336f, 0.000000f, 0.000106f, 0.000201f, 0.000252f,
+ 0.000251f, 0.000322f, 0.000281f, 0.000340f, 0.000359f, 0.000428f, 0.000443f, 0.000419f, 0.000444f, 0.000500f, 0.000524f, 0.000590f,
+ 0.000574f, 0.000650f, 0.000693f, 0.000732f, 0.000778f, 0.000821f, 0.000848f, 0.000900f, 0.000965f, 0.000982f, 0.001072f, 0.001109f,
+ 0.001169f, 0.001307f, 0.001301f, 0.001409f, 0.001483f, 0.001610f, 0.001734f, 0.001835f, 0.001940f, 0.002098f, 0.002241f, 0.002426f,
+ 0.002634f, 0.002865f, 0.003136f, 0.003431f, 0.003763f, 0.004211f, 0.004742f, 0.005417f, 0.006229f, 0.007298f, 0.008621f, 0.010330f,
+ 0.012650f, 0.015808f, 0.020569f, 0.027908f, 0.037994f, 0.051514f, 0.485840f, 0.536133f, 0.547363f, 0.551758f, 0.554688f, 0.557617f,
+ 0.000026f, 0.000156f, 0.000201f, 0.000136f, 0.000188f, 0.000187f, 0.000192f, 0.000240f, 0.000245f, 0.000254f, 0.000262f, 0.000311f,
+ 0.000309f, 0.000331f, 0.000374f, 0.000385f, 0.000411f, 0.000431f, 0.000443f, 0.000461f, 0.000507f, 0.000522f, 0.000562f, 0.000596f,
+ 0.000634f, 0.000684f, 0.000718f, 0.000735f, 0.000776f, 0.000815f, 0.000875f, 0.000927f, 0.000982f, 0.001053f, 0.001123f, 0.001162f,
+ 0.001271f, 0.001346f, 0.001473f, 0.001577f, 0.001670f, 0.001838f, 0.002005f, 0.002161f, 0.002405f, 0.002670f, 0.002993f, 0.003399f,
+ 0.003860f, 0.004528f, 0.005386f, 0.006523f, 0.008003f, 0.010063f, 0.013206f, 0.017990f, 0.026031f, 0.038086f, 0.471191f, 0.522949f,
+ 0.534668f, 0.540039f, 0.543457f, 0.544922f, 0.000000f, 0.000093f, 0.000084f, 0.000085f, 0.000124f, 0.000145f, 0.000122f, 0.000149f,
+ 0.000152f, 0.000152f, 0.000158f, 0.000167f, 0.000186f, 0.000209f, 0.000217f, 0.000225f, 0.000231f, 0.000272f, 0.000273f, 0.000301f,
+ 0.000303f, 0.000310f, 0.000338f, 0.000361f, 0.000387f, 0.000423f, 0.000413f, 0.000436f, 0.000478f, 0.000503f, 0.000525f, 0.000570f,
+ 0.000608f, 0.000626f, 0.000677f, 0.000706f, 0.000753f, 0.000813f, 0.000884f, 0.000929f, 0.001000f, 0.001094f, 0.001183f, 0.001302f,
+ 0.001412f, 0.001563f, 0.001769f, 0.001974f, 0.002277f, 0.002626f, 0.003124f, 0.003761f, 0.004665f, 0.005993f, 0.007935f, 0.010818f,
+ 0.016205f, 0.026138f, 0.456299f, 0.509277f, 0.520996f, 0.527344f, 0.530762f, 0.532715f, 0.000105f, 0.000083f, 0.000072f, 0.000065f,
+ 0.000071f, 0.000072f, 0.000077f, 0.000084f, 0.000088f, 0.000093f, 0.000095f, 0.000120f, 0.000100f, 0.000108f, 0.000126f, 0.000118f,
+ 0.000139f, 0.000149f, 0.000153f, 0.000165f, 0.000169f, 0.000172f, 0.000194f, 0.000203f, 0.000233f, 0.000225f, 0.000233f, 0.000253f,
+ 0.000266f, 0.000275f, 0.000299f, 0.000319f, 0.000338f, 0.000345f, 0.000374f, 0.000384f, 0.000415f, 0.000448f, 0.000483f, 0.000511f,
+ 0.000543f, 0.000585f, 0.000647f, 0.000692f, 0.000755f, 0.000827f, 0.000924f, 0.001041f, 0.001186f, 0.001372f, 0.001608f, 0.001953f,
+ 0.002411f, 0.003098f, 0.004238f, 0.005989f, 0.009003f, 0.016006f, 0.441406f, 0.495361f, 0.508301f, 0.514160f, 0.518066f, 0.520508f,
+ 0.000090f, 0.000067f, 0.000058f, 0.000052f, 0.000047f, 0.000044f, 0.000044f, 0.000040f, 0.000042f, 0.000049f, 0.000042f, 0.000045f,
+ 0.000059f, 0.000047f, 0.000050f, 0.000054f, 0.000071f, 0.000073f, 0.000075f, 0.000078f, 0.000079f, 0.000084f, 0.000087f, 0.000090f,
+ 0.000097f, 0.000109f, 0.000108f, 0.000124f, 0.000124f, 0.000131f, 0.000138f, 0.000143f, 0.000155f, 0.000164f, 0.000178f, 0.000182f,
+ 0.000192f, 0.000209f, 0.000225f, 0.000244f, 0.000259f, 0.000274f, 0.000303f, 0.000321f, 0.000357f, 0.000385f, 0.000429f, 0.000470f,
+ 0.000537f, 0.000608f, 0.000710f, 0.000852f, 0.001052f, 0.001371f, 0.001877f, 0.002762f, 0.004406f, 0.008202f, 0.426270f, 0.483154f,
+ 0.495605f, 0.500977f, 0.505371f, 0.507324f, 0.000067f, 0.000047f, 0.000039f, 0.000035f, 0.000032f, 0.000030f, 0.000029f, 0.000027f,
+ 0.000026f, 0.000025f, 0.000024f, 0.000023f, 0.000021f, 0.000020f, 0.000019f, 0.000021f, 0.000020f, 0.000024f, 0.000028f, 0.000030f,
+ 0.000029f, 0.000032f, 0.000035f, 0.000034f, 0.000036f, 0.000044f, 0.000046f, 0.000040f, 0.000048f, 0.000047f, 0.000051f, 0.000053f,
+ 0.000059f, 0.000059f, 0.000064f, 0.000066f, 0.000077f, 0.000079f, 0.000081f, 0.000091f, 0.000094f, 0.000100f, 0.000108f, 0.000119f,
+ 0.000129f, 0.000137f, 0.000148f, 0.000173f, 0.000191f, 0.000210f, 0.000249f, 0.000292f, 0.000357f, 0.000448f, 0.000629f, 0.000943f,
+ 0.001630f, 0.003332f, 0.411377f, 0.468506f, 0.482910f, 0.488770f, 0.492188f, 0.495117f, 0.000025f, 0.000018f, 0.000015f, 0.000013f,
+ 0.000014f, 0.000013f, 0.000012f, 0.000012f, 0.000012f, 0.000012f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000011f,
+ 0.000011f, 0.000010f, 0.000010f, 0.000009f, 0.000009f, 0.000009f, 0.000008f, 0.000008f, 0.000008f, 0.000008f, 0.000008f, 0.000007f,
+ 0.000008f, 0.000010f, 0.000010f, 0.000010f, 0.000012f, 0.000014f, 0.000014f, 0.000014f, 0.000016f, 0.000018f, 0.000019f, 0.000021f,
+ 0.000020f, 0.000023f, 0.000025f, 0.000027f, 0.000027f, 0.000029f, 0.000035f, 0.000033f, 0.000040f, 0.000044f, 0.000052f, 0.000061f,
+ 0.000069f, 0.000087f, 0.000117f, 0.000174f, 0.000319f, 0.000847f, 0.395996f, 0.454834f, 0.468750f, 0.475586f, 0.479004f, 0.481689f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f,
+ 0.000002f, 0.000002f, 0.000002f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f,
+ 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000003f, 0.000004f, 0.000004f, 0.000005f, 0.000009f, 0.000027f, 0.381348f, 0.441406f,
+ 0.455566f, 0.462891f, 0.466309f, 0.468994f,
+ },
+ {
+ 0.016769f, 0.050629f, 0.083740f, 0.116638f, 0.148071f, 0.178955f, 0.208374f, 0.236938f, 0.265137f, 0.291992f, 0.317871f, 0.343994f,
+ 0.368164f, 0.391846f, 0.415527f, 0.437988f, 0.459717f, 0.480469f, 0.501465f, 0.520996f, 0.540527f, 0.559082f, 0.577637f, 0.594727f,
+ 0.612305f, 0.628418f, 0.644531f, 0.661133f, 0.676270f, 0.691406f, 0.705566f, 0.719727f, 0.734375f, 0.747070f, 0.760254f, 0.773438f,
+ 0.786133f, 0.798828f, 0.810059f, 0.821777f, 0.833008f, 0.843262f, 0.854492f, 0.865234f, 0.875488f, 0.885254f, 0.895508f, 0.904297f,
+ 0.913574f, 0.923340f, 0.932617f, 0.940918f, 0.949707f, 0.958008f, 0.966309f, 0.974609f, 0.981934f, 0.990234f, 0.985352f, 0.965332f,
+ 0.950195f, 0.937500f, 0.926270f, 0.915527f, 0.015083f, 0.045929f, 0.075806f, 0.105408f, 0.135254f, 0.163208f, 0.191772f, 0.219238f,
+ 0.245239f, 0.271973f, 0.297363f, 0.321045f, 0.345947f, 0.369141f, 0.391846f, 0.414062f, 0.435791f, 0.456787f, 0.477295f, 0.497314f,
+ 0.516113f, 0.535645f, 0.554199f, 0.571777f, 0.588867f, 0.606445f, 0.623047f, 0.639160f, 0.654785f, 0.669434f, 0.685059f, 0.699219f,
+ 0.713379f, 0.728027f, 0.741211f, 0.754883f, 0.767578f, 0.780273f, 0.792480f, 0.804688f, 0.815918f, 0.826660f, 0.838867f, 0.850098f,
+ 0.859863f, 0.871094f, 0.880859f, 0.891113f, 0.900879f, 0.909180f, 0.919434f, 0.929688f, 0.937500f, 0.946289f, 0.954590f, 0.963379f,
+ 0.971191f, 0.979004f, 0.980469f, 0.961426f, 0.947266f, 0.935059f, 0.924316f, 0.914062f, 0.013573f, 0.040955f, 0.068848f, 0.096313f,
+ 0.123169f, 0.150635f, 0.175537f, 0.202026f, 0.228271f, 0.251709f, 0.276367f, 0.300781f, 0.323730f, 0.347168f, 0.369385f, 0.390625f,
+ 0.412354f, 0.433594f, 0.454346f, 0.473145f, 0.491943f, 0.512207f, 0.529785f, 0.549316f, 0.566406f, 0.583008f, 0.600586f, 0.616211f,
+ 0.633301f, 0.648438f, 0.663574f, 0.679199f, 0.693359f, 0.708008f, 0.721680f, 0.735840f, 0.748535f, 0.762207f, 0.773926f, 0.786621f,
+ 0.798340f, 0.811035f, 0.822754f, 0.833984f, 0.845215f, 0.855957f, 0.865723f, 0.876465f, 0.886719f, 0.895508f, 0.906738f, 0.916016f,
+ 0.925293f, 0.934570f, 0.943848f, 0.952148f, 0.960449f, 0.969238f, 0.976074f, 0.958008f, 0.944336f, 0.932617f, 0.921875f, 0.912109f,
+ 0.012329f, 0.037201f, 0.062164f, 0.087646f, 0.112488f, 0.137451f, 0.161865f, 0.187134f, 0.210938f, 0.234253f, 0.258301f, 0.281006f,
+ 0.303467f, 0.325195f, 0.347656f, 0.368652f, 0.389648f, 0.410400f, 0.430664f, 0.450928f, 0.470215f, 0.488770f, 0.507812f, 0.525391f,
+ 0.543457f, 0.560059f, 0.579102f, 0.593750f, 0.611816f, 0.627441f, 0.643066f, 0.658203f, 0.672363f, 0.687500f, 0.702148f, 0.715820f,
+ 0.729004f, 0.742676f, 0.755371f, 0.768066f, 0.781738f, 0.792969f, 0.805176f, 0.816895f, 0.829102f, 0.839844f, 0.850586f, 0.861816f,
+ 0.872559f, 0.882812f, 0.893066f, 0.902832f, 0.912109f, 0.921875f, 0.930664f, 0.940430f, 0.948242f, 0.958008f, 0.970703f, 0.953613f,
+ 0.940430f, 0.929199f, 0.919434f, 0.910156f, 0.010979f, 0.033752f, 0.056763f, 0.080139f, 0.103516f, 0.126221f, 0.149414f, 0.172485f,
+ 0.195435f, 0.218262f, 0.240356f, 0.261719f, 0.284180f, 0.306396f, 0.326416f, 0.347900f, 0.368408f, 0.389160f, 0.408691f, 0.427979f,
+ 0.447754f, 0.467041f, 0.484863f, 0.502441f, 0.520996f, 0.538086f, 0.555664f, 0.573242f, 0.589355f, 0.604980f, 0.622559f, 0.637207f,
+ 0.652832f, 0.666992f, 0.680664f, 0.695801f, 0.710938f, 0.724121f, 0.737305f, 0.750977f, 0.763672f, 0.776855f, 0.789062f, 0.799805f,
+ 0.812012f, 0.824219f, 0.835449f, 0.846680f, 0.857910f, 0.868164f, 0.878418f, 0.889160f, 0.898926f, 0.909180f, 0.917969f, 0.928223f,
+ 0.937012f, 0.946777f, 0.965820f, 0.949707f, 0.937012f, 0.926270f, 0.916504f, 0.907715f, 0.009941f, 0.030746f, 0.051514f, 0.073181f,
+ 0.094116f, 0.116028f, 0.137817f, 0.158691f, 0.180664f, 0.202637f, 0.223511f, 0.244873f, 0.265869f, 0.285889f, 0.307129f, 0.327881f,
+ 0.347412f, 0.367188f, 0.387207f, 0.405762f, 0.425537f, 0.444092f, 0.462646f, 0.481201f, 0.499756f, 0.516602f, 0.533691f, 0.550781f,
+ 0.567383f, 0.583984f, 0.599609f, 0.616211f, 0.630859f, 0.647461f, 0.661621f, 0.676758f, 0.689453f, 0.704590f, 0.718750f, 0.731934f,
+ 0.745117f, 0.757812f, 0.770996f, 0.783691f, 0.796387f, 0.807617f, 0.819824f, 0.831543f, 0.842773f, 0.854004f, 0.864258f, 0.875488f,
+ 0.885742f, 0.895508f, 0.905762f, 0.915527f, 0.925781f, 0.934570f, 0.960449f, 0.945312f, 0.933594f, 0.922852f, 0.913574f, 0.905273f,
+ 0.009003f, 0.027756f, 0.046997f, 0.066711f, 0.085999f, 0.106506f, 0.127075f, 0.146973f, 0.166992f, 0.187500f, 0.207886f, 0.228149f,
+ 0.248169f, 0.268311f, 0.287842f, 0.307861f, 0.327393f, 0.347656f, 0.365967f, 0.385010f, 0.404541f, 0.422363f, 0.441162f, 0.458740f,
+ 0.477783f, 0.495117f, 0.512207f, 0.529297f, 0.546387f, 0.562012f, 0.578613f, 0.595215f, 0.610840f, 0.625977f, 0.641113f, 0.656738f,
+ 0.670410f, 0.685059f, 0.699707f, 0.714355f, 0.727051f, 0.741699f, 0.752441f, 0.767090f, 0.778809f, 0.791504f, 0.803711f, 0.815430f,
+ 0.827148f, 0.838867f, 0.850098f, 0.860840f, 0.872070f, 0.881836f, 0.893066f, 0.903809f, 0.913574f, 0.923828f, 0.955078f, 0.940918f,
+ 0.929199f, 0.919922f, 0.911133f, 0.902344f, 0.008469f, 0.025375f, 0.043121f, 0.060944f, 0.079468f, 0.097961f, 0.116394f, 0.135620f,
+ 0.154541f, 0.174072f, 0.193115f, 0.212280f, 0.231689f, 0.250732f, 0.270264f, 0.289307f, 0.307861f, 0.327148f, 0.345215f, 0.364990f,
+ 0.382812f, 0.401123f, 0.418945f, 0.437012f, 0.455811f, 0.472900f, 0.490234f, 0.507812f, 0.524414f, 0.541016f, 0.558105f, 0.573242f,
+ 0.590332f, 0.605469f, 0.620117f, 0.636230f, 0.651367f, 0.665039f, 0.679688f, 0.694336f, 0.708496f, 0.722168f, 0.735840f, 0.750000f,
+ 0.762695f, 0.774902f, 0.787598f, 0.798828f, 0.811523f, 0.823730f, 0.834473f, 0.846191f, 0.857910f, 0.868652f, 0.879883f, 0.891113f,
+ 0.900391f, 0.911133f, 0.949219f, 0.937012f, 0.925293f, 0.916016f, 0.907227f, 0.899414f, 0.007618f, 0.023178f, 0.039490f, 0.055542f,
+ 0.072937f, 0.090271f, 0.107605f, 0.125122f, 0.142944f, 0.160889f, 0.178955f, 0.197510f, 0.216553f, 0.234497f, 0.252686f, 0.271240f,
+ 0.289795f, 0.307861f, 0.326172f, 0.344238f, 0.362549f, 0.380859f, 0.398438f, 0.416504f, 0.433838f, 0.452393f, 0.468994f, 0.485840f,
+ 0.502930f, 0.519531f, 0.536133f, 0.553223f, 0.569336f, 0.584473f, 0.599609f, 0.615234f, 0.631348f, 0.646484f, 0.659668f, 0.675293f,
+ 0.689941f, 0.703125f, 0.716797f, 0.730957f, 0.744141f, 0.756836f, 0.771484f, 0.782227f, 0.795898f, 0.807617f, 0.819824f, 0.831543f,
+ 0.843750f, 0.854980f, 0.866211f, 0.877441f, 0.888672f, 0.898438f, 0.943359f, 0.931641f, 0.921387f, 0.912109f, 0.903809f, 0.896484f,
+ 0.007118f, 0.021255f, 0.035889f, 0.051514f, 0.066895f, 0.083191f, 0.098999f, 0.115540f, 0.132324f, 0.149292f, 0.166260f, 0.183716f,
+ 0.200928f, 0.218628f, 0.236084f, 0.253906f, 0.272217f, 0.289795f, 0.307617f, 0.325439f, 0.342529f, 0.360596f, 0.378906f, 0.395996f,
+ 0.413330f, 0.430908f, 0.447510f, 0.465332f, 0.481934f, 0.497803f, 0.514648f, 0.531738f, 0.547852f, 0.562988f, 0.579102f, 0.595215f,
+ 0.610840f, 0.625977f, 0.641113f, 0.655273f, 0.670410f, 0.685059f, 0.698730f, 0.712891f, 0.726074f, 0.739258f, 0.753418f, 0.766113f,
+ 0.779785f, 0.791992f, 0.803711f, 0.816406f, 0.829102f, 0.839844f, 0.852539f, 0.863770f, 0.874512f, 0.886719f, 0.937988f, 0.926758f,
+ 0.917480f, 0.908203f, 0.900391f, 0.893066f, 0.006481f, 0.019775f, 0.032928f, 0.047272f, 0.061371f, 0.076233f, 0.091064f, 0.107117f,
+ 0.122559f, 0.138062f, 0.154663f, 0.170532f, 0.187256f, 0.204346f, 0.220947f, 0.237915f, 0.254883f, 0.272217f, 0.289062f, 0.306641f,
+ 0.323730f, 0.341064f, 0.358643f, 0.375732f, 0.393555f, 0.410645f, 0.426758f, 0.444580f, 0.461182f, 0.477783f, 0.494141f, 0.510254f,
+ 0.526855f, 0.543457f, 0.559082f, 0.574219f, 0.590332f, 0.605957f, 0.621094f, 0.634766f, 0.650879f, 0.665039f, 0.679688f, 0.694824f,
+ 0.708008f, 0.722656f, 0.736816f, 0.749023f, 0.762695f, 0.775391f, 0.788086f, 0.801270f, 0.813965f, 0.826172f, 0.838379f, 0.849121f,
+ 0.861328f, 0.873535f, 0.932129f, 0.921875f, 0.912598f, 0.904297f, 0.896484f, 0.889160f, 0.005924f, 0.017899f, 0.030426f, 0.043427f,
+ 0.056824f, 0.070435f, 0.084106f, 0.098755f, 0.112976f, 0.128052f, 0.143311f, 0.158936f, 0.174072f, 0.189575f, 0.206421f, 0.222534f,
+ 0.238403f, 0.255615f, 0.271729f, 0.288818f, 0.305908f, 0.322021f, 0.339355f, 0.356445f, 0.373291f, 0.390137f, 0.407227f, 0.423584f,
+ 0.440430f, 0.457031f, 0.472900f, 0.489502f, 0.506836f, 0.521973f, 0.538574f, 0.554688f, 0.570312f, 0.585449f, 0.601074f, 0.616211f,
+ 0.631348f, 0.646484f, 0.661621f, 0.675781f, 0.690430f, 0.704590f, 0.717285f, 0.731934f, 0.746094f, 0.759277f, 0.771973f, 0.785156f,
+ 0.798340f, 0.810547f, 0.823242f, 0.835938f, 0.848145f, 0.860352f, 0.925781f, 0.916504f, 0.908203f, 0.900391f, 0.893066f, 0.886719f,
+ 0.005573f, 0.016693f, 0.028366f, 0.040192f, 0.052277f, 0.064880f, 0.078064f, 0.090698f, 0.105042f, 0.118591f, 0.133057f, 0.147461f,
+ 0.162231f, 0.177612f, 0.192383f, 0.207886f, 0.223633f, 0.239502f, 0.255615f, 0.272217f, 0.288330f, 0.304932f, 0.320312f, 0.337646f,
+ 0.354004f, 0.369873f, 0.386719f, 0.403320f, 0.419922f, 0.437012f, 0.453369f, 0.469482f, 0.485596f, 0.501465f, 0.517578f, 0.534180f,
+ 0.549316f, 0.565918f, 0.581055f, 0.595703f, 0.611328f, 0.626953f, 0.641602f, 0.657227f, 0.671387f, 0.686523f, 0.699707f, 0.714355f,
+ 0.729004f, 0.742676f, 0.756348f, 0.769043f, 0.782715f, 0.795410f, 0.809082f, 0.821289f, 0.833984f, 0.846680f, 0.919434f, 0.911133f,
+ 0.903320f, 0.895508f, 0.888672f, 0.882324f, 0.005016f, 0.015396f, 0.026169f, 0.037231f, 0.048126f, 0.059937f, 0.071716f, 0.084167f,
+ 0.096680f, 0.109558f, 0.123169f, 0.136719f, 0.150269f, 0.164917f, 0.179077f, 0.194580f, 0.208984f, 0.223877f, 0.239746f, 0.255127f,
+ 0.270996f, 0.286377f, 0.302490f, 0.319336f, 0.335205f, 0.351318f, 0.367432f, 0.383545f, 0.399902f, 0.415771f, 0.432373f, 0.448975f,
+ 0.465088f, 0.481934f, 0.497314f, 0.513672f, 0.529785f, 0.544434f, 0.561035f, 0.576660f, 0.592285f, 0.607422f, 0.622559f, 0.638184f,
+ 0.652344f, 0.667480f, 0.681641f, 0.696777f, 0.711426f, 0.725586f, 0.738770f, 0.753418f, 0.766602f, 0.779297f, 0.793945f, 0.807129f,
+ 0.819824f, 0.833008f, 0.913086f, 0.906738f, 0.898438f, 0.890625f, 0.884277f, 0.878418f, 0.004738f, 0.014053f, 0.024017f, 0.033752f,
+ 0.044495f, 0.055328f, 0.066467f, 0.078064f, 0.089661f, 0.102051f, 0.114258f, 0.126831f, 0.139771f, 0.153564f, 0.167114f, 0.181030f,
+ 0.195190f, 0.209839f, 0.224731f, 0.239136f, 0.253906f, 0.269531f, 0.285156f, 0.300293f, 0.317139f, 0.332520f, 0.348145f, 0.364990f,
+ 0.380859f, 0.396240f, 0.412109f, 0.428711f, 0.444336f, 0.460938f, 0.477295f, 0.492676f, 0.509277f, 0.524902f, 0.540527f, 0.556641f,
+ 0.572266f, 0.587402f, 0.604004f, 0.618164f, 0.633301f, 0.648438f, 0.664062f, 0.678223f, 0.693359f, 0.708008f, 0.722656f, 0.736328f,
+ 0.750000f, 0.764160f, 0.777832f, 0.791016f, 0.805176f, 0.817871f, 0.907227f, 0.900879f, 0.894043f, 0.886719f, 0.880371f, 0.874512f,
+ 0.004105f, 0.012741f, 0.022491f, 0.031769f, 0.041107f, 0.051208f, 0.061249f, 0.071777f, 0.083069f, 0.093811f, 0.105896f, 0.117554f,
+ 0.129761f, 0.142212f, 0.155273f, 0.168579f, 0.182251f, 0.196167f, 0.210449f, 0.223755f, 0.238525f, 0.253662f, 0.268799f, 0.283447f,
+ 0.298828f, 0.313965f, 0.329834f, 0.344971f, 0.361328f, 0.376953f, 0.393066f, 0.408691f, 0.424561f, 0.441406f, 0.457031f, 0.472656f,
+ 0.488770f, 0.504883f, 0.520996f, 0.536133f, 0.551758f, 0.567871f, 0.583496f, 0.599121f, 0.614258f, 0.629395f, 0.645996f, 0.660156f,
+ 0.675781f, 0.689453f, 0.704102f, 0.719727f, 0.733398f, 0.747559f, 0.761719f, 0.776367f, 0.789062f, 0.803223f, 0.899902f, 0.895020f,
+ 0.888184f, 0.881836f, 0.875488f, 0.870117f, 0.003925f, 0.011978f, 0.020538f, 0.028763f, 0.038269f, 0.047028f, 0.056732f, 0.066223f,
+ 0.076904f, 0.086731f, 0.097900f, 0.109314f, 0.120483f, 0.132324f, 0.144653f, 0.156982f, 0.169678f, 0.183228f, 0.196289f, 0.209961f,
+ 0.223633f, 0.237427f, 0.251953f, 0.266602f, 0.281982f, 0.296875f, 0.312012f, 0.326660f, 0.342041f, 0.357910f, 0.373779f, 0.389404f,
+ 0.404785f, 0.420166f, 0.436768f, 0.452637f, 0.468506f, 0.484863f, 0.500977f, 0.516602f, 0.531738f, 0.546875f, 0.563965f, 0.579102f,
+ 0.595215f, 0.610840f, 0.625977f, 0.641602f, 0.657227f, 0.671387f, 0.687500f, 0.702148f, 0.716309f, 0.731445f, 0.746094f, 0.760742f,
+ 0.774414f, 0.788086f, 0.893066f, 0.889648f, 0.882812f, 0.876953f, 0.870605f, 0.865723f, 0.003704f, 0.011169f, 0.019165f, 0.026550f,
+ 0.035339f, 0.043488f, 0.052277f, 0.061066f, 0.071045f, 0.080933f, 0.090576f, 0.101074f, 0.111877f, 0.122925f, 0.134277f, 0.146118f,
+ 0.157837f, 0.170288f, 0.183105f, 0.195557f, 0.209351f, 0.222900f, 0.236328f, 0.250732f, 0.264893f, 0.279297f, 0.294189f, 0.308838f,
+ 0.323975f, 0.339844f, 0.354736f, 0.370117f, 0.385986f, 0.401367f, 0.416504f, 0.432861f, 0.448486f, 0.463867f, 0.480469f, 0.497070f,
+ 0.511719f, 0.527832f, 0.544434f, 0.559570f, 0.575684f, 0.591797f, 0.606934f, 0.623047f, 0.638184f, 0.654297f, 0.668945f, 0.684570f,
+ 0.699219f, 0.714355f, 0.729492f, 0.744629f, 0.758789f, 0.773926f, 0.886230f, 0.883301f, 0.877441f, 0.871582f, 0.866211f, 0.860840f,
+ 0.003500f, 0.010292f, 0.017395f, 0.024963f, 0.032440f, 0.040344f, 0.048462f, 0.057098f, 0.065063f, 0.074646f, 0.083679f, 0.093445f,
+ 0.103882f, 0.114136f, 0.124451f, 0.135498f, 0.146606f, 0.158447f, 0.170410f, 0.182739f, 0.195435f, 0.208008f, 0.221558f, 0.234863f,
+ 0.248657f, 0.262695f, 0.276855f, 0.291748f, 0.306152f, 0.320801f, 0.335693f, 0.350830f, 0.365967f, 0.382080f, 0.396973f, 0.413330f,
+ 0.429199f, 0.444336f, 0.459473f, 0.476074f, 0.492188f, 0.507812f, 0.524414f, 0.540039f, 0.555664f, 0.571777f, 0.586914f, 0.604004f,
+ 0.619629f, 0.635742f, 0.650391f, 0.666504f, 0.682129f, 0.697754f, 0.712891f, 0.728027f, 0.743164f, 0.758301f, 0.878906f, 0.877441f,
+ 0.871582f, 0.866699f, 0.860840f, 0.856445f, 0.003084f, 0.009697f, 0.016403f, 0.022659f, 0.029892f, 0.037354f, 0.044281f, 0.052338f,
+ 0.060516f, 0.068970f, 0.077515f, 0.086243f, 0.096069f, 0.105713f, 0.115356f, 0.125610f, 0.136353f, 0.147339f, 0.158081f, 0.170410f,
+ 0.181396f, 0.194458f, 0.207275f, 0.219482f, 0.232910f, 0.246704f, 0.260010f, 0.274170f, 0.288330f, 0.302979f, 0.317383f, 0.332764f,
+ 0.347656f, 0.363037f, 0.378174f, 0.392578f, 0.408936f, 0.424316f, 0.440430f, 0.456299f, 0.472656f, 0.488525f, 0.503906f, 0.519531f,
+ 0.535645f, 0.552734f, 0.568359f, 0.584961f, 0.600586f, 0.616699f, 0.633301f, 0.648438f, 0.663574f, 0.679199f, 0.694824f, 0.710938f,
+ 0.726074f, 0.742188f, 0.872559f, 0.870605f, 0.865723f, 0.860840f, 0.855957f, 0.851074f, 0.002913f, 0.008781f, 0.014938f, 0.021759f,
+ 0.027878f, 0.034393f, 0.041412f, 0.048737f, 0.055969f, 0.063599f, 0.072021f, 0.080200f, 0.088928f, 0.097839f, 0.106934f, 0.116150f,
+ 0.126587f, 0.136353f, 0.147095f, 0.157715f, 0.169189f, 0.181519f, 0.193481f, 0.205933f, 0.217773f, 0.231323f, 0.244629f, 0.257812f,
+ 0.271240f, 0.285400f, 0.299561f, 0.314453f, 0.329590f, 0.343506f, 0.358887f, 0.373779f, 0.389648f, 0.405029f, 0.420410f, 0.437012f,
+ 0.452393f, 0.468262f, 0.484375f, 0.500000f, 0.516113f, 0.532227f, 0.548828f, 0.564941f, 0.581055f, 0.597168f, 0.612793f, 0.629883f,
+ 0.645508f, 0.662109f, 0.678223f, 0.694336f, 0.709473f, 0.726074f, 0.863770f, 0.864258f, 0.859863f, 0.854980f, 0.850586f, 0.846191f,
+ 0.002815f, 0.008194f, 0.013954f, 0.019653f, 0.025696f, 0.031982f, 0.038177f, 0.044830f, 0.051819f, 0.058502f, 0.066162f, 0.073792f,
+ 0.082031f, 0.090393f, 0.098999f, 0.107605f, 0.117493f, 0.126709f, 0.137207f, 0.146729f, 0.157593f, 0.168579f, 0.179810f, 0.191772f,
+ 0.203369f, 0.215820f, 0.228882f, 0.241455f, 0.254395f, 0.268311f, 0.282227f, 0.296631f, 0.310303f, 0.325439f, 0.339844f, 0.354736f,
+ 0.370361f, 0.385742f, 0.400879f, 0.416504f, 0.432617f, 0.448486f, 0.464355f, 0.479980f, 0.496094f, 0.513184f, 0.528809f, 0.545410f,
+ 0.561035f, 0.578613f, 0.594727f, 0.611328f, 0.626953f, 0.643555f, 0.660156f, 0.676270f, 0.693359f, 0.709473f, 0.856445f, 0.858398f,
+ 0.854492f, 0.849121f, 0.845215f, 0.841309f, 0.002583f, 0.007492f, 0.012878f, 0.018417f, 0.023941f, 0.029495f, 0.035339f, 0.041779f,
+ 0.047577f, 0.054047f, 0.061523f, 0.068787f, 0.075562f, 0.083313f, 0.091858f, 0.099792f, 0.108521f, 0.117615f, 0.126709f, 0.136108f,
+ 0.146851f, 0.156860f, 0.166992f, 0.178345f, 0.189819f, 0.202148f, 0.213623f, 0.225830f, 0.238892f, 0.252197f, 0.265137f, 0.278809f,
+ 0.292480f, 0.306885f, 0.321045f, 0.336914f, 0.350830f, 0.366943f, 0.381348f, 0.396240f, 0.412354f, 0.428223f, 0.444336f, 0.460449f,
+ 0.476318f, 0.493408f, 0.509277f, 0.525879f, 0.542480f, 0.559082f, 0.574707f, 0.591797f, 0.608398f, 0.625488f, 0.642090f, 0.659180f,
+ 0.675781f, 0.691406f, 0.848145f, 0.851562f, 0.848145f, 0.843750f, 0.838867f, 0.835449f, 0.002512f, 0.007374f, 0.012115f, 0.016983f,
+ 0.022064f, 0.027359f, 0.032715f, 0.038147f, 0.044373f, 0.050354f, 0.056641f, 0.063293f, 0.070190f, 0.077026f, 0.084717f, 0.092041f,
+ 0.100342f, 0.108398f, 0.117554f, 0.126221f, 0.135742f, 0.145142f, 0.155151f, 0.165771f, 0.176758f, 0.187988f, 0.199341f, 0.210815f,
+ 0.223389f, 0.236206f, 0.249023f, 0.261719f, 0.275879f, 0.289062f, 0.303467f, 0.317627f, 0.332520f, 0.347412f, 0.361816f, 0.377197f,
+ 0.393066f, 0.407959f, 0.424072f, 0.440186f, 0.457031f, 0.473145f, 0.489502f, 0.505859f, 0.522461f, 0.540039f, 0.555664f, 0.572754f,
+ 0.589844f, 0.606445f, 0.623535f, 0.640625f, 0.658203f, 0.675781f, 0.840820f, 0.843750f, 0.841309f, 0.836914f, 0.833984f, 0.830566f,
+ 0.002369f, 0.006668f, 0.011093f, 0.015778f, 0.020523f, 0.025223f, 0.030701f, 0.035339f, 0.040710f, 0.046600f, 0.051971f, 0.058075f,
+ 0.064819f, 0.071228f, 0.077942f, 0.085205f, 0.092224f, 0.100464f, 0.108398f, 0.116882f, 0.125610f, 0.134155f, 0.143555f, 0.153564f,
+ 0.164062f, 0.174316f, 0.185303f, 0.196899f, 0.208496f, 0.220093f, 0.232666f, 0.245239f, 0.258057f, 0.271729f, 0.285645f, 0.299561f,
+ 0.313721f, 0.328613f, 0.342773f, 0.358154f, 0.373535f, 0.388916f, 0.405518f, 0.419922f, 0.437012f, 0.453125f, 0.469238f, 0.486328f,
+ 0.502930f, 0.519531f, 0.536133f, 0.553223f, 0.571289f, 0.588379f, 0.605469f, 0.623047f, 0.640137f, 0.656250f, 0.833008f, 0.837402f,
+ 0.834473f, 0.831055f, 0.827637f, 0.824219f, 0.002188f, 0.006027f, 0.010582f, 0.014297f, 0.018921f, 0.023270f, 0.028183f, 0.032593f,
+ 0.037781f, 0.042999f, 0.048584f, 0.053650f, 0.059601f, 0.065369f, 0.071899f, 0.078369f, 0.085449f, 0.092407f, 0.099609f, 0.107788f,
+ 0.115601f, 0.124451f, 0.133301f, 0.142212f, 0.151978f, 0.161865f, 0.172363f, 0.182617f, 0.193970f, 0.205566f, 0.217407f, 0.229858f,
+ 0.241943f, 0.254639f, 0.268311f, 0.281494f, 0.295654f, 0.310059f, 0.324219f, 0.339600f, 0.353760f, 0.369629f, 0.385010f, 0.400879f,
+ 0.417725f, 0.433594f, 0.449219f, 0.465820f, 0.482910f, 0.499512f, 0.517090f, 0.534180f, 0.551270f, 0.568848f, 0.586426f, 0.604004f,
+ 0.622559f, 0.639160f, 0.824219f, 0.830078f, 0.827637f, 0.824707f, 0.821777f, 0.818359f, 0.002098f, 0.005634f, 0.009354f, 0.013557f,
+ 0.017685f, 0.021576f, 0.025604f, 0.030380f, 0.034943f, 0.039429f, 0.044281f, 0.049255f, 0.055023f, 0.060577f, 0.066101f, 0.072144f,
+ 0.078491f, 0.085083f, 0.091858f, 0.098999f, 0.106873f, 0.114502f, 0.122498f, 0.131592f, 0.140137f, 0.149536f, 0.159424f, 0.169556f,
+ 0.180054f, 0.191162f, 0.202026f, 0.213989f, 0.226318f, 0.239136f, 0.250977f, 0.264648f, 0.278320f, 0.291748f, 0.305908f, 0.320557f,
+ 0.334961f, 0.350342f, 0.365479f, 0.381592f, 0.397461f, 0.413818f, 0.429199f, 0.446289f, 0.462891f, 0.479736f, 0.496338f, 0.514160f,
+ 0.530762f, 0.548828f, 0.566406f, 0.584473f, 0.602539f, 0.621582f, 0.815918f, 0.823730f, 0.821289f, 0.817871f, 0.815430f, 0.812500f,
+ 0.001772f, 0.005249f, 0.008995f, 0.012260f, 0.016251f, 0.020020f, 0.024216f, 0.027603f, 0.032196f, 0.036377f, 0.041199f, 0.045410f,
+ 0.050110f, 0.055603f, 0.061005f, 0.066406f, 0.072327f, 0.077820f, 0.084290f, 0.090942f, 0.098083f, 0.105164f, 0.113037f, 0.120789f,
+ 0.129272f, 0.138062f, 0.147339f, 0.156982f, 0.166626f, 0.176758f, 0.187866f, 0.199097f, 0.210449f, 0.222412f, 0.234985f, 0.247559f,
+ 0.260742f, 0.273682f, 0.287598f, 0.302002f, 0.316650f, 0.331299f, 0.346191f, 0.362061f, 0.377686f, 0.393066f, 0.409668f, 0.426514f,
+ 0.443115f, 0.459717f, 0.476807f, 0.494629f, 0.511230f, 0.529785f, 0.547852f, 0.565430f, 0.583984f, 0.602539f, 0.806152f, 0.814453f,
+ 0.813965f, 0.811035f, 0.809082f, 0.806641f, 0.001631f, 0.005131f, 0.008186f, 0.011673f, 0.014938f, 0.018463f, 0.021957f, 0.025635f,
+ 0.029083f, 0.033325f, 0.037445f, 0.041840f, 0.046478f, 0.050751f, 0.055634f, 0.060760f, 0.065979f, 0.071472f, 0.077515f, 0.083801f,
+ 0.090027f, 0.096802f, 0.104065f, 0.110840f, 0.119080f, 0.127197f, 0.135498f, 0.144775f, 0.153931f, 0.163574f, 0.173462f, 0.184570f,
+ 0.195312f, 0.207153f, 0.218506f, 0.230591f, 0.243652f, 0.256348f, 0.270020f, 0.283691f, 0.297852f, 0.312744f, 0.326904f, 0.342529f,
+ 0.357910f, 0.373535f, 0.389404f, 0.406494f, 0.421875f, 0.439941f, 0.457275f, 0.474365f, 0.492432f, 0.509766f, 0.527832f, 0.546875f,
+ 0.564941f, 0.584473f, 0.797852f, 0.807129f, 0.807129f, 0.804199f, 0.801758f, 0.799316f, 0.001632f, 0.004704f, 0.007912f, 0.010788f,
+ 0.013870f, 0.017105f, 0.020187f, 0.023483f, 0.026932f, 0.030563f, 0.034332f, 0.038086f, 0.042694f, 0.046631f, 0.050995f, 0.055725f,
+ 0.060486f, 0.065674f, 0.070862f, 0.076721f, 0.082825f, 0.088623f, 0.094910f, 0.102112f, 0.109070f, 0.116516f, 0.124695f, 0.133057f,
+ 0.141968f, 0.151001f, 0.160522f, 0.170776f, 0.181030f, 0.191650f, 0.202881f, 0.214722f, 0.227417f, 0.239624f, 0.252686f, 0.265625f,
+ 0.279785f, 0.293213f, 0.308350f, 0.323242f, 0.338867f, 0.354248f, 0.370117f, 0.386475f, 0.403076f, 0.420410f, 0.437012f, 0.454102f,
+ 0.471924f, 0.490234f, 0.508789f, 0.526855f, 0.545410f, 0.564453f, 0.788086f, 0.799316f, 0.798828f, 0.797852f, 0.794434f, 0.791992f,
+ 0.001594f, 0.004177f, 0.007122f, 0.010201f, 0.012344f, 0.015839f, 0.018372f, 0.021683f, 0.024857f, 0.028534f, 0.031464f, 0.035034f,
+ 0.038879f, 0.042572f, 0.046295f, 0.051056f, 0.055389f, 0.059723f, 0.064697f, 0.069763f, 0.075073f, 0.080750f, 0.087219f, 0.093445f,
+ 0.099548f, 0.107056f, 0.114136f, 0.121887f, 0.130249f, 0.138794f, 0.147217f, 0.157104f, 0.166748f, 0.177124f, 0.187988f, 0.199097f,
+ 0.210693f, 0.222778f, 0.235352f, 0.248169f, 0.261719f, 0.275635f, 0.289062f, 0.303955f, 0.319336f, 0.334717f, 0.350098f, 0.365479f,
+ 0.382324f, 0.398926f, 0.416016f, 0.433594f, 0.451904f, 0.469238f, 0.487549f, 0.506348f, 0.525391f, 0.544922f, 0.779297f, 0.791504f,
+ 0.791504f, 0.789551f, 0.788086f, 0.786133f, 0.001365f, 0.004173f, 0.006222f, 0.008842f, 0.011703f, 0.014366f, 0.017242f, 0.020218f,
+ 0.022903f, 0.025787f, 0.028824f, 0.032227f, 0.035522f, 0.038818f, 0.042511f, 0.046326f, 0.050507f, 0.054657f, 0.058594f, 0.063660f,
+ 0.068359f, 0.073914f, 0.078918f, 0.085083f, 0.091125f, 0.097534f, 0.104126f, 0.111511f, 0.118896f, 0.126831f, 0.135742f, 0.144043f,
+ 0.153564f, 0.163330f, 0.173462f, 0.184082f, 0.195068f, 0.206787f, 0.218628f, 0.231079f, 0.243896f, 0.257080f, 0.270996f, 0.285645f,
+ 0.300049f, 0.314941f, 0.330322f, 0.346191f, 0.362305f, 0.379395f, 0.395508f, 0.412842f, 0.431641f, 0.448975f, 0.468262f, 0.487549f,
+ 0.505371f, 0.525391f, 0.769531f, 0.783691f, 0.783691f, 0.782715f, 0.781250f, 0.778809f, 0.001230f, 0.003925f, 0.006268f, 0.008659f,
+ 0.010796f, 0.013145f, 0.015617f, 0.018234f, 0.021133f, 0.023682f, 0.026215f, 0.029251f, 0.032349f, 0.035400f, 0.038696f, 0.042206f,
+ 0.045807f, 0.049377f, 0.053925f, 0.057953f, 0.062500f, 0.067078f, 0.071777f, 0.077271f, 0.082703f, 0.088806f, 0.094910f, 0.101379f,
+ 0.109192f, 0.115967f, 0.123779f, 0.131470f, 0.140259f, 0.149536f, 0.159302f, 0.169312f, 0.180054f, 0.190674f, 0.202515f, 0.214722f,
+ 0.226562f, 0.239624f, 0.253174f, 0.266602f, 0.281738f, 0.295898f, 0.311035f, 0.326904f, 0.342529f, 0.359131f, 0.375732f, 0.393066f,
+ 0.410400f, 0.428467f, 0.447510f, 0.466064f, 0.485596f, 0.504883f, 0.759277f, 0.774902f, 0.775879f, 0.774902f, 0.773438f, 0.771973f,
+ 0.001031f, 0.003601f, 0.005604f, 0.007858f, 0.009880f, 0.012146f, 0.014549f, 0.016998f, 0.019043f, 0.021362f, 0.024475f, 0.026566f,
+ 0.029358f, 0.032196f, 0.035248f, 0.038391f, 0.041656f, 0.045044f, 0.048553f, 0.052582f, 0.056213f, 0.060669f, 0.065186f, 0.070068f,
+ 0.074768f, 0.080322f, 0.086060f, 0.092102f, 0.098877f, 0.105408f, 0.112366f, 0.120239f, 0.128540f, 0.136597f, 0.145874f, 0.155396f,
+ 0.165283f, 0.175537f, 0.186401f, 0.198120f, 0.210083f, 0.222534f, 0.235229f, 0.248657f, 0.262451f, 0.277344f, 0.291504f, 0.307617f,
+ 0.322998f, 0.339111f, 0.354980f, 0.372559f, 0.390625f, 0.408936f, 0.426758f, 0.445312f, 0.466064f, 0.485840f, 0.749512f, 0.765137f,
+ 0.767578f, 0.767090f, 0.765137f, 0.764648f, 0.001161f, 0.003078f, 0.005310f, 0.007282f, 0.009201f, 0.011330f, 0.013214f, 0.015404f,
+ 0.017273f, 0.019409f, 0.021988f, 0.024078f, 0.026550f, 0.029358f, 0.032043f, 0.034454f, 0.037415f, 0.040710f, 0.043854f, 0.047272f,
+ 0.050659f, 0.054840f, 0.058777f, 0.063293f, 0.067566f, 0.072449f, 0.077759f, 0.083069f, 0.088928f, 0.095886f, 0.102478f, 0.109070f,
+ 0.116760f, 0.124390f, 0.132935f, 0.141479f, 0.151123f, 0.161011f, 0.171143f, 0.182007f, 0.193726f, 0.205688f, 0.218018f, 0.230835f,
+ 0.244507f, 0.258789f, 0.272949f, 0.287109f, 0.303467f, 0.319336f, 0.335449f, 0.352539f, 0.369873f, 0.387939f, 0.406250f, 0.425049f,
+ 0.444824f, 0.464844f, 0.739258f, 0.756348f, 0.758789f, 0.758789f, 0.757324f, 0.756836f, 0.001004f, 0.002939f, 0.005005f, 0.006779f,
+ 0.008453f, 0.010323f, 0.012177f, 0.013870f, 0.016052f, 0.018051f, 0.019638f, 0.022141f, 0.023956f, 0.026413f, 0.028870f, 0.031281f,
+ 0.033661f, 0.036591f, 0.039429f, 0.042542f, 0.045776f, 0.049011f, 0.053009f, 0.056885f, 0.061035f, 0.065186f, 0.069885f, 0.075134f,
+ 0.080505f, 0.085999f, 0.091858f, 0.098633f, 0.105591f, 0.112732f, 0.120667f, 0.128662f, 0.137573f, 0.146729f, 0.156372f, 0.166748f,
+ 0.177490f, 0.189331f, 0.201294f, 0.213501f, 0.226807f, 0.239746f, 0.254150f, 0.268555f, 0.283936f, 0.298828f, 0.316162f, 0.332275f,
+ 0.349609f, 0.367432f, 0.385498f, 0.404053f, 0.423828f, 0.443848f, 0.728516f, 0.747559f, 0.750488f, 0.750488f, 0.749512f, 0.748047f,
+ 0.000970f, 0.002523f, 0.004665f, 0.006203f, 0.007759f, 0.009491f, 0.011070f, 0.012802f, 0.014336f, 0.016266f, 0.017944f, 0.019852f,
+ 0.021805f, 0.023911f, 0.025818f, 0.028137f, 0.030579f, 0.032837f, 0.035248f, 0.038055f, 0.041046f, 0.044189f, 0.047333f, 0.050842f,
+ 0.054504f, 0.058502f, 0.062866f, 0.067383f, 0.071960f, 0.077393f, 0.082642f, 0.088928f, 0.095093f, 0.101685f, 0.108765f, 0.116272f,
+ 0.124451f, 0.133423f, 0.142212f, 0.152100f, 0.162354f, 0.172729f, 0.184692f, 0.196411f, 0.209106f, 0.221802f, 0.235718f, 0.250000f,
+ 0.265137f, 0.280029f, 0.296143f, 0.312012f, 0.329346f, 0.346924f, 0.364990f, 0.384277f, 0.403564f, 0.423340f, 0.718262f, 0.738770f,
+ 0.741211f, 0.742188f, 0.741211f, 0.740234f, 0.000785f, 0.002600f, 0.004028f, 0.005390f, 0.007275f, 0.008774f, 0.010124f, 0.011620f,
+ 0.013306f, 0.014427f, 0.015991f, 0.017838f, 0.019577f, 0.021469f, 0.023254f, 0.024902f, 0.027115f, 0.029190f, 0.031677f, 0.034088f,
+ 0.036682f, 0.039307f, 0.042175f, 0.045410f, 0.048553f, 0.052002f, 0.055908f, 0.060028f, 0.064270f, 0.068909f, 0.074097f, 0.079163f,
+ 0.085022f, 0.091309f, 0.097473f, 0.104797f, 0.112183f, 0.120239f, 0.128662f, 0.137451f, 0.146973f, 0.157471f, 0.168213f, 0.179810f,
+ 0.191650f, 0.204468f, 0.217529f, 0.231201f, 0.245605f, 0.260254f, 0.275879f, 0.292236f, 0.308838f, 0.326416f, 0.344238f, 0.363037f,
+ 0.382080f, 0.403076f, 0.707031f, 0.729980f, 0.732422f, 0.733398f, 0.733398f, 0.732910f, 0.000775f, 0.002190f, 0.003696f, 0.005081f,
+ 0.006397f, 0.007858f, 0.009239f, 0.010323f, 0.011803f, 0.012978f, 0.014328f, 0.015915f, 0.017349f, 0.019058f, 0.020630f, 0.022339f,
+ 0.024445f, 0.025909f, 0.028275f, 0.030151f, 0.032532f, 0.035065f, 0.037476f, 0.040283f, 0.042969f, 0.046448f, 0.049469f, 0.053314f,
+ 0.056976f, 0.061371f, 0.065613f, 0.070435f, 0.075623f, 0.081360f, 0.087341f, 0.093628f, 0.100220f, 0.107788f, 0.115845f, 0.123901f,
+ 0.133057f, 0.142456f, 0.152832f, 0.163574f, 0.174561f, 0.187012f, 0.199463f, 0.212646f, 0.226562f, 0.241455f, 0.256836f, 0.272705f,
+ 0.288818f, 0.305664f, 0.323486f, 0.341797f, 0.362305f, 0.382080f, 0.695312f, 0.719238f, 0.722656f, 0.724121f, 0.724121f, 0.723633f,
+ 0.000906f, 0.002022f, 0.003521f, 0.004963f, 0.005756f, 0.006847f, 0.008446f, 0.009392f, 0.010437f, 0.012039f, 0.012863f, 0.014343f,
+ 0.015457f, 0.016876f, 0.018295f, 0.019730f, 0.021484f, 0.023102f, 0.024689f, 0.026581f, 0.028717f, 0.030945f, 0.032928f, 0.035370f,
+ 0.037872f, 0.040894f, 0.043915f, 0.047028f, 0.050415f, 0.054169f, 0.058167f, 0.062286f, 0.067078f, 0.071960f, 0.077209f, 0.082947f,
+ 0.089417f, 0.096008f, 0.103271f, 0.110718f, 0.119324f, 0.128052f, 0.137817f, 0.147705f, 0.158691f, 0.169922f, 0.181519f, 0.195435f,
+ 0.208496f, 0.222534f, 0.237305f, 0.252441f, 0.268799f, 0.285645f, 0.302979f, 0.322266f, 0.340332f, 0.360840f, 0.683594f, 0.708984f,
+ 0.714355f, 0.715332f, 0.715820f, 0.715332f, 0.000700f, 0.002043f, 0.003139f, 0.004219f, 0.005417f, 0.006477f, 0.007442f, 0.008415f,
+ 0.009499f, 0.010475f, 0.011497f, 0.012619f, 0.013824f, 0.014969f, 0.016190f, 0.017639f, 0.018799f, 0.020386f, 0.021896f, 0.023560f,
+ 0.025131f, 0.027176f, 0.028900f, 0.031067f, 0.033295f, 0.035919f, 0.038239f, 0.041229f, 0.044373f, 0.047394f, 0.050934f, 0.054871f,
+ 0.058838f, 0.063293f, 0.068115f, 0.073303f, 0.078857f, 0.084839f, 0.091309f, 0.098328f, 0.106079f, 0.114136f, 0.123230f, 0.132690f,
+ 0.143066f, 0.153442f, 0.165161f, 0.177368f, 0.190186f, 0.203979f, 0.218262f, 0.232910f, 0.248901f, 0.265381f, 0.282227f, 0.301025f,
+ 0.319580f, 0.339355f, 0.672852f, 0.699707f, 0.704590f, 0.706055f, 0.706543f, 0.706055f, 0.000762f, 0.001804f, 0.002762f, 0.003914f,
+ 0.004791f, 0.005764f, 0.006542f, 0.007622f, 0.008606f, 0.009232f, 0.010178f, 0.011093f, 0.012108f, 0.013191f, 0.014412f, 0.015289f,
+ 0.016510f, 0.017731f, 0.019119f, 0.020615f, 0.022049f, 0.023483f, 0.025345f, 0.027100f, 0.028885f, 0.031067f, 0.033417f, 0.035797f,
+ 0.038422f, 0.041382f, 0.044495f, 0.047638f, 0.051178f, 0.055267f, 0.059387f, 0.064026f, 0.069092f, 0.074585f, 0.080566f, 0.087097f,
+ 0.093811f, 0.101624f, 0.109619f, 0.117798f, 0.127319f, 0.137817f, 0.148682f, 0.160278f, 0.172607f, 0.185669f, 0.199097f, 0.214233f,
+ 0.229492f, 0.245850f, 0.261963f, 0.280273f, 0.299316f, 0.319580f, 0.660645f, 0.689453f, 0.694824f, 0.696777f, 0.697266f, 0.697266f,
+ 0.000499f, 0.001527f, 0.002565f, 0.003622f, 0.004429f, 0.005138f, 0.005955f, 0.006691f, 0.007317f, 0.008156f, 0.008949f, 0.009903f,
+ 0.010635f, 0.011452f, 0.012512f, 0.013451f, 0.014503f, 0.015610f, 0.016632f, 0.017746f, 0.019073f, 0.020355f, 0.021957f, 0.023453f,
+ 0.025208f, 0.026932f, 0.028732f, 0.030945f, 0.033142f, 0.035614f, 0.038300f, 0.041199f, 0.044464f, 0.047760f, 0.051514f, 0.055573f,
+ 0.059998f, 0.064819f, 0.070312f, 0.075867f, 0.082275f, 0.088806f, 0.096436f, 0.104797f, 0.113342f, 0.122559f, 0.132568f, 0.143799f,
+ 0.155396f, 0.167725f, 0.181274f, 0.195068f, 0.209961f, 0.225708f, 0.242310f, 0.259766f, 0.277832f, 0.297363f, 0.648926f, 0.678711f,
+ 0.685059f, 0.687500f, 0.687500f, 0.687988f, 0.000653f, 0.001627f, 0.002562f, 0.003166f, 0.003872f, 0.004562f, 0.005287f, 0.005905f,
+ 0.006557f, 0.007309f, 0.007835f, 0.008621f, 0.009140f, 0.010109f, 0.010773f, 0.011627f, 0.012428f, 0.013351f, 0.014488f, 0.015472f,
+ 0.016479f, 0.017578f, 0.018845f, 0.020157f, 0.021591f, 0.023132f, 0.024765f, 0.026337f, 0.028473f, 0.030594f, 0.032867f, 0.035309f,
+ 0.037933f, 0.041107f, 0.044403f, 0.047852f, 0.051666f, 0.055756f, 0.060455f, 0.065552f, 0.070740f, 0.077454f, 0.083862f, 0.091125f,
+ 0.099304f, 0.107971f, 0.117859f, 0.127808f, 0.139038f, 0.150757f, 0.163574f, 0.176880f, 0.191162f, 0.206665f, 0.222656f, 0.239258f,
+ 0.257568f, 0.277100f, 0.636230f, 0.667969f, 0.675293f, 0.677734f, 0.678223f, 0.678711f, 0.000393f, 0.001375f, 0.002174f, 0.002773f,
+ 0.003334f, 0.004070f, 0.004692f, 0.005047f, 0.005672f, 0.006298f, 0.006893f, 0.007454f, 0.007957f, 0.008636f, 0.009171f, 0.010002f,
+ 0.010674f, 0.011574f, 0.012451f, 0.013145f, 0.014091f, 0.014893f, 0.016083f, 0.017151f, 0.018402f, 0.019714f, 0.021042f, 0.022415f,
+ 0.024155f, 0.026108f, 0.027786f, 0.030212f, 0.032379f, 0.034698f, 0.037415f, 0.040436f, 0.043793f, 0.047455f, 0.051727f, 0.056030f,
+ 0.061218f, 0.066284f, 0.072571f, 0.079041f, 0.086121f, 0.094299f, 0.102844f, 0.112305f, 0.122925f, 0.134033f, 0.145752f, 0.158569f,
+ 0.172729f, 0.187378f, 0.203003f, 0.219238f, 0.237671f, 0.255859f, 0.624023f, 0.657227f, 0.664062f, 0.666992f, 0.668457f, 0.668457f,
+ 0.000379f, 0.001404f, 0.001893f, 0.002403f, 0.002840f, 0.003458f, 0.004021f, 0.004459f, 0.004894f, 0.005527f, 0.005844f, 0.006256f,
+ 0.006866f, 0.007423f, 0.007957f, 0.008476f, 0.009155f, 0.009735f, 0.010422f, 0.011078f, 0.011925f, 0.012787f, 0.013458f, 0.014526f,
+ 0.015541f, 0.016632f, 0.017838f, 0.019028f, 0.020248f, 0.021851f, 0.023514f, 0.024979f, 0.027054f, 0.029236f, 0.031555f, 0.034180f,
+ 0.036713f, 0.040375f, 0.043854f, 0.047607f, 0.051727f, 0.056549f, 0.061768f, 0.067627f, 0.073792f, 0.081116f, 0.089111f, 0.097595f,
+ 0.107056f, 0.117371f, 0.128906f, 0.141113f, 0.154053f, 0.168579f, 0.183960f, 0.199585f, 0.216309f, 0.235352f, 0.612793f, 0.647949f,
+ 0.652832f, 0.656250f, 0.658691f, 0.658203f, 0.000506f, 0.001164f, 0.001575f, 0.002136f, 0.002600f, 0.003054f, 0.003405f, 0.003735f,
+ 0.004364f, 0.004681f, 0.004944f, 0.005569f, 0.005810f, 0.006187f, 0.006813f, 0.007233f, 0.007881f, 0.008217f, 0.008850f, 0.009293f,
+ 0.010109f, 0.010788f, 0.011543f, 0.012161f, 0.012993f, 0.013931f, 0.014809f, 0.015945f, 0.016983f, 0.018234f, 0.019440f, 0.020813f,
+ 0.022491f, 0.024261f, 0.026169f, 0.028458f, 0.030701f, 0.033295f, 0.036560f, 0.039520f, 0.043121f, 0.047333f, 0.052032f, 0.056885f,
+ 0.062561f, 0.068909f, 0.076111f, 0.083496f, 0.092407f, 0.101929f, 0.112671f, 0.124451f, 0.136719f, 0.150146f, 0.165039f, 0.180786f,
+ 0.197510f, 0.215210f, 0.597656f, 0.636230f, 0.642578f, 0.647461f, 0.647949f, 0.649902f, 0.000344f, 0.001057f, 0.001456f, 0.001907f,
+ 0.002377f, 0.002735f, 0.002983f, 0.003359f, 0.003651f, 0.003960f, 0.004311f, 0.004471f, 0.005009f, 0.005283f, 0.005653f, 0.006145f,
+ 0.006592f, 0.006889f, 0.007469f, 0.007889f, 0.008423f, 0.008911f, 0.009567f, 0.010124f, 0.010788f, 0.011574f, 0.012466f, 0.013123f,
+ 0.014053f, 0.015091f, 0.016159f, 0.017288f, 0.018539f, 0.020111f, 0.021698f, 0.023285f, 0.025024f, 0.027405f, 0.029800f, 0.032501f,
+ 0.035583f, 0.039001f, 0.042908f, 0.047302f, 0.052185f, 0.057465f, 0.063843f, 0.070984f, 0.078857f, 0.087463f, 0.097168f, 0.108215f,
+ 0.120117f, 0.132812f, 0.146851f, 0.161865f, 0.177856f, 0.195557f, 0.585449f, 0.624023f, 0.633301f, 0.636230f, 0.637695f, 0.638672f,
+ 0.000516f, 0.000847f, 0.001210f, 0.001663f, 0.002012f, 0.002218f, 0.002424f, 0.002861f, 0.002947f, 0.003275f, 0.003469f, 0.003819f,
+ 0.004169f, 0.004337f, 0.004658f, 0.005169f, 0.005424f, 0.005795f, 0.006138f, 0.006500f, 0.007057f, 0.007458f, 0.007874f, 0.008369f,
+ 0.008888f, 0.009583f, 0.010147f, 0.010864f, 0.011589f, 0.012428f, 0.013161f, 0.013931f, 0.015076f, 0.016266f, 0.017456f, 0.018845f,
+ 0.020432f, 0.022232f, 0.024094f, 0.026459f, 0.028809f, 0.031586f, 0.034973f, 0.038513f, 0.042755f, 0.047485f, 0.052643f, 0.058929f,
+ 0.065796f, 0.073792f, 0.082581f, 0.092407f, 0.103516f, 0.115723f, 0.128906f, 0.142944f, 0.158813f, 0.175781f, 0.572266f, 0.613770f,
+ 0.621094f, 0.625977f, 0.626953f, 0.628418f, 0.000262f, 0.000864f, 0.001096f, 0.001409f, 0.001576f, 0.001852f, 0.002047f, 0.002247f,
+ 0.002518f, 0.002741f, 0.002956f, 0.003157f, 0.003359f, 0.003597f, 0.003872f, 0.004230f, 0.004406f, 0.004772f, 0.005035f, 0.005379f,
+ 0.005695f, 0.006153f, 0.006485f, 0.006935f, 0.007275f, 0.007801f, 0.008301f, 0.008789f, 0.009300f, 0.009949f, 0.010727f, 0.011482f,
+ 0.012245f, 0.013145f, 0.014236f, 0.015236f, 0.016525f, 0.017838f, 0.019348f, 0.021088f, 0.023010f, 0.025253f, 0.027878f, 0.031128f,
+ 0.034149f, 0.038269f, 0.042694f, 0.047852f, 0.053833f, 0.060852f, 0.068665f, 0.077698f, 0.087891f, 0.099182f, 0.111633f, 0.125732f,
+ 0.140381f, 0.157227f, 0.558105f, 0.601562f, 0.610840f, 0.614746f, 0.617188f, 0.619141f, 0.000270f, 0.000683f, 0.000851f, 0.001138f,
+ 0.001346f, 0.001561f, 0.001701f, 0.001884f, 0.001984f, 0.002193f, 0.002455f, 0.002609f, 0.002743f, 0.002993f, 0.003159f, 0.003361f,
+ 0.003593f, 0.003883f, 0.004044f, 0.004360f, 0.004532f, 0.004971f, 0.005169f, 0.005573f, 0.005863f, 0.006252f, 0.006653f, 0.007095f,
+ 0.007572f, 0.008110f, 0.008713f, 0.009056f, 0.009827f, 0.010574f, 0.011307f, 0.012070f, 0.013069f, 0.014122f, 0.015297f, 0.016678f,
+ 0.018234f, 0.019775f, 0.021835f, 0.024216f, 0.026917f, 0.030151f, 0.033875f, 0.038147f, 0.043121f, 0.049408f, 0.056091f, 0.064026f,
+ 0.073059f, 0.083801f, 0.095276f, 0.108459f, 0.122803f, 0.138794f, 0.545410f, 0.590332f, 0.599609f, 0.603516f, 0.606445f, 0.607422f,
+ 0.000190f, 0.000607f, 0.000724f, 0.000989f, 0.001171f, 0.001265f, 0.001416f, 0.001602f, 0.001666f, 0.001761f, 0.001893f, 0.002102f,
+ 0.002199f, 0.002413f, 0.002537f, 0.002743f, 0.002850f, 0.003027f, 0.003258f, 0.003494f, 0.003729f, 0.003937f, 0.004204f, 0.004410f,
+ 0.004616f, 0.004921f, 0.005192f, 0.005604f, 0.005936f, 0.006298f, 0.006836f, 0.007233f, 0.007694f, 0.008224f, 0.008827f, 0.009506f,
+ 0.010262f, 0.011055f, 0.011978f, 0.012955f, 0.014099f, 0.015434f, 0.017029f, 0.018677f, 0.020813f, 0.023193f, 0.026169f, 0.029541f,
+ 0.033783f, 0.038513f, 0.044403f, 0.051208f, 0.059387f, 0.068665f, 0.079468f, 0.091858f, 0.105774f, 0.120728f, 0.530762f, 0.578125f,
+ 0.588379f, 0.592773f, 0.595215f, 0.597168f, 0.000151f, 0.000443f, 0.000673f, 0.000793f, 0.000937f, 0.000987f, 0.001092f, 0.001192f,
+ 0.001324f, 0.001460f, 0.001495f, 0.001565f, 0.001778f, 0.001944f, 0.002054f, 0.002096f, 0.002254f, 0.002338f, 0.002594f, 0.002737f,
+ 0.002886f, 0.003048f, 0.003294f, 0.003460f, 0.003679f, 0.003868f, 0.004086f, 0.004322f, 0.004642f, 0.004894f, 0.005199f, 0.005554f,
+ 0.006035f, 0.006451f, 0.006836f, 0.007359f, 0.007820f, 0.008461f, 0.009163f, 0.009956f, 0.010803f, 0.011871f, 0.012917f, 0.014343f,
+ 0.015900f, 0.017670f, 0.019791f, 0.022400f, 0.025589f, 0.029404f, 0.034210f, 0.039948f, 0.046936f, 0.055298f, 0.064941f, 0.076172f,
+ 0.089172f, 0.103821f, 0.517090f, 0.565918f, 0.576172f, 0.582031f, 0.584961f, 0.586426f, 0.000203f, 0.000287f, 0.000531f, 0.000688f,
+ 0.000738f, 0.000820f, 0.000915f, 0.000875f, 0.001036f, 0.001117f, 0.001215f, 0.001317f, 0.001374f, 0.001476f, 0.001524f, 0.001682f,
+ 0.001726f, 0.001867f, 0.002014f, 0.002056f, 0.002209f, 0.002365f, 0.002495f, 0.002663f, 0.002775f, 0.002953f, 0.003134f, 0.003325f,
+ 0.003567f, 0.003736f, 0.004070f, 0.004261f, 0.004494f, 0.004845f, 0.005116f, 0.005459f, 0.005928f, 0.006329f, 0.006863f, 0.007458f,
+ 0.008087f, 0.008873f, 0.009689f, 0.010651f, 0.011826f, 0.013130f, 0.014732f, 0.016617f, 0.018890f, 0.021912f, 0.025482f, 0.029938f,
+ 0.035736f, 0.042847f, 0.051453f, 0.061615f, 0.074158f, 0.087952f, 0.504395f, 0.554199f, 0.565918f, 0.569336f, 0.573242f, 0.574219f,
+ 0.000215f, 0.000259f, 0.000423f, 0.000534f, 0.000499f, 0.000649f, 0.000622f, 0.000690f, 0.000717f, 0.000817f, 0.000937f, 0.000984f,
+ 0.001045f, 0.001148f, 0.001182f, 0.001211f, 0.001339f, 0.001406f, 0.001463f, 0.001590f, 0.001666f, 0.001759f, 0.001867f, 0.001949f,
+ 0.002064f, 0.002176f, 0.002342f, 0.002453f, 0.002619f, 0.002871f, 0.003033f, 0.003101f, 0.003389f, 0.003620f, 0.003794f, 0.004059f,
+ 0.004368f, 0.004681f, 0.005035f, 0.005466f, 0.005917f, 0.006405f, 0.007092f, 0.007744f, 0.008591f, 0.009506f, 0.010567f, 0.011993f,
+ 0.013710f, 0.015762f, 0.018326f, 0.021759f, 0.026077f, 0.031891f, 0.039124f, 0.048462f, 0.059570f, 0.072571f, 0.489258f, 0.542480f,
+ 0.553223f, 0.558594f, 0.562012f, 0.563965f, 0.000067f, 0.000253f, 0.000305f, 0.000367f, 0.000422f, 0.000431f, 0.000530f, 0.000466f,
+ 0.000565f, 0.000590f, 0.000702f, 0.000690f, 0.000746f, 0.000795f, 0.000859f, 0.000897f, 0.000962f, 0.001021f, 0.001069f, 0.001105f,
+ 0.001207f, 0.001257f, 0.001354f, 0.001424f, 0.001483f, 0.001570f, 0.001687f, 0.001750f, 0.001857f, 0.001982f, 0.002071f, 0.002281f,
+ 0.002361f, 0.002527f, 0.002684f, 0.002846f, 0.003092f, 0.003342f, 0.003622f, 0.003866f, 0.004173f, 0.004520f, 0.004955f, 0.005428f,
+ 0.006023f, 0.006687f, 0.007481f, 0.008446f, 0.009628f, 0.011047f, 0.012840f, 0.015205f, 0.018326f, 0.022629f, 0.028442f, 0.036102f,
+ 0.046051f, 0.058197f, 0.476318f, 0.529785f, 0.541992f, 0.547852f, 0.550293f, 0.553223f, 0.000000f, 0.000118f, 0.000216f, 0.000288f,
+ 0.000272f, 0.000350f, 0.000312f, 0.000374f, 0.000395f, 0.000470f, 0.000488f, 0.000477f, 0.000495f, 0.000548f, 0.000573f, 0.000646f,
+ 0.000636f, 0.000714f, 0.000763f, 0.000803f, 0.000852f, 0.000897f, 0.000930f, 0.000985f, 0.001056f, 0.001089f, 0.001163f, 0.001210f,
+ 0.001281f, 0.001432f, 0.001431f, 0.001548f, 0.001622f, 0.001743f, 0.001869f, 0.001991f, 0.002104f, 0.002262f, 0.002428f, 0.002632f,
+ 0.002815f, 0.003077f, 0.003344f, 0.003656f, 0.004002f, 0.004478f, 0.004974f, 0.005627f, 0.006435f, 0.007481f, 0.008713f, 0.010307f,
+ 0.012291f, 0.015289f, 0.019409f, 0.025497f, 0.033966f, 0.045013f, 0.461914f, 0.517090f, 0.529297f, 0.536133f, 0.539551f, 0.541504f,
+ 0.000073f, 0.000175f, 0.000165f, 0.000149f, 0.000200f, 0.000208f, 0.000215f, 0.000260f, 0.000268f, 0.000277f, 0.000292f, 0.000341f,
+ 0.000334f, 0.000370f, 0.000413f, 0.000424f, 0.000449f, 0.000474f, 0.000488f, 0.000507f, 0.000555f, 0.000574f, 0.000616f, 0.000652f,
+ 0.000696f, 0.000746f, 0.000780f, 0.000804f, 0.000849f, 0.000888f, 0.000949f, 0.001011f, 0.001075f, 0.001151f, 0.001225f, 0.001266f,
+ 0.001385f, 0.001466f, 0.001596f, 0.001699f, 0.001808f, 0.001980f, 0.002157f, 0.002329f, 0.002544f, 0.002850f, 0.003178f, 0.003593f,
+ 0.004047f, 0.004658f, 0.005508f, 0.006565f, 0.007935f, 0.009819f, 0.012527f, 0.016647f, 0.023514f, 0.033173f, 0.447510f, 0.503906f,
+ 0.517578f, 0.523926f, 0.527344f, 0.529297f, 0.000000f, 0.000106f, 0.000097f, 0.000099f, 0.000136f, 0.000157f, 0.000129f, 0.000162f,
+ 0.000167f, 0.000172f, 0.000180f, 0.000186f, 0.000209f, 0.000227f, 0.000232f, 0.000248f, 0.000260f, 0.000291f, 0.000300f, 0.000327f,
+ 0.000335f, 0.000343f, 0.000363f, 0.000395f, 0.000428f, 0.000459f, 0.000458f, 0.000477f, 0.000515f, 0.000549f, 0.000578f, 0.000621f,
+ 0.000659f, 0.000683f, 0.000741f, 0.000767f, 0.000818f, 0.000877f, 0.000952f, 0.001010f, 0.001085f, 0.001177f, 0.001275f, 0.001406f,
+ 0.001516f, 0.001664f, 0.001884f, 0.002096f, 0.002415f, 0.002745f, 0.003231f, 0.003843f, 0.004715f, 0.005936f, 0.007629f, 0.010139f,
+ 0.014763f, 0.022812f, 0.433350f, 0.491455f, 0.506348f, 0.511719f, 0.515625f, 0.518066f, 0.000104f, 0.000080f, 0.000069f, 0.000062f,
+ 0.000074f, 0.000074f, 0.000089f, 0.000097f, 0.000099f, 0.000102f, 0.000105f, 0.000126f, 0.000106f, 0.000119f, 0.000139f, 0.000135f,
+ 0.000154f, 0.000164f, 0.000166f, 0.000175f, 0.000188f, 0.000194f, 0.000211f, 0.000220f, 0.000252f, 0.000248f, 0.000260f, 0.000272f,
+ 0.000293f, 0.000301f, 0.000328f, 0.000347f, 0.000365f, 0.000371f, 0.000401f, 0.000422f, 0.000447f, 0.000489f, 0.000524f, 0.000553f,
+ 0.000588f, 0.000635f, 0.000701f, 0.000751f, 0.000816f, 0.000897f, 0.000997f, 0.001109f, 0.001265f, 0.001460f, 0.001686f, 0.002035f,
+ 0.002457f, 0.003130f, 0.004124f, 0.005676f, 0.008263f, 0.014114f, 0.418945f, 0.479492f, 0.493652f, 0.500000f, 0.503418f, 0.506836f,
+ 0.000089f, 0.000065f, 0.000056f, 0.000050f, 0.000045f, 0.000042f, 0.000046f, 0.000042f, 0.000043f, 0.000055f, 0.000046f, 0.000049f,
+ 0.000065f, 0.000055f, 0.000057f, 0.000063f, 0.000075f, 0.000080f, 0.000078f, 0.000084f, 0.000085f, 0.000092f, 0.000097f, 0.000102f,
+ 0.000108f, 0.000117f, 0.000118f, 0.000138f, 0.000135f, 0.000142f, 0.000151f, 0.000160f, 0.000172f, 0.000180f, 0.000195f, 0.000197f,
+ 0.000210f, 0.000230f, 0.000244f, 0.000266f, 0.000279f, 0.000299f, 0.000324f, 0.000352f, 0.000383f, 0.000414f, 0.000457f, 0.000509f,
+ 0.000575f, 0.000650f, 0.000756f, 0.000904f, 0.001103f, 0.001410f, 0.001880f, 0.002668f, 0.004112f, 0.007290f, 0.404541f, 0.466309f,
+ 0.481201f, 0.488037f, 0.492432f, 0.495361f, 0.000066f, 0.000046f, 0.000038f, 0.000034f, 0.000031f, 0.000029f, 0.000027f, 0.000026f,
+ 0.000025f, 0.000023f, 0.000022f, 0.000024f, 0.000020f, 0.000021f, 0.000021f, 0.000026f, 0.000024f, 0.000028f, 0.000031f, 0.000032f,
+ 0.000032f, 0.000035f, 0.000040f, 0.000038f, 0.000041f, 0.000047f, 0.000049f, 0.000043f, 0.000050f, 0.000052f, 0.000056f, 0.000059f,
+ 0.000066f, 0.000062f, 0.000067f, 0.000071f, 0.000082f, 0.000083f, 0.000089f, 0.000098f, 0.000104f, 0.000107f, 0.000116f, 0.000125f,
+ 0.000141f, 0.000149f, 0.000160f, 0.000183f, 0.000207f, 0.000228f, 0.000264f, 0.000311f, 0.000376f, 0.000469f, 0.000646f, 0.000937f,
+ 0.001554f, 0.002983f, 0.390381f, 0.454346f, 0.469727f, 0.476318f, 0.480713f, 0.484131f, 0.000028f, 0.000019f, 0.000015f, 0.000014f,
+ 0.000014f, 0.000013f, 0.000012f, 0.000012f, 0.000012f, 0.000012f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000010f,
+ 0.000010f, 0.000009f, 0.000009f, 0.000009f, 0.000008f, 0.000008f, 0.000008f, 0.000007f, 0.000008f, 0.000009f, 0.000009f, 0.000010f,
+ 0.000010f, 0.000011f, 0.000012f, 0.000011f, 0.000014f, 0.000015f, 0.000016f, 0.000016f, 0.000018f, 0.000019f, 0.000019f, 0.000022f,
+ 0.000023f, 0.000024f, 0.000026f, 0.000028f, 0.000029f, 0.000032f, 0.000037f, 0.000037f, 0.000042f, 0.000048f, 0.000056f, 0.000066f,
+ 0.000077f, 0.000091f, 0.000124f, 0.000183f, 0.000318f, 0.000779f, 0.376465f, 0.441406f, 0.457275f, 0.464600f, 0.468994f, 0.471924f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f,
+ 0.000002f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f,
+ 0.000002f, 0.000002f, 0.000003f, 0.000003f, 0.000003f, 0.000004f, 0.000004f, 0.000005f, 0.000010f, 0.000027f, 0.363037f, 0.428223f,
+ 0.444580f, 0.452881f, 0.457031f, 0.459961f,
+ },
+ {
+ 0.014420f, 0.043488f, 0.072388f, 0.100830f, 0.129150f, 0.156494f, 0.183350f, 0.210327f, 0.235352f, 0.260986f, 0.285645f, 0.309082f,
+ 0.332764f, 0.355713f, 0.377441f, 0.399658f, 0.420898f, 0.441650f, 0.461914f, 0.481445f, 0.500977f, 0.520508f, 0.538574f, 0.556641f,
+ 0.574707f, 0.591797f, 0.608398f, 0.624512f, 0.641602f, 0.657227f, 0.672363f, 0.687500f, 0.702148f, 0.717285f, 0.730957f, 0.745117f,
+ 0.758789f, 0.772461f, 0.783203f, 0.797363f, 0.810547f, 0.822266f, 0.833984f, 0.845703f, 0.857422f, 0.868652f, 0.879395f, 0.890625f,
+ 0.901367f, 0.911621f, 0.921875f, 0.932129f, 0.941895f, 0.951660f, 0.960938f, 0.970215f, 0.979492f, 0.987793f, 0.981934f, 0.957031f,
+ 0.938965f, 0.923340f, 0.909668f, 0.897461f, 0.013199f, 0.039978f, 0.066284f, 0.093445f, 0.119324f, 0.145386f, 0.170410f, 0.195801f,
+ 0.220581f, 0.244019f, 0.268066f, 0.291260f, 0.314453f, 0.335938f, 0.358154f, 0.379639f, 0.399902f, 0.420898f, 0.441406f, 0.460938f,
+ 0.480225f, 0.498291f, 0.516602f, 0.535156f, 0.553223f, 0.570312f, 0.587891f, 0.603516f, 0.620117f, 0.636719f, 0.652832f, 0.667480f,
+ 0.682617f, 0.696777f, 0.711914f, 0.726074f, 0.739746f, 0.753418f, 0.766602f, 0.779785f, 0.791992f, 0.804688f, 0.817871f, 0.829102f,
+ 0.841309f, 0.852539f, 0.864258f, 0.875488f, 0.886230f, 0.896973f, 0.907227f, 0.917969f, 0.928223f, 0.937500f, 0.947266f, 0.957520f,
+ 0.966797f, 0.975586f, 0.976562f, 0.952637f, 0.935547f, 0.920898f, 0.907715f, 0.895996f, 0.011932f, 0.036499f, 0.061554f, 0.085999f,
+ 0.110962f, 0.135010f, 0.158813f, 0.182373f, 0.206421f, 0.229004f, 0.251221f, 0.274170f, 0.295654f, 0.317871f, 0.339111f, 0.360107f,
+ 0.379395f, 0.399414f, 0.420654f, 0.440430f, 0.458252f, 0.477295f, 0.496094f, 0.513672f, 0.531738f, 0.549805f, 0.566406f, 0.583984f,
+ 0.599121f, 0.616211f, 0.631348f, 0.647461f, 0.662598f, 0.677734f, 0.692383f, 0.705566f, 0.720703f, 0.734863f, 0.748047f, 0.761230f,
+ 0.774414f, 0.787598f, 0.799805f, 0.812500f, 0.824707f, 0.837402f, 0.848633f, 0.859375f, 0.871094f, 0.882324f, 0.892578f, 0.904297f,
+ 0.913574f, 0.924316f, 0.934570f, 0.943848f, 0.954102f, 0.963867f, 0.970703f, 0.948242f, 0.931641f, 0.917480f, 0.905273f, 0.894043f,
+ 0.011070f, 0.033478f, 0.056396f, 0.079529f, 0.101990f, 0.125244f, 0.147705f, 0.170410f, 0.192139f, 0.214111f, 0.235596f, 0.257812f,
+ 0.279053f, 0.300293f, 0.320557f, 0.340576f, 0.360596f, 0.381104f, 0.400635f, 0.420166f, 0.438965f, 0.458008f, 0.476562f, 0.493652f,
+ 0.511230f, 0.527832f, 0.545898f, 0.562012f, 0.579102f, 0.595703f, 0.610840f, 0.627930f, 0.642578f, 0.657227f, 0.672363f, 0.686523f,
+ 0.701660f, 0.715332f, 0.729492f, 0.742676f, 0.756348f, 0.769531f, 0.782227f, 0.795898f, 0.807617f, 0.820312f, 0.832031f, 0.843262f,
+ 0.855469f, 0.866699f, 0.877441f, 0.889648f, 0.899414f, 0.910156f, 0.920410f, 0.930664f, 0.940430f, 0.950684f, 0.964844f, 0.943848f,
+ 0.927734f, 0.914551f, 0.902344f, 0.891602f, 0.010010f, 0.031067f, 0.051880f, 0.073303f, 0.094421f, 0.116577f, 0.136963f, 0.157959f,
+ 0.180542f, 0.200684f, 0.221436f, 0.242676f, 0.262939f, 0.283447f, 0.303467f, 0.323242f, 0.342529f, 0.362305f, 0.381348f, 0.399414f,
+ 0.418701f, 0.437256f, 0.455322f, 0.472412f, 0.490479f, 0.507812f, 0.524902f, 0.541992f, 0.558105f, 0.574219f, 0.591309f, 0.606445f,
+ 0.622070f, 0.637695f, 0.652344f, 0.666504f, 0.683594f, 0.695801f, 0.710449f, 0.724121f, 0.737305f, 0.751465f, 0.765137f, 0.777344f,
+ 0.790039f, 0.802734f, 0.814941f, 0.827637f, 0.839355f, 0.851074f, 0.862305f, 0.874512f, 0.885254f, 0.895996f, 0.906738f, 0.917480f,
+ 0.927246f, 0.937988f, 0.958984f, 0.939453f, 0.923828f, 0.911133f, 0.899414f, 0.889160f, 0.009491f, 0.028305f, 0.047699f, 0.067810f,
+ 0.087341f, 0.107849f, 0.127686f, 0.147827f, 0.167725f, 0.187744f, 0.207886f, 0.227051f, 0.247314f, 0.266846f, 0.286377f, 0.305908f,
+ 0.324463f, 0.343262f, 0.361572f, 0.380371f, 0.399658f, 0.416748f, 0.435547f, 0.452881f, 0.470703f, 0.488281f, 0.503906f, 0.522461f,
+ 0.538086f, 0.554199f, 0.571289f, 0.586914f, 0.602051f, 0.617676f, 0.633789f, 0.647949f, 0.663086f, 0.677246f, 0.692871f, 0.705078f,
+ 0.718750f, 0.732910f, 0.746582f, 0.759766f, 0.773438f, 0.785645f, 0.798340f, 0.811035f, 0.823242f, 0.834961f, 0.847168f, 0.859863f,
+ 0.870117f, 0.881348f, 0.893066f, 0.903320f, 0.914551f, 0.924316f, 0.953125f, 0.934082f, 0.919434f, 0.906738f, 0.896484f, 0.885742f,
+ 0.008598f, 0.026245f, 0.044495f, 0.062622f, 0.081177f, 0.100098f, 0.119019f, 0.137817f, 0.156616f, 0.175903f, 0.194946f, 0.213745f,
+ 0.232788f, 0.251221f, 0.269775f, 0.288330f, 0.307129f, 0.325928f, 0.344238f, 0.362305f, 0.380371f, 0.397705f, 0.415771f, 0.433105f,
+ 0.450928f, 0.468262f, 0.484863f, 0.501953f, 0.518555f, 0.534668f, 0.550293f, 0.566406f, 0.582520f, 0.598145f, 0.612305f, 0.627930f,
+ 0.643555f, 0.657715f, 0.672852f, 0.687500f, 0.700684f, 0.715332f, 0.728516f, 0.742188f, 0.755371f, 0.769531f, 0.781738f, 0.794434f,
+ 0.807129f, 0.818359f, 0.831543f, 0.843262f, 0.855469f, 0.865723f, 0.877930f, 0.889160f, 0.900391f, 0.911621f, 0.946777f, 0.929199f,
+ 0.915039f, 0.903320f, 0.892578f, 0.883301f, 0.007896f, 0.024490f, 0.041138f, 0.057892f, 0.075439f, 0.092712f, 0.110229f, 0.128296f,
+ 0.146118f, 0.164429f, 0.181885f, 0.200562f, 0.218628f, 0.236572f, 0.255127f, 0.272949f, 0.291016f, 0.308594f, 0.326172f, 0.343994f,
+ 0.361816f, 0.380127f, 0.396973f, 0.414551f, 0.430908f, 0.447998f, 0.465576f, 0.481445f, 0.497559f, 0.514160f, 0.529785f, 0.546387f,
+ 0.562988f, 0.578613f, 0.593262f, 0.609375f, 0.623047f, 0.638672f, 0.653809f, 0.667480f, 0.681641f, 0.697266f, 0.710938f, 0.724121f,
+ 0.737305f, 0.752441f, 0.765625f, 0.776367f, 0.790527f, 0.803223f, 0.815918f, 0.827637f, 0.839844f, 0.851562f, 0.863281f, 0.875000f,
+ 0.886719f, 0.898926f, 0.940430f, 0.923828f, 0.910645f, 0.899414f, 0.889160f, 0.879883f, 0.007320f, 0.022369f, 0.038055f, 0.053925f,
+ 0.070190f, 0.086609f, 0.103027f, 0.119568f, 0.136475f, 0.153320f, 0.170532f, 0.187988f, 0.204834f, 0.223022f, 0.240112f, 0.257324f,
+ 0.275391f, 0.291504f, 0.308838f, 0.326904f, 0.344727f, 0.361572f, 0.378662f, 0.395020f, 0.411865f, 0.428711f, 0.445068f, 0.462646f,
+ 0.478271f, 0.494141f, 0.510254f, 0.525879f, 0.542480f, 0.557129f, 0.573242f, 0.588867f, 0.603516f, 0.618164f, 0.633789f, 0.648438f,
+ 0.663086f, 0.678223f, 0.691895f, 0.706543f, 0.720215f, 0.733398f, 0.746582f, 0.759766f, 0.774414f, 0.786621f, 0.799805f, 0.811523f,
+ 0.823730f, 0.836914f, 0.848145f, 0.860840f, 0.872070f, 0.884277f, 0.933594f, 0.918945f, 0.906250f, 0.895020f, 0.885254f, 0.876953f,
+ 0.006760f, 0.021011f, 0.034973f, 0.050049f, 0.065369f, 0.080261f, 0.095337f, 0.111633f, 0.127319f, 0.142822f, 0.159668f, 0.176514f,
+ 0.192383f, 0.209106f, 0.225586f, 0.242554f, 0.259277f, 0.275635f, 0.292480f, 0.309326f, 0.326904f, 0.343750f, 0.359619f, 0.376465f,
+ 0.393066f, 0.409424f, 0.426514f, 0.442871f, 0.458252f, 0.475586f, 0.490967f, 0.505859f, 0.522461f, 0.539062f, 0.554199f, 0.569336f,
+ 0.583984f, 0.600586f, 0.614258f, 0.630371f, 0.643555f, 0.658691f, 0.673340f, 0.687500f, 0.702148f, 0.715332f, 0.729980f, 0.743652f,
+ 0.756348f, 0.770020f, 0.782715f, 0.796387f, 0.808105f, 0.820801f, 0.833008f, 0.846680f, 0.857910f, 0.870117f, 0.927246f, 0.913574f,
+ 0.901367f, 0.891113f, 0.881348f, 0.873047f, 0.006367f, 0.019165f, 0.032379f, 0.046295f, 0.060089f, 0.074463f, 0.088867f, 0.103821f,
+ 0.118835f, 0.133911f, 0.149048f, 0.164673f, 0.180298f, 0.196289f, 0.212524f, 0.228516f, 0.244385f, 0.260742f, 0.277344f, 0.293213f,
+ 0.309570f, 0.326416f, 0.342773f, 0.358887f, 0.374512f, 0.391113f, 0.406982f, 0.423340f, 0.439453f, 0.455078f, 0.470947f, 0.487793f,
+ 0.502441f, 0.519043f, 0.533691f, 0.550293f, 0.564941f, 0.580078f, 0.595703f, 0.610840f, 0.625488f, 0.640137f, 0.654785f, 0.669434f,
+ 0.683594f, 0.696777f, 0.710938f, 0.725586f, 0.738770f, 0.752441f, 0.766113f, 0.778320f, 0.791016f, 0.805176f, 0.818359f, 0.830566f,
+ 0.842773f, 0.854980f, 0.920410f, 0.908203f, 0.896484f, 0.886230f, 0.877441f, 0.868652f, 0.005981f, 0.017914f, 0.030350f, 0.042908f,
+ 0.056213f, 0.069092f, 0.083008f, 0.096619f, 0.111084f, 0.124634f, 0.139526f, 0.154297f, 0.169312f, 0.184570f, 0.199951f, 0.215454f,
+ 0.230713f, 0.245728f, 0.261963f, 0.277588f, 0.293213f, 0.309326f, 0.325195f, 0.340820f, 0.356934f, 0.373047f, 0.388916f, 0.404785f,
+ 0.420410f, 0.436279f, 0.452148f, 0.468506f, 0.483154f, 0.499756f, 0.515137f, 0.530762f, 0.545898f, 0.560059f, 0.576172f, 0.590820f,
+ 0.606445f, 0.621094f, 0.635254f, 0.649902f, 0.663574f, 0.678223f, 0.692383f, 0.706543f, 0.720703f, 0.733887f, 0.748535f, 0.762695f,
+ 0.775391f, 0.789551f, 0.801758f, 0.814941f, 0.828125f, 0.840332f, 0.913574f, 0.902344f, 0.890625f, 0.881836f, 0.872559f, 0.865234f,
+ 0.005402f, 0.016617f, 0.028061f, 0.039948f, 0.051758f, 0.064270f, 0.076782f, 0.089600f, 0.102600f, 0.116455f, 0.130371f, 0.144165f,
+ 0.158936f, 0.172607f, 0.187744f, 0.201904f, 0.216431f, 0.232422f, 0.247192f, 0.261719f, 0.277100f, 0.292480f, 0.308838f, 0.323975f,
+ 0.339355f, 0.355469f, 0.371338f, 0.386230f, 0.402344f, 0.417725f, 0.433350f, 0.448486f, 0.464600f, 0.480225f, 0.495361f, 0.510742f,
+ 0.525879f, 0.541992f, 0.557129f, 0.571777f, 0.586914f, 0.601562f, 0.616211f, 0.631836f, 0.645508f, 0.661621f, 0.674805f, 0.688965f,
+ 0.703125f, 0.717773f, 0.731934f, 0.745605f, 0.757812f, 0.772949f, 0.785156f, 0.799316f, 0.812012f, 0.826172f, 0.906738f, 0.896484f,
+ 0.886230f, 0.876465f, 0.868164f, 0.860840f, 0.005264f, 0.015457f, 0.026474f, 0.037170f, 0.048157f, 0.059845f, 0.071594f, 0.083984f,
+ 0.096191f, 0.109070f, 0.121887f, 0.134766f, 0.148193f, 0.161255f, 0.175781f, 0.189209f, 0.203369f, 0.218384f, 0.233032f, 0.247681f,
+ 0.261963f, 0.277100f, 0.292480f, 0.307129f, 0.322998f, 0.337891f, 0.352539f, 0.368652f, 0.384033f, 0.399170f, 0.414307f, 0.430420f,
+ 0.445801f, 0.460693f, 0.475342f, 0.491211f, 0.506836f, 0.521973f, 0.537598f, 0.551758f, 0.567383f, 0.582520f, 0.598145f, 0.612305f,
+ 0.627441f, 0.642090f, 0.656738f, 0.670898f, 0.685059f, 0.698730f, 0.713867f, 0.728516f, 0.742188f, 0.755371f, 0.770020f, 0.782715f,
+ 0.796387f, 0.810547f, 0.899414f, 0.889648f, 0.879883f, 0.872070f, 0.863770f, 0.856445f, 0.004719f, 0.014229f, 0.024384f, 0.034607f,
+ 0.044708f, 0.055756f, 0.066895f, 0.077942f, 0.089600f, 0.101624f, 0.113525f, 0.125854f, 0.138428f, 0.151245f, 0.164673f, 0.177734f,
+ 0.191650f, 0.205078f, 0.219360f, 0.233154f, 0.247925f, 0.261475f, 0.276367f, 0.291504f, 0.305908f, 0.320312f, 0.335449f, 0.350098f,
+ 0.365723f, 0.380615f, 0.395996f, 0.411133f, 0.427002f, 0.441895f, 0.456543f, 0.472656f, 0.487793f, 0.502441f, 0.518555f, 0.533203f,
+ 0.547852f, 0.562988f, 0.577637f, 0.593262f, 0.607910f, 0.623535f, 0.638184f, 0.652344f, 0.666992f, 0.681641f, 0.696777f, 0.711426f,
+ 0.725098f, 0.738281f, 0.753418f, 0.766113f, 0.782227f, 0.794922f, 0.892090f, 0.884277f, 0.875000f, 0.866699f, 0.858887f, 0.852539f,
+ 0.004280f, 0.013329f, 0.022476f, 0.031982f, 0.042114f, 0.051849f, 0.062225f, 0.072449f, 0.083679f, 0.095032f, 0.105530f, 0.117676f,
+ 0.129517f, 0.141357f, 0.154297f, 0.166748f, 0.178711f, 0.192505f, 0.205933f, 0.219727f, 0.233521f, 0.247070f, 0.260986f, 0.275391f,
+ 0.290039f, 0.303955f, 0.319580f, 0.333740f, 0.347412f, 0.363037f, 0.377686f, 0.392822f, 0.408203f, 0.422852f, 0.437988f, 0.453125f,
+ 0.468506f, 0.483398f, 0.498779f, 0.514160f, 0.527832f, 0.543945f, 0.559570f, 0.574707f, 0.588867f, 0.604492f, 0.619141f, 0.634277f,
+ 0.648438f, 0.663086f, 0.678223f, 0.692383f, 0.707520f, 0.721680f, 0.735352f, 0.749512f, 0.764648f, 0.778320f, 0.884277f, 0.877441f,
+ 0.868652f, 0.861328f, 0.854492f, 0.847656f, 0.004280f, 0.012138f, 0.021103f, 0.029999f, 0.038940f, 0.048279f, 0.057831f, 0.067566f,
+ 0.077454f, 0.087524f, 0.098816f, 0.109558f, 0.120728f, 0.131958f, 0.143799f, 0.155762f, 0.168091f, 0.180176f, 0.193359f, 0.206177f,
+ 0.219360f, 0.232910f, 0.246338f, 0.260254f, 0.273682f, 0.287598f, 0.302246f, 0.316650f, 0.331299f, 0.344971f, 0.359863f, 0.374268f,
+ 0.389648f, 0.404297f, 0.419434f, 0.434326f, 0.449463f, 0.464844f, 0.479492f, 0.494141f, 0.509766f, 0.524414f, 0.540039f, 0.555176f,
+ 0.569824f, 0.584961f, 0.600098f, 0.615723f, 0.629883f, 0.645508f, 0.659668f, 0.675293f, 0.689453f, 0.704590f, 0.719238f, 0.732422f,
+ 0.748535f, 0.762207f, 0.876953f, 0.871582f, 0.863281f, 0.855957f, 0.849609f, 0.842773f, 0.003744f, 0.011436f, 0.019348f, 0.027893f,
+ 0.036102f, 0.044739f, 0.053711f, 0.063110f, 0.072205f, 0.081970f, 0.091919f, 0.101746f, 0.112732f, 0.122864f, 0.134521f, 0.145996f,
+ 0.157715f, 0.169434f, 0.181519f, 0.193848f, 0.206665f, 0.219360f, 0.231445f, 0.245361f, 0.259033f, 0.272217f, 0.286621f, 0.299805f,
+ 0.314209f, 0.328125f, 0.342285f, 0.357178f, 0.371826f, 0.386475f, 0.400635f, 0.415527f, 0.430420f, 0.445068f, 0.459717f, 0.476074f,
+ 0.490234f, 0.505371f, 0.521484f, 0.536133f, 0.551758f, 0.565430f, 0.581543f, 0.595703f, 0.611816f, 0.626465f, 0.641602f, 0.656738f,
+ 0.671875f, 0.686523f, 0.701172f, 0.715820f, 0.731445f, 0.746582f, 0.868652f, 0.864746f, 0.856934f, 0.851074f, 0.844727f, 0.837891f,
+ 0.003595f, 0.011093f, 0.018265f, 0.025711f, 0.033600f, 0.041656f, 0.050140f, 0.058350f, 0.067505f, 0.076416f, 0.085632f, 0.095093f,
+ 0.104919f, 0.115295f, 0.125610f, 0.136108f, 0.147583f, 0.157959f, 0.169800f, 0.181519f, 0.193359f, 0.205933f, 0.218140f, 0.231323f,
+ 0.243652f, 0.257324f, 0.270508f, 0.283447f, 0.297363f, 0.311523f, 0.325928f, 0.339111f, 0.353516f, 0.367432f, 0.382812f, 0.396973f,
+ 0.412109f, 0.426758f, 0.441406f, 0.456055f, 0.471436f, 0.486328f, 0.501953f, 0.516113f, 0.531738f, 0.546875f, 0.562500f, 0.577637f,
+ 0.592773f, 0.607910f, 0.622559f, 0.638184f, 0.653809f, 0.669434f, 0.684082f, 0.699219f, 0.714355f, 0.729492f, 0.860840f, 0.857422f,
+ 0.852051f, 0.844727f, 0.839355f, 0.832520f, 0.003349f, 0.009933f, 0.016754f, 0.024063f, 0.031204f, 0.038849f, 0.046356f, 0.054413f,
+ 0.062744f, 0.070984f, 0.080017f, 0.088989f, 0.097778f, 0.107361f, 0.117004f, 0.127197f, 0.137451f, 0.148071f, 0.159180f, 0.169922f,
+ 0.181519f, 0.192993f, 0.204956f, 0.217407f, 0.229980f, 0.242188f, 0.254883f, 0.267578f, 0.281494f, 0.294434f, 0.307861f, 0.321533f,
+ 0.335693f, 0.350098f, 0.364258f, 0.379150f, 0.393066f, 0.407715f, 0.422607f, 0.437500f, 0.452148f, 0.467041f, 0.482422f, 0.497314f,
+ 0.512695f, 0.527832f, 0.542969f, 0.558594f, 0.573730f, 0.589844f, 0.604004f, 0.619629f, 0.635254f, 0.651367f, 0.665527f, 0.681152f,
+ 0.696289f, 0.711914f, 0.852539f, 0.851562f, 0.846191f, 0.838867f, 0.832520f, 0.827637f, 0.003290f, 0.009415f, 0.015976f, 0.022095f,
+ 0.028946f, 0.036255f, 0.043396f, 0.050598f, 0.058502f, 0.066284f, 0.074036f, 0.082275f, 0.091187f, 0.099731f, 0.108826f, 0.118652f,
+ 0.128296f, 0.137939f, 0.148193f, 0.159302f, 0.170166f, 0.180786f, 0.191895f, 0.203491f, 0.215210f, 0.227661f, 0.240112f, 0.252686f,
+ 0.265625f, 0.278564f, 0.291748f, 0.305176f, 0.318604f, 0.332764f, 0.346924f, 0.360352f, 0.375000f, 0.389160f, 0.404297f, 0.418213f,
+ 0.433105f, 0.448486f, 0.463135f, 0.477783f, 0.493408f, 0.508301f, 0.523438f, 0.540039f, 0.554199f, 0.570312f, 0.585938f, 0.601074f,
+ 0.617188f, 0.633301f, 0.648926f, 0.664062f, 0.679688f, 0.695312f, 0.844727f, 0.844238f, 0.838867f, 0.833008f, 0.827148f, 0.822266f,
+ 0.002913f, 0.008621f, 0.014595f, 0.020950f, 0.027496f, 0.033600f, 0.040558f, 0.047119f, 0.054260f, 0.061615f, 0.068970f, 0.076782f,
+ 0.084717f, 0.093140f, 0.101562f, 0.109985f, 0.118591f, 0.129150f, 0.138306f, 0.148682f, 0.158447f, 0.169189f, 0.180054f, 0.191162f,
+ 0.202148f, 0.213379f, 0.225586f, 0.237305f, 0.250488f, 0.262939f, 0.275391f, 0.288086f, 0.302490f, 0.315186f, 0.329346f, 0.342529f,
+ 0.356934f, 0.370117f, 0.385742f, 0.400146f, 0.414795f, 0.429199f, 0.444336f, 0.459473f, 0.473389f, 0.489258f, 0.503906f, 0.519531f,
+ 0.535645f, 0.551270f, 0.566895f, 0.582520f, 0.598145f, 0.614258f, 0.629395f, 0.645996f, 0.661621f, 0.677734f, 0.837402f, 0.836914f,
+ 0.832520f, 0.826660f, 0.821777f, 0.816406f, 0.002748f, 0.008018f, 0.014168f, 0.019196f, 0.025040f, 0.031250f, 0.037506f, 0.043732f,
+ 0.050415f, 0.057098f, 0.063721f, 0.071167f, 0.078979f, 0.086609f, 0.094299f, 0.102783f, 0.111145f, 0.119812f, 0.128296f, 0.138306f,
+ 0.147583f, 0.157593f, 0.168213f, 0.178711f, 0.188843f, 0.200317f, 0.211792f, 0.223511f, 0.235352f, 0.247192f, 0.259521f, 0.272461f,
+ 0.285156f, 0.298584f, 0.312012f, 0.324707f, 0.339111f, 0.352783f, 0.366943f, 0.381348f, 0.395996f, 0.410889f, 0.425537f, 0.439941f,
+ 0.454834f, 0.470459f, 0.485352f, 0.501953f, 0.516113f, 0.531738f, 0.547363f, 0.563477f, 0.579102f, 0.595703f, 0.611328f, 0.626953f,
+ 0.642578f, 0.659668f, 0.828125f, 0.830566f, 0.825684f, 0.820801f, 0.815430f, 0.811035f, 0.002630f, 0.007412f, 0.012978f, 0.018356f,
+ 0.023758f, 0.028931f, 0.034729f, 0.040894f, 0.046631f, 0.053101f, 0.059143f, 0.065979f, 0.073669f, 0.080200f, 0.087585f, 0.095276f,
+ 0.102844f, 0.111633f, 0.119812f, 0.128296f, 0.137573f, 0.146729f, 0.156128f, 0.166382f, 0.176880f, 0.187256f, 0.197998f, 0.209351f,
+ 0.220581f, 0.232422f, 0.244385f, 0.256592f, 0.268799f, 0.281982f, 0.294922f, 0.308105f, 0.321045f, 0.334717f, 0.348633f, 0.363525f,
+ 0.378174f, 0.391846f, 0.406006f, 0.420898f, 0.436279f, 0.451660f, 0.466064f, 0.481934f, 0.496826f, 0.513184f, 0.528320f, 0.543945f,
+ 0.560059f, 0.576660f, 0.592285f, 0.608887f, 0.625000f, 0.640625f, 0.819336f, 0.822266f, 0.818848f, 0.813965f, 0.810059f, 0.805664f,
+ 0.002201f, 0.007240f, 0.011803f, 0.016617f, 0.021622f, 0.027344f, 0.032288f, 0.037598f, 0.043427f, 0.049194f, 0.055267f, 0.061462f,
+ 0.067566f, 0.073853f, 0.080872f, 0.088013f, 0.095703f, 0.103821f, 0.111145f, 0.119446f, 0.127563f, 0.136597f, 0.145752f, 0.155273f,
+ 0.165039f, 0.174683f, 0.185181f, 0.195801f, 0.206543f, 0.218140f, 0.229370f, 0.241455f, 0.253174f, 0.265381f, 0.278564f, 0.291504f,
+ 0.304199f, 0.317383f, 0.331299f, 0.344971f, 0.358643f, 0.373291f, 0.386963f, 0.402100f, 0.416016f, 0.431641f, 0.447266f, 0.462646f,
+ 0.477295f, 0.493652f, 0.509277f, 0.524902f, 0.541504f, 0.557617f, 0.574219f, 0.589844f, 0.605957f, 0.623047f, 0.810059f, 0.814453f,
+ 0.811035f, 0.807129f, 0.803223f, 0.798828f, 0.002293f, 0.006927f, 0.010994f, 0.015617f, 0.020584f, 0.025131f, 0.029663f, 0.034760f,
+ 0.040192f, 0.045532f, 0.050964f, 0.056793f, 0.062805f, 0.068726f, 0.074890f, 0.081482f, 0.088806f, 0.096069f, 0.103333f, 0.110535f,
+ 0.118896f, 0.126709f, 0.135254f, 0.144165f, 0.153442f, 0.162720f, 0.172119f, 0.182495f, 0.192749f, 0.203735f, 0.214600f, 0.225952f,
+ 0.237793f, 0.250000f, 0.261719f, 0.274170f, 0.287354f, 0.300293f, 0.313477f, 0.326904f, 0.340820f, 0.354980f, 0.369385f, 0.383545f,
+ 0.396973f, 0.411865f, 0.427734f, 0.442871f, 0.458740f, 0.473633f, 0.489502f, 0.505859f, 0.522461f, 0.537598f, 0.553711f, 0.572754f,
+ 0.588379f, 0.604492f, 0.802246f, 0.807617f, 0.804199f, 0.800781f, 0.797363f, 0.792969f, 0.002081f, 0.006172f, 0.010460f, 0.014503f,
+ 0.019104f, 0.023163f, 0.027832f, 0.032410f, 0.037354f, 0.041992f, 0.047211f, 0.052490f, 0.057831f, 0.063232f, 0.069458f, 0.075317f,
+ 0.082153f, 0.088257f, 0.094910f, 0.102295f, 0.110107f, 0.117554f, 0.125122f, 0.133667f, 0.142456f, 0.151001f, 0.160767f, 0.169922f,
+ 0.179443f, 0.190430f, 0.200562f, 0.211914f, 0.222412f, 0.234009f, 0.245850f, 0.258545f, 0.270752f, 0.283203f, 0.296387f, 0.309082f,
+ 0.322998f, 0.336670f, 0.350098f, 0.364990f, 0.378906f, 0.393311f, 0.408936f, 0.423096f, 0.438965f, 0.454834f, 0.470703f, 0.486572f,
+ 0.502441f, 0.518555f, 0.534668f, 0.551270f, 0.569336f, 0.585938f, 0.792480f, 0.799316f, 0.797363f, 0.793457f, 0.790039f, 0.786621f,
+ 0.002028f, 0.005669f, 0.009705f, 0.013565f, 0.017532f, 0.021286f, 0.025574f, 0.030197f, 0.034180f, 0.038757f, 0.043488f, 0.048737f,
+ 0.053497f, 0.058594f, 0.064026f, 0.070007f, 0.075623f, 0.081360f, 0.088135f, 0.094238f, 0.101379f, 0.108643f, 0.116028f, 0.123718f,
+ 0.131592f, 0.140137f, 0.149048f, 0.157715f, 0.167114f, 0.176636f, 0.187012f, 0.197388f, 0.208130f, 0.219238f, 0.230347f, 0.241943f,
+ 0.254150f, 0.266113f, 0.279053f, 0.291504f, 0.304932f, 0.318848f, 0.332031f, 0.345947f, 0.360107f, 0.375000f, 0.389404f, 0.404541f,
+ 0.419922f, 0.434814f, 0.450684f, 0.466553f, 0.482910f, 0.499023f, 0.516113f, 0.533203f, 0.550293f, 0.567383f, 0.783203f, 0.790527f,
+ 0.789551f, 0.786621f, 0.783691f, 0.780762f, 0.001852f, 0.005554f, 0.008957f, 0.012642f, 0.016296f, 0.020172f, 0.024033f, 0.027878f,
+ 0.031677f, 0.035919f, 0.040253f, 0.044952f, 0.049255f, 0.053955f, 0.058960f, 0.063965f, 0.069336f, 0.074951f, 0.080933f, 0.087219f,
+ 0.093201f, 0.100159f, 0.106689f, 0.114197f, 0.121521f, 0.129517f, 0.137817f, 0.146118f, 0.155151f, 0.164307f, 0.173462f, 0.183472f,
+ 0.193970f, 0.204224f, 0.215210f, 0.226562f, 0.238037f, 0.250244f, 0.262451f, 0.274902f, 0.287598f, 0.301025f, 0.314209f, 0.327393f,
+ 0.342041f, 0.356445f, 0.370850f, 0.385254f, 0.400879f, 0.415771f, 0.431396f, 0.446777f, 0.463379f, 0.480469f, 0.497314f, 0.514160f,
+ 0.530273f, 0.547363f, 0.774414f, 0.783203f, 0.782715f, 0.779297f, 0.776367f, 0.773438f, 0.001690f, 0.005207f, 0.008278f, 0.011696f,
+ 0.015068f, 0.018784f, 0.022186f, 0.025909f, 0.029221f, 0.033508f, 0.037109f, 0.041321f, 0.045471f, 0.049774f, 0.054108f, 0.058838f,
+ 0.063843f, 0.069214f, 0.074280f, 0.080078f, 0.086243f, 0.091980f, 0.098083f, 0.105164f, 0.111877f, 0.119446f, 0.126953f, 0.134888f,
+ 0.143555f, 0.151978f, 0.161133f, 0.170532f, 0.180176f, 0.189697f, 0.200684f, 0.211182f, 0.222412f, 0.234009f, 0.245972f, 0.257568f,
+ 0.270508f, 0.282959f, 0.295898f, 0.309570f, 0.323486f, 0.337158f, 0.351562f, 0.366211f, 0.381104f, 0.396729f, 0.411865f, 0.427490f,
+ 0.443604f, 0.459961f, 0.477051f, 0.494385f, 0.510742f, 0.529297f, 0.763184f, 0.774902f, 0.773438f, 0.771973f, 0.769043f, 0.767578f,
+ 0.001528f, 0.004692f, 0.007587f, 0.010956f, 0.014221f, 0.016907f, 0.020218f, 0.023407f, 0.027283f, 0.030273f, 0.033997f, 0.038055f,
+ 0.041809f, 0.045959f, 0.049683f, 0.053955f, 0.058838f, 0.063171f, 0.068176f, 0.073120f, 0.078491f, 0.084473f, 0.090332f, 0.096619f,
+ 0.102905f, 0.109619f, 0.116699f, 0.124207f, 0.131958f, 0.140503f, 0.148438f, 0.157349f, 0.166626f, 0.176392f, 0.186157f, 0.196045f,
+ 0.207031f, 0.218018f, 0.229736f, 0.241699f, 0.253174f, 0.265381f, 0.278320f, 0.291748f, 0.305176f, 0.318848f, 0.333496f, 0.347412f,
+ 0.362305f, 0.376709f, 0.392822f, 0.407715f, 0.424072f, 0.440430f, 0.457031f, 0.473633f, 0.491211f, 0.508789f, 0.753906f, 0.766602f,
+ 0.767090f, 0.764160f, 0.761719f, 0.759766f, 0.001261f, 0.004250f, 0.007389f, 0.010185f, 0.013023f, 0.015976f, 0.018692f, 0.021713f,
+ 0.024734f, 0.028183f, 0.031464f, 0.034943f, 0.038452f, 0.041870f, 0.045410f, 0.049561f, 0.054047f, 0.058044f, 0.062164f, 0.067017f,
+ 0.071838f, 0.077332f, 0.082581f, 0.088318f, 0.094360f, 0.100525f, 0.107117f, 0.114258f, 0.121643f, 0.128540f, 0.136841f, 0.144897f,
+ 0.153931f, 0.162476f, 0.171875f, 0.182007f, 0.192139f, 0.202637f, 0.213623f, 0.224854f, 0.237183f, 0.248657f, 0.260986f, 0.274170f,
+ 0.287354f, 0.300781f, 0.314453f, 0.328613f, 0.343018f, 0.358643f, 0.373291f, 0.388916f, 0.404785f, 0.420654f, 0.437744f, 0.454590f,
+ 0.471924f, 0.489990f, 0.744629f, 0.757812f, 0.757812f, 0.756836f, 0.754395f, 0.752441f, 0.001527f, 0.004047f, 0.006680f, 0.009369f,
+ 0.012024f, 0.014618f, 0.017288f, 0.020248f, 0.022705f, 0.025803f, 0.028778f, 0.031769f, 0.034912f, 0.038330f, 0.041595f, 0.045166f,
+ 0.048737f, 0.052673f, 0.056885f, 0.061218f, 0.065552f, 0.070251f, 0.075012f, 0.080505f, 0.086060f, 0.091614f, 0.097656f, 0.104065f,
+ 0.110901f, 0.118225f, 0.125366f, 0.133179f, 0.141357f, 0.149902f, 0.158569f, 0.168213f, 0.177734f, 0.187866f, 0.198364f, 0.208984f,
+ 0.220581f, 0.232422f, 0.244019f, 0.256836f, 0.269287f, 0.282471f, 0.296143f, 0.309326f, 0.324463f, 0.338379f, 0.353760f, 0.368652f,
+ 0.385498f, 0.400635f, 0.417725f, 0.434570f, 0.451660f, 0.469482f, 0.733887f, 0.749023f, 0.750977f, 0.749023f, 0.747070f, 0.744629f,
+ 0.001313f, 0.003803f, 0.006126f, 0.008507f, 0.011185f, 0.013550f, 0.015839f, 0.018219f, 0.021027f, 0.023438f, 0.026520f, 0.029129f,
+ 0.031738f, 0.034821f, 0.037964f, 0.041138f, 0.044434f, 0.048035f, 0.051636f, 0.055420f, 0.059540f, 0.063782f, 0.068176f, 0.073181f,
+ 0.077881f, 0.083496f, 0.088989f, 0.094849f, 0.101440f, 0.107849f, 0.114441f, 0.121887f, 0.129395f, 0.137207f, 0.145874f, 0.154419f,
+ 0.163574f, 0.173462f, 0.183228f, 0.193726f, 0.204712f, 0.216064f, 0.227661f, 0.239624f, 0.251709f, 0.264648f, 0.277832f, 0.291504f,
+ 0.305664f, 0.320312f, 0.334473f, 0.349854f, 0.365479f, 0.380615f, 0.397217f, 0.414551f, 0.432129f, 0.449951f, 0.722656f, 0.740234f,
+ 0.741699f, 0.741211f, 0.739746f, 0.737793f, 0.001137f, 0.003654f, 0.005871f, 0.007881f, 0.010262f, 0.012268f, 0.014496f, 0.017059f,
+ 0.018890f, 0.021317f, 0.023605f, 0.026291f, 0.029007f, 0.031494f, 0.034515f, 0.036987f, 0.040375f, 0.043457f, 0.046936f, 0.050385f,
+ 0.053925f, 0.058044f, 0.061981f, 0.066650f, 0.070679f, 0.075562f, 0.080994f, 0.085938f, 0.091919f, 0.098450f, 0.104370f, 0.110840f,
+ 0.118164f, 0.125366f, 0.133301f, 0.141357f, 0.150024f, 0.159546f, 0.168457f, 0.178711f, 0.189453f, 0.199707f, 0.211060f, 0.222656f,
+ 0.234741f, 0.247314f, 0.260010f, 0.272705f, 0.287354f, 0.300781f, 0.315674f, 0.330322f, 0.345947f, 0.362061f, 0.377441f, 0.394775f,
+ 0.412109f, 0.429199f, 0.712891f, 0.730957f, 0.733398f, 0.733398f, 0.731445f, 0.729492f, 0.001163f, 0.003218f, 0.005329f, 0.007542f,
+ 0.009331f, 0.011330f, 0.013367f, 0.015434f, 0.017685f, 0.019714f, 0.021515f, 0.024139f, 0.026062f, 0.028763f, 0.031204f, 0.033722f,
+ 0.036163f, 0.039398f, 0.041992f, 0.045624f, 0.048553f, 0.051971f, 0.056000f, 0.059937f, 0.063904f, 0.068054f, 0.072876f, 0.077820f,
+ 0.083374f, 0.088623f, 0.094116f, 0.100830f, 0.107117f, 0.114197f, 0.121399f, 0.129272f, 0.136963f, 0.145630f, 0.154785f, 0.163696f,
+ 0.173828f, 0.184204f, 0.194946f, 0.205933f, 0.217529f, 0.229614f, 0.242676f, 0.255859f, 0.269043f, 0.282471f, 0.296387f, 0.311523f,
+ 0.326172f, 0.341553f, 0.357910f, 0.374756f, 0.391846f, 0.409180f, 0.701660f, 0.721680f, 0.723633f, 0.724609f, 0.723145f, 0.722656f,
+ 0.001008f, 0.003147f, 0.004818f, 0.006882f, 0.008530f, 0.010468f, 0.012390f, 0.013832f, 0.016006f, 0.017899f, 0.019608f, 0.021866f,
+ 0.023849f, 0.025940f, 0.027847f, 0.030350f, 0.032806f, 0.035187f, 0.037994f, 0.040619f, 0.043732f, 0.046875f, 0.050110f, 0.053833f,
+ 0.057617f, 0.061371f, 0.065613f, 0.070068f, 0.074768f, 0.079895f, 0.085144f, 0.090637f, 0.096863f, 0.103149f, 0.110107f, 0.116943f,
+ 0.124634f, 0.132568f, 0.140991f, 0.149536f, 0.159302f, 0.169189f, 0.179443f, 0.189575f, 0.201538f, 0.213013f, 0.225342f, 0.236938f,
+ 0.250244f, 0.264160f, 0.278320f, 0.292236f, 0.307617f, 0.322021f, 0.337891f, 0.354248f, 0.371582f, 0.389160f, 0.689941f, 0.712891f,
+ 0.715820f, 0.715820f, 0.715820f, 0.714355f, 0.001126f, 0.002708f, 0.004486f, 0.006313f, 0.007927f, 0.009659f, 0.011238f, 0.012833f,
+ 0.014435f, 0.015823f, 0.017670f, 0.019485f, 0.021347f, 0.023453f, 0.025101f, 0.027161f, 0.029160f, 0.031525f, 0.033752f, 0.036560f,
+ 0.039154f, 0.041687f, 0.044891f, 0.047943f, 0.051453f, 0.054871f, 0.058655f, 0.062622f, 0.067078f, 0.071411f, 0.076355f, 0.081665f,
+ 0.086792f, 0.092957f, 0.098877f, 0.105713f, 0.112549f, 0.119995f, 0.127563f, 0.135864f, 0.144897f, 0.154297f, 0.164185f, 0.173828f,
+ 0.185059f, 0.196045f, 0.208008f, 0.219849f, 0.232666f, 0.245483f, 0.259033f, 0.273438f, 0.287842f, 0.302734f, 0.318604f, 0.334473f,
+ 0.351318f, 0.369385f, 0.679688f, 0.702637f, 0.707031f, 0.707031f, 0.707031f, 0.705566f, 0.000980f, 0.002733f, 0.004021f, 0.005688f,
+ 0.007084f, 0.008553f, 0.010345f, 0.011513f, 0.012962f, 0.014297f, 0.015823f, 0.017609f, 0.019119f, 0.020721f, 0.022568f, 0.024200f,
+ 0.026291f, 0.028000f, 0.030457f, 0.032410f, 0.034912f, 0.037476f, 0.039734f, 0.042786f, 0.045563f, 0.048920f, 0.052185f, 0.055817f,
+ 0.059662f, 0.063660f, 0.067993f, 0.072632f, 0.077759f, 0.083191f, 0.088623f, 0.094971f, 0.101135f, 0.107849f, 0.115479f, 0.122864f,
+ 0.131592f, 0.139893f, 0.149414f, 0.158447f, 0.169067f, 0.179443f, 0.191040f, 0.202393f, 0.214478f, 0.227539f, 0.240723f, 0.255127f,
+ 0.268555f, 0.283447f, 0.298828f, 0.315186f, 0.331787f, 0.348389f, 0.667480f, 0.693359f, 0.697754f, 0.698730f, 0.698242f, 0.697754f,
+ 0.000870f, 0.002420f, 0.003994f, 0.005165f, 0.006584f, 0.007763f, 0.009209f, 0.010468f, 0.011604f, 0.013336f, 0.013977f, 0.015442f,
+ 0.016830f, 0.018509f, 0.020065f, 0.021606f, 0.023224f, 0.024933f, 0.026672f, 0.028656f, 0.030914f, 0.033112f, 0.035187f, 0.037689f,
+ 0.040344f, 0.043335f, 0.046234f, 0.049438f, 0.052948f, 0.056427f, 0.060394f, 0.064331f, 0.069031f, 0.073853f, 0.078735f, 0.084412f,
+ 0.090271f, 0.096436f, 0.103455f, 0.110229f, 0.118042f, 0.126099f, 0.134766f, 0.143921f, 0.153198f, 0.163696f, 0.174438f, 0.185913f,
+ 0.197754f, 0.210083f, 0.222778f, 0.235962f, 0.250000f, 0.264648f, 0.279053f, 0.294922f, 0.311279f, 0.328613f, 0.655273f, 0.684082f,
+ 0.688477f, 0.689941f, 0.689941f, 0.689941f, 0.000790f, 0.002153f, 0.003576f, 0.004726f, 0.005966f, 0.007172f, 0.008186f, 0.009453f,
+ 0.010521f, 0.011482f, 0.012772f, 0.013771f, 0.015144f, 0.016434f, 0.017792f, 0.019226f, 0.020355f, 0.022049f, 0.023666f, 0.025375f,
+ 0.027145f, 0.029297f, 0.030975f, 0.033142f, 0.035339f, 0.037964f, 0.040405f, 0.043365f, 0.046478f, 0.049744f, 0.053101f, 0.057068f,
+ 0.060944f, 0.065063f, 0.069763f, 0.074646f, 0.079956f, 0.085938f, 0.091675f, 0.098083f, 0.105164f, 0.112732f, 0.121033f, 0.129395f,
+ 0.138428f, 0.148560f, 0.158325f, 0.169067f, 0.180664f, 0.192139f, 0.205078f, 0.217529f, 0.231934f, 0.246094f, 0.260010f, 0.275391f,
+ 0.292236f, 0.309570f, 0.644043f, 0.673340f, 0.678711f, 0.680664f, 0.680664f, 0.680176f, 0.000538f, 0.002022f, 0.003185f, 0.004456f,
+ 0.005360f, 0.006321f, 0.007286f, 0.008484f, 0.009422f, 0.010185f, 0.011177f, 0.012283f, 0.013191f, 0.014435f, 0.015587f, 0.016769f,
+ 0.017914f, 0.019302f, 0.020584f, 0.022171f, 0.023819f, 0.025391f, 0.027222f, 0.028992f, 0.030914f, 0.033234f, 0.035461f, 0.037903f,
+ 0.040649f, 0.043396f, 0.046326f, 0.049561f, 0.053131f, 0.056946f, 0.061279f, 0.065613f, 0.070374f, 0.075439f, 0.080811f, 0.086731f,
+ 0.093140f, 0.100037f, 0.107544f, 0.115662f, 0.124023f, 0.132935f, 0.143066f, 0.153320f, 0.163696f, 0.175415f, 0.187012f, 0.200195f,
+ 0.213013f, 0.227173f, 0.241455f, 0.256592f, 0.272461f, 0.288330f, 0.632812f, 0.663574f, 0.669434f, 0.670898f, 0.671387f, 0.671875f,
+ 0.000686f, 0.001864f, 0.002884f, 0.003883f, 0.004829f, 0.005592f, 0.006504f, 0.007454f, 0.008064f, 0.008995f, 0.009850f, 0.010948f,
+ 0.011711f, 0.012581f, 0.013763f, 0.014618f, 0.015701f, 0.016953f, 0.018112f, 0.019180f, 0.020691f, 0.021973f, 0.023560f, 0.025192f,
+ 0.026962f, 0.028717f, 0.030624f, 0.032959f, 0.035004f, 0.037567f, 0.040314f, 0.043121f, 0.046204f, 0.049713f, 0.053284f, 0.057129f,
+ 0.061157f, 0.065796f, 0.071167f, 0.076477f, 0.082214f, 0.088379f, 0.095276f, 0.102600f, 0.110596f, 0.118652f, 0.127808f, 0.137817f,
+ 0.147705f, 0.158569f, 0.170166f, 0.182251f, 0.195068f, 0.208008f, 0.222656f, 0.237671f, 0.252686f, 0.269287f, 0.620605f, 0.653320f,
+ 0.659180f, 0.661621f, 0.663086f, 0.663574f, 0.000782f, 0.001828f, 0.002949f, 0.003487f, 0.004421f, 0.005032f, 0.005878f, 0.006557f,
+ 0.007332f, 0.008110f, 0.008591f, 0.009537f, 0.010094f, 0.011147f, 0.011864f, 0.012779f, 0.013573f, 0.014549f, 0.015625f, 0.016846f,
+ 0.017822f, 0.018936f, 0.020279f, 0.021729f, 0.023117f, 0.024704f, 0.026505f, 0.028183f, 0.030289f, 0.032349f, 0.034546f, 0.037109f,
+ 0.039703f, 0.042786f, 0.045837f, 0.049133f, 0.053009f, 0.056763f, 0.061584f, 0.066284f, 0.071411f, 0.076843f, 0.083191f, 0.089722f,
+ 0.097290f, 0.104919f, 0.113647f, 0.122498f, 0.132324f, 0.142578f, 0.153809f, 0.164917f, 0.177612f, 0.190430f, 0.203857f, 0.218506f,
+ 0.233887f, 0.249390f, 0.606934f, 0.642578f, 0.649414f, 0.653320f, 0.652832f, 0.654785f, 0.000604f, 0.001636f, 0.002550f, 0.003180f,
+ 0.003799f, 0.004498f, 0.005051f, 0.005573f, 0.006325f, 0.006836f, 0.007607f, 0.008087f, 0.008820f, 0.009483f, 0.010132f, 0.010918f,
+ 0.011665f, 0.012527f, 0.013535f, 0.014297f, 0.015251f, 0.016190f, 0.017288f, 0.018433f, 0.019791f, 0.021133f, 0.022400f, 0.023865f,
+ 0.025742f, 0.027664f, 0.029373f, 0.031677f, 0.034027f, 0.036255f, 0.039032f, 0.042023f, 0.045197f, 0.048798f, 0.052643f, 0.056824f,
+ 0.061493f, 0.066467f, 0.072327f, 0.078308f, 0.084473f, 0.091858f, 0.099609f, 0.108032f, 0.117249f, 0.126831f, 0.137451f, 0.148193f,
+ 0.160034f, 0.172729f, 0.186035f, 0.199829f, 0.214722f, 0.229980f, 0.596680f, 0.632812f, 0.638672f, 0.642578f, 0.644531f, 0.645020f,
+ 0.000447f, 0.001384f, 0.001986f, 0.002697f, 0.003225f, 0.003828f, 0.004501f, 0.005009f, 0.005459f, 0.006027f, 0.006474f, 0.006935f,
+ 0.007591f, 0.008217f, 0.008644f, 0.009308f, 0.010025f, 0.010498f, 0.011330f, 0.012100f, 0.012909f, 0.013924f, 0.014618f, 0.015610f,
+ 0.016739f, 0.017807f, 0.019043f, 0.020340f, 0.021622f, 0.023178f, 0.024979f, 0.026520f, 0.028366f, 0.030640f, 0.032959f, 0.035492f,
+ 0.038239f, 0.041260f, 0.044495f, 0.048340f, 0.052399f, 0.056732f, 0.061768f, 0.067017f, 0.072754f, 0.079224f, 0.086304f, 0.093994f,
+ 0.102478f, 0.111511f, 0.121521f, 0.132080f, 0.143311f, 0.155518f, 0.168213f, 0.181763f, 0.196411f, 0.211548f, 0.583008f, 0.621094f,
+ 0.629395f, 0.632324f, 0.634766f, 0.635742f, 0.000375f, 0.001324f, 0.001728f, 0.002466f, 0.002872f, 0.003384f, 0.003685f, 0.004185f,
+ 0.004845f, 0.005184f, 0.005444f, 0.006130f, 0.006401f, 0.006844f, 0.007446f, 0.007957f, 0.008636f, 0.008965f, 0.009659f, 0.010139f,
+ 0.010971f, 0.011742f, 0.012497f, 0.013138f, 0.014099f, 0.014992f, 0.015900f, 0.017166f, 0.018143f, 0.019485f, 0.020676f, 0.022156f,
+ 0.023697f, 0.025528f, 0.027374f, 0.029556f, 0.031921f, 0.034424f, 0.037445f, 0.040375f, 0.044067f, 0.047577f, 0.052155f, 0.056824f,
+ 0.062042f, 0.067688f, 0.074158f, 0.081055f, 0.088745f, 0.097351f, 0.106323f, 0.116455f, 0.127075f, 0.138672f, 0.151123f, 0.164062f,
+ 0.177856f, 0.192871f, 0.570801f, 0.610840f, 0.619629f, 0.623047f, 0.625488f, 0.625977f, 0.000432f, 0.000921f, 0.001664f, 0.002056f,
+ 0.002697f, 0.003061f, 0.003326f, 0.003757f, 0.004044f, 0.004379f, 0.004761f, 0.004948f, 0.005463f, 0.005791f, 0.006199f, 0.006752f,
+ 0.007229f, 0.007526f, 0.008156f, 0.008621f, 0.009193f, 0.009712f, 0.010330f, 0.010994f, 0.011688f, 0.012466f, 0.013374f, 0.014153f,
+ 0.015099f, 0.016083f, 0.017212f, 0.018250f, 0.019623f, 0.021210f, 0.022614f, 0.024445f, 0.026321f, 0.028351f, 0.030762f, 0.033325f,
+ 0.036377f, 0.039642f, 0.043304f, 0.047485f, 0.051880f, 0.056885f, 0.062469f, 0.068542f, 0.075623f, 0.083374f, 0.091919f, 0.101135f,
+ 0.111389f, 0.122559f, 0.134277f, 0.146606f, 0.160278f, 0.174683f, 0.557617f, 0.600098f, 0.609375f, 0.612793f, 0.615723f, 0.616699f,
+ 0.000255f, 0.000997f, 0.001393f, 0.001908f, 0.002239f, 0.002512f, 0.002720f, 0.003166f, 0.003283f, 0.003616f, 0.003866f, 0.004223f,
+ 0.004597f, 0.004795f, 0.005127f, 0.005573f, 0.005939f, 0.006359f, 0.006657f, 0.007133f, 0.007687f, 0.008041f, 0.008545f, 0.009087f,
+ 0.009636f, 0.010300f, 0.010910f, 0.011757f, 0.012489f, 0.013313f, 0.014153f, 0.014954f, 0.016037f, 0.017258f, 0.018555f, 0.019867f,
+ 0.021530f, 0.023239f, 0.025055f, 0.027252f, 0.029663f, 0.032379f, 0.035339f, 0.038666f, 0.042664f, 0.047058f, 0.051849f, 0.057465f,
+ 0.063416f, 0.070557f, 0.078369f, 0.086731f, 0.096313f, 0.106384f, 0.117798f, 0.129761f, 0.143311f, 0.156982f, 0.544922f, 0.588867f,
+ 0.599121f, 0.602539f, 0.605469f, 0.606445f, 0.000353f, 0.000879f, 0.001276f, 0.001613f, 0.001785f, 0.002075f, 0.002300f, 0.002501f,
+ 0.002808f, 0.003010f, 0.003283f, 0.003487f, 0.003714f, 0.003967f, 0.004269f, 0.004597f, 0.004837f, 0.005230f, 0.005512f, 0.005878f,
+ 0.006203f, 0.006626f, 0.007030f, 0.007519f, 0.007866f, 0.008354f, 0.009010f, 0.009468f, 0.010017f, 0.010765f, 0.011444f, 0.012291f,
+ 0.013100f, 0.014030f, 0.015030f, 0.016098f, 0.017441f, 0.018646f, 0.020157f, 0.021912f, 0.023804f, 0.026047f, 0.028488f, 0.031342f,
+ 0.034424f, 0.037994f, 0.042206f, 0.046997f, 0.052338f, 0.058533f, 0.065369f, 0.073364f, 0.081787f, 0.091492f, 0.102356f, 0.113647f,
+ 0.126343f, 0.139526f, 0.531250f, 0.579102f, 0.587891f, 0.592773f, 0.595703f, 0.596680f, 0.000295f, 0.000784f, 0.000912f, 0.001261f,
+ 0.001517f, 0.001761f, 0.001893f, 0.002113f, 0.002211f, 0.002432f, 0.002676f, 0.002861f, 0.002993f, 0.003294f, 0.003479f, 0.003700f,
+ 0.003933f, 0.004242f, 0.004452f, 0.004745f, 0.004974f, 0.005428f, 0.005642f, 0.006081f, 0.006401f, 0.006817f, 0.007240f, 0.007641f,
+ 0.008209f, 0.008667f, 0.009361f, 0.009720f, 0.010506f, 0.011261f, 0.012024f, 0.012794f, 0.013840f, 0.014893f, 0.016113f, 0.017395f,
+ 0.018860f, 0.020493f, 0.022446f, 0.024658f, 0.027283f, 0.030228f, 0.033691f, 0.037659f, 0.042145f, 0.047546f, 0.053467f, 0.060547f,
+ 0.068359f, 0.077332f, 0.087158f, 0.098145f, 0.109741f, 0.123230f, 0.517090f, 0.566895f, 0.576660f, 0.581543f, 0.584961f, 0.587402f,
+ 0.000247f, 0.000702f, 0.000849f, 0.001033f, 0.001304f, 0.001416f, 0.001576f, 0.001754f, 0.001860f, 0.001953f, 0.002104f, 0.002327f,
+ 0.002419f, 0.002651f, 0.002785f, 0.003014f, 0.003134f, 0.003315f, 0.003584f, 0.003813f, 0.004078f, 0.004295f, 0.004555f, 0.004784f,
+ 0.005013f, 0.005329f, 0.005669f, 0.006069f, 0.006439f, 0.006821f, 0.007381f, 0.007797f, 0.008301f, 0.008812f, 0.009430f, 0.010139f,
+ 0.010948f, 0.011642f, 0.012573f, 0.013664f, 0.014671f, 0.016052f, 0.017502f, 0.019135f, 0.021255f, 0.023438f, 0.026199f, 0.029312f,
+ 0.033203f, 0.037476f, 0.042725f, 0.048828f, 0.055695f, 0.063721f, 0.072937f, 0.082947f, 0.094666f, 0.107117f, 0.504883f, 0.555664f,
+ 0.566406f, 0.572754f, 0.574707f, 0.577148f, 0.000217f, 0.000516f, 0.000750f, 0.000898f, 0.001011f, 0.001117f, 0.001203f, 0.001307f,
+ 0.001470f, 0.001604f, 0.001659f, 0.001750f, 0.001945f, 0.002121f, 0.002249f, 0.002316f, 0.002478f, 0.002581f, 0.002832f, 0.003000f,
+ 0.003164f, 0.003334f, 0.003593f, 0.003784f, 0.003990f, 0.004196f, 0.004440f, 0.004673f, 0.005035f, 0.005329f, 0.005642f, 0.005981f,
+ 0.006462f, 0.006916f, 0.007313f, 0.007805f, 0.008377f, 0.008987f, 0.009727f, 0.010521f, 0.011314f, 0.012421f, 0.013466f, 0.014755f,
+ 0.016235f, 0.017914f, 0.019913f, 0.022461f, 0.025330f, 0.028778f, 0.033081f, 0.038239f, 0.044189f, 0.051422f, 0.059662f, 0.069336f,
+ 0.080200f, 0.091980f, 0.492676f, 0.543945f, 0.555664f, 0.561035f, 0.564453f, 0.566406f, 0.000131f, 0.000355f, 0.000605f, 0.000759f,
+ 0.000832f, 0.000904f, 0.001018f, 0.000975f, 0.001144f, 0.001235f, 0.001336f, 0.001447f, 0.001518f, 0.001620f, 0.001668f, 0.001835f,
+ 0.001901f, 0.002045f, 0.002188f, 0.002270f, 0.002424f, 0.002577f, 0.002707f, 0.002893f, 0.003002f, 0.003223f, 0.003407f, 0.003572f,
+ 0.003851f, 0.004017f, 0.004391f, 0.004608f, 0.004833f, 0.005203f, 0.005497f, 0.005886f, 0.006351f, 0.006771f, 0.007278f, 0.007858f,
+ 0.008560f, 0.009315f, 0.010086f, 0.011078f, 0.012222f, 0.013443f, 0.015022f, 0.016769f, 0.018967f, 0.021591f, 0.024780f, 0.028931f,
+ 0.033875f, 0.039734f, 0.047241f, 0.056122f, 0.066101f, 0.077637f, 0.477783f, 0.532715f, 0.544922f, 0.551270f, 0.553711f, 0.555664f,
+ 0.000245f, 0.000303f, 0.000473f, 0.000498f, 0.000544f, 0.000707f, 0.000700f, 0.000767f, 0.000802f, 0.000892f, 0.001021f, 0.001086f,
+ 0.001140f, 0.001260f, 0.001303f, 0.001325f, 0.001462f, 0.001553f, 0.001603f, 0.001746f, 0.001816f, 0.001904f, 0.002043f, 0.002127f,
+ 0.002254f, 0.002356f, 0.002548f, 0.002672f, 0.002851f, 0.003092f, 0.003265f, 0.003374f, 0.003647f, 0.003891f, 0.004097f, 0.004360f,
+ 0.004669f, 0.004997f, 0.005390f, 0.005810f, 0.006226f, 0.006756f, 0.007450f, 0.008095f, 0.008934f, 0.009827f, 0.010902f, 0.012268f,
+ 0.013840f, 0.015701f, 0.018036f, 0.021072f, 0.024948f, 0.029800f, 0.035980f, 0.043945f, 0.053345f, 0.063843f, 0.465576f, 0.520996f,
+ 0.535645f, 0.540039f, 0.543457f, 0.545898f, 0.000108f, 0.000275f, 0.000332f, 0.000402f, 0.000462f, 0.000468f, 0.000580f, 0.000522f,
+ 0.000616f, 0.000657f, 0.000758f, 0.000762f, 0.000812f, 0.000870f, 0.000945f, 0.000978f, 0.001054f, 0.001109f, 0.001179f, 0.001213f,
+ 0.001311f, 0.001371f, 0.001473f, 0.001558f, 0.001629f, 0.001718f, 0.001837f, 0.001903f, 0.002016f, 0.002159f, 0.002258f, 0.002478f,
+ 0.002548f, 0.002731f, 0.002909f, 0.003086f, 0.003317f, 0.003580f, 0.003885f, 0.004116f, 0.004421f, 0.004818f, 0.005264f, 0.005745f,
+ 0.006294f, 0.006966f, 0.007748f, 0.008667f, 0.009766f, 0.011086f, 0.012787f, 0.014908f, 0.017746f, 0.021271f, 0.026382f, 0.032990f,
+ 0.041199f, 0.051239f, 0.452393f, 0.509277f, 0.522461f, 0.529297f, 0.533203f, 0.535156f, 0.000016f, 0.000143f, 0.000244f, 0.000315f,
+ 0.000309f, 0.000391f, 0.000344f, 0.000402f, 0.000429f, 0.000517f, 0.000522f, 0.000526f, 0.000546f, 0.000606f, 0.000628f, 0.000705f,
+ 0.000692f, 0.000781f, 0.000837f, 0.000868f, 0.000923f, 0.000969f, 0.001013f, 0.001070f, 0.001142f, 0.001186f, 0.001273f, 0.001326f,
+ 0.001397f, 0.001534f, 0.001561f, 0.001685f, 0.001775f, 0.001873f, 0.002024f, 0.002153f, 0.002272f, 0.002443f, 0.002611f, 0.002800f,
+ 0.003014f, 0.003250f, 0.003529f, 0.003868f, 0.004227f, 0.004692f, 0.005192f, 0.005836f, 0.006603f, 0.007587f, 0.008751f, 0.010193f,
+ 0.012001f, 0.014610f, 0.018219f, 0.023392f, 0.030594f, 0.039795f, 0.437744f, 0.498291f, 0.512207f, 0.517578f, 0.521484f, 0.525391f,
+ 0.000102f, 0.000186f, 0.000171f, 0.000181f, 0.000227f, 0.000229f, 0.000231f, 0.000278f, 0.000293f, 0.000304f, 0.000314f, 0.000375f,
+ 0.000365f, 0.000411f, 0.000446f, 0.000457f, 0.000496f, 0.000513f, 0.000533f, 0.000554f, 0.000603f, 0.000622f, 0.000669f, 0.000708f,
+ 0.000757f, 0.000789f, 0.000843f, 0.000875f, 0.000925f, 0.000964f, 0.001037f, 0.001094f, 0.001172f, 0.001243f, 0.001324f, 0.001373f,
+ 0.001497f, 0.001570f, 0.001712f, 0.001829f, 0.001947f, 0.002123f, 0.002291f, 0.002472f, 0.002703f, 0.003008f, 0.003342f, 0.003757f,
+ 0.004204f, 0.004810f, 0.005539f, 0.006554f, 0.007828f, 0.009537f, 0.011894f, 0.015442f, 0.021072f, 0.029282f, 0.424561f, 0.486084f,
+ 0.500488f, 0.506836f, 0.512207f, 0.514648f, 0.000014f, 0.000127f, 0.000112f, 0.000109f, 0.000143f, 0.000165f, 0.000141f, 0.000180f,
+ 0.000185f, 0.000191f, 0.000196f, 0.000203f, 0.000233f, 0.000252f, 0.000260f, 0.000274f, 0.000288f, 0.000314f, 0.000328f, 0.000363f,
+ 0.000362f, 0.000374f, 0.000400f, 0.000436f, 0.000464f, 0.000501f, 0.000504f, 0.000521f, 0.000563f, 0.000593f, 0.000635f, 0.000671f,
+ 0.000712f, 0.000740f, 0.000800f, 0.000837f, 0.000892f, 0.000955f, 0.001030f, 0.001092f, 0.001167f, 0.001270f, 0.001369f, 0.001491f,
+ 0.001626f, 0.001769f, 0.001993f, 0.002209f, 0.002523f, 0.002863f, 0.003325f, 0.003880f, 0.004715f, 0.005764f, 0.007320f, 0.009468f,
+ 0.013344f, 0.020187f, 0.410645f, 0.473877f, 0.489258f, 0.496826f, 0.500488f, 0.503906f, 0.000103f, 0.000078f, 0.000067f, 0.000065f,
+ 0.000086f, 0.000085f, 0.000101f, 0.000106f, 0.000106f, 0.000107f, 0.000115f, 0.000133f, 0.000118f, 0.000133f, 0.000154f, 0.000150f,
+ 0.000167f, 0.000177f, 0.000180f, 0.000190f, 0.000207f, 0.000213f, 0.000228f, 0.000238f, 0.000267f, 0.000277f, 0.000287f, 0.000298f,
+ 0.000313f, 0.000325f, 0.000347f, 0.000375f, 0.000393f, 0.000405f, 0.000440f, 0.000463f, 0.000486f, 0.000527f, 0.000562f, 0.000599f,
+ 0.000639f, 0.000688f, 0.000757f, 0.000807f, 0.000879f, 0.000961f, 0.001059f, 0.001180f, 0.001342f, 0.001533f, 0.001762f, 0.002102f,
+ 0.002502f, 0.003128f, 0.004028f, 0.005379f, 0.007591f, 0.012505f, 0.397217f, 0.462891f, 0.478760f, 0.485840f, 0.490479f, 0.492676f,
+ 0.000087f, 0.000063f, 0.000054f, 0.000048f, 0.000047f, 0.000044f, 0.000046f, 0.000047f, 0.000047f, 0.000060f, 0.000053f, 0.000056f,
+ 0.000072f, 0.000060f, 0.000064f, 0.000069f, 0.000078f, 0.000085f, 0.000084f, 0.000090f, 0.000094f, 0.000102f, 0.000105f, 0.000111f,
+ 0.000116f, 0.000126f, 0.000132f, 0.000150f, 0.000147f, 0.000158f, 0.000167f, 0.000178f, 0.000185f, 0.000192f, 0.000211f, 0.000216f,
+ 0.000226f, 0.000246f, 0.000265f, 0.000284f, 0.000299f, 0.000325f, 0.000349f, 0.000381f, 0.000415f, 0.000448f, 0.000490f, 0.000544f,
+ 0.000612f, 0.000694f, 0.000798f, 0.000943f, 0.001139f, 0.001436f, 0.001870f, 0.002586f, 0.003817f, 0.006474f, 0.383545f, 0.450195f,
+ 0.467041f, 0.474365f, 0.478760f, 0.482422f, 0.000065f, 0.000045f, 0.000037f, 0.000033f, 0.000030f, 0.000028f, 0.000026f, 0.000025f,
+ 0.000024f, 0.000022f, 0.000021f, 0.000025f, 0.000020f, 0.000021f, 0.000025f, 0.000029f, 0.000028f, 0.000031f, 0.000033f, 0.000034f,
+ 0.000036f, 0.000041f, 0.000045f, 0.000040f, 0.000045f, 0.000049f, 0.000051f, 0.000048f, 0.000055f, 0.000057f, 0.000061f, 0.000066f,
+ 0.000072f, 0.000068f, 0.000073f, 0.000078f, 0.000087f, 0.000089f, 0.000097f, 0.000104f, 0.000113f, 0.000115f, 0.000128f, 0.000137f,
+ 0.000148f, 0.000160f, 0.000174f, 0.000194f, 0.000221f, 0.000248f, 0.000283f, 0.000324f, 0.000396f, 0.000496f, 0.000657f, 0.000928f,
+ 0.001479f, 0.002684f, 0.371094f, 0.438477f, 0.455078f, 0.463867f, 0.468750f, 0.471191f, 0.000029f, 0.000019f, 0.000016f, 0.000014f,
+ 0.000014f, 0.000013f, 0.000012f, 0.000012f, 0.000012f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000010f, 0.000010f, 0.000010f,
+ 0.000009f, 0.000009f, 0.000009f, 0.000008f, 0.000008f, 0.000007f, 0.000008f, 0.000007f, 0.000008f, 0.000009f, 0.000010f, 0.000011f,
+ 0.000012f, 0.000011f, 0.000012f, 0.000013f, 0.000015f, 0.000017f, 0.000018f, 0.000018f, 0.000020f, 0.000019f, 0.000021f, 0.000024f,
+ 0.000024f, 0.000026f, 0.000028f, 0.000031f, 0.000031f, 0.000035f, 0.000040f, 0.000041f, 0.000045f, 0.000052f, 0.000059f, 0.000071f,
+ 0.000083f, 0.000099f, 0.000132f, 0.000188f, 0.000315f, 0.000712f, 0.356934f, 0.426514f, 0.444824f, 0.452637f, 0.457520f, 0.460938f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000001f, 0.000002f, 0.000002f,
+ 0.000002f, 0.000002f, 0.000003f, 0.000003f, 0.000003f, 0.000004f, 0.000004f, 0.000006f, 0.000010f, 0.000027f, 0.343750f, 0.414795f,
+ 0.433105f, 0.441895f, 0.446289f, 0.449951f,
+ },
+ {
+ 0.012436f, 0.037598f, 0.062805f, 0.087891f, 0.113037f, 0.137329f, 0.161621f, 0.185425f, 0.209717f, 0.232544f, 0.255371f, 0.278076f,
+ 0.300049f, 0.321289f, 0.343506f, 0.364014f, 0.385010f, 0.404785f, 0.424561f, 0.444824f, 0.463623f, 0.482422f, 0.501465f, 0.520020f,
+ 0.537598f, 0.554688f, 0.572266f, 0.589355f, 0.605957f, 0.622070f, 0.639648f, 0.655273f, 0.670410f, 0.685547f, 0.700684f, 0.715332f,
+ 0.730469f, 0.744629f, 0.758301f, 0.771973f, 0.785156f, 0.799316f, 0.812012f, 0.825684f, 0.837891f, 0.850586f, 0.863281f, 0.875000f,
+ 0.887207f, 0.898926f, 0.910156f, 0.921387f, 0.933105f, 0.944336f, 0.954102f, 0.964844f, 0.976074f, 0.985840f, 0.978027f, 0.947266f,
+ 0.925781f, 0.907715f, 0.892090f, 0.877930f, 0.011276f, 0.034546f, 0.058289f, 0.082031f, 0.105469f, 0.128662f, 0.152344f, 0.174805f,
+ 0.197876f, 0.219604f, 0.241455f, 0.263672f, 0.284912f, 0.306152f, 0.326416f, 0.347168f, 0.366699f, 0.387695f, 0.406494f, 0.426025f,
+ 0.444824f, 0.463379f, 0.481934f, 0.500000f, 0.518066f, 0.535645f, 0.552246f, 0.569824f, 0.586426f, 0.603027f, 0.619141f, 0.634766f,
+ 0.650391f, 0.666016f, 0.681152f, 0.695801f, 0.710938f, 0.725586f, 0.739258f, 0.753906f, 0.768066f, 0.781250f, 0.794922f, 0.807617f,
+ 0.821289f, 0.833496f, 0.846191f, 0.858398f, 0.870605f, 0.882812f, 0.894531f, 0.906250f, 0.917480f, 0.929199f, 0.939453f, 0.951660f,
+ 0.961426f, 0.972656f, 0.971680f, 0.942871f, 0.921875f, 0.904785f, 0.889160f, 0.875977f, 0.010628f, 0.032288f, 0.054932f, 0.076172f,
+ 0.099060f, 0.121216f, 0.142700f, 0.164795f, 0.186279f, 0.207642f, 0.229248f, 0.249756f, 0.269531f, 0.291016f, 0.310791f, 0.331543f,
+ 0.349609f, 0.369385f, 0.388916f, 0.409180f, 0.427246f, 0.444824f, 0.463135f, 0.480713f, 0.499512f, 0.516602f, 0.533203f, 0.550293f,
+ 0.567383f, 0.583496f, 0.599609f, 0.615723f, 0.630859f, 0.646973f, 0.661621f, 0.677246f, 0.691895f, 0.705566f, 0.720703f, 0.735352f,
+ 0.749512f, 0.763184f, 0.776367f, 0.790039f, 0.803223f, 0.816406f, 0.828613f, 0.842285f, 0.854492f, 0.867676f, 0.878418f, 0.890137f,
+ 0.902832f, 0.913086f, 0.925293f, 0.936035f, 0.947754f, 0.958008f, 0.964844f, 0.937500f, 0.917480f, 0.901367f, 0.886719f, 0.873535f,
+ 0.009926f, 0.030167f, 0.050995f, 0.071594f, 0.092346f, 0.113892f, 0.134399f, 0.154663f, 0.175537f, 0.195679f, 0.216309f, 0.235840f,
+ 0.256104f, 0.276611f, 0.295654f, 0.314453f, 0.333496f, 0.353027f, 0.370850f, 0.389404f, 0.408936f, 0.427490f, 0.445312f, 0.462891f,
+ 0.480225f, 0.497803f, 0.513672f, 0.531250f, 0.547363f, 0.563965f, 0.580078f, 0.597168f, 0.612305f, 0.627930f, 0.642578f, 0.658691f,
+ 0.673340f, 0.687500f, 0.702637f, 0.717285f, 0.731445f, 0.744629f, 0.758301f, 0.772461f, 0.786133f, 0.799316f, 0.811523f, 0.824707f,
+ 0.837891f, 0.849121f, 0.861816f, 0.874023f, 0.887207f, 0.898438f, 0.910156f, 0.920898f, 0.932617f, 0.943848f, 0.958008f, 0.932129f,
+ 0.913086f, 0.897461f, 0.883301f, 0.871094f, 0.009178f, 0.028107f, 0.047729f, 0.066895f, 0.086182f, 0.106384f, 0.125977f, 0.145386f,
+ 0.165527f, 0.184937f, 0.203857f, 0.224121f, 0.242676f, 0.261475f, 0.281006f, 0.300049f, 0.318604f, 0.336426f, 0.355469f, 0.372314f,
+ 0.391113f, 0.409424f, 0.426514f, 0.444092f, 0.461426f, 0.477783f, 0.495850f, 0.512207f, 0.528809f, 0.544434f, 0.561035f, 0.576660f,
+ 0.593262f, 0.608398f, 0.623047f, 0.638184f, 0.655273f, 0.668945f, 0.682617f, 0.697754f, 0.712402f, 0.726562f, 0.740234f, 0.753906f,
+ 0.768066f, 0.781250f, 0.794434f, 0.807617f, 0.820312f, 0.833496f, 0.845215f, 0.858398f, 0.870605f, 0.881836f, 0.894043f, 0.906738f,
+ 0.917480f, 0.928711f, 0.951172f, 0.926758f, 0.909180f, 0.893555f, 0.880859f, 0.868164f, 0.008667f, 0.025986f, 0.044922f, 0.062805f,
+ 0.081421f, 0.099854f, 0.118347f, 0.137085f, 0.155518f, 0.173828f, 0.193115f, 0.211304f, 0.229858f, 0.248413f, 0.266602f, 0.285400f,
+ 0.303223f, 0.321045f, 0.339111f, 0.357178f, 0.373779f, 0.391357f, 0.409424f, 0.426270f, 0.443115f, 0.460449f, 0.476807f, 0.494141f,
+ 0.510254f, 0.526855f, 0.541992f, 0.559082f, 0.574219f, 0.589355f, 0.605469f, 0.620117f, 0.636230f, 0.649902f, 0.664551f, 0.678711f,
+ 0.693848f, 0.707031f, 0.723145f, 0.736328f, 0.750977f, 0.762695f, 0.776855f, 0.790039f, 0.803223f, 0.816406f, 0.828613f, 0.842285f,
+ 0.853516f, 0.866211f, 0.878906f, 0.890625f, 0.902832f, 0.913574f, 0.944336f, 0.921875f, 0.903809f, 0.889160f, 0.876953f, 0.865234f,
+ 0.008057f, 0.024658f, 0.041321f, 0.058411f, 0.075989f, 0.093811f, 0.110535f, 0.128784f, 0.146729f, 0.164307f, 0.182007f, 0.200073f,
+ 0.217773f, 0.234619f, 0.252930f, 0.271240f, 0.288086f, 0.306152f, 0.322998f, 0.341064f, 0.357910f, 0.374756f, 0.391357f, 0.409180f,
+ 0.425293f, 0.442383f, 0.458496f, 0.475342f, 0.491455f, 0.507324f, 0.523438f, 0.539551f, 0.555176f, 0.570312f, 0.585938f, 0.601074f,
+ 0.616699f, 0.631836f, 0.646484f, 0.660645f, 0.676270f, 0.688477f, 0.704102f, 0.718262f, 0.731445f, 0.745117f, 0.760254f, 0.771484f,
+ 0.785156f, 0.799316f, 0.812500f, 0.824707f, 0.836914f, 0.850098f, 0.862793f, 0.874512f, 0.886719f, 0.898438f, 0.937500f, 0.915527f,
+ 0.899414f, 0.885254f, 0.872559f, 0.861816f, 0.007477f, 0.022919f, 0.038971f, 0.054901f, 0.070801f, 0.087646f, 0.104065f, 0.121155f,
+ 0.137573f, 0.155029f, 0.171875f, 0.188721f, 0.206177f, 0.222778f, 0.240112f, 0.257080f, 0.274170f, 0.290283f, 0.308350f, 0.324463f,
+ 0.342041f, 0.358154f, 0.375488f, 0.391113f, 0.407471f, 0.424561f, 0.440430f, 0.456787f, 0.474121f, 0.489746f, 0.505371f, 0.521484f,
+ 0.536133f, 0.552246f, 0.565918f, 0.582031f, 0.597168f, 0.613281f, 0.626953f, 0.642578f, 0.656738f, 0.670898f, 0.684570f, 0.699219f,
+ 0.712891f, 0.727539f, 0.741211f, 0.754395f, 0.768066f, 0.781738f, 0.794434f, 0.808105f, 0.820312f, 0.833984f, 0.846680f, 0.858887f,
+ 0.871582f, 0.883301f, 0.930176f, 0.910156f, 0.894043f, 0.880371f, 0.868652f, 0.858398f, 0.007023f, 0.021240f, 0.036224f, 0.051300f,
+ 0.066467f, 0.082092f, 0.097900f, 0.113892f, 0.129517f, 0.145752f, 0.161743f, 0.178223f, 0.194702f, 0.210327f, 0.227661f, 0.243408f,
+ 0.260986f, 0.276855f, 0.292725f, 0.309814f, 0.326172f, 0.342041f, 0.358398f, 0.375732f, 0.391113f, 0.406982f, 0.422852f, 0.438965f,
+ 0.454590f, 0.471191f, 0.486816f, 0.502441f, 0.517578f, 0.533203f, 0.548340f, 0.562988f, 0.578613f, 0.593750f, 0.609375f, 0.623535f,
+ 0.638184f, 0.652832f, 0.666992f, 0.680664f, 0.695312f, 0.708984f, 0.722656f, 0.736816f, 0.750000f, 0.764160f, 0.777344f, 0.789551f,
+ 0.803223f, 0.816895f, 0.830078f, 0.842773f, 0.854980f, 0.868652f, 0.922852f, 0.904297f, 0.889160f, 0.875977f, 0.864746f, 0.854492f,
+ 0.006458f, 0.019913f, 0.033691f, 0.048126f, 0.062744f, 0.077026f, 0.092224f, 0.106567f, 0.122192f, 0.137207f, 0.152222f, 0.167725f,
+ 0.183838f, 0.199951f, 0.215088f, 0.231323f, 0.246826f, 0.262695f, 0.279053f, 0.294678f, 0.310547f, 0.326172f, 0.342041f, 0.358887f,
+ 0.374268f, 0.389893f, 0.405518f, 0.421143f, 0.437012f, 0.452637f, 0.467773f, 0.483643f, 0.499512f, 0.513672f, 0.529785f, 0.545410f,
+ 0.560059f, 0.575195f, 0.590332f, 0.604980f, 0.618652f, 0.634277f, 0.648438f, 0.662598f, 0.676270f, 0.690918f, 0.704102f, 0.718750f,
+ 0.732422f, 0.745605f, 0.760254f, 0.773438f, 0.786621f, 0.801270f, 0.812988f, 0.826172f, 0.839844f, 0.851562f, 0.915527f, 0.897949f,
+ 0.883789f, 0.871094f, 0.860352f, 0.850586f, 0.006077f, 0.018921f, 0.031464f, 0.045258f, 0.058411f, 0.072144f, 0.085999f, 0.100220f,
+ 0.114258f, 0.129028f, 0.143677f, 0.158691f, 0.173584f, 0.188477f, 0.203247f, 0.219238f, 0.234497f, 0.249634f, 0.264893f, 0.280273f,
+ 0.295410f, 0.310791f, 0.326904f, 0.342285f, 0.357910f, 0.373535f, 0.388428f, 0.404053f, 0.420166f, 0.435303f, 0.450195f, 0.465332f,
+ 0.481201f, 0.496338f, 0.511230f, 0.525879f, 0.540527f, 0.556641f, 0.570312f, 0.585938f, 0.600098f, 0.614746f, 0.629883f, 0.644531f,
+ 0.657715f, 0.672363f, 0.687012f, 0.700684f, 0.714355f, 0.729004f, 0.742188f, 0.755371f, 0.769531f, 0.782227f, 0.796875f, 0.810059f,
+ 0.823242f, 0.836426f, 0.907715f, 0.891602f, 0.877930f, 0.866211f, 0.855957f, 0.846680f, 0.005596f, 0.017654f, 0.029587f, 0.041840f,
+ 0.055115f, 0.067871f, 0.080566f, 0.093994f, 0.107361f, 0.120911f, 0.134766f, 0.149414f, 0.163452f, 0.177979f, 0.192261f, 0.206787f,
+ 0.221191f, 0.236816f, 0.250732f, 0.266113f, 0.281250f, 0.295898f, 0.311279f, 0.326904f, 0.342041f, 0.356201f, 0.371826f, 0.387451f,
+ 0.402344f, 0.417236f, 0.432373f, 0.447266f, 0.462891f, 0.477539f, 0.492432f, 0.506836f, 0.522949f, 0.536621f, 0.551758f, 0.566895f,
+ 0.582031f, 0.596191f, 0.610352f, 0.625488f, 0.640625f, 0.653320f, 0.668457f, 0.682617f, 0.696777f, 0.710449f, 0.724609f, 0.739258f,
+ 0.751465f, 0.765625f, 0.780273f, 0.792480f, 0.806152f, 0.820801f, 0.899902f, 0.885742f, 0.872070f, 0.861328f, 0.851562f, 0.842285f,
+ 0.005451f, 0.016479f, 0.028259f, 0.039856f, 0.051331f, 0.063416f, 0.075867f, 0.088196f, 0.100952f, 0.113770f, 0.126953f, 0.140747f,
+ 0.153564f, 0.167847f, 0.181519f, 0.195679f, 0.210083f, 0.223633f, 0.237427f, 0.252197f, 0.267334f, 0.281738f, 0.296143f, 0.311035f,
+ 0.325928f, 0.340332f, 0.355469f, 0.370361f, 0.385010f, 0.400635f, 0.415039f, 0.429688f, 0.444092f, 0.459717f, 0.474121f, 0.489258f,
+ 0.503906f, 0.519043f, 0.533203f, 0.548828f, 0.562012f, 0.577637f, 0.591797f, 0.606445f, 0.621582f, 0.635742f, 0.650391f, 0.664551f,
+ 0.678223f, 0.692871f, 0.706055f, 0.721191f, 0.733887f, 0.747559f, 0.762207f, 0.775879f, 0.791016f, 0.804199f, 0.892090f, 0.878906f,
+ 0.866699f, 0.855957f, 0.846191f, 0.837891f, 0.004963f, 0.015343f, 0.026169f, 0.037079f, 0.047943f, 0.059570f, 0.070801f, 0.083008f,
+ 0.095093f, 0.106750f, 0.119507f, 0.132080f, 0.145142f, 0.158569f, 0.171143f, 0.184692f, 0.198730f, 0.211792f, 0.225830f, 0.239380f,
+ 0.253662f, 0.267578f, 0.281738f, 0.295898f, 0.309814f, 0.324219f, 0.340088f, 0.353760f, 0.368164f, 0.383057f, 0.397705f, 0.412842f,
+ 0.426758f, 0.441406f, 0.456787f, 0.470947f, 0.485352f, 0.500000f, 0.515137f, 0.529785f, 0.543945f, 0.559082f, 0.572754f, 0.588379f,
+ 0.602539f, 0.616699f, 0.631348f, 0.645996f, 0.659180f, 0.674805f, 0.689453f, 0.703125f, 0.716797f, 0.729980f, 0.744629f, 0.758789f,
+ 0.772461f, 0.786621f, 0.883789f, 0.872070f, 0.860840f, 0.850586f, 0.841309f, 0.833008f, 0.004726f, 0.014549f, 0.024109f, 0.034668f,
+ 0.044708f, 0.055573f, 0.066467f, 0.077820f, 0.088928f, 0.100342f, 0.112000f, 0.124390f, 0.136230f, 0.148804f, 0.161621f, 0.173950f,
+ 0.186768f, 0.200439f, 0.213623f, 0.226074f, 0.239868f, 0.253418f, 0.267090f, 0.281250f, 0.295410f, 0.309570f, 0.323486f, 0.337891f,
+ 0.352295f, 0.365967f, 0.381104f, 0.394775f, 0.409180f, 0.423828f, 0.438477f, 0.452881f, 0.467773f, 0.481689f, 0.496582f, 0.511230f,
+ 0.525391f, 0.539551f, 0.554199f, 0.568848f, 0.583984f, 0.599121f, 0.612305f, 0.627441f, 0.641113f, 0.656250f, 0.669922f, 0.684570f,
+ 0.699219f, 0.713379f, 0.727539f, 0.741699f, 0.755859f, 0.771484f, 0.875488f, 0.865723f, 0.854492f, 0.845215f, 0.836426f, 0.828613f,
+ 0.004452f, 0.013359f, 0.022690f, 0.032745f, 0.042297f, 0.051910f, 0.061920f, 0.072693f, 0.083496f, 0.094177f, 0.105408f, 0.116760f,
+ 0.128174f, 0.140137f, 0.151855f, 0.164185f, 0.176758f, 0.189087f, 0.201660f, 0.214478f, 0.227173f, 0.240356f, 0.253906f, 0.267578f,
+ 0.280273f, 0.294922f, 0.307373f, 0.321045f, 0.336670f, 0.350098f, 0.363770f, 0.378174f, 0.392334f, 0.406006f, 0.420410f, 0.434082f,
+ 0.448975f, 0.463623f, 0.478271f, 0.492676f, 0.506836f, 0.520996f, 0.536133f, 0.550781f, 0.565430f, 0.580078f, 0.593750f, 0.608887f,
+ 0.623047f, 0.638184f, 0.651367f, 0.666016f, 0.681152f, 0.695312f, 0.709473f, 0.723145f, 0.738281f, 0.752930f, 0.867676f, 0.858398f,
+ 0.848633f, 0.839355f, 0.831055f, 0.823730f, 0.004143f, 0.012794f, 0.021713f, 0.030396f, 0.039551f, 0.048645f, 0.058563f, 0.068176f,
+ 0.078308f, 0.088928f, 0.098328f, 0.109924f, 0.120728f, 0.131592f, 0.142944f, 0.154175f, 0.165771f, 0.178223f, 0.190186f, 0.202881f,
+ 0.214844f, 0.227417f, 0.240845f, 0.253906f, 0.265869f, 0.279541f, 0.293213f, 0.305908f, 0.320068f, 0.333496f, 0.347168f, 0.361816f,
+ 0.375000f, 0.389160f, 0.403320f, 0.417236f, 0.431396f, 0.444824f, 0.459473f, 0.473633f, 0.488525f, 0.503418f, 0.517578f, 0.532227f,
+ 0.545410f, 0.560547f, 0.575684f, 0.590332f, 0.604004f, 0.618652f, 0.632812f, 0.647949f, 0.663086f, 0.676758f, 0.691895f, 0.706543f,
+ 0.721191f, 0.735840f, 0.859375f, 0.852539f, 0.842773f, 0.833496f, 0.824707f, 0.818848f, 0.003839f, 0.012062f, 0.020126f, 0.028366f,
+ 0.036774f, 0.045593f, 0.054718f, 0.063416f, 0.073120f, 0.082825f, 0.092957f, 0.102966f, 0.113464f, 0.123535f, 0.134277f, 0.145020f,
+ 0.155762f, 0.167847f, 0.179199f, 0.190796f, 0.202393f, 0.214844f, 0.227417f, 0.239868f, 0.252197f, 0.264648f, 0.277588f, 0.291016f,
+ 0.304199f, 0.317383f, 0.330811f, 0.343750f, 0.357422f, 0.371826f, 0.385254f, 0.399902f, 0.413574f, 0.427246f, 0.441162f, 0.455566f,
+ 0.469971f, 0.484375f, 0.498535f, 0.514160f, 0.527344f, 0.541992f, 0.556152f, 0.570312f, 0.585449f, 0.600098f, 0.614746f, 0.629883f,
+ 0.645508f, 0.658203f, 0.673340f, 0.688477f, 0.703125f, 0.718262f, 0.851074f, 0.844727f, 0.835938f, 0.827637f, 0.820312f, 0.812988f,
+ 0.003786f, 0.011147f, 0.018921f, 0.026550f, 0.034729f, 0.042664f, 0.051117f, 0.060028f, 0.068298f, 0.077454f, 0.086914f, 0.096130f,
+ 0.105835f, 0.115662f, 0.126343f, 0.136475f, 0.146606f, 0.157715f, 0.168457f, 0.180176f, 0.191528f, 0.202759f, 0.215088f, 0.226929f,
+ 0.239014f, 0.251221f, 0.263428f, 0.275391f, 0.289062f, 0.301514f, 0.314941f, 0.328369f, 0.341797f, 0.354736f, 0.367676f, 0.382324f,
+ 0.395264f, 0.409912f, 0.423340f, 0.437012f, 0.451660f, 0.465576f, 0.480469f, 0.494629f, 0.508301f, 0.522949f, 0.538086f, 0.551758f,
+ 0.567383f, 0.582031f, 0.596191f, 0.610840f, 0.625977f, 0.639648f, 0.655273f, 0.670410f, 0.685547f, 0.700684f, 0.842285f, 0.837402f,
+ 0.829590f, 0.821289f, 0.813965f, 0.808105f, 0.003504f, 0.010445f, 0.017609f, 0.025131f, 0.032349f, 0.040314f, 0.047485f, 0.055756f,
+ 0.064026f, 0.072571f, 0.080872f, 0.089661f, 0.099426f, 0.108459f, 0.118286f, 0.127930f, 0.137817f, 0.147583f, 0.158203f, 0.169189f,
+ 0.180908f, 0.191040f, 0.203003f, 0.214111f, 0.225708f, 0.237549f, 0.249023f, 0.261475f, 0.273926f, 0.286865f, 0.299316f, 0.311768f,
+ 0.325684f, 0.338623f, 0.351562f, 0.364746f, 0.378418f, 0.392578f, 0.405518f, 0.419678f, 0.433105f, 0.447998f, 0.461670f, 0.475830f,
+ 0.490479f, 0.503906f, 0.519531f, 0.533203f, 0.547852f, 0.562988f, 0.576660f, 0.591797f, 0.606445f, 0.622070f, 0.636719f, 0.652344f,
+ 0.666504f, 0.682617f, 0.833496f, 0.830078f, 0.822754f, 0.815918f, 0.808594f, 0.802734f, 0.003447f, 0.009941f, 0.016373f, 0.023300f,
+ 0.030228f, 0.037689f, 0.044128f, 0.052551f, 0.059845f, 0.068115f, 0.076538f, 0.083862f, 0.092896f, 0.101440f, 0.110596f, 0.119995f,
+ 0.129028f, 0.138916f, 0.148926f, 0.158936f, 0.169189f, 0.180176f, 0.190308f, 0.201416f, 0.212769f, 0.224365f, 0.235962f, 0.247192f,
+ 0.259033f, 0.271973f, 0.283936f, 0.296631f, 0.309570f, 0.321777f, 0.334961f, 0.348389f, 0.361572f, 0.374756f, 0.388184f, 0.401611f,
+ 0.415771f, 0.429443f, 0.443359f, 0.457520f, 0.471436f, 0.486084f, 0.500977f, 0.514648f, 0.528809f, 0.543457f, 0.558594f, 0.573242f,
+ 0.588867f, 0.603516f, 0.617676f, 0.633301f, 0.648926f, 0.664551f, 0.824219f, 0.823242f, 0.815918f, 0.809082f, 0.802246f, 0.796387f,
+ 0.003141f, 0.009407f, 0.015251f, 0.021851f, 0.028107f, 0.034882f, 0.041779f, 0.048340f, 0.056244f, 0.062988f, 0.071106f, 0.078796f,
+ 0.087036f, 0.094910f, 0.103149f, 0.112305f, 0.121460f, 0.130371f, 0.139404f, 0.149048f, 0.159180f, 0.169189f, 0.179565f, 0.189087f,
+ 0.200317f, 0.211548f, 0.222412f, 0.233765f, 0.245117f, 0.257324f, 0.269043f, 0.281006f, 0.293213f, 0.305664f, 0.318848f, 0.331055f,
+ 0.343750f, 0.358398f, 0.369873f, 0.384033f, 0.397217f, 0.411865f, 0.424805f, 0.438965f, 0.453125f, 0.467529f, 0.481689f, 0.495850f,
+ 0.510254f, 0.524414f, 0.539551f, 0.554688f, 0.569824f, 0.584961f, 0.599121f, 0.614258f, 0.629883f, 0.645020f, 0.815430f, 0.814453f,
+ 0.809570f, 0.802734f, 0.796875f, 0.791504f, 0.002838f, 0.008461f, 0.014236f, 0.020676f, 0.026749f, 0.032593f, 0.039032f, 0.045715f,
+ 0.052216f, 0.059479f, 0.066467f, 0.073608f, 0.080933f, 0.088623f, 0.096619f, 0.104919f, 0.113098f, 0.121521f, 0.130493f, 0.139526f,
+ 0.148560f, 0.158203f, 0.167969f, 0.177979f, 0.187988f, 0.198730f, 0.208862f, 0.220093f, 0.231323f, 0.242798f, 0.253906f, 0.265869f,
+ 0.278320f, 0.289551f, 0.302246f, 0.314941f, 0.327393f, 0.340088f, 0.353516f, 0.365967f, 0.379883f, 0.392822f, 0.406738f, 0.420898f,
+ 0.434814f, 0.447998f, 0.462891f, 0.477539f, 0.491455f, 0.506836f, 0.520996f, 0.536133f, 0.550781f, 0.565918f, 0.581055f, 0.596680f,
+ 0.611816f, 0.627441f, 0.806152f, 0.807617f, 0.801270f, 0.796387f, 0.790039f, 0.784668f, 0.002689f, 0.008102f, 0.013618f, 0.019058f,
+ 0.024719f, 0.030548f, 0.036560f, 0.042725f, 0.048615f, 0.054779f, 0.061615f, 0.068604f, 0.075012f, 0.082703f, 0.090271f, 0.097900f,
+ 0.105530f, 0.113586f, 0.121826f, 0.130371f, 0.139282f, 0.147705f, 0.157349f, 0.166504f, 0.176147f, 0.186401f, 0.196289f, 0.207520f,
+ 0.217651f, 0.228394f, 0.239868f, 0.251465f, 0.262451f, 0.274414f, 0.286377f, 0.298828f, 0.311035f, 0.323730f, 0.336670f, 0.349121f,
+ 0.362549f, 0.375244f, 0.389160f, 0.402344f, 0.417236f, 0.429932f, 0.443848f, 0.458984f, 0.472168f, 0.487793f, 0.501953f, 0.517578f,
+ 0.531738f, 0.546875f, 0.561523f, 0.576660f, 0.593262f, 0.608398f, 0.797852f, 0.798828f, 0.794922f, 0.789551f, 0.784668f, 0.779297f,
+ 0.002666f, 0.007462f, 0.012596f, 0.018066f, 0.023026f, 0.028412f, 0.033813f, 0.039398f, 0.045166f, 0.051239f, 0.057587f, 0.063721f,
+ 0.070312f, 0.077148f, 0.084167f, 0.090820f, 0.098267f, 0.105591f, 0.113159f, 0.121460f, 0.129761f, 0.138428f, 0.147217f, 0.156128f,
+ 0.165283f, 0.174438f, 0.183960f, 0.194092f, 0.204834f, 0.214844f, 0.225830f, 0.236816f, 0.247925f, 0.259033f, 0.270752f, 0.282227f,
+ 0.294678f, 0.306641f, 0.319336f, 0.332031f, 0.344482f, 0.357910f, 0.371094f, 0.384033f, 0.398682f, 0.412109f, 0.425781f, 0.440186f,
+ 0.454102f, 0.468018f, 0.482910f, 0.497314f, 0.512207f, 0.528320f, 0.542969f, 0.558594f, 0.573242f, 0.589355f, 0.787598f, 0.791016f,
+ 0.787109f, 0.781738f, 0.777344f, 0.772461f, 0.002569f, 0.007069f, 0.012199f, 0.016739f, 0.021393f, 0.026672f, 0.031189f, 0.037109f,
+ 0.042480f, 0.047729f, 0.053345f, 0.059387f, 0.065430f, 0.071838f, 0.078186f, 0.084167f, 0.091492f, 0.098816f, 0.105774f, 0.112976f,
+ 0.121155f, 0.129028f, 0.136963f, 0.145508f, 0.153687f, 0.163086f, 0.172363f, 0.181885f, 0.191406f, 0.201782f, 0.211670f, 0.222412f,
+ 0.233032f, 0.244263f, 0.255371f, 0.266846f, 0.278809f, 0.290527f, 0.302734f, 0.314697f, 0.327393f, 0.340820f, 0.353027f, 0.366455f,
+ 0.380127f, 0.393799f, 0.406006f, 0.421143f, 0.435059f, 0.449707f, 0.463623f, 0.479248f, 0.494141f, 0.509277f, 0.523438f, 0.539551f,
+ 0.555176f, 0.570801f, 0.778320f, 0.783203f, 0.779785f, 0.775879f, 0.770996f, 0.767090f, 0.002398f, 0.006733f, 0.010918f, 0.015495f,
+ 0.020203f, 0.024963f, 0.029663f, 0.034485f, 0.039246f, 0.044678f, 0.049896f, 0.055267f, 0.060486f, 0.066345f, 0.072693f, 0.078857f,
+ 0.085083f, 0.091370f, 0.097961f, 0.105530f, 0.112244f, 0.119629f, 0.127563f, 0.135376f, 0.143799f, 0.152100f, 0.160889f, 0.169922f,
+ 0.178833f, 0.188843f, 0.198608f, 0.208496f, 0.218628f, 0.229492f, 0.240479f, 0.251953f, 0.262695f, 0.274902f, 0.286377f, 0.298340f,
+ 0.310547f, 0.323242f, 0.335693f, 0.349365f, 0.362061f, 0.375000f, 0.388916f, 0.402832f, 0.416748f, 0.430420f, 0.445068f, 0.459473f,
+ 0.474854f, 0.489258f, 0.504883f, 0.519531f, 0.535645f, 0.551758f, 0.769043f, 0.774902f, 0.771973f, 0.768555f, 0.764160f, 0.759766f,
+ 0.002062f, 0.006191f, 0.010384f, 0.014786f, 0.018402f, 0.023270f, 0.027435f, 0.031891f, 0.036163f, 0.041199f, 0.045685f, 0.051208f,
+ 0.056244f, 0.061371f, 0.066772f, 0.072510f, 0.078369f, 0.084656f, 0.091125f, 0.097290f, 0.104309f, 0.111145f, 0.118164f, 0.126221f,
+ 0.133301f, 0.141724f, 0.149658f, 0.157837f, 0.167236f, 0.176025f, 0.185547f, 0.195190f, 0.205444f, 0.215332f, 0.225830f, 0.236084f,
+ 0.247314f, 0.259033f, 0.270020f, 0.281982f, 0.293701f, 0.305908f, 0.318848f, 0.331787f, 0.344482f, 0.357178f, 0.370361f, 0.384521f,
+ 0.397461f, 0.411621f, 0.426025f, 0.440674f, 0.455322f, 0.470703f, 0.485596f, 0.500977f, 0.517578f, 0.532227f, 0.759277f, 0.766602f,
+ 0.764160f, 0.761230f, 0.757324f, 0.753418f, 0.002064f, 0.005859f, 0.009613f, 0.013626f, 0.017456f, 0.021606f, 0.025574f, 0.029526f,
+ 0.034302f, 0.038422f, 0.042938f, 0.047485f, 0.052155f, 0.056763f, 0.061951f, 0.067139f, 0.072754f, 0.078308f, 0.084167f, 0.090149f,
+ 0.096191f, 0.102722f, 0.109558f, 0.116699f, 0.123901f, 0.131104f, 0.139160f, 0.146729f, 0.155273f, 0.163940f, 0.173096f, 0.182129f,
+ 0.192017f, 0.201172f, 0.211060f, 0.221558f, 0.232544f, 0.243530f, 0.254150f, 0.266113f, 0.277588f, 0.289307f, 0.301758f, 0.313965f,
+ 0.326904f, 0.338867f, 0.352051f, 0.366211f, 0.379150f, 0.393066f, 0.407471f, 0.421875f, 0.436768f, 0.450439f, 0.466553f, 0.481201f,
+ 0.497314f, 0.513184f, 0.749512f, 0.758301f, 0.756348f, 0.753906f, 0.750000f, 0.746582f, 0.001851f, 0.005405f, 0.009109f, 0.012589f,
+ 0.016129f, 0.020020f, 0.023926f, 0.027481f, 0.031738f, 0.035492f, 0.039734f, 0.044128f, 0.048065f, 0.052765f, 0.057373f, 0.061859f,
+ 0.066711f, 0.072388f, 0.077393f, 0.083130f, 0.088745f, 0.094727f, 0.101135f, 0.107666f, 0.114380f, 0.121704f, 0.128540f, 0.136108f,
+ 0.144043f, 0.151733f, 0.160522f, 0.169678f, 0.178589f, 0.187622f, 0.197998f, 0.207397f, 0.217285f, 0.227905f, 0.238892f, 0.250000f,
+ 0.261230f, 0.272461f, 0.284180f, 0.296387f, 0.308838f, 0.321533f, 0.334473f, 0.347656f, 0.361328f, 0.375000f, 0.388672f, 0.402588f,
+ 0.417969f, 0.432617f, 0.447021f, 0.461914f, 0.478516f, 0.493652f, 0.739258f, 0.749512f, 0.749023f, 0.745605f, 0.742188f, 0.739746f,
+ 0.001666f, 0.005405f, 0.008575f, 0.011696f, 0.015327f, 0.018646f, 0.022293f, 0.025650f, 0.029327f, 0.032776f, 0.036530f, 0.040619f,
+ 0.044128f, 0.048828f, 0.052887f, 0.057098f, 0.061829f, 0.066467f, 0.071350f, 0.076355f, 0.081909f, 0.087341f, 0.092896f, 0.099304f,
+ 0.105469f, 0.112000f, 0.118835f, 0.125977f, 0.133545f, 0.140991f, 0.148438f, 0.156982f, 0.165771f, 0.174805f, 0.183960f, 0.193115f,
+ 0.203369f, 0.212891f, 0.223389f, 0.234497f, 0.244751f, 0.256348f, 0.268066f, 0.279541f, 0.291260f, 0.303955f, 0.316406f, 0.329590f,
+ 0.342529f, 0.355957f, 0.369385f, 0.384766f, 0.398926f, 0.413330f, 0.428467f, 0.442383f, 0.458740f, 0.474609f, 0.728516f, 0.740723f,
+ 0.740234f, 0.738281f, 0.735352f, 0.732910f, 0.001534f, 0.004936f, 0.007980f, 0.011223f, 0.013893f, 0.017212f, 0.020294f, 0.023361f,
+ 0.026688f, 0.030182f, 0.033600f, 0.037537f, 0.040924f, 0.044495f, 0.048340f, 0.052155f, 0.056732f, 0.061035f, 0.065430f, 0.069824f,
+ 0.075073f, 0.080078f, 0.085571f, 0.091003f, 0.096863f, 0.103271f, 0.109009f, 0.115723f, 0.123230f, 0.129639f, 0.137207f, 0.145264f,
+ 0.153320f, 0.161499f, 0.170410f, 0.179688f, 0.189087f, 0.198364f, 0.208740f, 0.218750f, 0.229126f, 0.240356f, 0.251465f, 0.263184f,
+ 0.274902f, 0.286621f, 0.299072f, 0.311768f, 0.324463f, 0.337402f, 0.351074f, 0.364746f, 0.378662f, 0.394287f, 0.408936f, 0.423096f,
+ 0.439453f, 0.455322f, 0.716797f, 0.731934f, 0.732422f, 0.729980f, 0.728027f, 0.725586f, 0.001639f, 0.004337f, 0.007439f, 0.009888f,
+ 0.013092f, 0.015717f, 0.018921f, 0.021805f, 0.024612f, 0.027542f, 0.030762f, 0.034088f, 0.037598f, 0.041107f, 0.044189f, 0.047699f,
+ 0.051666f, 0.055664f, 0.059723f, 0.064148f, 0.068542f, 0.073425f, 0.078003f, 0.083435f, 0.088806f, 0.094360f, 0.100159f, 0.106079f,
+ 0.112915f, 0.119690f, 0.125977f, 0.133667f, 0.141357f, 0.149414f, 0.157349f, 0.166260f, 0.175049f, 0.184326f, 0.193970f, 0.203735f,
+ 0.214355f, 0.224609f, 0.235352f, 0.246460f, 0.257568f, 0.269287f, 0.281738f, 0.294189f, 0.305908f, 0.319824f, 0.332520f, 0.346680f,
+ 0.360596f, 0.375244f, 0.389648f, 0.404297f, 0.419189f, 0.435791f, 0.707520f, 0.723145f, 0.723633f, 0.722656f, 0.720703f, 0.717773f,
+ 0.001469f, 0.004345f, 0.006844f, 0.009483f, 0.012428f, 0.014679f, 0.017166f, 0.019989f, 0.022949f, 0.025574f, 0.028320f, 0.031525f,
+ 0.034088f, 0.037323f, 0.040710f, 0.043762f, 0.047119f, 0.050873f, 0.054352f, 0.058441f, 0.062561f, 0.066711f, 0.071167f, 0.075989f,
+ 0.080627f, 0.086426f, 0.091553f, 0.097473f, 0.103210f, 0.109680f, 0.115723f, 0.122986f, 0.129761f, 0.137451f, 0.145142f, 0.153198f,
+ 0.161621f, 0.170654f, 0.179688f, 0.189087f, 0.198730f, 0.209229f, 0.219604f, 0.230225f, 0.241211f, 0.252197f, 0.264404f, 0.276367f,
+ 0.288574f, 0.301270f, 0.314453f, 0.328125f, 0.341309f, 0.354980f, 0.370117f, 0.385498f, 0.399902f, 0.415771f, 0.696289f, 0.714355f,
+ 0.715820f, 0.714355f, 0.712891f, 0.710449f, 0.001227f, 0.003862f, 0.006245f, 0.008644f, 0.010796f, 0.013344f, 0.015823f, 0.018448f,
+ 0.020645f, 0.023331f, 0.025681f, 0.028305f, 0.030975f, 0.033722f, 0.036987f, 0.039673f, 0.043121f, 0.046112f, 0.049774f, 0.053406f,
+ 0.056854f, 0.060760f, 0.064697f, 0.069397f, 0.073364f, 0.078369f, 0.083313f, 0.088257f, 0.094116f, 0.100098f, 0.105957f, 0.112122f,
+ 0.118774f, 0.125854f, 0.133057f, 0.140869f, 0.148682f, 0.157227f, 0.165405f, 0.174927f, 0.184082f, 0.193726f, 0.204102f, 0.214111f,
+ 0.225098f, 0.236328f, 0.247314f, 0.259277f, 0.270752f, 0.282959f, 0.296143f, 0.309082f, 0.322510f, 0.336426f, 0.350830f, 0.365479f,
+ 0.380371f, 0.396240f, 0.684570f, 0.705078f, 0.706543f, 0.706543f, 0.705078f, 0.703125f, 0.001069f, 0.003525f, 0.006062f, 0.008286f,
+ 0.010178f, 0.012589f, 0.014542f, 0.017075f, 0.019241f, 0.021179f, 0.023499f, 0.026047f, 0.028137f, 0.030762f, 0.033417f, 0.035889f,
+ 0.038757f, 0.041779f, 0.044586f, 0.048309f, 0.051056f, 0.054810f, 0.058777f, 0.062347f, 0.066528f, 0.070740f, 0.075256f, 0.080261f,
+ 0.085205f, 0.090393f, 0.095886f, 0.102478f, 0.108154f, 0.114441f, 0.121399f, 0.128784f, 0.135742f, 0.144165f, 0.151978f, 0.160767f,
+ 0.169434f, 0.178833f, 0.188721f, 0.198608f, 0.208984f, 0.220215f, 0.230957f, 0.241943f, 0.253906f, 0.265869f, 0.278564f, 0.291260f,
+ 0.304443f, 0.318359f, 0.332031f, 0.346680f, 0.361572f, 0.377197f, 0.673828f, 0.695801f, 0.698242f, 0.697754f, 0.697266f, 0.695312f,
+ 0.001211f, 0.003250f, 0.005112f, 0.007195f, 0.009651f, 0.011414f, 0.013641f, 0.015205f, 0.017334f, 0.019608f, 0.021164f, 0.023712f,
+ 0.025726f, 0.027863f, 0.029984f, 0.032410f, 0.035034f, 0.037689f, 0.040466f, 0.042938f, 0.046478f, 0.049591f, 0.052856f, 0.056274f,
+ 0.060089f, 0.063721f, 0.068115f, 0.072266f, 0.076904f, 0.081970f, 0.087036f, 0.092285f, 0.097961f, 0.104309f, 0.110535f, 0.117126f,
+ 0.124084f, 0.131226f, 0.139038f, 0.147095f, 0.155884f, 0.164429f, 0.174194f, 0.183228f, 0.192749f, 0.203491f, 0.214233f, 0.224976f,
+ 0.236206f, 0.247925f, 0.260498f, 0.272705f, 0.285889f, 0.299805f, 0.312988f, 0.327637f, 0.342529f, 0.356934f, 0.662598f, 0.686523f,
+ 0.689453f, 0.689453f, 0.688965f, 0.687500f, 0.001138f, 0.003206f, 0.005180f, 0.007309f, 0.008377f, 0.010635f, 0.012352f, 0.014153f,
+ 0.015640f, 0.017487f, 0.019272f, 0.021164f, 0.023026f, 0.025314f, 0.027222f, 0.029282f, 0.031433f, 0.033600f, 0.036041f, 0.038788f,
+ 0.041626f, 0.044281f, 0.047455f, 0.050507f, 0.054047f, 0.057556f, 0.061188f, 0.065063f, 0.069214f, 0.073486f, 0.078369f, 0.083191f,
+ 0.088196f, 0.093811f, 0.099609f, 0.106018f, 0.112305f, 0.119385f, 0.126343f, 0.134033f, 0.142090f, 0.150635f, 0.159546f, 0.168579f,
+ 0.177734f, 0.187500f, 0.198242f, 0.208618f, 0.219604f, 0.231812f, 0.242188f, 0.254883f, 0.267578f, 0.281494f, 0.294434f, 0.308350f,
+ 0.322998f, 0.338379f, 0.651367f, 0.676758f, 0.681152f, 0.680664f, 0.680664f, 0.679688f, 0.000977f, 0.002806f, 0.004559f, 0.006176f,
+ 0.008034f, 0.009476f, 0.011131f, 0.012741f, 0.014275f, 0.015732f, 0.017334f, 0.019104f, 0.020767f, 0.022293f, 0.024323f, 0.026016f,
+ 0.028198f, 0.030197f, 0.032257f, 0.034515f, 0.036957f, 0.039856f, 0.042084f, 0.044891f, 0.047791f, 0.051147f, 0.054535f, 0.058197f,
+ 0.061768f, 0.065674f, 0.069946f, 0.074585f, 0.079102f, 0.084412f, 0.089600f, 0.095398f, 0.101196f, 0.107544f, 0.114258f, 0.121094f,
+ 0.128662f, 0.137085f, 0.145020f, 0.153687f, 0.162720f, 0.172607f, 0.182129f, 0.192749f, 0.203125f, 0.214111f, 0.226074f, 0.237671f,
+ 0.249878f, 0.262207f, 0.275635f, 0.289551f, 0.304199f, 0.318848f, 0.639160f, 0.666992f, 0.671387f, 0.671875f, 0.671875f, 0.671387f,
+ 0.000968f, 0.002722f, 0.004318f, 0.005634f, 0.007393f, 0.008667f, 0.010139f, 0.011383f, 0.012856f, 0.014389f, 0.015427f, 0.016907f,
+ 0.018387f, 0.020081f, 0.021683f, 0.023315f, 0.025085f, 0.026840f, 0.028641f, 0.030624f, 0.032837f, 0.035065f, 0.037445f, 0.039948f,
+ 0.042542f, 0.045410f, 0.048340f, 0.051514f, 0.054840f, 0.058502f, 0.062408f, 0.066223f, 0.070679f, 0.075134f, 0.080078f, 0.085388f,
+ 0.090515f, 0.096436f, 0.102722f, 0.109314f, 0.116333f, 0.123352f, 0.131592f, 0.139526f, 0.147949f, 0.156860f, 0.166748f, 0.176758f,
+ 0.187134f, 0.197632f, 0.209106f, 0.220337f, 0.232666f, 0.244751f, 0.257568f, 0.270996f, 0.284912f, 0.300537f, 0.627441f, 0.657227f,
+ 0.662598f, 0.663574f, 0.663574f, 0.663086f, 0.001081f, 0.002466f, 0.003862f, 0.005348f, 0.006447f, 0.007927f, 0.009018f, 0.010490f,
+ 0.011436f, 0.012627f, 0.013916f, 0.015015f, 0.016449f, 0.017563f, 0.019165f, 0.020706f, 0.021973f, 0.023834f, 0.025467f, 0.027130f,
+ 0.029175f, 0.030991f, 0.033081f, 0.035156f, 0.037384f, 0.040039f, 0.042603f, 0.045502f, 0.048492f, 0.051636f, 0.054962f, 0.058716f,
+ 0.062439f, 0.066467f, 0.071045f, 0.075378f, 0.080811f, 0.085815f, 0.091492f, 0.098022f, 0.103943f, 0.111023f, 0.118164f, 0.125732f,
+ 0.133911f, 0.142456f, 0.151367f, 0.161011f, 0.170898f, 0.181396f, 0.192139f, 0.203247f, 0.214844f, 0.227173f, 0.239380f, 0.252441f,
+ 0.266602f, 0.281006f, 0.616699f, 0.647949f, 0.653320f, 0.655273f, 0.654785f, 0.655273f, 0.000735f, 0.002331f, 0.003601f, 0.005005f,
+ 0.005825f, 0.007061f, 0.008049f, 0.009148f, 0.010315f, 0.011131f, 0.012230f, 0.013367f, 0.014328f, 0.015541f, 0.016968f, 0.018234f,
+ 0.019257f, 0.020798f, 0.022202f, 0.023666f, 0.025452f, 0.027115f, 0.028885f, 0.030792f, 0.032715f, 0.035034f, 0.037323f, 0.039825f,
+ 0.042419f, 0.045258f, 0.048157f, 0.051422f, 0.054810f, 0.058411f, 0.062378f, 0.066528f, 0.071106f, 0.076233f, 0.081116f, 0.086853f,
+ 0.092407f, 0.098938f, 0.105469f, 0.112854f, 0.120361f, 0.128418f, 0.136841f, 0.145752f, 0.155273f, 0.165283f, 0.175537f, 0.186646f,
+ 0.197510f, 0.209473f, 0.221558f, 0.234619f, 0.248047f, 0.261719f, 0.603516f, 0.636719f, 0.644531f, 0.645020f, 0.645508f, 0.646484f,
+ 0.000837f, 0.002073f, 0.003357f, 0.004292f, 0.005409f, 0.006271f, 0.007271f, 0.007973f, 0.008873f, 0.009956f, 0.010811f, 0.012032f,
+ 0.012848f, 0.013664f, 0.014870f, 0.015839f, 0.017090f, 0.018280f, 0.019333f, 0.020691f, 0.022186f, 0.023453f, 0.025223f, 0.026779f,
+ 0.028595f, 0.030441f, 0.032410f, 0.034729f, 0.036743f, 0.039307f, 0.042023f, 0.044434f, 0.047791f, 0.050781f, 0.054413f, 0.058075f,
+ 0.061951f, 0.066711f, 0.071106f, 0.076355f, 0.081848f, 0.087341f, 0.093872f, 0.099854f, 0.107483f, 0.114441f, 0.122925f, 0.131104f,
+ 0.140381f, 0.149414f, 0.159180f, 0.170166f, 0.181152f, 0.192139f, 0.204468f, 0.216553f, 0.230103f, 0.244507f, 0.592773f, 0.626953f,
+ 0.635254f, 0.637207f, 0.636719f, 0.637695f, 0.000524f, 0.001863f, 0.003014f, 0.003777f, 0.004852f, 0.005516f, 0.006428f, 0.007111f,
+ 0.008095f, 0.008888f, 0.009476f, 0.010345f, 0.011063f, 0.012016f, 0.012810f, 0.013786f, 0.014648f, 0.015717f, 0.016891f, 0.017929f,
+ 0.019150f, 0.020401f, 0.021606f, 0.023193f, 0.024597f, 0.026276f, 0.027939f, 0.029770f, 0.031738f, 0.033936f, 0.036194f, 0.038574f,
+ 0.041107f, 0.043945f, 0.047180f, 0.050385f, 0.054291f, 0.057770f, 0.061981f, 0.066345f, 0.071167f, 0.076355f, 0.082153f, 0.088074f,
+ 0.094666f, 0.101685f, 0.109131f, 0.117249f, 0.125610f, 0.134399f, 0.143921f, 0.154175f, 0.164795f, 0.175659f, 0.187256f, 0.199341f,
+ 0.211670f, 0.225464f, 0.580078f, 0.617676f, 0.625000f, 0.627930f, 0.628906f, 0.628906f, 0.000657f, 0.001829f, 0.002909f, 0.003525f,
+ 0.004295f, 0.005051f, 0.005592f, 0.006123f, 0.006920f, 0.007553f, 0.008339f, 0.008888f, 0.009689f, 0.010262f, 0.011017f, 0.011848f,
+ 0.012634f, 0.013489f, 0.014572f, 0.015427f, 0.016449f, 0.017426f, 0.018539f, 0.019852f, 0.021133f, 0.022507f, 0.023834f, 0.025375f,
+ 0.027084f, 0.028976f, 0.030792f, 0.032959f, 0.035400f, 0.037720f, 0.040405f, 0.043243f, 0.046356f, 0.049530f, 0.053314f, 0.057190f,
+ 0.061554f, 0.066223f, 0.071472f, 0.076782f, 0.082825f, 0.089417f, 0.096191f, 0.103210f, 0.111633f, 0.119934f, 0.128662f, 0.138550f,
+ 0.148315f, 0.158813f, 0.170288f, 0.182373f, 0.194458f, 0.207642f, 0.567383f, 0.606445f, 0.615234f, 0.619141f, 0.620117f, 0.620117f,
+ 0.000584f, 0.001548f, 0.002333f, 0.003086f, 0.003660f, 0.004303f, 0.005020f, 0.005543f, 0.006042f, 0.006538f, 0.007118f, 0.007641f,
+ 0.008301f, 0.008919f, 0.009499f, 0.010147f, 0.010918f, 0.011414f, 0.012222f, 0.013084f, 0.013901f, 0.014954f, 0.015671f, 0.016724f,
+ 0.017914f, 0.019012f, 0.020325f, 0.021698f, 0.022949f, 0.024445f, 0.026215f, 0.027954f, 0.029755f, 0.032043f, 0.034210f, 0.036591f,
+ 0.039215f, 0.042297f, 0.045441f, 0.048676f, 0.052612f, 0.056580f, 0.061432f, 0.066040f, 0.071350f, 0.077332f, 0.083496f, 0.090393f,
+ 0.097717f, 0.105835f, 0.114380f, 0.123413f, 0.133301f, 0.143066f, 0.153931f, 0.165039f, 0.177124f, 0.190308f, 0.555176f, 0.597656f,
+ 0.604980f, 0.609375f, 0.609863f, 0.611328f, 0.000438f, 0.001456f, 0.001925f, 0.002811f, 0.003246f, 0.003731f, 0.004108f, 0.004669f,
+ 0.005344f, 0.005535f, 0.005913f, 0.006641f, 0.007038f, 0.007473f, 0.008049f, 0.008675f, 0.009361f, 0.009689f, 0.010513f, 0.011032f,
+ 0.011894f, 0.012695f, 0.013390f, 0.014183f, 0.015114f, 0.016037f, 0.016998f, 0.018280f, 0.019272f, 0.020645f, 0.022003f, 0.023361f,
+ 0.024796f, 0.026779f, 0.028656f, 0.030685f, 0.032928f, 0.035370f, 0.038147f, 0.040955f, 0.044403f, 0.047821f, 0.052032f, 0.056183f,
+ 0.060974f, 0.066162f, 0.071777f, 0.078125f, 0.084656f, 0.092102f, 0.100159f, 0.109009f, 0.117981f, 0.127563f, 0.138306f, 0.148804f,
+ 0.160645f, 0.173218f, 0.542969f, 0.586914f, 0.594727f, 0.599609f, 0.601074f, 0.601074f, 0.000520f, 0.001104f, 0.001921f, 0.002256f,
+ 0.002886f, 0.003389f, 0.003689f, 0.004063f, 0.004440f, 0.004829f, 0.005230f, 0.005466f, 0.005966f, 0.006332f, 0.006786f, 0.007347f,
+ 0.007835f, 0.008232f, 0.008812f, 0.009216f, 0.009865f, 0.010490f, 0.011124f, 0.011803f, 0.012573f, 0.013390f, 0.014275f, 0.015121f,
+ 0.016144f, 0.016953f, 0.018234f, 0.019257f, 0.020782f, 0.022064f, 0.023743f, 0.025360f, 0.027176f, 0.029327f, 0.031616f, 0.034058f,
+ 0.036957f, 0.039917f, 0.043182f, 0.047272f, 0.051025f, 0.055695f, 0.060913f, 0.066345f, 0.072693f, 0.079285f, 0.086548f, 0.094543f,
+ 0.103271f, 0.112793f, 0.122864f, 0.132812f, 0.144531f, 0.156616f, 0.530273f, 0.576660f, 0.585449f, 0.590332f, 0.592285f, 0.593262f,
+ 0.000366f, 0.001040f, 0.001583f, 0.002129f, 0.002522f, 0.002792f, 0.003012f, 0.003420f, 0.003630f, 0.003967f, 0.004246f, 0.004623f,
+ 0.005039f, 0.005253f, 0.005627f, 0.006096f, 0.006447f, 0.006939f, 0.007179f, 0.007710f, 0.008324f, 0.008698f, 0.009247f, 0.009796f,
+ 0.010414f, 0.011063f, 0.011627f, 0.012543f, 0.013191f, 0.014099f, 0.014938f, 0.015930f, 0.016983f, 0.018219f, 0.019440f, 0.020813f,
+ 0.022324f, 0.024002f, 0.025818f, 0.027969f, 0.030289f, 0.032898f, 0.035583f, 0.038727f, 0.042450f, 0.046234f, 0.050781f, 0.055695f,
+ 0.061157f, 0.067383f, 0.074158f, 0.081360f, 0.089478f, 0.098267f, 0.107788f, 0.117737f, 0.129028f, 0.140503f, 0.517578f, 0.566406f,
+ 0.575195f, 0.581055f, 0.582520f, 0.584473f, 0.000482f, 0.001008f, 0.001481f, 0.001818f, 0.002001f, 0.002296f, 0.002569f, 0.002781f,
+ 0.002998f, 0.003319f, 0.003620f, 0.003828f, 0.004082f, 0.004364f, 0.004658f, 0.004978f, 0.005257f, 0.005665f, 0.005993f, 0.006340f,
+ 0.006725f, 0.007160f, 0.007576f, 0.008095f, 0.008522f, 0.008980f, 0.009621f, 0.010170f, 0.010765f, 0.011543f, 0.012161f, 0.013023f,
+ 0.013840f, 0.014801f, 0.015869f, 0.016861f, 0.018127f, 0.019379f, 0.020859f, 0.022583f, 0.024261f, 0.026596f, 0.028839f, 0.031555f,
+ 0.034271f, 0.037628f, 0.041504f, 0.045837f, 0.050598f, 0.056000f, 0.062134f, 0.068726f, 0.076172f, 0.084656f, 0.093567f, 0.103088f,
+ 0.113586f, 0.125000f, 0.504883f, 0.554688f, 0.565918f, 0.570801f, 0.573242f, 0.574219f, 0.000400f, 0.000803f, 0.001046f, 0.001427f,
+ 0.001657f, 0.001952f, 0.002033f, 0.002337f, 0.002453f, 0.002678f, 0.002871f, 0.003120f, 0.003286f, 0.003605f, 0.003817f, 0.004036f,
+ 0.004299f, 0.004604f, 0.004848f, 0.005142f, 0.005428f, 0.005871f, 0.006107f, 0.006584f, 0.006908f, 0.007332f, 0.007736f, 0.008186f,
+ 0.008820f, 0.009308f, 0.009964f, 0.010422f, 0.011200f, 0.011993f, 0.012726f, 0.013512f, 0.014511f, 0.015610f, 0.016724f, 0.017914f,
+ 0.019440f, 0.021057f, 0.022827f, 0.024933f, 0.027466f, 0.030197f, 0.033295f, 0.036896f, 0.041077f, 0.045776f, 0.050995f, 0.056976f,
+ 0.063721f, 0.071167f, 0.079773f, 0.089172f, 0.098633f, 0.109314f, 0.491699f, 0.543457f, 0.555176f, 0.561035f, 0.563477f, 0.565430f,
+ 0.000279f, 0.000821f, 0.000974f, 0.001161f, 0.001382f, 0.001583f, 0.001670f, 0.001934f, 0.002064f, 0.002153f, 0.002306f, 0.002544f,
+ 0.002670f, 0.002909f, 0.003052f, 0.003288f, 0.003429f, 0.003624f, 0.003893f, 0.004082f, 0.004406f, 0.004635f, 0.004925f, 0.005196f,
+ 0.005444f, 0.005764f, 0.006134f, 0.006546f, 0.006947f, 0.007343f, 0.007858f, 0.008270f, 0.008858f, 0.009346f, 0.010010f, 0.010757f,
+ 0.011475f, 0.012260f, 0.013206f, 0.014214f, 0.015236f, 0.016479f, 0.017975f, 0.019623f, 0.021515f, 0.023590f, 0.026062f, 0.028976f,
+ 0.032471f, 0.036224f, 0.040833f, 0.046082f, 0.052094f, 0.059052f, 0.066650f, 0.075684f, 0.084778f, 0.094971f, 0.479492f, 0.532715f,
+ 0.545898f, 0.551270f, 0.553711f, 0.555664f, 0.000253f, 0.000612f, 0.000835f, 0.000998f, 0.001111f, 0.001228f, 0.001334f, 0.001452f,
+ 0.001619f, 0.001757f, 0.001837f, 0.001920f, 0.002140f, 0.002321f, 0.002453f, 0.002544f, 0.002670f, 0.002790f, 0.003086f, 0.003260f,
+ 0.003422f, 0.003620f, 0.003893f, 0.004101f, 0.004326f, 0.004528f, 0.004761f, 0.005051f, 0.005444f, 0.005756f, 0.006065f, 0.006435f,
+ 0.006882f, 0.007378f, 0.007763f, 0.008286f, 0.008865f, 0.009506f, 0.010162f, 0.011024f, 0.011826f, 0.012917f, 0.013916f, 0.015175f,
+ 0.016602f, 0.018204f, 0.020035f, 0.022293f, 0.024948f, 0.028076f, 0.031921f, 0.036377f, 0.041565f, 0.047577f, 0.054535f, 0.062622f,
+ 0.071777f, 0.081787f, 0.465576f, 0.522461f, 0.535645f, 0.541992f, 0.544922f, 0.546875f, 0.000155f, 0.000398f, 0.000680f, 0.000828f,
+ 0.000907f, 0.000989f, 0.001113f, 0.001081f, 0.001253f, 0.001350f, 0.001453f, 0.001573f, 0.001661f, 0.001777f, 0.001829f, 0.001978f,
+ 0.002062f, 0.002216f, 0.002346f, 0.002470f, 0.002644f, 0.002804f, 0.002930f, 0.003134f, 0.003265f, 0.003485f, 0.003674f, 0.003866f,
+ 0.004154f, 0.004333f, 0.004707f, 0.004910f, 0.005180f, 0.005581f, 0.005875f, 0.006283f, 0.006729f, 0.007164f, 0.007713f, 0.008270f,
+ 0.008934f, 0.009727f, 0.010513f, 0.011482f, 0.012520f, 0.013710f, 0.015152f, 0.016815f, 0.018799f, 0.021118f, 0.024048f, 0.027756f,
+ 0.032104f, 0.037201f, 0.043518f, 0.050903f, 0.059418f, 0.068420f, 0.453125f, 0.511719f, 0.525391f, 0.530762f, 0.535156f, 0.536621f,
+ 0.000303f, 0.000337f, 0.000498f, 0.000560f, 0.000603f, 0.000721f, 0.000782f, 0.000845f, 0.000880f, 0.000988f, 0.001119f, 0.001184f,
+ 0.001258f, 0.001377f, 0.001420f, 0.001446f, 0.001590f, 0.001666f, 0.001754f, 0.001889f, 0.001980f, 0.002073f, 0.002216f, 0.002308f,
+ 0.002447f, 0.002562f, 0.002758f, 0.002899f, 0.003084f, 0.003328f, 0.003506f, 0.003641f, 0.003922f, 0.004147f, 0.004391f, 0.004665f,
+ 0.004959f, 0.005322f, 0.005695f, 0.006119f, 0.006588f, 0.007072f, 0.007790f, 0.008392f, 0.009178f, 0.010056f, 0.011124f, 0.012383f,
+ 0.013832f, 0.015587f, 0.017685f, 0.020309f, 0.023926f, 0.028076f, 0.033447f, 0.039978f, 0.047638f, 0.056335f, 0.440186f, 0.500000f,
+ 0.514160f, 0.520996f, 0.524414f, 0.526855f, 0.000132f, 0.000296f, 0.000368f, 0.000444f, 0.000501f, 0.000519f, 0.000631f, 0.000580f,
+ 0.000675f, 0.000735f, 0.000820f, 0.000840f, 0.000882f, 0.000946f, 0.001029f, 0.001070f, 0.001164f, 0.001221f, 0.001286f, 0.001317f,
+ 0.001416f, 0.001494f, 0.001607f, 0.001681f, 0.001763f, 0.001863f, 0.001978f, 0.002069f, 0.002169f, 0.002348f, 0.002451f, 0.002661f,
+ 0.002754f, 0.002943f, 0.003130f, 0.003323f, 0.003553f, 0.003813f, 0.004124f, 0.004364f, 0.004669f, 0.005062f, 0.005493f, 0.005985f,
+ 0.006546f, 0.007172f, 0.007950f, 0.008850f, 0.009857f, 0.011116f, 0.012695f, 0.014603f, 0.016983f, 0.020157f, 0.024490f, 0.029968f,
+ 0.036957f, 0.045166f, 0.426025f, 0.488770f, 0.503906f, 0.511719f, 0.515137f, 0.517578f, 0.000063f, 0.000160f, 0.000267f, 0.000282f,
+ 0.000339f, 0.000417f, 0.000377f, 0.000433f, 0.000472f, 0.000570f, 0.000563f, 0.000578f, 0.000599f, 0.000663f, 0.000681f, 0.000759f,
+ 0.000760f, 0.000845f, 0.000910f, 0.000941f, 0.000997f, 0.001057f, 0.001110f, 0.001169f, 0.001238f, 0.001288f, 0.001381f, 0.001441f,
+ 0.001514f, 0.001655f, 0.001693f, 0.001815f, 0.001910f, 0.002028f, 0.002153f, 0.002308f, 0.002441f, 0.002607f, 0.002783f, 0.002962f,
+ 0.003214f, 0.003458f, 0.003744f, 0.004051f, 0.004444f, 0.004883f, 0.005402f, 0.006031f, 0.006699f, 0.007610f, 0.008766f, 0.009933f,
+ 0.011688f, 0.013931f, 0.017075f, 0.021454f, 0.027313f, 0.035004f, 0.414307f, 0.478271f, 0.493652f, 0.501465f, 0.505859f, 0.508301f,
+ 0.000120f, 0.000194f, 0.000194f, 0.000205f, 0.000245f, 0.000246f, 0.000251f, 0.000301f, 0.000322f, 0.000332f, 0.000343f, 0.000413f,
+ 0.000397f, 0.000448f, 0.000481f, 0.000494f, 0.000545f, 0.000556f, 0.000582f, 0.000601f, 0.000653f, 0.000676f, 0.000726f, 0.000767f,
+ 0.000821f, 0.000840f, 0.000919f, 0.000952f, 0.001011f, 0.001054f, 0.001116f, 0.001186f, 0.001263f, 0.001337f, 0.001418f, 0.001482f,
+ 0.001607f, 0.001685f, 0.001842f, 0.001965f, 0.002090f, 0.002235f, 0.002420f, 0.002613f, 0.002851f, 0.003159f, 0.003492f, 0.003887f,
+ 0.004345f, 0.004906f, 0.005600f, 0.006474f, 0.007645f, 0.009186f, 0.011230f, 0.014305f, 0.019135f, 0.025848f, 0.400635f, 0.466797f,
+ 0.483398f, 0.490967f, 0.495117f, 0.498047f, 0.000030f, 0.000140f, 0.000121f, 0.000114f, 0.000147f, 0.000178f, 0.000159f, 0.000195f,
+ 0.000199f, 0.000204f, 0.000216f, 0.000223f, 0.000255f, 0.000271f, 0.000288f, 0.000302f, 0.000314f, 0.000346f, 0.000357f, 0.000395f,
+ 0.000397f, 0.000408f, 0.000436f, 0.000470f, 0.000501f, 0.000542f, 0.000547f, 0.000566f, 0.000612f, 0.000641f, 0.000692f, 0.000722f,
+ 0.000767f, 0.000798f, 0.000861f, 0.000898f, 0.000963f, 0.001030f, 0.001107f, 0.001164f, 0.001255f, 0.001361f, 0.001464f, 0.001591f,
+ 0.001719f, 0.001871f, 0.002111f, 0.002312f, 0.002617f, 0.002964f, 0.003368f, 0.003902f, 0.004654f, 0.005653f, 0.006958f, 0.008888f,
+ 0.012161f, 0.017822f, 0.388672f, 0.456543f, 0.473389f, 0.481201f, 0.486328f, 0.489014f, 0.000102f, 0.000076f, 0.000076f, 0.000075f,
+ 0.000095f, 0.000092f, 0.000109f, 0.000111f, 0.000112f, 0.000113f, 0.000126f, 0.000147f, 0.000135f, 0.000144f, 0.000165f, 0.000161f,
+ 0.000179f, 0.000192f, 0.000198f, 0.000202f, 0.000224f, 0.000232f, 0.000248f, 0.000259f, 0.000278f, 0.000295f, 0.000308f, 0.000320f,
+ 0.000340f, 0.000353f, 0.000379f, 0.000402f, 0.000423f, 0.000440f, 0.000472f, 0.000503f, 0.000526f, 0.000564f, 0.000610f, 0.000644f,
+ 0.000690f, 0.000741f, 0.000810f, 0.000862f, 0.000946f, 0.001024f, 0.001121f, 0.001247f, 0.001407f, 0.001603f, 0.001822f, 0.002144f,
+ 0.002539f, 0.003098f, 0.003901f, 0.005096f, 0.006931f, 0.011024f, 0.375244f, 0.444092f, 0.462158f, 0.470215f, 0.475586f, 0.478760f,
+ 0.000085f, 0.000061f, 0.000052f, 0.000047f, 0.000049f, 0.000046f, 0.000047f, 0.000050f, 0.000055f, 0.000069f, 0.000060f, 0.000062f,
+ 0.000077f, 0.000066f, 0.000069f, 0.000075f, 0.000084f, 0.000093f, 0.000093f, 0.000098f, 0.000102f, 0.000108f, 0.000111f, 0.000121f,
+ 0.000129f, 0.000136f, 0.000142f, 0.000154f, 0.000162f, 0.000172f, 0.000182f, 0.000187f, 0.000197f, 0.000209f, 0.000225f, 0.000231f,
+ 0.000246f, 0.000262f, 0.000290f, 0.000306f, 0.000321f, 0.000349f, 0.000380f, 0.000402f, 0.000437f, 0.000480f, 0.000525f, 0.000579f,
+ 0.000649f, 0.000735f, 0.000842f, 0.000984f, 0.001173f, 0.001451f, 0.001855f, 0.002485f, 0.003542f, 0.005753f, 0.362305f, 0.434326f,
+ 0.451904f, 0.460693f, 0.465576f, 0.468506f, 0.000064f, 0.000044f, 0.000036f, 0.000032f, 0.000029f, 0.000027f, 0.000025f, 0.000024f,
+ 0.000022f, 0.000023f, 0.000021f, 0.000027f, 0.000023f, 0.000022f, 0.000028f, 0.000031f, 0.000030f, 0.000034f, 0.000036f, 0.000038f,
+ 0.000040f, 0.000045f, 0.000048f, 0.000042f, 0.000047f, 0.000053f, 0.000055f, 0.000054f, 0.000060f, 0.000062f, 0.000065f, 0.000072f,
+ 0.000078f, 0.000075f, 0.000079f, 0.000087f, 0.000093f, 0.000098f, 0.000106f, 0.000113f, 0.000121f, 0.000126f, 0.000136f, 0.000150f,
+ 0.000159f, 0.000173f, 0.000190f, 0.000209f, 0.000235f, 0.000265f, 0.000302f, 0.000343f, 0.000416f, 0.000515f, 0.000665f, 0.000917f,
+ 0.001396f, 0.002401f, 0.349854f, 0.421875f, 0.440918f, 0.449951f, 0.455811f, 0.458008f, 0.000030f, 0.000020f, 0.000016f, 0.000014f,
+ 0.000014f, 0.000013f, 0.000012f, 0.000012f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000010f, 0.000010f, 0.000009f, 0.000009f,
+ 0.000009f, 0.000008f, 0.000008f, 0.000008f, 0.000007f, 0.000007f, 0.000008f, 0.000008f, 0.000009f, 0.000011f, 0.000011f, 0.000013f,
+ 0.000013f, 0.000012f, 0.000013f, 0.000014f, 0.000016f, 0.000018f, 0.000018f, 0.000019f, 0.000021f, 0.000021f, 0.000023f, 0.000027f,
+ 0.000025f, 0.000028f, 0.000031f, 0.000032f, 0.000033f, 0.000038f, 0.000043f, 0.000046f, 0.000050f, 0.000055f, 0.000062f, 0.000074f,
+ 0.000088f, 0.000106f, 0.000138f, 0.000191f, 0.000312f, 0.000653f, 0.337402f, 0.410645f, 0.431152f, 0.438965f, 0.445068f, 0.448975f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000002f,
+ 0.000002f, 0.000002f, 0.000003f, 0.000003f, 0.000004f, 0.000004f, 0.000004f, 0.000006f, 0.000010f, 0.000026f, 0.324219f, 0.399902f,
+ 0.419922f, 0.429688f, 0.435059f, 0.438965f,
+ },
+ {
+ 0.010521f, 0.032043f, 0.054443f, 0.076843f, 0.098572f, 0.121216f, 0.142700f, 0.164062f, 0.185913f, 0.207275f, 0.229004f, 0.249268f,
+ 0.270508f, 0.290527f, 0.311035f, 0.331055f, 0.350586f, 0.370361f, 0.389648f, 0.408936f, 0.428223f, 0.446533f, 0.465088f, 0.482666f,
+ 0.500977f, 0.519043f, 0.536133f, 0.553223f, 0.570801f, 0.587891f, 0.604980f, 0.621582f, 0.637207f, 0.653320f, 0.668945f, 0.685547f,
+ 0.700684f, 0.716309f, 0.730957f, 0.745605f, 0.760254f, 0.774902f, 0.789551f, 0.803711f, 0.816895f, 0.831543f, 0.845703f, 0.858887f,
+ 0.871582f, 0.885254f, 0.897949f, 0.910645f, 0.923340f, 0.936035f, 0.948242f, 0.959961f, 0.972168f, 0.984375f, 0.972656f, 0.936035f,
+ 0.910645f, 0.890137f, 0.872070f, 0.855957f, 0.010048f, 0.030350f, 0.051392f, 0.072266f, 0.093506f, 0.114319f, 0.135620f, 0.155273f,
+ 0.177124f, 0.197144f, 0.217773f, 0.237915f, 0.257568f, 0.277588f, 0.298096f, 0.316895f, 0.336182f, 0.355225f, 0.374268f, 0.393311f,
+ 0.411865f, 0.430176f, 0.448486f, 0.466309f, 0.483398f, 0.501465f, 0.519043f, 0.535645f, 0.552734f, 0.570312f, 0.586426f, 0.602539f,
+ 0.618652f, 0.635254f, 0.650879f, 0.666016f, 0.682129f, 0.697266f, 0.712402f, 0.727539f, 0.741699f, 0.756836f, 0.770996f, 0.785645f,
+ 0.799805f, 0.812988f, 0.826660f, 0.840332f, 0.854004f, 0.867676f, 0.881348f, 0.893066f, 0.907715f, 0.919434f, 0.932617f, 0.943848f,
+ 0.955566f, 0.968262f, 0.965332f, 0.930664f, 0.906738f, 0.886719f, 0.869629f, 0.854004f, 0.009254f, 0.028961f, 0.048615f, 0.068054f,
+ 0.088562f, 0.108093f, 0.128540f, 0.147705f, 0.167236f, 0.188599f, 0.207886f, 0.227295f, 0.244873f, 0.265625f, 0.284668f, 0.303955f,
+ 0.322510f, 0.340820f, 0.358887f, 0.378662f, 0.396484f, 0.414307f, 0.431885f, 0.448975f, 0.466797f, 0.484619f, 0.500977f, 0.519043f,
+ 0.535645f, 0.551758f, 0.568359f, 0.584961f, 0.600586f, 0.616699f, 0.632324f, 0.647949f, 0.663086f, 0.678223f, 0.693848f, 0.708984f,
+ 0.723633f, 0.738281f, 0.752930f, 0.767578f, 0.780762f, 0.794922f, 0.809082f, 0.822754f, 0.835938f, 0.849609f, 0.863770f, 0.875488f,
+ 0.888672f, 0.902344f, 0.915527f, 0.927246f, 0.939453f, 0.952637f, 0.958008f, 0.925293f, 0.901855f, 0.882812f, 0.866211f, 0.851562f,
+ 0.008736f, 0.027039f, 0.045807f, 0.064514f, 0.083801f, 0.102844f, 0.121826f, 0.140869f, 0.159302f, 0.179077f, 0.197388f, 0.216064f,
+ 0.234741f, 0.253662f, 0.271729f, 0.290283f, 0.308350f, 0.327148f, 0.344238f, 0.362061f, 0.381836f, 0.398926f, 0.416016f, 0.432373f,
+ 0.450195f, 0.466797f, 0.484375f, 0.500977f, 0.517090f, 0.533691f, 0.550781f, 0.567871f, 0.582031f, 0.598145f, 0.613770f, 0.629395f,
+ 0.645020f, 0.659668f, 0.675781f, 0.689941f, 0.705566f, 0.719727f, 0.734375f, 0.749512f, 0.763184f, 0.776855f, 0.791016f, 0.804688f,
+ 0.818848f, 0.832031f, 0.845215f, 0.858398f, 0.872559f, 0.884766f, 0.897949f, 0.909668f, 0.922852f, 0.936035f, 0.950684f, 0.919434f,
+ 0.896973f, 0.878906f, 0.862793f, 0.848633f, 0.008339f, 0.025543f, 0.043427f, 0.060974f, 0.078979f, 0.097168f, 0.115051f, 0.133179f,
+ 0.151367f, 0.169678f, 0.187988f, 0.206055f, 0.223999f, 0.241821f, 0.260742f, 0.277832f, 0.295166f, 0.313232f, 0.331299f, 0.347412f,
+ 0.365479f, 0.383057f, 0.399902f, 0.416992f, 0.433350f, 0.450195f, 0.467773f, 0.484863f, 0.499756f, 0.515625f, 0.532715f, 0.548340f,
+ 0.564941f, 0.580566f, 0.596191f, 0.610840f, 0.626953f, 0.641602f, 0.656738f, 0.671875f, 0.686035f, 0.701660f, 0.714844f, 0.730469f,
+ 0.745117f, 0.759766f, 0.772461f, 0.786621f, 0.801270f, 0.814453f, 0.827637f, 0.841309f, 0.854004f, 0.867676f, 0.880859f, 0.893555f,
+ 0.907227f, 0.919434f, 0.943359f, 0.913086f, 0.891602f, 0.874512f, 0.858887f, 0.845703f, 0.008102f, 0.024002f, 0.040802f, 0.057098f,
+ 0.074768f, 0.091553f, 0.108826f, 0.126343f, 0.143921f, 0.161377f, 0.179077f, 0.195923f, 0.213745f, 0.230835f, 0.248047f, 0.265869f,
+ 0.282227f, 0.299561f, 0.316895f, 0.334473f, 0.350586f, 0.367920f, 0.384277f, 0.400391f, 0.417725f, 0.434326f, 0.450195f, 0.467285f,
+ 0.482910f, 0.498291f, 0.514648f, 0.530762f, 0.546387f, 0.561523f, 0.577637f, 0.593262f, 0.608398f, 0.623535f, 0.637695f, 0.654297f,
+ 0.668457f, 0.682617f, 0.698242f, 0.711914f, 0.727051f, 0.741211f, 0.754395f, 0.768066f, 0.782715f, 0.796387f, 0.810547f, 0.823730f,
+ 0.836426f, 0.849609f, 0.863770f, 0.876465f, 0.889648f, 0.902344f, 0.934570f, 0.907715f, 0.887207f, 0.870117f, 0.854980f, 0.842285f,
+ 0.007504f, 0.022812f, 0.038727f, 0.054871f, 0.070312f, 0.087097f, 0.103088f, 0.119446f, 0.136475f, 0.153442f, 0.169556f, 0.186523f,
+ 0.203369f, 0.219971f, 0.236450f, 0.253418f, 0.270264f, 0.287109f, 0.302979f, 0.319824f, 0.336182f, 0.353271f, 0.369141f, 0.386230f,
+ 0.402100f, 0.417725f, 0.433594f, 0.450684f, 0.466553f, 0.482178f, 0.498047f, 0.513184f, 0.528809f, 0.543945f, 0.559082f, 0.575195f,
+ 0.589844f, 0.605469f, 0.621094f, 0.634277f, 0.649414f, 0.665039f, 0.679688f, 0.694824f, 0.708496f, 0.722168f, 0.736816f, 0.750000f,
+ 0.763184f, 0.778809f, 0.791504f, 0.805664f, 0.819336f, 0.832520f, 0.845703f, 0.858887f, 0.872070f, 0.885742f, 0.927246f, 0.900879f,
+ 0.881836f, 0.864746f, 0.851074f, 0.838867f, 0.006836f, 0.021683f, 0.036224f, 0.051666f, 0.066772f, 0.081970f, 0.098022f, 0.113831f,
+ 0.129517f, 0.145264f, 0.161011f, 0.177856f, 0.193359f, 0.209106f, 0.226196f, 0.241821f, 0.257812f, 0.274414f, 0.290283f, 0.306641f,
+ 0.322754f, 0.338623f, 0.354492f, 0.370361f, 0.386230f, 0.402100f, 0.417725f, 0.433838f, 0.449463f, 0.465088f, 0.480469f, 0.495605f,
+ 0.511719f, 0.527344f, 0.541016f, 0.556641f, 0.571777f, 0.587402f, 0.601562f, 0.617676f, 0.631836f, 0.646484f, 0.660645f, 0.674805f,
+ 0.689941f, 0.704102f, 0.718262f, 0.731934f, 0.746582f, 0.760254f, 0.774414f, 0.786621f, 0.801758f, 0.815430f, 0.828125f, 0.842285f,
+ 0.854980f, 0.868652f, 0.918457f, 0.894531f, 0.875977f, 0.859863f, 0.846680f, 0.834961f, 0.006672f, 0.020401f, 0.034088f, 0.048462f,
+ 0.062927f, 0.077820f, 0.092529f, 0.107666f, 0.122803f, 0.137695f, 0.152954f, 0.169067f, 0.183716f, 0.199829f, 0.214722f, 0.230347f,
+ 0.246704f, 0.262207f, 0.277832f, 0.292969f, 0.308105f, 0.324219f, 0.339600f, 0.354492f, 0.371094f, 0.386963f, 0.401855f, 0.418457f,
+ 0.432861f, 0.449219f, 0.463379f, 0.478271f, 0.494385f, 0.508301f, 0.523438f, 0.539551f, 0.553711f, 0.568848f, 0.583984f, 0.598633f,
+ 0.612793f, 0.627441f, 0.642578f, 0.656250f, 0.670898f, 0.685547f, 0.698730f, 0.714355f, 0.728027f, 0.742188f, 0.755859f, 0.769531f,
+ 0.783691f, 0.795898f, 0.810059f, 0.824707f, 0.838379f, 0.850586f, 0.910645f, 0.887695f, 0.870117f, 0.854980f, 0.842285f, 0.831055f,
+ 0.006207f, 0.019211f, 0.032623f, 0.046112f, 0.059662f, 0.073181f, 0.087585f, 0.102051f, 0.116577f, 0.130249f, 0.145142f, 0.159790f,
+ 0.175171f, 0.189575f, 0.205322f, 0.219238f, 0.235474f, 0.249634f, 0.265137f, 0.280029f, 0.294678f, 0.310547f, 0.325928f, 0.340820f,
+ 0.356201f, 0.371094f, 0.386230f, 0.401367f, 0.416504f, 0.431885f, 0.446533f, 0.461670f, 0.476074f, 0.492188f, 0.507324f, 0.520996f,
+ 0.535645f, 0.550781f, 0.564941f, 0.580078f, 0.594727f, 0.609863f, 0.623535f, 0.637695f, 0.652832f, 0.667480f, 0.681152f, 0.695312f,
+ 0.709473f, 0.723633f, 0.737793f, 0.751953f, 0.765137f, 0.779297f, 0.793945f, 0.807129f, 0.819824f, 0.833496f, 0.901855f, 0.880859f,
+ 0.864258f, 0.850098f, 0.837891f, 0.826660f, 0.006020f, 0.018219f, 0.030579f, 0.043365f, 0.055908f, 0.069153f, 0.082336f, 0.096802f,
+ 0.109497f, 0.123535f, 0.137451f, 0.151855f, 0.165649f, 0.180054f, 0.194702f, 0.208252f, 0.223999f, 0.238037f, 0.252930f, 0.267334f,
+ 0.281982f, 0.296875f, 0.312012f, 0.326904f, 0.340820f, 0.355957f, 0.370850f, 0.385986f, 0.400391f, 0.415039f, 0.430176f, 0.445801f,
+ 0.459229f, 0.474365f, 0.489014f, 0.502441f, 0.518066f, 0.533203f, 0.547363f, 0.562012f, 0.576660f, 0.590820f, 0.605469f, 0.619629f,
+ 0.633789f, 0.647949f, 0.663574f, 0.676758f, 0.690918f, 0.705566f, 0.719238f, 0.733398f, 0.746582f, 0.760254f, 0.774414f, 0.788574f,
+ 0.802246f, 0.816406f, 0.894043f, 0.874023f, 0.858398f, 0.844238f, 0.832031f, 0.822266f, 0.005520f, 0.017059f, 0.028625f, 0.040649f,
+ 0.053131f, 0.065552f, 0.077698f, 0.091187f, 0.104065f, 0.117371f, 0.130859f, 0.143677f, 0.157349f, 0.171021f, 0.184814f, 0.198730f,
+ 0.213135f, 0.226807f, 0.241211f, 0.255127f, 0.269775f, 0.283691f, 0.298096f, 0.312744f, 0.326660f, 0.341553f, 0.355957f, 0.370117f,
+ 0.384766f, 0.399170f, 0.414307f, 0.427979f, 0.442627f, 0.457764f, 0.471924f, 0.486084f, 0.500488f, 0.515137f, 0.529785f, 0.543945f,
+ 0.558594f, 0.572754f, 0.587402f, 0.601074f, 0.615234f, 0.629395f, 0.644043f, 0.657715f, 0.672852f, 0.685547f, 0.700684f, 0.714844f,
+ 0.728027f, 0.743164f, 0.756348f, 0.770508f, 0.785645f, 0.798340f, 0.885254f, 0.867676f, 0.852051f, 0.839355f, 0.828125f, 0.817871f,
+ 0.005241f, 0.015854f, 0.027481f, 0.038605f, 0.050171f, 0.061859f, 0.073853f, 0.085693f, 0.098328f, 0.111206f, 0.123474f, 0.136475f,
+ 0.149658f, 0.162598f, 0.175293f, 0.188477f, 0.202148f, 0.216431f, 0.229858f, 0.242798f, 0.256104f, 0.270264f, 0.284668f, 0.298828f,
+ 0.312744f, 0.326904f, 0.341064f, 0.355469f, 0.369141f, 0.383057f, 0.396729f, 0.411621f, 0.426025f, 0.439697f, 0.454590f, 0.468506f,
+ 0.482666f, 0.497070f, 0.512207f, 0.525391f, 0.540527f, 0.555176f, 0.567871f, 0.582031f, 0.596191f, 0.610840f, 0.625488f, 0.639648f,
+ 0.653809f, 0.668457f, 0.681641f, 0.695801f, 0.710449f, 0.724121f, 0.738770f, 0.751953f, 0.766602f, 0.780273f, 0.876465f, 0.860352f,
+ 0.845703f, 0.833984f, 0.822754f, 0.812988f, 0.004982f, 0.015274f, 0.025681f, 0.036438f, 0.047119f, 0.058167f, 0.069397f, 0.081055f,
+ 0.092957f, 0.104492f, 0.116577f, 0.128418f, 0.141113f, 0.153442f, 0.166504f, 0.179321f, 0.192261f, 0.205200f, 0.218506f, 0.231934f,
+ 0.244629f, 0.258301f, 0.271729f, 0.284912f, 0.299072f, 0.312988f, 0.325684f, 0.340088f, 0.353271f, 0.367676f, 0.381836f, 0.395508f,
+ 0.408936f, 0.423584f, 0.438232f, 0.451416f, 0.466309f, 0.479736f, 0.493896f, 0.507812f, 0.521973f, 0.536133f, 0.550293f, 0.563965f,
+ 0.578613f, 0.592773f, 0.606934f, 0.620605f, 0.635254f, 0.649414f, 0.663086f, 0.677246f, 0.691406f, 0.706543f, 0.720703f, 0.734375f,
+ 0.748047f, 0.762695f, 0.868164f, 0.853027f, 0.839355f, 0.828125f, 0.817383f, 0.808105f, 0.004745f, 0.014290f, 0.024506f, 0.034393f,
+ 0.044617f, 0.054749f, 0.065308f, 0.076538f, 0.087646f, 0.098938f, 0.110535f, 0.121582f, 0.134155f, 0.145264f, 0.157837f, 0.170166f,
+ 0.182373f, 0.194824f, 0.207153f, 0.220337f, 0.233276f, 0.245728f, 0.259277f, 0.271973f, 0.285645f, 0.298584f, 0.311768f, 0.325684f,
+ 0.338623f, 0.352539f, 0.365967f, 0.379395f, 0.393066f, 0.406738f, 0.421143f, 0.434326f, 0.448730f, 0.462402f, 0.475586f, 0.490479f,
+ 0.503906f, 0.518066f, 0.532227f, 0.546387f, 0.560059f, 0.574219f, 0.588379f, 0.602539f, 0.616211f, 0.630371f, 0.644531f, 0.658691f,
+ 0.673340f, 0.686523f, 0.701660f, 0.715332f, 0.730469f, 0.745117f, 0.858887f, 0.845215f, 0.833008f, 0.821777f, 0.812012f, 0.802734f,
+ 0.004494f, 0.013550f, 0.022675f, 0.032227f, 0.042145f, 0.052002f, 0.061554f, 0.072205f, 0.082520f, 0.093323f, 0.104614f, 0.115112f,
+ 0.126099f, 0.137817f, 0.149536f, 0.160767f, 0.172607f, 0.184692f, 0.196167f, 0.208862f, 0.221924f, 0.233765f, 0.246216f, 0.258545f,
+ 0.272461f, 0.284424f, 0.297119f, 0.310547f, 0.323242f, 0.336914f, 0.350586f, 0.363281f, 0.376953f, 0.390869f, 0.403564f, 0.416992f,
+ 0.431152f, 0.444824f, 0.458496f, 0.472656f, 0.486084f, 0.500000f, 0.513672f, 0.527832f, 0.541504f, 0.555664f, 0.569824f, 0.583496f,
+ 0.598145f, 0.611816f, 0.626465f, 0.639648f, 0.654297f, 0.668457f, 0.683594f, 0.697754f, 0.711914f, 0.726562f, 0.849609f, 0.838867f,
+ 0.826172f, 0.815918f, 0.806641f, 0.796875f, 0.004288f, 0.012619f, 0.021713f, 0.030945f, 0.039368f, 0.048737f, 0.058533f, 0.067932f,
+ 0.077759f, 0.088013f, 0.098755f, 0.108398f, 0.119080f, 0.129639f, 0.141235f, 0.152466f, 0.163940f, 0.174927f, 0.186768f, 0.198608f,
+ 0.210205f, 0.222290f, 0.234131f, 0.246094f, 0.258789f, 0.270508f, 0.283203f, 0.296631f, 0.309326f, 0.321777f, 0.335449f, 0.348145f,
+ 0.361084f, 0.374023f, 0.386963f, 0.400391f, 0.414062f, 0.427734f, 0.441162f, 0.455078f, 0.467773f, 0.482422f, 0.495117f, 0.509277f,
+ 0.523926f, 0.536621f, 0.550781f, 0.564941f, 0.579102f, 0.593262f, 0.607422f, 0.621582f, 0.635742f, 0.649902f, 0.664551f, 0.678711f,
+ 0.693848f, 0.708008f, 0.840820f, 0.831055f, 0.819336f, 0.809570f, 0.801270f, 0.792969f, 0.004013f, 0.012070f, 0.019989f, 0.029190f,
+ 0.037415f, 0.045776f, 0.055023f, 0.064392f, 0.073669f, 0.083374f, 0.092224f, 0.102295f, 0.112610f, 0.122742f, 0.133057f, 0.143799f,
+ 0.155273f, 0.165527f, 0.176880f, 0.188110f, 0.199463f, 0.210815f, 0.222534f, 0.234619f, 0.245972f, 0.258301f, 0.270508f, 0.282715f,
+ 0.294678f, 0.307129f, 0.320557f, 0.333008f, 0.345947f, 0.358398f, 0.371826f, 0.384277f, 0.397461f, 0.410889f, 0.424561f, 0.437256f,
+ 0.451416f, 0.464600f, 0.477783f, 0.491455f, 0.504395f, 0.518555f, 0.532715f, 0.546875f, 0.560547f, 0.574219f, 0.588379f, 0.604004f,
+ 0.617188f, 0.631348f, 0.645020f, 0.660645f, 0.674316f, 0.689941f, 0.832031f, 0.823242f, 0.813477f, 0.803711f, 0.794922f, 0.787109f,
+ 0.003790f, 0.011559f, 0.019119f, 0.027069f, 0.035034f, 0.043762f, 0.052032f, 0.060059f, 0.069153f, 0.078369f, 0.087280f, 0.096741f,
+ 0.105957f, 0.115967f, 0.125732f, 0.135620f, 0.146118f, 0.156128f, 0.166992f, 0.177612f, 0.188965f, 0.199829f, 0.210815f, 0.222290f,
+ 0.233887f, 0.244873f, 0.257324f, 0.268799f, 0.281006f, 0.292969f, 0.305420f, 0.317627f, 0.329834f, 0.341797f, 0.355469f, 0.368164f,
+ 0.380859f, 0.393311f, 0.407227f, 0.419434f, 0.433350f, 0.446533f, 0.459961f, 0.473633f, 0.486328f, 0.500488f, 0.515625f, 0.528320f,
+ 0.541504f, 0.556152f, 0.570312f, 0.584473f, 0.598633f, 0.612305f, 0.626465f, 0.640625f, 0.655762f, 0.670410f, 0.822266f, 0.815918f,
+ 0.805664f, 0.796387f, 0.788574f, 0.782227f, 0.003599f, 0.010727f, 0.018219f, 0.025177f, 0.033203f, 0.041046f, 0.048981f, 0.057220f,
+ 0.065247f, 0.073792f, 0.082764f, 0.091064f, 0.100220f, 0.108826f, 0.118591f, 0.128052f, 0.137573f, 0.147705f, 0.158081f, 0.167603f,
+ 0.177979f, 0.188721f, 0.198975f, 0.210205f, 0.221924f, 0.232544f, 0.243774f, 0.255615f, 0.267090f, 0.278564f, 0.290039f, 0.302490f,
+ 0.314941f, 0.327393f, 0.338623f, 0.352295f, 0.364014f, 0.377441f, 0.390381f, 0.403564f, 0.415039f, 0.428955f, 0.441895f, 0.455078f,
+ 0.468994f, 0.482666f, 0.496094f, 0.509277f, 0.523926f, 0.537598f, 0.551270f, 0.565430f, 0.579590f, 0.594238f, 0.608887f, 0.622559f,
+ 0.637207f, 0.651855f, 0.813477f, 0.807617f, 0.798340f, 0.790527f, 0.782715f, 0.775391f, 0.003355f, 0.009918f, 0.017105f, 0.023911f,
+ 0.031281f, 0.038147f, 0.045990f, 0.053284f, 0.061493f, 0.069214f, 0.077026f, 0.085571f, 0.093567f, 0.102600f, 0.111755f, 0.120728f,
+ 0.129761f, 0.138916f, 0.148804f, 0.158447f, 0.167725f, 0.177979f, 0.188965f, 0.198608f, 0.209473f, 0.220215f, 0.231567f, 0.242554f,
+ 0.253906f, 0.264160f, 0.276123f, 0.287109f, 0.300049f, 0.312012f, 0.323975f, 0.336182f, 0.348145f, 0.360840f, 0.372803f, 0.385986f,
+ 0.398438f, 0.411621f, 0.424316f, 0.437256f, 0.450439f, 0.464844f, 0.478027f, 0.490723f, 0.504395f, 0.518066f, 0.532715f, 0.546387f,
+ 0.561523f, 0.575684f, 0.589355f, 0.604004f, 0.618164f, 0.632324f, 0.802246f, 0.800293f, 0.792480f, 0.783691f, 0.776367f, 0.769531f,
+ 0.003265f, 0.009575f, 0.016144f, 0.022415f, 0.029510f, 0.036316f, 0.042755f, 0.050812f, 0.057556f, 0.065002f, 0.072388f, 0.080200f,
+ 0.087952f, 0.096680f, 0.104858f, 0.113281f, 0.122070f, 0.130493f, 0.139771f, 0.148926f, 0.158447f, 0.168335f, 0.177612f, 0.187500f,
+ 0.198120f, 0.208130f, 0.218750f, 0.229492f, 0.240234f, 0.250732f, 0.262207f, 0.273682f, 0.285156f, 0.296143f, 0.308594f, 0.320068f,
+ 0.332520f, 0.344482f, 0.357178f, 0.368652f, 0.381836f, 0.394043f, 0.406494f, 0.420410f, 0.433105f, 0.445801f, 0.459717f, 0.473633f,
+ 0.486816f, 0.500000f, 0.513672f, 0.527832f, 0.541992f, 0.556152f, 0.570312f, 0.585449f, 0.598633f, 0.613770f, 0.794434f, 0.791504f,
+ 0.784180f, 0.776855f, 0.770020f, 0.764160f, 0.002954f, 0.008904f, 0.014961f, 0.021210f, 0.027420f, 0.033905f, 0.040619f, 0.047363f,
+ 0.053986f, 0.060883f, 0.068054f, 0.075378f, 0.082703f, 0.090515f, 0.098022f, 0.105896f, 0.114319f, 0.122742f, 0.131592f, 0.139771f,
+ 0.149170f, 0.157959f, 0.167480f, 0.177124f, 0.186768f, 0.196411f, 0.206543f, 0.216919f, 0.227539f, 0.237671f, 0.248413f, 0.259277f,
+ 0.270264f, 0.281738f, 0.292725f, 0.304443f, 0.315918f, 0.327637f, 0.340576f, 0.352539f, 0.364746f, 0.377930f, 0.390137f, 0.401855f,
+ 0.415039f, 0.428223f, 0.441406f, 0.454834f, 0.468506f, 0.481689f, 0.494873f, 0.509277f, 0.523438f, 0.537598f, 0.551758f, 0.565918f,
+ 0.580078f, 0.594727f, 0.783691f, 0.783203f, 0.776855f, 0.770508f, 0.763672f, 0.757324f, 0.002836f, 0.008659f, 0.014351f, 0.019913f,
+ 0.025772f, 0.032074f, 0.037933f, 0.044128f, 0.050903f, 0.057159f, 0.064026f, 0.070496f, 0.077698f, 0.085022f, 0.091919f, 0.099426f,
+ 0.107727f, 0.114990f, 0.123169f, 0.131226f, 0.140015f, 0.148682f, 0.157349f, 0.166260f, 0.175171f, 0.184692f, 0.194214f, 0.203979f,
+ 0.214355f, 0.224487f, 0.234985f, 0.245728f, 0.256104f, 0.267334f, 0.278320f, 0.288818f, 0.301025f, 0.312256f, 0.324219f, 0.335938f,
+ 0.347900f, 0.360596f, 0.372070f, 0.384521f, 0.397217f, 0.410400f, 0.423340f, 0.436279f, 0.449463f, 0.463135f, 0.476807f, 0.490723f,
+ 0.503906f, 0.517578f, 0.532227f, 0.546875f, 0.561035f, 0.575684f, 0.773926f, 0.775391f, 0.769043f, 0.763672f, 0.757812f, 0.751953f,
+ 0.002506f, 0.008080f, 0.013100f, 0.018738f, 0.024384f, 0.029953f, 0.035797f, 0.041473f, 0.047485f, 0.053558f, 0.059265f, 0.065918f,
+ 0.072693f, 0.079468f, 0.086426f, 0.093384f, 0.100708f, 0.108032f, 0.115417f, 0.122986f, 0.130615f, 0.139038f, 0.147827f, 0.156494f,
+ 0.165039f, 0.173828f, 0.182617f, 0.192139f, 0.201782f, 0.211426f, 0.221558f, 0.231323f, 0.242188f, 0.252686f, 0.263672f, 0.274414f,
+ 0.284912f, 0.296143f, 0.308105f, 0.319824f, 0.331543f, 0.343750f, 0.355225f, 0.367432f, 0.379883f, 0.393066f, 0.405273f, 0.418457f,
+ 0.431641f, 0.444580f, 0.457764f, 0.471924f, 0.485840f, 0.499268f, 0.512695f, 0.527344f, 0.542480f, 0.556641f, 0.764160f, 0.766602f,
+ 0.761719f, 0.756348f, 0.750488f, 0.745605f, 0.002640f, 0.007809f, 0.012497f, 0.017593f, 0.023102f, 0.028122f, 0.033569f, 0.038879f,
+ 0.044250f, 0.049988f, 0.055908f, 0.061615f, 0.067627f, 0.074036f, 0.080566f, 0.087524f, 0.093262f, 0.100769f, 0.107910f, 0.114929f,
+ 0.121948f, 0.130371f, 0.137939f, 0.146362f, 0.154297f, 0.163208f, 0.171509f, 0.180664f, 0.189697f, 0.199341f, 0.208618f, 0.218506f,
+ 0.228394f, 0.238892f, 0.248779f, 0.259277f, 0.270752f, 0.281250f, 0.292236f, 0.303467f, 0.315186f, 0.326660f, 0.338867f, 0.351074f,
+ 0.362305f, 0.374756f, 0.387939f, 0.400146f, 0.413330f, 0.426514f, 0.439209f, 0.452881f, 0.466553f, 0.480225f, 0.494141f, 0.508301f,
+ 0.522949f, 0.537109f, 0.753906f, 0.758301f, 0.754395f, 0.749023f, 0.743652f, 0.739258f, 0.002441f, 0.007088f, 0.011993f, 0.016266f,
+ 0.021255f, 0.026031f, 0.031189f, 0.036072f, 0.041260f, 0.046753f, 0.052155f, 0.057587f, 0.063232f, 0.068787f, 0.075623f, 0.081055f,
+ 0.087341f, 0.094177f, 0.100647f, 0.106689f, 0.113892f, 0.121399f, 0.129028f, 0.136841f, 0.144287f, 0.152222f, 0.160522f, 0.169312f,
+ 0.178101f, 0.186523f, 0.196045f, 0.205200f, 0.214966f, 0.224487f, 0.234863f, 0.244751f, 0.255371f, 0.265625f, 0.276367f, 0.287842f,
+ 0.298828f, 0.310303f, 0.321533f, 0.333984f, 0.345459f, 0.357666f, 0.370117f, 0.382568f, 0.394287f, 0.407959f, 0.421875f, 0.433838f,
+ 0.446777f, 0.461426f, 0.475098f, 0.488525f, 0.504395f, 0.517578f, 0.744141f, 0.749512f, 0.746094f, 0.741699f, 0.736816f, 0.732422f,
+ 0.002172f, 0.006695f, 0.011093f, 0.015266f, 0.020081f, 0.024521f, 0.029388f, 0.033966f, 0.038727f, 0.043427f, 0.048706f, 0.053772f,
+ 0.059418f, 0.064270f, 0.069580f, 0.075500f, 0.081421f, 0.087280f, 0.093262f, 0.099670f, 0.106567f, 0.113220f, 0.119995f, 0.127197f,
+ 0.134644f, 0.142212f, 0.150146f, 0.157959f, 0.166382f, 0.174927f, 0.184082f, 0.192505f, 0.201904f, 0.211792f, 0.220825f, 0.230713f,
+ 0.240601f, 0.251221f, 0.261719f, 0.272461f, 0.282715f, 0.294434f, 0.305420f, 0.316650f, 0.328369f, 0.340088f, 0.352783f, 0.364746f,
+ 0.377197f, 0.389648f, 0.402832f, 0.416016f, 0.429443f, 0.442627f, 0.456055f, 0.469971f, 0.484863f, 0.499268f, 0.733887f, 0.741211f,
+ 0.737793f, 0.734375f, 0.729980f, 0.725586f, 0.002045f, 0.006187f, 0.010406f, 0.014664f, 0.018570f, 0.022675f, 0.027176f, 0.031586f,
+ 0.035858f, 0.040253f, 0.045227f, 0.049774f, 0.054504f, 0.059692f, 0.065186f, 0.070374f, 0.075500f, 0.080627f, 0.086792f, 0.092285f,
+ 0.098999f, 0.104675f, 0.111816f, 0.118286f, 0.125610f, 0.132324f, 0.139771f, 0.147339f, 0.155029f, 0.163696f, 0.171631f, 0.180420f,
+ 0.189087f, 0.197754f, 0.207275f, 0.216309f, 0.226440f, 0.236694f, 0.246338f, 0.256836f, 0.267334f, 0.278320f, 0.289062f, 0.300537f,
+ 0.312012f, 0.323975f, 0.335449f, 0.347168f, 0.359375f, 0.372314f, 0.384521f, 0.396973f, 0.410400f, 0.423584f, 0.437500f, 0.450928f,
+ 0.465332f, 0.479736f, 0.723145f, 0.732422f, 0.729980f, 0.726562f, 0.722656f, 0.718750f, 0.002148f, 0.005802f, 0.009811f, 0.013565f,
+ 0.017578f, 0.021179f, 0.025040f, 0.029053f, 0.033417f, 0.037445f, 0.042114f, 0.046112f, 0.050720f, 0.055511f, 0.060028f, 0.065002f,
+ 0.069458f, 0.075134f, 0.080078f, 0.085693f, 0.091492f, 0.097290f, 0.103394f, 0.109802f, 0.116089f, 0.122925f, 0.129883f, 0.136963f,
+ 0.144165f, 0.151733f, 0.160156f, 0.167847f, 0.176392f, 0.184692f, 0.193848f, 0.203003f, 0.212402f, 0.221680f, 0.231689f, 0.242065f,
+ 0.251953f, 0.262207f, 0.273193f, 0.283936f, 0.295410f, 0.306152f, 0.318359f, 0.329590f, 0.342285f, 0.354248f, 0.366455f, 0.379150f,
+ 0.391846f, 0.405273f, 0.418701f, 0.432617f, 0.446289f, 0.460205f, 0.712891f, 0.723633f, 0.722168f, 0.718750f, 0.715332f, 0.712402f,
+ 0.001963f, 0.005642f, 0.009071f, 0.012756f, 0.016006f, 0.020020f, 0.023422f, 0.027679f, 0.030762f, 0.034943f, 0.038605f, 0.042969f,
+ 0.047028f, 0.051178f, 0.055542f, 0.060120f, 0.064575f, 0.069153f, 0.074280f, 0.079041f, 0.084595f, 0.089905f, 0.095276f, 0.101440f,
+ 0.107300f, 0.113586f, 0.119751f, 0.127075f, 0.134033f, 0.141357f, 0.148438f, 0.155884f, 0.164062f, 0.172729f, 0.180542f, 0.190063f,
+ 0.198364f, 0.207764f, 0.217163f, 0.226807f, 0.236938f, 0.247070f, 0.257324f, 0.268066f, 0.278320f, 0.289795f, 0.301025f, 0.312744f,
+ 0.324707f, 0.336182f, 0.347900f, 0.360840f, 0.372803f, 0.386230f, 0.399902f, 0.413574f, 0.427246f, 0.441162f, 0.702148f, 0.714355f,
+ 0.713867f, 0.711426f, 0.707520f, 0.704590f, 0.001995f, 0.005245f, 0.008553f, 0.011543f, 0.015015f, 0.018326f, 0.021881f, 0.025131f,
+ 0.028641f, 0.032349f, 0.035675f, 0.039520f, 0.043549f, 0.047089f, 0.051086f, 0.054962f, 0.059265f, 0.063782f, 0.068054f, 0.072571f,
+ 0.077759f, 0.082520f, 0.088013f, 0.093323f, 0.098755f, 0.104858f, 0.111145f, 0.117371f, 0.123840f, 0.130615f, 0.137207f, 0.144897f,
+ 0.152344f, 0.160278f, 0.167969f, 0.176514f, 0.185425f, 0.193848f, 0.202881f, 0.212524f, 0.221924f, 0.231323f, 0.241821f, 0.251953f,
+ 0.262451f, 0.272949f, 0.284424f, 0.295166f, 0.306396f, 0.319092f, 0.329590f, 0.343018f, 0.355225f, 0.368652f, 0.381348f, 0.393799f,
+ 0.408447f, 0.422852f, 0.691406f, 0.706055f, 0.706055f, 0.703125f, 0.700684f, 0.697754f, 0.001692f, 0.004898f, 0.007828f, 0.011070f,
+ 0.013992f, 0.017227f, 0.020187f, 0.023499f, 0.026520f, 0.029526f, 0.033081f, 0.036377f, 0.039459f, 0.043396f, 0.047028f, 0.050323f,
+ 0.054199f, 0.058350f, 0.062317f, 0.066711f, 0.071106f, 0.075928f, 0.080750f, 0.085510f, 0.090820f, 0.096497f, 0.102234f, 0.107727f,
+ 0.114075f, 0.120300f, 0.126587f, 0.133789f, 0.141113f, 0.148193f, 0.156006f, 0.163696f, 0.171753f, 0.180542f, 0.188965f, 0.198120f,
+ 0.207275f, 0.216797f, 0.226318f, 0.236206f, 0.246338f, 0.256836f, 0.267334f, 0.278809f, 0.289795f, 0.300781f, 0.313232f, 0.324707f,
+ 0.337402f, 0.349365f, 0.362305f, 0.376221f, 0.389404f, 0.403809f, 0.680176f, 0.696289f, 0.697266f, 0.695312f, 0.692871f, 0.689941f,
+ 0.001606f, 0.004543f, 0.007450f, 0.010269f, 0.012962f, 0.015900f, 0.018677f, 0.021591f, 0.024628f, 0.027618f, 0.030182f, 0.033783f,
+ 0.036194f, 0.039734f, 0.042725f, 0.046478f, 0.049652f, 0.053253f, 0.057251f, 0.060883f, 0.065186f, 0.069336f, 0.073730f, 0.078247f,
+ 0.083252f, 0.088501f, 0.093628f, 0.099182f, 0.104553f, 0.110718f, 0.116577f, 0.123108f, 0.129883f, 0.136719f, 0.143921f, 0.151367f,
+ 0.159302f, 0.167114f, 0.175415f, 0.183960f, 0.192871f, 0.202148f, 0.210938f, 0.221436f, 0.230713f, 0.240723f, 0.250977f, 0.261963f,
+ 0.272461f, 0.283691f, 0.295166f, 0.306885f, 0.319092f, 0.331055f, 0.343750f, 0.356689f, 0.370361f, 0.383545f, 0.669434f, 0.687500f,
+ 0.688965f, 0.687500f, 0.685547f, 0.682617f, 0.001701f, 0.004345f, 0.006802f, 0.009514f, 0.012283f, 0.014793f, 0.017288f, 0.019958f,
+ 0.022614f, 0.025177f, 0.027695f, 0.030487f, 0.033081f, 0.035858f, 0.039185f, 0.042236f, 0.045319f, 0.048523f, 0.051941f, 0.055847f,
+ 0.059326f, 0.063171f, 0.067139f, 0.071594f, 0.075928f, 0.080566f, 0.085571f, 0.090454f, 0.095520f, 0.101196f, 0.106567f, 0.112427f,
+ 0.119019f, 0.125610f, 0.132324f, 0.139282f, 0.146973f, 0.154419f, 0.161987f, 0.170532f, 0.178833f, 0.187134f, 0.196777f, 0.206177f,
+ 0.214966f, 0.225220f, 0.235352f, 0.246094f, 0.255615f, 0.266846f, 0.278320f, 0.290039f, 0.301270f, 0.313477f, 0.325195f, 0.338867f,
+ 0.352539f, 0.365234f, 0.657715f, 0.678711f, 0.679688f, 0.679199f, 0.677734f, 0.675293f, 0.001310f, 0.003979f, 0.006393f, 0.008522f,
+ 0.011223f, 0.013557f, 0.015976f, 0.018433f, 0.020737f, 0.022842f, 0.025421f, 0.027649f, 0.030289f, 0.032806f, 0.035645f, 0.038025f,
+ 0.041199f, 0.044220f, 0.047058f, 0.050720f, 0.053589f, 0.057281f, 0.061157f, 0.064941f, 0.068787f, 0.072998f, 0.077698f, 0.082153f,
+ 0.086975f, 0.092102f, 0.097229f, 0.103027f, 0.108826f, 0.114746f, 0.121094f, 0.127930f, 0.134521f, 0.141846f, 0.149292f, 0.157227f,
+ 0.164673f, 0.173218f, 0.182007f, 0.190552f, 0.199951f, 0.209717f, 0.219360f, 0.229004f, 0.239502f, 0.250244f, 0.260986f, 0.272461f,
+ 0.282959f, 0.295166f, 0.307373f, 0.320557f, 0.333252f, 0.346436f, 0.646973f, 0.668945f, 0.670898f, 0.671387f, 0.669922f, 0.668457f,
+ 0.001348f, 0.003523f, 0.005863f, 0.008133f, 0.010338f, 0.012520f, 0.014511f, 0.016464f, 0.018768f, 0.020920f, 0.022888f, 0.025665f,
+ 0.027588f, 0.029861f, 0.032135f, 0.034485f, 0.037140f, 0.040039f, 0.042725f, 0.045532f, 0.048859f, 0.051971f, 0.055237f, 0.058594f,
+ 0.062408f, 0.066101f, 0.070251f, 0.074280f, 0.078735f, 0.083435f, 0.088318f, 0.093567f, 0.098633f, 0.104431f, 0.110291f, 0.116455f,
+ 0.122986f, 0.129517f, 0.136963f, 0.143921f, 0.152222f, 0.159546f, 0.167358f, 0.176514f, 0.185181f, 0.194214f, 0.203857f, 0.213623f,
+ 0.223389f, 0.233521f, 0.244385f, 0.255127f, 0.266602f, 0.277832f, 0.289307f, 0.301758f, 0.314697f, 0.328613f, 0.635254f, 0.659668f,
+ 0.663086f, 0.663086f, 0.662109f, 0.660156f, 0.001084f, 0.003263f, 0.005554f, 0.007416f, 0.009445f, 0.011185f, 0.013161f, 0.015366f,
+ 0.017136f, 0.019058f, 0.020935f, 0.022781f, 0.024857f, 0.026886f, 0.029160f, 0.031097f, 0.033569f, 0.035858f, 0.038361f, 0.040924f,
+ 0.043427f, 0.046478f, 0.049500f, 0.052948f, 0.056122f, 0.059418f, 0.063293f, 0.067139f, 0.070923f, 0.075073f, 0.079712f, 0.084229f,
+ 0.089233f, 0.094604f, 0.100037f, 0.105774f, 0.111694f, 0.117798f, 0.124634f, 0.131226f, 0.139038f, 0.146484f, 0.154175f, 0.162231f,
+ 0.170654f, 0.179199f, 0.188599f, 0.197754f, 0.207153f, 0.217407f, 0.227295f, 0.238159f, 0.248657f, 0.260986f, 0.271973f, 0.284912f,
+ 0.296631f, 0.308838f, 0.623535f, 0.650391f, 0.653809f, 0.654297f, 0.653809f, 0.652832f, 0.001070f, 0.003069f, 0.005108f, 0.006855f,
+ 0.008522f, 0.010384f, 0.011993f, 0.013847f, 0.015549f, 0.016968f, 0.018677f, 0.020660f, 0.022079f, 0.024048f, 0.026077f, 0.027954f,
+ 0.030014f, 0.032135f, 0.034210f, 0.036560f, 0.038971f, 0.041840f, 0.044434f, 0.047089f, 0.049896f, 0.053284f, 0.056763f, 0.060120f,
+ 0.063477f, 0.067505f, 0.071533f, 0.075928f, 0.080261f, 0.085205f, 0.089905f, 0.095520f, 0.100830f, 0.106567f, 0.113159f, 0.119385f,
+ 0.126221f, 0.133301f, 0.140259f, 0.148560f, 0.156494f, 0.165039f, 0.173462f, 0.182861f, 0.192017f, 0.201172f, 0.211548f, 0.221802f,
+ 0.232666f, 0.243286f, 0.254639f, 0.265869f, 0.278809f, 0.291260f, 0.611816f, 0.640625f, 0.645508f, 0.645996f, 0.645508f, 0.645020f,
+ 0.001057f, 0.002815f, 0.004646f, 0.006187f, 0.007935f, 0.009583f, 0.011139f, 0.012428f, 0.013878f, 0.015404f, 0.016830f, 0.018433f,
+ 0.019836f, 0.021637f, 0.023300f, 0.024857f, 0.026855f, 0.028519f, 0.030533f, 0.032593f, 0.034790f, 0.037140f, 0.039520f, 0.041748f,
+ 0.044525f, 0.047302f, 0.050232f, 0.053497f, 0.056580f, 0.059998f, 0.063721f, 0.067627f, 0.071777f, 0.076111f, 0.080627f, 0.085571f,
+ 0.090698f, 0.096130f, 0.101624f, 0.107849f, 0.114258f, 0.120544f, 0.127686f, 0.135132f, 0.142700f, 0.150269f, 0.158813f, 0.167725f,
+ 0.176392f, 0.185791f, 0.195312f, 0.205444f, 0.216064f, 0.226562f, 0.237793f, 0.248657f, 0.260254f, 0.272949f, 0.600098f, 0.631348f,
+ 0.636230f, 0.637207f, 0.637695f, 0.636719f, 0.001022f, 0.002628f, 0.004486f, 0.005684f, 0.007179f, 0.008636f, 0.009911f, 0.011307f,
+ 0.012428f, 0.013771f, 0.015152f, 0.016342f, 0.017822f, 0.018997f, 0.020584f, 0.022263f, 0.023651f, 0.025482f, 0.027191f, 0.028793f,
+ 0.030960f, 0.032715f, 0.034912f, 0.036987f, 0.039368f, 0.041840f, 0.044495f, 0.047180f, 0.050110f, 0.053314f, 0.056580f, 0.060059f,
+ 0.063660f, 0.067383f, 0.071777f, 0.075928f, 0.081055f, 0.085938f, 0.091187f, 0.096619f, 0.102356f, 0.108826f, 0.115051f, 0.121948f,
+ 0.129150f, 0.136475f, 0.144653f, 0.152832f, 0.161621f, 0.170288f, 0.179932f, 0.189209f, 0.198730f, 0.209595f, 0.220459f, 0.231201f,
+ 0.242798f, 0.255615f, 0.588867f, 0.621094f, 0.626953f, 0.629883f, 0.629395f, 0.629883f, 0.001016f, 0.002304f, 0.003975f, 0.005024f,
+ 0.006584f, 0.007812f, 0.008926f, 0.009987f, 0.011024f, 0.012199f, 0.013321f, 0.014595f, 0.015617f, 0.016830f, 0.018326f, 0.019577f,
+ 0.020798f, 0.022293f, 0.023758f, 0.025253f, 0.027145f, 0.028656f, 0.030640f, 0.032501f, 0.034546f, 0.036682f, 0.039001f, 0.041412f,
+ 0.044037f, 0.046875f, 0.049622f, 0.052917f, 0.056030f, 0.059387f, 0.063354f, 0.067383f, 0.071655f, 0.075928f, 0.080750f, 0.085876f,
+ 0.091248f, 0.097168f, 0.102905f, 0.109497f, 0.116272f, 0.123413f, 0.130859f, 0.138550f, 0.147217f, 0.155518f, 0.164551f, 0.173828f,
+ 0.183350f, 0.193481f, 0.204102f, 0.214600f, 0.225342f, 0.237915f, 0.575684f, 0.611816f, 0.617188f, 0.621094f, 0.621582f, 0.620605f,
+ 0.000768f, 0.002398f, 0.003801f, 0.004875f, 0.005848f, 0.006889f, 0.008072f, 0.008820f, 0.009758f, 0.010910f, 0.011810f, 0.013023f,
+ 0.013878f, 0.014786f, 0.016083f, 0.017166f, 0.018402f, 0.019577f, 0.020691f, 0.022125f, 0.023743f, 0.025009f, 0.026779f, 0.028336f,
+ 0.030075f, 0.031921f, 0.033997f, 0.036255f, 0.038452f, 0.040833f, 0.043488f, 0.045959f, 0.049011f, 0.052216f, 0.055634f, 0.059052f,
+ 0.062744f, 0.066956f, 0.071289f, 0.075745f, 0.080566f, 0.086060f, 0.091614f, 0.097351f, 0.103821f, 0.110291f, 0.117432f, 0.124939f,
+ 0.132568f, 0.140869f, 0.149414f, 0.158325f, 0.168213f, 0.177368f, 0.187744f, 0.197876f, 0.208984f, 0.219849f, 0.563965f, 0.602051f,
+ 0.608887f, 0.610840f, 0.613770f, 0.612305f, 0.000764f, 0.002028f, 0.003302f, 0.004276f, 0.005325f, 0.006035f, 0.007034f, 0.007843f,
+ 0.008904f, 0.009628f, 0.010323f, 0.011192f, 0.012039f, 0.013092f, 0.013924f, 0.014854f, 0.015793f, 0.016953f, 0.018036f, 0.019211f,
+ 0.020355f, 0.021667f, 0.023010f, 0.024582f, 0.026016f, 0.027771f, 0.029434f, 0.031235f, 0.033264f, 0.035217f, 0.037628f, 0.039886f,
+ 0.042084f, 0.044952f, 0.048126f, 0.051392f, 0.054779f, 0.058197f, 0.062164f, 0.066223f, 0.070740f, 0.075439f, 0.080566f, 0.086182f,
+ 0.091919f, 0.098145f, 0.104431f, 0.111633f, 0.119080f, 0.126587f, 0.134888f, 0.143311f, 0.152710f, 0.162109f, 0.171631f, 0.182129f,
+ 0.192139f, 0.203491f, 0.552246f, 0.591309f, 0.599609f, 0.602539f, 0.604004f, 0.604980f, 0.000782f, 0.001970f, 0.003082f, 0.003859f,
+ 0.004635f, 0.005611f, 0.006123f, 0.006767f, 0.007595f, 0.008270f, 0.009140f, 0.009674f, 0.010490f, 0.011040f, 0.011902f, 0.012749f,
+ 0.013573f, 0.014526f, 0.015656f, 0.016541f, 0.017548f, 0.018631f, 0.019730f, 0.021103f, 0.022446f, 0.023758f, 0.025162f, 0.026611f,
+ 0.028458f, 0.030441f, 0.032074f, 0.034302f, 0.036316f, 0.038727f, 0.041138f, 0.044098f, 0.046997f, 0.050232f, 0.053711f, 0.057281f,
+ 0.061340f, 0.065491f, 0.070435f, 0.075256f, 0.080688f, 0.086426f, 0.092346f, 0.098694f, 0.105896f, 0.113098f, 0.120911f, 0.129028f,
+ 0.137695f, 0.146606f, 0.155884f, 0.165894f, 0.175903f, 0.186768f, 0.540527f, 0.582520f, 0.590332f, 0.593750f, 0.594727f, 0.596191f,
+ 0.000711f, 0.001649f, 0.002529f, 0.003332f, 0.004036f, 0.004799f, 0.005444f, 0.006050f, 0.006638f, 0.007160f, 0.007771f, 0.008331f,
+ 0.008980f, 0.009644f, 0.010307f, 0.010887f, 0.011787f, 0.012306f, 0.013176f, 0.014099f, 0.014915f, 0.015839f, 0.016708f, 0.017822f,
+ 0.019073f, 0.020233f, 0.021423f, 0.022690f, 0.024033f, 0.025589f, 0.027344f, 0.028976f, 0.030930f, 0.032990f, 0.035156f, 0.037445f,
+ 0.040131f, 0.042847f, 0.045776f, 0.049042f, 0.052551f, 0.056519f, 0.060486f, 0.064941f, 0.069458f, 0.074951f, 0.080444f, 0.086487f,
+ 0.092957f, 0.099915f, 0.107361f, 0.114929f, 0.123535f, 0.131714f, 0.140747f, 0.150513f, 0.160767f, 0.171265f, 0.527832f, 0.572754f,
+ 0.581543f, 0.583496f, 0.586426f, 0.587402f, 0.000504f, 0.001575f, 0.002235f, 0.003147f, 0.003641f, 0.004150f, 0.004570f, 0.005173f,
+ 0.005863f, 0.006016f, 0.006462f, 0.007111f, 0.007660f, 0.008156f, 0.008736f, 0.009354f, 0.010094f, 0.010475f, 0.011253f, 0.011879f,
+ 0.012657f, 0.013603f, 0.014267f, 0.015099f, 0.016144f, 0.017014f, 0.017990f, 0.019104f, 0.020416f, 0.021652f, 0.022919f, 0.024353f,
+ 0.025986f, 0.027710f, 0.029602f, 0.031494f, 0.033722f, 0.036102f, 0.038635f, 0.041412f, 0.044525f, 0.047729f, 0.051636f, 0.055511f,
+ 0.059540f, 0.064331f, 0.069580f, 0.075073f, 0.080750f, 0.087341f, 0.094116f, 0.101379f, 0.109558f, 0.117676f, 0.126221f, 0.135376f,
+ 0.145874f, 0.155518f, 0.516113f, 0.562012f, 0.571777f, 0.576172f, 0.578125f, 0.579102f, 0.000445f, 0.001304f, 0.002201f, 0.002535f,
+ 0.003126f, 0.003664f, 0.004047f, 0.004463f, 0.004887f, 0.005234f, 0.005711f, 0.005997f, 0.006500f, 0.006901f, 0.007389f, 0.007904f,
+ 0.008293f, 0.008919f, 0.009499f, 0.009941f, 0.010635f, 0.011269f, 0.011948f, 0.012589f, 0.013435f, 0.014252f, 0.015091f, 0.016052f,
+ 0.017059f, 0.017960f, 0.019241f, 0.020264f, 0.021667f, 0.022995f, 0.024628f, 0.026230f, 0.027985f, 0.029984f, 0.032288f, 0.034515f,
+ 0.037140f, 0.040009f, 0.043152f, 0.046722f, 0.050354f, 0.054504f, 0.059143f, 0.064026f, 0.069458f, 0.075256f, 0.081726f, 0.088562f,
+ 0.095825f, 0.103516f, 0.112000f, 0.120850f, 0.130005f, 0.140381f, 0.502441f, 0.551758f, 0.562012f, 0.566406f, 0.568848f, 0.571289f,
+ 0.000396f, 0.001226f, 0.001812f, 0.002357f, 0.002796f, 0.003094f, 0.003328f, 0.003763f, 0.003979f, 0.004364f, 0.004642f, 0.005051f,
+ 0.005489f, 0.005745f, 0.006126f, 0.006611f, 0.007004f, 0.007473f, 0.007771f, 0.008293f, 0.008919f, 0.009392f, 0.009941f, 0.010483f,
+ 0.011169f, 0.011765f, 0.012436f, 0.013344f, 0.014030f, 0.014908f, 0.015778f, 0.016769f, 0.017838f, 0.018997f, 0.020279f, 0.021622f,
+ 0.023056f, 0.024704f, 0.026474f, 0.028580f, 0.030579f, 0.033051f, 0.035706f, 0.038605f, 0.041840f, 0.045380f, 0.049500f, 0.053986f,
+ 0.058685f, 0.063843f, 0.069885f, 0.076050f, 0.083191f, 0.090576f, 0.098511f, 0.107056f, 0.115479f, 0.125122f, 0.491211f, 0.541504f,
+ 0.552734f, 0.557617f, 0.560547f, 0.562012f, 0.000559f, 0.001152f, 0.001668f, 0.001955f, 0.002234f, 0.002550f, 0.002821f, 0.003057f,
+ 0.003296f, 0.003635f, 0.003948f, 0.004189f, 0.004448f, 0.004761f, 0.005077f, 0.005417f, 0.005699f, 0.006142f, 0.006458f, 0.006844f,
+ 0.007271f, 0.007717f, 0.008156f, 0.008675f, 0.009132f, 0.009590f, 0.010277f, 0.010864f, 0.011482f, 0.012131f, 0.012901f, 0.013741f,
+ 0.014595f, 0.015549f, 0.016525f, 0.017563f, 0.018799f, 0.020111f, 0.021484f, 0.023087f, 0.024765f, 0.026840f, 0.028992f, 0.031403f,
+ 0.034119f, 0.037323f, 0.040680f, 0.044464f, 0.048584f, 0.053345f, 0.058838f, 0.064514f, 0.071045f, 0.078247f, 0.085571f, 0.093567f,
+ 0.101685f, 0.111023f, 0.477539f, 0.531738f, 0.542969f, 0.548340f, 0.552246f, 0.553711f, 0.000459f, 0.000939f, 0.001184f, 0.001600f,
+ 0.001761f, 0.002144f, 0.002258f, 0.002546f, 0.002708f, 0.002922f, 0.003157f, 0.003414f, 0.003588f, 0.003918f, 0.004154f, 0.004387f,
+ 0.004662f, 0.004993f, 0.005249f, 0.005566f, 0.005867f, 0.006252f, 0.006573f, 0.007061f, 0.007408f, 0.007858f, 0.008270f, 0.008713f,
+ 0.009361f, 0.009911f, 0.010513f, 0.011047f, 0.011841f, 0.012566f, 0.013252f, 0.014175f, 0.015182f, 0.016220f, 0.017258f, 0.018524f,
+ 0.019882f, 0.021454f, 0.023132f, 0.025146f, 0.027405f, 0.029877f, 0.032745f, 0.035919f, 0.039642f, 0.043823f, 0.048492f, 0.053619f,
+ 0.059235f, 0.065735f, 0.072693f, 0.080383f, 0.088867f, 0.097412f, 0.466309f, 0.520508f, 0.533691f, 0.539062f, 0.542480f, 0.543945f,
+ 0.000369f, 0.000915f, 0.001124f, 0.001297f, 0.001534f, 0.001741f, 0.001833f, 0.002111f, 0.002272f, 0.002369f, 0.002516f, 0.002766f,
+ 0.002920f, 0.003162f, 0.003317f, 0.003551f, 0.003723f, 0.003941f, 0.004211f, 0.004425f, 0.004757f, 0.004993f, 0.005306f, 0.005581f,
+ 0.005859f, 0.006203f, 0.006592f, 0.007015f, 0.007450f, 0.007828f, 0.008377f, 0.008797f, 0.009361f, 0.009895f, 0.010582f, 0.011322f,
+ 0.012016f, 0.012772f, 0.013687f, 0.014748f, 0.015778f, 0.016907f, 0.018326f, 0.019821f, 0.021622f, 0.023483f, 0.025742f, 0.028473f,
+ 0.031525f, 0.034943f, 0.038910f, 0.043457f, 0.048645f, 0.054749f, 0.061279f, 0.068420f, 0.076111f, 0.084778f, 0.453613f, 0.510742f,
+ 0.523926f, 0.529785f, 0.533203f, 0.536133f, 0.000186f, 0.000582f, 0.000925f, 0.001026f, 0.001228f, 0.001351f, 0.001470f, 0.001606f,
+ 0.001765f, 0.001908f, 0.001999f, 0.002104f, 0.002281f, 0.002476f, 0.002659f, 0.002766f, 0.002911f, 0.003040f, 0.003344f, 0.003475f,
+ 0.003683f, 0.003922f, 0.004185f, 0.004417f, 0.004673f, 0.004890f, 0.005123f, 0.005440f, 0.005817f, 0.006126f, 0.006481f, 0.006859f,
+ 0.007275f, 0.007740f, 0.008202f, 0.008728f, 0.009315f, 0.009972f, 0.010597f, 0.011391f, 0.012268f, 0.013252f, 0.014221f, 0.015388f,
+ 0.016724f, 0.018265f, 0.020004f, 0.022049f, 0.024445f, 0.027206f, 0.030762f, 0.034424f, 0.038971f, 0.044220f, 0.050262f, 0.056976f,
+ 0.064575f, 0.072083f, 0.441650f, 0.500488f, 0.514160f, 0.520020f, 0.524414f, 0.526855f, 0.000194f, 0.000467f, 0.000775f, 0.000911f,
+ 0.000994f, 0.001081f, 0.001221f, 0.001204f, 0.001368f, 0.001479f, 0.001582f, 0.001707f, 0.001801f, 0.001921f, 0.001993f, 0.002146f,
+ 0.002245f, 0.002398f, 0.002531f, 0.002674f, 0.002871f, 0.003033f, 0.003172f, 0.003374f, 0.003519f, 0.003742f, 0.003963f, 0.004158f,
+ 0.004448f, 0.004650f, 0.005032f, 0.005230f, 0.005550f, 0.005932f, 0.006241f, 0.006634f, 0.007088f, 0.007572f, 0.008110f, 0.008636f,
+ 0.009323f, 0.010071f, 0.010834f, 0.011757f, 0.012779f, 0.013863f, 0.015190f, 0.016769f, 0.018555f, 0.020706f, 0.023331f, 0.026352f,
+ 0.030182f, 0.034760f, 0.040039f, 0.046356f, 0.053406f, 0.060638f, 0.427979f, 0.489502f, 0.504883f, 0.511719f, 0.515137f, 0.518066f,
+ 0.000339f, 0.000388f, 0.000559f, 0.000617f, 0.000667f, 0.000795f, 0.000853f, 0.000938f, 0.000972f, 0.001079f, 0.001217f, 0.001274f,
+ 0.001369f, 0.001480f, 0.001536f, 0.001581f, 0.001711f, 0.001804f, 0.001900f, 0.002047f, 0.002129f, 0.002245f, 0.002394f, 0.002493f,
+ 0.002645f, 0.002773f, 0.002974f, 0.003124f, 0.003307f, 0.003559f, 0.003757f, 0.003893f, 0.004169f, 0.004353f, 0.004684f, 0.004963f,
+ 0.005272f, 0.005615f, 0.005981f, 0.006420f, 0.006878f, 0.007378f, 0.008080f, 0.008682f, 0.009438f, 0.010239f, 0.011299f, 0.012459f,
+ 0.013809f, 0.015305f, 0.017212f, 0.019501f, 0.022583f, 0.026245f, 0.030838f, 0.036255f, 0.042938f, 0.049988f, 0.416504f, 0.479492f,
+ 0.495361f, 0.501465f, 0.505859f, 0.508789f, 0.000148f, 0.000349f, 0.000414f, 0.000480f, 0.000554f, 0.000575f, 0.000675f, 0.000641f,
+ 0.000743f, 0.000809f, 0.000882f, 0.000919f, 0.000967f, 0.001019f, 0.001122f, 0.001156f, 0.001264f, 0.001322f, 0.001392f, 0.001431f,
+ 0.001529f, 0.001625f, 0.001735f, 0.001802f, 0.001912f, 0.002007f, 0.002131f, 0.002237f, 0.002338f, 0.002525f, 0.002638f, 0.002850f,
+ 0.002962f, 0.003130f, 0.003347f, 0.003536f, 0.003784f, 0.004063f, 0.004364f, 0.004623f, 0.004929f, 0.005314f, 0.005714f, 0.006191f,
+ 0.006760f, 0.007385f, 0.008080f, 0.008919f, 0.009933f, 0.011078f, 0.012390f, 0.014130f, 0.016251f, 0.019012f, 0.022720f, 0.027496f,
+ 0.033234f, 0.040192f, 0.403320f, 0.468994f, 0.485352f, 0.491943f, 0.497070f, 0.500000f, 0.000093f, 0.000191f, 0.000299f, 0.000284f,
+ 0.000367f, 0.000453f, 0.000420f, 0.000467f, 0.000519f, 0.000611f, 0.000607f, 0.000626f, 0.000647f, 0.000722f, 0.000741f, 0.000815f,
+ 0.000829f, 0.000910f, 0.000967f, 0.001023f, 0.001076f, 0.001138f, 0.001197f, 0.001260f, 0.001334f, 0.001393f, 0.001490f, 0.001562f,
+ 0.001633f, 0.001772f, 0.001831f, 0.001949f, 0.002056f, 0.002167f, 0.002312f, 0.002472f, 0.002607f, 0.002781f, 0.002972f, 0.003145f,
+ 0.003387f, 0.003647f, 0.003941f, 0.004253f, 0.004604f, 0.005051f, 0.005558f, 0.006165f, 0.006836f, 0.007660f, 0.008652f, 0.009796f,
+ 0.011284f, 0.013260f, 0.015945f, 0.019608f, 0.024734f, 0.031082f, 0.390625f, 0.459229f, 0.475586f, 0.482910f, 0.488037f, 0.490723f,
+ 0.000132f, 0.000208f, 0.000217f, 0.000221f, 0.000267f, 0.000272f, 0.000277f, 0.000320f, 0.000356f, 0.000372f, 0.000372f, 0.000446f,
+ 0.000436f, 0.000487f, 0.000514f, 0.000531f, 0.000587f, 0.000601f, 0.000629f, 0.000658f, 0.000707f, 0.000736f, 0.000784f, 0.000816f,
+ 0.000880f, 0.000909f, 0.000978f, 0.001035f, 0.001084f, 0.001135f, 0.001200f, 0.001278f, 0.001357f, 0.001429f, 0.001516f, 0.001588f,
+ 0.001724f, 0.001802f, 0.001949f, 0.002085f, 0.002230f, 0.002373f, 0.002554f, 0.002743f, 0.003000f, 0.003300f, 0.003611f, 0.003963f,
+ 0.004425f, 0.004967f, 0.005630f, 0.006424f, 0.007462f, 0.008812f, 0.010551f, 0.013184f, 0.017258f, 0.022980f, 0.377686f, 0.448242f,
+ 0.465820f, 0.474121f, 0.478760f, 0.481934f, 0.000041f, 0.000149f, 0.000126f, 0.000128f, 0.000158f, 0.000196f, 0.000174f, 0.000206f,
+ 0.000216f, 0.000223f, 0.000231f, 0.000244f, 0.000276f, 0.000291f, 0.000312f, 0.000326f, 0.000338f, 0.000374f, 0.000387f, 0.000423f,
+ 0.000430f, 0.000447f, 0.000471f, 0.000509f, 0.000538f, 0.000583f, 0.000591f, 0.000613f, 0.000659f, 0.000688f, 0.000743f, 0.000779f,
+ 0.000833f, 0.000865f, 0.000924f, 0.000966f, 0.001033f, 0.001106f, 0.001186f, 0.001245f, 0.001336f, 0.001453f, 0.001559f, 0.001685f,
+ 0.001807f, 0.001980f, 0.002207f, 0.002417f, 0.002689f, 0.003027f, 0.003418f, 0.003933f, 0.004604f, 0.005482f, 0.006641f, 0.008263f,
+ 0.011017f, 0.015778f, 0.364746f, 0.437256f, 0.456055f, 0.463623f, 0.469238f, 0.472656f, 0.000100f, 0.000089f, 0.000085f, 0.000081f,
+ 0.000101f, 0.000096f, 0.000116f, 0.000116f, 0.000119f, 0.000126f, 0.000141f, 0.000157f, 0.000149f, 0.000158f, 0.000179f, 0.000176f,
+ 0.000195f, 0.000206f, 0.000216f, 0.000222f, 0.000240f, 0.000246f, 0.000269f, 0.000279f, 0.000303f, 0.000320f, 0.000333f, 0.000345f,
+ 0.000365f, 0.000379f, 0.000409f, 0.000434f, 0.000453f, 0.000477f, 0.000511f, 0.000541f, 0.000569f, 0.000608f, 0.000656f, 0.000689f,
+ 0.000738f, 0.000795f, 0.000867f, 0.000918f, 0.001005f, 0.001087f, 0.001189f, 0.001312f, 0.001465f, 0.001656f, 0.001873f, 0.002171f,
+ 0.002546f, 0.003056f, 0.003767f, 0.004765f, 0.006390f, 0.009811f, 0.353516f, 0.426758f, 0.446045f, 0.455078f, 0.459717f, 0.464111f,
+ 0.000084f, 0.000059f, 0.000050f, 0.000049f, 0.000049f, 0.000047f, 0.000052f, 0.000058f, 0.000061f, 0.000075f, 0.000065f, 0.000066f,
+ 0.000080f, 0.000071f, 0.000076f, 0.000082f, 0.000092f, 0.000102f, 0.000100f, 0.000105f, 0.000110f, 0.000115f, 0.000121f, 0.000133f,
+ 0.000140f, 0.000146f, 0.000152f, 0.000164f, 0.000177f, 0.000185f, 0.000192f, 0.000202f, 0.000213f, 0.000224f, 0.000241f, 0.000252f,
+ 0.000268f, 0.000283f, 0.000310f, 0.000328f, 0.000348f, 0.000374f, 0.000406f, 0.000431f, 0.000470f, 0.000515f, 0.000560f, 0.000614f,
+ 0.000688f, 0.000771f, 0.000884f, 0.001019f, 0.001202f, 0.001466f, 0.001827f, 0.002369f, 0.003269f, 0.005184f, 0.341797f, 0.416016f,
+ 0.435791f, 0.445557f, 0.450928f, 0.455078f, 0.000062f, 0.000042f, 0.000035f, 0.000030f, 0.000028f, 0.000026f, 0.000024f, 0.000023f,
+ 0.000023f, 0.000023f, 0.000023f, 0.000030f, 0.000024f, 0.000024f, 0.000031f, 0.000034f, 0.000035f, 0.000037f, 0.000039f, 0.000040f,
+ 0.000043f, 0.000048f, 0.000050f, 0.000046f, 0.000051f, 0.000057f, 0.000059f, 0.000058f, 0.000063f, 0.000068f, 0.000070f, 0.000077f,
+ 0.000082f, 0.000082f, 0.000086f, 0.000093f, 0.000100f, 0.000106f, 0.000114f, 0.000120f, 0.000131f, 0.000136f, 0.000145f, 0.000161f,
+ 0.000171f, 0.000186f, 0.000204f, 0.000222f, 0.000251f, 0.000281f, 0.000318f, 0.000364f, 0.000430f, 0.000530f, 0.000672f, 0.000902f,
+ 0.001316f, 0.002153f, 0.329346f, 0.406006f, 0.426758f, 0.436035f, 0.441650f, 0.445801f, 0.000031f, 0.000020f, 0.000016f, 0.000014f,
+ 0.000014f, 0.000013f, 0.000012f, 0.000012f, 0.000011f, 0.000011f, 0.000010f, 0.000010f, 0.000010f, 0.000009f, 0.000009f, 0.000009f,
+ 0.000008f, 0.000008f, 0.000007f, 0.000007f, 0.000007f, 0.000008f, 0.000009f, 0.000010f, 0.000011f, 0.000012f, 0.000012f, 0.000014f,
+ 0.000014f, 0.000013f, 0.000015f, 0.000016f, 0.000018f, 0.000019f, 0.000019f, 0.000020f, 0.000023f, 0.000023f, 0.000025f, 0.000027f,
+ 0.000028f, 0.000031f, 0.000034f, 0.000034f, 0.000037f, 0.000041f, 0.000045f, 0.000049f, 0.000053f, 0.000059f, 0.000066f, 0.000079f,
+ 0.000093f, 0.000112f, 0.000144f, 0.000196f, 0.000307f, 0.000598f, 0.317383f, 0.394531f, 0.416504f, 0.425781f, 0.432129f, 0.436279f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f,
+ 0.000002f, 0.000002f, 0.000003f, 0.000003f, 0.000004f, 0.000004f, 0.000004f, 0.000007f, 0.000010f, 0.000026f, 0.305420f, 0.384277f,
+ 0.405762f, 0.416504f, 0.423340f, 0.427246f,
+ },
+ {
+ 0.009338f, 0.028412f, 0.047394f, 0.066895f, 0.086548f, 0.105774f, 0.125854f, 0.145142f, 0.165039f, 0.184570f, 0.204712f, 0.223389f,
+ 0.243164f, 0.261719f, 0.280762f, 0.299805f, 0.318848f, 0.338135f, 0.356445f, 0.374512f, 0.393066f, 0.412354f, 0.429932f, 0.447510f,
+ 0.465576f, 0.483887f, 0.501465f, 0.518555f, 0.536133f, 0.553711f, 0.570312f, 0.587402f, 0.604492f, 0.621094f, 0.637695f, 0.653809f,
+ 0.670898f, 0.687012f, 0.702637f, 0.719238f, 0.734863f, 0.750488f, 0.765137f, 0.780762f, 0.795898f, 0.811523f, 0.825684f, 0.840820f,
+ 0.855469f, 0.870605f, 0.884277f, 0.899414f, 0.913086f, 0.926758f, 0.940918f, 0.955078f, 0.967773f, 0.981934f, 0.966797f, 0.923828f,
+ 0.894531f, 0.870605f, 0.850586f, 0.832520f, 0.008652f, 0.026825f, 0.045380f, 0.063965f, 0.082703f, 0.101807f, 0.120544f, 0.139282f,
+ 0.158569f, 0.177246f, 0.196167f, 0.214722f, 0.233521f, 0.252197f, 0.270508f, 0.289062f, 0.307861f, 0.325928f, 0.343994f, 0.361328f,
+ 0.380615f, 0.397705f, 0.415771f, 0.433594f, 0.450928f, 0.469238f, 0.485596f, 0.502930f, 0.520020f, 0.537598f, 0.553223f, 0.570801f,
+ 0.586914f, 0.603516f, 0.620117f, 0.636719f, 0.652832f, 0.668945f, 0.683594f, 0.700684f, 0.716309f, 0.731934f, 0.746582f, 0.762695f,
+ 0.777344f, 0.792480f, 0.807617f, 0.821777f, 0.836914f, 0.850586f, 0.865723f, 0.880371f, 0.894043f, 0.908691f, 0.921875f, 0.937012f,
+ 0.950195f, 0.963867f, 0.958496f, 0.917969f, 0.889648f, 0.867188f, 0.847656f, 0.830566f, 0.008293f, 0.025620f, 0.042999f, 0.061035f,
+ 0.079163f, 0.097656f, 0.115112f, 0.132812f, 0.151367f, 0.170532f, 0.188599f, 0.206787f, 0.223999f, 0.242920f, 0.259766f, 0.278809f,
+ 0.296143f, 0.313232f, 0.331055f, 0.349609f, 0.367432f, 0.385010f, 0.401611f, 0.418945f, 0.435791f, 0.453369f, 0.469727f, 0.487061f,
+ 0.503906f, 0.520508f, 0.537598f, 0.553223f, 0.569824f, 0.586426f, 0.603027f, 0.619141f, 0.634277f, 0.650879f, 0.666504f, 0.682129f,
+ 0.697754f, 0.713379f, 0.729004f, 0.743164f, 0.758301f, 0.773926f, 0.789062f, 0.803711f, 0.818359f, 0.833008f, 0.847168f, 0.862305f,
+ 0.875488f, 0.890137f, 0.903809f, 0.917480f, 0.931152f, 0.945801f, 0.950195f, 0.911133f, 0.884766f, 0.862793f, 0.844238f, 0.828125f,
+ 0.008148f, 0.024506f, 0.041016f, 0.058289f, 0.075256f, 0.092712f, 0.109802f, 0.127319f, 0.145020f, 0.162964f, 0.180298f, 0.198120f,
+ 0.215454f, 0.232300f, 0.250244f, 0.267822f, 0.285400f, 0.302734f, 0.318848f, 0.335693f, 0.354004f, 0.371582f, 0.388672f, 0.405029f,
+ 0.421143f, 0.438965f, 0.455078f, 0.472168f, 0.487549f, 0.503906f, 0.521484f, 0.537598f, 0.551758f, 0.568359f, 0.584961f, 0.601562f,
+ 0.616211f, 0.633301f, 0.648926f, 0.664062f, 0.679199f, 0.694824f, 0.709473f, 0.725098f, 0.740234f, 0.755371f, 0.770020f, 0.785156f,
+ 0.799805f, 0.813965f, 0.828125f, 0.842773f, 0.856934f, 0.871582f, 0.884766f, 0.898926f, 0.912598f, 0.926270f, 0.941895f, 0.905273f,
+ 0.879883f, 0.858887f, 0.840332f, 0.824707f, 0.007523f, 0.023010f, 0.039246f, 0.055542f, 0.072021f, 0.088257f, 0.105347f, 0.122070f,
+ 0.138306f, 0.155273f, 0.172852f, 0.189575f, 0.206421f, 0.223145f, 0.240112f, 0.256592f, 0.274170f, 0.291260f, 0.307617f, 0.323730f,
+ 0.340576f, 0.358154f, 0.374023f, 0.390137f, 0.406738f, 0.422852f, 0.440430f, 0.456543f, 0.472656f, 0.489014f, 0.504395f, 0.520996f,
+ 0.537109f, 0.552734f, 0.568848f, 0.584473f, 0.599121f, 0.615234f, 0.630859f, 0.645020f, 0.660645f, 0.677246f, 0.690918f, 0.706055f,
+ 0.721680f, 0.736328f, 0.750977f, 0.766113f, 0.780273f, 0.794922f, 0.809570f, 0.823730f, 0.837891f, 0.852539f, 0.866211f, 0.880371f,
+ 0.894531f, 0.908691f, 0.933105f, 0.898438f, 0.874023f, 0.853516f, 0.836426f, 0.821289f, 0.007339f, 0.021912f, 0.037170f, 0.052948f,
+ 0.068665f, 0.084412f, 0.100281f, 0.116333f, 0.133057f, 0.149048f, 0.164795f, 0.181274f, 0.198242f, 0.214233f, 0.230835f, 0.247314f,
+ 0.262939f, 0.279053f, 0.295898f, 0.312500f, 0.328613f, 0.344971f, 0.360107f, 0.376953f, 0.392578f, 0.408691f, 0.425293f, 0.441406f,
+ 0.456787f, 0.472656f, 0.488525f, 0.504883f, 0.520020f, 0.535156f, 0.550781f, 0.567383f, 0.582520f, 0.597656f, 0.612793f, 0.628418f,
+ 0.642578f, 0.657715f, 0.673340f, 0.688477f, 0.702637f, 0.718750f, 0.731445f, 0.748047f, 0.762207f, 0.775879f, 0.791016f, 0.804199f,
+ 0.818848f, 0.833008f, 0.847656f, 0.861328f, 0.875000f, 0.890625f, 0.924316f, 0.891602f, 0.868164f, 0.849121f, 0.832520f, 0.817871f,
+ 0.006817f, 0.021133f, 0.035675f, 0.050018f, 0.065186f, 0.080505f, 0.096069f, 0.111389f, 0.126831f, 0.142456f, 0.158203f, 0.174194f,
+ 0.189819f, 0.205444f, 0.220703f, 0.237183f, 0.253174f, 0.268555f, 0.284668f, 0.300049f, 0.316406f, 0.332275f, 0.347656f, 0.363281f,
+ 0.379395f, 0.394775f, 0.409668f, 0.426270f, 0.442139f, 0.457275f, 0.472656f, 0.488037f, 0.503906f, 0.518555f, 0.534668f, 0.548828f,
+ 0.564941f, 0.579590f, 0.595215f, 0.610352f, 0.625000f, 0.640137f, 0.654785f, 0.669434f, 0.685059f, 0.699707f, 0.713379f, 0.728027f,
+ 0.742676f, 0.758301f, 0.770996f, 0.786621f, 0.799316f, 0.813965f, 0.828613f, 0.842285f, 0.856445f, 0.871094f, 0.915527f, 0.884766f,
+ 0.862305f, 0.843750f, 0.827637f, 0.813965f, 0.006611f, 0.020111f, 0.033752f, 0.047974f, 0.062378f, 0.076843f, 0.091431f, 0.106262f,
+ 0.120911f, 0.136230f, 0.151123f, 0.166382f, 0.181396f, 0.196899f, 0.211670f, 0.227295f, 0.242554f, 0.257812f, 0.272705f, 0.288086f,
+ 0.304199f, 0.318848f, 0.334473f, 0.349609f, 0.365967f, 0.379883f, 0.395996f, 0.410889f, 0.426270f, 0.441895f, 0.457764f, 0.472412f,
+ 0.487061f, 0.502930f, 0.517090f, 0.532227f, 0.547363f, 0.563477f, 0.577637f, 0.592285f, 0.606934f, 0.621582f, 0.636230f, 0.651367f,
+ 0.665039f, 0.679688f, 0.694336f, 0.709473f, 0.724121f, 0.738770f, 0.752930f, 0.767578f, 0.780762f, 0.795410f, 0.809082f, 0.823242f,
+ 0.837891f, 0.852539f, 0.906250f, 0.877441f, 0.855957f, 0.838379f, 0.823242f, 0.809570f, 0.006153f, 0.019150f, 0.031952f, 0.045624f,
+ 0.059326f, 0.073303f, 0.087158f, 0.101562f, 0.115540f, 0.129395f, 0.144653f, 0.159180f, 0.173584f, 0.187866f, 0.203613f, 0.217651f,
+ 0.232300f, 0.247559f, 0.262207f, 0.277344f, 0.292969f, 0.307617f, 0.322021f, 0.336914f, 0.352051f, 0.367188f, 0.381592f, 0.396729f,
+ 0.411377f, 0.427002f, 0.440918f, 0.456787f, 0.471436f, 0.486572f, 0.500977f, 0.514648f, 0.530273f, 0.545410f, 0.560059f, 0.574219f,
+ 0.589355f, 0.604004f, 0.618164f, 0.632324f, 0.647461f, 0.661133f, 0.676270f, 0.691406f, 0.705078f, 0.719727f, 0.733887f, 0.748047f,
+ 0.763184f, 0.777344f, 0.791016f, 0.805176f, 0.819336f, 0.833496f, 0.896973f, 0.870117f, 0.849609f, 0.833008f, 0.818359f, 0.805176f,
+ 0.005947f, 0.018311f, 0.030731f, 0.043243f, 0.056732f, 0.069580f, 0.083435f, 0.096558f, 0.110474f, 0.123962f, 0.137695f, 0.152100f,
+ 0.166016f, 0.180054f, 0.194092f, 0.208862f, 0.222656f, 0.236816f, 0.251465f, 0.266113f, 0.281250f, 0.294922f, 0.309814f, 0.324219f,
+ 0.338623f, 0.352783f, 0.368164f, 0.382568f, 0.397461f, 0.411377f, 0.426025f, 0.441162f, 0.455078f, 0.469971f, 0.484131f, 0.499268f,
+ 0.513672f, 0.528320f, 0.542969f, 0.557129f, 0.571289f, 0.585449f, 0.599609f, 0.614258f, 0.628418f, 0.643066f, 0.657227f, 0.671875f,
+ 0.686523f, 0.700195f, 0.714355f, 0.729004f, 0.743164f, 0.756836f, 0.770996f, 0.785645f, 0.800293f, 0.814453f, 0.888184f, 0.862305f,
+ 0.843262f, 0.827148f, 0.813477f, 0.800781f, 0.005646f, 0.017136f, 0.029388f, 0.041534f, 0.053802f, 0.066162f, 0.078979f, 0.092285f,
+ 0.104980f, 0.118408f, 0.130981f, 0.144897f, 0.158203f, 0.172363f, 0.185547f, 0.199951f, 0.213501f, 0.226440f, 0.240356f, 0.254883f,
+ 0.269287f, 0.283691f, 0.297607f, 0.311279f, 0.325439f, 0.339600f, 0.353760f, 0.368408f, 0.382812f, 0.396973f, 0.410645f, 0.425049f,
+ 0.439697f, 0.454102f, 0.468262f, 0.482178f, 0.496094f, 0.510742f, 0.524902f, 0.539551f, 0.554199f, 0.568359f, 0.582031f, 0.596191f,
+ 0.610352f, 0.624023f, 0.639160f, 0.652832f, 0.667969f, 0.681152f, 0.696289f, 0.709961f, 0.723633f, 0.738770f, 0.752441f, 0.765625f,
+ 0.780273f, 0.794922f, 0.878418f, 0.855469f, 0.836914f, 0.821289f, 0.808105f, 0.796387f, 0.005478f, 0.016174f, 0.027740f, 0.038849f,
+ 0.051270f, 0.063293f, 0.075317f, 0.087402f, 0.099854f, 0.112793f, 0.125366f, 0.138184f, 0.151001f, 0.164307f, 0.177734f, 0.190918f,
+ 0.204102f, 0.217529f, 0.231079f, 0.244141f, 0.257324f, 0.271240f, 0.284668f, 0.299072f, 0.312744f, 0.326660f, 0.339600f, 0.354004f,
+ 0.368408f, 0.382324f, 0.395264f, 0.410156f, 0.423096f, 0.437500f, 0.452148f, 0.465332f, 0.480469f, 0.493408f, 0.507812f, 0.521484f,
+ 0.535645f, 0.549316f, 0.563477f, 0.578125f, 0.592285f, 0.605957f, 0.620605f, 0.634766f, 0.647949f, 0.662109f, 0.676758f, 0.691406f,
+ 0.705078f, 0.718750f, 0.732910f, 0.747559f, 0.762207f, 0.777344f, 0.869141f, 0.847656f, 0.830078f, 0.815430f, 0.802734f, 0.791504f,
+ 0.005005f, 0.015762f, 0.026657f, 0.037384f, 0.048218f, 0.059998f, 0.071594f, 0.083618f, 0.095215f, 0.107666f, 0.119141f, 0.131958f,
+ 0.144043f, 0.156128f, 0.169800f, 0.182129f, 0.194824f, 0.207031f, 0.219849f, 0.233032f, 0.247559f, 0.260010f, 0.272949f, 0.286133f,
+ 0.300293f, 0.313477f, 0.326172f, 0.339844f, 0.353516f, 0.367188f, 0.381592f, 0.394531f, 0.407959f, 0.422363f, 0.436279f, 0.449463f,
+ 0.462891f, 0.477539f, 0.490723f, 0.504395f, 0.518066f, 0.532227f, 0.545898f, 0.560059f, 0.574219f, 0.586914f, 0.602051f, 0.616211f,
+ 0.629395f, 0.644531f, 0.657227f, 0.671875f, 0.685547f, 0.699707f, 0.713867f, 0.728516f, 0.742676f, 0.756836f, 0.859375f, 0.840332f,
+ 0.823730f, 0.809082f, 0.797363f, 0.786621f, 0.004894f, 0.014786f, 0.025269f, 0.035614f, 0.045990f, 0.057129f, 0.068420f, 0.079224f,
+ 0.090698f, 0.102112f, 0.113708f, 0.125610f, 0.137817f, 0.149536f, 0.161377f, 0.174316f, 0.185791f, 0.198486f, 0.211670f, 0.223389f,
+ 0.236816f, 0.249512f, 0.261230f, 0.274414f, 0.287598f, 0.300537f, 0.313232f, 0.326904f, 0.340576f, 0.353027f, 0.366211f, 0.379883f,
+ 0.393066f, 0.406006f, 0.419678f, 0.433350f, 0.446289f, 0.460205f, 0.473633f, 0.487305f, 0.500977f, 0.515137f, 0.528320f, 0.542480f,
+ 0.554688f, 0.569824f, 0.583008f, 0.597656f, 0.610840f, 0.625488f, 0.638672f, 0.652832f, 0.666504f, 0.681152f, 0.694824f, 0.708984f,
+ 0.723145f, 0.737793f, 0.850098f, 0.833008f, 0.817383f, 0.802734f, 0.791992f, 0.780762f, 0.004536f, 0.014160f, 0.023972f, 0.033630f,
+ 0.043823f, 0.053955f, 0.064697f, 0.075195f, 0.086365f, 0.096802f, 0.108276f, 0.119751f, 0.130493f, 0.142212f, 0.153687f, 0.165405f,
+ 0.177246f, 0.189331f, 0.201538f, 0.213501f, 0.225464f, 0.237915f, 0.250244f, 0.262939f, 0.274902f, 0.288086f, 0.300781f, 0.312988f,
+ 0.326172f, 0.339600f, 0.352051f, 0.365479f, 0.377930f, 0.390625f, 0.403564f, 0.417480f, 0.430420f, 0.444092f, 0.457520f, 0.470215f,
+ 0.483643f, 0.497559f, 0.510742f, 0.524414f, 0.537598f, 0.551270f, 0.564941f, 0.579102f, 0.592285f, 0.605957f, 0.619629f, 0.633789f,
+ 0.647949f, 0.661621f, 0.675293f, 0.689453f, 0.704102f, 0.718262f, 0.840332f, 0.825195f, 0.809570f, 0.797363f, 0.786133f, 0.776367f,
+ 0.004433f, 0.013138f, 0.022720f, 0.032013f, 0.041199f, 0.051147f, 0.061462f, 0.071716f, 0.082336f, 0.091919f, 0.102722f, 0.113586f,
+ 0.124390f, 0.135010f, 0.145996f, 0.157837f, 0.168823f, 0.180054f, 0.192383f, 0.203491f, 0.215332f, 0.227417f, 0.239502f, 0.251221f,
+ 0.263672f, 0.275635f, 0.287842f, 0.300537f, 0.312500f, 0.324707f, 0.338135f, 0.350342f, 0.363037f, 0.375977f, 0.388672f, 0.401611f,
+ 0.413818f, 0.427246f, 0.440186f, 0.453613f, 0.466064f, 0.479736f, 0.492920f, 0.506836f, 0.519531f, 0.533203f, 0.546875f, 0.560059f,
+ 0.573242f, 0.587402f, 0.600098f, 0.614746f, 0.628418f, 0.642578f, 0.657227f, 0.670898f, 0.685059f, 0.699707f, 0.830566f, 0.816406f,
+ 0.802734f, 0.791016f, 0.780273f, 0.770996f, 0.004372f, 0.012619f, 0.021393f, 0.030350f, 0.039276f, 0.048523f, 0.058289f, 0.067505f,
+ 0.077393f, 0.087585f, 0.097290f, 0.107727f, 0.118225f, 0.128296f, 0.138550f, 0.149414f, 0.160278f, 0.171631f, 0.182739f, 0.193359f,
+ 0.205200f, 0.216187f, 0.228027f, 0.240234f, 0.251465f, 0.263428f, 0.275146f, 0.287598f, 0.298828f, 0.311523f, 0.323242f, 0.336182f,
+ 0.348633f, 0.360107f, 0.372803f, 0.385986f, 0.398682f, 0.411621f, 0.424072f, 0.436523f, 0.449951f, 0.462891f, 0.475098f, 0.488525f,
+ 0.501953f, 0.514648f, 0.527344f, 0.541992f, 0.555176f, 0.569336f, 0.582031f, 0.596191f, 0.609863f, 0.623047f, 0.637695f, 0.651855f,
+ 0.665527f, 0.679688f, 0.821289f, 0.808105f, 0.795410f, 0.784180f, 0.774902f, 0.765137f, 0.003937f, 0.012169f, 0.020477f, 0.028641f,
+ 0.037781f, 0.046448f, 0.055481f, 0.064209f, 0.073181f, 0.082458f, 0.092651f, 0.101990f, 0.111572f, 0.121948f, 0.132202f, 0.142212f,
+ 0.151978f, 0.162720f, 0.173340f, 0.184326f, 0.195312f, 0.206055f, 0.217163f, 0.228516f, 0.239990f, 0.250977f, 0.262695f, 0.274658f,
+ 0.285889f, 0.297363f, 0.308838f, 0.321045f, 0.333496f, 0.345459f, 0.357422f, 0.370117f, 0.382324f, 0.395020f, 0.407227f, 0.419922f,
+ 0.432617f, 0.444336f, 0.458008f, 0.470703f, 0.483398f, 0.497559f, 0.510254f, 0.522949f, 0.536133f, 0.550293f, 0.562988f, 0.577637f,
+ 0.590820f, 0.603516f, 0.618164f, 0.632324f, 0.645508f, 0.660645f, 0.811035f, 0.800293f, 0.788086f, 0.777832f, 0.768555f, 0.760254f,
+ 0.003868f, 0.011368f, 0.019257f, 0.027512f, 0.035431f, 0.043274f, 0.051880f, 0.060852f, 0.069214f, 0.078003f, 0.087524f, 0.096924f,
+ 0.105896f, 0.115112f, 0.124817f, 0.134766f, 0.144409f, 0.154663f, 0.164673f, 0.175415f, 0.184814f, 0.196289f, 0.206299f, 0.216797f,
+ 0.228394f, 0.239380f, 0.250244f, 0.260986f, 0.273193f, 0.284424f, 0.295410f, 0.307373f, 0.319092f, 0.331299f, 0.342285f, 0.354248f,
+ 0.366455f, 0.378662f, 0.390869f, 0.403809f, 0.415771f, 0.427734f, 0.440430f, 0.453369f, 0.466309f, 0.479736f, 0.492188f, 0.504883f,
+ 0.518066f, 0.531250f, 0.544922f, 0.558105f, 0.571777f, 0.584473f, 0.598633f, 0.612305f, 0.626465f, 0.641602f, 0.801758f, 0.792480f,
+ 0.781738f, 0.770508f, 0.761230f, 0.753906f, 0.003616f, 0.010872f, 0.018387f, 0.026077f, 0.033875f, 0.041351f, 0.049591f, 0.057434f,
+ 0.065674f, 0.073669f, 0.082153f, 0.091064f, 0.100098f, 0.109009f, 0.117981f, 0.127563f, 0.137207f, 0.146362f, 0.156494f, 0.165894f,
+ 0.176025f, 0.186157f, 0.196655f, 0.206421f, 0.216919f, 0.227539f, 0.237915f, 0.249268f, 0.260254f, 0.270752f, 0.282471f, 0.293945f,
+ 0.305176f, 0.316406f, 0.328125f, 0.338867f, 0.350342f, 0.361816f, 0.375244f, 0.387207f, 0.398926f, 0.411133f, 0.423584f, 0.436523f,
+ 0.448730f, 0.461182f, 0.474121f, 0.485840f, 0.499756f, 0.513672f, 0.525391f, 0.539062f, 0.552734f, 0.565918f, 0.580566f, 0.593750f,
+ 0.608398f, 0.621094f, 0.790527f, 0.783691f, 0.773926f, 0.764160f, 0.755859f, 0.747559f, 0.003450f, 0.010429f, 0.017487f, 0.024445f,
+ 0.031860f, 0.039581f, 0.046631f, 0.054718f, 0.061951f, 0.070251f, 0.078003f, 0.086121f, 0.094910f, 0.102905f, 0.111572f, 0.120300f,
+ 0.129761f, 0.138428f, 0.147217f, 0.156982f, 0.166992f, 0.176147f, 0.186157f, 0.196045f, 0.206299f, 0.216187f, 0.226318f, 0.236938f,
+ 0.247437f, 0.258301f, 0.268311f, 0.279785f, 0.290527f, 0.301758f, 0.312744f, 0.324219f, 0.335449f, 0.346680f, 0.359131f, 0.370605f,
+ 0.382812f, 0.394531f, 0.406982f, 0.419189f, 0.430908f, 0.443604f, 0.456055f, 0.468506f, 0.481445f, 0.494873f, 0.506836f, 0.520996f,
+ 0.534180f, 0.547363f, 0.561035f, 0.573730f, 0.588379f, 0.601074f, 0.780762f, 0.775879f, 0.766602f, 0.757324f, 0.748535f, 0.741699f,
+ 0.003281f, 0.009811f, 0.016174f, 0.023438f, 0.030060f, 0.037109f, 0.044464f, 0.051239f, 0.058441f, 0.066345f, 0.073792f, 0.081238f,
+ 0.089539f, 0.097229f, 0.105286f, 0.113647f, 0.122498f, 0.130615f, 0.139526f, 0.148438f, 0.157837f, 0.166626f, 0.176636f, 0.185547f,
+ 0.195312f, 0.204956f, 0.215088f, 0.224976f, 0.234863f, 0.245239f, 0.255859f, 0.266113f, 0.276367f, 0.287354f, 0.298096f, 0.309326f,
+ 0.320801f, 0.331787f, 0.343018f, 0.355225f, 0.366211f, 0.378418f, 0.389893f, 0.401611f, 0.413574f, 0.425781f, 0.438721f, 0.451416f,
+ 0.463135f, 0.476074f, 0.489014f, 0.501465f, 0.514648f, 0.528809f, 0.541992f, 0.554688f, 0.568848f, 0.582520f, 0.770508f, 0.767090f,
+ 0.758789f, 0.750488f, 0.743164f, 0.735352f, 0.002901f, 0.009422f, 0.015488f, 0.021729f, 0.028290f, 0.035278f, 0.041321f, 0.048523f,
+ 0.055420f, 0.062195f, 0.069336f, 0.076477f, 0.084412f, 0.091858f, 0.099609f, 0.107361f, 0.115112f, 0.123535f, 0.131592f, 0.140137f,
+ 0.148438f, 0.157715f, 0.166382f, 0.174927f, 0.184692f, 0.193970f, 0.203369f, 0.212646f, 0.222656f, 0.232910f, 0.242920f, 0.252197f,
+ 0.263184f, 0.273438f, 0.284180f, 0.294922f, 0.305664f, 0.316895f, 0.327881f, 0.338867f, 0.349854f, 0.361328f, 0.373291f, 0.385254f,
+ 0.397461f, 0.408691f, 0.420898f, 0.433350f, 0.445801f, 0.458252f, 0.470703f, 0.483154f, 0.496826f, 0.510254f, 0.522461f, 0.535645f,
+ 0.549805f, 0.562988f, 0.760742f, 0.758789f, 0.750488f, 0.743652f, 0.736328f, 0.729492f, 0.002861f, 0.008606f, 0.014488f, 0.021057f,
+ 0.026810f, 0.032898f, 0.038879f, 0.045532f, 0.051666f, 0.058319f, 0.065125f, 0.072449f, 0.079224f, 0.086426f, 0.093689f, 0.100830f,
+ 0.108276f, 0.116089f, 0.123962f, 0.131958f, 0.140625f, 0.148560f, 0.156494f, 0.164795f, 0.174194f, 0.183228f, 0.192017f, 0.201294f,
+ 0.210815f, 0.220093f, 0.229858f, 0.239746f, 0.249390f, 0.260010f, 0.270508f, 0.280518f, 0.290771f, 0.301758f, 0.312744f, 0.323486f,
+ 0.334473f, 0.345215f, 0.356934f, 0.368408f, 0.379883f, 0.391846f, 0.403564f, 0.416016f, 0.427490f, 0.439453f, 0.452881f, 0.465332f,
+ 0.478271f, 0.490234f, 0.503906f, 0.517090f, 0.529785f, 0.543945f, 0.750000f, 0.750000f, 0.743164f, 0.736328f, 0.729492f, 0.723145f,
+ 0.002977f, 0.008492f, 0.013931f, 0.019745f, 0.024948f, 0.030991f, 0.036804f, 0.042755f, 0.048889f, 0.055267f, 0.061737f, 0.067932f,
+ 0.074829f, 0.081116f, 0.087646f, 0.095215f, 0.102356f, 0.109436f, 0.116760f, 0.124023f, 0.131714f, 0.139648f, 0.147461f, 0.155762f,
+ 0.164185f, 0.172485f, 0.181152f, 0.189697f, 0.198730f, 0.208130f, 0.217285f, 0.226685f, 0.236572f, 0.245850f, 0.255859f, 0.265869f,
+ 0.276367f, 0.286377f, 0.297607f, 0.307861f, 0.318359f, 0.329102f, 0.340576f, 0.351807f, 0.363281f, 0.374023f, 0.386230f, 0.397949f,
+ 0.409668f, 0.422119f, 0.434082f, 0.446777f, 0.459229f, 0.471924f, 0.484863f, 0.497803f, 0.511230f, 0.525391f, 0.739746f, 0.741211f,
+ 0.735352f, 0.729004f, 0.722656f, 0.717285f, 0.002441f, 0.007896f, 0.013443f, 0.018402f, 0.023911f, 0.029343f, 0.034454f, 0.040375f,
+ 0.045868f, 0.051453f, 0.057800f, 0.063721f, 0.070068f, 0.075928f, 0.082520f, 0.089233f, 0.095703f, 0.102478f, 0.109314f, 0.116638f,
+ 0.123596f, 0.131348f, 0.138550f, 0.145996f, 0.153809f, 0.162109f, 0.170044f, 0.179199f, 0.187866f, 0.196045f, 0.205078f, 0.213745f,
+ 0.223389f, 0.233032f, 0.242554f, 0.252197f, 0.261963f, 0.271973f, 0.281982f, 0.292236f, 0.303223f, 0.312988f, 0.324463f, 0.335693f,
+ 0.346191f, 0.357910f, 0.368652f, 0.380371f, 0.391846f, 0.404541f, 0.415527f, 0.428467f, 0.440674f, 0.453369f, 0.466553f, 0.479248f,
+ 0.491455f, 0.505371f, 0.729492f, 0.732422f, 0.727539f, 0.721191f, 0.716309f, 0.709961f, 0.002457f, 0.007553f, 0.012489f, 0.017548f,
+ 0.022217f, 0.027405f, 0.032471f, 0.037689f, 0.043060f, 0.048553f, 0.054230f, 0.059631f, 0.065369f, 0.071533f, 0.077393f, 0.083069f,
+ 0.089417f, 0.096069f, 0.102356f, 0.108398f, 0.115417f, 0.122925f, 0.130127f, 0.137451f, 0.144531f, 0.152100f, 0.160156f, 0.168091f,
+ 0.176514f, 0.184570f, 0.192871f, 0.201660f, 0.210571f, 0.219238f, 0.229126f, 0.238281f, 0.248413f, 0.257812f, 0.267578f, 0.277588f,
+ 0.287354f, 0.298096f, 0.308594f, 0.319336f, 0.329590f, 0.340820f, 0.351318f, 0.363770f, 0.375732f, 0.386963f, 0.397949f, 0.409912f,
+ 0.422363f, 0.434326f, 0.446533f, 0.459473f, 0.473145f, 0.486084f, 0.718750f, 0.723633f, 0.719727f, 0.713867f, 0.708984f, 0.703613f,
+ 0.002436f, 0.006939f, 0.011612f, 0.016113f, 0.021072f, 0.025497f, 0.030640f, 0.035339f, 0.040222f, 0.045441f, 0.050690f, 0.055725f,
+ 0.060669f, 0.066589f, 0.072144f, 0.077881f, 0.083740f, 0.089294f, 0.095215f, 0.101501f, 0.108032f, 0.114868f, 0.121643f, 0.128052f,
+ 0.135010f, 0.142334f, 0.150024f, 0.157349f, 0.164917f, 0.173340f, 0.181274f, 0.189697f, 0.198120f, 0.206909f, 0.215698f, 0.224365f,
+ 0.234497f, 0.243652f, 0.252930f, 0.262695f, 0.272461f, 0.282471f, 0.292480f, 0.302979f, 0.313721f, 0.324463f, 0.335205f, 0.346436f,
+ 0.357666f, 0.369141f, 0.380859f, 0.391602f, 0.404541f, 0.416016f, 0.428467f, 0.440918f, 0.454102f, 0.466553f, 0.708496f, 0.715820f,
+ 0.711426f, 0.706055f, 0.701660f, 0.696777f, 0.002188f, 0.006599f, 0.011032f, 0.015068f, 0.019897f, 0.024048f, 0.028656f, 0.033264f,
+ 0.037720f, 0.042236f, 0.047028f, 0.051941f, 0.056824f, 0.062012f, 0.067444f, 0.072449f, 0.077942f, 0.083374f, 0.088867f, 0.094727f,
+ 0.100769f, 0.106750f, 0.112732f, 0.119263f, 0.126099f, 0.133179f, 0.139648f, 0.146729f, 0.154175f, 0.161987f, 0.170044f, 0.177612f,
+ 0.185791f, 0.194214f, 0.203125f, 0.211670f, 0.220581f, 0.229370f, 0.238770f, 0.248047f, 0.257812f, 0.267822f, 0.277344f, 0.287109f,
+ 0.297363f, 0.307861f, 0.318848f, 0.329590f, 0.341064f, 0.351562f, 0.363037f, 0.374512f, 0.385498f, 0.397461f, 0.409668f, 0.422363f,
+ 0.434326f, 0.447021f, 0.697266f, 0.706543f, 0.703125f, 0.698730f, 0.694336f, 0.689941f, 0.002024f, 0.006165f, 0.010399f, 0.014481f,
+ 0.018555f, 0.022797f, 0.026627f, 0.030869f, 0.035187f, 0.039459f, 0.043732f, 0.047943f, 0.052917f, 0.057434f, 0.062622f, 0.067261f,
+ 0.071838f, 0.077454f, 0.082581f, 0.087891f, 0.093628f, 0.099182f, 0.105469f, 0.111206f, 0.117126f, 0.123779f, 0.130371f, 0.137085f,
+ 0.143921f, 0.151001f, 0.158691f, 0.166016f, 0.173950f, 0.181641f, 0.190063f, 0.198120f, 0.206909f, 0.215698f, 0.224976f, 0.233398f,
+ 0.242798f, 0.252197f, 0.262207f, 0.271973f, 0.281738f, 0.291992f, 0.302734f, 0.313477f, 0.323242f, 0.334229f, 0.345459f, 0.355957f,
+ 0.368652f, 0.380615f, 0.391602f, 0.403809f, 0.415771f, 0.428467f, 0.686523f, 0.696777f, 0.695312f, 0.691895f, 0.687500f, 0.683105f,
+ 0.001931f, 0.005970f, 0.009651f, 0.013557f, 0.017136f, 0.021088f, 0.024902f, 0.028748f, 0.032623f, 0.036743f, 0.040833f, 0.044983f,
+ 0.049591f, 0.053467f, 0.057800f, 0.062500f, 0.066833f, 0.071533f, 0.076538f, 0.081238f, 0.086670f, 0.092224f, 0.097290f, 0.103088f,
+ 0.108887f, 0.114990f, 0.120972f, 0.127197f, 0.134277f, 0.140503f, 0.147705f, 0.154663f, 0.162231f, 0.169922f, 0.177612f, 0.185303f,
+ 0.193604f, 0.201904f, 0.210815f, 0.219238f, 0.228516f, 0.237427f, 0.247070f, 0.256592f, 0.265869f, 0.275879f, 0.285645f, 0.295898f,
+ 0.306396f, 0.317139f, 0.328369f, 0.338623f, 0.350342f, 0.362305f, 0.374023f, 0.385010f, 0.397461f, 0.410156f, 0.675781f, 0.687988f,
+ 0.687012f, 0.683594f, 0.680664f, 0.676270f, 0.001725f, 0.005436f, 0.009171f, 0.012589f, 0.016190f, 0.019485f, 0.023132f, 0.026978f,
+ 0.030899f, 0.034180f, 0.037659f, 0.041565f, 0.045074f, 0.049438f, 0.053345f, 0.057739f, 0.061768f, 0.065918f, 0.070679f, 0.075073f,
+ 0.080078f, 0.084656f, 0.089966f, 0.095215f, 0.100464f, 0.106445f, 0.112000f, 0.117615f, 0.124207f, 0.130737f, 0.136719f, 0.144043f,
+ 0.151123f, 0.158081f, 0.165405f, 0.173096f, 0.181152f, 0.189087f, 0.197510f, 0.205688f, 0.214600f, 0.223145f, 0.232178f, 0.241699f,
+ 0.250732f, 0.260254f, 0.270264f, 0.279785f, 0.289795f, 0.300293f, 0.310791f, 0.322510f, 0.333496f, 0.344238f, 0.355713f, 0.367188f,
+ 0.379395f, 0.392090f, 0.664551f, 0.678711f, 0.678223f, 0.675781f, 0.672852f, 0.669922f, 0.001741f, 0.005077f, 0.008522f, 0.011810f,
+ 0.014946f, 0.018524f, 0.021332f, 0.024872f, 0.028519f, 0.031799f, 0.034973f, 0.038727f, 0.041992f, 0.045654f, 0.049072f, 0.052856f,
+ 0.056671f, 0.060638f, 0.064819f, 0.069092f, 0.073425f, 0.078125f, 0.082886f, 0.087280f, 0.092651f, 0.098206f, 0.103638f, 0.109192f,
+ 0.114563f, 0.120667f, 0.126709f, 0.133057f, 0.139771f, 0.146851f, 0.153931f, 0.160767f, 0.168457f, 0.175903f, 0.183838f, 0.192505f,
+ 0.200195f, 0.208618f, 0.217407f, 0.226562f, 0.236084f, 0.245239f, 0.254639f, 0.263672f, 0.273926f, 0.283447f, 0.294189f, 0.304932f,
+ 0.315674f, 0.326172f, 0.337402f, 0.348877f, 0.360107f, 0.373291f, 0.653809f, 0.670410f, 0.669922f, 0.667480f, 0.665527f, 0.662109f,
+ 0.001639f, 0.004951f, 0.007996f, 0.010857f, 0.013779f, 0.016968f, 0.019974f, 0.023392f, 0.026001f, 0.029373f, 0.032013f, 0.035370f,
+ 0.038513f, 0.041992f, 0.044586f, 0.048706f, 0.052124f, 0.055634f, 0.059723f, 0.063354f, 0.067444f, 0.071289f, 0.075745f, 0.080444f,
+ 0.085022f, 0.089722f, 0.095032f, 0.100220f, 0.105347f, 0.111206f, 0.117126f, 0.123108f, 0.129395f, 0.135620f, 0.142090f, 0.148682f,
+ 0.156372f, 0.163574f, 0.170898f, 0.178711f, 0.186890f, 0.194580f, 0.203613f, 0.211426f, 0.220459f, 0.229492f, 0.238281f, 0.248169f,
+ 0.257324f, 0.267578f, 0.277832f, 0.287354f, 0.298340f, 0.308350f, 0.319824f, 0.331543f, 0.342041f, 0.354248f, 0.641602f, 0.660645f,
+ 0.662109f, 0.660645f, 0.658203f, 0.654785f, 0.001569f, 0.004539f, 0.007538f, 0.010368f, 0.013359f, 0.016006f, 0.018539f, 0.021210f,
+ 0.024384f, 0.026855f, 0.029892f, 0.032471f, 0.035034f, 0.038177f, 0.041199f, 0.044434f, 0.047485f, 0.050781f, 0.054321f, 0.057953f,
+ 0.061523f, 0.065430f, 0.069275f, 0.073547f, 0.077820f, 0.082092f, 0.086731f, 0.091736f, 0.096985f, 0.101990f, 0.107361f, 0.112549f,
+ 0.118774f, 0.124878f, 0.131104f, 0.137573f, 0.144409f, 0.150635f, 0.157837f, 0.165283f, 0.173340f, 0.181274f, 0.188599f, 0.197510f,
+ 0.205933f, 0.214600f, 0.223633f, 0.232056f, 0.241577f, 0.251709f, 0.261230f, 0.270996f, 0.281250f, 0.291260f, 0.302246f, 0.313477f,
+ 0.323730f, 0.336182f, 0.630859f, 0.651855f, 0.652832f, 0.652344f, 0.650391f, 0.647461f, 0.001558f, 0.004139f, 0.007103f, 0.009560f,
+ 0.012077f, 0.014313f, 0.016983f, 0.019653f, 0.021988f, 0.024490f, 0.027023f, 0.029526f, 0.031891f, 0.034821f, 0.037903f, 0.040192f,
+ 0.043457f, 0.046417f, 0.049316f, 0.052795f, 0.055725f, 0.059357f, 0.063354f, 0.066895f, 0.070740f, 0.074890f, 0.078979f, 0.083801f,
+ 0.088440f, 0.093018f, 0.097961f, 0.103394f, 0.108704f, 0.114563f, 0.120239f, 0.126343f, 0.132690f, 0.139038f, 0.145874f, 0.152710f,
+ 0.159912f, 0.168091f, 0.175537f, 0.183228f, 0.191650f, 0.199707f, 0.208130f, 0.216797f, 0.226074f, 0.235352f, 0.244507f, 0.254395f,
+ 0.264404f, 0.274414f, 0.285156f, 0.296631f, 0.307373f, 0.318604f, 0.619141f, 0.643066f, 0.644531f, 0.644043f, 0.642578f, 0.639648f,
+ 0.001314f, 0.004002f, 0.006603f, 0.009056f, 0.011490f, 0.013184f, 0.015587f, 0.017883f, 0.020157f, 0.022415f, 0.024582f, 0.027206f,
+ 0.029160f, 0.031677f, 0.034088f, 0.036530f, 0.039337f, 0.042206f, 0.044891f, 0.047729f, 0.050751f, 0.053955f, 0.057312f, 0.060486f,
+ 0.064148f, 0.068054f, 0.071960f, 0.075867f, 0.079895f, 0.084595f, 0.089172f, 0.094238f, 0.098999f, 0.104492f, 0.109802f, 0.115173f,
+ 0.121338f, 0.127686f, 0.134033f, 0.140991f, 0.147095f, 0.154541f, 0.161865f, 0.169800f, 0.177368f, 0.185547f, 0.193848f, 0.201904f,
+ 0.211060f, 0.219116f, 0.229004f, 0.238525f, 0.248047f, 0.257812f, 0.267822f, 0.277832f, 0.289062f, 0.300537f, 0.607910f, 0.633301f,
+ 0.636230f, 0.635742f, 0.634766f, 0.633301f, 0.001217f, 0.003571f, 0.005947f, 0.008011f, 0.010391f, 0.012207f, 0.014313f, 0.016617f,
+ 0.018280f, 0.020523f, 0.022537f, 0.024475f, 0.026443f, 0.028778f, 0.030884f, 0.032867f, 0.035553f, 0.037872f, 0.040375f, 0.042938f,
+ 0.045593f, 0.048431f, 0.051605f, 0.054688f, 0.057953f, 0.061279f, 0.065002f, 0.068665f, 0.072266f, 0.076294f, 0.080872f, 0.085083f,
+ 0.089783f, 0.094482f, 0.099915f, 0.104736f, 0.110901f, 0.116272f, 0.122314f, 0.128784f, 0.134888f, 0.142090f, 0.148560f, 0.155884f,
+ 0.163574f, 0.171753f, 0.179077f, 0.187500f, 0.195679f, 0.204346f, 0.213745f, 0.222656f, 0.231812f, 0.241455f, 0.250977f, 0.261230f,
+ 0.272461f, 0.282959f, 0.596680f, 0.623535f, 0.627441f, 0.627930f, 0.627441f, 0.625000f, 0.001111f, 0.003542f, 0.005569f, 0.007504f,
+ 0.009338f, 0.011452f, 0.012939f, 0.015030f, 0.016678f, 0.018326f, 0.020203f, 0.022217f, 0.023788f, 0.025604f, 0.027771f, 0.029877f,
+ 0.031860f, 0.033813f, 0.036102f, 0.038605f, 0.040985f, 0.043579f, 0.046448f, 0.049042f, 0.051849f, 0.055054f, 0.058319f, 0.061615f,
+ 0.065125f, 0.068909f, 0.072815f, 0.076843f, 0.080872f, 0.085571f, 0.089905f, 0.095398f, 0.100159f, 0.105713f, 0.111206f, 0.116882f,
+ 0.122925f, 0.129517f, 0.135742f, 0.142822f, 0.149902f, 0.157349f, 0.165161f, 0.172852f, 0.181152f, 0.189331f, 0.198120f, 0.206909f,
+ 0.215820f, 0.225342f, 0.235474f, 0.245239f, 0.254883f, 0.266602f, 0.584473f, 0.614746f, 0.619141f, 0.619629f, 0.619141f, 0.618164f,
+ 0.001149f, 0.003147f, 0.004826f, 0.006886f, 0.008629f, 0.010452f, 0.012024f, 0.013359f, 0.015175f, 0.016647f, 0.018143f, 0.019882f,
+ 0.021332f, 0.023026f, 0.024902f, 0.026550f, 0.028397f, 0.030045f, 0.032318f, 0.034393f, 0.036682f, 0.038910f, 0.041107f, 0.043671f,
+ 0.046295f, 0.048950f, 0.051819f, 0.054993f, 0.058258f, 0.061523f, 0.065063f, 0.068481f, 0.072510f, 0.076965f, 0.081055f, 0.085510f,
+ 0.090393f, 0.095093f, 0.100342f, 0.105774f, 0.111694f, 0.117371f, 0.124084f, 0.130371f, 0.136963f, 0.143921f, 0.151245f, 0.159058f,
+ 0.166626f, 0.174927f, 0.182983f, 0.191650f, 0.200195f, 0.209473f, 0.218750f, 0.228149f, 0.238037f, 0.249146f, 0.572266f, 0.604980f,
+ 0.609863f, 0.611328f, 0.610352f, 0.611328f, 0.001009f, 0.003059f, 0.004620f, 0.006283f, 0.007881f, 0.009415f, 0.010864f, 0.011940f,
+ 0.013443f, 0.014847f, 0.016403f, 0.017700f, 0.019012f, 0.020493f, 0.021927f, 0.023697f, 0.025177f, 0.026947f, 0.028732f, 0.030472f,
+ 0.032654f, 0.034302f, 0.036591f, 0.038757f, 0.041046f, 0.043488f, 0.045837f, 0.048706f, 0.051544f, 0.054810f, 0.057770f, 0.061188f,
+ 0.064331f, 0.068237f, 0.072083f, 0.076416f, 0.080872f, 0.085388f, 0.090149f, 0.095276f, 0.100403f, 0.105896f, 0.111877f, 0.117798f,
+ 0.124329f, 0.130859f, 0.138062f, 0.145020f, 0.152710f, 0.160034f, 0.168335f, 0.176514f, 0.185059f, 0.193481f, 0.203125f, 0.212158f,
+ 0.221924f, 0.232178f, 0.562500f, 0.594727f, 0.601074f, 0.602539f, 0.603516f, 0.602539f, 0.000865f, 0.002674f, 0.004444f, 0.005615f,
+ 0.007233f, 0.008430f, 0.009827f, 0.010880f, 0.011917f, 0.013206f, 0.014412f, 0.015717f, 0.016876f, 0.018173f, 0.019501f, 0.020950f,
+ 0.022217f, 0.023773f, 0.025284f, 0.026749f, 0.028610f, 0.030151f, 0.032166f, 0.034149f, 0.036041f, 0.038330f, 0.040558f, 0.042877f,
+ 0.045532f, 0.048157f, 0.050934f, 0.053894f, 0.056946f, 0.060303f, 0.063843f, 0.067566f, 0.071472f, 0.075806f, 0.080261f, 0.084778f,
+ 0.089600f, 0.094971f, 0.100220f, 0.105896f, 0.111877f, 0.118103f, 0.125000f, 0.131348f, 0.138550f, 0.146362f, 0.153687f, 0.161987f,
+ 0.169678f, 0.178223f, 0.187134f, 0.196045f, 0.205811f, 0.215698f, 0.549805f, 0.584961f, 0.592773f, 0.594238f, 0.593750f, 0.595215f,
+ 0.000951f, 0.002476f, 0.003956f, 0.005062f, 0.006268f, 0.007637f, 0.008888f, 0.009666f, 0.010628f, 0.011810f, 0.012856f, 0.013878f,
+ 0.014946f, 0.015900f, 0.017227f, 0.018356f, 0.019592f, 0.020889f, 0.022003f, 0.023438f, 0.025101f, 0.026489f, 0.028122f, 0.029739f,
+ 0.031555f, 0.033295f, 0.035431f, 0.037537f, 0.039795f, 0.041962f, 0.044647f, 0.047302f, 0.049957f, 0.052979f, 0.056122f, 0.059387f,
+ 0.062927f, 0.066956f, 0.070679f, 0.074951f, 0.079468f, 0.084167f, 0.089294f, 0.094482f, 0.100098f, 0.106018f, 0.112061f, 0.118835f,
+ 0.125366f, 0.132446f, 0.139893f, 0.147827f, 0.155762f, 0.163574f, 0.172607f, 0.180786f, 0.190063f, 0.199951f, 0.536621f, 0.576172f,
+ 0.583496f, 0.586914f, 0.587402f, 0.586914f, 0.000788f, 0.002115f, 0.003592f, 0.004780f, 0.005939f, 0.006615f, 0.007740f, 0.008598f,
+ 0.009514f, 0.010376f, 0.011200f, 0.012138f, 0.013016f, 0.014069f, 0.014977f, 0.015961f, 0.016922f, 0.018036f, 0.019043f, 0.020447f,
+ 0.021606f, 0.022995f, 0.024323f, 0.025864f, 0.027344f, 0.028946f, 0.030731f, 0.032593f, 0.034515f, 0.036530f, 0.038910f, 0.041016f,
+ 0.043274f, 0.046021f, 0.048981f, 0.051819f, 0.055176f, 0.058472f, 0.062012f, 0.065857f, 0.069946f, 0.074219f, 0.078796f, 0.083801f,
+ 0.088806f, 0.094299f, 0.100281f, 0.106018f, 0.112793f, 0.119446f, 0.126343f, 0.133545f, 0.141357f, 0.149292f, 0.157104f, 0.165894f,
+ 0.174683f, 0.184326f, 0.524902f, 0.566895f, 0.575195f, 0.576660f, 0.579102f, 0.579590f, 0.000661f, 0.001961f, 0.003382f, 0.004311f,
+ 0.005161f, 0.006062f, 0.006737f, 0.007427f, 0.008286f, 0.008995f, 0.009857f, 0.010368f, 0.011230f, 0.011955f, 0.012833f, 0.013786f,
+ 0.014565f, 0.015480f, 0.016647f, 0.017578f, 0.018677f, 0.019806f, 0.020950f, 0.022263f, 0.023651f, 0.024994f, 0.026306f, 0.027863f,
+ 0.029724f, 0.031525f, 0.033325f, 0.035370f, 0.037292f, 0.039673f, 0.042114f, 0.044769f, 0.047546f, 0.050537f, 0.053680f, 0.057098f,
+ 0.060852f, 0.064514f, 0.069031f, 0.073303f, 0.078064f, 0.083069f, 0.088379f, 0.094238f, 0.100220f, 0.106689f, 0.113342f, 0.120300f,
+ 0.127563f, 0.135132f, 0.142700f, 0.151245f, 0.160034f, 0.168823f, 0.512695f, 0.557129f, 0.566406f, 0.569824f, 0.569824f, 0.571289f,
+ 0.000757f, 0.001709f, 0.002844f, 0.003582f, 0.004448f, 0.005192f, 0.005989f, 0.006519f, 0.007038f, 0.007801f, 0.008453f, 0.009071f,
+ 0.009727f, 0.010391f, 0.011009f, 0.011726f, 0.012650f, 0.013184f, 0.014107f, 0.014977f, 0.015900f, 0.016800f, 0.017776f, 0.018936f,
+ 0.020172f, 0.021271f, 0.022446f, 0.023697f, 0.025055f, 0.026703f, 0.028397f, 0.030014f, 0.031921f, 0.033905f, 0.035919f, 0.038177f,
+ 0.040680f, 0.043243f, 0.045898f, 0.049072f, 0.052216f, 0.055725f, 0.059784f, 0.063538f, 0.067688f, 0.072327f, 0.077271f, 0.082764f,
+ 0.088379f, 0.094299f, 0.100708f, 0.107239f, 0.114136f, 0.121582f, 0.128906f, 0.136963f, 0.145630f, 0.153564f, 0.500977f, 0.547852f,
+ 0.556641f, 0.561523f, 0.562500f, 0.563965f, 0.000704f, 0.001769f, 0.002542f, 0.003523f, 0.004036f, 0.004562f, 0.005032f, 0.005661f,
+ 0.006176f, 0.006542f, 0.007072f, 0.007698f, 0.008339f, 0.008827f, 0.009323f, 0.010094f, 0.010757f, 0.011276f, 0.012093f, 0.012733f,
+ 0.013489f, 0.014488f, 0.015244f, 0.016006f, 0.017151f, 0.017975f, 0.018967f, 0.020142f, 0.021255f, 0.022552f, 0.023880f, 0.025314f,
+ 0.026840f, 0.028503f, 0.030441f, 0.032166f, 0.034424f, 0.036438f, 0.039001f, 0.041656f, 0.044464f, 0.047455f, 0.050842f, 0.054443f,
+ 0.058167f, 0.062286f, 0.066956f, 0.071899f, 0.076904f, 0.082458f, 0.088501f, 0.094482f, 0.101196f, 0.108337f, 0.115662f, 0.123352f,
+ 0.130981f, 0.139282f, 0.489746f, 0.538574f, 0.547852f, 0.551270f, 0.554688f, 0.555176f, 0.000579f, 0.001450f, 0.002396f, 0.002857f,
+ 0.003454f, 0.004032f, 0.004356f, 0.004791f, 0.005333f, 0.005718f, 0.006130f, 0.006485f, 0.007042f, 0.007473f, 0.007988f, 0.008476f,
+ 0.008865f, 0.009613f, 0.010086f, 0.010651f, 0.011345f, 0.012047f, 0.012764f, 0.013435f, 0.014282f, 0.015144f, 0.015884f, 0.016846f,
+ 0.017868f, 0.018814f, 0.020050f, 0.021164f, 0.022507f, 0.023773f, 0.025192f, 0.026978f, 0.028564f, 0.030640f, 0.032623f, 0.034882f,
+ 0.037231f, 0.039886f, 0.042786f, 0.046143f, 0.049286f, 0.052979f, 0.057098f, 0.061279f, 0.066223f, 0.071167f, 0.076660f, 0.082581f,
+ 0.088989f, 0.095581f, 0.102661f, 0.109863f, 0.117737f, 0.125488f, 0.476807f, 0.528320f, 0.538574f, 0.543945f, 0.546875f, 0.546875f,
+ 0.000510f, 0.001428f, 0.002037f, 0.002613f, 0.003086f, 0.003290f, 0.003672f, 0.004108f, 0.004345f, 0.004768f, 0.005035f, 0.005470f,
+ 0.005959f, 0.006207f, 0.006599f, 0.007095f, 0.007568f, 0.008003f, 0.008377f, 0.008904f, 0.009575f, 0.010010f, 0.010643f, 0.011131f,
+ 0.011871f, 0.012535f, 0.013199f, 0.014038f, 0.014839f, 0.015640f, 0.016586f, 0.017502f, 0.018585f, 0.019745f, 0.021088f, 0.022354f,
+ 0.023727f, 0.025253f, 0.026962f, 0.028870f, 0.030762f, 0.033051f, 0.035492f, 0.038177f, 0.041229f, 0.044403f, 0.048004f, 0.051880f,
+ 0.056213f, 0.060516f, 0.065857f, 0.071045f, 0.077271f, 0.083374f, 0.090027f, 0.096863f, 0.104492f, 0.112183f, 0.463623f, 0.518066f,
+ 0.529785f, 0.535156f, 0.538086f, 0.540039f, 0.000473f, 0.001222f, 0.001771f, 0.002117f, 0.002323f, 0.002796f, 0.003096f, 0.003355f,
+ 0.003601f, 0.003975f, 0.004295f, 0.004543f, 0.004833f, 0.005142f, 0.005455f, 0.005848f, 0.006165f, 0.006535f, 0.006947f, 0.007370f,
+ 0.007809f, 0.008240f, 0.008690f, 0.009216f, 0.009758f, 0.010223f, 0.010925f, 0.011536f, 0.012146f, 0.012833f, 0.013573f, 0.014389f,
+ 0.015244f, 0.016220f, 0.017120f, 0.018219f, 0.019379f, 0.020599f, 0.021988f, 0.023514f, 0.025131f, 0.027054f, 0.029037f, 0.031311f,
+ 0.033752f, 0.036591f, 0.039520f, 0.042999f, 0.046661f, 0.050873f, 0.055603f, 0.060333f, 0.066101f, 0.071960f, 0.078491f, 0.084961f,
+ 0.091797f, 0.099426f, 0.452148f, 0.508301f, 0.520508f, 0.526367f, 0.528809f, 0.530273f, 0.000299f, 0.001057f, 0.001329f, 0.001771f,
+ 0.001957f, 0.002350f, 0.002483f, 0.002697f, 0.002964f, 0.003181f, 0.003441f, 0.003653f, 0.003904f, 0.004238f, 0.004501f, 0.004738f,
+ 0.005024f, 0.005390f, 0.005657f, 0.005985f, 0.006279f, 0.006714f, 0.007053f, 0.007507f, 0.007881f, 0.008369f, 0.008774f, 0.009300f,
+ 0.009888f, 0.010483f, 0.011093f, 0.011627f, 0.012398f, 0.013130f, 0.013855f, 0.014717f, 0.015686f, 0.016739f, 0.017761f, 0.018890f,
+ 0.020248f, 0.021698f, 0.023376f, 0.025131f, 0.027237f, 0.029556f, 0.032166f, 0.035004f, 0.038208f, 0.041962f, 0.045868f, 0.050507f,
+ 0.055359f, 0.060852f, 0.066772f, 0.073242f, 0.080017f, 0.087097f, 0.440674f, 0.498047f, 0.511719f, 0.517090f, 0.520508f, 0.522949f,
+ 0.000427f, 0.001020f, 0.001253f, 0.001431f, 0.001690f, 0.001900f, 0.002018f, 0.002304f, 0.002481f, 0.002569f, 0.002731f, 0.002998f,
+ 0.003157f, 0.003424f, 0.003592f, 0.003838f, 0.004017f, 0.004253f, 0.004551f, 0.004776f, 0.005100f, 0.005379f, 0.005699f, 0.005932f,
+ 0.006290f, 0.006630f, 0.007038f, 0.007465f, 0.007927f, 0.008286f, 0.008858f, 0.009293f, 0.009888f, 0.010429f, 0.011086f, 0.011765f,
+ 0.012482f, 0.013298f, 0.014168f, 0.015068f, 0.016129f, 0.017288f, 0.018585f, 0.019943f, 0.021622f, 0.023361f, 0.025436f, 0.027847f,
+ 0.030655f, 0.033447f, 0.037079f, 0.041229f, 0.045776f, 0.050568f, 0.056061f, 0.062317f, 0.068726f, 0.075684f, 0.427734f, 0.488525f,
+ 0.502441f, 0.508789f, 0.513184f, 0.513672f, 0.000255f, 0.000597f, 0.001032f, 0.001150f, 0.001353f, 0.001493f, 0.001608f, 0.001750f,
+ 0.001933f, 0.002062f, 0.002178f, 0.002302f, 0.002474f, 0.002670f, 0.002872f, 0.002995f, 0.003147f, 0.003298f, 0.003565f, 0.003729f,
+ 0.003941f, 0.004219f, 0.004436f, 0.004719f, 0.005005f, 0.005230f, 0.005489f, 0.005806f, 0.006191f, 0.006496f, 0.006897f, 0.007267f,
+ 0.007671f, 0.008179f, 0.008636f, 0.009163f, 0.009766f, 0.010368f, 0.011047f, 0.011810f, 0.012611f, 0.013527f, 0.014519f, 0.015640f,
+ 0.016800f, 0.018265f, 0.019897f, 0.021698f, 0.023895f, 0.026260f, 0.029175f, 0.032715f, 0.036682f, 0.041168f, 0.045929f, 0.051758f,
+ 0.057922f, 0.064575f, 0.415771f, 0.478271f, 0.493652f, 0.500000f, 0.503906f, 0.505859f, 0.000255f, 0.000544f, 0.000863f, 0.000994f,
+ 0.001086f, 0.001183f, 0.001317f, 0.001328f, 0.001491f, 0.001608f, 0.001716f, 0.001851f, 0.001943f, 0.002075f, 0.002161f, 0.002319f,
+ 0.002426f, 0.002596f, 0.002741f, 0.002884f, 0.003088f, 0.003265f, 0.003391f, 0.003620f, 0.003777f, 0.004005f, 0.004215f, 0.004452f,
+ 0.004734f, 0.004963f, 0.005341f, 0.005577f, 0.005875f, 0.006271f, 0.006603f, 0.006996f, 0.007450f, 0.007919f, 0.008446f, 0.009003f,
+ 0.009674f, 0.010338f, 0.011101f, 0.011909f, 0.012917f, 0.013977f, 0.015190f, 0.016495f, 0.018112f, 0.020325f, 0.022415f, 0.025146f,
+ 0.028473f, 0.032349f, 0.036804f, 0.041992f, 0.047913f, 0.054077f, 0.404541f, 0.468506f, 0.484131f, 0.490967f, 0.495361f, 0.498291f,
+ 0.000377f, 0.000440f, 0.000606f, 0.000685f, 0.000735f, 0.000876f, 0.000929f, 0.001035f, 0.001068f, 0.001157f, 0.001307f, 0.001381f,
+ 0.001473f, 0.001595f, 0.001664f, 0.001708f, 0.001850f, 0.001957f, 0.002043f, 0.002195f, 0.002291f, 0.002422f, 0.002571f, 0.002687f,
+ 0.002842f, 0.002979f, 0.003183f, 0.003345f, 0.003532f, 0.003794f, 0.004002f, 0.004154f, 0.004429f, 0.004635f, 0.004967f, 0.005253f,
+ 0.005573f, 0.005909f, 0.006275f, 0.006695f, 0.007183f, 0.007660f, 0.008316f, 0.008934f, 0.009644f, 0.010429f, 0.011360f, 0.012497f,
+ 0.013634f, 0.014977f, 0.016663f, 0.018875f, 0.021423f, 0.024643f, 0.028549f, 0.033020f, 0.038483f, 0.044525f, 0.391602f, 0.458984f,
+ 0.474854f, 0.482178f, 0.488037f, 0.489990f, 0.000159f, 0.000401f, 0.000450f, 0.000522f, 0.000605f, 0.000634f, 0.000728f, 0.000702f,
+ 0.000808f, 0.000882f, 0.000959f, 0.000991f, 0.001043f, 0.001112f, 0.001205f, 0.001245f, 0.001357f, 0.001419f, 0.001513f, 0.001546f,
+ 0.001648f, 0.001752f, 0.001863f, 0.001942f, 0.002056f, 0.002159f, 0.002289f, 0.002392f, 0.002506f, 0.002697f, 0.002827f, 0.003023f,
+ 0.003172f, 0.003330f, 0.003542f, 0.003750f, 0.004017f, 0.004292f, 0.004559f, 0.004871f, 0.005161f, 0.005539f, 0.005932f, 0.006416f,
+ 0.006973f, 0.007526f, 0.008232f, 0.008980f, 0.009918f, 0.010895f, 0.012085f, 0.013680f, 0.015472f, 0.017975f, 0.021103f, 0.025146f,
+ 0.029938f, 0.035645f, 0.379395f, 0.448486f, 0.465820f, 0.473633f, 0.478760f, 0.481689f, 0.000112f, 0.000220f, 0.000321f, 0.000322f,
+ 0.000401f, 0.000489f, 0.000469f, 0.000510f, 0.000568f, 0.000653f, 0.000659f, 0.000676f, 0.000703f, 0.000789f, 0.000811f, 0.000886f,
+ 0.000888f, 0.000994f, 0.001048f, 0.001096f, 0.001155f, 0.001220f, 0.001289f, 0.001357f, 0.001431f, 0.001496f, 0.001599f, 0.001675f,
+ 0.001759f, 0.001894f, 0.001965f, 0.002083f, 0.002193f, 0.002310f, 0.002464f, 0.002634f, 0.002758f, 0.002949f, 0.003134f, 0.003319f,
+ 0.003551f, 0.003830f, 0.004120f, 0.004440f, 0.004784f, 0.005188f, 0.005680f, 0.006222f, 0.006886f, 0.007614f, 0.008461f, 0.009529f,
+ 0.010864f, 0.012596f, 0.014961f, 0.018097f, 0.022263f, 0.027466f, 0.367920f, 0.438232f, 0.456543f, 0.465332f, 0.470215f, 0.472900f,
+ 0.000140f, 0.000219f, 0.000241f, 0.000245f, 0.000290f, 0.000291f, 0.000302f, 0.000342f, 0.000380f, 0.000409f, 0.000408f, 0.000485f,
+ 0.000473f, 0.000527f, 0.000556f, 0.000575f, 0.000630f, 0.000642f, 0.000673f, 0.000711f, 0.000762f, 0.000800f, 0.000852f, 0.000886f,
+ 0.000952f, 0.000982f, 0.001049f, 0.001108f, 0.001159f, 0.001220f, 0.001281f, 0.001369f, 0.001454f, 0.001522f, 0.001595f, 0.001695f,
+ 0.001839f, 0.001928f, 0.002068f, 0.002209f, 0.002337f, 0.002504f, 0.002686f, 0.002876f, 0.003139f, 0.003437f, 0.003723f, 0.004078f,
+ 0.004509f, 0.005009f, 0.005615f, 0.006332f, 0.007317f, 0.008461f, 0.009926f, 0.012154f, 0.015640f, 0.020325f, 0.356445f, 0.429199f,
+ 0.447266f, 0.456299f, 0.462158f, 0.464844f, 0.000048f, 0.000154f, 0.000141f, 0.000147f, 0.000174f, 0.000207f, 0.000188f, 0.000221f,
+ 0.000233f, 0.000242f, 0.000248f, 0.000271f, 0.000299f, 0.000312f, 0.000337f, 0.000350f, 0.000367f, 0.000403f, 0.000416f, 0.000458f,
+ 0.000465f, 0.000483f, 0.000507f, 0.000546f, 0.000576f, 0.000625f, 0.000637f, 0.000659f, 0.000705f, 0.000742f, 0.000797f, 0.000837f,
+ 0.000890f, 0.000925f, 0.000978f, 0.001036f, 0.001103f, 0.001181f, 0.001253f, 0.001329f, 0.001421f, 0.001529f, 0.001647f, 0.001782f,
+ 0.001906f, 0.002075f, 0.002291f, 0.002483f, 0.002758f, 0.003059f, 0.003450f, 0.003906f, 0.004536f, 0.005306f, 0.006325f, 0.007713f,
+ 0.010101f, 0.014084f, 0.343262f, 0.418457f, 0.437744f, 0.447510f, 0.452881f, 0.456543f, 0.000099f, 0.000100f, 0.000091f, 0.000085f,
+ 0.000105f, 0.000099f, 0.000127f, 0.000127f, 0.000130f, 0.000137f, 0.000152f, 0.000164f, 0.000164f, 0.000172f, 0.000195f, 0.000186f,
+ 0.000209f, 0.000222f, 0.000231f, 0.000241f, 0.000258f, 0.000266f, 0.000290f, 0.000301f, 0.000324f, 0.000343f, 0.000357f, 0.000369f,
+ 0.000392f, 0.000409f, 0.000440f, 0.000463f, 0.000484f, 0.000513f, 0.000544f, 0.000578f, 0.000607f, 0.000650f, 0.000702f, 0.000737f,
+ 0.000787f, 0.000846f, 0.000918f, 0.000977f, 0.001062f, 0.001146f, 0.001259f, 0.001379f, 0.001524f, 0.001701f, 0.001924f, 0.002207f,
+ 0.002542f, 0.003006f, 0.003628f, 0.004494f, 0.005821f, 0.008774f, 0.332031f, 0.409180f, 0.428467f, 0.438965f, 0.444336f, 0.447998f,
+ 0.000082f, 0.000057f, 0.000048f, 0.000051f, 0.000055f, 0.000054f, 0.000057f, 0.000064f, 0.000066f, 0.000079f, 0.000070f, 0.000070f,
+ 0.000084f, 0.000078f, 0.000084f, 0.000091f, 0.000099f, 0.000108f, 0.000108f, 0.000114f, 0.000119f, 0.000124f, 0.000129f, 0.000144f,
+ 0.000151f, 0.000158f, 0.000163f, 0.000176f, 0.000188f, 0.000196f, 0.000208f, 0.000220f, 0.000227f, 0.000239f, 0.000259f, 0.000273f,
+ 0.000290f, 0.000303f, 0.000331f, 0.000351f, 0.000376f, 0.000402f, 0.000432f, 0.000460f, 0.000500f, 0.000547f, 0.000593f, 0.000648f,
+ 0.000720f, 0.000805f, 0.000918f, 0.001045f, 0.001225f, 0.001462f, 0.001788f, 0.002264f, 0.003029f, 0.004623f, 0.320801f, 0.398682f,
+ 0.419922f, 0.430420f, 0.436279f, 0.440674f, 0.000061f, 0.000041f, 0.000033f, 0.000029f, 0.000026f, 0.000025f, 0.000024f, 0.000024f,
+ 0.000023f, 0.000023f, 0.000025f, 0.000032f, 0.000026f, 0.000027f, 0.000035f, 0.000037f, 0.000039f, 0.000041f, 0.000041f, 0.000041f,
+ 0.000044f, 0.000050f, 0.000054f, 0.000051f, 0.000055f, 0.000060f, 0.000061f, 0.000062f, 0.000069f, 0.000074f, 0.000075f, 0.000081f,
+ 0.000087f, 0.000090f, 0.000093f, 0.000098f, 0.000108f, 0.000114f, 0.000123f, 0.000130f, 0.000142f, 0.000144f, 0.000156f, 0.000173f,
+ 0.000179f, 0.000200f, 0.000218f, 0.000237f, 0.000267f, 0.000299f, 0.000335f, 0.000382f, 0.000448f, 0.000544f, 0.000677f, 0.000883f,
+ 0.001233f, 0.001933f, 0.309570f, 0.388672f, 0.410889f, 0.421143f, 0.427246f, 0.431885f, 0.000031f, 0.000020f, 0.000016f, 0.000014f,
+ 0.000013f, 0.000012f, 0.000012f, 0.000011f, 0.000011f, 0.000010f, 0.000010f, 0.000010f, 0.000009f, 0.000009f, 0.000008f, 0.000009f,
+ 0.000009f, 0.000007f, 0.000007f, 0.000007f, 0.000008f, 0.000009f, 0.000011f, 0.000012f, 0.000012f, 0.000012f, 0.000013f, 0.000015f,
+ 0.000015f, 0.000014f, 0.000016f, 0.000017f, 0.000019f, 0.000020f, 0.000020f, 0.000022f, 0.000025f, 0.000023f, 0.000026f, 0.000029f,
+ 0.000031f, 0.000034f, 0.000036f, 0.000037f, 0.000040f, 0.000044f, 0.000048f, 0.000052f, 0.000056f, 0.000063f, 0.000068f, 0.000083f,
+ 0.000098f, 0.000117f, 0.000149f, 0.000201f, 0.000301f, 0.000544f, 0.297607f, 0.379150f, 0.400879f, 0.411865f, 0.419189f, 0.423340f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f,
+ 0.000002f, 0.000002f, 0.000003f, 0.000004f, 0.000004f, 0.000004f, 0.000005f, 0.000007f, 0.000011f, 0.000026f, 0.286621f, 0.368896f,
+ 0.391846f, 0.402588f, 0.409912f, 0.414551f,
+ },
+ {
+ 0.007935f, 0.024429f, 0.041290f, 0.058838f, 0.076355f, 0.093933f, 0.111145f, 0.128174f, 0.146606f, 0.164429f, 0.182617f, 0.200562f,
+ 0.218750f, 0.236206f, 0.254150f, 0.271729f, 0.289551f, 0.308105f, 0.325684f, 0.342773f, 0.360596f, 0.379150f, 0.396240f, 0.414795f,
+ 0.431641f, 0.450439f, 0.468018f, 0.484619f, 0.502441f, 0.520020f, 0.536621f, 0.554688f, 0.571777f, 0.588379f, 0.605469f, 0.622559f,
+ 0.640137f, 0.657227f, 0.672852f, 0.689941f, 0.707031f, 0.723633f, 0.740234f, 0.756836f, 0.773926f, 0.789551f, 0.805664f, 0.821777f,
+ 0.838379f, 0.854980f, 0.870117f, 0.885742f, 0.901855f, 0.917480f, 0.932617f, 0.948730f, 0.963379f, 0.979492f, 0.960449f, 0.909668f,
+ 0.876465f, 0.850098f, 0.827637f, 0.807617f, 0.007530f, 0.023422f, 0.039764f, 0.056610f, 0.073303f, 0.090149f, 0.107300f, 0.124084f,
+ 0.141968f, 0.158569f, 0.176392f, 0.193604f, 0.210815f, 0.228760f, 0.246094f, 0.262695f, 0.280518f, 0.298340f, 0.315430f, 0.333252f,
+ 0.350586f, 0.367432f, 0.384766f, 0.402344f, 0.419678f, 0.436768f, 0.453613f, 0.471436f, 0.488037f, 0.504883f, 0.521973f, 0.538574f,
+ 0.556641f, 0.573242f, 0.589844f, 0.605957f, 0.623535f, 0.639160f, 0.656250f, 0.673340f, 0.688477f, 0.706055f, 0.721680f, 0.738770f,
+ 0.754883f, 0.770508f, 0.786133f, 0.803711f, 0.817871f, 0.834473f, 0.850586f, 0.866211f, 0.881348f, 0.896973f, 0.913086f, 0.928223f,
+ 0.942871f, 0.958984f, 0.951172f, 0.903320f, 0.871094f, 0.845703f, 0.824219f, 0.805664f, 0.007320f, 0.022552f, 0.038391f, 0.054260f,
+ 0.070312f, 0.086792f, 0.103271f, 0.120178f, 0.136841f, 0.153564f, 0.170410f, 0.187256f, 0.203735f, 0.220825f, 0.237793f, 0.255127f,
+ 0.271240f, 0.288086f, 0.305420f, 0.322021f, 0.339844f, 0.356689f, 0.373047f, 0.390137f, 0.406738f, 0.423340f, 0.440186f, 0.456787f,
+ 0.474121f, 0.490967f, 0.507324f, 0.523926f, 0.540527f, 0.557129f, 0.573242f, 0.590332f, 0.606445f, 0.623047f, 0.638672f, 0.655273f,
+ 0.671875f, 0.687500f, 0.703613f, 0.720215f, 0.735840f, 0.751953f, 0.767578f, 0.783203f, 0.799316f, 0.814941f, 0.830078f, 0.845703f,
+ 0.861328f, 0.877441f, 0.892090f, 0.908203f, 0.922852f, 0.938477f, 0.941895f, 0.895996f, 0.865723f, 0.841309f, 0.820801f, 0.802734f,
+ 0.007008f, 0.021667f, 0.036865f, 0.052216f, 0.067871f, 0.083862f, 0.099426f, 0.115479f, 0.131470f, 0.148315f, 0.164551f, 0.180298f,
+ 0.196899f, 0.213379f, 0.229370f, 0.246460f, 0.262695f, 0.279541f, 0.295410f, 0.311523f, 0.329102f, 0.345215f, 0.360840f, 0.378174f,
+ 0.394043f, 0.410156f, 0.427246f, 0.443115f, 0.459717f, 0.476318f, 0.493652f, 0.508789f, 0.524902f, 0.541016f, 0.557129f, 0.573242f,
+ 0.589844f, 0.605469f, 0.621582f, 0.638672f, 0.652832f, 0.669434f, 0.685547f, 0.701660f, 0.717285f, 0.731934f, 0.749023f, 0.764160f,
+ 0.779785f, 0.794922f, 0.810059f, 0.826172f, 0.841309f, 0.856445f, 0.872070f, 0.886719f, 0.902344f, 0.917480f, 0.932129f, 0.889648f,
+ 0.859863f, 0.835938f, 0.816895f, 0.799316f, 0.006817f, 0.020645f, 0.035156f, 0.050110f, 0.065247f, 0.080383f, 0.096313f, 0.111450f,
+ 0.126587f, 0.142456f, 0.158447f, 0.174316f, 0.189819f, 0.205566f, 0.221802f, 0.237427f, 0.253662f, 0.269775f, 0.285889f, 0.301514f,
+ 0.317627f, 0.333740f, 0.349609f, 0.366211f, 0.381348f, 0.397705f, 0.414307f, 0.429932f, 0.447266f, 0.462646f, 0.477539f, 0.494385f,
+ 0.509766f, 0.525879f, 0.541992f, 0.557617f, 0.571777f, 0.588379f, 0.605469f, 0.619629f, 0.636230f, 0.651855f, 0.666992f, 0.681152f,
+ 0.698242f, 0.714355f, 0.729980f, 0.745117f, 0.759766f, 0.775391f, 0.790527f, 0.806152f, 0.821289f, 0.835938f, 0.850586f, 0.866211f,
+ 0.882324f, 0.896484f, 0.922363f, 0.882324f, 0.854004f, 0.831543f, 0.812500f, 0.795898f, 0.006378f, 0.019989f, 0.034027f, 0.048004f,
+ 0.062744f, 0.077148f, 0.091980f, 0.107178f, 0.122192f, 0.137207f, 0.152466f, 0.167603f, 0.183960f, 0.199097f, 0.214111f, 0.229736f,
+ 0.244995f, 0.260254f, 0.276367f, 0.291504f, 0.306641f, 0.322998f, 0.338623f, 0.354248f, 0.369629f, 0.385254f, 0.400879f, 0.416504f,
+ 0.432617f, 0.447510f, 0.464111f, 0.479492f, 0.494141f, 0.511230f, 0.525879f, 0.541016f, 0.556641f, 0.572754f, 0.586914f, 0.602051f,
+ 0.617676f, 0.633789f, 0.648926f, 0.665039f, 0.679688f, 0.695312f, 0.710449f, 0.726074f, 0.739746f, 0.755859f, 0.771484f, 0.785645f,
+ 0.800781f, 0.815918f, 0.831055f, 0.846680f, 0.860840f, 0.875977f, 0.912598f, 0.874512f, 0.847656f, 0.826172f, 0.807617f, 0.791504f,
+ 0.006603f, 0.019287f, 0.032776f, 0.046356f, 0.060272f, 0.073914f, 0.088135f, 0.102905f, 0.117554f, 0.132690f, 0.147095f, 0.161377f,
+ 0.176636f, 0.191162f, 0.205444f, 0.221680f, 0.236572f, 0.251465f, 0.267090f, 0.281250f, 0.296875f, 0.312256f, 0.327393f, 0.342285f,
+ 0.357666f, 0.373291f, 0.388184f, 0.403076f, 0.418457f, 0.433838f, 0.448975f, 0.465088f, 0.479980f, 0.494385f, 0.509277f, 0.525879f,
+ 0.540039f, 0.555176f, 0.570801f, 0.586426f, 0.601074f, 0.616211f, 0.631348f, 0.646484f, 0.661133f, 0.676270f, 0.692383f, 0.705078f,
+ 0.720215f, 0.735352f, 0.751953f, 0.766602f, 0.781250f, 0.796387f, 0.810059f, 0.825684f, 0.840820f, 0.855469f, 0.902344f, 0.866699f,
+ 0.841797f, 0.820312f, 0.803223f, 0.787598f, 0.006111f, 0.018433f, 0.031097f, 0.044739f, 0.057892f, 0.071472f, 0.085205f, 0.099304f,
+ 0.113037f, 0.127319f, 0.141357f, 0.156128f, 0.169678f, 0.183838f, 0.198608f, 0.213745f, 0.227661f, 0.243652f, 0.257324f, 0.272705f,
+ 0.286865f, 0.301025f, 0.316406f, 0.331543f, 0.345703f, 0.360107f, 0.375000f, 0.390625f, 0.405762f, 0.420410f, 0.435303f, 0.449951f,
+ 0.465088f, 0.479492f, 0.494141f, 0.509277f, 0.523926f, 0.538574f, 0.553711f, 0.569336f, 0.583496f, 0.598145f, 0.612793f, 0.628418f,
+ 0.642578f, 0.657227f, 0.671387f, 0.687012f, 0.702637f, 0.716797f, 0.731934f, 0.745605f, 0.761230f, 0.775391f, 0.790527f, 0.805176f,
+ 0.819824f, 0.834961f, 0.892578f, 0.858887f, 0.834473f, 0.814941f, 0.798340f, 0.783203f, 0.005756f, 0.017761f, 0.029907f, 0.042572f,
+ 0.055481f, 0.068420f, 0.081482f, 0.095276f, 0.108826f, 0.122070f, 0.135620f, 0.149902f, 0.163330f, 0.177368f, 0.191284f, 0.206421f,
+ 0.219482f, 0.233521f, 0.247925f, 0.262451f, 0.277100f, 0.290771f, 0.304688f, 0.319580f, 0.334229f, 0.348389f, 0.362549f, 0.377441f,
+ 0.391602f, 0.406250f, 0.421143f, 0.435791f, 0.450439f, 0.463867f, 0.478760f, 0.493164f, 0.507812f, 0.521973f, 0.537109f, 0.551270f,
+ 0.565430f, 0.580078f, 0.594727f, 0.609863f, 0.624023f, 0.638672f, 0.653320f, 0.668457f, 0.682129f, 0.697266f, 0.711914f, 0.726562f,
+ 0.740723f, 0.755859f, 0.770996f, 0.785156f, 0.799805f, 0.814453f, 0.882812f, 0.851562f, 0.827148f, 0.808594f, 0.792969f, 0.778809f,
+ 0.005741f, 0.017166f, 0.029053f, 0.041138f, 0.053345f, 0.065796f, 0.078674f, 0.091248f, 0.104614f, 0.117004f, 0.130737f, 0.143921f,
+ 0.156860f, 0.170288f, 0.183960f, 0.197754f, 0.211304f, 0.224976f, 0.238892f, 0.251953f, 0.266357f, 0.280273f, 0.294922f, 0.308594f,
+ 0.322021f, 0.336914f, 0.350098f, 0.364502f, 0.378174f, 0.393066f, 0.407471f, 0.420166f, 0.435059f, 0.449219f, 0.463135f, 0.477295f,
+ 0.491699f, 0.506348f, 0.520996f, 0.534668f, 0.549316f, 0.563477f, 0.577148f, 0.591309f, 0.605469f, 0.620605f, 0.634766f, 0.648438f,
+ 0.663086f, 0.677734f, 0.691895f, 0.706543f, 0.720215f, 0.734863f, 0.750488f, 0.765137f, 0.779297f, 0.793945f, 0.872559f, 0.843262f,
+ 0.820801f, 0.803223f, 0.787598f, 0.773926f, 0.005283f, 0.016052f, 0.028030f, 0.039246f, 0.050751f, 0.063232f, 0.074829f, 0.087341f,
+ 0.099976f, 0.112732f, 0.125122f, 0.138062f, 0.150757f, 0.163696f, 0.176758f, 0.189697f, 0.203125f, 0.216553f, 0.229614f, 0.243286f,
+ 0.256592f, 0.269775f, 0.283203f, 0.297119f, 0.310547f, 0.324463f, 0.337891f, 0.351807f, 0.365234f, 0.378662f, 0.392822f, 0.406738f,
+ 0.419922f, 0.434814f, 0.448730f, 0.461182f, 0.476562f, 0.489746f, 0.502930f, 0.517578f, 0.531738f, 0.545410f, 0.559082f, 0.573730f,
+ 0.587402f, 0.602051f, 0.615723f, 0.629395f, 0.644043f, 0.658203f, 0.672363f, 0.686523f, 0.701660f, 0.714844f, 0.729980f, 0.743652f,
+ 0.758301f, 0.774414f, 0.862305f, 0.835449f, 0.813965f, 0.796875f, 0.782227f, 0.769043f, 0.005272f, 0.015427f, 0.026230f, 0.037506f,
+ 0.049164f, 0.060516f, 0.072021f, 0.083740f, 0.095825f, 0.108521f, 0.120361f, 0.132324f, 0.144897f, 0.156738f, 0.169922f, 0.182373f,
+ 0.195068f, 0.208008f, 0.220459f, 0.233887f, 0.246948f, 0.260254f, 0.272461f, 0.285889f, 0.299561f, 0.312500f, 0.325684f, 0.338867f,
+ 0.352783f, 0.365479f, 0.378906f, 0.392334f, 0.406006f, 0.419189f, 0.432861f, 0.446777f, 0.460693f, 0.473877f, 0.486572f, 0.500977f,
+ 0.515137f, 0.528809f, 0.542480f, 0.555176f, 0.569824f, 0.583984f, 0.597656f, 0.611328f, 0.625000f, 0.639648f, 0.653320f, 0.667480f,
+ 0.681641f, 0.695801f, 0.709961f, 0.723633f, 0.738281f, 0.752930f, 0.852539f, 0.827148f, 0.807129f, 0.790527f, 0.776367f, 0.764160f,
+ 0.004822f, 0.014885f, 0.025360f, 0.035767f, 0.046570f, 0.057587f, 0.068726f, 0.080139f, 0.091736f, 0.103577f, 0.115479f, 0.126709f,
+ 0.138672f, 0.150879f, 0.162231f, 0.174805f, 0.187622f, 0.199951f, 0.212524f, 0.224854f, 0.236694f, 0.249878f, 0.262207f, 0.275391f,
+ 0.287842f, 0.300293f, 0.313477f, 0.326904f, 0.340088f, 0.353027f, 0.365479f, 0.378174f, 0.391602f, 0.404541f, 0.417236f, 0.431641f,
+ 0.444336f, 0.457764f, 0.470703f, 0.484375f, 0.497803f, 0.510742f, 0.524902f, 0.537598f, 0.552246f, 0.564941f, 0.579590f, 0.592285f,
+ 0.606445f, 0.621094f, 0.634277f, 0.646973f, 0.662109f, 0.675781f, 0.689453f, 0.704102f, 0.718262f, 0.733398f, 0.842285f, 0.818848f,
+ 0.799805f, 0.784180f, 0.770996f, 0.758301f, 0.004745f, 0.014427f, 0.024277f, 0.034546f, 0.044800f, 0.055176f, 0.066040f, 0.076477f,
+ 0.087341f, 0.099060f, 0.110474f, 0.121216f, 0.132690f, 0.144165f, 0.156006f, 0.167358f, 0.179688f, 0.191284f, 0.203247f, 0.216187f,
+ 0.227905f, 0.239868f, 0.252441f, 0.264648f, 0.277100f, 0.289307f, 0.301270f, 0.314453f, 0.326660f, 0.338867f, 0.352539f, 0.364990f,
+ 0.377686f, 0.390137f, 0.403076f, 0.416016f, 0.428467f, 0.441406f, 0.453857f, 0.468262f, 0.480957f, 0.494385f, 0.507324f, 0.520020f,
+ 0.534180f, 0.547363f, 0.560059f, 0.573730f, 0.586914f, 0.601074f, 0.615234f, 0.628418f, 0.641602f, 0.656250f, 0.669434f, 0.683594f,
+ 0.697754f, 0.712402f, 0.832520f, 0.809570f, 0.792480f, 0.778320f, 0.764160f, 0.753906f, 0.004612f, 0.013840f, 0.023483f, 0.033081f,
+ 0.042999f, 0.052490f, 0.063049f, 0.073303f, 0.083801f, 0.094238f, 0.105042f, 0.115967f, 0.127319f, 0.138062f, 0.149048f, 0.160645f,
+ 0.171875f, 0.183228f, 0.194946f, 0.206665f, 0.218384f, 0.230347f, 0.241699f, 0.253906f, 0.265869f, 0.277832f, 0.290039f, 0.301758f,
+ 0.314209f, 0.326660f, 0.339111f, 0.351074f, 0.363281f, 0.375977f, 0.388428f, 0.401123f, 0.413330f, 0.426270f, 0.439453f, 0.451904f,
+ 0.464111f, 0.478027f, 0.489746f, 0.503418f, 0.515625f, 0.529297f, 0.542480f, 0.556152f, 0.569336f, 0.582031f, 0.595215f, 0.608887f,
+ 0.622559f, 0.636230f, 0.649902f, 0.663574f, 0.677246f, 0.691895f, 0.821289f, 0.802246f, 0.785645f, 0.771484f, 0.758789f, 0.748047f,
+ 0.004345f, 0.012985f, 0.022156f, 0.030884f, 0.040802f, 0.050568f, 0.060303f, 0.069946f, 0.079956f, 0.090393f, 0.100403f, 0.111084f,
+ 0.120667f, 0.131714f, 0.142700f, 0.153198f, 0.164429f, 0.175659f, 0.186523f, 0.197876f, 0.208496f, 0.220337f, 0.231567f, 0.243286f,
+ 0.254639f, 0.266113f, 0.277832f, 0.289795f, 0.301758f, 0.313477f, 0.325439f, 0.337402f, 0.349609f, 0.361328f, 0.373779f, 0.385986f,
+ 0.398193f, 0.410889f, 0.423340f, 0.435059f, 0.447998f, 0.460205f, 0.473389f, 0.486084f, 0.499023f, 0.511230f, 0.524414f, 0.537109f,
+ 0.549805f, 0.563477f, 0.576172f, 0.589355f, 0.603027f, 0.616699f, 0.629883f, 0.644531f, 0.658691f, 0.670898f, 0.811035f, 0.792969f,
+ 0.777832f, 0.764648f, 0.752441f, 0.742676f, 0.004002f, 0.012718f, 0.021210f, 0.029877f, 0.039246f, 0.048431f, 0.057281f, 0.067078f,
+ 0.076538f, 0.086121f, 0.096008f, 0.105957f, 0.115540f, 0.125732f, 0.136475f, 0.146729f, 0.157227f, 0.167236f, 0.177979f, 0.189819f,
+ 0.200195f, 0.210693f, 0.221802f, 0.232788f, 0.243896f, 0.255127f, 0.266602f, 0.278320f, 0.289062f, 0.300293f, 0.312012f, 0.323975f,
+ 0.335449f, 0.347168f, 0.359131f, 0.371094f, 0.382812f, 0.394775f, 0.406982f, 0.419434f, 0.431152f, 0.443604f, 0.455566f, 0.468506f,
+ 0.481445f, 0.493408f, 0.506348f, 0.519043f, 0.531738f, 0.544922f, 0.558105f, 0.570801f, 0.583984f, 0.597168f, 0.610352f, 0.624512f,
+ 0.637695f, 0.651855f, 0.800293f, 0.785156f, 0.770508f, 0.757812f, 0.747070f, 0.737305f, 0.003967f, 0.011940f, 0.020203f, 0.028931f,
+ 0.037109f, 0.045898f, 0.054840f, 0.063477f, 0.073059f, 0.082214f, 0.090942f, 0.100647f, 0.110535f, 0.120178f, 0.129639f, 0.139648f,
+ 0.149902f, 0.160156f, 0.170044f, 0.180786f, 0.190674f, 0.201416f, 0.211792f, 0.222412f, 0.233521f, 0.244751f, 0.255615f, 0.266113f,
+ 0.276855f, 0.288574f, 0.299561f, 0.311279f, 0.322266f, 0.333984f, 0.344727f, 0.356934f, 0.368164f, 0.379395f, 0.390869f, 0.403076f,
+ 0.415283f, 0.427246f, 0.439453f, 0.451172f, 0.464111f, 0.476807f, 0.488281f, 0.500977f, 0.513672f, 0.526367f, 0.538574f, 0.551758f,
+ 0.564453f, 0.577637f, 0.590820f, 0.604492f, 0.618164f, 0.631836f, 0.790039f, 0.775879f, 0.763184f, 0.750977f, 0.740723f, 0.731445f,
+ 0.003679f, 0.011749f, 0.019135f, 0.027237f, 0.035431f, 0.043884f, 0.052399f, 0.060577f, 0.069153f, 0.077881f, 0.086731f, 0.095947f,
+ 0.104797f, 0.114380f, 0.123535f, 0.133057f, 0.142700f, 0.152588f, 0.162231f, 0.171753f, 0.182129f, 0.192261f, 0.202026f, 0.212524f,
+ 0.222900f, 0.233643f, 0.243896f, 0.254395f, 0.264893f, 0.276123f, 0.286621f, 0.297119f, 0.308105f, 0.319336f, 0.331299f, 0.341553f,
+ 0.353027f, 0.364258f, 0.375977f, 0.387451f, 0.399414f, 0.410645f, 0.422607f, 0.434814f, 0.445801f, 0.458984f, 0.470703f, 0.482910f,
+ 0.495361f, 0.508301f, 0.520020f, 0.532227f, 0.545410f, 0.558594f, 0.570801f, 0.584961f, 0.597656f, 0.611816f, 0.778809f, 0.768066f,
+ 0.754883f, 0.743652f, 0.733887f, 0.725098f, 0.003525f, 0.010956f, 0.018433f, 0.026260f, 0.033295f, 0.041870f, 0.049377f, 0.057709f,
+ 0.065735f, 0.074463f, 0.082764f, 0.091736f, 0.099976f, 0.108582f, 0.118103f, 0.126465f, 0.135742f, 0.144775f, 0.154175f, 0.164307f,
+ 0.173218f, 0.182983f, 0.192505f, 0.202759f, 0.212646f, 0.221924f, 0.232910f, 0.242188f, 0.252930f, 0.262939f, 0.273926f, 0.284180f,
+ 0.294922f, 0.305420f, 0.316162f, 0.327637f, 0.338867f, 0.349609f, 0.361084f, 0.371826f, 0.382812f, 0.395020f, 0.406494f, 0.417725f,
+ 0.429688f, 0.441406f, 0.452637f, 0.465088f, 0.477783f, 0.489258f, 0.501953f, 0.514160f, 0.527344f, 0.539062f, 0.551758f, 0.564941f,
+ 0.578125f, 0.591797f, 0.768555f, 0.759277f, 0.748047f, 0.736816f, 0.728027f, 0.718750f, 0.003363f, 0.010353f, 0.017548f, 0.024765f,
+ 0.032196f, 0.039673f, 0.046936f, 0.054565f, 0.062561f, 0.070496f, 0.078308f, 0.086731f, 0.094910f, 0.103333f, 0.111633f, 0.120422f,
+ 0.129150f, 0.137695f, 0.146973f, 0.155762f, 0.164673f, 0.173950f, 0.183228f, 0.193359f, 0.201782f, 0.212036f, 0.221436f, 0.231323f,
+ 0.241699f, 0.251221f, 0.261719f, 0.271729f, 0.281494f, 0.291992f, 0.302734f, 0.312988f, 0.323730f, 0.334961f, 0.345459f, 0.357666f,
+ 0.367432f, 0.378662f, 0.389893f, 0.401855f, 0.412842f, 0.424316f, 0.435791f, 0.447266f, 0.459473f, 0.471436f, 0.482910f, 0.495605f,
+ 0.507324f, 0.520508f, 0.533203f, 0.545898f, 0.558594f, 0.570801f, 0.757812f, 0.750488f, 0.740234f, 0.729980f, 0.720703f, 0.712402f,
+ 0.003254f, 0.010048f, 0.016815f, 0.023453f, 0.030609f, 0.037537f, 0.044617f, 0.051971f, 0.059265f, 0.066833f, 0.074280f, 0.082153f,
+ 0.089905f, 0.097717f, 0.106018f, 0.113770f, 0.122131f, 0.131104f, 0.139282f, 0.147705f, 0.155762f, 0.165161f, 0.173950f, 0.183228f,
+ 0.192139f, 0.200928f, 0.210693f, 0.220093f, 0.229736f, 0.239258f, 0.248657f, 0.259277f, 0.268799f, 0.279053f, 0.288574f, 0.299561f,
+ 0.309814f, 0.319580f, 0.330322f, 0.340820f, 0.352783f, 0.362549f, 0.374023f, 0.385010f, 0.395752f, 0.407471f, 0.418701f, 0.429688f,
+ 0.441650f, 0.453125f, 0.465088f, 0.477539f, 0.489014f, 0.500977f, 0.513184f, 0.526855f, 0.539062f, 0.552246f, 0.747559f, 0.741699f,
+ 0.731934f, 0.722656f, 0.714355f, 0.707031f, 0.003345f, 0.009262f, 0.015900f, 0.022614f, 0.029282f, 0.035522f, 0.042633f, 0.048981f,
+ 0.056000f, 0.063110f, 0.070801f, 0.077454f, 0.084839f, 0.092590f, 0.100281f, 0.107849f, 0.116089f, 0.123169f, 0.131348f, 0.139648f,
+ 0.148193f, 0.156616f, 0.164795f, 0.173584f, 0.182617f, 0.191284f, 0.200073f, 0.208740f, 0.218140f, 0.227417f, 0.236694f, 0.246338f,
+ 0.255859f, 0.265381f, 0.275146f, 0.285889f, 0.294922f, 0.305420f, 0.315918f, 0.325928f, 0.336670f, 0.347412f, 0.358154f, 0.368652f,
+ 0.378662f, 0.390381f, 0.402100f, 0.412842f, 0.424316f, 0.435059f, 0.447021f, 0.458984f, 0.470459f, 0.482422f, 0.494873f, 0.508301f,
+ 0.520020f, 0.532227f, 0.737305f, 0.732910f, 0.723633f, 0.715820f, 0.708008f, 0.700195f, 0.003195f, 0.009010f, 0.015137f, 0.021225f,
+ 0.027466f, 0.033844f, 0.040161f, 0.046417f, 0.053497f, 0.059875f, 0.066711f, 0.073425f, 0.080505f, 0.087280f, 0.094788f, 0.102173f,
+ 0.109070f, 0.117004f, 0.124634f, 0.132446f, 0.139893f, 0.147705f, 0.155884f, 0.163940f, 0.172729f, 0.180908f, 0.189697f, 0.198242f,
+ 0.206665f, 0.215820f, 0.225220f, 0.233765f, 0.243408f, 0.251953f, 0.262207f, 0.271484f, 0.281494f, 0.291260f, 0.300537f, 0.311035f,
+ 0.320801f, 0.332520f, 0.341797f, 0.352051f, 0.362305f, 0.373535f, 0.384521f, 0.395264f, 0.406494f, 0.417480f, 0.429443f, 0.440430f,
+ 0.451904f, 0.463867f, 0.476074f, 0.487793f, 0.499268f, 0.513184f, 0.726562f, 0.723633f, 0.716309f, 0.708496f, 0.700684f, 0.694336f,
+ 0.002859f, 0.008507f, 0.014366f, 0.020203f, 0.026123f, 0.031891f, 0.038025f, 0.044281f, 0.050354f, 0.056519f, 0.062683f, 0.069275f,
+ 0.075195f, 0.082458f, 0.088806f, 0.095947f, 0.102783f, 0.110046f, 0.117065f, 0.124878f, 0.132080f, 0.139282f, 0.146851f, 0.154907f,
+ 0.162598f, 0.171265f, 0.178833f, 0.187500f, 0.195435f, 0.204590f, 0.213013f, 0.221680f, 0.231079f, 0.239502f, 0.248047f, 0.258301f,
+ 0.267334f, 0.277100f, 0.286133f, 0.296387f, 0.306641f, 0.316162f, 0.326416f, 0.336426f, 0.346924f, 0.357422f, 0.367188f, 0.378418f,
+ 0.389160f, 0.400391f, 0.411865f, 0.422852f, 0.433594f, 0.445557f, 0.457520f, 0.468994f, 0.481445f, 0.493408f, 0.715332f, 0.715332f,
+ 0.708984f, 0.700684f, 0.693848f, 0.687988f, 0.002701f, 0.008080f, 0.013718f, 0.019058f, 0.024582f, 0.030197f, 0.035675f, 0.041748f,
+ 0.047302f, 0.053589f, 0.059082f, 0.065308f, 0.071777f, 0.077576f, 0.084106f, 0.090332f, 0.097107f, 0.103577f, 0.110046f, 0.117493f,
+ 0.124146f, 0.131470f, 0.138550f, 0.145508f, 0.153564f, 0.161377f, 0.169067f, 0.176880f, 0.184814f, 0.192627f, 0.201294f, 0.209717f,
+ 0.218140f, 0.226929f, 0.235229f, 0.245117f, 0.253418f, 0.262939f, 0.272705f, 0.281738f, 0.290771f, 0.300781f, 0.310791f, 0.321289f,
+ 0.330566f, 0.341064f, 0.351562f, 0.361572f, 0.372559f, 0.382568f, 0.393066f, 0.405273f, 0.415771f, 0.426758f, 0.438721f, 0.450439f,
+ 0.461670f, 0.474121f, 0.704102f, 0.706543f, 0.700195f, 0.693359f, 0.687012f, 0.681152f, 0.002546f, 0.007771f, 0.012985f, 0.017975f,
+ 0.023392f, 0.028976f, 0.034180f, 0.039368f, 0.044556f, 0.050110f, 0.055847f, 0.061218f, 0.066895f, 0.072815f, 0.078674f, 0.085083f,
+ 0.091309f, 0.097168f, 0.103516f, 0.110107f, 0.116821f, 0.123413f, 0.130371f, 0.137329f, 0.144165f, 0.151733f, 0.158813f, 0.166382f,
+ 0.174438f, 0.182129f, 0.190063f, 0.197510f, 0.206055f, 0.214355f, 0.222778f, 0.231812f, 0.240723f, 0.249023f, 0.258789f, 0.267578f,
+ 0.276855f, 0.285889f, 0.295654f, 0.305420f, 0.315430f, 0.324463f, 0.334961f, 0.345215f, 0.354492f, 0.365234f, 0.376221f, 0.387451f,
+ 0.398926f, 0.409424f, 0.419678f, 0.432129f, 0.443848f, 0.455566f, 0.693848f, 0.697266f, 0.691895f, 0.686523f, 0.680176f, 0.674805f,
+ 0.002542f, 0.007271f, 0.012337f, 0.017181f, 0.021744f, 0.026840f, 0.031555f, 0.037231f, 0.042236f, 0.046906f, 0.051941f, 0.057709f,
+ 0.063049f, 0.068542f, 0.073853f, 0.079712f, 0.085266f, 0.091064f, 0.096985f, 0.103027f, 0.109009f, 0.115417f, 0.122192f, 0.128540f,
+ 0.135132f, 0.141846f, 0.148926f, 0.156250f, 0.163696f, 0.171387f, 0.178223f, 0.186035f, 0.194580f, 0.202271f, 0.210327f, 0.218994f,
+ 0.227173f, 0.235596f, 0.244385f, 0.252930f, 0.262451f, 0.271240f, 0.280762f, 0.290771f, 0.299805f, 0.309082f, 0.318359f, 0.329102f,
+ 0.338623f, 0.348633f, 0.358643f, 0.370117f, 0.379639f, 0.390869f, 0.401611f, 0.413330f, 0.425293f, 0.436523f, 0.682129f, 0.688477f,
+ 0.684082f, 0.678711f, 0.673340f, 0.667969f, 0.002300f, 0.007076f, 0.011505f, 0.016251f, 0.020401f, 0.025665f, 0.029816f, 0.034790f,
+ 0.039368f, 0.044159f, 0.048798f, 0.053955f, 0.059174f, 0.064148f, 0.069153f, 0.074463f, 0.079346f, 0.085266f, 0.090759f, 0.096191f,
+ 0.102112f, 0.108032f, 0.114075f, 0.120117f, 0.126587f, 0.133057f, 0.139648f, 0.146240f, 0.153442f, 0.160400f, 0.167725f, 0.174683f,
+ 0.182739f, 0.190308f, 0.198120f, 0.206177f, 0.214355f, 0.222656f, 0.230713f, 0.239258f, 0.248413f, 0.257080f, 0.265869f, 0.274658f,
+ 0.284424f, 0.292725f, 0.302490f, 0.313232f, 0.321777f, 0.331787f, 0.341797f, 0.352295f, 0.363281f, 0.373535f, 0.383545f, 0.395264f,
+ 0.405762f, 0.416992f, 0.671387f, 0.679688f, 0.675293f, 0.670898f, 0.666016f, 0.661133f, 0.002104f, 0.006474f, 0.010506f, 0.015099f,
+ 0.018875f, 0.023911f, 0.028534f, 0.032715f, 0.036652f, 0.041290f, 0.046021f, 0.050171f, 0.054535f, 0.059570f, 0.064575f, 0.069458f,
+ 0.074341f, 0.079346f, 0.084351f, 0.089844f, 0.095032f, 0.100830f, 0.106628f, 0.112122f, 0.117859f, 0.124084f, 0.130249f, 0.136841f,
+ 0.143188f, 0.149780f, 0.157349f, 0.163940f, 0.171021f, 0.178345f, 0.186279f, 0.193848f, 0.201172f, 0.209717f, 0.217529f, 0.225464f,
+ 0.233765f, 0.242676f, 0.251221f, 0.260254f, 0.268311f, 0.278076f, 0.287109f, 0.296143f, 0.305908f, 0.315674f, 0.325195f, 0.335449f,
+ 0.344971f, 0.355469f, 0.365967f, 0.377441f, 0.387939f, 0.398193f, 0.660645f, 0.670410f, 0.667969f, 0.663086f, 0.659180f, 0.654785f,
+ 0.002085f, 0.006306f, 0.010506f, 0.014107f, 0.018448f, 0.022293f, 0.026215f, 0.029953f, 0.034515f, 0.038391f, 0.042786f, 0.046844f,
+ 0.051361f, 0.055573f, 0.059784f, 0.064331f, 0.068970f, 0.073425f, 0.078430f, 0.083313f, 0.088318f, 0.093567f, 0.098816f, 0.104126f,
+ 0.109924f, 0.115662f, 0.121521f, 0.127197f, 0.133545f, 0.139771f, 0.146729f, 0.153076f, 0.160278f, 0.166992f, 0.174316f, 0.181274f,
+ 0.188965f, 0.196045f, 0.204468f, 0.212036f, 0.220459f, 0.228638f, 0.237183f, 0.245483f, 0.254150f, 0.262451f, 0.271484f, 0.281250f,
+ 0.290283f, 0.299561f, 0.308350f, 0.318115f, 0.328369f, 0.337158f, 0.349121f, 0.358887f, 0.370117f, 0.380615f, 0.649414f, 0.661133f,
+ 0.659668f, 0.655762f, 0.651855f, 0.647949f, 0.001922f, 0.005867f, 0.009399f, 0.013565f, 0.017380f, 0.020859f, 0.024551f, 0.028442f,
+ 0.032318f, 0.035980f, 0.039551f, 0.043488f, 0.047333f, 0.051239f, 0.055573f, 0.059875f, 0.063660f, 0.067810f, 0.072876f, 0.077087f,
+ 0.081726f, 0.086304f, 0.091370f, 0.096863f, 0.101746f, 0.107483f, 0.112732f, 0.117920f, 0.124329f, 0.130005f, 0.136108f, 0.142822f,
+ 0.149170f, 0.155396f, 0.162598f, 0.169434f, 0.176636f, 0.183838f, 0.191772f, 0.198975f, 0.206665f, 0.214478f, 0.222290f, 0.230835f,
+ 0.239258f, 0.247803f, 0.256836f, 0.264893f, 0.274414f, 0.283203f, 0.292725f, 0.301758f, 0.311035f, 0.321289f, 0.332275f, 0.340820f,
+ 0.351562f, 0.363037f, 0.637695f, 0.652832f, 0.651367f, 0.647949f, 0.644531f, 0.641602f, 0.002052f, 0.005253f, 0.009117f, 0.012482f,
+ 0.016113f, 0.019302f, 0.022842f, 0.026230f, 0.029831f, 0.033447f, 0.036682f, 0.040588f, 0.044189f, 0.047333f, 0.051178f, 0.055267f,
+ 0.058807f, 0.062683f, 0.067200f, 0.070984f, 0.075195f, 0.079895f, 0.084534f, 0.088806f, 0.093933f, 0.098999f, 0.104309f, 0.109619f,
+ 0.114807f, 0.120422f, 0.126587f, 0.132080f, 0.138550f, 0.144775f, 0.151245f, 0.157837f, 0.164551f, 0.171387f, 0.178467f, 0.186157f,
+ 0.193359f, 0.201294f, 0.208740f, 0.216797f, 0.224854f, 0.233398f, 0.241211f, 0.250000f, 0.258545f, 0.267822f, 0.276855f, 0.286133f,
+ 0.295410f, 0.304932f, 0.314697f, 0.324463f, 0.334229f, 0.344238f, 0.626953f, 0.642578f, 0.643066f, 0.641113f, 0.637695f, 0.634277f,
+ 0.001711f, 0.005424f, 0.008347f, 0.012024f, 0.014977f, 0.018066f, 0.021500f, 0.024399f, 0.027756f, 0.030869f, 0.034058f, 0.037048f,
+ 0.040558f, 0.044006f, 0.046906f, 0.050690f, 0.054169f, 0.057983f, 0.061584f, 0.065247f, 0.069336f, 0.073425f, 0.077576f, 0.082092f,
+ 0.086670f, 0.091064f, 0.095886f, 0.101196f, 0.105957f, 0.111267f, 0.116943f, 0.122559f, 0.128174f, 0.133789f, 0.140259f, 0.146118f,
+ 0.153076f, 0.159424f, 0.166016f, 0.173462f, 0.180542f, 0.187744f, 0.195435f, 0.203003f, 0.209961f, 0.218994f, 0.226562f, 0.234619f,
+ 0.243286f, 0.251709f, 0.260742f, 0.269531f, 0.277832f, 0.287354f, 0.297363f, 0.306885f, 0.316406f, 0.326660f, 0.615234f, 0.633789f,
+ 0.634277f, 0.632812f, 0.630371f, 0.626953f, 0.001721f, 0.004829f, 0.008034f, 0.010857f, 0.013893f, 0.016953f, 0.019806f, 0.022705f,
+ 0.025589f, 0.028793f, 0.031616f, 0.034180f, 0.036926f, 0.039978f, 0.043213f, 0.046356f, 0.049744f, 0.052887f, 0.056305f, 0.059906f,
+ 0.063416f, 0.067322f, 0.070862f, 0.075134f, 0.079285f, 0.083435f, 0.088074f, 0.092712f, 0.097534f, 0.102173f, 0.107544f, 0.112305f,
+ 0.118225f, 0.123657f, 0.129272f, 0.135376f, 0.141602f, 0.147705f, 0.153931f, 0.160889f, 0.167847f, 0.174683f, 0.181885f, 0.189209f,
+ 0.196533f, 0.204224f, 0.212524f, 0.219727f, 0.228271f, 0.236572f, 0.245483f, 0.253418f, 0.261719f, 0.270996f, 0.280029f, 0.289307f,
+ 0.300537f, 0.309326f, 0.604004f, 0.625000f, 0.626953f, 0.625000f, 0.622559f, 0.620117f, 0.001624f, 0.004730f, 0.007412f, 0.010300f,
+ 0.013199f, 0.015717f, 0.018448f, 0.020935f, 0.023163f, 0.026138f, 0.028687f, 0.031204f, 0.033875f, 0.036743f, 0.039825f, 0.042389f,
+ 0.045166f, 0.048523f, 0.051422f, 0.054535f, 0.057953f, 0.061249f, 0.064880f, 0.068542f, 0.072388f, 0.076355f, 0.080505f, 0.084534f,
+ 0.089294f, 0.093750f, 0.098389f, 0.103210f, 0.108337f, 0.113647f, 0.118896f, 0.124817f, 0.130737f, 0.135986f, 0.142212f, 0.148560f,
+ 0.155151f, 0.162109f, 0.168579f, 0.175415f, 0.183105f, 0.190552f, 0.197998f, 0.205322f, 0.213623f, 0.221436f, 0.229370f, 0.237915f,
+ 0.246216f, 0.254883f, 0.264160f, 0.273438f, 0.282471f, 0.292236f, 0.593262f, 0.615723f, 0.618164f, 0.617188f, 0.615234f, 0.612793f,
+ 0.001355f, 0.004463f, 0.007061f, 0.009506f, 0.011612f, 0.014381f, 0.016830f, 0.019394f, 0.021576f, 0.023697f, 0.026428f, 0.028778f,
+ 0.030975f, 0.033386f, 0.035950f, 0.038513f, 0.041260f, 0.044067f, 0.046967f, 0.049622f, 0.052612f, 0.055847f, 0.059052f, 0.062164f,
+ 0.065918f, 0.069397f, 0.073242f, 0.077271f, 0.081055f, 0.085327f, 0.089661f, 0.094177f, 0.098877f, 0.103455f, 0.108582f, 0.113647f,
+ 0.119812f, 0.125000f, 0.130981f, 0.137085f, 0.142944f, 0.149414f, 0.156006f, 0.162354f, 0.169434f, 0.176514f, 0.183716f, 0.191284f,
+ 0.198975f, 0.206421f, 0.214844f, 0.222412f, 0.231323f, 0.238647f, 0.247437f, 0.256592f, 0.265625f, 0.276367f, 0.581055f, 0.606445f,
+ 0.609863f, 0.608887f, 0.607910f, 0.606445f, 0.001413f, 0.004128f, 0.006180f, 0.008781f, 0.010994f, 0.013496f, 0.015427f, 0.017654f,
+ 0.019684f, 0.021881f, 0.024139f, 0.025879f, 0.028137f, 0.030334f, 0.032471f, 0.034821f, 0.037354f, 0.039642f, 0.042236f, 0.044708f,
+ 0.047394f, 0.050079f, 0.053223f, 0.056244f, 0.059479f, 0.062622f, 0.066223f, 0.069946f, 0.073608f, 0.077209f, 0.081604f, 0.085632f,
+ 0.089722f, 0.094360f, 0.098999f, 0.103943f, 0.108826f, 0.114319f, 0.119568f, 0.125122f, 0.131104f, 0.137085f, 0.143433f, 0.150024f,
+ 0.156494f, 0.163330f, 0.170044f, 0.177490f, 0.184326f, 0.191895f, 0.199707f, 0.207764f, 0.215698f, 0.223755f, 0.231812f, 0.240845f,
+ 0.249756f, 0.258789f, 0.568848f, 0.598145f, 0.601562f, 0.600586f, 0.600586f, 0.599121f, 0.001182f, 0.003773f, 0.005970f, 0.008293f,
+ 0.010277f, 0.012512f, 0.014030f, 0.016129f, 0.017929f, 0.019791f, 0.021683f, 0.023590f, 0.025452f, 0.027328f, 0.029404f, 0.031677f,
+ 0.033539f, 0.035583f, 0.037903f, 0.040314f, 0.042877f, 0.045319f, 0.048126f, 0.050690f, 0.053436f, 0.056519f, 0.059723f, 0.062744f,
+ 0.066284f, 0.069702f, 0.073608f, 0.077209f, 0.081055f, 0.085754f, 0.089783f, 0.094421f, 0.099060f, 0.103821f, 0.109192f, 0.114563f,
+ 0.119934f, 0.125488f, 0.131104f, 0.137695f, 0.144043f, 0.149780f, 0.156738f, 0.163940f, 0.170654f, 0.177856f, 0.185181f, 0.192871f,
+ 0.200439f, 0.208740f, 0.216675f, 0.225342f, 0.233521f, 0.242554f, 0.557617f, 0.587891f, 0.592285f, 0.592773f, 0.592285f, 0.592285f,
+ 0.001198f, 0.003677f, 0.005547f, 0.007561f, 0.009468f, 0.011253f, 0.012833f, 0.014465f, 0.016205f, 0.017792f, 0.019394f, 0.021240f,
+ 0.022751f, 0.024475f, 0.026260f, 0.028015f, 0.030136f, 0.031708f, 0.034088f, 0.036102f, 0.038361f, 0.040497f, 0.042816f, 0.045288f,
+ 0.047882f, 0.050476f, 0.053284f, 0.056183f, 0.059174f, 0.062500f, 0.065796f, 0.069153f, 0.072998f, 0.076904f, 0.080994f, 0.085083f,
+ 0.089478f, 0.094116f, 0.098633f, 0.103394f, 0.108704f, 0.113953f, 0.119934f, 0.125366f, 0.131348f, 0.137329f, 0.143555f, 0.150391f,
+ 0.157227f, 0.163818f, 0.170776f, 0.178467f, 0.185791f, 0.193359f, 0.201538f, 0.209717f, 0.218018f, 0.226807f, 0.544922f, 0.578613f,
+ 0.583984f, 0.584961f, 0.585449f, 0.584473f, 0.001067f, 0.003101f, 0.004974f, 0.006855f, 0.008522f, 0.009949f, 0.011635f, 0.012985f,
+ 0.014595f, 0.016052f, 0.017685f, 0.019012f, 0.020264f, 0.021851f, 0.023346f, 0.025146f, 0.026688f, 0.028336f, 0.030304f, 0.031860f,
+ 0.034119f, 0.035889f, 0.038025f, 0.040283f, 0.042450f, 0.044952f, 0.047302f, 0.050049f, 0.052765f, 0.055908f, 0.058594f, 0.061859f,
+ 0.064880f, 0.068481f, 0.072327f, 0.076172f, 0.080200f, 0.084290f, 0.088684f, 0.093262f, 0.098145f, 0.102905f, 0.108337f, 0.113708f,
+ 0.119080f, 0.125000f, 0.131348f, 0.137329f, 0.143921f, 0.150391f, 0.157593f, 0.164551f, 0.171753f, 0.179077f, 0.186768f, 0.194702f,
+ 0.203003f, 0.210815f, 0.534180f, 0.569336f, 0.575684f, 0.577637f, 0.577637f, 0.577148f, 0.001196f, 0.003178f, 0.004601f, 0.006241f,
+ 0.007782f, 0.009262f, 0.010391f, 0.011795f, 0.012955f, 0.014198f, 0.015518f, 0.016785f, 0.018097f, 0.019409f, 0.020782f, 0.022247f,
+ 0.023544f, 0.025269f, 0.026749f, 0.028152f, 0.030045f, 0.031555f, 0.033630f, 0.035645f, 0.037567f, 0.039642f, 0.041992f, 0.044281f,
+ 0.046692f, 0.049042f, 0.052094f, 0.054779f, 0.057831f, 0.060760f, 0.064209f, 0.067627f, 0.071228f, 0.075256f, 0.079224f, 0.083557f,
+ 0.087891f, 0.092468f, 0.097168f, 0.102356f, 0.107605f, 0.113098f, 0.119019f, 0.124878f, 0.130859f, 0.137451f, 0.144287f, 0.150635f,
+ 0.157471f, 0.164917f, 0.171997f, 0.179932f, 0.187378f, 0.196899f, 0.521973f, 0.560547f, 0.566895f, 0.569824f, 0.570312f, 0.568848f,
+ 0.001242f, 0.002674f, 0.004421f, 0.005573f, 0.006882f, 0.008354f, 0.009491f, 0.010559f, 0.011406f, 0.012695f, 0.013893f, 0.014908f,
+ 0.015854f, 0.017044f, 0.018234f, 0.019501f, 0.020752f, 0.022003f, 0.023254f, 0.024689f, 0.026154f, 0.027802f, 0.029434f, 0.031113f,
+ 0.032898f, 0.034668f, 0.036774f, 0.038910f, 0.040802f, 0.043030f, 0.045593f, 0.048065f, 0.050873f, 0.053680f, 0.056458f, 0.059692f,
+ 0.062866f, 0.066467f, 0.069946f, 0.074036f, 0.077942f, 0.082275f, 0.086731f, 0.091614f, 0.096313f, 0.101562f, 0.106934f, 0.112671f,
+ 0.118591f, 0.124634f, 0.130859f, 0.137207f, 0.144043f, 0.151123f, 0.157593f, 0.165283f, 0.173218f, 0.180664f, 0.510254f, 0.550781f,
+ 0.558105f, 0.561035f, 0.562012f, 0.562012f, 0.000842f, 0.002552f, 0.003769f, 0.005333f, 0.006149f, 0.007298f, 0.008362f, 0.009224f,
+ 0.010254f, 0.011230f, 0.012108f, 0.013092f, 0.014000f, 0.014992f, 0.016006f, 0.016953f, 0.017990f, 0.019196f, 0.020142f, 0.021622f,
+ 0.022827f, 0.024216f, 0.025513f, 0.026993f, 0.028564f, 0.030212f, 0.032013f, 0.033813f, 0.035706f, 0.037598f, 0.039703f, 0.041840f,
+ 0.044159f, 0.046539f, 0.049347f, 0.052155f, 0.055084f, 0.058228f, 0.061554f, 0.065002f, 0.068909f, 0.072693f, 0.076599f, 0.081238f,
+ 0.085388f, 0.090515f, 0.095764f, 0.100891f, 0.106689f, 0.112366f, 0.118103f, 0.124634f, 0.130859f, 0.137573f, 0.144287f, 0.151855f,
+ 0.158447f, 0.166260f, 0.498535f, 0.541992f, 0.549805f, 0.553711f, 0.554199f, 0.554688f, 0.000874f, 0.002186f, 0.003445f, 0.004807f,
+ 0.005562f, 0.006607f, 0.007378f, 0.008102f, 0.008919f, 0.009666f, 0.010513f, 0.011131f, 0.012039f, 0.012848f, 0.013779f, 0.014671f,
+ 0.015465f, 0.016464f, 0.017517f, 0.018585f, 0.019730f, 0.020798f, 0.022018f, 0.023300f, 0.024612f, 0.026093f, 0.027374f, 0.029022f,
+ 0.030624f, 0.032440f, 0.034180f, 0.036285f, 0.038116f, 0.040344f, 0.042725f, 0.045349f, 0.047913f, 0.050476f, 0.053406f, 0.056488f,
+ 0.059998f, 0.063354f, 0.067383f, 0.071289f, 0.075562f, 0.079834f, 0.084656f, 0.089478f, 0.094849f, 0.100342f, 0.106140f, 0.111877f,
+ 0.118042f, 0.124573f, 0.130981f, 0.137451f, 0.144653f, 0.152588f, 0.486816f, 0.531738f, 0.541016f, 0.545410f, 0.547363f, 0.546875f,
+ 0.000667f, 0.002001f, 0.003244f, 0.003895f, 0.004936f, 0.005608f, 0.006477f, 0.006901f, 0.007648f, 0.008354f, 0.009132f, 0.009766f,
+ 0.010490f, 0.011177f, 0.011780f, 0.012543f, 0.013420f, 0.014084f, 0.015045f, 0.015961f, 0.016876f, 0.017822f, 0.018768f, 0.019958f,
+ 0.021255f, 0.022232f, 0.023560f, 0.024780f, 0.026108f, 0.027634f, 0.029221f, 0.030762f, 0.032684f, 0.034576f, 0.036621f, 0.038605f,
+ 0.040985f, 0.043488f, 0.046021f, 0.049042f, 0.051727f, 0.054901f, 0.058441f, 0.061981f, 0.065552f, 0.069885f, 0.074097f, 0.078857f,
+ 0.083923f, 0.088623f, 0.094360f, 0.099854f, 0.105957f, 0.111694f, 0.118164f, 0.124817f, 0.131836f, 0.138794f, 0.474365f, 0.522949f,
+ 0.532227f, 0.536621f, 0.538574f, 0.539062f, 0.000876f, 0.002020f, 0.002857f, 0.003855f, 0.004436f, 0.005009f, 0.005482f, 0.006130f,
+ 0.006588f, 0.007084f, 0.007656f, 0.008286f, 0.008949f, 0.009506f, 0.010025f, 0.010803f, 0.011444f, 0.012047f, 0.012802f, 0.013512f,
+ 0.014305f, 0.015282f, 0.016052f, 0.016846f, 0.017914f, 0.018829f, 0.019882f, 0.021027f, 0.022232f, 0.023453f, 0.024689f, 0.026169f,
+ 0.027573f, 0.029327f, 0.031036f, 0.032806f, 0.034882f, 0.036743f, 0.039032f, 0.041626f, 0.044312f, 0.046936f, 0.050018f, 0.053253f,
+ 0.056610f, 0.060272f, 0.064392f, 0.068542f, 0.072937f, 0.078003f, 0.082886f, 0.088318f, 0.093933f, 0.099670f, 0.106140f, 0.112000f,
+ 0.118713f, 0.125732f, 0.463135f, 0.513672f, 0.524414f, 0.528809f, 0.530762f, 0.532227f, 0.000573f, 0.001698f, 0.002670f, 0.003082f,
+ 0.003735f, 0.004318f, 0.004673f, 0.005161f, 0.005779f, 0.006203f, 0.006565f, 0.007015f, 0.007591f, 0.007965f, 0.008583f, 0.009094f,
+ 0.009491f, 0.010239f, 0.010780f, 0.011353f, 0.012047f, 0.012787f, 0.013504f, 0.014206f, 0.015060f, 0.015915f, 0.016708f, 0.017685f,
+ 0.018677f, 0.019653f, 0.020828f, 0.021866f, 0.023224f, 0.024445f, 0.025818f, 0.027557f, 0.029114f, 0.030991f, 0.032928f, 0.035034f,
+ 0.037201f, 0.039581f, 0.042328f, 0.045166f, 0.048157f, 0.051392f, 0.054962f, 0.058685f, 0.062988f, 0.067444f, 0.072021f, 0.077148f,
+ 0.082520f, 0.088196f, 0.093750f, 0.100403f, 0.106201f, 0.112976f, 0.450928f, 0.503906f, 0.515137f, 0.520020f, 0.522949f, 0.524414f,
+ 0.000643f, 0.001637f, 0.002197f, 0.002800f, 0.003376f, 0.003613f, 0.003914f, 0.004391f, 0.004742f, 0.005150f, 0.005466f, 0.005924f,
+ 0.006344f, 0.006645f, 0.007046f, 0.007591f, 0.008118f, 0.008560f, 0.008934f, 0.009529f, 0.010147f, 0.010651f, 0.011276f, 0.011787f,
+ 0.012543f, 0.013229f, 0.013916f, 0.014740f, 0.015564f, 0.016388f, 0.017258f, 0.018188f, 0.019257f, 0.020355f, 0.021729f, 0.022766f,
+ 0.024277f, 0.025696f, 0.027237f, 0.029022f, 0.030945f, 0.033020f, 0.035248f, 0.037689f, 0.040405f, 0.043182f, 0.046295f, 0.049866f,
+ 0.053528f, 0.057526f, 0.061920f, 0.066284f, 0.071716f, 0.077209f, 0.082703f, 0.088196f, 0.094177f, 0.101074f, 0.438965f, 0.494629f,
+ 0.507324f, 0.512207f, 0.515137f, 0.516113f, 0.000484f, 0.001272f, 0.001968f, 0.002327f, 0.002573f, 0.003054f, 0.003338f, 0.003660f,
+ 0.003906f, 0.004303f, 0.004658f, 0.004921f, 0.005222f, 0.005547f, 0.005878f, 0.006290f, 0.006542f, 0.007015f, 0.007442f, 0.007851f,
+ 0.008339f, 0.008713f, 0.009247f, 0.009811f, 0.010345f, 0.010849f, 0.011490f, 0.012123f, 0.012733f, 0.013428f, 0.014183f, 0.014961f,
+ 0.015839f, 0.016815f, 0.017731f, 0.018768f, 0.019821f, 0.021072f, 0.022385f, 0.023727f, 0.025345f, 0.027084f, 0.028946f, 0.030914f,
+ 0.033295f, 0.035614f, 0.038513f, 0.041473f, 0.044678f, 0.048462f, 0.052338f, 0.056671f, 0.061310f, 0.066101f, 0.071533f, 0.077148f,
+ 0.083069f, 0.089172f, 0.427246f, 0.485352f, 0.498535f, 0.503906f, 0.508301f, 0.509766f, 0.000416f, 0.001121f, 0.001410f, 0.001959f,
+ 0.002159f, 0.002558f, 0.002724f, 0.002939f, 0.003220f, 0.003447f, 0.003733f, 0.003944f, 0.004219f, 0.004578f, 0.004810f, 0.005100f,
+ 0.005402f, 0.005783f, 0.006077f, 0.006382f, 0.006729f, 0.007141f, 0.007526f, 0.007965f, 0.008354f, 0.008858f, 0.009300f, 0.009789f,
+ 0.010452f, 0.010986f, 0.011658f, 0.012131f, 0.012833f, 0.013702f, 0.014435f, 0.015266f, 0.016113f, 0.017136f, 0.018143f, 0.019241f,
+ 0.020493f, 0.021820f, 0.023346f, 0.025085f, 0.027023f, 0.028976f, 0.031174f, 0.033966f, 0.036743f, 0.039856f, 0.043396f, 0.047180f,
+ 0.051605f, 0.056152f, 0.061127f, 0.066284f, 0.072021f, 0.078247f, 0.415283f, 0.475586f, 0.490234f, 0.496338f, 0.499756f, 0.501953f,
+ 0.000493f, 0.001126f, 0.001391f, 0.001574f, 0.001786f, 0.002073f, 0.002188f, 0.002417f, 0.002657f, 0.002785f, 0.002964f, 0.003189f,
+ 0.003384f, 0.003687f, 0.003859f, 0.004124f, 0.004330f, 0.004555f, 0.004890f, 0.005119f, 0.005451f, 0.005749f, 0.006054f, 0.006348f,
+ 0.006683f, 0.007050f, 0.007458f, 0.007889f, 0.008339f, 0.008751f, 0.009323f, 0.009766f, 0.010353f, 0.010887f, 0.011520f, 0.012192f,
+ 0.012932f, 0.013748f, 0.014542f, 0.015434f, 0.016434f, 0.017471f, 0.018723f, 0.019989f, 0.021500f, 0.023117f, 0.024948f, 0.027100f,
+ 0.029770f, 0.032166f, 0.035248f, 0.038696f, 0.042633f, 0.046875f, 0.051605f, 0.056427f, 0.061859f, 0.067688f, 0.403320f, 0.467041f,
+ 0.480957f, 0.487793f, 0.491699f, 0.494385f, 0.000336f, 0.000673f, 0.001150f, 0.001274f, 0.001482f, 0.001630f, 0.001748f, 0.001904f,
+ 0.002087f, 0.002232f, 0.002306f, 0.002497f, 0.002672f, 0.002872f, 0.003092f, 0.003225f, 0.003387f, 0.003553f, 0.003819f, 0.003979f,
+ 0.004230f, 0.004517f, 0.004738f, 0.005016f, 0.005322f, 0.005569f, 0.005848f, 0.006184f, 0.006573f, 0.006851f, 0.007271f, 0.007660f,
+ 0.008064f, 0.008568f, 0.009048f, 0.009567f, 0.010139f, 0.010788f, 0.011391f, 0.012161f, 0.012939f, 0.013763f, 0.014694f, 0.015717f,
+ 0.016815f, 0.018097f, 0.019714f, 0.021149f, 0.023270f, 0.025421f, 0.028015f, 0.030991f, 0.034271f, 0.038116f, 0.042328f, 0.046997f,
+ 0.052094f, 0.057770f, 0.391113f, 0.457031f, 0.472412f, 0.479736f, 0.484375f, 0.486816f, 0.000309f, 0.000612f, 0.000953f, 0.001086f,
+ 0.001191f, 0.001281f, 0.001351f, 0.001442f, 0.001610f, 0.001733f, 0.001783f, 0.001991f, 0.002087f, 0.002232f, 0.002337f, 0.002495f,
+ 0.002611f, 0.002775f, 0.002935f, 0.003101f, 0.003302f, 0.003496f, 0.003622f, 0.003839f, 0.004047f, 0.004265f, 0.004494f, 0.004738f,
+ 0.005039f, 0.005272f, 0.005650f, 0.005898f, 0.006210f, 0.006588f, 0.006950f, 0.007332f, 0.007782f, 0.008240f, 0.008766f, 0.009331f,
+ 0.009964f, 0.010612f, 0.011314f, 0.012062f, 0.013023f, 0.014038f, 0.015007f, 0.016251f, 0.017761f, 0.019501f, 0.021530f, 0.023926f,
+ 0.026718f, 0.030106f, 0.033905f, 0.038361f, 0.043060f, 0.048370f, 0.379395f, 0.446777f, 0.464111f, 0.471191f, 0.475586f, 0.479492f,
+ 0.000439f, 0.000476f, 0.000672f, 0.000752f, 0.000810f, 0.000949f, 0.001011f, 0.001121f, 0.001160f, 0.001249f, 0.001408f, 0.001493f,
+ 0.001591f, 0.001719f, 0.001788f, 0.001845f, 0.001982f, 0.002106f, 0.002201f, 0.002357f, 0.002460f, 0.002598f, 0.002724f, 0.002869f,
+ 0.003036f, 0.003187f, 0.003397f, 0.003569f, 0.003763f, 0.004017f, 0.004211f, 0.004414f, 0.004704f, 0.004890f, 0.005234f, 0.005524f,
+ 0.005825f, 0.006187f, 0.006535f, 0.006977f, 0.007423f, 0.007874f, 0.008553f, 0.009079f, 0.009857f, 0.010567f, 0.011360f, 0.012306f,
+ 0.013390f, 0.014702f, 0.016220f, 0.017960f, 0.020157f, 0.022995f, 0.026352f, 0.030212f, 0.034790f, 0.039459f, 0.368408f, 0.437744f,
+ 0.455322f, 0.463379f, 0.468018f, 0.471436f, 0.000202f, 0.000437f, 0.000488f, 0.000579f, 0.000664f, 0.000692f, 0.000792f, 0.000762f,
+ 0.000875f, 0.000949f, 0.001038f, 0.001068f, 0.001116f, 0.001196f, 0.001300f, 0.001352f, 0.001458f, 0.001529f, 0.001623f, 0.001667f,
+ 0.001770f, 0.001884f, 0.001989f, 0.002071f, 0.002203f, 0.002310f, 0.002445f, 0.002556f, 0.002680f, 0.002876f, 0.002991f, 0.003206f,
+ 0.003365f, 0.003531f, 0.003759f, 0.003956f, 0.004227f, 0.004513f, 0.004768f, 0.005074f, 0.005402f, 0.005756f, 0.006142f, 0.006603f,
+ 0.007160f, 0.007645f, 0.008339f, 0.008987f, 0.009819f, 0.010780f, 0.011803f, 0.013153f, 0.014763f, 0.016876f, 0.019623f, 0.022995f,
+ 0.026978f, 0.031708f, 0.356445f, 0.428223f, 0.446533f, 0.455078f, 0.460449f, 0.463379f, 0.000126f, 0.000241f, 0.000344f, 0.000353f,
+ 0.000437f, 0.000522f, 0.000513f, 0.000552f, 0.000613f, 0.000699f, 0.000717f, 0.000727f, 0.000763f, 0.000848f, 0.000877f, 0.000956f,
+ 0.000963f, 0.001068f, 0.001128f, 0.001170f, 0.001238f, 0.001311f, 0.001385f, 0.001454f, 0.001534f, 0.001603f, 0.001714f, 0.001779f,
+ 0.001885f, 0.002016f, 0.002092f, 0.002214f, 0.002331f, 0.002460f, 0.002613f, 0.002777f, 0.002924f, 0.003120f, 0.003298f, 0.003496f,
+ 0.003708f, 0.004009f, 0.004292f, 0.004601f, 0.004951f, 0.005341f, 0.005772f, 0.006260f, 0.006901f, 0.007572f, 0.008324f, 0.009300f,
+ 0.010445f, 0.011848f, 0.013870f, 0.016678f, 0.020218f, 0.024536f, 0.345703f, 0.419189f, 0.437500f, 0.447021f, 0.452393f, 0.455811f,
+ 0.000146f, 0.000240f, 0.000268f, 0.000268f, 0.000310f, 0.000311f, 0.000331f, 0.000366f, 0.000410f, 0.000447f, 0.000446f, 0.000517f,
+ 0.000511f, 0.000571f, 0.000596f, 0.000618f, 0.000674f, 0.000691f, 0.000723f, 0.000762f, 0.000822f, 0.000856f, 0.000912f, 0.000950f,
+ 0.001014f, 0.001049f, 0.001128f, 0.001188f, 0.001237f, 0.001303f, 0.001371f, 0.001466f, 0.001532f, 0.001623f, 0.001701f, 0.001805f,
+ 0.001945f, 0.002035f, 0.002186f, 0.002329f, 0.002460f, 0.002632f, 0.002819f, 0.003012f, 0.003271f, 0.003550f, 0.003819f, 0.004162f,
+ 0.004539f, 0.005024f, 0.005585f, 0.006233f, 0.007050f, 0.008072f, 0.009331f, 0.011269f, 0.014160f, 0.018112f, 0.333740f, 0.408447f,
+ 0.428711f, 0.438232f, 0.443359f, 0.447510f, 0.000053f, 0.000163f, 0.000155f, 0.000160f, 0.000191f, 0.000228f, 0.000206f, 0.000233f,
+ 0.000248f, 0.000263f, 0.000267f, 0.000294f, 0.000324f, 0.000335f, 0.000364f, 0.000378f, 0.000396f, 0.000435f, 0.000445f, 0.000490f,
+ 0.000502f, 0.000522f, 0.000543f, 0.000582f, 0.000619f, 0.000665f, 0.000679f, 0.000705f, 0.000755f, 0.000797f, 0.000856f, 0.000887f,
+ 0.000953f, 0.000988f, 0.001043f, 0.001103f, 0.001177f, 0.001256f, 0.001331f, 0.001410f, 0.001508f, 0.001612f, 0.001734f, 0.001873f,
+ 0.001999f, 0.002163f, 0.002378f, 0.002565f, 0.002827f, 0.003119f, 0.003479f, 0.003899f, 0.004463f, 0.005116f, 0.005951f, 0.007153f,
+ 0.009163f, 0.012535f, 0.322510f, 0.400146f, 0.420654f, 0.430176f, 0.436523f, 0.440430f, 0.000097f, 0.000107f, 0.000095f, 0.000087f,
+ 0.000107f, 0.000110f, 0.000137f, 0.000139f, 0.000140f, 0.000147f, 0.000168f, 0.000175f, 0.000177f, 0.000184f, 0.000210f, 0.000200f,
+ 0.000224f, 0.000239f, 0.000246f, 0.000258f, 0.000278f, 0.000288f, 0.000312f, 0.000324f, 0.000347f, 0.000368f, 0.000382f, 0.000395f,
+ 0.000418f, 0.000440f, 0.000471f, 0.000495f, 0.000521f, 0.000547f, 0.000577f, 0.000620f, 0.000649f, 0.000695f, 0.000749f, 0.000785f,
+ 0.000838f, 0.000897f, 0.000972f, 0.001028f, 0.001118f, 0.001204f, 0.001316f, 0.001432f, 0.001580f, 0.001748f, 0.001961f, 0.002207f,
+ 0.002533f, 0.002941f, 0.003487f, 0.004223f, 0.005371f, 0.007809f, 0.311523f, 0.390381f, 0.411377f, 0.421875f, 0.428467f, 0.432617f,
+ 0.000000f, 0.000055f, 0.000046f, 0.000054f, 0.000060f, 0.000058f, 0.000060f, 0.000068f, 0.000068f, 0.000082f, 0.000076f, 0.000078f,
+ 0.000092f, 0.000087f, 0.000091f, 0.000097f, 0.000105f, 0.000115f, 0.000118f, 0.000124f, 0.000128f, 0.000133f, 0.000139f, 0.000154f,
+ 0.000160f, 0.000172f, 0.000175f, 0.000191f, 0.000201f, 0.000211f, 0.000221f, 0.000238f, 0.000242f, 0.000257f, 0.000277f, 0.000295f,
+ 0.000309f, 0.000326f, 0.000351f, 0.000375f, 0.000400f, 0.000428f, 0.000459f, 0.000490f, 0.000535f, 0.000579f, 0.000626f, 0.000683f,
+ 0.000754f, 0.000836f, 0.000952f, 0.001064f, 0.001237f, 0.001460f, 0.001751f, 0.002157f, 0.002800f, 0.004189f, 0.299561f, 0.380127f,
+ 0.403076f, 0.413574f, 0.419922f, 0.424072f, 0.000059f, 0.000039f, 0.000032f, 0.000028f, 0.000025f, 0.000025f, 0.000025f, 0.000024f,
+ 0.000023f, 0.000024f, 0.000026f, 0.000034f, 0.000029f, 0.000031f, 0.000038f, 0.000040f, 0.000042f, 0.000043f, 0.000042f, 0.000043f,
+ 0.000048f, 0.000054f, 0.000058f, 0.000056f, 0.000060f, 0.000062f, 0.000066f, 0.000069f, 0.000072f, 0.000078f, 0.000082f, 0.000085f,
+ 0.000093f, 0.000096f, 0.000099f, 0.000106f, 0.000116f, 0.000123f, 0.000132f, 0.000140f, 0.000150f, 0.000154f, 0.000167f, 0.000184f,
+ 0.000192f, 0.000212f, 0.000231f, 0.000251f, 0.000282f, 0.000314f, 0.000350f, 0.000401f, 0.000463f, 0.000554f, 0.000679f, 0.000861f,
+ 0.001157f, 0.001750f, 0.289307f, 0.371582f, 0.394043f, 0.406006f, 0.412109f, 0.417236f, 0.000031f, 0.000020f, 0.000016f, 0.000014f,
+ 0.000013f, 0.000012f, 0.000011f, 0.000011f, 0.000010f, 0.000010f, 0.000010f, 0.000009f, 0.000009f, 0.000008f, 0.000008f, 0.000009f,
+ 0.000009f, 0.000007f, 0.000008f, 0.000008f, 0.000010f, 0.000011f, 0.000012f, 0.000013f, 0.000013f, 0.000013f, 0.000014f, 0.000017f,
+ 0.000017f, 0.000016f, 0.000018f, 0.000019f, 0.000021f, 0.000021f, 0.000022f, 0.000025f, 0.000027f, 0.000025f, 0.000028f, 0.000030f,
+ 0.000033f, 0.000036f, 0.000038f, 0.000040f, 0.000042f, 0.000047f, 0.000052f, 0.000057f, 0.000060f, 0.000068f, 0.000073f, 0.000089f,
+ 0.000104f, 0.000124f, 0.000153f, 0.000204f, 0.000293f, 0.000497f, 0.278076f, 0.362793f, 0.385498f, 0.397705f, 0.405029f, 0.409912f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f,
+ 0.000002f, 0.000003f, 0.000003f, 0.000004f, 0.000004f, 0.000005f, 0.000005f, 0.000008f, 0.000012f, 0.000026f, 0.267822f, 0.353027f,
+ 0.376953f, 0.388916f, 0.395996f, 0.401367f,
+ },
+ {
+ 0.006824f, 0.021286f, 0.036285f, 0.051208f, 0.066467f, 0.082825f, 0.098694f, 0.114563f, 0.130737f, 0.146973f, 0.162720f, 0.179932f,
+ 0.196411f, 0.212646f, 0.229370f, 0.246338f, 0.263184f, 0.279785f, 0.297363f, 0.314209f, 0.331055f, 0.348389f, 0.365479f, 0.383301f,
+ 0.400146f, 0.417725f, 0.435303f, 0.451904f, 0.469971f, 0.486816f, 0.503906f, 0.521484f, 0.539551f, 0.556641f, 0.573730f, 0.592285f,
+ 0.609375f, 0.627441f, 0.644531f, 0.662598f, 0.679688f, 0.696777f, 0.714355f, 0.731934f, 0.749512f, 0.768066f, 0.784180f, 0.802246f,
+ 0.820312f, 0.837891f, 0.854980f, 0.871582f, 0.889648f, 0.906738f, 0.924805f, 0.941406f, 0.959473f, 0.976074f, 0.953125f, 0.895020f,
+ 0.857422f, 0.827637f, 0.803223f, 0.781738f, 0.006741f, 0.020706f, 0.035187f, 0.049866f, 0.065125f, 0.079895f, 0.095581f, 0.111206f,
+ 0.126953f, 0.142822f, 0.158569f, 0.174561f, 0.190796f, 0.207031f, 0.223511f, 0.239380f, 0.256104f, 0.272705f, 0.289307f, 0.305664f,
+ 0.322754f, 0.338867f, 0.356201f, 0.372314f, 0.389404f, 0.406494f, 0.423828f, 0.440430f, 0.457520f, 0.474854f, 0.491211f, 0.508789f,
+ 0.525391f, 0.541992f, 0.559082f, 0.576660f, 0.594238f, 0.610840f, 0.627930f, 0.645508f, 0.662598f, 0.679199f, 0.696289f, 0.713379f,
+ 0.731445f, 0.747559f, 0.765137f, 0.782715f, 0.799805f, 0.816895f, 0.834473f, 0.851074f, 0.868164f, 0.884766f, 0.902344f, 0.919434f,
+ 0.936523f, 0.953613f, 0.942871f, 0.887695f, 0.851562f, 0.823730f, 0.799805f, 0.779297f, 0.006504f, 0.020004f, 0.033875f, 0.048676f,
+ 0.063110f, 0.077759f, 0.092712f, 0.108032f, 0.123230f, 0.138672f, 0.153931f, 0.170044f, 0.185791f, 0.200806f, 0.217041f, 0.233276f,
+ 0.248901f, 0.265137f, 0.280762f, 0.297363f, 0.313721f, 0.329834f, 0.346680f, 0.363037f, 0.378418f, 0.395752f, 0.411621f, 0.428467f,
+ 0.445312f, 0.461670f, 0.479004f, 0.494873f, 0.511230f, 0.527832f, 0.544434f, 0.561523f, 0.578613f, 0.594727f, 0.611328f, 0.628906f,
+ 0.645508f, 0.662109f, 0.679199f, 0.695312f, 0.712402f, 0.729004f, 0.746094f, 0.762695f, 0.779297f, 0.796387f, 0.812500f, 0.829590f,
+ 0.846191f, 0.863281f, 0.879395f, 0.896973f, 0.914062f, 0.930176f, 0.932129f, 0.879395f, 0.845703f, 0.818848f, 0.795898f, 0.776367f,
+ 0.006226f, 0.019318f, 0.032959f, 0.046631f, 0.060699f, 0.075745f, 0.089966f, 0.104553f, 0.119385f, 0.134277f, 0.149292f, 0.164917f,
+ 0.179932f, 0.195190f, 0.210693f, 0.226562f, 0.242188f, 0.257568f, 0.273438f, 0.289062f, 0.304932f, 0.320557f, 0.336426f, 0.352539f,
+ 0.368652f, 0.384766f, 0.400391f, 0.417236f, 0.433105f, 0.448730f, 0.465088f, 0.481689f, 0.497559f, 0.513672f, 0.528809f, 0.546875f,
+ 0.562500f, 0.578613f, 0.595215f, 0.612793f, 0.627930f, 0.645508f, 0.661621f, 0.677246f, 0.693848f, 0.709961f, 0.726562f, 0.743164f,
+ 0.759766f, 0.774902f, 0.791992f, 0.808594f, 0.825195f, 0.841309f, 0.856934f, 0.874023f, 0.890625f, 0.907715f, 0.921387f, 0.872070f,
+ 0.839355f, 0.813477f, 0.791504f, 0.772461f, 0.005928f, 0.018997f, 0.031830f, 0.045380f, 0.059235f, 0.072754f, 0.087463f, 0.101562f,
+ 0.115723f, 0.130371f, 0.145264f, 0.159668f, 0.175049f, 0.189453f, 0.204468f, 0.219482f, 0.234497f, 0.250000f, 0.266113f, 0.280273f,
+ 0.295410f, 0.311768f, 0.327393f, 0.343018f, 0.357422f, 0.373779f, 0.389404f, 0.404785f, 0.421143f, 0.437012f, 0.452881f, 0.468262f,
+ 0.484375f, 0.499512f, 0.515137f, 0.531738f, 0.546875f, 0.562500f, 0.579102f, 0.595215f, 0.610840f, 0.627441f, 0.643555f, 0.659180f,
+ 0.674805f, 0.691406f, 0.708008f, 0.723145f, 0.738770f, 0.755371f, 0.771484f, 0.787598f, 0.803711f, 0.819824f, 0.835449f, 0.851562f,
+ 0.867676f, 0.884277f, 0.910156f, 0.864258f, 0.832520f, 0.808105f, 0.787109f, 0.769043f, 0.005939f, 0.018066f, 0.030991f, 0.043488f,
+ 0.057312f, 0.070557f, 0.084473f, 0.098328f, 0.112610f, 0.126587f, 0.140259f, 0.154907f, 0.169678f, 0.184326f, 0.198608f, 0.213379f,
+ 0.227783f, 0.242065f, 0.257568f, 0.272705f, 0.287109f, 0.302246f, 0.318115f, 0.333252f, 0.347656f, 0.362549f, 0.378418f, 0.393555f,
+ 0.408936f, 0.423828f, 0.439697f, 0.455078f, 0.471191f, 0.484863f, 0.500488f, 0.517578f, 0.532227f, 0.547363f, 0.562500f, 0.579102f,
+ 0.594727f, 0.610352f, 0.625488f, 0.641602f, 0.657227f, 0.671875f, 0.687500f, 0.704102f, 0.719238f, 0.733887f, 0.750488f, 0.767090f,
+ 0.782715f, 0.798340f, 0.813965f, 0.830566f, 0.845215f, 0.862305f, 0.899902f, 0.855469f, 0.825684f, 0.801758f, 0.782227f, 0.764648f,
+ 0.005684f, 0.017639f, 0.030334f, 0.042572f, 0.055298f, 0.068054f, 0.081787f, 0.095276f, 0.108765f, 0.122192f, 0.136353f, 0.150513f,
+ 0.164307f, 0.178467f, 0.192627f, 0.206665f, 0.221436f, 0.234985f, 0.249634f, 0.264404f, 0.278564f, 0.293213f, 0.308350f, 0.321533f,
+ 0.337646f, 0.353027f, 0.367432f, 0.381592f, 0.395996f, 0.411865f, 0.426758f, 0.441895f, 0.456543f, 0.471680f, 0.485840f, 0.501465f,
+ 0.517090f, 0.531738f, 0.546387f, 0.562012f, 0.576660f, 0.592773f, 0.608398f, 0.623047f, 0.638672f, 0.654297f, 0.668457f, 0.684082f,
+ 0.699707f, 0.714844f, 0.730469f, 0.745605f, 0.761230f, 0.777832f, 0.791504f, 0.807617f, 0.823242f, 0.839355f, 0.889160f, 0.847656f,
+ 0.818848f, 0.796387f, 0.776855f, 0.760254f, 0.005417f, 0.017136f, 0.028778f, 0.041016f, 0.054047f, 0.066528f, 0.079590f, 0.092102f,
+ 0.105225f, 0.118652f, 0.131714f, 0.145630f, 0.158813f, 0.172607f, 0.186523f, 0.200317f, 0.213745f, 0.227905f, 0.242188f, 0.256104f,
+ 0.270020f, 0.283936f, 0.299072f, 0.312744f, 0.327148f, 0.341797f, 0.355957f, 0.369629f, 0.384766f, 0.399414f, 0.413574f, 0.427490f,
+ 0.443115f, 0.457764f, 0.472656f, 0.487061f, 0.501465f, 0.516602f, 0.530762f, 0.545898f, 0.560547f, 0.574707f, 0.589844f, 0.605469f,
+ 0.619629f, 0.633301f, 0.648926f, 0.665527f, 0.679688f, 0.694824f, 0.709961f, 0.725586f, 0.739746f, 0.755371f, 0.770020f, 0.786133f,
+ 0.802246f, 0.817383f, 0.877930f, 0.838867f, 0.812012f, 0.790039f, 0.771973f, 0.755371f, 0.005520f, 0.016464f, 0.027695f, 0.039948f,
+ 0.051575f, 0.063965f, 0.076660f, 0.089111f, 0.101807f, 0.114319f, 0.126953f, 0.140381f, 0.153564f, 0.166992f, 0.180298f, 0.193970f,
+ 0.207153f, 0.220337f, 0.234131f, 0.248169f, 0.261475f, 0.275146f, 0.288818f, 0.302734f, 0.316162f, 0.330566f, 0.345459f, 0.358887f,
+ 0.372803f, 0.386719f, 0.401367f, 0.415527f, 0.429199f, 0.443848f, 0.458008f, 0.472412f, 0.486572f, 0.500977f, 0.515137f, 0.529785f,
+ 0.544434f, 0.558105f, 0.572754f, 0.587891f, 0.601074f, 0.617188f, 0.631836f, 0.645020f, 0.660645f, 0.674805f, 0.689453f, 0.704590f,
+ 0.719727f, 0.734375f, 0.750000f, 0.764160f, 0.780273f, 0.794922f, 0.866699f, 0.830566f, 0.804688f, 0.784180f, 0.766113f, 0.750977f,
+ 0.005222f, 0.016022f, 0.026962f, 0.038086f, 0.050049f, 0.061798f, 0.074158f, 0.085876f, 0.098145f, 0.110718f, 0.122986f, 0.135864f,
+ 0.148438f, 0.161133f, 0.173584f, 0.187378f, 0.199707f, 0.213501f, 0.226440f, 0.240112f, 0.252441f, 0.266113f, 0.279785f, 0.292725f,
+ 0.306152f, 0.320068f, 0.333984f, 0.347900f, 0.361572f, 0.374512f, 0.387695f, 0.402344f, 0.416504f, 0.429688f, 0.443604f, 0.458008f,
+ 0.471680f, 0.485596f, 0.499023f, 0.513184f, 0.527832f, 0.541016f, 0.555664f, 0.569336f, 0.583984f, 0.598633f, 0.612793f, 0.626465f,
+ 0.641602f, 0.656250f, 0.669922f, 0.684570f, 0.698730f, 0.713867f, 0.728516f, 0.742188f, 0.757812f, 0.771484f, 0.855957f, 0.822266f,
+ 0.797852f, 0.777832f, 0.760742f, 0.746094f, 0.004944f, 0.015327f, 0.026230f, 0.037201f, 0.048187f, 0.059448f, 0.071167f, 0.082642f,
+ 0.094727f, 0.106506f, 0.119019f, 0.130371f, 0.143555f, 0.155640f, 0.167725f, 0.180908f, 0.193604f, 0.206177f, 0.218506f, 0.231812f,
+ 0.244873f, 0.257568f, 0.270996f, 0.283203f, 0.296387f, 0.309814f, 0.322754f, 0.336670f, 0.348877f, 0.362061f, 0.376465f, 0.389893f,
+ 0.402588f, 0.415283f, 0.429443f, 0.443115f, 0.457031f, 0.470459f, 0.483887f, 0.497314f, 0.511230f, 0.524414f, 0.538574f, 0.551758f,
+ 0.565918f, 0.579590f, 0.593750f, 0.606934f, 0.621094f, 0.635254f, 0.649902f, 0.664062f, 0.678223f, 0.692871f, 0.707031f, 0.721191f,
+ 0.735840f, 0.750488f, 0.846191f, 0.813477f, 0.790527f, 0.770996f, 0.754883f, 0.740723f, 0.004951f, 0.014656f, 0.025253f, 0.035309f,
+ 0.046417f, 0.057465f, 0.068665f, 0.079773f, 0.091370f, 0.102844f, 0.114441f, 0.126099f, 0.138062f, 0.150391f, 0.161987f, 0.174561f,
+ 0.186523f, 0.198730f, 0.211060f, 0.223267f, 0.235352f, 0.248779f, 0.260986f, 0.274414f, 0.286621f, 0.298584f, 0.312256f, 0.324463f,
+ 0.337158f, 0.350342f, 0.363281f, 0.376953f, 0.389404f, 0.402344f, 0.415283f, 0.428955f, 0.441162f, 0.455322f, 0.467285f, 0.481201f,
+ 0.493896f, 0.507324f, 0.520996f, 0.534668f, 0.547852f, 0.561035f, 0.575195f, 0.588867f, 0.603027f, 0.616211f, 0.630371f, 0.643555f,
+ 0.658203f, 0.671875f, 0.686035f, 0.699707f, 0.714844f, 0.729492f, 0.833984f, 0.804688f, 0.782227f, 0.764160f, 0.749512f, 0.735352f,
+ 0.004700f, 0.014343f, 0.024200f, 0.034515f, 0.044586f, 0.055176f, 0.066162f, 0.077209f, 0.087830f, 0.098816f, 0.110413f, 0.121826f,
+ 0.132690f, 0.144897f, 0.156372f, 0.168213f, 0.179443f, 0.191650f, 0.203369f, 0.215088f, 0.227661f, 0.239990f, 0.251709f, 0.263916f,
+ 0.276611f, 0.289551f, 0.301270f, 0.313965f, 0.325928f, 0.338135f, 0.350586f, 0.363037f, 0.376465f, 0.388428f, 0.401123f, 0.414062f,
+ 0.426514f, 0.439209f, 0.452393f, 0.465088f, 0.478271f, 0.491455f, 0.503906f, 0.517090f, 0.530273f, 0.543457f, 0.556641f, 0.570312f,
+ 0.583008f, 0.597168f, 0.610352f, 0.624512f, 0.638184f, 0.651367f, 0.665527f, 0.679199f, 0.692871f, 0.708496f, 0.823242f, 0.796387f,
+ 0.774902f, 0.757812f, 0.742676f, 0.729980f, 0.004395f, 0.013802f, 0.023499f, 0.033173f, 0.043121f, 0.053345f, 0.063538f, 0.073730f,
+ 0.085083f, 0.095581f, 0.106140f, 0.116760f, 0.127930f, 0.139160f, 0.150757f, 0.161621f, 0.173096f, 0.184814f, 0.196289f, 0.207520f,
+ 0.219971f, 0.231201f, 0.242920f, 0.254150f, 0.266602f, 0.278320f, 0.290527f, 0.302490f, 0.314209f, 0.326904f, 0.338867f, 0.349854f,
+ 0.362305f, 0.375488f, 0.387451f, 0.400146f, 0.412354f, 0.424805f, 0.436768f, 0.449219f, 0.461914f, 0.475098f, 0.487061f, 0.500000f,
+ 0.512695f, 0.525391f, 0.538574f, 0.551758f, 0.564453f, 0.577148f, 0.590820f, 0.604004f, 0.618164f, 0.631348f, 0.644531f, 0.658203f,
+ 0.672363f, 0.686523f, 0.812500f, 0.786621f, 0.767090f, 0.750977f, 0.736816f, 0.724609f, 0.004425f, 0.013405f, 0.022385f, 0.032043f,
+ 0.041565f, 0.051605f, 0.061340f, 0.071106f, 0.081116f, 0.091125f, 0.101868f, 0.112671f, 0.123169f, 0.133667f, 0.144897f, 0.155029f,
+ 0.166748f, 0.177246f, 0.188599f, 0.199585f, 0.211182f, 0.222046f, 0.233643f, 0.245361f, 0.255615f, 0.268066f, 0.279053f, 0.291260f,
+ 0.303223f, 0.314209f, 0.325684f, 0.338379f, 0.349854f, 0.361572f, 0.374023f, 0.385254f, 0.397949f, 0.409912f, 0.421143f, 0.434082f,
+ 0.445801f, 0.457764f, 0.470215f, 0.482910f, 0.495361f, 0.508301f, 0.520996f, 0.534180f, 0.546387f, 0.560059f, 0.572266f, 0.584961f,
+ 0.597168f, 0.610840f, 0.624023f, 0.638184f, 0.650879f, 0.666016f, 0.801270f, 0.778320f, 0.760254f, 0.744141f, 0.730469f, 0.719238f,
+ 0.004261f, 0.012543f, 0.021591f, 0.031052f, 0.039734f, 0.049164f, 0.058838f, 0.068420f, 0.077881f, 0.087402f, 0.098145f, 0.108276f,
+ 0.118225f, 0.128784f, 0.138550f, 0.149292f, 0.159790f, 0.170654f, 0.181519f, 0.191772f, 0.203003f, 0.213623f, 0.225098f, 0.235107f,
+ 0.247070f, 0.257324f, 0.269287f, 0.280273f, 0.291260f, 0.302246f, 0.313721f, 0.325439f, 0.336670f, 0.348145f, 0.359619f, 0.371338f,
+ 0.382812f, 0.395020f, 0.406738f, 0.418213f, 0.429932f, 0.442139f, 0.454102f, 0.466309f, 0.479004f, 0.490723f, 0.502930f, 0.515625f,
+ 0.526855f, 0.540527f, 0.552246f, 0.565918f, 0.578613f, 0.591309f, 0.604492f, 0.617188f, 0.630859f, 0.644043f, 0.790039f, 0.769531f,
+ 0.751953f, 0.737305f, 0.724121f, 0.713379f, 0.003983f, 0.012329f, 0.020538f, 0.029312f, 0.038452f, 0.047241f, 0.056244f, 0.065552f,
+ 0.075195f, 0.084290f, 0.094238f, 0.103638f, 0.113403f, 0.123413f, 0.133057f, 0.143066f, 0.153076f, 0.163696f, 0.173584f, 0.184204f,
+ 0.194580f, 0.204834f, 0.215332f, 0.225952f, 0.237305f, 0.247803f, 0.258545f, 0.269531f, 0.280518f, 0.291260f, 0.301758f, 0.312988f,
+ 0.324219f, 0.335205f, 0.346191f, 0.357178f, 0.368896f, 0.380127f, 0.391113f, 0.403076f, 0.414551f, 0.426270f, 0.437500f, 0.449951f,
+ 0.460938f, 0.473389f, 0.485596f, 0.497314f, 0.509277f, 0.522461f, 0.533691f, 0.546875f, 0.558594f, 0.571289f, 0.583496f, 0.596680f,
+ 0.608887f, 0.623047f, 0.778809f, 0.761230f, 0.744141f, 0.730957f, 0.718262f, 0.707031f, 0.003717f, 0.012016f, 0.020142f, 0.028137f,
+ 0.036682f, 0.045441f, 0.053711f, 0.062927f, 0.071777f, 0.080627f, 0.090210f, 0.099060f, 0.108643f, 0.118164f, 0.127808f, 0.137329f,
+ 0.147095f, 0.156128f, 0.166748f, 0.175903f, 0.186157f, 0.196655f, 0.206909f, 0.216797f, 0.227417f, 0.236816f, 0.247559f, 0.258301f,
+ 0.268799f, 0.278809f, 0.289795f, 0.299805f, 0.310547f, 0.321777f, 0.333008f, 0.343262f, 0.354492f, 0.365234f, 0.376953f, 0.387939f,
+ 0.398438f, 0.410400f, 0.421387f, 0.433105f, 0.444824f, 0.455811f, 0.467529f, 0.479736f, 0.491943f, 0.502930f, 0.515625f, 0.527344f,
+ 0.540039f, 0.551758f, 0.563965f, 0.576660f, 0.589844f, 0.602539f, 0.767578f, 0.751465f, 0.736328f, 0.723633f, 0.711914f, 0.701660f,
+ 0.003813f, 0.011337f, 0.019028f, 0.027252f, 0.035583f, 0.043396f, 0.051849f, 0.060028f, 0.068481f, 0.077026f, 0.086121f, 0.095093f,
+ 0.103821f, 0.112610f, 0.121765f, 0.131470f, 0.140503f, 0.149780f, 0.159058f, 0.168701f, 0.178711f, 0.187744f, 0.197998f, 0.207397f,
+ 0.217651f, 0.227661f, 0.236694f, 0.246704f, 0.257080f, 0.267334f, 0.277832f, 0.288330f, 0.298584f, 0.308838f, 0.319336f, 0.329590f,
+ 0.340332f, 0.351318f, 0.361816f, 0.372559f, 0.383301f, 0.395020f, 0.405273f, 0.416260f, 0.427734f, 0.439209f, 0.450195f, 0.462158f,
+ 0.473389f, 0.485107f, 0.497314f, 0.508301f, 0.520996f, 0.533203f, 0.544922f, 0.557617f, 0.568848f, 0.582031f, 0.757324f, 0.742676f,
+ 0.729004f, 0.716309f, 0.705566f, 0.695801f, 0.003633f, 0.011040f, 0.018280f, 0.026062f, 0.033569f, 0.041229f, 0.049591f, 0.057373f,
+ 0.065308f, 0.073975f, 0.082214f, 0.090393f, 0.099243f, 0.107544f, 0.116028f, 0.125854f, 0.134155f, 0.143311f, 0.151978f, 0.160767f,
+ 0.170410f, 0.179321f, 0.188477f, 0.198242f, 0.207764f, 0.217896f, 0.227051f, 0.236328f, 0.246338f, 0.256104f, 0.265869f, 0.276123f,
+ 0.285645f, 0.295898f, 0.306152f, 0.316162f, 0.326172f, 0.336914f, 0.347412f, 0.358154f, 0.368164f, 0.378906f, 0.389648f, 0.400146f,
+ 0.410889f, 0.421631f, 0.432861f, 0.444824f, 0.456055f, 0.466797f, 0.479004f, 0.490234f, 0.501465f, 0.514160f, 0.525879f, 0.537598f,
+ 0.549316f, 0.561523f, 0.745605f, 0.733887f, 0.721191f, 0.708496f, 0.699219f, 0.689453f, 0.003469f, 0.010429f, 0.017609f, 0.024612f,
+ 0.032135f, 0.039520f, 0.047516f, 0.055206f, 0.062347f, 0.070618f, 0.078308f, 0.085938f, 0.094727f, 0.102417f, 0.111511f, 0.119446f,
+ 0.127441f, 0.136475f, 0.144897f, 0.154175f, 0.162476f, 0.171509f, 0.180054f, 0.189697f, 0.198486f, 0.207886f, 0.216553f, 0.225830f,
+ 0.235229f, 0.244873f, 0.254395f, 0.263428f, 0.273193f, 0.283203f, 0.292969f, 0.302734f, 0.312744f, 0.322510f, 0.333008f, 0.342773f,
+ 0.353027f, 0.363037f, 0.374023f, 0.384521f, 0.395264f, 0.405762f, 0.416260f, 0.427002f, 0.438232f, 0.449219f, 0.460449f, 0.471924f,
+ 0.482910f, 0.494629f, 0.506348f, 0.517578f, 0.529785f, 0.541504f, 0.734375f, 0.725098f, 0.712891f, 0.701660f, 0.692383f, 0.683594f,
+ 0.003328f, 0.009804f, 0.016373f, 0.023727f, 0.030746f, 0.037994f, 0.044952f, 0.052032f, 0.059998f, 0.067383f, 0.074707f, 0.082214f,
+ 0.089783f, 0.097961f, 0.105774f, 0.114197f, 0.122131f, 0.129517f, 0.137695f, 0.146118f, 0.154419f, 0.163330f, 0.171997f, 0.180664f,
+ 0.188477f, 0.197388f, 0.206055f, 0.215332f, 0.224365f, 0.233765f, 0.242798f, 0.251709f, 0.260986f, 0.270020f, 0.279785f, 0.289062f,
+ 0.299561f, 0.308594f, 0.318115f, 0.328613f, 0.338135f, 0.348877f, 0.358154f, 0.368408f, 0.378174f, 0.388916f, 0.399658f, 0.410156f,
+ 0.420898f, 0.431885f, 0.442871f, 0.453369f, 0.463867f, 0.475342f, 0.486572f, 0.498535f, 0.510742f, 0.521973f, 0.723633f, 0.715820f,
+ 0.705078f, 0.694336f, 0.686035f, 0.677246f, 0.003090f, 0.009628f, 0.016129f, 0.022644f, 0.029068f, 0.036407f, 0.042633f, 0.049866f,
+ 0.056946f, 0.063904f, 0.071167f, 0.078186f, 0.085327f, 0.092896f, 0.100098f, 0.107788f, 0.115662f, 0.123230f, 0.131104f, 0.139160f,
+ 0.146973f, 0.154907f, 0.162964f, 0.171265f, 0.179565f, 0.188110f, 0.196777f, 0.204834f, 0.213745f, 0.222168f, 0.231079f, 0.239868f,
+ 0.248779f, 0.258057f, 0.267090f, 0.276611f, 0.285645f, 0.294434f, 0.304688f, 0.314209f, 0.323242f, 0.332520f, 0.342773f, 0.353027f,
+ 0.362549f, 0.373047f, 0.383057f, 0.393311f, 0.404053f, 0.414307f, 0.424561f, 0.435059f, 0.445801f, 0.456787f, 0.467773f, 0.479004f,
+ 0.490479f, 0.501953f, 0.712891f, 0.707031f, 0.696777f, 0.687500f, 0.679199f, 0.671387f, 0.003096f, 0.009026f, 0.015450f, 0.021606f,
+ 0.027695f, 0.034302f, 0.040833f, 0.047455f, 0.054077f, 0.060669f, 0.067444f, 0.074097f, 0.081604f, 0.088501f, 0.095337f, 0.102295f,
+ 0.109375f, 0.116821f, 0.124146f, 0.131592f, 0.139404f, 0.147217f, 0.155029f, 0.162231f, 0.170288f, 0.177979f, 0.186646f, 0.194092f,
+ 0.203247f, 0.211670f, 0.219604f, 0.228149f, 0.236816f, 0.245605f, 0.254639f, 0.263184f, 0.272217f, 0.281250f, 0.290527f, 0.299805f,
+ 0.308838f, 0.318604f, 0.327637f, 0.337646f, 0.347900f, 0.356934f, 0.367432f, 0.376953f, 0.387451f, 0.397217f, 0.407227f, 0.417480f,
+ 0.427979f, 0.439209f, 0.449463f, 0.459717f, 0.470947f, 0.482666f, 0.701172f, 0.698242f, 0.688477f, 0.680176f, 0.671875f, 0.665039f,
+ 0.002831f, 0.008789f, 0.014702f, 0.020523f, 0.026642f, 0.032684f, 0.038757f, 0.044708f, 0.051666f, 0.057312f, 0.063660f, 0.070190f,
+ 0.076904f, 0.083435f, 0.090454f, 0.097046f, 0.103821f, 0.110535f, 0.117981f, 0.124817f, 0.131714f, 0.138916f, 0.146606f, 0.153687f,
+ 0.161011f, 0.168823f, 0.176270f, 0.184570f, 0.192139f, 0.200317f, 0.208008f, 0.216309f, 0.224609f, 0.233032f, 0.241821f, 0.250244f,
+ 0.258789f, 0.268066f, 0.276611f, 0.285400f, 0.294678f, 0.303223f, 0.312500f, 0.322021f, 0.331787f, 0.340088f, 0.350830f, 0.360596f,
+ 0.369385f, 0.380371f, 0.389893f, 0.399658f, 0.410645f, 0.420654f, 0.430908f, 0.442383f, 0.452148f, 0.464111f, 0.690430f, 0.688965f,
+ 0.681152f, 0.672852f, 0.665039f, 0.658691f, 0.002712f, 0.008553f, 0.013878f, 0.019638f, 0.025360f, 0.030716f, 0.037231f, 0.042633f,
+ 0.048615f, 0.054810f, 0.060638f, 0.066650f, 0.072205f, 0.078796f, 0.085083f, 0.091492f, 0.097961f, 0.104065f, 0.110718f, 0.117859f,
+ 0.124207f, 0.130981f, 0.138550f, 0.145142f, 0.152588f, 0.160156f, 0.166992f, 0.174561f, 0.181885f, 0.189453f, 0.197754f, 0.205444f,
+ 0.213013f, 0.220825f, 0.229004f, 0.237061f, 0.246094f, 0.254639f, 0.262939f, 0.271484f, 0.280273f, 0.288818f, 0.298584f, 0.307129f,
+ 0.316162f, 0.325195f, 0.334229f, 0.344482f, 0.353516f, 0.363525f, 0.372803f, 0.382812f, 0.392822f, 0.402344f, 0.412842f, 0.423096f,
+ 0.433350f, 0.444092f, 0.679199f, 0.679688f, 0.672852f, 0.665039f, 0.658203f, 0.651855f, 0.002674f, 0.007828f, 0.013290f, 0.018723f,
+ 0.023743f, 0.029160f, 0.034790f, 0.040100f, 0.045929f, 0.051544f, 0.057068f, 0.063110f, 0.068359f, 0.074280f, 0.080078f, 0.086243f,
+ 0.092346f, 0.098206f, 0.104919f, 0.110779f, 0.117493f, 0.123291f, 0.130005f, 0.136963f, 0.143677f, 0.150635f, 0.157471f, 0.164307f,
+ 0.171631f, 0.179199f, 0.186279f, 0.193604f, 0.201904f, 0.209229f, 0.217163f, 0.224976f, 0.233154f, 0.240967f, 0.249634f, 0.258301f,
+ 0.266113f, 0.274414f, 0.283691f, 0.291748f, 0.301025f, 0.310059f, 0.319336f, 0.327148f, 0.337402f, 0.347168f, 0.355957f, 0.364746f,
+ 0.375488f, 0.385498f, 0.394043f, 0.405273f, 0.415283f, 0.426025f, 0.667969f, 0.670410f, 0.664551f, 0.657227f, 0.651367f, 0.645508f,
+ 0.002731f, 0.007622f, 0.012627f, 0.017868f, 0.022781f, 0.028107f, 0.032959f, 0.037811f, 0.043121f, 0.048615f, 0.053925f, 0.059235f,
+ 0.064514f, 0.070007f, 0.075562f, 0.080688f, 0.086914f, 0.092102f, 0.098083f, 0.104309f, 0.110107f, 0.115906f, 0.122314f, 0.128540f,
+ 0.135010f, 0.141479f, 0.147949f, 0.154663f, 0.161865f, 0.168579f, 0.175415f, 0.182739f, 0.191040f, 0.197510f, 0.205200f, 0.212891f,
+ 0.219971f, 0.228638f, 0.236328f, 0.244263f, 0.252686f, 0.260498f, 0.268799f, 0.278076f, 0.286133f, 0.294434f, 0.303223f, 0.312500f,
+ 0.320801f, 0.329834f, 0.339844f, 0.347656f, 0.357910f, 0.367676f, 0.376709f, 0.386963f, 0.396729f, 0.406982f, 0.656738f, 0.662598f,
+ 0.656738f, 0.649902f, 0.644531f, 0.638672f, 0.002411f, 0.007168f, 0.012238f, 0.016739f, 0.021957f, 0.026184f, 0.031311f, 0.035583f,
+ 0.041016f, 0.045685f, 0.050568f, 0.055573f, 0.060791f, 0.065735f, 0.070557f, 0.076111f, 0.081238f, 0.086792f, 0.092163f, 0.097534f,
+ 0.103271f, 0.108887f, 0.114563f, 0.120605f, 0.126587f, 0.132446f, 0.139038f, 0.145508f, 0.152100f, 0.158447f, 0.165527f, 0.171997f,
+ 0.178833f, 0.186035f, 0.193481f, 0.200928f, 0.207886f, 0.215820f, 0.222900f, 0.230713f, 0.238770f, 0.246948f, 0.255127f, 0.262695f,
+ 0.271484f, 0.280029f, 0.287842f, 0.296631f, 0.305420f, 0.313965f, 0.322754f, 0.331787f, 0.340576f, 0.350342f, 0.359375f, 0.369385f,
+ 0.379150f, 0.388184f, 0.645508f, 0.652832f, 0.648438f, 0.643066f, 0.637695f, 0.632324f, 0.002480f, 0.006691f, 0.011452f, 0.015900f,
+ 0.020828f, 0.024734f, 0.029327f, 0.033752f, 0.038513f, 0.042999f, 0.047638f, 0.052429f, 0.056671f, 0.061859f, 0.066040f, 0.071289f,
+ 0.075684f, 0.080688f, 0.086243f, 0.091248f, 0.096436f, 0.101562f, 0.107300f, 0.112366f, 0.118347f, 0.124146f, 0.130249f, 0.135864f,
+ 0.141968f, 0.148438f, 0.155029f, 0.161377f, 0.167969f, 0.174683f, 0.181641f, 0.188599f, 0.195679f, 0.203247f, 0.210449f, 0.217529f,
+ 0.225342f, 0.233398f, 0.241577f, 0.249023f, 0.256592f, 0.264893f, 0.273193f, 0.281494f, 0.289795f, 0.297607f, 0.306885f, 0.315430f,
+ 0.323730f, 0.333496f, 0.342529f, 0.351318f, 0.360840f, 0.370605f, 0.634766f, 0.643555f, 0.640625f, 0.635742f, 0.630859f, 0.625488f,
+ 0.002230f, 0.006477f, 0.010582f, 0.014870f, 0.019073f, 0.023270f, 0.027893f, 0.031860f, 0.036072f, 0.040253f, 0.044373f, 0.048706f,
+ 0.052856f, 0.057312f, 0.061859f, 0.066406f, 0.070984f, 0.075317f, 0.080139f, 0.084839f, 0.089661f, 0.094910f, 0.099792f, 0.104858f,
+ 0.110718f, 0.115356f, 0.121399f, 0.126831f, 0.132690f, 0.138672f, 0.145142f, 0.151001f, 0.157471f, 0.164185f, 0.170532f, 0.177002f,
+ 0.184082f, 0.191040f, 0.197876f, 0.205200f, 0.212402f, 0.219604f, 0.227295f, 0.234985f, 0.242188f, 0.250244f, 0.257812f, 0.266113f,
+ 0.274170f, 0.282471f, 0.290771f, 0.299072f, 0.307373f, 0.316162f, 0.326416f, 0.333984f, 0.343750f, 0.353271f, 0.622070f, 0.634277f,
+ 0.631836f, 0.627930f, 0.623535f, 0.619141f, 0.002220f, 0.006039f, 0.010353f, 0.014328f, 0.017838f, 0.022141f, 0.025742f, 0.029510f,
+ 0.033600f, 0.037781f, 0.041443f, 0.045502f, 0.049469f, 0.053436f, 0.057190f, 0.061462f, 0.065735f, 0.069946f, 0.074524f, 0.078674f,
+ 0.083069f, 0.087830f, 0.092468f, 0.097412f, 0.102783f, 0.107910f, 0.112793f, 0.118164f, 0.123901f, 0.129395f, 0.135132f, 0.140991f,
+ 0.147339f, 0.152954f, 0.159302f, 0.165527f, 0.172363f, 0.178589f, 0.185425f, 0.191895f, 0.199219f, 0.206665f, 0.213989f, 0.221069f,
+ 0.228516f, 0.236206f, 0.243042f, 0.251709f, 0.258789f, 0.266846f, 0.275146f, 0.283203f, 0.291260f, 0.300537f, 0.308350f, 0.317627f,
+ 0.326904f, 0.335938f, 0.611816f, 0.625000f, 0.624023f, 0.620117f, 0.616211f, 0.612793f, 0.001965f, 0.005882f, 0.009613f, 0.013184f,
+ 0.016785f, 0.020370f, 0.024384f, 0.027664f, 0.031311f, 0.035126f, 0.038727f, 0.042572f, 0.046112f, 0.049347f, 0.053253f, 0.056915f,
+ 0.060883f, 0.064697f, 0.068909f, 0.072693f, 0.076843f, 0.081055f, 0.085754f, 0.090088f, 0.094849f, 0.099609f, 0.104614f, 0.109741f,
+ 0.114746f, 0.119995f, 0.125488f, 0.130981f, 0.136719f, 0.142700f, 0.148315f, 0.154541f, 0.160522f, 0.166870f, 0.173828f, 0.179932f,
+ 0.186768f, 0.193604f, 0.200439f, 0.207764f, 0.214844f, 0.221802f, 0.228882f, 0.236328f, 0.244385f, 0.252197f, 0.259277f, 0.268066f,
+ 0.275635f, 0.283447f, 0.292236f, 0.301270f, 0.309570f, 0.318848f, 0.600098f, 0.616211f, 0.615234f, 0.612793f, 0.609375f, 0.605469f,
+ 0.001966f, 0.005653f, 0.009109f, 0.012428f, 0.015945f, 0.018967f, 0.022537f, 0.025894f, 0.029175f, 0.032440f, 0.035797f, 0.038818f,
+ 0.042389f, 0.046051f, 0.049072f, 0.052521f, 0.056335f, 0.059906f, 0.063293f, 0.067017f, 0.070923f, 0.075134f, 0.078979f, 0.083496f,
+ 0.087646f, 0.091980f, 0.096619f, 0.101196f, 0.105957f, 0.111145f, 0.116028f, 0.121277f, 0.126831f, 0.132080f, 0.137817f, 0.143311f,
+ 0.149780f, 0.155029f, 0.161621f, 0.167847f, 0.173950f, 0.180786f, 0.187622f, 0.194214f, 0.201050f, 0.207764f, 0.215210f, 0.222046f,
+ 0.229370f, 0.236816f, 0.244751f, 0.251953f, 0.260010f, 0.268311f, 0.276123f, 0.284180f, 0.293213f, 0.301514f, 0.588379f, 0.606934f,
+ 0.607422f, 0.604980f, 0.602051f, 0.599609f, 0.001963f, 0.005333f, 0.008377f, 0.011589f, 0.014450f, 0.017593f, 0.021133f, 0.023972f,
+ 0.027145f, 0.030075f, 0.033295f, 0.035858f, 0.038818f, 0.041992f, 0.045288f, 0.048279f, 0.051849f, 0.054840f, 0.058289f, 0.061737f,
+ 0.065186f, 0.068848f, 0.072632f, 0.076721f, 0.080505f, 0.084717f, 0.088806f, 0.093079f, 0.097717f, 0.102356f, 0.106934f, 0.111755f,
+ 0.116882f, 0.121887f, 0.127319f, 0.132935f, 0.138306f, 0.144287f, 0.149902f, 0.156250f, 0.162109f, 0.168579f, 0.174316f, 0.180908f,
+ 0.187500f, 0.194458f, 0.201538f, 0.208252f, 0.215210f, 0.222656f, 0.229980f, 0.237061f, 0.244629f, 0.252441f, 0.260254f, 0.267334f,
+ 0.276123f, 0.284180f, 0.576660f, 0.597656f, 0.599609f, 0.598145f, 0.595215f, 0.591797f, 0.001631f, 0.004906f, 0.007805f, 0.010826f,
+ 0.013802f, 0.016983f, 0.019485f, 0.022079f, 0.024750f, 0.027939f, 0.030136f, 0.033112f, 0.035797f, 0.038727f, 0.041443f, 0.044281f,
+ 0.047058f, 0.050018f, 0.053253f, 0.056396f, 0.059662f, 0.063049f, 0.066406f, 0.069946f, 0.073730f, 0.077454f, 0.081360f, 0.085388f,
+ 0.089417f, 0.093750f, 0.098267f, 0.102844f, 0.107727f, 0.112244f, 0.117615f, 0.122253f, 0.127441f, 0.133057f, 0.138550f, 0.144287f,
+ 0.150024f, 0.156250f, 0.161987f, 0.167969f, 0.174805f, 0.181274f, 0.187744f, 0.194580f, 0.201294f, 0.208374f, 0.215210f, 0.222412f,
+ 0.229736f, 0.237183f, 0.244629f, 0.252197f, 0.260010f, 0.269287f, 0.566406f, 0.588867f, 0.590820f, 0.590332f, 0.587891f, 0.585938f,
+ 0.001858f, 0.004318f, 0.007465f, 0.010246f, 0.012550f, 0.015793f, 0.018143f, 0.020782f, 0.022980f, 0.025116f, 0.027924f, 0.030106f,
+ 0.032623f, 0.035126f, 0.037720f, 0.040283f, 0.042847f, 0.045380f, 0.048492f, 0.051300f, 0.054321f, 0.057373f, 0.060516f, 0.063599f,
+ 0.067139f, 0.070496f, 0.074219f, 0.078003f, 0.081848f, 0.085754f, 0.089783f, 0.093994f, 0.098267f, 0.102783f, 0.107239f, 0.112366f,
+ 0.117371f, 0.122498f, 0.127686f, 0.132935f, 0.138428f, 0.144043f, 0.150024f, 0.155884f, 0.161865f, 0.168091f, 0.174316f, 0.180664f,
+ 0.187622f, 0.194214f, 0.200928f, 0.207520f, 0.214966f, 0.221680f, 0.229370f, 0.236816f, 0.244751f, 0.252441f, 0.553223f, 0.579102f,
+ 0.583496f, 0.582031f, 0.581055f, 0.579590f, 0.001425f, 0.004284f, 0.007019f, 0.009521f, 0.011894f, 0.014191f, 0.016632f, 0.018723f,
+ 0.021210f, 0.023209f, 0.025482f, 0.027344f, 0.029617f, 0.032043f, 0.034210f, 0.036407f, 0.039001f, 0.041077f, 0.043976f, 0.046448f,
+ 0.049133f, 0.051819f, 0.054932f, 0.057770f, 0.060730f, 0.063965f, 0.067322f, 0.070862f, 0.074280f, 0.077698f, 0.082031f, 0.085571f,
+ 0.089844f, 0.093994f, 0.098022f, 0.102722f, 0.107178f, 0.111877f, 0.116821f, 0.121887f, 0.127075f, 0.132446f, 0.138062f, 0.143799f,
+ 0.149414f, 0.155518f, 0.161377f, 0.167480f, 0.173950f, 0.180176f, 0.186890f, 0.193481f, 0.200562f, 0.207397f, 0.214355f, 0.221313f,
+ 0.229492f, 0.237427f, 0.541504f, 0.570801f, 0.575195f, 0.575195f, 0.573730f, 0.572266f, 0.001613f, 0.004181f, 0.006252f, 0.008774f,
+ 0.011108f, 0.013054f, 0.015152f, 0.016937f, 0.019150f, 0.021011f, 0.023163f, 0.024826f, 0.026993f, 0.028793f, 0.030823f, 0.033081f,
+ 0.035156f, 0.037201f, 0.039612f, 0.041748f, 0.044464f, 0.046814f, 0.049438f, 0.052155f, 0.054840f, 0.057831f, 0.060699f, 0.063599f,
+ 0.067078f, 0.070374f, 0.073853f, 0.077087f, 0.081177f, 0.085083f, 0.089111f, 0.093262f, 0.097473f, 0.101929f, 0.106689f, 0.111023f,
+ 0.116455f, 0.121277f, 0.126343f, 0.132080f, 0.137573f, 0.142700f, 0.148682f, 0.154907f, 0.161133f, 0.167236f, 0.173340f, 0.179688f,
+ 0.186768f, 0.193115f, 0.200684f, 0.207275f, 0.214233f, 0.221924f, 0.530273f, 0.561523f, 0.565430f, 0.567383f, 0.564941f, 0.564941f,
+ 0.001237f, 0.003775f, 0.006348f, 0.008141f, 0.010117f, 0.012184f, 0.013763f, 0.015656f, 0.017319f, 0.018967f, 0.020645f, 0.022507f,
+ 0.023926f, 0.025757f, 0.027573f, 0.029449f, 0.031677f, 0.033325f, 0.035645f, 0.037659f, 0.039734f, 0.041809f, 0.044189f, 0.046692f,
+ 0.049133f, 0.051697f, 0.054504f, 0.057251f, 0.060059f, 0.063110f, 0.066467f, 0.069763f, 0.072937f, 0.076477f, 0.080505f, 0.084290f,
+ 0.088013f, 0.092407f, 0.096436f, 0.101013f, 0.105713f, 0.110352f, 0.115356f, 0.120605f, 0.125488f, 0.130981f, 0.136353f, 0.142090f,
+ 0.148438f, 0.153931f, 0.159912f, 0.166260f, 0.172485f, 0.179321f, 0.185791f, 0.193115f, 0.199463f, 0.206665f, 0.520020f, 0.552246f,
+ 0.558105f, 0.559570f, 0.559082f, 0.557617f, 0.001151f, 0.003399f, 0.005611f, 0.007439f, 0.009354f, 0.010925f, 0.012489f, 0.014061f,
+ 0.015610f, 0.017258f, 0.018845f, 0.020248f, 0.021484f, 0.023193f, 0.024796f, 0.026459f, 0.028183f, 0.029785f, 0.031738f, 0.033386f,
+ 0.035309f, 0.037384f, 0.039368f, 0.041626f, 0.043701f, 0.046204f, 0.048553f, 0.051178f, 0.053955f, 0.056488f, 0.059418f, 0.062256f,
+ 0.065308f, 0.068542f, 0.071899f, 0.075623f, 0.079224f, 0.082947f, 0.087097f, 0.091064f, 0.095520f, 0.099854f, 0.104736f, 0.109314f,
+ 0.114136f, 0.119324f, 0.124756f, 0.130127f, 0.135498f, 0.141113f, 0.146973f, 0.153198f, 0.159180f, 0.165527f, 0.172241f, 0.178711f,
+ 0.185425f, 0.192749f, 0.507324f, 0.543945f, 0.549316f, 0.552246f, 0.551270f, 0.551270f, 0.001070f, 0.002996f, 0.004986f, 0.006851f,
+ 0.008514f, 0.009850f, 0.011330f, 0.012596f, 0.014015f, 0.015259f, 0.016586f, 0.017731f, 0.019287f, 0.020676f, 0.022079f, 0.023468f,
+ 0.024765f, 0.026489f, 0.028030f, 0.029465f, 0.031311f, 0.032898f, 0.034851f, 0.036743f, 0.038940f, 0.040833f, 0.043091f, 0.045074f,
+ 0.047729f, 0.050079f, 0.052673f, 0.055389f, 0.058136f, 0.061188f, 0.064087f, 0.067261f, 0.070618f, 0.074158f, 0.077942f, 0.081726f,
+ 0.085815f, 0.089783f, 0.094055f, 0.098572f, 0.103088f, 0.107971f, 0.113037f, 0.118164f, 0.123413f, 0.128784f, 0.134521f, 0.140137f,
+ 0.146118f, 0.152100f, 0.158325f, 0.164307f, 0.171387f, 0.177368f, 0.496094f, 0.534668f, 0.541992f, 0.543945f, 0.544434f, 0.544434f,
+ 0.001086f, 0.003069f, 0.004463f, 0.006256f, 0.007393f, 0.009026f, 0.010178f, 0.011276f, 0.012260f, 0.013542f, 0.014648f, 0.015808f,
+ 0.016861f, 0.017899f, 0.019333f, 0.020599f, 0.021942f, 0.023117f, 0.024384f, 0.025833f, 0.027344f, 0.028992f, 0.030579f, 0.032318f,
+ 0.034149f, 0.035828f, 0.037842f, 0.039764f, 0.041901f, 0.044037f, 0.046539f, 0.048645f, 0.051147f, 0.053894f, 0.056641f, 0.059631f,
+ 0.062500f, 0.065735f, 0.069031f, 0.072754f, 0.076294f, 0.080139f, 0.083984f, 0.088379f, 0.092712f, 0.097229f, 0.101929f, 0.106873f,
+ 0.111694f, 0.117004f, 0.122314f, 0.127930f, 0.133789f, 0.139282f, 0.145142f, 0.151367f, 0.157349f, 0.163818f, 0.484619f, 0.525391f,
+ 0.534180f, 0.536621f, 0.536133f, 0.536621f, 0.001125f, 0.002892f, 0.003883f, 0.005867f, 0.006603f, 0.007935f, 0.009026f, 0.009911f,
+ 0.010956f, 0.012077f, 0.012909f, 0.013901f, 0.014977f, 0.015671f, 0.016983f, 0.018021f, 0.019058f, 0.020279f, 0.021225f, 0.022598f,
+ 0.023941f, 0.025299f, 0.026535f, 0.028107f, 0.029755f, 0.031113f, 0.033020f, 0.034668f, 0.036682f, 0.038483f, 0.040527f, 0.042511f,
+ 0.044708f, 0.046936f, 0.049744f, 0.052216f, 0.054840f, 0.057800f, 0.060791f, 0.064087f, 0.067505f, 0.071045f, 0.074463f, 0.078491f,
+ 0.082397f, 0.086609f, 0.091248f, 0.095581f, 0.100342f, 0.105530f, 0.110474f, 0.116272f, 0.120972f, 0.126953f, 0.132812f, 0.138672f,
+ 0.144287f, 0.150513f, 0.472412f, 0.516113f, 0.524902f, 0.528809f, 0.529785f, 0.529785f, 0.000859f, 0.002470f, 0.003815f, 0.005226f,
+ 0.005913f, 0.007206f, 0.007942f, 0.008652f, 0.009583f, 0.010406f, 0.011223f, 0.011971f, 0.012856f, 0.013664f, 0.014664f, 0.015549f,
+ 0.016464f, 0.017487f, 0.018478f, 0.019592f, 0.020767f, 0.021774f, 0.023117f, 0.024338f, 0.025604f, 0.027008f, 0.028519f, 0.029953f,
+ 0.031525f, 0.033173f, 0.034943f, 0.036865f, 0.038696f, 0.040863f, 0.042969f, 0.045471f, 0.048004f, 0.050293f, 0.052979f, 0.055847f,
+ 0.058960f, 0.062042f, 0.065491f, 0.069153f, 0.072937f, 0.076660f, 0.080750f, 0.085144f, 0.089539f, 0.094177f, 0.099304f, 0.104187f,
+ 0.109741f, 0.114807f, 0.120483f, 0.125977f, 0.131836f, 0.138306f, 0.460449f, 0.507812f, 0.516602f, 0.520020f, 0.522461f, 0.522949f,
+ 0.000906f, 0.002359f, 0.003643f, 0.004356f, 0.005310f, 0.005989f, 0.007030f, 0.007507f, 0.008255f, 0.009010f, 0.009834f, 0.010483f,
+ 0.011230f, 0.011887f, 0.012573f, 0.013367f, 0.014252f, 0.014954f, 0.015900f, 0.016785f, 0.017776f, 0.018631f, 0.019775f, 0.020874f,
+ 0.022110f, 0.023117f, 0.024368f, 0.025589f, 0.026932f, 0.028549f, 0.029938f, 0.031525f, 0.033325f, 0.035187f, 0.037109f, 0.038971f,
+ 0.041138f, 0.043396f, 0.045715f, 0.048370f, 0.051025f, 0.053772f, 0.057129f, 0.060089f, 0.063416f, 0.067261f, 0.070679f, 0.075012f,
+ 0.079285f, 0.083618f, 0.088379f, 0.093018f, 0.098083f, 0.102478f, 0.108093f, 0.114380f, 0.119507f, 0.125488f, 0.448975f, 0.498291f,
+ 0.508789f, 0.513672f, 0.514648f, 0.516113f, 0.000728f, 0.001932f, 0.003067f, 0.003990f, 0.004784f, 0.005295f, 0.005974f, 0.006584f,
+ 0.007099f, 0.007652f, 0.008255f, 0.008904f, 0.009491f, 0.010109f, 0.010658f, 0.011497f, 0.012131f, 0.012718f, 0.013535f, 0.014336f,
+ 0.015083f, 0.016083f, 0.016785f, 0.017761f, 0.018738f, 0.019669f, 0.020691f, 0.021805f, 0.023010f, 0.024170f, 0.025467f, 0.026794f,
+ 0.028336f, 0.029922f, 0.031555f, 0.033203f, 0.035034f, 0.036987f, 0.039062f, 0.041290f, 0.043671f, 0.046143f, 0.048920f, 0.051880f,
+ 0.054901f, 0.058228f, 0.061615f, 0.065369f, 0.069214f, 0.073425f, 0.077637f, 0.082214f, 0.087097f, 0.091797f, 0.096497f, 0.102356f,
+ 0.107483f, 0.113464f, 0.437256f, 0.489746f, 0.500977f, 0.504883f, 0.507812f, 0.509277f, 0.000724f, 0.001842f, 0.002728f, 0.003332f,
+ 0.004101f, 0.004707f, 0.005020f, 0.005497f, 0.006245f, 0.006603f, 0.007027f, 0.007515f, 0.008156f, 0.008537f, 0.009125f, 0.009659f,
+ 0.010101f, 0.010864f, 0.011482f, 0.012070f, 0.012756f, 0.013496f, 0.014236f, 0.014931f, 0.015808f, 0.016632f, 0.017487f, 0.018433f,
+ 0.019379f, 0.020416f, 0.021530f, 0.022583f, 0.023804f, 0.024979f, 0.026443f, 0.027939f, 0.029526f, 0.031235f, 0.033020f, 0.035004f,
+ 0.037018f, 0.039185f, 0.041595f, 0.044159f, 0.046783f, 0.049866f, 0.052856f, 0.056274f, 0.059906f, 0.063721f, 0.067749f, 0.072327f,
+ 0.076172f, 0.081299f, 0.085938f, 0.091309f, 0.096558f, 0.101807f, 0.426270f, 0.480469f, 0.492676f, 0.498047f, 0.500488f, 0.501953f,
+ 0.000673f, 0.001715f, 0.002426f, 0.002953f, 0.003588f, 0.003944f, 0.004200f, 0.004776f, 0.005131f, 0.005527f, 0.005886f, 0.006371f,
+ 0.006790f, 0.007076f, 0.007538f, 0.008133f, 0.008644f, 0.009140f, 0.009483f, 0.010071f, 0.010689f, 0.011230f, 0.011879f, 0.012474f,
+ 0.013222f, 0.013916f, 0.014587f, 0.015411f, 0.016190f, 0.016983f, 0.017883f, 0.018845f, 0.019867f, 0.020935f, 0.022141f, 0.023270f,
+ 0.024567f, 0.026001f, 0.027481f, 0.029114f, 0.030777f, 0.032684f, 0.034698f, 0.036865f, 0.039337f, 0.041748f, 0.044647f, 0.047882f,
+ 0.050964f, 0.054260f, 0.058258f, 0.062195f, 0.066528f, 0.070679f, 0.075623f, 0.080505f, 0.085510f, 0.090515f, 0.414307f, 0.472168f,
+ 0.484131f, 0.490234f, 0.492920f, 0.495850f, 0.000484f, 0.001445f, 0.002169f, 0.002569f, 0.002836f, 0.003317f, 0.003569f, 0.003952f,
+ 0.004215f, 0.004623f, 0.004959f, 0.005306f, 0.005592f, 0.005951f, 0.006306f, 0.006737f, 0.007004f, 0.007492f, 0.007942f, 0.008331f,
+ 0.008865f, 0.009270f, 0.009781f, 0.010338f, 0.010887f, 0.011429f, 0.012047f, 0.012726f, 0.013336f, 0.014030f, 0.014771f, 0.015572f,
+ 0.016418f, 0.017258f, 0.018234f, 0.019196f, 0.020279f, 0.021423f, 0.022675f, 0.023987f, 0.025375f, 0.027039f, 0.028702f, 0.030563f,
+ 0.032623f, 0.034698f, 0.037262f, 0.040039f, 0.042664f, 0.046051f, 0.049194f, 0.052948f, 0.057129f, 0.061371f, 0.065613f, 0.070007f,
+ 0.075317f, 0.080200f, 0.402588f, 0.462402f, 0.476807f, 0.482666f, 0.485107f, 0.487061f, 0.000459f, 0.001265f, 0.001572f, 0.002138f,
+ 0.002365f, 0.002775f, 0.002920f, 0.003189f, 0.003454f, 0.003723f, 0.003986f, 0.004250f, 0.004536f, 0.004906f, 0.005150f, 0.005463f,
+ 0.005787f, 0.006172f, 0.006481f, 0.006794f, 0.007156f, 0.007542f, 0.007980f, 0.008430f, 0.008827f, 0.009361f, 0.009796f, 0.010300f,
+ 0.010910f, 0.011497f, 0.012161f, 0.012672f, 0.013336f, 0.014183f, 0.014893f, 0.015640f, 0.016541f, 0.017517f, 0.018448f, 0.019485f,
+ 0.020676f, 0.021912f, 0.023392f, 0.024979f, 0.026627f, 0.028351f, 0.030457f, 0.032806f, 0.035034f, 0.037933f, 0.041229f, 0.044373f,
+ 0.047821f, 0.052002f, 0.056244f, 0.060547f, 0.065247f, 0.069885f, 0.390869f, 0.453857f, 0.468018f, 0.475098f, 0.478027f, 0.480469f,
+ 0.000332f, 0.001075f, 0.001464f, 0.001721f, 0.001911f, 0.002235f, 0.002375f, 0.002558f, 0.002834f, 0.002998f, 0.003185f, 0.003441f,
+ 0.003647f, 0.003952f, 0.004139f, 0.004421f, 0.004631f, 0.004879f, 0.005180f, 0.005447f, 0.005795f, 0.006115f, 0.006416f, 0.006718f,
+ 0.007099f, 0.007462f, 0.007881f, 0.008331f, 0.008797f, 0.009140f, 0.009735f, 0.010223f, 0.010803f, 0.011337f, 0.011986f, 0.012611f,
+ 0.013283f, 0.014076f, 0.014847f, 0.015732f, 0.016693f, 0.017700f, 0.018784f, 0.019897f, 0.021317f, 0.022873f, 0.024429f, 0.026306f,
+ 0.028473f, 0.030960f, 0.033600f, 0.036407f, 0.039856f, 0.043549f, 0.047119f, 0.051392f, 0.055969f, 0.060394f, 0.379639f, 0.444580f,
+ 0.458984f, 0.467529f, 0.470947f, 0.472900f, 0.000408f, 0.000770f, 0.001271f, 0.001390f, 0.001601f, 0.001762f, 0.001848f, 0.002052f,
+ 0.002247f, 0.002401f, 0.002491f, 0.002684f, 0.002878f, 0.003086f, 0.003304f, 0.003452f, 0.003626f, 0.003805f, 0.004074f, 0.004257f,
+ 0.004513f, 0.004807f, 0.005039f, 0.005299f, 0.005638f, 0.005905f, 0.006191f, 0.006516f, 0.006927f, 0.007206f, 0.007645f, 0.008034f,
+ 0.008415f, 0.008911f, 0.009384f, 0.009941f, 0.010483f, 0.011116f, 0.011711f, 0.012428f, 0.013191f, 0.013969f, 0.014862f, 0.015854f,
+ 0.016785f, 0.017975f, 0.019348f, 0.020721f, 0.022461f, 0.024445f, 0.026733f, 0.029175f, 0.032227f, 0.035248f, 0.038788f, 0.042755f,
+ 0.046967f, 0.051636f, 0.367920f, 0.435059f, 0.452148f, 0.459229f, 0.463623f, 0.466797f, 0.000382f, 0.000669f, 0.001037f, 0.001185f,
+ 0.001293f, 0.001379f, 0.001470f, 0.001565f, 0.001729f, 0.001864f, 0.001928f, 0.002138f, 0.002237f, 0.002398f, 0.002510f, 0.002672f,
+ 0.002802f, 0.002966f, 0.003134f, 0.003319f, 0.003517f, 0.003723f, 0.003870f, 0.004089f, 0.004311f, 0.004532f, 0.004772f, 0.005013f,
+ 0.005314f, 0.005573f, 0.005924f, 0.006203f, 0.006523f, 0.006897f, 0.007240f, 0.007660f, 0.008041f, 0.008530f, 0.009048f, 0.009621f,
+ 0.010201f, 0.010841f, 0.011467f, 0.012192f, 0.013138f, 0.013969f, 0.014931f, 0.016113f, 0.017380f, 0.018936f, 0.020630f, 0.022751f,
+ 0.025208f, 0.027924f, 0.031311f, 0.034851f, 0.038879f, 0.043274f, 0.356689f, 0.426270f, 0.443848f, 0.451660f, 0.456055f, 0.459473f,
+ 0.000482f, 0.000542f, 0.000723f, 0.000822f, 0.000881f, 0.001025f, 0.001100f, 0.001209f, 0.001249f, 0.001355f, 0.001522f, 0.001599f,
+ 0.001708f, 0.001836f, 0.001918f, 0.001970f, 0.002129f, 0.002251f, 0.002357f, 0.002522f, 0.002636f, 0.002768f, 0.002911f, 0.003056f,
+ 0.003237f, 0.003393f, 0.003605f, 0.003771f, 0.003994f, 0.004234f, 0.004444f, 0.004635f, 0.004932f, 0.005150f, 0.005486f, 0.005779f,
+ 0.006081f, 0.006458f, 0.006775f, 0.007179f, 0.007668f, 0.008110f, 0.008690f, 0.009209f, 0.009926f, 0.010551f, 0.011330f, 0.012184f,
+ 0.013184f, 0.014297f, 0.015610f, 0.017181f, 0.019165f, 0.021500f, 0.024384f, 0.027618f, 0.031372f, 0.035614f, 0.345459f, 0.417236f,
+ 0.435303f, 0.443604f, 0.448730f, 0.451904f, 0.000240f, 0.000479f, 0.000533f, 0.000625f, 0.000716f, 0.000746f, 0.000857f, 0.000835f,
+ 0.000941f, 0.001024f, 0.001104f, 0.001155f, 0.001204f, 0.001282f, 0.001396f, 0.001453f, 0.001554f, 0.001627f, 0.001737f, 0.001787f,
+ 0.001894f, 0.002012f, 0.002119f, 0.002218f, 0.002335f, 0.002453f, 0.002611f, 0.002714f, 0.002848f, 0.003050f, 0.003168f, 0.003395f,
+ 0.003529f, 0.003740f, 0.003963f, 0.004158f, 0.004429f, 0.004688f, 0.004982f, 0.005280f, 0.005600f, 0.005959f, 0.006340f, 0.006775f,
+ 0.007252f, 0.007748f, 0.008369f, 0.008980f, 0.009705f, 0.010513f, 0.011513f, 0.012665f, 0.014069f, 0.015869f, 0.018158f, 0.020950f,
+ 0.024338f, 0.028366f, 0.335205f, 0.408203f, 0.427002f, 0.435547f, 0.441162f, 0.445312f, 0.000138f, 0.000265f, 0.000381f, 0.000386f,
+ 0.000465f, 0.000556f, 0.000558f, 0.000597f, 0.000659f, 0.000748f, 0.000770f, 0.000786f, 0.000829f, 0.000904f, 0.000940f, 0.001021f,
+ 0.001043f, 0.001139f, 0.001201f, 0.001253f, 0.001327f, 0.001396f, 0.001481f, 0.001555f, 0.001637f, 0.001712f, 0.001813f, 0.001899f,
+ 0.002005f, 0.002140f, 0.002220f, 0.002348f, 0.002462f, 0.002600f, 0.002733f, 0.002932f, 0.003075f, 0.003279f, 0.003452f, 0.003630f,
+ 0.003872f, 0.004166f, 0.004436f, 0.004742f, 0.005077f, 0.005459f, 0.005848f, 0.006310f, 0.006874f, 0.007492f, 0.008171f, 0.009026f,
+ 0.009995f, 0.011307f, 0.013008f, 0.015343f, 0.018265f, 0.021881f, 0.323486f, 0.399170f, 0.418945f, 0.428467f, 0.434326f, 0.437988f,
+ 0.000165f, 0.000260f, 0.000287f, 0.000296f, 0.000331f, 0.000339f, 0.000360f, 0.000395f, 0.000442f, 0.000482f, 0.000487f, 0.000551f,
+ 0.000546f, 0.000611f, 0.000640f, 0.000667f, 0.000711f, 0.000742f, 0.000775f, 0.000816f, 0.000876f, 0.000916f, 0.000974f, 0.001015f,
+ 0.001081f, 0.001123f, 0.001195f, 0.001267f, 0.001317f, 0.001388f, 0.001459f, 0.001558f, 0.001630f, 0.001718f, 0.001804f, 0.001916f,
+ 0.002033f, 0.002148f, 0.002295f, 0.002455f, 0.002583f, 0.002754f, 0.002941f, 0.003134f, 0.003386f, 0.003639f, 0.003910f, 0.004215f,
+ 0.004597f, 0.005013f, 0.005520f, 0.006130f, 0.006821f, 0.007690f, 0.008789f, 0.010452f, 0.012909f, 0.016174f, 0.312012f, 0.390381f,
+ 0.410645f, 0.420654f, 0.426270f, 0.430664f, 0.000057f, 0.000171f, 0.000164f, 0.000170f, 0.000211f, 0.000213f, 0.000229f, 0.000247f,
+ 0.000267f, 0.000279f, 0.000289f, 0.000317f, 0.000349f, 0.000364f, 0.000390f, 0.000407f, 0.000427f, 0.000467f, 0.000476f, 0.000521f,
+ 0.000537f, 0.000561f, 0.000578f, 0.000626f, 0.000667f, 0.000714f, 0.000729f, 0.000753f, 0.000806f, 0.000855f, 0.000911f, 0.000945f,
+ 0.001004f, 0.001054f, 0.001112f, 0.001172f, 0.001251f, 0.001333f, 0.001406f, 0.001489f, 0.001595f, 0.001694f, 0.001811f, 0.001952f,
+ 0.002090f, 0.002243f, 0.002453f, 0.002638f, 0.002888f, 0.003143f, 0.003489f, 0.003870f, 0.004353f, 0.004921f, 0.005672f, 0.006664f,
+ 0.008423f, 0.011230f, 0.301758f, 0.381104f, 0.402832f, 0.413330f, 0.418457f, 0.423828f, 0.000096f, 0.000112f, 0.000097f, 0.000090f,
+ 0.000113f, 0.000119f, 0.000144f, 0.000149f, 0.000151f, 0.000158f, 0.000181f, 0.000184f, 0.000179f, 0.000201f, 0.000224f, 0.000216f,
+ 0.000237f, 0.000255f, 0.000263f, 0.000276f, 0.000297f, 0.000308f, 0.000332f, 0.000347f, 0.000369f, 0.000395f, 0.000408f, 0.000422f,
+ 0.000447f, 0.000471f, 0.000500f, 0.000531f, 0.000554f, 0.000583f, 0.000617f, 0.000660f, 0.000690f, 0.000739f, 0.000795f, 0.000833f,
+ 0.000885f, 0.000948f, 0.001022f, 0.001085f, 0.001175f, 0.001262f, 0.001371f, 0.001487f, 0.001633f, 0.001778f, 0.001986f, 0.002218f,
+ 0.002502f, 0.002865f, 0.003330f, 0.003979f, 0.004932f, 0.007000f, 0.291260f, 0.372070f, 0.394043f, 0.404541f, 0.412109f, 0.416260f,
+ 0.000000f, 0.000056f, 0.000049f, 0.000061f, 0.000064f, 0.000061f, 0.000062f, 0.000071f, 0.000072f, 0.000088f, 0.000083f, 0.000086f,
+ 0.000097f, 0.000094f, 0.000098f, 0.000105f, 0.000116f, 0.000122f, 0.000126f, 0.000134f, 0.000137f, 0.000143f, 0.000150f, 0.000164f,
+ 0.000171f, 0.000183f, 0.000188f, 0.000204f, 0.000214f, 0.000224f, 0.000236f, 0.000255f, 0.000258f, 0.000277f, 0.000293f, 0.000315f,
+ 0.000328f, 0.000349f, 0.000376f, 0.000396f, 0.000426f, 0.000454f, 0.000486f, 0.000521f, 0.000563f, 0.000605f, 0.000657f, 0.000714f,
+ 0.000791f, 0.000866f, 0.000977f, 0.001085f, 0.001243f, 0.001441f, 0.001703f, 0.002058f, 0.002573f, 0.003740f, 0.280029f, 0.362793f,
+ 0.385742f, 0.397217f, 0.404297f, 0.408936f, 0.000058f, 0.000038f, 0.000031f, 0.000027f, 0.000025f, 0.000026f, 0.000025f, 0.000024f,
+ 0.000024f, 0.000027f, 0.000030f, 0.000038f, 0.000032f, 0.000035f, 0.000040f, 0.000041f, 0.000044f, 0.000045f, 0.000045f, 0.000047f,
+ 0.000052f, 0.000058f, 0.000061f, 0.000059f, 0.000065f, 0.000067f, 0.000069f, 0.000073f, 0.000078f, 0.000083f, 0.000089f, 0.000091f,
+ 0.000099f, 0.000103f, 0.000106f, 0.000114f, 0.000124f, 0.000132f, 0.000141f, 0.000150f, 0.000158f, 0.000164f, 0.000180f, 0.000193f,
+ 0.000205f, 0.000225f, 0.000245f, 0.000267f, 0.000297f, 0.000329f, 0.000365f, 0.000416f, 0.000479f, 0.000563f, 0.000676f, 0.000839f,
+ 0.001088f, 0.001589f, 0.270264f, 0.353760f, 0.377197f, 0.390137f, 0.396973f, 0.402100f, 0.000030f, 0.000019f, 0.000016f, 0.000014f,
+ 0.000013f, 0.000012f, 0.000011f, 0.000011f, 0.000010f, 0.000010f, 0.000009f, 0.000009f, 0.000009f, 0.000008f, 0.000007f, 0.000009f,
+ 0.000009f, 0.000008f, 0.000009f, 0.000010f, 0.000011f, 0.000012f, 0.000012f, 0.000014f, 0.000014f, 0.000014f, 0.000015f, 0.000018f,
+ 0.000017f, 0.000017f, 0.000019f, 0.000020f, 0.000022f, 0.000022f, 0.000023f, 0.000026f, 0.000028f, 0.000027f, 0.000030f, 0.000032f,
+ 0.000035f, 0.000038f, 0.000040f, 0.000042f, 0.000045f, 0.000049f, 0.000055f, 0.000060f, 0.000065f, 0.000074f, 0.000078f, 0.000095f,
+ 0.000109f, 0.000129f, 0.000160f, 0.000205f, 0.000284f, 0.000452f, 0.259766f, 0.345703f, 0.369629f, 0.382812f, 0.390625f, 0.395264f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f,
+ 0.000002f, 0.000003f, 0.000003f, 0.000004f, 0.000004f, 0.000005f, 0.000006f, 0.000009f, 0.000012f, 0.000026f, 0.249878f, 0.336182f,
+ 0.362061f, 0.374512f, 0.382080f, 0.387695f,
+ }
+};
+
+/* 4 different blue noise, one per channel */
+static float blue_noise[64 * 64][4] = {
+ {0.367188f, 0.855469f, 0.523438f, 0.375000f}, {0.242188f, 0.699219f, 0.164062f, 0.292969f},
+ {0.828125f, 0.257812f, 0.449219f, 0.679688f}, {0.128906f, 0.523438f, 0.058594f, 0.164062f},
+ {0.214844f, 0.648438f, 0.750000f, 0.492188f}, {0.535156f, 0.226562f, 0.492188f, 0.429688f},
+ {0.050781f, 0.425781f, 0.886719f, 0.019531f}, {0.199219f, 0.785156f, 0.378906f, 0.984375f},
+ {0.390625f, 0.039062f, 0.222656f, 0.777344f}, {0.574219f, 0.460938f, 0.687500f, 0.085938f},
+ {0.757812f, 0.117188f, 0.968750f, 0.343750f}, {0.109375f, 0.398438f, 0.500000f, 0.871094f},
+ {0.871094f, 0.796875f, 0.628906f, 0.132812f}, {0.289062f, 0.480469f, 0.851562f, 0.484375f},
+ {0.519531f, 0.035156f, 0.234375f, 0.832031f}, {0.390625f, 0.558594f, 0.738281f, 0.636719f},
+ {0.015625f, 0.648438f, 0.910156f, 0.507812f}, {0.199219f, 0.257812f, 0.640625f, 0.578125f},
+ {0.359375f, 0.976562f, 0.855469f, 0.726562f}, {0.523438f, 0.445312f, 0.335938f, 0.304688f},
+ {0.046875f, 0.296875f, 0.921875f, 0.687500f}, {0.476562f, 0.929688f, 0.777344f, 0.164062f},
+ {0.726562f, 0.515625f, 0.398438f, 0.781250f}, {0.652344f, 0.156250f, 0.191406f, 0.015625f},
+ {0.300781f, 0.695312f, 0.011719f, 0.417969f}, {0.433594f, 0.882812f, 0.738281f, 0.843750f},
+ {0.890625f, 0.308594f, 0.523438f, 0.496094f}, {0.589844f, 0.730469f, 0.050781f, 0.886719f},
+ {0.738281f, 0.539062f, 0.683594f, 0.640625f}, {0.421875f, 0.191406f, 0.265625f, 0.996094f},
+ {0.609375f, 0.339844f, 0.617188f, 0.066406f}, {0.371094f, 0.398438f, 0.378906f, 0.898438f},
+ {0.937500f, 0.578125f, 0.136719f, 0.136719f}, {0.453125f, 0.820312f, 0.664062f, 0.968750f},
+ {0.828125f, 0.070312f, 0.316406f, 0.328125f}, {0.558594f, 0.714844f, 0.593750f, 0.714844f},
+ {0.351562f, 0.781250f, 0.355469f, 0.804688f}, {0.203125f, 0.398438f, 0.214844f, 0.519531f},
+ {0.785156f, 0.207031f, 0.398438f, 0.453125f}, {0.617188f, 0.289062f, 0.281250f, 0.257812f},
+ {0.171875f, 0.609375f, 0.792969f, 0.027344f}, {0.539062f, 0.871094f, 0.007812f, 0.886719f},
+ {0.019531f, 0.246094f, 0.226562f, 0.363281f}, {0.988281f, 0.582031f, 0.777344f, 0.054688f},
+ {0.468750f, 0.933594f, 0.312500f, 0.246094f}, {0.218750f, 0.015625f, 0.851562f, 0.167969f},
+ {0.566406f, 0.699219f, 0.519531f, 0.902344f}, {0.125000f, 0.507812f, 0.136719f, 0.386719f},
+ {0.296875f, 0.812500f, 0.558594f, 0.203125f}, {0.402344f, 0.199219f, 0.058594f, 0.875000f},
+ {0.898438f, 0.386719f, 0.664062f, 0.660156f}, {0.027344f, 0.078125f, 0.296875f, 0.453125f},
+ {0.667969f, 0.828125f, 0.808594f, 0.171875f}, {0.257812f, 0.535156f, 0.464844f, 0.914062f},
+ {0.597656f, 0.363281f, 0.886719f, 0.718750f}, {0.332031f, 0.042969f, 0.683594f, 0.003906f},
+ {0.632812f, 0.480469f, 0.429688f, 0.425781f}, {0.226562f, 0.910156f, 0.566406f, 0.558594f},
+ {0.496094f, 0.062500f, 0.863281f, 0.226562f}, {0.105469f, 0.976562f, 0.707031f, 0.941406f},
+ {0.394531f, 0.203125f, 0.285156f, 0.277344f}, {0.003906f, 0.804688f, 0.781250f, 0.050781f},
+ {0.210938f, 0.289062f, 0.117188f, 0.601562f}, {0.972656f, 0.179688f, 0.589844f, 0.144531f},
+ {0.152344f, 0.359375f, 0.730469f, 0.449219f}, {0.765625f, 0.105469f, 0.292969f, 0.101562f},
+ {0.519531f, 0.812500f, 0.617188f, 0.976562f}, {0.988281f, 0.960938f, 0.902344f, 0.054688f},
+ {0.457031f, 0.738281f, 0.335938f, 0.875000f}, {0.871094f, 0.121094f, 0.195312f, 0.210938f},
+ {0.781250f, 0.296875f, 0.539062f, 0.585938f}, {0.636719f, 0.667969f, 0.621094f, 0.328125f},
+ {0.324219f, 0.929688f, 0.855469f, 0.148438f}, {0.984375f, 0.718750f, 0.421875f, 0.824219f},
+ {0.500000f, 0.308594f, 0.757812f, 0.699219f}, {0.664062f, 0.214844f, 0.269531f, 0.558594f},
+ {0.414062f, 0.984375f, 0.074219f, 0.757812f}, {0.589844f, 0.339844f, 0.925781f, 0.273438f},
+ {0.089844f, 0.847656f, 0.316406f, 0.398438f}, {0.695312f, 0.921875f, 0.460938f, 0.890625f},
+ {0.894531f, 0.093750f, 0.113281f, 0.347656f}, {0.562500f, 0.386719f, 0.289062f, 0.964844f},
+ {0.121094f, 0.820312f, 0.003906f, 0.214844f}, {0.765625f, 0.187500f, 0.710938f, 0.914062f},
+ {0.878906f, 0.773438f, 0.445312f, 0.078125f}, {0.218750f, 0.117188f, 0.613281f, 0.617188f},
+ {0.085938f, 0.652344f, 0.996094f, 0.339844f}, {0.863281f, 0.359375f, 0.496094f, 0.531250f},
+ {0.148438f, 0.437500f, 0.320312f, 0.695312f}, {0.503906f, 0.613281f, 0.792969f, 0.082031f},
+ {0.097656f, 0.109375f, 0.960938f, 0.238281f}, {0.246094f, 0.914062f, 0.414062f, 0.328125f},
+ {0.011719f, 0.648438f, 0.828125f, 0.738281f}, {0.980469f, 0.457031f, 0.343750f, 0.117188f},
+ {0.140625f, 0.937500f, 0.976562f, 0.601562f}, {0.234375f, 0.867188f, 0.574219f, 0.230469f},
+ {0.542969f, 0.519531f, 0.902344f, 0.402344f}, {0.027344f, 0.300781f, 0.253906f, 0.503906f},
+ {0.757812f, 0.964844f, 0.949219f, 0.058594f}, {0.152344f, 0.234375f, 0.039062f, 0.925781f},
+ {0.687500f, 0.628906f, 0.492188f, 0.386719f}, {0.929688f, 0.546875f, 0.667969f, 0.109375f},
+ {0.269531f, 0.136719f, 0.964844f, 0.617188f}, {0.320312f, 0.464844f, 0.542969f, 0.972656f},
+ {0.960938f, 0.960938f, 0.171875f, 0.093750f}, {0.355469f, 0.523438f, 0.429688f, 0.765625f},
+ {0.246094f, 0.328125f, 0.992188f, 0.496094f}, {0.648438f, 0.074219f, 0.097656f, 0.605469f},
+ {0.144531f, 0.648438f, 0.476562f, 0.808594f}, {0.855469f, 0.832031f, 0.195312f, 0.546875f},
+ {0.925781f, 0.414062f, 0.960938f, 0.675781f}, {0.000000f, 0.113281f, 0.746094f, 0.835938f},
+ {0.828125f, 0.324219f, 0.613281f, 0.500000f}, {0.699219f, 0.738281f, 0.332031f, 0.125000f},
+ {0.542969f, 0.906250f, 0.898438f, 0.250000f}, {0.105469f, 0.632812f, 0.511719f, 0.062500f},
+ {0.433594f, 0.273438f, 0.097656f, 0.816406f}, {0.511719f, 0.707031f, 0.593750f, 0.632812f},
+ {0.179688f, 0.980469f, 0.367188f, 0.335938f}, {0.882812f, 0.113281f, 0.031250f, 0.980469f},
+ {0.410156f, 0.656250f, 0.253906f, 0.675781f}, {0.039062f, 0.300781f, 0.785156f, 0.800781f},
+ {0.695312f, 0.382812f, 0.386719f, 0.156250f}, {0.847656f, 0.457031f, 0.000000f, 0.847656f},
+ {0.945312f, 0.542969f, 0.664062f, 0.683594f}, {0.730469f, 0.707031f, 0.238281f, 0.535156f},
+ {0.472656f, 0.921875f, 0.871094f, 0.910156f}, {0.867188f, 0.601562f, 0.031250f, 0.812500f},
+ {0.632812f, 0.769531f, 0.925781f, 0.625000f}, {0.433594f, 0.558594f, 0.078125f, 0.851562f},
+ {0.015625f, 0.187500f, 0.792969f, 0.515625f}, {0.343750f, 0.386719f, 0.562500f, 0.773438f},
+ {0.679688f, 0.035156f, 0.121094f, 0.347656f}, {0.300781f, 0.582031f, 0.703125f, 0.660156f},
+ {0.152344f, 0.878906f, 0.929688f, 0.902344f}, {0.433594f, 0.507812f, 0.093750f, 0.460938f},
+ {0.714844f, 0.171875f, 0.042969f, 0.531250f}, {0.828125f, 0.550781f, 0.312500f, 0.945312f},
+ {0.011719f, 0.894531f, 0.136719f, 0.417969f}, {0.257812f, 0.046875f, 0.562500f, 0.226562f},
+ {0.187500f, 0.601562f, 0.800781f, 0.929688f}, {0.949219f, 0.128906f, 0.437500f, 0.613281f},
+ {0.816406f, 0.277344f, 0.054688f, 0.035156f}, {0.226562f, 0.425781f, 0.542969f, 0.183594f},
+ {0.628906f, 0.750000f, 0.984375f, 0.113281f}, {0.839844f, 0.003906f, 0.792969f, 0.796875f},
+ {0.269531f, 0.324219f, 0.496094f, 0.003906f}, {0.683594f, 0.601562f, 0.574219f, 0.546875f},
+ {0.957031f, 0.703125f, 0.164062f, 0.378906f}, {0.605469f, 0.398438f, 0.078125f, 0.855469f},
+ {0.449219f, 0.250000f, 0.257812f, 0.988281f}, {0.367188f, 0.964844f, 0.859375f, 0.195312f},
+ {0.820312f, 0.007812f, 0.125000f, 0.753906f}, {0.625000f, 0.832031f, 0.453125f, 0.609375f},
+ {0.929688f, 0.230469f, 0.246094f, 0.925781f}, {0.394531f, 0.375000f, 0.097656f, 0.550781f},
+ {0.558594f, 0.148438f, 0.183594f, 0.191406f}, {0.480469f, 0.796875f, 0.488281f, 0.785156f},
+ {0.714844f, 0.250000f, 0.011719f, 0.296875f}, {0.660156f, 0.085938f, 0.804688f, 0.691406f},
+ {0.890625f, 0.695312f, 0.101562f, 0.855469f}, {0.320312f, 0.195312f, 0.441406f, 0.761719f},
+ {0.265625f, 0.375000f, 0.765625f, 0.191406f}, {0.996094f, 0.113281f, 0.832031f, 0.585938f},
+ {0.101562f, 0.882812f, 0.152344f, 0.285156f}, {0.468750f, 0.332031f, 0.722656f, 0.882812f},
+ {0.656250f, 0.816406f, 0.105469f, 0.339844f}, {0.035156f, 0.703125f, 0.855469f, 0.687500f},
+ {0.738281f, 0.003906f, 0.601562f, 0.566406f}, {0.441406f, 0.664062f, 0.703125f, 0.843750f},
+ {0.875000f, 0.789062f, 0.839844f, 0.187500f}, {0.781250f, 0.457031f, 0.640625f, 0.996094f},
+ {0.050781f, 0.210938f, 0.355469f, 0.332031f}, {0.363281f, 0.351562f, 0.039062f, 0.421875f},
+ {0.429688f, 0.550781f, 0.699219f, 0.089844f}, {0.753906f, 0.917969f, 0.269531f, 0.285156f},
+ {0.496094f, 0.058594f, 0.929688f, 0.980469f}, {0.343750f, 0.445312f, 0.445312f, 0.566406f},
+ {0.152344f, 0.160156f, 0.003906f, 0.750000f}, {0.738281f, 0.570312f, 0.847656f, 0.941406f},
+ {0.808594f, 0.027344f, 0.167969f, 0.292969f}, {0.992188f, 0.867188f, 0.921875f, 0.519531f},
+ {0.074219f, 0.187500f, 0.761719f, 0.199219f}, {0.750000f, 0.597656f, 0.312500f, 0.472656f},
+ {0.277344f, 0.753906f, 0.945312f, 0.089844f}, {0.796875f, 0.820312f, 0.511719f, 0.375000f},
+ {0.542969f, 0.878906f, 0.191406f, 0.503906f}, {0.175781f, 0.632812f, 0.597656f, 0.109375f},
+ {0.257812f, 0.335938f, 0.980469f, 0.339844f}, {0.664062f, 0.000000f, 0.542969f, 0.417969f},
+ {0.324219f, 0.144531f, 0.410156f, 0.078125f}, {0.062500f, 0.437500f, 0.472656f, 0.250000f},
+ {0.925781f, 0.058594f, 0.636719f, 0.332031f}, {0.269531f, 0.671875f, 0.234375f, 0.175781f},
+ {0.714844f, 0.285156f, 0.382812f, 0.574219f}, {0.570312f, 0.906250f, 0.988281f, 0.414062f},
+ {0.097656f, 0.460938f, 0.425781f, 0.257812f}, {0.953125f, 0.796875f, 0.265625f, 0.117188f},
+ {0.589844f, 0.367188f, 0.777344f, 0.746094f}, {0.035156f, 0.082031f, 0.457031f, 0.062500f},
+ {0.226562f, 0.253906f, 0.953125f, 0.628906f}, {0.527344f, 0.417969f, 0.519531f, 0.261719f},
+ {0.132812f, 0.812500f, 0.828125f, 0.000000f}, {0.906250f, 0.660156f, 0.386719f, 0.367188f},
+ {0.742188f, 0.500000f, 0.207031f, 0.093750f}, {0.359375f, 0.769531f, 0.609375f, 0.718750f},
+ {0.480469f, 0.695312f, 0.679688f, 0.539062f}, {0.144531f, 0.179688f, 0.757812f, 0.765625f},
+ {0.332031f, 0.625000f, 0.179688f, 0.679688f}, {0.445312f, 0.492188f, 0.378906f, 0.425781f},
+ {0.035156f, 0.550781f, 0.230469f, 0.476562f}, {0.402344f, 0.898438f, 0.898438f, 0.652344f},
+ {0.156250f, 0.046875f, 0.820312f, 0.132812f}, {0.328125f, 0.484375f, 0.679688f, 0.246094f},
+ {0.746094f, 0.750000f, 0.363281f, 0.453125f}, {0.238281f, 0.863281f, 0.558594f, 0.105469f},
+ {0.023438f, 0.289062f, 0.648438f, 0.292969f}, {0.683594f, 0.566406f, 0.906250f, 0.804688f},
+ {0.335938f, 0.773438f, 0.601562f, 0.375000f}, {0.781250f, 0.496094f, 0.710938f, 0.023438f},
+ {0.847656f, 0.996094f, 0.929688f, 0.425781f}, {0.308594f, 0.027344f, 0.656250f, 0.871094f},
+ {0.183594f, 0.625000f, 0.292969f, 0.480469f}, {0.089844f, 0.753906f, 0.164062f, 0.363281f},
+ {0.804688f, 0.476562f, 0.687500f, 0.011719f}, {0.503906f, 0.910156f, 0.523438f, 0.644531f},
+ {0.605469f, 0.609375f, 0.203125f, 0.441406f}, {0.417969f, 0.742188f, 0.621094f, 0.085938f},
+ {0.839844f, 0.441406f, 0.296875f, 0.679688f}, {0.531250f, 0.042969f, 0.929688f, 0.781250f},
+ {0.378906f, 0.929688f, 0.460938f, 0.148438f}, {0.902344f, 0.238281f, 0.050781f, 0.222656f},
+ {0.570312f, 0.378906f, 0.328125f, 0.390625f}, {0.105469f, 0.121094f, 0.253906f, 0.460938f},
+ {0.500000f, 0.906250f, 0.515625f, 0.281250f}, {0.296875f, 0.160156f, 0.148438f, 0.664062f},
+ {0.699219f, 0.722656f, 0.757812f, 0.007812f}, {0.539062f, 0.968750f, 0.589844f, 0.914062f},
+ {0.253906f, 0.246094f, 0.406250f, 0.769531f}, {0.609375f, 0.613281f, 0.105469f, 0.707031f},
+ {0.195312f, 0.687500f, 0.179688f, 0.031250f}, {0.949219f, 0.523438f, 0.785156f, 0.339844f},
+ {0.863281f, 0.804688f, 0.234375f, 0.433594f}, {0.230469f, 0.355469f, 0.648438f, 0.687500f},
+ {0.304688f, 0.757812f, 0.421875f, 0.378906f}, {0.375000f, 0.464844f, 0.539062f, 0.046875f},
+ {0.558594f, 0.324219f, 0.214844f, 0.761719f}, {0.679688f, 0.410156f, 0.074219f, 0.839844f},
+ {0.464844f, 0.519531f, 0.710938f, 0.281250f}, {0.968750f, 0.152344f, 0.140625f, 0.925781f},
+ {0.359375f, 0.230469f, 0.902344f, 0.609375f}, {0.593750f, 0.097656f, 0.457031f, 0.761719f},
+ {0.441406f, 0.785156f, 0.058594f, 0.960938f}, {0.125000f, 0.890625f, 0.312500f, 0.203125f},
+ {0.812500f, 0.488281f, 0.804688f, 0.878906f}, {0.558594f, 0.992188f, 0.175781f, 0.742188f},
+ {0.179688f, 0.222656f, 0.343750f, 0.039062f}, {0.789062f, 0.871094f, 0.843750f, 0.949219f},
+ {0.902344f, 0.503906f, 0.507812f, 0.718750f}, {0.402344f, 0.625000f, 0.027344f, 0.011719f},
+ {0.195312f, 0.152344f, 0.605469f, 0.929688f}, {0.753906f, 0.214844f, 0.160156f, 0.839844f},
+ {0.488281f, 0.687500f, 0.671875f, 0.390625f}, {0.851562f, 0.992188f, 0.363281f, 0.191406f},
+ {0.933594f, 0.617188f, 0.230469f, 0.308594f}, {0.375000f, 0.746094f, 0.656250f, 0.867188f},
+ {0.613281f, 0.105469f, 0.898438f, 0.671875f}, {0.316406f, 0.371094f, 0.714844f, 0.503906f},
+ {0.687500f, 0.234375f, 0.031250f, 0.808594f}, {0.550781f, 0.957031f, 0.957031f, 0.433594f},
+ {0.023438f, 0.539062f, 0.351562f, 0.308594f}, {0.964844f, 0.359375f, 0.261719f, 0.980469f},
+ {0.750000f, 0.941406f, 0.863281f, 0.234375f}, {0.906250f, 0.863281f, 0.605469f, 0.863281f},
+ {0.503906f, 0.109375f, 0.093750f, 0.289062f}, {0.582031f, 0.238281f, 0.414062f, 0.949219f},
+ {0.792969f, 0.992188f, 0.308594f, 0.757812f}, {0.062500f, 0.164062f, 0.039062f, 0.816406f},
+ {0.902344f, 0.542969f, 0.933594f, 0.675781f}, {0.554688f, 0.085938f, 0.726562f, 0.507812f},
+ {0.984375f, 0.460938f, 0.175781f, 0.890625f}, {0.468750f, 0.179688f, 0.027344f, 0.140625f},
+ {0.125000f, 0.679688f, 0.304688f, 0.468750f}, {0.203125f, 0.058594f, 0.531250f, 0.953125f},
+ {0.070312f, 0.328125f, 0.375000f, 0.667969f}, {0.746094f, 0.554688f, 0.785156f, 0.578125f},
+ {0.917969f, 0.421875f, 0.558594f, 0.089844f}, {0.445312f, 0.289062f, 0.855469f, 0.937500f},
+ {0.378906f, 0.156250f, 0.398438f, 0.539062f}, {0.066406f, 0.015625f, 0.335938f, 0.265625f},
+ {0.730469f, 0.812500f, 0.878906f, 0.820312f}, {0.191406f, 0.535156f, 0.015625f, 0.988281f},
+ {0.046875f, 0.171875f, 0.554688f, 0.484375f}, {0.777344f, 0.656250f, 0.375000f, 0.015625f},
+ {0.230469f, 0.488281f, 0.238281f, 0.535156f}, {0.144531f, 0.578125f, 0.750000f, 0.910156f},
+ {0.812500f, 0.757812f, 0.910156f, 0.714844f}, {0.207031f, 0.429688f, 0.386719f, 0.042969f},
+ {0.945312f, 0.292969f, 0.023438f, 0.136719f}, {0.597656f, 0.859375f, 0.941406f, 0.742188f},
+ {0.171875f, 0.593750f, 0.289062f, 0.519531f}, {0.914062f, 0.031250f, 0.886719f, 0.234375f},
+ {0.808594f, 0.773438f, 0.824219f, 0.160156f}, {0.082031f, 0.132812f, 0.496094f, 0.464844f},
+ {0.664062f, 0.871094f, 0.675781f, 0.597656f}, {0.042969f, 0.289062f, 0.546875f, 0.195312f},
+ {0.453125f, 0.996094f, 0.363281f, 0.859375f}, {0.585938f, 0.226562f, 0.718750f, 0.140625f},
+ {0.648438f, 0.093750f, 0.277344f, 0.609375f}, {0.035156f, 0.933594f, 0.980469f, 0.898438f},
+ {0.910156f, 0.671875f, 0.625000f, 0.410156f}, {0.210938f, 0.246094f, 0.472656f, 0.578125f},
+ {0.136719f, 0.960938f, 0.832031f, 0.031250f}, {0.066406f, 0.054688f, 0.656250f, 0.660156f},
+ {0.898438f, 0.714844f, 0.347656f, 0.218750f}, {0.765625f, 0.589844f, 0.820312f, 0.449219f},
+ {0.023438f, 0.398438f, 0.734375f, 0.011719f}, {0.960938f, 0.253906f, 0.132812f, 0.582031f},
+ {0.378906f, 0.644531f, 0.945312f, 0.480469f}, {0.496094f, 0.320312f, 0.683594f, 0.656250f},
+ {0.085938f, 0.722656f, 0.105469f, 0.386719f}, {0.316406f, 0.414062f, 0.753906f, 0.226562f},
+ {0.046875f, 0.011719f, 0.199219f, 0.464844f}, {0.621094f, 0.968750f, 0.714844f, 0.300781f},
+ {0.878906f, 0.726562f, 0.863281f, 0.593750f}, {0.257812f, 0.312500f, 0.324219f, 0.523438f},
+ {0.347656f, 0.835938f, 0.816406f, 0.687500f}, {0.074219f, 0.480469f, 0.000000f, 0.972656f},
+ {0.656250f, 0.007812f, 0.578125f, 0.785156f}, {0.792969f, 0.914062f, 0.152344f, 0.570312f},
+ {0.464844f, 0.292969f, 0.292969f, 0.152344f}, {0.863281f, 0.843750f, 0.101562f, 0.957031f},
+ {0.066406f, 0.449219f, 0.484375f, 0.199219f}, {0.437500f, 0.019531f, 0.878906f, 0.886719f},
+ {0.800781f, 0.074219f, 0.132812f, 0.136719f}, {0.296875f, 0.800781f, 0.511719f, 0.488281f},
+ {0.656250f, 0.253906f, 0.019531f, 0.371094f}, {0.101562f, 0.148438f, 0.726562f, 0.609375f},
+ {0.203125f, 0.664062f, 0.660156f, 0.089844f}, {0.976562f, 0.437500f, 0.972656f, 0.175781f},
+ {0.289062f, 0.781250f, 0.765625f, 0.578125f}, {0.660156f, 0.343750f, 0.519531f, 0.312500f},
+ {0.507812f, 0.625000f, 0.441406f, 0.019531f}, {0.175781f, 0.933594f, 0.230469f, 0.394531f},
+ {0.796875f, 0.722656f, 0.824219f, 0.570312f}, {0.277344f, 0.410156f, 0.406250f, 0.226562f},
+ {0.597656f, 0.949219f, 0.761719f, 0.707031f}, {0.949219f, 0.609375f, 0.882812f, 0.070312f},
+ {0.519531f, 0.859375f, 0.128906f, 0.273438f}, {0.632812f, 0.203125f, 0.042969f, 0.156250f},
+ {0.265625f, 0.890625f, 0.449219f, 0.812500f}, {0.585938f, 0.664062f, 0.230469f, 0.210938f},
+ {0.968750f, 0.960938f, 0.742188f, 0.726562f}, {0.226562f, 0.339844f, 0.992188f, 0.117188f},
+ {0.875000f, 0.410156f, 0.093750f, 0.894531f}, {0.640625f, 0.261719f, 0.710938f, 0.324219f},
+ {0.917969f, 0.980469f, 0.425781f, 0.234375f}, {0.308594f, 0.300781f, 0.804688f, 0.628906f},
+ {0.589844f, 0.105469f, 0.648438f, 0.421875f}, {0.714844f, 0.847656f, 0.125000f, 0.808594f},
+ {0.406250f, 0.187500f, 0.480469f, 0.300781f}, {0.667969f, 0.992188f, 0.679688f, 0.960938f},
+ {0.070312f, 0.542969f, 0.800781f, 0.859375f}, {0.835938f, 0.082031f, 0.554688f, 0.578125f},
+ {0.398438f, 0.496094f, 0.449219f, 0.402344f}, {0.113281f, 0.398438f, 0.222656f, 0.828125f},
+ {0.460938f, 0.308594f, 0.054688f, 0.625000f}, {0.976562f, 0.472656f, 0.984375f, 0.375000f},
+ {0.281250f, 0.203125f, 0.312500f, 0.937500f}, {0.386719f, 0.000000f, 0.875000f, 0.785156f},
+ {0.785156f, 0.402344f, 0.078125f, 0.527344f}, {0.117188f, 0.644531f, 0.812500f, 0.082031f},
+ {0.941406f, 0.503906f, 0.132812f, 0.972656f}, {0.488281f, 0.140625f, 0.023438f, 0.238281f},
+ {0.832031f, 0.843750f, 0.859375f, 0.167969f}, {0.335938f, 0.011719f, 0.382812f, 0.730469f},
+ {0.628906f, 0.777344f, 0.570312f, 0.875000f}, {0.527344f, 0.355469f, 0.285156f, 0.132812f},
+ {0.234375f, 0.472656f, 0.093750f, 0.312500f}, {0.308594f, 0.941406f, 0.214844f, 0.820312f},
+ {0.640625f, 0.164062f, 0.628906f, 0.714844f}, {0.871094f, 0.832031f, 0.390625f, 0.156250f},
+ {0.218750f, 0.531250f, 0.265625f, 0.289062f}, {0.699219f, 0.117188f, 0.550781f, 0.796875f},
+ {0.980469f, 0.578125f, 0.890625f, 0.125000f}, {0.523438f, 0.824219f, 0.460938f, 0.890625f},
+ {0.445312f, 0.347656f, 0.285156f, 0.675781f}, {0.816406f, 0.097656f, 0.949219f, 0.781250f},
+ {0.140625f, 0.550781f, 0.089844f, 0.160156f}, {0.675781f, 0.421875f, 0.484375f, 0.074219f},
+ {0.542969f, 0.062500f, 0.535156f, 0.230469f}, {0.421875f, 0.570312f, 0.886719f, 0.484375f},
+ {0.167969f, 0.339844f, 0.734375f, 0.035156f}, {0.277344f, 0.199219f, 0.425781f, 0.441406f},
+ {0.093750f, 0.527344f, 0.996094f, 0.714844f}, {0.214844f, 0.148438f, 0.632812f, 0.335938f},
+ {0.941406f, 0.585938f, 0.242188f, 0.593750f}, {0.160156f, 0.886719f, 0.410156f, 0.652344f},
+ {0.597656f, 0.679688f, 0.812500f, 0.019531f}, {0.242188f, 0.312500f, 0.585938f, 0.562500f},
+ {0.531250f, 0.460938f, 0.937500f, 0.921875f}, {0.375000f, 0.734375f, 0.328125f, 0.054688f},
+ {0.703125f, 0.382812f, 0.472656f, 0.734375f}, {0.824219f, 0.835938f, 0.140625f, 0.519531f},
+ {0.441406f, 0.289062f, 0.203125f, 0.414062f}, {0.121094f, 0.691406f, 0.628906f, 0.925781f},
+ {0.378906f, 0.019531f, 0.105469f, 0.082031f}, {0.714844f, 0.222656f, 0.347656f, 0.734375f},
+ {0.046875f, 0.816406f, 0.968750f, 0.976562f}, {0.421875f, 0.320312f, 0.078125f, 0.628906f},
+ {0.871094f, 0.097656f, 0.484375f, 0.835938f}, {0.695312f, 0.265625f, 0.207031f, 0.332031f},
+ {0.351562f, 0.718750f, 0.273438f, 0.761719f}, {0.406250f, 0.382812f, 0.957031f, 0.511719f},
+ {0.042969f, 0.785156f, 0.628906f, 0.980469f}, {0.832031f, 0.117188f, 0.910156f, 0.343750f},
+ {0.144531f, 0.500000f, 0.058594f, 0.421875f}, {0.699219f, 0.843750f, 0.589844f, 0.601562f},
+ {0.546875f, 0.574219f, 0.488281f, 0.164062f}, {0.363281f, 0.054688f, 0.265625f, 0.390625f},
+ {0.128906f, 0.785156f, 0.949219f, 0.746094f}, {0.492188f, 0.691406f, 0.175781f, 0.949219f},
+ {0.972656f, 0.902344f, 0.894531f, 0.183594f}, {0.027344f, 0.359375f, 0.570312f, 0.070312f},
+ {0.273438f, 0.062500f, 0.207031f, 0.500000f}, {0.472656f, 0.730469f, 0.972656f, 0.613281f},
+ {0.351562f, 0.640625f, 0.089844f, 0.363281f}, {0.742188f, 0.226562f, 0.187500f, 0.195312f},
+ {0.234375f, 0.699219f, 0.730469f, 0.945312f}, {0.625000f, 0.945312f, 0.636719f, 0.082031f},
+ {0.328125f, 0.839844f, 0.378906f, 0.312500f}, {0.707031f, 0.652344f, 0.574219f, 0.875000f},
+ {0.566406f, 0.742188f, 0.148438f, 0.050781f}, {0.882812f, 0.921875f, 0.460938f, 0.246094f},
+ {0.519531f, 0.585938f, 0.917969f, 0.656250f}, {0.730469f, 0.718750f, 0.597656f, 0.316406f},
+ {0.261719f, 0.808594f, 0.500000f, 0.460938f}, {0.171875f, 0.285156f, 0.324219f, 0.796875f},
+ {0.773438f, 0.562500f, 0.746094f, 0.546875f}, {0.433594f, 0.429688f, 0.183594f, 0.343750f},
+ {0.726562f, 0.628906f, 0.050781f, 0.488281f}, {0.859375f, 0.898438f, 0.972656f, 0.996094f},
+ {0.402344f, 0.542969f, 0.429688f, 0.402344f}, {0.101562f, 0.304688f, 0.535156f, 0.542969f},
+ {0.476562f, 0.675781f, 0.863281f, 0.902344f}, {0.734375f, 0.035156f, 0.488281f, 0.359375f},
+ {0.289062f, 0.761719f, 0.773438f, 0.976562f}, {0.589844f, 0.949219f, 0.007812f, 0.519531f},
+ {0.843750f, 0.269531f, 0.417969f, 0.835938f}, {0.664062f, 0.183594f, 0.144531f, 0.554688f},
+ {0.226562f, 0.652344f, 0.656250f, 0.085938f}, {0.367188f, 0.789062f, 0.562500f, 0.957031f},
+ {0.972656f, 0.238281f, 0.394531f, 0.433594f}, {0.000000f, 0.894531f, 0.207031f, 0.644531f},
+ {0.777344f, 0.136719f, 0.968750f, 0.820312f}, {0.910156f, 0.949219f, 0.261719f, 0.355469f},
+ {0.722656f, 0.785156f, 0.070312f, 0.917969f}, {0.996094f, 0.707031f, 0.792969f, 0.105469f},
+ {0.562500f, 0.644531f, 0.511719f, 0.246094f}, {0.648438f, 0.937500f, 0.335938f, 0.851562f},
+ {0.398438f, 0.738281f, 0.777344f, 0.078125f}, {0.832031f, 0.410156f, 0.695312f, 0.285156f},
+ {0.722656f, 0.210938f, 0.167969f, 0.785156f}, {0.042969f, 0.609375f, 0.296875f, 0.214844f},
+ {0.863281f, 0.976562f, 0.441406f, 0.824219f}, {0.167969f, 0.027344f, 0.066406f, 0.664062f},
+ {0.609375f, 0.562500f, 0.828125f, 0.347656f}, {0.000000f, 0.191406f, 0.562500f, 0.839844f},
+ {0.250000f, 0.070312f, 0.281250f, 0.207031f}, {0.875000f, 0.875000f, 0.917969f, 0.644531f},
+ {0.941406f, 0.523438f, 0.781250f, 0.867188f}, {0.617188f, 0.378906f, 0.687500f, 0.343750f},
+ {0.316406f, 0.132812f, 0.546875f, 0.171875f}, {0.542969f, 0.574219f, 0.609375f, 0.101562f},
+ {0.230469f, 0.484375f, 0.851562f, 0.433594f}, {0.007812f, 0.828125f, 0.671875f, 0.910156f},
+ {0.160156f, 0.160156f, 0.734375f, 0.605469f}, {0.890625f, 0.527344f, 0.351562f, 0.394531f},
+ {0.757812f, 0.042969f, 0.511719f, 0.039062f}, {0.507812f, 0.593750f, 0.144531f, 0.640625f},
+ {0.335938f, 0.238281f, 0.316406f, 0.781250f}, {0.464844f, 0.726562f, 0.191406f, 0.500000f},
+ {0.000000f, 0.093750f, 0.667969f, 0.707031f}, {0.273438f, 0.636719f, 0.843750f, 0.031250f},
+ {0.746094f, 0.210938f, 0.101562f, 0.570312f}, {0.437500f, 0.421875f, 0.343750f, 0.832031f},
+ {0.625000f, 0.519531f, 0.027344f, 0.355469f}, {0.824219f, 0.613281f, 0.777344f, 0.667969f},
+ {0.886719f, 0.261719f, 0.296875f, 0.121094f}, {0.554688f, 0.476562f, 0.609375f, 0.777344f},
+ {0.992188f, 0.328125f, 0.417969f, 0.253906f}, {0.007812f, 0.812500f, 0.339844f, 0.050781f},
+ {0.519531f, 0.371094f, 0.921875f, 0.476562f}, {0.867188f, 0.167969f, 0.121094f, 0.660156f},
+ {0.773438f, 0.054688f, 0.789062f, 0.718750f}, {0.066406f, 0.535156f, 0.253906f, 0.128906f},
+ {0.156250f, 0.343750f, 0.753906f, 0.503906f}, {0.218750f, 0.437500f, 0.027344f, 0.410156f},
+ {0.347656f, 0.070312f, 0.398438f, 0.839844f}, {0.019531f, 0.175781f, 0.222656f, 0.714844f},
+ {0.410156f, 0.375000f, 0.953125f, 0.011719f}, {0.605469f, 0.886719f, 0.652344f, 0.640625f},
+ {0.093750f, 0.082031f, 0.414062f, 0.097656f}, {0.289062f, 0.707031f, 0.886719f, 0.269531f},
+ {0.003906f, 0.195312f, 0.242188f, 0.691406f}, {0.980469f, 0.261719f, 0.781250f, 0.070312f},
+ {0.671875f, 0.070312f, 0.722656f, 0.621094f}, {0.820312f, 0.851562f, 0.914062f, 0.250000f},
+ {0.550781f, 0.429688f, 0.164062f, 0.097656f}, {0.140625f, 0.210938f, 0.082031f, 0.671875f},
+ {0.042969f, 0.367188f, 0.996094f, 0.054688f}, {0.394531f, 0.457031f, 0.605469f, 0.613281f},
+ {0.164062f, 0.695312f, 0.312500f, 0.417969f}, {0.109375f, 0.132812f, 0.929688f, 0.320312f},
+ {0.734375f, 0.937500f, 0.800781f, 0.207031f}, {0.578125f, 0.476562f, 0.039062f, 0.367188f},
+ {0.500000f, 0.382812f, 0.761719f, 0.859375f}, {0.304688f, 0.750000f, 0.628906f, 0.273438f},
+ {0.207031f, 0.617188f, 0.121094f, 0.730469f}, {0.597656f, 0.269531f, 0.683594f, 0.140625f},
+ {0.324219f, 0.445312f, 0.371094f, 0.613281f}, {0.027344f, 0.386719f, 0.187500f, 0.761719f},
+ {0.507812f, 0.093750f, 0.597656f, 0.546875f}, {0.769531f, 0.250000f, 0.015625f, 0.386719f},
+ {0.265625f, 0.335938f, 0.914062f, 0.472656f}, {0.335938f, 0.113281f, 0.539062f, 0.972656f},
+ {0.496094f, 0.828125f, 0.078125f, 0.730469f}, {0.980469f, 0.507812f, 0.656250f, 0.410156f},
+ {0.410156f, 0.093750f, 0.871094f, 0.148438f}, {0.777344f, 0.910156f, 0.238281f, 0.464844f},
+ {0.929688f, 0.644531f, 0.746094f, 0.253906f}, {0.343750f, 0.488281f, 0.394531f, 0.992188f},
+ {0.566406f, 0.949219f, 0.011719f, 0.117188f}, {0.476562f, 0.597656f, 0.859375f, 0.476562f},
+ {0.210938f, 0.449219f, 0.476562f, 0.273438f}, {0.816406f, 0.902344f, 0.156250f, 0.542969f},
+ {0.093750f, 0.738281f, 0.253906f, 0.773438f}, {0.964844f, 0.640625f, 0.316406f, 0.500000f},
+ {0.738281f, 0.925781f, 0.007812f, 0.257812f}, {0.828125f, 0.066406f, 0.433594f, 0.000000f},
+ {0.457031f, 0.437500f, 0.578125f, 0.187500f}, {0.667969f, 0.980469f, 0.089844f, 0.699219f},
+ {0.207031f, 0.351562f, 0.824219f, 0.886719f}, {0.105469f, 0.902344f, 0.703125f, 0.246094f},
+ {0.933594f, 0.183594f, 0.796875f, 0.070312f}, {0.796875f, 0.449219f, 0.457031f, 0.925781f},
+ {0.656250f, 0.945312f, 0.378906f, 0.289062f}, {0.957031f, 0.878906f, 0.769531f, 0.875000f},
+ {0.847656f, 0.335938f, 0.531250f, 0.097656f}, {0.089844f, 0.128906f, 0.628906f, 0.464844f},
+ {0.199219f, 0.824219f, 0.437500f, 0.273438f}, {0.335938f, 0.035156f, 0.507812f, 0.925781f},
+ {0.113281f, 0.773438f, 0.839844f, 0.554688f}, {0.160156f, 0.925781f, 0.042969f, 0.437500f},
+ {0.695312f, 0.132812f, 0.875000f, 0.687500f}, {0.300781f, 0.007812f, 0.519531f, 0.878906f},
+ {0.921875f, 0.898438f, 0.671875f, 0.800781f}, {0.187500f, 0.582031f, 0.000000f, 0.539062f},
+ {0.421875f, 0.253906f, 0.484375f, 0.265625f}, {0.503906f, 0.800781f, 0.945312f, 0.988281f},
+ {0.917969f, 0.117188f, 0.625000f, 0.753906f}, {0.812500f, 0.859375f, 0.707031f, 0.578125f},
+ {0.671875f, 0.269531f, 0.296875f, 0.171875f}, {0.984375f, 0.949219f, 0.769531f, 0.367188f},
+ {0.847656f, 0.476562f, 0.156250f, 0.957031f}, {0.703125f, 0.613281f, 0.554688f, 0.867188f},
+ {0.890625f, 0.328125f, 0.101562f, 0.421875f}, {0.503906f, 0.976562f, 0.687500f, 0.910156f},
+ {0.570312f, 0.511719f, 0.503906f, 0.777344f}, {0.156250f, 0.808594f, 0.597656f, 0.179688f},
+ {0.355469f, 0.125000f, 0.019531f, 0.839844f}, {0.199219f, 0.730469f, 0.308594f, 0.738281f},
+ {0.949219f, 0.984375f, 0.671875f, 0.496094f}, {0.429688f, 0.613281f, 0.246094f, 0.199219f},
+ {0.910156f, 0.085938f, 0.363281f, 0.765625f}, {0.769531f, 0.878906f, 0.707031f, 0.261719f},
+ {0.472656f, 0.519531f, 0.187500f, 0.000000f}, {0.894531f, 0.328125f, 0.519531f, 0.750000f},
+ {0.277344f, 0.593750f, 0.238281f, 0.632812f}, {0.058594f, 0.855469f, 0.359375f, 0.500000f},
+ {0.855469f, 0.023438f, 0.910156f, 0.027344f}, {0.699219f, 0.523438f, 0.449219f, 0.562500f},
+ {0.457031f, 0.667969f, 0.308594f, 0.980469f}, {0.125000f, 0.175781f, 0.824219f, 0.312500f},
+ {0.867188f, 0.867188f, 0.476562f, 0.414062f}, {0.375000f, 0.027344f, 0.929688f, 0.882812f},
+ {0.683594f, 0.812500f, 0.851562f, 0.175781f}, {0.117188f, 0.480469f, 0.125000f, 0.804688f},
+ {0.878906f, 0.980469f, 0.210938f, 0.679688f}, {0.058594f, 0.554688f, 0.378906f, 0.042969f},
+ {0.628906f, 0.167969f, 0.976562f, 0.527344f}, {0.132812f, 0.757812f, 0.769531f, 0.621094f},
+ {0.308594f, 0.371094f, 0.191406f, 0.312500f}, {0.464844f, 0.273438f, 0.527344f, 0.898438f},
+ {0.085938f, 0.808594f, 0.960938f, 0.007812f}, {0.734375f, 0.324219f, 0.691406f, 0.757812f},
+ {0.671875f, 0.105469f, 0.339844f, 0.593750f}, {0.058594f, 0.765625f, 0.585938f, 0.703125f},
+ {0.761719f, 0.246094f, 0.062500f, 0.031250f}, {0.156250f, 0.167969f, 0.417969f, 0.917969f},
+ {0.355469f, 0.035156f, 0.800781f, 0.382812f}, {0.644531f, 0.281250f, 0.925781f, 0.683594f},
+ {0.496094f, 0.773438f, 0.136719f, 0.957031f}, {0.121094f, 0.226562f, 0.890625f, 0.562500f},
+ {0.304688f, 0.699219f, 0.187500f, 0.824219f}, {0.992188f, 0.628906f, 0.980469f, 0.457031f},
+ {0.550781f, 0.300781f, 0.410156f, 0.308594f}, {0.621094f, 0.761719f, 0.242188f, 0.148438f},
+ {0.292969f, 0.671875f, 0.609375f, 0.816406f}, {0.414062f, 0.386719f, 0.000000f, 0.445312f},
+ {0.167969f, 0.289062f, 0.890625f, 0.207031f}, {0.238281f, 0.542969f, 0.140625f, 0.523438f},
+ {0.566406f, 0.710938f, 0.218750f, 0.625000f}, {0.382812f, 0.464844f, 0.980469f, 0.156250f},
+ {0.785156f, 0.972656f, 0.695312f, 0.730469f}, {0.535156f, 0.199219f, 0.246094f, 0.863281f},
+ {0.648438f, 0.390625f, 0.371094f, 0.210938f}, {0.425781f, 0.550781f, 0.722656f, 0.000000f},
+ {0.773438f, 0.671875f, 0.140625f, 0.980469f}, {0.585938f, 0.425781f, 0.234375f, 0.304688f},
+ {0.105469f, 0.734375f, 0.812500f, 0.164062f}, {0.656250f, 0.460938f, 0.281250f, 0.421875f},
+ {0.277344f, 0.632812f, 0.863281f, 0.351562f}, {0.031250f, 0.968750f, 0.347656f, 0.015625f},
+ {0.613281f, 0.195312f, 0.195312f, 0.214844f}, {0.445312f, 0.507812f, 0.527344f, 0.906250f},
+ {0.296875f, 0.777344f, 0.855469f, 0.093750f}, {0.132812f, 0.660156f, 0.062500f, 0.285156f},
+ {0.546875f, 0.031250f, 0.457031f, 0.496094f}, {0.195312f, 0.230469f, 0.808594f, 0.144531f},
+ {0.375000f, 0.750000f, 0.273438f, 0.210938f}, {0.933594f, 0.156250f, 0.941406f, 0.601562f},
+ {0.230469f, 0.402344f, 0.355469f, 0.367188f}, {0.753906f, 0.656250f, 0.128906f, 0.449219f},
+ {0.058594f, 0.351562f, 0.464844f, 0.015625f}, {0.597656f, 0.570312f, 0.398438f, 0.957031f},
+ {0.789062f, 0.289062f, 0.824219f, 0.386719f}, {0.246094f, 0.492188f, 0.578125f, 0.863281f},
+ {0.636719f, 0.792969f, 0.046875f, 0.457031f}, {0.332031f, 0.019531f, 0.839844f, 0.929688f},
+ {0.207031f, 0.410156f, 0.109375f, 0.707031f}, {0.617188f, 0.765625f, 0.621094f, 0.992188f},
+ {0.960938f, 0.066406f, 0.691406f, 0.132812f}, {0.417969f, 0.289062f, 0.074219f, 0.906250f},
+ {0.789062f, 0.207031f, 0.851562f, 0.769531f}, {0.093750f, 0.972656f, 0.171875f, 0.183594f},
+ {0.937500f, 0.101562f, 0.726562f, 0.066406f}, {0.253906f, 0.324219f, 0.554688f, 0.527344f},
+ {0.820312f, 0.503906f, 0.062500f, 0.656250f}, {0.476562f, 0.593750f, 0.648438f, 0.007812f},
+ {0.179688f, 0.910156f, 0.281250f, 0.289062f}, {0.957031f, 0.062500f, 0.445312f, 0.921875f},
+ {0.441406f, 0.632812f, 0.726562f, 0.128906f}, {0.574219f, 0.292969f, 0.621094f, 0.234375f},
+ {0.203125f, 0.875000f, 0.476562f, 0.363281f}, {0.679688f, 0.667969f, 0.031250f, 0.945312f},
+ {0.914062f, 0.441406f, 0.347656f, 0.097656f}, {0.546875f, 0.214844f, 0.609375f, 0.687500f},
+ {0.191406f, 0.718750f, 0.113281f, 0.550781f}, {0.269531f, 0.148438f, 0.164062f, 0.375000f},
+ {0.992188f, 0.414062f, 0.898438f, 0.164062f}, {0.398438f, 0.652344f, 0.652344f, 0.429688f},
+ {0.523438f, 0.351562f, 0.210938f, 0.800781f}, {0.863281f, 0.820312f, 0.992188f, 0.218750f},
+ {0.437500f, 0.988281f, 0.707031f, 0.066406f}, {0.261719f, 0.421875f, 0.382812f, 0.859375f},
+ {0.921875f, 0.339844f, 0.644531f, 0.132812f}, {0.585938f, 0.539062f, 0.746094f, 0.359375f},
+ {0.386719f, 0.855469f, 0.488281f, 0.738281f}, {0.804688f, 0.019531f, 0.289062f, 0.105469f},
+ {0.253906f, 0.480469f, 0.050781f, 0.539062f}, {0.027344f, 0.109375f, 0.867188f, 0.945312f},
+ {0.898438f, 0.828125f, 0.523438f, 0.582031f}, {0.718750f, 0.046875f, 0.964844f, 0.339844f},
+ {0.519531f, 0.152344f, 0.281250f, 0.675781f}, {0.062500f, 0.765625f, 0.570312f, 0.984375f},
+ {0.886719f, 0.003906f, 0.738281f, 0.792969f}, {0.687500f, 0.257812f, 0.316406f, 0.410156f},
+ {0.019531f, 0.585938f, 0.078125f, 0.039062f}, {0.964844f, 0.660156f, 0.164062f, 0.320312f},
+ {0.257812f, 0.863281f, 0.941406f, 0.597656f}, {0.906250f, 0.292969f, 0.640625f, 0.386719f},
+ {0.214844f, 0.960938f, 0.472656f, 0.746094f}, {0.464844f, 0.214844f, 0.996094f, 0.628906f},
+ {0.378906f, 0.851562f, 0.558594f, 0.097656f}, {0.820312f, 0.300781f, 0.394531f, 0.898438f},
+ {0.718750f, 0.066406f, 0.597656f, 0.566406f}, {0.968750f, 0.406250f, 0.085938f, 0.843750f},
+ {0.363281f, 0.687500f, 0.433594f, 0.683594f}, {0.750000f, 0.574219f, 0.125000f, 0.437500f},
+ {0.078125f, 0.316406f, 0.980469f, 0.617188f}, {0.636719f, 0.136719f, 0.675781f, 0.812500f},
+ {0.468750f, 0.910156f, 0.367188f, 0.757812f}, {0.324219f, 0.546875f, 0.910156f, 0.554688f},
+ {0.050781f, 0.832031f, 0.003906f, 0.671875f}, {0.808594f, 0.054688f, 0.203125f, 0.042969f},
+ {0.625000f, 0.929688f, 0.632812f, 0.937500f}, {0.460938f, 0.468750f, 0.796875f, 0.523438f},
+ {0.882812f, 0.003906f, 0.964844f, 0.292969f}, {0.304688f, 0.902344f, 0.195312f, 0.589844f},
+ {0.503906f, 0.160156f, 0.515625f, 0.128906f}, {0.011719f, 0.671875f, 0.933594f, 0.328125f},
+ {0.714844f, 0.250000f, 0.765625f, 0.570312f}, {0.539062f, 0.921875f, 0.472656f, 0.167969f},
+ {0.820312f, 0.187500f, 0.871094f, 0.355469f}, {0.031250f, 0.996094f, 0.953125f, 0.476562f},
+ {0.355469f, 0.628906f, 0.425781f, 0.289062f}, {0.554688f, 0.449219f, 0.578125f, 0.593750f},
+ {0.183594f, 0.710938f, 0.273438f, 0.398438f}, {0.644531f, 0.359375f, 0.511719f, 0.695312f},
+ {0.398438f, 0.820312f, 0.015625f, 0.464844f}, {0.535156f, 0.925781f, 0.941406f, 0.933594f},
+ {0.628906f, 0.691406f, 0.238281f, 0.222656f}, {0.074219f, 0.222656f, 0.402344f, 0.707031f},
+ {0.785156f, 0.757812f, 0.761719f, 0.496094f}, {0.242188f, 0.367188f, 0.570312f, 0.589844f},
+ {0.726562f, 0.718750f, 0.320312f, 0.445312f}, {0.925781f, 0.417969f, 0.890625f, 0.863281f},
+ {0.382812f, 0.000000f, 0.261719f, 0.753906f}, {0.753906f, 0.953125f, 0.839844f, 0.179688f},
+ {0.023438f, 0.078125f, 0.414062f, 0.832031f}, {0.843750f, 0.597656f, 0.906250f, 0.496094f},
+ {0.617188f, 0.894531f, 0.492188f, 0.792969f}, {0.886719f, 0.542969f, 0.261719f, 0.289062f},
+ {0.140625f, 0.968750f, 0.437500f, 0.960938f}, {0.296875f, 0.046875f, 0.757812f, 0.851562f},
+ {0.601562f, 0.710938f, 0.300781f, 0.324219f}, {0.699219f, 0.500000f, 0.496094f, 0.574219f},
+ {0.019531f, 0.558594f, 0.035156f, 0.648438f}, {0.785156f, 0.675781f, 0.535156f, 0.449219f},
+ {0.078125f, 0.089844f, 0.234375f, 0.300781f}, {0.191406f, 0.175781f, 0.339844f, 0.617188f},
+ {0.714844f, 0.398438f, 0.785156f, 0.222656f}, {0.054688f, 0.921875f, 0.562500f, 0.875000f},
+ {0.488281f, 0.257812f, 0.683594f, 0.652344f}, {0.765625f, 0.566406f, 0.335938f, 0.386719f},
+ {0.371094f, 0.957031f, 0.121094f, 0.750000f}, {0.117188f, 0.511719f, 0.718750f, 0.007812f},
+ {0.820312f, 0.871094f, 0.421875f, 0.125000f}, {0.453125f, 0.617188f, 0.062500f, 0.371094f},
+ {0.613281f, 0.937500f, 0.914062f, 0.246094f}, {0.300781f, 0.371094f, 0.460938f, 0.703125f},
+ {0.480469f, 0.078125f, 0.863281f, 0.957031f}, {0.730469f, 0.746094f, 0.785156f, 0.488281f},
+ {0.363281f, 0.164062f, 0.566406f, 0.812500f}, {0.074219f, 0.093750f, 0.093750f, 0.140625f},
+ {0.859375f, 0.503906f, 0.320312f, 0.527344f}, {0.039062f, 0.050781f, 0.765625f, 0.464844f},
+ {0.953125f, 0.566406f, 0.058594f, 0.222656f}, {0.531250f, 0.156250f, 0.156250f, 0.773438f},
+ {0.230469f, 0.914062f, 0.738281f, 0.644531f}, {0.117188f, 0.750000f, 0.898438f, 0.152344f},
+ {0.574219f, 0.363281f, 0.656250f, 0.484375f}, {0.179688f, 0.011719f, 0.808594f, 0.312500f},
+ {0.894531f, 0.980469f, 0.328125f, 0.941406f}, {0.246094f, 0.730469f, 0.242188f, 0.066406f},
+ {0.949219f, 0.386719f, 0.609375f, 0.398438f}, {0.781250f, 0.445312f, 0.511719f, 0.257812f},
+ {0.675781f, 0.679688f, 0.730469f, 0.843750f}, {0.121094f, 0.273438f, 0.433594f, 0.324219f},
+ {0.273438f, 0.582031f, 0.855469f, 0.726562f}, {0.390625f, 0.863281f, 0.289062f, 0.816406f},
+ {0.699219f, 0.226562f, 0.707031f, 0.218750f}, {0.925781f, 0.757812f, 0.078125f, 0.687500f},
+ {0.128906f, 0.382812f, 0.640625f, 0.906250f}, {0.382812f, 0.101562f, 0.140625f, 0.789062f},
+ {0.988281f, 0.843750f, 0.273438f, 0.074219f}, {0.093750f, 0.562500f, 0.386719f, 0.660156f},
+ {0.441406f, 0.726562f, 0.230469f, 0.218750f}, {0.746094f, 0.238281f, 0.023438f, 0.875000f},
+ {0.683594f, 0.109375f, 0.750000f, 0.042969f}, {0.238281f, 0.898438f, 0.328125f, 0.812500f},
+ {0.902344f, 0.796875f, 0.988281f, 0.230469f}, {0.335938f, 0.574219f, 0.792969f, 0.335938f},
+ {0.015625f, 0.035156f, 0.613281f, 0.835938f}, {0.738281f, 0.414062f, 0.343750f, 0.101562f},
+ {0.976562f, 0.128906f, 0.867188f, 0.789062f}, {0.308594f, 0.285156f, 0.148438f, 0.371094f},
+ {0.554688f, 0.535156f, 0.980469f, 0.964844f}, {0.351562f, 0.191406f, 0.046875f, 0.074219f},
+ {0.003906f, 0.140625f, 0.812500f, 0.324219f}, {0.515625f, 0.804688f, 0.101562f, 0.644531f},
+ {0.292969f, 0.242188f, 0.152344f, 0.546875f}, {0.816406f, 0.527344f, 0.554688f, 0.277344f},
+ {0.246094f, 0.343750f, 0.664062f, 0.050781f}, {0.425781f, 0.839844f, 0.058594f, 0.425781f},
+ {0.347656f, 0.031250f, 0.714844f, 0.207031f}, {0.496094f, 0.460938f, 0.804688f, 0.652344f},
+ {0.800781f, 0.226562f, 0.078125f, 0.058594f}, {0.039062f, 0.859375f, 0.546875f, 0.484375f},
+ {0.945312f, 0.300781f, 0.847656f, 0.109375f}, {0.226562f, 0.121094f, 0.121094f, 0.933594f},
+ {0.906250f, 0.210938f, 0.878906f, 0.746094f}, {0.546875f, 0.875000f, 0.601562f, 0.187500f},
+ {0.675781f, 0.953125f, 0.085938f, 0.804688f}, {0.339844f, 0.601562f, 0.933594f, 0.507812f},
+ {0.859375f, 0.792969f, 0.023438f, 0.996094f}, {0.429688f, 0.128906f, 0.156250f, 0.031250f},
+ {0.929688f, 0.742188f, 0.906250f, 0.269531f}, {0.179688f, 0.203125f, 0.453125f, 0.484375f},
+ {0.671875f, 0.640625f, 0.644531f, 0.195312f}, {0.582031f, 0.328125f, 0.191406f, 0.847656f},
+ {0.976562f, 0.425781f, 0.832031f, 0.601562f}, {0.343750f, 0.191406f, 0.347656f, 0.906250f},
+ {0.210938f, 0.488281f, 0.605469f, 0.062500f}, {0.941406f, 0.804688f, 0.023438f, 0.546875f},
+ {0.101562f, 0.910156f, 0.527344f, 0.191406f}, {0.175781f, 0.437500f, 0.402344f, 0.648438f},
+ {0.820312f, 0.332031f, 0.265625f, 0.914062f}, {0.515625f, 0.636719f, 0.882812f, 0.062500f},
+ {0.621094f, 0.785156f, 0.429688f, 0.253906f}, {0.746094f, 0.707031f, 0.199219f, 0.937500f},
+ {0.152344f, 0.355469f, 0.683594f, 0.332031f}, {0.332031f, 0.804688f, 0.457031f, 0.074219f},
+ {0.878906f, 0.492188f, 0.964844f, 0.968750f}, {0.480469f, 0.109375f, 0.226562f, 0.382812f},
+ {0.792969f, 0.867188f, 0.035156f, 0.042969f}, {0.417969f, 0.234375f, 0.480469f, 0.734375f},
+ {0.843750f, 0.464844f, 0.566406f, 0.539062f}, {0.511719f, 0.609375f, 0.171875f, 0.187500f},
+ {0.011719f, 0.062500f, 0.046875f, 0.703125f}, {0.582031f, 0.191406f, 0.871094f, 0.968750f},
+ {0.429688f, 0.347656f, 0.308594f, 0.121094f}, {0.988281f, 0.777344f, 0.578125f, 0.484375f},
+ {0.527344f, 0.109375f, 0.152344f, 0.078125f}, {0.085938f, 0.320312f, 0.050781f, 0.160156f},
+ {0.835938f, 0.699219f, 0.539062f, 0.640625f}, {0.558594f, 0.531250f, 0.890625f, 0.433594f},
+ {0.183594f, 0.968750f, 0.332031f, 0.031250f}, {0.660156f, 0.449219f, 0.433594f, 0.269531f},
+ {0.851562f, 0.640625f, 0.722656f, 0.503906f}, {0.289062f, 0.347656f, 0.558594f, 0.835938f},
+ {0.156250f, 0.488281f, 0.171875f, 0.101562f}, {0.878906f, 0.828125f, 0.804688f, 0.550781f},
+ {0.511719f, 0.386719f, 0.492188f, 0.437500f}, {0.132812f, 0.531250f, 0.148438f, 0.671875f},
+ {0.765625f, 0.144531f, 0.101562f, 0.117188f}, {0.484375f, 0.257812f, 0.210938f, 0.910156f},
+ {0.835938f, 0.480469f, 0.433594f, 0.574219f}, {0.152344f, 0.628906f, 0.699219f, 0.269531f},
+ {0.214844f, 0.773438f, 0.089844f, 0.441406f}, {0.417969f, 0.992188f, 0.535156f, 0.152344f},
+ {0.898438f, 0.453125f, 0.667969f, 0.746094f}, {0.640625f, 0.867188f, 0.195312f, 0.207031f},
+ {0.148438f, 0.578125f, 0.507812f, 0.796875f}, {0.855469f, 0.921875f, 0.699219f, 0.027344f},
+ {0.097656f, 0.468750f, 0.960938f, 0.988281f}, {0.585938f, 0.625000f, 0.757812f, 0.382812f},
+ {0.160156f, 0.773438f, 0.300781f, 0.613281f}, {0.714844f, 0.183594f, 0.214844f, 0.875000f},
+ {0.070312f, 0.691406f, 0.980469f, 0.937500f}, {0.656250f, 0.375000f, 0.332031f, 0.125000f},
+ {0.746094f, 0.789062f, 0.621094f, 0.738281f}, {0.457031f, 0.585938f, 0.949219f, 0.605469f},
+ {0.335938f, 0.933594f, 0.179688f, 0.253906f}, {0.171875f, 0.625000f, 0.359375f, 0.523438f},
+ {0.386719f, 0.457031f, 0.730469f, 0.394531f}, {0.472656f, 0.003906f, 0.273438f, 0.039062f},
+ {0.281250f, 0.726562f, 0.457031f, 0.902344f}, {0.972656f, 0.488281f, 0.832031f, 0.093750f},
+ {0.617188f, 0.312500f, 0.406250f, 0.414062f}, {0.136719f, 0.660156f, 0.613281f, 0.687500f},
+ {0.562500f, 0.441406f, 0.226562f, 0.781250f}, {0.324219f, 0.375000f, 0.800781f, 0.074219f},
+ {0.871094f, 0.808594f, 0.082031f, 0.964844f}, {0.269531f, 0.089844f, 0.941406f, 0.699219f},
+ {0.011719f, 0.250000f, 0.503906f, 0.503906f}, {0.148438f, 0.671875f, 0.242188f, 0.300781f},
+ {0.707031f, 0.125000f, 0.679688f, 0.453125f}, {0.843750f, 0.296875f, 0.812500f, 0.835938f},
+ {0.417969f, 0.566406f, 0.187500f, 0.113281f}, {0.578125f, 0.226562f, 0.652344f, 0.285156f},
+ {0.675781f, 0.523438f, 0.718750f, 0.363281f}, {0.312500f, 0.894531f, 0.039062f, 0.691406f},
+ {0.406250f, 0.398438f, 0.605469f, 0.781250f}, {0.265625f, 0.246094f, 0.917969f, 0.851562f},
+ {0.570312f, 0.992188f, 0.843750f, 0.589844f}, {0.644531f, 0.605469f, 0.339844f, 0.714844f},
+ {0.003906f, 0.269531f, 0.531250f, 0.511719f}, {0.699219f, 0.652344f, 0.296875f, 0.277344f},
+ {0.312500f, 0.546875f, 0.710938f, 0.824219f}, {0.054688f, 0.152344f, 0.402344f, 0.238281f},
+ {0.667969f, 0.796875f, 0.914062f, 0.875000f}, {0.351562f, 0.281250f, 0.769531f, 0.351562f},
+ {0.730469f, 0.839844f, 0.691406f, 0.000000f}, {0.289062f, 0.894531f, 0.394531f, 0.632812f},
+ {0.152344f, 0.519531f, 0.113281f, 0.429688f}, {0.867188f, 0.988281f, 0.992188f, 0.582031f},
+ {0.210938f, 0.636719f, 0.480469f, 0.878906f}, {0.640625f, 0.171875f, 0.753906f, 0.984375f},
+ {0.023438f, 0.425781f, 0.371094f, 0.343750f}, {0.437500f, 0.039062f, 0.222656f, 0.539062f},
+ {0.257812f, 0.800781f, 0.835938f, 0.718750f}, {0.777344f, 0.300781f, 0.007812f, 0.964844f},
+ {0.484375f, 0.054688f, 0.984375f, 0.406250f}, {0.582031f, 0.140625f, 0.664062f, 0.617188f},
+ {0.398438f, 0.597656f, 0.906250f, 0.933594f}, {0.933594f, 0.019531f, 0.367188f, 0.726562f},
+ {0.312500f, 0.691406f, 0.601562f, 0.164062f}, {0.074219f, 0.320312f, 0.882812f, 0.964844f},
+ {0.589844f, 0.644531f, 0.679688f, 0.515625f}, {0.949219f, 0.964844f, 0.375000f, 0.742188f},
+ {0.281250f, 0.187500f, 0.910156f, 0.023438f}, {0.687500f, 0.886719f, 0.773438f, 0.640625f},
+ {0.597656f, 0.343750f, 0.292969f, 0.871094f}, {0.054688f, 0.089844f, 0.464844f, 0.535156f},
+ {0.808594f, 0.015625f, 0.839844f, 0.613281f}, {0.710938f, 0.675781f, 0.339844f, 0.902344f},
+ {0.484375f, 0.320312f, 0.429688f, 0.406250f}, {0.988281f, 0.062500f, 0.242188f, 0.687500f},
+ {0.664062f, 0.707031f, 0.375000f, 0.140625f}, {0.460938f, 0.128906f, 0.019531f, 0.480469f},
+ {0.960938f, 0.296875f, 0.453125f, 0.707031f}, {0.535156f, 0.980469f, 0.828125f, 0.246094f},
+ {0.894531f, 0.101562f, 0.578125f, 0.570312f}, {0.218750f, 0.273438f, 0.398438f, 0.335938f},
+ {0.113281f, 0.507812f, 0.000000f, 0.406250f}, {0.554688f, 0.160156f, 0.242188f, 0.890625f},
+ {0.828125f, 0.066406f, 0.671875f, 0.695312f}, {0.632812f, 0.398438f, 0.425781f, 0.148438f},
+ {0.730469f, 0.781250f, 0.785156f, 0.968750f}, {0.125000f, 0.273438f, 0.964844f, 0.281250f},
+ {0.820312f, 0.371094f, 0.191406f, 0.707031f}, {0.031250f, 0.218750f, 0.695312f, 0.585938f},
+ {0.507812f, 0.054688f, 0.511719f, 0.343750f}, {0.242188f, 0.890625f, 0.988281f, 0.167969f},
+ {0.734375f, 0.972656f, 0.730469f, 0.531250f}, {0.070312f, 0.011719f, 0.285156f, 0.316406f},
+ {0.460938f, 0.707031f, 0.394531f, 0.417969f}, {0.781250f, 0.546875f, 0.585938f, 0.234375f},
+ {0.402344f, 0.992188f, 0.769531f, 0.152344f}, {0.644531f, 0.738281f, 0.148438f, 0.773438f},
+ {0.757812f, 0.855469f, 0.976562f, 0.636719f}, {0.539062f, 0.050781f, 0.382812f, 0.390625f},
+ {0.246094f, 0.714844f, 0.296875f, 0.742188f}, {0.910156f, 0.972656f, 0.125000f, 0.886719f},
+ {0.128906f, 0.011719f, 0.960938f, 0.445312f}, {0.984375f, 0.828125f, 0.351562f, 0.554688f},
+ {0.054688f, 0.132812f, 0.511719f, 0.175781f}, {0.800781f, 0.464844f, 0.117188f, 0.398438f},
+ {0.921875f, 0.027344f, 0.257812f, 0.019531f}, {0.437500f, 0.191406f, 0.015625f, 0.441406f},
+ {0.203125f, 0.433594f, 0.785156f, 0.195312f}, {0.996094f, 0.953125f, 0.632812f, 0.917969f},
+ {0.257812f, 0.335938f, 0.144531f, 0.652344f}, {0.617188f, 0.703125f, 0.835938f, 0.101562f},
+ {0.941406f, 0.929688f, 0.265625f, 0.597656f}, {0.109375f, 0.503906f, 0.097656f, 0.468750f},
+ {0.195312f, 0.093750f, 0.957031f, 0.785156f}, {0.917969f, 0.714844f, 0.218750f, 0.906250f},
+ {0.761719f, 0.242188f, 0.648438f, 0.281250f}, {0.367188f, 0.019531f, 0.789062f, 0.195312f},
+ {0.707031f, 0.480469f, 0.253906f, 0.386719f}, {0.328125f, 0.828125f, 0.917969f, 0.757812f},
+ {0.960938f, 0.941406f, 0.667969f, 0.242188f}, {0.742188f, 0.601562f, 0.601562f, 0.105469f},
+ {0.347656f, 0.203125f, 0.496094f, 0.871094f}, {0.886719f, 0.687500f, 0.777344f, 0.152344f},
+ {0.046875f, 0.886719f, 0.089844f, 0.316406f}, {0.222656f, 0.957031f, 0.316406f, 0.773438f},
+ {0.625000f, 0.750000f, 0.527344f, 0.253906f}, {0.003906f, 0.277344f, 0.050781f, 0.382812f},
+ {0.660156f, 0.937500f, 0.250000f, 0.328125f}, {0.808594f, 0.078125f, 0.734375f, 0.625000f},
+ {0.437500f, 0.425781f, 0.460938f, 0.281250f}, {0.386719f, 0.738281f, 0.566406f, 0.394531f},
+ {0.039062f, 0.050781f, 0.035156f, 0.175781f}, {0.523438f, 0.546875f, 0.175781f, 0.996094f},
+ {0.925781f, 0.714844f, 0.957031f, 0.347656f}, {0.453125f, 0.843750f, 0.585938f, 0.039062f},
+ {0.109375f, 0.617188f, 0.003906f, 0.296875f}, {0.269531f, 0.406250f, 0.750000f, 0.109375f},
+ {0.390625f, 0.949219f, 0.933594f, 0.519531f}, {0.207031f, 0.222656f, 0.597656f, 0.238281f},
+ {0.332031f, 0.378906f, 0.640625f, 0.820312f}, {0.785156f, 0.898438f, 0.914062f, 0.906250f},
+ {0.054688f, 0.496094f, 0.523438f, 0.085938f}, {0.386719f, 0.417969f, 0.089844f, 0.777344f},
+ {0.304688f, 0.562500f, 0.148438f, 0.031250f}, {0.929688f, 0.925781f, 0.773438f, 0.519531f},
+ {0.414062f, 0.667969f, 0.468750f, 0.195312f}, {0.257812f, 0.738281f, 0.835938f, 0.800781f},
+ {0.972656f, 0.332031f, 0.519531f, 0.003906f}, {0.078125f, 0.847656f, 0.062500f, 0.359375f},
+ {0.882812f, 0.691406f, 0.566406f, 0.625000f}, {0.585938f, 0.148438f, 0.140625f, 0.777344f},
+ {0.214844f, 0.941406f, 0.652344f, 0.476562f}, {0.757812f, 0.824219f, 0.308594f, 0.238281f},
+ {0.402344f, 0.527344f, 0.113281f, 0.867188f}, {0.945312f, 0.585938f, 0.359375f, 0.937500f},
+ {0.839844f, 0.277344f, 0.062500f, 0.621094f}, {0.632812f, 0.167969f, 0.550781f, 0.804688f},
+ {0.222656f, 0.464844f, 0.894531f, 0.914062f}, {0.535156f, 0.882812f, 0.011719f, 0.566406f},
+ {0.886719f, 0.039062f, 0.312500f, 0.085938f}, {0.496094f, 0.394531f, 0.449219f, 0.875000f},
+ {0.085938f, 0.593750f, 0.097656f, 0.972656f}, {0.289062f, 0.343750f, 0.742188f, 0.011719f},
+ {0.031250f, 0.460938f, 0.894531f, 0.589844f}, {0.777344f, 0.156250f, 0.488281f, 0.222656f},
+ {0.468750f, 0.679688f, 0.835938f, 0.042969f}, {0.195312f, 0.281250f, 0.230469f, 0.992188f},
+ {0.718750f, 0.589844f, 0.796875f, 0.109375f}, {0.492188f, 0.921875f, 0.667969f, 0.667969f},
+ {0.097656f, 0.667969f, 0.390625f, 0.292969f}, {0.835938f, 0.871094f, 0.582031f, 0.871094f},
+ {0.378906f, 0.097656f, 0.878906f, 0.128906f}, {0.753906f, 0.765625f, 0.078125f, 0.558594f},
+ {0.503906f, 0.039062f, 0.937500f, 0.761719f}, {0.148438f, 0.207031f, 0.515625f, 0.425781f},
+ {0.816406f, 0.421875f, 0.593750f, 0.996094f}, {0.390625f, 0.367188f, 0.335938f, 0.136719f},
+ {0.550781f, 0.656250f, 0.441406f, 0.226562f}, {0.488281f, 0.144531f, 0.828125f, 0.523438f},
+ {0.605469f, 0.593750f, 0.531250f, 0.734375f}, {0.035156f, 0.390625f, 0.347656f, 0.671875f},
+ {0.464844f, 0.742188f, 0.019531f, 0.023438f}, {0.812500f, 0.265625f, 0.421875f, 0.492188f},
+ {0.164062f, 0.359375f, 0.101562f, 0.605469f}, {0.507812f, 0.121094f, 0.171875f, 0.800781f},
+ {0.605469f, 0.503906f, 0.933594f, 0.453125f}, {0.082031f, 0.250000f, 0.261719f, 0.203125f},
+ {0.968750f, 0.550781f, 0.460938f, 0.570312f}, {0.718750f, 0.410156f, 0.628906f, 0.054688f},
+ {0.835938f, 0.105469f, 0.710938f, 0.468750f}, {0.359375f, 0.457031f, 0.421875f, 0.894531f},
+ {0.250000f, 0.875000f, 0.968750f, 0.015625f}, {0.996094f, 0.210938f, 0.074219f, 0.855469f},
+ {0.179688f, 0.785156f, 0.304688f, 0.074219f}, {0.714844f, 0.855469f, 0.832031f, 0.804688f},
+ {0.230469f, 0.296875f, 0.500000f, 0.488281f}, {0.859375f, 0.394531f, 0.253906f, 0.222656f},
+ {0.324219f, 0.230469f, 0.640625f, 0.679688f}, {0.765625f, 0.511719f, 0.390625f, 0.820312f},
+ {0.179688f, 0.269531f, 0.222656f, 0.726562f}, {0.843750f, 0.121094f, 0.128906f, 0.468750f},
+ {0.609375f, 0.781250f, 0.859375f, 0.960938f}, {0.035156f, 0.531250f, 0.066406f, 0.335938f},
+ {0.734375f, 0.855469f, 0.167969f, 0.578125f}, {0.261719f, 0.023438f, 0.324219f, 0.175781f},
+ {0.867188f, 0.652344f, 0.875000f, 0.304688f}, {0.632812f, 0.746094f, 0.683594f, 0.371094f},
+ {0.183594f, 0.214844f, 0.273438f, 0.851562f}, {0.773438f, 0.832031f, 0.921875f, 0.667969f},
+ {0.589844f, 0.011719f, 0.703125f, 0.992188f}, {0.691406f, 0.433594f, 0.113281f, 0.300781f},
+ {0.003906f, 0.246094f, 0.933594f, 0.457031f}, {0.511719f, 0.984375f, 0.320312f, 0.843750f},
+ {0.300781f, 0.496094f, 0.886719f, 0.203125f}, {0.433594f, 0.578125f, 0.390625f, 0.539062f},
+ {0.914062f, 0.648438f, 0.007812f, 0.121094f}, {0.085938f, 0.421875f, 0.867188f, 0.824219f},
+ {0.683594f, 0.117188f, 0.753906f, 0.015625f}, {0.304688f, 0.750000f, 0.210938f, 0.460938f},
+ {0.113281f, 0.355469f, 0.828125f, 0.113281f}, {0.367188f, 0.843750f, 0.472656f, 0.718750f},
+ {0.988281f, 0.621094f, 0.167969f, 0.035156f}, {0.050781f, 0.308594f, 0.710938f, 0.363281f},
+ {0.171875f, 0.144531f, 0.871094f, 0.667969f}, {0.929688f, 0.515625f, 0.648438f, 0.265625f},
+ {0.363281f, 0.781250f, 0.542969f, 0.183594f}, {0.859375f, 0.203125f, 0.226562f, 0.335938f},
+ {0.609375f, 0.878906f, 0.574219f, 0.496094f}, {0.386719f, 0.621094f, 0.003906f, 0.800781f},
+ {0.644531f, 0.378906f, 0.628906f, 0.625000f}, {0.871094f, 0.757812f, 0.437500f, 0.324219f},
+ {0.238281f, 0.082031f, 0.160156f, 0.750000f}, {0.355469f, 0.535156f, 0.984375f, 0.519531f},
+ {0.691406f, 0.308594f, 0.734375f, 0.960938f}, {0.167969f, 0.722656f, 0.480469f, 0.628906f},
+ {0.550781f, 0.390625f, 0.179688f, 0.792969f}, {0.070312f, 0.511719f, 0.441406f, 0.347656f},
+ {0.906250f, 0.843750f, 0.363281f, 0.023438f}, {0.589844f, 0.636719f, 0.203125f, 0.289062f},
+ {0.449219f, 0.070312f, 0.007812f, 0.695312f}, {0.238281f, 0.566406f, 0.746094f, 0.382812f},
+ {0.683594f, 0.953125f, 0.492188f, 0.832031f}, {0.855469f, 0.324219f, 0.062500f, 0.328125f},
+ {0.093750f, 0.812500f, 0.156250f, 0.093750f}, {0.253906f, 0.917969f, 0.609375f, 0.929688f},
+ {0.925781f, 0.550781f, 0.710938f, 0.812500f}, {0.574219f, 0.082031f, 0.843750f, 0.304688f},
+ {0.109375f, 0.894531f, 0.308594f, 0.066406f}, {0.234375f, 0.718750f, 0.550781f, 0.941406f},
+ {0.683594f, 0.851562f, 0.699219f, 0.371094f}, {0.410156f, 0.773438f, 0.402344f, 0.636719f},
+ {0.308594f, 0.335938f, 0.136719f, 0.843750f}, {0.519531f, 0.175781f, 0.820312f, 0.687500f},
+ {0.109375f, 0.820312f, 0.292969f, 0.527344f}, {0.457031f, 0.539062f, 0.183594f, 0.191406f},
+ {0.742188f, 0.617188f, 0.847656f, 0.750000f}, {0.539062f, 0.363281f, 0.617188f, 0.566406f},
+ {0.085938f, 0.500000f, 0.140625f, 0.449219f}, {0.890625f, 0.578125f, 0.937500f, 0.699219f},
+ {0.632812f, 0.113281f, 0.664062f, 0.917969f}, {0.128906f, 0.660156f, 0.105469f, 0.582031f},
+ {0.375000f, 0.933594f, 0.812500f, 0.410156f}, {0.652344f, 0.160156f, 0.882812f, 0.132812f},
+ {0.503906f, 0.820312f, 0.691406f, 0.253906f}, {0.941406f, 0.457031f, 0.300781f, 0.851562f},
+ {0.550781f, 0.734375f, 0.546875f, 0.656250f}, {0.902344f, 0.175781f, 0.488281f, 0.000000f},
+ {0.437500f, 0.593750f, 0.730469f, 0.753906f}, {0.125000f, 0.261719f, 0.785156f, 0.437500f},
+ {0.570312f, 0.816406f, 0.203125f, 0.632812f}, {0.500000f, 0.074219f, 0.417969f, 0.949219f},
+ {0.031250f, 0.351562f, 0.632812f, 0.472656f}, {0.839844f, 0.601562f, 0.343750f, 0.152344f},
+ {0.136719f, 0.128906f, 0.187500f, 0.753906f}, {0.476562f, 0.886719f, 0.597656f, 0.101562f},
+ {0.371094f, 0.550781f, 0.265625f, 0.578125f}, {0.792969f, 0.187500f, 0.722656f, 0.925781f},
+ {0.164062f, 0.089844f, 0.203125f, 0.070312f}, {0.660156f, 0.035156f, 0.617188f, 0.417969f},
+ {0.359375f, 0.324219f, 0.476562f, 0.671875f}, {0.539062f, 0.871094f, 0.542969f, 0.300781f},
+ {0.812500f, 0.195312f, 0.925781f, 0.750000f}, {0.171875f, 0.675781f, 0.433594f, 0.394531f},
+ {0.492188f, 0.066406f, 0.597656f, 0.210938f}, {0.710938f, 0.507812f, 0.675781f, 0.281250f},
+ {0.574219f, 0.765625f, 0.964844f, 0.851562f}, {0.808594f, 0.226562f, 0.250000f, 0.468750f},
+ {0.316406f, 0.925781f, 0.367188f, 0.757812f}, {0.675781f, 0.656250f, 0.816406f, 0.429688f},
+ {0.214844f, 0.265625f, 0.062500f, 0.539062f}, {0.457031f, 0.953125f, 0.937500f, 0.722656f},
+ {0.972656f, 0.101562f, 0.410156f, 0.132812f}, {0.070312f, 0.800781f, 0.320312f, 0.929688f},
+ {0.320312f, 0.500000f, 0.769531f, 0.261719f}, {0.527344f, 0.218750f, 0.085938f, 0.472656f},
+ {0.015625f, 0.851562f, 0.550781f, 0.820312f}, {0.960938f, 0.359375f, 0.285156f, 0.210938f},
+ {0.609375f, 0.144531f, 0.062500f, 0.371094f}, {0.292969f, 0.812500f, 0.925781f, 0.058594f},
+ {0.664062f, 0.226562f, 0.308594f, 0.242188f}, {0.863281f, 0.582031f, 0.671875f, 0.488281f},
+ {0.332031f, 0.292969f, 0.765625f, 0.945312f}, {0.023438f, 0.910156f, 0.988281f, 0.183594f},
+ {0.726562f, 0.734375f, 0.621094f, 0.531250f}, {0.968750f, 0.261719f, 0.898438f, 0.902344f},
+ {0.058594f, 0.851562f, 0.675781f, 0.046875f}, {0.320312f, 0.187500f, 0.292969f, 0.609375f},
+ {0.781250f, 0.449219f, 0.949219f, 0.167969f}, {0.410156f, 0.054688f, 0.882812f, 0.441406f},
+ {0.667969f, 0.210938f, 0.207031f, 0.542969f}, {0.296875f, 0.667969f, 0.468750f, 0.855469f},
+ {0.871094f, 0.417969f, 0.980469f, 0.148438f}, {0.761719f, 0.164062f, 0.765625f, 0.699219f},
+ {0.914062f, 0.460938f, 0.035156f, 0.511719f}, {0.148438f, 0.027344f, 0.871094f, 0.007812f},
+ {0.800781f, 0.929688f, 0.210938f, 0.988281f}, {0.199219f, 0.675781f, 0.945312f, 0.128906f},
+ {0.574219f, 0.230469f, 0.027344f, 0.796875f}, {0.875000f, 0.980469f, 0.781250f, 0.648438f},
+ {0.140625f, 0.144531f, 0.542969f, 0.968750f}, {0.609375f, 0.003906f, 0.359375f, 0.238281f},
+ {0.335938f, 0.683594f, 0.222656f, 0.148438f}, {0.476562f, 0.171875f, 0.761719f, 0.308594f},
+ {0.757812f, 0.902344f, 0.402344f, 0.105469f}, {0.562500f, 0.445312f, 0.324219f, 0.757812f},
+ {0.972656f, 0.039062f, 0.527344f, 0.050781f}, {0.019531f, 0.570312f, 0.054688f, 0.933594f},
+ {0.296875f, 0.964844f, 0.457031f, 0.562500f}, {0.695312f, 0.351562f, 0.984375f, 0.183594f},
+ {0.078125f, 0.636719f, 0.800781f, 0.382812f}, {0.347656f, 0.082031f, 0.402344f, 0.093750f},
+ {0.804688f, 0.988281f, 0.257812f, 0.921875f}, {0.191406f, 0.316406f, 0.101562f, 0.535156f},
+ {0.707031f, 0.453125f, 0.570312f, 0.722656f}, {0.937500f, 0.160156f, 0.996094f, 0.050781f},
+ {0.363281f, 0.960938f, 0.023438f, 0.230469f}, {0.671875f, 0.480469f, 0.496094f, 0.414062f},
+ {0.320312f, 0.296875f, 0.859375f, 0.554688f}, {0.949219f, 0.644531f, 0.386719f, 0.261719f},
+ {0.867188f, 0.757812f, 0.035156f, 0.648438f}, {0.226562f, 0.359375f, 0.460938f, 0.726562f},
+ {0.714844f, 0.804688f, 0.816406f, 0.328125f}, {0.996094f, 0.914062f, 0.980469f, 0.886719f},
+ {0.023438f, 0.257812f, 0.250000f, 0.976562f}, {0.265625f, 0.773438f, 0.789062f, 0.171875f},
+ {0.605469f, 0.472656f, 0.046875f, 0.636719f}, {0.449219f, 0.945312f, 0.273438f, 0.957031f},
+ {0.902344f, 0.250000f, 0.128906f, 0.582031f}, {0.000000f, 0.906250f, 0.332031f, 0.519531f},
+ {0.273438f, 0.101562f, 0.042969f, 0.175781f}, {0.421875f, 0.386719f, 0.515625f, 0.988281f},
+ {0.742188f, 0.820312f, 0.605469f, 0.605469f}, {0.589844f, 0.453125f, 0.132812f, 0.066406f},
+ {0.128906f, 0.066406f, 0.285156f, 0.910156f}, {0.800781f, 0.550781f, 0.714844f, 0.835938f},
+ {0.699219f, 0.421875f, 0.855469f, 0.398438f}, {0.175781f, 0.304688f, 0.175781f, 0.664062f},
+ {0.738281f, 0.039062f, 0.683594f, 0.074219f}, {0.832031f, 0.984375f, 0.898438f, 0.867188f},
+ {0.574219f, 0.437500f, 0.363281f, 0.144531f}, {0.421875f, 0.640625f, 0.859375f, 0.597656f},
+ {0.898438f, 0.937500f, 0.640625f, 0.906250f}, {0.125000f, 0.484375f, 0.214844f, 0.449219f},
+ {0.472656f, 0.000000f, 0.808594f, 0.675781f}, {0.218750f, 0.960938f, 0.109375f, 0.847656f},
+ {0.425781f, 0.167969f, 0.539062f, 0.585938f}, {0.800781f, 0.460938f, 0.257812f, 0.734375f},
+ {0.289062f, 0.125000f, 0.402344f, 0.070312f}, {0.179688f, 0.777344f, 0.125000f, 0.648438f},
+ {0.890625f, 0.011719f, 0.187500f, 0.480469f}, {0.628906f, 0.492188f, 0.558594f, 0.761719f},
+ {0.144531f, 0.691406f, 0.769531f, 0.957031f}, {0.957031f, 0.765625f, 0.378906f, 0.351562f},
+ {0.187500f, 0.292969f, 0.074219f, 0.222656f}, {0.496094f, 0.957031f, 0.589844f, 0.652344f},
+ {0.378906f, 0.597656f, 0.128906f, 0.410156f}, {0.007812f, 0.316406f, 0.269531f, 0.273438f},
+ {0.449219f, 0.644531f, 0.367188f, 0.777344f}, {0.542969f, 0.093750f, 0.648438f, 0.234375f},
+ {0.660156f, 0.582031f, 0.503906f, 0.335938f}, {0.941406f, 0.382812f, 0.585938f, 0.421875f},
+ {0.031250f, 0.042969f, 0.117188f, 0.285156f}, {0.414062f, 0.304688f, 0.679688f, 0.082031f},
+ {0.781250f, 0.722656f, 0.484375f, 0.351562f}, {0.277344f, 0.800781f, 0.875000f, 0.496094f},
+ {0.914062f, 0.265625f, 0.007812f, 0.816406f}, {0.406250f, 0.968750f, 0.445312f, 0.628906f},
+ {0.066406f, 0.339844f, 0.710938f, 0.375000f}, {0.261719f, 0.746094f, 0.968750f, 0.878906f},
+ {0.203125f, 0.800781f, 0.160156f, 0.511719f}, {0.812500f, 0.312500f, 0.613281f, 0.328125f},
+ {0.414062f, 0.691406f, 0.359375f, 0.445312f}, {0.148438f, 0.007812f, 0.179688f, 0.625000f},
+ {0.238281f, 0.226562f, 0.027344f, 0.785156f}, {0.476562f, 0.507812f, 0.664062f, 0.875000f},
+ {0.648438f, 0.390625f, 0.945312f, 0.210938f}, {0.972656f, 0.710938f, 0.367188f, 0.269531f},
+ {0.285156f, 0.558594f, 0.464844f, 0.128906f}, {0.082031f, 0.679688f, 0.816406f, 0.832031f},
+ {0.457031f, 0.769531f, 0.078125f, 0.601562f}, {0.242188f, 0.867188f, 0.738281f, 0.898438f},
+ {0.750000f, 0.394531f, 0.554688f, 0.019531f}, {0.101562f, 0.042969f, 0.968750f, 0.367188f},
+ {0.621094f, 0.957031f, 0.769531f, 0.820312f}, {0.046875f, 0.449219f, 0.660156f, 0.492188f},
+ {0.562500f, 0.613281f, 0.089844f, 0.234375f}, {0.480469f, 0.710938f, 0.335938f, 0.027344f},
+ {0.851562f, 0.402344f, 0.156250f, 0.566406f}, {0.144531f, 0.554688f, 0.691406f, 0.507812f},
+ {0.957031f, 0.023438f, 0.378906f, 0.355469f}, {0.750000f, 0.605469f, 0.640625f, 0.054688f},
+ {0.207031f, 0.722656f, 0.941406f, 0.878906f}, {0.644531f, 0.429688f, 0.847656f, 0.660156f},
+ {0.847656f, 0.558594f, 0.773438f, 0.328125f}, {0.089844f, 0.691406f, 0.425781f, 0.125000f},
+ {0.480469f, 0.000000f, 0.195312f, 0.816406f}, {0.960938f, 0.332031f, 0.992188f, 0.226562f},
+ {0.019531f, 0.750000f, 0.457031f, 0.304688f}, {0.546875f, 0.175781f, 0.503906f, 0.027344f},
+ {0.253906f, 0.703125f, 0.046875f, 0.566406f}, {0.433594f, 0.898438f, 0.601562f, 0.199219f},
+ {0.925781f, 0.582031f, 0.972656f, 0.359375f}, {0.136719f, 0.687500f, 0.250000f, 0.699219f},
+ {0.269531f, 0.183594f, 0.468750f, 0.417969f}, {0.792969f, 0.066406f, 0.031250f, 0.003906f},
+ {0.050781f, 0.566406f, 0.578125f, 0.718750f}, {0.710938f, 0.273438f, 0.414062f, 0.093750f},
+ {0.769531f, 0.695312f, 0.500000f, 0.300781f}, {0.976562f, 0.792969f, 0.867188f, 0.152344f},
+ {0.093750f, 0.613281f, 0.054688f, 0.410156f}, {0.652344f, 0.339844f, 0.722656f, 0.808594f},
+ {0.570312f, 0.527344f, 0.804688f, 0.214844f}, {0.480469f, 0.398438f, 0.324219f, 0.312500f},
+ {0.371094f, 0.996094f, 0.851562f, 0.867188f}, {0.531250f, 0.621094f, 0.429688f, 0.250000f},
+ {0.441406f, 0.117188f, 0.039062f, 0.574219f}, {0.718750f, 0.355469f, 0.250000f, 0.703125f},
+ {0.843750f, 0.867188f, 0.515625f, 0.050781f}, {0.078125f, 0.511719f, 0.816406f, 0.976562f},
+ {0.621094f, 0.000000f, 0.667969f, 0.589844f}, {0.992188f, 0.800781f, 0.441406f, 0.882812f},
+ {0.277344f, 0.988281f, 0.898438f, 0.093750f}, {0.058594f, 0.277344f, 0.070312f, 0.722656f},
+ {0.351562f, 0.867188f, 0.746094f, 0.914062f}, {0.246094f, 0.507812f, 0.343750f, 0.601562f},
+ {0.707031f, 0.433594f, 0.996094f, 0.875000f}, {0.972656f, 0.640625f, 0.394531f, 0.406250f},
+ {0.664062f, 0.894531f, 0.253906f, 0.710938f}, {0.195312f, 0.406250f, 0.640625f, 0.906250f},
+ {0.015625f, 0.480469f, 0.921875f, 0.035156f}, {0.800781f, 0.070312f, 0.582031f, 0.953125f},
+ {0.679688f, 0.628906f, 0.062500f, 0.199219f}, {0.855469f, 0.218750f, 0.273438f, 0.265625f},
+ {0.449219f, 0.492188f, 0.792969f, 0.664062f}, {0.714844f, 0.101562f, 0.906250f, 0.808594f},
+ {0.578125f, 0.894531f, 0.714844f, 0.980469f}, {0.957031f, 0.421875f, 0.246094f, 0.058594f},
+ {0.757812f, 0.851562f, 0.578125f, 0.304688f}, {0.886719f, 0.789062f, 0.839844f, 0.488281f},
+ {0.000000f, 0.925781f, 0.140625f, 0.679688f}, {0.523438f, 0.121094f, 0.617188f, 0.355469f},
+ {0.406250f, 0.886719f, 0.710938f, 0.984375f}, {0.769531f, 0.035156f, 0.285156f, 0.503906f},
+ {0.890625f, 0.242188f, 0.906250f, 0.292969f}, {0.574219f, 0.531250f, 0.242188f, 0.703125f},
+ {0.171875f, 0.179688f, 0.121094f, 0.769531f}, {0.527344f, 0.718750f, 0.308594f, 0.968750f},
+ {0.433594f, 0.226562f, 0.171875f, 0.171875f}, {0.281250f, 0.105469f, 0.523438f, 0.125000f},
+ {0.761719f, 0.285156f, 0.417969f, 0.402344f}, {0.328125f, 0.515625f, 0.574219f, 0.691406f},
+ {0.406250f, 0.164062f, 0.910156f, 0.792969f}, {0.652344f, 0.996094f, 0.101562f, 0.109375f},
+ {0.062500f, 0.121094f, 0.507812f, 0.832031f}, {0.320312f, 0.378906f, 0.742188f, 0.242188f},
+ {0.390625f, 0.316406f, 0.175781f, 0.703125f}, {0.527344f, 0.156250f, 0.558594f, 0.417969f},
+ {0.933594f, 0.972656f, 0.085938f, 0.000000f}, {0.160156f, 0.199219f, 0.722656f, 0.734375f},
+ {0.242188f, 0.589844f, 0.898438f, 0.378906f}, {0.386719f, 0.941406f, 0.664062f, 0.503906f},
+ {0.652344f, 0.851562f, 0.339844f, 0.695312f}, {0.910156f, 0.628906f, 0.765625f, 0.953125f},
+ {0.343750f, 0.367188f, 0.218750f, 0.460938f}, {0.503906f, 0.136719f, 0.386719f, 0.769531f},
+ {0.078125f, 0.816406f, 0.117188f, 0.976562f}, {0.632812f, 0.257812f, 0.523438f, 0.511719f},
+ {0.378906f, 0.335938f, 0.722656f, 0.281250f}, {0.203125f, 0.769531f, 0.789062f, 0.558594f},
+ {0.511719f, 0.882812f, 0.144531f, 0.953125f}, {0.347656f, 0.117188f, 0.695312f, 0.769531f},
+ {0.253906f, 0.371094f, 0.964844f, 0.523438f}, {0.542969f, 0.425781f, 0.355469f, 0.878906f},
+ {0.382812f, 0.082031f, 0.167969f, 0.109375f}, {0.910156f, 0.894531f, 0.582031f, 0.363281f},
+ {0.132812f, 0.707031f, 0.472656f, 0.980469f}, {0.765625f, 0.210938f, 0.023438f, 0.445312f},
+ {0.000000f, 0.304688f, 0.976562f, 0.148438f}, {0.820312f, 0.542969f, 0.695312f, 0.023438f},
+ {0.230469f, 0.925781f, 0.625000f, 0.398438f}, {0.042969f, 0.429688f, 0.902344f, 0.792969f},
+ {0.554688f, 0.152344f, 0.738281f, 0.117188f}, {0.339844f, 0.730469f, 0.320312f, 0.480469f},
+ {0.804688f, 0.234375f, 0.960938f, 0.187500f}, {0.714844f, 0.375000f, 0.183594f, 0.347656f},
+ {0.578125f, 0.492188f, 0.539062f, 0.457031f}, {0.859375f, 0.203125f, 0.230469f, 0.550781f},
+ {0.769531f, 0.730469f, 0.832031f, 0.175781f}, {0.484375f, 0.789062f, 0.453125f, 0.031250f},
+ {0.308594f, 0.953125f, 0.718750f, 0.746094f}, {0.066406f, 0.554688f, 0.890625f, 0.214844f},
+ {0.378906f, 0.105469f, 0.085938f, 0.121094f}, {0.503906f, 0.195312f, 0.316406f, 0.605469f},
+ {0.949219f, 0.867188f, 0.167969f, 0.429688f}, {0.546875f, 0.531250f, 0.824219f, 0.542969f},
+ {0.316406f, 0.832031f, 0.207031f, 0.718750f}, {0.117188f, 0.390625f, 0.554688f, 0.460938f},
+ {0.515625f, 0.152344f, 0.492188f, 0.011719f}, {0.906250f, 0.597656f, 0.117188f, 0.156250f},
+ {0.046875f, 0.261719f, 0.417969f, 0.234375f}, {0.625000f, 0.542969f, 0.773438f, 0.707031f},
+ {0.386719f, 0.667969f, 0.476562f, 0.121094f}, {0.308594f, 0.062500f, 0.320312f, 0.593750f},
+ {0.167969f, 0.285156f, 0.886719f, 0.417969f}, {0.601562f, 0.199219f, 0.042969f, 0.777344f},
+ {0.835938f, 0.425781f, 0.187500f, 0.082031f}, {0.214844f, 0.343750f, 0.539062f, 0.648438f},
+ {0.023438f, 0.632812f, 0.398438f, 0.390625f}, {0.640625f, 0.093750f, 0.671875f, 0.195312f},
+ {0.984375f, 0.820312f, 0.445312f, 0.074219f}, {0.382812f, 0.921875f, 0.617188f, 0.449219f},
+ {0.910156f, 0.492188f, 0.828125f, 0.531250f}, {0.832031f, 0.683594f, 0.941406f, 0.859375f},
+ {0.125000f, 0.859375f, 0.046875f, 0.941406f}, {0.929688f, 0.058594f, 0.750000f, 0.617188f},
+ {0.218750f, 0.816406f, 0.835938f, 0.273438f}, {0.730469f, 0.222656f, 0.296875f, 0.441406f},
+ {0.574219f, 0.652344f, 0.441406f, 0.921875f}, {0.832031f, 0.886719f, 0.878906f, 0.484375f},
+ {0.117188f, 0.835938f, 0.226562f, 0.085938f}, {0.773438f, 0.050781f, 0.476562f, 0.781250f},
+ {0.343750f, 0.789062f, 0.292969f, 0.929688f}, {0.695312f, 0.468750f, 0.382812f, 0.535156f},
+ {0.882812f, 0.281250f, 0.019531f, 0.898438f}, {0.785156f, 0.125000f, 0.804688f, 0.160156f},
+ {0.304688f, 0.507812f, 0.101562f, 0.640625f}, {0.093750f, 0.230469f, 0.546875f, 0.105469f},
+ {0.839844f, 0.968750f, 0.929688f, 0.253906f}, {0.593750f, 0.476562f, 0.652344f, 0.605469f},
+ {0.773438f, 0.011719f, 0.816406f, 0.046875f}, {0.976562f, 0.527344f, 0.304688f, 0.890625f},
+ {0.464844f, 0.941406f, 0.187500f, 0.183594f}, {0.660156f, 0.460938f, 0.921875f, 0.804688f},
+ {0.875000f, 0.718750f, 0.328125f, 0.335938f}, {0.933594f, 0.175781f, 0.246094f, 0.214844f},
+ {0.011719f, 0.636719f, 0.000000f, 0.640625f}, {0.628906f, 0.980469f, 0.632812f, 0.925781f},
+ {0.187500f, 0.246094f, 0.281250f, 0.261719f}, {0.835938f, 0.046875f, 0.921875f, 0.617188f},
+ {0.273438f, 0.832031f, 0.660156f, 0.542969f}, {0.691406f, 0.648438f, 0.226562f, 0.726562f},
+ {0.988281f, 0.882812f, 0.527344f, 0.675781f}, {0.597656f, 0.039062f, 0.351562f, 0.921875f},
+ {0.304688f, 0.253906f, 0.152344f, 0.515625f}, {0.902344f, 0.804688f, 0.484375f, 0.277344f},
+ {0.656250f, 0.632812f, 0.113281f, 0.898438f}, {0.257812f, 0.078125f, 0.410156f, 0.742188f},
+ {0.132812f, 0.566406f, 0.000000f, 0.828125f}, {0.210938f, 0.914062f, 0.781250f, 0.042969f},
+ {0.394531f, 0.675781f, 0.613281f, 0.949219f}, {0.171875f, 0.117188f, 0.929688f, 0.664062f},
+ {0.910156f, 0.351562f, 0.300781f, 0.808594f}, {0.605469f, 0.160156f, 0.160156f, 0.503906f},
+ {0.214844f, 0.695312f, 0.597656f, 0.980469f}, {0.550781f, 0.246094f, 0.207031f, 0.562500f},
+ {0.847656f, 0.335938f, 0.789062f, 0.851562f}, {0.152344f, 0.601562f, 0.519531f, 0.277344f},
+ {0.722656f, 0.738281f, 0.742188f, 0.171875f}, {0.226562f, 0.296875f, 0.375000f, 0.777344f},
+ {0.625000f, 0.031250f, 0.683594f, 0.078125f}, {0.984375f, 0.917969f, 0.867188f, 0.851562f},
+ {0.171875f, 0.710938f, 0.339844f, 0.585938f}, {0.351562f, 0.996094f, 0.011719f, 0.746094f},
+ {0.277344f, 0.765625f, 0.636719f, 0.406250f}, {0.101562f, 0.183594f, 0.964844f, 0.890625f},
+ {0.539062f, 0.332031f, 0.089844f, 0.542969f}, {0.847656f, 0.472656f, 0.218750f, 0.960938f},
+ {0.722656f, 0.621094f, 0.515625f, 0.015625f}, {0.109375f, 0.750000f, 0.750000f, 0.859375f},
+ {0.355469f, 0.835938f, 0.347656f, 0.167969f}, {0.679688f, 0.976562f, 0.949219f, 0.562500f},
+ {0.496094f, 0.468750f, 0.148438f, 0.812500f}, {0.292969f, 0.281250f, 0.789062f, 0.945312f},
+ {0.789062f, 0.585938f, 0.882812f, 0.335938f}, {0.062500f, 0.324219f, 0.007812f, 0.679688f},
+ {0.695312f, 0.410156f, 0.214844f, 0.597656f}, {0.191406f, 0.140625f, 0.371094f, 0.292969f},
+ {0.636719f, 0.933594f, 0.261719f, 0.054688f}, {0.078125f, 0.351562f, 0.675781f, 0.753906f},
+ {0.515625f, 0.585938f, 0.191406f, 0.195312f}, {0.886719f, 0.742188f, 0.625000f, 0.332031f},
+ {0.441406f, 0.457031f, 0.988281f, 0.726562f}, {0.253906f, 0.265625f, 0.015625f, 0.156250f},
+ {0.980469f, 0.511719f, 0.355469f, 0.570312f}, {0.031250f, 0.628906f, 0.824219f, 0.296875f},
+ {0.617188f, 0.347656f, 0.949219f, 0.203125f}, {0.566406f, 0.875000f, 0.636719f, 0.621094f},
+ {0.058594f, 0.664062f, 0.246094f, 0.257812f}, {0.515625f, 0.734375f, 0.574219f, 0.437500f},
+ {0.183594f, 0.406250f, 0.167969f, 0.796875f}, {0.414062f, 0.062500f, 0.273438f, 0.343750f},
+ {0.703125f, 0.292969f, 0.843750f, 0.855469f}, {0.222656f, 0.781250f, 0.011719f, 0.152344f},
+ {0.023438f, 0.648438f, 0.437500f, 0.312500f}, {0.292969f, 0.382812f, 0.582031f, 0.738281f},
+ {0.726562f, 0.851562f, 0.074219f, 0.628906f}, {0.066406f, 0.050781f, 0.406250f, 0.121094f},
+ {0.171875f, 0.300781f, 0.843750f, 0.464844f}, {0.585938f, 0.542969f, 0.539062f, 0.386719f},
+ {0.804688f, 0.839844f, 0.750000f, 0.039062f}, {0.453125f, 0.500000f, 0.882812f, 0.707031f},
+ {0.722656f, 0.757812f, 0.445312f, 0.484375f}, {0.066406f, 0.578125f, 0.382812f, 0.007812f},
+ {0.429688f, 0.449219f, 0.835938f, 0.789062f}, {0.347656f, 0.109375f, 0.085938f, 0.089844f},
+ {0.203125f, 0.378906f, 0.781250f, 0.343750f}, {0.085938f, 0.742188f, 0.269531f, 0.835938f},
+ {0.742188f, 0.585938f, 0.929688f, 0.179688f}, {0.394531f, 0.191406f, 0.839844f, 0.632812f},
+ {0.964844f, 0.960938f, 0.210938f, 0.328125f}, {0.515625f, 0.464844f, 0.570312f, 0.539062f},
+ {0.460938f, 0.828125f, 0.710938f, 0.226562f}, {0.941406f, 0.042969f, 0.351562f, 0.613281f},
+ {0.671875f, 0.425781f, 0.085938f, 0.386719f}, {0.085938f, 0.882812f, 0.484375f, 0.128906f},
+ {0.437500f, 0.617188f, 0.660156f, 0.253906f}, {0.125000f, 0.058594f, 0.015625f, 0.324219f},
+ {0.929688f, 0.468750f, 0.550781f, 0.632812f}, {0.792969f, 0.824219f, 0.425781f, 0.468750f},
+ {0.636719f, 0.023438f, 0.949219f, 0.007812f}, {0.335938f, 0.937500f, 0.046875f, 0.667969f},
+ {0.882812f, 0.437500f, 0.468750f, 0.339844f}, {0.437500f, 0.125000f, 0.976562f, 0.976562f},
+ {0.085938f, 0.671875f, 0.082031f, 0.394531f}, {0.398438f, 0.562500f, 0.433594f, 0.308594f},
+ {0.773438f, 0.351562f, 0.937500f, 0.925781f}, {0.664062f, 0.453125f, 0.742188f, 0.523438f},
+ {0.871094f, 0.046875f, 0.289062f, 0.351562f}, {0.792969f, 0.871094f, 0.847656f, 0.832031f},
+ {0.195312f, 0.132812f, 0.378906f, 0.261719f}, {0.425781f, 0.964844f, 0.687500f, 0.187500f},
+ {0.996094f, 0.570312f, 0.933594f, 0.734375f}, {0.253906f, 0.011719f, 0.429688f, 0.316406f},
+ {0.906250f, 0.519531f, 0.820312f, 0.457031f}, {0.140625f, 0.132812f, 0.644531f, 0.250000f},
+ {0.820312f, 0.667969f, 0.074219f, 0.035156f}, {0.089844f, 0.902344f, 0.500000f, 0.488281f},
+ {0.449219f, 0.781250f, 0.324219f, 0.871094f}, {0.339844f, 0.000000f, 0.562500f, 0.230469f},
+ {0.246094f, 0.546875f, 0.695312f, 0.101562f}, {0.578125f, 0.644531f, 0.898438f, 0.804688f},
+ {0.460938f, 0.757812f, 0.496094f, 0.367188f}, {0.796875f, 0.437500f, 0.117188f, 0.476562f},
+ {0.359375f, 0.304688f, 0.347656f, 0.984375f}, {0.015625f, 0.906250f, 0.542969f, 0.015625f},
+ {0.175781f, 0.007812f, 0.074219f, 0.605469f}, {0.660156f, 0.703125f, 0.718750f, 0.882812f},
+ {0.496094f, 0.183594f, 0.582031f, 0.382812f}, {0.410156f, 0.761719f, 0.687500f, 0.968750f},
+ {0.199219f, 0.093750f, 0.117188f, 0.460938f}, {0.285156f, 0.222656f, 0.519531f, 0.070312f},
+ {0.445312f, 0.539062f, 0.855469f, 0.859375f}, {0.746094f, 0.023438f, 0.445312f, 0.039062f},
+ {0.996094f, 0.828125f, 0.957031f, 0.558594f}, {0.625000f, 0.914062f, 0.714844f, 0.707031f},
+ {0.890625f, 0.574219f, 0.484375f, 0.917969f}, {0.144531f, 0.089844f, 0.355469f, 0.527344f},
+ {0.367188f, 0.710938f, 0.894531f, 0.390625f}, {0.906250f, 0.160156f, 0.746094f, 0.441406f},
+ {0.531250f, 0.218750f, 0.671875f, 0.062500f}, {0.828125f, 0.605469f, 0.957031f, 0.851562f},
+ {0.324219f, 0.414062f, 0.617188f, 0.992188f}, {0.406250f, 0.917969f, 0.113281f, 0.601562f},
+ {0.125000f, 0.023438f, 0.480469f, 0.160156f}, {0.296875f, 0.328125f, 0.199219f, 0.828125f},
+ {0.953125f, 0.191406f, 0.070312f, 0.429688f}, {0.527344f, 0.941406f, 0.730469f, 0.199219f},
+ {0.609375f, 0.289062f, 0.140625f, 0.894531f}, {0.929688f, 0.160156f, 0.949219f, 0.285156f},
+ {0.503906f, 0.812500f, 0.601562f, 0.582031f}, {0.863281f, 0.484375f, 0.421875f, 0.464844f},
+ {0.457031f, 0.082031f, 0.058594f, 0.078125f}, {0.164062f, 0.398438f, 0.644531f, 0.968750f},
+ {0.097656f, 0.281250f, 0.300781f, 0.425781f}, {0.781250f, 0.695312f, 0.945312f, 0.003906f},
+ {0.015625f, 0.328125f, 0.871094f, 0.695312f}, {0.851562f, 0.179688f, 0.257812f, 0.292969f},
+ {0.531250f, 0.777344f, 0.144531f, 0.765625f}, {0.328125f, 0.527344f, 0.859375f, 0.863281f},
+ {0.824219f, 0.296875f, 0.375000f, 0.437500f}, {0.726562f, 0.917969f, 0.808594f, 0.062500f},
+ {0.273438f, 0.394531f, 0.109375f, 0.164062f}, {0.417969f, 0.515625f, 0.332031f, 0.378906f},
+ {0.097656f, 0.761719f, 0.695312f, 0.792969f}, {0.472656f, 0.652344f, 0.609375f, 0.898438f},
+ {0.039062f, 0.171875f, 0.277344f, 0.511719f}, {0.261719f, 0.976562f, 0.136719f, 0.695312f},
+ {0.828125f, 0.238281f, 0.648438f, 0.140625f}, {0.585938f, 0.792969f, 0.234375f, 0.632812f},
+ {0.007812f, 0.082031f, 0.593750f, 0.218750f}, {0.492188f, 0.281250f, 0.152344f, 0.097656f},
+ {0.234375f, 0.636719f, 0.199219f, 0.652344f}, {0.457031f, 0.402344f, 0.542969f, 0.035156f},
+ {0.691406f, 0.714844f, 0.050781f, 0.476562f}, {0.054688f, 0.808594f, 0.625000f, 0.382812f},
+ {0.628906f, 0.371094f, 0.125000f, 0.617188f}, {0.480469f, 0.253906f, 0.261719f, 0.933594f},
+ {0.558594f, 0.699219f, 0.015625f, 0.667969f}, {0.414062f, 0.394531f, 0.585938f, 0.902344f},
+ {0.964844f, 0.214844f, 0.230469f, 0.746094f}, {0.726562f, 0.070312f, 0.968750f, 0.136719f},
+ {0.609375f, 0.714844f, 0.742188f, 0.628906f}, {0.871094f, 0.171875f, 0.109375f, 0.425781f},
+ {0.035156f, 0.988281f, 0.421875f, 0.917969f}, {0.742188f, 0.253906f, 0.781250f, 0.710938f},
+ {0.972656f, 0.039062f, 0.605469f, 0.554688f}, {0.285156f, 0.191406f, 0.968750f, 0.140625f},
+ {0.554688f, 0.531250f, 0.851562f, 0.656250f}, {0.949219f, 0.101562f, 0.406250f, 0.828125f},
+ {0.710938f, 0.394531f, 0.242188f, 0.507812f}, {0.312500f, 0.953125f, 0.796875f, 0.265625f},
+ {0.816406f, 0.566406f, 0.156250f, 0.683594f}, {0.902344f, 0.433594f, 0.425781f, 0.121094f},
+ {0.726562f, 0.921875f, 0.210938f, 0.820312f}, {0.953125f, 0.386719f, 0.054688f, 0.726562f},
+ {0.132812f, 0.988281f, 0.761719f, 0.320312f}, {0.847656f, 0.167969f, 0.320312f, 0.996094f},
+ {0.007812f, 0.445312f, 0.398438f, 0.406250f}, {0.261719f, 0.621094f, 0.632812f, 0.210938f},
+ {0.472656f, 0.343750f, 0.082031f, 0.011719f}, {0.804688f, 0.882812f, 0.207031f, 0.656250f},
+ {0.574219f, 0.429688f, 0.140625f, 0.816406f}, {0.429688f, 0.988281f, 0.265625f, 0.937500f},
+ {0.246094f, 0.757812f, 0.488281f, 0.242188f}, {0.109375f, 0.109375f, 0.042969f, 0.675781f},
+ {0.691406f, 0.675781f, 0.367188f, 0.507812f}, {0.992188f, 0.234375f, 0.292969f, 0.269531f},
+ {0.500000f, 0.730469f, 0.808594f, 0.753906f}, {0.761719f, 0.128906f, 0.984375f, 0.312500f},
+ {0.234375f, 0.667969f, 0.648438f, 0.964844f}, {0.851562f, 0.398438f, 0.550781f, 0.664062f},
+ {0.039062f, 0.523438f, 0.312500f, 0.136719f}, {0.152344f, 0.699219f, 0.492188f, 0.406250f},
+ {0.644531f, 0.976562f, 0.187500f, 0.945312f}, {0.253906f, 0.320312f, 0.710938f, 0.210938f},
+ {0.687500f, 0.667969f, 0.546875f, 0.761719f}, {0.570312f, 0.898438f, 0.757812f, 0.667969f},
+ {0.882812f, 0.769531f, 0.097656f, 0.144531f}, {0.359375f, 0.519531f, 0.460938f, 0.878906f},
+ {0.597656f, 0.105469f, 0.675781f, 0.472656f}, {0.285156f, 0.976562f, 0.523438f, 0.996094f},
+ {0.750000f, 0.250000f, 0.421875f, 0.082031f}, {0.050781f, 0.578125f, 0.980469f, 0.523438f},
+ {0.625000f, 0.738281f, 0.742188f, 0.683594f}, {0.500000f, 0.214844f, 0.269531f, 0.937500f},
+ {0.000000f, 0.992188f, 0.917969f, 0.296875f}, {0.187500f, 0.144531f, 0.832031f, 0.726562f},
+ {0.988281f, 0.277344f, 0.156250f, 0.226562f}, {0.769531f, 0.363281f, 0.398438f, 0.097656f},
+ {0.562500f, 0.570312f, 0.898438f, 0.437500f}, {0.687500f, 0.851562f, 0.531250f, 0.246094f},
+ {0.941406f, 0.410156f, 0.839844f, 0.027344f}, {0.730469f, 0.511719f, 0.308594f, 0.867188f},
+ {0.300781f, 0.199219f, 0.796875f, 0.492188f}, {0.914062f, 0.828125f, 0.496094f, 0.781250f},
+ {0.132812f, 0.949219f, 0.703125f, 0.171875f}, {0.953125f, 0.527344f, 0.445312f, 0.941406f},
+ {0.582031f, 0.230469f, 0.878906f, 0.691406f}, {0.339844f, 0.085938f, 0.781250f, 0.816406f},
+ {0.804688f, 0.890625f, 0.570312f, 0.062500f}, {0.082031f, 0.164062f, 0.312500f, 0.523438f},
+ {0.765625f, 0.785156f, 0.859375f, 0.101562f}, {0.312500f, 0.925781f, 0.453125f, 0.359375f},
+ {0.230469f, 0.558594f, 0.691406f, 0.578125f}, {0.535156f, 0.335938f, 0.378906f, 0.277344f},
+ {0.167969f, 0.441406f, 0.273438f, 0.777344f}, {0.941406f, 0.875000f, 0.855469f, 0.000000f},
+ {0.507812f, 0.371094f, 0.160156f, 0.507812f}, {0.394531f, 0.800781f, 0.050781f, 0.191406f},
+ {0.148438f, 0.597656f, 0.304688f, 0.261719f}, {0.679688f, 0.960938f, 0.457031f, 0.894531f},
+ {0.226562f, 0.855469f, 0.027344f, 0.410156f}, {0.843750f, 0.675781f, 0.765625f, 0.093750f},
+ {0.601562f, 0.796875f, 0.937500f, 0.222656f}, {0.097656f, 0.148438f, 0.488281f, 0.785156f},
+ {0.148438f, 0.300781f, 0.320312f, 0.035156f}, {0.539062f, 0.039062f, 0.906250f, 0.632812f},
+ {0.070312f, 0.609375f, 0.609375f, 0.363281f}, {0.671875f, 0.816406f, 0.972656f, 0.500000f},
+ {0.371094f, 0.312500f, 0.699219f, 0.585938f}, {0.589844f, 0.699219f, 0.136719f, 0.148438f},
+ {0.328125f, 0.261719f, 0.031250f, 0.773438f}, {0.546875f, 0.746094f, 0.910156f, 0.277344f},
+ {0.105469f, 0.195312f, 0.589844f, 0.472656f}, {0.679688f, 0.519531f, 0.773438f, 0.109375f},
+ {0.937500f, 0.246094f, 0.996094f, 0.722656f}, {0.179688f, 0.324219f, 0.558594f, 0.195312f},
+ {0.753906f, 0.562500f, 0.878906f, 0.562500f}, {0.601562f, 0.488281f, 0.222656f, 0.355469f},
+ {0.867188f, 0.949219f, 0.773438f, 0.105469f}, {0.210938f, 0.808594f, 0.167969f, 0.867188f},
+ {0.648438f, 0.363281f, 0.574219f, 0.058594f}, {0.078125f, 0.468750f, 0.410156f, 0.574219f},
+ {0.375000f, 0.878906f, 0.035156f, 0.515625f}, {0.679688f, 0.796875f, 0.234375f, 0.351562f},
+ {0.316406f, 0.007812f, 0.765625f, 0.742188f}, {0.792969f, 0.609375f, 0.375000f, 0.625000f},
+ {0.402344f, 0.234375f, 0.890625f, 0.808594f}, {0.019531f, 0.871094f, 0.007812f, 0.054688f},
+ {0.824219f, 0.546875f, 0.332031f, 0.546875f}, {0.320312f, 0.015625f, 0.812500f, 0.363281f},
+ {0.222656f, 0.144531f, 0.390625f, 0.246094f}, {0.722656f, 0.363281f, 0.167969f, 0.597656f},
+ {0.417969f, 0.859375f, 0.031250f, 0.792969f}, {0.179688f, 0.648438f, 0.800781f, 0.167969f},
+ {0.917969f, 0.402344f, 0.632812f, 0.351562f}, {0.246094f, 0.007812f, 0.058594f, 0.207031f},
+ {0.964844f, 0.839844f, 0.191406f, 0.585938f}, {0.367188f, 0.097656f, 0.503906f, 0.820312f},
+ {0.878906f, 0.609375f, 0.039062f, 0.117188f}, {0.589844f, 0.871094f, 0.640625f, 0.914062f},
+ {0.675781f, 0.058594f, 0.230469f, 0.542969f}, {0.296875f, 0.796875f, 0.773438f, 0.613281f},
+ {0.898438f, 0.484375f, 0.019531f, 0.828125f}, {0.140625f, 0.007812f, 0.730469f, 0.937500f},
+ {0.355469f, 0.304688f, 0.363281f, 0.578125f}, {0.191406f, 0.753906f, 0.070312f, 0.722656f},
+ {0.535156f, 0.906250f, 0.902344f, 0.433594f}, {0.636719f, 0.578125f, 0.031250f, 0.992188f},
+ {0.367188f, 0.019531f, 0.992188f, 0.332031f}, {0.738281f, 0.683594f, 0.343750f, 0.554688f},
+ {0.027344f, 0.320312f, 0.250000f, 0.128906f}, {0.285156f, 0.441406f, 0.167969f, 0.296875f},
+ {0.933594f, 0.605469f, 0.488281f, 0.234375f}, {0.179688f, 0.500000f, 0.980469f, 0.785156f},
+ {0.660156f, 0.304688f, 0.734375f, 0.433594f}, {0.011719f, 0.035156f, 0.183594f, 0.207031f},
+ {0.855469f, 0.843750f, 0.906250f, 0.703125f}, {0.371094f, 0.617188f, 0.042969f, 0.988281f},
+ {0.105469f, 0.269531f, 0.480469f, 0.398438f}, {0.656250f, 0.519531f, 0.640625f, 0.328125f},
+ {0.773438f, 0.097656f, 0.941406f, 0.843750f}, {0.312500f, 0.472656f, 0.539062f, 0.964844f},
+ {0.894531f, 0.703125f, 0.238281f, 0.046875f}, {0.109375f, 0.132812f, 0.703125f, 0.769531f},
+ {0.429688f, 0.273438f, 0.175781f, 0.585938f}, {0.046875f, 0.492188f, 0.574219f, 0.347656f},
+ {0.382812f, 0.355469f, 0.285156f, 0.953125f}, {0.472656f, 0.636719f, 0.660156f, 0.437500f},
+ {0.769531f, 0.847656f, 0.093750f, 0.542969f}, {0.347656f, 0.246094f, 0.832031f, 0.910156f},
+ {0.250000f, 0.726562f, 0.371094f, 0.175781f}, {0.875000f, 0.136719f, 0.273438f, 0.238281f},
+ {0.492188f, 0.484375f, 0.500000f, 0.671875f}, {0.210938f, 0.562500f, 0.871094f, 0.089844f},
+ {0.820312f, 0.078125f, 0.234375f, 0.890625f}, {0.718750f, 0.957031f, 0.812500f, 0.621094f},
+ {0.398438f, 0.121094f, 0.515625f, 0.949219f}, {0.035156f, 0.804688f, 0.300781f, 0.367188f},
+ {0.308594f, 0.015625f, 0.386719f, 0.589844f}, {0.640625f, 0.636719f, 0.707031f, 0.296875f},
+ {0.054688f, 0.898438f, 0.101562f, 0.023438f}, {0.468750f, 0.042969f, 0.445312f, 0.789062f},
+ {0.359375f, 0.285156f, 0.652344f, 0.714844f}, {0.027344f, 0.167969f, 0.925781f, 0.421875f},
+ {0.554688f, 0.539062f, 0.710938f, 0.929688f}, {0.890625f, 0.621094f, 0.332031f, 0.226562f},
+ {0.164062f, 0.093750f, 0.906250f, 0.109375f}, {0.578125f, 0.265625f, 0.855469f, 0.882812f},
+ {0.460938f, 0.910156f, 0.671875f, 0.042969f}, {0.914062f, 0.367188f, 0.105469f, 0.250000f},
+ {0.734375f, 0.070312f, 0.621094f, 0.492188f}, {0.542969f, 0.183594f, 0.996094f, 0.308594f},
+ {0.980469f, 0.421875f, 0.238281f, 0.703125f}, {0.128906f, 0.621094f, 0.503906f, 0.933594f},
+ {0.632812f, 0.925781f, 0.906250f, 0.839844f}, {0.953125f, 0.218750f, 0.597656f, 0.109375f},
+ {0.039062f, 0.589844f, 0.960938f, 0.402344f}, {0.667969f, 0.714844f, 0.218750f, 0.550781f},
+ {0.472656f, 0.484375f, 0.312500f, 0.718750f}, {0.558594f, 0.152344f, 0.582031f, 0.894531f},
+ {0.152344f, 0.355469f, 0.691406f, 0.023438f}, {0.691406f, 0.671875f, 0.445312f, 0.410156f},
+ {0.753906f, 0.316406f, 0.867188f, 0.496094f}, {0.527344f, 0.546875f, 0.562500f, 0.656250f},
+ {0.125000f, 0.714844f, 0.304688f, 0.042969f}, {0.390625f, 0.218750f, 0.988281f, 0.320312f},
+ {0.218750f, 0.894531f, 0.585938f, 0.183594f}, {0.511719f, 0.691406f, 0.187500f, 0.761719f},
+ {0.457031f, 0.101562f, 0.457031f, 0.296875f}, {0.050781f, 0.628906f, 0.671875f, 0.371094f},
+ {0.816406f, 0.148438f, 0.554688f, 0.054688f}, {0.082031f, 0.371094f, 0.386719f, 0.269531f},
+ {0.417969f, 0.472656f, 0.753906f, 0.617188f}, {0.839844f, 0.175781f, 0.109375f, 0.750000f},
+ {0.218750f, 0.933594f, 0.656250f, 0.421875f}, {0.527344f, 0.742188f, 0.910156f, 0.910156f},
+ {0.875000f, 0.050781f, 0.402344f, 0.589844f}, {0.390625f, 0.988281f, 0.082031f, 0.972656f},
+ {0.460938f, 0.652344f, 0.355469f, 0.148438f}, {0.921875f, 0.464844f, 0.546875f, 0.847656f},
+ {0.601562f, 0.113281f, 0.132812f, 0.484375f}, {0.710938f, 0.964844f, 0.773438f, 0.089844f},
+ {0.273438f, 0.761719f, 0.593750f, 0.550781f}, {0.433594f, 0.664062f, 0.199219f, 0.156250f},
+ {0.203125f, 0.222656f, 0.355469f, 0.664062f}, {0.000000f, 0.835938f, 0.812500f, 0.609375f},
+ {0.625000f, 0.320312f, 0.738281f, 0.445312f}, {0.804688f, 0.410156f, 0.914062f, 0.304688f},
+ {0.523438f, 0.617188f, 0.644531f, 0.695312f}, {0.738281f, 0.070312f, 0.121094f, 0.179688f},
+ {0.886719f, 0.210938f, 0.890625f, 0.859375f}, {0.210938f, 0.984375f, 0.531250f, 0.730469f},
+ {0.988281f, 0.464844f, 0.000000f, 0.312500f}, {0.628906f, 0.527344f, 0.726562f, 0.078125f},
+ {0.433594f, 0.902344f, 0.472656f, 0.765625f}, {0.789062f, 0.058594f, 0.171875f, 0.957031f},
+ {0.042969f, 0.656250f, 0.570312f, 0.441406f}, {0.652344f, 0.796875f, 0.656250f, 0.832031f},
+ {0.914062f, 0.371094f, 0.339844f, 0.332031f}, {0.164062f, 0.875000f, 0.453125f, 0.515625f},
+ {0.968750f, 0.476562f, 0.167969f, 0.750000f}, {0.777344f, 0.683594f, 0.683594f, 0.160156f},
+ {0.492188f, 0.851562f, 0.019531f, 0.843750f}, {0.855469f, 0.144531f, 0.808594f, 0.972656f},
+ {0.960938f, 0.449219f, 0.332031f, 0.453125f}, {0.265625f, 0.781250f, 0.531250f, 0.898438f},
+ {0.781250f, 0.394531f, 0.851562f, 0.183594f}, {0.921875f, 0.855469f, 0.015625f, 0.628906f},
+ {0.285156f, 0.066406f, 0.132812f, 0.378906f}, {0.421875f, 0.992188f, 0.507812f, 0.796875f},
+ {0.816406f, 0.753906f, 0.269531f, 0.695312f}, {0.972656f, 0.570312f, 0.468750f, 0.449219f},
+ {0.113281f, 0.148438f, 0.160156f, 0.554688f}, {0.199219f, 0.726562f, 0.796875f, 0.992188f},
+ {0.285156f, 0.464844f, 0.289062f, 0.164062f}, {0.070312f, 0.785156f, 0.453125f, 0.875000f},
+ {0.375000f, 0.832031f, 0.843750f, 0.437500f}, {0.500000f, 0.269531f, 0.125000f, 0.023438f},
+ {0.445312f, 0.726562f, 0.687500f, 0.507812f}, {0.089844f, 0.457031f, 0.277344f, 0.289062f},
+ {0.839844f, 0.046875f, 0.359375f, 0.917969f}, {0.773438f, 0.300781f, 0.761719f, 0.050781f},
+ {0.347656f, 0.945312f, 0.882812f, 0.640625f}, {0.101562f, 0.902344f, 0.117188f, 0.460938f},
+ {0.816406f, 0.785156f, 0.937500f, 0.265625f}, {0.445312f, 0.453125f, 0.351562f, 0.765625f},
+ {0.226562f, 0.171875f, 0.726562f, 0.351562f}, {0.324219f, 0.921875f, 0.082031f, 0.839844f},
+ {0.808594f, 0.402344f, 0.421875f, 0.988281f}, {0.027344f, 0.113281f, 0.492188f, 0.398438f},
+ {0.855469f, 0.589844f, 0.109375f, 0.480469f}, {0.648438f, 0.339844f, 0.878906f, 0.066406f},
+ {0.976562f, 0.945312f, 0.257812f, 0.539062f}, {0.765625f, 0.433594f, 0.953125f, 0.160156f},
+ {0.250000f, 0.726562f, 0.140625f, 0.820312f}, {0.570312f, 0.261719f, 0.210938f, 0.894531f},
+ {0.964844f, 0.789062f, 0.613281f, 0.097656f}, {0.160156f, 0.117188f, 0.300781f, 0.210938f},
+ {0.488281f, 0.839844f, 0.820312f, 0.859375f}, {0.707031f, 0.542969f, 0.019531f, 0.496094f},
+ {0.605469f, 0.273438f, 0.714844f, 0.007812f}, {0.125000f, 0.820312f, 0.222656f, 0.718750f},
+ {0.750000f, 0.363281f, 0.652344f, 0.339844f}, {0.207031f, 0.195312f, 0.804688f, 0.636719f},
+ {0.050781f, 0.718750f, 0.300781f, 0.039062f}, {0.492188f, 0.406250f, 0.406250f, 0.906250f},
+ {0.910156f, 0.152344f, 0.992188f, 0.796875f}, {0.832031f, 0.015625f, 0.683594f, 0.214844f},
+ {0.570312f, 0.937500f, 0.085938f, 0.738281f}, {0.984375f, 0.570312f, 0.472656f, 0.371094f},
+ {0.468750f, 0.050781f, 0.394531f, 0.121094f}, {0.253906f, 0.886719f, 0.066406f, 0.820312f},
+ {0.328125f, 0.769531f, 0.332031f, 0.535156f}, {0.937500f, 0.921875f, 0.441406f, 0.011719f},
+ {0.640625f, 0.718750f, 0.199219f, 0.488281f}, {0.289062f, 0.031250f, 0.390625f, 0.136719f},
+ {0.007812f, 0.773438f, 0.992188f, 0.601562f}, {0.566406f, 0.398438f, 0.230469f, 0.406250f},
+ {0.171875f, 0.191406f, 0.785156f, 0.855469f}, {0.933594f, 0.343750f, 0.046875f, 0.285156f},
+ {0.121094f, 0.949219f, 0.921875f, 0.003906f}, {0.292969f, 0.218750f, 0.097656f, 0.558594f},
+ {0.441406f, 0.027344f, 0.734375f, 0.199219f}, {0.515625f, 0.597656f, 0.976562f, 0.050781f},
+ {0.250000f, 0.402344f, 0.066406f, 0.425781f}, {0.363281f, 0.300781f, 0.859375f, 0.250000f},
+ {0.203125f, 0.546875f, 0.433594f, 0.066406f}, {0.117188f, 0.363281f, 0.613281f, 0.644531f},
+ {0.542969f, 0.726562f, 0.191406f, 0.535156f}, {0.410156f, 0.199219f, 0.964844f, 0.125000f},
+ {0.140625f, 0.578125f, 0.261719f, 0.316406f}, {0.667969f, 0.660156f, 0.394531f, 0.496094f},
+ {0.488281f, 0.441406f, 0.625000f, 0.003906f}, {0.734375f, 0.304688f, 0.820312f, 0.601562f},
+ {0.007812f, 0.203125f, 0.082031f, 0.292969f}, {0.250000f, 0.417969f, 0.593750f, 0.191406f},
+ {0.511719f, 0.503906f, 0.953125f, 0.832031f}, {0.703125f, 0.960938f, 0.417969f, 0.656250f},
+ {0.605469f, 0.656250f, 0.566406f, 0.386719f}, {0.886719f, 0.312500f, 0.070312f, 0.097656f},
+ {0.753906f, 0.511719f, 0.640625f, 0.777344f}, {0.191406f, 0.109375f, 0.203125f, 0.621094f},
+ {0.917969f, 0.992188f, 0.738281f, 0.175781f}, {0.300781f, 0.390625f, 0.437500f, 0.664062f},
+ {0.515625f, 0.816406f, 0.078125f, 0.742188f}, {0.230469f, 0.085938f, 0.488281f, 0.226562f},
+ {0.589844f, 0.203125f, 0.546875f, 0.324219f}, {0.894531f, 0.558594f, 0.406250f, 0.832031f},
+ {0.292969f, 0.261719f, 0.250000f, 0.964844f}, {0.058594f, 0.027344f, 0.789062f, 0.179688f},
+ {0.968750f, 0.812500f, 0.515625f, 0.554688f}, {0.484375f, 0.496094f, 0.207031f, 0.242188f},
+ {0.914062f, 0.253906f, 0.921875f, 0.144531f}, {0.605469f, 0.968750f, 0.816406f, 0.714844f},
+ {0.734375f, 0.457031f, 0.699219f, 0.648438f}, {0.097656f, 0.183594f, 0.332031f, 0.882812f},
+ {0.410156f, 0.832031f, 0.605469f, 0.957031f}, {0.292969f, 0.542969f, 0.761719f, 0.679688f},
+ {0.691406f, 0.039062f, 0.421875f, 0.597656f}, {0.878906f, 0.984375f, 0.859375f, 0.468750f},
+ {0.324219f, 0.601562f, 0.507812f, 0.710938f}, {0.664062f, 0.343750f, 0.925781f, 0.363281f},
+ {0.785156f, 0.640625f, 0.453125f, 0.070312f}, {0.093750f, 0.214844f, 0.582031f, 0.652344f},
+ {0.347656f, 0.417969f, 0.519531f, 0.390625f}, {0.949219f, 0.140625f, 0.843750f, 0.277344f},
+ {0.261719f, 0.769531f, 0.937500f, 0.546875f}, {0.566406f, 0.535156f, 0.066406f, 0.757812f},
+ {0.328125f, 0.250000f, 0.503906f, 0.253906f}, {0.796875f, 0.589844f, 0.871094f, 0.445312f},
+ {0.144531f, 0.898438f, 0.003906f, 0.304688f}, {0.074219f, 0.308594f, 0.261719f, 0.953125f},
+ {0.355469f, 0.390625f, 0.839844f, 0.492188f}, {0.691406f, 0.742188f, 0.144531f, 0.062500f},
+ {0.863281f, 0.183594f, 0.589844f, 0.917969f}, {0.175781f, 0.527344f, 0.976562f, 0.230469f},
+ {0.582031f, 0.238281f, 0.511719f, 0.992188f}, {0.074219f, 0.441406f, 0.855469f, 0.644531f},
+ {0.140625f, 0.554688f, 0.750000f, 0.277344f}, {0.488281f, 0.328125f, 0.687500f, 0.941406f},
+ {0.824219f, 0.121094f, 0.582031f, 0.210938f}, {0.703125f, 0.687500f, 0.332031f, 0.699219f},
+ {0.324219f, 0.593750f, 0.625000f, 0.519531f}, {0.734375f, 0.859375f, 0.429688f, 0.644531f},
+ {0.390625f, 0.433594f, 0.839844f, 0.378906f}, {0.609375f, 0.515625f, 0.390625f, 0.738281f},
+ {0.761719f, 0.714844f, 0.539062f, 0.976562f}, {0.074219f, 0.269531f, 0.277344f, 0.679688f},
+ {0.882812f, 0.167969f, 0.636719f, 0.796875f}, {0.667969f, 0.769531f, 0.226562f, 0.886719f},
+ {0.593750f, 0.925781f, 0.941406f, 0.492188f}, {0.734375f, 0.078125f, 0.128906f, 0.386719f},
+ {0.332031f, 0.980469f, 0.722656f, 0.765625f}, {0.699219f, 0.269531f, 0.058594f, 0.265625f},
+ {0.835938f, 0.105469f, 0.476562f, 0.699219f}, {0.058594f, 0.917969f, 0.753906f, 0.984375f},
+ {0.191406f, 0.710938f, 0.214844f, 0.847656f}, {0.609375f, 0.023438f, 0.976562f, 0.144531f},
+ {0.332031f, 0.894531f, 0.683594f, 0.953125f}, {0.640625f, 0.339844f, 0.355469f, 0.761719f},
+ {0.867188f, 0.839844f, 0.023438f, 0.027344f}, {0.359375f, 0.117188f, 0.222656f, 0.328125f},
+ {0.441406f, 0.242188f, 0.718750f, 0.726562f}, {0.136719f, 0.933594f, 0.878906f, 0.585938f},
+ {0.656250f, 0.027344f, 0.382812f, 0.218750f}, {0.796875f, 0.566406f, 0.531250f, 0.976562f},
+ {0.582031f, 0.160156f, 0.023438f, 0.339844f}, {0.703125f, 0.664062f, 0.921875f, 0.425781f},
+ {0.390625f, 0.765625f, 0.851562f, 0.812500f}, {0.132812f, 0.515625f, 0.156250f, 0.945312f},
+ {0.996094f, 0.871094f, 0.718750f, 0.140625f}, {0.718750f, 0.417969f, 0.003906f, 0.593750f},
+ {0.406250f, 0.632812f, 0.621094f, 0.066406f}, {0.652344f, 0.738281f, 0.148438f, 0.679688f},
+ {0.167969f, 0.363281f, 0.285156f, 0.929688f}, {0.082031f, 0.078125f, 0.667969f, 0.000000f},
+ {0.429688f, 0.675781f, 0.027344f, 0.453125f}, {0.261719f, 0.617188f, 0.382812f, 0.796875f},
+ {0.339844f, 0.785156f, 0.234375f, 0.265625f}, {0.546875f, 0.050781f, 0.523438f, 0.105469f},
+ {0.164062f, 0.273438f, 0.007812f, 0.222656f}, {0.910156f, 0.667969f, 0.804688f, 0.390625f},
+ {0.492188f, 0.203125f, 0.082031f, 0.011719f}, {0.121094f, 0.863281f, 0.269531f, 0.242188f},
+ {0.011719f, 0.414062f, 0.695312f, 0.519531f}, {0.449219f, 0.496094f, 0.058594f, 0.972656f},
+ {0.238281f, 0.914062f, 0.191406f, 0.765625f}, {0.855469f, 0.078125f, 0.367188f, 0.179688f},
+ {0.046875f, 0.882812f, 0.281250f, 0.828125f}, {0.437500f, 0.687500f, 0.148438f, 0.113281f},
+ {0.816406f, 0.015625f, 0.613281f, 0.949219f}, {0.683594f, 0.937500f, 0.437500f, 0.187500f},
+ {0.988281f, 0.859375f, 0.238281f, 0.867188f}, {0.398438f, 0.085938f, 0.574219f, 0.597656f},
+ {0.636719f, 0.496094f, 0.722656f, 0.683594f}, {0.742188f, 0.808594f, 0.339844f, 0.019531f},
+ {0.234375f, 0.625000f, 0.531250f, 0.574219f}, {0.535156f, 0.460938f, 0.890625f, 0.269531f},
+ {0.050781f, 0.976562f, 0.289062f, 0.781250f}, {0.730469f, 0.109375f, 0.214844f, 0.460938f},
+ {0.371094f, 0.363281f, 0.789062f, 0.390625f}, {0.789062f, 0.656250f, 0.042969f, 0.074219f},
+ {0.679688f, 0.164062f, 0.269531f, 0.757812f}, {0.402344f, 0.839844f, 0.105469f, 0.359375f},
+ {0.875000f, 0.261719f, 0.875000f, 0.808594f}, {0.234375f, 0.933594f, 0.144531f, 0.046875f},
+ {0.062500f, 0.082031f, 0.945312f, 0.125000f}, {0.523438f, 0.285156f, 0.289062f, 0.937500f},
+ {0.855469f, 0.753906f, 0.691406f, 0.164062f}, {0.984375f, 0.148438f, 0.207031f, 0.464844f},
+ {0.027344f, 0.894531f, 0.132812f, 0.265625f}, {0.562500f, 0.976562f, 0.785156f, 0.593750f},
+ {0.144531f, 0.625000f, 0.476562f, 0.136719f}, {0.824219f, 0.046875f, 0.355469f, 0.320312f},
+ {0.445312f, 0.226562f, 0.558594f, 0.710938f}, {0.000000f, 0.664062f, 0.289062f, 0.207031f},
+ {0.910156f, 0.468750f, 0.835938f, 0.921875f}, {0.222656f, 0.609375f, 0.589844f, 0.039062f},
+ {0.582031f, 0.820312f, 0.898438f, 0.812500f}, {0.984375f, 0.347656f, 0.308594f, 0.445312f},
+ {0.378906f, 0.238281f, 0.550781f, 0.238281f}, {0.796875f, 0.523438f, 0.437500f, 0.542969f},
+ {0.937500f, 0.792969f, 0.179688f, 0.355469f}, {0.097656f, 0.687500f, 0.742188f, 0.429688f},
+ {0.761719f, 0.597656f, 0.523438f, 0.511719f}, {0.035156f, 0.050781f, 0.929688f, 0.132812f},
+ {0.957031f, 0.406250f, 0.328125f, 0.921875f}, {0.230469f, 0.609375f, 0.148438f, 0.472656f},
+ {0.335938f, 0.707031f, 0.777344f, 0.285156f}, {0.019531f, 0.351562f, 0.976562f, 0.824219f},
+ {0.261719f, 0.859375f, 0.316406f, 0.058594f}, {0.058594f, 0.230469f, 0.570312f, 0.570312f},
+ {0.882812f, 0.324219f, 0.652344f, 0.484375f}, {0.628906f, 0.601562f, 0.210938f, 0.015625f},
+ {0.195312f, 0.132812f, 0.988281f, 0.371094f}, {0.015625f, 0.699219f, 0.832031f, 0.527344f},
+ {0.535156f, 0.066406f, 0.335938f, 0.433594f}, {0.851562f, 0.976562f, 0.953125f, 0.742188f},
+ {0.574219f, 0.578125f, 0.468750f, 0.621094f}, {0.773438f, 0.855469f, 0.843750f, 0.316406f},
+ {0.703125f, 0.148438f, 0.750000f, 0.898438f}, {0.187500f, 0.300781f, 0.136719f, 0.582031f},
+ {0.960938f, 0.742188f, 0.644531f, 0.359375f}, {0.796875f, 0.378906f, 0.972656f, 0.523438f},
+ {0.031250f, 0.917969f, 0.171875f, 0.847656f}, {0.593750f, 0.507812f, 0.468750f, 0.445312f},
+ {0.207031f, 0.332031f, 0.359375f, 0.785156f}, {0.753906f, 0.105469f, 0.566406f, 0.914062f},
+ {0.386719f, 0.695312f, 0.960938f, 0.128906f}, {0.613281f, 0.000000f, 0.128906f, 0.308594f},
+ {0.914062f, 0.296875f, 0.792969f, 0.570312f}, {0.300781f, 0.730469f, 0.734375f, 0.457031f},
+ {0.550781f, 0.574219f, 0.972656f, 0.890625f}, {0.644531f, 0.480469f, 0.046875f, 0.687500f},
+ {0.160156f, 0.312500f, 0.335938f, 0.500000f}, {0.507812f, 0.625000f, 0.765625f, 0.417969f},
+ {0.093750f, 0.433594f, 0.164062f, 0.082031f}, {0.195312f, 0.347656f, 0.953125f, 0.355469f},
+ {0.468750f, 0.699219f, 0.109375f, 0.140625f}, {0.941406f, 0.210938f, 0.449219f, 0.832031f},
+ {0.296875f, 0.039062f, 0.656250f, 0.410156f}, {0.417969f, 0.277344f, 0.761719f, 0.878906f},
+ {0.121094f, 0.679688f, 0.027344f, 0.625000f}, {0.910156f, 0.792969f, 0.699219f, 0.156250f},
+ {0.449219f, 0.863281f, 0.625000f, 0.710938f}, {0.968750f, 0.011719f, 0.367188f, 0.871094f},
+ {0.199219f, 0.964844f, 0.554688f, 0.546875f}, {0.531250f, 0.605469f, 0.816406f, 0.441406f},
+ {0.105469f, 0.496094f, 0.460938f, 0.906250f}, {0.960938f, 0.804688f, 0.062500f, 0.484375f},
+ {0.457031f, 0.546875f, 0.515625f, 0.324219f}, {0.660156f, 0.003906f, 0.753906f, 0.578125f},
+ {0.199219f, 0.636719f, 0.035156f, 0.804688f}, {0.265625f, 0.320312f, 0.593750f, 0.093750f},
+ {0.347656f, 0.101562f, 0.957031f, 0.906250f}, {0.710938f, 0.453125f, 0.875000f, 0.363281f},
+ {0.402344f, 0.824219f, 0.027344f, 0.019531f}, {0.292969f, 0.531250f, 0.750000f, 0.554688f},
+ {0.976562f, 0.414062f, 0.910156f, 0.949219f}, {0.078125f, 0.863281f, 0.507812f, 0.089844f},
+ {0.792969f, 0.312500f, 0.390625f, 0.609375f}, {0.500000f, 0.000000f, 0.664062f, 0.347656f},
+ {0.304688f, 0.507812f, 0.160156f, 0.570312f}, {0.089844f, 0.152344f, 0.109375f, 0.097656f},
+ {0.457031f, 0.957031f, 0.800781f, 0.664062f}, {0.539062f, 0.636719f, 0.066406f, 0.738281f},
+ {0.144531f, 0.085938f, 0.878906f, 0.082031f}, {0.414062f, 0.175781f, 0.277344f, 0.886719f},
+ {0.292969f, 0.285156f, 0.835938f, 0.636719f}, {0.570312f, 0.750000f, 0.617188f, 0.257812f},
+ {0.812500f, 0.886719f, 0.058594f, 0.851562f}, {0.527344f, 0.199219f, 0.464844f, 0.082031f},
+ {0.851562f, 0.773438f, 0.664062f, 0.535156f}, {0.414062f, 0.441406f, 0.257812f, 0.679688f},
+ {0.976562f, 0.914062f, 0.109375f, 0.148438f}, {0.539062f, 0.488281f, 0.812500f, 0.886719f},
+ {0.816406f, 0.000000f, 0.371094f, 0.257812f}, {0.316406f, 0.960938f, 0.285156f, 0.703125f},
+ {0.484375f, 0.382812f, 0.457031f, 0.785156f}, {0.785156f, 0.277344f, 0.675781f, 0.875000f},
+ {0.265625f, 0.476562f, 0.070312f, 0.289062f}, {0.355469f, 0.207031f, 0.585938f, 0.109375f},
+ {0.636719f, 0.917969f, 0.179688f, 0.851562f}, {0.929688f, 0.519531f, 0.347656f, 0.515625f},
+ {0.007812f, 0.425781f, 0.554688f, 0.199219f}, {0.507812f, 0.011719f, 0.445312f, 0.085938f},
+ {0.667969f, 0.886719f, 0.859375f, 0.976562f}, {0.382812f, 0.476562f, 0.300781f, 0.738281f},
+ {0.843750f, 0.128906f, 0.726562f, 0.613281f}, {0.437500f, 0.808594f, 0.898438f, 0.183594f},
+ {0.652344f, 0.582031f, 0.667969f, 0.332031f}, {0.984375f, 0.753906f, 0.835938f, 0.699219f},
+ {0.812500f, 0.242188f, 0.320312f, 0.636719f}, {0.511719f, 0.945312f, 0.625000f, 0.816406f},
+ {0.183594f, 0.796875f, 0.421875f, 0.027344f}, {0.742188f, 0.179688f, 0.882812f, 0.253906f},
+ {0.972656f, 0.375000f, 0.660156f, 0.613281f}, {0.378906f, 0.964844f, 0.480469f, 0.324219f},
+ {0.015625f, 0.222656f, 0.863281f, 0.046875f}, {0.871094f, 0.058594f, 0.695312f, 0.800781f},
+ {0.289062f, 0.792969f, 0.382812f, 0.644531f}, {0.765625f, 0.171875f, 0.636719f, 0.929688f},
+ {0.554688f, 0.988281f, 0.808594f, 0.531250f}, {0.023438f, 0.546875f, 0.218750f, 0.730469f},
+ {0.882812f, 0.886719f, 0.929688f, 0.191406f}, {0.605469f, 0.136719f, 0.167969f, 0.332031f},
+ {0.812500f, 0.335938f, 0.414062f, 0.519531f}, {0.652344f, 0.585938f, 0.953125f, 0.093750f},
+ {0.269531f, 0.488281f, 0.132812f, 0.312500f}, {0.019531f, 0.292969f, 0.472656f, 0.589844f},
+ {0.316406f, 0.410156f, 0.914062f, 0.195312f}, {0.613281f, 0.742188f, 0.175781f, 0.023438f},
+ {0.761719f, 0.207031f, 0.398438f, 0.660156f}, {0.363281f, 0.363281f, 0.664062f, 0.253906f},
+ {0.585938f, 0.449219f, 0.246094f, 0.746094f}, {0.796875f, 0.996094f, 0.902344f, 0.882812f},
+ {0.136719f, 0.835938f, 0.367188f, 0.230469f}, {0.492188f, 0.390625f, 0.492188f, 0.707031f},
+ {0.812500f, 0.562500f, 0.316406f, 0.515625f}, {0.636719f, 0.687500f, 0.421875f, 0.839844f},
+ {0.898438f, 0.343750f, 0.164062f, 0.664062f}, {0.179688f, 0.125000f, 0.695312f, 0.453125f},
+ {0.527344f, 0.746094f, 0.097656f, 0.816406f}, {0.625000f, 0.183594f, 0.207031f, 0.156250f},
+ {0.371094f, 0.906250f, 0.003906f, 0.421875f}, {0.160156f, 0.707031f, 0.781250f, 0.683594f},
+ {0.656250f, 0.773438f, 0.343750f, 0.894531f}, {0.875000f, 0.406250f, 0.945312f, 0.171875f},
+ {0.242188f, 0.859375f, 0.699219f, 0.394531f}, {0.703125f, 0.460938f, 0.375000f, 0.281250f},
+ {0.902344f, 0.371094f, 0.636719f, 0.937500f}, {0.207031f, 0.558594f, 0.476562f, 0.574219f},
+ {0.679688f, 0.980469f, 0.121094f, 0.203125f}, {0.476562f, 0.484375f, 0.402344f, 0.773438f},
+ {0.171875f, 0.332031f, 0.808594f, 0.699219f}, {0.718750f, 0.144531f, 0.906250f, 0.417969f},
+ {0.113281f, 0.527344f, 0.195312f, 0.351562f}, {0.617188f, 0.066406f, 0.507812f, 0.933594f},
+ {0.460938f, 0.277344f, 0.417969f, 0.734375f}, {0.160156f, 0.640625f, 0.613281f, 0.394531f},
+ {0.730469f, 0.738281f, 0.039062f, 0.105469f}, {0.078125f, 0.187500f, 0.777344f, 0.617188f},
+ {0.425781f, 0.824219f, 0.527344f, 0.171875f}, {0.679688f, 0.898438f, 0.128906f, 0.984375f},
+ {0.949219f, 0.769531f, 0.414062f, 0.230469f}, {0.128906f, 0.320312f, 0.886719f, 0.402344f},
+ {0.234375f, 0.648438f, 0.046875f, 0.160156f}, {0.394531f, 0.242188f, 0.964844f, 0.691406f},
+ {0.312500f, 0.800781f, 0.265625f, 0.769531f}, {0.875000f, 0.695312f, 0.785156f, 0.414062f},
+ {0.132812f, 0.562500f, 0.085938f, 0.046875f}, {0.238281f, 0.218750f, 0.574219f, 0.292969f},
+ {0.722656f, 0.640625f, 0.394531f, 0.136719f}, {0.304688f, 0.062500f, 0.222656f, 0.941406f},
+ {0.074219f, 0.972656f, 0.039062f, 0.078125f}, {0.351562f, 0.445312f, 0.152344f, 0.542969f},
+ {0.265625f, 0.148438f, 0.500000f, 0.417969f}, {0.054688f, 0.531250f, 0.246094f, 0.203125f},
+ {0.687500f, 0.621094f, 0.007812f, 0.937500f}, {0.113281f, 0.457031f, 0.535156f, 0.378906f},
+ {0.472656f, 0.105469f, 0.210938f, 0.144531f}, {0.218750f, 0.664062f, 0.113281f, 0.996094f},
+ {0.703125f, 0.843750f, 0.261719f, 0.218750f}, {0.925781f, 0.523438f, 0.550781f, 0.722656f},
+ {0.613281f, 0.730469f, 0.019531f, 0.289062f}, {0.367188f, 0.269531f, 0.886719f, 0.472656f},
+ {0.843750f, 0.074219f, 0.304688f, 0.238281f}, {0.703125f, 0.648438f, 0.054688f, 0.984375f},
+ {0.171875f, 0.425781f, 0.371094f, 0.078125f}, {0.335938f, 0.734375f, 0.566406f, 0.660156f},
+ {0.496094f, 0.949219f, 0.500000f, 0.906250f}, {0.214844f, 0.058594f, 0.312500f, 0.750000f},
+ {0.554688f, 0.203125f, 0.867188f, 0.964844f}, {0.839844f, 0.707031f, 0.238281f, 0.257812f},
+ {0.707031f, 0.113281f, 0.679688f, 0.828125f}, {0.890625f, 0.890625f, 0.296875f, 0.144531f},
+ {0.164062f, 0.042969f, 0.968750f, 0.972656f}, {0.273438f, 0.671875f, 0.796875f, 0.609375f},
+ {0.019531f, 0.156250f, 0.562500f, 0.078125f}, {0.910156f, 0.246094f, 0.183594f, 0.371094f},
+ {0.414062f, 0.707031f, 0.824219f, 0.437500f}, {0.085938f, 0.195312f, 0.082031f, 0.046875f},
+ {0.945312f, 0.781250f, 0.683594f, 0.308594f}, {0.218750f, 0.023438f, 0.621094f, 0.175781f},
+ {0.464844f, 0.234375f, 0.261719f, 0.964844f}, {0.105469f, 0.957031f, 0.582031f, 0.234375f},
+ {0.750000f, 0.488281f, 0.808594f, 0.738281f}, {0.253906f, 0.582031f, 0.457031f, 0.285156f},
+ {0.855469f, 0.367188f, 0.984375f, 0.859375f}, {0.425781f, 0.121094f, 0.250000f, 0.492188f},
+ {0.945312f, 0.550781f, 0.433594f, 0.222656f}, {0.738281f, 0.214844f, 0.503906f, 0.953125f},
+ {0.019531f, 0.046875f, 0.226562f, 0.515625f}, {0.324219f, 0.734375f, 0.574219f, 0.785156f},
+ {0.589844f, 0.257812f, 0.011719f, 0.015625f}, {0.843750f, 0.812500f, 0.988281f, 0.468750f},
+ {0.992188f, 0.007812f, 0.238281f, 0.312500f}, {0.082031f, 0.425781f, 0.699219f, 0.054688f},
+ {0.382812f, 0.843750f, 0.304688f, 0.972656f}, {0.890625f, 0.667969f, 0.558594f, 0.183594f},
+ {0.281250f, 0.968750f, 0.000000f, 0.003906f}, {0.687500f, 0.812500f, 0.742188f, 0.632812f},
+ {0.910156f, 0.121094f, 0.867188f, 0.207031f}, {0.347656f, 0.574219f, 0.957031f, 0.511719f},
+ {0.238281f, 0.421875f, 0.183594f, 0.957031f}, {0.960938f, 0.097656f, 0.707031f, 0.316406f},
+ {0.585938f, 0.667969f, 0.921875f, 0.445312f}, {0.835938f, 0.535156f, 0.238281f, 0.660156f},
+ {0.039062f, 0.031250f, 0.800781f, 0.074219f}, {0.464844f, 0.125000f, 0.734375f, 0.808594f},
+ {0.742188f, 0.390625f, 0.503906f, 0.367188f}, {0.828125f, 0.054688f, 0.113281f, 0.953125f},
+ {0.550781f, 0.996094f, 0.621094f, 0.472656f}, {0.625000f, 0.175781f, 0.203125f, 0.636719f},
+ {0.472656f, 0.347656f, 0.941406f, 0.871094f}, {0.046875f, 0.945312f, 0.050781f, 0.675781f},
+ {0.937500f, 0.414062f, 0.503906f, 0.492188f}, {0.500000f, 0.265625f, 0.632812f, 0.832031f},
+ {0.894531f, 0.683594f, 0.992188f, 0.753906f}, {0.148438f, 0.367188f, 0.437500f, 0.277344f},
+ {0.550781f, 0.890625f, 0.777344f, 0.050781f}, {0.945312f, 0.316406f, 0.710938f, 0.871094f},
+ {0.410156f, 0.046875f, 0.343750f, 0.484375f}, {0.597656f, 0.855469f, 0.949219f, 0.671875f},
+ {0.843750f, 0.261719f, 0.398438f, 0.781250f}, {0.781250f, 0.769531f, 0.597656f, 0.515625f},
+ {0.320312f, 0.140625f, 0.796875f, 0.578125f}, {0.425781f, 0.406250f, 0.988281f, 0.894531f},
+ {0.062500f, 0.593750f, 0.191406f, 0.160156f}, {0.246094f, 0.875000f, 0.515625f, 0.824219f},
+ {0.132812f, 0.484375f, 0.468750f, 0.031250f}, {0.437500f, 0.367188f, 0.605469f, 0.375000f},
+ {0.976562f, 0.835938f, 0.859375f, 0.785156f}, {0.046875f, 0.242188f, 0.726562f, 0.433594f},
+ {0.765625f, 0.519531f, 0.089844f, 0.226562f}, {0.921875f, 0.394531f, 0.824219f, 0.003906f},
+ {0.105469f, 0.921875f, 0.585938f, 0.382812f}, {0.390625f, 0.824219f, 0.007812f, 0.476562f},
+ {0.484375f, 0.558594f, 0.738281f, 0.683594f}, {0.070312f, 0.441406f, 0.082031f, 0.347656f},
+ {0.433594f, 0.332031f, 0.605469f, 0.417969f}, {0.949219f, 0.765625f, 0.339844f, 0.789062f},
+ {0.738281f, 0.906250f, 0.015625f, 0.183594f}, {0.312500f, 0.601562f, 0.441406f, 0.527344f},
+ {0.695312f, 0.089844f, 0.722656f, 0.992188f}, {0.605469f, 0.867188f, 0.925781f, 0.644531f},
+ {0.539062f, 0.500000f, 0.218750f, 0.769531f}, {0.011719f, 0.929688f, 0.847656f, 0.414062f},
+ {0.777344f, 0.296875f, 0.972656f, 0.613281f}, {0.332031f, 0.644531f, 0.398438f, 0.058594f},
+ {0.937500f, 0.835938f, 0.328125f, 0.378906f}, {0.691406f, 0.042969f, 0.867188f, 0.542969f},
+ {0.039062f, 0.257812f, 0.625000f, 0.011719f}, {0.546875f, 0.964844f, 0.562500f, 0.753906f},
+ {0.117188f, 0.632812f, 0.738281f, 0.320312f}, {0.605469f, 0.296875f, 0.054688f, 0.050781f},
+ {0.824219f, 0.902344f, 0.820312f, 0.621094f}, {0.507812f, 0.589844f, 0.906250f, 0.863281f},
+ {0.058594f, 0.136719f, 0.324219f, 0.152344f}, {0.445312f, 0.929688f, 0.753906f, 0.671875f},
+ {0.253906f, 0.703125f, 0.167969f, 0.828125f}, {0.644531f, 0.218750f, 0.593750f, 0.375000f},
+ {0.781250f, 0.574219f, 0.085938f, 0.609375f}, {0.000000f, 0.042969f, 0.964844f, 0.550781f},
+ {0.500000f, 0.296875f, 0.359375f, 0.871094f}, {0.207031f, 0.394531f, 0.683594f, 0.457031f},
+ {0.062500f, 0.214844f, 0.136719f, 0.277344f}, {0.777344f, 0.933594f, 0.480469f, 0.847656f},
+ {0.648438f, 0.863281f, 0.332031f, 0.765625f}, {0.121094f, 0.351562f, 0.089844f, 0.042969f},
+ {0.367188f, 0.250000f, 0.390625f, 0.554688f}, {0.183594f, 0.433594f, 0.566406f, 0.730469f},
+ {0.300781f, 0.593750f, 0.300781f, 0.500000f}, {0.894531f, 0.726562f, 0.636719f, 0.589844f},
+ {0.105469f, 0.839844f, 0.375000f, 0.296875f}, {0.199219f, 0.468750f, 0.710938f, 0.125000f},
+ {0.062500f, 0.289062f, 0.902344f, 0.027344f}, {0.992188f, 0.609375f, 0.410156f, 0.250000f},
+ {0.281250f, 0.101562f, 0.687500f, 0.343750f}, {0.789062f, 0.718750f, 0.343750f, 0.558594f},
+ {0.578125f, 0.832031f, 0.878906f, 0.214844f}, {0.187500f, 0.539062f, 0.746094f, 0.378906f},
+ {0.691406f, 0.187500f, 0.277344f, 0.457031f}, {0.621094f, 0.031250f, 0.105469f, 0.984375f},
+ {0.859375f, 0.812500f, 0.917969f, 0.597656f}, {0.757812f, 0.656250f, 0.558594f, 0.343750f},
+ {0.332031f, 0.402344f, 0.179688f, 0.726562f}, {0.027344f, 0.996094f, 0.812500f, 0.085938f},
+ {0.261719f, 0.554688f, 0.074219f, 0.851562f}, {0.144531f, 0.351562f, 0.742188f, 0.003906f},
+ {0.519531f, 0.925781f, 0.449219f, 0.406250f}, {0.585938f, 0.027344f, 0.324219f, 0.347656f},
+ {0.824219f, 0.320312f, 0.097656f, 0.109375f}, {0.953125f, 0.953125f, 0.707031f, 0.558594f},
+ {0.671875f, 0.121094f, 0.773438f, 0.695312f}, {0.523438f, 0.773438f, 0.128906f, 0.609375f},
+ {0.273438f, 0.003906f, 0.964844f, 0.496094f}, {0.621094f, 0.617188f, 0.265625f, 0.132812f},
+ {0.367188f, 0.167969f, 0.199219f, 0.847656f}, {0.722656f, 0.761719f, 0.652344f, 0.539062f},
+ {0.156250f, 0.652344f, 0.437500f, 0.621094f}, {0.996094f, 0.253906f, 0.359375f, 0.777344f},
+ {0.648438f, 0.148438f, 0.937500f, 0.109375f}, {0.242188f, 0.632812f, 0.496094f, 0.902344f},
+ {0.828125f, 0.957031f, 0.769531f, 0.562500f}, {0.558594f, 0.074219f, 0.136719f, 0.289062f},
+ {0.503906f, 0.531250f, 0.878906f, 0.703125f}, {0.175781f, 0.476562f, 0.636719f, 0.843750f},
+ {0.878906f, 0.277344f, 0.292969f, 0.132812f}, {0.367188f, 0.417969f, 0.125000f, 0.574219f},
+ {0.281250f, 0.062500f, 0.550781f, 0.910156f}, {0.847656f, 0.589844f, 0.054688f, 0.273438f},
+ {0.664062f, 0.730469f, 0.511719f, 0.121094f}, {0.394531f, 0.402344f, 0.140625f, 0.503906f},
+ {0.578125f, 0.089844f, 0.039062f, 0.914062f}, {0.480469f, 0.777344f, 0.714844f, 0.652344f},
+ {0.195312f, 0.445312f, 0.179688f, 0.976562f}, {0.785156f, 0.675781f, 0.113281f, 0.132812f},
+ {0.351562f, 0.816406f, 0.886719f, 0.835938f}, {0.265625f, 0.488281f, 0.296875f, 0.453125f},
+ {0.175781f, 0.093750f, 0.144531f, 0.722656f}, {0.386719f, 0.335938f, 0.656250f, 0.339844f},
+ {0.753906f, 0.656250f, 0.531250f, 0.234375f}, {0.132812f, 0.398438f, 0.421875f, 0.421875f},
+ {0.351562f, 0.515625f, 0.929688f, 0.925781f}, {0.917969f, 0.105469f, 0.500000f, 0.492188f},
+ {0.601562f, 0.914062f, 0.773438f, 0.136719f}, {0.324219f, 0.613281f, 0.441406f, 0.750000f},
+ {0.949219f, 0.730469f, 0.222656f, 0.324219f}, {0.578125f, 0.480469f, 0.824219f, 0.808594f},
+ {0.402344f, 0.660156f, 0.289062f, 0.062500f}, {0.863281f, 0.761719f, 0.585938f, 0.578125f},
+ {0.488281f, 0.515625f, 0.898438f, 0.132812f}, {0.550781f, 0.050781f, 0.644531f, 0.355469f},
+ {0.921875f, 0.968750f, 0.832031f, 0.882812f}, {0.710938f, 0.796875f, 0.011719f, 0.261719f},
+ {0.511719f, 0.160156f, 0.980469f, 0.019531f}, {0.605469f, 0.945312f, 0.199219f, 0.921875f},
+ {0.343750f, 0.214844f, 0.789062f, 0.218750f}, {0.675781f, 0.550781f, 0.019531f, 0.570312f},
+ {0.437500f, 0.746094f, 0.468750f, 0.734375f}, {0.707031f, 0.875000f, 0.542969f, 0.804688f},
+ {0.144531f, 0.503906f, 0.285156f, 0.910156f}, {0.406250f, 0.019531f, 0.121094f, 0.101562f},
+ {0.742188f, 0.312500f, 0.816406f, 0.714844f}, {0.097656f, 0.933594f, 0.183594f, 0.007812f},
+ {0.371094f, 0.761719f, 0.589844f, 0.648438f}, {0.453125f, 0.492188f, 0.378906f, 0.167969f},
+ {0.222656f, 0.585938f, 0.847656f, 0.796875f}, {0.121094f, 0.214844f, 0.058594f, 0.128906f},
+ {0.484375f, 0.730469f, 0.632812f, 0.546875f}, {0.914062f, 0.078125f, 0.871094f, 0.296875f},
+ {0.640625f, 0.191406f, 0.304688f, 0.441406f}, {0.886719f, 0.714844f, 0.148438f, 0.242188f},
+ {0.082031f, 0.464844f, 0.933594f, 0.750000f}, {0.742188f, 0.632812f, 0.640625f, 0.667969f},
+ {0.183594f, 0.230469f, 0.386719f, 0.953125f}, {0.484375f, 0.687500f, 0.917969f, 0.445312f},
+ {0.007812f, 0.187500f, 0.226562f, 0.308594f}, {0.804688f, 0.570312f, 0.417969f, 0.914062f},
+ {0.195312f, 0.304688f, 0.671875f, 0.253906f}, {0.878906f, 0.902344f, 0.351562f, 0.960938f},
+ {0.078125f, 0.082031f, 0.042969f, 0.710938f}, {0.460938f, 0.449219f, 0.988281f, 0.292969f},
+ {0.300781f, 0.320312f, 0.781250f, 0.058594f}, {0.593750f, 0.023438f, 0.171875f, 0.949219f},
+ {0.796875f, 0.500000f, 0.539062f, 0.207031f}, {0.339844f, 0.839844f, 0.218750f, 0.503906f},
+ {0.132812f, 0.289062f, 0.417969f, 0.070312f}, {0.675781f, 0.218750f, 0.269531f, 0.871094f},
+ {0.042969f, 0.378906f, 0.996094f, 0.035156f}, {0.230469f, 0.816406f, 0.515625f, 0.472656f},
+ {0.453125f, 0.964844f, 0.375000f, 0.332031f}, {0.746094f, 0.664062f, 0.792969f, 0.214844f},
+ {0.058594f, 0.351562f, 0.457031f, 0.000000f}, {0.968750f, 0.882812f, 0.343750f, 0.718750f},
+ {0.160156f, 0.140625f, 0.765625f, 0.878906f}, {0.238281f, 0.207031f, 0.675781f, 0.789062f},
+ {0.070312f, 0.535156f, 0.945312f, 0.335938f}, {0.894531f, 0.917969f, 0.277344f, 0.179688f},
+ {0.296875f, 0.332031f, 0.535156f, 0.597656f}, {0.988281f, 0.167969f, 0.359375f, 0.398438f},
+ {0.718750f, 0.015625f, 0.671875f, 0.257812f}, {0.472656f, 0.414062f, 0.960938f, 0.554688f},
+ {0.890625f, 0.996094f, 0.460938f, 0.109375f}, {0.964844f, 0.789062f, 0.199219f, 0.996094f},
+ {0.667969f, 0.875000f, 0.089844f, 0.585938f}, {0.804688f, 0.183594f, 0.859375f, 0.703125f},
+ {0.546875f, 0.312500f, 0.261719f, 0.089844f}, {0.050781f, 0.769531f, 0.046875f, 0.273438f},
+ {0.187500f, 0.253906f, 0.843750f, 0.894531f}, {0.441406f, 0.367188f, 0.644531f, 0.230469f},
+ {0.742188f, 0.171875f, 0.105469f, 0.097656f}, {0.824219f, 0.890625f, 0.535156f, 0.984375f},
+ {0.144531f, 0.015625f, 0.394531f, 0.656250f}, {0.296875f, 0.316406f, 0.058594f, 0.402344f},
+ {0.019531f, 0.144531f, 0.210938f, 0.691406f}, {0.753906f, 0.621094f, 0.730469f, 0.929688f},
+ {0.250000f, 0.703125f, 0.492188f, 0.191406f}, {0.054688f, 0.292969f, 0.152344f, 0.414062f},
+ {0.410156f, 0.492188f, 0.445312f, 0.777344f}, {0.796875f, 0.339844f, 0.871094f, 0.855469f},
+ {0.902344f, 0.085938f, 0.250000f, 0.632812f}, {0.531250f, 0.906250f, 0.324219f, 0.394531f},
+ {0.250000f, 0.132812f, 0.839844f, 0.976562f}, {0.917969f, 0.375000f, 0.160156f, 0.523438f},
+ {0.859375f, 0.792969f, 0.601562f, 0.160156f}, {0.335938f, 0.453125f, 0.714844f, 0.425781f},
+ {0.523438f, 0.152344f, 0.464844f, 0.949219f}, {0.957031f, 0.625000f, 0.000000f, 0.863281f},
+ {0.800781f, 0.089844f, 0.531250f, 0.257812f}, {0.000000f, 0.863281f, 0.316406f, 0.511719f},
+ {0.308594f, 0.285156f, 0.679688f, 0.906250f}, {0.824219f, 0.132812f, 0.472656f, 0.230469f},
+ {0.535156f, 0.917969f, 0.265625f, 0.656250f}, {0.683594f, 0.503906f, 0.429688f, 0.960938f},
+ {0.363281f, 0.609375f, 0.515625f, 0.171875f}, {0.445312f, 0.289062f, 0.683594f, 0.917969f},
+ {0.964844f, 0.808594f, 0.238281f, 0.617188f}, {0.277344f, 0.085938f, 0.042969f, 0.062500f},
+ {0.394531f, 0.511719f, 0.839844f, 0.203125f}, {0.636719f, 0.753906f, 0.585938f, 0.843750f},
+ {0.343750f, 0.417969f, 0.289062f, 0.761719f}, {0.746094f, 0.933594f, 0.011719f, 0.171875f},
+ {0.566406f, 0.472656f, 0.816406f, 0.066406f}, {0.398438f, 0.671875f, 0.550781f, 0.566406f},
+ {0.675781f, 0.855469f, 0.750000f, 0.351562f}, {0.832031f, 0.546875f, 0.488281f, 0.179688f},
+ {0.222656f, 0.992188f, 0.285156f, 0.449219f}, {0.531250f, 0.792969f, 0.117188f, 0.839844f},
+ {0.003906f, 0.382812f, 0.875000f, 0.320312f}, {0.718750f, 0.722656f, 0.625000f, 0.718750f},
+ {0.925781f, 0.574219f, 0.843750f, 0.636719f}, {0.382812f, 0.878906f, 0.070312f, 0.238281f},
+ {0.621094f, 0.015625f, 0.707031f, 0.398438f}, {0.988281f, 0.738281f, 0.195312f, 0.925781f},
+ {0.796875f, 0.125000f, 0.039062f, 0.667969f}, {0.136719f, 0.179688f, 0.953125f, 0.796875f},
+ {0.632812f, 0.542969f, 0.648438f, 0.382812f}, {0.496094f, 0.804688f, 0.253906f, 0.550781f},
+ {0.433594f, 0.449219f, 0.894531f, 0.457031f}, {0.730469f, 0.988281f, 0.203125f, 0.675781f},
+ {0.800781f, 0.273438f, 0.484375f, 0.222656f}, {0.136719f, 0.710938f, 0.414062f, 0.074219f},
+ {0.617188f, 0.597656f, 0.789062f, 0.472656f}, {0.417969f, 0.851562f, 0.843750f, 0.800781f},
+ {0.027344f, 0.242188f, 0.031250f, 0.695312f}, {0.566406f, 0.699219f, 0.398438f, 0.898438f},
+ {0.089844f, 0.195312f, 0.593750f, 0.187500f}, {0.617188f, 0.531250f, 0.792969f, 0.382812f},
+ {0.199219f, 0.445312f, 0.351562f, 0.769531f}, {0.289062f, 0.074219f, 0.675781f, 0.035156f},
+ {0.492188f, 0.632812f, 0.730469f, 0.535156f}, {0.699219f, 0.976562f, 0.382812f, 0.800781f},
+ {0.875000f, 0.464844f, 0.308594f, 0.640625f}, {0.121094f, 0.800781f, 0.171875f, 0.437500f},
+ {0.257812f, 0.078125f, 0.925781f, 0.714844f}, {0.523438f, 0.550781f, 0.718750f, 0.507812f},
+ {0.625000f, 0.992188f, 0.996094f, 0.171875f}, {0.968750f, 0.238281f, 0.781250f, 0.246094f},
+ {0.191406f, 0.453125f, 0.433594f, 0.468750f}, {0.441406f, 0.839844f, 0.269531f, 0.812500f},
+ {0.855469f, 0.203125f, 0.941406f, 0.621094f}, {0.652344f, 0.890625f, 0.347656f, 0.113281f},
+ {0.972656f, 0.007812f, 0.687500f, 0.480469f}, {0.156250f, 0.679688f, 0.585938f, 0.683594f},
+ {0.015625f, 0.617188f, 0.519531f, 0.078125f}, {0.761719f, 0.437500f, 0.945312f, 0.453125f},
+ {0.371094f, 0.261719f, 0.078125f, 0.320312f}, {0.585938f, 0.652344f, 0.757812f, 0.054688f},
+ {0.031250f, 0.207031f, 0.972656f, 0.609375f}, {0.644531f, 0.585938f, 0.375000f, 0.292969f},
+ {0.210938f, 0.894531f, 0.242188f, 0.769531f}, {0.269531f, 0.246094f, 0.902344f, 0.574219f},
+ {0.882812f, 0.390625f, 0.957031f, 0.355469f}, {0.570312f, 0.457031f, 0.769531f, 0.062500f},
+ {0.726562f, 0.953125f, 0.214844f, 0.406250f}, {0.988281f, 0.347656f, 0.136719f, 0.742188f},
+ {0.066406f, 0.785156f, 0.972656f, 0.035156f}, {0.156250f, 0.425781f, 0.726562f, 0.375000f},
+ {0.207031f, 0.015625f, 0.015625f, 0.589844f}, {0.710938f, 0.898438f, 0.894531f, 0.480469f},
+ {0.031250f, 0.160156f, 0.562500f, 0.792969f}, {0.546875f, 0.980469f, 0.480469f, 0.273438f},
+ {0.863281f, 0.859375f, 0.738281f, 0.535156f}, {0.101562f, 0.355469f, 0.171875f, 0.371094f},
+ {0.910156f, 0.054688f, 0.523438f, 0.011719f}, {0.296875f, 0.808594f, 0.894531f, 0.640625f},
+ {0.937500f, 0.257812f, 0.457031f, 0.414062f}, {0.125000f, 0.113281f, 0.152344f, 0.804688f},
+ {0.507812f, 0.363281f, 0.617188f, 0.882812f}, {0.957031f, 0.195312f, 0.394531f, 0.656250f},
+ {0.054688f, 0.695312f, 0.906250f, 0.750000f}, {0.902344f, 0.070312f, 0.703125f, 0.582031f},
+ {0.421875f, 0.929688f, 0.031250f, 0.140625f}, {0.187500f, 0.167969f, 0.671875f, 0.433594f},
+ {0.476562f, 0.101562f, 0.363281f, 0.980469f}, {0.281250f, 0.683594f, 0.570312f, 0.765625f},
+ {0.847656f, 0.437500f, 0.472656f, 0.167969f}, {0.078125f, 0.628906f, 0.832031f, 0.605469f},
+ {0.570312f, 0.328125f, 0.593750f, 0.101562f}, {0.261719f, 0.765625f, 0.738281f, 0.503906f},
+ {0.906250f, 0.242188f, 0.164062f, 0.960938f}, {0.324219f, 0.007812f, 0.824219f, 0.164062f},
+ {0.593750f, 0.683594f, 0.570312f, 0.089844f}, {0.921875f, 0.617188f, 0.105469f, 0.296875f},
+ {0.527344f, 0.050781f, 0.632812f, 0.851562f}, {0.359375f, 0.375000f, 0.910156f, 0.726562f},
+ {0.835938f, 0.128906f, 0.070312f, 0.937500f}, {0.664062f, 0.515625f, 0.226562f, 0.027344f},
+ {0.226562f, 0.890625f, 0.500000f, 0.300781f}, {0.851562f, 0.574219f, 0.757812f, 0.648438f},
+ {0.316406f, 0.753906f, 0.257812f, 0.058594f}, {0.429688f, 0.277344f, 0.937500f, 0.507812f},
+ {0.007812f, 0.031250f, 0.019531f, 0.878906f}, {0.933594f, 0.714844f, 0.550781f, 0.308594f},
+ {0.835938f, 0.847656f, 0.136719f, 0.164062f}, {0.234375f, 0.546875f, 0.617188f, 0.968750f},
+ {0.394531f, 0.132812f, 0.902344f, 0.355469f}, {0.980469f, 0.679688f, 0.566406f, 0.019531f},
+ {0.671875f, 0.839844f, 0.468750f, 0.585938f}, {0.046875f, 0.417969f, 0.250000f, 0.378906f},
+ {0.375000f, 0.597656f, 0.023438f, 0.898438f}, {0.695312f, 0.789062f, 0.625000f, 0.753906f},
+ {0.898438f, 0.375000f, 0.875000f, 0.007812f}, {0.328125f, 0.542969f, 0.113281f, 0.531250f},
+ {0.578125f, 0.109375f, 0.542969f, 0.300781f}, {0.085938f, 0.406250f, 0.765625f, 0.988281f},
+ {0.285156f, 0.566406f, 0.062500f, 0.339844f}, {0.472656f, 0.777344f, 0.128906f, 0.164062f},
+ {0.636719f, 0.363281f, 0.628906f, 0.750000f}, {0.832031f, 0.035156f, 0.394531f, 0.835938f},
+ {0.109375f, 0.972656f, 0.667969f, 0.195312f}, {0.183594f, 0.710938f, 0.222656f, 0.890625f},
+ {0.808594f, 0.066406f, 0.046875f, 0.707031f}, {0.460938f, 0.953125f, 0.855469f, 0.476562f},
+ {0.082031f, 0.335938f, 0.652344f, 0.203125f}, {0.667969f, 0.738281f, 0.093750f, 0.121094f},
+ {0.425781f, 0.664062f, 0.417969f, 0.683594f}, {0.164062f, 0.007812f, 0.613281f, 0.964844f},
+ {0.632812f, 0.703125f, 0.042969f, 0.617188f}, {0.250000f, 0.554688f, 0.804688f, 0.464844f},
+ {0.394531f, 0.242188f, 0.371094f, 0.878906f}, {0.937500f, 0.847656f, 0.601562f, 0.816406f},
+ {0.804688f, 0.679688f, 0.195312f, 0.113281f}, {0.601562f, 0.378906f, 0.335938f, 0.320312f},
+ {0.339844f, 0.562500f, 0.812500f, 0.867188f}, {0.785156f, 0.437500f, 0.125000f, 0.140625f},
+ {0.230469f, 0.273438f, 0.355469f, 0.980469f}, {0.687500f, 0.656250f, 0.957031f, 0.468750f},
+ {0.156250f, 0.148438f, 0.082031f, 0.726562f}, {0.464844f, 0.535156f, 0.703125f, 0.898438f},
+ {0.039062f, 0.722656f, 0.324219f, 0.285156f}, {0.250000f, 0.945312f, 0.945312f, 0.117188f},
+ {0.777344f, 0.589844f, 0.093750f, 0.484375f}, {0.328125f, 0.285156f, 0.222656f, 0.023438f},
+ {0.609375f, 0.421875f, 0.828125f, 0.390625f}, {0.746094f, 0.617188f, 0.335938f, 0.929688f},
+ {0.261719f, 0.238281f, 0.449219f, 0.265625f}, {0.863281f, 0.472656f, 0.953125f, 0.031250f},
+ {0.105469f, 0.316406f, 0.292969f, 0.355469f}, {0.765625f, 0.976562f, 0.152344f, 0.531250f},
+ {0.523438f, 0.195312f, 0.933594f, 0.828125f}, {0.343750f, 0.554688f, 0.242188f, 0.304688f},
+ {0.414062f, 0.890625f, 0.414062f, 0.742188f}, {0.695312f, 0.496094f, 0.085938f, 0.250000f},
+ {0.824219f, 0.933594f, 0.316406f, 0.832031f}, {0.109375f, 0.386719f, 0.433594f, 0.347656f},
+ {0.199219f, 0.304688f, 0.000000f, 0.632812f}, {0.023438f, 0.843750f, 0.378906f, 0.988281f},
+ {0.679688f, 0.480469f, 0.746094f, 0.429688f}, {0.265625f, 0.769531f, 0.312500f, 0.574219f},
+ {0.058594f, 0.941406f, 0.593750f, 0.359375f}, {0.507812f, 0.074219f, 0.992188f, 0.527344f},
+ {0.160156f, 0.308594f, 0.167969f, 0.214844f}, {0.945312f, 0.382812f, 0.644531f, 0.964844f},
+ {0.789062f, 0.105469f, 0.117188f, 0.441406f}, {0.523438f, 0.613281f, 0.875000f, 0.812500f},
+ {0.722656f, 0.953125f, 0.492188f, 0.226562f}, {0.371094f, 0.347656f, 0.226562f, 0.617188f},
+ {0.101562f, 0.214844f, 0.984375f, 0.464844f}, {0.628906f, 0.406250f, 0.433594f, 0.742188f},
+ {0.777344f, 0.011719f, 0.035156f, 0.199219f}, {0.480469f, 0.277344f, 0.753906f, 0.855469f},
+ {0.339844f, 0.332031f, 0.347656f, 0.281250f}, {0.093750f, 0.207031f, 0.671875f, 0.792969f},
+ {0.808594f, 0.699219f, 0.156250f, 0.121094f}, {0.226562f, 0.097656f, 0.507812f, 0.335938f},
+ {0.476562f, 0.941406f, 0.367188f, 0.945312f}, {0.109375f, 0.660156f, 0.187500f, 0.210938f},
+ {0.800781f, 0.750000f, 0.609375f, 0.066406f}, {0.382812f, 0.984375f, 0.824219f, 0.714844f},
+ {0.738281f, 0.242188f, 0.296875f, 0.554688f}, {0.222656f, 0.832031f, 0.917969f, 0.906250f},
+ {0.320312f, 0.929688f, 0.464844f, 0.503906f}, {0.980469f, 0.519531f, 0.175781f, 0.277344f},
+ {0.500000f, 0.312500f, 0.808594f, 0.664062f}, {0.285156f, 0.816406f, 0.562500f, 0.789062f},
+ {0.929688f, 0.542969f, 0.437500f, 0.382812f}, {0.542969f, 0.414062f, 0.507812f, 0.023438f},
+ {0.777344f, 0.847656f, 0.308594f, 0.843750f}, {0.976562f, 0.121094f, 0.738281f, 0.527344f},
+ {0.042969f, 0.511719f, 0.164062f, 0.316406f}, {0.507812f, 0.812500f, 0.492188f, 0.824219f},
+ {0.339844f, 0.183594f, 0.875000f, 0.089844f}, {0.773438f, 0.074219f, 0.546875f, 0.281250f},
+ {0.460938f, 0.640625f, 0.929688f, 0.195312f}, {0.558594f, 0.121094f, 0.105469f, 0.695312f},
+ {0.285156f, 0.316406f, 0.781250f, 0.523438f}, {0.875000f, 0.769531f, 0.414062f, 0.019531f},
+ {0.121094f, 0.222656f, 0.984375f, 0.710938f}, {0.488281f, 0.710938f, 0.269531f, 0.398438f},
+ {0.992188f, 0.031250f, 0.625000f, 0.656250f}, {0.421875f, 0.597656f, 0.437500f, 0.101562f},
+ {0.593750f, 0.890625f, 0.777344f, 0.226562f}, {0.839844f, 0.214844f, 0.601562f, 0.589844f},
+ {0.718750f, 0.402344f, 0.253906f, 0.523438f}, {0.644531f, 0.019531f, 0.855469f, 0.687500f},
+ {0.433594f, 0.820312f, 0.667969f, 0.992188f}, {0.167969f, 0.746094f, 0.050781f, 0.238281f},
+ {0.109375f, 0.128906f, 0.582031f, 0.105469f}, {0.363281f, 0.847656f, 0.527344f, 0.527344f},
+ {0.687500f, 0.531250f, 0.191406f, 0.804688f}, {0.562500f, 0.777344f, 0.101562f, 0.683594f},
+ {0.636719f, 0.597656f, 0.796875f, 0.890625f}, {0.953125f, 0.402344f, 0.726562f, 0.113281f},
+ {0.164062f, 0.832031f, 0.011719f, 0.453125f}, {0.734375f, 0.265625f, 0.343750f, 0.019531f},
+ {0.210938f, 0.046875f, 0.675781f, 0.941406f}, {0.003906f, 0.089844f, 0.910156f, 0.421875f},
+ {0.535156f, 0.703125f, 0.523438f, 0.058594f}, {0.382812f, 0.578125f, 0.980469f, 0.582031f},
+ {0.984375f, 0.113281f, 0.699219f, 0.761719f}, {0.304688f, 0.906250f, 0.851562f, 0.023438f},
+ {0.859375f, 0.167969f, 0.250000f, 0.261719f}, {0.453125f, 0.230469f, 0.144531f, 0.113281f},
+ {0.960938f, 0.429688f, 0.453125f, 0.828125f}, {0.757812f, 0.628906f, 0.695312f, 0.156250f},
+ {0.375000f, 0.792969f, 0.343750f, 0.757812f}, {0.691406f, 0.476562f, 0.558594f, 0.593750f},
+ {0.250000f, 0.906250f, 0.300781f, 0.332031f}, {0.140625f, 0.152344f, 0.707031f, 0.136719f},
+ {0.871094f, 0.824219f, 0.394531f, 0.667969f}, {0.582031f, 0.496094f, 0.828125f, 0.941406f},
+ {0.453125f, 0.589844f, 0.769531f, 0.394531f}, {0.167969f, 0.910156f, 0.285156f, 0.058594f},
+ {0.027344f, 0.750000f, 0.195312f, 0.675781f}, {0.570312f, 0.949219f, 0.867188f, 0.515625f},
+ {0.843750f, 0.519531f, 0.078125f, 0.933594f}, {0.937500f, 0.878906f, 0.835938f, 0.070312f},
+ {0.539062f, 0.039062f, 0.292969f, 0.625000f}, {0.761719f, 0.492188f, 0.796875f, 0.558594f},
+ {0.597656f, 0.285156f, 0.703125f, 0.828125f}, {0.160156f, 0.171875f, 0.957031f, 0.656250f},
+ {0.671875f, 0.058594f, 0.035156f, 0.433594f}, {0.503906f, 0.324219f, 0.417969f, 0.863281f},
+ {0.925781f, 0.453125f, 0.230469f, 0.250000f}, {0.566406f, 0.136719f, 0.742188f, 0.031250f},
+ {0.066406f, 0.195312f, 0.097656f, 0.968750f}, {0.417969f, 0.753906f, 0.988281f, 0.097656f},
+ {0.675781f, 0.113281f, 0.273438f, 0.546875f}, {0.726562f, 0.468750f, 0.339844f, 0.136719f},
+ {0.394531f, 0.171875f, 0.914062f, 0.253906f}, {0.144531f, 0.277344f, 0.128906f, 0.996094f},
+ {0.316406f, 0.039062f, 0.578125f, 0.644531f}, {0.714844f, 0.574219f, 0.820312f, 0.910156f},
+ {0.378906f, 0.222656f, 0.269531f, 0.437500f}, {0.906250f, 0.984375f, 0.707031f, 0.175781f},
+ {0.113281f, 0.371094f, 0.339844f, 0.765625f}, {0.851562f, 0.882812f, 0.242188f, 0.570312f},
+ {0.015625f, 0.472656f, 0.453125f, 0.343750f}, {0.664062f, 0.972656f, 0.292969f, 0.984375f},
+ {0.097656f, 0.523438f, 0.660156f, 0.421875f}, {0.429688f, 0.058594f, 0.527344f, 0.234375f},
+ {0.187500f, 0.933594f, 0.070312f, 0.925781f}, {0.628906f, 0.132812f, 0.679688f, 0.558594f},
+ {0.753906f, 0.796875f, 0.203125f, 0.773438f}, {0.070312f, 0.484375f, 0.847656f, 0.328125f},
+ {0.355469f, 0.964844f, 0.035156f, 0.855469f}, {0.527344f, 0.335938f, 0.390625f, 0.933594f},
+ {0.210938f, 0.625000f, 0.191406f, 0.367188f}, {0.976562f, 0.460938f, 0.507812f, 0.191406f},
+ {0.582031f, 0.171875f, 0.425781f, 0.765625f}, {0.882812f, 0.507812f, 0.761719f, 0.332031f},
+ {0.812500f, 0.914062f, 0.265625f, 0.636719f}, {0.496094f, 0.050781f, 0.976562f, 0.875000f},
+ {0.980469f, 0.355469f, 0.738281f, 0.187500f}, {0.031250f, 0.898438f, 0.605469f, 0.476562f},
+ {0.320312f, 0.027344f, 0.410156f, 0.597656f}, {0.441406f, 0.734375f, 0.507812f, 0.218750f},
+ {0.066406f, 0.140625f, 0.894531f, 0.714844f}, {0.894531f, 0.468750f, 0.550781f, 0.562500f},
+ {0.652344f, 0.789062f, 0.785156f, 0.648438f}, {0.863281f, 0.972656f, 0.132812f, 0.191406f},
+ {0.457031f, 0.425781f, 0.277344f, 0.894531f}, {0.738281f, 0.203125f, 0.605469f, 0.683594f},
+ {0.640625f, 0.808594f, 0.480469f, 0.472656f}, {0.777344f, 0.515625f, 0.183594f, 0.199219f},
+ {0.125000f, 0.339844f, 0.953125f, 0.921875f}, {0.570312f, 0.671875f, 0.539062f, 0.500000f},
+ {0.210938f, 0.730469f, 0.781250f, 0.671875f}, {0.097656f, 0.019531f, 0.019531f, 0.890625f},
+ {0.597656f, 0.968750f, 0.835938f, 0.406250f}, {0.468750f, 0.191406f, 0.914062f, 0.082031f},
+ {0.042969f, 0.667969f, 0.445312f, 0.847656f}, {0.648438f, 0.421875f, 0.050781f, 0.722656f},
+ {0.335938f, 0.773438f, 0.179688f, 0.000000f}, {0.992188f, 0.300781f, 0.636719f, 0.257812f},
+ {0.273438f, 0.066406f, 0.093750f, 0.562500f}, {0.750000f, 0.171875f, 0.476562f, 0.902344f},
+ {0.902344f, 0.660156f, 0.691406f, 0.320312f}, {0.300781f, 0.445312f, 0.527344f, 0.144531f},
+ {0.195312f, 0.621094f, 0.406250f, 0.457031f}, {0.429688f, 0.152344f, 0.968750f, 0.707031f},
+ {0.273438f, 0.734375f, 0.453125f, 0.414062f}, {0.003906f, 0.914062f, 0.578125f, 0.265625f},
+ {0.410156f, 0.355469f, 0.093750f, 0.484375f}, {0.996094f, 0.847656f, 0.316406f, 0.148438f},
+ {0.839844f, 0.605469f, 0.484375f, 0.359375f}, {0.031250f, 0.511719f, 0.898438f, 0.773438f},
+ {0.187500f, 0.726562f, 0.679688f, 0.589844f}, {0.867188f, 0.644531f, 0.355469f, 0.390625f},
+ {0.136719f, 0.878906f, 0.843750f, 0.640625f}, {0.597656f, 0.589844f, 0.597656f, 0.441406f},
+ {0.222656f, 0.394531f, 0.714844f, 0.355469f}, {0.003906f, 0.863281f, 0.031250f, 0.925781f},
+ {0.871094f, 0.691406f, 0.761719f, 0.597656f}, {0.621094f, 0.628906f, 0.195312f, 0.414062f},
+ {0.230469f, 0.769531f, 0.941406f, 0.074219f}, {0.582031f, 0.929688f, 0.023438f, 0.230469f},
+ {0.812500f, 0.433594f, 0.398438f, 0.722656f}, {0.195312f, 0.304688f, 0.996094f, 0.000000f},
+ {0.679688f, 0.761719f, 0.089844f, 0.496094f}, {0.593750f, 0.605469f, 0.636719f, 0.925781f},
+ {0.222656f, 0.277344f, 0.750000f, 0.136719f}, {0.902344f, 0.730469f, 0.164062f, 0.644531f},
+ {0.515625f, 0.191406f, 0.863281f, 0.785156f}, {0.722656f, 0.585938f, 0.031250f, 0.601562f},
+ {0.949219f, 0.457031f, 0.921875f, 0.183594f}, {0.312500f, 0.851562f, 0.468750f, 0.066406f},
+ {0.003906f, 0.390625f, 0.750000f, 0.257812f}, {0.265625f, 0.304688f, 0.308594f, 0.496094f},
+ {0.808594f, 0.097656f, 0.542969f, 0.035156f}, {0.894531f, 0.761719f, 0.136719f, 0.152344f},
+ {0.089844f, 0.691406f, 0.992188f, 0.445312f}, {0.382812f, 0.070312f, 0.792969f, 0.070312f},
+ {0.011719f, 0.984375f, 0.355469f, 0.843750f}, {0.281250f, 0.308594f, 0.910156f, 0.593750f},
+ {0.660156f, 0.648438f, 0.152344f, 0.429688f}, {0.210938f, 0.210938f, 0.468750f, 0.722656f},
+ {0.406250f, 0.703125f, 0.019531f, 0.304688f}, {0.148438f, 0.273438f, 0.882812f, 0.078125f},
+ {0.832031f, 0.089844f, 0.250000f, 0.968750f}, {0.242188f, 0.863281f, 0.652344f, 0.335938f},
+ {0.601562f, 0.371094f, 0.199219f, 0.847656f}, {0.484375f, 0.679688f, 0.062500f, 0.277344f},
+ {0.289062f, 0.617188f, 0.453125f, 0.378906f}, {0.941406f, 0.343750f, 0.863281f, 0.515625f},
+ {0.152344f, 0.281250f, 0.218750f, 0.128906f}, {0.238281f, 0.746094f, 0.039062f, 0.316406f},
+ {0.046875f, 0.636719f, 0.792969f, 0.871094f}, {0.496094f, 0.031250f, 0.351562f, 0.390625f},
+ {0.406250f, 0.980469f, 0.660156f, 0.789062f}, {0.707031f, 0.558594f, 0.054688f, 0.609375f},
+ {0.886719f, 0.859375f, 0.890625f, 0.320312f}, {0.312500f, 0.132812f, 0.394531f, 0.039062f},
+ {0.816406f, 0.265625f, 0.250000f, 0.242188f}, {0.906250f, 0.355469f, 0.097656f, 0.488281f},
+ {0.410156f, 0.539062f, 0.746094f, 0.921875f}, {0.769531f, 0.093750f, 0.972656f, 0.539062f},
+ {0.203125f, 0.246094f, 0.527344f, 0.425781f}, {0.070312f, 0.695312f, 0.324219f, 0.800781f},
+ {0.820312f, 0.878906f, 0.906250f, 0.117188f}, {0.515625f, 0.375000f, 0.574219f, 0.761719f},
+ {0.660156f, 0.238281f, 0.941406f, 0.605469f}, {0.113281f, 0.105469f, 0.132812f, 0.835938f},
+ {0.710938f, 0.820312f, 0.652344f, 0.238281f}, {0.621094f, 0.394531f, 0.214844f, 0.992188f},
+ {0.136719f, 0.253906f, 0.011719f, 0.187500f}, {0.921875f, 0.578125f, 0.902344f, 0.046875f},
+ {0.730469f, 0.441406f, 0.246094f, 0.886719f}, {0.300781f, 0.800781f, 0.847656f, 0.957031f},
+ {0.238281f, 0.222656f, 0.648438f, 0.687500f}, {0.355469f, 0.894531f, 0.136719f, 0.109375f},
+ {0.707031f, 0.027344f, 0.554688f, 0.199219f}, {0.453125f, 0.285156f, 0.003906f, 0.800781f},
+ {0.953125f, 0.074219f, 0.511719f, 0.156250f}, {0.750000f, 0.671875f, 0.152344f, 0.863281f},
+ {0.824219f, 0.238281f, 0.402344f, 0.699219f}, {0.339844f, 0.003906f, 0.492188f, 0.042969f},
+ {0.964844f, 0.980469f, 0.867188f, 0.753906f}, {0.101562f, 0.367188f, 0.617188f, 0.511719f},
+ {0.492188f, 0.488281f, 0.363281f, 0.300781f}, {0.062500f, 0.156250f, 0.667969f, 0.800781f},
+ {0.277344f, 0.652344f, 0.550781f, 0.355469f}, {0.441406f, 0.062500f, 0.847656f, 0.601562f},
+ {0.953125f, 0.535156f, 0.199219f, 0.847656f}, {0.316406f, 0.140625f, 0.011719f, 0.250000f},
+ {0.757812f, 0.019531f, 0.910156f, 0.390625f}, {0.359375f, 0.390625f, 0.570312f, 0.042969f},
+ {0.054688f, 0.902344f, 0.386719f, 0.863281f}, {0.824219f, 0.339844f, 0.714844f, 0.304688f},
+ {0.390625f, 0.632812f, 0.242188f, 0.457031f}, {0.562500f, 0.238281f, 0.589844f, 0.734375f},
+ {0.921875f, 0.683594f, 0.097656f, 0.953125f}, {0.507812f, 0.550781f, 0.949219f, 0.816406f},
+ {0.671875f, 0.191406f, 0.878906f, 0.617188f}, {0.175781f, 0.835938f, 0.644531f, 0.703125f},
+ {0.316406f, 0.273438f, 0.718750f, 0.789062f}, {0.757812f, 0.871094f, 0.000000f, 0.550781f},
+ {0.546875f, 0.566406f, 0.113281f, 0.265625f}, {0.472656f, 0.382812f, 0.621094f, 0.941406f},
+ {0.925781f, 0.796875f, 0.699219f, 0.156250f}, {0.058594f, 0.437500f, 0.386719f, 0.050781f},
+ {0.777344f, 0.945312f, 0.308594f, 0.781250f}, {0.535156f, 0.496094f, 0.820312f, 0.394531f},
+ {0.906250f, 0.644531f, 0.125000f, 0.656250f}, {0.703125f, 0.542969f, 0.371094f, 0.144531f},
+ {0.804688f, 0.226562f, 0.988281f, 0.914062f}, {0.378906f, 0.906250f, 0.300781f, 0.046875f},
+ {0.035156f, 0.175781f, 0.753906f, 0.785156f}, {0.570312f, 0.566406f, 0.628906f, 0.976562f},
+ {0.343750f, 0.125000f, 0.390625f, 0.730469f}, {0.804688f, 0.878906f, 0.722656f, 0.238281f},
+ {0.605469f, 0.453125f, 0.921875f, 0.539062f}, {0.953125f, 0.257812f, 0.089844f, 0.093750f},
+ {0.179688f, 0.085938f, 0.429688f, 0.714844f}, {0.347656f, 0.402344f, 0.281250f, 0.167969f},
+ {0.628906f, 0.300781f, 0.613281f, 0.449219f}, {0.007812f, 0.503906f, 0.507812f, 0.984375f},
+ {0.539062f, 0.601562f, 0.187500f, 0.710938f}, {0.281250f, 0.835938f, 0.660156f, 0.632812f},
+ {0.113281f, 0.738281f, 0.363281f, 0.285156f}, {0.953125f, 0.933594f, 0.593750f, 0.191406f},
+ {0.554688f, 0.007812f, 0.238281f, 0.355469f}, {0.683594f, 0.625000f, 0.800781f, 0.980469f},
+ {0.417969f, 0.472656f, 0.000000f, 0.500000f}, {0.222656f, 0.984375f, 0.371094f, 0.218750f},
+ {0.382812f, 0.777344f, 0.253906f, 0.070312f}, {0.972656f, 0.566406f, 0.808594f, 0.378906f},
+ {0.472656f, 0.308594f, 0.316406f, 0.542969f}, {0.789062f, 0.058594f, 0.609375f, 0.781250f},
+ {0.855469f, 0.972656f, 0.726562f, 0.648438f}, {0.359375f, 0.652344f, 0.519531f, 0.746094f},
+ {0.511719f, 0.000000f, 0.425781f, 0.582031f}, {0.074219f, 0.125000f, 0.750000f, 0.296875f},
+ {0.625000f, 0.683594f, 0.382812f, 0.027344f}, {0.546875f, 0.960938f, 0.199219f, 0.523438f},
+ {0.792969f, 0.414062f, 0.964844f, 0.917969f}, {0.269531f, 0.488281f, 0.773438f, 0.308594f},
+ {0.375000f, 0.332031f, 0.312500f, 0.007812f}, {0.519531f, 0.941406f, 0.894531f, 0.570312f},
+ {0.175781f, 0.777344f, 0.226562f, 0.210938f}, {0.558594f, 0.558594f, 0.687500f, 0.324219f},
+ {0.449219f, 0.316406f, 0.078125f, 0.828125f}, {0.656250f, 0.101562f, 0.449219f, 0.164062f},
+ {0.839844f, 0.832031f, 0.250000f, 0.683594f}, {0.914062f, 0.253906f, 0.777344f, 0.554688f},
+ {0.738281f, 0.906250f, 0.144531f, 0.125000f}, {0.550781f, 0.714844f, 0.472656f, 0.945312f},
+ {0.039062f, 0.863281f, 0.695312f, 0.660156f}, {0.140625f, 0.445312f, 0.421875f, 0.453125f},
+ {0.476562f, 0.832031f, 0.796875f, 0.738281f}, {0.980469f, 0.679688f, 0.496094f, 0.101562f},
+ {0.269531f, 0.792969f, 0.121094f, 0.500000f}, {0.160156f, 0.101562f, 0.324219f, 0.152344f},
+ {0.656250f, 0.960938f, 0.820312f, 0.894531f}, {0.226562f, 0.000000f, 0.406250f, 0.640625f},
+ {0.851562f, 0.742188f, 0.156250f, 0.343750f}, {0.136719f, 0.917969f, 0.359375f, 0.425781f},
+ {0.414062f, 0.054688f, 0.492188f, 0.210938f}, {0.613281f, 0.441406f, 0.257812f, 0.300781f},
+ {0.941406f, 0.511719f, 0.449219f, 0.972656f}, {0.699219f, 0.128906f, 0.570312f, 0.652344f},
+ {0.847656f, 0.226562f, 0.281250f, 0.003906f}, {0.128906f, 0.734375f, 0.871094f, 0.375000f},
+ {0.339844f, 0.007812f, 0.535156f, 0.507812f}, {0.726562f, 0.117188f, 0.074219f, 0.894531f},
+ {0.257812f, 0.582031f, 0.933594f, 0.570312f}, {0.593750f, 0.171875f, 0.566406f, 0.250000f},
+ {0.351562f, 0.410156f, 0.484375f, 0.488281f}, {0.117188f, 0.996094f, 0.703125f, 0.761719f},
+ {0.191406f, 0.308594f, 0.843750f, 0.425781f}, {0.992188f, 0.003906f, 0.578125f, 0.609375f},
+ {0.769531f, 0.503906f, 0.164062f, 0.097656f}, {0.105469f, 0.816406f, 0.945312f, 0.460938f},
+ {0.699219f, 0.046875f, 0.109375f, 0.824219f}, {0.421875f, 0.957031f, 0.535156f, 0.007812f},
+ {0.898438f, 0.359375f, 0.312500f, 0.636719f}, {0.281250f, 0.718750f, 0.582031f, 0.964844f},
+ {0.082031f, 0.605469f, 0.863281f, 0.285156f}, {0.847656f, 0.800781f, 0.757812f, 0.070312f},
+ {0.445312f, 0.203125f, 0.125000f, 0.820312f}, {0.980469f, 0.902344f, 0.714844f, 0.562500f},
+ {0.164062f, 0.691406f, 0.921875f, 0.359375f}, {0.734375f, 0.046875f, 0.812500f, 0.144531f},
+ {0.613281f, 0.457031f, 0.480469f, 0.777344f}, {0.359375f, 0.320312f, 0.140625f, 0.089844f},
+ {0.488281f, 0.574219f, 0.886719f, 0.863281f}, {0.152344f, 0.855469f, 0.703125f, 0.636719f},
+ {0.921875f, 0.136719f, 0.421875f, 0.296875f}, {0.011719f, 0.527344f, 0.167969f, 0.710938f},
+ {0.601562f, 0.027344f, 0.742188f, 0.441406f}, {0.328125f, 0.707031f, 0.066406f, 0.882812f},
+ {0.050781f, 0.906250f, 0.875000f, 0.015625f}, {0.246094f, 0.500000f, 0.378906f, 0.339844f},
+ {0.566406f, 0.769531f, 0.117188f, 0.121094f}, {0.179688f, 0.195312f, 0.175781f, 0.386719f},
+ {0.656250f, 0.527344f, 0.988281f, 0.816406f}, {0.882812f, 0.304688f, 0.042969f, 0.449219f},
+ {0.425781f, 0.375000f, 0.601562f, 0.242188f}, {0.929688f, 0.562500f, 0.812500f, 0.617188f},
+ {0.101562f, 0.164062f, 0.261719f, 0.468750f}, {0.644531f, 0.820312f, 0.441406f, 0.718750f},
+ {0.023438f, 0.523438f, 0.632812f, 0.261719f}, {0.898438f, 0.437500f, 0.945312f, 0.953125f},
+ {0.066406f, 0.140625f, 0.109375f, 0.492188f}, {0.281250f, 0.882812f, 0.832031f, 0.902344f},
+ {0.781250f, 0.207031f, 0.292969f, 0.445312f}, {0.148438f, 0.722656f, 0.976562f, 0.089844f},
+ {0.402344f, 0.593750f, 0.523438f, 0.960938f}, {0.351562f, 0.046875f, 0.066406f, 0.871094f},
+ {0.175781f, 0.402344f, 0.316406f, 0.402344f}, {0.640625f, 0.339844f, 0.937500f, 0.046875f},
+ {0.871094f, 0.199219f, 0.589844f, 0.203125f}, {0.414062f, 0.945312f, 0.355469f, 0.316406f},
+ {0.691406f, 0.246094f, 0.277344f, 0.902344f}, {0.539062f, 0.507812f, 0.980469f, 0.566406f},
+ {0.609375f, 0.167969f, 0.214844f, 0.679688f}, {0.781250f, 0.429688f, 0.617188f, 0.820312f},
+ {0.464844f, 0.285156f, 0.875000f, 0.375000f}, {0.101562f, 0.488281f, 0.511719f, 0.019531f},
+ {0.710938f, 0.156250f, 0.691406f, 0.121094f}, {0.363281f, 0.359375f, 0.792969f, 0.578125f},
+ {0.792969f, 0.593750f, 0.046875f, 0.906250f}, {0.476562f, 0.972656f, 0.199219f, 0.089844f},
+ {0.031250f, 0.667969f, 0.824219f, 0.390625f}, {0.242188f, 0.343750f, 0.933594f, 0.480469f},
+ {0.421875f, 0.937500f, 0.339844f, 0.132812f}, {0.191406f, 0.613281f, 0.183594f, 0.750000f},
+ {0.617188f, 0.472656f, 0.800781f, 0.675781f}, {0.867188f, 0.855469f, 0.230469f, 0.203125f},
+ {0.449219f, 0.328125f, 0.660156f, 0.953125f}, {0.964844f, 0.746094f, 0.769531f, 0.828125f},
+ {0.007812f, 0.824219f, 0.179688f, 0.011719f}, {0.503906f, 0.125000f, 0.085938f, 0.531250f},
+ {0.421875f, 0.777344f, 0.433594f, 0.199219f}, {0.660156f, 0.710938f, 0.027344f, 0.679688f},
+ {0.261719f, 0.941406f, 0.347656f, 0.257812f}, {0.527344f, 0.386719f, 0.492188f, 0.351562f},
+ {0.843750f, 0.660156f, 0.671875f, 0.179688f}, {0.195312f, 0.195312f, 0.246094f, 0.578125f},
+ {0.062500f, 0.539062f, 0.828125f, 0.429688f}, {0.519531f, 0.847656f, 0.156250f, 0.363281f},
+ {0.730469f, 0.156250f, 0.472656f, 0.855469f}, {0.789062f, 0.941406f, 0.210938f, 0.527344f},
+ {0.250000f, 0.445312f, 0.960938f, 0.218750f}, {0.671875f, 0.078125f, 0.320312f, 0.753906f},
+ {0.500000f, 0.378906f, 0.417969f, 0.015625f}, {0.222656f, 0.988281f, 0.066406f, 0.949219f},
+ {0.828125f, 0.164062f, 0.285156f, 0.453125f}, {0.031250f, 0.222656f, 0.761719f, 0.589844f},
+ {0.878906f, 0.800781f, 0.042969f, 0.691406f}, {0.308594f, 0.351562f, 0.460938f, 0.027344f},
+ {0.789062f, 0.417969f, 0.656250f, 0.160156f}, {0.726562f, 0.285156f, 0.972656f, 0.941406f},
+ {0.859375f, 0.207031f, 0.597656f, 0.796875f}, {0.535156f, 0.839844f, 0.496094f, 0.621094f},
+ {0.941406f, 0.343750f, 0.445312f, 0.285156f}, {0.097656f, 0.164062f, 0.949219f, 0.914062f},
+ {0.687500f, 0.421875f, 0.789062f, 0.492188f}, {0.453125f, 0.871094f, 0.675781f, 0.214844f},
+ {0.035156f, 0.710938f, 0.289062f, 0.078125f}, {0.781250f, 0.941406f, 0.542969f, 0.703125f},
+ {0.207031f, 0.777344f, 0.101562f, 0.867188f}, {0.152344f, 0.089844f, 0.339844f, 0.984375f},
+ {0.480469f, 0.257812f, 0.707031f, 0.371094f}, {0.843750f, 0.722656f, 0.070312f, 0.835938f},
+ {0.230469f, 0.199219f, 0.750000f, 0.417969f}, {0.417969f, 0.054688f, 0.542969f, 0.773438f},
+ {0.617188f, 0.632812f, 0.375000f, 0.070312f}, {0.710938f, 0.386719f, 0.578125f, 0.613281f},
+ {0.921875f, 0.500000f, 0.652344f, 0.281250f}, {0.246094f, 0.921875f, 0.164062f, 0.644531f},
+ {0.687500f, 0.445312f, 0.890625f, 0.218750f}, {0.023438f, 0.789062f, 0.718750f, 0.476562f},
+ {0.996094f, 0.523438f, 0.820312f, 0.269531f}, {0.507812f, 0.117188f, 0.234375f, 0.710938f},
+ {0.253906f, 0.628906f, 0.105469f, 0.531250f}, {0.824219f, 0.574219f, 0.886719f, 0.800781f},
+ {0.070312f, 0.316406f, 0.050781f, 0.164062f}, {0.199219f, 0.039062f, 0.664062f, 0.964844f},
+ {0.867188f, 0.652344f, 0.769531f, 0.277344f}, {0.023438f, 0.867188f, 0.078125f, 0.222656f},
+ {0.335938f, 0.769531f, 0.960938f, 0.535156f}, {0.898438f, 0.535156f, 0.015625f, 0.996094f},
+ {0.585938f, 0.890625f, 0.269531f, 0.691406f}, {0.054688f, 0.644531f, 0.925781f, 0.175781f},
+ {0.980469f, 0.261719f, 0.585938f, 0.511719f}, {0.285156f, 0.789062f, 0.667969f, 0.742188f},
+ {0.113281f, 0.023438f, 0.402344f, 0.859375f}, {0.578125f, 0.417969f, 0.066406f, 0.230469f},
+ {0.800781f, 0.816406f, 0.753906f, 0.921875f}, {0.992188f, 0.164062f, 0.492188f, 0.816406f},
+ {0.519531f, 0.281250f, 0.414062f, 0.289062f}, {0.085938f, 0.675781f, 0.968750f, 0.449219f},
+ {0.167969f, 0.964844f, 0.046875f, 0.347656f}, {0.671875f, 0.035156f, 0.347656f, 0.113281f},
+ {0.761719f, 0.257812f, 0.277344f, 0.714844f}, {0.300781f, 0.457031f, 0.925781f, 0.316406f},
+ {0.578125f, 0.605469f, 0.617188f, 0.984375f}, {0.875000f, 0.082031f, 0.789062f, 0.851562f},
+ {0.156250f, 0.437500f, 0.265625f, 0.558594f}, {0.453125f, 0.253906f, 0.738281f, 0.898438f},
+ {0.968750f, 0.761719f, 0.882812f, 0.703125f}, {0.312500f, 0.480469f, 0.406250f, 0.949219f},
+ {0.679688f, 0.097656f, 0.031250f, 0.773438f}, {0.589844f, 0.308594f, 0.996094f, 0.125000f},
+ {0.375000f, 0.679688f, 0.691406f, 0.675781f}, {0.128906f, 0.000000f, 0.375000f, 0.929688f},
+ {0.562500f, 0.753906f, 0.570312f, 0.421875f}, {0.050781f, 0.562500f, 0.003906f, 0.304688f},
+ {0.386719f, 0.250000f, 0.531250f, 0.648438f}, {0.937500f, 0.781250f, 0.621094f, 0.843750f},
+ {0.437500f, 0.636719f, 0.953125f, 0.515625f}, {0.695312f, 0.515625f, 0.214844f, 0.242188f},
+ {0.253906f, 0.949219f, 0.562500f, 0.910156f}, {0.636719f, 0.097656f, 0.296875f, 0.406250f},
+ {0.453125f, 0.746094f, 0.109375f, 0.566406f}, {0.121094f, 0.917969f, 0.832031f, 0.480469f},
+ {0.269531f, 0.632812f, 0.207031f, 0.105469f}, {0.183594f, 0.449219f, 0.281250f, 0.179688f},
+ {0.746094f, 0.675781f, 0.031250f, 0.691406f}, {0.402344f, 0.113281f, 0.558594f, 0.574219f},
+ {0.894531f, 0.613281f, 0.238281f, 0.839844f}, {0.277344f, 0.277344f, 0.351562f, 0.964844f},
+ {0.976562f, 0.074219f, 0.832031f, 0.535156f}, {0.332031f, 0.472656f, 0.464844f, 0.335938f},
+ {0.738281f, 0.597656f, 0.882812f, 0.171875f}, {0.601562f, 0.855469f, 0.937500f, 0.125000f},
+ {0.292969f, 0.648438f, 0.500000f, 0.058594f}, {0.687500f, 0.996094f, 0.175781f, 0.660156f},
+ {0.984375f, 0.582031f, 0.820312f, 0.527344f}, {0.757812f, 0.761719f, 0.253906f, 0.339844f},
+ {0.488281f, 0.843750f, 0.472656f, 0.128906f}, {0.324219f, 0.265625f, 0.007812f, 0.726562f},
+ {0.085938f, 0.023438f, 0.792969f, 0.386719f}, {0.519531f, 0.664062f, 0.414062f, 0.789062f},
+ {0.578125f, 0.175781f, 0.351562f, 0.015625f}, {0.792969f, 0.292969f, 0.035156f, 0.585938f},
+ {0.308594f, 0.992188f, 0.441406f, 0.769531f}, {0.105469f, 0.683594f, 0.648438f, 0.988281f},
+ {0.765625f, 0.804688f, 0.519531f, 0.093750f}, {0.371094f, 0.074219f, 0.734375f, 0.621094f},
+ {0.929688f, 0.746094f, 0.156250f, 0.359375f}, {0.296875f, 0.964844f, 0.546875f, 0.011719f},
+ {0.722656f, 0.554688f, 0.453125f, 0.414062f}, {0.402344f, 0.347656f, 0.371094f, 0.761719f},
+ {0.964844f, 0.207031f, 0.187500f, 0.078125f}, {0.511719f, 0.074219f, 0.558594f, 0.476562f},
+ {0.257812f, 0.808594f, 0.433594f, 0.781250f}, {0.191406f, 0.410156f, 0.746094f, 0.839844f},
+ {0.750000f, 0.109375f, 0.117188f, 0.281250f}, {0.531250f, 0.195312f, 0.312500f, 0.031250f},
+ {0.859375f, 0.562500f, 0.976562f, 0.570312f}, {0.664062f, 0.703125f, 0.148438f, 0.320312f},
+ {0.363281f, 0.078125f, 0.687500f, 0.613281f}, {0.062500f, 0.531250f, 0.593750f, 0.082031f},
+ {0.703125f, 0.886719f, 0.105469f, 0.539062f}, {0.316406f, 0.382812f, 0.632812f, 0.035156f},
+ {0.390625f, 0.218750f, 0.453125f, 0.644531f}, {0.835938f, 0.562500f, 0.718750f, 0.582031f},
+ {0.214844f, 0.660156f, 0.546875f, 0.886719f}, {0.933594f, 0.359375f, 0.875000f, 0.160156f},
+ {0.089844f, 0.890625f, 0.218750f, 0.378906f}, {0.730469f, 0.210938f, 0.519531f, 0.062500f},
+ {0.359375f, 0.558594f, 0.972656f, 0.480469f}, {0.621094f, 0.324219f, 0.074219f, 0.136719f},
+ {0.042969f, 0.871094f, 0.191406f, 0.304688f}, {0.761719f, 0.589844f, 0.449219f, 0.050781f},
+ {0.476562f, 0.914062f, 0.750000f, 0.253906f}, {0.929688f, 0.414062f, 0.621094f, 0.476562f},
+ {0.218750f, 0.234375f, 0.269531f, 0.195312f}, {0.867188f, 0.519531f, 0.082031f, 0.042969f},
+ {0.320312f, 0.648438f, 0.773438f, 0.613281f}, {0.898438f, 0.328125f, 0.882812f, 0.882812f},
+ {0.769531f, 0.882812f, 0.175781f, 0.113281f}, {0.093750f, 0.109375f, 0.828125f, 0.183594f},
+ {0.566406f, 0.406250f, 0.687500f, 0.378906f}, {0.179688f, 0.714844f, 0.394531f, 0.054688f},
+ {0.984375f, 0.042969f, 0.863281f, 0.316406f}, {0.066406f, 0.671875f, 0.937500f, 0.824219f},
+ {0.574219f, 0.183594f, 0.351562f, 0.757812f}, {0.371094f, 0.570312f, 0.531250f, 0.347656f},
+ {0.675781f, 0.070312f, 0.718750f, 0.261719f}, {0.480469f, 0.949219f, 0.902344f, 0.976562f},
+ {0.808594f, 0.250000f, 0.648438f, 0.398438f}, {0.343750f, 0.539062f, 0.761719f, 0.054688f},
+ {0.601562f, 0.984375f, 0.082031f, 0.152344f}, {0.828125f, 0.828125f, 0.917969f, 0.730469f},
+ {0.121094f, 0.355469f, 0.625000f, 0.636719f}, {0.554688f, 0.226562f, 0.148438f, 0.406250f},
+ {0.398438f, 0.148438f, 0.222656f, 0.792969f}, {0.945312f, 0.429688f, 0.664062f, 0.562500f},
+ {0.082031f, 0.015625f, 0.410156f, 0.753906f}, {0.351562f, 0.367188f, 0.039062f, 0.187500f},
+ {0.562500f, 0.121094f, 0.359375f, 0.238281f}, {0.191406f, 0.308594f, 0.992188f, 0.886719f},
+ {0.128906f, 0.703125f, 0.144531f, 0.988281f}, {0.812500f, 0.539062f, 0.707031f, 0.558594f},
+ {0.968750f, 0.968750f, 0.933594f, 0.179688f}, {0.429688f, 0.335938f, 0.214844f, 0.929688f},
+ {0.195312f, 0.753906f, 0.554688f, 0.859375f}, {0.902344f, 0.867188f, 0.613281f, 0.363281f},
+ {0.468750f, 0.031250f, 0.960938f, 0.152344f}, {0.613281f, 0.234375f, 0.183594f, 0.304688f},
+ {0.210938f, 0.417969f, 0.292969f, 0.429688f}, {0.570312f, 0.476562f, 0.855469f, 0.882812f},
+ {0.652344f, 0.828125f, 0.406250f, 0.480469f}, {0.453125f, 0.386719f, 0.941406f, 0.722656f},
+ {0.085938f, 0.117188f, 0.246094f, 0.585938f}, {0.558594f, 0.710938f, 0.730469f, 0.933594f},
+ {0.140625f, 0.609375f, 0.804688f, 0.632812f}, {0.828125f, 0.996094f, 0.652344f, 0.320312f},
+ {0.687500f, 0.312500f, 0.335938f, 0.234375f}, {0.441406f, 0.472656f, 0.222656f, 0.402344f},
+ {0.632812f, 0.730469f, 0.890625f, 0.937500f}, {0.332031f, 0.871094f, 0.531250f, 0.675781f},
+ {0.164062f, 0.304688f, 0.464844f, 0.445312f}, {0.906250f, 0.914062f, 0.851562f, 0.160156f},
+ {0.460938f, 0.238281f, 0.246094f, 0.722656f}, {0.273438f, 0.753906f, 0.917969f, 0.398438f},
+ {0.777344f, 0.046875f, 0.304688f, 0.992188f}, {0.941406f, 0.496094f, 0.863281f, 0.847656f},
+ {0.554688f, 0.781250f, 0.144531f, 0.179688f}, {0.050781f, 0.097656f, 0.816406f, 0.406250f},
+ {0.621094f, 0.925781f, 0.003906f, 0.789062f}, {0.468750f, 0.515625f, 0.406250f, 0.273438f},
+ {0.820312f, 0.156250f, 0.679688f, 0.621094f}, {0.027344f, 0.691406f, 0.140625f, 0.734375f},
+ {0.234375f, 0.828125f, 0.382812f, 0.808594f}, {0.890625f, 0.054688f, 0.640625f, 0.410156f},
+ {0.398438f, 0.144531f, 0.582031f, 0.652344f}, {0.117188f, 0.722656f, 0.804688f, 0.519531f},
+ {0.265625f, 0.035156f, 0.132812f, 0.835938f}, {0.824219f, 0.781250f, 0.335938f, 0.589844f},
+ {0.015625f, 0.972656f, 0.503906f, 0.324219f}, {0.644531f, 0.367188f, 0.843750f, 0.792969f},
+ {0.460938f, 0.839844f, 0.656250f, 0.375000f}, {0.707031f, 0.179688f, 0.445312f, 0.496094f},
+ {0.148438f, 0.484375f, 0.253906f, 0.269531f}, {0.292969f, 0.585938f, 0.347656f, 0.710938f},
+ {0.800781f, 0.292969f, 0.101562f, 0.792969f}, {0.343750f, 0.847656f, 0.503906f, 0.992188f},
+ {0.511719f, 0.453125f, 0.160156f, 0.542969f}, {0.843750f, 0.261719f, 0.628906f, 0.207031f},
+ {0.214844f, 0.878906f, 0.777344f, 0.082031f}, {0.957031f, 0.492188f, 0.054688f, 0.855469f},
+ {0.890625f, 0.382812f, 0.136719f, 0.656250f}, {0.019531f, 0.804688f, 0.328125f, 0.519531f},
+ {0.636719f, 0.042969f, 0.402344f, 0.753906f}, {0.148438f, 0.753906f, 0.179688f, 0.449219f},
+ {0.046875f, 0.398438f, 0.507812f, 0.320312f}, {0.511719f, 0.019531f, 0.429688f, 0.253906f},
+ {0.222656f, 0.660156f, 0.003906f, 0.003906f}, {0.707031f, 0.910156f, 0.726562f, 0.933594f},
+ {0.011719f, 0.742188f, 0.781250f, 0.281250f}, {0.863281f, 0.316406f, 0.281250f, 0.445312f},
+ {0.515625f, 0.496094f, 0.570312f, 0.910156f}, {0.785156f, 0.875000f, 0.867188f, 0.605469f},
+ {0.042969f, 0.230469f, 0.207031f, 0.824219f}, {0.667969f, 0.468750f, 0.605469f, 0.472656f},
+ {0.878906f, 0.906250f, 0.316406f, 0.046875f}, {0.382812f, 0.164062f, 0.765625f, 0.671875f},
+ {0.015625f, 0.093750f, 0.070312f, 0.312500f}, {0.640625f, 0.425781f, 0.277344f, 0.457031f},
+ {0.847656f, 0.613281f, 0.859375f, 0.113281f}, {0.062500f, 0.128906f, 0.128906f, 0.691406f},
+ {0.726562f, 0.558594f, 0.761719f, 0.503906f}, {0.398438f, 0.355469f, 0.382812f, 0.917969f},
+ {0.886719f, 0.925781f, 0.000000f, 0.667969f}, {0.000000f, 0.148438f, 0.792969f, 0.062500f},
+ {0.156250f, 0.277344f, 0.597656f, 0.242188f}, {0.808594f, 0.191406f, 0.316406f, 0.855469f},
+ {0.945312f, 0.910156f, 0.042969f, 0.117188f}, {0.226562f, 0.453125f, 0.914062f, 0.191406f},
+ {0.761719f, 0.250000f, 0.109375f, 0.441406f}, {0.308594f, 0.015625f, 0.480469f, 0.882812f},
+ {0.015625f, 0.671875f, 0.847656f, 0.132812f}, {0.878906f, 0.144531f, 0.074219f, 0.605469f},
+ {0.933594f, 0.945312f, 0.613281f, 0.074219f}, {0.074219f, 0.503906f, 0.777344f, 0.359375f},
+ {0.406250f, 0.378906f, 0.050781f, 0.796875f}, {0.718750f, 0.605469f, 0.367188f, 0.886719f},
+ {0.003906f, 0.449219f, 0.554688f, 0.500000f}, {0.218750f, 0.988281f, 0.015625f, 0.218750f},
+ {0.640625f, 0.636719f, 0.730469f, 0.769531f}, {0.117188f, 0.144531f, 0.375000f, 0.269531f},
+ {0.429688f, 0.429688f, 0.250000f, 0.691406f}, {0.902344f, 0.839844f, 0.488281f, 0.957031f},
+ {0.261719f, 0.316406f, 0.949219f, 0.460938f}, {0.339844f, 0.738281f, 0.304688f, 0.085938f},
+ {0.531250f, 0.015625f, 0.101562f, 0.507812f}, {0.691406f, 0.984375f, 0.832031f, 0.941406f},
+ {0.945312f, 0.378906f, 0.890625f, 0.015625f}, {0.562500f, 0.628906f, 0.324219f, 0.203125f},
+ {0.796875f, 0.953125f, 0.011719f, 0.921875f}, {0.656250f, 0.285156f, 0.953125f, 0.730469f},
+ {0.167969f, 0.183594f, 0.542969f, 0.085938f}, {0.542969f, 0.468750f, 0.906250f, 0.890625f},
+ {0.410156f, 0.617188f, 0.046875f, 0.695312f}, {0.996094f, 0.128906f, 0.199219f, 0.972656f},
+ {0.191406f, 0.050781f, 0.945312f, 0.148438f}, {0.511719f, 0.937500f, 0.117188f, 0.738281f},
+ {0.613281f, 0.734375f, 0.722656f, 0.910156f}, {0.921875f, 0.019531f, 0.988281f, 0.429688f},
+ {0.652344f, 0.972656f, 0.601562f, 0.601562f}, {0.003906f, 0.136719f, 0.746094f, 0.664062f},
+ {0.722656f, 0.359375f, 0.011719f, 0.148438f}, {0.402344f, 0.609375f, 0.257812f, 0.718750f},
+ {0.765625f, 0.785156f, 0.414062f, 0.437500f}, {0.082031f, 0.296875f, 0.480469f, 0.605469f},
+ {0.542969f, 0.144531f, 0.996094f, 0.011719f}, {0.312500f, 0.699219f, 0.589844f, 0.882812f},
+ {0.242188f, 0.328125f, 0.859375f, 0.222656f}, {0.968750f, 0.593750f, 0.699219f, 0.804688f},
+ {0.425781f, 0.156250f, 0.964844f, 0.902344f}, {0.753906f, 0.492188f, 0.296875f, 0.605469f},
+ {0.917969f, 0.792969f, 0.582031f, 0.472656f}, {0.468750f, 0.546875f, 0.382812f, 0.847656f},
+ {0.632812f, 0.058594f, 0.074219f, 0.066406f}, {0.261719f, 0.937500f, 0.968750f, 0.683594f},
+ {0.160156f, 0.687500f, 0.125000f, 0.320312f}, {0.441406f, 0.781250f, 0.648438f, 0.019531f},
+ {0.320312f, 0.972656f, 0.023438f, 0.710938f}, {0.937500f, 0.070312f, 0.429688f, 0.164062f},
+ {0.273438f, 0.406250f, 0.886719f, 0.414062f}, {0.585938f, 0.789062f, 0.511719f, 0.804688f},
+ {0.234375f, 0.574219f, 0.636719f, 0.230469f}, {0.750000f, 0.832031f, 0.460938f, 0.531250f},
+ {0.355469f, 0.250000f, 0.695312f, 0.750000f}, {0.281250f, 0.480469f, 0.328125f, 0.250000f},
+ {0.132812f, 0.726562f, 0.500000f, 0.035156f}, {0.671875f, 0.886719f, 0.917969f, 0.601562f},
+ {0.972656f, 0.621094f, 0.664062f, 0.199219f}, {0.328125f, 0.699219f, 0.472656f, 0.789062f},
+ {0.511719f, 0.519531f, 0.121094f, 0.519531f}, {0.695312f, 0.593750f, 0.699219f, 0.300781f},
+ {0.351562f, 0.054688f, 0.503906f, 0.683594f}, {0.621094f, 0.757812f, 0.628906f, 0.351562f},
+ {0.484375f, 0.882812f, 0.285156f, 0.808594f}, {0.660156f, 0.394531f, 0.152344f, 0.046875f},
+ {0.386719f, 0.574219f, 0.992188f, 0.660156f}, {0.121094f, 0.824219f, 0.691406f, 0.738281f},
+ {0.242188f, 0.234375f, 0.410156f, 0.531250f}, {0.601562f, 0.031250f, 0.171875f, 0.191406f},
+ {0.773438f, 0.085938f, 0.277344f, 0.960938f}, {0.507812f, 0.839844f, 0.656250f, 0.113281f},
+ {0.968750f, 0.179688f, 0.812500f, 0.023438f}, {0.566406f, 0.351562f, 0.203125f, 0.632812f},
+ {0.878906f, 0.289062f, 0.515625f, 0.343750f}, {0.484375f, 0.710938f, 0.996094f, 0.121094f},
+ {0.183594f, 0.957031f, 0.589844f, 0.519531f}, {0.734375f, 0.191406f, 0.187500f, 0.042969f},
+ {0.804688f, 0.621094f, 0.644531f, 0.222656f}, {0.148438f, 0.269531f, 0.757812f, 0.898438f},
+ {0.406250f, 0.480469f, 0.574219f, 0.664062f}, {0.109375f, 0.789062f, 0.457031f, 0.328125f},
+ {0.296875f, 0.234375f, 0.718750f, 0.246094f}, {0.191406f, 0.523438f, 0.500000f, 0.570312f},
+ {0.500000f, 0.449219f, 0.281250f, 0.351562f}, {0.324219f, 0.347656f, 0.218750f, 0.160156f},
+ {0.953125f, 0.683594f, 0.378906f, 0.441406f}, {0.710938f, 0.539062f, 0.703125f, 0.382812f},
+ {0.097656f, 0.886719f, 0.425781f, 0.003906f}, {0.347656f, 0.281250f, 0.296875f, 0.546875f},
+ {0.761719f, 0.695312f, 0.554688f, 0.246094f}, {0.039062f, 0.433594f, 0.386719f, 0.078125f},
+ {0.253906f, 0.230469f, 0.496094f, 0.566406f}, {0.378906f, 0.804688f, 0.058594f, 0.023438f},
+ {0.449219f, 0.648438f, 0.304688f, 0.335938f}, {0.875000f, 0.199219f, 0.437500f, 0.101562f},
+ {0.136719f, 0.917969f, 0.917969f, 0.476562f}, {0.285156f, 0.539062f, 0.847656f, 0.902344f},
+ {0.617188f, 0.003906f, 0.703125f, 0.250000f}, {0.167969f, 0.996094f, 0.210938f, 0.953125f},
+ {0.429688f, 0.437500f, 0.800781f, 0.308594f}, {0.738281f, 0.847656f, 0.265625f, 0.140625f},
+ {0.847656f, 0.210938f, 0.019531f, 0.566406f}, {0.558594f, 0.929688f, 0.125000f, 0.085938f},
+ {0.660156f, 0.878906f, 0.808594f, 0.363281f}, {0.179688f, 0.289062f, 0.203125f, 0.671875f},
+ {0.308594f, 0.203125f, 0.851562f, 0.117188f}, {0.367188f, 0.414062f, 0.902344f, 0.746094f},
+ {0.101562f, 0.621094f, 0.527344f, 0.210938f}, {0.804688f, 0.265625f, 0.332031f, 0.500000f},
+ {0.914062f, 0.175781f, 0.464844f, 0.960938f}, {0.726562f, 0.535156f, 0.734375f, 0.378906f},
+ {0.628906f, 0.656250f, 0.539062f, 0.628906f}, {0.074219f, 0.601562f, 0.804688f, 0.273438f},
+ {0.453125f, 0.347656f, 0.109375f, 0.578125f}, {0.531250f, 0.210938f, 0.378906f, 0.867188f},
+ {0.699219f, 0.683594f, 0.175781f, 0.085938f}, {0.156250f, 0.050781f, 0.832031f, 0.972656f},
+ {0.492188f, 0.945312f, 0.972656f, 0.625000f}, {0.953125f, 0.382812f, 0.085938f, 0.820312f},
+ {0.550781f, 0.199219f, 0.253906f, 0.417969f}, {0.246094f, 0.082031f, 0.566406f, 0.847656f},
+ {0.449219f, 0.308594f, 0.070312f, 0.371094f}, {0.785156f, 0.003906f, 0.234375f, 0.132812f},
+ {0.097656f, 0.984375f, 0.984375f, 0.746094f}, {0.269531f, 0.847656f, 0.187500f, 0.980469f},
+ {0.871094f, 0.656250f, 0.824219f, 0.031250f}, {0.039062f, 0.296875f, 0.398438f, 0.550781f},
+ {0.187500f, 0.503906f, 0.882812f, 0.917969f}, {0.992188f, 0.179688f, 0.589844f, 0.500000f},
+ {0.789062f, 0.718750f, 0.363281f, 0.289062f}, {0.558594f, 0.332031f, 0.007812f, 0.980469f},
+ {0.464844f, 0.531250f, 0.507812f, 0.460938f}, {0.824219f, 0.640625f, 0.902344f, 0.253906f},
+ {0.203125f, 0.781250f, 0.722656f, 0.593750f}, {0.304688f, 0.687500f, 0.960938f, 0.308594f},
+ {0.136719f, 0.117188f, 0.125000f, 0.707031f}, {0.839844f, 0.550781f, 0.410156f, 0.917969f},
+ {0.351562f, 0.808594f, 0.769531f, 0.468750f}, {0.289062f, 0.000000f, 0.074219f, 0.863281f},
+ {0.667969f, 0.582031f, 0.691406f, 0.597656f}, {0.015625f, 0.375000f, 0.117188f, 0.371094f},
+ {0.578125f, 0.054688f, 0.902344f, 0.765625f}, {0.957031f, 0.882812f, 0.351562f, 0.558594f},
+ {0.644531f, 0.417969f, 0.058594f, 0.128906f}, {0.847656f, 0.664062f, 0.238281f, 0.429688f},
+ {0.464844f, 0.070312f, 0.171875f, 0.773438f}, {0.746094f, 0.917969f, 0.929688f, 0.855469f},
+ {0.000000f, 0.109375f, 0.777344f, 0.613281f}, {0.867188f, 0.851562f, 0.660156f, 0.996094f},
+ {0.609375f, 0.796875f, 0.851562f, 0.273438f}, {0.445312f, 0.222656f, 0.160156f, 0.777344f},
+ {0.808594f, 0.078125f, 0.597656f, 0.199219f}, {0.277344f, 0.394531f, 0.800781f, 0.636719f},
+ {0.582031f, 0.824219f, 0.753906f, 0.464844f}, {0.945312f, 0.511719f, 0.632812f, 0.851562f},
+ {0.835938f, 0.316406f, 0.226562f, 0.941406f}, {0.082031f, 0.554688f, 0.863281f, 0.210938f},
+ {0.546875f, 0.378906f, 0.785156f, 0.812500f}, {0.222656f, 0.468750f, 0.191406f, 0.289062f},
+ {0.953125f, 0.753906f, 0.535156f, 0.843750f}, {0.484375f, 0.089844f, 0.652344f, 0.367188f},
+ {0.828125f, 0.226562f, 0.089844f, 0.042969f}, {0.687500f, 0.722656f, 0.566406f, 0.746094f},
+ {0.937500f, 0.640625f, 0.375000f, 0.488281f}, {0.496094f, 0.105469f, 0.675781f, 0.386719f},
+ {0.113281f, 0.527344f, 0.460938f, 0.699219f}, {0.375000f, 0.453125f, 0.546875f, 0.945312f},
+ {0.878906f, 0.679688f, 0.343750f, 0.511719f}, {0.070312f, 0.085938f, 0.644531f, 0.179688f},
+ {0.820312f, 0.718750f, 0.480469f, 0.996094f}, {0.992188f, 0.957031f, 0.160156f, 0.390625f},
+ {0.683594f, 0.121094f, 0.695312f, 0.582031f}, {0.582031f, 0.824219f, 0.242188f, 0.148438f},
+ {0.203125f, 0.382812f, 0.835938f, 0.867188f}, {0.386719f, 0.042969f, 0.925781f, 0.105469f},
+ {0.832031f, 0.285156f, 0.296875f, 0.792969f}, {0.152344f, 0.738281f, 0.671875f, 0.945312f},
+ {0.765625f, 0.855469f, 0.234375f, 0.347656f}, {0.855469f, 0.511719f, 0.914062f, 0.734375f},
+ {0.101562f, 0.917969f, 0.582031f, 0.000000f}, {0.917969f, 0.316406f, 0.019531f, 0.394531f},
+ {0.804688f, 0.636719f, 0.410156f, 0.328125f}, {0.601562f, 0.765625f, 0.199219f, 0.171875f},
+ {0.027344f, 0.515625f, 0.800781f, 0.949219f}, {0.761719f, 0.835938f, 0.890625f, 0.285156f},
+ {0.183594f, 0.429688f, 0.734375f, 0.554688f}, {0.855469f, 0.773438f, 0.433594f, 0.925781f},
+ {0.593750f, 0.222656f, 0.871094f, 0.457031f}, {0.402344f, 0.351562f, 0.351562f, 0.625000f},
+ {0.917969f, 0.414062f, 0.554688f, 0.402344f}, {0.539062f, 0.136719f, 0.023438f, 0.257812f},
+ {0.433594f, 0.792969f, 0.718750f, 0.757812f}, {0.082031f, 0.960938f, 0.210938f, 0.160156f},
+ {0.281250f, 0.097656f, 0.789062f, 0.378906f}, {0.714844f, 0.863281f, 0.304688f, 0.859375f},
+ {0.343750f, 0.433594f, 0.828125f, 0.000000f}, {0.953125f, 0.976562f, 0.226562f, 0.769531f},
+ {0.042969f, 0.273438f, 0.566406f, 0.843750f}, {0.691406f, 0.402344f, 0.335938f, 0.425781f},
+ {0.394531f, 0.937500f, 0.476562f, 0.550781f}, {0.613281f, 0.476562f, 0.636719f, 0.808594f},
+ {0.093750f, 0.878906f, 0.890625f, 0.167969f}, {0.789062f, 0.234375f, 0.324219f, 0.066406f},
+ {0.980469f, 0.511719f, 0.441406f, 0.933594f}, {0.382812f, 0.675781f, 0.796875f, 0.710938f},
+ {0.500000f, 0.765625f, 0.273438f, 0.312500f}, {0.078125f, 0.125000f, 0.527344f, 0.839844f},
+ {0.757812f, 0.554688f, 0.980469f, 0.187500f}, {0.246094f, 0.332031f, 0.816406f, 0.960938f},
+ {0.589844f, 0.167969f, 0.421875f, 0.687500f}, {0.984375f, 0.582031f, 0.609375f, 0.074219f},
+ {0.089844f, 0.746094f, 0.097656f, 0.472656f}, {0.375000f, 0.406250f, 0.046875f, 0.117188f},
+ {0.238281f, 0.023438f, 0.468750f, 0.664062f}, {0.042969f, 0.570312f, 0.984375f, 0.527344f},
+ {0.894531f, 0.988281f, 0.097656f, 0.917969f}, {0.679688f, 0.750000f, 0.882812f, 0.824219f},
+ {0.121094f, 0.156250f, 0.015625f, 0.296875f}, {0.417969f, 0.601562f, 0.152344f, 0.675781f},
+ {0.714844f, 0.062500f, 0.925781f, 0.367188f}, {0.187500f, 0.878906f, 0.679688f, 0.515625f},
+ {0.789062f, 0.097656f, 0.574219f, 0.632812f}, {0.671875f, 0.683594f, 0.132812f, 0.968750f},
+ {0.593750f, 0.828125f, 0.363281f, 0.695312f}, {0.332031f, 0.324219f, 0.281250f, 0.535156f},
+ {0.058594f, 0.406250f, 0.957031f, 0.585938f}, {0.250000f, 0.871094f, 0.164062f, 0.800781f},
+ {0.355469f, 0.574219f, 0.894531f, 0.187500f}, {0.042969f, 0.359375f, 0.070312f, 0.625000f},
+ {0.207031f, 0.265625f, 0.949219f, 0.839844f}, {0.703125f, 0.031250f, 0.746094f, 0.039062f},
+ {0.273438f, 0.609375f, 0.242188f, 0.246094f}, {0.601562f, 0.371094f, 0.093750f, 0.781250f},
+ {0.535156f, 0.859375f, 0.765625f, 0.542969f}, {0.140625f, 0.324219f, 0.035156f, 0.292969f},
+ {0.425781f, 0.476562f, 0.605469f, 0.812500f}, {0.292969f, 0.585938f, 0.417969f, 0.660156f},
+ {0.023438f, 0.890625f, 0.066406f, 0.246094f}, {0.542969f, 0.445312f, 0.183594f, 0.539062f},
+ {0.484375f, 0.152344f, 0.976562f, 0.027344f}, {0.226562f, 0.953125f, 0.480469f, 0.488281f},
+ {0.988281f, 0.003906f, 0.054688f, 0.128906f}, {0.339844f, 0.125000f, 0.703125f, 0.648438f},
+ {0.406250f, 0.265625f, 0.281250f, 0.511719f}, {0.203125f, 0.453125f, 0.746094f, 0.890625f},
+ {0.308594f, 0.164062f, 0.535156f, 0.105469f}, {0.425781f, 0.023438f, 0.679688f, 0.574219f},
+ {0.871094f, 0.976562f, 0.609375f, 0.718750f}, {0.371094f, 0.664062f, 0.367188f, 0.078125f},
+ {0.531250f, 0.140625f, 0.160156f, 0.660156f}, {0.050781f, 0.570312f, 0.289062f, 0.007812f},
+ {0.710938f, 0.488281f, 0.636719f, 0.332031f}, {0.214844f, 0.089844f, 0.773438f, 0.207031f},
+ {0.132812f, 0.937500f, 0.097656f, 0.871094f}, {0.746094f, 0.554688f, 0.257812f, 0.097656f},
+ {0.832031f, 0.039062f, 0.964844f, 0.601562f}, {0.597656f, 0.625000f, 0.464844f, 0.703125f},
+ {0.898438f, 0.371094f, 0.539062f, 0.218750f}, {0.160156f, 0.207031f, 0.132812f, 0.574219f},
+ {0.515625f, 0.050781f, 0.937500f, 0.121094f}, {0.089844f, 0.734375f, 0.449219f, 0.343750f},
+ {0.640625f, 0.156250f, 0.093750f, 0.671875f}, {0.894531f, 0.578125f, 0.039062f, 0.058594f},
+ {0.449219f, 0.218750f, 0.847656f, 0.226562f}, {0.753906f, 0.726562f, 0.175781f, 0.382812f},
+ {0.035156f, 0.082031f, 0.261719f, 0.281250f}, {0.542969f, 0.328125f, 0.023438f, 0.652344f},
+ {0.234375f, 0.910156f, 0.562500f, 0.433594f}, {0.707031f, 0.449219f, 0.855469f, 0.242188f},
+ {0.312500f, 0.941406f, 0.394531f, 0.003906f}, {0.203125f, 0.218750f, 0.035156f, 0.625000f},
+ {0.917969f, 0.835938f, 0.628906f, 0.492188f}, {0.363281f, 0.972656f, 0.699219f, 0.382812f},
+ {0.156250f, 0.710938f, 0.125000f, 0.035156f}, {0.425781f, 0.265625f, 0.367188f, 0.535156f},
+ {0.667969f, 0.875000f, 0.535156f, 0.300781f}, {0.527344f, 0.640625f, 0.742188f, 0.753906f},
+ {0.769531f, 0.148438f, 0.328125f, 0.871094f}, {0.152344f, 0.484375f, 0.230469f, 0.046875f},
+ {0.488281f, 0.332031f, 0.511719f, 0.339844f}, {0.214844f, 0.656250f, 0.265625f, 0.105469f},
+ {0.539062f, 0.906250f, 0.363281f, 0.417969f}, {0.878906f, 0.207031f, 0.464844f, 0.167969f},
+ {0.304688f, 0.957031f, 0.324219f, 0.769531f}, {0.496094f, 0.726562f, 0.039062f, 0.117188f},
+ {0.980469f, 0.273438f, 0.406250f, 0.453125f}, {0.031250f, 0.167969f, 0.976562f, 0.058594f},
+ {0.414062f, 0.585938f, 0.804688f, 0.156250f}, {0.117188f, 0.960938f, 0.023438f, 0.222656f},
+ {0.882812f, 0.507812f, 0.449219f, 0.414062f}, {0.554688f, 0.066406f, 0.757812f, 0.113281f},
+ {0.808594f, 0.175781f, 0.515625f, 0.984375f}, {0.621094f, 0.937500f, 0.304688f, 0.269531f},
+ {0.769531f, 0.824219f, 0.609375f, 0.449219f}, {0.906250f, 0.750000f, 0.386719f, 0.738281f},
+ {0.464844f, 0.980469f, 0.878906f, 0.335938f}, {0.000000f, 0.542969f, 0.441406f, 0.429688f},
+ {0.781250f, 0.179688f, 0.984375f, 0.027344f}, {0.238281f, 0.765625f, 0.304688f, 0.914062f},
+ {0.500000f, 0.011719f, 0.914062f, 0.082031f}, {0.871094f, 0.238281f, 0.792969f, 0.355469f},
+ {0.750000f, 0.707031f, 0.632812f, 0.742188f}, {0.945312f, 0.796875f, 0.382812f, 0.433594f},
+ {0.109375f, 0.207031f, 0.570312f, 0.316406f}, {0.707031f, 0.492188f, 0.761719f, 0.203125f},
+ {0.597656f, 0.390625f, 0.328125f, 0.917969f}, {0.003906f, 0.554688f, 0.941406f, 0.261719f},
+ {0.519531f, 0.777344f, 0.453125f, 0.445312f}, {0.628906f, 0.699219f, 0.144531f, 0.679688f},
+ {0.066406f, 0.867188f, 0.878906f, 0.226562f}, {0.683594f, 0.589844f, 0.308594f, 0.777344f},
+ {0.117188f, 0.246094f, 0.464844f, 0.437500f}, {0.933594f, 0.339844f, 0.027344f, 0.488281f},
+ {0.632812f, 0.917969f, 0.925781f, 0.234375f}, {0.320312f, 0.273438f, 0.535156f, 0.886719f},
+ {0.980469f, 0.816406f, 0.050781f, 0.734375f}, {0.476562f, 0.734375f, 0.488281f, 0.152344f},
+ {0.648438f, 0.187500f, 0.687500f, 0.824219f}, {0.308594f, 0.875000f, 0.847656f, 0.460938f},
+ {0.367188f, 0.695312f, 0.417969f, 0.949219f}, {0.234375f, 0.281250f, 0.097656f, 0.035156f},
+ {0.007812f, 0.468750f, 0.667969f, 0.421875f}, {0.664062f, 0.921875f, 0.753906f, 0.914062f},
+ {0.863281f, 0.597656f, 0.605469f, 0.718750f}, {0.378906f, 0.320312f, 0.386719f, 0.476562f},
+ {0.273438f, 0.492188f, 0.683594f, 0.953125f}, {0.550781f, 0.851562f, 0.781250f, 0.144531f},
+ {0.167969f, 0.027344f, 0.593750f, 0.613281f}, {0.250000f, 0.367188f, 0.925781f, 0.976562f},
+ {0.941406f, 0.656250f, 0.511719f, 0.746094f}, {0.468750f, 0.757812f, 0.675781f, 0.531250f},
+ {0.156250f, 0.140625f, 0.953125f, 0.132812f}, {0.890625f, 0.269531f, 0.164062f, 0.792969f},
+ {0.820312f, 0.074219f, 0.734375f, 0.988281f}, {0.449219f, 0.605469f, 0.476562f, 0.105469f},
+ {0.546875f, 0.503906f, 0.210938f, 0.738281f}, {0.058594f, 0.019531f, 0.320312f, 0.277344f},
+ {0.875000f, 0.390625f, 0.867188f, 0.914062f}, {0.718750f, 0.468750f, 0.261719f, 0.808594f},
+ {0.281250f, 0.207031f, 0.953125f, 0.175781f}, {0.832031f, 0.312500f, 0.835938f, 0.402344f},
+ {0.914062f, 0.945312f, 0.640625f, 0.230469f}, {0.316406f, 0.816406f, 0.402344f, 0.457031f},
+ {0.648438f, 0.257812f, 0.730469f, 0.593750f}, {0.976562f, 0.441406f, 0.667969f, 0.730469f},
+ {0.363281f, 0.011719f, 0.957031f, 0.984375f}, {0.015625f, 0.363281f, 0.820312f, 0.019531f},
+ {0.636719f, 0.476562f, 0.531250f, 0.574219f}, {0.144531f, 0.632812f, 0.734375f, 0.878906f},
+ {0.355469f, 0.421875f, 0.253906f, 0.269531f}, {0.269531f, 0.929688f, 0.484375f, 0.730469f},
+ {0.773438f, 0.027344f, 0.621094f, 0.339844f}, {0.921875f, 0.253906f, 0.707031f, 0.925781f},
+ {0.722656f, 0.660156f, 0.328125f, 0.867188f}, {0.453125f, 0.777344f, 0.839844f, 0.679688f},
+ {0.156250f, 0.292969f, 0.234375f, 0.324219f}, {0.988281f, 0.699219f, 0.128906f, 0.062500f},
+ {0.523438f, 0.402344f, 0.820312f, 0.898438f}, {0.128906f, 0.140625f, 0.183594f, 0.160156f},
+ {0.394531f, 0.238281f, 0.050781f, 0.597656f}, {0.964844f, 0.062500f, 0.660156f, 0.855469f},
+ {0.339844f, 0.429688f, 0.558594f, 0.707031f}, {0.722656f, 0.648438f, 0.363281f, 0.628906f},
+ {0.921875f, 0.515625f, 0.207031f, 0.460938f}, {0.054688f, 0.988281f, 0.503906f, 0.878906f},
+ {0.652344f, 0.089844f, 0.718750f, 0.179688f}, {0.351562f, 0.339844f, 0.140625f, 0.980469f},
+ {0.800781f, 0.902344f, 0.085938f, 0.679688f}, {0.429688f, 0.679688f, 0.859375f, 0.765625f},
+ {0.296875f, 0.820312f, 0.195312f, 0.546875f}, {0.675781f, 0.613281f, 0.621094f, 0.839844f},
+ {0.882812f, 0.933594f, 0.816406f, 0.167969f}, {0.769531f, 0.070312f, 0.363281f, 0.812500f},
+ {0.964844f, 0.367188f, 0.062500f, 0.937500f}, {0.480469f, 0.421875f, 0.988281f, 0.351562f},
+ {0.226562f, 0.113281f, 0.121094f, 0.144531f}, {0.277344f, 0.726562f, 0.828125f, 0.992188f},
+ {0.742188f, 0.464844f, 0.695312f, 0.804688f}, {0.152344f, 0.058594f, 0.398438f, 0.382812f},
+ {0.421875f, 0.675781f, 0.960938f, 0.574219f}, {0.792969f, 0.601562f, 0.144531f, 0.511719f},
+ {0.031250f, 0.320312f, 0.332031f, 0.648438f}, {0.933594f, 0.441406f, 0.578125f, 0.292969f},
+ {0.703125f, 0.230469f, 0.179688f, 0.789062f}, {0.492188f, 0.773438f, 0.925781f, 0.527344f},
+ {0.960938f, 0.535156f, 0.339844f, 0.324219f}, {0.425781f, 0.671875f, 0.035156f, 0.820312f},
+ {0.734375f, 0.804688f, 0.257812f, 0.628906f}, {0.207031f, 0.113281f, 0.164062f, 0.187500f},
+ {0.808594f, 0.902344f, 0.984375f, 0.289062f}, {0.988281f, 0.636719f, 0.300781f, 0.886719f},
+ {0.707031f, 0.441406f, 0.214844f, 0.507812f}, {0.328125f, 0.968750f, 0.371094f, 0.015625f},
+ {0.859375f, 0.183594f, 0.742188f, 0.839844f}, {0.656250f, 0.570312f, 0.121094f, 0.332031f},
+ {0.398438f, 0.414062f, 0.343750f, 0.882812f}, {0.113281f, 0.816406f, 0.234375f, 0.476562f},
+ {0.613281f, 0.703125f, 0.656250f, 0.398438f}, {0.027344f, 0.359375f, 0.093750f, 0.550781f},
+ {0.683594f, 0.292969f, 0.789062f, 0.855469f}, {0.785156f, 0.804688f, 0.917969f, 0.214844f},
+ {0.328125f, 0.910156f, 0.574219f, 0.617188f}, {0.621094f, 0.085938f, 0.007812f, 0.359375f},
+ {0.199219f, 0.687500f, 0.445312f, 0.964844f}, {0.117188f, 0.519531f, 0.183594f, 0.699219f},
+ {0.574219f, 0.066406f, 0.121094f, 0.628906f}, {0.394531f, 0.605469f, 0.914062f, 0.945312f},
+ {0.730469f, 0.718750f, 0.574219f, 0.144531f}, {0.078125f, 0.105469f, 0.066406f, 0.265625f},
+ {0.800781f, 0.546875f, 0.191406f, 0.523438f}, {0.460938f, 0.792969f, 0.609375f, 0.703125f},
+ {0.746094f, 0.847656f, 0.101562f, 0.218750f}, {0.582031f, 0.125000f, 0.914062f, 0.945312f},
+ {0.859375f, 0.335938f, 0.851562f, 0.402344f}, {0.695312f, 0.535156f, 0.070312f, 0.785156f},
+ {0.523438f, 0.792969f, 0.207031f, 0.593750f}, {0.210938f, 0.445312f, 0.886719f, 0.464844f},
+ {0.628906f, 0.132812f, 0.582031f, 0.000000f}, {0.285156f, 0.902344f, 0.054688f, 0.515625f},
+ {0.019531f, 0.472656f, 0.648438f, 0.773438f}, {0.410156f, 0.011719f, 0.414062f, 0.558594f},
+ {0.312500f, 0.632812f, 0.699219f, 0.652344f}, {0.230469f, 0.500000f, 0.527344f, 0.500000f},
+ {0.656250f, 0.789062f, 0.921875f, 0.109375f}, {0.843750f, 0.308594f, 0.265625f, 0.960938f},
+ {0.183594f, 0.835938f, 0.734375f, 0.218750f}, {0.632812f, 0.925781f, 0.109375f, 0.140625f},
+ {0.093750f, 0.136719f, 0.847656f, 0.269531f}, {0.394531f, 0.371094f, 0.011719f, 0.523438f},
+ {0.191406f, 0.625000f, 0.273438f, 0.046875f}, {0.269531f, 0.566406f, 0.894531f, 0.593750f},
+ {0.574219f, 0.035156f, 0.359375f, 0.906250f}, {0.164062f, 0.300781f, 0.523438f, 0.085938f},
+ {0.925781f, 0.101562f, 0.425781f, 0.359375f}, {0.089844f, 0.230469f, 0.003906f, 0.054688f},
+ {0.257812f, 0.332031f, 0.550781f, 0.589844f}, {0.378906f, 0.187500f, 0.242188f, 0.300781f},
+ {0.167969f, 0.531250f, 0.785156f, 0.023438f}, {0.722656f, 0.824219f, 0.640625f, 0.628906f},
+ {0.578125f, 0.898438f, 0.519531f, 0.546875f}, {0.835938f, 0.621094f, 0.257812f, 0.054688f},
+ {0.503906f, 0.175781f, 0.195312f, 0.691406f}, {0.074219f, 0.394531f, 0.601562f, 0.304688f},
+ {0.882812f, 0.953125f, 0.796875f, 0.085938f}, {0.574219f, 0.015625f, 0.230469f, 0.968750f},
+ {0.273438f, 0.515625f, 0.886719f, 0.050781f}, {0.113281f, 0.828125f, 0.742188f, 0.367188f},
+ {0.816406f, 0.101562f, 0.281250f, 0.183594f}, {0.187500f, 0.968750f, 0.625000f, 0.671875f},
+ {0.562500f, 0.003906f, 0.796875f, 0.113281f}, {0.320312f, 0.164062f, 0.898438f, 0.257812f},
+ {0.128906f, 0.257812f, 0.503906f, 0.062500f}, {0.593750f, 0.390625f, 0.843750f, 0.542969f},
+ {0.472656f, 0.757812f, 0.726562f, 0.402344f}, {0.023438f, 0.062500f, 0.539062f, 0.792969f},
+ {0.113281f, 0.296875f, 0.425781f, 0.722656f}, {0.523438f, 0.808594f, 0.054688f, 0.449219f},
+ {0.800781f, 0.515625f, 0.816406f, 0.093750f}, {0.054688f, 0.867188f, 0.460938f, 0.207031f},
+ {0.566406f, 0.019531f, 0.605469f, 0.582031f}, {0.742188f, 0.992188f, 0.882812f, 0.671875f},
+ {0.265625f, 0.472656f, 0.546875f, 0.171875f}, {0.992188f, 0.171875f, 0.964844f, 0.316406f},
+ {0.406250f, 0.746094f, 0.429688f, 0.695312f}, {0.132812f, 0.628906f, 0.160156f, 0.453125f},
+ {0.488281f, 0.140625f, 0.507812f, 0.136719f}, {0.937500f, 0.562500f, 0.679688f, 0.566406f},
+ {0.019531f, 0.789062f, 0.769531f, 0.085938f}, {0.464844f, 0.898438f, 0.597656f, 0.492188f},
+ {0.957031f, 0.378906f, 0.304688f, 0.011719f}, {0.050781f, 0.179688f, 0.027344f, 0.765625f},
+ {0.261719f, 0.859375f, 0.875000f, 0.375000f}, {0.609375f, 0.964844f, 0.437500f, 0.812500f},
+ {0.175781f, 0.296875f, 0.781250f, 0.894531f}, {0.929688f, 0.691406f, 0.289062f, 0.468750f},
+ {0.238281f, 0.234375f, 0.382812f, 0.347656f}, {0.093750f, 0.054688f, 0.160156f, 0.652344f},
+ {0.914062f, 0.750000f, 0.656250f, 0.035156f}, {0.445312f, 0.863281f, 0.320312f, 0.187500f},
+ {0.167969f, 0.199219f, 0.519531f, 0.828125f}, {0.070312f, 0.703125f, 0.117188f, 0.644531f},
+ {0.371094f, 0.382812f, 0.386719f, 0.289062f}, {0.949219f, 0.601562f, 0.917969f, 0.144531f},
+ {0.675781f, 0.218750f, 0.476562f, 0.394531f}, {0.867188f, 0.550781f, 0.988281f, 0.933594f},
+ {0.585938f, 0.960938f, 0.003906f, 0.199219f}, {0.753906f, 0.339844f, 0.328125f, 0.371094f},
+ {0.078125f, 0.914062f, 0.773438f, 0.796875f}, {0.542969f, 0.593750f, 0.488281f, 0.308594f},
+ {0.449219f, 0.683594f, 0.148438f, 0.558594f}, {0.289062f, 0.218750f, 0.406250f, 0.402344f},
+ {0.582031f, 0.281250f, 0.589844f, 0.929688f}, {0.828125f, 0.734375f, 0.941406f, 0.714844f},
+ {0.460938f, 0.867188f, 0.449219f, 0.832031f}, {0.960938f, 0.453125f, 0.660156f, 0.398438f},
+ {0.027344f, 0.757812f, 0.234375f, 0.230469f}, {0.742188f, 0.972656f, 0.730469f, 0.468750f},
+ {0.488281f, 0.429688f, 0.128906f, 0.640625f}, {0.839844f, 0.722656f, 0.968750f, 0.960938f},
+ {0.558594f, 0.484375f, 0.664062f, 0.742188f}, {0.039062f, 0.964844f, 0.894531f, 0.390625f},
+ {0.812500f, 0.753906f, 0.183594f, 0.503906f}, {0.335938f, 0.281250f, 0.417969f, 0.757812f},
+ {0.441406f, 0.035156f, 0.726562f, 0.878906f}, {0.019531f, 0.496094f, 0.347656f, 0.269531f},
+ {0.921875f, 0.777344f, 0.867188f, 0.175781f}, {0.679688f, 0.859375f, 0.074219f, 0.605469f},
+ {0.355469f, 0.242188f, 0.449219f, 0.433594f}, {0.175781f, 0.363281f, 0.656250f, 0.765625f},
+ {0.515625f, 0.898438f, 0.003906f, 0.246094f}, {0.613281f, 0.152344f, 0.468750f, 0.894531f},
+ {0.386719f, 0.402344f, 0.523438f, 0.566406f}, {0.066406f, 0.613281f, 0.062500f, 0.988281f},
+ {0.765625f, 0.347656f, 0.390625f, 0.449219f}, {0.851562f, 0.843750f, 0.203125f, 0.875000f},
+ {0.054688f, 0.445312f, 0.441406f, 0.750000f}, {0.929688f, 0.992188f, 0.644531f, 0.937500f},
+ {0.769531f, 0.554688f, 0.000000f, 0.597656f}, {0.632812f, 0.234375f, 0.132812f, 0.101562f},
+ {0.367188f, 0.691406f, 0.867188f, 0.347656f}, {0.425781f, 0.125000f, 0.632812f, 0.261719f},
+ {0.183594f, 0.613281f, 0.968750f, 0.691406f}, {0.285156f, 0.250000f, 0.078125f, 0.929688f},
+ {0.917969f, 0.320312f, 0.292969f, 0.039062f}, {0.347656f, 0.644531f, 0.800781f, 0.269531f},
+ {0.851562f, 0.539062f, 0.019531f, 0.945312f}, {0.515625f, 0.882812f, 0.359375f, 0.070312f},
+ {0.218750f, 0.050781f, 0.277344f, 0.886719f}, {0.898438f, 0.242188f, 0.714844f, 0.019531f},
+ {0.558594f, 0.441406f, 0.062500f, 0.773438f}, {0.250000f, 0.964844f, 0.390625f, 0.902344f},
+ {0.820312f, 0.343750f, 0.226562f, 0.265625f}, {0.343750f, 0.003906f, 0.972656f, 0.832031f},
+ {0.757812f, 0.753906f, 0.484375f, 0.316406f}, {0.507812f, 0.234375f, 0.808594f, 0.554688f},
+ {0.859375f, 0.410156f, 0.347656f, 0.203125f}, {0.425781f, 0.503906f, 0.140625f, 0.062500f},
+ {0.687500f, 0.140625f, 0.496094f, 0.601562f}, {0.292969f, 0.582031f, 0.996094f, 0.093750f},
+ {0.828125f, 0.386719f, 0.707031f, 0.300781f}, {0.398438f, 0.980469f, 0.578125f, 0.859375f},
+ {0.042969f, 0.496094f, 0.441406f, 0.500000f}, {0.320312f, 0.609375f, 0.777344f, 0.550781f},
+ {0.601562f, 0.304688f, 0.945312f, 0.089844f}, {0.851562f, 0.093750f, 0.269531f, 0.234375f},
+ {0.492188f, 0.988281f, 0.753906f, 0.953125f}, {0.792969f, 0.332031f, 0.175781f, 0.847656f},
+ {0.089844f, 0.843750f, 0.726562f, 0.710938f}, {0.183594f, 0.082031f, 0.277344f, 0.246094f},
+ {0.476562f, 0.714844f, 0.566406f, 0.039062f}, {0.925781f, 0.187500f, 0.835938f, 0.878906f},
+ {0.035156f, 0.109375f, 0.214844f, 0.691406f}, {0.695312f, 0.464844f, 0.621094f, 0.007812f},
+ {0.949219f, 0.023438f, 0.968750f, 0.472656f}, {0.136719f, 0.558594f, 0.800781f, 0.769531f},
+ {0.773438f, 0.410156f, 0.679688f, 0.066406f}, {0.519531f, 0.816406f, 0.320312f, 0.644531f},
+ {0.683594f, 0.066406f, 0.171875f, 0.296875f}, {0.867188f, 0.253906f, 0.820312f, 0.125000f},
+ {0.386719f, 0.523438f, 0.054688f, 0.562500f}, {0.332031f, 0.156250f, 0.601562f, 0.863281f},
+ {0.648438f, 0.851562f, 0.796875f, 0.281250f}, {0.214844f, 0.644531f, 0.269531f, 0.425781f},
+ {0.417969f, 0.023438f, 0.390625f, 0.140625f}, {0.917969f, 0.132812f, 0.082031f, 0.902344f},
+ {0.617188f, 0.664062f, 0.496094f, 0.093750f}, {0.101562f, 0.578125f, 0.589844f, 0.207031f},
+ {0.996094f, 0.222656f, 0.015625f, 0.414062f}, {0.199219f, 0.996094f, 0.949219f, 0.824219f},
+ {0.398438f, 0.316406f, 0.757812f, 0.480469f}, {0.605469f, 0.550781f, 0.562500f, 0.929688f},
+ {0.246094f, 0.085938f, 0.300781f, 0.855469f}, {0.832031f, 0.648438f, 0.363281f, 0.128906f},
+ {0.914062f, 0.757812f, 0.914062f, 0.699219f}, {0.691406f, 0.566406f, 0.828125f, 0.410156f},
+ {0.980469f, 0.292969f, 0.121094f, 0.007812f}, {0.457031f, 0.742188f, 0.949219f, 0.730469f},
+ {0.648438f, 0.914062f, 0.714844f, 0.148438f}, {0.257812f, 0.511719f, 0.566406f, 0.503906f},
+ {0.527344f, 0.082031f, 0.105469f, 0.375000f}, {0.398438f, 0.707031f, 0.285156f, 0.019531f},
+ {0.300781f, 0.183594f, 0.359375f, 0.230469f}, {0.222656f, 0.355469f, 0.933594f, 0.867188f},
+ {0.867188f, 0.500000f, 0.476562f, 0.167969f}, {0.964844f, 0.945312f, 0.257812f, 0.636719f},
+ {0.683594f, 0.386719f, 0.171875f, 0.535156f}, {0.601562f, 0.074219f, 0.710938f, 0.781250f},
+ {0.484375f, 0.785156f, 0.414062f, 0.359375f}, {0.074219f, 0.214844f, 0.503906f, 0.742188f},
+ {0.167969f, 0.113281f, 0.144531f, 0.609375f}, {0.640625f, 0.378906f, 0.746094f, 0.800781f},
+ {0.304688f, 0.949219f, 0.851562f, 0.507812f}, {0.750000f, 0.507812f, 0.613281f, 0.339844f},
+ {0.082031f, 0.671875f, 0.894531f, 0.656250f}, {0.660156f, 0.195312f, 0.324219f, 0.410156f},
+ {0.414062f, 0.281250f, 0.824219f, 0.722656f}, {0.703125f, 0.640625f, 0.085938f, 0.167969f},
+ {0.597656f, 0.464844f, 0.718750f, 0.437500f}, {0.140625f, 0.578125f, 0.253906f, 0.863281f},
+ {0.207031f, 0.667969f, 0.546875f, 0.921875f}, {0.968750f, 0.042969f, 0.679688f, 0.667969f},
+ {0.531250f, 0.875000f, 0.218750f, 0.410156f}, {0.117188f, 0.761719f, 0.000000f, 0.164062f},
+ {0.488281f, 0.179688f, 0.894531f, 0.800781f}, {0.562500f, 0.660156f, 0.238281f, 0.722656f},
+ {0.789062f, 0.265625f, 0.050781f, 0.125000f}, {0.664062f, 0.007812f, 0.835938f, 0.992188f},
+ {0.996094f, 0.894531f, 0.410156f, 0.375000f}, {0.753906f, 0.566406f, 0.636719f, 0.757812f},
+ {0.234375f, 0.804688f, 0.550781f, 0.437500f}, {0.562500f, 0.046875f, 0.082031f, 0.074219f},
+ {0.343750f, 0.757812f, 0.359375f, 0.597656f}, {0.726562f, 0.429688f, 0.863281f, 0.480469f},
+ {0.257812f, 0.875000f, 0.136719f, 0.753906f}, {0.816406f, 0.261719f, 0.437500f, 0.429688f},
+ {0.332031f, 0.390625f, 0.089844f, 0.273438f}, {0.382812f, 0.742188f, 0.351562f, 0.621094f},
+ {0.222656f, 0.890625f, 0.027344f, 0.839844f}, {0.890625f, 0.093750f, 0.246094f, 0.988281f},
+ {0.011719f, 0.968750f, 0.539062f, 0.203125f}, {0.316406f, 0.484375f, 0.074219f, 0.363281f},
+ {0.238281f, 0.187500f, 0.500000f, 0.496094f}, {0.105469f, 0.660156f, 0.996094f, 0.796875f},
+ {0.777344f, 0.386719f, 0.414062f, 0.167969f}, {0.531250f, 0.589844f, 0.308594f, 0.730469f},
+ {0.976562f, 0.347656f, 0.871094f, 0.027344f}, {0.125000f, 0.261719f, 0.468750f, 0.691406f},
+ {0.710938f, 0.910156f, 0.703125f, 0.531250f}, {0.468750f, 0.812500f, 0.328125f, 0.250000f},
+ {0.277344f, 0.441406f, 0.765625f, 0.667969f}, {0.535156f, 0.375000f, 0.917969f, 0.972656f},
+ {0.648438f, 0.074219f, 0.292969f, 0.324219f}, {0.785156f, 0.687500f, 0.156250f, 0.710938f},
+ {0.304688f, 0.136719f, 0.484375f, 0.011719f}, {0.089844f, 0.714844f, 0.113281f, 0.652344f},
+ {0.769531f, 0.453125f, 0.992188f, 0.214844f}, {0.437500f, 0.199219f, 0.703125f, 0.328125f},
+ {0.003906f, 0.980469f, 0.171875f, 0.488281f}, {0.300781f, 0.476562f, 0.410156f, 0.621094f},
+ {0.218750f, 0.695312f, 0.218750f, 0.843750f}, {0.140625f, 0.058594f, 0.652344f, 0.222656f},
+ {0.347656f, 0.199219f, 0.320312f, 0.335938f}, {0.945312f, 0.652344f, 0.863281f, 0.652344f},
+ {0.703125f, 0.312500f, 0.976562f, 0.808594f}, {0.171875f, 0.585938f, 0.753906f, 0.292969f},
+ {0.906250f, 0.863281f, 0.808594f, 0.683594f}, {0.082031f, 0.781250f, 0.582031f, 0.488281f},
+ {0.562500f, 0.007812f, 0.691406f, 0.988281f}, {0.734375f, 0.886719f, 0.332031f, 0.406250f},
+ {0.000000f, 0.730469f, 0.550781f, 0.894531f}, {0.234375f, 0.460938f, 0.894531f, 0.117188f},
+ {0.761719f, 0.929688f, 0.207031f, 0.492188f}, {0.957031f, 0.683594f, 0.933594f, 0.441406f},
+ {0.386719f, 0.828125f, 0.644531f, 0.152344f}, {0.718750f, 0.593750f, 0.246094f, 0.394531f},
+ {0.011719f, 0.308594f, 0.484375f, 0.242188f}, {0.839844f, 0.851562f, 0.113281f, 0.972656f},
+ {0.359375f, 0.765625f, 0.195312f, 0.199219f}, {0.957031f, 0.406250f, 0.933594f, 0.531250f},
+ {0.175781f, 0.117188f, 0.535156f, 0.054688f}, {0.039062f, 0.863281f, 0.648438f, 0.992188f},
+ {0.285156f, 0.996094f, 0.152344f, 0.648438f}, {0.898438f, 0.074219f, 0.410156f, 0.117188f},
+ {0.375000f, 0.808594f, 0.929688f, 0.507812f}, {0.777344f, 0.347656f, 0.761719f, 0.277344f},
+ {0.007812f, 0.937500f, 0.617188f, 0.757812f}, {0.339844f, 0.433594f, 0.816406f, 0.972656f},
+ {0.718750f, 0.085938f, 0.328125f, 0.621094f}, {0.957031f, 0.921875f, 0.542969f, 0.250000f},
+ {0.214844f, 0.460938f, 0.132812f, 0.421875f}, {0.128906f, 0.734375f, 0.691406f, 0.882812f},
+ {0.277344f, 0.398438f, 0.195312f, 0.312500f}, {0.011719f, 0.179688f, 0.011719f, 0.667969f},
+ {0.406250f, 0.476562f, 0.960938f, 0.566406f}, {0.140625f, 0.644531f, 0.796875f, 0.175781f},
+ {0.898438f, 0.277344f, 0.222656f, 0.343750f}, {0.433594f, 0.156250f, 0.675781f, 0.980469f},
+ {0.613281f, 0.664062f, 0.601562f, 0.125000f}, {0.117188f, 0.539062f, 0.953125f, 0.546875f},
+ {0.511719f, 0.820312f, 0.722656f, 0.914062f}, {0.859375f, 0.625000f, 0.902344f, 0.156250f},
+ {0.593750f, 0.355469f, 0.464844f, 0.332031f}, {0.421875f, 0.167969f, 0.871094f, 0.101562f},
+ {0.730469f, 0.707031f, 0.714844f, 0.582031f}, {0.996094f, 0.613281f, 0.375000f, 0.746094f},
+ {0.156250f, 0.328125f, 0.769531f, 0.039062f}, {0.625000f, 0.929688f, 0.628906f, 0.949219f},
+ {0.449219f, 0.113281f, 0.910156f, 0.625000f}, {0.257812f, 0.800781f, 0.562500f, 0.339844f},
+ {0.046875f, 0.054688f, 0.031250f, 0.996094f}, {0.792969f, 0.496094f, 0.160156f, 0.195312f},
+ {0.324219f, 0.562500f, 0.929688f, 0.847656f}, {0.175781f, 0.203125f, 0.210938f, 0.789062f},
+ {0.863281f, 0.304688f, 0.847656f, 0.468750f}, {0.746094f, 0.925781f, 0.070312f, 0.609375f},
+ {0.136719f, 0.843750f, 0.675781f, 0.156250f}, {0.886719f, 0.605469f, 0.390625f, 0.562500f},
+ {0.519531f, 0.414062f, 0.636719f, 0.113281f}, {0.710938f, 0.910156f, 0.214844f, 0.375000f},
+ {0.964844f, 0.808594f, 0.785156f, 0.531250f}, {0.128906f, 0.281250f, 0.066406f, 0.957031f},
+ {0.488281f, 0.031250f, 0.609375f, 0.816406f}, {0.750000f, 0.128906f, 0.542969f, 0.101562f},
+ {0.550781f, 0.878906f, 0.757812f, 0.281250f}, {0.886719f, 0.250000f, 0.261719f, 0.917969f},
+ {0.808594f, 0.417969f, 0.476562f, 0.585938f}, {0.585938f, 0.812500f, 0.156250f, 0.085938f},
+ {0.011719f, 0.027344f, 0.042969f, 0.968750f}, {0.445312f, 0.941406f, 0.515625f, 0.429688f},
+ {0.671875f, 0.136719f, 0.179688f, 0.136719f}, {0.812500f, 0.640625f, 0.230469f, 0.832031f},
+ {0.480469f, 0.433594f, 0.070312f, 0.562500f}, {0.144531f, 0.281250f, 0.789062f, 0.031250f},
+ {0.320312f, 0.179688f, 0.023438f, 0.304688f}, {0.886719f, 0.558594f, 0.757812f, 0.234375f},
+ {0.445312f, 0.347656f, 0.371094f, 0.968750f}, {0.121094f, 0.039062f, 0.585938f, 0.863281f},
+ {0.816406f, 0.421875f, 0.054688f, 0.648438f}, {0.578125f, 0.160156f, 0.992188f, 0.089844f},
+ {0.429688f, 0.722656f, 0.402344f, 0.574219f}, {0.148438f, 0.097656f, 0.562500f, 0.835938f},
+ {0.613281f, 0.035156f, 0.785156f, 0.117188f}, {0.468750f, 0.605469f, 0.449219f, 0.296875f},
+ {0.851562f, 0.800781f, 0.035156f, 0.609375f}, {0.535156f, 0.523438f, 0.367188f, 0.789062f},
+ {0.796875f, 0.152344f, 0.863281f, 0.238281f}, {0.667969f, 0.300781f, 0.585938f, 0.343750f},
+ {0.074219f, 0.722656f, 0.042969f, 0.714844f}, {0.574219f, 0.199219f, 0.300781f, 0.039062f},
+ {0.648438f, 0.269531f, 0.089844f, 0.464844f}, {0.847656f, 0.621094f, 0.402344f, 0.367188f},
+ {0.164062f, 0.527344f, 0.457031f, 0.003906f}, {0.617188f, 0.328125f, 0.742188f, 0.566406f},
+ {0.367188f, 0.835938f, 0.972656f, 0.195312f}, {0.468750f, 0.136719f, 0.351562f, 0.695312f},
+ {0.542969f, 0.679688f, 0.496094f, 0.480469f}, {0.695312f, 0.941406f, 0.855469f, 0.046875f},
+ {0.933594f, 0.234375f, 0.312500f, 0.902344f}, {0.640625f, 0.527344f, 0.429688f, 0.804688f},
+ {0.832031f, 0.375000f, 0.500000f, 0.640625f}, {0.046875f, 0.949219f, 0.066406f, 0.292969f},
+ {0.984375f, 0.460938f, 0.390625f, 0.824219f}, {0.675781f, 0.066406f, 0.179688f, 0.058594f},
+ {0.175781f, 0.992188f, 0.531250f, 0.664062f}, {0.785156f, 0.230469f, 0.660156f, 0.511719f},
+ {0.089844f, 0.792969f, 0.300781f, 0.242188f}, {0.652344f, 0.292969f, 0.121094f, 0.699219f},
+ {0.480469f, 0.535156f, 0.195312f, 0.433594f}, {0.363281f, 0.777344f, 0.933594f, 0.894531f},
+ {0.550781f, 0.011719f, 0.273438f, 0.265625f}, {0.886719f, 0.871094f, 0.144531f, 0.410156f},
+ {0.937500f, 0.679688f, 0.699219f, 0.515625f}, {0.183594f, 0.214844f, 0.218750f, 0.097656f},
+ {0.855469f, 0.988281f, 0.777344f, 0.457031f}, {0.566406f, 0.761719f, 0.519531f, 0.593750f},
+ {0.664062f, 0.394531f, 0.593750f, 0.308594f}, {0.960938f, 0.695312f, 0.113281f, 0.070312f},
+ {0.007812f, 0.101562f, 0.425781f, 0.359375f}, {0.242188f, 0.742188f, 0.546875f, 0.042969f},
+ {0.355469f, 0.480469f, 0.250000f, 0.921875f}, {0.433594f, 0.187500f, 0.828125f, 0.859375f},
+ {0.035156f, 0.000000f, 0.894531f, 0.789062f}, {0.218750f, 0.343750f, 0.535156f, 0.285156f},
+ {0.558594f, 0.523438f, 0.433594f, 0.734375f}, {0.371094f, 0.625000f, 0.273438f, 0.031250f},
+ {0.652344f, 0.835938f, 0.875000f, 0.171875f}, {0.851562f, 0.375000f, 0.332031f, 0.550781f},
+ {0.062500f, 0.605469f, 0.968750f, 0.371094f}, {0.417969f, 0.539062f, 0.031250f, 0.460938f},
+ {0.097656f, 0.957031f, 0.820312f, 0.761719f}, {0.500000f, 0.750000f, 0.601562f, 0.191406f},
+ {0.242188f, 0.472656f, 0.371094f, 0.535156f}, {0.757812f, 0.269531f, 0.660156f, 0.625000f},
+ {0.343750f, 0.394531f, 0.453125f, 0.730469f}, {0.613281f, 0.535156f, 0.914062f, 0.332031f},
+ {0.265625f, 0.085938f, 0.410156f, 0.097656f}, {0.410156f, 0.835938f, 0.980469f, 0.757812f},
+ {0.832031f, 0.664062f, 0.484375f, 0.812500f}, {0.644531f, 0.128906f, 0.664062f, 0.593750f},
+ {0.546875f, 0.761719f, 0.109375f, 0.191406f}, {0.207031f, 0.503906f, 0.304688f, 0.007812f},
+ {0.667969f, 0.898438f, 0.812500f, 0.300781f}, {0.253906f, 0.230469f, 0.687500f, 0.921875f},
+ {0.976562f, 0.468750f, 0.339844f, 0.687500f}, {0.519531f, 0.554688f, 0.003906f, 0.468750f},
+ {0.769531f, 0.359375f, 0.632812f, 0.746094f}, {0.230469f, 0.929688f, 0.289062f, 0.933594f},
+ {0.109375f, 0.695312f, 0.691406f, 0.367188f}, {0.328125f, 0.242188f, 0.246094f, 0.484375f},
+ {0.984375f, 0.429688f, 0.984375f, 0.082031f}, {0.242188f, 0.910156f, 0.464844f, 0.582031f},
+ {0.480469f, 0.488281f, 0.199219f, 0.957031f}, {0.300781f, 0.558594f, 0.835938f, 0.816406f},
+ {0.437500f, 0.023438f, 0.957031f, 0.214844f}, {0.933594f, 0.687500f, 0.527344f, 0.859375f},
+ {0.269531f, 0.800781f, 0.179688f, 0.511719f}, {0.039062f, 0.222656f, 0.871094f, 0.921875f},
+ {0.894531f, 0.062500f, 0.628906f, 0.074219f}, {0.746094f, 0.546875f, 0.277344f, 0.820312f},
+ {0.863281f, 0.343750f, 0.589844f, 0.265625f}, {0.335938f, 0.855469f, 0.105469f, 0.140625f},
+ {0.078125f, 0.109375f, 0.707031f, 0.515625f}, {0.515625f, 0.722656f, 0.617188f, 0.226562f},
+ {0.292969f, 0.886719f, 0.878906f, 0.027344f}, {0.214844f, 0.003906f, 0.937500f, 0.699219f},
+ {0.554688f, 0.601562f, 0.757812f, 0.402344f}, {0.390625f, 0.324219f, 0.281250f, 0.207031f},
+ {0.304688f, 0.128906f, 0.039062f, 0.957031f}, {0.960938f, 0.500000f, 0.808594f, 0.367188f},
+ {0.265625f, 0.031250f, 0.406250f, 0.808594f}, {0.054688f, 0.925781f, 0.613281f, 0.871094f},
+ {0.195312f, 0.429688f, 0.558594f, 0.539062f}, {0.835938f, 0.136719f, 0.828125f, 0.121094f},
+ {0.699219f, 0.242188f, 0.015625f, 0.660156f}, {0.035156f, 0.464844f, 0.480469f, 0.835938f},
+ {0.312500f, 0.554688f, 0.320312f, 0.003906f}, {0.738281f, 0.308594f, 0.093750f, 0.785156f},
+ {0.484375f, 0.621094f, 0.406250f, 0.890625f}, {0.375000f, 0.160156f, 0.957031f, 0.386719f},
+ {0.093750f, 0.882812f, 0.355469f, 0.125000f}, {0.410156f, 0.015625f, 0.644531f, 0.941406f},
+ {0.593750f, 0.597656f, 0.722656f, 0.542969f}, {0.492188f, 0.531250f, 0.984375f, 0.734375f},
+ {0.683594f, 0.265625f, 0.464844f, 0.398438f}, {0.835938f, 0.968750f, 0.035156f, 0.242188f},
+ {0.945312f, 0.761719f, 0.328125f, 0.453125f}, {0.625000f, 0.246094f, 0.730469f, 0.910156f},
+ {0.328125f, 0.078125f, 0.937500f, 0.593750f}, {0.902344f, 0.945312f, 0.015625f, 0.425781f},
+ {0.171875f, 0.433594f, 0.488281f, 0.687500f}, {0.250000f, 0.312500f, 0.804688f, 0.781250f},
+ {0.609375f, 0.781250f, 0.093750f, 0.941406f}, {0.312500f, 0.097656f, 0.687500f, 0.667969f},
+ {0.710938f, 0.160156f, 0.425781f, 0.031250f}, {0.164062f, 0.355469f, 0.945312f, 0.878906f},
+ {0.968750f, 0.628906f, 0.738281f, 0.261719f}, {0.839844f, 0.218750f, 0.296875f, 0.058594f},
+ {0.128906f, 0.902344f, 0.875000f, 0.933594f}, {0.035156f, 0.726562f, 0.113281f, 0.207031f},
+ {0.996094f, 0.335938f, 0.625000f, 0.464844f}, {0.531250f, 0.984375f, 0.277344f, 0.660156f},
+ {0.066406f, 0.589844f, 0.148438f, 0.367188f}, {0.363281f, 0.242188f, 0.867188f, 0.707031f},
+ {0.945312f, 0.953125f, 0.437500f, 0.527344f}, {0.042969f, 0.292969f, 0.535156f, 0.828125f},
+ {0.492188f, 0.617188f, 0.175781f, 0.730469f}, {0.332031f, 0.785156f, 0.886719f, 0.351562f},
+ {0.875000f, 0.984375f, 0.226562f, 0.179688f}, {0.062500f, 0.269531f, 0.839844f, 0.039062f},
+ {0.292969f, 0.875000f, 0.960938f, 0.421875f}, {0.917969f, 0.175781f, 0.167969f, 0.867188f},
+ {0.714844f, 0.324219f, 0.753906f, 0.000000f}, {0.593750f, 0.582031f, 0.523438f, 0.671875f},
+ {0.421875f, 0.089844f, 0.117188f, 0.910156f}, {0.136719f, 0.652344f, 0.730469f, 0.402344f},
+ {0.750000f, 0.363281f, 0.335938f, 0.179688f}, {0.906250f, 0.824219f, 0.660156f, 0.550781f},
+ {0.199219f, 0.976562f, 0.128906f, 0.128906f}, {0.101562f, 0.125000f, 0.714844f, 0.664062f},
+ {0.800781f, 0.378906f, 0.257812f, 0.296875f}, {0.515625f, 0.890625f, 0.027344f, 0.773438f},
+ {0.414062f, 0.605469f, 0.082031f, 0.351562f}, {0.070312f, 0.765625f, 0.804688f, 0.585938f},
+ {0.187500f, 0.433594f, 0.910156f, 0.968750f}, {0.796875f, 0.031250f, 0.468750f, 0.726562f},
+ {0.457031f, 0.589844f, 0.156250f, 0.410156f}, {0.160156f, 0.312500f, 0.257812f, 0.949219f},
+ {0.718750f, 0.785156f, 0.027344f, 0.363281f}, {0.773438f, 0.210938f, 0.554688f, 0.863281f},
+ {0.476562f, 0.683594f, 0.335938f, 0.488281f}, {0.007812f, 0.765625f, 0.839844f, 0.769531f},
+ {0.707031f, 0.859375f, 0.488281f, 0.605469f}, {0.445312f, 0.406250f, 0.230469f, 0.082031f},
+ {0.566406f, 0.675781f, 0.746094f, 0.464844f}, {0.757812f, 0.582031f, 0.957031f, 0.023438f},
+ {0.925781f, 0.843750f, 0.066406f, 0.183594f}, {0.281250f, 0.367188f, 0.429688f, 0.976562f},
+ {0.125000f, 0.957031f, 0.644531f, 0.324219f}, {0.421875f, 0.746094f, 0.757812f, 0.214844f},
+ {0.675781f, 0.410156f, 0.976562f, 0.933594f}, {0.074219f, 0.914062f, 0.851562f, 0.558594f},
+ {0.617188f, 0.070312f, 0.667969f, 0.238281f}, {0.910156f, 0.457031f, 0.246094f, 0.742188f},
+ {0.285156f, 0.335938f, 0.824219f, 0.636719f}, {0.722656f, 0.832031f, 0.007812f, 0.828125f},
+ {0.816406f, 0.949219f, 0.289062f, 0.273438f}, {0.925781f, 0.152344f, 0.148438f, 0.675781f},
+ {0.085938f, 0.359375f, 0.789062f, 0.187500f}, {0.277344f, 0.640625f, 0.585938f, 0.507812f},
+ {0.164062f, 0.867188f, 0.105469f, 0.640625f}, {0.457031f, 0.570312f, 0.183594f, 0.050781f},
+ {0.789062f, 0.675781f, 0.371094f, 0.203125f}, {0.050781f, 0.164062f, 0.675781f, 0.996094f},
+ {0.726562f, 0.718750f, 0.152344f, 0.316406f}, {0.992188f, 0.210938f, 0.578125f, 0.066406f},
+ {0.464844f, 0.894531f, 0.386719f, 0.242188f}, {0.792969f, 0.500000f, 0.203125f, 0.140625f},
+ {0.925781f, 0.687500f, 0.527344f, 0.414062f}, {0.644531f, 0.062500f, 0.132812f, 0.824219f},
+ {0.289062f, 0.847656f, 0.234375f, 0.492188f}, {0.390625f, 0.570312f, 0.054688f, 0.394531f},
+ {0.554688f, 0.042969f, 0.546875f, 0.890625f}, {0.917969f, 0.796875f, 0.695312f, 0.589844f},
+ {0.203125f, 0.207031f, 0.839844f, 0.273438f}, {0.773438f, 0.484375f, 0.355469f, 0.960938f},
+ {0.699219f, 0.035156f, 0.593750f, 0.152344f}, {0.171875f, 0.410156f, 0.218750f, 0.050781f},
+ {0.289062f, 0.824219f, 0.921875f, 0.406250f}, {0.851562f, 0.078125f, 0.765625f, 0.261719f},
+ {0.781250f, 0.703125f, 0.066406f, 0.457031f}, {0.105469f, 0.000000f, 0.460938f, 0.546875f},
+ {0.695312f, 0.140625f, 0.734375f, 0.792969f}, {0.187500f, 0.660156f, 0.515625f, 0.632812f},
+ {0.636719f, 0.433594f, 0.085938f, 0.257812f}, {0.402344f, 0.500000f, 0.425781f, 0.562500f},
+ {0.003906f, 0.019531f, 0.890625f, 0.214844f}, {0.878906f, 0.953125f, 0.816406f, 0.156250f},
+ {0.503906f, 0.847656f, 0.058594f, 0.835938f}, {0.062500f, 0.746094f, 0.617188f, 0.738281f},
+ {0.839844f, 0.058594f, 0.902344f, 0.312500f}, {0.691406f, 0.171875f, 0.496094f, 0.640625f},
+ {0.390625f, 0.417969f, 0.378906f, 0.433594f}, {0.593750f, 0.742188f, 0.578125f, 0.945312f},
+ {0.734375f, 0.484375f, 0.917969f, 0.722656f}, {0.316406f, 0.289062f, 0.667969f, 0.113281f},
+ {0.675781f, 0.164062f, 0.429688f, 0.460938f}, {0.972656f, 0.984375f, 0.371094f, 0.628906f},
+ {0.628906f, 0.257812f, 0.218750f, 0.015625f}, {0.242188f, 0.656250f, 0.773438f, 0.320312f},
+ {0.589844f, 0.957031f, 0.984375f, 0.777344f}, {0.957031f, 0.492188f, 0.402344f, 0.550781f},
+ {0.359375f, 0.144531f, 0.726562f, 0.105469f}, {0.859375f, 0.425781f, 0.203125f, 0.582031f},
+ {0.113281f, 0.921875f, 0.128906f, 0.261719f}, {0.933594f, 0.253906f, 0.628906f, 0.144531f},
+ {0.812500f, 0.570312f, 0.992188f, 0.890625f}, {0.148438f, 0.179688f, 0.093750f, 0.308594f},
+ {0.894531f, 0.734375f, 0.160156f, 0.734375f}, {0.339844f, 0.269531f, 0.343750f, 0.628906f},
+ {0.621094f, 0.089844f, 0.500000f, 0.394531f}, {0.523438f, 0.644531f, 0.906250f, 0.773438f},
+ {0.796875f, 0.507812f, 0.203125f, 0.480469f}, {0.582031f, 0.042969f, 0.367188f, 0.710938f},
+};
+
+#endif /* __EEVEE_LUT_H__ */
diff --git a/source/blender/draw/engines/eevee/eevee_materials.c b/source/blender/draw/engines/eevee/eevee_materials.c
new file mode 100644
index 00000000000..9754bfbd78b
--- /dev/null
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -0,0 +1,1491 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file eevee_materials.c
+ * \ingroup draw_engine
+ */
+
+#include "DRW_render.h"
+
+#include "BLI_dynstr.h"
+#include "BLI_ghash.h"
+#include "BLI_alloca.h"
+#include "BLI_rand.h"
+#include "BLI_string_utils.h"
+
+#include "BKE_particle.h"
+#include "BKE_paint.h"
+#include "BKE_pbvh.h"
+
+#include "DNA_world_types.h"
+#include "DNA_modifier_types.h"
+#include "DNA_view3d_types.h"
+
+#include "GPU_material.h"
+
+#include "eevee_engine.h"
+#include "eevee_lut.h"
+#include "eevee_private.h"
+
+/* *********** STATIC *********** */
+static struct {
+ char *frag_shader_lib;
+ char *volume_shader_lib;
+
+ struct GPUShader *default_prepass_sh;
+ struct GPUShader *default_prepass_clip_sh;
+ struct GPUShader *default_lit[VAR_MAT_MAX];
+ struct GPUShader *default_background;
+ struct GPUShader *update_noise_sh;
+
+ /* 64*64 array texture containing all LUTs and other utilitarian arrays.
+ * Packing enables us to same precious textures slots. */
+ struct GPUTexture *util_tex;
+ struct GPUTexture *noise_tex;
+
+ unsigned int sss_count;
+
+ float alpha_hash_offset;
+ float noise_offsets[3];
+} e_data = {NULL}; /* Engine data */
+
+extern char datatoc_lamps_lib_glsl[];
+extern char datatoc_lightprobe_lib_glsl[];
+extern char datatoc_ambient_occlusion_lib_glsl[];
+extern char datatoc_prepass_frag_glsl[];
+extern char datatoc_prepass_vert_glsl[];
+extern char datatoc_default_frag_glsl[];
+extern char datatoc_default_world_frag_glsl[];
+extern char datatoc_ltc_lib_glsl[];
+extern char datatoc_bsdf_lut_frag_glsl[];
+extern char datatoc_btdf_lut_frag_glsl[];
+extern char datatoc_bsdf_common_lib_glsl[];
+extern char datatoc_bsdf_direct_lib_glsl[];
+extern char datatoc_bsdf_sampling_lib_glsl[];
+extern char datatoc_common_uniforms_lib_glsl[];
+extern char datatoc_irradiance_lib_glsl[];
+extern char datatoc_octahedron_lib_glsl[];
+extern char datatoc_lit_surface_frag_glsl[];
+extern char datatoc_lit_surface_vert_glsl[];
+extern char datatoc_raytrace_lib_glsl[];
+extern char datatoc_ssr_lib_glsl[];
+extern char datatoc_shadow_vert_glsl[];
+extern char datatoc_shadow_geom_glsl[];
+extern char datatoc_lightprobe_geom_glsl[];
+extern char datatoc_lightprobe_vert_glsl[];
+extern char datatoc_background_vert_glsl[];
+extern char datatoc_update_noise_frag_glsl[];
+extern char datatoc_volumetric_vert_glsl[];
+extern char datatoc_volumetric_geom_glsl[];
+extern char datatoc_volumetric_frag_glsl[];
+extern char datatoc_volumetric_lib_glsl[];
+
+extern Material defmaterial;
+extern GlobalsUboStorage ts;
+
+/* *********** FUNCTIONS *********** */
+
+#if 0 /* Used only to generate the LUT values */
+static struct GPUTexture *create_ggx_lut_texture(int UNUSED(w), int UNUSED(h))
+{
+ struct GPUTexture *tex;
+ struct GPUFrameBuffer *fb = NULL;
+ static float samples_ct = 8192.0f;
+ static float inv_samples_ct = 1.0f / 8192.0f;
+
+ char *lib_str = BLI_string_joinN(
+ datatoc_bsdf_common_lib_glsl,
+ datatoc_bsdf_sampling_lib_glsl);
+
+ struct GPUShader *sh = DRW_shader_create_with_lib(
+ datatoc_lightprobe_vert_glsl, datatoc_lightprobe_geom_glsl, datatoc_bsdf_lut_frag_glsl, lib_str,
+ "#define HAMMERSLEY_SIZE 8192\n"
+ "#define BRDF_LUT_SIZE 64\n"
+ "#define NOISE_SIZE 64\n");
+
+ DRWPass *pass = DRW_pass_create("LightProbe Filtering", DRW_STATE_WRITE_COLOR);
+ DRWShadingGroup *grp = DRW_shgroup_create(sh, pass);
+ DRW_shgroup_uniform_float(grp, "sampleCount", &samples_ct, 1);
+ DRW_shgroup_uniform_float(grp, "invSampleCount", &inv_samples_ct, 1);
+ DRW_shgroup_uniform_texture(grp, "texHammersley", e_data.hammersley);
+ DRW_shgroup_uniform_texture(grp, "texJitter", e_data.jitter);
+
+ struct Gwn_Batch *geom = DRW_cache_fullscreen_quad_get();
+ DRW_shgroup_call_add(grp, geom, NULL);
+
+ float *texels = MEM_mallocN(sizeof(float[2]) * w * h, "lut");
+
+ tex = DRW_texture_create_2D(w, h, DRW_TEX_RG_16, DRW_TEX_FILTER, (float *)texels);
+
+ DRWFboTexture tex_filter = {&tex, DRW_TEX_RG_16, DRW_TEX_FILTER};
+ DRW_framebuffer_init(&fb, &draw_engine_eevee_type, w, h, &tex_filter, 1);
+
+ DRW_framebuffer_bind(fb);
+ DRW_draw_pass(pass);
+
+ float *data = MEM_mallocN(sizeof(float[3]) * w * h, "lut");
+ glReadBuffer(GL_COLOR_ATTACHMENT0);
+ glReadPixels(0, 0, w, h, GL_RGB, GL_FLOAT, data);
+
+ printf("{");
+ for (int i = 0; i < w*h * 3; i+=3) {
+ printf("%ff, %ff, ", data[i], data[i+1]); i+=3;
+ printf("%ff, %ff, ", data[i], data[i+1]); i+=3;
+ printf("%ff, %ff, ", data[i], data[i+1]); i+=3;
+ printf("%ff, %ff, \n", data[i], data[i+1]);
+ }
+ printf("}");
+
+ MEM_freeN(texels);
+ MEM_freeN(data);
+
+ return tex;
+}
+
+static struct GPUTexture *create_ggx_refraction_lut_texture(int w, int h)
+{
+ struct GPUTexture *tex;
+ struct GPUTexture *hammersley = create_hammersley_sample_texture(8192);
+ struct GPUFrameBuffer *fb = NULL;
+ static float samples_ct = 8192.0f;
+ static float a2 = 0.0f;
+ static float inv_samples_ct = 1.0f / 8192.0f;
+
+ char *frag_str = BLI_string_joinN(
+ datatoc_bsdf_common_lib_glsl,
+ datatoc_bsdf_sampling_lib_glsl,
+ datatoc_btdf_lut_frag_glsl);
+
+ struct GPUShader *sh = DRW_shader_create_fullscreen(frag_str,
+ "#define HAMMERSLEY_SIZE 8192\n"
+ "#define BRDF_LUT_SIZE 64\n"
+ "#define NOISE_SIZE 64\n"
+ "#define LUT_SIZE 64\n");
+
+ MEM_freeN(frag_str);
+
+ DRWPass *pass = DRW_pass_create("LightProbe Filtering", DRW_STATE_WRITE_COLOR);
+ DRWShadingGroup *grp = DRW_shgroup_create(sh, pass);
+ DRW_shgroup_uniform_float(grp, "a2", &a2, 1);
+ DRW_shgroup_uniform_float(grp, "sampleCount", &samples_ct, 1);
+ DRW_shgroup_uniform_float(grp, "invSampleCount", &inv_samples_ct, 1);
+ DRW_shgroup_uniform_texture(grp, "texHammersley", hammersley);
+ DRW_shgroup_uniform_texture(grp, "utilTex", e_data.util_tex);
+
+ struct Gwn_Batch *geom = DRW_cache_fullscreen_quad_get();
+ DRW_shgroup_call_add(grp, geom, NULL);
+
+ float *texels = MEM_mallocN(sizeof(float[2]) * w * h, "lut");
+
+ tex = DRW_texture_create_2D(w, h, DRW_TEX_R_16, DRW_TEX_FILTER, (float *)texels);
+
+ DRWFboTexture tex_filter = {&tex, DRW_TEX_R_16, DRW_TEX_FILTER};
+ DRW_framebuffer_init(&fb, &draw_engine_eevee_type, w, h, &tex_filter, 1);
+
+ DRW_framebuffer_bind(fb);
+
+ float *data = MEM_mallocN(sizeof(float[3]) * w * h, "lut");
+
+ float inc = 1.0f / 31.0f;
+ float roughness = 1e-8f - inc;
+ FILE *f = BLI_fopen("btdf_split_sum_ggx.h", "w");
+ fprintf(f, "static float btdf_split_sum_ggx[32][64 * 64] = {\n");
+ do {
+ roughness += inc;
+ CLAMP(roughness, 1e-4f, 1.0f);
+ a2 = powf(roughness, 4.0f);
+ DRW_draw_pass(pass);
+
+ DRW_framebuffer_read_data(0, 0, w, h, 3, 0, data);
+
+#if 1
+ fprintf(f, "\t{\n\t\t");
+ for (int i = 0; i < w*h * 3; i+=3) {
+ fprintf(f, "%ff,", data[i]);
+ if (((i/3)+1) % 12 == 0) fprintf(f, "\n\t\t");
+ else fprintf(f, " ");
+ }
+ fprintf(f, "\n\t},\n");
+#else
+ for (int i = 0; i < w*h * 3; i+=3) {
+ if (data[i] < 0.01) printf(" ");
+ else if (data[i] < 0.3) printf(".");
+ else if (data[i] < 0.6) printf("+");
+ else if (data[i] < 0.9) printf("%%");
+ else printf("#");
+ if ((i/3+1) % 64 == 0) printf("\n");
+ }
+#endif
+
+ } while (roughness < 1.0f);
+ fprintf(f, "\n};\n");
+
+ fclose(f);
+
+ MEM_freeN(texels);
+ MEM_freeN(data);
+
+ return tex;
+}
+#endif
+/* XXX TODO define all shared resources in a shared place without duplication */
+struct GPUTexture *EEVEE_materials_get_util_tex(void)
+{
+ return e_data.util_tex;
+}
+
+static int eevee_material_shadow_option(int shadow_method)
+{
+ switch (shadow_method) {
+ case SHADOW_ESM: return VAR_MAT_ESM;
+ case SHADOW_VSM: return VAR_MAT_VSM;
+ default:
+ BLI_assert(!"Incorrect Shadow Method");
+ break;
+ }
+
+ return 0;
+}
+
+static char *eevee_get_defines(int options)
+{
+ char *str = NULL;
+
+ DynStr *ds = BLI_dynstr_new();
+ BLI_dynstr_appendf(ds, SHADER_DEFINES);
+
+ if ((options & VAR_MAT_MESH) != 0) {
+ BLI_dynstr_appendf(ds, "#define MESH_SHADER\n");
+ }
+ if ((options & VAR_MAT_HAIR) != 0) {
+ BLI_dynstr_appendf(ds, "#define HAIR_SHADER\n");
+ }
+ if ((options & VAR_MAT_PROBE) != 0) {
+ BLI_dynstr_appendf(ds, "#define PROBE_CAPTURE\n");
+ }
+ if ((options & VAR_MAT_FLAT) != 0) {
+ BLI_dynstr_appendf(ds, "#define USE_FLAT_NORMAL\n");
+ }
+ if ((options & VAR_MAT_CLIP) != 0) {
+ BLI_dynstr_appendf(ds, "#define USE_ALPHA_CLIP\n");
+ }
+ if ((options & VAR_MAT_SHADOW) != 0) {
+ BLI_dynstr_appendf(ds, "#define SHADOW_SHADER\n");
+ }
+ if ((options & VAR_MAT_HASH) != 0) {
+ BLI_dynstr_appendf(ds, "#define USE_ALPHA_HASH\n");
+ }
+ if ((options & VAR_MAT_BLEND) != 0) {
+ BLI_dynstr_appendf(ds, "#define USE_ALPHA_BLEND\n");
+ }
+ if ((options & VAR_MAT_MULT) != 0) {
+ BLI_dynstr_appendf(ds, "#define USE_MULTIPLY\n");
+ }
+ if ((options & VAR_MAT_REFRACT) != 0) {
+ BLI_dynstr_appendf(ds, "#define USE_REFRACTION\n");
+ }
+ if ((options & VAR_MAT_SSS) != 0) {
+ BLI_dynstr_appendf(ds, "#define USE_SSS\n");
+ }
+ if ((options & VAR_MAT_SSSALBED) != 0) {
+ BLI_dynstr_appendf(ds, "#define USE_SSS_ALBEDO\n");
+ }
+ if ((options & VAR_MAT_TRANSLUC) != 0) {
+ BLI_dynstr_appendf(ds, "#define USE_TRANSLUCENCY\n");
+ }
+ if ((options & VAR_MAT_VSM) != 0) {
+ BLI_dynstr_appendf(ds, "#define SHADOW_VSM\n");
+ }
+ if ((options & VAR_MAT_ESM) != 0) {
+ BLI_dynstr_appendf(ds, "#define SHADOW_ESM\n");
+ }
+ if (((options & VAR_MAT_VOLUME) != 0) && ((options & VAR_MAT_BLEND) != 0)) {
+ BLI_dynstr_appendf(ds, "#define USE_ALPHA_BLEND_VOLUMETRICS\n");
+ }
+
+ str = BLI_dynstr_get_cstring(ds);
+ BLI_dynstr_free(ds);
+
+ return str;
+}
+
+static char *eevee_get_volume_defines(int options)
+{
+ char *str = NULL;
+
+ DynStr *ds = BLI_dynstr_new();
+ BLI_dynstr_appendf(ds, SHADER_DEFINES);
+ BLI_dynstr_appendf(ds, "#define VOLUMETRICS\n");
+
+ if ((options & VAR_MAT_VOLUME) != 0) {
+ BLI_dynstr_appendf(ds, "#define MESH_SHADER\n");
+ }
+
+ str = BLI_dynstr_get_cstring(ds);
+ BLI_dynstr_free(ds);
+
+ return str;
+}
+
+/**
+ * ssr_id can be null to disable ssr contribution.
+ **/
+static void add_standard_uniforms(
+ DRWShadingGroup *shgrp, EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata,
+ int *ssr_id, float *refract_depth, bool use_ssrefraction, bool use_alpha_blend)
+{
+ if (ssr_id == NULL) {
+ static int no_ssr = -1.0f;
+ ssr_id = &no_ssr;
+ }
+
+ DRW_shgroup_uniform_block(shgrp, "probe_block", sldata->probe_ubo);
+ DRW_shgroup_uniform_block(shgrp, "grid_block", sldata->grid_ubo);
+ DRW_shgroup_uniform_block(shgrp, "planar_block", sldata->planar_ubo);
+ DRW_shgroup_uniform_block(shgrp, "light_block", sldata->light_ubo);
+ DRW_shgroup_uniform_block(shgrp, "shadow_block", sldata->shadow_ubo);
+ DRW_shgroup_uniform_block(shgrp, "common_block", sldata->common_ubo);
+
+ /* TODO if glossy or diffuse bsdf */
+ if (true) {
+ DRW_shgroup_uniform_texture(shgrp, "utilTex", e_data.util_tex);
+ DRW_shgroup_uniform_buffer(shgrp, "shadowTexture", &sldata->shadow_pool);
+ DRW_shgroup_uniform_buffer(shgrp, "maxzBuffer", &vedata->txl->maxzbuffer);
+
+ if ((vedata->stl->effects->enabled_effects & EFFECT_GTAO) != 0) {
+ DRW_shgroup_uniform_buffer(shgrp, "horizonBuffer", &vedata->txl->gtao_horizons);
+ }
+ else {
+ /* Use maxzbuffer as fallback to avoid sampling problem on certain platform, see: T52593 */
+ DRW_shgroup_uniform_buffer(shgrp, "horizonBuffer", &vedata->txl->maxzbuffer);
+ }
+ }
+
+ /* TODO if diffuse bsdf */
+ if (true) {
+ DRW_shgroup_uniform_buffer(shgrp, "irradianceGrid", &sldata->irradiance_pool);
+ }
+
+ /* TODO if glossy bsdf */
+ if (true) {
+ DRW_shgroup_uniform_buffer(shgrp, "probeCubes", &sldata->probe_pool);
+ DRW_shgroup_uniform_buffer(shgrp, "probePlanars", &vedata->txl->planar_pool);
+ DRW_shgroup_uniform_int(shgrp, "outputSsrId", ssr_id, 1);
+ }
+
+ if (use_ssrefraction) {
+ BLI_assert(refract_depth != NULL);
+ DRW_shgroup_uniform_float(shgrp, "refractionDepth", refract_depth, 1);
+ DRW_shgroup_uniform_buffer(shgrp, "colorBuffer", &vedata->txl->refract_color);
+ }
+
+ if ((vedata->stl->effects->enabled_effects & EFFECT_VOLUMETRIC) != 0 &&
+ use_alpha_blend)
+ {
+ /* Do not use history buffers as they already have been swapped */
+ DRW_shgroup_uniform_buffer(shgrp, "inScattering", &vedata->txl->volume_scatter);
+ DRW_shgroup_uniform_buffer(shgrp, "inTransmittance", &vedata->txl->volume_transmittance);
+ }
+}
+
+static void create_default_shader(int options)
+{
+ char *frag_str = BLI_string_joinN(
+ e_data.frag_shader_lib,
+ datatoc_default_frag_glsl);
+
+ char *defines = eevee_get_defines(options);
+
+ e_data.default_lit[options] = DRW_shader_create(datatoc_lit_surface_vert_glsl, NULL, frag_str, defines);
+
+ MEM_freeN(defines);
+ MEM_freeN(frag_str);
+}
+
+static void eevee_init_noise_texture(void)
+{
+ e_data.noise_tex = DRW_texture_create_2D(64, 64, DRW_TEX_RGBA_16, 0, (float *)blue_noise);
+}
+
+static void eevee_init_util_texture(void)
+{
+ const int layers = 3 + 16;
+ float (*texels)[4] = MEM_mallocN(sizeof(float[4]) * 64 * 64 * layers, "utils texels");
+ float (*texels_layer)[4] = texels;
+
+ /* Copy ltc_mat_ggx into 1st layer */
+ memcpy(texels_layer, ltc_mat_ggx, sizeof(float[4]) * 64 * 64);
+ texels_layer += 64 * 64;
+
+ /* Copy bsdf_split_sum_ggx into 2nd layer red and green channels.
+ Copy ltc_mag_ggx into 2nd layer blue channel. */
+ for (int i = 0; i < 64 * 64; i++) {
+ texels_layer[i][0] = bsdf_split_sum_ggx[i * 2 + 0];
+ texels_layer[i][1] = bsdf_split_sum_ggx[i * 2 + 1];
+ texels_layer[i][2] = ltc_mag_ggx[i];
+ texels_layer[i][3] = ltc_disk_integral[i];
+ }
+ texels_layer += 64 * 64;
+
+ /* Copy blue noise in 3rd layer */
+ for (int i = 0; i < 64 * 64; i++) {
+ texels_layer[i][0] = blue_noise[i][0];
+ texels_layer[i][1] = blue_noise[i][1];
+ texels_layer[i][2] = cosf(blue_noise[i][1] * 2.0f * M_PI);
+ texels_layer[i][3] = sinf(blue_noise[i][1] * 2.0f * M_PI);
+ }
+ texels_layer += 64 * 64;
+
+ /* Copy Refraction GGX LUT in layer 4 - 20 */
+ for (int j = 0; j < 16; ++j) {
+ for (int i = 0; i < 64 * 64; i++) {
+ texels_layer[i][0] = btdf_split_sum_ggx[j * 2][i];
+ texels_layer[i][1] = btdf_split_sum_ggx[j * 2][i];
+ texels_layer[i][2] = btdf_split_sum_ggx[j * 2][i];
+ texels_layer[i][3] = btdf_split_sum_ggx[j * 2][i];
+ }
+ texels_layer += 64 * 64;
+ }
+
+ e_data.util_tex = DRW_texture_create_2D_array(
+ 64, 64, layers, DRW_TEX_RGBA_16, DRW_TEX_FILTER | DRW_TEX_WRAP, (float *)texels);
+
+ MEM_freeN(texels);
+}
+
+void EEVEE_update_noise(EEVEE_PassList *psl, EEVEE_FramebufferList *fbl, const double offsets[3])
+{
+ e_data.noise_offsets[0] = offsets[0];
+ e_data.noise_offsets[1] = offsets[1];
+ e_data.noise_offsets[2] = offsets[2];
+
+ /* Attach & detach because we don't currently support multiple FB per texture,
+ * and this would be the case for multiple viewport. */
+ DRW_framebuffer_texture_layer_attach(fbl->update_noise_fb, e_data.util_tex, 0, 2, 0);
+ DRW_framebuffer_bind(fbl->update_noise_fb);
+ DRW_draw_pass(psl->update_noise_pass);
+ DRW_framebuffer_texture_detach(e_data.util_tex);
+}
+
+static void EEVEE_update_viewvecs(float invproj[4][4], float winmat[4][4], float (*r_viewvecs)[4])
+{
+ /* view vectors for the corners of the view frustum.
+ * Can be used to recreate the world space position easily */
+ float view_vecs[4][4] = {
+ {-1.0f, -1.0f, -1.0f, 1.0f},
+ { 1.0f, -1.0f, -1.0f, 1.0f},
+ {-1.0f, 1.0f, -1.0f, 1.0f},
+ {-1.0f, -1.0f, 1.0f, 1.0f}
+ };
+
+ /* convert the view vectors to view space */
+ const bool is_persp = (winmat[3][3] == 0.0f);
+ for (int i = 0; i < 4; i++) {
+ mul_project_m4_v3(invproj, view_vecs[i]);
+ /* normalized trick see:
+ * http://www.derschmale.com/2014/01/26/reconstructing-positions-from-the-depth-buffer */
+ if (is_persp) {
+ /* Divide XY by Z. */
+ mul_v2_fl(view_vecs[i], 1.0f / view_vecs[i][2]);
+ }
+ }
+
+ /**
+ * If ortho : view_vecs[0] is the near-bottom-left corner of the frustum and
+ * view_vecs[1] is the vector going from the near-bottom-left corner to
+ * the far-top-right corner.
+ * If Persp : view_vecs[0].xy and view_vecs[1].xy are respectively the bottom-left corner
+ * when Z = 1, and top-left corner if Z = 1.
+ * view_vecs[0].z the near clip distance and view_vecs[1].z is the (signed)
+ * distance from the near plane to the far clip plane.
+ **/
+ copy_v4_v4(r_viewvecs[0], view_vecs[0]);
+
+ /* we need to store the differences */
+ r_viewvecs[1][0] = view_vecs[1][0] - view_vecs[0][0];
+ r_viewvecs[1][1] = view_vecs[2][1] - view_vecs[0][1];
+ r_viewvecs[1][2] = view_vecs[3][2] - view_vecs[0][2];
+}
+
+void EEVEE_materials_init(EEVEE_ViewLayerData *sldata, EEVEE_StorageList *stl, EEVEE_FramebufferList *fbl)
+{
+ if (!e_data.frag_shader_lib) {
+ char *frag_str = NULL;
+
+ /* Shaders */
+ e_data.frag_shader_lib = BLI_string_joinN(
+ datatoc_common_uniforms_lib_glsl,
+ datatoc_bsdf_common_lib_glsl,
+ datatoc_bsdf_sampling_lib_glsl,
+ datatoc_ambient_occlusion_lib_glsl,
+ datatoc_raytrace_lib_glsl,
+ datatoc_ssr_lib_glsl,
+ datatoc_octahedron_lib_glsl,
+ datatoc_irradiance_lib_glsl,
+ datatoc_lightprobe_lib_glsl,
+ datatoc_ltc_lib_glsl,
+ datatoc_bsdf_direct_lib_glsl,
+ datatoc_lamps_lib_glsl,
+ /* Add one for each Closure */
+ datatoc_lit_surface_frag_glsl,
+ datatoc_lit_surface_frag_glsl,
+ datatoc_lit_surface_frag_glsl,
+ datatoc_lit_surface_frag_glsl,
+ datatoc_lit_surface_frag_glsl,
+ datatoc_lit_surface_frag_glsl,
+ datatoc_lit_surface_frag_glsl,
+ datatoc_lit_surface_frag_glsl,
+ datatoc_volumetric_lib_glsl);
+
+ e_data.volume_shader_lib = BLI_string_joinN(
+ datatoc_common_uniforms_lib_glsl,
+ datatoc_bsdf_common_lib_glsl,
+ datatoc_ambient_occlusion_lib_glsl,
+ datatoc_octahedron_lib_glsl,
+ datatoc_irradiance_lib_glsl,
+ datatoc_lightprobe_lib_glsl,
+ datatoc_ltc_lib_glsl,
+ datatoc_bsdf_direct_lib_glsl,
+ datatoc_lamps_lib_glsl,
+ datatoc_volumetric_lib_glsl,
+ datatoc_volumetric_frag_glsl);
+
+ frag_str = BLI_string_joinN(
+ e_data.frag_shader_lib,
+ datatoc_default_frag_glsl);
+
+ e_data.default_background = DRW_shader_create(
+ datatoc_background_vert_glsl, NULL, datatoc_default_world_frag_glsl,
+ NULL);
+
+ e_data.default_prepass_sh = DRW_shader_create(
+ datatoc_prepass_vert_glsl, NULL, datatoc_prepass_frag_glsl,
+ NULL);
+
+ e_data.default_prepass_clip_sh = DRW_shader_create(
+ datatoc_prepass_vert_glsl, NULL, datatoc_prepass_frag_glsl,
+ "#define CLIP_PLANES\n");
+
+ MEM_freeN(frag_str);
+
+ e_data.update_noise_sh = DRW_shader_create_fullscreen(
+ datatoc_update_noise_frag_glsl, NULL);
+
+ eevee_init_util_texture();
+ eevee_init_noise_texture();
+ }
+
+ if (!DRW_state_is_image_render() &&
+ ((stl->effects->enabled_effects & EFFECT_TAA) == 0))
+ {
+ e_data.alpha_hash_offset = 0.0f;
+ }
+ else {
+ double r;
+ BLI_halton_1D(5, 0.0, stl->effects->taa_current_sample - 1, &r);
+ e_data.alpha_hash_offset = (float)r;
+ }
+
+ {
+ /* Update view_vecs */
+ float invproj[4][4], winmat[4][4];
+ DRW_viewport_matrix_get(winmat, DRW_MAT_WIN);
+ DRW_viewport_matrix_get(invproj, DRW_MAT_WININV);
+
+ EEVEE_update_viewvecs(invproj, winmat, sldata->common_data.view_vecs);
+ }
+
+ {
+ /* Update noise Framebuffer. */
+ if (fbl->update_noise_fb == NULL) {
+ fbl->update_noise_fb = DRW_framebuffer_create();
+ }
+ }
+}
+
+struct GPUMaterial *EEVEE_material_world_lightprobe_get(struct Scene *scene, World *wo)
+{
+ const void *engine = &DRW_engine_viewport_eevee_type;
+ const int options = VAR_WORLD_PROBE;
+
+ GPUMaterial *mat = GPU_material_from_nodetree_find(&wo->gpumaterial, engine, options);
+ if (mat != NULL) {
+ return mat;
+ }
+ return GPU_material_from_nodetree(
+ scene, wo->nodetree, &wo->gpumaterial, engine, options,
+ datatoc_background_vert_glsl, NULL, e_data.frag_shader_lib,
+ SHADER_DEFINES "#define PROBE_CAPTURE\n");
+}
+
+struct GPUMaterial *EEVEE_material_world_background_get(struct Scene *scene, World *wo)
+{
+ const void *engine = &DRW_engine_viewport_eevee_type;
+ int options = VAR_WORLD_BACKGROUND;
+
+ GPUMaterial *mat = GPU_material_from_nodetree_find(&wo->gpumaterial, engine, options);
+ if (mat != NULL) {
+ return mat;
+ }
+ return GPU_material_from_nodetree(
+ scene, wo->nodetree, &wo->gpumaterial, engine, options,
+ datatoc_background_vert_glsl, NULL, e_data.frag_shader_lib,
+ SHADER_DEFINES "#define WORLD_BACKGROUND\n");
+}
+
+struct GPUMaterial *EEVEE_material_world_volume_get(struct Scene *scene, World *wo)
+{
+ const void *engine = &DRW_engine_viewport_eevee_type;
+ int options = VAR_WORLD_VOLUME;
+
+ GPUMaterial *mat = GPU_material_from_nodetree_find(&wo->gpumaterial, engine, options);
+ if (mat != NULL) {
+ return mat;
+ }
+
+ char *defines = eevee_get_volume_defines(options);
+
+ mat = GPU_material_from_nodetree(
+ scene, wo->nodetree, &wo->gpumaterial, engine, options,
+ datatoc_volumetric_vert_glsl, datatoc_volumetric_geom_glsl, e_data.volume_shader_lib,
+ defines);
+
+ MEM_freeN(defines);
+
+ return mat;
+}
+
+struct GPUMaterial *EEVEE_material_mesh_get(
+ struct Scene *scene, Material *ma, EEVEE_Data *vedata,
+ bool use_blend, bool use_multiply, bool use_refract, bool use_sss, bool use_translucency, int shadow_method)
+{
+ EEVEE_EffectsInfo *effects = vedata->stl->effects;
+ const void *engine = &DRW_engine_viewport_eevee_type;
+ int options = VAR_MAT_MESH;
+
+ if (use_blend) options |= VAR_MAT_BLEND;
+ if (use_multiply) options |= VAR_MAT_MULT;
+ if (use_refract) options |= VAR_MAT_REFRACT;
+ if (use_sss) options |= VAR_MAT_SSS;
+ if (use_sss && effects->sss_separate_albedo) options |= VAR_MAT_SSSALBED;
+ if (use_translucency) options |= VAR_MAT_TRANSLUC;
+ if (((effects->enabled_effects & EFFECT_VOLUMETRIC) != 0) && use_blend) options |= VAR_MAT_VOLUME;
+
+ options |= eevee_material_shadow_option(shadow_method);
+
+ GPUMaterial *mat = GPU_material_from_nodetree_find(&ma->gpumaterial, engine, options);
+ if (mat) {
+ return mat;
+ }
+
+ char *defines = eevee_get_defines(options);
+
+ mat = GPU_material_from_nodetree(
+ scene, ma->nodetree, &ma->gpumaterial, engine, options,
+ datatoc_lit_surface_vert_glsl, NULL, e_data.frag_shader_lib,
+ defines);
+
+ MEM_freeN(defines);
+
+ return mat;
+}
+
+struct GPUMaterial *EEVEE_material_mesh_volume_get(struct Scene *scene, Material *ma)
+{
+ const void *engine = &DRW_engine_viewport_eevee_type;
+ int options = VAR_MAT_VOLUME;
+
+ GPUMaterial *mat = GPU_material_from_nodetree_find(&ma->gpumaterial, engine, options);
+ if (mat != NULL) {
+ return mat;
+ }
+
+ char *defines = eevee_get_volume_defines(options);
+
+ mat = GPU_material_from_nodetree(
+ scene, ma->nodetree, &ma->gpumaterial, engine, options,
+ datatoc_volumetric_vert_glsl, datatoc_volumetric_geom_glsl, e_data.volume_shader_lib,
+ defines);
+
+ MEM_freeN(defines);
+
+ return mat;
+}
+
+struct GPUMaterial *EEVEE_material_mesh_depth_get(
+ struct Scene *scene, Material *ma,
+ bool use_hashed_alpha, bool is_shadow)
+{
+ const void *engine = &DRW_engine_viewport_eevee_type;
+ int options = VAR_MAT_MESH;
+
+ if (use_hashed_alpha) {
+ options |= VAR_MAT_HASH;
+ }
+ else {
+ options |= VAR_MAT_CLIP;
+ }
+
+ if (is_shadow)
+ options |= VAR_MAT_SHADOW;
+
+ GPUMaterial *mat = GPU_material_from_nodetree_find(&ma->gpumaterial, engine, options);
+ if (mat) {
+ return mat;
+ }
+
+ char *defines = eevee_get_defines(options);
+
+ char *frag_str = BLI_string_joinN(
+ e_data.frag_shader_lib,
+ datatoc_prepass_frag_glsl);
+
+ mat = GPU_material_from_nodetree(
+ scene, ma->nodetree, &ma->gpumaterial, engine, options,
+ (is_shadow) ? datatoc_shadow_vert_glsl : datatoc_lit_surface_vert_glsl,
+ (is_shadow) ? datatoc_shadow_geom_glsl : NULL,
+ frag_str,
+ defines);
+
+ MEM_freeN(frag_str);
+ MEM_freeN(defines);
+
+ return mat;
+}
+
+struct GPUMaterial *EEVEE_material_hair_get(
+ struct Scene *scene, Material *ma, int shadow_method)
+{
+ const void *engine = &DRW_engine_viewport_eevee_type;
+ int options = VAR_MAT_MESH | VAR_MAT_HAIR;
+
+ options |= eevee_material_shadow_option(shadow_method);
+
+ GPUMaterial *mat = GPU_material_from_nodetree_find(&ma->gpumaterial, engine, options);
+ if (mat) {
+ return mat;
+ }
+
+ char *defines = eevee_get_defines(options);
+
+ mat = GPU_material_from_nodetree(
+ scene, ma->nodetree, &ma->gpumaterial, engine, options,
+ datatoc_lit_surface_vert_glsl, NULL, e_data.frag_shader_lib,
+ defines);
+
+ MEM_freeN(defines);
+
+ return mat;
+}
+
+/**
+ * Create a default shading group inside the given pass.
+ **/
+static struct DRWShadingGroup *EEVEE_default_shading_group_create(
+ EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, DRWPass *pass,
+ bool is_hair, bool is_flat_normal, bool use_blend, bool use_ssr, int shadow_method)
+{
+ EEVEE_EffectsInfo *effects = vedata->stl->effects;
+ static int ssr_id;
+ ssr_id = (use_ssr) ? 1 : -1;
+ int options = VAR_MAT_MESH;
+
+ if (is_hair) options |= VAR_MAT_HAIR;
+ if (is_flat_normal) options |= VAR_MAT_FLAT;
+ if (use_blend) options |= VAR_MAT_BLEND;
+ if (((effects->enabled_effects & EFFECT_VOLUMETRIC) != 0) && use_blend) options |= VAR_MAT_VOLUME;
+
+ options |= eevee_material_shadow_option(shadow_method);
+
+ if (e_data.default_lit[options] == NULL) {
+ create_default_shader(options);
+ }
+
+ DRWShadingGroup *shgrp = DRW_shgroup_create(e_data.default_lit[options], pass);
+ add_standard_uniforms(shgrp, sldata, vedata, &ssr_id, NULL, false, use_blend);
+
+ return shgrp;
+}
+
+/**
+ * Create a default shading group inside the default pass without standard uniforms.
+ **/
+static struct DRWShadingGroup *EEVEE_default_shading_group_get(
+ EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata,
+ bool is_hair, bool is_flat_normal, bool use_ssr, int shadow_method)
+{
+ static int ssr_id;
+ ssr_id = (use_ssr) ? 1 : -1;
+ int options = VAR_MAT_MESH;
+
+ if (is_hair) options |= VAR_MAT_HAIR;
+ if (is_flat_normal) options |= VAR_MAT_FLAT;
+
+ options |= eevee_material_shadow_option(shadow_method);
+
+ if (e_data.default_lit[options] == NULL) {
+ create_default_shader(options);
+ }
+
+ if (vedata->psl->default_pass[options] == NULL) {
+ DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL | DRW_STATE_CLIP_PLANES | DRW_STATE_WIRE;
+ vedata->psl->default_pass[options] = DRW_pass_create("Default Lit Pass", state);
+
+ DRWShadingGroup *shgrp = DRW_shgroup_create(e_data.default_lit[options], vedata->psl->default_pass[options]);
+ add_standard_uniforms(shgrp, sldata, vedata, &ssr_id, NULL, false, false);
+ }
+
+ return DRW_shgroup_create(e_data.default_lit[options], vedata->psl->default_pass[options]);
+}
+
+void EEVEE_materials_cache_init(EEVEE_Data *vedata)
+{
+ EEVEE_PassList *psl = ((EEVEE_Data *)vedata)->psl;
+ EEVEE_StorageList *stl = ((EEVEE_Data *)vedata)->stl;
+
+ /* Create Material Ghash */
+ {
+ stl->g_data->material_hash = BLI_ghash_ptr_new("Eevee_material ghash");
+ stl->g_data->hair_material_hash = BLI_ghash_ptr_new("Eevee_hair_material ghash");
+ }
+
+ {
+ psl->background_pass = DRW_pass_create("Background Pass", DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL);
+
+ struct Gwn_Batch *geom = DRW_cache_fullscreen_quad_get();
+ DRWShadingGroup *grp = NULL;
+
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ Scene *scene = draw_ctx->scene;
+ World *wo = scene->world;
+
+ float *col = ts.colorBackground;
+
+ if (wo) {
+ col = &wo->horr;
+
+ if (wo->use_nodes && wo->nodetree) {
+ struct GPUMaterial *gpumat = EEVEE_material_world_background_get(scene, wo);
+ grp = DRW_shgroup_material_create(gpumat, psl->background_pass);
+
+ if (grp) {
+ DRW_shgroup_uniform_float(grp, "backgroundAlpha", &stl->g_data->background_alpha, 1);
+ DRW_shgroup_call_add(grp, geom, NULL);
+ }
+ else {
+ /* Shader failed : pink background */
+ static float pink[3] = {1.0f, 0.0f, 1.0f};
+ col = pink;
+ }
+ }
+ }
+
+ /* Fallback if shader fails or if not using nodetree. */
+ if (grp == NULL) {
+ grp = DRW_shgroup_create(e_data.default_background, psl->background_pass);
+ DRW_shgroup_uniform_vec3(grp, "color", col, 1);
+ DRW_shgroup_uniform_float(grp, "backgroundAlpha", &stl->g_data->background_alpha, 1);
+ DRW_shgroup_call_add(grp, geom, NULL);
+ }
+ }
+
+ {
+ DRWState state = DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_WIRE;
+ psl->depth_pass = DRW_pass_create("Depth Pass", state);
+ stl->g_data->depth_shgrp = DRW_shgroup_create(e_data.default_prepass_sh, psl->depth_pass);
+
+ state = DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_CULL_BACK;
+ psl->depth_pass_cull = DRW_pass_create("Depth Pass Cull", state);
+ stl->g_data->depth_shgrp_cull = DRW_shgroup_create(e_data.default_prepass_sh, psl->depth_pass_cull);
+
+ state = DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_CLIP_PLANES | DRW_STATE_WIRE;
+ psl->depth_pass_clip = DRW_pass_create("Depth Pass Clip", state);
+ stl->g_data->depth_shgrp_clip = DRW_shgroup_create(e_data.default_prepass_clip_sh, psl->depth_pass_clip);
+
+ state = DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_CLIP_PLANES | DRW_STATE_CULL_BACK;
+ psl->depth_pass_clip_cull = DRW_pass_create("Depth Pass Cull Clip", state);
+ stl->g_data->depth_shgrp_clip_cull = DRW_shgroup_create(e_data.default_prepass_clip_sh, psl->depth_pass_clip_cull);
+ }
+
+ {
+ DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL | DRW_STATE_CLIP_PLANES | DRW_STATE_WIRE;
+ psl->material_pass = DRW_pass_create("Material Shader Pass", state);
+ }
+
+ {
+ DRWState state = DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_WIRE;
+ psl->refract_depth_pass = DRW_pass_create("Refract Depth Pass", state);
+ stl->g_data->refract_depth_shgrp = DRW_shgroup_create(e_data.default_prepass_sh, psl->refract_depth_pass);
+
+ state = DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_CULL_BACK;
+ psl->refract_depth_pass_cull = DRW_pass_create("Refract Depth Pass Cull", state);
+ stl->g_data->refract_depth_shgrp_cull = DRW_shgroup_create(e_data.default_prepass_sh, psl->refract_depth_pass_cull);
+
+ state = DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_CLIP_PLANES | DRW_STATE_WIRE;
+ psl->refract_depth_pass_clip = DRW_pass_create("Refract Depth Pass Clip", state);
+ stl->g_data->refract_depth_shgrp_clip = DRW_shgroup_create(e_data.default_prepass_clip_sh, psl->refract_depth_pass_clip);
+
+ state = DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_CLIP_PLANES | DRW_STATE_CULL_BACK;
+ psl->refract_depth_pass_clip_cull = DRW_pass_create("Refract Depth Pass Cull Clip", state);
+ stl->g_data->refract_depth_shgrp_clip_cull = DRW_shgroup_create(e_data.default_prepass_clip_sh, psl->refract_depth_pass_clip_cull);
+ }
+
+ {
+ DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL | DRW_STATE_CLIP_PLANES | DRW_STATE_WIRE;
+ psl->refract_pass = DRW_pass_create("Opaque Refraction Pass", state);
+ }
+
+ {
+ DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL | DRW_STATE_CLIP_PLANES | DRW_STATE_WIRE | DRW_STATE_WRITE_STENCIL;
+ psl->sss_pass = DRW_pass_create("Subsurface Pass", state);
+ e_data.sss_count = 0;
+ }
+
+ {
+ DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_LESS | DRW_STATE_CLIP_PLANES | DRW_STATE_WIRE;
+ psl->transparent_pass = DRW_pass_create("Material Transparent Pass", state);
+ }
+
+ {
+ psl->update_noise_pass = DRW_pass_create("Update Noise Pass", DRW_STATE_WRITE_COLOR);
+ DRWShadingGroup *grp = DRW_shgroup_create(e_data.update_noise_sh, psl->update_noise_pass);
+ DRW_shgroup_uniform_texture(grp, "blueNoise", e_data.noise_tex);
+ DRW_shgroup_uniform_vec3(grp, "offsets", e_data.noise_offsets, 1);
+ DRW_shgroup_call_add(grp, DRW_cache_fullscreen_quad_get(), NULL);
+ }
+
+}
+
+#define ADD_SHGROUP_CALL(shgrp, ob, geom) do { \
+ if (is_sculpt_mode_draw) { \
+ DRW_shgroup_call_sculpt_add(shgrp, ob, ob->obmat); \
+ } \
+ else { \
+ DRW_shgroup_call_object_add(shgrp, geom, ob); \
+ } \
+} while (0)
+
+#define ADD_SHGROUP_CALL_SAFE(shgrp, ob, geom) do { \
+ if (shgrp) { \
+ ADD_SHGROUP_CALL(shgrp, ob, geom); \
+ } \
+} while (0)
+
+typedef struct EeveeMaterialShadingGroups {
+ struct DRWShadingGroup *shading_grp;
+ struct DRWShadingGroup *depth_grp;
+ struct DRWShadingGroup *depth_clip_grp;
+} EeveeMaterialShadingGroups;
+
+static void material_opaque(
+ Material *ma, GHash *material_hash, EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata,
+ bool do_cull, bool use_flat_nor, struct GPUMaterial **gpumat, struct GPUMaterial **gpumat_depth,
+ struct DRWShadingGroup **shgrp, struct DRWShadingGroup **shgrp_depth, struct DRWShadingGroup **shgrp_depth_clip)
+{
+ EEVEE_EffectsInfo *effects = vedata->stl->effects;
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ Scene *scene = draw_ctx->scene;
+ EEVEE_StorageList *stl = ((EEVEE_Data *)vedata)->stl;
+ EEVEE_PassList *psl = ((EEVEE_Data *)vedata)->psl;
+ EEVEE_LampsInfo *linfo = sldata->lamps;
+
+ float *color_p = &ma->r;
+ float *metal_p = &ma->ray_mirror;
+ float *spec_p = &ma->spec;
+ float *rough_p = &ma->gloss_mir;
+
+ const bool use_gpumat = (ma->use_nodes && ma->nodetree);
+ const bool use_refract = ((ma->blend_flag & MA_BL_SS_REFRACTION) != 0) &&
+ ((effects->enabled_effects & EFFECT_REFRACT) != 0);
+ const bool use_sss = ((ma->blend_flag & MA_BL_SS_SUBSURFACE) != 0) &&
+ ((effects->enabled_effects & EFFECT_SSS) != 0);
+ const bool use_translucency = use_sss && ((ma->blend_flag & MA_BL_TRANSLUCENCY) != 0);
+
+ EeveeMaterialShadingGroups *emsg = BLI_ghash_lookup(material_hash, (const void *)ma);
+
+ if (emsg) {
+ *shgrp = emsg->shading_grp;
+ *shgrp_depth = emsg->depth_grp;
+ *shgrp_depth_clip = emsg->depth_clip_grp;
+
+ /* This will have been created already, just perform a lookup. */
+ *gpumat = (use_gpumat) ? EEVEE_material_mesh_get(
+ scene, ma, vedata, false, false, use_refract, use_sss, use_translucency, linfo->shadow_method) : NULL;
+ *gpumat_depth = (use_gpumat) ? EEVEE_material_mesh_depth_get(
+ scene, ma, (ma->blend_method == MA_BM_HASHED), false) : NULL;
+ return;
+ }
+
+ if (use_gpumat) {
+ /* Shading */
+ *gpumat = EEVEE_material_mesh_get(scene, ma, vedata, false, false, use_refract,
+ use_sss, use_translucency, linfo->shadow_method);
+
+ *shgrp = DRW_shgroup_material_create(*gpumat,
+ (use_refract) ? psl->refract_pass :
+ (use_sss) ? psl->sss_pass : psl->material_pass);
+ if (*shgrp) {
+ static int no_ssr = -1;
+ static int first_ssr = 1;
+ int *ssr_id = (((effects->enabled_effects & EFFECT_SSR) != 0) && !use_refract) ? &first_ssr : &no_ssr;
+ add_standard_uniforms(*shgrp, sldata, vedata, ssr_id, &ma->refract_depth, use_refract, false);
+
+ if (use_sss) {
+ struct GPUTexture *sss_tex_profile = NULL;
+ struct GPUUniformBuffer *sss_profile = GPU_material_sss_profile_get(*gpumat,
+ stl->effects->sss_sample_count,
+ &sss_tex_profile);
+
+ if (sss_profile) {
+ if (use_translucency) {
+ DRW_shgroup_uniform_block(*shgrp, "sssProfile", sss_profile);
+ DRW_shgroup_uniform_texture(*shgrp, "sssTexProfile", sss_tex_profile);
+ }
+
+ /* Limit of 8 bit stencil buffer. ID 255 is refraction. */
+ if (e_data.sss_count < 254) {
+ DRW_shgroup_stencil_mask(*shgrp, e_data.sss_count + 1);
+ EEVEE_subsurface_add_pass(sldata, vedata, e_data.sss_count + 1, sss_profile);
+ e_data.sss_count++;
+ }
+ else {
+ /* TODO : display message. */
+ printf("Error: Too many different Subsurface shader in the scene.\n");
+ }
+ }
+ }
+ }
+ else {
+ /* Shader failed : pink color */
+ static float col[3] = {1.0f, 0.0f, 1.0f};
+ static float half = 0.5f;
+
+ color_p = col;
+ metal_p = spec_p = rough_p = &half;
+ }
+
+ /* Alpha CLipped : Discard pixel from depth pass, then
+ * fail the depth test for shading. */
+ if (ELEM(ma->blend_method, MA_BM_CLIP, MA_BM_HASHED)) {
+ *gpumat_depth = EEVEE_material_mesh_depth_get(scene, ma,
+ (ma->blend_method == MA_BM_HASHED), false);
+
+ if (use_refract) {
+ *shgrp_depth = DRW_shgroup_material_create(*gpumat_depth, (do_cull) ? psl->refract_depth_pass_cull : psl->refract_depth_pass);
+ *shgrp_depth_clip = DRW_shgroup_material_create(*gpumat_depth, (do_cull) ? psl->refract_depth_pass_clip_cull : psl->refract_depth_pass_clip);
+ }
+ else {
+ *shgrp_depth = DRW_shgroup_material_create(*gpumat_depth, (do_cull) ? psl->depth_pass_cull : psl->depth_pass);
+ *shgrp_depth_clip = DRW_shgroup_material_create(*gpumat_depth, (do_cull) ? psl->depth_pass_clip_cull : psl->depth_pass_clip);
+ }
+
+ if (*shgrp_depth != NULL) {
+ add_standard_uniforms(*shgrp_depth, sldata, vedata, NULL, NULL, false, false);
+
+ if (ma->blend_method == MA_BM_CLIP) {
+ DRW_shgroup_uniform_float(*shgrp_depth, "alphaThreshold", &ma->alpha_threshold, 1);
+ DRW_shgroup_uniform_float(*shgrp_depth_clip, "alphaThreshold", &ma->alpha_threshold, 1);
+ }
+ else if (ma->blend_method == MA_BM_HASHED) {
+ DRW_shgroup_uniform_float(*shgrp_depth, "hashAlphaOffset", &e_data.alpha_hash_offset, 1);
+ DRW_shgroup_uniform_float(*shgrp_depth_clip, "hashAlphaOffset", &e_data.alpha_hash_offset, 1);
+ }
+ }
+ }
+ }
+
+ /* Fallback to default shader */
+ if (*shgrp == NULL) {
+ bool use_ssr = ((effects->enabled_effects & EFFECT_SSR) != 0);
+ *shgrp = EEVEE_default_shading_group_get(sldata, vedata, false, use_flat_nor, use_ssr, linfo->shadow_method);
+ DRW_shgroup_uniform_vec3(*shgrp, "basecol", color_p, 1);
+ DRW_shgroup_uniform_float(*shgrp, "metallic", metal_p, 1);
+ DRW_shgroup_uniform_float(*shgrp, "specular", spec_p, 1);
+ DRW_shgroup_uniform_float(*shgrp, "roughness", rough_p, 1);
+ }
+
+ /* Fallback default depth prepass */
+ if (*shgrp_depth == NULL) {
+ if (use_refract) {
+ *shgrp_depth = (do_cull) ? stl->g_data->refract_depth_shgrp_cull : stl->g_data->refract_depth_shgrp;
+ *shgrp_depth_clip = (do_cull) ? stl->g_data->refract_depth_shgrp_clip_cull : stl->g_data->refract_depth_shgrp_clip;
+ }
+ else {
+ *shgrp_depth = (do_cull) ? stl->g_data->depth_shgrp_cull : stl->g_data->depth_shgrp;
+ *shgrp_depth_clip = (do_cull) ? stl->g_data->depth_shgrp_clip_cull : stl->g_data->depth_shgrp_clip;
+ }
+ }
+
+ emsg = MEM_mallocN(sizeof("EeveeMaterialShadingGroups"), "EeveeMaterialShadingGroups");
+ emsg->shading_grp = *shgrp;
+ emsg->depth_grp = *shgrp_depth;
+ emsg->depth_clip_grp = *shgrp_depth_clip;
+ BLI_ghash_insert(material_hash, ma, emsg);
+}
+
+static void material_transparent(
+ Material *ma, EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata,
+ bool do_cull, bool use_flat_nor, struct GPUMaterial **gpumat, struct DRWShadingGroup **shgrp, struct DRWShadingGroup **shgrp_depth)
+{
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ Scene *scene = draw_ctx->scene;
+ EEVEE_StorageList *stl = ((EEVEE_Data *)vedata)->stl;
+ EEVEE_PassList *psl = ((EEVEE_Data *)vedata)->psl;
+ EEVEE_LampsInfo *linfo = sldata->lamps;
+
+ const bool use_refract = ((ma->blend_flag & MA_BL_SS_REFRACTION) != 0) && ((stl->effects->enabled_effects & EFFECT_REFRACT) != 0);
+
+ float *color_p = &ma->r;
+ float *metal_p = &ma->ray_mirror;
+ float *spec_p = &ma->spec;
+ float *rough_p = &ma->gloss_mir;
+
+ if (ma->use_nodes && ma->nodetree) {
+ /* Shading */
+ *gpumat = EEVEE_material_mesh_get(scene, ma, vedata, true, (ma->blend_method == MA_BM_MULTIPLY), use_refract,
+ false, false, linfo->shadow_method);
+
+ *shgrp = DRW_shgroup_material_create(*gpumat, psl->transparent_pass);
+ if (*shgrp) {
+ static int ssr_id = -1; /* TODO transparent SSR */
+ bool use_blend = (ma->blend_method & MA_BM_BLEND) != 0;
+ add_standard_uniforms(*shgrp, sldata, vedata, &ssr_id, &ma->refract_depth, use_refract, use_blend);
+ }
+ else {
+ /* Shader failed : pink color */
+ static float col[3] = {1.0f, 0.0f, 1.0f};
+ static float half = 0.5f;
+
+ color_p = col;
+ metal_p = spec_p = rough_p = &half;
+ }
+ }
+
+ /* Fallback to default shader */
+ if (*shgrp == NULL) {
+ *shgrp = EEVEE_default_shading_group_create(
+ sldata, vedata, psl->transparent_pass,
+ false, use_flat_nor, true, false, linfo->shadow_method);
+ DRW_shgroup_uniform_vec3(*shgrp, "basecol", color_p, 1);
+ DRW_shgroup_uniform_float(*shgrp, "metallic", metal_p, 1);
+ DRW_shgroup_uniform_float(*shgrp, "specular", spec_p, 1);
+ DRW_shgroup_uniform_float(*shgrp, "roughness", rough_p, 1);
+ }
+
+ const bool use_prepass = ((ma->blend_flag & MA_BL_HIDE_BACKSIDE) != 0);
+
+ DRWState all_state = DRW_STATE_WRITE_DEPTH | DRW_STATE_WRITE_COLOR | DRW_STATE_CULL_BACK | DRW_STATE_DEPTH_LESS | DRW_STATE_DEPTH_EQUAL |
+ DRW_STATE_BLEND | DRW_STATE_ADDITIVE | DRW_STATE_MULTIPLY;
+
+ DRWState cur_state = DRW_STATE_WRITE_COLOR;
+ cur_state |= (use_prepass) ? DRW_STATE_DEPTH_EQUAL : DRW_STATE_DEPTH_LESS;
+ cur_state |= (do_cull) ? DRW_STATE_CULL_BACK : 0;
+
+ switch (ma->blend_method) {
+ case MA_BM_ADD:
+ cur_state |= DRW_STATE_ADDITIVE;
+ break;
+ case MA_BM_MULTIPLY:
+ cur_state |= DRW_STATE_MULTIPLY;
+ break;
+ case MA_BM_BLEND:
+ cur_state |= DRW_STATE_BLEND;
+ break;
+ default:
+ BLI_assert(0);
+ break;
+ }
+
+ /* Disable other blend modes and use the one we want. */
+ DRW_shgroup_state_disable(*shgrp, all_state);
+ DRW_shgroup_state_enable(*shgrp, cur_state);
+
+ /* Depth prepass */
+ if (use_prepass) {
+ *shgrp_depth = DRW_shgroup_create(e_data.default_prepass_clip_sh, psl->transparent_pass);
+
+ cur_state = DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS;
+ cur_state |= (do_cull) ? DRW_STATE_CULL_BACK : 0;
+
+ DRW_shgroup_state_disable(*shgrp_depth, all_state);
+ DRW_shgroup_state_enable(*shgrp_depth, cur_state);
+ }
+}
+
+void EEVEE_materials_cache_populate(EEVEE_Data *vedata, EEVEE_ViewLayerData *sldata, Object *ob)
+{
+ EEVEE_PassList *psl = ((EEVEE_Data *)vedata)->psl;
+ EEVEE_StorageList *stl = ((EEVEE_Data *)vedata)->stl;
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ Scene *scene = draw_ctx->scene;
+ GHash *material_hash = stl->g_data->material_hash;
+
+ IDProperty *ces_mode_ob = BKE_layer_collection_engine_evaluated_get(ob, COLLECTION_MODE_OBJECT, "");
+ const bool do_cull = BKE_collection_engine_property_value_get_bool(ces_mode_ob, "show_backface_culling");
+ const bool is_active = (ob == draw_ctx->obact);
+ const bool is_sculpt_mode = is_active && (draw_ctx->object_mode & OB_MODE_SCULPT) != 0;
+#if 0
+ const bool is_sculpt_mode_draw = is_sculpt_mode && (draw_ctx->v3d->flag2 & V3D_SHOW_MODE_SHADE_OVERRIDE) == 0;
+#else
+ /* For now just force fully shaded with eevee when supported. */
+ const bool is_sculpt_mode_draw =
+ is_sculpt_mode &&
+ ((ob->sculpt && ob->sculpt->pbvh) && (BKE_pbvh_type(ob->sculpt->pbvh) != PBVH_FACES));
+#endif
+ const bool is_default_mode_shader = is_sculpt_mode;
+
+ /* First get materials for this mesh. */
+ if (ELEM(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT)) {
+ const int materials_len = MAX2(1, (is_sculpt_mode_draw ? 1 : ob->totcol));
+
+ struct DRWShadingGroup **shgrp_array = BLI_array_alloca(shgrp_array, materials_len);
+ struct DRWShadingGroup **shgrp_depth_array = BLI_array_alloca(shgrp_depth_array, materials_len);
+ struct DRWShadingGroup **shgrp_depth_clip_array = BLI_array_alloca(shgrp_depth_clip_array, materials_len);
+
+ struct GPUMaterial **gpumat_array = BLI_array_alloca(gpumat_array, materials_len);
+ struct GPUMaterial **gpumat_depth_array = BLI_array_alloca(gpumat_array, materials_len);
+
+ bool use_flat_nor = false;
+
+ if (is_default_mode_shader) {
+ if (is_sculpt_mode_draw) {
+ use_flat_nor = DRW_object_is_flat_normal(ob);
+ }
+ }
+
+ for (int i = 0; i < materials_len; ++i) {
+ Material *ma;
+
+ if (is_sculpt_mode_draw) {
+ ma = NULL;
+ }
+ else {
+ ma = give_current_material(ob, i + 1);
+ }
+
+ gpumat_array[i] = NULL;
+ gpumat_depth_array[i] = NULL;
+ shgrp_array[i] = NULL;
+ shgrp_depth_array[i] = NULL;
+ shgrp_depth_clip_array[i] = NULL;
+
+ if (ma == NULL)
+ ma = &defmaterial;
+
+ switch (ma->blend_method) {
+ case MA_BM_SOLID:
+ case MA_BM_CLIP:
+ case MA_BM_HASHED:
+ material_opaque(ma, material_hash, sldata, vedata, do_cull, use_flat_nor,
+ &gpumat_array[i], &gpumat_depth_array[i],
+ &shgrp_array[i], &shgrp_depth_array[i], &shgrp_depth_clip_array[i]);
+ break;
+ case MA_BM_ADD:
+ case MA_BM_MULTIPLY:
+ case MA_BM_BLEND:
+ material_transparent(ma, sldata, vedata, do_cull, use_flat_nor,
+ &gpumat_array[i], &shgrp_array[i], &shgrp_depth_array[i]);
+ break;
+ default:
+ BLI_assert(0);
+ break;
+ }
+ }
+
+ if (is_sculpt_mode && is_sculpt_mode_draw == false) {
+ DRW_cache_mesh_sculpt_coords_ensure(ob);
+ }
+
+ /* Only support single volume material for now. */
+ /* XXX We rely on the previously compiled surface shader
+ * to know if the material has a "volume nodetree".
+ */
+ bool use_volume_material = (gpumat_array[0] && GPU_material_use_domain_volume(gpumat_array[0]));
+
+ /* Get per-material split surface */
+ struct Gwn_Batch **mat_geom = DRW_cache_object_surface_material_get(ob, gpumat_array, materials_len);
+ if (mat_geom) {
+ for (int i = 0; i < materials_len; ++i) {
+ Material *ma = give_current_material(ob, i + 1);
+
+ if (ma == NULL)
+ ma = &defmaterial;
+
+ /* Do not render surface if we are rendering a volume object
+ * and do not have a surface closure. */
+ if (use_volume_material &&
+ (gpumat_array[i] && !GPU_material_use_domain_surface(gpumat_array[i])))
+ {
+ continue;
+ }
+
+ /* Shading pass */
+ ADD_SHGROUP_CALL(shgrp_array[i], ob, mat_geom[i]);
+
+ /* Depth Prepass */
+ ADD_SHGROUP_CALL_SAFE(shgrp_depth_array[i], ob, mat_geom[i]);
+ ADD_SHGROUP_CALL_SAFE(shgrp_depth_clip_array[i], ob, mat_geom[i]);
+
+ /* Shadow Pass */
+ if (ma->use_nodes && ma->nodetree && (ma->blend_method != MA_BM_SOLID)) {
+ struct GPUMaterial *gpumat;
+ switch (ma->blend_shadow) {
+ case MA_BS_SOLID:
+ EEVEE_lights_cache_shcaster_add(sldata, psl, mat_geom[i], ob->obmat);
+ break;
+ case MA_BS_CLIP:
+ gpumat = EEVEE_material_mesh_depth_get(scene, ma, false, true);
+ EEVEE_lights_cache_shcaster_material_add(sldata, psl, gpumat, mat_geom[i], ob, ob->obmat, &ma->alpha_threshold);
+ break;
+ case MA_BS_HASHED:
+ gpumat = EEVEE_material_mesh_depth_get(scene, ma, true, true);
+ EEVEE_lights_cache_shcaster_material_add(sldata, psl, gpumat, mat_geom[i], ob, ob->obmat, NULL);
+ break;
+ case MA_BS_NONE:
+ default:
+ break;
+ }
+ }
+ else {
+ EEVEE_lights_cache_shcaster_add(sldata, psl, mat_geom[i], ob->obmat);
+ }
+ }
+ }
+
+ /* Volumetrics */
+ if (((stl->effects->enabled_effects & EFFECT_VOLUMETRIC) != 0) && use_volume_material) {
+ EEVEE_volumes_cache_object_add(sldata, vedata, scene, ob);
+ }
+ }
+
+ if (ob->type == OB_MESH) {
+ if (ob != draw_ctx->scene->obedit) {
+ material_hash = stl->g_data->hair_material_hash;
+
+ for (ModifierData *md = ob->modifiers.first; md; md = md->next) {
+ if (md->type == eModifierType_ParticleSystem) {
+ ParticleSystem *psys = ((ParticleSystemModifierData *)md)->psys;
+
+ if (psys_check_enabled(ob, psys, false)) {
+ ParticleSettings *part = psys->part;
+ int draw_as = (part->draw_as == PART_DRAW_REND) ? part->ren_as : part->draw_as;
+
+ if (draw_as == PART_DRAW_PATH && (psys->pathcache || psys->childcache)) {
+ struct Gwn_Batch *hair_geom = DRW_cache_particles_get_hair(psys, md);
+ DRWShadingGroup *shgrp = NULL;
+ Material *ma = give_current_material(ob, part->omat);
+ static float mat[4][4];
+
+ unit_m4(mat);
+
+ if (ma == NULL) {
+ ma = &defmaterial;
+ }
+
+ float *color_p = &ma->r;
+ float *metal_p = &ma->ray_mirror;
+ float *spec_p = &ma->spec;
+ float *rough_p = &ma->gloss_mir;
+
+ DRW_shgroup_call_add(stl->g_data->depth_shgrp, hair_geom, mat);
+ DRW_shgroup_call_add(stl->g_data->depth_shgrp_clip, hair_geom, mat);
+
+ shgrp = BLI_ghash_lookup(material_hash, (const void *)ma);
+
+ if (shgrp) {
+ DRW_shgroup_call_add(shgrp, hair_geom, mat);
+ }
+ else {
+ if (ma->use_nodes && ma->nodetree) {
+ struct GPUMaterial *gpumat = EEVEE_material_hair_get(scene, ma, sldata->lamps->shadow_method);
+
+ shgrp = DRW_shgroup_material_create(gpumat, psl->material_pass);
+ if (shgrp) {
+ add_standard_uniforms(shgrp, sldata, vedata, NULL, NULL, false, false);
+
+ BLI_ghash_insert(material_hash, ma, shgrp);
+
+ DRW_shgroup_call_add(shgrp, hair_geom, mat);
+ }
+ else {
+ /* Shader failed : pink color */
+ static float col[3] = {1.0f, 0.0f, 1.0f};
+ static float half = 0.5f;
+
+ color_p = col;
+ metal_p = spec_p = rough_p = &half;
+ }
+ }
+
+ /* Fallback to default shader */
+ if (shgrp == NULL) {
+ bool use_ssr = ((stl->effects->enabled_effects & EFFECT_SSR) != 0);
+ shgrp = EEVEE_default_shading_group_get(sldata, vedata, true, false, use_ssr,
+ sldata->lamps->shadow_method);
+ DRW_shgroup_uniform_vec3(shgrp, "basecol", color_p, 1);
+ DRW_shgroup_uniform_float(shgrp, "metallic", metal_p, 1);
+ DRW_shgroup_uniform_float(shgrp, "specular", spec_p, 1);
+ DRW_shgroup_uniform_float(shgrp, "roughness", rough_p, 1);
+
+ BLI_ghash_insert(material_hash, ma, shgrp);
+
+ DRW_shgroup_call_add(shgrp, hair_geom, mat);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+void EEVEE_materials_cache_finish(EEVEE_Data *vedata)
+{
+ EEVEE_StorageList *stl = ((EEVEE_Data *)vedata)->stl;
+
+ BLI_ghash_free(stl->g_data->material_hash, NULL, MEM_freeN);
+ BLI_ghash_free(stl->g_data->hair_material_hash, NULL, NULL);
+}
+
+void EEVEE_materials_free(void)
+{
+ for (int i = 0; i < VAR_MAT_MAX; ++i) {
+ DRW_SHADER_FREE_SAFE(e_data.default_lit[i]);
+ }
+ MEM_SAFE_FREE(e_data.frag_shader_lib);
+ MEM_SAFE_FREE(e_data.volume_shader_lib);
+ DRW_SHADER_FREE_SAFE(e_data.default_prepass_sh);
+ DRW_SHADER_FREE_SAFE(e_data.default_prepass_clip_sh);
+ DRW_SHADER_FREE_SAFE(e_data.default_background);
+ DRW_SHADER_FREE_SAFE(e_data.update_noise_sh);
+ DRW_TEXTURE_FREE_SAFE(e_data.util_tex);
+ DRW_TEXTURE_FREE_SAFE(e_data.noise_tex);
+}
+
+void EEVEE_draw_default_passes(EEVEE_PassList *psl)
+{
+ for (int i = 0; i < VAR_MAT_MAX; ++i) {
+ if (psl->default_pass[i]) {
+ DRW_draw_pass(psl->default_pass[i]);
+ }
+ }
+}
diff --git a/source/blender/draw/engines/eevee/eevee_mist.c b/source/blender/draw/engines/eevee/eevee_mist.c
new file mode 100644
index 00000000000..ba9157a7f91
--- /dev/null
+++ b/source/blender/draw/engines/eevee/eevee_mist.c
@@ -0,0 +1,135 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file eevee_mist.c
+ * \ingroup draw_engine
+ *
+ * Implementation of Blender Mist pass.
+ * IMPORTANT: This is a "post process" of the Z depth so it will lack any transparent objects.
+ */
+
+#include "DRW_engine.h"
+#include "DRW_render.h"
+
+#include "DNA_world_types.h"
+
+#include "BLI_string_utils.h"
+
+#include "eevee_private.h"
+
+extern char datatoc_common_uniforms_lib_glsl[];
+extern char datatoc_bsdf_common_lib_glsl[];
+extern char datatoc_effect_mist_frag_glsl[];
+
+static struct {
+ struct GPUShader *mist_sh;
+} e_data = {NULL}; /* Engine data */
+
+void EEVEE_mist_output_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
+{
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ EEVEE_FramebufferList *fbl = vedata->fbl;
+ DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
+ EEVEE_TextureList *txl = vedata->txl;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_PassList *psl = vedata->psl;
+ EEVEE_PrivateData *g_data = stl->g_data;
+ Scene *scene = draw_ctx->scene;
+
+ const float *viewport_size = DRW_viewport_size_get();
+ float clear[4] = {0.0f, 0.0f, 0.0f, 0.0f};
+
+ if (e_data.mist_sh == NULL) {
+ char *frag_str = BLI_string_joinN(
+ datatoc_common_uniforms_lib_glsl,
+ datatoc_bsdf_common_lib_glsl,
+ datatoc_effect_mist_frag_glsl);
+
+ e_data.mist_sh = DRW_shader_create_fullscreen(frag_str, "#define FIRST_PASS\n");
+
+ MEM_freeN(frag_str);
+ }
+
+ /* Create FrameBuffer. */
+ DRWFboTexture tex_data = {&txl->mist_accum, DRW_TEX_R_32, 0}; /* Should be enough precision for many samples. */
+ DRW_framebuffer_init(&fbl->mist_accum_fb, &draw_engine_eevee_type, (int)viewport_size[0], (int)viewport_size[1],
+ &tex_data, 1);
+
+ /* Clear texture. */
+ DRW_framebuffer_bind(fbl->mist_accum_fb);
+ DRW_framebuffer_clear(true, false, false, clear, 0.0f);
+
+ /* Mist settings. */
+ if (scene && scene->world) {
+ g_data->mist_start = scene->world->miststa;
+ g_data->mist_inv_dist = (scene->world->mistdist > 0.0f) ? 1.0f / scene->world->mistdist : 0.0f;
+
+ switch (scene->world->mistype) {
+ case WO_MIST_QUADRATIC:
+ g_data->mist_falloff = 2.0f;
+ break;
+ case WO_MIST_LINEAR:
+ g_data->mist_falloff = 1.0f;
+ break;
+ case WO_MIST_INVERSE_QUADRATIC:
+ g_data->mist_falloff = 0.5f;
+ break;
+ }
+ }
+ else {
+ float near = -sldata->common_data.view_vecs[0][2];
+ float range = sldata->common_data.view_vecs[1][2];
+ /* Fallback */
+ g_data->mist_start = near;
+ g_data->mist_inv_dist = 1.0f / fabsf(range);
+ g_data->mist_falloff = 1.0f;
+ }
+
+ /* XXX ??!! WHY? If not it does not match cycles. */
+ g_data->mist_falloff *= 0.5f;
+
+ /* Create Pass and shgroup. */
+ psl->mist_accum_ps = DRW_pass_create("Mist Accum", DRW_STATE_WRITE_COLOR | DRW_STATE_ADDITIVE);
+ DRWShadingGroup *grp = DRW_shgroup_create(e_data.mist_sh, psl->mist_accum_ps);
+ DRW_shgroup_uniform_buffer(grp, "depthBuffer", &dtxl->depth);
+ DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
+ DRW_shgroup_uniform_vec3(grp, "mistSettings", &g_data->mist_start, 1);
+ DRW_shgroup_call_add(grp, DRW_cache_fullscreen_quad_get(), NULL);
+}
+
+void EEVEE_mist_output_accumulate(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
+{
+ EEVEE_FramebufferList *fbl = vedata->fbl;
+ EEVEE_PassList *psl = vedata->psl;
+
+ if (fbl->mist_accum_fb != NULL) {
+ DRW_framebuffer_bind(fbl->mist_accum_fb);
+ DRW_draw_pass(psl->mist_accum_ps);
+
+ /* Restore */
+ DRW_framebuffer_bind(fbl->main);
+ }
+}
+
+void EEVEE_mist_free(void)
+{
+ DRW_SHADER_FREE_SAFE(e_data.mist_sh);
+}
diff --git a/source/blender/draw/engines/eevee/eevee_motion_blur.c b/source/blender/draw/engines/eevee/eevee_motion_blur.c
new file mode 100644
index 00000000000..53fff5de50e
--- /dev/null
+++ b/source/blender/draw/engines/eevee/eevee_motion_blur.c
@@ -0,0 +1,229 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file eevee_motion_blur.c
+ * \ingroup draw_engine
+ *
+ * Gather all screen space effects technique such as Bloom, Motion Blur, DoF, SSAO, SSR, ...
+ */
+
+#include "DRW_render.h"
+
+#include "BKE_global.h" /* for G.debug_value */
+#include "BKE_camera.h"
+#include "BKE_object.h"
+#include "BKE_animsys.h"
+#include "BKE_screen.h"
+
+#include "DNA_anim_types.h"
+#include "DNA_camera_types.h"
+#include "DNA_screen_types.h"
+
+#include "ED_screen.h"
+
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_query.h"
+
+#include "eevee_private.h"
+#include "GPU_texture.h"
+
+static struct {
+ /* Motion Blur */
+ struct GPUShader *motion_blur_sh;
+} e_data = {NULL}; /* Engine data */
+
+extern char datatoc_effect_motion_blur_frag_glsl[];
+
+static void eevee_motion_blur_camera_get_matrix_at_time(
+ Scene *scene,
+ ARegion *ar, RegionView3D *rv3d, View3D *v3d,
+ Object *camera,
+ float time,
+ float r_mat[4][4])
+{
+ EvaluationContext eval_ctx;
+ float obmat[4][4];
+
+ /* HACK */
+ Object cam_cpy; Camera camdata_cpy;
+ memcpy(&cam_cpy, camera, sizeof(cam_cpy));
+ memcpy(&camdata_cpy, camera->data, sizeof(camdata_cpy));
+ cam_cpy.data = &camdata_cpy;
+
+ /* NOTE: Mode corresponds to old usage of eval_ctx from viewport (which was
+ * actually coming from bmain). It was always DAG_EVAL_VIEWPORT. For F12
+ * render this should be DAG_EVAL_RENDER, but the whole hack is to be
+ * reconsidered first anyway.
+ */
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ DEG_evaluation_context_init_from_scene(
+ &eval_ctx,
+ scene,
+ draw_ctx->view_layer,
+ draw_ctx->engine_type,
+ draw_ctx->object_mode,
+ DAG_EVAL_VIEWPORT);
+ eval_ctx.ctime = time;
+
+ /* Past matrix */
+ /* FIXME : This is a temporal solution that does not take care of parent animations */
+ /* Recalc Anim manualy */
+ BKE_animsys_evaluate_animdata(scene, &cam_cpy.id, cam_cpy.adt, time, ADT_RECALC_ALL);
+ BKE_animsys_evaluate_animdata(scene, &camdata_cpy.id, camdata_cpy.adt, time, ADT_RECALC_ALL);
+ BKE_object_where_is_calc_time(&eval_ctx, scene, &cam_cpy, time);
+
+ /* Compute winmat */
+ CameraParams params;
+ BKE_camera_params_init(&params);
+
+ if (v3d != NULL) {
+ BKE_camera_params_from_view3d(&params, draw_ctx->depsgraph, v3d, rv3d);
+ BKE_camera_params_compute_viewplane(&params, ar->winx, ar->winy, 1.0f, 1.0f);
+ }
+ else {
+ BKE_camera_params_from_object(&params, &cam_cpy);
+ BKE_camera_params_compute_viewplane(&params, scene->r.xsch, scene->r.ysch, scene->r.xasp, scene->r.yasp);
+ }
+
+ BKE_camera_params_compute_matrix(&params);
+
+ /* FIXME Should be done per view (MULTIVIEW) */
+ normalize_m4_m4(obmat, cam_cpy.obmat);
+ invert_m4(obmat);
+ mul_m4_m4m4(r_mat, params.winmat, obmat);
+}
+
+static void eevee_create_shader_motion_blur(void)
+{
+ e_data.motion_blur_sh = DRW_shader_create_fullscreen(datatoc_effect_motion_blur_frag_glsl, NULL);
+}
+
+int EEVEE_motion_blur_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata, Object *camera)
+{
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_EffectsInfo *effects = stl->effects;
+
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ ViewLayer *view_layer = draw_ctx->view_layer;
+ Scene *scene = draw_ctx->scene;
+ View3D *v3d = draw_ctx->v3d;
+ RegionView3D *rv3d = draw_ctx->rv3d;
+ ARegion *ar = draw_ctx->ar;
+ IDProperty *props = BKE_view_layer_engine_evaluated_get(view_layer,
+ COLLECTION_MODE_NONE,
+ RE_engine_id_BLENDER_EEVEE);
+
+ if (BKE_collection_engine_property_value_get_bool(props, "motion_blur_enable")) {
+ /* Update Motion Blur Matrices */
+ if (camera) {
+ float persmat[4][4];
+ float ctime = BKE_scene_frame_get(scene);
+ float delta = BKE_collection_engine_property_value_get_float(props, "motion_blur_shutter");
+ Object *camera_object = DEG_get_evaluated_object(draw_ctx->depsgraph, camera);
+
+ /* Current matrix */
+ eevee_motion_blur_camera_get_matrix_at_time(scene,
+ ar, rv3d, v3d,
+ camera_object,
+ ctime,
+ effects->current_ndc_to_world);
+
+ /* Viewport Matrix */
+ DRW_viewport_matrix_get(persmat, DRW_MAT_PERS);
+
+ /* Only continue if camera is not being keyed */
+ if (DRW_state_is_image_render() ||
+ compare_m4m4(persmat, effects->current_ndc_to_world, 0.0001f))
+ {
+ /* Past matrix */
+ eevee_motion_blur_camera_get_matrix_at_time(scene,
+ ar, rv3d, v3d,
+ camera_object,
+ ctime - delta,
+ effects->past_world_to_ndc);
+
+#if 0 /* for future high quality blur */
+ /* Future matrix */
+ eevee_motion_blur_camera_get_matrix_at_time(scene,
+ ar, rv3d, v3d,
+ camera_object,
+ ctime + delta,
+ effects->future_world_to_ndc);
+#endif
+ invert_m4(effects->current_ndc_to_world);
+
+ effects->motion_blur_samples = BKE_collection_engine_property_value_get_int(props,
+ "motion_blur_samples");
+
+ if (!e_data.motion_blur_sh) {
+ eevee_create_shader_motion_blur();
+ }
+
+ return EFFECT_MOTION_BLUR | EFFECT_POST_BUFFER;
+ }
+ }
+ }
+
+ return 0;
+}
+
+void EEVEE_motion_blur_cache_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
+{
+ EEVEE_PassList *psl = vedata->psl;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_EffectsInfo *effects = stl->effects;
+ DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
+
+ struct Gwn_Batch *quad = DRW_cache_fullscreen_quad_get();
+
+ if ((effects->enabled_effects & EFFECT_MOTION_BLUR) != 0) {
+ psl->motion_blur = DRW_pass_create("Motion Blur", DRW_STATE_WRITE_COLOR);
+
+ DRWShadingGroup *grp = DRW_shgroup_create(e_data.motion_blur_sh, psl->motion_blur);
+ DRW_shgroup_uniform_int(grp, "samples", &effects->motion_blur_samples, 1);
+ DRW_shgroup_uniform_mat4(grp, "currInvViewProjMatrix", (float *)effects->current_ndc_to_world);
+ DRW_shgroup_uniform_mat4(grp, "pastViewProjMatrix", (float *)effects->past_world_to_ndc);
+ DRW_shgroup_uniform_buffer(grp, "colorBuffer", &effects->source_buffer);
+ DRW_shgroup_uniform_buffer(grp, "depthBuffer", &dtxl->depth);
+ DRW_shgroup_call_add(grp, quad, NULL);
+ }
+}
+
+void EEVEE_motion_blur_draw(EEVEE_Data *vedata)
+{
+ EEVEE_PassList *psl = vedata->psl;
+ EEVEE_TextureList *txl = vedata->txl;
+ EEVEE_FramebufferList *fbl = vedata->fbl;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_EffectsInfo *effects = stl->effects;
+
+ /* Motion Blur */
+ if ((effects->enabled_effects & EFFECT_MOTION_BLUR) != 0) {
+ DRW_framebuffer_bind(effects->target_buffer);
+ DRW_draw_pass(psl->motion_blur);
+ SWAP_BUFFERS();
+ }
+}
+
+void EEVEE_motion_blur_free(void)
+{
+ DRW_SHADER_FREE_SAFE(e_data.motion_blur_sh);
+}
diff --git a/source/blender/draw/engines/eevee/eevee_occlusion.c b/source/blender/draw/engines/eevee/eevee_occlusion.c
new file mode 100644
index 00000000000..944003d7d1f
--- /dev/null
+++ b/source/blender/draw/engines/eevee/eevee_occlusion.c
@@ -0,0 +1,298 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file eevee_occlusion.c
+ * \ingroup draw_engine
+ *
+ * Implementation of the screen space Ground Truth Ambient Occlusion.
+ */
+
+#include "DRW_render.h"
+
+#include "BLI_string_utils.h"
+
+#include "DNA_anim_types.h"
+
+#include "BKE_global.h" /* for G.debug_value */
+
+#include "eevee_private.h"
+
+static struct {
+ /* Ground Truth Ambient Occlusion */
+ struct GPUShader *gtao_sh;
+ struct GPUShader *gtao_layer_sh;
+ struct GPUShader *gtao_debug_sh;
+ struct GPUTexture *src_depth;
+} e_data = {NULL}; /* Engine data */
+
+extern char datatoc_ambient_occlusion_lib_glsl[];
+extern char datatoc_common_uniforms_lib_glsl[];
+extern char datatoc_bsdf_common_lib_glsl[];
+extern char datatoc_effect_gtao_frag_glsl[];
+
+static void eevee_create_shader_occlusion(void)
+{
+ char *frag_str = BLI_string_joinN(
+ datatoc_common_uniforms_lib_glsl,
+ datatoc_bsdf_common_lib_glsl,
+ datatoc_ambient_occlusion_lib_glsl,
+ datatoc_effect_gtao_frag_glsl);
+
+ e_data.gtao_sh = DRW_shader_create_fullscreen(frag_str, NULL);
+ e_data.gtao_layer_sh = DRW_shader_create_fullscreen(frag_str, "#define LAYERED_DEPTH\n");
+ e_data.gtao_debug_sh = DRW_shader_create_fullscreen(frag_str, "#define DEBUG_AO\n");
+
+ MEM_freeN(frag_str);
+}
+
+int EEVEE_occlusion_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
+{
+ EEVEE_CommonUniformBuffer *common_data = &sldata->common_data;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_FramebufferList *fbl = vedata->fbl;
+ EEVEE_TextureList *txl = vedata->txl;
+
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ ViewLayer *view_layer = draw_ctx->view_layer;
+ IDProperty *props = BKE_view_layer_engine_evaluated_get(view_layer,
+ COLLECTION_MODE_NONE,
+ RE_engine_id_BLENDER_EEVEE);
+
+ if (BKE_collection_engine_property_value_get_bool(props, "gtao_enable")) {
+ const float *viewport_size = DRW_viewport_size_get();
+
+ /* Shaders */
+ if (!e_data.gtao_sh) {
+ eevee_create_shader_occlusion();
+ }
+
+ common_data->ao_dist = BKE_collection_engine_property_value_get_float(props, "gtao_distance");
+ common_data->ao_factor = BKE_collection_engine_property_value_get_float(props, "gtao_factor");
+ common_data->ao_quality = 1.0f - BKE_collection_engine_property_value_get_float(props, "gtao_quality");
+
+ common_data->ao_settings = 1.0; /* USE_AO */
+ if (BKE_collection_engine_property_value_get_bool(props, "gtao_use_bent_normals")) {
+ common_data->ao_settings += 2.0; /* USE_BENT_NORMAL */
+ }
+ if (BKE_collection_engine_property_value_get_bool(props, "gtao_denoise")) {
+ common_data->ao_settings += 4.0; /* USE_DENOISE */
+ }
+
+ common_data->ao_bounce_fac = (float)BKE_collection_engine_property_value_get_bool(props, "gtao_bounce");
+
+ DRWFboTexture tex = {&txl->gtao_horizons, DRW_TEX_RGBA_8, 0};
+
+ DRW_framebuffer_init(&fbl->gtao_fb, &draw_engine_eevee_type,
+ (int)viewport_size[0], (int)viewport_size[1],
+ &tex, 1);
+
+ if (G.debug_value == 6) {
+ DRWFboTexture tex_debug = {&stl->g_data->gtao_horizons_debug, DRW_TEX_RGBA_8, DRW_TEX_TEMP};
+
+ DRW_framebuffer_init(&fbl->gtao_debug_fb, &draw_engine_eevee_type,
+ (int)viewport_size[0], (int)viewport_size[1],
+ &tex_debug, 1);
+ }
+
+ return EFFECT_GTAO | EFFECT_NORMAL_BUFFER;
+ }
+
+ /* Cleanup */
+ DRW_TEXTURE_FREE_SAFE(txl->gtao_horizons);
+ DRW_FRAMEBUFFER_FREE_SAFE(fbl->gtao_fb);
+ common_data->ao_settings = 0.0f;
+
+ return 0;
+}
+
+void EEVEE_occlusion_output_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
+{
+ EEVEE_FramebufferList *fbl = vedata->fbl;
+ EEVEE_TextureList *txl = vedata->txl;
+ EEVEE_PassList *psl = vedata->psl;
+ const float *viewport_size = DRW_viewport_size_get();
+
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ ViewLayer *view_layer = draw_ctx->view_layer;
+ IDProperty *props = BKE_view_layer_engine_evaluated_get(view_layer, COLLECTION_MODE_NONE, RE_engine_id_BLENDER_EEVEE);
+
+ if (BKE_collection_engine_property_value_get_bool(props, "gtao_enable")) {
+ DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
+ float clear[4] = {0.0f, 0.0f, 0.0f, 0.0f};
+
+ DRWFboTexture tex_data = {&txl->ao_accum, DRW_TEX_R_32, 0};
+ DRW_framebuffer_init(&fbl->ao_accum_fb, &draw_engine_eevee_type, (int)viewport_size[0], (int)viewport_size[1],
+ &tex_data, 1);
+
+ /* Clear texture. */
+ DRW_framebuffer_bind(fbl->ao_accum_fb);
+ DRW_framebuffer_clear(true, false, false, clear, 0.0f);
+
+ /* Accumulation pass */
+ DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_ADDITIVE;
+ psl->ao_accum_ps = DRW_pass_create("AO Accum", state);
+ DRWShadingGroup *grp = DRW_shgroup_create(e_data.gtao_debug_sh, psl->ao_accum_ps);
+ DRW_shgroup_uniform_texture(grp, "utilTex", EEVEE_materials_get_util_tex());
+ DRW_shgroup_uniform_buffer(grp, "maxzBuffer", &txl->maxzbuffer);
+ DRW_shgroup_uniform_buffer(grp, "depthBuffer", &dtxl->depth);
+ DRW_shgroup_uniform_buffer(grp, "normalBuffer", &txl->ssr_normal_input);
+ DRW_shgroup_uniform_buffer(grp, "horizonBuffer", &txl->gtao_horizons);
+ DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
+ DRW_shgroup_call_add(grp, DRW_cache_fullscreen_quad_get(), NULL);
+ }
+ else {
+ /* Cleanup to release memory */
+ DRW_TEXTURE_FREE_SAFE(txl->ao_accum);
+ DRW_FRAMEBUFFER_FREE_SAFE(fbl->ao_accum_fb);
+ }
+}
+
+void EEVEE_occlusion_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
+{
+ EEVEE_PassList *psl = vedata->psl;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_TextureList *txl = vedata->txl;
+ EEVEE_EffectsInfo *effects = stl->effects;
+ DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
+
+ struct Gwn_Batch *quad = DRW_cache_fullscreen_quad_get();
+
+ if ((effects->enabled_effects & EFFECT_GTAO) != 0) {
+ /** Occlusion algorithm overview
+ *
+ * We separate the computation into 2 steps.
+ *
+ * - First we scan the neighborhood pixels to find the maximum horizon angle.
+ * We save this angle in a RG8 array texture.
+ *
+ * - Then we use this angle to compute occlusion with the shading normal at
+ * the shading stage. This let us do correct shadowing for each diffuse / specular
+ * lobe present in the shader using the correct normal.
+ **/
+ psl->ao_horizon_search = DRW_pass_create("GTAO Horizon Search", DRW_STATE_WRITE_COLOR);
+ DRWShadingGroup *grp = DRW_shgroup_create(e_data.gtao_sh, psl->ao_horizon_search);
+ DRW_shgroup_uniform_texture(grp, "utilTex", EEVEE_materials_get_util_tex());
+ DRW_shgroup_uniform_buffer(grp, "maxzBuffer", &txl->maxzbuffer);
+ DRW_shgroup_uniform_buffer(grp, "depthBuffer", &effects->ao_src_depth);
+ DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
+ DRW_shgroup_call_add(grp, quad, NULL);
+
+ psl->ao_horizon_search_layer = DRW_pass_create("GTAO Horizon Search Layer", DRW_STATE_WRITE_COLOR);
+ grp = DRW_shgroup_create(e_data.gtao_layer_sh, psl->ao_horizon_search_layer);
+ DRW_shgroup_uniform_texture(grp, "utilTex", EEVEE_materials_get_util_tex());
+ DRW_shgroup_uniform_buffer(grp, "maxzBuffer", &txl->maxzbuffer);
+ DRW_shgroup_uniform_buffer(grp, "depthBufferLayered", &effects->ao_src_depth);
+ DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
+ DRW_shgroup_uniform_int(grp, "layer", &stl->effects->ao_depth_layer, 1);
+ DRW_shgroup_call_add(grp, quad, NULL);
+
+ if (G.debug_value == 6) {
+ psl->ao_horizon_debug = DRW_pass_create("GTAO Horizon Debug", DRW_STATE_WRITE_COLOR);
+ grp = DRW_shgroup_create(e_data.gtao_debug_sh, psl->ao_horizon_debug);
+ DRW_shgroup_uniform_texture(grp, "utilTex", EEVEE_materials_get_util_tex());
+ DRW_shgroup_uniform_buffer(grp, "maxzBuffer", &txl->maxzbuffer);
+ DRW_shgroup_uniform_buffer(grp, "depthBuffer", &dtxl->depth);
+ DRW_shgroup_uniform_buffer(grp, "normalBuffer", &txl->ssr_normal_input);
+ DRW_shgroup_uniform_buffer(grp, "horizonBuffer", &txl->gtao_horizons);
+ DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
+ DRW_shgroup_call_add(grp, quad, NULL);
+ }
+ }
+}
+
+void EEVEE_occlusion_compute(
+ EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata, struct GPUTexture *depth_src, int layer)
+{
+ EEVEE_PassList *psl = vedata->psl;
+ EEVEE_FramebufferList *fbl = vedata->fbl;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_EffectsInfo *effects = stl->effects;
+
+ if ((effects->enabled_effects & EFFECT_GTAO) != 0) {
+ DRW_stats_group_start("GTAO Horizon Scan");
+ effects->ao_src_depth = depth_src;
+ effects->ao_depth_layer = layer;
+
+ DRW_framebuffer_bind(fbl->gtao_fb);
+
+ if (layer >= 0) {
+ DRW_draw_pass(psl->ao_horizon_search_layer);
+ }
+ else {
+ DRW_draw_pass(psl->ao_horizon_search);
+ }
+
+ /* Restore */
+ DRW_framebuffer_bind(fbl->main);
+
+ DRW_stats_group_end();
+ }
+}
+
+void EEVEE_occlusion_draw_debug(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
+{
+ EEVEE_PassList *psl = vedata->psl;
+ EEVEE_FramebufferList *fbl = vedata->fbl;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_EffectsInfo *effects = stl->effects;
+
+ if (((effects->enabled_effects & EFFECT_GTAO) != 0) && (G.debug_value == 6)) {
+ DRW_stats_group_start("GTAO Debug");
+
+ DRW_framebuffer_texture_attach(fbl->gtao_debug_fb, stl->g_data->gtao_horizons_debug, 0, 0);
+ DRW_framebuffer_bind(fbl->gtao_debug_fb);
+
+ DRW_draw_pass(psl->ao_horizon_debug);
+
+ /* Restore */
+ DRW_framebuffer_texture_detach(stl->g_data->gtao_horizons_debug);
+ DRW_framebuffer_bind(fbl->main);
+
+ DRW_stats_group_end();
+ }
+}
+
+void EEVEE_occlusion_output_accumulate(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
+{
+ EEVEE_FramebufferList *fbl = vedata->fbl;
+ EEVEE_PassList *psl = vedata->psl;
+
+ if (fbl->ao_accum_fb != NULL) {
+ DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
+
+ /* Update the min_max/horizon buffers so the refracion materials appear in it. */
+ EEVEE_create_minmax_buffer(vedata, dtxl->depth, -1);
+ EEVEE_occlusion_compute(sldata, vedata, dtxl->depth, -1);
+
+ DRW_framebuffer_bind(fbl->ao_accum_fb);
+ DRW_draw_pass(psl->ao_accum_ps);
+
+ /* Restore */
+ DRW_framebuffer_bind(fbl->main);
+ }
+}
+
+void EEVEE_occlusion_free(void)
+{
+ DRW_SHADER_FREE_SAFE(e_data.gtao_sh);
+ DRW_SHADER_FREE_SAFE(e_data.gtao_layer_sh);
+ DRW_SHADER_FREE_SAFE(e_data.gtao_debug_sh);
+}
diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h
new file mode 100644
index 00000000000..6159126d71e
--- /dev/null
+++ b/source/blender/draw/engines/eevee/eevee_private.h
@@ -0,0 +1,934 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file eevee_private.h
+ * \ingroup DNA
+ */
+
+#ifndef __EEVEE_PRIVATE_H__
+#define __EEVEE_PRIVATE_H__
+
+struct Object;
+struct EEVEE_BoundSphere;
+struct EEVEE_ShadowCasterBuffer;
+
+extern struct DrawEngineType draw_engine_eevee_type;
+
+/* Minimum UBO is 16384 bytes */
+#define MAX_PROBE 128 /* TODO : find size by dividing UBO max size by probe data size */
+#define MAX_GRID 64 /* TODO : find size by dividing UBO max size by grid data size */
+#define MAX_PLANAR 16 /* TODO : find size by dividing UBO max size by grid data size */
+#define MAX_LIGHT 128 /* TODO : find size by dividing UBO max size by light data size */
+#define MAX_CASCADE_NUM 4
+#define MAX_SHADOW 256 /* TODO : Make this depends on GL_MAX_ARRAY_TEXTURE_LAYERS */
+#define MAX_SHADOW_CASCADE 8
+#define MAX_SHADOW_CUBE (MAX_SHADOW - MAX_CASCADE_NUM * MAX_SHADOW_CASCADE)
+#define MAX_BLOOM_STEP 16
+
+/* Only define one of these. */
+// #define IRRADIANCE_SH_L2
+// #define IRRADIANCE_CUBEMAP
+#define IRRADIANCE_HL2
+
+#if defined(IRRADIANCE_SH_L2)
+# define SHADER_IRRADIANCE "#define IRRADIANCE_SH_L2\n"
+#elif defined(IRRADIANCE_CUBEMAP)
+# define SHADER_IRRADIANCE "#define IRRADIANCE_CUBEMAP\n"
+#elif defined(IRRADIANCE_HL2)
+# define SHADER_IRRADIANCE "#define IRRADIANCE_HL2\n"
+#endif
+
+#define SHADER_DEFINES \
+ "#define EEVEE_ENGINE\n" \
+ "#define MAX_PROBE " STRINGIFY(MAX_PROBE) "\n" \
+ "#define MAX_GRID " STRINGIFY(MAX_GRID) "\n" \
+ "#define MAX_PLANAR " STRINGIFY(MAX_PLANAR) "\n" \
+ "#define MAX_LIGHT " STRINGIFY(MAX_LIGHT) "\n" \
+ "#define MAX_SHADOW " STRINGIFY(MAX_SHADOW) "\n" \
+ "#define MAX_SHADOW_CUBE " STRINGIFY(MAX_SHADOW_CUBE) "\n" \
+ "#define MAX_SHADOW_CASCADE " STRINGIFY(MAX_SHADOW_CASCADE) "\n" \
+ "#define MAX_CASCADE_NUM " STRINGIFY(MAX_CASCADE_NUM) "\n" \
+ SHADER_IRRADIANCE
+
+#define SWAP_DOUBLE_BUFFERS() { \
+ if (effects->swap_double_buffer) { \
+ SWAP(struct GPUFrameBuffer *, fbl->main, fbl->double_buffer); \
+ SWAP(GPUTexture *, txl->color, txl->color_double_buffer); \
+ effects->swap_double_buffer = false; \
+ } \
+} ((void)0)
+
+#define SWAP_BUFFERS() { \
+ if (effects->target_buffer != fbl->main) { \
+ SWAP_DOUBLE_BUFFERS(); \
+ effects->source_buffer = txl->color_post; \
+ effects->target_buffer = fbl->main; \
+ } \
+ else { \
+ SWAP_DOUBLE_BUFFERS(); \
+ effects->source_buffer = txl->color; \
+ effects->target_buffer = fbl->effect_fb; \
+ } \
+} ((void)0)
+
+/* World shader variations */
+enum {
+ VAR_WORLD_BACKGROUND = 0,
+ VAR_WORLD_PROBE = 1,
+ VAR_WORLD_VOLUME = 2,
+};
+
+/* Material shader variations */
+enum {
+ VAR_MAT_MESH = (1 << 0),
+ VAR_MAT_PROBE = (1 << 1),
+ VAR_MAT_HAIR = (1 << 2),
+ VAR_MAT_FLAT = (1 << 3),
+ VAR_MAT_BLEND = (1 << 4),
+ VAR_MAT_VSM = (1 << 5),
+ VAR_MAT_ESM = (1 << 6),
+ /* Max number of variation */
+ /* IMPORTANT : Leave it last and set
+ * it's value accordingly. */
+ VAR_MAT_MAX = (1 << 7),
+ /* These are options that are not counted in VAR_MAT_MAX
+ * because they are not cumulative with the others above. */
+ VAR_MAT_CLIP = (1 << 8),
+ VAR_MAT_HASH = (1 << 9),
+ VAR_MAT_MULT = (1 << 10),
+ VAR_MAT_SHADOW = (1 << 11),
+ VAR_MAT_REFRACT = (1 << 12),
+ VAR_MAT_VOLUME = (1 << 13),
+ VAR_MAT_SSS = (1 << 14),
+ VAR_MAT_TRANSLUC = (1 << 15),
+ VAR_MAT_SSSALBED = (1 << 16),
+};
+
+/* Shadow Technique */
+enum {
+ SHADOW_ESM = 1,
+ SHADOW_VSM = 2,
+ SHADOW_METHOD_MAX = 3,
+};
+
+typedef struct EEVEE_BoundSphere {
+ float center[3], radius;
+} EEVEE_BoundSphere;
+
+typedef struct EEVEE_BoundBox {
+ float center[3], halfdim[3];
+} EEVEE_BoundBox;
+
+typedef struct EEVEE_PassList {
+ /* Shadows */
+ struct DRWPass *shadow_pass;
+ struct DRWPass *shadow_cube_pass;
+ struct DRWPass *shadow_cube_copy_pass;
+ struct DRWPass *shadow_cube_store_pass;
+ struct DRWPass *shadow_cascade_pass;
+ struct DRWPass *shadow_cascade_copy_pass;
+ struct DRWPass *shadow_cascade_store_pass;
+
+ /* Probes */
+ struct DRWPass *probe_background;
+ struct DRWPass *probe_glossy_compute;
+ struct DRWPass *probe_diffuse_compute;
+ struct DRWPass *probe_visibility_compute;
+ struct DRWPass *probe_grid_fill;
+ struct DRWPass *probe_display;
+ struct DRWPass *probe_planar_downsample_ps;
+
+ /* Effects */
+ struct DRWPass *ao_horizon_search;
+ struct DRWPass *ao_horizon_search_layer;
+ struct DRWPass *ao_horizon_debug;
+ struct DRWPass *ao_accum_ps;
+ struct DRWPass *mist_accum_ps;
+ struct DRWPass *motion_blur;
+ struct DRWPass *bloom_blit;
+ struct DRWPass *bloom_downsample_first;
+ struct DRWPass *bloom_downsample;
+ struct DRWPass *bloom_upsample;
+ struct DRWPass *bloom_resolve;
+ struct DRWPass *dof_down;
+ struct DRWPass *dof_scatter;
+ struct DRWPass *dof_resolve;
+ struct DRWPass *volumetric_world_ps;
+ struct DRWPass *volumetric_objects_ps;
+ struct DRWPass *volumetric_scatter_ps;
+ struct DRWPass *volumetric_integration_ps;
+ struct DRWPass *volumetric_resolve_ps;
+ struct DRWPass *ssr_raytrace;
+ struct DRWPass *ssr_resolve;
+ struct DRWPass *sss_blur_ps;
+ struct DRWPass *sss_resolve_ps;
+ struct DRWPass *sss_accum_ps;
+ struct DRWPass *color_downsample_ps;
+ struct DRWPass *color_downsample_cube_ps;
+ struct DRWPass *taa_resolve;
+
+ /* HiZ */
+ struct DRWPass *minz_downlevel_ps;
+ struct DRWPass *maxz_downlevel_ps;
+ struct DRWPass *minz_downdepth_ps;
+ struct DRWPass *maxz_downdepth_ps;
+ struct DRWPass *minz_downdepth_layer_ps;
+ struct DRWPass *maxz_downdepth_layer_ps;
+ struct DRWPass *minz_copydepth_ps;
+ struct DRWPass *maxz_copydepth_ps;
+
+ struct DRWPass *depth_pass;
+ struct DRWPass *depth_pass_cull;
+ struct DRWPass *depth_pass_clip;
+ struct DRWPass *depth_pass_clip_cull;
+ struct DRWPass *refract_depth_pass;
+ struct DRWPass *refract_depth_pass_cull;
+ struct DRWPass *refract_depth_pass_clip;
+ struct DRWPass *refract_depth_pass_clip_cull;
+ struct DRWPass *default_pass[VAR_MAT_MAX];
+ struct DRWPass *sss_pass;
+ struct DRWPass *material_pass;
+ struct DRWPass *refract_pass;
+ struct DRWPass *transparent_pass;
+ struct DRWPass *background_pass;
+ struct DRWPass *update_noise_pass;
+} EEVEE_PassList;
+
+typedef struct EEVEE_FramebufferList {
+ /* Effects */
+ struct GPUFrameBuffer *gtao_fb;
+ struct GPUFrameBuffer *gtao_debug_fb;
+ struct GPUFrameBuffer *downsample_fb;
+ struct GPUFrameBuffer *effect_fb;
+ struct GPUFrameBuffer *bloom_blit_fb;
+ struct GPUFrameBuffer *bloom_down_fb[MAX_BLOOM_STEP];
+ struct GPUFrameBuffer *bloom_accum_fb[MAX_BLOOM_STEP - 1];
+ struct GPUFrameBuffer *sss_blur_fb;
+ struct GPUFrameBuffer *sss_clear_fb;
+ struct GPUFrameBuffer *sss_accum_fb;
+ struct GPUFrameBuffer *dof_down_fb;
+ struct GPUFrameBuffer *dof_scatter_far_fb;
+ struct GPUFrameBuffer *dof_scatter_near_fb;
+ struct GPUFrameBuffer *volumetric_fb;
+ struct GPUFrameBuffer *volumetric_scat_fb;
+ struct GPUFrameBuffer *volumetric_integ_fb;
+ struct GPUFrameBuffer *screen_tracing_fb;
+ struct GPUFrameBuffer *refract_fb;
+ struct GPUFrameBuffer *mist_accum_fb;
+ struct GPUFrameBuffer *ao_accum_fb;
+
+ struct GPUFrameBuffer *update_noise_fb;
+
+ struct GPUFrameBuffer *planarref_fb;
+
+ struct GPUFrameBuffer *main;
+ struct GPUFrameBuffer *double_buffer;
+ struct GPUFrameBuffer *depth_double_buffer_fb;
+} EEVEE_FramebufferList;
+
+typedef struct EEVEE_TextureList {
+ /* Effects */
+ struct GPUTexture *color_post; /* R16_G16_B16 */
+ struct GPUTexture *dof_down_near; /* R16_G16_B16_A16 */
+ struct GPUTexture *dof_down_far; /* R16_G16_B16_A16 */
+ struct GPUTexture *dof_coc; /* R16_G16 */
+ struct GPUTexture *dof_near_blur; /* R16_G16_B16_A16 */
+ struct GPUTexture *dof_far_blur; /* R16_G16_B16_A16 */
+ struct GPUTexture *bloom_blit; /* R16_G16_B16 */
+ struct GPUTexture *bloom_downsample[MAX_BLOOM_STEP]; /* R16_G16_B16 */
+ struct GPUTexture *bloom_upsample[MAX_BLOOM_STEP - 1]; /* R16_G16_B16 */
+ struct GPUTexture *mist_accum;
+ struct GPUTexture *ao_accum;
+ struct GPUTexture *sss_dir_accum;
+ struct GPUTexture *sss_col_accum;
+ struct GPUTexture *ssr_normal_input;
+ struct GPUTexture *ssr_specrough_input;
+ struct GPUTexture *ssr_hit_output;
+ struct GPUTexture *refract_color;
+
+ struct GPUTexture *volume_prop_scattering;
+ struct GPUTexture *volume_prop_extinction;
+ struct GPUTexture *volume_prop_emission;
+ struct GPUTexture *volume_prop_phase;
+ struct GPUTexture *volume_scatter;
+ struct GPUTexture *volume_transmittance;
+ struct GPUTexture *volume_scatter_history;
+ struct GPUTexture *volume_transmittance_history;
+
+ struct GPUTexture *planar_pool;
+ struct GPUTexture *planar_depth;
+
+ struct GPUTexture *gtao_horizons;
+
+ struct GPUTexture *sss_data;
+ struct GPUTexture *sss_albedo;
+ struct GPUTexture *sss_blur;
+ struct GPUTexture *sss_stencil;
+
+ struct GPUTexture *maxzbuffer;
+
+ struct GPUTexture *color; /* R16_G16_B16 */
+ struct GPUTexture *color_double_buffer;
+ struct GPUTexture *depth_double_buffer;
+} EEVEE_TextureList;
+
+typedef struct EEVEE_StorageList {
+ /* Effects */
+ struct EEVEE_EffectsInfo *effects;
+
+ struct EEVEE_PrivateData *g_data;
+} EEVEE_StorageList;
+
+/* ************ LIGHT UBO ************* */
+typedef struct EEVEE_Light {
+ float position[3], dist;
+ float color[3], spec;
+ float spotsize, spotblend, radius, shadowid;
+ float rightvec[3], sizex;
+ float upvec[3], sizey;
+ float forwardvec[3], lamptype;
+} EEVEE_Light;
+
+typedef struct EEVEE_Shadow {
+ float near, far, bias, exp;
+ float shadow_start, data_start, multi_shadow_count, shadow_blur;
+ float contact_dist, contact_bias, contact_spread, contact_thickness;
+} EEVEE_Shadow;
+
+typedef struct EEVEE_ShadowCube {
+ float position[3], pad;
+} EEVEE_ShadowCube;
+
+typedef struct EEVEE_ShadowCascade {
+ float shadowmat[MAX_CASCADE_NUM][4][4]; /* World->Lamp->NDC->Tex : used for sampling the shadow map. */
+ float split_start[4];
+ float split_end[4];
+} EEVEE_ShadowCascade;
+
+typedef struct EEVEE_ShadowRender {
+ float shadowmat[6][4][4]; /* World->Lamp->NDC : used to render the shadow map. 6 frustum for cubemap shadow */
+ float viewmat[6][4][4]; /* World->Lamp : used to render the shadow map. 6 viewmat for cubemap shadow */
+ float position[3], pad;
+ float cube_texel_size;
+ float stored_texel_size;
+ float clip_near;
+ float clip_far;
+ int shadow_samples_ct;
+ float shadow_inv_samples_ct;
+} EEVEE_ShadowRender;
+
+/* This is just a really long bitflag with special function to access it. */
+#define MAX_LIGHTBITS_FIELDS (MAX_LIGHT / 8)
+typedef struct EEVEE_LightBits {
+ unsigned char fields[MAX_LIGHTBITS_FIELDS];
+} EEVEE_LightBits;
+
+typedef struct EEVEE_ShadowCaster {
+ struct EEVEE_LightBits bits;
+ struct EEVEE_BoundBox bbox;
+} EEVEE_ShadowCaster;
+
+typedef struct EEVEE_ShadowCasterBuffer {
+ struct EEVEE_ShadowCaster *shadow_casters;
+ char *flags;
+ unsigned int alloc_count;
+ unsigned int count;
+} EEVEE_ShadowCasterBuffer;
+
+/* ************ LIGHT DATA ************* */
+typedef struct EEVEE_LampsInfo {
+ int num_light, cache_num_light;
+ int num_layer, cache_num_layer;
+ int gpu_cube_ct, gpu_cascade_ct, gpu_shadow_ct;
+ int cpu_cube_ct, cpu_cascade_ct;
+ int update_flag;
+ int shadow_size, shadow_method;
+ bool shadow_high_bitdepth;
+ int shadow_cube_target_size;
+ int current_shadow_cascade;
+ int current_shadow_face;
+ float filter_size;
+ /* List of lights in the scene. */
+ /* XXX This is fragile, can get out of sync quickly. */
+ struct Object *light_ref[MAX_LIGHT];
+ struct Object *shadow_cube_ref[MAX_SHADOW_CUBE];
+ struct Object *shadow_cascade_ref[MAX_SHADOW_CASCADE];
+ /* UBO Storage : data used by UBO */
+ struct EEVEE_Light light_data[MAX_LIGHT];
+ struct EEVEE_ShadowRender shadow_render_data;
+ struct EEVEE_Shadow shadow_data[MAX_SHADOW];
+ struct EEVEE_ShadowCube shadow_cube_data[MAX_SHADOW_CUBE];
+ struct EEVEE_ShadowCascade shadow_cascade_data[MAX_SHADOW_CASCADE];
+ /* Lights tracking */
+ int new_shadow_id[MAX_LIGHT]; /* To be able to convert old bitfield to new bitfield */
+ struct EEVEE_BoundSphere shadow_bounds[MAX_LIGHT]; /* Tighly packed light bounds */
+ /* Pointers only. */
+ struct EEVEE_ShadowCasterBuffer *shcaster_frontbuffer;
+ struct EEVEE_ShadowCasterBuffer *shcaster_backbuffer;
+} EEVEE_LampsInfo;
+
+/* EEVEE_LampsInfo->shadow_casters_flag */
+enum {
+ SHADOW_CASTER_PRUNED = (1 << 0),
+ SHADOW_CASTER_UPDATED = (1 << 1),
+};
+
+/* EEVEE_LampsInfo->update_flag */
+enum {
+ LIGHT_UPDATE_SHADOW_CUBE = (1 << 0),
+};
+
+/* ************ PROBE UBO ************* */
+typedef struct EEVEE_LightProbe {
+ float position[3], parallax_type;
+ float attenuation_fac;
+ float attenuation_type;
+ float pad3[2];
+ float attenuationmat[4][4];
+ float parallaxmat[4][4];
+} EEVEE_LightProbe;
+
+typedef struct EEVEE_LightGrid {
+ float mat[4][4];
+ int resolution[3], offset;
+ float corner[3], attenuation_scale;
+ float increment_x[3], attenuation_bias; /* world space vector between 2 opposite cells */
+ float increment_y[3], level_bias;
+ float increment_z[3], pad4;
+ float visibility_bias, visibility_bleed, visibility_range, pad5;
+} EEVEE_LightGrid;
+
+typedef struct EEVEE_PlanarReflection {
+ float plane_equation[4];
+ float clip_vec_x[3], attenuation_scale;
+ float clip_vec_y[3], attenuation_bias;
+ float clip_edge_x_pos, clip_edge_x_neg;
+ float clip_edge_y_pos, clip_edge_y_neg;
+ float facing_scale, facing_bias, pad[2];
+ float reflectionmat[4][4];
+} EEVEE_PlanarReflection;
+
+/* ************ PROBE DATA ************* */
+typedef struct EEVEE_LightProbesInfo {
+ int num_cube, cache_num_cube;
+ int num_grid, cache_num_grid;
+ int num_planar, cache_num_planar;
+ int total_irradiance_samples; /* Total for all grids */
+ int cache_irradiance_size[3];
+ int update_flag;
+ int updated_bounce;
+ int num_bounce;
+ int cubemap_res;
+ int target_size;
+ int grid_initialized;
+ struct World *prev_world;
+ bool do_cube_update;
+ /* For rendering probes */
+ float probemat[6][4][4];
+ int layer;
+ float texel_size;
+ float padding_size;
+ float samples_ct;
+ float invsamples_ct;
+ float near_clip;
+ float far_clip;
+ float roughness;
+ float lodfactor;
+ float lod_rt_max, lod_cube_max, lod_planar_max;
+ float visibility_range;
+ float visibility_blur;
+ float intensity_fac;
+ int shres;
+ /* List of probes in the scene. */
+ /* XXX This is fragile, can get out of sync quickly. */
+ struct Object *probes_cube_ref[MAX_PROBE];
+ struct Object *probes_grid_ref[MAX_GRID];
+ struct Object *probes_planar_ref[MAX_PLANAR];
+ /* UBO Storage : data used by UBO */
+ struct EEVEE_LightProbe probe_data[MAX_PROBE];
+ struct EEVEE_LightGrid grid_data[MAX_GRID];
+ struct EEVEE_PlanarReflection planar_data[MAX_PLANAR];
+} EEVEE_LightProbesInfo;
+
+/* EEVEE_LightProbesInfo->update_flag */
+enum {
+ PROBE_UPDATE_CUBE = (1 << 0),
+ PROBE_UPDATE_GRID = (1 << 1),
+ PROBE_UPDATE_ALL = 0xFFFFFF,
+};
+
+/* ************ EFFECTS DATA ************* */
+typedef struct EEVEE_EffectsInfo {
+ int enabled_effects;
+ bool swap_double_buffer;
+ /* SSSS */
+ int sss_sample_count;
+ bool sss_separate_albedo;
+ /* Volumetrics */
+ int volume_current_sample;
+ /* SSR */
+ bool reflection_trace_full;
+ int ssr_neighbor_ofs;
+ int ssr_halfres_ofs[2];
+ /* Temporal Anti Aliasing */
+ int taa_current_sample;
+ int taa_render_sample;
+ int taa_total_sample;
+ float taa_alpha;
+ bool prev_drw_support;
+ float prev_drw_persmat[4][4];
+ float overide_persmat[4][4];
+ float overide_persinv[4][4];
+ float overide_winmat[4][4];
+ float overide_wininv[4][4];
+ /* Ambient Occlusion */
+ int ao_depth_layer;
+ struct GPUTexture *ao_src_depth; /* pointer copy */
+ /* Motion Blur */
+ float current_ndc_to_world[4][4];
+ float past_world_to_ndc[4][4];
+ int motion_blur_samples;
+ /* Depth Of Field */
+ float dof_near_far[2];
+ float dof_params[3];
+ float dof_bokeh[4];
+ float dof_layer_select[2];
+ int dof_target_size[2];
+ /* Bloom */
+ int bloom_iteration_ct;
+ float source_texel_size[2];
+ float blit_texel_size[2];
+ float downsamp_texel_size[MAX_BLOOM_STEP][2];
+ float bloom_color[3];
+ float bloom_clamp;
+ float bloom_sample_scale;
+ float bloom_curve_threshold[4];
+ float unf_source_texel_size[2];
+ struct GPUTexture *unf_source_buffer; /* pointer copy */
+ struct GPUTexture *unf_base_buffer; /* pointer copy */
+ /* Not alloced, just a copy of a *GPUtexture in EEVEE_TextureList. */
+ struct GPUTexture *source_buffer; /* latest updated texture */
+ struct GPUFrameBuffer *target_buffer; /* next target to render to */
+ struct GPUTexture *final_tx; /* Final color to transform to display color space. */
+ struct GPUFrameBuffer *final_fb; /* Framebuffer with final_tx as attachement. */
+} EEVEE_EffectsInfo;
+
+enum {
+ EFFECT_MOTION_BLUR = (1 << 0),
+ EFFECT_BLOOM = (1 << 1),
+ EFFECT_DOF = (1 << 2),
+ EFFECT_VOLUMETRIC = (1 << 3),
+ EFFECT_SSR = (1 << 4),
+ EFFECT_DOUBLE_BUFFER = (1 << 5), /* Not really an effect but a feature */
+ EFFECT_REFRACT = (1 << 6),
+ EFFECT_GTAO = (1 << 7),
+ EFFECT_TAA = (1 << 8),
+ EFFECT_POST_BUFFER = (1 << 9), /* Not really an effect but a feature */
+ EFFECT_NORMAL_BUFFER = (1 << 10), /* Not really an effect but a feature */
+ EFFECT_SSS = (1 << 11),
+};
+
+/* ***************** COMMON DATA **************** */
+
+/* Common uniform buffer containing all "constant" data over the whole drawing pipeline. */
+/* !! CAUTION !!
+ * - [i]vec3 need to be paded to [i]vec4 (even in ubo declaration).
+ * - Make sure that [i]vec4 start at a multiple of 16 bytes.
+ * - Arrays of vec2/vec3 are padded as arrays of vec4.
+ * - sizeof(bool) == sizeof(int) in GLSL so use int in C */
+typedef struct EEVEE_CommonUniformBuffer {
+ float prev_persmat[4][4]; /* mat4 */
+ float view_vecs[2][4]; /* vec4[2] */
+ float mip_ratio[10][4]; /* vec2[10] */
+ /* Ambient Occlusion */
+ /* -- 16 byte aligned -- */
+ float ao_dist, pad1, ao_factor, pad2; /* vec4 */
+ float ao_offset, ao_bounce_fac, ao_quality, ao_settings; /* vec4 */
+ /* Volumetric */
+ /* -- 16 byte aligned -- */
+ int vol_tex_size[3], pad3; /* ivec3 */
+ float vol_depth_param[3], pad4; /* vec3 */
+ float vol_inv_tex_size[3], pad5; /* vec3 */
+ float vol_jitter[3], pad6; /* vec3 */
+ float vol_coord_scale[2], pad7[2]; /* vec2 */
+ /* -- 16 byte aligned -- */
+ float vol_history_alpha; /* float */
+ float vol_light_clamp; /* float */
+ float vol_shadow_steps; /* float */
+ int vol_use_lights; /* bool */
+ /* Screen Space Reflections */
+ /* -- 16 byte aligned -- */
+ float ssr_quality, ssr_thickness, ssr_pixelsize[2]; /* vec4 */
+ float ssr_border_fac; /* float */
+ float ssr_max_roughness; /* float */
+ float ssr_firefly_fac; /* float */
+ float ssr_brdf_bias; /* float */
+ int ssr_toggle; /* bool */
+ /* SubSurface Scattering */
+ float sss_jitter_threshold; /* float */
+ int sss_toggle; /* bool */
+ /* Specular */
+ int spec_toggle; /* bool */
+ /* Lamps */
+ int la_num_light; /* int */
+ /* Probes */
+ int prb_num_planar; /* int */
+ int prb_num_render_cube; /* int */
+ int prb_num_render_grid; /* int */
+ int prb_irradiance_vis_size; /* int */
+ float prb_lod_cube_max; /* float */
+ float prb_lod_planar_max; /* float */
+} EEVEE_CommonUniformBuffer;
+
+/* ************** SCENE LAYER DATA ************** */
+typedef struct EEVEE_ViewLayerData {
+ /* Lamps */
+ struct EEVEE_LampsInfo *lamps;
+
+ struct GPUUniformBuffer *light_ubo;
+ struct GPUUniformBuffer *shadow_ubo;
+ struct GPUUniformBuffer *shadow_render_ubo;
+ struct GPUUniformBuffer *shadow_samples_ubo;
+
+ struct GPUFrameBuffer *shadow_target_fb;
+ struct GPUFrameBuffer *shadow_store_fb;
+
+ struct GPUTexture *shadow_cube_target;
+ struct GPUTexture *shadow_cube_blur;
+ struct GPUTexture *shadow_cascade_target;
+ struct GPUTexture *shadow_cascade_blur;
+ struct GPUTexture *shadow_pool;
+
+ struct EEVEE_ShadowCasterBuffer shcasters_buffers[2];
+
+ /* Probes */
+ struct EEVEE_LightProbesInfo *probes;
+
+ struct GPUUniformBuffer *probe_ubo;
+ struct GPUUniformBuffer *grid_ubo;
+ struct GPUUniformBuffer *planar_ubo;
+
+ struct GPUFrameBuffer *probe_fb;
+ struct GPUFrameBuffer *probe_filter_fb;
+
+ struct GPUTexture *probe_rt;
+ struct GPUTexture *probe_depth_rt;
+ struct GPUTexture *probe_pool;
+ struct GPUTexture *irradiance_pool;
+ struct GPUTexture *irradiance_rt;
+
+ /* Common Uniform Buffer */
+ struct EEVEE_CommonUniformBuffer common_data;
+ struct GPUUniformBuffer *common_ubo;
+} EEVEE_ViewLayerData;
+
+/* ************ OBJECT DATA ************ */
+typedef struct EEVEE_LightData {
+ short light_id, shadow_id;
+} EEVEE_LightData;
+
+typedef struct EEVEE_ShadowCubeData {
+ short light_id, shadow_id, cube_id, layer_id;
+} EEVEE_ShadowCubeData;
+
+typedef struct EEVEE_ShadowCascadeData {
+ short light_id, shadow_id, cascade_id, layer_id;
+ float viewprojmat[MAX_CASCADE_NUM][4][4]; /* World->Lamp->NDC : used for rendering the shadow map. */
+ float radius[MAX_CASCADE_NUM];
+} EEVEE_ShadowCascadeData;
+
+/* Theses are the structs stored inside Objects.
+ * It works with even if the object is in multiple layers
+ * because we don't get the same "Object *" for each layer. */
+typedef struct EEVEE_LampEngineData {
+ ObjectEngineData engine_data;
+
+ bool need_update;
+ /* This needs to be out of the union to avoid undefined behaviour. */
+ short prev_cube_shadow_id;
+ union {
+ struct EEVEE_LightData ld;
+ struct EEVEE_ShadowCubeData scd;
+ struct EEVEE_ShadowCascadeData scad;
+ } data;
+} EEVEE_LampEngineData;
+
+typedef struct EEVEE_LightProbeEngineData {
+ ObjectEngineData engine_data;
+
+ /* NOTE: need_full_update is set by dependency graph when the probe or it's
+ * object is updated. This triggers full probe update, including it's
+ * "progressive" GI refresh.
+ *
+ * need_update is always set to truth when need_full_update is tagged, but
+ * might also be forced to be kept truth during GI refresh stages.
+ *
+ * TODO(sergey): Is there a way to avoid two flags here, or at least make
+ * it more clear what's going on here?
+ */
+ bool need_full_update;
+ bool need_update;
+
+ bool ready_to_shade;
+ int updated_cells;
+ int updated_lvl;
+ int num_cell;
+ int max_lvl;
+ int probe_id; /* Only used for display data */
+ float probe_size; /* Only used for display data */
+ /* For planar reflection rendering */
+ float viewmat[4][4];
+ float persmat[4][4];
+ float planer_eq_offset[4];
+ struct ListBase captured_object_list;
+} EEVEE_LightProbeEngineData;
+
+typedef struct EEVEE_ObjectEngineData {
+ ObjectEngineData engine_data;
+
+ bool need_update;
+ unsigned int shadow_caster_id;
+} EEVEE_ObjectEngineData;
+
+/* *********************************** */
+
+typedef struct EEVEE_Data {
+ void *engine_type;
+ EEVEE_FramebufferList *fbl;
+ EEVEE_TextureList *txl;
+ EEVEE_PassList *psl;
+ EEVEE_StorageList *stl;
+} EEVEE_Data;
+
+typedef struct EEVEE_PrivateData {
+ struct DRWShadingGroup *shadow_shgrp;
+ struct DRWShadingGroup *depth_shgrp;
+ struct DRWShadingGroup *depth_shgrp_cull;
+ struct DRWShadingGroup *depth_shgrp_clip;
+ struct DRWShadingGroup *depth_shgrp_clip_cull;
+ struct DRWShadingGroup *refract_depth_shgrp;
+ struct DRWShadingGroup *refract_depth_shgrp_cull;
+ struct DRWShadingGroup *refract_depth_shgrp_clip;
+ struct DRWShadingGroup *refract_depth_shgrp_clip_cull;
+ struct DRWShadingGroup *cube_display_shgrp;
+ struct DRWShadingGroup *planar_display_shgrp;
+ struct DRWShadingGroup *planar_downsample;
+ struct GHash *material_hash;
+ struct GHash *hair_material_hash;
+ struct GPUTexture *minzbuffer;
+ struct GPUTexture *ssr_pdf_output;
+ struct GPUTexture *gtao_horizons_debug;
+ float background_alpha; /* TODO find a better place for this. */
+ /* For planar probes */
+ float planar_texel_size[2];
+ /* For double buffering */
+ bool view_updated;
+ bool valid_double_buffer;
+ /* Render Matrices */
+ float persmat[4][4], persinv[4][4];
+ float viewmat[4][4], viewinv[4][4];
+ float winmat[4][4], wininv[4][4];
+ /* Mist Settings */
+ float mist_start, mist_inv_dist, mist_falloff;
+} EEVEE_PrivateData; /* Transient data */
+
+/* eevee_data.c */
+EEVEE_ViewLayerData *EEVEE_view_layer_data_get(void);
+EEVEE_ViewLayerData *EEVEE_view_layer_data_ensure(void);
+EEVEE_ObjectEngineData *EEVEE_object_data_get(Object *ob);
+EEVEE_ObjectEngineData *EEVEE_object_data_ensure(Object *ob);
+EEVEE_LightProbeEngineData *EEVEE_lightprobe_data_get(Object *ob);
+EEVEE_LightProbeEngineData *EEVEE_lightprobe_data_ensure(Object *ob);
+EEVEE_LampEngineData *EEVEE_lamp_data_get(Object *ob);
+EEVEE_LampEngineData *EEVEE_lamp_data_ensure(Object *ob);
+
+/* eevee_materials.c */
+struct GPUTexture *EEVEE_materials_get_util_tex(void); /* XXX */
+void EEVEE_materials_init(EEVEE_ViewLayerData *sldata, EEVEE_StorageList *stl, EEVEE_FramebufferList *fbl);
+void EEVEE_materials_cache_init(EEVEE_Data *vedata);
+void EEVEE_materials_cache_populate(EEVEE_Data *vedata, EEVEE_ViewLayerData *sldata, Object *ob);
+void EEVEE_materials_cache_finish(EEVEE_Data *vedata);
+struct GPUMaterial *EEVEE_material_world_lightprobe_get(struct Scene *scene, struct World *wo);
+struct GPUMaterial *EEVEE_material_world_background_get(struct Scene *scene, struct World *wo);
+struct GPUMaterial *EEVEE_material_world_volume_get(struct Scene *scene, struct World *wo);
+struct GPUMaterial *EEVEE_material_mesh_get(
+ struct Scene *scene, Material *ma, EEVEE_Data *vedata,
+ bool use_blend, bool use_multiply, bool use_refract, bool use_sss, bool use_translucency, int shadow_method);
+struct GPUMaterial *EEVEE_material_mesh_volume_get(struct Scene *scene, Material *ma);
+struct GPUMaterial *EEVEE_material_mesh_depth_get(struct Scene *scene, Material *ma, bool use_hashed_alpha, bool is_shadow);
+struct GPUMaterial *EEVEE_material_hair_get(struct Scene *scene, Material *ma, int shadow_method);
+void EEVEE_materials_free(void);
+void EEVEE_draw_default_passes(EEVEE_PassList *psl);
+void EEVEE_update_noise(EEVEE_PassList *psl, EEVEE_FramebufferList *fbl, const double offsets[3]);
+
+/* eevee_lights.c */
+void EEVEE_lights_init(EEVEE_ViewLayerData *sldata);
+void EEVEE_lights_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_PassList *psl);
+void EEVEE_lights_cache_add(EEVEE_ViewLayerData *sldata, struct Object *ob);
+void EEVEE_lights_cache_shcaster_add(
+ EEVEE_ViewLayerData *sldata, EEVEE_PassList *psl, struct Gwn_Batch *geom, float (*obmat)[4]);
+void EEVEE_lights_cache_shcaster_material_add(
+ EEVEE_ViewLayerData *sldata, EEVEE_PassList *psl,
+ struct GPUMaterial *gpumat, struct Gwn_Batch *geom, struct Object *ob,
+ float (*obmat)[4], float *alpha_threshold);
+void EEVEE_lights_cache_shcaster_object_add(EEVEE_ViewLayerData *sldata, struct Object *ob);
+void EEVEE_lights_cache_finish(EEVEE_ViewLayerData *sldata);
+void EEVEE_lights_update(EEVEE_ViewLayerData *sldata);
+void EEVEE_draw_shadows(EEVEE_ViewLayerData *sldata, EEVEE_PassList *psl);
+void EEVEE_lights_free(void);
+
+/* eevee_lightprobes.c */
+bool EEVEE_lightprobes_all_probes_ready(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_lightprobes_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_lightprobes_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_lightprobes_cache_add(EEVEE_ViewLayerData *sldata, Object *ob);
+void EEVEE_lightprobes_cache_finish(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_lightprobes_refresh(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_lightprobes_refresh_planar(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_lightprobes_free(void);
+
+/* eevee_depth_of_field.c */
+int EEVEE_depth_of_field_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, Object *camera);
+void EEVEE_depth_of_field_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_depth_of_field_draw(EEVEE_Data *vedata);
+void EEVEE_depth_of_field_free(void);
+
+/* eevee_bloom.c */
+int EEVEE_bloom_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_bloom_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_bloom_draw(EEVEE_Data *vedata);
+void EEVEE_bloom_free(void);
+
+/* eevee_occlusion.c */
+int EEVEE_occlusion_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_occlusion_output_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_occlusion_output_accumulate(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_occlusion_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_occlusion_compute(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, struct GPUTexture *depth_src, int layer);
+void EEVEE_occlusion_draw_debug(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_occlusion_free(void);
+
+/* eevee_screen_raytrace.c */
+int EEVEE_screen_raytrace_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_screen_raytrace_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_refraction_compute(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_reflection_compute(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_screen_raytrace_free(void);
+
+/* eevee_subsurface.c */
+int EEVEE_subsurface_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_subsurface_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_subsurface_output_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_subsurface_add_pass(
+ EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, unsigned int sss_id, struct GPUUniformBuffer *sss_profile);
+void EEVEE_subsurface_data_render(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_subsurface_compute(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_subsurface_output_accumulate(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_subsurface_free(void);
+
+/* eevee_motion_blur.c */
+int EEVEE_motion_blur_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, Object *camera);
+void EEVEE_motion_blur_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_motion_blur_draw(EEVEE_Data *vedata);
+void EEVEE_motion_blur_free(void);
+
+/* eevee_mist.c */
+void EEVEE_mist_output_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_mist_output_accumulate(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);;
+void EEVEE_mist_free(void);
+
+/* eevee_temporal_sampling.c */
+int EEVEE_temporal_sampling_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_temporal_sampling_matrices_calc(
+ EEVEE_EffectsInfo *effects, float viewmat[4][4], float persmat[4][4], const double ht_point[2]);
+void EEVEE_temporal_sampling_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_temporal_sampling_draw(EEVEE_Data *vedata);
+void EEVEE_temporal_sampling_free(void);
+
+/* eevee_volumes.c */
+int EEVEE_volumes_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_volumes_set_jitter(EEVEE_ViewLayerData *sldata, unsigned int current_sample);
+void EEVEE_volumes_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_volumes_cache_object_add(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, struct Scene *scene, Object *ob);
+void EEVEE_volumes_compute(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_volumes_resolve(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_volumes_free_smoke_textures(void);
+void EEVEE_volumes_free(void);
+
+/* eevee_effects.c */
+void EEVEE_effects_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, Object *camera);
+void EEVEE_effects_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_create_minmax_buffer(EEVEE_Data *vedata, struct GPUTexture *depth_src, int layer);
+void EEVEE_downsample_buffer(EEVEE_Data *vedata, struct GPUFrameBuffer *fb_src, struct GPUTexture *texture_src, int level);
+void EEVEE_downsample_cube_buffer(EEVEE_Data *vedata, struct GPUFrameBuffer *fb_src, struct GPUTexture *texture_src, int level);
+void EEVEE_effects_do_gtao(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_draw_effects(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_effects_free(void);
+
+/* eevee_render.c */
+void EEVEE_render_init(EEVEE_Data *vedata, struct RenderEngine *engine, struct Depsgraph *depsgraph);
+void EEVEE_render_cache(void *vedata, struct Object *ob, struct RenderEngine *engine, struct Depsgraph *depsgraph);
+void EEVEE_render_draw(EEVEE_Data *vedata, struct RenderEngine *engine, struct Depsgraph *depsgraph);
+void EEVEE_render_update_passes(struct RenderEngine *engine, struct Scene *scene, struct ViewLayer *view_layer);
+
+/* Shadow Matrix */
+static const float texcomat[4][4] = { /* From NDC to TexCo */
+ {0.5f, 0.0f, 0.0f, 0.0f},
+ {0.0f, 0.5f, 0.0f, 0.0f},
+ {0.0f, 0.0f, 0.5f, 0.0f},
+ {0.5f, 0.5f, 0.5f, 1.0f}
+};
+
+/* Cubemap Matrices */
+static const float cubefacemat[6][4][4] = {
+ /* Pos X */
+ {{0.0f, 0.0f, -1.0f, 0.0f},
+ {0.0f, -1.0f, 0.0f, 0.0f},
+ {-1.0f, 0.0f, 0.0f, 0.0f},
+ {0.0f, 0.0f, 0.0f, 1.0f}},
+ /* Neg X */
+ {{0.0f, 0.0f, 1.0f, 0.0f},
+ {0.0f, -1.0f, 0.0f, 0.0f},
+ {1.0f, 0.0f, 0.0f, 0.0f},
+ {0.0f, 0.0f, 0.0f, 1.0f}},
+ /* Pos Y */
+ {{1.0f, 0.0f, 0.0f, 0.0f},
+ {0.0f, 0.0f, -1.0f, 0.0f},
+ {0.0f, 1.0f, 0.0f, 0.0f},
+ {0.0f, 0.0f, 0.0f, 1.0f}},
+ /* Neg Y */
+ {{1.0f, 0.0f, 0.0f, 0.0f},
+ {0.0f, 0.0f, 1.0f, 0.0f},
+ {0.0f, -1.0f, 0.0f, 0.0f},
+ {0.0f, 0.0f, 0.0f, 1.0f}},
+ /* Pos Z */
+ {{1.0f, 0.0f, 0.0f, 0.0f},
+ {0.0f, -1.0f, 0.0f, 0.0f},
+ {0.0f, 0.0f, -1.0f, 0.0f},
+ {0.0f, 0.0f, 0.0f, 1.0f}},
+ /* Neg Z */
+ {{-1.0f, 0.0f, 0.0f, 0.0f},
+ {0.0f, -1.0f, 0.0f, 0.0f},
+ {0.0f, 0.0f, 1.0f, 0.0f},
+ {0.0f, 0.0f, 0.0f, 1.0f}},
+};
+
+#endif /* __EEVEE_PRIVATE_H__ */
diff --git a/source/blender/draw/engines/eevee/eevee_render.c b/source/blender/draw/engines/eevee/eevee_render.c
new file mode 100644
index 00000000000..33c8e2602d4
--- /dev/null
+++ b/source/blender/draw/engines/eevee/eevee_render.c
@@ -0,0 +1,525 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file eevee_render.c
+ * \ingroup draw_engine
+ */
+
+/**
+ * Render functions for final render outputs.
+ */
+
+#include "DRW_engine.h"
+#include "DRW_render.h"
+
+#include "DNA_node_types.h"
+
+#include "BLI_rand.h"
+
+#include "DEG_depsgraph_query.h"
+
+#include "GPU_framebuffer.h"
+#include "GPU_glew.h"
+
+#include "RE_pipeline.h"
+
+#include "eevee_private.h"
+
+void EEVEE_render_init(EEVEE_Data *ved, RenderEngine *engine, struct Depsgraph *depsgraph)
+{
+ EEVEE_Data *vedata = (EEVEE_Data *)ved;
+ EEVEE_PassList *psl = vedata->psl;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_TextureList *txl = vedata->txl;
+ EEVEE_FramebufferList *fbl = vedata->fbl;
+ EEVEE_ViewLayerData *sldata = EEVEE_view_layer_data_ensure();
+ Scene *scene = DEG_get_evaluated_scene(depsgraph);
+ const float *viewport_size = DRW_viewport_size_get();
+
+ /* Init default FB and render targets:
+ * In render mode the default framebuffer is not generated
+ * because there is no viewport. So we need to manually create it or
+ * not use it. For code clarity we just allocate it make use of it. */
+ DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
+ DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
+
+ /* NOTE : use 32 bit format for precision in render mode. */
+ DRWFboTexture dtex = {&dtxl->depth, DRW_TEX_DEPTH_24_STENCIL_8, 0};
+ DRW_framebuffer_init(&dfbl->default_fb, &draw_engine_eevee_type,
+ (int)viewport_size[0], (int)viewport_size[1],
+ &dtex, 1);
+
+ DRWFboTexture tex = {&txl->color, DRW_TEX_RGBA_32, DRW_TEX_FILTER | DRW_TEX_MIPMAP};
+ DRW_framebuffer_init(&fbl->main, &draw_engine_eevee_type,
+ (int)viewport_size[0], (int)viewport_size[1],
+ &tex, 1);
+
+ /* Alloc transient data. */
+ if (!stl->g_data) {
+ stl->g_data = MEM_callocN(sizeof(*stl->g_data), __func__);
+ }
+ EEVEE_PrivateData *g_data = stl->g_data;
+ g_data->background_alpha = DRW_state_draw_background() ? 1.0f : 0.0f;
+ g_data->valid_double_buffer = 0;
+
+ /* Alloc common ubo data. */
+ if (sldata->common_ubo == NULL) {
+ sldata->common_ubo = DRW_uniformbuffer_create(sizeof(sldata->common_data), &sldata->common_data);
+ }
+
+ /* Set the pers & view matrix. */
+ struct Object *camera = RE_GetCamera(engine->re);
+ float frame = BKE_scene_frame_get(scene);
+ RE_GetCameraWindow(engine->re, camera, frame, g_data->winmat);
+ RE_GetCameraModelMatrix(engine->re, camera, g_data->viewinv);
+
+ invert_m4_m4(g_data->viewmat, g_data->viewinv);
+ mul_m4_m4m4(g_data->persmat, g_data->winmat, g_data->viewmat);
+ invert_m4_m4(g_data->persinv, g_data->persmat);
+ invert_m4_m4(g_data->wininv, g_data->winmat);
+
+ DRW_viewport_matrix_override_set(g_data->persmat, DRW_MAT_PERS);
+ DRW_viewport_matrix_override_set(g_data->persinv, DRW_MAT_PERSINV);
+ DRW_viewport_matrix_override_set(g_data->winmat, DRW_MAT_WIN);
+ DRW_viewport_matrix_override_set(g_data->wininv, DRW_MAT_WININV);
+ DRW_viewport_matrix_override_set(g_data->viewmat, DRW_MAT_VIEW);
+ DRW_viewport_matrix_override_set(g_data->viewinv, DRW_MAT_VIEWINV);
+
+ /* EEVEE_effects_init needs to go first for TAA */
+ EEVEE_effects_init(sldata, vedata, camera);
+ EEVEE_materials_init(sldata, stl, fbl);
+ EEVEE_lights_init(sldata);
+ EEVEE_lightprobes_init(sldata, vedata);
+
+ /* INIT CACHE */
+ EEVEE_bloom_cache_init(sldata, vedata);
+ EEVEE_depth_of_field_cache_init(sldata, vedata);
+ EEVEE_effects_cache_init(sldata, vedata);
+ EEVEE_lightprobes_cache_init(sldata, vedata);
+ EEVEE_lights_cache_init(sldata, psl);
+ EEVEE_materials_cache_init(vedata);
+ EEVEE_motion_blur_cache_init(sldata, vedata);
+ EEVEE_occlusion_cache_init(sldata, vedata);
+ EEVEE_screen_raytrace_cache_init(sldata, vedata);
+ EEVEE_subsurface_cache_init(sldata, vedata);
+ EEVEE_temporal_sampling_cache_init(sldata, vedata);
+ EEVEE_volumes_cache_init(sldata, vedata);
+}
+
+void EEVEE_render_cache(
+ void *vedata, struct Object *ob,
+ struct RenderEngine *UNUSED(engine), struct Depsgraph *UNUSED(depsgraph))
+{
+ EEVEE_ViewLayerData *sldata = EEVEE_view_layer_data_ensure();
+
+ if (DRW_check_object_visible_within_active_context(ob) == false) {
+ return;
+ }
+
+ if (ELEM(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT)) {
+ EEVEE_materials_cache_populate(vedata, sldata, ob);
+
+ const bool cast_shadow = true;
+
+ if (cast_shadow) {
+ EEVEE_lights_cache_shcaster_object_add(sldata, ob);
+ }
+ }
+ else if (ob->type == OB_LIGHTPROBE) {
+ EEVEE_lightprobes_cache_add(sldata, ob);
+ }
+ else if (ob->type == OB_LAMP) {
+ EEVEE_lights_cache_add(sldata, ob);
+ }
+}
+
+static void eevee_render_result_combined(
+ RenderResult *rr, const char *viewname,
+ EEVEE_Data *vedata, EEVEE_ViewLayerData *UNUSED(sldata))
+{
+ RenderLayer *rl = rr->layers.first;
+ RenderPass *rp = RE_pass_find_by_name(rl, RE_PASSNAME_COMBINED, viewname);
+
+ DRW_framebuffer_bind(vedata->stl->effects->final_fb);
+ DRW_framebuffer_read_data(rr->xof, rr->yof, rr->rectx, rr->recty, 4, 0, rp->rect);
+}
+
+static void eevee_render_result_subsurface(
+ RenderResult *rr, const char *viewname,
+ EEVEE_Data *vedata, EEVEE_ViewLayerData *UNUSED(sldata))
+{
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ ViewLayer *view_layer = draw_ctx->view_layer;
+
+ if (vedata->fbl->sss_accum_fb == NULL) {
+ /* SSS is not enabled. */
+ return;
+ }
+
+ if ((view_layer->passflag & SCE_PASS_SUBSURFACE_COLOR) != 0) {
+ RenderLayer *rl = rr->layers.first;
+ RenderPass *rp = RE_pass_find_by_name(rl, RE_PASSNAME_SUBSURFACE_COLOR, viewname);
+
+ IDProperty *props = BKE_view_layer_engine_evaluated_get(view_layer, COLLECTION_MODE_NONE, RE_engine_id_BLENDER_EEVEE);
+ float render_samples = (float)BKE_collection_engine_property_value_get_int(props, "taa_render_samples");
+
+ DRW_framebuffer_bind(vedata->fbl->sss_accum_fb);
+ DRW_framebuffer_read_data(rr->xof, rr->yof, rr->rectx, rr->recty, 3, 1, rp->rect);
+
+ /* This is the accumulated color. Divide by the number of samples. */
+ for (int i = 0; i < rr->rectx * rr->recty * 3; i++) {
+ rp->rect[i] /= render_samples;
+ }
+ }
+
+ if ((view_layer->passflag & SCE_PASS_SUBSURFACE_DIRECT) != 0) {
+ RenderLayer *rl = rr->layers.first;
+ RenderPass *rp = RE_pass_find_by_name(rl, RE_PASSNAME_SUBSURFACE_DIRECT, viewname);
+
+ IDProperty *props = BKE_view_layer_engine_evaluated_get(view_layer, COLLECTION_MODE_NONE, RE_engine_id_BLENDER_EEVEE);
+ float render_samples = (float)BKE_collection_engine_property_value_get_int(props, "taa_render_samples");
+
+ DRW_framebuffer_bind(vedata->fbl->sss_accum_fb);
+ DRW_framebuffer_read_data(rr->xof, rr->yof, rr->rectx, rr->recty, 3, 0, rp->rect);
+
+ /* This is the accumulated color. Divide by the number of samples. */
+ for (int i = 0; i < rr->rectx * rr->recty * 3; i++) {
+ rp->rect[i] /= render_samples;
+ }
+ }
+
+ if ((view_layer->passflag & SCE_PASS_SUBSURFACE_INDIRECT) != 0) {
+ /* Do nothing as all the lighting is in the direct pass.
+ * TODO : Separate Direct from indirect lighting. */
+ }
+}
+
+static void eevee_render_result_normal(
+ RenderResult *rr, const char *viewname,
+ EEVEE_Data *vedata, EEVEE_ViewLayerData *UNUSED(sldata))
+{
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ ViewLayer *view_layer = draw_ctx->view_layer;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_PrivateData *g_data = stl->g_data;
+
+ /* Only read the center texel. */
+ if (stl->effects->taa_current_sample > 1)
+ return;
+
+ if ((view_layer->passflag & SCE_PASS_NORMAL) != 0) {
+ RenderLayer *rl = rr->layers.first;
+ RenderPass *rp = RE_pass_find_by_name(rl, RE_PASSNAME_NORMAL, viewname);
+
+ DRW_framebuffer_read_data(rr->xof, rr->yof, rr->rectx, rr->recty, 3, 1, rp->rect);
+
+ /* Convert Eevee encoded normals to Blender normals. */
+ for (int i = 0; i < rr->rectx * rr->recty * 3; i += 3) {
+ if (rp->rect[i] == 0.0f && rp->rect[i+1] == 0.0f) {
+ /* If normal is not correct then do not produce NANs. */
+ continue;
+ }
+
+ float fenc[2];
+ fenc[0] = rp->rect[i+0] * 4.0f - 2.0f;
+ fenc[1] = rp->rect[i+1] * 4.0f - 2.0f;
+
+ float f = dot_v2v2(fenc, fenc);
+ float g = sqrtf(1.0f - f / 4.0f);
+
+ rp->rect[i+0] = fenc[0] * g;
+ rp->rect[i+1] = fenc[1] * g;
+ rp->rect[i+2] = 1.0f - f / 2.0f;
+
+ mul_mat3_m4_v3(g_data->viewinv, &rp->rect[i]);
+ }
+ }
+}
+
+static void eevee_render_result_z(
+ RenderResult *rr, const char *viewname,
+ EEVEE_Data *vedata, EEVEE_ViewLayerData *sldata)
+{
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ ViewLayer *view_layer = draw_ctx->view_layer;
+ EEVEE_CommonUniformBuffer *common_data = &sldata->common_data;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_PrivateData *g_data = stl->g_data;
+
+ /* Only read the center texel. */
+ if (stl->effects->taa_current_sample > 1)
+ return;
+
+ if ((view_layer->passflag & SCE_PASS_Z) != 0) {
+ RenderLayer *rl = rr->layers.first;
+ RenderPass *rp = RE_pass_find_by_name(rl, RE_PASSNAME_Z, viewname);
+
+ DRW_framebuffer_read_depth(rr->xof, rr->yof, rr->rectx, rr->recty, rp->rect);
+
+ bool is_persp = DRW_viewport_is_persp_get();
+
+ /* Convert ogl depth [0..1] to view Z [near..far] */
+ for (int i = 0; i < rr->rectx * rr->recty; ++i) {
+ if (rp->rect[i] == 1.0f ) {
+ rp->rect[i] = 1e10f; /* Background */
+ }
+ else {
+ if (is_persp) {
+ rp->rect[i] = rp->rect[i] * 2.0f - 1.0f;
+ rp->rect[i] = g_data->winmat[3][2] / (rp->rect[i] + g_data->winmat[2][2]);
+ }
+ else {
+ rp->rect[i] = -common_data->view_vecs[0][2] + rp->rect[i] * -common_data->view_vecs[1][2];
+ }
+ }
+ }
+ }
+}
+
+static void eevee_render_result_mist(
+ RenderResult *rr, const char *viewname,
+ EEVEE_Data *vedata, EEVEE_ViewLayerData *UNUSED(sldata))
+{
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ ViewLayer *view_layer = draw_ctx->view_layer;
+
+ if ((view_layer->passflag & SCE_PASS_MIST) != 0) {
+ RenderLayer *rl = rr->layers.first;
+ RenderPass *rp = RE_pass_find_by_name(rl, RE_PASSNAME_MIST, viewname);
+
+ IDProperty *props = BKE_view_layer_engine_evaluated_get(view_layer, COLLECTION_MODE_NONE, RE_engine_id_BLENDER_EEVEE);
+ float render_samples = (float)BKE_collection_engine_property_value_get_int(props, "taa_render_samples");
+
+ DRW_framebuffer_bind(vedata->fbl->mist_accum_fb);
+ DRW_framebuffer_read_data(rr->xof, rr->yof, rr->rectx, rr->recty, 1, 0, rp->rect);
+
+ /* This is the accumulated color. Divide by the number of samples. */
+ for (int i = 0; i < rr->rectx * rr->recty; i++) {
+ rp->rect[i] /= render_samples;
+ }
+ }
+}
+
+static void eevee_render_result_occlusion(
+ RenderResult *rr, const char *viewname,
+ EEVEE_Data *vedata, EEVEE_ViewLayerData *UNUSED(sldata))
+{
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ ViewLayer *view_layer = draw_ctx->view_layer;
+
+ if (vedata->fbl->ao_accum_fb == NULL) {
+ /* AO is not enabled. */
+ return;
+ }
+
+ if ((view_layer->passflag & SCE_PASS_AO) != 0) {
+ RenderLayer *rl = rr->layers.first;
+ RenderPass *rp = RE_pass_find_by_name(rl, RE_PASSNAME_AO, viewname);
+
+ IDProperty *props = BKE_view_layer_engine_evaluated_get(view_layer, COLLECTION_MODE_NONE, RE_engine_id_BLENDER_EEVEE);
+ float render_samples = (float)BKE_collection_engine_property_value_get_int(props, "taa_render_samples");
+
+ DRW_framebuffer_bind(vedata->fbl->ao_accum_fb);
+ DRW_framebuffer_read_data(rr->xof, rr->yof, rr->rectx, rr->recty, 3, 0, rp->rect);
+
+ /* This is the accumulated color. Divide by the number of samples. */
+ for (int i = 0; i < rr->rectx * rr->recty * 3; i += 3) {
+ rp->rect[i] = rp->rect[i+1] = rp->rect[i+2] = min_ff(1.0f, rp->rect[i] / render_samples);
+ }
+ }
+}
+
+static void eevee_render_draw_background(EEVEE_Data *vedata)
+{
+ EEVEE_TextureList *txl = vedata->txl;
+ EEVEE_FramebufferList *fbl = vedata->fbl;
+ EEVEE_PassList *psl = vedata->psl;
+
+ /* Prevent background to write to data buffers.
+ * NOTE : This also make sure the textures are bound
+ * to the right double buffer. */
+ if (txl->ssr_normal_input != NULL) {
+ DRW_framebuffer_texture_detach(txl->ssr_normal_input);
+ }
+ if (txl->ssr_specrough_input != NULL) {
+ DRW_framebuffer_texture_detach(txl->ssr_specrough_input);
+ }
+ DRW_framebuffer_bind(fbl->main);
+
+ DRW_draw_pass(psl->background_pass);
+
+ if (txl->ssr_normal_input != NULL) {
+ DRW_framebuffer_texture_attach(fbl->main, txl->ssr_normal_input, 1, 0);
+ }
+ if (txl->ssr_specrough_input != NULL) {
+ DRW_framebuffer_texture_attach(fbl->main, txl->ssr_specrough_input, 2, 0);
+ }
+ DRW_framebuffer_bind(fbl->main);
+}
+
+void EEVEE_render_draw(EEVEE_Data *vedata, struct RenderEngine *engine, struct Depsgraph *UNUSED(depsgraph))
+{
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ ViewLayer *view_layer = draw_ctx->view_layer;
+ EEVEE_PassList *psl = vedata->psl;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_FramebufferList *fbl = vedata->fbl;
+ DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
+ EEVEE_ViewLayerData *sldata = EEVEE_view_layer_data_ensure();
+ EEVEE_PrivateData *g_data = stl->g_data;
+
+ /* FINISH CACHE */
+ EEVEE_materials_cache_finish(vedata);
+ EEVEE_lights_cache_finish(sldata);
+ EEVEE_lightprobes_cache_finish(sldata, vedata);
+
+ /* Sort transparents before the loop. */
+ DRW_pass_sort_shgroup_z(psl->transparent_pass);
+
+ if ((view_layer->passflag & (SCE_PASS_SUBSURFACE_COLOR |
+ SCE_PASS_SUBSURFACE_DIRECT |
+ SCE_PASS_SUBSURFACE_INDIRECT)) != 0)
+ {
+ EEVEE_subsurface_output_init(sldata, vedata);
+ }
+
+ if ((view_layer->passflag & SCE_PASS_MIST) != 0) {
+ EEVEE_mist_output_init(sldata, vedata);
+ }
+
+ if ((view_layer->passflag & SCE_PASS_AO) != 0) {
+ EEVEE_occlusion_output_init(sldata, vedata);
+ }
+
+ /* Init render result. */
+ const char *viewname = RE_GetActiveRenderView(engine->re);
+ const float *render_size = DRW_viewport_size_get();
+
+ RenderResult *rr = RE_engine_begin_result(engine, 0, 0, (int)render_size[0], (int)render_size[1], NULL, viewname);
+
+ IDProperty *props = BKE_view_layer_engine_evaluated_get(view_layer, COLLECTION_MODE_NONE, RE_engine_id_BLENDER_EEVEE);
+ unsigned int render_samples = BKE_collection_engine_property_value_get_int(props, "taa_render_samples");
+
+ while (render_samples-- > 0) {
+ float clear_col[4] = {0.0f, 0.0f, 0.0f, 0.0f};
+ unsigned int primes[3] = {2, 3, 7};
+ double offset[3] = {0.0, 0.0, 0.0};
+ double r[3];
+
+ /* Restore winmat before jittering again. */
+ copy_m4_m4(stl->effects->overide_winmat, g_data->winmat);
+
+ BLI_halton_3D(primes, offset, stl->effects->taa_current_sample, r);
+ EEVEE_update_noise(psl, fbl, r);
+ EEVEE_temporal_sampling_matrices_calc(stl->effects, g_data->viewmat, g_data->persmat, r);
+ EEVEE_volumes_set_jitter(sldata, stl->effects->taa_current_sample - 1);
+ EEVEE_materials_init(sldata, stl, fbl);
+
+ /* Refresh Probes */
+ while (EEVEE_lightprobes_all_probes_ready(sldata, vedata) == false) {
+ EEVEE_lightprobes_refresh(sldata, vedata);
+ }
+ EEVEE_lightprobes_refresh_planar(sldata, vedata);
+ DRW_uniformbuffer_update(sldata->common_ubo, &sldata->common_data);
+ /* Set matrices. */
+ DRW_viewport_matrix_override_set(stl->effects->overide_persmat, DRW_MAT_PERS);
+ DRW_viewport_matrix_override_set(stl->effects->overide_persinv, DRW_MAT_PERSINV);
+ DRW_viewport_matrix_override_set(stl->effects->overide_winmat, DRW_MAT_WIN);
+ DRW_viewport_matrix_override_set(stl->effects->overide_wininv, DRW_MAT_WININV);
+ DRW_viewport_matrix_override_set(g_data->viewmat, DRW_MAT_VIEW);
+ DRW_viewport_matrix_override_set(g_data->viewinv, DRW_MAT_VIEWINV);
+ /* Refresh Shadows */
+ EEVEE_draw_shadows(sldata, psl);
+
+ DRW_framebuffer_texture_detach(dtxl->depth);
+ DRW_framebuffer_texture_attach(fbl->main, dtxl->depth, 0, 0);
+ DRW_framebuffer_bind(fbl->main);
+ DRW_framebuffer_clear(true, true, true, clear_col, 1.0f);
+ /* Depth prepass */
+ DRW_draw_pass(psl->depth_pass);
+ DRW_draw_pass(psl->depth_pass_cull);
+ /* Create minmax texture */
+ EEVEE_create_minmax_buffer(vedata, dtxl->depth, -1);
+ EEVEE_occlusion_compute(sldata, vedata, dtxl->depth, -1);
+ EEVEE_volumes_compute(sldata, vedata);
+ /* Shading pass */
+ eevee_render_draw_background(vedata);
+ DRW_framebuffer_bind(fbl->main);
+ EEVEE_draw_default_passes(psl);
+ DRW_draw_pass(psl->material_pass);
+ EEVEE_subsurface_data_render(sldata, vedata);
+ /* Effects pre-transparency */
+ EEVEE_subsurface_compute(sldata, vedata);
+ EEVEE_reflection_compute(sldata, vedata);
+ EEVEE_refraction_compute(sldata, vedata);
+ /* Opaque refraction */
+ DRW_draw_pass(psl->refract_depth_pass);
+ DRW_draw_pass(psl->refract_depth_pass_cull);
+ DRW_draw_pass(psl->refract_pass);
+ /* Subsurface output */
+ EEVEE_subsurface_output_accumulate(sldata, vedata);
+ /* Occlusion output */
+ EEVEE_occlusion_output_accumulate(sldata, vedata);
+ /* Result NORMAL */
+ eevee_render_result_normal(rr, viewname, vedata, sldata);
+ /* Volumetrics Resolve Opaque */
+ EEVEE_volumes_resolve(sldata, vedata);
+ /* Mist output */
+ EEVEE_mist_output_accumulate(sldata, vedata);
+ /* Transparent */
+ DRW_draw_pass(psl->transparent_pass);
+ /* Result Z */
+ eevee_render_result_z(rr, viewname, vedata, sldata);
+ /* Post Process */
+ EEVEE_draw_effects(sldata, vedata);
+ }
+
+ eevee_render_result_combined(rr, viewname, vedata, sldata);
+ eevee_render_result_subsurface(rr, viewname, vedata, sldata);
+ eevee_render_result_mist(rr, viewname, vedata, sldata);
+ eevee_render_result_occlusion(rr, viewname, vedata, sldata);
+
+ RE_engine_end_result(engine, rr, false, false, false);
+}
+
+void EEVEE_render_update_passes(RenderEngine *engine, Scene *scene, ViewLayer *view_layer)
+{
+ int type;
+
+ RE_engine_register_pass(engine, scene, view_layer, RE_PASSNAME_COMBINED, 4, "RGBA", SOCK_RGBA);
+
+#define CHECK_PASS(name, channels, chanid) \
+ if (view_layer->passflag & (SCE_PASS_ ## name)) { \
+ if (channels == 4) type = SOCK_RGBA; \
+ else if (channels == 3) type = SOCK_VECTOR; \
+ else type = SOCK_FLOAT; \
+ RE_engine_register_pass(engine, scene, view_layer, RE_PASSNAME_ ## name, channels, chanid, type); \
+ }
+
+ CHECK_PASS(Z, 1, "Z");
+ CHECK_PASS(MIST, 1, "Z");
+ CHECK_PASS(NORMAL, 3, "XYZ");
+ CHECK_PASS(AO, 3, "RGB");
+ CHECK_PASS(SUBSURFACE_COLOR, 3, "RGB");
+ CHECK_PASS(SUBSURFACE_DIRECT, 3, "RGB");
+
+#undef CHECK_PASS
+} \ No newline at end of file
diff --git a/source/blender/draw/engines/eevee/eevee_screen_raytrace.c b/source/blender/draw/engines/eevee/eevee_screen_raytrace.c
new file mode 100644
index 00000000000..2917bfd1236
--- /dev/null
+++ b/source/blender/draw/engines/eevee/eevee_screen_raytrace.c
@@ -0,0 +1,342 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file eevee_screen_raytrace.c
+ * \ingroup draw_engine
+ *
+ * Screen space reflections and refractions techniques.
+ */
+
+#include "DRW_render.h"
+
+#include "BLI_dynstr.h"
+#include "BLI_string_utils.h"
+
+#include "eevee_private.h"
+#include "GPU_texture.h"
+
+/* SSR shader variations */
+enum {
+ SSR_RESOLVE = (1 << 0),
+ SSR_FULL_TRACE = (1 << 1),
+ SSR_AO = (1 << 3),
+ SSR_MAX_SHADER = (1 << 4),
+};
+
+static struct {
+ /* Screen Space Reflection */
+ struct GPUShader *ssr_sh[SSR_MAX_SHADER];
+
+ /* Theses are just references, not actually allocated */
+ struct GPUTexture *depth_src;
+ struct GPUTexture *color_src;
+} e_data = {NULL}; /* Engine data */
+
+extern char datatoc_ambient_occlusion_lib_glsl[];
+extern char datatoc_common_uniforms_lib_glsl[];
+extern char datatoc_bsdf_common_lib_glsl[];
+extern char datatoc_bsdf_sampling_lib_glsl[];
+extern char datatoc_octahedron_lib_glsl[];
+extern char datatoc_effect_ssr_frag_glsl[];
+extern char datatoc_lightprobe_lib_glsl[];
+extern char datatoc_raytrace_lib_glsl[];
+
+static struct GPUShader *eevee_effects_screen_raytrace_shader_get(int options)
+{
+ if (e_data.ssr_sh[options] == NULL) {
+ char *ssr_shader_str = BLI_string_joinN(
+ datatoc_common_uniforms_lib_glsl,
+ datatoc_bsdf_common_lib_glsl,
+ datatoc_bsdf_sampling_lib_glsl,
+ datatoc_octahedron_lib_glsl,
+ datatoc_lightprobe_lib_glsl,
+ datatoc_ambient_occlusion_lib_glsl,
+ datatoc_raytrace_lib_glsl,
+ datatoc_effect_ssr_frag_glsl);
+
+ DynStr *ds_defines = BLI_dynstr_new();
+ BLI_dynstr_appendf(ds_defines, SHADER_DEFINES);
+ if (options & SSR_RESOLVE) {
+ BLI_dynstr_appendf(ds_defines, "#define STEP_RESOLVE\n");
+ }
+ else {
+ BLI_dynstr_appendf(ds_defines, "#define STEP_RAYTRACE\n");
+ BLI_dynstr_appendf(ds_defines, "#define PLANAR_PROBE_RAYTRACE\n");
+ }
+ if (options & SSR_FULL_TRACE) {
+ BLI_dynstr_appendf(ds_defines, "#define FULLRES\n");
+ }
+ if (options & SSR_AO) {
+ BLI_dynstr_appendf(ds_defines, "#define SSR_AO\n");
+ }
+ char *ssr_define_str = BLI_dynstr_get_cstring(ds_defines);
+ BLI_dynstr_free(ds_defines);
+
+ e_data.ssr_sh[options] = DRW_shader_create_fullscreen(ssr_shader_str, ssr_define_str);
+
+ MEM_freeN(ssr_shader_str);
+ MEM_freeN(ssr_define_str);
+ }
+
+ return e_data.ssr_sh[options];
+}
+
+int EEVEE_screen_raytrace_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
+{
+ EEVEE_CommonUniformBuffer *common_data = &sldata->common_data;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_FramebufferList *fbl = vedata->fbl;
+ EEVEE_TextureList *txl = vedata->txl;
+ EEVEE_EffectsInfo *effects = stl->effects;
+ const float *viewport_size = DRW_viewport_size_get();
+
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ ViewLayer *view_layer = draw_ctx->view_layer;
+ IDProperty *props = BKE_view_layer_engine_evaluated_get(view_layer,
+ COLLECTION_MODE_NONE,
+ RE_engine_id_BLENDER_EEVEE);
+
+ /* Compute pixel size, (shared with contact shadows) */
+ copy_v2_v2(common_data->ssr_pixelsize, viewport_size);
+ invert_v2(common_data->ssr_pixelsize);
+
+ if (BKE_collection_engine_property_value_get_bool(props, "ssr_enable")) {
+ const bool use_refraction = BKE_collection_engine_property_value_get_bool(props, "ssr_refraction");
+
+ if (use_refraction) {
+ DRWFboTexture tex = {&txl->refract_color, DRW_TEX_RGB_11_11_10, DRW_TEX_FILTER | DRW_TEX_MIPMAP};
+
+ DRW_framebuffer_init(&fbl->refract_fb, &draw_engine_eevee_type,
+ (int)viewport_size[0], (int)viewport_size[1],
+ &tex, 1);
+ }
+
+ bool prev_trace_full = effects->reflection_trace_full;
+ effects->reflection_trace_full = !BKE_collection_engine_property_value_get_bool(props, "ssr_halfres");
+ common_data->ssr_thickness = BKE_collection_engine_property_value_get_float(props, "ssr_thickness");
+ common_data->ssr_border_fac = BKE_collection_engine_property_value_get_float(props, "ssr_border_fade");
+ common_data->ssr_firefly_fac = BKE_collection_engine_property_value_get_float(props, "ssr_firefly_fac");
+ common_data->ssr_max_roughness = BKE_collection_engine_property_value_get_float(props, "ssr_max_roughness");
+ common_data->ssr_quality = 1.0f - 0.95f * BKE_collection_engine_property_value_get_float(props, "ssr_quality");
+ common_data->ssr_brdf_bias = 0.1f + common_data->ssr_quality * 0.6f; /* Range [0.1, 0.7]. */
+
+ if (common_data->ssr_firefly_fac < 1e-8f) {
+ common_data->ssr_firefly_fac = FLT_MAX;
+ }
+
+ if (prev_trace_full != effects->reflection_trace_full) {
+ DRW_TEXTURE_FREE_SAFE(txl->ssr_hit_output);
+ }
+
+ const int divisor = (effects->reflection_trace_full) ? 1 : 2;
+ int tracing_res[2] = {(int)viewport_size[0] / divisor, (int)viewport_size[1] / divisor};
+ const bool high_qual_input = true; /* TODO dither low quality input */
+
+ /* MRT for the shading pass in order to output needed data for the SSR pass. */
+ /* TODO create one texture layer per lobe */
+ if (txl->ssr_specrough_input == NULL) {
+ DRWTextureFormat specrough_format = (high_qual_input) ? DRW_TEX_RGBA_16 : DRW_TEX_RGBA_8;
+ txl->ssr_specrough_input = DRW_texture_create_2D((int)viewport_size[0], (int)viewport_size[1],
+ specrough_format, 0, NULL);
+ }
+
+ /* Reattach textures to the right buffer (because we are alternating between buffers) */
+ /* TODO multiple FBO per texture!!!! */
+ DRW_framebuffer_texture_detach(txl->ssr_specrough_input);
+ DRW_framebuffer_texture_attach(fbl->main, txl->ssr_specrough_input, 2, 0);
+
+ /* Raytracing output */
+ /* (AMD or Intel) For some reason DRW_TEX_TEMP with DRW_TEX_RG_16I
+ * creates problems when toggling ssr_halfres. Texture is not read correctly (black output).
+ * So using a persistent buffer instead. */
+ DRWFboTexture tex_output[2] = {{&txl->ssr_hit_output, DRW_TEX_RG_16I, 0},
+ {&stl->g_data->ssr_pdf_output, DRW_TEX_R_16, DRW_TEX_TEMP}};
+
+ DRW_framebuffer_init(&fbl->screen_tracing_fb, &draw_engine_eevee_type,
+ tracing_res[0], tracing_res[1],
+ tex_output, 2);
+
+ /* Enable double buffering to be able to read previous frame color */
+ return EFFECT_SSR | EFFECT_NORMAL_BUFFER | EFFECT_DOUBLE_BUFFER | ((use_refraction) ? EFFECT_REFRACT : 0);
+ }
+
+ /* Cleanup to release memory */
+ DRW_TEXTURE_FREE_SAFE(txl->ssr_specrough_input);
+ DRW_TEXTURE_FREE_SAFE(txl->ssr_hit_output);
+ DRW_FRAMEBUFFER_FREE_SAFE(fbl->screen_tracing_fb);
+ stl->g_data->ssr_pdf_output = NULL;
+
+ return 0;
+}
+
+void EEVEE_screen_raytrace_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
+{
+ EEVEE_PassList *psl = vedata->psl;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_TextureList *txl = vedata->txl;
+ EEVEE_EffectsInfo *effects = stl->effects;
+
+ struct Gwn_Batch *quad = DRW_cache_fullscreen_quad_get();
+
+ if ((effects->enabled_effects & EFFECT_SSR) != 0) {
+ int options = (effects->reflection_trace_full) ? SSR_FULL_TRACE : 0;
+ options |= ((effects->enabled_effects & EFFECT_GTAO) != 0) ? SSR_AO : 0;
+
+ struct GPUShader *trace_shader = eevee_effects_screen_raytrace_shader_get(options);
+ struct GPUShader *resolve_shader = eevee_effects_screen_raytrace_shader_get(SSR_RESOLVE | options);
+
+ /** Screen space raytracing overview
+ *
+ * Following Frostbite stochastic SSR.
+ *
+ * - First pass Trace rays accross the depth buffer. The hit position and pdf are
+ * recorded in a RGBA16F render target for each ray (sample).
+ *
+ * - We downsample the previous frame color buffer.
+ *
+ * - For each final pixel, we gather neighboors rays and choose a color buffer
+ * mipmap for each ray using its pdf. (filtered importance sampling)
+ * We then evaluate the lighting from the probes and mix the results together.
+ */
+ psl->ssr_raytrace = DRW_pass_create("SSR Raytrace", DRW_STATE_WRITE_COLOR);
+ DRWShadingGroup *grp = DRW_shgroup_create(trace_shader, psl->ssr_raytrace);
+ DRW_shgroup_uniform_buffer(grp, "depthBuffer", &e_data.depth_src);
+ DRW_shgroup_uniform_buffer(grp, "normalBuffer", &txl->ssr_normal_input);
+ DRW_shgroup_uniform_buffer(grp, "specroughBuffer", &txl->ssr_specrough_input);
+ DRW_shgroup_uniform_buffer(grp, "maxzBuffer", &txl->maxzbuffer);
+ DRW_shgroup_uniform_buffer(grp, "planarDepth", &vedata->txl->planar_depth);
+ DRW_shgroup_uniform_texture(grp, "utilTex", EEVEE_materials_get_util_tex());
+ DRW_shgroup_uniform_block(grp, "planar_block", sldata->planar_ubo);
+ DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
+ if (!effects->reflection_trace_full) {
+ DRW_shgroup_uniform_ivec2(grp, "halfresOffset", effects->ssr_halfres_ofs, 1);
+ }
+ DRW_shgroup_call_add(grp, quad, NULL);
+
+ psl->ssr_resolve = DRW_pass_create("SSR Resolve", DRW_STATE_WRITE_COLOR | DRW_STATE_ADDITIVE);
+ grp = DRW_shgroup_create(resolve_shader, psl->ssr_resolve);
+ DRW_shgroup_uniform_buffer(grp, "depthBuffer", &e_data.depth_src);
+ DRW_shgroup_uniform_buffer(grp, "normalBuffer", &txl->ssr_normal_input);
+ DRW_shgroup_uniform_buffer(grp, "specroughBuffer", &txl->ssr_specrough_input);
+ DRW_shgroup_uniform_buffer(grp, "probeCubes", &sldata->probe_pool);
+ DRW_shgroup_uniform_buffer(grp, "probePlanars", &vedata->txl->planar_pool);
+ DRW_shgroup_uniform_buffer(grp, "planarDepth", &vedata->txl->planar_depth);
+ DRW_shgroup_uniform_buffer(grp, "hitBuffer", &vedata->txl->ssr_hit_output);
+ DRW_shgroup_uniform_buffer(grp, "pdfBuffer", &stl->g_data->ssr_pdf_output);
+ DRW_shgroup_uniform_buffer(grp, "prevColorBuffer", &txl->color_double_buffer);
+ DRW_shgroup_uniform_block(grp, "probe_block", sldata->probe_ubo);
+ DRW_shgroup_uniform_block(grp, "planar_block", sldata->planar_ubo);
+ DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
+ DRW_shgroup_uniform_int(grp, "neighborOffset", &effects->ssr_neighbor_ofs, 1);
+ if ((effects->enabled_effects & EFFECT_GTAO) != 0) {
+ DRW_shgroup_uniform_texture(grp, "utilTex", EEVEE_materials_get_util_tex());
+ DRW_shgroup_uniform_buffer(grp, "horizonBuffer", &vedata->txl->gtao_horizons);
+ }
+
+ DRW_shgroup_call_add(grp, quad, NULL);
+ }
+}
+
+void EEVEE_refraction_compute(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
+{
+ EEVEE_FramebufferList *fbl = vedata->fbl;
+ EEVEE_TextureList *txl = vedata->txl;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_EffectsInfo *effects = stl->effects;
+
+ if ((effects->enabled_effects & EFFECT_REFRACT) != 0) {
+ DRW_framebuffer_texture_attach(fbl->refract_fb, txl->refract_color, 0, 0);
+ DRW_framebuffer_blit(fbl->main, fbl->refract_fb, false, false);
+ EEVEE_downsample_buffer(vedata, fbl->downsample_fb, txl->refract_color, 9);
+
+ /* Restore */
+ DRW_framebuffer_bind(fbl->main);
+ }
+}
+
+void EEVEE_reflection_compute(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
+{
+ EEVEE_PassList *psl = vedata->psl;
+ EEVEE_FramebufferList *fbl = vedata->fbl;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_TextureList *txl = vedata->txl;
+ EEVEE_EffectsInfo *effects = stl->effects;
+
+ if (((effects->enabled_effects & EFFECT_SSR) != 0) && stl->g_data->valid_double_buffer) {
+ DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
+ e_data.depth_src = dtxl->depth;
+
+ DRW_stats_group_start("SSR");
+ DRW_framebuffer_texture_attach(fbl->screen_tracing_fb, stl->g_data->ssr_pdf_output, 1, 0);
+ DRW_framebuffer_bind(fbl->screen_tracing_fb);
+
+ /* Raytrace. */
+ DRW_draw_pass(psl->ssr_raytrace);
+
+ DRW_framebuffer_texture_detach(stl->g_data->ssr_pdf_output);
+
+ EEVEE_downsample_buffer(vedata, fbl->downsample_fb, txl->color_double_buffer, 9);
+
+ /* Resolve at fullres */
+ int sample = (DRW_state_is_image_render()) ? effects->taa_render_sample : effects->taa_current_sample;
+ /* Doing a neighbor shift only after a few iteration. We wait for a prime number of cycles to avoid
+ * noise correlation. This reduces variance faster. */
+ effects->ssr_neighbor_ofs = ((sample / 5) % 8) * 4;
+ switch ((sample / 11) % 4) {
+ case 0:
+ effects->ssr_halfres_ofs[0] = 0;
+ effects->ssr_halfres_ofs[1] = 0;
+ break;
+ case 1:
+ effects->ssr_halfres_ofs[0] = 0;
+ effects->ssr_halfres_ofs[1] = 1;
+ break;
+ case 2:
+ effects->ssr_halfres_ofs[0] = 1;
+ effects->ssr_halfres_ofs[1] = 0;
+ break;
+ case 4:
+ effects->ssr_halfres_ofs[0] = 1;
+ effects->ssr_halfres_ofs[1] = 1;
+ break;
+ }
+ DRW_framebuffer_texture_detach(dtxl->depth);
+ DRW_framebuffer_texture_detach(txl->ssr_normal_input);
+ DRW_framebuffer_texture_detach(txl->ssr_specrough_input);
+ DRW_framebuffer_bind(fbl->main);
+ DRW_draw_pass(psl->ssr_resolve);
+
+ /* Restore */
+ DRW_framebuffer_texture_attach(fbl->main, dtxl->depth, 0, 0);
+ DRW_framebuffer_texture_attach(fbl->main, txl->ssr_normal_input, 1, 0);
+ DRW_framebuffer_texture_attach(fbl->main, txl->ssr_specrough_input, 2, 0);
+ DRW_framebuffer_bind(fbl->main);
+
+ DRW_stats_group_end();
+ }
+}
+
+void EEVEE_screen_raytrace_free(void)
+{
+ for (int i = 0; i < SSR_MAX_SHADER; ++i) {
+ DRW_SHADER_FREE_SAFE(e_data.ssr_sh[i]);
+ }
+}
diff --git a/source/blender/draw/engines/eevee/eevee_subsurface.c b/source/blender/draw/engines/eevee/eevee_subsurface.c
new file mode 100644
index 00000000000..c3079d931fb
--- /dev/null
+++ b/source/blender/draw/engines/eevee/eevee_subsurface.c
@@ -0,0 +1,373 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file eevee_subsurface.c
+ * \ingroup draw_engine
+ *
+ * Screen space subsurface scattering technique.
+ */
+
+#include "DRW_render.h"
+
+#include "BLI_string_utils.h"
+
+#include "eevee_private.h"
+#include "GPU_texture.h"
+
+static struct {
+ struct GPUShader *sss_sh[4];
+} e_data = {NULL}; /* Engine data */
+
+extern char datatoc_common_uniforms_lib_glsl[];
+extern char datatoc_effect_subsurface_frag_glsl[];
+
+static void eevee_create_shader_subsurface(void)
+{
+ char *frag_str = BLI_string_joinN(
+ datatoc_common_uniforms_lib_glsl,
+ datatoc_effect_subsurface_frag_glsl);
+
+ e_data.sss_sh[0] = DRW_shader_create_fullscreen(frag_str, "#define FIRST_PASS\n");
+ e_data.sss_sh[1] = DRW_shader_create_fullscreen(frag_str, "#define SECOND_PASS\n");
+ e_data.sss_sh[2] = DRW_shader_create_fullscreen(frag_str, "#define SECOND_PASS\n"
+ "#define USE_SEP_ALBEDO\n");
+ e_data.sss_sh[3] = DRW_shader_create_fullscreen(frag_str, "#define SECOND_PASS\n"
+ "#define USE_SEP_ALBEDO\n"
+ "#define RESULT_ACCUM\n");
+
+ MEM_freeN(frag_str);
+}
+
+int EEVEE_subsurface_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
+{
+ EEVEE_CommonUniformBuffer *common_data = &sldata->common_data;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_EffectsInfo *effects = stl->effects;
+ EEVEE_FramebufferList *fbl = vedata->fbl;
+ EEVEE_TextureList *txl = vedata->txl;
+ const float *viewport_size = DRW_viewport_size_get();
+
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ ViewLayer *view_layer = draw_ctx->view_layer;
+ IDProperty *props = BKE_view_layer_engine_evaluated_get(view_layer, COLLECTION_MODE_NONE, RE_engine_id_BLENDER_EEVEE);
+
+ if (BKE_collection_engine_property_value_get_bool(props, "sss_enable")) {
+ effects->sss_sample_count = 1 + BKE_collection_engine_property_value_get_int(props, "sss_samples") * 2;
+ effects->sss_separate_albedo = BKE_collection_engine_property_value_get_bool(props, "sss_separate_albedo");
+ common_data->sss_jitter_threshold = BKE_collection_engine_property_value_get_float(props, "sss_jitter_threshold");
+
+ /* Force separate albedo for final render */
+ if (DRW_state_is_image_render()) {
+ effects->sss_separate_albedo = true;
+ }
+
+ /* Shaders */
+ if (!e_data.sss_sh[0]) {
+ eevee_create_shader_subsurface();
+ }
+
+ /* NOTE : we need another stencil because the stencil buffer is on the same texture
+ * as the depth buffer we are sampling from. This could be avoided if the stencil is
+ * a separate texture but that needs OpenGL 4.4 or ARB_texture_stencil8.
+ * OR OpenGL 4.3 / ARB_ES3_compatibility if using a renderbuffer instead */
+ DRWFboTexture texs[2] = {{&txl->sss_stencil, DRW_TEX_DEPTH_24_STENCIL_8, 0},
+ {&txl->sss_blur, DRW_TEX_RGBA_16, DRW_TEX_FILTER}};
+
+ DRW_framebuffer_init(&fbl->sss_blur_fb, &draw_engine_eevee_type, (int)viewport_size[0], (int)viewport_size[1],
+ texs, 2);
+
+ DRWFboTexture tex_data = {&txl->sss_data, DRW_TEX_RGBA_16, DRW_TEX_FILTER};
+ DRW_framebuffer_init(&fbl->sss_clear_fb, &draw_engine_eevee_type, (int)viewport_size[0], (int)viewport_size[1],
+ &tex_data, 1);
+
+ if (effects->sss_separate_albedo) {
+ if (txl->sss_albedo == NULL) {
+ txl->sss_albedo = DRW_texture_create_2D((int)viewport_size[0], (int)viewport_size[1],
+ DRW_TEX_RGB_11_11_10, 0, NULL);
+ }
+ }
+ else {
+ /* Cleanup to release memory */
+ DRW_TEXTURE_FREE_SAFE(txl->sss_albedo);
+ }
+ return EFFECT_SSS;
+ }
+
+ /* Cleanup to release memory */
+ DRW_TEXTURE_FREE_SAFE(txl->sss_albedo);
+ DRW_TEXTURE_FREE_SAFE(txl->sss_data);
+ DRW_TEXTURE_FREE_SAFE(txl->sss_blur);
+ DRW_TEXTURE_FREE_SAFE(txl->sss_stencil);
+ DRW_FRAMEBUFFER_FREE_SAFE(fbl->sss_blur_fb);
+ DRW_FRAMEBUFFER_FREE_SAFE(fbl->sss_clear_fb);
+
+ return 0;
+}
+
+static void set_shgrp_stencil(void *UNUSED(userData), DRWShadingGroup *shgrp)
+{
+ DRW_shgroup_stencil_mask(shgrp, 255);
+}
+
+void EEVEE_subsurface_output_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
+{
+ EEVEE_FramebufferList *fbl = vedata->fbl;
+ EEVEE_TextureList *txl = vedata->txl;
+ const float *viewport_size = DRW_viewport_size_get();
+
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ ViewLayer *view_layer = draw_ctx->view_layer;
+ IDProperty *props = BKE_view_layer_engine_evaluated_get(view_layer, COLLECTION_MODE_NONE, RE_engine_id_BLENDER_EEVEE);
+
+ if (BKE_collection_engine_property_value_get_bool(props, "sss_enable")) {
+ float clear[4] = {0.0f, 0.0f, 0.0f, 0.0f};
+
+ DRWFboTexture tex_data[2] = {{&txl->sss_dir_accum, DRW_TEX_RGBA_16, 0},
+ {&txl->sss_col_accum, DRW_TEX_RGBA_16, 0}};
+ DRW_framebuffer_init(&fbl->sss_accum_fb, &draw_engine_eevee_type, (int)viewport_size[0], (int)viewport_size[1],
+ tex_data, 2);
+
+ /* Clear texture. */
+ DRW_framebuffer_bind(fbl->sss_accum_fb);
+ DRW_framebuffer_clear(true, false, false, clear, 0.0f);
+
+ /* Make the opaque refraction pass mask the sss. */
+ DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL | DRW_STATE_CLIP_PLANES |
+ DRW_STATE_WIRE | DRW_STATE_WRITE_STENCIL;
+ DRW_pass_state_set(vedata->psl->refract_pass, state);
+ DRW_pass_foreach_shgroup(vedata->psl->refract_pass, &set_shgrp_stencil, NULL);
+ }
+ else {
+ /* Cleanup to release memory */
+ DRW_TEXTURE_FREE_SAFE(txl->sss_dir_accum);
+ DRW_TEXTURE_FREE_SAFE(txl->sss_col_accum);
+ DRW_FRAMEBUFFER_FREE_SAFE(fbl->sss_accum_fb);
+ }
+}
+
+void EEVEE_subsurface_cache_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
+{
+ EEVEE_PassList *psl = vedata->psl;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_EffectsInfo *effects = stl->effects;
+
+ if ((effects->enabled_effects & EFFECT_SSS) != 0) {
+ /** Screen Space SubSurface Scattering overview
+ * TODO
+ */
+ psl->sss_blur_ps = DRW_pass_create("Blur Horiz", DRW_STATE_WRITE_COLOR | DRW_STATE_STENCIL_EQUAL);
+
+ DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_ADDITIVE | DRW_STATE_STENCIL_EQUAL;
+ psl->sss_resolve_ps = DRW_pass_create("Blur Vert", state);
+ psl->sss_accum_ps = DRW_pass_create("Resolve Accum", state);
+ }
+}
+
+void EEVEE_subsurface_add_pass(
+ EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, unsigned int sss_id, struct GPUUniformBuffer *sss_profile)
+{
+ DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
+ EEVEE_TextureList *txl = vedata->txl;
+ EEVEE_PassList *psl = vedata->psl;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_EffectsInfo *effects = stl->effects;
+ struct Gwn_Batch *quad = DRW_cache_fullscreen_quad_get();
+
+ DRWShadingGroup *grp = DRW_shgroup_create(e_data.sss_sh[0], psl->sss_blur_ps);
+ DRW_shgroup_uniform_texture(grp, "utilTex", EEVEE_materials_get_util_tex());
+ DRW_shgroup_uniform_buffer(grp, "depthBuffer", &dtxl->depth);
+ DRW_shgroup_uniform_buffer(grp, "sssData", &txl->sss_data);
+ DRW_shgroup_uniform_block(grp, "sssProfile", sss_profile);
+ DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
+ DRW_shgroup_stencil_mask(grp, sss_id);
+ DRW_shgroup_call_add(grp, quad, NULL);
+
+ struct GPUShader *sh = (effects->sss_separate_albedo) ? e_data.sss_sh[2] : e_data.sss_sh[1];
+ grp = DRW_shgroup_create(sh, psl->sss_resolve_ps);
+ DRW_shgroup_uniform_texture(grp, "utilTex", EEVEE_materials_get_util_tex());
+ DRW_shgroup_uniform_buffer(grp, "depthBuffer", &dtxl->depth);
+ DRW_shgroup_uniform_buffer(grp, "sssData", &txl->sss_blur);
+ DRW_shgroup_uniform_block(grp, "sssProfile", sss_profile);
+ DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
+ DRW_shgroup_stencil_mask(grp, sss_id);
+ DRW_shgroup_call_add(grp, quad, NULL);
+
+ if (effects->sss_separate_albedo) {
+ DRW_shgroup_uniform_buffer(grp, "sssAlbedo", &txl->sss_albedo);
+ }
+
+ if (DRW_state_is_image_render()) {
+ grp = DRW_shgroup_create(e_data.sss_sh[3], psl->sss_accum_ps);
+ DRW_shgroup_uniform_texture(grp, "utilTex", EEVEE_materials_get_util_tex());
+ DRW_shgroup_uniform_buffer(grp, "depthBuffer", &dtxl->depth);
+ DRW_shgroup_uniform_buffer(grp, "sssData", &txl->sss_blur);
+ DRW_shgroup_uniform_buffer(grp, "sssAlbedo", &txl->sss_albedo);
+ DRW_shgroup_uniform_block(grp, "sssProfile", sss_profile);
+ DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
+ DRW_shgroup_stencil_mask(grp, sss_id);
+ DRW_shgroup_call_add(grp, quad, NULL);
+ }
+}
+
+void EEVEE_subsurface_data_render(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
+{
+ EEVEE_PassList *psl = vedata->psl;
+ EEVEE_TextureList *txl = vedata->txl;
+ EEVEE_FramebufferList *fbl = vedata->fbl;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_EffectsInfo *effects = stl->effects;
+
+ if ((effects->enabled_effects & EFFECT_SSS) != 0) {
+ float clear[4] = {0.0f, 0.0f, 0.0f, 0.0f};
+ /* Clear sss_data texture only... can this be done in a more clever way? */
+ DRW_framebuffer_bind(fbl->sss_clear_fb);
+ DRW_framebuffer_clear(true, false, false, clear, 0.0f);
+
+
+ DRW_framebuffer_texture_detach(txl->sss_data);
+ if ((effects->enabled_effects & EFFECT_NORMAL_BUFFER) != 0) {
+ DRW_framebuffer_texture_detach(txl->ssr_normal_input);
+ }
+ if ((effects->enabled_effects & EFFECT_SSR) != 0) {
+ DRW_framebuffer_texture_detach(txl->ssr_specrough_input);
+ }
+
+ /* Start at slot 1 because slot 0 is txl->color */
+ int tex_slot = 1;
+ DRW_framebuffer_texture_attach(fbl->main, txl->sss_data, tex_slot++, 0);
+ if (effects->sss_separate_albedo) {
+ DRW_framebuffer_texture_attach(fbl->main, txl->sss_albedo, tex_slot++, 0);
+ }
+ if ((effects->enabled_effects & EFFECT_NORMAL_BUFFER) != 0) {
+ DRW_framebuffer_texture_attach(fbl->main, txl->ssr_normal_input, tex_slot++, 0);
+ }
+ if ((effects->enabled_effects & EFFECT_SSR) != 0) {
+ DRW_framebuffer_texture_attach(fbl->main, txl->ssr_specrough_input, tex_slot++, 0);
+ }
+ DRW_framebuffer_bind(fbl->main);
+
+ DRW_draw_pass(psl->sss_pass);
+
+ /* Restore */
+ DRW_framebuffer_texture_detach(txl->sss_data);
+ if (effects->sss_separate_albedo) {
+ DRW_framebuffer_texture_detach(txl->sss_albedo);
+ }
+ if ((effects->enabled_effects & EFFECT_NORMAL_BUFFER) != 0) {
+ DRW_framebuffer_texture_detach(txl->ssr_normal_input);
+ }
+ if ((effects->enabled_effects & EFFECT_SSR) != 0) {
+ DRW_framebuffer_texture_detach(txl->ssr_specrough_input);
+ }
+
+ DRW_framebuffer_texture_attach(fbl->sss_clear_fb, txl->sss_data, 0, 0);
+ if ((effects->enabled_effects & EFFECT_NORMAL_BUFFER) != 0) {
+ DRW_framebuffer_texture_attach(fbl->main, txl->ssr_normal_input, 1, 0);
+ }
+ if ((effects->enabled_effects & EFFECT_SSR) != 0) {
+ DRW_framebuffer_texture_attach(fbl->main, txl->ssr_specrough_input, 2, 0);
+ }
+ }
+}
+
+void EEVEE_subsurface_compute(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
+{
+ EEVEE_PassList *psl = vedata->psl;
+ EEVEE_FramebufferList *fbl = vedata->fbl;
+ EEVEE_TextureList *txl = vedata->txl;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_EffectsInfo *effects = stl->effects;
+
+ if ((effects->enabled_effects & EFFECT_SSS) != 0) {
+ float clear[4] = {0.0f, 0.0f, 0.0f, 0.0f};
+ DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
+
+ DRW_stats_group_start("SSS");
+
+ /* Copy stencil channel, could be avoided (see EEVEE_subsurface_init) */
+ DRW_framebuffer_blit(fbl->main, fbl->sss_blur_fb, false, true);
+
+ DRW_framebuffer_texture_detach(dtxl->depth);
+
+ /* 1. horizontal pass */
+ DRW_framebuffer_bind(fbl->sss_blur_fb);
+ DRW_framebuffer_clear(true, false, false, clear, 0.0f);
+ DRW_draw_pass(psl->sss_blur_ps);
+
+ /* 2. vertical pass + Resolve */
+ DRW_framebuffer_texture_detach(txl->sss_stencil);
+ if ((effects->enabled_effects & EFFECT_NORMAL_BUFFER) != 0) {
+ DRW_framebuffer_texture_detach(txl->ssr_normal_input);
+ }
+ if ((effects->enabled_effects & EFFECT_SSR) != 0) {
+ DRW_framebuffer_texture_detach(txl->ssr_specrough_input);
+ }
+ DRW_framebuffer_texture_attach(fbl->main, txl->sss_stencil, 0, 0);
+ DRW_framebuffer_bind(fbl->main);
+ DRW_draw_pass(psl->sss_resolve_ps);
+
+ /* Restore */
+ DRW_framebuffer_texture_detach(txl->sss_stencil);
+ DRW_framebuffer_texture_attach(fbl->sss_blur_fb, txl->sss_stencil, 0, 0);
+ DRW_framebuffer_texture_attach(fbl->main, dtxl->depth, 0, 0);
+ if ((effects->enabled_effects & EFFECT_NORMAL_BUFFER) != 0) {
+ DRW_framebuffer_texture_attach(fbl->main, txl->ssr_normal_input, 1, 0);
+ }
+ if ((effects->enabled_effects & EFFECT_SSR) != 0) {
+ DRW_framebuffer_texture_attach(fbl->main, txl->ssr_specrough_input, 2, 0);
+ }
+
+ DRW_stats_group_end();
+ }
+}
+
+void EEVEE_subsurface_output_accumulate(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
+{
+ EEVEE_PassList *psl = vedata->psl;
+ EEVEE_FramebufferList *fbl = vedata->fbl;
+ EEVEE_TextureList *txl = vedata->txl;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_EffectsInfo *effects = stl->effects;
+
+ if (((effects->enabled_effects & EFFECT_SSS) != 0) && (fbl->sss_accum_fb != NULL)) {
+ /* Copy stencil channel, could be avoided (see EEVEE_subsurface_init) */
+ DRW_framebuffer_blit(fbl->main, fbl->sss_blur_fb, false, true);
+
+ /* Only do vertical pass + Resolve */
+ DRW_framebuffer_texture_detach(txl->sss_stencil);
+ DRW_framebuffer_texture_attach(fbl->sss_accum_fb, txl->sss_stencil, 0, 0);
+ DRW_framebuffer_bind(fbl->sss_accum_fb);
+ DRW_draw_pass(psl->sss_accum_ps);
+
+ /* Restore */
+ DRW_framebuffer_texture_detach(txl->sss_stencil);
+ DRW_framebuffer_texture_attach(fbl->sss_blur_fb, txl->sss_stencil, 0, 0);
+ DRW_framebuffer_bind(fbl->main);
+ }
+}
+
+void EEVEE_subsurface_free(void)
+{
+ DRW_SHADER_FREE_SAFE(e_data.sss_sh[0]);
+ DRW_SHADER_FREE_SAFE(e_data.sss_sh[1]);
+ DRW_SHADER_FREE_SAFE(e_data.sss_sh[2]);
+ DRW_SHADER_FREE_SAFE(e_data.sss_sh[3]);
+}
diff --git a/source/blender/draw/engines/eevee/eevee_temporal_sampling.c b/source/blender/draw/engines/eevee/eevee_temporal_sampling.c
new file mode 100644
index 00000000000..09f40254f1b
--- /dev/null
+++ b/source/blender/draw/engines/eevee/eevee_temporal_sampling.c
@@ -0,0 +1,339 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file eevee_temporal_sampling.c
+ * \ingroup draw_engine
+ *
+ * Temporal super sampling technique
+ */
+
+#include "DRW_render.h"
+
+#include "BLI_rand.h"
+
+#include "eevee_private.h"
+#include "GPU_texture.h"
+
+#define FILTER_CDF_TABLE_SIZE 512
+
+static struct {
+ /* Temporal Anti Aliasing */
+ struct GPUShader *taa_resolve_sh;
+
+ /* Pixel filter table: Only blackman-harris for now. */
+ float inverted_cdf[FILTER_CDF_TABLE_SIZE];
+} e_data = {NULL}; /* Engine data */
+
+extern char datatoc_effect_temporal_aa_glsl[];
+
+static void eevee_create_shader_temporal_sampling(void)
+{
+ e_data.taa_resolve_sh = DRW_shader_create_fullscreen(datatoc_effect_temporal_aa_glsl, NULL);
+}
+
+static float UNUSED_FUNCTION(filter_box)(float UNUSED(x))
+{
+ return 1.0f;
+}
+
+static float filter_blackman_harris(float x)
+{
+ /* Hardcoded 1px footprint [-0.5..0.5]. We resize later. */
+ const float width = 1.0f;
+ x = 2.0f * M_PI * (x / width + 0.5f);
+ return 0.35875f - 0.48829f * cosf(x) + 0.14128f * cosf(2.0f * x) - 0.01168f * cosf(3.0f * x);
+}
+
+/* Compute cumulative distribution function of a discrete function. */
+static void compute_cdf(float (*func)(float x), float cdf[FILTER_CDF_TABLE_SIZE])
+{
+ cdf[0] = 0.0f;
+ /* Actual CDF evaluation. */
+ for(int u = 0; u < FILTER_CDF_TABLE_SIZE - 1; ++u) {
+ float x = (float)(u + 1) / (float)(FILTER_CDF_TABLE_SIZE - 1);
+ cdf[u + 1] = cdf[u] + func(x - 0.5f); /* [-0.5..0.5]. We resize later. */
+ }
+ /* Normalize the CDF. */
+ for(int u = 0; u < FILTER_CDF_TABLE_SIZE - 1; u++) {
+ cdf[u] /= cdf[FILTER_CDF_TABLE_SIZE - 1];
+ }
+ /* Just to make sure. */
+ cdf[FILTER_CDF_TABLE_SIZE - 1] = 1.0f;
+}
+
+static void invert_cdf(const float cdf[FILTER_CDF_TABLE_SIZE], float invert_cdf[FILTER_CDF_TABLE_SIZE])
+{
+ for (int u = 0; u < FILTER_CDF_TABLE_SIZE; u++) {
+ float x = (float)u / (float)(FILTER_CDF_TABLE_SIZE - 1);
+ for (int i = 0; i < FILTER_CDF_TABLE_SIZE; ++i) {
+ if (cdf[i] >= x) {
+ if (i == FILTER_CDF_TABLE_SIZE - 1) {
+ invert_cdf[u] = 1.0f;
+ }
+ else {
+ float t = (x - cdf[i])/(cdf[i+1] - cdf[i]);
+ invert_cdf[u] = ((float)i + t) / (float)(FILTER_CDF_TABLE_SIZE - 1);
+ }
+ break;
+ }
+ }
+ }
+}
+
+/* Evaluate a discrete function table with linear interpolation. */
+static float eval_table(float *table, float x)
+{
+ CLAMP(x, 0.0f, 1.0f);
+ x = x * (FILTER_CDF_TABLE_SIZE - 1);
+
+ int index = min_ii((int)(x), FILTER_CDF_TABLE_SIZE - 1);
+ int nindex = min_ii(index + 1, FILTER_CDF_TABLE_SIZE - 1);
+ float t = x - index;
+
+ return (1.0f - t) * table[index] + t * table[nindex];
+}
+
+static void eevee_create_cdf_table_temporal_sampling(void)
+{
+ float *cdf_table = MEM_mallocN(sizeof(float) * FILTER_CDF_TABLE_SIZE, "Eevee Filter CDF table");
+
+ float filter_width = 2.0f; /* Use a 2 pixel footprint by default. */
+
+ {
+ /* Use blackman-harris filter. */
+ filter_width *= 2.0f;
+ compute_cdf(filter_blackman_harris, cdf_table);
+ }
+
+ invert_cdf(cdf_table, e_data.inverted_cdf);
+
+ /* Scale and offset table. */
+ for (int i = 0; i < FILTER_CDF_TABLE_SIZE; ++i) {
+ e_data.inverted_cdf[i] = (e_data.inverted_cdf[i] - 0.5f) * filter_width;
+ }
+
+ MEM_freeN(cdf_table);
+}
+
+void EEVEE_temporal_sampling_matrices_calc(
+ EEVEE_EffectsInfo *effects, float viewmat[4][4], float persmat[4][4], const double ht_point[2])
+{
+ const float *viewport_size = DRW_viewport_size_get();
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ Scene *scene = draw_ctx->scene;
+ RenderData *rd = &scene->r;
+
+ float filter_size = rd->gauss; /* Sigh.. Stupid legacy naming. */
+
+ float ofs_x = eval_table(e_data.inverted_cdf, (float)(ht_point[0])) * filter_size;
+ float ofs_y = eval_table(e_data.inverted_cdf, (float)(ht_point[1])) * filter_size;
+
+ window_translate_m4(
+ effects->overide_winmat, persmat,
+ ofs_x / viewport_size[0],
+ ofs_y / viewport_size[1]);
+
+ mul_m4_m4m4(effects->overide_persmat, effects->overide_winmat, viewmat);
+ invert_m4_m4(effects->overide_persinv, effects->overide_persmat);
+ invert_m4_m4(effects->overide_wininv, effects->overide_winmat);
+}
+
+int EEVEE_temporal_sampling_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
+{
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_FramebufferList *fbl = vedata->fbl;
+ EEVEE_TextureList *txl = vedata->txl;
+ EEVEE_EffectsInfo *effects = stl->effects;
+
+ /* Reset for each "redraw". When rendering using ogl render,
+ * we accumulate the redraw inside the drawing loop in eevee_draw_background().
+ * But we do NOT accumulate between "redraw" (as in full draw manager drawloop)
+ * because the opengl render already does that. */
+ effects->taa_render_sample = 1;
+
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ ViewLayer *view_layer = draw_ctx->view_layer;
+ IDProperty *props = BKE_view_layer_engine_evaluated_get(view_layer, COLLECTION_MODE_NONE, RE_engine_id_BLENDER_EEVEE);
+
+ if ((BKE_collection_engine_property_value_get_int(props, "taa_samples") != 1 &&
+ /* FIXME the motion blur camera evaluation is tagging view_updated
+ * thus making the TAA always reset and never stopping rendering. */
+ (effects->enabled_effects & EFFECT_MOTION_BLUR) == 0) ||
+ DRW_state_is_image_render())
+ {
+ const float *viewport_size = DRW_viewport_size_get();
+ float persmat[4][4], viewmat[4][4];
+
+ if (!e_data.taa_resolve_sh) {
+ eevee_create_shader_temporal_sampling();
+ eevee_create_cdf_table_temporal_sampling();
+ }
+
+ /* Until we support reprojection, we need to make sure
+ * that the history buffer contains correct information. */
+ bool view_is_valid = stl->g_data->valid_double_buffer;
+
+ view_is_valid = view_is_valid && (stl->g_data->view_updated == false);
+
+ effects->taa_total_sample = BKE_collection_engine_property_value_get_int(props, "taa_samples");
+ MAX2(effects->taa_total_sample, 0);
+
+ DRW_viewport_matrix_get(persmat, DRW_MAT_PERS);
+ DRW_viewport_matrix_get(viewmat, DRW_MAT_VIEW);
+ DRW_viewport_matrix_get(effects->overide_winmat, DRW_MAT_WIN);
+ /* The view is jittered by the oglrenderer. So avoid testing in this case. */
+ if (!DRW_state_is_image_render()) {
+ view_is_valid = view_is_valid && compare_m4m4(persmat, effects->prev_drw_persmat, FLT_MIN);
+ copy_m4_m4(effects->prev_drw_persmat, persmat);
+ }
+
+ /* Prevent ghosting from probe data. */
+ view_is_valid = view_is_valid && (effects->prev_drw_support == DRW_state_draw_support());
+ effects->prev_drw_support = DRW_state_draw_support();
+
+ if (((effects->taa_total_sample == 0) || (effects->taa_current_sample < effects->taa_total_sample)) ||
+ DRW_state_is_image_render())
+ {
+ if (view_is_valid) {
+ /* OGL render already jitter the camera. */
+ if (!DRW_state_is_image_render()) {
+ effects->taa_current_sample += 1;
+
+ double ht_point[2];
+ double ht_offset[2] = {0.0, 0.0};
+ unsigned int ht_primes[2] = {2, 3};
+
+ BLI_halton_2D(ht_primes, ht_offset, effects->taa_current_sample - 1, ht_point);
+
+ EEVEE_temporal_sampling_matrices_calc(effects, viewmat, persmat, ht_point);
+
+ DRW_viewport_matrix_override_set(effects->overide_persmat, DRW_MAT_PERS);
+ DRW_viewport_matrix_override_set(effects->overide_persinv, DRW_MAT_PERSINV);
+ DRW_viewport_matrix_override_set(effects->overide_winmat, DRW_MAT_WIN);
+ DRW_viewport_matrix_override_set(effects->overide_wininv, DRW_MAT_WININV);
+ }
+ }
+ else {
+ effects->taa_current_sample = 1;
+ }
+ }
+ else {
+ effects->taa_current_sample = 1;
+ }
+
+ DRWFboTexture tex_double_buffer = {&txl->depth_double_buffer, DRW_TEX_DEPTH_24_STENCIL_8, 0};
+
+ DRW_framebuffer_init(&fbl->depth_double_buffer_fb, &draw_engine_eevee_type,
+ (int)viewport_size[0], (int)viewport_size[1],
+ &tex_double_buffer, 1);
+
+ return EFFECT_TAA | EFFECT_DOUBLE_BUFFER | EFFECT_POST_BUFFER;
+ }
+
+ effects->taa_current_sample = 1;
+
+ /* Cleanup to release memory */
+ DRW_TEXTURE_FREE_SAFE(txl->depth_double_buffer);
+ DRW_FRAMEBUFFER_FREE_SAFE(fbl->depth_double_buffer_fb);
+
+ return 0;
+}
+
+void EEVEE_temporal_sampling_cache_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
+{
+ EEVEE_PassList *psl = vedata->psl;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_TextureList *txl = vedata->txl;
+ EEVEE_EffectsInfo *effects = stl->effects;
+
+ if ((effects->enabled_effects & EFFECT_TAA) != 0) {
+ psl->taa_resolve = DRW_pass_create("Temporal AA Resolve", DRW_STATE_WRITE_COLOR);
+ DRWShadingGroup *grp = DRW_shgroup_create(e_data.taa_resolve_sh, psl->taa_resolve);
+
+ DRW_shgroup_uniform_buffer(grp, "historyBuffer", &txl->color_double_buffer);
+ DRW_shgroup_uniform_buffer(grp, "colorBuffer", &txl->color);
+ DRW_shgroup_uniform_float(grp, "alpha", &effects->taa_alpha, 1);
+ DRW_shgroup_call_add(grp, DRW_cache_fullscreen_quad_get(), NULL);
+ }
+}
+
+void EEVEE_temporal_sampling_draw(EEVEE_Data *vedata)
+{
+ EEVEE_PassList *psl = vedata->psl;
+ EEVEE_TextureList *txl = vedata->txl;
+ EEVEE_FramebufferList *fbl = vedata->fbl;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_EffectsInfo *effects = stl->effects;
+
+ if ((effects->enabled_effects & EFFECT_TAA) != 0) {
+ if (effects->taa_current_sample != 1) {
+ if (DRW_state_is_image_render()) {
+ /* See EEVEE_temporal_sampling_init() for more details. */
+ effects->taa_alpha = 1.0f / (float)(effects->taa_render_sample);
+ }
+ else {
+ effects->taa_alpha = 1.0f / (float)(effects->taa_current_sample);
+ }
+
+ DRW_framebuffer_bind(fbl->effect_fb);
+ DRW_draw_pass(psl->taa_resolve);
+
+ /* Restore the depth from sample 1. */
+ if (!DRW_state_is_image_render()) {
+ DRW_framebuffer_blit(fbl->depth_double_buffer_fb, fbl->main, true, false);
+ }
+
+ /* Special Swap */
+ SWAP(struct GPUFrameBuffer *, fbl->effect_fb, fbl->double_buffer);
+ SWAP(GPUTexture *, txl->color_post, txl->color_double_buffer);
+ effects->swap_double_buffer = false;
+ effects->source_buffer = txl->color_double_buffer;
+ effects->target_buffer = fbl->main;
+ }
+ else {
+ /* Save the depth buffer for the next frame.
+ * This saves us from doing anything special
+ * in the other mode engines. */
+ if (!DRW_state_is_image_render()) {
+ DRW_framebuffer_blit(fbl->main, fbl->depth_double_buffer_fb, true, false);
+ }
+ }
+
+ /* Make each loop count when doing a render. */
+ if (DRW_state_is_image_render()) {
+ effects->taa_render_sample += 1;
+ effects->taa_current_sample += 1;
+ }
+ else {
+ if ((effects->taa_total_sample == 0) ||
+ (effects->taa_current_sample < effects->taa_total_sample))
+ {
+ DRW_viewport_request_redraw();
+ }
+ }
+ }
+
+}
+
+void EEVEE_temporal_sampling_free(void)
+{
+ DRW_SHADER_FREE_SAFE(e_data.taa_resolve_sh);
+}
diff --git a/source/blender/draw/engines/eevee/eevee_volumes.c b/source/blender/draw/engines/eevee/eevee_volumes.c
new file mode 100644
index 00000000000..2c5b9072837
--- /dev/null
+++ b/source/blender/draw/engines/eevee/eevee_volumes.c
@@ -0,0 +1,593 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file eevee_volumes.c
+ * \ingroup draw_engine
+ *
+ * Volumetric effects rendering using frostbite approach.
+ */
+
+#include "DRW_render.h"
+
+#include "BLI_rand.h"
+#include "BLI_string_utils.h"
+
+#include "DNA_object_force_types.h"
+#include "DNA_smoke_types.h"
+#include "DNA_world_types.h"
+
+#include "BKE_global.h" /* for G.debug_value */
+#include "BKE_modifier.h"
+#include "BKE_mesh.h"
+#include "BKE_object.h"
+
+#include "ED_screen.h"
+
+#include "eevee_private.h"
+#include "GPU_draw.h"
+#include "GPU_texture.h"
+
+static struct {
+ char *volumetric_common_lib;
+ char *volumetric_common_lamps_lib;
+
+ struct GPUShader *volumetric_clear_sh;
+ struct GPUShader *volumetric_scatter_sh;
+ struct GPUShader *volumetric_scatter_with_lamps_sh;
+ struct GPUShader *volumetric_integration_sh;
+ struct GPUShader *volumetric_resolve_sh;
+
+ GPUTexture *color_src;
+ GPUTexture *depth_src;
+
+ /* List of all smoke domains rendered within this frame. */
+ ListBase smoke_domains;
+} e_data = {NULL}; /* Engine data */
+
+extern char datatoc_bsdf_common_lib_glsl[];
+extern char datatoc_bsdf_direct_lib_glsl[];
+extern char datatoc_common_uniforms_lib_glsl[];
+extern char datatoc_octahedron_lib_glsl[];
+extern char datatoc_irradiance_lib_glsl[];
+extern char datatoc_lamps_lib_glsl[];
+extern char datatoc_volumetric_frag_glsl[];
+extern char datatoc_volumetric_geom_glsl[];
+extern char datatoc_volumetric_vert_glsl[];
+extern char datatoc_volumetric_resolve_frag_glsl[];
+extern char datatoc_volumetric_scatter_frag_glsl[];
+extern char datatoc_volumetric_integration_frag_glsl[];
+extern char datatoc_volumetric_lib_glsl[];
+extern char datatoc_gpu_shader_fullscreen_vert_glsl[];
+
+static void eevee_create_shader_volumes(void)
+{
+ e_data.volumetric_common_lib = BLI_string_joinN(
+ datatoc_common_uniforms_lib_glsl,
+ datatoc_bsdf_common_lib_glsl,
+ datatoc_volumetric_lib_glsl);
+
+ e_data.volumetric_common_lamps_lib = BLI_string_joinN(
+ datatoc_common_uniforms_lib_glsl,
+ datatoc_bsdf_common_lib_glsl,
+ datatoc_bsdf_direct_lib_glsl,
+ datatoc_octahedron_lib_glsl,
+ datatoc_irradiance_lib_glsl,
+ datatoc_lamps_lib_glsl,
+ datatoc_volumetric_lib_glsl);
+
+ e_data.volumetric_clear_sh = DRW_shader_create_with_lib(
+ datatoc_volumetric_vert_glsl,
+ datatoc_volumetric_geom_glsl,
+ datatoc_volumetric_frag_glsl,
+ e_data.volumetric_common_lib,
+ "#define VOLUMETRICS\n"
+ "#define CLEAR\n");
+ e_data.volumetric_scatter_sh = DRW_shader_create_with_lib(
+ datatoc_volumetric_vert_glsl,
+ datatoc_volumetric_geom_glsl,
+ datatoc_volumetric_scatter_frag_glsl,
+ e_data.volumetric_common_lamps_lib,
+ SHADER_DEFINES
+ "#define VOLUMETRICS\n"
+ "#define VOLUME_SHADOW\n");
+ e_data.volumetric_scatter_with_lamps_sh = DRW_shader_create_with_lib(
+ datatoc_volumetric_vert_glsl,
+ datatoc_volumetric_geom_glsl,
+ datatoc_volumetric_scatter_frag_glsl,
+ e_data.volumetric_common_lamps_lib,
+ SHADER_DEFINES
+ "#define VOLUMETRICS\n"
+ "#define VOLUME_LIGHTING\n"
+ "#define VOLUME_SHADOW\n");
+ e_data.volumetric_integration_sh = DRW_shader_create_with_lib(
+ datatoc_volumetric_vert_glsl,
+ datatoc_volumetric_geom_glsl,
+ datatoc_volumetric_integration_frag_glsl,
+ e_data.volumetric_common_lib, NULL);
+ e_data.volumetric_resolve_sh = DRW_shader_create_with_lib(
+ datatoc_gpu_shader_fullscreen_vert_glsl, NULL,
+ datatoc_volumetric_resolve_frag_glsl,
+ e_data.volumetric_common_lib, NULL);
+}
+
+void EEVEE_volumes_set_jitter(EEVEE_ViewLayerData *sldata, unsigned int current_sample)
+{
+ EEVEE_CommonUniformBuffer *common_data = &sldata->common_data;
+
+ double ht_point[3];
+ double ht_offset[3] = {0.0, 0.0};
+ unsigned int ht_primes[3] = {3, 7, 2};
+
+ BLI_halton_3D(ht_primes, ht_offset, current_sample, ht_point);
+
+ common_data->vol_jitter[0] = (float)ht_point[0];
+ common_data->vol_jitter[1] = (float)ht_point[1];
+ common_data->vol_jitter[2] = (float)ht_point[2];
+}
+
+int EEVEE_volumes_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
+{
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_FramebufferList *fbl = vedata->fbl;
+ EEVEE_TextureList *txl = vedata->txl;
+ EEVEE_EffectsInfo *effects = stl->effects;
+ EEVEE_CommonUniformBuffer *common_data = &sldata->common_data;
+
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ ViewLayer *view_layer = draw_ctx->view_layer;
+ IDProperty *props = BKE_view_layer_engine_evaluated_get(view_layer, COLLECTION_MODE_NONE, RE_engine_id_BLENDER_EEVEE);
+
+ const float *viewport_size = DRW_viewport_size_get();
+
+ BLI_listbase_clear(&e_data.smoke_domains);
+
+ if (BKE_collection_engine_property_value_get_bool(props, "volumetric_enable")) {
+
+ /* Shaders */
+ if (!e_data.volumetric_scatter_sh) {
+ eevee_create_shader_volumes();
+ }
+
+ int tile_size = BKE_collection_engine_property_value_get_int(props, "volumetric_tile_size");
+
+ /* Find Froxel Texture resolution. */
+ int tex_size[3];
+
+ tex_size[0] = (int)ceilf(fmaxf(1.0f, viewport_size[0] / (float)tile_size));
+ tex_size[1] = (int)ceilf(fmaxf(1.0f, viewport_size[1] / (float)tile_size));
+ tex_size[2] = max_ii(BKE_collection_engine_property_value_get_int(props, "volumetric_samples"), 1);
+
+ common_data->vol_coord_scale[0] = viewport_size[0] / (float)(tile_size * tex_size[0]);
+ common_data->vol_coord_scale[1] = viewport_size[1] / (float)(tile_size * tex_size[1]);
+
+ /* TODO compute snap to maxZBuffer for clustered rendering */
+
+ if ((common_data->vol_tex_size[0] != tex_size[0]) ||
+ (common_data->vol_tex_size[1] != tex_size[1]) ||
+ (common_data->vol_tex_size[2] != tex_size[2]))
+ {
+ DRW_TEXTURE_FREE_SAFE(txl->volume_prop_scattering);
+ DRW_TEXTURE_FREE_SAFE(txl->volume_prop_extinction);
+ DRW_TEXTURE_FREE_SAFE(txl->volume_prop_emission);
+ DRW_TEXTURE_FREE_SAFE(txl->volume_prop_phase);
+ DRW_TEXTURE_FREE_SAFE(txl->volume_scatter);
+ DRW_TEXTURE_FREE_SAFE(txl->volume_transmittance);
+ DRW_TEXTURE_FREE_SAFE(txl->volume_scatter_history);
+ DRW_TEXTURE_FREE_SAFE(txl->volume_transmittance_history);
+ DRW_FRAMEBUFFER_FREE_SAFE(fbl->volumetric_fb);
+ DRW_FRAMEBUFFER_FREE_SAFE(fbl->volumetric_scat_fb);
+ DRW_FRAMEBUFFER_FREE_SAFE(fbl->volumetric_integ_fb);
+ common_data->vol_tex_size[0] = tex_size[0];
+ common_data->vol_tex_size[1] = tex_size[1];
+ common_data->vol_tex_size[2] = tex_size[2];
+
+ common_data->vol_inv_tex_size[0] = 1.0f / (float)(tex_size[0]);
+ common_data->vol_inv_tex_size[1] = 1.0f / (float)(tex_size[1]);
+ common_data->vol_inv_tex_size[2] = 1.0f / (float)(tex_size[2]);
+ }
+
+ /* Like frostbite's paper, 5% blend of the new frame. */
+ common_data->vol_history_alpha = (txl->volume_prop_scattering == NULL) ? 0.0f : 0.95f;
+
+ if (txl->volume_prop_scattering == NULL) {
+ /* Volume properties: We evaluate all volumetric objects
+ * and store their final properties into each froxel */
+ txl->volume_prop_scattering = DRW_texture_create_3D(tex_size[0], tex_size[1], tex_size[2],
+ DRW_TEX_RGB_11_11_10, DRW_TEX_FILTER, NULL);
+ txl->volume_prop_extinction = DRW_texture_create_3D(tex_size[0], tex_size[1], tex_size[2],
+ DRW_TEX_RGB_11_11_10, DRW_TEX_FILTER, NULL);
+ txl->volume_prop_emission = DRW_texture_create_3D(tex_size[0], tex_size[1], tex_size[2],
+ DRW_TEX_RGB_11_11_10, DRW_TEX_FILTER, NULL);
+ txl->volume_prop_phase = DRW_texture_create_3D(tex_size[0], tex_size[1], tex_size[2],
+ DRW_TEX_RG_16, DRW_TEX_FILTER, NULL);
+
+ /* Volume scattering: We compute for each froxel the
+ * Scattered light towards the view. We also resolve temporal
+ * super sampling during this stage. */
+ txl->volume_scatter = DRW_texture_create_3D(tex_size[0], tex_size[1], tex_size[2],
+ DRW_TEX_RGB_11_11_10, DRW_TEX_FILTER, NULL);
+ txl->volume_transmittance = DRW_texture_create_3D(tex_size[0], tex_size[1], tex_size[2],
+ DRW_TEX_RGB_11_11_10, DRW_TEX_FILTER, NULL);
+
+ /* Final integration: We compute for each froxel the
+ * amount of scattered light and extinction coef at this
+ * given depth. We use theses textures as double buffer
+ * for the volumetric history. */
+ txl->volume_scatter_history = DRW_texture_create_3D(tex_size[0], tex_size[1], tex_size[2],
+ DRW_TEX_RGB_11_11_10, DRW_TEX_FILTER, NULL);
+ txl->volume_transmittance_history = DRW_texture_create_3D(tex_size[0], tex_size[1], tex_size[2],
+ DRW_TEX_RGB_11_11_10, DRW_TEX_FILTER, NULL);
+ }
+
+ /* Temporal Super sampling jitter */
+ unsigned int ht_primes[3] = {3, 7, 2};
+ unsigned int current_sample = 0;
+
+ /* If TAA is in use do not use the history buffer. */
+ bool do_taa = ((effects->enabled_effects & EFFECT_TAA) != 0);
+
+ if (draw_ctx->evil_C != NULL) {
+ struct wmWindowManager *wm = CTX_wm_manager(draw_ctx->evil_C);
+ do_taa = do_taa && (ED_screen_animation_no_scrub(wm) == NULL);
+ }
+
+ if (do_taa) {
+ common_data->vol_history_alpha = 0.0f;
+ current_sample = effects->taa_current_sample - 1;
+ effects->volume_current_sample = -1;
+ }
+ else {
+ const unsigned int max_sample = (ht_primes[0] * ht_primes[1] * ht_primes[2]);
+ current_sample = effects->volume_current_sample = (effects->volume_current_sample + 1) % max_sample;
+ if (current_sample != max_sample - 1) {
+ DRW_viewport_request_redraw();
+ }
+ }
+
+ EEVEE_volumes_set_jitter(sldata, current_sample);
+
+ /* Framebuffer setup */
+ DRWFboTexture tex_vol[4] = {{&txl->volume_prop_scattering, DRW_TEX_RGB_11_11_10, DRW_TEX_FILTER},
+ {&txl->volume_prop_extinction, DRW_TEX_RGB_11_11_10, DRW_TEX_FILTER},
+ {&txl->volume_prop_emission, DRW_TEX_RGB_11_11_10, DRW_TEX_FILTER},
+ {&txl->volume_prop_phase, DRW_TEX_RG_16, DRW_TEX_FILTER}};
+
+ DRW_framebuffer_init(&fbl->volumetric_fb, &draw_engine_eevee_type,
+ (int)tex_size[0], (int)tex_size[1],
+ tex_vol, 4);
+
+ DRWFboTexture tex_vol_scat[2] = {{&txl->volume_scatter, DRW_TEX_RGB_11_11_10, DRW_TEX_FILTER},
+ {&txl->volume_transmittance, DRW_TEX_RGB_11_11_10, DRW_TEX_FILTER}};
+
+ DRW_framebuffer_init(&fbl->volumetric_scat_fb, &draw_engine_eevee_type,
+ (int)tex_size[0], (int)tex_size[1],
+ tex_vol_scat, 2);
+
+ DRWFboTexture tex_vol_integ[2] = {{&txl->volume_scatter_history, DRW_TEX_RGB_11_11_10, DRW_TEX_FILTER},
+ {&txl->volume_transmittance_history, DRW_TEX_RGB_11_11_10, DRW_TEX_FILTER}};
+
+ DRW_framebuffer_init(&fbl->volumetric_integ_fb, &draw_engine_eevee_type,
+ (int)tex_size[0], (int)tex_size[1],
+ tex_vol_integ, 2);
+
+ float integration_start = BKE_collection_engine_property_value_get_float(props, "volumetric_start");
+ float integration_end = BKE_collection_engine_property_value_get_float(props, "volumetric_end");
+ common_data->vol_light_clamp = BKE_collection_engine_property_value_get_float(props, "volumetric_light_clamp");
+
+ common_data->vol_shadow_steps = (float)BKE_collection_engine_property_value_get_int(props, "volumetric_shadow_samples");
+ if (BKE_collection_engine_property_value_get_bool(props, "volumetric_shadows")) {
+ }
+ else {
+ common_data->vol_shadow_steps = 0;
+ }
+
+ if (DRW_viewport_is_persp_get()) {
+ float sample_distribution = BKE_collection_engine_property_value_get_float(props, "volumetric_sample_distribution");
+ sample_distribution = 4.0f * (1.00001f - sample_distribution);
+
+ const float clip_start = common_data->view_vecs[0][2];
+ /* Negate */
+ float near = integration_start = min_ff(-integration_start, clip_start - 1e-4f);
+ float far = integration_end = min_ff(-integration_end, near - 1e-4f);
+
+ common_data->vol_depth_param[0] = (far - near * exp2(1.0f / sample_distribution)) / (far - near);
+ common_data->vol_depth_param[1] = (1.0f - common_data->vol_depth_param[0]) / near;
+ common_data->vol_depth_param[2] = sample_distribution;
+ }
+ else {
+ const float clip_start = common_data->view_vecs[0][2];
+ const float clip_end = clip_start + common_data->view_vecs[1][2];
+ integration_start = min_ff(integration_end, clip_start);
+ integration_end = max_ff(-integration_end, clip_end);
+
+ common_data->vol_depth_param[0] = integration_start;
+ common_data->vol_depth_param[1] = integration_end;
+ common_data->vol_depth_param[2] = 1.0f / (integration_end - integration_start);
+ }
+
+ /* Disable clamp if equal to 0. */
+ if (common_data->vol_light_clamp == 0.0) {
+ common_data->vol_light_clamp = FLT_MAX;
+ }
+
+ common_data->vol_use_lights = BKE_collection_engine_property_value_get_bool(props, "volumetric_lights");
+
+ return EFFECT_VOLUMETRIC | EFFECT_POST_BUFFER;
+ }
+
+ /* Cleanup to release memory */
+ DRW_TEXTURE_FREE_SAFE(txl->volume_prop_scattering);
+ DRW_TEXTURE_FREE_SAFE(txl->volume_prop_extinction);
+ DRW_TEXTURE_FREE_SAFE(txl->volume_prop_emission);
+ DRW_TEXTURE_FREE_SAFE(txl->volume_prop_phase);
+ DRW_TEXTURE_FREE_SAFE(txl->volume_scatter);
+ DRW_TEXTURE_FREE_SAFE(txl->volume_transmittance);
+ DRW_TEXTURE_FREE_SAFE(txl->volume_scatter_history);
+ DRW_TEXTURE_FREE_SAFE(txl->volume_transmittance_history);
+ DRW_FRAMEBUFFER_FREE_SAFE(fbl->volumetric_fb);
+ DRW_FRAMEBUFFER_FREE_SAFE(fbl->volumetric_scat_fb);
+ DRW_FRAMEBUFFER_FREE_SAFE(fbl->volumetric_integ_fb);
+
+ return 0;
+}
+
+void EEVEE_volumes_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
+{
+ EEVEE_PassList *psl = vedata->psl;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_TextureList *txl = vedata->txl;
+ EEVEE_EffectsInfo *effects = stl->effects;
+ EEVEE_CommonUniformBuffer *common_data = &sldata->common_data;
+
+ if ((effects->enabled_effects & EFFECT_VOLUMETRIC) != 0) {
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ Scene *scene = draw_ctx->scene;
+ DRWShadingGroup *grp;
+
+ /* Quick breakdown of the Volumetric rendering:
+ *
+ * The rendering is separated in 4 stages:
+ *
+ * - Material Parameters : we collect volume properties of
+ * all participating media in the scene and store them in
+ * a 3D texture aligned with the 3D frustum.
+ * This is done in 2 passes, one that clear the texture
+ * and/or evaluate the world volumes, and the 2nd one that
+ * additively render object volumes.
+ *
+ * - Light Scattering : the volume properties then are sampled
+ * and light scattering is evaluated for each cell of the
+ * volume texture. Temporal supersampling (if enabled) occurs here.
+ *
+ * - Volume Integration : the scattered light and extinction is
+ * integrated (accumulated) along the viewrays. The result is stored
+ * for every cell in another texture.
+ *
+ * - Fullscreen Resolve : From the previous stage, we get two
+ * 3D textures that contains integrated scatered light and extinction
+ * for "every" positions in the frustum. We only need to sample
+ * them and blend the scene color with thoses factors. This also
+ * work for alpha blended materials.
+ **/
+
+ /* World pass is not additive as it also clear the buffer. */
+ psl->volumetric_world_ps = DRW_pass_create("Volumetric World", DRW_STATE_WRITE_COLOR);
+
+ /* World Volumetric */
+ struct World *wo = scene->world;
+ if (wo != NULL && wo->use_nodes && wo->nodetree) {
+ struct GPUMaterial *mat = EEVEE_material_world_volume_get(scene, wo);
+
+ grp = DRW_shgroup_material_empty_tri_batch_create(mat,
+ psl->volumetric_world_ps,
+ common_data->vol_tex_size[2]);
+
+ if (grp) {
+ DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
+ }
+ }
+ else {
+ /* If no world or volume material is present just clear the buffer with this drawcall */
+ grp = DRW_shgroup_empty_tri_batch_create(e_data.volumetric_clear_sh,
+ psl->volumetric_world_ps,
+ common_data->vol_tex_size[2]);
+
+ DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
+ }
+
+ /* Volumetric Objects */
+ psl->volumetric_objects_ps = DRW_pass_create("Volumetric Properties", DRW_STATE_WRITE_COLOR |
+ DRW_STATE_ADDITIVE);
+
+ struct GPUShader *scatter_sh = (common_data->vol_use_lights) ? e_data.volumetric_scatter_with_lamps_sh
+ : e_data.volumetric_scatter_sh;
+ psl->volumetric_scatter_ps = DRW_pass_create("Volumetric Scattering", DRW_STATE_WRITE_COLOR);
+ grp = DRW_shgroup_empty_tri_batch_create(scatter_sh, psl->volumetric_scatter_ps,
+ common_data->vol_tex_size[2]);
+ DRW_shgroup_uniform_buffer(grp, "irradianceGrid", &sldata->irradiance_pool);
+ DRW_shgroup_uniform_buffer(grp, "shadowTexture", &sldata->shadow_pool);
+ DRW_shgroup_uniform_buffer(grp, "volumeScattering", &txl->volume_prop_scattering);
+ DRW_shgroup_uniform_buffer(grp, "volumeExtinction", &txl->volume_prop_extinction);
+ DRW_shgroup_uniform_buffer(grp, "volumeEmission", &txl->volume_prop_emission);
+ DRW_shgroup_uniform_buffer(grp, "volumePhase", &txl->volume_prop_phase);
+ DRW_shgroup_uniform_buffer(grp, "historyScattering", &txl->volume_scatter_history);
+ DRW_shgroup_uniform_buffer(grp, "historyTransmittance", &txl->volume_transmittance_history);
+ DRW_shgroup_uniform_block(grp, "light_block", sldata->light_ubo);
+ DRW_shgroup_uniform_block(grp, "shadow_block", sldata->shadow_ubo);
+ DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
+
+ psl->volumetric_integration_ps = DRW_pass_create("Volumetric Integration", DRW_STATE_WRITE_COLOR);
+ grp = DRW_shgroup_empty_tri_batch_create(e_data.volumetric_integration_sh,
+ psl->volumetric_integration_ps,
+ common_data->vol_tex_size[2]);
+ DRW_shgroup_uniform_buffer(grp, "volumeScattering", &txl->volume_scatter);
+ DRW_shgroup_uniform_buffer(grp, "volumeExtinction", &txl->volume_transmittance);
+ DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
+
+ psl->volumetric_resolve_ps = DRW_pass_create("Volumetric Resolve", DRW_STATE_WRITE_COLOR);
+ grp = DRW_shgroup_create(e_data.volumetric_resolve_sh, psl->volumetric_resolve_ps);
+ DRW_shgroup_uniform_buffer(grp, "inScattering", &txl->volume_scatter);
+ DRW_shgroup_uniform_buffer(grp, "inTransmittance", &txl->volume_transmittance);
+ DRW_shgroup_uniform_buffer(grp, "inSceneColor", &e_data.color_src);
+ DRW_shgroup_uniform_buffer(grp, "inSceneDepth", &e_data.depth_src);
+ DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
+ DRW_shgroup_call_add(grp, DRW_cache_fullscreen_quad_get(), NULL);
+ }
+}
+
+void EEVEE_volumes_cache_object_add(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, Scene *scene, Object *ob)
+{
+ float *texcoloc = NULL;
+ float *texcosize = NULL;
+ struct ModifierData *md = NULL;
+ Material *ma = give_current_material(ob, 1);
+
+ if (ma == NULL) {
+ return;
+ }
+
+ struct GPUMaterial *mat = EEVEE_material_mesh_volume_get(scene, ma);
+
+ DRWShadingGroup *grp = DRW_shgroup_material_empty_tri_batch_create(mat, vedata->psl->volumetric_objects_ps, sldata->common_data.vol_tex_size[2]);
+
+ /* Making sure it's updated. */
+ invert_m4_m4(ob->imat, ob->obmat);
+
+ BKE_mesh_texspace_get_reference((struct Mesh *)ob->data, NULL, &texcoloc, NULL, &texcosize);
+
+ if (grp) {
+ DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
+ DRW_shgroup_uniform_mat4(grp, "volumeObjectMatrix", (float *)ob->imat);
+ DRW_shgroup_uniform_vec3(grp, "volumeOrcoLoc", texcoloc, 1);
+ DRW_shgroup_uniform_vec3(grp, "volumeOrcoSize", texcosize, 1);
+ }
+
+ /* Smoke Simulation */
+ if (((ob->base_flag & BASE_FROMDUPLI) == 0) &&
+ (md = modifiers_findByType(ob, eModifierType_Smoke)) &&
+ (modifier_isEnabled(scene, md, eModifierMode_Realtime)))
+ {
+ SmokeModifierData *smd = (SmokeModifierData *)md;
+ SmokeDomainSettings *sds = smd->domain;
+ /* Don't show smoke before simulation starts, this could be made an option in the future. */
+ const bool show_smoke = (CFRA >= sds->point_cache[0]->startframe);
+
+ if (sds->fluid && show_smoke) {
+ if (!sds->wt || !(sds->viewsettings & MOD_SMOKE_VIEW_SHOWBIG)) {
+ GPU_create_smoke(smd, 0);
+ }
+ else if (sds->wt && (sds->viewsettings & MOD_SMOKE_VIEW_SHOWBIG)) {
+ GPU_create_smoke(smd, 1);
+ }
+ BLI_addtail(&e_data.smoke_domains, BLI_genericNodeN(smd));
+ }
+
+ if (sds->tex != NULL) {
+ DRW_shgroup_uniform_buffer(grp, "sampdensity", &sds->tex);
+ }
+ if (sds->tex_flame != NULL) {
+ DRW_shgroup_uniform_buffer(grp, "sampflame", &sds->tex_flame);
+ }
+ }
+}
+
+void EEVEE_volumes_compute(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
+{
+ EEVEE_PassList *psl = vedata->psl;
+ EEVEE_TextureList *txl = vedata->txl;
+ EEVEE_FramebufferList *fbl = vedata->fbl;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_EffectsInfo *effects = stl->effects;
+ if ((effects->enabled_effects & EFFECT_VOLUMETRIC) != 0) {
+ DRW_stats_group_start("Volumetrics");
+
+ /* Step 1: Participating Media Properties */
+ DRW_framebuffer_bind(fbl->volumetric_fb);
+ DRW_draw_pass(psl->volumetric_world_ps);
+ DRW_draw_pass(psl->volumetric_objects_ps);
+
+ /* Step 2: Scatter Light */
+ DRW_framebuffer_bind(fbl->volumetric_scat_fb);
+ DRW_draw_pass(psl->volumetric_scatter_ps);
+
+ /* Step 3: Integration */
+ DRW_framebuffer_bind(fbl->volumetric_integ_fb);
+ DRW_draw_pass(psl->volumetric_integration_ps);
+
+ /* Swap volume history buffers */
+ SWAP(struct GPUFrameBuffer *, fbl->volumetric_scat_fb, fbl->volumetric_integ_fb);
+ SWAP(GPUTexture *, txl->volume_scatter, txl->volume_scatter_history);
+ SWAP(GPUTexture *, txl->volume_transmittance, txl->volume_transmittance_history);
+
+ /* Restore */
+ DRW_framebuffer_bind(fbl->main);
+
+ DRW_stats_group_end();
+ }
+}
+
+void EEVEE_volumes_resolve(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
+{
+ EEVEE_PassList *psl = vedata->psl;
+ EEVEE_TextureList *txl = vedata->txl;
+ EEVEE_FramebufferList *fbl = vedata->fbl;
+ EEVEE_StorageList *stl = vedata->stl;
+ EEVEE_EffectsInfo *effects = stl->effects;
+
+ if ((effects->enabled_effects & EFFECT_VOLUMETRIC) != 0) {
+ DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
+
+ e_data.color_src = txl->color;
+ e_data.depth_src = dtxl->depth;
+
+ /* Step 4: Apply for opaque */
+ DRW_framebuffer_bind(fbl->effect_fb);
+ DRW_draw_pass(psl->volumetric_resolve_ps);
+
+ /* Swap the buffers and rebind depth to the current buffer */
+ DRW_framebuffer_texture_detach(dtxl->depth);
+ SWAP(struct GPUFrameBuffer *, fbl->main, fbl->effect_fb);
+ SWAP(GPUTexture *, txl->color, txl->color_post);
+ DRW_framebuffer_texture_attach(fbl->main, dtxl->depth, 0, 0);
+ }
+}
+
+void EEVEE_volumes_free_smoke_textures(void)
+{
+ /* Free Smoke Textures after rendering */
+ for (LinkData *link = e_data.smoke_domains.first; link; link = link->next) {
+ SmokeModifierData *smd = (SmokeModifierData *)link->data;
+ GPU_free_smoke(smd);
+ }
+ BLI_freelistN(&e_data.smoke_domains);
+}
+
+void EEVEE_volumes_free(void)
+{
+ MEM_SAFE_FREE(e_data.volumetric_common_lib);
+ MEM_SAFE_FREE(e_data.volumetric_common_lamps_lib);
+
+ DRW_SHADER_FREE_SAFE(e_data.volumetric_clear_sh);
+ DRW_SHADER_FREE_SAFE(e_data.volumetric_scatter_sh);
+ DRW_SHADER_FREE_SAFE(e_data.volumetric_scatter_with_lamps_sh);
+ DRW_SHADER_FREE_SAFE(e_data.volumetric_integration_sh);
+ DRW_SHADER_FREE_SAFE(e_data.volumetric_resolve_sh);
+}
diff --git a/source/blender/draw/engines/eevee/shaders/ambient_occlusion_lib.glsl b/source/blender/draw/engines/eevee/shaders/ambient_occlusion_lib.glsl
new file mode 100644
index 00000000000..55f66f5500a
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/ambient_occlusion_lib.glsl
@@ -0,0 +1,281 @@
+
+/* Based on Practical Realtime Strategies for Accurate Indirect Occlusion
+ * http://blog.selfshadow.com/publications/s2016-shading-course/activision/s2016_pbs_activision_occlusion.pdf
+ * http://blog.selfshadow.com/publications/s2016-shading-course/activision/s2016_pbs_activision_occlusion.pptx */
+
+#if defined(MESH_SHADER)
+# if !defined(USE_ALPHA_HASH)
+# if !defined(USE_ALPHA_CLIP)
+# if !defined(SHADOW_SHADER)
+# if !defined(USE_MULTIPLY)
+# if !defined(USE_ALPHA_BLEND)
+# define ENABLE_DEFERED_AO
+# endif
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifndef ENABLE_DEFERED_AO
+# if defined(STEP_RESOLVE)
+# define ENABLE_DEFERED_AO
+# endif
+#endif
+
+#define MAX_PHI_STEP 32
+#define MAX_SEARCH_ITER 32
+#define MAX_LOD 6.0
+
+#ifndef UTIL_TEX
+#define UTIL_TEX
+uniform sampler2DArray utilTex;
+#define texelfetch_noise_tex(coord) texelFetch(utilTex, ivec3(ivec2(coord) % LUT_SIZE, 2.0), 0)
+#endif /* UTIL_TEX */
+
+uniform sampler2D horizonBuffer;
+
+/* aoSettings flags */
+#define USE_AO 1
+#define USE_BENT_NORMAL 2
+#define USE_DENOISE 4
+
+vec4 pack_horizons(vec4 v) { return v * 0.5 + 0.5; }
+vec4 unpack_horizons(vec4 v) { return v * 2.0 - 1.0; }
+
+/* Returns maximum screen distance an AO ray can travel for a given view depth */
+vec2 get_max_dir(float view_depth)
+{
+ float homcco = ProjectionMatrix[2][3] * view_depth + ProjectionMatrix[3][3];
+ float max_dist = aoDistance / homcco;
+ return vec2(ProjectionMatrix[0][0], ProjectionMatrix[1][1]) * max_dist;
+}
+
+vec2 get_ao_dir(float jitter)
+{
+ /* Only half a turn because we integrate in slices. */
+ jitter *= M_PI;
+ return vec2(cos(jitter), sin(jitter));
+}
+
+void get_max_horizon_grouped(vec4 co1, vec4 co2, vec3 x, float lod, inout float h)
+{
+ co1 *= mipRatio[int(lod + 1.0)].xyxy; /* +1 because we are using half res top level */
+ co2 *= mipRatio[int(lod + 1.0)].xyxy; /* +1 because we are using half res top level */
+
+ float depth1 = textureLod(maxzBuffer, co1.xy, floor(lod)).r;
+ float depth2 = textureLod(maxzBuffer, co1.zw, floor(lod)).r;
+ float depth3 = textureLod(maxzBuffer, co2.xy, floor(lod)).r;
+ float depth4 = textureLod(maxzBuffer, co2.zw, floor(lod)).r;
+
+ vec4 len, s_h;
+
+ vec3 s1 = get_view_space_from_depth(co1.xy, depth1); /* s View coordinate */
+ vec3 omega_s1 = s1 - x;
+ len.x = length(omega_s1);
+ s_h.x = omega_s1.z / len.x;
+
+ vec3 s2 = get_view_space_from_depth(co1.zw, depth2); /* s View coordinate */
+ vec3 omega_s2 = s2 - x;
+ len.y = length(omega_s2);
+ s_h.y = omega_s2.z / len.y;
+
+ vec3 s3 = get_view_space_from_depth(co2.xy, depth3); /* s View coordinate */
+ vec3 omega_s3 = s3 - x;
+ len.z = length(omega_s3);
+ s_h.z = omega_s3.z / len.z;
+
+ vec3 s4 = get_view_space_from_depth(co2.zw, depth4); /* s View coordinate */
+ vec3 omega_s4 = s4 - x;
+ len.w = length(omega_s4);
+ s_h.w = omega_s4.z / len.w;
+
+ /* Blend weight after half the aoDistance to fade artifacts */
+ vec4 blend = saturate((1.0 - len / aoDistance) * 2.0);
+
+ h = mix(h, max(h, s_h.x), blend.x);
+ h = mix(h, max(h, s_h.y), blend.y);
+ h = mix(h, max(h, s_h.z), blend.z);
+ h = mix(h, max(h, s_h.w), blend.w);
+}
+
+vec2 search_horizon_sweep(vec2 t_phi, vec3 pos, vec2 uvs, float jitter, vec2 max_dir)
+{
+ max_dir *= max_v2(abs(t_phi));
+
+ /* Convert to pixel space. */
+ t_phi /= vec2(textureSize(maxzBuffer, 0));
+
+ /* Avoid division by 0 */
+ t_phi += vec2(1e-5);
+
+ jitter *= 0.25;
+
+ /* Compute end points */
+ vec2 corner1 = min(vec2(1.0) - uvs, max_dir); /* Top right */
+ vec2 corner2 = max(vec2(0.0) - uvs, -max_dir); /* Bottom left */
+ vec2 iter1 = corner1 / t_phi;
+ vec2 iter2 = corner2 / t_phi;
+
+ vec2 min_iter = max(-iter1, -iter2);
+ vec2 max_iter = max( iter1, iter2);
+
+ vec2 times = vec2(-min_v2(min_iter), min_v2(max_iter));
+
+ vec2 h = vec2(-1.0); /* init at cos(pi) */
+
+ /* This is freaking sexy optimized. */
+ for (float i = 0.0, ofs = 4.0, time = -1.0;
+ i < MAX_SEARCH_ITER && time > times.x;
+ i++, time -= ofs, ofs = min(exp2(MAX_LOD) * 4.0, ofs + ofs * aoQuality))
+ {
+ vec4 t = max(times.xxxx, vec4(time) - (vec4(0.25, 0.5, 0.75, 1.0) - jitter) * ofs);
+ vec4 cos1 = uvs.xyxy + t_phi.xyxy * t.xxyy;
+ vec4 cos2 = uvs.xyxy + t_phi.xyxy * t.zzww;
+ float lod = min(MAX_LOD, max(i - jitter * 4.0, 0.0) * aoQuality);
+ get_max_horizon_grouped(cos1, cos2, pos, lod, h.y);
+ }
+
+ for (float i = 0.0, ofs = 4.0, time = 1.0;
+ i < MAX_SEARCH_ITER && time < times.y;
+ i++, time += ofs, ofs = min(exp2(MAX_LOD) * 4.0, ofs + ofs * aoQuality))
+ {
+ vec4 t = min(times.yyyy, vec4(time) + (vec4(0.25, 0.5, 0.75, 1.0) - jitter) * ofs);
+ vec4 cos1 = uvs.xyxy + t_phi.xyxy * t.xxyy;
+ vec4 cos2 = uvs.xyxy + t_phi.xyxy * t.zzww;
+ float lod = min(MAX_LOD, max(i - jitter * 4.0, 0.0) * aoQuality);
+ get_max_horizon_grouped(cos1, cos2, pos, lod, h.x);
+ }
+
+ return h;
+}
+
+void integrate_slice(vec3 normal, vec2 t_phi, vec2 horizons, inout float visibility, inout vec3 bent_normal)
+{
+ /* Projecting Normal to Plane P defined by t_phi and omega_o */
+ vec3 np = vec3(t_phi.y, -t_phi.x, 0.0); /* Normal vector to Integration plane */
+ vec3 t = vec3(-t_phi, 0.0);
+ vec3 n_proj = normal - np * dot(np, normal);
+ float n_proj_len = max(1e-16, length(n_proj));
+
+ float cos_n = clamp(n_proj.z / n_proj_len, -1.0, 1.0);
+ float n = sign(dot(n_proj, t)) * fast_acos(cos_n); /* Angle between view vec and normal */
+
+ /* (Slide 54) */
+ vec2 h = fast_acos(horizons);
+ h.x = -h.x;
+
+ /* Clamping thetas (slide 58) */
+ h.x = n + max(h.x - n, -M_PI_2);
+ h.y = n + min(h.y - n, M_PI_2);
+
+ /* Solving inner integral */
+ vec2 h_2 = 2.0 * h;
+ vec2 vd = -cos(h_2 - n) + cos_n + h_2 * sin(n);
+ float vis = (vd.x + vd.y) * 0.25 * n_proj_len;
+
+ visibility += vis;
+
+ /* Finding Bent normal */
+ float b_angle = (h.x + h.y) * 0.5;
+ /* The 0.5 factor below is here to equilibrate the accumulated vectors.
+ * (sin(b_angle) * -t_phi) will accumulate to (phi_step * result_nor.xy * 0.5).
+ * (cos(b_angle) * 0.5) will accumulate to (phi_step * result_nor.z * 0.5). */
+ bent_normal += vec3(sin(b_angle) * -t_phi, cos(b_angle) * 0.5);
+}
+
+void gtao_deferred(vec3 normal, vec3 position, vec4 noise, float frag_depth, out float visibility, out vec3 bent_normal)
+{
+ /* Fetch early, hide latency! */
+ vec4 horizons = texelFetch(horizonBuffer, ivec2(gl_FragCoord.xy), 0);
+
+ vec4 dirs;
+ dirs.xy = get_ao_dir(noise.x * 0.5);
+ dirs.zw = get_ao_dir(noise.x * 0.5 + 0.5);
+ vec2 uvs = get_uvs_from_view(position);
+
+ bent_normal = vec3(0.0);
+ visibility = 0.0;
+
+ horizons = unpack_horizons(horizons);
+
+ integrate_slice(normal, dirs.xy, horizons.xy, visibility, bent_normal);
+ integrate_slice(normal, dirs.zw, horizons.zw, visibility, bent_normal);
+
+ visibility *= 0.5; /* We integrated 2 slices. */
+
+ bent_normal = normalize(bent_normal);
+}
+
+void gtao(vec3 normal, vec3 position, vec4 noise, out float visibility, out vec3 bent_normal)
+{
+ vec2 uvs = get_uvs_from_view(position);
+ vec2 max_dir = get_max_dir(position.z);
+ vec2 dir = get_ao_dir(noise.x);
+
+ bent_normal = vec3(0.0);
+ visibility = 0.0;
+
+ /* Only trace in 2 directions. May lead to a darker result but since it's mostly for
+ * alpha blended objects that will have overdraw, we limit the performance impact. */
+ vec2 horizons = search_horizon_sweep(dir, position, uvs, noise.y, max_dir);
+ integrate_slice(normal, dir, horizons, visibility, bent_normal);
+
+ bent_normal = normalize(bent_normal);
+}
+
+/* Multibounce approximation base on surface albedo.
+ * Page 78 in the .pdf version. */
+float gtao_multibounce(float visibility, vec3 albedo)
+{
+ if (aoBounceFac == 0.0) return visibility;
+
+ /* Median luminance. Because Colored multibounce looks bad. */
+ float lum = dot(albedo, vec3(0.3333));
+
+ float a = 2.0404 * lum - 0.3324;
+ float b = -4.7951 * lum + 0.6417;
+ float c = 2.7552 * lum + 0.6903;
+
+ float x = visibility;
+ return max(x, ((x * a + b) * x + c) * x);
+}
+
+/* Use the right occlusion */
+float occlusion_compute(vec3 N, vec3 vpos, float user_occlusion, vec4 rand, out vec3 bent_normal)
+{
+#ifndef USE_REFRACTION
+ if ((int(aoSettings) & USE_AO) > 0) {
+ float visibility;
+ vec3 vnor = mat3(ViewMatrix) * N;
+
+#ifdef ENABLE_DEFERED_AO
+ gtao_deferred(vnor, vpos, rand, gl_FragCoord.z, visibility, bent_normal);
+#else
+ gtao(vnor, vpos, rand, visibility, bent_normal);
+#endif
+
+ /* Prevent some problems down the road. */
+ visibility = max(1e-3, visibility);
+
+ if ((int(aoSettings) & USE_BENT_NORMAL) != 0) {
+ /* The bent normal will show the facet look of the mesh. Try to minimize this. */
+ float mix_fac = visibility * visibility;
+ bent_normal = normalize(mix(bent_normal, vnor, mix_fac));
+
+ bent_normal = transform_direction(ViewMatrixInverse, bent_normal);
+ }
+ else {
+ bent_normal = N;
+ }
+
+ /* Scale by user factor */
+ visibility = pow(visibility, aoFactor);
+
+ return min(visibility, user_occlusion);
+ }
+#endif
+
+ bent_normal = N;
+ return user_occlusion;
+}
diff --git a/source/blender/draw/engines/eevee/shaders/background_vert.glsl b/source/blender/draw/engines/eevee/shaders/background_vert.glsl
new file mode 100644
index 00000000000..b81aae9bcda
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/background_vert.glsl
@@ -0,0 +1,20 @@
+
+in vec2 pos;
+
+out vec3 varposition;
+out vec3 varnormal;
+out vec3 viewPosition;
+
+#ifndef VOLUMETRICS
+/* necessary for compilation*/
+out vec3 worldPosition;
+out vec3 worldNormal;
+out vec3 viewNormal;
+#endif
+
+void main()
+{
+ gl_Position = vec4(pos, 1.0, 1.0);
+ varposition = viewPosition = vec3(pos, -1.0);
+ varnormal = normalize(-varposition);
+}
diff --git a/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl b/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl
new file mode 100644
index 00000000000..f571d8c727b
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl
@@ -0,0 +1,830 @@
+
+#define M_PI 3.14159265358979323846 /* pi */
+#define M_2PI 6.28318530717958647692 /* 2*pi */
+#define M_PI_2 1.57079632679489661923 /* pi/2 */
+#define M_1_PI 0.318309886183790671538 /* 1/pi */
+#define M_1_2PI 0.159154943091895335768 /* 1/(2*pi) */
+#define M_1_PI2 0.101321183642337771443 /* 1/(pi^2) */
+
+#define LUT_SIZE 64
+
+uniform mat4 ProjectionMatrix;
+uniform mat4 ViewProjectionMatrix;
+uniform mat4 ViewMatrixInverse;
+#ifndef SHADOW_SHADER
+uniform mat4 ViewMatrix;
+#else
+layout(std140) uniform shadow_render_block {
+ mat4 ShadowMatrix[6];
+ mat4 FaceViewMatrix[6];
+ vec4 lampPosition;
+ float cubeTexelSize;
+ float storedTexelSize;
+ float nearClip;
+ float farClip;
+ int shadowSampleCount;
+ float shadowInvSampleCount;
+};
+
+flat in int shFace; /* Shadow layer we are rendering to. */
+#define ViewMatrix FaceViewMatrix[shFace]
+#endif
+
+/* Buffers */
+uniform sampler2D colorBuffer;
+uniform sampler2D depthBuffer;
+uniform sampler2D maxzBuffer;
+uniform sampler2D minzBuffer;
+uniform sampler2DArray planarDepth;
+
+#define cameraForward normalize(ViewMatrixInverse[2].xyz)
+#define cameraPos ViewMatrixInverse[3].xyz
+#define cameraVec ((ProjectionMatrix[3][3] == 0.0) ? normalize(cameraPos - worldPosition) : cameraForward)
+#define viewCameraVec ((ProjectionMatrix[3][3] == 0.0) ? normalize(-viewPosition) : vec3(0.0, 0.0, 1.0))
+
+/* ------- Structures -------- */
+
+/* ------ Lights ----- */
+struct LightData {
+ vec4 position_influence; /* w : InfluenceRadius */
+ vec4 color_spec; /* w : Spec Intensity */
+ vec4 spotdata_radius_shadow; /* x : spot size, y : spot blend, z : radius, w: shadow id */
+ vec4 rightvec_sizex; /* xyz: Normalized up vector, w: area size X or spot scale X */
+ vec4 upvec_sizey; /* xyz: Normalized right vector, w: area size Y or spot scale Y */
+ vec4 forwardvec_type; /* xyz: Normalized forward vector, w: Lamp Type */
+};
+
+/* convenience aliases */
+#define l_color color_spec.rgb
+#define l_spec color_spec.a
+#define l_position position_influence.xyz
+#define l_influence position_influence.w
+#define l_sizex rightvec_sizex.w
+#define l_sizey upvec_sizey.w
+#define l_right rightvec_sizex.xyz
+#define l_up upvec_sizey.xyz
+#define l_forward forwardvec_type.xyz
+#define l_type forwardvec_type.w
+#define l_spot_size spotdata_radius_shadow.x
+#define l_spot_blend spotdata_radius_shadow.y
+#define l_radius spotdata_radius_shadow.z
+#define l_shadowid spotdata_radius_shadow.w
+
+/* ------ Shadows ----- */
+#ifndef MAX_CASCADE_NUM
+#define MAX_CASCADE_NUM 4
+#endif
+
+struct ShadowData {
+ vec4 near_far_bias_exp;
+ vec4 shadow_data_start_end;
+ vec4 contact_shadow_data;
+};
+
+struct ShadowCubeData {
+ vec4 position;
+};
+
+struct ShadowCascadeData {
+ mat4 shadowmat[MAX_CASCADE_NUM];
+ vec4 split_start_distances;
+ vec4 split_end_distances;
+};
+
+/* convenience aliases */
+#define sh_near near_far_bias_exp.x
+#define sh_far near_far_bias_exp.y
+#define sh_bias near_far_bias_exp.z
+#define sh_exp near_far_bias_exp.w
+#define sh_bleed near_far_bias_exp.w
+#define sh_tex_start shadow_data_start_end.x
+#define sh_data_start shadow_data_start_end.y
+#define sh_multi_nbr shadow_data_start_end.z
+#define sh_blur shadow_data_start_end.w
+#define sh_contact_dist contact_shadow_data.x
+#define sh_contact_offset contact_shadow_data.y
+#define sh_contact_spread contact_shadow_data.z
+#define sh_contact_thickness contact_shadow_data.w
+
+/* ------- Convenience functions --------- */
+
+vec3 mul(mat3 m, vec3 v) { return m * v; }
+mat3 mul(mat3 m1, mat3 m2) { return m1 * m2; }
+vec3 transform_direction(mat4 m, vec3 v) { return mat3(m) * v; }
+vec3 transform_point(mat4 m, vec3 v) { return (m * vec4(v, 1.0)).xyz; }
+vec3 project_point(mat4 m, vec3 v) {
+ vec4 tmp = m * vec4(v, 1.0);
+ return tmp.xyz / tmp.w;
+}
+
+float min_v2(vec2 v) { return min(v.x, v.y); }
+float min_v3(vec3 v) { return min(v.x, min(v.y, v.z)); }
+float max_v2(vec2 v) { return max(v.x, v.y); }
+float max_v3(vec3 v) { return max(v.x, max(v.y, v.z)); }
+
+float sum(vec2 v) { return dot(vec2(1.0), v); }
+float sum(vec3 v) { return dot(vec3(1.0), v); }
+float sum(vec4 v) { return dot(vec4(1.0), v); }
+
+float saturate(float a) { return clamp(a, 0.0, 1.0); }
+vec2 saturate(vec2 a) { return clamp(a, 0.0, 1.0); }
+vec3 saturate(vec3 a) { return clamp(a, 0.0, 1.0); }
+vec4 saturate(vec4 a) { return clamp(a, 0.0, 1.0); }
+
+float distance_squared(vec2 a, vec2 b) { a -= b; return dot(a, a); }
+float distance_squared(vec3 a, vec3 b) { a -= b; return dot(a, a); }
+float len_squared(vec3 a) { return dot(a, a); }
+
+float inverse_distance(vec3 V) { return max( 1 / length(V), 1e-8); }
+
+vec2 mip_ratio_interp(float mip) {
+ float low_mip = floor(mip);
+ return mix(mipRatio[int(low_mip)], mipRatio[int(low_mip + 1.0)], mip - low_mip);
+}
+/* ------- Fast Math ------- */
+
+/* [Drobot2014a] Low Level Optimizations for GCN */
+float fast_sqrt(float v)
+{
+ return intBitsToFloat(0x1fbd1df5 + (floatBitsToInt(v) >> 1));
+}
+
+vec2 fast_sqrt(vec2 v)
+{
+ return intBitsToFloat(0x1fbd1df5 + (floatBitsToInt(v) >> 1));
+}
+
+/* [Eberly2014] GPGPU Programming for Games and Science */
+float fast_acos(float v)
+{
+ float res = -0.156583 * abs(v) + M_PI_2;
+ res *= fast_sqrt(1.0 - abs(v));
+ return (v >= 0) ? res : M_PI - res;
+}
+
+vec2 fast_acos(vec2 v)
+{
+ vec2 res = -0.156583 * abs(v) + M_PI_2;
+ res *= fast_sqrt(1.0 - abs(v));
+ v.x = (v.x >= 0) ? res.x : M_PI - res.x;
+ v.y = (v.y >= 0) ? res.y : M_PI - res.y;
+ return v;
+}
+
+float point_plane_projection_dist(vec3 lineorigin, vec3 planeorigin, vec3 planenormal)
+{
+ return dot(planenormal, planeorigin - lineorigin);
+}
+
+float line_plane_intersect_dist(vec3 lineorigin, vec3 linedirection, vec3 planeorigin, vec3 planenormal)
+{
+ return dot(planenormal, planeorigin - lineorigin) / dot(planenormal, linedirection);
+}
+
+float line_plane_intersect_dist(vec3 lineorigin, vec3 linedirection, vec4 plane)
+{
+ vec3 plane_co = plane.xyz * (-plane.w / len_squared(plane.xyz));
+ vec3 h = lineorigin - plane_co;
+ return -dot(plane.xyz, h) / dot(plane.xyz, linedirection);
+}
+
+vec3 line_plane_intersect(vec3 lineorigin, vec3 linedirection, vec3 planeorigin, vec3 planenormal)
+{
+ float dist = line_plane_intersect_dist(lineorigin, linedirection, planeorigin, planenormal);
+ return lineorigin + linedirection * dist;
+}
+
+vec3 line_plane_intersect(vec3 lineorigin, vec3 linedirection, vec4 plane)
+{
+ float dist = line_plane_intersect_dist(lineorigin, linedirection, plane);
+ return lineorigin + linedirection * dist;
+}
+
+float line_aligned_plane_intersect_dist(vec3 lineorigin, vec3 linedirection, vec3 planeorigin)
+{
+ /* aligned plane normal */
+ vec3 L = planeorigin - lineorigin;
+ float diskdist = length(L);
+ vec3 planenormal = -normalize(L);
+ return -diskdist / dot(planenormal, linedirection);
+}
+
+vec3 line_aligned_plane_intersect(vec3 lineorigin, vec3 linedirection, vec3 planeorigin)
+{
+ float dist = line_aligned_plane_intersect_dist(lineorigin, linedirection, planeorigin);
+ if (dist < 0) {
+ /* if intersection is behind we fake the intersection to be
+ * really far and (hopefully) not inside the radius of interest */
+ dist = 1e16;
+ }
+ return lineorigin + linedirection * dist;
+}
+
+float line_unit_sphere_intersect_dist(vec3 lineorigin, vec3 linedirection)
+{
+ float a = dot(linedirection, linedirection);
+ float b = dot(linedirection, lineorigin);
+ float c = dot(lineorigin, lineorigin) - 1;
+
+ float dist = 1e15;
+ float determinant = b * b - a * c;
+ if (determinant >= 0)
+ dist = (sqrt(determinant) - b) / a;
+
+ return dist;
+}
+
+float line_unit_box_intersect_dist(vec3 lineorigin, vec3 linedirection)
+{
+ /* https://seblagarde.wordpress.com/2012/09/29/image-based-lighting-approaches-and-parallax-corrected-cubemap/ */
+ vec3 firstplane = (vec3( 1.0) - lineorigin) / linedirection;
+ vec3 secondplane = (vec3(-1.0) - lineorigin) / linedirection;
+ vec3 furthestplane = max(firstplane, secondplane);
+
+ return min_v3(furthestplane);
+}
+
+
+/* Return texture coordinates to sample Surface LUT */
+vec2 lut_coords(float cosTheta, float roughness)
+{
+ float theta = acos(cosTheta);
+ vec2 coords = vec2(roughness, theta / M_PI_2);
+
+ /* scale and bias coordinates, for correct filtered lookup */
+ return coords * (LUT_SIZE - 1.0) / LUT_SIZE + 0.5 / LUT_SIZE;
+}
+
+/* -- Tangent Space conversion -- */
+vec3 tangent_to_world(vec3 vector, vec3 N, vec3 T, vec3 B)
+{
+ return T * vector.x + B * vector.y + N * vector.z;
+}
+
+vec3 world_to_tangent(vec3 vector, vec3 N, vec3 T, vec3 B)
+{
+ return vec3( dot(T, vector), dot(B, vector), dot(N, vector));
+}
+
+void make_orthonormal_basis(vec3 N, out vec3 T, out vec3 B)
+{
+ vec3 UpVector = abs(N.z) < 0.99999 ? vec3(0.0,0.0,1.0) : vec3(1.0,0.0,0.0);
+ T = normalize( cross(UpVector, N) );
+ B = cross(N, T);
+}
+
+/* ---- Opengl Depth conversion ---- */
+float linear_depth(bool is_persp, float z, float zf, float zn)
+{
+ if (is_persp) {
+ return (zn * zf) / (z * (zn - zf) + zf);
+ }
+ else {
+ return (z * 2.0 - 1.0) * zf;
+ }
+}
+
+float buffer_depth(bool is_persp, float z, float zf, float zn)
+{
+ if (is_persp) {
+ return (zf * (zn - z)) / (z * (zn - zf));
+ }
+ else {
+ return (z / (zf * 2.0)) + 0.5;
+ }
+}
+
+float get_view_z_from_depth(float depth)
+{
+ if (ProjectionMatrix[3][3] == 0.0) {
+ float d = 2.0 * depth - 1.0;
+ return -ProjectionMatrix[3][2] / (d + ProjectionMatrix[2][2]);
+ }
+ else {
+ return viewVecs[0].z + depth * viewVecs[1].z;
+ }
+}
+
+float get_depth_from_view_z(float z)
+{
+ if (ProjectionMatrix[3][3] == 0.0) {
+ float d = (-ProjectionMatrix[3][2] / z) - ProjectionMatrix[2][2];
+ return d * 0.5 + 0.5;
+ }
+ else {
+ return (z - viewVecs[0].z) / viewVecs[1].z;
+ }
+}
+
+vec2 get_uvs_from_view(vec3 view)
+{
+ vec3 ndc = project_point(ProjectionMatrix, view);
+ return ndc.xy * 0.5 + 0.5;
+}
+
+vec3 get_view_space_from_depth(vec2 uvcoords, float depth)
+{
+ if (ProjectionMatrix[3][3] == 0.0) {
+ return vec3(viewVecs[0].xy + uvcoords * viewVecs[1].xy, 1.0) * get_view_z_from_depth(depth);
+ }
+ else {
+ return viewVecs[0].xyz + vec3(uvcoords, depth) * viewVecs[1].xyz;
+ }
+}
+
+vec3 get_world_space_from_depth(vec2 uvcoords, float depth)
+{
+ return (ViewMatrixInverse * vec4(get_view_space_from_depth(uvcoords, depth), 1.0)).xyz;
+}
+
+vec3 get_specular_reflection_dominant_dir(vec3 N, vec3 V, float roughness)
+{
+ vec3 R = -reflect(V, N);
+ float smoothness = 1.0 - roughness;
+ float fac = smoothness * (sqrt(smoothness) + roughness);
+ return normalize(mix(N, R, fac));
+}
+
+float specular_occlusion(float NV, float AO, float roughness)
+{
+ return saturate(pow(NV + AO, roughness) - 1.0 + AO);
+}
+
+/* --- Refraction utils --- */
+
+float ior_from_f0(float f0)
+{
+ float f = sqrt(f0);
+ return (-f - 1.0) / (f - 1.0);
+}
+
+float f0_from_ior(float eta)
+{
+ float A = (eta - 1.0) / (eta + 1.0);
+ return A * A;
+}
+
+vec3 get_specular_refraction_dominant_dir(vec3 N, vec3 V, float roughness, float ior)
+{
+ /* TODO: This a bad approximation. Better approximation should fit
+ * the refracted vector and roughness into the best prefiltered reflection
+ * lobe. */
+ /* Correct the IOR for ior < 1.0 to not see the abrupt delimitation or the TIR */
+ ior = (ior < 1.0) ? mix(ior, 1.0, roughness) : ior;
+ float eta = 1.0 / ior;
+
+ float NV = dot(N, -V);
+
+ /* Custom Refraction. */
+ float k = 1.0 - eta * eta * (1.0 - NV * NV);
+ k = max(0.0, k); /* Only this changes. */
+ vec3 R = eta * -V - (eta * NV + sqrt(k)) * N;
+
+ return R;
+}
+
+float get_btdf_lut(sampler2DArray btdf_lut_tex, float NV, float roughness, float ior)
+{
+ const vec3 lut_scale_bias_texel_size = vec3((LUT_SIZE - 1.0), 0.5, 1.5) / LUT_SIZE;
+
+ vec3 coords;
+ /* Try to compensate for the low resolution and interpolation error. */
+ coords.x = (ior > 1.0)
+ ? (0.9 + lut_scale_bias_texel_size.z) + (0.1 - lut_scale_bias_texel_size.z) * f0_from_ior(ior)
+ : (0.9 + lut_scale_bias_texel_size.z) * ior * ior;
+ coords.y = 1.0 - saturate(NV);
+ coords.xy *= lut_scale_bias_texel_size.x;
+ coords.xy += lut_scale_bias_texel_size.y;
+
+ const float lut_lvl_ofs = 4.0; /* First texture lvl of roughness. */
+ const float lut_lvl_scale = 16.0; /* How many lvl of roughness in the lut. */
+
+ float mip = roughness * lut_lvl_scale;
+ float mip_floor = floor(mip);
+
+ coords.z = lut_lvl_ofs + mip_floor + 1.0;
+ float btdf_high = textureLod(btdf_lut_tex, coords, 0.0).r;
+
+ coords.z -= 1.0;
+ float btdf_low = textureLod(btdf_lut_tex, coords, 0.0).r;
+
+ float btdf = (ior == 1.0) ? 1.0 : mix(btdf_low, btdf_high, mip - coords.z);
+
+ return btdf;
+}
+
+/* ---- Encode / Decode Normal buffer data ---- */
+/* From http://aras-p.info/texts/CompactNormalStorage.html
+ * Using Method #4: Spheremap Transform */
+vec2 normal_encode(vec3 n, vec3 view)
+{
+ float p = sqrt(n.z * 8.0 + 8.0);
+ return n.xy / p + 0.5;
+}
+
+vec3 normal_decode(vec2 enc, vec3 view)
+{
+ vec2 fenc = enc * 4.0 - 2.0;
+ float f = dot(fenc, fenc);
+ float g = sqrt(1.0 - f / 4.0);
+ vec3 n;
+ n.xy = fenc*g;
+ n.z = 1 - f / 2;
+ return n;
+}
+
+/* ---- RGBM (shared multiplier) encoding ---- */
+/* From http://iwasbeingirony.blogspot.fr/2010/06/difference-between-rgbm-and-rgbd.html */
+
+/* Higher RGBM_MAX_RANGE gives imprecision issues in low intensity. */
+#define RGBM_MAX_RANGE 512.0
+
+vec4 rgbm_encode(vec3 rgb)
+{
+ float maxRGB = max_v3(rgb);
+ float M = maxRGB / RGBM_MAX_RANGE;
+ M = ceil(M * 255.0) / 255.0;
+ return vec4(rgb / (M * RGBM_MAX_RANGE), M);
+}
+
+vec3 rgbm_decode(vec4 data)
+{
+ return data.rgb * (data.a * RGBM_MAX_RANGE);
+}
+
+/* ---- RGBE (shared exponent) encoding ---- */
+vec4 rgbe_encode(vec3 rgb)
+{
+ float maxRGB = max_v3(rgb);
+ float fexp = ceil(log2(maxRGB));
+ return vec4(rgb / exp2(fexp), (fexp + 128.0) / 255.0);
+}
+
+vec3 rgbe_decode(vec4 data)
+{
+ float fexp = data.a * 255.0 - 128.0;
+ return data.rgb * exp2(fexp);
+}
+
+#if 1
+#define irradiance_encode rgbe_encode
+#define irradiance_decode rgbe_decode
+#else /* No ecoding (when using floating point format) */
+#define irradiance_encode(X) (X).rgbb
+#define irradiance_decode(X) (X).rgb
+#endif
+
+/* Irradiance Visibility Encoding */
+#if 1
+vec4 visibility_encode(vec2 accum, float range)
+{
+ accum /= range;
+
+ vec4 data;
+ data.x = fract(accum.x);
+ data.y = floor(accum.x) / 255.0;
+ data.z = fract(accum.y);
+ data.w = floor(accum.y) / 255.0;
+
+ return data;
+}
+
+vec2 visibility_decode(vec4 data, float range)
+{
+ return (data.xz + data.yw * 255.0) * range;
+}
+#else /* No ecoding (when using floating point format) */
+vec4 visibility_encode(vec2 accum, float range)
+{
+ return accum.xyxy;
+}
+
+vec2 visibility_decode(vec4 data, float range)
+{
+ return data.xy;
+}
+#endif
+
+/* Fresnel monochromatic, perfect mirror */
+float F_eta(float eta, float cos_theta)
+{
+ /* compute fresnel reflectance without explicitly computing
+ * the refracted direction */
+ float c = abs(cos_theta);
+ float g = eta * eta - 1.0 + c * c;
+ float result;
+
+ if (g > 0.0) {
+ g = sqrt(g);
+ vec2 g_c = vec2(g) + vec2(c, -c);
+ float A = g_c.y / g_c.x;
+ A *= A;
+ g_c *= c;
+ float B = (g_c.y - 1.0) / (g_c.x + 1.0);
+ B *= B;
+ result = 0.5 * A * (1.0 + B);
+ }
+ else {
+ result = 1.0; /* TIR (no refracted component) */
+ }
+
+ return result;
+}
+
+/* Fresnel */
+vec3 F_schlick(vec3 f0, float cos_theta)
+{
+ float fac = 1.0 - cos_theta;
+ float fac2 = fac * fac;
+ fac = fac2 * fac2 * fac;
+
+ /* Unreal specular matching : if specular color is below 2% intensity,
+ * (using green channel for intensity) treat as shadowning */
+ return saturate(50.0 * dot(f0, vec3(0.3, 0.6, 0.1))) * fac + (1.0 - fac) * f0;
+}
+
+/* Fresnel approximation for LTC area lights (not MRP) */
+vec3 F_area(vec3 f0, vec2 lut)
+{
+ vec2 fac = normalize(lut.xy); /* XXX FIXME this does not work!!! */
+
+ /* Unreal specular matching : if specular color is below 2% intensity,
+ * treat as shadowning */
+ return saturate(50.0 * dot(f0, vec3(0.3, 0.6, 0.1))) * fac.y + fac.x * f0;
+}
+
+/* Fresnel approximation for IBL */
+vec3 F_ibl(vec3 f0, vec2 lut)
+{
+ /* Unreal specular matching : if specular color is below 2% intensity,
+ * treat as shadowning */
+ return saturate(50.0 * dot(f0, vec3(0.3, 0.6, 0.1))) * lut.y + lut.x * f0;
+}
+
+/* GGX */
+float D_ggx_opti(float NH, float a2)
+{
+ float tmp = (NH * a2 - NH) * NH + 1.0;
+ return M_PI * tmp*tmp; /* Doing RCP and mul a2 at the end */
+}
+
+float G1_Smith_GGX(float NX, float a2)
+{
+ /* Using Brian Karis approach and refactoring by NX/NX
+ * this way the (2*NL)*(2*NV) in G = G1(V) * G1(L) gets canceled by the brdf denominator 4*NL*NV
+ * Rcp is done on the whole G later
+ * Note that this is not convenient for the transmition formula */
+ return NX + sqrt(NX * (NX - NX * a2) + a2);
+ /* return 2 / (1 + sqrt(1 + a2 * (1 - NX*NX) / (NX*NX) ) ); /* Reference function */
+}
+
+float bsdf_ggx(vec3 N, vec3 L, vec3 V, float roughness)
+{
+ float a = roughness;
+ float a2 = a * a;
+
+ vec3 H = normalize(L + V);
+ float NH = max(dot(N, H), 1e-8);
+ float NL = max(dot(N, L), 1e-8);
+ float NV = max(dot(N, V), 1e-8);
+
+ float G = G1_Smith_GGX(NV, a2) * G1_Smith_GGX(NL, a2); /* Doing RCP at the end */
+ float D = D_ggx_opti(NH, a2);
+
+ /* Denominator is canceled by G1_Smith */
+ /* bsdf = D * G / (4.0 * NL * NV); /* Reference function */
+ return NL * a2 / (D * G); /* NL to Fit cycles Equation : line. 345 in bsdf_microfacet.h */
+}
+
+void accumulate_light(vec3 light, float fac, inout vec4 accum)
+{
+ accum += vec4(light, 1.0) * min(fac, (1.0 - accum.a));
+}
+
+/* ----------- Cone Apperture Approximation --------- */
+
+/* Return a fitted cone angle given the input roughness */
+float cone_cosine(float r)
+{
+ /* Using phong gloss
+ * roughness = sqrt(2/(gloss+2)) */
+ float gloss = -2 + 2 / (r * r);
+ /* Drobot 2014 in GPUPro5 */
+ // return cos(2.0 * sqrt(2.0 / (gloss + 2)));
+ /* Uludag 2014 in GPUPro5 */
+ // return pow(0.244, 1 / (gloss + 1));
+ /* Jimenez 2016 in Practical Realtime Strategies for Accurate Indirect Occlusion*/
+ return exp2(-3.32193 * r * r);
+}
+
+/* --------- Closure ---------- */
+#ifdef VOLUMETRICS
+
+struct Closure {
+ vec3 absorption;
+ vec3 scatter;
+ vec3 emission;
+ float anisotropy;
+};
+
+#define CLOSURE_DEFAULT Closure(vec3(0.0), vec3(0.0), vec3(0.0), 0.0)
+
+Closure closure_mix(Closure cl1, Closure cl2, float fac)
+{
+ Closure cl;
+ cl.absorption = mix(cl1.absorption, cl2.absorption, fac);
+ cl.scatter = mix(cl1.scatter, cl2.scatter, fac);
+ cl.emission = mix(cl1.emission, cl2.emission, fac);
+ cl.anisotropy = mix(cl1.anisotropy, cl2.anisotropy, fac);
+ return cl;
+}
+
+Closure closure_add(Closure cl1, Closure cl2)
+{
+ Closure cl;
+ cl.absorption = cl1.absorption + cl2.absorption;
+ cl.scatter = cl1.scatter + cl2.scatter;
+ cl.emission = cl1.emission + cl2.emission;
+ cl.anisotropy = (cl1.anisotropy + cl2.anisotropy) / 2.0; /* Average phase (no multi lobe) */
+ return cl;
+}
+
+#else /* VOLUMETRICS */
+
+struct Closure {
+ vec3 radiance;
+ float opacity;
+# ifdef USE_SSS
+ vec4 sss_data;
+# ifdef USE_SSS_ALBEDO
+ vec3 sss_albedo;
+# endif
+# endif
+ vec4 ssr_data;
+ vec2 ssr_normal;
+ int ssr_id;
+};
+
+/* This is hacking ssr_id to tag transparent bsdf */
+#define TRANSPARENT_CLOSURE_FLAG -2
+#define REFRACT_CLOSURE_FLAG -3
+
+# ifdef USE_SSS
+# ifdef USE_SSS_ALBEDO
+#define CLOSURE_DEFAULT Closure(vec3(0.0), 1.0, vec4(0.0), vec3(0.0), vec4(0.0), vec2(0.0), -1)
+# else
+#define CLOSURE_DEFAULT Closure(vec3(0.0), 1.0, vec4(0.0), vec4(0.0), vec2(0.0), -1)
+# endif
+# else
+#define CLOSURE_DEFAULT Closure(vec3(0.0), 1.0, vec4(0.0), vec2(0.0), -1)
+# endif
+
+uniform int outputSsrId;
+
+Closure closure_mix(Closure cl1, Closure cl2, float fac)
+{
+ Closure cl;
+
+ if (cl1.ssr_id == TRANSPARENT_CLOSURE_FLAG) {
+ cl1.radiance = cl2.radiance;
+ cl1.ssr_normal = cl2.ssr_normal;
+ cl1.ssr_data = cl2.ssr_data;
+ cl1.ssr_id = cl2.ssr_id;
+# ifdef USE_SSS
+ cl1.sss_data = cl2.sss_data;
+# ifdef USE_SSS_ALBEDO
+ cl1.sss_albedo = cl2.sss_albedo;
+# endif
+# endif
+ }
+ if (cl2.ssr_id == TRANSPARENT_CLOSURE_FLAG) {
+ cl2.radiance = cl1.radiance;
+ cl2.ssr_normal = cl1.ssr_normal;
+ cl2.ssr_data = cl1.ssr_data;
+ cl2.ssr_id = cl1.ssr_id;
+# ifdef USE_SSS
+ cl2.sss_data = cl1.sss_data;
+# ifdef USE_SSS_ALBEDO
+ cl2.sss_albedo = cl1.sss_albedo;
+# endif
+# endif
+ }
+ if (cl1.ssr_id == outputSsrId) {
+ cl.ssr_data = mix(cl1.ssr_data.xyzw, vec4(vec3(0.0), cl1.ssr_data.w), fac); /* do not blend roughness */
+ cl.ssr_normal = cl1.ssr_normal;
+ cl.ssr_id = cl1.ssr_id;
+ }
+ else {
+ cl.ssr_data = mix(vec4(vec3(0.0), cl2.ssr_data.w), cl2.ssr_data.xyzw, fac); /* do not blend roughness */
+ cl.ssr_normal = cl2.ssr_normal;
+ cl.ssr_id = cl2.ssr_id;
+ }
+ cl.radiance = mix(cl1.radiance, cl2.radiance, fac);
+ cl.opacity = mix(cl1.opacity, cl2.opacity, fac);
+
+# ifdef USE_SSS
+ cl.sss_data.rgb = mix(cl1.sss_data.rgb, cl2.sss_data.rgb, fac);
+ cl.sss_data.a = (cl1.sss_data.a > 0.0) ? cl1.sss_data.a : cl2.sss_data.a;
+# ifdef USE_SSS_ALBEDO
+ /* TODO Find a solution to this. Dither? */
+ cl.sss_albedo = (cl1.sss_data.a > 0.0) ? cl1.sss_albedo : cl2.sss_albedo;
+# endif
+# endif
+
+ return cl;
+}
+
+Closure closure_add(Closure cl1, Closure cl2)
+{
+ Closure cl = (cl1.ssr_id == outputSsrId) ? cl1 : cl2;
+# ifdef USE_SSS
+ cl.sss_data = (cl1.sss_data.a > 0.0) ? cl1.sss_data : cl2.sss_data;
+# ifdef USE_SSS_ALBEDO
+ /* TODO Find a solution to this. Dither? */
+ cl.sss_albedo = (cl1.sss_data.a > 0.0) ? cl1.sss_albedo : cl2.sss_albedo;
+# endif
+# endif
+ cl.radiance = cl1.radiance + cl2.radiance;
+ cl.opacity = saturate(cl1.opacity + cl2.opacity);
+ return cl;
+}
+
+# if defined(MESH_SHADER) && !defined(USE_ALPHA_HASH) && !defined(USE_ALPHA_CLIP) && !defined(SHADOW_SHADER) && !defined(USE_MULTIPLY)
+layout(location = 0) out vec4 fragColor;
+# ifdef USE_SSS
+# ifdef USE_SSS_ALBEDO
+layout(location = 1) out vec4 sssData;
+layout(location = 2) out vec4 sssAlbedo;
+layout(location = 3) out vec4 ssrNormals;
+layout(location = 4) out vec4 ssrData;
+# else
+layout(location = 1) out vec4 sssData;
+layout(location = 2) out vec4 ssrNormals;
+layout(location = 3) out vec4 ssrData;
+# endif /* USE_SSS_ALBEDO */
+# else
+layout(location = 1) out vec4 ssrNormals;
+layout(location = 2) out vec4 ssrData;
+# endif /* USE_SSS */
+
+Closure nodetree_exec(void); /* Prototype */
+
+# if defined(USE_ALPHA_BLEND_VOLUMETRICS)
+/* Prototype because this file is included before volumetric_lib.glsl */
+vec4 volumetric_resolve(vec4 scene_color, vec2 frag_uvs, float frag_depth);
+# endif
+
+#define NODETREE_EXEC
+void main()
+{
+ Closure cl = nodetree_exec();
+# ifndef USE_ALPHA_BLEND
+ /* Prevent alpha hash material writing into alpha channel. */
+ cl.opacity = 1.0;
+# endif
+
+# if defined(USE_ALPHA_BLEND_VOLUMETRICS)
+ /* XXX fragile, better use real viewport resolution */
+ vec2 uvs = gl_FragCoord.xy / vec2(2 * textureSize(maxzBuffer, 0).xy);
+ fragColor = volumetric_resolve(vec4(cl.radiance, cl.opacity), uvs, gl_FragCoord.z);
+# else
+ fragColor = vec4(cl.radiance, cl.opacity);
+# endif
+
+ ssrNormals = cl.ssr_normal.xyyy;
+ ssrData = cl.ssr_data;
+# ifdef USE_SSS
+ sssData = cl.sss_data;
+# ifdef USE_SSS_ALBEDO
+ sssAlbedo = cl.sss_albedo.rgbb;
+# endif
+# endif
+
+ /* For Probe capture */
+# ifdef USE_SSS
+# ifdef USE_SSS_ALBEDO
+ fragColor.rgb += cl.sss_data.rgb * cl.sss_albedo.rgb * float(!sssToggle);
+# else
+ fragColor.rgb += cl.sss_data.rgb * float(!sssToggle);
+# endif
+# endif
+}
+
+# endif /* MESH_SHADER && !SHADOW_SHADER */
+
+#endif /* VOLUMETRICS */
+
+Closure nodetree_exec(void); /* Prototype */
+
+/* TODO find a better place */
+#ifdef USE_MULTIPLY
+
+out vec4 fragColor;
+
+#define NODETREE_EXEC
+void main()
+{
+ Closure cl = nodetree_exec();
+ fragColor = vec4(mix(vec3(1.0), cl.radiance, cl.opacity), 1.0);
+}
+#endif \ No newline at end of file
diff --git a/source/blender/draw/engines/eevee/shaders/bsdf_direct_lib.glsl b/source/blender/draw/engines/eevee/shaders/bsdf_direct_lib.glsl
new file mode 100644
index 00000000000..ddc7327334c
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/bsdf_direct_lib.glsl
@@ -0,0 +1,156 @@
+/* Bsdf direct light function */
+/* in other word, how materials react to scene lamps */
+
+/* Naming convention
+ * V View vector (normalized)
+ * N World Normal (normalized)
+ * L Outgoing Light Vector (Surface to Light in World Space) (normalized)
+ * Ldist Distance from surface to the light
+ * W World Pos
+ */
+
+/* ------------ Diffuse ------------- */
+
+float direct_diffuse_point(vec3 N, vec4 l_vector)
+{
+ float dist = l_vector.w;
+ vec3 L = l_vector.xyz / dist;
+ float bsdf = max(0.0, dot(N, L));
+ bsdf /= dist * dist;
+ return bsdf;
+}
+
+/* infinitly far away point source, no decay */
+float direct_diffuse_sun(LightData ld, vec3 N)
+{
+ float bsdf = max(0.0, dot(N, -ld.l_forward));
+ bsdf *= M_1_PI; /* Normalize */
+ return bsdf;
+}
+
+#ifdef USE_LTC
+float direct_diffuse_sphere(LightData ld, vec3 N, vec4 l_vector)
+{
+ float NL = dot(N, l_vector.xyz / l_vector.w);
+
+ return ltc_evaluate_disk_simple(ld.l_radius / l_vector.w, NL);
+}
+
+float direct_diffuse_rectangle(LightData ld, vec3 N, vec3 V, vec4 l_vector)
+{
+ vec3 corners[4];
+ corners[0] = normalize(l_vector.xyz + ld.l_right * -ld.l_sizex + ld.l_up * ld.l_sizey);
+ corners[1] = normalize(l_vector.xyz + ld.l_right * -ld.l_sizex + ld.l_up * -ld.l_sizey);
+ corners[2] = normalize(l_vector.xyz + ld.l_right * ld.l_sizex + ld.l_up * -ld.l_sizey);
+ corners[3] = normalize(l_vector.xyz + ld.l_right * ld.l_sizex + ld.l_up * ld.l_sizey);
+
+ return ltc_evaluate_quad(corners, N);
+}
+
+float direct_diffuse_unit_disc(LightData ld, vec3 N, vec3 V)
+{
+ float NL = dot(N, -ld.l_forward);
+
+ return ltc_evaluate_disk_simple(ld.l_radius, NL);
+}
+#endif
+
+/* ----------- GGx ------------ */
+vec3 direct_ggx_point(vec3 N, vec3 V, vec4 l_vector, float roughness, vec3 f0)
+{
+ roughness = max(1e-3, roughness);
+ float dist = l_vector.w;
+ vec3 L = l_vector.xyz / dist;
+ float bsdf = bsdf_ggx(N, L, V, roughness);
+ bsdf /= dist * dist;
+
+ /* Fresnel */
+ float VH = max(dot(V, normalize(V + L)), 0.0);
+ return F_schlick(f0, VH) * bsdf;
+}
+
+vec3 direct_ggx_sun(LightData ld, vec3 N, vec3 V, float roughness, vec3 f0)
+{
+ roughness = max(1e-3, roughness);
+ float bsdf = bsdf_ggx(N, -ld.l_forward, V, roughness);
+ float VH = dot(V, -ld.l_forward) * 0.5 + 0.5;
+ return F_schlick(f0, VH) * bsdf;
+}
+
+#ifdef USE_LTC
+vec3 direct_ggx_sphere(LightData ld, vec3 N, vec3 V, vec4 l_vector, float roughness, vec3 f0)
+{
+ roughness = clamp(roughness, 0.0008, 0.999); /* Fix low roughness artifacts. */
+
+ vec2 uv = lut_coords(dot(N, V), sqrt(roughness));
+ vec3 brdf_lut = texture(utilTex, vec3(uv, 1.0)).rgb;
+ vec4 ltc_lut = texture(utilTex, vec3(uv, 0.0)).rgba;
+ mat3 ltc_mat = ltc_matrix(ltc_lut);
+
+ /* Make orthonormal basis. */
+ vec3 L = l_vector.xyz / l_vector.w;
+ vec3 Px, Py;
+ make_orthonormal_basis(L, Px, Py);
+ Px *= ld.l_radius;
+ Py *= ld.l_radius;
+
+ vec3 points[3];
+ points[0] = l_vector.xyz - Px - Py;
+ points[1] = l_vector.xyz + Px - Py;
+ points[2] = l_vector.xyz + Px + Py;
+
+ float bsdf = ltc_evaluate_disk(N, V, ltc_mat, points);
+ bsdf *= brdf_lut.b; /* Bsdf intensity */
+
+ vec3 spec = F_area(f0, brdf_lut.xy) * bsdf;
+
+ return spec;
+}
+
+vec3 direct_ggx_rectangle(LightData ld, vec3 N, vec3 V, vec4 l_vector, float roughness, vec3 f0)
+{
+ vec3 corners[4];
+ corners[0] = l_vector.xyz + ld.l_right * -ld.l_sizex + ld.l_up * ld.l_sizey;
+ corners[1] = l_vector.xyz + ld.l_right * -ld.l_sizex + ld.l_up * -ld.l_sizey;
+ corners[2] = l_vector.xyz + ld.l_right * ld.l_sizex + ld.l_up * -ld.l_sizey;
+ corners[3] = l_vector.xyz + ld.l_right * ld.l_sizex + ld.l_up * ld.l_sizey;
+
+ vec2 uv = lut_coords(dot(N, V), sqrt(roughness));
+ vec3 brdf_lut = texture(utilTex, vec3(uv, 1.0)).rgb;
+ vec4 ltc_lut = texture(utilTex, vec3(uv, 0.0)).rgba;
+ mat3 ltc_mat = ltc_matrix(ltc_lut);
+
+ ltc_transform_quad(N, V, ltc_mat, corners);
+ float bsdf = ltc_evaluate_quad(corners, vec3(0.0, 0.0, 1.0));
+ bsdf *= brdf_lut.b; /* Bsdf intensity */
+
+ vec3 spec = F_area(f0, brdf_lut.xy) * bsdf;
+
+ return spec;
+}
+
+vec3 direct_ggx_unit_disc(LightData ld, vec3 N, vec3 V, float roughness, vec3 f0)
+{
+ roughness = clamp(roughness, 0.0004, 0.999); /* Fix low roughness artifacts. */
+
+ vec2 uv = lut_coords(dot(N, V), sqrt(roughness));
+ vec3 brdf_lut = texture(utilTex, vec3(uv, 1.0)).rgb;
+ vec4 ltc_lut = texture(utilTex, vec3(uv, 0.0)).rgba;
+ mat3 ltc_mat = ltc_matrix(ltc_lut);
+
+ vec3 Px = ld.l_right * ld.l_radius;
+ vec3 Py = ld.l_up * ld.l_radius;
+
+ vec3 points[3];
+ points[0] = -ld.l_forward - Px - Py;
+ points[1] = -ld.l_forward + Px - Py;
+ points[2] = -ld.l_forward + Px + Py;
+
+ float bsdf = ltc_evaluate_disk(N, V, ltc_mat, points);
+ bsdf *= brdf_lut.b; /* Bsdf intensity */
+
+ vec3 spec = F_area(f0, brdf_lut.xy) * bsdf;
+
+ return spec;
+}
+#endif \ No newline at end of file
diff --git a/source/blender/draw/engines/eevee/shaders/bsdf_lut_frag.glsl b/source/blender/draw/engines/eevee/shaders/bsdf_lut_frag.glsl
new file mode 100644
index 00000000000..b8fac61519e
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/bsdf_lut_frag.glsl
@@ -0,0 +1,46 @@
+
+out vec4 FragColor;
+
+void main() {
+ vec3 N, T, B, V;
+
+ float NV = ( 1.0 - (clamp(gl_FragCoord.y / BRDF_LUT_SIZE, 1e-4, 0.9999)));
+ float sqrtRoughness = clamp(gl_FragCoord.x / BRDF_LUT_SIZE, 1e-4, 0.9999);
+ float a = sqrtRoughness * sqrtRoughness;
+ float a2 = a * a;
+
+ N = vec3(0.0, 0.0, 1.0);
+ T = vec3(1.0, 0.0, 0.0);
+ B = vec3(0.0, 1.0, 0.0);
+ V = vec3(sqrt(1.0 - NV * NV), 0.0, NV);
+
+ setup_noise();
+
+ /* Integrating BRDF */
+ float brdf_accum = 0.0;
+ float fresnel_accum = 0.0;
+ for (float i = 0; i < sampleCount; i++) {
+ vec3 H = sample_ggx(i, a2, N, T, B); /* Microfacet normal */
+ vec3 L = -reflect(V, H);
+ float NL = L.z;
+
+ if (NL > 0.0) {
+ float NH = max(H.z, 0.0);
+ float VH = max(dot(V, H), 0.0);
+
+ float G1_v = G1_Smith_GGX(NV, a2);
+ float G1_l = G1_Smith_GGX(NL, a2);
+ float G_smith = 4.0 * NV * NL / (G1_v * G1_l); /* See G1_Smith_GGX for explanations. */
+
+ float brdf = (G_smith * VH) / (NH * NV);
+ float Fc = pow(1.0 - VH, 5.0);
+
+ brdf_accum += (1.0 - Fc) * brdf;
+ fresnel_accum += Fc * brdf;
+ }
+ }
+ brdf_accum /= sampleCount;
+ fresnel_accum /= sampleCount;
+
+ FragColor = vec4(brdf_accum, fresnel_accum, 0.0, 1.0);
+} \ No newline at end of file
diff --git a/source/blender/draw/engines/eevee/shaders/bsdf_sampling_lib.glsl b/source/blender/draw/engines/eevee/shaders/bsdf_sampling_lib.glsl
new file mode 100644
index 00000000000..e5c0cb9c9c9
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/bsdf_sampling_lib.glsl
@@ -0,0 +1,107 @@
+
+uniform sampler1D texHammersley;
+uniform sampler2D texJitter;
+uniform float sampleCount;
+uniform float invSampleCount;
+
+vec2 jitternoise = vec2(0.0);
+
+#ifndef UTIL_TEX
+#define UTIL_TEX
+uniform sampler2DArray utilTex;
+#define texelfetch_noise_tex(coord) texelFetch(utilTex, ivec3(ivec2(coord) % LUT_SIZE, 2.0), 0)
+#endif /* UTIL_TEX */
+
+void setup_noise(void)
+{
+ jitternoise = texelfetch_noise_tex(gl_FragCoord.xy).rg; /* Global variable */
+}
+
+#ifdef HAMMERSLEY_SIZE
+vec3 hammersley_3d(float i, float invsamplenbr)
+{
+ vec3 Xi; /* Theta, cos(Phi), sin(Phi) */
+
+ Xi.x = i * invsamplenbr; /* i/samples */
+ Xi.x = fract(Xi.x + jitternoise.x);
+
+ int u = int(mod(i + jitternoise.y * HAMMERSLEY_SIZE, HAMMERSLEY_SIZE));
+
+ Xi.yz = texelFetch(texHammersley, u, 0).rg;
+
+ return Xi;
+}
+
+vec3 hammersley_3d(float i)
+{
+ return hammersley_3d(i, invSampleCount);
+}
+#endif
+
+/* -------------- BSDFS -------------- */
+
+float pdf_ggx_reflect(float NH, float a2)
+{
+ return NH * a2 / D_ggx_opti(NH, a2);
+}
+
+float pdf_hemisphere()
+{
+ return 0.5 * M_1_PI;
+}
+
+vec3 sample_ggx(vec3 rand, float a2)
+{
+ /* Theta is the aperture angle of the cone */
+ float z = sqrt( (1.0 - rand.x) / ( 1.0 + a2 * rand.x - rand.x ) ); /* cos theta */
+ float r = sqrt(max(0.0, 1.0f - z*z)); /* sin theta */
+ float x = r * rand.y;
+ float y = r * rand.z;
+
+ /* Microfacet Normal */
+ return vec3(x, y, z);
+}
+
+vec3 sample_ggx(vec3 rand, float a2, vec3 N, vec3 T, vec3 B, out float NH)
+{
+ vec3 Ht = sample_ggx(rand, a2);
+ NH = Ht.z;
+ return tangent_to_world(Ht, N, T, B);
+}
+
+#ifdef HAMMERSLEY_SIZE
+vec3 sample_ggx(float nsample, float a2, vec3 N, vec3 T, vec3 B)
+{
+ vec3 Xi = hammersley_3d(nsample);
+ vec3 Ht = sample_ggx(Xi, a2);
+ return tangent_to_world(Ht, N, T, B);
+}
+
+vec3 sample_hemisphere(float nsample, vec3 N, vec3 T, vec3 B)
+{
+ vec3 Xi = hammersley_3d(nsample);
+
+ float z = Xi.x; /* cos theta */
+ float r = sqrt(max(0.0, 1.0f - z*z)); /* sin theta */
+ float x = r * Xi.y;
+ float y = r * Xi.z;
+
+ vec3 Ht = vec3(x, y, z);
+
+ return tangent_to_world(Ht, N, T, B);
+}
+
+vec3 sample_cone(float nsample, float angle, vec3 N, vec3 T, vec3 B)
+{
+ vec3 Xi = hammersley_3d(nsample);
+
+ float z = cos(angle * Xi.x); /* cos theta */
+ float r = sqrt(max(0.0, 1.0f - z*z)); /* sin theta */
+ float x = r * Xi.y;
+ float y = r * Xi.z;
+
+ vec3 Ht = vec3(x, y, z);
+
+ return tangent_to_world(Ht, N, T, B);
+}
+#endif \ No newline at end of file
diff --git a/source/blender/draw/engines/eevee/shaders/btdf_lut_frag.glsl b/source/blender/draw/engines/eevee/shaders/btdf_lut_frag.glsl
new file mode 100644
index 00000000000..2c604d69641
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/btdf_lut_frag.glsl
@@ -0,0 +1,59 @@
+
+uniform float a2;
+
+out vec4 FragColor;
+
+void main() {
+ vec3 N, T, B, V;
+
+ float x = gl_FragCoord.x / BRDF_LUT_SIZE;
+ float y = gl_FragCoord.y / BRDF_LUT_SIZE;
+ /* There is little variation if ior > 1.0 so we
+ * maximize LUT precision for ior < 1.0 */
+ x = x * 1.1;
+ float ior = (x > 1.0) ? ior_from_f0((x-1.0) * 10.0) : sqrt(x);
+ float NV = (1.0 - (clamp(y, 1e-4, 0.9999)));
+
+ N = vec3(0.0, 0.0, 1.0);
+ T = vec3(1.0, 0.0, 0.0);
+ B = vec3(0.0, 1.0, 0.0);
+ V = vec3(sqrt(1.0 - NV * NV), 0.0, NV);
+
+ setup_noise();
+
+ /* Integrating BTDF */
+ float btdf_accum = 0.0;
+ for (float i = 0.0; i < sampleCount; i++) {
+ vec3 H = sample_ggx(i, a2, N, T, B); /* Microfacet normal */
+
+ float VH = dot(V, H);
+
+ /* Check if there is total internal reflections. */
+ float c = abs(VH);
+ float g = ior * ior - 1.0 + c * c;
+
+ float eta = 1.0/ior;
+ if (dot(H, V) < 0.0) {
+ H = -H;
+ eta = ior;
+ }
+
+ vec3 L = refract(-V, H, eta);
+ float NL = -dot(N, L);
+
+ if ((NL > 0.0) && (g > 0.0)) {
+ float LH = dot(L, H);
+
+ float G1_l = NL * 2.0 / G1_Smith_GGX(NL, a2); /* Balancing the adjustments made in G1_Smith */
+
+ /* btdf = abs(VH*LH) * (ior*ior) * D * G(V) * G(L) / (Ht2 * NV)
+ * pdf = (VH * abs(LH)) * (ior*ior) * D * G(V) / (Ht2 * NV) */
+ float btdf = G1_l * abs(VH*LH) / (VH * abs(LH));
+
+ btdf_accum += btdf;
+ }
+ }
+ btdf_accum /= sampleCount;
+
+ FragColor = vec4(btdf_accum, 0.0, 0.0, 1.0);
+} \ No newline at end of file
diff --git a/source/blender/draw/engines/eevee/shaders/common_uniforms_lib.glsl b/source/blender/draw/engines/eevee/shaders/common_uniforms_lib.glsl
new file mode 100644
index 00000000000..37106fc32bd
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/common_uniforms_lib.glsl
@@ -0,0 +1,55 @@
+
+layout(std140) uniform common_block {
+ mat4 pastViewProjectionMatrix;
+ vec4 viewVecs[2];
+ vec2 mipRatio[10]; /* To correct mip level texel mis-alignement */
+ /* Ambient Occlusion */
+ vec4 aoParameters[2];
+ /* Volumetric */
+ ivec4 volTexSize;
+ vec4 volDepthParameters; /* Parameters to the volume Z equation */
+ vec4 volInvTexSize;
+ vec4 volJitter;
+ vec4 volCoordScale; /* To convert volume uvs to screen uvs */
+ float volHistoryAlpha;
+ float volLightClamp;
+ float volShadowSteps;
+ bool volUseLights;
+ /* Screen Space Reflections */
+ vec4 ssrParameters;
+ float ssrBorderFac;
+ float ssrMaxRoughness;
+ float ssrFireflyFac;
+ float ssrBrdfBias;
+ bool ssrToggle;
+ /* SubSurface Scattering */
+ float sssJitterThreshold;
+ bool sssToggle;
+ /* Specular */
+ bool specToggle;
+ /* Lamps */
+ int laNumLight;
+ /* Probes */
+ int prbNumPlanar;
+ int prbNumRenderCube;
+ int prbNumRenderGrid;
+ int prbIrradianceVisSize;
+ float prbLodCubeMax;
+ float prbLodPlanarMax;
+};
+
+/* aoParameters */
+#define aoDistance aoParameters[0].x
+#define aoSamples aoParameters[0].y /* UNUSED */
+#define aoFactor aoParameters[0].z
+#define aoInvSamples aoParameters[0].w /* UNUSED */
+
+#define aoOffset aoParameters[1].x /* UNUSED */
+#define aoBounceFac aoParameters[1].y
+#define aoQuality aoParameters[1].z
+#define aoSettings aoParameters[1].w
+
+/* ssrParameters */
+#define ssrQuality ssrParameters.x
+#define ssrThickness ssrParameters.y
+#define ssrPixelSize ssrParameters.zw \ No newline at end of file
diff --git a/source/blender/draw/engines/eevee/shaders/concentric_samples_lib.glsl b/source/blender/draw/engines/eevee/shaders/concentric_samples_lib.glsl
new file mode 100644
index 00000000000..67bcf603a81
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/concentric_samples_lib.glsl
@@ -0,0 +1,267 @@
+/* Precomputed table of concentric samples.
+ * Generated using this algorithm http://l2program.co.uk/900/concentric-disk-sampling
+ * Sorted by radius then by rotation angle.
+ * This way it's better for cache usage and for
+ * easily restricting to a certain number of
+ * sample while still having a circular kernel. */
+
+#define CONCENTRIC_SAMPLE_NUM 256
+const vec2 concentric[CONCENTRIC_SAMPLE_NUM] =
+vec2[CONCENTRIC_SAMPLE_NUM](
+ vec2(0.0441941738242, 0.0441941738242),
+ vec2(-0.0441941738242, -0.0441941738242),
+ vec2(-0.0441941738242, 0.0441941738242),
+ vec2(0.0441941738242, -0.0441941738242),
+ vec2(0.181111092429, 0.0485285709567),
+ vec2(0.132582521472, 0.132582521472),
+ vec2(-0.181111092429, 0.0485285709567),
+ vec2(0.0485285709567, 0.181111092429),
+ vec2(-0.181111092429, -0.0485285709567),
+ vec2(-0.0485285709567, 0.181111092429),
+ vec2(-0.132582521472, -0.132582521472),
+ vec2(-0.132582521472, 0.132582521472),
+ vec2(-0.0485285709567, -0.181111092429),
+ vec2(0.0485285709567, -0.181111092429),
+ vec2(0.132582521472, -0.132582521472),
+ vec2(0.181111092429, -0.0485285709567),
+ vec2(0.308652606436, 0.0488857703251),
+ vec2(0.278439538809, 0.141872031169),
+ vec2(0.220970869121, 0.220970869121),
+ vec2(-0.278439538809, 0.141872031169),
+ vec2(0.141872031169, 0.278439538809),
+ vec2(-0.308652606436, 0.0488857703251),
+ vec2(0.0488857703251, 0.308652606436),
+ vec2(-0.308652606436, -0.0488857703251),
+ vec2(-0.0488857703251, 0.308652606436),
+ vec2(-0.278439538809, -0.141872031169),
+ vec2(-0.141872031169, 0.278439538809),
+ vec2(-0.220970869121, -0.220970869121),
+ vec2(-0.220970869121, 0.220970869121),
+ vec2(-0.141872031169, -0.278439538809),
+ vec2(-0.0488857703251, -0.308652606436),
+ vec2(0.0488857703251, -0.308652606436),
+ vec2(0.141872031169, -0.278439538809),
+ vec2(0.220970869121, -0.220970869121),
+ vec2(0.278439538809, -0.141872031169),
+ vec2(0.308652606436, -0.0488857703251),
+ vec2(0.434749091828, 0.0489844582952),
+ vec2(0.41294895701, 0.144497089605),
+ vec2(0.370441837162, 0.232764033475),
+ vec2(0.309359216769, 0.309359216769),
+ vec2(-0.370441837162, 0.232764033475),
+ vec2(0.232764033475, 0.370441837162),
+ vec2(-0.41294895701, 0.144497089605),
+ vec2(0.144497089605, 0.41294895701),
+ vec2(-0.434749091828, 0.0489844582952),
+ vec2(0.0489844582952, 0.434749091828),
+ vec2(-0.434749091828, -0.0489844582952),
+ vec2(-0.0489844582952, 0.434749091828),
+ vec2(-0.41294895701, -0.144497089605),
+ vec2(-0.144497089605, 0.41294895701),
+ vec2(-0.370441837162, -0.232764033475),
+ vec2(-0.232764033475, 0.370441837162),
+ vec2(-0.309359216769, -0.309359216769),
+ vec2(-0.309359216769, 0.309359216769),
+ vec2(-0.232764033475, -0.370441837162),
+ vec2(-0.144497089605, -0.41294895701),
+ vec2(-0.0489844582952, -0.434749091828),
+ vec2(0.0489844582952, -0.434749091828),
+ vec2(0.144497089605, -0.41294895701),
+ vec2(0.232764033475, -0.370441837162),
+ vec2(0.309359216769, -0.309359216769),
+ vec2(0.370441837162, -0.232764033475),
+ vec2(0.41294895701, -0.144497089605),
+ vec2(0.434749091828, -0.0489844582952),
+ vec2(0.560359517677, 0.0490251052956),
+ vec2(0.543333277288, 0.14558571287),
+ vec2(0.509798130208, 0.237722772229),
+ vec2(0.460773024913, 0.322636745447),
+ vec2(0.397747564417, 0.397747564417),
+ vec2(-0.460773024913, 0.322636745447),
+ vec2(0.322636745447, 0.460773024913),
+ vec2(-0.509798130208, 0.237722772229),
+ vec2(0.237722772229, 0.509798130208),
+ vec2(-0.543333277288, 0.14558571287),
+ vec2(0.14558571287, 0.543333277288),
+ vec2(-0.560359517677, 0.0490251052956),
+ vec2(0.0490251052956, 0.560359517677),
+ vec2(-0.560359517677, -0.0490251052956),
+ vec2(-0.0490251052956, 0.560359517677),
+ vec2(-0.543333277288, -0.14558571287),
+ vec2(-0.14558571287, 0.543333277288),
+ vec2(-0.509798130208, -0.237722772229),
+ vec2(-0.237722772229, 0.509798130208),
+ vec2(-0.460773024913, -0.322636745447),
+ vec2(-0.322636745447, 0.460773024913),
+ vec2(-0.397747564417, -0.397747564417),
+ vec2(-0.397747564417, 0.397747564417),
+ vec2(-0.322636745447, -0.460773024913),
+ vec2(-0.237722772229, -0.509798130208),
+ vec2(-0.14558571287, -0.543333277288),
+ vec2(-0.0490251052956, -0.560359517677),
+ vec2(0.0490251052956, -0.560359517677),
+ vec2(0.14558571287, -0.543333277288),
+ vec2(0.237722772229, -0.509798130208),
+ vec2(0.322636745447, -0.460773024913),
+ vec2(0.397747564417, -0.397747564417),
+ vec2(0.460773024913, -0.322636745447),
+ vec2(0.509798130208, -0.237722772229),
+ vec2(0.543333277288, -0.14558571287),
+ vec2(0.560359517677, -0.0490251052956),
+ vec2(0.685748328795, 0.0490456884495),
+ vec2(0.671788470355, 0.146138636568),
+ vec2(0.644152935937, 0.240256623474),
+ vec2(0.603404305327, 0.32948367837),
+ vec2(0.550372103135, 0.412003395727),
+ vec2(0.486135912066, 0.486135912066),
+ vec2(-0.550372103135, 0.412003395727),
+ vec2(0.412003395727, 0.550372103135),
+ vec2(-0.603404305327, 0.32948367837),
+ vec2(0.32948367837, 0.603404305327),
+ vec2(-0.644152935937, 0.240256623474),
+ vec2(0.240256623474, 0.644152935937),
+ vec2(-0.671788470355, 0.146138636568),
+ vec2(0.146138636568, 0.671788470355),
+ vec2(-0.685748328795, 0.0490456884495),
+ vec2(0.0490456884495, 0.685748328795),
+ vec2(-0.685748328795, -0.0490456884495),
+ vec2(-0.0490456884495, 0.685748328795),
+ vec2(-0.671788470355, -0.146138636568),
+ vec2(-0.146138636568, 0.671788470355),
+ vec2(-0.644152935937, -0.240256623474),
+ vec2(-0.240256623474, 0.644152935937),
+ vec2(-0.603404305327, -0.32948367837),
+ vec2(-0.32948367837, 0.603404305327),
+ vec2(-0.550372103135, -0.412003395727),
+ vec2(-0.412003395727, 0.550372103135),
+ vec2(-0.486135912066, -0.486135912066),
+ vec2(-0.486135912066, 0.486135912066),
+ vec2(-0.412003395727, -0.550372103135),
+ vec2(-0.32948367837, -0.603404305327),
+ vec2(-0.240256623474, -0.644152935937),
+ vec2(-0.146138636568, -0.671788470355),
+ vec2(-0.0490456884495, -0.685748328795),
+ vec2(0.0490456884495, -0.685748328795),
+ vec2(0.146138636568, -0.671788470355),
+ vec2(0.240256623474, -0.644152935937),
+ vec2(0.32948367837, -0.603404305327),
+ vec2(0.412003395727, -0.550372103135),
+ vec2(0.486135912066, -0.486135912066),
+ vec2(0.550372103135, -0.412003395727),
+ vec2(0.603404305327, -0.32948367837),
+ vec2(0.644152935937, -0.240256623474),
+ vec2(0.671788470355, -0.146138636568),
+ vec2(0.685748328795, -0.0490456884495),
+ vec2(0.811017637806, 0.0490575291556),
+ vec2(0.799191174395, 0.146457218224),
+ vec2(0.775710704038, 0.241721231257),
+ vec2(0.740918624869, 0.33346040443),
+ vec2(0.695322283745, 0.420336974019),
+ vec2(0.639586577995, 0.501084084011),
+ vec2(0.574524259714, 0.574524259714),
+ vec2(-0.639586577995, 0.501084084011),
+ vec2(0.501084084011, 0.639586577995),
+ vec2(-0.695322283745, 0.420336974019),
+ vec2(0.420336974019, 0.695322283745),
+ vec2(-0.740918624869, 0.33346040443),
+ vec2(0.33346040443, 0.740918624869),
+ vec2(-0.775710704038, 0.241721231257),
+ vec2(0.241721231257, 0.775710704038),
+ vec2(-0.799191174395, 0.146457218224),
+ vec2(0.146457218224, 0.799191174395),
+ vec2(-0.811017637806, 0.0490575291556),
+ vec2(0.0490575291556, 0.811017637806),
+ vec2(-0.811017637806, -0.0490575291556),
+ vec2(-0.0490575291556, 0.811017637806),
+ vec2(-0.799191174395, -0.146457218224),
+ vec2(-0.146457218224, 0.799191174395),
+ vec2(-0.775710704038, -0.241721231257),
+ vec2(-0.241721231257, 0.775710704038),
+ vec2(-0.740918624869, -0.33346040443),
+ vec2(-0.33346040443, 0.740918624869),
+ vec2(-0.695322283745, -0.420336974019),
+ vec2(-0.420336974019, 0.695322283745),
+ vec2(-0.639586577995, -0.501084084011),
+ vec2(-0.501084084011, 0.639586577995),
+ vec2(-0.574524259714, -0.574524259714),
+ vec2(-0.574524259714, 0.574524259714),
+ vec2(-0.501084084011, -0.639586577995),
+ vec2(-0.420336974019, -0.695322283745),
+ vec2(-0.33346040443, -0.740918624869),
+ vec2(-0.241721231257, -0.775710704038),
+ vec2(-0.146457218224, -0.799191174395),
+ vec2(-0.0490575291556, -0.811017637806),
+ vec2(0.0490575291556, -0.811017637806),
+ vec2(0.146457218224, -0.799191174395),
+ vec2(0.241721231257, -0.775710704038),
+ vec2(0.33346040443, -0.740918624869),
+ vec2(0.420336974019, -0.695322283745),
+ vec2(0.501084084011, -0.639586577995),
+ vec2(0.574524259714, -0.574524259714),
+ vec2(0.639586577995, -0.501084084011),
+ vec2(0.695322283745, -0.420336974019),
+ vec2(0.740918624869, -0.33346040443),
+ vec2(0.775710704038, -0.241721231257),
+ vec2(0.799191174395, -0.146457218224),
+ vec2(0.811017637806, -0.0490575291556),
+ vec2(0.936215188832, 0.0490649589778),
+ vec2(0.925957819308, 0.146657310975),
+ vec2(0.905555462146, 0.242642854784),
+ vec2(0.875231649841, 0.335969952699),
+ vec2(0.835318616427, 0.425616093506),
+ vec2(0.786253657449, 0.510599095327),
+ vec2(0.728574338866, 0.589987866609),
+ vec2(0.662912607362, 0.662912607362),
+ vec2(-0.728574338866, 0.589987866609),
+ vec2(0.589987866609, 0.728574338866),
+ vec2(-0.786253657449, 0.510599095327),
+ vec2(0.510599095327, 0.786253657449),
+ vec2(-0.835318616427, 0.425616093506),
+ vec2(0.425616093506, 0.835318616427),
+ vec2(-0.875231649841, 0.335969952699),
+ vec2(0.335969952699, 0.875231649841),
+ vec2(-0.905555462146, 0.242642854784),
+ vec2(0.242642854784, 0.905555462146),
+ vec2(-0.925957819308, 0.146657310975),
+ vec2(0.146657310975, 0.925957819308),
+ vec2(-0.936215188832, 0.0490649589778),
+ vec2(0.0490649589778, 0.936215188832),
+ vec2(-0.936215188832, -0.0490649589778),
+ vec2(-0.0490649589778, 0.936215188832),
+ vec2(-0.925957819308, -0.146657310975),
+ vec2(-0.146657310975, 0.925957819308),
+ vec2(-0.905555462146, -0.242642854784),
+ vec2(-0.242642854784, 0.905555462146),
+ vec2(-0.875231649841, -0.335969952699),
+ vec2(-0.335969952699, 0.875231649841),
+ vec2(-0.835318616427, -0.425616093506),
+ vec2(-0.425616093506, 0.835318616427),
+ vec2(-0.786253657449, -0.510599095327),
+ vec2(-0.510599095327, 0.786253657449),
+ vec2(-0.728574338866, -0.589987866609),
+ vec2(-0.589987866609, 0.728574338866),
+ vec2(-0.662912607362, -0.662912607362),
+ vec2(-0.662912607362, 0.662912607362),
+ vec2(-0.589987866609, -0.728574338866),
+ vec2(-0.510599095327, -0.786253657449),
+ vec2(-0.425616093506, -0.835318616427),
+ vec2(-0.335969952699, -0.875231649841),
+ vec2(-0.242642854784, -0.905555462146),
+ vec2(-0.146657310975, -0.925957819308),
+ vec2(-0.0490649589778, -0.936215188832),
+ vec2(0.0490649589778, -0.936215188832),
+ vec2(0.146657310975, -0.925957819308),
+ vec2(0.242642854784, -0.905555462146),
+ vec2(0.335969952699, -0.875231649841),
+ vec2(0.425616093506, -0.835318616427),
+ vec2(0.510599095327, -0.786253657449),
+ vec2(0.589987866609, -0.728574338866),
+ vec2(0.662912607362, -0.662912607362),
+ vec2(0.728574338866, -0.589987866609),
+ vec2(0.786253657449, -0.510599095327),
+ vec2(0.835318616427, -0.425616093506),
+ vec2(0.875231649841, -0.335969952699),
+ vec2(0.905555462146, -0.242642854784),
+ vec2(0.925957819308, -0.146657310975),
+ vec2(0.936215188832, -0.0490649589778)
+); \ No newline at end of file
diff --git a/source/blender/draw/engines/eevee/shaders/default_frag.glsl b/source/blender/draw/engines/eevee/shaders/default_frag.glsl
new file mode 100644
index 00000000000..6d941ae6ec3
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/default_frag.glsl
@@ -0,0 +1,19 @@
+
+uniform vec3 basecol;
+uniform float metallic;
+uniform float specular;
+uniform float roughness;
+
+Closure nodetree_exec(void)
+{
+ vec3 dielectric = vec3(0.034) * specular * 2.0;
+ vec3 albedo = mix(basecol, vec3(0.0), metallic);
+ vec3 f0 = mix(dielectric, basecol, metallic);
+ vec3 N = (gl_FrontFacing) ? worldNormal : -worldNormal;
+ vec3 out_diff, out_spec, ssr_spec;
+ eevee_closure_default(N, albedo, f0, 1, roughness, 1.0, out_diff, out_spec, ssr_spec);
+
+ Closure result = Closure(out_spec + out_diff * albedo, 1.0, vec4(ssr_spec, roughness), normal_encode(normalize(viewNormal), viewCameraVec), 0);
+
+ return result;
+}
diff --git a/source/blender/draw/engines/eevee/shaders/default_world_frag.glsl b/source/blender/draw/engines/eevee/shaders/default_world_frag.glsl
new file mode 100644
index 00000000000..90af87756f0
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/default_world_frag.glsl
@@ -0,0 +1,9 @@
+
+uniform float backgroundAlpha;
+uniform vec3 color;
+
+out vec4 FragColor;
+
+void main() {
+ FragColor = vec4(color, backgroundAlpha);
+}
diff --git a/source/blender/draw/engines/eevee/shaders/effect_bloom_frag.glsl b/source/blender/draw/engines/eevee/shaders/effect_bloom_frag.glsl
new file mode 100644
index 00000000000..29543e82f43
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/effect_bloom_frag.glsl
@@ -0,0 +1,218 @@
+/* Original implementation by Keijiro Takahashi
+ * Blender integration by Clément Foucault
+ *
+ * Original License :
+ *
+ * Kino/Bloom v2 - Bloom filter for Unity
+ *
+ * Copyright (C) 2015, 2016 Keijiro Takahashi
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ **/
+
+uniform sampler2D sourceBuffer; /* Buffer to filter */
+uniform vec2 sourceBufferTexelSize;
+
+/* Step Blit */
+uniform vec4 curveThreshold;
+uniform float clampIntensity;
+
+/* Step Upsample */
+uniform sampler2D baseBuffer; /* Previous accumulation buffer */
+uniform vec2 baseBufferTexelSize;
+uniform float sampleScale;
+
+/* Step Resolve */
+uniform vec3 bloomColor;
+
+in vec4 uvcoordsvar;
+
+out vec4 FragColor;
+
+/* -------------- Utils ------------- */
+
+vec3 safe_color(vec3 c)
+{
+ /* Clamp to avoid black square artifacts if a pixel goes NaN. */
+ return clamp(c, vec3(0.0), vec3(1e20)); /* 1e20 arbitrary. */
+}
+
+float brightness(vec3 c)
+{
+ return max(max(c.r, c.g), c.b);
+}
+
+/* 3-tap median filter */
+vec3 median(vec3 a, vec3 b, vec3 c)
+{
+ return a + b + c - min(min(a, b), c) - max(max(a, b), c);
+}
+
+/* ------------- Filters ------------ */
+
+vec3 downsample_filter_high(sampler2D tex, vec2 uv, vec2 texelSize)
+{
+ /* Downsample with a 4x4 box filter + anti-flicker filter */
+ vec4 d = texelSize.xyxy * vec4(-1, -1, +1, +1);
+
+ vec3 s1 = textureLod(tex, uv + d.xy, 0.0).rgb;
+ vec3 s2 = textureLod(tex, uv + d.zy, 0.0).rgb;
+ vec3 s3 = textureLod(tex, uv + d.xw, 0.0).rgb;
+ vec3 s4 = textureLod(tex, uv + d.zw, 0.0).rgb;
+
+ /* Karis's luma weighted average (using brightness instead of luma) */
+ float s1w = 1.0 / (brightness(s1) + 1.0);
+ float s2w = 1.0 / (brightness(s2) + 1.0);
+ float s3w = 1.0 / (brightness(s3) + 1.0);
+ float s4w = 1.0 / (brightness(s4) + 1.0);
+ float one_div_wsum = 1.0 / (s1w + s2w + s3w + s4w);
+
+ return (s1 * s1w + s2 * s2w + s3 * s3w + s4 * s4w) * one_div_wsum;
+}
+
+vec3 downsample_filter(sampler2D tex, vec2 uv, vec2 texelSize)
+{
+ /* Downsample with a 4x4 box filter */
+ vec4 d = texelSize.xyxy * vec4(-1, -1, +1, +1);
+
+ vec3 s;
+ s = textureLod(tex, uv + d.xy, 0.0).rgb;
+ s += textureLod(tex, uv + d.zy, 0.0).rgb;
+ s += textureLod(tex, uv + d.xw, 0.0).rgb;
+ s += textureLod(tex, uv + d.zw, 0.0).rgb;
+
+ return s * (1.0 / 4);
+}
+
+vec3 upsample_filter_high(sampler2D tex, vec2 uv, vec2 texelSize)
+{
+ /* 9-tap bilinear upsampler (tent filter) */
+ vec4 d = texelSize.xyxy * vec4(1, 1, -1, 0) * sampleScale;
+
+ vec3 s;
+ s = textureLod(tex, uv - d.xy, 0.0).rgb;
+ s += textureLod(tex, uv - d.wy, 0.0).rgb * 2;
+ s += textureLod(tex, uv - d.zy, 0.0).rgb;
+
+ s += textureLod(tex, uv + d.zw, 0.0).rgb * 2;
+ s += textureLod(tex, uv , 0.0).rgb * 4;
+ s += textureLod(tex, uv + d.xw, 0.0).rgb * 2;
+
+ s += textureLod(tex, uv + d.zy, 0.0).rgb;
+ s += textureLod(tex, uv + d.wy, 0.0).rgb * 2;
+ s += textureLod(tex, uv + d.xy, 0.0).rgb;
+
+ return s * (1.0 / 16.0);
+}
+
+vec3 upsample_filter(sampler2D tex, vec2 uv, vec2 texelSize)
+{
+ /* 4-tap bilinear upsampler */
+ vec4 d = texelSize.xyxy * vec4(-1, -1, +1, +1) * (sampleScale * 0.5);
+
+ vec3 s;
+ s = textureLod(tex, uv + d.xy, 0.0).rgb;
+ s += textureLod(tex, uv + d.zy, 0.0).rgb;
+ s += textureLod(tex, uv + d.xw, 0.0).rgb;
+ s += textureLod(tex, uv + d.zw, 0.0).rgb;
+
+ return s * (1.0 / 4.0);
+}
+
+/* ----------- Steps ----------- */
+
+vec4 step_blit(void)
+{
+ vec2 uv = uvcoordsvar.xy + sourceBufferTexelSize.xy * 0.5;
+
+#ifdef HIGH_QUALITY /* Anti flicker */
+ vec3 d = sourceBufferTexelSize.xyx * vec3(1, 1, 0);
+ vec3 s0 = safe_color(textureLod(sourceBuffer, uvcoordsvar.xy, 0.0).rgb);
+ vec3 s1 = safe_color(textureLod(sourceBuffer, uvcoordsvar.xy - d.xz, 0.0).rgb);
+ vec3 s2 = safe_color(textureLod(sourceBuffer, uvcoordsvar.xy + d.xz, 0.0).rgb);
+ vec3 s3 = safe_color(textureLod(sourceBuffer, uvcoordsvar.xy - d.zy, 0.0).rgb);
+ vec3 s4 = safe_color(textureLod(sourceBuffer, uvcoordsvar.xy + d.zy, 0.0).rgb);
+ vec3 m = median(median(s0.rgb, s1, s2), s3, s4);
+#else
+ vec3 s0 = safe_color(textureLod(sourceBuffer, uvcoordsvar.xy, 0.0).rgb);
+ vec3 m = s0.rgb;
+#endif
+
+ /* Pixel brightness */
+ float br = brightness(m);
+
+ /* Under-threshold part: quadratic curve */
+ float rq = clamp(br - curveThreshold.x, 0, curveThreshold.y);
+ rq = curveThreshold.z * rq * rq;
+
+ /* Combine and apply the brightness response curve. */
+ m *= max(rq, br - curveThreshold.w) / max(1e-5, br);
+
+ /* Clamp pixel intensity */
+ br = max(1e-5, brightness(m));
+ m *= 1.0 - max(0.0, br - clampIntensity) / br;
+
+ return vec4(m, 1.0);
+}
+
+vec4 step_downsample(void)
+{
+#ifdef HIGH_QUALITY /* Anti flicker */
+ vec3 sample = downsample_filter_high(sourceBuffer, uvcoordsvar.xy, sourceBufferTexelSize);
+#else
+ vec3 sample = downsample_filter(sourceBuffer, uvcoordsvar.xy, sourceBufferTexelSize);
+#endif
+ return vec4(sample, 1.0);
+}
+
+vec4 step_upsample(void)
+{
+#ifdef HIGH_QUALITY
+ vec3 blur = upsample_filter_high(sourceBuffer, uvcoordsvar.xy, sourceBufferTexelSize);
+#else
+ vec3 blur = upsample_filter(sourceBuffer, uvcoordsvar.xy, sourceBufferTexelSize);
+#endif
+ vec3 base = textureLod(baseBuffer, uvcoordsvar.xy, 0.0).rgb;
+ return vec4(base + blur, 1.0);
+}
+
+vec4 step_resolve(void)
+{
+#ifdef HIGH_QUALITY
+ vec3 blur = upsample_filter_high(sourceBuffer, uvcoordsvar.xy, sourceBufferTexelSize);
+#else
+ vec3 blur = upsample_filter(sourceBuffer, uvcoordsvar.xy, sourceBufferTexelSize);
+#endif
+ vec4 base = textureLod(baseBuffer, uvcoordsvar.xy, 0.0);
+ vec3 cout = base.rgb + blur * bloomColor;
+ return vec4(cout, base.a);
+}
+
+void main(void)
+{
+#if defined(STEP_BLIT)
+ FragColor = step_blit();
+#elif defined(STEP_DOWNSAMPLE)
+ FragColor = step_downsample();
+#elif defined(STEP_UPSAMPLE)
+ FragColor = step_upsample();
+#elif defined(STEP_RESOLVE)
+ FragColor = step_resolve();
+#endif
+} \ No newline at end of file
diff --git a/source/blender/draw/engines/eevee/shaders/effect_dof_frag.glsl b/source/blender/draw/engines/eevee/shaders/effect_dof_frag.glsl
new file mode 100644
index 00000000000..04648f62688
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/effect_dof_frag.glsl
@@ -0,0 +1,261 @@
+
+uniform mat4 ProjectionMatrix;
+
+uniform sampler2D colorBuffer;
+uniform sampler2D depthBuffer;
+
+uniform vec3 dofParams;
+
+#define dof_aperturesize dofParams.x
+#define dof_distance dofParams.y
+#define dof_invsensorsize dofParams.z
+
+uniform vec4 bokehParams;
+
+#define bokeh_sides bokehParams.x /* Polygon Bokeh shape number of sides */
+#define bokeh_rotation bokehParams.y
+#define bokeh_ratio bokehParams.z
+#define bokeh_maxsize bokehParams.w
+
+uniform vec2 nearFar; /* Near & far view depths values */
+
+/* initial uv coordinate */
+in vec2 uvcoord;
+
+layout(location = 0) out vec4 fragData0;
+layout(location = 1) out vec4 fragData1;
+layout(location = 2) out vec4 fragData2;
+
+#define M_PI 3.1415926535897932384626433832795
+#define M_2PI 6.2831853071795864769252868
+
+/* -------------- Utils ------------- */
+
+/* calculate 4 samples at once */
+float calculate_coc(in float zdepth)
+{
+ float coc = dof_aperturesize * (dof_distance / zdepth - 1.0);
+
+ /* multiply by 1.0 / sensor size to get the normalized size */
+ return coc * dof_invsensorsize;
+}
+
+vec4 calculate_coc(in vec4 zdepth)
+{
+ vec4 coc = dof_aperturesize * (vec4(dof_distance) / zdepth - vec4(1.0));
+
+ /* multiply by 1.0 / sensor size to get the normalized size */
+ return coc * dof_invsensorsize;
+}
+
+float max4(vec4 x)
+{
+ return max(max(x.x, x.y), max(x.z, x.w));
+}
+
+float linear_depth(float z)
+{
+ /* if persp */
+ if (ProjectionMatrix[3][3] == 0.0) {
+ return (nearFar.x * nearFar.y) / (z * (nearFar.x - nearFar.y) + nearFar.y);
+ }
+ else {
+ return (z * 2.0 - 1.0) * nearFar.y;
+ }
+}
+
+vec4 linear_depth(vec4 z)
+{
+ /* if persp */
+ if (ProjectionMatrix[3][3] == 0.0) {
+ return (nearFar.xxxx * nearFar.yyyy) / (z * (nearFar.xxxx - nearFar.yyyy) + nearFar.yyyy);
+ }
+ else {
+ return (z * 2.0 - 1.0) * nearFar.yyyy;
+ }
+}
+
+#define THRESHOLD 0.0
+
+/* ----------- Steps ----------- */
+
+/* Downsample the color buffer to half resolution.
+ * Weight color samples by
+ * Compute maximum CoC for near and far blur. */
+void step_downsample(void)
+{
+ ivec4 uvs = ivec4(gl_FragCoord.xyxy) * 2 + ivec4(0, 0, 1, 1);
+
+ /* custom downsampling */
+ vec4 color1 = texelFetch(colorBuffer, uvs.xy, 0);
+ vec4 color2 = texelFetch(colorBuffer, uvs.zw, 0);
+ vec4 color3 = texelFetch(colorBuffer, uvs.zy, 0);
+ vec4 color4 = texelFetch(colorBuffer, uvs.xw, 0);
+
+ /* Leverage SIMD by combining 4 depth samples into a vec4 */
+ vec4 depth;
+ depth.r = texelFetch(depthBuffer, uvs.xy, 0).r;
+ depth.g = texelFetch(depthBuffer, uvs.zw, 0).r;
+ depth.b = texelFetch(depthBuffer, uvs.zy, 0).r;
+ depth.a = texelFetch(depthBuffer, uvs.xw, 0).r;
+
+ vec4 zdepth = linear_depth(depth);
+
+ /* Compute signed CoC for each depth samples */
+ vec4 coc_near = calculate_coc(zdepth);
+ vec4 coc_far = -coc_near;
+
+ /* now we need to write the near-far fields premultiplied by the coc */
+ vec4 near_weights = step(THRESHOLD, coc_near);
+ vec4 far_weights = step(THRESHOLD, coc_far);
+
+ /* now write output to weighted buffers. */
+ fragData0 = color1 * near_weights.x +
+ color2 * near_weights.y +
+ color3 * near_weights.z +
+ color4 * near_weights.w;
+
+ fragData1 = color1 * far_weights.x +
+ color2 * far_weights.y +
+ color3 * far_weights.z +
+ color4 * far_weights.w;
+
+ float norm_near = dot(near_weights, near_weights);
+ float norm_far = dot(far_weights, far_weights);
+
+ if (norm_near > 0.0) {
+ fragData0 /= norm_near;
+ }
+
+ if (norm_far > 0.0) {
+ fragData1 /= norm_far;
+ }
+
+ float max_near_coc = max(max4(coc_near), 0.0);
+ float max_far_coc = max(max4(coc_far), 0.0);
+
+ fragData2 = vec4(max_near_coc, max_far_coc, 0.0, 1.0);
+}
+
+/* coordinate used for calculating radius et al set in geometry shader */
+in vec2 particlecoord;
+flat in vec4 color;
+
+/* accumulate color in the near/far blur buffers */
+void step_scatter(void)
+{
+ /* Early out */
+ float dist_sqrd = dot(particlecoord, particlecoord);
+
+ /* Circle Dof */
+ if (dist_sqrd > 1.0) {
+ discard;
+ }
+
+ /* Regular Polygon Dof */
+ if (bokeh_sides > 0.0) {
+ /* Circle parametrization */
+ float theta = atan(particlecoord.y, particlecoord.x) + bokeh_rotation;
+ float r;
+
+ r = cos(M_PI / bokeh_sides) /
+ (cos(theta - (M_2PI / bokeh_sides) * floor((bokeh_sides * theta + M_PI) / M_2PI)));
+
+ if (dist_sqrd > r * r) {
+ discard;
+ }
+ }
+
+ fragData0 = color;
+}
+
+#define MERGE_THRESHOLD 4.0
+
+uniform sampler2D farBuffer;
+uniform sampler2D nearBuffer;
+
+vec4 upsample_filter_high(sampler2D tex, vec2 uv, vec2 texelSize)
+{
+ /* 9-tap bilinear upsampler (tent filter) */
+ vec4 d = texelSize.xyxy * vec4(1, 1, -1, 0);
+
+ vec4 s;
+ s = textureLod(tex, uv - d.xy, 0.0);
+ s += textureLod(tex, uv - d.wy, 0.0) * 2;
+ s += textureLod(tex, uv - d.zy, 0.0);
+
+ s += textureLod(tex, uv + d.zw, 0.0) * 2;
+ s += textureLod(tex, uv , 0.0) * 4;
+ s += textureLod(tex, uv + d.xw, 0.0) * 2;
+
+ s += textureLod(tex, uv + d.zy, 0.0);
+ s += textureLod(tex, uv + d.wy, 0.0) * 2;
+ s += textureLod(tex, uv + d.xy, 0.0);
+
+ return s * (1.0 / 16.0);
+}
+
+vec4 upsample_filter(sampler2D tex, vec2 uv, vec2 texelSize)
+{
+ /* 4-tap bilinear upsampler */
+ vec4 d = texelSize.xyxy * vec4(-1, -1, +1, +1) * 0.5;
+
+ vec4 s;
+ s = textureLod(tex, uv + d.xy, 0.0);
+ s += textureLod(tex, uv + d.zy, 0.0);
+ s += textureLod(tex, uv + d.xw, 0.0);
+ s += textureLod(tex, uv + d.zw, 0.0);
+
+ return s * (1.0 / 4.0);
+}
+
+/* Combine the Far and Near color buffers */
+void step_resolve(void)
+{
+ /* Recompute Near / Far CoC */
+ float depth = textureLod(depthBuffer, uvcoord, 0.0).r;
+ float zdepth = linear_depth(depth);
+ float coc_signed = calculate_coc(zdepth);
+ float coc_far = max(-coc_signed, 0.0);
+ float coc_near = max(coc_signed, 0.0);
+
+ /* Recompute Near / Far CoC */
+ vec2 texelSize = 1.0 / vec2(textureSize(farBuffer, 0));
+ vec4 srccolor = textureLod(colorBuffer, uvcoord, 0.0);
+ vec4 farcolor = upsample_filter_high(farBuffer, uvcoord, texelSize);
+ vec4 nearcolor = upsample_filter_high(nearBuffer, uvcoord, texelSize);
+
+ float farweight = farcolor.a;
+ if (farweight > 0.0)
+ farcolor /= farweight;
+
+ float mixfac = smoothstep(1.0, MERGE_THRESHOLD, coc_far);
+
+ farweight = mix(1.0, farweight, mixfac);
+
+ float nearweight = nearcolor.a;
+ if (nearweight > 0.0) {
+ nearcolor /= nearweight;
+ }
+
+ if (coc_near > 1.0) {
+ mixfac = smoothstep(1.0, MERGE_THRESHOLD, coc_near);
+ fragData0 = mix(srccolor, nearcolor, mixfac);
+ }
+ else {
+ float totalweight = nearweight + farweight;
+ vec4 finalcolor = mix(srccolor, farcolor, mixfac);
+ fragData0 = mix(finalcolor, nearcolor, nearweight / totalweight);
+ }
+}
+
+void main()
+{
+#ifdef STEP_DOWNSAMPLE
+ step_downsample();
+#elif defined(STEP_SCATTER)
+ step_scatter();
+#elif defined(STEP_RESOLVE)
+ step_resolve();
+#endif
+}
diff --git a/source/blender/draw/engines/eevee/shaders/effect_dof_geom.glsl b/source/blender/draw/engines/eevee/shaders/effect_dof_geom.glsl
new file mode 100644
index 00000000000..1c774885a32
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/effect_dof_geom.glsl
@@ -0,0 +1,55 @@
+uniform ivec2 targetBufferSize;
+
+uniform vec2 layerSelection;
+
+uniform sampler2D colorBuffer;
+uniform sampler2D cocBuffer;
+
+layout(points) in;
+layout(triangle_strip, max_vertices = 4) out;
+
+#define POS gl_in[0].gl_Position
+
+in vec2 uvcoord[];
+out vec2 particlecoord;
+flat out vec4 color;
+
+#define M_PI 3.1415926535897932384626433832795
+
+void main()
+{
+ vec4 coc = textureLod(cocBuffer, uvcoord[0], 0.0);
+
+ float offset_val = dot(coc.rg, layerSelection);
+ if (offset_val < 1.0)
+ return;
+
+ vec4 colortex = textureLod(colorBuffer, uvcoord[0], 0.0);
+
+ /* find the area the pixel will cover and divide the color by it */
+ float alpha = 1.0 / (offset_val * offset_val * M_PI);
+ colortex *= alpha;
+ colortex.a = alpha;
+
+ vec2 offset_far = vec2(offset_val * 0.5) / vec2(targetBufferSize.x, targetBufferSize.y);
+
+ color = colortex;
+
+ gl_Position = POS + vec4(-offset_far.x, -offset_far.y, 0.0, 0.0);
+ particlecoord = vec2(-1.0, -1.0);
+ EmitVertex();
+
+ gl_Position = POS + vec4(-offset_far.x, offset_far.y, 0.0, 0.0);
+ particlecoord = vec2(-1.0, 1.0);
+ EmitVertex();
+
+ gl_Position = POS + vec4(offset_far.x, -offset_far.y, 0.0, 0.0);
+ particlecoord = vec2(1.0, -1.0);
+ EmitVertex();
+
+ gl_Position = POS + vec4(offset_far.x, offset_far.y, 0.0, 0.0);
+ particlecoord = vec2(1.0, 1.0);
+ EmitVertex();
+
+ EndPrimitive();
+}
diff --git a/source/blender/draw/engines/eevee/shaders/effect_dof_vert.glsl b/source/blender/draw/engines/eevee/shaders/effect_dof_vert.glsl
new file mode 100644
index 00000000000..0f5c5e5b16b
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/effect_dof_vert.glsl
@@ -0,0 +1,99 @@
+
+in vec2 pos;
+in vec2 uvs;
+
+uniform vec2 layerSelection;
+
+uniform vec4 bokehParams;
+
+#define bokeh_sides bokehParams.x /* Polygon Bokeh shape number of sides */
+#define bokeh_rotation bokehParams.y
+#define bokeh_ratio bokehParams.z
+#define bokeh_maxsize bokehParams.w
+
+uniform sampler2D colorBuffer;
+uniform sampler2D cocBuffer;
+
+flat out vec4 color;
+out vec2 particlecoord;
+
+#define M_PI 3.1415926535897932384626433832795
+
+/* geometry shading pass, calculate a texture coordinate based on the indexed id */
+void step_scatter()
+{
+ ivec2 tex_size = textureSize(cocBuffer, 0);
+ vec2 texel_size = 1.0 / vec2(tex_size);
+
+ int t_id = gl_VertexID / 3; /* Triangle Id */
+
+ ivec2 texelco = ivec2(0);
+ /* some math to get the target pixel */
+ texelco.x = t_id % tex_size.x;
+ texelco.y = t_id / tex_size.x;
+
+ float coc = dot(layerSelection, texelFetch(cocBuffer, texelco, 0).rg);
+
+ /* Clamp to max size for performance */
+ coc = min(coc, bokeh_maxsize);
+
+ if (coc >= 1.0) {
+ color = texelFetch(colorBuffer, texelco, 0);
+ /* find the area the pixel will cover and divide the color by it */
+ float alpha = 1.0 / (coc * coc * M_PI);
+ color *= alpha;
+ color.a = alpha;
+ }
+ else {
+ color = vec4(0.0);
+ }
+
+ /* Generate Triangle : less memory fetches from a VBO */
+ int v_id = gl_VertexID % 3; /* Vertex Id */
+
+ /* Extend to cover at least the unit circle */
+ const float extend = (cos(M_PI / 4.0) + 1.0) * 2.0;
+ /* Crappy diagram
+ * ex 1
+ * | \
+ * | \
+ * 1 | \
+ * | \
+ * | \
+ * 0 | x \
+ * | Circle \
+ * | Origin \
+ * -1 0 --------------- 2
+ * -1 0 1 ex
+ **/
+ gl_Position.x = float(v_id / 2) * extend - 1.0; /* int divisor round down */
+ gl_Position.y = float(v_id % 2) * extend - 1.0;
+ gl_Position.z = 0.0;
+ gl_Position.w = 1.0;
+
+ /* Generate Triangle */
+ particlecoord = gl_Position.xy;
+
+ gl_Position.xy *= coc * texel_size * vec2(bokeh_ratio, 1.0);
+ gl_Position.xy -= 1.0 - 0.5 * texel_size; /* NDC Bottom left */
+ gl_Position.xy += (0.5 + vec2(texelco) * 2.0) * texel_size;
+}
+
+out vec2 uvcoord;
+
+void passthrough()
+{
+ uvcoord = uvs;
+ gl_Position = vec4(pos, 0.0, 1.0);
+}
+
+void main()
+{
+#if defined(STEP_DOWNSAMPLE)
+ passthrough();
+#elif defined(STEP_SCATTER)
+ step_scatter();
+#elif defined(STEP_RESOLVE)
+ passthrough();
+#endif
+} \ No newline at end of file
diff --git a/source/blender/draw/engines/eevee/shaders/effect_downsample_cube_frag.glsl b/source/blender/draw/engines/eevee/shaders/effect_downsample_cube_frag.glsl
new file mode 100644
index 00000000000..eb463d51146
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/effect_downsample_cube_frag.glsl
@@ -0,0 +1,30 @@
+/**
+ * Simple downsample shader. Takes the average of the 4 texels of lower mip.
+ **/
+
+uniform samplerCube source;
+uniform float texelSize;
+
+flat in int fFace;
+
+out vec4 FragColor;
+
+const vec3 maj_axes[6] = vec3[6](vec3(1.0, 0.0, 0.0), vec3(-1.0, 0.0, 0.0), vec3(0.0, 1.0, 0.0), vec3(0.0, -1.0, 0.0), vec3( 0.0, 0.0, 1.0), vec3( 0.0, 0.0, -1.0));
+const vec3 x_axis[6] = vec3[6](vec3(0.0, 0.0, -1.0), vec3( 0.0, 0.0, 1.0), vec3(1.0, 0.0, 0.0), vec3(1.0, 0.0, 0.0), vec3( 1.0, 0.0, 0.0), vec3(-1.0, 0.0, 0.0));
+const vec3 y_axis[6] = vec3[6](vec3(0.0, -1.0, 0.0), vec3( 0.0, -1.0, 0.0), vec3(0.0, 0.0, 1.0), vec3(0.0, 0.0, -1.0), vec3( 0.0, -1.0, 0.0), vec3( 0.0, -1.0, 0.0));
+
+float brightness(vec3 c)
+{
+ return max(max(c.r, c.g), c.b);
+}
+
+void main()
+{
+ vec2 uvs = gl_FragCoord.xy * texelSize;
+
+ uvs = 2.0 * uvs - 1.0;
+
+ vec3 cubevec = x_axis[fFace] * uvs.x + y_axis[fFace] * uvs.y + maj_axes[fFace];
+
+ FragColor = textureLod(source, cubevec, 0.0);
+} \ No newline at end of file
diff --git a/source/blender/draw/engines/eevee/shaders/effect_downsample_frag.glsl b/source/blender/draw/engines/eevee/shaders/effect_downsample_frag.glsl
new file mode 100644
index 00000000000..156be108a14
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/effect_downsample_frag.glsl
@@ -0,0 +1,37 @@
+/**
+ * Simple downsample shader. Takes the average of the 4 texels of lower mip.
+ **/
+
+uniform sampler2D source;
+uniform float fireflyFactor;
+
+out vec4 FragColor;
+
+float brightness(vec3 c)
+{
+ return max(max(c.r, c.g), c.b);
+}
+
+void main()
+{
+#if 0
+ /* Reconstructing Target uvs like this avoid missing pixels if NPO2 */
+ vec2 uvs = gl_FragCoord.xy * 2.0 / vec2(textureSize(source, 0));
+
+ FragColor = textureLod(source, uvs, 0.0);
+#else
+ vec2 texel_size = 1.0 / vec2(textureSize(source, 0));
+ vec2 uvs = gl_FragCoord.xy * 2.0 * texel_size;
+ vec4 ofs = texel_size.xyxy * vec4(0.75, 0.75, -0.75, -0.75);
+
+ FragColor = textureLod(source, uvs + ofs.xy, 0.0);
+ FragColor += textureLod(source, uvs + ofs.xw, 0.0);
+ FragColor += textureLod(source, uvs + ofs.zy, 0.0);
+ FragColor += textureLod(source, uvs + ofs.zw, 0.0);
+ FragColor *= 0.25;
+
+ /* Clamped brightness. */
+ float luma = max(1e-8, brightness(FragColor.rgb));
+ FragColor *= 1.0 - max(0.0, luma - fireflyFactor) / luma;
+#endif
+} \ No newline at end of file
diff --git a/source/blender/draw/engines/eevee/shaders/effect_gtao_frag.glsl b/source/blender/draw/engines/eevee/shaders/effect_gtao_frag.glsl
new file mode 100644
index 00000000000..b7bcf5c8a8b
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/effect_gtao_frag.glsl
@@ -0,0 +1,77 @@
+/**
+ * This shader only compute maximum horizon angles for each directions.
+ * The final integration is done at the resolve stage with the shading normal.
+ **/
+
+uniform float rotationOffset;
+
+out vec4 FragColor;
+
+#ifdef DEBUG_AO
+uniform sampler2D normalBuffer;
+
+void main()
+{
+ vec2 texel_size = 1.0 / vec2(textureSize(depthBuffer, 0)).xy;
+ vec2 uvs = saturate(gl_FragCoord.xy * texel_size);
+
+ float depth = textureLod(depthBuffer, uvs, 0.0).r;
+
+ vec3 viewPosition = get_view_space_from_depth(uvs, depth);
+ vec3 V = viewCameraVec;
+ vec3 normal = normal_decode(texture(normalBuffer, uvs).rg, V);
+
+ vec3 bent_normal;
+ float visibility;
+
+ vec4 noise = texelfetch_noise_tex(gl_FragCoord.xy);
+
+ gtao_deferred(normal, viewPosition, noise, depth, visibility, bent_normal);
+
+ /* Handle Background case. Prevent artifact due to uncleared Horizon Render Target. */
+ FragColor = vec4((depth == 1.0) ? 0.0 : visibility);
+}
+
+#else
+
+#ifdef LAYERED_DEPTH
+uniform sampler2DArray depthBufferLayered;
+uniform int layer;
+# define gtao_depthBuffer depthBufferLayered
+# define gtao_textureLod(a, b, c) textureLod(a, vec3(b, layer), c)
+
+#else
+# define gtao_depthBuffer depthBuffer
+# define gtao_textureLod(a, b, c) textureLod(a, b, c)
+
+#endif
+
+void main()
+{
+ vec2 uvs = saturate(gl_FragCoord.xy / vec2(textureSize(gtao_depthBuffer, 0).xy));
+ float depth = gtao_textureLod(gtao_depthBuffer, uvs, 0.0).r;
+
+ if (depth == 1.0) {
+ /* Do not trace for background */
+ FragColor = vec4(0.0);
+ return;
+ }
+
+ /* Avoid self shadowing. */
+ depth = saturate(depth - 3e-6); /* Tweaked for 24bit depth buffer. */
+
+ vec3 viewPosition = get_view_space_from_depth(uvs, depth);
+ vec4 noise = texelfetch_noise_tex(gl_FragCoord.xy);
+ vec2 max_dir = get_max_dir(viewPosition.z);
+ vec4 dirs;
+ dirs.xy = get_ao_dir(noise.x * 0.5);
+ dirs.zw = get_ao_dir(noise.x * 0.5 + 0.5);
+
+ /* Search in 4 directions. */
+ FragColor.xy = search_horizon_sweep(dirs.xy, viewPosition, uvs, noise.y, max_dir);
+ FragColor.zw = search_horizon_sweep(dirs.zw, viewPosition, uvs, noise.y, max_dir);
+
+ /* Resize output for integer texture. */
+ FragColor = pack_horizons(FragColor);
+}
+#endif
diff --git a/source/blender/draw/engines/eevee/shaders/effect_minmaxz_frag.glsl b/source/blender/draw/engines/eevee/shaders/effect_minmaxz_frag.glsl
new file mode 100644
index 00000000000..ea1dba38594
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/effect_minmaxz_frag.glsl
@@ -0,0 +1,76 @@
+/**
+ * Shader that downsample depth buffer,
+ * saving min and max value of each texel in the above mipmaps.
+ * Adapted from http://rastergrid.com/blog/2010/10/hierarchical-z-map-based-occlusion-culling/
+ **/
+
+#ifdef LAYERED
+uniform sampler2DArray depthBuffer;
+uniform int depthLayer;
+#else
+uniform sampler2D depthBuffer;
+#endif
+
+#ifdef LAYERED
+#define sampleLowerMip(t) texelFetch(depthBuffer, ivec3(t, depthLayer), 0).r
+#else
+#define sampleLowerMip(t) texelFetch(depthBuffer, t, 0).r
+#endif
+
+#ifdef MIN_PASS
+#define minmax(a, b) min(a, b)
+#else /* MAX_PASS */
+#define minmax(a, b) max(a, b)
+#endif
+
+/* On some AMD card / driver conbination, it is needed otherwise,
+ * the shader does not write anything. */
+#if defined(GPU_INTEL) || defined(GPU_ATI)
+out vec4 fragColor;
+#endif
+
+void main()
+{
+ ivec2 texelPos = ivec2(gl_FragCoord.xy);
+ ivec2 mipsize = textureSize(depthBuffer, 0).xy;
+
+#ifndef COPY_DEPTH
+ texelPos *= 2;
+#endif
+
+ float val = sampleLowerMip(texelPos);
+#ifndef COPY_DEPTH
+ float val2 = sampleLowerMip(texelPos + ivec2(1, 0));
+ float val3 = sampleLowerMip(texelPos + ivec2(1, 1));
+ float val4 = sampleLowerMip(texelPos + ivec2(0, 1));
+ val = minmax(val, val2);
+ val = minmax(val, val3);
+ val = minmax(val, val4);
+
+ /* if we are reducing an odd-width texture then fetch the edge texels */
+ if (((mipsize.x & 1) != 0) && (texelPos.x == mipsize.x - 3)) {
+ /* if both edges are odd, fetch the top-left corner texel */
+ if (((mipsize.y & 1) != 0) && (texelPos.y == mipsize.y - 3)) {
+ val = minmax(val, sampleLowerMip(texelPos + ivec2(2, 2)));
+ }
+ float val2 = sampleLowerMip(texelPos + ivec2(2, 0));
+ float val3 = sampleLowerMip(texelPos + ivec2(2, 1));
+ val = minmax(val, val2);
+ val = minmax(val, val3);
+ }
+ /* if we are reducing an odd-height texture then fetch the edge texels */
+ if (((mipsize.y & 1) != 0) && (texelPos.y == mipsize.y - 3)) {
+ float val2 = sampleLowerMip(texelPos + ivec2(0, 2));
+ float val3 = sampleLowerMip(texelPos + ivec2(1, 2));
+ val = minmax(val, val2);
+ val = minmax(val, val3);
+ }
+#endif
+
+#if defined(GPU_INTEL) || defined(GPU_ATI)
+ /* Use color format instead of 24bit depth texture */
+ fragColor = vec4(val);
+#else
+ gl_FragDepth = val;
+#endif
+} \ No newline at end of file
diff --git a/source/blender/draw/engines/eevee/shaders/effect_mist_frag.glsl b/source/blender/draw/engines/eevee/shaders/effect_mist_frag.glsl
new file mode 100644
index 00000000000..fe38b2e9aac
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/effect_mist_frag.glsl
@@ -0,0 +1,31 @@
+/* Convert depth to Mist factor */
+uniform vec3 mistSettings;
+
+#define mistStart mistSettings.x
+#define mistInvDistance mistSettings.y
+#define mistFalloff mistSettings.z
+
+out vec4 fragColor;
+
+void main()
+{
+ vec2 texel_size = 1.0 / vec2(textureSize(depthBuffer, 0)).xy;
+ vec2 uvs = gl_FragCoord.xy * texel_size;
+
+ float depth = textureLod(depthBuffer, uvs, 0.0).r;
+ vec3 co = get_view_space_from_depth(uvs, depth);
+
+ float zcor = (ProjectionMatrix[3][3] == 0.0) ? length(co) : -co.z;
+
+ /* bring depth into 0..1 range */
+ float mist = saturate((zcor - mistStart) * mistInvDistance);
+
+ /* falloff */
+ mist = pow(mist, mistFalloff);
+
+ fragColor = vec4(mist);
+
+ // if (mist > 0.999) fragColor = vec4(1.0);
+ // else if (mist > 0.0001) fragColor = vec4(0.5);
+ // else fragColor = vec4(0.0);
+}
diff --git a/source/blender/draw/engines/eevee/shaders/effect_motion_blur_frag.glsl b/source/blender/draw/engines/eevee/shaders/effect_motion_blur_frag.glsl
new file mode 100644
index 00000000000..73e284570cd
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/effect_motion_blur_frag.glsl
@@ -0,0 +1,65 @@
+
+uniform sampler2D colorBuffer;
+uniform sampler2D depthBuffer;
+
+
+/* current frame */
+uniform mat4 currInvViewProjMatrix;
+
+/* past frame frame */
+uniform mat4 pastViewProjMatrix;
+
+in vec4 uvcoordsvar;
+
+out vec4 FragColor;
+
+#define MAX_SAMPLE 64
+
+uniform int samples;
+
+float wang_hash_noise(uint s)
+{
+ uint seed = (uint(gl_FragCoord.x) * 1664525u + uint(gl_FragCoord.y)) + s;
+
+ seed = (seed ^ 61u) ^ (seed >> 16u);
+ seed *= 9u;
+ seed = seed ^ (seed >> 4u);
+ seed *= 0x27d4eb2du;
+ seed = seed ^ (seed >> 15u);
+
+ float value = float(seed);
+ value *= 1.0 / 4294967296.0;
+ return fract(value);
+}
+
+void main()
+{
+ vec3 ndc_pos;
+ ndc_pos.xy = uvcoordsvar.xy;
+ ndc_pos.z = texture(depthBuffer, uvcoordsvar.xy).x;
+
+ float inv_samples = 1.0 / float(samples);
+ float noise = 2.0 * wang_hash_noise(0u) * inv_samples;
+
+ /* Normalize Device Coordinates are [-1, +1]. */
+ ndc_pos = ndc_pos * 2.0 - 1.0;
+
+ vec4 p = currInvViewProjMatrix * vec4(ndc_pos, 1.0);
+ vec3 world_pos = p.xyz / p.w; /* Perspective divide */
+
+ /* Now find where was this pixel position
+ * inside the past camera viewport */
+ vec4 old_ndc = pastViewProjMatrix * vec4(world_pos, 1.0);
+ old_ndc.xyz /= old_ndc.w; /* Perspective divide */
+
+ vec2 motion = (ndc_pos.xy - old_ndc.xy) * 0.25; /* 0.25 fit cycles ref */
+
+ float inc = 2.0 * inv_samples;
+ float i = -1.0 + noise;
+
+ FragColor = vec4(0.0);
+ for (int j = 0; j < samples && j < MAX_SAMPLE; j++) {
+ FragColor += textureLod(colorBuffer, uvcoordsvar.xy + motion * i, 0.0) * inv_samples;
+ i += inc;
+ }
+}
diff --git a/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl b/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl
new file mode 100644
index 00000000000..aa88e365d93
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl
@@ -0,0 +1,517 @@
+
+/* Based on Stochastic Screen Space Reflections
+ * https://www.ea.com/frostbite/news/stochastic-screen-space-reflections */
+
+#ifndef UTIL_TEX
+#define UTIL_TEX
+uniform sampler2DArray utilTex;
+#define texelfetch_noise_tex(coord) texelFetch(utilTex, ivec3(ivec2(coord) % LUT_SIZE, 2.0), 0)
+#endif /* UTIL_TEX */
+
+#define MAX_MIP 9.0
+
+uniform ivec2 halfresOffset;
+
+ivec2 encode_hit_data(vec2 hit_pos, bool has_hit, bool is_planar)
+{
+ ivec2 hit_data = ivec2(saturate(hit_pos) * 32767.0); /* 16bit signed int limit */
+ hit_data.x *= (is_planar) ? -1 : 1;
+ hit_data.y *= (has_hit) ? 1 : -1;
+ return hit_data;
+}
+
+vec2 decode_hit_data(vec2 hit_data, out bool has_hit, out bool is_planar)
+{
+ is_planar = (hit_data.x < 0);
+ has_hit = (hit_data.y > 0);
+ return vec2(abs(hit_data)) / 32767.0; /* 16bit signed int limit */
+}
+
+#ifdef STEP_RAYTRACE
+
+uniform sampler2D normalBuffer;
+uniform sampler2D specroughBuffer;
+
+layout(location = 0) out ivec2 hitData;
+layout(location = 1) out float pdfData;
+
+void do_planar_ssr(int index, vec3 V, vec3 N, vec3 T, vec3 B, vec3 planeNormal, vec3 viewPosition, float a2, vec4 rand)
+{
+ float NH;
+ vec3 H = sample_ggx(rand.xzw, a2, N, T, B, NH); /* Microfacet normal */
+ float pdf = pdf_ggx_reflect(NH, a2);
+
+ vec3 R = reflect(-V, H);
+ R = reflect(R, planeNormal);
+
+ /* If ray is bad (i.e. going below the plane) regenerate. */
+ if (dot(R, planeNormal) > 0.0) {
+ vec3 H = sample_ggx(rand.xzw * vec3(1.0, -1.0, -1.0), a2, N, T, B, NH); /* Microfacet normal */
+ pdf = pdf_ggx_reflect(NH, a2);
+
+ R = reflect(-V, H);
+ R = reflect(R, planeNormal);
+ }
+
+ pdfData = min(1024e32, pdf); /* Theoretical limit of 16bit float */
+
+ /* Since viewspace hit position can land behind the camera in this case,
+ * we save the reflected view position (visualize it as the hit position
+ * below the reflection plane). This way it's garanted that the hit will
+ * be in front of the camera. That let us tag the bad rays with a negative
+ * sign in the Z component. */
+ vec3 hit_pos = raycast(index, viewPosition, R * 1e16, 1e16, rand.y, ssrQuality, a2, false);
+
+ hitData = encode_hit_data(hit_pos.xy, (hit_pos.z > 0.0), true);
+}
+
+void do_ssr(vec3 V, vec3 N, vec3 T, vec3 B, vec3 viewPosition, float a2, vec4 rand)
+{
+ float NH;
+ vec3 H = sample_ggx(rand.xzw, a2, N, T, B, NH); /* Microfacet normal */
+ float pdf = pdf_ggx_reflect(NH, a2);
+
+ vec3 R = reflect(-V, H);
+ pdfData = min(1024e32, pdf); /* Theoretical limit of 16bit float */
+
+ vec3 hit_pos = raycast(-1, viewPosition, R * 1e16, ssrThickness, rand.y, ssrQuality, a2, true);
+
+ hitData = encode_hit_data(hit_pos.xy, (hit_pos.z > 0.0), false);
+}
+
+void main()
+{
+#ifdef FULLRES
+ ivec2 fullres_texel = ivec2(gl_FragCoord.xy);
+ ivec2 halfres_texel = fullres_texel;
+#else
+ ivec2 fullres_texel = ivec2(gl_FragCoord.xy) * 2 + halfresOffset;
+ ivec2 halfres_texel = ivec2(gl_FragCoord.xy);
+#endif
+
+ float depth = texelFetch(depthBuffer, fullres_texel, 0).r;
+
+ /* Default: not hits. */
+ hitData = encode_hit_data(vec2(0.5), false, false);
+ pdfData = 0.0;
+
+ /* Early out */
+ /* We can't do discard because we don't clear the render target. */
+ if (depth == 1.0)
+ return;
+
+ vec2 uvs = vec2(fullres_texel) / vec2(textureSize(depthBuffer, 0));
+
+ /* Using view space */
+ vec3 viewPosition = get_view_space_from_depth(uvs, depth);
+ vec3 V = viewCameraVec;
+ vec3 N = normal_decode(texelFetch(normalBuffer, fullres_texel, 0).rg, V);
+
+ /* Retrieve pixel data */
+ vec4 speccol_roughness = texelFetch(specroughBuffer, fullres_texel, 0).rgba;
+
+ /* Early out */
+ if (dot(speccol_roughness.rgb, vec3(1.0)) == 0.0)
+ return;
+
+ float roughness = speccol_roughness.a;
+ float roughnessSquared = max(1e-3, roughness * roughness);
+ float a2 = roughnessSquared * roughnessSquared;
+
+ /* Early out */
+ if (roughness > ssrMaxRoughness + 0.2)
+ return;
+
+ vec4 rand = texelFetch(utilTex, ivec3(halfres_texel % LUT_SIZE, 2), 0);
+
+ /* Gives *perfect* reflection for very small roughness */
+ if (roughness < 0.04) {
+ rand.xzw *= 0.0;
+ }
+ /* Importance sampling bias */
+ rand.x = mix(rand.x, 0.0, ssrBrdfBias);
+
+ vec3 worldPosition = transform_point(ViewMatrixInverse, viewPosition);
+ vec3 wN = transform_direction(ViewMatrixInverse, N);
+
+ vec3 T, B;
+ make_orthonormal_basis(N, T, B); /* Generate tangent space */
+
+ /* Planar Reflections */
+ for (int i = 0; i < MAX_PLANAR && i < prbNumPlanar; ++i) {
+ PlanarData pd = planars_data[i];
+
+ float fade = probe_attenuation_planar(pd, worldPosition, wN, 0.0);
+
+ if (fade > 0.5) {
+ /* Find view vector / reflection plane intersection. */
+ /* TODO optimize, use view space for all. */
+ vec3 tracePosition = line_plane_intersect(worldPosition, cameraVec, pd.pl_plane_eq);
+ tracePosition = transform_point(ViewMatrix, tracePosition);
+ vec3 planeNormal = transform_direction(ViewMatrix, pd.pl_normal);
+
+ do_planar_ssr(i, V, N, T, B, planeNormal, tracePosition, a2, rand);
+ return;
+ }
+ }
+
+ do_ssr(V, N, T, B, viewPosition, a2, rand);
+}
+
+#else /* STEP_RESOLVE */
+
+uniform sampler2D prevColorBuffer; /* previous frame */
+uniform sampler2D normalBuffer;
+uniform sampler2D specroughBuffer;
+
+uniform isampler2D hitBuffer;
+uniform sampler2D pdfBuffer;
+
+uniform int neighborOffset;
+
+const ivec2 neighbors[32] = ivec2[32](
+ ivec2( 0, 0), ivec2( 1, 1), ivec2(-2, 0), ivec2( 0, -2),
+ ivec2( 0, 0), ivec2( 1, -1), ivec2(-2, 0), ivec2( 0, 2),
+ ivec2( 0, 0), ivec2(-1, -1), ivec2( 2, 0), ivec2( 0, 2),
+ ivec2( 0, 0), ivec2(-1, 1), ivec2( 2, 0), ivec2( 0, -2),
+
+ ivec2( 0, 0), ivec2( 2, 2), ivec2(-2, 2), ivec2( 0, -1),
+ ivec2( 0, 0), ivec2( 2, -2), ivec2(-2, -2), ivec2( 0, 1),
+ ivec2( 0, 0), ivec2(-2, -2), ivec2(-2, 2), ivec2( 1, 0),
+ ivec2( 0, 0), ivec2( 2, 2), ivec2( 2, -2), ivec2(-1, 0)
+);
+
+out vec4 fragColor;
+
+void fallback_cubemap(
+ vec3 N, vec3 V, vec3 W, vec3 viewPosition, float roughness, float roughnessSquared, inout vec4 spec_accum)
+{
+ /* Specular probes */
+ vec3 spec_dir = get_specular_reflection_dominant_dir(N, V, roughnessSquared);
+
+ vec4 rand = texelfetch_noise_tex(gl_FragCoord.xy);
+ vec3 bent_normal;
+#ifdef SSR_AO
+ float final_ao = occlusion_compute(N, viewPosition, 1.0, rand, bent_normal);
+ final_ao = specular_occlusion(dot(N, V), final_ao, roughness);
+#else
+ const float final_ao = 1.0;
+#endif
+
+ /* Starts at 1 because 0 is world probe */
+ for (int i = 1; i < MAX_PROBE && i < prbNumRenderCube && spec_accum.a < 0.999; ++i) {
+ CubeData cd = probes_data[i];
+
+ float fade = probe_attenuation_cube(cd, W);
+
+ if (fade > 0.0) {
+ vec3 spec = final_ao * probe_evaluate_cube(float(i), cd, W, spec_dir, roughness);
+ accumulate_light(spec, fade, spec_accum);
+ }
+ }
+
+ /* World Specular */
+ if (spec_accum.a < 0.999) {
+ vec3 spec = final_ao * probe_evaluate_world_spec(spec_dir, roughness);
+ accumulate_light(spec, 1.0, spec_accum);
+ }
+}
+
+#if 0 /* Finish reprojection with motion vectors */
+vec3 get_motion_vector(vec3 pos)
+{
+}
+
+/* http://bitsquid.blogspot.fr/2017/06/reprojecting-reflections_22.html */
+vec3 find_reflection_incident_point(vec3 cam, vec3 hit, vec3 pos, vec3 N)
+{
+ float d_cam = point_plane_projection_dist(cam, pos, N);
+ float d_hit = point_plane_projection_dist(hit, pos, N);
+
+ if (d_hit < d_cam) {
+ /* Swap */
+ float tmp = d_cam;
+ d_cam = d_hit;
+ d_hit = tmp;
+ }
+
+ vec3 proj_cam = cam - (N * d_cam);
+ vec3 proj_hit = hit - (N * d_hit);
+
+ return (proj_hit - proj_cam) * d_cam / (d_cam + d_hit) + proj_cam;
+}
+#endif
+
+float brightness(vec3 c)
+{
+ return max(max(c.r, c.g), c.b);
+}
+
+vec2 get_reprojected_reflection(vec3 hit, vec3 pos, vec3 N)
+{
+ /* TODO real reprojection with motion vectors, etc... */
+ return project_point(pastViewProjectionMatrix, hit).xy * 0.5 + 0.5;
+}
+
+float get_sample_depth(vec2 hit_co, bool is_planar, float planar_index)
+{
+ if (is_planar) {
+ return textureLod(planarDepth, vec3(hit_co, planar_index), 0.0).r;
+ }
+ else {
+ return textureLod(depthBuffer, hit_co, 0.0).r;
+ }
+}
+
+vec3 get_hit_vector(
+ vec3 hit_pos, PlanarData pd, vec3 worldPosition, vec3 N, vec3 V, bool is_planar,
+ inout vec2 hit_co, inout float mask)
+{
+ vec3 hit_vec;
+
+ if (is_planar) {
+ /* Reflect back the hit position to have it in non-reflected world space */
+ vec3 trace_pos = line_plane_intersect(worldPosition, V, pd.pl_plane_eq);
+ hit_vec = hit_pos - trace_pos;
+ hit_vec = reflect(hit_vec, pd.pl_normal);
+ }
+ else {
+ /* Find hit position in previous frame. */
+ mask = screen_border_mask(gl_FragCoord.xy / vec2(textureSize(depthBuffer, 0)));
+ hit_co = get_reprojected_reflection(hit_pos, worldPosition, N);
+ hit_vec = hit_pos - worldPosition;
+ }
+
+ mask = min(mask, screen_border_mask(hit_co));
+ return hit_vec;
+}
+
+vec3 get_scene_color(vec2 ref_uvs, float mip, float planar_index, bool is_planar)
+{
+ if (is_planar) {
+ return textureLod(probePlanars, vec3(ref_uvs, planar_index), min(mip, prbLodPlanarMax)).rgb;
+ }
+ else {
+ return textureLod(prevColorBuffer, ref_uvs, mip).rgb;
+ }
+}
+
+vec4 get_ssr_samples(
+ vec4 hit_pdf, ivec4 hit_data[2],
+ PlanarData pd, float planar_index, vec3 worldPosition, vec3 N, vec3 V,
+ float roughnessSquared, float cone_tan, vec2 source_uvs,
+ inout float weight_acc)
+{
+ bvec4 is_planar, has_hit;
+ vec4 hit_co[2];
+ hit_co[0].xy = decode_hit_data(hit_data[0].xy, has_hit.x, is_planar.x);
+ hit_co[0].zw = decode_hit_data(hit_data[0].zw, has_hit.y, is_planar.y);
+ hit_co[1].xy = decode_hit_data(hit_data[1].xy, has_hit.z, is_planar.z);
+ hit_co[1].zw = decode_hit_data(hit_data[1].zw, has_hit.w, is_planar.w);
+
+ vec4 hit_depth;
+ hit_depth.x = get_sample_depth(hit_co[0].xy, is_planar.x, planar_index);
+ hit_depth.y = get_sample_depth(hit_co[0].zw, is_planar.y, planar_index);
+ hit_depth.z = get_sample_depth(hit_co[1].xy, is_planar.z, planar_index);
+ hit_depth.w = get_sample_depth(hit_co[1].zw, is_planar.w, planar_index);
+
+ /* Hit position in view space. */
+ vec3 hit_view[4];
+ hit_view[0] = get_view_space_from_depth(hit_co[0].xy, hit_depth.x);
+ hit_view[1] = get_view_space_from_depth(hit_co[0].zw, hit_depth.y);
+ hit_view[2] = get_view_space_from_depth(hit_co[1].xy, hit_depth.z);
+ hit_view[3] = get_view_space_from_depth(hit_co[1].zw, hit_depth.w);
+
+ vec4 homcoord = vec4(hit_view[0].z, hit_view[1].z, hit_view[2].z, hit_view[3].z);
+ homcoord = ProjectionMatrix[2][3] * homcoord + ProjectionMatrix[3][3];
+
+ /* Hit position in world space. */
+ vec3 hit_pos[4];
+ hit_pos[0] = transform_point(ViewMatrixInverse, hit_view[0]);
+ hit_pos[1] = transform_point(ViewMatrixInverse, hit_view[1]);
+ hit_pos[2] = transform_point(ViewMatrixInverse, hit_view[2]);
+ hit_pos[3] = transform_point(ViewMatrixInverse, hit_view[3]);
+
+ /* Get actual hit vector and hit coordinate (from last frame). */
+ vec4 mask = vec4(1.0);
+ hit_pos[0] = get_hit_vector(hit_pos[0], pd, worldPosition, N, V, is_planar.x, hit_co[0].xy, mask.x);
+ hit_pos[1] = get_hit_vector(hit_pos[1], pd, worldPosition, N, V, is_planar.y, hit_co[0].zw, mask.y);
+ hit_pos[2] = get_hit_vector(hit_pos[2], pd, worldPosition, N, V, is_planar.z, hit_co[1].xy, mask.z);
+ hit_pos[3] = get_hit_vector(hit_pos[3], pd, worldPosition, N, V, is_planar.w, hit_co[1].zw, mask.w);
+
+ vec4 hit_dist;
+ hit_dist.x = length(hit_pos[0]);
+ hit_dist.y = length(hit_pos[1]);
+ hit_dist.z = length(hit_pos[2]);
+ hit_dist.w = length(hit_pos[3]);
+ hit_dist = max(vec4(1e-8), hit_dist);
+
+ /* Normalize */
+ hit_pos[0] /= hit_dist.x;
+ hit_pos[1] /= hit_dist.y;
+ hit_pos[2] /= hit_dist.z;
+ hit_pos[3] /= hit_dist.w;
+
+ /* Compute cone footprint in screen space. */
+ vec4 cone_footprint = hit_dist * cone_tan;
+ cone_footprint = ssrBrdfBias * 0.5 * cone_footprint * max(ProjectionMatrix[0][0], ProjectionMatrix[1][1]) / homcoord;
+
+ /* Estimate a cone footprint to sample a corresponding mipmap level. */
+ vec4 mip = log2(cone_footprint * max_v2(vec2(textureSize(depthBuffer, 0))));
+ mip = clamp(mip, 0.0, MAX_MIP);
+
+ /* Correct UVs for mipmaping mis-alignment */
+ hit_co[0].xy *= mip_ratio_interp(mip.x);
+ hit_co[0].zw *= mip_ratio_interp(mip.y);
+ hit_co[1].xy *= mip_ratio_interp(mip.z);
+ hit_co[1].zw *= mip_ratio_interp(mip.w);
+
+ /* Slide 54 */
+ vec4 bsdf;
+ bsdf.x = bsdf_ggx(N, hit_pos[0], V, roughnessSquared);
+ bsdf.y = bsdf_ggx(N, hit_pos[1], V, roughnessSquared);
+ bsdf.z = bsdf_ggx(N, hit_pos[2], V, roughnessSquared);
+ bsdf.w = bsdf_ggx(N, hit_pos[3], V, roughnessSquared);
+
+ vec4 weight = step(1e-8, hit_pdf) * bsdf / max(vec4(1e-8), hit_pdf);
+
+ vec3 sample[4];
+ sample[0] = get_scene_color(hit_co[0].xy, mip.x, planar_index, is_planar.x);
+ sample[1] = get_scene_color(hit_co[0].zw, mip.y, planar_index, is_planar.y);
+ sample[2] = get_scene_color(hit_co[1].xy, mip.z, planar_index, is_planar.z);
+ sample[3] = get_scene_color(hit_co[1].zw, mip.w, planar_index, is_planar.w);
+
+ /* Clamped brightness. */
+ vec4 luma;
+ luma.x = brightness(sample[0]);
+ luma.y = brightness(sample[1]);
+ luma.z = brightness(sample[2]);
+ luma.w = brightness(sample[3]);
+ luma = max(vec4(1e-8), luma);
+ luma = 1.0 - max(vec4(0.0), luma - ssrFireflyFac) / luma;
+
+ sample[0] *= luma.x;
+ sample[1] *= luma.y;
+ sample[2] *= luma.z;
+ sample[3] *= luma.w;
+
+ /* Protection against NaNs in the history buffer.
+ * This could be removed if some previous pass has already
+ * sanitized the input. */
+ if (any(isnan(sample[0]))) {
+ sample[0] = vec3(0.0); weight.x = 0.0;
+ }
+ if (any(isnan(sample[1]))) {
+ sample[1] = vec3(0.0); weight.y = 0.0;
+ }
+ if (any(isnan(sample[2]))) {
+ sample[2] = vec3(0.0); weight.z = 0.0;
+ }
+ if (any(isnan(sample[3]))) {
+ sample[3] = vec3(0.0); weight.w = 0.0;
+ }
+
+ weight_acc += sum(weight);
+
+ /* Do not add light if ray has failed. */
+ vec4 accum;
+ accum = vec4(sample[0], mask.x) * weight.x * float(has_hit.x);
+ accum += vec4(sample[1], mask.y) * weight.y * float(has_hit.y);
+ accum += vec4(sample[2], mask.z) * weight.z * float(has_hit.z);
+ accum += vec4(sample[3], mask.w) * weight.w * float(has_hit.w);
+ return accum;
+}
+
+void main()
+{
+ ivec2 fullres_texel = ivec2(gl_FragCoord.xy);
+#ifdef FULLRES
+ ivec2 halfres_texel = fullres_texel;
+#else
+ ivec2 halfres_texel = ivec2(gl_FragCoord.xy / 2.0);
+#endif
+ vec2 uvs = gl_FragCoord.xy / vec2(textureSize(depthBuffer, 0));
+
+ float depth = textureLod(depthBuffer, uvs, 0.0).r;
+
+ /* Early out */
+ if (depth == 1.0)
+ discard;
+
+ /* Using world space */
+ vec3 viewPosition = get_view_space_from_depth(uvs, depth); /* Needed for viewCameraVec */
+ vec3 worldPosition = transform_point(ViewMatrixInverse, viewPosition);
+ vec3 V = cameraVec;
+ vec3 vN = normal_decode(texelFetch(normalBuffer, fullres_texel, 0).rg, viewCameraVec);
+ vec3 N = transform_direction(ViewMatrixInverse, vN);
+ vec4 speccol_roughness = texelFetch(specroughBuffer, fullres_texel, 0).rgba;
+
+ /* Early out */
+ if (dot(speccol_roughness.rgb, vec3(1.0)) == 0.0)
+ discard;
+
+ /* TODO optimize with textureGather */
+ /* Doing these fetches early to hide latency. */
+ vec4 hit_pdf;
+ hit_pdf.x = texelFetch(pdfBuffer, halfres_texel + neighbors[0 + neighborOffset], 0).r;
+ hit_pdf.y = texelFetch(pdfBuffer, halfres_texel + neighbors[1 + neighborOffset], 0).r;
+ hit_pdf.z = texelFetch(pdfBuffer, halfres_texel + neighbors[2 + neighborOffset], 0).r;
+ hit_pdf.w = texelFetch(pdfBuffer, halfres_texel + neighbors[3 + neighborOffset], 0).r;
+
+ ivec4 hit_data[2];
+ hit_data[0].xy = texelFetch(hitBuffer, halfres_texel + neighbors[0 + neighborOffset], 0).rg;
+ hit_data[0].zw = texelFetch(hitBuffer, halfres_texel + neighbors[1 + neighborOffset], 0).rg;
+ hit_data[1].xy = texelFetch(hitBuffer, halfres_texel + neighbors[2 + neighborOffset], 0).rg;
+ hit_data[1].zw = texelFetch(hitBuffer, halfres_texel + neighbors[3 + neighborOffset], 0).rg;
+
+ /* Find Planar Reflections affecting this pixel */
+ PlanarData pd;
+ float planar_index;
+ for (int i = 0; i < MAX_PLANAR && i < prbNumPlanar; ++i) {
+ pd = planars_data[i];
+
+ float fade = probe_attenuation_planar(pd, worldPosition, N, 0.0);
+
+ if (fade > 0.5) {
+ planar_index = float(i);
+ break;
+ }
+ }
+
+ float roughness = speccol_roughness.a;
+ float roughnessSquared = max(1e-3, roughness * roughness);
+
+ vec4 spec_accum = vec4(0.0);
+
+ /* Resolve SSR */
+ float cone_cos = cone_cosine(roughnessSquared);
+ float cone_tan = sqrt(1 - cone_cos * cone_cos) / cone_cos;
+ cone_tan *= mix(saturate(dot(N, -V) * 2.0), 1.0, roughness); /* Elongation fit */
+
+ vec2 source_uvs = project_point(pastViewProjectionMatrix, worldPosition).xy * 0.5 + 0.5;
+
+ vec4 ssr_accum = vec4(0.0);
+ float weight_acc = 0.0;
+
+ if (roughness < ssrMaxRoughness + 0.2) {
+ ssr_accum += get_ssr_samples(hit_pdf, hit_data, pd, planar_index, worldPosition, N, V,
+ roughnessSquared, cone_tan, source_uvs, weight_acc);
+ }
+
+ /* Compute SSR contribution */
+ if (weight_acc > 0.0) {
+ ssr_accum /= weight_acc;
+ /* fade between 0.5 and 1.0 roughness */
+ ssr_accum.a *= smoothstep(ssrMaxRoughness + 0.2, ssrMaxRoughness, roughness);
+ accumulate_light(ssr_accum.rgb, ssr_accum.a, spec_accum);
+ }
+
+ /* If SSR contribution is not 1.0, blend with cubemaps */
+ if (spec_accum.a < 1.0) {
+ fallback_cubemap(N, V, worldPosition, viewPosition, roughness, roughnessSquared, spec_accum);
+ }
+
+ fragColor = vec4(spec_accum.rgb * speccol_roughness.rgb, 1.0);
+}
+
+#endif
diff --git a/source/blender/draw/engines/eevee/shaders/effect_subsurface_frag.glsl b/source/blender/draw/engines/eevee/shaders/effect_subsurface_frag.glsl
new file mode 100644
index 00000000000..d9e12bcc4bd
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/effect_subsurface_frag.glsl
@@ -0,0 +1,101 @@
+
+/* Based on Separable SSS. by Jorge Jimenez and Diego Gutierrez */
+
+#define MAX_SSS_SAMPLES 65
+layout(std140) uniform sssProfile {
+ vec4 kernel[MAX_SSS_SAMPLES];
+ vec4 radii_max_radius;
+ int sss_samples;
+};
+
+uniform sampler2D depthBuffer;
+uniform sampler2D sssData;
+uniform sampler2D sssAlbedo;
+
+#ifndef UTIL_TEX
+#define UTIL_TEX
+uniform sampler2DArray utilTex;
+#define texelfetch_noise_tex(coord) texelFetch(utilTex, ivec3(ivec2(coord) % LUT_SIZE, 2.0), 0)
+#endif /* UTIL_TEX */
+
+layout(location = 0) out vec4 FragColor;
+#ifdef RESULT_ACCUM
+layout(location = 1) out vec4 sssColor;
+#endif
+
+uniform mat4 ProjectionMatrix;
+
+float get_view_z_from_depth(float depth)
+{
+ if (ProjectionMatrix[3][3] == 0.0) {
+ float d = 2.0 * depth - 1.0;
+ return -ProjectionMatrix[3][2] / (d + ProjectionMatrix[2][2]);
+ }
+ else {
+ return viewVecs[0].z + depth * viewVecs[1].z;
+ }
+}
+
+#define LUT_SIZE 64
+#define M_PI_2 1.5707963267948966 /* pi/2 */
+#define M_2PI 6.2831853071795865 /* 2*pi */
+
+void main(void)
+{
+ vec2 pixel_size = 1.0 / vec2(textureSize(depthBuffer, 0).xy); /* TODO precompute */
+ vec2 uvs = gl_FragCoord.xy * pixel_size;
+ vec4 sss_data = texture(sssData, uvs).rgba;
+ float depth_view = get_view_z_from_depth(texture(depthBuffer, uvs).r);
+
+ float rand = texelfetch_noise_tex(gl_FragCoord.xy).r;
+#ifdef FIRST_PASS
+ float angle = M_2PI * rand + M_PI_2;
+ vec2 dir = vec2(1.0, 0.0);
+#else /* SECOND_PASS */
+ float angle = M_2PI * rand;
+ vec2 dir = vec2(0.0, 1.0);
+#endif
+ vec2 dir_rand = vec2(cos(angle), sin(angle));
+
+ /* Compute kernel bounds in 2D. */
+ float homcoord = ProjectionMatrix[2][3] * depth_view + ProjectionMatrix[3][3];
+ vec2 scale = vec2(ProjectionMatrix[0][0], ProjectionMatrix[1][1]) * sss_data.aa / homcoord;
+ vec2 finalStep = scale * radii_max_radius.w;
+ finalStep *= 0.5; /* samples range -1..1 */
+
+ /* Center sample */
+ vec3 accum = sss_data.rgb * kernel[0].rgb;
+
+ for (int i = 1; i < sss_samples && i < MAX_SSS_SAMPLES; i++) {
+ vec2 sample_uv = uvs + kernel[i].a * finalStep * ((abs(kernel[i].a) > sssJitterThreshold) ? dir : dir_rand);
+ vec3 color = texture(sssData, sample_uv).rgb;
+ float sample_depth = texture(depthBuffer, sample_uv).r;
+ sample_depth = get_view_z_from_depth(sample_depth);
+
+ /* Depth correction factor. */
+ float depth_delta = depth_view - sample_depth;
+ float s = clamp(1.0 - exp(-(depth_delta * depth_delta) / (2.0 * sss_data.a)), 0.0, 1.0);
+
+ /* Out of view samples. */
+ if (any(lessThan(sample_uv, vec2(0.0))) || any(greaterThan(sample_uv, vec2(1.0)))) {
+ s = 1.0;
+ }
+
+ accum += kernel[i].rgb * mix(color, sss_data.rgb, s);
+ }
+
+#ifdef FIRST_PASS
+ FragColor = vec4(accum, sss_data.a);
+#else /* SECOND_PASS */
+# ifdef USE_SEP_ALBEDO
+# ifdef RESULT_ACCUM
+ FragColor = vec4(accum, 1.0);
+ sssColor = texture(sssAlbedo, uvs);
+# else
+ FragColor = vec4(accum * texture(sssAlbedo, uvs).rgb, 1.0);
+# endif
+# else
+ FragColor = vec4(accum, 1.0);
+# endif
+#endif
+}
diff --git a/source/blender/draw/engines/eevee/shaders/effect_temporal_aa.glsl b/source/blender/draw/engines/eevee/shaders/effect_temporal_aa.glsl
new file mode 100644
index 00000000000..f3df1864317
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/effect_temporal_aa.glsl
@@ -0,0 +1,14 @@
+
+uniform sampler2D colorBuffer;
+uniform sampler2D historyBuffer;
+uniform float alpha;
+
+out vec4 FragColor;
+
+void main()
+{
+ /* TODO History buffer Reprojection */
+ vec4 history = texelFetch(historyBuffer, ivec2(gl_FragCoord.xy), 0).rgba;
+ vec4 color = texelFetch(colorBuffer, ivec2(gl_FragCoord.xy), 0).rgba;
+ FragColor = mix(history, color, alpha);
+} \ No newline at end of file
diff --git a/source/blender/draw/engines/eevee/shaders/irradiance_lib.glsl b/source/blender/draw/engines/eevee/shaders/irradiance_lib.glsl
new file mode 100644
index 00000000000..132cc16fcbd
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/irradiance_lib.glsl
@@ -0,0 +1,177 @@
+
+uniform sampler2DArray irradianceGrid;
+
+#define IRRADIANCE_LIB
+
+#ifdef IRRADIANCE_CUBEMAP
+struct IrradianceData {
+ vec3 color;
+};
+#elif defined(IRRADIANCE_SH_L2)
+struct IrradianceData {
+ vec3 shcoefs[9];
+};
+#else /* defined(IRRADIANCE_HL2) */
+struct IrradianceData {
+ vec3 cubesides[3];
+};
+#endif
+
+IrradianceData load_irradiance_cell(int cell, vec3 N)
+{
+ /* Keep in sync with diffuse_filter_probe() */
+
+#if defined(IRRADIANCE_CUBEMAP)
+
+ #define AMBIANT_CUBESIZE 8
+ ivec2 cell_co = ivec2(AMBIANT_CUBESIZE);
+ int cell_per_row = textureSize(irradianceGrid, 0).x / cell_co.x;
+ cell_co.x *= cell % cell_per_row;
+ cell_co.y *= cell / cell_per_row;
+
+ vec2 texelSize = 1.0 / vec2(AMBIANT_CUBESIZE);
+
+ vec2 uvs = mapping_octahedron(N, texelSize);
+ uvs *= vec2(AMBIANT_CUBESIZE) / vec2(textureSize(irradianceGrid, 0));
+ uvs += vec2(cell_co) / vec2(textureSize(irradianceGrid, 0));
+
+ IrradianceData ir;
+ ir.color = texture(irradianceGrid, vec3(uvs, 0.0)).rgb;
+
+#elif defined(IRRADIANCE_SH_L2)
+
+ ivec2 cell_co = ivec2(3, 3);
+ int cell_per_row = textureSize(irradianceGrid, 0).x / cell_co.x;
+ cell_co.x *= cell % cell_per_row;
+ cell_co.y *= cell / cell_per_row;
+
+ ivec3 ofs = ivec3(0, 1, 2);
+
+ IrradianceData ir;
+ ir.shcoefs[0] = texelFetch(irradianceGrid, ivec3(cell_co + ofs.xx, 0), 0).rgb;
+ ir.shcoefs[1] = texelFetch(irradianceGrid, ivec3(cell_co + ofs.yx, 0), 0).rgb;
+ ir.shcoefs[2] = texelFetch(irradianceGrid, ivec3(cell_co + ofs.zx, 0), 0).rgb;
+ ir.shcoefs[3] = texelFetch(irradianceGrid, ivec3(cell_co + ofs.xy, 0), 0).rgb;
+ ir.shcoefs[4] = texelFetch(irradianceGrid, ivec3(cell_co + ofs.yy, 0), 0).rgb;
+ ir.shcoefs[5] = texelFetch(irradianceGrid, ivec3(cell_co + ofs.zy, 0), 0).rgb;
+ ir.shcoefs[6] = texelFetch(irradianceGrid, ivec3(cell_co + ofs.xz, 0), 0).rgb;
+ ir.shcoefs[7] = texelFetch(irradianceGrid, ivec3(cell_co + ofs.yz, 0), 0).rgb;
+ ir.shcoefs[8] = texelFetch(irradianceGrid, ivec3(cell_co + ofs.zz, 0), 0).rgb;
+
+#else /* defined(IRRADIANCE_HL2) */
+
+ ivec2 cell_co = ivec2(3, 2);
+ int cell_per_row = textureSize(irradianceGrid, 0).x / cell_co.x;
+ cell_co.x *= cell % cell_per_row;
+ cell_co.y *= cell / cell_per_row;
+
+ ivec3 is_negative = ivec3(step(0.0, -N));
+
+ IrradianceData ir;
+ ir.cubesides[0] = irradiance_decode(texelFetch(irradianceGrid, ivec3(cell_co + ivec2(0, is_negative.x), 0), 0));
+ ir.cubesides[1] = irradiance_decode(texelFetch(irradianceGrid, ivec3(cell_co + ivec2(1, is_negative.y), 0), 0));
+ ir.cubesides[2] = irradiance_decode(texelFetch(irradianceGrid, ivec3(cell_co + ivec2(2, is_negative.z), 0), 0));
+
+#endif
+
+ return ir;
+}
+
+float load_visibility_cell(int cell, vec3 L, float dist, float bias, float bleed_bias, float range)
+{
+ /* Keep in sync with diffuse_filter_probe() */
+ ivec2 cell_co = ivec2(prbIrradianceVisSize);
+ ivec2 cell_per_row_col = textureSize(irradianceGrid, 0).xy / prbIrradianceVisSize;
+ cell_co.x *= (cell % cell_per_row_col.x);
+ cell_co.y *= (cell / cell_per_row_col.x) % cell_per_row_col.y;
+ float layer = 1.0 + float((cell / cell_per_row_col.x) / cell_per_row_col.y);
+
+ vec2 texel_size = 1.0 / vec2(textureSize(irradianceGrid, 0).xy);
+ vec2 co = vec2(cell_co) * texel_size;
+
+ vec2 uv = mapping_octahedron(-L, vec2(1.0 / float(prbIrradianceVisSize)));
+ uv *= vec2(prbIrradianceVisSize) * texel_size;
+
+ vec4 data = texture(irradianceGrid, vec3(co + uv, layer));
+
+ /* Decoding compressed data */
+ vec2 moments = visibility_decode(data, range);
+
+ /* Doing chebishev test */
+ float variance = abs(moments.x * moments.x - moments.y);
+ variance = max(variance, bias / 10.0);
+
+ float d = dist - moments.x;
+ float p_max = variance / (variance + d * d);
+
+ /* Increase contrast in the weight by squaring it */
+ p_max *= p_max;
+
+ /* Now reduce light-bleeding by removing the [0, x] tail and linearly rescaling (x, 1] */
+ p_max = clamp((p_max - bleed_bias) / (1.0 - bleed_bias), 0.0, 1.0);
+
+ return (dist <= moments.x) ? 1.0 : p_max;
+}
+
+/* http://seblagarde.wordpress.com/2012/01/08/pi-or-not-to-pi-in-game-lighting-equation/ */
+vec3 spherical_harmonics_L1(vec3 N, vec3 shcoefs[4])
+{
+ vec3 sh = vec3(0.0);
+
+ sh += 0.282095 * shcoefs[0];
+
+ sh += -0.488603 * N.z * shcoefs[1];
+ sh += 0.488603 * N.y * shcoefs[2];
+ sh += -0.488603 * N.x * shcoefs[3];
+
+ return sh;
+}
+
+vec3 spherical_harmonics_L2(vec3 N, vec3 shcoefs[9])
+{
+ vec3 sh = vec3(0.0);
+
+ sh += 0.282095 * shcoefs[0];
+
+ sh += -0.488603 * N.z * shcoefs[1];
+ sh += 0.488603 * N.y * shcoefs[2];
+ sh += -0.488603 * N.x * shcoefs[3];
+
+ sh += 1.092548 * N.x * N.z * shcoefs[4];
+ sh += -1.092548 * N.z * N.y * shcoefs[5];
+ sh += 0.315392 * (3.0 * N.y * N.y - 1.0) * shcoefs[6];
+ sh += -1.092548 * N.x * N.y * shcoefs[7];
+ sh += 0.546274 * (N.x * N.x - N.z * N.z) * shcoefs[8];
+
+ return sh;
+}
+
+vec3 hl2_basis(vec3 N, vec3 cubesides[3])
+{
+ vec3 irradiance = vec3(0.0);
+
+ vec3 n_squared = N * N;
+
+ irradiance += n_squared.x * cubesides[0];
+ irradiance += n_squared.y * cubesides[1];
+ irradiance += n_squared.z * cubesides[2];
+
+ return irradiance;
+}
+
+vec3 compute_irradiance(vec3 N, IrradianceData ird)
+{
+#if defined(IRRADIANCE_CUBEMAP)
+ return ird.color;
+#elif defined(IRRADIANCE_SH_L2)
+ return spherical_harmonics_L2(N, ird.shcoefs);
+#else /* defined(IRRADIANCE_HL2) */
+ return hl2_basis(N, ird.cubesides);
+#endif
+}
+
+vec3 irradiance_from_cell_get(int cell, vec3 ir_dir)
+{
+ IrradianceData ir_data = load_irradiance_cell(cell, ir_dir);
+ return compute_irradiance(ir_dir, ir_data);
+}
diff --git a/source/blender/draw/engines/eevee/shaders/lamps_lib.glsl b/source/blender/draw/engines/eevee/shaders/lamps_lib.glsl
new file mode 100644
index 00000000000..1c7956bb807
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/lamps_lib.glsl
@@ -0,0 +1,447 @@
+
+uniform sampler2DArray shadowTexture;
+
+#define LAMPS_LIB
+
+layout(std140) uniform shadow_block {
+ ShadowData shadows_data[MAX_SHADOW];
+ ShadowCubeData shadows_cube_data[MAX_SHADOW_CUBE];
+ ShadowCascadeData shadows_cascade_data[MAX_SHADOW_CASCADE];
+};
+
+layout(std140) uniform light_block {
+ LightData lights_data[MAX_LIGHT];
+};
+
+/* type */
+#define POINT 0.0
+#define SUN 1.0
+#define SPOT 2.0
+#define HEMI 3.0
+#define AREA 4.0
+
+/* ----------------------------------------------------------- */
+/* ----------------------- Shadow tests ---------------------- */
+/* ----------------------------------------------------------- */
+
+float shadow_test_esm(float z, float dist, float exponent)
+{
+ return saturate(exp(exponent * (z - dist)));
+}
+
+float shadow_test_pcf(float z, float dist)
+{
+ return step(0, z - dist);
+}
+
+float shadow_test_vsm(vec2 moments, float dist, float bias, float bleed_bias)
+{
+ float p = 0.0;
+
+ if (dist <= moments.x)
+ p = 1.0;
+
+ float variance = moments.y - (moments.x * moments.x);
+ variance = max(variance, bias / 10.0);
+
+ float d = moments.x - dist;
+ float p_max = variance / (variance + d * d);
+
+ /* Now reduce light-bleeding by removing the [0, x] tail and linearly rescaling (x, 1] */
+ p_max = clamp((p_max - bleed_bias) / (1.0 - bleed_bias), 0.0, 1.0);
+
+ return max(p, p_max);
+}
+
+
+/* ----------------------------------------------------------- */
+/* ----------------------- Shadow types ---------------------- */
+/* ----------------------------------------------------------- */
+
+float shadow_cubemap(ShadowData sd, ShadowCubeData scd, float texid, vec3 W)
+{
+ vec3 cubevec = W - scd.position.xyz;
+ float dist = length(cubevec);
+
+ /* If fragment is out of shadowmap range, do not occlude */
+ /* XXX : we check radial distance against a cubeface distance.
+ * We loose quite a bit of valid area. */
+ if (dist > sd.sh_far)
+ return 1.0;
+
+ cubevec /= dist;
+
+#if defined(SHADOW_VSM)
+ vec2 moments = texture_octahedron(shadowTexture, vec4(cubevec, texid)).rg;
+#else
+ float z = texture_octahedron(shadowTexture, vec4(cubevec, texid)).r;
+#endif
+
+#if defined(SHADOW_VSM)
+ return shadow_test_vsm(moments, dist, sd.sh_bias, sd.sh_bleed);
+#elif defined(SHADOW_ESM)
+ return shadow_test_esm(z, dist - sd.sh_bias, sd.sh_exp);
+#else
+ return shadow_test_pcf(z, dist - sd.sh_bias);
+#endif
+}
+
+float evaluate_cascade(ShadowData sd, mat4 shadowmat, vec3 W, float range, float texid)
+{
+ vec4 shpos = shadowmat * vec4(W, 1.0);
+ float dist = shpos.z * range;
+
+#if defined(SHADOW_VSM)
+ vec2 moments = texture(shadowTexture, vec3(shpos.xy, texid)).rg;
+#else
+ float z = texture(shadowTexture, vec3(shpos.xy, texid)).r;
+#endif
+
+ float vis;
+#if defined(SHADOW_VSM)
+ vis = shadow_test_vsm(moments, dist, sd.sh_bias, sd.sh_bleed);
+#elif defined(SHADOW_ESM)
+ vis = shadow_test_esm(z, dist - sd.sh_bias, sd.sh_exp);
+#else
+ vis = shadow_test_pcf(z, dist - sd.sh_bias);
+#endif
+
+ /* If fragment is out of shadowmap range, do not occlude */
+ if (shpos.z < 1.0 && shpos.z > 0.0) {
+ return vis;
+ }
+ else {
+ return 1.0;
+ }
+}
+
+float shadow_cascade(ShadowData sd, ShadowCascadeData scd, float texid, vec3 W)
+{
+ vec4 view_z = vec4(dot(W - cameraPos, cameraForward));
+ vec4 weights = smoothstep(scd.split_end_distances, scd.split_start_distances.yzwx, view_z);
+ weights.yzw -= weights.xyz;
+
+ vec4 vis = vec4(1.0);
+ float range = abs(sd.sh_far - sd.sh_near); /* Same factor as in get_cascade_world_distance(). */
+
+ /* Branching using (weights > 0.0) is reaally slooow on intel so avoid it for now. */
+ vis.x = evaluate_cascade(sd, scd.shadowmat[0], W, range, texid + 0);
+ vis.y = evaluate_cascade(sd, scd.shadowmat[1], W, range, texid + 1);
+ vis.z = evaluate_cascade(sd, scd.shadowmat[2], W, range, texid + 2);
+ vis.w = evaluate_cascade(sd, scd.shadowmat[3], W, range, texid + 3);
+
+ float weight_sum = dot(vec4(1.0), weights);
+ if (weight_sum > 0.9999) {
+ float vis_sum = dot(vec4(1.0), vis * weights);
+ return vis_sum / weight_sum;
+ }
+ else {
+ float vis_sum = dot(vec4(1.0), vis * step(0.001, weights));
+ return mix(1.0, vis_sum, weight_sum);
+ }
+}
+
+/* ----------------------------------------------------------- */
+/* --------------------- Light Functions --------------------- */
+/* ----------------------------------------------------------- */
+#define MAX_MULTI_SHADOW 4
+
+float light_visibility(LightData ld, vec3 W,
+#ifndef VOLUMETRICS
+ vec3 viewPosition,
+ vec3 viewNormal,
+#endif
+ vec4 l_vector)
+{
+ float vis = 1.0;
+
+ if (ld.l_type == SPOT) {
+ float z = dot(ld.l_forward, l_vector.xyz);
+ vec3 lL = l_vector.xyz / z;
+ float x = dot(ld.l_right, lL) / ld.l_sizex;
+ float y = dot(ld.l_up, lL) / ld.l_sizey;
+
+ float ellipse = inversesqrt(1.0 + x * x + y * y);
+
+ float spotmask = smoothstep(0.0, 1.0, (ellipse - ld.l_spot_size) / ld.l_spot_blend);
+
+ vis *= spotmask;
+ vis *= step(0.0, -dot(l_vector.xyz, ld.l_forward));
+ }
+ else if (ld.l_type == AREA) {
+ vis *= step(0.0, -dot(l_vector.xyz, ld.l_forward));
+ }
+
+#if !defined(VOLUMETRICS) || defined(VOLUME_SHADOW)
+ /* shadowing */
+ if (ld.l_shadowid >= 0.0) {
+ ShadowData data = shadows_data[int(ld.l_shadowid)];
+
+ if (ld.l_type == SUN) {
+ /* TODO : MSM */
+ // for (int i = 0; i < MAX_MULTI_SHADOW; ++i) {
+ vis *= shadow_cascade(
+ data, shadows_cascade_data[int(data.sh_data_start)],
+ data.sh_tex_start, W);
+ // }
+ }
+ else {
+ /* TODO : MSM */
+ // for (int i = 0; i < MAX_MULTI_SHADOW; ++i) {
+ vis *= shadow_cubemap(
+ data, shadows_cube_data[int(data.sh_data_start)],
+ data.sh_tex_start, W);
+ // }
+ }
+
+#ifndef VOLUMETRICS
+ /* Only compute if not already in shadow. */
+ if ((vis > 0.001) && (data.sh_contact_dist > 0.0)) {
+ vec4 L = (ld.l_type != SUN) ? l_vector : vec4(-ld.l_forward, 1.0);
+ float trace_distance = (ld.l_type != SUN) ? min(data.sh_contact_dist, l_vector.w) : data.sh_contact_dist;
+
+ vec3 T, B;
+ make_orthonormal_basis(L.xyz / L.w, T, B);
+
+ vec4 rand = texelfetch_noise_tex(gl_FragCoord.xy);
+ /* WATCH THIS : This still seems to have correlation artifacts for low samples. */
+ rand.zw *= fast_sqrt(rand.y) * data.sh_contact_spread;
+
+ /* We use the full l_vector.xyz so that the spread is minimize
+ * if the shading point is further away from the light source */
+ vec3 ray_dir = L.xyz + T * rand.z + B * rand.w;
+ ray_dir = transform_direction(ViewMatrix, ray_dir);
+ ray_dir = normalize(ray_dir);
+ vec3 ray_origin = viewPosition + viewNormal * data.sh_contact_offset;
+ vec3 hit_pos = raycast(-1, ray_origin, ray_dir * trace_distance, data.sh_contact_thickness, rand.x,
+ 0.75, 0.01, false);
+
+ if (hit_pos.z > 0.0) {
+ hit_pos = get_view_space_from_depth(hit_pos.xy, hit_pos.z);
+ float hit_dist = distance(viewPosition, hit_pos);
+ float dist_ratio = hit_dist / trace_distance;
+ return mix(0.0, vis, dist_ratio * dist_ratio * dist_ratio);
+ }
+ }
+#endif
+ }
+#endif
+
+ return vis;
+}
+
+float light_diffuse(LightData ld, vec3 N, vec3 V, vec4 l_vector)
+{
+#ifdef USE_LTC
+ if (ld.l_type == SUN) {
+ return direct_diffuse_unit_disc(ld, N, V);
+ }
+ else if (ld.l_type == AREA) {
+ return direct_diffuse_rectangle(ld, N, V, l_vector);
+ }
+ else {
+ return direct_diffuse_sphere(ld, N, l_vector);
+ }
+#else
+ if (ld.l_type == SUN) {
+ return direct_diffuse_sun(ld, N);
+ }
+ else {
+ return direct_diffuse_point(N, l_vector);
+ }
+#endif
+}
+
+vec3 light_specular(LightData ld, vec3 N, vec3 V, vec4 l_vector, float roughness, vec3 f0)
+{
+#ifdef USE_LTC
+ if (ld.l_type == SUN) {
+ return direct_ggx_unit_disc(ld, N, V, roughness, f0);
+ }
+ else if (ld.l_type == AREA) {
+ return direct_ggx_rectangle(ld, N, V, l_vector, roughness, f0);
+ }
+ else {
+ return direct_ggx_sphere(ld, N, V, l_vector, roughness, f0);
+ }
+#else
+ if (ld.l_type == SUN) {
+ return direct_ggx_sun(ld, N, V, roughness, f0);
+ }
+ else {
+ return direct_ggx_point(N, V, l_vector, roughness, f0);
+ }
+#endif
+}
+
+#define MAX_SSS_SAMPLES 65
+#define SSS_LUT_SIZE 64.0
+#define SSS_LUT_SCALE ((SSS_LUT_SIZE - 1.0) / float(SSS_LUT_SIZE))
+#define SSS_LUT_BIAS (0.5 / float(SSS_LUT_SIZE))
+layout(std140) uniform sssProfile {
+ vec4 kernel[MAX_SSS_SAMPLES];
+ vec4 radii_max_radius;
+ int sss_samples;
+};
+
+uniform sampler1D sssTexProfile;
+
+vec3 sss_profile(float s) {
+ s /= radii_max_radius.w;
+ return texture(sssTexProfile, saturate(s) * SSS_LUT_SCALE + SSS_LUT_BIAS).rgb;
+}
+
+vec3 light_translucent(LightData ld, vec3 W, vec3 N, vec4 l_vector, float scale)
+{
+#if !defined(USE_TRANSLUCENCY) || defined(VOLUMETRICS)
+ return vec3(0.0);
+#else
+ vec3 vis = vec3(1.0);
+
+ /* Only shadowed light can produce translucency */
+ if (ld.l_shadowid >= 0.0) {
+ ShadowData data = shadows_data[int(ld.l_shadowid)];
+ float delta;
+
+ vec4 L = (ld.l_type != SUN) ? l_vector : vec4(-ld.l_forward, 1.0);
+
+ vec3 T, B;
+ make_orthonormal_basis(L.xyz / L.w, T, B);
+
+ vec4 rand = texelfetch_noise_tex(gl_FragCoord.xy);
+ /* WATCH THIS : This still seems to have correlation artifacts for low samples. */
+ rand.zw *= fast_sqrt(rand.y) * data.sh_blur;
+
+ /* We use the full l_vector.xyz so that the spread is minimize
+ * if the shading point is further away from the light source */
+ W = W + T * rand.z + B * rand.w;
+
+ if (ld.l_type == SUN) {
+ ShadowCascadeData scd = shadows_cascade_data[int(data.sh_data_start)];
+ vec4 view_z = vec4(dot(W - cameraPos, cameraForward));
+
+ vec4 weights = step(scd.split_end_distances, view_z);
+ float id = abs(4.0 - dot(weights, weights));
+
+ if (id > 3.0) {
+ return vec3(0.0);
+ }
+
+ float range = abs(data.sh_far - data.sh_near); /* Same factor as in get_cascade_world_distance(). */
+
+ vec4 shpos = scd.shadowmat[int(id)] * vec4(W, 1.0);
+ float dist = shpos.z * range;
+
+ if (shpos.z > 1.0 || shpos.z < 0.0) {
+ return vec3(0.0);
+ }
+
+#if defined(SHADOW_VSM)
+ vec2 moments = texture(shadowTexture, vec3(shpos.xy, data.sh_tex_start + id)).rg;
+ delta = dist - moments.x;
+#else
+ float z = texture(shadowTexture, vec3(shpos.xy, data.sh_tex_start + id)).r;
+ delta = dist - z;
+#endif
+ }
+ else {
+ vec3 cubevec = W - shadows_cube_data[int(data.sh_data_start)].position.xyz;
+ float dist = length(cubevec);
+
+ /* If fragment is out of shadowmap range, do not occlude */
+ /* XXX : we check radial distance against a cubeface distance.
+ * We loose quite a bit of valid area. */
+ if (dist < data.sh_far) {
+ cubevec /= dist;
+
+#if defined(SHADOW_VSM)
+ vec2 moments = texture_octahedron(shadowTexture, vec4(cubevec, data.sh_tex_start)).rg;
+ delta = dist - moments.x;
+#else
+ float z = texture_octahedron(shadowTexture, vec4(cubevec, data.sh_tex_start)).r;
+ delta = dist - z;
+#endif
+ }
+ }
+
+ /* XXX : Removing Area Power. */
+ /* TODO : put this out of the shader. */
+ float falloff;
+ if (ld.l_type == AREA) {
+ vis *= (ld.l_sizex * ld.l_sizey * 4.0 * M_PI) * (1.0 / 80.0);
+ vis *= 0.3 * 20.0 * max(0.0, dot(-ld.l_forward, l_vector.xyz / l_vector.w)); /* XXX ad hoc, empirical */
+ vis /= (l_vector.w * l_vector.w);
+ falloff = dot(N, l_vector.xyz / l_vector.w);
+ }
+ else if (ld.l_type == SUN) {
+ vis *= (4.0f * ld.l_radius * ld.l_radius * M_2PI) * (1.0 / 12.5); /* Removing area light power*/
+ vis *= M_2PI * 0.78; /* Matching cycles with point light. */
+ vis *= 0.082; /* XXX ad hoc, empirical */
+ falloff = dot(N, -ld.l_forward);
+ }
+ else {
+ vis *= (4.0 * ld.l_radius * ld.l_radius) * (1.0 /10.0);
+ vis *= 1.5; /* XXX ad hoc, empirical */
+ vis /= (l_vector.w * l_vector.w);
+ falloff = dot(N, l_vector.xyz / l_vector.w);
+ }
+ // vis *= M_1_PI; /* Normalize */
+
+ /* Applying profile */
+ vis *= sss_profile(abs(delta) / scale);
+
+ /* No transmittance at grazing angle (hide artifacts) */
+ vis *= saturate(falloff * 2.0);
+
+ if (ld.l_type == SPOT) {
+ float z = dot(ld.l_forward, l_vector.xyz);
+ vec3 lL = l_vector.xyz / z;
+ float x = dot(ld.l_right, lL) / ld.l_sizex;
+ float y = dot(ld.l_up, lL) / ld.l_sizey;
+
+ float ellipse = inversesqrt(1.0 + x * x + y * y);
+
+ float spotmask = smoothstep(0.0, 1.0, (ellipse - ld.l_spot_size) / ld.l_spot_blend);
+
+ vis *= spotmask;
+ vis *= step(0.0, -dot(l_vector.xyz, ld.l_forward));
+ }
+ else if (ld.l_type == AREA) {
+ vis *= step(0.0, -dot(l_vector.xyz, ld.l_forward));
+ }
+ }
+ else {
+ vis = vec3(0.0);
+ }
+
+ return vis;
+#endif
+}
+
+#ifdef HAIR_SHADER
+void light_hair_common(
+ LightData ld, vec3 N, vec3 V, vec4 l_vector, vec3 norm_view,
+ out float occlu_trans, out float occlu,
+ out vec3 norm_lamp, out vec3 view_vec)
+{
+ const float transmission = 0.3; /* Uniform internal scattering factor */
+
+ vec3 lamp_vec;
+
+ if (ld.l_type == SUN || ld.l_type == AREA) {
+ lamp_vec = ld.l_forward;
+ }
+ else {
+ lamp_vec = -l_vector.xyz;
+ }
+
+ norm_lamp = cross(lamp_vec, N);
+ norm_lamp = normalize(cross(N, norm_lamp)); /* Normal facing lamp */
+
+ /* Rotate view vector onto the cross(tangent, light) plane */
+ view_vec = normalize(norm_lamp * dot(norm_view, V) + N * dot(N, V));
+
+ occlu = (dot(norm_view, norm_lamp) * 0.5 + 0.5);
+ occlu_trans = transmission + (occlu * (1.0 - transmission)); /* Includes transmission component */
+}
+#endif
diff --git a/source/blender/draw/engines/eevee/shaders/lightprobe_cube_display_frag.glsl b/source/blender/draw/engines/eevee/shaders/lightprobe_cube_display_frag.glsl
new file mode 100644
index 00000000000..d10f4bc0d42
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/lightprobe_cube_display_frag.glsl
@@ -0,0 +1,15 @@
+
+flat in int pid;
+in vec3 worldNormal;
+in vec3 worldPosition;
+
+out vec4 FragColor;
+
+void main()
+{
+ vec3 V = (ProjectionMatrix[3][3] == 0.0) /* if perspective */
+ ? normalize(cameraPos - worldPosition)
+ : cameraForward;
+ vec3 N = normalize(worldNormal);
+ FragColor = vec4(textureLod_octahedron(probeCubes, vec4(reflect(-V, N), pid), 0.0, prbLodCubeMax).rgb, 1.0);
+}
diff --git a/source/blender/draw/engines/eevee/shaders/lightprobe_cube_display_vert.glsl b/source/blender/draw/engines/eevee/shaders/lightprobe_cube_display_vert.glsl
new file mode 100644
index 00000000000..202b27be0ef
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/lightprobe_cube_display_vert.glsl
@@ -0,0 +1,28 @@
+
+in vec3 pos;
+
+/* Instance attrib */
+in int probe_id;
+in vec3 probe_location;
+in float sphere_size;
+
+uniform mat4 ViewProjectionMatrix;
+
+flat out int pid;
+out vec3 worldNormal;
+out vec3 worldPosition;
+
+void main()
+{
+ pid = probe_id;
+
+ /* While this is not performant, we do this to
+ * match the object mode engine instancing shader. */
+ mat4 offsetmat = mat4(1.0); /* Identity */
+ offsetmat[3].xyz = probe_location;
+
+ vec4 wpos = offsetmat * vec4(pos * sphere_size, 1.0);
+ worldPosition = wpos.xyz;
+ gl_Position = ViewProjectionMatrix * wpos;
+ worldNormal = normalize(pos);
+} \ No newline at end of file
diff --git a/source/blender/draw/engines/eevee/shaders/lightprobe_filter_diffuse_frag.glsl b/source/blender/draw/engines/eevee/shaders/lightprobe_filter_diffuse_frag.glsl
new file mode 100644
index 00000000000..b19ee7a9ea3
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/lightprobe_filter_diffuse_frag.glsl
@@ -0,0 +1,198 @@
+
+uniform samplerCube probeHdr;
+uniform int probeSize;
+uniform float lodFactor;
+uniform float lodMax;
+uniform float intensityFac;
+
+in vec3 worldPosition;
+
+out vec4 FragColor;
+
+#define M_4PI 12.5663706143591729
+
+const mat3 CUBE_ROTATIONS[6] = mat3[](
+ mat3(vec3( 0.0, 0.0, -1.0),
+ vec3( 0.0, -1.0, 0.0),
+ vec3(-1.0, 0.0, 0.0)),
+ mat3(vec3( 0.0, 0.0, 1.0),
+ vec3( 0.0, -1.0, 0.0),
+ vec3( 1.0, 0.0, 0.0)),
+ mat3(vec3( 1.0, 0.0, 0.0),
+ vec3( 0.0, 0.0, 1.0),
+ vec3( 0.0, -1.0, 0.0)),
+ mat3(vec3( 1.0, 0.0, 0.0),
+ vec3( 0.0, 0.0, -1.0),
+ vec3( 0.0, 1.0, 0.0)),
+ mat3(vec3( 1.0, 0.0, 0.0),
+ vec3( 0.0, -1.0, 0.0),
+ vec3( 0.0, 0.0, -1.0)),
+ mat3(vec3(-1.0, 0.0, 0.0),
+ vec3( 0.0, -1.0, 0.0),
+ vec3( 0.0, 0.0, 1.0)));
+
+vec3 get_cubemap_vector(vec2 co, int face)
+{
+ return normalize(CUBE_ROTATIONS[face] * vec3(co * 2.0 - 1.0, 1.0));
+}
+
+float area_element(float x, float y)
+{
+ return atan(x * y, sqrt(x * x + y * y + 1));
+}
+
+float texel_solid_angle(vec2 co, float halfpix)
+{
+ vec2 v1 = (co - vec2(halfpix)) * 2.0 - 1.0;
+ vec2 v2 = (co + vec2(halfpix)) * 2.0 - 1.0;
+
+ return area_element(v1.x, v1.y) - area_element(v1.x, v2.y) - area_element(v2.x, v1.y) + area_element(v2.x, v2.y);
+}
+
+vec3 octahedral_to_cubemap_proj(vec2 co)
+{
+ co = co * 2.0 - 1.0;
+
+ vec2 abs_co = abs(co);
+ vec3 v = vec3(co, 1.0 - (abs_co.x + abs_co.y));
+
+ if ( abs_co.x + abs_co.y > 1.0 ) {
+ v.xy = (abs(co.yx) - 1.0) * -sign(co.xy);
+ }
+
+ return v;
+}
+
+void main()
+{
+#if defined(IRRADIANCE_SH_L2)
+ float pixstep = 1.0 / probeSize;
+ float halfpix = pixstep / 2.0;
+
+ /* Downside: leaks negative values, very bandwidth consuming */
+ int comp = int(gl_FragCoord.x) % 3 + (int(gl_FragCoord.y) % 3) * 3;
+
+ float weight_accum = 0.0;
+ vec3 sh = vec3(0.0);
+
+ for (int face = 0; face < 6; ++face) {
+ for (float x = halfpix; x < 1.0; x += pixstep) {
+ for (float y = halfpix; y < 1.0; y += pixstep) {
+ float weight, coef;
+ vec2 facecoord = vec2(x,y);
+ vec3 cubevec = get_cubemap_vector(facecoord, face);
+
+ if (comp == 0) {
+ coef = 0.282095;
+ }
+ else if (comp == 1) {
+ coef = -0.488603 * cubevec.z * 2.0 / 3.0;
+ }
+ else if (comp == 2) {
+ coef = 0.488603 * cubevec.y * 2.0 / 3.0;
+ }
+ else if (comp == 3) {
+ coef = -0.488603 * cubevec.x * 2.0 / 3.0;
+ }
+ else if (comp == 4) {
+ coef = 1.092548 * cubevec.x * cubevec.z * 1.0 / 4.0;
+ }
+ else if (comp == 5) {
+ coef = -1.092548 * cubevec.z * cubevec.y * 1.0 / 4.0;
+ }
+ else if (comp == 6) {
+ coef = 0.315392 * (3.0 * cubevec.y * cubevec.y - 1.0) * 1.0 / 4.0;
+ }
+ else if (comp == 7) {
+ coef = 1.092548 * cubevec.x * cubevec.y * 1.0 / 4.0;
+ }
+ else { /* (comp == 8) */
+ coef = 0.546274 * (cubevec.x * cubevec.x - cubevec.z * cubevec.z) * 1.0 / 4.0;
+ }
+
+ weight = texel_solid_angle(facecoord, halfpix);
+
+ vec4 sample = textureLod(probeHdr, cubevec, lodMax);
+ sh += sample.rgb * coef * weight;
+ weight_accum += weight;
+ }
+ }
+ }
+ sh *= M_4PI / weight_accum;
+
+ FragColor = vec4(sh, 1.0);
+#else
+#if defined(IRRADIANCE_CUBEMAP)
+ /* Downside: Need lots of memory for storage, distortion due to octahedral mapping */
+ const vec2 map_size = vec2(16.0);
+ const vec2 texelSize = 1.0 / map_size;
+ vec2 uvs = mod(gl_FragCoord.xy, map_size) * texelSize;
+ const float paddingSize = 1.0;
+
+ /* Add a N pixel border to ensure filtering is correct
+ * for N mipmap levels. */
+ uvs += uvs * texelSize * paddingSize * 2.0;
+ uvs -= texelSize * paddingSize;
+
+ /* edge mirroring : only mirror if directly adjacent
+ * (not diagonally adjacent) */
+ vec2 m = abs(uvs - 0.5) + 0.5;
+ vec2 f = floor(m);
+ if (f.x - f.y != 0.0) {
+ uvs = 1.0 - uvs;
+ }
+
+ /* clamp to [0-1] */
+ uvs = fract(uvs);
+
+ /* get cubemap vector */
+ vec3 cubevec = octahedral_to_cubemap_proj(uvs);
+
+#elif defined(IRRADIANCE_HL2)
+ /* Downside: very very low resolution (6 texels), bleed lighting because of interpolation */
+ int x = int(gl_FragCoord.x) % 3;
+ int y = int(gl_FragCoord.y) % 2;
+
+ vec3 cubevec = vec3(1.0, 0.0, 0.0);
+
+ if (x == 1) {
+ cubevec = cubevec.yxy;
+ }
+ else if (x == 2) {
+ cubevec = cubevec.yyx;
+ }
+
+ if (y == 1) {
+ cubevec = -cubevec;
+ }
+#endif
+
+ vec3 N, T, B, V;
+
+ N = normalize(cubevec);
+
+ make_orthonormal_basis(N, T, B); /* Generate tangent space */
+
+ /* Integrating Envmap */
+ float weight = 0.0;
+ vec3 out_radiance = vec3(0.0);
+ for (float i = 0; i < sampleCount; i++) {
+ vec3 L = sample_hemisphere(i, N, T, B); /* Microfacet normal */
+ float NL = dot(N, L);
+
+ if (NL > 0.0) {
+ /* Coarse Approximation of the mapping distortion
+ * Unit Sphere -> Cubemap Face */
+ const float dist = 4.0 * M_PI / 6.0;
+ float pdf = pdf_hemisphere();
+ /* http://http.developer.nvidia.com/GPUGems3/gpugems3_ch20.html : Equation 13 */
+ float lod = clamp(lodFactor - 0.5 * log2(pdf * dist), 0.0, lodMax) ;
+
+ out_radiance += textureLod(probeHdr, L, lod).rgb * NL;
+ weight += NL;
+ }
+ }
+
+ FragColor = irradiance_encode(intensityFac * out_radiance / weight);
+#endif
+} \ No newline at end of file
diff --git a/source/blender/draw/engines/eevee/shaders/lightprobe_filter_glossy_frag.glsl b/source/blender/draw/engines/eevee/shaders/lightprobe_filter_glossy_frag.glsl
new file mode 100644
index 00000000000..3aec3ce4642
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/lightprobe_filter_glossy_frag.glsl
@@ -0,0 +1,87 @@
+
+uniform samplerCube probeHdr;
+uniform float roughnessSquared;
+uniform float texelSize;
+uniform float lodFactor;
+uniform float lodMax;
+uniform float paddingSize;
+uniform float intensityFac;
+
+in vec3 worldPosition;
+
+out vec4 FragColor;
+
+vec3 octahedral_to_cubemap_proj(vec2 co)
+{
+ co = co * 2.0 - 1.0;
+
+ vec2 abs_co = abs(co);
+ vec3 v = vec3(co, 1.0 - (abs_co.x + abs_co.y));
+
+ if ( abs_co.x + abs_co.y > 1.0 ) {
+ v.xy = (abs(co.yx) - 1.0) * -sign(co.xy);
+ }
+
+ return v;
+}
+
+void main() {
+ vec2 uvs = gl_FragCoord.xy * texelSize;
+
+ /* Add a N pixel border to ensure filtering is correct
+ * for N mipmap levels. */
+ uvs += uvs * texelSize * paddingSize * 2.0;
+ uvs -= texelSize * paddingSize;
+
+ /* edge mirroring : only mirror if directly adjacent
+ * (not diagonally adjacent) */
+ vec2 m = abs(uvs - 0.5) + 0.5;
+ vec2 f = floor(m);
+ if (f.x - f.y != 0.0) {
+ uvs = 1.0 - uvs;
+ }
+
+ /* clamp to [0-1] */
+ uvs = fract(uvs);
+
+ /* get cubemap vector */
+ vec3 cubevec = octahedral_to_cubemap_proj(uvs);
+
+ vec3 N, T, B, V;
+
+ vec3 R = normalize(cubevec);
+
+ /* Isotropic assumption */
+ N = V = R;
+
+ make_orthonormal_basis(N, T, B); /* Generate tangent space */
+
+ /* Noise to dither the samples */
+ /* Note : ghosting is better looking than noise. */
+ // setup_noise();
+
+ /* Integrating Envmap */
+ float weight = 0.0;
+ vec3 out_radiance = vec3(0.0);
+ for (float i = 0; i < sampleCount; i++) {
+ vec3 H = sample_ggx(i, roughnessSquared, N, T, B); /* Microfacet normal */
+ vec3 L = -reflect(V, H);
+ float NL = dot(N, L);
+
+ if (NL > 0.0) {
+ float NH = max(1e-8, dot(N, H)); /* cosTheta */
+
+ /* Coarse Approximation of the mapping distortion
+ * Unit Sphere -> Cubemap Face */
+ const float dist = 4.0 * M_PI / 6.0;
+ float pdf = pdf_ggx_reflect(NH, roughnessSquared);
+ /* http://http.developer.nvidia.com/GPUGems3/gpugems3_ch20.html : Equation 13 */
+ float lod = clamp(lodFactor - 0.5 * log2(pdf * dist), 0.0, lodMax) ;
+
+ out_radiance += textureLod(probeHdr, L, lod).rgb * NL;
+ weight += NL;
+ }
+ }
+
+ FragColor = vec4(intensityFac * out_radiance / weight, 1.0);
+} \ No newline at end of file
diff --git a/source/blender/draw/engines/eevee/shaders/lightprobe_filter_visibility_frag.glsl b/source/blender/draw/engines/eevee/shaders/lightprobe_filter_visibility_frag.glsl
new file mode 100644
index 00000000000..0727e73f507
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/lightprobe_filter_visibility_frag.glsl
@@ -0,0 +1,88 @@
+
+uniform samplerCube probeDepth;
+uniform int outputSize;
+uniform float lodFactor;
+uniform float storedTexelSize;
+uniform float lodMax;
+uniform float nearClip;
+uniform float farClip;
+uniform float visibilityRange;
+uniform float visibilityBlur;
+
+out vec4 FragColor;
+
+vec3 octahedral_to_cubemap_proj(vec2 co)
+{
+ co = co * 2.0 - 1.0;
+
+ vec2 abs_co = abs(co);
+ vec3 v = vec3(co, 1.0 - (abs_co.x + abs_co.y));
+
+ if ( abs_co.x + abs_co.y > 1.0 ) {
+ v.xy = (abs(co.yx) - 1.0) * -sign(co.xy);
+ }
+
+ return v;
+}
+
+float linear_depth(float z)
+{
+ return (nearClip * farClip) / (z * (nearClip - farClip) + farClip);
+}
+
+float get_world_distance(float depth, vec3 cos)
+{
+ float is_background = step(1.0, depth);
+ depth = linear_depth(depth);
+ depth += 1e1 * is_background;
+ cos = normalize(abs(cos));
+ float cos_vec = max(cos.x, max(cos.y, cos.z));
+ return depth / cos_vec;
+}
+
+void main()
+{
+ ivec2 texel = ivec2(gl_FragCoord.xy) % ivec2(outputSize);
+
+ vec3 cos;
+
+ cos.xy = (vec2(texel) + 0.5) * storedTexelSize;
+
+ /* add a 2 pixel border to ensure filtering is correct */
+ cos.xy *= 1.0 + storedTexelSize * 2.0;
+ cos.xy -= storedTexelSize;
+
+ float pattern = 1.0;
+
+ /* edge mirroring : only mirror if directly adjacent
+ * (not diagonally adjacent) */
+ vec2 m = abs(cos.xy - 0.5) + 0.5;
+ vec2 f = floor(m);
+ if (f.x - f.y != 0.0) {
+ cos.xy = 1.0 - cos.xy;
+ }
+
+ /* clamp to [0-1] */
+ cos.xy = fract(cos.xy);
+
+ /* get cubemap vector */
+ cos = normalize(octahedral_to_cubemap_proj(cos.xy));
+
+ vec3 T, B;
+ make_orthonormal_basis(cos, T, B); /* Generate tangent space */
+
+ vec2 accum = vec2(0.0);
+
+ for (float i = 0; i < sampleCount; i++) {
+ vec3 sample = sample_cone(i, M_PI_2 * visibilityBlur, cos, T, B);
+ float depth = texture(probeDepth, sample).r;
+ depth = get_world_distance(depth, sample);
+ accum += vec2(depth, depth * depth);
+ }
+
+ accum *= invSampleCount;
+ accum = abs(accum);
+
+ /* Encode to normalized RGBA 8 */
+ FragColor = visibility_encode(accum, visibilityRange);
+} \ No newline at end of file
diff --git a/source/blender/draw/engines/eevee/shaders/lightprobe_geom.glsl b/source/blender/draw/engines/eevee/shaders/lightprobe_geom.glsl
new file mode 100644
index 00000000000..7e63f4cdaf7
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/lightprobe_geom.glsl
@@ -0,0 +1,34 @@
+
+layout(triangles) in;
+layout(triangle_strip, max_vertices=3) out;
+
+uniform int Layer;
+
+in vec4 vPos[];
+flat in int face[];
+flat out int fFace;
+
+out vec3 worldPosition;
+out vec3 viewPosition; /* Required. otherwise generate linking error. */
+out vec3 worldNormal; /* Required. otherwise generate linking error. */
+out vec3 viewNormal; /* Required. otherwise generate linking error. */
+
+const vec3 maj_axes[6] = vec3[6](vec3(1.0, 0.0, 0.0), vec3(-1.0, 0.0, 0.0), vec3(0.0, 1.0, 0.0), vec3(0.0, -1.0, 0.0), vec3( 0.0, 0.0, 1.0), vec3( 0.0, 0.0, -1.0));
+const vec3 x_axis[6] = vec3[6](vec3(0.0, 0.0, -1.0), vec3( 0.0, 0.0, 1.0), vec3(1.0, 0.0, 0.0), vec3(1.0, 0.0, 0.0), vec3( 1.0, 0.0, 0.0), vec3(-1.0, 0.0, 0.0));
+const vec3 y_axis[6] = vec3[6](vec3(0.0, -1.0, 0.0), vec3( 0.0, -1.0, 0.0), vec3(0.0, 0.0, 1.0), vec3(0.0, 0.0, -1.0), vec3( 0.0, -1.0, 0.0), vec3( 0.0, -1.0, 0.0));
+
+void main() {
+ fFace = face[0];
+ gl_Layer = Layer + fFace;
+
+ for (int v = 0; v < 3; ++v) {
+ gl_Position = vPos[v];
+ worldPosition = x_axis[fFace] * vPos[v].x + y_axis[fFace] * vPos[v].y + maj_axes[fFace];
+#ifdef ATTRIB
+ pass_attrib(v);
+#endif
+ EmitVertex();
+ }
+
+ EndPrimitive();
+} \ No newline at end of file
diff --git a/source/blender/draw/engines/eevee/shaders/lightprobe_grid_display_frag.glsl b/source/blender/draw/engines/eevee/shaders/lightprobe_grid_display_frag.glsl
new file mode 100644
index 00000000000..d333ad34bb0
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/lightprobe_grid_display_frag.glsl
@@ -0,0 +1,11 @@
+
+flat in int cellOffset;
+in vec3 worldNormal;
+
+out vec4 FragColor;
+
+void main()
+{
+ IrradianceData ir_data = load_irradiance_cell(cellOffset, worldNormal);
+ FragColor = vec4(compute_irradiance(worldNormal, ir_data), 1.0);
+}
diff --git a/source/blender/draw/engines/eevee/shaders/lightprobe_grid_display_vert.glsl b/source/blender/draw/engines/eevee/shaders/lightprobe_grid_display_vert.glsl
new file mode 100644
index 00000000000..fd200ec5984
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/lightprobe_grid_display_vert.glsl
@@ -0,0 +1,34 @@
+
+in vec3 pos;
+
+uniform mat4 ViewProjectionMatrix;
+
+uniform float sphere_size;
+uniform int offset;
+uniform ivec3 grid_resolution;
+uniform vec3 corner;
+uniform vec3 increment_x;
+uniform vec3 increment_y;
+uniform vec3 increment_z;
+
+flat out int cellOffset;
+out vec3 worldNormal;
+
+void main()
+{
+ vec3 ls_cell_location;
+ /* Keep in sync with update_irradiance_probe */
+ ls_cell_location.z = float(gl_InstanceID % grid_resolution.z);
+ ls_cell_location.y = float((gl_InstanceID / grid_resolution.z) % grid_resolution.y);
+ ls_cell_location.x = float(gl_InstanceID / (grid_resolution.z * grid_resolution.y));
+
+ cellOffset = offset + gl_InstanceID;
+
+ vec3 ws_cell_location = corner +
+ (increment_x * ls_cell_location.x +
+ increment_y * ls_cell_location.y +
+ increment_z * ls_cell_location.z);
+
+ gl_Position = ViewProjectionMatrix * vec4(pos * 0.02 * sphere_size + ws_cell_location, 1.0);
+ worldNormal = normalize(pos);
+} \ No newline at end of file
diff --git a/source/blender/draw/engines/eevee/shaders/lightprobe_grid_fill_frag.glsl b/source/blender/draw/engines/eevee/shaders/lightprobe_grid_fill_frag.glsl
new file mode 100644
index 00000000000..c9e66ceffb2
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/lightprobe_grid_fill_frag.glsl
@@ -0,0 +1,20 @@
+uniform sampler2DArray irradianceGrid;
+
+out vec4 FragColor;
+
+void main()
+{
+#if defined(IRRADIANCE_SH_L2)
+ const ivec2 data_size = ivec2(3, 3);
+#elif defined(IRRADIANCE_CUBEMAP)
+ const ivec2 data_size = ivec2(8, 8);
+#elif defined(IRRADIANCE_HL2)
+ const ivec2 data_size = ivec2(3, 2);
+#endif
+ ivec2 coord = ivec2(gl_FragCoord.xy) % data_size;
+ FragColor = texelFetch(irradianceGrid, ivec3(coord, 0), 0);
+
+ if (any(greaterThanEqual(ivec2(gl_FragCoord.xy), data_size))) {
+ FragColor = vec4(0.0, 0.0, 0.0, 1.0);
+ }
+} \ No newline at end of file
diff --git a/source/blender/draw/engines/eevee/shaders/lightprobe_lib.glsl b/source/blender/draw/engines/eevee/shaders/lightprobe_lib.glsl
new file mode 100644
index 00000000000..429f6ea92e4
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/lightprobe_lib.glsl
@@ -0,0 +1,259 @@
+/* ----------- Uniforms --------- */
+
+uniform sampler2DArray probePlanars;
+uniform sampler2DArray probeCubes;
+
+/* ----------- Structures --------- */
+
+struct CubeData {
+ vec4 position_type;
+ vec4 attenuation_fac_type;
+ mat4 influencemat;
+ mat4 parallaxmat;
+};
+
+#define PROBE_PARALLAX_BOX 1.0
+#define PROBE_ATTENUATION_BOX 1.0
+
+#define p_position position_type.xyz
+#define p_parallax_type position_type.w
+#define p_atten_fac attenuation_fac_type.x
+#define p_atten_type attenuation_fac_type.y
+
+struct PlanarData {
+ vec4 plane_equation;
+ vec4 clip_vec_x_fade_scale;
+ vec4 clip_vec_y_fade_bias;
+ vec4 clip_edges;
+ vec4 facing_scale_bias;
+ mat4 reflectionmat; /* transform world space into reflection texture space */
+};
+
+#define pl_plane_eq plane_equation
+#define pl_normal plane_equation.xyz
+#define pl_facing_scale facing_scale_bias.x
+#define pl_facing_bias facing_scale_bias.y
+#define pl_fade_scale clip_vec_x_fade_scale.w
+#define pl_fade_bias clip_vec_y_fade_bias.w
+#define pl_clip_pos_x clip_vec_x_fade_scale.xyz
+#define pl_clip_pos_y clip_vec_y_fade_bias.xyz
+#define pl_clip_edges clip_edges
+
+struct GridData {
+ mat4 localmat;
+ ivec4 resolution_offset;
+ vec4 ws_corner_atten_scale; /* world space corner position */
+ vec4 ws_increment_x_atten_bias; /* world space vector between 2 opposite cells */
+ vec4 ws_increment_y_lvl_bias;
+ vec4 ws_increment_z;
+ vec4 vis_bias_bleed_range;
+};
+
+#define g_corner ws_corner_atten_scale.xyz
+#define g_atten_scale ws_corner_atten_scale.w
+#define g_atten_bias ws_increment_x_atten_bias.w
+#define g_level_bias ws_increment_y_lvl_bias.w
+#define g_increment_x ws_increment_x_atten_bias.xyz
+#define g_increment_y ws_increment_y_lvl_bias.xyz
+#define g_increment_z ws_increment_z.xyz
+#define g_resolution resolution_offset.xyz
+#define g_offset resolution_offset.w
+#define g_vis_bias vis_bias_bleed_range.x
+#define g_vis_bleed vis_bias_bleed_range.y
+#define g_vis_range vis_bias_bleed_range.z
+
+#ifndef MAX_PROBE
+#define MAX_PROBE 1
+#endif
+#ifndef MAX_GRID
+#define MAX_GRID 1
+#endif
+#ifndef MAX_PLANAR
+#define MAX_PLANAR 1
+#endif
+
+layout(std140) uniform probe_block {
+ CubeData probes_data[MAX_PROBE];
+};
+
+layout(std140) uniform grid_block {
+ GridData grids_data[MAX_GRID];
+};
+
+layout(std140) uniform planar_block {
+ PlanarData planars_data[MAX_PLANAR];
+};
+
+/* ----------- Functions --------- */
+
+float probe_attenuation_cube(CubeData pd, vec3 W)
+{
+ vec3 localpos = transform_point(pd.influencemat, W);
+
+ float fac;
+ if (pd.p_atten_type == PROBE_ATTENUATION_BOX) {
+ vec3 axes_fac = saturate(pd.p_atten_fac - pd.p_atten_fac * abs(localpos));
+ fac = min_v3(axes_fac);
+ }
+ else {
+ fac = saturate(pd.p_atten_fac - pd.p_atten_fac * length(localpos));
+ }
+
+ return fac;
+}
+
+float probe_attenuation_planar(PlanarData pd, vec3 W, vec3 N, float roughness)
+{
+ /* Normal Facing */
+ float fac = saturate(dot(pd.pl_normal, N) * pd.pl_facing_scale + pd.pl_facing_bias);
+
+ /* Distance from plane */
+ fac *= saturate(abs(dot(pd.pl_plane_eq, vec4(W, 1.0))) * pd.pl_fade_scale + pd.pl_fade_bias);
+
+ /* Fancy fast clipping calculation */
+ vec2 dist_to_clip;
+ dist_to_clip.x = dot(pd.pl_clip_pos_x, W);
+ dist_to_clip.y = dot(pd.pl_clip_pos_y, W);
+ fac *= step(2.0, dot(step(pd.pl_clip_edges, dist_to_clip.xxyy), vec2(-1.0, 1.0).xyxy)); /* compare and add all tests */
+
+ /* Decrease influence for high roughness */
+ fac *= saturate(1.0 - roughness * 10.0);
+
+ return fac;
+}
+
+float probe_attenuation_grid(GridData gd, vec3 W, out vec3 localpos)
+{
+ localpos = transform_point(gd.localmat, W);
+
+ float fade = min(1.0, min_v3(1.0 - abs(localpos)));
+ return saturate(fade * gd.g_atten_scale + gd.g_atten_bias);
+}
+
+vec3 probe_evaluate_cube(float id, CubeData cd, vec3 W, vec3 R, float roughness)
+{
+ /* Correct reflection ray using parallax volume intersection. */
+ vec3 localpos = transform_point(cd.parallaxmat, W);
+ vec3 localray = transform_direction(cd.parallaxmat, R);
+
+ float dist;
+ if (cd.p_parallax_type == PROBE_PARALLAX_BOX) {
+ dist = line_unit_box_intersect_dist(localpos, localray);
+ }
+ else {
+ dist = line_unit_sphere_intersect_dist(localpos, localray);
+ }
+
+ /* Use Distance in WS directly to recover intersection */
+ vec3 intersection = W + R * dist - cd.p_position;
+
+ /* From Frostbite PBR Course
+ * Distance based roughness
+ * http://www.frostbite.com/wp-content/uploads/2014/11/course_notes_moving_frostbite_to_pbr.pdf */
+ float original_roughness = roughness;
+ float linear_roughness = sqrt(roughness);
+ float distance_roughness = saturate(dist * linear_roughness / length(intersection));
+ linear_roughness = mix(distance_roughness, linear_roughness, linear_roughness);
+ roughness = linear_roughness * linear_roughness;
+
+ float fac = saturate(original_roughness * 2.0 - 1.0);
+ R = mix(intersection, R, fac * fac);
+
+ return textureLod_octahedron(probeCubes, vec4(R, id), roughness * prbLodCubeMax, prbLodCubeMax).rgb;
+}
+
+vec3 probe_evaluate_world_spec(vec3 R, float roughness)
+{
+ return textureLod_octahedron(probeCubes, vec4(R, 0.0), roughness * prbLodCubeMax, prbLodCubeMax).rgb;
+}
+
+vec3 probe_evaluate_planar(
+ float id, PlanarData pd, vec3 W, vec3 N, vec3 V,
+ float roughness, inout float fade)
+{
+ /* Find view vector / reflection plane intersection. */
+ vec3 point_on_plane = line_plane_intersect(W, V, pd.pl_plane_eq);
+
+ /* How far the pixel is from the plane. */
+ float ref_depth = 1.0; /* TODO parameter */
+
+ /* Compute distorded reflection vector based on the distance to the reflected object.
+ * In other words find intersection between reflection vector and the sphere center
+ * around point_on_plane. */
+ vec3 proj_ref = reflect(reflect(-V, N) * ref_depth, pd.pl_normal);
+
+ /* Final point in world space. */
+ vec3 ref_pos = point_on_plane + proj_ref;
+
+ /* Reproject to find texture coords. */
+ vec4 refco = ViewProjectionMatrix * vec4(ref_pos, 1.0);
+ refco.xy /= refco.w;
+
+ /* TODO: If we support non-ssr planar reflection, we should blur them with gaussian
+ * and chose the right mip depending on the cone footprint after projection */
+ vec3 sample = textureLod(probePlanars, vec3(refco.xy * 0.5 + 0.5, id), 0.0).rgb;
+
+ return sample;
+}
+
+#ifdef IRRADIANCE_LIB
+vec3 probe_evaluate_grid(GridData gd, vec3 W, vec3 N, vec3 localpos)
+{
+ localpos = localpos * 0.5 + 0.5;
+ localpos = localpos * vec3(gd.g_resolution) - 0.5;
+
+ vec3 localpos_floored = floor(localpos);
+ vec3 trilinear_weight = fract(localpos);
+
+ float weight_accum = 0.0;
+ vec3 irradiance_accum = vec3(0.0);
+
+ /* For each neighboor cells */
+ for (int i = 0; i < 8; ++i) {
+ ivec3 offset = ivec3(i, i >> 1, i >> 2) & ivec3(1);
+ vec3 cell_cos = clamp(localpos_floored + vec3(offset), vec3(0.0), vec3(gd.g_resolution) - 1.0);
+
+ /* Keep in sync with update_irradiance_probe */
+ ivec3 icell_cos = ivec3(gd.g_level_bias * floor(cell_cos / gd.g_level_bias));
+ int cell = gd.g_offset + icell_cos.z
+ + icell_cos.y * gd.g_resolution.z
+ + icell_cos.x * gd.g_resolution.z * gd.g_resolution.y;
+
+ vec3 color = irradiance_from_cell_get(cell, N);
+
+ /* We need this because we render probes in world space (so we need light vector in WS).
+ * And rendering them in local probe space is too much problem. */
+ vec3 ws_cell_location = gd.g_corner +
+ (gd.g_increment_x * cell_cos.x +
+ gd.g_increment_y * cell_cos.y +
+ gd.g_increment_z * cell_cos.z);
+
+ vec3 ws_point_to_cell = ws_cell_location - W;
+ float ws_dist_point_to_cell = length(ws_point_to_cell);
+ vec3 ws_light = ws_point_to_cell / ws_dist_point_to_cell;
+
+ vec3 trilinear = mix(1 - trilinear_weight, trilinear_weight, offset);
+ float weight = trilinear.x * trilinear.y * trilinear.z;
+
+ /* Precomputed visibility */
+ weight *= load_visibility_cell(cell, ws_light, ws_dist_point_to_cell, gd.g_vis_bias, gd.g_vis_bleed, gd.g_vis_range);
+
+ /* Smooth backface test */
+ weight *= sqrt(max(0.002, dot(ws_light, N)));
+
+ /* Avoid zero weight */
+ weight = max(0.00001, weight);
+
+ weight_accum += weight;
+ irradiance_accum += color * weight;
+ }
+
+ return irradiance_accum / weight_accum;
+}
+
+vec3 probe_evaluate_world_diff(vec3 N)
+{
+ return irradiance_from_cell_get(0, N);
+}
+
+#endif /* IRRADIANCE_LIB */
diff --git a/source/blender/draw/engines/eevee/shaders/lightprobe_planar_display_frag.glsl b/source/blender/draw/engines/eevee/shaders/lightprobe_planar_display_frag.glsl
new file mode 100644
index 00000000000..655cc626bba
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/lightprobe_planar_display_frag.glsl
@@ -0,0 +1,15 @@
+
+uniform mat4 ViewProjectionMatrix;
+uniform sampler2DArray probePlanars;
+
+in vec3 worldPosition;
+flat in int probeIdx;
+
+out vec4 FragColor;
+
+void main()
+{
+ vec4 refco = ViewProjectionMatrix * vec4(worldPosition, 1.0);
+ refco.xy /= refco.w;
+ FragColor = vec4(textureLod(probePlanars, vec3(refco.xy * 0.5 + 0.5, float(probeIdx)), 0.0).rgb, 1.0);
+}
diff --git a/source/blender/draw/engines/eevee/shaders/lightprobe_planar_display_vert.glsl b/source/blender/draw/engines/eevee/shaders/lightprobe_planar_display_vert.glsl
new file mode 100644
index 00000000000..a9716332eb5
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/lightprobe_planar_display_vert.glsl
@@ -0,0 +1,17 @@
+
+in vec3 pos;
+
+in int probe_id;
+in mat4 probe_mat;
+
+uniform mat4 ViewProjectionMatrix;
+
+out vec3 worldPosition;
+flat out int probeIdx;
+
+void main()
+{
+ gl_Position = ViewProjectionMatrix * probe_mat * vec4(pos, 1.0);
+ worldPosition = (probe_mat * vec4(pos, 1.0)).xyz;
+ probeIdx = probe_id;
+} \ No newline at end of file
diff --git a/source/blender/draw/engines/eevee/shaders/lightprobe_planar_downsample_frag.glsl b/source/blender/draw/engines/eevee/shaders/lightprobe_planar_downsample_frag.glsl
new file mode 100644
index 00000000000..3b3abdef00c
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/lightprobe_planar_downsample_frag.glsl
@@ -0,0 +1,40 @@
+/**
+ * Simple downsample shader. Takes the average of the 4 texels of lower mip.
+ **/
+
+uniform sampler2DArray source;
+uniform float fireflyFactor;
+
+in vec2 uvs;
+flat in float layer;
+
+out vec4 FragColor;
+
+float brightness(vec3 c)
+{
+ return max(max(c.r, c.g), c.b);
+}
+
+void main()
+{
+#if 0
+ /* Reconstructing Target uvs like this avoid missing pixels if NPO2 */
+ vec2 uvs = gl_FragCoord.xy * 2.0 / vec2(textureSize(source, 0));
+
+ FragColor = textureLod(source, vec3(uvs, layer), 0.0);
+#else
+ vec2 texel_size = 1.0 / vec2(textureSize(source, 0));
+ vec2 uvs = gl_FragCoord.xy * 2.0 * texel_size;
+ vec4 ofs = texel_size.xyxy * vec4(0.75, 0.75, -0.75, -0.75);
+
+ FragColor = textureLod(source, vec3(uvs + ofs.xy, layer), 0.0);
+ FragColor += textureLod(source, vec3(uvs + ofs.xw, layer), 0.0);
+ FragColor += textureLod(source, vec3(uvs + ofs.zy, layer), 0.0);
+ FragColor += textureLod(source, vec3(uvs + ofs.zw, layer), 0.0);
+ FragColor *= 0.25;
+
+ /* Clamped brightness. */
+ float luma = max(1e-8, brightness(FragColor.rgb));
+ FragColor *= 1.0 - max(0.0, luma - fireflyFactor) / luma;
+#endif
+} \ No newline at end of file
diff --git a/source/blender/draw/engines/eevee/shaders/lightprobe_planar_downsample_geom.glsl b/source/blender/draw/engines/eevee/shaders/lightprobe_planar_downsample_geom.glsl
new file mode 100644
index 00000000000..40b04c986f3
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/lightprobe_planar_downsample_geom.glsl
@@ -0,0 +1,24 @@
+
+layout(triangles) in;
+layout(triangle_strip, max_vertices=3) out;
+
+in int instance[];
+in vec2 vPos[];
+
+flat out float layer;
+
+void main() {
+ gl_Layer = instance[0];
+ layer = float(instance[0]);
+
+ gl_Position = vec4(vPos[0], 0.0, 0.0);
+ EmitVertex();
+
+ gl_Position = vec4(vPos[1], 0.0, 0.0);
+ EmitVertex();
+
+ gl_Position = vec4(vPos[2], 0.0, 0.0);
+ EmitVertex();
+
+ EndPrimitive();
+} \ No newline at end of file
diff --git a/source/blender/draw/engines/eevee/shaders/lightprobe_planar_downsample_vert.glsl b/source/blender/draw/engines/eevee/shaders/lightprobe_planar_downsample_vert.glsl
new file mode 100644
index 00000000000..ac4e3da4158
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/lightprobe_planar_downsample_vert.glsl
@@ -0,0 +1,10 @@
+
+in vec2 pos;
+
+out int instance;
+out vec2 vPos;
+
+void main() {
+ instance = gl_InstanceID;
+ vPos = pos;
+} \ No newline at end of file
diff --git a/source/blender/draw/engines/eevee/shaders/lightprobe_vert.glsl b/source/blender/draw/engines/eevee/shaders/lightprobe_vert.glsl
new file mode 100644
index 00000000000..f5077d52845
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/lightprobe_vert.glsl
@@ -0,0 +1,10 @@
+
+in vec3 pos;
+
+out vec4 vPos;
+flat out int face;
+
+void main() {
+ vPos = vec4(pos, 1.0);
+ face = gl_InstanceID;
+} \ No newline at end of file
diff --git a/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl b/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl
new file mode 100644
index 00000000000..cc66b477da0
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl
@@ -0,0 +1,486 @@
+
+#ifndef LIT_SURFACE_UNIFORM
+#define LIT_SURFACE_UNIFORM
+
+uniform float refractionDepth;
+
+#ifndef UTIL_TEX
+#define UTIL_TEX
+uniform sampler2DArray utilTex;
+#define texelfetch_noise_tex(coord) texelFetch(utilTex, ivec3(ivec2(coord) % LUT_SIZE, 2.0), 0)
+#endif /* UTIL_TEX */
+
+in vec3 worldPosition;
+in vec3 viewPosition;
+
+#ifdef USE_FLAT_NORMAL
+flat in vec3 worldNormal;
+flat in vec3 viewNormal;
+#else
+in vec3 worldNormal;
+in vec3 viewNormal;
+#endif
+
+#endif /* LIT_SURFACE_UNIFORM */
+
+/** AUTO CONFIG
+ * We include the file multiple times each time with a different configuration.
+ * This leads to a lot of deadcode. Better idea would be to only generate the one needed.
+ */
+#if !defined(SURFACE_DEFAULT)
+ #define SURFACE_DEFAULT
+ #define CLOSURE_NAME eevee_closure_default
+ #define CLOSURE_DIFFUSE
+ #define CLOSURE_GLOSSY
+#endif /* SURFACE_DEFAULT */
+
+#if !defined(SURFACE_PRINCIPLED) && !defined(CLOSURE_NAME)
+ #define SURFACE_PRINCIPLED
+ #define CLOSURE_NAME eevee_closure_principled
+ #define CLOSURE_DIFFUSE
+ #define CLOSURE_GLOSSY
+ #define CLOSURE_CLEARCOAT
+ #define CLOSURE_REFRACTION
+ #define CLOSURE_SUBSURFACE
+#endif /* SURFACE_PRINCIPLED */
+
+#if !defined(SURFACE_DIFFUSE) && !defined(CLOSURE_NAME)
+ #define SURFACE_DIFFUSE
+ #define CLOSURE_NAME eevee_closure_diffuse
+ #define CLOSURE_DIFFUSE
+#endif /* SURFACE_DIFFUSE */
+
+#if !defined(SURFACE_SUBSURFACE) && !defined(CLOSURE_NAME)
+ #define SURFACE_SUBSURFACE
+ #define CLOSURE_NAME eevee_closure_subsurface
+ #define CLOSURE_DIFFUSE
+ #define CLOSURE_SUBSURFACE
+#endif /* SURFACE_SUBSURFACE */
+
+#if !defined(SURFACE_GLOSSY) && !defined(CLOSURE_NAME)
+ #define SURFACE_GLOSSY
+ #define CLOSURE_NAME eevee_closure_glossy
+ #define CLOSURE_GLOSSY
+#endif /* SURFACE_GLOSSY */
+
+#if !defined(SURFACE_REFRACT) && !defined(CLOSURE_NAME)
+ #define SURFACE_REFRACT
+ #define CLOSURE_NAME eevee_closure_refraction
+ #define CLOSURE_REFRACTION
+#endif /* SURFACE_REFRACT */
+
+#if !defined(SURFACE_GLASS) && !defined(CLOSURE_NAME)
+ #define SURFACE_GLASS
+ #define CLOSURE_NAME eevee_closure_glass
+ #define CLOSURE_GLOSSY
+ #define CLOSURE_REFRACTION
+#endif /* SURFACE_GLASS */
+
+/* Safety : CLOSURE_CLEARCOAT implies CLOSURE_GLOSSY */
+#ifdef CLOSURE_CLEARCOAT
+ #ifndef CLOSURE_GLOSSY
+ #define CLOSURE_GLOSSY
+ #endif
+#endif /* CLOSURE_CLEARCOAT */
+
+void CLOSURE_NAME(
+ vec3 N
+#ifdef CLOSURE_DIFFUSE
+ , vec3 albedo
+#endif
+#ifdef CLOSURE_GLOSSY
+ , vec3 f0, int ssr_id
+#endif
+#if defined(CLOSURE_GLOSSY) || defined(CLOSURE_REFRACTION)
+ , float roughness
+#endif
+#ifdef CLOSURE_CLEARCOAT
+ , vec3 C_N, float C_intensity, float C_roughness
+#endif
+#if defined(CLOSURE_GLOSSY) || defined(CLOSURE_DIFFUSE)
+ , float ao
+#endif
+#ifdef CLOSURE_SUBSURFACE
+ , float sss_scale
+#endif
+#ifdef CLOSURE_REFRACTION
+ , float ior
+#endif
+#ifdef CLOSURE_DIFFUSE
+ , out vec3 out_diff
+#endif
+#ifdef CLOSURE_SUBSURFACE
+ , out vec3 out_trans
+#endif
+#ifdef CLOSURE_GLOSSY
+ , out vec3 out_spec
+#endif
+#ifdef CLOSURE_REFRACTION
+ , out vec3 out_refr
+#endif
+#ifdef CLOSURE_GLOSSY
+ , out vec3 ssr_spec
+#endif
+ )
+{
+#ifdef CLOSURE_DIFFUSE
+ out_diff = vec3(0.0);
+#endif
+
+#ifdef CLOSURE_SUBSURFACE
+ out_trans = vec3(0.0);
+#endif
+
+#ifdef CLOSURE_GLOSSY
+ out_spec = vec3(0.0);
+#endif
+
+#ifdef CLOSURE_REFRACTION
+ out_refr = vec3(0.0);
+#endif
+
+ /* Zero length vectors cause issues, see: T51979. */
+ float len = length(N);
+ if (isnan(len)) {
+ return;
+ }
+ N /= len;
+
+#ifdef CLOSURE_CLEARCOAT
+ len = length(C_N);
+ if (isnan(len)) {
+ return;
+ }
+ C_N /= len;
+#endif
+
+#if defined(CLOSURE_GLOSSY) || defined(CLOSURE_REFRACTION)
+ roughness = clamp(roughness, 1e-8, 0.9999);
+ float roughnessSquared = roughness * roughness;
+#endif
+
+#ifdef CLOSURE_CLEARCOAT
+ C_roughness = clamp(C_roughness, 1e-8, 0.9999);
+ float C_roughnessSquared = C_roughness * C_roughness;
+#endif
+
+ vec3 V = cameraVec;
+
+ vec4 rand = texelFetch(utilTex, ivec3(ivec2(gl_FragCoord.xy) % LUT_SIZE, 2.0), 0);
+
+ /* ---------------------------------------------------------------- */
+ /* -------------------- SCENE LAMPS LIGHTING ---------------------- */
+ /* ---------------------------------------------------------------- */
+
+#ifdef HAIR_SHADER
+ vec3 norm_view = cross(V, N);
+ norm_view = normalize(cross(norm_view, N)); /* Normal facing view */
+#endif
+
+ for (int i = 0; i < MAX_LIGHT && i < laNumLight; ++i) {
+ LightData ld = lights_data[i];
+
+ vec4 l_vector; /* Non-Normalized Light Vector with length in last component. */
+ l_vector.xyz = ld.l_position - worldPosition;
+ l_vector.w = length(l_vector.xyz);
+
+ vec3 l_color_vis = ld.l_color * light_visibility(ld, worldPosition, viewPosition, viewNormal, l_vector);
+
+#ifdef HAIR_SHADER
+ vec3 norm_lamp, view_vec;
+ float occlu_trans, occlu;
+ light_hair_common(ld, N, V, l_vector, norm_view, occlu_trans, occlu, norm_lamp, view_vec);
+
+ #ifdef CLOSURE_DIFFUSE
+ out_diff += l_color_vis * light_diffuse(ld, -norm_lamp, V, l_vector) * occlu_trans;
+ #endif
+
+ #ifdef CLOSURE_SUBSURFACE
+ out_trans += ld.l_color * light_translucent(ld, worldPosition, -norm_lamp, l_vector, sss_scale) * occlu_trans;
+ #endif
+
+ #ifdef CLOSURE_GLOSSY
+ out_spec += l_color_vis * light_specular(ld, N, view_vec, l_vector, roughnessSquared, f0) * occlu;
+ #endif
+
+ #ifdef CLOSURE_CLEARCOAT
+ out_spec += l_color_vis * light_specular(ld, C_N, view_vec, l_vector, C_roughnessSquared, f0) * C_intensity * occlu;
+ #endif
+
+#else /* HAIR_SHADER */
+
+ #ifdef CLOSURE_DIFFUSE
+ out_diff += l_color_vis * light_diffuse(ld, N, V, l_vector);
+ #endif
+
+ #ifdef CLOSURE_SUBSURFACE
+ out_trans += ld.l_color * light_translucent(ld, worldPosition, -N, l_vector, sss_scale);
+ #endif
+
+ #ifdef CLOSURE_GLOSSY
+ out_spec += l_color_vis * light_specular(ld, N, V, l_vector, roughnessSquared, f0);
+ #endif
+
+ #ifdef CLOSURE_CLEARCOAT
+ out_spec += l_color_vis * light_specular(ld, C_N, V, l_vector, C_roughnessSquared, f0) * C_intensity;
+ #endif
+
+#endif /* HAIR_SHADER */
+ }
+
+#ifdef HAIR_SHADER
+ N = -norm_view;
+#endif
+
+
+
+ /* ---------------------------------------------------------------- */
+ /* ---------------- SPECULAR ENVIRONMENT LIGHTING ----------------- */
+ /* ---------------------------------------------------------------- */
+
+ /* Accumulate incomming light from all sources until accumulator is full. Then apply Occlusion and BRDF. */
+#ifdef CLOSURE_GLOSSY
+ vec4 spec_accum = vec4(0.0);
+#endif
+
+#ifdef CLOSURE_CLEARCOAT
+ vec4 C_spec_accum = vec4(0.0);
+#endif
+
+#ifdef CLOSURE_REFRACTION
+ vec4 refr_accum = vec4(0.0);
+#endif
+
+#ifdef CLOSURE_GLOSSY
+ /* ---------------------------- */
+ /* Planar Reflections */
+ /* ---------------------------- */
+
+ for (int i = 0; i < MAX_PLANAR && i < prbNumPlanar && spec_accum.a < 0.999; ++i) {
+ PlanarData pd = planars_data[i];
+
+ /* Fade on geometric normal. */
+ float fade = probe_attenuation_planar(pd, worldPosition, worldNormal, roughness);
+
+ if (fade > 0.0) {
+ if (!(ssrToggle && ssr_id == outputSsrId)) {
+ vec3 spec = probe_evaluate_planar(float(i), pd, worldPosition, N, V, roughness, fade);
+ accumulate_light(spec, fade, spec_accum);
+ }
+
+ #ifdef CLOSURE_CLEARCOAT
+ vec3 C_spec = probe_evaluate_planar(float(i), pd, worldPosition, C_N, V, C_roughness, fade);
+ accumulate_light(C_spec, fade, C_spec_accum);
+ #endif
+
+ }
+ }
+#endif
+
+
+#ifdef CLOSURE_GLOSSY
+ vec3 spec_dir = get_specular_reflection_dominant_dir(N, V, roughnessSquared);
+#endif
+
+#ifdef CLOSURE_CLEARCOAT
+ vec3 C_spec_dir = get_specular_reflection_dominant_dir(C_N, V, C_roughnessSquared);
+#endif
+
+#ifdef CLOSURE_REFRACTION
+ /* Refract the view vector using the depth heuristic.
+ * Then later Refract a second time the already refracted
+ * ray using the inverse ior. */
+ float final_ior = (refractionDepth > 0.0) ? 1.0 / ior : ior;
+ vec3 refr_V = (refractionDepth > 0.0) ? -refract(-V, N, final_ior) : V;
+ vec3 refr_pos = (refractionDepth > 0.0) ? line_plane_intersect(worldPosition, refr_V, worldPosition - N * refractionDepth, N) : worldPosition;
+ vec3 refr_dir = get_specular_refraction_dominant_dir(N, refr_V, roughness, final_ior);
+#endif
+
+
+#ifdef CLOSURE_REFRACTION
+ /* ---------------------------- */
+ /* Screen Space Refraction */
+ /* ---------------------------- */
+ #ifdef USE_REFRACTION
+ if (ssrToggle && roughness < ssrMaxRoughness + 0.2) {
+ /* Find approximated position of the 2nd refraction event. */
+ vec3 refr_vpos = (refractionDepth > 0.0) ? transform_point(ViewMatrix, refr_pos) : viewPosition;
+ vec4 trans = screen_space_refraction(refr_vpos, N, refr_V, final_ior, roughnessSquared, rand);
+ trans.a *= smoothstep(ssrMaxRoughness + 0.2, ssrMaxRoughness, roughness);
+ accumulate_light(trans.rgb, trans.a, refr_accum);
+ }
+ #endif
+
+#endif
+
+
+ /* ---------------------------- */
+ /* Specular probes */
+ /* ---------------------------- */
+#if defined(CLOSURE_GLOSSY) || defined(CLOSURE_REFRACTION)
+
+ #ifdef CLOSURE_REFRACTION
+ #define ACCUM refr_accum
+ #else
+ #define ACCUM spec_accum
+ #endif
+
+ /* Starts at 1 because 0 is world probe */
+ for (int i = 1; ACCUM.a < 0.999 && i < prbNumRenderCube && i < MAX_PROBE; ++i) {
+ CubeData cd = probes_data[i];
+
+ float fade = probe_attenuation_cube(cd, worldPosition);
+
+ if (fade > 0.0) {
+
+ #ifdef CLOSURE_GLOSSY
+ if (!(ssrToggle && ssr_id == outputSsrId)) {
+ vec3 spec = probe_evaluate_cube(float(i), cd, worldPosition, spec_dir, roughness);
+ accumulate_light(spec, fade, spec_accum);
+ }
+ #endif
+
+ #ifdef CLOSURE_CLEARCOAT
+ vec3 C_spec = probe_evaluate_cube(float(i), cd, worldPosition, C_spec_dir, C_roughness);
+ accumulate_light(C_spec, fade, C_spec_accum);
+ #endif
+
+ #ifdef CLOSURE_REFRACTION
+ vec3 trans = probe_evaluate_cube(float(i), cd, refr_pos, refr_dir, roughnessSquared);
+ accumulate_light(trans, fade, refr_accum);
+ #endif
+ }
+ }
+
+ #undef ACCUM
+
+ /* ---------------------------- */
+ /* World Probe */
+ /* ---------------------------- */
+ #ifdef CLOSURE_GLOSSY
+ if (spec_accum.a < 0.999) {
+ if (!(ssrToggle && ssr_id == outputSsrId)) {
+ vec3 spec = probe_evaluate_world_spec(spec_dir, roughness);
+ accumulate_light(spec, 1.0, spec_accum);
+ }
+
+ #ifdef CLOSURE_CLEARCOAT
+ vec3 C_spec = probe_evaluate_world_spec(C_spec_dir, C_roughness);
+ accumulate_light(C_spec, 1.0, C_spec_accum);
+ #endif
+
+ }
+ #endif
+
+ #ifdef CLOSURE_REFRACTION
+ if (refr_accum.a < 0.999) {
+ vec3 trans = probe_evaluate_world_spec(refr_dir, roughnessSquared);
+ accumulate_light(trans, 1.0, refr_accum);
+ }
+ #endif
+#endif /* Specular probes */
+
+
+ /* ---------------------------- */
+ /* Ambient Occlusion */
+ /* ---------------------------- */
+#if defined(CLOSURE_GLOSSY) || defined(CLOSURE_DIFFUSE)
+ vec3 bent_normal;
+ float final_ao = occlusion_compute(N, viewPosition, ao, rand, bent_normal);
+#endif
+
+
+ /* ---------------------------- */
+ /* Specular Output */
+ /* ---------------------------- */
+ float NV = dot(N, V);
+#ifdef CLOSURE_GLOSSY
+ vec2 uv = lut_coords(NV, roughness);
+ vec2 brdf_lut = texture(utilTex, vec3(uv, 1.0)).rg;
+
+ /* This factor is outputed to be used by SSR in order
+ * to match the intensity of the regular reflections. */
+ ssr_spec = F_ibl(f0, brdf_lut);
+ float spec_occlu = specular_occlusion(NV, final_ao, roughness);
+
+ /* The SSR pass recompute the occlusion to not apply it to the SSR */
+ if (ssrToggle && ssr_id == outputSsrId) {
+ spec_occlu = 1.0;
+ }
+
+ out_spec += spec_accum.rgb * ssr_spec * spec_occlu * float(specToggle);
+#endif
+
+#ifdef CLOSURE_REFRACTION
+ float btdf = get_btdf_lut(utilTex, NV, roughness, ior);
+
+ out_refr += refr_accum.rgb * btdf;
+#endif
+
+#ifdef CLOSURE_CLEARCOAT
+ NV = dot(C_N, V);
+ vec2 C_uv = lut_coords(NV, C_roughness);
+ vec2 C_brdf_lut = texture(utilTex, vec3(C_uv, 1.0)).rg;
+ vec3 C_fresnel = F_ibl(vec3(0.04), brdf_lut) * specular_occlusion(NV, final_ao, C_roughness);
+
+ out_spec += C_spec_accum.rgb * C_fresnel * float(specToggle) * C_intensity;
+#endif
+
+ /* ---------------------------------------------------------------- */
+ /* ---------------- DIFFUSE ENVIRONMENT LIGHTING ------------------ */
+ /* ---------------------------------------------------------------- */
+
+ /* Accumulate light from all sources until accumulator is full. Then apply Occlusion and BRDF. */
+#ifdef CLOSURE_DIFFUSE
+ vec4 diff_accum = vec4(0.0);
+
+ /* ---------------------------- */
+ /* Irradiance Grids */
+ /* ---------------------------- */
+ /* Start at 1 because 0 is world irradiance */
+ for (int i = 1; i < MAX_GRID && i < prbNumRenderGrid && diff_accum.a < 0.999; ++i) {
+ GridData gd = grids_data[i];
+
+ vec3 localpos;
+ float fade = probe_attenuation_grid(gd, worldPosition, localpos);
+
+ if (fade > 0.0) {
+ vec3 diff = probe_evaluate_grid(gd, worldPosition, bent_normal, localpos);
+ accumulate_light(diff, fade, diff_accum);
+ }
+ }
+
+ /* ---------------------------- */
+ /* World Diffuse */
+ /* ---------------------------- */
+ if (diff_accum.a < 0.999 && prbNumRenderGrid > 0) {
+ vec3 diff = probe_evaluate_world_diff(bent_normal);
+ accumulate_light(diff, 1.0, diff_accum);
+ }
+
+ out_diff += diff_accum.rgb * gtao_multibounce(final_ao, albedo);
+#endif
+}
+
+/* Cleanup for next configuration */
+#undef CLOSURE_NAME
+
+#ifdef CLOSURE_DIFFUSE
+ #undef CLOSURE_DIFFUSE
+#endif
+
+#ifdef CLOSURE_GLOSSY
+ #undef CLOSURE_GLOSSY
+#endif
+
+#ifdef CLOSURE_CLEARCOAT
+ #undef CLOSURE_CLEARCOAT
+#endif
+
+#ifdef CLOSURE_REFRACTION
+ #undef CLOSURE_REFRACTION
+#endif
+
+#ifdef CLOSURE_SUBSURFACE
+ #undef CLOSURE_SUBSURFACE
+#endif \ No newline at end of file
diff --git a/source/blender/draw/engines/eevee/shaders/lit_surface_vert.glsl b/source/blender/draw/engines/eevee/shaders/lit_surface_vert.glsl
new file mode 100644
index 00000000000..998ccfa453a
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/lit_surface_vert.glsl
@@ -0,0 +1,40 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+uniform mat4 ModelMatrix;
+uniform mat4 ModelViewMatrix;
+uniform mat3 WorldNormalMatrix;
+#ifndef ATTRIB
+uniform mat3 NormalMatrix;
+#endif
+
+in vec3 pos;
+in vec3 nor;
+
+out vec3 worldPosition;
+out vec3 viewPosition;
+
+/* Used for planar reflections */
+uniform vec4 ClipPlanes[1];
+
+#ifdef USE_FLAT_NORMAL
+flat out vec3 worldNormal;
+flat out vec3 viewNormal;
+#else
+out vec3 worldNormal;
+out vec3 viewNormal;
+#endif
+
+void main() {
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
+ viewPosition = (ModelViewMatrix * vec4(pos, 1.0)).xyz;
+ worldPosition = (ModelMatrix * vec4(pos, 1.0)).xyz;
+ viewNormal = normalize(NormalMatrix * nor);
+ worldNormal = normalize(WorldNormalMatrix * nor);
+
+ /* Used for planar reflections */
+ gl_ClipDistance[0] = dot(vec4(worldPosition, 1.0), ClipPlanes[0]);
+
+#ifdef ATTRIB
+ pass_attrib(pos);
+#endif
+} \ No newline at end of file
diff --git a/source/blender/draw/engines/eevee/shaders/ltc_lib.glsl b/source/blender/draw/engines/eevee/shaders/ltc_lib.glsl
new file mode 100644
index 00000000000..5c62cb19152
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/ltc_lib.glsl
@@ -0,0 +1,322 @@
+/**
+ * Adapted from :
+ * Real-Time Polygonal-Light Shading with Linearly Transformed Cosines.
+ * Eric Heitz, Jonathan Dupuy, Stephen Hill and David Neubelt.
+ * ACM Transactions on Graphics (Proceedings of ACM SIGGRAPH 2016) 35(4), 2016.
+ * Project page: https://eheitzresearch.wordpress.com/415-2/
+ **/
+
+#define USE_LTC
+
+#ifndef UTIL_TEX
+#define UTIL_TEX
+uniform sampler2DArray utilTex;
+#define texelfetch_noise_tex(coord) texelFetch(utilTex, ivec3(ivec2(coord) % LUT_SIZE, 2.0), 0)
+#endif /* UTIL_TEX */
+
+/* Diffuse *clipped* sphere integral. */
+float diffuse_sphere_integral_lut(float avg_dir_z, float form_factor)
+{
+ vec2 uv = vec2(avg_dir_z * 0.5 + 0.5, form_factor);
+ uv = uv * (LUT_SIZE - 1.0) / LUT_SIZE + 0.5 / LUT_SIZE;
+
+ return texture(utilTex, vec3(uv, 1.0)).w;
+}
+
+float diffuse_sphere_integral_cheap(float avg_dir_z, float form_factor)
+{
+ return max((form_factor * form_factor + avg_dir_z) / (form_factor + 1.0), 0.0);
+}
+
+/**
+ * An extended version of the implementation from
+ * "How to solve a cubic equation, revisited"
+ * http://momentsingraphics.de/?p=105
+ **/
+vec3 solve_cubic(vec4 coefs)
+{
+ /* Normalize the polynomial */
+ coefs.xyz /= coefs.w;
+ /* Divide middle coefficients by three */
+ coefs.yz /= 3.0;
+
+ float A = coefs.w;
+ float B = coefs.z;
+ float C = coefs.y;
+ float D = coefs.x;
+
+ /* Compute the Hessian and the discriminant */
+ vec3 delta = vec3(
+ -coefs.z*coefs.z + coefs.y,
+ -coefs.y*coefs.z + coefs.x,
+ dot(vec2(coefs.z, -coefs.y), coefs.xy)
+ );
+
+ /* Discriminant */
+ float discr = dot(vec2(4.0 * delta.x, -delta.y), delta.zy);
+
+ vec2 xlc, xsc;
+
+ /* Algorithm A */
+ {
+ float A_a = 1.0;
+ float C_a = delta.x;
+ float D_a = -2.0 * B * delta.x + delta.y;
+
+ /* Take the cubic root of a normalized complex number */
+ float theta = atan(sqrt(discr), -D_a) / 3.0;
+
+ float x_1a = 2.0 * sqrt(-C_a) * cos(theta);
+ float x_3a = 2.0 * sqrt(-C_a) * cos(theta + (2.0 / 3.0) * M_PI);
+
+ float xl;
+ if ((x_1a + x_3a) > 2.0 * B) {
+ xl = x_1a;
+ }
+ else {
+ xl = x_3a;
+ }
+
+ xlc = vec2(xl - B, A);
+ }
+
+ /* Algorithm D */
+ {
+ float A_d = D;
+ float C_d = delta.z;
+ float D_d = -D * delta.y + 2.0 * C * delta.z;
+
+ /* Take the cubic root of a normalized complex number */
+ float theta = atan(D * sqrt(discr), -D_d) / 3.0;
+
+ float x_1d = 2.0 * sqrt(-C_d) * cos(theta);
+ float x_3d = 2.0 * sqrt(-C_d) * cos(theta + (2.0 / 3.0) * M_PI);
+
+ float xs;
+ if (x_1d + x_3d < 2.0 * C)
+ xs = x_1d;
+ else
+ xs = x_3d;
+
+ xsc = vec2(-D, xs + C);
+ }
+
+ float E = xlc.y * xsc.y;
+ float F = -xlc.x * xsc.y - xlc.y * xsc.x;
+ float G = xlc.x * xsc.x;
+
+ vec2 xmc = vec2(C * F - B * G, -B * F + C * E);
+
+ vec3 root = vec3(xsc.x / xsc.y,
+ xmc.x / xmc.y,
+ xlc.x / xlc.y);
+
+ if (root.x < root.y && root.x < root.z) {
+ root.xyz = root.yxz;
+ }
+ else if (root.z < root.x && root.z < root.y) {
+ root.xyz = root.xzy;
+ }
+
+ return root;
+}
+
+/* from Real-Time Area Lighting: a Journey from Research to Production
+ * Stephen Hill and Eric Heitz */
+vec3 edge_integral_vec(vec3 v1, vec3 v2)
+{
+ float x = dot(v1, v2);
+ float y = abs(x);
+
+ float a = 0.8543985 + (0.4965155 + 0.0145206 * y) * y;
+ float b = 3.4175940 + (4.1616724 + y) * y;
+ float v = a / b;
+
+ float theta_sintheta = (x > 0.0) ? v : 0.5 * inversesqrt(max(1.0 - x * x, 1e-7)) - v;
+
+ return cross(v1, v2) * theta_sintheta;
+}
+
+mat3 ltc_matrix(vec4 lut)
+{
+ /* load inverse matrix */
+ mat3 Minv = mat3(
+ vec3( 1, 0, lut.y),
+ vec3( 0, lut.z, 0),
+ vec3(lut.w, 0, lut.x)
+ );
+
+ return Minv;
+}
+
+void ltc_transform_quad(vec3 N, vec3 V, mat3 Minv, inout vec3 corners[4])
+{
+ /* Avoid dot(N, V) == 1 in ortho mode, leading T1 normalize to fail. */
+ V = normalize(V + 1e-8);
+
+ /* construct orthonormal basis around N */
+ vec3 T1, T2;
+ T1 = normalize(V - N * dot(N, V));
+ T2 = cross(N, T1);
+
+ /* rotate area light in (T1, T2, R) basis */
+ Minv = Minv * transpose(mat3(T1, T2, N));
+
+ /* Apply LTC inverse matrix. */
+ corners[0] = normalize(Minv * corners[0]);
+ corners[1] = normalize(Minv * corners[1]);
+ corners[2] = normalize(Minv * corners[2]);
+ corners[3] = normalize(Minv * corners[3]);
+}
+
+/* If corners have already pass through ltc_transform_quad(), then N **MUST** be vec3(0.0, 0.0, 1.0),
+ * corresponding to the Up axis of the shading basis. */
+float ltc_evaluate_quad(vec3 corners[4], vec3 N)
+{
+ /* Approximation using a sphere of the same solid angle than the quad.
+ * Finding the clipped sphere diffuse integral is easier than clipping the quad. */
+ vec3 avg_dir;
+ avg_dir = edge_integral_vec(corners[0], corners[1]);
+ avg_dir += edge_integral_vec(corners[1], corners[2]);
+ avg_dir += edge_integral_vec(corners[2], corners[3]);
+ avg_dir += edge_integral_vec(corners[3], corners[0]);
+
+ float form_factor = length(avg_dir);
+ float avg_dir_z = dot(N, avg_dir / form_factor);
+
+#if 1 /* use tabulated horizon-clipped sphere */
+ return form_factor * diffuse_sphere_integral_lut(avg_dir_z, form_factor);
+#else /* Less accurate version, a bit cheaper. */
+ return form_factor * diffuse_sphere_integral_cheap(avg_dir_z, form_factor);
+#endif
+}
+
+/* If disk does not need to be transformed and is already front facing. */
+float ltc_evaluate_disk_simple(float disk_radius, float NL)
+{
+ float r_sqr = disk_radius * disk_radius;
+ float one_r_sqr = 1.0 + r_sqr;
+ float form_factor = r_sqr * inversesqrt(one_r_sqr * one_r_sqr);
+
+#if 1 /* use tabulated horizon-clipped sphere */
+ return form_factor * diffuse_sphere_integral_lut(NL, form_factor);
+#else /* Less accurate version, a bit cheaper. */
+ return form_factor * diffuse_sphere_integral_cheap(NL, form_factor);
+#endif
+}
+
+/* disk_points are WS vectors from the shading point to the disk "bounding domain" */
+float ltc_evaluate_disk(vec3 N, vec3 V, mat3 Minv, vec3 disk_points[3])
+{
+ /* Avoid dot(N, V) == 1 in ortho mode, leading T1 normalize to fail. */
+ V = normalize(V + 1e-8);
+
+ /* construct orthonormal basis around N */
+ vec3 T1, T2;
+ T1 = normalize(V - N * dot(V, N));
+ T2 = cross(N, T1);
+
+ /* rotate area light in (T1, T2, R) basis */
+ mat3 R = transpose(mat3(T1, T2, N));
+
+ /* Intermediate step: init ellipse. */
+ vec3 L_[3];
+ L_[0] = mul(R, disk_points[0]);
+ L_[1] = mul(R, disk_points[1]);
+ L_[2] = mul(R, disk_points[2]);
+
+ vec3 C = 0.5 * (L_[0] + L_[2]);
+ vec3 V1 = 0.5 * (L_[1] - L_[2]);
+ vec3 V2 = 0.5 * (L_[1] - L_[0]);
+
+ /* Transform ellipse by Minv. */
+ C = Minv * C;
+ V1 = Minv * V1;
+ V2 = Minv * V2;
+
+ /* Compute eigenvectors of new ellipse. */
+
+ float d11 = dot(V1, V1);
+ float d22 = dot(V2, V2);
+ float d12 = dot(V1, V2);
+ float a, b; /* Eigenvalues */
+ const float threshold = 0.0007; /* Can be adjusted. Fix artifacts. */
+ if (abs(d12) / sqrt(d11 * d22) > threshold) {
+ float tr = d11 + d22;
+ float det = -d12 * d12 + d11 * d22;
+
+ /* use sqrt matrix to solve for eigenvalues */
+ det = sqrt(det);
+ float u = 0.5 * sqrt(tr - 2.0 * det);
+ float v = 0.5 * sqrt(tr + 2.0 * det);
+ float e_max = (u + v);
+ float e_min = (u - v);
+ e_max *= e_max;
+ e_min *= e_min;
+
+ vec3 V1_, V2_;
+ if (d11 > d22) {
+ V1_ = d12 * V1 + (e_max - d11) * V2;
+ V2_ = d12 * V1 + (e_min - d11) * V2;
+ }
+ else {
+ V1_ = d12 * V2 + (e_max - d22) * V1;
+ V2_ = d12 * V2 + (e_min - d22) * V1;
+ }
+
+ a = 1.0 / e_max;
+ b = 1.0 / e_min;
+ V1 = normalize(V1_);
+ V2 = normalize(V2_);
+ }
+ else {
+ a = 1.0 / d11;
+ b = 1.0 / d22;
+ V1 *= sqrt(a);
+ V2 *= sqrt(b);
+ }
+
+ /* Now find front facing ellipse with same solid angle. */
+
+ vec3 V3 = normalize(cross(V1, V2));
+ if (dot(C, V3) < 0.0)
+ V3 *= -1.0;
+
+ float L = dot(V3, C);
+ float x0 = dot(V1, C) / L;
+ float y0 = dot(V2, C) / L;
+
+ a *= L*L;
+ b *= L*L;
+
+ float c0 = a * b;
+ float c1 = a * b * (1.0 + x0 * x0 + y0 * y0) - a - b;
+ float c2 = 1.0 - a * (1.0 + x0 * x0) - b * (1.0 + y0 * y0);
+ float c3 = 1.0;
+
+ vec3 roots = solve_cubic(vec4(c0, c1, c2, c3));
+ float e1 = roots.x;
+ float e2 = roots.y;
+ float e3 = roots.z;
+
+ vec3 avg_dir = vec3(a * x0 / (a - e2), b * y0 / (b - e2), 1.0);
+
+ mat3 rotate = mat3(V1, V2, V3);
+
+ avg_dir = rotate * avg_dir;
+ avg_dir = normalize(avg_dir);
+
+ /* L1, L2 are the extends of the front facing ellipse. */
+ float L1 = sqrt(-e2/e3);
+ float L2 = sqrt(-e2/e1);
+
+ /* Find the sphere and compute lighting. */
+ float form_factor = max(0.0, L1 * L2 * inversesqrt((1.0 + L1 * L1) * (1.0 + L2 * L2)));
+
+#if 1 /* use tabulated horizon-clipped sphere */
+ return form_factor * diffuse_sphere_integral_lut(avg_dir.z, form_factor);
+#else /* Less accurate version, a bit cheaper. */
+ return form_factor * diffuse_sphere_integral_cheap(avg_dir.z, form_factor);
+#endif
+}
+
diff --git a/source/blender/draw/engines/eevee/shaders/octahedron_lib.glsl b/source/blender/draw/engines/eevee/shaders/octahedron_lib.glsl
new file mode 100644
index 00000000000..631b325ae37
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/octahedron_lib.glsl
@@ -0,0 +1,38 @@
+
+vec2 mapping_octahedron(vec3 cubevec, vec2 texel_size)
+{
+ /* projection onto octahedron */
+ cubevec /= dot( vec3(1), abs(cubevec) );
+
+ /* out-folding of the downward faces */
+ if ( cubevec.z < 0.0 ) {
+ cubevec.xy = (1.0 - abs(cubevec.yx)) * sign(cubevec.xy);
+ }
+
+ /* mapping to [0;1]ˆ2 texture space */
+ vec2 uvs = cubevec.xy * (0.5) + 0.5;
+
+ /* edge filtering fix */
+ uvs *= 1.0 - 2.0 * texel_size;
+ uvs += texel_size;
+
+ return uvs;
+}
+
+vec4 textureLod_octahedron(sampler2DArray tex, vec4 cubevec, float lod, float lod_max)
+{
+ vec2 texelSize = 1.0 / vec2(textureSize(tex, int(lod_max)));
+
+ vec2 uvs = mapping_octahedron(cubevec.xyz, texelSize);
+
+ return textureLod(tex, vec3(uvs, cubevec.w), lod);
+}
+
+vec4 texture_octahedron(sampler2DArray tex, vec4 cubevec)
+{
+ vec2 texelSize = 1.0 / vec2(textureSize(tex, 0));
+
+ vec2 uvs = mapping_octahedron(cubevec.xyz, texelSize);
+
+ return texture(tex, vec3(uvs, cubevec.w));
+}
diff --git a/source/blender/draw/engines/eevee/shaders/prepass_frag.glsl b/source/blender/draw/engines/eevee/shaders/prepass_frag.glsl
new file mode 100644
index 00000000000..1c0e65f0613
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/prepass_frag.glsl
@@ -0,0 +1,87 @@
+
+#ifdef USE_ALPHA_HASH
+
+/* From the paper "Hashed Alpha Testing" by Chris Wyman and Morgan McGuire */
+float hash(vec2 a) {
+ return fract(1e4 * sin(17.0 * a.x + 0.1 * a.y) * (0.1 + abs(sin(13.0 * a.y + a.x))));
+}
+
+float hash3d(vec3 a) {
+ return hash(vec2(hash(a.xy), a.z));
+}
+
+uniform float hashAlphaOffset;
+
+float hashed_alpha_threshold(vec3 co)
+{
+ const float hash_scale = 1.0; /* Roughly in pixel */
+
+ /* Find the discretized derivatives of our coordinates. */
+ float max_deriv = max(length(dFdx(co)), length(dFdy(co)));
+ float pix_scale = 1.0 / (hash_scale * max_deriv);
+
+ /* Find two nearest log-discretized noise scales. */
+ float pix_scale_log = log2(pix_scale);
+ vec2 pix_scales;
+ pix_scales.x = exp2(floor(pix_scale_log));
+ pix_scales.y = exp2(ceil(pix_scale_log));
+
+ /* Compute alpha thresholds at our two noise scales. */
+ vec2 alpha;
+ alpha.x = hash3d(floor(pix_scales.x * co));
+ alpha.y = hash3d(floor(pix_scales.y * co));
+
+ /* Factor to interpolate lerp with. */
+ float fac = fract(log2(pix_scale));
+
+ /* Interpolate alpha threshold from noise at two scales. */
+ float x = mix(alpha.x, alpha.y, fac);
+
+ /* Pass into CDF to compute uniformly distrib threshold. */
+ float a = min(fac, 1.0 - fac);
+ float one_a = 1.0 - a;
+ float denom = 1.0 / (2 * a * one_a);
+ float one_x = (1 - x);
+ vec3 cases = vec3(
+ (x * x) * denom,
+ (x - 0.5 * a) / one_a,
+ 1.0 - (one_x * one_x * denom)
+ );
+
+ /* Find our final, uniformly distributed alpha threshold. */
+ float threshold = (x < one_a) ? ((x < a) ? cases.x : cases.y) : cases.z;
+
+ /* Avoids threshold == 0. */
+ threshold = clamp(threshold, 1.0e-6, 1.0);
+
+ /* Jitter the threshold for TAA accumulation. */
+ return fract(threshold + hashAlphaOffset);
+}
+
+#endif
+
+#ifdef USE_ALPHA_CLIP
+uniform float alphaThreshold;
+#endif
+
+void main()
+{
+ /* For now do nothing.
+ * In the future, output object motion blur. */
+
+#if defined(USE_ALPHA_HASH) || defined(USE_ALPHA_CLIP)
+#define NODETREE_EXEC
+
+ Closure cl = nodetree_exec();
+
+#if defined(USE_ALPHA_HASH)
+ /* Hashed Alpha Testing */
+ if (cl.opacity < hashed_alpha_threshold(worldPosition))
+ discard;
+#elif defined(USE_ALPHA_CLIP)
+ /* Alpha clip */
+ if (cl.opacity <= alphaThreshold)
+ discard;
+#endif
+#endif
+}
diff --git a/source/blender/draw/engines/eevee/shaders/prepass_vert.glsl b/source/blender/draw/engines/eevee/shaders/prepass_vert.glsl
new file mode 100644
index 00000000000..6f26a815736
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/prepass_vert.glsl
@@ -0,0 +1,18 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+uniform mat4 ModelMatrix;
+#ifdef CLIP_PLANES
+uniform vec4 ClipPlanes[1];
+#endif
+
+in vec3 pos;
+
+void main()
+{
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
+#ifdef CLIP_PLANES
+ vec4 worldPosition = (ModelMatrix * vec4(pos, 1.0));
+ gl_ClipDistance[0] = dot(worldPosition, ClipPlanes[0]);
+#endif
+ /* TODO motion vectors */
+}
diff --git a/source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl b/source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl
new file mode 100644
index 00000000000..cb75731b7da
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl
@@ -0,0 +1,234 @@
+#define MAX_STEP 256
+
+float sample_depth(vec2 uv, int index, float lod)
+{
+#ifdef PLANAR_PROBE_RAYTRACE
+ if (index > -1) {
+ return textureLod(planarDepth, vec3(uv, index), 0.0).r;
+ }
+ else {
+#endif
+ /* Correct UVs for mipmaping mis-alignment */
+ uv *= mipRatio[int(lod + 1.0)];
+ return textureLod(maxzBuffer, uv, lod).r;
+#ifdef PLANAR_PROBE_RAYTRACE
+ }
+#endif
+}
+
+vec4 sample_depth_grouped(vec4 uv1, vec4 uv2, int index, float lod)
+{
+ vec4 depths;
+#ifdef PLANAR_PROBE_RAYTRACE
+ if (index > -1) {
+ depths.x = textureLod(planarDepth, vec3(uv1.xy, index), 0.0).r;
+ depths.y = textureLod(planarDepth, vec3(uv1.zw, index), 0.0).r;
+ depths.z = textureLod(planarDepth, vec3(uv2.xy, index), 0.0).r;
+ depths.w = textureLod(planarDepth, vec3(uv2.zw, index), 0.0).r;
+ }
+ else {
+#endif
+ depths.x = textureLod(maxzBuffer, uv1.xy, lod).r;
+ depths.y = textureLod(maxzBuffer, uv1.zw, lod).r;
+ depths.z = textureLod(maxzBuffer, uv2.xy, lod).r;
+ depths.w = textureLod(maxzBuffer, uv2.zw, lod).r;
+#ifdef PLANAR_PROBE_RAYTRACE
+ }
+#endif
+ return depths;
+}
+
+float refine_isect(float prev_delta, float curr_delta)
+{
+ /**
+ * Simplification of 2D intersection :
+ * r0 = (0.0, prev_ss_ray.z);
+ * r1 = (1.0, curr_ss_ray.z);
+ * d0 = (0.0, prev_hit_depth_sample);
+ * d1 = (1.0, curr_hit_depth_sample);
+ * vec2 r = r1 - r0;
+ * vec2 d = d1 - d0;
+ * vec2 isect = ((d * cross(r1, r0)) - (r * cross(d1, d0))) / cross(r,d);
+ *
+ * We only want isect.x to know how much stride we need. So it simplifies :
+ *
+ * isect_x = (cross(r1, r0) - cross(d1, d0)) / cross(r,d);
+ * isect_x = (prev_ss_ray.z - prev_hit_depth_sample.z) / cross(r,d);
+ */
+ return saturate(prev_delta / (prev_delta - curr_delta));
+}
+
+void prepare_raycast(vec3 ray_origin, vec3 ray_end, float thickness, out vec4 ss_step, out vec4 ss_ray, out float max_time)
+{
+ /* Negate the ray direction if it goes towards the camera.
+ * This way we don't need to care if the projected point
+ * is behind the near plane. */
+ float z_sign = -sign(ray_end.z);
+ ray_end = z_sign * ray_end + ray_origin;
+
+ /* Project into screen space. */
+ vec4 ss_start, ss_end;
+ ss_start.xyz = project_point(ProjectionMatrix, ray_origin);
+ ss_end.xyz = project_point(ProjectionMatrix, ray_end);
+
+ /* We interpolate the ray Z + thickness values to check if depth is within threshold. */
+ ray_origin.z -= thickness;
+ ray_end.z -= thickness;
+ ss_start.w = project_point(ProjectionMatrix, ray_origin).z;
+ ss_end.w = project_point(ProjectionMatrix, ray_end).z;
+
+ /* XXX This is a hack a better method is welcome ! */
+ /* We take the delta between the offseted depth and the depth and substract it from the ray depth.
+ * This will change the world space thickness appearance a bit but we can have negative
+ * values without worries. We cannot do this in viewspace because of the perspective division. */
+ ss_start.w = 2.0 * ss_start.z - ss_start.w;
+ ss_end.w = 2.0 * ss_end.z - ss_end.w;
+
+ ss_step = ss_end - ss_start;
+ max_time = length(ss_step.xyz);
+ ss_step = z_sign * ss_step / length(ss_step.xyz);
+
+ /* If the line is degenerate, make it cover at least one pixel
+ * to not have to handle zero-pixel extent as a special case later */
+ ss_step.xy += vec2((dot(ss_step.xy, ss_step.xy) < 0.000001) ? 0.001 : 0.0);
+
+ /* Make ss_step cover one pixel. */
+ ss_step /= max(abs(ss_step.x), abs(ss_step.y));
+ ss_step *= ((abs(ss_step.x) > abs(ss_step.y)) ? ssrPixelSize.x : ssrPixelSize.y);
+
+ /* Clip to segment's end. */
+ max_time /= length(ss_step.xyz);
+
+ /* Clipping to frustum sides. */
+ max_time = min(max_time, line_unit_box_intersect_dist(ss_start.xyz, ss_step.xyz));
+
+ /* Convert to texture coords. Z component included
+ * since this is how it's stored in the depth buffer.
+ * 4th component how far we are on the ray */
+ ss_ray = ss_start * 0.5 + 0.5;
+ ss_step *= 0.5;
+}
+
+/* See times_and_deltas. */
+#define curr_time times_and_deltas.x
+#define prev_time times_and_deltas.y
+#define curr_delta times_and_deltas.z
+#define prev_delta times_and_deltas.w
+
+// #define GROUPED_FETCHES /* is still slower, need to see where is the bottleneck. */
+/* Return the hit position, and negate the z component (making it positive) if not hit occured. */
+/* __ray_end__ is the ray direction premultiplied by it's maximum length */
+vec3 raycast(
+ int index, vec3 ray_origin, vec3 ray_end, float thickness, float ray_jitter,
+ float trace_quality, float roughness, const bool discard_backface)
+{
+ vec4 ss_step, ss_start;
+ float max_time;
+ prepare_raycast(ray_origin, ray_end, thickness, ss_step, ss_start, max_time);
+
+ float max_trace_time = max(0.001, max_time - 0.01);
+
+#ifdef GROUPED_FETCHES
+ ray_jitter *= 0.25;
+#endif
+
+ /* x : current_time, y: previous_time, z: current_delta, w: previous_delta */
+ vec4 times_and_deltas = vec4(0.0);
+
+ float ray_time = 0.0;
+ float depth_sample = sample_depth(ss_start.xy, index, 0.0);
+ curr_delta = depth_sample - ss_start.z;
+
+ float lod_fac = saturate(fast_sqrt(roughness) * 2.0 - 0.4);
+ bool hit = false;
+ float iter;
+ for (iter = 1.0; !hit && (ray_time < max_time) && (iter < MAX_STEP); iter++) {
+ /* Minimum stride of 2 because we are using half res minmax zbuffer. */
+ float stride = max(1.0, iter * trace_quality) * 2.0;
+ float lod = log2(stride * 0.5 * trace_quality) * lod_fac;
+ ray_time += stride;
+
+ /* Save previous values. */
+ times_and_deltas.xyzw = times_and_deltas.yxwz;
+
+#ifdef GROUPED_FETCHES
+ stride *= 4.0;
+ vec4 jit_stride = mix(vec4(2.0), vec4(stride), vec4(0.0, 0.25, 0.5, 0.75) + ray_jitter);
+
+ vec4 times = min(vec4(ray_time) + jit_stride, vec4(max_trace_time));
+
+ vec4 uv1 = ss_start.xyxy + ss_step.xyxy * times.xxyy;
+ vec4 uv2 = ss_start.xyxy + ss_step.xyxy * times.zzww;
+
+ vec4 depth_samples = sample_depth_grouped(uv1, uv2, index, lod);
+
+ vec4 ray_z = ss_start.zzzz + ss_step.zzzz * times.xyzw;
+ vec4 ray_w = ss_start.wwww + ss_step.wwww * vec4(prev_time, times.xyz);
+
+ vec4 deltas = depth_samples - ray_z;
+ /* Same as component wise (curr_delta <= 0.0) && (prev_w <= depth_sample). */
+ bvec4 test = equal(step(deltas, vec4(0.0)) * step(ray_w, depth_samples), vec4(1.0));
+ hit = any(test);
+
+ if (hit) {
+ vec2 m = vec2(1.0, 0.0); /* Mask */
+
+ vec4 ret_times_and_deltas = times.wzzz * m.xxyy + deltas.wwwz * m.yyxx;
+ ret_times_and_deltas = (test.z) ? times.zyyy * m.xxyy + deltas.zzzy * m.yyxx : ret_times_and_deltas;
+ ret_times_and_deltas = (test.y) ? times.yxxx * m.xxyy + deltas.yyyx * m.yyxx : ret_times_and_deltas;
+ times_and_deltas = (test.x) ? times.xxxx * m.xyyy + deltas.xxxx * m.yyxy + times_and_deltas.yyww * m.yxyx : ret_times_and_deltas;
+
+ depth_sample = depth_samples.w;
+ depth_sample = (test.z) ? depth_samples.z : depth_sample;
+ depth_sample = (test.y) ? depth_samples.y : depth_sample;
+ depth_sample = (test.x) ? depth_samples.x : depth_sample;
+ }
+ else {
+ curr_time = times.w;
+ curr_delta = deltas.w;
+ }
+#else
+ float jit_stride = mix(2.0, stride, ray_jitter);
+
+ curr_time = min(ray_time + jit_stride, max_trace_time);
+ vec4 ss_ray = ss_start + ss_step * curr_time;
+
+ depth_sample = sample_depth(ss_ray.xy, index, lod);
+
+ float prev_w = ss_start.w + ss_step.w * prev_time;
+ curr_delta = depth_sample - ss_ray.z;
+ hit = (curr_delta <= 0.0) && (prev_w <= depth_sample);
+#endif
+ }
+
+ if (discard_backface) {
+ /* Discard backface hits */
+ hit = hit && (prev_delta > 0.0);
+ }
+
+ /* Reject hit if background. */
+ hit = hit && (depth_sample != 1.0);
+
+ curr_time = (hit) ? mix(prev_time, curr_time, refine_isect(prev_delta, curr_delta)) : curr_time;
+ ray_time = (hit) ? curr_time : ray_time;
+
+ /* Clip to frustum. */
+ ray_time = max(0.001, min(ray_time, max_time - 1.5));
+
+ vec4 ss_ray = ss_start + ss_step * ray_time;
+
+ /* Tag Z if ray failed. */
+ ss_ray.z *= (hit) ? 1.0 : -1.0;
+ return ss_ray.xyz;
+}
+
+float screen_border_mask(vec2 hit_co)
+{
+ const float margin = 0.003;
+ float atten = ssrBorderFac + margin; /* Screen percentage */
+ hit_co = smoothstep(margin, atten, hit_co) * (1 - smoothstep(1.0 - atten, 1.0 - margin, hit_co));
+
+ float screenfade = hit_co.x * hit_co.y;
+
+ return screenfade;
+}
diff --git a/source/blender/draw/engines/eevee/shaders/shadow_copy_frag.glsl b/source/blender/draw/engines/eevee/shaders/shadow_copy_frag.glsl
new file mode 100644
index 00000000000..67b0fc2bdfc
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/shadow_copy_frag.glsl
@@ -0,0 +1,210 @@
+/* Copy the depth only shadowmap into another texture while converting
+ * to linear depth (or other storage method) and doing a 3x3 box filter. */
+
+layout(std140) uniform shadow_render_block {
+ mat4 ShadowMatrix[6];
+ mat4 FaceViewMatrix[6];
+ vec4 lampPosition;
+ float cubeTexelSize;
+ float storedTexelSize;
+ float nearClip;
+ float farClip;
+ int shadowSampleCount;
+ float shadowInvSampleCount;
+};
+
+#ifdef CSM
+uniform sampler2DArray shadowTexture;
+uniform int cascadeId;
+#else
+uniform samplerCube shadowTexture;
+uniform int faceId;
+#endif
+uniform float shadowFilterSize;
+
+out vec4 FragColor;
+
+float linear_depth(float z)
+{
+ return (nearClip * farClip) / (z * (nearClip - farClip) + farClip);
+}
+
+vec4 linear_depth(vec4 z)
+{
+ return (nearClip * farClip) / (z * (nearClip - farClip) + farClip);
+}
+
+#ifdef CSM
+vec4 get_world_distance(vec4 depths, vec3 cos[4])
+{
+ /* Background case */
+ vec4 is_background = step(vec4(0.99999), depths);
+ depths *= abs(farClip - nearClip); /* Same factor as in shadow_cascade(). */
+ depths += 1e1 * is_background;
+ return depths;
+}
+
+float get_world_distance(float depth, vec3 cos)
+{
+ /* Background case */
+ float is_background = step(0.9999, depth);
+ depth *= abs(farClip - nearClip); /* Same factor as in shadow_cascade(). */
+ depth += 1e1 * is_background;
+ return depth;
+}
+#else /* CUBEMAP */
+vec4 get_world_distance(vec4 depths, vec3 cos[4])
+{
+ vec4 is_background = step(vec4(1.0), depths);
+ depths = linear_depth(depths);
+ depths += vec4(1e1) * is_background;
+ cos[0] = normalize(abs(cos[0]));
+ cos[1] = normalize(abs(cos[1]));
+ cos[2] = normalize(abs(cos[2]));
+ cos[3] = normalize(abs(cos[3]));
+ vec4 cos_vec;
+ cos_vec.x = max(cos[0].x, max(cos[0].y, cos[0].z));
+ cos_vec.y = max(cos[1].x, max(cos[1].y, cos[1].z));
+ cos_vec.z = max(cos[2].x, max(cos[2].y, cos[2].z));
+ cos_vec.w = max(cos[3].x, max(cos[3].y, cos[3].z));
+ return depths / cos_vec;
+}
+
+float get_world_distance(float depth, vec3 cos)
+{
+ float is_background = step(1.0, depth);
+ depth = linear_depth(depth);
+ depth += 1e1 * is_background;
+ cos = normalize(abs(cos));
+ float cos_vec = max(cos.x, max(cos.y, cos.z));
+ return depth / cos_vec;
+}
+#endif
+
+/* Marco Salvi's GDC 2008 presentation about shadow maps pre-filtering techniques slide 24 */
+float ln_space_prefilter(float w0, float x, float w1, float y)
+{
+ return x + log(w0 + w1 * exp(y - x));
+}
+
+#define SAMPLE_WEIGHT 0.11111
+
+#ifdef ESM
+void prefilter(vec4 depths, inout float accum)
+{
+ accum = ln_space_prefilter(1.0, accum, SAMPLE_WEIGHT, depths.x);
+ accum = ln_space_prefilter(1.0, accum, SAMPLE_WEIGHT, depths.y);
+ accum = ln_space_prefilter(1.0, accum, SAMPLE_WEIGHT, depths.z);
+ accum = ln_space_prefilter(1.0, accum, SAMPLE_WEIGHT, depths.w);
+}
+#else /* VSM */
+void prefilter(vec4 depths, inout vec2 accum)
+{
+ vec4 depths_sqr = depths * depths;
+ accum += vec2(dot(vec4(1.0), depths), dot(vec4(1.0), depths_sqr)) * SAMPLE_WEIGHT;
+}
+#endif
+
+#ifdef CSM
+vec3 get_texco(vec2 uvs, vec2 ofs)
+{
+ return vec3(uvs + ofs, float(cascadeId));
+}
+#else /* CUBEMAP */
+const vec3 minorAxisX[6] = vec3[6](
+ vec3(0.0f, 0.0f, -1.0f),
+ vec3(0.0f, 0.0f, 1.0f),
+ vec3(1.0f, 0.0f, 0.0f),
+ vec3(1.0f, 0.0f, 0.0f),
+ vec3(1.0f, 0.0f, 0.0f),
+ vec3(-1.0f, 0.0f, 0.0f)
+);
+
+const vec3 minorAxisY[6] = vec3[6](
+ vec3(0.0f, -1.0f, 0.0f),
+ vec3(0.0f, -1.0f, 0.0f),
+ vec3(0.0f, 0.0f, 1.0f),
+ vec3(0.0f, 0.0f, -1.0f),
+ vec3(0.0f, -1.0f, 0.0f),
+ vec3(0.0f, -1.0f, 0.0f)
+);
+
+const vec3 majorAxis[6] = vec3[6](
+ vec3(1.0f, 0.0f, 0.0f),
+ vec3(-1.0f, 0.0f, 0.0f),
+ vec3(0.0f, 1.0f, 0.0f),
+ vec3(0.0f, -1.0f, 0.0f),
+ vec3(0.0f, 0.0f, 1.0f),
+ vec3(0.0f, 0.0f, -1.0f)
+);
+
+vec3 get_texco(vec2 uvs, vec2 ofs)
+{
+ uvs += ofs;
+ return majorAxis[faceId] + uvs.x * minorAxisX[faceId] + uvs.y * minorAxisY[faceId];
+}
+#endif
+
+void main() {
+ /* Copy the depth only shadowmap into another texture while converting
+ * to linear depth and do a 3x3 box blur. */
+
+#ifdef CSM
+ vec2 uvs = gl_FragCoord.xy * storedTexelSize;
+#else /* CUBEMAP */
+ vec2 uvs = gl_FragCoord.xy * cubeTexelSize * 2.0 - 1.0;
+#endif
+
+ /* Center texel */
+ vec3 co = get_texco(uvs, vec2(0.0));
+ float depth = texture(shadowTexture, co).r;
+ depth = get_world_distance(depth, co);
+
+ if (shadowFilterSize == 0.0) {
+#ifdef ESM
+ FragColor = vec4(depth);
+#else /* VSM */
+ FragColor = vec2(depth, depth * depth).xyxy;
+#endif
+ return;
+ }
+
+#ifdef ESM
+ float accum = ln_space_prefilter(0.0, 0.0, SAMPLE_WEIGHT, depth);
+#else /* VSM */
+ vec2 accum = vec2(depth, depth * depth) * SAMPLE_WEIGHT;
+#endif
+
+#ifdef CSM
+ vec3 ofs = vec3(1.0, 0.0, -1.0) * shadowFilterSize;
+#else /* CUBEMAP */
+ vec3 ofs = vec3(1.0, 0.0, -1.0) * shadowFilterSize;
+#endif
+
+ vec3 cos[4];
+ cos[0] = get_texco(uvs, ofs.zz);
+ cos[1] = get_texco(uvs, ofs.yz);
+ cos[2] = get_texco(uvs, ofs.xz);
+ cos[3] = get_texco(uvs, ofs.zy);
+
+ vec4 depths;
+ depths.x = texture(shadowTexture, cos[0]).r;
+ depths.y = texture(shadowTexture, cos[1]).r;
+ depths.z = texture(shadowTexture, cos[2]).r;
+ depths.w = texture(shadowTexture, cos[3]).r;
+ depths = get_world_distance(depths, cos);
+ prefilter(depths, accum);
+
+ cos[0] = get_texco(uvs, ofs.xy);
+ cos[1] = get_texco(uvs, ofs.zx);
+ cos[2] = get_texco(uvs, ofs.yx);
+ cos[3] = get_texco(uvs, ofs.xx);
+ depths.x = texture(shadowTexture, cos[0]).r;
+ depths.y = texture(shadowTexture, cos[1]).r;
+ depths.z = texture(shadowTexture, cos[2]).r;
+ depths.w = texture(shadowTexture, cos[3]).r;
+ depths = get_world_distance(depths, cos);
+ prefilter(depths, accum);
+
+ FragColor = vec2(accum).xyxy;
+}
diff --git a/source/blender/draw/engines/eevee/shaders/shadow_frag.glsl b/source/blender/draw/engines/eevee/shaders/shadow_frag.glsl
new file mode 100644
index 00000000000..160fcee4c73
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/shadow_frag.glsl
@@ -0,0 +1,4 @@
+
+void main() {
+ /* Do nothing */
+}
diff --git a/source/blender/draw/engines/eevee/shaders/shadow_geom.glsl b/source/blender/draw/engines/eevee/shaders/shadow_geom.glsl
new file mode 100644
index 00000000000..ea51fa73a65
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/shadow_geom.glsl
@@ -0,0 +1,53 @@
+
+layout(std140) uniform shadow_render_block {
+ mat4 ShadowMatrix[6];
+ mat4 FaceViewMatrix[6];
+ vec4 lampPosition;
+ float cubeTexelSize;
+ float storedTexelSize;
+ float nearClip;
+ float farClip;
+ int shadowSampleCount;
+ float shadowInvSampleCount;
+};
+
+layout(triangles) in;
+layout(triangle_strip, max_vertices=3) out;
+
+in vec4 vPos[];
+flat in int face[];
+
+#ifdef MESH_SHADER
+in vec3 vNor[];
+#endif
+
+out vec3 worldPosition;
+#ifdef MESH_SHADER
+out vec3 viewPosition; /* Required. otherwise generate linking error. */
+out vec3 worldNormal; /* Required. otherwise generate linking error. */
+out vec3 viewNormal; /* Required. otherwise generate linking error. */
+flat out int shFace;
+#else
+int shFace;
+#endif
+
+void main() {
+ shFace = face[0];
+ gl_Layer = shFace;
+
+ for (int v = 0; v < 3; ++v) {
+ gl_Position = ShadowMatrix[shFace] * vPos[v];
+ worldPosition = vPos[v].xyz;
+#ifdef MESH_SHADER
+ worldNormal = vNor[v];
+ viewPosition = (FaceViewMatrix[shFace] * vec4(worldPosition, 1.0)).xyz;
+ viewNormal = (FaceViewMatrix[shFace] * vec4(worldNormal, 0.0)).xyz;
+#ifdef ATTRIB
+ pass_attrib(v);
+#endif
+#endif
+ EmitVertex();
+ }
+
+ EndPrimitive();
+} \ No newline at end of file
diff --git a/source/blender/draw/engines/eevee/shaders/shadow_store_frag.glsl b/source/blender/draw/engines/eevee/shaders/shadow_store_frag.glsl
new file mode 100644
index 00000000000..fcc304ca289
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/shadow_store_frag.glsl
@@ -0,0 +1,146 @@
+
+layout(std140) uniform shadow_render_block {
+ mat4 ShadowMatrix[6];
+ mat4 FaceViewMatrix[6];
+ vec4 lampPosition;
+ float cubeTexelSize;
+ float storedTexelSize;
+ float nearClip;
+ float farClip;
+ int shadowSampleCount;
+ float shadowInvSampleCount;
+};
+
+#ifdef CSM
+uniform sampler2DArray shadowTexture;
+uniform int cascadeId;
+#else
+uniform samplerCube shadowTexture;
+#endif
+uniform float shadowFilterSize;
+
+out vec4 FragColor;
+
+vec3 octahedral_to_cubemap_proj(vec2 co)
+{
+ co = co * 2.0 - 1.0;
+
+ vec2 abs_co = abs(co);
+ vec3 v = vec3(co, 1.0 - (abs_co.x + abs_co.y));
+
+ if ( abs_co.x + abs_co.y > 1.0 ) {
+ v.xy = (abs(co.yx) - 1.0) * -sign(co.xy);
+ }
+
+ return v;
+}
+
+/* Marco Salvi's GDC 2008 presentation about shadow maps pre-filtering techniques slide 24 */
+float ln_space_prefilter(float w0, float x, float w1, float y)
+{
+ return x + log(w0 + w1 * exp(y - x));
+}
+
+vec4 ln_space_prefilter(float w0, vec4 x, float w1, vec4 y)
+{
+ return x + log(w0 + w1 * exp(y - x));
+}
+
+#ifdef CSM
+vec3 get_texco(vec3 cos, vec2 ofs)
+{
+ cos.xy += ofs * shadowFilterSize;
+ return cos;
+}
+#else /* CUBEMAP */
+/* global vars */
+vec3 T = vec3(0.0);
+vec3 B = vec3(0.0);
+
+void make_orthonormal_basis(vec3 N)
+{
+ vec3 UpVector = (abs(N.z) < 0.999) ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0);
+ T = normalize(cross(UpVector, N));
+ B = cross(N, T);
+}
+
+vec3 get_texco(vec3 cos, vec2 ofs)
+{
+ return cos + ofs.x * T + ofs.y * B;
+}
+
+#endif
+
+void main() {
+ vec3 cos;
+
+ cos.xy = gl_FragCoord.xy * storedTexelSize;
+
+#ifdef CSM
+ cos.z = float(cascadeId);
+#else /* CUBEMAP */
+ /* add a 2 pixel border to ensure filtering is correct */
+ cos.xy *= 1.0 + storedTexelSize * 2.0;
+ cos.xy -= storedTexelSize;
+
+ float pattern = 1.0;
+
+ /* edge mirroring : only mirror if directly adjacent
+ * (not diagonally adjacent) */
+ vec2 m = abs(cos.xy - 0.5) + 0.5;
+ vec2 f = floor(m);
+ if (f.x - f.y != 0.0) {
+ cos.xy = 1.0 - cos.xy;
+ }
+
+ /* clamp to [0-1] */
+ cos.xy = fract(cos.xy);
+
+ /* get cubemap vector */
+ cos = normalize(octahedral_to_cubemap_proj(cos.xy));
+ make_orthonormal_basis(cos);
+
+ T *= shadowFilterSize;
+ B *= shadowFilterSize;
+#endif
+
+#ifdef ESM
+ vec4 accum = vec4(0.0);
+
+ /* disc blur in log space. */
+ vec4 depths;
+ depths.x = texture(shadowTexture, get_texco(cos, concentric[0])).r;
+ depths.y = texture(shadowTexture, get_texco(cos, concentric[1])).r;
+ depths.z = texture(shadowTexture, get_texco(cos, concentric[2])).r;
+ depths.w = texture(shadowTexture, get_texco(cos, concentric[3])).r;
+ accum = ln_space_prefilter(0.0, accum, shadowInvSampleCount, depths);
+
+ for (int i = 4; i < shadowSampleCount && i < CONCENTRIC_SAMPLE_NUM; i += 4) {
+ depths.x = texture(shadowTexture, get_texco(cos, concentric[i+0])).r;
+ depths.y = texture(shadowTexture, get_texco(cos, concentric[i+1])).r;
+ depths.z = texture(shadowTexture, get_texco(cos, concentric[i+2])).r;
+ depths.w = texture(shadowTexture, get_texco(cos, concentric[i+3])).r;
+ accum = ln_space_prefilter(1.0, accum, shadowInvSampleCount, depths);
+ }
+
+ accum.x = ln_space_prefilter(1.0, accum.x, 1.0, accum.y);
+ accum.x = ln_space_prefilter(1.0, accum.x, 1.0, accum.z);
+ accum.x = ln_space_prefilter(1.0, accum.x, 1.0, accum.w);
+ FragColor = accum.xxxx;
+
+#else /* VSM */
+ vec2 accum = vec2(0.0);
+
+ /* disc blur. */
+ vec4 depths1, depths2;
+ for (int i = 0; i < shadowSampleCount && i < CONCENTRIC_SAMPLE_NUM; i += 4) {
+ depths1.xy = texture(shadowTexture, get_texco(cos, concentric[i+0])).rg;
+ depths1.zw = texture(shadowTexture, get_texco(cos, concentric[i+1])).rg;
+ depths2.xy = texture(shadowTexture, get_texco(cos, concentric[i+2])).rg;
+ depths2.zw = texture(shadowTexture, get_texco(cos, concentric[i+3])).rg;
+ accum += depths1.xy + depths1.zw + depths2.xy + depths2.zw;
+ }
+
+ FragColor = accum.xyxy * shadowInvSampleCount;
+#endif
+} \ No newline at end of file
diff --git a/source/blender/draw/engines/eevee/shaders/shadow_vert.glsl b/source/blender/draw/engines/eevee/shaders/shadow_vert.glsl
new file mode 100644
index 00000000000..777902ccba8
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/shadow_vert.glsl
@@ -0,0 +1,29 @@
+
+uniform mat4 ShadowModelMatrix;
+#ifdef MESH_SHADER
+uniform mat3 WorldNormalMatrix;
+#endif
+
+in vec3 pos;
+#ifdef MESH_SHADER
+in vec3 nor;
+#endif
+
+out vec4 vPos;
+#ifdef MESH_SHADER
+out vec3 vNor;
+#endif
+
+flat out int face;
+
+void main() {
+ vPos = ShadowModelMatrix * vec4(pos, 1.0);
+ face = gl_InstanceID;
+
+#ifdef MESH_SHADER
+ vNor = WorldNormalMatrix * nor;
+#ifdef ATTRIB
+ pass_attrib(pos);
+#endif
+#endif
+}
diff --git a/source/blender/draw/engines/eevee/shaders/ssr_lib.glsl b/source/blender/draw/engines/eevee/shaders/ssr_lib.glsl
new file mode 100644
index 00000000000..6c7bfeb6b82
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/ssr_lib.glsl
@@ -0,0 +1,72 @@
+/* ------------ Refraction ------------ */
+
+#define BTDF_BIAS 0.85
+
+vec4 screen_space_refraction(vec3 viewPosition, vec3 N, vec3 V, float ior, float roughnessSquared, vec4 rand)
+{
+ float a2 = max(5e-6, roughnessSquared * roughnessSquared);
+
+ /* Importance sampling bias */
+ rand.x = mix(rand.x, 0.0, BTDF_BIAS);
+
+ vec3 T, B;
+ float NH;
+ make_orthonormal_basis(N, T, B);
+ vec3 H = sample_ggx(rand.xzw, a2, N, T, B, NH); /* Microfacet normal */
+ float pdf = pdf_ggx_reflect(NH, a2);
+
+ /* If ray is bad (i.e. going below the plane) regenerate. */
+ if (F_eta(ior, dot(H, V)) < 1.0) {
+ H = sample_ggx(rand.xzw * vec3(1.0, -1.0, -1.0), a2, N, T, B, NH); /* Microfacet normal */
+ pdf = pdf_ggx_reflect(NH, a2);
+ }
+
+ vec3 vV = viewCameraVec;
+ float eta = 1.0/ior;
+ if (dot(H, V) < 0.0) {
+ H = -H;
+ eta = ior;
+ }
+
+ vec3 R = refract(-V, H, 1.0 / ior);
+
+ R = transform_direction(ViewMatrix, R);
+
+ vec3 hit_pos = raycast(-1, viewPosition, R * 1e16, ssrThickness, rand.y, ssrQuality, roughnessSquared, false);
+
+ if ((hit_pos.z > 0.0) && (F_eta(ior, dot(H, V)) < 1.0)) {
+ hit_pos = get_view_space_from_depth(hit_pos.xy, hit_pos.z);
+ float hit_dist = distance(hit_pos, viewPosition);
+
+ float cone_cos = cone_cosine(roughnessSquared);
+ float cone_tan = sqrt(1 - cone_cos * cone_cos) / cone_cos;
+
+ /* Empirical fit for refraction. */
+ /* TODO find a better fit or precompute inside the LUT. */
+ cone_tan *= 0.5 * fast_sqrt(f0_from_ior((ior < 1.0) ? 1.0 / ior : ior));
+
+ float cone_footprint = hit_dist * cone_tan;
+
+ /* find the offset in screen space by multiplying a point
+ * in camera space at the depth of the point by the projection matrix. */
+ float homcoord = ProjectionMatrix[2][3] * hit_pos.z + ProjectionMatrix[3][3];
+ /* UV space footprint */
+ cone_footprint = BTDF_BIAS * 0.5 * max(ProjectionMatrix[0][0], ProjectionMatrix[1][1]) * cone_footprint / homcoord;
+
+ vec2 hit_uvs = project_point(ProjectionMatrix, hit_pos).xy * 0.5 + 0.5;
+
+ /* Texel footprint */
+ vec2 texture_size = vec2(textureSize(colorBuffer, 0).xy);
+ float mip = clamp(log2(cone_footprint * max(texture_size.x, texture_size.y)), 0.0, 9.0);
+
+ /* Correct UVs for mipmaping mis-alignment */
+ hit_uvs *= mip_ratio_interp(mip);
+
+ vec3 spec = textureLod(colorBuffer, hit_uvs, mip).xyz;
+ float mask = screen_border_mask(hit_uvs);
+
+ return vec4(spec, mask);
+ }
+
+ return vec4(0.0);
+}
diff --git a/source/blender/draw/engines/eevee/shaders/update_noise_frag.glsl b/source/blender/draw/engines/eevee/shaders/update_noise_frag.glsl
new file mode 100644
index 00000000000..13ffe02eb0d
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/update_noise_frag.glsl
@@ -0,0 +1,18 @@
+
+uniform sampler2D blueNoise;
+uniform vec3 offsets;
+
+out vec4 FragColor;
+
+#define M_2PI 6.28318530717958647692
+
+void main(void)
+{
+ vec2 blue_noise = texelFetch(blueNoise, ivec2(gl_FragCoord.xy), 0).xy;
+
+ float noise = fract(blue_noise.y + offsets.z);
+ FragColor.x = fract(blue_noise.x + offsets.x);
+ FragColor.y = fract(blue_noise.y + offsets.y);
+ FragColor.z = cos(noise * M_2PI);
+ FragColor.w = sin(noise * M_2PI);
+}
diff --git a/source/blender/draw/engines/eevee/shaders/volumetric_frag.glsl b/source/blender/draw/engines/eevee/shaders/volumetric_frag.glsl
new file mode 100644
index 00000000000..3a293647f84
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/volumetric_frag.glsl
@@ -0,0 +1,63 @@
+
+/* Based on Frosbite Unified Volumetric.
+ * https://www.ea.com/frostbite/news/physically-based-unified-volumetric-rendering-in-frostbite */
+
+#define NODETREE_EXEC
+
+#ifdef MESH_SHADER
+uniform mat4 volumeObjectMatrix;
+uniform vec3 volumeOrcoLoc;
+uniform vec3 volumeOrcoSize;
+#endif
+
+flat in int slice;
+
+/* Warning: theses are not attributes, theses are global vars. */
+vec3 worldPosition = vec3(0.0);
+vec3 viewPosition = vec3(0.0);
+vec3 viewNormal = vec3(0.0);
+#ifdef MESH_SHADER
+vec3 volumeObjectLocalCoord = vec3(0.0);
+#endif
+
+layout(location = 0) out vec4 volumeScattering;
+layout(location = 1) out vec4 volumeExtinction;
+layout(location = 2) out vec4 volumeEmissive;
+layout(location = 3) out vec4 volumePhase;
+
+/* Store volumetric properties into the froxel textures. */
+
+void main()
+{
+ ivec3 volume_cell = ivec3(gl_FragCoord.xy, slice);
+ vec3 ndc_cell = volume_to_ndc((vec3(volume_cell) + volJitter.xyz) * volInvTexSize.xyz);
+
+ viewPosition = get_view_space_from_depth(ndc_cell.xy, ndc_cell.z);
+ worldPosition = transform_point(ViewMatrixInverse, viewPosition);
+#ifdef MESH_SHADER
+ volumeObjectLocalCoord = transform_point(volumeObjectMatrix, worldPosition);
+ volumeObjectLocalCoord = (volumeObjectLocalCoord - volumeOrcoLoc + volumeOrcoSize) / (volumeOrcoSize * 2.0);
+
+ if (any(lessThan(volumeObjectLocalCoord, vec3(0.0))) ||
+ any(greaterThan(volumeObjectLocalCoord, vec3(1.0))))
+ discard;
+#endif
+
+#ifdef CLEAR
+ Closure cl = CLOSURE_DEFAULT;
+#else
+ Closure cl = nodetree_exec();
+#endif
+
+ volumeScattering = vec4(cl.scatter, 1.0);
+ volumeExtinction = vec4(max(vec3(1e-4), cl.absorption + cl.scatter), 1.0);
+ volumeEmissive = vec4(cl.emission, 1.0);
+
+ /* Do not add phase weight if no scattering. */
+ if (all(equal(cl.scatter, vec3(0.0)))) {
+ volumePhase = vec4(0.0);
+ }
+ else {
+ volumePhase = vec4(cl.anisotropy, vec3(1.0));
+ }
+}
diff --git a/source/blender/draw/engines/eevee/shaders/volumetric_geom.glsl b/source/blender/draw/engines/eevee/shaders/volumetric_geom.glsl
new file mode 100644
index 00000000000..208e8165689
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/volumetric_geom.glsl
@@ -0,0 +1,52 @@
+
+#ifdef MESH_SHADER
+/* TODO tight slices */
+layout(triangles) in;
+layout(triangle_strip, max_vertices=3) out;
+#else /* World */
+layout(triangles) in;
+layout(triangle_strip, max_vertices=3) out;
+#endif
+
+in vec4 vPos[];
+
+flat out int slice;
+
+#ifdef MESH_SHADER
+/* TODO tight slices */
+void main() {
+ gl_Layer = slice = int(vPos[0].z);
+
+ gl_Position = vPos[0].xyww;
+ EmitVertex();
+
+ gl_Position = vPos[1].xyww;
+ EmitVertex();
+
+ gl_Position = vPos[2].xyww;
+ EmitVertex();
+
+ EndPrimitive();
+}
+
+#else /* World */
+
+/* This is just a pass-through geometry shader that send the geometry
+ * to the layer corresponding to it's depth. */
+
+void main() {
+ gl_Layer = slice = int(vPos[0].z);
+
+ gl_Position = vPos[0].xyww;
+ EmitVertex();
+
+ gl_Position = vPos[1].xyww;
+ EmitVertex();
+
+ gl_Position = vPos[2].xyww;
+ EmitVertex();
+
+ EndPrimitive();
+}
+
+#endif
diff --git a/source/blender/draw/engines/eevee/shaders/volumetric_integration_frag.glsl b/source/blender/draw/engines/eevee/shaders/volumetric_integration_frag.glsl
new file mode 100644
index 00000000000..15e9696a4c5
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/volumetric_integration_frag.glsl
@@ -0,0 +1,63 @@
+
+/* Based on Frosbite Unified Volumetric.
+ * https://www.ea.com/frostbite/news/physically-based-unified-volumetric-rendering-in-frostbite */
+
+/* Step 3 : Integrate for each froxel the final amount of light
+ * scattered back to the viewer and the amout of transmittance. */
+
+uniform sampler3D volumeScattering; /* Result of the scatter step */
+uniform sampler3D volumeExtinction;
+
+flat in int slice;
+
+layout(location = 0) out vec4 finalScattering;
+layout(location = 1) out vec4 finalTransmittance;
+
+void main()
+{
+ /* Start with full transmittance and no scattered light. */
+ finalScattering = vec4(0.0);
+ finalTransmittance = vec4(1.0);
+
+ vec3 tex_size = vec3(textureSize(volumeScattering, 0).xyz);
+
+ /* Compute view ray. */
+ vec2 uvs = gl_FragCoord.xy / tex_size.xy;
+ vec3 ndc_cell = volume_to_ndc(vec3(uvs, 1e-5));
+ vec3 view_cell = get_view_space_from_depth(ndc_cell.xy, ndc_cell.z);
+
+ /* Ortho */
+ float prev_ray_len = view_cell.z;
+ float orig_ray_len = 1.0;
+
+ /* Persp */
+ if (ProjectionMatrix[3][3] == 0.0) {
+ prev_ray_len = length(view_cell);
+ orig_ray_len = prev_ray_len / view_cell.z;
+ }
+
+ /* Without compute shader and arbitrary write we need to
+ * accumulate from the beginning of the ray for each cell. */
+ float integration_end = float(slice);
+ for (int i = 0; i < slice; ++i) {
+ ivec3 volume_cell = ivec3(gl_FragCoord.xy, i);
+
+ vec4 Lscat = texelFetch(volumeScattering, volume_cell, 0);
+ vec4 s_extinction = texelFetch(volumeExtinction, volume_cell, 0);
+
+ float cell_depth = volume_z_to_view_z((float(i) + 1.0) / tex_size.z);
+ float ray_len = orig_ray_len * cell_depth;
+
+ /* Evaluate Scattering */
+ float s_len = abs(ray_len - prev_ray_len);
+ prev_ray_len = ray_len;
+ vec4 Tr = exp(-s_extinction * s_len);
+
+ /* integrate along the current step segment */
+ Lscat = (Lscat - Lscat * Tr) / s_extinction;
+ /* accumulate and also take into account the transmittance from previous steps */
+ finalScattering += finalTransmittance * Lscat;
+
+ finalTransmittance *= Tr;
+ }
+} \ No newline at end of file
diff --git a/source/blender/draw/engines/eevee/shaders/volumetric_lib.glsl b/source/blender/draw/engines/eevee/shaders/volumetric_lib.glsl
new file mode 100644
index 00000000000..1a8167c2830
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/volumetric_lib.glsl
@@ -0,0 +1,150 @@
+
+/* Based on Frosbite Unified Volumetric.
+ * https://www.ea.com/frostbite/news/physically-based-unified-volumetric-rendering-in-frostbite */
+
+/* Volume slice to view space depth. */
+float volume_z_to_view_z(float z)
+{
+ if (ProjectionMatrix[3][3] == 0.0) {
+ /* Exponential distribution */
+ return (exp2(z / volDepthParameters.z) - volDepthParameters.x) / volDepthParameters.y;
+ }
+ else {
+ /* Linear distribution */
+ return mix(volDepthParameters.x, volDepthParameters.y, z);
+ }
+}
+
+float view_z_to_volume_z(float depth)
+{
+ if (ProjectionMatrix[3][3] == 0.0) {
+ /* Exponential distribution */
+ return volDepthParameters.z * log2(depth * volDepthParameters.y + volDepthParameters.x);
+ }
+ else {
+ /* Linear distribution */
+ return (depth - volDepthParameters.x) * volDepthParameters.z;
+ }
+}
+
+/* Volume texture normalized coordinates to NDC (special range [0, 1]). */
+vec3 volume_to_ndc(vec3 cos)
+{
+ cos.z = volume_z_to_view_z(cos.z);
+ cos.z = get_depth_from_view_z(cos.z);
+ cos.xy /= volCoordScale.xy;
+ return cos;
+}
+
+vec3 ndc_to_volume(vec3 cos)
+{
+ cos.z = get_view_z_from_depth(cos.z);
+ cos.z = view_z_to_volume_z(cos.z);
+ cos.xy *= volCoordScale.xy;
+ return cos;
+}
+
+float phase_function_isotropic()
+{
+ return 1.0 / (4.0 * M_PI);
+}
+
+float phase_function(vec3 v, vec3 l, float g)
+{
+ /* Henyey-Greenstein */
+ float cos_theta = dot(v, l);
+ g = clamp(g, -1.0 + 1e-3, 1.0 - 1e-3);
+ float sqr_g = g * g;
+ return (1- sqr_g) / max(1e-8, 4.0 * M_PI * pow(1 + sqr_g - 2 * g * cos_theta, 3.0 / 2.0));
+}
+
+#ifdef LAMPS_LIB
+vec3 light_volume(LightData ld, vec4 l_vector)
+{
+ float power;
+ /* TODO : Area lighting ? */
+ /* XXX : Removing Area Power. */
+ /* TODO : put this out of the shader. */
+ /* See eevee_light_setup(). */
+ if (ld.l_type == AREA) {
+ power = (ld.l_sizex * ld.l_sizey * 4.0 * M_PI) * (1.0 / 80.0);
+ power *= 20.0 * max(0.0, dot(-ld.l_forward, l_vector.xyz / l_vector.w)); /* XXX ad hoc, empirical */
+ }
+ else if (ld.l_type == SUN) {
+ power = (4.0f * ld.l_radius * ld.l_radius * M_2PI) * (1.0 / 12.5); /* Removing area light power*/
+ power *= M_2PI * 0.78; /* Matching cycles with point light. */
+ }
+ else {
+ power = (4.0 * ld.l_radius * ld.l_radius) * (1.0 /10.0);
+ }
+
+ /* OPTI: find a better way than calculating this on the fly */
+ float lum = dot(ld.l_color, vec3(0.3, 0.6, 0.1)); /* luminance approx. */
+ vec3 tint = (lum > 0.0) ? ld.l_color / lum : vec3(1.0); /* normalize lum. to isolate hue+sat */
+
+ power /= (l_vector.w * l_vector.w);
+
+ lum = min(lum * power, volLightClamp);
+
+ return tint * lum;
+}
+
+#define VOLUMETRIC_SHADOW_MAX_STEP 32.0
+
+vec3 participating_media_extinction(vec3 wpos, sampler3D volume_extinction)
+{
+ /* Waiting for proper volume shadowmaps and out of frustum shadow map. */
+ vec3 ndc = project_point(ViewProjectionMatrix, wpos);
+ vec3 volume_co = ndc_to_volume(ndc * 0.5 + 0.5);
+
+ /* Let the texture be clamped to edge. This reduce visual glitches. */
+ return texture(volume_extinction, volume_co).rgb;
+}
+
+vec3 light_volume_shadow(LightData ld, vec3 ray_wpos, vec4 l_vector, sampler3D volume_extinction)
+{
+#if defined(VOLUME_SHADOW)
+ /* Heterogeneous volume shadows */
+ float dd = l_vector.w / volShadowSteps;
+ vec3 L = l_vector.xyz * l_vector.w;
+ vec3 shadow = vec3(1.0);
+ for (float s = 0.5; s < VOLUMETRIC_SHADOW_MAX_STEP && s < (volShadowSteps - 0.1); s += 1.0) {
+ vec3 pos = ray_wpos + L * (s / volShadowSteps);
+ vec3 s_extinction = participating_media_extinction(pos, volume_extinction);
+ shadow *= exp(-s_extinction * dd);
+ }
+ return shadow;
+#else
+ return vec3(1.0);
+#endif /* VOLUME_SHADOW */
+}
+#endif
+
+#ifdef IRRADIANCE_LIB
+vec3 irradiance_volumetric(vec3 wpos)
+{
+#ifdef IRRADIANCE_HL2
+ IrradianceData ir_data = load_irradiance_cell(0, vec3(1.0));
+ vec3 irradiance = ir_data.cubesides[0] + ir_data.cubesides[1] + ir_data.cubesides[2];
+ ir_data = load_irradiance_cell(0, vec3(-1.0));
+ irradiance += ir_data.cubesides[0] + ir_data.cubesides[1] + ir_data.cubesides[2];
+ irradiance *= 0.16666666; /* 1/6 */
+ return irradiance;
+#else
+ return vec3(0.0);
+#endif
+}
+#endif
+
+uniform sampler3D inScattering;
+uniform sampler3D inTransmittance;
+
+vec4 volumetric_resolve(vec4 scene_color, vec2 frag_uvs, float frag_depth)
+{
+ vec3 volume_cos = ndc_to_volume(vec3(frag_uvs, frag_depth));
+
+ vec3 scattering = texture(inScattering, volume_cos).rgb;
+ vec3 transmittance = texture(inTransmittance, volume_cos).rgb;
+
+ return vec4(scene_color.rgb * transmittance + scattering, scene_color.a);
+}
diff --git a/source/blender/draw/engines/eevee/shaders/volumetric_resolve_frag.glsl b/source/blender/draw/engines/eevee/shaders/volumetric_resolve_frag.glsl
new file mode 100644
index 00000000000..0115b2cb99e
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/volumetric_resolve_frag.glsl
@@ -0,0 +1,21 @@
+
+/* Based on Frosbite Unified Volumetric.
+ * https://www.ea.com/frostbite/news/physically-based-unified-volumetric-rendering-in-frostbite */
+
+/* Step 4 : Apply final integration on top of the scene color.
+ * Note that we do the blending ourself instead of relying
+ * on hardware blending which would require 2 pass. */
+
+uniform sampler2D inSceneColor;
+uniform sampler2D inSceneDepth;
+
+out vec4 FragColor;
+
+void main()
+{
+ vec2 uvs = gl_FragCoord.xy / vec2(textureSize(inSceneDepth, 0));
+ vec4 scene_color = texture(inSceneColor, uvs);
+ float scene_depth = texture(inSceneDepth, uvs).r;
+
+ FragColor = volumetric_resolve(scene_color, uvs, scene_depth);
+}
diff --git a/source/blender/draw/engines/eevee/shaders/volumetric_scatter_frag.glsl b/source/blender/draw/engines/eevee/shaders/volumetric_scatter_frag.glsl
new file mode 100644
index 00000000000..fcbb6661b14
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/volumetric_scatter_frag.glsl
@@ -0,0 +1,75 @@
+
+/* Based on Frosbite Unified Volumetric.
+ * https://www.ea.com/frostbite/news/physically-based-unified-volumetric-rendering-in-frostbite */
+
+/* Step 2 : Evaluate all light scattering for each froxels.
+ * Also do the temporal reprojection to fight aliasing artifacts. */
+
+uniform sampler3D volumeScattering;
+uniform sampler3D volumeExtinction;
+uniform sampler3D volumeEmission;
+uniform sampler3D volumePhase;
+
+uniform sampler3D historyScattering;
+uniform sampler3D historyTransmittance;
+
+flat in int slice;
+
+layout(location = 0) out vec4 outScattering;
+layout(location = 1) out vec4 outTransmittance;
+
+void main()
+{
+ ivec3 volume_cell = ivec3(gl_FragCoord.xy, slice);
+
+ /* Emission */
+ outScattering = texelFetch(volumeEmission, volume_cell, 0);
+ outTransmittance = texelFetch(volumeExtinction, volume_cell, 0);
+ vec3 s_scattering = texelFetch(volumeScattering, volume_cell, 0).rgb;
+ vec3 volume_ndc = volume_to_ndc((vec3(volume_cell) + volJitter.xyz) * volInvTexSize.xyz);
+ vec3 worldPosition = get_world_space_from_depth(volume_ndc.xy, volume_ndc.z);
+ vec3 wdir = cameraVec;
+
+ vec2 phase = texelFetch(volumePhase, volume_cell, 0).rg;
+ float s_anisotropy = phase.x / max(1.0, phase.y);
+
+ /* Environment : Average color. */
+ outScattering.rgb += irradiance_volumetric(worldPosition) * s_scattering * phase_function_isotropic();
+
+#ifdef VOLUME_LIGHTING /* Lights */
+ for (int i = 0; i < MAX_LIGHT && i < laNumLight; ++i) {
+
+ LightData ld = lights_data[i];
+
+ vec4 l_vector;
+ l_vector.xyz = (ld.l_type == SUN) ? -ld.l_forward : ld.l_position - worldPosition;
+ l_vector.w = length(l_vector.xyz);
+
+ float Vis = light_visibility(ld, worldPosition, l_vector);
+
+ vec3 Li = light_volume(ld, l_vector) * light_volume_shadow(ld, worldPosition, l_vector, volumeExtinction);
+
+ outScattering.rgb += Li * Vis * s_scattering * phase_function(-wdir, l_vector.xyz / l_vector.w, s_anisotropy);
+ }
+#endif
+
+ /* Temporal supersampling */
+ /* Note : this uses the cell non-jittered position (texel center). */
+ vec3 curr_ndc = volume_to_ndc(vec3(gl_FragCoord.xy, float(slice) + 0.5) * volInvTexSize.xyz);
+ vec3 wpos = get_world_space_from_depth(curr_ndc.xy, curr_ndc.z);
+ vec3 prev_ndc = project_point(pastViewProjectionMatrix, wpos);
+ vec3 prev_volume = ndc_to_volume(prev_ndc * 0.5 + 0.5);
+
+ if ((volHistoryAlpha > 0.0) && all(greaterThan(prev_volume, vec3(0.0))) && all(lessThan(prev_volume, vec3(1.0)))) {
+ vec4 h_Scattering = texture(historyScattering, prev_volume);
+ vec4 h_Transmittance = texture(historyTransmittance, prev_volume);
+ outScattering = mix(outScattering, h_Scattering, volHistoryAlpha);
+ outTransmittance = mix(outTransmittance, h_Transmittance, volHistoryAlpha);
+ }
+
+ /* Catch NaNs */
+ if (any(isnan(outScattering)) || any(isnan(outTransmittance))) {
+ outScattering = vec4(0.0);
+ outTransmittance = vec4(1.0);
+ }
+}
diff --git a/source/blender/draw/engines/eevee/shaders/volumetric_vert.glsl b/source/blender/draw/engines/eevee/shaders/volumetric_vert.glsl
new file mode 100644
index 00000000000..a99acd41fbd
--- /dev/null
+++ b/source/blender/draw/engines/eevee/shaders/volumetric_vert.glsl
@@ -0,0 +1,27 @@
+
+out vec4 vPos;
+
+void main()
+{
+ /* Generate Triangle : less memory fetches from a VBO */
+ int v_id = gl_VertexID % 3; /* Vertex Id */
+ int t_id = gl_VertexID / 3; /* Triangle Id */
+
+ /* Crappy diagram
+ * ex 1
+ * | \
+ * | \
+ * 1 | \
+ * | \
+ * | \
+ * 0 | \
+ * | \
+ * | \
+ * -1 0 --------------- 2
+ * -1 0 1 ex
+ **/
+ vPos.x = float(v_id / 2) * 4.0 - 1.0; /* int divisor round down */
+ vPos.y = float(v_id % 2) * 4.0 - 1.0;
+ vPos.z = float(t_id);
+ vPos.w = 1.0;
+}
diff --git a/source/blender/draw/engines/external/external_engine.c b/source/blender/draw/engines/external/external_engine.c
new file mode 100644
index 00000000000..ec0141953fe
--- /dev/null
+++ b/source/blender/draw/engines/external/external_engine.c
@@ -0,0 +1,234 @@
+/*
+ * Copyright 2017, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file external_engine.c
+ * \ingroup draw_engine
+ *
+ * Base engine for external render engines.
+ * We use it for depth and non-mesh objects.
+ */
+
+#include "DRW_render.h"
+
+#include "DNA_screen_types.h"
+#include "DNA_view3d_types.h"
+
+#include "BKE_icons.h"
+#include "BKE_idprop.h"
+#include "BKE_main.h"
+
+#include "ED_view3d.h"
+#include "ED_screen.h"
+
+#include "GPU_glew.h"
+#include "GPU_matrix.h"
+#include "GPU_shader.h"
+#include "GPU_viewport.h"
+
+#include "external_engine.h"
+/* Shaders */
+
+#define EXTERNAL_ENGINE "BLENDER_EXTERNAL"
+
+/* *********** LISTS *********** */
+
+/* GPUViewport.storage
+ * Is freed everytime the viewport engine changes */
+typedef struct EXTERNAL_Storage {
+ int dummy;
+} EXTERNAL_Storage;
+
+typedef struct EXTERNAL_StorageList {
+ struct EXTERNAL_Storage *storage;
+ struct EXTERNAL_PrivateData *g_data;
+} EXTERNAL_StorageList;
+
+typedef struct EXTERNAL_FramebufferList {
+ struct GPUFrameBuffer *default_fb;
+} EXTERNAL_FramebufferList;
+
+typedef struct EXTERNAL_TextureList {
+ /* default */
+ struct GPUTexture *depth;
+} EXTERNAL_TextureList;
+
+typedef struct EXTERNAL_PassList {
+ struct DRWPass *depth_pass;
+} EXTERNAL_PassList;
+
+typedef struct EXTERNAL_Data {
+ void *engine_type;
+ EXTERNAL_FramebufferList *fbl;
+ EXTERNAL_TextureList *txl;
+ EXTERNAL_PassList *psl;
+ EXTERNAL_StorageList *stl;
+ char info[GPU_INFO_SIZE];
+} EXTERNAL_Data;
+
+/* *********** STATIC *********** */
+
+static struct {
+ /* Depth Pre Pass */
+ struct GPUShader *depth_sh;
+} e_data = {NULL}; /* Engine data */
+
+typedef struct EXTERNAL_PrivateData {
+ DRWShadingGroup *depth_shgrp;
+} EXTERNAL_PrivateData; /* Transient data */
+
+/* Functions */
+
+static void external_engine_init(void *UNUSED(vedata))
+{
+ /* Depth prepass */
+ if (!e_data.depth_sh) {
+ e_data.depth_sh = DRW_shader_create_3D_depth_only();
+ }
+}
+
+static void external_cache_init(void *vedata)
+{
+ EXTERNAL_PassList *psl = ((EXTERNAL_Data *)vedata)->psl;
+ EXTERNAL_StorageList *stl = ((EXTERNAL_Data *)vedata)->stl;
+
+ if (!stl->g_data) {
+ /* Alloc transient pointers */
+ stl->g_data = MEM_mallocN(sizeof(*stl->g_data), __func__);
+ }
+
+ /* Depth Pass */
+ {
+ psl->depth_pass = DRW_pass_create("Depth Pass", DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS);
+ stl->g_data->depth_shgrp = DRW_shgroup_create(e_data.depth_sh, psl->depth_pass);
+ }
+}
+
+static void external_cache_populate(void *vedata, Object *ob)
+{
+ EXTERNAL_StorageList *stl = ((EXTERNAL_Data *)vedata)->stl;
+
+ if (!DRW_object_is_renderable(ob))
+ return;
+
+ struct Gwn_Batch *geom = DRW_cache_object_surface_get(ob);
+ if (geom) {
+ /* Depth Prepass */
+ DRW_shgroup_call_add(stl->g_data->depth_shgrp, geom, ob->obmat);
+ }
+}
+
+static void external_cache_finish(void *UNUSED(vedata))
+{
+}
+
+static void external_draw_scene_do(void *vedata)
+{
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ Scene *scene = draw_ctx->scene;
+ RegionView3D *rv3d = draw_ctx->rv3d;
+ ARegion *ar = draw_ctx->ar;
+ RenderEngineType *type;
+
+ DRW_state_reset_ex(DRW_STATE_DEFAULT & ~DRW_STATE_DEPTH_LESS);
+
+ /* Create render engine. */
+ if (!rv3d->render_engine) {
+ RenderEngineType *engine_type = draw_ctx->engine_type;
+
+ if (!(engine_type->view_update && engine_type->render_to_view)) {
+ return;
+ }
+
+ RenderEngine *engine = RE_engine_create_ex(engine_type, true);
+ engine->tile_x = scene->r.tilex;
+ engine->tile_y = scene->r.tiley;
+ engine_type->view_update(engine, draw_ctx->evil_C);
+ rv3d->render_engine = engine;
+ }
+
+ /* Rendered draw. */
+ gpuPushProjectionMatrix();
+ ED_region_pixelspace(ar);
+
+ /* Render result draw. */
+ type = rv3d->render_engine->type;
+ type->render_to_view(rv3d->render_engine, draw_ctx->evil_C);
+
+ gpuPopProjectionMatrix();
+
+ /* Set render info. */
+ EXTERNAL_Data *data = vedata;
+ if (rv3d->render_engine->text[0] != '\0') {
+ BLI_strncpy(data->info, rv3d->render_engine->text, sizeof(data->info));
+ }
+ else {
+ data->info[0] = '\0';
+ }
+}
+
+static void external_draw_scene(void *vedata)
+{
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ EXTERNAL_PassList *psl = ((EXTERNAL_Data *)vedata)->psl;
+
+ /* Will be NULL during OpenGL render.
+ * OpenGL render is used for quick preview (thumbnails or sequencer preview)
+ * where using the rendering engine to preview doesn't make so much sense. */
+ if (draw_ctx->evil_C) {
+ external_draw_scene_do(vedata);
+ }
+ DRW_draw_pass(psl->depth_pass);
+}
+
+static void external_engine_free(void)
+{
+ /* All shaders are builtin. */
+}
+
+static const DrawEngineDataSize external_data_size = DRW_VIEWPORT_DATA_SIZE(EXTERNAL_Data);
+
+DrawEngineType draw_engine_external_type = {
+ NULL, NULL,
+ N_("External"),
+ &external_data_size,
+ &external_engine_init,
+ &external_engine_free,
+ &external_cache_init,
+ &external_cache_populate,
+ &external_cache_finish,
+ NULL,
+ &external_draw_scene,
+ NULL,
+ NULL,
+ NULL,
+};
+
+/* Note: currently unused, we should not register unless we want to see this when debugging the view. */
+
+RenderEngineType DRW_engine_viewport_external_type = {
+ NULL, NULL,
+ EXTERNAL_ENGINE, N_("External"), RE_INTERNAL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ &draw_engine_external_type,
+ {NULL, NULL, NULL}
+};
+
+#undef EXTERNAL_ENGINE
diff --git a/source/blender/draw/engines/external/external_engine.h b/source/blender/draw/engines/external/external_engine.h
new file mode 100644
index 00000000000..1789fb67efe
--- /dev/null
+++ b/source/blender/draw/engines/external/external_engine.h
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2017, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file external_engine.h
+ * \ingroup draw_engine
+ */
+
+#ifndef __EXTERNAL_ENGINE_H__
+#define __EXTERNAL_ENGINE_H__
+
+extern RenderEngineType DRW_engine_viewport_external_type;
+
+#endif /* __EXTERNAL_ENGINE_H__ */
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
new file mode 100644
index 00000000000..8eb10ed5a14
--- /dev/null
+++ b/source/blender/draw/intern/DRW_render.h
@@ -0,0 +1,485 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file DRW_render.h
+ * \ingroup draw
+ */
+
+/* This is the Render Functions used by Realtime engines to draw with OpenGL */
+
+#ifndef __DRW_RENDER_H__
+#define __DRW_RENDER_H__
+
+#include "BLI_listbase.h"
+#include "BLI_math_matrix.h"
+#include "BLI_math_vector.h"
+#include "BLI_string.h"
+
+#include "BKE_context.h"
+#include "BKE_layer.h"
+#include "BKE_material.h"
+#include "BKE_scene.h"
+
+#include "BLT_translation.h"
+
+#include "DNA_object_types.h"
+#include "DNA_lamp_types.h"
+#include "DNA_material_types.h"
+#include "DNA_scene_types.h"
+
+#include "draw_common.h"
+#include "draw_cache.h"
+#include "draw_view.h"
+
+#include "draw_manager_profiling.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "RE_engine.h"
+
+struct bContext;
+struct GPUFrameBuffer;
+struct GPUShader;
+struct GPUMaterial;
+struct GPUTexture;
+struct GPUUniformBuffer;
+struct Object;
+struct Gwn_Batch;
+struct DefaultFramebufferList;
+struct DefaultTextureList;
+struct DRWTextStore;
+struct LampEngineData;
+struct RenderEngineType;
+struct ViewportEngineData;
+struct ViewportEngineData_Info;
+
+typedef struct DRWUniform DRWUniform;
+typedef struct DRWInterface DRWInterface;
+typedef struct DRWPass DRWPass;
+typedef struct DRWShadingGroup DRWShadingGroup;
+
+/* declare members as empty (unused) */
+typedef char DRWViewportEmptyList;
+
+#define DRW_VIEWPORT_LIST_SIZE(list) \
+ (sizeof(list) == sizeof(DRWViewportEmptyList) ? 0 : ((sizeof(list)) / sizeof(void *)))
+
+/* Unused members must be either pass list or 'char *' when not usd. */
+#define DRW_VIEWPORT_DATA_SIZE(ty) { \
+ DRW_VIEWPORT_LIST_SIZE(*(((ty *)NULL)->fbl)), \
+ DRW_VIEWPORT_LIST_SIZE(*(((ty *)NULL)->txl)), \
+ DRW_VIEWPORT_LIST_SIZE(*(((ty *)NULL)->psl)), \
+ DRW_VIEWPORT_LIST_SIZE(*(((ty *)NULL)->stl)) \
+}
+
+/* Use of multisample framebuffers. */
+#define MULTISAMPLE_SYNC_ENABLE(dfbl) { \
+ if (dfbl->multisample_fb != NULL) { \
+ DRW_stats_query_start("Multisample Blit"); \
+ DRW_framebuffer_blit(dfbl->default_fb, dfbl->multisample_fb, false, false); \
+ DRW_framebuffer_blit(dfbl->default_fb, dfbl->multisample_fb, true, false); \
+ DRW_framebuffer_bind(dfbl->multisample_fb); \
+ DRW_stats_query_end(); \
+ } \
+}
+
+#define MULTISAMPLE_SYNC_DISABLE(dfbl) { \
+ if (dfbl->multisample_fb != NULL) { \
+ DRW_stats_query_start("Multisample Resolve"); \
+ DRW_framebuffer_blit(dfbl->multisample_fb, dfbl->default_fb, false, false); \
+ DRW_framebuffer_blit(dfbl->multisample_fb, dfbl->default_fb, true, false); \
+ DRW_framebuffer_bind(dfbl->default_fb); \
+ DRW_stats_query_end(); \
+ } \
+}
+
+
+
+typedef struct DrawEngineDataSize {
+ int fbl_len;
+ int txl_len;
+ int psl_len;
+ int stl_len;
+} DrawEngineDataSize;
+
+typedef struct DrawEngineType {
+ struct DrawEngineType *next, *prev;
+
+ char idname[32];
+
+ const DrawEngineDataSize *vedata_size;
+
+ void (*engine_init)(void *vedata);
+ void (*engine_free)(void);
+
+ void (*cache_init)(void *vedata);
+ void (*cache_populate)(void *vedata, struct Object *ob);
+ void (*cache_finish)(void *vedata);
+
+ void (*draw_background)(void *vedata);
+ void (*draw_scene)(void *vedata);
+
+ void (*view_update)(void *vedata);
+ void (*id_update)(void *vedata, struct ID *id);
+
+ void (*render_to_image)(void *vedata, struct RenderEngine *engine, struct Depsgraph *graph);
+} DrawEngineType;
+
+#ifndef __DRW_ENGINE_H__
+/* Buffer and textures used by the viewport by default */
+typedef struct DefaultFramebufferList {
+ struct GPUFrameBuffer *default_fb;
+ struct GPUFrameBuffer *multisample_fb;
+} DefaultFramebufferList;
+
+typedef struct DefaultTextureList {
+ struct GPUTexture *color;
+ struct GPUTexture *depth;
+ struct GPUTexture *multisample_color;
+ struct GPUTexture *multisample_depth;
+} DefaultTextureList;
+#endif
+
+/* Textures */
+/* NOTE naming in this struct is broken.
+ * There should either be suffixes for Normalized int formats or float formats.
+ * Right now every 8bit texture is Normalized int and others are Floating point. */
+typedef enum {
+ DRW_TEX_RGBA_8,
+ DRW_TEX_RGBA_16,
+ DRW_TEX_RGBA_32,
+ DRW_TEX_RGB_11_11_10,
+ DRW_TEX_RGB_8,
+ DRW_TEX_RGB_16,
+ DRW_TEX_RGB_32,
+ DRW_TEX_RG_8,
+ DRW_TEX_RG_16,
+ DRW_TEX_RG_16I,
+ DRW_TEX_RG_32,
+ DRW_TEX_R_8,
+ DRW_TEX_R_16,
+ DRW_TEX_R_32,
+ DRW_TEX_DEPTH_16,
+ DRW_TEX_DEPTH_24,
+ DRW_TEX_DEPTH_24_STENCIL_8,
+ DRW_TEX_DEPTH_32,
+} DRWTextureFormat;
+
+typedef enum {
+ DRW_TEX_FILTER = (1 << 0),
+ DRW_TEX_WRAP = (1 << 1),
+ DRW_TEX_COMPARE = (1 << 2),
+ DRW_TEX_MIPMAP = (1 << 3),
+ DRW_TEX_TEMP = (1 << 4),
+} DRWTextureFlag;
+
+struct GPUTexture *DRW_texture_create_1D(
+ int w, DRWTextureFormat format, DRWTextureFlag flags, const float *fpixels);
+struct GPUTexture *DRW_texture_create_2D(
+ int w, int h, DRWTextureFormat format, DRWTextureFlag flags, const float *fpixels);
+struct GPUTexture *DRW_texture_create_2D_array(
+ int w, int h, int d, DRWTextureFormat format, DRWTextureFlag flags, const float *fpixels);
+struct GPUTexture *DRW_texture_create_3D(
+ int w, int h, int d, DRWTextureFormat format, DRWTextureFlag flags, const float *fpixels);
+struct GPUTexture *DRW_texture_create_cube(
+ int w, DRWTextureFormat format, DRWTextureFlag flags, const float *fpixels);
+void DRW_texture_generate_mipmaps(struct GPUTexture *tex);
+void DRW_texture_update(struct GPUTexture *tex, const float *pixels);
+void DRW_texture_free(struct GPUTexture *tex);
+#define DRW_TEXTURE_FREE_SAFE(tex) do { \
+ if (tex != NULL) { \
+ DRW_texture_free(tex); \
+ tex = NULL; \
+ } \
+} while (0)
+
+/* UBOs */
+struct GPUUniformBuffer *DRW_uniformbuffer_create(int size, const void *data);
+void DRW_uniformbuffer_update(struct GPUUniformBuffer *ubo, const void *data);
+void DRW_uniformbuffer_free(struct GPUUniformBuffer *ubo);
+#define DRW_UBO_FREE_SAFE(ubo) do { \
+ if (ubo != NULL) { \
+ DRW_uniformbuffer_free(ubo); \
+ ubo = NULL; \
+ } \
+} while (0)
+
+/* Buffers */
+#define MAX_FBO_TEX 5
+
+typedef struct DRWFboTexture {
+ struct GPUTexture **tex;
+ int format;
+ DRWTextureFlag flag;
+} DRWFboTexture;
+
+struct GPUFrameBuffer *DRW_framebuffer_create(void);
+void DRW_framebuffer_init(
+ struct GPUFrameBuffer **fb, void *engine_type, int width, int height,
+ DRWFboTexture textures[MAX_FBO_TEX], int textures_len);
+void DRW_framebuffer_bind(struct GPUFrameBuffer *fb);
+void DRW_framebuffer_clear(bool color, bool depth, bool stencil, float clear_col[4], float clear_depth);
+void DRW_framebuffer_read_data(int x, int y, int w, int h, int channels, int slot, float *data);
+void DRW_framebuffer_read_depth(int x, int y, int w, int h, float *data);
+void DRW_framebuffer_texture_attach(struct GPUFrameBuffer *fb, struct GPUTexture *tex, int slot, int mip);
+void DRW_framebuffer_texture_layer_attach(struct GPUFrameBuffer *fb, struct GPUTexture *tex, int slot, int layer, int mip);
+void DRW_framebuffer_cubeface_attach(struct GPUFrameBuffer *fb, struct GPUTexture *tex, int slot, int face, int mip);
+void DRW_framebuffer_texture_detach(struct GPUTexture *tex);
+void DRW_framebuffer_blit(struct GPUFrameBuffer *fb_read, struct GPUFrameBuffer *fb_write, bool depth, bool stencil);
+void DRW_framebuffer_recursive_downsample(
+ struct GPUFrameBuffer *fb, struct GPUTexture *tex, int num_iter,
+ void (*callback)(void *userData, int level), void *userData);
+void DRW_framebuffer_viewport_size(struct GPUFrameBuffer *fb_read, int x, int y, int w, int h);
+void DRW_framebuffer_free(struct GPUFrameBuffer *fb);
+#define DRW_FRAMEBUFFER_FREE_SAFE(fb) do { \
+ if (fb != NULL) { \
+ DRW_framebuffer_free(fb); \
+ fb = NULL; \
+ } \
+} while (0)
+
+void DRW_transform_to_display(struct GPUTexture *tex);
+
+/* Shaders */
+struct GPUShader *DRW_shader_create(
+ const char *vert, const char *geom, const char *frag, const char *defines);
+struct GPUShader *DRW_shader_create_with_lib(
+ const char *vert, const char *geom, const char *frag, const char *lib, const char *defines);
+struct GPUShader *DRW_shader_create_2D(const char *frag, const char *defines);
+struct GPUShader *DRW_shader_create_3D(const char *frag, const char *defines);
+struct GPUShader *DRW_shader_create_fullscreen(const char *frag, const char *defines);
+struct GPUShader *DRW_shader_create_3D_depth_only(void);
+void DRW_shader_free(struct GPUShader *shader);
+#define DRW_SHADER_FREE_SAFE(shader) do { \
+ if (shader != NULL) { \
+ DRW_shader_free(shader); \
+ shader = NULL; \
+ } \
+} while (0)
+
+/* Batches */
+
+typedef enum {
+ DRW_STATE_WRITE_DEPTH = (1 << 0),
+ DRW_STATE_WRITE_COLOR = (1 << 1),
+ DRW_STATE_DEPTH_LESS = (1 << 2),
+ DRW_STATE_DEPTH_EQUAL = (1 << 3),
+ DRW_STATE_DEPTH_GREATER = (1 << 4),
+ DRW_STATE_DEPTH_ALWAYS = (1 << 5),
+ DRW_STATE_CULL_BACK = (1 << 6),
+ DRW_STATE_CULL_FRONT = (1 << 7),
+ DRW_STATE_WIRE = (1 << 8),
+ DRW_STATE_WIRE_LARGE = (1 << 9),
+ DRW_STATE_POINT = (1 << 10),
+ DRW_STATE_STIPPLE_2 = (1 << 11),
+ DRW_STATE_STIPPLE_3 = (1 << 12),
+ DRW_STATE_STIPPLE_4 = (1 << 13),
+ DRW_STATE_BLEND = (1 << 14),
+ DRW_STATE_ADDITIVE = (1 << 15),
+ DRW_STATE_MULTIPLY = (1 << 16),
+ DRW_STATE_TRANSMISSION = (1 << 17),
+ DRW_STATE_CLIP_PLANES = (1 << 18),
+ DRW_STATE_ADDITIVE_FULL = (1 << 19), /* Same as DRW_STATE_ADDITIVE but let alpha accumulate without premult. */
+
+ DRW_STATE_WRITE_STENCIL = (1 << 27),
+ DRW_STATE_STENCIL_EQUAL = (1 << 28),
+} DRWState;
+
+#define DRW_STATE_DEFAULT (DRW_STATE_WRITE_DEPTH | DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_LESS)
+
+
+DRWShadingGroup *DRW_shgroup_create(struct GPUShader *shader, DRWPass *pass);
+DRWShadingGroup *DRW_shgroup_material_create(struct GPUMaterial *material, DRWPass *pass);
+DRWShadingGroup *DRW_shgroup_material_instance_create(
+ struct GPUMaterial *material, DRWPass *pass, struct Gwn_Batch *geom, struct Object *ob);
+DRWShadingGroup *DRW_shgroup_material_empty_tri_batch_create(struct GPUMaterial *material, DRWPass *pass, int size);
+DRWShadingGroup *DRW_shgroup_instance_create(struct GPUShader *shader, DRWPass *pass, struct Gwn_Batch *geom);
+DRWShadingGroup *DRW_shgroup_point_batch_create(struct GPUShader *shader, DRWPass *pass);
+DRWShadingGroup *DRW_shgroup_line_batch_create(struct GPUShader *shader, DRWPass *pass);
+DRWShadingGroup *DRW_shgroup_empty_tri_batch_create(struct GPUShader *shader, DRWPass *pass, int size);
+
+typedef void (DRWCallGenerateFn)(
+ DRWShadingGroup *shgroup,
+ void (*draw_fn)(DRWShadingGroup *shgroup, struct Gwn_Batch *geom),
+ void *user_data);
+
+void DRW_shgroup_instance_batch(DRWShadingGroup *shgroup, struct Gwn_Batch *instances);
+
+void DRW_shgroup_free(struct DRWShadingGroup *shgroup);
+void DRW_shgroup_call_add(DRWShadingGroup *shgroup, struct Gwn_Batch *geom, float (*obmat)[4]);
+void DRW_shgroup_call_object_add(DRWShadingGroup *shgroup, struct Gwn_Batch *geom, struct Object *ob);
+void DRW_shgroup_call_sculpt_add(DRWShadingGroup *shgroup, struct Object *ob, float (*obmat)[4]);
+void DRW_shgroup_call_generate_add(
+ DRWShadingGroup *shgroup, DRWCallGenerateFn *geometry_fn, void *user_data, float (*obmat)[4]);
+void DRW_shgroup_call_dynamic_add_array(DRWShadingGroup *shgroup, const void *attr[], unsigned int attr_len);
+#define DRW_shgroup_call_dynamic_add(shgroup, ...) do { \
+ const void *array[] = {__VA_ARGS__}; \
+ DRW_shgroup_call_dynamic_add_array(shgroup, array, (sizeof(array) / sizeof(*array))); \
+} while (0)
+/* Use this to set a high number of instances. */
+void DRW_shgroup_set_instance_count(DRWShadingGroup *shgroup, int count);
+
+void DRW_shgroup_state_enable(DRWShadingGroup *shgroup, DRWState state);
+void DRW_shgroup_state_disable(DRWShadingGroup *shgroup, DRWState state);
+void DRW_shgroup_stencil_mask(DRWShadingGroup *shgroup, unsigned int mask);
+void DRW_shgroup_attrib_float(DRWShadingGroup *shgroup, const char *name, int size);
+
+void DRW_shgroup_uniform_texture(DRWShadingGroup *shgroup, const char *name, const struct GPUTexture *tex);
+void DRW_shgroup_uniform_block(DRWShadingGroup *shgroup, const char *name, const struct GPUUniformBuffer *ubo);
+void DRW_shgroup_uniform_buffer(DRWShadingGroup *shgroup, const char *name, struct GPUTexture **tex);
+void DRW_shgroup_uniform_float(DRWShadingGroup *shgroup, const char *name, const float *value, int arraysize);
+void DRW_shgroup_uniform_vec2(DRWShadingGroup *shgroup, const char *name, const float *value, int arraysize);
+void DRW_shgroup_uniform_vec3(DRWShadingGroup *shgroup, const char *name, const float *value, int arraysize);
+void DRW_shgroup_uniform_vec4(DRWShadingGroup *shgroup, const char *name, const float *value, int arraysize);
+void DRW_shgroup_uniform_short_to_int(DRWShadingGroup *shgroup, const char *name, const short *value, int arraysize);
+void DRW_shgroup_uniform_short_to_float(DRWShadingGroup *shgroup, const char *name, const short *value, int arraysize);
+/* Boolean are expected to be 4bytes longs for opengl! */
+void DRW_shgroup_uniform_bool(DRWShadingGroup *shgroup, const char *name, const int *value, int arraysize);
+void DRW_shgroup_uniform_int(DRWShadingGroup *shgroup, const char *name, const int *value, int arraysize);
+void DRW_shgroup_uniform_ivec2(DRWShadingGroup *shgroup, const char *name, const int *value, int arraysize);
+void DRW_shgroup_uniform_ivec3(DRWShadingGroup *shgroup, const char *name, const int *value, int arraysize);
+void DRW_shgroup_uniform_mat3(DRWShadingGroup *shgroup, const char *name, const float *value);
+void DRW_shgroup_uniform_mat4(DRWShadingGroup *shgroup, const char *name, const float *value);
+
+/* Passes */
+DRWPass *DRW_pass_create(const char *name, DRWState state);
+void DRW_pass_state_set(DRWPass *pass, DRWState state);
+void DRW_pass_foreach_shgroup(DRWPass *pass, void (*callback)(void *userData, DRWShadingGroup *shgrp), void *userData);
+void DRW_pass_sort_shgroup_z(DRWPass *pass);
+
+/* Viewport */
+typedef enum {
+ DRW_MAT_PERS = 0,
+ DRW_MAT_PERSINV,
+ DRW_MAT_VIEW,
+ DRW_MAT_VIEWINV,
+ DRW_MAT_WIN,
+ DRW_MAT_WININV,
+} DRWViewportMatrixType;
+
+void DRW_viewport_init(const bContext *C);
+void DRW_viewport_matrix_get(float mat[4][4], DRWViewportMatrixType type);
+void DRW_viewport_matrix_override_set(float mat[4][4], DRWViewportMatrixType type);
+void DRW_viewport_matrix_override_unset(DRWViewportMatrixType type);
+const float *DRW_viewport_size_get(void);
+const float *DRW_viewport_screenvecs_get(void);
+const float *DRW_viewport_pixelsize_get(void);
+bool DRW_viewport_is_persp_get(void);
+
+struct DefaultFramebufferList *DRW_viewport_framebuffer_list_get(void);
+struct DefaultTextureList *DRW_viewport_texture_list_get(void);
+
+void DRW_viewport_request_redraw(void);
+
+void DRW_render_to_image(struct RenderEngine *re, struct Depsgraph *depsgraph);
+void DRW_render_object_iter(
+ void *vedata, struct RenderEngine *engine, struct Depsgraph *graph,
+ void (*callback)(void *vedata, struct Object *ob, struct RenderEngine *engine, struct Depsgraph *graph));
+
+/* ViewLayers */
+void *DRW_view_layer_engine_data_get(DrawEngineType *engine_type);
+void **DRW_view_layer_engine_data_ensure(DrawEngineType *engine_type, void (*callback)(void *storage));
+
+/* Objects */
+ObjectEngineData *DRW_object_engine_data_get(Object *ob, DrawEngineType *engine_type);
+ObjectEngineData *DRW_object_engine_data_ensure(
+ Object *ob,
+ DrawEngineType *engine_type,
+ size_t size,
+ ObjectEngineDataInitCb init_cb,
+ ObjectEngineDataFreeCb free_cb);
+struct LampEngineData *DRW_lamp_engine_data_ensure(Object *ob, struct RenderEngineType *engine_type);
+void DRW_lamp_engine_data_free(struct LampEngineData *led);
+
+/* Settings */
+bool DRW_object_is_renderable(struct Object *ob);
+bool DRW_check_object_visible_within_active_context(struct Object *ob);
+bool DRW_object_is_flat_normal(const struct Object *ob);
+int DRW_object_is_mode_shade(const struct Object *ob);
+
+/* Draw commands */
+void DRW_draw_pass(DRWPass *pass);
+void DRW_draw_pass_subset(DRWPass *pass, DRWShadingGroup *start_group, DRWShadingGroup *end_group);
+
+void DRW_draw_text_cache_queue(struct DRWTextStore *dt);
+
+void DRW_draw_callbacks_pre_scene(void);
+void DRW_draw_callbacks_post_scene(void);
+
+int DRW_draw_region_engine_info_offset(void);
+void DRW_draw_region_engine_info(void);
+
+void DRW_state_reset_ex(DRWState state);
+void DRW_state_reset(void);
+
+void DRW_state_invert_facing(void);
+
+void DRW_state_clip_planes_add(float plane_eq[4]);
+void DRW_state_clip_planes_reset(void);
+
+/* Selection */
+void DRW_select_load_id(unsigned int id);
+
+/* Draw State */
+void DRW_state_dfdy_factors_get(float dfdyfac[2]);
+bool DRW_state_is_fbo(void);
+bool DRW_state_is_select(void);
+bool DRW_state_is_depth(void);
+bool DRW_state_is_image_render(void);
+bool DRW_state_is_scene_render(void);
+bool DRW_state_show_text(void);
+bool DRW_state_draw_support(void);
+bool DRW_state_draw_background(void);
+
+enum eDepsObjectIteratorMode DRW_iterator_mode_get(void);
+
+struct DRWTextStore *DRW_state_text_cache_get(void);
+
+/* Avoid too many lookups while drawing */
+typedef struct DRWContextState {
+
+ struct ARegion *ar; /* 'CTX_wm_region(C)' */
+ struct RegionView3D *rv3d; /* 'CTX_wm_region_view3d(C)' */
+ struct View3D *v3d; /* 'CTX_wm_view3d(C)' */
+
+ struct Scene *scene; /* 'CTX_data_scene(C)' */
+ struct ViewLayer *view_layer; /* 'CTX_data_view_layer(C)' */
+
+ /* Use 'scene->obedit' for edit-mode */
+ struct Object *obact; /* 'OBACT' */
+
+ struct RenderEngineType *engine_type;
+
+ struct Depsgraph *depsgraph;
+
+ eObjectMode object_mode;
+
+ /* Last resort (some functions take this as an arg so we can't easily avoid).
+ * May be NULL when used for selection or depth buffer. */
+ const struct bContext *evil_C;
+
+ struct Object *object_pose;
+
+} DRWContextState;
+
+const DRWContextState *DRW_context_state_get(void);
+
+#endif /* __DRW_RENDER_H__ */
diff --git a/source/blender/draw/intern/draw_armature.c b/source/blender/draw/intern/draw_armature.c
new file mode 100644
index 00000000000..c14fe70e0c3
--- /dev/null
+++ b/source/blender/draw/intern/draw_armature.c
@@ -0,0 +1,1460 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file draw_armature.c
+ * \ingroup draw
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+#include "DNA_anim_types.h"
+#include "DNA_armature_types.h"
+#include "DNA_constraint_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_screen_types.h"
+#include "DNA_view3d_types.h"
+#include "DNA_object_types.h"
+
+#include "DRW_render.h"
+
+#include "BLI_blenlib.h"
+#include "BLI_math.h"
+#include "BLI_dlrbTree.h"
+#include "BLI_utildefines.h"
+
+#include "BKE_animsys.h"
+#include "BKE_action.h"
+#include "BKE_armature.h"
+#include "BKE_global.h"
+#include "BKE_modifier.h"
+#include "BKE_nla.h"
+#include "BKE_curve.h"
+
+#include "BIF_gl.h"
+
+#include "ED_armature.h"
+#include "ED_keyframes_draw.h"
+
+#include "GPU_select.h"
+
+#include "UI_resources.h"
+
+#include "draw_common.h"
+#include "draw_manager_text.h"
+
+#define BONE_VAR(eBone, pchan, var) ((eBone) ? (eBone->var) : (pchan->var))
+#define BONE_FLAG(eBone, pchan) ((eBone) ? (eBone->flag) : (pchan->bone->flag))
+
+/* For now just match 2.7x where possible. */
+// #define USE_SOLID_COLOR
+
+/* Reset for drawing each armature object */
+static struct {
+ /* Current armature object */
+ Object *ob;
+ /* Reset when changing current_armature */
+ DRWShadingGroup *bone_octahedral_solid;
+ DRWShadingGroup *bone_octahedral_wire;
+ DRWShadingGroup *bone_box_solid;
+ DRWShadingGroup *bone_box_wire;
+ DRWShadingGroup *bone_wire_wire;
+ DRWShadingGroup *bone_envelope_solid;
+ DRWShadingGroup *bone_envelope_distance;
+ DRWShadingGroup *bone_envelope_wire;
+ DRWShadingGroup *bone_envelope_head_wire;
+ DRWShadingGroup *bone_point_solid;
+ DRWShadingGroup *bone_point_wire;
+ DRWShadingGroup *bone_axes;
+ DRWShadingGroup *relationship_lines;
+
+ DRWPass *pass_bone_solid;
+ DRWPass *pass_bone_wire;
+ DRWPass *pass_bone_envelope;
+} g_data = {NULL};
+
+/* -------------------------------------------------------------------- */
+
+/** \name Shader Groups (DRW_shgroup)
+ * \{ */
+
+/* Octahedral */
+static void drw_shgroup_bone_octahedral_solid(const float (*bone_mat)[4], const float color[4])
+{
+ if (g_data.bone_octahedral_solid == NULL) {
+ struct Gwn_Batch *geom = DRW_cache_bone_octahedral_get();
+ g_data.bone_octahedral_solid = shgroup_instance_solid(g_data.pass_bone_solid, geom);
+ }
+ float final_bonemat[4][4];
+ mul_m4_m4m4(final_bonemat, g_data.ob->obmat, bone_mat);
+ DRW_shgroup_call_dynamic_add(g_data.bone_octahedral_solid, final_bonemat, color);
+}
+
+static void drw_shgroup_bone_octahedral_wire(const float (*bone_mat)[4], const float color[4])
+{
+ if (g_data.bone_octahedral_wire == NULL) {
+ struct Gwn_Batch *geom = DRW_cache_bone_octahedral_wire_outline_get();
+ g_data.bone_octahedral_wire = shgroup_instance_wire(g_data.pass_bone_wire, geom);
+ }
+ float final_bonemat[4][4];
+ mul_m4_m4m4(final_bonemat, g_data.ob->obmat, bone_mat);
+ DRW_shgroup_call_dynamic_add(g_data.bone_octahedral_wire, final_bonemat, color);
+}
+
+/* Box / B-Bone */
+static void drw_shgroup_bone_box_solid(const float (*bone_mat)[4], const float color[4])
+{
+ if (g_data.bone_box_solid == NULL) {
+ struct Gwn_Batch *geom = DRW_cache_bone_box_get();
+ g_data.bone_box_solid = shgroup_instance_solid(g_data.pass_bone_solid, geom);
+ }
+ float final_bonemat[4][4];
+ mul_m4_m4m4(final_bonemat, g_data.ob->obmat, bone_mat);
+ DRW_shgroup_call_dynamic_add(g_data.bone_box_solid, final_bonemat, color);
+}
+
+static void drw_shgroup_bone_box_wire(const float (*bone_mat)[4], const float color[4])
+{
+ if (g_data.bone_box_wire == NULL) {
+ struct Gwn_Batch *geom = DRW_cache_bone_box_wire_outline_get();
+ g_data.bone_box_wire = shgroup_instance_wire(g_data.pass_bone_wire, geom);
+ }
+ float final_bonemat[4][4];
+ mul_m4_m4m4(final_bonemat, g_data.ob->obmat, bone_mat);
+ DRW_shgroup_call_dynamic_add(g_data.bone_box_wire, final_bonemat, color);
+}
+
+/* Wire */
+static void drw_shgroup_bone_wire_wire(const float (*bone_mat)[4], const float color[4])
+{
+ if (g_data.bone_wire_wire == NULL) {
+ struct Gwn_Batch *geom = DRW_cache_bone_wire_wire_outline_get();
+ g_data.bone_wire_wire = shgroup_instance_wire(g_data.pass_bone_wire, geom);
+ }
+ float final_bonemat[4][4];
+ mul_m4_m4m4(final_bonemat, g_data.ob->obmat, bone_mat);
+ DRW_shgroup_call_dynamic_add(g_data.bone_wire_wire, final_bonemat, color);
+}
+
+/* Envelope */
+static void drw_shgroup_bone_envelope_distance(
+ const float (*bone_mat)[4], const float color[4],
+ const float *radius_head, const float *radius_tail, const float *distance)
+{
+ if (g_data.pass_bone_envelope != NULL) {
+ if (g_data.bone_envelope_distance == NULL) {
+ struct Gwn_Batch *geom = DRW_cache_bone_envelope_distance_outline_get();
+ /* Note: bone_wire draw pass is not really working, think we need another one here? */
+ g_data.bone_envelope_distance = shgroup_instance_bone_envelope_wire(g_data.pass_bone_envelope, geom);
+ }
+ float final_bonemat[4][4];
+ mul_m4_m4m4(final_bonemat, g_data.ob->obmat, bone_mat);
+ DRW_shgroup_call_dynamic_add(g_data.bone_envelope_distance, final_bonemat, color, radius_head, radius_tail, distance);
+ }
+}
+
+static void drw_shgroup_bone_envelope_solid(
+ const float (*bone_mat)[4], const float color[4],
+ const float *radius_head, const float *radius_tail)
+{
+ if (g_data.bone_envelope_solid == NULL) {
+ struct Gwn_Batch *geom = DRW_cache_bone_envelope_solid_get();
+ g_data.bone_envelope_solid = shgroup_instance_bone_envelope_solid(g_data.pass_bone_solid, geom);
+ }
+ float final_bonemat[4][4];
+ mul_m4_m4m4(final_bonemat, g_data.ob->obmat, bone_mat);
+ DRW_shgroup_call_dynamic_add(g_data.bone_envelope_solid, final_bonemat, color, radius_head, radius_tail);
+}
+
+static void drw_shgroup_bone_envelope_wire(
+ const float (*bone_mat)[4], const float color[4],
+ const float *radius_head, const float *radius_tail, const float *distance)
+{
+ if (g_data.bone_envelope_wire == NULL) {
+ struct Gwn_Batch *geom = DRW_cache_bone_envelope_wire_outline_get();
+ g_data.bone_envelope_wire = shgroup_instance_bone_envelope_wire(g_data.pass_bone_wire, geom);
+ }
+ float final_bonemat[4][4];
+ mul_m4_m4m4(final_bonemat, g_data.ob->obmat, bone_mat);
+ DRW_shgroup_call_dynamic_add(g_data.bone_envelope_wire, final_bonemat, color, radius_head, radius_tail, distance);
+}
+
+static void drw_shgroup_bone_envelope_head_wire(
+ const float (*bone_mat)[4], const float color[4],
+ const float *radius_head, const float *radius_tail, const float *distance)
+{
+ if (g_data.bone_envelope_head_wire == NULL) {
+ struct Gwn_Batch *geom = DRW_cache_bone_envelope_head_wire_outline_get();
+ g_data.bone_envelope_head_wire = shgroup_instance_bone_envelope_wire(g_data.pass_bone_wire, geom);
+ }
+ float final_bonemat[4][4];
+ mul_m4_m4m4(final_bonemat, g_data.ob->obmat, bone_mat);
+ DRW_shgroup_call_dynamic_add(g_data.bone_envelope_head_wire, final_bonemat, color, radius_head, radius_tail, distance);
+}
+
+/* Custom (geometry) */
+
+static void drw_shgroup_bone_custom_solid(const float (*bone_mat)[4], const float color[4], Object *custom)
+{
+ /* grr, not re-using instances! */
+ struct Gwn_Batch *geom = DRW_cache_object_surface_get(custom);
+ if (geom) {
+ DRWShadingGroup *shgrp_geom_solid = shgroup_instance_solid(g_data.pass_bone_solid, geom);
+ float final_bonemat[4][4];
+ mul_m4_m4m4(final_bonemat, g_data.ob->obmat, bone_mat);
+ DRW_shgroup_call_dynamic_add(shgrp_geom_solid, final_bonemat, color);
+ }
+}
+
+static void drw_shgroup_bone_custom_wire(const float (*bone_mat)[4], const float color[4], Object *custom)
+{
+ /* grr, not re-using instances! */
+ struct Gwn_Batch *geom = DRW_cache_object_wire_outline_get(custom);
+ if (geom) {
+ DRWShadingGroup *shgrp_geom_wire = shgroup_instance_wire(g_data.pass_bone_wire, geom);
+ float final_bonemat[4][4];
+ mul_m4_m4m4(final_bonemat, g_data.ob->obmat, bone_mat);
+ DRW_shgroup_call_dynamic_add(shgrp_geom_wire, final_bonemat, color);
+ }
+}
+
+/* Head and tail sphere */
+static void drw_shgroup_bone_point_solid(const float (*bone_mat)[4], const float color[4])
+{
+ if (g_data.bone_point_solid == NULL) {
+ struct Gwn_Batch *geom = DRW_cache_bone_point_get();
+ g_data.bone_point_solid = shgroup_instance_solid(g_data.pass_bone_solid, geom);
+ }
+ float final_bonemat[4][4];
+ mul_m4_m4m4(final_bonemat, g_data.ob->obmat, bone_mat);
+ DRW_shgroup_call_dynamic_add(g_data.bone_point_solid, final_bonemat, color);
+}
+
+static void drw_shgroup_bone_point_wire(const float (*bone_mat)[4], const float color[4])
+{
+ if (g_data.bone_point_wire == NULL) {
+ struct Gwn_Batch *geom = DRW_cache_bone_point_wire_outline_get();
+ g_data.bone_point_wire = shgroup_instance_wire(g_data.pass_bone_wire, geom);
+ }
+ float final_bonemat[4][4];
+ mul_m4_m4m4(final_bonemat, g_data.ob->obmat, bone_mat);
+ DRW_shgroup_call_dynamic_add(g_data.bone_point_wire, final_bonemat, color);
+}
+
+/* Axes */
+static void drw_shgroup_bone_axes(const float (*bone_mat)[4], const float color[4])
+{
+ if (g_data.bone_axes == NULL) {
+ struct Gwn_Batch *geom = DRW_cache_bone_arrows_get();
+ g_data.bone_axes = shgroup_instance_wire(g_data.pass_bone_wire, geom);
+ }
+ float final_bonemat[4][4];
+ mul_m4_m4m4(final_bonemat, g_data.ob->obmat, bone_mat);
+ DRW_shgroup_call_dynamic_add(g_data.bone_axes, final_bonemat, color);
+}
+
+/* Relationship lines */
+static void UNUSED_FUNCTION(drw_shgroup_bone_relationship_lines)(const float head[3], const float tail[3])
+{
+ DRW_shgroup_call_dynamic_add(g_data.relationship_lines, head);
+ DRW_shgroup_call_dynamic_add(g_data.relationship_lines, tail);
+}
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Drawing Theme Helpers
+ *
+ * Note, this section is duplicate of code in 'drawarmature.c'.
+ *
+ * \{ */
+
+/* global here is reset before drawing each bone */
+struct {
+ const ThemeWireColor *bcolor;
+} g_color;
+
+/* values of colCode for set_pchan_color */
+enum {
+ PCHAN_COLOR_NORMAL = 0, /* normal drawing */
+ PCHAN_COLOR_SOLID, /* specific case where "solid" color is needed */
+ PCHAN_COLOR_CONSTS, /* "constraint" colors (which may/may-not be suppressed) */
+
+ PCHAN_COLOR_SPHEREBONE_BASE, /* for the 'stick' of sphere (envelope) bones */
+ PCHAN_COLOR_SPHEREBONE_END, /* for the ends of sphere (envelope) bones */
+ PCHAN_COLOR_LINEBONE /* for the middle of line-bones */
+};
+
+/* This function sets the color-set for coloring a certain bone */
+static void set_pchan_colorset(Object *ob, bPoseChannel *pchan)
+{
+ bPose *pose = (ob) ? ob->pose : NULL;
+ bArmature *arm = (ob) ? ob->data : NULL;
+ bActionGroup *grp = NULL;
+ short color_index = 0;
+
+ /* sanity check */
+ if (ELEM(NULL, ob, arm, pose, pchan)) {
+ g_color.bcolor = NULL;
+ return;
+ }
+
+ /* only try to set custom color if enabled for armature */
+ if (arm->flag & ARM_COL_CUSTOM) {
+ /* currently, a bone can only use a custom color set if it's group (if it has one),
+ * has been set to use one
+ */
+ if (pchan->agrp_index) {
+ grp = (bActionGroup *)BLI_findlink(&pose->agroups, (pchan->agrp_index - 1));
+ if (grp)
+ color_index = grp->customCol;
+ }
+ }
+
+ /* bcolor is a pointer to the color set to use. If NULL, then the default
+ * color set (based on the theme colors for 3d-view) is used.
+ */
+ if (color_index > 0) {
+ bTheme *btheme = UI_GetTheme();
+ g_color.bcolor = &btheme->tarm[(color_index - 1)];
+ }
+ else if (color_index == -1) {
+ /* use the group's own custom color set (grp is always != NULL here) */
+ g_color.bcolor = &grp->cs;
+ }
+ else {
+ g_color.bcolor = NULL;
+ }
+}
+
+/* This function is for brightening/darkening a given color (like UI_GetThemeColorShade3ubv()) */
+static void cp_shade_color3ub(unsigned char cp[3], const int offset)
+{
+ int r, g, b;
+
+ r = offset + (int) cp[0];
+ CLAMP(r, 0, 255);
+ g = offset + (int) cp[1];
+ CLAMP(g, 0, 255);
+ b = offset + (int) cp[2];
+ CLAMP(b, 0, 255);
+
+ cp[0] = r;
+ cp[1] = g;
+ cp[2] = b;
+}
+
+/* This function sets the gl-color for coloring a certain bone (based on bcolor) */
+static bool set_pchan_color(short colCode, const int boneflag, const short constflag, float r_color[4])
+{
+ float *fcolor = r_color;
+ const ThemeWireColor *bcolor = g_color.bcolor;
+
+ switch (colCode) {
+ case PCHAN_COLOR_NORMAL:
+ {
+ if (bcolor) {
+ unsigned char cp[4] = {255};
+
+ if (boneflag & BONE_DRAW_ACTIVE) {
+ copy_v3_v3_char((char *)cp, bcolor->active);
+ if (!(boneflag & BONE_SELECTED)) {
+ cp_shade_color3ub(cp, -80);
+ }
+ }
+ else if (boneflag & BONE_SELECTED) {
+ copy_v3_v3_char((char *)cp, bcolor->select);
+ }
+ else {
+ /* a bit darker than solid */
+ copy_v3_v3_char((char *)cp, bcolor->solid);
+ cp_shade_color3ub(cp, -50);
+ }
+
+ rgb_uchar_to_float(fcolor, cp);
+ }
+ else {
+ if ((boneflag & BONE_DRAW_ACTIVE) && (boneflag & BONE_SELECTED)) {
+ UI_GetThemeColor4fv(TH_BONE_POSE_ACTIVE, fcolor);
+ }
+ else if (boneflag & BONE_DRAW_ACTIVE) {
+ UI_GetThemeColorBlendShade4fv(TH_WIRE, TH_BONE_POSE, 0.15f, 0, fcolor);
+ }
+ else if (boneflag & BONE_SELECTED) {
+ UI_GetThemeColor4fv(TH_BONE_POSE, fcolor);
+ }
+ else {
+ UI_GetThemeColor4fv(TH_WIRE, fcolor);
+ }
+ }
+
+ return true;
+ }
+ case PCHAN_COLOR_SOLID:
+ {
+ if (bcolor) {
+ rgb_uchar_to_float(fcolor, (unsigned char *)bcolor->solid);
+ }
+ else {
+ UI_GetThemeColor4fv(TH_BONE_SOLID, fcolor);
+ }
+
+ return true;
+ }
+ case PCHAN_COLOR_CONSTS:
+ {
+ if ((bcolor == NULL) || (bcolor->flag & TH_WIRECOLOR_CONSTCOLS)) {
+ unsigned char cp[4];
+ if (constflag & PCHAN_HAS_TARGET) rgba_char_args_set((char *)cp, 255, 150, 0, 80);
+ else if (constflag & PCHAN_HAS_IK) rgba_char_args_set((char *)cp, 255, 255, 0, 80);
+ else if (constflag & PCHAN_HAS_SPLINEIK) rgba_char_args_set((char *)cp, 200, 255, 0, 80);
+ else if (constflag & PCHAN_HAS_CONST) rgba_char_args_set((char *)cp, 0, 255, 120, 80);
+
+ rgba_uchar_to_float(fcolor, cp);
+
+ return true;
+ }
+ return false;
+ }
+ case PCHAN_COLOR_SPHEREBONE_BASE:
+ {
+ if (bcolor) {
+ unsigned char cp[4] = {255};
+
+ if (boneflag & BONE_DRAW_ACTIVE) {
+ copy_v3_v3_char((char *)cp, bcolor->active);
+ }
+ else if (boneflag & BONE_SELECTED) {
+ copy_v3_v3_char((char *)cp, bcolor->select);
+ }
+ else {
+ copy_v3_v3_char((char *)cp, bcolor->solid);
+ }
+
+ rgb_uchar_to_float(fcolor, cp);
+ }
+ else {
+ if (boneflag & BONE_DRAW_ACTIVE) {
+ UI_GetThemeColorShade4fv(TH_BONE_POSE, 40, fcolor);
+ }
+ else if (boneflag & BONE_SELECTED) {
+ UI_GetThemeColor4fv(TH_BONE_POSE, fcolor);
+ }
+ else {
+ UI_GetThemeColor4fv(TH_BONE_SOLID, fcolor);
+ }
+ }
+
+ return true;
+ }
+ case PCHAN_COLOR_SPHEREBONE_END:
+ {
+ if (bcolor) {
+ unsigned char cp[4] = {255};
+
+ if (boneflag & BONE_DRAW_ACTIVE) {
+ copy_v3_v3_char((char *)cp, bcolor->active);
+ cp_shade_color3ub(cp, 10);
+ }
+ else if (boneflag & BONE_SELECTED) {
+ copy_v3_v3_char((char *)cp, bcolor->select);
+ cp_shade_color3ub(cp, -30);
+ }
+ else {
+ copy_v3_v3_char((char *)cp, bcolor->solid);
+ cp_shade_color3ub(cp, -30);
+ }
+
+ rgb_uchar_to_float(fcolor, cp);
+ }
+ else {
+ if (boneflag & BONE_DRAW_ACTIVE) {
+ UI_GetThemeColorShade4fv(TH_BONE_POSE, 10, fcolor);
+ }
+ else if (boneflag & BONE_SELECTED) {
+ UI_GetThemeColorShade4fv(TH_BONE_POSE, -30, fcolor);
+ }
+ else {
+ UI_GetThemeColorShade4fv(TH_BONE_SOLID, -30, fcolor);
+ }
+ }
+ break;
+ }
+ case PCHAN_COLOR_LINEBONE:
+ {
+ /* inner part in background color or constraint */
+ if ((constflag) && ((bcolor == NULL) || (bcolor->flag & TH_WIRECOLOR_CONSTCOLS))) {
+ unsigned char cp[4];
+ if (constflag & PCHAN_HAS_TARGET) rgba_char_args_set((char *)cp, 255, 150, 0, 255);
+ else if (constflag & PCHAN_HAS_IK) rgba_char_args_set((char *)cp, 255, 255, 0, 255);
+ else if (constflag & PCHAN_HAS_SPLINEIK) rgba_char_args_set((char *)cp, 200, 255, 0, 255);
+ else if (constflag & PCHAN_HAS_CONST) rgba_char_args_set((char *)cp, 0, 255, 120, 255);
+ else if (constflag) UI_GetThemeColor4ubv(TH_BONE_POSE, cp); /* PCHAN_HAS_ACTION */
+
+ rgb_uchar_to_float(fcolor, cp);
+ }
+ else {
+ if (bcolor) {
+ const char *cp = bcolor->solid;
+ rgb_uchar_to_float(fcolor, (unsigned char *)cp);
+ fcolor[3] = 204.f / 255.f;
+ }
+ else {
+ UI_GetThemeColorShade4fv(TH_BACK, -30, fcolor);
+ }
+ }
+
+ return true;
+ }
+ }
+
+ return false;
+}
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Drawing Color Helpers
+ * \{ */
+
+/**
+ * Follow `TH_*` naming except for mixed colors.
+ */
+static struct {
+ float select_color[4];
+ float edge_select_color[4];
+ float bone_select_color[4]; /* tint */
+ float wire_color[4];
+ float wire_edit_color[4];
+ float bone_solid_color[4];
+ float bone_active_unselect_color[4]; /* mix */
+ float bone_pose_color[4];
+ float bone_pose_active_color[4];
+ float bone_pose_active_unselect_color[4]; /* mix */
+ float text_hi_color[4];
+ float text_color[4];
+ float vertex_select_color[4];
+ float vertex_color[4];
+
+ /* not a theme, this is an override */
+ const float *const_color;
+} g_theme;
+
+/** See: 'set_pchan_color'*/
+static void update_color(const float const_color[4])
+{
+ g_theme.const_color = const_color;
+
+#define NO_ALPHA(c) (((c)[3] = 1.0f), (c))
+
+ UI_GetThemeColor3fv(TH_SELECT, NO_ALPHA(g_theme.select_color));
+ UI_GetThemeColor3fv(TH_EDGE_SELECT, NO_ALPHA(g_theme.edge_select_color));
+ UI_GetThemeColorShade3fv(TH_EDGE_SELECT, -20, NO_ALPHA(g_theme.bone_select_color));
+ UI_GetThemeColor3fv(TH_WIRE, NO_ALPHA(g_theme.wire_color));
+ UI_GetThemeColor3fv(TH_WIRE_EDIT, NO_ALPHA(g_theme.wire_edit_color));
+ UI_GetThemeColor3fv(TH_BONE_SOLID, NO_ALPHA(g_theme.bone_solid_color));
+ UI_GetThemeColorBlendShade3fv(TH_WIRE_EDIT, TH_EDGE_SELECT, 0.15f, 0, NO_ALPHA(g_theme.bone_active_unselect_color));
+ UI_GetThemeColor3fv(TH_BONE_POSE, NO_ALPHA(g_theme.bone_pose_color));
+ UI_GetThemeColor3fv(TH_BONE_POSE_ACTIVE, NO_ALPHA(g_theme.bone_pose_active_color));
+ UI_GetThemeColorBlendShade3fv(TH_WIRE, TH_BONE_POSE, 0.15f, 0, NO_ALPHA(g_theme.bone_pose_active_unselect_color));
+ UI_GetThemeColor3fv(TH_TEXT_HI, NO_ALPHA(g_theme.text_hi_color));
+ UI_GetThemeColor3fv(TH_TEXT, NO_ALPHA(g_theme.text_color));
+ UI_GetThemeColor3fv(TH_VERTEX_SELECT, NO_ALPHA(g_theme.vertex_select_color));
+ UI_GetThemeColor3fv(TH_VERTEX, NO_ALPHA(g_theme.vertex_color));
+
+#undef NO_ALPHA
+}
+
+static const float *get_bone_solid_color(
+ const EditBone *eBone, const bPoseChannel *pchan, const bArmature *arm,
+ const int boneflag, const short constflag)
+{
+ if (g_theme.const_color)
+ return g_theme.bone_solid_color;
+
+#ifdef USE_SOLID_COLOR
+ /* Edit Mode */
+ if (eBone) {
+ bool is_active = (arm->act_edbone == eBone);
+ if (eBone->flag & BONE_SELECTED) {
+ if (is_active) {
+ return g_theme.edge_select_color;
+ }
+ else {
+ return g_theme.bone_select_color;
+ }
+ }
+ }
+ else if (arm->flag & ARM_POSEMODE) {
+ bool is_active = (arm->act_bone == pchan->bone);
+ if (pchan->bone->flag & BONE_SELECTED) {
+ if (is_active) {
+ return g_theme.bone_pose_active_color;
+ }
+ else {
+ return g_theme.bone_pose_color;
+ }
+ }
+ }
+#else
+ if (arm->drawtype == ARM_ENVELOPE) {
+ /* Edit Mode */
+ if (eBone) {
+ bool is_active = (arm->act_edbone == eBone);
+ if (eBone->flag & BONE_SELECTED) {
+ if (is_active) {
+ return g_theme.edge_select_color;
+ }
+ else {
+ return g_theme.bone_select_color;
+ }
+ }
+ }
+ else if (arm->flag & ARM_POSEMODE) {
+ bool is_active = (arm->act_bone == pchan->bone);
+ if (pchan->bone->flag & BONE_SELECTED) {
+ if (is_active) {
+ return g_theme.bone_pose_active_color;
+ }
+ else {
+ return g_theme.bone_pose_color;
+ }
+ }
+ }
+ }
+#endif
+
+ if (arm->flag & ARM_POSEMODE) {
+ float *disp_color = pchan->draw_data->solid_color;
+ set_pchan_color(PCHAN_COLOR_SOLID, boneflag, constflag, disp_color);
+ disp_color[3] = 1.0;
+ return disp_color;
+ }
+
+ return g_theme.bone_solid_color;
+}
+
+static const float *get_bone_wire_color(
+ const EditBone *eBone, const bPoseChannel *pchan, const bArmature *arm,
+ const int boneflag, const short constflag)
+{
+ if (g_theme.const_color)
+ return g_theme.const_color;
+
+ if (eBone) {
+ if (boneflag & BONE_SELECTED) {
+ if (boneflag & BONE_DRAW_ACTIVE) {
+ return g_theme.edge_select_color;
+ }
+ else {
+ return g_theme.bone_select_color;
+ }
+ }
+ else {
+ if (boneflag & BONE_DRAW_ACTIVE) {
+ return g_theme.bone_active_unselect_color;
+ }
+ else {
+ return g_theme.wire_edit_color;
+ }
+ }
+ }
+ else if (arm->flag & ARM_POSEMODE) {
+ float *disp_color = pchan->draw_data->wire_color;
+ set_pchan_color(PCHAN_COLOR_NORMAL, boneflag, constflag, disp_color);
+ disp_color[3] = 1.0;
+ return disp_color;
+
+
+#if 0
+ if (boneflag & BONE_SELECTED) {
+ if (is_active) {
+ return g_theme.bone_pose_active_color;
+ }
+ else {
+ return g_theme.bone_pose_color;
+ }
+ }
+ else {
+ if (is_active) {
+ return g_theme.bone_pose_active_unselect_color;
+ }
+ else {
+ return g_theme.wire_color;
+ }
+ }
+#endif
+ }
+
+ return g_theme.vertex_color;
+}
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Helper Utils
+ * \{ */
+
+static void pchan_draw_data_init(bPoseChannel *pchan)
+{
+ if (pchan->draw_data != NULL) {
+ if (pchan->draw_data->bbone_matrix_len != pchan->bone->segments) {
+ MEM_SAFE_FREE(pchan->draw_data);
+ }
+ }
+
+ if (pchan->draw_data == NULL) {
+ pchan->draw_data = MEM_mallocN(sizeof(*pchan->draw_data) + sizeof(Mat4) * pchan->bone->segments, __func__);
+ pchan->draw_data->bbone_matrix_len = pchan->bone->segments;
+ }
+}
+
+static void draw_bone_update_disp_matrix_default(EditBone *eBone, bPoseChannel *pchan)
+{
+ float s[4][4], ebmat[4][4];
+ float length;
+ float (*bone_mat)[4];
+ float (*disp_mat)[4];
+ float (*disp_tail_mat)[4];
+
+ /* TODO : This should be moved to depsgraph or armature refresh
+ * and not be tight to the draw pass creation.
+ * This would refresh armature without invalidating the draw cache */
+ if (pchan) {
+ length = pchan->bone->length;
+ bone_mat = pchan->pose_mat;
+ disp_mat = pchan->disp_mat;
+ disp_tail_mat = pchan->disp_tail_mat;
+ }
+ else {
+ eBone->length = len_v3v3(eBone->tail, eBone->head);
+ ED_armature_ebone_to_mat4(eBone, ebmat);
+
+ length = eBone->length;
+ bone_mat = ebmat;
+ disp_mat = eBone->disp_mat;
+ disp_tail_mat = eBone->disp_tail_mat;
+ }
+
+ scale_m4_fl(s, length);
+ mul_m4_m4m4(disp_mat, bone_mat, s);
+ copy_m4_m4(disp_tail_mat, disp_mat);
+ translate_m4(disp_tail_mat, 0.0f, 1.0f, 0.0f);
+}
+
+/* XXX Direct copy from drawarmature.c... This is ugly! */
+/* A partial copy of b_bone_spline_setup(), with just the parts for previewing editmode curve settings
+ *
+ * This assumes that prev/next bones don't have any impact (since they should all still be in the "straight"
+ * position here anyway), and that we can simply apply the bbone settings to get the desired effect...
+ */
+static void ebone_spline_preview(EditBone *ebone, float result_array[MAX_BBONE_SUBDIV][4][4])
+{
+ float h1[3], h2[3], length, hlength1, hlength2, roll1 = 0.0f, roll2 = 0.0f;
+ float mat3[3][3];
+ float data[MAX_BBONE_SUBDIV + 1][4], *fp;
+ int a;
+
+ length = ebone->length;
+
+ hlength1 = ebone->ease1 * length * 0.390464f; /* 0.5f * sqrt(2) * kappa, the handle length for near-perfect circles */
+ hlength2 = ebone->ease2 * length * 0.390464f;
+
+ /* find the handle points, since this is inside bone space, the
+ * first point = (0, 0, 0)
+ * last point = (0, length, 0)
+ *
+ * we also just apply all the "extra effects", since they're the whole reason we're doing this...
+ */
+ h1[0] = ebone->curveInX;
+ h1[1] = hlength1;
+ h1[2] = ebone->curveInY;
+ roll1 = ebone->roll1;
+
+ h2[0] = ebone->curveOutX;
+ h2[1] = -hlength2;
+ h2[2] = ebone->curveOutY;
+ roll2 = ebone->roll2;
+
+ /* make curve */
+ if (ebone->segments > MAX_BBONE_SUBDIV)
+ ebone->segments = MAX_BBONE_SUBDIV;
+
+ BKE_curve_forward_diff_bezier(0.0f, h1[0], h2[0], 0.0f, data[0], MAX_BBONE_SUBDIV, 4 * sizeof(float));
+ BKE_curve_forward_diff_bezier(0.0f, h1[1], length + h2[1], length, data[0] + 1, MAX_BBONE_SUBDIV, 4 * sizeof(float));
+ BKE_curve_forward_diff_bezier(0.0f, h1[2], h2[2], 0.0f, data[0] + 2, MAX_BBONE_SUBDIV, 4 * sizeof(float));
+ BKE_curve_forward_diff_bezier(roll1, roll1 + 0.390464f * (roll2 - roll1), roll2 - 0.390464f * (roll2 - roll1), roll2, data[0] + 3, MAX_BBONE_SUBDIV, 4 * sizeof(float));
+
+ equalize_bbone_bezier(data[0], ebone->segments); /* note: does stride 4! */
+
+ /* make transformation matrices for the segments for drawing */
+ for (a = 0, fp = data[0]; a < ebone->segments; a++, fp += 4) {
+ sub_v3_v3v3(h1, fp + 4, fp);
+ vec_roll_to_mat3(h1, fp[3], mat3); /* fp[3] is roll */
+
+ copy_m4_m3(result_array[a], mat3);
+ copy_v3_v3(result_array[a][3], fp);
+
+ /* "extra" scale facs... */
+ {
+ const int num_segments = ebone->segments;
+
+ const float scaleFactorIn = 1.0f + (ebone->scaleIn - 1.0f) * ((float)(num_segments - a) / (float)num_segments);
+ const float scaleFactorOut = 1.0f + (ebone->scaleOut - 1.0f) * ((float)(a + 1) / (float)num_segments);
+
+ const float scalefac = scaleFactorIn * scaleFactorOut;
+ float bscalemat[4][4], bscale[3];
+
+ bscale[0] = scalefac;
+ bscale[1] = 1.0f;
+ bscale[2] = scalefac;
+
+ size_to_mat4(bscalemat, bscale);
+
+ /* Note: don't multiply by inverse scale mat here, as it causes problems with scaling shearing and breaking segment chains */
+ mul_m4_series(result_array[a], result_array[a], bscalemat);
+ }
+ }
+}
+
+static void draw_bone_update_disp_matrix_bbone(EditBone *eBone, bPoseChannel *pchan)
+{
+ float s[4][4], ebmat[4][4];
+ float length, xwidth, zwidth;
+ float (*bone_mat)[4];
+ short bbone_segments;
+
+ /* TODO : This should be moved to depsgraph or armature refresh
+ * and not be tight to the draw pass creation.
+ * This would refresh armature without invalidating the draw cache */
+ if (pchan) {
+ length = pchan->bone->length;
+ xwidth = pchan->bone->xwidth;
+ zwidth = pchan->bone->zwidth;
+ bone_mat = pchan->pose_mat;
+ bbone_segments = pchan->bone->segments;
+ }
+ else {
+ eBone->length = len_v3v3(eBone->tail, eBone->head);
+ ED_armature_ebone_to_mat4(eBone, ebmat);
+
+ length = eBone->length;
+ xwidth = eBone->xwidth;
+ zwidth = eBone->zwidth;
+ bone_mat = ebmat;
+ bbone_segments = eBone->segments;
+ }
+
+ size_to_mat4(s, (const float[3]){xwidth, length / bbone_segments, zwidth});
+
+ /* Compute BBones segment matrices... */
+ /* Note that we need this even for one-segment bones, because box drawing need specific weirdo matrix for the box,
+ * that we cannot use to draw end points & co. */
+ if (pchan) {
+ Mat4 *bbones_mat = (Mat4 *)pchan->draw_data->bbone_matrix;
+ if (bbone_segments > 1) {
+ b_bone_spline_setup(pchan, 0, bbones_mat);
+
+ for (int i = bbone_segments; i--; bbones_mat++) {
+ mul_m4_m4m4(bbones_mat->mat, bbones_mat->mat, s);
+ mul_m4_m4m4(bbones_mat->mat, bone_mat, bbones_mat->mat);
+ }
+ }
+ else {
+ mul_m4_m4m4(bbones_mat->mat, bone_mat, s);
+ }
+ }
+ else {
+ float (*bbones_mat)[4][4] = eBone->disp_bbone_mat;
+
+ if (bbone_segments > 1) {
+ ebone_spline_preview(eBone, bbones_mat);
+
+ for (int i = bbone_segments; i--; bbones_mat++) {
+ mul_m4_m4m4(*bbones_mat, *bbones_mat, s);
+ mul_m4_m4m4(*bbones_mat, bone_mat, *bbones_mat);
+ }
+ }
+ else {
+ mul_m4_m4m4(*bbones_mat, bone_mat, s);
+ }
+ }
+
+ /* Grrr... We need default display matrix to draw end points, axes, etc. :( */
+ draw_bone_update_disp_matrix_default(eBone, pchan);
+}
+
+static void draw_bone_update_disp_matrix_custom(bPoseChannel *pchan)
+{
+ float s[4][4];
+ float length;
+ float (*bone_mat)[4];
+ float (*disp_mat)[4];
+ float (*disp_tail_mat)[4];
+
+ /* See TODO above */
+ length = PCHAN_CUSTOM_DRAW_SIZE(pchan);
+ bone_mat = pchan->custom_tx ? pchan->custom_tx->pose_mat : pchan->pose_mat;
+ disp_mat = pchan->disp_mat;
+ disp_tail_mat = pchan->disp_tail_mat;
+
+ scale_m4_fl(s, length);
+ mul_m4_m4m4(disp_mat, bone_mat, s);
+ copy_m4_m4(disp_tail_mat, disp_mat);
+ translate_m4(disp_tail_mat, 0.0f, 1.0f, 0.0f);
+}
+
+static void draw_axes(EditBone *eBone, bPoseChannel *pchan)
+{
+ const float *col = (g_theme.const_color) ? g_theme.const_color :
+ (BONE_FLAG(eBone, pchan) & BONE_SELECTED) ? g_theme.text_hi_color : g_theme.text_color;
+
+ drw_shgroup_bone_axes(BONE_VAR(eBone, pchan, disp_mat), col);
+}
+
+static void draw_points(
+ const EditBone *eBone, const bPoseChannel *pchan, const bArmature *arm,
+ const int boneflag, const short constflag,
+ const int select_id)
+{
+ const float *col_solid_root = g_theme.bone_solid_color;
+ const float *col_solid_tail = g_theme.bone_solid_color;
+ const float *col_wire_root = (g_theme.const_color) ? g_theme.const_color : g_theme.vertex_color;
+ const float *col_wire_tail = (g_theme.const_color) ? g_theme.const_color : g_theme.vertex_color;
+
+ const bool is_envelope_draw = (arm->drawtype == ARM_ENVELOPE);
+ static const float envelope_ignore = -1.0f;
+
+ /* Edit bone points can be selected */
+ if (eBone) {
+ if (eBone->flag & BONE_ROOTSEL) {
+#ifdef USE_SOLID_COLOR
+ col_solid_root = g_theme.vertex_select_color;
+#else
+ if (is_envelope_draw) {
+ col_solid_root = g_theme.vertex_select_color;
+ }
+#endif
+ col_wire_root = g_theme.vertex_select_color;
+ }
+ if (eBone->flag & BONE_TIPSEL) {
+#ifdef USE_SOLID_COLOR
+ col_solid_tail = g_theme.vertex_select_color;
+#else
+ if (is_envelope_draw) {
+ col_solid_tail = g_theme.vertex_select_color;
+ }
+#endif
+ col_wire_tail = g_theme.vertex_select_color;
+ }
+ }
+ else if (arm->flag & ARM_POSEMODE) {
+ col_solid_root = col_solid_tail = get_bone_solid_color(eBone, pchan, arm, boneflag, constflag);
+ col_wire_root = col_wire_tail = get_bone_wire_color(eBone, pchan, arm, boneflag, constflag);
+ }
+
+ /* Draw root point if we are not connected and parent are not hidden */
+ if ((BONE_FLAG(eBone, pchan) & BONE_CONNECTED) == 0) {
+ if (select_id != -1) {
+ DRW_select_load_id(select_id | BONESEL_ROOT);
+ }
+
+ if (eBone) {
+ if (!((eBone->parent) && !EBONE_VISIBLE(arm, eBone->parent))) {
+ if (is_envelope_draw) {
+ drw_shgroup_bone_envelope_solid(eBone->disp_mat, col_solid_root,
+ &eBone->rad_head, &envelope_ignore);
+ drw_shgroup_bone_envelope_head_wire(eBone->disp_mat, col_wire_root,
+ &eBone->rad_head, &envelope_ignore, &envelope_ignore);
+ }
+ else {
+ drw_shgroup_bone_point_solid(eBone->disp_mat, col_solid_root);
+ drw_shgroup_bone_point_wire(eBone->disp_mat, col_wire_root);
+ }
+ }
+ }
+ else {
+ Bone *bone = pchan->bone;
+ if (!((bone->parent) && (bone->parent->flag & (BONE_HIDDEN_P | BONE_HIDDEN_PG)))) {
+ if (is_envelope_draw) {
+ drw_shgroup_bone_envelope_solid(pchan->disp_mat, col_solid_root,
+ &bone->rad_head, &envelope_ignore);
+ drw_shgroup_bone_envelope_head_wire(pchan->disp_mat, col_wire_root,
+ &bone->rad_head, &envelope_ignore, &envelope_ignore);
+ }
+ else {
+ drw_shgroup_bone_point_solid(pchan->disp_mat, col_solid_root);
+ drw_shgroup_bone_point_wire(pchan->disp_mat, col_wire_root);
+ }
+ }
+ }
+ }
+
+ /* Draw tip point */
+ if (select_id != -1) {
+ DRW_select_load_id(select_id | BONESEL_TIP);
+ }
+
+ if (is_envelope_draw) {
+ const float *rad_tail = eBone ? &eBone->rad_tail : &pchan->bone->rad_tail;
+ drw_shgroup_bone_envelope_solid(
+ BONE_VAR(eBone, pchan, disp_mat), col_solid_tail, &envelope_ignore, rad_tail);
+ drw_shgroup_bone_envelope_head_wire(
+ BONE_VAR(eBone, pchan, disp_mat), col_wire_tail, &envelope_ignore, rad_tail, &envelope_ignore);
+ }
+ else {
+ drw_shgroup_bone_point_solid(BONE_VAR(eBone, pchan, disp_tail_mat), col_solid_tail);
+ drw_shgroup_bone_point_wire(BONE_VAR(eBone, pchan, disp_tail_mat), col_wire_tail);
+ }
+
+ if (select_id != -1) {
+ DRW_select_load_id(-1);
+ }
+}
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Draw Bones
+ * \{ */
+
+static void draw_bone_custom_shape(
+ EditBone *eBone, bPoseChannel *pchan, bArmature *arm,
+ const int boneflag, const short constflag,
+ const int select_id)
+{
+ const float *col_solid = get_bone_solid_color(eBone, pchan, arm, boneflag, constflag);
+ const float *col_wire = get_bone_wire_color(eBone, pchan, arm, boneflag, constflag);
+ const float (*disp_mat)[4] = pchan->disp_mat;
+
+ if (select_id != -1) {
+ DRW_select_load_id(select_id | BONESEL_BONE);
+ }
+
+ drw_shgroup_bone_custom_solid(disp_mat, col_solid, pchan->custom);
+ drw_shgroup_bone_custom_wire(disp_mat, col_wire, pchan->custom);
+
+ if (select_id != -1) {
+ DRW_select_load_id(-1);
+ }
+}
+
+static void draw_bone_envelope(
+ EditBone *eBone, bPoseChannel *pchan, bArmature *arm,
+ const int boneflag, const short constflag,
+ const int select_id)
+{
+ const float *col_solid = get_bone_solid_color(eBone, pchan, arm, boneflag, constflag);
+ const float *col_wire = get_bone_wire_color(eBone, pchan, arm, boneflag, constflag);
+
+ static const float col_white[4] = {1.0f, 1.0f, 1.0f, 0.2f};
+
+ float *rad_head, *rad_tail, *distance;
+ if (eBone) {
+ rad_tail = &eBone->rad_tail;
+ distance = &eBone->dist;
+ rad_head = (eBone->parent && (boneflag & BONE_CONNECTED)) ? &eBone->parent->rad_tail : &eBone->rad_head;
+ }
+ else {
+ rad_tail = &pchan->bone->rad_tail;
+ distance = &pchan->bone->dist;
+ rad_head = (pchan->parent && (boneflag & BONE_CONNECTED)) ? &pchan->parent->bone->rad_tail : &pchan->bone->rad_head;
+ }
+
+ if ((boneflag & BONE_NO_DEFORM) == 0 &&
+ ((boneflag & BONE_SELECTED) || (eBone && (boneflag & (BONE_ROOTSEL | BONE_TIPSEL)))))
+ {
+ drw_shgroup_bone_envelope_distance(BONE_VAR(eBone, pchan, disp_mat), col_white, rad_head, rad_tail, distance);
+ }
+
+ if (select_id != -1) {
+ DRW_select_load_id(select_id | BONESEL_BONE);
+ }
+
+ drw_shgroup_bone_envelope_solid(BONE_VAR(eBone, pchan, disp_mat), col_solid, rad_head, rad_tail);
+ drw_shgroup_bone_envelope_wire(BONE_VAR(eBone, pchan, disp_mat), col_wire, rad_head, rad_tail, distance);
+
+ if (select_id != -1) {
+ DRW_select_load_id(-1);
+ }
+
+ draw_points(eBone, pchan, arm, boneflag, constflag, select_id);
+}
+
+static void draw_bone_line(
+ EditBone *UNUSED(eBone), bPoseChannel *UNUSED(pchan), bArmature *UNUSED(arm),
+ const int UNUSED(boneflag), const short UNUSED(constflag),
+ const int UNUSED(select_id))
+{
+ /* work in progress -- fclem */
+}
+
+static void draw_bone_wire(
+ EditBone *eBone, bPoseChannel *pchan, bArmature *arm,
+ const int boneflag, const short constflag,
+ const int select_id)
+{
+ const float *col_wire = get_bone_wire_color(eBone, pchan, arm, boneflag, constflag);
+
+ if (select_id != -1) {
+ DRW_select_load_id(select_id | BONESEL_BONE);
+ }
+
+ if (pchan) {
+ Mat4 *bbones_mat = (Mat4 *)pchan->draw_data->bbone_matrix;
+ BLI_assert(bbones_mat != NULL);
+
+ for (int i = pchan->bone->segments; i--; bbones_mat++) {
+ drw_shgroup_bone_wire_wire(bbones_mat->mat, col_wire);
+ }
+ }
+ else if (eBone) {
+ for (int i = 0; i < eBone->segments; i++) {
+ drw_shgroup_bone_wire_wire(eBone->disp_bbone_mat[i], col_wire);
+ }
+ }
+
+ if (select_id != -1) {
+ DRW_select_load_id(-1);
+ }
+
+ if (eBone) {
+ draw_points(eBone, pchan, arm, boneflag, constflag, select_id);
+ }
+}
+
+static void draw_bone_box(
+ EditBone *eBone, bPoseChannel *pchan, bArmature *arm,
+ const int boneflag, const short constflag,
+ const int select_id)
+{
+ const float *col_solid = get_bone_solid_color(eBone, pchan, arm, boneflag, constflag);
+ const float *col_wire = get_bone_wire_color(eBone, pchan, arm, boneflag, constflag);
+
+ if (select_id != -1) {
+ DRW_select_load_id(select_id | BONESEL_BONE);
+ }
+
+ if (pchan) {
+ Mat4 *bbones_mat = (Mat4 *)pchan->draw_data->bbone_matrix;
+ BLI_assert(bbones_mat != NULL);
+
+ for (int i = pchan->bone->segments; i--; bbones_mat++) {
+ drw_shgroup_bone_box_solid(bbones_mat->mat, col_solid);
+ drw_shgroup_bone_box_wire(bbones_mat->mat, col_wire);
+ }
+ }
+ else if (eBone) {
+ for (int i = 0; i < eBone->segments; i++) {
+ drw_shgroup_bone_box_solid(eBone->disp_bbone_mat[i], col_solid);
+ drw_shgroup_bone_box_wire(eBone->disp_bbone_mat[i], col_wire);
+ }
+ }
+
+ if (select_id != -1) {
+ DRW_select_load_id(-1);
+ }
+
+ if (eBone) {
+ draw_points(eBone, pchan, arm, boneflag, constflag, select_id);
+ }
+}
+
+static void draw_bone_octahedral(
+ EditBone *eBone, bPoseChannel *pchan, bArmature *arm,
+ const int boneflag, const short constflag,
+ const int select_id)
+{
+ const float *col_solid = get_bone_solid_color(eBone, pchan, arm, boneflag, constflag);
+ const float *col_wire = get_bone_wire_color(eBone, pchan, arm, boneflag, constflag);
+
+ if (select_id != -1) {
+ DRW_select_load_id(select_id | BONESEL_BONE);
+ }
+
+ drw_shgroup_bone_octahedral_solid(BONE_VAR(eBone, pchan, disp_mat), col_solid);
+ drw_shgroup_bone_octahedral_wire(BONE_VAR(eBone, pchan, disp_mat), col_wire);
+
+ if (select_id != -1) {
+ DRW_select_load_id(-1);
+ }
+
+ draw_points(eBone, pchan, arm, boneflag, constflag, select_id);
+}
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Main Draw Loops
+ * \{ */
+
+static void draw_armature_edit(Object *ob)
+{
+ EditBone *eBone;
+ bArmature *arm = ob->data;
+ int index;
+ const bool is_select = DRW_state_is_select();
+
+ update_color(NULL);
+
+ const bool show_text = DRW_state_show_text();
+
+ for (eBone = arm->edbo->first, index = 0; eBone; eBone = eBone->next, index++) {
+ if (eBone->layer & arm->layer) {
+ if ((eBone->flag & BONE_HIDDEN_A) == 0) {
+ const int select_id = is_select ? index : (unsigned int)-1;
+
+ const short constflag = 0;
+
+ /* catch exception for bone with hidden parent */
+ int boneflag = eBone->flag;
+ if ((eBone->parent) && !EBONE_VISIBLE(arm, eBone->parent)) {
+ boneflag &= ~BONE_CONNECTED;
+ }
+
+ /* set temporary flag for drawing bone as active, but only if selected */
+ if (eBone == arm->act_edbone) {
+ boneflag |= BONE_DRAW_ACTIVE;
+ }
+
+ if (arm->drawtype == ARM_ENVELOPE) {
+ draw_bone_update_disp_matrix_default(eBone, NULL);
+ draw_bone_envelope(eBone, NULL, arm, boneflag, constflag, select_id);
+ }
+ else if (arm->drawtype == ARM_LINE) {
+ draw_bone_update_disp_matrix_default(eBone, NULL);
+ draw_bone_line(eBone, NULL, arm, boneflag, constflag, select_id);
+ }
+ else if (arm->drawtype == ARM_WIRE) {
+ draw_bone_update_disp_matrix_bbone(eBone, NULL);
+ draw_bone_wire(eBone, NULL, arm, boneflag, constflag, select_id);
+ }
+ else if (arm->drawtype == ARM_B_BONE) {
+ draw_bone_update_disp_matrix_bbone(eBone, NULL);
+ draw_bone_box(eBone, NULL, arm, boneflag, constflag, select_id);
+ }
+ else {
+ draw_bone_update_disp_matrix_default(eBone, NULL);
+ draw_bone_octahedral(eBone, NULL, arm, boneflag, constflag, select_id);
+ }
+
+ /* Draw names of bone */
+ if (show_text && (arm->flag & ARM_DRAWNAMES)) {
+ unsigned char color[4];
+ UI_GetThemeColor4ubv((eBone->flag & BONE_SELECTED) ? TH_TEXT_HI : TH_TEXT, color);
+
+ float vec[3];
+ mid_v3_v3v3(vec, eBone->head, eBone->tail);
+ mul_m4_v3(ob->obmat, vec);
+
+ struct DRWTextStore *dt = DRW_text_cache_ensure();
+ DRW_text_cache_add(
+ dt, vec, eBone->name, strlen(eBone->name),
+ 10, DRW_TEXT_CACHE_GLOBALSPACE | DRW_TEXT_CACHE_STRING_PTR, color);
+ }
+
+ /* Draw additional axes */
+ if (arm->flag & ARM_DRAWAXES) {
+ draw_axes(eBone, NULL);
+ }
+ }
+ }
+ }
+}
+
+/* if const_color is NULL do pose mode coloring */
+static void draw_armature_pose(Object *ob, const float const_color[4])
+{
+ bArmature *arm = ob->data;
+ bPoseChannel *pchan;
+ int index = -1;
+ Bone *bone;
+
+ update_color(const_color);
+
+ /* We can't safely draw non-updated pose, might contain NULL bone pointers... */
+ if (ob->pose->flag & POSE_RECALC) {
+ BKE_pose_rebuild(ob, arm);
+ }
+
+ // if (!(base->flag & OB_FROMDUPLI)) // TODO
+ {
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+
+ if ((draw_ctx->object_mode & OB_MODE_POSE) || (ob == draw_ctx->object_pose)) {
+ arm->flag |= ARM_POSEMODE;
+ }
+
+ if (arm->flag & ARM_POSEMODE) {
+ index = ob->select_color;
+ }
+ }
+
+ const bool is_pose_select = (arm->flag & ARM_POSEMODE) && DRW_state_is_select();
+ const bool show_text = DRW_state_show_text();
+
+ /* being set below */
+ arm->layer_used = 0;
+
+ for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) {
+ bone = pchan->bone;
+ arm->layer_used |= bone->layer;
+
+ /* bone must be visible */
+ if ((bone->flag & (BONE_HIDDEN_P | BONE_HIDDEN_PG)) == 0) {
+ if (bone->layer & arm->layer) {
+ const int select_id = is_pose_select ? index : (unsigned int)-1;
+
+ const short constflag = pchan->constflag;
+
+ pchan_draw_data_init(pchan);
+
+ if (const_color) {
+ /* keep color */
+ }
+ else {
+ /* set color-set to use */
+ set_pchan_colorset(ob, pchan);
+ }
+
+ int boneflag = bone->flag;
+ /* catch exception for bone with hidden parent */
+ boneflag = bone->flag;
+ if ((bone->parent) && (bone->parent->flag & (BONE_HIDDEN_P | BONE_HIDDEN_PG))) {
+ boneflag &= ~BONE_CONNECTED;
+ }
+
+ /* set temporary flag for drawing bone as active, but only if selected */
+ if (bone == arm->act_bone)
+ boneflag |= BONE_DRAW_ACTIVE;
+
+
+ if ((pchan->custom) && !(arm->flag & ARM_NO_CUSTOM)) {
+ draw_bone_update_disp_matrix_custom(pchan);
+ draw_bone_custom_shape(NULL, pchan, arm, boneflag, constflag, select_id);
+ }
+ else if (arm->drawtype == ARM_ENVELOPE) {
+ draw_bone_update_disp_matrix_default(NULL, pchan);
+ draw_bone_envelope(NULL, pchan, arm, boneflag, constflag, select_id);
+ }
+ else if (arm->drawtype == ARM_LINE) {
+ draw_bone_update_disp_matrix_default(NULL, pchan);
+ draw_bone_line(NULL, pchan, arm, boneflag, constflag, select_id);
+ }
+ else if (arm->drawtype == ARM_WIRE) {
+ draw_bone_update_disp_matrix_bbone(NULL, pchan);
+ draw_bone_wire(NULL, pchan, arm, boneflag, constflag, select_id);
+ }
+ else if (arm->drawtype == ARM_B_BONE) {
+ draw_bone_update_disp_matrix_bbone(NULL, pchan);
+ draw_bone_box(NULL, pchan, arm, boneflag, constflag, select_id);
+ }
+ else {
+ draw_bone_update_disp_matrix_default(NULL, pchan);
+ draw_bone_octahedral(NULL, pchan, arm, boneflag, constflag, select_id);
+ }
+
+ /* Draw names of bone */
+ if (show_text && (arm->flag & ARM_DRAWNAMES)) {
+ unsigned char color[4];
+ UI_GetThemeColor4ubv((arm->flag & ARM_POSEMODE) &&
+ (bone->flag & BONE_SELECTED) ? TH_TEXT_HI : TH_TEXT, color);
+ float vec[3];
+ mid_v3_v3v3(vec, pchan->pose_head, pchan->pose_tail);
+ mul_m4_v3(ob->obmat, vec);
+
+ struct DRWTextStore *dt = DRW_text_cache_ensure();
+ DRW_text_cache_add(
+ dt, vec, pchan->name, strlen(pchan->name),
+ 10, DRW_TEXT_CACHE_GLOBALSPACE | DRW_TEXT_CACHE_STRING_PTR, color);
+ }
+
+ /* Draw additional axes */
+ if (arm->flag & ARM_DRAWAXES) {
+ draw_axes(NULL, pchan);
+ }
+ }
+ }
+ if (is_pose_select) {
+ index += 0x10000;
+ }
+ }
+
+ arm->flag &= ~ARM_POSEMODE;
+}
+
+/**
+ * This function set the object space to use for all subsequent `DRW_shgroup_bone_*` calls.
+ */
+static void drw_shgroup_armature(
+ Object *ob, DRWPass *pass_bone_solid, DRWPass *pass_bone_wire, DRWPass *pass_bone_envelope,
+ DRWShadingGroup *shgrp_relationship_lines)
+{
+ memset(&g_data, 0x0, sizeof(g_data));
+ g_data.ob = ob;
+
+ g_data.pass_bone_solid = pass_bone_solid;
+ g_data.pass_bone_wire = pass_bone_wire;
+ g_data.pass_bone_envelope = pass_bone_envelope;
+ g_data.relationship_lines = shgrp_relationship_lines;
+
+ memset(&g_color, 0x0, sizeof(g_color));
+}
+
+void DRW_shgroup_armature_object(
+ Object *ob, ViewLayer *view_layer, DRWPass *pass_bone_solid, DRWPass *pass_bone_wire, DRWPass *UNUSED(pass_bone_envelope),
+ DRWShadingGroup *shgrp_relationship_lines)
+{
+ float *color;
+ DRW_object_wire_theme_get(ob, view_layer, &color);
+
+ drw_shgroup_armature(ob, pass_bone_solid, pass_bone_wire, NULL, shgrp_relationship_lines);
+ draw_armature_pose(ob, color);
+}
+
+void DRW_shgroup_armature_pose(
+ Object *ob, DRWPass *pass_bone_solid, DRWPass *pass_bone_wire, DRWPass *pass_bone_envelope,
+ DRWShadingGroup *shgrp_relationship_lines)
+{
+ drw_shgroup_armature(ob, pass_bone_solid, pass_bone_wire, pass_bone_envelope, shgrp_relationship_lines);
+ draw_armature_pose(ob, NULL);
+}
+
+void DRW_shgroup_armature_edit(
+ Object *ob, DRWPass *pass_bone_solid, DRWPass *pass_bone_wire, DRWPass *pass_bone_envelope,
+ DRWShadingGroup *shgrp_relationship_lines)
+{
+ drw_shgroup_armature(ob, pass_bone_solid, pass_bone_wire, pass_bone_envelope, shgrp_relationship_lines);
+ draw_armature_edit(ob);
+}
+
+/** \} */
diff --git a/source/blender/draw/intern/draw_cache.c b/source/blender/draw/intern/draw_cache.c
new file mode 100644
index 00000000000..3b4180c0375
--- /dev/null
+++ b/source/blender/draw/intern/draw_cache.c
@@ -0,0 +1,2708 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file draw_cache.c
+ * \ingroup draw
+ */
+
+
+#include "DNA_scene_types.h"
+#include "DNA_mesh_types.h"
+#include "DNA_curve_types.h"
+#include "DNA_object_types.h"
+#include "DNA_particle_types.h"
+#include "DNA_modifier_types.h"
+#include "DNA_lattice_types.h"
+
+#include "BLI_utildefines.h"
+#include "BLI_math.h"
+
+#include "GPU_batch.h"
+
+#include "draw_cache.h"
+#include "draw_cache_impl.h"
+
+/* Batch's only (free'd as an array) */
+static struct DRWShapeCache {
+ Gwn_Batch *drw_single_vertice;
+ Gwn_Batch *drw_fullscreen_quad;
+ Gwn_Batch *drw_quad;
+ Gwn_Batch *drw_screenspace_circle;
+ Gwn_Batch *drw_plain_axes;
+ Gwn_Batch *drw_single_arrow;
+ Gwn_Batch *drw_cube;
+ Gwn_Batch *drw_circle;
+ Gwn_Batch *drw_square;
+ Gwn_Batch *drw_line;
+ Gwn_Batch *drw_line_endpoints;
+ Gwn_Batch *drw_empty_sphere;
+ Gwn_Batch *drw_empty_cone;
+ Gwn_Batch *drw_arrows;
+ Gwn_Batch *drw_axis_names;
+ Gwn_Batch *drw_image_plane;
+ Gwn_Batch *drw_image_plane_wire;
+ Gwn_Batch *drw_field_wind;
+ Gwn_Batch *drw_field_force;
+ Gwn_Batch *drw_field_vortex;
+ Gwn_Batch *drw_field_tube_limit;
+ Gwn_Batch *drw_field_cone_limit;
+ Gwn_Batch *drw_lamp;
+ Gwn_Batch *drw_lamp_shadows;
+ Gwn_Batch *drw_lamp_sunrays;
+ Gwn_Batch *drw_lamp_area;
+ Gwn_Batch *drw_lamp_hemi;
+ Gwn_Batch *drw_lamp_spot;
+ Gwn_Batch *drw_lamp_spot_square;
+ Gwn_Batch *drw_speaker;
+ Gwn_Batch *drw_lightprobe_cube;
+ Gwn_Batch *drw_lightprobe_planar;
+ Gwn_Batch *drw_lightprobe_grid;
+ Gwn_Batch *drw_bone_octahedral;
+ Gwn_Batch *drw_bone_octahedral_wire;
+ Gwn_Batch *drw_bone_box;
+ Gwn_Batch *drw_bone_box_wire;
+ Gwn_Batch *drw_bone_wire_wire;
+ Gwn_Batch *drw_bone_envelope;
+ Gwn_Batch *drw_bone_envelope_distance;
+ Gwn_Batch *drw_bone_envelope_wire;
+ Gwn_Batch *drw_bone_envelope_head_wire;
+ Gwn_Batch *drw_bone_point;
+ Gwn_Batch *drw_bone_point_wire;
+ Gwn_Batch *drw_bone_arrows;
+ Gwn_Batch *drw_camera;
+ Gwn_Batch *drw_camera_frame;
+ Gwn_Batch *drw_camera_tria;
+ Gwn_Batch *drw_camera_focus;
+ Gwn_Batch *drw_particle_cross;
+ Gwn_Batch *drw_particle_circle;
+ Gwn_Batch *drw_particle_axis;
+} SHC = {NULL};
+
+void DRW_shape_cache_free(void)
+{
+ uint i = sizeof(SHC) / sizeof(Gwn_Batch *);
+ Gwn_Batch **batch = (Gwn_Batch **)&SHC;
+ while (i--) {
+ GWN_BATCH_DISCARD_SAFE(*batch);
+ batch++;
+ }
+}
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Helper functions
+ * \{ */
+
+static void add_fancy_edge(
+ Gwn_VertBuf *vbo, unsigned int pos_id, unsigned int n1_id, unsigned int n2_id,
+ unsigned int *v_idx, const float co1[3], const float co2[3],
+const float n1[3], const float n2[3])
+{
+ GWN_vertbuf_attr_set(vbo, n1_id, *v_idx, n1);
+ GWN_vertbuf_attr_set(vbo, n2_id, *v_idx, n2);
+ GWN_vertbuf_attr_set(vbo, pos_id, (*v_idx)++, co1);
+
+ GWN_vertbuf_attr_set(vbo, n1_id, *v_idx, n1);
+ GWN_vertbuf_attr_set(vbo, n2_id, *v_idx, n2);
+ GWN_vertbuf_attr_set(vbo, pos_id, (*v_idx)++, co2);
+}
+
+static void add_lat_lon_vert(
+ Gwn_VertBuf *vbo, unsigned int pos_id, unsigned int nor_id,
+ unsigned int *v_idx, const float rad, const float lat, const float lon)
+{
+ float pos[3], nor[3];
+ nor[0] = sinf(lat) * cosf(lon);
+ nor[1] = cosf(lat);
+ nor[2] = sinf(lat) * sinf(lon);
+ mul_v3_v3fl(pos, nor, rad);
+
+ GWN_vertbuf_attr_set(vbo, nor_id, *v_idx, nor);
+ GWN_vertbuf_attr_set(vbo, pos_id, (*v_idx)++, pos);
+}
+
+static Gwn_VertBuf *fill_arrows_vbo(const float scale)
+{
+ /* Position Only 3D format */
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ /* Line */
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, 6 * 3);
+
+ float v1[3] = {0.0, 0.0, 0.0};
+ float v2[3] = {0.0, 0.0, 0.0};
+ float vtmp1[3], vtmp2[3];
+
+ for (int axis = 0; axis < 3; axis++) {
+ const int arrow_axis = (axis == 0) ? 1 : 0;
+
+ v2[axis] = 1.0f;
+ mul_v3_v3fl(vtmp1, v1, scale);
+ mul_v3_v3fl(vtmp2, v2, scale);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, axis * 6 + 0, vtmp1);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, axis * 6 + 1, vtmp2);
+
+ v1[axis] = 0.85f;
+ v1[arrow_axis] = -0.08f;
+ mul_v3_v3fl(vtmp1, v1, scale);
+ mul_v3_v3fl(vtmp2, v2, scale);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, axis * 6 + 2, vtmp1);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, axis * 6 + 3, vtmp2);
+
+ v1[arrow_axis] = 0.08f;
+ mul_v3_v3fl(vtmp1, v1, scale);
+ mul_v3_v3fl(vtmp2, v2, scale);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, axis * 6 + 4, vtmp1);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, axis * 6 + 5, vtmp2);
+
+ /* reset v1 & v2 to zero */
+ v1[arrow_axis] = v1[axis] = v2[axis] = 0.0f;
+ }
+
+ return vbo;
+}
+
+static Gwn_VertBuf *sphere_wire_vbo(const float rad)
+{
+#define NSEGMENTS 32
+ /* Position Only 3D format */
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, NSEGMENTS * 2 * 3);
+
+ /* a single ring of vertices */
+ float p[NSEGMENTS][2];
+ for (int i = 0; i < NSEGMENTS; ++i) {
+ float angle = 2 * M_PI * ((float)i / (float)NSEGMENTS);
+ p[i][0] = rad * cosf(angle);
+ p[i][1] = rad * sinf(angle);
+ }
+
+ for (int axis = 0; axis < 3; ++axis) {
+ for (int i = 0; i < NSEGMENTS; ++i) {
+ for (int j = 0; j < 2; ++j) {
+ float cv[2], v[3];
+
+ cv[0] = p[(i + j) % NSEGMENTS][0];
+ cv[1] = p[(i + j) % NSEGMENTS][1];
+
+ if (axis == 0)
+ v[0] = cv[0], v[1] = cv[1], v[2] = 0.0f;
+ else if (axis == 1)
+ v[0] = cv[0], v[1] = 0.0f, v[2] = cv[1];
+ else
+ v[0] = 0.0f, v[1] = cv[0], v[2] = cv[1];
+
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, i * 2 + j + (NSEGMENTS * 2 * axis), v);
+ }
+ }
+ }
+
+ return vbo;
+#undef NSEGMENTS
+}
+
+/* Quads */
+/* Use this one for rendering fullscreen passes. For 3D objects use DRW_cache_quad_get(). */
+Gwn_Batch *DRW_cache_fullscreen_quad_get(void)
+{
+ if (!SHC.drw_fullscreen_quad) {
+ /* Use a triangle instead of a real quad */
+ /* https://www.slideshare.net/DevCentralAMD/vertex-shader-tricks-bill-bilodeau - slide 14 */
+ float pos[3][2] = {{-1.0f, -1.0f}, { 3.0f, -1.0f}, {-1.0f, 3.0f}};
+ float uvs[3][2] = {{ 0.0f, 0.0f}, { 2.0f, 0.0f}, { 0.0f, 2.0f}};
+
+ /* Position Only 2D format */
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos, uvs; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ attr_id.uvs = GWN_vertformat_attr_add(&format, "uvs", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, 3);
+
+ for (int i = 0; i < 3; ++i) {
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, i, pos[i]);
+ GWN_vertbuf_attr_set(vbo, attr_id.uvs, i, uvs[i]);
+ }
+
+ SHC.drw_fullscreen_quad = GWN_batch_create_ex(GWN_PRIM_TRIS, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_fullscreen_quad;
+}
+
+/* Just a regular quad with 4 vertices. */
+Gwn_Batch *DRW_cache_quad_get(void)
+{
+ if (!SHC.drw_quad) {
+ /* Use a triangle instead of a real quad */
+ float pos[4][2] = {{-1.0f, -1.0f}, { 1.0f, -1.0f}, {1.0f, 1.0f}, {-1.0f, 1.0f}};
+ float uvs[4][2] = {{ 0.0f, 0.0f}, { 1.0f, 0.0f}, {1.0f, 1.0f}, { 0.0f, 1.0f}};
+
+ /* Position Only 2D format */
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos, uvs; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ attr_id.uvs = GWN_vertformat_attr_add(&format, "uvs", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, 4);
+
+ for (int i = 0; i < 4; ++i) {
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, i, pos[i]);
+ GWN_vertbuf_attr_set(vbo, attr_id.uvs, i, uvs[i]);
+ }
+
+ SHC.drw_quad = GWN_batch_create_ex(GWN_PRIM_TRI_FAN, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_quad;
+}
+
+/* Sphere */
+Gwn_Batch *DRW_cache_sphere_get(void)
+{
+ return GPU_batch_preset_sphere(2);
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+
+/** \name Common
+ * \{ */
+
+Gwn_Batch *DRW_cache_cube_get(void)
+{
+ if (!SHC.drw_cube) {
+ const GLfloat verts[8][3] = {
+ {-1.0f, -1.0f, -1.0f},
+ {-1.0f, -1.0f, 1.0f},
+ {-1.0f, 1.0f, -1.0f},
+ {-1.0f, 1.0f, 1.0f},
+ { 1.0f, -1.0f, -1.0f},
+ { 1.0f, -1.0f, 1.0f},
+ { 1.0f, 1.0f, -1.0f},
+ { 1.0f, 1.0f, 1.0f}
+ };
+
+ const GLubyte indices[24] = {0, 1, 1, 3, 3, 2, 2, 0, 0, 4, 4, 5, 5, 7, 7, 6, 6, 4, 1, 5, 3, 7, 2, 6};
+
+ /* Position Only 3D format */
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, 24);
+
+ for (int i = 0; i < 24; ++i) {
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, i, verts[indices[i]]);
+ }
+
+ SHC.drw_cube = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_cube;
+}
+
+Gwn_Batch *DRW_cache_circle_get(void)
+{
+#define CIRCLE_RESOL 32
+ if (!SHC.drw_circle) {
+ float v[3] = {0.0f, 0.0f, 0.0f};
+
+ /* Position Only 3D format */
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, CIRCLE_RESOL * 2);
+
+ for (int a = 0; a < CIRCLE_RESOL; a++) {
+ v[0] = sinf((2.0f * M_PI * a) / ((float)CIRCLE_RESOL));
+ v[2] = cosf((2.0f * M_PI * a) / ((float)CIRCLE_RESOL));
+ v[1] = 0.0f;
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, a * 2, v);
+
+ v[0] = sinf((2.0f * M_PI * (a + 1)) / ((float)CIRCLE_RESOL));
+ v[2] = cosf((2.0f * M_PI * (a + 1)) / ((float)CIRCLE_RESOL));
+ v[1] = 0.0f;
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, a * 2 + 1, v);
+ }
+
+ SHC.drw_circle = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_circle;
+#undef CIRCLE_RESOL
+}
+
+Gwn_Batch *DRW_cache_square_get(void)
+{
+ if (!SHC.drw_square) {
+ float p[4][3] = {{ 1.0f, 0.0f, 1.0f},
+ { 1.0f, 0.0f, -1.0f},
+ {-1.0f, 0.0f, -1.0f},
+ {-1.0f, 0.0f, 1.0f}};
+
+ /* Position Only 3D format */
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, 8);
+
+ for (int i = 0; i < 4; i++) {
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, i * 2, p[i % 4]);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, i * 2 + 1, p[(i + 1) % 4]);
+ }
+
+ SHC.drw_square = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_square;
+}
+
+Gwn_Batch *DRW_cache_single_line_get(void)
+{
+ /* Z axis line */
+ if (!SHC.drw_line) {
+ float v1[3] = {0.0f, 0.0f, 0.0f};
+ float v2[3] = {0.0f, 0.0f, 1.0f};
+
+ /* Position Only 3D format */
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, 2);
+
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, 0, v1);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, 1, v2);
+
+ SHC.drw_line = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_line;
+}
+
+Gwn_Batch *DRW_cache_single_line_endpoints_get(void)
+{
+ /* Z axis line */
+ if (!SHC.drw_line_endpoints) {
+ float v1[3] = {0.0f, 0.0f, 0.0f};
+ float v2[3] = {0.0f, 0.0f, 1.0f};
+
+ /* Position Only 3D format */
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, 2);
+
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, 0, v1);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, 1, v2);
+
+ SHC.drw_line_endpoints = GWN_batch_create_ex(GWN_PRIM_POINTS, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_line_endpoints;
+}
+
+Gwn_Batch *DRW_cache_screenspace_circle_get(void)
+{
+#define CIRCLE_RESOL 32
+ if (!SHC.drw_screenspace_circle) {
+ float v[3] = {0.0f, 0.0f, 0.0f};
+
+ /* Position Only 3D format */
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, CIRCLE_RESOL + 1);
+
+ for (int a = 0; a <= CIRCLE_RESOL; a++) {
+ v[0] = sinf((2.0f * M_PI * a) / ((float)CIRCLE_RESOL));
+ v[1] = cosf((2.0f * M_PI * a) / ((float)CIRCLE_RESOL));
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, a, v);
+ }
+
+ SHC.drw_screenspace_circle = GWN_batch_create_ex(GWN_PRIM_LINE_STRIP, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_screenspace_circle;
+#undef CIRCLE_RESOL
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+
+/** \name Common Object API
+ * \{ */
+
+Gwn_Batch *DRW_cache_object_wire_outline_get(Object *ob)
+{
+ switch (ob->type) {
+ case OB_MESH:
+ return DRW_cache_mesh_wire_outline_get(ob);
+
+ /* TODO, should match 'DRW_cache_object_surface_get' */
+ default:
+ return NULL;
+ }
+}
+
+Gwn_Batch *DRW_cache_object_surface_get(Object *ob)
+{
+ switch (ob->type) {
+ case OB_MESH:
+ return DRW_cache_mesh_surface_get(ob);
+ case OB_CURVE:
+ return DRW_cache_curve_surface_get(ob);
+ case OB_SURF:
+ return DRW_cache_surf_surface_get(ob);
+ case OB_FONT:
+ return DRW_cache_text_surface_get(ob);
+ case OB_MBALL:
+ return DRW_cache_mball_surface_get(ob);
+ default:
+ return NULL;
+ }
+}
+
+Gwn_Batch **DRW_cache_object_surface_material_get(
+ struct Object *ob, struct GPUMaterial **gpumat_array, uint gpumat_array_len)
+{
+ switch (ob->type) {
+ case OB_MESH:
+ return DRW_cache_mesh_surface_shaded_get(ob, gpumat_array, gpumat_array_len);
+ case OB_CURVE:
+ return DRW_cache_curve_surface_shaded_get(ob, gpumat_array, gpumat_array_len);
+ case OB_SURF:
+ return DRW_cache_surf_surface_shaded_get(ob, gpumat_array, gpumat_array_len);
+ case OB_FONT:
+ return DRW_cache_text_surface_shaded_get(ob, gpumat_array, gpumat_array_len);
+ default:
+ return NULL;
+ }
+}
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Empties
+ * \{ */
+
+Gwn_Batch *DRW_cache_plain_axes_get(void)
+{
+ if (!SHC.drw_plain_axes) {
+ int axis;
+ float v1[3] = {0.0f, 0.0f, 0.0f};
+ float v2[3] = {0.0f, 0.0f, 0.0f};
+
+ /* Position Only 3D format */
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, 6);
+
+ for (axis = 0; axis < 3; axis++) {
+ v1[axis] = 1.0f;
+ v2[axis] = -1.0f;
+
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, axis * 2, v1);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, axis * 2 + 1, v2);
+
+ /* reset v1 & v2 to zero for next axis */
+ v1[axis] = v2[axis] = 0.0f;
+ }
+
+ SHC.drw_plain_axes = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_plain_axes;
+}
+
+Gwn_Batch *DRW_cache_single_arrow_get(void)
+{
+ if (!SHC.drw_single_arrow) {
+ float v1[3] = {0.0f, 0.0f, 1.0f}, v2[3], v3[3];
+
+ /* Position Only 3D format */
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ /* Square Pyramid */
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, 12);
+
+ v2[0] = 0.035f; v2[1] = 0.035f;
+ v3[0] = -0.035f; v3[1] = 0.035f;
+ v2[2] = v3[2] = 0.75f;
+
+ for (int sides = 0; sides < 4; sides++) {
+ if (sides % 2 == 1) {
+ v2[0] = -v2[0];
+ v3[1] = -v3[1];
+ }
+ else {
+ v2[1] = -v2[1];
+ v3[0] = -v3[0];
+ }
+
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, sides * 3 + 0, v1);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, sides * 3 + 1, v2);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, sides * 3 + 2, v3);
+ }
+
+ SHC.drw_single_arrow = GWN_batch_create_ex(GWN_PRIM_TRIS, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_single_arrow;
+}
+
+Gwn_Batch *DRW_cache_empty_sphere_get(void)
+{
+ if (!SHC.drw_empty_sphere) {
+ Gwn_VertBuf *vbo = sphere_wire_vbo(1.0f);
+ SHC.drw_empty_sphere = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_empty_sphere;
+}
+
+Gwn_Batch *DRW_cache_empty_cone_get(void)
+{
+#define NSEGMENTS 8
+ if (!SHC.drw_empty_cone) {
+ /* a single ring of vertices */
+ float p[NSEGMENTS][2];
+ for (int i = 0; i < NSEGMENTS; ++i) {
+ float angle = 2 * M_PI * ((float)i / (float)NSEGMENTS);
+ p[i][0] = cosf(angle);
+ p[i][1] = sinf(angle);
+ }
+
+ /* Position Only 3D format */
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, NSEGMENTS * 4);
+
+ for (int i = 0; i < NSEGMENTS; ++i) {
+ float cv[2], v[3];
+ cv[0] = p[(i) % NSEGMENTS][0];
+ cv[1] = p[(i) % NSEGMENTS][1];
+
+ /* cone sides */
+ v[0] = cv[0], v[1] = 0.0f, v[2] = cv[1];
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, i * 4, v);
+ v[0] = 0.0f, v[1] = 2.0f, v[2] = 0.0f;
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, i * 4 + 1, v);
+
+ /* end ring */
+ v[0] = cv[0], v[1] = 0.0f, v[2] = cv[1];
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, i * 4 + 2, v);
+ cv[0] = p[(i + 1) % NSEGMENTS][0];
+ cv[1] = p[(i + 1) % NSEGMENTS][1];
+ v[0] = cv[0], v[1] = 0.0f, v[2] = cv[1];
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, i * 4 + 3, v);
+ }
+
+ SHC.drw_empty_cone = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_empty_cone;
+#undef NSEGMENTS
+}
+
+Gwn_Batch *DRW_cache_arrows_get(void)
+{
+ if (!SHC.drw_arrows) {
+ Gwn_VertBuf *vbo = fill_arrows_vbo(1.0f);
+
+ SHC.drw_arrows = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_arrows;
+}
+
+Gwn_Batch *DRW_cache_axis_names_get(void)
+{
+ if (!SHC.drw_axis_names) {
+ const float size = 0.1f;
+ float v1[3], v2[3];
+
+ /* Position Only 3D format */
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ /* Using 3rd component as axis indicator */
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ /* Line */
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, 14);
+
+ /* X */
+ copy_v3_fl3(v1, -size, size, 0.0f);
+ copy_v3_fl3(v2, size, -size, 0.0f);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, 0, v1);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, 1, v2);
+
+ copy_v3_fl3(v1, size, size, 0.0f);
+ copy_v3_fl3(v2, -size, -size, 0.0f);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, 2, v1);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, 3, v2);
+
+ /* Y */
+ copy_v3_fl3(v1, -size + 0.25f * size, size, 1.0f);
+ copy_v3_fl3(v2, 0.0f, 0.0f, 1.0f);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, 4, v1);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, 5, v2);
+
+ copy_v3_fl3(v1, size - 0.25f * size, size, 1.0f);
+ copy_v3_fl3(v2, -size + 0.25f * size, -size, 1.0f);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, 6, v1);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, 7, v2);
+
+ /* Z */
+ copy_v3_fl3(v1, -size, size, 2.0f);
+ copy_v3_fl3(v2, size, size, 2.0f);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, 8, v1);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, 9, v2);
+
+ copy_v3_fl3(v1, size, size, 2.0f);
+ copy_v3_fl3(v2, -size, -size, 2.0f);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, 10, v1);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, 11, v2);
+
+ copy_v3_fl3(v1, -size, -size, 2.0f);
+ copy_v3_fl3(v2, size, -size, 2.0f);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, 12, v1);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, 13, v2);
+
+ SHC.drw_axis_names = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_axis_names;
+}
+
+Gwn_Batch *DRW_cache_image_plane_get(void)
+{
+ if (!SHC.drw_image_plane) {
+ const float quad[4][2] = {{0, 0}, {1, 0}, {1, 1}, {0, 1}};
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos, texCoords; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ attr_id.texCoords = GWN_vertformat_attr_add(&format, "texCoord", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ }
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, 4);
+ for (uint j = 0; j < 4; j++) {
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, j, quad[j]);
+ GWN_vertbuf_attr_set(vbo, attr_id.texCoords, j, quad[j]);
+ }
+ SHC.drw_image_plane = GWN_batch_create_ex(GWN_PRIM_TRI_FAN, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_image_plane;
+}
+
+Gwn_Batch *DRW_cache_image_plane_wire_get(void)
+{
+ if (!SHC.drw_image_plane_wire) {
+ const float quad[4][2] = {{0, 0}, {1, 0}, {1, 1}, {0, 1}};
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ }
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, 4);
+ for (uint j = 0; j < 4; j++) {
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, j, quad[j]);
+ }
+ SHC.drw_image_plane_wire = GWN_batch_create_ex(GWN_PRIM_LINE_LOOP, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_image_plane_wire;
+}
+
+/* Force Field */
+Gwn_Batch *DRW_cache_field_wind_get(void)
+{
+#define CIRCLE_RESOL 32
+ if (!SHC.drw_field_wind) {
+ float v[3] = {0.0f, 0.0f, 0.0f};
+
+ /* Position Only 3D format */
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, CIRCLE_RESOL * 2 * 4);
+
+ for (int i = 0; i < 4; i++) {
+ float z = 0.05f * (float)i;
+ for (int a = 0; a < CIRCLE_RESOL; a++) {
+ v[0] = sinf((2.0f * M_PI * a) / ((float)CIRCLE_RESOL));
+ v[1] = cosf((2.0f * M_PI * a) / ((float)CIRCLE_RESOL));
+ v[2] = z;
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, i * CIRCLE_RESOL * 2 + a * 2, v);
+
+ v[0] = sinf((2.0f * M_PI * (a + 1)) / ((float)CIRCLE_RESOL));
+ v[1] = cosf((2.0f * M_PI * (a + 1)) / ((float)CIRCLE_RESOL));
+ v[2] = z;
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, i * CIRCLE_RESOL * 2 + a * 2 + 1, v);
+ }
+ }
+
+ SHC.drw_field_wind = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_field_wind;
+#undef CIRCLE_RESOL
+}
+
+Gwn_Batch *DRW_cache_field_force_get(void)
+{
+#define CIRCLE_RESOL 32
+ if (!SHC.drw_field_force) {
+ float v[3] = {0.0f, 0.0f, 0.0f};
+
+ /* Position Only 3D format */
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, CIRCLE_RESOL * 2 * 3);
+
+ for (int i = 0; i < 3; i++) {
+ float radius = 1.0f + 0.5f * (float)i;
+ for (int a = 0; a < CIRCLE_RESOL; a++) {
+ v[0] = radius * sinf((2.0f * M_PI * a) / ((float)CIRCLE_RESOL));
+ v[1] = radius * cosf((2.0f * M_PI * a) / ((float)CIRCLE_RESOL));
+ v[2] = 0.0f;
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, i * CIRCLE_RESOL * 2 + a * 2, v);
+
+ v[0] = radius * sinf((2.0f * M_PI * (a + 1)) / ((float)CIRCLE_RESOL));
+ v[1] = radius * cosf((2.0f * M_PI * (a + 1)) / ((float)CIRCLE_RESOL));
+ v[2] = 0.0f;
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, i * CIRCLE_RESOL * 2 + a * 2 + 1, v);
+ }
+ }
+
+ SHC.drw_field_force = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_field_force;
+#undef CIRCLE_RESOL
+}
+
+Gwn_Batch *DRW_cache_field_vortex_get(void)
+{
+#define SPIRAL_RESOL 32
+ if (!SHC.drw_field_vortex) {
+ float v[3] = {0.0f, 0.0f, 0.0f};
+ unsigned int v_idx = 0;
+
+ /* Position Only 3D format */
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, SPIRAL_RESOL * 2 + 1);
+
+ for (int a = SPIRAL_RESOL; a > -1; a--) {
+ v[0] = sinf((2.0f * M_PI * a) / ((float)SPIRAL_RESOL)) * (a / (float)SPIRAL_RESOL);
+ v[1] = cosf((2.0f * M_PI * a) / ((float)SPIRAL_RESOL)) * (a / (float)SPIRAL_RESOL);
+
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, v);
+ }
+
+ for (int a = 1; a <= SPIRAL_RESOL; a++) {
+ v[0] = -sinf((2.0f * M_PI * a) / ((float)SPIRAL_RESOL)) * (a / (float)SPIRAL_RESOL);
+ v[1] = -cosf((2.0f * M_PI * a) / ((float)SPIRAL_RESOL)) * (a / (float)SPIRAL_RESOL);
+
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, v);
+ }
+
+ SHC.drw_field_vortex = GWN_batch_create_ex(GWN_PRIM_LINE_STRIP, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_field_vortex;
+#undef SPIRAL_RESOL
+}
+
+Gwn_Batch *DRW_cache_field_tube_limit_get(void)
+{
+#define CIRCLE_RESOL 32
+ if (!SHC.drw_field_tube_limit) {
+ float v[3] = {0.0f, 0.0f, 0.0f};
+ unsigned int v_idx = 0;
+
+ /* Position Only 3D format */
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, CIRCLE_RESOL * 2 * 2 + 8);
+
+ /* Caps */
+ for (int i = 0; i < 2; i++) {
+ float z = (float)i * 2.0f - 1.0f;
+ for (int a = 0; a < CIRCLE_RESOL; a++) {
+ v[0] = sinf((2.0f * M_PI * a) / ((float)CIRCLE_RESOL));
+ v[1] = cosf((2.0f * M_PI * a) / ((float)CIRCLE_RESOL));
+ v[2] = z;
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, v);
+
+ v[0] = sinf((2.0f * M_PI * (a + 1)) / ((float)CIRCLE_RESOL));
+ v[1] = cosf((2.0f * M_PI * (a + 1)) / ((float)CIRCLE_RESOL));
+ v[2] = z;
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, v);
+ }
+ }
+ /* Side Edges */
+ for (int a = 0; a < 4; a++) {
+ for (int i = 0; i < 2; i++) {
+ float z = (float)i * 2.0f - 1.0f;
+ v[0] = sinf((2.0f * M_PI * a) / 4.0f);
+ v[1] = cosf((2.0f * M_PI * a) / 4.0f);
+ v[2] = z;
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, v);
+ }
+ }
+
+ SHC.drw_field_tube_limit = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_field_tube_limit;
+#undef CIRCLE_RESOL
+}
+
+Gwn_Batch *DRW_cache_field_cone_limit_get(void)
+{
+#define CIRCLE_RESOL 32
+ if (!SHC.drw_field_cone_limit) {
+ float v[3] = {0.0f, 0.0f, 0.0f};
+ unsigned int v_idx = 0;
+
+ /* Position Only 3D format */
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, CIRCLE_RESOL * 2 * 2 + 8);
+
+ /* Caps */
+ for (int i = 0; i < 2; i++) {
+ float z = (float)i * 2.0f - 1.0f;
+ for (int a = 0; a < CIRCLE_RESOL; a++) {
+ v[0] = sinf((2.0f * M_PI * a) / ((float)CIRCLE_RESOL));
+ v[1] = cosf((2.0f * M_PI * a) / ((float)CIRCLE_RESOL));
+ v[2] = z;
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, v);
+
+ v[0] = sinf((2.0f * M_PI * (a + 1)) / ((float)CIRCLE_RESOL));
+ v[1] = cosf((2.0f * M_PI * (a + 1)) / ((float)CIRCLE_RESOL));
+ v[2] = z;
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, v);
+ }
+ }
+ /* Side Edges */
+ for (int a = 0; a < 4; a++) {
+ for (int i = 0; i < 2; i++) {
+ float z = (float)i * 2.0f - 1.0f;
+ v[0] = z * sinf((2.0f * M_PI * a) / 4.0f);
+ v[1] = z * cosf((2.0f * M_PI * a) / 4.0f);
+ v[2] = z;
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, v);
+ }
+ }
+
+ SHC.drw_field_cone_limit = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_field_cone_limit;
+#undef CIRCLE_RESOL
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+
+/** \name Lamps
+ * \{ */
+
+Gwn_Batch *DRW_cache_lamp_get(void)
+{
+#define NSEGMENTS 8
+ if (!SHC.drw_lamp) {
+ float v[2];
+
+ /* Position Only 3D format */
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, NSEGMENTS * 2);
+
+ for (int a = 0; a < NSEGMENTS * 2; a += 2) {
+ v[0] = sinf((2.0f * M_PI * a) / ((float)NSEGMENTS * 2));
+ v[1] = cosf((2.0f * M_PI * a) / ((float)NSEGMENTS * 2));
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, a, v);
+
+ v[0] = sinf((2.0f * M_PI * (a + 1)) / ((float)NSEGMENTS * 2));
+ v[1] = cosf((2.0f * M_PI * (a + 1)) / ((float)NSEGMENTS * 2));
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, a + 1, v);
+ }
+
+ SHC.drw_lamp = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_lamp;
+#undef NSEGMENTS
+}
+
+Gwn_Batch *DRW_cache_lamp_shadows_get(void)
+{
+#define NSEGMENTS 10
+ if (!SHC.drw_lamp_shadows) {
+ float v[2];
+
+ /* Position Only 3D format */
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, NSEGMENTS * 2);
+
+ for (int a = 0; a < NSEGMENTS * 2; a += 2) {
+ v[0] = sinf((2.0f * M_PI * a) / ((float)NSEGMENTS * 2));
+ v[1] = cosf((2.0f * M_PI * a) / ((float)NSEGMENTS * 2));
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, a, v);
+
+ v[0] = sinf((2.0f * M_PI * (a + 1)) / ((float)NSEGMENTS * 2));
+ v[1] = cosf((2.0f * M_PI * (a + 1)) / ((float)NSEGMENTS * 2));
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, a + 1, v);
+ }
+
+ SHC.drw_lamp_shadows = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_lamp_shadows;
+#undef NSEGMENTS
+}
+
+Gwn_Batch *DRW_cache_lamp_sunrays_get(void)
+{
+ if (!SHC.drw_lamp_sunrays) {
+ float v[2], v1[2], v2[2];
+
+ /* Position Only 2D format */
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, 32);
+
+ for (int a = 0; a < 8; a++) {
+ v[0] = sinf((2.0f * M_PI * a) / 8.0f);
+ v[1] = cosf((2.0f * M_PI * a) / 8.0f);
+
+ mul_v2_v2fl(v1, v, 1.6f);
+ mul_v2_v2fl(v2, v, 1.9f);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, a * 4, v1);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, a * 4 + 1, v2);
+
+ mul_v2_v2fl(v1, v, 2.2f);
+ mul_v2_v2fl(v2, v, 2.5f);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, a * 4 + 2, v1);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, a * 4 + 3, v2);
+ }
+
+ SHC.drw_lamp_sunrays = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_lamp_sunrays;
+}
+
+Gwn_Batch *DRW_cache_lamp_area_get(void)
+{
+ if (!SHC.drw_lamp_area) {
+ float v1[3] = {0.0f, 0.0f, 0.0f};
+
+ /* Position Only 3D format */
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, 8);
+
+ v1[0] = v1[1] = 0.5f;
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, 0, v1);
+ v1[0] = -0.5f;
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, 1, v1);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, 2, v1);
+ v1[1] = -0.5f;
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, 3, v1);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, 4, v1);
+ v1[0] = 0.5f;
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, 5, v1);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, 6, v1);
+ v1[1] = 0.5f;
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, 7, v1);
+
+ SHC.drw_lamp_area = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_lamp_area;
+}
+
+Gwn_Batch *DRW_cache_lamp_hemi_get(void)
+{
+#define CIRCLE_RESOL 32
+ if (!SHC.drw_lamp_hemi) {
+ float v[3];
+ int vidx = 0;
+
+ /* Position Only 3D format */
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, CIRCLE_RESOL * 2 * 2 - 6 * 2 * 2);
+
+ /* XZ plane */
+ for (int a = 3; a < CIRCLE_RESOL / 2 - 3; a++) {
+ v[0] = sinf((2.0f * M_PI * a) / ((float)CIRCLE_RESOL) - M_PI / 2);
+ v[2] = cosf((2.0f * M_PI * a) / ((float)CIRCLE_RESOL) - M_PI / 2) - 1.0f;
+ v[1] = 0.0f;
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vidx++, v);
+
+ v[0] = sinf((2.0f * M_PI * (a + 1)) / ((float)CIRCLE_RESOL) - M_PI / 2);
+ v[2] = cosf((2.0f * M_PI * (a + 1)) / ((float)CIRCLE_RESOL) - M_PI / 2) - 1.0f;
+ v[1] = 0.0f;
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vidx++, v);
+ }
+
+ /* XY plane */
+ for (int a = 3; a < CIRCLE_RESOL / 2 - 3; a++) {
+ v[2] = sinf((2.0f * M_PI * a) / ((float)CIRCLE_RESOL)) - 1.0f;
+ v[1] = cosf((2.0f * M_PI * a) / ((float)CIRCLE_RESOL));
+ v[0] = 0.0f;
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vidx++, v);
+
+ v[2] = sinf((2.0f * M_PI * (a + 1)) / ((float)CIRCLE_RESOL)) - 1.0f;
+ v[1] = cosf((2.0f * M_PI * (a + 1)) / ((float)CIRCLE_RESOL));
+ v[0] = 0.0f;
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vidx++, v);
+ }
+
+ /* YZ plane full circle */
+ /* lease v[2] as it is */
+ const float rad = cosf((2.0f * M_PI * 3) / ((float)CIRCLE_RESOL));
+ for (int a = 0; a < CIRCLE_RESOL; a++) {
+ v[1] = rad * sinf((2.0f * M_PI * a) / ((float)CIRCLE_RESOL));
+ v[0] = rad * cosf((2.0f * M_PI * a) / ((float)CIRCLE_RESOL));
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vidx++, v);
+
+ v[1] = rad * sinf((2.0f * M_PI * (a + 1)) / ((float)CIRCLE_RESOL));
+ v[0] = rad * cosf((2.0f * M_PI * (a + 1)) / ((float)CIRCLE_RESOL));
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vidx++, v);
+ }
+
+
+ SHC.drw_lamp_hemi = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_lamp_hemi;
+#undef CIRCLE_RESOL
+}
+
+
+Gwn_Batch *DRW_cache_lamp_spot_get(void)
+{
+#define NSEGMENTS 32
+ if (!SHC.drw_lamp_spot) {
+ /* a single ring of vertices */
+ float p[NSEGMENTS][2];
+ float n[NSEGMENTS][3];
+ float neg[NSEGMENTS][3];
+ float half_angle = 2 * M_PI / ((float)NSEGMENTS * 2);
+ for (int i = 0; i < NSEGMENTS; ++i) {
+ float angle = 2 * M_PI * ((float)i / (float)NSEGMENTS);
+ p[i][0] = cosf(angle);
+ p[i][1] = sinf(angle);
+
+ n[i][0] = cosf(angle - half_angle);
+ n[i][1] = sinf(angle - half_angle);
+ n[i][2] = cosf(M_PI / 16.0f); /* slope of the cone */
+ normalize_v3(n[i]); /* necessary ? */
+ negate_v3_v3(neg[i], n[i]);
+ }
+
+ /* Position Only 3D format */
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos, n1, n2; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ attr_id.n1 = GWN_vertformat_attr_add(&format, "N1", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ attr_id.n2 = GWN_vertformat_attr_add(&format, "N2", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, NSEGMENTS * 4);
+
+ for (int i = 0; i < NSEGMENTS; ++i) {
+ float cv[2], v[3];
+ cv[0] = p[i % NSEGMENTS][0];
+ cv[1] = p[i % NSEGMENTS][1];
+
+ /* cone sides */
+ v[0] = cv[0], v[1] = cv[1], v[2] = -1.0f;
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, i * 4, v);
+ v[0] = 0.0f, v[1] = 0.0f, v[2] = 0.0f;
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, i * 4 + 1, v);
+
+ GWN_vertbuf_attr_set(vbo, attr_id.n1, i * 4, n[(i) % NSEGMENTS]);
+ GWN_vertbuf_attr_set(vbo, attr_id.n1, i * 4 + 1, n[(i) % NSEGMENTS]);
+ GWN_vertbuf_attr_set(vbo, attr_id.n2, i * 4, n[(i + 1) % NSEGMENTS]);
+ GWN_vertbuf_attr_set(vbo, attr_id.n2, i * 4 + 1, n[(i + 1) % NSEGMENTS]);
+
+ /* end ring */
+ v[0] = cv[0], v[1] = cv[1], v[2] = -1.0f;
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, i * 4 + 2, v);
+ cv[0] = p[(i + 1) % NSEGMENTS][0];
+ cv[1] = p[(i + 1) % NSEGMENTS][1];
+ v[0] = cv[0], v[1] = cv[1], v[2] = -1.0f;
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, i * 4 + 3, v);
+
+ GWN_vertbuf_attr_set(vbo, attr_id.n1, i * 4 + 2, n[(i) % NSEGMENTS]);
+ GWN_vertbuf_attr_set(vbo, attr_id.n1, i * 4 + 3, n[(i) % NSEGMENTS]);
+ GWN_vertbuf_attr_set(vbo, attr_id.n2, i * 4 + 2, neg[(i) % NSEGMENTS]);
+ GWN_vertbuf_attr_set(vbo, attr_id.n2, i * 4 + 3, neg[(i) % NSEGMENTS]);
+ }
+
+ SHC.drw_lamp_spot = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_lamp_spot;
+#undef NSEGMENTS
+}
+
+Gwn_Batch *DRW_cache_lamp_spot_square_get(void)
+{
+ if (!SHC.drw_lamp_spot_square) {
+ float p[5][3] = {{ 0.0f, 0.0f, 0.0f},
+ { 1.0f, 1.0f, -1.0f},
+ { 1.0f, -1.0f, -1.0f},
+ {-1.0f, -1.0f, -1.0f},
+ {-1.0f, 1.0f, -1.0f}};
+
+ unsigned int v_idx = 0;
+
+ /* Position Only 3D format */
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, 16);
+
+ /* piramid sides */
+ for (int i = 1; i <= 4; ++i) {
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, p[0]);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, p[i]);
+
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, p[(i % 4) + 1]);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, p[((i + 1) % 4) + 1]);
+ }
+
+ SHC.drw_lamp_spot_square = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_lamp_spot_square;
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+
+/** \name Speaker
+ * \{ */
+
+Gwn_Batch *DRW_cache_speaker_get(void)
+{
+ if (!SHC.drw_speaker) {
+ float v[3];
+ const int segments = 16;
+ int vidx = 0;
+
+ /* Position Only 3D format */
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, 3 * segments * 2 + 4 * 4);
+
+ for (int j = 0; j < 3; j++) {
+ float z = 0.25f * j - 0.125f;
+ float r = (j == 0 ? 0.5f : 0.25f);
+
+ copy_v3_fl3(v, r, 0.0f, z);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vidx++, v);
+ for (int i = 1; i < segments; i++) {
+ float x = cosf(2.f * (float)M_PI * i / segments) * r;
+ float y = sinf(2.f * (float)M_PI * i / segments) * r;
+ copy_v3_fl3(v, x, y, z);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vidx++, v);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vidx++, v);
+ }
+ copy_v3_fl3(v, r, 0.0f, z);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vidx++, v);
+ }
+
+ for (int j = 0; j < 4; j++) {
+ float x = (((j + 1) % 2) * (j - 1)) * 0.5f;
+ float y = ((j % 2) * (j - 2)) * 0.5f;
+ for (int i = 0; i < 3; i++) {
+ if (i == 1) {
+ x *= 0.5f;
+ y *= 0.5f;
+ }
+
+ float z = 0.25f * i - 0.125f;
+ copy_v3_fl3(v, x, y, z);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vidx++, v);
+ if (i == 1) {
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vidx++, v);
+ }
+ }
+ }
+
+ SHC.drw_speaker = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_speaker;
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+
+/** \name Probe
+ * \{ */
+
+Gwn_Batch *DRW_cache_lightprobe_cube_get(void)
+{
+ if (!SHC.drw_lightprobe_cube) {
+ int v_idx = 0;
+ const float sin_pi_3 = 0.86602540378f;
+ const float cos_pi_3 = 0.5f;
+ float v[7][3] = {
+ {0.0f, 1.0f, 0.0f},
+ {sin_pi_3, cos_pi_3, 0.0f},
+ {sin_pi_3, -cos_pi_3, 0.0f},
+ {0.0f, -1.0f, 0.0f},
+ {-sin_pi_3, -cos_pi_3, 0.0f},
+ {-sin_pi_3, cos_pi_3, 0.0f},
+ {0.0f, 0.0f, 0.0f},
+ };
+
+ /* Position Only 3D format */
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, (6 + 3) * 2);
+
+ for (int i = 0; i < 6; ++i) {
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, v[i]);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, v[(i + 1) % 6]);
+ }
+
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, v[1]);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, v[6]);
+
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, v[5]);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, v[6]);
+
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, v[3]);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, v[6]);
+
+ SHC.drw_lightprobe_cube = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_lightprobe_cube;
+}
+
+Gwn_Batch *DRW_cache_lightprobe_grid_get(void)
+{
+ if (!SHC.drw_lightprobe_grid) {
+ int v_idx = 0;
+ const float sin_pi_3 = 0.86602540378f;
+ const float cos_pi_3 = 0.5f;
+ const float v[7][3] = {
+ {0.0f, 1.0f, 0.0f},
+ {sin_pi_3, cos_pi_3, 0.0f},
+ {sin_pi_3, -cos_pi_3, 0.0f},
+ {0.0f, -1.0f, 0.0f},
+ {-sin_pi_3, -cos_pi_3, 0.0f},
+ {-sin_pi_3, cos_pi_3, 0.0f},
+ {0.0f, 0.0f, 0.0f},
+ };
+
+ /* Position Only 3D format */
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, (6 * 2 + 3) * 2);
+
+ for (int i = 0; i < 6; ++i) {
+ float tmp_v1[3], tmp_v2[3], tmp_tr[3];
+ copy_v3_v3(tmp_v1, v[i]);
+ copy_v3_v3(tmp_v2, v[(i + 1) % 6]);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, tmp_v1);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, tmp_v2);
+
+ /* Internal wires. */
+ for (int j = 1; j < 2; ++j) {
+ mul_v3_v3fl(tmp_tr, v[(i / 2) * 2 + 1], -0.5f * j);
+ add_v3_v3v3(tmp_v1, v[i], tmp_tr);
+ add_v3_v3v3(tmp_v2, v[(i + 1) % 6], tmp_tr);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, tmp_v1);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, tmp_v2);
+ }
+ }
+
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, v[1]);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, v[6]);
+
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, v[5]);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, v[6]);
+
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, v[3]);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, v[6]);
+
+ SHC.drw_lightprobe_grid = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_lightprobe_grid;
+}
+
+Gwn_Batch *DRW_cache_lightprobe_planar_get(void)
+{
+ if (!SHC.drw_lightprobe_planar) {
+ int v_idx = 0;
+ const float sin_pi_3 = 0.86602540378f;
+ float v[4][3] = {
+ {0.0f, 0.5f, 0.0f},
+ {sin_pi_3, 0.0f, 0.0f},
+ {0.0f, -0.5f, 0.0f},
+ {-sin_pi_3, 0.0f, 0.0f},
+ };
+
+ /* Position Only 3D format */
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, 4 * 2);
+
+ for (int i = 0; i < 4; ++i) {
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, v[i]);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, v[(i + 1) % 4]);
+ }
+
+ SHC.drw_lightprobe_planar = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_lightprobe_planar;
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+
+/** \name Armature Bones
+ * \{ */
+
+static const float bone_octahedral_verts[6][3] = {
+ { 0.0f, 0.0f, 0.0f},
+ { 0.1f, 0.1f, 0.1f},
+ { 0.1f, 0.1f, -0.1f},
+ {-0.1f, 0.1f, -0.1f},
+ {-0.1f, 0.1f, 0.1f},
+ { 0.0f, 1.0f, 0.0f}
+};
+
+static const unsigned int bone_octahedral_wire[24] = {
+ 0, 1, 1, 5, 5, 3, 3, 0,
+ 0, 4, 4, 5, 5, 2, 2, 0,
+ 1, 2, 2, 3, 3, 4, 4, 1,
+};
+
+/* aligned with bone_octahedral_wire
+ * Contains adjacent normal index */
+static const unsigned int bone_octahedral_wire_adjacent_face[24] = {
+ 0, 3, 4, 7, 5, 6, 1, 2,
+ 2, 3, 6, 7, 4, 5, 0, 1,
+ 0, 4, 1, 5, 2, 6, 3, 7,
+};
+
+static const unsigned int bone_octahedral_solid_tris[8][3] = {
+ {2, 1, 0}, /* bottom */
+ {3, 2, 0},
+ {4, 3, 0},
+ {1, 4, 0},
+
+ {5, 1, 2}, /* top */
+ {5, 2, 3},
+ {5, 3, 4},
+ {5, 4, 1}
+};
+
+/* aligned with bone_octahedral_solid_tris */
+static const float bone_octahedral_solid_normals[8][3] = {
+ { M_SQRT1_2, -M_SQRT1_2, 0.00000000f},
+ {-0.00000000f, -M_SQRT1_2, -M_SQRT1_2},
+ {-M_SQRT1_2, -M_SQRT1_2, 0.00000000f},
+ { 0.00000000f, -M_SQRT1_2, M_SQRT1_2},
+ { 0.99388373f, 0.11043154f, -0.00000000f},
+ { 0.00000000f, 0.11043154f, -0.99388373f},
+ {-0.99388373f, 0.11043154f, 0.00000000f},
+ { 0.00000000f, 0.11043154f, 0.99388373f}
+};
+
+Gwn_Batch *DRW_cache_bone_octahedral_get(void)
+{
+ if (!SHC.drw_bone_octahedral) {
+ unsigned int v_idx = 0;
+
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos, nor; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ attr_id.nor = GWN_vertformat_attr_add(&format, "nor", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ /* Vertices */
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, 24);
+
+ for (int i = 0; i < 8; i++) {
+ GWN_vertbuf_attr_set(vbo, attr_id.nor, v_idx, bone_octahedral_solid_normals[i]);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, bone_octahedral_verts[bone_octahedral_solid_tris[i][0]]);
+ GWN_vertbuf_attr_set(vbo, attr_id.nor, v_idx, bone_octahedral_solid_normals[i]);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, bone_octahedral_verts[bone_octahedral_solid_tris[i][1]]);
+ GWN_vertbuf_attr_set(vbo, attr_id.nor, v_idx, bone_octahedral_solid_normals[i]);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, bone_octahedral_verts[bone_octahedral_solid_tris[i][2]]);
+ }
+
+ SHC.drw_bone_octahedral = GWN_batch_create_ex(GWN_PRIM_TRIS, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_bone_octahedral;
+}
+
+Gwn_Batch *DRW_cache_bone_octahedral_wire_outline_get(void)
+{
+ if (!SHC.drw_bone_octahedral_wire) {
+ unsigned int v_idx = 0;
+
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos, n1, n2; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ attr_id.n1 = GWN_vertformat_attr_add(&format, "N1", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ attr_id.n2 = GWN_vertformat_attr_add(&format, "N2", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ /* Vertices */
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, 12 * 2);
+
+ for (int i = 0; i < 12; i++) {
+ const float *co1 = bone_octahedral_verts[bone_octahedral_wire[i * 2]];
+ const float *co2 = bone_octahedral_verts[bone_octahedral_wire[i * 2 + 1]];
+ const float *n1 = bone_octahedral_solid_normals[bone_octahedral_wire_adjacent_face[i * 2]];
+ const float *n2 = bone_octahedral_solid_normals[bone_octahedral_wire_adjacent_face[i * 2 + 1]];
+ add_fancy_edge(vbo, attr_id.pos, attr_id.n1, attr_id.n2, &v_idx, co1, co2, n1, n2);
+ }
+
+ SHC.drw_bone_octahedral_wire = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_bone_octahedral_wire;
+}
+
+
+/* XXX TODO move that 1 unit cube to more common/generic place? */
+static const float bone_box_verts[8][3] = {
+ { 1.0f, 0.0f, 1.0f},
+ { 1.0f, 0.0f, -1.0f},
+ {-1.0f, 0.0f, -1.0f},
+ {-1.0f, 0.0f, 1.0f},
+ { 1.0f, 1.0f, 1.0f},
+ { 1.0f, 1.0f, -1.0f},
+ {-1.0f, 1.0f, -1.0f},
+ {-1.0f, 1.0f, 1.0f}
+};
+
+static const unsigned int bone_box_wire[24] = {
+ 0, 1, 1, 2, 2, 3, 3, 0,
+ 4, 5, 5, 6, 6, 7, 7, 4,
+ 0, 4, 1, 5, 2, 6, 3, 7,
+};
+
+/* aligned with bone_octahedral_wire
+ * Contains adjacent normal index */
+static const unsigned int bone_box_wire_adjacent_face[24] = {
+ 0, 2, 0, 4, 1, 6, 1, 8,
+ 3, 10, 5, 10, 7, 11, 9, 11,
+ 3, 8, 2, 5, 4, 7, 6, 9,
+};
+
+static const unsigned int bone_box_solid_tris[12][3] = {
+ {0, 1, 2}, /* bottom */
+ {0, 2, 3},
+
+ {0, 1, 5}, /* sides */
+ {0, 5, 4},
+
+ {1, 2, 6},
+ {1, 6, 5},
+
+ {2, 3, 7},
+ {2, 7, 6},
+
+ {3, 0, 4},
+ {3, 4, 7},
+
+ {4, 5, 6}, /* top */
+ {4, 6, 7},
+};
+
+/* aligned with bone_octahedral_solid_tris */
+static const float bone_box_solid_normals[12][3] = {
+ { 0.0f, -1.0f, 0.0f},
+ { 0.0f, -1.0f, 0.0f},
+
+ { 1.0f, 0.0f, 0.0f},
+ { 1.0f, 0.0f, 0.0f},
+
+ { 0.0f, 0.0f, -1.0f},
+ { 0.0f, 0.0f, -1.0f},
+
+ {-1.0f, 0.0f, 0.0f},
+ {-1.0f, 0.0f, 0.0f},
+
+ { 0.0f, 0.0f, 1.0f},
+ { 0.0f, 0.0f, 1.0f},
+
+ { 0.0f, 1.0f, 0.0f},
+ { 0.0f, 1.0f, 0.0f},
+};
+
+Gwn_Batch *DRW_cache_bone_box_get(void)
+{
+ if (!SHC.drw_bone_box) {
+ unsigned int v_idx = 0;
+
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos, nor; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ attr_id.nor = GWN_vertformat_attr_add(&format, "nor", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ /* Vertices */
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, 36);
+
+ for (int i = 0; i < 12; i++) {
+ for (int j = 0; j < 3; j++) {
+ GWN_vertbuf_attr_set(vbo, attr_id.nor, v_idx, bone_box_solid_normals[i]);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, bone_box_verts[bone_box_solid_tris[i][j]]);
+ }
+ }
+
+ SHC.drw_bone_box = GWN_batch_create_ex(GWN_PRIM_TRIS, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_bone_box;
+}
+
+Gwn_Batch *DRW_cache_bone_box_wire_outline_get(void)
+{
+ if (!SHC.drw_bone_box_wire) {
+ unsigned int v_idx = 0;
+
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos, n1, n2; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ attr_id.n1 = GWN_vertformat_attr_add(&format, "N1", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ attr_id.n2 = GWN_vertformat_attr_add(&format, "N2", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ /* Vertices */
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, 12 * 2);
+
+ for (int i = 0; i < 12; i++) {
+ const float *co1 = bone_box_verts[bone_box_wire[i * 2]];
+ const float *co2 = bone_box_verts[bone_box_wire[i * 2 + 1]];
+ const float *n1 = bone_box_solid_normals[bone_box_wire_adjacent_face[i * 2]];
+ const float *n2 = bone_box_solid_normals[bone_box_wire_adjacent_face[i * 2 + 1]];
+ add_fancy_edge(vbo, attr_id.pos, attr_id.n1, attr_id.n2, &v_idx, co1, co2, n1, n2);
+ }
+
+ SHC.drw_bone_box_wire = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_bone_box_wire;
+}
+
+
+Gwn_Batch *DRW_cache_bone_wire_wire_outline_get(void)
+{
+ if (!SHC.drw_bone_wire_wire) {
+ unsigned int v_idx = 0;
+
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos, n1, n2; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ attr_id.n1 = GWN_vertformat_attr_add(&format, "N1", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ attr_id.n2 = GWN_vertformat_attr_add(&format, "N2", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ /* Vertices */
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, 2);
+
+ const float co1[3] = {0.0f, 0.0f, 0.0f};
+ const float co2[3] = {0.0f, 1.0f, 0.0f};
+ const float n[3] = {1.0f, 0.0f, 0.0f};
+ add_fancy_edge(vbo, attr_id.pos, attr_id.n1, attr_id.n2, &v_idx, co1, co2, n, n);
+
+ SHC.drw_bone_wire_wire = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_bone_wire_wire;
+}
+
+
+/* Helpers for envelope bone's solid sphere-with-hidden-equatorial-cylinder.
+ * Note that here we only encode head/tail in forth component of the vector. */
+static void benv_lat_lon_to_co(const float lat, const float lon, float r_nor[3])
+{
+ /* Poles are along Y axis. */
+ r_nor[0] = sinf(lat) * cosf(lon);
+ r_nor[1] = cosf(lat);
+ r_nor[2] = sinf(lat) * sinf(lon);
+}
+
+static void benv_add_tri(Gwn_VertBuf *vbo, uint pos_id, uint *v_idx, float *co1, float *co2, float *co3)
+{
+ /* Given tri and its seven other mirrors along X/Y/Z axes. */
+ for (int x = -1; x <= 1; x += 2) {
+ for (int y = -1; y <= 1; y += 2) {
+ const float head_tail = (y == -1) ? 0.0f : 1.0f;
+ for (int z = -1; z <= 1; z += 2) {
+ GWN_vertbuf_attr_set(vbo, pos_id, (*v_idx)++,
+ (const float[4]){co1[0] * x, co1[1] * y, co1[2] * z, head_tail});
+ GWN_vertbuf_attr_set(vbo, pos_id, (*v_idx)++,
+ (const float[4]){co2[0] * x, co2[1] * y, co2[2] * z, head_tail});
+ GWN_vertbuf_attr_set(vbo, pos_id, (*v_idx)++,
+ (const float[4]){co3[0] * x, co3[1] * y, co3[2] * z, head_tail});
+ }
+ }
+ }
+}
+
+Gwn_Batch *DRW_cache_bone_envelope_solid_get(void)
+{
+#define CIRCLE_RESOL 32 /* Must be multiple of 4 */
+ if (!SHC.drw_bone_envelope) {
+ const int lon_res = CIRCLE_RESOL / 4;
+ const int lat_res = CIRCLE_RESOL / 4;
+ const float lon_inc = M_PI_2 / lon_res;
+ const float lat_inc = M_PI_2 / lat_res;
+ unsigned int v_idx = 0;
+
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 4, GWN_FETCH_FLOAT);
+ }
+
+ /* Vertices */
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, lat_res * lon_res * 8 * 6);
+
+ float lon = 0.0f;
+ for (int i = 0; i < lon_res; i++, lon += lon_inc) {
+ float lat = 0.0f;
+ float co1[3], co2[3], co3[3], co4[3];
+
+ for (int j = 0; j < lat_res; j++, lat += lat_inc) {
+ benv_lat_lon_to_co(lat, lon, co1);
+ benv_lat_lon_to_co(lat, lon + lon_inc, co2);
+ benv_lat_lon_to_co(lat + lat_inc, lon + lon_inc, co3);
+ benv_lat_lon_to_co(lat + lat_inc, lon, co4);
+
+ if (j != 0) { /* At pole, n1 and n2 are identical. */
+ benv_add_tri(vbo, attr_id.pos, &v_idx, co1, co2, co3);
+ }
+ benv_add_tri(vbo, attr_id.pos, &v_idx, co1, co3, co4);
+ }
+
+ /* lat is at equator (i.e. lat == pi / 2). */
+ /* We need to add 'cylinder' part between the equators (along XZ plane). */
+ for (int x = -1; x <= 1; x += 2) {
+ for (int z = -1; z <= 1; z += 2) {
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++,
+ (const float[4]){co3[0] * x, co3[1], co3[2] * z, 0.0f});
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++,
+ (const float[4]){co4[0] * x, co4[1], co4[2] * z, 0.0f});
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++,
+ (const float[4]){co4[0] * x, co4[1], co4[2] * z, 1.0f});
+
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++,
+ (const float[4]){co3[0] * x, co3[1], co3[2] * z, 0.0f});
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++,
+ (const float[4]){co4[0] * x, co4[1], co4[2] * z, 1.0f});
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++,
+ (const float[4]){co3[0] * x, co3[1], co3[2] * z, 1.0f});
+ }
+ }
+ }
+
+ SHC.drw_bone_envelope = GWN_batch_create_ex(GWN_PRIM_TRIS, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_bone_envelope;
+}
+
+
+Gwn_Batch *DRW_cache_bone_envelope_distance_outline_get(void)
+{
+#define CIRCLE_RESOL 32 /* Must be multiple of 2 */
+ if (!SHC.drw_bone_envelope_distance) {
+ unsigned int v_idx = 0;
+
+ static Gwn_VertFormat format = { 0 };
+ static unsigned int pos_id;
+ if (format.attrib_ct == 0) {
+ pos_id = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 4, GWN_FETCH_FLOAT);
+ }
+
+ /* Vertices */
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, CIRCLE_RESOL * 2 + 6);
+
+ /* Encoded triangle strip, vertex shader gives them final correct value. */
+ for (int i = 0; i < CIRCLE_RESOL + 1; i++) {
+ const bool is_headtail_transition = ELEM(i, CIRCLE_RESOL / 2, CIRCLE_RESOL);
+ const float head_tail = (i > CIRCLE_RESOL / 2) ? 1.0f : 0.0f;
+ const float alpha = 2.0f * M_PI * i / CIRCLE_RESOL;
+ const float x = cosf(alpha);
+ const float y = -sinf(alpha);
+
+ /* { X, Y, head/tail, inner/outer border } */
+ GWN_vertbuf_attr_set(vbo, pos_id, v_idx++, (const float[4]){x, y, head_tail, 0.0f});
+ GWN_vertbuf_attr_set(vbo, pos_id, v_idx++, (const float[4]){x, y, head_tail, 1.0f});
+ if (is_headtail_transition) {
+ GWN_vertbuf_attr_set(vbo, pos_id, v_idx++, (const float[4]){x, y, 1.0f - head_tail, 0.0f});
+ GWN_vertbuf_attr_set(vbo, pos_id, v_idx++, (const float[4]){x, y, 1.0f - head_tail, 1.0f});
+ }
+ }
+
+ SHC.drw_bone_envelope_distance = GWN_batch_create_ex(GWN_PRIM_TRI_STRIP, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_bone_envelope_distance;
+#undef CIRCLE_RESOL
+}
+
+
+/* Bone body. */
+Gwn_Batch *DRW_cache_bone_envelope_wire_outline_get(void)
+{
+ if (!SHC.drw_bone_envelope_wire) {
+ unsigned int v_idx = 0;
+
+ static Gwn_VertFormat format = { 0 };
+ static unsigned int pos_id;
+ if (format.attrib_ct == 0) {
+ pos_id = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 4, GWN_FETCH_FLOAT);
+ }
+
+ /* Vertices */
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, 4);
+
+ /* Two lines between head and tail circles. */
+ /* Encoded lines, vertex shader gives them final correct value. */
+ /* { X, Y, head/tail, inner/outer border } */
+ GWN_vertbuf_attr_set(vbo, pos_id, v_idx++, (const float[4]){ 1.0f, 0.0f, 0.0f, 0.0f});
+ GWN_vertbuf_attr_set(vbo, pos_id, v_idx++, (const float[4]){ 1.0f, 0.0f, 1.0f, 0.0f});
+ GWN_vertbuf_attr_set(vbo, pos_id, v_idx++, (const float[4]){-1.0f, 0.0f, 0.0f, 0.0f});
+ GWN_vertbuf_attr_set(vbo, pos_id, v_idx++, (const float[4]){-1.0f, 0.0f, 1.0f, 0.0f});
+
+ SHC.drw_bone_envelope_wire = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_bone_envelope_wire;
+}
+
+
+/* Bone head and tail. */
+Gwn_Batch *DRW_cache_bone_envelope_head_wire_outline_get(void)
+{
+#define CIRCLE_RESOL 32 /* Must be multiple of 2 */
+ if (!SHC.drw_bone_envelope_head_wire) {
+ unsigned int v_idx = 0;
+
+ static Gwn_VertFormat format = { 0 };
+ static unsigned int pos_id;
+ if (format.attrib_ct == 0) {
+ pos_id = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 4, GWN_FETCH_FLOAT);
+ }
+
+ /* Vertices */
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, CIRCLE_RESOL);
+
+ /* Encoded lines, vertex shader gives them final correct value. */
+ /* Only head circle (tail is drawn in disp_tail_mat space as a head one by draw_armature.c's draw_point()). */
+ for (int i = 0; i < CIRCLE_RESOL; i++) {
+ const float alpha = 2.0f * M_PI * i / CIRCLE_RESOL;
+ const float x = cosf(alpha);
+ const float y = -sinf(alpha);
+
+ /* { X, Y, head/tail, inner/outer border } */
+ GWN_vertbuf_attr_set(vbo, pos_id, v_idx++, (const float[4]){ x, y, 0.0f, 0.0f});
+ }
+
+ SHC.drw_bone_envelope_head_wire = GWN_batch_create_ex(GWN_PRIM_LINE_LOOP, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_bone_envelope_head_wire;
+#undef CIRCLE_RESOL
+}
+
+
+Gwn_Batch *DRW_cache_bone_point_get(void)
+{
+ if (!SHC.drw_bone_point) {
+ const int lon_res = 16;
+ const int lat_res = 8;
+ const float rad = 0.05f;
+ const float lon_inc = 2 * M_PI / lon_res;
+ const float lat_inc = M_PI / lat_res;
+ unsigned int v_idx = 0;
+
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos, nor; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ attr_id.nor = GWN_vertformat_attr_add(&format, "nor", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ /* Vertices */
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, (lat_res - 1) * lon_res * 6);
+
+ float lon = 0.0f;
+ for (int i = 0; i < lon_res; i++, lon += lon_inc) {
+ float lat = 0.0f;
+ for (int j = 0; j < lat_res; j++, lat += lat_inc) {
+ if (j != lat_res - 1) { /* Pole */
+ add_lat_lon_vert(vbo, attr_id.pos, attr_id.nor, &v_idx, rad, lat + lat_inc, lon + lon_inc);
+ add_lat_lon_vert(vbo, attr_id.pos, attr_id.nor, &v_idx, rad, lat + lat_inc, lon);
+ add_lat_lon_vert(vbo, attr_id.pos, attr_id.nor, &v_idx, rad, lat, lon);
+ }
+
+ if (j != 0) { /* Pole */
+ add_lat_lon_vert(vbo, attr_id.pos, attr_id.nor, &v_idx, rad, lat, lon + lon_inc);
+ add_lat_lon_vert(vbo, attr_id.pos, attr_id.nor, &v_idx, rad, lat + lat_inc, lon + lon_inc);
+ add_lat_lon_vert(vbo, attr_id.pos, attr_id.nor, &v_idx, rad, lat, lon);
+ }
+ }
+ }
+
+ SHC.drw_bone_point = GWN_batch_create_ex(GWN_PRIM_TRIS, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_bone_point;
+}
+
+Gwn_Batch *DRW_cache_bone_point_wire_outline_get(void)
+{
+ if (!SHC.drw_bone_point_wire) {
+ Gwn_VertBuf *vbo = sphere_wire_vbo(0.05f);
+ SHC.drw_bone_point_wire = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_bone_point_wire;
+}
+
+Gwn_Batch *DRW_cache_bone_arrows_get(void)
+{
+ if (!SHC.drw_bone_arrows) {
+ Gwn_VertBuf *vbo = fill_arrows_vbo(0.25f);
+ SHC.drw_bone_arrows = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_bone_arrows;
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+
+/** \name Camera
+ * \{ */
+
+/**
+ * We could make these more generic functions.
+ * although filling 1d lines is not common.
+ *
+ * \note Use x coordinate to identify the vertex the vertex shader take care to place it appropriately.
+ */
+
+static const float camera_coords_frame_bounds[5] = {
+ 0.0f, /* center point */
+ 1.0f, /* + X + Y */
+ 2.0f, /* + X - Y */
+ 3.0f, /* - X - Y */
+ 4.0f, /* - X + Y */
+};
+
+static const float camera_coords_frame_tri[3] = {
+ 5.0f, /* tria + X */
+ 6.0f, /* tria - X */
+ 7.0f, /* tria + Y */
+};
+
+/** Draw a loop of lines. */
+static void camera_fill_lines_loop_fl_v1(
+ Gwn_VertBufRaw *pos_step,
+ const float *coords, const uint coords_len)
+{
+ for (uint i = 0, i_prev = coords_len - 1; i < coords_len; i_prev = i++) {
+ *((float *)GWN_vertbuf_raw_step(pos_step)) = coords[i_prev];
+ *((float *)GWN_vertbuf_raw_step(pos_step)) = coords[i];
+ }
+}
+
+/** Fan lines out from the first vertex. */
+static void camera_fill_lines_fan_fl_v1(
+ Gwn_VertBufRaw *pos_step,
+ const float *coords, const uint coords_len)
+{
+ for (uint i = 1; i < coords_len; i++) {
+ *((float *)GWN_vertbuf_raw_step(pos_step)) = coords[0];
+ *((float *)GWN_vertbuf_raw_step(pos_step)) = coords[i];
+ }
+}
+
+/** Simply fill the array. */
+static void camera_fill_array_fl_v1(
+ Gwn_VertBufRaw *pos_step,
+ const float *coords, const uint coords_len)
+{
+ for (uint i = 0; i < coords_len; i++) {
+ *((float *)GWN_vertbuf_raw_step(pos_step)) = coords[i];
+ }
+}
+
+
+Gwn_Batch *DRW_cache_camera_get(void)
+{
+ if (!SHC.drw_camera) {
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 1, GWN_FETCH_FLOAT);
+ }
+
+ /* Vertices */
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ const int vbo_len_capacity = 22;
+ GWN_vertbuf_data_alloc(vbo, vbo_len_capacity);
+ Gwn_VertBufRaw pos_step;
+ GWN_vertbuf_attr_get_raw_data(vbo, attr_id.pos, &pos_step);
+
+ /* camera cone (from center to frame) */
+ camera_fill_lines_fan_fl_v1(&pos_step, camera_coords_frame_bounds, ARRAY_SIZE(camera_coords_frame_bounds));
+
+ /* camera frame (skip center) */
+ camera_fill_lines_loop_fl_v1(&pos_step, &camera_coords_frame_bounds[1], ARRAY_SIZE(camera_coords_frame_bounds) - 1);
+
+ /* camera triangle (above the frame) */
+ camera_fill_lines_loop_fl_v1(&pos_step, camera_coords_frame_tri, ARRAY_SIZE(camera_coords_frame_tri));
+
+ BLI_assert(vbo_len_capacity == GWN_vertbuf_raw_used(&pos_step));
+
+ SHC.drw_camera = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_camera;
+}
+
+Gwn_Batch *DRW_cache_camera_frame_get(void)
+{
+ if (!SHC.drw_camera_frame) {
+
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 1, GWN_FETCH_FLOAT);
+ }
+
+ /* Vertices */
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ const int vbo_len_capacity = 8;
+ GWN_vertbuf_data_alloc(vbo, vbo_len_capacity);
+ Gwn_VertBufRaw pos_step;
+ GWN_vertbuf_attr_get_raw_data(vbo, attr_id.pos, &pos_step);
+
+ /* camera frame (skip center) */
+ camera_fill_lines_loop_fl_v1(&pos_step, &camera_coords_frame_bounds[1], ARRAY_SIZE(camera_coords_frame_bounds) - 1);
+
+ BLI_assert(vbo_len_capacity == GWN_vertbuf_raw_used(&pos_step));
+
+ SHC.drw_camera_frame = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_camera_frame;
+}
+
+Gwn_Batch *DRW_cache_camera_tria_get(void)
+{
+ if (!SHC.drw_camera_tria) {
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 1, GWN_FETCH_FLOAT);
+ }
+
+ /* Vertices */
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ const int vbo_len_capacity = 3;
+ GWN_vertbuf_data_alloc(vbo, vbo_len_capacity);
+ Gwn_VertBufRaw pos_step;
+ GWN_vertbuf_attr_get_raw_data(vbo, attr_id.pos, &pos_step);
+
+ /* camera triangle (above the frame) */
+ camera_fill_array_fl_v1(&pos_step, camera_coords_frame_tri, ARRAY_SIZE(camera_coords_frame_tri));
+
+ BLI_assert(vbo_len_capacity == GWN_vertbuf_raw_used(&pos_step));
+
+ SHC.drw_camera_tria = GWN_batch_create_ex(GWN_PRIM_TRIS, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_camera_tria;
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+
+/** \name Object Mode Helpers
+ * \{ */
+
+/* Object Center */
+Gwn_Batch *DRW_cache_single_vert_get(void)
+{
+ if (!SHC.drw_single_vertice) {
+ float v1[3] = {0.0f, 0.0f, 0.0f};
+
+ /* Position Only 3D format */
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, 1);
+
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, 0, v1);
+
+ SHC.drw_single_vertice = GWN_batch_create_ex(GWN_PRIM_POINTS, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return SHC.drw_single_vertice;
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+
+/** \name Meshes
+ * \{ */
+
+Gwn_Batch *DRW_cache_mesh_surface_overlay_get(Object *ob)
+{
+ BLI_assert(ob->type == OB_MESH);
+ Mesh *me = ob->data;
+ return DRW_mesh_batch_cache_get_all_triangles(me);
+}
+
+void DRW_cache_mesh_wire_overlay_get(
+ Object *ob,
+ Gwn_Batch **r_tris, Gwn_Batch **r_ledges, Gwn_Batch **r_lverts)
+{
+ BLI_assert(ob->type == OB_MESH);
+
+ Mesh *me = ob->data;
+
+ *r_tris = DRW_mesh_batch_cache_get_overlay_triangles(me);
+ *r_ledges = DRW_mesh_batch_cache_get_overlay_loose_edges(me);
+ *r_lverts = DRW_mesh_batch_cache_get_overlay_loose_verts(me);
+}
+
+void DRW_cache_mesh_normals_overlay_get(
+ Object *ob,
+ Gwn_Batch **r_tris, Gwn_Batch **r_ledges, Gwn_Batch **r_lverts)
+{
+ BLI_assert(ob->type == OB_MESH);
+
+ Mesh *me = ob->data;
+
+ *r_tris = DRW_mesh_batch_cache_get_overlay_triangles_nor(me);
+ *r_ledges = DRW_mesh_batch_cache_get_overlay_loose_edges_nor(me);
+ *r_lverts = DRW_mesh_batch_cache_get_overlay_loose_verts(me);
+}
+
+Gwn_Batch *DRW_cache_face_centers_get(Object *ob)
+{
+ BLI_assert(ob->type == OB_MESH);
+
+ Mesh *me = ob->data;
+
+ return DRW_mesh_batch_cache_get_overlay_facedots(me);
+}
+
+Gwn_Batch *DRW_cache_mesh_wire_outline_get(Object *ob)
+{
+ BLI_assert(ob->type == OB_MESH);
+
+ Mesh *me = ob->data;
+ return DRW_mesh_batch_cache_get_fancy_edges(me);
+}
+
+Gwn_Batch *DRW_cache_mesh_surface_get(Object *ob)
+{
+ BLI_assert(ob->type == OB_MESH);
+
+ Mesh *me = ob->data;
+ return DRW_mesh_batch_cache_get_triangles_with_normals(me);
+}
+
+Gwn_Batch *DRW_cache_mesh_surface_weights_get(Object *ob)
+{
+ BLI_assert(ob->type == OB_MESH);
+
+ Mesh *me = ob->data;
+ return DRW_mesh_batch_cache_get_triangles_with_normals_and_weights(me, ob->actdef - 1);
+}
+
+Gwn_Batch *DRW_cache_mesh_surface_vert_colors_get(Object *ob)
+{
+ BLI_assert(ob->type == OB_MESH);
+
+ Mesh *me = ob->data;
+ return DRW_mesh_batch_cache_get_triangles_with_normals_and_vert_colors(me);
+}
+
+/* Return list of batches */
+Gwn_Batch **DRW_cache_mesh_surface_shaded_get(
+ Object *ob, struct GPUMaterial **gpumat_array, uint gpumat_array_len)
+{
+ BLI_assert(ob->type == OB_MESH);
+
+ Mesh *me = ob->data;
+ return DRW_mesh_batch_cache_get_surface_shaded(me, gpumat_array, gpumat_array_len);
+}
+
+/* Return list of batches */
+Gwn_Batch **DRW_cache_mesh_surface_texpaint_get(Object *ob)
+{
+ BLI_assert(ob->type == OB_MESH);
+
+ Mesh *me = ob->data;
+ return DRW_mesh_batch_cache_get_surface_texpaint(me);
+}
+
+Gwn_Batch *DRW_cache_mesh_surface_texpaint_single_get(Object *ob)
+{
+ BLI_assert(ob->type == OB_MESH);
+
+ Mesh *me = ob->data;
+ return DRW_mesh_batch_cache_get_surface_texpaint_single(me);
+}
+
+Gwn_Batch *DRW_cache_mesh_surface_verts_get(Object *ob)
+{
+ BLI_assert(ob->type == OB_MESH);
+
+ Mesh *me = ob->data;
+ return DRW_mesh_batch_cache_get_points_with_normals(me);
+}
+
+Gwn_Batch *DRW_cache_mesh_edges_get(Object *ob)
+{
+ BLI_assert(ob->type == OB_MESH);
+
+ Mesh *me = ob->data;
+ return DRW_mesh_batch_cache_get_all_edges(me);
+}
+
+Gwn_Batch *DRW_cache_mesh_verts_get(Object *ob)
+{
+ BLI_assert(ob->type == OB_MESH);
+
+ Mesh *me = ob->data;
+ return DRW_mesh_batch_cache_get_all_verts(me);
+}
+
+Gwn_Batch *DRW_cache_mesh_edges_paint_overlay_get(Object *ob, bool use_wire, bool use_sel)
+{
+ BLI_assert(ob->type == OB_MESH);
+
+ Mesh *me = ob->data;
+ return DRW_mesh_batch_cache_get_weight_overlay_edges(me, use_wire, use_sel);
+}
+
+Gwn_Batch *DRW_cache_mesh_faces_weight_overlay_get(Object *ob)
+{
+ BLI_assert(ob->type == OB_MESH);
+
+ Mesh *me = ob->data;
+ return DRW_mesh_batch_cache_get_weight_overlay_faces(me);
+}
+
+Gwn_Batch *DRW_cache_mesh_verts_weight_overlay_get(Object *ob)
+{
+ BLI_assert(ob->type == OB_MESH);
+
+ Mesh *me = ob->data;
+ return DRW_mesh_batch_cache_get_weight_overlay_verts(me);
+}
+
+void DRW_cache_mesh_sculpt_coords_ensure(Object *ob)
+{
+ BLI_assert(ob->type == OB_MESH);
+
+ Mesh *me = ob->data;
+ DRW_mesh_cache_sculpt_coords_ensure(me);
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+
+/** \name Curve
+ * \{ */
+
+Gwn_Batch *DRW_cache_curve_edge_wire_get(Object *ob)
+{
+ BLI_assert(ob->type == OB_CURVE);
+
+ struct Curve *cu = ob->data;
+ return DRW_curve_batch_cache_get_wire_edge(cu, ob->curve_cache);
+}
+
+Gwn_Batch *DRW_cache_curve_edge_normal_get(Object *ob, float normal_size)
+{
+ BLI_assert(ob->type == OB_CURVE);
+
+ struct Curve *cu = ob->data;
+ return DRW_curve_batch_cache_get_normal_edge(cu, ob->curve_cache, normal_size);
+}
+
+Gwn_Batch *DRW_cache_curve_edge_overlay_get(Object *ob)
+{
+ BLI_assert(ob->type == OB_CURVE);
+
+ struct Curve *cu = ob->data;
+ return DRW_curve_batch_cache_get_overlay_edges(cu);
+}
+
+Gwn_Batch *DRW_cache_curve_vert_overlay_get(Object *ob)
+{
+ BLI_assert(ob->type == OB_CURVE);
+
+ struct Curve *cu = ob->data;
+ return DRW_curve_batch_cache_get_overlay_verts(cu);
+}
+
+Gwn_Batch *DRW_cache_curve_surface_get(Object *ob)
+{
+ BLI_assert(ob->type == OB_CURVE);
+
+ struct Curve *cu = ob->data;
+ return DRW_curve_batch_cache_get_triangles_with_normals(cu, ob->curve_cache);
+}
+
+/* Return list of batches */
+Gwn_Batch **DRW_cache_curve_surface_shaded_get(
+ Object *ob, struct GPUMaterial **gpumat_array, uint gpumat_array_len)
+{
+ BLI_assert(ob->type == OB_CURVE);
+
+ struct Curve *cu = ob->data;
+ return DRW_curve_batch_cache_get_surface_shaded(cu, ob->curve_cache, gpumat_array, gpumat_array_len);
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+
+/** \name MetaBall
+ * \{ */
+
+Gwn_Batch *DRW_cache_mball_surface_get(Object *ob)
+{
+ BLI_assert(ob->type == OB_MBALL);
+ return DRW_metaball_batch_cache_get_triangles_with_normals(ob);
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+
+/** \name Font
+ * \{ */
+
+Gwn_Batch *DRW_cache_text_edge_wire_get(Object *ob)
+{
+ BLI_assert(ob->type == OB_FONT);
+
+ struct Curve *cu = ob->data;
+ return DRW_curve_batch_cache_get_wire_edge(cu, ob->curve_cache);
+}
+
+Gwn_Batch *DRW_cache_text_surface_get(Object *ob)
+{
+ BLI_assert(ob->type == OB_FONT);
+ struct Curve *cu = ob->data;
+ if (cu->editfont && (cu->flag & CU_FAST)) {
+ return NULL;
+ }
+ return DRW_curve_batch_cache_get_triangles_with_normals(cu, ob->curve_cache);
+}
+
+Gwn_Batch **DRW_cache_text_surface_shaded_get(
+ Object *ob, struct GPUMaterial **gpumat_array, uint gpumat_array_len)
+{
+ BLI_assert(ob->type == OB_FONT);
+ struct Curve *cu = ob->data;
+ if (cu->editfont && (cu->flag & CU_FAST)) {
+ return NULL;
+ }
+ return DRW_curve_batch_cache_get_surface_shaded(cu, ob->curve_cache, gpumat_array, gpumat_array_len);
+}
+
+Gwn_Batch *DRW_cache_text_cursor_overlay_get(Object *ob)
+{
+ BLI_assert(ob->type == OB_FONT);
+ struct Curve *cu = ob->data;
+ return DRW_curve_batch_cache_get_overlay_cursor(cu);
+}
+
+Gwn_Batch *DRW_cache_text_select_overlay_get(Object *ob)
+{
+ BLI_assert(ob->type == OB_FONT);
+ struct Curve *cu = ob->data;
+ return DRW_curve_batch_cache_get_overlay_select(cu);
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+
+/** \name Surface
+ * \{ */
+
+Gwn_Batch *DRW_cache_surf_surface_get(Object *ob)
+{
+ BLI_assert(ob->type == OB_SURF);
+
+ struct Curve *cu = ob->data;
+ return DRW_curve_batch_cache_get_triangles_with_normals(cu, ob->curve_cache);
+}
+
+/* Return list of batches */
+Gwn_Batch **DRW_cache_surf_surface_shaded_get(
+ Object *ob, struct GPUMaterial **gpumat_array, uint gpumat_array_len)
+{
+ BLI_assert(ob->type == OB_SURF);
+
+ struct Curve *cu = ob->data;
+ return DRW_curve_batch_cache_get_surface_shaded(cu, ob->curve_cache, gpumat_array, gpumat_array_len);
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+
+/** \name Lattice
+ * \{ */
+
+Gwn_Batch *DRW_cache_lattice_verts_get(Object *ob)
+{
+ BLI_assert(ob->type == OB_LATTICE);
+
+ struct Lattice *lt = ob->data;
+ return DRW_lattice_batch_cache_get_all_verts(lt);
+}
+
+Gwn_Batch *DRW_cache_lattice_wire_get(Object *ob, bool use_weight)
+{
+ BLI_assert(ob->type == OB_LATTICE);
+
+ Lattice *lt = ob->data;
+ int actdef = -1;
+
+ if (use_weight && ob->defbase.first && lt->editlatt->latt->dvert) {
+ actdef = ob->actdef - 1;
+ }
+
+ return DRW_lattice_batch_cache_get_all_edges(lt, use_weight, actdef);
+}
+
+Gwn_Batch *DRW_cache_lattice_vert_overlay_get(Object *ob)
+{
+ BLI_assert(ob->type == OB_LATTICE);
+
+ struct Lattice *lt = ob->data;
+ return DRW_lattice_batch_cache_get_overlay_verts(lt);
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+
+/** \name Particles
+ * \{ */
+
+Gwn_Batch *DRW_cache_particles_get_hair(ParticleSystem *psys, ModifierData *md)
+{
+ return DRW_particles_batch_cache_get_hair(psys, md);
+}
+
+Gwn_Batch *DRW_cache_particles_get_dots(ParticleSystem *psys)
+{
+ return DRW_particles_batch_cache_get_dots(psys);
+}
+
+Gwn_Batch *DRW_cache_particles_get_prim(int type)
+{
+ switch (type) {
+ case PART_DRAW_CROSS:
+ if (!SHC.drw_particle_cross) {
+ static Gwn_VertFormat format = { 0 };
+ static unsigned pos_id, axis_id;
+
+ if (format.attrib_ct == 0) {
+ pos_id = GWN_vertformat_attr_add(&format, "inst_pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ axis_id = GWN_vertformat_attr_add(&format, "axis", GWN_COMP_I32, 1, GWN_FETCH_INT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, 6);
+
+ /* X axis */
+ float co[3] = {-1.0f, 0.0f, 0.0f};
+ int axis = -1;
+ GWN_vertbuf_attr_set(vbo, pos_id, 0, co);
+ GWN_vertbuf_attr_set(vbo, axis_id, 0, &axis);
+
+ co[0] = 1.0f;
+ GWN_vertbuf_attr_set(vbo, pos_id, 1, co);
+ GWN_vertbuf_attr_set(vbo, axis_id, 1, &axis);
+
+ /* Y axis */
+ co[0] = 0.0f;
+ co[1] = -1.0f;
+ GWN_vertbuf_attr_set(vbo, pos_id, 2, co);
+ GWN_vertbuf_attr_set(vbo, axis_id, 2, &axis);
+
+ co[1] = 1.0f;
+ GWN_vertbuf_attr_set(vbo, pos_id, 3, co);
+ GWN_vertbuf_attr_set(vbo, axis_id, 3, &axis);
+
+ /* Z axis */
+ co[1] = 0.0f;
+ co[2] = -1.0f;
+ GWN_vertbuf_attr_set(vbo, pos_id, 4, co);
+ GWN_vertbuf_attr_set(vbo, axis_id, 4, &axis);
+
+ co[2] = 1.0f;
+ GWN_vertbuf_attr_set(vbo, pos_id, 5, co);
+ GWN_vertbuf_attr_set(vbo, axis_id, 5, &axis);
+
+ SHC.drw_particle_cross = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+
+ return SHC.drw_particle_cross;
+ case PART_DRAW_AXIS:
+ if (!SHC.drw_particle_axis) {
+ static Gwn_VertFormat format = { 0 };
+ static unsigned pos_id, axis_id;
+
+ if (format.attrib_ct == 0) {
+ pos_id = GWN_vertformat_attr_add(&format, "inst_pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ axis_id = GWN_vertformat_attr_add(&format, "axis", GWN_COMP_I32, 1, GWN_FETCH_INT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, 6);
+
+ /* X axis */
+ float co[3] = {0.0f, 0.0f, 0.0f};
+ int axis = 0;
+ GWN_vertbuf_attr_set(vbo, pos_id, 0, co);
+ GWN_vertbuf_attr_set(vbo, axis_id, 0, &axis);
+
+ co[0] = 1.0f;
+ GWN_vertbuf_attr_set(vbo, pos_id, 1, co);
+ GWN_vertbuf_attr_set(vbo, axis_id, 1, &axis);
+
+ /* Y axis */
+ co[0] = 0.0f;
+ axis = 1;
+ GWN_vertbuf_attr_set(vbo, pos_id, 2, co);
+ GWN_vertbuf_attr_set(vbo, axis_id, 2, &axis);
+
+ co[1] = 1.0f;
+ GWN_vertbuf_attr_set(vbo, pos_id, 3, co);
+ GWN_vertbuf_attr_set(vbo, axis_id, 3, &axis);
+
+ /* Z axis */
+ co[1] = 0.0f;
+ axis = 2;
+ GWN_vertbuf_attr_set(vbo, pos_id, 4, co);
+ GWN_vertbuf_attr_set(vbo, axis_id, 4, &axis);
+
+ co[2] = 1.0f;
+ GWN_vertbuf_attr_set(vbo, pos_id, 5, co);
+ GWN_vertbuf_attr_set(vbo, axis_id, 5, &axis);
+
+ SHC.drw_particle_axis = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+
+ return SHC.drw_particle_axis;
+ case PART_DRAW_CIRC:
+#define CIRCLE_RESOL 32
+ if (!SHC.drw_particle_circle) {
+ float v[3] = {0.0f, 0.0f, 0.0f};
+ int axis = -1;
+
+ static Gwn_VertFormat format = { 0 };
+ static unsigned pos_id, axis_id;
+
+ if (format.attrib_ct == 0) {
+ pos_id = GWN_vertformat_attr_add(&format, "inst_pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ axis_id = GWN_vertformat_attr_add(&format, "axis", GWN_COMP_I32, 1, GWN_FETCH_INT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, CIRCLE_RESOL);
+
+ for (int a = 0; a < CIRCLE_RESOL; a++) {
+ v[0] = sinf((2.0f * M_PI * a) / ((float)CIRCLE_RESOL));
+ v[1] = cosf((2.0f * M_PI * a) / ((float)CIRCLE_RESOL));
+ v[2] = 0.0f;
+ GWN_vertbuf_attr_set(vbo, pos_id, a, v);
+ GWN_vertbuf_attr_set(vbo, axis_id, a, &axis);
+ }
+
+ SHC.drw_particle_circle = GWN_batch_create_ex(GWN_PRIM_LINE_LOOP, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+
+ return SHC.drw_particle_circle;
+#undef CIRCLE_RESOL
+ default:
+ BLI_assert(false);
+ break;
+ }
+
+ return NULL;
+}
diff --git a/source/blender/draw/intern/draw_cache.h b/source/blender/draw/intern/draw_cache.h
new file mode 100644
index 00000000000..c039bb8883d
--- /dev/null
+++ b/source/blender/draw/intern/draw_cache.h
@@ -0,0 +1,171 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file draw_cache.h
+ * \ingroup draw
+ */
+
+#ifndef __DRAW_CACHE_H__
+#define __DRAW_CACHE_H__
+
+struct Gwn_Batch;
+struct GPUMaterial;
+struct Object;
+struct ModifierData;
+
+void DRW_shape_cache_free(void);
+
+/* Common Shapes */
+struct Gwn_Batch *DRW_cache_fullscreen_quad_get(void);
+struct Gwn_Batch *DRW_cache_quad_get(void);
+struct Gwn_Batch *DRW_cache_sphere_get(void);
+struct Gwn_Batch *DRW_cache_single_vert_get(void);
+struct Gwn_Batch *DRW_cache_single_line_get(void);
+struct Gwn_Batch *DRW_cache_single_line_endpoints_get(void);
+struct Gwn_Batch *DRW_cache_screenspace_circle_get(void);
+
+/* Common Object */
+struct Gwn_Batch *DRW_cache_object_wire_outline_get(struct Object *ob);
+struct Gwn_Batch *DRW_cache_object_surface_get(struct Object *ob);
+struct Gwn_Batch **DRW_cache_object_surface_material_get(
+ struct Object *ob, struct GPUMaterial **gpumat_array, uint gpumat_array_len);
+
+/* Empties */
+struct Gwn_Batch *DRW_cache_plain_axes_get(void);
+struct Gwn_Batch *DRW_cache_single_arrow_get(void);
+struct Gwn_Batch *DRW_cache_cube_get(void);
+struct Gwn_Batch *DRW_cache_circle_get(void);
+struct Gwn_Batch *DRW_cache_square_get(void);
+struct Gwn_Batch *DRW_cache_empty_sphere_get(void);
+struct Gwn_Batch *DRW_cache_empty_cone_get(void);
+struct Gwn_Batch *DRW_cache_arrows_get(void);
+struct Gwn_Batch *DRW_cache_axis_names_get(void);
+struct Gwn_Batch *DRW_cache_image_plane_get(void);
+struct Gwn_Batch *DRW_cache_image_plane_wire_get(void);
+
+/* Force Field */
+struct Gwn_Batch *DRW_cache_field_wind_get(void);
+struct Gwn_Batch *DRW_cache_field_force_get(void);
+struct Gwn_Batch *DRW_cache_field_vortex_get(void);
+struct Gwn_Batch *DRW_cache_field_tube_limit_get(void);
+struct Gwn_Batch *DRW_cache_field_cone_limit_get(void);
+
+/* Lamps */
+struct Gwn_Batch *DRW_cache_lamp_get(void);
+struct Gwn_Batch *DRW_cache_lamp_shadows_get(void);
+struct Gwn_Batch *DRW_cache_lamp_sunrays_get(void);
+struct Gwn_Batch *DRW_cache_lamp_area_get(void);
+struct Gwn_Batch *DRW_cache_lamp_hemi_get(void);
+struct Gwn_Batch *DRW_cache_lamp_spot_get(void);
+struct Gwn_Batch *DRW_cache_lamp_spot_square_get(void);
+
+/* Camera */
+struct Gwn_Batch *DRW_cache_camera_get(void);
+struct Gwn_Batch *DRW_cache_camera_frame_get(void);
+struct Gwn_Batch *DRW_cache_camera_tria_get(void);
+
+/* Speaker */
+struct Gwn_Batch *DRW_cache_speaker_get(void);
+
+/* Probe */
+struct Gwn_Batch *DRW_cache_lightprobe_cube_get(void);
+struct Gwn_Batch *DRW_cache_lightprobe_grid_get(void);
+struct Gwn_Batch *DRW_cache_lightprobe_planar_get(void);
+
+/* Bones */
+struct Gwn_Batch *DRW_cache_bone_octahedral_get(void);
+struct Gwn_Batch *DRW_cache_bone_octahedral_wire_outline_get(void);
+struct Gwn_Batch *DRW_cache_bone_box_get(void);
+struct Gwn_Batch *DRW_cache_bone_box_wire_outline_get(void);
+struct Gwn_Batch *DRW_cache_bone_wire_wire_outline_get(void);
+struct Gwn_Batch *DRW_cache_bone_envelope_solid_get(void);
+struct Gwn_Batch *DRW_cache_bone_envelope_distance_outline_get(void);
+struct Gwn_Batch *DRW_cache_bone_envelope_wire_outline_get(void);
+struct Gwn_Batch *DRW_cache_bone_envelope_head_wire_outline_get(void);
+struct Gwn_Batch *DRW_cache_bone_point_get(void);
+struct Gwn_Batch *DRW_cache_bone_point_wire_outline_get(void);
+struct Gwn_Batch *DRW_cache_bone_arrows_get(void);
+
+/* Meshes */
+struct Gwn_Batch *DRW_cache_mesh_surface_overlay_get(struct Object *ob);
+void DRW_cache_mesh_wire_overlay_get(
+ struct Object *ob,
+ struct Gwn_Batch **r_tris, struct Gwn_Batch **r_ledges, struct Gwn_Batch **r_lverts);
+void DRW_cache_mesh_normals_overlay_get(
+ struct Object *ob,
+ struct Gwn_Batch **r_tris, struct Gwn_Batch **r_ledges, struct Gwn_Batch **r_lverts);
+struct Gwn_Batch *DRW_cache_face_centers_get(struct Object *ob);
+struct Gwn_Batch *DRW_cache_mesh_wire_outline_get(struct Object *ob);
+struct Gwn_Batch *DRW_cache_mesh_surface_get(struct Object *ob);
+struct Gwn_Batch *DRW_cache_mesh_surface_weights_get(struct Object *ob);
+struct Gwn_Batch *DRW_cache_mesh_surface_vert_colors_get(struct Object *ob);
+struct Gwn_Batch *DRW_cache_mesh_surface_verts_get(struct Object *ob);
+struct Gwn_Batch *DRW_cache_mesh_edges_get(struct Object *ob);
+struct Gwn_Batch *DRW_cache_mesh_verts_get(struct Object *ob);
+struct Gwn_Batch *DRW_cache_mesh_edges_paint_overlay_get(struct Object *ob, bool use_wire, bool use_sel);
+struct Gwn_Batch *DRW_cache_mesh_faces_weight_overlay_get(struct Object *ob);
+struct Gwn_Batch *DRW_cache_mesh_verts_weight_overlay_get(struct Object *ob);
+struct Gwn_Batch **DRW_cache_mesh_surface_shaded_get(
+ struct Object *ob, struct GPUMaterial **gpumat_array, uint gpumat_array_len);
+struct Gwn_Batch **DRW_cache_mesh_surface_texpaint_get(struct Object *ob);
+struct Gwn_Batch *DRW_cache_mesh_surface_texpaint_single_get(struct Object *ob);
+
+void DRW_cache_mesh_sculpt_coords_ensure(struct Object *ob);
+
+/* Curve */
+struct Gwn_Batch *DRW_cache_curve_surface_get(struct Object *ob);
+struct Gwn_Batch **DRW_cache_curve_surface_shaded_get(
+ struct Object *ob, struct GPUMaterial **gpumat_array, uint gpumat_array_len);
+struct Gwn_Batch *DRW_cache_curve_surface_verts_get(struct Object *ob);
+struct Gwn_Batch *DRW_cache_curve_edge_wire_get(struct Object *ob);
+/* edit-mode */
+struct Gwn_Batch *DRW_cache_curve_edge_normal_get(struct Object *ob, float normal_size);
+struct Gwn_Batch *DRW_cache_curve_edge_overlay_get(struct Object *ob);
+struct Gwn_Batch *DRW_cache_curve_vert_overlay_get(struct Object *ob);
+
+/* Font */
+struct Gwn_Batch *DRW_cache_text_edge_wire_get(struct Object *ob);
+struct Gwn_Batch *DRW_cache_text_surface_get(struct Object *ob);
+struct Gwn_Batch **DRW_cache_text_surface_shaded_get(
+ struct Object *ob, struct GPUMaterial **gpumat_array, uint gpumat_array_len);
+/* edit-mode */
+struct Gwn_Batch *DRW_cache_text_cursor_overlay_get(struct Object *ob);
+struct Gwn_Batch *DRW_cache_text_select_overlay_get(struct Object *ob);
+
+/* Surface */
+struct Gwn_Batch *DRW_cache_surf_surface_get(struct Object *ob);
+struct Gwn_Batch **DRW_cache_surf_surface_shaded_get(
+ struct Object *ob, struct GPUMaterial **gpumat_array, uint gpumat_array_len);
+
+/* Lattice */
+struct Gwn_Batch *DRW_cache_lattice_verts_get(struct Object *ob);
+struct Gwn_Batch *DRW_cache_lattice_wire_get(struct Object *ob, bool use_weight);
+struct Gwn_Batch *DRW_cache_lattice_vert_overlay_get(struct Object *ob);
+
+/* Particles */
+struct Gwn_Batch *DRW_cache_particles_get_hair(struct ParticleSystem *psys, struct ModifierData *md);
+struct Gwn_Batch *DRW_cache_particles_get_dots(struct ParticleSystem *psys);
+struct Gwn_Batch *DRW_cache_particles_get_prim(int type);
+
+/* Metaball */
+struct Gwn_Batch *DRW_cache_mball_surface_get(struct Object *ob);
+
+#endif /* __DRAW_CACHE_H__ */
diff --git a/source/blender/draw/intern/draw_cache_impl.h b/source/blender/draw/intern/draw_cache_impl.h
new file mode 100644
index 00000000000..0b18f3a257f
--- /dev/null
+++ b/source/blender/draw/intern/draw_cache_impl.h
@@ -0,0 +1,127 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file draw_cache_impl.h
+ * \ingroup draw
+ */
+
+#ifndef __DRAW_CACHE_IMPL_H__
+#define __DRAW_CACHE_IMPL_H__
+
+struct CurveCache;
+struct GPUMaterial;
+struct Gwn_Batch;
+struct Gwn_IndexBuf;
+struct Gwn_VertBuf;
+struct ListBase;
+struct ModifierData;
+struct ParticleSystem;
+
+struct Curve;
+struct Lattice;
+struct Mesh;
+struct MetaBall;
+
+/* Expose via BKE callbacks */
+void DRW_mball_batch_cache_dirty(struct MetaBall *mb, int mode);
+void DRW_mball_batch_cache_free(struct MetaBall *mb);
+
+void DRW_curve_batch_cache_dirty(struct Curve *cu, int mode);
+void DRW_curve_batch_cache_free(struct Curve *cu);
+
+void DRW_mesh_batch_cache_dirty(struct Mesh *me, int mode);
+void DRW_mesh_batch_cache_free(struct Mesh *me);
+
+void DRW_lattice_batch_cache_dirty(struct Lattice *lt, int mode);
+void DRW_lattice_batch_cache_free(struct Lattice *lt);
+
+void DRW_particle_batch_cache_dirty(struct ParticleSystem *psys, int mode);
+void DRW_particle_batch_cache_free(struct ParticleSystem *psys);
+
+/* Curve */
+struct Gwn_Batch *DRW_curve_batch_cache_get_wire_edge(struct Curve *cu, struct CurveCache *ob_curve_cache);
+struct Gwn_Batch *DRW_curve_batch_cache_get_normal_edge(
+ struct Curve *cu, struct CurveCache *ob_curve_cache, float normal_size);
+struct Gwn_Batch *DRW_curve_batch_cache_get_overlay_edges(struct Curve *cu);
+struct Gwn_Batch *DRW_curve_batch_cache_get_overlay_verts(struct Curve *cu);
+
+struct Gwn_Batch *DRW_curve_batch_cache_get_triangles_with_normals(struct Curve *cu, struct CurveCache *ob_curve_cache);
+struct Gwn_Batch **DRW_curve_batch_cache_get_surface_shaded(
+ struct Curve *cu, struct CurveCache *ob_curve_cache,
+ struct GPUMaterial **gpumat_array, uint gpumat_array_len);
+
+/* Metaball */
+struct Gwn_Batch *DRW_metaball_batch_cache_get_triangles_with_normals(struct Object *ob);
+
+/* Curve (Font) */
+struct Gwn_Batch *DRW_curve_batch_cache_get_overlay_cursor(struct Curve *cu);
+struct Gwn_Batch *DRW_curve_batch_cache_get_overlay_select(struct Curve *cu);
+
+/* DispList */
+struct Gwn_VertBuf *DRW_displist_vertbuf_calc_pos_with_normals(struct ListBase *lb);
+struct Gwn_IndexBuf *DRW_displist_indexbuf_calc_triangles_in_order(struct ListBase *lb);
+struct Gwn_IndexBuf **DRW_displist_indexbuf_calc_triangles_in_order_split_by_material(
+ struct ListBase *lb, uint gpumat_array_len);
+struct Gwn_Batch **DRW_displist_batch_calc_tri_pos_normals_and_uv_split_by_material(
+ struct ListBase *lb, uint gpumat_array_len);
+
+/* Lattice */
+struct Gwn_Batch *DRW_lattice_batch_cache_get_all_edges(struct Lattice *lt, bool use_weight, const int actdef);
+struct Gwn_Batch *DRW_lattice_batch_cache_get_all_verts(struct Lattice *lt);
+struct Gwn_Batch *DRW_lattice_batch_cache_get_overlay_verts(struct Lattice *lt);
+
+/* Mesh */
+
+struct Gwn_Batch **DRW_mesh_batch_cache_get_surface_shaded(
+ struct Mesh *me, struct GPUMaterial **gpumat_array, uint gpumat_array_len);
+struct Gwn_Batch **DRW_mesh_batch_cache_get_surface_texpaint(struct Mesh *me);
+struct Gwn_Batch *DRW_mesh_batch_cache_get_surface_texpaint_single(struct Mesh *me);
+struct Gwn_Batch *DRW_mesh_batch_cache_get_weight_overlay_edges(struct Mesh *me, bool use_wire, bool use_sel);
+struct Gwn_Batch *DRW_mesh_batch_cache_get_weight_overlay_faces(struct Mesh *me);
+struct Gwn_Batch *DRW_mesh_batch_cache_get_weight_overlay_verts(struct Mesh *me);
+struct Gwn_Batch *DRW_mesh_batch_cache_get_all_edges(struct Mesh *me);
+struct Gwn_Batch *DRW_mesh_batch_cache_get_all_triangles(struct Mesh *me);
+struct Gwn_Batch *DRW_mesh_batch_cache_get_triangles_with_normals(struct Mesh *me);
+struct Gwn_Batch *DRW_mesh_batch_cache_get_triangles_with_normals_and_weights(struct Mesh *me, int defgroup);
+struct Gwn_Batch *DRW_mesh_batch_cache_get_triangles_with_normals_and_vert_colors(struct Mesh *me);
+struct Gwn_Batch *DRW_mesh_batch_cache_get_triangles_with_select_id(struct Mesh *me, bool use_hide, uint select_id_offset);
+struct Gwn_Batch *DRW_mesh_batch_cache_get_triangles_with_select_mask(struct Mesh *me, bool use_hide);
+struct Gwn_Batch *DRW_mesh_batch_cache_get_points_with_normals(struct Mesh *me);
+struct Gwn_Batch *DRW_mesh_batch_cache_get_all_verts(struct Mesh *me);
+struct Gwn_Batch *DRW_mesh_batch_cache_get_fancy_edges(struct Mesh *me);
+struct Gwn_Batch *DRW_mesh_batch_cache_get_overlay_triangles(struct Mesh *me);
+struct Gwn_Batch *DRW_mesh_batch_cache_get_overlay_triangles_nor(struct Mesh *me);
+struct Gwn_Batch *DRW_mesh_batch_cache_get_overlay_loose_edges(struct Mesh *me);
+struct Gwn_Batch *DRW_mesh_batch_cache_get_overlay_loose_edges_nor(struct Mesh *me);
+struct Gwn_Batch *DRW_mesh_batch_cache_get_overlay_loose_verts(struct Mesh *me);
+struct Gwn_Batch *DRW_mesh_batch_cache_get_overlay_facedots(struct Mesh *me);
+/* edit-mesh selection (use generic function for faces) */
+struct Gwn_Batch *DRW_mesh_batch_cache_get_facedots_with_select_id(struct Mesh *me, uint select_id_offset);
+struct Gwn_Batch *DRW_mesh_batch_cache_get_edges_with_select_id(struct Mesh *me, uint select_id_offset);
+struct Gwn_Batch *DRW_mesh_batch_cache_get_verts_with_select_id(struct Mesh *me, uint select_id_offset);
+
+void DRW_mesh_cache_sculpt_coords_ensure(struct Mesh *me);
+
+/* Particles */
+struct Gwn_Batch *DRW_particles_batch_cache_get_hair(struct ParticleSystem *psys, struct ModifierData *md);
+struct Gwn_Batch *DRW_particles_batch_cache_get_dots(struct ParticleSystem *psys);
+
+#endif /* __DRAW_CACHE_IMPL_H__ */
diff --git a/source/blender/draw/intern/draw_cache_impl_curve.c b/source/blender/draw/intern/draw_cache_impl_curve.c
new file mode 100644
index 00000000000..3939ea062e9
--- /dev/null
+++ b/source/blender/draw/intern/draw_cache_impl_curve.c
@@ -0,0 +1,1118 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2017 by Blender Foundation.
+ * All rights reserved.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file draw_cache_impl_curve.c
+ * \ingroup draw
+ *
+ * \brief Curve API for render engines
+ */
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_utildefines.h"
+#include "BLI_math_vector.h"
+
+#include "DNA_curve_types.h"
+
+#include "BKE_curve.h"
+
+#include "BKE_font.h"
+
+#include "GPU_batch.h"
+
+#include "UI_resources.h"
+
+#include "draw_cache_impl.h" /* own include */
+
+#define SELECT 1
+#define ACTIVE_NURB 1 << 7 /* last char bite */
+#define HANDLE_SEL_OFFSET (TH_HANDLE_SEL_FREE - TH_HANDLE_FREE)
+
+/* Used as values of `color_id` in `edit_curve_overlay_handle_geom.glsl` */
+enum {
+ COLOR_NURB_ULINE_ID = TH_HANDLE_SEL_AUTOCLAMP - TH_HANDLE_FREE + 1,
+ COLOR_NURB_SEL_ULINE_ID,
+ COLOR_ACTIVE_SPLINE,
+
+ TOT_HANDLE_COL,
+};
+
+/**
+ * TODO
+ * - Ensure `CurveCache`, `SEQUENCER_DAG_WORKAROUND`.
+ * - Check number of verts/edges to see if cache is valid.
+ * - Check if 'overlay.edges' can use single attribyte per edge, not 2 (for selection drawing).
+ */
+
+static void curve_batch_cache_clear(Curve *cu);
+
+/* ---------------------------------------------------------------------- */
+/* Curve Interface, direct access to basic data. */
+
+static void curve_render_overlay_verts_edges_len_get(
+ ListBase *lb, bool hide_handles,
+ int *r_vert_len, int *r_edge_len)
+{
+ BLI_assert(r_vert_len || r_edge_len);
+ int vert_len = 0;
+ int edge_len = 0;
+ for (Nurb *nu = lb->first; nu; nu = nu->next) {
+ if (nu->bezt) {
+ vert_len += hide_handles ? nu->pntsu : (nu->pntsu * 3);
+ /* 2x handles per point*/
+ edge_len += 2 * nu->pntsu;
+ }
+ else if (nu->bp) {
+ vert_len += nu->pntsu;
+ /* segments between points */
+ edge_len += nu->pntsu - 1;
+ }
+ }
+ if (r_vert_len) {
+ *r_vert_len = vert_len;
+ }
+ if (r_edge_len) {
+ *r_edge_len = edge_len;
+ }
+}
+
+static void curve_render_wire_verts_edges_len_get(
+ const CurveCache *ob_curve_cache,
+ int *r_vert_len, int *r_edge_len)
+{
+ BLI_assert(r_vert_len || r_edge_len);
+ int vert_len = 0;
+ int edge_len = 0;
+ for (const BevList *bl = ob_curve_cache->bev.first; bl; bl = bl->next) {
+ if (bl->nr > 0) {
+ const bool is_cyclic = bl->poly != -1;
+
+ /* verts */
+ vert_len += bl->nr;
+
+ /* edges */
+ edge_len += bl->nr;
+ if (!is_cyclic) {
+ edge_len -= 1;
+ }
+ }
+ }
+ if (r_vert_len) {
+ *r_vert_len = vert_len;
+ }
+ if (r_edge_len) {
+ *r_edge_len = edge_len;
+ }
+}
+
+static int curve_render_normal_len_get(const ListBase *lb, const CurveCache *ob_curve_cache)
+{
+ int normal_len = 0;
+ const BevList *bl;
+ const Nurb *nu;
+ for (bl = ob_curve_cache->bev.first, nu = lb->first; nu && bl; bl = bl->next, nu = nu->next) {
+ int nr = bl->nr;
+ int skip = nu->resolu / 16;
+#if 0
+ while (nr-- > 0) { /* accounts for empty bevel lists */
+ normal_len += 1;
+ nr -= skip;
+ }
+#else
+ /* Same as loop above */
+ normal_len += (nr / (skip + 1)) + ((nr % (skip + 1)) != 0);
+#endif
+ }
+ return normal_len;
+}
+
+/* ---------------------------------------------------------------------- */
+/* Curve Interface, indirect, partially cached access to complex data. */
+
+typedef struct CurveRenderData {
+ int types;
+
+ struct {
+ int vert_len;
+ int edge_len;
+ } overlay;
+
+ struct {
+ int vert_len;
+ int edge_len;
+ } wire;
+
+ /* edit mode normal's */
+ struct {
+ /* 'edge_len == len * 2'
+ * 'vert_len == len * 3' */
+ int len;
+ } normal;
+
+ struct {
+ EditFont *edit_font;
+ } text;
+
+ bool hide_handles;
+ bool hide_normals;
+
+ /* borrow from 'Object' */
+ CurveCache *ob_curve_cache;
+
+ /* borrow from 'Curve' */
+ ListBase *nurbs;
+
+ /* edit, index in nurb list */
+ int actnu;
+ /* edit, index in active nurb (BPoint or BezTriple) */
+ int actvert;
+} CurveRenderData;
+
+enum {
+ /* Wire center-line */
+ CU_DATATYPE_WIRE = 1 << 0,
+ /* Edit-mode verts and optionally handles */
+ CU_DATATYPE_OVERLAY = 1 << 1,
+ /* Edit-mode normals */
+ CU_DATATYPE_NORMAL = 1 << 2,
+ /* Geometry */
+ CU_DATATYPE_SURFACE = 1 << 3,
+ /* Text */
+ CU_DATATYPE_TEXT_SELECT = 1 << 4,
+};
+
+/*
+ * ob_curve_cache can be NULL, only needed for CU_DATATYPE_WIRE
+ */
+static CurveRenderData *curve_render_data_create(Curve *cu, CurveCache *ob_curve_cache, const int types)
+{
+ CurveRenderData *rdata = MEM_callocN(sizeof(*rdata), __func__);
+ rdata->types = types;
+ ListBase *nurbs;
+
+ rdata->hide_handles = (cu->drawflag & CU_HIDE_HANDLES) != 0;
+ rdata->hide_normals = (cu->drawflag & CU_HIDE_NORMALS) != 0;
+
+ rdata->actnu = cu->actnu;
+ rdata->actvert = cu->actvert;
+
+ rdata->ob_curve_cache = ob_curve_cache;
+
+ if (types & CU_DATATYPE_WIRE) {
+ curve_render_wire_verts_edges_len_get(
+ rdata->ob_curve_cache,
+ &rdata->wire.vert_len, &rdata->wire.edge_len);
+ }
+
+ if (cu->editnurb) {
+ EditNurb *editnurb = cu->editnurb;
+ nurbs = &editnurb->nurbs;
+
+ if (types & CU_DATATYPE_OVERLAY) {
+ curve_render_overlay_verts_edges_len_get(
+ nurbs, rdata->hide_handles,
+ &rdata->overlay.vert_len,
+ rdata->hide_handles ? NULL : &rdata->overlay.edge_len);
+
+ rdata->actnu = cu->actnu;
+ rdata->actvert = cu->actvert;
+ }
+ if (types & CU_DATATYPE_NORMAL) {
+ rdata->normal.len = curve_render_normal_len_get(nurbs, rdata->ob_curve_cache);
+ }
+ }
+ else {
+ nurbs = &cu->nurb;
+ }
+
+ rdata->nurbs = nurbs;
+
+ rdata->text.edit_font = cu->editfont;
+
+ return rdata;
+}
+
+static void curve_render_data_free(CurveRenderData *rdata)
+{
+#if 0
+ if (rdata->loose_verts) {
+ MEM_freeN(rdata->loose_verts);
+ }
+#endif
+ MEM_freeN(rdata);
+}
+
+static int curve_render_data_overlay_verts_len_get(const CurveRenderData *rdata)
+{
+ BLI_assert(rdata->types & CU_DATATYPE_OVERLAY);
+ return rdata->overlay.vert_len;
+}
+
+static int curve_render_data_overlay_edges_len_get(const CurveRenderData *rdata)
+{
+ BLI_assert(rdata->types & CU_DATATYPE_OVERLAY);
+ return rdata->overlay.edge_len;
+}
+
+static int curve_render_data_wire_verts_len_get(const CurveRenderData *rdata)
+{
+ BLI_assert(rdata->types & CU_DATATYPE_WIRE);
+ return rdata->wire.vert_len;
+}
+
+static int curve_render_data_wire_edges_len_get(const CurveRenderData *rdata)
+{
+ BLI_assert(rdata->types & CU_DATATYPE_WIRE);
+ return rdata->wire.edge_len;
+}
+
+static int curve_render_data_normal_len_get(const CurveRenderData *rdata)
+{
+ BLI_assert(rdata->types & CU_DATATYPE_NORMAL);
+ return rdata->normal.len;
+}
+
+enum {
+ VFLAG_VERTEX_SELECTED = 1 << 0,
+ VFLAG_VERTEX_ACTIVE = 1 << 1,
+};
+
+/* ---------------------------------------------------------------------- */
+/* Curve Gwn_Batch Cache */
+
+typedef struct CurveBatchCache {
+ /* center-line */
+ struct {
+ Gwn_VertBuf *verts;
+ Gwn_VertBuf *edges;
+ Gwn_Batch *batch;
+ Gwn_IndexBuf *elem;
+ } wire;
+
+ /* normals */
+ struct {
+ Gwn_VertBuf *verts;
+ Gwn_VertBuf *edges;
+ Gwn_Batch *batch;
+ Gwn_IndexBuf *elem;
+ } normal;
+
+ /* control handles and vertices */
+ struct {
+ Gwn_Batch *edges;
+ Gwn_Batch *verts;
+ } overlay;
+
+ struct {
+ Gwn_VertBuf *verts;
+ Gwn_IndexBuf *triangles_in_order;
+ Gwn_Batch **shaded_triangles;
+ Gwn_Batch *batch;
+ int mat_len;
+ } surface;
+
+ /* 3d text */
+ struct {
+ Gwn_Batch *select;
+ Gwn_Batch *cursor;
+ } text;
+
+ /* settings to determine if cache is invalid */
+ bool is_dirty;
+
+ bool hide_handles;
+ bool hide_normals;
+
+ float normal_size;
+
+ bool is_editmode;
+} CurveBatchCache;
+
+/* Gwn_Batch cache management. */
+
+static bool curve_batch_cache_valid(Curve *cu)
+{
+ CurveBatchCache *cache = cu->batch_cache;
+
+ if (cache == NULL) {
+ return false;
+ }
+
+ if (cache->is_dirty) {
+ return false;
+ }
+
+ if (cache->is_editmode != ((cu->editnurb != NULL) || (cu->editfont != NULL))) {
+ return false;
+ }
+
+ if (cache->is_editmode) {
+ if (cu->editnurb) {
+ if ((cache->hide_handles != ((cu->drawflag & CU_HIDE_HANDLES) != 0))) {
+ return false;
+ }
+ else if ((cache->hide_normals != ((cu->drawflag & CU_HIDE_NORMALS) != 0))) {
+ return false;
+ }
+ }
+ else if (cu->editfont) {
+ /* TODO */
+ }
+ }
+
+ return true;
+}
+
+static void curve_batch_cache_init(Curve *cu)
+{
+ CurveBatchCache *cache = cu->batch_cache;
+
+ if (!cache) {
+ cache = cu->batch_cache = MEM_callocN(sizeof(*cache), __func__);
+ }
+ else {
+ memset(cache, 0, sizeof(*cache));
+ }
+
+ cache->hide_handles = (cu->drawflag & CU_HIDE_HANDLES) != 0;
+ cache->hide_normals = (cu->drawflag & CU_HIDE_NORMALS) != 0;
+
+#if 0
+ ListBase *nurbs;
+ if (cu->editnurb) {
+ EditNurb *editnurb = cu->editnurb;
+ nurbs = &editnurb->nurbs;
+ }
+ else {
+ nurbs = &cu->nurb;
+ }
+#endif
+
+ cache->is_editmode = (cu->editnurb != NULL) || (cu->editfont != NULL);
+
+ cache->is_dirty = false;
+}
+
+static CurveBatchCache *curve_batch_cache_get(Curve *cu)
+{
+ if (!curve_batch_cache_valid(cu)) {
+ curve_batch_cache_clear(cu);
+ curve_batch_cache_init(cu);
+ }
+ return cu->batch_cache;
+}
+
+void DRW_curve_batch_cache_dirty(Curve *cu, int mode)
+{
+ CurveBatchCache *cache = cu->batch_cache;
+ if (cache == NULL) {
+ return;
+ }
+ switch (mode) {
+ case BKE_CURVE_BATCH_DIRTY_ALL:
+ cache->is_dirty = true;
+ break;
+ case BKE_CURVE_BATCH_DIRTY_SELECT:
+ /* editnurb */
+ GWN_BATCH_DISCARD_SAFE(cache->overlay.verts);
+ GWN_BATCH_DISCARD_SAFE(cache->overlay.edges);
+
+ /* editfont */
+ GWN_BATCH_DISCARD_SAFE(cache->text.select);
+ GWN_BATCH_DISCARD_SAFE(cache->text.cursor);
+ break;
+ default:
+ BLI_assert(0);
+ }
+}
+
+static void curve_batch_cache_clear(Curve *cu)
+{
+ CurveBatchCache *cache = cu->batch_cache;
+ if (!cache) {
+ return;
+ }
+
+ GWN_BATCH_DISCARD_SAFE(cache->overlay.verts);
+ GWN_BATCH_DISCARD_SAFE(cache->overlay.edges);
+
+ GWN_VERTBUF_DISCARD_SAFE(cache->surface.verts);
+ GWN_INDEXBUF_DISCARD_SAFE(cache->surface.triangles_in_order);
+ if (cache->surface.shaded_triangles) {
+ for (int i = 0; i < cache->surface.mat_len; ++i) {
+ GWN_BATCH_DISCARD_SAFE(cache->surface.shaded_triangles[i]);
+ }
+ }
+ MEM_SAFE_FREE(cache->surface.shaded_triangles);
+ GWN_BATCH_DISCARD_SAFE(cache->surface.batch);
+
+ /* don't own vbo & elems */
+ GWN_BATCH_DISCARD_SAFE(cache->wire.batch);
+ GWN_VERTBUF_DISCARD_SAFE(cache->wire.verts);
+ GWN_VERTBUF_DISCARD_SAFE(cache->wire.edges);
+ GWN_INDEXBUF_DISCARD_SAFE(cache->wire.elem);
+
+ /* don't own vbo & elems */
+ GWN_BATCH_DISCARD_SAFE(cache->normal.batch);
+ GWN_VERTBUF_DISCARD_SAFE(cache->normal.verts);
+ GWN_VERTBUF_DISCARD_SAFE(cache->normal.edges);
+ GWN_INDEXBUF_DISCARD_SAFE(cache->normal.elem);
+
+ /* 3d text */
+ GWN_BATCH_DISCARD_SAFE(cache->text.cursor);
+ GWN_BATCH_DISCARD_SAFE(cache->text.select);
+}
+
+void DRW_curve_batch_cache_free(Curve *cu)
+{
+ curve_batch_cache_clear(cu);
+ MEM_SAFE_FREE(cu->batch_cache);
+}
+
+/* -------------------------------------------------------------------- */
+
+/** \name Private Curve Cache API
+ * \{ */
+
+/* Gwn_Batch cache usage. */
+static Gwn_VertBuf *curve_batch_cache_get_wire_verts(CurveRenderData *rdata, CurveBatchCache *cache)
+{
+ BLI_assert(rdata->types & CU_DATATYPE_WIRE);
+ BLI_assert(rdata->ob_curve_cache != NULL);
+
+ if (cache->wire.verts == NULL) {
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ /* initialize vertex format */
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ const int vert_len = curve_render_data_wire_verts_len_get(rdata);
+
+ Gwn_VertBuf *vbo = cache->wire.verts = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, vert_len);
+ int vbo_len_used = 0;
+ for (const BevList *bl = rdata->ob_curve_cache->bev.first; bl; bl = bl->next) {
+ if (bl->nr > 0) {
+ const int i_end = vbo_len_used + bl->nr;
+ for (const BevPoint *bevp = bl->bevpoints; vbo_len_used < i_end; vbo_len_used++, bevp++) {
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vbo_len_used, bevp->vec);
+ }
+ }
+ }
+ BLI_assert(vbo_len_used == vert_len);
+ }
+
+ return cache->wire.verts;
+}
+
+static Gwn_IndexBuf *curve_batch_cache_get_wire_edges(CurveRenderData *rdata, CurveBatchCache *cache)
+{
+ BLI_assert(rdata->types & CU_DATATYPE_WIRE);
+ BLI_assert(rdata->ob_curve_cache != NULL);
+
+ if (cache->wire.edges == NULL) {
+ const int vert_len = curve_render_data_wire_verts_len_get(rdata);
+ const int edge_len = curve_render_data_wire_edges_len_get(rdata);
+ int edge_len_used = 0;
+
+ Gwn_IndexBufBuilder elb;
+ GWN_indexbuf_init(&elb, GWN_PRIM_LINES, edge_len, vert_len);
+
+ int i = 0;
+ for (const BevList *bl = rdata->ob_curve_cache->bev.first; bl; bl = bl->next) {
+ if (bl->nr > 0) {
+ const bool is_cyclic = bl->poly != -1;
+ const int i_end = i + (bl->nr);
+ int i_prev;
+ if (is_cyclic) {
+ i_prev = i + (bl->nr - 1);
+ }
+ else {
+ i_prev = i;
+ i += 1;
+ }
+ for (; i < i_end; i_prev = i++) {
+ GWN_indexbuf_add_line_verts(&elb, i_prev, i);
+ edge_len_used += 1;
+ }
+ }
+ }
+
+ if (rdata->hide_handles) {
+ BLI_assert(edge_len_used <= edge_len);
+ }
+ else {
+ BLI_assert(edge_len_used == edge_len);
+ }
+
+ cache->wire.elem = GWN_indexbuf_build(&elb);
+ }
+
+ return cache->wire.elem;
+}
+
+static Gwn_VertBuf *curve_batch_cache_get_normal_verts(CurveRenderData *rdata, CurveBatchCache *cache)
+{
+ BLI_assert(rdata->types & CU_DATATYPE_NORMAL);
+ BLI_assert(rdata->ob_curve_cache != NULL);
+
+ if (cache->normal.verts == NULL) {
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ /* initialize vertex format */
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ const int normal_len = curve_render_data_normal_len_get(rdata);
+ const int vert_len = normal_len * 3;
+
+ Gwn_VertBuf *vbo = cache->normal.verts = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, vert_len);
+ int vbo_len_used = 0;
+
+ const BevList *bl;
+ const Nurb *nu;
+
+ for (bl = rdata->ob_curve_cache->bev.first, nu = rdata->nurbs->first;
+ nu && bl;
+ bl = bl->next, nu = nu->next)
+ {
+ const BevPoint *bevp = bl->bevpoints;
+ int nr = bl->nr;
+ int skip = nu->resolu / 16;
+
+ while (nr-- > 0) { /* accounts for empty bevel lists */
+ const float fac = bevp->radius * cache->normal_size;
+ float vec_a[3]; /* Offset perpendicular to the curve */
+ float vec_b[3]; /* Delta along the curve */
+
+ vec_a[0] = fac;
+ vec_a[1] = 0.0f;
+ vec_a[2] = 0.0f;
+
+ mul_qt_v3(bevp->quat, vec_a);
+ madd_v3_v3fl(vec_a, bevp->dir, -fac);
+
+ reflect_v3_v3v3(vec_b, vec_a, bevp->dir);
+ negate_v3(vec_b);
+
+ add_v3_v3(vec_a, bevp->vec);
+ add_v3_v3(vec_b, bevp->vec);
+
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vbo_len_used++, vec_a);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vbo_len_used++, bevp->vec);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vbo_len_used++, vec_b);
+
+ bevp += skip + 1;
+ nr -= skip;
+ }
+ }
+ BLI_assert(vbo_len_used == vert_len);
+ }
+
+ return cache->normal.verts;
+}
+
+static Gwn_IndexBuf *curve_batch_cache_get_normal_edges(CurveRenderData *rdata, CurveBatchCache *cache)
+{
+ BLI_assert(rdata->types & CU_DATATYPE_NORMAL);
+ BLI_assert(rdata->ob_curve_cache != NULL);
+
+ if (cache->normal.edges == NULL) {
+ const int normal_len = curve_render_data_normal_len_get(rdata);
+ const int vert_len = normal_len * 3;
+ const int edge_len = normal_len * 2;
+
+ Gwn_IndexBufBuilder elb;
+ GWN_indexbuf_init(&elb, GWN_PRIM_LINES, edge_len, vert_len);
+
+ int vbo_len_used = 0;
+ for (int i = 0; i < normal_len; i++) {
+ GWN_indexbuf_add_line_verts(&elb, vbo_len_used + 0, vbo_len_used + 1);
+ GWN_indexbuf_add_line_verts(&elb, vbo_len_used + 1, vbo_len_used + 2);
+ vbo_len_used += 3;
+ }
+
+ BLI_assert(vbo_len_used == vert_len);
+
+ cache->normal.elem = GWN_indexbuf_build(&elb);
+ }
+
+ return cache->normal.elem;
+}
+
+static void curve_batch_cache_create_overlay_batches(Curve *cu)
+{
+ /* Since CU_DATATYPE_OVERLAY is slow to generate, generate them all at once */
+ int options = CU_DATATYPE_OVERLAY;
+
+ CurveBatchCache *cache = curve_batch_cache_get(cu);
+ CurveRenderData *rdata = curve_render_data_create(cu, NULL, options);
+
+ if (cache->overlay.verts == NULL) {
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos, data; } attr_id;
+ if (format.attrib_ct == 0) {
+ /* initialize vertex format */
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ attr_id.data = GWN_vertformat_attr_add(&format, "data", GWN_COMP_U8, 1, GWN_FETCH_INT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ const int vbo_len_capacity = curve_render_data_overlay_verts_len_get(rdata);
+ int vbo_len_used = 0;
+ GWN_vertbuf_data_alloc(vbo, vbo_len_capacity);
+ int i = 0;
+ for (Nurb *nu = rdata->nurbs->first; nu; nu = nu->next) {
+ if (nu->bezt) {
+ int a = 0;
+ for (const BezTriple *bezt = nu->bezt; a < nu->pntsu; a++, bezt++) {
+ if (bezt->hide == false) {
+ const bool is_active = (i == rdata->actvert);
+ char vflag;
+
+ if (rdata->hide_handles) {
+ vflag = (bezt->f2 & SELECT) ?
+ (is_active ? VFLAG_VERTEX_ACTIVE : VFLAG_VERTEX_SELECTED) : 0;
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vbo_len_used, bezt->vec[1]);
+ GWN_vertbuf_attr_set(vbo, attr_id.data, vbo_len_used, &vflag);
+ vbo_len_used += 1;
+ }
+ else {
+ for (int j = 0; j < 3; j++) {
+ vflag = ((&bezt->f1)[j] & SELECT) ?
+ (is_active ? VFLAG_VERTEX_ACTIVE : VFLAG_VERTEX_SELECTED) : 0;
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vbo_len_used, bezt->vec[j]);
+ GWN_vertbuf_attr_set(vbo, attr_id.data, vbo_len_used, &vflag);
+ vbo_len_used += 1;
+ }
+ }
+ }
+ i += 1;
+ }
+ }
+ else if (nu->bp) {
+ int a = 0;
+ for (const BPoint *bp = nu->bp; a < nu->pntsu; a++, bp++) {
+ if (bp->hide == false) {
+ const bool is_active = (i == rdata->actvert);
+ char vflag;
+ vflag = (bp->f1 & SELECT) ? (is_active ? VFLAG_VERTEX_ACTIVE : VFLAG_VERTEX_SELECTED) : 0;
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vbo_len_used, bp->vec);
+ GWN_vertbuf_attr_set(vbo, attr_id.data, vbo_len_used, &vflag);
+ vbo_len_used += 1;
+ }
+ i += 1;
+ }
+ }
+ i += nu->pntsu;
+ }
+ if (vbo_len_capacity != vbo_len_used) {
+ GWN_vertbuf_data_resize(vbo, vbo_len_used);
+ }
+
+ cache->overlay.verts = GWN_batch_create_ex(GWN_PRIM_POINTS, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+
+
+ if ((cache->overlay.edges == NULL) && (rdata->hide_handles == false)) {
+ /* Note: we could reference indices to vertices (above) */
+
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos, data; } attr_id;
+ if (format.attrib_ct == 0) {
+ /* initialize vertex format */
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ attr_id.data = GWN_vertformat_attr_add(&format, "data", GWN_COMP_U8, 1, GWN_FETCH_INT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ const int edge_len = curve_render_data_overlay_edges_len_get(rdata);
+ const int vbo_len_capacity = edge_len * 2;
+ int vbo_len_used = 0;
+ GWN_vertbuf_data_alloc(vbo, vbo_len_capacity);
+ int i = 0;
+ for (Nurb *nu = rdata->nurbs->first; nu; nu = nu->next, i++) {
+ const bool is_active_nurb = (i == cu->actnu);
+
+ if (nu->bezt) {
+ int a = 0;
+ for (const BezTriple *bezt = nu->bezt; a < nu->pntsu; a++, bezt++) {
+ if (bezt->hide == false) {
+ char col_id;
+
+ for (int j = 0; j < 2; j += 1) {
+ /* same vertex twice, only check different selection */
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vbo_len_used, bezt->vec[1]);
+ vbo_len_used += 1;
+
+ col_id = (&bezt->h1)[j];
+ if ((&bezt->f1)[j * 2] & SELECT) {
+ col_id += HANDLE_SEL_OFFSET;
+ }
+ if (is_active_nurb) {
+ col_id |= ACTIVE_NURB;
+ }
+
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vbo_len_used, bezt->vec[j * 2]);
+ GWN_vertbuf_attr_set(vbo, attr_id.data, vbo_len_used, &col_id);
+ vbo_len_used += 1;
+ }
+ }
+ }
+ }
+ else if (nu->bp) {
+ int a = 1;
+ for (const BPoint *bp_prev = nu->bp, *bp_curr = &nu->bp[1]; a < nu->pntsu; a++, bp_prev = bp_curr++) {
+ if ((bp_prev->hide == false) && (bp_curr->hide == false)) {
+ char col_id = ((bp_prev->f1 & SELECT) && (bp_curr->f1 & SELECT)) ? COLOR_NURB_SEL_ULINE_ID : COLOR_NURB_ULINE_ID;
+
+ if (is_active_nurb) {
+ col_id |= ACTIVE_NURB;
+ }
+
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vbo_len_used, bp_prev->vec);
+ vbo_len_used += 1;
+
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vbo_len_used, bp_curr->vec);
+ GWN_vertbuf_attr_set(vbo, attr_id.data, vbo_len_used, &col_id);
+ vbo_len_used += 1;
+
+ }
+ }
+ }
+ }
+ if (vbo_len_capacity != vbo_len_used) {
+ GWN_vertbuf_data_resize(vbo, vbo_len_used);
+ }
+
+ cache->overlay.edges = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+
+ curve_render_data_free(rdata);
+}
+
+static Gwn_Batch *curve_batch_cache_get_pos_and_normals(CurveRenderData *rdata, CurveBatchCache *cache)
+{
+ BLI_assert(rdata->types & CU_DATATYPE_SURFACE);
+ if (cache->surface.batch == NULL) {
+ ListBase *lb = &rdata->ob_curve_cache->disp;
+
+ if (cache->surface.verts == NULL) {
+ cache->surface.verts = DRW_displist_vertbuf_calc_pos_with_normals(lb);
+ }
+ if (cache->surface.triangles_in_order == NULL) {
+ cache->surface.triangles_in_order = DRW_displist_indexbuf_calc_triangles_in_order(lb);
+ }
+ cache->surface.batch = GWN_batch_create(
+ GWN_PRIM_TRIS, cache->surface.verts, cache->surface.triangles_in_order);
+ }
+
+ return cache->surface.batch;
+}
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Private Object/Font Cache API
+ * \{ */
+
+
+static Gwn_Batch *curve_batch_cache_get_overlay_select(CurveRenderData *rdata, CurveBatchCache *cache)
+{
+ BLI_assert(rdata->types & CU_DATATYPE_TEXT_SELECT);
+ if (cache->text.select == NULL) {
+ EditFont *ef = rdata->text.edit_font;
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ const int vbo_len_capacity = ef->selboxes_len * 6;
+ int vbo_len_used = 0;
+ GWN_vertbuf_data_alloc(vbo, vbo_len_capacity);
+
+ float box[4][3];
+
+ /* fill in xy below */
+ box[0][2] = box[1][2] = box[2][2] = box[3][2] = 0.001;
+
+ for (int i = 0; i < ef->selboxes_len; i++) {
+ EditFontSelBox *sb = &ef->selboxes[i];
+
+ float selboxw;
+ if (i + 1 != ef->selboxes_len) {
+ if (ef->selboxes[i + 1].y == sb->y)
+ selboxw = ef->selboxes[i + 1].x - sb->x;
+ else
+ selboxw = sb->w;
+ }
+ else {
+ selboxw = sb->w;
+ }
+
+ if (sb->rot == 0.0f) {
+ copy_v2_fl2(box[0], sb->x, sb->y);
+ copy_v2_fl2(box[1], sb->x + selboxw, sb->y);
+ copy_v2_fl2(box[2], sb->x + selboxw, sb->y + sb->h);
+ copy_v2_fl2(box[3], sb->x, sb->y + sb->h);
+ }
+ else {
+ float mat[2][2];
+
+ angle_to_mat2(mat, sb->rot);
+
+ copy_v2_fl2(box[0], sb->x, sb->y);
+
+ copy_v2_fl2(box[1], selboxw, 0.0f);
+ mul_m2v2(mat, box[1]);
+ add_v2_v2(box[1], &sb->x);
+
+ copy_v2_fl2(box[2], selboxw, sb->h);
+ mul_m2v2(mat, box[2]);
+ add_v2_v2(box[2], &sb->x);
+
+ copy_v2_fl2(box[3], 0.0f, sb->h);
+ mul_m2v2(mat, box[3]);
+ add_v2_v2(box[3], &sb->x);
+ }
+
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vbo_len_used++, box[0]);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vbo_len_used++, box[1]);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vbo_len_used++, box[2]);
+
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vbo_len_used++, box[0]);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vbo_len_used++, box[2]);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vbo_len_used++, box[3]);
+ }
+ BLI_assert(vbo_len_used == vbo_len_capacity);
+ cache->text.select = GWN_batch_create_ex(GWN_PRIM_TRIS, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return cache->text.select;
+}
+
+static Gwn_Batch *curve_batch_cache_get_overlay_cursor(CurveRenderData *rdata, CurveBatchCache *cache)
+{
+ BLI_assert(rdata->types & CU_DATATYPE_TEXT_SELECT);
+ if (cache->text.cursor == NULL) {
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ const int vbo_len_capacity = 4;
+ GWN_vertbuf_data_alloc(vbo, vbo_len_capacity);
+ for (int i = 0; i < 4; i++) {
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, i, rdata->text.edit_font->textcurs[i]);
+ }
+ cache->text.cursor = GWN_batch_create_ex(GWN_PRIM_TRI_FAN, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+ return cache->text.cursor;
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+
+/** \name Public Object/Curve API
+ * \{ */
+
+Gwn_Batch *DRW_curve_batch_cache_get_wire_edge(Curve *cu, CurveCache *ob_curve_cache)
+{
+ CurveBatchCache *cache = curve_batch_cache_get(cu);
+
+ if (cache->wire.batch == NULL) {
+ /* create batch from Curve */
+ CurveRenderData *rdata = curve_render_data_create(cu, ob_curve_cache, CU_DATATYPE_WIRE);
+
+ cache->wire.batch = GWN_batch_create(
+ GWN_PRIM_LINES,
+ curve_batch_cache_get_wire_verts(rdata, cache),
+ curve_batch_cache_get_wire_edges(rdata, cache));
+
+ curve_render_data_free(rdata);
+ }
+ return cache->wire.batch;
+}
+
+Gwn_Batch *DRW_curve_batch_cache_get_normal_edge(Curve *cu, CurveCache *ob_curve_cache, float normal_size)
+{
+ CurveBatchCache *cache = curve_batch_cache_get(cu);
+
+ if (cache->normal.batch != NULL) {
+ cache->normal_size = normal_size;
+ if (cache->normal_size != normal_size) {
+ GWN_BATCH_DISCARD_SAFE(cache->normal.batch);
+ GWN_VERTBUF_DISCARD_SAFE(cache->normal.edges);
+ }
+ }
+ cache->normal_size = normal_size;
+
+ if (cache->normal.batch == NULL) {
+ /* create batch from Curve */
+ CurveRenderData *rdata = curve_render_data_create(cu, ob_curve_cache, CU_DATATYPE_NORMAL);
+
+ cache->normal.batch = GWN_batch_create(
+ GWN_PRIM_LINES,
+ curve_batch_cache_get_normal_verts(rdata, cache),
+ curve_batch_cache_get_normal_edges(rdata, cache));
+
+ curve_render_data_free(rdata);
+ cache->normal_size = normal_size;
+ }
+ return cache->normal.batch;
+}
+
+Gwn_Batch *DRW_curve_batch_cache_get_overlay_edges(Curve *cu)
+{
+ CurveBatchCache *cache = curve_batch_cache_get(cu);
+
+ if (cache->overlay.edges == NULL) {
+ curve_batch_cache_create_overlay_batches(cu);
+ }
+
+ return cache->overlay.edges;
+}
+
+Gwn_Batch *DRW_curve_batch_cache_get_overlay_verts(Curve *cu)
+{
+ CurveBatchCache *cache = curve_batch_cache_get(cu);
+
+ if (cache->overlay.verts == NULL) {
+ curve_batch_cache_create_overlay_batches(cu);
+ }
+
+ return cache->overlay.verts;
+}
+
+Gwn_Batch *DRW_curve_batch_cache_get_triangles_with_normals(
+ struct Curve *cu, struct CurveCache *ob_curve_cache)
+{
+ CurveBatchCache *cache = curve_batch_cache_get(cu);
+
+ if (cache->surface.batch == NULL) {
+ CurveRenderData *rdata = curve_render_data_create(cu, ob_curve_cache, CU_DATATYPE_SURFACE);
+
+ curve_batch_cache_get_pos_and_normals(rdata, cache);
+
+ curve_render_data_free(rdata);
+ }
+
+ return cache->surface.batch;
+}
+
+Gwn_Batch **DRW_curve_batch_cache_get_surface_shaded(
+ struct Curve *cu, struct CurveCache *ob_curve_cache,
+ struct GPUMaterial **UNUSED(gpumat_array), uint gpumat_array_len)
+{
+ CurveBatchCache *cache = curve_batch_cache_get(cu);
+
+ if (cache->surface.mat_len != gpumat_array_len) {
+ /* TODO: deduplicate code */
+ if (cache->surface.shaded_triangles) {
+ for (int i = 0; i < cache->surface.mat_len; ++i) {
+ GWN_BATCH_DISCARD_SAFE(cache->surface.shaded_triangles[i]);
+ }
+ }
+ MEM_SAFE_FREE(cache->surface.shaded_triangles);
+ }
+
+ if (cache->surface.shaded_triangles == NULL) {
+ CurveRenderData *rdata = curve_render_data_create(cu, ob_curve_cache, CU_DATATYPE_SURFACE);
+ ListBase *lb = &rdata->ob_curve_cache->disp;
+
+ cache->surface.mat_len = gpumat_array_len;
+ if (cu->flag & CU_UV_ORCO) {
+ cache->surface.shaded_triangles = DRW_displist_batch_calc_tri_pos_normals_and_uv_split_by_material(
+ lb, gpumat_array_len);
+ }
+ else {
+ cache->surface.shaded_triangles = MEM_mallocN(
+ sizeof(*cache->surface.shaded_triangles) * gpumat_array_len, __func__);
+ Gwn_IndexBuf **el = DRW_displist_indexbuf_calc_triangles_in_order_split_by_material(
+ lb, gpumat_array_len);
+
+ if (cache->surface.verts == NULL) {
+ cache->surface.verts = DRW_displist_vertbuf_calc_pos_with_normals(lb);
+ }
+
+ for (int i = 0; i < gpumat_array_len; ++i) {
+ cache->surface.shaded_triangles[i] = GWN_batch_create_ex(
+ GWN_PRIM_TRIS, cache->surface.verts, el[i], GWN_BATCH_OWNS_INDEX);
+ }
+
+ MEM_freeN(el); /* Save `el` in cache? */
+ }
+
+ curve_render_data_free(rdata);
+ }
+
+ return cache->surface.shaded_triangles;
+}
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Public Object/Font API
+ * \{ */
+
+Gwn_Batch *DRW_curve_batch_cache_get_overlay_select(Curve *cu)
+{
+ CurveBatchCache *cache = curve_batch_cache_get(cu);
+
+ if (cache->text.select == NULL) {
+ CurveRenderData *rdata = curve_render_data_create(cu, NULL, CU_DATATYPE_TEXT_SELECT);
+
+ curve_batch_cache_get_overlay_select(rdata, cache);
+
+ curve_render_data_free(rdata);
+ }
+
+ return cache->text.select;
+}
+
+Gwn_Batch *DRW_curve_batch_cache_get_overlay_cursor(Curve *cu)
+{
+ CurveBatchCache *cache = curve_batch_cache_get(cu);
+
+ if (cache->text.cursor == NULL) {
+ CurveRenderData *rdata = curve_render_data_create(cu, NULL, CU_DATATYPE_TEXT_SELECT);
+
+ curve_batch_cache_get_overlay_cursor(rdata, cache);
+
+ curve_render_data_free(rdata);
+ }
+
+ return cache->text.cursor;
+}
+
+/** \} */
diff --git a/source/blender/draw/intern/draw_cache_impl_displist.c b/source/blender/draw/intern/draw_cache_impl_displist.c
new file mode 100644
index 00000000000..627fb38d9d6
--- /dev/null
+++ b/source/blender/draw/intern/draw_cache_impl_displist.c
@@ -0,0 +1,398 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2017 by Blender Foundation.
+ * All rights reserved.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file draw_cache_impl_displist.c
+ * \ingroup draw
+ *
+ * \brief DispList API for render engines
+ *
+ * \note DispList may be removed soon! This is a utility for object types that use render.
+ */
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_alloca.h"
+#include "BLI_utildefines.h"
+#include "BLI_math_vector.h"
+
+#include "DNA_curve_types.h"
+
+#include "BKE_displist.h"
+
+#include "GPU_batch.h"
+
+#include "draw_cache_impl.h" /* own include */
+
+static int dl_vert_len(const DispList *dl)
+{
+ switch (dl->type) {
+ case DL_INDEX3:
+ case DL_INDEX4:
+ return dl->nr;
+ case DL_SURF:
+ return dl->parts * dl->nr;
+ }
+ return 0;
+}
+
+static int dl_tri_len(const DispList *dl)
+{
+ switch (dl->type) {
+ case DL_INDEX3:
+ return dl->parts;
+ case DL_INDEX4:
+ return dl->parts * 2;
+ case DL_SURF:
+ return dl->totindex * 2;
+ }
+ return 0;
+}
+
+/* see: displist_get_allverts */
+static int curve_render_surface_vert_len_get(const ListBase *lb)
+{
+ int vert_len = 0;
+ for (const DispList *dl = lb->first; dl; dl = dl->next) {
+ vert_len += dl_vert_len(dl);
+ }
+ return vert_len;
+}
+
+static int curve_render_surface_tri_len_get(const ListBase *lb)
+{
+ int tri_len = 0;
+ for (const DispList *dl = lb->first; dl; dl = dl->next) {
+ tri_len += dl_tri_len(dl);
+ }
+ return tri_len;
+}
+
+static void displist_indexbufbuilder_set(Gwn_IndexBufBuilder *elb, const DispList *dl, const int ofs)
+{
+ if (ELEM(dl->type, DL_INDEX3, DL_INDEX4, DL_SURF)) {
+ const int *idx = dl->index;
+ if (dl->type == DL_INDEX3) {
+ const int i_end = dl->parts;
+ for (int i = 0; i < i_end; i++, idx += 3) {
+ GWN_indexbuf_add_tri_verts(elb, idx[0] + ofs, idx[2] + ofs, idx[1] + ofs);
+ }
+ }
+ else if (dl->type == DL_SURF) {
+ const int i_end = dl->totindex;
+ for (int i = 0; i < i_end; i++, idx += 4) {
+ GWN_indexbuf_add_tri_verts(elb, idx[0] + ofs, idx[2] + ofs, idx[1] + ofs);
+ GWN_indexbuf_add_tri_verts(elb, idx[0] + ofs, idx[3] + ofs, idx[2] + ofs);
+ }
+ }
+ else {
+ BLI_assert(dl->type == DL_INDEX4);
+ const int i_end = dl->parts;
+ for (int i = 0; i < i_end; i++, idx += 4) {
+ GWN_indexbuf_add_tri_verts(elb, idx[0] + ofs, idx[1] + ofs, idx[2] + ofs);
+
+ if (idx[2] != idx[3]) {
+ GWN_indexbuf_add_tri_verts(elb, idx[0] + ofs, idx[2] + ofs, idx[3] + ofs);
+ }
+ }
+ }
+ }
+}
+
+Gwn_VertBuf *DRW_displist_vertbuf_calc_pos_with_normals(ListBase *lb)
+{
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos, nor; } attr_id;
+ if (format.attrib_ct == 0) {
+ /* initialize vertex format */
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ attr_id.nor = GWN_vertformat_attr_add(&format, "nor", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, curve_render_surface_vert_len_get(lb));
+
+ BKE_displist_normals_add(lb);
+
+ int vbo_len_used = 0;
+ for (const DispList *dl = lb->first; dl; dl = dl->next) {
+ const bool ndata_is_single = dl->type == DL_INDEX3;
+ if (ELEM(dl->type, DL_INDEX3, DL_INDEX4, DL_SURF)) {
+ const float *fp_co = dl->verts;
+ const float *fp_no = dl->nors;
+ const int vbo_end = vbo_len_used + dl_vert_len(dl);
+ while (vbo_len_used < vbo_end) {
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vbo_len_used, fp_co);
+ if (fp_no) {
+ GWN_vertbuf_attr_set(vbo, attr_id.nor, vbo_len_used, fp_no);
+ if (ndata_is_single == false) {
+ fp_no += 3;
+ }
+ }
+ fp_co += 3;
+ vbo_len_used += 1;
+ }
+ }
+ }
+
+ return vbo;
+}
+
+Gwn_IndexBuf *DRW_displist_indexbuf_calc_triangles_in_order(ListBase *lb)
+{
+ const int tri_len = curve_render_surface_tri_len_get(lb);
+ const int vert_len = curve_render_surface_vert_len_get(lb);
+
+ Gwn_IndexBufBuilder elb;
+ GWN_indexbuf_init(&elb, GWN_PRIM_TRIS, tri_len, vert_len);
+
+ int ofs = 0;
+ for (const DispList *dl = lb->first; dl; dl = dl->next) {
+ displist_indexbufbuilder_set(&elb, dl, ofs);
+ ofs += dl_vert_len(dl);
+ }
+
+ return GWN_indexbuf_build(&elb);
+}
+
+Gwn_IndexBuf **DRW_displist_indexbuf_calc_triangles_in_order_split_by_material(ListBase *lb, uint gpumat_array_len)
+{
+ Gwn_IndexBuf **shaded_triangles_in_order = MEM_callocN(sizeof(*shaded_triangles_in_order) * gpumat_array_len, __func__);
+ Gwn_IndexBufBuilder *elb = BLI_array_alloca(elb, gpumat_array_len);
+
+ const int tri_len = curve_render_surface_tri_len_get(lb);
+ const int vert_len = curve_render_surface_vert_len_get(lb);
+ int i;
+
+ /* Init each index buffer builder */
+ for (i = 0; i < gpumat_array_len; i++) {
+ GWN_indexbuf_init(&elb[i], GWN_PRIM_TRIS, tri_len, vert_len);
+ }
+
+ /* calc each index buffer builder */
+ int ofs = 0;
+ for (const DispList *dl = lb->first; dl; dl = dl->next) {
+ displist_indexbufbuilder_set(&elb[dl->col], dl, ofs);
+ ofs += dl_vert_len(dl);
+ }
+
+ /* build each indexbuf */
+ for (i = 0; i < gpumat_array_len; i++) {
+ shaded_triangles_in_order[i] = GWN_indexbuf_build(&elb[i]);
+ }
+
+ return shaded_triangles_in_order;
+}
+
+static void displist_vertbuf_attr_set_tri_pos_normals_and_uv(
+ Gwn_VertBufRaw *pos_step, Gwn_VertBufRaw *nor_step, Gwn_VertBufRaw *uv_step,
+ const float v1[3], const float v2[3], const float v3[3],
+ const float n1[3], const float n2[3], const float n3[3],
+ const float uv1[2], const float uv2[2], const float uv3[2])
+{
+ copy_v3_v3(GWN_vertbuf_raw_step(pos_step), v1);
+ copy_v3_v3(GWN_vertbuf_raw_step(nor_step), n1);
+ copy_v2_v2(GWN_vertbuf_raw_step(uv_step), uv1);
+
+ copy_v3_v3(GWN_vertbuf_raw_step(pos_step), v2);
+ copy_v3_v3(GWN_vertbuf_raw_step(nor_step), n2);
+ copy_v2_v2(GWN_vertbuf_raw_step(uv_step), uv2);
+
+ copy_v3_v3(GWN_vertbuf_raw_step(pos_step), v3);
+ copy_v3_v3(GWN_vertbuf_raw_step(nor_step), n3);
+ copy_v2_v2(GWN_vertbuf_raw_step(uv_step), uv3);
+}
+
+Gwn_Batch **DRW_displist_batch_calc_tri_pos_normals_and_uv_split_by_material(ListBase *lb, uint gpumat_array_len)
+{
+ static Gwn_VertFormat shaded_triangles_format = { 0 };
+ static struct { uint pos, nor, uv; } attr_id;
+
+ if (shaded_triangles_format.attrib_ct == 0) {
+ /* initialize vertex format */
+ attr_id.pos = GWN_vertformat_attr_add(&shaded_triangles_format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ attr_id.nor = GWN_vertformat_attr_add(&shaded_triangles_format, "nor", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ attr_id.uv = GWN_vertformat_attr_add(&shaded_triangles_format, "u", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ }
+
+ Gwn_Batch **shaded_triangles = MEM_mallocN(sizeof(*shaded_triangles) * gpumat_array_len, __func__);
+
+ Gwn_VertBuf **vbo = BLI_array_alloca(vbo, gpumat_array_len);
+ uint *vbo_len_capacity = BLI_array_alloca(vbo_len_capacity, gpumat_array_len);
+
+ Gwn_VertBufRaw *pos_step, *nor_step, *uv_step;
+ pos_step = BLI_array_alloca(pos_step, gpumat_array_len);
+ nor_step = BLI_array_alloca(nor_step, gpumat_array_len);
+ uv_step = BLI_array_alloca(uv_step, gpumat_array_len);
+
+ /* Create each vertex buffer */
+ for (int i = 0; i < gpumat_array_len; i++) {
+ vbo[i] = GWN_vertbuf_create_with_format(&shaded_triangles_format);
+ vbo_len_capacity[i] = 0;
+ }
+
+ /* Calc `vbo_len_capacity` */
+ for (const DispList *dl = lb->first; dl; dl = dl->next) {
+ vbo_len_capacity[dl->col] += dl_tri_len(dl) * 3;
+ }
+
+ /* Alloc each vertex buffer and get each raw data */
+ for (int i = 0; i < gpumat_array_len; i++) {
+ GWN_vertbuf_data_alloc(vbo[i], vbo_len_capacity[i]);
+ GWN_vertbuf_attr_get_raw_data(vbo[i], attr_id.pos, &pos_step[i]);
+ GWN_vertbuf_attr_get_raw_data(vbo[i], attr_id.nor, &nor_step[i]);
+ GWN_vertbuf_attr_get_raw_data(vbo[i], attr_id.uv, &uv_step[i]);
+ }
+
+ BKE_displist_normals_add(lb);
+
+ for (const DispList *dl = lb->first; dl; dl = dl->next) {
+ if (ELEM(dl->type, DL_INDEX3, DL_INDEX4, DL_SURF)) {
+ const int col = dl->col;
+ const float(*verts)[3] = (float(*)[3])dl->verts;
+ const float(*nors)[3] = (float(*)[3])dl->nors;
+ const int *idx = dl->index;
+ float uv[4][2];
+
+ if (dl->type == DL_INDEX3) {
+ const float x_max = (float)(dl->nr - 1);
+ uv[0][1] = uv[1][1] = uv[2][1] = 0.0f;
+ const int i_end = dl->parts;
+ for (int i = 0; i < i_end; i++, idx += 3) {
+ uv[0][0] = idx[0] / x_max;
+ uv[1][0] = idx[2] / x_max;
+ uv[2][0] = idx[1] / x_max;
+
+ displist_vertbuf_attr_set_tri_pos_normals_and_uv(
+ &pos_step[col], &nor_step[col], &uv_step[col],
+ verts[idx[0]], verts[idx[2]], verts[idx[1]],
+ nors[idx[0]], nors[idx[2]], nors[idx[1]],
+ uv[0], uv[1], uv[2]);
+ }
+ }
+ else if (dl->type == DL_SURF) {
+ uint quad[4];
+ for (int a = 0; a < dl->parts; a++) {
+ if ((dl->flag & DL_CYCL_V) == 0 && a == dl->parts - 1) {
+ break;
+ }
+
+ int b;
+ if (dl->flag & DL_CYCL_U) {
+ quad[0] = dl->nr * a;
+ quad[3] = quad[0] + dl->nr - 1;
+ quad[1] = quad[0] + dl->nr;
+ quad[2] = quad[3] + dl->nr;
+ b = 0;
+ }
+ else {
+ quad[3] = dl->nr * a;
+ quad[0] = quad[3] + 1;
+ quad[2] = quad[3] + dl->nr;
+ quad[1] = quad[0] + dl->nr;
+ b = 1;
+ }
+ if ((dl->flag & DL_CYCL_V) && a == dl->parts - 1) {
+ quad[1] -= dl->parts * dl->nr;
+ quad[2] -= dl->parts * dl->nr;
+ }
+
+ for (; b < dl->nr; b++) {
+ int orco_sizeu = dl->nr - 1;
+ int orco_sizev = dl->parts - 1;
+
+ /* exception as handled in convertblender.c too */
+ if (dl->flag & DL_CYCL_U) {
+ orco_sizeu++;
+ }
+ if (dl->flag & DL_CYCL_V) {
+ orco_sizev++;
+ }
+
+ for (int i = 0; i < 4; i++) {
+ /* find uv based on vertex index into grid array */
+ uv[i][0] = (quad[i] / dl->nr) / (float)orco_sizev;
+ uv[i][1] = (quad[i] % dl->nr) / (float)orco_sizeu;
+
+ /* cyclic correction */
+ if ((i == 1 || i == 2) && uv[i][0] == 0.0f) {
+ uv[i][0] = 1.0f;
+ }
+ if ((i == 0 || i == 1) && uv[i][1] == 0.0f) {
+ uv[i][1] = 1.0f;
+ }
+ }
+
+ displist_vertbuf_attr_set_tri_pos_normals_and_uv(
+ &pos_step[col], &nor_step[col], &uv_step[col],
+ verts[quad[0]], verts[quad[1]], verts[quad[2]],
+ nors[quad[0]], nors[quad[1]], nors[quad[2]],
+ uv[0], uv[1], uv[2]);
+
+ displist_vertbuf_attr_set_tri_pos_normals_and_uv(
+ &pos_step[col], &nor_step[col], &uv_step[col],
+ verts[quad[0]], verts[quad[2]], verts[quad[3]],
+ nors[quad[0]], nors[quad[2]], nors[quad[3]],
+ uv[0], uv[2], uv[3]);
+
+ quad[2] = quad[1];
+ quad[1]++;
+ quad[3] = quad[0];
+ quad[0]++;
+ }
+ }
+ }
+ else {
+ BLI_assert(dl->type == DL_INDEX4);
+ uv[0][0] = uv[0][1] = uv[1][0] = uv[3][1] = 0.0f;
+ uv[1][1] = uv[2][0] = uv[2][1] = uv[3][0] = 1.0f;
+
+ const int i_end = dl->parts;
+ for (int i = 0; i < i_end; i++, idx += 4) {
+ displist_vertbuf_attr_set_tri_pos_normals_and_uv(
+ &pos_step[col], &nor_step[col], &uv_step[col],
+ verts[idx[0]], verts[idx[1]], verts[idx[2]],
+ nors[idx[0]], nors[idx[1]], nors[idx[2]],
+ uv[0], uv[1], uv[2]);
+
+ if (idx[2] != idx[3]) {
+ displist_vertbuf_attr_set_tri_pos_normals_and_uv(
+ &pos_step[col], &nor_step[col], &uv_step[col],
+ verts[idx[0]], verts[idx[2]], verts[idx[3]],
+ nors[idx[0]], nors[idx[2]], nors[idx[3]],
+ uv[0], uv[2], uv[3]);
+ }
+ }
+ }
+ }
+ }
+
+ for (int i = 0; i < gpumat_array_len; i++) {
+ uint vbo_len_used = GWN_vertbuf_raw_used(&pos_step[i]);
+ if (vbo_len_capacity[i] != vbo_len_used) {
+ GWN_vertbuf_data_resize(vbo[i], vbo_len_used);
+ }
+ shaded_triangles[i] = GWN_batch_create_ex(GWN_PRIM_TRIS, vbo[i], NULL, GWN_BATCH_OWNS_VBO);
+ }
+
+ return shaded_triangles;
+}
diff --git a/source/blender/draw/intern/draw_cache_impl_lattice.c b/source/blender/draw/intern/draw_cache_impl_lattice.c
new file mode 100644
index 00000000000..eed408de3cd
--- /dev/null
+++ b/source/blender/draw/intern/draw_cache_impl_lattice.c
@@ -0,0 +1,587 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2017 by Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): Blender Foundation, Mike Erwin, Dalai Felinto
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file draw_cache_impl_lattice.c
+ * \ingroup draw
+ *
+ * \brief Lattice API for render engines
+ */
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_utildefines.h"
+#include "BLI_math_vector.h"
+
+#include "DNA_curve_types.h"
+#include "DNA_lattice_types.h"
+#include "DNA_meshdata_types.h"
+#include "DNA_userdef_types.h"
+
+#include "BKE_lattice.h"
+#include "BKE_deform.h"
+#include "BKE_colorband.h"
+
+#include "GPU_batch.h"
+
+#include "draw_cache_impl.h" /* own include */
+
+#define SELECT 1
+
+/**
+ * TODO
+ * - 'DispList' is currently not used
+ * (we could avoid using since it will be removed)
+ */
+
+static void lattice_batch_cache_clear(Lattice *lt);
+
+/* ---------------------------------------------------------------------- */
+/* Lattice Interface, direct access to basic data. */
+
+static int vert_len_calc(int u, int v, int w)
+{
+ if (u <= 0 || v <= 0 || w <= 0) {
+ return 0;
+ }
+ return u * v * w;
+}
+
+static int edge_len_calc(int u, int v, int w)
+{
+ if (u <= 0 || v <= 0 || w <= 0) {
+ return 0;
+ }
+ return (((((u - 1) * v) +
+ ((v - 1) * u)) * w) +
+ ((w - 1) * (u * v)));
+}
+
+static int lattice_render_verts_len_get(Lattice *lt)
+{
+ if (lt->editlatt) {
+ lt = lt->editlatt->latt;
+ }
+
+ const int u = lt->pntsu;
+ const int v = lt->pntsv;
+ const int w = lt->pntsw;
+
+ if ((lt->flag & LT_OUTSIDE) == 0) {
+ return vert_len_calc(u, v, w);
+ }
+ else {
+ /* TODO remove internal coords */
+ return vert_len_calc(u, v, w);
+ }
+}
+
+static int lattice_render_edges_len_get(Lattice *lt)
+{
+ if (lt->editlatt) {
+ lt = lt->editlatt->latt;
+ }
+
+ const int u = lt->pntsu;
+ const int v = lt->pntsv;
+ const int w = lt->pntsw;
+
+ if ((lt->flag & LT_OUTSIDE) == 0) {
+ return edge_len_calc(u, v, w);
+ }
+ else {
+ /* TODO remove internal coords */
+ return edge_len_calc(u, v, w);
+ }
+}
+
+/* ---------------------------------------------------------------------- */
+/* Lattice Interface, indirect, partially cached access to complex data. */
+
+typedef struct LatticeRenderData {
+ int types;
+
+ int vert_len;
+ int edge_len;
+
+ struct {
+ int u_len, v_len, w_len;
+ } dims;
+ bool show_only_outside;
+
+ struct EditLatt *edit_latt;
+ BPoint *bp;
+
+ int actbp;
+
+ struct MDeformVert *dvert;
+} LatticeRenderData;
+
+enum {
+ LR_DATATYPE_VERT = 1 << 0,
+ LR_DATATYPE_EDGE = 1 << 1,
+ LR_DATATYPE_OVERLAY = 1 << 2,
+};
+
+static LatticeRenderData *lattice_render_data_create(Lattice *lt, const int types)
+{
+ LatticeRenderData *rdata = MEM_callocN(sizeof(*rdata), __func__);
+ rdata->types = types;
+
+ if (lt->editlatt) {
+ EditLatt *editlatt = lt->editlatt;
+ lt = editlatt->latt;
+
+ rdata->edit_latt = editlatt;
+
+ rdata->dvert = lt->dvert;
+
+ if (types & (LR_DATATYPE_VERT)) {
+ rdata->vert_len = lattice_render_verts_len_get(lt);
+ }
+ if (types & (LR_DATATYPE_EDGE)) {
+ rdata->edge_len = lattice_render_edges_len_get(lt);
+ }
+ if (types & LR_DATATYPE_OVERLAY) {
+ rdata->actbp = lt->actbp;
+ }
+ }
+ else {
+ rdata->dvert = NULL;
+
+ if (types & (LR_DATATYPE_VERT)) {
+ rdata->vert_len = lattice_render_verts_len_get(lt);
+ }
+ if (types & (LR_DATATYPE_EDGE)) {
+ rdata->edge_len = lattice_render_edges_len_get(lt);
+ /*no edge data */
+ }
+ }
+
+ rdata->bp = lt->def;
+
+ rdata->dims.u_len = lt->pntsu;
+ rdata->dims.v_len = lt->pntsv;
+ rdata->dims.w_len = lt->pntsw;
+
+ rdata->show_only_outside = (lt->flag & LT_OUTSIDE) != 0;
+ rdata->actbp = lt->actbp;
+
+ return rdata;
+}
+
+static void lattice_render_data_free(LatticeRenderData *rdata)
+{
+#if 0
+ if (rdata->loose_verts) {
+ MEM_freeN(rdata->loose_verts);
+ }
+#endif
+ MEM_freeN(rdata);
+}
+
+static int lattice_render_data_verts_len_get(const LatticeRenderData *rdata)
+{
+ BLI_assert(rdata->types & LR_DATATYPE_VERT);
+ return rdata->vert_len;
+}
+
+static int lattice_render_data_edges_len_get(const LatticeRenderData *rdata)
+{
+ BLI_assert(rdata->types & LR_DATATYPE_EDGE);
+ return rdata->edge_len;
+}
+
+static const BPoint *lattice_render_data_vert_bpoint(const LatticeRenderData *rdata, const int vert_idx)
+{
+ BLI_assert(rdata->types & LR_DATATYPE_VERT);
+ return &rdata->bp[vert_idx];
+}
+
+/* TODO, move into shader? */
+static void rgb_from_weight(float r_rgb[3], const float weight)
+{
+ const float blend = ((weight / 2.0f) + 0.5f);
+
+ if (weight <= 0.25f) { /* blue->cyan */
+ r_rgb[0] = 0.0f;
+ r_rgb[1] = blend * weight * 4.0f;
+ r_rgb[2] = blend;
+ }
+ else if (weight <= 0.50f) { /* cyan->green */
+ r_rgb[0] = 0.0f;
+ r_rgb[1] = blend;
+ r_rgb[2] = blend * (1.0f - ((weight - 0.25f) * 4.0f));
+ }
+ else if (weight <= 0.75f) { /* green->yellow */
+ r_rgb[0] = blend * ((weight - 0.50f) * 4.0f);
+ r_rgb[1] = blend;
+ r_rgb[2] = 0.0f;
+ }
+ else if (weight <= 1.0f) { /* yellow->red */
+ r_rgb[0] = blend;
+ r_rgb[1] = blend * (1.0f - ((weight - 0.75f) * 4.0f));
+ r_rgb[2] = 0.0f;
+ }
+ else {
+ /* exceptional value, unclamped or nan,
+ * avoid uninitialized memory use */
+ r_rgb[0] = 1.0f;
+ r_rgb[1] = 0.0f;
+ r_rgb[2] = 1.0f;
+ }
+}
+
+static void lattice_render_data_weight_col_get(const LatticeRenderData *rdata, const int vert_idx,
+ const int actdef, float r_col[4])
+{
+ if (actdef > -1) {
+ float weight = defvert_find_weight(rdata->dvert + vert_idx, actdef);
+
+ if (U.flag & USER_CUSTOM_RANGE) {
+ BKE_colorband_evaluate(&U.coba_weight, weight, r_col);
+ }
+ else {
+ rgb_from_weight(r_col, weight);
+ }
+
+ r_col[3] = 1.0f;
+ }
+ else {
+ zero_v4(r_col);
+ }
+}
+
+enum {
+ VFLAG_VERTEX_SELECTED = 1 << 0,
+ VFLAG_VERTEX_ACTIVE = 1 << 1,
+};
+
+/* ---------------------------------------------------------------------- */
+/* Lattice Gwn_Batch Cache */
+
+typedef struct LatticeBatchCache {
+ Gwn_VertBuf *pos;
+ Gwn_IndexBuf *edges;
+
+ Gwn_Batch *all_verts;
+ Gwn_Batch *all_edges;
+
+ Gwn_Batch *overlay_verts;
+
+ /* settings to determine if cache is invalid */
+ bool is_dirty;
+
+ struct {
+ int u_len, v_len, w_len;
+ } dims;
+ bool show_only_outside;
+
+ bool is_editmode;
+} LatticeBatchCache;
+
+/* Gwn_Batch cache management. */
+
+static bool lattice_batch_cache_valid(Lattice *lt)
+{
+ LatticeBatchCache *cache = lt->batch_cache;
+
+ if (cache == NULL) {
+ return false;
+ }
+
+ if (cache->is_editmode != (lt->editlatt != NULL)) {
+ return false;
+ }
+
+ if (cache->is_dirty == false) {
+ return true;
+ }
+ else {
+ if (cache->is_editmode) {
+ return false;
+ }
+ else if ((cache->dims.u_len != lt->pntsu) ||
+ (cache->dims.v_len != lt->pntsv) ||
+ (cache->dims.w_len != lt->pntsw) ||
+ ((cache->show_only_outside != ((lt->flag & LT_OUTSIDE) != 0))))
+ {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+static void lattice_batch_cache_init(Lattice *lt)
+{
+ LatticeBatchCache *cache = lt->batch_cache;
+
+ if (!cache) {
+ cache = lt->batch_cache = MEM_callocN(sizeof(*cache), __func__);
+ }
+ else {
+ memset(cache, 0, sizeof(*cache));
+ }
+
+ cache->dims.u_len = lt->pntsu;
+ cache->dims.v_len = lt->pntsv;
+ cache->dims.w_len = lt->pntsw;
+ cache->show_only_outside = (lt->flag & LT_OUTSIDE) != 0;
+
+ cache->is_editmode = lt->editlatt != NULL;
+
+ cache->is_dirty = false;
+}
+
+static LatticeBatchCache *lattice_batch_cache_get(Lattice *lt)
+{
+ if (!lattice_batch_cache_valid(lt)) {
+ lattice_batch_cache_clear(lt);
+ lattice_batch_cache_init(lt);
+ }
+ return lt->batch_cache;
+}
+
+void DRW_lattice_batch_cache_dirty(Lattice *lt, int mode)
+{
+ LatticeBatchCache *cache = lt->batch_cache;
+ if (cache == NULL) {
+ return;
+ }
+ switch (mode) {
+ case BKE_LATTICE_BATCH_DIRTY_ALL:
+ cache->is_dirty = true;
+ break;
+ case BKE_LATTICE_BATCH_DIRTY_SELECT:
+ /* TODO Separate Flag vbo */
+ GWN_BATCH_DISCARD_SAFE(cache->overlay_verts);
+ break;
+ default:
+ BLI_assert(0);
+ }
+}
+
+static void lattice_batch_cache_clear(Lattice *lt)
+{
+ LatticeBatchCache *cache = lt->batch_cache;
+ if (!cache) {
+ return;
+ }
+
+ GWN_BATCH_DISCARD_SAFE(cache->all_verts);
+ GWN_BATCH_DISCARD_SAFE(cache->all_edges);
+ GWN_BATCH_DISCARD_SAFE(cache->overlay_verts);
+
+ GWN_VERTBUF_DISCARD_SAFE(cache->pos);
+ GWN_INDEXBUF_DISCARD_SAFE(cache->edges);
+}
+
+void DRW_lattice_batch_cache_free(Lattice *lt)
+{
+ lattice_batch_cache_clear(lt);
+ MEM_SAFE_FREE(lt->batch_cache);
+}
+
+/* Gwn_Batch cache usage. */
+static Gwn_VertBuf *lattice_batch_cache_get_pos(LatticeRenderData *rdata, LatticeBatchCache *cache,
+ bool use_weight, const int actdef)
+{
+ BLI_assert(rdata->types & LR_DATATYPE_VERT);
+
+ if (cache->pos == NULL) {
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos, col; } attr_id;
+
+ GWN_vertformat_clear(&format);
+
+ /* initialize vertex format */
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ if (use_weight) {
+ attr_id.col = GWN_vertformat_attr_add(&format, "color", GWN_COMP_F32, 4, GWN_FETCH_FLOAT);
+ }
+
+ const int vert_len = lattice_render_data_verts_len_get(rdata);
+
+ cache->pos = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(cache->pos, vert_len);
+ for (int i = 0; i < vert_len; ++i) {
+ const BPoint *bp = lattice_render_data_vert_bpoint(rdata, i);
+ GWN_vertbuf_attr_set(cache->pos, attr_id.pos, i, bp->vec);
+
+ if (use_weight) {
+ float w_col[4];
+ lattice_render_data_weight_col_get(rdata, i, actdef, w_col);
+
+ GWN_vertbuf_attr_set(cache->pos, attr_id.col, i, w_col);
+ }
+ }
+ }
+
+ return cache->pos;
+}
+
+static Gwn_IndexBuf *lattice_batch_cache_get_edges(LatticeRenderData *rdata, LatticeBatchCache *cache)
+{
+ BLI_assert(rdata->types & (LR_DATATYPE_VERT | LR_DATATYPE_EDGE));
+
+ if (cache->edges == NULL) {
+ const int vert_len = lattice_render_data_verts_len_get(rdata);
+ const int edge_len = lattice_render_data_edges_len_get(rdata);
+ int edge_len_real = 0;
+
+ Gwn_IndexBufBuilder elb;
+ GWN_indexbuf_init(&elb, GWN_PRIM_LINES, edge_len, vert_len);
+
+#define LATT_INDEX(u, v, w) \
+ ((((w) * rdata->dims.v_len + (v)) * rdata->dims.u_len) + (u))
+
+ for (int w = 0; w < rdata->dims.w_len; w++) {
+ int wxt = (w == 0 || w == rdata->dims.w_len - 1);
+ for (int v = 0; v < rdata->dims.v_len; v++) {
+ int vxt = (v == 0 || v == rdata->dims.v_len - 1);
+ for (int u = 0; u < rdata->dims.u_len; u++) {
+ int uxt = (u == 0 || u == rdata->dims.u_len - 1);
+
+ if (w && ((uxt || vxt) || !rdata->show_only_outside)) {
+ GWN_indexbuf_add_line_verts(&elb, LATT_INDEX(u, v, w - 1), LATT_INDEX(u, v, w));
+ BLI_assert(edge_len_real <= edge_len);
+ edge_len_real++;
+ }
+ if (v && ((uxt || wxt) || !rdata->show_only_outside)) {
+ GWN_indexbuf_add_line_verts(&elb, LATT_INDEX(u, v - 1, w), LATT_INDEX(u, v, w));
+ BLI_assert(edge_len_real <= edge_len);
+ edge_len_real++;
+ }
+ if (u && ((vxt || wxt) || !rdata->show_only_outside)) {
+ GWN_indexbuf_add_line_verts(&elb, LATT_INDEX(u - 1, v, w), LATT_INDEX(u, v, w));
+ BLI_assert(edge_len_real <= edge_len);
+ edge_len_real++;
+ }
+ }
+ }
+ }
+
+#undef LATT_INDEX
+
+ if (rdata->show_only_outside) {
+ BLI_assert(edge_len_real <= edge_len);
+ }
+ else {
+ BLI_assert(edge_len_real == edge_len);
+ }
+
+ cache->edges = GWN_indexbuf_build(&elb);
+ }
+
+ return cache->edges;
+}
+
+static void lattice_batch_cache_create_overlay_batches(Lattice *lt)
+{
+ /* Since LR_DATATYPE_OVERLAY is slow to generate, generate them all at once */
+ int options = LR_DATATYPE_VERT | LR_DATATYPE_OVERLAY;
+
+ LatticeBatchCache *cache = lattice_batch_cache_get(lt);
+ LatticeRenderData *rdata = lattice_render_data_create(lt, options);
+
+ if (cache->overlay_verts == NULL) {
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos, data; } attr_id;
+ if (format.attrib_ct == 0) {
+ /* initialize vertex format */
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ attr_id.data = GWN_vertformat_attr_add(&format, "data", GWN_COMP_U8, 1, GWN_FETCH_INT);
+ }
+
+ const int vert_len = lattice_render_data_verts_len_get(rdata);
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, vert_len);
+ for (int i = 0; i < vert_len; ++i) {
+ const BPoint *bp = lattice_render_data_vert_bpoint(rdata, i);
+
+ char vflag = 0;
+ if (bp->f1 & SELECT) {
+ if (i == rdata->actbp) {
+ vflag |= VFLAG_VERTEX_ACTIVE;
+ }
+ else {
+ vflag |= VFLAG_VERTEX_SELECTED;
+ }
+ }
+
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, i, bp->vec);
+ GWN_vertbuf_attr_set(vbo, attr_id.data, i, &vflag);
+ }
+
+ cache->overlay_verts = GWN_batch_create_ex(GWN_PRIM_POINTS, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ }
+
+ lattice_render_data_free(rdata);
+}
+
+Gwn_Batch *DRW_lattice_batch_cache_get_all_edges(Lattice *lt, bool use_weight, const int actdef)
+{
+ LatticeBatchCache *cache = lattice_batch_cache_get(lt);
+
+ if (cache->all_edges == NULL) {
+ /* create batch from Lattice */
+ LatticeRenderData *rdata = lattice_render_data_create(lt, LR_DATATYPE_VERT | LR_DATATYPE_EDGE);
+
+ cache->all_edges = GWN_batch_create(GWN_PRIM_LINES, lattice_batch_cache_get_pos(rdata, cache, use_weight, actdef),
+ lattice_batch_cache_get_edges(rdata, cache));
+
+ lattice_render_data_free(rdata);
+ }
+
+ return cache->all_edges;
+}
+
+Gwn_Batch *DRW_lattice_batch_cache_get_all_verts(Lattice *lt)
+{
+ LatticeBatchCache *cache = lattice_batch_cache_get(lt);
+
+ if (cache->all_verts == NULL) {
+ LatticeRenderData *rdata = lattice_render_data_create(lt, LR_DATATYPE_VERT);
+
+ cache->all_verts = GWN_batch_create(GWN_PRIM_POINTS, lattice_batch_cache_get_pos(rdata, cache, false, -1), NULL);
+
+ lattice_render_data_free(rdata);
+ }
+
+ return cache->all_verts;
+}
+
+Gwn_Batch *DRW_lattice_batch_cache_get_overlay_verts(Lattice *lt)
+{
+ LatticeBatchCache *cache = lattice_batch_cache_get(lt);
+
+ if (cache->overlay_verts == NULL) {
+ lattice_batch_cache_create_overlay_batches(lt);
+ }
+
+ return cache->overlay_verts;
+}
diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c
new file mode 100644
index 00000000000..b44c5b8a20b
--- /dev/null
+++ b/source/blender/draw/intern/draw_cache_impl_mesh.c
@@ -0,0 +1,3903 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2017 by Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): Blender Foundation, Mike Erwin, Dalai Felinto
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file draw_cache_impl_mesh.c
+ * \ingroup draw
+ *
+ * \brief Mesh API for render engines
+ */
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_utildefines.h"
+#include "BLI_math_vector.h"
+#include "BLI_math_bits.h"
+#include "BLI_string.h"
+#include "BLI_alloca.h"
+
+#include "DNA_mesh_types.h"
+#include "DNA_meshdata_types.h"
+#include "DNA_object_types.h"
+
+#include "BKE_customdata.h"
+#include "BKE_deform.h"
+#include "BKE_DerivedMesh.h"
+#include "BKE_editmesh.h"
+#include "BKE_editmesh_tangent.h"
+#include "BKE_mesh.h"
+#include "BKE_mesh_tangent.h"
+#include "BKE_colorband.h"
+
+#include "bmesh.h"
+
+#include "GPU_batch.h"
+#include "GPU_draw.h"
+#include "GPU_material.h"
+
+#include "draw_cache_impl.h" /* own include */
+
+static void mesh_batch_cache_clear(Mesh *me);
+
+/* ---------------------------------------------------------------------- */
+
+/** \name Mesh/BMesh Interface (direct access to basic data).
+ * \{ */
+
+static int mesh_render_verts_len_get(Mesh *me)
+{
+ return me->edit_btmesh ? me->edit_btmesh->bm->totvert : me->totvert;
+}
+
+static int mesh_render_edges_len_get(Mesh *me)
+{
+ return me->edit_btmesh ? me->edit_btmesh->bm->totedge : me->totedge;
+}
+
+static int mesh_render_looptri_len_get(Mesh *me)
+{
+ return me->edit_btmesh ? me->edit_btmesh->tottri : poly_to_tri_count(me->totpoly, me->totloop);
+}
+
+static int mesh_render_polys_len_get(Mesh *me)
+{
+ return me->edit_btmesh ? me->edit_btmesh->bm->totface : me->totpoly;
+}
+
+static int mesh_render_mat_len_get(Mesh *me)
+{
+ return MAX2(1, me->totcol);
+}
+
+static int UNUSED_FUNCTION(mesh_render_loops_len_get)(Mesh *me)
+{
+ return me->edit_btmesh ? me->edit_btmesh->bm->totloop : me->totloop;
+}
+
+/** \} */
+
+
+/* ---------------------------------------------------------------------- */
+
+/** \name Mesh/BMesh Interface (indirect, partially cached access to complex data).
+ * \{ */
+
+typedef struct EdgeAdjacentPolys {
+ int count;
+ int face_index[2];
+} EdgeAdjacentPolys;
+
+typedef struct EdgeDrawAttr {
+ unsigned char v_flag;
+ unsigned char e_flag;
+ unsigned char crease;
+ unsigned char bweight;
+} EdgeDrawAttr;
+
+typedef struct MeshRenderData {
+ int types;
+
+ int vert_len;
+ int edge_len;
+ int tri_len;
+ int loop_len;
+ int poly_len;
+ int mat_len;
+ int loose_vert_len;
+ int loose_edge_len;
+
+ BMEditMesh *edit_bmesh;
+ MVert *mvert;
+ MEdge *medge;
+ MLoop *mloop;
+ MPoly *mpoly;
+ float (*orco)[3];
+ MDeformVert *dvert;
+ MLoopUV *mloopuv;
+ MLoopCol *mloopcol;
+ float (*loop_normals)[3];
+
+ /* CustomData 'cd' cache for efficient access. */
+ struct {
+ struct {
+ MLoopUV **uv;
+ int uv_len;
+ int uv_active;
+
+ MLoopCol **vcol;
+ int vcol_len;
+ int vcol_active;
+
+ float (**tangent)[4];
+ int tangent_len;
+ int tangent_active;
+
+ bool *auto_vcol;
+ } layers;
+
+ /* Custom-data offsets (only needed for BMesh access) */
+ struct {
+ int crease;
+ int bweight;
+ int *uv;
+ int *vcol;
+ } offset;
+
+ struct {
+ char (*auto_mix)[32];
+ char (*uv)[32];
+ char (*vcol)[32];
+ char (*tangent)[32];
+ } uuid;
+
+ /* for certain cases we need an output loop-data storage (bmesh tangents) */
+ struct {
+ CustomData ldata;
+ /* grr, special case variable (use in place of 'dm->tangent_mask') */
+ short tangent_mask;
+ } output;
+ } cd;
+
+ BMVert *eve_act;
+ BMEdge *eed_act;
+ BMFace *efa_act;
+
+ /* Data created on-demand (usually not for bmesh-based data). */
+ EdgeAdjacentPolys *edges_adjacent_polys;
+ MLoopTri *mlooptri;
+ int *loose_edges;
+ int *loose_verts;
+
+ float (*poly_normals)[3];
+ float (*vert_weight_color)[3];
+ char (*vert_color)[3];
+ Gwn_PackedNormal *poly_normals_pack;
+ Gwn_PackedNormal *vert_normals_pack;
+ bool *edge_select_bool;
+} MeshRenderData;
+
+enum {
+ MR_DATATYPE_VERT = 1 << 0,
+ MR_DATATYPE_EDGE = 1 << 1,
+ MR_DATATYPE_LOOPTRI = 1 << 2,
+ MR_DATATYPE_LOOP = 1 << 3,
+ MR_DATATYPE_POLY = 1 << 4,
+ MR_DATATYPE_OVERLAY = 1 << 5,
+ MR_DATATYPE_SHADING = 1 << 6,
+ MR_DATATYPE_DVERT = 1 << 7,
+ MR_DATATYPE_LOOPCOL = 1 << 8,
+ MR_DATATYPE_LOOPUV = 1 << 9,
+};
+
+/**
+ * These functions look like they would be slow but they will typically return true on the first iteration.
+ * Only false when all attached elements are hidden.
+ */
+static bool bm_vert_has_visible_edge(const BMVert *v)
+{
+ const BMEdge *e_iter, *e_first;
+
+ e_iter = e_first = v->e;
+ do {
+ if (!BM_elem_flag_test(e_iter, BM_ELEM_HIDDEN)) {
+ return true;
+ }
+ } while ((e_iter = BM_DISK_EDGE_NEXT(e_iter, v)) != e_first);
+ return false;
+}
+
+static bool bm_edge_has_visible_face(const BMEdge *e)
+{
+ const BMLoop *l_iter, *l_first;
+ l_iter = l_first = e->l;
+ do {
+ if (!BM_elem_flag_test(l_iter->f, BM_ELEM_HIDDEN)) {
+ return true;
+ }
+ } while ((l_iter = l_iter->radial_next) != l_first);
+ return false;
+}
+
+
+static void mesh_cd_calc_used_gpu_layers(
+ CustomData *UNUSED(cd_vdata), uchar cd_vused[CD_NUMTYPES],
+ CustomData *cd_ldata, ushort cd_lused[CD_NUMTYPES],
+ struct GPUMaterial **gpumat_array, int gpumat_array_len)
+{
+ /* See: DM_vertex_attributes_from_gpu for similar logic */
+ GPUVertexAttribs gattribs = {{{0}}};
+
+ for (int i = 0; i < gpumat_array_len; i++) {
+ GPUMaterial *gpumat = gpumat_array[i];
+ if (gpumat) {
+ GPU_material_vertex_attributes(gpumat, &gattribs);
+ for (int j = 0; j < gattribs.totlayer; j++) {
+ const char *name = gattribs.layer[j].name;
+ int type = gattribs.layer[j].type;
+ int layer = -1;
+
+ if (type == CD_AUTO_FROM_NAME) {
+ /* We need to deduct what exact layer is used.
+ *
+ * We do it based on the specified name.
+ */
+ if (name[0] != '\0') {
+ layer = CustomData_get_named_layer(cd_ldata, CD_MLOOPUV, name);
+ type = CD_MTFACE;
+
+ if (layer == -1) {
+ layer = CustomData_get_named_layer(cd_ldata, CD_MLOOPCOL, name);
+ type = CD_MCOL;
+ }
+#if 0 /* Tangents are always from UV's - this will never happen. */
+ if (layer == -1) {
+ layer = CustomData_get_named_layer(cd_ldata, CD_TANGENT, name);
+ type = CD_TANGENT;
+ }
+#endif
+ if (layer == -1) {
+ continue;
+ }
+ }
+ else {
+ /* Fall back to the UV layer, which matches old behavior. */
+ type = CD_MTFACE;
+ }
+ }
+
+ switch (type) {
+ case CD_MTFACE:
+ {
+ if (layer == -1) {
+ layer = (name[0] != '\0') ?
+ CustomData_get_named_layer(cd_ldata, CD_MLOOPUV, name) :
+ CustomData_get_active_layer(cd_ldata, CD_MLOOPUV);
+ }
+ if (layer != -1) {
+ cd_lused[CD_MLOOPUV] |= (1 << layer);
+ }
+ break;
+ }
+ case CD_TANGENT:
+ {
+ if (layer == -1) {
+ layer = (name[0] != '\0') ?
+ CustomData_get_named_layer(cd_ldata, CD_MLOOPUV, name) :
+ CustomData_get_active_layer(cd_ldata, CD_MLOOPUV);
+ }
+ if (layer != -1) {
+ cd_lused[CD_TANGENT] |= (1 << layer);
+ }
+ else {
+ /* no UV layers at all => requesting orco */
+ cd_lused[CD_TANGENT] |= DM_TANGENT_MASK_ORCO;
+ cd_vused[CD_ORCO] |= 1;
+ }
+ break;
+ }
+ case CD_MCOL:
+ {
+ if (layer == -1) {
+ layer = (name[0] != '\0') ?
+ CustomData_get_named_layer(cd_ldata, CD_MLOOPCOL, name) :
+ CustomData_get_active_layer(cd_ldata, CD_MLOOPCOL);
+ }
+ if (layer != -1) {
+ cd_lused[CD_MLOOPCOL] |= (1 << layer);
+ }
+ break;
+ }
+ case CD_ORCO:
+ {
+ cd_vused[CD_ORCO] |= 1;
+ break;
+ }
+ }
+ }
+ }
+ }
+}
+
+
+static void mesh_render_calc_normals_loop_and_poly(const Mesh *me, const float split_angle, MeshRenderData *rdata)
+{
+ BLI_assert((me->flag & ME_AUTOSMOOTH) != 0);
+
+ int totloop = me->totloop;
+ int totpoly = me->totpoly;
+ float (*loop_normals)[3] = MEM_mallocN(sizeof(*loop_normals) * totloop, __func__);
+ float (*poly_normals)[3] = MEM_mallocN(sizeof(*poly_normals) * totpoly, __func__);
+ short (*clnors)[2] = CustomData_get_layer(&me->ldata, CD_CUSTOMLOOPNORMAL);
+
+ BKE_mesh_calc_normals_poly(
+ me->mvert, NULL, me->totvert,
+ me->mloop, me->mpoly, totloop, totpoly, poly_normals, false);
+
+ BKE_mesh_normals_loop_split(
+ me->mvert, me->totvert, me->medge, me->totedge,
+ me->mloop, loop_normals, totloop, me->mpoly, poly_normals, totpoly,
+ true, split_angle, NULL, clnors, NULL);
+
+ rdata->loop_len = totloop;
+ rdata->poly_len = totpoly;
+ rdata->loop_normals = loop_normals;
+ rdata->poly_normals = poly_normals;
+}
+
+
+/**
+ * TODO(campbell): 'gpumat_array' may include materials linked to the object.
+ * While not default, object materials should be supported.
+ * Although this only impacts the data thats generated, not the materials that display.
+ */
+static MeshRenderData *mesh_render_data_create_ex(
+ Mesh *me, const int types,
+ struct GPUMaterial **gpumat_array, uint gpumat_array_len)
+{
+ MeshRenderData *rdata = MEM_callocN(sizeof(*rdata), __func__);
+ rdata->types = types;
+ rdata->mat_len = mesh_render_mat_len_get(me);
+
+ CustomData_reset(&rdata->cd.output.ldata);
+
+ const bool is_auto_smooth = (me->flag & ME_AUTOSMOOTH) != 0;
+ const float split_angle = is_auto_smooth ? me->smoothresh : (float)M_PI;
+
+ if (me->edit_btmesh) {
+ BMEditMesh *embm = me->edit_btmesh;
+ BMesh *bm = embm->bm;
+
+ rdata->edit_bmesh = embm;
+
+ int bm_ensure_types = 0;
+ if (types & (MR_DATATYPE_VERT)) {
+ rdata->vert_len = bm->totvert;
+ bm_ensure_types |= BM_VERT;
+ }
+ if (types & (MR_DATATYPE_EDGE)) {
+ rdata->edge_len = bm->totedge;
+ bm_ensure_types |= BM_EDGE;
+ }
+ if (types & MR_DATATYPE_LOOPTRI) {
+ BKE_editmesh_tessface_calc(embm);
+ rdata->tri_len = embm->tottri;
+ }
+ if (types & MR_DATATYPE_LOOP) {
+ int totloop = bm->totloop;
+ if (is_auto_smooth) {
+ rdata->loop_normals = MEM_mallocN(sizeof(*rdata->loop_normals) * totloop, __func__);
+ BM_loops_calc_normal_vcos(bm, NULL, NULL, NULL, true, split_angle, rdata->loop_normals, NULL, NULL, -1);
+ }
+ rdata->loop_len = totloop;
+ bm_ensure_types |= BM_LOOP;
+ }
+ if (types & MR_DATATYPE_POLY) {
+ rdata->poly_len = bm->totface;
+ bm_ensure_types |= BM_FACE;
+ }
+ if (types & MR_DATATYPE_OVERLAY) {
+ rdata->efa_act = BM_mesh_active_face_get(bm, false, true);
+ rdata->eed_act = BM_mesh_active_edge_get(bm);
+ rdata->eve_act = BM_mesh_active_vert_get(bm);
+ rdata->cd.offset.crease = CustomData_get_offset(&bm->edata, CD_CREASE);
+ rdata->cd.offset.bweight = CustomData_get_offset(&bm->edata, CD_BWEIGHT);
+ }
+ if (types & (MR_DATATYPE_DVERT)) {
+ bm_ensure_types |= BM_VERT;
+ }
+
+ BM_mesh_elem_index_ensure(bm, bm_ensure_types);
+ BM_mesh_elem_table_ensure(bm, bm_ensure_types & ~BM_LOOP);
+ if (types & MR_DATATYPE_OVERLAY) {
+ rdata->loose_vert_len = rdata->loose_edge_len = 0;
+
+ int *lverts = rdata->loose_verts = MEM_mallocN(rdata->vert_len * sizeof(int), "Loose Vert");
+ int *ledges = rdata->loose_edges = MEM_mallocN(rdata->edge_len * sizeof(int), "Loose Edges");
+
+ {
+ BLI_assert((bm->elem_table_dirty & BM_VERT) == 0);
+ BMVert **vtable = bm->vtable;
+ for (int i = 0; i < bm->totvert; i++) {
+ const BMVert *eve = vtable[i];
+ if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) {
+ /* Loose vert */
+ if (eve->e == NULL || !bm_vert_has_visible_edge(eve)) {
+ lverts[rdata->loose_vert_len++] = i;
+ }
+ }
+ }
+ }
+
+ {
+ BLI_assert((bm->elem_table_dirty & BM_EDGE) == 0);
+ BMEdge **etable = bm->etable;
+ for (int i = 0; i < bm->totedge; i++) {
+ const BMEdge *eed = etable[i];
+ if (!BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) {
+ /* Loose edge */
+ if (eed->l == NULL || !bm_edge_has_visible_face(eed)) {
+ ledges[rdata->loose_edge_len++] = i;
+ }
+ }
+ }
+ }
+
+ rdata->loose_verts = MEM_reallocN(rdata->loose_verts, rdata->loose_vert_len * sizeof(int));
+ rdata->loose_edges = MEM_reallocN(rdata->loose_edges, rdata->loose_edge_len * sizeof(int));
+ }
+ }
+ else {
+ if (types & (MR_DATATYPE_VERT)) {
+ rdata->vert_len = me->totvert;
+ rdata->mvert = CustomData_get_layer(&me->vdata, CD_MVERT);
+ }
+ if (types & (MR_DATATYPE_EDGE)) {
+ rdata->edge_len = me->totedge;
+ rdata->medge = CustomData_get_layer(&me->edata, CD_MEDGE);
+ }
+ if (types & MR_DATATYPE_LOOPTRI) {
+ const int tri_len = rdata->tri_len = poly_to_tri_count(me->totpoly, me->totloop);
+ rdata->mlooptri = MEM_mallocN(sizeof(*rdata->mlooptri) * tri_len, __func__);
+ BKE_mesh_recalc_looptri(me->mloop, me->mpoly, me->mvert, me->totloop, me->totpoly, rdata->mlooptri);
+ }
+ if (types & MR_DATATYPE_LOOP) {
+ rdata->loop_len = me->totloop;
+ rdata->mloop = CustomData_get_layer(&me->ldata, CD_MLOOP);
+
+ if (is_auto_smooth) {
+ mesh_render_calc_normals_loop_and_poly(me, split_angle, rdata);
+ }
+ }
+ if (types & MR_DATATYPE_POLY) {
+ rdata->poly_len = me->totpoly;
+ rdata->mpoly = CustomData_get_layer(&me->pdata, CD_MPOLY);
+ }
+ if (types & MR_DATATYPE_DVERT) {
+ rdata->vert_len = me->totvert;
+ rdata->dvert = CustomData_get_layer(&me->vdata, CD_MDEFORMVERT);
+ }
+ if (types & MR_DATATYPE_LOOPCOL) {
+ rdata->loop_len = me->totloop;
+ rdata->mloopcol = CustomData_get_layer(&me->ldata, CD_MLOOPCOL);
+ }
+ if (types & MR_DATATYPE_LOOPUV) {
+ rdata->loop_len = me->totloop;
+ rdata->mloopuv = CustomData_get_layer(&me->ldata, CD_MLOOPUV);
+ }
+ }
+
+ if (types & MR_DATATYPE_SHADING) {
+ CustomData *cd_vdata, *cd_ldata;
+
+ if (me->edit_btmesh) {
+ BMesh *bm = me->edit_btmesh->bm;
+ cd_vdata = &bm->vdata;
+ cd_ldata = &bm->ldata;
+ }
+ else {
+ cd_vdata = &me->vdata;
+ cd_ldata = &me->ldata;
+ }
+
+ /* Add edge/poly if we need them */
+ uchar cd_vused[CD_NUMTYPES] = {0};
+ ushort cd_lused[CD_NUMTYPES] = {0};
+
+ mesh_cd_calc_used_gpu_layers(
+ cd_vdata, cd_vused,
+ cd_ldata, cd_lused,
+ gpumat_array, gpumat_array_len);
+
+
+ rdata->cd.layers.uv_active = CustomData_get_active_layer(cd_ldata, CD_MLOOPUV);
+ rdata->cd.layers.vcol_active = CustomData_get_active_layer(cd_ldata, CD_MLOOPCOL);
+ rdata->cd.layers.tangent_active = rdata->cd.layers.uv_active;
+
+#define CD_VALIDATE_ACTIVE_LAYER(active_index, used) \
+ if ((active_index != -1) && (used & (1 << active_index)) == 0) { \
+ active_index = -1; \
+ } ((void)0)
+
+ CD_VALIDATE_ACTIVE_LAYER(rdata->cd.layers.uv_active, cd_lused[CD_MLOOPUV]);
+ CD_VALIDATE_ACTIVE_LAYER(rdata->cd.layers.tangent_active, cd_lused[CD_TANGENT]);
+ CD_VALIDATE_ACTIVE_LAYER(rdata->cd.layers.vcol_active, cd_lused[CD_MLOOPCOL]);
+
+#undef CD_VALIDATE_ACTIVE_LAYER
+
+ if (cd_vused[CD_ORCO] & 1) {
+ rdata->orco = CustomData_get_layer(cd_vdata, CD_ORCO);
+ /* If orco is not available compute it ourselves */
+ if (!rdata->orco) {
+ if (me->edit_btmesh) {
+ BMesh *bm = me->edit_btmesh->bm;
+ rdata->orco = MEM_mallocN(sizeof(*rdata->orco) * rdata->vert_len, "orco mesh");
+ BLI_assert((bm->elem_table_dirty & BM_VERT) == 0);
+ BMVert **vtable = bm->vtable;
+ for (int i = 0; i < bm->totvert; i++) {
+ copy_v3_v3(rdata->orco[i], vtable[i]->co);
+ }
+ BKE_mesh_orco_verts_transform(me, rdata->orco, rdata->vert_len, 0);
+ }
+ else {
+ rdata->orco = MEM_mallocN(sizeof(*rdata->orco) * rdata->vert_len, "orco mesh");
+ MVert *mvert = rdata->mvert;
+ for (int a = 0; a < rdata->vert_len; a++, mvert++) {
+ copy_v3_v3(rdata->orco[a], mvert->co);
+ }
+ BKE_mesh_orco_verts_transform(me, rdata->orco, rdata->vert_len, 0);
+ }
+ }
+ }
+ else {
+ rdata->orco = NULL;
+ }
+
+ /* don't access mesh directly, instead use vars taken from BMesh or Mesh */
+#define me DONT_USE_THIS
+#ifdef me /* quiet warning */
+#endif
+ struct {
+ uint uv_len;
+ uint vcol_len;
+ } cd_layers_src = {
+ .uv_len = CustomData_number_of_layers(cd_ldata, CD_MLOOPUV),
+ .vcol_len = CustomData_number_of_layers(cd_ldata, CD_MLOOPCOL),
+ };
+
+ rdata->cd.layers.uv_len = count_bits_i(cd_lused[CD_MLOOPUV]);
+ rdata->cd.layers.tangent_len = count_bits_i(cd_lused[CD_TANGENT]);
+ rdata->cd.layers.vcol_len = count_bits_i(cd_lused[CD_MLOOPCOL]);
+
+ rdata->cd.layers.uv = MEM_mallocN(sizeof(*rdata->cd.layers.uv) * rdata->cd.layers.uv_len, __func__);
+ rdata->cd.layers.vcol = MEM_mallocN(sizeof(*rdata->cd.layers.vcol) * rdata->cd.layers.vcol_len, __func__);
+ rdata->cd.layers.tangent = MEM_mallocN(sizeof(*rdata->cd.layers.tangent) * rdata->cd.layers.tangent_len, __func__);
+
+ rdata->cd.uuid.uv = MEM_mallocN(sizeof(*rdata->cd.uuid.uv) * rdata->cd.layers.uv_len, __func__);
+ rdata->cd.uuid.vcol = MEM_mallocN(sizeof(*rdata->cd.uuid.vcol) * rdata->cd.layers.vcol_len, __func__);
+ rdata->cd.uuid.tangent = MEM_mallocN(sizeof(*rdata->cd.uuid.tangent) * rdata->cd.layers.tangent_len, __func__);
+
+ rdata->cd.offset.uv = MEM_mallocN(sizeof(*rdata->cd.offset.uv) * rdata->cd.layers.uv_len, __func__);
+ rdata->cd.offset.vcol = MEM_mallocN(sizeof(*rdata->cd.offset.vcol) * rdata->cd.layers.vcol_len, __func__);
+
+ /* Allocate max */
+ rdata->cd.layers.auto_vcol = MEM_callocN(
+ sizeof(*rdata->cd.layers.auto_vcol) * rdata->cd.layers.vcol_len, __func__);
+ rdata->cd.uuid.auto_mix = MEM_mallocN(
+ sizeof(*rdata->cd.uuid.auto_mix) * (rdata->cd.layers.vcol_len + rdata->cd.layers.uv_len), __func__);
+
+ /* XXX FIXME XXX */
+ /* We use a hash to identify each data layer based on its name.
+ * Gawain then search for this name in the current shader and bind if it exists.
+ * NOTE : This is prone to hash collision.
+ * One solution to hash collision would be to format the cd layer name
+ * to a safe glsl var name, but without name clash.
+ * NOTE 2 : Replicate changes to code_generate_vertex_new() in gpu_codegen.c */
+ if (rdata->cd.layers.vcol_len != 0) {
+ for (int i_src = 0, i_dst = 0; i_src < cd_layers_src.vcol_len; i_src++, i_dst++) {
+ if ((cd_lused[CD_MLOOPCOL] & (1 << i_src)) == 0) {
+ i_dst--;
+ if (rdata->cd.layers.vcol_active >= i_src) {
+ rdata->cd.layers.vcol_active--;
+ }
+ }
+ else {
+ const char *name = CustomData_get_layer_name(cd_ldata, CD_MLOOPCOL, i_src);
+ unsigned int hash = BLI_ghashutil_strhash_p(name);
+ BLI_snprintf(rdata->cd.uuid.vcol[i_dst], sizeof(*rdata->cd.uuid.vcol), "c%u", hash);
+ rdata->cd.layers.vcol[i_dst] = CustomData_get_layer_n(cd_ldata, CD_MLOOPCOL, i_src);
+ if (rdata->edit_bmesh) {
+ rdata->cd.offset.vcol[i_dst] = CustomData_get_n_offset(
+ &rdata->edit_bmesh->bm->ldata, CD_MLOOPCOL, i_src);
+ }
+
+ /* Gather number of auto layers. */
+ /* We only do vcols that are not overridden by uvs */
+ if (CustomData_get_named_layer_index(cd_ldata, CD_MLOOPUV, name) == -1) {
+ BLI_snprintf(
+ rdata->cd.uuid.auto_mix[rdata->cd.layers.uv_len + i_dst],
+ sizeof(*rdata->cd.uuid.auto_mix), "a%u", hash);
+ rdata->cd.layers.auto_vcol[i_dst] = true;
+ }
+ }
+ }
+ }
+
+ /* Start Fresh */
+ CustomData_free_layers(cd_ldata, CD_TANGENT, rdata->loop_len);
+ CustomData_free_layers(cd_ldata, CD_MLOOPTANGENT, rdata->loop_len);
+
+ if (rdata->cd.layers.uv_len != 0) {
+ for (int i_src = 0, i_dst = 0; i_src < cd_layers_src.uv_len; i_src++, i_dst++) {
+ if ((cd_lused[CD_MLOOPUV] & (1 << i_src)) == 0) {
+ i_dst--;
+ if (rdata->cd.layers.uv_active >= i_src) {
+ rdata->cd.layers.uv_active--;
+ }
+ }
+ else {
+ const char *name = CustomData_get_layer_name(cd_ldata, CD_MLOOPUV, i_src);
+ unsigned int hash = BLI_ghashutil_strhash_p(name);
+
+ BLI_snprintf(rdata->cd.uuid.uv[i_dst], sizeof(*rdata->cd.uuid.uv), "u%u", hash);
+ rdata->cd.layers.uv[i_dst] = CustomData_get_layer_n(cd_ldata, CD_MLOOPUV, i_src);
+ if (rdata->edit_bmesh) {
+ rdata->cd.offset.uv[i_dst] = CustomData_get_n_offset(
+ &rdata->edit_bmesh->bm->ldata, CD_MLOOPUV, i_src);
+ }
+ BLI_snprintf(rdata->cd.uuid.auto_mix[i_dst], sizeof(*rdata->cd.uuid.auto_mix), "a%u", hash);
+ }
+ }
+ }
+
+ if (rdata->cd.layers.tangent_len != 0) {
+
+ /* -------------------------------------------------------------------- */
+ /* Pre-calculate tangents into 'rdata->cd.output.ldata' */
+
+ BLI_assert(!CustomData_has_layer(&rdata->cd.output.ldata, CD_TANGENT));
+
+ /* Tangent Names */
+ char tangent_names[MAX_MTFACE][MAX_NAME];
+ for (int i_src = 0, i_dst = 0; i_src < cd_layers_src.uv_len; i_src++, i_dst++) {
+ if ((cd_lused[CD_TANGENT] & (1 << i_src)) == 0) {
+ i_dst--;
+ }
+ else {
+ BLI_strncpy(
+ tangent_names[i_dst],
+ CustomData_get_layer_name(cd_ldata, CD_MLOOPUV, i_src), MAX_NAME);
+ }
+ }
+
+ /* If tangent from orco is requested, decrement tangent_len */
+ int actual_tangent_len = (cd_lused[CD_TANGENT] & DM_TANGENT_MASK_ORCO) ?
+ rdata->cd.layers.tangent_len - 1 : rdata->cd.layers.tangent_len;
+ if (rdata->edit_bmesh) {
+ BMEditMesh *em = rdata->edit_bmesh;
+ BMesh *bm = em->bm;
+
+ if (is_auto_smooth && rdata->loop_normals == NULL) {
+ /* Should we store the previous array of `loop_normals` in somewhere? */
+ rdata->loop_len = bm->totloop;
+ rdata->loop_normals = MEM_mallocN(sizeof(*rdata->loop_normals) * rdata->loop_len, __func__);
+ BM_loops_calc_normal_vcos(bm, NULL, NULL, NULL, true, split_angle, rdata->loop_normals, NULL, NULL, -1);
+ }
+
+ bool calc_active_tangent = false;
+
+ BKE_editmesh_loop_tangent_calc(
+ em, calc_active_tangent,
+ tangent_names, actual_tangent_len,
+ rdata->poly_normals, rdata->loop_normals,
+ rdata->orco,
+ &rdata->cd.output.ldata, bm->totloop,
+ &rdata->cd.output.tangent_mask);
+ }
+ else {
+#undef me
+
+ if (is_auto_smooth && rdata->loop_normals == NULL) {
+ /* Should we store the previous array of `loop_normals` in CustomData? */
+ mesh_render_calc_normals_loop_and_poly(me, split_angle, rdata);
+ }
+
+ bool calc_active_tangent = false;
+
+ BKE_mesh_calc_loop_tangent_ex(
+ me->mvert,
+ me->mpoly, me->totpoly,
+ me->mloop,
+ rdata->mlooptri, rdata->tri_len,
+ cd_ldata,
+ calc_active_tangent,
+ tangent_names, actual_tangent_len,
+ rdata->poly_normals, rdata->loop_normals,
+ rdata->orco,
+ &rdata->cd.output.ldata, me->totloop,
+ &rdata->cd.output.tangent_mask);
+
+ /* If we store tangents in the mesh, set temporary. */
+#if 0
+ CustomData_set_layer_flag(cd_ldata, CD_TANGENT, CD_FLAG_TEMPORARY);
+#endif
+
+#define me DONT_USE_THIS
+#ifdef me /* quiet warning */
+#endif
+ }
+
+ /* End tangent calculation */
+ /* -------------------------------------------------------------------- */
+
+ BLI_assert(CustomData_number_of_layers(&rdata->cd.output.ldata, CD_TANGENT) == rdata->cd.layers.tangent_len);
+
+ int i_dst = 0;
+ for (int i_src = 0; i_src < cd_layers_src.uv_len; i_src++, i_dst++) {
+ if ((cd_lused[CD_TANGENT] & (1 << i_src)) == 0) {
+ i_dst--;
+ if (rdata->cd.layers.tangent_active >= i_src) {
+ rdata->cd.layers.tangent_active--;
+ }
+ }
+ else {
+ const char *name = CustomData_get_layer_name(cd_ldata, CD_MLOOPUV, i_src);
+ unsigned int hash = BLI_ghashutil_strhash_p(name);
+
+ BLI_snprintf(rdata->cd.uuid.tangent[i_dst], sizeof(*rdata->cd.uuid.tangent), "t%u", hash);
+
+ /* Done adding tangents. */
+
+ /* note: BKE_editmesh_loop_tangent_calc calculates 'CD_TANGENT',
+ * not 'CD_MLOOPTANGENT' (as done below). It's OK, they're compatible. */
+
+ /* note: normally we'd use 'i_src' here, but 'i_dst' is in sync with 'rdata->cd.output' */
+ rdata->cd.layers.tangent[i_dst] = CustomData_get_layer_n(&rdata->cd.output.ldata, CD_TANGENT, i_dst);
+ if (rdata->tri_len != 0) {
+ BLI_assert(rdata->cd.layers.tangent[i_dst] != NULL);
+ }
+ }
+ }
+ if (cd_lused[CD_TANGENT] & DM_TANGENT_MASK_ORCO) {
+ const char *name = CustomData_get_layer_name(&rdata->cd.output.ldata, CD_TANGENT, i_dst);
+ unsigned int hash = BLI_ghashutil_strhash_p(name);
+ BLI_snprintf(rdata->cd.uuid.tangent[i_dst], sizeof(*rdata->cd.uuid.tangent), "t%u", hash);
+
+ rdata->cd.layers.tangent[i_dst] = CustomData_get_layer_n(&rdata->cd.output.ldata, CD_TANGENT, i_dst);
+ }
+ }
+
+#undef me
+ }
+
+ return rdata;
+}
+
+static void mesh_render_data_free(MeshRenderData *rdata)
+{
+ MEM_SAFE_FREE(rdata->orco);
+ MEM_SAFE_FREE(rdata->cd.offset.uv);
+ MEM_SAFE_FREE(rdata->cd.offset.vcol);
+ MEM_SAFE_FREE(rdata->cd.uuid.auto_mix);
+ MEM_SAFE_FREE(rdata->cd.uuid.uv);
+ MEM_SAFE_FREE(rdata->cd.uuid.vcol);
+ MEM_SAFE_FREE(rdata->cd.uuid.tangent);
+ MEM_SAFE_FREE(rdata->cd.layers.uv);
+ MEM_SAFE_FREE(rdata->cd.layers.vcol);
+ MEM_SAFE_FREE(rdata->cd.layers.tangent);
+ MEM_SAFE_FREE(rdata->cd.layers.auto_vcol);
+ MEM_SAFE_FREE(rdata->loose_verts);
+ MEM_SAFE_FREE(rdata->loose_edges);
+ MEM_SAFE_FREE(rdata->edges_adjacent_polys);
+ MEM_SAFE_FREE(rdata->mlooptri);
+ MEM_SAFE_FREE(rdata->loop_normals);
+ MEM_SAFE_FREE(rdata->poly_normals);
+ MEM_SAFE_FREE(rdata->poly_normals_pack);
+ MEM_SAFE_FREE(rdata->vert_normals_pack);
+ MEM_SAFE_FREE(rdata->vert_weight_color);
+ MEM_SAFE_FREE(rdata->edge_select_bool);
+ MEM_SAFE_FREE(rdata->vert_color);
+
+ CustomData_free(&rdata->cd.output.ldata, rdata->loop_len);
+
+ MEM_freeN(rdata);
+}
+
+static MeshRenderData *mesh_render_data_create(Mesh *me, const int types)
+{
+ return mesh_render_data_create_ex(me, types, NULL, 0);
+}
+
+/** \} */
+
+
+/* ---------------------------------------------------------------------- */
+
+/** \name Accessor Functions
+ * \{ */
+
+static const char *mesh_render_data_uv_auto_layer_uuid_get(const MeshRenderData *rdata, int layer)
+{
+ BLI_assert(rdata->types & MR_DATATYPE_SHADING);
+ return rdata->cd.uuid.auto_mix[layer];
+}
+
+static const char *mesh_render_data_vcol_auto_layer_uuid_get(const MeshRenderData *rdata, int layer)
+{
+ BLI_assert(rdata->types & MR_DATATYPE_SHADING);
+ return rdata->cd.uuid.auto_mix[rdata->cd.layers.uv_len + layer];
+}
+
+static const char *mesh_render_data_uv_layer_uuid_get(const MeshRenderData *rdata, int layer)
+{
+ BLI_assert(rdata->types & MR_DATATYPE_SHADING);
+ return rdata->cd.uuid.uv[layer];
+}
+
+static const char *mesh_render_data_vcol_layer_uuid_get(const MeshRenderData *rdata, int layer)
+{
+ BLI_assert(rdata->types & MR_DATATYPE_SHADING);
+ return rdata->cd.uuid.vcol[layer];
+}
+
+static const char *mesh_render_data_tangent_layer_uuid_get(const MeshRenderData *rdata, int layer)
+{
+ BLI_assert(rdata->types & MR_DATATYPE_SHADING);
+ return rdata->cd.uuid.tangent[layer];
+}
+
+static int mesh_render_data_verts_len_get(const MeshRenderData *rdata)
+{
+ BLI_assert(rdata->types & MR_DATATYPE_VERT);
+ return rdata->vert_len;
+}
+
+static int mesh_render_data_loose_verts_len_get(const MeshRenderData *rdata)
+{
+ BLI_assert(rdata->types & MR_DATATYPE_OVERLAY);
+ return rdata->loose_vert_len;
+}
+
+static int mesh_render_data_edges_len_get(const MeshRenderData *rdata)
+{
+ BLI_assert(rdata->types & MR_DATATYPE_EDGE);
+ return rdata->edge_len;
+}
+
+static int mesh_render_data_loose_edges_len_get(const MeshRenderData *rdata)
+{
+ BLI_assert(rdata->types & MR_DATATYPE_OVERLAY);
+ return rdata->loose_edge_len;
+}
+
+static int mesh_render_data_looptri_len_get(const MeshRenderData *rdata)
+{
+ BLI_assert(rdata->types & MR_DATATYPE_LOOPTRI);
+ return rdata->tri_len;
+}
+
+static int mesh_render_data_mat_len_get(const MeshRenderData *rdata)
+{
+ BLI_assert(rdata->types & MR_DATATYPE_POLY);
+ return rdata->mat_len;
+}
+
+static int UNUSED_FUNCTION(mesh_render_data_loops_len_get)(const MeshRenderData *rdata)
+{
+ BLI_assert(rdata->types & MR_DATATYPE_LOOP);
+ return rdata->loop_len;
+}
+
+static int mesh_render_data_polys_len_get(const MeshRenderData *rdata)
+{
+ BLI_assert(rdata->types & MR_DATATYPE_POLY);
+ return rdata->poly_len;
+}
+
+/** \} */
+
+
+/* ---------------------------------------------------------------------- */
+
+/** \name Internal Cache (Lazy Initialization)
+ * \{ */
+
+/** Ensure #MeshRenderData.poly_normals_pack */
+static void mesh_render_data_ensure_poly_normals_pack(MeshRenderData *rdata)
+{
+ Gwn_PackedNormal *pnors_pack = rdata->poly_normals_pack;
+ if (pnors_pack == NULL) {
+ if (rdata->edit_bmesh) {
+ BMesh *bm = rdata->edit_bmesh->bm;
+ BMIter fiter;
+ BMFace *efa;
+ int i;
+
+ pnors_pack = rdata->poly_normals_pack = MEM_mallocN(sizeof(*pnors_pack) * rdata->poly_len, __func__);
+ BM_ITER_MESH_INDEX(efa, &fiter, bm, BM_FACES_OF_MESH, i) {
+ pnors_pack[i] = GWN_normal_convert_i10_v3(efa->no);
+ }
+ }
+ else {
+ float (*pnors)[3] = rdata->poly_normals;
+
+ if (!pnors) {
+ pnors = rdata->poly_normals = MEM_mallocN(sizeof(*pnors) * rdata->poly_len, __func__);
+ BKE_mesh_calc_normals_poly(
+ rdata->mvert, NULL, rdata->vert_len,
+ rdata->mloop, rdata->mpoly, rdata->loop_len, rdata->poly_len, pnors, true);
+ }
+
+ pnors_pack = rdata->poly_normals_pack = MEM_mallocN(sizeof(*pnors_pack) * rdata->poly_len, __func__);
+ for (int i = 0; i < rdata->poly_len; i++) {
+ pnors_pack[i] = GWN_normal_convert_i10_v3(pnors[i]);
+ }
+ }
+ }
+}
+
+/** Ensure #MeshRenderData.vert_normals_pack */
+static void mesh_render_data_ensure_vert_normals_pack(MeshRenderData *rdata)
+{
+ Gwn_PackedNormal *vnors_pack = rdata->vert_normals_pack;
+ if (vnors_pack == NULL) {
+ if (rdata->edit_bmesh) {
+ BMesh *bm = rdata->edit_bmesh->bm;
+ BMIter viter;
+ BMVert *eve;
+ int i;
+
+ vnors_pack = rdata->vert_normals_pack = MEM_mallocN(sizeof(*vnors_pack) * rdata->vert_len, __func__);
+ BM_ITER_MESH_INDEX(eve, &viter, bm, BM_VERT, i) {
+ vnors_pack[i] = GWN_normal_convert_i10_v3(eve->no);
+ }
+ }
+ else {
+ /* data from mesh used directly */
+ BLI_assert(0);
+ }
+ }
+}
+
+
+/** Ensure #MeshRenderData.vert_color */
+static void mesh_render_data_ensure_vert_color(MeshRenderData *rdata)
+{
+ char (*vcol)[3] = rdata->vert_color;
+ if (vcol == NULL) {
+ if (rdata->edit_bmesh) {
+ BMesh *bm = rdata->edit_bmesh->bm;
+ const int cd_loop_color_offset = CustomData_get_offset(&bm->ldata, CD_MLOOPCOL);
+ if (cd_loop_color_offset == -1) {
+ goto fallback;
+ }
+
+ vcol = rdata->vert_color = MEM_mallocN(sizeof(*vcol) * rdata->loop_len, __func__);
+
+ BMIter fiter;
+ BMFace *efa;
+ int i = 0;
+
+ BM_ITER_MESH(efa, &fiter, bm, BM_FACES_OF_MESH) {
+ BMLoop *l_iter, *l_first;
+ l_iter = l_first = BM_FACE_FIRST_LOOP(efa);
+ do {
+ const MLoopCol *lcol = BM_ELEM_CD_GET_VOID_P(l_iter, cd_loop_color_offset);
+ vcol[i][0] = lcol->r;
+ vcol[i][1] = lcol->g;
+ vcol[i][2] = lcol->b;
+ i += 1;
+ } while ((l_iter = l_iter->next) != l_first);
+ }
+ BLI_assert(i == rdata->loop_len);
+ }
+ else {
+ if (rdata->mloopcol == NULL) {
+ goto fallback;
+ }
+
+ vcol = rdata->vert_color = MEM_mallocN(sizeof(*vcol) * rdata->loop_len, __func__);
+
+ for (int i = 0; i < rdata->loop_len; i++) {
+ vcol[i][0] = rdata->mloopcol[i].r;
+ vcol[i][1] = rdata->mloopcol[i].g;
+ vcol[i][2] = rdata->mloopcol[i].b;
+ }
+ }
+ }
+ return;
+
+fallback:
+ vcol = rdata->vert_color = MEM_mallocN(sizeof(*vcol) * rdata->loop_len, __func__);
+
+ for (int i = 0; i < rdata->loop_len; i++) {
+ vcol[i][0] = 255;
+ vcol[i][1] = 255;
+ vcol[i][2] = 255;
+ }
+}
+
+/* TODO, move into shader? */
+static void rgb_from_weight(float r_rgb[3], const float weight)
+{
+ const float blend = ((weight / 2.0f) + 0.5f);
+
+ if (weight <= 0.25f) { /* blue->cyan */
+ r_rgb[0] = 0.0f;
+ r_rgb[1] = blend * weight * 4.0f;
+ r_rgb[2] = blend;
+ }
+ else if (weight <= 0.50f) { /* cyan->green */
+ r_rgb[0] = 0.0f;
+ r_rgb[1] = blend;
+ r_rgb[2] = blend * (1.0f - ((weight - 0.25f) * 4.0f));
+ }
+ else if (weight <= 0.75f) { /* green->yellow */
+ r_rgb[0] = blend * ((weight - 0.50f) * 4.0f);
+ r_rgb[1] = blend;
+ r_rgb[2] = 0.0f;
+ }
+ else if (weight <= 1.0f) { /* yellow->red */
+ r_rgb[0] = blend;
+ r_rgb[1] = blend * (1.0f - ((weight - 0.75f) * 4.0f));
+ r_rgb[2] = 0.0f;
+ }
+ else {
+ /* exceptional value, unclamped or nan,
+ * avoid uninitialized memory use */
+ r_rgb[0] = 1.0f;
+ r_rgb[1] = 0.0f;
+ r_rgb[2] = 1.0f;
+ }
+}
+
+
+/** Ensure #MeshRenderData.vert_weight_color */
+static void mesh_render_data_ensure_vert_weight_color(MeshRenderData *rdata, const int defgroup)
+{
+ float (*vweight)[3] = rdata->vert_weight_color;
+ if (vweight == NULL) {
+ if (defgroup == -1) {
+ goto fallback;
+ }
+
+ if (rdata->edit_bmesh) {
+ BMesh *bm = rdata->edit_bmesh->bm;
+ const int cd_dvert_offset = CustomData_get_offset(&bm->vdata, CD_MDEFORMVERT);
+ if (cd_dvert_offset == -1) {
+ goto fallback;
+ }
+
+ BMIter viter;
+ BMVert *eve;
+ int i;
+
+ vweight = rdata->vert_weight_color = MEM_mallocN(sizeof(*vweight) * rdata->vert_len, __func__);
+ BM_ITER_MESH_INDEX(eve, &viter, bm, BM_VERT, i) {
+ const MDeformVert *dvert = BM_ELEM_CD_GET_VOID_P(eve, cd_dvert_offset);
+ float weight = defvert_find_weight(dvert, defgroup);
+ if (U.flag & USER_CUSTOM_RANGE) {
+ BKE_colorband_evaluate(&U.coba_weight, weight, vweight[i]);
+ }
+ else {
+ rgb_from_weight(vweight[i], weight);
+ }
+ }
+ }
+ else {
+ if (rdata->dvert == NULL) {
+ goto fallback;
+ }
+
+ vweight = rdata->vert_weight_color = MEM_mallocN(sizeof(*vweight) * rdata->vert_len, __func__);
+ for (int i = 0; i < rdata->vert_len; i++) {
+ float weight = defvert_find_weight(&rdata->dvert[i], defgroup);
+ if (U.flag & USER_CUSTOM_RANGE) {
+ BKE_colorband_evaluate(&U.coba_weight, weight, vweight[i]);
+ }
+ else {
+ rgb_from_weight(vweight[i], weight);
+ }
+ }
+ }
+ }
+ return;
+
+fallback:
+ vweight = rdata->vert_weight_color = MEM_callocN(sizeof(*vweight) * rdata->vert_len, __func__);
+
+ for (int i = 0; i < rdata->vert_len; i++) {
+ vweight[i][2] = 0.5f;
+ }
+}
+
+/** Ensure #MeshRenderData.edge_select_bool */
+static void mesh_render_data_ensure_edge_select_bool(MeshRenderData *rdata, bool use_wire)
+{
+ bool *edge_select_bool = rdata->edge_select_bool;
+ if (edge_select_bool == NULL) {
+ edge_select_bool = rdata->edge_select_bool =
+ MEM_callocN(sizeof(*edge_select_bool) * rdata->edge_len, __func__);
+
+ for (int i = 0; i < rdata->poly_len; i++) {
+ MPoly *poly = &rdata->mpoly[i];
+
+ if (poly->flag & ME_FACE_SEL) {
+ for (int j = 0; j < poly->totloop; j++) {
+ MLoop *loop = &rdata->mloop[poly->loopstart + j];
+ if (use_wire) {
+ edge_select_bool[loop->e] = true;
+ }
+ else {
+ /* Not totally correct, will cause problems for edges with 3x faces. */
+ edge_select_bool[loop->e] = !edge_select_bool[loop->e];
+ }
+ }
+ }
+ }
+ }
+}
+
+/** \} */
+
+/* ---------------------------------------------------------------------- */
+
+/** \name Internal Cache Generation
+ * \{ */
+
+static bool mesh_render_data_pnors_pcenter_select_get(
+ MeshRenderData *rdata, const int poly,
+ float r_pnors[3], float r_center[3], bool *r_selected)
+{
+ BLI_assert(rdata->types & (MR_DATATYPE_VERT | MR_DATATYPE_LOOP | MR_DATATYPE_POLY));
+
+ if (rdata->edit_bmesh) {
+ const BMFace *efa = BM_face_at_index(rdata->edit_bmesh->bm, poly);
+ if (BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) {
+ return false;
+ }
+ BM_face_calc_center_mean(efa, r_center);
+ copy_v3_v3(r_pnors, efa->no);
+ *r_selected = (BM_elem_flag_test(efa, BM_ELEM_SELECT) != 0) ? true : false;
+ }
+ else {
+ MVert *mvert = rdata->mvert;
+ const MPoly *mpoly = rdata->mpoly + poly;
+ const MLoop *mloop = rdata->mloop + mpoly->loopstart;
+
+ BKE_mesh_calc_poly_center(mpoly, mloop, mvert, r_center);
+ BKE_mesh_calc_poly_normal(mpoly, mloop, mvert, r_pnors);
+
+ *r_selected = false; /* No selection if not in edit mode */
+ }
+
+ return true;
+}
+
+static bool mesh_render_data_edge_vcos_manifold_pnors(
+ MeshRenderData *rdata, const int edge_index,
+ float **r_vco1, float **r_vco2, float **r_pnor1, float **r_pnor2, bool *r_is_manifold)
+{
+ BLI_assert(rdata->types & (MR_DATATYPE_VERT | MR_DATATYPE_EDGE | MR_DATATYPE_LOOP | MR_DATATYPE_POLY));
+
+ if (rdata->edit_bmesh) {
+ BMesh *bm = rdata->edit_bmesh->bm;
+ BMEdge *eed = BM_edge_at_index(bm, edge_index);
+ if (BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) {
+ return false;
+ }
+ *r_vco1 = eed->v1->co;
+ *r_vco2 = eed->v2->co;
+ if (BM_edge_is_manifold(eed)) {
+ *r_pnor1 = eed->l->f->no;
+ *r_pnor2 = eed->l->radial_next->f->no;
+ *r_is_manifold = true;
+ }
+ else {
+ *r_is_manifold = false;
+ }
+ }
+ else {
+ MVert *mvert = rdata->mvert;
+ MEdge *medge = rdata->medge;
+ EdgeAdjacentPolys *eap = rdata->edges_adjacent_polys;
+ float (*pnors)[3] = rdata->poly_normals;
+
+ if (!eap) {
+ const MLoop *mloop = rdata->mloop;
+ const MPoly *mpoly = rdata->mpoly;
+ const int poly_len = rdata->poly_len;
+ const bool do_pnors = (pnors == NULL);
+
+ eap = rdata->edges_adjacent_polys = MEM_callocN(sizeof(*eap) * rdata->edge_len, __func__);
+ if (do_pnors) {
+ pnors = rdata->poly_normals = MEM_mallocN(sizeof(*pnors) * poly_len, __func__);
+ }
+
+ for (int i = 0; i < poly_len; i++, mpoly++) {
+ if (do_pnors) {
+ BKE_mesh_calc_poly_normal(mpoly, mloop + mpoly->loopstart, mvert, pnors[i]);
+ }
+
+ const int loopend = mpoly->loopstart + mpoly->totloop;
+ for (int j = mpoly->loopstart; j < loopend; j++) {
+ const int edge_idx = mloop[j].e;
+ if (eap[edge_idx].count < 2) {
+ eap[edge_idx].face_index[eap[edge_idx].count] = i;
+ }
+ eap[edge_idx].count++;
+ }
+ }
+ }
+ BLI_assert(eap && pnors);
+
+ *r_vco1 = mvert[medge[edge_index].v1].co;
+ *r_vco2 = mvert[medge[edge_index].v2].co;
+ if (eap[edge_index].count == 2) {
+ *r_pnor1 = pnors[eap[edge_index].face_index[0]];
+ *r_pnor2 = pnors[eap[edge_index].face_index[1]];
+ *r_is_manifold = true;
+ }
+ else {
+ *r_is_manifold = false;
+ }
+ }
+
+ return true;
+}
+
+
+/* First 2 bytes are bit flags
+ * 3rd is for sharp edges
+ * 4rd is for creased edges */
+enum {
+ VFLAG_VERTEX_ACTIVE = 1 << 0,
+ VFLAG_VERTEX_SELECTED = 1 << 1,
+ VFLAG_FACE_ACTIVE = 1 << 2,
+ VFLAG_FACE_SELECTED = 1 << 3,
+};
+
+enum {
+ VFLAG_EDGE_EXISTS = 1 << 0,
+ VFLAG_EDGE_ACTIVE = 1 << 1,
+ VFLAG_EDGE_SELECTED = 1 << 2,
+ VFLAG_EDGE_SEAM = 1 << 3,
+ VFLAG_EDGE_SHARP = 1 << 4,
+ /* Beware to not go over 1 << 7
+ * (see gpu_shader_edit_mesh_overlay_geom.glsl) */
+};
+
+static unsigned char mesh_render_data_looptri_flag(MeshRenderData *rdata, const BMFace *efa)
+{
+ unsigned char fflag = 0;
+
+ if (efa == rdata->efa_act)
+ fflag |= VFLAG_FACE_ACTIVE;
+
+ if (BM_elem_flag_test(efa, BM_ELEM_SELECT))
+ fflag |= VFLAG_FACE_SELECTED;
+
+ return fflag;
+}
+
+static void mesh_render_data_edge_flag(
+ const MeshRenderData *rdata, const BMEdge *eed,
+ EdgeDrawAttr *eattr)
+{
+ eattr->e_flag |= VFLAG_EDGE_EXISTS;
+
+ if (eed == rdata->eed_act)
+ eattr->e_flag |= VFLAG_EDGE_ACTIVE;
+
+ if (BM_elem_flag_test(eed, BM_ELEM_SELECT))
+ eattr->e_flag |= VFLAG_EDGE_SELECTED;
+
+ if (BM_elem_flag_test(eed, BM_ELEM_SEAM))
+ eattr->e_flag |= VFLAG_EDGE_SEAM;
+
+ if (!BM_elem_flag_test(eed, BM_ELEM_SMOOTH))
+ eattr->e_flag |= VFLAG_EDGE_SHARP;
+
+ /* Use a byte for value range */
+ if (rdata->cd.offset.crease != -1) {
+ float crease = BM_ELEM_CD_GET_FLOAT(eed, rdata->cd.offset.crease);
+ if (crease > 0) {
+ eattr->crease = (char)(crease * 255.0f);
+ }
+ }
+
+ /* Use a byte for value range */
+ if (rdata->cd.offset.bweight != -1) {
+ float bweight = BM_ELEM_CD_GET_FLOAT(eed, rdata->cd.offset.bweight);
+ if (bweight > 0) {
+ eattr->bweight = (char)(bweight * 255.0f);
+ }
+ }
+}
+
+static unsigned char mesh_render_data_vertex_flag(MeshRenderData *rdata, const BMVert *eve)
+{
+
+ unsigned char vflag = 0;
+
+ /* Current vertex */
+ if (eve == rdata->eve_act)
+ vflag |= VFLAG_VERTEX_ACTIVE;
+
+ if (BM_elem_flag_test(eve, BM_ELEM_SELECT))
+ vflag |= VFLAG_VERTEX_SELECTED;
+
+ return vflag;
+}
+
+static void add_overlay_tri(
+ MeshRenderData *rdata, Gwn_VertBuf *vbo_pos, Gwn_VertBuf *vbo_nor, Gwn_VertBuf *vbo_data,
+ const unsigned int pos_id, const unsigned int vnor_id, const unsigned int lnor_id, const unsigned int data_id,
+ const BMLoop **bm_looptri, const int base_vert_idx)
+{
+ unsigned char fflag;
+ unsigned char vflag;
+
+ if (vbo_pos) {
+ for (uint i = 0; i < 3; i++) {
+ const float *pos = bm_looptri[i]->v->co;
+ GWN_vertbuf_attr_set(vbo_pos, pos_id, base_vert_idx + i, pos);
+ }
+ }
+
+ if (vbo_nor) {
+ /* TODO real loop normal */
+ Gwn_PackedNormal lnor = GWN_normal_convert_i10_v3(bm_looptri[0]->f->no);
+ for (uint i = 0; i < 3; i++) {
+ Gwn_PackedNormal vnor = GWN_normal_convert_i10_v3(bm_looptri[i]->v->no);
+ GWN_vertbuf_attr_set(vbo_nor, vnor_id, base_vert_idx + i, &vnor);
+ GWN_vertbuf_attr_set(vbo_nor, lnor_id, base_vert_idx + i, &lnor);
+ }
+ }
+
+ if (vbo_data) {
+ fflag = mesh_render_data_looptri_flag(rdata, bm_looptri[0]->f);
+ uint i_prev = 1, i = 2;
+ for (uint i_next = 0; i_next < 3; i_next++) {
+ vflag = mesh_render_data_vertex_flag(rdata, bm_looptri[i]->v);
+ EdgeDrawAttr eattr = {0};
+ if (bm_looptri[i_next] == bm_looptri[i_prev]->prev) {
+ mesh_render_data_edge_flag(rdata, bm_looptri[i_next]->e, &eattr);
+ }
+ eattr.v_flag = fflag | vflag;
+ GWN_vertbuf_attr_set(vbo_data, data_id, base_vert_idx + i, &eattr);
+
+ i_prev = i;
+ i = i_next;
+ }
+ }
+}
+
+static void add_overlay_loose_edge(
+ MeshRenderData *rdata, Gwn_VertBuf *vbo_pos, Gwn_VertBuf *vbo_nor, Gwn_VertBuf *vbo_data,
+ const unsigned int pos_id, const unsigned int vnor_id, const unsigned int data_id,
+ const BMEdge *eed, const int base_vert_idx)
+{
+ if (vbo_pos) {
+ for (int i = 0; i < 2; ++i) {
+ const float *pos = (&eed->v1)[i]->co;
+ GWN_vertbuf_attr_set(vbo_pos, pos_id, base_vert_idx + i, pos);
+ }
+ }
+
+ if (vbo_nor) {
+ for (int i = 0; i < 2; ++i) {
+ Gwn_PackedNormal vnor = GWN_normal_convert_i10_v3((&eed->v1)[i]->no);
+ GWN_vertbuf_attr_set(vbo_nor, vnor_id, base_vert_idx + i, &vnor);
+ }
+ }
+
+ if (vbo_data) {
+ EdgeDrawAttr eattr = {0};
+ mesh_render_data_edge_flag(rdata, eed, &eattr);
+ for (int i = 0; i < 2; ++i) {
+ eattr.v_flag = mesh_render_data_vertex_flag(rdata, (&eed->v1)[i]);
+ GWN_vertbuf_attr_set(vbo_data, data_id, base_vert_idx + i, &eattr);
+ }
+ }
+}
+
+static void add_overlay_loose_vert(
+ MeshRenderData *rdata, Gwn_VertBuf *vbo_pos, Gwn_VertBuf *vbo_nor, Gwn_VertBuf *vbo_data,
+ const unsigned int pos_id, const unsigned int vnor_id, const unsigned int data_id,
+ const BMVert *eve, const int base_vert_idx)
+{
+ if (vbo_pos) {
+ const float *pos = eve->co;
+ GWN_vertbuf_attr_set(vbo_pos, pos_id, base_vert_idx, pos);
+ }
+
+ if (vbo_nor) {
+ Gwn_PackedNormal vnor = GWN_normal_convert_i10_v3(eve->no);
+ GWN_vertbuf_attr_set(vbo_nor, vnor_id, base_vert_idx, &vnor);
+ }
+
+ if (vbo_data) {
+ unsigned char vflag[4] = {0, 0, 0, 0};
+ vflag[0] = mesh_render_data_vertex_flag(rdata, eve);
+ GWN_vertbuf_attr_set(vbo_data, data_id, base_vert_idx, vflag);
+ }
+}
+
+/** \} */
+
+
+/* ---------------------------------------------------------------------- */
+
+/** \name Mesh Gwn_Batch Cache
+ * \{ */
+
+typedef struct MeshBatchCache {
+ Gwn_VertBuf *pos_in_order;
+ Gwn_VertBuf *nor_in_order;
+ Gwn_IndexBuf *edges_in_order;
+ Gwn_IndexBuf *triangles_in_order;
+
+ Gwn_Batch *all_verts;
+ Gwn_Batch *all_edges;
+ Gwn_Batch *all_triangles;
+
+ Gwn_VertBuf *pos_with_normals;
+ Gwn_VertBuf *tri_aligned_uv; /* Active UV layer (mloopuv) */
+
+ /**
+ * Other uses are all positions or loose elements.
+ * This stores all visible elements, needed for selection.
+ */
+ Gwn_VertBuf *ed_fcenter_pos_with_nor_and_sel;
+ Gwn_VertBuf *ed_edge_pos;
+ Gwn_VertBuf *ed_vert_pos;
+
+ Gwn_Batch *triangles_with_normals;
+
+ /* Skip hidden (depending on paint select mode) */
+ Gwn_Batch *triangles_with_weights;
+ Gwn_Batch *triangles_with_vert_colors;
+ /* Always skip hidden */
+ Gwn_Batch *triangles_with_select_mask;
+ Gwn_Batch *triangles_with_select_id;
+ uint triangles_with_select_id_offset;
+
+ Gwn_Batch *facedot_with_select_id; /* shares vbo with 'overlay_facedots' */
+ Gwn_Batch *edges_with_select_id;
+ Gwn_Batch *verts_with_select_id;
+
+ uint facedot_with_select_id_offset;
+ uint edges_with_select_id_offset;
+ uint verts_with_select_id_offset;
+
+ Gwn_Batch *points_with_normals;
+ Gwn_Batch *fancy_edges; /* owns its vertex buffer (not shared) */
+
+ /* Maybe have shaded_triangles_data split into pos_nor and uv_tangent
+ * to minimise data transfer for skinned mesh. */
+ Gwn_VertFormat shaded_triangles_format;
+ Gwn_VertBuf *shaded_triangles_data;
+ Gwn_IndexBuf **shaded_triangles_in_order;
+ Gwn_Batch **shaded_triangles;
+
+ /* Texture Paint.*/
+ /* per-texture batch */
+ Gwn_Batch **texpaint_triangles;
+ Gwn_Batch *texpaint_triangles_single;
+
+ /* Edit Cage Mesh buffers */
+ Gwn_VertBuf *ed_tri_pos;
+ Gwn_VertBuf *ed_tri_nor; /* LoopNor, VertNor */
+ Gwn_VertBuf *ed_tri_data;
+
+ Gwn_VertBuf *ed_ledge_pos;
+ Gwn_VertBuf *ed_ledge_nor; /* VertNor */
+ Gwn_VertBuf *ed_ledge_data;
+
+ Gwn_VertBuf *ed_lvert_pos;
+ Gwn_VertBuf *ed_lvert_nor; /* VertNor */
+ Gwn_VertBuf *ed_lvert_data;
+
+ Gwn_Batch *overlay_triangles;
+ Gwn_Batch *overlay_triangles_nor; /* GWN_PRIM_POINTS */
+ Gwn_Batch *overlay_loose_edges;
+ Gwn_Batch *overlay_loose_edges_nor; /* GWN_PRIM_POINTS */
+ Gwn_Batch *overlay_loose_verts;
+ Gwn_Batch *overlay_facedots;
+
+ Gwn_Batch *overlay_weight_faces;
+ Gwn_Batch *overlay_weight_verts;
+ Gwn_Batch *overlay_paint_edges;
+
+ /* settings to determine if cache is invalid */
+ bool is_maybe_dirty;
+ bool is_dirty; /* Instantly invalidates cache, skipping mesh check */
+ int edge_len;
+ int tri_len;
+ int poly_len;
+ int vert_len;
+ int mat_len;
+ bool is_editmode;
+
+ /* XXX, only keep for as long as sculpt mode uses shaded drawing. */
+ bool is_sculpt_points_tag;
+} MeshBatchCache;
+
+/* Gwn_Batch cache management. */
+
+static bool mesh_batch_cache_valid(Mesh *me)
+{
+ MeshBatchCache *cache = me->batch_cache;
+
+ if (cache == NULL) {
+ return false;
+ }
+
+ /* XXX find another place for this */
+ if (cache->mat_len != mesh_render_mat_len_get(me)) {
+ cache->is_maybe_dirty = true;
+ }
+
+ if (cache->is_editmode != (me->edit_btmesh != NULL)) {
+ return false;
+ }
+
+ if (cache->is_dirty) {
+ return false;
+ }
+
+ if (cache->is_maybe_dirty == false) {
+ return true;
+ }
+ else {
+ if (cache->is_editmode) {
+ return false;
+ }
+ else if ((cache->vert_len != mesh_render_verts_len_get(me)) ||
+ (cache->edge_len != mesh_render_edges_len_get(me)) ||
+ (cache->tri_len != mesh_render_looptri_len_get(me)) ||
+ (cache->poly_len != mesh_render_polys_len_get(me)) ||
+ (cache->mat_len != mesh_render_mat_len_get(me)))
+ {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+static void mesh_batch_cache_init(Mesh *me)
+{
+ MeshBatchCache *cache = me->batch_cache;
+
+ if (!cache) {
+ cache = me->batch_cache = MEM_callocN(sizeof(*cache), __func__);
+ }
+ else {
+ memset(cache, 0, sizeof(*cache));
+ }
+
+ cache->is_editmode = me->edit_btmesh != NULL;
+
+ if (cache->is_editmode == false) {
+ cache->edge_len = mesh_render_edges_len_get(me);
+ cache->tri_len = mesh_render_looptri_len_get(me);
+ cache->poly_len = mesh_render_polys_len_get(me);
+ cache->vert_len = mesh_render_verts_len_get(me);
+ }
+
+ cache->mat_len = mesh_render_mat_len_get(me);
+
+ cache->is_maybe_dirty = false;
+ cache->is_dirty = false;
+}
+
+static MeshBatchCache *mesh_batch_cache_get(Mesh *me)
+{
+ if (!mesh_batch_cache_valid(me)) {
+ mesh_batch_cache_clear(me);
+ mesh_batch_cache_init(me);
+ }
+ return me->batch_cache;
+}
+
+void DRW_mesh_batch_cache_dirty(Mesh *me, int mode)
+{
+ MeshBatchCache *cache = me->batch_cache;
+ if (cache == NULL) {
+ return;
+ }
+ switch (mode) {
+ case BKE_MESH_BATCH_DIRTY_MAYBE_ALL:
+ cache->is_maybe_dirty = true;
+ break;
+ case BKE_MESH_BATCH_DIRTY_SELECT:
+ GWN_VERTBUF_DISCARD_SAFE(cache->ed_tri_data);
+ GWN_VERTBUF_DISCARD_SAFE(cache->ed_ledge_data);
+ GWN_VERTBUF_DISCARD_SAFE(cache->ed_lvert_data);
+ GWN_VERTBUF_DISCARD_SAFE(cache->ed_fcenter_pos_with_nor_and_sel); /* Contains select flag */
+ GWN_VERTBUF_DISCARD_SAFE(cache->ed_edge_pos);
+ GWN_VERTBUF_DISCARD_SAFE(cache->ed_vert_pos);
+
+ GWN_BATCH_DISCARD_SAFE(cache->overlay_triangles);
+ GWN_BATCH_DISCARD_SAFE(cache->overlay_loose_verts);
+ GWN_BATCH_DISCARD_SAFE(cache->overlay_loose_edges);
+ GWN_BATCH_DISCARD_SAFE(cache->overlay_facedots);
+ /* Edit mode selection. */
+ GWN_BATCH_DISCARD_SAFE(cache->facedot_with_select_id);
+ GWN_BATCH_DISCARD_SAFE(cache->edges_with_select_id);
+ GWN_BATCH_DISCARD_SAFE(cache->verts_with_select_id);
+ break;
+ case BKE_MESH_BATCH_DIRTY_ALL:
+ cache->is_dirty = true;
+ break;
+ case BKE_MESH_BATCH_DIRTY_SHADING:
+ /* TODO: This should only update UV and tangent data,
+ * and not free the entire cache. */
+ cache->is_dirty = true;
+ break;
+ case BKE_MESH_BATCH_DIRTY_SCULPT_COORDS:
+ cache->is_sculpt_points_tag = true;
+ break;
+ default:
+ BLI_assert(0);
+ }
+}
+
+static void mesh_batch_cache_clear(Mesh *me)
+{
+ MeshBatchCache *cache = me->batch_cache;
+ if (!cache) {
+ return;
+ }
+
+ GWN_BATCH_DISCARD_SAFE(cache->all_verts);
+ GWN_BATCH_DISCARD_SAFE(cache->all_edges);
+ GWN_BATCH_DISCARD_SAFE(cache->all_triangles);
+
+ GWN_VERTBUF_DISCARD_SAFE(cache->pos_in_order);
+ GWN_INDEXBUF_DISCARD_SAFE(cache->edges_in_order);
+ GWN_INDEXBUF_DISCARD_SAFE(cache->triangles_in_order);
+
+ GWN_VERTBUF_DISCARD_SAFE(cache->ed_tri_pos);
+ GWN_VERTBUF_DISCARD_SAFE(cache->ed_tri_nor);
+ GWN_VERTBUF_DISCARD_SAFE(cache->ed_tri_data);
+ GWN_VERTBUF_DISCARD_SAFE(cache->ed_ledge_pos);
+ GWN_VERTBUF_DISCARD_SAFE(cache->ed_ledge_nor);
+ GWN_VERTBUF_DISCARD_SAFE(cache->ed_ledge_data);
+ GWN_VERTBUF_DISCARD_SAFE(cache->ed_lvert_pos);
+ GWN_VERTBUF_DISCARD_SAFE(cache->ed_lvert_nor);
+ GWN_VERTBUF_DISCARD_SAFE(cache->ed_lvert_data);
+ GWN_BATCH_DISCARD_SAFE(cache->overlay_triangles);
+ GWN_BATCH_DISCARD_SAFE(cache->overlay_triangles_nor);
+ GWN_BATCH_DISCARD_SAFE(cache->overlay_loose_verts);
+ GWN_BATCH_DISCARD_SAFE(cache->overlay_loose_edges);
+ GWN_BATCH_DISCARD_SAFE(cache->overlay_loose_edges_nor);
+
+ GWN_BATCH_DISCARD_SAFE(cache->overlay_weight_faces);
+ GWN_BATCH_DISCARD_SAFE(cache->overlay_weight_verts);
+ GWN_BATCH_DISCARD_SAFE(cache->overlay_paint_edges);
+ GWN_BATCH_DISCARD_SAFE(cache->overlay_facedots);
+
+ GWN_BATCH_DISCARD_SAFE(cache->triangles_with_normals);
+ GWN_BATCH_DISCARD_SAFE(cache->points_with_normals);
+ GWN_VERTBUF_DISCARD_SAFE(cache->pos_with_normals);
+ GWN_BATCH_DISCARD_SAFE(cache->triangles_with_weights);
+ GWN_BATCH_DISCARD_SAFE(cache->triangles_with_vert_colors);
+ GWN_VERTBUF_DISCARD_SAFE(cache->tri_aligned_uv);
+ GWN_VERTBUF_DISCARD_SAFE(cache->ed_fcenter_pos_with_nor_and_sel);
+ GWN_VERTBUF_DISCARD_SAFE(cache->ed_edge_pos);
+ GWN_VERTBUF_DISCARD_SAFE(cache->ed_vert_pos);
+ GWN_BATCH_DISCARD_SAFE(cache->triangles_with_select_mask);
+ GWN_BATCH_DISCARD_SAFE(cache->triangles_with_select_id);
+ GWN_BATCH_DISCARD_SAFE(cache->facedot_with_select_id);
+ GWN_BATCH_DISCARD_SAFE(cache->edges_with_select_id);
+ GWN_BATCH_DISCARD_SAFE(cache->verts_with_select_id);
+
+ GWN_BATCH_DISCARD_SAFE(cache->fancy_edges);
+
+ GWN_VERTBUF_DISCARD_SAFE(cache->shaded_triangles_data);
+ if (cache->shaded_triangles_in_order) {
+ for (int i = 0; i < cache->mat_len; ++i) {
+ GWN_INDEXBUF_DISCARD_SAFE(cache->shaded_triangles_in_order[i]);
+ }
+ }
+ if (cache->shaded_triangles) {
+ for (int i = 0; i < cache->mat_len; ++i) {
+ GWN_BATCH_DISCARD_SAFE(cache->shaded_triangles[i]);
+ }
+ }
+
+ MEM_SAFE_FREE(cache->shaded_triangles_in_order);
+ MEM_SAFE_FREE(cache->shaded_triangles);
+
+ if (cache->texpaint_triangles) {
+ for (int i = 0; i < cache->mat_len; ++i) {
+ GWN_BATCH_DISCARD_SAFE(cache->texpaint_triangles[i]);
+ }
+ }
+ MEM_SAFE_FREE(cache->texpaint_triangles);
+
+ GWN_BATCH_DISCARD_SAFE(cache->texpaint_triangles_single);
+
+}
+
+void DRW_mesh_batch_cache_free(Mesh *me)
+{
+ mesh_batch_cache_clear(me);
+ MEM_SAFE_FREE(me->batch_cache);
+}
+
+/* Gwn_Batch cache usage. */
+
+static Gwn_VertBuf *mesh_batch_cache_get_tri_shading_data(MeshRenderData *rdata, MeshBatchCache *cache)
+{
+ BLI_assert(rdata->types & (MR_DATATYPE_VERT | MR_DATATYPE_LOOPTRI | MR_DATATYPE_LOOP | MR_DATATYPE_POLY));
+#define USE_COMP_MESH_DATA
+
+ if (cache->shaded_triangles_data == NULL) {
+ const uint uv_len = rdata->cd.layers.uv_len;
+ const uint tangent_len = rdata->cd.layers.tangent_len;
+ const uint vcol_len = rdata->cd.layers.vcol_len;
+ const uint layers_combined_len = uv_len + vcol_len + tangent_len;
+
+ if (layers_combined_len == 0) {
+ return NULL;
+ }
+
+ Gwn_VertFormat *format = &cache->shaded_triangles_format;
+
+ GWN_vertformat_clear(format);
+
+ /* initialize vertex format */
+ uint *layers_combined_id = BLI_array_alloca(layers_combined_id, layers_combined_len);
+ uint *uv_id = layers_combined_id;
+ uint *tangent_id = uv_id + uv_len;
+ uint *vcol_id = tangent_id + tangent_len;
+
+ /* Not needed, just for sanity. */
+ if (uv_len == 0) { uv_id = NULL; }
+ if (tangent_len == 0) { tangent_id = NULL; }
+ if (vcol_len == 0) { vcol_id = NULL; }
+
+ for (uint i = 0; i < uv_len; i++) {
+ /* UV */
+ const char *attrib_name = mesh_render_data_uv_layer_uuid_get(rdata, i);
+#if defined(USE_COMP_MESH_DATA) && 0 /* these are clamped. Maybe use them as an option in the future */
+ uv_id[i] = GWN_vertformat_attr_add(format, attrib_name, GWN_COMP_I16, 2, GWN_FETCH_INT_TO_FLOAT_UNIT);
+#else
+ uv_id[i] = GWN_vertformat_attr_add(format, attrib_name, GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+#endif
+
+ /* Auto Name */
+ attrib_name = mesh_render_data_uv_auto_layer_uuid_get(rdata, i);
+ GWN_vertformat_alias_add(format, attrib_name);
+
+ if (i == rdata->cd.layers.uv_active) {
+ GWN_vertformat_alias_add(format, "u");
+ }
+ }
+
+ for (uint i = 0; i < tangent_len; i++) {
+ const char *attrib_name = mesh_render_data_tangent_layer_uuid_get(rdata, i);
+ /* WATCH IT : only specifying 3 component instead of 4 (4th is sign).
+ * That may cause some problem but I could not make it to fail (fclem) */
+#ifdef USE_COMP_MESH_DATA
+ /* Tangents need more precision than 10_10_10 */
+ tangent_id[i] = GWN_vertformat_attr_add(format, attrib_name, GWN_COMP_I16, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
+#else
+ tangent_id[i] = GWN_vertformat_attr_add(format, attrib_name, GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+#endif
+
+ if (i == rdata->cd.layers.tangent_active) {
+ GWN_vertformat_alias_add(format, "t");
+ }
+ }
+
+ for (uint i = 0; i < vcol_len; i++) {
+ const char *attrib_name = mesh_render_data_vcol_layer_uuid_get(rdata, i);
+ vcol_id[i] = GWN_vertformat_attr_add(format, attrib_name, GWN_COMP_U8, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
+
+ /* Auto layer */
+ if (rdata->cd.layers.auto_vcol[i]) {
+ attrib_name = mesh_render_data_vcol_auto_layer_uuid_get(rdata, i);
+ GWN_vertformat_alias_add(format, attrib_name);
+ }
+
+ if (i == rdata->cd.layers.vcol_active) {
+ GWN_vertformat_alias_add(format, "c");
+ }
+ }
+
+ const uint tri_len = mesh_render_data_looptri_len_get(rdata);
+
+ Gwn_VertBuf *vbo = cache->shaded_triangles_data = GWN_vertbuf_create_with_format(format);
+
+ const int vbo_len_capacity = tri_len * 3;
+ int vbo_len_used = 0;
+ GWN_vertbuf_data_alloc(vbo, vbo_len_capacity);
+
+ Gwn_VertBufRaw *layers_combined_step = BLI_array_alloca(layers_combined_step, layers_combined_len);
+
+ Gwn_VertBufRaw *uv_step = layers_combined_step;
+ Gwn_VertBufRaw *tangent_step = uv_step + uv_len;
+ Gwn_VertBufRaw *vcol_step = tangent_step + tangent_len;
+
+ /* Not needed, just for sanity. */
+ if (uv_len == 0) { uv_step = NULL; }
+ if (tangent_len == 0) { tangent_step = NULL; }
+ if (vcol_len == 0) { vcol_step = NULL; }
+
+ for (uint i = 0; i < uv_len; i++) {
+ GWN_vertbuf_attr_get_raw_data(vbo, uv_id[i], &uv_step[i]);
+ }
+ for (uint i = 0; i < tangent_len; i++) {
+ GWN_vertbuf_attr_get_raw_data(vbo, tangent_id[i], &tangent_step[i]);
+ }
+ for (uint i = 0; i < vcol_len; i++) {
+ GWN_vertbuf_attr_get_raw_data(vbo, vcol_id[i], &vcol_step[i]);
+ }
+
+ /* TODO deduplicate all verts and make use of Gwn_IndexBuf in
+ * mesh_batch_cache_get_triangles_in_order_split_by_material. */
+ if (rdata->edit_bmesh) {
+ for (uint i = 0; i < tri_len; i++) {
+ const BMLoop **bm_looptri = (const BMLoop **)rdata->edit_bmesh->looptris[i];
+ if (BM_elem_flag_test(bm_looptri[0]->f, BM_ELEM_HIDDEN)) {
+ continue;
+ }
+ /* UVs */
+ for (uint j = 0; j < uv_len; j++) {
+ const uint layer_offset = rdata->cd.offset.uv[j];
+ for (uint t = 0; t < 3; t++) {
+ const float *elem = ((MLoopUV *)BM_ELEM_CD_GET_VOID_P(bm_looptri[t], layer_offset))->uv;
+ copy_v2_v2(GWN_vertbuf_raw_step(&uv_step[j]), elem);
+ }
+ }
+ /* TANGENTs */
+ for (uint j = 0; j < tangent_len; j++) {
+ float (*layer_data)[4] = rdata->cd.layers.tangent[j];
+ for (uint t = 0; t < 3; t++) {
+ const float *elem = layer_data[BM_elem_index_get(bm_looptri[t])];
+ normal_float_to_short_v3(GWN_vertbuf_raw_step(&tangent_step[j]), elem);
+ }
+ }
+ /* VCOLs */
+ for (uint j = 0; j < vcol_len; j++) {
+ const uint layer_offset = rdata->cd.offset.vcol[j];
+ for (uint t = 0; t < 3; t++) {
+ const uchar *elem = &((MLoopCol *)BM_ELEM_CD_GET_VOID_P(bm_looptri[t], layer_offset))->r;
+ copy_v3_v3_uchar(GWN_vertbuf_raw_step(&vcol_step[j]), elem);
+ }
+ }
+ }
+ }
+ else {
+ for (uint i = 0; i < tri_len; i++) {
+ const MLoopTri *mlt = &rdata->mlooptri[i];
+
+ /* UVs */
+ for (uint j = 0; j < uv_len; j++) {
+ const MLoopUV *layer_data = rdata->cd.layers.uv[j];
+ for (uint t = 0; t < 3; t++) {
+ const float *elem = layer_data[mlt->tri[t]].uv;
+ copy_v2_v2(GWN_vertbuf_raw_step(&uv_step[j]), elem);
+ }
+ }
+ /* TANGENTs */
+ for (uint j = 0; j < tangent_len; j++) {
+ float (*layer_data)[4] = rdata->cd.layers.tangent[j];
+ for (uint t = 0; t < 3; t++) {
+ const float *elem = layer_data[mlt->tri[t]];
+#ifdef USE_COMP_MESH_DATA
+ normal_float_to_short_v3(GWN_vertbuf_raw_step(&tangent_step[j]), elem);
+#else
+ copy_v3_v3(GWN_vertbuf_raw_step(&tangent_step[j]), elem);
+#endif
+ }
+ }
+ /* VCOLs */
+ for (uint j = 0; j < vcol_len; j++) {
+ const MLoopCol *layer_data = rdata->cd.layers.vcol[j];
+ for (uint t = 0; t < 3; t++) {
+ const uchar *elem = &layer_data[mlt->tri[t]].r;
+ copy_v3_v3_uchar(GWN_vertbuf_raw_step(&vcol_step[j]), elem);
+ }
+ }
+ }
+ }
+
+ vbo_len_used = GWN_vertbuf_raw_used(&layers_combined_step[0]);
+
+#ifndef NDEBUG
+ /* Check all layers are write aligned. */
+ if (layers_combined_len > 1) {
+ for (uint i = 1; i < layers_combined_len; i++) {
+ BLI_assert(vbo_len_used == GWN_vertbuf_raw_used(&layers_combined_step[i]));
+ }
+ }
+#endif
+
+ if (vbo_len_capacity != vbo_len_used) {
+ GWN_vertbuf_data_resize(vbo, vbo_len_used);
+ }
+ }
+
+#undef USE_COMP_MESH_DATA
+
+ return cache->shaded_triangles_data;
+}
+
+static Gwn_VertBuf *mesh_batch_cache_get_tri_uv_active(
+ MeshRenderData *rdata, MeshBatchCache *cache)
+{
+ BLI_assert(rdata->types & (MR_DATATYPE_VERT | MR_DATATYPE_LOOPTRI | MR_DATATYPE_LOOP | MR_DATATYPE_LOOPUV));
+ BLI_assert(rdata->edit_bmesh == NULL);
+
+ if (cache->tri_aligned_uv == NULL) {
+ unsigned int vidx = 0;
+
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint uv; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.uv = GWN_vertformat_attr_add(&format, "uv", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ }
+
+ const int tri_len = mesh_render_data_looptri_len_get(rdata);
+
+ Gwn_VertBuf *vbo = cache->tri_aligned_uv = GWN_vertbuf_create_with_format(&format);
+
+ const int vbo_len_capacity = tri_len * 3;
+ int vbo_len_used = 0;
+ GWN_vertbuf_data_alloc(vbo, vbo_len_capacity);
+
+ const MLoopUV *mloopuv = rdata->mloopuv;
+
+ for (int i = 0; i < tri_len; i++) {
+ const MLoopTri *mlt = &rdata->mlooptri[i];
+ GWN_vertbuf_attr_set(vbo, attr_id.uv, vidx++, mloopuv[mlt->tri[0]].uv);
+ GWN_vertbuf_attr_set(vbo, attr_id.uv, vidx++, mloopuv[mlt->tri[1]].uv);
+ GWN_vertbuf_attr_set(vbo, attr_id.uv, vidx++, mloopuv[mlt->tri[2]].uv);
+ }
+ vbo_len_used = vidx;
+
+ BLI_assert(vbo_len_capacity == vbo_len_used);
+ UNUSED_VARS_NDEBUG(vbo_len_used);
+ }
+
+ return cache->tri_aligned_uv;
+}
+
+static Gwn_VertBuf *mesh_batch_cache_get_tri_pos_and_normals_ex(
+ MeshRenderData *rdata, const bool use_hide,
+ Gwn_VertBuf **r_vbo)
+{
+ BLI_assert(rdata->types & (MR_DATATYPE_VERT | MR_DATATYPE_LOOPTRI | MR_DATATYPE_LOOP | MR_DATATYPE_POLY));
+
+ if (*r_vbo == NULL) {
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos, nor; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ attr_id.nor = GWN_vertformat_attr_add(&format, "nor", GWN_COMP_I10, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
+ }
+
+ const int tri_len = mesh_render_data_looptri_len_get(rdata);
+
+ Gwn_VertBuf *vbo = *r_vbo = GWN_vertbuf_create_with_format(&format);
+
+ const int vbo_len_capacity = tri_len * 3;
+ int vbo_len_used = 0;
+ GWN_vertbuf_data_alloc(vbo, vbo_len_capacity);
+
+ Gwn_VertBufRaw pos_step, nor_step;
+ GWN_vertbuf_attr_get_raw_data(vbo, attr_id.pos, &pos_step);
+ GWN_vertbuf_attr_get_raw_data(vbo, attr_id.nor, &nor_step);
+
+ float (*lnors)[3] = rdata->loop_normals;
+
+ if (rdata->edit_bmesh) {
+ Gwn_PackedNormal *pnors_pack, *vnors_pack;
+
+ if (lnors == NULL) {
+ mesh_render_data_ensure_poly_normals_pack(rdata);
+ mesh_render_data_ensure_vert_normals_pack(rdata);
+
+ pnors_pack = rdata->poly_normals_pack;
+ vnors_pack = rdata->vert_normals_pack;
+ }
+
+ for (int i = 0; i < tri_len; i++) {
+ const BMLoop **bm_looptri = (const BMLoop **)rdata->edit_bmesh->looptris[i];
+ const BMFace *bm_face = bm_looptri[0]->f;
+
+ /* use_hide always for edit-mode */
+ if (BM_elem_flag_test(bm_face, BM_ELEM_HIDDEN)) {
+ continue;
+ }
+
+ if (lnors) {
+ for (uint t = 0; t < 3; t++) {
+ const float *nor = lnors[BM_elem_index_get(bm_looptri[t])];
+ *((Gwn_PackedNormal *)GWN_vertbuf_raw_step(&nor_step)) = GWN_normal_convert_i10_v3(nor);
+ }
+ }
+ else if (BM_elem_flag_test(bm_face, BM_ELEM_SMOOTH)) {
+ for (uint t = 0; t < 3; t++) {
+ *((Gwn_PackedNormal *)GWN_vertbuf_raw_step(&nor_step)) = vnors_pack[BM_elem_index_get(bm_looptri[t]->v)];
+ }
+ }
+ else {
+ const Gwn_PackedNormal *snor_pack = &pnors_pack[BM_elem_index_get(bm_face)];
+ for (uint t = 0; t < 3; t++) {
+ *((Gwn_PackedNormal *)GWN_vertbuf_raw_step(&nor_step)) = *snor_pack;
+ }
+ }
+
+ for (uint t = 0; t < 3; t++) {
+ copy_v3_v3(GWN_vertbuf_raw_step(&pos_step), bm_looptri[t]->v->co);
+ }
+ }
+ }
+ else {
+ if (lnors == NULL) {
+ /* Use normals from vertex. */
+ mesh_render_data_ensure_poly_normals_pack(rdata);
+ }
+
+ for (int i = 0; i < tri_len; i++) {
+ const MLoopTri *mlt = &rdata->mlooptri[i];
+ const MPoly *mp = &rdata->mpoly[mlt->poly];
+
+ if (use_hide && (mp->flag & ME_HIDE)) {
+ continue;
+ }
+
+ const uint vtri[3] = {
+ rdata->mloop[mlt->tri[0]].v,
+ rdata->mloop[mlt->tri[1]].v,
+ rdata->mloop[mlt->tri[2]].v,
+ };
+
+ if (lnors) {
+ for (uint t = 0; t < 3; t++) {
+ const float *nor = lnors[mlt->tri[t]];
+ *((Gwn_PackedNormal *)GWN_vertbuf_raw_step(&nor_step)) = GWN_normal_convert_i10_v3(nor);
+ }
+ }
+ else if (mp->flag & ME_SMOOTH) {
+ for (uint t = 0; t < 3; t++) {
+ const MVert *mv = &rdata->mvert[vtri[t]];
+ *((Gwn_PackedNormal *)GWN_vertbuf_raw_step(&nor_step)) = GWN_normal_convert_i10_s3(mv->no);
+ }
+ }
+ else {
+ const Gwn_PackedNormal *pnors_pack = &rdata->poly_normals_pack[mlt->poly];
+ for (uint t = 0; t < 3; t++) {
+ *((Gwn_PackedNormal *)GWN_vertbuf_raw_step(&nor_step)) = *pnors_pack;
+ }
+ }
+
+ for (uint t = 0; t < 3; t++) {
+ const MVert *mv = &rdata->mvert[vtri[t]];
+ copy_v3_v3(GWN_vertbuf_raw_step(&pos_step), mv->co);
+ }
+ }
+ }
+
+ vbo_len_used = GWN_vertbuf_raw_used(&pos_step);
+ BLI_assert(vbo_len_used == GWN_vertbuf_raw_used(&nor_step));
+
+ if (vbo_len_capacity != vbo_len_used) {
+ GWN_vertbuf_data_resize(vbo, vbo_len_used);
+ }
+ }
+ return *r_vbo;
+}
+
+static Gwn_VertBuf *mesh_batch_cache_get_tri_pos_and_normals(
+ MeshRenderData *rdata, MeshBatchCache *cache)
+{
+ return mesh_batch_cache_get_tri_pos_and_normals_ex(
+ rdata, false,
+ &cache->pos_with_normals);
+}
+static Gwn_VertBuf *mesh_create_tri_pos_and_normals_visible_only(
+ MeshRenderData *rdata)
+{
+ Gwn_VertBuf *vbo_dummy = NULL;
+ return mesh_batch_cache_get_tri_pos_and_normals_ex(
+ rdata, true,
+ &vbo_dummy);
+}
+
+static Gwn_VertBuf *mesh_batch_cache_get_facedot_pos_with_normals_and_flag(
+ MeshRenderData *rdata, MeshBatchCache *cache)
+{
+ BLI_assert(rdata->types & (MR_DATATYPE_VERT | MR_DATATYPE_LOOP | MR_DATATYPE_POLY));
+
+ if (cache->ed_fcenter_pos_with_nor_and_sel == NULL) {
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos, data; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ attr_id.data = GWN_vertformat_attr_add(&format, "norAndFlag", GWN_COMP_I10, 4, GWN_FETCH_INT_TO_FLOAT_UNIT);
+ }
+
+ const int vbo_len_capacity = mesh_render_data_polys_len_get(rdata);
+ int vidx = 0;
+
+ Gwn_VertBuf *vbo = cache->ed_fcenter_pos_with_nor_and_sel = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, vbo_len_capacity);
+ for (int i = 0; i < vbo_len_capacity; ++i) {
+ float pcenter[3], pnor[3];
+ bool selected = false;
+
+ if (mesh_render_data_pnors_pcenter_select_get(rdata, i, pnor, pcenter, &selected)) {
+
+ Gwn_PackedNormal nor = { .x = 0, .y = 0, .z = -511 };
+ nor = GWN_normal_convert_i10_v3(pnor);
+ nor.w = selected ? 1 : 0;
+ GWN_vertbuf_attr_set(vbo, attr_id.data, vidx, &nor);
+
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vidx, pcenter);
+
+ vidx += 1;
+ }
+ }
+ const int vbo_len_used = vidx;
+ BLI_assert(vbo_len_used <= vbo_len_capacity);
+ if (vbo_len_used != vbo_len_capacity) {
+ GWN_vertbuf_data_resize(vbo, vbo_len_used);
+ }
+ }
+
+ return cache->ed_fcenter_pos_with_nor_and_sel;
+}
+
+static Gwn_VertBuf *mesh_batch_cache_get_edges_visible(
+ MeshRenderData *rdata, MeshBatchCache *cache)
+{
+ BLI_assert(rdata->types & (MR_DATATYPE_VERT | MR_DATATYPE_EDGE));
+
+ if (cache->ed_edge_pos == NULL) {
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos, data; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ const int vbo_len_capacity = mesh_render_data_edges_len_get(rdata) * 2;
+ int vidx = 0;
+
+ Gwn_VertBuf *vbo = cache->ed_edge_pos = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, vbo_len_capacity);
+ if (rdata->edit_bmesh) {
+ BMesh *bm = rdata->edit_bmesh->bm;
+ BMIter iter;
+ BMEdge *eed;
+
+ BM_ITER_MESH (eed, &iter, bm, BM_EDGES_OF_MESH) {
+ if (!BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) {
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vidx, eed->v1->co);
+ vidx += 1;
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vidx, eed->v2->co);
+ vidx += 1;
+ }
+ }
+ }
+ else {
+ /* not yet done! */
+ BLI_assert(0);
+ }
+ const int vbo_len_used = vidx;
+ if (vbo_len_used != vbo_len_capacity) {
+ GWN_vertbuf_data_resize(vbo, vbo_len_used);
+ }
+ UNUSED_VARS_NDEBUG(vbo_len_used);
+ }
+
+ return cache->ed_edge_pos;
+}
+
+static Gwn_VertBuf *mesh_batch_cache_get_verts_visible(
+ MeshRenderData *rdata, MeshBatchCache *cache)
+{
+ BLI_assert(rdata->types & MR_DATATYPE_VERT);
+
+ if (cache->ed_vert_pos == NULL) {
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos, data; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ const int vbo_len_capacity = mesh_render_data_verts_len_get(rdata);
+ uint vidx = 0;
+
+ Gwn_VertBuf *vbo = cache->ed_vert_pos = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, vbo_len_capacity);
+ if (rdata->edit_bmesh) {
+ BMesh *bm = rdata->edit_bmesh->bm;
+ BMIter iter;
+ BMVert *eve;
+
+ BM_ITER_MESH (eve, &iter, bm, BM_VERTS_OF_MESH) {
+ if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) {
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vidx, eve->co);
+ vidx += 1;
+ }
+ }
+ }
+ else {
+ for (int i = 0; i < vbo_len_capacity; i++) {
+ const MVert *mv = &rdata->mvert[i];
+ if (!(mv->flag & ME_HIDE)) {
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vidx, mv->co);
+ vidx += 1;
+ }
+ }
+ }
+ const uint vbo_len_used = vidx;
+ if (vbo_len_used != vbo_len_capacity) {
+ GWN_vertbuf_data_resize(vbo, vbo_len_used);
+ }
+
+ UNUSED_VARS_NDEBUG(vbo_len_used);
+ }
+
+ return cache->ed_vert_pos;
+}
+
+static Gwn_VertBuf *mesh_create_facedot_select_id(
+ MeshRenderData *rdata, uint select_id_offset)
+{
+ BLI_assert(rdata->types & (MR_DATATYPE_VERT | MR_DATATYPE_LOOP | MR_DATATYPE_POLY));
+
+ Gwn_VertBuf *vbo;
+ {
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos, col; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.col = GWN_vertformat_attr_add(&format, "color", GWN_COMP_I32, 1, GWN_FETCH_INT);
+ }
+
+ const int vbo_len_capacity = mesh_render_data_polys_len_get(rdata);
+ int vidx = 0;
+
+ vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, vbo_len_capacity);
+ uint select_index = select_id_offset;
+
+ if (rdata->edit_bmesh) {
+ BMesh *bm = rdata->edit_bmesh->bm;
+ BMIter iter;
+ BMEdge *efa;
+
+ BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
+ if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) {
+ int select_id;
+ GPU_select_index_get(select_index, &select_id);
+ GWN_vertbuf_attr_set(vbo, attr_id.col, vidx, &select_id);
+ vidx += 1;
+ }
+ select_index += 1;
+ }
+ }
+ else {
+ /* not yet done! */
+ BLI_assert(0);
+ }
+ const int vbo_len_used = vidx;
+ if (vbo_len_used != vbo_len_capacity) {
+ GWN_vertbuf_data_resize(vbo, vbo_len_used);
+ }
+ }
+
+ return vbo;
+}
+
+static Gwn_VertBuf *mesh_create_edges_select_id(
+ MeshRenderData *rdata, uint select_id_offset)
+{
+ BLI_assert(rdata->types & (MR_DATATYPE_VERT | MR_DATATYPE_EDGE));
+
+ Gwn_VertBuf *vbo;
+ {
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos, col; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.col = GWN_vertformat_attr_add(&format, "color", GWN_COMP_I32, 1, GWN_FETCH_INT);
+ }
+
+ const int vbo_len_capacity = mesh_render_data_edges_len_get(rdata) * 2;
+ int vidx = 0;
+
+ vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, vbo_len_capacity);
+ uint select_index = select_id_offset;
+
+ if (rdata->edit_bmesh) {
+ BMesh *bm = rdata->edit_bmesh->bm;
+ BMIter iter;
+ BMEdge *eed;
+
+ BM_ITER_MESH (eed, &iter, bm, BM_EDGES_OF_MESH) {
+ if (!BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) {
+ int select_id;
+ GPU_select_index_get(select_index, &select_id);
+ GWN_vertbuf_attr_set(vbo, attr_id.col, vidx, &select_id);
+ vidx += 1;
+ GWN_vertbuf_attr_set(vbo, attr_id.col, vidx, &select_id);
+ vidx += 1;
+ }
+ select_index += 1;
+ }
+ }
+ else {
+ /* not yet done! */
+ BLI_assert(0);
+ }
+ const int vbo_len_used = vidx;
+ if (vbo_len_used != vbo_len_capacity) {
+ GWN_vertbuf_data_resize(vbo, vbo_len_used);
+ }
+ }
+
+ return vbo;
+}
+
+static Gwn_VertBuf *mesh_create_verts_select_id(
+ MeshRenderData *rdata, uint select_id_offset)
+{
+ BLI_assert(rdata->types & (MR_DATATYPE_VERT | MR_DATATYPE_LOOP | MR_DATATYPE_POLY));
+
+ Gwn_VertBuf *vbo;
+ {
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos, col; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.col = GWN_vertformat_attr_add(&format, "color", GWN_COMP_I32, 1, GWN_FETCH_INT);
+ }
+
+ const int vbo_len_capacity = mesh_render_data_verts_len_get(rdata);
+ int vidx = 0;
+
+ vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, vbo_len_capacity);
+ uint select_index = select_id_offset;
+
+ if (rdata->edit_bmesh) {
+ BMesh *bm = rdata->edit_bmesh->bm;
+ BMIter iter;
+ BMVert *eve;
+
+ BM_ITER_MESH (eve, &iter, bm, BM_VERTS_OF_MESH) {
+ if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) {
+ int select_id;
+ GPU_select_index_get(select_index, &select_id);
+ GWN_vertbuf_attr_set(vbo, attr_id.col, vidx, &select_id);
+ vidx += 1;
+ }
+ select_index += 1;
+ }
+ }
+ else {
+ for (int i = 0; i < vbo_len_capacity; i++) {
+ const MVert *mv = &rdata->mvert[i];
+ if (!(mv->flag & ME_HIDE)) {
+ int select_id;
+ GPU_select_index_get(select_index, &select_id);
+ GWN_vertbuf_attr_set(vbo, attr_id.col, vidx, &select_id);
+ vidx += 1;
+ }
+ select_index += 1;
+ }
+ }
+ const int vbo_len_used = vidx;
+ if (vbo_len_used != vbo_len_capacity) {
+ GWN_vertbuf_data_resize(vbo, vbo_len_used);
+ }
+ }
+
+ return vbo;
+}
+
+static Gwn_VertBuf *mesh_create_tri_weights(
+ MeshRenderData *rdata, bool use_hide, int defgroup)
+{
+ BLI_assert(
+ rdata->types &
+ (MR_DATATYPE_VERT | MR_DATATYPE_LOOPTRI | MR_DATATYPE_LOOP | MR_DATATYPE_POLY | MR_DATATYPE_DVERT));
+
+ Gwn_VertBuf *vbo;
+ {
+ unsigned int cidx = 0;
+
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint col; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.col = GWN_vertformat_attr_add(&format, "color", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ vbo = GWN_vertbuf_create_with_format(&format);
+
+ const int tri_len = mesh_render_data_looptri_len_get(rdata);
+ const int vbo_len_capacity = tri_len * 3;
+ int vbo_len_used = 0;
+ GWN_vertbuf_data_alloc(vbo, vbo_len_capacity);
+
+ mesh_render_data_ensure_vert_weight_color(rdata, defgroup);
+ const float (*vert_weight_color)[3] = rdata->vert_weight_color;
+
+ if (rdata->edit_bmesh) {
+ for (int i = 0; i < tri_len; i++) {
+ const BMLoop **ltri = (const BMLoop **)rdata->edit_bmesh->looptris[i];
+ /* Assume 'use_hide' */
+ if (!BM_elem_flag_test(ltri[0]->f, BM_ELEM_HIDDEN)) {
+ for (uint tri_corner = 0; tri_corner < 3; tri_corner++) {
+ const int v_index = BM_elem_index_get(ltri[tri_corner]->v);
+ GWN_vertbuf_attr_set(vbo, attr_id.col, cidx++, vert_weight_color[v_index]);
+ }
+ }
+ }
+ }
+ else {
+ for (int i = 0; i < tri_len; i++) {
+ const MLoopTri *mlt = &rdata->mlooptri[i];
+ if (!(use_hide && (rdata->mpoly[mlt->poly].flag & ME_HIDE))) {
+ for (uint tri_corner = 0; tri_corner < 3; tri_corner++) {
+ const uint v_index = rdata->mloop[mlt->tri[tri_corner]].v;
+ GWN_vertbuf_attr_set(vbo, attr_id.col, cidx++, vert_weight_color[v_index]);
+ }
+ }
+ }
+ }
+ vbo_len_used = cidx;
+
+ if (vbo_len_capacity != vbo_len_used) {
+ GWN_vertbuf_data_resize(vbo, vbo_len_used);
+ }
+ }
+
+ return vbo;
+}
+
+static Gwn_VertBuf *mesh_create_tri_vert_colors(
+ MeshRenderData *rdata, bool use_hide)
+{
+ BLI_assert(
+ rdata->types &
+ (MR_DATATYPE_VERT | MR_DATATYPE_LOOPTRI | MR_DATATYPE_LOOP | MR_DATATYPE_POLY | MR_DATATYPE_LOOPCOL));
+
+ Gwn_VertBuf *vbo;
+ {
+ unsigned int cidx = 0;
+
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint col; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.col = GWN_vertformat_attr_add(&format, "color", GWN_COMP_U8, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
+ }
+
+ const int tri_len = mesh_render_data_looptri_len_get(rdata);
+
+ vbo = GWN_vertbuf_create_with_format(&format);
+
+ const uint vbo_len_capacity = tri_len * 3;
+ GWN_vertbuf_data_alloc(vbo, vbo_len_capacity);
+
+ mesh_render_data_ensure_vert_color(rdata);
+ const char (*vert_color)[3] = rdata->vert_color;
+
+ if (rdata->edit_bmesh) {
+ for (int i = 0; i < tri_len; i++) {
+ const BMLoop **ltri = (const BMLoop **)rdata->edit_bmesh->looptris[i];
+ /* Assume 'use_hide' */
+ if (!BM_elem_flag_test(ltri[0]->f, BM_ELEM_HIDDEN)) {
+ for (uint tri_corner = 0; tri_corner < 3; tri_corner++) {
+ const int l_index = BM_elem_index_get(ltri[tri_corner]);
+ GWN_vertbuf_attr_set(vbo, attr_id.col, cidx++, vert_color[l_index]);
+ }
+ }
+ }
+ }
+ else {
+ for (int i = 0; i < tri_len; i++) {
+ const MLoopTri *mlt = &rdata->mlooptri[i];
+ if (!(use_hide && (rdata->mpoly[mlt->poly].flag & ME_HIDE))) {
+ for (uint tri_corner = 0; tri_corner < 3; tri_corner++) {
+ const uint l_index = mlt->tri[tri_corner];
+ GWN_vertbuf_attr_set(vbo, attr_id.col, cidx++, vert_color[l_index]);
+ }
+ }
+ }
+ }
+ const uint vbo_len_used = cidx;
+
+ if (vbo_len_capacity != vbo_len_used) {
+ GWN_vertbuf_data_resize(vbo, vbo_len_used);
+ }
+ }
+
+ return vbo;
+}
+
+static Gwn_VertBuf *mesh_create_tri_select_id(
+ MeshRenderData *rdata, bool use_hide, uint select_id_offset)
+{
+ BLI_assert(
+ rdata->types &
+ (MR_DATATYPE_VERT | MR_DATATYPE_LOOPTRI | MR_DATATYPE_LOOP | MR_DATATYPE_POLY));
+
+ Gwn_VertBuf *vbo;
+ {
+ unsigned int cidx = 0;
+
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint col; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.col = GWN_vertformat_attr_add(&format, "color", GWN_COMP_I32, 1, GWN_FETCH_INT);
+ }
+
+ const int tri_len = mesh_render_data_looptri_len_get(rdata);
+
+ vbo = GWN_vertbuf_create_with_format(&format);
+
+ const int vbo_len_capacity = tri_len * 3;
+ int vbo_len_used = 0;
+ GWN_vertbuf_data_alloc(vbo, vbo_len_capacity);
+
+ if (rdata->edit_bmesh) {
+ for (int i = 0; i < tri_len; i++) {
+ const BMLoop **ltri = (const BMLoop **)rdata->edit_bmesh->looptris[i];
+ /* Assume 'use_hide' */
+ if (!BM_elem_flag_test(ltri[0]->f, BM_ELEM_HIDDEN)) {
+ const int poly_index = BM_elem_index_get(ltri[0]->f);
+ int select_id;
+ GPU_select_index_get(poly_index + select_id_offset, &select_id);
+ for (uint tri_corner = 0; tri_corner < 3; tri_corner++) {
+ GWN_vertbuf_attr_set(vbo, attr_id.col, cidx++, &select_id);
+ }
+ }
+ }
+ }
+ else {
+ for (int i = 0; i < tri_len; i++) {
+ const MLoopTri *mlt = &rdata->mlooptri[i];
+ const int poly_index = mlt->poly;
+ if (!(use_hide && (rdata->mpoly[poly_index].flag & ME_HIDE))) {
+ int select_id;
+ GPU_select_index_get(poly_index + select_id_offset, &select_id);
+ for (uint tri_corner = 0; tri_corner < 3; tri_corner++) {
+ GWN_vertbuf_attr_set(vbo, attr_id.col, cidx++, &select_id);
+ }
+ }
+ }
+ }
+ vbo_len_used = cidx;
+
+ if (vbo_len_capacity != vbo_len_used) {
+ GWN_vertbuf_data_resize(vbo, vbo_len_used);
+ }
+ }
+ return vbo;
+}
+
+static Gwn_VertBuf *mesh_batch_cache_get_vert_pos_and_nor_in_order(
+ MeshRenderData *rdata, MeshBatchCache *cache)
+{
+ BLI_assert(rdata->types & MR_DATATYPE_VERT);
+
+ if (cache->pos_in_order == NULL) {
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos, nor; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ attr_id.nor = GWN_vertformat_attr_add(&format, "nor", GWN_COMP_I16, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
+ }
+
+ Gwn_VertBuf *vbo = cache->pos_in_order = GWN_vertbuf_create_with_format(&format);
+ const int vbo_len_capacity = mesh_render_data_verts_len_get(rdata);
+ GWN_vertbuf_data_alloc(vbo, vbo_len_capacity);
+
+ if (rdata->edit_bmesh) {
+ BMesh *bm = rdata->edit_bmesh->bm;
+ BMIter iter;
+ BMVert *eve;
+ uint i;
+
+ BM_ITER_MESH_INDEX (eve, &iter, bm, BM_VERTS_OF_MESH, i) {
+ static short no_short[3];
+ normal_float_to_short_v3(no_short, eve->no);
+
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, i, eve->co);
+ GWN_vertbuf_attr_set(vbo, attr_id.nor, i, no_short);
+ }
+ BLI_assert(i == vbo_len_capacity);
+ }
+ else {
+ for (int i = 0; i < vbo_len_capacity; ++i) {
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, i, rdata->mvert[i].co);
+ GWN_vertbuf_attr_set(vbo, attr_id.nor, i, rdata->mvert[i].no);
+ }
+ }
+ }
+
+ return cache->pos_in_order;
+}
+
+static Gwn_VertFormat *edit_mesh_overlay_pos_format(unsigned int *r_pos_id)
+{
+ static Gwn_VertFormat format_pos = { 0 };
+ static unsigned pos_id;
+ if (format_pos.attrib_ct == 0) {
+ pos_id = GWN_vertformat_attr_add(&format_pos, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+ *r_pos_id = pos_id;
+ return &format_pos;
+}
+
+static Gwn_VertFormat *edit_mesh_overlay_nor_format(unsigned int *r_vnor_id, unsigned int *r_lnor_id)
+{
+ static Gwn_VertFormat format_nor = { 0 };
+ static Gwn_VertFormat format_nor_loop = { 0 };
+ static unsigned vnor_id, vnor_loop_id, lnor_id;
+ if (format_nor.attrib_ct == 0) {
+ vnor_id = GWN_vertformat_attr_add(&format_nor, "vnor", GWN_COMP_I10, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
+ vnor_loop_id = GWN_vertformat_attr_add(&format_nor_loop, "vnor", GWN_COMP_I10, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
+ lnor_id = GWN_vertformat_attr_add(&format_nor_loop, "lnor", GWN_COMP_I10, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
+ }
+ if (r_lnor_id) {
+ *r_vnor_id = vnor_loop_id;
+ *r_lnor_id = lnor_id;
+ return &format_nor_loop;
+ }
+ else {
+ *r_vnor_id = vnor_id;
+ return &format_nor;
+ }
+}
+
+static Gwn_VertFormat *edit_mesh_overlay_data_format(unsigned int *r_data_id)
+{
+ static Gwn_VertFormat format_flag = { 0 };
+ static unsigned data_id;
+ if (format_flag.attrib_ct == 0) {
+ data_id = GWN_vertformat_attr_add(&format_flag, "data", GWN_COMP_U8, 4, GWN_FETCH_INT);
+ }
+ *r_data_id = data_id;
+ return &format_flag;
+}
+
+static void mesh_batch_cache_create_overlay_tri_buffers(
+ MeshRenderData *rdata, MeshBatchCache *cache)
+{
+ BLI_assert(rdata->types & (MR_DATATYPE_VERT | MR_DATATYPE_LOOPTRI));
+
+ const int tri_len = mesh_render_data_looptri_len_get(rdata);
+
+ const int vbo_len_capacity = tri_len * 3;
+ int vbo_len_used = 0;
+
+ /* Positions */
+ Gwn_VertBuf *vbo_pos = NULL;
+ static struct { uint pos, vnor, lnor, data; } attr_id;
+ if (cache->ed_tri_pos == NULL) {
+ vbo_pos = cache->ed_tri_pos =
+ GWN_vertbuf_create_with_format(edit_mesh_overlay_pos_format(&attr_id.pos));
+ GWN_vertbuf_data_alloc(vbo_pos, vbo_len_capacity);
+ }
+
+ /* Normals */
+ Gwn_VertBuf *vbo_nor = NULL;
+ if (cache->ed_tri_nor == NULL) {
+ vbo_nor = cache->ed_tri_nor =
+ GWN_vertbuf_create_with_format(edit_mesh_overlay_nor_format(&attr_id.vnor, &attr_id.lnor));
+ GWN_vertbuf_data_alloc(vbo_nor, vbo_len_capacity);
+ }
+
+ /* Data */
+ Gwn_VertBuf *vbo_data = NULL;
+ if (cache->ed_tri_data == NULL) {
+ vbo_data = cache->ed_tri_data =
+ GWN_vertbuf_create_with_format(edit_mesh_overlay_data_format(&attr_id.data));
+ GWN_vertbuf_data_alloc(vbo_data, vbo_len_capacity);
+ }
+
+ for (int i = 0; i < tri_len; i++) {
+ const BMLoop **bm_looptri = (const BMLoop **)rdata->edit_bmesh->looptris[i];
+ if (!BM_elem_flag_test(bm_looptri[0]->f, BM_ELEM_HIDDEN)) {
+ add_overlay_tri(
+ rdata, vbo_pos, vbo_nor, vbo_data,
+ attr_id.pos, attr_id.vnor, attr_id.lnor, attr_id.data,
+ bm_looptri, vbo_len_used);
+
+ vbo_len_used += 3;
+ }
+ }
+
+ /* Finish */
+ if (vbo_len_used != vbo_len_capacity) {
+ if (vbo_pos != NULL) {
+ GWN_vertbuf_data_resize(vbo_pos, vbo_len_used);
+ }
+ if (vbo_nor != NULL) {
+ GWN_vertbuf_data_resize(vbo_nor, vbo_len_used);
+ }
+ if (vbo_data != NULL) {
+ GWN_vertbuf_data_resize(vbo_data, vbo_len_used);
+ }
+ }
+}
+
+static void mesh_batch_cache_create_overlay_ledge_buffers(
+ MeshRenderData *rdata, MeshBatchCache *cache)
+{
+ BLI_assert(rdata->types & (MR_DATATYPE_VERT | MR_DATATYPE_LOOPTRI));
+
+ const int ledge_len = mesh_render_data_loose_edges_len_get(rdata);
+
+ const int vbo_len_capacity = ledge_len * 2;
+ int vbo_len_used = 0;
+
+ /* Positions */
+ Gwn_VertBuf *vbo_pos = NULL;
+ static struct { uint pos, vnor, data; } attr_id;
+ if (cache->ed_ledge_pos == NULL) {
+ vbo_pos = cache->ed_ledge_pos =
+ GWN_vertbuf_create_with_format(edit_mesh_overlay_pos_format(&attr_id.pos));
+ GWN_vertbuf_data_alloc(vbo_pos, vbo_len_capacity);
+ }
+
+ /* Normals */
+ Gwn_VertBuf *vbo_nor = NULL;
+ if (cache->ed_ledge_nor == NULL) {
+ vbo_nor = cache->ed_ledge_nor =
+ GWN_vertbuf_create_with_format(edit_mesh_overlay_nor_format(&attr_id.vnor, NULL));
+ GWN_vertbuf_data_alloc(vbo_nor, vbo_len_capacity);
+ }
+
+ /* Data */
+ Gwn_VertBuf *vbo_data = NULL;
+ if (cache->ed_ledge_data == NULL) {
+ vbo_data = cache->ed_ledge_data =
+ GWN_vertbuf_create_with_format(edit_mesh_overlay_data_format(&attr_id.data));
+ GWN_vertbuf_data_alloc(vbo_data, vbo_len_capacity);
+ }
+
+ if (rdata->edit_bmesh) {
+ BMesh *bm = rdata->edit_bmesh->bm;
+ for (uint i = 0; i < ledge_len; i++) {
+ const BMEdge *eed = BM_edge_at_index(bm, rdata->loose_edges[i]);
+ if (!BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) {
+ add_overlay_loose_edge(
+ rdata, vbo_pos, vbo_nor, vbo_data,
+ attr_id.pos, attr_id.vnor, attr_id.data,
+ eed, vbo_len_used);
+ vbo_len_used += 2;
+ }
+ }
+ }
+
+ /* Finish */
+ if (vbo_len_used != vbo_len_capacity) {
+ if (vbo_pos != NULL) {
+ GWN_vertbuf_data_resize(vbo_pos, vbo_len_used);
+ }
+ if (vbo_nor != NULL) {
+ GWN_vertbuf_data_resize(vbo_nor, vbo_len_used);
+ }
+ if (vbo_data != NULL) {
+ GWN_vertbuf_data_resize(vbo_data, vbo_len_used);
+ }
+ }
+}
+
+static void mesh_batch_cache_create_overlay_lvert_buffers(
+ MeshRenderData *rdata, MeshBatchCache *cache)
+{
+ BLI_assert(rdata->types & (MR_DATATYPE_VERT | MR_DATATYPE_LOOPTRI));
+
+ BMesh *bm = rdata->edit_bmesh->bm;
+ const int lvert_len = mesh_render_data_loose_verts_len_get(rdata);
+
+ const int vbo_len_capacity = lvert_len;
+ int vbo_len_used = 0;
+
+ static struct { uint pos, vnor, data; } attr_id;
+
+ /* Positions */
+ Gwn_VertBuf *vbo_pos = NULL;
+ if (cache->ed_lvert_pos == NULL) {
+ vbo_pos = cache->ed_lvert_pos =
+ GWN_vertbuf_create_with_format(edit_mesh_overlay_pos_format(&attr_id.pos));
+ GWN_vertbuf_data_alloc(vbo_pos, vbo_len_capacity);
+ }
+
+ /* Normals */
+ Gwn_VertBuf *vbo_nor = NULL;
+ if (cache->ed_lvert_nor == NULL) {
+ vbo_nor = cache->ed_lvert_nor =
+ GWN_vertbuf_create_with_format(edit_mesh_overlay_nor_format(&attr_id.vnor, NULL));
+ GWN_vertbuf_data_alloc(vbo_nor, vbo_len_capacity);
+ }
+
+ /* Data */
+ Gwn_VertBuf *vbo_data = NULL;
+ if (cache->ed_lvert_data == NULL) {
+ vbo_data = cache->ed_lvert_data =
+ GWN_vertbuf_create_with_format(edit_mesh_overlay_data_format(&attr_id.data));
+ GWN_vertbuf_data_alloc(vbo_data, vbo_len_capacity);
+ }
+
+ for (uint i = 0; i < lvert_len; i++) {
+ BMVert *eve = BM_vert_at_index(bm, rdata->loose_verts[i]);
+ add_overlay_loose_vert(
+ rdata, vbo_pos, vbo_nor, vbo_data,
+ attr_id.pos, attr_id.vnor, attr_id.data,
+ eve, vbo_len_used);
+ vbo_len_used += 1;
+ }
+
+ /* Finish */
+ if (vbo_len_used != vbo_len_capacity) {
+ if (vbo_pos != NULL) {
+ GWN_vertbuf_data_resize(vbo_pos, vbo_len_used);
+ }
+ if (vbo_nor != NULL) {
+ GWN_vertbuf_data_resize(vbo_nor, vbo_len_used);
+ }
+ if (vbo_data != NULL) {
+ GWN_vertbuf_data_resize(vbo_data, vbo_len_used);
+ }
+ }
+}
+
+/* Position */
+static Gwn_VertBuf *mesh_batch_cache_get_edit_tri_pos(
+ MeshRenderData *rdata, MeshBatchCache *cache)
+{
+ BLI_assert(rdata->types & MR_DATATYPE_VERT);
+
+ if (cache->ed_tri_pos == NULL) {
+ mesh_batch_cache_create_overlay_tri_buffers(rdata, cache);
+ }
+
+ return cache->ed_tri_pos;
+}
+
+static Gwn_VertBuf *mesh_batch_cache_get_edit_ledge_pos(
+ MeshRenderData *rdata, MeshBatchCache *cache)
+{
+ BLI_assert(rdata->types & MR_DATATYPE_VERT);
+
+ if (cache->ed_ledge_pos == NULL) {
+ mesh_batch_cache_create_overlay_ledge_buffers(rdata, cache);
+ }
+
+ return cache->ed_ledge_pos;
+}
+
+static Gwn_VertBuf *mesh_batch_cache_get_edit_lvert_pos(
+ MeshRenderData *rdata, MeshBatchCache *cache)
+{
+ BLI_assert(rdata->types & MR_DATATYPE_VERT);
+
+ if (cache->ed_lvert_pos == NULL) {
+ mesh_batch_cache_create_overlay_lvert_buffers(rdata, cache);
+ }
+
+ return cache->ed_lvert_pos;
+}
+
+/* Normal */
+static Gwn_VertBuf *mesh_batch_cache_get_edit_tri_nor(
+ MeshRenderData *rdata, MeshBatchCache *cache)
+{
+ BLI_assert(rdata->types & MR_DATATYPE_VERT);
+
+ if (cache->ed_tri_nor == NULL) {
+ mesh_batch_cache_create_overlay_tri_buffers(rdata, cache);
+ }
+
+ return cache->ed_tri_nor;
+}
+
+static Gwn_VertBuf *mesh_batch_cache_get_edit_ledge_nor(
+ MeshRenderData *rdata, MeshBatchCache *cache)
+{
+ BLI_assert(rdata->types & MR_DATATYPE_VERT);
+
+ if (cache->ed_ledge_nor == NULL) {
+ mesh_batch_cache_create_overlay_ledge_buffers(rdata, cache);
+ }
+
+ return cache->ed_ledge_nor;
+}
+
+static Gwn_VertBuf *mesh_batch_cache_get_edit_lvert_nor(
+ MeshRenderData *rdata, MeshBatchCache *cache)
+{
+ BLI_assert(rdata->types & MR_DATATYPE_VERT);
+
+ if (cache->ed_lvert_nor == NULL) {
+ mesh_batch_cache_create_overlay_lvert_buffers(rdata, cache);
+ }
+
+ return cache->ed_lvert_nor;
+}
+
+/* Data */
+static Gwn_VertBuf *mesh_batch_cache_get_edit_tri_data(
+ MeshRenderData *rdata, MeshBatchCache *cache)
+{
+ BLI_assert(rdata->types & MR_DATATYPE_VERT);
+
+ if (cache->ed_tri_data == NULL) {
+ mesh_batch_cache_create_overlay_tri_buffers(rdata, cache);
+ }
+
+ return cache->ed_tri_data;
+}
+
+static Gwn_VertBuf *mesh_batch_cache_get_edit_ledge_data(
+ MeshRenderData *rdata, MeshBatchCache *cache)
+{
+ BLI_assert(rdata->types & MR_DATATYPE_VERT);
+
+ if (cache->ed_ledge_data == NULL) {
+ mesh_batch_cache_create_overlay_ledge_buffers(rdata, cache);
+ }
+
+ return cache->ed_ledge_data;
+}
+
+static Gwn_VertBuf *mesh_batch_cache_get_edit_lvert_data(
+ MeshRenderData *rdata, MeshBatchCache *cache)
+{
+ BLI_assert(rdata->types & MR_DATATYPE_VERT);
+
+ if (cache->ed_lvert_data == NULL) {
+ mesh_batch_cache_create_overlay_lvert_buffers(rdata, cache);
+ }
+
+ return cache->ed_lvert_data;
+}
+
+static Gwn_IndexBuf *mesh_batch_cache_get_edges_in_order(MeshRenderData *rdata, MeshBatchCache *cache)
+{
+ BLI_assert(rdata->types & (MR_DATATYPE_VERT | MR_DATATYPE_EDGE));
+
+ if (cache->edges_in_order == NULL) {
+ const int vert_len = mesh_render_data_verts_len_get(rdata);
+ const int edge_len = mesh_render_data_edges_len_get(rdata);
+
+ Gwn_IndexBufBuilder elb;
+ GWN_indexbuf_init(&elb, GWN_PRIM_LINES, edge_len, vert_len);
+
+ BLI_assert(rdata->types & MR_DATATYPE_EDGE);
+
+ if (rdata->edit_bmesh) {
+ BMesh *bm = rdata->edit_bmesh->bm;
+ BMIter eiter;
+ BMEdge *eed;
+ BM_ITER_MESH(eed, &eiter, bm, BM_EDGES_OF_MESH) {
+ if (!BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) {
+ GWN_indexbuf_add_line_verts(&elb, BM_elem_index_get(eed->v1), BM_elem_index_get(eed->v2));
+ }
+ }
+ }
+ else {
+ const MEdge *ed = rdata->medge;
+ for (int i = 0; i < edge_len; i++, ed++) {
+ GWN_indexbuf_add_line_verts(&elb, ed->v1, ed->v2);
+ }
+ }
+ cache->edges_in_order = GWN_indexbuf_build(&elb);
+ }
+
+ return cache->edges_in_order;
+}
+
+static Gwn_IndexBuf *mesh_batch_cache_get_triangles_in_order(MeshRenderData *rdata, MeshBatchCache *cache)
+{
+ BLI_assert(rdata->types & (MR_DATATYPE_VERT | MR_DATATYPE_LOOPTRI));
+
+ if (cache->triangles_in_order == NULL) {
+ const int vert_len = mesh_render_data_verts_len_get(rdata);
+ const int tri_len = mesh_render_data_looptri_len_get(rdata);
+
+ Gwn_IndexBufBuilder elb;
+ GWN_indexbuf_init(&elb, GWN_PRIM_TRIS, tri_len, vert_len);
+
+ if (rdata->edit_bmesh) {
+ for (int i = 0; i < tri_len; ++i) {
+ const BMLoop **ltri = (const BMLoop **)rdata->edit_bmesh->looptris[i];
+ if (!BM_elem_flag_test(ltri[0]->f, BM_ELEM_HIDDEN)) {
+ for (uint tri_corner = 0; tri_corner < 3; tri_corner++) {
+ GWN_indexbuf_add_generic_vert(&elb, BM_elem_index_get(ltri[tri_corner]->v));
+ }
+ }
+ }
+ }
+ else {
+ for (int i = 0; i < tri_len; ++i) {
+ const MLoopTri *mlt = &rdata->mlooptri[i];
+ for (uint tri_corner = 0; tri_corner < 3; tri_corner++) {
+ GWN_indexbuf_add_generic_vert(&elb, mlt->tri[tri_corner]);
+ }
+ }
+ }
+ cache->triangles_in_order = GWN_indexbuf_build(&elb);
+ }
+
+ return cache->triangles_in_order;
+}
+
+static Gwn_IndexBuf **mesh_batch_cache_get_triangles_in_order_split_by_material(
+ MeshRenderData *rdata, MeshBatchCache *cache)
+{
+ BLI_assert(rdata->types & (MR_DATATYPE_VERT | MR_DATATYPE_POLY));
+
+ if (cache->shaded_triangles_in_order == NULL) {
+ const int poly_len = mesh_render_data_polys_len_get(rdata);
+ const int tri_len = mesh_render_data_looptri_len_get(rdata);
+ const int mat_len = mesh_render_data_mat_len_get(rdata);
+
+ int *mat_tri_len = MEM_callocN(sizeof(*mat_tri_len) * mat_len, __func__);
+ cache->shaded_triangles_in_order = MEM_callocN(sizeof(*cache->shaded_triangles) * mat_len, __func__);
+ Gwn_IndexBufBuilder *elb = MEM_callocN(sizeof(*elb) * mat_len, __func__);
+
+ /* Note that polygons (not triangles) are used here.
+ * This OK because result is _guaranteed_ to be the same. */
+ if (rdata->edit_bmesh) {
+ BMesh *bm = rdata->edit_bmesh->bm;
+ BMIter fiter;
+ BMFace *efa;
+
+ BM_ITER_MESH(efa, &fiter, bm, BM_FACES_OF_MESH) {
+ if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) {
+ const short ma_id = efa->mat_nr < mat_len ? efa->mat_nr : 0;
+ mat_tri_len[ma_id] += (efa->len - 2);
+ }
+ }
+ }
+ else {
+ for (uint i = 0; i < poly_len; i++) {
+ const MPoly *mp = &rdata->mpoly[i]; ;
+ const short ma_id = mp->mat_nr < mat_len ? mp->mat_nr : 0;
+ mat_tri_len[ma_id] += (mp->totloop - 2);
+ }
+ }
+
+ /* Init ELBs. */
+ for (int i = 0; i < mat_len; ++i) {
+ GWN_indexbuf_init(&elb[i], GWN_PRIM_TRIS, mat_tri_len[i], tri_len * 3);
+ }
+
+ /* Populate ELBs. */
+ uint nidx = 0;
+ if (rdata->edit_bmesh) {
+ BMesh *bm = rdata->edit_bmesh->bm;
+ BMIter fiter;
+ BMFace *efa;
+
+ BM_ITER_MESH(efa, &fiter, bm, BM_FACES_OF_MESH) {
+ if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) {
+ const short ma_id = efa->mat_nr < mat_len ? efa->mat_nr : 0;
+ for (int j = 2; j < efa->len; j++) {
+ GWN_indexbuf_add_tri_verts(&elb[ma_id], nidx + 0, nidx + 1, nidx + 2);
+ nidx += 3;
+ }
+ }
+ }
+ }
+ else {
+ for (uint i = 0; i < poly_len; i++) {
+ const MPoly *mp = &rdata->mpoly[i]; ;
+ const short ma_id = mp->mat_nr < mat_len ? mp->mat_nr : 0;
+ for (int j = 2; j < mp->totloop; j++) {
+ GWN_indexbuf_add_tri_verts(&elb[ma_id], nidx + 0, nidx + 1, nidx + 2);
+ nidx += 3;
+ }
+ }
+ }
+
+ /* Build ELBs. */
+ for (int i = 0; i < mat_len; ++i) {
+ cache->shaded_triangles_in_order[i] = GWN_indexbuf_build(&elb[i]);
+ }
+
+ MEM_freeN(mat_tri_len);
+ MEM_freeN(elb);
+ }
+
+ return cache->shaded_triangles_in_order;
+}
+
+static Gwn_VertBuf *mesh_create_edge_pos_with_sel(
+ MeshRenderData *rdata, bool use_wire, bool use_select_bool)
+{
+ BLI_assert(rdata->types & (MR_DATATYPE_VERT | MR_DATATYPE_EDGE | MR_DATATYPE_POLY | MR_DATATYPE_LOOP));
+ BLI_assert(rdata->edit_bmesh == NULL);
+
+ Gwn_VertBuf *vbo;
+ {
+ unsigned int vidx = 0, cidx = 0;
+
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos, sel; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ attr_id.sel = GWN_vertformat_attr_add(&format, "select", GWN_COMP_U8, 1, GWN_FETCH_INT);
+ }
+
+ const int edge_len = mesh_render_data_edges_len_get(rdata);
+
+ vbo = GWN_vertbuf_create_with_format(&format);
+
+ const int vbo_len_capacity = edge_len * 2;
+ int vbo_len_used = 0;
+ GWN_vertbuf_data_alloc(vbo, vbo_len_capacity);
+
+ if (use_select_bool) {
+ mesh_render_data_ensure_edge_select_bool(rdata, use_wire);
+ }
+ bool *edge_select_bool = use_select_bool ? rdata->edge_select_bool : NULL;
+
+ for (int i = 0; i < edge_len; i++) {
+ const MEdge *ed = &rdata->medge[i];
+
+ uchar edge_vert_sel;
+ if (use_select_bool && edge_select_bool[i]) {
+ edge_vert_sel = true;
+ }
+ else if (use_wire) {
+ edge_vert_sel = false;
+ }
+ else {
+ continue;
+ }
+
+ GWN_vertbuf_attr_set(vbo, attr_id.sel, cidx++, &edge_vert_sel);
+ GWN_vertbuf_attr_set(vbo, attr_id.sel, cidx++, &edge_vert_sel);
+
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vidx++, rdata->mvert[ed->v1].co);
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, vidx++, rdata->mvert[ed->v2].co);
+ }
+ vbo_len_used = vidx;
+
+ if (vbo_len_capacity != vbo_len_used) {
+ GWN_vertbuf_data_resize(vbo, vbo_len_used);
+ }
+ }
+
+ return vbo;
+}
+
+static Gwn_IndexBuf *mesh_create_tri_overlay_weight_faces(
+ MeshRenderData *rdata)
+{
+ BLI_assert(rdata->types & (MR_DATATYPE_VERT | MR_DATATYPE_LOOPTRI));
+
+ {
+ const int vert_len = mesh_render_data_verts_len_get(rdata);
+ const int tri_len = mesh_render_data_looptri_len_get(rdata);
+
+ Gwn_IndexBufBuilder elb;
+ GWN_indexbuf_init(&elb, GWN_PRIM_TRIS, tri_len, vert_len);
+
+ for (int i = 0; i < tri_len; ++i) {
+ const MLoopTri *mlt = &rdata->mlooptri[i];
+ if (!(rdata->mpoly[mlt->poly].flag & (ME_FACE_SEL | ME_HIDE))) {
+ for (uint tri_corner = 0; tri_corner < 3; tri_corner++) {
+ GWN_indexbuf_add_generic_vert(&elb, rdata->mloop[mlt->tri[tri_corner]].v);
+ }
+ }
+ }
+ return GWN_indexbuf_build(&elb);
+ }
+}
+
+/**
+ * Non-edit mode vertices (only used for weight-paint mode).
+ */
+static Gwn_VertBuf *mesh_create_vert_pos_with_overlay_data(
+ MeshRenderData *rdata)
+{
+ BLI_assert(rdata->types & (MR_DATATYPE_VERT));
+ BLI_assert(rdata->edit_bmesh == NULL);
+
+ Gwn_VertBuf *vbo;
+ {
+ unsigned int cidx = 0;
+
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint data; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.data = GWN_vertformat_attr_add(&format, "data", GWN_COMP_I8, 1, GWN_FETCH_INT);
+ }
+
+ const int vert_len = mesh_render_data_verts_len_get(rdata);
+
+ vbo = GWN_vertbuf_create_with_format(&format);
+
+ const int vbo_len_capacity = vert_len;
+ int vbo_len_used = 0;
+ GWN_vertbuf_data_alloc(vbo, vbo_len_capacity);
+
+ for (int i = 0; i < vert_len; i++) {
+ const MVert *mv = &rdata->mvert[i];
+ const char data = mv->flag & (SELECT | ME_HIDE);
+ GWN_vertbuf_attr_set(vbo, attr_id.data, cidx++, &data);
+ }
+ vbo_len_used = cidx;
+
+ if (vbo_len_capacity != vbo_len_used) {
+ GWN_vertbuf_data_resize(vbo, vbo_len_used);
+ }
+ }
+ return vbo;
+}
+
+/** \} */
+
+
+/* ---------------------------------------------------------------------- */
+
+/** \name Public API
+ * \{ */
+
+Gwn_Batch *DRW_mesh_batch_cache_get_all_edges(Mesh *me)
+{
+ MeshBatchCache *cache = mesh_batch_cache_get(me);
+
+ if (cache->all_edges == NULL) {
+ /* create batch from Mesh */
+ const int datatype = MR_DATATYPE_VERT | MR_DATATYPE_EDGE;
+ MeshRenderData *rdata = mesh_render_data_create(me, datatype);
+
+ cache->all_edges = GWN_batch_create(
+ GWN_PRIM_LINES, mesh_batch_cache_get_vert_pos_and_nor_in_order(rdata, cache),
+ mesh_batch_cache_get_edges_in_order(rdata, cache));
+
+ mesh_render_data_free(rdata);
+ }
+
+ return cache->all_edges;
+}
+
+Gwn_Batch *DRW_mesh_batch_cache_get_all_triangles(Mesh *me)
+{
+ MeshBatchCache *cache = mesh_batch_cache_get(me);
+
+ if (cache->all_triangles == NULL) {
+ /* create batch from DM */
+ const int datatype = MR_DATATYPE_VERT | MR_DATATYPE_LOOPTRI;
+ MeshRenderData *rdata = mesh_render_data_create(me, datatype);
+
+ cache->all_triangles = GWN_batch_create(
+ GWN_PRIM_TRIS, mesh_batch_cache_get_vert_pos_and_nor_in_order(rdata, cache),
+ mesh_batch_cache_get_triangles_in_order(rdata, cache));
+
+ mesh_render_data_free(rdata);
+ }
+
+ return cache->all_triangles;
+}
+
+Gwn_Batch *DRW_mesh_batch_cache_get_triangles_with_normals(Mesh *me)
+{
+ MeshBatchCache *cache = mesh_batch_cache_get(me);
+
+ if (cache->triangles_with_normals == NULL) {
+ const int datatype = MR_DATATYPE_VERT | MR_DATATYPE_LOOPTRI | MR_DATATYPE_LOOP | MR_DATATYPE_POLY;
+ MeshRenderData *rdata = mesh_render_data_create(me, datatype);
+
+ cache->triangles_with_normals = GWN_batch_create(
+ GWN_PRIM_TRIS, mesh_batch_cache_get_tri_pos_and_normals(rdata, cache), NULL);
+
+ mesh_render_data_free(rdata);
+ }
+
+ return cache->triangles_with_normals;
+}
+
+Gwn_Batch *DRW_mesh_batch_cache_get_triangles_with_normals_and_weights(Mesh *me, int defgroup)
+{
+ MeshBatchCache *cache = mesh_batch_cache_get(me);
+
+ if (cache->triangles_with_weights == NULL) {
+ const bool use_hide = (me->editflag & (ME_EDIT_PAINT_VERT_SEL | ME_EDIT_PAINT_FACE_SEL)) != 0;
+ const int datatype =
+ MR_DATATYPE_VERT | MR_DATATYPE_LOOPTRI | MR_DATATYPE_LOOP | MR_DATATYPE_POLY | MR_DATATYPE_DVERT;
+ MeshRenderData *rdata = mesh_render_data_create(me, datatype);
+
+ cache->triangles_with_weights = GWN_batch_create_ex(
+ GWN_PRIM_TRIS, mesh_create_tri_weights(rdata, use_hide, defgroup), NULL, GWN_BATCH_OWNS_VBO);
+
+ Gwn_VertBuf *vbo_tris = use_hide ?
+ mesh_create_tri_pos_and_normals_visible_only(rdata) :
+ mesh_batch_cache_get_tri_pos_and_normals(rdata, cache);
+
+ GWN_batch_vertbuf_add_ex(cache->triangles_with_weights, vbo_tris, use_hide);
+
+ mesh_render_data_free(rdata);
+ }
+
+ return cache->triangles_with_weights;
+}
+
+Gwn_Batch *DRW_mesh_batch_cache_get_triangles_with_normals_and_vert_colors(Mesh *me)
+{
+ MeshBatchCache *cache = mesh_batch_cache_get(me);
+
+ if (cache->triangles_with_vert_colors == NULL) {
+ const bool use_hide = (me->editflag & (ME_EDIT_PAINT_VERT_SEL | ME_EDIT_PAINT_FACE_SEL)) != 0;
+ const int datatype =
+ MR_DATATYPE_VERT | MR_DATATYPE_LOOPTRI | MR_DATATYPE_LOOP | MR_DATATYPE_POLY | MR_DATATYPE_LOOPCOL;
+ MeshRenderData *rdata = mesh_render_data_create(me, datatype);
+
+ cache->triangles_with_vert_colors = GWN_batch_create_ex(
+ GWN_PRIM_TRIS, mesh_create_tri_vert_colors(rdata, use_hide), NULL, GWN_BATCH_OWNS_VBO);
+
+ Gwn_VertBuf *vbo_tris = use_hide ?
+ mesh_create_tri_pos_and_normals_visible_only(rdata) :
+ mesh_batch_cache_get_tri_pos_and_normals(rdata, cache);
+ GWN_batch_vertbuf_add_ex(cache->triangles_with_vert_colors, vbo_tris, use_hide);
+
+ mesh_render_data_free(rdata);
+ }
+
+ return cache->triangles_with_vert_colors;
+}
+
+
+struct Gwn_Batch *DRW_mesh_batch_cache_get_triangles_with_select_id(
+ struct Mesh *me, bool use_hide, uint select_id_offset)
+{
+ MeshBatchCache *cache = mesh_batch_cache_get(me);
+
+ if (cache->triangles_with_select_id_offset != select_id_offset) {
+ cache->triangles_with_select_id_offset = select_id_offset;
+ GWN_BATCH_DISCARD_SAFE(cache->triangles_with_select_id);
+ }
+
+ if (cache->triangles_with_select_id == NULL) {
+ const int datatype =
+ MR_DATATYPE_VERT | MR_DATATYPE_LOOPTRI | MR_DATATYPE_LOOP | MR_DATATYPE_POLY;
+ MeshRenderData *rdata = mesh_render_data_create(me, datatype);
+
+ cache->triangles_with_select_id = GWN_batch_create_ex(
+ GWN_PRIM_TRIS, mesh_create_tri_select_id(rdata, use_hide, select_id_offset), NULL, GWN_BATCH_OWNS_VBO);
+
+ Gwn_VertBuf *vbo_tris = use_hide ?
+ mesh_create_tri_pos_and_normals_visible_only(rdata) :
+ mesh_batch_cache_get_tri_pos_and_normals(rdata, cache);
+ GWN_batch_vertbuf_add_ex(cache->triangles_with_select_id, vbo_tris, use_hide);
+
+ mesh_render_data_free(rdata);
+ }
+
+ return cache->triangles_with_select_id;
+}
+
+/**
+ * Same as #DRW_mesh_batch_cache_get_triangles_with_select_id
+ * without the ID's, use to mask out geometry, eg - dont select face-dots behind other faces.
+ */
+struct Gwn_Batch *DRW_mesh_batch_cache_get_triangles_with_select_mask(struct Mesh *me, bool use_hide)
+{
+ MeshBatchCache *cache = mesh_batch_cache_get(me);
+ if (cache->triangles_with_select_mask == NULL) {
+ const int datatype =
+ MR_DATATYPE_VERT | MR_DATATYPE_LOOPTRI | MR_DATATYPE_LOOP | MR_DATATYPE_POLY;
+ MeshRenderData *rdata = mesh_render_data_create(me, datatype);
+
+ Gwn_VertBuf *vbo_tris = use_hide ?
+ mesh_create_tri_pos_and_normals_visible_only(rdata) :
+ mesh_batch_cache_get_tri_pos_and_normals(rdata, cache);
+
+ cache->triangles_with_select_mask = GWN_batch_create_ex(
+ GWN_PRIM_TRIS, vbo_tris, NULL, use_hide ? GWN_BATCH_OWNS_VBO : 0);
+
+ mesh_render_data_free(rdata);
+ }
+
+ return cache->triangles_with_select_mask;
+}
+
+Gwn_Batch *DRW_mesh_batch_cache_get_points_with_normals(Mesh *me)
+{
+ MeshBatchCache *cache = mesh_batch_cache_get(me);
+
+ if (cache->points_with_normals == NULL) {
+ const int datatype = MR_DATATYPE_VERT | MR_DATATYPE_LOOPTRI | MR_DATATYPE_LOOP | MR_DATATYPE_POLY;
+ MeshRenderData *rdata = mesh_render_data_create(me, datatype);
+
+ cache->points_with_normals = GWN_batch_create(
+ GWN_PRIM_POINTS, mesh_batch_cache_get_tri_pos_and_normals(rdata, cache), NULL);
+
+ mesh_render_data_free(rdata);
+ }
+
+ return cache->points_with_normals;
+}
+
+Gwn_Batch *DRW_mesh_batch_cache_get_all_verts(Mesh *me)
+{
+ MeshBatchCache *cache = mesh_batch_cache_get(me);
+
+ if (cache->all_verts == NULL) {
+ /* create batch from DM */
+ MeshRenderData *rdata = mesh_render_data_create(me, MR_DATATYPE_VERT);
+
+ cache->all_verts = GWN_batch_create(
+ GWN_PRIM_POINTS, mesh_batch_cache_get_vert_pos_and_nor_in_order(rdata, cache), NULL);
+
+ mesh_render_data_free(rdata);
+ }
+
+ return cache->all_verts;
+}
+
+Gwn_Batch *DRW_mesh_batch_cache_get_fancy_edges(Mesh *me)
+{
+ MeshBatchCache *cache = mesh_batch_cache_get(me);
+
+ if (cache->fancy_edges == NULL) {
+ /* create batch from DM */
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos, n1, n2; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ attr_id.n1 = GWN_vertformat_attr_add(&format, "N1", GWN_COMP_I10, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
+ attr_id.n2 = GWN_vertformat_attr_add(&format, "N2", GWN_COMP_I10, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
+ }
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+
+ MeshRenderData *rdata = mesh_render_data_create(
+ me, MR_DATATYPE_VERT | MR_DATATYPE_EDGE | MR_DATATYPE_LOOP | MR_DATATYPE_POLY);
+
+ const int edge_len = mesh_render_data_edges_len_get(rdata);
+
+ const int vbo_len_capacity = edge_len * 2; /* these are PRIM_LINE verts, not mesh verts */
+ int vbo_len_used = 0;
+ GWN_vertbuf_data_alloc(vbo, vbo_len_capacity);
+ for (int i = 0; i < edge_len; ++i) {
+ float *vcos1, *vcos2;
+ float *pnor1 = NULL, *pnor2 = NULL;
+ bool is_manifold;
+
+ if (mesh_render_data_edge_vcos_manifold_pnors(rdata, i, &vcos1, &vcos2, &pnor1, &pnor2, &is_manifold)) {
+
+ Gwn_PackedNormal n1value = { .x = 0, .y = 0, .z = +511 };
+ Gwn_PackedNormal n2value = { .x = 0, .y = 0, .z = -511 };
+
+ if (is_manifold) {
+ n1value = GWN_normal_convert_i10_v3(pnor1);
+ n2value = GWN_normal_convert_i10_v3(pnor2);
+ }
+
+ const Gwn_PackedNormal *n1 = &n1value;
+ const Gwn_PackedNormal *n2 = &n2value;
+
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, 2 * i, vcos1);
+ GWN_vertbuf_attr_set(vbo, attr_id.n1, 2 * i, n1);
+ GWN_vertbuf_attr_set(vbo, attr_id.n2, 2 * i, n2);
+
+ GWN_vertbuf_attr_set(vbo, attr_id.pos, 2 * i + 1, vcos2);
+ GWN_vertbuf_attr_set(vbo, attr_id.n1, 2 * i + 1, n1);
+ GWN_vertbuf_attr_set(vbo, attr_id.n2, 2 * i + 1, n2);
+
+ vbo_len_used += 2;
+ }
+ }
+ if (vbo_len_used != vbo_len_capacity) {
+ GWN_vertbuf_data_resize(vbo, vbo_len_used);
+ }
+
+ cache->fancy_edges = GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+
+ mesh_render_data_free(rdata);
+ }
+
+ return cache->fancy_edges;
+}
+
+static void mesh_batch_cache_create_overlay_batches(Mesh *me)
+{
+ BLI_assert(me->edit_btmesh != NULL);
+
+ /* Since MR_DATATYPE_OVERLAY is slow to generate, generate them all at once */
+ const int options =
+ MR_DATATYPE_VERT | MR_DATATYPE_EDGE | MR_DATATYPE_LOOP | MR_DATATYPE_POLY |
+ MR_DATATYPE_LOOPTRI | MR_DATATYPE_OVERLAY;
+
+ MeshBatchCache *cache = mesh_batch_cache_get(me);
+ MeshRenderData *rdata = mesh_render_data_create(me, options);
+
+ if (cache->overlay_triangles == NULL) {
+ cache->overlay_triangles = GWN_batch_create(
+ GWN_PRIM_TRIS, mesh_batch_cache_get_edit_tri_pos(rdata, cache), NULL);
+ GWN_batch_vertbuf_add(cache->overlay_triangles, mesh_batch_cache_get_edit_tri_nor(rdata, cache));
+ GWN_batch_vertbuf_add(cache->overlay_triangles, mesh_batch_cache_get_edit_tri_data(rdata, cache));
+ }
+
+ if (cache->overlay_loose_edges == NULL) {
+ cache->overlay_loose_edges = GWN_batch_create(
+ GWN_PRIM_LINES, mesh_batch_cache_get_edit_ledge_pos(rdata, cache), NULL);
+ GWN_batch_vertbuf_add(cache->overlay_loose_edges, mesh_batch_cache_get_edit_ledge_nor(rdata, cache));
+ GWN_batch_vertbuf_add(cache->overlay_loose_edges, mesh_batch_cache_get_edit_ledge_data(rdata, cache));
+ }
+
+ if (cache->overlay_loose_verts == NULL) {
+ cache->overlay_loose_verts = GWN_batch_create(
+ GWN_PRIM_POINTS, mesh_batch_cache_get_edit_lvert_pos(rdata, cache), NULL);
+ GWN_batch_vertbuf_add(cache->overlay_loose_verts, mesh_batch_cache_get_edit_lvert_nor(rdata, cache));
+ GWN_batch_vertbuf_add(cache->overlay_loose_verts, mesh_batch_cache_get_edit_lvert_data(rdata, cache));
+ }
+
+ if (cache->overlay_triangles_nor == NULL) {
+ cache->overlay_triangles_nor = GWN_batch_create(
+ GWN_PRIM_POINTS, mesh_batch_cache_get_edit_tri_pos(rdata, cache), NULL);
+ GWN_batch_vertbuf_add(cache->overlay_triangles_nor, mesh_batch_cache_get_edit_tri_nor(rdata, cache));
+ }
+
+ if (cache->overlay_loose_edges_nor == NULL) {
+ cache->overlay_loose_edges_nor = GWN_batch_create(
+ GWN_PRIM_POINTS, mesh_batch_cache_get_edit_ledge_pos(rdata, cache), NULL);
+ GWN_batch_vertbuf_add(cache->overlay_loose_edges_nor, mesh_batch_cache_get_edit_ledge_nor(rdata, cache));
+ }
+
+ mesh_render_data_free(rdata);
+}
+
+Gwn_Batch *DRW_mesh_batch_cache_get_overlay_triangles(Mesh *me)
+{
+ MeshBatchCache *cache = mesh_batch_cache_get(me);
+
+ if (cache->overlay_triangles == NULL) {
+ mesh_batch_cache_create_overlay_batches(me);
+ }
+
+ return cache->overlay_triangles;
+}
+
+Gwn_Batch *DRW_mesh_batch_cache_get_overlay_loose_edges(Mesh *me)
+{
+ MeshBatchCache *cache = mesh_batch_cache_get(me);
+
+ if (cache->overlay_loose_edges == NULL) {
+ mesh_batch_cache_create_overlay_batches(me);
+ }
+
+ return cache->overlay_loose_edges;
+}
+
+Gwn_Batch *DRW_mesh_batch_cache_get_overlay_loose_verts(Mesh *me)
+{
+ MeshBatchCache *cache = mesh_batch_cache_get(me);
+
+ if (cache->overlay_loose_verts == NULL) {
+ mesh_batch_cache_create_overlay_batches(me);
+ }
+
+ return cache->overlay_loose_verts;
+}
+
+Gwn_Batch *DRW_mesh_batch_cache_get_overlay_triangles_nor(Mesh *me)
+{
+ MeshBatchCache *cache = mesh_batch_cache_get(me);
+
+ if (cache->overlay_triangles_nor == NULL) {
+ mesh_batch_cache_create_overlay_batches(me);
+ }
+
+ return cache->overlay_triangles_nor;
+}
+
+Gwn_Batch *DRW_mesh_batch_cache_get_overlay_loose_edges_nor(Mesh *me)
+{
+ MeshBatchCache *cache = mesh_batch_cache_get(me);
+
+ if (cache->overlay_loose_edges_nor == NULL) {
+ mesh_batch_cache_create_overlay_batches(me);
+ }
+
+ return cache->overlay_loose_edges_nor;
+}
+
+Gwn_Batch *DRW_mesh_batch_cache_get_overlay_facedots(Mesh *me)
+{
+ MeshBatchCache *cache = mesh_batch_cache_get(me);
+
+ if (cache->overlay_facedots == NULL) {
+ MeshRenderData *rdata = mesh_render_data_create(me, MR_DATATYPE_VERT | MR_DATATYPE_LOOP | MR_DATATYPE_POLY);
+
+ cache->overlay_facedots = GWN_batch_create(
+ GWN_PRIM_POINTS, mesh_batch_cache_get_facedot_pos_with_normals_and_flag(rdata, cache), NULL);
+
+ mesh_render_data_free(rdata);
+ }
+
+ return cache->overlay_facedots;
+}
+
+Gwn_Batch *DRW_mesh_batch_cache_get_facedots_with_select_id(Mesh *me, uint select_id_offset)
+{
+ MeshBatchCache *cache = mesh_batch_cache_get(me);
+
+ if (cache->facedot_with_select_id_offset != select_id_offset) {
+ cache->facedot_with_select_id_offset = select_id_offset;
+ GWN_BATCH_DISCARD_SAFE(cache->edges_with_select_id);
+ }
+
+ if (cache->facedot_with_select_id == NULL) {
+ MeshRenderData *rdata = mesh_render_data_create(me, MR_DATATYPE_VERT | MR_DATATYPE_LOOP | MR_DATATYPE_POLY);
+
+ /* We only want the 'pos', not the normals or flag.
+ * Use since this is almost certainly already created. */
+ cache->facedot_with_select_id = GWN_batch_create(
+ GWN_PRIM_POINTS, mesh_batch_cache_get_facedot_pos_with_normals_and_flag(rdata, cache), NULL);
+
+ GWN_batch_vertbuf_add_ex(
+ cache->facedot_with_select_id,
+ mesh_create_facedot_select_id(rdata, select_id_offset), true);
+
+ mesh_render_data_free(rdata);
+ }
+
+ return cache->facedot_with_select_id;
+}
+
+Gwn_Batch *DRW_mesh_batch_cache_get_edges_with_select_id(Mesh *me, uint select_id_offset)
+{
+ MeshBatchCache *cache = mesh_batch_cache_get(me);
+
+ if (cache->edges_with_select_id_offset != select_id_offset) {
+ cache->edges_with_select_id_offset = select_id_offset;
+ GWN_BATCH_DISCARD_SAFE(cache->edges_with_select_id);
+ }
+
+ if (cache->edges_with_select_id == NULL) {
+ MeshRenderData *rdata = mesh_render_data_create(me, MR_DATATYPE_VERT | MR_DATATYPE_EDGE);
+
+ cache->edges_with_select_id = GWN_batch_create(
+ GWN_PRIM_LINES, mesh_batch_cache_get_edges_visible(rdata, cache), NULL);
+
+ GWN_batch_vertbuf_add_ex(
+ cache->edges_with_select_id,
+ mesh_create_edges_select_id(rdata, select_id_offset), true);
+
+ mesh_render_data_free(rdata);
+ }
+
+ return cache->edges_with_select_id;
+}
+
+Gwn_Batch *DRW_mesh_batch_cache_get_verts_with_select_id(Mesh *me, uint select_id_offset)
+{
+ MeshBatchCache *cache = mesh_batch_cache_get(me);
+
+ if (cache->verts_with_select_id_offset != select_id_offset) {
+ cache->verts_with_select_id_offset = select_id_offset;
+ GWN_BATCH_DISCARD_SAFE(cache->verts_with_select_id);
+ }
+
+ if (cache->verts_with_select_id == NULL) {
+ MeshRenderData *rdata = mesh_render_data_create(me, MR_DATATYPE_VERT);
+
+ cache->verts_with_select_id = GWN_batch_create(
+ GWN_PRIM_POINTS, mesh_batch_cache_get_verts_visible(rdata, cache), NULL);
+
+ GWN_batch_vertbuf_add_ex(
+ cache->verts_with_select_id,
+ mesh_create_verts_select_id(rdata, select_id_offset), true);
+
+ mesh_render_data_free(rdata);
+ }
+
+ return cache->verts_with_select_id;
+}
+
+Gwn_Batch **DRW_mesh_batch_cache_get_surface_shaded(
+ Mesh *me, struct GPUMaterial **gpumat_array, uint gpumat_array_len)
+{
+ MeshBatchCache *cache = mesh_batch_cache_get(me);
+
+ if (cache->shaded_triangles == NULL) {
+ /* create batch from DM */
+ const int datatype =
+ MR_DATATYPE_VERT | MR_DATATYPE_LOOP | MR_DATATYPE_LOOPTRI |
+ MR_DATATYPE_POLY | MR_DATATYPE_SHADING;
+ MeshRenderData *rdata = mesh_render_data_create_ex(me, datatype, gpumat_array, gpumat_array_len);
+
+ const int mat_len = mesh_render_data_mat_len_get(rdata);
+
+ cache->shaded_triangles = MEM_callocN(sizeof(*cache->shaded_triangles) * mat_len, __func__);
+
+ Gwn_IndexBuf **el = mesh_batch_cache_get_triangles_in_order_split_by_material(rdata, cache);
+
+ Gwn_VertBuf *vbo = mesh_batch_cache_get_tri_pos_and_normals(rdata, cache);
+ for (int i = 0; i < mat_len; ++i) {
+ cache->shaded_triangles[i] = GWN_batch_create(
+ GWN_PRIM_TRIS, vbo, el[i]);
+ Gwn_VertBuf *vbo_shading = mesh_batch_cache_get_tri_shading_data(rdata, cache);
+ if (vbo_shading) {
+ GWN_batch_vertbuf_add(cache->shaded_triangles[i], vbo_shading);
+ }
+ }
+
+
+ mesh_render_data_free(rdata);
+ }
+
+ return cache->shaded_triangles;
+}
+
+Gwn_Batch **DRW_mesh_batch_cache_get_surface_texpaint(Mesh *me)
+{
+ MeshBatchCache *cache = mesh_batch_cache_get(me);
+
+ if (cache->texpaint_triangles == NULL) {
+ /* create batch from DM */
+ const int datatype =
+ MR_DATATYPE_VERT | MR_DATATYPE_LOOP | MR_DATATYPE_POLY | MR_DATATYPE_LOOPTRI | MR_DATATYPE_LOOPUV;
+ MeshRenderData *rdata = mesh_render_data_create(me, datatype);
+
+ const int mat_len = mesh_render_data_mat_len_get(rdata);
+
+ cache->texpaint_triangles = MEM_callocN(sizeof(*cache->texpaint_triangles) * mat_len, __func__);
+
+ Gwn_IndexBuf **el = mesh_batch_cache_get_triangles_in_order_split_by_material(rdata, cache);
+
+ Gwn_VertBuf *vbo = mesh_batch_cache_get_tri_pos_and_normals(rdata, cache);
+ for (int i = 0; i < mat_len; ++i) {
+ cache->texpaint_triangles[i] = GWN_batch_create(
+ GWN_PRIM_TRIS, vbo, el[i]);
+ Gwn_VertBuf *vbo_uv = mesh_batch_cache_get_tri_uv_active(rdata, cache);
+ if (vbo_uv) {
+ GWN_batch_vertbuf_add(cache->texpaint_triangles[i], vbo_uv);
+ }
+ }
+ mesh_render_data_free(rdata);
+ }
+
+ return cache->texpaint_triangles;
+}
+
+Gwn_Batch *DRW_mesh_batch_cache_get_surface_texpaint_single(Mesh *me)
+{
+ MeshBatchCache *cache = mesh_batch_cache_get(me);
+
+ if (cache->texpaint_triangles_single == NULL) {
+ /* create batch from DM */
+ const int datatype =
+ MR_DATATYPE_VERT | MR_DATATYPE_LOOP | MR_DATATYPE_POLY | MR_DATATYPE_LOOPTRI | MR_DATATYPE_LOOPUV;
+ MeshRenderData *rdata = mesh_render_data_create(me, datatype);
+
+ Gwn_VertBuf *vbo = mesh_batch_cache_get_tri_pos_and_normals(rdata, cache);
+
+ cache->texpaint_triangles_single = GWN_batch_create(
+ GWN_PRIM_TRIS, vbo, NULL);
+ Gwn_VertBuf *vbo_uv = mesh_batch_cache_get_tri_uv_active(rdata, cache);
+ if (vbo_uv) {
+ GWN_batch_vertbuf_add(cache->texpaint_triangles_single, vbo_uv);
+ }
+ mesh_render_data_free(rdata);
+ }
+ return cache->texpaint_triangles_single;
+}
+
+Gwn_Batch *DRW_mesh_batch_cache_get_weight_overlay_edges(Mesh *me, bool use_wire, bool use_sel)
+{
+ MeshBatchCache *cache = mesh_batch_cache_get(me);
+
+ if (cache->overlay_paint_edges == NULL) {
+ /* create batch from Mesh */
+ const int datatype = MR_DATATYPE_VERT | MR_DATATYPE_EDGE | MR_DATATYPE_POLY | MR_DATATYPE_LOOP;
+ MeshRenderData *rdata = mesh_render_data_create(me, datatype);
+
+ cache->overlay_paint_edges = GWN_batch_create_ex(
+ GWN_PRIM_LINES, mesh_create_edge_pos_with_sel(rdata, use_wire, use_sel), NULL, GWN_BATCH_OWNS_VBO);
+
+ mesh_render_data_free(rdata);
+ }
+
+ return cache->overlay_paint_edges;
+}
+
+Gwn_Batch *DRW_mesh_batch_cache_get_weight_overlay_faces(Mesh *me)
+{
+ MeshBatchCache *cache = mesh_batch_cache_get(me);
+
+ if (cache->overlay_weight_faces == NULL) {
+ /* create batch from Mesh */
+ const int datatype = MR_DATATYPE_VERT | MR_DATATYPE_POLY | MR_DATATYPE_LOOP | MR_DATATYPE_LOOPTRI;
+ MeshRenderData *rdata = mesh_render_data_create(me, datatype);
+
+ cache->overlay_weight_faces = GWN_batch_create_ex(
+ GWN_PRIM_TRIS, mesh_batch_cache_get_vert_pos_and_nor_in_order(rdata, cache),
+ mesh_create_tri_overlay_weight_faces(rdata), GWN_BATCH_OWNS_INDEX);
+
+ mesh_render_data_free(rdata);
+ }
+
+ return cache->overlay_weight_faces;
+}
+
+Gwn_Batch *DRW_mesh_batch_cache_get_weight_overlay_verts(Mesh *me)
+{
+ MeshBatchCache *cache = mesh_batch_cache_get(me);
+
+ if (cache->overlay_weight_verts == NULL) {
+ /* create batch from Mesh */
+ MeshRenderData *rdata = mesh_render_data_create(me, MR_DATATYPE_VERT);
+
+ cache->overlay_weight_verts = GWN_batch_create(
+ GWN_PRIM_POINTS, mesh_batch_cache_get_vert_pos_and_nor_in_order(rdata, cache), NULL);
+
+ GWN_batch_vertbuf_add_ex(
+ cache->overlay_weight_verts,
+ mesh_create_vert_pos_with_overlay_data(rdata), true);
+ mesh_render_data_free(rdata);
+ }
+
+ return cache->overlay_weight_verts;
+}
+
+/**
+ * Needed for when we draw with shaded data.
+ */
+void DRW_mesh_cache_sculpt_coords_ensure(Mesh *me)
+{
+ if (me->batch_cache) {
+ MeshBatchCache *cache = mesh_batch_cache_get(me);
+ if (cache && cache->pos_with_normals && cache->is_sculpt_points_tag) {
+
+ const int datatype = MR_DATATYPE_VERT | MR_DATATYPE_LOOPTRI | MR_DATATYPE_LOOP | MR_DATATYPE_POLY;
+ MeshRenderData *rdata = mesh_render_data_create(me, datatype);
+
+ Gwn_VertBuf *pos_with_normals = cache->pos_with_normals;
+ cache->pos_with_normals = NULL;
+ GWN_vertbuf_clear(pos_with_normals);
+ Gwn_VertBuf *vbo = mesh_batch_cache_get_tri_pos_and_normals(rdata, cache);
+ *pos_with_normals = *vbo;
+ GWN_vertformat_copy(&pos_with_normals->format, &vbo->format);
+
+ free(vbo);
+ cache->pos_with_normals = pos_with_normals;
+
+ mesh_render_data_free(rdata);
+ }
+ cache->is_sculpt_points_tag = false;
+ }
+}
+
+/** \} */
+
+#undef MESH_RENDER_FUNCTION
diff --git a/source/blender/draw/intern/draw_cache_impl_metaball.c b/source/blender/draw/intern/draw_cache_impl_metaball.c
new file mode 100644
index 00000000000..f01e7b929f8
--- /dev/null
+++ b/source/blender/draw/intern/draw_cache_impl_metaball.c
@@ -0,0 +1,144 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2017 by Blender Foundation.
+ * All rights reserved.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file draw_cache_impl_metaball.c
+ * \ingroup draw
+ *
+ * \brief MetaBall API for render engines
+ */
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_utildefines.h"
+
+#include "DNA_meta_types.h"
+#include "DNA_object_types.h"
+
+#include "BKE_curve.h"
+#include "BKE_mball.h"
+
+#include "GPU_batch.h"
+
+#include "draw_cache_impl.h" /* own include */
+
+
+static void metaball_batch_cache_clear(MetaBall *mb);
+
+/* ---------------------------------------------------------------------- */
+/* MetaBall Gwn_Batch Cache */
+
+typedef struct MetaBallBatchCache {
+ Gwn_Batch *batch;
+
+ /* settings to determine if cache is invalid */
+ bool is_dirty;
+} MetaBallBatchCache;
+
+/* Gwn_Batch cache management. */
+
+static bool metaball_batch_cache_valid(MetaBall *mb)
+{
+ MetaBallBatchCache *cache = mb->batch_cache;
+
+ if (cache == NULL) {
+ return false;
+ }
+
+ return cache->is_dirty == false;
+}
+
+static void metaball_batch_cache_init(MetaBall *mb)
+{
+ MetaBallBatchCache *cache = mb->batch_cache;
+
+ if (!cache) {
+ cache = mb->batch_cache = MEM_mallocN(sizeof(*cache), __func__);
+ }
+ cache->batch = NULL;
+ cache->is_dirty = false;
+}
+
+static MetaBallBatchCache *metaball_batch_cache_get(MetaBall *mb)
+{
+ if (!metaball_batch_cache_valid(mb)) {
+ metaball_batch_cache_clear(mb);
+ metaball_batch_cache_init(mb);
+ }
+ return mb->batch_cache;
+}
+
+void DRW_mball_batch_cache_dirty(MetaBall *mb, int mode)
+{
+ MetaBallBatchCache *cache = mb->batch_cache;
+ if (cache == NULL) {
+ return;
+ }
+ switch (mode) {
+ case BKE_MBALL_BATCH_DIRTY_ALL:
+ cache->is_dirty = true;
+ break;
+ default:
+ BLI_assert(0);
+ }
+}
+
+static void metaball_batch_cache_clear(MetaBall *mb)
+{
+ MetaBallBatchCache *cache = mb->batch_cache;
+ if (!cache) {
+ return;
+ }
+
+ GWN_BATCH_DISCARD_SAFE(cache->batch);
+}
+
+void DRW_mball_batch_cache_free(MetaBall *mb)
+{
+ metaball_batch_cache_clear(mb);
+ MEM_SAFE_FREE(mb->batch_cache);
+}
+
+/* -------------------------------------------------------------------- */
+
+/** \name Public Object/MetaBall API
+ * \{ */
+
+Gwn_Batch *DRW_metaball_batch_cache_get_triangles_with_normals(Object *ob)
+{
+ if (!BKE_mball_is_basis(ob))
+ return NULL;
+
+ MetaBall *mb = ob->data;
+ MetaBallBatchCache *cache = metaball_batch_cache_get(mb);
+
+ if (cache->batch == NULL) {
+ ListBase *lb = &ob->curve_cache->disp;
+ cache->batch = GWN_batch_create_ex(
+ GWN_PRIM_TRIS,
+ DRW_displist_vertbuf_calc_pos_with_normals(lb),
+ DRW_displist_indexbuf_calc_triangles_in_order(lb),
+ GWN_BATCH_OWNS_VBO | GWN_BATCH_OWNS_INDEX);
+ }
+
+ return cache->batch;
+}
diff --git a/source/blender/draw/intern/draw_cache_impl_particles.c b/source/blender/draw/intern/draw_cache_impl_particles.c
new file mode 100644
index 00000000000..da0cc457b99
--- /dev/null
+++ b/source/blender/draw/intern/draw_cache_impl_particles.c
@@ -0,0 +1,520 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2017 by Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): Blender Foundation, Mike Erwin, Dalai Felinto
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file draw_cache_impl_particles.c
+ * \ingroup draw
+ *
+ * \brief Particle API for render engines
+ */
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_utildefines.h"
+#include "BLI_math_vector.h"
+#include "BLI_string.h"
+#include "BLI_ghash.h"
+
+#include "DNA_modifier_types.h"
+#include "DNA_particle_types.h"
+
+#include "BKE_particle.h"
+#include "BKE_DerivedMesh.h"
+
+#include "GPU_batch.h"
+
+#include "draw_cache_impl.h" /* own include */
+
+static void particle_batch_cache_clear(ParticleSystem *psys);
+
+/* ---------------------------------------------------------------------- */
+/* Particle Gwn_Batch Cache */
+
+typedef struct ParticleBatchCache {
+ Gwn_VertBuf *pos;
+ Gwn_IndexBuf *segments;
+
+ Gwn_Batch *hairs;
+
+ int segment_count;
+ int point_count;
+
+ /* settings to determine if cache is invalid */
+ bool is_dirty;
+} ParticleBatchCache;
+
+/* Gwn_Batch cache management. */
+
+static bool particle_batch_cache_valid(ParticleSystem *psys)
+{
+ ParticleBatchCache *cache = psys->batch_cache;
+
+ if (cache == NULL) {
+ return false;
+ }
+
+ if (cache->is_dirty == false) {
+ return true;
+ }
+ else {
+ return false;
+ }
+
+ return true;
+}
+
+static void particle_batch_cache_init(ParticleSystem *psys)
+{
+ ParticleBatchCache *cache = psys->batch_cache;
+
+ if (!cache) {
+ cache = psys->batch_cache = MEM_callocN(sizeof(*cache), __func__);
+ }
+ else {
+ memset(cache, 0, sizeof(*cache));
+ }
+
+ cache->is_dirty = false;
+}
+
+static ParticleBatchCache *particle_batch_cache_get(ParticleSystem *psys)
+{
+ if (!particle_batch_cache_valid(psys)) {
+ particle_batch_cache_clear(psys);
+ particle_batch_cache_init(psys);
+ }
+ return psys->batch_cache;
+}
+
+void DRW_particle_batch_cache_dirty(ParticleSystem *psys, int mode)
+{
+ ParticleBatchCache *cache = psys->batch_cache;
+ if (cache == NULL) {
+ return;
+ }
+ switch (mode) {
+ case BKE_PARTICLE_BATCH_DIRTY_ALL:
+ cache->is_dirty = true;
+ break;
+ default:
+ BLI_assert(0);
+ }
+}
+
+static void particle_batch_cache_clear(ParticleSystem *psys)
+{
+ ParticleBatchCache *cache = psys->batch_cache;
+ if (!cache) {
+ return;
+ }
+
+ GWN_BATCH_DISCARD_SAFE(cache->hairs);
+
+ GWN_VERTBUF_DISCARD_SAFE(cache->pos);
+ GWN_INDEXBUF_DISCARD_SAFE(cache->segments);
+}
+
+void DRW_particle_batch_cache_free(ParticleSystem *psys)
+{
+ particle_batch_cache_clear(psys);
+ MEM_SAFE_FREE(psys->batch_cache);
+}
+
+static void ensure_seg_pt_count(ParticleSystem *psys, ParticleBatchCache *cache)
+{
+ if (cache->pos == NULL || cache->segments == NULL) {
+ cache->segment_count = 0;
+ cache->point_count = 0;
+
+ if (psys->pathcache && (!psys->childcache || (psys->part->draw & PART_DRAW_PARENT))) {
+ for (int i = 0; i < psys->totpart; i++) {
+ ParticleCacheKey *path = psys->pathcache[i];
+
+ if (path->segments > 0) {
+ cache->segment_count += path->segments;
+ cache->point_count += path->segments + 1;
+ }
+ }
+ }
+
+ if (psys->childcache) {
+ int child_count = psys->totchild * psys->part->disp / 100;
+
+ for (int i = 0; i < child_count; i++) {
+ ParticleCacheKey *path = psys->childcache[i];
+
+ if (path->segments > 0) {
+ cache->segment_count += path->segments;
+ cache->point_count += path->segments + 1;
+ }
+ }
+ }
+ }
+}
+
+/* Gwn_Batch cache usage. */
+static void particle_batch_cache_ensure_pos_and_seg(ParticleSystem *psys, ModifierData *md, ParticleBatchCache *cache)
+{
+ if (cache->pos == NULL || cache->segments == NULL) {
+ int curr_point = 0;
+ ParticleSystemModifierData *psmd = (ParticleSystemModifierData *)md;
+
+ GWN_VERTBUF_DISCARD_SAFE(cache->pos);
+ GWN_INDEXBUF_DISCARD_SAFE(cache->segments);
+
+ static Gwn_VertFormat format = { 0 };
+ static struct { uint pos, tan, ind; } attr_id;
+ unsigned int *uv_id = NULL;
+ int uv_layers = 0;
+ MTFace **mtfaces = NULL;
+ float (**parent_uvs)[2] = NULL;
+ bool simple = psys->part->childtype == PART_CHILD_PARTICLES;
+
+ if (psmd) {
+ if (CustomData_has_layer(&psmd->dm_final->loopData, CD_MLOOPUV)) {
+ uv_layers = CustomData_number_of_layers(&psmd->dm_final->loopData, CD_MLOOPUV);
+ }
+ }
+
+ GWN_vertformat_clear(&format);
+
+ /* initialize vertex format */
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ attr_id.tan = GWN_vertformat_attr_add(&format, "nor", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ attr_id.ind = GWN_vertformat_attr_add(&format, "ind", GWN_COMP_I32, 1, GWN_FETCH_INT);
+
+ if (psmd) {
+ uv_id = MEM_mallocN(sizeof(*uv_id) * uv_layers, "UV attrib format");
+
+ for (int i = 0; i < uv_layers; i++) {
+ const char *name = CustomData_get_layer_name(&psmd->dm_final->loopData, CD_MLOOPUV, i);
+ char uuid[32];
+
+ BLI_snprintf(uuid, sizeof(uuid), "u%u", BLI_ghashutil_strhash_p(name));
+ uv_id[i] = GWN_vertformat_attr_add(&format, uuid, GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ }
+ }
+
+ cache->pos = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(cache->pos, cache->point_count);
+
+ Gwn_IndexBufBuilder elb;
+ GWN_indexbuf_init(&elb, GWN_PRIM_LINES, cache->segment_count, cache->point_count);
+
+ if (uv_layers) {
+ DM_ensure_tessface(psmd->dm_final);
+
+ mtfaces = MEM_mallocN(sizeof(*mtfaces) * uv_layers, "Faces UV layers");
+
+ for (int i = 0; i < uv_layers; i++) {
+ mtfaces[i] = (MTFace *)CustomData_get_layer_n(&psmd->dm_final->faceData, CD_MTFACE, i);
+ }
+ }
+
+ if (psys->pathcache && (!psys->childcache || (psys->part->draw & PART_DRAW_PARENT))) {
+ if (simple) {
+ parent_uvs = MEM_callocN(sizeof(*parent_uvs) * psys->totpart, "Parent particle UVs");
+ }
+
+ for (int i = 0; i < psys->totpart; i++) {
+ ParticleCacheKey *path = psys->pathcache[i];
+
+ if (path->segments > 0) {
+ float tangent[3];
+ int from = psmd ? psmd->psys->part->from : 0;
+ float (*uv)[2] = NULL;
+
+ if (psmd) {
+ uv = MEM_callocN(sizeof(*uv) * uv_layers, "Particle UVs");
+
+ if (simple) {
+ parent_uvs[i] = uv;
+ }
+ }
+
+ if (ELEM(from, PART_FROM_FACE, PART_FROM_VOLUME)) {
+ ParticleData *particle = &psys->particles[i];
+ int num = particle->num_dmcache;
+
+ if (num == DMCACHE_NOTFOUND) {
+ if (particle->num < psmd->dm_final->getNumTessFaces(psmd->dm_final)) {
+ num = particle->num;
+ }
+ }
+
+ if (num != DMCACHE_NOTFOUND) {
+ MFace *mface = psmd->dm_final->getTessFaceData(psmd->dm_final, num, CD_MFACE);
+
+ for (int j = 0; j < uv_layers; j++) {
+ psys_interpolate_uvs(mtfaces[j] + num, mface->v4, particle->fuv, uv[j]);
+ }
+ }
+ }
+
+ for (int j = 0; j < path->segments; j++) {
+ if (j == 0) {
+ sub_v3_v3v3(tangent, path[j + 1].co, path[j].co);
+ }
+ else {
+ sub_v3_v3v3(tangent, path[j + 1].co, path[j - 1].co);
+ }
+
+ GWN_vertbuf_attr_set(cache->pos, attr_id.pos, curr_point, path[j].co);
+ GWN_vertbuf_attr_set(cache->pos, attr_id.tan, curr_point, tangent);
+ GWN_vertbuf_attr_set(cache->pos, attr_id.ind, curr_point, &i);
+
+ if (psmd) {
+ for (int k = 0; k < uv_layers; k++) {
+ GWN_vertbuf_attr_set(cache->pos, uv_id[k], curr_point, uv[k]);
+ }
+ }
+
+ GWN_indexbuf_add_line_verts(&elb, curr_point, curr_point + 1);
+
+ curr_point++;
+ }
+
+ sub_v3_v3v3(tangent, path[path->segments].co, path[path->segments - 1].co);
+
+ GWN_vertbuf_attr_set(cache->pos, attr_id.pos, curr_point, path[path->segments].co);
+ GWN_vertbuf_attr_set(cache->pos, attr_id.tan, curr_point, tangent);
+ GWN_vertbuf_attr_set(cache->pos, attr_id.ind, curr_point, &i);
+
+ if (psmd) {
+ for (int k = 0; k < uv_layers; k++) {
+ GWN_vertbuf_attr_set(cache->pos, uv_id[k], curr_point, uv[k]);
+ }
+
+ if (!simple) {
+ MEM_freeN(uv);
+ }
+ }
+
+ curr_point++;
+ }
+ }
+ }
+
+ if (psys->childcache) {
+ int child_count = psys->totchild * psys->part->disp / 100;
+
+ if (simple && !parent_uvs) {
+ parent_uvs = MEM_callocN(sizeof(*parent_uvs) * psys->totpart, "Parent particle UVs");
+ }
+
+ for (int i = 0, x = psys->totpart; i < child_count; i++, x++) {
+ ParticleCacheKey *path = psys->childcache[i];
+ float tangent[3];
+
+ if (path->segments > 0) {
+ int from = psmd ? psmd->psys->part->from : 0;
+ float (*uv)[2] = NULL;
+
+ if (!simple) {
+ if (psmd) {
+ uv = MEM_callocN(sizeof(*uv) * uv_layers, "Particle UVs");
+ }
+
+ if (ELEM(from, PART_FROM_FACE, PART_FROM_VOLUME)) {
+ ChildParticle *particle = &psys->child[i];
+ int num = particle->num;
+
+ if (num != DMCACHE_NOTFOUND) {
+ MFace *mface = psmd->dm_final->getTessFaceData(psmd->dm_final, num, CD_MFACE);
+
+ for (int j = 0; j < uv_layers; j++) {
+ psys_interpolate_uvs(mtfaces[j] + num, mface->v4, particle->fuv, uv[j]);
+ }
+ }
+ }
+ }
+ else if (!parent_uvs[psys->child[i].parent]) {
+ if (psmd) {
+ parent_uvs[psys->child[i].parent] = MEM_callocN(sizeof(*uv) * uv_layers, "Particle UVs");
+ }
+
+ if (ELEM(from, PART_FROM_FACE, PART_FROM_VOLUME)) {
+ ParticleData *particle = &psys->particles[psys->child[i].parent];
+ int num = particle->num_dmcache;
+
+ if (num == DMCACHE_NOTFOUND) {
+ if (particle->num < psmd->dm_final->getNumTessFaces(psmd->dm_final)) {
+ num = particle->num;
+ }
+ }
+
+ if (num != DMCACHE_NOTFOUND) {
+ MFace *mface = psmd->dm_final->getTessFaceData(psmd->dm_final, num, CD_MFACE);
+
+ for (int j = 0; j < uv_layers; j++) {
+ psys_interpolate_uvs(mtfaces[j] + num, mface->v4, particle->fuv, parent_uvs[psys->child[i].parent][j]);
+ }
+ }
+ }
+ }
+
+ for (int j = 0; j < path->segments; j++) {
+ if (j == 0) {
+ sub_v3_v3v3(tangent, path[j + 1].co, path[j].co);
+ }
+ else {
+ sub_v3_v3v3(tangent, path[j + 1].co, path[j - 1].co);
+ }
+
+ GWN_vertbuf_attr_set(cache->pos, attr_id.pos, curr_point, path[j].co);
+ GWN_vertbuf_attr_set(cache->pos, attr_id.tan, curr_point, tangent);
+ GWN_vertbuf_attr_set(cache->pos, attr_id.ind, curr_point, &x);
+
+ if (psmd) {
+ for (int k = 0; k < uv_layers; k++) {
+ GWN_vertbuf_attr_set(cache->pos, uv_id[k], curr_point,
+ simple ? parent_uvs[psys->child[i].parent][k] : uv[k]);
+ }
+ }
+
+ GWN_indexbuf_add_line_verts(&elb, curr_point, curr_point + 1);
+
+ curr_point++;
+ }
+
+ sub_v3_v3v3(tangent, path[path->segments].co, path[path->segments - 1].co);
+
+ GWN_vertbuf_attr_set(cache->pos, attr_id.pos, curr_point, path[path->segments].co);
+ GWN_vertbuf_attr_set(cache->pos, attr_id.tan, curr_point, tangent);
+ GWN_vertbuf_attr_set(cache->pos, attr_id.ind, curr_point, &x);
+
+ if (psmd) {
+ for (int k = 0; k < uv_layers; k++) {
+ GWN_vertbuf_attr_set(cache->pos, uv_id[k], curr_point,
+ simple ? parent_uvs[psys->child[i].parent][k] : uv[k]);
+ }
+
+ if (!simple) {
+ MEM_freeN(uv);
+ }
+ }
+
+ curr_point++;
+ }
+ }
+ }
+
+ if (parent_uvs) {
+ for (int i = 0; i < psys->totpart; i++) {
+ MEM_SAFE_FREE(parent_uvs[i]);
+ }
+
+ MEM_freeN(parent_uvs);
+ }
+
+ if (uv_layers) {
+ MEM_freeN(mtfaces);
+ }
+
+ if (psmd) {
+ MEM_freeN(uv_id);
+ }
+
+ cache->segments = GWN_indexbuf_build(&elb);
+ }
+}
+
+static void particle_batch_cache_ensure_pos(ParticleSystem *psys, ParticleBatchCache *cache)
+{
+ if (cache->pos == NULL) {
+ static Gwn_VertFormat format = { 0 };
+ static unsigned pos_id, rot_id, val_id;
+ int i, curr_point;
+ ParticleData *pa;
+
+ GWN_VERTBUF_DISCARD_SAFE(cache->pos);
+ GWN_INDEXBUF_DISCARD_SAFE(cache->segments);
+
+ if (format.attrib_ct == 0) {
+ /* initialize vertex format */
+ pos_id = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ rot_id = GWN_vertformat_attr_add(&format, "rot", GWN_COMP_F32, 4, GWN_FETCH_FLOAT);
+ val_id = GWN_vertformat_attr_add(&format, "val", GWN_COMP_F32, 1, GWN_FETCH_FLOAT);
+ }
+
+ cache->pos = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(cache->pos, psys->totpart);
+
+ for (curr_point = 0, i = 0, pa = psys->particles; i < psys->totpart; i++, pa++) {
+ if (pa->state.time >= pa->time && pa->state.time < pa->dietime &&
+ !(pa->flag & (PARS_NO_DISP | PARS_UNEXIST)))
+ {
+ float val;
+
+ GWN_vertbuf_attr_set(cache->pos, pos_id, curr_point, pa->state.co);
+ GWN_vertbuf_attr_set(cache->pos, rot_id, curr_point, pa->state.rot);
+
+ switch (psys->part->draw_col) {
+ case PART_DRAW_COL_VEL:
+ val = len_v3(pa->state.vel) / psys->part->color_vec_max;
+ break;
+ case PART_DRAW_COL_ACC:
+ val = len_v3v3(pa->state.vel, pa->prev_state.vel) / ((pa->state.time - pa->prev_state.time) * psys->part->color_vec_max);
+ break;
+ default:
+ val = -1.0f;
+ break;
+ }
+
+ GWN_vertbuf_attr_set(cache->pos, val_id, curr_point, &val);
+
+ curr_point++;
+ }
+ }
+
+ if (curr_point != psys->totpart) {
+ GWN_vertbuf_data_resize(cache->pos, curr_point);
+ }
+ }
+}
+
+Gwn_Batch *DRW_particles_batch_cache_get_hair(ParticleSystem *psys, ModifierData *md)
+{
+ ParticleBatchCache *cache = particle_batch_cache_get(psys);
+
+ if (cache->hairs == NULL) {
+ ensure_seg_pt_count(psys, cache);
+ particle_batch_cache_ensure_pos_and_seg(psys, md, cache);
+ cache->hairs = GWN_batch_create(GWN_PRIM_LINES, cache->pos, cache->segments);
+ }
+
+ return cache->hairs;
+}
+
+Gwn_Batch *DRW_particles_batch_cache_get_dots(ParticleSystem *psys)
+{
+ ParticleBatchCache *cache = particle_batch_cache_get(psys);
+
+ if (cache->hairs == NULL) {
+ particle_batch_cache_ensure_pos(psys, cache);
+ cache->hairs = GWN_batch_create(GWN_PRIM_POINTS, cache->pos, NULL);
+ }
+
+ return cache->hairs;
+}
diff --git a/source/blender/draw/intern/draw_common.c b/source/blender/draw/intern/draw_common.c
new file mode 100644
index 00000000000..4bd138e80f5
--- /dev/null
+++ b/source/blender/draw/intern/draw_common.c
@@ -0,0 +1,474 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file blender/draw/intern/draw_common.c
+ * \ingroup draw
+ */
+
+#include "DRW_render.h"
+
+#include "GPU_shader.h"
+#include "GPU_texture.h"
+
+#include "UI_resources.h"
+
+#include "BKE_global.h"
+#include "BKE_colorband.h"
+
+#include "draw_common.h"
+
+#if 0
+#define UI_COLOR_RGB_FROM_U8(r, g, b, v4) \
+ ARRAY_SET_ITEMS(v4, (float)r / 255.0f, (float)g / 255.0f, (float)b / 255.0f, 1.0)
+#endif
+#define UI_COLOR_RGBA_FROM_U8(r, g, b, a, v4) \
+ ARRAY_SET_ITEMS(v4, (float)r / 255.0f, (float)g / 255.0f, (float)b / 255.0f, (float)a / 255.0f)
+
+/* Colors & Constant */
+GlobalsUboStorage ts;
+struct GPUUniformBuffer *globals_ubo = NULL;
+struct GPUTexture *globals_ramp = NULL;
+
+void DRW_globals_update(void)
+{
+ UI_GetThemeColor4fv(TH_WIRE, ts.colorWire);
+ UI_GetThemeColor4fv(TH_WIRE_EDIT, ts.colorWireEdit);
+ UI_GetThemeColor4fv(TH_ACTIVE, ts.colorActive);
+ UI_GetThemeColor4fv(TH_SELECT, ts.colorSelect);
+ UI_GetThemeColor4fv(TH_TRANSFORM, ts.colorTransform);
+ UI_GetThemeColor4fv(TH_GROUP_ACTIVE, ts.colorGroupActive);
+ UI_GetThemeColorShade4fv(TH_GROUP_ACTIVE, -25, ts.colorGroupSelect);
+ UI_GetThemeColor4fv(TH_GROUP, ts.colorGroup);
+ UI_COLOR_RGBA_FROM_U8(0x88, 0xFF, 0xFF, 155, ts.colorLibrarySelect);
+ UI_COLOR_RGBA_FROM_U8(0x55, 0xCC, 0xCC, 155, ts.colorLibrary);
+ UI_GetThemeColor4fv(TH_LAMP, ts.colorLamp);
+ UI_GetThemeColor4fv(TH_SPEAKER, ts.colorSpeaker);
+ UI_GetThemeColor4fv(TH_CAMERA, ts.colorCamera);
+ UI_GetThemeColor4fv(TH_EMPTY, ts.colorEmpty);
+ UI_GetThemeColor4fv(TH_VERTEX, ts.colorVertex);
+ UI_GetThemeColor4fv(TH_VERTEX_SELECT, ts.colorVertexSelect);
+ UI_GetThemeColor4fv(TH_EDITMESH_ACTIVE, ts.colorEditMeshActive);
+ UI_GetThemeColor4fv(TH_EDGE_SELECT, ts.colorEdgeSelect);
+ UI_GetThemeColor4fv(TH_EDGE_SEAM, ts.colorEdgeSeam);
+ UI_GetThemeColor4fv(TH_EDGE_SHARP, ts.colorEdgeSharp);
+ UI_GetThemeColor4fv(TH_EDGE_CREASE, ts.colorEdgeCrease);
+ UI_GetThemeColor4fv(TH_EDGE_BEVEL, ts.colorEdgeBWeight);
+ UI_GetThemeColor4fv(TH_EDGE_FACESEL, ts.colorEdgeFaceSelect);
+ UI_GetThemeColor4fv(TH_FACE, ts.colorFace);
+ UI_GetThemeColor4fv(TH_FACE_SELECT, ts.colorFaceSelect);
+ UI_GetThemeColor4fv(TH_NORMAL, ts.colorNormal);
+ UI_GetThemeColor4fv(TH_VNORMAL, ts.colorVNormal);
+ UI_GetThemeColor4fv(TH_LNORMAL, ts.colorLNormal);
+ UI_GetThemeColor4fv(TH_FACE_DOT, ts.colorFaceDot);
+ UI_GetThemeColor4fv(TH_BACK, ts.colorBackground);
+
+ /* Curve */
+ UI_GetThemeColor4fv(TH_HANDLE_FREE, ts.colorHandleFree);
+ UI_GetThemeColor4fv(TH_HANDLE_AUTO, ts.colorHandleAuto);
+ UI_GetThemeColor4fv(TH_HANDLE_VECT, ts.colorHandleVect);
+ UI_GetThemeColor4fv(TH_HANDLE_ALIGN, ts.colorHandleAlign);
+ UI_GetThemeColor4fv(TH_HANDLE_AUTOCLAMP, ts.colorHandleAutoclamp);
+ UI_GetThemeColor4fv(TH_HANDLE_SEL_FREE, ts.colorHandleSelFree);
+ UI_GetThemeColor4fv(TH_HANDLE_SEL_AUTO, ts.colorHandleSelAuto);
+ UI_GetThemeColor4fv(TH_HANDLE_SEL_VECT, ts.colorHandleSelVect);
+ UI_GetThemeColor4fv(TH_HANDLE_SEL_ALIGN, ts.colorHandleSelAlign);
+ UI_GetThemeColor4fv(TH_HANDLE_SEL_AUTOCLAMP, ts.colorHandleSelAutoclamp);
+ UI_GetThemeColor4fv(TH_NURB_ULINE, ts.colorNurbUline);
+ UI_GetThemeColor4fv(TH_NURB_SEL_ULINE, ts.colorNurbSelUline);
+ UI_GetThemeColor4fv(TH_ACTIVE_SPLINE, ts.colorActiveSpline);
+
+ /* Grid */
+ UI_GetThemeColorShade4fv(TH_GRID, 10, ts.colorGrid);
+ /* emphasise division lines lighter instead of darker, if background is darker than grid */
+ UI_GetThemeColorShade4fv(
+ TH_GRID,
+ (ts.colorGrid[0] + ts.colorGrid[1] + ts.colorGrid[2] + 0.12f >
+ ts.colorBackground[0] + ts.colorBackground[1] + ts.colorBackground[2]) ?
+ 20 : -10, ts.colorGridEmphasise);
+ /* Grid Axis */
+ UI_GetThemeColorBlendShade4fv(TH_GRID, TH_AXIS_X, 0.5f, -10, ts.colorGridAxisX);
+ UI_GetThemeColorBlendShade4fv(TH_GRID, TH_AXIS_Y, 0.5f, -10, ts.colorGridAxisY);
+ UI_GetThemeColorBlendShade4fv(TH_GRID, TH_AXIS_Z, 0.5f, -10, ts.colorGridAxisZ);
+
+ UI_GetThemeColorShadeAlpha4fv(TH_TRANSFORM, 0, -80, ts.colorDeselect);
+ UI_GetThemeColorShadeAlpha4fv(TH_WIRE, 0, -30, ts.colorOutline);
+ UI_GetThemeColorShadeAlpha4fv(TH_LAMP, 0, 255, ts.colorLampNoAlpha);
+
+ ts.sizeLampCenter = (U.obcenter_dia + 1.5f) * U.pixelsize;
+ ts.sizeLampCircle = U.pixelsize * 9.0f;
+ ts.sizeLampCircleShadow = ts.sizeLampCircle + U.pixelsize * 3.0f;
+
+ /* M_SQRT2 to be at least the same size of the old square */
+ ts.sizeVertex = ceilf(UI_GetThemeValuef(TH_VERTEX_SIZE) * (float)M_SQRT2 / 2.0f);
+ ts.sizeFaceDot = ceilf(UI_GetThemeValuef(TH_FACEDOT_SIZE) * (float)M_SQRT2);
+ ts.sizeEdge = 1.0f / 2.0f; /* TODO Theme */
+ ts.sizeEdgeFix = 0.5f + 2.0f * (2.0f * (MAX2(ts.sizeVertex, ts.sizeEdge)) * (float)M_SQRT1_2);
+
+ /* TODO Waiting for notifiers to invalidate cache */
+ if (globals_ubo) {
+ DRW_uniformbuffer_free(globals_ubo);
+ }
+
+ globals_ubo = DRW_uniformbuffer_create(sizeof(GlobalsUboStorage), &ts);
+
+ ColorBand ramp = {0};
+ float *colors;
+ int col_size;
+
+ ramp.tot = 3;
+ ramp.data[0].a = 1.0f;
+ ramp.data[0].b = 1.0f;
+ ramp.data[0].pos = 0.0f;
+ ramp.data[1].a = 1.0f;
+ ramp.data[1].g = 1.0f;
+ ramp.data[1].pos = 0.5f;
+ ramp.data[2].a = 1.0f;
+ ramp.data[2].r = 1.0f;
+ ramp.data[2].pos = 1.0f;
+
+ BKE_colorband_evaluate_table_rgba(&ramp, &colors, &col_size);
+
+ if (globals_ramp) {
+ GPU_texture_free(globals_ramp);
+ }
+ globals_ramp = GPU_texture_create_1D(col_size, colors, NULL);
+
+ MEM_freeN(colors);
+}
+
+/* ********************************* SHGROUP ************************************* */
+
+DRWShadingGroup *shgroup_dynlines_uniform_color(DRWPass *pass, float color[4])
+{
+ GPUShader *sh = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
+
+ DRWShadingGroup *grp = DRW_shgroup_line_batch_create(sh, pass);
+ DRW_shgroup_uniform_vec4(grp, "color", color, 1);
+
+ return grp;
+}
+
+DRWShadingGroup *shgroup_dynpoints_uniform_color(DRWPass *pass, float color[4], float *size)
+{
+ GPUShader *sh = GPU_shader_get_builtin_shader(GPU_SHADER_3D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA);
+
+ DRWShadingGroup *grp = DRW_shgroup_point_batch_create(sh, pass);
+ DRW_shgroup_uniform_vec4(grp, "color", color, 1);
+ DRW_shgroup_uniform_float(grp, "size", size, 1);
+ DRW_shgroup_state_enable(grp, DRW_STATE_POINT);
+
+ return grp;
+}
+
+DRWShadingGroup *shgroup_groundlines_uniform_color(DRWPass *pass, float color[4])
+{
+ GPUShader *sh = GPU_shader_get_builtin_shader(GPU_SHADER_3D_GROUNDLINE);
+
+ DRWShadingGroup *grp = DRW_shgroup_point_batch_create(sh, pass);
+ DRW_shgroup_uniform_vec4(grp, "color", color, 1);
+
+ return grp;
+}
+
+DRWShadingGroup *shgroup_groundpoints_uniform_color(DRWPass *pass, float color[4])
+{
+ GPUShader *sh = GPU_shader_get_builtin_shader(GPU_SHADER_3D_GROUNDPOINT);
+
+ DRWShadingGroup *grp = DRW_shgroup_point_batch_create(sh, pass);
+ DRW_shgroup_uniform_vec4(grp, "color", color, 1);
+ DRW_shgroup_state_enable(grp, DRW_STATE_POINT);
+
+ return grp;
+}
+
+DRWShadingGroup *shgroup_instance_screenspace(DRWPass *pass, struct Gwn_Batch *geom, float *size)
+{
+ GPUShader *sh = GPU_shader_get_builtin_shader(GPU_SHADER_3D_SCREENSPACE_VARIYING_COLOR);
+
+ DRWShadingGroup *grp = DRW_shgroup_instance_create(sh, pass, geom);
+ DRW_shgroup_attrib_float(grp, "world_pos", 3);
+ DRW_shgroup_attrib_float(grp, "color", 3);
+ DRW_shgroup_uniform_float(grp, "size", size, 1);
+ DRW_shgroup_uniform_float(grp, "pixel_size", DRW_viewport_pixelsize_get(), 1);
+ DRW_shgroup_uniform_vec3(grp, "screen_vecs[0]", DRW_viewport_screenvecs_get(), 2);
+ DRW_shgroup_state_enable(grp, DRW_STATE_STIPPLE_3);
+
+ return grp;
+}
+
+DRWShadingGroup *shgroup_instance_solid(DRWPass *pass, struct Gwn_Batch *geom)
+{
+ static float light[3] = {0.0f, 0.0f, 1.0f};
+ GPUShader *sh = GPU_shader_get_builtin_shader(GPU_SHADER_3D_OBJECTSPACE_SIMPLE_LIGHTING_VARIYING_COLOR);
+
+ DRWShadingGroup *grp = DRW_shgroup_instance_create(sh, pass, geom);
+ DRW_shgroup_attrib_float(grp, "InstanceModelMatrix", 16);
+ DRW_shgroup_attrib_float(grp, "color", 4);
+ DRW_shgroup_uniform_vec3(grp, "light", light, 1);
+
+ return grp;
+}
+
+DRWShadingGroup *shgroup_instance_wire(DRWPass *pass, struct Gwn_Batch *geom)
+{
+ GPUShader *sh = GPU_shader_get_builtin_shader(GPU_SHADER_3D_OBJECTSPACE_VARIYING_COLOR);
+
+ DRWShadingGroup *grp = DRW_shgroup_instance_create(sh, pass, geom);
+ DRW_shgroup_attrib_float(grp, "InstanceModelMatrix", 16);
+ DRW_shgroup_attrib_float(grp, "color", 4);
+
+ return grp;
+}
+
+DRWShadingGroup *shgroup_instance_screen_aligned(DRWPass *pass, struct Gwn_Batch *geom)
+{
+ GPUShader *sh = GPU_shader_get_builtin_shader(GPU_SHADER_3D_INSTANCE_SCREEN_ALIGNED);
+
+ DRWShadingGroup *grp = DRW_shgroup_instance_create(sh, pass, geom);
+ DRW_shgroup_attrib_float(grp, "color", 3);
+ DRW_shgroup_attrib_float(grp, "size", 1);
+ DRW_shgroup_attrib_float(grp, "InstanceModelMatrix", 16);
+ DRW_shgroup_uniform_vec3(grp, "screen_vecs[0]", DRW_viewport_screenvecs_get(), 2);
+
+ return grp;
+}
+
+DRWShadingGroup *shgroup_instance_axis_names(DRWPass *pass, struct Gwn_Batch *geom)
+{
+ GPUShader *sh = GPU_shader_get_builtin_shader(GPU_SHADER_3D_INSTANCE_SCREEN_ALIGNED_AXIS);
+
+ DRWShadingGroup *grp = DRW_shgroup_instance_create(sh, pass, geom);
+ DRW_shgroup_attrib_float(grp, "color", 3);
+ DRW_shgroup_attrib_float(grp, "size", 1);
+ DRW_shgroup_attrib_float(grp, "InstanceModelMatrix", 16);
+ DRW_shgroup_uniform_vec3(grp, "screen_vecs[0]", DRW_viewport_screenvecs_get(), 2);
+
+ return grp;
+}
+
+DRWShadingGroup *shgroup_instance_scaled(DRWPass *pass, struct Gwn_Batch *geom)
+{
+ GPUShader *sh_inst = GPU_shader_get_builtin_shader(GPU_SHADER_INSTANCE_VARIYING_COLOR_VARIYING_SCALE);
+
+ DRWShadingGroup *grp = DRW_shgroup_instance_create(sh_inst, pass, geom);
+ DRW_shgroup_attrib_float(grp, "color", 3);
+ DRW_shgroup_attrib_float(grp, "size", 3);
+ DRW_shgroup_attrib_float(grp, "InstanceModelMatrix", 16);
+
+ return grp;
+}
+
+DRWShadingGroup *shgroup_instance(DRWPass *pass, struct Gwn_Batch *geom)
+{
+ GPUShader *sh_inst = GPU_shader_get_builtin_shader(GPU_SHADER_INSTANCE_VARIYING_COLOR_VARIYING_SIZE);
+
+ DRWShadingGroup *grp = DRW_shgroup_instance_create(sh_inst, pass, geom);
+ DRW_shgroup_attrib_float(grp, "color", 3);
+ DRW_shgroup_attrib_float(grp, "size", 1);
+ DRW_shgroup_attrib_float(grp, "InstanceModelMatrix", 16);
+
+ return grp;
+}
+
+DRWShadingGroup *shgroup_camera_instance(DRWPass *pass, struct Gwn_Batch *geom)
+{
+ GPUShader *sh_inst = GPU_shader_get_builtin_shader(GPU_SHADER_CAMERA);
+
+ DRWShadingGroup *grp = DRW_shgroup_instance_create(sh_inst, pass, geom);
+ DRW_shgroup_attrib_float(grp, "color", 3);
+ DRW_shgroup_attrib_float(grp, "corners", 8);
+ DRW_shgroup_attrib_float(grp, "depth", 1);
+ DRW_shgroup_attrib_float(grp, "tria", 4);
+ DRW_shgroup_attrib_float(grp, "InstanceModelMatrix", 16);
+
+ return grp;
+}
+
+DRWShadingGroup *shgroup_distance_lines_instance(DRWPass *pass, struct Gwn_Batch *geom)
+{
+ GPUShader *sh_inst = GPU_shader_get_builtin_shader(GPU_SHADER_DISTANCE_LINES);
+ static float point_size = 4.0f;
+
+ DRWShadingGroup *grp = DRW_shgroup_instance_create(sh_inst, pass, geom);
+ DRW_shgroup_attrib_float(grp, "color", 3);
+ DRW_shgroup_attrib_float(grp, "start", 1);
+ DRW_shgroup_attrib_float(grp, "end", 1);
+ DRW_shgroup_attrib_float(grp, "InstanceModelMatrix", 16);
+ DRW_shgroup_uniform_float(grp, "size", &point_size, 1);
+
+ return grp;
+}
+
+DRWShadingGroup *shgroup_spot_instance(DRWPass *pass, struct Gwn_Batch *geom)
+{
+ GPUShader *sh_inst = GPU_shader_get_builtin_shader(GPU_SHADER_INSTANCE_EDGES_VARIYING_COLOR);
+ static const int True = true;
+ static const int False = false;
+
+ DRWShadingGroup *grp = DRW_shgroup_instance_create(sh_inst, pass, geom);
+ DRW_shgroup_attrib_float(grp, "color", 3);
+ DRW_shgroup_attrib_float(grp, "InstanceModelMatrix", 16);
+ DRW_shgroup_uniform_bool(grp, "drawFront", &False, 1);
+ DRW_shgroup_uniform_bool(grp, "drawBack", &False, 1);
+ DRW_shgroup_uniform_bool(grp, "drawSilhouette", &True, 1);
+
+ return grp;
+}
+
+DRWShadingGroup *shgroup_instance_bone_envelope_wire(DRWPass *pass, struct Gwn_Batch *geom)
+{
+ GPUShader *sh = GPU_shader_get_builtin_shader(GPU_SHADER_3D_INSTANCE_BONE_ENVELOPE_WIRE);
+
+ DRWShadingGroup *grp = DRW_shgroup_instance_create(sh, pass, geom);
+ DRW_shgroup_attrib_float(grp, "InstanceModelMatrix", 16);
+ DRW_shgroup_attrib_float(grp, "color", 4);
+ DRW_shgroup_attrib_float(grp, "radius_head", 1);
+ DRW_shgroup_attrib_float(grp, "radius_tail", 1);
+ DRW_shgroup_attrib_float(grp, "distance", 1);
+
+ return grp;
+}
+
+DRWShadingGroup *shgroup_instance_bone_envelope_solid(DRWPass *pass, struct Gwn_Batch *geom)
+{
+ static float light[3] = {0.0f, 0.0f, 1.0f};
+ GPUShader *sh = GPU_shader_get_builtin_shader(GPU_SHADER_3D_INSTANCE_BONE_ENVELOPE_SOLID);
+
+ DRWShadingGroup *grp = DRW_shgroup_instance_create(sh, pass, geom);
+ DRW_shgroup_attrib_float(grp, "InstanceModelMatrix", 16);
+ DRW_shgroup_attrib_float(grp, "color", 4);
+ DRW_shgroup_attrib_float(grp, "radius_head", 1);
+ DRW_shgroup_attrib_float(grp, "radius_tail", 1);
+ DRW_shgroup_uniform_vec3(grp, "light", light, 1);
+
+ return grp;
+}
+
+DRWShadingGroup *shgroup_instance_mball_helpers(DRWPass *pass, struct Gwn_Batch *geom)
+{
+ GPUShader *sh = GPU_shader_get_builtin_shader(GPU_SHADER_3D_INSTANCE_MBALL_HELPERS);
+
+ DRWShadingGroup *grp = DRW_shgroup_instance_create(sh, pass, geom);
+ DRW_shgroup_attrib_float(grp, "ScaleTranslationMatrix", 12);
+ DRW_shgroup_attrib_float(grp, "radius", 1);
+ DRW_shgroup_attrib_float(grp, "color", 3);
+ DRW_shgroup_uniform_vec3(grp, "screen_vecs[0]", DRW_viewport_screenvecs_get(), 2);
+
+ return grp;
+}
+
+
+/* ******************************************** COLOR UTILS *********************************************** */
+
+/* TODO FINISH */
+/**
+ * Get the wire color theme_id of an object based on it's state
+ * \a r_color is a way to get a pointer to the static color var associated
+ */
+int DRW_object_wire_theme_get(Object *ob, ViewLayer *view_layer, float **r_color)
+{
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ const bool is_edit = (draw_ctx->object_mode & OB_MODE_EDIT) != 0;
+ const bool active = (view_layer->basact && view_layer->basact->object == ob);
+ /* confusing logic here, there are 2 methods of setting the color
+ * 'colortab[colindex]' and 'theme_id', colindex overrides theme_id.
+ *
+ * note: no theme yet for 'colindex' */
+ int theme_id = is_edit ? TH_WIRE_EDIT : TH_WIRE;
+
+ if (//(scene->obedit == NULL) &&
+ ((G.moving & G_TRANSFORM_OBJ) != 0) &&
+ ((ob->base_flag & BASE_SELECTED) != 0))
+ {
+ theme_id = TH_TRANSFORM;
+ }
+ else {
+ /* Sets the 'theme_id' or fallback to wire */
+ if ((ob->flag & OB_FROMGROUP) != 0) {
+ if ((ob->base_flag & BASE_SELECTED) != 0) {
+ theme_id = TH_GROUP_ACTIVE;
+ }
+ else {
+ theme_id = TH_GROUP;
+ }
+ }
+ else {
+ if ((ob->base_flag & BASE_SELECTED) != 0) {
+ theme_id = (active) ? TH_ACTIVE : TH_SELECT;
+ }
+ else {
+ if (ob->type == OB_LAMP) theme_id = TH_LAMP;
+ else if (ob->type == OB_SPEAKER) theme_id = TH_SPEAKER;
+ else if (ob->type == OB_CAMERA) theme_id = TH_CAMERA;
+ else if (ob->type == OB_EMPTY) theme_id = TH_EMPTY;
+ /* fallback to TH_WIRE */
+ }
+ }
+ }
+
+ if (r_color != NULL) {
+ switch (theme_id) {
+ case TH_WIRE_EDIT: *r_color = ts.colorTransform; break;
+ case TH_ACTIVE: *r_color = ts.colorActive; break;
+ case TH_SELECT: *r_color = ts.colorSelect; break;
+ case TH_GROUP: *r_color = ts.colorGroup; break;
+ case TH_GROUP_ACTIVE: *r_color = ts.colorGroupActive; break;
+ case TH_TRANSFORM: *r_color = ts.colorTransform; break;
+ case OB_SPEAKER: *r_color = ts.colorSpeaker; break;
+ case OB_CAMERA: *r_color = ts.colorCamera; break;
+ case OB_EMPTY: *r_color = ts.colorEmpty; break;
+ case OB_LAMP: *r_color = ts.colorLamp; break;
+ default: *r_color = ts.colorWire; break;
+ }
+
+ /* uses darker active color for non-active + selected */
+ if ((theme_id == TH_GROUP_ACTIVE) && !active) {
+ *r_color = ts.colorGroupSelect;
+ }
+ }
+
+ return theme_id;
+}
+
+/* XXX This is utter shit, better find something more general */
+float *DRW_color_background_blend_get(int theme_id)
+{
+ static float colors[11][4];
+ float *ret;
+
+ switch (theme_id) {
+ case TH_WIRE_EDIT: ret = colors[0]; break;
+ case TH_ACTIVE: ret = colors[1]; break;
+ case TH_SELECT: ret = colors[2]; break;
+ case TH_GROUP: ret = colors[3]; break;
+ case TH_GROUP_ACTIVE: ret = colors[4]; break;
+ case TH_TRANSFORM: ret = colors[5]; break;
+ case OB_SPEAKER: ret = colors[6]; break;
+ case OB_CAMERA: ret = colors[7]; break;
+ case OB_EMPTY: ret = colors[8]; break;
+ case OB_LAMP: ret = colors[9]; break;
+ default: ret = colors[10]; break;
+ }
+
+ UI_GetThemeColorBlendShade4fv(theme_id, TH_BACK, 0.5, 0, ret);
+
+ return ret;
+}
diff --git a/source/blender/draw/intern/draw_common.h b/source/blender/draw/intern/draw_common.h
new file mode 100644
index 00000000000..7ff11f5f069
--- /dev/null
+++ b/source/blender/draw/intern/draw_common.h
@@ -0,0 +1,147 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file draw_common.h
+ * \ingroup draw
+ */
+
+#ifndef __DRAW_COMMON_H__
+#define __DRAW_COMMON_H__
+
+struct DRWPass;
+struct DRWShadingGroup;
+struct Gwn_Batch;
+struct Object;
+struct ViewLayer;
+
+/* Used as ubo but colors can be directly referenced as well */
+/* Keep in sync with: common_globals_lib.glsl (globalsBlock) */
+typedef struct GlobalsUboStorage {
+ /* UBOs data needs to be 16 byte aligned (size of vec4) */
+ float colorWire[4];
+ float colorWireEdit[4];
+ float colorActive[4];
+ float colorSelect[4];
+ float colorTransform[4];
+ float colorGroupActive[4];
+ float colorGroupSelect[4];
+ float colorGroup[4];
+ float colorLibrarySelect[4];
+ float colorLibrary[4];
+ float colorLamp[4];
+ float colorSpeaker[4];
+ float colorCamera[4];
+ float colorEmpty[4];
+ float colorVertex[4];
+ float colorVertexSelect[4];
+ float colorEditMeshActive[4];
+ float colorEdgeSelect[4];
+ float colorEdgeSeam[4];
+ float colorEdgeSharp[4];
+ float colorEdgeCrease[4];
+ float colorEdgeBWeight[4];
+ float colorEdgeFaceSelect[4];
+ float colorFace[4];
+ float colorFaceSelect[4];
+ float colorNormal[4];
+ float colorVNormal[4];
+ float colorLNormal[4];
+ float colorFaceDot[4];
+
+ float colorDeselect[4];
+ float colorOutline[4];
+ float colorLampNoAlpha[4];
+
+ float colorBackground[4];
+
+ float colorHandleFree[4];
+ float colorHandleAuto[4];
+ float colorHandleVect[4];
+ float colorHandleAlign[4];
+ float colorHandleAutoclamp[4];
+ float colorHandleSelFree[4];
+ float colorHandleSelAuto[4];
+ float colorHandleSelVect[4];
+ float colorHandleSelAlign[4];
+ float colorHandleSelAutoclamp[4];
+ float colorNurbUline[4];
+ float colorNurbSelUline[4];
+ float colorActiveSpline[4];
+
+ float colorGrid[4];
+ float colorGridEmphasise[4];
+ float colorGridAxisX[4];
+ float colorGridAxisY[4];
+ float colorGridAxisZ[4];
+
+ /* Pack individual float at the end of the buffer to avoid alignement errors */
+ float sizeLampCenter, sizeLampCircle, sizeLampCircleShadow;
+ float sizeVertex, sizeEdge, sizeEdgeFix, sizeFaceDot;
+ float gridDistance, gridResolution, gridSubdivisions, gridScale;
+} GlobalsUboStorage;
+/* Keep in sync with globalsBlock in shaders */
+
+void DRW_globals_update(void);
+
+struct DRWShadingGroup *shgroup_dynlines_uniform_color(struct DRWPass *pass, float color[4]);
+struct DRWShadingGroup *shgroup_dynpoints_uniform_color(struct DRWPass *pass, float color[4], float *size);
+struct DRWShadingGroup *shgroup_groundlines_uniform_color(struct DRWPass *pass, float color[4]);
+struct DRWShadingGroup *shgroup_groundpoints_uniform_color(struct DRWPass *pass, float color[4]);
+struct DRWShadingGroup *shgroup_instance_screenspace(struct DRWPass *pass, struct Gwn_Batch *geom, float *size);
+struct DRWShadingGroup *shgroup_instance_solid(struct DRWPass *pass, struct Gwn_Batch *geom);
+struct DRWShadingGroup *shgroup_instance_wire(struct DRWPass *pass, struct Gwn_Batch *geom);
+struct DRWShadingGroup *shgroup_instance_screen_aligned(struct DRWPass *pass, struct Gwn_Batch *geom);
+struct DRWShadingGroup *shgroup_instance_axis_names(struct DRWPass *pass, struct Gwn_Batch *geom);
+struct DRWShadingGroup *shgroup_instance_image_plane(struct DRWPass *pass, struct Gwn_Batch *geom);
+struct DRWShadingGroup *shgroup_instance_scaled(struct DRWPass *pass, struct Gwn_Batch *geom);
+struct DRWShadingGroup *shgroup_instance(struct DRWPass *pass, struct Gwn_Batch *geom);
+struct DRWShadingGroup *shgroup_camera_instance(struct DRWPass *pass, struct Gwn_Batch *geom);
+struct DRWShadingGroup *shgroup_distance_lines_instance(struct DRWPass *pass, struct Gwn_Batch *geom);
+struct DRWShadingGroup *shgroup_spot_instance(struct DRWPass *pass, struct Gwn_Batch *geom);
+struct DRWShadingGroup *shgroup_instance_bone_envelope_wire(struct DRWPass *pass, struct Gwn_Batch *geom);
+struct DRWShadingGroup *shgroup_instance_bone_envelope_solid(struct DRWPass *pass, struct Gwn_Batch *geom);
+struct DRWShadingGroup *shgroup_instance_mball_helpers(struct DRWPass *pass, struct Gwn_Batch *geom);
+
+int DRW_object_wire_theme_get(
+ struct Object *ob, struct ViewLayer *view_layer, float **r_color);
+float *DRW_color_background_blend_get(int theme_id);
+
+/* draw_armature.c */
+void DRW_shgroup_armature_object(
+ struct Object *ob, struct ViewLayer *view_layer,
+ struct DRWPass *pass_bone_solid, struct DRWPass *pass_bone_wire, struct DRWPass *pass_bone_envelope,
+ struct DRWShadingGroup *shgrp_relationship_lines);
+
+void DRW_shgroup_armature_pose(
+ struct Object *ob,
+ struct DRWPass *pass_bone_solid, struct DRWPass *pass_bone_wire, struct DRWPass *pass_bone_envelope,
+ struct DRWShadingGroup *shgrp_relationship_lines);
+
+void DRW_shgroup_armature_edit(
+ struct Object *ob,
+ struct DRWPass *pass_bone_solid, struct DRWPass *pass_bone_wire, struct DRWPass *pass_bone_envelope,
+ struct DRWShadingGroup *shgrp_relationship_lines);
+
+/* pose_mode.c */
+bool DRW_pose_mode_armature(
+ struct Object *ob, struct Object *active_ob);
+
+#endif /* __DRAW_COMMON_H__ */
diff --git a/source/blender/draw/intern/draw_instance_data.c b/source/blender/draw/intern/draw_instance_data.c
new file mode 100644
index 00000000000..7f3bd246818
--- /dev/null
+++ b/source/blender/draw/intern/draw_instance_data.c
@@ -0,0 +1,224 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file blender/draw/intern/draw_instance_data.c
+ * \ingroup draw
+ */
+
+/**
+ * DRW Instance Data Manager
+ * This is a special memory manager that keeps memory blocks ready to send as vbo data in one continuous allocation.
+ * This way we avoid feeding gawain each instance data one by one and unecessary memcpy.
+ * Since we loose which memory block was used each DRWShadingGroup we need to redistribute them in the same order/size
+ * to avoid to realloc each frame.
+ * This is why DRWInstanceDatas are sorted in a list for each different data size.
+ **/
+
+#include "draw_instance_data.h"
+#include "DRW_engine.h"
+
+#include "MEM_guardedalloc.h"
+#include "BLI_utildefines.h"
+
+struct DRWInstanceData {
+ struct DRWInstanceData *next;
+ bool used; /* If this data is used or not. */
+ size_t chunk_size; /* Current size of the whole chunk. */
+ size_t data_size; /* Size of one instance data. */
+ size_t instance_group; /* How many instance to allocate at a time. */
+ size_t offset; /* Offset to the next instance data. */
+ float *memchunk; /* Should be float no matter what. */
+};
+
+struct DRWInstanceDataList {
+ /* Linked lists for all possible data pool size */
+ /* Not entirely sure if we should separate them in the first place.
+ * This is done to minimize the reattribution misses. */
+ DRWInstanceData *idata_head[MAX_INSTANCE_DATA_SIZE];
+ DRWInstanceData *idata_tail[MAX_INSTANCE_DATA_SIZE];
+};
+
+/* -------------------------------------------------------------------- */
+
+/** \name Instance Data (DRWInstanceData)
+ * \{ */
+
+static DRWInstanceData *drw_instance_data_create(
+ DRWInstanceDataList *idatalist, unsigned int attrib_size, unsigned int instance_group)
+{
+ DRWInstanceData *idata = MEM_mallocN(sizeof(DRWInstanceData), "DRWInstanceData");
+ idata->next = NULL;
+ idata->used = true;
+ idata->data_size = attrib_size;
+ idata->instance_group = instance_group;
+ idata->chunk_size = idata->data_size * instance_group;
+ idata->offset = 0;
+ idata->memchunk = MEM_mallocN(idata->chunk_size * sizeof(float), "DRWInstanceData memchunk");
+
+ BLI_assert(attrib_size > 0);
+
+ /* Push to linked list. */
+ if (idatalist->idata_head[attrib_size-1] == NULL) {
+ idatalist->idata_head[attrib_size-1] = idata;
+ }
+ else {
+ idatalist->idata_tail[attrib_size-1]->next = idata;
+ }
+ idatalist->idata_tail[attrib_size-1] = idata;
+
+ return idata;
+}
+
+static void DRW_instance_data_free(DRWInstanceData *idata)
+{
+ MEM_freeN(idata->memchunk);
+}
+
+/**
+ * Return a pointer to the next instance data space.
+ * DO NOT SAVE/REUSE THIS POINTER after the next call
+ * to this function since the chunk may have been
+ * reallocated.
+ **/
+void *DRW_instance_data_next(DRWInstanceData *idata)
+{
+ idata->offset += idata->data_size;
+
+ /* Check if chunk is large enough. realloc otherwise. */
+ if (idata->offset > idata->chunk_size) {
+ idata->chunk_size += idata->data_size * idata->instance_group;
+ idata->memchunk = MEM_reallocN(idata->memchunk, idata->chunk_size * sizeof(float));
+ }
+
+ return idata->memchunk + (idata->offset - idata->data_size);
+}
+
+void *DRW_instance_data_get(DRWInstanceData *idata)
+{
+ return (void *)idata->memchunk;
+}
+
+DRWInstanceData *DRW_instance_data_request(
+ DRWInstanceDataList *idatalist, unsigned int attrib_size, unsigned int instance_group)
+{
+ BLI_assert(attrib_size > 0 && attrib_size <= MAX_INSTANCE_DATA_SIZE);
+
+ DRWInstanceData *idata = idatalist->idata_head[attrib_size - 1];
+
+ /* Search for an unused data chunk. */
+ for (; idata; idata = idata->next) {
+ if (idata->used == false) {
+ idata->used = true;
+ return idata;
+ }
+ }
+
+ return drw_instance_data_create(idatalist, attrib_size, instance_group);
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+
+/** \name Instance Data List (DRWInstanceDataList)
+ * \{ */
+
+DRWInstanceDataList *DRW_instance_data_list_create(void)
+{
+ return MEM_callocN(sizeof(DRWInstanceDataList), "DRWInstanceDataList");
+}
+
+void DRW_instance_data_list_free(DRWInstanceDataList *idatalist)
+{
+ DRWInstanceData *idata, *next_idata;
+
+ for (int i = 0; i < MAX_INSTANCE_DATA_SIZE; ++i) {
+ for (idata = idatalist->idata_head[i]; idata; idata = next_idata) {
+ next_idata = idata->next;
+ DRW_instance_data_free(idata);
+ MEM_freeN(idata);
+ }
+ idatalist->idata_head[i] = NULL;
+ idatalist->idata_tail[i] = NULL;
+ }
+}
+
+void DRW_instance_data_list_reset(DRWInstanceDataList *idatalist)
+{
+ DRWInstanceData *idata;
+
+ for (int i = 0; i < MAX_INSTANCE_DATA_SIZE; ++i) {
+ for (idata = idatalist->idata_head[i]; idata; idata = idata->next) {
+ idata->used = false;
+ idata->offset = 0;
+ }
+ }
+}
+
+void DRW_instance_data_list_free_unused(DRWInstanceDataList *idatalist)
+{
+ DRWInstanceData *idata, *next_idata;
+
+ /* Remove unused data blocks and sanitize each list. */
+ for (int i = 0; i < MAX_INSTANCE_DATA_SIZE; ++i) {
+ idatalist->idata_tail[i] = NULL;
+ for (idata = idatalist->idata_head[i]; idata; idata = next_idata) {
+ next_idata = idata->next;
+ if (idata->used == false) {
+ if (idatalist->idata_head[i] == idata) {
+ idatalist->idata_head[i] = next_idata;
+ }
+ else {
+ /* idatalist->idata_tail[i] is garanteed not to be null in this case. */
+ idatalist->idata_tail[i]->next = next_idata;
+ }
+ DRW_instance_data_free(idata);
+ MEM_freeN(idata);
+ }
+ else {
+ if (idatalist->idata_tail[i] != NULL) {
+ idatalist->idata_tail[i]->next = idata;
+ }
+ idatalist->idata_tail[i] = idata;
+ }
+ }
+ }
+}
+
+void DRW_instance_data_list_resize(DRWInstanceDataList *idatalist)
+{
+ DRWInstanceData *idata;
+
+ for (int i = 0; i < MAX_INSTANCE_DATA_SIZE; ++i) {
+ for (idata = idatalist->idata_head[i]; idata; idata = idata->next) {
+ /* Rounding up to nearest chunk size to compare. */
+ size_t fac = idata->data_size * idata->instance_group;
+ size_t tmp = idata->offset + fac - 1;
+ size_t rounded_offset = tmp - tmp % fac;
+ if (rounded_offset < idata->chunk_size) {
+ idata->chunk_size = rounded_offset;
+ idata->memchunk = MEM_reallocN(idata->memchunk, idata->chunk_size * sizeof(float));
+ }
+ }
+ }
+}
+
+/** \} */
diff --git a/source/blender/draw/intern/draw_instance_data.h b/source/blender/draw/intern/draw_instance_data.h
new file mode 100644
index 00000000000..c8376189396
--- /dev/null
+++ b/source/blender/draw/intern/draw_instance_data.h
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file draw_instance_data.h
+ * \ingroup draw
+ */
+
+#ifndef __DRAW_INSTANCE_DATA_H__
+#define __DRAW_INSTANCE_DATA_H__
+
+#define MAX_INSTANCE_DATA_SIZE 42 /* Can be adjusted for more */
+
+typedef struct DRWInstanceData DRWInstanceData;
+typedef struct DRWInstanceDataList DRWInstanceDataList;
+
+void *DRW_instance_data_next(DRWInstanceData *idata);
+void *DRW_instance_data_get(DRWInstanceData *idata);
+DRWInstanceData *DRW_instance_data_request(
+ DRWInstanceDataList *idatalist, unsigned int attrib_size, unsigned int instance_group);
+
+void DRW_instance_data_list_reset(DRWInstanceDataList *idatalist);
+void DRW_instance_data_list_free_unused(DRWInstanceDataList *idatalist);
+void DRW_instance_data_list_resize(DRWInstanceDataList *idatalist);
+
+#endif /* __DRAW_INSTANCE_DATA_H__ */
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
new file mode 100644
index 00000000000..45ad9853d20
--- /dev/null
+++ b/source/blender/draw/intern/draw_manager.c
@@ -0,0 +1,4140 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file blender/draw/intern/draw_manager.c
+ * \ingroup draw
+ */
+
+#include <stdio.h>
+
+#include "BLI_listbase.h"
+#include "BLI_mempool.h"
+#include "BLI_rect.h"
+#include "BLI_string.h"
+#include "BLI_string_utils.h"
+
+#include "BIF_glutil.h"
+
+#include "BKE_curve.h"
+#include "BKE_global.h"
+#include "BKE_mesh.h"
+#include "BKE_object.h"
+#include "BKE_pbvh.h"
+#include "BKE_paint.h"
+#include "BKE_workspace.h"
+
+#include "BLT_translation.h"
+#include "BLF_api.h"
+
+#include "DRW_engine.h"
+#include "DRW_render.h"
+
+#include "DNA_camera_types.h"
+#include "DNA_curve_types.h"
+#include "DNA_view3d_types.h"
+#include "DNA_screen_types.h"
+#include "DNA_mesh_types.h"
+#include "DNA_meshdata_types.h"
+#include "DNA_meta_types.h"
+
+#include "ED_space_api.h"
+#include "ED_screen.h"
+
+#include "intern/gpu_codegen.h"
+#include "GPU_batch.h"
+#include "GPU_draw.h"
+#include "GPU_extensions.h"
+#include "GPU_framebuffer.h"
+#include "GPU_immediate.h"
+#include "GPU_lamp.h"
+#include "GPU_material.h"
+#include "GPU_shader.h"
+#include "GPU_texture.h"
+#include "GPU_uniformbuffer.h"
+#include "GPU_viewport.h"
+#include "GPU_matrix.h"
+
+#include "IMB_colormanagement.h"
+
+#include "RE_engine.h"
+#include "RE_pipeline.h"
+
+#include "UI_interface.h"
+#include "UI_resources.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "draw_manager_text.h"
+#include "draw_manager_profiling.h"
+
+/* only for callbacks */
+#include "draw_cache_impl.h"
+
+#include "draw_instance_data.h"
+
+#include "draw_mode_engines.h"
+#include "engines/clay/clay_engine.h"
+#include "engines/eevee/eevee_engine.h"
+#include "engines/basic/basic_engine.h"
+#include "engines/external/external_engine.h"
+
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_query.h"
+
+/* -------------------------------------------------------------------- */
+/** \name Local Features
+ * \{ */
+
+#define USE_PROFILE
+
+#ifdef USE_PROFILE
+# include "PIL_time.h"
+
+# define PROFILE_TIMER_FALLOFF 0.1
+
+# define PROFILE_START(time_start) \
+ double time_start = PIL_check_seconds_timer();
+
+# define PROFILE_END_ACCUM(time_accum, time_start) { \
+ time_accum += (PIL_check_seconds_timer() - time_start) * 1e3; \
+} ((void)0)
+
+/* exp average */
+# define PROFILE_END_UPDATE(time_update, time_start) { \
+ double _time_delta = (PIL_check_seconds_timer() - time_start) * 1e3; \
+ time_update = (time_update * (1.0 - PROFILE_TIMER_FALLOFF)) + \
+ (_time_delta * PROFILE_TIMER_FALLOFF); \
+} ((void)0)
+
+#else /* USE_PROFILE */
+
+# define PROFILE_START(time_start) ((void)0)
+# define PROFILE_END_ACCUM(time_accum, time_start) ((void)0)
+# define PROFILE_END_UPDATE(time_update, time_start) ((void)0)
+
+#endif /* USE_PROFILE */
+
+
+/* Use draw manager to call GPU_select, see: DRW_draw_select_loop */
+#define USE_GPU_SELECT
+
+#ifdef USE_GPU_SELECT
+# include "ED_view3d.h"
+# include "ED_armature.h"
+# include "GPU_select.h"
+#endif
+
+/** \} */
+
+
+#define MAX_ATTRIB_NAME 32
+#define MAX_ATTRIB_COUNT 6 /* Can be adjusted for more */
+#define MAX_PASS_NAME 32
+#define MAX_CLIP_PLANES 6 /* GL_MAX_CLIP_PLANES is at least 6 */
+
+extern char datatoc_gpu_shader_2D_vert_glsl[];
+extern char datatoc_gpu_shader_3D_vert_glsl[];
+extern char datatoc_gpu_shader_fullscreen_vert_glsl[];
+
+/* Prototypes. */
+static void drw_engines_enable_external(void);
+
+/* Structures */
+typedef enum {
+ DRW_UNIFORM_BOOL,
+ DRW_UNIFORM_SHORT_TO_INT,
+ DRW_UNIFORM_SHORT_TO_FLOAT,
+ DRW_UNIFORM_INT,
+ DRW_UNIFORM_FLOAT,
+ DRW_UNIFORM_TEXTURE,
+ DRW_UNIFORM_BUFFER,
+ DRW_UNIFORM_MAT3,
+ DRW_UNIFORM_MAT4,
+ DRW_UNIFORM_BLOCK
+} DRWUniformType;
+
+typedef enum {
+ DRW_ATTRIB_INT,
+ DRW_ATTRIB_FLOAT,
+} DRWAttribType;
+
+#define MAX_UNIFORM_DATA_SIZE 16
+
+struct DRWUniform {
+ struct DRWUniform *next;
+ int location;
+ char type; /* DRWUniformType */
+ char length; /* cannot be more than 16 */
+ char arraysize; /* cannot be more than 16 too */
+ const void *value;
+};
+
+struct DRWInterface {
+ DRWUniform *uniforms; /* DRWUniform, single-linked list */
+ int attribs_count;
+ int attribs_stride;
+ int attribs_size[16];
+ int attribs_loc[16];
+ /* matrices locations */
+ int model;
+ int modelinverse;
+ int modelview;
+ int modelviewinverse;
+ int projection;
+ int projectioninverse;
+ int view;
+ int viewinverse;
+ int modelviewprojection;
+ int viewprojection;
+ int viewprojectioninverse;
+ int normal;
+ int worldnormal;
+ int camtexfac;
+ int orcotexfac;
+ int eye;
+ int clipplanes;
+ /* Dynamic batch */
+ Gwn_Batch *instance_batch; /* contains instances attributes */
+ GLuint instance_vbo; /* same as instance_batch but generated from DRWCalls */
+ struct DRWInstanceData *inst_data;
+#ifdef USE_GPU_SELECT
+ struct DRWInstanceData *inst_selectid;
+ /* Override for single object instances. */
+ int override_selectid;
+#endif
+ int instance_count;
+ Gwn_VertFormat vbo_format;
+};
+
+struct DRWPass {
+ /* Single linked list with last member to append */
+ DRWShadingGroup *shgroups;
+ DRWShadingGroup *shgroups_last;
+
+ DRWState state;
+ char name[MAX_PASS_NAME];
+};
+
+typedef struct DRWCallHeader {
+ void *prev;
+
+#ifdef USE_GPU_SELECT
+ int select_id;
+#endif
+ uchar type;
+} DRWCallHeader;
+
+typedef struct DRWCall {
+ DRWCallHeader head;
+
+ float obmat[4][4];
+ Gwn_Batch *geometry;
+
+ Object *ob; /* Optional */
+ ID *ob_data; /* Optional. */
+} DRWCall;
+
+typedef struct DRWCallGenerate {
+ DRWCallHeader head;
+
+ float obmat[4][4];
+
+ DRWCallGenerateFn *geometry_fn;
+ void *user_data;
+} DRWCallGenerate;
+
+struct DRWShadingGroup {
+ struct DRWShadingGroup *next;
+
+ GPUShader *shader; /* Shader to bind */
+ DRWInterface interface; /* Uniforms pointers */
+
+ /* DRWCall or DRWCallDynamic depending of type */
+ void *calls;
+ void *calls_first; /* To be able to traverse the list in the order of addition */
+
+ DRWState state_extra; /* State changes for this batch only (or'd with the pass's state) */
+ DRWState state_extra_disable; /* State changes for this batch only (and'd with the pass's state) */
+ unsigned int stencil_mask; /* Stencil mask to use for stencil test / write operations */
+ int type;
+
+ ID *instance_data; /* Object->data to instance */
+ Gwn_Batch *instance_geom; /* Geometry to instance */
+ Gwn_Batch *batch_geom; /* Result of call batching */
+
+#ifdef USE_GPU_SELECT
+ /* backlink to pass we're in */
+ DRWPass *pass_parent;
+#endif
+};
+
+/* Used by DRWShadingGroup.type */
+enum {
+ DRW_SHG_NORMAL,
+ DRW_SHG_POINT_BATCH,
+ DRW_SHG_LINE_BATCH,
+ DRW_SHG_TRIANGLE_BATCH,
+ DRW_SHG_INSTANCE,
+};
+
+/* Used by DRWCall.type */
+enum {
+ /* A single batch */
+ DRW_CALL_SINGLE,
+ /* Uses a callback to draw with any number of batches. */
+ DRW_CALL_GENERATE,
+ /* Arbitrary number of multiple args. */
+ DRW_CALL_DYNAMIC,
+};
+
+/** Render State: No persistent data between draw calls. */
+static struct DRWGlobalState {
+ /* Cache generation */
+ ViewportMemoryPool *vmempool;
+ DRWUniform *last_uniform;
+ DRWCall *last_call;
+ DRWCallGenerate *last_callgenerate;
+ DRWShadingGroup *last_shgroup;
+ DRWInstanceDataList *idatalist;
+ DRWInstanceData *common_instance_data[MAX_INSTANCE_DATA_SIZE];
+
+ /* Rendering state */
+ GPUShader *shader;
+
+ /* Managed by `DRW_state_set`, `DRW_state_reset` */
+ DRWState state;
+ unsigned int stencil_mask;
+
+ /* Per viewport */
+ GPUViewport *viewport;
+ struct GPUFrameBuffer *default_framebuffer;
+ float size[2];
+ float screenvecs[2][3];
+ float pixsize;
+
+ GLenum backface, frontface;
+
+ /* Clip planes */
+ int num_clip_planes;
+ float clip_planes_eq[MAX_CLIP_PLANES][4];
+
+ struct {
+ unsigned int is_select : 1;
+ unsigned int is_depth : 1;
+ unsigned int is_image_render : 1;
+ unsigned int is_scene_render : 1;
+ unsigned int draw_background : 1;
+ } options;
+
+ /* Current rendering context */
+ DRWContextState draw_ctx;
+
+ /* Convenience pointer to text_store owned by the viewport */
+ struct DRWTextStore **text_store_p;
+
+ ListBase enabled_engines; /* RenderEngineType */
+
+ /* Profiling */
+ double cache_time;
+} DST = {NULL};
+
+/** GPU Resource State: Memory storage between drawing. */
+static struct DRWResourceState {
+ GPUTexture **bound_texs;
+
+ bool *bound_tex_slots;
+
+ int bind_tex_inc;
+ int bind_ubo_inc;
+} RST = {NULL};
+
+static struct DRWMatrixOveride {
+ float mat[6][4][4];
+ bool override[6];
+} viewport_matrix_override = {{{{0}}}};
+
+ListBase DRW_engines = {NULL, NULL};
+
+#ifdef USE_GPU_SELECT
+static unsigned int g_DRW_select_id = (unsigned int)-1;
+
+void DRW_select_load_id(unsigned int id)
+{
+ BLI_assert(G.f & G_PICKSEL);
+ g_DRW_select_id = id;
+}
+#endif
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Textures (DRW_texture)
+ * \{ */
+
+static void drw_texture_get_format(
+ DRWTextureFormat format,
+ GPUTextureFormat *r_data_type, int *r_channels)
+{
+ switch (format) {
+ case DRW_TEX_RGBA_8: *r_data_type = GPU_RGBA8; break;
+ case DRW_TEX_RGBA_16: *r_data_type = GPU_RGBA16F; break;
+ case DRW_TEX_RGB_16: *r_data_type = GPU_RGB16F; break;
+ case DRW_TEX_RGB_11_11_10: *r_data_type = GPU_R11F_G11F_B10F; break;
+ case DRW_TEX_RG_8: *r_data_type = GPU_RG8; break;
+ case DRW_TEX_RG_16: *r_data_type = GPU_RG16F; break;
+ case DRW_TEX_RG_16I: *r_data_type = GPU_RG16I; break;
+ case DRW_TEX_RG_32: *r_data_type = GPU_RG32F; break;
+ case DRW_TEX_R_8: *r_data_type = GPU_R8; break;
+ case DRW_TEX_R_16: *r_data_type = GPU_R16F; break;
+ case DRW_TEX_R_32: *r_data_type = GPU_R32F; break;
+#if 0
+ case DRW_TEX_RGBA_32: *r_data_type = GPU_RGBA32F; break;
+ case DRW_TEX_RGB_8: *r_data_type = GPU_RGB8; break;
+ case DRW_TEX_RGB_32: *r_data_type = GPU_RGB32F; break;
+#endif
+ case DRW_TEX_DEPTH_16: *r_data_type = GPU_DEPTH_COMPONENT16; break;
+ case DRW_TEX_DEPTH_24: *r_data_type = GPU_DEPTH_COMPONENT24; break;
+ case DRW_TEX_DEPTH_24_STENCIL_8: *r_data_type = GPU_DEPTH24_STENCIL8; break;
+ case DRW_TEX_DEPTH_32: *r_data_type = GPU_DEPTH_COMPONENT32F; break;
+ default :
+ /* file type not supported you must uncomment it from above */
+ BLI_assert(false);
+ break;
+ }
+
+ switch (format) {
+ case DRW_TEX_RGBA_8:
+ case DRW_TEX_RGBA_16:
+ case DRW_TEX_RGBA_32:
+ *r_channels = 4;
+ break;
+ case DRW_TEX_RGB_8:
+ case DRW_TEX_RGB_16:
+ case DRW_TEX_RGB_32:
+ case DRW_TEX_RGB_11_11_10:
+ *r_channels = 3;
+ break;
+ case DRW_TEX_RG_8:
+ case DRW_TEX_RG_16:
+ case DRW_TEX_RG_16I:
+ case DRW_TEX_RG_32:
+ *r_channels = 2;
+ break;
+ default:
+ *r_channels = 1;
+ break;
+ }
+}
+
+static void drw_texture_set_parameters(GPUTexture *tex, DRWTextureFlag flags)
+{
+ GPU_texture_bind(tex, 0);
+ if (flags & DRW_TEX_MIPMAP) {
+ GPU_texture_mipmap_mode(tex, true, flags & DRW_TEX_FILTER);
+ DRW_texture_generate_mipmaps(tex);
+ }
+ else {
+ GPU_texture_filter_mode(tex, flags & DRW_TEX_FILTER);
+ }
+ GPU_texture_wrap_mode(tex, flags & DRW_TEX_WRAP);
+ GPU_texture_compare_mode(tex, flags & DRW_TEX_COMPARE);
+ GPU_texture_unbind(tex);
+}
+
+GPUTexture *DRW_texture_create_1D(int w, DRWTextureFormat format, DRWTextureFlag flags, const float *fpixels)
+{
+ GPUTexture *tex;
+ GPUTextureFormat data_type;
+ int channels;
+
+ drw_texture_get_format(format, &data_type, &channels);
+ tex = GPU_texture_create_1D_custom(w, channels, data_type, fpixels, NULL);
+ drw_texture_set_parameters(tex, flags);
+
+ return tex;
+}
+
+GPUTexture *DRW_texture_create_2D(int w, int h, DRWTextureFormat format, DRWTextureFlag flags, const float *fpixels)
+{
+ GPUTexture *tex;
+ GPUTextureFormat data_type;
+ int channels;
+
+ drw_texture_get_format(format, &data_type, &channels);
+ tex = GPU_texture_create_2D_custom(w, h, channels, data_type, fpixels, NULL);
+ drw_texture_set_parameters(tex, flags);
+
+ return tex;
+}
+
+GPUTexture *DRW_texture_create_2D_array(
+ int w, int h, int d, DRWTextureFormat format, DRWTextureFlag flags, const float *fpixels)
+{
+ GPUTexture *tex;
+ GPUTextureFormat data_type;
+ int channels;
+
+ drw_texture_get_format(format, &data_type, &channels);
+ tex = GPU_texture_create_2D_array_custom(w, h, d, channels, data_type, fpixels, NULL);
+ drw_texture_set_parameters(tex, flags);
+
+ return tex;
+}
+
+GPUTexture *DRW_texture_create_3D(
+ int w, int h, int d, DRWTextureFormat format, DRWTextureFlag flags, const float *fpixels)
+{
+ GPUTexture *tex;
+ GPUTextureFormat data_type;
+ int channels;
+
+ drw_texture_get_format(format, &data_type, &channels);
+ tex = GPU_texture_create_3D_custom(w, h, d, channels, data_type, fpixels, NULL);
+ drw_texture_set_parameters(tex, flags);
+
+ return tex;
+}
+
+GPUTexture *DRW_texture_create_cube(int w, DRWTextureFormat format, DRWTextureFlag flags, const float *fpixels)
+{
+ GPUTexture *tex;
+ GPUTextureFormat data_type;
+ int channels;
+
+ drw_texture_get_format(format, &data_type, &channels);
+ tex = GPU_texture_create_cube_custom(w, channels, data_type, fpixels, NULL);
+ drw_texture_set_parameters(tex, flags);
+
+ return tex;
+}
+
+void DRW_texture_generate_mipmaps(GPUTexture *tex)
+{
+ GPU_texture_bind(tex, 0);
+ GPU_texture_generate_mipmap(tex);
+ GPU_texture_unbind(tex);
+}
+
+void DRW_texture_update(GPUTexture *tex, const float *pixels)
+{
+ GPU_texture_update(tex, pixels);
+}
+
+void DRW_texture_free(GPUTexture *tex)
+{
+ GPU_texture_free(tex);
+}
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Uniform Buffer Object (DRW_uniformbuffer)
+ * \{ */
+
+GPUUniformBuffer *DRW_uniformbuffer_create(int size, const void *data)
+{
+ return GPU_uniformbuffer_create(size, data, NULL);
+}
+
+void DRW_uniformbuffer_update(GPUUniformBuffer *ubo, const void *data)
+{
+ GPU_uniformbuffer_update(ubo, data);
+}
+
+void DRW_uniformbuffer_free(GPUUniformBuffer *ubo)
+{
+ GPU_uniformbuffer_free(ubo);
+}
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Shaders (DRW_shader)
+ * \{ */
+
+GPUShader *DRW_shader_create(const char *vert, const char *geom, const char *frag, const char *defines)
+{
+ return GPU_shader_create(vert, frag, geom, NULL, defines);
+}
+
+GPUShader *DRW_shader_create_with_lib(
+ const char *vert, const char *geom, const char *frag, const char *lib, const char *defines)
+{
+ GPUShader *sh;
+ char *vert_with_lib = NULL;
+ char *frag_with_lib = NULL;
+ char *geom_with_lib = NULL;
+
+ vert_with_lib = BLI_string_joinN(lib, vert);
+ frag_with_lib = BLI_string_joinN(lib, frag);
+
+ if (geom) {
+ geom_with_lib = BLI_string_joinN(lib, geom);
+ }
+
+ sh = GPU_shader_create(vert_with_lib, frag_with_lib, geom_with_lib, NULL, defines);
+
+ MEM_freeN(vert_with_lib);
+ MEM_freeN(frag_with_lib);
+ if (geom) {
+ MEM_freeN(geom_with_lib);
+ }
+
+ return sh;
+}
+
+GPUShader *DRW_shader_create_2D(const char *frag, const char *defines)
+{
+ return GPU_shader_create(datatoc_gpu_shader_2D_vert_glsl, frag, NULL, NULL, defines);
+}
+
+GPUShader *DRW_shader_create_3D(const char *frag, const char *defines)
+{
+ return GPU_shader_create(datatoc_gpu_shader_3D_vert_glsl, frag, NULL, NULL, defines);
+}
+
+GPUShader *DRW_shader_create_fullscreen(const char *frag, const char *defines)
+{
+ return GPU_shader_create(datatoc_gpu_shader_fullscreen_vert_glsl, frag, NULL, NULL, defines);
+}
+
+GPUShader *DRW_shader_create_3D_depth_only(void)
+{
+ return GPU_shader_get_builtin_shader(GPU_SHADER_3D_DEPTH_ONLY);
+}
+
+void DRW_shader_free(GPUShader *shader)
+{
+ GPU_shader_free(shader);
+}
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Interface (DRW_interface)
+ * \{ */
+
+static void drw_interface_create(DRWInterface *interface, GPUShader *shader)
+{
+ interface->model = GPU_shader_get_builtin_uniform(shader, GWN_UNIFORM_MODEL);
+ interface->modelinverse = GPU_shader_get_builtin_uniform(shader, GWN_UNIFORM_MODEL_INV);
+ interface->modelview = GPU_shader_get_builtin_uniform(shader, GWN_UNIFORM_MODELVIEW);
+ interface->modelviewinverse = GPU_shader_get_builtin_uniform(shader, GWN_UNIFORM_MODELVIEW_INV);
+ interface->projection = GPU_shader_get_builtin_uniform(shader, GWN_UNIFORM_PROJECTION);
+ interface->projectioninverse = GPU_shader_get_builtin_uniform(shader, GWN_UNIFORM_PROJECTION_INV);
+ interface->view = GPU_shader_get_builtin_uniform(shader, GWN_UNIFORM_VIEW);
+ interface->viewinverse = GPU_shader_get_builtin_uniform(shader, GWN_UNIFORM_VIEW_INV);
+ interface->viewprojection = GPU_shader_get_builtin_uniform(shader, GWN_UNIFORM_VIEWPROJECTION);
+ interface->viewprojectioninverse = GPU_shader_get_builtin_uniform(shader, GWN_UNIFORM_VIEWPROJECTION_INV);
+ interface->modelviewprojection = GPU_shader_get_builtin_uniform(shader, GWN_UNIFORM_MVP);
+ interface->normal = GPU_shader_get_builtin_uniform(shader, GWN_UNIFORM_NORMAL);
+ interface->worldnormal = GPU_shader_get_builtin_uniform(shader, GWN_UNIFORM_WORLDNORMAL);
+ interface->camtexfac = GPU_shader_get_builtin_uniform(shader, GWN_UNIFORM_CAMERATEXCO);
+ interface->orcotexfac = GPU_shader_get_builtin_uniform(shader, GWN_UNIFORM_ORCO);
+ interface->clipplanes = GPU_shader_get_builtin_uniform(shader, GWN_UNIFORM_CLIPPLANES);
+ interface->eye = GPU_shader_get_builtin_uniform(shader, GWN_UNIFORM_EYE);
+ interface->instance_count = 0;
+ interface->attribs_count = 0;
+ interface->attribs_stride = 0;
+ interface->instance_vbo = 0;
+ interface->instance_batch = NULL;
+ interface->inst_data = NULL;
+ interface->uniforms = NULL;
+#ifdef USE_GPU_SELECT
+ interface->inst_selectid = NULL;
+ interface->override_selectid = -1;
+#endif
+
+ memset(&interface->vbo_format, 0, sizeof(Gwn_VertFormat));
+}
+
+
+static void drw_interface_uniform(DRWShadingGroup *shgroup, const char *name,
+ DRWUniformType type, const void *value, int length, int arraysize)
+{
+ int location;
+ if (type == DRW_UNIFORM_BLOCK) {
+ location = GPU_shader_get_uniform_block(shgroup->shader, name);
+ }
+ else {
+ location = GPU_shader_get_uniform(shgroup->shader, name);
+ }
+
+ if (location == -1) {
+ if (G.debug & G_DEBUG)
+ fprintf(stderr, "Uniform '%s' not found!\n", name);
+ /* Nice to enable eventually, for now eevee uses uniforms that might not exist. */
+ // BLI_assert(0);
+ return;
+ }
+
+ DRWUniform *uni = BLI_mempool_alloc(DST.vmempool->uniforms);
+
+ BLI_assert(arraysize > 0 && arraysize <= 16);
+ BLI_assert(arraysize * length <= MAX_UNIFORM_DATA_SIZE);
+
+ uni->location = location;
+ uni->type = type;
+ uni->value = value;
+ uni->length = length;
+ uni->arraysize = arraysize;
+
+ /* Prepend */
+ uni->next = shgroup->interface.uniforms;
+ shgroup->interface.uniforms = uni;
+}
+
+static void drw_interface_attrib(DRWShadingGroup *shgroup, const char *name, DRWAttribType UNUSED(type), int size, bool dummy)
+{
+ unsigned int attrib_id = shgroup->interface.attribs_count;
+ GLuint program = GPU_shader_get_program(shgroup->shader);
+
+ shgroup->interface.attribs_loc[attrib_id] = glGetAttribLocation(program, name);
+ shgroup->interface.attribs_size[attrib_id] = size;
+ shgroup->interface.attribs_stride += size;
+ shgroup->interface.attribs_count += 1;
+
+ if (shgroup->type != DRW_SHG_INSTANCE) {
+ BLI_assert(size <= 4); /* Matrices are not supported by Gawain. */
+ GWN_vertformat_attr_add(&shgroup->interface.vbo_format, name, GWN_COMP_F32, size, GWN_FETCH_FLOAT);
+ }
+
+ BLI_assert(shgroup->interface.attribs_count < MAX_ATTRIB_COUNT);
+
+/* Adding attribute even if not found for now (to keep memory alignment).
+ * Should ideally take vertex format automatically from batch eventually */
+#if 0
+ if (attrib->location == -1 && !dummy) {
+ if (G.debug & G_DEBUG)
+ fprintf(stderr, "Attribute '%s' not found!\n", name);
+ BLI_assert(0);
+ MEM_freeN(attrib);
+ return;
+ }
+#else
+ UNUSED_VARS(dummy);
+#endif
+}
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Shading Group (DRW_shgroup)
+ * \{ */
+
+DRWShadingGroup *DRW_shgroup_create(struct GPUShader *shader, DRWPass *pass)
+{
+ DRWShadingGroup *shgroup = BLI_mempool_alloc(DST.vmempool->shgroups);
+
+ /* Append */
+ if (pass->shgroups != NULL) {
+ pass->shgroups_last->next = shgroup;
+ }
+ else {
+ pass->shgroups = shgroup;
+ }
+ pass->shgroups_last = shgroup;
+ shgroup->next = NULL;
+
+ drw_interface_create(&shgroup->interface, shader);
+
+ shgroup->type = DRW_SHG_NORMAL;
+ shgroup->shader = shader;
+ shgroup->state_extra = 0;
+ shgroup->state_extra_disable = ~0x0;
+ shgroup->stencil_mask = 0;
+ shgroup->batch_geom = NULL;
+ shgroup->instance_geom = NULL;
+ shgroup->instance_data = NULL;
+
+ shgroup->calls = NULL;
+ shgroup->calls_first = NULL;
+
+#ifdef USE_GPU_SELECT
+ shgroup->pass_parent = pass;
+#endif
+
+ return shgroup;
+}
+
+DRWShadingGroup *DRW_shgroup_material_create(struct GPUMaterial *material, DRWPass *pass)
+{
+ double time = 0.0; /* TODO make time variable */
+
+ /* TODO : Ideally we should not convert. But since the whole codegen
+ * is relying on GPUPass we keep it as is for now. */
+ GPUPass *gpupass = GPU_material_get_pass(material);
+
+ if (!gpupass) {
+ /* Shader compilation error */
+ return NULL;
+ }
+
+ struct GPUShader *shader = GPU_pass_shader(gpupass);
+
+ DRWShadingGroup *grp = DRW_shgroup_create(shader, pass);
+
+ /* Converting dynamic GPUInput to DRWUniform */
+ ListBase *inputs = &gpupass->inputs;
+
+ for (GPUInput *input = inputs->first; input; input = input->next) {
+ /* Textures */
+ if (input->ima) {
+ GPUTexture *tex = GPU_texture_from_blender(
+ input->ima, input->iuser, input->textarget, input->image_isdata, time, 1);
+
+ if (input->bindtex) {
+ DRW_shgroup_uniform_texture(grp, input->shadername, tex);
+ }
+ }
+ /* Color Ramps */
+ else if (input->tex) {
+ DRW_shgroup_uniform_texture(grp, input->shadername, input->tex);
+ }
+ /* Floats */
+ else {
+ switch (input->type) {
+ case GPU_FLOAT:
+ case GPU_VEC2:
+ case GPU_VEC3:
+ case GPU_VEC4:
+ /* Should already be in the material ubo. */
+ break;
+ case GPU_MAT3:
+ DRW_shgroup_uniform_mat3(grp, input->shadername, (float *)input->dynamicvec);
+ break;
+ case GPU_MAT4:
+ DRW_shgroup_uniform_mat4(grp, input->shadername, (float *)input->dynamicvec);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ GPUUniformBuffer *ubo = GPU_material_get_uniform_buffer(material);
+ if (ubo != NULL) {
+ DRW_shgroup_uniform_block(grp, GPU_UBO_BLOCK_NAME, ubo);
+ }
+
+ return grp;
+}
+
+DRWShadingGroup *DRW_shgroup_material_instance_create(
+ struct GPUMaterial *material, DRWPass *pass, Gwn_Batch *geom, Object *ob)
+{
+ DRWShadingGroup *shgroup = DRW_shgroup_material_create(material, pass);
+
+ if (shgroup) {
+ shgroup->type = DRW_SHG_INSTANCE;
+ shgroup->instance_geom = geom;
+ shgroup->instance_data = ob->data;
+ }
+
+ return shgroup;
+}
+
+DRWShadingGroup *DRW_shgroup_material_empty_tri_batch_create(
+ struct GPUMaterial *material, DRWPass *pass, int size)
+{
+ DRWShadingGroup *shgroup = DRW_shgroup_material_create(material, pass);
+
+ if (shgroup) {
+ shgroup->type = DRW_SHG_TRIANGLE_BATCH;
+ shgroup->interface.instance_count = size * 3;
+ drw_interface_attrib(shgroup, "dummy", DRW_ATTRIB_FLOAT, 1, true);
+ }
+
+ return shgroup;
+}
+
+DRWShadingGroup *DRW_shgroup_instance_create(struct GPUShader *shader, DRWPass *pass, Gwn_Batch *geom)
+{
+ DRWShadingGroup *shgroup = DRW_shgroup_create(shader, pass);
+
+ shgroup->type = DRW_SHG_INSTANCE;
+ shgroup->instance_geom = geom;
+
+ return shgroup;
+}
+
+DRWShadingGroup *DRW_shgroup_point_batch_create(struct GPUShader *shader, DRWPass *pass)
+{
+ DRWShadingGroup *shgroup = DRW_shgroup_create(shader, pass);
+
+ shgroup->type = DRW_SHG_POINT_BATCH;
+ DRW_shgroup_attrib_float(shgroup, "pos", 3);
+
+ return shgroup;
+}
+
+DRWShadingGroup *DRW_shgroup_line_batch_create(struct GPUShader *shader, DRWPass *pass)
+{
+ DRWShadingGroup *shgroup = DRW_shgroup_create(shader, pass);
+
+ shgroup->type = DRW_SHG_LINE_BATCH;
+ DRW_shgroup_attrib_float(shgroup, "pos", 3);
+
+ return shgroup;
+}
+
+/* Very special batch. Use this if you position
+ * your vertices with the vertex shader
+ * and dont need any VBO attrib */
+DRWShadingGroup *DRW_shgroup_empty_tri_batch_create(struct GPUShader *shader, DRWPass *pass, int size)
+{
+ DRWShadingGroup *shgroup = DRW_shgroup_create(shader, pass);
+
+ shgroup->type = DRW_SHG_TRIANGLE_BATCH;
+ shgroup->interface.instance_count = size * 3;
+ drw_interface_attrib(shgroup, "dummy", DRW_ATTRIB_FLOAT, 1, true);
+
+ return shgroup;
+}
+
+void DRW_shgroup_free(struct DRWShadingGroup *shgroup)
+{
+ if (shgroup->interface.instance_vbo &&
+ (shgroup->interface.instance_batch == 0))
+ {
+ glDeleteBuffers(1, &shgroup->interface.instance_vbo);
+ }
+
+ GWN_BATCH_DISCARD_SAFE(shgroup->batch_geom);
+}
+
+#define CALL_PREPEND(shgroup, call) { \
+ if (shgroup->calls == NULL) { \
+ shgroup->calls = call; \
+ shgroup->calls_first = call; \
+ } \
+ else { \
+ ((DRWCall *)(shgroup->calls))->head.prev = call; \
+ shgroup->calls = call; \
+ } \
+ call->head.prev = NULL; \
+} ((void)0)
+
+void DRW_shgroup_instance_batch(DRWShadingGroup *shgroup, struct Gwn_Batch *instances)
+{
+ BLI_assert(shgroup->type == DRW_SHG_INSTANCE);
+ BLI_assert(shgroup->interface.instance_batch == NULL);
+
+ shgroup->interface.instance_batch = instances;
+
+#ifdef USE_GPU_SELECT
+ DRWCall *call = BLI_mempool_alloc(DST.vmempool->calls);
+ call->head.select_id = g_DRW_select_id;
+
+ CALL_PREPEND(shgroup, call);
+#endif
+}
+
+void DRW_shgroup_call_add(DRWShadingGroup *shgroup, Gwn_Batch *geom, float (*obmat)[4])
+{
+ BLI_assert(geom != NULL);
+ BLI_assert(shgroup->type == DRW_SHG_NORMAL);
+
+ DRWCall *call = BLI_mempool_alloc(DST.vmempool->calls);
+
+ CALL_PREPEND(shgroup, call);
+
+ call->head.type = DRW_CALL_SINGLE;
+#ifdef USE_GPU_SELECT
+ call->head.select_id = g_DRW_select_id;
+#endif
+
+ if (obmat != NULL) {
+ copy_m4_m4(call->obmat, obmat);
+ }
+
+ call->geometry = geom;
+ call->ob_data = NULL;
+}
+
+void DRW_shgroup_call_object_add(DRWShadingGroup *shgroup, Gwn_Batch *geom, Object *ob)
+{
+ BLI_assert(geom != NULL);
+ BLI_assert(shgroup->type == DRW_SHG_NORMAL);
+
+ DRWCall *call = BLI_mempool_alloc(DST.vmempool->calls);
+
+ CALL_PREPEND(shgroup, call);
+
+ call->head.type = DRW_CALL_SINGLE;
+#ifdef USE_GPU_SELECT
+ call->head.select_id = g_DRW_select_id;
+#endif
+
+ copy_m4_m4(call->obmat, ob->obmat);
+ call->geometry = geom;
+ call->ob_data = ob->data;
+}
+
+void DRW_shgroup_call_generate_add(
+ DRWShadingGroup *shgroup,
+ DRWCallGenerateFn *geometry_fn, void *user_data,
+ float (*obmat)[4])
+{
+ BLI_assert(geometry_fn != NULL);
+ BLI_assert(shgroup->type == DRW_SHG_NORMAL);
+
+ DRWCallGenerate *call = BLI_mempool_alloc(DST.vmempool->calls_generate);
+
+ CALL_PREPEND(shgroup, call);
+
+ call->head.type = DRW_CALL_GENERATE;
+#ifdef USE_GPU_SELECT
+ call->head.select_id = g_DRW_select_id;
+#endif
+
+ if (obmat != NULL) {
+ copy_m4_m4(call->obmat, obmat);
+ }
+
+ call->geometry_fn = geometry_fn;
+ call->user_data = user_data;
+}
+
+static void sculpt_draw_cb(
+ DRWShadingGroup *shgroup,
+ void (*draw_fn)(DRWShadingGroup *shgroup, Gwn_Batch *geom),
+ void *user_data)
+{
+ Object *ob = user_data;
+ PBVH *pbvh = ob->sculpt->pbvh;
+
+ if (pbvh) {
+ BKE_pbvh_draw_cb(
+ pbvh, NULL, NULL, false,
+ (void (*)(void *, Gwn_Batch *))draw_fn, shgroup);
+ }
+}
+
+void DRW_shgroup_call_sculpt_add(DRWShadingGroup *shgroup, Object *ob, float (*obmat)[4])
+{
+ DRW_shgroup_call_generate_add(shgroup, sculpt_draw_cb, ob, obmat);
+}
+
+void DRW_shgroup_call_dynamic_add_array(DRWShadingGroup *shgroup, const void *attr[], unsigned int attr_len)
+{
+ DRWInterface *interface = &shgroup->interface;
+
+#ifdef USE_GPU_SELECT
+ if (G.f & G_PICKSEL) {
+ if (interface->inst_selectid == NULL) {
+ interface->inst_selectid = DRW_instance_data_request(DST.idatalist, 1, 128);
+ }
+
+ int *select_id = DRW_instance_data_next(interface->inst_selectid);
+ *select_id = g_DRW_select_id;
+ }
+#endif
+
+ BLI_assert(attr_len == interface->attribs_count);
+ UNUSED_VARS_NDEBUG(attr_len);
+
+ if (interface->attribs_stride > 0) {
+ if (interface->inst_data == NULL) {
+ interface->inst_data = DRW_instance_data_request(DST.idatalist, interface->attribs_stride, 16);
+ }
+
+ float *data = DRW_instance_data_next(interface->inst_data);
+
+ for (int i = 0; i < interface->attribs_count; ++i) {
+ memcpy(data, attr[i], sizeof(float) * interface->attribs_size[i]);
+ data = data + interface->attribs_size[i];
+ }
+ }
+
+ interface->instance_count += 1;
+}
+
+/* Used for instancing with no attributes */
+void DRW_shgroup_set_instance_count(DRWShadingGroup *shgroup, int count)
+{
+ DRWInterface *interface = &shgroup->interface;
+
+ BLI_assert(interface->instance_count == 0);
+ BLI_assert(interface->attribs_count == 0);
+
+#ifdef USE_GPU_SELECT
+ if (G.f & G_PICKSEL) {
+ interface->override_selectid = g_DRW_select_id;
+ }
+#endif
+
+ interface->instance_count = count;
+}
+
+/**
+ * State is added to #Pass.state while drawing.
+ * Use to temporarily enable draw options.
+ */
+void DRW_shgroup_state_enable(DRWShadingGroup *shgroup, DRWState state)
+{
+ shgroup->state_extra |= state;
+}
+
+void DRW_shgroup_state_disable(DRWShadingGroup *shgroup, DRWState state)
+{
+ shgroup->state_extra_disable &= ~state;
+}
+
+void DRW_shgroup_stencil_mask(DRWShadingGroup *shgroup, unsigned int mask)
+{
+ BLI_assert(mask <= 255);
+ shgroup->stencil_mask = mask;
+}
+
+void DRW_shgroup_attrib_float(DRWShadingGroup *shgroup, const char *name, int size)
+{
+ drw_interface_attrib(shgroup, name, DRW_ATTRIB_FLOAT, size, false);
+}
+
+void DRW_shgroup_uniform_texture(DRWShadingGroup *shgroup, const char *name, const GPUTexture *tex)
+{
+ drw_interface_uniform(shgroup, name, DRW_UNIFORM_TEXTURE, tex, 0, 1);
+}
+
+void DRW_shgroup_uniform_block(DRWShadingGroup *shgroup, const char *name, const GPUUniformBuffer *ubo)
+{
+ drw_interface_uniform(shgroup, name, DRW_UNIFORM_BLOCK, ubo, 0, 1);
+}
+
+void DRW_shgroup_uniform_buffer(DRWShadingGroup *shgroup, const char *name, GPUTexture **tex)
+{
+ drw_interface_uniform(shgroup, name, DRW_UNIFORM_BUFFER, tex, 0, 1);
+}
+
+void DRW_shgroup_uniform_bool(DRWShadingGroup *shgroup, const char *name, const int *value, int arraysize)
+{
+ drw_interface_uniform(shgroup, name, DRW_UNIFORM_BOOL, value, 1, arraysize);
+}
+
+void DRW_shgroup_uniform_float(DRWShadingGroup *shgroup, const char *name, const float *value, int arraysize)
+{
+ drw_interface_uniform(shgroup, name, DRW_UNIFORM_FLOAT, value, 1, arraysize);
+}
+
+void DRW_shgroup_uniform_vec2(DRWShadingGroup *shgroup, const char *name, const float *value, int arraysize)
+{
+ drw_interface_uniform(shgroup, name, DRW_UNIFORM_FLOAT, value, 2, arraysize);
+}
+
+void DRW_shgroup_uniform_vec3(DRWShadingGroup *shgroup, const char *name, const float *value, int arraysize)
+{
+ drw_interface_uniform(shgroup, name, DRW_UNIFORM_FLOAT, value, 3, arraysize);
+}
+
+void DRW_shgroup_uniform_vec4(DRWShadingGroup *shgroup, const char *name, const float *value, int arraysize)
+{
+ drw_interface_uniform(shgroup, name, DRW_UNIFORM_FLOAT, value, 4, arraysize);
+}
+
+void DRW_shgroup_uniform_short_to_int(DRWShadingGroup *shgroup, const char *name, const short *value, int arraysize)
+{
+ drw_interface_uniform(shgroup, name, DRW_UNIFORM_SHORT_TO_INT, value, 1, arraysize);
+}
+
+void DRW_shgroup_uniform_short_to_float(DRWShadingGroup *shgroup, const char *name, const short *value, int arraysize)
+{
+ drw_interface_uniform(shgroup, name, DRW_UNIFORM_SHORT_TO_FLOAT, value, 1, arraysize);
+}
+
+void DRW_shgroup_uniform_int(DRWShadingGroup *shgroup, const char *name, const int *value, int arraysize)
+{
+ drw_interface_uniform(shgroup, name, DRW_UNIFORM_INT, value, 1, arraysize);
+}
+
+void DRW_shgroup_uniform_ivec2(DRWShadingGroup *shgroup, const char *name, const int *value, int arraysize)
+{
+ drw_interface_uniform(shgroup, name, DRW_UNIFORM_INT, value, 2, arraysize);
+}
+
+void DRW_shgroup_uniform_ivec3(DRWShadingGroup *shgroup, const char *name, const int *value, int arraysize)
+{
+ drw_interface_uniform(shgroup, name, DRW_UNIFORM_INT, value, 3, arraysize);
+}
+
+void DRW_shgroup_uniform_mat3(DRWShadingGroup *shgroup, const char *name, const float *value)
+{
+ drw_interface_uniform(shgroup, name, DRW_UNIFORM_MAT3, value, 9, 1);
+}
+
+void DRW_shgroup_uniform_mat4(DRWShadingGroup *shgroup, const char *name, const float *value)
+{
+ drw_interface_uniform(shgroup, name, DRW_UNIFORM_MAT4, value, 16, 1);
+}
+
+/* Creates a VBO containing OGL primitives for all DRWCallDynamic */
+static void shgroup_dynamic_batch(DRWShadingGroup *shgroup)
+{
+ DRWInterface *interface = &shgroup->interface;
+ int nbr = interface->instance_count;
+
+ Gwn_PrimType type = (shgroup->type == DRW_SHG_POINT_BATCH) ? GWN_PRIM_POINTS :
+ (shgroup->type == DRW_SHG_TRIANGLE_BATCH) ? GWN_PRIM_TRIS : GWN_PRIM_LINES;
+
+ if (nbr == 0)
+ return;
+
+ /* Upload Data */
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&interface->vbo_format);
+ if (interface->inst_data) {
+ GWN_vertbuf_data_set(vbo, nbr, DRW_instance_data_get(interface->inst_data), false);
+ } else {
+ /* Use unitialized memory. This is for dummy vertex buffers. */
+ /* XXX TODO do not alloc at all. */
+ GWN_vertbuf_data_alloc(vbo, nbr);
+ }
+
+ /* TODO make the batch dynamic instead of freeing it every times */
+ if (shgroup->batch_geom)
+ GWN_batch_discard(shgroup->batch_geom);
+
+ shgroup->batch_geom = GWN_batch_create_ex(type, vbo, NULL, GWN_BATCH_OWNS_VBO);
+}
+
+static void shgroup_dynamic_instance(DRWShadingGroup *shgroup)
+{
+ DRWInterface *interface = &shgroup->interface;
+ int buffer_size = 0;
+ void *data = NULL;
+
+ if (interface->instance_batch != NULL) {
+ return;
+ }
+
+ /* TODO We still need this because gawain does not support Matrix attribs. */
+ if (interface->instance_count == 0) {
+ if (interface->instance_vbo) {
+ glDeleteBuffers(1, &interface->instance_vbo);
+ interface->instance_vbo = 0;
+ }
+ return;
+ }
+
+ /* Gather Data */
+ buffer_size = sizeof(float) * interface->attribs_stride * interface->instance_count;
+
+ /* TODO poke mike to add this to gawain */
+ if (interface->instance_vbo) {
+ glDeleteBuffers(1, &interface->instance_vbo);
+ interface->instance_vbo = 0;
+ }
+
+ if (interface->inst_data) {
+ data = DRW_instance_data_get(interface->inst_data);
+ }
+
+ glGenBuffers(1, &interface->instance_vbo);
+ glBindBuffer(GL_ARRAY_BUFFER, interface->instance_vbo);
+ glBufferData(GL_ARRAY_BUFFER, buffer_size, data, GL_STATIC_DRAW);
+}
+
+static void shgroup_dynamic_batch_from_calls(DRWShadingGroup *shgroup)
+{
+ if ((shgroup->interface.instance_vbo || shgroup->batch_geom) &&
+ (G.debug_value == 667))
+ {
+ return;
+ }
+
+ if (shgroup->type == DRW_SHG_INSTANCE) {
+ shgroup_dynamic_instance(shgroup);
+ }
+ else {
+ shgroup_dynamic_batch(shgroup);
+ }
+}
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Passes (DRW_pass)
+ * \{ */
+
+DRWPass *DRW_pass_create(const char *name, DRWState state)
+{
+ DRWPass *pass = BLI_mempool_alloc(DST.vmempool->passes);
+ pass->state = state;
+ BLI_strncpy(pass->name, name, MAX_PASS_NAME);
+
+ pass->shgroups = NULL;
+ pass->shgroups_last = NULL;
+
+ return pass;
+}
+
+void DRW_pass_state_set(DRWPass *pass, DRWState state)
+{
+ pass->state = state;
+}
+
+void DRW_pass_free(DRWPass *pass)
+{
+ for (DRWShadingGroup *shgroup = pass->shgroups; shgroup; shgroup = shgroup->next) {
+ DRW_shgroup_free(shgroup);
+ }
+
+ pass->shgroups = NULL;
+ pass->shgroups_last = NULL;
+}
+
+void DRW_pass_foreach_shgroup(DRWPass *pass, void (*callback)(void *userData, DRWShadingGroup *shgrp), void *userData)
+{
+ for (DRWShadingGroup *shgroup = pass->shgroups; shgroup; shgroup = shgroup->next) {
+ callback(userData, shgroup);
+ }
+}
+
+typedef struct ZSortData {
+ float *axis;
+ float *origin;
+} ZSortData;
+
+static int pass_shgroup_dist_sort(void *thunk, const void *a, const void *b)
+{
+ const ZSortData *zsortdata = (ZSortData *)thunk;
+ const DRWShadingGroup *shgrp_a = (const DRWShadingGroup *)a;
+ const DRWShadingGroup *shgrp_b = (const DRWShadingGroup *)b;
+
+ const DRWCall *call_a;
+ const DRWCall *call_b;
+
+ call_a = shgrp_a->calls_first;
+ call_b = shgrp_b->calls_first;
+
+ if (call_a == NULL) return -1;
+ if (call_b == NULL) return -1;
+
+ float tmp[3];
+ sub_v3_v3v3(tmp, zsortdata->origin, call_a->obmat[3]);
+ const float a_sq = dot_v3v3(zsortdata->axis, tmp);
+ sub_v3_v3v3(tmp, zsortdata->origin, call_b->obmat[3]);
+ const float b_sq = dot_v3v3(zsortdata->axis, tmp);
+
+ if (a_sq < b_sq) return 1;
+ else if (a_sq > b_sq) return -1;
+ else {
+ /* If there is a depth prepass put it before */
+ if ((shgrp_a->state_extra & DRW_STATE_WRITE_DEPTH) != 0) {
+ return -1;
+ }
+ else if ((shgrp_b->state_extra & DRW_STATE_WRITE_DEPTH) != 0) {
+ return 1;
+ }
+ else return 0;
+ }
+}
+
+/* ------------------ Shading group sorting --------------------- */
+
+#define SORT_IMPL_LINKTYPE DRWShadingGroup
+
+#define SORT_IMPL_USE_THUNK
+#define SORT_IMPL_FUNC shgroup_sort_fn_r
+#include "../../blenlib/intern/list_sort_impl.h"
+#undef SORT_IMPL_FUNC
+#undef SORT_IMPL_USE_THUNK
+
+#undef SORT_IMPL_LINKTYPE
+
+/**
+ * Sort Shading groups by decreasing Z of their first draw call.
+ * This is usefull for order dependant effect such as transparency.
+ **/
+void DRW_pass_sort_shgroup_z(DRWPass *pass)
+{
+ RegionView3D *rv3d = DST.draw_ctx.rv3d;
+
+ float (*viewinv)[4];
+ viewinv = (viewport_matrix_override.override[DRW_MAT_VIEWINV])
+ ? viewport_matrix_override.mat[DRW_MAT_VIEWINV] : rv3d->viewinv;
+
+ ZSortData zsortdata = {viewinv[2], viewinv[3]};
+
+ if (pass->shgroups && pass->shgroups->next) {
+ pass->shgroups = shgroup_sort_fn_r(pass->shgroups, pass_shgroup_dist_sort, &zsortdata);
+
+ /* Find the next last */
+ DRWShadingGroup *last = pass->shgroups;
+ while ((last = last->next)) {
+ /* Do nothing */
+ }
+ pass->shgroups_last = last;
+ }
+}
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Draw (DRW_draw)
+ * \{ */
+
+static void drw_state_set(DRWState state)
+{
+ if (DST.state == state) {
+ return;
+ }
+
+
+#define CHANGED_TO(f) \
+ ((DST.state & (f)) ? \
+ ((state & (f)) ? 0 : -1) : \
+ ((state & (f)) ? 1 : 0))
+
+#define CHANGED_ANY(f) \
+ ((DST.state & (f)) != (state & (f)))
+
+#define CHANGED_ANY_STORE_VAR(f, enabled) \
+ ((DST.state & (f)) != (enabled = (state & (f))))
+
+ /* Depth Write */
+ {
+ int test;
+ if ((test = CHANGED_TO(DRW_STATE_WRITE_DEPTH))) {
+ if (test == 1) {
+ glDepthMask(GL_TRUE);
+ }
+ else {
+ glDepthMask(GL_FALSE);
+ }
+ }
+ }
+
+ /* Color Write */
+ {
+ int test;
+ if ((test = CHANGED_TO(DRW_STATE_WRITE_COLOR))) {
+ if (test == 1) {
+ glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+ }
+ else {
+ glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
+ }
+ }
+ }
+
+ /* Cull */
+ {
+ DRWState test;
+ if (CHANGED_ANY_STORE_VAR(
+ DRW_STATE_CULL_BACK | DRW_STATE_CULL_FRONT,
+ test))
+ {
+ if (test) {
+ glEnable(GL_CULL_FACE);
+
+ if ((state & DRW_STATE_CULL_BACK) != 0) {
+ glCullFace(GL_BACK);
+ }
+ else if ((state & DRW_STATE_CULL_FRONT) != 0) {
+ glCullFace(GL_FRONT);
+ }
+ else {
+ BLI_assert(0);
+ }
+ }
+ else {
+ glDisable(GL_CULL_FACE);
+ }
+ }
+ }
+
+ /* Depth Test */
+ {
+ DRWState test;
+ if (CHANGED_ANY_STORE_VAR(
+ DRW_STATE_DEPTH_LESS | DRW_STATE_DEPTH_EQUAL | DRW_STATE_DEPTH_GREATER | DRW_STATE_DEPTH_ALWAYS,
+ test))
+ {
+ if (test) {
+ glEnable(GL_DEPTH_TEST);
+
+ if (state & DRW_STATE_DEPTH_LESS) {
+ glDepthFunc(GL_LEQUAL);
+ }
+ else if (state & DRW_STATE_DEPTH_EQUAL) {
+ glDepthFunc(GL_EQUAL);
+ }
+ else if (state & DRW_STATE_DEPTH_GREATER) {
+ glDepthFunc(GL_GREATER);
+ }
+ else if (state & DRW_STATE_DEPTH_ALWAYS) {
+ glDepthFunc(GL_ALWAYS);
+ }
+ else {
+ BLI_assert(0);
+ }
+ }
+ else {
+ glDisable(GL_DEPTH_TEST);
+ }
+ }
+ }
+
+ /* Wire Width */
+ {
+ if (CHANGED_ANY(DRW_STATE_WIRE | DRW_STATE_WIRE_LARGE)) {
+ if ((state & DRW_STATE_WIRE) != 0) {
+ glLineWidth(1.0f);
+ }
+ else if ((state & DRW_STATE_WIRE_LARGE) != 0) {
+ glLineWidth(UI_GetThemeValuef(TH_OUTLINE_WIDTH) * 2.0f);
+ }
+ else {
+ /* do nothing */
+ }
+ }
+ }
+
+ /* Points Size */
+ {
+ int test;
+ if ((test = CHANGED_TO(DRW_STATE_POINT))) {
+ if (test == 1) {
+ GPU_enable_program_point_size();
+ glPointSize(5.0f);
+ }
+ else {
+ GPU_disable_program_point_size();
+ }
+ }
+ }
+
+ /* Blending (all buffer) */
+ {
+ int test;
+ if (CHANGED_ANY_STORE_VAR(
+ DRW_STATE_BLEND | DRW_STATE_ADDITIVE | DRW_STATE_MULTIPLY | DRW_STATE_TRANSMISSION |
+ DRW_STATE_ADDITIVE_FULL,
+ test))
+ {
+ if (test) {
+ glEnable(GL_BLEND);
+
+ if ((state & DRW_STATE_BLEND) != 0) {
+ glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, /* RGB */
+ GL_ONE, GL_ONE_MINUS_SRC_ALPHA); /* Alpha */
+ }
+ else if ((state & DRW_STATE_MULTIPLY) != 0) {
+ glBlendFunc(GL_DST_COLOR, GL_ZERO);
+ }
+ else if ((state & DRW_STATE_TRANSMISSION) != 0) {
+ glBlendFunc(GL_ONE, GL_SRC_ALPHA);
+ }
+ else if ((state & DRW_STATE_ADDITIVE) != 0) {
+ /* Do not let alpha accumulate but premult the source RGB by it. */
+ glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE, /* RGB */
+ GL_ZERO, GL_ONE); /* Alpha */
+ }
+ else if ((state & DRW_STATE_ADDITIVE_FULL) != 0) {
+ /* Let alpha accumulate. */
+ glBlendFunc(GL_ONE, GL_ONE);
+ }
+ else {
+ BLI_assert(0);
+ }
+ }
+ else {
+ glDisable(GL_BLEND);
+ }
+ }
+ }
+
+ /* Clip Planes */
+ {
+ int test;
+ if ((test = CHANGED_TO(DRW_STATE_CLIP_PLANES))) {
+ if (test == 1) {
+ for (int i = 0; i < DST.num_clip_planes; ++i) {
+ glEnable(GL_CLIP_DISTANCE0 + i);
+ }
+ }
+ else {
+ for (int i = 0; i < MAX_CLIP_PLANES; ++i) {
+ glDisable(GL_CLIP_DISTANCE0 + i);
+ }
+ }
+ }
+ }
+
+ /* Line Stipple */
+ {
+ int test;
+ if (CHANGED_ANY_STORE_VAR(
+ DRW_STATE_STIPPLE_2 | DRW_STATE_STIPPLE_3 | DRW_STATE_STIPPLE_4,
+ test))
+ {
+ if (test) {
+ if ((state & DRW_STATE_STIPPLE_2) != 0) {
+ setlinestyle(2);
+ }
+ else if ((state & DRW_STATE_STIPPLE_3) != 0) {
+ setlinestyle(3);
+ }
+ else if ((state & DRW_STATE_STIPPLE_4) != 0) {
+ setlinestyle(4);
+ }
+ else {
+ BLI_assert(0);
+ }
+ }
+ else {
+ setlinestyle(0);
+ }
+ }
+ }
+
+ /* Stencil */
+ {
+ DRWState test;
+ if (CHANGED_ANY_STORE_VAR(
+ DRW_STATE_WRITE_STENCIL |
+ DRW_STATE_STENCIL_EQUAL,
+ test))
+ {
+ if (test) {
+ glEnable(GL_STENCIL_TEST);
+
+ /* Stencil Write */
+ if ((state & DRW_STATE_WRITE_STENCIL) != 0) {
+ glStencilMask(0xFF);
+ glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
+ }
+ /* Stencil Test */
+ else if ((state & DRW_STATE_STENCIL_EQUAL) != 0) {
+ glStencilMask(0x00); /* disable write */
+ DST.stencil_mask = 0;
+ }
+ else {
+ BLI_assert(0);
+ }
+ }
+ else {
+ /* disable write & test */
+ DST.stencil_mask = 0;
+ glStencilMask(0x00);
+ glStencilFunc(GL_ALWAYS, 1, 0xFF);
+ glDisable(GL_STENCIL_TEST);
+ }
+ }
+ }
+
+#undef CHANGED_TO
+#undef CHANGED_ANY
+#undef CHANGED_ANY_STORE_VAR
+
+ DST.state = state;
+}
+
+static void drw_stencil_set(unsigned int mask)
+{
+ if (DST.stencil_mask != mask) {
+ /* Stencil Write */
+ if ((DST.state & DRW_STATE_WRITE_STENCIL) != 0) {
+ glStencilFunc(GL_ALWAYS, mask, 0xFF);
+ DST.stencil_mask = mask;
+ }
+ /* Stencil Test */
+ else if ((DST.state & DRW_STATE_STENCIL_EQUAL) != 0) {
+ glStencilFunc(GL_EQUAL, mask, 0xFF);
+ DST.stencil_mask = mask;
+ }
+ }
+}
+
+typedef struct DRWBoundTexture {
+ struct DRWBoundTexture *next, *prev;
+ GPUTexture *tex;
+} DRWBoundTexture;
+
+static void draw_geometry_prepare(
+ DRWShadingGroup *shgroup, const float (*obmat)[4], const float *texcoloc, const float *texcosize)
+{
+ RegionView3D *rv3d = DST.draw_ctx.rv3d;
+ DRWInterface *interface = &shgroup->interface;
+
+ float mvp[4][4], mv[4][4], mi[4][4], mvi[4][4], pi[4][4], n[3][3], wn[3][3];
+ float orcofacs[2][3] = {{0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}};
+ float eye[3] = { 0.0f, 0.0f, 1.0f }; /* looking into the screen */
+ float viewcamtexcofac[4] = { 1.0f, 1.0f, 0.0f, 0.0f };
+
+ if (rv3d != NULL) {
+ copy_v4_v4(viewcamtexcofac, rv3d->viewcamtexcofac);
+ }
+
+ bool do_pi = (interface->projectioninverse != -1);
+ bool do_mvp = (interface->modelviewprojection != -1);
+ bool do_mi = (interface->modelinverse != -1);
+ bool do_mv = (interface->modelview != -1);
+ bool do_mvi = (interface->modelviewinverse != -1);
+ bool do_n = (interface->normal != -1);
+ bool do_wn = (interface->worldnormal != -1);
+ bool do_eye = (interface->eye != -1);
+ bool do_orco = (interface->orcotexfac != -1) && (texcoloc != NULL) && (texcosize != NULL);
+
+ /* Matrix override */
+ float (*persmat)[4];
+ float (*persinv)[4];
+ float (*viewmat)[4];
+ float (*viewinv)[4];
+ float (*winmat)[4];
+ float (*wininv)[4];
+
+ persmat = (viewport_matrix_override.override[DRW_MAT_PERS])
+ ? viewport_matrix_override.mat[DRW_MAT_PERS] : rv3d->persmat;
+ persinv = (viewport_matrix_override.override[DRW_MAT_PERSINV])
+ ? viewport_matrix_override.mat[DRW_MAT_PERSINV] : rv3d->persinv;
+ viewmat = (viewport_matrix_override.override[DRW_MAT_VIEW])
+ ? viewport_matrix_override.mat[DRW_MAT_VIEW] : rv3d->viewmat;
+ viewinv = (viewport_matrix_override.override[DRW_MAT_VIEWINV])
+ ? viewport_matrix_override.mat[DRW_MAT_VIEWINV] : rv3d->viewinv;
+ winmat = (viewport_matrix_override.override[DRW_MAT_WIN])
+ ? viewport_matrix_override.mat[DRW_MAT_WIN] : rv3d->winmat;
+ wininv = viewport_matrix_override.mat[DRW_MAT_WININV];
+
+ if (do_pi) {
+ if (!viewport_matrix_override.override[DRW_MAT_WININV]) {
+ invert_m4_m4(pi, winmat);
+ wininv = pi;
+ }
+ }
+ if (do_mi) {
+ invert_m4_m4(mi, obmat);
+ }
+ if (do_mvp) {
+ mul_m4_m4m4(mvp, persmat, obmat);
+ }
+ if (do_mv || do_mvi || do_n || do_eye) {
+ mul_m4_m4m4(mv, viewmat, obmat);
+ }
+ if (do_mvi) {
+ invert_m4_m4(mvi, mv);
+ }
+ if (do_n || do_eye) {
+ copy_m3_m4(n, mv);
+ invert_m3(n);
+ transpose_m3(n);
+ }
+ if (do_wn) {
+ copy_m3_m4(wn, obmat);
+ invert_m3(wn);
+ transpose_m3(wn);
+ }
+ if (do_eye) {
+ /* Used by orthographic wires */
+ float tmp[3][3];
+ invert_m3_m3(tmp, n);
+ /* set eye vector, transformed to object coords */
+ mul_m3_v3(tmp, eye);
+ }
+ if (do_orco) {
+ mul_v3_v3fl(orcofacs[1], texcosize, 2.0f);
+ invert_v3(orcofacs[1]);
+ sub_v3_v3v3(orcofacs[0], texcoloc, texcosize);
+ negate_v3(orcofacs[0]);
+ mul_v3_v3(orcofacs[0], orcofacs[1]); /* result in a nice MADD in the shader */
+ }
+
+ /* Should be really simple */
+ /* step 1 : bind object dependent matrices */
+ /* TODO : Some of these are not object dependant.
+ * They should be grouped inside a UBO updated once per redraw.
+ * The rest can also go into a UBO to reduce API calls. */
+ GPU_shader_uniform_vector(shgroup->shader, interface->model, 16, 1, (float *)obmat);
+ GPU_shader_uniform_vector(shgroup->shader, interface->modelinverse, 16, 1, (float *)mi);
+ GPU_shader_uniform_vector(shgroup->shader, interface->modelviewprojection, 16, 1, (float *)mvp);
+ GPU_shader_uniform_vector(shgroup->shader, interface->viewinverse, 16, 1, (float *)viewinv);
+ GPU_shader_uniform_vector(shgroup->shader, interface->viewprojection, 16, 1, (float *)persmat);
+ GPU_shader_uniform_vector(shgroup->shader, interface->viewprojectioninverse, 16, 1, (float *)persinv);
+ GPU_shader_uniform_vector(shgroup->shader, interface->projection, 16, 1, (float *)winmat);
+ GPU_shader_uniform_vector(shgroup->shader, interface->projectioninverse, 16, 1, (float *)wininv);
+ GPU_shader_uniform_vector(shgroup->shader, interface->view, 16, 1, (float *)viewmat);
+ GPU_shader_uniform_vector(shgroup->shader, interface->modelview, 16, 1, (float *)mv);
+ GPU_shader_uniform_vector(shgroup->shader, interface->modelviewinverse, 16, 1, (float *)mvi);
+ GPU_shader_uniform_vector(shgroup->shader, interface->normal, 9, 1, (float *)n);
+ GPU_shader_uniform_vector(shgroup->shader, interface->worldnormal, 9, 1, (float *)wn);
+ GPU_shader_uniform_vector(shgroup->shader, interface->camtexfac, 4, 1, (float *)viewcamtexcofac);
+ GPU_shader_uniform_vector(shgroup->shader, interface->orcotexfac, 3, 2, (float *)orcofacs);
+ GPU_shader_uniform_vector(shgroup->shader, interface->eye, 3, 1, (float *)eye);
+ GPU_shader_uniform_vector(shgroup->shader, interface->clipplanes, 4, DST.num_clip_planes, (float *)DST.clip_planes_eq);
+}
+
+static void draw_geometry_execute_ex(
+ DRWShadingGroup *shgroup, Gwn_Batch *geom, unsigned int start, unsigned int count)
+{
+ DRWInterface *interface = &shgroup->interface;
+ /* step 2 : bind vertex array & draw */
+ GWN_batch_program_set(geom, GPU_shader_get_program(shgroup->shader), GPU_shader_get_interface(shgroup->shader));
+ if (interface->instance_batch) {
+ /* Used for Particles. Cannot do partial drawing. */
+ GWN_batch_draw_stupid_instanced_with_batch(geom, interface->instance_batch);
+ }
+ else if (interface->instance_vbo) {
+ GWN_batch_draw_stupid_instanced(
+ geom, interface->instance_vbo, start, count, interface->attribs_count,
+ interface->attribs_stride, interface->attribs_size, interface->attribs_loc);
+ }
+ else {
+ GWN_batch_draw_stupid(geom, start, count);
+ }
+ /* XXX this just tells gawain we are done with the shader.
+ * This does not unbind the shader. */
+ GWN_batch_program_unset(geom);
+}
+
+static void draw_geometry_execute(DRWShadingGroup *shgroup, Gwn_Batch *geom)
+{
+ draw_geometry_execute_ex(shgroup, geom, 0, 0);
+}
+
+static void draw_geometry(
+ DRWShadingGroup *shgroup, Gwn_Batch *geom, const float (*obmat)[4], ID *ob_data,
+ unsigned int start, unsigned int count)
+{
+ float *texcoloc = NULL;
+ float *texcosize = NULL;
+
+ if (ob_data != NULL) {
+ switch (GS(ob_data->name)) {
+ case ID_ME:
+ BKE_mesh_texspace_get_reference((Mesh *)ob_data, NULL, &texcoloc, NULL, &texcosize);
+ break;
+ case ID_CU:
+ {
+ Curve *cu = (Curve *)ob_data;
+ if (cu->bb == NULL || (cu->bb->flag & BOUNDBOX_DIRTY)) {
+ BKE_curve_texspace_calc(cu);
+ }
+ texcoloc = cu->loc;
+ texcosize = cu->size;
+ break;
+ }
+ case ID_MB:
+ {
+ MetaBall *mb = (MetaBall *)ob_data;
+ texcoloc = mb->loc;
+ texcosize = mb->size;
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+ draw_geometry_prepare(shgroup, obmat, texcoloc, texcosize);
+
+ draw_geometry_execute_ex(shgroup, geom, start, count);
+}
+
+static void bind_texture(GPUTexture *tex)
+{
+ int bind_num = GPU_texture_bound_number(tex);
+ if (bind_num == -1) {
+ for (int i = 0; i < GPU_max_textures(); ++i) {
+ RST.bind_tex_inc = (RST.bind_tex_inc + 1) % GPU_max_textures();
+ if (RST.bound_tex_slots[RST.bind_tex_inc] == false) {
+ if (RST.bound_texs[RST.bind_tex_inc] != NULL) {
+ GPU_texture_unbind(RST.bound_texs[RST.bind_tex_inc]);
+ }
+ GPU_texture_bind(tex, RST.bind_tex_inc);
+ RST.bound_texs[RST.bind_tex_inc] = tex;
+ RST.bound_tex_slots[RST.bind_tex_inc] = true;
+ return;
+ }
+ }
+
+ printf("Not enough texture slots! Reduce number of textures used by your shader.\n");
+ }
+ RST.bound_tex_slots[bind_num] = true;
+}
+
+static void bind_ubo(GPUUniformBuffer *ubo)
+{
+ if (RST.bind_ubo_inc < GPU_max_ubo_binds()) {
+ GPU_uniformbuffer_bind(ubo, RST.bind_ubo_inc);
+ RST.bind_ubo_inc++;
+ }
+ else {
+ /* This is not depending on user input.
+ * It is our responsability to make sure there enough slots. */
+ BLI_assert(0 && "Not enough ubo slots! This should not happen!\n");
+
+ /* printf so user can report bad behaviour */
+ printf("Not enough ubo slots! This should not happen!\n");
+ }
+}
+
+static void release_texture_slots(void)
+{
+ memset(RST.bound_tex_slots, 0x0, sizeof(bool) * GPU_max_textures());
+}
+
+static void release_ubo_slots(void)
+{
+ RST.bind_ubo_inc = 0;
+}
+
+static void draw_shgroup(DRWShadingGroup *shgroup, DRWState pass_state)
+{
+ BLI_assert(shgroup->shader);
+
+ DRWInterface *interface = &shgroup->interface;
+ GPUTexture *tex;
+ GPUUniformBuffer *ubo;
+ int val;
+ float fval;
+
+ if (DST.shader != shgroup->shader) {
+ if (DST.shader) GPU_shader_unbind();
+ GPU_shader_bind(shgroup->shader);
+ DST.shader = shgroup->shader;
+ }
+
+ const bool is_normal = ELEM(shgroup->type, DRW_SHG_NORMAL);
+
+ if (!is_normal) {
+ shgroup_dynamic_batch_from_calls(shgroup);
+ }
+
+ release_texture_slots();
+ release_ubo_slots();
+
+ drw_state_set((pass_state & shgroup->state_extra_disable) | shgroup->state_extra);
+ drw_stencil_set(shgroup->stencil_mask);
+
+ /* Binding Uniform */
+ /* Don't check anything, Interface should already contain the least uniform as possible */
+ for (DRWUniform *uni = interface->uniforms; uni; uni = uni->next) {
+ switch (uni->type) {
+ case DRW_UNIFORM_SHORT_TO_INT:
+ val = (int)*((short *)uni->value);
+ GPU_shader_uniform_vector_int(
+ shgroup->shader, uni->location, uni->length, uni->arraysize, (int *)&val);
+ break;
+ case DRW_UNIFORM_SHORT_TO_FLOAT:
+ fval = (float)*((short *)uni->value);
+ GPU_shader_uniform_vector(
+ shgroup->shader, uni->location, uni->length, uni->arraysize, (float *)&fval);
+ break;
+ case DRW_UNIFORM_BOOL:
+ case DRW_UNIFORM_INT:
+ GPU_shader_uniform_vector_int(
+ shgroup->shader, uni->location, uni->length, uni->arraysize, (int *)uni->value);
+ break;
+ case DRW_UNIFORM_FLOAT:
+ case DRW_UNIFORM_MAT3:
+ case DRW_UNIFORM_MAT4:
+ GPU_shader_uniform_vector(
+ shgroup->shader, uni->location, uni->length, uni->arraysize, (float *)uni->value);
+ break;
+ case DRW_UNIFORM_TEXTURE:
+ tex = (GPUTexture *)uni->value;
+ BLI_assert(tex);
+ bind_texture(tex);
+ GPU_shader_uniform_texture(shgroup->shader, uni->location, tex);
+ break;
+ case DRW_UNIFORM_BUFFER:
+ if (!DRW_state_is_fbo()) {
+ break;
+ }
+ tex = *((GPUTexture **)uni->value);
+ BLI_assert(tex);
+ bind_texture(tex);
+ GPU_shader_uniform_texture(shgroup->shader, uni->location, tex);
+ break;
+ case DRW_UNIFORM_BLOCK:
+ ubo = (GPUUniformBuffer *)uni->value;
+ bind_ubo(ubo);
+ GPU_shader_uniform_buffer(shgroup->shader, uni->location, ubo);
+ break;
+ }
+ }
+
+#ifdef USE_GPU_SELECT
+ /* use the first item because of selection we only ever add one */
+# define GPU_SELECT_LOAD_IF_PICKSEL(_call) \
+ if ((G.f & G_PICKSEL) && (_call)) { \
+ GPU_select_load_id((_call)->head.select_id); \
+ } ((void)0)
+
+# define GPU_SELECT_LOAD_IF_PICKSEL_LIST(_shgroup, _start, _count) \
+ _start = 0; \
+ _count = _shgroup->interface.instance_count; \
+ int *select_id = NULL; \
+ if (G.f & G_PICKSEL) { \
+ if (_shgroup->interface.override_selectid == -1) { \
+ select_id = DRW_instance_data_get(_shgroup->interface.inst_selectid); \
+ switch (_shgroup->type) { \
+ case DRW_SHG_TRIANGLE_BATCH: _count = 3; break; \
+ case DRW_SHG_LINE_BATCH: _count = 2; break; \
+ default: _count = 1; break; \
+ } \
+ } \
+ else { \
+ GPU_select_load_id(_shgroup->interface.override_selectid); \
+ } \
+ } \
+ while (_start < _shgroup->interface.instance_count) { \
+ if (select_id) { \
+ GPU_select_load_id(select_id[_start]); \
+ }
+
+# define GPU_SELECT_LOAD_IF_PICKSEL_LIST_END(_start, _count) \
+ _start += _count; \
+ }
+
+#else
+# define GPU_SELECT_LOAD_IF_PICKSEL(call)
+# define GPU_SELECT_LOAD_IF_PICKSEL_LIST_END(start, count)
+# define GPU_SELECT_LOAD_IF_PICKSEL_LIST(_shgroup, _start, _count) \
+ _start = 0; \
+ _count = _shgroup->interface.instance_count;
+
+#endif
+
+ /* Rendering Calls */
+ if (!is_normal) {
+ /* Replacing multiple calls with only one */
+ float obmat[4][4];
+ unit_m4(obmat);
+
+ if (shgroup->type == DRW_SHG_INSTANCE &&
+ (interface->instance_count > 0 || interface->instance_batch != NULL))
+ {
+ if (interface->instance_batch != NULL) {
+ GPU_SELECT_LOAD_IF_PICKSEL((DRWCall *)shgroup->calls_first);
+ draw_geometry(shgroup, shgroup->instance_geom, obmat, shgroup->instance_data, 0, 0);
+ }
+ else {
+ unsigned int count, start;
+ GPU_SELECT_LOAD_IF_PICKSEL_LIST(shgroup, start, count)
+ {
+ draw_geometry(shgroup, shgroup->instance_geom, obmat, shgroup->instance_data, start, count);
+ }
+ GPU_SELECT_LOAD_IF_PICKSEL_LIST_END(start, count)
+ }
+ }
+ else {
+ /* Some dynamic batch can have no geom (no call to aggregate) */
+ if (shgroup->batch_geom) {
+ unsigned int count, start;
+ GPU_SELECT_LOAD_IF_PICKSEL_LIST(shgroup, start, count)
+ {
+ draw_geometry(shgroup, shgroup->batch_geom, obmat, NULL, start, count);
+ }
+ GPU_SELECT_LOAD_IF_PICKSEL_LIST_END(start, count)
+ }
+ }
+ }
+ else {
+ for (DRWCall *call = shgroup->calls_first; call; call = call->head.prev) {
+ bool neg_scale = is_negative_m4(call->obmat);
+
+ /* Negative scale objects */
+ if (neg_scale) {
+ glFrontFace(DST.backface);
+ }
+
+ GPU_SELECT_LOAD_IF_PICKSEL(call);
+
+ if (call->head.type == DRW_CALL_SINGLE) {
+ draw_geometry(shgroup, call->geometry, call->obmat, call->ob_data, 0, 0);
+ }
+ else {
+ BLI_assert(call->head.type == DRW_CALL_GENERATE);
+ DRWCallGenerate *callgen = ((DRWCallGenerate *)call);
+ draw_geometry_prepare(shgroup, callgen->obmat, NULL, NULL);
+ callgen->geometry_fn(shgroup, draw_geometry_execute, callgen->user_data);
+ }
+
+ /* Reset state */
+ if (neg_scale) {
+ glFrontFace(DST.frontface);
+ }
+ }
+ }
+
+ /* TODO: remove, (currently causes alpha issue with sculpt, need to investigate) */
+ DRW_state_reset();
+}
+
+static void drw_draw_pass_ex(DRWPass *pass, DRWShadingGroup *start_group, DRWShadingGroup *end_group)
+{
+ /* Start fresh */
+ DST.shader = NULL;
+
+ drw_state_set(pass->state);
+
+ DRW_stats_query_start(pass->name);
+
+ for (DRWShadingGroup *shgroup = start_group; shgroup; shgroup = shgroup->next) {
+ draw_shgroup(shgroup, pass->state);
+ /* break if upper limit */
+ if (shgroup == end_group) {
+ break;
+ }
+ }
+
+ /* Clear Bound textures */
+ for (int i = 0; i < GPU_max_textures(); i++) {
+ if (RST.bound_texs[i] != NULL) {
+ GPU_texture_unbind(RST.bound_texs[i]);
+ RST.bound_texs[i] = NULL;
+ }
+ }
+
+ if (DST.shader) {
+ GPU_shader_unbind();
+ DST.shader = NULL;
+ }
+
+ DRW_stats_query_end();
+}
+
+void DRW_draw_pass(DRWPass *pass)
+{
+ drw_draw_pass_ex(pass, pass->shgroups, pass->shgroups_last);
+}
+
+/* Draw only a subset of shgroups. Used in special situations as grease pencil strokes */
+void DRW_draw_pass_subset(DRWPass *pass, DRWShadingGroup *start_group, DRWShadingGroup *end_group)
+{
+ drw_draw_pass_ex(pass, start_group, end_group);
+}
+
+void DRW_draw_callbacks_pre_scene(void)
+{
+ RegionView3D *rv3d = DST.draw_ctx.rv3d;
+
+ gpuLoadProjectionMatrix(rv3d->winmat);
+ gpuLoadMatrix(rv3d->viewmat);
+}
+
+void DRW_draw_callbacks_post_scene(void)
+{
+ RegionView3D *rv3d = DST.draw_ctx.rv3d;
+
+ gpuLoadProjectionMatrix(rv3d->winmat);
+ gpuLoadMatrix(rv3d->viewmat);
+}
+
+/* Reset state to not interfer with other UI drawcall */
+void DRW_state_reset_ex(DRWState state)
+{
+ DST.state = ~state;
+ drw_state_set(state);
+}
+
+void DRW_state_reset(void)
+{
+ /* Reset blending function */
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
+ DRW_state_reset_ex(DRW_STATE_DEFAULT);
+}
+
+/* NOTE : Make sure to reset after use! */
+void DRW_state_invert_facing(void)
+{
+ SWAP(GLenum, DST.backface, DST.frontface);
+ glFrontFace(DST.frontface);
+}
+
+/**
+ * This only works if DRWPasses have been tagged with DRW_STATE_CLIP_PLANES,
+ * and if the shaders have support for it (see usage of gl_ClipDistance).
+ * Be sure to call DRW_state_clip_planes_reset() after you finish drawing.
+ **/
+void DRW_state_clip_planes_add(float plane_eq[4])
+{
+ copy_v4_v4(DST.clip_planes_eq[DST.num_clip_planes++], plane_eq);
+}
+
+void DRW_state_clip_planes_reset(void)
+{
+ DST.num_clip_planes = 0;
+}
+
+/** \} */
+
+
+struct DRWTextStore *DRW_text_cache_ensure(void)
+{
+ BLI_assert(DST.text_store_p);
+ if (*DST.text_store_p == NULL) {
+ *DST.text_store_p = DRW_text_cache_create();
+ }
+ return *DST.text_store_p;
+}
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Settings
+ * \{ */
+
+bool DRW_object_is_renderable(Object *ob)
+{
+ Scene *scene = DST.draw_ctx.scene;
+ Object *obedit = scene->obedit;
+
+ BLI_assert(BKE_object_is_visible(ob, OB_VISIBILITY_CHECK_UNKNOWN_RENDER_MODE));
+
+ if (ob->type == OB_MESH) {
+ if (ob == obedit) {
+ IDProperty *props = BKE_layer_collection_engine_evaluated_get(ob, COLLECTION_MODE_EDIT, "");
+ bool do_show_occlude_wire = BKE_collection_engine_property_value_get_bool(props, "show_occlude_wire");
+ if (do_show_occlude_wire) {
+ return false;
+ }
+ bool do_show_weight = BKE_collection_engine_property_value_get_bool(props, "show_weight");
+ if (do_show_weight) {
+ return false;
+ }
+ }
+ }
+
+ return true;
+}
+
+/**
+ * Return whether this object is visible depending if
+ * we are rendering or drawing in the viewport.
+ */
+bool DRW_check_object_visible_within_active_context(Object *ob)
+{
+ const eObjectVisibilityCheck mode = DRW_state_is_scene_render() ?
+ OB_VISIBILITY_CHECK_FOR_RENDER :
+ OB_VISIBILITY_CHECK_FOR_VIEWPORT;
+ return BKE_object_is_visible(ob, mode);
+}
+
+bool DRW_object_is_flat_normal(const Object *ob)
+{
+ if (ob->type == OB_MESH) {
+ const Mesh *me = ob->data;
+ if (me->mpoly && me->mpoly[0].flag & ME_SMOOTH) {
+ return false;
+ }
+ }
+ return true;
+}
+
+/**
+ * Return true if the object has its own draw mode.
+ * Caller must check this is active */
+int DRW_object_is_mode_shade(const Object *ob)
+{
+ BLI_assert(ob == DST.draw_ctx.obact);
+ if ((DST.draw_ctx.object_mode & OB_MODE_EDIT) == 0) {
+ if (DST.draw_ctx.object_mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT)) {
+ if ((DST.draw_ctx.v3d->flag2 & V3D_SHOW_MODE_SHADE_OVERRIDE) == 0) {
+ return true;
+ }
+ else {
+ return false;
+ }
+ }
+ }
+ return -1;
+}
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Framebuffers (DRW_framebuffer)
+ * \{ */
+
+static GPUTextureFormat convert_tex_format(
+ int fbo_format,
+ int *r_channels, bool *r_is_depth)
+{
+ *r_is_depth = ELEM(fbo_format, DRW_TEX_DEPTH_16, DRW_TEX_DEPTH_24, DRW_TEX_DEPTH_24_STENCIL_8);
+
+ switch (fbo_format) {
+ case DRW_TEX_R_16: *r_channels = 1; return GPU_R16F;
+ case DRW_TEX_R_32: *r_channels = 1; return GPU_R32F;
+ case DRW_TEX_RG_8: *r_channels = 2; return GPU_RG8;
+ case DRW_TEX_RG_16: *r_channels = 2; return GPU_RG16F;
+ case DRW_TEX_RG_16I: *r_channels = 2; return GPU_RG16I;
+ case DRW_TEX_RG_32: *r_channels = 2; return GPU_RG32F;
+ case DRW_TEX_RGBA_8: *r_channels = 4; return GPU_RGBA8;
+ case DRW_TEX_RGBA_16: *r_channels = 4; return GPU_RGBA16F;
+ case DRW_TEX_RGBA_32: *r_channels = 4; return GPU_RGBA32F;
+ case DRW_TEX_DEPTH_16: *r_channels = 1; return GPU_DEPTH_COMPONENT16;
+ case DRW_TEX_DEPTH_24: *r_channels = 1; return GPU_DEPTH_COMPONENT24;
+ case DRW_TEX_DEPTH_24_STENCIL_8: *r_channels = 1; return GPU_DEPTH24_STENCIL8;
+ case DRW_TEX_DEPTH_32: *r_channels = 1; return GPU_DEPTH_COMPONENT32F;
+ case DRW_TEX_RGB_11_11_10: *r_channels = 3; return GPU_R11F_G11F_B10F;
+ default:
+ BLI_assert(false && "Texture format unsupported as render target!");
+ *r_channels = 4; return GPU_RGBA8;
+ }
+}
+
+struct GPUFrameBuffer *DRW_framebuffer_create(void)
+{
+ return GPU_framebuffer_create();
+}
+
+void DRW_framebuffer_init(
+ struct GPUFrameBuffer **fb, void *engine_type, int width, int height,
+ DRWFboTexture textures[MAX_FBO_TEX], int textures_len)
+{
+ BLI_assert(textures_len <= MAX_FBO_TEX);
+ BLI_assert(width > 0 && height > 0);
+
+ bool create_fb = false;
+ int color_attachment = -1;
+
+ if (!*fb) {
+ *fb = GPU_framebuffer_create();
+ create_fb = true;
+ }
+
+ for (int i = 0; i < textures_len; ++i) {
+ int channels;
+ bool is_depth;
+ bool create_tex = false;
+
+ DRWFboTexture fbotex = textures[i];
+ bool is_temp = (fbotex.flag & DRW_TEX_TEMP) != 0;
+
+ GPUTextureFormat gpu_format = convert_tex_format(fbotex.format, &channels, &is_depth);
+
+ if (!*fbotex.tex || is_temp) {
+ /* Temp textures need to be queried each frame, others not. */
+ if (is_temp) {
+ *fbotex.tex = GPU_viewport_texture_pool_query(
+ DST.viewport, engine_type, width, height, channels, gpu_format);
+ }
+ else {
+ *fbotex.tex = GPU_texture_create_2D_custom(
+ width, height, channels, gpu_format, NULL, NULL);
+ create_tex = true;
+ }
+ }
+
+ if (!is_depth) {
+ ++color_attachment;
+ }
+
+ if (create_fb || create_tex) {
+ drw_texture_set_parameters(*fbotex.tex, fbotex.flag);
+ GPU_framebuffer_texture_attach(*fb, *fbotex.tex, color_attachment, 0);
+ }
+ }
+
+ if (create_fb && (textures_len > 0)) {
+ if (!GPU_framebuffer_check_valid(*fb, NULL)) {
+ printf("Error invalid framebuffer\n");
+ }
+
+ /* Detach temp textures */
+ for (int i = 0; i < textures_len; ++i) {
+ DRWFboTexture fbotex = textures[i];
+
+ if ((fbotex.flag & DRW_TEX_TEMP) != 0) {
+ GPU_framebuffer_texture_detach(*fbotex.tex);
+ }
+ }
+
+ if (DST.default_framebuffer != NULL) {
+ GPU_framebuffer_bind(DST.default_framebuffer);
+ }
+ }
+}
+
+void DRW_framebuffer_free(struct GPUFrameBuffer *fb)
+{
+ GPU_framebuffer_free(fb);
+}
+
+void DRW_framebuffer_bind(struct GPUFrameBuffer *fb)
+{
+ GPU_framebuffer_bind(fb);
+}
+
+void DRW_framebuffer_clear(bool color, bool depth, bool stencil, float clear_col[4], float clear_depth)
+{
+ if (color) {
+ glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+ glClearColor(clear_col[0], clear_col[1], clear_col[2], clear_col[3]);
+ }
+ if (depth) {
+ glDepthMask(GL_TRUE);
+ glClearDepth(clear_depth);
+ }
+ if (stencil) {
+ glStencilMask(0xFF);
+ }
+ glClear(((color) ? GL_COLOR_BUFFER_BIT : 0) |
+ ((depth) ? GL_DEPTH_BUFFER_BIT : 0) |
+ ((stencil) ? GL_STENCIL_BUFFER_BIT : 0));
+}
+
+void DRW_framebuffer_read_data(int x, int y, int w, int h, int channels, int slot, float *data)
+{
+ GLenum type;
+ switch (channels) {
+ case 1: type = GL_RED; break;
+ case 2: type = GL_RG; break;
+ case 3: type = GL_RGB; break;
+ case 4: type = GL_RGBA; break;
+ default:
+ BLI_assert(false && "wrong number of read channels");
+ return;
+ }
+ glReadBuffer(GL_COLOR_ATTACHMENT0 + slot);
+ glReadPixels(x, y, w, h, type, GL_FLOAT, data);
+}
+
+void DRW_framebuffer_read_depth(int x, int y, int w, int h, float *data)
+{
+ GLenum type = GL_DEPTH_COMPONENT;
+
+ glReadBuffer(GL_COLOR_ATTACHMENT0); /* This is OK! */
+ glReadPixels(x, y, w, h, type, GL_FLOAT, data);
+}
+
+void DRW_framebuffer_texture_attach(struct GPUFrameBuffer *fb, GPUTexture *tex, int slot, int mip)
+{
+ GPU_framebuffer_texture_attach(fb, tex, slot, mip);
+}
+
+void DRW_framebuffer_texture_layer_attach(struct GPUFrameBuffer *fb, struct GPUTexture *tex, int slot, int layer, int mip)
+{
+ GPU_framebuffer_texture_layer_attach(fb, tex, slot, layer, mip);
+}
+
+void DRW_framebuffer_cubeface_attach(struct GPUFrameBuffer *fb, GPUTexture *tex, int slot, int face, int mip)
+{
+ GPU_framebuffer_texture_cubeface_attach(fb, tex, slot, face, mip);
+}
+
+void DRW_framebuffer_texture_detach(GPUTexture *tex)
+{
+ GPU_framebuffer_texture_detach(tex);
+}
+
+void DRW_framebuffer_blit(struct GPUFrameBuffer *fb_read, struct GPUFrameBuffer *fb_write, bool depth, bool stencil)
+{
+ GPU_framebuffer_blit(fb_read, 0, fb_write, 0, depth, stencil);
+}
+
+void DRW_framebuffer_recursive_downsample(
+ struct GPUFrameBuffer *fb, struct GPUTexture *tex, int num_iter,
+ void (*callback)(void *userData, int level), void *userData)
+{
+ GPU_framebuffer_recursive_downsample(fb, tex, num_iter, callback, userData);
+}
+
+void DRW_framebuffer_viewport_size(struct GPUFrameBuffer *UNUSED(fb_read), int x, int y, int w, int h)
+{
+ glViewport(x, y, w, h);
+}
+
+/* Use color management profile to draw texture to framebuffer */
+void DRW_transform_to_display(GPUTexture *tex)
+{
+ drw_state_set(DRW_STATE_WRITE_COLOR);
+
+ Gwn_VertFormat *vert_format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(vert_format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int texco = GWN_vertformat_attr_add(vert_format, "texCoord", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ const float dither = 1.0f;
+
+ bool use_ocio = false;
+
+ /* View transform is already applied for offscreen, don't apply again, see: T52046 */
+ if (!(DST.options.is_image_render && !DST.options.is_scene_render)) {
+ Scene *scene = DST.draw_ctx.scene;
+ use_ocio = IMB_colormanagement_setup_glsl_draw_from_space(
+ &scene->view_settings, &scene->display_settings, NULL, dither, false);
+ }
+
+ if (!use_ocio) {
+ /* View transform is already applied for offscreen, don't apply again, see: T52046 */
+ if (DST.options.is_image_render && !DST.options.is_scene_render) {
+ immBindBuiltinProgram(GPU_SHADER_2D_IMAGE_COLOR);
+ immUniformColor4f(1.0f, 1.0f, 1.0f, 1.0f);
+ }
+ else {
+ immBindBuiltinProgram(GPU_SHADER_2D_IMAGE_LINEAR_TO_SRGB);
+ }
+ immUniform1i("image", 0);
+ }
+
+ GPU_texture_bind(tex, 0); /* OCIO texture bind point is 0 */
+
+ float mat[4][4];
+ unit_m4(mat);
+ immUniformMatrix4fv("ModelViewProjectionMatrix", mat);
+
+ /* Full screen triangle */
+ immBegin(GWN_PRIM_TRIS, 3);
+ immAttrib2f(texco, 0.0f, 0.0f);
+ immVertex2f(pos, -1.0f, -1.0f);
+
+ immAttrib2f(texco, 2.0f, 0.0f);
+ immVertex2f(pos, 3.0f, -1.0f);
+
+ immAttrib2f(texco, 0.0f, 2.0f);
+ immVertex2f(pos, -1.0f, 3.0f);
+ immEnd();
+
+ GPU_texture_unbind(tex);
+
+ if (use_ocio) {
+ IMB_colormanagement_finish_glsl_draw();
+ }
+ else {
+ immUnbindProgram();
+ }
+}
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Viewport (DRW_viewport)
+ * \{ */
+
+static void *DRW_viewport_engine_data_ensure(void *engine_type)
+{
+ void *data = GPU_viewport_engine_data_get(DST.viewport, engine_type);
+
+ if (data == NULL) {
+ data = GPU_viewport_engine_data_create(DST.viewport, engine_type);
+ }
+ return data;
+}
+
+void DRW_engine_viewport_data_size_get(
+ const void *engine_type_v,
+ int *r_fbl_len, int *r_txl_len, int *r_psl_len, int *r_stl_len)
+{
+ const DrawEngineType *engine_type = engine_type_v;
+
+ if (r_fbl_len) {
+ *r_fbl_len = engine_type->vedata_size->fbl_len;
+ }
+ if (r_txl_len) {
+ *r_txl_len = engine_type->vedata_size->txl_len;
+ }
+ if (r_psl_len) {
+ *r_psl_len = engine_type->vedata_size->psl_len;
+ }
+ if (r_stl_len) {
+ *r_stl_len = engine_type->vedata_size->stl_len;
+ }
+}
+
+const float *DRW_viewport_size_get(void)
+{
+ return &DST.size[0];
+}
+
+const float *DRW_viewport_screenvecs_get(void)
+{
+ return &DST.screenvecs[0][0];
+}
+
+const float *DRW_viewport_pixelsize_get(void)
+{
+ return &DST.pixsize;
+}
+
+static void drw_viewport_cache_resize(void)
+{
+ /* Release the memiter before clearing the mempools that references them */
+ GPU_viewport_cache_release(DST.viewport);
+
+ if (DST.vmempool != NULL) {
+ BLI_mempool_clear_ex(DST.vmempool->calls, BLI_mempool_count(DST.vmempool->calls));
+ BLI_mempool_clear_ex(DST.vmempool->calls_generate, BLI_mempool_count(DST.vmempool->calls_generate));
+ BLI_mempool_clear_ex(DST.vmempool->shgroups, BLI_mempool_count(DST.vmempool->shgroups));
+ BLI_mempool_clear_ex(DST.vmempool->uniforms, BLI_mempool_count(DST.vmempool->uniforms));
+ BLI_mempool_clear_ex(DST.vmempool->passes, BLI_mempool_count(DST.vmempool->passes));
+ }
+
+ DRW_instance_data_list_free_unused(DST.idatalist);
+ DRW_instance_data_list_resize(DST.idatalist);
+}
+
+/* It also stores viewport variable to an immutable place: DST
+ * This is because a cache uniform only store reference
+ * to its value. And we don't want to invalidate the cache
+ * if this value change per viewport */
+static void drw_viewport_var_init(void)
+{
+ RegionView3D *rv3d = DST.draw_ctx.rv3d;
+
+ /* Refresh DST.size */
+ if (DST.viewport) {
+ int size[2];
+ GPU_viewport_size_get(DST.viewport, size);
+ DST.size[0] = size[0];
+ DST.size[1] = size[1];
+
+ DefaultFramebufferList *fbl = (DefaultFramebufferList *)GPU_viewport_framebuffer_list_get(DST.viewport);
+ DST.default_framebuffer = fbl->default_fb;
+
+ DST.vmempool = GPU_viewport_mempool_get(DST.viewport);
+
+ if (DST.vmempool->calls == NULL) {
+ DST.vmempool->calls = BLI_mempool_create(sizeof(DRWCall), 0, 512, 0);
+ }
+ if (DST.vmempool->calls_generate == NULL) {
+ DST.vmempool->calls_generate = BLI_mempool_create(sizeof(DRWCallGenerate), 0, 512, 0);
+ }
+ if (DST.vmempool->shgroups == NULL) {
+ DST.vmempool->shgroups = BLI_mempool_create(sizeof(DRWShadingGroup), 0, 256, 0);
+ }
+ if (DST.vmempool->uniforms == NULL) {
+ DST.vmempool->uniforms = BLI_mempool_create(sizeof(DRWUniform), 0, 512, 0);
+ }
+ if (DST.vmempool->passes == NULL) {
+ DST.vmempool->passes = BLI_mempool_create(sizeof(DRWPass), 0, 64, 0);
+ }
+
+ DST.idatalist = GPU_viewport_instance_data_list_get(DST.viewport);
+ DRW_instance_data_list_reset(DST.idatalist);
+ }
+ else {
+ DST.size[0] = 0;
+ DST.size[1] = 0;
+
+ DST.default_framebuffer = NULL;
+ DST.vmempool = NULL;
+ }
+
+ if (rv3d != NULL) {
+ /* Refresh DST.screenvecs */
+ copy_v3_v3(DST.screenvecs[0], rv3d->viewinv[0]);
+ copy_v3_v3(DST.screenvecs[1], rv3d->viewinv[1]);
+ normalize_v3(DST.screenvecs[0]);
+ normalize_v3(DST.screenvecs[1]);
+
+ /* Refresh DST.pixelsize */
+ DST.pixsize = rv3d->pixsize;
+ }
+
+ /* Reset facing */
+ DST.frontface = GL_CCW;
+ DST.backface = GL_CW;
+ glFrontFace(DST.frontface);
+
+ if (DST.draw_ctx.scene->obedit) {
+ ED_view3d_init_mats_rv3d(DST.draw_ctx.scene->obedit, rv3d);
+ }
+
+ /* Alloc array of texture reference. */
+ if (RST.bound_texs == NULL) {
+ RST.bound_texs = MEM_callocN(sizeof(GPUTexture *) * GPU_max_textures(), "Bound GPUTexture refs");
+ }
+ if (RST.bound_tex_slots == NULL) {
+ RST.bound_tex_slots = MEM_callocN(sizeof(bool) * GPU_max_textures(), "Bound Texture Slots");
+ }
+
+ memset(viewport_matrix_override.override, 0x0, sizeof(viewport_matrix_override.override));
+ memset(DST.common_instance_data, 0x0, sizeof(DST.common_instance_data));
+
+ /* Not a viewport variable, we could split this out. */
+ {
+ if (DST.draw_ctx.object_mode & OB_MODE_POSE) {
+ DST.draw_ctx.object_pose = DST.draw_ctx.obact;
+ }
+ else if (DST.draw_ctx.object_mode & OB_MODE_WEIGHT_PAINT) {
+ DST.draw_ctx.object_pose = BKE_object_pose_armature_get(DST.draw_ctx.obact);
+ }
+ else {
+ DST.draw_ctx.object_pose = NULL;
+ }
+ }
+}
+
+void DRW_viewport_matrix_get(float mat[4][4], DRWViewportMatrixType type)
+{
+ RegionView3D *rv3d = DST.draw_ctx.rv3d;
+ BLI_assert(type >= DRW_MAT_PERS && type <= DRW_MAT_WININV);
+
+ if (viewport_matrix_override.override[type]) {
+ copy_m4_m4(mat, viewport_matrix_override.mat[type]);
+ }
+ else {
+ BLI_assert(rv3d != NULL); /* Can't use this in render mode. */
+ switch (type) {
+ case DRW_MAT_PERS:
+ copy_m4_m4(mat, rv3d->persmat);
+ break;
+ case DRW_MAT_PERSINV:
+ copy_m4_m4(mat, rv3d->persinv);
+ break;
+ case DRW_MAT_VIEW:
+ copy_m4_m4(mat, rv3d->viewmat);
+ break;
+ case DRW_MAT_VIEWINV:
+ copy_m4_m4(mat, rv3d->viewinv);
+ break;
+ case DRW_MAT_WIN:
+ copy_m4_m4(mat, rv3d->winmat);
+ break;
+ case DRW_MAT_WININV:
+ invert_m4_m4(mat, rv3d->winmat);
+ break;
+ default:
+ BLI_assert(!"Matrix type invalid");
+ break;
+ }
+ }
+}
+
+void DRW_viewport_matrix_override_set(float mat[4][4], DRWViewportMatrixType type)
+{
+ copy_m4_m4(viewport_matrix_override.mat[type], mat);
+ viewport_matrix_override.override[type] = true;
+}
+
+void DRW_viewport_matrix_override_unset(DRWViewportMatrixType type)
+{
+ viewport_matrix_override.override[type] = false;
+}
+
+bool DRW_viewport_is_persp_get(void)
+{
+ RegionView3D *rv3d = DST.draw_ctx.rv3d;
+ if (rv3d) {
+ return rv3d->is_persp;
+ }
+ else {
+ if (viewport_matrix_override.override[DRW_MAT_WIN]) {
+ return viewport_matrix_override.mat[DRW_MAT_WIN][3][3] == 0.0f;
+ }
+ }
+ BLI_assert(0);
+ return false;
+}
+
+DefaultFramebufferList *DRW_viewport_framebuffer_list_get(void)
+{
+ return GPU_viewport_framebuffer_list_get(DST.viewport);
+}
+
+DefaultTextureList *DRW_viewport_texture_list_get(void)
+{
+ return GPU_viewport_texture_list_get(DST.viewport);
+}
+
+void DRW_viewport_request_redraw(void)
+{
+ GPU_viewport_tag_update(DST.viewport);
+}
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+/** \name ViewLayers (DRW_scenelayer)
+ * \{ */
+
+void *DRW_view_layer_engine_data_get(DrawEngineType *engine_type)
+{
+ for (ViewLayerEngineData *sled = DST.draw_ctx.view_layer->drawdata.first; sled; sled = sled->next) {
+ if (sled->engine_type == engine_type) {
+ return sled->storage;
+ }
+ }
+ return NULL;
+}
+
+void **DRW_view_layer_engine_data_ensure(DrawEngineType *engine_type, void (*callback)(void *storage))
+{
+ ViewLayerEngineData *sled;
+
+ for (sled = DST.draw_ctx.view_layer->drawdata.first; sled; sled = sled->next) {
+ if (sled->engine_type == engine_type) {
+ return &sled->storage;
+ }
+ }
+
+ sled = MEM_callocN(sizeof(ViewLayerEngineData), "ViewLayerEngineData");
+ sled->engine_type = engine_type;
+ sled->free = callback;
+ BLI_addtail(&DST.draw_ctx.view_layer->drawdata, sled);
+
+ return &sled->storage;
+}
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Objects (DRW_object)
+ * \{ */
+
+ObjectEngineData *DRW_object_engine_data_get(Object *ob, DrawEngineType *engine_type)
+{
+ for (ObjectEngineData *oed = ob->drawdata.first; oed; oed = oed->next) {
+ if (oed->engine_type == engine_type) {
+ return oed;
+ }
+ }
+ return NULL;
+}
+
+ObjectEngineData *DRW_object_engine_data_ensure(
+ Object *ob,
+ DrawEngineType *engine_type,
+ size_t size,
+ ObjectEngineDataInitCb init_cb,
+ ObjectEngineDataFreeCb free_cb)
+{
+ BLI_assert(size >= sizeof(ObjectEngineData));
+ /* Try to re-use existing data. */
+ ObjectEngineData *oed = DRW_object_engine_data_get(ob, engine_type);
+ if (oed != NULL) {
+ return oed;
+ }
+ /* Allocate new data. */
+ if ((ob->base_flag & BASE_FROMDUPLI) != 0) {
+ /* NOTE: data is not persistent in this case. It is reset each redraw. */
+ BLI_assert(free_cb == NULL); /* No callback allowed. */
+ /* Round to sizeof(float) for DRW_instance_data_request(). */
+ const size_t t = sizeof(float) - 1;
+ size = (size + t) & ~t;
+ size_t fsize = size / sizeof(float);
+ if (DST.common_instance_data[fsize] == NULL) {
+ DST.common_instance_data[fsize] = DRW_instance_data_request(DST.idatalist, fsize, 16);
+ }
+ oed = (ObjectEngineData *)DRW_instance_data_next(DST.common_instance_data[fsize]);
+ memset(oed, 0, size);
+ }
+ else {
+ oed = MEM_callocN(size, "ObjectEngineData");
+ }
+ oed->engine_type = engine_type;
+ oed->free = free_cb;
+ /* Perform user-side initialization, if needed. */
+ if (init_cb != NULL) {
+ init_cb(oed);
+ }
+ /* Register in the list. */
+ BLI_addtail(&ob->drawdata, oed);
+ return oed;
+}
+
+/* XXX There is definitly some overlap between this and DRW_object_engine_data_ensure.
+ * We should get rid of one of the two. */
+LampEngineData *DRW_lamp_engine_data_ensure(Object *ob, RenderEngineType *engine_type)
+{
+ BLI_assert(ob->type == OB_LAMP);
+
+ Scene *scene = DST.draw_ctx.scene;
+
+ /* TODO Dupliobjects */
+ /* TODO Should be per scenelayer */
+ return GPU_lamp_engine_data_get(scene, ob, NULL, engine_type);
+}
+
+void DRW_lamp_engine_data_free(LampEngineData *led)
+{
+ GPU_lamp_engine_data_free(led);
+}
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Rendering (DRW_engines)
+ * \{ */
+
+static void drw_engines_init(void)
+{
+ for (LinkData *link = DST.enabled_engines.first; link; link = link->next) {
+ DrawEngineType *engine = link->data;
+ ViewportEngineData *data = DRW_viewport_engine_data_ensure(engine);
+ PROFILE_START(stime);
+
+ if (engine->engine_init) {
+ engine->engine_init(data);
+ }
+
+ PROFILE_END_UPDATE(data->init_time, stime);
+ }
+}
+
+static void drw_engines_cache_init(void)
+{
+ for (LinkData *link = DST.enabled_engines.first; link; link = link->next) {
+ DrawEngineType *engine = link->data;
+ ViewportEngineData *data = DRW_viewport_engine_data_ensure(engine);
+
+ if (data->text_draw_cache) {
+ DRW_text_cache_destroy(data->text_draw_cache);
+ data->text_draw_cache = NULL;
+ }
+ if (DST.text_store_p == NULL) {
+ DST.text_store_p = &data->text_draw_cache;
+ }
+
+ if (engine->cache_init) {
+ engine->cache_init(data);
+ }
+ }
+}
+
+static void drw_engines_cache_populate(Object *ob)
+{
+ for (LinkData *link = DST.enabled_engines.first; link; link = link->next) {
+ DrawEngineType *engine = link->data;
+ ViewportEngineData *data = DRW_viewport_engine_data_ensure(engine);
+
+ if (engine->id_update) {
+ engine->id_update(data, &ob->id);
+ }
+
+ if (engine->cache_populate) {
+ engine->cache_populate(data, ob);
+ }
+ }
+}
+
+static void drw_engines_cache_finish(void)
+{
+ for (LinkData *link = DST.enabled_engines.first; link; link = link->next) {
+ DrawEngineType *engine = link->data;
+ ViewportEngineData *data = DRW_viewport_engine_data_ensure(engine);
+
+ if (engine->cache_finish) {
+ engine->cache_finish(data);
+ }
+ }
+}
+
+static void drw_engines_draw_background(void)
+{
+ for (LinkData *link = DST.enabled_engines.first; link; link = link->next) {
+ DrawEngineType *engine = link->data;
+ ViewportEngineData *data = DRW_viewport_engine_data_ensure(engine);
+
+ if (engine->draw_background) {
+ PROFILE_START(stime);
+
+ DRW_stats_group_start(engine->idname);
+ engine->draw_background(data);
+ DRW_stats_group_end();
+
+ PROFILE_END_UPDATE(data->background_time, stime);
+ return;
+ }
+ }
+
+ /* No draw_background found, doing default background */
+ if (DRW_state_draw_background()) {
+ DRW_draw_background();
+ }
+}
+
+static void drw_engines_draw_scene(void)
+{
+ for (LinkData *link = DST.enabled_engines.first; link; link = link->next) {
+ DrawEngineType *engine = link->data;
+ ViewportEngineData *data = DRW_viewport_engine_data_ensure(engine);
+ PROFILE_START(stime);
+
+ if (engine->draw_scene) {
+ DRW_stats_group_start(engine->idname);
+ engine->draw_scene(data);
+ DRW_stats_group_end();
+ }
+
+ PROFILE_END_UPDATE(data->render_time, stime);
+ }
+}
+
+static void drw_engines_draw_text(void)
+{
+ for (LinkData *link = DST.enabled_engines.first; link; link = link->next) {
+ DrawEngineType *engine = link->data;
+ ViewportEngineData *data = DRW_viewport_engine_data_ensure(engine);
+ PROFILE_START(stime);
+
+ if (data->text_draw_cache) {
+ DRW_text_cache_draw(data->text_draw_cache, DST.draw_ctx.v3d, DST.draw_ctx.ar, false);
+ }
+
+ PROFILE_END_UPDATE(data->render_time, stime);
+ }
+}
+
+#define MAX_INFO_LINES 10
+
+/**
+ * Returns the offset required for the drawing of engines info.
+ */
+int DRW_draw_region_engine_info_offset(void)
+{
+ int lines = 0;
+ for (LinkData *link = DST.enabled_engines.first; link; link = link->next) {
+ DrawEngineType *engine = link->data;
+ ViewportEngineData *data = DRW_viewport_engine_data_ensure(engine);
+
+ /* Count the number of lines. */
+ if (data->info[0] != '\0') {
+ lines++;
+ char *c = data->info;
+ while (*c++ != '\0') {
+ if (*c == '\n') {
+ lines++;
+ }
+ }
+ }
+ }
+ return MIN2(MAX_INFO_LINES, lines) * UI_UNIT_Y;
+}
+
+/**
+ * Actual drawing;
+ */
+void DRW_draw_region_engine_info(void)
+{
+ const char *info_array_final[MAX_INFO_LINES + 1];
+ /* This should be maxium number of engines running at the same time. */
+ char info_array[MAX_INFO_LINES][GPU_INFO_SIZE];
+ int i = 0;
+
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ ARegion *ar = draw_ctx->ar;
+ float fill_color[4] = {0.0f, 0.0f, 0.0f, 0.25f};
+
+ UI_GetThemeColor3fv(TH_HIGH_GRAD, fill_color);
+ mul_v3_fl(fill_color, fill_color[3]);
+
+ for (LinkData *link = DST.enabled_engines.first; link; link = link->next) {
+ DrawEngineType *engine = link->data;
+ ViewportEngineData *data = DRW_viewport_engine_data_ensure(engine);
+
+ if (data->info[0] != '\0') {
+ char *chr_current = data->info;
+ char *chr_start = chr_current;
+ int line_len = 0;
+
+ while (*chr_current++ != '\0') {
+ line_len++;
+ if (*chr_current == '\n') {
+ BLI_strncpy(info_array[i++], chr_start, line_len + 1);
+ /* Re-start counting. */
+ chr_start = chr_current + 1;
+ line_len = -1;
+ }
+ }
+
+ BLI_strncpy(info_array[i++], chr_start, line_len + 1);
+
+ if (i >= MAX_INFO_LINES) {
+ break;
+ }
+ }
+ }
+
+ for (int j = 0; j < i; j++) {
+ info_array_final[j] = info_array[j];
+ }
+ info_array_final[i] = NULL;
+
+ if (info_array[0] != NULL) {
+ ED_region_info_draw_multiline(ar, info_array_final, fill_color, true);
+ }
+}
+
+#undef MAX_INFO_LINES
+
+static void use_drw_engine(DrawEngineType *engine)
+{
+ LinkData *ld = MEM_callocN(sizeof(LinkData), "enabled engine link data");
+ ld->data = engine;
+ BLI_addtail(&DST.enabled_engines, ld);
+}
+
+/* TODO revisit this when proper layering is implemented */
+/* Gather all draw engines needed and store them in DST.enabled_engines
+ * That also define the rendering order of engines */
+static void drw_engines_enable_from_engine(RenderEngineType *engine_type)
+{
+ /* TODO layers */
+ if (engine_type->draw_engine != NULL) {
+ use_drw_engine(engine_type->draw_engine);
+ }
+
+ if ((engine_type->flag & RE_INTERNAL) == 0) {
+ drw_engines_enable_external();
+ }
+}
+
+static void drw_engines_enable_from_object_mode(void)
+{
+ use_drw_engine(&draw_engine_object_type);
+}
+
+static void drw_engines_enable_from_mode(int mode)
+{
+ switch (mode) {
+ case CTX_MODE_EDIT_MESH:
+ use_drw_engine(&draw_engine_edit_mesh_type);
+ break;
+ case CTX_MODE_EDIT_CURVE:
+ use_drw_engine(&draw_engine_edit_curve_type);
+ break;
+ case CTX_MODE_EDIT_SURFACE:
+ use_drw_engine(&draw_engine_edit_surface_type);
+ break;
+ case CTX_MODE_EDIT_TEXT:
+ use_drw_engine(&draw_engine_edit_text_type);
+ break;
+ case CTX_MODE_EDIT_ARMATURE:
+ use_drw_engine(&draw_engine_edit_armature_type);
+ break;
+ case CTX_MODE_EDIT_METABALL:
+ use_drw_engine(&draw_engine_edit_metaball_type);
+ break;
+ case CTX_MODE_EDIT_LATTICE:
+ use_drw_engine(&draw_engine_edit_lattice_type);
+ break;
+ case CTX_MODE_POSE:
+ use_drw_engine(&draw_engine_pose_type);
+ break;
+ case CTX_MODE_SCULPT:
+ use_drw_engine(&draw_engine_sculpt_type);
+ break;
+ case CTX_MODE_PAINT_WEIGHT:
+ use_drw_engine(&draw_engine_pose_type);
+ use_drw_engine(&draw_engine_paint_weight_type);
+ break;
+ case CTX_MODE_PAINT_VERTEX:
+ use_drw_engine(&draw_engine_paint_vertex_type);
+ break;
+ case CTX_MODE_PAINT_TEXTURE:
+ use_drw_engine(&draw_engine_paint_texture_type);
+ break;
+ case CTX_MODE_PARTICLE:
+ use_drw_engine(&draw_engine_particle_type);
+ break;
+ case CTX_MODE_OBJECT:
+ break;
+ default:
+ BLI_assert(!"Draw mode invalid");
+ break;
+ }
+}
+
+/**
+ * Use for select and depth-drawing.
+ */
+static void drw_engines_enable_basic(void)
+{
+ use_drw_engine(DRW_engine_viewport_basic_type.draw_engine);
+}
+
+/**
+ * Use for external render engines.
+ */
+static void drw_engines_enable_external(void)
+{
+ use_drw_engine(DRW_engine_viewport_external_type.draw_engine);
+}
+
+static void drw_engines_enable(const Scene *scene, ViewLayer *view_layer, RenderEngineType *engine_type)
+{
+ Object *obact = OBACT(view_layer);
+ const int mode = CTX_data_mode_enum_ex(scene->obedit, obact, DST.draw_ctx.object_mode);
+
+ drw_engines_enable_from_engine(engine_type);
+
+ if (DRW_state_draw_support()) {
+ drw_engines_enable_from_object_mode();
+ drw_engines_enable_from_mode(mode);
+ }
+}
+
+static void drw_engines_disable(void)
+{
+ BLI_freelistN(&DST.enabled_engines);
+}
+
+static unsigned int DRW_engines_get_hash(void)
+{
+ unsigned int hash = 0;
+ /* The cache depends on enabled engines */
+ /* FIXME : if collision occurs ... segfault */
+ for (LinkData *link = DST.enabled_engines.first; link; link = link->next) {
+ DrawEngineType *engine = link->data;
+ hash += BLI_ghashutil_strhash_p(engine->idname);
+ }
+
+ return hash;
+}
+
+static void draw_stat(rcti *rect, int u, int v, const char *txt, const int size)
+{
+ BLF_draw_default_ascii(rect->xmin + (1 + u * 5) * U.widget_unit,
+ rect->ymax - (3 + v) * U.widget_unit, 0.0f,
+ txt, size);
+}
+
+/* CPU stats */
+static void drw_debug_cpu_stats(void)
+{
+ int u, v;
+ double init_tot_time = 0.0, background_tot_time = 0.0, render_tot_time = 0.0, tot_time = 0.0;
+ /* local coordinate visible rect inside region, to accomodate overlapping ui */
+ rcti rect;
+ struct ARegion *ar = DST.draw_ctx.ar;
+ ED_region_visible_rect(ar, &rect);
+
+ UI_FontThemeColor(BLF_default(), TH_TEXT_HI);
+
+ /* row by row */
+ v = 0; u = 0;
+ /* Label row */
+ char col_label[32];
+ sprintf(col_label, "Engine");
+ draw_stat(&rect, u++, v, col_label, sizeof(col_label));
+ sprintf(col_label, "Init");
+ draw_stat(&rect, u++, v, col_label, sizeof(col_label));
+ sprintf(col_label, "Background");
+ draw_stat(&rect, u++, v, col_label, sizeof(col_label));
+ sprintf(col_label, "Render");
+ draw_stat(&rect, u++, v, col_label, sizeof(col_label));
+ sprintf(col_label, "Total (w/o cache)");
+ draw_stat(&rect, u++, v, col_label, sizeof(col_label));
+ v++;
+
+ /* Engines rows */
+ char time_to_txt[16];
+ for (LinkData *link = DST.enabled_engines.first; link; link = link->next) {
+ u = 0;
+ DrawEngineType *engine = link->data;
+ ViewportEngineData *data = DRW_viewport_engine_data_ensure(engine);
+
+ draw_stat(&rect, u++, v, engine->idname, sizeof(engine->idname));
+
+ init_tot_time += data->init_time;
+ sprintf(time_to_txt, "%.2fms", data->init_time);
+ draw_stat(&rect, u++, v, time_to_txt, sizeof(time_to_txt));
+
+ background_tot_time += data->background_time;
+ sprintf(time_to_txt, "%.2fms", data->background_time);
+ draw_stat(&rect, u++, v, time_to_txt, sizeof(time_to_txt));
+
+ render_tot_time += data->render_time;
+ sprintf(time_to_txt, "%.2fms", data->render_time);
+ draw_stat(&rect, u++, v, time_to_txt, sizeof(time_to_txt));
+
+ tot_time += data->init_time + data->background_time + data->render_time;
+ sprintf(time_to_txt, "%.2fms", data->init_time + data->background_time + data->render_time);
+ draw_stat(&rect, u++, v, time_to_txt, sizeof(time_to_txt));
+ v++;
+ }
+
+ /* Totals row */
+ u = 0;
+ sprintf(col_label, "Sub Total");
+ draw_stat(&rect, u++, v, col_label, sizeof(col_label));
+ sprintf(time_to_txt, "%.2fms", init_tot_time);
+ draw_stat(&rect, u++, v, time_to_txt, sizeof(time_to_txt));
+ sprintf(time_to_txt, "%.2fms", background_tot_time);
+ draw_stat(&rect, u++, v, time_to_txt, sizeof(time_to_txt));
+ sprintf(time_to_txt, "%.2fms", render_tot_time);
+ draw_stat(&rect, u++, v, time_to_txt, sizeof(time_to_txt));
+ sprintf(time_to_txt, "%.2fms", tot_time);
+ draw_stat(&rect, u++, v, time_to_txt, sizeof(time_to_txt));
+ v += 2;
+
+ u = 0;
+ sprintf(col_label, "Cache Time");
+ draw_stat(&rect, u++, v, col_label, sizeof(col_label));
+ sprintf(time_to_txt, "%.2fms", DST.cache_time);
+ draw_stat(&rect, u++, v, time_to_txt, sizeof(time_to_txt));
+}
+
+/* Display GPU time for each passes */
+static void drw_debug_gpu_stats(void)
+{
+ /* local coordinate visible rect inside region, to accomodate overlapping ui */
+ rcti rect;
+ struct ARegion *ar = DST.draw_ctx.ar;
+ ED_region_visible_rect(ar, &rect);
+
+ UI_FontThemeColor(BLF_default(), TH_TEXT_HI);
+
+ int v = BLI_listbase_count(&DST.enabled_engines) + 5;
+
+ char stat_string[32];
+
+ /* Memory Stats */
+ unsigned int tex_mem = GPU_texture_memory_usage_get();
+ unsigned int vbo_mem = GWN_vertbuf_get_memory_usage();
+
+ sprintf(stat_string, "GPU Memory");
+ draw_stat(&rect, 0, v, stat_string, sizeof(stat_string));
+ sprintf(stat_string, "%.2fMB", (double)(tex_mem + vbo_mem) / 1000000.0);
+ draw_stat(&rect, 1, v++, stat_string, sizeof(stat_string));
+ sprintf(stat_string, " |--> Textures");
+ draw_stat(&rect, 0, v, stat_string, sizeof(stat_string));
+ sprintf(stat_string, "%.2fMB", (double)tex_mem / 1000000.0);
+ draw_stat(&rect, 1, v++, stat_string, sizeof(stat_string));
+ sprintf(stat_string, " |--> Meshes");
+ draw_stat(&rect, 0, v, stat_string, sizeof(stat_string));
+ sprintf(stat_string, "%.2fMB", (double)vbo_mem / 1000000.0);
+ draw_stat(&rect, 1, v++, stat_string, sizeof(stat_string));
+
+ /* Pre offset for stats_draw */
+ rect.ymax -= (3 + ++v) * U.widget_unit;
+
+ /* Rendering Stats */
+ DRW_stats_draw(&rect);
+}
+
+/* -------------------------------------------------------------------- */
+
+/** \name View Update
+ * \{ */
+
+void DRW_notify_view_update(const DRWUpdateContext *update_ctx)
+{
+ RenderEngineType *engine_type = update_ctx->engine_type;
+ ARegion *ar = update_ctx->ar;
+ View3D *v3d = update_ctx->v3d;
+ RegionView3D *rv3d = ar->regiondata;
+ Depsgraph *depsgraph = update_ctx->depsgraph;
+ Scene *scene = update_ctx->scene;
+ ViewLayer *view_layer = update_ctx->view_layer;
+
+ if (rv3d->viewport == NULL) {
+ return;
+ }
+
+
+ /* Reset before using it. */
+ memset(&DST, 0x0, sizeof(DST));
+
+ DST.viewport = rv3d->viewport;
+ DST.draw_ctx = (DRWContextState){
+ ar, rv3d, v3d, scene, view_layer, OBACT(view_layer), engine_type, depsgraph, OB_MODE_OBJECT,
+ NULL,
+ };
+
+ drw_engines_enable(scene, view_layer, engine_type);
+
+ for (LinkData *link = DST.enabled_engines.first; link; link = link->next) {
+ DrawEngineType *draw_engine = link->data;
+ ViewportEngineData *data = DRW_viewport_engine_data_ensure(draw_engine);
+
+ if (draw_engine->view_update) {
+ draw_engine->view_update(data);
+ }
+ }
+
+ DST.viewport = NULL;
+
+ drw_engines_disable();
+}
+
+/** \} */
+
+/** \name ID Update
+ * \{ */
+
+/* TODO(sergey): This code is run for each changed ID (including the ones which
+ * are changed indirectly via update flush. Need to find a way to make this to
+ * run really fast, hopefully without any memory allocations on a heap
+ * Idea here could be to run every known engine's id_update() and make them
+ * do nothing if there is no engine-specific data yet.
+ */
+void DRW_notify_id_update(const DRWUpdateContext *update_ctx, ID *id)
+{
+ RenderEngineType *engine_type = update_ctx->engine_type;
+ ARegion *ar = update_ctx->ar;
+ View3D *v3d = update_ctx->v3d;
+ RegionView3D *rv3d = ar->regiondata;
+ Depsgraph *depsgraph = update_ctx->depsgraph;
+ Scene *scene = update_ctx->scene;
+ ViewLayer *view_layer = update_ctx->view_layer;
+ if (rv3d->viewport == NULL) {
+ return;
+ }
+ /* Reset before using it. */
+ memset(&DST, 0x0, sizeof(DST));
+ DST.viewport = rv3d->viewport;
+ DST.draw_ctx = (DRWContextState){
+ ar, rv3d, v3d, scene, view_layer, OBACT(view_layer), engine_type, depsgraph, OB_MODE_OBJECT, NULL,
+ };
+ drw_engines_enable(scene, view_layer, engine_type);
+ for (LinkData *link = DST.enabled_engines.first; link; link = link->next) {
+ DrawEngineType *draw_engine = link->data;
+ ViewportEngineData *data = DRW_viewport_engine_data_ensure(draw_engine);
+ if (draw_engine->id_update) {
+ draw_engine->id_update(data, id);
+ }
+ }
+ DST.viewport = NULL;
+ drw_engines_disable();
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+
+/** \name Main Draw Loops (DRW_draw)
+ * \{ */
+
+/* Everything starts here.
+ * This function takes care of calling all cache and rendering functions
+ * for each relevant engine / mode engine. */
+void DRW_draw_view(const bContext *C)
+{
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
+ RenderEngineType *engine_type = CTX_data_engine_type(C);
+ ARegion *ar = CTX_wm_region(C);
+ View3D *v3d = CTX_wm_view3d(C);
+
+ /* Reset before using it. */
+ memset(&DST, 0x0, sizeof(DST));
+ DRW_draw_render_loop_ex(eval_ctx.depsgraph, engine_type, ar, v3d, eval_ctx.object_mode, C);
+}
+
+/**
+ * Used for both regular and off-screen drawing.
+ * Need to reset DST before calling this function
+ */
+void DRW_draw_render_loop_ex(
+ struct Depsgraph *depsgraph,
+ RenderEngineType *engine_type,
+ ARegion *ar, View3D *v3d, const eObjectMode object_mode,
+ const bContext *evil_C)
+{
+ Scene *scene = DEG_get_evaluated_scene(depsgraph);
+ ViewLayer *view_layer = DEG_get_evaluated_view_layer(depsgraph);
+ RegionView3D *rv3d = ar->regiondata;
+
+ DST.draw_ctx.evil_C = evil_C;
+
+ DST.viewport = rv3d->viewport;
+ v3d->zbuf = true;
+
+ /* Setup viewport */
+ GPU_viewport_engines_data_validate(DST.viewport, DRW_engines_get_hash());
+
+ DST.draw_ctx = (DRWContextState){
+ ar, rv3d, v3d, scene, view_layer, OBACT(view_layer), engine_type, depsgraph, object_mode,
+
+ /* reuse if caller sets */
+ DST.draw_ctx.evil_C,
+ };
+
+ drw_viewport_var_init();
+
+ /* Get list of enabled engines */
+ drw_engines_enable(scene, view_layer, engine_type);
+
+ /* Update ubos */
+ DRW_globals_update();
+
+ /* Init engines */
+ drw_engines_init();
+
+ /* Cache filling */
+ {
+ PROFILE_START(stime);
+ drw_engines_cache_init();
+
+ DEG_OBJECT_ITER_FOR_RENDER_ENGINE(depsgraph, ob, DRW_iterator_mode_get())
+ {
+ drw_engines_cache_populate(ob);
+ }
+ DEG_OBJECT_ITER_FOR_RENDER_ENGINE_END
+
+ drw_engines_cache_finish();
+ PROFILE_END_ACCUM(DST.cache_time, stime);
+ }
+
+ DRW_stats_begin();
+
+ /* Start Drawing */
+ DRW_state_reset();
+
+ drw_engines_draw_background();
+
+ /* WIP, single image drawn over the camera view (replace) */
+ bool do_bg_image = false;
+ if (rv3d->persp == RV3D_CAMOB) {
+ Object *cam_ob = v3d->camera;
+ if (cam_ob && cam_ob->type == OB_CAMERA) {
+ Camera *cam = cam_ob->data;
+ if (!BLI_listbase_is_empty(&cam->bg_images)) {
+ do_bg_image = true;
+ }
+ }
+ }
+
+ if (do_bg_image) {
+ ED_view3d_draw_bgpic_test(scene, depsgraph, ar, v3d, false, true);
+ }
+
+
+ DRW_draw_callbacks_pre_scene();
+ if (DST.draw_ctx.evil_C) {
+ ED_region_draw_cb_draw(DST.draw_ctx.evil_C, DST.draw_ctx.ar, REGION_DRAW_PRE_VIEW);
+ }
+
+ drw_engines_draw_scene();
+
+ DRW_draw_callbacks_post_scene();
+ if (DST.draw_ctx.evil_C) {
+ ED_region_draw_cb_draw(DST.draw_ctx.evil_C, DST.draw_ctx.ar, REGION_DRAW_POST_VIEW);
+ }
+
+ DRW_state_reset();
+
+ drw_engines_draw_text();
+
+ if (DST.draw_ctx.evil_C) {
+ /* needed so manipulator isn't obscured */
+ glDisable(GL_DEPTH_TEST);
+ DRW_draw_manipulator_3d();
+
+ DRW_draw_region_info();
+
+ /* Draw 2D after region info so we can draw on top of the camera passepartout overlay.
+ * 'DRW_draw_region_info' sets the projection in pixel-space. */
+ DRW_draw_manipulator_2d();
+ glEnable(GL_DEPTH_TEST);
+ }
+
+ DRW_stats_reset();
+
+ if (do_bg_image) {
+ ED_view3d_draw_bgpic_test(scene, depsgraph, ar, v3d, true, true);
+ }
+
+ if (G.debug_value > 20) {
+ drw_debug_cpu_stats();
+ drw_debug_gpu_stats();
+ }
+
+ DRW_state_reset();
+ drw_engines_disable();
+
+ drw_viewport_cache_resize();
+
+#ifdef DEBUG
+ /* Avoid accidental reuse. */
+ memset(&DST, 0xFF, sizeof(DST));
+#endif
+}
+
+void DRW_draw_render_loop(
+ struct Depsgraph *depsgraph,
+ ARegion *ar, View3D *v3d, const eObjectMode object_mode)
+{
+ /* Reset before using it. */
+ memset(&DST, 0x0, sizeof(DST));
+
+ Scene *scene = DEG_get_evaluated_scene(depsgraph);
+ RenderEngineType *engine_type = RE_engines_find(scene->view_render.engine_id);
+
+ DRW_draw_render_loop_ex(depsgraph, engine_type, ar, v3d, object_mode, NULL);
+}
+
+/* @viewport CAN be NULL, in this case we create one. */
+void DRW_draw_render_loop_offscreen(
+ struct Depsgraph *depsgraph, RenderEngineType *engine_type,
+ ARegion *ar, View3D *v3d, const eObjectMode object_mode,
+ const bool draw_background, GPUOffScreen *ofs,
+ GPUViewport *viewport)
+{
+ RegionView3D *rv3d = ar->regiondata;
+
+ /* backup */
+ void *backup_viewport = rv3d->viewport;
+ {
+ /* backup (_never_ use rv3d->viewport) */
+ if (viewport == NULL) {
+ rv3d->viewport = GPU_viewport_create_from_offscreen(ofs);
+ }
+ else {
+ rv3d->viewport = viewport;
+ }
+ }
+
+ /* Reset before using it. */
+ memset(&DST, 0x0, sizeof(DST));
+ DST.options.is_image_render = true;
+ DST.options.draw_background = draw_background;
+ DRW_draw_render_loop_ex(depsgraph, engine_type, ar, v3d, object_mode, NULL);
+
+ /* restore */
+ {
+ if (viewport == NULL) {
+ /* don't free data owned by 'ofs' */
+ GPU_viewport_clear_from_offscreen(rv3d->viewport);
+ GPU_viewport_free(rv3d->viewport);
+ MEM_freeN(rv3d->viewport);
+ }
+
+ rv3d->viewport = backup_viewport;
+ }
+
+ /* we need to re-bind (annoying!) */
+ GPU_offscreen_bind(ofs, false);
+}
+
+void DRW_render_to_image(RenderEngine *re, struct Depsgraph *depsgraph)
+{
+ Scene *scene = DEG_get_evaluated_scene(depsgraph);
+ ViewLayer *view_layer = DEG_get_evaluated_view_layer(depsgraph);
+ RenderEngineType *engine_type = re->type;
+ DrawEngineType *draw_engine_type = engine_type->draw_engine;
+ RenderData *r = &scene->r;
+ Render *render = re->re;
+ const EvaluationContext *eval_ctx = RE_GetEvalCtx(render);
+
+ /* Reset before using it. */
+ memset(&DST, 0x0, sizeof(DST));
+ DST.options.is_image_render = true;
+ DST.options.is_scene_render = true;
+ DST.options.draw_background = scene->r.alphamode == R_ADDSKY;
+
+ DST.draw_ctx = (DRWContextState){
+ NULL, NULL, NULL, scene, view_layer, OBACT(view_layer), engine_type, depsgraph, eval_ctx->object_mode, NULL,
+ };
+
+ DST.viewport = GPU_viewport_create();
+ const int size[2] = {(r->size * r->xsch) / 100, (r->size * r->ysch) / 100};
+ GPU_viewport_size_set(DST.viewport, size);
+
+ drw_viewport_var_init();
+
+ ViewportEngineData *data = DRW_viewport_engine_data_ensure(draw_engine_type);
+
+ /* set default viewport */
+ gpuPushAttrib(GPU_ENABLE_BIT | GPU_VIEWPORT_BIT);
+ glDisable(GL_SCISSOR_TEST);
+ glViewport(0, 0, size[0], size[1]);
+
+ if ((r->scemode & R_MULTIVIEW) != 0) {
+ for (SceneRenderView *srv = r->views.first; srv; srv = srv->next) {
+ if (BKE_scene_multiview_is_render_view_active(r, srv) == false)
+ continue;
+
+ RE_SetActiveRenderView(render, srv->name);
+
+ engine_type->draw_engine->render_to_image(data, re, depsgraph);
+ }
+ }
+ else {
+ engine_type->draw_engine->render_to_image(data, re, depsgraph);
+ }
+
+ /* TODO grease pencil */
+
+ GPU_viewport_free(DST.viewport);
+ MEM_freeN(DST.viewport);
+
+ DRW_state_reset();
+ /* FIXME GL_DEPTH_TEST is enabled by default but it seems
+ * to trigger some bad behaviour / artifacts if it's turned
+ * on at this point. */
+ glDisable(GL_DEPTH_TEST);
+
+ /* Restore Drawing area. */
+ gpuPopAttrib();
+ glEnable(GL_SCISSOR_TEST);
+ GPU_framebuffer_restore();
+
+#ifdef DEBUG
+ /* Avoid accidental reuse. */
+ memset(&DST, 0xFF, sizeof(DST));
+#endif
+}
+
+void DRW_render_object_iter(
+ void *vedata, RenderEngine *engine, struct Depsgraph *depsgraph,
+ void (*callback)(void *vedata, Object *ob, RenderEngine *engine, struct Depsgraph *depsgraph))
+{
+ DEG_OBJECT_ITER_FOR_RENDER_ENGINE(depsgraph, ob, DRW_iterator_mode_get())
+ {
+ callback(vedata, ob, engine, depsgraph);
+ }
+ DEG_OBJECT_ITER_FOR_RENDER_ENGINE_END
+}
+
+/**
+ * object mode select-loop, see: ED_view3d_draw_select_loop (legacy drawing).
+ */
+void DRW_draw_select_loop(
+ struct Depsgraph *depsgraph,
+ ARegion *ar, View3D *v3d, const eObjectMode object_mode,
+ bool UNUSED(use_obedit_skip), bool UNUSED(use_nearest), const rcti *rect)
+{
+ Scene *scene = DEG_get_evaluated_scene(depsgraph);
+ RenderEngineType *engine_type = RE_engines_find(scene->view_render.engine_id);
+ ViewLayer *view_layer = DEG_get_evaluated_view_layer(depsgraph);
+#ifndef USE_GPU_SELECT
+ UNUSED_VARS(vc, scene, view_layer, v3d, ar, rect);
+#else
+ RegionView3D *rv3d = ar->regiondata;
+
+ /* Reset before using it. */
+ memset(&DST, 0x0, sizeof(DST));
+
+ /* backup (_never_ use rv3d->viewport) */
+ void *backup_viewport = rv3d->viewport;
+ rv3d->viewport = NULL;
+
+ bool use_obedit = false;
+ int obedit_mode = 0;
+ if (scene->obedit && scene->obedit->type == OB_MBALL) {
+ use_obedit = true;
+ obedit_mode = CTX_MODE_EDIT_METABALL;
+ }
+ else if ((scene->obedit && scene->obedit->type == OB_ARMATURE)) {
+ /* if not drawing sketch, draw bones */
+ // if (!BDR_drawSketchNames(vc))
+ {
+ use_obedit = true;
+ obedit_mode = CTX_MODE_EDIT_ARMATURE;
+ }
+ }
+
+ struct GPUViewport *viewport = GPU_viewport_create();
+ GPU_viewport_size_set(viewport, (const int[2]){BLI_rcti_size_x(rect), BLI_rcti_size_y(rect)});
+
+ bool cache_is_dirty;
+ DST.viewport = viewport;
+ v3d->zbuf = true;
+
+ DST.options.is_select = true;
+
+ /* Get list of enabled engines */
+ if (use_obedit) {
+ drw_engines_enable_from_mode(obedit_mode);
+ }
+ else {
+ drw_engines_enable_basic();
+ drw_engines_enable_from_object_mode();
+ }
+
+ /* Setup viewport */
+ cache_is_dirty = true;
+
+ /* Instead of 'DRW_context_state_init(C, &DST.draw_ctx)', assign from args */
+ DST.draw_ctx = (DRWContextState){
+ ar, rv3d, v3d, scene, view_layer, OBACT(view_layer), engine_type, depsgraph, object_mode,
+ (bContext *)NULL,
+ };
+
+ drw_viewport_var_init();
+
+ /* Update ubos */
+ DRW_globals_update();
+
+ /* Init engines */
+ drw_engines_init();
+
+ /* TODO : tag to refresh by the dependency graph */
+ /* ideally only refresh when objects are added/removed */
+ /* or render properties / materials change */
+ if (cache_is_dirty) {
+ drw_engines_cache_init();
+
+ if (use_obedit) {
+ drw_engines_cache_populate(scene->obedit);
+ }
+ else {
+ DEG_OBJECT_ITER(depsgraph, ob, DRW_iterator_mode_get(),
+ DEG_ITER_OBJECT_FLAG_LINKED_DIRECTLY |
+ DEG_ITER_OBJECT_FLAG_VISIBLE |
+ DEG_ITER_OBJECT_FLAG_DUPLI)
+ {
+ if ((ob->base_flag & BASE_SELECTABLED) != 0) {
+ DRW_select_load_id(ob->select_color);
+ drw_engines_cache_populate(ob);
+ }
+ }
+ DEG_OBJECT_ITER_END
+ }
+
+ drw_engines_cache_finish();
+ }
+
+ /* Start Drawing */
+ DRW_state_reset();
+ DRW_draw_callbacks_pre_scene();
+ drw_engines_draw_scene();
+ DRW_draw_callbacks_post_scene();
+
+ DRW_state_reset();
+ drw_engines_disable();
+
+#ifdef DEBUG
+ /* Avoid accidental reuse. */
+ memset(&DST, 0xFF, sizeof(DST));
+#endif
+
+ /* Cleanup for selection state */
+ GPU_viewport_free(viewport);
+ MEM_freeN(viewport);
+
+ /* restore */
+ rv3d->viewport = backup_viewport;
+#endif /* USE_GPU_SELECT */
+}
+
+/**
+ * object mode select-loop, see: ED_view3d_draw_depth_loop (legacy drawing).
+ */
+void DRW_draw_depth_loop(
+ Depsgraph *depsgraph,
+ ARegion *ar, View3D *v3d, const eObjectMode object_mode)
+{
+ Scene *scene = DEG_get_evaluated_scene(depsgraph);
+ RenderEngineType *engine_type = RE_engines_find(scene->view_render.engine_id);
+ ViewLayer *view_layer = DEG_get_evaluated_view_layer(depsgraph);
+ RegionView3D *rv3d = ar->regiondata;
+
+ /* backup (_never_ use rv3d->viewport) */
+ void *backup_viewport = rv3d->viewport;
+ rv3d->viewport = NULL;
+
+ /* Reset before using it. */
+ memset(&DST, 0x0, sizeof(DST));
+
+ struct GPUViewport *viewport = GPU_viewport_create();
+ GPU_viewport_size_set(viewport, (const int[2]){ar->winx, ar->winy});
+
+ bool cache_is_dirty;
+ DST.viewport = viewport;
+ v3d->zbuf = true;
+
+ DST.options.is_depth = true;
+
+ /* Get list of enabled engines */
+ {
+ drw_engines_enable_basic();
+ drw_engines_enable_from_object_mode();
+ }
+
+ /* Setup viewport */
+ cache_is_dirty = true;
+
+ /* Instead of 'DRW_context_state_init(C, &DST.draw_ctx)', assign from args */
+ DST.draw_ctx = (DRWContextState){
+ ar, rv3d, v3d, scene, view_layer, OBACT(view_layer), engine_type, depsgraph, object_mode,
+ (bContext *)NULL,
+ };
+
+ drw_viewport_var_init();
+
+ /* Update ubos */
+ DRW_globals_update();
+
+ /* Init engines */
+ drw_engines_init();
+
+ /* TODO : tag to refresh by the dependency graph */
+ /* ideally only refresh when objects are added/removed */
+ /* or render properties / materials change */
+ if (cache_is_dirty) {
+ drw_engines_cache_init();
+
+ DEG_OBJECT_ITER_FOR_RENDER_ENGINE(depsgraph, ob, DRW_iterator_mode_get())
+ {
+ drw_engines_cache_populate(ob);
+ }
+ DEG_OBJECT_ITER_FOR_RENDER_ENGINE_END
+
+ drw_engines_cache_finish();
+ }
+
+ /* Start Drawing */
+ DRW_state_reset();
+ DRW_draw_callbacks_pre_scene();
+ drw_engines_draw_scene();
+ DRW_draw_callbacks_post_scene();
+
+ DRW_state_reset();
+ drw_engines_disable();
+
+#ifdef DEBUG
+ /* Avoid accidental reuse. */
+ memset(&DST, 0xFF, sizeof(DST));
+#endif
+
+ /* Cleanup for selection state */
+ GPU_viewport_free(viewport);
+ MEM_freeN(viewport);
+
+ /* restore */
+ rv3d->viewport = backup_viewport;
+}
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Draw Manager State (DRW_state)
+ * \{ */
+
+void DRW_state_dfdy_factors_get(float dfdyfac[2])
+{
+ GPU_get_dfdy_factors(dfdyfac);
+}
+
+/**
+ * When false, drawing doesn't output to a pixel buffer
+ * eg: Occlusion queries, or when we have setup a context to draw in already.
+ */
+bool DRW_state_is_fbo(void)
+{
+ return ((DST.default_framebuffer != NULL) || DST.options.is_image_render);
+}
+
+/**
+ * For when engines need to know if this is drawing for selection or not.
+ */
+bool DRW_state_is_select(void)
+{
+ return DST.options.is_select;
+}
+
+bool DRW_state_is_depth(void)
+{
+ return DST.options.is_depth;
+}
+
+/**
+ * Whether we are rendering for an image
+ */
+bool DRW_state_is_image_render(void)
+{
+ return DST.options.is_image_render;
+}
+
+/**
+ * Whether we are rendering only the render engine,
+ * or if we should also render the mode engines.
+ */
+bool DRW_state_is_scene_render(void)
+{
+ BLI_assert(DST.options.is_scene_render ?
+ DST.options.is_image_render : true);
+ return DST.options.is_scene_render;
+}
+
+/**
+ * Gives you the iterator mode to use for depsgraph.
+ */
+eDepsObjectIteratorMode DRW_iterator_mode_get(void)
+{
+ return DRW_state_is_scene_render() ? DEG_ITER_OBJECT_MODE_RENDER :
+ DEG_ITER_OBJECT_MODE_VIEWPORT;
+}
+
+/**
+ * Should text draw in this mode?
+ */
+bool DRW_state_show_text(void)
+{
+ return (DST.options.is_select) == 0 &&
+ (DST.options.is_depth) == 0 &&
+ (DST.options.is_scene_render) == 0;
+}
+
+/**
+ * Should draw support elements
+ * Objects center, selection outline, probe data, ...
+ */
+bool DRW_state_draw_support(void)
+{
+ View3D *v3d = DST.draw_ctx.v3d;
+ return (DRW_state_is_scene_render() == false) &&
+ (v3d != NULL) &&
+ ((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0);
+}
+
+/**
+ * Whether we should render the background
+ */
+bool DRW_state_draw_background(void)
+{
+ if (DRW_state_is_image_render() == false) {
+ return true;
+ }
+ return DST.options.draw_background;
+}
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Context State (DRW_context_state)
+ * \{ */
+
+const DRWContextState *DRW_context_state_get(void)
+{
+ return &DST.draw_ctx;
+}
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Init/Exit (DRW_engines)
+ * \{ */
+
+bool DRW_engine_render_support(DrawEngineType *draw_engine_type)
+{
+ return draw_engine_type->render_to_image;
+}
+
+void DRW_engine_register(DrawEngineType *draw_engine_type)
+{
+ BLI_addtail(&DRW_engines, draw_engine_type);
+}
+
+void DRW_engines_register(void)
+{
+#ifdef WITH_CLAY_ENGINE
+ RE_engines_register(NULL, &DRW_engine_viewport_clay_type);
+#endif
+ RE_engines_register(NULL, &DRW_engine_viewport_eevee_type);
+
+ DRW_engine_register(&draw_engine_object_type);
+ DRW_engine_register(&draw_engine_edit_armature_type);
+ DRW_engine_register(&draw_engine_edit_curve_type);
+ DRW_engine_register(&draw_engine_edit_lattice_type);
+ DRW_engine_register(&draw_engine_edit_mesh_type);
+ DRW_engine_register(&draw_engine_edit_metaball_type);
+ DRW_engine_register(&draw_engine_edit_surface_type);
+ DRW_engine_register(&draw_engine_edit_text_type);
+ DRW_engine_register(&draw_engine_paint_texture_type);
+ DRW_engine_register(&draw_engine_paint_vertex_type);
+ DRW_engine_register(&draw_engine_paint_weight_type);
+ DRW_engine_register(&draw_engine_particle_type);
+ DRW_engine_register(&draw_engine_pose_type);
+ DRW_engine_register(&draw_engine_sculpt_type);
+
+ /* setup callbacks */
+ {
+ /* BKE: mball.c */
+ extern void *BKE_mball_batch_cache_dirty_cb;
+ extern void *BKE_mball_batch_cache_free_cb;
+ /* BKE: curve.c */
+ extern void *BKE_curve_batch_cache_dirty_cb;
+ extern void *BKE_curve_batch_cache_free_cb;
+ /* BKE: mesh.c */
+ extern void *BKE_mesh_batch_cache_dirty_cb;
+ extern void *BKE_mesh_batch_cache_free_cb;
+ /* BKE: lattice.c */
+ extern void *BKE_lattice_batch_cache_dirty_cb;
+ extern void *BKE_lattice_batch_cache_free_cb;
+ /* BKE: particle.c */
+ extern void *BKE_particle_batch_cache_dirty_cb;
+ extern void *BKE_particle_batch_cache_free_cb;
+
+ BKE_mball_batch_cache_dirty_cb = DRW_mball_batch_cache_dirty;
+ BKE_mball_batch_cache_free_cb = DRW_mball_batch_cache_free;
+
+ BKE_curve_batch_cache_dirty_cb = DRW_curve_batch_cache_dirty;
+ BKE_curve_batch_cache_free_cb = DRW_curve_batch_cache_free;
+
+ BKE_mesh_batch_cache_dirty_cb = DRW_mesh_batch_cache_dirty;
+ BKE_mesh_batch_cache_free_cb = DRW_mesh_batch_cache_free;
+
+ BKE_lattice_batch_cache_dirty_cb = DRW_lattice_batch_cache_dirty;
+ BKE_lattice_batch_cache_free_cb = DRW_lattice_batch_cache_free;
+
+ BKE_particle_batch_cache_dirty_cb = DRW_particle_batch_cache_dirty;
+ BKE_particle_batch_cache_free_cb = DRW_particle_batch_cache_free;
+ }
+}
+
+extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
+extern struct GPUTexture *globals_ramp; /* draw_common.c */
+void DRW_engines_free(void)
+{
+ DRW_shape_cache_free();
+ DRW_stats_free();
+
+ DrawEngineType *next;
+ for (DrawEngineType *type = DRW_engines.first; type; type = next) {
+ next = type->next;
+ BLI_remlink(&R_engines, type);
+
+ if (type->engine_free) {
+ type->engine_free();
+ }
+ }
+
+ if (globals_ubo)
+ GPU_uniformbuffer_free(globals_ubo);
+
+ if (globals_ramp)
+ GPU_texture_free(globals_ramp);
+
+ MEM_SAFE_FREE(RST.bound_texs);
+ MEM_SAFE_FREE(RST.bound_tex_slots);
+
+#ifdef WITH_CLAY_ENGINE
+ BLI_remlink(&R_engines, &DRW_engine_viewport_clay_type);
+#endif
+}
+
+/** \} */
diff --git a/source/blender/draw/intern/draw_manager_profiling.c b/source/blender/draw/intern/draw_manager_profiling.c
new file mode 100644
index 00000000000..f9fbbac2e2e
--- /dev/null
+++ b/source/blender/draw/intern/draw_manager_profiling.c
@@ -0,0 +1,242 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file draw_manager_profiling.c
+ * \ingroup draw
+ */
+
+#include "BLI_rect.h"
+#include "BLI_string.h"
+
+#include "BKE_global.h"
+
+#include "BLF_api.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "GPU_glew.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "draw_manager_profiling.h"
+
+#define MAX_TIMER_NAME 32
+#define MAX_NESTED_TIMER 8
+#define CHUNK_SIZE 8
+#define GPU_TIMER_FALLOFF 0.1
+
+typedef struct DRWTimer {
+ GLuint query[2];
+ GLuint64 time_average;
+ char name[MAX_TIMER_NAME];
+ int lvl; /* Hierarchy level for nested timer. */
+ bool is_query; /* Does this timer actually perform queries or is it just a group. */
+} DRWTimer;
+
+static struct DRWTimerPool {
+ DRWTimer *timers;
+ int chunk_count; /* Number of chunk allocated. */
+ int timer_count; /* chunk_count * CHUNK_SIZE */
+ int timer_increment; /* Keep track of where we are in the stack. */
+ int end_increment; /* Keep track of bad usage. */
+ bool is_recording; /* Are we in the render loop? */
+ bool is_querying; /* Keep track of bad usage. */
+} DTP = {NULL};
+
+void DRW_stats_free(void)
+{
+ if (DTP.timers != NULL) {
+ for (int i = 0; i < DTP.timer_count; ++i) {
+ DRWTimer *timer = &DTP.timers[i];
+ glDeleteQueries(2, timer->query);
+ }
+ MEM_freeN(DTP.timers);
+ DTP.timers = NULL;
+ }
+}
+
+void DRW_stats_begin(void)
+{
+ if (G.debug_value > 20) {
+ DTP.is_recording = true;
+ }
+
+ if (DTP.is_recording && DTP.timers == NULL) {
+ DTP.chunk_count = 1;
+ DTP.timer_count = DTP.chunk_count * CHUNK_SIZE;
+ DTP.timers = MEM_callocN(sizeof(DRWTimer) * DTP.timer_count, "DRWTimer stack");
+ }
+ else if (!DTP.is_recording && DTP.timers != NULL) {
+ DRW_stats_free();
+ }
+
+ DTP.is_querying = false;
+ DTP.timer_increment = 0;
+ DTP.end_increment = 0;
+}
+
+static DRWTimer *drw_stats_timer_get(void)
+{
+ if (UNLIKELY(DTP.timer_increment >= DTP.timer_count)) {
+ /* Resize the stack. */
+ DTP.chunk_count++;
+ DTP.timer_count = DTP.chunk_count * CHUNK_SIZE;
+ DTP.timers = MEM_recallocN(DTP.timers, sizeof(DRWTimer) * DTP.timer_count);
+ }
+
+ return &DTP.timers[DTP.timer_increment++];
+}
+
+static void drw_stats_timer_start_ex(const char *name, const bool is_query)
+{
+ if (DTP.is_recording) {
+ DRWTimer *timer = drw_stats_timer_get();
+ BLI_strncpy(timer->name, name, MAX_TIMER_NAME);
+ timer->lvl = DTP.timer_increment - DTP.end_increment - 1;
+ timer->is_query = is_query;
+
+ /* Queries cannot be nested or interleaved. */
+ BLI_assert(!DTP.is_querying);
+ if (timer->is_query) {
+ if (timer->query[0] == 0) {
+ glGenQueries(1, timer->query);
+ }
+
+ /* Issue query for the next frame */
+ glBeginQuery(GL_TIME_ELAPSED, timer->query[0]);
+ DTP.is_querying = true;
+ }
+ }
+}
+
+/* Use this to group the queries. It does NOT keep track
+ * of the time, it only sum what the queries inside it. */
+void DRW_stats_group_start(const char *name)
+{
+ drw_stats_timer_start_ex(name, false);
+}
+
+void DRW_stats_group_end(void)
+{
+ if (DTP.is_recording) {
+ BLI_assert(!DTP.is_querying);
+ DTP.end_increment++;
+ }
+}
+
+/* NOTE: Only call this when no sub timer will be called. */
+void DRW_stats_query_start(const char *name)
+{
+ drw_stats_timer_start_ex(name, true);
+}
+
+void DRW_stats_query_end(void)
+{
+ if (DTP.is_recording) {
+ DTP.end_increment++;
+ BLI_assert(DTP.is_querying);
+ glEndQuery(GL_TIME_ELAPSED);
+ DTP.is_querying = false;
+ }
+}
+
+void DRW_stats_reset(void)
+{
+ BLI_assert((DTP.timer_increment - DTP.end_increment) <= 0 && "You forgot a DRW_stats_group/query_end somewhere!");
+ BLI_assert((DTP.timer_increment - DTP.end_increment) >= 0 && "You forgot a DRW_stats_group/query_start somewhere!");
+
+ if (DTP.is_recording) {
+ GLuint64 lvl_time[MAX_NESTED_TIMER] = {0};
+
+ /* Swap queries for the next frame and sum up each lvl time. */
+ for (int i = DTP.timer_increment - 1; i >= 0; --i) {
+ DRWTimer *timer = &DTP.timers[i];
+ SWAP(GLuint, timer->query[0], timer->query[1]);
+
+ BLI_assert(timer->lvl < MAX_NESTED_TIMER);
+
+ if (timer->is_query) {
+ GLuint64 time;
+ if (timer->query[0] != 0) {
+ glGetQueryObjectui64v(timer->query[0], GL_QUERY_RESULT, &time);
+ }
+ else {
+ time = 1000000000; /* 1ms default */
+ }
+
+ timer->time_average = timer->time_average * (1.0 - GPU_TIMER_FALLOFF) + time * GPU_TIMER_FALLOFF;
+ timer->time_average = MIN2(timer->time_average, 1000000000);
+ }
+ else {
+ timer->time_average = lvl_time[timer->lvl + 1];
+ lvl_time[timer->lvl + 1] = 0;
+ }
+
+ lvl_time[timer->lvl] += timer->time_average;
+ }
+
+ DTP.is_recording = false;
+ }
+}
+
+void DRW_stats_draw(rcti *rect)
+{
+ char stat_string[64];
+ int lvl_index[MAX_NESTED_TIMER];
+ int v = 0;
+
+ BLI_snprintf(stat_string, sizeof(stat_string), "GPU Render Stats");
+ BLF_draw_default_ascii(rect->xmin + 1 * U.widget_unit, rect->ymax - v++ * U.widget_unit, 0.0f, stat_string, sizeof(stat_string));
+
+ for (int i = 0; i < DTP.timer_increment; ++i) {
+ double time_ms, time_percent;
+ DRWTimer *timer = &DTP.timers[i];
+ DRWTimer *timer_parent = (timer->lvl > 0) ? &DTP.timers[lvl_index[timer->lvl - 1]] : NULL;
+
+ /* Only display a number of lvl at a time */
+ if ((G.debug_value - 21) < timer->lvl) continue;
+
+ BLI_assert(timer->lvl < MAX_NESTED_TIMER);
+ lvl_index[timer->lvl] = i;
+
+ time_ms = timer->time_average / 1000000.0;
+
+ if (timer_parent != NULL) {
+ time_percent = ((double)timer->time_average / (double)timer_parent->time_average) * 100.0;
+ }
+ else {
+ time_percent = 100.0;
+ }
+
+ /* avoid very long number */
+ time_ms = MIN2(time_ms, 999.0);
+ time_percent = MIN2(time_percent, 100.0);
+
+ BLI_snprintf(stat_string, sizeof(stat_string), "%s", timer->name);
+ BLF_draw_default_ascii(rect->xmin + (1 + timer->lvl) * U.widget_unit, rect->ymax - v * U.widget_unit, 0.0f, stat_string, sizeof(stat_string));
+ BLI_snprintf(stat_string, sizeof(stat_string), "%.2fms", time_ms);
+ BLF_draw_default_ascii(rect->xmin + (13 + timer->lvl) * U.widget_unit, rect->ymax - v * U.widget_unit, 0.0f, stat_string, sizeof(stat_string));
+ BLI_snprintf(stat_string, sizeof(stat_string), "%.0f", time_percent);
+ BLF_draw_default_ascii(rect->xmin + (17 + timer->lvl) * U.widget_unit, rect->ymax - v * U.widget_unit, 0.0f, stat_string, sizeof(stat_string));
+ v++;
+ }
+} \ No newline at end of file
diff --git a/source/blender/draw/intern/draw_manager_profiling.h b/source/blender/draw/intern/draw_manager_profiling.h
new file mode 100644
index 00000000000..233cd3878d2
--- /dev/null
+++ b/source/blender/draw/intern/draw_manager_profiling.h
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file draw_manager_profiling.h
+ * \ingroup draw
+ */
+
+#ifndef __DRAW_MANAGER_PROFILING_H__
+#define __DRAW_MANAGER_PROFILING_H__
+
+struct rcti;
+
+void DRW_stats_free(void);
+void DRW_stats_begin(void);
+void DRW_stats_reset(void);
+
+void DRW_stats_group_start(const char *name);
+void DRW_stats_group_end(void);
+
+void DRW_stats_query_start(const char *name);
+void DRW_stats_query_end(void);
+
+void DRW_stats_draw(rcti *rect);
+
+#endif /* __DRAW_MANAGER_PROFILING_H__ */
diff --git a/source/blender/draw/intern/draw_manager_text.c b/source/blender/draw/intern/draw_manager_text.c
new file mode 100644
index 00000000000..56255af98ce
--- /dev/null
+++ b/source/blender/draw/intern/draw_manager_text.c
@@ -0,0 +1,199 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+/** \file blender/draw/intern/draw_manager_text.c
+ * \ingroup draw
+ */
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_listbase.h"
+#include "BLI_string.h"
+#include "BLI_math.h"
+
+#include "BIF_gl.h"
+
+#include "GPU_matrix.h"
+
+#include "ED_screen.h"
+#include "ED_view3d.h"
+
+#include "UI_resources.h"
+#include "UI_interface.h"
+
+#include "WM_api.h"
+#include "BLF_api.h"
+
+#include "draw_manager_text.h"
+
+typedef struct ViewCachedString {
+ struct ViewCachedString *next, *prev;
+ float vec[3];
+ union {
+ unsigned char ub[4];
+ int pack;
+ } col;
+ short sco[2];
+ short xoffs;
+ short flag;
+ int str_len;
+
+ /* str is allocated past the end */
+ char str[0];
+} ViewCachedString;
+
+typedef struct DRWTextStore {
+ ListBase list;
+} DRWTextStore;
+
+DRWTextStore *DRW_text_cache_create(void)
+{
+ DRWTextStore *dt = MEM_callocN(sizeof(*dt), __func__);
+ return dt;
+}
+
+void DRW_text_cache_destroy(struct DRWTextStore *dt)
+{
+ BLI_freelistN(&dt->list);
+ MEM_freeN(dt);
+}
+
+void DRW_text_cache_add(
+ DRWTextStore *dt,
+ const float co[3],
+ const char *str, const int str_len,
+ short xoffs, short flag,
+ const unsigned char col[4])
+{
+ int alloc_len;
+ ViewCachedString *vos;
+
+ if (flag & DRW_TEXT_CACHE_STRING_PTR) {
+ BLI_assert(str_len == strlen(str));
+ alloc_len = sizeof(void *);
+ }
+ else {
+ alloc_len = str_len + 1;
+ }
+
+ vos = MEM_mallocN(sizeof(ViewCachedString) + alloc_len, __func__);
+
+ BLI_addtail(&dt->list, vos);
+
+ copy_v3_v3(vos->vec, co);
+ copy_v4_v4_uchar(vos->col.ub, col);
+ vos->xoffs = xoffs;
+ vos->flag = flag;
+ vos->str_len = str_len;
+
+ /* allocate past the end */
+ if (flag & DRW_TEXT_CACHE_STRING_PTR) {
+ memcpy(vos->str, &str, alloc_len);
+ }
+ else {
+ memcpy(vos->str, str, alloc_len);
+ }
+}
+
+void DRW_text_cache_draw(
+ DRWTextStore *dt,
+ View3D *v3d, ARegion *ar, bool depth_write)
+{
+ RegionView3D *rv3d = ar->regiondata;
+ ViewCachedString *vos;
+ int tot = 0;
+
+ /* project first and test */
+ for (vos = dt->list.first; vos; vos = vos->next) {
+ if (ED_view3d_project_short_ex(
+ ar,
+ (vos->flag & DRW_TEXT_CACHE_GLOBALSPACE) ? rv3d->persmat : rv3d->persmatob,
+ (vos->flag & DRW_TEXT_CACHE_LOCALCLIP) != 0,
+ vos->vec, vos->sco,
+ V3D_PROJ_TEST_CLIP_BB | V3D_PROJ_TEST_CLIP_WIN | V3D_PROJ_TEST_CLIP_NEAR) == V3D_PROJ_RET_OK)
+ {
+ tot++;
+ }
+ else {
+ vos->sco[0] = IS_CLIPPED;
+ }
+ }
+
+ if (tot) {
+ int col_pack_prev = 0;
+
+ if (rv3d->rflag & RV3D_CLIPPING) {
+ ED_view3d_clipping_disable();
+ }
+
+ float original_proj[4][4];
+ gpuGetProjectionMatrix(original_proj);
+ wmOrtho2_region_pixelspace(ar);
+
+ gpuPushMatrix();
+ gpuLoadIdentity();
+
+ if (depth_write) {
+ if (v3d->zbuf) glDisable(GL_DEPTH_TEST);
+ }
+ else {
+ glDepthMask(GL_FALSE);
+ }
+
+ const int font_id = BLF_default();
+
+ const uiStyle *style = UI_style_get();
+
+ BLF_size(font_id, style->widget.points * U.pixelsize, U.dpi);
+
+ for (vos = dt->list.first; vos; vos = vos->next) {
+ if (vos->sco[0] != IS_CLIPPED) {
+ if (col_pack_prev != vos->col.pack) {
+ BLF_color4ubv(font_id, vos->col.ub);
+ col_pack_prev = vos->col.pack;
+ }
+
+ BLF_position(
+ font_id,
+ (float)(vos->sco[0] + vos->xoffs), (float)(vos->sco[1]), (depth_write) ? 0.0f : 2.0f);
+
+ ((vos->flag & DRW_TEXT_CACHE_ASCII) ?
+ BLF_draw_ascii :
+ BLF_draw
+ )(font_id,
+ (vos->flag & DRW_TEXT_CACHE_STRING_PTR) ? *((const char **)vos->str) : vos->str,
+ vos->str_len);
+ }
+ }
+
+ if (depth_write) {
+ if (v3d->zbuf) glEnable(GL_DEPTH_TEST);
+ }
+ else {
+ glDepthMask(GL_TRUE);
+ }
+
+ gpuPopMatrix();
+ gpuLoadProjectionMatrix(original_proj);
+
+ if (rv3d->rflag & RV3D_CLIPPING) {
+ ED_view3d_clipping_enable();
+ }
+ }
+}
diff --git a/source/blender/draw/intern/draw_manager_text.h b/source/blender/draw/intern/draw_manager_text.h
new file mode 100644
index 00000000000..a58e167be0d
--- /dev/null
+++ b/source/blender/draw/intern/draw_manager_text.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+/** \file blender/draw/intern/draw_manager_text.h
+ * \ingroup draw
+ */
+
+#ifndef __DRAW_MANAGER_TEXT_H__
+#define __DRAW_MANAGER_TEXT_H__
+
+struct DRWTextStore;
+
+struct DRWTextStore *DRW_text_cache_create(void);
+void DRW_text_cache_destroy(struct DRWTextStore *dt);
+
+void DRW_text_cache_add(
+ struct DRWTextStore *dt,
+ const float co[3],
+ const char *str, const int str_len,
+ short xoffs, short flag,
+ const unsigned char col[4]);
+
+void DRW_text_cache_draw(
+ struct DRWTextStore *dt,
+ struct View3D *v3d, struct ARegion *ar, bool depth_write);
+
+enum {
+ DRW_TEXT_CACHE_ASCII = (1 << 0),
+ DRW_TEXT_CACHE_GLOBALSPACE = (1 << 1),
+ DRW_TEXT_CACHE_LOCALCLIP = (1 << 2),
+ /* reference the string by pointer */
+ DRW_TEXT_CACHE_STRING_PTR = (1 << 3),
+};
+
+/* draw_manager.c */
+struct DRWTextStore *DRW_text_cache_ensure(void);
+
+#endif /* __DRAW_MANAGER_TEXT_H__ */
diff --git a/source/blender/draw/intern/draw_view.c b/source/blender/draw/intern/draw_view.c
new file mode 100644
index 00000000000..d9ffbde38e7
--- /dev/null
+++ b/source/blender/draw/intern/draw_view.c
@@ -0,0 +1,746 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file blender/draw/intern/draw_view.c
+ * \ingroup draw
+ *
+ * Contains dynamic drawing using immediate mode
+ */
+
+#include "DNA_brush_types.h"
+#include "DNA_screen_types.h"
+#include "DNA_userdef_types.h"
+#include "DNA_view3d_types.h"
+
+#include "ED_screen.h"
+#include "ED_transform.h"
+#include "ED_view3d.h"
+
+#include "GPU_draw.h"
+#include "GPU_shader.h"
+#include "GPU_immediate.h"
+#include "GPU_matrix.h"
+
+#include "UI_resources.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "BKE_global.h"
+#include "BKE_object.h"
+#include "BKE_paint.h"
+#include "BKE_unit.h"
+
+#include "DRW_render.h"
+
+#include "view3d_intern.h"
+
+#include "draw_view.h"
+
+/* ******************** region info ***************** */
+
+void DRW_draw_region_info(void)
+{
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ ARegion *ar = draw_ctx->ar;
+ int offset;
+
+ DRW_draw_cursor();
+
+ offset = DRW_draw_region_engine_info_offset();
+
+ view3d_draw_region_info(draw_ctx->evil_C, ar, offset);
+
+ if (offset > 0) {
+ DRW_draw_region_engine_info();
+ }
+}
+
+/* ************************* Grid ************************** */
+
+static void gridline_range(double x0, double dx, double max, int *r_first, int *r_count)
+{
+ /* determine range of gridlines that appear in this Area -- similar calc but separate ranges for x & y
+ * x0 is gridline 0, the axis in screen space
+ * Area covers [0 .. max) pixels */
+
+ int first = (int)ceil(-x0 / dx);
+ int last = (int)floor((max - x0) / dx);
+
+ if (first <= last) {
+ *r_first = first;
+ *r_count = last - first + 1;
+ }
+ else {
+ *r_first = 0;
+ *r_count = 0;
+ }
+}
+
+static int gridline_count(ARegion *ar, double x0, double y0, double dx)
+{
+ /* x0 & y0 establish the "phase" of the grid within this 2D region
+ * dx is the frequency, shared by x & y directions
+ * pass in dx of smallest (highest precision) grid we want to draw */
+
+ int first, x_ct, y_ct;
+
+ gridline_range(x0, dx, ar->winx, &first, &x_ct);
+ gridline_range(y0, dx, ar->winy, &first, &y_ct);
+
+ int total_ct = x_ct + y_ct;
+
+ return total_ct;
+}
+
+static bool drawgrid_draw(
+ ARegion *ar, double x0, double y0, double dx, int skip_mod,
+ unsigned pos, unsigned col, GLubyte col_value[3])
+{
+ /* skip every skip_mod lines relative to each axis; they will be overlaid by another drawgrid_draw
+ * always skip exact x0 & y0 axes; they will be drawn later in color
+ *
+ * set grid color once, just before the first line is drawn
+ * it's harmless to set same color for every line, or every vertex
+ * but if no lines are drawn, color must not be set! */
+
+ const float x_max = (float)ar->winx;
+ const float y_max = (float)ar->winy;
+
+ int first, ct;
+ int x_ct = 0, y_ct = 0; /* count of lines actually drawn */
+ int lines_skipped_for_next_unit = 0;
+
+ /* draw vertical lines */
+ gridline_range(x0, dx, x_max, &first, &ct);
+
+ for (int i = first; i < first + ct; ++i) {
+ if (i == 0)
+ continue;
+ else if (skip_mod && (i % skip_mod) == 0) {
+ ++lines_skipped_for_next_unit;
+ continue;
+ }
+
+ if (x_ct == 0)
+ immAttrib3ub(col, col_value[0], col_value[1], col_value[2]);
+
+ float x = (float)(x0 + i * dx);
+ immVertex2f(pos, x, 0.0f);
+ immVertex2f(pos, x, y_max);
+ ++x_ct;
+ }
+
+ /* draw horizontal lines */
+ gridline_range(y0, dx, y_max, &first, &ct);
+
+ for (int i = first; i < first + ct; ++i) {
+ if (i == 0)
+ continue;
+ else if (skip_mod && (i % skip_mod) == 0) {
+ ++lines_skipped_for_next_unit;
+ continue;
+ }
+
+ if (x_ct + y_ct == 0)
+ immAttrib3ub(col, col_value[0], col_value[1], col_value[2]);
+
+ float y = (float)(y0 + i * dx);
+ immVertex2f(pos, 0.0f, y);
+ immVertex2f(pos, x_max, y);
+ ++y_ct;
+ }
+
+ return lines_skipped_for_next_unit > 0;
+}
+
+#define GRID_MIN_PX_D 6.0
+#define GRID_MIN_PX_F 6.0f
+
+static void drawgrid(UnitSettings *unit, ARegion *ar, View3D *v3d, const char **grid_unit)
+{
+ RegionView3D *rv3d = ar->regiondata;
+
+ double fx = rv3d->persmat[3][0];
+ double fy = rv3d->persmat[3][1];
+ double fw = rv3d->persmat[3][3];
+
+ const double wx = 0.5 * ar->winx; /* use double precision to avoid rounding errors */
+ const double wy = 0.5 * ar->winy;
+
+ double x = wx * fx / fw;
+ double y = wy * fy / fw;
+
+ double vec4[4] = { v3d->grid, v3d->grid, 0.0, 1.0 };
+ mul_m4_v4d(rv3d->persmat, vec4);
+ fx = vec4[0];
+ fy = vec4[1];
+ fw = vec4[3];
+
+ double dx = fabs(x - wx * fx / fw);
+ if (dx == 0) dx = fabs(y - wy * fy / fw);
+
+ x += wx;
+ y += wy;
+
+ /* now x, y, and dx have their final values
+ * (x,y) is the world origin (0,0,0) mapped to Area-relative screen space
+ * dx is the distance in pixels between grid lines -- same for horiz or vert grid lines */
+
+ glLineWidth(1.0f);
+
+#if 0 /* TODO: write to UI/widget depth buffer, not scene depth */
+ glDepthMask(GL_FALSE); /* disable write in zbuffer */
+#endif
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_FLAT_COLOR);
+
+ unsigned char col[3], col2[3];
+ UI_GetThemeColor3ubv(TH_GRID, col);
+
+ if (unit->system) {
+ const void *usys;
+ int len;
+
+ bUnit_GetSystem(unit->system, B_UNIT_LENGTH, &usys, &len);
+
+ bool first = true;
+
+ if (usys) {
+ int i = len;
+ while (i--) {
+ double scalar = bUnit_GetScaler(usys, i);
+
+ double dx_scalar = dx * scalar / (double)unit->scale_length;
+ if (dx_scalar < (GRID_MIN_PX_D * 2.0)) {
+ /* very very small grid items are less useful when dealing with units */
+ continue;
+ }
+
+ if (first) {
+ first = false;
+
+ /* Store the smallest drawn grid size units name so users know how big each grid cell is */
+ *grid_unit = bUnit_GetNameDisplay(usys, i);
+ rv3d->gridview = (float)((scalar * (double)v3d->grid) / (double)unit->scale_length);
+
+ int gridline_ct = gridline_count(ar, x, y, dx_scalar);
+ if (gridline_ct == 0)
+ goto drawgrid_cleanup; /* nothing to draw */
+
+ immBegin(GWN_PRIM_LINES, gridline_ct * 2);
+ }
+
+ float blend_fac = 1.0f - ((GRID_MIN_PX_F * 2.0f) / (float)dx_scalar);
+ /* tweak to have the fade a bit nicer */
+ blend_fac = (blend_fac * blend_fac) * 2.0f;
+ CLAMP(blend_fac, 0.3f, 1.0f);
+
+ UI_GetThemeColorBlend3ubv(TH_HIGH_GRAD, TH_GRID, blend_fac, col2);
+
+ const int skip_mod = (i == 0) ? 0 : (int)round(bUnit_GetScaler(usys, i - 1) / scalar);
+ if (!drawgrid_draw(ar, x, y, dx_scalar, skip_mod, pos, color, col2))
+ break;
+ }
+ }
+ }
+ else {
+ const double sublines = v3d->gridsubdiv;
+ const float sublines_fl = v3d->gridsubdiv;
+
+ int grids_to_draw = 2; /* first the faint fine grid, then the bold coarse grid */
+
+ if (dx < GRID_MIN_PX_D) {
+ rv3d->gridview *= sublines_fl;
+ dx *= sublines;
+ if (dx < GRID_MIN_PX_D) {
+ rv3d->gridview *= sublines_fl;
+ dx *= sublines;
+ if (dx < GRID_MIN_PX_D) {
+ rv3d->gridview *= sublines_fl;
+ dx *= sublines;
+ grids_to_draw = (dx < GRID_MIN_PX_D) ? 0 : 1;
+ }
+ }
+ }
+ else {
+ if (dx > (GRID_MIN_PX_D * 10.0)) { /* start blending in */
+ rv3d->gridview /= sublines_fl;
+ dx /= sublines;
+ if (dx > (GRID_MIN_PX_D * 10.0)) { /* start blending in */
+ rv3d->gridview /= sublines_fl;
+ dx /= sublines;
+ if (dx > (GRID_MIN_PX_D * 10.0)) {
+ grids_to_draw = 1;
+ }
+ }
+ }
+ }
+
+ int gridline_ct = gridline_count(ar, x, y, dx);
+ if (gridline_ct == 0)
+ goto drawgrid_cleanup; /* nothing to draw */
+
+ immBegin(GWN_PRIM_LINES, gridline_ct * 2);
+
+ if (grids_to_draw == 2) {
+ UI_GetThemeColorBlend3ubv(TH_HIGH_GRAD, TH_GRID, dx / (GRID_MIN_PX_D * 6.0), col2);
+ if (drawgrid_draw(ar, x, y, dx, v3d->gridsubdiv, pos, color, col2)) {
+ drawgrid_draw(ar, x, y, dx * sublines, 0, pos, color, col);
+ }
+ }
+ else if (grids_to_draw == 1) {
+ drawgrid_draw(ar, x, y, dx, 0, pos, color, col);
+ }
+ }
+
+ /* draw visible axes */
+ /* horizontal line */
+ if (0 <= y && y < ar->winy) {
+ UI_make_axis_color(col, col2, ELEM(rv3d->view, RV3D_VIEW_RIGHT, RV3D_VIEW_LEFT) ? 'Y' : 'X');
+ immAttrib3ub(color, col2[0], col2[1], col2[2]);
+ immVertex2f(pos, 0.0f, y);
+ immVertex2f(pos, (float)ar->winx, y);
+ }
+
+ /* vertical line */
+ if (0 <= x && x < ar->winx) {
+ UI_make_axis_color(col, col2, ELEM(rv3d->view, RV3D_VIEW_TOP, RV3D_VIEW_BOTTOM) ? 'Y' : 'Z');
+ immAttrib3ub(color, col2[0], col2[1], col2[2]);
+ immVertex2f(pos, x, 0.0f);
+ immVertex2f(pos, x, (float)ar->winy);
+ }
+
+ immEnd();
+
+drawgrid_cleanup:
+ immUnbindProgram();
+
+#if 0 /* depth write is left enabled above */
+ glDepthMask(GL_TRUE); /* enable write in zbuffer */
+#endif
+}
+
+#undef DEBUG_GRID
+#undef GRID_MIN_PX_D
+#undef GRID_MIN_PX_F
+
+static void drawfloor(Scene *scene, View3D *v3d, const char **grid_unit)
+{
+ /* draw only if there is something to draw */
+ if (v3d->gridflag & (V3D_SHOW_FLOOR | V3D_SHOW_X | V3D_SHOW_Y | V3D_SHOW_Z)) {
+ /* draw how many lines?
+ * trunc(v3d->gridlines / 2) * 4
+ * + 2 for xy axes (possibly with special colors)
+ * + 1 for z axis (the only line not in xy plane)
+ * even v3d->gridlines are honored, odd rounded down */
+ const int gridlines = v3d->gridlines / 2;
+ const float grid_scale = ED_view3d_grid_scale(scene, v3d, grid_unit);
+ const float grid = gridlines * grid_scale;
+
+ const bool show_floor = (v3d->gridflag & V3D_SHOW_FLOOR) && gridlines >= 1;
+
+ bool show_axis_x = (v3d->gridflag & V3D_SHOW_X) != 0;
+ bool show_axis_y = (v3d->gridflag & V3D_SHOW_Y) != 0;
+ bool show_axis_z = (v3d->gridflag & V3D_SHOW_Z) != 0;
+
+ unsigned char col_grid[3], col_axis[3];
+
+ glLineWidth(1.0f);
+
+ UI_GetThemeColor3ubv(TH_GRID, col_grid);
+
+ if (show_floor) {
+ const unsigned vertex_ct = 2 * (gridlines * 4 + 2);
+ const int sublines = v3d->gridsubdiv;
+
+ unsigned char col_bg[3], col_grid_emphasise[3], col_grid_light[3];
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_FLAT_COLOR);
+
+ immBegin(GWN_PRIM_LINES, vertex_ct);
+
+ /* draw normal grid lines */
+ UI_GetColorPtrShade3ubv(col_grid, col_grid_light, 10);
+
+ for (int a = 1; a <= gridlines; a++) {
+ /* skip emphasised divider lines */
+ if (a % sublines != 0) {
+ const float line = a * grid_scale;
+
+ immAttrib3ubv(color, col_grid_light);
+
+ immVertex2f(pos, -grid, -line);
+ immVertex2f(pos, +grid, -line);
+ immVertex2f(pos, -grid, +line);
+ immVertex2f(pos, +grid, +line);
+
+ immVertex2f(pos, -line, -grid);
+ immVertex2f(pos, -line, +grid);
+ immVertex2f(pos, +line, -grid);
+ immVertex2f(pos, +line, +grid);
+ }
+ }
+
+ /* draw emphasised grid lines */
+ UI_GetThemeColor3ubv(TH_BACK, col_bg);
+ /* emphasise division lines lighter instead of darker, if background is darker than grid */
+ UI_GetColorPtrShade3ubv(col_grid, col_grid_emphasise,
+ (col_grid[0] + col_grid[1] + col_grid[2] + 30 >
+ col_bg[0] + col_bg[1] + col_bg[2]) ? 20 : -10);
+
+ if (sublines <= gridlines) {
+ immAttrib3ubv(color, col_grid_emphasise);
+
+ for (int a = sublines; a <= gridlines; a += sublines) {
+ const float line = a * grid_scale;
+
+ immVertex2f(pos, -grid, -line);
+ immVertex2f(pos, +grid, -line);
+ immVertex2f(pos, -grid, +line);
+ immVertex2f(pos, +grid, +line);
+
+ immVertex2f(pos, -line, -grid);
+ immVertex2f(pos, -line, +grid);
+ immVertex2f(pos, +line, -grid);
+ immVertex2f(pos, +line, +grid);
+ }
+ }
+
+ /* draw X axis */
+ if (show_axis_x) {
+ show_axis_x = false; /* drawing now, won't need to draw later */
+ UI_make_axis_color(col_grid, col_axis, 'X');
+ immAttrib3ubv(color, col_axis);
+ }
+ else
+ immAttrib3ubv(color, col_grid_emphasise);
+
+ immVertex2f(pos, -grid, 0.0f);
+ immVertex2f(pos, +grid, 0.0f);
+
+ /* draw Y axis */
+ if (show_axis_y) {
+ show_axis_y = false; /* drawing now, won't need to draw later */
+ UI_make_axis_color(col_grid, col_axis, 'Y');
+ immAttrib3ubv(color, col_axis);
+ }
+ else
+ immAttrib3ubv(color, col_grid_emphasise);
+
+ immVertex2f(pos, 0.0f, -grid);
+ immVertex2f(pos, 0.0f, +grid);
+
+ immEnd();
+ immUnbindProgram();
+
+ /* done with XY plane */
+ }
+
+ if (show_axis_x || show_axis_y || show_axis_z) {
+ /* draw axis lines -- sometimes grid floor is off, other times we still need to draw the Z axis */
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_FLAT_COLOR);
+ immBegin(GWN_PRIM_LINES, (show_axis_x + show_axis_y + show_axis_z) * 2);
+
+ if (show_axis_x) {
+ UI_make_axis_color(col_grid, col_axis, 'X');
+ immAttrib3ubv(color, col_axis);
+ immVertex3f(pos, -grid, 0.0f, 0.0f);
+ immVertex3f(pos, +grid, 0.0f, 0.0f);
+ }
+
+ if (show_axis_y) {
+ UI_make_axis_color(col_grid, col_axis, 'Y');
+ immAttrib3ubv(color, col_axis);
+ immVertex3f(pos, 0.0f, -grid, 0.0f);
+ immVertex3f(pos, 0.0f, +grid, 0.0f);
+ }
+
+ if (show_axis_z) {
+ UI_make_axis_color(col_grid, col_axis, 'Z');
+ immAttrib3ubv(color, col_axis);
+ immVertex3f(pos, 0.0f, 0.0f, -grid);
+ immVertex3f(pos, 0.0f, 0.0f, +grid);
+ }
+
+ immEnd();
+ immUnbindProgram();
+ }
+ }
+}
+
+void DRW_draw_grid(void)
+{
+ /* TODO viewport
+ * Missing is the flags to check whether to draw it
+ * for now now we are using the flags in v3d itself.
+ *
+ * Also for now always assume depth is there, so we
+ * draw on top of it.
+ */
+ /**
+ * Calculate pixel-size factor once, is used for lamps and object centers.
+ * Used by #ED_view3d_pixel_size and typically not accessed directly.
+ *
+ * \note #BKE_camera_params_compute_viewplane' also calculates a pixel-size value,
+ * passed to #RE_SetPixelSize, in ortho mode this is compatible with this value,
+ * but in perspective mode its offset by the near-clip.
+ *
+ * 'RegionView3D.pixsize' is used for viewport drawing, not rendering.
+ */
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ Scene *scene = draw_ctx->scene;
+ View3D *v3d = draw_ctx->v3d;
+ ARegion *ar = draw_ctx->ar;
+ RegionView3D *rv3d = draw_ctx->rv3d;
+
+ const bool draw_floor = (rv3d->view == RV3D_VIEW_USER) || (rv3d->persp != RV3D_ORTHO);
+ const char *grid_unit = NULL;
+
+ /* ortho grid goes first, does not write to depth buffer and doesn't need depth test so it will override
+ * objects if done last
+ * needs to be done always, gridview is adjusted in drawgrid() now, but only for ortho views.
+ */
+ rv3d->gridview = ED_view3d_grid_scale(scene, v3d, &grid_unit);
+
+ glEnable(GL_DEPTH_TEST);
+ glDepthFunc(GL_LESS);
+
+ if (!draw_floor) {
+ /* Do not get in front of overlays */
+ glDepthMask(GL_FALSE);
+
+ ED_region_pixelspace(ar);
+ *(&grid_unit) = NULL; /* drawgrid need this to detect/affect smallest valid unit... */
+ drawgrid(&scene->unit, ar, v3d, &grid_unit);
+
+ gpuLoadProjectionMatrix(rv3d->winmat);
+ gpuLoadMatrix(rv3d->viewmat);
+ }
+ else {
+ glDepthMask(GL_TRUE);
+ drawfloor(scene, v3d, &grid_unit);
+ }
+}
+
+/* ************************* Background ************************** */
+
+void DRW_draw_background(void)
+{
+ /* Just to make sure */
+ glDepthMask(GL_TRUE);
+ glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+ glStencilMask(0xFF);
+
+ if (UI_GetThemeValue(TH_SHOW_BACK_GRAD)) {
+ float m[4][4];
+ unit_m4(m);
+
+ /* Gradient background Color */
+ glDisable(GL_DEPTH_TEST);
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned color = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
+ unsigned char col_hi[3], col_lo[3];
+
+ gpuPushMatrix();
+ gpuLoadIdentity();
+ gpuLoadProjectionMatrix(m);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_SMOOTH_COLOR);
+
+ UI_GetThemeColor3ubv(TH_LOW_GRAD, col_lo);
+ UI_GetThemeColor3ubv(TH_HIGH_GRAD, col_hi);
+
+ immBegin(GWN_PRIM_TRI_FAN, 4);
+ immAttrib3ubv(color, col_lo);
+ immVertex2f(pos, -1.0f, -1.0f);
+ immVertex2f(pos, 1.0f, -1.0f);
+
+ immAttrib3ubv(color, col_hi);
+ immVertex2f(pos, 1.0f, 1.0f);
+ immVertex2f(pos, -1.0f, 1.0f);
+ immEnd();
+
+ immUnbindProgram();
+
+ gpuPopMatrix();
+
+ glClear(GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
+
+ glEnable(GL_DEPTH_TEST);
+ }
+ else {
+ /* Solid background Color */
+ UI_ThemeClearColorAlpha(TH_HIGH_GRAD, 1.0f);
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
+ }
+}
+
+/* **************************** 3D Cursor ******************************** */
+
+static bool is_cursor_visible(const DRWContextState *draw_ctx, Scene *scene, ViewLayer *view_layer)
+{
+ Object *ob = OBACT(view_layer);
+
+ /* don't draw cursor in paint modes, but with a few exceptions */
+ if (ob && draw_ctx->object_mode & OB_MODE_ALL_PAINT) {
+ /* exception: object is in weight paint and has deforming armature in pose mode */
+ if (draw_ctx->object_mode & OB_MODE_WEIGHT_PAINT) {
+ if (BKE_object_pose_armature_get(ob) != NULL) {
+ return true;
+ }
+ }
+ /* exception: object in texture paint mode, clone brush, use_clone_layer disabled */
+ else if (draw_ctx->object_mode & OB_MODE_TEXTURE_PAINT) {
+ const Paint *p = BKE_paint_get_active(scene, view_layer, draw_ctx->object_mode);
+
+ if (p && p->brush && p->brush->imagepaint_tool == PAINT_TOOL_CLONE) {
+ if ((scene->toolsettings->imapaint.flag & IMAGEPAINT_PROJECT_LAYER_CLONE) == 0) {
+ return true;
+ }
+ }
+ }
+
+ /* no exception met? then don't draw cursor! */
+ return false;
+ }
+
+ return true;
+}
+
+void DRW_draw_cursor(void)
+{
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ View3D *v3d = draw_ctx->v3d;
+ RegionView3D *rv3d = draw_ctx->rv3d;
+ Scene *scene = draw_ctx->scene;
+ ViewLayer *view_layer = draw_ctx->view_layer;
+
+ glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+ glDepthMask(GL_FALSE);
+ glDisable(GL_DEPTH_TEST);
+ glLineWidth(1.0f);
+
+ if (is_cursor_visible(draw_ctx, scene, view_layer)) {
+ float *co = ED_view3d_cursor3d_get(scene, v3d);
+ unsigned char crosshair_color[3];
+
+ const float f5 = 0.25f;
+ const float f10 = 0.5f;
+ const float f20 = 1.0f;
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
+ unsigned int wpos = GWN_vertformat_attr_add(format, "world_pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ /* XXX Using instance shader without instance */
+ immBindBuiltinProgram(GPU_SHADER_3D_SCREENSPACE_VARIYING_COLOR);
+ immUniform1f("size", U.widget_unit);
+ immUniform1f("pixel_size", *DRW_viewport_pixelsize_get());
+ immUniformArray3fv("screen_vecs", DRW_viewport_screenvecs_get(), 2);
+ immUniformMatrix4fv("ViewProjectionMatrix", rv3d->persmat);
+
+ const int segments = 16;
+
+ immBegin(GWN_PRIM_LINE_LOOP, segments);
+ immAttrib3fv(wpos, co);
+
+ for (int i = 0; i < segments; ++i) {
+ float angle = (float)(2 * M_PI) * ((float)i / (float)segments);
+ float x = f10 * cosf(angle);
+ float y = f10 * sinf(angle);
+
+ if (i % 2 == 0)
+ immAttrib3ub(color, 255, 0, 0);
+ else
+ immAttrib3ub(color, 255, 255, 255);
+
+ immVertex2f(pos, x, y);
+ }
+ immEnd();
+
+ UI_GetThemeColor3ubv(TH_VIEW_OVERLAY, crosshair_color);
+
+ immBegin(GWN_PRIM_LINES, 8);
+ immAttrib3ubv(color, crosshair_color);
+ immAttrib3fv(wpos, co);
+
+ immVertex2f(pos, -f20, 0);
+ immVertex2f(pos, -f5, 0);
+ immVertex2f(pos, +f5, 0);
+ immVertex2f(pos, +f20, 0);
+ immVertex2f(pos, 0, -f20);
+ immVertex2f(pos, 0, -f5);
+ immVertex2f(pos, 0, +f5);
+ immVertex2f(pos, 0, +f20);
+ immEnd();
+
+ immUnbindProgram();
+ }
+}
+
+/* **************************** 3D Manipulator ******************************** */
+
+void DRW_draw_manipulator_3d(void)
+{
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ View3D *v3d = draw_ctx->v3d;
+ v3d->zbuf = false;
+ ARegion *ar = draw_ctx->ar;
+
+ /* draw depth culled manipulators - manipulators need to be updated *after* view matrix was set up */
+ /* TODO depth culling manipulators is not yet supported, just drawing _3D here, should
+ * later become _IN_SCENE (and draw _3D separate) */
+ WM_manipulatormap_draw(
+ ar->manipulator_map, draw_ctx->evil_C,
+ WM_MANIPULATORMAP_DRAWSTEP_3D);
+
+}
+
+void DRW_draw_manipulator_2d(void)
+{
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ View3D *v3d = draw_ctx->v3d;
+ v3d->zbuf = false;
+ ARegion *ar = draw_ctx->ar;
+
+ WM_manipulatormap_draw(
+ ar->manipulator_map, draw_ctx->evil_C,
+ WM_MANIPULATORMAP_DRAWSTEP_2D);
+
+ glDepthMask(GL_TRUE);
+}
diff --git a/source/blender/draw/intern/draw_view.h b/source/blender/draw/intern/draw_view.h
new file mode 100644
index 00000000000..203420483a7
--- /dev/null
+++ b/source/blender/draw/intern/draw_view.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file draw_view.h
+ * \ingroup draw
+ */
+
+#ifndef __DRAW_VIEW_H__
+#define __DRAW_VIEW_H__
+
+void DRW_draw_grid(void);
+void DRW_draw_region_info(void);
+void DRW_draw_background(void);
+void DRW_draw_cursor(void);
+void DRW_draw_manipulator_3d(void);
+void DRW_draw_manipulator_2d(void);
+
+#endif /* __DRAW_VIEW_H__ */
diff --git a/source/blender/draw/modes/draw_mode_engines.h b/source/blender/draw/modes/draw_mode_engines.h
new file mode 100644
index 00000000000..23fedbba5a5
--- /dev/null
+++ b/source/blender/draw/modes/draw_mode_engines.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file blender/draw/modes/draw_mode_engines.h
+ * \ingroup draw
+ */
+
+#ifndef __DRAW_MODE_ENGINES_H__
+#define __DRAW_MODE_ENGINES_H__
+
+extern DrawEngineType draw_engine_object_type;
+extern DrawEngineType draw_engine_edit_armature_type;
+extern DrawEngineType draw_engine_edit_curve_type;
+extern DrawEngineType draw_engine_edit_lattice_type;
+extern DrawEngineType draw_engine_edit_mesh_type;
+extern DrawEngineType draw_engine_edit_metaball_type;
+extern DrawEngineType draw_engine_edit_surface_type;
+extern DrawEngineType draw_engine_edit_text_type;
+extern DrawEngineType draw_engine_paint_texture_type;
+extern DrawEngineType draw_engine_paint_vertex_type;
+extern DrawEngineType draw_engine_paint_weight_type;
+extern DrawEngineType draw_engine_particle_type;
+extern DrawEngineType draw_engine_pose_type;
+extern DrawEngineType draw_engine_sculpt_type;
+
+#endif /* __DRAW_MODE_ENGINES_H__ */ \ No newline at end of file
diff --git a/source/blender/draw/modes/edit_armature_mode.c b/source/blender/draw/modes/edit_armature_mode.c
new file mode 100644
index 00000000000..3c0c33b1daa
--- /dev/null
+++ b/source/blender/draw/modes/edit_armature_mode.c
@@ -0,0 +1,158 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file blender/draw/modes/edit_armature_mode.c
+ * \ingroup draw
+ */
+
+#include "DRW_engine.h"
+#include "DRW_render.h"
+
+#include "DNA_armature_types.h"
+
+#include "draw_common.h"
+
+#include "draw_mode_engines.h"
+
+extern GlobalsUboStorage ts;
+
+/* *********** LISTS *********** */
+typedef struct EDIT_ARMATURE_PassList {
+ struct DRWPass *bone_solid;
+ struct DRWPass *bone_wire;
+ struct DRWPass *bone_envelope;
+ struct DRWPass *relationship;
+} EDIT_ARMATURE_PassList;
+
+typedef struct EDIT_ARMATURE_StorageList {
+ struct EDIT_ARMATURE_PrivateData *g_data;
+} EDIT_ARMATURE_StorageList;
+
+typedef struct EDIT_ARMATURE_Data {
+ void *engine_type;
+ DRWViewportEmptyList *fbl;
+ DRWViewportEmptyList *txl;
+ EDIT_ARMATURE_PassList *psl;
+ EDIT_ARMATURE_StorageList *stl;
+} EDIT_ARMATURE_Data;
+
+/* *********** STATIC *********** */
+
+typedef struct EDIT_ARMATURE_PrivateData {
+ DRWShadingGroup *relationship_lines;
+} EDIT_ARMATURE_PrivateData; /* Transient data */
+
+/* *********** FUNCTIONS *********** */
+
+static void EDIT_ARMATURE_cache_init(void *vedata)
+{
+ EDIT_ARMATURE_PassList *psl = ((EDIT_ARMATURE_Data *)vedata)->psl;
+ EDIT_ARMATURE_StorageList *stl = ((EDIT_ARMATURE_Data *)vedata)->stl;
+
+ if (!stl->g_data) {
+ /* Alloc transient pointers */
+ stl->g_data = MEM_mallocN(sizeof(*stl->g_data), __func__);
+ }
+
+ {
+ /* Solid bones */
+ DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS;
+ psl->bone_solid = DRW_pass_create("Bone Solid Pass", state);
+ }
+
+ {
+ /* Wire bones */
+ DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_BLEND;
+ psl->bone_wire = DRW_pass_create("Bone Wire Pass", state);
+ }
+
+ {
+ /* distance outline around envelope bones */
+ DRWState state = DRW_STATE_ADDITIVE | DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_LESS | DRW_STATE_BLEND;
+ psl->bone_envelope = DRW_pass_create("Bone Envelope Outline Pass", state);
+ }
+
+ {
+ /* Non Meshes Pass (Camera, empties, lamps ...) */
+ DRWState state =
+ DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS |
+ DRW_STATE_BLEND | DRW_STATE_WIRE;
+ psl->relationship = DRW_pass_create("Bone Relationship Pass", state);
+
+ /* Relationship Lines */
+ stl->g_data->relationship_lines = shgroup_dynlines_uniform_color(psl->relationship, ts.colorWire);
+ DRW_shgroup_state_enable(stl->g_data->relationship_lines, DRW_STATE_STIPPLE_3);
+ }
+}
+
+static void EDIT_ARMATURE_cache_populate(void *vedata, Object *ob)
+{
+ bArmature *arm = ob->data;
+ EDIT_ARMATURE_PassList *psl = ((EDIT_ARMATURE_Data *)vedata)->psl;
+ EDIT_ARMATURE_StorageList *stl = ((EDIT_ARMATURE_Data *)vedata)->stl;
+
+ if (ob->type == OB_ARMATURE) {
+ if (arm->edbo) {
+ DRW_shgroup_armature_edit(
+ ob, psl->bone_solid, psl->bone_wire, psl->bone_envelope, stl->g_data->relationship_lines);
+ }
+ }
+}
+
+static void EDIT_ARMATURE_draw_scene(void *vedata)
+{
+ EDIT_ARMATURE_PassList *psl = ((EDIT_ARMATURE_Data *)vedata)->psl;
+ DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
+
+ MULTISAMPLE_SYNC_ENABLE(dfbl)
+
+ DRW_draw_pass(psl->bone_envelope);
+ DRW_draw_pass(psl->bone_solid);
+ DRW_draw_pass(psl->bone_wire);
+ DRW_draw_pass(psl->relationship);
+
+ MULTISAMPLE_SYNC_DISABLE(dfbl)
+}
+
+#if 0
+void EDIT_ARMATURE_collection_settings_create(CollectionEngineSettings *ces)
+{
+ BLI_assert(ces);
+ //BKE_collection_engine_property_add_int(ces, "show_occlude_wire", false);
+}
+#endif
+
+static const DrawEngineDataSize EDIT_ARMATURE_data_size = DRW_VIEWPORT_DATA_SIZE(EDIT_ARMATURE_Data);
+
+DrawEngineType draw_engine_edit_armature_type = {
+ NULL, NULL,
+ N_("EditArmatureMode"),
+ &EDIT_ARMATURE_data_size,
+ NULL,
+ NULL,
+ &EDIT_ARMATURE_cache_init,
+ &EDIT_ARMATURE_cache_populate,
+ NULL,
+ NULL,
+ &EDIT_ARMATURE_draw_scene,
+ NULL,
+ NULL,
+};
diff --git a/source/blender/draw/modes/edit_curve_mode.c b/source/blender/draw/modes/edit_curve_mode.c
new file mode 100644
index 00000000000..54a1bd79572
--- /dev/null
+++ b/source/blender/draw/modes/edit_curve_mode.c
@@ -0,0 +1,351 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file blender/draw/modes/edit_curve_mode.c
+ * \ingroup draw
+ */
+
+#include "DRW_engine.h"
+#include "DRW_render.h"
+
+#include "DNA_curve_types.h"
+
+/* If builtin shaders are needed */
+#include "GPU_shader.h"
+#include "GPU_batch.h"
+
+#include "draw_common.h"
+
+#include "draw_mode_engines.h"
+
+/* If needed, contains all global/Theme colors
+ * Add needed theme colors / values to DRW_globals_update() and update UBO
+ * Not needed for constant color. */
+extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
+extern struct GlobalsUboStorage ts; /* draw_common.c */
+
+extern char datatoc_common_globals_lib_glsl[];
+extern char datatoc_edit_curve_overlay_loosevert_vert_glsl[];
+extern char datatoc_edit_curve_overlay_frag_glsl[];
+extern char datatoc_edit_curve_overlay_handle_geom_glsl[];
+
+extern char datatoc_gpu_shader_3D_vert_glsl[];
+extern char datatoc_gpu_shader_uniform_color_frag_glsl[];
+extern char datatoc_gpu_shader_point_uniform_color_frag_glsl[];
+extern char datatoc_gpu_shader_flat_color_frag_glsl[];
+
+/* *********** LISTS *********** */
+/* All lists are per viewport specific datas.
+ * They are all free when viewport changes engines
+ * or is free itself. Use EDIT_CURVE_engine_init() to
+ * initialize most of them and EDIT_CURVE_cache_init()
+ * for EDIT_CURVE_PassList */
+
+typedef struct EDIT_CURVE_PassList {
+ /* Declare all passes here and init them in
+ * EDIT_CURVE_cache_init().
+ * Only contains (DRWPass *) */
+ struct DRWPass *wire_pass;
+ struct DRWPass *overlay_edge_pass;
+ struct DRWPass *overlay_vert_pass;
+} EDIT_CURVE_PassList;
+
+typedef struct EDIT_CURVE_FramebufferList {
+ /* Contains all framebuffer objects needed by this engine.
+ * Only contains (GPUFrameBuffer *) */
+ struct GPUFrameBuffer *fb;
+} EDIT_CURVE_FramebufferList;
+
+typedef struct EDIT_CURVE_TextureList {
+ /* Contains all framebuffer textures / utility textures
+ * needed by this engine. Only viewport specific textures
+ * (not per object). Only contains (GPUTexture *) */
+ struct GPUTexture *texture;
+} EDIT_CURVE_TextureList;
+
+typedef struct EDIT_CURVE_StorageList {
+ /* Contains any other memory block that the engine needs.
+ * Only directly MEM_(m/c)allocN'ed blocks because they are
+ * free with MEM_freeN() when viewport is freed.
+ * (not per object) */
+ struct CustomStruct *block;
+ struct EDIT_CURVE_PrivateData *g_data;
+} EDIT_CURVE_StorageList;
+
+typedef struct EDIT_CURVE_Data {
+ /* Struct returned by DRW_viewport_engine_data_ensure.
+ * If you don't use one of these, just make it a (void *) */
+ // void *fbl;
+ void *engine_type; /* Required */
+ EDIT_CURVE_FramebufferList *fbl;
+ EDIT_CURVE_TextureList *txl;
+ EDIT_CURVE_PassList *psl;
+ EDIT_CURVE_StorageList *stl;
+} EDIT_CURVE_Data;
+
+/* *********** STATIC *********** */
+
+static struct {
+ /* Custom shaders :
+ * Add sources to source/blender/draw/modes/shaders
+ * init in EDIT_CURVE_engine_init();
+ * free in EDIT_CURVE_engine_free(); */
+
+ GPUShader *wire_sh;
+
+ GPUShader *overlay_edge_sh; /* handles and nurbs control cage */
+ GPUShader *overlay_vert_sh;
+
+} e_data = {NULL}; /* Engine data */
+
+typedef struct EDIT_CURVE_PrivateData {
+ /* This keeps the references of the shading groups for
+ * easy access in EDIT_CURVE_cache_populate() */
+
+ /* resulting curve as 'wire' for curves (and optionally normals) */
+ DRWShadingGroup *wire_shgrp;
+
+ DRWShadingGroup *overlay_edge_shgrp;
+ DRWShadingGroup *overlay_vert_shgrp;
+} EDIT_CURVE_PrivateData; /* Transient data */
+
+/* *********** FUNCTIONS *********** */
+
+/* Init Textures, Framebuffers, Storage and Shaders.
+ * It is called for every frames.
+ * (Optional) */
+static void EDIT_CURVE_engine_init(void *vedata)
+{
+ EDIT_CURVE_TextureList *txl = ((EDIT_CURVE_Data *)vedata)->txl;
+ EDIT_CURVE_FramebufferList *fbl = ((EDIT_CURVE_Data *)vedata)->fbl;
+ EDIT_CURVE_StorageList *stl = ((EDIT_CURVE_Data *)vedata)->stl;
+
+ UNUSED_VARS(txl, fbl, stl);
+
+ /* Init Framebuffers like this: order is attachment order (for color texs) */
+ /*
+ * DRWFboTexture tex[2] = {{&txl->depth, DRW_TEX_DEPTH_24, 0},
+ * {&txl->color, DRW_TEX_RGBA_8, DRW_TEX_FILTER}};
+ */
+
+ /* DRW_framebuffer_init takes care of checking if
+ * the framebuffer is valid and has the right size*/
+ /*
+ * float *viewport_size = DRW_viewport_size_get();
+ * DRW_framebuffer_init(&fbl->occlude_wire_fb,
+ * (int)viewport_size[0], (int)viewport_size[1],
+ * tex, 2);
+ */
+
+ if (!e_data.wire_sh) {
+ e_data.wire_sh = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
+ }
+
+ if (!e_data.overlay_edge_sh) {
+ e_data.overlay_edge_sh = DRW_shader_create_with_lib(
+ datatoc_edit_curve_overlay_loosevert_vert_glsl,
+ datatoc_edit_curve_overlay_handle_geom_glsl,
+ datatoc_gpu_shader_flat_color_frag_glsl,
+ datatoc_common_globals_lib_glsl, NULL);
+ }
+
+ if (!e_data.overlay_vert_sh) {
+ e_data.overlay_vert_sh = DRW_shader_create_with_lib(
+ datatoc_edit_curve_overlay_loosevert_vert_glsl, NULL,
+ datatoc_edit_curve_overlay_frag_glsl,
+ datatoc_common_globals_lib_glsl, NULL);
+ }
+}
+
+/* Here init all passes and shading groups
+ * Assume that all Passes are NULL */
+static void EDIT_CURVE_cache_init(void *vedata)
+{
+ EDIT_CURVE_PassList *psl = ((EDIT_CURVE_Data *)vedata)->psl;
+ EDIT_CURVE_StorageList *stl = ((EDIT_CURVE_Data *)vedata)->stl;
+
+ if (!stl->g_data) {
+ /* Alloc transient pointers */
+ stl->g_data = MEM_mallocN(sizeof(*stl->g_data), __func__);
+ }
+
+ {
+ DRWShadingGroup *grp;
+
+ /* Center-Line (wire) */
+ psl->wire_pass = DRW_pass_create(
+ "Curve Wire",
+ DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_WIRE);
+
+ grp = DRW_shgroup_create(e_data.wire_sh, psl->wire_pass);
+ DRW_shgroup_uniform_vec4(grp, "color", ts.colorWireEdit, 1);
+ stl->g_data->wire_shgrp = grp;
+
+
+ psl->overlay_edge_pass = DRW_pass_create(
+ "Curve Handle Overlay",
+ DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_WIRE);
+
+ grp = DRW_shgroup_create(e_data.overlay_edge_sh, psl->overlay_edge_pass);
+ DRW_shgroup_uniform_block(grp, "globalsBlock", globals_ubo);
+ DRW_shgroup_uniform_vec2(grp, "viewportSize", DRW_viewport_size_get(), 1);
+ stl->g_data->overlay_edge_shgrp = grp;
+
+
+ psl->overlay_vert_pass = DRW_pass_create(
+ "Curve Vert Overlay",
+ DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_POINT);
+
+ grp = DRW_shgroup_create(e_data.overlay_vert_sh, psl->overlay_vert_pass);
+ DRW_shgroup_uniform_block(grp, "globalsBlock", globals_ubo);
+ DRW_shgroup_uniform_vec2(grp, "viewportSize", DRW_viewport_size_get(), 1);
+ stl->g_data->overlay_vert_shgrp = grp;
+ }
+
+}
+
+/* Add geometry to shadingGroups. Execute for each objects */
+static void EDIT_CURVE_cache_populate(void *vedata, Object *ob)
+{
+ EDIT_CURVE_PassList *psl = ((EDIT_CURVE_Data *)vedata)->psl;
+ EDIT_CURVE_StorageList *stl = ((EDIT_CURVE_Data *)vedata)->stl;
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ const Scene *scene = draw_ctx->scene;
+ const Object *obedit = scene->obedit;
+
+ UNUSED_VARS(psl, stl);
+
+ if (ob->type == OB_CURVE) {
+ if (ob == obedit) {
+ Curve *cu = ob->data;
+ /* Get geometry cache */
+ struct Gwn_Batch *geom;
+
+ geom = DRW_cache_curve_edge_wire_get(ob);
+ DRW_shgroup_call_add(stl->g_data->wire_shgrp, geom, ob->obmat);
+
+ if ((cu->flag & CU_3D) && (cu->drawflag & CU_HIDE_NORMALS) == 0) {
+ geom = DRW_cache_curve_edge_normal_get(ob, scene->toolsettings->normalsize);
+ DRW_shgroup_call_add(stl->g_data->wire_shgrp, geom, ob->obmat);
+ }
+
+ /* Add geom to a shading group */
+ geom = DRW_cache_curve_edge_overlay_get(ob);
+ if (geom) {
+ DRW_shgroup_call_add(stl->g_data->overlay_edge_shgrp, geom, ob->obmat);
+ }
+
+ geom = DRW_cache_curve_vert_overlay_get(ob);
+ DRW_shgroup_call_add(stl->g_data->overlay_vert_shgrp, geom, ob->obmat);
+ }
+ }
+}
+
+/* Optional: Post-cache_populate callback */
+static void EDIT_CURVE_cache_finish(void *vedata)
+{
+ EDIT_CURVE_PassList *psl = ((EDIT_CURVE_Data *)vedata)->psl;
+ EDIT_CURVE_StorageList *stl = ((EDIT_CURVE_Data *)vedata)->stl;
+
+ /* Do something here! dependant on the objects gathered */
+ UNUSED_VARS(psl, stl);
+}
+
+/* Draw time ! Control rendering pipeline from here */
+static void EDIT_CURVE_draw_scene(void *vedata)
+{
+ EDIT_CURVE_PassList *psl = ((EDIT_CURVE_Data *)vedata)->psl;
+ EDIT_CURVE_FramebufferList *fbl = ((EDIT_CURVE_Data *)vedata)->fbl;
+
+ /* Default framebuffer and texture */
+ DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
+ DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
+
+ UNUSED_VARS(fbl, dtxl);
+
+ MULTISAMPLE_SYNC_ENABLE(dfbl)
+
+ /* Show / hide entire passes, swap framebuffers ... whatever you fancy */
+ /*
+ * DRW_framebuffer_texture_detach(dtxl->depth);
+ * DRW_framebuffer_bind(fbl->custom_fb);
+ * DRW_draw_pass(psl->pass);
+ * DRW_framebuffer_texture_attach(dfbl->default_fb, dtxl->depth, 0, 0);
+ * DRW_framebuffer_bind(dfbl->default_fb);
+ */
+
+ /* ... or just render passes on default framebuffer. */
+ DRW_draw_pass(psl->wire_pass);
+ DRW_draw_pass(psl->overlay_edge_pass);
+ DRW_draw_pass(psl->overlay_vert_pass);
+
+ MULTISAMPLE_SYNC_DISABLE(dfbl)
+
+ /* If you changed framebuffer, double check you rebind
+ * the default one with its textures attached before finishing */
+}
+
+/* Cleanup when destroying the engine.
+ * This is not per viewport ! only when quitting blender.
+ * Mostly used for freeing shaders */
+static void EDIT_CURVE_engine_free(void)
+{
+ DRW_SHADER_FREE_SAFE(e_data.overlay_edge_sh);
+ DRW_SHADER_FREE_SAFE(e_data.overlay_vert_sh);
+}
+
+/* Create collection settings here.
+ *
+ * Be sure to add this function there :
+ * source/blender/draw/DRW_engine.h
+ * source/blender/blenkernel/intern/layer.c
+ * source/blenderplayer/bad_level_call_stubs/stubs.c
+ *
+ * And relevant collection settings to :
+ * source/blender/makesrna/intern/rna_scene.c
+ * source/blender/blenkernel/intern/layer.c
+ */
+#if 0
+void EDIT_CURVE_collection_settings_create(CollectionEngineSettings *ces)
+{
+ BLI_assert(ces);
+ // BKE_collection_engine_property_add_int(ces, "my_bool_prop", false);
+ // BKE_collection_engine_property_add_int(ces, "my_int_prop", 0);
+ // BKE_collection_engine_property_add_float(ces, "my_float_prop", 0.0f);
+}
+#endif
+
+static const DrawEngineDataSize EDIT_CURVE_data_size = DRW_VIEWPORT_DATA_SIZE(EDIT_CURVE_Data);
+
+DrawEngineType draw_engine_edit_curve_type = {
+ NULL, NULL,
+ N_("EditCurveMode"),
+ &EDIT_CURVE_data_size,
+ &EDIT_CURVE_engine_init,
+ &EDIT_CURVE_engine_free,
+ &EDIT_CURVE_cache_init,
+ &EDIT_CURVE_cache_populate,
+ &EDIT_CURVE_cache_finish,
+ NULL, /* draw_background but not needed by mode engines */
+ &EDIT_CURVE_draw_scene,
+ NULL,
+ NULL,
+};
diff --git a/source/blender/draw/modes/edit_lattice_mode.c b/source/blender/draw/modes/edit_lattice_mode.c
new file mode 100644
index 00000000000..e676677ff97
--- /dev/null
+++ b/source/blender/draw/modes/edit_lattice_mode.c
@@ -0,0 +1,298 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file blender/draw/modes/edit_lattice_mode.c
+ * \ingroup draw
+ */
+
+#include "DRW_engine.h"
+#include "DRW_render.h"
+
+/* If builtin shaders are needed */
+#include "GPU_shader.h"
+
+#include "draw_common.h"
+
+#include "draw_mode_engines.h"
+
+/* If needed, contains all global/Theme colors
+ * Add needed theme colors / values to DRW_globals_update() and update UBO
+ * Not needed for constant color. */
+extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
+extern struct GlobalsUboStorage ts; /* draw_common.c */
+
+extern char datatoc_common_globals_lib_glsl[];
+extern char datatoc_edit_lattice_overlay_loosevert_vert_glsl[];
+extern char datatoc_edit_lattice_overlay_frag_glsl[];
+
+extern char datatoc_gpu_shader_3D_vert_glsl[];
+extern char datatoc_gpu_shader_uniform_color_frag_glsl[];
+extern char datatoc_gpu_shader_point_uniform_color_frag_glsl[];
+
+/* *********** LISTS *********** */
+/* All lists are per viewport specific datas.
+ * They are all free when viewport changes engines
+ * or is free itself. Use EDIT_LATTICE_engine_init() to
+ * initialize most of them and EDIT_LATTICE_cache_init()
+ * for EDIT_LATTICE_PassList */
+
+typedef struct EDIT_LATTICE_PassList {
+ /* Declare all passes here and init them in
+ * EDIT_LATTICE_cache_init().
+ * Only contains (DRWPass *) */
+ struct DRWPass *wire_pass;
+ struct DRWPass *vert_pass;
+} EDIT_LATTICE_PassList;
+
+typedef struct EDIT_LATTICE_FramebufferList {
+ /* Contains all framebuffer objects needed by this engine.
+ * Only contains (GPUFrameBuffer *) */
+ struct GPUFrameBuffer *fb;
+} EDIT_LATTICE_FramebufferList;
+
+typedef struct EDIT_LATTICE_TextureList {
+ /* Contains all framebuffer textures / utility textures
+ * needed by this engine. Only viewport specific textures
+ * (not per object). Only contains (GPUTexture *) */
+ struct GPUTexture *texture;
+} EDIT_LATTICE_TextureList;
+
+typedef struct EDIT_LATTICE_StorageList {
+ /* Contains any other memory block that the engine needs.
+ * Only directly MEM_(m/c)allocN'ed blocks because they are
+ * free with MEM_freeN() when viewport is freed.
+ * (not per object) */
+ struct CustomStruct *block;
+ struct EDIT_LATTICE_PrivateData *g_data;
+} EDIT_LATTICE_StorageList;
+
+typedef struct EDIT_LATTICE_Data {
+ /* Struct returned by DRW_viewport_engine_data_ensure.
+ * If you don't use one of these, just make it a (void *) */
+ // void *fbl;
+ void *engine_type; /* Required */
+ EDIT_LATTICE_FramebufferList *fbl;
+ EDIT_LATTICE_TextureList *txl;
+ EDIT_LATTICE_PassList *psl;
+ EDIT_LATTICE_StorageList *stl;
+} EDIT_LATTICE_Data;
+
+/* *********** STATIC *********** */
+
+static struct {
+ /* Custom shaders :
+ * Add sources to source/blender/draw/modes/shaders
+ * init in EDIT_LATTICE_engine_init();
+ * free in EDIT_LATTICE_engine_free(); */
+ GPUShader *wire_sh;
+
+ GPUShader *overlay_vert_sh;
+
+} e_data = {NULL}; /* Engine data */
+
+typedef struct EDIT_LATTICE_PrivateData {
+ /* This keeps the references of the shading groups for
+ * easy access in EDIT_LATTICE_cache_populate() */
+ DRWShadingGroup *wire_shgrp;
+ DRWShadingGroup *vert_shgrp;
+} EDIT_LATTICE_PrivateData; /* Transient data */
+
+/* *********** FUNCTIONS *********** */
+
+/* Init Textures, Framebuffers, Storage and Shaders.
+ * It is called for every frames.
+ * (Optional) */
+static void EDIT_LATTICE_engine_init(void *vedata)
+{
+ EDIT_LATTICE_TextureList *txl = ((EDIT_LATTICE_Data *)vedata)->txl;
+ EDIT_LATTICE_FramebufferList *fbl = ((EDIT_LATTICE_Data *)vedata)->fbl;
+ EDIT_LATTICE_StorageList *stl = ((EDIT_LATTICE_Data *)vedata)->stl;
+
+ UNUSED_VARS(txl, fbl, stl);
+
+ /* Init Framebuffers like this: order is attachment order (for color texs) */
+ /*
+ * DRWFboTexture tex[2] = {{&txl->depth, DRW_TEX_DEPTH_24, 0},
+ * {&txl->color, DRW_TEX_RGBA_8, DRW_TEX_FILTER}};
+ */
+
+ /* DRW_framebuffer_init takes care of checking if
+ * the framebuffer is valid and has the right size*/
+ /*
+ * float *viewport_size = DRW_viewport_size_get();
+ * DRW_framebuffer_init(&fbl->occlude_wire_fb,
+ * (int)viewport_size[0], (int)viewport_size[1],
+ * tex, 2);
+ */
+
+ if (!e_data.wire_sh) {
+ e_data.wire_sh = GPU_shader_get_builtin_shader(GPU_SHADER_3D_SMOOTH_COLOR);
+ }
+
+ if (!e_data.overlay_vert_sh) {
+ e_data.overlay_vert_sh = DRW_shader_create_with_lib(
+ datatoc_edit_lattice_overlay_loosevert_vert_glsl, NULL,
+ datatoc_edit_lattice_overlay_frag_glsl,
+ datatoc_common_globals_lib_glsl, NULL);
+ }
+}
+
+/* Here init all passes and shading groups
+ * Assume that all Passes are NULL */
+static void EDIT_LATTICE_cache_init(void *vedata)
+{
+ EDIT_LATTICE_PassList *psl = ((EDIT_LATTICE_Data *)vedata)->psl;
+ EDIT_LATTICE_StorageList *stl = ((EDIT_LATTICE_Data *)vedata)->stl;
+
+ if (!stl->g_data) {
+ /* Alloc transient pointers */
+ stl->g_data = MEM_mallocN(sizeof(*stl->g_data), __func__);
+ }
+
+ {
+ psl->wire_pass = DRW_pass_create(
+ "Lattice Wire",
+ DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_WIRE);
+ stl->g_data->wire_shgrp = DRW_shgroup_create(e_data.wire_sh, psl->wire_pass);
+
+ psl->vert_pass = DRW_pass_create(
+ "Lattice Verts",
+ DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_POINT);
+ stl->g_data->vert_shgrp = DRW_shgroup_create(e_data.overlay_vert_sh, psl->vert_pass);
+
+ DRW_shgroup_uniform_block(stl->g_data->vert_shgrp, "globalsBlock", globals_ubo);
+ }
+}
+
+/* Add geometry to shadingGroups. Execute for each objects */
+static void EDIT_LATTICE_cache_populate(void *vedata, Object *ob)
+{
+ EDIT_LATTICE_PassList *psl = ((EDIT_LATTICE_Data *)vedata)->psl;
+ EDIT_LATTICE_StorageList *stl = ((EDIT_LATTICE_Data *)vedata)->stl;
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ Scene *scene = draw_ctx->scene;
+ Object *obedit = scene->obedit;
+
+ UNUSED_VARS(psl);
+
+ if (ob->type == OB_LATTICE) {
+ if (ob == obedit) {
+ /* Get geometry cache */
+ struct Gwn_Batch *geom;
+
+ geom = DRW_cache_lattice_wire_get(ob, true);
+ DRW_shgroup_call_add(stl->g_data->wire_shgrp, geom, ob->obmat);
+
+ geom = DRW_cache_lattice_vert_overlay_get(ob);
+ DRW_shgroup_call_add(stl->g_data->vert_shgrp, geom, ob->obmat);
+ }
+ }
+}
+
+/* Optional: Post-cache_populate callback */
+static void EDIT_LATTICE_cache_finish(void *vedata)
+{
+ EDIT_LATTICE_PassList *psl = ((EDIT_LATTICE_Data *)vedata)->psl;
+ EDIT_LATTICE_StorageList *stl = ((EDIT_LATTICE_Data *)vedata)->stl;
+
+ /* Do something here! dependant on the objects gathered */
+ UNUSED_VARS(psl, stl);
+}
+
+/* Draw time ! Control rendering pipeline from here */
+static void EDIT_LATTICE_draw_scene(void *vedata)
+{
+ EDIT_LATTICE_PassList *psl = ((EDIT_LATTICE_Data *)vedata)->psl;
+ EDIT_LATTICE_FramebufferList *fbl = ((EDIT_LATTICE_Data *)vedata)->fbl;
+
+ /* Default framebuffer and texture */
+ DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
+ DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
+
+ UNUSED_VARS(fbl, dtxl);
+
+ MULTISAMPLE_SYNC_ENABLE(dfbl)
+
+ /* Show / hide entire passes, swap framebuffers ... whatever you fancy */
+ /*
+ * DRW_framebuffer_texture_detach(dtxl->depth);
+ * DRW_framebuffer_bind(fbl->custom_fb);
+ * DRW_draw_pass(psl->pass);
+ * DRW_framebuffer_texture_attach(dfbl->default_fb, dtxl->depth, 0, 0);
+ * DRW_framebuffer_bind(dfbl->default_fb);
+ */
+
+ /* ... or just render passes on default framebuffer. */
+ DRW_draw_pass(psl->wire_pass);
+ DRW_draw_pass(psl->vert_pass);
+
+ MULTISAMPLE_SYNC_DISABLE(dfbl)
+
+ /* If you changed framebuffer, double check you rebind
+ * the default one with its textures attached before finishing */
+}
+
+/* Cleanup when destroying the engine.
+ * This is not per viewport ! only when quitting blender.
+ * Mostly used for freeing shaders */
+static void EDIT_LATTICE_engine_free(void)
+{
+ // Currently built-in, dont free
+ DRW_SHADER_FREE_SAFE(e_data.overlay_vert_sh);
+}
+
+/* Create collection settings here.
+ *
+ * Be sure to add this function there :
+ * source/blender/draw/DRW_engine.h
+ * source/blender/blenkernel/intern/layer.c
+ * source/blenderplayer/bad_level_call_stubs/stubs.c
+ *
+ * And relevant collection settings to :
+ * source/blender/makesrna/intern/rna_scene.c
+ * source/blender/blenkernel/intern/layer.c
+ */
+#if 0
+void EDIT_LATTICE_collection_settings_create(CollectionEngineSettings *ces)
+{
+ BLI_assert(ces);
+ // BKE_collection_engine_property_add_int(ces, "my_bool_prop", false);
+ // BKE_collection_engine_property_add_int(ces, "my_int_prop", 0);
+ // BKE_collection_engine_property_add_float(ces, "my_float_prop", 0.0f);
+}
+#endif
+
+static const DrawEngineDataSize EDIT_LATTICE_data_size = DRW_VIEWPORT_DATA_SIZE(EDIT_LATTICE_Data);
+
+DrawEngineType draw_engine_edit_lattice_type = {
+ NULL, NULL,
+ N_("EditLatticeMode"),
+ &EDIT_LATTICE_data_size,
+ &EDIT_LATTICE_engine_init,
+ &EDIT_LATTICE_engine_free,
+ &EDIT_LATTICE_cache_init,
+ &EDIT_LATTICE_cache_populate,
+ &EDIT_LATTICE_cache_finish,
+ NULL, /* draw_background but not needed by mode engines */
+ &EDIT_LATTICE_draw_scene,
+ NULL,
+ NULL,
+};
diff --git a/source/blender/draw/modes/edit_mesh_mode.c b/source/blender/draw/modes/edit_mesh_mode.c
new file mode 100644
index 00000000000..29ba658f79d
--- /dev/null
+++ b/source/blender/draw/modes/edit_mesh_mode.c
@@ -0,0 +1,614 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file blender/draw/modes/edit_mesh_mode.c
+ * \ingroup draw
+ */
+
+#include "DRW_engine.h"
+#include "DRW_render.h"
+
+#include "GPU_shader.h"
+
+#include "DNA_mesh_types.h"
+#include "DNA_view3d_types.h"
+
+#include "draw_common.h"
+
+#include "draw_mode_engines.h"
+
+#include "edit_mesh_mode_intern.h" /* own include */
+
+extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
+extern struct GlobalsUboStorage ts; /* draw_common.c */
+
+extern char datatoc_edit_mesh_overlay_frag_glsl[];
+extern char datatoc_edit_mesh_overlay_vert_glsl[];
+extern char datatoc_edit_mesh_overlay_geom_tri_glsl[];
+extern char datatoc_edit_mesh_overlay_geom_edge_glsl[];
+extern char datatoc_edit_mesh_overlay_loosevert_vert_glsl[];
+extern char datatoc_edit_mesh_overlay_facedot_frag_glsl[];
+extern char datatoc_edit_mesh_overlay_facedot_vert_glsl[];
+extern char datatoc_edit_mesh_overlay_mix_vert_glsl[];
+extern char datatoc_edit_mesh_overlay_mix_frag_glsl[];
+extern char datatoc_edit_mesh_overlay_facefill_vert_glsl[];
+extern char datatoc_edit_mesh_overlay_facefill_frag_glsl[];
+extern char datatoc_edit_normals_vert_glsl[];
+extern char datatoc_edit_normals_geom_glsl[];
+extern char datatoc_common_globals_lib_glsl[];
+
+extern char datatoc_gpu_shader_uniform_color_frag_glsl[];
+
+/* *********** LISTS *********** */
+typedef struct EDIT_MESH_PassList {
+ struct DRWPass *vcolor_faces;
+ struct DRWPass *depth_hidden_wire;
+ struct DRWPass *edit_face_overlay;
+ struct DRWPass *edit_face_occluded;
+ struct DRWPass *mix_occlude;
+ struct DRWPass *facefill_occlude;
+ struct DRWPass *normals;
+} EDIT_MESH_PassList;
+
+typedef struct EDIT_MESH_FramebufferList {
+ struct GPUFrameBuffer *occlude_wire_fb;
+} EDIT_MESH_FramebufferList;
+
+typedef struct EDIT_MESH_StorageList {
+ struct EDIT_MESH_PrivateData *g_data;
+} EDIT_MESH_StorageList;
+
+typedef struct EDIT_MESH_Data {
+ void *engine_type;
+ EDIT_MESH_FramebufferList *fbl;
+ DRWViewportEmptyList *txl;
+ EDIT_MESH_PassList *psl;
+ EDIT_MESH_StorageList *stl;
+} EDIT_MESH_Data;
+
+/* *********** STATIC *********** */
+
+static struct {
+ /* weight/vert-color */
+ GPUShader *vcolor_face_shader;
+ GPUShader *overlay_tri_sh;
+ GPUShader *overlay_tri_fast_sh;
+ GPUShader *overlay_tri_vcol_sh;
+ GPUShader *overlay_tri_vcol_fast_sh;
+ GPUShader *overlay_edge_sh;
+ GPUShader *overlay_edge_vcol_sh;
+ GPUShader *overlay_vert_sh;
+ GPUShader *overlay_facedot_sh;
+ GPUShader *overlay_mix_sh;
+ GPUShader *overlay_facefill_sh;
+ GPUShader *normals_face_sh;
+ GPUShader *normals_loop_sh;
+ GPUShader *normals_sh;
+ GPUShader *depth_sh;
+ /* temp buffer texture */
+ struct GPUTexture *occlude_wire_depth_tx;
+ struct GPUTexture *occlude_wire_color_tx;
+} e_data = {NULL}; /* Engine data */
+
+typedef struct EDIT_MESH_PrivateData {
+ /* weight/vert-color */
+ DRWShadingGroup *fvcolor_shgrp;
+ DRWShadingGroup *depth_shgrp_hidden_wire;
+
+ DRWShadingGroup *fnormals_shgrp;
+ DRWShadingGroup *vnormals_shgrp;
+ DRWShadingGroup *lnormals_shgrp;
+
+ DRWShadingGroup *face_overlay_shgrp;
+ DRWShadingGroup *ledges_overlay_shgrp;
+ DRWShadingGroup *lverts_overlay_shgrp;
+ DRWShadingGroup *facedot_overlay_shgrp;
+
+ DRWShadingGroup *face_occluded_shgrp;
+ DRWShadingGroup *ledges_occluded_shgrp;
+ DRWShadingGroup *lverts_occluded_shgrp;
+ DRWShadingGroup *facedot_occluded_shgrp;
+ DRWShadingGroup *facefill_occluded_shgrp;
+
+} EDIT_MESH_PrivateData; /* Transient data */
+
+/* *********** FUNCTIONS *********** */
+
+static void EDIT_MESH_engine_init(void *vedata)
+{
+ EDIT_MESH_FramebufferList *fbl = ((EDIT_MESH_Data *)vedata)->fbl;
+
+ const float *viewport_size = DRW_viewport_size_get();
+
+ DRWFboTexture tex[2] = {{
+ &e_data.occlude_wire_depth_tx, DRW_TEX_DEPTH_24, DRW_TEX_TEMP},
+ {&e_data.occlude_wire_color_tx, DRW_TEX_RGBA_8, DRW_TEX_FILTER | DRW_TEX_TEMP}
+ };
+ DRW_framebuffer_init(
+ &fbl->occlude_wire_fb, &draw_engine_edit_mesh_type,
+ (int)viewport_size[0], (int)viewport_size[1],
+ tex, ARRAY_SIZE(tex));
+
+ if (!e_data.vcolor_face_shader) {
+ e_data.vcolor_face_shader = GPU_shader_get_builtin_shader(GPU_SHADER_SIMPLE_LIGHTING_SMOOTH_COLOR_ALPHA);
+ }
+
+ if (!e_data.overlay_tri_sh) {
+ e_data.overlay_tri_sh = DRW_shader_create_with_lib(
+ datatoc_edit_mesh_overlay_vert_glsl,
+ datatoc_edit_mesh_overlay_geom_tri_glsl,
+ datatoc_edit_mesh_overlay_frag_glsl,
+ datatoc_common_globals_lib_glsl,
+ "#define EDGE_FIX\n"
+ "#define ANTI_ALIASING\n"
+ "#define VERTEX_FACING");
+ }
+ if (!e_data.overlay_tri_fast_sh) {
+ e_data.overlay_tri_fast_sh = DRW_shader_create_with_lib(
+ datatoc_edit_mesh_overlay_vert_glsl,
+ datatoc_edit_mesh_overlay_geom_tri_glsl,
+ datatoc_edit_mesh_overlay_frag_glsl,
+ datatoc_common_globals_lib_glsl,
+ "#define ANTI_ALIASING\n"
+ "#define VERTEX_FACING\n");
+ }
+ if (!e_data.overlay_tri_vcol_sh) {
+ e_data.overlay_tri_vcol_sh = DRW_shader_create_with_lib(
+ datatoc_edit_mesh_overlay_vert_glsl,
+ datatoc_edit_mesh_overlay_geom_tri_glsl,
+ datatoc_edit_mesh_overlay_frag_glsl,
+ datatoc_common_globals_lib_glsl,
+ "#define EDGE_FIX\n"
+ "#define VERTEX_SELECTION\n"
+ "#define ANTI_ALIASING\n"
+ "#define VERTEX_FACING\n");
+ }
+ if (!e_data.overlay_tri_vcol_fast_sh) {
+ e_data.overlay_tri_vcol_fast_sh = DRW_shader_create_with_lib(
+ datatoc_edit_mesh_overlay_vert_glsl,
+ datatoc_edit_mesh_overlay_geom_tri_glsl,
+ datatoc_edit_mesh_overlay_frag_glsl,
+ datatoc_common_globals_lib_glsl,
+ "#define VERTEX_SELECTION\n"
+ "#define ANTI_ALIASING\n"
+ "#define VERTEX_FACING\n");
+ }
+ if (!e_data.overlay_edge_sh) {
+ e_data.overlay_edge_sh = DRW_shader_create_with_lib(
+ datatoc_edit_mesh_overlay_vert_glsl,
+ datatoc_edit_mesh_overlay_geom_edge_glsl,
+ datatoc_edit_mesh_overlay_frag_glsl,
+ datatoc_common_globals_lib_glsl,
+ "#define ANTI_ALIASING\n"
+ "#define VERTEX_FACING\n");
+ }
+ if (!e_data.overlay_edge_vcol_sh) {
+ e_data.overlay_edge_vcol_sh = DRW_shader_create_with_lib(
+ datatoc_edit_mesh_overlay_vert_glsl,
+ datatoc_edit_mesh_overlay_geom_edge_glsl,
+ datatoc_edit_mesh_overlay_frag_glsl,
+ datatoc_common_globals_lib_glsl,
+ "#define VERTEX_SELECTION\n"
+ "#define VERTEX_FACING\n");
+ }
+ if (!e_data.overlay_vert_sh) {
+ e_data.overlay_vert_sh = DRW_shader_create_with_lib(
+ datatoc_edit_mesh_overlay_loosevert_vert_glsl, NULL,
+ datatoc_edit_mesh_overlay_frag_glsl,
+ datatoc_common_globals_lib_glsl,
+ "#define VERTEX_SELECTION\n");
+ }
+ if (!e_data.overlay_facedot_sh) {
+ e_data.overlay_facedot_sh = DRW_shader_create_with_lib(
+ datatoc_edit_mesh_overlay_facedot_vert_glsl, NULL,
+ datatoc_edit_mesh_overlay_facedot_frag_glsl,
+ datatoc_common_globals_lib_glsl,
+ "#define VERTEX_FACING\n");
+ }
+ if (!e_data.overlay_mix_sh) {
+ e_data.overlay_mix_sh = DRW_shader_create_fullscreen(datatoc_edit_mesh_overlay_mix_frag_glsl, NULL);
+ }
+ if (!e_data.overlay_facefill_sh) {
+ e_data.overlay_facefill_sh = DRW_shader_create_with_lib(
+ datatoc_edit_mesh_overlay_facefill_vert_glsl, NULL,
+ datatoc_edit_mesh_overlay_facefill_frag_glsl,
+ datatoc_common_globals_lib_glsl, NULL);
+ }
+ if (!e_data.normals_face_sh) {
+ e_data.normals_face_sh = DRW_shader_create(
+ datatoc_edit_normals_vert_glsl,
+ datatoc_edit_normals_geom_glsl,
+ datatoc_gpu_shader_uniform_color_frag_glsl,
+ "#define FACE_NORMALS\n");
+ }
+ if (!e_data.normals_loop_sh) {
+ e_data.normals_loop_sh = DRW_shader_create(
+ datatoc_edit_normals_vert_glsl,
+ datatoc_edit_normals_geom_glsl,
+ datatoc_gpu_shader_uniform_color_frag_glsl,
+ "#define LOOP_NORMALS\n");
+ }
+ if (!e_data.normals_sh) {
+ e_data.normals_sh = DRW_shader_create(
+ datatoc_edit_normals_vert_glsl,
+ datatoc_edit_normals_geom_glsl,
+ datatoc_gpu_shader_uniform_color_frag_glsl, NULL);
+ }
+ if (!e_data.depth_sh) {
+ e_data.depth_sh = DRW_shader_create_3D_depth_only();
+ }
+}
+
+static DRWPass *edit_mesh_create_overlay_pass(
+ float *faceAlpha, DRWState statemod,
+ DRWShadingGroup **r_face_shgrp, DRWShadingGroup **r_ledges_shgrp,
+ DRWShadingGroup **r_lverts_shgrp, DRWShadingGroup **r_facedot_shgrp)
+{
+ GPUShader *tri_sh, *ledge_sh;
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ RegionView3D *rv3d = draw_ctx->rv3d;
+ Scene *scene = draw_ctx->scene;
+ ToolSettings *tsettings = scene->toolsettings;
+
+ if ((tsettings->selectmode & SCE_SELECT_VERTEX) != 0) {
+ ledge_sh = e_data.overlay_edge_vcol_sh;
+
+ if ((rv3d->rflag & RV3D_NAVIGATING) != 0)
+ tri_sh = e_data.overlay_tri_vcol_fast_sh;
+ else
+ tri_sh = e_data.overlay_tri_vcol_sh;
+ }
+ else {
+ ledge_sh = e_data.overlay_edge_sh;
+
+ if ((rv3d->rflag & RV3D_NAVIGATING) != 0)
+ tri_sh = e_data.overlay_tri_fast_sh;
+ else
+ tri_sh = e_data.overlay_tri_sh;
+ }
+
+ DRWPass *pass = DRW_pass_create(
+ "Edit Mesh Face Overlay Pass",
+ DRW_STATE_WRITE_COLOR | DRW_STATE_POINT | statemod);
+
+ *r_face_shgrp = DRW_shgroup_create(tri_sh, pass);
+ DRW_shgroup_uniform_block(*r_face_shgrp, "globalsBlock", globals_ubo);
+ DRW_shgroup_uniform_vec2(*r_face_shgrp, "viewportSize", DRW_viewport_size_get(), 1);
+ DRW_shgroup_uniform_float(*r_face_shgrp, "faceAlphaMod", faceAlpha, 1);
+
+ *r_ledges_shgrp = DRW_shgroup_create(ledge_sh, pass);
+ DRW_shgroup_uniform_block(*r_ledges_shgrp, "globalsBlock", globals_ubo);
+ DRW_shgroup_uniform_vec2(*r_ledges_shgrp, "viewportSize", DRW_viewport_size_get(), 1);
+
+ if ((tsettings->selectmode & (SCE_SELECT_VERTEX)) != 0) {
+ *r_lverts_shgrp = DRW_shgroup_create(e_data.overlay_vert_sh, pass);
+ DRW_shgroup_uniform_block(*r_lverts_shgrp, "globalsBlock", globals_ubo);
+ DRW_shgroup_uniform_vec2(*r_lverts_shgrp, "viewportSize", DRW_viewport_size_get(), 1);
+ }
+
+ if ((tsettings->selectmode & (SCE_SELECT_FACE)) != 0) {
+ *r_facedot_shgrp = DRW_shgroup_create(e_data.overlay_facedot_sh, pass);
+ DRW_shgroup_uniform_block(*r_facedot_shgrp, "globalsBlock", globals_ubo);
+ }
+
+ return pass;
+}
+
+static float backwire_opacity;
+static float face_mod;
+static float size_normal;
+
+static void EDIT_MESH_cache_init(void *vedata)
+{
+ EDIT_MESH_PassList *psl = ((EDIT_MESH_Data *)vedata)->psl;
+ EDIT_MESH_StorageList *stl = ((EDIT_MESH_Data *)vedata)->stl;
+ DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
+
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ View3D *v3d = draw_ctx->v3d;
+
+ bool do_zbufclip = ((v3d->flag & V3D_ZBUF_SELECT) == 0);
+
+ static float zero = 0.0f;
+
+ if (!stl->g_data) {
+ /* Alloc transient pointers */
+ stl->g_data = MEM_mallocN(sizeof(*stl->g_data), __func__);
+ }
+
+ {
+ psl->vcolor_faces = DRW_pass_create(
+ "Vert Color Pass",
+ DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS);
+
+ stl->g_data->fvcolor_shgrp = DRW_shgroup_create(e_data.vcolor_face_shader, psl->vcolor_faces);
+
+ static float light[3] = {-0.3f, 0.5f, 1.0f};
+ static float alpha = 1.0f;
+ static float world_light = 1.0f; /* XXX, see: paint_vertex_mode.c */
+ DRW_shgroup_uniform_vec3(stl->g_data->fvcolor_shgrp, "light", light, 1);
+ DRW_shgroup_uniform_float(stl->g_data->fvcolor_shgrp, "alpha", &alpha, 1);
+ DRW_shgroup_uniform_float(stl->g_data->fvcolor_shgrp, "global", &world_light, 1);
+ }
+
+ {
+ /* Complementary Depth Pass */
+ psl->depth_hidden_wire = DRW_pass_create(
+ "Depth Pass Hidden Wire",
+ DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_CULL_BACK);
+ stl->g_data->depth_shgrp_hidden_wire = DRW_shgroup_create(e_data.depth_sh, psl->depth_hidden_wire);
+ }
+
+ {
+ /* Normals */
+ psl->normals = DRW_pass_create(
+ "Edit Mesh Normals Pass",
+ DRW_STATE_WRITE_DEPTH | DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_LESS);
+
+ stl->g_data->fnormals_shgrp = DRW_shgroup_create(e_data.normals_face_sh, psl->normals);
+ DRW_shgroup_uniform_float(stl->g_data->fnormals_shgrp, "normalSize", &size_normal, 1);
+ DRW_shgroup_uniform_vec4(stl->g_data->fnormals_shgrp, "color", ts.colorNormal, 1);
+
+ stl->g_data->vnormals_shgrp = DRW_shgroup_create(e_data.normals_sh, psl->normals);
+ DRW_shgroup_uniform_float(stl->g_data->vnormals_shgrp, "normalSize", &size_normal, 1);
+ DRW_shgroup_uniform_vec4(stl->g_data->vnormals_shgrp, "color", ts.colorVNormal, 1);
+
+ stl->g_data->lnormals_shgrp = DRW_shgroup_create(e_data.normals_loop_sh, psl->normals);
+ DRW_shgroup_uniform_float(stl->g_data->lnormals_shgrp, "normalSize", &size_normal, 1);
+ DRW_shgroup_uniform_vec4(stl->g_data->lnormals_shgrp, "color", ts.colorLNormal, 1);
+ }
+
+ if (!do_zbufclip) {
+ psl->edit_face_overlay = edit_mesh_create_overlay_pass(
+ &face_mod, DRW_STATE_DEPTH_LESS | DRW_STATE_WRITE_DEPTH | DRW_STATE_BLEND,
+ &stl->g_data->face_overlay_shgrp, &stl->g_data->ledges_overlay_shgrp,
+ &stl->g_data->lverts_overlay_shgrp, &stl->g_data->facedot_overlay_shgrp);
+ }
+ else {
+ /* We render all wires with depth and opaque to a new fbo and blend the result based on depth values */
+ psl->edit_face_occluded = edit_mesh_create_overlay_pass(
+ &zero, DRW_STATE_DEPTH_LESS | DRW_STATE_WRITE_DEPTH,
+ &stl->g_data->face_occluded_shgrp, &stl->g_data->ledges_occluded_shgrp,
+ &stl->g_data->lverts_occluded_shgrp, &stl->g_data->facedot_occluded_shgrp);
+
+ /* however we loose the front faces value (because we need the depth of occluded wires and
+ * faces are alpha blended ) so we recover them in a new pass. */
+ psl->facefill_occlude = DRW_pass_create(
+ "Front Face Color",
+ DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_LESS | DRW_STATE_BLEND);
+ stl->g_data->facefill_occluded_shgrp = DRW_shgroup_create(e_data.overlay_facefill_sh, psl->facefill_occlude);
+ DRW_shgroup_uniform_block(stl->g_data->facefill_occluded_shgrp, "globalsBlock", globals_ubo);
+
+ /* we need a full screen pass to combine the result */
+ struct Gwn_Batch *quad = DRW_cache_fullscreen_quad_get();
+
+ psl->mix_occlude = DRW_pass_create(
+ "Mix Occluded Wires",
+ DRW_STATE_WRITE_COLOR | DRW_STATE_BLEND);
+ DRWShadingGroup *mix_shgrp = DRW_shgroup_create(e_data.overlay_mix_sh, psl->mix_occlude);
+ DRW_shgroup_call_add(mix_shgrp, quad, NULL);
+ DRW_shgroup_uniform_float(mix_shgrp, "alpha", &backwire_opacity, 1);
+ DRW_shgroup_uniform_buffer(mix_shgrp, "wireColor", &e_data.occlude_wire_color_tx);
+ DRW_shgroup_uniform_buffer(mix_shgrp, "wireDepth", &e_data.occlude_wire_depth_tx);
+ DRW_shgroup_uniform_buffer(mix_shgrp, "sceneDepth", &dtxl->depth);
+ }
+}
+
+static void edit_mesh_add_ob_to_pass(
+ Scene *scene, Object *ob, DRWShadingGroup *face_shgrp, DRWShadingGroup *ledges_shgrp,
+ DRWShadingGroup *lverts_shgrp, DRWShadingGroup *facedot_shgrp, DRWShadingGroup *facefill_shgrp)
+{
+ struct Gwn_Batch *geo_ovl_tris, *geo_ovl_ledges, *geo_ovl_lverts, *geo_ovl_fcenter;
+ ToolSettings *tsettings = scene->toolsettings;
+
+ DRW_cache_mesh_wire_overlay_get(ob, &geo_ovl_tris, &geo_ovl_ledges, &geo_ovl_lverts);
+ DRW_shgroup_call_add(face_shgrp, geo_ovl_tris, ob->obmat);
+ DRW_shgroup_call_add(ledges_shgrp, geo_ovl_ledges, ob->obmat);
+
+ if (facefill_shgrp) {
+ DRW_shgroup_call_add(facefill_shgrp, geo_ovl_tris, ob->obmat);
+ }
+
+ if ((tsettings->selectmode & SCE_SELECT_VERTEX) != 0) {
+ DRW_shgroup_call_add(lverts_shgrp, geo_ovl_lverts, ob->obmat);
+ }
+
+ if ((tsettings->selectmode & SCE_SELECT_FACE) != 0) {
+ geo_ovl_fcenter = DRW_cache_face_centers_get(ob);
+ DRW_shgroup_call_add(facedot_shgrp, geo_ovl_fcenter, ob->obmat);
+ }
+}
+
+static void EDIT_MESH_cache_populate(void *vedata, Object *ob)
+{
+ EDIT_MESH_StorageList *stl = ((EDIT_MESH_Data *)vedata)->stl;
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ View3D *v3d = draw_ctx->v3d;
+ Scene *scene = draw_ctx->scene;
+ Object *obedit = scene->obedit;
+ struct Gwn_Batch *geom;
+
+ if (ob->type == OB_MESH) {
+ if (ob == obedit) {
+ const Mesh *me = ob->data;
+ IDProperty *ces_mode_ed = BKE_layer_collection_engine_evaluated_get(ob, COLLECTION_MODE_EDIT, "");
+ bool do_occlude_wire = BKE_collection_engine_property_value_get_bool(ces_mode_ed, "show_occlude_wire");
+ bool do_show_weight = BKE_collection_engine_property_value_get_bool(ces_mode_ed, "show_weight");
+
+ /* Updating uniform */
+ backwire_opacity = BKE_collection_engine_property_value_get_float(ces_mode_ed, "backwire_opacity");
+
+ bool fnormals_do = BKE_collection_engine_property_value_get_bool(ces_mode_ed, "face_normals_show");
+ bool vnormals_do = BKE_collection_engine_property_value_get_bool(ces_mode_ed, "vert_normals_show");
+ bool lnormals_do = BKE_collection_engine_property_value_get_bool(ces_mode_ed, "loop_normals_show");
+ /* Updating uniform */
+ size_normal = BKE_collection_engine_property_value_get_float(ces_mode_ed, "normals_length");
+
+ face_mod = (do_occlude_wire) ? 0.0f : 1.0f;
+
+ if (do_show_weight) {
+ geom = DRW_cache_mesh_surface_weights_get(ob);
+ DRW_shgroup_call_add(stl->g_data->fvcolor_shgrp, geom, ob->obmat);
+ }
+
+ if (do_occlude_wire) {
+ geom = DRW_cache_mesh_surface_get(ob);
+ DRW_shgroup_call_add(stl->g_data->depth_shgrp_hidden_wire, geom, ob->obmat);
+ }
+
+ if (fnormals_do) {
+ geom = DRW_cache_face_centers_get(ob);
+ DRW_shgroup_call_add(stl->g_data->fnormals_shgrp, geom, ob->obmat);
+ }
+
+ if (vnormals_do || lnormals_do) {
+ struct Gwn_Batch *geo_ovl_tris, *geo_ovl_ledges, *geo_ovl_lverts;
+ DRW_cache_mesh_normals_overlay_get(ob, &geo_ovl_tris, &geo_ovl_ledges, &geo_ovl_lverts);
+
+ if (vnormals_do) {
+ DRW_shgroup_call_add(stl->g_data->vnormals_shgrp, geo_ovl_tris, ob->obmat);
+ DRW_shgroup_call_add(stl->g_data->vnormals_shgrp, geo_ovl_ledges, ob->obmat);
+ DRW_shgroup_call_add(stl->g_data->vnormals_shgrp, geo_ovl_lverts, ob->obmat);
+ }
+
+ if (lnormals_do) {
+ DRW_shgroup_call_add(stl->g_data->lnormals_shgrp, geo_ovl_tris, ob->obmat);
+ }
+ }
+
+ if ((v3d->flag & V3D_ZBUF_SELECT) == 0) {
+ edit_mesh_add_ob_to_pass(
+ scene, ob, stl->g_data->face_occluded_shgrp, stl->g_data->ledges_occluded_shgrp,
+ stl->g_data->lverts_occluded_shgrp, stl->g_data->facedot_occluded_shgrp,
+ stl->g_data->facefill_occluded_shgrp);
+ }
+ else {
+ edit_mesh_add_ob_to_pass(
+ scene, ob, stl->g_data->face_overlay_shgrp, stl->g_data->ledges_overlay_shgrp,
+ stl->g_data->lverts_overlay_shgrp, stl->g_data->facedot_overlay_shgrp, NULL);
+ }
+
+ /* 3D text overlay */
+ if (me->drawflag & (ME_DRAWEXTRA_EDGELEN |
+ ME_DRAWEXTRA_FACEAREA |
+ ME_DRAWEXTRA_FACEANG |
+ ME_DRAWEXTRA_EDGEANG))
+ {
+ DRW_edit_mesh_mode_text_measure_stats(
+ draw_ctx->ar, v3d, ob, &scene->unit);
+ }
+ }
+ }
+}
+
+static void EDIT_MESH_draw_scene(void *vedata)
+{
+ EDIT_MESH_PassList *psl = ((EDIT_MESH_Data *)vedata)->psl;
+ EDIT_MESH_FramebufferList *fbl = ((EDIT_MESH_Data *)vedata)->fbl;
+ DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
+ DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
+
+ DRW_draw_pass(psl->vcolor_faces);
+
+ DRW_draw_pass(psl->depth_hidden_wire);
+
+ if (psl->edit_face_occluded) {
+ float clearcol[4] = {0.0f, 0.0f, 0.0f, 0.0f};
+ /* render facefill */
+ DRW_draw_pass(psl->facefill_occlude);
+
+ /* attach temp textures */
+ DRW_framebuffer_texture_attach(fbl->occlude_wire_fb, e_data.occlude_wire_depth_tx, 0, 0);
+ DRW_framebuffer_texture_attach(fbl->occlude_wire_fb, e_data.occlude_wire_color_tx, 0, 0);
+
+ /* Render wires on a separate framebuffer */
+ DRW_framebuffer_bind(fbl->occlude_wire_fb);
+ DRW_framebuffer_clear(true, true, false, clearcol, 1.0f);
+ DRW_draw_pass(psl->normals);
+ DRW_draw_pass(psl->edit_face_occluded);
+
+ /* detach textures */
+ DRW_framebuffer_texture_detach(dtxl->depth);
+
+ /* Combine with scene buffer */
+ DRW_framebuffer_bind(dfbl->default_fb);
+ DRW_draw_pass(psl->mix_occlude);
+
+ /* detach temp textures */
+ DRW_framebuffer_texture_detach(e_data.occlude_wire_depth_tx);
+ DRW_framebuffer_texture_detach(e_data.occlude_wire_color_tx);
+
+ /* reattach */
+ DRW_framebuffer_texture_attach(dfbl->default_fb, dtxl->depth, 0, 0);
+ }
+ else {
+ DRW_draw_pass(psl->normals);
+ DRW_draw_pass(psl->edit_face_overlay);
+ }
+}
+
+void EDIT_MESH_collection_settings_create(IDProperty *properties)
+{
+ BLI_assert(properties &&
+ properties->type == IDP_GROUP &&
+ properties->subtype == IDP_GROUP_SUB_MODE_EDIT);
+ BKE_collection_engine_property_add_int(properties, "show_occlude_wire", false);
+ BKE_collection_engine_property_add_int(properties, "show_weight", false);
+ BKE_collection_engine_property_add_int(properties, "face_normals_show", false);
+ BKE_collection_engine_property_add_int(properties, "vert_normals_show", false);
+ BKE_collection_engine_property_add_int(properties, "loop_normals_show", false);
+ BKE_collection_engine_property_add_float(properties, "normals_length", 0.1);
+ BKE_collection_engine_property_add_float(properties, "backwire_opacity", 0.5);
+}
+
+static void EDIT_MESH_engine_free(void)
+{
+ DRW_SHADER_FREE_SAFE(e_data.overlay_tri_sh);
+ DRW_SHADER_FREE_SAFE(e_data.overlay_tri_fast_sh);
+ DRW_SHADER_FREE_SAFE(e_data.overlay_tri_vcol_sh);
+ DRW_SHADER_FREE_SAFE(e_data.overlay_tri_vcol_fast_sh);
+ DRW_SHADER_FREE_SAFE(e_data.overlay_edge_sh);
+ DRW_SHADER_FREE_SAFE(e_data.overlay_edge_vcol_sh);
+ DRW_SHADER_FREE_SAFE(e_data.overlay_vert_sh);
+ DRW_SHADER_FREE_SAFE(e_data.overlay_facedot_sh);
+ DRW_SHADER_FREE_SAFE(e_data.overlay_mix_sh);
+ DRW_SHADER_FREE_SAFE(e_data.overlay_facefill_sh);
+ DRW_SHADER_FREE_SAFE(e_data.normals_loop_sh);
+ DRW_SHADER_FREE_SAFE(e_data.normals_face_sh);
+ DRW_SHADER_FREE_SAFE(e_data.normals_sh);
+}
+
+static const DrawEngineDataSize EDIT_MESH_data_size = DRW_VIEWPORT_DATA_SIZE(EDIT_MESH_Data);
+
+DrawEngineType draw_engine_edit_mesh_type = {
+ NULL, NULL,
+ N_("EditMeshMode"),
+ &EDIT_MESH_data_size,
+ &EDIT_MESH_engine_init,
+ &EDIT_MESH_engine_free,
+ &EDIT_MESH_cache_init,
+ &EDIT_MESH_cache_populate,
+ NULL,
+ NULL,
+ &EDIT_MESH_draw_scene,
+ NULL,
+ NULL,
+};
diff --git a/source/blender/draw/modes/edit_mesh_mode_intern.h b/source/blender/draw/modes/edit_mesh_mode_intern.h
new file mode 100644
index 00000000000..99298bd41f4
--- /dev/null
+++ b/source/blender/draw/modes/edit_mesh_mode_intern.h
@@ -0,0 +1,38 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/draw/modes/edit_mesh_mode_intern.h
+ * \ingroup draw
+ */
+
+#ifndef __EDIT_MESH_MODE_INTERN_H__
+#define __EDIT_MESH_MODE_INTERN_H__
+
+struct ARegion;
+struct Object;
+struct UnitSettings;
+struct View3D;
+
+/* edit_mesh_mode_text.c */
+void DRW_edit_mesh_mode_text_measure_stats(
+ struct ARegion *ar, struct View3D *v3d,
+ struct Object *ob, const UnitSettings *unit);
+
+#endif /* __EDIT_MESH_MODE_INTERN_H__ */
diff --git a/source/blender/draw/modes/edit_mesh_mode_text.c b/source/blender/draw/modes/edit_mesh_mode_text.c
new file mode 100644
index 00000000000..a832c61cab5
--- /dev/null
+++ b/source/blender/draw/modes/edit_mesh_mode_text.c
@@ -0,0 +1,301 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file blender/draw/modes/edit_mesh_mode_text.c
+ * \ingroup draw
+ */
+
+#include "BLI_math.h"
+#include "BLI_string.h"
+
+#include "BKE_editmesh.h"
+#include "BKE_global.h"
+#include "BKE_unit.h"
+
+#include "ED_view3d.h"
+
+#include "GPU_shader.h"
+#include "GPU_viewport.h"
+
+#include "DNA_mesh_types.h"
+#include "DNA_object_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_screen_types.h"
+#include "DNA_view3d_types.h"
+
+#include "UI_resources.h"
+
+#include "draw_manager_text.h"
+
+#include "edit_mesh_mode_intern.h" /* own include */
+
+/* Copied from drawobject.c */
+void DRW_edit_mesh_mode_text_measure_stats(
+ ARegion *ar, View3D *v3d,
+ Object *ob, const UnitSettings *unit)
+{
+ /* Do not use ascii when using non-default unit system, some unit chars are utf8 (micro, square, etc.).
+ * See bug #36090.
+ */
+ struct DRWTextStore *dt = DRW_text_cache_ensure();
+ const short txt_flag = DRW_TEXT_CACHE_LOCALCLIP | (unit->system ? 0 : DRW_TEXT_CACHE_ASCII);
+ Mesh *me = ob->data;
+ BMEditMesh *em = me->edit_btmesh;
+ float v1[3], v2[3], v3[3], vmid[3], fvec[3];
+ char numstr[32]; /* Stores the measurement display text here */
+ size_t numstr_len;
+ const char *conv_float; /* Use a float conversion matching the grid size */
+ unsigned char col[4] = {0, 0, 0, 255}; /* color of the text to draw */
+ float area; /* area of the face */
+ float grid = unit->system ? unit->scale_length : v3d->grid;
+ const bool do_split = (unit->flag & USER_UNIT_OPT_SPLIT) != 0;
+ const bool do_global = (v3d->flag & V3D_GLOBAL_STATS) != 0;
+ const bool do_moving = (G.moving & G_TRANSFORM_EDIT) != 0;
+ /* when 2 edge-info options are enabled, space apart */
+ const bool do_edge_textpair = (me->drawflag & ME_DRAWEXTRA_EDGELEN) && (me->drawflag & ME_DRAWEXTRA_EDGEANG);
+ const float edge_texpair_sep = 0.4f;
+ float clip_planes[4][4];
+ /* allow for displaying shape keys and deform mods */
+ BMIter iter;
+
+ /* make the precision of the display value proportionate to the gridsize */
+
+ if (grid <= 0.01f) conv_float = "%.6g";
+ else if (grid <= 0.1f) conv_float = "%.5g";
+ else if (grid <= 1.0f) conv_float = "%.4g";
+ else if (grid <= 10.0f) conv_float = "%.3g";
+ else conv_float = "%.2g";
+
+ if (me->drawflag & (ME_DRAWEXTRA_EDGELEN | ME_DRAWEXTRA_EDGEANG)) {
+ BoundBox bb;
+ const rcti rect = {0, ar->winx, 0, ar->winy};
+
+ ED_view3d_clipping_calc(&bb, clip_planes, ar, em->ob, &rect);
+ }
+
+ if (me->drawflag & ME_DRAWEXTRA_EDGELEN) {
+ BMEdge *eed;
+
+ UI_GetThemeColor3ubv(TH_DRAWEXTRA_EDGELEN, col);
+
+ BM_ITER_MESH (eed, &iter, em->bm, BM_EDGES_OF_MESH) {
+ /* draw selected edges, or edges next to selected verts while dragging */
+ if (BM_elem_flag_test(eed, BM_ELEM_SELECT) ||
+ (do_moving && (BM_elem_flag_test(eed->v1, BM_ELEM_SELECT) ||
+ BM_elem_flag_test(eed->v2, BM_ELEM_SELECT))))
+ {
+ float v1_clip[3], v2_clip[3];
+
+ copy_v3_v3(v1, eed->v1->co);
+ copy_v3_v3(v2, eed->v2->co);
+
+ if (clip_segment_v3_plane_n(v1, v2, clip_planes, 4, v1_clip, v2_clip)) {
+
+ if (do_edge_textpair) {
+ interp_v3_v3v3(vmid, v1, v2, edge_texpair_sep);
+ }
+ else {
+ mid_v3_v3v3(vmid, v1_clip, v2_clip);
+ }
+
+ if (do_global) {
+ mul_mat3_m4_v3(ob->obmat, v1);
+ mul_mat3_m4_v3(ob->obmat, v2);
+ }
+
+ if (unit->system) {
+ numstr_len = bUnit_AsString(
+ numstr, sizeof(numstr), len_v3v3(v1, v2) * unit->scale_length, 3,
+ unit->system, B_UNIT_LENGTH, do_split, false);
+ }
+ else {
+ numstr_len = BLI_snprintf_rlen(numstr, sizeof(numstr), conv_float, len_v3v3(v1, v2));
+ }
+
+ DRW_text_cache_add(dt, vmid, numstr, numstr_len, 0, txt_flag, col);
+ }
+ }
+ }
+ }
+
+ if (me->drawflag & ME_DRAWEXTRA_EDGEANG) {
+ const bool is_rad = (unit->system_rotation == USER_UNIT_ROT_RADIANS);
+ BMEdge *eed;
+
+ UI_GetThemeColor3ubv(TH_DRAWEXTRA_EDGEANG, col);
+
+ BM_ITER_MESH (eed, &iter, em->bm, BM_EDGES_OF_MESH) {
+ BMLoop *l_a, *l_b;
+ if (BM_edge_loop_pair(eed, &l_a, &l_b)) {
+ /* draw selected edges, or edges next to selected verts while dragging */
+ if (BM_elem_flag_test(eed, BM_ELEM_SELECT) ||
+ (do_moving &&
+ (BM_elem_flag_test(eed->v1, BM_ELEM_SELECT) ||
+ BM_elem_flag_test(eed->v2, BM_ELEM_SELECT) ||
+ /* special case, this is useful to show when verts connected to
+ * this edge via a face are being transformed */
+ BM_elem_flag_test(l_a->next->next->v, BM_ELEM_SELECT) ||
+ BM_elem_flag_test(l_a->prev->v, BM_ELEM_SELECT) ||
+ BM_elem_flag_test(l_b->next->next->v, BM_ELEM_SELECT) ||
+ BM_elem_flag_test(l_b->prev->v, BM_ELEM_SELECT)
+ )))
+ {
+ float v1_clip[3], v2_clip[3];
+
+ copy_v3_v3(v1, eed->v1->co);
+ copy_v3_v3(v2, eed->v2->co);
+
+ if (clip_segment_v3_plane_n(v1, v2, clip_planes, 4, v1_clip, v2_clip)) {
+ float no_a[3], no_b[3];
+ float angle;
+
+ if (do_edge_textpair) {
+ interp_v3_v3v3(vmid, v2_clip, v1_clip, edge_texpair_sep);
+ }
+ else {
+ mid_v3_v3v3(vmid, v1_clip, v2_clip);
+ }
+
+ copy_v3_v3(no_a, l_a->f->no);
+ copy_v3_v3(no_b, l_b->f->no);
+
+ if (do_global) {
+ mul_mat3_m4_v3(ob->imat, no_a);
+ mul_mat3_m4_v3(ob->imat, no_b);
+ normalize_v3(no_a);
+ normalize_v3(no_b);
+ }
+
+ angle = angle_normalized_v3v3(no_a, no_b);
+
+ numstr_len = BLI_snprintf_rlen(
+ numstr, sizeof(numstr), "%.3f", is_rad ? angle : RAD2DEGF(angle));
+
+ DRW_text_cache_add(dt, vmid, numstr, numstr_len, 0, txt_flag, col);
+ }
+ }
+ }
+ }
+ }
+
+ if (me->drawflag & ME_DRAWEXTRA_FACEAREA) {
+ /* would be nice to use BM_face_calc_area, but that is for 2d faces
+ * so instead add up tessellation triangle areas */
+
+ UI_GetThemeColor3ubv(TH_DRAWEXTRA_FACEAREA, col);
+
+ int i, n, numtri;
+ BMFace *f = NULL;
+ BM_ITER_MESH_INDEX(f, &iter, em->bm, BM_FACES_OF_MESH, i) {
+ if (BM_elem_flag_test(f, BM_ELEM_SELECT)) {
+ n = 0;
+ numtri = f->len - 2;
+ area = 0;
+ zero_v3(vmid);
+ BMLoop *(*l)[3] = &em->looptris[poly_to_tri_count(i, BM_elem_index_get(f->l_first))];
+ for (int j = 0; j < numtri; j++) {
+ copy_v3_v3(v1, l[j][0]->v->co);
+ copy_v3_v3(v2, l[j][1]->v->co);
+ copy_v3_v3(v3, l[j][2]->v->co);
+
+ add_v3_v3(vmid, v1);
+ add_v3_v3(vmid, v2);
+ add_v3_v3(vmid, v3);
+ n += 3;
+
+ if (do_global) {
+ mul_mat3_m4_v3(ob->obmat, v1);
+ mul_mat3_m4_v3(ob->obmat, v2);
+ mul_mat3_m4_v3(ob->obmat, v3);
+ }
+
+ area += area_tri_v3(v1, v2, v3);
+ }
+
+ mul_v3_fl(vmid, 1.0f / (float)n);
+
+ if (unit->system) {
+ numstr_len = bUnit_AsString(
+ numstr, sizeof(numstr),
+ (double)(area * unit->scale_length * unit->scale_length),
+ 3, unit->system, B_UNIT_AREA, do_split, false);
+ }
+ else {
+ numstr_len = BLI_snprintf_rlen(numstr, sizeof(numstr), conv_float, area);
+ }
+
+ DRW_text_cache_add(dt, vmid, numstr, numstr_len, 0, txt_flag, col);
+ }
+ }
+ }
+
+ if (me->drawflag & ME_DRAWEXTRA_FACEANG) {
+ BMFace *efa;
+ const bool is_rad = (unit->system_rotation == USER_UNIT_ROT_RADIANS);
+
+ UI_GetThemeColor3ubv(TH_DRAWEXTRA_FACEANG, col);
+
+ BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
+ const bool is_face_sel = BM_elem_flag_test_bool(efa, BM_ELEM_SELECT);
+
+ if (is_face_sel || do_moving) {
+ BMIter liter;
+ BMLoop *loop;
+ bool is_first = true;
+
+ BM_ITER_ELEM (loop, &liter, efa, BM_LOOPS_OF_FACE) {
+ if (is_face_sel ||
+ (do_moving &&
+ (BM_elem_flag_test(loop->v, BM_ELEM_SELECT) ||
+ BM_elem_flag_test(loop->prev->v, BM_ELEM_SELECT) ||
+ BM_elem_flag_test(loop->next->v, BM_ELEM_SELECT))))
+ {
+ float v2_local[3];
+
+ /* lazy init center calc */
+ if (is_first) {
+ BM_face_calc_center_bounds(efa, vmid);
+ is_first = false;
+ }
+ copy_v3_v3(v1, loop->prev->v->co);
+ copy_v3_v3(v2, loop->v->co);
+ copy_v3_v3(v3, loop->next->v->co);
+
+ copy_v3_v3(v2_local, v2);
+
+ if (do_global) {
+ mul_mat3_m4_v3(ob->obmat, v1);
+ mul_mat3_m4_v3(ob->obmat, v2);
+ mul_mat3_m4_v3(ob->obmat, v3);
+ }
+
+ float angle = angle_v3v3v3(v1, v2, v3);
+
+ numstr_len = BLI_snprintf_rlen(
+ numstr, sizeof(numstr), "%.3f", is_rad ? angle : RAD2DEGF(angle));
+ interp_v3_v3v3(fvec, vmid, v2_local, 0.8f);
+ DRW_text_cache_add(dt, fvec, numstr, numstr_len, 0, txt_flag, col);
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/source/blender/draw/modes/edit_metaball_mode.c b/source/blender/draw/modes/edit_metaball_mode.c
new file mode 100644
index 00000000000..78ceaf8b6f1
--- /dev/null
+++ b/source/blender/draw/modes/edit_metaball_mode.c
@@ -0,0 +1,252 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file blender/draw/modes/edit_metaball_mode.c
+ * \ingroup draw
+ */
+
+#include "DRW_engine.h"
+#include "DRW_render.h"
+
+#include "DNA_meta_types.h"
+
+#include "BKE_mball.h"
+
+/* If builtin shaders are needed */
+#include "GPU_shader.h"
+#include "GPU_select.h"
+
+#include "draw_common.h"
+
+#include "draw_mode_engines.h"
+
+/* If needed, contains all global/Theme colors
+ * Add needed theme colors / values to DRW_globals_update() and update UBO
+ * Not needed for constant color. */
+extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
+extern struct GlobalsUboStorage ts; /* draw_common.c */
+
+/* *********** LISTS *********** */
+/* All lists are per viewport specific datas.
+ * They are all free when viewport changes engines
+ * or is free itself. Use EDIT_METABALL_engine_init() to
+ * initialize most of them and EDIT_METABALL_cache_init()
+ * for EDIT_METABALL_PassList */
+
+typedef struct EDIT_METABALL_PassList {
+ /* Declare all passes here and init them in
+ * EDIT_METABALL_cache_init().
+ * Only contains (DRWPass *) */
+ struct DRWPass *pass;
+} EDIT_METABALL_PassList;
+
+typedef struct EDIT_METABALL_FramebufferList {
+ /* Contains all framebuffer objects needed by this engine.
+ * Only contains (GPUFrameBuffer *) */
+ struct GPUFrameBuffer *fb;
+} EDIT_METABALL_FramebufferList;
+
+typedef struct EDIT_METABALL_TextureList {
+ /* Contains all framebuffer textures / utility textures
+ * needed by this engine. Only viewport specific textures
+ * (not per object). Only contains (GPUTexture *) */
+ struct GPUTexture *texture;
+} EDIT_METABALL_TextureList;
+
+typedef struct EDIT_METABALL_StorageList {
+ /* Contains any other memory block that the engine needs.
+ * Only directly MEM_(m/c)allocN'ed blocks because they are
+ * free with MEM_freeN() when viewport is freed.
+ * (not per object) */
+ // struct CustomStruct *block;
+ struct EDIT_METABALL_PrivateData *g_data;
+} EDIT_METABALL_StorageList;
+
+typedef struct EDIT_METABALL_Data {
+ /* Struct returned by DRW_viewport_engine_data_ensure.
+ * If you don't use one of these, just make it a (void *) */
+ // void *fbl;
+ void *engine_type; /* Required */
+ EDIT_METABALL_FramebufferList *fbl;
+ EDIT_METABALL_TextureList *txl;
+ EDIT_METABALL_PassList *psl;
+ EDIT_METABALL_StorageList *stl;
+} EDIT_METABALL_Data;
+
+/* *********** STATIC *********** */
+
+typedef struct EDIT_METABALL_PrivateData {
+ /* This keeps the references of the shading groups for
+ * easy access in EDIT_METABALL_cache_populate() */
+ DRWShadingGroup *group;
+} EDIT_METABALL_PrivateData; /* Transient data */
+
+/* *********** FUNCTIONS *********** */
+
+/* Here init all passes and shading groups
+ * Assume that all Passes are NULL */
+static void EDIT_METABALL_cache_init(void *vedata)
+{
+ EDIT_METABALL_PassList *psl = ((EDIT_METABALL_Data *)vedata)->psl;
+ EDIT_METABALL_StorageList *stl = ((EDIT_METABALL_Data *)vedata)->stl;
+
+ if (!stl->g_data) {
+ /* Alloc transient pointers */
+ stl->g_data = MEM_mallocN(sizeof(*stl->g_data), __func__);
+ }
+
+ {
+ /* Create a pass */
+ DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_BLEND | DRW_STATE_WIRE;
+ psl->pass = DRW_pass_create("My Pass", state);
+
+ /* Create a shadingGroup using a function in draw_common.c or custom one */
+ stl->g_data->group = shgroup_instance_mball_helpers(psl->pass, DRW_cache_screenspace_circle_get());
+ }
+}
+
+static void EDIT_METABALL_cache_populate_radius_visualization(
+ DRWShadingGroup *group, MetaElem *ml, const float scale_xform[3][4],
+ const float *radius, const int selection_id)
+{
+ const float *color;
+ static const float col_radius[3] = {0.63, 0.19, 0.19}; /* 0x3030A0 */
+ static const float col_radius_select[3] = {0.94, 0.63, 0.63}; /* 0xA0A0F0 */
+
+ if ((ml->flag & SELECT) && (ml->flag & MB_SCALE_RAD)) color = col_radius_select;
+ else color = col_radius;
+
+ if (selection_id != -1) {
+ ml->selcol1 = selection_id;
+ DRW_select_load_id(selection_id);
+ }
+
+ DRW_shgroup_call_dynamic_add(group, scale_xform, radius, color);
+}
+
+static void EDIT_METABALL_cache_populate_stiffness_visualization(
+ DRWShadingGroup *group, MetaElem *ml, const float scale_xform[3][4],
+ const float *radius, const int selection_id)
+{
+ const float *color;
+ static const float col_stiffness[3] = {0.19, 0.63, 0.19}; /* 0x30A030 */
+ static const float col_stiffness_select[3] = {0.63, 0.94, 0.63}; /* 0xA0F0A0 */
+
+ if ((ml->flag & SELECT) && !(ml->flag & MB_SCALE_RAD)) color = col_stiffness_select;
+ else color = col_stiffness;
+
+ if (selection_id != -1) {
+ ml->selcol2 = selection_id;
+ DRW_select_load_id(selection_id);
+ }
+
+ DRW_shgroup_call_dynamic_add(group, scale_xform, radius, color);
+}
+
+/* Add geometry to shadingGroups. Execute for each objects */
+static void EDIT_METABALL_cache_populate(void *vedata, Object *ob)
+{
+ //EDIT_METABALL_PassList *psl = ((EDIT_METABALL_Data *)vedata)->psl;
+ EDIT_METABALL_StorageList *stl = ((EDIT_METABALL_Data *)vedata)->stl;
+
+ if (ob->type == OB_MBALL) {
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ Scene *scene = draw_ctx->scene;
+ Object *obedit = scene->obedit;
+ DRWShadingGroup *group = stl->g_data->group;
+
+ if (ob == obedit) {
+ MetaBall *mb = ob->data;
+
+ const bool is_select = DRW_state_is_select();
+
+ int selection_id = 0;
+
+ for (MetaElem *ml = mb->editelems->first; ml != NULL; ml = ml->next) {
+ BKE_mball_element_calc_display_m3x4(ml->draw_scale_xform, ob->obmat, &ml->x);
+ ml->draw_stiffness_radius = ml->rad * atanf(ml->s) / (float)M_PI_2;
+
+ EDIT_METABALL_cache_populate_radius_visualization(
+ group, ml, ml->draw_scale_xform, &ml->rad, is_select ? ++selection_id : -1);
+
+ EDIT_METABALL_cache_populate_stiffness_visualization(
+ group, ml, ml->draw_scale_xform, &ml->draw_stiffness_radius, is_select ? ++selection_id : -1);
+ }
+ }
+ }
+}
+
+/* Draw time ! Control rendering pipeline from here */
+static void EDIT_METABALL_draw_scene(void *vedata)
+{
+ EDIT_METABALL_PassList *psl = ((EDIT_METABALL_Data *)vedata)->psl;
+ /* render passes on default framebuffer. */
+ DRW_draw_pass(psl->pass);
+
+ /* If you changed framebuffer, double check you rebind
+ * the default one with its textures attached before finishing */
+}
+
+/* Cleanup when destroying the engine.
+ * This is not per viewport ! only when quitting blender.
+ * Mostly used for freeing shaders */
+static void EDIT_METABALL_engine_free(void)
+{
+ // DRW_SHADER_FREE_SAFE(custom_shader);
+}
+
+/* Create collection settings here.
+ *
+ * Be sure to add this function there :
+ * source/blender/draw/DRW_engine.h
+ * source/blender/blenkernel/intern/layer.c
+ * source/blenderplayer/bad_level_call_stubs/stubs.c
+ *
+ * And relevant collection settings to :
+ * source/blender/makesrna/intern/rna_scene.c
+ * source/blender/blenkernel/intern/layer.c
+ */
+#if 0
+void EDIT_METABALL_collection_settings_create(CollectionEngineSettings *ces)
+{
+ BLI_assert(ces);
+ // BKE_collection_engine_property_add_int(ces, "my_bool_prop", false);
+ // BKE_collection_engine_property_add_int(ces, "my_int_prop", 0);
+ // BKE_collection_engine_property_add_float(ces, "my_float_prop", 0.0f);
+}
+#endif
+
+static const DrawEngineDataSize EDIT_METABALL_data_size = DRW_VIEWPORT_DATA_SIZE(EDIT_METABALL_Data);
+
+DrawEngineType draw_engine_edit_metaball_type = {
+ NULL, NULL,
+ N_("EditMetaballMode"),
+ &EDIT_METABALL_data_size,
+ NULL,
+ &EDIT_METABALL_engine_free,
+ &EDIT_METABALL_cache_init,
+ &EDIT_METABALL_cache_populate,
+ NULL,
+ NULL, /* draw_background but not needed by mode engines */
+ &EDIT_METABALL_draw_scene,
+ NULL,
+ NULL,
+};
diff --git a/source/blender/draw/modes/edit_surface_mode.c b/source/blender/draw/modes/edit_surface_mode.c
new file mode 100644
index 00000000000..8f0371925db
--- /dev/null
+++ b/source/blender/draw/modes/edit_surface_mode.c
@@ -0,0 +1,270 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file blender/draw/modes/edit_surface_mode.c
+ * \ingroup draw
+ */
+
+#include "DRW_engine.h"
+#include "DRW_render.h"
+
+/* If builtin shaders are needed */
+#include "GPU_shader.h"
+
+#include "draw_common.h"
+
+#include "draw_mode_engines.h"
+
+/* If needed, contains all global/Theme colors
+ * Add needed theme colors / values to DRW_globals_update() and update UBO
+ * Not needed for constant color. */
+extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
+extern struct GlobalsUboStorage ts; /* draw_common.c */
+
+/* *********** LISTS *********** */
+/* All lists are per viewport specific datas.
+ * They are all free when viewport changes engines
+ * or is free itself. Use EDIT_SURFACE_engine_init() to
+ * initialize most of them and EDIT_SURFACE_cache_init()
+ * for EDIT_SURFACE_PassList */
+
+typedef struct EDIT_SURFACE_PassList {
+ /* Declare all passes here and init them in
+ * EDIT_SURFACE_cache_init().
+ * Only contains (DRWPass *) */
+ struct DRWPass *pass;
+} EDIT_SURFACE_PassList;
+
+typedef struct EDIT_SURFACE_FramebufferList {
+ /* Contains all framebuffer objects needed by this engine.
+ * Only contains (GPUFrameBuffer *) */
+ struct GPUFrameBuffer *fb;
+} EDIT_SURFACE_FramebufferList;
+
+typedef struct EDIT_SURFACE_TextureList {
+ /* Contains all framebuffer textures / utility textures
+ * needed by this engine. Only viewport specific textures
+ * (not per object). Only contains (GPUTexture *) */
+ struct GPUTexture *texture;
+} EDIT_SURFACE_TextureList;
+
+typedef struct EDIT_SURFACE_StorageList {
+ /* Contains any other memory block that the engine needs.
+ * Only directly MEM_(m/c)allocN'ed blocks because they are
+ * free with MEM_freeN() when viewport is freed.
+ * (not per object) */
+ struct CustomStruct *block;
+ struct EDIT_SURFACE_PrivateData *g_data;
+} EDIT_SURFACE_StorageList;
+
+typedef struct EDIT_SURFACE_Data {
+ /* Struct returned by DRW_viewport_engine_data_ensure.
+ * If you don't use one of these, just make it a (void *) */
+ // void *fbl;
+ void *engine_type; /* Required */
+ EDIT_SURFACE_FramebufferList *fbl;
+ EDIT_SURFACE_TextureList *txl;
+ EDIT_SURFACE_PassList *psl;
+ EDIT_SURFACE_StorageList *stl;
+} EDIT_SURFACE_Data;
+
+/* *********** STATIC *********** */
+
+static struct {
+ /* Custom shaders :
+ * Add sources to source/blender/draw/modes/shaders
+ * init in EDIT_SURFACE_engine_init();
+ * free in EDIT_SURFACE_engine_free(); */
+ struct GPUShader *custom_shader;
+} e_data = {NULL}; /* Engine data */
+
+typedef struct EDIT_SURFACE_PrivateData {
+ /* This keeps the references of the shading groups for
+ * easy access in EDIT_SURFACE_cache_populate() */
+ DRWShadingGroup *group;
+} EDIT_SURFACE_PrivateData; /* Transient data */
+
+/* *********** FUNCTIONS *********** */
+
+/* Init Textures, Framebuffers, Storage and Shaders.
+ * It is called for every frames.
+ * (Optional) */
+static void EDIT_SURFACE_engine_init(void *vedata)
+{
+ EDIT_SURFACE_TextureList *txl = ((EDIT_SURFACE_Data *)vedata)->txl;
+ EDIT_SURFACE_FramebufferList *fbl = ((EDIT_SURFACE_Data *)vedata)->fbl;
+ EDIT_SURFACE_StorageList *stl = ((EDIT_SURFACE_Data *)vedata)->stl;
+
+ UNUSED_VARS(txl, fbl, stl);
+
+ /* Init Framebuffers like this: order is attachment order (for color texs) */
+ /*
+ * DRWFboTexture tex[2] = {{&txl->depth, DRW_TEX_DEPTH_24, 0},
+ * {&txl->color, DRW_TEX_RGBA_8, DRW_TEX_FILTER}};
+ */
+
+ /* DRW_framebuffer_init takes care of checking if
+ * the framebuffer is valid and has the right size*/
+ /*
+ * float *viewport_size = DRW_viewport_size_get();
+ * DRW_framebuffer_init(&fbl->occlude_wire_fb,
+ * (int)viewport_size[0], (int)viewport_size[1],
+ * tex, 2);
+ */
+
+ if (!e_data.custom_shader) {
+ e_data.custom_shader = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
+ }
+}
+
+/* Here init all passes and shading groups
+ * Assume that all Passes are NULL */
+static void EDIT_SURFACE_cache_init(void *vedata)
+{
+ EDIT_SURFACE_PassList *psl = ((EDIT_SURFACE_Data *)vedata)->psl;
+ EDIT_SURFACE_StorageList *stl = ((EDIT_SURFACE_Data *)vedata)->stl;
+
+ if (!stl->g_data) {
+ /* Alloc transient pointers */
+ stl->g_data = MEM_mallocN(sizeof(*stl->g_data), __func__);
+ }
+
+ {
+ /* Create a pass */
+ DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_BLEND | DRW_STATE_WIRE;
+ psl->pass = DRW_pass_create("My Pass", state);
+
+ /* Create a shadingGroup using a function in draw_common.c or custom one */
+ /*
+ * stl->g_data->group = shgroup_dynlines_uniform_color(psl->pass, ts.colorWire);
+ * -- or --
+ * stl->g_data->group = DRW_shgroup_create(e_data.custom_shader, psl->pass);
+ */
+ stl->g_data->group = DRW_shgroup_create(e_data.custom_shader, psl->pass);
+
+ /* Uniforms need a pointer to it's value so be sure it's accessible at
+ * any given time (i.e. use static vars) */
+ static float color[4] = {0.0f, 0.0f, 1.0f, 1.0};
+ DRW_shgroup_uniform_vec4(stl->g_data->group, "color", color, 1);
+ }
+
+}
+
+/* Add geometry to shadingGroups. Execute for each objects */
+static void EDIT_SURFACE_cache_populate(void *vedata, Object *ob)
+{
+ EDIT_SURFACE_PassList *psl = ((EDIT_SURFACE_Data *)vedata)->psl;
+ EDIT_SURFACE_StorageList *stl = ((EDIT_SURFACE_Data *)vedata)->stl;
+
+ UNUSED_VARS(psl, stl);
+
+ if (ob->type == OB_MESH) {
+ /* Get geometry cache */
+ struct Gwn_Batch *geom = DRW_cache_mesh_surface_get(ob);
+
+ /* Add geom to a shading group */
+ DRW_shgroup_call_add(stl->g_data->group, geom, ob->obmat);
+ }
+}
+
+/* Optional: Post-cache_populate callback */
+static void EDIT_SURFACE_cache_finish(void *vedata)
+{
+ EDIT_SURFACE_PassList *psl = ((EDIT_SURFACE_Data *)vedata)->psl;
+ EDIT_SURFACE_StorageList *stl = ((EDIT_SURFACE_Data *)vedata)->stl;
+
+ /* Do something here! dependant on the objects gathered */
+ UNUSED_VARS(psl, stl);
+}
+
+/* Draw time ! Control rendering pipeline from here */
+static void EDIT_SURFACE_draw_scene(void *vedata)
+{
+ EDIT_SURFACE_PassList *psl = ((EDIT_SURFACE_Data *)vedata)->psl;
+ EDIT_SURFACE_FramebufferList *fbl = ((EDIT_SURFACE_Data *)vedata)->fbl;
+
+ /* Default framebuffer and texture */
+ DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
+ DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
+
+ UNUSED_VARS(fbl, dfbl, dtxl);
+
+ /* Show / hide entire passes, swap framebuffers ... whatever you fancy */
+ /*
+ * DRW_framebuffer_texture_detach(dtxl->depth);
+ * DRW_framebuffer_bind(fbl->custom_fb);
+ * DRW_draw_pass(psl->pass);
+ * DRW_framebuffer_texture_attach(dfbl->default_fb, dtxl->depth, 0, 0);
+ * DRW_framebuffer_bind(dfbl->default_fb);
+ */
+
+ /* ... or just render passes on default framebuffer. */
+ DRW_draw_pass(psl->pass);
+
+ /* If you changed framebuffer, double check you rebind
+ * the default one with its textures attached before finishing */
+}
+
+/* Cleanup when destroying the engine.
+ * This is not per viewport ! only when quitting blender.
+ * Mostly used for freeing shaders */
+static void EDIT_SURFACE_engine_free(void)
+{
+ // DRW_SHADER_FREE_SAFE(custom_shader);
+}
+
+/* Create collection settings here.
+ *
+ * Be sure to add this function there :
+ * source/blender/draw/DRW_engine.h
+ * source/blender/blenkernel/intern/layer.c
+ * source/blenderplayer/bad_level_call_stubs/stubs.c
+ *
+ * And relevant collection settings to :
+ * source/blender/makesrna/intern/rna_scene.c
+ * source/blender/blenkernel/intern/layer.c
+ */
+#if 0
+void EDIT_SURFACE_collection_settings_create(CollectionEngineSettings *ces)
+{
+ BLI_assert(ces);
+ // BKE_collection_engine_property_add_int(ces, "my_bool_prop", false);
+ // BKE_collection_engine_property_add_int(ces, "my_int_prop", 0);
+ // BKE_collection_engine_property_add_float(ces, "my_float_prop", 0.0f);
+}
+#endif
+
+static const DrawEngineDataSize EDIT_SURFACE_data_size = DRW_VIEWPORT_DATA_SIZE(EDIT_SURFACE_Data);
+
+DrawEngineType draw_engine_edit_surface_type = {
+ NULL, NULL,
+ N_("EditSurfaceMode"),
+ &EDIT_SURFACE_data_size,
+ &EDIT_SURFACE_engine_init,
+ &EDIT_SURFACE_engine_free,
+ &EDIT_SURFACE_cache_init,
+ &EDIT_SURFACE_cache_populate,
+ &EDIT_SURFACE_cache_finish,
+ NULL, /* draw_background but not needed by mode engines */
+ &EDIT_SURFACE_draw_scene,
+ NULL,
+ NULL,
+};
diff --git a/source/blender/draw/modes/edit_text_mode.c b/source/blender/draw/modes/edit_text_mode.c
new file mode 100644
index 00000000000..60f28d89f4b
--- /dev/null
+++ b/source/blender/draw/modes/edit_text_mode.c
@@ -0,0 +1,313 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file blender/draw/modes/edit_text_mode.c
+ * \ingroup draw
+ */
+
+#include "DRW_engine.h"
+#include "DRW_render.h"
+
+#include "DNA_curve_types.h"
+
+#include "BIF_glutil.h"
+
+/* If builtin shaders are needed */
+#include "GPU_shader.h"
+#include "GPU_batch.h"
+
+#include "draw_common.h"
+
+#include "draw_mode_engines.h"
+
+/* If needed, contains all global/Theme colors
+ * Add needed theme colors / values to DRW_globals_update() and update UBO
+ * Not needed for constant color. */
+extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
+extern struct GlobalsUboStorage ts; /* draw_common.c */
+
+/* *********** LISTS *********** */
+/* All lists are per viewport specific datas.
+ * They are all free when viewport changes engines
+ * or is free itself. Use EDIT_TEXT_engine_init() to
+ * initialize most of them and EDIT_TEXT_cache_init()
+ * for EDIT_TEXT_PassList */
+
+typedef struct EDIT_TEXT_PassList {
+ /* Declare all passes here and init them in
+ * EDIT_TEXT_cache_init().
+ * Only contains (DRWPass *) */
+ struct DRWPass *wire_pass;
+ struct DRWPass *overlay_select_pass;
+ struct DRWPass *overlay_cursor_pass;
+} EDIT_TEXT_PassList;
+
+typedef struct EDIT_TEXT_FramebufferList {
+ /* Contains all framebuffer objects needed by this engine.
+ * Only contains (GPUFrameBuffer *) */
+ struct GPUFrameBuffer *fb;
+} EDIT_TEXT_FramebufferList;
+
+typedef struct EDIT_TEXT_TextureList {
+ /* Contains all framebuffer textures / utility textures
+ * needed by this engine. Only viewport specific textures
+ * (not per object). Only contains (GPUTexture *) */
+ struct GPUTexture *texture;
+} EDIT_TEXT_TextureList;
+
+typedef struct EDIT_TEXT_StorageList {
+ /* Contains any other memory block that the engine needs.
+ * Only directly MEM_(m/c)allocN'ed blocks because they are
+ * free with MEM_freeN() when viewport is freed.
+ * (not per object) */
+ struct CustomStruct *block;
+ struct EDIT_TEXT_PrivateData *g_data;
+} EDIT_TEXT_StorageList;
+
+typedef struct EDIT_TEXT_Data {
+ /* Struct returned by DRW_viewport_engine_data_ensure.
+ * If you don't use one of these, just make it a (void *) */
+ // void *fbl;
+ void *engine_type; /* Required */
+ EDIT_TEXT_FramebufferList *fbl;
+ EDIT_TEXT_TextureList *txl;
+ EDIT_TEXT_PassList *psl;
+ EDIT_TEXT_StorageList *stl;
+} EDIT_TEXT_Data;
+
+/* *********** STATIC *********** */
+
+static struct {
+ /* Custom shaders :
+ * Add sources to source/blender/draw/modes/shaders
+ * init in EDIT_TEXT_engine_init();
+ * free in EDIT_TEXT_engine_free(); */
+ GPUShader *wire_sh;
+ GPUShader *overlay_select_sh;
+ GPUShader *overlay_cursor_sh;
+} e_data = {NULL}; /* Engine data */
+
+typedef struct EDIT_TEXT_PrivateData {
+ /* resulting curve as 'wire' for fast editmode drawing */
+ DRWShadingGroup *wire_shgrp;
+ DRWShadingGroup *overlay_select_shgrp;
+ DRWShadingGroup *overlay_cursor_shgrp;
+} EDIT_TEXT_PrivateData; /* Transient data */
+
+/* *********** FUNCTIONS *********** */
+
+/* Init Textures, Framebuffers, Storage and Shaders.
+ * It is called for every frames.
+ * (Optional) */
+static void EDIT_TEXT_engine_init(void *vedata)
+{
+ EDIT_TEXT_TextureList *txl = ((EDIT_TEXT_Data *)vedata)->txl;
+ EDIT_TEXT_FramebufferList *fbl = ((EDIT_TEXT_Data *)vedata)->fbl;
+ EDIT_TEXT_StorageList *stl = ((EDIT_TEXT_Data *)vedata)->stl;
+
+ UNUSED_VARS(txl, fbl, stl);
+
+ /* Init Framebuffers like this: order is attachment order (for color texs) */
+ /*
+ * DRWFboTexture tex[2] = {{&txl->depth, DRW_TEX_DEPTH_24, 0},
+ * {&txl->color, DRW_TEX_RGBA_8, DRW_TEX_FILTER}};
+ */
+
+ /* DRW_framebuffer_init takes care of checking if
+ * the framebuffer is valid and has the right size*/
+ /*
+ * float *viewport_size = DRW_viewport_size_get();
+ * DRW_framebuffer_init(&fbl->occlude_wire_fb,
+ * (int)viewport_size[0], (int)viewport_size[1],
+ * tex, 2);
+ */
+
+ if (!e_data.wire_sh) {
+ e_data.wire_sh = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
+ }
+
+ if (!e_data.overlay_select_sh) {
+ e_data.overlay_select_sh = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
+ }
+
+ if (!e_data.overlay_cursor_sh) {
+ e_data.overlay_cursor_sh = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
+ }
+}
+
+/* Here init all passes and shading groups
+ * Assume that all Passes are NULL */
+static void EDIT_TEXT_cache_init(void *vedata)
+{
+ EDIT_TEXT_PassList *psl = ((EDIT_TEXT_Data *)vedata)->psl;
+ EDIT_TEXT_StorageList *stl = ((EDIT_TEXT_Data *)vedata)->stl;
+
+ if (!stl->g_data) {
+ /* Alloc transient pointers */
+ stl->g_data = MEM_mallocN(sizeof(*stl->g_data), __func__);
+ }
+
+ {
+ /* Text outline (fast drawing!) */
+ psl->wire_pass = DRW_pass_create(
+ "Font Wire",
+ DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_WIRE);
+ stl->g_data->wire_shgrp = DRW_shgroup_create(e_data.wire_sh, psl->wire_pass);
+
+ psl->overlay_select_pass = DRW_pass_create(
+ "Font Select",
+ DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH);
+ stl->g_data->overlay_select_shgrp = DRW_shgroup_create(e_data.overlay_select_sh, psl->overlay_select_pass);
+
+ psl->overlay_cursor_pass = DRW_pass_create(
+ "Font Cursor",
+ DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH);
+ stl->g_data->overlay_cursor_shgrp = DRW_shgroup_create(e_data.overlay_cursor_sh, psl->overlay_cursor_pass);
+ }
+}
+
+/* Add geometry to shadingGroups. Execute for each objects */
+static void EDIT_TEXT_cache_populate(void *vedata, Object *ob)
+{
+ EDIT_TEXT_PassList *psl = ((EDIT_TEXT_Data *)vedata)->psl;
+ EDIT_TEXT_StorageList *stl = ((EDIT_TEXT_Data *)vedata)->stl;
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ Scene *scene = draw_ctx->scene;
+ Object *obedit = scene->obedit;
+
+ UNUSED_VARS(psl, stl);
+
+ if (ob->type == OB_FONT) {
+ if (ob == obedit) {
+ const Curve *cu = ob->data;
+ /* Get geometry cache */
+ struct Gwn_Batch *geom;
+
+ if (cu->flag & CU_FAST) {
+ geom = DRW_cache_text_edge_wire_get(ob);
+ if (geom) {
+ DRW_shgroup_call_add(stl->g_data->wire_shgrp, geom, ob->obmat);
+ }
+ }
+ else {
+ /* object mode draws */
+ }
+
+ geom = DRW_cache_text_select_overlay_get(ob);
+ if (geom) {
+ DRW_shgroup_call_add(stl->g_data->overlay_select_shgrp, geom, ob->obmat);
+ }
+
+ geom = DRW_cache_text_cursor_overlay_get(ob);
+ if (geom) {
+ DRW_shgroup_call_add(stl->g_data->overlay_cursor_shgrp, geom, ob->obmat);
+ }
+ }
+ }
+}
+
+/* Optional: Post-cache_populate callback */
+static void EDIT_TEXT_cache_finish(void *vedata)
+{
+ EDIT_TEXT_PassList *psl = ((EDIT_TEXT_Data *)vedata)->psl;
+ EDIT_TEXT_StorageList *stl = ((EDIT_TEXT_Data *)vedata)->stl;
+
+ /* Do something here! dependant on the objects gathered */
+ UNUSED_VARS(psl, stl);
+}
+
+/* Draw time ! Control rendering pipeline from here */
+static void EDIT_TEXT_draw_scene(void *vedata)
+{
+ EDIT_TEXT_PassList *psl = ((EDIT_TEXT_Data *)vedata)->psl;
+ EDIT_TEXT_FramebufferList *fbl = ((EDIT_TEXT_Data *)vedata)->fbl;
+
+ /* Default framebuffer and texture */
+ DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
+ DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
+
+ UNUSED_VARS(fbl, dfbl, dtxl);
+
+ /* Show / hide entire passes, swap framebuffers ... whatever you fancy */
+ /*
+ * DRW_framebuffer_texture_detach(dtxl->depth);
+ * DRW_framebuffer_bind(fbl->custom_fb);
+ * DRW_draw_pass(psl->pass);
+ * DRW_framebuffer_texture_attach(dfbl->default_fb, dtxl->depth, 0, 0);
+ * DRW_framebuffer_bind(dfbl->default_fb);
+ */
+
+ DRW_draw_pass(psl->wire_pass);
+
+ set_inverted_drawing(1);
+ DRW_draw_pass(psl->overlay_select_pass);
+ DRW_draw_pass(psl->overlay_cursor_pass);
+ set_inverted_drawing(0);
+
+ /* If you changed framebuffer, double check you rebind
+ * the default one with its textures attached before finishing */
+}
+
+/* Cleanup when destroying the engine.
+ * This is not per viewport ! only when quitting blender.
+ * Mostly used for freeing shaders */
+static void EDIT_TEXT_engine_free(void)
+{
+ // DRW_SHADER_FREE_SAFE(custom_shader);
+}
+
+/* Create collection settings here.
+ *
+ * Be sure to add this function there :
+ * source/blender/draw/DRW_engine.h
+ * source/blender/blenkernel/intern/layer.c
+ * source/blenderplayer/bad_level_call_stubs/stubs.c
+ *
+ * And relevant collection settings to :
+ * source/blender/makesrna/intern/rna_scene.c
+ * source/blender/blenkernel/intern/layer.c
+ */
+#if 0
+void EDIT_TEXT_collection_settings_create(CollectionEngineSettings *ces)
+{
+ BLI_assert(ces);
+ // BKE_collection_engine_property_add_int(ces, "my_bool_prop", false);
+ // BKE_collection_engine_property_add_int(ces, "my_int_prop", 0);
+ // BKE_collection_engine_property_add_float(ces, "my_float_prop", 0.0f);
+}
+#endif
+
+static const DrawEngineDataSize EDIT_TEXT_data_size = DRW_VIEWPORT_DATA_SIZE(EDIT_TEXT_Data);
+
+DrawEngineType draw_engine_edit_text_type = {
+ NULL, NULL,
+ N_("EditTextMode"),
+ &EDIT_TEXT_data_size,
+ &EDIT_TEXT_engine_init,
+ &EDIT_TEXT_engine_free,
+ &EDIT_TEXT_cache_init,
+ &EDIT_TEXT_cache_populate,
+ &EDIT_TEXT_cache_finish,
+ NULL, /* draw_background but not needed by mode engines */
+ &EDIT_TEXT_draw_scene,
+ NULL,
+ NULL,
+};
diff --git a/source/blender/draw/modes/object_mode.c b/source/blender/draw/modes/object_mode.c
new file mode 100644
index 00000000000..e807be34633
--- /dev/null
+++ b/source/blender/draw/modes/object_mode.c
@@ -0,0 +1,2050 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file blender/draw/modes/object_mode.c
+ * \ingroup draw
+ */
+
+#include "DRW_engine.h"
+#include "DRW_render.h"
+
+#include "DNA_userdef_types.h"
+#include "DNA_armature_types.h"
+#include "DNA_camera_types.h"
+#include "DNA_curve_types.h"
+#include "DNA_mesh_types.h"
+#include "DNA_meta_types.h"
+#include "DNA_object_force_types.h"
+#include "DNA_lightprobe_types.h"
+#include "DNA_particle_types.h"
+#include "DNA_view3d_types.h"
+#include "DNA_world_types.h"
+
+#include "BIF_gl.h"
+
+#include "BKE_anim.h"
+#include "BKE_camera.h"
+#include "BKE_curve.h"
+#include "BKE_global.h"
+#include "BKE_mball.h"
+#include "BKE_object.h"
+#include "BKE_particle.h"
+#include "BKE_image.h"
+#include "BKE_texture.h"
+
+#include "ED_view3d.h"
+
+#include "GPU_shader.h"
+#include "GPU_texture.h"
+
+#include "UI_resources.h"
+
+#include "draw_mode_engines.h"
+#include "draw_manager_text.h"
+#include "draw_common.h"
+
+#include "DEG_depsgraph_query.h"
+
+extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
+extern struct GPUTexture *globals_ramp; /* draw_common.c */
+extern GlobalsUboStorage ts;
+
+extern char datatoc_object_outline_resolve_frag_glsl[];
+extern char datatoc_object_outline_detect_frag_glsl[];
+extern char datatoc_object_outline_expand_frag_glsl[];
+extern char datatoc_object_grid_frag_glsl[];
+extern char datatoc_object_grid_vert_glsl[];
+extern char datatoc_object_empty_image_frag_glsl[];
+extern char datatoc_object_empty_image_vert_glsl[];
+extern char datatoc_object_lightprobe_grid_vert_glsl[];
+extern char datatoc_object_particle_prim_vert_glsl[];
+extern char datatoc_object_particle_dot_vert_glsl[];
+extern char datatoc_object_particle_dot_frag_glsl[];
+extern char datatoc_common_globals_lib_glsl[];
+extern char datatoc_common_fxaa_lib_glsl[];
+extern char datatoc_gpu_shader_flat_color_frag_glsl[];
+extern char datatoc_gpu_shader_fullscreen_vert_glsl[];
+extern char datatoc_gpu_shader_uniform_color_frag_glsl[];
+
+/* *********** LISTS *********** */
+typedef struct OBJECT_PassList {
+ struct DRWPass *non_meshes;
+ struct DRWPass *ob_center;
+ struct DRWPass *outlines;
+ struct DRWPass *outlines_search;
+ struct DRWPass *outlines_expand;
+ struct DRWPass *outlines_bleed;
+ struct DRWPass *outlines_resolve;
+ struct DRWPass *grid;
+ struct DRWPass *bone_solid;
+ struct DRWPass *bone_wire;
+ struct DRWPass *bone_envelope;
+ struct DRWPass *particle;
+ struct DRWPass *lightprobes;
+ /* use for empty/background images */
+ struct DRWPass *reference_image;
+} OBJECT_PassList;
+
+typedef struct OBJECT_FramebufferList {
+ struct GPUFrameBuffer *outlines;
+ struct GPUFrameBuffer *blur;
+} OBJECT_FramebufferList;
+
+typedef struct OBJECT_StorageList {
+ struct OBJECT_PrivateData *g_data;
+} OBJECT_StorageList;
+
+typedef struct OBJECT_Data {
+ void *engine_type;
+ OBJECT_FramebufferList *fbl;
+ DRWViewportEmptyList *txl;
+ OBJECT_PassList *psl;
+ OBJECT_StorageList *stl;
+} OBJECT_Data;
+
+/* *********** STATIC *********** */
+
+typedef struct OBJECT_PrivateData {
+ /* Empties */
+ DRWShadingGroup *plain_axes;
+ DRWShadingGroup *cube;
+ DRWShadingGroup *circle;
+ DRWShadingGroup *sphere;
+ DRWShadingGroup *cone;
+ DRWShadingGroup *single_arrow;
+ DRWShadingGroup *single_arrow_line;
+ DRWShadingGroup *arrows;
+ DRWShadingGroup *axis_names;
+ /* GPUTexture -> EmptyImageShadingGroupData */
+ GHash *image_plane_map;
+
+ /* Force Field */
+ DRWShadingGroup *field_wind;
+ DRWShadingGroup *field_force;
+ DRWShadingGroup *field_vortex;
+ DRWShadingGroup *field_curve_sta;
+ DRWShadingGroup *field_curve_end;
+ DRWShadingGroup *field_tube_limit;
+ DRWShadingGroup *field_cone_limit;
+
+ /* Speaker */
+ DRWShadingGroup *speaker;
+
+ /* Probe */
+ DRWShadingGroup *probe_cube;
+ DRWShadingGroup *probe_planar;
+ DRWShadingGroup *probe_grid;
+
+ /* MetaBalls */
+ DRWShadingGroup *mball_circle;
+
+ /* Lamps */
+ DRWShadingGroup *lamp_center;
+ DRWShadingGroup *lamp_center_group;
+ DRWShadingGroup *lamp_groundpoint;
+ DRWShadingGroup *lamp_groundline;
+ DRWShadingGroup *lamp_circle;
+ DRWShadingGroup *lamp_circle_shadow;
+ DRWShadingGroup *lamp_sunrays;
+ DRWShadingGroup *lamp_distance;
+ DRWShadingGroup *lamp_buflimit;
+ DRWShadingGroup *lamp_buflimit_points;
+ DRWShadingGroup *lamp_area;
+ DRWShadingGroup *lamp_hemi;
+ DRWShadingGroup *lamp_spot_cone;
+ DRWShadingGroup *lamp_spot_blend;
+ DRWShadingGroup *lamp_spot_pyramid;
+ DRWShadingGroup *lamp_spot_blend_rect;
+
+ /* Helpers */
+ DRWShadingGroup *relationship_lines;
+
+ /* Objects Centers */
+ DRWShadingGroup *center_active;
+ DRWShadingGroup *center_selected;
+ DRWShadingGroup *center_deselected;
+ DRWShadingGroup *center_selected_lib;
+ DRWShadingGroup *center_deselected_lib;
+
+ /* Camera */
+ DRWShadingGroup *camera;
+ DRWShadingGroup *camera_frame;
+ DRWShadingGroup *camera_tria;
+ DRWShadingGroup *camera_focus;
+ DRWShadingGroup *camera_clip;
+ DRWShadingGroup *camera_clip_points;
+ DRWShadingGroup *camera_mist;
+ DRWShadingGroup *camera_mist_points;
+
+ /* Outlines */
+ DRWShadingGroup *outlines_active;
+ DRWShadingGroup *outlines_active_group;
+ DRWShadingGroup *outlines_select;
+ DRWShadingGroup *outlines_select_group;
+ DRWShadingGroup *outlines_transform;
+
+ /* Lightprobes */
+ DRWShadingGroup *lightprobes_cube;
+ DRWShadingGroup *lightprobes_planar;
+
+ /* Wire */
+ DRWShadingGroup *wire;
+ DRWShadingGroup *wire_active;
+ DRWShadingGroup *wire_active_group;
+ DRWShadingGroup *wire_select;
+ DRWShadingGroup *wire_select_group;
+ DRWShadingGroup *wire_transform;
+} OBJECT_PrivateData; /* Transient data */
+
+static struct {
+ /* fullscreen shaders */
+ GPUShader *outline_resolve_sh;
+ GPUShader *outline_resolve_aa_sh;
+ GPUShader *outline_detect_sh;
+ GPUShader *outline_fade_sh;
+
+ /* regular shaders */
+ GPUShader *object_empty_image_sh;
+ GPUShader *object_empty_image_wire_sh;
+ GPUShader *grid_sh;
+ GPUShader *part_dot_sh;
+ GPUShader *part_prim_sh;
+ GPUShader *part_axis_sh;
+ GPUShader *lightprobe_grid_sh;
+ float camera_pos[3];
+ float screenvecs[3][4];
+ float grid_settings[5];
+ int grid_flag;
+ float grid_normal[3];
+ float grid_axes[3];
+ int zpos_flag;
+ int zneg_flag;
+ float zplane_normal[3];
+ float zplane_axes[3];
+ float inv_viewport_size[2];
+ bool draw_grid;
+ /* Temp buffer textures */
+ struct GPUTexture *outlines_depth_tx;
+ struct GPUTexture *outlines_color_tx;
+ struct GPUTexture *outlines_blur_tx;
+} e_data = {NULL}; /* Engine data */
+
+
+enum {
+ SHOW_AXIS_X = (1 << 0),
+ SHOW_AXIS_Y = (1 << 1),
+ SHOW_AXIS_Z = (1 << 2),
+ SHOW_GRID = (1 << 3),
+ PLANE_XY = (1 << 4),
+ PLANE_XZ = (1 << 5),
+ PLANE_YZ = (1 << 6),
+ CLIP_ZPOS = (1 << 7),
+ CLIP_ZNEG = (1 << 8),
+};
+
+/* *********** FUNCTIONS *********** */
+
+static void OBJECT_engine_init(void *vedata)
+{
+ OBJECT_FramebufferList *fbl = ((OBJECT_Data *)vedata)->fbl;
+
+ const float *viewport_size = DRW_viewport_size_get();
+
+ if (DRW_state_is_fbo()) {
+ DRWFboTexture tex[2] = {
+ {&e_data.outlines_depth_tx, DRW_TEX_DEPTH_24, DRW_TEX_TEMP},
+ {&e_data.outlines_color_tx, DRW_TEX_RGBA_8, DRW_TEX_FILTER | DRW_TEX_TEMP},
+ };
+
+ DRW_framebuffer_init(
+ &fbl->outlines, &draw_engine_object_type,
+ (int)viewport_size[0], (int)viewport_size[1],
+ tex, 2);
+
+ DRWFboTexture blur_tex = {&e_data.outlines_blur_tx, DRW_TEX_RGBA_8, DRW_TEX_FILTER | DRW_TEX_TEMP};
+ DRW_framebuffer_init(
+ &fbl->blur, &draw_engine_object_type,
+ (int)viewport_size[0], (int)viewport_size[1],
+ &blur_tex, 1);
+ }
+
+ if (!e_data.outline_resolve_sh) {
+ e_data.outline_resolve_sh = DRW_shader_create_fullscreen(datatoc_object_outline_resolve_frag_glsl, NULL);
+ }
+
+ if (!e_data.outline_resolve_aa_sh) {
+ e_data.outline_resolve_aa_sh = DRW_shader_create_with_lib(
+ datatoc_gpu_shader_fullscreen_vert_glsl, NULL,
+ datatoc_object_outline_resolve_frag_glsl,
+ datatoc_common_fxaa_lib_glsl,
+ "#define FXAA_ALPHA\n"
+ "#define USE_FXAA\n");
+ }
+
+ if (!e_data.outline_detect_sh) {
+ e_data.outline_detect_sh = DRW_shader_create_fullscreen(datatoc_object_outline_detect_frag_glsl, NULL);
+ }
+
+ if (!e_data.outline_fade_sh) {
+ e_data.outline_fade_sh = DRW_shader_create_fullscreen(datatoc_object_outline_expand_frag_glsl, NULL);
+ }
+
+ if (!e_data.object_empty_image_sh) {
+ e_data.object_empty_image_sh = DRW_shader_create_with_lib(
+ datatoc_object_empty_image_vert_glsl, NULL,
+ datatoc_object_empty_image_frag_glsl,
+ datatoc_common_globals_lib_glsl, NULL);
+ }
+
+ if (!e_data.object_empty_image_wire_sh) {
+ e_data.object_empty_image_wire_sh = DRW_shader_create_with_lib(
+ datatoc_object_empty_image_vert_glsl, NULL,
+ datatoc_object_empty_image_frag_glsl,
+ datatoc_common_globals_lib_glsl,
+ "#define USE_WIRE\n");
+ }
+
+ if (!e_data.grid_sh) {
+ e_data.grid_sh = DRW_shader_create_with_lib(
+ datatoc_object_grid_vert_glsl, NULL,
+ datatoc_object_grid_frag_glsl,
+ datatoc_common_globals_lib_glsl, NULL);
+ }
+
+ if (!e_data.part_prim_sh) {
+ e_data.part_prim_sh = DRW_shader_create(
+ datatoc_object_particle_prim_vert_glsl, NULL, datatoc_gpu_shader_flat_color_frag_glsl, NULL);
+ }
+
+ if (!e_data.part_axis_sh) {
+ e_data.part_axis_sh = DRW_shader_create(
+ datatoc_object_particle_prim_vert_glsl, NULL, datatoc_gpu_shader_flat_color_frag_glsl,
+ "#define USE_AXIS\n");
+ }
+
+ if (!e_data.part_dot_sh) {
+ e_data.part_dot_sh = DRW_shader_create(
+ datatoc_object_particle_dot_vert_glsl, NULL, datatoc_object_particle_dot_frag_glsl, NULL);
+ }
+
+ if (!e_data.lightprobe_grid_sh) {
+ e_data.lightprobe_grid_sh = DRW_shader_create(
+ datatoc_object_lightprobe_grid_vert_glsl, NULL, datatoc_gpu_shader_uniform_color_frag_glsl, NULL);
+ }
+
+ {
+ /* Grid precompute */
+ float invviewmat[4][4], invwinmat[4][4];
+ float viewmat[4][4], winmat[4][4];
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ View3D *v3d = draw_ctx->v3d;
+ Scene *scene = draw_ctx->scene;
+ RegionView3D *rv3d = draw_ctx->rv3d;
+ float grid_scale = ED_view3d_grid_scale(scene, v3d, NULL);
+ float grid_res;
+
+ const bool show_axis_x = (v3d->gridflag & V3D_SHOW_X) != 0;
+ const bool show_axis_y = (v3d->gridflag & V3D_SHOW_Y) != 0;
+ const bool show_axis_z = (v3d->gridflag & V3D_SHOW_Z) != 0;
+ const bool show_floor = (v3d->gridflag & V3D_SHOW_FLOOR) != 0;
+ e_data.draw_grid = show_axis_x || show_axis_y || show_axis_z || show_floor;
+
+ DRW_viewport_matrix_get(winmat, DRW_MAT_WIN);
+ DRW_viewport_matrix_get(viewmat, DRW_MAT_VIEW);
+ DRW_viewport_matrix_get(invwinmat, DRW_MAT_WININV);
+ DRW_viewport_matrix_get(invviewmat, DRW_MAT_VIEWINV);
+
+ /* Setup camera pos */
+ copy_v3_v3(e_data.camera_pos, invviewmat[3]);
+
+ /* if perps */
+ if (winmat[3][3] == 0.0f) {
+ float fov;
+ float viewvecs[2][4] = {
+ {1.0f, -1.0f, -1.0f, 1.0f},
+ {-1.0f, 1.0f, -1.0f, 1.0f}
+ };
+
+ /* convert the view vectors to view space */
+ for (int i = 0; i < 2; i++) {
+ mul_m4_v4(invwinmat, viewvecs[i]);
+ mul_v3_fl(viewvecs[i], 1.0f / viewvecs[i][2]); /* perspective divide */
+ }
+
+ fov = angle_v3v3(viewvecs[0], viewvecs[1]) / 2.0f;
+ grid_res = fabsf(tanf(fov)) / grid_scale;
+
+ e_data.grid_flag = (1 << 4); /* XY plane */
+ if (show_axis_x)
+ e_data.grid_flag |= SHOW_AXIS_X;
+ if (show_axis_y)
+ e_data.grid_flag |= SHOW_AXIS_Y;
+ if (show_floor)
+ e_data.grid_flag |= SHOW_GRID;
+
+ }
+ else {
+ float viewdist = 1.0f / max_ff(fabsf(winmat[0][0]), fabsf(winmat[1][1]));
+ grid_res = viewdist / grid_scale;
+
+ if (ELEM(rv3d->view, RV3D_VIEW_RIGHT, RV3D_VIEW_LEFT)) {
+ e_data.grid_flag = PLANE_YZ;
+ e_data.grid_flag |= SHOW_AXIS_Y;
+ e_data.grid_flag |= SHOW_AXIS_Z;
+ e_data.grid_flag |= SHOW_GRID;
+ }
+ else if (ELEM(rv3d->view, RV3D_VIEW_TOP, RV3D_VIEW_BOTTOM)) {
+ e_data.grid_flag = PLANE_XY;
+ e_data.grid_flag |= SHOW_AXIS_X;
+ e_data.grid_flag |= SHOW_AXIS_Y;
+ e_data.grid_flag |= SHOW_GRID;
+ }
+ else if (ELEM(rv3d->view, RV3D_VIEW_FRONT, RV3D_VIEW_BACK)) {
+ e_data.grid_flag = PLANE_XZ;
+ e_data.grid_flag |= SHOW_AXIS_X;
+ e_data.grid_flag |= SHOW_AXIS_Z;
+ e_data.grid_flag |= SHOW_GRID;
+ }
+ else { /* RV3D_VIEW_USER */
+ e_data.grid_flag = PLANE_XY;
+ if (show_axis_x)
+ e_data.grid_flag |= SHOW_AXIS_X;
+ if (show_axis_y)
+ e_data.grid_flag |= SHOW_AXIS_Y;
+ if (show_floor)
+ e_data.grid_flag |= SHOW_GRID;
+ }
+ }
+
+ e_data.grid_normal[0] = (float)((e_data.grid_flag & PLANE_YZ) != 0);
+ e_data.grid_normal[1] = (float)((e_data.grid_flag & PLANE_XZ) != 0);
+ e_data.grid_normal[2] = (float)((e_data.grid_flag & PLANE_XY) != 0);
+
+ e_data.grid_axes[0] = (float)((e_data.grid_flag & (PLANE_XZ | PLANE_XY)) != 0);
+ e_data.grid_axes[1] = (float)((e_data.grid_flag & (PLANE_YZ | PLANE_XY)) != 0);
+ e_data.grid_axes[2] = (float)((e_data.grid_flag & (PLANE_YZ | PLANE_XZ)) != 0);
+
+ /* Vectors to recover pixel world position. Fix grid precision issue. */
+ /* Using pixel at z = 0.0f in ndc space : gives average precision between
+ * near and far plane. Note that it might not be the best choice. */
+ copy_v4_fl4(e_data.screenvecs[0], 1.0f, -1.0f, 0.0f, 1.0f);
+ copy_v4_fl4(e_data.screenvecs[1], -1.0f, 1.0f, 0.0f, 1.0f);
+ copy_v4_fl4(e_data.screenvecs[2], -1.0f, -1.0f, 0.0f, 1.0f);
+
+ for (int i = 0; i < 3; i++) {
+ /* Doing 2 steps to recover world position of the corners of the frustum.
+ * Using the inverse perspective matrix is giving very low precision output. */
+ mul_m4_v4(invwinmat, e_data.screenvecs[i]);
+ e_data.screenvecs[i][0] /= e_data.screenvecs[i][3]; /* perspective divide */
+ e_data.screenvecs[i][1] /= e_data.screenvecs[i][3]; /* perspective divide */
+ e_data.screenvecs[i][2] /= e_data.screenvecs[i][3]; /* perspective divide */
+ e_data.screenvecs[i][3] = 1.0f;
+ /* main instability come from this one */
+ /* TODO : to make things even more stable, don't use
+ * invviewmat and derive vectors from camera properties */
+ mul_m4_v4(invviewmat, e_data.screenvecs[i]);
+ }
+
+ sub_v3_v3(e_data.screenvecs[0], e_data.screenvecs[2]);
+ sub_v3_v3(e_data.screenvecs[1], e_data.screenvecs[2]);
+
+ /* Z axis if needed */
+ if (((rv3d->view == RV3D_VIEW_USER) || (rv3d->persp != RV3D_ORTHO)) && show_axis_z) {
+ e_data.zpos_flag = SHOW_AXIS_Z;
+
+ float zvec[4] = {0.0f, 0.0f, -1.0f, 0.0f};
+ mul_m4_v4(invviewmat, zvec);
+
+ /* z axis : chose the most facing plane */
+ if (fabsf(zvec[0]) < fabsf(zvec[1])) {
+ e_data.zpos_flag |= PLANE_XZ;
+ }
+ else {
+ e_data.zpos_flag |= PLANE_YZ;
+ }
+
+ e_data.zneg_flag = e_data.zpos_flag;
+
+ /* Persp : If camera is below floor plane, we switch clipping
+ * Ortho : If eye vector is looking up, we switch clipping */
+ if (((winmat[3][3] == 0.0f) && (e_data.camera_pos[2] > 0.0f)) ||
+ ((winmat[3][3] != 0.0f) && (zvec[2] < 0.0f)))
+ {
+ e_data.zpos_flag |= CLIP_ZPOS;
+ e_data.zneg_flag |= CLIP_ZNEG;
+ }
+ else {
+ e_data.zpos_flag |= CLIP_ZNEG;
+ e_data.zneg_flag |= CLIP_ZPOS;
+ }
+
+ e_data.zplane_normal[0] = (float)((e_data.zpos_flag & PLANE_YZ) != 0);
+ e_data.zplane_normal[1] = (float)((e_data.zpos_flag & PLANE_XZ) != 0);
+ e_data.zplane_normal[2] = (float)((e_data.zpos_flag & PLANE_XY) != 0);
+
+ e_data.zplane_axes[0] = (float)((e_data.zpos_flag & (PLANE_XZ | PLANE_XY)) != 0);
+ e_data.zplane_axes[1] = (float)((e_data.zpos_flag & (PLANE_YZ | PLANE_XY)) != 0);
+ e_data.zplane_axes[2] = (float)((e_data.zpos_flag & (PLANE_YZ | PLANE_XZ)) != 0);
+
+ }
+ else {
+ e_data.zneg_flag = e_data.zpos_flag = CLIP_ZNEG | CLIP_ZPOS;
+ }
+
+ float dist;
+ if (rv3d->persp == RV3D_CAMOB && v3d->camera) {
+ Object *camera_object = DEG_get_evaluated_object(draw_ctx->depsgraph, v3d->camera);
+ dist = ((Camera *)camera_object)->clipend;
+ }
+ else {
+ dist = v3d->far;
+ }
+
+ e_data.grid_settings[0] = dist / 2.0f; /* gridDistance */
+ e_data.grid_settings[1] = grid_res; /* gridResolution */
+ e_data.grid_settings[2] = grid_scale; /* gridScale */
+ e_data.grid_settings[3] = v3d->gridsubdiv; /* gridSubdiv */
+ e_data.grid_settings[4] = (v3d->gridsubdiv > 1) ? 1.0f / logf(v3d->gridsubdiv) : 0.0f; /* 1/log(gridSubdiv) */
+ }
+
+ copy_v2_v2(e_data.inv_viewport_size, DRW_viewport_size_get());
+ invert_v2(e_data.inv_viewport_size);
+}
+
+static void OBJECT_engine_free(void)
+{
+ DRW_SHADER_FREE_SAFE(e_data.outline_resolve_sh);
+ DRW_SHADER_FREE_SAFE(e_data.outline_resolve_aa_sh);
+ DRW_SHADER_FREE_SAFE(e_data.outline_detect_sh);
+ DRW_SHADER_FREE_SAFE(e_data.outline_fade_sh);
+ DRW_SHADER_FREE_SAFE(e_data.object_empty_image_sh);
+ DRW_SHADER_FREE_SAFE(e_data.object_empty_image_wire_sh);
+ DRW_SHADER_FREE_SAFE(e_data.grid_sh);
+ DRW_SHADER_FREE_SAFE(e_data.part_prim_sh);
+ DRW_SHADER_FREE_SAFE(e_data.part_axis_sh);
+ DRW_SHADER_FREE_SAFE(e_data.part_dot_sh);
+ DRW_SHADER_FREE_SAFE(e_data.lightprobe_grid_sh);
+}
+
+static DRWShadingGroup *shgroup_outline(DRWPass *pass, const float col[4], GPUShader *sh)
+{
+ DRWShadingGroup *grp = DRW_shgroup_create(sh, pass);
+ DRW_shgroup_uniform_vec4(grp, "color", col, 1);
+
+ return grp;
+}
+
+/* currently same as 'shgroup_outline', new function to avoid confustion */
+static DRWShadingGroup *shgroup_wire(DRWPass *pass, const float col[4], GPUShader *sh)
+{
+ DRWShadingGroup *grp = DRW_shgroup_create(sh, pass);
+ DRW_shgroup_uniform_vec4(grp, "color", col, 1);
+
+ return grp;
+}
+
+static DRWShadingGroup *shgroup_theme_id_to_outline_or(
+ OBJECT_StorageList *stl, int theme_id, DRWShadingGroup *fallback)
+{
+ switch (theme_id) {
+ case TH_ACTIVE:
+ return stl->g_data->outlines_active;
+ case TH_SELECT:
+ return stl->g_data->outlines_select;
+ case TH_GROUP_ACTIVE:
+ return stl->g_data->outlines_select_group;
+ case TH_TRANSFORM:
+ return stl->g_data->outlines_transform;
+ default:
+ return fallback;
+ }
+}
+
+static DRWShadingGroup *shgroup_theme_id_to_wire_or(
+ OBJECT_StorageList *stl, int theme_id, DRWShadingGroup *fallback)
+{
+ switch (theme_id) {
+ case TH_ACTIVE:
+ return stl->g_data->wire_active;
+ case TH_SELECT:
+ return stl->g_data->wire_select;
+ case TH_GROUP_ACTIVE:
+ return stl->g_data->wire_select_group;
+ case TH_TRANSFORM:
+ return stl->g_data->wire_transform;
+ default:
+ return fallback;
+ }
+}
+
+static void image_calc_aspect(Image *ima, ImageUser *iuser, float r_image_aspect[2])
+{
+ float ima_x, ima_y;
+ if (ima) {
+ int w, h;
+ BKE_image_get_size(ima, iuser, &w, &h);
+ ima_x = w;
+ ima_y = h;
+ }
+ else {
+ /* if no image, make it a 1x1 empty square, honor scale & offset */
+ ima_x = ima_y = 1.0f;
+ }
+ /* Get the image aspect even if the buffer is invalid */
+ float sca_x = 1.0f, sca_y = 1.0f;
+ if (ima) {
+ if (ima->aspx > ima->aspy) {
+ sca_y = ima->aspy / ima->aspx;
+ }
+ else if (ima->aspx < ima->aspy) {
+ sca_x = ima->aspx / ima->aspy;
+ }
+ }
+
+ const float scale_x_inv = ima_x * sca_x;
+ const float scale_y_inv = ima_y * sca_y;
+ if (scale_x_inv > scale_y_inv) {
+ r_image_aspect[0] = 1.0f;
+ r_image_aspect[1] = scale_y_inv / scale_x_inv;
+ }
+ else {
+ r_image_aspect[0] = scale_x_inv / scale_y_inv;
+ r_image_aspect[1] = 1.0f;
+ }
+}
+
+/* per-image shading groups for image-type empty objects */
+struct EmptyImageShadingGroupData {
+ DRWShadingGroup *shgrp_image;
+ DRWShadingGroup *shgrp_wire;
+ float image_aspect[2];
+};
+
+static void DRW_shgroup_empty_image(
+ OBJECT_StorageList *stl, OBJECT_PassList *psl, Object *ob, const float color[3])
+{
+ /* TODO: 'StereoViews', see draw_empty_image. */
+
+ if (stl->g_data->image_plane_map == NULL) {
+ stl->g_data->image_plane_map = BLI_ghash_ptr_new(__func__);
+ }
+
+ struct EmptyImageShadingGroupData *empty_image_data;
+
+ GPUTexture *tex = ob->data ?
+ GPU_texture_from_blender(ob->data, ob->iuser, GL_TEXTURE_2D, false, false, false) : NULL;
+ void **val_p;
+
+ /* Create on demand, 'tex' may be NULL. */
+ if (BLI_ghash_ensure_p(stl->g_data->image_plane_map, tex, &val_p)) {
+ empty_image_data = *val_p;
+ }
+ else {
+ empty_image_data = MEM_mallocN(sizeof(*empty_image_data), __func__);
+
+ image_calc_aspect(ob->data, ob->iuser, empty_image_data->image_aspect);
+
+ if (tex) {
+ struct Gwn_Batch *geom = DRW_cache_image_plane_get();
+ DRWShadingGroup *grp = DRW_shgroup_instance_create(
+ e_data.object_empty_image_sh, psl->non_meshes, geom);
+ DRW_shgroup_attrib_float(grp, "objectColor", 4);
+ DRW_shgroup_attrib_float(grp, "size", 1);
+ DRW_shgroup_attrib_float(grp, "offset", 2);
+ DRW_shgroup_attrib_float(grp, "InstanceModelMatrix", 16);
+
+ DRW_shgroup_uniform_texture(grp, "image", tex);
+ DRW_shgroup_uniform_vec2(grp, "aspect", empty_image_data->image_aspect, 1);
+
+ empty_image_data->shgrp_image = grp;
+ }
+ else {
+ empty_image_data->shgrp_image = NULL;
+ }
+
+ {
+ struct Gwn_Batch *geom = DRW_cache_image_plane_wire_get();
+ DRWShadingGroup *grp = DRW_shgroup_instance_create(
+ e_data.object_empty_image_wire_sh, psl->non_meshes, geom);
+ DRW_shgroup_attrib_float(grp, "color", 3);
+ DRW_shgroup_attrib_float(grp, "size", 1);
+ DRW_shgroup_attrib_float(grp, "offset", 2);
+ DRW_shgroup_attrib_float(grp, "InstanceModelMatrix", 16);
+
+ DRW_shgroup_uniform_vec2(grp, "aspect", empty_image_data->image_aspect, 1);
+
+ empty_image_data->shgrp_wire = grp;
+ }
+
+ *val_p = empty_image_data;
+ }
+
+ if (empty_image_data->shgrp_image != NULL) {
+ DRW_shgroup_call_dynamic_add(
+ empty_image_data->shgrp_image,
+ ob->col,
+ &ob->empty_drawsize,
+ ob->ima_ofs,
+ ob->obmat);
+ }
+
+ DRW_shgroup_call_dynamic_add(
+ empty_image_data->shgrp_wire,
+ color,
+ &ob->empty_drawsize,
+ ob->ima_ofs,
+ ob->obmat);
+}
+
+static void OBJECT_cache_init(void *vedata)
+{
+ OBJECT_PassList *psl = ((OBJECT_Data *)vedata)->psl;
+ OBJECT_StorageList *stl = ((OBJECT_Data *)vedata)->stl;
+ DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
+
+ if (!stl->g_data) {
+ /* Alloc transient pointers */
+ stl->g_data = MEM_mallocN(sizeof(*stl->g_data), __func__);
+ }
+
+ {
+ DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_WIRE;
+ psl->outlines = DRW_pass_create("Outlines Depth Pass", state);
+
+ GPUShader *sh = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
+
+ /* Select */
+ stl->g_data->outlines_select = shgroup_outline(psl->outlines, ts.colorSelect, sh);
+ stl->g_data->outlines_select_group = shgroup_outline(psl->outlines, ts.colorGroupActive, sh);
+
+ /* Transform */
+ stl->g_data->outlines_transform = shgroup_outline(psl->outlines, ts.colorTransform, sh);
+
+ /* Active */
+ stl->g_data->outlines_active = shgroup_outline(psl->outlines, ts.colorActive, sh);
+ stl->g_data->outlines_active_group = shgroup_outline(psl->outlines, ts.colorGroupActive, sh);
+ }
+
+ {
+ DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS;
+ psl->lightprobes = DRW_pass_create("Object Probe Pass", state);
+
+ /* Cubemap */
+ stl->g_data->lightprobes_cube = shgroup_instance(psl->lightprobes, DRW_cache_sphere_get());
+
+ /* Planar */
+ stl->g_data->lightprobes_planar = shgroup_instance(psl->lightprobes, DRW_cache_quad_get());
+ }
+
+ {
+ DRWState state = DRW_STATE_WRITE_COLOR;
+ struct Gwn_Batch *quad = DRW_cache_fullscreen_quad_get();
+ static float alphaOcclu = 0.35f;
+ /* Reminder : bool uniforms need to be 4 bytes. */
+ static const int bTrue = true;
+ static const int bFalse = false;
+
+ psl->outlines_search = DRW_pass_create("Outlines Detect Pass", state);
+
+ DRWShadingGroup *grp = DRW_shgroup_create(e_data.outline_detect_sh, psl->outlines_search);
+ DRW_shgroup_uniform_buffer(grp, "outlineColor", &e_data.outlines_color_tx);
+ DRW_shgroup_uniform_buffer(grp, "outlineDepth", &e_data.outlines_depth_tx);
+ DRW_shgroup_uniform_buffer(grp, "sceneDepth", &dtxl->depth);
+ DRW_shgroup_uniform_float(grp, "alphaOcclu", &alphaOcclu, 1);
+ DRW_shgroup_call_add(grp, quad, NULL);
+
+ psl->outlines_expand = DRW_pass_create("Outlines Expand Pass", state);
+
+ grp = DRW_shgroup_create(e_data.outline_fade_sh, psl->outlines_expand);
+ DRW_shgroup_uniform_buffer(grp, "outlineColor", &e_data.outlines_blur_tx);
+ DRW_shgroup_uniform_bool(grp, "doExpand", &bTrue, 1);
+ DRW_shgroup_call_add(grp, quad, NULL);
+
+ psl->outlines_bleed = DRW_pass_create("Outlines Bleed Pass", state);
+
+ grp = DRW_shgroup_create(e_data.outline_fade_sh, psl->outlines_bleed);
+ DRW_shgroup_uniform_buffer(grp, "outlineColor", &e_data.outlines_color_tx);
+ DRW_shgroup_uniform_bool(grp, "doExpand", &bFalse, 1);
+ DRW_shgroup_call_add(grp, quad, NULL);
+ }
+
+ {
+ DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_BLEND;
+ psl->outlines_resolve = DRW_pass_create("Outlines Resolve Pass", state);
+
+ struct Gwn_Batch *quad = DRW_cache_fullscreen_quad_get();
+
+ DRWShadingGroup *grp = DRW_shgroup_create(e_data.outline_resolve_aa_sh, psl->outlines_resolve);
+ DRW_shgroup_uniform_buffer(grp, "outlineBluredColor", &e_data.outlines_blur_tx);
+ DRW_shgroup_uniform_vec2(grp, "rcpDimensions", e_data.inv_viewport_size, 1);
+ DRW_shgroup_call_add(grp, quad, NULL);
+ }
+
+ {
+ /* Grid pass */
+ DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_BLEND;
+ psl->grid = DRW_pass_create("Infinite Grid Pass", state);
+
+ struct Gwn_Batch *quad = DRW_cache_fullscreen_quad_get();
+ static float mat[4][4];
+ unit_m4(mat);
+
+ /* Create 3 quads to render ordered transparency Z axis */
+ DRWShadingGroup *grp = DRW_shgroup_create(e_data.grid_sh, psl->grid);
+ DRW_shgroup_uniform_int(grp, "gridFlag", &e_data.zneg_flag, 1);
+ DRW_shgroup_uniform_vec3(grp, "planeNormal", e_data.zplane_normal, 1);
+ DRW_shgroup_uniform_vec3(grp, "planeAxes", e_data.zplane_axes, 1);
+ DRW_shgroup_uniform_vec3(grp, "cameraPos", e_data.camera_pos, 1);
+ DRW_shgroup_uniform_vec4(grp, "screenvecs[0]", e_data.screenvecs[0], 3);
+ DRW_shgroup_uniform_vec4(grp, "gridSettings", e_data.grid_settings, 1);
+ DRW_shgroup_uniform_float(grp, "gridOneOverLogSubdiv", &e_data.grid_settings[4], 1);
+ DRW_shgroup_uniform_block(grp, "globalsBlock", globals_ubo);
+ DRW_shgroup_uniform_vec2(grp, "viewportSize", DRW_viewport_size_get(), 1);
+ DRW_shgroup_uniform_buffer(grp, "depthBuffer", &dtxl->depth);
+ DRW_shgroup_call_add(grp, quad, mat);
+
+ grp = DRW_shgroup_create(e_data.grid_sh, psl->grid);
+ DRW_shgroup_uniform_int(grp, "gridFlag", &e_data.grid_flag, 1);
+ DRW_shgroup_uniform_vec3(grp, "planeNormal", e_data.grid_normal, 1);
+ DRW_shgroup_uniform_vec3(grp, "planeAxes", e_data.grid_axes, 1);
+ DRW_shgroup_uniform_block(grp, "globalsBlock", globals_ubo);
+ DRW_shgroup_uniform_buffer(grp, "depthBuffer", &dtxl->depth);
+ DRW_shgroup_call_add(grp, quad, mat);
+
+ grp = DRW_shgroup_create(e_data.grid_sh, psl->grid);
+ DRW_shgroup_uniform_int(grp, "gridFlag", &e_data.zpos_flag, 1);
+ DRW_shgroup_uniform_vec3(grp, "planeNormal", e_data.zplane_normal, 1);
+ DRW_shgroup_uniform_vec3(grp, "planeAxes", e_data.zplane_axes, 1);
+ DRW_shgroup_uniform_block(grp, "globalsBlock", globals_ubo);
+ DRW_shgroup_uniform_buffer(grp, "depthBuffer", &dtxl->depth);
+ DRW_shgroup_call_add(grp, quad, mat);
+ }
+
+ {
+ /* Solid bones */
+ DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS;
+ psl->bone_solid = DRW_pass_create("Bone Solid Pass", state);
+ }
+
+ {
+ /* Wire bones */
+ DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_BLEND;
+ psl->bone_wire = DRW_pass_create("Bone Wire Pass", state);
+ }
+
+ {
+ /* distance outline around envelope bones */
+ DRWState state = DRW_STATE_ADDITIVE | DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_LESS | DRW_STATE_BLEND;
+ psl->bone_envelope = DRW_pass_create("Bone Envelope Outline Pass", state);
+ }
+
+ {
+ /* Non Meshes Pass (Camera, empties, lamps ...) */
+ struct Gwn_Batch *geom;
+
+ DRWState state =
+ DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH |
+ DRW_STATE_DEPTH_LESS | DRW_STATE_BLEND | DRW_STATE_POINT;
+ state |= DRW_STATE_WIRE;
+ psl->non_meshes = DRW_pass_create("Non Meshes Pass", state);
+
+ /* Empties */
+ geom = DRW_cache_plain_axes_get();
+ stl->g_data->plain_axes = shgroup_instance(psl->non_meshes, geom);
+
+ geom = DRW_cache_cube_get();
+ stl->g_data->cube = shgroup_instance(psl->non_meshes, geom);
+
+ geom = DRW_cache_circle_get();
+ stl->g_data->circle = shgroup_instance(psl->non_meshes, geom);
+
+ geom = DRW_cache_empty_sphere_get();
+ stl->g_data->sphere = shgroup_instance(psl->non_meshes, geom);
+
+ geom = DRW_cache_empty_cone_get();
+ stl->g_data->cone = shgroup_instance(psl->non_meshes, geom);
+
+ geom = DRW_cache_single_arrow_get();
+ stl->g_data->single_arrow = shgroup_instance(psl->non_meshes, geom);
+
+ geom = DRW_cache_single_line_get();
+ stl->g_data->single_arrow_line = shgroup_instance(psl->non_meshes, geom);
+
+ geom = DRW_cache_arrows_get();
+ stl->g_data->arrows = shgroup_instance(psl->non_meshes, geom);
+
+ geom = DRW_cache_axis_names_get();
+ stl->g_data->axis_names = shgroup_instance_axis_names(psl->non_meshes, geom);
+
+ /* initialize on first use */
+ stl->g_data->image_plane_map = NULL;
+
+ /* Force Field */
+ geom = DRW_cache_field_wind_get();
+ stl->g_data->field_wind = shgroup_instance_scaled(psl->non_meshes, geom);
+
+ geom = DRW_cache_field_force_get();
+ stl->g_data->field_force = shgroup_instance_screen_aligned(psl->non_meshes, geom);
+
+ geom = DRW_cache_field_vortex_get();
+ stl->g_data->field_vortex = shgroup_instance_scaled(psl->non_meshes, geom);
+
+ geom = DRW_cache_screenspace_circle_get();
+ stl->g_data->field_curve_sta = shgroup_instance_screen_aligned(psl->non_meshes, geom);
+
+ /* Speaker */
+ geom = DRW_cache_speaker_get();
+ stl->g_data->speaker = shgroup_instance(psl->non_meshes, geom);
+
+ /* Probe */
+ static float probeSize = 14.0f;
+ geom = DRW_cache_lightprobe_cube_get();
+ stl->g_data->probe_cube = shgroup_instance_screenspace(psl->non_meshes, geom, &probeSize);
+
+ geom = DRW_cache_lightprobe_grid_get();
+ stl->g_data->probe_grid = shgroup_instance_screenspace(psl->non_meshes, geom, &probeSize);
+
+ static float probePlanarSize = 20.0f;
+ geom = DRW_cache_lightprobe_planar_get();
+ stl->g_data->probe_planar = shgroup_instance_screenspace(psl->non_meshes, geom, &probePlanarSize);
+
+ /* Camera */
+ geom = DRW_cache_camera_get();
+ stl->g_data->camera = shgroup_camera_instance(psl->non_meshes, geom);
+
+ geom = DRW_cache_camera_frame_get();
+ stl->g_data->camera_frame = shgroup_camera_instance(psl->non_meshes, geom);
+
+ geom = DRW_cache_camera_tria_get();
+ stl->g_data->camera_tria = shgroup_camera_instance(psl->non_meshes, geom);
+
+ geom = DRW_cache_plain_axes_get();
+ stl->g_data->camera_focus = shgroup_instance(psl->non_meshes, geom);
+
+ geom = DRW_cache_single_line_get();
+ stl->g_data->camera_clip = shgroup_distance_lines_instance(psl->non_meshes, geom);
+ stl->g_data->camera_mist = shgroup_distance_lines_instance(psl->non_meshes, geom);
+
+ geom = DRW_cache_single_line_endpoints_get();
+ stl->g_data->camera_clip_points = shgroup_distance_lines_instance(psl->non_meshes, geom);
+ stl->g_data->camera_mist_points = shgroup_distance_lines_instance(psl->non_meshes, geom);
+
+ }
+
+ {
+ GPUShader *sh = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
+
+ /* Unselected */
+ stl->g_data->wire = shgroup_wire(psl->non_meshes, ts.colorWire, sh);
+
+ /* Select */
+ stl->g_data->wire_select = shgroup_wire(psl->non_meshes, ts.colorSelect, sh);
+ stl->g_data->wire_select_group = shgroup_wire(psl->non_meshes, ts.colorGroupActive, sh);
+
+ /* Transform */
+ stl->g_data->wire_transform = shgroup_wire(psl->non_meshes, ts.colorTransform, sh);
+
+ /* Active */
+ stl->g_data->wire_active = shgroup_wire(psl->non_meshes, ts.colorActive, sh);
+ stl->g_data->wire_active_group = shgroup_wire(psl->non_meshes, ts.colorGroupActive, sh);
+ }
+
+ {
+ /* Metaballs Helpers */
+ struct Gwn_Batch *geom;
+ geom = DRW_cache_screenspace_circle_get();
+ stl->g_data->mball_circle = shgroup_instance_mball_helpers(psl->non_meshes, geom);
+ }
+
+ {
+ /* Lamps */
+ /* TODO
+ * for now we create multiple times the same VBO with only lamp center coordinates
+ * but ideally we would only create it once */
+ struct Gwn_Batch *geom;
+
+ /* start with buflimit because we don't want stipples */
+ geom = DRW_cache_single_line_get();
+ stl->g_data->lamp_buflimit = shgroup_distance_lines_instance(psl->non_meshes, geom);
+
+ stl->g_data->lamp_center = shgroup_dynpoints_uniform_color(psl->non_meshes, ts.colorLampNoAlpha, &ts.sizeLampCenter);
+ stl->g_data->lamp_center_group = shgroup_dynpoints_uniform_color(psl->non_meshes, ts.colorGroup, &ts.sizeLampCenter);
+
+ geom = DRW_cache_lamp_get();
+ stl->g_data->lamp_circle = shgroup_instance_screenspace(psl->non_meshes, geom, &ts.sizeLampCircle);
+ geom = DRW_cache_lamp_shadows_get();
+ stl->g_data->lamp_circle_shadow = shgroup_instance_screenspace(psl->non_meshes, geom, &ts.sizeLampCircleShadow);
+
+ geom = DRW_cache_lamp_sunrays_get();
+ stl->g_data->lamp_sunrays = shgroup_instance_screenspace(psl->non_meshes, geom, &ts.sizeLampCircle);
+
+ stl->g_data->lamp_groundline = shgroup_groundlines_uniform_color(psl->non_meshes, ts.colorLamp);
+ stl->g_data->lamp_groundpoint = shgroup_groundpoints_uniform_color(psl->non_meshes, ts.colorLamp);
+
+ geom = DRW_cache_lamp_area_get();
+ stl->g_data->lamp_area = shgroup_instance(psl->non_meshes, geom);
+
+ geom = DRW_cache_lamp_hemi_get();
+ stl->g_data->lamp_hemi = shgroup_instance(psl->non_meshes, geom);
+
+ geom = DRW_cache_single_line_get();
+ stl->g_data->lamp_distance = shgroup_distance_lines_instance(psl->non_meshes, geom);
+
+ geom = DRW_cache_single_line_endpoints_get();
+ stl->g_data->lamp_buflimit_points = shgroup_distance_lines_instance(psl->non_meshes, geom);
+
+ geom = DRW_cache_lamp_spot_get();
+ stl->g_data->lamp_spot_cone = shgroup_spot_instance(psl->non_meshes, geom);
+
+ geom = DRW_cache_circle_get();
+ stl->g_data->lamp_spot_blend = shgroup_instance(psl->non_meshes, geom);
+
+ geom = DRW_cache_lamp_spot_square_get();
+ stl->g_data->lamp_spot_pyramid = shgroup_instance(psl->non_meshes, geom);
+
+ geom = DRW_cache_square_get();
+ stl->g_data->lamp_spot_blend_rect = shgroup_instance(psl->non_meshes, geom);
+ }
+
+ {
+ /* -------- STIPPLES ------- */
+ /* TODO port to shader stipple */
+ struct Gwn_Batch *geom;
+
+ /* Relationship Lines */
+ stl->g_data->relationship_lines = shgroup_dynlines_uniform_color(psl->non_meshes, ts.colorWire);
+ DRW_shgroup_state_enable(stl->g_data->relationship_lines, DRW_STATE_STIPPLE_3);
+
+ /* Force Field Curve Guide End (here because of stipple) */
+ geom = DRW_cache_screenspace_circle_get();
+ stl->g_data->field_curve_end = shgroup_instance_screen_aligned(psl->non_meshes, geom);
+
+ /* Force Field Limits */
+ geom = DRW_cache_field_tube_limit_get();
+ stl->g_data->field_tube_limit = shgroup_instance_scaled(psl->non_meshes, geom);
+
+ geom = DRW_cache_field_cone_limit_get();
+ stl->g_data->field_cone_limit = shgroup_instance_scaled(psl->non_meshes, geom);
+ }
+
+ {
+ /* Object Center pass grouped by State */
+ DRWShadingGroup *grp;
+ static float outlineWidth, size;
+
+ DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_BLEND | DRW_STATE_POINT;
+ psl->ob_center = DRW_pass_create("Obj Center Pass", state);
+
+ outlineWidth = 1.0f * U.pixelsize;
+ size = U.obcenter_dia * U.pixelsize + outlineWidth;
+
+ GPUShader *sh = GPU_shader_get_builtin_shader(GPU_SHADER_3D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_OUTLINE_AA);
+
+ /* Active */
+ grp = DRW_shgroup_point_batch_create(sh, psl->ob_center);
+ DRW_shgroup_uniform_float(grp, "size", &size, 1);
+ DRW_shgroup_uniform_float(grp, "outlineWidth", &outlineWidth, 1);
+ DRW_shgroup_uniform_vec4(grp, "color", ts.colorActive, 1);
+ DRW_shgroup_uniform_vec4(grp, "outlineColor", ts.colorOutline, 1);
+ stl->g_data->center_active = grp;
+
+ /* Select */
+ grp = DRW_shgroup_point_batch_create(sh, psl->ob_center);
+ DRW_shgroup_uniform_vec4(grp, "color", ts.colorSelect, 1);
+ stl->g_data->center_selected = grp;
+
+ /* Deselect */
+ grp = DRW_shgroup_point_batch_create(sh, psl->ob_center);
+ DRW_shgroup_uniform_vec4(grp, "color", ts.colorDeselect, 1);
+ stl->g_data->center_deselected = grp;
+
+ /* Select (library) */
+ grp = DRW_shgroup_point_batch_create(sh, psl->ob_center);
+ DRW_shgroup_uniform_vec4(grp, "color", ts.colorLibrarySelect, 1);
+ stl->g_data->center_selected_lib = grp;
+
+ /* Deselect (library) */
+ grp = DRW_shgroup_point_batch_create(sh, psl->ob_center);
+ DRW_shgroup_uniform_vec4(grp, "color", ts.colorLibrary, 1);
+ stl->g_data->center_deselected_lib = grp;
+ }
+
+ {
+ /* Particle Pass */
+ psl->particle = DRW_pass_create(
+ "Particle Pass",
+ DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS |
+ DRW_STATE_POINT | DRW_STATE_BLEND);
+ }
+
+ {
+ /* Empty/Background Image Pass */
+ psl->reference_image = DRW_pass_create(
+ "Refrence Image Pass",
+ DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_BLEND);
+ }
+}
+
+static void DRW_shgroup_mball_helpers(OBJECT_StorageList *stl, Object *ob, ViewLayer *view_layer)
+{
+ MetaBall *mb = ob->data;
+
+ float *color;
+ DRW_object_wire_theme_get(ob, view_layer, &color);
+
+ for (MetaElem *ml = mb->elems.first; ml != NULL; ml = ml->next) {
+ /* draw radius */
+ BKE_mball_element_calc_display_m3x4(ml->draw_scale_xform, ob->obmat, &ml->x);
+ DRW_shgroup_call_dynamic_add(stl->g_data->mball_circle, ml->draw_scale_xform, &ml->rad, color);
+ }
+}
+
+static void DRW_shgroup_lamp(OBJECT_StorageList *stl, Object *ob, ViewLayer *view_layer)
+{
+ Lamp *la = ob->data;
+ float *color;
+ int theme_id = DRW_object_wire_theme_get(ob, view_layer, &color);
+ static float zero = 0.0f;
+
+ typedef struct LampEngineData {
+ ObjectEngineData engine_data;
+ float shape_mat[4][4];
+ float spot_blend_mat[4][4];
+ } LampEngineData;
+
+ LampEngineData *lamp_engine_data =
+ (LampEngineData *)DRW_object_engine_data_ensure(
+ ob,
+ &draw_engine_object_type,
+ sizeof(LampEngineData),
+ NULL,
+ NULL);
+
+ float (*shapemat)[4] = lamp_engine_data->shape_mat;
+ float (*spotblendmat)[4] = lamp_engine_data->spot_blend_mat;
+
+ /* Don't draw the center if it's selected or active */
+ if (theme_id == TH_GROUP)
+ DRW_shgroup_call_dynamic_add(stl->g_data->lamp_center_group, ob->obmat[3]);
+ else if (theme_id == TH_LAMP)
+ DRW_shgroup_call_dynamic_add(stl->g_data->lamp_center, ob->obmat[3]);
+
+ /* First circle */
+ DRW_shgroup_call_dynamic_add(stl->g_data->lamp_circle, ob->obmat[3], color);
+
+ /* draw dashed outer circle if shadow is on. remember some lamps can't have certain shadows! */
+ if (la->type != LA_HEMI) {
+ if ((la->mode & LA_SHAD_RAY) || ((la->mode & LA_SHAD_BUF) && (la->type == LA_SPOT))) {
+ DRW_shgroup_call_dynamic_add(stl->g_data->lamp_circle_shadow, ob->obmat[3], color);
+ }
+ }
+
+ /* Distance */
+ if (ELEM(la->type, LA_HEMI, LA_SUN, LA_AREA)) {
+ DRW_shgroup_call_dynamic_add(stl->g_data->lamp_distance, color, &zero, &la->dist, ob->obmat);
+ }
+
+ copy_m4_m4(shapemat, ob->obmat);
+
+ if (la->type == LA_SUN) {
+ DRW_shgroup_call_dynamic_add(stl->g_data->lamp_sunrays, ob->obmat[3], color);
+ }
+ else if (la->type == LA_SPOT) {
+ float size[3], sizemat[4][4];
+ static float one = 1.0f;
+ float blend = 1.0f - pow2f(la->spotblend);
+
+ size[0] = size[1] = sinf(la->spotsize * 0.5f) * la->dist;
+ size[2] = cosf(la->spotsize * 0.5f) * la->dist;
+
+ size_to_mat4(sizemat, size);
+ mul_m4_m4m4(shapemat, ob->obmat, sizemat);
+
+ size[0] = size[1] = blend; size[2] = 1.0f;
+ size_to_mat4(sizemat, size);
+ translate_m4(sizemat, 0.0f, 0.0f, -1.0f);
+ rotate_m4(sizemat, 'X', (float)(M_PI / 2));
+ mul_m4_m4m4(spotblendmat, shapemat, sizemat);
+
+ if (la->mode & LA_SQUARE) {
+ DRW_shgroup_call_dynamic_add(stl->g_data->lamp_spot_pyramid, color, &one, shapemat);
+
+ /* hide line if it is zero size or overlaps with outer border,
+ * previously it adjusted to always to show it but that seems
+ * confusing because it doesn't show the actual blend size */
+ if (blend != 0.0f && blend != 1.0f) {
+ DRW_shgroup_call_dynamic_add(stl->g_data->lamp_spot_blend_rect, color, &one, spotblendmat);
+ }
+ }
+ else {
+ DRW_shgroup_call_dynamic_add(stl->g_data->lamp_spot_cone, color, shapemat);
+
+ /* hide line if it is zero size or overlaps with outer border,
+ * previously it adjusted to always to show it but that seems
+ * confusing because it doesn't show the actual blend size */
+ if (blend != 0.0f && blend != 1.0f) {
+ DRW_shgroup_call_dynamic_add(stl->g_data->lamp_spot_blend, color, &one, spotblendmat);
+ }
+ }
+
+ DRW_shgroup_call_dynamic_add(stl->g_data->lamp_buflimit, color, &la->clipsta, &la->clipend, ob->obmat);
+ DRW_shgroup_call_dynamic_add(stl->g_data->lamp_buflimit_points, color, &la->clipsta, &la->clipend, ob->obmat);
+ }
+ else if (la->type == LA_HEMI) {
+ static float hemisize = 2.0f;
+ DRW_shgroup_call_dynamic_add(stl->g_data->lamp_hemi, color, &hemisize, shapemat);
+ }
+ else if (la->type == LA_AREA) {
+ float size[3] = {1.0f, 1.0f, 1.0f}, sizemat[4][4];
+
+ if (la->area_shape == LA_AREA_RECT) {
+ size[1] = la->area_sizey / la->area_size;
+ size_to_mat4(sizemat, size);
+ mul_m4_m4m4(shapemat, shapemat, sizemat);
+ }
+
+ DRW_shgroup_call_dynamic_add(stl->g_data->lamp_area, color, &la->area_size, shapemat);
+ }
+
+ /* Line and point going to the ground */
+ DRW_shgroup_call_dynamic_add(stl->g_data->lamp_groundline, ob->obmat[3]);
+ DRW_shgroup_call_dynamic_add(stl->g_data->lamp_groundpoint, ob->obmat[3]);
+}
+
+static void DRW_shgroup_camera(OBJECT_StorageList *stl, Object *ob, ViewLayer *view_layer)
+{
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ View3D *v3d = draw_ctx->v3d;
+ Scene *scene = draw_ctx->scene;
+ RegionView3D *rv3d = draw_ctx->rv3d;
+
+ Camera *cam = ob->data;
+ const bool is_active = (ob == v3d->camera);
+ const bool look_through = (is_active && (rv3d->persp == RV3D_CAMOB));
+ float *color;
+ DRW_object_wire_theme_get(ob, view_layer, &color);
+
+ float vec[4][3], asp[2], shift[2], scale[3], drawsize;
+
+ scale[0] = 1.0f / len_v3(ob->obmat[0]);
+ scale[1] = 1.0f / len_v3(ob->obmat[1]);
+ scale[2] = 1.0f / len_v3(ob->obmat[2]);
+
+ BKE_camera_view_frame_ex(scene, cam, cam->drawsize, false, scale,
+ asp, shift, &drawsize, vec);
+
+ /* Frame coords */
+ copy_v2_v2(cam->drwcorners[0], vec[0]);
+ copy_v2_v2(cam->drwcorners[1], vec[1]);
+ copy_v2_v2(cam->drwcorners[2], vec[2]);
+ copy_v2_v2(cam->drwcorners[3], vec[3]);
+
+ /* depth */
+ cam->drwdepth = vec[0][2];
+
+ /* tria */
+ cam->drwtria[0][0] = shift[0] + ((0.7f * drawsize) * scale[0]);
+ cam->drwtria[0][1] = shift[1] + ((drawsize * (asp[1] + 0.1f)) * scale[1]);
+ cam->drwtria[1][0] = shift[0];
+ cam->drwtria[1][1] = shift[1] + ((1.1f * drawsize * (asp[1] + 0.7f)) * scale[1]);
+
+ if (look_through) {
+ /* Only draw the frame. */
+ DRW_shgroup_call_dynamic_add(
+ stl->g_data->camera_frame, color, cam->drwcorners,
+ &cam->drwdepth, cam->drwtria, ob->obmat);
+ }
+ else {
+ DRW_shgroup_call_dynamic_add(
+ stl->g_data->camera, color, cam->drwcorners,
+ &cam->drwdepth, cam->drwtria, ob->obmat);
+
+ /* Active cam */
+ if (is_active) {
+ DRW_shgroup_call_dynamic_add(
+ stl->g_data->camera_tria, color,
+ cam->drwcorners, &cam->drwdepth, cam->drwtria, ob->obmat);
+ }
+ }
+
+ /* draw the rest in normalize object space */
+ copy_m4_m4(cam->drwnormalmat, ob->obmat);
+ normalize_m4(cam->drwnormalmat);
+
+ if (cam->flag & CAM_SHOWLIMITS) {
+ static float col[3] = {0.5f, 0.5f, 0.25f}, col_hi[3] = {1.0f, 1.0f, 0.5f};
+ float sizemat[4][4], size[3] = {1.0f, 1.0f, 0.0f};
+ float focusdist = BKE_camera_object_dof_distance(ob);
+
+ copy_m4_m4(cam->drwfocusmat, cam->drwnormalmat);
+ translate_m4(cam->drwfocusmat, 0.0f, 0.0f, -focusdist);
+ size_to_mat4(sizemat, size);
+ mul_m4_m4m4(cam->drwfocusmat, cam->drwfocusmat, sizemat);
+
+ DRW_shgroup_call_dynamic_add(
+ stl->g_data->camera_focus, (is_active ? col_hi : col),
+ &cam->drawsize, cam->drwfocusmat);
+
+ DRW_shgroup_call_dynamic_add(
+ stl->g_data->camera_clip, color,
+ &cam->clipsta, &cam->clipend, cam->drwnormalmat);
+ DRW_shgroup_call_dynamic_add(
+ stl->g_data->camera_clip_points, (is_active ? col_hi : col),
+ &cam->clipsta, &cam->clipend, cam->drwnormalmat);
+ }
+
+ if (cam->flag & CAM_SHOWMIST) {
+ World *world = scene->world;
+
+ if (world) {
+ static float col[3] = {0.5f, 0.5f, 0.5f}, col_hi[3] = {1.0f, 1.0f, 1.0f};
+ world->mistend = world->miststa + world->mistdist;
+ DRW_shgroup_call_dynamic_add(
+ stl->g_data->camera_mist, color,
+ &world->miststa, &world->mistend, cam->drwnormalmat);
+ DRW_shgroup_call_dynamic_add(
+ stl->g_data->camera_mist_points, (is_active ? col_hi : col),
+ &world->miststa, &world->mistend, cam->drwnormalmat);
+ }
+ }
+}
+
+static void DRW_shgroup_empty(OBJECT_StorageList *stl, OBJECT_PassList *psl, Object *ob, ViewLayer *view_layer)
+{
+ float *color;
+ DRW_object_wire_theme_get(ob, view_layer, &color);
+
+ switch (ob->empty_drawtype) {
+ case OB_PLAINAXES:
+ DRW_shgroup_call_dynamic_add(stl->g_data->plain_axes, color, &ob->empty_drawsize, ob->obmat);
+ break;
+ case OB_SINGLE_ARROW:
+ DRW_shgroup_call_dynamic_add(stl->g_data->single_arrow, color, &ob->empty_drawsize, ob->obmat);
+ DRW_shgroup_call_dynamic_add(stl->g_data->single_arrow_line, color, &ob->empty_drawsize, ob->obmat);
+ break;
+ case OB_CUBE:
+ DRW_shgroup_call_dynamic_add(stl->g_data->cube, color, &ob->empty_drawsize, ob->obmat);
+ break;
+ case OB_CIRCLE:
+ DRW_shgroup_call_dynamic_add(stl->g_data->circle, color, &ob->empty_drawsize, ob->obmat);
+ break;
+ case OB_EMPTY_SPHERE:
+ DRW_shgroup_call_dynamic_add(stl->g_data->sphere, color, &ob->empty_drawsize, ob->obmat);
+ break;
+ case OB_EMPTY_CONE:
+ DRW_shgroup_call_dynamic_add(stl->g_data->cone, color, &ob->empty_drawsize, ob->obmat);
+ break;
+ case OB_ARROWS:
+ DRW_shgroup_call_dynamic_add(stl->g_data->arrows, color, &ob->empty_drawsize, ob->obmat);
+ DRW_shgroup_call_dynamic_add(stl->g_data->axis_names, color, &ob->empty_drawsize, ob->obmat);
+ break;
+ case OB_EMPTY_IMAGE:
+ DRW_shgroup_empty_image(stl, psl, ob, color);
+ break;
+ }
+}
+
+static void DRW_shgroup_forcefield(OBJECT_StorageList *stl, Object *ob, ViewLayer *view_layer)
+{
+ int theme_id = DRW_object_wire_theme_get(ob, view_layer, NULL);
+ float *color = DRW_color_background_blend_get(theme_id);
+ PartDeflect *pd = ob->pd;
+ Curve *cu = (ob->type == OB_CURVE) ? ob->data : NULL;
+
+ /* TODO Move this to depsgraph */
+ float tmp[3];
+ copy_v3_fl(pd->drawvec1, ob->empty_drawsize);
+
+ switch (pd->forcefield) {
+ case PFIELD_WIND:
+ pd->drawvec1[2] = pd->f_strength;
+ break;
+ case PFIELD_VORTEX:
+ if (pd->f_strength < 0.0f) {
+ pd->drawvec1[1] = -pd->drawvec1[1];
+ }
+ break;
+ case PFIELD_GUIDE:
+ if (cu && (cu->flag & CU_PATH) && ob->curve_cache->path && ob->curve_cache->path->data) {
+ where_on_path(ob, 0.0f, pd->drawvec1, tmp, NULL, NULL, NULL);
+ where_on_path(ob, 1.0f, pd->drawvec2, tmp, NULL, NULL, NULL);
+ }
+ break;
+ }
+
+ if (pd->falloff == PFIELD_FALL_TUBE) {
+ pd->drawvec_falloff_max[0] = pd->drawvec_falloff_max[1] = (pd->flag & PFIELD_USEMAXR) ? pd->maxrad : 1.0f;
+ pd->drawvec_falloff_max[2] = (pd->flag & PFIELD_USEMAX) ? pd->maxdist : 0.0f;
+
+ pd->drawvec_falloff_min[0] = pd->drawvec_falloff_min[1] = (pd->flag & PFIELD_USEMINR) ? pd->minrad : 1.0f;
+ pd->drawvec_falloff_min[2] = (pd->flag & PFIELD_USEMIN) ? pd->mindist : 0.0f;
+ }
+ else if (pd->falloff == PFIELD_FALL_CONE) {
+ float radius, distance;
+
+ radius = DEG2RADF((pd->flag & PFIELD_USEMAXR) ? pd->maxrad : 1.0f);
+ distance = (pd->flag & PFIELD_USEMAX) ? pd->maxdist : 0.0f;
+ pd->drawvec_falloff_max[0] = pd->drawvec_falloff_max[1] = distance * sinf(radius);
+ pd->drawvec_falloff_max[2] = distance * cosf(radius);
+
+ radius = DEG2RADF((pd->flag & PFIELD_USEMINR) ? pd->minrad : 1.0f);
+ distance = (pd->flag & PFIELD_USEMIN) ? pd->mindist : 0.0f;
+
+ pd->drawvec_falloff_min[0] = pd->drawvec_falloff_min[1] = distance * sinf(radius);
+ pd->drawvec_falloff_min[2] = distance * cosf(radius);
+ }
+ /* End of things that should go to depthgraph */
+
+ switch (pd->forcefield) {
+ case PFIELD_WIND:
+ DRW_shgroup_call_dynamic_add(stl->g_data->field_wind, color, &pd->drawvec1, ob->obmat);
+ break;
+ case PFIELD_FORCE:
+ DRW_shgroup_call_dynamic_add(stl->g_data->field_force, color, &pd->drawvec1, ob->obmat);
+ break;
+ case PFIELD_VORTEX:
+ DRW_shgroup_call_dynamic_add(stl->g_data->field_vortex, color, &pd->drawvec1, ob->obmat);
+ break;
+ case PFIELD_GUIDE:
+ if (cu && (cu->flag & CU_PATH) && ob->curve_cache->path && ob->curve_cache->path->data) {
+ DRW_shgroup_call_dynamic_add(stl->g_data->field_curve_sta, color, &pd->f_strength, ob->obmat);
+ DRW_shgroup_call_dynamic_add(stl->g_data->field_curve_end, color, &pd->f_strength, ob->obmat);
+ }
+ break;
+ }
+
+ if (pd->falloff == PFIELD_FALL_SPHERE) {
+ /* as last, guide curve alters it */
+ if ((pd->flag & PFIELD_USEMAX) != 0) {
+ DRW_shgroup_call_dynamic_add(stl->g_data->field_curve_end, color, &pd->maxdist, ob->obmat);
+ }
+
+ if ((pd->flag & PFIELD_USEMIN) != 0) {
+ DRW_shgroup_call_dynamic_add(stl->g_data->field_curve_end, color, &pd->mindist, ob->obmat);
+ }
+ }
+ else if (pd->falloff == PFIELD_FALL_TUBE) {
+ if (pd->flag & (PFIELD_USEMAX | PFIELD_USEMAXR)) {
+ DRW_shgroup_call_dynamic_add(stl->g_data->field_tube_limit, color, &pd->drawvec_falloff_max, ob->obmat);
+ }
+
+ if (pd->flag & (PFIELD_USEMIN | PFIELD_USEMINR)) {
+ DRW_shgroup_call_dynamic_add(stl->g_data->field_tube_limit, color, &pd->drawvec_falloff_min, ob->obmat);
+ }
+ }
+ else if (pd->falloff == PFIELD_FALL_CONE) {
+ if (pd->flag & (PFIELD_USEMAX | PFIELD_USEMAXR)) {
+ DRW_shgroup_call_dynamic_add(stl->g_data->field_cone_limit, color, &pd->drawvec_falloff_max, ob->obmat);
+ }
+
+ if (pd->flag & (PFIELD_USEMIN | PFIELD_USEMINR)) {
+ DRW_shgroup_call_dynamic_add(stl->g_data->field_cone_limit, color, &pd->drawvec_falloff_min, ob->obmat);
+ }
+ }
+}
+
+static void DRW_shgroup_speaker(OBJECT_StorageList *stl, Object *ob, ViewLayer *view_layer)
+{
+ float *color;
+ static float one = 1.0f;
+ DRW_object_wire_theme_get(ob, view_layer, &color);
+
+ DRW_shgroup_call_dynamic_add(stl->g_data->speaker, color, &one, ob->obmat);
+}
+
+typedef struct OBJECT_LightProbeEngineData {
+ ObjectEngineData engine_data;
+
+ float prb_mats[6][4][4];
+ float probe_cube_mat[4][4];
+ float draw_size;
+ float increment_x[3];
+ float increment_y[3];
+ float increment_z[3];
+ float corner[3];
+} OBJECT_LightProbeEngineData;
+
+static void DRW_shgroup_lightprobe(OBJECT_StorageList *stl, OBJECT_PassList *psl, Object *ob, ViewLayer *view_layer)
+{
+ float *color;
+ static float one = 1.0f;
+ LightProbe *prb = (LightProbe *)ob->data;
+ bool do_outlines = ((ob->base_flag & BASE_SELECTED) != 0);
+ DRW_object_wire_theme_get(ob, view_layer, &color);
+
+ OBJECT_LightProbeEngineData *prb_data =
+ (OBJECT_LightProbeEngineData *)DRW_object_engine_data_ensure(
+ ob,
+ &draw_engine_object_type,
+ sizeof(OBJECT_LightProbeEngineData),
+ NULL,
+ NULL);
+
+ if ((DRW_state_is_select() || do_outlines) && ((prb->flag & LIGHTPROBE_FLAG_SHOW_DATA) != 0)) {
+
+ if (prb->type == LIGHTPROBE_TYPE_GRID) {
+ /* Update transforms */
+ float cell_dim[3], half_cell_dim[3];
+ cell_dim[0] = 2.0f / (float)(prb->grid_resolution_x);
+ cell_dim[1] = 2.0f / (float)(prb->grid_resolution_y);
+ cell_dim[2] = 2.0f / (float)(prb->grid_resolution_z);
+
+ mul_v3_v3fl(half_cell_dim, cell_dim, 0.5f);
+
+ /* First cell. */
+ copy_v3_fl(prb_data->corner, -1.0f);
+ add_v3_v3(prb_data->corner, half_cell_dim);
+ mul_m4_v3(ob->obmat, prb_data->corner);
+
+ /* Opposite neighbor cell. */
+ copy_v3_fl3(prb_data->increment_x, cell_dim[0], 0.0f, 0.0f);
+ add_v3_v3(prb_data->increment_x, half_cell_dim);
+ add_v3_fl(prb_data->increment_x, -1.0f);
+ mul_m4_v3(ob->obmat, prb_data->increment_x);
+ sub_v3_v3(prb_data->increment_x, prb_data->corner);
+
+ copy_v3_fl3(prb_data->increment_y, 0.0f, cell_dim[1], 0.0f);
+ add_v3_v3(prb_data->increment_y, half_cell_dim);
+ add_v3_fl(prb_data->increment_y, -1.0f);
+ mul_m4_v3(ob->obmat, prb_data->increment_y);
+ sub_v3_v3(prb_data->increment_y, prb_data->corner);
+
+ copy_v3_fl3(prb_data->increment_z, 0.0f, 0.0f, cell_dim[2]);
+ add_v3_v3(prb_data->increment_z, half_cell_dim);
+ add_v3_fl(prb_data->increment_z, -1.0f);
+ mul_m4_v3(ob->obmat, prb_data->increment_z);
+ sub_v3_v3(prb_data->increment_z, prb_data->corner);
+
+ DRWShadingGroup *grp = DRW_shgroup_instance_create(e_data.lightprobe_grid_sh, psl->lightprobes, DRW_cache_sphere_get());
+ DRW_shgroup_set_instance_count(grp, prb->grid_resolution_x * prb->grid_resolution_y * prb->grid_resolution_z);
+ DRW_shgroup_uniform_vec4(grp, "color", color, 1);
+ DRW_shgroup_uniform_vec3(grp, "corner", prb_data->corner, 1);
+ DRW_shgroup_uniform_vec3(grp, "increment_x", prb_data->increment_x, 1);
+ DRW_shgroup_uniform_vec3(grp, "increment_y", prb_data->increment_y, 1);
+ DRW_shgroup_uniform_vec3(grp, "increment_z", prb_data->increment_z, 1);
+ DRW_shgroup_uniform_ivec3(grp, "grid_resolution", &prb->grid_resolution_x, 1);
+ DRW_shgroup_uniform_float(grp, "sphere_size", &prb->data_draw_size, 1);
+ }
+ else if (prb->type == LIGHTPROBE_TYPE_CUBE) {
+ prb_data->draw_size = prb->data_draw_size * 0.1f;
+ unit_m4(prb_data->probe_cube_mat);
+ copy_v3_v3(prb_data->probe_cube_mat[3], ob->obmat[3]);
+ DRW_shgroup_call_dynamic_add(stl->g_data->lightprobes_cube, color, &prb_data->draw_size, prb_data->probe_cube_mat);
+ }
+ else {
+ prb_data->draw_size = 1.0f;
+ DRW_shgroup_call_dynamic_add(stl->g_data->lightprobes_planar, color, &prb_data->draw_size, ob->obmat);
+ }
+ }
+
+ switch (prb->type) {
+ case LIGHTPROBE_TYPE_PLANAR:
+ DRW_shgroup_call_dynamic_add(stl->g_data->probe_planar, ob->obmat[3], color);
+ break;
+ case LIGHTPROBE_TYPE_GRID:
+ DRW_shgroup_call_dynamic_add(stl->g_data->probe_grid, ob->obmat[3], color);
+ break;
+ case LIGHTPROBE_TYPE_CUBE:
+ default:
+ DRW_shgroup_call_dynamic_add(stl->g_data->probe_cube, ob->obmat[3], color);
+ break;
+ }
+
+
+
+ if (prb->type == LIGHTPROBE_TYPE_PLANAR) {
+ float (*mat)[4];
+ mat = (float (*)[4])(prb_data->prb_mats[0]);
+ copy_m4_m4(mat, ob->obmat);
+ normalize_m4(mat);
+
+ DRW_shgroup_call_dynamic_add(stl->g_data->single_arrow, color, &ob->empty_drawsize, mat);
+ DRW_shgroup_call_dynamic_add(stl->g_data->single_arrow_line, color, &ob->empty_drawsize, mat);
+
+ mat = (float (*)[4])(prb_data->prb_mats[1]);
+ copy_m4_m4(mat, ob->obmat);
+ zero_v3(mat[2]);
+
+ DRW_shgroup_call_dynamic_add(stl->g_data->cube, color, &one, mat);
+ }
+
+ if ((prb->flag & LIGHTPROBE_FLAG_SHOW_INFLUENCE) != 0) {
+
+ prb->distfalloff = (1.0f - prb->falloff) * prb->distinf;
+ prb->distgridinf = prb->distinf;
+
+ if (prb->type == LIGHTPROBE_TYPE_GRID) {
+ prb->distfalloff += 1.0f;
+ prb->distgridinf += 1.0f;
+ }
+
+ if (prb->type == LIGHTPROBE_TYPE_GRID ||
+ prb->attenuation_type == LIGHTPROBE_SHAPE_BOX)
+ {
+ DRW_shgroup_call_dynamic_add(stl->g_data->cube, color, &prb->distgridinf, ob->obmat);
+ DRW_shgroup_call_dynamic_add(stl->g_data->cube, color, &prb->distfalloff, ob->obmat);
+ }
+ else if (prb->type == LIGHTPROBE_TYPE_PLANAR) {
+ float (*rangemat)[4];
+ rangemat = (float (*)[4])(prb_data->prb_mats[2]);
+ copy_m4_m4(rangemat, ob->obmat);
+ normalize_v3(rangemat[2]);
+ mul_v3_fl(rangemat[2], prb->distinf);
+
+ DRW_shgroup_call_dynamic_add(stl->g_data->cube, color, &one, rangemat);
+
+ rangemat = (float (*)[4])(prb_data->prb_mats[3]);
+ copy_m4_m4(rangemat, ob->obmat);
+ normalize_v3(rangemat[2]);
+ mul_v3_fl(rangemat[2], prb->distfalloff);
+
+ DRW_shgroup_call_dynamic_add(stl->g_data->cube, color, &one, rangemat);
+ }
+ else {
+ DRW_shgroup_call_dynamic_add(stl->g_data->sphere, color, &prb->distgridinf, ob->obmat);
+ DRW_shgroup_call_dynamic_add(stl->g_data->sphere, color, &prb->distfalloff, ob->obmat);
+ }
+ }
+
+ if ((prb->flag & LIGHTPROBE_FLAG_SHOW_PARALLAX) != 0) {
+ if (prb->type != LIGHTPROBE_TYPE_PLANAR) {
+ float (*obmat)[4], *dist;
+
+ if ((prb->flag & LIGHTPROBE_FLAG_CUSTOM_PARALLAX) != 0) {
+ dist = &prb->distpar;
+ /* TODO object parallax */
+ obmat = ob->obmat;
+ }
+ else {
+ dist = &prb->distinf;
+ obmat = ob->obmat;
+ }
+
+ if (prb->parallax_type == LIGHTPROBE_SHAPE_BOX) {
+ DRW_shgroup_call_dynamic_add(stl->g_data->cube, color, dist, obmat);
+ }
+ else {
+ DRW_shgroup_call_dynamic_add(stl->g_data->sphere, color, dist, obmat);
+ }
+ }
+ }
+
+ if ((prb->flag & LIGHTPROBE_FLAG_SHOW_CLIP_DIST) != 0) {
+ if (prb->type != LIGHTPROBE_TYPE_PLANAR) {
+ static const float cubefacemat[6][4][4] = {
+ {{0.0, 0.0, -1.0, 0.0}, {0.0, -1.0, 0.0, 0.0}, {-1.0, 0.0, 0.0, 0.0}, {0.0, 0.0, 0.0, 1.0}},
+ {{0.0, 0.0, 1.0, 0.0}, {0.0, -1.0, 0.0, 0.0}, {1.0, 0.0, 0.0, 0.0}, {0.0, 0.0, 0.0, 1.0}},
+ {{1.0, 0.0, 0.0, 0.0}, {0.0, 0.0, -1.0, 0.0}, {0.0, 1.0, 0.0, 0.0}, {0.0, 0.0, 0.0, 1.0}},
+ {{1.0, 0.0, 0.0, 0.0}, {0.0, 0.0, 1.0, 0.0}, {0.0, -1.0, 0.0, 0.0}, {0.0, 0.0, 0.0, 1.0}},
+ {{1.0, 0.0, 0.0, 0.0}, {0.0, -1.0, 0.0, 0.0}, {0.0, 0.0, -1.0, 0.0}, {0.0, 0.0, 0.0, 1.0}},
+ {{-1.0, 0.0, 0.0, 0.0}, {0.0, -1.0, 0.0, 0.0}, {0.0, 0.0, 1.0, 0.0}, {0.0, 0.0, 0.0, 1.0}},
+ };
+
+ for (int i = 0; i < 6; ++i) {
+ float (*clipmat)[4];
+ clipmat = (float (*)[4])(prb_data->prb_mats[i]);
+
+ normalize_m4_m4(clipmat, ob->obmat);
+ mul_m4_m4m4(clipmat, clipmat, cubefacemat[i]);
+
+ DRW_shgroup_call_dynamic_add(stl->g_data->lamp_buflimit, color, &prb->clipsta, &prb->clipend, clipmat);
+ DRW_shgroup_call_dynamic_add(stl->g_data->lamp_buflimit_points, color, &prb->clipsta, &prb->clipend, clipmat);
+ }
+ }
+ }
+
+ /* Line and point going to the ground */
+ if (prb->type == LIGHTPROBE_TYPE_CUBE) {
+ DRW_shgroup_call_dynamic_add(stl->g_data->lamp_groundline, ob->obmat[3]);
+ DRW_shgroup_call_dynamic_add(stl->g_data->lamp_groundpoint, ob->obmat[3]);
+ }
+}
+
+static void DRW_shgroup_relationship_lines(OBJECT_StorageList *stl, Object *ob)
+{
+ if (ob->parent && DRW_check_object_visible_within_active_context(ob->parent)) {
+ DRW_shgroup_call_dynamic_add(stl->g_data->relationship_lines, ob->obmat[3]);
+ DRW_shgroup_call_dynamic_add(stl->g_data->relationship_lines, ob->parent->obmat[3]);
+ }
+}
+
+static void DRW_shgroup_object_center(OBJECT_StorageList *stl, Object *ob, ViewLayer *view_layer, View3D *v3d)
+{
+ const bool is_library = ob->id.us > 1 || ID_IS_LINKED(ob);
+ DRWShadingGroup *shgroup;
+
+ if (ob == OBACT(view_layer)) {
+ shgroup = stl->g_data->center_active;
+ }
+ else if (ob->base_flag & BASE_SELECTED) {
+ if (is_library) {
+ shgroup = stl->g_data->center_selected_lib;
+ }
+ else {
+ shgroup = stl->g_data->center_selected;
+ }
+ }
+ else if (v3d->flag & V3D_DRAW_CENTERS) {
+ if (is_library) {
+ shgroup = stl->g_data->center_deselected_lib;
+ }
+ else {
+ shgroup = stl->g_data->center_deselected;
+ }
+ }
+ else {
+ return;
+ }
+
+ DRW_shgroup_call_dynamic_add(shgroup, ob->obmat[3]);
+}
+
+static void OBJECT_cache_populate_particles(Object *ob,
+ OBJECT_PassList *psl)
+{
+ for (ParticleSystem *psys = ob->particlesystem.first; psys; psys = psys->next) {
+ if (psys_check_enabled(ob, psys, false)) {
+ ParticleSettings *part = psys->part;
+ int draw_as = (part->draw_as == PART_DRAW_REND) ? part->ren_as : part->draw_as;
+
+ if (draw_as == PART_DRAW_PATH && !psys->pathcache && !psys->childcache) {
+ draw_as = PART_DRAW_DOT;
+ }
+
+ static float mat[4][4];
+ unit_m4(mat);
+
+ if (draw_as != PART_DRAW_PATH) {
+ struct Gwn_Batch *geom = DRW_cache_particles_get_dots(psys);
+ DRWShadingGroup *shgrp = NULL;
+ static int screen_space[2] = {0, 1};
+ static float def_prim_col[3] = {0.5f, 0.5f, 0.5f};
+ static float def_sec_col[3] = {1.0f, 1.0f, 1.0f};
+
+ Material *ma = give_current_material(ob, part->omat);
+
+ switch (draw_as) {
+ case PART_DRAW_DOT:
+ shgrp = DRW_shgroup_create(e_data.part_dot_sh, psl->particle);
+ DRW_shgroup_uniform_vec3(shgrp, "color", ma ? &ma->r : def_prim_col, 1);
+ DRW_shgroup_uniform_vec3(shgrp, "outlineColor", ma ? &ma->specr : def_sec_col, 1);
+ DRW_shgroup_uniform_float(shgrp, "pixel_size", DRW_viewport_pixelsize_get(), 1);
+ DRW_shgroup_uniform_float(shgrp, "size", &part->draw_size, 1);
+ DRW_shgroup_uniform_texture(shgrp, "ramp", globals_ramp);
+ DRW_shgroup_call_add(shgrp, geom, mat);
+ break;
+ case PART_DRAW_CROSS:
+ shgrp = DRW_shgroup_instance_create(
+ e_data.part_prim_sh, psl->particle, DRW_cache_particles_get_prim(PART_DRAW_CROSS));
+ DRW_shgroup_uniform_texture(shgrp, "ramp", globals_ramp);
+ DRW_shgroup_uniform_vec3(shgrp, "color", ma ? &ma->r : def_prim_col, 1);
+ DRW_shgroup_uniform_int(shgrp, "screen_space", &screen_space[0], 1);
+ break;
+ case PART_DRAW_CIRC:
+ shgrp = DRW_shgroup_instance_create(
+ e_data.part_prim_sh, psl->particle, DRW_cache_particles_get_prim(PART_DRAW_CIRC));
+ DRW_shgroup_uniform_texture(shgrp, "ramp", globals_ramp);
+ DRW_shgroup_uniform_vec3(shgrp, "color", ma ? &ma->r : def_prim_col, 1);
+ DRW_shgroup_uniform_int(shgrp, "screen_space", &screen_space[1], 1);
+ break;
+ case PART_DRAW_AXIS:
+ shgrp = DRW_shgroup_instance_create(
+ e_data.part_axis_sh, psl->particle, DRW_cache_particles_get_prim(PART_DRAW_AXIS));
+ DRW_shgroup_uniform_int(shgrp, "screen_space", &screen_space[0], 1);
+ break;
+ default:
+ break;
+ }
+
+ if (shgrp) {
+ if (draw_as != PART_DRAW_DOT) {
+ DRW_shgroup_uniform_float(shgrp, "draw_size", &part->draw_size, 1);
+ DRW_shgroup_instance_batch(shgrp, geom);
+ }
+ }
+ }
+ }
+ }
+}
+
+static void OBJECT_cache_populate(void *vedata, Object *ob)
+{
+ OBJECT_PassList *psl = ((OBJECT_Data *)vedata)->psl;
+ OBJECT_StorageList *stl = ((OBJECT_Data *)vedata)->stl;
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ Scene *scene = draw_ctx->scene;
+ ViewLayer *view_layer = draw_ctx->view_layer;
+ View3D *v3d = draw_ctx->v3d;
+ int theme_id = TH_UNDEFINED;
+
+ /* Handle particles first in case the emitter itself shouldn't be rendered. */
+ if (ob->type == OB_MESH) {
+ OBJECT_cache_populate_particles(ob, psl);
+ }
+
+ if (DRW_check_object_visible_within_active_context(ob) == false) {
+ return;
+ }
+
+ //CollectionEngineSettings *ces_mode_ob = BKE_layer_collection_engine_evaluated_get(ob, COLLECTION_MODE_OBJECT, "");
+
+ //bool do_wire = BKE_collection_engine_property_value_get_bool(ces_mode_ob, "show_wire");
+ bool do_outlines = ((ob->base_flag & BASE_SELECTED) != 0);
+
+ if (do_outlines) {
+ Object *obedit = scene->obedit;
+ if (ob != obedit && !((ob == draw_ctx->obact) && (draw_ctx->object_mode & OB_MODE_ALL_PAINT))) {
+ struct Gwn_Batch *geom = DRW_cache_object_surface_get(ob);
+ if (geom) {
+ theme_id = DRW_object_wire_theme_get(ob, view_layer, NULL);
+ DRWShadingGroup *shgroup = shgroup_theme_id_to_outline_or(stl, theme_id, NULL);
+ if (shgroup != NULL) {
+ DRW_shgroup_call_add(shgroup, geom, ob->obmat);
+ }
+ }
+ }
+ }
+
+ switch (ob->type) {
+ case OB_MESH:
+ {
+ Mesh *me = ob->data;
+ if (me->totpoly == 0) {
+ Object *obedit = scene->obedit;
+ if (ob != obedit) {
+ struct Gwn_Batch *geom = DRW_cache_mesh_edges_get(ob);
+ if (geom) {
+ if (theme_id == TH_UNDEFINED) {
+ theme_id = DRW_object_wire_theme_get(ob, view_layer, NULL);
+ }
+
+ DRWShadingGroup *shgroup = shgroup_theme_id_to_wire_or(stl, theme_id, stl->g_data->wire);
+ DRW_shgroup_call_add(shgroup, geom, ob->obmat);
+ }
+ }
+ }
+ break;
+ }
+ case OB_SURF:
+ break;
+ case OB_LATTICE:
+ {
+ Object *obedit = scene->obedit;
+ if (ob != obedit) {
+ struct Gwn_Batch *geom = DRW_cache_lattice_wire_get(ob, false);
+ if (theme_id == TH_UNDEFINED) {
+ theme_id = DRW_object_wire_theme_get(ob, view_layer, NULL);
+ }
+
+ DRWShadingGroup *shgroup = shgroup_theme_id_to_wire_or(stl, theme_id, stl->g_data->wire);
+ DRW_shgroup_call_add(shgroup, geom, ob->obmat);
+ }
+ break;
+ }
+
+ case OB_CURVE:
+ {
+ Object *obedit = scene->obedit;
+ if (ob != obedit) {
+ struct Gwn_Batch *geom = DRW_cache_curve_edge_wire_get(ob);
+ if (theme_id == TH_UNDEFINED) {
+ theme_id = DRW_object_wire_theme_get(ob, view_layer, NULL);
+ }
+ DRWShadingGroup *shgroup = shgroup_theme_id_to_wire_or(stl, theme_id, stl->g_data->wire);
+ DRW_shgroup_call_add(shgroup, geom, ob->obmat);
+ }
+ break;
+ }
+ case OB_MBALL:
+ {
+ Object *obedit = scene->obedit;
+ if (ob != obedit) {
+ DRW_shgroup_mball_helpers(stl, ob, view_layer);
+ }
+ break;
+ }
+ case OB_LAMP:
+ DRW_shgroup_lamp(stl, ob, view_layer);
+ break;
+ case OB_CAMERA:
+ DRW_shgroup_camera(stl, ob, view_layer);
+ break;
+ case OB_EMPTY:
+ DRW_shgroup_empty(stl, psl, ob, view_layer);
+ break;
+ case OB_SPEAKER:
+ DRW_shgroup_speaker(stl, ob, view_layer);
+ break;
+ case OB_LIGHTPROBE:
+ DRW_shgroup_lightprobe(stl, psl, ob, view_layer);
+ break;
+ case OB_ARMATURE:
+ {
+ bArmature *arm = ob->data;
+ if (arm->edbo == NULL) {
+ if (DRW_state_is_select() || !DRW_pose_mode_armature(ob, draw_ctx->obact)) {
+ DRW_shgroup_armature_object(
+ ob, view_layer, psl->bone_solid, psl->bone_wire, psl->bone_envelope,
+ stl->g_data->relationship_lines);
+ }
+ }
+ break;
+ }
+ default:
+ break;
+ }
+
+ if (ob->pd && ob->pd->forcefield) {
+ DRW_shgroup_forcefield(stl, ob, view_layer);
+ }
+
+ /* don't show object extras in set's */
+ if ((ob->base_flag & (BASE_FROM_SET | BASE_FROMDUPLI)) == 0) {
+
+ DRW_shgroup_object_center(stl, ob, view_layer, v3d);
+
+ DRW_shgroup_relationship_lines(stl, ob);
+
+ if ((ob->dtx & OB_DRAWNAME) && DRW_state_show_text()) {
+ struct DRWTextStore *dt = DRW_text_cache_ensure();
+ if (theme_id == TH_UNDEFINED) {
+ theme_id = DRW_object_wire_theme_get(ob, view_layer, NULL);
+ }
+
+ unsigned char color[4];
+ UI_GetThemeColor4ubv(theme_id, color);
+
+ DRW_text_cache_add(
+ dt, ob->obmat[3],
+ ob->id.name + 2, strlen(ob->id.name + 2),
+ 10, DRW_TEXT_CACHE_GLOBALSPACE | DRW_TEXT_CACHE_STRING_PTR, color);
+ }
+ }
+}
+
+static void OBJECT_draw_scene(void *vedata)
+{
+
+ OBJECT_PassList *psl = ((OBJECT_Data *)vedata)->psl;
+ OBJECT_StorageList *stl = ((OBJECT_Data *)vedata)->stl;
+ OBJECT_FramebufferList *fbl = ((OBJECT_Data *)vedata)->fbl;
+ DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
+ DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
+
+ float clearcol[4] = {0.0f, 0.0f, 0.0f, 0.0f};
+
+ if (DRW_state_is_fbo()) {
+ DRW_stats_group_start("Outlines");
+ /* attach temp textures */
+ DRW_framebuffer_texture_attach(fbl->outlines, e_data.outlines_depth_tx, 0, 0);
+ DRW_framebuffer_texture_attach(fbl->outlines, e_data.outlines_color_tx, 0, 0);
+ DRW_framebuffer_texture_attach(fbl->blur, e_data.outlines_blur_tx, 0, 0);
+
+ /* Render filled polygon on a separate framebuffer */
+ DRW_framebuffer_bind(fbl->outlines);
+ DRW_framebuffer_clear(true, true, false, clearcol, 1.0f);
+ DRW_draw_pass(psl->outlines);
+ DRW_draw_pass(psl->lightprobes);
+
+ /* detach textures */
+ DRW_framebuffer_texture_detach(e_data.outlines_depth_tx);
+
+ /* Search outline pixels */
+ DRW_framebuffer_bind(fbl->blur);
+ DRW_draw_pass(psl->outlines_search);
+
+ /* Expand outline to form a 3px wide line */
+ DRW_framebuffer_bind(fbl->outlines);
+ DRW_draw_pass(psl->outlines_expand);
+
+ /* Bleed color so the AA can do it's stuff */
+ DRW_framebuffer_bind(fbl->blur);
+ DRW_draw_pass(psl->outlines_bleed);
+
+ /* detach temp textures */
+ DRW_framebuffer_texture_detach(e_data.outlines_color_tx);
+ DRW_framebuffer_texture_detach(e_data.outlines_blur_tx);
+
+ /* restore main framebuffer */
+ DRW_framebuffer_bind(dfbl->default_fb);
+ DRW_stats_group_end();
+ }
+ else if (DRW_state_is_select()) {
+ /* Render probes spheres/planes so we can select them. */
+ DRW_draw_pass(psl->lightprobes);
+ }
+
+ MULTISAMPLE_SYNC_ENABLE(dfbl)
+
+ /* This needs to be drawn after the oultine */
+// DRW_draw_pass(psl->bone_envelope); /* Never drawn in Object mode currently. */
+ DRW_draw_pass(psl->bone_wire);
+ DRW_draw_pass(psl->bone_solid);
+ DRW_draw_pass(psl->non_meshes);
+ DRW_draw_pass(psl->particle);
+ DRW_draw_pass(psl->reference_image);
+
+ MULTISAMPLE_SYNC_DISABLE(dfbl)
+
+ DRW_draw_pass(psl->ob_center);
+
+ if (DRW_state_is_fbo()) {
+ if (e_data.draw_grid) {
+ DRW_framebuffer_texture_detach(dtxl->depth);
+ DRW_draw_pass(psl->grid);
+ DRW_framebuffer_texture_attach(dfbl->default_fb, dtxl->depth, 0, 0);
+ }
+
+ /* Combine with scene buffer last */
+ DRW_draw_pass(psl->outlines_resolve);
+ }
+
+ /* This has to be freed only after drawing empties! */
+ if (stl->g_data->image_plane_map) {
+ BLI_ghash_free(stl->g_data->image_plane_map, NULL, MEM_freeN);
+ }
+}
+
+void OBJECT_collection_settings_create(IDProperty *props)
+{
+ BLI_assert(props &&
+ props->type == IDP_GROUP &&
+ props->subtype == IDP_GROUP_SUB_MODE_OBJECT);
+ BKE_collection_engine_property_add_int(props, "show_wire", false);
+ BKE_collection_engine_property_add_int(props, "show_backface_culling", false);
+}
+
+static const DrawEngineDataSize OBJECT_data_size = DRW_VIEWPORT_DATA_SIZE(OBJECT_Data);
+
+DrawEngineType draw_engine_object_type = {
+ NULL, NULL,
+ N_("ObjectMode"),
+ &OBJECT_data_size,
+ &OBJECT_engine_init,
+ &OBJECT_engine_free,
+ &OBJECT_cache_init,
+ &OBJECT_cache_populate,
+ NULL,
+ NULL,
+ &OBJECT_draw_scene,
+ NULL,
+ NULL,
+};
diff --git a/source/blender/draw/modes/paint_texture_mode.c b/source/blender/draw/modes/paint_texture_mode.c
new file mode 100644
index 00000000000..2a5eabd08fa
--- /dev/null
+++ b/source/blender/draw/modes/paint_texture_mode.c
@@ -0,0 +1,418 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file blender/draw/modes/paint_texture_mode.c
+ * \ingroup draw
+ */
+
+#include "DRW_engine.h"
+#include "DRW_render.h"
+
+#include "BIF_gl.h"
+
+/* If builtin shaders are needed */
+#include "GPU_shader.h"
+#include "GPU_texture.h"
+
+#include "draw_common.h"
+
+#include "draw_mode_engines.h"
+
+#include "DNA_mesh_types.h"
+
+extern char datatoc_common_globals_lib_glsl[];
+extern char datatoc_paint_texture_vert_glsl[];
+extern char datatoc_paint_texture_frag_glsl[];
+extern char datatoc_paint_wire_vert_glsl[];
+extern char datatoc_paint_wire_frag_glsl[];
+
+/* If needed, contains all global/Theme colors
+ * Add needed theme colors / values to DRW_globals_update() and update UBO
+ * Not needed for constant color. */
+extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
+extern struct GlobalsUboStorage ts; /* draw_common.c */
+
+/* *********** LISTS *********** */
+/* All lists are per viewport specific datas.
+ * They are all free when viewport changes engines
+ * or is free itself. Use PAINT_TEXTURE_engine_init() to
+ * initialize most of them and PAINT_TEXTURE_cache_init()
+ * for PAINT_TEXTURE_PassList */
+
+typedef struct PAINT_TEXTURE_PassList {
+ /* Declare all passes here and init them in
+ * PAINT_TEXTURE_cache_init().
+ * Only contains (DRWPass *) */
+ struct DRWPass *image_faces;
+
+ struct DRWPass *wire_overlay;
+ struct DRWPass *face_overlay;
+} PAINT_TEXTURE_PassList;
+
+typedef struct PAINT_TEXTURE_FramebufferList {
+ /* Contains all framebuffer objects needed by this engine.
+ * Only contains (GPUFrameBuffer *) */
+ struct GPUFrameBuffer *fb;
+} PAINT_TEXTURE_FramebufferList;
+
+typedef struct PAINT_TEXTURE_TextureList {
+ /* Contains all framebuffer textures / utility textures
+ * needed by this engine. Only viewport specific textures
+ * (not per object). Only contains (GPUTexture *) */
+ struct GPUTexture *texture;
+} PAINT_TEXTURE_TextureList;
+
+typedef struct PAINT_TEXTURE_StorageList {
+ /* Contains any other memory block that the engine needs.
+ * Only directly MEM_(m/c)allocN'ed blocks because they are
+ * free with MEM_freeN() when viewport is freed.
+ * (not per object) */
+ struct CustomStruct *block;
+ struct PAINT_TEXTURE_PrivateData *g_data;
+} PAINT_TEXTURE_StorageList;
+
+typedef struct PAINT_TEXTURE_Data {
+ /* Struct returned by DRW_viewport_engine_data_ensure.
+ * If you don't use one of these, just make it a (void *) */
+ // void *fbl;
+ void *engine_type; /* Required */
+ PAINT_TEXTURE_FramebufferList *fbl;
+ PAINT_TEXTURE_TextureList *txl;
+ PAINT_TEXTURE_PassList *psl;
+ PAINT_TEXTURE_StorageList *stl;
+} PAINT_TEXTURE_Data;
+
+/* *********** STATIC *********** */
+
+static struct {
+ /* Custom shaders :
+ * Add sources to source/blender/draw/modes/shaders
+ * init in PAINT_TEXTURE_engine_init();
+ * free in PAINT_TEXTURE_engine_free(); */
+ struct GPUShader *fallback_sh;
+ struct GPUShader *image_sh;
+
+ struct GPUShader *wire_overlay_shader;
+ struct GPUShader *face_overlay_shader;
+} e_data = {NULL}; /* Engine data */
+
+typedef struct PAINT_TEXTURE_PrivateData {
+ /* This keeps the references of the shading groups for
+ * easy access in PAINT_TEXTURE_cache_populate() */
+ DRWShadingGroup *shgroup_fallback;
+ DRWShadingGroup **shgroup_image_array;
+
+ /* face-mask */
+ DRWShadingGroup *lwire_shgrp;
+ DRWShadingGroup *face_shgrp;
+} PAINT_TEXTURE_PrivateData; /* Transient data */
+
+/* *********** FUNCTIONS *********** */
+
+/* Init Textures, Framebuffers, Storage and Shaders.
+ * It is called for every frames.
+ * (Optional) */
+static void PAINT_TEXTURE_engine_init(void *vedata)
+{
+ PAINT_TEXTURE_TextureList *txl = ((PAINT_TEXTURE_Data *)vedata)->txl;
+ PAINT_TEXTURE_FramebufferList *fbl = ((PAINT_TEXTURE_Data *)vedata)->fbl;
+ PAINT_TEXTURE_StorageList *stl = ((PAINT_TEXTURE_Data *)vedata)->stl;
+
+ UNUSED_VARS(txl, fbl, stl);
+
+ /* Init Framebuffers like this: order is attachment order (for color texs) */
+ /*
+ * DRWFboTexture tex[2] = {{&txl->depth, DRW_TEX_DEPTH_24, 0},
+ * {&txl->color, DRW_TEX_RGBA_8, DRW_TEX_FILTER}};
+ */
+
+ /* DRW_framebuffer_init takes care of checking if
+ * the framebuffer is valid and has the right size*/
+ /*
+ * float *viewport_size = DRW_viewport_size_get();
+ * DRW_framebuffer_init(&fbl->occlude_wire_fb,
+ * (int)viewport_size[0], (int)viewport_size[1],
+ * tex, 2);
+ */
+
+ if (!e_data.fallback_sh) {
+ e_data.fallback_sh = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
+ }
+ if (!e_data.image_sh) {
+ e_data.image_sh = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
+
+ e_data.image_sh = DRW_shader_create_with_lib(
+ datatoc_paint_texture_vert_glsl, NULL,
+ datatoc_paint_texture_frag_glsl,
+ datatoc_common_globals_lib_glsl, NULL);
+
+ }
+
+ if (!e_data.wire_overlay_shader) {
+ e_data.wire_overlay_shader = DRW_shader_create_with_lib(
+ datatoc_paint_wire_vert_glsl, NULL,
+ datatoc_paint_wire_frag_glsl,
+ datatoc_common_globals_lib_glsl,
+ "#define VERTEX_MODE\n");
+ }
+
+ if (!e_data.face_overlay_shader) {
+ e_data.face_overlay_shader = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
+ }
+}
+
+/* Here init all passes and shading groups
+ * Assume that all Passes are NULL */
+static void PAINT_TEXTURE_cache_init(void *vedata)
+{
+ PAINT_TEXTURE_PassList *psl = ((PAINT_TEXTURE_Data *)vedata)->psl;
+ PAINT_TEXTURE_StorageList *stl = ((PAINT_TEXTURE_Data *)vedata)->stl;
+
+ if (!stl->g_data) {
+ /* Alloc transient pointers */
+ stl->g_data = MEM_mallocN(sizeof(*stl->g_data), __func__);
+ stl->g_data->shgroup_image_array = NULL;
+ }
+
+ {
+ /* Create a pass */
+ DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS |
+ DRW_STATE_BLEND | DRW_STATE_WIRE;
+ psl->image_faces = DRW_pass_create("Image Color Pass", state);
+
+ stl->g_data->shgroup_fallback = DRW_shgroup_create(e_data.fallback_sh, psl->image_faces);
+
+ /* Uniforms need a pointer to it's value so be sure it's accessible at
+ * any given time (i.e. use static vars) */
+ static float color[4] = {1.0f, 0.0f, 1.0f, 1.0};
+ DRW_shgroup_uniform_vec4(stl->g_data->shgroup_fallback, "color", color, 1);
+
+ MEM_SAFE_FREE(stl->g_data->shgroup_image_array);
+
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ Object *ob = draw_ctx->obact;
+ if (ob && ob->type == OB_MESH) {
+ Scene *scene = draw_ctx->scene;
+ const bool use_material_slots = (scene->toolsettings->imapaint.mode == IMAGEPAINT_MODE_MATERIAL);
+ const Mesh *me = ob->data;
+
+ stl->g_data->shgroup_image_array = MEM_mallocN(
+ sizeof(*stl->g_data->shgroup_image_array) * (use_material_slots ? me->totcol : 1), __func__);
+
+ if (use_material_slots) {
+ for (int i = 0; i < me->totcol; i++) {
+ Material *ma = give_current_material(ob, i + 1);
+ Image *ima = (ma && ma->texpaintslot) ? ma->texpaintslot[ma->paint_active_slot].ima : NULL;
+ GPUTexture *tex = ima ?
+ GPU_texture_from_blender(ima, NULL, GL_TEXTURE_2D, false, false, false) : NULL;
+
+ if (tex) {
+ DRWShadingGroup *grp = DRW_shgroup_create(e_data.image_sh, psl->image_faces);
+ DRW_shgroup_uniform_texture(grp, "image", tex);
+ stl->g_data->shgroup_image_array[i] = grp;
+ }
+ else {
+ stl->g_data->shgroup_image_array[i] = NULL;
+ }
+ }
+ }
+ else {
+ Image *ima = scene->toolsettings->imapaint.canvas;
+ GPUTexture *tex = ima ?
+ GPU_texture_from_blender(ima, NULL, GL_TEXTURE_2D, false, false, false) : NULL;
+
+ if (tex) {
+ DRWShadingGroup *grp = DRW_shgroup_create(e_data.image_sh, psl->image_faces);
+ DRW_shgroup_uniform_texture(grp, "image", tex);
+ stl->g_data->shgroup_image_array[0] = grp;
+ }
+ else {
+ stl->g_data->shgroup_image_array[0] = NULL;
+ }
+ }
+ }
+ }
+
+ /* Face Mask */
+ {
+ psl->wire_overlay = DRW_pass_create(
+ "Wire Pass",
+ DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS);
+
+ stl->g_data->lwire_shgrp = DRW_shgroup_create(e_data.wire_overlay_shader, psl->wire_overlay);
+ }
+
+ {
+ psl->face_overlay = DRW_pass_create(
+ "Face Mask Pass",
+ DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_BLEND);
+
+ stl->g_data->face_shgrp = DRW_shgroup_create(e_data.face_overlay_shader, psl->face_overlay);
+
+ static float col[4] = {1.0f, 1.0f, 1.0f, 0.2f};
+ DRW_shgroup_uniform_vec4(stl->g_data->face_shgrp, "color", col, 1);
+ }
+}
+
+/* Add geometry to shadingGroups. Execute for each objects */
+static void PAINT_TEXTURE_cache_populate(void *vedata, Object *ob)
+{
+ PAINT_TEXTURE_PassList *psl = ((PAINT_TEXTURE_Data *)vedata)->psl;
+ PAINT_TEXTURE_StorageList *stl = ((PAINT_TEXTURE_Data *)vedata)->stl;
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+
+ UNUSED_VARS(psl, stl);
+
+ if ((ob->type == OB_MESH) && (draw_ctx->obact == ob)) {
+ /* Get geometry cache */
+ const Mesh *me = ob->data;
+ Scene *scene = draw_ctx->scene;
+ const bool use_surface = DRW_object_is_mode_shade(ob) == true;
+ const bool use_material_slots = (scene->toolsettings->imapaint.mode == IMAGEPAINT_MODE_MATERIAL);
+ bool ok = false;
+
+ if (use_surface) {
+ if (me->mloopuv != NULL) {
+ if (use_material_slots) {
+ struct Gwn_Batch **geom_array = me->totcol ? DRW_cache_mesh_surface_texpaint_get(ob) : NULL;
+ if ((me->totcol == 0) || (geom_array == NULL)) {
+ struct Gwn_Batch *geom = DRW_cache_mesh_surface_get(ob);
+ DRW_shgroup_call_add(stl->g_data->shgroup_fallback, geom, ob->obmat);
+ ok = true;
+ }
+ else {
+ for (int i = 0; i < me->totcol; i++) {
+ if (stl->g_data->shgroup_image_array[i]) {
+ DRW_shgroup_call_add(stl->g_data->shgroup_image_array[i], geom_array[i], ob->obmat);
+ }
+ else {
+ DRW_shgroup_call_add(stl->g_data->shgroup_fallback, geom_array[i], ob->obmat);
+ }
+ ok = true;
+ }
+ }
+ }
+ else {
+ struct Gwn_Batch *geom = DRW_cache_mesh_surface_texpaint_single_get(ob);
+ if (geom && stl->g_data->shgroup_image_array[0]) {
+ DRW_shgroup_call_add(stl->g_data->shgroup_image_array[0], geom, ob->obmat);
+ ok = true;
+ }
+ }
+ }
+
+ if (!ok) {
+ struct Gwn_Batch *geom = DRW_cache_mesh_surface_get(ob);
+ DRW_shgroup_call_add(stl->g_data->shgroup_fallback, geom, ob->obmat);
+ }
+ }
+
+ /* Face Mask */
+ const bool use_face_sel = (me->editflag & ME_EDIT_PAINT_FACE_SEL) != 0;
+ if (use_face_sel) {
+ struct Gwn_Batch *geom;
+ /* Note: ideally selected faces wouldn't show interior wire. */
+ const bool use_wire = true;
+ geom = DRW_cache_mesh_edges_paint_overlay_get(ob, use_wire, use_face_sel);
+ DRW_shgroup_call_add(stl->g_data->lwire_shgrp, geom, ob->obmat);
+
+ geom = DRW_cache_mesh_faces_weight_overlay_get(ob);
+ DRW_shgroup_call_add(stl->g_data->face_shgrp, geom, ob->obmat);
+ }
+ }
+}
+
+/* Optional: Post-cache_populate callback */
+static void PAINT_TEXTURE_cache_finish(void *vedata)
+{
+ PAINT_TEXTURE_PassList *psl = ((PAINT_TEXTURE_Data *)vedata)->psl;
+ PAINT_TEXTURE_StorageList *stl = ((PAINT_TEXTURE_Data *)vedata)->stl;
+
+ /* Do something here! dependant on the objects gathered */
+ UNUSED_VARS(psl);
+
+ MEM_SAFE_FREE(stl->g_data->shgroup_image_array);
+}
+
+/* Draw time ! Control rendering pipeline from here */
+static void PAINT_TEXTURE_draw_scene(void *vedata)
+{
+ PAINT_TEXTURE_PassList *psl = ((PAINT_TEXTURE_Data *)vedata)->psl;
+ PAINT_TEXTURE_FramebufferList *fbl = ((PAINT_TEXTURE_Data *)vedata)->fbl;
+
+ /* Default framebuffer and texture */
+ DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
+ DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
+
+ UNUSED_VARS(fbl, dfbl, dtxl);
+
+ DRW_draw_pass(psl->image_faces);
+
+ DRW_draw_pass(psl->face_overlay);
+ DRW_draw_pass(psl->wire_overlay);
+}
+
+/* Cleanup when destroying the engine.
+ * This is not per viewport ! only when quitting blender.
+ * Mostly used for freeing shaders */
+static void PAINT_TEXTURE_engine_free(void)
+{
+ DRW_SHADER_FREE_SAFE(e_data.image_sh);
+ DRW_SHADER_FREE_SAFE(e_data.wire_overlay_shader);
+}
+
+/* Create collection settings here.
+ *
+ * Be sure to add this function there :
+ * source/blender/draw/DRW_engine.h
+ * source/blender/blenkernel/intern/layer.c
+ * source/blenderplayer/bad_level_call_stubs/stubs.c
+ *
+ * And relevant collection settings to :
+ * source/blender/makesrna/intern/rna_scene.c
+ * source/blender/blenkernel/intern/layer.c
+ */
+#if 0
+void PAINT_TEXTURE_collection_settings_create(CollectionEngineSettings *ces)
+{
+ BLI_assert(ces);
+ // BKE_collection_engine_property_add_int(ces, "my_bool_prop", false);
+ // BKE_collection_engine_property_add_int(ces, "my_int_prop", 0);
+ // BKE_collection_engine_property_add_float(ces, "my_float_prop", 0.0f);
+}
+#endif
+
+static const DrawEngineDataSize PAINT_TEXTURE_data_size = DRW_VIEWPORT_DATA_SIZE(PAINT_TEXTURE_Data);
+
+DrawEngineType draw_engine_paint_texture_type = {
+ NULL, NULL,
+ N_("PaintTextureMode"),
+ &PAINT_TEXTURE_data_size,
+ &PAINT_TEXTURE_engine_init,
+ &PAINT_TEXTURE_engine_free,
+ &PAINT_TEXTURE_cache_init,
+ &PAINT_TEXTURE_cache_populate,
+ &PAINT_TEXTURE_cache_finish,
+ NULL, /* draw_background but not needed by mode engines */
+ &PAINT_TEXTURE_draw_scene,
+ NULL,
+ NULL,
+};
diff --git a/source/blender/draw/modes/paint_vertex_mode.c b/source/blender/draw/modes/paint_vertex_mode.c
new file mode 100644
index 00000000000..835fefdee26
--- /dev/null
+++ b/source/blender/draw/modes/paint_vertex_mode.c
@@ -0,0 +1,217 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file blender/draw/modes/paint_vertex_mode.c
+ * \ingroup draw
+ */
+
+#include "DRW_engine.h"
+#include "DRW_render.h"
+
+/* If builtin shaders are needed */
+#include "GPU_shader.h"
+
+#include "draw_common.h"
+
+#include "draw_mode_engines.h"
+
+#include "DNA_mesh_types.h"
+
+extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
+extern struct GlobalsUboStorage ts; /* draw_common.c */
+
+extern char datatoc_paint_wire_vert_glsl[];
+extern char datatoc_paint_wire_frag_glsl[];
+extern char datatoc_common_globals_lib_glsl[];
+
+/* *********** LISTS *********** */
+
+typedef struct PAINT_VERTEX_PassList {
+ struct DRWPass *vcolor_faces;
+ struct DRWPass *wire_overlay;
+ struct DRWPass *face_overlay;
+} PAINT_VERTEX_PassList;
+
+typedef struct PAINT_VERTEX_StorageList {
+ struct PAINT_VERTEX_PrivateData *g_data;
+} PAINT_VERTEX_StorageList;
+
+typedef struct PAINT_VERTEX_Data {
+ void *engine_type; /* Required */
+ DRWViewportEmptyList *fbl;
+ DRWViewportEmptyList *txl;
+ PAINT_VERTEX_PassList *psl;
+ PAINT_VERTEX_StorageList *stl;
+} PAINT_VERTEX_Data;
+
+/* *********** STATIC *********** */
+
+static struct {
+ struct GPUShader *vcolor_face_shader;
+ struct GPUShader *wire_overlay_shader;
+ struct GPUShader *face_overlay_shader;
+} e_data = {NULL}; /* Engine data */
+
+typedef struct PAINT_VERTEX_PrivateData {
+ DRWShadingGroup *fvcolor_shgrp;
+ DRWShadingGroup *lwire_shgrp;
+ DRWShadingGroup *face_shgrp;
+} PAINT_VERTEX_PrivateData; /* Transient data */
+
+/* *********** FUNCTIONS *********** */
+
+static void PAINT_VERTEX_engine_init(void *UNUSED(vedata))
+{
+ if (!e_data.vcolor_face_shader) {
+ e_data.vcolor_face_shader = GPU_shader_get_builtin_shader(GPU_SHADER_SIMPLE_LIGHTING_SMOOTH_COLOR_ALPHA);
+ }
+
+ if (!e_data.wire_overlay_shader) {
+ e_data.wire_overlay_shader = DRW_shader_create_with_lib(
+ datatoc_paint_wire_vert_glsl, NULL,
+ datatoc_paint_wire_frag_glsl,
+ datatoc_common_globals_lib_glsl, "#define VERTEX_MODE\n");
+ }
+
+ if (!e_data.face_overlay_shader) {
+ e_data.face_overlay_shader = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
+ }
+}
+
+static float world_light;
+
+static void PAINT_VERTEX_cache_init(void *vedata)
+{
+ PAINT_VERTEX_PassList *psl = ((PAINT_VERTEX_Data *)vedata)->psl;
+ PAINT_VERTEX_StorageList *stl = ((PAINT_VERTEX_Data *)vedata)->stl;
+
+ if (!stl->g_data) {
+ /* Alloc transient pointers */
+ stl->g_data = MEM_mallocN(sizeof(*stl->g_data), __func__);
+ }
+
+ {
+ /* Create a pass */
+ psl->vcolor_faces = DRW_pass_create(
+ "Vert Color Pass",
+ DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS);
+
+ stl->g_data->fvcolor_shgrp = DRW_shgroup_create(e_data.vcolor_face_shader, psl->vcolor_faces);
+
+ static float light[3] = {-0.3f, 0.5f, 1.0f};
+ static float alpha = 1.0f;
+ DRW_shgroup_uniform_vec3(stl->g_data->fvcolor_shgrp, "light", light, 1);
+ DRW_shgroup_uniform_float(stl->g_data->fvcolor_shgrp, "alpha", &alpha, 1);
+ DRW_shgroup_uniform_float(stl->g_data->fvcolor_shgrp, "global", &world_light, 1);
+ }
+
+ {
+ psl->wire_overlay = DRW_pass_create(
+ "Wire Pass",
+ DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS);
+
+ stl->g_data->lwire_shgrp = DRW_shgroup_create(e_data.wire_overlay_shader, psl->wire_overlay);
+ }
+
+ {
+ psl->face_overlay = DRW_pass_create(
+ "Face Mask Pass",
+ DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_BLEND);
+
+ stl->g_data->face_shgrp = DRW_shgroup_create(e_data.face_overlay_shader, psl->face_overlay);
+
+ static float col[4] = {1.0f, 1.0f, 1.0f, 0.2f};
+ DRW_shgroup_uniform_vec4(stl->g_data->face_shgrp, "color", col, 1);
+ }
+}
+
+static void PAINT_VERTEX_cache_populate(void *vedata, Object *ob)
+{
+ PAINT_VERTEX_StorageList *stl = ((PAINT_VERTEX_Data *)vedata)->stl;
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+
+ if ((ob->type == OB_MESH) && (ob == draw_ctx->obact)) {
+ IDProperty *ces_mode_pw = BKE_layer_collection_engine_evaluated_get(ob, COLLECTION_MODE_PAINT_VERTEX, "");
+ const Mesh *me = ob->data;
+ const bool use_wire = BKE_collection_engine_property_value_get_bool(ces_mode_pw, "use_wire");
+ const bool use_surface = DRW_object_is_mode_shade(ob) == true;
+ const bool use_face_sel = (me->editflag & ME_EDIT_PAINT_FACE_SEL) != 0;
+ struct Gwn_Batch *geom;
+
+ world_light = BKE_collection_engine_property_value_get_bool(ces_mode_pw, "use_shading") ? 0.5f : 1.0f;
+
+ if (use_surface) {
+ geom = DRW_cache_mesh_surface_vert_colors_get(ob);
+ DRW_shgroup_call_add(stl->g_data->fvcolor_shgrp, geom, ob->obmat);
+ }
+
+ if (use_face_sel || use_wire) {
+ geom = DRW_cache_mesh_edges_paint_overlay_get(ob, use_wire, use_face_sel);
+ DRW_shgroup_call_add(stl->g_data->lwire_shgrp, geom, ob->obmat);
+ }
+
+ if (use_face_sel) {
+ geom = DRW_cache_mesh_faces_weight_overlay_get(ob);
+ DRW_shgroup_call_add(stl->g_data->face_shgrp, geom, ob->obmat);
+ }
+ }
+}
+
+static void PAINT_VERTEX_draw_scene(void *vedata)
+{
+ PAINT_VERTEX_PassList *psl = ((PAINT_VERTEX_Data *)vedata)->psl;
+
+ DRW_draw_pass(psl->vcolor_faces);
+ DRW_draw_pass(psl->face_overlay);
+ DRW_draw_pass(psl->wire_overlay);
+}
+
+static void PAINT_VERTEX_engine_free(void)
+{
+ DRW_SHADER_FREE_SAFE(e_data.wire_overlay_shader);
+}
+
+void PAINT_VERTEX_collection_settings_create(IDProperty *properties)
+{
+ BLI_assert(properties &&
+ properties->type == IDP_GROUP &&
+ properties->subtype == IDP_GROUP_SUB_MODE_PAINT_VERTEX);
+
+ BKE_collection_engine_property_add_bool(properties, "use_shading", true);
+ BKE_collection_engine_property_add_bool(properties, "use_wire", false);
+}
+
+static const DrawEngineDataSize PAINT_VERTEX_data_size = DRW_VIEWPORT_DATA_SIZE(PAINT_VERTEX_Data);
+
+DrawEngineType draw_engine_paint_vertex_type = {
+ NULL, NULL,
+ N_("PaintVertexMode"),
+ &PAINT_VERTEX_data_size,
+ &PAINT_VERTEX_engine_init,
+ &PAINT_VERTEX_engine_free,
+ &PAINT_VERTEX_cache_init,
+ &PAINT_VERTEX_cache_populate,
+ NULL,
+ NULL,
+ &PAINT_VERTEX_draw_scene,
+ NULL,
+ NULL,
+};
diff --git a/source/blender/draw/modes/paint_weight_mode.c b/source/blender/draw/modes/paint_weight_mode.c
new file mode 100644
index 00000000000..3cc2ad63ed4
--- /dev/null
+++ b/source/blender/draw/modes/paint_weight_mode.c
@@ -0,0 +1,255 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file blender/draw/modes/paint_weight_mode.c
+ * \ingroup draw
+ */
+
+#include "DRW_engine.h"
+#include "DRW_render.h"
+
+/* If builtin shaders are needed */
+#include "GPU_shader.h"
+
+#include "draw_common.h"
+
+#include "draw_mode_engines.h"
+
+#include "DNA_mesh_types.h"
+
+#include "BKE_mesh.h"
+
+extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
+extern struct GlobalsUboStorage ts; /* draw_common.c */
+
+extern char datatoc_paint_wire_vert_glsl[];
+extern char datatoc_paint_wire_frag_glsl[];
+extern char datatoc_paint_vert_frag_glsl[];
+extern char datatoc_common_globals_lib_glsl[];
+
+/* *********** LISTS *********** */
+
+typedef struct PAINT_WEIGHT_PassList {
+ struct DRWPass *weight_faces;
+ struct DRWPass *wire_overlay;
+ struct DRWPass *face_overlay;
+ struct DRWPass *vert_overlay;
+} PAINT_WEIGHT_PassList;
+
+typedef struct PAINT_WEIGHT_StorageList {
+ struct PAINT_WEIGHT_PrivateData *g_data;
+} PAINT_WEIGHT_StorageList;
+
+typedef struct PAINT_WEIGHT_Data {
+ void *engine_type;
+ DRWViewportEmptyList *fbl;
+ DRWViewportEmptyList *txl;
+ PAINT_WEIGHT_PassList *psl;
+ PAINT_WEIGHT_StorageList *stl;
+} PAINT_WEIGHT_Data;
+
+/* *********** STATIC *********** */
+
+static struct {
+ struct GPUShader *weight_face_shader;
+ struct GPUShader *wire_overlay_shader;
+ struct GPUShader *face_overlay_shader;
+ struct GPUShader *vert_overlay_shader;
+ int actdef;
+} e_data = {NULL}; /* Engine data */
+
+typedef struct PAINT_WEIGHT_PrivateData {
+ DRWShadingGroup *fweights_shgrp;
+ DRWShadingGroup *lwire_shgrp;
+ DRWShadingGroup *face_shgrp;
+ DRWShadingGroup *vert_shgrp;
+} PAINT_WEIGHT_PrivateData;
+
+/* *********** FUNCTIONS *********** */
+
+static void PAINT_WEIGHT_engine_init(void *UNUSED(vedata))
+{
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+
+ if (e_data.actdef != draw_ctx->obact->actdef) {
+ e_data.actdef = draw_ctx->obact->actdef;
+
+ BKE_mesh_batch_cache_dirty(draw_ctx->obact->data, BKE_MESH_BATCH_DIRTY_ALL);
+ }
+
+ if (!e_data.weight_face_shader) {
+ e_data.weight_face_shader = GPU_shader_get_builtin_shader(GPU_SHADER_SIMPLE_LIGHTING_SMOOTH_COLOR_ALPHA);
+ }
+
+ if (!e_data.wire_overlay_shader) {
+ e_data.wire_overlay_shader = DRW_shader_create_with_lib(
+ datatoc_paint_wire_vert_glsl, NULL,
+ datatoc_paint_wire_frag_glsl,
+ datatoc_common_globals_lib_glsl, "#define WEIGHT_MODE\n");
+ }
+
+ if (!e_data.face_overlay_shader) {
+ e_data.face_overlay_shader = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
+ }
+
+ if (!e_data.vert_overlay_shader) {
+ e_data.vert_overlay_shader = DRW_shader_create_with_lib(
+ datatoc_paint_wire_vert_glsl, NULL,
+ datatoc_paint_vert_frag_glsl,
+ datatoc_common_globals_lib_glsl, NULL);
+ }
+}
+
+static float world_light;
+
+static void PAINT_WEIGHT_cache_init(void *vedata)
+{
+ PAINT_WEIGHT_PassList *psl = ((PAINT_WEIGHT_Data *)vedata)->psl;
+ PAINT_WEIGHT_StorageList *stl = ((PAINT_WEIGHT_Data *)vedata)->stl;
+
+ if (!stl->g_data) {
+ /* Alloc transient pointers */
+ stl->g_data = MEM_mallocN(sizeof(*stl->g_data), __func__);
+ }
+
+ {
+ /* Create a pass */
+ psl->weight_faces = DRW_pass_create(
+ "Weight Pass",
+ DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS);
+
+ stl->g_data->fweights_shgrp = DRW_shgroup_create(e_data.weight_face_shader, psl->weight_faces);
+
+ static float light[3] = {-0.3f, 0.5f, 1.0f};
+ static float alpha = 1.0f;
+ DRW_shgroup_uniform_vec3(stl->g_data->fweights_shgrp, "light", light, 1);
+ DRW_shgroup_uniform_float(stl->g_data->fweights_shgrp, "alpha", &alpha, 1);
+ DRW_shgroup_uniform_float(stl->g_data->fweights_shgrp, "global", &world_light, 1);
+ }
+
+ {
+ psl->wire_overlay = DRW_pass_create(
+ "Wire Pass",
+ DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS);
+
+ stl->g_data->lwire_shgrp = DRW_shgroup_create(e_data.wire_overlay_shader, psl->wire_overlay);
+ }
+
+ {
+ psl->face_overlay = DRW_pass_create(
+ "Face Mask Pass",
+ DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_BLEND);
+
+ stl->g_data->face_shgrp = DRW_shgroup_create(e_data.face_overlay_shader, psl->face_overlay);
+
+ static float col[4] = {1.0f, 1.0f, 1.0f, 0.2f};
+ DRW_shgroup_uniform_vec4(stl->g_data->face_shgrp, "color", col, 1);
+ }
+
+ {
+ psl->vert_overlay = DRW_pass_create(
+ "Vert Mask Pass",
+ DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS);
+
+ stl->g_data->vert_shgrp = DRW_shgroup_create(e_data.vert_overlay_shader, psl->vert_overlay);
+ }
+}
+
+static void PAINT_WEIGHT_cache_populate(void *vedata, Object *ob)
+{
+ PAINT_WEIGHT_StorageList *stl = ((PAINT_WEIGHT_Data *)vedata)->stl;
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+
+ if ((ob->type == OB_MESH) && (ob == draw_ctx->obact)) {
+ IDProperty *ces_mode_pw = BKE_layer_collection_engine_evaluated_get(ob, COLLECTION_MODE_PAINT_WEIGHT, "");
+ const Mesh *me = ob->data;
+ const bool use_wire = BKE_collection_engine_property_value_get_bool(ces_mode_pw, "use_wire");
+ const bool use_surface = DRW_object_is_mode_shade(ob) == true;
+ const bool use_face_sel = (me->editflag & ME_EDIT_PAINT_FACE_SEL) != 0;
+ const bool use_vert_sel = (me->editflag & ME_EDIT_PAINT_VERT_SEL) != 0;
+ struct Gwn_Batch *geom;
+
+ world_light = BKE_collection_engine_property_value_get_bool(ces_mode_pw, "use_shading") ? 0.5f : 1.0f;
+
+ if (use_surface) {
+ geom = DRW_cache_mesh_surface_weights_get(ob);
+ DRW_shgroup_call_add(stl->g_data->fweights_shgrp, geom, ob->obmat);
+ }
+
+ if (use_face_sel || use_wire) {
+ geom = DRW_cache_mesh_edges_paint_overlay_get(ob, use_wire, use_face_sel);
+ DRW_shgroup_call_add(stl->g_data->lwire_shgrp, geom, ob->obmat);
+ }
+
+ if (use_face_sel) {
+ geom = DRW_cache_mesh_faces_weight_overlay_get(ob);
+ DRW_shgroup_call_add(stl->g_data->face_shgrp, geom, ob->obmat);
+ }
+
+ if (use_vert_sel) {
+ geom = DRW_cache_mesh_verts_weight_overlay_get(ob);
+ DRW_shgroup_call_add(stl->g_data->vert_shgrp, geom, ob->obmat);
+ }
+ }
+}
+
+static void PAINT_WEIGHT_draw_scene(void *vedata)
+{
+ PAINT_WEIGHT_PassList *psl = ((PAINT_WEIGHT_Data *)vedata)->psl;
+
+ DRW_draw_pass(psl->weight_faces);
+ DRW_draw_pass(psl->face_overlay);
+ DRW_draw_pass(psl->wire_overlay);
+ DRW_draw_pass(psl->vert_overlay);
+}
+
+static void PAINT_WEIGHT_engine_free(void)
+{
+ DRW_SHADER_FREE_SAFE(e_data.wire_overlay_shader);
+ DRW_SHADER_FREE_SAFE(e_data.vert_overlay_shader);
+}
+
+void PAINT_WEIGHT_collection_settings_create(IDProperty *properties)
+{
+ BLI_assert(properties &&
+ properties->type == IDP_GROUP &&
+ properties->subtype == IDP_GROUP_SUB_MODE_PAINT_WEIGHT);
+
+ BKE_collection_engine_property_add_bool(properties, "use_shading", true);
+ BKE_collection_engine_property_add_bool(properties, "use_wire", false);
+}
+
+static const DrawEngineDataSize PAINT_WEIGHT_data_size = DRW_VIEWPORT_DATA_SIZE(PAINT_WEIGHT_Data);
+
+DrawEngineType draw_engine_paint_weight_type = {
+ NULL, NULL,
+ N_("PaintWeightMode"),
+ &PAINT_WEIGHT_data_size,
+ &PAINT_WEIGHT_engine_init,
+ &PAINT_WEIGHT_engine_free,
+ &PAINT_WEIGHT_cache_init,
+ &PAINT_WEIGHT_cache_populate,
+ NULL,
+ NULL,
+ &PAINT_WEIGHT_draw_scene,
+ NULL,
+ NULL,
+};
diff --git a/source/blender/draw/modes/particle_mode.c b/source/blender/draw/modes/particle_mode.c
new file mode 100644
index 00000000000..0d0758971d5
--- /dev/null
+++ b/source/blender/draw/modes/particle_mode.c
@@ -0,0 +1,265 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file blender/draw/modes/particle_mode.c
+ * \ingroup draw
+ */
+
+#include "DRW_engine.h"
+#include "DRW_render.h"
+
+/* If builtin shaders are needed */
+#include "GPU_shader.h"
+
+#include "draw_common.h"
+
+#include "draw_mode_engines.h"
+
+/* *********** LISTS *********** */
+/* All lists are per viewport specific datas.
+ * They are all free when viewport changes engines
+ * or is free itself. Use PARTICLE_engine_init() to
+ * initialize most of them and PARTICLE_cache_init()
+ * for PARTICLE_PassList */
+
+typedef struct PARTICLE_PassList {
+ /* Declare all passes here and init them in
+ * PARTICLE_cache_init().
+ * Only contains (DRWPass *) */
+ struct DRWPass *pass;
+} PARTICLE_PassList;
+
+typedef struct PARTICLE_FramebufferList {
+ /* Contains all framebuffer objects needed by this engine.
+ * Only contains (GPUFrameBuffer *) */
+ struct GPUFrameBuffer *fb;
+} PARTICLE_FramebufferList;
+
+typedef struct PARTICLE_TextureList {
+ /* Contains all framebuffer textures / utility textures
+ * needed by this engine. Only viewport specific textures
+ * (not per object). Only contains (GPUTexture *) */
+ struct GPUTexture *texture;
+} PARTICLE_TextureList;
+
+typedef struct PARTICLE_StorageList {
+ /* Contains any other memory block that the engine needs.
+ * Only directly MEM_(m/c)allocN'ed blocks because they are
+ * free with MEM_freeN() when viewport is freed.
+ * (not per object) */
+ struct CustomStruct *block;
+ struct PARTICLE_PrivateData *g_data;
+} PARTICLE_StorageList;
+
+typedef struct PARTICLE_Data {
+ /* Struct returned by DRW_viewport_engine_data_ensure.
+ * If you don't use one of these, just make it a (void *) */
+ // void *fbl;
+ void *engine_type; /* Required */
+ PARTICLE_FramebufferList *fbl;
+ PARTICLE_TextureList *txl;
+ PARTICLE_PassList *psl;
+ PARTICLE_StorageList *stl;
+} PARTICLE_Data;
+
+/* *********** STATIC *********** */
+
+static struct {
+ /* Custom shaders :
+ * Add sources to source/blender/draw/modes/shaders
+ * init in PARTICLE_engine_init();
+ * free in PARTICLE_engine_free(); */
+ struct GPUShader *custom_shader;
+} e_data = {NULL}; /* Engine data */
+
+typedef struct PARTICLE_PrivateData {
+ /* This keeps the references of the shading groups for
+ * easy access in PARTICLE_cache_populate() */
+ DRWShadingGroup *group;
+} PARTICLE_PrivateData; /* Transient data */
+
+/* *********** FUNCTIONS *********** */
+
+/* Init Textures, Framebuffers, Storage and Shaders.
+ * It is called for every frames.
+ * (Optional) */
+static void PARTICLE_engine_init(void *vedata)
+{
+ PARTICLE_TextureList *txl = ((PARTICLE_Data *)vedata)->txl;
+ PARTICLE_FramebufferList *fbl = ((PARTICLE_Data *)vedata)->fbl;
+ PARTICLE_StorageList *stl = ((PARTICLE_Data *)vedata)->stl;
+
+ UNUSED_VARS(txl, fbl, stl);
+
+ /* Init Framebuffers like this: order is attachment order (for color texs) */
+ /*
+ * DRWFboTexture tex[2] = {{&txl->depth, DRW_TEX_DEPTH_24, 0},
+ * {&txl->color, DRW_TEX_RGBA_8, DRW_TEX_FILTER}};
+ */
+
+ /* DRW_framebuffer_init takes care of checking if
+ * the framebuffer is valid and has the right size*/
+ /*
+ * float *viewport_size = DRW_viewport_size_get();
+ * DRW_framebuffer_init(&fbl->occlude_wire_fb,
+ * (int)viewport_size[0], (int)viewport_size[1],
+ * tex, 2);
+ */
+
+ if (!e_data.custom_shader) {
+ e_data.custom_shader = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
+ }
+}
+
+/* Here init all passes and shading groups
+ * Assume that all Passes are NULL */
+static void PARTICLE_cache_init(void *vedata)
+{
+ PARTICLE_PassList *psl = ((PARTICLE_Data *)vedata)->psl;
+ PARTICLE_StorageList *stl = ((PARTICLE_Data *)vedata)->stl;
+
+ if (!stl->g_data) {
+ /* Alloc transient pointers */
+ stl->g_data = MEM_mallocN(sizeof(*stl->g_data), __func__);
+ }
+
+ {
+ /* Create a pass */
+ DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_BLEND | DRW_STATE_WIRE;
+ psl->pass = DRW_pass_create("My Pass", state);
+
+ /* Create a shadingGroup using a function in draw_common.c or custom one */
+ /*
+ * stl->g_data->group = shgroup_dynlines_uniform_color(psl->pass, ts.colorWire);
+ * -- or --
+ * stl->g_data->group = DRW_shgroup_create(e_data.custom_shader, psl->pass);
+ */
+ stl->g_data->group = DRW_shgroup_create(e_data.custom_shader, psl->pass);
+
+ /* Uniforms need a pointer to it's value so be sure it's accessible at
+ * any given time (i.e. use static vars) */
+ static float color[4] = {0.2f, 0.5f, 0.3f, 1.0};
+ DRW_shgroup_uniform_vec4(stl->g_data->group, "color", color, 1);
+ }
+
+}
+
+/* Add geometry to shadingGroups. Execute for each objects */
+static void PARTICLE_cache_populate(void *vedata, Object *ob)
+{
+ PARTICLE_PassList *psl = ((PARTICLE_Data *)vedata)->psl;
+ PARTICLE_StorageList *stl = ((PARTICLE_Data *)vedata)->stl;
+
+ UNUSED_VARS(psl, stl);
+
+ if (ob->type == OB_MESH) {
+ /* Get geometry cache */
+ struct Gwn_Batch *geom = DRW_cache_mesh_surface_get(ob);
+
+ /* Add geom to a shading group */
+ DRW_shgroup_call_add(stl->g_data->group, geom, ob->obmat);
+ }
+}
+
+/* Optional: Post-cache_populate callback */
+static void PARTICLE_cache_finish(void *vedata)
+{
+ PARTICLE_PassList *psl = ((PARTICLE_Data *)vedata)->psl;
+ PARTICLE_StorageList *stl = ((PARTICLE_Data *)vedata)->stl;
+
+ /* Do something here! dependant on the objects gathered */
+ UNUSED_VARS(psl, stl);
+}
+
+/* Draw time ! Control rendering pipeline from here */
+static void PARTICLE_draw_scene(void *vedata)
+{
+
+ PARTICLE_PassList *psl = ((PARTICLE_Data *)vedata)->psl;
+ PARTICLE_FramebufferList *fbl = ((PARTICLE_Data *)vedata)->fbl;
+
+ /* Default framebuffer and texture */
+ DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
+ DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
+
+ UNUSED_VARS(fbl, dfbl, dtxl);
+
+ /* Show / hide entire passes, swap framebuffers ... whatever you fancy */
+ /*
+ * DRW_framebuffer_texture_detach(dtxl->depth);
+ * DRW_framebuffer_bind(fbl->custom_fb);
+ * DRW_draw_pass(psl->pass);
+ * DRW_framebuffer_texture_attach(dfbl->default_fb, dtxl->depth, 0, 0);
+ * DRW_framebuffer_bind(dfbl->default_fb);
+ */
+
+ /* ... or just render passes on default framebuffer. */
+ DRW_draw_pass(psl->pass);
+
+ /* If you changed framebuffer, double check you rebind
+ * the default one with its textures attached before finishing */
+}
+
+/* Cleanup when destroying the engine.
+ * This is not per viewport ! only when quitting blender.
+ * Mostly used for freeing shaders */
+static void PARTICLE_engine_free(void)
+{
+ // DRW_SHADER_FREE_SAFE(custom_shader);
+}
+
+/* Create collection settings here.
+ *
+ * Be sure to add this function there :
+ * source/blender/draw/DRW_engine.h
+ * source/blender/blenkernel/intern/layer.c
+ * source/blenderplayer/bad_level_call_stubs/stubs.c
+ *
+ * And relevant collection settings to :
+ * source/blender/makesrna/intern/rna_scene.c
+ * source/blender/blenkernel/intern/layer.c
+ */
+#if 0
+void PARTICLE_collection_settings_create(CollectionEngineSettings *ces)
+{
+ BLI_assert(ces);
+ // BKE_collection_engine_property_add_int(ces, "my_bool_prop", false);
+ // BKE_collection_engine_property_add_int(ces, "my_int_prop", 0);
+ // BKE_collection_engine_property_add_float(ces, "my_float_prop", 0.0f);
+}
+#endif
+
+static const DrawEngineDataSize PARTICLE_data_size = DRW_VIEWPORT_DATA_SIZE(PARTICLE_Data);
+
+DrawEngineType draw_engine_particle_type = {
+ NULL, NULL,
+ N_("ParticleMode"),
+ &PARTICLE_data_size,
+ &PARTICLE_engine_init,
+ &PARTICLE_engine_free,
+ &PARTICLE_cache_init,
+ &PARTICLE_cache_populate,
+ &PARTICLE_cache_finish,
+ NULL, /* draw_background but not needed by mode engines */
+ &PARTICLE_draw_scene,
+ NULL,
+ NULL,
+};
diff --git a/source/blender/draw/modes/pose_mode.c b/source/blender/draw/modes/pose_mode.c
new file mode 100644
index 00000000000..749c3e71368
--- /dev/null
+++ b/source/blender/draw/modes/pose_mode.c
@@ -0,0 +1,201 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file blender/draw/modes/pose_mode.c
+ * \ingroup draw
+ */
+
+#include "DRW_engine.h"
+#include "DRW_render.h"
+
+/* If builtin shaders are needed */
+#include "GPU_shader.h"
+
+#include "draw_common.h"
+
+#include "draw_mode_engines.h"
+
+extern GlobalsUboStorage ts;
+
+/* *********** LISTS *********** */
+/* All lists are per viewport specific datas.
+ * They are all free when viewport changes engines
+ * or is free itself. Use POSE_engine_init() to
+ * initialize most of them and POSE_cache_init()
+ * for POSE_PassList */
+
+typedef struct POSE_PassList {
+ struct DRWPass *bone_solid;
+ struct DRWPass *bone_wire;
+ struct DRWPass *bone_envelope;
+ struct DRWPass *relationship;
+} POSE_PassList;
+
+typedef struct POSE_StorageList {
+ struct POSE_PrivateData *g_data;
+} POSE_StorageList;
+
+typedef struct POSE_Data {
+ void *engine_type;
+ DRWViewportEmptyList *fbl;
+ DRWViewportEmptyList *txl;
+ POSE_PassList *psl;
+ POSE_StorageList *stl;
+} POSE_Data;
+
+/* *********** STATIC *********** */
+
+typedef struct POSE_PrivateData {
+ DRWShadingGroup *relationship_lines;
+} POSE_PrivateData; /* Transient data */
+
+/* *********** FUNCTIONS *********** */
+
+/* Here init all passes and shading groups
+ * Assume that all Passes are NULL */
+static void POSE_cache_init(void *vedata)
+{
+ POSE_PassList *psl = ((POSE_Data *)vedata)->psl;
+ POSE_StorageList *stl = ((POSE_Data *)vedata)->stl;
+
+ if (!stl->g_data) {
+ /* Alloc transient pointers */
+ stl->g_data = MEM_mallocN(sizeof(*stl->g_data), __func__);
+ }
+
+ {
+ /* Solid bones */
+ DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS;
+ psl->bone_solid = DRW_pass_create("Bone Solid Pass", state);
+ }
+
+ {
+ /* Wire bones */
+ DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_BLEND;
+ psl->bone_wire = DRW_pass_create("Bone Wire Pass", state);
+ }
+
+ {
+ /* distance outline around envelope bones */
+ DRWState state = DRW_STATE_ADDITIVE | DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_LESS | DRW_STATE_BLEND;
+ psl->bone_envelope = DRW_pass_create("Bone Envelope Outline Pass", state);
+ }
+
+ {
+ /* Non Meshes Pass (Camera, empties, lamps ...) */
+ DRWState state =
+ DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS |
+ DRW_STATE_BLEND | DRW_STATE_WIRE;
+ psl->relationship = DRW_pass_create("Bone Relationship Pass", state);
+
+ /* Relationship Lines */
+ stl->g_data->relationship_lines = shgroup_dynlines_uniform_color(psl->relationship, ts.colorWire);
+ DRW_shgroup_state_enable(stl->g_data->relationship_lines, DRW_STATE_STIPPLE_3);
+ }
+}
+
+/* Add geometry to shadingGroups. Execute for each objects */
+static void POSE_cache_populate(void *vedata, Object *ob)
+{
+ POSE_PassList *psl = ((POSE_Data *)vedata)->psl;
+ POSE_StorageList *stl = ((POSE_Data *)vedata)->stl;
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+
+ /* In the future this will allow us to implement face manipulators,
+ * and similar functionalities. For now we handle only pose bones. */
+
+ if (ob->type == OB_ARMATURE) {
+ if (DRW_pose_mode_armature(ob, draw_ctx->obact)) {
+ DRW_shgroup_armature_pose(
+ ob, psl->bone_solid, psl->bone_wire, psl->bone_envelope,
+ stl->g_data->relationship_lines);
+ }
+ }
+}
+
+/**
+ * Return true if armature should be handled by the pose mode engine.
+ */
+bool DRW_pose_mode_armature(Object *ob, Object *active_ob)
+{
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+
+ /* Pode armature is handled by pose mode engine. */
+ if ((ob == active_ob) && ((draw_ctx->object_mode & OB_MODE_POSE) != 0)) {
+ return true;
+ }
+
+ /* Armature parent is also handled by pose mode engine. */
+ if ((active_ob != NULL) && ((draw_ctx->object_mode & OB_MODE_WEIGHT_PAINT) != 0)) {
+ if (ob == draw_ctx->object_pose) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+/* Draw time ! Control rendering pipeline from here */
+static void POSE_draw_scene(void *vedata)
+{
+ POSE_PassList *psl = ((POSE_Data *)vedata)->psl;
+
+ DRW_draw_pass(psl->bone_envelope);
+ DRW_draw_pass(psl->bone_wire);
+ DRW_draw_pass(psl->bone_solid);
+ DRW_draw_pass(psl->relationship);
+}
+
+/* Create collection settings here.
+ *
+ * Be sure to add this function there :
+ * source/blender/draw/DRW_engine.h
+ * source/blender/blenkernel/intern/layer.c
+ * source/blenderplayer/bad_level_call_stubs/stubs.c
+ *
+ * And relevant collection settings to :
+ * source/blender/makesrna/intern/rna_scene.c
+ * source/blender/blenkernel/intern/layer.c
+ */
+#if 0
+void POSE_collection_settings_create(CollectionEngineSettings *ces)
+{
+ BLI_assert(ces);
+ // BKE_collection_engine_property_add_int(ces, "foo", 37);
+}
+#endif
+
+static const DrawEngineDataSize POSE_data_size = DRW_VIEWPORT_DATA_SIZE(POSE_Data);
+
+DrawEngineType draw_engine_pose_type = {
+ NULL, NULL,
+ N_("PoseMode"),
+ &POSE_data_size,
+ NULL,
+ NULL,
+ &POSE_cache_init,
+ &POSE_cache_populate,
+ NULL,
+ NULL,
+ &POSE_draw_scene,
+ NULL,
+ NULL,
+};
diff --git a/source/blender/draw/modes/sculpt_mode.c b/source/blender/draw/modes/sculpt_mode.c
new file mode 100644
index 00000000000..d8c5bae522b
--- /dev/null
+++ b/source/blender/draw/modes/sculpt_mode.c
@@ -0,0 +1,306 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file blender/draw/modes/sculpt_mode.c
+ * \ingroup draw
+ */
+
+#include "DRW_engine.h"
+#include "DRW_render.h"
+
+#include "DNA_object_types.h"
+#include "DNA_mesh_types.h"
+#include "DNA_meshdata_types.h"
+
+#include "BKE_pbvh.h"
+#include "BKE_paint.h"
+
+#include "DEG_depsgraph.h"
+
+/* If builtin shaders are needed */
+#include "GPU_shader.h"
+#include "GPU_matrix.h"
+
+#include "draw_common.h"
+
+#include "draw_mode_engines.h"
+
+/* *********** LISTS *********** */
+/* All lists are per viewport specific datas.
+ * They are all free when viewport changes engines
+ * or is free itself. Use SCULPT_engine_init() to
+ * initialize most of them and SCULPT_cache_init()
+ * for SCULPT_PassList */
+
+typedef struct SCULPT_PassList {
+ /* Declare all passes here and init them in
+ * SCULPT_cache_init().
+ * Only contains (DRWPass *) */
+ struct DRWPass *pass;
+} SCULPT_PassList;
+
+typedef struct SCULPT_FramebufferList {
+ /* Contains all framebuffer objects needed by this engine.
+ * Only contains (GPUFrameBuffer *) */
+ struct GPUFrameBuffer *fb;
+} SCULPT_FramebufferList;
+
+typedef struct SCULPT_TextureList {
+ /* Contains all framebuffer textures / utility textures
+ * needed by this engine. Only viewport specific textures
+ * (not per object). Only contains (GPUTexture *) */
+ struct GPUTexture *texture;
+} SCULPT_TextureList;
+
+typedef struct SCULPT_StorageList {
+ /* Contains any other memory block that the engine needs.
+ * Only directly MEM_(m/c)allocN'ed blocks because they are
+ * free with MEM_freeN() when viewport is freed.
+ * (not per object) */
+ struct CustomStruct *block;
+ struct SCULPT_PrivateData *g_data;
+} SCULPT_StorageList;
+
+typedef struct SCULPT_Data {
+ /* Struct returned by DRW_viewport_engine_data_ensure.
+ * If you don't use one of these, just make it a (void *) */
+ // void *fbl;
+ void *engine_type; /* Required */
+ SCULPT_FramebufferList *fbl;
+ SCULPT_TextureList *txl;
+ SCULPT_PassList *psl;
+ SCULPT_StorageList *stl;
+} SCULPT_Data;
+
+/* *********** STATIC *********** */
+
+static struct {
+ /* Custom shaders :
+ * Add sources to source/blender/draw/modes/shaders
+ * init in SCULPT_engine_init();
+ * free in SCULPT_engine_free(); */
+ struct GPUShader *shader_flat;
+ struct GPUShader *shader_smooth;
+} e_data = {NULL}; /* Engine data */
+
+typedef struct SCULPT_PrivateData {
+ /* This keeps the references of the shading groups for
+ * easy access in SCULPT_cache_populate() */
+ DRWShadingGroup *group_flat;
+ DRWShadingGroup *group_smooth;
+} SCULPT_PrivateData; /* Transient data */
+
+/* *********** FUNCTIONS *********** */
+
+/* Init Textures, Framebuffers, Storage and Shaders.
+ * It is called for every frames.
+ * (Optional) */
+static void SCULPT_engine_init(void *vedata)
+{
+ SCULPT_TextureList *txl = ((SCULPT_Data *)vedata)->txl;
+ SCULPT_FramebufferList *fbl = ((SCULPT_Data *)vedata)->fbl;
+ SCULPT_StorageList *stl = ((SCULPT_Data *)vedata)->stl;
+
+ UNUSED_VARS(txl, fbl, stl);
+
+ /* Init Framebuffers like this: order is attachment order (for color texs) */
+ /*
+ * DRWFboTexture tex[2] = {{&txl->depth, DRW_TEX_DEPTH_24, 0},
+ * {&txl->color, DRW_TEX_RGBA_8, DRW_TEX_FILTER}};
+ */
+
+ /* DRW_framebuffer_init takes care of checking if
+ * the framebuffer is valid and has the right size*/
+ /*
+ * float *viewport_size = DRW_viewport_size_get();
+ * DRW_framebuffer_init(&fbl->occlude_wire_fb,
+ * (int)viewport_size[0], (int)viewport_size[1],
+ * tex, 2);
+ */
+
+ if (!e_data.shader_flat) {
+ e_data.shader_flat = GPU_shader_get_builtin_shader(GPU_SHADER_3D_FLAT_COLOR);
+ }
+ if (!e_data.shader_smooth) {
+ e_data.shader_smooth = GPU_shader_get_builtin_shader(GPU_SHADER_3D_SMOOTH_COLOR);
+ }
+}
+
+/* Here init all passes and shading groups
+ * Assume that all Passes are NULL */
+static void SCULPT_cache_init(void *vedata)
+{
+ SCULPT_PassList *psl = ((SCULPT_Data *)vedata)->psl;
+ SCULPT_StorageList *stl = ((SCULPT_Data *)vedata)->stl;
+
+ if (!stl->g_data) {
+ /* Alloc transient pointers */
+ stl->g_data = MEM_mallocN(sizeof(*stl->g_data), __func__);
+ }
+
+ {
+ /* Create a pass */
+ DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL | DRW_STATE_MULTIPLY;
+ psl->pass = DRW_pass_create("Sculpt Pass", state);
+
+ /* Create a shadingGroup using a function in draw_common.c or custom one */
+ /*
+ * stl->g_data->group = shgroup_dynlines_uniform_color(psl->pass, ts.colorWire);
+ * -- or --
+ * stl->g_data->group = DRW_shgroup_create(e_data.custom_shader, psl->pass);
+ */
+ stl->g_data->group_flat = DRW_shgroup_create(e_data.shader_flat, psl->pass);
+ stl->g_data->group_smooth = DRW_shgroup_create(e_data.shader_smooth, psl->pass);
+ }
+}
+
+static bool object_is_flat(const Object *ob)
+{
+ Mesh *me = ob->data;
+ if (me->mpoly && me->mpoly[0].flag & ME_SMOOTH) {
+ return false;
+ }
+ else {
+ return true;
+ }
+}
+
+/* Add geometry to shadingGroups. Execute for each objects */
+static void SCULPT_cache_populate(void *vedata, Object *ob)
+{
+ SCULPT_PassList *psl = ((SCULPT_Data *)vedata)->psl;
+ SCULPT_StorageList *stl = ((SCULPT_Data *)vedata)->stl;
+
+ UNUSED_VARS(psl, stl);
+
+ if (ob->type == OB_MESH) {
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ EvaluationContext eval_ctx;
+
+ CTX_data_eval_ctx(draw_ctx->evil_C, &eval_ctx);
+
+ if (ob->sculpt && (ob == draw_ctx->obact)) {
+
+ /* XXX, needed for dyntopo-undo (which clears).
+ * probably depsgraph should handlle? in 2.7x getting derived-mesh does this (mesh_build_data) */
+ if (ob->sculpt->pbvh == NULL) {
+ /* create PBVH immediately (would be created on the fly too,
+ * but this avoids waiting on first stroke) */
+ Scene *scene = draw_ctx->scene;
+
+ BKE_sculpt_update_mesh_elements(&eval_ctx, scene, scene->toolsettings->sculpt, ob, false, false);
+ }
+
+ PBVH *pbvh = ob->sculpt->pbvh;
+ if (pbvh && pbvh_has_mask(pbvh)) {
+ /* Get geometry cache */
+ DRWShadingGroup *shgroup = object_is_flat(ob) ? stl->g_data->group_flat : stl->g_data->group_smooth;
+
+ /* Add geom to a shading group */
+ DRW_shgroup_call_sculpt_add(shgroup, ob, ob->obmat);
+ }
+ }
+ }
+}
+
+/* Optional: Post-cache_populate callback */
+static void SCULPT_cache_finish(void *vedata)
+{
+ SCULPT_PassList *psl = ((SCULPT_Data *)vedata)->psl;
+ SCULPT_StorageList *stl = ((SCULPT_Data *)vedata)->stl;
+
+ /* Do something here! dependant on the objects gathered */
+ UNUSED_VARS(psl, stl);
+}
+
+/* Draw time ! Control rendering pipeline from here */
+static void SCULPT_draw_scene(void *vedata)
+{
+ SCULPT_PassList *psl = ((SCULPT_Data *)vedata)->psl;
+ SCULPT_FramebufferList *fbl = ((SCULPT_Data *)vedata)->fbl;
+
+ /* Default framebuffer and texture */
+ DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
+ DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
+
+ UNUSED_VARS(fbl, dfbl, dtxl);
+
+ /* Show / hide entire passes, swap framebuffers ... whatever you fancy */
+ /*
+ * DRW_framebuffer_texture_detach(dtxl->depth);
+ * DRW_framebuffer_bind(fbl->custom_fb);
+ * DRW_draw_pass(psl->pass);
+ * DRW_framebuffer_texture_attach(dfbl->default_fb, dtxl->depth, 0, 0);
+ * DRW_framebuffer_bind(dfbl->default_fb);
+ */
+
+ /* ... or just render passes on default framebuffer. */
+ DRW_draw_pass(psl->pass);
+
+ /* If you changed framebuffer, double check you rebind
+ * the default one with its textures attached before finishing */
+}
+
+/* Cleanup when destroying the engine.
+ * This is not per viewport ! only when quitting blender.
+ * Mostly used for freeing shaders */
+static void SCULPT_engine_free(void)
+{
+ // DRW_SHADER_FREE_SAFE(custom_shader);
+}
+
+/* Create collection settings here.
+ *
+ * Be sure to add this function there :
+ * source/blender/draw/DRW_engine.h
+ * source/blender/blenkernel/intern/layer.c
+ * source/blenderplayer/bad_level_call_stubs/stubs.c
+ *
+ * And relevant collection settings to :
+ * source/blender/makesrna/intern/rna_scene.c
+ * source/blender/blenkernel/intern/layer.c
+ */
+#if 0
+void SCULPT_collection_settings_create(CollectionEngineSettings *ces)
+{
+ BLI_assert(ces);
+ // BKE_collection_engine_property_add_int(ces, "my_bool_prop", false);
+ // BKE_collection_engine_property_add_int(ces, "my_int_prop", 0);
+ // BKE_collection_engine_property_add_float(ces, "my_float_prop", 0.0f);
+}
+#endif
+
+static const DrawEngineDataSize SCULPT_data_size = DRW_VIEWPORT_DATA_SIZE(SCULPT_Data);
+
+DrawEngineType draw_engine_sculpt_type = {
+ NULL, NULL,
+ N_("SculptMode"),
+ &SCULPT_data_size,
+ &SCULPT_engine_init,
+ &SCULPT_engine_free,
+ &SCULPT_cache_init,
+ &SCULPT_cache_populate,
+ &SCULPT_cache_finish,
+ NULL, /* draw_background but not needed by mode engines */
+ &SCULPT_draw_scene,
+ NULL,
+ NULL,
+};
diff --git a/source/blender/draw/modes/shaders/common_fxaa_lib.glsl b/source/blender/draw/modes/shaders/common_fxaa_lib.glsl
new file mode 100644
index 00000000000..8158437b943
--- /dev/null
+++ b/source/blender/draw/modes/shaders/common_fxaa_lib.glsl
@@ -0,0 +1,678 @@
+//----------------------------------------------------------------------------------
+// File: es3-kepler\FXAA/FXAA3_11.h
+// SDK Version: v3.00
+// Email: gameworks@nvidia.com
+// Site: http://developer.nvidia.com/
+//
+// Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+// * Neither the name of NVIDIA CORPORATION nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+//----------------------------------------------------------------------------------
+
+/* BLENDER MODIFICATIONS:
+ *
+ * - (#B1#) Compute luma on the fly using BT. 709 luma function
+ * - (#B2#) main function instead of #include, due to lack of
+ * ARB_shading_language_include in 3.3
+ * - (#B3#) version and extension directives
+ * - removed "FXAA Console" algorithm support and shader parameters
+ * - removed HLSL support shims
+ * - (#B4#) change luma sampling to compute, not use A channel
+ * (this also removes GATHER4_ALPHA support)
+ * - removed all the console shaders (only remaining algorithm is "FXAA PC
+ * Quality")
+ *
+ * Note that this file doesn't follow the coding style guidelines.
+ */
+
+/*============================================================================
+ FXAA QUALITY - TUNING KNOBS
+------------------------------------------------------------------------------
+NOTE the other tuning knobs are now in the shader function inputs!
+============================================================================*/
+#ifndef FXAA_QUALITY__PRESET
+ //
+ // Choose the quality preset.
+ // This needs to be compiled into the shader as it effects code.
+ // Best option to include multiple presets is to
+ // in each shader define the preset, then include this file.
+ //
+ // OPTIONS
+ // -----------------------------------------------------------------------
+ // 10 to 15 - default medium dither (10=fastest, 15=highest quality)
+ // 20 to 29 - less dither, more expensive (20=fastest, 29=highest quality)
+ // 39 - no dither, very expensive
+ //
+ // NOTES
+ // -----------------------------------------------------------------------
+ // 12 = slightly faster then FXAA 3.9 and higher edge quality (default)
+ // 13 = about same speed as FXAA 3.9 and better than 12
+ // 23 = closest to FXAA 3.9 visually and performance wise
+ // _ = the lowest digit is directly related to performance
+ // _ = the highest digit is directly related to style
+ //
+ #define FXAA_QUALITY__PRESET 12
+#endif
+
+/*============================================================================
+
+ FXAA QUALITY - PRESETS
+
+============================================================================*/
+
+/*============================================================================
+ FXAA QUALITY - MEDIUM DITHER PRESETS
+============================================================================*/
+#if (FXAA_QUALITY__PRESET == 10)
+ #define FXAA_QUALITY__PS 3
+ #define FXAA_QUALITY__P0 1.5
+ #define FXAA_QUALITY__P1 3.0
+ #define FXAA_QUALITY__P2 12.0
+#endif
+/*--------------------------------------------------------------------------*/
+#if (FXAA_QUALITY__PRESET == 11)
+ #define FXAA_QUALITY__PS 4
+ #define FXAA_QUALITY__P0 1.0
+ #define FXAA_QUALITY__P1 1.5
+ #define FXAA_QUALITY__P2 3.0
+ #define FXAA_QUALITY__P3 12.0
+#endif
+/*--------------------------------------------------------------------------*/
+#if (FXAA_QUALITY__PRESET == 12)
+ #define FXAA_QUALITY__PS 5
+ #define FXAA_QUALITY__P0 1.0
+ #define FXAA_QUALITY__P1 1.5
+ #define FXAA_QUALITY__P2 2.0
+ #define FXAA_QUALITY__P3 4.0
+ #define FXAA_QUALITY__P4 12.0
+#endif
+/*--------------------------------------------------------------------------*/
+#if (FXAA_QUALITY__PRESET == 13)
+ #define FXAA_QUALITY__PS 6
+ #define FXAA_QUALITY__P0 1.0
+ #define FXAA_QUALITY__P1 1.5
+ #define FXAA_QUALITY__P2 2.0
+ #define FXAA_QUALITY__P3 2.0
+ #define FXAA_QUALITY__P4 4.0
+ #define FXAA_QUALITY__P5 12.0
+#endif
+/*--------------------------------------------------------------------------*/
+#if (FXAA_QUALITY__PRESET == 14)
+ #define FXAA_QUALITY__PS 7
+ #define FXAA_QUALITY__P0 1.0
+ #define FXAA_QUALITY__P1 1.5
+ #define FXAA_QUALITY__P2 2.0
+ #define FXAA_QUALITY__P3 2.0
+ #define FXAA_QUALITY__P4 2.0
+ #define FXAA_QUALITY__P5 4.0
+ #define FXAA_QUALITY__P6 12.0
+#endif
+/*--------------------------------------------------------------------------*/
+#if (FXAA_QUALITY__PRESET == 15)
+ #define FXAA_QUALITY__PS 8
+ #define FXAA_QUALITY__P0 1.0
+ #define FXAA_QUALITY__P1 1.5
+ #define FXAA_QUALITY__P2 2.0
+ #define FXAA_QUALITY__P3 2.0
+ #define FXAA_QUALITY__P4 2.0
+ #define FXAA_QUALITY__P5 2.0
+ #define FXAA_QUALITY__P6 4.0
+ #define FXAA_QUALITY__P7 12.0
+#endif
+
+/*============================================================================
+ FXAA QUALITY - LOW DITHER PRESETS
+============================================================================*/
+#if (FXAA_QUALITY__PRESET == 20)
+ #define FXAA_QUALITY__PS 3
+ #define FXAA_QUALITY__P0 1.5
+ #define FXAA_QUALITY__P1 2.0
+ #define FXAA_QUALITY__P2 8.0
+#endif
+/*--------------------------------------------------------------------------*/
+#if (FXAA_QUALITY__PRESET == 21)
+ #define FXAA_QUALITY__PS 4
+ #define FXAA_QUALITY__P0 1.0
+ #define FXAA_QUALITY__P1 1.5
+ #define FXAA_QUALITY__P2 2.0
+ #define FXAA_QUALITY__P3 8.0
+#endif
+/*--------------------------------------------------------------------------*/
+#if (FXAA_QUALITY__PRESET == 22)
+ #define FXAA_QUALITY__PS 5
+ #define FXAA_QUALITY__P0 1.0
+ #define FXAA_QUALITY__P1 1.5
+ #define FXAA_QUALITY__P2 2.0
+ #define FXAA_QUALITY__P3 2.0
+ #define FXAA_QUALITY__P4 8.0
+#endif
+/*--------------------------------------------------------------------------*/
+#if (FXAA_QUALITY__PRESET == 23)
+ #define FXAA_QUALITY__PS 6
+ #define FXAA_QUALITY__P0 1.0
+ #define FXAA_QUALITY__P1 1.5
+ #define FXAA_QUALITY__P2 2.0
+ #define FXAA_QUALITY__P3 2.0
+ #define FXAA_QUALITY__P4 2.0
+ #define FXAA_QUALITY__P5 8.0
+#endif
+/*--------------------------------------------------------------------------*/
+#if (FXAA_QUALITY__PRESET == 24)
+ #define FXAA_QUALITY__PS 7
+ #define FXAA_QUALITY__P0 1.0
+ #define FXAA_QUALITY__P1 1.5
+ #define FXAA_QUALITY__P2 2.0
+ #define FXAA_QUALITY__P3 2.0
+ #define FXAA_QUALITY__P4 2.0
+ #define FXAA_QUALITY__P5 3.0
+ #define FXAA_QUALITY__P6 8.0
+#endif
+/*--------------------------------------------------------------------------*/
+#if (FXAA_QUALITY__PRESET == 25)
+ #define FXAA_QUALITY__PS 8
+ #define FXAA_QUALITY__P0 1.0
+ #define FXAA_QUALITY__P1 1.5
+ #define FXAA_QUALITY__P2 2.0
+ #define FXAA_QUALITY__P3 2.0
+ #define FXAA_QUALITY__P4 2.0
+ #define FXAA_QUALITY__P5 2.0
+ #define FXAA_QUALITY__P6 4.0
+ #define FXAA_QUALITY__P7 8.0
+#endif
+/*--------------------------------------------------------------------------*/
+#if (FXAA_QUALITY__PRESET == 26)
+ #define FXAA_QUALITY__PS 9
+ #define FXAA_QUALITY__P0 1.0
+ #define FXAA_QUALITY__P1 1.5
+ #define FXAA_QUALITY__P2 2.0
+ #define FXAA_QUALITY__P3 2.0
+ #define FXAA_QUALITY__P4 2.0
+ #define FXAA_QUALITY__P5 2.0
+ #define FXAA_QUALITY__P6 2.0
+ #define FXAA_QUALITY__P7 4.0
+ #define FXAA_QUALITY__P8 8.0
+#endif
+/*--------------------------------------------------------------------------*/
+#if (FXAA_QUALITY__PRESET == 27)
+ #define FXAA_QUALITY__PS 10
+ #define FXAA_QUALITY__P0 1.0
+ #define FXAA_QUALITY__P1 1.5
+ #define FXAA_QUALITY__P2 2.0
+ #define FXAA_QUALITY__P3 2.0
+ #define FXAA_QUALITY__P4 2.0
+ #define FXAA_QUALITY__P5 2.0
+ #define FXAA_QUALITY__P6 2.0
+ #define FXAA_QUALITY__P7 2.0
+ #define FXAA_QUALITY__P8 4.0
+ #define FXAA_QUALITY__P9 8.0
+#endif
+/*--------------------------------------------------------------------------*/
+#if (FXAA_QUALITY__PRESET == 28)
+ #define FXAA_QUALITY__PS 11
+ #define FXAA_QUALITY__P0 1.0
+ #define FXAA_QUALITY__P1 1.5
+ #define FXAA_QUALITY__P2 2.0
+ #define FXAA_QUALITY__P3 2.0
+ #define FXAA_QUALITY__P4 2.0
+ #define FXAA_QUALITY__P5 2.0
+ #define FXAA_QUALITY__P6 2.0
+ #define FXAA_QUALITY__P7 2.0
+ #define FXAA_QUALITY__P8 2.0
+ #define FXAA_QUALITY__P9 4.0
+ #define FXAA_QUALITY__P10 8.0
+#endif
+/*--------------------------------------------------------------------------*/
+#if (FXAA_QUALITY__PRESET == 29)
+ #define FXAA_QUALITY__PS 12
+ #define FXAA_QUALITY__P0 1.0
+ #define FXAA_QUALITY__P1 1.5
+ #define FXAA_QUALITY__P2 2.0
+ #define FXAA_QUALITY__P3 2.0
+ #define FXAA_QUALITY__P4 2.0
+ #define FXAA_QUALITY__P5 2.0
+ #define FXAA_QUALITY__P6 2.0
+ #define FXAA_QUALITY__P7 2.0
+ #define FXAA_QUALITY__P8 2.0
+ #define FXAA_QUALITY__P9 2.0
+ #define FXAA_QUALITY__P10 4.0
+ #define FXAA_QUALITY__P11 8.0
+#endif
+
+/*============================================================================
+ FXAA QUALITY - EXTREME QUALITY
+============================================================================*/
+#if (FXAA_QUALITY__PRESET == 39)
+ #define FXAA_QUALITY__PS 12
+ #define FXAA_QUALITY__P0 1.0
+ #define FXAA_QUALITY__P1 1.0
+ #define FXAA_QUALITY__P2 1.0
+ #define FXAA_QUALITY__P3 1.0
+ #define FXAA_QUALITY__P4 1.0
+ #define FXAA_QUALITY__P5 1.5
+ #define FXAA_QUALITY__P6 2.0
+ #define FXAA_QUALITY__P7 2.0
+ #define FXAA_QUALITY__P8 2.0
+ #define FXAA_QUALITY__P9 2.0
+ #define FXAA_QUALITY__P10 4.0
+ #define FXAA_QUALITY__P11 8.0
+#endif
+
+#define FxaaSat(x) clamp(x, 0.0, 1.0)
+
+#ifdef FXAA_ALPHA
+
+#define FxaaTexTop(t, p) textureLod(t, p, 0.0).aaaa
+#define FxaaTexOff(t, p, o, r) textureLodOffset(t, p, 0.0, o).aaaa
+#define FxaaLuma(rgba) rgba.a
+
+#else
+
+#define FxaaTexTop(t, p) textureLod(t, p, 0.0)
+#define FxaaTexOff(t, p, o, r) textureLodOffset(t, p, 0.0, o)
+
+/* (#B1#) */
+float FxaaLuma(vec4 rgba) {
+ // note: sqrt because the sampled colors are in a linear colorspace!
+ // this approximates a perceptual conversion, which is good enough for the
+ // algorithm
+ return sqrt(dot(rgba.rgb, vec3(0.2126, 0.7152, 0.0722)));
+}
+
+#endif
+
+/*============================================================================
+
+ FXAA3 QUALITY - PC
+
+============================================================================*/
+/*--------------------------------------------------------------------------*/
+vec4 FxaaPixelShader(
+ //
+ // Use noperspective interpolation here (turn off perspective interpolation).
+ // {xy} = center of pixel
+ vec2 pos,
+ //
+ // Input color texture.
+ // {rgb_} = color in linear or perceptual color space
+ sampler2D tex,
+ //
+ // Only used on FXAA Quality.
+ // This must be from a constant/uniform.
+ // {x_} = 1.0/screenWidthInPixels
+ // {_y} = 1.0/screenHeightInPixels
+ vec2 fxaaQualityRcpFrame,
+ //
+ // Only used on FXAA Quality.
+ // This used to be the FXAA_QUALITY__SUBPIX define.
+ // It is here now to allow easier tuning.
+ // Choose the amount of sub-pixel aliasing removal.
+ // This can effect sharpness.
+ // 1.00 - upper limit (softer)
+ // 0.75 - default amount of filtering
+ // 0.50 - lower limit (sharper, less sub-pixel aliasing removal)
+ // 0.25 - almost off
+ // 0.00 - completely off
+ float fxaaQualitySubpix,
+ //
+ // Only used on FXAA Quality.
+ // This used to be the FXAA_QUALITY__EDGE_THRESHOLD define.
+ // It is here now to allow easier tuning.
+ // The minimum amount of local contrast required to apply algorithm.
+ // 0.333 - too little (faster)
+ // 0.250 - low quality
+ // 0.166 - default
+ // 0.125 - high quality
+ // 0.063 - overkill (slower)
+ float fxaaQualityEdgeThreshold,
+ //
+ // Only used on FXAA Quality.
+ // This used to be the FXAA_QUALITY__EDGE_THRESHOLD_MIN define.
+ // It is here now to allow easier tuning.
+ // Trims the algorithm from processing darks.
+ // 0.0833 - upper limit (default, the start of visible unfiltered edges)
+ // 0.0625 - high quality (faster)
+ // 0.0312 - visible limit (slower)
+ float fxaaQualityEdgeThresholdMin
+) {
+/*--------------------------------------------------------------------------*/
+ vec2 posM;
+ posM.x = pos.x;
+ posM.y = pos.y;
+ vec4 rgbyM = FxaaTexTop(tex, posM);
+ float lumaM = FxaaLuma(rgbyM); // (#B4#)
+ float lumaS = FxaaLuma(FxaaTexOff(tex, posM, ivec2( 0, 1), fxaaQualityRcpFrame.xy));
+ float lumaE = FxaaLuma(FxaaTexOff(tex, posM, ivec2( 1, 0), fxaaQualityRcpFrame.xy));
+ float lumaN = FxaaLuma(FxaaTexOff(tex, posM, ivec2( 0,-1), fxaaQualityRcpFrame.xy));
+ float lumaW = FxaaLuma(FxaaTexOff(tex, posM, ivec2(-1, 0), fxaaQualityRcpFrame.xy));
+/*--------------------------------------------------------------------------*/
+ float maxSM = max(lumaS, lumaM);
+ float minSM = min(lumaS, lumaM);
+ float maxESM = max(lumaE, maxSM);
+ float minESM = min(lumaE, minSM);
+ float maxWN = max(lumaN, lumaW);
+ float minWN = min(lumaN, lumaW);
+ float rangeMax = max(maxWN, maxESM);
+ float rangeMin = min(minWN, minESM);
+ float rangeMaxScaled = rangeMax * fxaaQualityEdgeThreshold;
+ float range = rangeMax - rangeMin;
+ float rangeMaxClamped = max(fxaaQualityEdgeThresholdMin, rangeMaxScaled);
+ bool earlyExit = range < rangeMaxClamped;
+/*--------------------------------------------------------------------------*/
+ if(earlyExit) {
+ return rgbyM;
+ }
+/*--------------------------------------------------------------------------*/
+ float lumaNW = FxaaLuma(FxaaTexOff(tex, posM, ivec2(-1,-1), fxaaQualityRcpFrame.xy));
+ float lumaSE = FxaaLuma(FxaaTexOff(tex, posM, ivec2( 1, 1), fxaaQualityRcpFrame.xy));
+ float lumaNE = FxaaLuma(FxaaTexOff(tex, posM, ivec2( 1,-1), fxaaQualityRcpFrame.xy));
+ float lumaSW = FxaaLuma(FxaaTexOff(tex, posM, ivec2(-1, 1), fxaaQualityRcpFrame.xy));
+/*--------------------------------------------------------------------------*/
+ float lumaNS = lumaN + lumaS;
+ float lumaWE = lumaW + lumaE;
+ float subpixRcpRange = 1.0/range;
+ float subpixNSWE = lumaNS + lumaWE;
+ float edgeHorz1 = (-2.0 * lumaM) + lumaNS;
+ float edgeVert1 = (-2.0 * lumaM) + lumaWE;
+/*--------------------------------------------------------------------------*/
+ float lumaNESE = lumaNE + lumaSE;
+ float lumaNWNE = lumaNW + lumaNE;
+ float edgeHorz2 = (-2.0 * lumaE) + lumaNESE;
+ float edgeVert2 = (-2.0 * lumaN) + lumaNWNE;
+/*--------------------------------------------------------------------------*/
+ float lumaNWSW = lumaNW + lumaSW;
+ float lumaSWSE = lumaSW + lumaSE;
+ float edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2);
+ float edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2);
+ float edgeHorz3 = (-2.0 * lumaW) + lumaNWSW;
+ float edgeVert3 = (-2.0 * lumaS) + lumaSWSE;
+ float edgeHorz = abs(edgeHorz3) + edgeHorz4;
+ float edgeVert = abs(edgeVert3) + edgeVert4;
+/*--------------------------------------------------------------------------*/
+ float subpixNWSWNESE = lumaNWSW + lumaNESE;
+ float lengthSign = fxaaQualityRcpFrame.x;
+ bool horzSpan = edgeHorz >= edgeVert;
+ float subpixA = subpixNSWE * 2.0 + subpixNWSWNESE;
+/*--------------------------------------------------------------------------*/
+ if(!horzSpan) lumaN = lumaW;
+ if(!horzSpan) lumaS = lumaE;
+ if(horzSpan) lengthSign = fxaaQualityRcpFrame.y;
+ float subpixB = (subpixA * (1.0/12.0)) - lumaM;
+/*--------------------------------------------------------------------------*/
+ float gradientN = lumaN - lumaM;
+ float gradientS = lumaS - lumaM;
+ float lumaNN = lumaN + lumaM;
+ float lumaSS = lumaS + lumaM;
+ bool pairN = abs(gradientN) >= abs(gradientS);
+ float gradient = max(abs(gradientN), abs(gradientS));
+ if(pairN) lengthSign = -lengthSign;
+ float subpixC = FxaaSat(abs(subpixB) * subpixRcpRange);
+/*--------------------------------------------------------------------------*/
+ vec2 posB;
+ posB.x = posM.x;
+ posB.y = posM.y;
+ vec2 offNP;
+ offNP.x = (!horzSpan) ? 0.0 : fxaaQualityRcpFrame.x;
+ offNP.y = ( horzSpan) ? 0.0 : fxaaQualityRcpFrame.y;
+ if(!horzSpan) posB.x += lengthSign * 0.5;
+ if( horzSpan) posB.y += lengthSign * 0.5;
+/*--------------------------------------------------------------------------*/
+ vec2 posN;
+ posN.x = posB.x - offNP.x * FXAA_QUALITY__P0;
+ posN.y = posB.y - offNP.y * FXAA_QUALITY__P0;
+ vec2 posP;
+ posP.x = posB.x + offNP.x * FXAA_QUALITY__P0;
+ posP.y = posB.y + offNP.y * FXAA_QUALITY__P0;
+ float subpixD = ((-2.0)*subpixC) + 3.0;
+ float lumaEndN = FxaaLuma(FxaaTexTop(tex, posN));
+ float subpixE = subpixC * subpixC;
+ float lumaEndP = FxaaLuma(FxaaTexTop(tex, posP));
+/*--------------------------------------------------------------------------*/
+ if(!pairN) lumaNN = lumaSS;
+ float gradientScaled = gradient * 1.0/4.0;
+ float lumaMM = lumaM - lumaNN * 0.5;
+ float subpixF = subpixD * subpixE;
+ bool lumaMLTZero = lumaMM < 0.0;
+/*--------------------------------------------------------------------------*/
+ lumaEndN -= lumaNN * 0.5;
+ lumaEndP -= lumaNN * 0.5;
+ bool doneN = abs(lumaEndN) >= gradientScaled;
+ bool doneP = abs(lumaEndP) >= gradientScaled;
+ if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P1;
+ if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P1;
+ bool doneNP = (!doneN) || (!doneP);
+ if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P1;
+ if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P1;
+/*--------------------------------------------------------------------------*/
+ if(doneNP) {
+ if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
+ if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
+ if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
+ if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
+ doneN = abs(lumaEndN) >= gradientScaled;
+ doneP = abs(lumaEndP) >= gradientScaled;
+ if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P2;
+ if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P2;
+ doneNP = (!doneN) || (!doneP);
+ if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P2;
+ if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P2;
+/*--------------------------------------------------------------------------*/
+ #if (FXAA_QUALITY__PS > 3)
+ if(doneNP) {
+ if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
+ if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
+ if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
+ if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
+ doneN = abs(lumaEndN) >= gradientScaled;
+ doneP = abs(lumaEndP) >= gradientScaled;
+ if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P3;
+ if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P3;
+ doneNP = (!doneN) || (!doneP);
+ if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P3;
+ if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P3;
+/*--------------------------------------------------------------------------*/
+ #if (FXAA_QUALITY__PS > 4)
+ if(doneNP) {
+ if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
+ if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
+ if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
+ if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
+ doneN = abs(lumaEndN) >= gradientScaled;
+ doneP = abs(lumaEndP) >= gradientScaled;
+ if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P4;
+ if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P4;
+ doneNP = (!doneN) || (!doneP);
+ if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P4;
+ if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P4;
+/*--------------------------------------------------------------------------*/
+ #if (FXAA_QUALITY__PS > 5)
+ if(doneNP) {
+ if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
+ if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
+ if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
+ if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
+ doneN = abs(lumaEndN) >= gradientScaled;
+ doneP = abs(lumaEndP) >= gradientScaled;
+ if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P5;
+ if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P5;
+ doneNP = (!doneN) || (!doneP);
+ if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P5;
+ if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P5;
+/*--------------------------------------------------------------------------*/
+ #if (FXAA_QUALITY__PS > 6)
+ if(doneNP) {
+ if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
+ if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
+ if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
+ if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
+ doneN = abs(lumaEndN) >= gradientScaled;
+ doneP = abs(lumaEndP) >= gradientScaled;
+ if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P6;
+ if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P6;
+ doneNP = (!doneN) || (!doneP);
+ if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P6;
+ if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P6;
+/*--------------------------------------------------------------------------*/
+ #if (FXAA_QUALITY__PS > 7)
+ if(doneNP) {
+ if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
+ if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
+ if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
+ if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
+ doneN = abs(lumaEndN) >= gradientScaled;
+ doneP = abs(lumaEndP) >= gradientScaled;
+ if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P7;
+ if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P7;
+ doneNP = (!doneN) || (!doneP);
+ if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P7;
+ if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P7;
+/*--------------------------------------------------------------------------*/
+ #if (FXAA_QUALITY__PS > 8)
+ if(doneNP) {
+ if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
+ if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
+ if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
+ if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
+ doneN = abs(lumaEndN) >= gradientScaled;
+ doneP = abs(lumaEndP) >= gradientScaled;
+ if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P8;
+ if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P8;
+ doneNP = (!doneN) || (!doneP);
+ if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P8;
+ if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P8;
+/*--------------------------------------------------------------------------*/
+ #if (FXAA_QUALITY__PS > 9)
+ if(doneNP) {
+ if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
+ if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
+ if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
+ if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
+ doneN = abs(lumaEndN) >= gradientScaled;
+ doneP = abs(lumaEndP) >= gradientScaled;
+ if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P9;
+ if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P9;
+ doneNP = (!doneN) || (!doneP);
+ if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P9;
+ if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P9;
+/*--------------------------------------------------------------------------*/
+ #if (FXAA_QUALITY__PS > 10)
+ if(doneNP) {
+ if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
+ if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
+ if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
+ if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
+ doneN = abs(lumaEndN) >= gradientScaled;
+ doneP = abs(lumaEndP) >= gradientScaled;
+ if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P10;
+ if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P10;
+ doneNP = (!doneN) || (!doneP);
+ if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P10;
+ if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P10;
+/*--------------------------------------------------------------------------*/
+ #if (FXAA_QUALITY__PS > 11)
+ if(doneNP) {
+ if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
+ if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
+ if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
+ if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
+ doneN = abs(lumaEndN) >= gradientScaled;
+ doneP = abs(lumaEndP) >= gradientScaled;
+ if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P11;
+ if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P11;
+ doneNP = (!doneN) || (!doneP);
+ if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P11;
+ if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P11;
+/*--------------------------------------------------------------------------*/
+ #if (FXAA_QUALITY__PS > 12)
+ if(doneNP) {
+ if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
+ if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
+ if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
+ if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
+ doneN = abs(lumaEndN) >= gradientScaled;
+ doneP = abs(lumaEndP) >= gradientScaled;
+ if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P12;
+ if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P12;
+ doneNP = (!doneN) || (!doneP);
+ if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P12;
+ if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P12;
+/*--------------------------------------------------------------------------*/
+ }
+ #endif
+/*--------------------------------------------------------------------------*/
+ }
+ #endif
+/*--------------------------------------------------------------------------*/
+ }
+ #endif
+/*--------------------------------------------------------------------------*/
+ }
+ #endif
+/*--------------------------------------------------------------------------*/
+ }
+ #endif
+/*--------------------------------------------------------------------------*/
+ }
+ #endif
+/*--------------------------------------------------------------------------*/
+ }
+ #endif
+/*--------------------------------------------------------------------------*/
+ }
+ #endif
+/*--------------------------------------------------------------------------*/
+ }
+ #endif
+/*--------------------------------------------------------------------------*/
+ }
+ #endif
+/*--------------------------------------------------------------------------*/
+ }
+/*--------------------------------------------------------------------------*/
+ float dstN = posM.x - posN.x;
+ float dstP = posP.x - posM.x;
+ if(!horzSpan) dstN = posM.y - posN.y;
+ if(!horzSpan) dstP = posP.y - posM.y;
+/*--------------------------------------------------------------------------*/
+ bool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero;
+ float spanLength = (dstP + dstN);
+ bool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero;
+ float spanLengthRcp = 1.0/spanLength;
+/*--------------------------------------------------------------------------*/
+ bool directionN = dstN < dstP;
+ float dst = min(dstN, dstP);
+ bool goodSpan = directionN ? goodSpanN : goodSpanP;
+ float subpixG = subpixF * subpixF;
+ float pixelOffset = (dst * (-spanLengthRcp)) + 0.5;
+ float subpixH = subpixG * fxaaQualitySubpix;
+/*--------------------------------------------------------------------------*/
+ float pixelOffsetGood = goodSpan ? pixelOffset : 0.0;
+ float pixelOffsetSubpix = max(pixelOffsetGood, subpixH);
+ if(!horzSpan) posM.x += pixelOffsetSubpix * lengthSign;
+ if( horzSpan) posM.y += pixelOffsetSubpix * lengthSign;
+ return vec4(FxaaTexTop(tex, posM).xyz, lumaM);
+}
+/*==========================================================================*/
+
diff --git a/source/blender/draw/modes/shaders/common_globals_lib.glsl b/source/blender/draw/modes/shaders/common_globals_lib.glsl
new file mode 100644
index 00000000000..0c14c1e7db0
--- /dev/null
+++ b/source/blender/draw/modes/shaders/common_globals_lib.glsl
@@ -0,0 +1,72 @@
+
+/* keep in sync with GlobalsUboStorage */
+layout(std140) uniform globalsBlock {
+ vec4 colorWire;
+ vec4 colorWireEdit;
+ vec4 colorActive;
+ vec4 colorSelect;
+ vec4 colorTransform;
+ vec4 colorGroupActive;
+ vec4 colorGroupSelect;
+ vec4 colorGroup;
+ vec4 colorLibrarySelect;
+ vec4 colorLibrary;
+ vec4 colorLamp;
+ vec4 colorSpeaker;
+ vec4 colorCamera;
+ vec4 colorEmpty;
+ vec4 colorVertex;
+ vec4 colorVertexSelect;
+ vec4 colorEditMeshActive;
+ vec4 colorEdgeSelect;
+ vec4 colorEdgeSeam;
+ vec4 colorEdgeSharp;
+ vec4 colorEdgeCrease;
+ vec4 colorEdgeBWeight;
+ vec4 colorEdgeFaceSelect;
+ vec4 colorFace;
+ vec4 colorFaceSelect;
+ vec4 colorNormal;
+ vec4 colorVNormal;
+ vec4 colorLNormal;
+ vec4 colorFaceDot;
+
+ vec4 colorDeselect;
+ vec4 colorOutline;
+ vec4 colorLampNoAlpha;
+
+ vec4 colorBackground;
+
+ vec4 colorHandleFree;
+ vec4 colorHandleAuto;
+ vec4 colorHandleVect;
+ vec4 colorHandleAlign;
+ vec4 colorHandleAutoclamp;
+ vec4 colorHandleSelFree;
+ vec4 colorHandleSelAuto;
+ vec4 colorHandleSelVect;
+ vec4 colorHandleSelAlign;
+ vec4 colorHandleSelAutoclamp;
+ vec4 colorNurbUline;
+ vec4 colorNurbSelUline;
+ vec4 colorActiveSpline;
+
+ vec4 colorGrid;
+ vec4 colorGridEmphasise;
+ vec4 colorGridAxisX;
+ vec4 colorGridAxisY;
+ vec4 colorGridAxisZ;
+
+ float sizeLampCenter;
+ float sizeLampCircle;
+ float sizeLampCircleShadow;
+ float sizeVertex;
+ float sizeEdge;
+ float sizeEdgeFix;
+ float sizeFaceDot;
+
+ float gridDistance;
+ float gridResolution;
+ float gridSubdivisions;
+ float gridScale;
+};
diff --git a/source/blender/draw/modes/shaders/edit_curve_overlay_frag.glsl b/source/blender/draw/modes/shaders/edit_curve_overlay_frag.glsl
new file mode 100644
index 00000000000..e78462b6915
--- /dev/null
+++ b/source/blender/draw/modes/shaders/edit_curve_overlay_frag.glsl
@@ -0,0 +1,22 @@
+
+flat in int vertFlag;
+
+#define VERTEX_SELECTED (1 << 0)
+#define VERTEX_ACTIVE (1 << 1)
+
+out vec4 FragColor;
+
+void main()
+{
+ /* TODO: vertex size */
+
+ if ((vertFlag & VERTEX_SELECTED) != 0) {
+ FragColor = colorVertexSelect;
+ }
+ else if ((vertFlag & VERTEX_ACTIVE) != 0) {
+ FragColor = colorEditMeshActive;
+ }
+ else {
+ FragColor = colorVertex;
+ }
+}
diff --git a/source/blender/draw/modes/shaders/edit_curve_overlay_handle_geom.glsl b/source/blender/draw/modes/shaders/edit_curve_overlay_handle_geom.glsl
new file mode 100644
index 00000000000..419a25f91b4
--- /dev/null
+++ b/source/blender/draw/modes/shaders/edit_curve_overlay_handle_geom.glsl
@@ -0,0 +1,79 @@
+
+#define ACTIVE_NURB 1 << 7 /* Keep the same value of `ACTIVE_NURB` in `draw_cache_imp_curve.c` */
+
+layout(lines) in;
+layout(line_strip, max_vertices = 6) out;
+
+uniform vec2 viewportSize;
+
+flat in int vertFlag[];
+
+flat out vec4 finalColor;
+
+void main()
+{
+ /* TODO: vertex size */
+
+ vec4 v1 = gl_in[0].gl_Position;
+ vec4 v2 = gl_in[1].gl_Position;
+
+ int is_active_nurb = vertFlag[1] & ACTIVE_NURB;
+ int color_id = vertFlag[1] ^ is_active_nurb;
+
+ if (is_active_nurb != 0) {
+ /* draw the outline. */
+ vec2 v1_2 = v2.xy - v1.xy;
+ vec2 offset;
+
+ if (abs(v1_2.x * viewportSize.x) < abs(v1_2.y * viewportSize.y)) {
+ offset = vec2(2.0 / viewportSize.x, 0.0);
+ }
+ else {
+ offset = vec2(0.0, 2.0 / viewportSize.y);
+ }
+
+ finalColor = colorActiveSpline;
+
+ gl_Position = v1;
+ gl_Position.xy += offset * v1.w;
+ EmitVertex();
+
+ gl_Position = v2;
+ gl_Position.xy += offset * v2.w;
+ EmitVertex();
+
+ EndPrimitive();
+
+ gl_Position = v1;
+ gl_Position.xy -= offset * v1.w;
+ EmitVertex();
+
+ gl_Position = v2;
+ gl_Position.xy -= offset * v2.w;
+ EmitVertex();
+
+ EndPrimitive();
+ }
+
+ if (color_id == 0) finalColor = colorHandleFree;
+ else if (color_id == 1) finalColor = colorHandleAuto;
+ else if (color_id == 2) finalColor = colorHandleVect;
+ else if (color_id == 3) finalColor = colorHandleAlign;
+ else if (color_id == 4) finalColor = colorHandleAutoclamp;
+ else if (color_id == 5) finalColor = colorHandleSelFree;
+ else if (color_id == 6) finalColor = colorHandleSelAuto;
+ else if (color_id == 7) finalColor = colorHandleSelVect;
+ else if (color_id == 8) finalColor = colorHandleSelAlign;
+ else if (color_id == 9) finalColor = colorHandleSelAutoclamp;
+ else if (color_id == 10) finalColor = colorNurbUline;
+ else if (color_id == 11) finalColor = colorNurbSelUline;
+ else finalColor = colorVertexSelect;
+
+ gl_Position = v1;
+ EmitVertex();
+
+ gl_Position = v2;
+ EmitVertex();
+
+ EndPrimitive();
+}
diff --git a/source/blender/draw/modes/shaders/edit_curve_overlay_loosevert_vert.glsl b/source/blender/draw/modes/shaders/edit_curve_overlay_loosevert_vert.glsl
new file mode 100644
index 00000000000..9150ef8cd63
--- /dev/null
+++ b/source/blender/draw/modes/shaders/edit_curve_overlay_loosevert_vert.glsl
@@ -0,0 +1,39 @@
+
+/* Draw Curve Vertices */
+
+uniform mat4 ModelViewProjectionMatrix;
+uniform vec2 viewportSize;
+
+in vec3 pos;
+in int data;
+
+/* these are the same for all vertices
+ * and does not need interpolation */
+flat out int vertFlag;
+flat out int clipCase;
+
+/* See fragment shader */
+noperspective out vec4 eData1;
+flat out vec4 eData2;
+
+/* project to screen space */
+vec2 proj(vec4 pos)
+{
+ return (0.5 * (pos.xy / pos.w) + 0.5) * viewportSize;
+}
+
+void main()
+{
+ clipCase = 0;
+
+ vec4 pPos = ModelViewProjectionMatrix * vec4(pos, 1.0);
+
+ /* only vertex position 0 is used */
+ eData1 = eData2 = vec4(1e10);
+ eData2.zw = proj(pPos);
+
+ vertFlag = data;
+
+ gl_Position = pPos;
+ gl_PointSize = sizeVertex;
+}
diff --git a/source/blender/draw/modes/shaders/edit_lattice_overlay_frag.glsl b/source/blender/draw/modes/shaders/edit_lattice_overlay_frag.glsl
new file mode 100644
index 00000000000..e78462b6915
--- /dev/null
+++ b/source/blender/draw/modes/shaders/edit_lattice_overlay_frag.glsl
@@ -0,0 +1,22 @@
+
+flat in int vertFlag;
+
+#define VERTEX_SELECTED (1 << 0)
+#define VERTEX_ACTIVE (1 << 1)
+
+out vec4 FragColor;
+
+void main()
+{
+ /* TODO: vertex size */
+
+ if ((vertFlag & VERTEX_SELECTED) != 0) {
+ FragColor = colorVertexSelect;
+ }
+ else if ((vertFlag & VERTEX_ACTIVE) != 0) {
+ FragColor = colorEditMeshActive;
+ }
+ else {
+ FragColor = colorVertex;
+ }
+}
diff --git a/source/blender/draw/modes/shaders/edit_lattice_overlay_loosevert_vert.glsl b/source/blender/draw/modes/shaders/edit_lattice_overlay_loosevert_vert.glsl
new file mode 100644
index 00000000000..0cbc66a2b1f
--- /dev/null
+++ b/source/blender/draw/modes/shaders/edit_lattice_overlay_loosevert_vert.glsl
@@ -0,0 +1,39 @@
+
+/* Draw Lattice Vertices */
+
+uniform mat4 ModelViewProjectionMatrix;
+uniform vec2 viewportSize;
+
+in vec3 pos;
+in int data;
+
+/* these are the same for all vertices
+ * and does not need interpolation */
+flat out int vertFlag;
+flat out int clipCase;
+
+/* See fragment shader */
+noperspective out vec4 eData1;
+flat out vec4 eData2;
+
+/* project to screen space */
+vec2 proj(vec4 pos)
+{
+ return (0.5 * (pos.xy / pos.w) + 0.5) * viewportSize;
+}
+
+void main()
+{
+ clipCase = 0;
+
+ vec4 pPos = ModelViewProjectionMatrix * vec4(pos, 1.0);
+
+ /* only vertex position 0 is used */
+ eData1 = eData2 = vec4(1e10);
+ eData2.zw = proj(pPos);
+
+ vertFlag = data;
+
+ gl_PointSize = sizeVertex;
+ gl_Position = pPos;
+}
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_facedot_frag.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_facedot_frag.glsl
new file mode 100644
index 00000000000..07b36079884
--- /dev/null
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_facedot_frag.glsl
@@ -0,0 +1,19 @@
+
+flat in int isSelected;
+#ifdef VERTEX_FACING
+flat in float facing;
+#endif
+
+out vec4 FragColor;
+
+void main()
+{
+ if (isSelected != 0)
+ FragColor = colorFaceDot;
+ else
+ FragColor = colorWireEdit;
+
+#ifdef VERTEX_FACING
+ FragColor.a *= 1.0 - abs(facing) * 0.4;
+#endif
+}
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_facedot_vert.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_facedot_vert.glsl
new file mode 100644
index 00000000000..fa3934c4b77
--- /dev/null
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_facedot_vert.glsl
@@ -0,0 +1,31 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+
+in vec3 pos;
+in vec4 norAndFlag;
+
+flat out int isSelected;
+
+#ifdef VERTEX_FACING
+uniform mat4 ProjectionMatrix;
+uniform mat4 ModelViewMatrix;
+uniform mat3 NormalMatrix;
+
+flat out float facing;
+#endif
+
+void main()
+{
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
+ /* Bias Facedot Z position in clipspace. */
+ gl_Position.z -= 0.0002;
+ gl_PointSize = sizeFaceDot;
+ isSelected = int(norAndFlag.w);
+#ifdef VERTEX_FACING
+ vec3 view_normal = normalize(NormalMatrix * norAndFlag.xyz);
+ vec3 view_vec = (ProjectionMatrix[3][3] == 0.0)
+ ? normalize((ModelViewMatrix * vec4(pos, 1.0)).xyz)
+ : vec3(0.0, 0.0, 1.0);
+ facing = dot(view_vec, view_normal);
+#endif
+}
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_facefill_frag.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_facefill_frag.glsl
new file mode 100644
index 00000000000..23b794d9b8b
--- /dev/null
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_facefill_frag.glsl
@@ -0,0 +1,29 @@
+
+/* Solid Wirefram implementation
+ * Mike Erwin, Clément Foucault */
+
+/* This shader follows the principles of
+ * http://developer.download.nvidia.com/SDK/10/direct3d/Source/SolidWireframe/Doc/SolidWireframe.pdf */
+
+flat in vec4 faceColor;
+flat in int faceActive;
+
+out vec4 FragColor;
+
+const vec4 stipple_matrix[4] = vec4[4](
+ vec4(1.0, 0.0, 0.0, 0.0),
+ vec4(0.0, 0.0, 0.0, 0.0),
+ vec4(0.0, 0.0, 1.0, 0.0),
+ vec4(0.0, 0.0, 0.0, 0.0)
+);
+
+void main()
+{
+ FragColor = faceColor;
+
+ if (faceActive == 1) {
+ int x = int(gl_FragCoord.x) & 0x3; /* mod 4 */
+ int y = int(gl_FragCoord.y) & 0x3; /* mod 4 */
+ FragColor *= stipple_matrix[x][y];
+ }
+}
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_facefill_vert.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_facefill_vert.glsl
new file mode 100644
index 00000000000..3b9aa77306f
--- /dev/null
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_facefill_vert.glsl
@@ -0,0 +1,29 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+
+in vec3 pos;
+in ivec4 data;
+
+flat out vec4 faceColor;
+flat out int faceActive;
+
+#define FACE_ACTIVE (1 << 2)
+#define FACE_SELECTED (1 << 3)
+
+void main()
+{
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
+
+ if ((data.x & FACE_ACTIVE) != 0) {
+ faceColor = colorEditMeshActive;
+ faceActive = 1;
+ }
+ else if ((data.x & FACE_SELECTED) != 0) {
+ faceColor = colorFaceSelect;
+ faceActive = 0;
+ }
+ else {
+ faceColor = colorFace;
+ faceActive = 0;
+ }
+}
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl
new file mode 100644
index 00000000000..cf1051b70b3
--- /dev/null
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl
@@ -0,0 +1,212 @@
+
+/* Solid Wirefram implementation
+ * Mike Erwin, Clément Foucault */
+
+/* This shader follows the principles of
+ * http://developer.download.nvidia.com/SDK/10/direct3d/Source/SolidWireframe/Doc/SolidWireframe.pdf */
+
+/* This is not perfect. Only a subset of intel gpus are affected.
+ * This fix have some performance impact.
+ * TODO Refine the range to only affect GPUs. */
+
+uniform float faceAlphaMod;
+
+flat in vec3 edgesCrease;
+flat in vec3 edgesBweight;
+flat in vec4 faceColor;
+flat in ivec3 flag;
+flat in int clipCase;
+#ifdef VERTEX_SELECTION
+in vec3 vertexColor;
+#endif
+#ifdef VERTEX_FACING
+in float facing;
+#endif
+
+/* We use a vec4[2] interface to pass edge data
+ * (without fragmenting memory accesses)
+ *
+ * There are 2 cases :
+ *
+ * - Simple case : geometry shader return edge distances
+ * in the first 2 components of the first vec4.
+ * This needs noperspective interpolation.
+ * The rest is filled with vertex screen positions.
+ * eData2[0] actually contain v2
+ * eData2[1] actually contain v1
+ * eData2[2] actually contain v0
+ *
+ * - Hard case : two 2d edge corner are described by each
+ * vec4 as origin and direction. This is constant over
+ * the triangle and use to detect the correct case. */
+
+noperspective in vec2 eData1;
+flat in vec2 eData2[3];
+
+out vec4 FragColor;
+
+#define EDGE_EXISTS (1 << 0)
+#define EDGE_ACTIVE (1 << 1)
+#define EDGE_SELECTED (1 << 2)
+#define EDGE_SEAM (1 << 3)
+#define EDGE_SHARP (1 << 4)
+/* Vertex flag is shifted and combined with the edge flag */
+#define VERTEX_ACTIVE (1 << (0 + 8))
+#define VERTEX_SELECTED (1 << (1 + 8))
+#define FACE_ACTIVE (1 << (2 + 8))
+
+/* Style Parameters in pixel */
+
+/* Array to retrieve vert/edge indices */
+const ivec3 clipEdgeIdx[6] = ivec3[6](
+ ivec3(1, 0, 2),
+ ivec3(2, 0, 1),
+ ivec3(2, 1, 0),
+ ivec3(2, 1, 0),
+ ivec3(2, 0, 1),
+ ivec3(1, 0, 2)
+);
+
+const ivec3 clipPointIdx[6] = ivec3[6](
+ ivec3(0, 1, 2),
+ ivec3(0, 2, 1),
+ ivec3(0, 2, 1),
+ ivec3(1, 2, 0),
+ ivec3(1, 2, 0),
+ ivec3(2, 1, 0)
+);
+
+const vec4 stipple_matrix[4] = vec4[4](
+ vec4(1.0, 0.0, 0.0, 0.0),
+ vec4(0.0, 0.0, 0.0, 0.0),
+ vec4(0.0, 0.0, 1.0, 0.0),
+ vec4(0.0, 0.0, 0.0, 0.0)
+);
+
+void colorDist(vec4 color, float dist)
+{
+ FragColor = (dist < 0) ? color : FragColor;
+}
+
+float distToEdge(vec2 o, vec2 dir)
+{
+ vec2 af = gl_FragCoord.xy - o;
+ float daf = dot(dir, af);
+ return sqrt(abs(dot(af, af) - daf * daf));
+}
+
+#ifdef ANTI_ALIASING
+void colorDistEdge(vec4 color, float dist)
+{
+ FragColor = mix(color, FragColor, clamp(dist, 0.0, 1.0));
+}
+#else
+#define colorDistEdge colorDist
+#endif
+
+void main()
+{
+ vec3 e, p;
+
+ /* Step 1 : Computing Distances */
+
+ if (clipCase == 0) {
+ e.xy = eData1;
+
+ /* computing missing distance */
+ vec2 dir = normalize(eData2[2] - eData2[1]);
+ e.z = distToEdge(eData2[2], dir);
+
+ p.x = distance(eData2[2], gl_FragCoord.xy);
+ p.y = distance(eData2[1], gl_FragCoord.xy);
+ p.z = distance(eData2[0], gl_FragCoord.xy);
+ }
+ else {
+ ivec3 eidxs = clipEdgeIdx[clipCase - 1];
+ ivec3 pidxs = clipPointIdx[clipCase - 1];
+
+ e[eidxs.x] = distToEdge(eData1, eData2[0]);
+ e[eidxs.y] = distToEdge(eData2[1], eData2[2]);
+
+ /* Three edges visible cases */
+ if (clipCase == 1 || clipCase == 2 || clipCase == 4) {
+ e[eidxs.z] = distToEdge(eData1, normalize(eData2[1] - eData1));
+ p[pidxs.y] = distance(eData2[1], gl_FragCoord.xy);
+ }
+ else {
+ e[eidxs.z] = 1e10; /* off screen */
+ p[pidxs.y] = 1e10; /* off screen */
+ }
+
+ p[pidxs.x] = distance(eData1, gl_FragCoord.xy);
+ p[pidxs.z] = 1e10; /* off screen */
+ }
+
+ /* Step 2 : coloring (order dependant) */
+
+ /* First */
+ FragColor = faceColor;
+
+ if ((flag[0] & FACE_ACTIVE) != 0) {
+ int x = int(gl_FragCoord.x) & 0x3; /* mod 4 */
+ int y = int(gl_FragCoord.y) & 0x3; /* mod 4 */
+ FragColor *= stipple_matrix[x][y];
+ }
+ else {
+ FragColor.a *= faceAlphaMod;
+ }
+
+ /* Edges */
+ for (int v = 0; v < 3; ++v) {
+ if ((flag[v] & EDGE_EXISTS) != 0) {
+ /* Outer large edge */
+ float largeEdge = e[v] - sizeEdge * 3.0;
+
+ vec4 large_edge_color = vec4(0.0);
+ large_edge_color = ((flag[v] & EDGE_SHARP) != 0) ? colorEdgeSharp : large_edge_color;
+ large_edge_color = (edgesCrease[v] > 0.0) ? vec4(colorEdgeCrease.rgb, edgesCrease[v]) : large_edge_color;
+ large_edge_color = (edgesBweight[v] > 0.0) ? vec4(colorEdgeBWeight.rgb, edgesBweight[v]) : large_edge_color;
+ large_edge_color = ((flag[v] & EDGE_SEAM) != 0) ? colorEdgeSeam : large_edge_color;
+
+ if (large_edge_color.a != 0.0) {
+ colorDistEdge(large_edge_color, largeEdge);
+ }
+
+ /* Inner thin edge */
+ float innerEdge = e[v] - sizeEdge;
+#ifdef ANTI_ALIASING
+ innerEdge += 0.125;
+#endif
+
+#ifdef VERTEX_SELECTION
+ colorDistEdge(vec4(vertexColor, 1.0), innerEdge);
+#else
+ vec4 inner_edge_color = colorWireEdit;
+ inner_edge_color = ((flag[v] & EDGE_SELECTED) != 0) ? colorEdgeSelect : inner_edge_color;
+ inner_edge_color = ((flag[v] & EDGE_ACTIVE) != 0) ? vec4(colorEditMeshActive.xyz, 1.0) : inner_edge_color;
+
+ colorDistEdge(inner_edge_color, innerEdge);
+#endif
+ }
+ }
+
+ /* Points */
+#ifdef VERTEX_SELECTION
+ for (int v = 0; v < 3; ++v) {
+ float size = p[v] - sizeVertex;
+
+ vec4 point_color = colorVertex;
+ point_color = ((flag[v] & VERTEX_SELECTED) != 0) ? colorVertexSelect : point_color;
+ point_color = ((flag[v] & VERTEX_ACTIVE) != 0) ? vec4(colorEditMeshActive.xyz, 1.0) : point_color;
+
+ colorDist(point_color, size);
+ }
+#endif
+
+#ifdef VERTEX_FACING
+ FragColor.a *= 1.0 - abs(facing) * 0.4;
+#endif
+
+ /* don't write depth if not opaque */
+ if (FragColor.a == 0.0) discard;
+}
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_edge.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_edge.glsl
new file mode 100644
index 00000000000..77bc8a25695
--- /dev/null
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_edge.glsl
@@ -0,0 +1,154 @@
+
+/* Solid Wirefram implementation
+ * Mike Erwin, Clément Foucault */
+
+/* This shader follows the principles of
+ * http://developer.download.nvidia.com/SDK/10/direct3d/Source/SolidWireframe/Doc/SolidWireframe.pdf */
+
+layout(lines) in;
+layout(triangle_strip, max_vertices=6) out;
+
+uniform mat4 ProjectionMatrix;
+uniform vec2 viewportSize;
+
+in vec4 vPos[];
+in vec4 pPos[];
+in ivec4 vData[];
+#ifdef VERTEX_FACING
+in float vFacing[];
+#endif
+
+/* these are the same for all vertices
+ * and does not need interpolation */
+flat out vec3 edgesCrease;
+flat out vec3 edgesBweight;
+flat out vec4 faceColor;
+flat out ivec3 flag;
+flat out int clipCase;
+#ifdef VERTEX_SELECTION
+out vec3 vertexColor;
+#endif
+#ifdef VERTEX_FACING
+out float facing;
+#endif
+
+/* See fragment shader */
+noperspective out vec2 eData1;
+flat out vec2 eData2[3];
+
+#define VERTEX_ACTIVE (1 << 0)
+#define VERTEX_SELECTED (1 << 1)
+
+#define FACE_ACTIVE (1 << 2)
+#define FACE_SELECTED (1 << 3)
+
+/* Table 1. Triangle Projection Cases */
+const ivec4 clipPointsIdx[6] = ivec4[6](
+ ivec4(0, 1, 2, 2),
+ ivec4(0, 2, 1, 1),
+ ivec4(0, 0, 1, 2),
+ ivec4(1, 2, 0, 0),
+ ivec4(1, 1, 0, 2),
+ ivec4(2, 2, 0, 1)
+);
+
+/* project to screen space */
+vec2 proj(vec4 pos)
+{
+ return (0.5 * (pos.xy / pos.w) + 0.5) * viewportSize;
+}
+
+float dist(vec2 pos[3], vec2 vpos, int v)
+{
+ /* endpoints of opposite edge */
+ vec2 e1 = pos[(v + 1) % 3];
+ vec2 e2 = pos[(v + 2) % 3];
+ /* Edge normalized vector */
+ vec2 dir = normalize(e2 - e1);
+ /* perpendicular to dir */
+ vec2 orthogonal = vec2(-dir.y, dir.x);
+
+ return abs(dot(vpos - e1, orthogonal));
+}
+
+vec3 getVertexColor(int v)
+{
+ if ((vData[v].x & (VERTEX_ACTIVE | VERTEX_SELECTED)) != 0)
+ return colorEdgeSelect.rgb;
+ else
+ return colorWireEdit.rgb;
+}
+
+void doVertex(int v, vec4 pos)
+{
+#ifdef VERTEX_SELECTION
+ vertexColor = getVertexColor(v);
+#endif
+
+#ifdef VERTEX_FACING
+ facing = vFacing[v];
+#endif
+
+ gl_Position = pos;
+
+ EmitVertex();
+}
+
+void main()
+{
+ clipCase = 0;
+
+ /* Face */
+ faceColor = vec4(0.0);
+
+ /* Proj Vertex */
+ vec2 pos[2] = vec2[2](proj(pPos[0]), proj(pPos[1]));
+
+ /* little optimization use a vec4 to vectorize
+ * following operations */
+ vec4 dirs1, dirs2;
+
+ /* Edge normalized vector */
+ dirs1.xy = normalize(pos[1] - pos[0]);
+
+ /* perpendicular to dir */
+ dirs1.zw = vec2(-dirs1.y, dirs1.x);
+
+ /* Make it view independent */
+ dirs1 *= sizeEdgeFix / viewportSize.xyxy;
+
+ dirs2 = dirs1;
+
+ /* Perspective */
+ if (ProjectionMatrix[3][3] == 0.0) {
+ /* vPos[i].z is negative and we don't want
+ * our fixvec to be flipped */
+ dirs1 *= -vPos[0].z;
+ dirs2 *= -vPos[1].z;
+ }
+
+ /* Edge / Vert data */
+ eData1 = vec2(1e10);
+ eData2[0] = vec2(1e10);
+ eData2[2] = pos[0];
+ eData2[1] = pos[1];
+ flag[0] = (vData[0].x << 8);
+ flag[1] = (vData[1].x << 8);
+ flag[2] = 0;
+
+ doVertex(0, pPos[0] + vec4(-dirs1.xy, 0.0, 0.0));
+ doVertex(0, pPos[0] + vec4( dirs1.zw, 0.0, 0.0));
+ doVertex(0, pPos[0] + vec4(-dirs1.zw, 0.0, 0.0));
+
+ flag[2] = vData[0].y | (vData[0].x << 8);
+ edgesCrease[2] = vData[0].z / 255.0;
+ edgesBweight[2] = vData[0].w / 255.0;
+
+ doVertex(1, pPos[1] + vec4( dirs2.zw, 0.0, 0.0));
+ doVertex(1, pPos[1] + vec4(-dirs2.zw, 0.0, 0.0));
+
+ flag[2] = 0;
+ doVertex(1, pPos[1] + vec4( dirs2.xy, 0.0, 0.0));
+
+ EndPrimitive();
+}
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl
new file mode 100644
index 00000000000..d9c902697b6
--- /dev/null
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl
@@ -0,0 +1,307 @@
+
+/* Solid Wirefram implementation
+ * Mike Erwin, Clément Foucault */
+
+/* This shader follows the principles of
+ * http://developer.download.nvidia.com/SDK/10/direct3d/Source/SolidWireframe/Doc/SolidWireframe.pdf */
+
+layout(triangles) in;
+
+/* This is not perfect. Only a subset of intel gpus are affected.
+ * This fix have some performance impact.
+ * TODO Refine the range to only affect GPUs. */
+
+#ifdef EDGE_FIX
+/* To fix the edge artifacts, we render
+ * an outline strip around the screenspace
+ * triangle. Order is important.
+ * TODO diagram
+ */
+
+#ifdef VERTEX_SELECTION
+layout(triangle_strip, max_vertices=23) out;
+#else
+layout(triangle_strip, max_vertices=17) out;
+#endif
+#else
+layout(triangle_strip, max_vertices=3) out;
+#endif
+
+uniform mat4 ProjectionMatrix;
+uniform vec2 viewportSize;
+
+in vec4 vPos[];
+in vec4 pPos[];
+in ivec4 vData[];
+#ifdef VERTEX_FACING
+in float vFacing[];
+#endif
+
+/* these are the same for all vertices
+ * and does not need interpolation */
+flat out vec3 edgesCrease;
+flat out vec3 edgesBweight;
+flat out vec4 faceColor;
+flat out ivec3 flag;
+flat out int clipCase;
+#ifdef VERTEX_SELECTION
+out vec3 vertexColor;
+#endif
+#ifdef VERTEX_FACING
+out float facing;
+#endif
+
+/* See fragment shader */
+noperspective out vec2 eData1;
+flat out vec2 eData2[3];
+
+#define VERTEX_ACTIVE (1 << 0)
+#define VERTEX_SELECTED (1 << 1)
+
+#define FACE_ACTIVE (1 << 2)
+#define FACE_SELECTED (1 << 3)
+
+/* Table 1. Triangle Projection Cases */
+const ivec4 clipPointsIdx[6] = ivec4[6](
+ ivec4(0, 1, 2, 2),
+ ivec4(0, 2, 1, 1),
+ ivec4(0, 0, 1, 2),
+ ivec4(1, 2, 0, 0),
+ ivec4(1, 1, 0, 2),
+ ivec4(2, 2, 0, 1)
+);
+
+/* project to screen space */
+vec2 proj(vec4 pos)
+{
+ return (0.5 * (pos.xy / pos.w) + 0.5) * viewportSize;
+}
+
+float dist(vec2 pos[3], vec2 vpos, int v)
+{
+ /* endpoints of opposite edge */
+ vec2 e1 = pos[(v + 1) % 3];
+ vec2 e2 = pos[(v + 2) % 3];
+ /* Edge normalized vector */
+ vec2 dir = normalize(e2 - e1);
+ /* perpendicular to dir */
+ vec2 orthogonal = vec2(-dir.y, dir.x);
+
+ return abs(dot(vpos - e1, orthogonal));
+}
+
+vec3 getVertexColor(int v)
+{
+ if ((vData[v].x & (VERTEX_ACTIVE | VERTEX_SELECTED)) != 0)
+ return colorEdgeSelect.rgb;
+ else
+ return colorWireEdit.rgb;
+}
+
+vec4 getClipData(vec2 pos[3], ivec2 vidx)
+{
+ vec2 A = pos[vidx.x];
+ vec2 Adir = normalize(A - pos[vidx.y]);
+
+ return vec4(A, Adir);
+}
+
+void doVertex(int v)
+{
+#ifdef VERTEX_SELECTION
+ vertexColor = getVertexColor(v);
+#endif
+
+#ifdef VERTEX_FACING
+ facing = vFacing[v];
+#endif
+
+ gl_Position = pPos[v];
+
+ EmitVertex();
+}
+
+void doLoopStrip(int v, vec3 offset)
+{
+ doVertex(v);
+
+ gl_Position.xyz += offset;
+
+ EmitVertex();
+}
+
+#ifdef ANTI_ALIASING
+#define Z_OFFSET 0.008
+#else
+#define Z_OFFSET 0.0
+#endif
+
+void main()
+{
+ /* First we detect which case we are in */
+ clipCase = 0;
+
+ /* if perspective */
+ if (ProjectionMatrix[3][3] == 0.0) {
+ /* See Table 1. Triangle Projection Cases */
+ clipCase += int(pPos[0].z / pPos[0].w < -1 || vPos[0].z > 0.0) * 4;
+ clipCase += int(pPos[1].z / pPos[1].w < -1 || vPos[1].z > 0.0) * 2;
+ clipCase += int(pPos[2].z / pPos[2].w < -1 || vPos[2].z > 0.0) * 1;
+ }
+
+ /* If triangle is behind nearplane, early out */
+ if (clipCase == 7)
+ return;
+
+ /* Edge */
+ ivec3 eflag; vec3 ecrease, ebweight;
+ for (int v = 0; v < 3; ++v) {
+ flag[v] = eflag[v] = vData[v].y | (vData[v].x << 8);
+ edgesCrease[v] = ecrease[v] = vData[v].z / 255.0;
+ edgesBweight[v] = ebweight[v] = vData[v].w / 255.0;
+ }
+
+ /* Face */
+ if ((vData[0].x & FACE_ACTIVE) != 0)
+ faceColor = colorEditMeshActive;
+ else if ((vData[0].x & FACE_SELECTED) != 0)
+ faceColor = colorFaceSelect;
+ else
+ faceColor = colorFace;
+
+ /* Vertex */
+ vec2 pos[3] = vec2[3](proj(pPos[0]), proj(pPos[1]), proj(pPos[2]));
+
+ /* Simple case : compute edge distances in geometry shader */
+ if (clipCase == 0) {
+
+ /* Packing screen positions and 2 distances */
+ eData2[0] = pos[2];
+ eData2[1] = pos[1];
+ eData2[2] = pos[0];
+
+ /* Only pass the first 2 distances */
+ for (int v = 0; v < 2; ++v) {
+ eData1[v] = dist(pos, pos[v], v);
+ doVertex(v);
+ eData1[v] = 0.0;
+ }
+
+ /* and the last vertex */
+ doVertex(2);
+
+#ifdef EDGE_FIX
+ vec2 fixvec[6];
+ vec2 fixvecaf[6];
+ vec2 cornervec[3];
+
+ /* This fix the case when 2 vertices are perfectly aligned
+ * and corner vectors have nowhere to go.
+ * ie: length(cornervec[i]) == 0 */
+ const float epsilon = 1e-2; /* in pixel so not that much */
+ const vec2 bias[3] = vec2[3](
+ vec2( epsilon, epsilon),
+ vec2(-epsilon, epsilon),
+ vec2( 0.0, -epsilon)
+ );
+
+ for (int i = 0; i < 3; ++i) {
+ int i1 = (i + 1) % 3;
+ int i2 = (i + 2) % 3;
+
+ vec2 v1 = pos[i] + bias[i];
+ vec2 v2 = pos[i1] + bias[i1];
+ vec2 v3 = pos[i2] + bias[i2];
+
+ /* Edge normalized vector */
+ vec2 dir = normalize(v2 - v1);
+ vec2 dir2 = normalize(v3 - v1);
+
+ cornervec[i] = -normalize(dir + dir2);
+
+ /* perpendicular to dir */
+ vec2 perp = vec2(-dir.y, dir.x);
+
+ /* Backface case */
+ if (dot(perp, dir2) > 0) {
+ perp = -perp;
+ }
+
+ /* Make it view independent */
+ perp *= sizeEdgeFix / viewportSize;
+ cornervec[i] *= sizeEdgeFix / viewportSize;
+ fixvec[i] = fixvecaf[i] = perp;
+
+ /* Perspective */
+ if (ProjectionMatrix[3][3] == 0.0) {
+ /* vPos[i].z is negative and we don't want
+ * our fixvec to be flipped */
+ fixvec[i] *= -vPos[i].z;
+ fixvecaf[i] *= -vPos[i1].z;
+ cornervec[i] *= -vPos[i].z;
+ }
+ }
+
+ /* to not let face color bleed */
+ faceColor.a = 0.0;
+
+ /* we don't want other edges : make them far */
+ eData1 = vec2(1e10);
+ eData2[0] = vec2(1e10);
+
+ /* Start with the same last vertex to create a
+ * degenerate triangle in order to "create"
+ * a new triangle strip */
+ for (int i = 2; i < 5; ++i) {
+ int vbe = (i - 1) % 3;
+ int vaf = (i + 1) % 3;
+ int v = i % 3;
+
+ /* Position of the "hidden" third vertex */
+ eData2[0] = pos[vbe];
+ doLoopStrip(v, vec3(fixvec[v], Z_OFFSET));
+
+ /* Now one triangle only shade one edge
+ * so we use the edge distance calculated
+ * in the fragment shader, the third edge;
+ * we do this because we need flat interp to
+ * draw a continuous triangle strip */
+ eData2[1] = pos[vaf];
+ eData2[2] = pos[v];
+ flag[0] = (vData[v].x << 8);
+ flag[1] = (vData[vaf].x << 8);
+ flag[2] = eflag[vbe];
+ edgesCrease[2] = ecrease[vbe];
+ edgesBweight[2] = ebweight[vbe];
+
+ doLoopStrip(vaf, vec3(fixvecaf[v], Z_OFFSET));
+
+ /* corner vertices should not draw edges but draw point only */
+ flag[2] = (vData[vbe].x << 8);
+#ifdef VERTEX_SELECTION
+ doLoopStrip(vaf, vec3(cornervec[vaf], Z_OFFSET));
+#endif
+ }
+
+ /* finish the loop strip */
+ doLoopStrip(2, vec3(fixvec[2], Z_OFFSET));
+#endif
+ }
+ /* Harder case : compute visible edges vectors */
+ else {
+ ivec4 vindices = clipPointsIdx[clipCase - 1];
+
+ vec4 tmp;
+ tmp = getClipData(pos, vindices.xz);
+ eData1 = tmp.xy;
+ eData2[0] = tmp.zw;
+ tmp = getClipData(pos, vindices.yw);
+ eData2[1] = tmp.xy;
+ eData2[2] = tmp.zw;
+
+ for (int v = 0; v < 3; ++v)
+ doVertex(v);
+ }
+
+ EndPrimitive();
+}
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_loosevert_vert.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_loosevert_vert.glsl
new file mode 100644
index 00000000000..53e5b09cb70
--- /dev/null
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_loosevert_vert.glsl
@@ -0,0 +1,61 @@
+
+/* Solid Wirefram implementation
+ * Mike Erwin, Clément Foucault */
+
+/* This shader follows the principles of
+ * http://developer.download.nvidia.com/SDK/10/direct3d/Source/SolidWireframe/Doc/SolidWireframe.pdf */
+
+uniform mat4 ModelViewProjectionMatrix;
+uniform vec2 viewportSize;
+
+in vec3 pos;
+in ivec4 data;
+
+/* these are the same for all vertices
+ * and does not need interpolation */
+flat out vec3 edgesCrease;
+flat out vec3 edgesBweight;
+flat out vec4 faceColor;
+flat out ivec3 flag;
+flat out int clipCase;
+#ifdef VERTEX_SELECTION
+out vec3 vertexColor;
+#endif
+
+/* See fragment shader */
+noperspective out vec2 eData1;
+flat out vec2 eData2[3];
+
+/* project to screen space */
+vec2 proj(vec4 pos)
+{
+ return (0.5 * (pos.xy / pos.w) + 0.5) * viewportSize;
+}
+
+void main()
+{
+ clipCase = 0;
+ edgesCrease = vec3(0.0);
+ edgesBweight = vec3(0.0);
+
+ vec4 pPos = ModelViewProjectionMatrix * vec4(pos, 1.0);
+
+ /* there is no face */
+ faceColor = vec4(0.0);
+
+#ifdef VERTEX_SELECTION
+ vertexColor = vec3(0.0);
+#endif
+
+ /* only vertex position 0 is used */
+ eData1 = vec2(1e10);
+ eData2[0] = vec2(1e10);
+ eData2[1] = vec2(1e10);
+ eData2[2] = proj(pPos);
+
+ flag[0] = (data.x << 8);
+ flag[1] = flag[2] = 0;
+
+ gl_PointSize = sizeEdgeFix;
+ gl_Position = pPos;
+}
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_mix_frag.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_mix_frag.glsl
new file mode 100644
index 00000000000..8f94a105332
--- /dev/null
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_mix_frag.glsl
@@ -0,0 +1,22 @@
+
+out vec4 FragColor;
+
+uniform sampler2D wireColor;
+uniform sampler2D wireDepth;
+uniform sampler2D sceneDepth;
+uniform float alpha;
+
+void main()
+{
+ ivec2 uv = ivec2(gl_FragCoord.xy);
+ float wire_depth = texelFetch(wireDepth, uv, 0).r;
+ float scene_depth = texelFetch(sceneDepth, uv, 0).r;
+ vec4 wire_color = texelFetch(wireColor, uv, 0).rgba;
+
+ FragColor = wire_color;
+
+ /* Modulate alpha if occluded */
+ if (wire_depth > scene_depth) {
+ FragColor.a *= alpha;
+ }
+}
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl
new file mode 100644
index 00000000000..8ebfa4376f0
--- /dev/null
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl
@@ -0,0 +1,38 @@
+
+/* Solid Wirefram implementation
+ * Mike Erwin, Clément Foucault */
+
+/* This shader follows the principles of
+ * http://developer.download.nvidia.com/SDK/10/direct3d/Source/SolidWireframe/Doc/SolidWireframe.pdf */
+
+uniform mat4 ModelViewMatrix;
+uniform mat4 ModelViewProjectionMatrix;
+
+in vec3 pos;
+in ivec4 data;
+
+out vec4 vPos;
+out vec4 pPos;
+out ivec4 vData;
+
+#ifdef VERTEX_FACING
+uniform mat4 ProjectionMatrix;
+uniform mat3 NormalMatrix;
+
+in vec3 vnor;
+out float vFacing;
+#endif
+
+void main()
+{
+ vPos = ModelViewMatrix * vec4(pos, 1.0);
+ pPos = ModelViewProjectionMatrix * vec4(pos, 1.0);
+ vData = data;
+#ifdef VERTEX_FACING
+ vec3 view_normal = normalize(NormalMatrix * vnor);
+ vec3 view_vec = (ProjectionMatrix[3][3] == 0.0)
+ ? normalize(vPos.xyz)
+ : vec3(0.0, 0.0, 1.0);
+ vFacing = dot(view_vec, view_normal);
+#endif
+}
diff --git a/source/blender/draw/modes/shaders/edit_normals_geom.glsl b/source/blender/draw/modes/shaders/edit_normals_geom.glsl
new file mode 100644
index 00000000000..d17823f2f5a
--- /dev/null
+++ b/source/blender/draw/modes/shaders/edit_normals_geom.glsl
@@ -0,0 +1,15 @@
+
+layout(points) in;
+layout(line_strip, max_vertices=2) out;
+
+flat in vec4 v1[1];
+flat in vec4 v2[1];
+
+void main()
+{
+ gl_Position = v1[0];
+ EmitVertex();
+ gl_Position = v2[0];
+ EmitVertex();
+ EndPrimitive();
+}
diff --git a/source/blender/draw/modes/shaders/edit_normals_vert.glsl b/source/blender/draw/modes/shaders/edit_normals_vert.glsl
new file mode 100644
index 00000000000..3ce7e618511
--- /dev/null
+++ b/source/blender/draw/modes/shaders/edit_normals_vert.glsl
@@ -0,0 +1,30 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+uniform mat3 NormalMatrix;
+uniform mat4 ProjectionMatrix;
+uniform float normalSize;
+
+in vec3 pos;
+
+#ifdef LOOP_NORMALS
+in vec3 lnor;
+#define nor lnor
+
+#elif defined(FACE_NORMALS)
+in vec4 norAndFlag;
+#define nor norAndFlag.xyz
+#else
+
+in vec3 vnor;
+#define nor vnor
+#endif
+
+flat out vec4 v1;
+flat out vec4 v2;
+
+void main()
+{
+ v1 = ModelViewProjectionMatrix * vec4(pos, 1.0);
+ vec3 n = normalize(NormalMatrix * nor); /* viewspace */
+ v2 = v1 + ProjectionMatrix * vec4(n * normalSize, 0.0);
+}
diff --git a/source/blender/draw/modes/shaders/object_empty_image_frag.glsl b/source/blender/draw/modes/shaders/object_empty_image_frag.glsl
new file mode 100644
index 00000000000..eab107354d1
--- /dev/null
+++ b/source/blender/draw/modes/shaders/object_empty_image_frag.glsl
@@ -0,0 +1,21 @@
+
+flat in vec4 finalColor;
+
+#ifndef USE_WIRE
+in vec2 texCoord_interp;
+#endif
+
+out vec4 fragColor;
+
+#ifndef USE_WIRE
+uniform sampler2D image;
+#endif
+
+void main()
+{
+#ifdef USE_WIRE
+ fragColor = finalColor;
+#else
+ fragColor = finalColor * texture(image, texCoord_interp);
+#endif
+}
diff --git a/source/blender/draw/modes/shaders/object_empty_image_vert.glsl b/source/blender/draw/modes/shaders/object_empty_image_vert.glsl
new file mode 100644
index 00000000000..c629fdcb7ef
--- /dev/null
+++ b/source/blender/draw/modes/shaders/object_empty_image_vert.glsl
@@ -0,0 +1,38 @@
+
+uniform mat4 ViewProjectionMatrix;
+uniform vec2 aspect;
+
+/* ---- Instanciated Attribs ---- */
+in vec2 texCoord;
+in vec2 pos;
+/* ---- Per instance Attribs ---- */
+in mat4 InstanceModelMatrix;
+
+#ifdef USE_WIRE
+in vec3 color;
+#else
+in vec4 objectColor;
+#endif
+
+in float size;
+in vec2 offset;
+
+flat out vec4 finalColor;
+
+#ifndef USE_WIRE
+out vec2 texCoord_interp;
+#endif
+
+void main()
+{
+ gl_Position = ViewProjectionMatrix * InstanceModelMatrix * vec4(
+ (pos[0] + offset[0]) * (size * aspect[0]),
+ (pos[1] + offset[1]) * (size * aspect[1]),
+ 0.0, 1.0);
+#ifdef USE_WIRE
+ finalColor = vec4(color, 1.0);
+#else
+ texCoord_interp = texCoord;
+ finalColor = objectColor;
+#endif
+}
diff --git a/source/blender/draw/modes/shaders/object_grid_frag.glsl b/source/blender/draw/modes/shaders/object_grid_frag.glsl
new file mode 100644
index 00000000000..eab4de72115
--- /dev/null
+++ b/source/blender/draw/modes/shaders/object_grid_frag.glsl
@@ -0,0 +1,207 @@
+
+/* Infinite grid
+ * Clément Foucault */
+
+out vec4 FragColor;
+
+uniform mat4 ProjectionMatrix;
+uniform vec3 cameraPos;
+uniform vec3 planeNormal;
+uniform vec3 planeAxes;
+uniform vec3 eye;
+uniform vec4 gridSettings;
+uniform vec2 viewportSize;
+uniform vec4 screenvecs[3];
+uniform float gridOneOverLogSubdiv;
+uniform sampler2D depthBuffer;
+
+#define gridDistance gridSettings.x
+#define gridResolution gridSettings.y
+#define gridScale gridSettings.z
+#define gridSubdiv gridSettings.w
+
+uniform int gridFlag;
+
+#define AXIS_X (1 << 0)
+#define AXIS_Y (1 << 1)
+#define AXIS_Z (1 << 2)
+#define GRID (1 << 3)
+#define PLANE_XY (1 << 4)
+#define PLANE_XZ (1 << 5)
+#define PLANE_YZ (1 << 6)
+
+#define GRID_LINE_SMOOTH 1.15
+
+float get_grid(vec3 co, vec3 fwidthCos, float grid_size)
+{
+ float half_size = grid_size / 2.0;
+ /* triangular wave pattern, amplitude is [0, grid_size] */
+ vec3 grid_domain = abs(mod(co + half_size, grid_size) - half_size);
+ /* modulate by the absolute rate of change of the coordinates
+ * (make lines have the same width under perspective) */
+ grid_domain /= fwidthCos;
+
+ /* collapse waves and normalize */
+ grid_domain.x = min(grid_domain.x, min(grid_domain.y, grid_domain.z)) / grid_size;
+
+ return 1.0 - smoothstep(0.0, GRID_LINE_SMOOTH / grid_size, grid_domain.x);
+}
+
+vec3 get_axes(vec3 co, vec3 fwidthCos, float line_size)
+{
+ vec3 axes_domain = abs(co);
+ /* modulate by the absolute rate of change of the coordinates
+ * (make line have the same width under perspective) */
+ axes_domain /= fwidthCos;
+
+ return 1.0 - smoothstep(0.0, GRID_LINE_SMOOTH, axes_domain - line_size);
+}
+
+vec3 get_floor_pos(vec2 uv, out vec3 wPos)
+{
+ vec3 camera_vec, camera_pos, corner_pos;
+ vec3 floored_pos = planeAxes * floor(screenvecs[2].xyz);
+ corner_pos = screenvecs[2].xyz - floored_pos;
+
+ vec3 pixel_pos = corner_pos + uv.x * screenvecs[0].xyz + uv.y * screenvecs[1].xyz;
+
+ /* if perspective */
+ if (ProjectionMatrix[3][3] == 0.0) {
+ camera_pos = cameraPos - floored_pos;
+ camera_vec = normalize(pixel_pos - camera_pos);
+ }
+ else {
+ camera_pos = pixel_pos;
+ camera_vec = normalize(eye);
+ }
+
+ float plane_normal_dot_camera_vec = dot(planeNormal, camera_vec);
+ float p = -dot(planeNormal, camera_pos);
+ if (plane_normal_dot_camera_vec != 0) {
+ p /= plane_normal_dot_camera_vec;
+ }
+ vec3 plane = camera_pos + camera_vec * p;
+
+ /* fix residual imprecision */
+ plane *= planeAxes;
+
+ /* Recover non-offseted world position */
+ wPos = plane + floored_pos;
+
+ return plane;
+}
+
+void main()
+{
+ vec2 sPos = gl_FragCoord.xy / viewportSize; /* Screen [0,1] position */
+
+ /* To reduce artifacts, use a local version of the positions
+ * to compute derivatives since they are not position dependant.
+ * This gets rid of the blocky artifacts. Unfortunately we still
+ * need the world position for the grid to scale properly from the origin. */
+ vec3 gPos, wPos; /* Grid pos., World pos. */
+ gPos = get_floor_pos(sPos, wPos);
+
+ vec3 fwidthPos = fwidth(gPos);
+
+ float dist, fade;
+ /* if persp */
+ if (ProjectionMatrix[3][3] == 0.0) {
+ vec3 viewvec = cameraPos - wPos;
+ dist = length(viewvec);
+ viewvec /= dist;
+
+ float angle;
+ if ((gridFlag & PLANE_XZ) > 0)
+ angle = viewvec.y;
+ else if ((gridFlag & PLANE_YZ) > 0)
+ angle = viewvec.x;
+ else
+ angle = viewvec.z;
+
+ angle = 1.0 - abs(angle);
+ angle *= angle;
+ fade = 1.0 - angle * angle;
+ fade *= 1.0 - smoothstep(0.0, gridDistance, dist - gridDistance);
+ }
+ else {
+ dist = abs(gl_FragCoord.z * 2.0 - 1.0);
+ fade = 1.0 - smoothstep(0.0, 0.5, dist - 0.5);
+ dist = 1.0; /* avoid branch after */
+
+ if ((gridFlag & PLANE_XY) > 0) {
+ float angle = 1.0 - abs(eye.z);
+ dist = 1.0 + angle * 2.0;
+ angle *= angle;
+ fade *= 1.0 - angle * angle;
+ }
+ }
+
+ /* Manual, non hard, depth test:
+ * Progressively fade the grid below occluders
+ * (avoids poping visuals due to depth buffer precision) */
+ float scene_depth = texture(depthBuffer, sPos).r;
+ /* Add a small bias so the grid will always
+ * be on top of a mesh with the same depth. */
+ float grid_depth = gl_FragCoord.z - 1e-8;
+ /* Harder settings tend to flicker more,
+ * but have less "see through" appearance. */
+ const float test_hardness = 1e4;
+ fade *= 1.0 - clamp((grid_depth - scene_depth) * test_hardness, 0.0, 1.0);
+
+ if ((gridFlag & GRID) > 0) {
+ float grid_res = log(dist * gridResolution) * gridOneOverLogSubdiv;
+
+ float blend = fract(-max(grid_res, 0.0));
+ float lvl = floor(grid_res);
+
+ /* from biggest to smallest */
+ float scaleA = gridScale * pow(gridSubdiv, max(lvl - 1.0, 0.0));
+ float scaleB = gridScale * pow(gridSubdiv, max(lvl + 0.0, 0.0));
+ float scaleC = gridScale * pow(gridSubdiv, max(lvl + 1.0, 1.0));
+
+ float gridA = get_grid(wPos, fwidthPos, scaleA);
+ float gridB = get_grid(wPos, fwidthPos, scaleB);
+ float gridC = get_grid(wPos, fwidthPos, scaleC);
+
+ FragColor = vec4(colorGrid.rgb, gridA * blend);
+ FragColor = mix(FragColor, vec4(mix(colorGrid.rgb, colorGridEmphasise.rgb, blend), 1.0), gridB);
+ FragColor = mix(FragColor, vec4(colorGridEmphasise.rgb, 1.0), gridC);
+ }
+ else {
+ FragColor = vec4(colorGrid.rgb, 0.0);
+ }
+
+ if ((gridFlag & (AXIS_X | AXIS_Y | AXIS_Z)) > 0) {
+ /* Setup axes 'domains' */
+ vec3 axes_dist, axes_fwidth;
+
+ if ((gridFlag & AXIS_X) > 0) {
+ axes_dist.x = dot(wPos.yz, planeAxes.yz);
+ axes_fwidth.x = dot(fwidthPos.yz, planeAxes.yz);
+ }
+ if ((gridFlag & AXIS_Y) > 0) {
+ axes_dist.y = dot(wPos.xz, planeAxes.xz);
+ axes_fwidth.y = dot(fwidthPos.xz, planeAxes.xz);
+ }
+ if ((gridFlag & AXIS_Z) > 0) {
+ axes_dist.z = dot(wPos.xy, planeAxes.xy);
+ axes_fwidth.z = dot(fwidthPos.xy, planeAxes.xy);
+ }
+
+ /* Computing all axes at once using vec3 */
+ vec3 axes = get_axes(axes_dist, axes_fwidth, 0.1);
+
+ if ((gridFlag & AXIS_X) > 0) {
+ FragColor = mix(FragColor, colorGridAxisX, axes.x);
+ }
+ if ((gridFlag & AXIS_Y) > 0) {
+ FragColor = mix(FragColor, colorGridAxisY, axes.y);
+ }
+ if ((gridFlag & AXIS_Z) > 0) {
+ FragColor = mix(FragColor, colorGridAxisZ, axes.z);
+ }
+ }
+
+ FragColor.a *= fade;
+} \ No newline at end of file
diff --git a/source/blender/draw/modes/shaders/object_grid_vert.glsl b/source/blender/draw/modes/shaders/object_grid_vert.glsl
new file mode 100644
index 00000000000..3f99d8b5d0a
--- /dev/null
+++ b/source/blender/draw/modes/shaders/object_grid_vert.glsl
@@ -0,0 +1,63 @@
+
+/* Infinite grid
+ * Clément Foucault */
+
+uniform mat4 ViewProjectionMatrix;
+uniform mat4 ProjectionMatrix;
+uniform vec3 cameraPos;
+uniform vec4 gridSettings;
+
+#define gridDistance gridSettings.x
+#define gridResolution gridSettings.y
+#define gridScale gridSettings.z
+#define gridSubdiv gridSettings.w
+
+uniform int gridFlag;
+
+#define PLANE_XY (1 << 4)
+#define PLANE_XZ (1 << 5)
+#define PLANE_YZ (1 << 6)
+#define CLIP_Z_POS (1 << 7)
+#define CLIP_Z_NEG (1 << 8)
+
+in vec3 pos;
+
+void main()
+{
+ vec3 vert_pos, proj_camera_pos;
+
+ /* Project camera pos to the needed plane */
+ if ((gridFlag & PLANE_XY) > 0) {
+ vert_pos = vec3(pos.x, pos.y, 0.0);
+ proj_camera_pos = vec3(cameraPos.x, cameraPos.y, 0.0);
+ }
+ else if ((gridFlag & PLANE_XZ) > 0) {
+ vert_pos = vec3(pos.x, 0.0, pos.y);
+ proj_camera_pos = vec3(cameraPos.x, 0.0, cameraPos.z);
+ }
+ else {
+ vert_pos = vec3(0.0, pos.x, pos.y);
+ proj_camera_pos = vec3(0.0, cameraPos.y, cameraPos.z);
+ }
+
+ /* if persp */
+ if (ProjectionMatrix[3][3] == 0.0) {
+ vert_pos *= gridDistance * 2.0;
+ }
+ else {
+ float viewdist = 1.0 / min(abs(ProjectionMatrix[0][0]), abs(ProjectionMatrix[1][1]));
+ vert_pos *= viewdist * gridDistance * 2.0;
+ }
+
+ vec3 realPos = proj_camera_pos + vert_pos;
+
+ /* Used for additional Z axis */
+ if ((gridFlag & CLIP_Z_POS) > 0) {
+ realPos.z = max(realPos.z, 0.0);
+ }
+ if ((gridFlag & CLIP_Z_NEG) > 0) {
+ realPos.z = min(-realPos.z, 0.0);
+ }
+
+ gl_Position = ViewProjectionMatrix * vec4(realPos, 1.0);
+}
diff --git a/source/blender/draw/modes/shaders/object_lightprobe_grid_vert.glsl b/source/blender/draw/modes/shaders/object_lightprobe_grid_vert.glsl
new file mode 100644
index 00000000000..b47b3ee1cf4
--- /dev/null
+++ b/source/blender/draw/modes/shaders/object_lightprobe_grid_vert.glsl
@@ -0,0 +1,28 @@
+
+in vec3 pos;
+in vec3 nor;
+
+uniform mat4 ViewProjectionMatrix;
+
+uniform float sphere_size;
+uniform ivec3 grid_resolution;
+uniform vec3 corner;
+uniform vec3 increment_x;
+uniform vec3 increment_y;
+uniform vec3 increment_z;
+
+void main()
+{
+ vec3 ls_cell_location;
+ /* Keep in sync with update_irradiance_probe */
+ ls_cell_location.z = float(gl_InstanceID % grid_resolution.z);
+ ls_cell_location.y = float((gl_InstanceID / grid_resolution.z) % grid_resolution.y);
+ ls_cell_location.x = float(gl_InstanceID / (grid_resolution.z * grid_resolution.y));
+
+ vec3 ws_cell_location = corner +
+ (increment_x * ls_cell_location.x +
+ increment_y * ls_cell_location.y +
+ increment_z * ls_cell_location.z);
+
+ gl_Position = ViewProjectionMatrix * vec4(pos * 0.02 * sphere_size + ws_cell_location, 1.0);
+} \ No newline at end of file
diff --git a/source/blender/draw/modes/shaders/object_outline_detect_frag.glsl b/source/blender/draw/modes/shaders/object_outline_detect_frag.glsl
new file mode 100644
index 00000000000..dc0ea938436
--- /dev/null
+++ b/source/blender/draw/modes/shaders/object_outline_detect_frag.glsl
@@ -0,0 +1,79 @@
+
+in vec4 uvcoordsvar;
+
+out vec4 FragColor;
+
+uniform sampler2D outlineColor;
+uniform sampler2D outlineDepth;
+uniform sampler2D sceneDepth;
+
+uniform float alphaOcclu;
+uniform vec2 viewportSize;
+
+void search_outline(ivec2 uv, vec4 ref_col, inout bool ref_occlu, inout bool outline)
+{
+ if (!outline) {
+ vec4 color = texelFetch(outlineColor, uv, 0).rgba;
+ if (color != ref_col) {
+ outline = true;
+ }
+ else {
+ float depth = texelFetch(outlineDepth, uv, 0).r;
+ float scene_depth = texelFetch(sceneDepth, uv, 0).r;
+ bool occlu = (depth > scene_depth);
+
+ if (occlu != ref_occlu && !ref_occlu) {
+ outline = true;
+ }
+ }
+ }
+}
+
+void main()
+{
+ ivec2 uv = ivec2(gl_FragCoord.xy);
+
+ vec4 color[4];
+ /* Idea : Use a 16bit ID to identify the color
+ * and store the colors in a UBO. And fetch all ids
+ * for discontinuity check with one textureGather \o/ */
+ vec4 ref_col = texelFetch(outlineColor, uv, 0).rgba;
+ color[0] = texelFetchOffset(outlineColor, uv, 0, ivec2( 1, 0)).rgba;
+ color[1] = texelFetchOffset(outlineColor, uv, 0, ivec2( 0, 1)).rgba;
+ color[2] = texelFetchOffset(outlineColor, uv, 0, ivec2(-1, 0)).rgba;
+ color[3] = texelFetchOffset(outlineColor, uv, 0, ivec2( 0, -1)).rgba;
+
+ /* TODO GATHER */
+ vec4 depths;
+ float depth = texelFetch(outlineDepth, uv, 0).r;
+ depths.x = texelFetchOffset(outlineDepth, uv, 0, ivec2( 1, 0)).r;
+ depths.y = texelFetchOffset(outlineDepth, uv, 0, ivec2( 0, 1)).r;
+ depths.z = texelFetchOffset(outlineDepth, uv, 0, ivec2(-1, 0)).r;
+ depths.w = texelFetchOffset(outlineDepth, uv, 0, ivec2( 0, -1)).r;
+
+ vec4 scene_depths;
+ float scene_depth = texelFetch(sceneDepth, uv, 0).r;
+ scene_depths.x = texelFetchOffset(sceneDepth, uv, 0, ivec2( 1, 0)).r;
+ scene_depths.y = texelFetchOffset(sceneDepth, uv, 0, ivec2( 0, 1)).r;
+ scene_depths.z = texelFetchOffset(sceneDepth, uv, 0, ivec2(-1, 0)).r;
+ scene_depths.w = texelFetchOffset(sceneDepth, uv, 0, ivec2( 0, -1)).r;
+
+ bool ref_occlu = (depth > scene_depth);
+ bool outline = false;
+
+#if 1
+ bvec4 occlu = (!ref_occlu) ? notEqual(greaterThan(depths, scene_depths), bvec4(ref_occlu)) : bvec4(false);
+ outline = (!outline) ? (color[0] != ref_col) || occlu.x : true;
+ outline = (!outline) ? (color[1] != ref_col) || occlu.y : true;
+ outline = (!outline) ? (color[2] != ref_col) || occlu.z : true;
+ outline = (!outline) ? (color[3] != ref_col) || occlu.w : true;
+#else
+ search_outline(uv + ivec2( 1, 0), ref_col, ref_occlu, outline);
+ search_outline(uv + ivec2( 0, 1), ref_col, ref_occlu, outline);
+ search_outline(uv + ivec2(-1, 0), ref_col, ref_occlu, outline);
+ search_outline(uv + ivec2( 0, -1), ref_col, ref_occlu, outline);
+#endif
+
+ FragColor = ref_col;
+ FragColor.a *= (outline) ? (ref_occlu) ? alphaOcclu : 1.0 : 0.0;
+}
diff --git a/source/blender/draw/modes/shaders/object_outline_expand_frag.glsl b/source/blender/draw/modes/shaders/object_outline_expand_frag.glsl
new file mode 100644
index 00000000000..7e288cde236
--- /dev/null
+++ b/source/blender/draw/modes/shaders/object_outline_expand_frag.glsl
@@ -0,0 +1,37 @@
+
+in vec4 uvcoordsvar;
+
+out vec4 FragColor;
+
+uniform sampler2D outlineColor;
+
+uniform float alpha;
+uniform bool doExpand;
+
+void main()
+{
+ ivec2 uv = ivec2(gl_FragCoord.xy);
+ FragColor = texelFetch(outlineColor, uv, 0).rgba;
+
+ vec4 color[4];
+ color[0] = texelFetchOffset(outlineColor, uv, 0, ivec2( 1, 0)).rgba;
+ color[1] = texelFetchOffset(outlineColor, uv, 0, ivec2( 0, 1)).rgba;
+ color[2] = texelFetchOffset(outlineColor, uv, 0, ivec2(-1, 0)).rgba;
+ color[3] = texelFetchOffset(outlineColor, uv, 0, ivec2( 0, -1)).rgba;
+
+ vec4 values = vec4(color[0].a, color[1].a, color[2].a, color[3].a);
+
+ vec4 tests = step(vec4(1e-6), values); /* (color.a != 0.0) */
+ bvec4 btests = equal(tests, vec4(1.0));
+
+ if (FragColor.a != 0.0) {
+ return;
+ }
+
+ FragColor = (btests.x) ? color[0] : FragColor;
+ FragColor = (btests.y) ? color[1] : FragColor;
+ FragColor = (btests.z) ? color[2] : FragColor;
+ FragColor = (btests.w) ? color[3] : FragColor;
+
+ FragColor.a *= (!doExpand) ? 0.0 : 1.0;
+}
diff --git a/source/blender/draw/modes/shaders/object_outline_resolve_frag.glsl b/source/blender/draw/modes/shaders/object_outline_resolve_frag.glsl
new file mode 100644
index 00000000000..964ebe72e81
--- /dev/null
+++ b/source/blender/draw/modes/shaders/object_outline_resolve_frag.glsl
@@ -0,0 +1,27 @@
+
+in vec4 uvcoordsvar;
+
+out vec4 FragColor;
+
+uniform sampler2D outlineBluredColor;
+uniform vec2 rcpDimensions;
+
+void main()
+{
+#ifdef USE_FXAA
+ float aa_alpha = FxaaPixelShader(
+ uvcoordsvar.st,
+ outlineBluredColor,
+ rcpDimensions,
+ 1.0,
+ 0.166,
+ 0.0833
+ ).r;
+#endif
+
+ FragColor = texture(outlineBluredColor, uvcoordsvar.st).rgba;
+
+#ifdef USE_FXAA
+ FragColor.a = aa_alpha;
+#endif
+}
diff --git a/source/blender/draw/modes/shaders/object_particle_dot_frag.glsl b/source/blender/draw/modes/shaders/object_particle_dot_frag.glsl
new file mode 100644
index 00000000000..e8bf7884701
--- /dev/null
+++ b/source/blender/draw/modes/shaders/object_particle_dot_frag.glsl
@@ -0,0 +1,52 @@
+
+uniform vec3 color;
+uniform vec3 outlineColor;
+uniform sampler1D ramp;
+
+in vec4 radii;
+flat in float finalVal;
+
+out vec4 fragColor;
+
+void main() {
+ float dist = length(gl_PointCoord - vec2(0.5));
+
+// transparent outside of point
+// --- 0 ---
+// smooth transition
+// --- 1 ---
+// pure outline color
+// --- 2 ---
+// smooth transition
+// --- 3 ---
+// pure point color
+// ...
+// dist = 0 at center of point
+
+ float midStroke = 0.5 * (radii[1] + radii[2]);
+
+ if (dist > midStroke) {
+ if (finalVal < 0.0) {
+ fragColor.rgb = outlineColor;
+ }
+ else {
+ fragColor.rgb = texture(ramp, finalVal).rgb;
+ }
+
+ fragColor.a = mix(1.0, 0.0, smoothstep(radii[1], radii[0], dist));
+ }
+ else {
+ if (finalVal < 0.0) {
+ fragColor.rgb = mix(color, outlineColor, smoothstep(radii[3], radii[2], dist));
+ }
+ else {
+ fragColor.rgb = texture(ramp, finalVal).rgb;
+ }
+
+ fragColor.a = 1.0;
+ }
+
+ if (fragColor.a == 0.0) {
+ discard;
+ }
+}
diff --git a/source/blender/draw/modes/shaders/object_particle_dot_vert.glsl b/source/blender/draw/modes/shaders/object_particle_dot_vert.glsl
new file mode 100644
index 00000000000..6dfc212a776
--- /dev/null
+++ b/source/blender/draw/modes/shaders/object_particle_dot_vert.glsl
@@ -0,0 +1,35 @@
+
+uniform mat4 ModelViewMatrix;
+uniform mat4 ProjectionMatrix;
+uniform float pixel_size;
+uniform float size;
+
+in vec3 pos;
+in float val;
+
+out vec4 radii;
+flat out float finalVal;
+
+void main() {
+ gl_Position = ModelViewMatrix * vec4(pos, 1.0);
+
+ float psize = (ProjectionMatrix[3][3] == 0.0) ? (size / (-gl_Position.z * pixel_size)) : (size / pixel_size);
+
+ gl_PointSize = psize;
+
+ // calculate concentric radii in pixels
+ float radius = 0.5 * psize;
+
+ // start at the outside and progress toward the center
+ radii[0] = radius;
+ radii[1] = radius - 1.0;
+ radii[2] = radius - 1.0;
+ radii[3] = radius - 2.0;
+
+ // convert to PointCoord units
+ radii /= psize;
+
+ gl_Position = ProjectionMatrix * gl_Position;
+
+ finalVal = val;
+}
diff --git a/source/blender/draw/modes/shaders/object_particle_prim_vert.glsl b/source/blender/draw/modes/shaders/object_particle_prim_vert.glsl
new file mode 100644
index 00000000000..54ae319307a
--- /dev/null
+++ b/source/blender/draw/modes/shaders/object_particle_prim_vert.glsl
@@ -0,0 +1,56 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+uniform mat4 ViewProjectionMatrix;
+uniform mat4 ModelViewMatrix;
+uniform mat4 ProjectionMatrix;
+uniform int screen_space;
+uniform float draw_size;
+uniform vec3 color;
+uniform sampler1D ramp;
+
+in vec3 pos;
+in vec4 rot;
+in float val;
+in vec3 inst_pos;
+in int axis;
+
+flat out vec4 finalColor;
+
+vec3 rotate(vec3 vec, vec4 quat)
+{
+ /* The quaternion representation here stores the w component in the first index */
+ return vec + 2.0 * cross(quat.yzw, cross(quat.yzw, vec) + quat.x * vec);
+}
+
+void main()
+{
+ if (screen_space == 1) {
+ gl_Position = ModelViewMatrix * vec4(pos, 1.0) + vec4(inst_pos * draw_size, 0.0);
+ gl_Position = ProjectionMatrix * gl_Position;
+ }
+ else {
+ float size = draw_size;
+
+ if (axis > -1) {
+ size *= 2;
+ }
+
+ gl_Position = ModelViewProjectionMatrix * vec4(pos + rotate(inst_pos * size, rot), 1.0);
+ }
+
+#ifdef USE_AXIS
+ if (axis == 0)
+ finalColor = vec4(1.0, 0.0, 0.0, 1.0);
+ else if (axis == 1)
+ finalColor = vec4(0.0, 1.0, 0.0, 1.0);
+ else
+ finalColor = vec4(0.0, 0.0, 1.0, 1.0);
+#else
+ if (val < 0.0) {
+ finalColor = vec4(color, 1.0);
+ }
+ else {
+ finalColor = vec4(texture(ramp, val).rgb, 1.0);
+ }
+#endif
+}
diff --git a/source/blender/draw/modes/shaders/paint_texture_frag.glsl b/source/blender/draw/modes/shaders/paint_texture_frag.glsl
new file mode 100644
index 00000000000..18c58a54dca
--- /dev/null
+++ b/source/blender/draw/modes/shaders/paint_texture_frag.glsl
@@ -0,0 +1,11 @@
+
+in vec2 uv_interp;
+out vec4 fragColor;
+
+uniform sampler2D image;
+
+
+void main()
+{
+ fragColor = texture(image, uv_interp);
+}
diff --git a/source/blender/draw/modes/shaders/paint_texture_vert.glsl b/source/blender/draw/modes/shaders/paint_texture_vert.glsl
new file mode 100644
index 00000000000..4ce12e048fa
--- /dev/null
+++ b/source/blender/draw/modes/shaders/paint_texture_vert.glsl
@@ -0,0 +1,15 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+
+in vec2 uv;
+in vec3 pos;
+
+out vec2 uv_interp;
+
+void main()
+{
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
+
+ uv_interp = uv;
+
+}
diff --git a/source/blender/draw/modes/shaders/paint_vert_frag.glsl b/source/blender/draw/modes/shaders/paint_vert_frag.glsl
new file mode 100644
index 00000000000..c22e1c04b96
--- /dev/null
+++ b/source/blender/draw/modes/shaders/paint_vert_frag.glsl
@@ -0,0 +1,26 @@
+
+flat in int finalFlag;
+out vec4 fragColor;
+
+#define VERTEX_SELECTED (1 << 0)
+#define VERTEX_HIDE (1 << 4)
+
+void main()
+{
+ if (bool(finalFlag & VERTEX_HIDE)) {
+ discard;
+ }
+
+ vec2 centered = gl_PointCoord - vec2(0.5);
+ float dist_squared = dot(centered, centered);
+ const float rad_squared = 0.25;
+ const vec4 colSel = vec4(1.0, 1.0, 1.0, 1.0);
+ const vec4 colUnsel = vec4(0.5, 0.5, 0.5, 1.0);
+
+ // round point with jaggy edges
+ if (dist_squared > rad_squared) {
+ discard;
+ }
+
+ fragColor = bool(finalFlag & VERTEX_SELECTED) ? colSel : colUnsel;
+}
diff --git a/source/blender/draw/modes/shaders/paint_wire_frag.glsl b/source/blender/draw/modes/shaders/paint_wire_frag.glsl
new file mode 100644
index 00000000000..e4214a4c6d1
--- /dev/null
+++ b/source/blender/draw/modes/shaders/paint_wire_frag.glsl
@@ -0,0 +1,24 @@
+
+flat in int finalFlag;
+out vec4 fragColor;
+
+#define VERTEX_SELECTED (1 << 0)
+#define VERTEX_HIDE (1 << 4)
+
+void main()
+{
+ if (bool(finalFlag & VERTEX_HIDE)) {
+ discard;
+ }
+
+#ifdef VERTEX_MODE
+ vec4 colSel = colorEdgeSelect;
+ colSel.rgb = clamp(colSel.rgb - 0.2, 0.0, 1.0);
+#else
+ const vec4 colSel = vec4(1.0, 1.0, 1.0, 1.0);
+#endif
+
+ const vec4 colUnsel = vec4(0.5, 0.5, 0.5, 1.0);
+
+ fragColor = bool(finalFlag & VERTEX_SELECTED) ? colSel : colUnsel;
+}
diff --git a/source/blender/draw/modes/shaders/paint_wire_vert.glsl b/source/blender/draw/modes/shaders/paint_wire_vert.glsl
new file mode 100644
index 00000000000..253c21745e2
--- /dev/null
+++ b/source/blender/draw/modes/shaders/paint_wire_vert.glsl
@@ -0,0 +1,14 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+
+in vec3 pos;
+in int data;
+
+flat out int finalFlag;
+
+void main()
+{
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
+
+ finalFlag = data;
+}
diff --git a/source/blender/editors/CMakeLists.txt b/source/blender/editors/CMakeLists.txt
index 1559512d713..757fca0a1b2 100644
--- a/source/blender/editors/CMakeLists.txt
+++ b/source/blender/editors/CMakeLists.txt
@@ -29,13 +29,14 @@ if(WITH_BLENDER)
add_subdirectory(gpencil)
add_subdirectory(interface)
add_subdirectory(io)
+ add_subdirectory(manipulator_library)
add_subdirectory(mask)
add_subdirectory(mesh)
add_subdirectory(metaball)
add_subdirectory(object)
add_subdirectory(physics)
add_subdirectory(render)
- add_subdirectory(screen)
+ add_subdirectory(scene)
add_subdirectory(sculpt_paint)
add_subdirectory(sound)
add_subdirectory(space_action)
@@ -60,6 +61,7 @@ if(WITH_BLENDER)
add_subdirectory(transform)
add_subdirectory(util)
add_subdirectory(uvedit)
+ add_subdirectory(screen)
endif()
add_subdirectory(datafiles)
diff --git a/source/blender/editors/animation/CMakeLists.txt b/source/blender/editors/animation/CMakeLists.txt
index 1bf1bb2a474..13432e38669 100644
--- a/source/blender/editors/animation/CMakeLists.txt
+++ b/source/blender/editors/animation/CMakeLists.txt
@@ -23,6 +23,7 @@ set(INC
../../blenkernel
../../blenlib
../../blentranslation
+ ../../depsgraph
../../gpu
../../makesdna
../../makesrna
diff --git a/source/blender/editors/animation/anim_channels_defines.c b/source/blender/editors/animation/anim_channels_defines.c
index dba060bfb29..9fb30dc8066 100644
--- a/source/blender/editors/animation/anim_channels_defines.c
+++ b/source/blender/editors/animation/anim_channels_defines.c
@@ -68,6 +68,8 @@
#include "BKE_nla.h"
#include "BKE_context.h"
+#include "GPU_immediate.h"
+
#include "UI_interface.h"
#include "UI_interface_icons.h"
#include "UI_resources.h"
@@ -76,7 +78,6 @@
#include "ED_keyframing.h"
#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -119,11 +120,10 @@ static void acf_generic_root_backdrop(bAnimContext *ac, bAnimListElem *ale, floa
/* set backdrop drawing color */
acf->get_backdrop_color(ac, ale, color);
- glColor3fv(color);
/* rounded corners on LHS only - top only when expanded, but bottom too when collapsed */
UI_draw_roundbox_corner_set((expanded) ? UI_CNR_TOP_LEFT : (UI_CNR_TOP_LEFT | UI_CNR_BOTTOM_LEFT));
- UI_draw_roundbox_gl_mode(GL_POLYGON, offset, yminc, v2d->cur.xmax + EXTRA_SCROLL_PAD, ymaxc, 8);
+ UI_draw_roundbox_3fvAlpha(true, offset, yminc, v2d->cur.xmax + EXTRA_SCROLL_PAD, ymaxc, 8, color, 1.0f);
}
@@ -141,13 +141,19 @@ static void acf_generic_dataexpand_backdrop(bAnimContext *ac, bAnimListElem *ale
View2D *v2d = &ac->ar->v2d;
short offset = (acf->get_offset) ? acf->get_offset(ac, ale) : 0;
float color[3];
-
+
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
/* set backdrop drawing color */
acf->get_backdrop_color(ac, ale, color);
- glColor3fv(color);
-
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor3fv(color);
+
/* no rounded corner - just rectangular box */
- glRectf(offset, yminc, v2d->cur.xmax + EXTRA_SCROLL_PAD, ymaxc);
+ immRectf(pos, offset, yminc, v2d->cur.xmax + EXTRA_SCROLL_PAD, ymaxc);
+
+ immUnbindProgram();
}
/* helper method to test if group colors should be drawn */
@@ -224,13 +230,19 @@ static void acf_generic_channel_backdrop(bAnimContext *ac, bAnimListElem *ale, f
View2D *v2d = &ac->ar->v2d;
short offset = (acf->get_offset) ? acf->get_offset(ac, ale) : 0;
float color[3];
+
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
/* set backdrop drawing color */
acf->get_backdrop_color(ac, ale, color);
- glColor3fv(color);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor3fv(color);
/* no rounded corners - just rectangular box */
- glRectf(offset, yminc, v2d->cur.xmax + EXTRA_SCROLL_PAD, ymaxc);
+ immRectf(pos, offset, yminc, v2d->cur.xmax + EXTRA_SCROLL_PAD, ymaxc);
+
+ immUnbindProgram();
}
/* Indention + Offset ------------------------------------------- */
@@ -421,14 +433,13 @@ static void acf_summary_backdrop(bAnimContext *ac, bAnimListElem *ale, float ymi
/* set backdrop drawing color */
acf->get_backdrop_color(ac, ale, color);
- glColor3fv(color);
/* rounded corners on LHS only
* - top and bottom
* - special hack: make the top a bit higher, since we are first...
*/
UI_draw_roundbox_corner_set(UI_CNR_TOP_LEFT | UI_CNR_BOTTOM_LEFT);
- UI_draw_roundbox_gl_mode(GL_POLYGON, 0, yminc - 2, v2d->cur.xmax + EXTRA_SCROLL_PAD, ymaxc, 8);
+ UI_draw_roundbox_3fvAlpha(true, 0, yminc - 2, v2d->cur.xmax + EXTRA_SCROLL_PAD, ymaxc, 8, color, 1.0f);
}
/* name for summary entries */
@@ -814,11 +825,10 @@ static void acf_group_backdrop(bAnimContext *ac, bAnimListElem *ale, float yminc
/* set backdrop drawing color */
acf->get_backdrop_color(ac, ale, color);
- glColor3fv(color);
/* rounded corners on LHS only - top only when expanded, but bottom too when collapsed */
UI_draw_roundbox_corner_set(expanded ? UI_CNR_TOP_LEFT : (UI_CNR_TOP_LEFT | UI_CNR_BOTTOM_LEFT));
- UI_draw_roundbox_gl_mode(GL_POLYGON, offset, yminc, v2d->cur.xmax + EXTRA_SCROLL_PAD, ymaxc, 8);
+ UI_draw_roundbox_3fvAlpha(true, offset, yminc, v2d->cur.xmax + EXTRA_SCROLL_PAD, ymaxc, 8, color, 1.0f);
}
/* name for group entries */
@@ -1071,11 +1081,10 @@ static void acf_nla_controls_backdrop(bAnimContext *ac, bAnimListElem *ale, floa
/* set backdrop drawing color */
acf->get_backdrop_color(ac, ale, color);
- glColor3fv(color);
- /* rounded corners on LHS only - top only when expanded, but bottom too when collapsed */
+ /* rounded corners on LHS only - top only when expanded, but bottom too when collapsed */
UI_draw_roundbox_corner_set(expanded ? UI_CNR_TOP_LEFT : (UI_CNR_TOP_LEFT | UI_CNR_BOTTOM_LEFT));
- UI_draw_roundbox_gl_mode(GL_POLYGON, offset, yminc, v2d->cur.xmax + EXTRA_SCROLL_PAD, ymaxc, 5);
+ UI_draw_roundbox_3fvAlpha(true, offset, yminc, v2d->cur.xmax + EXTRA_SCROLL_PAD, ymaxc, 5, color, 1.0f);
}
/* name for nla controls expander entries */
@@ -2018,7 +2027,7 @@ static int acf_dspart_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Settin
switch (setting) {
case ACHANNEL_SETTING_EXPAND: /* expanded */
- return PART_DS_EXPAND;
+ return 0;
case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */
return ADT_NLA_EVAL_OFF;
@@ -2036,22 +2045,18 @@ static int acf_dspart_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Settin
}
/* get pointer to the setting */
-static void *acf_dspart_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings setting, short *type)
+static void *acf_dspart_setting_ptr(bAnimListElem *UNUSED(ale), eAnimChannel_Settings setting, short *type)
{
- ParticleSettings *part = (ParticleSettings *)ale->data;
-
/* clear extra return data first */
*type = 0;
switch (setting) {
case ACHANNEL_SETTING_EXPAND: /* expanded */
- return GET_ACF_FLAG_PTR(part->flag, type);
+ return NULL;
case ACHANNEL_SETTING_SELECT: /* selected */
case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */
case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */
- if (part->adt)
- return GET_ACF_FLAG_PTR(part->adt->flag, type);
return NULL;
default: /* unsupported */
@@ -3420,24 +3425,20 @@ static void acf_nlaaction_backdrop(bAnimContext *ac, bAnimListElem *ale, float y
*/
nla_action_get_color(adt, (bAction *)ale->data, color);
- if (adt && (adt->flag & ADT_NLA_EDIT_ON)) {
- /* Yes, the color vector has 4 components, BUT we only want to be using 3 of them! */
- glColor3fv(color);
- }
- else {
- float alpha = (adt && (adt->flag & ADT_NLA_SOLO_TRACK)) ? 0.3f : 1.0f;
- glColor4f(color[0], color[1], color[2], alpha);
- }
-
- /* only on top left corner, to show that this channel sits on top of the preceding ones
+ if (adt && (adt->flag & ADT_NLA_EDIT_ON))
+ color[3] = 1.0f;
+ else
+ color[3] = (adt && (adt->flag & ADT_NLA_SOLO_TRACK)) ? 0.3f : 1.0f;
+
+ /* only on top left corner, to show that this channel sits on top of the preceding ones
* while still linking into the action line strip to the right
*/
UI_draw_roundbox_corner_set(UI_CNR_TOP_LEFT);
-
+
/* draw slightly shifted up vertically to look like it has more separation from other channels,
* but we then need to slightly shorten it so that it doesn't look like it overlaps
*/
- UI_draw_roundbox_gl_mode(GL_POLYGON, offset, yminc + NLACHANNEL_SKIP, (float)v2d->cur.xmax, ymaxc + NLACHANNEL_SKIP - 1, 8);
+ UI_draw_roundbox_4fv(true, offset, yminc + NLACHANNEL_SKIP, (float)v2d->cur.xmax, ymaxc + NLACHANNEL_SKIP - 1, 8, color);
}
/* name for nla action entries */
@@ -3861,15 +3862,20 @@ void ANIM_channel_draw(bAnimContext *ac, bAnimListElem *ale, float yminc, float
/* for F-Curves, draw color-preview of curve behind checkbox */
if (ELEM(ale->type, ANIMTYPE_FCURVE, ANIMTYPE_NLACURVE)) {
FCurve *fcu = (FCurve *)ale->data;
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
/* F-Curve channels need to have a special 'color code' box drawn, which is colored with whatever
* color the curve has stored
*/
- glColor3fv(fcu->color);
+ immUniformColor3fv(fcu->color);
/* just a solid color rect
*/
- glRectf(offset, yminc, offset + ICON_WIDTH, ymaxc);
+ immRectf(pos, offset, yminc, offset + ICON_WIDTH, ymaxc);
+
+ immUnbindProgram();
}
/* icon is drawn as widget now... */
if (acf->has_setting(ac, ale, ACHANNEL_SETTING_VISIBLE)) {
@@ -3894,27 +3900,39 @@ void ANIM_channel_draw(bAnimContext *ac, bAnimListElem *ale, float yminc, float
if (acf->name && !achannel_is_being_renamed(ac, acf, channel_index)) {
const uiFontStyle *fstyle = UI_FSTYLE_WIDGET;
char name[ANIM_CHAN_NAME_SIZE]; /* hopefully this will be enough! */
-
+ unsigned char col[4];
+
/* set text color */
/* XXX: if active, highlight differently? */
+
if (selected)
- UI_ThemeColor(TH_TEXT_HI);
+ UI_GetThemeColor4ubv(TH_TEXT_HI, col);
else
- UI_ThemeColor(TH_TEXT);
-
+ UI_GetThemeColor4ubv(TH_TEXT, col);
+
/* get name */
acf->name(ale, name);
offset += 3;
- UI_fontstyle_draw_simple(fstyle, offset, ytext, name);
+ UI_fontstyle_draw_simple(fstyle, offset, ytext, name, col);
/* draw red underline if channel is disabled */
if (ELEM(ale->type, ANIMTYPE_FCURVE, ANIMTYPE_NLACURVE) && (ale->flag & FCURVE_DISABLED)) {
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
/* FIXME: replace hardcoded color here, and check on extents! */
- glColor3f(1.0f, 0.0f, 0.0f);
- glLineWidth(2.0);
- fdrawline((float)(offset), yminc,
- (float)(v2d->cur.xmax), yminc);
+ immUniformColor3f(1.0f, 0.0f, 0.0f);
+
+ glLineWidth(2.0f);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2f(pos, (float)offset, yminc);
+ immVertex2f(pos, (float)v2d->cur.xmax, yminc);
+ immEnd();
+
+ immUnbindProgram();
}
}
@@ -3928,10 +3946,13 @@ void ANIM_channel_draw(bAnimContext *ac, bAnimListElem *ale, float yminc, float
short draw_sliders = 0;
float ymin_ofs = 0.0f;
float color[3];
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
/* get and set backdrop color */
acf->get_backdrop_color(ac, ale, color);
- glColor3fv(color);
+ immUniformColor3fv(color);
/* check if we need to show the sliders */
if ((ac->sl) && ELEM(ac->spacetype, SPACE_ACTION, SPACE_IPO)) {
@@ -3989,7 +4010,9 @@ void ANIM_channel_draw(bAnimContext *ac, bAnimListElem *ale, float yminc, float
* - starts from the point where the first toggle/slider starts,
* - ends past the space that might be reserved for a scroller
*/
- glRectf(v2d->cur.xmax - (float)offset, yminc + ymin_ofs, v2d->cur.xmax + EXTRA_SCROLL_PAD, ymaxc);
+ immRectf(pos, v2d->cur.xmax - (float)offset, yminc + ymin_ofs, v2d->cur.xmax + EXTRA_SCROLL_PAD, ymaxc);
+
+ immUnbindProgram();
}
}
diff --git a/source/blender/editors/animation/anim_channels_edit.c b/source/blender/editors/animation/anim_channels_edit.c
index 4d68053fbc8..5d5990b9a0a 100644
--- a/source/blender/editors/animation/anim_channels_edit.c
+++ b/source/blender/editors/animation/anim_channels_edit.c
@@ -50,13 +50,15 @@
#include "BKE_animsys.h"
#include "BKE_action.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
#include "BKE_gpencil.h"
#include "BKE_context.h"
+#include "BKE_library.h"
#include "BKE_mask.h"
#include "BKE_global.h"
-#include "BKE_library.h"
+#include "BKE_scene.h"
+
+#include "DEG_depsgraph_build.h"
#include "UI_view2d.h"
@@ -1747,7 +1749,7 @@ static int animchannels_delete_exec(bContext *C, wmOperator *UNUSED(op))
/* send notifier that things have changed */
WM_event_add_notifier(C, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL);
- DAG_relations_tag_update(CTX_data_main(C));
+ DEG_relations_tag_update(CTX_data_main(C));
return OPERATOR_FINISHED;
}
@@ -2683,16 +2685,17 @@ static int mouse_anim_channels(bContext *C, bAnimContext *ac, int channel_index,
{
bDopeSheet *ads = (bDopeSheet *)ac->data;
Scene *sce = (Scene *)ads->source;
+ ViewLayer *view_layer = ac->view_layer;
Base *base = (Base *)ale->data;
Object *ob = base->object;
AnimData *adt = ob->adt;
/* set selection status */
- if ((ob->restrictflag & OB_RESTRICT_SELECT) == 0) {
+ if (base->flag & BASE_SELECTABLED) {
if (selectmode == SELECT_INVERT) {
/* swap select */
- base->flag ^= SELECT;
- ob->flag = base->flag;
+ ED_object_base_select(base, BA_INVERT);
+ BKE_scene_object_base_flag_sync_from_base(base);
if (adt) adt->flag ^= ADT_UI_SELECTED;
}
@@ -2701,20 +2704,20 @@ static int mouse_anim_channels(bContext *C, bAnimContext *ac, int channel_index,
/* deselect all */
/* TODO: should this deselect all other types of channels too? */
- for (b = sce->base.first; b; b = b->next) {
- b->flag &= ~SELECT;
- b->object->flag = b->flag;
+ for (b = view_layer->object_bases.first; b; b = b->next) {
+ ED_object_base_select(b, BA_DESELECT);
+ BKE_scene_object_base_flag_sync_from_base(b);
if (b->object->adt) b->object->adt->flag &= ~(ADT_UI_SELECTED | ADT_UI_ACTIVE);
}
/* select object now */
- base->flag |= SELECT;
- ob->flag |= SELECT;
+ ED_object_base_select(base, BA_SELECT);
+ BKE_scene_object_base_flag_sync_from_base(base);
if (adt) adt->flag |= ADT_UI_SELECTED;
}
/* change active object - regardless of whether it is now selected [T37883] */
- ED_base_object_activate(C, base); /* adds notifier */
+ ED_object_base_activate(C, base); /* adds notifier */
if ((adt) && (adt->flag & ADT_UI_SELECTED))
adt->flag |= ADT_UI_ACTIVE;
diff --git a/source/blender/editors/animation/anim_deps.c b/source/blender/editors/animation/anim_deps.c
index cc77a321a89..abdc6450abd 100644
--- a/source/blender/editors/animation/anim_deps.c
+++ b/source/blender/editors/animation/anim_deps.c
@@ -49,11 +49,12 @@
#include "BKE_fcurve.h"
#include "BKE_gpencil.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_global.h"
#include "BKE_node.h"
#include "BKE_sequencer.h"
+#include "DEG_depsgraph.h"
+
#include "RNA_access.h"
#include "ED_anim_api.h"
@@ -77,7 +78,7 @@ void ANIM_list_elem_update(Scene *scene, bAnimListElem *ale)
adt = BKE_animdata_from_id(id);
if (adt) {
adt->recalc |= ADT_RECALC_ANIM;
- DAG_id_tag_update(id, OB_RECALC_TIME);
+ DEG_id_tag_update(id, OB_RECALC_TIME);
}
/* update data */
@@ -98,7 +99,7 @@ void ANIM_list_elem_update(Scene *scene, bAnimListElem *ale)
else {
/* in other case we do standard depsgraph update, ideally
* we'd be calling property update functions here too ... */
- DAG_id_tag_update(id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME); // XXX or do we want something more restrictive?
+ DEG_id_tag_update(id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME); // XXX or do we want something more restrictive?
}
}
@@ -114,7 +115,7 @@ void ANIM_id_update(Scene *UNUSED(scene), ID *id)
adt->recalc |= ADT_RECALC_ANIM;
/* set recalc flags */
- DAG_id_tag_update(id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME); // XXX or do we want something more restrictive?
+ DEG_id_tag_update(id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME); // XXX or do we want something more restrictive?
}
}
diff --git a/source/blender/editors/animation/anim_draw.c b/source/blender/editors/animation/anim_draw.c
index a6febdb575e..08851cebf51 100644
--- a/source/blender/editors/animation/anim_draw.c
+++ b/source/blender/editors/animation/anim_draw.c
@@ -58,12 +58,13 @@
#include "RNA_access.h"
-#include "BIF_gl.h"
-
#include "UI_interface.h"
#include "UI_resources.h"
#include "UI_view2d.h"
+#include "GPU_immediate.h"
+#include "GPU_matrix.h"
+
/* *************************************************** */
/* CURRENT FRAME DRAWING */
@@ -71,13 +72,17 @@
static void draw_cfra_number(Scene *scene, View2D *v2d, const float cfra, const bool time)
{
const uiFontStyle *fstyle = UI_FSTYLE_WIDGET;
- float xscale, yscale, x, y;
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned char col[4];
+ float xscale, x, y;
char numstr[32] = " t"; /* t is the character to start replacing from */
int slen;
/* because the frame number text is subject to the same scaling as the contents of the view */
- UI_view2d_scale_get(v2d, &xscale, &yscale);
- glScalef(1.0f / xscale, 1.0f, 1.0f);
+ UI_view2d_scale_get(v2d, &xscale, NULL);
+ gpuPushMatrix();
+ gpuScale2f(1.0f / xscale, 1.0f);
/* get timecode string
* - padding on str-buf passed so that it doesn't sit on the frame indicator
@@ -96,17 +101,21 @@ static void draw_cfra_number(Scene *scene, View2D *v2d, const float cfra, const
/* get starting coordinates for drawing */
x = cfra * xscale;
y = 0.9f * U.widget_unit;
-
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
/* draw green box around/behind text */
- UI_ThemeColorShade(TH_CFRAME, 0);
- glRectf(x, y, x + slen, y + 0.75f * U.widget_unit);
-
- /* draw current frame number - black text */
- UI_ThemeColor(TH_TEXT);
- UI_fontstyle_draw_simple(fstyle, x - 0.25f * U.widget_unit, y + 0.15f * U.widget_unit, numstr);
-
+ immUniformThemeColorShade(TH_CFRAME, 0);
+
+ immRectf(pos, x, y, x + slen, y + 0.75f * U.widget_unit);
+ immUnbindProgram();
+
+ /* draw current frame number */
+ UI_GetThemeColor4ubv(TH_TEXT, col);
+ UI_fontstyle_draw_simple(fstyle, x - 0.25f * U.widget_unit, y + 0.15f * U.widget_unit, numstr, col);
+
/* restore view transform */
- glScalef(xscale, 1.0, 1.0);
+ gpuPopMatrix();
}
/* General call for drawing current frame indicator in animation editor */
@@ -114,18 +123,24 @@ void ANIM_draw_cfra(const bContext *C, View2D *v2d, short flag)
{
Scene *scene = CTX_data_scene(C);
- /* Draw a light green line to indicate current frame */
- UI_ThemeColor(TH_CFRAME);
-
const float time = scene->r.cfra + scene->r.subframe;
const float x = (float)(time * scene->r.framelen);
glLineWidth((flag & DRAWCFRA_WIDE) ? 3.0 : 2.0);
- glBegin(GL_LINES);
- glVertex2f(x, v2d->cur.ymin - 500.0f); /* XXX arbitrary... want it go to bottom */
- glVertex2f(x, v2d->cur.ymax);
- glEnd();
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ /* Draw a light green line to indicate current frame */
+ immUniformThemeColor(TH_CFRAME);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2f(pos, x, v2d->cur.ymin - 500.0f); /* XXX arbitrary... want it go to bottom */
+ immVertex2f(pos, x, v2d->cur.ymax);
+ immEnd();
+ immUnbindProgram();
/* Draw current frame number in a little box */
if (flag & DRAWCFRA_SHOW_NUMBOX) {
@@ -147,17 +162,24 @@ void ANIM_draw_previewrange(const bContext *C, View2D *v2d, int end_frame_width)
if (PRVRANGEON) {
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
- glColor4f(0.0f, 0.0f, 0.0f, 0.4f);
-
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor4f(0.0f, 0.0f, 0.0f, 0.4f);
+
/* only draw two separate 'curtains' if there's no overlap between them */
if (PSFRA < PEFRA + end_frame_width) {
- glRectf(v2d->cur.xmin, v2d->cur.ymin, (float)PSFRA, v2d->cur.ymax);
- glRectf((float)(PEFRA + end_frame_width), v2d->cur.ymin, v2d->cur.xmax, v2d->cur.ymax);
+ immRectf(pos, v2d->cur.xmin, v2d->cur.ymin, (float)PSFRA, v2d->cur.ymax);
+ immRectf(pos, (float)(PEFRA + end_frame_width), v2d->cur.ymin, v2d->cur.xmax, v2d->cur.ymax);
}
else {
- glRectf(v2d->cur.xmin, v2d->cur.ymin, v2d->cur.xmax, v2d->cur.ymax);
+ immRectf(pos, v2d->cur.xmin, v2d->cur.ymin, v2d->cur.xmax, v2d->cur.ymax);
}
-
+
+ immUnbindProgram();
+
glDisable(GL_BLEND);
}
}
diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c
index 2ac305dbc30..bc901d7e13f 100644
--- a/source/blender/editors/animation/anim_filter.c
+++ b/source/blender/editors/animation/anim_filter.c
@@ -74,6 +74,7 @@
#include "DNA_gpencil_types.h"
#include "DNA_object_types.h"
#include "DNA_userdef_types.h"
+#include "DNA_layer_types.h"
#include "MEM_guardedalloc.h"
@@ -90,6 +91,7 @@
#include "BKE_global.h"
#include "BKE_group.h"
#include "BKE_key.h"
+#include "BKE_layer.h"
#include "BKE_main.h"
#include "BKE_material.h"
#include "BKE_modifier.h"
@@ -130,11 +132,11 @@ static void animedit_get_yscale_factor(bAnimContext *ac)
/* Note: there's a similar function in key.c (BKE_key_from_object) */
static Key *actedit_get_shapekeys(bAnimContext *ac)
{
- Scene *scene = ac->scene;
+ ViewLayer *view_layer = ac->view_layer;
Object *ob;
Key *key;
- ob = OBACT;
+ ob = OBACT(view_layer);
if (ob == NULL)
return NULL;
@@ -378,8 +380,9 @@ bool ANIM_animdata_get_context(const bContext *C, bAnimContext *ac)
ac->scene = scene;
if (scene) {
ac->markers = ED_context_get_markers(C);
- ac->obact = (scene->basact) ? scene->basact->object : NULL;
}
+ ac->view_layer = CTX_data_view_layer(C);
+ ac->obact = (ac->view_layer->basact) ? ac->view_layer->basact->object : NULL;
ac->sa = sa;
ac->ar = ar;
ac->sl = sl;
@@ -1683,15 +1686,16 @@ static size_t animdata_filter_gpencil(bAnimContext *ac, ListBase *anim_data, voi
if (ads->filterflag & ADS_FILTER_GP_3DONLY) {
Scene *scene = (Scene *)ads->source;
+ ViewLayer *view_layer = (ViewLayer *)ac->view_layer;
Base *base;
-
+
/* Active scene's GPencil block first - No parent item needed... */
if (scene->gpd) {
items += animdata_filter_gpencil_data(anim_data, ads, scene->gpd, filter_mode);
}
/* Objects in the scene */
- for (base = scene->base.first; base; base = base->next) {
+ for (base = view_layer->object_bases.first; base; base = base->next) {
/* Only consider this object if it has got some GP data (saving on all the other tests) */
if (base->object && base->object->gpd) {
Object *ob = base->object;
@@ -1707,14 +1711,14 @@ static size_t animdata_filter_gpencil(bAnimContext *ac, ListBase *anim_data, voi
*/
if ((filter_mode & ANIMFILTER_DATA_VISIBLE) && !(ads->filterflag & ADS_FILTER_INCL_HIDDEN)) {
/* layer visibility - we check both object and base, since these may not be in sync yet */
- if ((scene->lay & (ob->lay | base->lay)) == 0) continue;
+ if ((base->flag & BASE_VISIBLED) == 0) continue;
/* outliner restrict-flag */
if (ob->restrictflag & OB_RESTRICT_VIEW) continue;
}
/* check selection and object type filters */
- if ( (ads->filterflag & ADS_FILTER_ONLYSEL) && !((base->flag & SELECT) /*|| (base == scene->basact)*/) ) {
+ if ( (ads->filterflag & ADS_FILTER_ONLYSEL) && !((base->flag & BASE_SELECTED) /*|| (base == scene->basact)*/) ) {
/* only selected should be shown */
continue;
}
@@ -1954,25 +1958,26 @@ static size_t animdata_filter_ds_nodetree(bAnimContext *ac, ListBase *anim_data,
static size_t animdata_filter_ds_linestyle(bAnimContext *ac, ListBase *anim_data, bDopeSheet *ads, Scene *sce, int filter_mode)
{
- SceneRenderLayer *srl;
+ ViewLayer *view_layer;
FreestyleLineSet *lineset;
size_t items = 0;
- for (srl = sce->r.layers.first; srl; srl = srl->next) {
- for (lineset = srl->freestyleConfig.linesets.first; lineset; lineset = lineset->next) {
+ for (view_layer = sce->view_layers.first; view_layer; view_layer = view_layer->next) {
+ for (lineset = view_layer->freestyle_config.linesets.first; lineset; lineset = lineset->next) {
if (lineset->linestyle) {
lineset->linestyle->id.tag |= LIB_TAG_DOIT;
}
}
}
- for (srl = sce->r.layers.first; srl; srl = srl->next) {
+ for (view_layer = sce->view_layers.first; view_layer; view_layer = view_layer->next) {
/* skip render layers without Freestyle enabled */
- if (!(srl->layflag & SCE_LAY_FRS))
+ if ((view_layer->flag & VIEW_LAYER_FREESTYLE) == 0) {
continue;
-
+ }
+
/* loop over linesets defined in the render layer */
- for (lineset = srl->freestyleConfig.linesets.first; lineset; lineset = lineset->next) {
+ for (lineset = view_layer->freestyle_config.linesets.first; lineset; lineset = lineset->next) {
FreestyleLineStyle *linestyle = lineset->linestyle;
ListBase tmp_data = {NULL, NULL};
size_t tmp_items = 0;
@@ -2631,7 +2636,7 @@ static size_t animdata_filter_dopesheet_ob(bAnimContext *ac, ListBase *anim_data
if (filter_mode & ANIMFILTER_LIST_CHANNELS) {
/* check if filtering by selection */
// XXX: double-check on this - most of the time, a lot of tools need to filter out these channels!
- if (ANIMCHANNEL_SELOK((base->flag & SELECT))) {
+ if (ANIMCHANNEL_SELOK((base->flag & BASE_SELECTED))) {
/* check if filtering by active status */
if (ANIMCHANNEL_ACTIVEOK(ob)) {
ANIMCHANNEL_NEW_CHANNEL(base, ANIMTYPE_OBJECT, ob);
@@ -2855,7 +2860,7 @@ static size_t animdata_filter_dopesheet_movieclips(bAnimContext *ac, ListBase *a
}
/* Helper for animdata_filter_dopesheet() - For checking if an object should be included or not */
-static bool animdata_filter_base_is_ok(bDopeSheet *ads, Scene *scene, Base *base, int filter_mode)
+static bool animdata_filter_base_is_ok(bDopeSheet *ads, Base *base, int filter_mode)
{
Object *ob = base->object;
@@ -2873,7 +2878,7 @@ static bool animdata_filter_base_is_ok(bDopeSheet *ads, Scene *scene, Base *base
*/
if ((filter_mode & ANIMFILTER_DATA_VISIBLE) && !(ads->filterflag & ADS_FILTER_INCL_HIDDEN)) {
/* layer visibility - we check both object and base, since these may not be in sync yet */
- if ((scene->lay & (ob->lay | base->lay)) == 0)
+ if ((base->flag & BASE_VISIBLED) == 0)
return false;
/* outliner restrict-flag */
@@ -2908,7 +2913,7 @@ static bool animdata_filter_base_is_ok(bDopeSheet *ads, Scene *scene, Base *base
}
/* check selection and object type filters */
- if ((ads->filterflag & ADS_FILTER_ONLYSEL) && !((base->flag & SELECT) /*|| (base == sce->basact)*/)) {
+ if ((ads->filterflag & ADS_FILTER_ONLYSEL) && !((base->flag & BASE_SELECTED) /*|| (base == sce->basact)*/)) {
/* only selected should be shown */
return false;
}
@@ -2936,15 +2941,15 @@ static int ds_base_sorting_cmp(const void *base1_ptr, const void *base2_ptr)
}
/* Get a sorted list of all the bases - for inclusion in dopesheet (when drawing channels) */
-static Base **animdata_filter_ds_sorted_bases(bDopeSheet *ads, Scene *scene, int filter_mode, size_t *r_usable_bases)
+static Base **animdata_filter_ds_sorted_bases(bDopeSheet *ads, ViewLayer *view_layer, int filter_mode, size_t *r_usable_bases)
{
/* Create an array with space for all the bases, but only containing the usable ones */
- size_t tot_bases = BLI_listbase_count(&scene->base);
+ size_t tot_bases = BLI_listbase_count(&view_layer->object_bases);
size_t num_bases = 0;
Base **sorted_bases = MEM_mallocN(sizeof(Base *) * tot_bases, "Dopesheet Usable Sorted Bases");
- for (Base *base = scene->base.first; base; base = base->next) {
- if (animdata_filter_base_is_ok(ads, scene, base, filter_mode)) {
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ if (animdata_filter_base_is_ok(ads, base, filter_mode)) {
sorted_bases[num_bases++] = base;
}
}
@@ -2962,8 +2967,9 @@ static Base **animdata_filter_ds_sorted_bases(bDopeSheet *ads, Scene *scene, int
static size_t animdata_filter_dopesheet(bAnimContext *ac, ListBase *anim_data, bDopeSheet *ads, int filter_mode)
{
Scene *scene = (Scene *)ads->source;
+ ViewLayer *view_layer = (ViewLayer *)ac->view_layer;
size_t items = 0;
-
+
/* check that we do indeed have a scene */
if ((ads->source == NULL) || (GS(ads->source->name) != ID_SCE)) {
printf("Dope Sheet Error: No scene!\n");
@@ -3000,14 +3006,14 @@ static size_t animdata_filter_dopesheet(bAnimContext *ac, ListBase *anim_data, b
* - Don't do this if there's just a single object
*/
if ((filter_mode & ANIMFILTER_LIST_CHANNELS) && !(ads->flag & ADS_FLAG_NO_DB_SORT) &&
- (scene->base.first != scene->base.last))
+ (view_layer->object_bases.first != view_layer->object_bases.last))
{
/* Filter list of bases (i.e. objects), sort them, then add their contents normally... */
// TODO: Cache the old sorted order - if the set of bases hasn't changed, don't re-sort...
Base **sorted_bases;
size_t num_bases;
- sorted_bases = animdata_filter_ds_sorted_bases(ads, scene, filter_mode, &num_bases);
+ sorted_bases = animdata_filter_ds_sorted_bases(ads, view_layer, filter_mode, &num_bases);
if (sorted_bases) {
/* Add the necessary channels for these bases... */
for (size_t i = 0; i < num_bases; i++) {
@@ -3024,8 +3030,8 @@ static size_t animdata_filter_dopesheet(bAnimContext *ac, ListBase *anim_data, b
/* Filter and add contents of each base (i.e. object) without them sorting first
* NOTE: This saves performance in cases where order doesn't matter
*/
- for (Base *base = scene->base.first; base; base = base->next) {
- if (animdata_filter_base_is_ok(ads, scene, base, filter_mode)) {
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ if (animdata_filter_base_is_ok(ads, base, filter_mode)) {
/* since we're still here, this object should be usable */
items += animdata_filter_dopesheet_ob(ac, anim_data, ads, base, filter_mode);
}
diff --git a/source/blender/editors/animation/anim_markers.c b/source/blender/editors/animation/anim_markers.c
index 04398e88499..107a46999f0 100644
--- a/source/blender/editors/animation/anim_markers.c
+++ b/source/blender/editors/animation/anim_markers.c
@@ -36,13 +36,14 @@
#include "DNA_object_types.h"
#include "BLI_blenlib.h"
-#include "BLI_math_base.h"
+#include "BLI_math.h"
#include "BLI_utildefines.h"
#include "BLT_translation.h"
#include "BKE_context.h"
#include "BKE_fcurve.h"
+#include "BKE_layer.h"
#include "BKE_main.h"
#include "BKE_report.h"
#include "BKE_scene.h"
@@ -56,9 +57,11 @@
#include "WM_api.h"
#include "WM_types.h"
-#include "BIF_gl.h"
#include "BIF_glutil.h"
+#include "GPU_immediate.h"
+#include "GPU_matrix.h"
+
#include "UI_interface.h"
#include "UI_interface_icons.h"
#include "UI_view2d.h"
@@ -351,19 +354,30 @@ static void draw_marker(
if (flag & DRAW_MARKERS_LINES)
#endif
{
- setlinestyle(3);
-
- if (marker->flag & SELECT)
- glColor4ub(255, 255, 255, 96);
- else
- glColor4ub(0, 0, 0, 96);
-
- glBegin(GL_LINES);
- glVertex2f(xpos + 0.5f, 12.0f);
- glVertex2f(xpos + 0.5f, (v2d->cur.ymax + 12.0f) * yscale);
- glEnd();
-
- setlinestyle(0);
+ Gwn_VertFormat *format = immVertexFormat();
+ uint pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR);
+
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2] / UI_DPI_FAC, viewport_size[3] / UI_DPI_FAC);
+
+ if (marker->flag & SELECT) {
+ immUniformColor4f(1.0f, 1.0f, 1.0f, 0.38f);
+ }
+ else {
+ immUniformColor4f(0.0f, 0.0f, 0.0f, 0.38f);
+ }
+ immUniform1f("dash_width", 6.0f);
+ immUniform1f("dash_factor", 0.5f);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2f(pos, xpos + 0.5f, 12.0f);
+ immVertex2f(pos, xpos + 0.5f, (v2d->cur.ymax + 12.0f) * yscale);
+ immEnd();
+
+ immUnbindProgram();
}
/* 5 px to offset icon to align properly, space / pixels corrects for zoom */
@@ -383,19 +397,20 @@ static void draw_marker(
/* and the marker name too, shifted slightly to the top-right */
if (marker->name[0]) {
+ unsigned char text_col[4];
float x, y;
/* minimal y coordinate which wouldn't be occluded by scroll */
int min_y = 17.0f * UI_DPI_FAC;
if (marker->flag & SELECT) {
- UI_ThemeColor(TH_TEXT_HI);
+ UI_GetThemeColor4ubv(TH_TEXT_HI, text_col);
x = xpos + 4.0f * UI_DPI_FAC;
y = (ypixels <= 39.0f * UI_DPI_FAC) ? (ypixels - 10.0f * UI_DPI_FAC) : 29.0f * UI_DPI_FAC;
y = max_ii(y, min_y);
}
else {
- UI_ThemeColor(TH_TEXT);
+ UI_GetThemeColor4ubv(TH_TEXT, text_col);
if ((marker->frame <= cfra) && (marker->frame + 5 > cfra)) {
x = xpos + 8.0f * UI_DPI_FAC;
y = (ypixels <= 39.0f * UI_DPI_FAC) ? (ypixels - 10.0f * UI_DPI_FAC) : 29.0f * UI_DPI_FAC;
@@ -409,14 +424,11 @@ static void draw_marker(
#ifdef DURIAN_CAMERA_SWITCH
if (marker->camera && (marker->camera->restrictflag & OB_RESTRICT_RENDER)) {
- float col[4];
- glGetFloatv(GL_CURRENT_COLOR, col);
- col[3] = 0.4;
- glColor4fv(col);
+ text_col[3] = 100;
}
#endif
- UI_fontstyle_draw_simple(fstyle, x, y, marker->name);
+ UI_fontstyle_draw_simple(fstyle, x, y, marker->name, text_col);
}
}
@@ -443,21 +455,27 @@ void ED_markers_draw(const bContext *C, int flag)
v2d = UI_view2d_fromcontext(C);
if (flag & DRAW_MARKERS_MARGIN) {
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
const unsigned char shade[4] = {0, 0, 0, 16};
- glColor4ubv(shade);
+ immUniformColor4ubv(shade);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glRectf(v2d->cur.xmin, 0, v2d->cur.xmax, UI_MARKER_MARGIN_Y);
+ immRectf(pos, v2d->cur.xmin, 0, v2d->cur.xmax, UI_MARKER_MARGIN_Y);
glDisable(GL_BLEND);
+
+ immUnbindProgram();
}
/* no time correction for framelen! space is drawn with old values */
ypixels = BLI_rcti_size_y(&v2d->mask);
UI_view2d_scale_get(v2d, &xscale, &yscale);
- glScalef(1.0f / xscale, 1.0f, 1.0f);
+ gpuPushMatrix();
+ gpuScale2f(1.0f / xscale, 1.0f);
/* x-bounds with offset for text (adjust for long string, avoid checking string width) */
font_width_max = (10 * UI_DPI_FAC) / xscale;
@@ -480,7 +498,7 @@ void ED_markers_draw(const bContext *C, int flag)
}
}
- glScalef(xscale, 1.0f, 1.0f);
+ gpuPopMatrix();
}
/* ************************ Marker Wrappers API ********************* */
@@ -844,7 +862,7 @@ static void ed_marker_move_apply(bContext *C, wmOperator *op)
BKE_scene_camera_switch_update(scene);
if (camera != scene->camera) {
- BKE_screen_view3d_scene_sync(sc);
+ BKE_screen_view3d_scene_sync(sc, scene);
WM_event_add_notifier(C, NC_SCENE | NA_EDITED, scene);
}
#endif
@@ -1128,12 +1146,13 @@ static int ed_marker_select(bContext *C, const wmEvent *event, bool extend, bool
if (camera) {
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Base *base;
TimeMarker *marker;
int sel = 0;
if (!extend)
- BKE_scene_base_deselect_all(scene);
+ BKE_view_layer_base_deselect_all(view_layer);
for (marker = markers->first; marker; marker = marker->next) {
if (marker->frame == cfra) {
@@ -1145,11 +1164,11 @@ static int ed_marker_select(bContext *C, const wmEvent *event, bool extend, bool
for (marker = markers->first; marker; marker = marker->next) {
if (marker->camera) {
if (marker->frame == cfra) {
- base = BKE_scene_base_find(scene, marker->camera);
+ base = BKE_view_layer_base_find(view_layer, marker->camera);
if (base) {
- ED_base_object_select(base, sel);
+ ED_object_base_select(base, sel);
if (sel)
- ED_base_object_activate(C, base);
+ ED_object_base_activate(C, base);
}
}
}
@@ -1532,7 +1551,7 @@ static int ed_marker_camera_bind_exec(bContext *C, wmOperator *UNUSED(op))
/* camera may have changes */
BKE_scene_camera_switch_update(scene);
- BKE_screen_view3d_scene_sync(sc);
+ BKE_screen_view3d_scene_sync(sc, scene);
WM_event_add_notifier(C, NC_SCENE | ND_MARKERS, NULL);
WM_event_add_notifier(C, NC_ANIMATION | ND_MARKERS, NULL);
diff --git a/source/blender/editors/animation/drivers.c b/source/blender/editors/animation/drivers.c
index 24eb6451c5d..2d04f73c4ac 100644
--- a/source/blender/editors/animation/drivers.c
+++ b/source/blender/editors/animation/drivers.c
@@ -44,11 +44,13 @@
#include "DNA_texture_types.h"
#include "BKE_animsys.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
#include "BKE_context.h"
#include "BKE_report.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#include "ED_keyframing.h"
#include "UI_interface.h"
@@ -843,7 +845,7 @@ static int add_driver_button_none(bContext *C, wmOperator *op, short mapping_typ
if (success) {
/* send updates */
UI_context_update_anim_flag(C);
- DAG_relations_tag_update(CTX_data_main(C));
+ DEG_relations_tag_update(CTX_data_main(C));
WM_event_add_notifier(C, NC_ANIMATION | ND_FCURVES_ORDER, NULL); // XXX
return OPERATOR_FINISHED;
@@ -941,7 +943,7 @@ static int remove_driver_button_exec(bContext *C, wmOperator *op)
if (success) {
/* send updates */
UI_context_update_anim_flag(C);
- DAG_relations_tag_update(CTX_data_main(C));
+ DEG_relations_tag_update(CTX_data_main(C));
WM_event_add_notifier(C, NC_ANIMATION | ND_FCURVES_ORDER, NULL); // XXX
}
@@ -1031,8 +1033,8 @@ static int paste_driver_button_exec(bContext *C, wmOperator *op)
UI_context_update_anim_flag(C);
- DAG_relations_tag_update(CTX_data_main(C));
- DAG_id_tag_update(ptr.id.data, OB_RECALC_OB | OB_RECALC_DATA);
+ DEG_relations_tag_update(CTX_data_main(C));
+ DEG_id_tag_update(ptr.id.data, OB_RECALC_OB | OB_RECALC_DATA);
WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME_PROP, NULL); // XXX
diff --git a/source/blender/editors/animation/keyframes_draw.c b/source/blender/editors/animation/keyframes_draw.c
index f25dbf2381c..12803854a42 100644
--- a/source/blender/editors/animation/keyframes_draw.c
+++ b/source/blender/editors/animation/keyframes_draw.c
@@ -52,7 +52,8 @@
#include "BKE_fcurve.h"
-#include "BIF_gl.h"
+#include "GPU_draw.h"
+#include "GPU_immediate.h"
#include "UI_resources.h"
#include "UI_view2d.h"
@@ -463,49 +464,15 @@ bool actkeyblock_is_valid(ActKeyBlock *ab, DLRBT_Tree *keys)
/* *************************** Keyframe Drawing *************************** */
-/* coordinates for diamond shape */
-static const float _unit_diamond_shape[4][2] = {
- {0.0f, 1.0f}, /* top vert */
- {1.0f, 0.0f}, /* mid-right */
- {0.0f, -1.0f}, /* bottom vert */
- {-1.0f, 0.0f} /* mid-left */
-};
-
-/* draw a simple diamond shape with OpenGL */
-void draw_keyframe_shape(float x, float y, float xscale, float hsize, short sel, short key_type, short mode, float alpha)
+void draw_keyframe_shape(float x, float y, float size, bool sel, short key_type, short mode, float alpha,
+ unsigned int pos_id, unsigned int size_id, unsigned int color_id, unsigned int outline_color_id)
{
- static GLuint displist1 = 0;
- static GLuint displist2 = 0;
-
- /* initialize 2 display lists for diamond shape - one empty, one filled */
- if (displist1 == 0) {
- displist1 = glGenLists(1);
- glNewList(displist1, GL_COMPILE);
-
- glBegin(GL_LINE_LOOP);
- glVertex2fv(_unit_diamond_shape[0]);
- glVertex2fv(_unit_diamond_shape[1]);
- glVertex2fv(_unit_diamond_shape[2]);
- glVertex2fv(_unit_diamond_shape[3]);
- glEnd();
-
- glEndList();
- }
- if (displist2 == 0) {
- displist2 = glGenLists(1);
- glNewList(displist2, GL_COMPILE);
-
- glBegin(GL_QUADS);
- glVertex2fv(_unit_diamond_shape[0]);
- glVertex2fv(_unit_diamond_shape[1]);
- glVertex2fv(_unit_diamond_shape[2]);
- glVertex2fv(_unit_diamond_shape[3]);
- glEnd();
-
- glEndList();
- }
-
- /* tweak size of keyframe shape according to type of keyframe
+ bool draw_fill = ELEM(mode, KEYFRAME_SHAPE_INSIDE, KEYFRAME_SHAPE_BOTH);
+ bool draw_outline = ELEM(mode, KEYFRAME_SHAPE_FRAME, KEYFRAME_SHAPE_BOTH);
+
+ BLI_assert(draw_fill || draw_outline);
+
+ /* tweak size of keyframe shape according to type of keyframe
* - 'proper' keyframes have key_type = 0, so get drawn at full size
*/
switch (key_type) {
@@ -513,120 +480,93 @@ void draw_keyframe_shape(float x, float y, float xscale, float hsize, short sel,
break;
case BEZT_KEYTYPE_BREAKDOWN: /* slightly smaller than normal keyframe */
- hsize *= 0.85f;
+ size *= 0.85f;
break;
case BEZT_KEYTYPE_MOVEHOLD: /* slightly smaller than normal keyframes (but by less than for breakdowns) */
- //hsize *= 0.72f;
- hsize *= 0.95f;
+ size *= 0.925f;
break;
case BEZT_KEYTYPE_EXTREME: /* slightly larger */
- hsize *= 1.2f;
+ size *= 1.2f;
break;
default:
- hsize -= 0.5f * key_type;
- break;
+ size -= 0.8f * key_type;
}
-
- /* adjust view transform before starting */
- glTranslatef(x, y, 0.0f);
- glScalef(1.0f / xscale * hsize, hsize, 1.0f);
-
- /* anti-aliased lines for more consistent appearance */
- glEnable(GL_LINE_SMOOTH);
-
+
+ unsigned char fill_col[4];
+ unsigned char outline_col[4];
+
/* draw! */
- if (ELEM(mode, KEYFRAME_SHAPE_INSIDE, KEYFRAME_SHAPE_BOTH)) {
- float inner_col[4];
-
+ if (draw_fill) {
/* get interior colors from theme (for selected and unselected only) */
switch (key_type) {
case BEZT_KEYTYPE_BREAKDOWN: /* bluish frames (default theme) */
- {
- if (sel) UI_GetThemeColor4fv(TH_KEYTYPE_BREAKDOWN_SELECT, inner_col);
- else UI_GetThemeColor4fv(TH_KEYTYPE_BREAKDOWN, inner_col);
+ UI_GetThemeColor4ubv(sel ? TH_KEYTYPE_BREAKDOWN_SELECT : TH_KEYTYPE_BREAKDOWN, fill_col);
break;
- }
case BEZT_KEYTYPE_EXTREME: /* reddish frames (default theme) */
- {
- if (sel) UI_GetThemeColor4fv(TH_KEYTYPE_EXTREME_SELECT, inner_col);
- else UI_GetThemeColor4fv(TH_KEYTYPE_EXTREME, inner_col);
+ UI_GetThemeColor4ubv(sel ? TH_KEYTYPE_EXTREME_SELECT : TH_KEYTYPE_EXTREME, fill_col);
break;
- }
case BEZT_KEYTYPE_JITTER: /* greenish frames (default theme) */
- {
- if (sel) UI_GetThemeColor4fv(TH_KEYTYPE_JITTER_SELECT, inner_col);
- else UI_GetThemeColor4fv(TH_KEYTYPE_JITTER, inner_col);
+ UI_GetThemeColor4ubv(sel ? TH_KEYTYPE_JITTER_SELECT : TH_KEYTYPE_JITTER, fill_col);
break;
- }
case BEZT_KEYTYPE_MOVEHOLD: /* similar to traditional keyframes, but different... */
- {
/* XXX: Should these get their own theme options instead? */
- if (sel) UI_GetThemeColorShade4fv(TH_STRIP_SELECT, 35, inner_col);
- else UI_GetThemeColorShade4fv(TH_STRIP, 50, inner_col);
-
- inner_col[3] = 1.0f; /* full opacity, to avoid problems with visual glitches */
+ if (sel) UI_GetThemeColorShade3ubv(TH_STRIP_SELECT, 35, fill_col);
+ else UI_GetThemeColorShade3ubv(TH_STRIP, 50, fill_col);
+ fill_col[3] = 255; /* full opacity, to avoid problems with visual glitches */
break;
- }
case BEZT_KEYTYPE_KEYFRAME: /* traditional yellowish frames (default theme) */
default:
- {
- if (sel) UI_GetThemeColor4fv(TH_KEYTYPE_KEYFRAME_SELECT, inner_col);
- else UI_GetThemeColor4fv(TH_KEYTYPE_KEYFRAME, inner_col);
- break;
- }
+ UI_GetThemeColor4ubv(sel ? TH_KEYTYPE_KEYFRAME_SELECT : TH_KEYTYPE_KEYFRAME, fill_col);
}
/* NOTE: we don't use the straight alpha from the theme, or else effects such as
* graying out protected/muted channels doesn't work correctly!
*/
- inner_col[3] *= alpha;
- glColor4fv(inner_col);
-
- /* draw the "filled in" interior poly now */
- glCallList(displist2);
+ fill_col[3] *= alpha;
+
+ if (!draw_outline) {
+ /* force outline color to match */
+ outline_col[0] = fill_col[0];
+ outline_col[1] = fill_col[1];
+ outline_col[2] = fill_col[2];
+ outline_col[3] = fill_col[3];
+ }
}
-
- if (ELEM(mode, KEYFRAME_SHAPE_FRAME, KEYFRAME_SHAPE_BOTH)) {
- float border_col[4];
-
+
+ if (draw_outline) {
/* exterior - black frame */
- if (sel) UI_GetThemeColor4fv(TH_KEYBORDER_SELECT, border_col);
- else UI_GetThemeColor4fv(TH_KEYBORDER, border_col);
-
- border_col[3] *= alpha;
- glColor4fv(border_col);
-
- glCallList(displist1);
+ UI_GetThemeColor4ubv(sel ? TH_KEYBORDER_SELECT : TH_KEYBORDER, outline_col);
+ outline_col[3] *= alpha;
+
+ if (!draw_fill) {
+ /* fill color needs to be (outline.rgb, 0) */
+ fill_col[0] = outline_col[0];
+ fill_col[1] = outline_col[1];
+ fill_col[2] = outline_col[2];
+ fill_col[3] = 0;
+ }
}
-
- glDisable(GL_LINE_SMOOTH);
-
- /* restore view transform */
- glScalef(xscale / hsize, 1.0f / hsize, 1.0f);
- glTranslatef(-x, -y, 0.0f);
+
+ immAttrib1f(size_id, size);
+ immAttrib4ubv(color_id, fill_col);
+ immAttrib4ubv(outline_color_id, outline_col);
+ immVertex2f(pos_id, x, y);
}
static void draw_keylist(View2D *v2d, DLRBT_Tree *keys, DLRBT_Tree *blocks, float ypos, float yscale_fac, bool channelLocked)
{
- ActKeyColumn *ak;
- ActKeyBlock *ab;
- float alpha;
- float xscale;
-
- const float iconsize = (U.widget_unit / 4.0f) * yscale_fac;
- const float mhsize = iconsize * 0.7f;
+ const float icon_sz = U.widget_unit * 0.5f * yscale_fac;
+ const float half_icon_sz = 0.5f * icon_sz;
+ const float smaller_sz = 0.35f * icon_sz;
glEnable(GL_BLEND);
- /* get View2D scaling factor */
- UI_view2d_scale_get(v2d, &xscale, NULL);
-
/* locked channels are less strongly shown, as feedback for locked channels in DopeSheet */
/* TODO: allow this opacity factor to be themed? */
- alpha = (channelLocked) ? 0.25f : 1.0f;
+ float alpha = channelLocked ? 0.25f : 1.0f;
/* draw keyblocks */
if (blocks) {
@@ -644,45 +584,59 @@ static void draw_keylist(View2D *v2d, DLRBT_Tree *keys, DLRBT_Tree *blocks, floa
sel_mhcol[3] *= 0.8f;
copy_v4_v4(unsel_mhcol, unsel_color);
unsel_mhcol[3] *= 0.8f;
-
+
+ unsigned int pos_id = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
/* NOTE: the tradeoff for changing colors between each draw is dwarfed by the cost of checking validity */
- for (ab = blocks->first; ab; ab = ab->next) {
+ for (ActKeyBlock *ab = blocks->first; ab; ab = ab->next) {
if (actkeyblock_is_valid(ab, keys)) {
if (ab->flag & ACTKEYBLOCK_FLAG_MOVING_HOLD) {
/* draw "moving hold" long-keyframe block - slightly smaller */
- if (ab->sel)
- glColor4fv(sel_mhcol);
- else
- glColor4fv(unsel_mhcol);
-
- glRectf(ab->start, ypos - mhsize, ab->end, ypos + mhsize);
+ immUniformColor4fv(ab->sel ? sel_mhcol : unsel_mhcol);
+ immRectf(pos_id, ab->start, ypos - smaller_sz, ab->end, ypos + smaller_sz);
}
else {
/* draw standard long-keyframe block */
- if (ab->sel)
- glColor4fv(sel_color);
- else
- glColor4fv(unsel_color);
-
- glRectf(ab->start, ypos - iconsize, ab->end, ypos + iconsize);
+ immUniformColor4fv(ab->sel ? sel_color : unsel_color);
+ immRectf(pos_id, ab->start, ypos - half_icon_sz, ab->end, ypos + half_icon_sz);
}
}
}
+ immUnbindProgram();
}
- /* draw keys */
if (keys) {
- for (ak = keys->first; ak; ak = ak->next) {
+ /* count keys */
+ unsigned int key_ct = 0;
+ for (ActKeyColumn *ak = keys->first; ak; ak = ak->next) {
/* optimization: if keyframe doesn't appear within 5 units (screenspace) in visible area, don't draw
* - this might give some improvements, since we current have to flip between view/region matrices
*/
- if (IN_RANGE_INCL(ak->cfra, v2d->cur.xmin, v2d->cur.xmax) == 0)
- continue;
-
- /* draw using OpenGL - uglier but faster */
- /* NOTE1: a previous version of this didn't work nice for some intel cards
- * NOTE2: if we wanted to go back to icons, these are icon = (ak->sel & SELECT) ? ICON_SPACE2 : ICON_SPACE3; */
- draw_keyframe_shape(ak->cfra, ypos, xscale, iconsize, (ak->sel & SELECT), ak->key_type, KEYFRAME_SHAPE_BOTH, alpha);
+ if (IN_RANGE_INCL(ak->cfra, v2d->cur.xmin, v2d->cur.xmax))
+ key_ct++;
+ }
+
+ if (key_ct > 0) {
+ /* draw keys */
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos_id = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int size_id = GWN_vertformat_attr_add(format, "size", GWN_COMP_F32, 1, GWN_FETCH_FLOAT);
+ unsigned int color_id = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 4, GWN_FETCH_INT_TO_FLOAT_UNIT);
+ unsigned int outline_color_id = GWN_vertformat_attr_add(format, "outlineColor", GWN_COMP_U8, 4, GWN_FETCH_INT_TO_FLOAT_UNIT);
+ immBindBuiltinProgram(GPU_SHADER_KEYFRAME_DIAMOND);
+ GPU_enable_program_point_size();
+ immBegin(GWN_PRIM_POINTS, key_ct);
+
+ for (ActKeyColumn *ak = keys->first; ak; ak = ak->next) {
+ if (IN_RANGE_INCL(ak->cfra, v2d->cur.xmin, v2d->cur.xmax)) {
+ draw_keyframe_shape(ak->cfra, ypos, icon_sz, (ak->sel & SELECT), ak->key_type, KEYFRAME_SHAPE_BOTH, alpha,
+ pos_id, size_id, color_id, outline_color_id);
+ }
+ }
+
+ immEnd();
+ GPU_disable_program_point_size();
+ immUnbindProgram();
}
}
diff --git a/source/blender/editors/animation/keyframing.c b/source/blender/editors/animation/keyframing.c
index 94dc15278a1..6df0a1cd302 100644
--- a/source/blender/editors/animation/keyframing.c
+++ b/source/blender/editors/animation/keyframing.c
@@ -56,7 +56,6 @@
#include "BKE_animsys.h"
#include "BKE_action.h"
#include "BKE_armature.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
#include "BKE_idcode.h"
#include "BKE_nla.h"
@@ -66,6 +65,9 @@
#include "BKE_key.h"
#include "BKE_material.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#include "ED_anim_api.h"
#include "ED_keyframing.h"
#include "ED_keyframes_edit.h"
@@ -155,7 +157,7 @@ bAction *verify_adt_action(ID *id, short add)
/* tag depsgraph to be rebuilt to include time dependency */
/* XXX: we probably should have bmain passed down, but that involves altering too many API's */
- DAG_relations_tag_update(G.main);
+ DEG_relations_tag_update(G.main);
}
/* return the action */
@@ -1577,6 +1579,9 @@ void ANIM_OT_keyframe_delete(wmOperatorType *ot)
static int clear_anim_v3d_exec(bContext *C, wmOperator *UNUSED(op))
{
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
bool changed = false;
CTX_DATA_BEGIN (C, Object *, ob, selected_objects)
@@ -1593,7 +1598,7 @@ static int clear_anim_v3d_exec(bContext *C, wmOperator *UNUSED(op))
fcn = fcu->next;
/* in pose mode, only delete the F-Curve if it belongs to a selected bone */
- if (ob->mode & OB_MODE_POSE) {
+ if (eval_ctx.object_mode & OB_MODE_POSE) {
if ((fcu->rna_path) && strstr(fcu->rna_path, "pose.bones[")) {
bPoseChannel *pchan;
char *bone_name;
@@ -1618,7 +1623,7 @@ static int clear_anim_v3d_exec(bContext *C, wmOperator *UNUSED(op))
/* delete F-Curve completely */
if (can_delete) {
ANIM_fcurve_delete_from_animdata(NULL, adt, fcu);
- DAG_id_tag_update(&ob->id, OB_RECALC_OB);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB);
changed = true;
}
}
@@ -1656,8 +1661,10 @@ void ANIM_OT_keyframe_clear_v3d(wmOperatorType *ot)
static int delete_key_v3d_exec(bContext *C, wmOperator *op)
{
- Scene *scene = CTX_data_scene(C);
- float cfra = (float)CFRA;
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
+ const float cfra = eval_ctx.ctime;
CTX_DATA_BEGIN (C, Object *, ob, selected_objects)
{
@@ -1685,7 +1692,7 @@ static int delete_key_v3d_exec(bContext *C, wmOperator *op)
/* special exception for bones, as this makes this operator more convenient to use
* NOTE: This is only done in pose mode. In object mode, we're dealign with the entire object.
*/
- if ((ob->mode & OB_MODE_POSE) && strstr(fcu->rna_path, "pose.bones[\"")) {
+ if ((eval_ctx.object_mode & OB_MODE_POSE) && strstr(fcu->rna_path, "pose.bones[\"")) {
bPoseChannel *pchan;
char *bone_name;
@@ -1725,7 +1732,7 @@ static int delete_key_v3d_exec(bContext *C, wmOperator *op)
else
BKE_reportf(op->reports, RPT_ERROR, "No keyframes removed from Object '%s'", id->name + 2);
- DAG_id_tag_update(&ob->id, OB_RECALC_OB);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB);
}
CTX_DATA_END;
diff --git a/source/blender/editors/animation/keyingsets.c b/source/blender/editors/animation/keyingsets.c
index ad08caba799..da206ac9a64 100644
--- a/source/blender/editors/animation/keyingsets.c
+++ b/source/blender/editors/animation/keyingsets.c
@@ -48,9 +48,10 @@
#include "BKE_main.h"
#include "BKE_animsys.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_report.h"
+#include "DEG_depsgraph.h"
+
#include "ED_keyframing.h"
#include "ED_screen.h"
@@ -1049,7 +1050,7 @@ int ANIM_apply_keyingset(bContext *C, ListBase *dsources, bAction *act, KeyingSe
Object *ob = (Object *)ksp->id;
// XXX: only object transforms?
- DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
break;
}
default:
diff --git a/source/blender/editors/armature/CMakeLists.txt b/source/blender/editors/armature/CMakeLists.txt
index b213aca478f..5348298f57e 100644
--- a/source/blender/editors/armature/CMakeLists.txt
+++ b/source/blender/editors/armature/CMakeLists.txt
@@ -23,6 +23,7 @@ set(INC
../../blenkernel
../../blenlib
../../blentranslation
+ ../../depsgraph
../../gpu
../../makesdna
../../makesrna
diff --git a/source/blender/editors/armature/armature_naming.c b/source/blender/editors/armature/armature_naming.c
index 2d7a83f20c1..0d114206c6b 100644
--- a/source/blender/editors/armature/armature_naming.c
+++ b/source/blender/editors/armature/armature_naming.c
@@ -48,11 +48,12 @@
#include "BKE_constraint.h"
#include "BKE_context.h"
#include "BKE_deform.h"
-#include "BKE_depsgraph.h"
#include "BKE_global.h"
#include "BKE_main.h"
#include "BKE_modifier.h"
+#include "DEG_depsgraph.h"
+
#include "RNA_access.h"
#include "RNA_define.h"
@@ -375,7 +376,7 @@ static int armature_flip_names_exec(bContext *C, wmOperator *UNUSED(op))
BLI_freelistN(&bones_names);
/* since we renamed stuff... */
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
/* copied from #rna_Bone_update_renamed */
/* redraw view */
@@ -425,7 +426,7 @@ static int armature_autoside_names_exec(bContext *C, wmOperator *op)
CTX_DATA_END;
/* since we renamed stuff... */
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
/* note, notifier might evolve */
WM_event_add_notifier(C, NC_OBJECT | ND_POSE, ob);
diff --git a/source/blender/editors/armature/armature_relations.c b/source/blender/editors/armature/armature_relations.c
index dfe7876175f..8fc7aeaf029 100644
--- a/source/blender/editors/armature/armature_relations.c
+++ b/source/blender/editors/armature/armature_relations.c
@@ -47,12 +47,15 @@
#include "BKE_animsys.h"
#include "BKE_constraint.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
#include "BKE_global.h"
+#include "BKE_layer.h"
#include "BKE_main.h"
#include "BKE_report.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#include "RNA_access.h"
#include "RNA_define.h"
@@ -278,7 +281,6 @@ int join_armature_exec(bContext *C, wmOperator *op)
/* get pose of active object and move it out of posemode */
pose = ob->pose;
- ob->mode &= ~OB_MODE_POSE;
CTX_DATA_BEGIN(C, Base *, base, selected_editable_bases)
{
@@ -299,8 +301,6 @@ int join_armature_exec(bContext *C, wmOperator *op)
/* Get Pose of current armature */
opose = base->object->pose;
- base->object->mode &= ~OB_MODE_POSE;
- //BASACT->flag &= ~OB_MODE_POSE;
/* Find the difference matrix */
invert_m4_m4(oimat, ob->obmat);
@@ -390,12 +390,12 @@ int join_armature_exec(bContext *C, wmOperator *op)
}
/* Free the old object data */
- ED_base_object_free_and_unlink(bmain, scene, base);
+ ED_object_base_free_and_unlink(bmain, scene, base->object);
}
}
CTX_DATA_END;
- DAG_relations_tag_update(bmain); /* because we removed object(s) */
+ DEG_relations_tag_update(bmain); /* because we removed object(s) */
ED_armature_from_edit(arm);
ED_armature_edit_free(arm);
@@ -569,6 +569,7 @@ static int separate_armature_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Object *obedit = CTX_data_edit_object(C);
Object *oldob, *newob;
Base *oldbase, *newbase;
@@ -592,28 +593,30 @@ static int separate_armature_exec(bContext *C, wmOperator *op)
/* TODO: use context iterators for this? */
CTX_DATA_BEGIN(C, Base *, base, visible_bases)
{
- if (base->object == obedit) base->flag |= SELECT;
- else base->flag &= ~SELECT;
+ if (base->object == obedit) {
+ ED_object_base_select(base, BA_SELECT);
+ }
+ else {
+ ED_object_base_select(base, BA_DESELECT);
+ }
}
CTX_DATA_END;
/* 1) store starting settings and exit editmode */
oldob = obedit;
- oldbase = BASACT;
- oldob->mode &= ~OB_MODE_POSE;
- //oldbase->flag &= ~OB_POSEMODE;
+ oldbase = view_layer->basact;
ED_armature_from_edit(obedit->data);
ED_armature_edit_free(obedit->data);
/* 2) duplicate base */
- newbase = ED_object_add_duplicate(bmain, scene, oldbase, USER_DUP_ARM); /* only duplicate linked armature */
- DAG_relations_tag_update(bmain);
+ newbase = ED_object_add_duplicate(bmain, scene, view_layer, oldbase, USER_DUP_ARM); /* only duplicate linked armature */
+ DEG_relations_tag_update(bmain);
newob = newbase->object;
- newbase->flag &= ~SELECT;
-
-
+ newbase->flag &= ~BASE_SELECTED;
+
+
/* 3) remove bones that shouldn't still be around on both armatures */
separate_armature_bones(oldob, 1);
separate_armature_bones(newob, 0);
@@ -622,8 +625,8 @@ static int separate_armature_exec(bContext *C, wmOperator *op)
/* 4) fix links before depsgraph flushes */ // err... or after?
separated_armature_fix_links(oldob, newob);
- DAG_id_tag_update(&oldob->id, OB_RECALC_DATA); /* this is the original one */
- DAG_id_tag_update(&newob->id, OB_RECALC_DATA); /* this is the separated one */
+ DEG_id_tag_update(&oldob->id, OB_RECALC_DATA); /* this is the original one */
+ DEG_id_tag_update(&newob->id, OB_RECALC_DATA); /* this is the separated one */
/* 5) restore original conditions */
diff --git a/source/blender/editors/armature/armature_select.c b/source/blender/editors/armature/armature_select.c
index fc295647ed5..b87942fed84 100644
--- a/source/blender/editors/armature/armature_select.c
+++ b/source/blender/editors/armature/armature_select.c
@@ -53,6 +53,8 @@
#include "ED_screen.h"
#include "ED_view3d.h"
+#include "DEG_depsgraph.h"
+
#include "armature_intern.h"
/* utility macros for storing a temp int in the bone (selection flag) */
@@ -98,7 +100,7 @@ void *get_bone_from_selectbuffer(
/* Determine what the current bone is */
if (obedit == NULL || base->object != obedit) {
/* no singular posemode, so check for correct object */
- if (base->selcol == (hitresult & 0xFFFF)) {
+ if (base->object->select_color == (hitresult & 0xFFFF)) {
bone = get_indexed_bone(base->object, hitresult);
if (findunsel)
@@ -166,21 +168,23 @@ void *get_bone_from_selectbuffer(
/* x and y are mouse coords (area space) */
void *get_nearest_bone(bContext *C, const int xy[2], bool findunsel)
{
+ EvaluationContext eval_ctx;
ViewContext vc;
rcti rect;
unsigned int buffer[MAXPICKBUF];
short hits;
-
+
+ CTX_data_eval_ctx(C, &eval_ctx);
view3d_set_viewcontext(C, &vc);
// rect.xmin = ... mouseco!
rect.xmin = rect.xmax = xy[0];
rect.ymin = rect.ymax = xy[1];
- hits = view3d_opengl_select(&vc, buffer, MAXPICKBUF, &rect, VIEW3D_SELECT_PICK_NEAREST);
+ hits = view3d_opengl_select(&eval_ctx, &vc, buffer, MAXPICKBUF, &rect, VIEW3D_SELECT_PICK_NEAREST);
if (hits > 0)
- return get_bone_from_selectbuffer(vc.scene, vc.scene->basact, buffer, hits, findunsel, true);
+ return get_bone_from_selectbuffer(vc.scene, vc.view_layer->basact, buffer, hits, findunsel, true);
return NULL;
}
@@ -291,7 +295,7 @@ static int selectbuffer_ret_hits_5(unsigned int *buffer, const int hits12, const
/* does bones and points */
/* note that BONE ROOT only gets drawn for root bones (or without IK) */
static EditBone *get_nearest_editbonepoint(
- ViewContext *vc, const int mval[2],
+ const EvaluationContext *eval_ctx, ViewContext *vc, const int mval[2],
ListBase *edbo, bool findunsel, bool use_cycle, int *r_selmask)
{
bArmature *arm = (bArmature *)vc->obedit->data;
@@ -344,7 +348,7 @@ static EditBone *get_nearest_editbonepoint(
view3d_opengl_select_cache_begin();
BLI_rcti_init_pt_radius(&rect, mval, 12);
- hits12 = view3d_opengl_select(vc, buffer, MAXPICKBUF, &rect, select_mode);
+ hits12 = view3d_opengl_select(eval_ctx, vc, buffer, MAXPICKBUF, &rect, select_mode);
if (hits12 == 1) {
hits = selectbuffer_ret_hits_12(buffer, hits12);
goto cache_end;
@@ -354,7 +358,7 @@ static EditBone *get_nearest_editbonepoint(
offs = 4 * hits12;
BLI_rcti_init_pt_radius(&rect, mval, 5);
- hits5 = view3d_opengl_select(vc, buffer + offs, MAXPICKBUF - offs, &rect, select_mode);
+ hits5 = view3d_opengl_select(eval_ctx, vc, buffer + offs, MAXPICKBUF - offs, &rect, select_mode);
if (hits5 == 1) {
hits = selectbuffer_ret_hits_5(buffer, hits12, hits5);
@@ -482,17 +486,19 @@ bool ED_armature_select_pick(bContext *C, const int mval[2], bool extend, bool d
{
Object *obedit = CTX_data_edit_object(C);
bArmature *arm = obedit->data;
+ EvaluationContext eval_ctx;
ViewContext vc;
EditBone *nearBone = NULL;
int selmask;
+ CTX_data_eval_ctx(C, &eval_ctx);
view3d_set_viewcontext(C, &vc);
-
+
if (BIF_sk_selectStroke(C, mval, extend)) {
return true;
}
- nearBone = get_nearest_editbonepoint(&vc, mval, arm->edbo, true, true, &selmask);
+ nearBone = get_nearest_editbonepoint(&eval_ctx, &vc, mval, arm->edbo, true, true, &selmask);
if (nearBone) {
if (!extend && !deselect && !toggle) {
diff --git a/source/blender/editors/armature/armature_skinning.c b/source/blender/editors/armature/armature_skinning.c
index e8d41f722d7..8900da900c0 100644
--- a/source/blender/editors/armature/armature_skinning.c
+++ b/source/blender/editors/armature/armature_skinning.c
@@ -43,12 +43,15 @@
#include "BKE_action.h"
#include "BKE_armature.h"
+#include "BKE_context.h"
#include "BKE_deform.h"
#include "BKE_object_deform.h"
#include "BKE_report.h"
#include "BKE_subsurf.h"
#include "BKE_modifier.h"
+#include "DEG_depsgraph.h"
+
#include "ED_armature.h"
#include "ED_mesh.h"
@@ -63,7 +66,7 @@
/* ********************************** Bone Skinning *********************************************** */
-static int bone_skinnable_cb(Object *ob, Bone *bone, void *datap)
+static int bone_skinnable_cb(Object *UNUSED(ob), Bone *bone, void *datap)
{
/* Bones that are deforming
* are regarded to be "skinnable" and are eligible for
@@ -89,9 +92,9 @@ static int bone_skinnable_cb(Object *ob, Bone *bone, void *datap)
*/
Bone ***hbone;
int a, segments;
- struct { Object *armob; void *list; int heat; } *data = datap;
+ struct { Object *armob; void *list; int heat; bool is_weight_paint; } *data = datap;
- if (!(ob->mode & OB_MODE_WEIGHT_PAINT) || !(bone->flag & BONE_HIDDEN_P)) {
+ if (!(data->is_weight_paint) || !(bone->flag & BONE_HIDDEN_P)) {
if (!(bone->flag & BONE_NO_DEFORM)) {
if (data->heat && data->armob->pose && BKE_pose_channel_find_name(data->armob->pose, bone->name))
segments = bone->segments;
@@ -154,18 +157,17 @@ static int dgroup_skinnable_cb(Object *ob, Bone *bone, void *datap)
*/
bDeformGroup ***hgroup, *defgroup = NULL;
int a, segments;
- struct { Object *armob; void *list; int heat; } *data = datap;
- int wpmode = (ob->mode & OB_MODE_WEIGHT_PAINT);
+ struct { Object *armob; void *list; int heat; bool is_weight_paint; } *data = datap;
bArmature *arm = data->armob->data;
- if (!wpmode || !(bone->flag & BONE_HIDDEN_P)) {
+ if (!data->is_weight_paint || !(bone->flag & BONE_HIDDEN_P)) {
if (!(bone->flag & BONE_NO_DEFORM)) {
if (data->heat && data->armob->pose && BKE_pose_channel_find_name(data->armob->pose, bone->name))
segments = bone->segments;
else
segments = 1;
- if (!wpmode || ((arm->layer & bone->layer) && (bone->flag & BONE_SELECTED))) {
+ if (!data->is_weight_paint || ((arm->layer & bone->layer) && (bone->flag & BONE_SELECTED))) {
if (!(defgroup = defgroup_find_name(ob, bone->name))) {
defgroup = BKE_object_defgroup_add_name(ob, bone->name);
}
@@ -189,9 +191,11 @@ static int dgroup_skinnable_cb(Object *ob, Bone *bone, void *datap)
return 0;
}
-static void envelope_bone_weighting(Object *ob, Mesh *mesh, float (*verts)[3], int numbones, Bone **bonelist,
- bDeformGroup **dgrouplist, bDeformGroup **dgroupflip,
- float (*root)[3], float (*tip)[3], const int *selected, float scale)
+static void envelope_bone_weighting(
+ const EvaluationContext *eval_ctx,
+ Object *ob, Mesh *mesh, float (*verts)[3], int numbones, Bone **bonelist,
+ bDeformGroup **dgrouplist, bDeformGroup **dgroupflip,
+ float (*root)[3], float (*tip)[3], const int *selected, float scale)
{
/* Create vertex group weights from envelopes */
@@ -202,7 +206,7 @@ static void envelope_bone_weighting(Object *ob, Mesh *mesh, float (*verts)[3], i
bool use_topology = (mesh->editflag & ME_EDIT_MIRROR_TOPO) != 0;
bool use_mask = false;
- if ((ob->mode & OB_MODE_WEIGHT_PAINT) &&
+ if ((eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT) &&
(mesh->editflag & (ME_EDIT_PAINT_FACE_SEL | ME_EDIT_PAINT_VERT_SEL)))
{
use_mask = true;
@@ -247,8 +251,9 @@ static void envelope_bone_weighting(Object *ob, Mesh *mesh, float (*verts)[3], i
}
}
-static void add_verts_to_dgroups(ReportList *reports, Scene *scene, Object *ob, Object *par,
- int heat, const bool mirror)
+static void add_verts_to_dgroups(
+ ReportList *reports, const EvaluationContext *eval_ctx, Scene *scene, Object *ob, Object *par,
+ int heat, const bool mirror)
{
/* This functions implements the automatic computation of vertex group
* weights, either through envelopes or using a heat equilibrium.
@@ -272,12 +277,12 @@ static void add_verts_to_dgroups(ReportList *reports, Scene *scene, Object *ob,
float (*root)[3], (*tip)[3], (*verts)[3];
int *selected;
int numbones, vertsfilled = 0, i, j, segments = 0;
- int wpmode = (ob->mode & OB_MODE_WEIGHT_PAINT);
- struct { Object *armob; void *list; int heat; } looper_data;
+ struct { Object *armob; void *list; int heat; bool is_weight_paint; } looper_data;
looper_data.armob = par;
looper_data.heat = heat;
looper_data.list = NULL;
+ looper_data.is_weight_paint = (eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT);
/* count the number of skinnable bones */
numbones = bone_looper(ob, arm->bonebase.first, &looper_data, bone_skinnable_cb);
@@ -350,7 +355,7 @@ static void add_verts_to_dgroups(ReportList *reports, Scene *scene, Object *ob,
mul_m4_v3(par->obmat, tip[j]);
/* set selected */
- if (wpmode) {
+ if (eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT) {
if ((arm->layer & bone->layer) && (bone->flag & BONE_SELECTED))
selected[j] = 1;
}
@@ -370,9 +375,9 @@ static void add_verts_to_dgroups(ReportList *reports, Scene *scene, Object *ob,
mesh = (Mesh *)ob->data;
verts = MEM_callocN(mesh->totvert * sizeof(*verts), "closestboneverts");
- if (wpmode) {
+ if (eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT) {
/* if in weight paint mode, use final verts from derivedmesh */
- DerivedMesh *dm = mesh_get_derived_final(scene, ob, CD_MASK_BAREMESH);
+ DerivedMesh *dm = mesh_get_derived_final(eval_ctx, scene, ob, CD_MASK_BAREMESH);
if (dm->foreachMappedVert) {
mesh_get_mapped_verts_coords(dm, verts, mesh->totvert);
@@ -400,15 +405,17 @@ static void add_verts_to_dgroups(ReportList *reports, Scene *scene, Object *ob,
if (heat) {
const char *error = NULL;
- heat_bone_weighting(ob, mesh, verts, numbones, dgrouplist, dgroupflip,
- root, tip, selected, &error);
+ heat_bone_weighting(
+ eval_ctx, ob, mesh, verts, numbones, dgrouplist, dgroupflip,
+ root, tip, selected, &error);
if (error) {
BKE_report(reports, RPT_WARNING, error);
}
}
else {
- envelope_bone_weighting(ob, mesh, verts, numbones, bonelist, dgrouplist,
- dgroupflip, root, tip, selected, mat4_to_scale(par->obmat));
+ envelope_bone_weighting(
+ eval_ctx, ob, mesh, verts, numbones, bonelist, dgrouplist,
+ dgroupflip, root, tip, selected, mat4_to_scale(par->obmat));
}
/* only generated in some cases but can call anyway */
@@ -424,8 +431,9 @@ static void add_verts_to_dgroups(ReportList *reports, Scene *scene, Object *ob,
MEM_freeN(verts);
}
-void create_vgroups_from_armature(ReportList *reports, Scene *scene, Object *ob, Object *par,
- const int mode, const bool mirror)
+void create_vgroups_from_armature(
+ ReportList *reports, const EvaluationContext *eval_ctx, Scene *scene, Object *ob, Object *par,
+ const int mode, const bool mirror)
{
/* Lets try to create some vertex groups
* based on the bones of the parent armature.
@@ -451,6 +459,6 @@ void create_vgroups_from_armature(ReportList *reports, Scene *scene, Object *ob,
* that are populated with the vertices for which the
* bone is closest.
*/
- add_verts_to_dgroups(reports, scene, ob, par, (mode == ARM_GROUPS_AUTO), mirror);
+ add_verts_to_dgroups(reports, eval_ctx, scene, ob, par, (mode == ARM_GROUPS_AUTO), mirror);
}
}
diff --git a/source/blender/editors/armature/armature_utils.c b/source/blender/editors/armature/armature_utils.c
index a55264bd020..f27c4fdd96f 100644
--- a/source/blender/editors/armature/armature_utils.c
+++ b/source/blender/editors/armature/armature_utils.c
@@ -39,11 +39,12 @@
#include "BKE_armature.h"
#include "BKE_context.h"
#include "BKE_deform.h"
-#include "BKE_depsgraph.h"
#include "BKE_global.h"
#include "BKE_idprop.h"
#include "BKE_main.h"
+#include "DEG_depsgraph.h"
+
#include "ED_armature.h"
#include "ED_util.h"
@@ -674,7 +675,7 @@ void ED_armature_from_edit(bArmature *arm)
}
}
- DAG_id_tag_update(&arm->id, 0);
+ DEG_id_tag_update(&arm->id, 0);
}
void ED_armature_edit_free(struct bArmature *arm)
diff --git a/source/blender/editors/armature/editarmature_sketch.c b/source/blender/editors/armature/editarmature_sketch.c
index bba486bc65c..f4bebfd85e0 100644
--- a/source/blender/editors/armature/editarmature_sketch.c
+++ b/source/blender/editors/armature/editarmature_sketch.c
@@ -33,6 +33,7 @@
#include "BKE_context.h"
#include "BKE_sketch.h"
+#include "BKE_layer.h"
#include "RNA_define.h"
#include "RNA_access.h"
@@ -49,10 +50,16 @@
#include "ED_transform.h"
#include "ED_transform_snap_object_context.h"
+#include "DEG_depsgraph.h"
+
#include "WM_api.h"
#include "WM_types.h"
#include "GPU_select.h"
+#include "GPU_matrix.h"
+#include "GPU_batch.h"
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
typedef int (*GestureDetectFct)(bContext *, SK_Gesture *, SK_Sketch *);
typedef void (*GestureApplyFct)(bContext *, SK_Gesture *, SK_Sketch *);
@@ -140,9 +147,8 @@ static RigGraph *TEMPLATE_RIGG = NULL;
void BIF_makeListTemplates(const bContext *C)
{
Object *obedit = CTX_data_edit_object(C);
- Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
ToolSettings *ts = CTX_data_tool_settings(C);
- Base *base;
int index = 0;
if (TEMPLATES_HASH != NULL) {
@@ -152,9 +158,8 @@ void BIF_makeListTemplates(const bContext *C)
TEMPLATES_HASH = BLI_ghash_int_new("makeListTemplates gh");
TEMPLATES_CURRENT = 0;
- for (base = FIRSTBASE; base; base = base->next) {
- Object *ob = base->object;
-
+ FOREACH_OBJECT(view_layer, ob)
+ {
if (ob != obedit && ob->type == OB_ARMATURE) {
index++;
BLI_ghash_insert(TEMPLATES_HASH, SET_INT_IN_POINTER(index), ob);
@@ -164,6 +169,7 @@ void BIF_makeListTemplates(const bContext *C)
}
}
}
+ FOREACH_OBJECT_END
}
#if 0 /* UNUSED */
@@ -420,7 +426,6 @@ static void sk_retargetStroke(bContext *C, SK_Stroke *stk)
}
/**************************************************************/
-
static void sk_cancelStroke(SK_Sketch *sketch)
{
if (sketch->active_stroke != NULL) {
@@ -435,17 +440,33 @@ static float sk_clampPointSize(SK_Point *pt, float size)
return max_ff(size * pt->size, size / 2);
}
-static void sk_drawPoint(GLUquadric *quad, SK_Point *pt, float size)
+static void sk_drawPoint(SK_Point *pt, float size, float color[4])
{
- glTranslate3fv(pt->p);
- gluSphere(quad, sk_clampPointSize(pt, size), 8, 8);
+ Gwn_Batch *batch = NULL;
+
+ gpuTranslate3fv(pt->p);
+
+ gpuPushMatrix();
+
+ gpuScaleUniform(sk_clampPointSize(pt, size));
+
+ batch = GPU_batch_preset_sphere(0);
+ GWN_batch_program_set_builtin(batch, GPU_SHADER_3D_UNIFORM_COLOR);
+ GWN_batch_uniform_4fv(batch, "color", color);
+
+ GWN_batch_draw(batch);
+
+ gpuPopMatrix();
}
-static void sk_drawEdge(GLUquadric *quad, SK_Point *pt0, SK_Point *pt1, float size)
+static void sk_drawEdge(SK_Point *pt0, SK_Point *pt1, float size, float color[4])
{
- float vec1[3], vec2[3] = {0, 0, 1}, axis[3];
+ float vec1[3], vec2[3] = { 0, 0, 1 }, axis[3];
float angle, length;
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
sub_v3_v3v3(vec1, pt1->p, pt0->p);
length = normalize_v3(vec1);
cross_v3_v3v3(axis, vec2, vec1);
@@ -454,19 +475,26 @@ static void sk_drawEdge(GLUquadric *quad, SK_Point *pt0, SK_Point *pt1, float si
axis[1] = 1;
}
- angle = angle_normalized_v3v3(vec2, vec1);
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformColor4fv(color);
- glRotate3fv(angle * (float)(180.0 / M_PI) + 180.0f, axis);
+ angle = angle_normalized_v3v3(vec2, vec1);
+ gpuRotate3fv(angle * (float)(180.0 / M_PI) + 180.0f, axis);
+ imm_draw_cylinder_fill_3d(pos, sk_clampPointSize(pt1, size), sk_clampPointSize(pt0, size), length, 8, 8);
- gluCylinder(quad, sk_clampPointSize(pt1, size), sk_clampPointSize(pt0, size), length, 8, 8);
+ immUnbindProgram();
}
-static void sk_drawNormal(GLUquadric *quad, SK_Point *pt, float size, float height)
+static void sk_drawNormal(SK_Point *pt, float size, float height)
{
- float vec2[3] = {0, 0, 1}, axis[3];
+ float vec2[3] = { 0, 0, 1 }, axis[3];
float angle;
-
- glPushMatrix();
+ float color[3] = { 0.0f, 1.0f, 1.0f };
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ gpuPushMatrix();
cross_v3_v3v3(axis, vec2, pt->no);
@@ -474,41 +502,44 @@ static void sk_drawNormal(GLUquadric *quad, SK_Point *pt, float size, float heig
axis[1] = 1;
}
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformColor4fv(color);
+
angle = angle_normalized_v3v3(vec2, pt->no);
+ gpuRotate3fv(angle * (float)(180.0 / M_PI), axis);
- glRotate3fv(angle * (float)(180.0 / M_PI), axis);
+ imm_draw_cylinder_fill_3d(pos, sk_clampPointSize(pt, size), 0, sk_clampPointSize(pt, height), 10, 2);
- glColor3f(0, 1, 1);
- gluCylinder(quad, sk_clampPointSize(pt, size), 0, sk_clampPointSize(pt, height), 10, 2);
+ immUnbindProgram();
- glPopMatrix();
+ gpuPopMatrix();
}
static void sk_drawStroke(SK_Stroke *stk, int id, float color[3], int start, int end)
{
float rgb[3];
+ float zero_color[4] = { 0.0f, 0.0f, 0.0f, 1.0f };
int i;
- GLUquadric *quad = gluNewQuadric();
- gluQuadricNormals(quad, GLU_SMOOTH);
if (id != -1) {
GPU_select_load_id(id);
for (i = 0; i < stk->nb_points; i++) {
- glPushMatrix();
+ gpuPushMatrix();
- sk_drawPoint(quad, stk->points + i, 0.1);
+ sk_drawPoint(stk->points + i, 0.1, zero_color);
if (i > 0) {
- sk_drawEdge(quad, stk->points + i - 1, stk->points + i, 0.1);
+ sk_drawEdge(stk->points + i - 1, stk->points + i, 0.1, zero_color);
}
- glPopMatrix();
+ gpuPopMatrix();
}
}
else {
- float d_rgb[3] = {1, 1, 1};
+ float d_rgb[3] = { 1, 1, 1 };
+ float tmp_color[4] = { 0.0f, 0.0f, 0.0f, 1.0f };
copy_v3_v3(rgb, color);
sub_v3_v3(d_rgb, rgb);
@@ -517,48 +548,44 @@ static void sk_drawStroke(SK_Stroke *stk, int id, float color[3], int start, int
for (i = 0; i < stk->nb_points; i++) {
SK_Point *pt = stk->points + i;
- glPushMatrix();
+ gpuPushMatrix();
if (pt->type == PT_EXACT) {
- glColor3f(0, 0, 0);
- sk_drawPoint(quad, pt, 0.15);
- sk_drawNormal(quad, pt, 0.05, 0.9);
+ sk_drawPoint(pt, 0.15, zero_color);
+ sk_drawNormal(pt, 0.05, 0.9);
}
if (i >= start && i <= end) {
- glColor3f(0.3, 0.3, 0.3);
+ copy_v4_fl4(tmp_color, 0.3f, 0.3f, 0.3f, 1.0f);
}
else {
- glColor3fv(rgb);
+ copy_v4_fl4(tmp_color, rgb[0], rgb[1], rgb[2], 1.0f);
}
if (pt->type != PT_EXACT) {
-
- sk_drawPoint(quad, pt, 0.1);
+ sk_drawPoint(pt, 0.1, tmp_color);
}
if (i > 0) {
- sk_drawEdge(quad, pt - 1, pt, 0.1);
+ sk_drawEdge(pt - 1, pt, 0.1, tmp_color);
}
- glPopMatrix();
+ gpuPopMatrix();
add_v3_v3(rgb, d_rgb);
}
}
- gluDeleteQuadric(quad);
}
static void drawSubdividedStrokeBy(ToolSettings *toolsettings, BArcIterator *iter, NextSubdivisionFunc next_subdividion)
{
SK_Stroke *stk = ((SK_StrokeIterator *)iter)->stroke;
float head[3], tail[3];
+ float color[4] = { 0.0f, 1.0f, 0.0f, 1.0f };
int bone_start = 0;
int end = iter->length;
int index;
- GLUquadric *quad = gluNewQuadric();
- gluQuadricNormals(quad, GLU_SMOOTH);
iter->head(iter);
copy_v3_v3(head, iter->p);
@@ -567,22 +594,19 @@ static void drawSubdividedStrokeBy(ToolSettings *toolsettings, BArcIterator *ite
while (index != -1) {
SK_Point *pt = stk->points + index;
- glPushMatrix();
+ gpuPushMatrix();
- glColor3f(0, 1, 0);
- sk_drawPoint(quad, pt, 0.15);
+ sk_drawPoint(pt, 0.15, color);
- sk_drawNormal(quad, pt, 0.05, 0.9);
+ sk_drawNormal(pt, 0.05, 0.9);
- glPopMatrix();
+ gpuPopMatrix();
copy_v3_v3(head, tail);
bone_start = index; // start next bone from current index
index = next_subdividion(toolsettings, iter, bone_start, end, head, tail);
}
-
- gluDeleteQuadric(quad);
}
static void sk_drawStrokeSubdivision(ToolSettings *toolsettings, SK_Stroke *stk)
@@ -905,7 +929,7 @@ static void sk_interpolateDepth(bContext *C, SK_Stroke *stk, int start, int end,
float pval[2] = {0, 0};
ED_view3d_project_float_global(ar, stk->points[i].p, pval, V3D_PROJ_TEST_NOP);
- ED_view3d_win_to_ray(ar, v3d, pval, ray_start, ray_normal, false);
+ ED_view3d_win_to_ray(CTX_data_depsgraph(C), ar, v3d, pval, ray_start, ray_normal, false);
mul_v3_fl(ray_normal, distance * progress / length);
add_v3_v3(stk->points[i].p, ray_normal);
@@ -974,7 +998,7 @@ static int sk_getStrokeSnapPoint(bContext *C, SK_Point *pt, SK_Sketch *sketch, S
* the ideal would be to call this function only at the beginning of the snap operation,
* or at the beginning of the operator itself */
struct SnapObjectContext *snap_context = ED_transform_snap_object_context_create_view3d(
- CTX_data_main(C), CTX_data_scene(C), 0,
+ CTX_data_main(C), CTX_data_scene(C), CTX_data_view_layer(C), CTX_data_engine_type(C), 0,
CTX_wm_region(C), CTX_wm_view3d(C));
float mvalf[2] = {UNPACK2(dd->mval)};
@@ -1462,6 +1486,7 @@ static int cmpIntersections(const void *i1, const void *i2)
/* returns the maximum number of intersections per stroke */
static int sk_getIntersections(bContext *C, ListBase *list, SK_Sketch *sketch, SK_Stroke *gesture)
{
+ const Depsgraph *depsgraph = CTX_data_depsgraph(C);
ARegion *ar = CTX_wm_region(C);
ScrArea *sa = CTX_wm_area(C);
View3D *v3d = sa->spacedata.first;
@@ -1502,7 +1527,7 @@ static int sk_getIntersections(bContext *C, ListBase *list, SK_Sketch *sketch, S
mval[0] = vi[0];
mval[1] = vi[1];
- ED_view3d_win_to_segment(ar, v3d, mval, ray_start, ray_end, true);
+ ED_view3d_win_to_segment(depsgraph, ar, v3d, mval, ray_start, ray_end, true);
isect_line_line_v3(stk->points[s_i].p,
stk->points[s_i + 1].p,
@@ -1900,16 +1925,18 @@ static void sk_applyGesture(bContext *C, SK_Sketch *sketch)
static bool sk_selectStroke(bContext *C, SK_Sketch *sketch, const int mval[2], const bool extend)
{
+ EvaluationContext eval_ctx;
ViewContext vc;
rcti rect;
unsigned int buffer[MAXPICKBUF];
short hits;
+ CTX_data_eval_ctx(C, &eval_ctx);
view3d_set_viewcontext(C, &vc);
BLI_rcti_init_pt_radius(&rect, mval, 5);
- hits = view3d_opengl_select(&vc, buffer, MAXPICKBUF, &rect, VIEW3D_SELECT_PICK_NEAREST);
+ hits = view3d_opengl_select(&eval_ctx, &vc, buffer, MAXPICKBUF, &rect, VIEW3D_SELECT_PICK_NEAREST);
if (hits > 0) {
int besthitresult = -1;
@@ -1975,9 +2002,9 @@ static void sk_drawSketch(Scene *scene, View3D *UNUSED(v3d), SK_Sketch *sketch,
GPU_select_load_id(-1);
}
else {
- float selected_rgb[3] = {1, 0, 0};
- float unselected_rgb[3] = {1, 0.5, 0};
-
+ float selected_rgb[3] = { 1, 0, 0 };
+ float unselected_rgb[3] = { 1, 0.5, 0 };
+ float tmp_color[4] = { 0.0f, 0.0f, 0.0f, 1.0f };
for (stk = sketch->strokes.first; stk; stk = stk->next) {
int start = -1;
int end = -1;
@@ -2001,75 +2028,37 @@ static void sk_drawSketch(Scene *scene, View3D *UNUSED(v3d), SK_Sketch *sketch,
}
if (last != NULL) {
- GLUquadric *quad = gluNewQuadric();
- gluQuadricNormals(quad, GLU_SMOOTH);
-
- glPushMatrix();
+ gpuPushMatrix();
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
switch (sketch->next_point.mode) {
case PT_SNAP:
- glColor3f(0, 1, 0);
+ copy_v4_fl4(tmp_color, 0.0f, 1.0f, 0.0f, 1.0f);
break;
case PT_PROJECT:
- glColor3f(0, 0, 0);
+ copy_v4_fl4(tmp_color, 0.0f, 0.0f, 0.0f, 1.0f);
break;
}
- sk_drawPoint(quad, &sketch->next_point, 0.1);
+ sk_drawPoint(&sketch->next_point, 0.1, tmp_color);
- glColor4f(selected_rgb[0], selected_rgb[1], selected_rgb[2], 0.3);
-
- sk_drawEdge(quad, last, &sketch->next_point, 0.1);
+ copy_v4_fl4(tmp_color, selected_rgb[0], selected_rgb[1], selected_rgb[2], 0.3);
+ sk_drawEdge(last, &sketch->next_point, 0.1f, tmp_color);
glDisable(GL_BLEND);
- glPopMatrix();
-
- gluDeleteQuadric(quad);
+ gpuPopMatrix();
}
}
}
-#if 0
- if (BLI_listbase_is_empty(&sketch->depth_peels) == false) {
- float colors[8][3] = {
- {1, 0, 0},
- {0, 1, 0},
- {0, 0, 1},
- {1, 1, 0},
- {1, 0, 1},
- {0, 1, 1},
- {1, 1, 1},
- {0, 0, 0}
- };
- DepthPeel *p;
- GLUquadric *quad = gluNewQuadric();
- gluQuadricNormals(quad, GLU_SMOOTH);
-
- for (p = sketch->depth_peels.first; p; p = p->next)
- {
- int index = GET_INT_FROM_POINTER(p->ob);
- index = (index >> 5) & 7;
-
- glColor3fv(colors[index]);
- glPushMatrix();
- glTranslate3fv(p->p);
- gluSphere(quad, 0.02, 8, 8);
- glPopMatrix();
- }
-
- gluDeleteQuadric(quad);
- }
-#endif
-
glDisable(GL_DEPTH_TEST);
/* only draw gesture in active area */
if (sketch->gesture != NULL /* && area_is_active_area(G.vd->area) */) {
- float gesture_rgb[3] = {0, 0.5, 1};
+ float gesture_rgb[3] = { 0, 0.5, 1 };
sk_drawStroke(sketch->gesture, -1, gesture_rgb, -1, -1);
}
}
diff --git a/source/blender/editors/armature/meshlaplacian.c b/source/blender/editors/armature/meshlaplacian.c
index 9500fd59b8b..d53350ab3cb 100644
--- a/source/blender/editors/armature/meshlaplacian.c
+++ b/source/blender/editors/armature/meshlaplacian.c
@@ -46,6 +46,8 @@
#include "ED_mesh.h"
#include "ED_armature.h"
+#include "DEG_depsgraph.h"
+
#include "eigen_capi.h"
#include "meshlaplacian.h"
@@ -600,9 +602,11 @@ static float heat_limit_weight(float weight)
return weight;
}
-void heat_bone_weighting(Object *ob, Mesh *me, float (*verts)[3], int numsource,
- bDeformGroup **dgrouplist, bDeformGroup **dgroupflip,
- float (*root)[3], float (*tip)[3], int *selected, const char **err_str)
+void heat_bone_weighting(
+ const EvaluationContext *eval_ctx,
+ Object *ob, Mesh *me, float (*verts)[3], int numsource,
+ bDeformGroup **dgrouplist, bDeformGroup **dgroupflip,
+ float (*root)[3], float (*tip)[3], int *selected, const char **err_str)
{
LaplacianSystem *sys;
MLoopTri *mlooptri;
@@ -623,7 +627,7 @@ void heat_bone_weighting(Object *ob, Mesh *me, float (*verts)[3], int numsource,
tottri = poly_to_tri_count(me->totpoly, me->totloop);
/* count triangles and create mask */
- if (ob->mode & OB_MODE_WEIGHT_PAINT &&
+ if (eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT &&
(use_face_sel || use_vert_sel))
{
mask = MEM_callocN(sizeof(int) * me->totvert, "heat_bone_weighting mask");
diff --git a/source/blender/editors/armature/meshlaplacian.h b/source/blender/editors/armature/meshlaplacian.h
index bba8c739abf..c790c2fbee7 100644
--- a/source/blender/editors/armature/meshlaplacian.h
+++ b/source/blender/editors/armature/meshlaplacian.h
@@ -52,10 +52,12 @@ float laplacian_system_get_solution(LaplacianSystem *sys, int v);
/* Heat Weighting */
-void heat_bone_weighting(struct Object *ob, struct Mesh *me, float (*verts)[3],
- int numbones, struct bDeformGroup **dgrouplist,
- struct bDeformGroup **dgroupflip, float (*root)[3], float (*tip)[3],
- int *selected, const char **error);
+void heat_bone_weighting(
+ const struct EvaluationContext *eval_ctx,
+ struct Object *ob, struct Mesh *me, float (*verts)[3],
+ int numbones, struct bDeformGroup **dgrouplist,
+ struct bDeformGroup **dgroupflip, float (*root)[3], float (*tip)[3],
+ int *selected, const char **error);
#ifdef RIGID_DEFORM
/* As-Rigid-As-Possible Deformation */
diff --git a/source/blender/editors/armature/pose_edit.c b/source/blender/editors/armature/pose_edit.c
index acbf23ecf82..119a27cd4a7 100644
--- a/source/blender/editors/armature/pose_edit.c
+++ b/source/blender/editors/armature/pose_edit.c
@@ -43,10 +43,11 @@
#include "BKE_armature.h"
#include "BKE_context.h"
#include "BKE_deform.h"
-#include "BKE_depsgraph.h"
#include "BKE_object.h"
#include "BKE_report.h"
+#include "DEG_depsgraph.h"
+
#include "RNA_access.h"
#include "RNA_define.h"
#include "RNA_enum_types.h"
@@ -93,12 +94,16 @@ void ED_armature_enter_posemode(bContext *C, Base *base)
switch (ob->type) {
case OB_ARMATURE:
- ob->restore_mode = ob->mode;
- ob->mode |= OB_MODE_POSE;
-
+ {
+ WorkSpace *workspace = CTX_wm_workspace(C);
+ workspace->object_mode_restore = workspace->object_mode;
+ workspace->object_mode |= OB_MODE_POSE;
+ /* Inform all CoW versions that we changed the mode. */
+ DEG_id_tag_update_ex(CTX_data_main(C), &ob->id, DEG_TAG_COPY_ON_WRITE);
WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_MODE_POSE, NULL);
break;
+ }
default:
return;
}
@@ -110,11 +115,15 @@ void ED_armature_enter_posemode(bContext *C, Base *base)
void ED_armature_exit_posemode(bContext *C, Base *base)
{
if (base) {
+ WorkSpace *workspace = CTX_wm_workspace(C);
Object *ob = base->object;
- ob->restore_mode = ob->mode;
- ob->mode &= ~OB_MODE_POSE;
-
+ workspace->object_mode_restore = workspace->object_mode;
+ workspace->object_mode &= ~OB_MODE_POSE;
+
+ /* Inform all CoW versions that we changed the mode. */
+ DEG_id_tag_update_ex(CTX_data_main(C), &ob->id, DEG_TAG_COPY_ON_WRITE);
+
WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_MODE_OBJECT, NULL);
}
}
@@ -154,8 +163,11 @@ static bool pose_has_protected_selected(Object *ob, short warn)
*
* To be called from various tools that do incremental updates
*/
-void ED_pose_recalculate_paths(Scene *scene, Object *ob)
+void ED_pose_recalculate_paths(bContext *C, Scene *scene, Object *ob)
{
+ struct Main *bmain = CTX_data_main(C);
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
ListBase targets = {NULL, NULL};
/* set flag to force recalc, then grab the relevant bones to target */
@@ -163,7 +175,7 @@ void ED_pose_recalculate_paths(Scene *scene, Object *ob)
animviz_get_object_motionpaths(ob, &targets);
/* recalculate paths, then free */
- animviz_calc_motionpaths(scene, &targets);
+ animviz_calc_motionpaths(&eval_ctx, bmain, scene, &targets);
BLI_freelistN(&targets);
}
@@ -226,7 +238,7 @@ static int pose_calculate_paths_exec(bContext *C, wmOperator *op)
/* calculate the bones that now have motionpaths... */
/* TODO: only make for the selected bones? */
- ED_pose_recalculate_paths(scene, ob);
+ ED_pose_recalculate_paths(C, scene, ob);
/* notifiers for updates */
WM_event_add_notifier(C, NC_OBJECT | ND_POSE, ob);
@@ -282,7 +294,7 @@ static int pose_update_paths_exec(bContext *C, wmOperator *UNUSED(op))
/* calculate the bones that now have motionpaths... */
/* TODO: only make for the selected bones? */
- ED_pose_recalculate_paths(scene, ob);
+ ED_pose_recalculate_paths(C, scene, ob);
/* notifiers for updates */
WM_event_add_notifier(C, NC_OBJECT | ND_POSE, ob);
@@ -580,7 +592,7 @@ static void pose_copy_menu(Scene *scene)
BKE_pose_tag_recalc(bmain, ob->pose);
}
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA); // and all its relations
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA); // and all its relations
BIF_undo_push("Copy Pose Attributes");
@@ -613,7 +625,7 @@ static int pose_flip_names_exec(bContext *C, wmOperator *UNUSED(op))
BLI_freelistN(&bones_names);
/* since we renamed stuff... */
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
/* note, notifier might evolve */
WM_event_add_notifier(C, NC_OBJECT | ND_POSE, ob);
@@ -660,7 +672,7 @@ static int pose_autoside_names_exec(bContext *C, wmOperator *op)
CTX_DATA_END;
/* since we renamed stuff... */
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
/* note, notifier might evolve */
WM_event_add_notifier(C, NC_OBJECT | ND_POSE, ob);
@@ -709,7 +721,7 @@ static int pose_bone_rotmode_exec(bContext *C, wmOperator *op)
CTX_DATA_END;
/* notifiers and updates */
- DAG_id_tag_update((ID *)ob, OB_RECALC_DATA);
+ DEG_id_tag_update((ID *)ob, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, ob);
return OPERATOR_FINISHED;
@@ -1171,7 +1183,7 @@ static int pose_flip_quats_exec(bContext *C, wmOperator *UNUSED(op))
CTX_DATA_END;
/* notifiers and updates */
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, ob);
return OPERATOR_FINISHED;
diff --git a/source/blender/editors/armature/pose_lib.c b/source/blender/editors/armature/pose_lib.c
index 587ae6991a2..d89b2fcfe84 100644
--- a/source/blender/editors/armature/pose_lib.c
+++ b/source/blender/editors/armature/pose_lib.c
@@ -46,7 +46,6 @@
#include "BKE_animsys.h"
#include "BKE_action.h"
#include "BKE_armature.h"
-#include "BKE_depsgraph.h"
#include "BKE_global.h"
#include "BKE_idprop.h"
#include "BKE_library.h"
@@ -55,6 +54,8 @@
#include "BKE_context.h"
#include "BKE_report.h"
+#include "DEG_depsgraph.h"
+
#include "RNA_access.h"
#include "RNA_define.h"
#include "RNA_enum_types.h"
@@ -1067,6 +1068,9 @@ static void poselib_keytag_pose(bContext *C, Scene *scene, tPoseLib_PreviewData
static void poselib_preview_apply(bContext *C, wmOperator *op)
{
tPoseLib_PreviewData *pld = (tPoseLib_PreviewData *)op->customdata;
+ EvaluationContext eval_ctx;
+
+ CTX_data_eval_ctx(C, &eval_ctx);
/* only recalc pose (and its dependencies) if pose has changed */
if (pld->redraw == PL_PREVIEW_REDRAWALL) {
@@ -1089,9 +1093,9 @@ static void poselib_preview_apply(bContext *C, wmOperator *op)
*/
// FIXME: shouldn't this use the builtin stuff?
if ((pld->arm->flag & ARM_DELAYDEFORM) == 0)
- DAG_id_tag_update(&pld->ob->id, OB_RECALC_DATA); /* sets recalc flags */
+ DEG_id_tag_update(&pld->ob->id, OB_RECALC_DATA); /* sets recalc flags */
else
- BKE_pose_where_is(pld->scene, pld->ob);
+ BKE_pose_where_is(&eval_ctx, pld->scene, pld->ob);
}
/* do header print - if interactively previewing */
@@ -1582,6 +1586,9 @@ static void poselib_preview_cleanup(bContext *C, wmOperator *op)
bArmature *arm = pld->arm;
bAction *act = pld->act;
TimeMarker *marker = pld->marker;
+ EvaluationContext eval_ctx;
+
+ CTX_data_eval_ctx(C, &eval_ctx);
/* redraw the header so that it doesn't show any of our stuff anymore */
ED_area_headerprint(pld->sa, NULL);
@@ -1597,9 +1604,9 @@ static void poselib_preview_cleanup(bContext *C, wmOperator *op)
* - note: code copied from transform_generics.c -> recalcData()
*/
if ((arm->flag & ARM_DELAYDEFORM) == 0)
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA); /* sets recalc flags */
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA); /* sets recalc flags */
else
- BKE_pose_where_is(scene, ob);
+ BKE_pose_where_is(&eval_ctx, scene, ob);
}
else if (pld->state == PL_PREVIEW_CONFIRM) {
/* tag poses as appropriate */
@@ -1610,14 +1617,14 @@ static void poselib_preview_cleanup(bContext *C, wmOperator *op)
action_set_activemarker(act, marker, NULL);
/* Update event for pose and deformation children */
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
/* updates */
if (IS_AUTOKEY_MODE(scene, NORMAL)) {
//remake_action_ipos(ob->action);
}
else
- BKE_pose_where_is(scene, ob);
+ BKE_pose_where_is(&eval_ctx, scene, ob);
}
/* Request final redraw of the view. */
diff --git a/source/blender/editors/armature/pose_select.c b/source/blender/editors/armature/pose_select.c
index 609944685d7..a43f3ff4acc 100644
--- a/source/blender/editors/armature/pose_select.c
+++ b/source/blender/editors/armature/pose_select.c
@@ -43,10 +43,11 @@
#include "BKE_armature.h"
#include "BKE_constraint.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_object.h"
#include "BKE_report.h"
+#include "DEG_depsgraph.h"
+
#include "RNA_access.h"
#include "RNA_define.h"
@@ -122,7 +123,7 @@ void ED_pose_bone_select(Object *ob, bPoseChannel *pchan, bool select)
* (see rna_Bone_select_update() in rna_armature.c for details)
*/
if (arm->flag & ARM_HAS_VIZ_DEPS) {
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
}
/* send necessary notifiers */
@@ -133,7 +134,8 @@ void ED_pose_bone_select(Object *ob, bPoseChannel *pchan, bool select)
/* called from editview.c, for mode-less pose selection */
/* assumes scene obact and basact is still on old situation */
bool ED_do_pose_selectbuffer(
- Scene *scene, Base *base, const unsigned int *buffer, short hits,
+ const EvaluationContext *eval_ctx,
+ Scene *scene, ViewLayer *view_layer, Base *base, const unsigned int *buffer, short hits,
bool extend, bool deselect, bool toggle, bool do_nearest)
{
Object *ob = base->object;
@@ -145,7 +147,7 @@ bool ED_do_pose_selectbuffer(
/* if the bone cannot be affected, don't do anything */
if ((nearBone) && !(nearBone->flag & BONE_UNSELECTABLE)) {
- Object *ob_act = OBACT;
+ Object *ob_act = OBACT(view_layer);
bArmature *arm = ob->data;
/* since we do unified select, we don't shift+select a bone if the
@@ -153,7 +155,7 @@ bool ED_do_pose_selectbuffer(
* note, special exception for armature mode so we can do multi-select
* we could check for multi-select explicitly but think its fine to
* always give predictable behavior in weight paint mode - campbell */
- if ((ob_act == NULL) || ((ob_act != ob) && (ob_act->mode & OB_MODE_WEIGHT_PAINT) == 0)) {
+ if ((ob_act == NULL) || ((ob_act != ob) && (eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT) == 0)) {
/* when we are entering into posemode via toggle-select,
* from another active object - always select the bone. */
if (!extend && !deselect && toggle) {
@@ -194,10 +196,10 @@ bool ED_do_pose_selectbuffer(
if (ob_act) {
/* in weightpaint we select the associated vertex group too */
- if (ob_act->mode & OB_MODE_WEIGHT_PAINT) {
+ if (eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT) {
if (nearBone == arm->act_bone) {
ED_vgroup_select_by_name(ob_act, nearBone->name);
- DAG_id_tag_update(&ob_act->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob_act->id, OB_RECALC_DATA);
}
}
/* if there are some dependencies for visualizing armature state
@@ -207,7 +209,7 @@ bool ED_do_pose_selectbuffer(
/* NOTE: ob not ob_act here is intentional - it's the source of the
* bones being selected [T37247]
*/
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
}
}
}
@@ -314,7 +316,7 @@ static int pose_select_connected_invoke(bContext *C, wmOperator *op, const wmEve
if (arm->flag & ARM_HAS_VIZ_DEPS) {
/* mask modifier ('armature' mode), etc. */
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
}
return OPERATOR_FINISHED;
@@ -370,7 +372,7 @@ static int pose_de_select_all_exec(bContext *C, wmOperator *op)
/* weightpaint or mask modifiers need depsgraph updates */
if (multipaint || (arm->flag & ARM_HAS_VIZ_DEPS)) {
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
}
return OPERATOR_FINISHED;
@@ -422,7 +424,7 @@ static int pose_select_parent_exec(bContext *C, wmOperator *UNUSED(op))
if (arm->flag & ARM_HAS_VIZ_DEPS) {
/* mask modifier ('armature' mode), etc. */
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
}
return OPERATOR_FINISHED;
@@ -489,7 +491,7 @@ static int pose_select_constraint_target_exec(bContext *C, wmOperator *UNUSED(op
if (arm->flag & ARM_HAS_VIZ_DEPS) {
/* mask modifier ('armature' mode), etc. */
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
}
return OPERATOR_FINISHED;
@@ -583,7 +585,7 @@ static int pose_select_hierarchy_exec(bContext *C, wmOperator *op)
if (arm->flag & ARM_HAS_VIZ_DEPS) {
/* mask modifier ('armature' mode), etc. */
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
}
return OPERATOR_FINISHED;
@@ -828,7 +830,7 @@ static int pose_select_grouped_exec(bContext *C, wmOperator *op)
if (arm->flag & ARM_HAS_VIZ_DEPS) {
/* mask modifier ('armature' mode), etc. */
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
}
/* report done status */
@@ -872,6 +874,7 @@ void POSE_OT_select_grouped(wmOperatorType *ot)
*/
static int pose_select_mirror_exec(bContext *C, wmOperator *op)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Object *ob_act = CTX_data_active_object(C);
Object *ob = BKE_object_pose_armature_get(ob_act);
bArmature *arm;
@@ -879,10 +882,6 @@ static int pose_select_mirror_exec(bContext *C, wmOperator *op)
const bool active_only = RNA_boolean_get(op->ptr, "only_active");
const bool extend = RNA_boolean_get(op->ptr, "extend");
- if ((ob && (ob->mode & OB_MODE_POSE)) == 0) {
- return OPERATOR_CANCELLED;
- }
-
arm = ob->data;
for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) {
@@ -919,9 +918,9 @@ static int pose_select_mirror_exec(bContext *C, wmOperator *op)
arm->act_bone = pchan_mirror_act->bone;
/* in weightpaint we select the associated vertex group too */
- if (ob_act->mode & OB_MODE_WEIGHT_PAINT) {
+ if (workspace->object_mode & OB_MODE_WEIGHT_PAINT) {
ED_vgroup_select_by_name(ob_act, pchan_mirror_act->name);
- DAG_id_tag_update(&ob_act->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob_act->id, OB_RECALC_DATA);
}
}
diff --git a/source/blender/editors/armature/pose_transform.c b/source/blender/editors/armature/pose_transform.c
index 4feb1681349..bfe365d04fd 100644
--- a/source/blender/editors/armature/pose_transform.c
+++ b/source/blender/editors/armature/pose_transform.c
@@ -45,13 +45,14 @@
#include "BKE_blender_copybuffer.h"
#include "BKE_context.h"
#include "BKE_deform.h"
-#include "BKE_depsgraph.h"
#include "BKE_global.h"
#include "BKE_idprop.h"
#include "BKE_main.h"
#include "BKE_object.h"
#include "BKE_report.h"
+#include "DEG_depsgraph.h"
+
#include "RNA_access.h"
#include "RNA_define.h"
@@ -70,9 +71,12 @@
/* Pose Apply */
/* helper for apply_armature_pose2bones - fixes parenting of objects that are bone-parented to armature */
-static void applyarmature_fix_boneparents(Scene *scene, Object *armob)
+static void applyarmature_fix_boneparents(const bContext *C, Scene *scene, Object *armob)
{
Object workob, *ob;
+ EvaluationContext eval_ctx;
+
+ CTX_data_eval_ctx(C, &eval_ctx);
/* go through all objects in database */
for (ob = G.main->object.first; ob; ob = ob->id.next) {
@@ -83,7 +87,7 @@ static void applyarmature_fix_boneparents(Scene *scene, Object *armob)
*/
BKE_object_apply_mat4(ob, ob->obmat, false, false);
- BKE_object_workob_calc_parent(scene, ob, &workob);
+ BKE_object_workob_calc_parent(&eval_ctx, scene, ob, &workob);
invert_m4_m4(ob->parentinv, workob.obmat);
}
}
@@ -94,10 +98,13 @@ static int apply_armature_pose2bones_exec(bContext *C, wmOperator *op)
{
Scene *scene = CTX_data_scene(C);
Object *ob = BKE_object_pose_armature_get(CTX_data_active_object(C)); // must be active object, not edit-object
+ EvaluationContext eval_ctx;
bArmature *arm = BKE_armature_from_object(ob);
bPose *pose;
bPoseChannel *pchan;
EditBone *curbone;
+
+ CTX_data_eval_ctx(C, &eval_ctx);
/* don't check if editmode (should be done by caller) */
if (ob->type != OB_ARMATURE)
@@ -189,10 +196,10 @@ static int apply_armature_pose2bones_exec(bContext *C, wmOperator *op)
ED_armature_edit_free(arm);
/* flush positions of posebones */
- BKE_pose_where_is(scene, ob);
+ BKE_pose_where_is(&eval_ctx, scene, ob);
/* fix parenting of objects which are bone-parented */
- applyarmature_fix_boneparents(scene, ob);
+ applyarmature_fix_boneparents(C, scene, ob);
/* note, notifier might evolve */
WM_event_add_notifier(C, NC_OBJECT | ND_POSE, ob);
@@ -247,7 +254,7 @@ static int pose_visual_transform_apply_exec(bContext *C, wmOperator *UNUSED(op))
}
CTX_DATA_END;
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
/* note, notifier might evolve */
WM_event_add_notifier(C, NC_OBJECT | ND_POSE, ob);
@@ -565,11 +572,11 @@ static int pose_paste_exec(bContext *C, wmOperator *op)
BKE_main_free(tmp_bmain);
/* Update event for pose and deformation children. */
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
/* Recalculate paths if any of the bones have paths... */
if ((ob->pose->avs.path_bakeflag & MOTIONPATH_BAKE_HAS_PATHS)) {
- ED_pose_recalculate_paths(scene, ob);
+ ED_pose_recalculate_paths(C, scene, ob);
}
/* Notifiers for updates, */
@@ -796,10 +803,10 @@ static int pose_clear_transform_generic_exec(bContext *C, wmOperator *op,
/* now recalculate paths */
if ((ob->pose->avs.path_bakeflag & MOTIONPATH_BAKE_HAS_PATHS))
- ED_pose_recalculate_paths(scene, ob);
+ ED_pose_recalculate_paths(C, scene, ob);
}
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
/* note, notifier might evolve */
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, ob);
@@ -946,7 +953,7 @@ static int pose_clear_user_transforms_exec(bContext *C, wmOperator *op)
}
/* notifiers and updates */
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, ob);
return OPERATOR_FINISHED;
diff --git a/source/blender/editors/armature/pose_utils.c b/source/blender/editors/armature/pose_utils.c
index f80afdd169e..acb9363cf10 100644
--- a/source/blender/editors/armature/pose_utils.c
+++ b/source/blender/editors/armature/pose_utils.c
@@ -39,11 +39,12 @@
#include "BKE_action.h"
#include "BKE_armature.h"
-#include "BKE_depsgraph.h"
#include "BKE_idprop.h"
#include "BKE_context.h"
+#include "DEG_depsgraph.h"
+
#include "RNA_access.h"
#include "WM_api.h"
@@ -183,15 +184,18 @@ void poseAnim_mapping_free(ListBase *pfLinks)
void poseAnim_mapping_refresh(bContext *C, Scene *scene, Object *ob)
{
bArmature *arm = (bArmature *)ob->data;
+ EvaluationContext eval_ctx;
+
+ CTX_data_eval_ctx(C, &eval_ctx);
/* old optimize trick... this enforces to bypass the depgraph
* - note: code copied from transform_generics.c -> recalcData()
*/
/* FIXME: shouldn't this use the builtin stuff? */
if ((arm->flag & ARM_DELAYDEFORM) == 0)
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA); /* sets recalc flags */
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA); /* sets recalc flags */
else
- BKE_pose_where_is(scene, ob);
+ BKE_pose_where_is(&eval_ctx, scene, ob);
/* note, notifier might evolve */
WM_event_add_notifier(C, NC_OBJECT | ND_POSE, ob);
@@ -266,7 +270,7 @@ void poseAnim_mapping_autoKeyframe(bContext *C, Scene *scene, Object *ob, ListBa
*/
if (ob->pose->avs.path_bakeflag & MOTIONPATH_BAKE_HAS_PATHS) {
//ED_pose_clear_paths(C, ob); // XXX for now, don't need to clear
- ED_pose_recalculate_paths(scene, ob);
+ ED_pose_recalculate_paths(C, scene, ob);
}
}
}
diff --git a/source/blender/editors/armature/reeb.c b/source/blender/editors/armature/reeb.c
index 2bcf3099104..0eb44085bae 100644
--- a/source/blender/editors/armature/reeb.c
+++ b/source/blender/editors/armature/reeb.c
@@ -3199,237 +3199,3 @@ ReebGraph *BIF_ReebGraphMultiFromEditMesh(bContext *C)
return rg;
#endif
}
-
-#if 0
-
-ReebGraph *BIF_ReebGraphFromEditMesh(void)
-{
- EditMesh *em = G.editMesh;
- EdgeIndex indexed_edges;
- VertexData *data;
- ReebGraph *rg = NULL;
-
- if (em == NULL)
- return NULL;
-
- data = allocVertexData(em);
-
- buildIndexedEdges(em, &indexed_edges);
-
- if (weightFromDistance(em, &indexed_edges) == 0)
- {
- error("No selected vertex\n");
- freeEdgeIndex(&indexed_edges);
- freeEdgeIndex(&indexed_edges);
- return NULL;
- }
-
- renormalizeWeight(em, 1.0f);
-
- if (G.scene->toolsettings->skgen_options & SKGEN_HARMONIC)
- {
- weightToHarmonic(em, &indexed_edges);
- }
-
- freeEdgeIndex(&indexed_edges);
-
-#ifdef DEBUG_REEB
-// weightToVCol(em, 1);
-#endif
-
- rg = generateReebGraph(em, G.scene->toolsettings->skgen_resolution);
-
-
- /* Remove arcs without embedding */
- filterNullReebGraph(rg);
-
- /* smart filter and loop filter on basic level */
- filterGraph(rg, SKGEN_FILTER_SMART, 0, 0);
-
- repositionNodes(rg);
-
- /* Filtering might have created degree 2 nodes, so remove them */
- removeNormalNodes(rg);
-
- joinSubgraphs(rg, 1.0);
-
- BLI_buildAdjacencyList((BGraph *)rg);
-
- /* calc length before copy, so we have same length on all levels */
- BLI_calcGraphLength((BGraph *)rg);
-
- filterGraph(rg, G.scene->toolsettings->skgen_options, G.scene->toolsettings->skgen_threshold_internal, G.scene->toolsettings->skgen_threshold_external);
-
- finalizeGraph(rg, G.scene->toolsettings->skgen_postpro_passes, G.scene->toolsettings->skgen_postpro);
-
-#ifdef DEBUG_REEB
- REEB_exportGraph(rg, -1);
-
- arcToVCol(rg, em, 0);
- //angleToVCol(em, 1);
-#endif
-
- printf("DONE\n");
- printf("%i subgraphs\n", BLI_FlagSubgraphs((BGraph *)rg));
-
- MEM_freeN(data);
-
- return rg;
-}
-
-void BIF_GlobalReebFree()
-{
- if (GLOBAL_RG != NULL)
- {
- REEB_freeGraph(GLOBAL_RG);
- GLOBAL_RG = NULL;
- }
-}
-
-void BIF_GlobalReebGraphFromEditMesh(void)
-{
- ReebGraph *rg;
-
- BIF_GlobalReebFree();
-
- rg = BIF_ReebGraphMultiFromEditMesh();
-
- GLOBAL_RG = rg;
-}
-
-void REEB_draw()
-{
- ReebGraph *rg;
- ReebArc *arc;
- int i = 0;
-
- if (GLOBAL_RG == NULL)
- {
- return;
- }
-
- if (GLOBAL_RG->link_up && G.scene->toolsettings->skgen_options & SKGEN_DISP_ORIG)
- {
- for (rg = GLOBAL_RG; rg->link_up; rg = rg->link_up) ;
- }
- else {
- i = G.scene->toolsettings->skgen_multi_level;
-
- for (rg = GLOBAL_RG; rg->multi_level != i && rg->link_up; rg = rg->link_up) ;
- }
-
- glPointSize(BIF_GetThemeValuef(TH_VERTEX_SIZE));
-
- glDisable(GL_DEPTH_TEST);
- for (arc = rg->arcs.first; arc; arc = arc->next, i++)
- {
- ReebArcIterator arc_iter;
- BArcIterator *iter = (BArcIterator *)&arc_iter;
- float vec[3];
- char text[128];
- char *s = text;
-
- glLineWidth(BIF_GetThemeValuef(TH_VERTEX_SIZE) + 2);
- glColor3f(0, 0, 0);
- glBegin(GL_LINE_STRIP);
- glVertex3fv(arc->head->p);
-
- if (arc->bcount)
- {
- initArcIterator(iter, arc, arc->head);
- for (IT_next(iter); IT_stopped(iter) == 0; IT_next(iter))
- {
- glVertex3fv(iter->p);
- }
- }
-
- glVertex3fv(arc->tail->p);
- glEnd();
-
- glLineWidth(BIF_GetThemeValuef(TH_VERTEX_SIZE));
-
- if (arc->symmetry_level == 1)
- {
- glColor3f(1, 0, 0);
- }
- else if (arc->symmetry_flag == SYM_SIDE_POSITIVE || arc->symmetry_flag == SYM_SIDE_NEGATIVE)
- {
- glColor3f(1, 0.5f, 0);
- }
- else if (arc->symmetry_flag >= SYM_SIDE_RADIAL)
- {
- glColor3f(0.5f, 1, 0);
- }
- else {
- glColor3f(1, 1, 0);
- }
- glBegin(GL_LINE_STRIP);
- glVertex3fv(arc->head->p);
-
- if (arc->bcount)
- {
- initArcIterator(iter, arc, arc->head);
- for (iter->next(iter); IT_stopped(iter) == 0; iter->next(iter))
- {
- glVertex3fv(iter->p);
- }
- }
-
- glVertex3fv(arc->tail->p);
- glEnd();
-
-
- if (G.scene->toolsettings->skgen_options & SKGEN_DISP_EMBED)
- {
- glColor3f(1, 1, 1);
- glBegin(GL_POINTS);
- glVertex3fv(arc->head->p);
- glVertex3fv(arc->tail->p);
-
- glColor3f(0.5f, 0.5f, 1);
- if (arc->bcount)
- {
- initArcIterator(iter, arc, arc->head);
- for (iter->next(iter); IT_stopped(iter) == 0; iter->next(iter))
- {
- glVertex3fv(iter->p);
- }
- }
- glEnd();
- }
-
- if (G.scene->toolsettings->skgen_options & SKGEN_DISP_INDEX)
- {
- mid_v3_v3v3(vec, arc->head->p, arc->tail->p);
- s += sprintf(s, "%i (%i-%i-%i) ", i, arc->symmetry_level, arc->symmetry_flag, arc->symmetry_group);
-
- if (G.scene->toolsettings->skgen_options & SKGEN_DISP_WEIGHT)
- {
- s += sprintf(s, "w:%0.3f ", arc->tail->weight - arc->head->weight);
- }
-
- if (G.scene->toolsettings->skgen_options & SKGEN_DISP_LENGTH)
- {
- s += sprintf(s, "l:%0.3f", arc->length);
- }
-
- glColor3f(0, 1, 0);
- glRasterPos3fv(vec);
- BMF_DrawString(G.fonts, text);
- }
-
- if (G.scene->toolsettings->skgen_options & SKGEN_DISP_INDEX)
- {
- sprintf(text, " %i", arc->head->index);
- glRasterPos3fv(arc->head->p);
- BMF_DrawString(G.fonts, text);
-
- sprintf(text, " %i", arc->tail->index);
- glRasterPos3fv(arc->tail->p);
- BMF_DrawString(G.fonts, text);
- }
- }
- glEnable(GL_DEPTH_TEST);
-}
-
-#endif
diff --git a/source/blender/editors/curve/CMakeLists.txt b/source/blender/editors/curve/CMakeLists.txt
index 2f5b2ab6e87..ae5c0a13ced 100644
--- a/source/blender/editors/curve/CMakeLists.txt
+++ b/source/blender/editors/curve/CMakeLists.txt
@@ -23,6 +23,7 @@ set(INC
../../blenkernel
../../blenlib
../../blentranslation
+ ../../depsgraph
../../gpu
../../makesdna
../../makesrna
diff --git a/source/blender/editors/curve/editcurve.c b/source/blender/editors/curve/editcurve.c
index f4ee05636c7..4b578ba389e 100644
--- a/source/blender/editors/curve/editcurve.c
+++ b/source/blender/editors/curve/editcurve.c
@@ -45,11 +45,11 @@
#include "BKE_context.h"
#include "BKE_curve.h"
-#include "BKE_depsgraph.h"
#include "BKE_displist.h"
#include "BKE_fcurve.h"
#include "BKE_global.h"
#include "BKE_key.h"
+#include "BKE_layer.h"
#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_report.h"
@@ -57,6 +57,9 @@
#include "BKE_action.h"
#include "BKE_modifier.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#include "WM_api.h"
#include "WM_types.h"
@@ -1285,6 +1288,7 @@ static int separate_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Object *oldob, *newob;
Base *oldbase, *newbase;
Curve *oldcu, *newcu;
@@ -1312,8 +1316,8 @@ static int separate_exec(bContext *C, wmOperator *op)
}
/* 2. duplicate the object and data */
- newbase = ED_object_add_duplicate(bmain, scene, oldbase, 0); /* 0 = fully linked */
- DAG_relations_tag_update(bmain);
+ newbase = ED_object_add_duplicate(bmain, scene, view_layer, oldbase, 0); /* 0 = fully linked */
+ DEG_relations_tag_update(bmain);
newob = newbase->object;
newcu = newob->data = BKE_curve_copy(bmain, oldcu);
@@ -1332,8 +1336,8 @@ static int separate_exec(bContext *C, wmOperator *op)
ED_curve_editnurb_free(newob);
curve_delete_segments(oldob, true);
- DAG_id_tag_update(&oldob->id, OB_RECALC_DATA); /* this is the original one */
- DAG_id_tag_update(&newob->id, OB_RECALC_DATA); /* this is the separated one */
+ DEG_id_tag_update(&oldob->id, OB_RECALC_DATA); /* this is the original one */
+ DEG_id_tag_update(&newob->id, OB_RECALC_DATA); /* this is the separated one */
WM_event_add_notifier(C, NC_GEOM | ND_DATA, oldob->data);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, newob);
@@ -1381,7 +1385,7 @@ static int curve_split_exec(bContext *C, wmOperator *op)
WM_event_add_notifier(C, NC_OBJECT | ND_KEYS, obedit);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
}
else {
BKE_report(op->reports, RPT_ERROR, "Cannot split current selection");
@@ -2327,7 +2331,7 @@ static int switch_direction_exec(bContext *C, wmOperator *UNUSED(op))
if (ED_curve_updateAnimPaths(obedit->data))
WM_event_add_notifier(C, NC_OBJECT | ND_KEYS, obedit);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
return OPERATOR_FINISHED;
@@ -2375,7 +2379,7 @@ static int set_goal_weight_exec(bContext *C, wmOperator *op)
}
}
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
return OPERATOR_FINISHED;
@@ -2428,7 +2432,7 @@ static int set_radius_exec(bContext *C, wmOperator *op)
}
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
return OPERATOR_FINISHED;
}
@@ -2580,7 +2584,7 @@ static int smooth_exec(bContext *C, wmOperator *UNUSED(op))
}
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
return OPERATOR_FINISHED;
}
@@ -2771,7 +2775,7 @@ static int curve_smooth_weight_exec(bContext *C, wmOperator *UNUSED(op))
curve_smooth_value(editnurb, offsetof(BezTriple, weight), offsetof(BPoint, weight));
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
return OPERATOR_FINISHED;
}
@@ -2799,7 +2803,7 @@ static int curve_smooth_radius_exec(bContext *C, wmOperator *UNUSED(op))
curve_smooth_value(editnurb, offsetof(BezTriple, radius), offsetof(BPoint, radius));
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
return OPERATOR_FINISHED;
}
@@ -2827,7 +2831,7 @@ static int curve_smooth_tilt_exec(bContext *C, wmOperator *UNUSED(op))
curve_smooth_value(editnurb, offsetof(BezTriple, alfa), offsetof(BPoint, alfa));
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
return OPERATOR_FINISHED;
}
@@ -2899,7 +2903,7 @@ static int hide_exec(bContext *C, wmOperator *op)
}
}
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
WM_event_add_notifier(C, NC_GEOM | ND_SELECT, obedit->data);
BKE_curve_nurb_vert_active_validate(obedit->data);
@@ -2962,7 +2966,7 @@ static int reveal_exec(bContext *C, wmOperator *op)
}
}
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
WM_event_add_notifier(C, NC_GEOM | ND_SELECT, obedit->data);
return OPERATOR_FINISHED;
@@ -3383,7 +3387,7 @@ static int subdivide_exec(bContext *C, wmOperator *op)
WM_event_add_notifier(C, NC_OBJECT | ND_KEYS, obedit);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
return OPERATOR_FINISHED;
}
@@ -3578,7 +3582,7 @@ static int set_spline_type_exec(bContext *C, wmOperator *op)
if (ED_curve_updateAnimPaths(obedit->data))
WM_event_add_notifier(C, NC_OBJECT | ND_KEYS, obedit);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
if (changed_size) {
@@ -3632,7 +3636,7 @@ static int set_handle_type_exec(bContext *C, wmOperator *op)
BKE_nurbList_handles_set(editnurb, RNA_enum_get(op->ptr, "type"));
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
return OPERATOR_FINISHED;
}
@@ -3677,7 +3681,7 @@ static int curve_normals_make_consistent_exec(bContext *C, wmOperator *op)
BKE_nurbList_handles_recalculate(editnurb, calc_length, SELECT);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
return OPERATOR_FINISHED;
}
@@ -4065,7 +4069,7 @@ static int merge_nurb(bContext *C, wmOperator *op)
BKE_curve_nurb_active_set(obedit->data, NULL);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
return OPERATOR_FINISHED;
}
@@ -4272,7 +4276,7 @@ static int make_segment_exec(bContext *C, wmOperator *op)
WM_event_add_notifier(C, NC_OBJECT | ND_KEYS, obedit);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
return OPERATOR_FINISHED;
}
@@ -4516,7 +4520,7 @@ static int spin_exec(bContext *C, wmOperator *op)
WM_event_add_notifier(C, NC_OBJECT | ND_KEYS, obedit);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
return OPERATOR_FINISHED;
}
@@ -4971,7 +4975,7 @@ static int add_vertex_exec(bContext *C, wmOperator *op)
}
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
return OPERATOR_FINISHED;
}
@@ -5016,7 +5020,7 @@ static int add_vertex_invoke(bContext *C, wmOperator *op, const wmEvent *event)
const float mval[2] = {UNPACK2(event->mval)};
struct SnapObjectContext *snap_context = ED_transform_snap_object_context_create_view3d(
- CTX_data_main(C), vc.scene, 0,
+ CTX_data_main(C), vc.scene, vc.view_layer, vc.engine_type, 0,
vc.ar, vc.v3d);
ED_transform_snap_object_project_view3d_mixed(
@@ -5126,7 +5130,7 @@ static int curve_extrude_exec(bContext *C, wmOperator *UNUSED(op))
}
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
}
return OPERATOR_FINISHED;
@@ -5225,7 +5229,7 @@ static int toggle_cyclic_exec(bContext *C, wmOperator *op)
}
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
return OPERATOR_FINISHED;
}
@@ -5743,7 +5747,7 @@ static int curve_delete_exec(bContext *C, wmOperator *op)
if (ED_curve_updateAnimPaths(obedit->data)) WM_event_add_notifier(C, NC_OBJECT | ND_KEYS, obedit);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
return retval;
}
@@ -5887,7 +5891,7 @@ static int curve_dissolve_exec(bContext *C, wmOperator *UNUSED(op))
if (ED_curve_updateAnimPaths(obedit->data)) WM_event_add_notifier(C, NC_OBJECT | ND_KEYS, obedit);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
}
return OPERATOR_FINISHED;
@@ -5963,7 +5967,7 @@ static int curve_decimate_exec(bContext *C, wmOperator *op)
}
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
}
return OPERATOR_FINISHED;
@@ -6008,7 +6012,7 @@ static int shade_smooth_exec(bContext *C, wmOperator *op)
}
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
return OPERATOR_FINISHED;
}
@@ -6122,7 +6126,7 @@ int join_curve_exec(bContext *C, wmOperator *op)
}
}
- ED_base_object_free_and_unlink(bmain, scene, base);
+ ED_object_base_free_and_unlink(bmain, scene, base->object);
}
}
}
@@ -6136,9 +6140,9 @@ int join_curve_exec(bContext *C, wmOperator *op)
BKE_curve_curve_dimension_update(cu);
}
- DAG_relations_tag_update(bmain); // because we removed object(s), call before editmode!
+ DEG_relations_tag_update(bmain); // because we removed object(s), call before editmode!
- DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA);
WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, scene);
@@ -6178,7 +6182,7 @@ static int clear_tilt_exec(bContext *C, wmOperator *UNUSED(op))
}
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
return OPERATOR_FINISHED;
}
@@ -6356,12 +6360,15 @@ static int match_texture_space_exec(bContext *C, wmOperator *UNUSED(op))
{
Scene *scene = CTX_data_scene(C);
Object *object = CTX_data_active_object(C);
+ EvaluationContext eval_ctx;
Curve *curve = (Curve *) object->data;
float min[3], max[3], size[3], loc[3];
int a;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
if (object->curve_cache == NULL) {
- BKE_displist_make_curveTypes(scene, object, false);
+ BKE_displist_make_curveTypes(&eval_ctx, scene, object, false);
}
INIT_MINMAX(min, max);
diff --git a/source/blender/editors/curve/editcurve_add.c b/source/blender/editors/curve/editcurve_add.c
index cc8e272d4f7..281f6c3c22e 100644
--- a/source/blender/editors/curve/editcurve_add.c
+++ b/source/blender/editors/curve/editcurve_add.c
@@ -42,9 +42,10 @@
#include "BKE_context.h"
#include "BKE_curve.h"
-#include "BKE_depsgraph.h"
#include "BKE_library.h"
+#include "DEG_depsgraph.h"
+
#include "RNA_access.h"
#include "WM_api.h"
@@ -502,7 +503,7 @@ static int curvesurf_prim_add(bContext *C, wmOperator *op, int type, int isSurf)
cu->flag |= CU_PATH | CU_3D;
}
else {
- DAG_id_tag_update(&obedit->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&obedit->id, OB_RECALC_DATA);
}
}
else { /* adding surface */
@@ -512,7 +513,7 @@ static int curvesurf_prim_add(bContext *C, wmOperator *op, int type, int isSurf)
newob = true;
}
else {
- DAG_id_tag_update(&obedit->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&obedit->id, OB_RECALC_DATA);
}
}
diff --git a/source/blender/editors/curve/editcurve_paint.c b/source/blender/editors/curve/editcurve_paint.c
index 4602945d11c..062b9c94a1b 100644
--- a/source/blender/editors/curve/editcurve_paint.c
+++ b/source/blender/editors/curve/editcurve_paint.c
@@ -33,10 +33,11 @@
#include "BKE_context.h"
#include "BKE_curve.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
#include "BKE_report.h"
+#include "DEG_depsgraph.h"
+
#include "WM_api.h"
#include "WM_types.h"
@@ -46,7 +47,11 @@
#include "ED_curve.h"
#include "BIF_gl.h"
-#include "BIF_glutil.h"
+
+#include "GPU_batch.h"
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+#include "GPU_matrix.h"
#include "curve_intern.h"
@@ -88,6 +93,8 @@ struct StrokeElem {
};
struct CurveDrawData {
+ const Depsgraph *depsgraph;
+
short init_event_type;
short curve_type;
@@ -128,7 +135,6 @@ struct CurveDrawData {
} prev;
ViewContext vc;
- bglMats mats;
enum {
CURVE_DRAW_IDLE = 0,
CURVE_DRAW_PAINTING = 1,
@@ -195,7 +201,7 @@ static bool stroke_elem_project(
if (cdd->project.use_plane) {
/* get the view vector to 'location' */
float ray_origin[3], ray_direction[3];
- ED_view3d_win_to_ray(cdd->vc.ar, v3d, mval_fl, ray_origin, ray_direction, false);
+ ED_view3d_win_to_ray(cdd->depsgraph, cdd->vc.ar, v3d, mval_fl, ray_origin, ray_direction, false);
float lambda;
if (isect_ray_plane_v3(ray_origin, ray_direction, cdd->project.plane, &lambda, true)) {
@@ -214,7 +220,7 @@ static bool stroke_elem_project(
{
const double depth = (double)ED_view3d_depth_read_cached(&cdd->vc, mval_i);
if ((depth > depths->depth_range[0]) && (depth < depths->depth_range[1])) {
- if (ED_view3d_depth_unproject(ar, &cdd->mats, mval_i, depth, r_location_world)) {
+ if (ED_view3d_depth_unproject(ar, mval_i, depth, r_location_world)) {
is_location_world_set = true;
if (r_normal_world) {
zero_v3(r_normal_world);
@@ -223,7 +229,7 @@ static bool stroke_elem_project(
if (surface_offset != 0.0f) {
const float offset = cdd->project.use_surface_offset_absolute ? 1.0f : radius;
float normal[3];
- if (ED_view3d_depth_read_cached_normal(&cdd->vc, &cdd->mats, mval_i, normal)) {
+ if (ED_view3d_depth_read_cached_normal(&cdd->vc, mval_i, normal)) {
madd_v3_v3fl(r_location_world, normal, offset * surface_offset);
if (r_normal_world) {
copy_v3_v3(r_normal_world, normal);
@@ -369,39 +375,43 @@ static void curve_draw_stroke_3d(const struct bContext *UNUSED(C), ARegion *UNUS
Object *obedit = cdd->vc.obedit;
Curve *cu = obedit->data;
- UI_ThemeColor(TH_WIRE);
-
if (cu->ext2 > 0.0f) {
- GLUquadricObj *qobj = gluNewQuadric();
-
- gluQuadricDrawStyle(qobj, GLU_FILL);
-
BLI_mempool_iter iter;
const struct StrokeElem *selem;
const float location_zero[3] = {0};
const float *location_prev = location_zero;
+ float color[3];
+ UI_GetThemeColor3fv(TH_WIRE, color);
+
+ Gwn_Batch *sphere = GPU_batch_preset_sphere(0);
+ GWN_batch_program_set_builtin(sphere, GPU_SHADER_3D_UNIFORM_COLOR);
+ GWN_batch_uniform_3fv(sphere, "color", color);
+
/* scale to edit-mode space */
- glPushMatrix();
- glMultMatrixf(obedit->obmat);
+ gpuPushMatrix();
+ gpuMultMatrix(obedit->obmat);
BLI_mempool_iternew(cdd->stroke_elem_pool, &iter);
for (selem = BLI_mempool_iterstep(&iter); selem; selem = BLI_mempool_iterstep(&iter)) {
- glTranslatef(
+ gpuTranslate3f(
selem->location_local[0] - location_prev[0],
selem->location_local[1] - location_prev[1],
selem->location_local[2] - location_prev[2]);
location_prev = selem->location_local;
+
const float radius = stroke_elem_radius(cdd, selem);
- gluSphere(qobj, radius, 12, 8);
+
+ gpuPushMatrix();
+ gpuScaleUniform(radius);
+ GWN_batch_draw(sphere);
+ gpuPopMatrix();
location_prev = selem->location_local;
}
- glPopMatrix();
-
- gluDeleteQuadric(qobj);
+ gpuPopMatrix();
}
if (stroke_len > 1) {
@@ -418,30 +428,45 @@ static void curve_draw_stroke_3d(const struct bContext *UNUSED(C), ARegion *UNUS
}
{
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+
glEnable(GL_BLEND);
glEnable(GL_LINE_SMOOTH);
- glEnableClientState(GL_VERTEX_ARRAY);
- glVertexPointer(3, GL_FLOAT, 0, coord_array);
-
- cpack(0x0);
+ imm_cpack(0x0);
+ immBegin(GWN_PRIM_LINE_STRIP, stroke_len);
glLineWidth(3.0f);
- glDrawArrays(GL_LINE_STRIP, 0, stroke_len);
- if (v3d->zbuf)
+ if (v3d->zbuf) {
glDisable(GL_DEPTH_TEST);
+ }
+
+ for (int i = 0; i < stroke_len; i++) {
+ immVertex3fv(pos, coord_array[i]);
+ }
+
+ immEnd();
- cpack(0xffffffff);
+ imm_cpack(0xffffffff);
+ immBegin(GWN_PRIM_LINE_STRIP, stroke_len);
glLineWidth(1.0f);
- glDrawArrays(GL_LINE_STRIP, 0, stroke_len);
- if (v3d->zbuf)
- glEnable(GL_DEPTH_TEST);
+ for (int i = 0; i < stroke_len; i++) {
+ immVertex3fv(pos, coord_array[i]);
+ }
+
+ immEnd();
- glDisableClientState(GL_VERTEX_ARRAY);
+ if (v3d->zbuf) {
+ glEnable(GL_DEPTH_TEST);
+ }
glDisable(GL_BLEND);
glDisable(GL_LINE_SMOOTH);
+
+ immUnbindProgram();
}
MEM_freeN(coord_array);
@@ -531,7 +556,7 @@ static void curve_draw_event_add_first(wmOperator *op, const wmEvent *event)
CURVE_PAINT_SURFACE_PLANE_NORMAL_VIEW,
CURVE_PAINT_SURFACE_PLANE_NORMAL_SURFACE))
{
- if (ED_view3d_depth_read_cached_normal(&cdd->vc, &cdd->mats, event->mval, normal)) {
+ if (ED_view3d_depth_read_cached_normal(&cdd->vc, event->mval, normal)) {
if (cps->surface_plane == CURVE_PAINT_SURFACE_PLANE_NORMAL_VIEW) {
float cross_a[3], cross_b[3];
cross_v3_v3v3(cross_a, rv3d->viewinv[2], normal);
@@ -580,6 +605,8 @@ static bool curve_draw_init(bContext *C, wmOperator *op, bool is_invoke)
struct CurveDrawData *cdd = MEM_callocN(sizeof(*cdd), __func__);
+ cdd->depsgraph = CTX_data_depsgraph(C);
+
if (is_invoke) {
view3d_set_viewcontext(C, &cdd->vc);
if (ELEM(NULL, cdd->vc.ar, cdd->vc.rv3d, cdd->vc.v3d, cdd->vc.win, cdd->vc.scene)) {
@@ -589,7 +616,9 @@ static bool curve_draw_init(bContext *C, wmOperator *op, bool is_invoke)
}
}
else {
+ cdd->vc.depsgraph = CTX_data_depsgraph(C);
cdd->vc.scene = CTX_data_scene(C);
+ cdd->vc.view_layer = CTX_data_view_layer(C);
cdd->vc.obedit = CTX_data_edit_object(C);
}
@@ -1011,7 +1040,7 @@ static int curve_draw_exec(bContext *C, wmOperator *op)
cu->actvert = nu->pntsu - 1;
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
curve_draw_exit(op);
@@ -1066,12 +1095,13 @@ static int curve_draw_invoke(bContext *C, wmOperator *op, const wmEvent *event)
if ((cps->depth_mode == CURVE_PAINT_PROJECT_SURFACE) &&
(v3d->drawtype > OB_WIRE))
{
- view3d_get_transformation(cdd->vc.ar, cdd->vc.rv3d, NULL, &cdd->mats);
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
/* needed or else the draw matrix can be incorrect */
view3d_operator_needs_opengl(C);
- ED_view3d_autodist_init(cdd->vc.scene, cdd->vc.ar, cdd->vc.v3d, 0);
+ ED_view3d_autodist_init(&eval_ctx, cdd->vc.depsgraph, cdd->vc.ar, cdd->vc.v3d, 0);
if (cdd->vc.rv3d->depths) {
cdd->vc.rv3d->depths->damaged = true;
diff --git a/source/blender/editors/curve/editfont.c b/source/blender/editors/curve/editfont.c
index 4c5642493fa..cbb5abf1309 100644
--- a/source/blender/editors/curve/editfont.c
+++ b/source/blender/editors/curve/editfont.c
@@ -49,13 +49,14 @@
#include "BKE_context.h"
#include "BKE_curve.h"
-#include "BKE_depsgraph.h"
#include "BKE_font.h"
#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_object.h"
#include "BKE_report.h"
+#include "DEG_depsgraph.h"
+
#include "RNA_access.h"
#include "RNA_define.h"
@@ -254,7 +255,7 @@ static void text_update_edited(bContext *C, Object *obedit, int mode)
/* run update first since it can move the cursor */
if (mode == FO_EDIT) {
/* re-tesselllate */
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
}
else {
/* depsgraph runs above, but since we're not tagging for update, call direct */
@@ -273,6 +274,8 @@ static void text_update_edited(bContext *C, Object *obedit, int mode)
}
}
+ BKE_curve_batch_cache_dirty(cu, BKE_CURVE_BATCH_DIRTY_SELECT);
+
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
}
@@ -420,6 +423,8 @@ static void txt_add_object(bContext *C, TextLine *firstline, int totline, const
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ EvaluationContext eval_ctx;
Curve *cu;
Object *obedit;
Base *base;
@@ -429,13 +434,15 @@ static void txt_add_object(bContext *C, TextLine *firstline, int totline, const
int a;
float rot[3] = {0.f, 0.f, 0.f};
- obedit = BKE_object_add(bmain, scene, OB_FONT, NULL);
- base = scene->basact;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
+ obedit = BKE_object_add(bmain, scene, view_layer, OB_FONT, NULL);
+ base = view_layer->basact;
/* seems to assume view align ? TODO - look into this, could be an operator option */
ED_object_base_init_transform(C, base, NULL, rot);
- BKE_object_where_is_calc(scene, obedit);
+ BKE_object_where_is_calc(&eval_ctx, scene, obedit);
add_v3_v3(obedit->loc, offset);
@@ -582,7 +589,7 @@ static int set_style(bContext *C, const int style, const bool clear)
ef->textbufinfo[i].flag |= style;
}
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
return OPERATOR_FINISHED;
diff --git a/source/blender/editors/datafiles/CMakeLists.txt b/source/blender/editors/datafiles/CMakeLists.txt
index 3f6de14180a..65c55b6cd22 100644
--- a/source/blender/editors/datafiles/CMakeLists.txt
+++ b/source/blender/editors/datafiles/CMakeLists.txt
@@ -152,6 +152,7 @@ set(ICON_NAMES
pose_hlt
particlemode
lightpaint
+ greasepencil_stroke_paint
scene_data
renderlayers
world_data
@@ -194,6 +195,7 @@ set(ICON_NAMES
library_data_indirect
greasepencil
line_data
+ library_data_override
group_bone
group_vertex
group_vcol
@@ -213,6 +215,7 @@ set(ICON_NAMES
outliner_ob_speaker
outliner_ob_force_field
outliner_ob_group_instance
+ outliner_ob_greasepencil
restrict_color_off
restrict_color_on
restrict_view_off
@@ -233,6 +236,7 @@ set(ICON_NAMES
outliner_data_surface
outliner_data_speaker
outliner_data_pose
+ outliner_data_greasepencil
mesh_plane
mesh_cube
mesh_circle
@@ -422,6 +426,7 @@ set(ICON_NAMES
clipuv_hlt
snap_peel_object
grid
+ object_origin
pastedown
copydown
pasteflipup
diff --git a/source/blender/editors/gpencil/CMakeLists.txt b/source/blender/editors/gpencil/CMakeLists.txt
index 3d5317b2ebd..587c25031ab 100644
--- a/source/blender/editors/gpencil/CMakeLists.txt
+++ b/source/blender/editors/gpencil/CMakeLists.txt
@@ -24,6 +24,7 @@ set(INC
../../blenkernel
../../blenlib
../../blentranslation
+ ../../depsgraph
../../imbuf
../../gpu
../../makesdna
diff --git a/source/blender/editors/gpencil/drawgpencil.c b/source/blender/editors/gpencil/drawgpencil.c
index 100e2dc8295..4a95027528b 100644
--- a/source/blender/editors/gpencil/drawgpencil.c
+++ b/source/blender/editors/gpencil/drawgpencil.c
@@ -60,9 +60,11 @@
#include "WM_api.h"
-#include "BIF_gl.h"
#include "BIF_glutil.h"
+#include "GPU_immediate.h"
+#include "GPU_draw.h"
+
#include "ED_gpencil.h"
#include "ED_screen.h"
#include "ED_view3d.h"
@@ -92,99 +94,194 @@ typedef enum eDrawStrokeFlags {
/* thickness above which we should use special drawing */
+#if 0
#define GP_DRAWTHICKNESS_SPECIAL 3
+#endif
+
+/* conversion utility (float --> normalized unsigned byte) */
+#define F2UB(x) (unsigned char)(255.0f * x)
/* ----- Tool Buffer Drawing ------ */
-/* helper function to set color of buffer point */
-static void gp_set_tpoint_color(tGPspoint *pt, float ink[4])
+/* helper functions to set color of buffer point */
+
+static void gp_set_tpoint_varying_color(const tGPspoint *pt, const float ink[4], unsigned attrib_id)
{
float alpha = ink[3] * pt->strength;
CLAMP(alpha, GPENCIL_STRENGTH_MIN, 1.0f);
- glColor4f(ink[0], ink[1], ink[2], alpha);
+ immAttrib4ub(attrib_id, F2UB(ink[0]), F2UB(ink[1]), F2UB(ink[2]), F2UB(alpha));
}
-/* helper function to set color of point */
-static void gp_set_point_color(bGPDspoint *pt, float ink[4])
+static void gp_set_point_uniform_color(const bGPDspoint *pt, const float ink[4])
{
float alpha = ink[3] * pt->strength;
CLAMP(alpha, GPENCIL_STRENGTH_MIN, 1.0f);
- glColor4f(ink[0], ink[1], ink[2], alpha);
+ immUniformColor3fvAlpha(ink, alpha);
}
-/* helper function to set color and point */
-static void gp_set_color_and_tpoint(tGPspoint *pt, float ink[4])
+static void gp_set_point_varying_color(const bGPDspoint *pt, const float ink[4], unsigned attrib_id)
{
- gp_set_tpoint_color(pt, ink);
- glVertex2iv(&pt->x);
+ float alpha = ink[3] * pt->strength;
+ CLAMP(alpha, GPENCIL_STRENGTH_MIN, 1.0f);
+ immAttrib4ub(attrib_id, F2UB(ink[0]), F2UB(ink[1]), F2UB(ink[2]), F2UB(alpha));
+}
+
+/* draw fills for buffer stroke */
+static void gp_draw_stroke_buffer_fill(const tGPspoint *points, int totpoints, float ink[4])
+{
+ if (totpoints < 3) {
+ return;
+ }
+ int tot_triangles = totpoints - 2;
+ /* allocate memory for temporary areas */
+ unsigned int(*tmp_triangles)[3] = MEM_mallocN(sizeof(*tmp_triangles) * tot_triangles, "GP Stroke buffer temp triangulation");
+ float(*points2d)[2] = MEM_mallocN(sizeof(*points2d) * totpoints, "GP Stroke buffer temp 2d points");
+
+ /* Convert points to array and triangulate
+ * Here a cache is not used because while drawing the information changes all the time, so the cache
+ * would be recalculated constantly, so it is better to do direct calculation for each function call
+ */
+ for (int i = 0; i < totpoints; i++) {
+ const tGPspoint *pt = &points[i];
+ points2d[i][0] = pt->x;
+ points2d[i][1] = pt->y;
+ }
+ BLI_polyfill_calc((const float(*)[2])points2d, (unsigned int)totpoints, 0, (unsigned int(*)[3])tmp_triangles);
+
+ /* draw triangulation data */
+ if (tot_triangles > 0) {
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 4, GWN_FETCH_INT_TO_FLOAT_UNIT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_SMOOTH_COLOR);
+
+ /* Draw all triangles for filling the polygon */
+ immBegin(GWN_PRIM_TRIS, tot_triangles * 3);
+ /* TODO: use batch instead of immediate mode, to share vertices */
+
+ const tGPspoint *pt;
+ for (int i = 0; i < tot_triangles; i++) {
+ /* vertex 1 */
+ pt = &points[tmp_triangles[i][0]];
+ gp_set_tpoint_varying_color(pt, ink, color);
+ immVertex2iv(pos, &pt->x);
+ /* vertex 2 */
+ pt = &points[tmp_triangles[i][1]];
+ gp_set_tpoint_varying_color(pt, ink, color);
+ immVertex2iv(pos, &pt->x);
+ /* vertex 3 */
+ pt = &points[tmp_triangles[i][2]];
+ gp_set_tpoint_varying_color(pt, ink, color);
+ immVertex2iv(pos, &pt->x);
+ }
+
+ immEnd();
+ immUnbindProgram();
+ }
+
+ /* clear memory */
+ if (tmp_triangles) {
+ MEM_freeN(tmp_triangles);
+ }
+ if (points2d) {
+ MEM_freeN(points2d);
+ }
}
/* draw stroke defined in buffer (simple ogl lines/points for now, as dotted lines) */
-static void gp_draw_stroke_buffer(tGPspoint *points, int totpoints, short thickness,
- short dflag, short sflag, float ink[4])
+static void gp_draw_stroke_buffer(const tGPspoint *points, int totpoints, short thickness,
+ short dflag, short sflag, float ink[4], float fill_ink[4])
{
- tGPspoint *pt;
- int i;
-
+ int draw_points = 0;
+
/* error checking */
if ((points == NULL) || (totpoints <= 0))
return;
-
+
/* check if buffer can be drawn */
if (dflag & (GP_DRAWDATA_ONLY3D | GP_DRAWDATA_ONLYV2D))
return;
-
+
+ if (sflag & GP_STROKE_ERASER) {
+ /* don't draw stroke at all! */
+ return;
+ }
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 4, GWN_FETCH_INT_TO_FLOAT_UNIT);
+
+ const tGPspoint *pt = points;
+
if (totpoints == 1) {
/* if drawing a single point, draw it larger */
glPointSize((float)(thickness + 2) * points->pressure);
- glBegin(GL_POINTS);
-
- gp_set_color_and_tpoint(points, ink);
- glEnd();
- }
- else if (sflag & GP_STROKE_ERASER) {
- /* don't draw stroke at all! */
+ immBindBuiltinProgram(GPU_SHADER_3D_POINT_FIXED_SIZE_VARYING_COLOR);
+ immBegin(GWN_PRIM_POINTS, 1);
+ gp_set_tpoint_varying_color(pt, ink, color);
+ immVertex2iv(pos, &pt->x);
}
else {
float oldpressure = points[0].pressure;
-
+
/* draw stroke curve */
- if (G.debug & G_DEBUG) setlinestyle(2);
-
glLineWidth(max_ff(oldpressure * thickness, 1.0));
- glBegin(GL_LINE_STRIP);
-
- for (i = 0, pt = points; i < totpoints && pt; i++, pt++) {
+ immBindBuiltinProgram(GPU_SHADER_2D_SMOOTH_COLOR);
+ immBeginAtMost(GWN_PRIM_LINE_STRIP, totpoints);
+
+ /* TODO: implement this with a geometry shader to draw one continuous tapered stroke */
+
+ for (int i = 0; i < totpoints; i++, pt++) {
/* if there was a significant pressure change, stop the curve, change the thickness of the stroke,
* and continue drawing again (since line-width cannot change in middle of GL_LINE_STRIP)
*/
if (fabsf(pt->pressure - oldpressure) > 0.2f) {
- glEnd();
+ /* need to have 2 points to avoid immEnd assert error */
+ if (draw_points < 2) {
+ gp_set_tpoint_varying_color(pt - 1, ink, color);
+ immVertex2iv(pos, &(pt - 1)->x);
+ }
+
+ immEnd();
+ draw_points = 0;
+
glLineWidth(max_ff(pt->pressure * thickness, 1.0f));
- glBegin(GL_LINE_STRIP);
-
+ immBeginAtMost(GWN_PRIM_LINE_STRIP, totpoints - i + 1);
+
/* need to roll-back one point to ensure that there are no gaps in the stroke */
if (i != 0) {
- gp_set_color_and_tpoint((pt - 1), ink);
+ gp_set_tpoint_varying_color(pt - 1, ink, color);
+ immVertex2iv(pos, &(pt - 1)->x);
+ ++draw_points;
}
-
- /* now the point we want... */
- gp_set_color_and_tpoint(pt, ink);
-
- oldpressure = pt->pressure;
- }
- else {
- gp_set_color_and_tpoint(pt, ink);
+
+ oldpressure = pt->pressure; /* reset our threshold */
}
+
+ /* now the point we want */
+ gp_set_tpoint_varying_color(pt, ink, color);
+ immVertex2iv(pos, &pt->x);
+ ++draw_points;
+ }
+ /* need to have 2 points to avoid immEnd assert error */
+ if (draw_points < 2) {
+ gp_set_tpoint_varying_color(pt - 1, ink, color);
+ immVertex2iv(pos, &(pt - 1)->x);
}
- glEnd();
+ }
+
+ immEnd();
+ immUnbindProgram();
- if (G.debug & G_DEBUG) setlinestyle(0);
+ // draw fill
+ if (fill_ink[3] > GPENCIL_ALPHA_OPACITY_THRESH) {
+ gp_draw_stroke_buffer_fill(points, totpoints, fill_ink);
}
}
/* --------- 2D Stroke Drawing Helpers --------- */
/* change in parameter list */
-static void gp_calc_2d_stroke_fxy(float pt[3], short sflag, int offsx, int offsy, int winx, int winy, float r_co[2])
+static void gp_calc_2d_stroke_fxy(const float pt[3], short sflag, int offsx, int offsy, int winx, int winy, float r_co[2])
{
if (sflag & GP_STROKE_2DSPACE) {
r_co[0] = pt[0];
@@ -210,203 +307,141 @@ static void gp_calc_2d_stroke_fxy(float pt[3], short sflag, int offsx, int offsy
/* draw a 2D buffer stroke in "volumetric" style
* NOTE: the stroke buffer doesn't have any coordinate offsets/transforms
*/
-static void gp_draw_stroke_volumetric_buffer(tGPspoint *points, int totpoints, short thickness,
- short dflag, short UNUSED(sflag), float ink[4])
+static void gp_draw_stroke_volumetric_buffer(const tGPspoint *points, int totpoints, short thickness,
+ short dflag, const float ink[4])
{
- GLUquadricObj *qobj = gluNewQuadric();
- float modelview[4][4];
-
- tGPspoint *pt;
- int i;
-
/* error checking */
if ((points == NULL) || (totpoints <= 0))
return;
-
+
/* check if buffer can be drawn */
if (dflag & (GP_DRAWDATA_ONLY3D | GP_DRAWDATA_ONLYV2D))
return;
-
- /* get basic matrix - should be camera space (i.e "identity") */
- glGetFloatv(GL_MODELVIEW_MATRIX, (float *)modelview);
-
- /* draw points */
- glPushMatrix();
-
- for (i = 0, pt = points; i < totpoints; i++, pt++) {
- /* set the transformed position */
- // TODO: scale should change based on zoom level, which requires proper translation mult too!
- modelview[3][0] = pt->x;
- modelview[3][1] = pt->y;
-
- glLoadMatrixf((float *)modelview);
-
- /* draw the disk using the current state... */
- gp_set_tpoint_color(pt, ink);
- gluDisk(qobj, 0.0, pt->pressure * thickness, 32, 1);
-
-
- modelview[3][0] = modelview[3][1] = 0.0f;
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int size = GWN_vertformat_attr_add(format, "size", GWN_COMP_F32, 1, GWN_FETCH_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 4, GWN_FETCH_INT_TO_FLOAT_UNIT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_POINT_VARYING_SIZE_VARYING_COLOR);
+ GPU_enable_program_point_size();
+ immBegin(GWN_PRIM_POINTS, totpoints);
+
+ const tGPspoint *pt = points;
+ for (int i = 0; i < totpoints; i++, pt++) {
+ gp_set_tpoint_varying_color(pt, ink, color);
+ immAttrib1f(size, pt->pressure * thickness); /* TODO: scale based on view transform (zoom level) */
+ immVertex2f(pos, pt->x, pt->y);
}
- glPopMatrix();
- gluDeleteQuadric(qobj);
+ immEnd();
+ immUnbindProgram();
+ GPU_disable_program_point_size();
}
/* draw a 2D strokes in "volumetric" style */
-static void gp_draw_stroke_volumetric_2d(bGPDspoint *points, int totpoints, short thickness,
- short dflag, short sflag,
+static void gp_draw_stroke_volumetric_2d(const bGPDspoint *points, int totpoints, short thickness,
+ short UNUSED(dflag), short sflag,
int offsx, int offsy, int winx, int winy,
- float diff_mat[4][4], float ink[4])
+ const float diff_mat[4][4], const float ink[4])
{
- GLUquadricObj *qobj = gluNewQuadric();
- float modelview[4][4];
- float baseloc[3];
- float scalefac = 1.0f;
-
- bGPDspoint *pt;
- int i;
- float fpt[3];
-
- /* HACK: We need a scale factor for the drawing in the image editor,
- * which seems to use 1 unit as it's maximum size, whereas everything
- * else assumes 1 unit = 1 pixel. Otherwise, we only get a massive blob.
- */
- if ((dflag & GP_DRAWDATA_IEDITHACK) && (dflag & GP_DRAWDATA_ONLYV2D)) {
- scalefac = 0.001f;
- }
-
- /* get basic matrix */
- glGetFloatv(GL_MODELVIEW_MATRIX, (float *)modelview);
- copy_v3_v3(baseloc, modelview[3]);
-
- /* draw points */
- glPushMatrix();
-
- for (i = 0, pt = points; i < totpoints; i++, pt++) {
- /* color of point */
- gp_set_point_color(pt, ink);
-
- /* set the transformed position */
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int size = GWN_vertformat_attr_add(format, "size", GWN_COMP_F32, 1, GWN_FETCH_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 4, GWN_FETCH_INT_TO_FLOAT_UNIT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_POINT_VARYING_SIZE_VARYING_COLOR);
+ GPU_enable_program_point_size();
+ immBegin(GWN_PRIM_POINTS, totpoints);
+
+ const bGPDspoint *pt = points;
+ for (int i = 0; i < totpoints; i++, pt++) {
+ /* transform position to 2D */
float co[2];
-
+ float fpt[3];
+
mul_v3_m4v3(fpt, diff_mat, &pt->x);
gp_calc_2d_stroke_fxy(fpt, sflag, offsx, offsy, winx, winy, co);
- translate_m4(modelview, co[0], co[1], 0.0f);
-
- glLoadMatrixf((float *)modelview);
-
- /* draw the disk using the current state... */
- gluDisk(qobj, 0.0, pt->pressure * thickness * scalefac, 32, 1);
-
- /* restore matrix */
- copy_v3_v3(modelview[3], baseloc);
+
+ gp_set_point_varying_color(pt, ink, color);
+ immAttrib1f(size, pt->pressure * thickness); /* TODO: scale based on view transform */
+ immVertex2f(pos, co[0], co[1]);
}
-
- glPopMatrix();
- gluDeleteQuadric(qobj);
+
+ immEnd();
+ immUnbindProgram();
+ GPU_disable_program_point_size();
}
/* draw a 3D stroke in "volumetric" style */
static void gp_draw_stroke_volumetric_3d(
- bGPDspoint *points, int totpoints, short thickness,
- short UNUSED(dflag), short UNUSED(sflag), float diff_mat[4][4], float ink[4])
+ const bGPDspoint *points, int totpoints, short thickness,
+ const float ink[4])
{
- GLUquadricObj *qobj = gluNewQuadric();
-
- float base_modelview[4][4], modelview[4][4];
- float base_loc[3];
-
- bGPDspoint *pt;
- int i;
- float fpt[3];
-
- /* Get the basic modelview matrix we use for performing calculations */
- glGetFloatv(GL_MODELVIEW_MATRIX, (float *)base_modelview);
- copy_v3_v3(base_loc, base_modelview[3]);
-
- /* Create the basic view-aligned billboard matrix we're going to actually draw qobj with:
- * - We need to knock out the rotation so that we are
- * simply left with a camera-facing billboard
- * - The scale factors here are chosen so that the thickness
- * is relatively reasonable. Otherwise, it gets far too
- * large!
- */
- scale_m4_fl(modelview, 0.1f);
-
- /* draw each point as a disk... */
- glPushMatrix();
-
- for (i = 0, pt = points; i < totpoints && pt; i++, pt++) {
- /* color of point */
- gp_set_point_color(pt, ink);
-
- mul_v3_m4v3(fpt, diff_mat, &pt->x);
-
- /* apply translation to base_modelview, so that the translated point is put in the right place */
- translate_m4(base_modelview, fpt[0], fpt[1], fpt[2]);
-
- /* copy the translation component to the billboard matrix we're going to use,
- * then reset the base matrix to the original values so that we can do the same
- * for the next point without accumulation/pollution effects
- */
- copy_v3_v3(modelview[3], base_modelview[3]); /* copy offset value */
- copy_v3_v3(base_modelview[3], base_loc); /* restore */
-
- /* apply our billboard matrix for drawing... */
- glLoadMatrixf((float *)modelview);
-
- /* draw the disk using the current state... */
- gluDisk(qobj, 0.0, pt->pressure * thickness, 32, 1);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ unsigned int size = GWN_vertformat_attr_add(format, "size", GWN_COMP_F32, 1, GWN_FETCH_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 4, GWN_FETCH_INT_TO_FLOAT_UNIT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_POINT_VARYING_SIZE_VARYING_COLOR);
+ GPU_enable_program_point_size();
+ immBegin(GWN_PRIM_POINTS, totpoints);
+
+ const bGPDspoint *pt = points;
+ for (int i = 0; i < totpoints && pt; i++, pt++) {
+ gp_set_point_varying_color(pt, ink, color);
+ immAttrib1f(size, pt->pressure * thickness); /* TODO: scale based on view transform */
+ immVertex3fv(pos, &pt->x); /* we can adjust size in vertex shader based on view/projection! */
}
-
- glPopMatrix();
- gluDeleteQuadric(qobj);
+
+ immEnd();
+ immUnbindProgram();
+ GPU_disable_program_point_size();
}
/* --------------- Stroke Fills ----------------- */
/* Get points of stroke always flat to view not affected by camera view or view position */
-static void gp_stroke_2d_flat(bGPDspoint *points, int totpoints, float(*points2d)[2], int *r_direction)
+static void gp_stroke_2d_flat(const bGPDspoint *points, int totpoints, float(*points2d)[2], int *r_direction)
{
- bGPDspoint *pt0 = &points[0];
- bGPDspoint *pt1 = &points[1];
- bGPDspoint *pt3 = &points[(int)(totpoints * 0.75)];
-
+ const bGPDspoint *pt0 = &points[0];
+ const bGPDspoint *pt1 = &points[1];
+ const bGPDspoint *pt3 = &points[(int)(totpoints * 0.75)];
+
float locx[3];
float locy[3];
float loc3[3];
float normal[3];
-
+
/* local X axis (p0 -> p1) */
sub_v3_v3v3(locx, &pt1->x, &pt0->x);
-
+
/* point vector at 3/4 */
sub_v3_v3v3(loc3, &pt3->x, &pt0->x);
-
+
/* vector orthogonal to polygon plane */
cross_v3_v3v3(normal, locx, loc3);
-
+
/* local Y axis (cross to normal/x axis) */
cross_v3_v3v3(locy, normal, locx);
-
+
/* Normalize vectors */
normalize_v3(locx);
normalize_v3(locy);
-
+
/* Get all points in local space */
for (int i = 0; i < totpoints; i++) {
- bGPDspoint *pt = &points[i];
+ const bGPDspoint *pt = &points[i];
float loc[3];
-
+
/* Get local space using first point as origin */
sub_v3_v3v3(loc, &pt->x, &pt0->x);
-
+
points2d[i][0] = dot_v3v3(loc, locx);
points2d[i][1] = dot_v3v3(loc, locy);
}
-
+
/* Concave (-1), Convex (1), or Autodetect (0)? */
*r_direction = (int)locy[2];
}
@@ -416,14 +451,14 @@ static void gp_stroke_2d_flat(bGPDspoint *points, int totpoints, float(*points2d
static void gp_triangulate_stroke_fill(bGPDstroke *gps)
{
BLI_assert(gps->totpoints >= 3);
-
+
/* allocate memory for temporary areas */
gps->tot_triangles = gps->totpoints - 2;
unsigned int (*tmp_triangles)[3] = MEM_mallocN(sizeof(*tmp_triangles) * gps->tot_triangles, "GP Stroke temp triangulation");
float (*points2d)[2] = MEM_mallocN(sizeof(*points2d) * gps->totpoints, "GP Stroke temp 2d points");
-
+
int direction = 0;
-
+
/* convert to 2d and triangulate */
gp_stroke_2d_flat(gps->points, gps->totpoints, points2d, &direction);
BLI_polyfill_calc(points2d, (unsigned int)gps->totpoints, direction, tmp_triangles);
@@ -438,25 +473,24 @@ static void gp_triangulate_stroke_fill(bGPDstroke *gps)
else {
gps->triangles = MEM_recallocN(gps->triangles, sizeof(*gps->triangles) * gps->tot_triangles);
}
-
+
for (int i = 0; i < gps->tot_triangles; i++) {
- bGPDtriangle *stroke_triangle = &gps->triangles[i];
- memcpy(stroke_triangle->verts, tmp_triangles[i], sizeof(uint[3]));
+ memcpy(gps->triangles[i].verts, tmp_triangles[i], sizeof(uint[3]));
}
}
else {
/* No triangles needed - Free anything allocated previously */
if (gps->triangles)
MEM_freeN(gps->triangles);
-
+
gps->triangles = NULL;
}
-
+
/* disable recalculation flag */
if (gps->flag & GP_STROKE_RECALC_CACHES) {
gps->flag &= ~GP_STROKE_RECALC_CACHES;
}
-
+
/* clear memory */
if (tmp_triangles) MEM_freeN(tmp_triangles);
if (points2d) MEM_freeN(points2d);
@@ -466,78 +500,64 @@ static void gp_triangulate_stroke_fill(bGPDstroke *gps)
/* draw fills for shapes */
static void gp_draw_stroke_fill(
bGPdata *gpd, bGPDstroke *gps,
- int offsx, int offsy, int winx, int winy, float diff_mat[4][4])
+ int offsx, int offsy, int winx, int winy, const float diff_mat[4][4], const float color[4])
{
- bGPDpalettecolor *palcolor;
- int i;
float fpt[3];
BLI_assert(gps->totpoints >= 3);
- palcolor = ED_gpencil_stroke_getcolor(gpd, gps);
+ bGPDpalettecolor *palcolor = ED_gpencil_stroke_getcolor(gpd, gps);
/* Triangulation fill if high quality flag is enabled */
if (palcolor->flag & PC_COLOR_HQ_FILL) {
- bGPDtriangle *stroke_triangle;
- bGPDspoint *pt;
-
/* Calculate triangles cache for filling area (must be done only after changes) */
if ((gps->flag & GP_STROKE_RECALC_CACHES) || (gps->tot_triangles == 0) || (gps->triangles == NULL)) {
gp_triangulate_stroke_fill(gps);
}
- /* Draw all triangles for filling the polygon (cache must be calculated before) */
BLI_assert(gps->tot_triangles >= 1);
- glBegin(GL_TRIANGLES);
+
+ unsigned int pos;
if (gps->flag & GP_STROKE_3DSPACE) {
- for (i = 0, stroke_triangle = gps->triangles; i < gps->tot_triangles; i++, stroke_triangle++) {
+ pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ }
+ else {
+ pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ }
+
+ immUniformColor4fv(color);
+
+ /* Draw all triangles for filling the polygon (cache must be calculated before) */
+ immBegin(GWN_PRIM_TRIS, gps->tot_triangles * 3);
+ /* TODO: use batch instead of immediate mode, to share vertices */
+
+ bGPDtriangle *stroke_triangle = gps->triangles;
+ bGPDspoint *pt;
+
+ if (gps->flag & GP_STROKE_3DSPACE) {
+ for (int i = 0; i < gps->tot_triangles; i++, stroke_triangle++) {
for (int j = 0; j < 3; j++) {
pt = &gps->points[stroke_triangle->verts[j]];
mul_v3_m4v3(fpt, diff_mat, &pt->x);
- glVertex3fv(fpt);
+ immVertex3fv(pos, fpt);
}
}
}
else {
- for (i = 0, stroke_triangle = gps->triangles; i < gps->tot_triangles; i++, stroke_triangle++) {
+ for (int i = 0; i < gps->tot_triangles; i++, stroke_triangle++) {
for (int j = 0; j < 3; j++) {
float co[2];
pt = &gps->points[stroke_triangle->verts[j]];
mul_v3_m4v3(fpt, diff_mat, &pt->x);
gp_calc_2d_stroke_fxy(fpt, gps->flag, offsx, offsy, winx, winy, co);
- glVertex2fv(co);
+ immVertex3fv(pos, fpt);
}
}
}
- glEnd();
- }
- else {
- /* As an initial implementation, we use the OpenGL filled polygon drawing
- * here since it's the easiest option to implement for this case. It does
- * come with limitations (notably for concave shapes), though it shouldn't
- * be much of an issue in most cases.
- *
- * We keep this legacy implementation around despite now having the high quality
- * fills, as this is necessary for keeping everything working nicely for files
- * created using old versions of Blender which may have depended on the artifacts
- * the old fills created.
- */
- bGPDspoint *pt;
-
- glBegin(GL_POLYGON);
- for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
- if (gps->flag & GP_STROKE_3DSPACE) {
- mul_v3_m4v3(fpt, diff_mat, &pt->x);
- glVertex3fv(fpt);
- }
- else {
- float co[2];
- mul_v3_m4v3(fpt, diff_mat, &pt->x);
- gp_calc_2d_stroke_fxy(fpt, gps->flag, offsx, offsy, winx, winy, co);
- glVertex2fv(co);
- }
- }
- glEnd();
+ immEnd();
+ immUnbindProgram();
}
}
@@ -545,153 +565,162 @@ static void gp_draw_stroke_fill(
/* draw a given stroke - just a single dot (only one point) */
static void gp_draw_stroke_point(
- bGPDspoint *points, short thickness, short dflag, short sflag,
- int offsx, int offsy, int winx, int winy, float diff_mat[4][4], float ink[4])
+ const bGPDspoint *points, short thickness, short UNUSED(dflag), short sflag,
+ int offsx, int offsy, int winx, int winy, const float diff_mat[4][4], const float ink[4])
{
- float fpt[3];
- bGPDspoint *pt = &points[0];
-
- /* color of point */
- gp_set_point_color(pt, ink);
+ const bGPDspoint *pt = points;
- /* set point thickness (since there's only one of these) */
- glPointSize((float)(thickness + 2) * points->pressure);
-
/* get final position using parent matrix */
+ float fpt[3];
mul_v3_m4v3(fpt, diff_mat, &pt->x);
- /* draw point */
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
if (sflag & GP_STROKE_3DSPACE) {
- glBegin(GL_POINTS);
- glVertex3fv(fpt);
- glEnd();
+ immBindBuiltinProgram(GPU_SHADER_3D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA);
}
else {
- float co[2];
-
- /* get coordinates of point */
+ immBindBuiltinProgram(GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA);
+
+ /* get 2D coordinates of point */
+ float co[3] = { 0.0f };
gp_calc_2d_stroke_fxy(fpt, sflag, offsx, offsy, winx, winy, co);
-
- /* if thickness is less than GP_DRAWTHICKNESS_SPECIAL, simple dot looks ok
- * - also mandatory in if Image Editor 'image-based' dot
- */
- if ((thickness < GP_DRAWTHICKNESS_SPECIAL) ||
- ((dflag & GP_DRAWDATA_IEDITHACK) && (sflag & GP_STROKE_2DSPACE)))
- {
- glBegin(GL_POINTS);
- glVertex2fv(co);
- glEnd();
- }
- else {
- /* draw filled circle as is done in circf (but without the matrix push/pops which screwed things up) */
- GLUquadricObj *qobj = gluNewQuadric();
-
- gluQuadricDrawStyle(qobj, GLU_FILL);
-
- /* need to translate drawing position, but must reset after too! */
- glTranslate2fv(co);
- gluDisk(qobj, 0.0, thickness, 32, 1);
- glTranslatef(-co[0], -co[1], 0.0);
-
- gluDeleteQuadric(qobj);
- }
+ copy_v3_v3(fpt, co);
}
+
+ gp_set_point_uniform_color(pt, ink);
+ /* set point thickness (since there's only one of these) */
+ immUniform1f("size", (float)(thickness + 2) * pt->pressure);
+
+ immBegin(GWN_PRIM_POINTS, 1);
+ immVertex3fv(pos, fpt);
+ immEnd();
+
+ immUnbindProgram();
}
/* draw a given stroke in 3d (i.e. in 3d-space), using simple ogl lines */
-static void gp_draw_stroke_3d(bGPDspoint *points, int totpoints, short thickness, bool debug,
- short UNUSED(sflag), float diff_mat[4][4], float ink[4], bool cyclic)
+static void gp_draw_stroke_3d(const bGPDspoint *points, int totpoints, short thickness, bool UNUSED(debug),
+ short UNUSED(sflag), const float diff_mat[4][4], const float ink[4], bool cyclic)
{
- bGPDspoint *pt, *pt2;
float curpressure = points[0].pressure;
- int i;
float fpt[3];
float cyclic_fpt[3];
+ int draw_points = 0;
+
+ /* if cyclic needs one vertex more */
+ int cyclic_add = 0;
+ if (cyclic) {
+ ++cyclic_add;
+ }
+
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 4, GWN_FETCH_INT_TO_FLOAT_UNIT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_SMOOTH_COLOR);
+
+ /* TODO: implement this with a geometry shader to draw one continuous tapered stroke */
/* draw stroke curve */
glLineWidth(max_ff(curpressure * thickness, 1.0f));
- glBegin(GL_LINE_STRIP);
- for (i = 0, pt = points; i < totpoints && pt; i++, pt++) {
- gp_set_point_color(pt, ink);
+ immBeginAtMost(GWN_PRIM_LINE_STRIP, totpoints + cyclic_add);
+ const bGPDspoint *pt = points;
+ for (int i = 0; i < totpoints; i++, pt++) {
+ gp_set_point_varying_color(pt, ink, color);
/* if there was a significant pressure change, stop the curve, change the thickness of the stroke,
* and continue drawing again (since line-width cannot change in middle of GL_LINE_STRIP)
* Note: we want more visible levels of pressures when thickness is bigger.
*/
if (fabsf(pt->pressure - curpressure) > 0.2f / (float)thickness) {
- glEnd();
+ /* if the pressure changes before get at least 2 vertices, need to repeat last point to avoid assert in immEnd() */
+ if (draw_points < 2) {
+ const bGPDspoint *pt2 = pt - 1;
+ mul_v3_m4v3(fpt, diff_mat, &pt2->x);
+ immVertex3fv(pos, fpt);
+ }
+ immEnd();
+ draw_points = 0;
+
curpressure = pt->pressure;
glLineWidth(max_ff(curpressure * thickness, 1.0f));
- glBegin(GL_LINE_STRIP);
-
+ immBeginAtMost(GWN_PRIM_LINE_STRIP, totpoints - i + 1 + cyclic_add);
+
/* need to roll-back one point to ensure that there are no gaps in the stroke */
if (i != 0) {
- pt2 = pt - 1;
+ const bGPDspoint *pt2 = pt - 1;
mul_v3_m4v3(fpt, diff_mat, &pt2->x);
- glVertex3fv(fpt);
+ gp_set_point_varying_color(pt2, ink, color);
+ immVertex3fv(pos, fpt);
+ ++draw_points;
}
-
- /* now the point we want... */
- mul_v3_m4v3(fpt, diff_mat, &pt->x);
- glVertex3fv(fpt);
- }
- else {
- mul_v3_m4v3(fpt, diff_mat, &pt->x);
- glVertex3fv(fpt);
}
- /* saves first point to use in cyclic */
- if (i == 0) {
+
+ /* now the point we want */
+ mul_v3_m4v3(fpt, diff_mat, &pt->x);
+ immVertex3fv(pos, fpt);
+ ++draw_points;
+
+ if (cyclic && i == 0) {
+ /* save first point to use in cyclic */
copy_v3_v3(cyclic_fpt, fpt);
}
}
- /* if cyclic draw line to first point */
+
if (cyclic) {
- glVertex3fv(cyclic_fpt);
+ /* draw line to first point to complete the cycle */
+ immVertex3fv(pos, cyclic_fpt);
+ ++draw_points;
}
- glEnd();
-
- /* draw debug points of curve on top? */
- /* XXX: for now, we represent "selected" strokes in the same way as debug, which isn't used anymore */
- if (debug) {
- glPointSize((float)(thickness + 2));
-
- glBegin(GL_POINTS);
- for (i = 0, pt = points; i < totpoints && pt; i++, pt++) {
- mul_v3_m4v3(fpt, diff_mat, &pt->x);
- glVertex3fv(fpt);
- }
- glEnd();
+ /* if less of two points, need to repeat last point to avoid assert in immEnd() */
+ if (draw_points < 2) {
+ const bGPDspoint *pt2 = pt - 1;
+ mul_v3_m4v3(fpt, diff_mat, &pt2->x);
+ gp_set_point_varying_color(pt2, ink, color);
+ immVertex3fv(pos, fpt);
}
+
+ immEnd();
+ immUnbindProgram();
}
/* ----- Fancy 2D-Stroke Drawing ------ */
/* draw a given stroke in 2d */
-static void gp_draw_stroke_2d(bGPDspoint *points, int totpoints, short thickness_s, short dflag, short sflag,
- bool debug, int offsx, int offsy, int winx, int winy, float diff_mat[4][4], float ink[4])
+static void gp_draw_stroke_2d(const bGPDspoint *points, int totpoints, short thickness_s, short dflag, short sflag,
+ bool UNUSED(debug), int offsx, int offsy, int winx, int winy, const float diff_mat[4][4], const float ink[4])
{
/* otherwise thickness is twice that of the 3D view */
float thickness = (float)thickness_s * 0.5f;
-
+
/* strokes in Image Editor need a scale factor, since units there are not pixels! */
float scalefac = 1.0f;
if ((dflag & GP_DRAWDATA_IEDITHACK) && (dflag & GP_DRAWDATA_ONLYV2D)) {
scalefac = 0.001f;
}
-
- /* tessellation code - draw stroke as series of connected quads with connection
+
+ /* TODO: fancy++ with the magic of shaders */
+
+ /* tessellation code - draw stroke as series of connected quads (triangle strips in fact) with connection
* edges rotated to minimize shrinking artifacts, and rounded endcaps
*/
{
- bGPDspoint *pt1, *pt2;
+ const bGPDspoint *pt1, *pt2;
float s0[2], s1[2]; /* segment 'center' points */
float pm[2]; /* normal from previous segment. */
int i;
float fpt[3];
-
- glShadeModel(GL_FLAT);
- glBegin(GL_QUADS);
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 4, GWN_FETCH_INT_TO_FLOAT_UNIT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_FLAT_COLOR);
+ immBegin(GWN_PRIM_TRI_STRIP, totpoints * 2 + 4);
/* get x and y coordinates from first point */
mul_v3_m4v3(fpt, diff_mat, &points->x);
@@ -706,19 +735,19 @@ static void gp_draw_stroke_2d(bGPDspoint *points, int totpoints, short thickness
/* get x and y coordinates from point2 (point1 has already been computed in previous iteration). */
mul_v3_m4v3(fpt, diff_mat, &pt2->x);
gp_calc_2d_stroke_fxy(fpt, sflag, offsx, offsy, winx, winy, s1);
-
+
/* calculate gradient and normal - 'angle'=(ny/nx) */
m1[1] = s1[1] - s0[1];
m1[0] = s1[0] - s0[0];
normalize_v2(m1);
m2[1] = -m1[0];
m2[0] = m1[1];
-
+
/* always use pressure from first point here */
pthick = (pt1->pressure * thickness * scalefac);
-
+
/* color of point */
- gp_set_point_color(pt1, ink);
+ gp_set_point_varying_color(pt1, ink, color);
/* if the first segment, start of segment is segment's normal */
if (i == 0) {
@@ -729,40 +758,39 @@ static void gp_draw_stroke_2d(bGPDspoint *points, int totpoints, short thickness
mt[1] = m2[1] * pthick * 0.5f;
sc[0] = s0[0] - (m1[0] * pthick * 0.75f);
sc[1] = s0[1] - (m1[1] * pthick * 0.75f);
-
+
t0[0] = sc[0] - mt[0];
t0[1] = sc[1] - mt[1];
t1[0] = sc[0] + mt[0];
t1[1] = sc[1] + mt[1];
-
- glVertex2fv(t0);
- glVertex2fv(t1);
-
+
+ /* First two points of cap. */
+ immVertex2fv(pos, t0);
+ immVertex2fv(pos, t1);
+
/* calculate points for start of segment */
mt[0] = m2[0] * pthick;
mt[1] = m2[1] * pthick;
-
+
t0[0] = s0[0] - mt[0];
t0[1] = s0[1] - mt[1];
t1[0] = s0[0] + mt[0];
t1[1] = s0[1] + mt[1];
-
- /* draw this line twice (first to finish off start cap, then for stroke) */
- glVertex2fv(t1);
- glVertex2fv(t0);
- glVertex2fv(t0);
- glVertex2fv(t1);
+
+ /* Last two points of start cap (and first two points of first segment). */
+ immVertex2fv(pos, t0);
+ immVertex2fv(pos, t1);
}
/* if not the first segment, use bisector of angle between segments */
else {
float mb[2]; /* bisector normal */
float athick, dfac; /* actual thickness, difference between thicknesses */
-
+
/* calculate gradient of bisector (as average of normals) */
mb[0] = (pm[0] + m2[0]) / 2;
mb[1] = (pm[1] + m2[1]) / 2;
normalize_v2(mb);
-
+
/* calculate gradient to apply
* - as basis, use just pthick * bisector gradient
* - if cross-section not as thick as it should be, add extra padding to fix it
@@ -771,49 +799,44 @@ static void gp_draw_stroke_2d(bGPDspoint *points, int totpoints, short thickness
mt[1] = mb[1] * pthick;
athick = len_v2(mt);
dfac = pthick - (athick * 2);
-
+
if (((athick * 2.0f) < pthick) && (IS_EQF(athick, pthick) == 0)) {
mt[0] += (mb[0] * dfac);
mt[1] += (mb[1] * dfac);
}
-
+
/* calculate points for start of segment */
t0[0] = s0[0] - mt[0];
t0[1] = s0[1] - mt[1];
t1[0] = s0[0] + mt[0];
t1[1] = s0[1] + mt[1];
-
- /* draw this line twice (once for end of current segment, and once for start of next) */
- glVertex2fv(t1);
- glVertex2fv(t0);
- glVertex2fv(t0);
- glVertex2fv(t1);
+
+ /* Last two points of previous segment, and first two points of current segment. */
+ immVertex2fv(pos, t0);
+ immVertex2fv(pos, t1);
}
-
+
/* if last segment, also draw end of segment (defined as segment's normal) */
if (i == totpoints - 2) {
/* for once, we use second point's pressure (otherwise it won't be drawn) */
pthick = (pt2->pressure * thickness * scalefac);
-
+
/* color of point */
- gp_set_point_color(pt2, ink);
+ gp_set_point_varying_color(pt2, ink, color);
/* calculate points for end of segment */
mt[0] = m2[0] * pthick;
mt[1] = m2[1] * pthick;
-
+
t0[0] = s1[0] - mt[0];
t0[1] = s1[1] - mt[1];
t1[0] = s1[0] + mt[0];
t1[1] = s1[1] + mt[1];
-
- /* draw this line twice (once for end of stroke, and once for endcap)*/
- glVertex2fv(t1);
- glVertex2fv(t0);
- glVertex2fv(t0);
- glVertex2fv(t1);
-
-
+
+ /* Last two points of last segment (and first two points of end cap). */
+ immVertex2fv(pos, t0);
+ immVertex2fv(pos, t1);
+
/* draw end cap as last step
* - make points slightly closer to center (about halfway across)
*/
@@ -821,42 +844,25 @@ static void gp_draw_stroke_2d(bGPDspoint *points, int totpoints, short thickness
mt[1] = m2[1] * pthick * 0.5f;
sc[0] = s1[0] + (m1[0] * pthick * 0.75f);
sc[1] = s1[1] + (m1[1] * pthick * 0.75f);
-
+
t0[0] = sc[0] - mt[0];
t0[1] = sc[1] - mt[1];
t1[0] = sc[0] + mt[0];
t1[1] = sc[1] + mt[1];
-
- glVertex2fv(t1);
- glVertex2fv(t0);
+
+ /* Last two points of end cap. */
+ immVertex2fv(pos, t0);
+ immVertex2fv(pos, t1);
}
-
+
/* store computed point2 coordinates as point1 ones of next segment. */
copy_v2_v2(s0, s1);
/* store stroke's 'natural' normal for next stroke to use */
copy_v2_v2(pm, m2);
}
-
- glEnd();
- glShadeModel(GL_SMOOTH);
- }
-
- /* draw debug points of curve on top? (original stroke points) */
- if (debug) {
- bGPDspoint *pt;
- int i;
- float fpt[3];
- glPointSize((float)(thickness_s + 2));
-
- glBegin(GL_POINTS);
- for (i = 0, pt = points; i < totpoints && pt; i++, pt++) {
- float co[2];
- mul_v3_m4v3(fpt, diff_mat, &pt->x);
- gp_calc_2d_stroke_fxy(fpt, sflag, offsx, offsy, winx, winy, co);
- glVertex2fv(co);
- }
- glEnd();
+ immEnd();
+ immUnbindProgram();
}
}
@@ -871,41 +877,41 @@ static bool gp_can_draw_stroke(const bGPDstroke *gps, const int dflag)
return false;
if (!(dflag & GP_DRAWDATA_ONLY3D) && (gps->flag & GP_STROKE_3DSPACE))
return false;
-
+
/* 2) Screen Space 2D Strokes */
if ((dflag & GP_DRAWDATA_ONLYV2D) && !(gps->flag & GP_STROKE_2DSPACE))
return false;
if (!(dflag & GP_DRAWDATA_ONLYV2D) && (gps->flag & GP_STROKE_2DSPACE))
return false;
-
+
/* 3) Image Space (2D) */
if ((dflag & GP_DRAWDATA_ONLYI2D) && !(gps->flag & GP_STROKE_2DIMAGE))
return false;
if (!(dflag & GP_DRAWDATA_ONLYI2D) && (gps->flag & GP_STROKE_2DIMAGE))
return false;
-
-
+
/* skip stroke if it doesn't have any valid data */
if ((gps->points == NULL) || (gps->totpoints < 1))
return false;
-
+
/* stroke can be drawn */
return true;
}
/* draw a set of strokes */
static void gp_draw_strokes(
- bGPdata *gpd, bGPDframe *gpf, int offsx, int offsy, int winx, int winy, int dflag,
+ bGPdata *gpd, const bGPDframe *gpf, int offsx, int offsy, int winx, int winy, int dflag,
bool debug, short lthick, const float opacity, const float tintcolor[4],
- const bool onion, const bool custonion, float diff_mat[4][4])
+ const bool onion, const bool custonion, const float diff_mat[4][4])
{
- bGPDstroke *gps;
float tcolor[4];
float tfill[4];
short sthickness;
float ink[4];
- for (gps = gpf->strokes.first; gps; gps = gps->next) {
+ GPU_enable_program_point_size();
+
+ for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
/* check if stroke can be drawn */
if (gp_can_draw_stroke(gps, dflag) == false) {
continue;
@@ -923,6 +929,10 @@ static void gp_draw_strokes(
/* calculate thickness */
sthickness = gps->thickness + lthick;
+ if (sthickness <= 0) {
+ continue;
+ }
+
/* check which stroke-drawer to use */
if (dflag & GP_DRAWDATA_ONLY3D) {
const int no_xray = (dflag & GP_DRAWDATA_NO_XRAY);
@@ -936,10 +946,6 @@ static void gp_draw_strokes(
/* first arg is normally rv3d->dist, but this isn't
* available here and seems to work quite well without */
bglPolygonOffset(1.0f, 1.0f);
-#if 0
- glEnable(GL_POLYGON_OFFSET_LINE);
- glPolygonOffset(-1.0f, -1.0f);
-#endif
}
/* 3D Fill */
@@ -949,19 +955,20 @@ static void gp_draw_strokes(
interp_v3_v3v3(tfill, palcolor->fill, tintcolor, tintcolor[3]);
tfill[3] = palcolor->fill[3] * opacity;
if (tfill[3] > GPENCIL_ALPHA_OPACITY_THRESH) {
+ const float *color;
if (!onion) {
- glColor4fv(tfill);
+ color = tfill;
}
else {
if (custonion) {
- glColor4fv(tintcolor);
+ color = tintcolor;
}
else {
ARRAY_SET_ITEMS(tfill, UNPACK3(palcolor->fill), tintcolor[3]);
- glColor4fv(tfill);
+ color = tfill;
}
}
- gp_draw_stroke_fill(gpd, gps, offsx, offsy, winx, winy, diff_mat);
+ gp_draw_stroke_fill(gpd, gps, offsx, offsy, winx, winy, diff_mat, color);
}
}
@@ -983,7 +990,7 @@ static void gp_draw_strokes(
}
if (palcolor->flag & PC_COLOR_VOLUMETRIC) {
/* volumetric stroke drawing */
- gp_draw_stroke_volumetric_3d(gps->points, gps->totpoints, sthickness, dflag, gps->flag, diff_mat, ink);
+ gp_draw_stroke_volumetric_3d(gps->points, gps->totpoints, sthickness, ink);
}
else {
/* 3D Lines - OpenGL primitives-based */
@@ -1001,10 +1008,6 @@ static void gp_draw_strokes(
glDisable(GL_DEPTH_TEST);
bglPolygonOffset(0.0, 0.0);
-#if 0
- glDisable(GL_POLYGON_OFFSET_LINE);
- glPolygonOffset(0, 0);
-#endif
}
}
else {
@@ -1014,20 +1017,21 @@ static void gp_draw_strokes(
interp_v3_v3v3(tfill, palcolor->fill, tintcolor, tintcolor[3]);
tfill[3] = palcolor->fill[3] * opacity;
if (tfill[3] > GPENCIL_ALPHA_OPACITY_THRESH) {
+ const float *color;
if (!onion) {
- glColor4fv(tfill);
+ color = tfill;
}
else {
if (custonion) {
- glColor4fv(tintcolor);
+ color = tintcolor;
}
else {
ARRAY_SET_ITEMS(tfill, palcolor->fill[0], palcolor->fill[1], palcolor->fill[2],
tintcolor[3]);
- glColor4fv(tfill);
+ color = tfill;
}
}
- gp_draw_stroke_fill(gpd, gps, offsx, offsy, winx, winy, diff_mat);
+ gp_draw_stroke_fill(gpd, gps, offsx, offsy, winx, winy, diff_mat, color);
}
}
@@ -1065,15 +1069,15 @@ static void gp_draw_strokes(
}
}
}
+
+ GPU_disable_program_point_size();
}
/* Draw selected verts for strokes being edited */
static void gp_draw_strokes_edit(
- bGPdata *gpd, bGPDframe *gpf, int offsx, int offsy, int winx, int winy, short dflag,
- short lflag, float diff_mat[4][4], float alpha)
+ bGPdata *gpd, const bGPDframe *gpf, int offsx, int offsy, int winx, int winy, short dflag,
+ short lflag, const float diff_mat[4][4], float alpha)
{
- bGPDstroke *gps;
-
/* if alpha 0 do not draw */
if (alpha == 0.0f)
return;
@@ -1087,36 +1091,28 @@ static void gp_draw_strokes_edit(
glGetIntegerv(GL_DEPTH_WRITEMASK, &mask_orig);
glDepthMask(0);
glEnable(GL_DEPTH_TEST);
-
+
/* first arg is normally rv3d->dist, but this isn't
* available here and seems to work quite well without */
bglPolygonOffset(1.0f, 1.0f);
-#if 0
- glEnable(GL_POLYGON_OFFSET_LINE);
- glPolygonOffset(-1.0f, -1.0f);
-#endif
}
}
-
-
- /* draw stroke verts */
- for (gps = gpf->strokes.first; gps; gps = gps->next) {
- bGPDspoint *pt;
- float vsize, bsize;
- int i;
- float fpt[3];
+ GPU_enable_program_point_size();
+
+ /* draw stroke verts */
+ for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
/* check if stroke can be drawn */
if (gp_can_draw_stroke(gps, dflag) == false)
continue;
-
+
/* Optimisation: only draw points for selected strokes
* We assume that selected points can only occur in
* strokes that are selected too.
*/
if ((gps->flag & GP_STROKE_SELECT) == 0)
continue;
-
+
/* verify palette color lock */
{
bGPDpalettecolor *palcolor = ED_gpencil_stroke_getcolor(gpd, gps);
@@ -1135,7 +1131,8 @@ static void gp_draw_strokes_edit(
* they stand out more.
* - We use the theme setting for size of the unselected verts
*/
- bsize = UI_GetThemeValuef(TH_GP_VERTEX_SIZE);
+ float bsize = UI_GetThemeValuef(TH_GP_VERTEX_SIZE);
+ float vsize;
if ((int)bsize > 8) {
vsize = 10.0f;
bsize = 8.0f;
@@ -1143,89 +1140,83 @@ static void gp_draw_strokes_edit(
else {
vsize = bsize + 2;
}
-
- /* First Pass: Draw all the verts (i.e. these become the unselected state) */
+
/* for now, we assume that the base color of the points is not too close to the real color */
/* set color using palette */
bGPDpalettecolor *palcolor = ED_gpencil_stroke_getcolor(gpd, gps);
- glColor3fv(palcolor->color);
- glPointSize(bsize);
-
- glBegin(GL_POINTS);
- for (i = 0, pt = gps->points; i < gps->totpoints && pt; i++, pt++) {
+ float selectColor[4];
+ UI_GetThemeColor3fv(TH_GP_VERTEX_SELECT, selectColor);
+ selectColor[3] = alpha;
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos; /* specified later */
+ unsigned int size = GWN_vertformat_attr_add(format, "size", GWN_COMP_F32, 1, GWN_FETCH_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ if (gps->flag & GP_STROKE_3DSPACE) {
+ pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_POINT_VARYING_SIZE_VARYING_COLOR);
+ }
+ else {
+ pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_POINT_VARYING_SIZE_VARYING_COLOR);
+ }
+
+ immBegin(GWN_PRIM_POINTS, gps->totpoints);
+
+ /* Draw start and end point differently if enabled stroke direction hint */
+ bool show_direction_hint = (gpd->flag & GP_DATA_SHOW_DIRECTION) && (gps->totpoints > 1);
+
+ /* Draw all the stroke points (selected or not) */
+ bGPDspoint *pt = gps->points;
+ float fpt[3];
+ for (int i = 0; i < gps->totpoints; i++, pt++) {
+ /* size and color first */
+ if (show_direction_hint && i == 0) {
+ /* start point in green bigger */
+ immAttrib3f(color, 0.0f, 1.0f, 0.0f);
+ immAttrib1f(size, vsize + 4);
+ }
+ else if (show_direction_hint && (i == gps->totpoints - 1)) {
+ /* end point in red smaller */
+ immAttrib3f(color, 1.0f, 0.0f, 0.0f);
+ immAttrib1f(size, vsize + 1);
+ }
+ else if (pt->flag & GP_SPOINT_SELECT) {
+ immAttrib3fv(color, selectColor);
+ immAttrib1f(size, vsize);
+ }
+ else {
+ immAttrib3fv(color, palcolor->color);
+ immAttrib1f(size, bsize);
+ }
+
+ /* then position */
if (gps->flag & GP_STROKE_3DSPACE) {
mul_v3_m4v3(fpt, diff_mat, &pt->x);
- glVertex3fv(fpt);
+ immVertex3fv(pos, fpt);
}
else {
float co[2];
mul_v3_m4v3(fpt, diff_mat, &pt->x);
gp_calc_2d_stroke_fxy(fpt, gps->flag, offsx, offsy, winx, winy, co);
- glVertex2fv(co);
+ immVertex2fv(pos, co);
}
}
- glEnd();
-
-
- /* Second Pass: Draw only verts which are selected */
- float curColor[4];
- UI_GetThemeColor3fv(TH_GP_VERTEX_SELECT, curColor);
- glColor4f(curColor[0], curColor[1], curColor[2], alpha);
- glPointSize(vsize);
-
- glBegin(GL_POINTS);
- for (i = 0, pt = gps->points; i < gps->totpoints && pt; i++, pt++) {
- if (pt->flag & GP_SPOINT_SELECT) {
- if (gps->flag & GP_STROKE_3DSPACE) {
- mul_v3_m4v3(fpt, diff_mat, &pt->x);
- glVertex3fv(fpt);
- }
- else {
- float co[2];
-
- mul_v3_m4v3(fpt, diff_mat, &pt->x);
- gp_calc_2d_stroke_fxy(fpt, gps->flag, offsx, offsy, winx, winy, co);
- glVertex2fv(co);
- }
- }
- }
- glEnd();
-
- /* Draw start and end point if enabled stroke direction hint */
- if ((gpd->flag & GP_DATA_SHOW_DIRECTION) && (gps->totpoints > 1)) {
- bGPDspoint *p;
-
- glPointSize(vsize + 4);
- glBegin(GL_POINTS);
-
- /* start point in green bigger */
- glColor3f(0.0f, 1.0f, 0.0f);
- p = &gps->points[0];
- mul_v3_m4v3(fpt, diff_mat, &p->x);
- glVertex3fv(fpt);
- glEnd();
-
- /* end point in red smaller */
- glPointSize(vsize + 1);
- glBegin(GL_POINTS);
-
- glColor3f(1.0f, 0.0f, 0.0f);
- p = &gps->points[gps->totpoints - 1];
- mul_v3_m4v3(fpt, diff_mat, &p->x);
- glVertex3fv(fpt);
- glEnd();
- }
+ immEnd();
+ immUnbindProgram();
}
-
-
+
+ GPU_disable_program_point_size();
+
/* clear depth mask */
if (dflag & GP_DRAWDATA_ONLY3D) {
if (no_xray) {
glDepthMask(mask_orig);
glDisable(GL_DEPTH_TEST);
-
+
bglPolygonOffset(0.0, 0.0);
#if 0
glDisable(GL_POLYGON_OFFSET_LINE);
@@ -1239,8 +1230,8 @@ static void gp_draw_strokes_edit(
/* draw onion-skinning for a layer */
static void gp_draw_onionskins(
- bGPdata *gpd, bGPDlayer *gpl, bGPDframe *gpf, int offsx, int offsy, int winx, int winy,
- int UNUSED(cfra), int dflag, bool debug, float diff_mat[4][4])
+ bGPdata *gpd, const bGPDlayer *gpl, const bGPDframe *gpf, int offsx, int offsy, int winx, int winy,
+ int UNUSED(cfra), int dflag, bool debug, const float diff_mat[4][4])
{
const float default_color[3] = {UNPACK3(U.gpencil_new_layer_col)};
const float alpha = 1.0f;
@@ -1253,17 +1244,14 @@ static void gp_draw_onionskins(
else {
copy_v3_v3(color, default_color);
}
-
+
if (gpl->gstep > 0) {
- bGPDframe *gf;
- float fac;
-
/* draw previous frames first */
- for (gf = gpf->prev; gf; gf = gf->prev) {
+ for (bGPDframe *gf = gpf->prev; gf; gf = gf->prev) {
/* check if frame is drawable */
if ((gpf->framenum - gf->framenum) <= gpl->gstep) {
/* alpha decreases with distance from curframe index */
- fac = 1.0f - ((float)(gpf->framenum - gf->framenum) / (float)(gpl->gstep + 1));
+ float fac = 1.0f - ((float)(gpf->framenum - gf->framenum) / (float)(gpl->gstep + 1));
color[3] = alpha * fac * 0.66f;
gp_draw_strokes(gpd, gf, offsx, offsy, winx, winy, dflag, debug, gpl->thickness, 1.0f, color,
true, gpl->flag & GP_LAYER_GHOST_PREVCOL, diff_mat);
@@ -1283,8 +1271,7 @@ static void gp_draw_onionskins(
else {
/* don't draw - disabled */
}
-
-
+
/* 2) Now draw next frames */
if (gpl->flag & GP_LAYER_GHOST_NEXTCOL) {
copy_v3_v3(color, gpl->gcolor_next);
@@ -1292,17 +1279,14 @@ static void gp_draw_onionskins(
else {
copy_v3_v3(color, default_color);
}
-
+
if (gpl->gstep_next > 0) {
- bGPDframe *gf;
- float fac;
-
/* now draw next frames */
- for (gf = gpf->next; gf; gf = gf->next) {
+ for (bGPDframe *gf = gpf->next; gf; gf = gf->next) {
/* check if frame is drawable */
if ((gf->framenum - gpf->framenum) <= gpl->gstep_next) {
/* alpha decreases with distance from curframe index */
- fac = 1.0f - ((float)(gf->framenum - gpf->framenum) / (float)(gpl->gstep_next + 1));
+ float fac = 1.0f - ((float)(gf->framenum - gpf->framenum) / (float)(gpl->gstep_next + 1));
color[3] = alpha * fac * 0.66f;
gp_draw_strokes(gpd, gf, offsx, offsy, winx, winy, dflag, debug, gpl->thickness, 1.0f, color,
true, gpl->flag & GP_LAYER_GHOST_NEXTCOL, diff_mat);
@@ -1322,7 +1306,6 @@ static void gp_draw_onionskins(
else {
/* don't draw - disabled */
}
-
}
/* draw interpolate strokes (used only while operator is running) */
@@ -1360,29 +1343,27 @@ void ED_gp_draw_interpolation(tGPDinterpolate *tgpi, const int type)
/* loop over gpencil data layers, drawing them */
static void gp_draw_data_layers(
- bGPDbrush *brush, float alpha, bGPdata *gpd,
+ const bGPDbrush *brush, float alpha, bGPdata *gpd,
int offsx, int offsy, int winx, int winy, int cfra, int dflag)
{
- bGPDlayer *gpl;
float diff_mat[4][4];
- for (gpl = gpd->layers.first; gpl; gpl = gpl->next) {
- bGPDframe *gpf;
+ for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
/* calculate parent position */
ED_gpencil_parent_location(gpl, diff_mat);
- bool debug = (gpl->flag & GP_LAYER_DRAWDEBUG) ? true : false;
+ bool debug = (gpl->flag & GP_LAYER_DRAWDEBUG);
short lthick = brush->thickness + gpl->thickness;
-
+
/* don't draw layer if hidden */
if (gpl->flag & GP_LAYER_HIDE)
continue;
-
+
/* get frame to draw */
- gpf = BKE_gpencil_layer_getframe(gpl, cfra, 0);
+ bGPDframe *gpf = BKE_gpencil_layer_getframe(gpl, cfra, 0);
if (gpf == NULL)
continue;
-
+
/* set basic stroke thickness */
glLineWidth(lthick);
@@ -1394,10 +1375,10 @@ static void gp_draw_data_layers(
if (condition) dflag |= (draw_flag_value); \
else dflag &= ~(draw_flag_value); \
} (void)0
-
+
/* xray... */
GP_DRAWFLAG_APPLY((gpl->flag & GP_LAYER_NO_XRAY), GP_DRAWDATA_NO_XRAY);
-
+
/* volumetric strokes... */
GP_DRAWFLAG_APPLY((gpl->flag & GP_LAYER_VOLUMETRIC), GP_DRAWDATA_VOLUMETRIC);
@@ -1421,11 +1402,11 @@ static void gp_draw_data_layers(
*/
gp_draw_onionskins(gpd, gpl, gpf, offsx, offsy, winx, winy, cfra, dflag, debug, diff_mat);
}
-
+
/* draw the strokes already in active frame */
gp_draw_strokes(gpd, gpf, offsx, offsy, winx, winy, dflag, debug, gpl->thickness,
gpl->opacity, gpl->tintcolor, false, false, diff_mat);
-
+
/* Draw verts of selected strokes
* - when doing OpenGL renders, we don't want to be showing these, as that ends up flickering
* - locked layers can't be edited, so there's no point showing these verts
@@ -1440,16 +1421,13 @@ static void gp_draw_data_layers(
{
gp_draw_strokes_edit(gpd, gpf, offsx, offsy, winx, winy, dflag, gpl->flag, diff_mat, alpha);
}
-
+
/* Check if may need to draw the active stroke cache, only if this layer is the active layer
* that is being edited. (Stroke buffer is currently stored in gp-data)
*/
if (ED_gpencil_session_active() && (gpl->flag & GP_LAYER_ACTIVE) &&
(gpf->flag & GP_FRAME_PAINT))
{
- /* Set color for drawing buffer stroke - since this may not be set yet */
- // glColor4fv(gpl->color);
-
/* Buffer stroke needs to be drawn with a different linestyle
* to help differentiate them from normal strokes.
*
@@ -1458,89 +1436,84 @@ static void gp_draw_data_layers(
*/
if (gpd->sflag & PC_COLOR_VOLUMETRIC) {
gp_draw_stroke_volumetric_buffer(gpd->sbuffer, gpd->sbuffer_size, lthick,
- dflag, gpd->sbuffer_sflag, gpd->scolor);
+ dflag, gpd->scolor);
}
else {
- gp_draw_stroke_buffer(gpd->sbuffer, gpd->sbuffer_size, lthick, dflag, gpd->sbuffer_sflag, gpd->scolor);
+ gp_draw_stroke_buffer(gpd->sbuffer, gpd->sbuffer_size, lthick, dflag, gpd->sbuffer_sflag, gpd->scolor, gpd->sfill);
}
}
}
}
/* draw a short status message in the top-right corner */
-static void gp_draw_status_text(bGPdata *gpd, ARegion *ar)
+static void gp_draw_status_text(const bGPdata *gpd, ARegion *ar)
{
rcti rect;
-
+
/* Cannot draw any status text when drawing OpenGL Renders */
if (G.f & G_RENDER_OGL)
return;
-
+
/* Get bounds of region - Necessary to avoid problems with region overlap */
ED_region_visible_rect(ar, &rect);
-
+
/* for now, this should only be used to indicate when we are in stroke editmode */
if (gpd->flag & GP_DATA_STROKE_EDITMODE) {
const char *printable = IFACE_("GPencil Stroke Editing");
float printable_size[2];
- int xco, yco;
-
- BLF_width_and_height_default(printable, BLF_DRAW_STR_DUMMY_MAX, &printable_size[0], &printable_size[1]);
-
- xco = (rect.xmax - U.widget_unit) - (int)printable_size[0];
- yco = (rect.ymax - U.widget_unit);
+
+ int font_id = BLF_default();
+
+ BLF_width_and_height(font_id, printable, BLF_DRAW_STR_DUMMY_MAX, &printable_size[0], &printable_size[1]);
+ int xco = (rect.xmax - U.widget_unit) - (int)printable_size[0];
+ int yco = (rect.ymax - U.widget_unit);
+
/* text label */
- UI_ThemeColor(TH_TEXT_HI);
+ UI_FontThemeColor(font_id, TH_TEXT_HI);
#ifdef WITH_INTERNATIONAL
BLF_draw_default(xco, yco, 0.0f, printable, BLF_DRAW_STR_DUMMY_MAX);
#else
BLF_draw_default_ascii(xco, yco, 0.0f, printable, BLF_DRAW_STR_DUMMY_MAX);
#endif
-
+
/* grease pencil icon... */
// XXX: is this too intrusive?
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
-
+
xco -= U.widget_unit;
yco -= (int)printable_size[1] / 2;
UI_icon_draw(xco, yco, ICON_GREASEPENCIL);
-
+
glDisable(GL_BLEND);
}
}
/* draw grease-pencil datablock */
static void gp_draw_data(
- bGPDbrush *brush, float alpha, bGPdata *gpd,
+ const bGPDbrush *brush, float alpha, bGPdata *gpd,
int offsx, int offsy, int winx, int winy, int cfra, int dflag)
{
- /* reset line drawing style (in case previous user didn't reset) */
- setlinestyle(0);
-
/* turn on smooth lines (i.e. anti-aliasing) */
glEnable(GL_LINE_SMOOTH);
-
+
/* XXX: turn on some way of ensuring that the polygon edges get smoothed
* GL_POLYGON_SMOOTH is nasty and shouldn't be used, as it ends up
* creating internal white rays due to the ways it accumulates stuff
*/
-
+
/* turn on alpha-blending */
glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
-
+
/* draw! */
gp_draw_data_layers(brush, alpha, gpd, offsx, offsy, winx, winy, cfra, dflag);
-
+
/* turn off alpha blending, then smooth lines */
glDisable(GL_BLEND); // alpha blending
glDisable(GL_LINE_SMOOTH); // smooth lines
-
- /* restore initial gl conditions */
- glColor4f(0, 0, 0, 1);
}
/* if we have strokes for scenes (3d view)/clips (movie clip editor)
@@ -1575,7 +1548,7 @@ static void gp_draw_data_all(Scene *scene, bGPdata *gpd, int offsx, int offsy, i
}
}
}
-
+
/* scene/clip data has already been drawn, only object/track data is drawn here
* if gpd_source == gpd, we don't have any object/track data and we can skip */
if (gpd_source == NULL || (gpd_source && gpd_source != gpd)) {
@@ -1601,28 +1574,27 @@ void ED_gpencil_draw_2dimage(const bContext *C)
ScrArea *sa = CTX_wm_area(C);
ARegion *ar = CTX_wm_region(C);
Scene *scene = CTX_data_scene(C);
- bGPdata *gpd;
+
int offsx, offsy, sizex, sizey;
int dflag = GP_DRAWDATA_NOSTATUS;
-
- gpd = ED_gpencil_data_get_active(C); // XXX
+
+ bGPdata *gpd = ED_gpencil_data_get_active(C); // XXX
if (gpd == NULL) return;
-
+
/* calculate rect */
switch (sa->spacetype) {
case SPACE_IMAGE: /* image */
case SPACE_CLIP: /* clip */
{
-
/* just draw using standard scaling (settings here are currently ignored anyways) */
/* FIXME: the opengl poly-strokes don't draw at right thickness when done this way, so disabled */
offsx = 0;
offsy = 0;
sizex = ar->winx;
sizey = ar->winy;
-
+
wmOrtho2(ar->v2d.cur.xmin, ar->v2d.cur.xmax, ar->v2d.cur.ymin, ar->v2d.cur.ymax);
-
+
dflag |= GP_DRAWDATA_ONLYV2D | GP_DRAWDATA_IEDITHACK;
break;
}
@@ -1633,7 +1605,7 @@ void ED_gpencil_draw_2dimage(const bContext *C)
offsy = 0;
sizex = ar->winx;
sizey = ar->winy;
-
+
/* NOTE: I2D was used in 2.4x, but the old settings for that have been deprecated
* and everything moved to standard View2d
*/
@@ -1645,77 +1617,80 @@ void ED_gpencil_draw_2dimage(const bContext *C)
offsy = 0;
sizex = ar->winx;
sizey = ar->winy;
-
+
dflag |= GP_DRAWDATA_ONLYI2D;
break;
}
-
+
if (ED_screen_animation_playing(wm)) {
/* don't show onionskins during animation playback/scrub (i.e. it obscures the poses)
* OpenGL Renders (i.e. final output), or depth buffer (i.e. not real strokes)
*/
dflag |= GP_DRAWDATA_NO_ONIONS;
}
-
-
+
/* draw it! */
gp_draw_data_all(scene, gpd, offsx, offsy, sizex, sizey, CFRA, dflag, sa->spacetype);
}
/* draw grease-pencil sketches to specified 2d-view assuming that matrices are already set correctly
- * Note: this gets called twice - first time with onlyv2d=1 to draw 'canvas' strokes,
- * second time with onlyv2d=0 for screen-aligned strokes */
+ * Note: this gets called twice - first time with onlyv2d=true to draw 'canvas' strokes,
+ * second time with onlyv2d=false for screen-aligned strokes */
void ED_gpencil_draw_view2d(const bContext *C, bool onlyv2d)
{
wmWindowManager *wm = CTX_wm_manager(C);
ScrArea *sa = CTX_wm_area(C);
ARegion *ar = CTX_wm_region(C);
Scene *scene = CTX_data_scene(C);
- bGPdata *gpd;
int dflag = 0;
/* check that we have grease-pencil stuff to draw */
if (sa == NULL) return;
- gpd = ED_gpencil_data_get_active(C); // XXX
+ bGPdata *gpd = ED_gpencil_data_get_active(C); // XXX
if (gpd == NULL) return;
-
+
/* special hack for Image Editor */
/* FIXME: the opengl poly-strokes don't draw at right thickness when done this way, so disabled */
if (ELEM(sa->spacetype, SPACE_IMAGE, SPACE_CLIP))
dflag |= GP_DRAWDATA_IEDITHACK;
-
+
/* draw it! */
if (onlyv2d) dflag |= (GP_DRAWDATA_ONLYV2D | GP_DRAWDATA_NOSTATUS);
if (ED_screen_animation_playing(wm)) dflag |= GP_DRAWDATA_NO_ONIONS;
-
+
gp_draw_data_all(scene, gpd, 0, 0, ar->winx, ar->winy, CFRA, dflag, sa->spacetype);
-
+
/* draw status text (if in screen/pixel-space) */
- if (onlyv2d == false) {
+ if (!onlyv2d) {
gp_draw_status_text(gpd, ar);
}
}
/* draw grease-pencil sketches to specified 3d-view assuming that matrices are already set correctly
- * Note: this gets called twice - first time with only3d=1 to draw 3d-strokes,
- * second time with only3d=0 for screen-aligned strokes */
-void ED_gpencil_draw_view3d(wmWindowManager *wm, Scene *scene, View3D *v3d, ARegion *ar, bool only3d)
+ * Note: this gets called twice - first time with only3d=true to draw 3d-strokes,
+ * second time with only3d=false for screen-aligned strokes */
+void ED_gpencil_draw_view3d(wmWindowManager *wm,
+ Scene *scene,
+ ViewLayer *view_layer,
+ const struct Depsgraph *depsgraph,
+ View3D *v3d,
+ ARegion *ar,
+ bool only3d)
{
- bGPdata *gpd;
int dflag = 0;
RegionView3D *rv3d = ar->regiondata;
int offsx, offsy, winx, winy;
-
+
/* check that we have grease-pencil stuff to draw */
- gpd = ED_gpencil_data_get_active_v3d(scene, v3d);
+ bGPdata *gpd = ED_gpencil_data_get_active_v3d(scene, view_layer);
if (gpd == NULL) return;
-
+
/* when rendering to the offscreen buffer we don't want to
* deal with the camera border, otherwise map the coords to the camera border. */
if ((rv3d->persp == RV3D_CAMOB) && !(G.f & G_RENDER_OGL)) {
rctf rectf;
- ED_view3d_calc_camera_border(scene, ar, v3d, rv3d, &rectf, true); /* no shift */
-
+ ED_view3d_calc_camera_border(scene, depsgraph, ar, v3d, rv3d, &rectf, true); /* no shift */
+
offsx = round_fl_to_int(rectf.xmin);
offsy = round_fl_to_int(rectf.ymin);
winx = round_fl_to_int(rectf.xmax - rectf.xmin);
@@ -1727,7 +1702,7 @@ void ED_gpencil_draw_view3d(wmWindowManager *wm, Scene *scene, View3D *v3d, AReg
winx = ar->winx;
winy = ar->winy;
}
-
+
/* set flags */
if (only3d) {
/* 3D strokes/3D space:
@@ -1736,28 +1711,27 @@ void ED_gpencil_draw_view3d(wmWindowManager *wm, Scene *scene, View3D *v3d, AReg
*/
dflag |= (GP_DRAWDATA_ONLY3D | GP_DRAWDATA_NOSTATUS);
}
-
+
if (v3d->flag2 & V3D_RENDER_OVERRIDE) {
/* don't draw status text when "only render" flag is set */
dflag |= GP_DRAWDATA_NOSTATUS;
}
-
+
if ((wm == NULL) || ED_screen_animation_playing(wm)) {
/* don't show onionskins during animation playback/scrub (i.e. it obscures the poses)
* OpenGL Renders (i.e. final output), or depth buffer (i.e. not real strokes)
*/
dflag |= GP_DRAWDATA_NO_ONIONS;
}
-
+
/* draw it! */
- gp_draw_data_all(scene, gpd, offsx, offsy, winx, winy, CFRA, dflag, v3d->spacetype);
-
+ gp_draw_data_all(scene, gpd, offsx, offsy, winx, winy, CFRA, dflag, v3d->spacetype);
}
void ED_gpencil_draw_ex(Scene *scene, bGPdata *gpd, int winx, int winy, const int cfra, const char spacetype)
{
int dflag = GP_DRAWDATA_NOSTATUS | GP_DRAWDATA_ONLYV2D;
-
+
gp_draw_data_all(scene, gpd, 0, 0, winx, winy, cfra, dflag, spacetype);
}
diff --git a/source/blender/editors/gpencil/gpencil_brush.c b/source/blender/editors/gpencil/gpencil_brush.c
index bb3800941ab..38927cf91e1 100644
--- a/source/blender/editors/gpencil/gpencil_brush.c
+++ b/source/blender/editors/gpencil/gpencil_brush.c
@@ -75,8 +75,8 @@
#include "ED_screen.h"
#include "ED_view3d.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
#include "gpencil_intern.h"
@@ -979,28 +979,28 @@ static bool gpsculpt_brush_apply_clone(bContext *C, tGP_BrushEditData *gso)
static void gp_brush_drawcursor(bContext *C, int x, int y, void *UNUSED(customdata))
{
GP_EditBrush_Data *brush = gpsculpt_get_brush(CTX_data_scene(C));
-
+
if (brush) {
- glPushMatrix();
-
- glTranslatef((float)x, (float)y, 0.0f);
-
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
glEnable(GL_LINE_SMOOTH);
glEnable(GL_BLEND);
-
+
/* Inner Ring: Light color for action of the brush */
/* TODO: toggle between add and remove? */
- glColor4ub(255, 255, 255, 200);
- glutil_draw_lined_arc(0.0, M_PI * 2.0, brush->size, 40);
-
+ immUniformColor4ub(255, 255, 255, 200);
+ imm_draw_circle_wire_2d(pos, x, y, brush->size, 40);
+
/* Outer Ring: Dark color for contrast on light backgrounds (e.g. gray on white) */
- glColor3ub(30, 30, 30);
- glutil_draw_lined_arc(0.0, M_PI * 2.0, brush->size + 1, 40);
-
+ immUniformColor3ub(30, 30, 30);
+ imm_draw_circle_wire_2d(pos, x, y, brush->size + 1, 40);
+
+ immUnbindProgram();
+
glDisable(GL_BLEND);
glDisable(GL_LINE_SMOOTH);
-
- glPopMatrix();
}
}
diff --git a/source/blender/editors/gpencil/gpencil_convert.c b/source/blender/editors/gpencil/gpencil_convert.c
index 7d455f214db..d2ae8bc3ce7 100644
--- a/source/blender/editors/gpencil/gpencil_convert.c
+++ b/source/blender/editors/gpencil/gpencil_convert.c
@@ -56,12 +56,13 @@
#include "DNA_view3d_types.h"
#include "DNA_gpencil_types.h"
+#include "BKE_collection.h"
#include "BKE_context.h"
#include "BKE_curve.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
#include "BKE_global.h"
#include "BKE_gpencil.h"
+#include "BKE_layer.h"
#include "BKE_library.h"
#include "BKE_object.h"
#include "BKE_report.h"
@@ -69,6 +70,8 @@
#include "BKE_screen.h"
#include "BKE_tracking.h"
+#include "DEG_depsgraph.h"
+
#include "UI_interface.h"
#include "WM_api.h"
@@ -546,7 +549,7 @@ static void gp_stroke_path_animation(bContext *C, ReportList *reports, Curve *cu
WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
/* send updates */
- DAG_id_tag_update(&cu->id, 0);
+ DEG_id_tag_update(&cu->id, 0);
}
#undef MIN_TIME_DELTA
@@ -1108,7 +1111,8 @@ static int gp_camera_view_subrect(bContext *C, rctf *subrect)
/* for camera view set the subrect */
if (rv3d->persp == RV3D_CAMOB) {
Scene *scene = CTX_data_scene(C);
- ED_view3d_calc_camera_border(scene, ar, v3d, rv3d, subrect, true); /* no shift */
+ Depsgraph *depsgraph = CTX_data_depsgraph(C);
+ ED_view3d_calc_camera_border(scene, depsgraph, ar, v3d, rv3d, subrect, true); /* no shift */
return 1;
}
}
@@ -1121,14 +1125,15 @@ static void gp_layer_to_curve(bContext *C, ReportList *reports, bGPdata *gpd, bG
const bool norm_weights, const float rad_fac, const bool link_strokes, tGpTimingData *gtd)
{
struct Main *bmain = CTX_data_main(C);
- View3D *v3d = CTX_wm_view3d(C); /* may be NULL */
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ SceneCollection *sc = CTX_data_scene_collection(C);
bGPDframe *gpf = BKE_gpencil_layer_getframe(gpl, CFRA, 0);
bGPDstroke *gps, *prev_gps = NULL;
Object *ob;
Curve *cu;
Nurb *nu = NULL;
- Base *base_orig = BASACT, *base_new = NULL;
+ Base *base_new = NULL;
float minmax_weights[2] = {1.0f, 0.0f};
/* camera framing */
@@ -1152,7 +1157,8 @@ static void gp_layer_to_curve(bContext *C, ReportList *reports, bGPdata *gpd, bG
*/
ob = BKE_object_add_only_object(bmain, OB_CURVE, gpl->info);
cu = ob->data = BKE_curve_add(bmain, gpl->info, OB_CURVE);
- base_new = BKE_scene_base_add(scene, ob);
+ BKE_collection_object_add(&scene->id, sc, ob);
+ base_new = BKE_view_layer_base_find(view_layer, ob);
cu->flag |= CU_3D;
@@ -1216,8 +1222,8 @@ static void gp_layer_to_curve(bContext *C, ReportList *reports, bGPdata *gpd, bG
}
/* set the layer and select */
- base_new->lay = ob->lay = base_orig ? base_orig->lay : BKE_screen_view3d_layer_active(v3d, scene);
- base_new->flag = ob->flag = base_new->flag | SELECT;
+ base_new->flag |= SELECT;
+ BKE_scene_object_base_flag_sync_from_base(base_new);
}
/* --- */
diff --git a/source/blender/editors/gpencil/gpencil_edit.c b/source/blender/editors/gpencil/gpencil_edit.c
index 726215255aa..22a3224e563 100644
--- a/source/blender/editors/gpencil/gpencil_edit.c
+++ b/source/blender/editors/gpencil/gpencil_edit.c
@@ -79,6 +79,8 @@
#include "ED_view3d.h"
#include "ED_space_api.h"
+#include "DEG_depsgraph.h"
+
#include "gpencil_intern.h"
/* ************************************************ */
@@ -2108,8 +2110,12 @@ static int gp_strokes_reproject_exec(bContext *C, wmOperator *op)
/* init autodist for geometry projection */
if (mode == GP_REPROJECT_SURFACE) {
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
+ struct Depsgraph *graph = CTX_data_depsgraph(C);
view3d_region_operator_needs_opengl(CTX_wm_window(C), gsc.ar);
- ED_view3d_autodist_init(scene, gsc.ar, CTX_wm_view3d(C), 0);
+ ED_view3d_autodist_init(&eval_ctx, graph, gsc.ar, CTX_wm_view3d(C), 0);
}
// TODO: For deforming geometry workflow, create new frames?
diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c
index f54356dfed3..472b88cb18b 100644
--- a/source/blender/editors/gpencil/gpencil_paint.c
+++ b/source/blender/editors/gpencil/gpencil_paint.c
@@ -69,15 +69,19 @@
#include "ED_view3d.h"
#include "ED_clip.h"
-#include "BIF_gl.h"
#include "BIF_glutil.h"
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+
#include "RNA_access.h"
#include "RNA_define.h"
#include "WM_api.h"
#include "WM_types.h"
+#include "DEG_depsgraph.h"
+
#include "gpencil_intern.h"
/* ******************************************* */
@@ -112,7 +116,9 @@ typedef enum eGPencil_PaintFlags {
* "p" = op->customdata
*/
typedef struct tGPsdata {
+ EvaluationContext eval_ctx;
Scene *scene; /* current scene from context */
+ struct Depsgraph *graph;
wmWindow *win; /* window where painting originated */
ScrArea *sa; /* area where painting originated */
@@ -481,7 +487,8 @@ static void gp_brush_angle(bGPdata *gpd, bGPDbrush *brush, tGPspoint *pt, const
}
/* add current stroke-point to buffer (returns whether point was successfully added) */
-static short gp_stroke_addpoint(tGPsdata *p, const int mval[2], float pressure, double curtime)
+static short gp_stroke_addpoint(
+ tGPsdata *p, const int mval[2], float pressure, double curtime)
{
bGPdata *gpd = p->gpd;
bGPDbrush *brush = p->brush;
@@ -639,7 +646,8 @@ static short gp_stroke_addpoint(tGPsdata *p, const int mval[2], float pressure,
View3D *v3d = p->sa->spacedata.first;
view3d_region_operator_needs_opengl(p->win, p->ar);
- ED_view3d_autodist_init(p->scene, p->ar, v3d, (ts->gpencil_v3d_align & GP_PROJECT_DEPTH_STROKE) ? 1 : 0);
+ ED_view3d_autodist_init(
+ &p->eval_ctx, p->graph, p->ar, v3d, (ts->gpencil_v3d_align & GP_PROJECT_DEPTH_STROKE) ? 1 : 0);
}
/* convert screen-coordinates to appropriate coordinates (and store them) */
@@ -735,7 +743,7 @@ static void gp_stroke_simplify(tGPsdata *p)
/* ignore return values on this... assume to be ok for now */
gp_stroke_addpoint(p, mco, pressure, p->inittime + (double)time);
-
+
j += 2;
}
}
@@ -1239,9 +1247,8 @@ static void gp_stroke_doeraser(tGPsdata *p)
if (p->sa->spacetype == SPACE_VIEW3D) {
if (p->flags & GP_PAINTFLAG_V3D_ERASER_DEPTH) {
View3D *v3d = p->sa->spacedata.first;
-
view3d_region_operator_needs_opengl(p->win, p->ar);
- ED_view3d_autodist_init(p->scene, p->ar, v3d, 0);
+ ED_view3d_autodist_init(&p->eval_ctx, p->graph, p->ar, v3d, 0);
}
}
@@ -1394,7 +1401,9 @@ static bool gp_session_initdata(bContext *C, tGPsdata *p)
}
/* pass on current scene and window */
+ CTX_data_eval_ctx(C, &p->eval_ctx);
p->scene = CTX_data_scene(C);
+ p->graph = CTX_data_depsgraph(C);
p->win = CTX_wm_window(C);
unit_m4(p->imat);
@@ -1549,6 +1558,7 @@ static bool gp_session_initdata(bContext *C, tGPsdata *p)
bGPDpalettecolor *palcolor = p->palettecolor;
bGPdata *pdata = p->gpd;
copy_v4_v4(pdata->scolor, palcolor->color);
+ copy_v4_v4(pdata->sfill, palcolor->fill);
pdata->sflag = palcolor->flag;
/* lock axis */
p->lock_axis = ts->gp_sculpt.lock_axis;
@@ -1599,7 +1609,7 @@ static void gp_session_cleanup(tGPsdata *p)
}
/* init new stroke */
-static void gp_paint_initstroke(tGPsdata *p, eGPencil_PaintModes paintmode)
+static void gp_paint_initstroke(tGPsdata *p, eGPencil_PaintModes paintmode, const Depsgraph *depsgraph)
{
Scene *scene = p->scene;
ToolSettings *ts = scene->toolsettings;
@@ -1728,7 +1738,7 @@ static void gp_paint_initstroke(tGPsdata *p, eGPencil_PaintModes paintmode)
/* for camera view set the subrect */
if (rv3d->persp == RV3D_CAMOB) {
- ED_view3d_calc_camera_border(p->scene, p->ar, v3d, rv3d, &p->subrect_data, true); /* no shift */
+ ED_view3d_calc_camera_border(p->scene, depsgraph, p->ar, v3d, rv3d, &p->subrect_data, true); /* no shift */
p->subrect = &p->subrect_data;
}
}
@@ -1806,14 +1816,14 @@ static void gp_paint_strokeend(tGPsdata *p)
/* need to restore the original projection settings before packing up */
view3d_region_operator_needs_opengl(p->win, p->ar);
- ED_view3d_autodist_init(p->scene, p->ar, v3d, (ts->gpencil_v3d_align & GP_PROJECT_DEPTH_STROKE) ? 1 : 0);
+ ED_view3d_autodist_init(&p->eval_ctx, p->graph, p->ar, v3d, (ts->gpencil_v3d_align & GP_PROJECT_DEPTH_STROKE) ? 1 : 0);
}
/* check if doing eraser or not */
if ((p->gpd->sbuffer_sflag & GP_STROKE_ERASER) == 0) {
/* simplify stroke before transferring? */
gp_stroke_simplify(p);
-
+
/* transfer stroke to frame */
gp_stroke_newfrombuffer(p);
}
@@ -1844,28 +1854,41 @@ static void gp_paint_cleanup(tGPsdata *p)
static void gpencil_draw_eraser(bContext *UNUSED(C), int x, int y, void *p_ptr)
{
tGPsdata *p = (tGPsdata *)p_ptr;
-
+
if (p->paintmode == GP_PAINTMODE_ERASER) {
- glPushMatrix();
-
- glTranslatef((float)x, (float)y, 0.0f);
-
+ Gwn_VertFormat *format = immVertexFormat();
+ const uint shdr_pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
glEnable(GL_LINE_SMOOTH);
glEnable(GL_BLEND);
-
- glColor4ub(255, 100, 100, 20);
- glutil_draw_filled_arc(0.0, M_PI * 2.0, p->radius, 40);
-
- setlinestyle(6);
-
- glColor4ub(255, 100, 100, 200);
- glutil_draw_lined_arc(0.0, M_PI * 2.0, p->radius, 40);
-
- setlinestyle(0);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
+ immUniformColor4ub(255, 100, 100, 20);
+ imm_draw_circle_fill_2d(shdr_pos, x, y, p->radius, 40);
+
+ immUnbindProgram();
+
+ immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR);
+
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2], viewport_size[3]);
+
+ immUniformColor4f(1.0f, 0.39f, 0.39f, 0.78f);
+ immUniform1i("num_colors", 0); /* "simple" mode */
+ immUniform1f("dash_width", 12.0f);
+ immUniform1f("dash_factor", 0.5f);
+
+ imm_draw_circle_wire_2d(shdr_pos, x, y, p->radius,
+ /* XXX Dashed shader gives bad results with sets of small segments currently,
+ * temp hack around the issue. :( */
+ max_ii(8, p->radius / 2)); /* was fixed 40 */
+
+ immUnbindProgram();
+
glDisable(GL_BLEND);
glDisable(GL_LINE_SMOOTH);
-
- glPopMatrix();
}
}
@@ -1956,7 +1979,7 @@ static int gpencil_draw_init(bContext *C, wmOperator *op, const wmEvent *event)
}
/* init painting data */
- gp_paint_initstroke(p, paintmode);
+ gp_paint_initstroke(p, paintmode, CTX_data_depsgraph(C));
if (p->status == GP_STATUS_ERROR) {
gpencil_draw_exit(C, op);
return 0;
@@ -2033,13 +2056,13 @@ static void gpencil_draw_status_indicators(tGPsdata *p)
/* ------------------------------- */
/* create a new stroke point at the point indicated by the painting context */
-static void gpencil_draw_apply(wmOperator *op, tGPsdata *p)
+static void gpencil_draw_apply(wmOperator *op, tGPsdata *p, const Depsgraph *depsgraph)
{
/* handle drawing/erasing -> test for erasing first */
if (p->paintmode == GP_PAINTMODE_ERASER) {
/* do 'live' erasing now */
gp_stroke_doeraser(p);
-
+
/* store used values */
p->mvalo[0] = p->mval[0];
p->mvalo[1] = p->mval[1];
@@ -2049,13 +2072,13 @@ static void gpencil_draw_apply(wmOperator *op, tGPsdata *p)
else if (gp_stroke_filtermval(p, p->mval, p->mvalo)) {
/* try to add point */
short ok = gp_stroke_addpoint(p, p->mval, p->pressure, p->curtime);
-
+
/* handle errors while adding point */
if ((ok == GP_STROKEADD_FULL) || (ok == GP_STROKEADD_OVERFLOW)) {
/* finish off old stroke */
gp_paint_strokeend(p);
/* And start a new one!!! Else, projection errors! */
- gp_paint_initstroke(p, p->paintmode);
+ gp_paint_initstroke(p, p->paintmode, depsgraph);
/* start a new stroke, starting from previous point */
/* XXX Must manually reset inittime... */
@@ -2088,7 +2111,7 @@ static void gpencil_draw_apply(wmOperator *op, tGPsdata *p)
}
/* handle draw event */
-static void gpencil_draw_apply_event(wmOperator *op, const wmEvent *event)
+static void gpencil_draw_apply_event(wmOperator *op, const wmEvent *event, const Depsgraph *depsgraph)
{
tGPsdata *p = op->customdata;
PointerRNA itemptr;
@@ -2193,8 +2216,8 @@ static void gpencil_draw_apply_event(wmOperator *op, const wmEvent *event)
RNA_float_set(&itemptr, "time", p->curtime - p->inittime);
/* apply the current latest drawing point */
- gpencil_draw_apply(op, p);
-
+ gpencil_draw_apply(op, p, depsgraph);
+
/* force refresh */
ED_region_tag_redraw(p->ar); /* just active area for now, since doing whole screen is too slow */
}
@@ -2205,6 +2228,7 @@ static void gpencil_draw_apply_event(wmOperator *op, const wmEvent *event)
static int gpencil_draw_exec(bContext *C, wmOperator *op)
{
tGPsdata *p = NULL;
+ Depsgraph *depsgraph = CTX_data_depsgraph(C);
/* printf("GPencil - Starting Re-Drawing\n"); */
@@ -2242,7 +2266,7 @@ static int gpencil_draw_exec(bContext *C, wmOperator *op)
if ((p->flags & GP_PAINTFLAG_FIRSTRUN) == 0) {
/* TODO: both of these ops can set error-status, but we probably don't need to worry */
gp_paint_strokeend(p);
- gp_paint_initstroke(p, p->paintmode);
+ gp_paint_initstroke(p, p->paintmode, depsgraph);
}
}
@@ -2257,7 +2281,7 @@ static int gpencil_draw_exec(bContext *C, wmOperator *op)
}
/* apply this data as necessary now (as per usual) */
- gpencil_draw_apply(op, p);
+ gpencil_draw_apply(op, p, depsgraph);
}
RNA_END;
@@ -2316,7 +2340,7 @@ static int gpencil_draw_invoke(bContext *C, wmOperator *op, const wmEvent *event
p->status = GP_STATUS_PAINTING;
/* handle the initial drawing - i.e. for just doing a simple dot */
- gpencil_draw_apply_event(op, event);
+ gpencil_draw_apply_event(op, event, CTX_data_depsgraph(C));
op->flag |= OP_IS_MODAL_CURSOR_REGION;
}
else {
@@ -2357,7 +2381,7 @@ static tGPsdata *gpencil_stroke_begin(bContext *C, wmOperator *op)
* it'd be nice to allow changing paint-mode when in sketching-sessions */
if (gp_session_initdata(C, p))
- gp_paint_initstroke(p, p->paintmode);
+ gp_paint_initstroke(p, p->paintmode, CTX_data_depsgraph(C));
if (p->status != GP_STATUS_ERROR) {
p->status = GP_STATUS_PAINTING;
@@ -2370,9 +2394,9 @@ static tGPsdata *gpencil_stroke_begin(bContext *C, wmOperator *op)
static void gpencil_stroke_end(wmOperator *op)
{
tGPsdata *p = op->customdata;
-
+
gp_paint_cleanup(p);
-
+
gpencil_undo_push(p->gpd);
gp_session_cleanup(p);
@@ -2506,7 +2530,7 @@ static int gpencil_draw_modal(bContext *C, wmOperator *op, const wmEvent *event)
/* end stroke only, and then wait to resume painting soon */
/* printf("\t\tGP - end stroke only\n"); */
gpencil_stroke_end(op);
-
+
/* If eraser mode is on, turn it off after the stroke finishes
* NOTE: This just makes it nicer to work with drawing sessions
*/
@@ -2648,8 +2672,8 @@ static int gpencil_draw_modal(bContext *C, wmOperator *op, const wmEvent *event)
if (ELEM(event->type, MOUSEMOVE, INBETWEEN_MOUSEMOVE) || (p->flags & GP_PAINTFLAG_FIRSTRUN)) {
/* handle drawing event */
/* printf("\t\tGP - add point\n"); */
- gpencil_draw_apply_event(op, event);
-
+ gpencil_draw_apply_event(op, event, CTX_data_depsgraph(C));
+
/* finish painting operation if anything went wrong just now */
if (p->status == GP_STATUS_ERROR) {
printf("\t\t\t\tGP - add error done!\n");
diff --git a/source/blender/editors/gpencil/gpencil_utils.c b/source/blender/editors/gpencil/gpencil_utils.c
index 672c87ed6fd..94689fb59fa 100644
--- a/source/blender/editors/gpencil/gpencil_utils.c
+++ b/source/blender/editors/gpencil/gpencil_utils.c
@@ -65,6 +65,8 @@
#include "ED_clip.h"
#include "ED_view3d.h"
+#include "DEG_depsgraph.h"
+
#include "gpencil_intern.h"
/* ******************************************************** */
@@ -202,15 +204,15 @@ bGPdata *ED_gpencil_data_get_active(const bContext *C)
/* -------------------------------------------------------- */
// XXX: this should be removed... We really shouldn't duplicate logic like this!
-bGPdata *ED_gpencil_data_get_active_v3d(Scene *scene, View3D *v3d)
+bGPdata *ED_gpencil_data_get_active_v3d(Scene *scene, ViewLayer *view_layer)
{
- Base *base = scene->basact;
+ Base *base = view_layer->basact;
bGPdata *gpd = NULL;
/* We have to make sure active object is actually visible and selected, else we must use default scene gpd,
* to be consistent with ED_gpencil_data_get_active's behavior.
*/
- if (base && TESTBASE(v3d, base)) {
+ if (base && TESTBASE(base)) {
gpd = base->object->gpd;
}
return gpd ? gpd : scene->gpd;
@@ -536,18 +538,22 @@ void gp_point_conversion_init(bContext *C, GP_SpaceConversion *r_gsc)
if (sa->spacetype == SPACE_VIEW3D) {
wmWindow *win = CTX_wm_window(C);
Scene *scene = CTX_data_scene(C);
+ struct Depsgraph *graph = CTX_data_depsgraph(C);
View3D *v3d = (View3D *)CTX_wm_space_data(C);
RegionView3D *rv3d = ar->regiondata;
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
/* init 3d depth buffers */
view3d_operator_needs_opengl(C);
view3d_region_operator_needs_opengl(win, ar);
- ED_view3d_autodist_init(scene, ar, v3d, 0);
+ ED_view3d_autodist_init(&eval_ctx, graph, ar, v3d, 0);
/* for camera view set the subrect */
if (rv3d->persp == RV3D_CAMOB) {
- ED_view3d_calc_camera_border(scene, ar, v3d, rv3d, &r_gsc->subrect_data, true); /* no shift */
+ ED_view3d_calc_camera_border(scene, CTX_data_depsgraph(C), ar, v3d, rv3d, &r_gsc->subrect_data, true); /* no shift */
r_gsc->subrect = &r_gsc->subrect_data;
}
}
@@ -912,8 +918,8 @@ bool gp_smooth_stroke_thickness(bGPDstroke *gps, int i, float inf)
ptc = &gps->points[after];
/* the optimal value is the corresponding to the interpolation of the pressure
- * at the distance of point b
- */
+ * at the distance of point b
+ */
float fac = line_point_factor_v3(&ptb->x, &pta->x, &ptc->x);
float optimal = (1.0f - fac) * pta->pressure + fac * ptc->pressure;
diff --git a/source/blender/editors/include/BIF_gl.h b/source/blender/editors/include/BIF_gl.h
index e264d9e16a3..f91e7d42bca 100644
--- a/source/blender/editors/include/BIF_gl.h
+++ b/source/blender/editors/include/BIF_gl.h
@@ -36,45 +36,6 @@
#include "GPU_glew.h"
#include "BLI_utildefines.h"
-/*
- * these should be phased out. cpack should be replaced in
- * code with calls to glColor3ub. - zr
- */
-/*
- *
- * This define converts a numerical value to the equivalent 24-bit
- * color, while not being endian-sensitive. On little-endians, this
- * is the same as doing a 'naive' indexing, on big-endian, it is not!
- * */
-void cpack(unsigned int x);
-
-#ifdef WITH_GL_PROFILE_COMPAT
-#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)
-# define glMultMatrixf(x) \
- glMultMatrixf(_Generic((x), \
- float *: (float *)(x), \
- float [16]: (float *)(x), \
- float (*)[4]: (float *)(x), \
- float [4][4]: (float *)(x), \
- const float *: (float *)(x), \
- const float [16]: (float *)(x), \
- const float (*)[4]: (float *)(x), \
- const float [4][4]: (float *)(x)) \
-)
-# define glLoadMatrixf(x) \
- glLoadMatrixf(_Generic((x), \
- float *: (float *)(x), \
- float [16]: (float *)(x), \
- float (*)[4]: (float *)(x), \
- float [4][4]: (float *)(x)) \
-)
-#else
-# define glMultMatrixf(x) glMultMatrixf((float *)(x))
-# define glLoadMatrixf(x) glLoadMatrixf((float *)(x))
-#endif /* C11 */
-#endif /* WITH_GL_PROFILE_COMPAT */
-
-
/* hacking pointsize and linewidth */
#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)
# define glPointSize(f) glPointSize(U.pixelsize * _Generic((f), double: (float)(f), default: (f)))
@@ -86,19 +47,5 @@ void cpack(unsigned int x);
#define GLA_PIXEL_OFS 0.375f
-
-BLI_INLINE void glTranslate3iv(const int vec[3]) { glTranslatef(UNPACK3_EX((const float), vec, )); }
-BLI_INLINE void glTranslate2iv(const int vec[2]) { glTranslatef(UNPACK2_EX((const float), vec, ), 0.0f); }
-BLI_INLINE void glTranslate3fv(const float vec[3]) { glTranslatef(UNPACK3(vec)); }
-BLI_INLINE void glTranslate2fv(const float vec[2]) { glTranslatef(UNPACK2(vec), 0.0f); }
-
-BLI_INLINE void glScale3iv(const int vec[3]) { glTranslatef(UNPACK3_EX((const float), vec, )); }
-BLI_INLINE void glScale2iv(const int vec[2]) { glTranslatef(UNPACK2_EX((const float), vec, ), 0.0f); }
-BLI_INLINE void glScale3fv(const float vec[3]) { glScalef(UNPACK3(vec)); }
-BLI_INLINE void glScale2fv(const float vec[2]) { glScalef(UNPACK2(vec), 0.0); }
-
-/* v2 versions don't make much sense for rotation */
-BLI_INLINE void glRotate3fv(const float angle, const float vec[3]) { glRotatef(angle, UNPACK3(vec)); }
-
#endif /* #ifdef __BIF_GL_H__ */
diff --git a/source/blender/editors/include/BIF_glutil.h b/source/blender/editors/include/BIF_glutil.h
index d3d2c465d46..3184ebee4d9 100644
--- a/source/blender/editors/include/BIF_glutil.h
+++ b/source/blender/editors/include/BIF_glutil.h
@@ -38,56 +38,14 @@ struct bContext;
struct ColorManagedViewSettings;
struct ColorManagedDisplaySettings;
-void fdrawbezier(float vec[4][3]);
-void fdrawline(float x1, float y1, float x2, float y2);
-void fdrawbox(float x1, float y1, float x2, float y2);
-void sdrawline(int x1, int y1, int x2, int y2);
-#if 0
-void sdrawtri(int x1, int y1, int x2, int y2);
-void sdrawtrifill(int x1, int y1, int x2, int y2);
-#endif
-void sdrawbox(int x1, int y1, int x2, int y2);
-
-void sdrawXORline(int x0, int y0, int x1, int y1);
-void sdrawXORline4(int nr, int x0, int y0, int x1, int y1);
-
-void fdrawXORellipse(float xofs, float yofs, float hw, float hh);
-void fdrawXORcirc(float xofs, float yofs, float rad);
-
-void fdrawcheckerboard(float x1, float y1, float x2, float y2);
-
-/* OpenGL stipple defines */
-extern const unsigned char stipple_halftone[128];
-extern const unsigned char stipple_quarttone[128];
-extern const unsigned char stipple_diag_stripes_pos[128];
-extern const unsigned char stipple_diag_stripes_neg[128];
-extern const unsigned char stipple_checker_8px[128];
-
-/**
- * Draw a lined (non-looping) arc with the given
- * \a radius, starting at angle \a start and arcing
- * through \a angle. The arc is centered at the origin
- * and drawn in the XY plane.
+/* A few functions defined here are being DEPRECATED for Blender 2.8
*
- * \param start The initial angle (in radians).
- * \param angle The length of the arc (in radians).
- * \param radius The arc radius.
- * \param nsegments The number of segments to use in drawing the arc.
- */
-void glutil_draw_lined_arc(float start, float angle, float radius, int nsegments);
-
-/**
- * Draw a filled arc with the given \a radius,
- * starting at angle \a start and arcing through
- * \a angle. The arc is centered at the origin
- * and drawn in the XY plane.
+ * Do not use them in new code, and you are encouraged to
+ * convert existing code to draw without these.
*
- * \param start The initial angle (in radians).
- * \param angle The length of the arc (in radians).
- * \param radius The arc radius.
- * \param nsegments The number of segments to use in drawing the arc.
+ * These will be deleted before we ship 2.8!
+ * - merwin
*/
-void glutil_draw_filled_arc(float start, float angle, float radius, int nsegments);
/**
* Returns a float value as obtained by glGetFloatv.
@@ -109,58 +67,46 @@ int glaGetOneInt(int param);
*/
void glaRasterPosSafe2f(float x, float y, float known_good_x, float known_good_y);
-/**
- * Functions like a limited glDrawPixels, except ensures that
- * the image is displayed onscreen even if the \a x and \a y
- * coordinates for would be clipped. The routine respects the
- * glPixelZoom values, pixel unpacking parameters are _not_
- * respected.
- *
- * \attention This routine makes many assumptions: the rect data
- * is expected to be in RGBA unsigned byte format, the coordinate
- * (GLA_PIXEL_OFS, GLA_PIXEL_OFS) is assumed to be within the view frustum,
- * and the modelview and projection matrices are assumed to define a
- * 1-to-1 mapping to screen space.
- * \attention Furthermore, in the case of zoomed or unpixel aligned
- * images extending outside the view frustum, but still within the
- * window, some portion of the image may be visible left and/or
- * below of the given \a x and \a y coordinates. It is recommended
- * to use the glScissor functionality if images are to be drawn
- * with an inset view matrix.
- */
-void glaDrawPixelsSafe(float x, float y, int img_w, int img_h, int row_w, int format, int type, void *rect);
+typedef struct IMMDrawPixelsTexState {
+ struct GPUShader *shader;
+ unsigned int pos;
+ unsigned int texco;
+ bool do_shader_unbind;
+} IMMDrawPixelsTexState;
+
+/* To be used before calling immDrawPixelsTex
+ * Default shader is GPU_SHADER_2D_IMAGE_COLOR
+ * Returns a shader to be able to set uniforms */
+IMMDrawPixelsTexState immDrawPixelsTexSetup(int builtin);
/**
- * glaDrawPixelsTex - Functions like a limited glDrawPixels, but actually draws the
+ * immDrawPixelsTex - Functions like a limited glDrawPixels, but actually draws the
* image using textures, which can be tremendously faster on low-end
* cards, and also avoids problems with the raster position being
- * clipped when offscreen. The routine respects the glPixelZoom values,
- * pixel unpacking parameters are _not_ respected.
+ * clipped when offscreen. Pixel unpacking parameters and
+ * the glPixelZoom values are _not_ respected.
+ *
+ * \attention Use immDrawPixelsTexSetup before calling this function.
*
* \attention This routine makes many assumptions: the rect data
* is expected to be in RGBA byte or float format, and the
* modelview and projection matrices are assumed to define a
* 1-to-1 mapping to screen space.
*/
-
-void glaDrawPixelsTex(float x, float y, int img_w, int img_h, int format, int type, int zoomfilter, void *rect);
-void glaDrawPixelsTex_clipping(float x, float y, int img_w, int img_h, int format, int type, int zoomfilter, void *rect,
- float clip_min_x, float clip_min_y, float clip_max_x, float clip_max_y);
-
-/**
- * glaDrawPixelsAuto - Switches between texture or pixel drawing using UserDef.
- * only RGBA
- * needs glaDefine2DArea to be set.
- */
-void glaDrawPixelsAuto(float x, float y, int img_w, int img_h, int format, int type, int zoomfilter, void *rect);
-void glaDrawPixelsAuto_clipping(float x, float y, int img_w, int img_h, int format, int type, int zoomfilter, void *rect,
- float clip_min_x, float clip_min_y, float clip_max_x, float clip_max_y);
-
-
-void glaDrawPixelsTexScaled(float x, float y, int img_w, int img_h, int format, int type, int zoomfilter, void *rect, float scaleX, float scaleY);
-void glaDrawPixelsTexScaled_clipping(float x, float y, int img_w, int img_h, int format, int type, int zoomfilter, void *rect, float scaleX, float scaleY,
- float clip_min_x, float clip_min_y, float clip_max_x, float clip_max_y);
-
+void immDrawPixelsTex(IMMDrawPixelsTexState *state,
+ float x, float y, int img_w, int img_h, int format, int type, int zoomfilter, void *rect,
+ float xzoom, float yzoom, float color[4]);
+void immDrawPixelsTex_clipping(IMMDrawPixelsTexState *state,
+ float x, float y, int img_w, int img_h, int format, int type, int zoomfilter, void *rect,
+ float clip_min_x, float clip_min_y, float clip_max_x, float clip_max_y,
+ float xzoom, float yzoom, float color[4]);
+void immDrawPixelsTexScaled(IMMDrawPixelsTexState *state,
+ float x, float y, int img_w, int img_h, int format, int type, int zoomfilter, void *rect, float scaleX, float scaleY,
+ float xzoom, float yzoom, float color[4]);
+void immDrawPixelsTexScaled_clipping(IMMDrawPixelsTexState *state,
+ float x, float y, int img_w, int img_h, int format, int type, int zoomfilter, void *rect, float scaleX, float scaleY,
+ float clip_min_x, float clip_min_y, float clip_max_x, float clip_max_y,
+ float xzoom, float yzoom, float color[4]);
/* 2D Drawing Assistance */
/** Define a 2D area (viewport, scissor, matrices) for OpenGL rendering.
@@ -176,12 +122,13 @@ void glaDrawPixelsTexScaled_clipping(float x, float y, int img_w, int img_h, int
*/
void glaDefine2DArea(struct rcti *screen_rect);
-typedef struct gla2DDrawInfo gla2DDrawInfo;
+/* TODO(merwin): put the following 2D code to use, or build new 2D code inspired & informd by it */
+
+#if 0 /* UNUSED */
-/* UNUSED */
-#if 0
+typedef struct gla2DDrawInfo gla2DDrawInfo;
-gla2DDrawInfo *glaBegin2DDraw(struct rcti *screen_rect, struct rctf *world_rect);
+gla2DDrawInfo *glaBegin2DDraw(struct rcti *screen_rect, struct rctf *world_rect);
void gla2DDrawTranslatePt(gla2DDrawInfo *di, float wo_x, float wo_y, int *r_sc_x, int *r_sc_y);
void gla2DDrawTranslatePtv(gla2DDrawInfo *di, float world[2], int r_screen[2]);
@@ -190,7 +137,8 @@ void glaEnd2DDraw(gla2DDrawInfo *di);
/** Adjust the transformation mapping of a 2d area */
void gla2DGetMap(gla2DDrawInfo *di, struct rctf *rect);
void gla2DSetMap(gla2DDrawInfo *di, struct rctf *rect);
-#endif
+
+#endif /* UNUSED */
void set_inverted_drawing(int enable);
void setlinestyle(int nr);
@@ -198,37 +146,32 @@ void setlinestyle(int nr);
/* own working polygon offset */
void bglPolygonOffset(float viewdist, float dist);
-/* For caching opengl matrices (gluProject/gluUnProject) */
-typedef struct bglMats {
- double modelview[16];
- double projection[16];
- int viewport[4];
-} bglMats;
-void bgl_get_mats(bglMats *mats);
-
/* **** Color management helper functions for GLSL display/transform ***** */
/* Draw imbuf on a screen, preferably using GLSL display transform */
void glaDrawImBuf_glsl(struct ImBuf *ibuf, float x, float y, int zoomfilter,
struct ColorManagedViewSettings *view_settings,
- struct ColorManagedDisplaySettings *display_settings);
+ struct ColorManagedDisplaySettings *display_settings,
+ float zoom_x, float zoom_y);
void glaDrawImBuf_glsl_clipping(struct ImBuf *ibuf, float x, float y, int zoomfilter,
struct ColorManagedViewSettings *view_settings,
struct ColorManagedDisplaySettings *display_settings,
float clip_min_x, float clip_min_y,
- float clip_max_x, float clip_max_y);
+ float clip_max_x, float clip_max_y,
+ float zoom_x, float zoom_y);
/* Draw imbuf on a screen, preferably using GLSL display transform */
-void glaDrawImBuf_glsl_ctx(const struct bContext *C, struct ImBuf *ibuf, float x, float y, int zoomfilter);
+void glaDrawImBuf_glsl_ctx(const struct bContext *C, struct ImBuf *ibuf, float x, float y, int zoomfilter,
+ float zoom_x, float zoom_y);
void glaDrawImBuf_glsl_ctx_clipping(const struct bContext *C,
struct ImBuf *ibuf,
float x, float y,
int zoomfilter,
float clip_min_x, float clip_min_y,
- float clip_max_x, float clip_max_y);
+ float clip_max_x, float clip_max_y,
+ float zoom_x, float zoom_y);
-void glaDrawBorderCorners(const struct rcti *border, float zoomx, float zoomy);
+void immDrawBorderCorners(unsigned int pos, const struct rcti *border, float zoomx, float zoomy);
#endif /* __BIF_GLUTIL_H__ */
-
diff --git a/source/blender/editors/include/ED_anim_api.h b/source/blender/editors/include/ED_anim_api.h
index ab02fd1ccc8..db141a2ee29 100644
--- a/source/blender/editors/include/ED_anim_api.h
+++ b/source/blender/editors/include/ED_anim_api.h
@@ -82,6 +82,7 @@ typedef struct bAnimContext {
struct bDopeSheet *ads; /* dopesheet data for editor (or which is being used) */
struct Scene *scene; /* active scene */
+ struct ViewLayer *view_layer; /* active scene layer */
struct Object *obact; /* active object */
ListBase *markers; /* active set of markers */
diff --git a/source/blender/editors/include/ED_armature.h b/source/blender/editors/include/ED_armature.h
index 00081b95c51..5ad242003e3 100644
--- a/source/blender/editors/include/ED_armature.h
+++ b/source/blender/editors/include/ED_armature.h
@@ -39,6 +39,7 @@ struct Base;
struct bContext;
struct Bone;
struct bPoseChannel;
+struct EvaluationContext;
struct IDProperty;
struct ListBase;
struct MeshDeformModifierData;
@@ -46,9 +47,11 @@ struct DerivedMesh;
struct Object;
struct ReportList;
struct Scene;
+struct ViewLayer;
struct ViewContext;
struct wmKeyConfig;
struct wmOperator;
+struct Main;
typedef struct EditBone {
struct EditBone *next, *prev;
@@ -85,6 +88,12 @@ typedef struct EditBone {
short segments;
+ /* Used for display */
+ float disp_mat[4][4]; /* in Armature space, rest pos matrix */
+ float disp_tail_mat[4][4]; /* in Armature space, rest pos matrix */
+ /* 32 == MAX_BBONE_SUBDIV */
+ float disp_bbone_mat[32][4][4]; /* in Armature space, rest pos matrix */
+
/* Used to store temporary data */
union {
struct EditBone *ebone;
@@ -134,7 +143,8 @@ void ED_armature_deselect_all(struct Object *obedit);
void ED_armature_deselect_all_visible(struct Object *obedit);
bool ED_do_pose_selectbuffer(
- struct Scene *scene, struct Base *base, const unsigned int *buffer, short hits,
+ const struct EvaluationContext *eval_ctx,
+ struct Scene *scene, struct ViewLayer *view_layer, struct Base *base, const unsigned int *buffer, short hits,
bool extend, bool deselect, bool toggle, bool do_nearest);
bool ED_armature_select_pick(struct bContext *C, const int mval[2], bool extend, bool deselect, bool toggle);
int join_armature_exec(struct bContext *C, struct wmOperator *op);
@@ -169,8 +179,9 @@ void ED_armature_transform(struct bArmature *arm, float mat[4][4], const bool do
#define ARM_GROUPS_ENVELOPE 2
#define ARM_GROUPS_AUTO 3
-void create_vgroups_from_armature(struct ReportList *reports, struct Scene *scene, struct Object *ob,
- struct Object *par, const int mode, const bool mirror);
+void create_vgroups_from_armature(
+ struct ReportList *reports, const struct EvaluationContext *eval_ctx, struct Scene *scene,
+ struct Object *ob, struct Object *par, const int mode, const bool mirror);
/* if bone is already in list, pass it as param to ignore it */
void unique_editbone_name(struct ListBase *ebones, char *name, EditBone *bone);
@@ -191,7 +202,7 @@ void ED_armature_exit_posemode(struct bContext *C, struct Base *base);
void ED_armature_enter_posemode(struct bContext *C, struct Base *base);
void ED_pose_de_selectall(struct Object *ob, int select_mode, const bool ignore_visibility);
void ED_pose_bone_select(struct Object *ob, struct bPoseChannel *pchan, bool select);
-void ED_pose_recalculate_paths(struct Scene *scene, struct Object *ob);
+void ED_pose_recalculate_paths(struct bContext *C, struct Scene *scene, struct Object *ob);
struct Object *ED_pose_object_from_context(struct bContext *C);
/* sketch */
diff --git a/source/blender/editors/include/ED_gpencil.h b/source/blender/editors/include/ED_gpencil.h
index 74d9ad0886d..3ea754b242c 100644
--- a/source/blender/editors/include/ED_gpencil.h
+++ b/source/blender/editors/include/ED_gpencil.h
@@ -35,6 +35,7 @@
struct ID;
struct ListBase;
struct bContext;
+struct Depsgraph;
struct ScrArea;
struct ARegion;
struct View3D;
@@ -48,6 +49,8 @@ struct bGPDpalettecolor;
struct bAnimContext;
struct KeyframeEditData;
struct PointerRNA;
+struct Scene;
+struct ViewLayer;
struct wmWindowManager;
struct wmKeyConfig;
@@ -113,7 +116,7 @@ struct bGPdata *ED_gpencil_data_get_active_direct(struct ID *screen_id, struct S
struct ScrArea *sa, struct Object *ob);
/* 3D View */
-struct bGPdata *ED_gpencil_data_get_active_v3d(struct Scene *scene, struct View3D *v3d);
+struct bGPdata *ED_gpencil_data_get_active_v3d(struct Scene *scene, struct ViewLayer *view_layer);
bool ED_gpencil_has_keyframe_v3d(struct Scene *scene, struct Object *ob, int cfra);
@@ -147,7 +150,13 @@ void ED_gpencil_strokes_copybuf_free(void);
void ED_gpencil_draw_2dimage(const struct bContext *C);
void ED_gpencil_draw_view2d(const struct bContext *C, bool onlyv2d);
-void ED_gpencil_draw_view3d(struct wmWindowManager *wm, struct Scene *scene, struct View3D *v3d, struct ARegion *ar, bool only3d);
+void ED_gpencil_draw_view3d(struct wmWindowManager *wm,
+ struct Scene *scene,
+ struct ViewLayer *view_layer,
+ const struct Depsgraph *depsgraph,
+ struct View3D *v3d,
+ struct ARegion *ar,
+ bool only3d);
void ED_gpencil_draw_ex(struct Scene *scene, struct bGPdata *gpd, int winx, int winy,
const int cfra, const char spacetype);
void ED_gp_draw_interpolation(struct tGPDinterpolate *tgpi, const int type);
diff --git a/source/blender/editors/include/ED_image.h b/source/blender/editors/include/ED_image.h
index 9de550a20ce..9802f8c3c03 100644
--- a/source/blender/editors/include/ED_image.h
+++ b/source/blender/editors/include/ED_image.h
@@ -39,6 +39,8 @@ struct ToolSettings;
struct wmWindowManager;
struct ARegion;
struct Scene;
+struct ViewLayer;
+struct WorkSpace;
/* image_edit.c, exported for transform */
struct Image *ED_space_image(struct SpaceImage *sima);
@@ -74,7 +76,10 @@ bool ED_space_image_show_uvedit(struct SpaceImage *sima, struct Object *obedit);
bool ED_space_image_paint_curve(const struct bContext *C);
-bool ED_space_image_check_show_maskedit(struct Scene *scene, struct SpaceImage *sima);
+bool ED_space_image_check_show_maskedit(
+ struct SpaceImage *sima,
+ const struct WorkSpace *workspace,
+ struct ViewLayer *view_layer);
int ED_space_image_maskedit_poll(struct bContext *C);
int ED_space_image_maskedit_mask_poll(struct bContext *C);
diff --git a/source/blender/editors/include/ED_info.h b/source/blender/editors/include/ED_info.h
index 6970abaa633..3d873906ecf 100644
--- a/source/blender/editors/include/ED_info.h
+++ b/source/blender/editors/include/ED_info.h
@@ -27,8 +27,11 @@
#ifndef __ED_INFO_H__
#define __ED_INFO_H__
+struct EvaluationContext;
+
/* info_stats.c */
-void ED_info_stats_clear(struct Scene *scene);
-const char *ED_info_stats_string(struct Scene *scene);
+void ED_info_stats_clear(struct ViewLayer *view_layer);
+const char *ED_info_stats_string(
+ struct Scene *scene, struct WorkSpace *workspace, struct ViewLayer *view_layer);
#endif /* __ED_INFO_H__ */
diff --git a/source/blender/editors/include/ED_keyframes_draw.h b/source/blender/editors/include/ED_keyframes_draw.h
index c478a8b17e5..62f1a617fcb 100644
--- a/source/blender/editors/include/ED_keyframes_draw.h
+++ b/source/blender/editors/include/ED_keyframes_draw.h
@@ -108,8 +108,10 @@ typedef enum eKeyframeShapeDrawOpts {
KEYFRAME_SHAPE_BOTH
} eKeyframeShapeDrawOpts;
-/* draw simple diamond-shape keyframe (with OpenGL) */
-void draw_keyframe_shape(float x, float y, float xscale, float hsize, short sel, short key_type, short mode, float alpha);
+/* draw simple diamond-shape keyframe */
+/* caller should set up vertex format, bind GPU_SHADER_KEYFRAME_DIAMOND, immBegin(GWN_PRIM_POINTS, n), then call this n times */
+void draw_keyframe_shape(float x, float y, float size, bool sel, short key_type, short mode, float alpha,
+ unsigned int pos_id, unsigned int size_id, unsigned int color_id, unsigned int outline_color_id);
/* ******************************* Methods ****************************** */
diff --git a/source/blender/editors/include/ED_manipulator_library.h b/source/blender/editors/include/ED_manipulator_library.h
new file mode 100644
index 00000000000..7166292147e
--- /dev/null
+++ b/source/blender/editors/include/ED_manipulator_library.h
@@ -0,0 +1,203 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file ED_manipulator_library.h
+ * \ingroup wm
+ *
+ * \name Generic Manipulators.
+ *
+ * This is exposes pre-defined manipulators for re-use.
+ */
+
+
+#ifndef __ED_MANIPULATOR_LIBRARY_H__
+#define __ED_MANIPULATOR_LIBRARY_H__
+
+/* initialize manipulators */
+void ED_manipulatortypes_arrow_2d(void);
+void ED_manipulatortypes_arrow_3d(void);
+void ED_manipulatortypes_button_2d(void);
+void ED_manipulatortypes_cage_2d(void);
+void ED_manipulatortypes_cage_3d(void);
+void ED_manipulatortypes_dial_3d(void);
+void ED_manipulatortypes_grab_3d(void);
+void ED_manipulatortypes_facemap_3d(void);
+void ED_manipulatortypes_primitive_3d(void);
+
+struct wmManipulator;
+struct wmManipulatorGroup;
+
+
+/* -------------------------------------------------------------------- */
+/* Shape Presets
+ *
+ * Intended to be called by custom draw functions.
+ */
+
+/* manipulator_library_presets.c */
+void ED_manipulator_draw_preset_box(
+ const struct wmManipulator *mpr, float mat[4][4], int select_id);
+void ED_manipulator_draw_preset_arrow(
+ const struct wmManipulator *mpr, float mat[4][4], int axis, int select_id);
+void ED_manipulator_draw_preset_circle(
+ const struct wmManipulator *mpr, float mat[4][4], int axis, int select_id);
+void ED_manipulator_draw_preset_facemap(
+ const struct bContext *C, const struct wmManipulator *mpr, struct Scene *scene,
+ struct Object *ob, const int facemap, int select_id);
+
+
+/* -------------------------------------------------------------------- */
+/* 3D Arrow Manipulator */
+
+enum {
+ ED_MANIPULATOR_ARROW_STYLE_NORMAL = 0,
+ ED_MANIPULATOR_ARROW_STYLE_CROSS = 1,
+ ED_MANIPULATOR_ARROW_STYLE_BOX = 2,
+ ED_MANIPULATOR_ARROW_STYLE_CONE = 3,
+};
+
+enum {
+ /* inverted offset during interaction - if set it also sets constrained below */
+ ED_MANIPULATOR_ARROW_STYLE_INVERTED = (1 << 3),
+ /* clamp arrow interaction to property width */
+ ED_MANIPULATOR_ARROW_STYLE_CONSTRAINED = (1 << 4),
+};
+
+void ED_manipulator_arrow3d_set_ui_range(struct wmManipulator *mpr, const float min, const float max);
+void ED_manipulator_arrow3d_set_range_fac(struct wmManipulator *mpr, const float range_fac);
+
+/* -------------------------------------------------------------------- */
+/* 2D Arrow Manipulator */
+
+/* none */
+
+/* -------------------------------------------------------------------- */
+/* Cage Manipulator */
+
+enum {
+ ED_MANIPULATOR_CAGE2D_XFORM_FLAG_TRANSLATE = (1 << 0), /* Translates */
+ ED_MANIPULATOR_CAGE2D_XFORM_FLAG_ROTATE = (1 << 1), /* Rotates */
+ ED_MANIPULATOR_CAGE2D_XFORM_FLAG_SCALE = (1 << 2), /* Scales */
+ ED_MANIPULATOR_CAGE2D_XFORM_FLAG_SCALE_UNIFORM = (1 << 3), /* Scales uniformly */
+ ED_MANIPULATOR_CAGE2D_XFORM_FLAG_SCALE_SIGNED = (1 << 4), /* Negative scale allowed */
+};
+
+/* draw_style */
+enum {
+ ED_MANIPULATOR_CAGE2D_STYLE_BOX = 0,
+ ED_MANIPULATOR_CAGE2D_STYLE_CIRCLE = 1,
+};
+
+/* draw_options */
+enum {
+ /** Draw a central handle (instead of having the entire area selectable)
+ * Needed for large rectangles that we don't want to swallow all events. */
+ ED_MANIPULATOR_CAGE2D_DRAW_FLAG_XFORM_CENTER_HANDLE = (1 << 0),
+};
+
+/** #wmManipulator.highlight_part */
+enum {
+ ED_MANIPULATOR_CAGE2D_PART_TRANSLATE = 0,
+ ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_X = 1,
+ ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_X = 2,
+ ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_Y = 3,
+ ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_Y = 4,
+ /* Corners */
+ ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_X_MIN_Y = 5,
+ ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_X_MAX_Y = 6,
+ ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_X_MIN_Y = 7,
+ ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_X_MAX_Y = 8,
+
+ ED_MANIPULATOR_CAGE2D_PART_ROTATE = 9,
+};
+
+/** #wmManipulator.highlight_part */
+enum {
+ /* ordered min/mid/max so we can loop over values (MIN/MID/MAX) on each axis. */
+ ED_MANIPULATOR_CAGE3D_PART_SCALE_MIN_X_MIN_Y_MIN_Z = 0,
+ ED_MANIPULATOR_CAGE3D_PART_SCALE_MIN_X_MIN_Y_MID_Z,
+ ED_MANIPULATOR_CAGE3D_PART_SCALE_MIN_X_MIN_Y_MAX_Z,
+ ED_MANIPULATOR_CAGE3D_PART_SCALE_MIN_X_MID_Y_MIN_Z,
+ ED_MANIPULATOR_CAGE3D_PART_SCALE_MIN_X_MID_Y_MID_Z,
+ ED_MANIPULATOR_CAGE3D_PART_SCALE_MIN_X_MID_Y_MAX_Z,
+ ED_MANIPULATOR_CAGE3D_PART_SCALE_MIN_X_MAX_Y_MIN_Z,
+ ED_MANIPULATOR_CAGE3D_PART_SCALE_MIN_X_MAX_Y_MID_Z,
+ ED_MANIPULATOR_CAGE3D_PART_SCALE_MIN_X_MAX_Y_MAX_Z,
+ ED_MANIPULATOR_CAGE3D_PART_SCALE_MID_X_MIN_Y_MIN_Z,
+ ED_MANIPULATOR_CAGE3D_PART_SCALE_MID_X_MIN_Y_MID_Z,
+ ED_MANIPULATOR_CAGE3D_PART_SCALE_MID_X_MIN_Y_MAX_Z,
+ ED_MANIPULATOR_CAGE3D_PART_SCALE_MID_X_MID_Y_MIN_Z,
+ ED_MANIPULATOR_CAGE3D_PART_SCALE_MID_X_MID_Y_MID_Z,
+ ED_MANIPULATOR_CAGE3D_PART_SCALE_MID_X_MID_Y_MAX_Z,
+ ED_MANIPULATOR_CAGE3D_PART_SCALE_MID_X_MAX_Y_MIN_Z,
+ ED_MANIPULATOR_CAGE3D_PART_SCALE_MID_X_MAX_Y_MID_Z,
+ ED_MANIPULATOR_CAGE3D_PART_SCALE_MID_X_MAX_Y_MAX_Z,
+ ED_MANIPULATOR_CAGE3D_PART_SCALE_MAX_X_MIN_Y_MIN_Z,
+ ED_MANIPULATOR_CAGE3D_PART_SCALE_MAX_X_MIN_Y_MID_Z,
+ ED_MANIPULATOR_CAGE3D_PART_SCALE_MAX_X_MIN_Y_MAX_Z,
+ ED_MANIPULATOR_CAGE3D_PART_SCALE_MAX_X_MID_Y_MIN_Z,
+ ED_MANIPULATOR_CAGE3D_PART_SCALE_MAX_X_MID_Y_MID_Z,
+ ED_MANIPULATOR_CAGE3D_PART_SCALE_MAX_X_MID_Y_MAX_Z,
+ ED_MANIPULATOR_CAGE3D_PART_SCALE_MAX_X_MAX_Y_MIN_Z,
+ ED_MANIPULATOR_CAGE3D_PART_SCALE_MAX_X_MAX_Y_MID_Z,
+ ED_MANIPULATOR_CAGE3D_PART_SCALE_MAX_X_MAX_Y_MAX_Z,
+
+ ED_MANIPULATOR_CAGE3D_PART_TRANSLATE,
+
+ ED_MANIPULATOR_CAGE3D_PART_ROTATE,
+};
+
+/* -------------------------------------------------------------------- */
+/* Dial Manipulator */
+
+/* draw_options */
+enum {
+ ED_MANIPULATOR_DIAL_DRAW_FLAG_NOP = 0,
+ ED_MANIPULATOR_DIAL_DRAW_FLAG_CLIP = (1 << 0),
+ ED_MANIPULATOR_DIAL_DRAW_FLAG_FILL = (1 << 1),
+ ED_MANIPULATOR_DIAL_DRAW_FLAG_ANGLE_MIRROR = (1 << 2),
+ ED_MANIPULATOR_DIAL_DRAW_FLAG_ANGLE_START_Y = (1 << 3),
+};
+
+/* -------------------------------------------------------------------- */
+/* Grab Manipulator */
+
+/* draw_options */
+enum {
+ ED_MANIPULATOR_GRAB_DRAW_FLAG_NOP = 0,
+ /* only for solid shapes */
+ ED_MANIPULATOR_GRAB_DRAW_FLAG_FILL = (1 << 0),
+ ED_MANIPULATOR_GRAB_DRAW_FLAG_ALIGN_VIEW = (1 << 1),
+};
+
+enum {
+ ED_MANIPULATOR_GRAB_STYLE_RING_2D = 0,
+ ED_MANIPULATOR_GRAB_STYLE_CROSS_2D = 1,
+};
+
+
+/* -------------------------------------------------------------------- */
+/* Primitive Manipulator */
+
+enum {
+ ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE = 0,
+};
+
+#endif /* __ED_MANIPULATOR_LIBRARY_H__ */
diff --git a/source/blender/editors/include/ED_mesh.h b/source/blender/editors/include/ED_mesh.h
index 84698b33e25..0293f7cd204 100644
--- a/source/blender/editors/include/ED_mesh.h
+++ b/source/blender/editors/include/ED_mesh.h
@@ -36,9 +36,11 @@ extern "C" {
#endif
struct ID;
+struct EvaluationContext;
struct View3D;
struct ARegion;
struct bContext;
+struct Depsgraph;
struct wmOperator;
struct wmKeyConfig;
struct ReportList;
@@ -112,8 +114,8 @@ struct UvElementMap *BM_uv_element_map_create(
void BM_uv_element_map_free(struct UvElementMap *vmap);
struct UvElement *BM_uv_element_get(struct UvElementMap *map, struct BMFace *efa, struct BMLoop *l);
-bool EDBM_mtexpoly_check(struct BMEditMesh *em);
-struct MTexPoly *EDBM_mtexpoly_active_get(struct BMEditMesh *em, struct BMFace **r_act_efa, const bool sloppy, const bool selected);
+bool EDBM_uv_check(struct BMEditMesh *em);
+struct BMFace *EDBM_uv_active_face_get(struct BMEditMesh *em, const bool sloppy, const bool selected);
void BM_uv_vert_map_free(struct UvVertMap *vmap);
struct UvMapVert *BM_uv_vert_map_at_index(struct UvVertMap *vmap, unsigned int v);
@@ -125,6 +127,7 @@ void EDBM_flag_enable_all(struct BMEditMesh *em, const char hflag);
void EDBM_flag_disable_all(struct BMEditMesh *em, const char hflag);
bool BMBVH_EdgeVisible(struct BMBVHTree *tree, struct BMEdge *e,
+ const struct Depsgraph *depsgraph,
struct ARegion *ar, struct View3D *v3d, struct Object *obedit);
/* editmesh_select.c */
@@ -133,35 +136,36 @@ void EDBM_select_mirrored(
int *r_totmirr, int *r_totfail);
void EDBM_automerge(struct Scene *scene, struct Object *ob, bool update, const char hflag);
-bool EDBM_backbuf_border_init(struct ViewContext *vc, short xmin, short ymin, short xmax, short ymax);
+bool EDBM_backbuf_border_init(const struct EvaluationContext *eval_ctx, struct ViewContext *vc, short xmin, short ymin, short xmax, short ymax);
bool EDBM_backbuf_check(unsigned int index);
void EDBM_backbuf_free(void);
-bool EDBM_backbuf_border_mask_init(struct ViewContext *vc, const int mcords[][2], short tot,
- short xmin, short ymin, short xmax, short ymax);
-bool EDBM_backbuf_circle_init(struct ViewContext *vc, short xs, short ys, short rads);
+bool EDBM_backbuf_border_mask_init(
+ const struct EvaluationContext *eval_ctx, struct ViewContext *vc, const int mcords[][2], short tot,
+ short xmin, short ymin, short xmax, short ymax);
+bool EDBM_backbuf_circle_init(const struct EvaluationContext *eval_ctx, struct ViewContext *vc, short xs, short ys, short rads);
struct BMVert *EDBM_vert_find_nearest_ex(
- struct ViewContext *vc, float *r_dist,
+ const struct EvaluationContext *eval_ctx, struct ViewContext *vc, float *r_dist,
const bool use_select_bias, bool use_cycle);
struct BMVert *EDBM_vert_find_nearest(
- struct ViewContext *vc, float *r_dist);
+ const struct EvaluationContext *eval_ctx, struct ViewContext *vc, float *r_dist);
struct BMEdge *EDBM_edge_find_nearest_ex(
- struct ViewContext *vc, float *r_dist,
+ const struct EvaluationContext *eval_ctx, struct ViewContext *vc, float *r_dist,
float *r_dist_center,
const bool use_select_bias, const bool use_cycle,
struct BMEdge **r_eed_zbuf);
struct BMEdge *EDBM_edge_find_nearest(
- struct ViewContext *vc, float *r_dist);
+ const struct EvaluationContext *eval_ctx, struct ViewContext *vc, float *r_dist);
struct BMFace *EDBM_face_find_nearest_ex(
- struct ViewContext *vc, float *r_dist,
+ const struct EvaluationContext *eval_ctx, struct ViewContext *vc, float *r_dist,
float *r_dist_center,
const bool use_select_bias, const bool use_cycle,
struct BMFace **r_efa_zbuf);
struct BMFace *EDBM_face_find_nearest(
- struct ViewContext *vc, float *r_dist);
+ const struct EvaluationContext *eval_ctx, struct ViewContext *vc, float *r_dist);
bool EDBM_select_pick(struct bContext *C, const int mval[2], bool extend, bool deselect, bool toggle);
@@ -198,7 +202,7 @@ void EMBM_project_snap_verts(struct bContext *C, struct ARegion *ar, struct BMEd
/* editface.c */
void paintface_flush_flags(struct Object *ob, short flag);
bool paintface_mouse_select(struct bContext *C, struct Object *ob, const int mval[2], bool extend, bool deselect, bool toggle);
-int do_paintface_box_select(struct ViewContext *vc, struct rcti *rect, bool select, bool extend);
+int do_paintface_box_select(const struct EvaluationContext *eval_ctx, struct ViewContext *vc, struct rcti *rect, bool select, bool extend);
void paintface_deselect_all_visible(struct Object *ob, int action, bool flush_flags);
void paintface_select_linked(struct bContext *C, struct Object *ob, const int mval[2], const bool select);
bool paintface_minmax(struct Object *ob, float r_min[3], float r_max[3]);
@@ -215,12 +219,14 @@ typedef struct MirrTopoStore_t {
intptr_t *index_lookup;
int prev_vert_tot;
int prev_edge_tot;
- int prev_ob_mode;
+ bool prev_is_editmode;
} MirrTopoStore_t;
-bool ED_mesh_mirrtopo_recalc_check(struct Mesh *me, struct DerivedMesh *dm, const int ob_mode, MirrTopoStore_t *mesh_topo_store);
-void ED_mesh_mirrtopo_init(struct Mesh *me, struct DerivedMesh *dm, const int ob_mode, MirrTopoStore_t *mesh_topo_store,
- const bool skip_em_vert_array_init);
+bool ED_mesh_mirrtopo_recalc_check(
+ struct Mesh *me, struct DerivedMesh *dm, MirrTopoStore_t *mesh_topo_store);
+void ED_mesh_mirrtopo_init(
+ struct Mesh *me, struct DerivedMesh *dm, MirrTopoStore_t *mesh_topo_store,
+ const bool skip_em_vert_array_init);
void ED_mesh_mirrtopo_free(MirrTopoStore_t *mesh_topo_store);
@@ -258,7 +264,6 @@ void ED_vgroup_vert_remove(struct Object *ob, struct bDeformGrou
float ED_vgroup_vert_weight(struct Object *ob, struct bDeformGroup *dg, int vertnum);
void ED_vgroup_vert_active_mirror(struct Object *ob, int def_nr);
-
/* mesh_data.c */
// void ED_mesh_geometry_add(struct Mesh *mesh, struct ReportList *reports, int verts, int edges, int faces);
void ED_mesh_polys_add(struct Mesh *mesh, struct ReportList *reports, int count);
diff --git a/source/blender/editors/include/ED_node.h b/source/blender/editors/include/ED_node.h
index e3c382382a9..20363c69fa0 100644
--- a/source/blender/editors/include/ED_node.h
+++ b/source/blender/editors/include/ED_node.h
@@ -75,7 +75,7 @@ void ED_init_custom_node_socket_type(struct bNodeSocketType *stype);
void ED_init_standard_node_socket_type(struct bNodeSocketType *stype);
void ED_init_node_socket_type_virtual(struct bNodeSocketType *stype);
void ED_node_sample_set(const float col[4]);
-void ED_node_draw_snap(struct View2D *v2d, const float cent[2], float size, NodeBorder border);
+void ED_node_draw_snap(struct View2D *v2d, const float cent[2], float size, NodeBorder border, unsigned pos);
/* node_draw.c */
void ED_node_tree_update(const struct bContext *C);
diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h
index d74fb22faf8..94ee228f4f8 100644
--- a/source/blender/editors/include/ED_object.h
+++ b/source/blender/editors/include/ED_object.h
@@ -35,6 +35,7 @@
extern "C" {
#endif
+struct bFaceMap;
struct Base;
struct EnumPropertyItem;
struct ID;
@@ -43,6 +44,7 @@ struct ModifierData;
struct Object;
struct ReportList;
struct Scene;
+struct ViewLayer;
struct bConstraint;
struct bContext;
struct bPoseChannel;
@@ -53,6 +55,8 @@ struct wmOperatorType;
struct PointerRNA;
struct PropertyRNA;
struct EnumPropertyItem;
+struct EvaluationContext;
+struct WorkSpace;
#include "DNA_object_enums.h"
@@ -82,16 +86,21 @@ typedef enum eParentType {
PAR_VERTEX_TRI,
} eParentType;
+typedef enum eObjectSelect_Mode {
+ BA_DESELECT = 0,
+ BA_SELECT = 1,
+ BA_INVERT = 2,
+} eObjectSelect_Mode;
+
#ifdef __RNA_TYPES_H__
extern struct EnumPropertyItem prop_clear_parent_types[];
extern struct EnumPropertyItem prop_make_parent_types[];
#endif
-bool ED_object_parent_set(struct ReportList *reports, struct Main *bmain, struct Scene *scene, struct Object *ob,
+bool ED_object_parent_set(struct ReportList *reports, const struct bContext *C, struct Scene *scene, struct Object *ob,
struct Object *par, int partype, const bool xmirror, const bool keep_transform,
const int vert_par[3]);
void ED_object_parent_clear(struct Object *ob, const int type);
-struct Base *ED_object_scene_link(struct Scene *scene, struct Object *ob);
void ED_keymap_proportional_cycle(struct wmKeyConfig *keyconf, struct wmKeyMap *keymap);
void ED_keymap_proportional_obmode(struct wmKeyConfig *keyconf, struct wmKeyMap *keymap);
@@ -99,19 +108,16 @@ void ED_keymap_proportional_maskmode(struct wmKeyConfig *keyconf, struct wmKeyMa
void ED_keymap_proportional_editmode(struct wmKeyConfig *keyconf, struct wmKeyMap *keymap,
const bool do_connected);
-/* send your own notifier for select! */
-void ED_base_object_select(struct Base *base, short mode);
-/* includes notifier */
-void ED_base_object_activate(struct bContext *C, struct Base *base);
-
-void ED_base_object_free_and_unlink(struct Main *bmain, struct Scene *scene, struct Base *base);
+void ED_object_base_select(struct Base *base, eObjectSelect_Mode mode);
+void ED_object_base_activate(struct bContext *C, struct Base *base);
+void ED_object_base_free_and_unlink(struct Main *bmain, struct Scene *scene, struct Object *ob);
/* single object duplicate, if (dupflag == 0), fully linked, else it uses the flags given */
-struct Base *ED_object_add_duplicate(struct Main *bmain, struct Scene *scene, struct Base *base, int dupflag);
+struct Base *ED_object_add_duplicate(struct Main *bmain, struct Scene *scene, struct ViewLayer *view_layer, struct Base *base, int dupflag);
void ED_object_parent(struct Object *ob, struct Object *parent, const int type, const char *substr);
-bool ED_object_mode_compat_set(struct bContext *C, struct Object *ob, eObjectMode mode, struct ReportList *reports);
+bool ED_object_mode_compat_set(struct bContext *C, struct WorkSpace *workspace, eObjectMode mode, struct ReportList *reports);
void ED_object_toggle_modes(struct bContext *C, eObjectMode mode);
/* bitflags for enter/exit editmode */
@@ -158,9 +164,9 @@ void ED_objects_clear_paths(struct bContext *C, bool only_selected);
void ED_objects_recalculate_paths(struct bContext *C, struct Scene *scene);
/* constraints */
-struct ListBase *get_active_constraints(struct Object *ob);
+struct ListBase *get_active_constraints(const struct EvaluationContext *eval_ctx, struct Object *ob);
struct ListBase *get_constraint_lb(struct Object *ob, struct bConstraint *con, struct bPoseChannel **r_pchan);
-struct bConstraint *get_active_constraint(struct Object *ob);
+struct bConstraint *get_active_constraint(const struct EvaluationContext *eval_ctx, struct Object *ob);
void object_test_constraints(struct Object *ob);
@@ -185,24 +191,30 @@ enum {
MODIFIER_APPLY_SHAPE
};
-struct ModifierData *ED_object_modifier_add(struct ReportList *reports, struct Main *bmain, struct Scene *scene,
- struct Object *ob, const char *name, int type);
+struct ModifierData *ED_object_modifier_add(
+ struct ReportList *reports, struct Main *bmain, struct Scene *scene,
+ struct Object *ob, eObjectMode object_mode, const char *name, int type);
bool ED_object_modifier_remove(struct ReportList *reports, struct Main *bmain,
struct Object *ob, struct ModifierData *md);
void ED_object_modifier_clear(struct Main *bmain, struct Object *ob);
int ED_object_modifier_move_down(struct ReportList *reports, struct Object *ob, struct ModifierData *md);
int ED_object_modifier_move_up(struct ReportList *reports, struct Object *ob, struct ModifierData *md);
-int ED_object_modifier_convert(struct ReportList *reports, struct Main *bmain, struct Scene *scene,
- struct Object *ob, struct ModifierData *md);
-int ED_object_modifier_apply(struct ReportList *reports, struct Scene *scene,
+int ED_object_modifier_convert(
+ struct ReportList *reports, struct Main *bmain, struct Scene *scene,
+ struct ViewLayer *view_layer, struct Object *ob, eObjectMode object_mode, struct ModifierData *md);
+int ED_object_modifier_apply(struct ReportList *reports, const struct bContext *C, struct Scene *scene,
struct Object *ob, struct ModifierData *md, int mode);
int ED_object_modifier_copy(struct ReportList *reports, struct Object *ob, struct ModifierData *md);
-bool ED_object_iter_other(struct Main *bmain, struct Object *orig_ob, const bool include_orig,
- bool (*callback)(struct Object *ob, void *callback_data),
- void *callback_data);
+bool ED_object_iter_other(
+ const struct EvaluationContext *eval_ctx, struct Main *bmain,
+ struct Object *orig_ob, const bool include_orig,
+ bool (*callback)(const struct EvaluationContext *eval_ctx, struct Object *ob, void *callback_data),
+ void *callback_data);
-bool ED_object_multires_update_totlevels_cb(struct Object *ob, void *totlevel_v);
+bool ED_object_multires_update_totlevels_cb(
+ const struct EvaluationContext *eval_ctx,
+ struct Object *ob, void *totlevel_v);
/* object_select.c */
void ED_object_select_linked_by_id(struct bContext *C, struct ID *id);
@@ -214,7 +226,13 @@ const struct EnumPropertyItem *ED_object_vgroup_selection_itemf_helper(
bool *r_free,
const unsigned int selection_mask);
-void ED_object_check_force_modifiers(struct Main *bmain, struct Scene *scene, struct Object *object);
+void ED_object_check_force_modifiers(
+ struct Main *bmain, struct Scene *scene,
+ struct Object *object, eObjectMode object_mode);
+
+/* object_facemap_ops.c */
+void ED_object_facemap_face_add(struct Object *ob, struct bFaceMap *fmap, int facenum);
+void ED_object_facemap_face_remove(struct Object *ob, struct bFaceMap *fmap, int facenum);
#ifdef __cplusplus
}
diff --git a/source/blender/editors/include/ED_particle.h b/source/blender/editors/include/ED_particle.h
index 6cb8c0cfb19..ffa6db18caa 100644
--- a/source/blender/editors/include/ED_particle.h
+++ b/source/blender/editors/include/ED_particle.h
@@ -38,21 +38,24 @@ struct ParticleEditSettings;
struct rcti;
struct PTCacheEdit;
struct Scene;
+struct ViewLayer;
/* particle edit mode */
void PE_free_ptcache_edit(struct PTCacheEdit *edit);
int PE_start_edit(struct PTCacheEdit *edit);
/* access */
-struct PTCacheEdit *PE_get_current(struct Scene *scene, struct Object *ob);
-struct PTCacheEdit *PE_create_current(struct Scene *scene, struct Object *ob);
-void PE_current_changed(struct Scene *scene, struct Object *ob);
-int PE_minmax(struct Scene *scene, float min[3], float max[3]);
+struct PTCacheEdit *PE_get_current(struct Scene *scene, struct ViewLayer *view_layer, struct Object *ob);
+struct PTCacheEdit *PE_create_current(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob);
+void PE_current_changed(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob);
+int PE_minmax(struct Scene *scene, struct ViewLayer *view_layer, float min[3], float max[3]);
struct ParticleEditSettings *PE_settings(struct Scene *scene);
/* update calls */
void PE_hide_keys_time(struct Scene *scene, struct PTCacheEdit *edit, float cfra);
-void PE_update_object(struct Scene *scene, struct Object *ob, int useflag);
+void PE_update_object(
+ const struct EvaluationContext *eval_ctx, struct Scene *scene,
+ struct ViewLayer *view_layer, struct Object *ob, int useflag);
/* selection tools */
int PE_mouse_particles(struct bContext *C, const int mval[2], bool extend, bool deselect, bool toggle);
@@ -62,13 +65,13 @@ int PE_lasso_select(struct bContext *C, const int mcords[][2], const short moves
void PE_deselect_all_visible(struct PTCacheEdit *edit);
/* undo */
-void PE_undo_push(struct Scene *scene, const char *str);
-void PE_undo_step(struct Scene *scene, int step);
-void PE_undo(struct Scene *scene);
-void PE_redo(struct Scene *scene);
-bool PE_undo_is_valid(struct Scene *scene);
-void PE_undo_number(struct Scene *scene, int nr);
-const char *PE_undo_get_name(struct Scene *scene, int nr, bool *r_active);
+void PE_undo_push(struct Scene *scene, struct ViewLayer *view_layer, const char *str);
+void PE_undo_step(struct Scene *scene, struct ViewLayer *view_layer, int step);
+void PE_undo(struct Scene *scene, struct ViewLayer *view_layer);
+void PE_redo(struct Scene *scene, struct ViewLayer *view_layer);
+bool PE_undo_is_valid(struct Scene *scene, struct ViewLayer *view_layer);
+void PE_undo_number(struct Scene *scene, struct ViewLayer *view_layer, int nr);
+const char *PE_undo_get_name(struct Scene *scene, struct ViewLayer *view_layer, int nr, bool *r_active);
#endif /* __ED_PARTICLE_H__ */
diff --git a/source/blender/editors/include/ED_render.h b/source/blender/editors/include/ED_render.h
index 707d7c6c693..b7317d75cd4 100644
--- a/source/blender/editors/include/ED_render.h
+++ b/source/blender/editors/include/ED_render.h
@@ -31,6 +31,7 @@
#include "DNA_vec_types.h"
struct bContext;
+struct DEGEditorUpdateContext;
struct ID;
struct Main;
struct MTex;
@@ -43,13 +44,15 @@ struct wmWindowManager;
void ED_operatortypes_render(void);
-/* render_shading.c */
+/* render_update.c */
-void ED_render_id_flush_update(struct Main *bmain, struct ID *id);
void ED_render_engine_changed(struct Main *bmain);
void ED_render_engine_area_exit(struct Main *bmain, struct ScrArea *sa);
-void ED_render_scene_update(struct Main *bmain, struct Scene *scene, int updated);
-void ED_render_scene_update_pre(struct Main *bmain, struct Scene *scene, bool time);
+
+/* Callbacks handling data update events coming from depsgraph. */
+
+void ED_render_id_flush_update(const struct DEGEditorUpdateContext *update_ctx, struct ID *id);
+void ED_render_scene_update(const struct DEGEditorUpdateContext *update_ctx, int updated);
void ED_viewport_render_kill_jobs(struct wmWindowManager *wm, struct Main *bmain, bool free_database);
struct Scene *ED_render_job_get_scene(const struct bContext *C);
diff --git a/source/blender/editors/include/ED_scene.h b/source/blender/editors/include/ED_scene.h
new file mode 100644
index 00000000000..647a8dda1b9
--- /dev/null
+++ b/source/blender/editors/include/ED_scene.h
@@ -0,0 +1,43 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file ED_scene.h
+ * \ingroup editors
+ */
+
+#ifndef __ED_SCENE_H__
+#define __ED_SCENE_H__
+
+#include "BLI_compiler_attrs.h"
+
+enum eSceneCopyMethod;
+
+struct Scene *ED_scene_add(struct Main *bmain, struct bContext *C, struct wmWindow *win, enum eSceneCopyMethod method) ATTR_NONNULL();
+bool ED_scene_delete(struct bContext *C, struct Main *bmain, struct wmWindow *win, struct Scene *scene) ATTR_NONNULL();
+void ED_scene_exit(struct bContext *C) ATTR_NONNULL();
+void ED_scene_changed_update(struct Main *bmain, struct bContext *C, struct Scene *scene_new,
+ const struct bScreen *active_screen) ATTR_NONNULL();
+bool ED_scene_view_layer_delete(
+ struct Main *bmain, struct Scene *scene, struct ViewLayer *layer,
+ struct ReportList *reports) ATTR_NONNULL(1, 2, 3);
+
+void ED_operatortypes_scene(void);
+
+#endif /* __ED_SCENE_H__ */
diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h
index af4abc60a23..18480d01ed7 100644
--- a/source/blender/editors/include/ED_screen.h
+++ b/source/blender/editors/include/ED_screen.h
@@ -35,22 +35,34 @@
#include "DNA_space_types.h"
#include "DNA_view2d_types.h"
#include "DNA_view3d_types.h"
+#include "DNA_workspace_types.h"
+#include "BLI_compiler_attrs.h"
+
+struct Depsgraph;
struct wmWindowManager;
struct wmWindow;
struct wmNotifier;
struct wmEvent;
struct wmKeyConfig;
+struct WorkSpace;
+struct WorkSpaceInstanceHook;
struct bContext;
struct Scene;
+struct ViewLayer;
struct bScreen;
struct ARegion;
struct uiBlock;
struct rcti;
struct Main;
+struct wmMsgBus;
+struct wmMsgSubscribeKey;
+struct wmMsgSubscribeValue;
/* regions */
-void ED_region_do_listen(struct bScreen *sc, struct ScrArea *sa, struct ARegion *ar, struct wmNotifier *note);
+void ED_region_do_listen(
+ struct bScreen *sc, struct ScrArea *sa, struct ARegion *ar,
+ struct wmNotifier *note, const Scene *scene);
void ED_region_do_draw(struct bContext *C, struct ARegion *ar);
void ED_region_exit(struct bContext *C, struct ARegion *ar);
void ED_region_pixelspace(struct ARegion *ar);
@@ -71,11 +83,24 @@ void ED_region_header(const struct bContext *C, struct ARegion *ar);
void ED_region_cursor_set(struct wmWindow *win, struct ScrArea *sa, struct ARegion *ar);
void ED_region_toggle_hidden(struct bContext *C, struct ARegion *ar);
void ED_region_info_draw(struct ARegion *ar, const char *text, float fill_color[4], const bool full_redraw);
+void ED_region_info_draw_multiline(ARegion *ar, const char *text_array[], float fill_color[4], const bool full_redraw);
void ED_region_image_metadata_draw(int x, int y, struct ImBuf *ibuf, const rctf *frame, float zoomx, float zoomy);
void ED_region_grid_draw(struct ARegion *ar, float zoomx, float zoomy);
float ED_region_blend_factor(struct ARegion *ar);
void ED_region_visible_rect(struct ARegion *ar, struct rcti *rect);
+/* message_bus callbacks */
+void ED_region_do_msg_notify_tag_redraw(
+ struct bContext *C, struct wmMsgSubscribeKey *msg_key, struct wmMsgSubscribeValue *msg_val);
+void ED_area_do_msg_notify_tag_refresh(
+ struct bContext *C, struct wmMsgSubscribeKey *msg_key, struct wmMsgSubscribeValue *msg_val);
+
+/* message bus */
+void ED_region_message_subscribe(
+ struct bContext *C,
+ struct WorkSpace *workspace, struct Scene *scene,
+ struct bScreen *screen, struct ScrArea *sa, struct ARegion *ar,
+ struct wmMsgBus *mbus);
/* spaces */
void ED_spacetypes_keymap(struct wmKeyConfig *keyconf);
@@ -85,7 +110,8 @@ int ED_area_header_switchbutton(const struct bContext *C, struct uiBlock *bl
void ED_area_initialize(struct wmWindowManager *wm, struct wmWindow *win, struct ScrArea *sa);
void ED_area_exit(struct bContext *C, struct ScrArea *sa);
int ED_screen_area_active(const struct bContext *C);
-void ED_area_do_listen(struct bScreen *sc, ScrArea *sa, struct wmNotifier *note);
+void ED_area_do_listen(struct bScreen *sc, ScrArea *sa, struct wmNotifier *note, Scene *scene,
+ struct WorkSpace *workspace);
void ED_area_tag_redraw(ScrArea *sa);
void ED_area_tag_redraw_regiontype(ScrArea *sa, int type);
void ED_area_tag_refresh(ScrArea *sa);
@@ -104,12 +130,11 @@ void ED_screen_draw_join_shape(struct ScrArea *sa1, struct ScrArea *sa2);
void ED_screen_draw_split_preview(struct ScrArea *sa, const int dir, const float fac);
void ED_screen_refresh(struct wmWindowManager *wm, struct wmWindow *win);
void ED_screen_do_listen(struct bContext *C, struct wmNotifier *note);
-bScreen *ED_screen_duplicate(struct wmWindow *win, struct bScreen *sc);
-bScreen *ED_screen_add(struct wmWindow *win, struct Scene *scene, const char *name);
-bool ED_screen_set(struct bContext *C, struct bScreen *sc);
-bool ED_screen_delete(struct bContext *C, struct bScreen *sc);
-void ED_screen_set_scene(struct bContext *C, struct bScreen *screen, struct Scene *scene);
-bool ED_screen_delete_scene(struct bContext *C, struct Scene *scene);
+bool ED_screen_change(struct bContext *C, struct bScreen *sc);
+void ED_screen_update_after_scene_change(
+ const struct bScreen *screen,
+ struct Scene *scene_new,
+ struct ViewLayer *view_layer);
void ED_screen_set_subwinactive(struct bContext *C, const struct wmEvent *event);
void ED_screen_exit(struct bContext *C, struct wmWindow *window, struct bScreen *screen);
void ED_screen_animation_timer(struct bContext *C, int redraws, int refresh, int sync, int enable);
@@ -120,10 +145,50 @@ void ED_screen_full_prevspace(struct bContext *C, ScrArea *sa);
void ED_screen_full_restore(struct bContext *C, ScrArea *sa);
struct ScrArea *ED_screen_state_toggle(struct bContext *C, struct wmWindow *win, struct ScrArea *sa, const short state);
void ED_screens_header_tools_menu_create(struct bContext *C, struct uiLayout *layout, void *arg);
-bool ED_screen_stereo3d_required(struct bScreen *screen);
+bool ED_screen_stereo3d_required(const struct bScreen *screen, const struct Scene *scene);
+Scene *ED_screen_scene_find(const struct bScreen *screen, const struct wmWindowManager *wm);
+Scene *ED_screen_scene_find_with_window(const struct bScreen *screen, const struct wmWindowManager *wm, struct wmWindow **r_window);
+void ED_screen_preview_render(const struct bScreen *screen, int size_x, int size_y, unsigned int *r_rect) ATTR_NONNULL();
+
+/* workspaces */
+struct WorkSpace *ED_workspace_add(
+ struct Main *bmain,
+ const char *name,
+ Scene *scene,
+ ViewLayer *act_render_layer,
+ struct ViewRender *view_render) ATTR_NONNULL();
+bool ED_workspace_change(
+ struct WorkSpace *workspace_new,
+ struct bContext *C,
+ struct wmWindow *win) ATTR_NONNULL();
+struct WorkSpace *ED_workspace_duplicate(
+ struct WorkSpace *workspace_old,
+ struct Main *bmain, struct wmWindow *win);
+bool ED_workspace_delete(
+ struct WorkSpace *workspace,
+ struct Main *bmain, struct bContext *C,
+ struct wmWindowManager *wm) ATTR_NONNULL();
+void ED_workspace_scene_data_sync(
+ struct WorkSpaceInstanceHook *hook, Scene *scene) ATTR_NONNULL();
+void ED_workspace_view_layer_unset(
+ const struct Main *bmain, struct Scene *scene,
+ const ViewLayer *layer_unset, ViewLayer *layer_new) ATTR_NONNULL(1, 2);
+struct WorkSpaceLayout *ED_workspace_layout_add(
+ struct WorkSpace *workspace,
+ struct wmWindow *win,
+ const char *name) ATTR_NONNULL();
+struct WorkSpaceLayout *ED_workspace_layout_duplicate(
+ struct WorkSpace *workspace, const struct WorkSpaceLayout *layout_old,
+ struct wmWindow *win) ATTR_NONNULL();
+bool ED_workspace_layout_delete(
+ struct WorkSpace *workspace, struct WorkSpaceLayout *layout_old,
+ struct bContext *C) ATTR_NONNULL();
+bool ED_workspace_layout_cycle(
+ struct WorkSpace *workspace, const short direction,
+ struct bContext *C) ATTR_NONNULL();
/* anim */
-void ED_update_for_newframe(struct Main *bmain, struct Scene *scene, int mute);
+void ED_update_for_newframe(struct Main *bmain, struct Scene *scene, struct ViewLayer *view_layer, struct Depsgraph *depsgraph);
void ED_refresh_viewport_fps(struct bContext *C);
int ED_screen_animation_play(struct bContext *C, int sync, int mode);
@@ -133,6 +198,8 @@ bScreen *ED_screen_animation_no_scrub(const struct wmWindowManager *wm);
/* screen keymaps */
void ED_operatortypes_screen(void);
void ED_keymap_screen(struct wmKeyConfig *keyconf);
+/* workspace keymaps */
+void ED_operatortypes_workspace(void);
/* operators; context poll callbacks */
int ED_operator_screenactive(struct bContext *C);
@@ -188,6 +255,7 @@ int ED_operator_posemode_context(struct bContext *C);
int ED_operator_posemode(struct bContext *C);
int ED_operator_posemode_local(struct bContext *C);
int ED_operator_mask(struct bContext *C);
+int ED_operator_camera(struct bContext *C);
/* Cache display helpers */
diff --git a/source/blender/editors/include/ED_sculpt.h b/source/blender/editors/include/ED_sculpt.h
index 6daaac5bb42..a81d63d9f25 100644
--- a/source/blender/editors/include/ED_sculpt.h
+++ b/source/blender/editors/include/ED_sculpt.h
@@ -39,8 +39,7 @@ struct rcti;
/* sculpt.c */
void ED_operatortypes_sculpt(void);
-void ED_sculpt_redraw_planes_get(float planes[4][4], struct ARegion *ar,
- struct RegionView3D *rv3d, struct Object *ob);
+void ED_sculpt_redraw_planes_get(float planes[4][4], struct ARegion *ar, struct Object *ob);
int ED_sculpt_mask_box_select(struct bContext *C, struct ViewContext *vc, const struct rcti *rect, bool select, bool extend);
#endif /* __ED_SCULPT_H__ */
diff --git a/source/blender/editors/include/ED_transform.h b/source/blender/editors/include/ED_transform.h
index 9a0a7f8f1bb..536f9c22dcd 100644
--- a/source/blender/editors/include/ED_transform.h
+++ b/source/blender/editors/include/ED_transform.h
@@ -43,6 +43,7 @@ struct wmEvent;
struct wmKeyConfig;
struct wmKeyMap;
struct wmOperatorType;
+struct WorkSpace;
struct Main;
struct SnapObjectContext;
struct SnapObjectParams;
@@ -109,9 +110,10 @@ enum TfmMode {
bool calculateTransformCenter(struct bContext *C, int centerMode, float cent3d[3], float cent2d[2]);
struct TransInfo;
-struct Base;
struct Scene;
struct Object;
+struct wmManipulatorGroup;
+struct wmManipulatorGroupType;
struct wmOperator;
/* UNUSED */
@@ -128,7 +130,7 @@ void BIF_createTransformOrientation(struct bContext *C, struct ReportList *repor
const char *name, const bool use_view,
const bool activate, const bool overwrite);
void BIF_selectTransformOrientation(struct bContext *C, struct TransformOrientation *ts);
-void BIF_selectTransformOrientationValue(struct bContext *C, int orientation);
+void BIF_selectTransformOrientationValue(struct View3D *v3d, int orientation);
void ED_getTransformOrientationMatrix(const struct bContext *C, float orientation_mat[3][3], const short around);
@@ -153,10 +155,16 @@ int BIF_countTransformOrientation(const struct bContext *C);
void Transform_Properties(struct wmOperatorType *ot, int flags);
-/* view3d manipulators */
+/* transform manipulators */
+
+void TRANSFORM_WGT_manipulator(struct wmManipulatorGroupType *wgt);
+void VIEW3D_WGT_xform_cage(struct wmManipulatorGroupType *wgt);
+
+bool ED_widgetgroup_manipulator2d_poll(const struct bContext *C, struct wmManipulatorGroupType *wgt);
+void ED_widgetgroup_manipulator2d_setup(const struct bContext *C, struct wmManipulatorGroup *mgroup);
+void ED_widgetgroup_manipulator2d_refresh(const struct bContext *C, struct wmManipulatorGroup *mgroup);
+void ED_widgetgroup_manipulator2d_draw_prepare(const struct bContext *C, struct wmManipulatorGroup *mgroup);
-int BIF_do_manipulator(struct bContext *C, const struct wmEvent *event, struct wmOperator *op);
-void BIF_draw_manipulator(const struct bContext *C);
/* Snapping */
diff --git a/source/blender/editors/include/ED_transform_snap_object_context.h b/source/blender/editors/include/ED_transform_snap_object_context.h
index 156b0ab36b0..8761f2c5361 100644
--- a/source/blender/editors/include/ED_transform_snap_object_context.h
+++ b/source/blender/editors/include/ED_transform_snap_object_context.h
@@ -30,11 +30,14 @@ struct BMEdge;
struct BMFace;
struct ListBase;
+struct RenderEngineType;
struct Scene;
+struct ViewLayer;
struct Main;
struct Object;
struct ARegion;
struct View3D;
+struct bContext;
/* transform_snap_object.c */
@@ -73,9 +76,9 @@ struct SnapObjectParams {
typedef struct SnapObjectContext SnapObjectContext;
SnapObjectContext *ED_transform_snap_object_context_create(
- struct Main *bmain, struct Scene *scene, int flag);
+ struct Main *bmain, struct Scene *scene, struct ViewLayer *view_layer, struct RenderEngineType *engine_type, int flag);
SnapObjectContext *ED_transform_snap_object_context_create_view3d(
- struct Main *bmain, struct Scene *scene, int flag,
+ struct Main *bmain, struct Scene *scene, struct ViewLayer *view_layer, struct RenderEngineType *engine_type, int flag,
/* extra args for view3d */
const struct ARegion *ar, const struct View3D *v3d);
void ED_transform_snap_object_context_destroy(SnapObjectContext *sctx);
diff --git a/source/blender/editors/include/ED_uvedit.h b/source/blender/editors/include/ED_uvedit.h
index 354a9655a48..d4c38688335 100644
--- a/source/blender/editors/include/ED_uvedit.h
+++ b/source/blender/editors/include/ED_uvedit.h
@@ -35,12 +35,13 @@ struct BMesh;
struct BMEditMesh;
struct BMFace;
struct BMLoop;
+struct Depsgraph;
struct Image;
struct ImageUser;
-struct MTexPoly;
struct Main;
struct Object;
struct Scene;
+struct ViewLayer;
struct SpaceImage;
struct bNode;
struct wmKeyConfig;
@@ -51,6 +52,7 @@ void ED_keymap_uvedit(struct wmKeyConfig *keyconf);
void ED_uvedit_assign_image(struct Main *bmain, struct Scene *scene, struct Object *obedit, struct Image *ima, struct Image *previma);
bool ED_uvedit_minmax(struct Scene *scene, struct Image *ima, struct Object *obedit, float min[2], float max[2]);
+bool ED_uvedit_center(Scene *scene, Image *ima, struct Object *obedit, float cent[2], char mode);
void ED_uvedit_select_all(struct BMesh *bm);
bool ED_object_get_active_image(struct Object *ob, int mat_nr,
@@ -60,7 +62,7 @@ void ED_object_assign_active_image(struct Main *bmain, struct Object *ob, int ma
bool ED_uvedit_test(struct Object *obedit);
/* visibility and selection */
-bool uvedit_face_visible_test(struct Scene *scene, struct Image *ima, struct BMFace *efa, struct MTexPoly *tf);
+bool uvedit_face_visible_test(struct Scene *scene, struct Image *ima, struct BMFace *efa);
bool uvedit_face_select_test(struct Scene *scene, struct BMFace *efa,
const int cd_loop_uv_offset);
bool uvedit_edge_select_test(struct Scene *scene, struct BMLoop *l,
@@ -110,7 +112,10 @@ void ED_unwrap_lscm(struct Scene *scene, struct Object *obedit, const short sel)
/* uvedit_draw.c */
void ED_image_draw_cursor(struct ARegion *ar, const float cursor[2]);
-void ED_uvedit_draw_main(struct SpaceImage *sima, struct ARegion *ar, struct Scene *scene, struct Object *obedit, struct Object *obact);
+void ED_uvedit_draw_main(
+ struct SpaceImage *sima, const struct EvaluationContext *eval_ctx,
+ struct ARegion *ar, struct Scene *scene, struct ViewLayer *view_layer,
+ struct Object *obedit, struct Object *obact, struct Depsgraph *depsgraph);
/* uvedit_buttons.c */
void ED_uvedit_buttons_register(struct ARegionType *art);
diff --git a/source/blender/editors/include/ED_view3d.h b/source/blender/editors/include/ED_view3d.h
index 86de619323c..e3eb4c7ac97 100644
--- a/source/blender/editors/include/ED_view3d.h
+++ b/source/blender/editors/include/ED_view3d.h
@@ -40,7 +40,10 @@ struct BPoint;
struct Base;
struct BezTriple;
struct BoundBox;
+struct Camera;
+struct Depsgraph;
struct EditBone;
+struct EvaluationContext;
struct ImBuf;
struct MVert;
struct Main;
@@ -49,14 +52,15 @@ struct Nurb;
struct Object;
struct RV3DMatrixStore;
struct RegionView3D;
+struct RenderEngineType;
struct Scene;
+struct ViewLayer;
struct ScrArea;
struct View3D;
struct ViewContext;
struct bContext;
struct bPoseChannel;
struct bScreen;
-struct bglMats;
struct rctf;
struct rcti;
struct wmOperator;
@@ -66,11 +70,16 @@ struct wmWindowManager;
struct GPUFX;
struct GPUOffScreen;
struct GPUFXSettings;
+struct GPUViewport;
+struct WorkSpace;
enum eGPUFXFlags;
/* for derivedmesh drawing callbacks, for view3d_select, .... */
typedef struct ViewContext {
+ struct Depsgraph *depsgraph;
struct Scene *scene;
+ struct ViewLayer *view_layer;
+ struct RenderEngineType *engine_type;
struct Object *obact;
struct Object *obedit;
struct ARegion *ar;
@@ -108,10 +117,10 @@ void ED_view3d_lastview_store(struct RegionView3D *rv3d);
void ED_view3d_depth_update(struct ARegion *ar);
float ED_view3d_depth_read_cached(const struct ViewContext *vc, const int mval[2]);
bool ED_view3d_depth_read_cached_normal(
- const ViewContext *vc, const struct bglMats *mats, const int mval[2],
+ const ViewContext *vc, const int mval[2],
float r_normal[3]);
bool ED_view3d_depth_unproject(
- const struct ARegion *ar, const struct bglMats *mats,
+ const struct ARegion *ar,
const int mval[2], const double depth,
float r_location_world[3]);
void ED_view3d_depth_tag_update(struct RegionView3D *rv3d);
@@ -148,20 +157,20 @@ typedef enum {
/* foreach iterators */
void meshobject_foreachScreenVert(
- struct ViewContext *vc,
+ const struct EvaluationContext *eval_ctx, struct ViewContext *vc,
void (*func)(void *userData, struct MVert *eve, const float screen_co[2], int index),
void *userData, const eV3DProjTest clip_flag);
void mesh_foreachScreenVert(
- struct ViewContext *vc,
+ const struct EvaluationContext *eval_ctx, struct ViewContext *vc,
void (*func)(void *userData, struct BMVert *eve, const float screen_co[2], int index),
void *userData, const eV3DProjTest clip_flag);
void mesh_foreachScreenEdge(
- struct ViewContext *vc,
+ const struct EvaluationContext *eval_ctx, struct ViewContext *vc,
void (*func)(void *userData, struct BMEdge *eed, const float screen_co_a[2], const float screen_co_b[2],
int index),
void *userData, const eV3DProjTest clip_flag);
void mesh_foreachScreenFace(
- struct ViewContext *vc,
+ const struct EvaluationContext *eval_ctx, struct ViewContext *vc,
void (*func)(void *userData, struct BMFace *efa, const float screen_co[2], int index),
void *userData, const eV3DProjTest clip_flag);
void nurbs_foreachScreenVert(
@@ -220,9 +229,11 @@ float ED_view3d_pixel_size(const struct RegionView3D *rv3d, const float co[3]);
float ED_view3d_calc_zfac(const struct RegionView3D *rv3d, const float co[3], bool *r_flip);
bool ED_view3d_clip_segment(const struct RegionView3D *rv3d, float ray_start[3], float ray_end[3]);
bool ED_view3d_win_to_ray(
+ const struct Depsgraph *depsgraph,
const struct ARegion *ar, const struct View3D *v3d, const float mval[2],
float ray_start[3], float ray_normal[3], const bool do_clip);
bool ED_view3d_win_to_ray_ex(
+ const struct Depsgraph *depsgraph,
const struct ARegion *ar, const struct View3D *v3d, const float mval[2],
float r_ray_co[3], float r_ray_normal[3], float r_ray_start[3], bool do_clip);
void ED_view3d_global_to_vector(const struct RegionView3D *rv3d, const float coord[3], float vec[3]);
@@ -237,11 +248,14 @@ void ED_view3d_win_to_3d_int(
void ED_view3d_win_to_delta(const struct ARegion *ar, const float mval[2], float out[3], const float zfac);
void ED_view3d_win_to_origin(const struct ARegion *ar, const float mval[2], float out[3]);
void ED_view3d_win_to_vector(const struct ARegion *ar, const float mval[2], float out[3]);
-bool ED_view3d_win_to_segment(const struct ARegion *ar, struct View3D *v3d, const float mval[2],
+bool ED_view3d_win_to_segment(const struct Depsgraph *depsgraph,
+ const struct ARegion *ar, struct View3D *v3d, const float mval[2],
float r_ray_start[3], float r_ray_end[3], const bool do_clip);
void ED_view3d_ob_project_mat_get(const struct RegionView3D *v3d, struct Object *ob, float pmat[4][4]);
void ED_view3d_ob_project_mat_get_from_obmat(const struct RegionView3D *rv3d, float obmat[4][4], float pmat[4][4]);
-void ED_view3d_unproject(struct bglMats *mats, float out[3], const float x, const float y, const float z);
+
+void ED_view3d_project(const struct ARegion *ar, const float world[3], float region[3]);
+bool ED_view3d_unproject(const struct ARegion *ar, float regionx, float regiony, float regionz, float world[3]);
/* end */
@@ -250,28 +264,34 @@ void ED_view3d_dist_range_get(
const struct View3D *v3d,
float r_dist_range[2]);
bool ED_view3d_clip_range_get(
+ const struct Depsgraph *depsgraph,
const struct View3D *v3d, const struct RegionView3D *rv3d,
float *r_clipsta, float *r_clipend, const bool use_ortho_factor);
bool ED_view3d_viewplane_get(
+ const struct Depsgraph *depsgraph,
const struct View3D *v3d, const struct RegionView3D *rv3d, int winxi, int winyi,
struct rctf *r_viewplane, float *r_clipsta, float *r_clipend, float *r_pixsize);
void ED_view3d_polygon_offset(const struct RegionView3D *rv3d, const float dist);
void ED_view3d_calc_camera_border(
- const struct Scene *scene, const struct ARegion *ar,
+ const struct Scene *scene, const struct Depsgraph *depsgraph,
+ const struct ARegion *ar,
const struct View3D *v3d, const struct RegionView3D *rv3d,
struct rctf *r_viewborder, const bool no_shift);
void ED_view3d_calc_camera_border_size(
- const struct Scene *scene, const struct ARegion *ar,
+ const struct Scene *scene, const struct Depsgraph *depsgraph,
+ const struct ARegion *ar,
const struct View3D *v3d, const struct RegionView3D *rv3d,
float r_size[2]);
bool ED_view3d_calc_render_border(
- const struct Scene *scene, const struct View3D *v3d,
- const struct ARegion *ar, struct rcti *rect);
+ const struct Scene *scene, const struct Depsgraph *depsgraph,
+ struct View3D *v3d,
+ struct ARegion *ar, struct rcti *rect);
void ED_view3d_clipping_calc_from_boundbox(float clip[6][4], const struct BoundBox *clipbb, const bool is_flip);
-void ED_view3d_clipping_calc(struct BoundBox *bb, float planes[4][4], struct bglMats *mats, const struct rcti *rect);
+void ED_view3d_clipping_calc(struct BoundBox *bb, float planes[4][4],
+ const struct ARegion *ar, const struct Object *ob, const struct rcti *rect);
void ED_view3d_clipping_local(struct RegionView3D *rv3d, float mat[4][4]);
bool ED_view3d_clipping_test(const struct RegionView3D *rv3d, const float co[3], const bool is_local);
void ED_view3d_clipping_set(struct RegionView3D *rv3d);
@@ -285,24 +305,26 @@ float ED_view3d_radius_to_dist(
const char persp, const bool use_aspect,
const float radius);
-void drawcircball(int mode, const float cent[3], float rad, const float tmat[4][4]);
+void imm_drawcircball(const float cent[3], float rad, const float tmat[4][4], unsigned pos);
/* backbuffer select and draw support */
-void ED_view3d_backbuf_validate(struct ViewContext *vc);
-struct ImBuf *ED_view3d_backbuf_read(struct ViewContext *vc, int xmin, int ymin, int xmax, int ymax);
+void ED_view3d_backbuf_validate(const struct EvaluationContext *eval_ctx, struct ViewContext *vc);
+struct ImBuf *ED_view3d_backbuf_read(
+ const struct EvaluationContext *eval_ctx, struct ViewContext *vc, int xmin, int ymin, int xmax, int ymax);
unsigned int ED_view3d_backbuf_sample_rect(
- struct ViewContext *vc, const int mval[2], int size,
+ const struct EvaluationContext *eval_ctx, struct ViewContext *vc, const int mval[2], int size,
unsigned int min, unsigned int max, float *r_dist);
int ED_view3d_backbuf_sample_size_clamp(struct ARegion *ar, const float dist);
-unsigned int ED_view3d_backbuf_sample(struct ViewContext *vc, int x, int y);
+unsigned int ED_view3d_backbuf_sample(
+ const struct EvaluationContext *eval_ctx, struct ViewContext *vc, int x, int y);
bool ED_view3d_autodist(
- struct Scene *scene, struct ARegion *ar, struct View3D *v3d,
+ const struct EvaluationContext *eval_ctx, struct Depsgraph *graph, struct ARegion *ar, struct View3D *v3d,
const int mval[2], float mouse_worldloc[3],
const bool alphaoverride, const float fallback_depth_pt[3]);
/* only draw so ED_view3d_autodist_simple can be called many times after */
-void ED_view3d_autodist_init(struct Scene *scene, struct ARegion *ar, struct View3D *v3d, int mode);
+void ED_view3d_autodist_init(const struct EvaluationContext *eval_ctx, struct Depsgraph *graph, struct ARegion *ar, struct View3D *v3d, int mode);
bool ED_view3d_autodist_simple(struct ARegion *ar, const int mval[2], float mouse_worldloc[3], int margin, float *force_depth);
bool ED_view3d_autodist_depth(struct ARegion *ar, const int mval[2], int margin, float *depth);
bool ED_view3d_autodist_depth_seg(struct ARegion *ar, const int mval_sta[2], const int mval_end[2], int margin, float *depth);
@@ -324,7 +346,7 @@ void view3d_opengl_select_cache_begin(void);
void view3d_opengl_select_cache_end(void);
int view3d_opengl_select(
- struct ViewContext *vc, unsigned int *buffer, unsigned int bufsize, const struct rcti *input,
+ const struct EvaluationContext *eval_ctx, struct ViewContext *vc, unsigned int *buffer, unsigned int bufsize, const struct rcti *input,
eV3DSelectMode select_mode);
/* view3d_select.c */
@@ -333,7 +355,6 @@ void view3d_set_viewcontext(struct bContext *C, struct ViewContext *vc);
void view3d_operator_needs_opengl(const struct bContext *C);
void view3d_region_operator_needs_opengl(struct wmWindow *win, struct ARegion *ar);
void view3d_opengl_read_pixels(struct ARegion *ar, int x, int y, int w, int h, int format, int type, void *data);
-void view3d_get_transformation(const struct ARegion *ar, struct RegionView3D *rv3d, struct Object *ob, struct bglMats *mats);
/* XXX should move to BLI_math */
bool edge_inside_circle(const float cent[2], float radius, const float screen_co_a[2], const float screen_co_b[2]);
@@ -352,20 +373,25 @@ void ED_view3d_check_mats_rv3d(struct RegionView3D *rv3d);
# define ED_view3d_clear_mats_rv3d(rv3d) (void)(rv3d)
# define ED_view3d_check_mats_rv3d(rv3d) (void)(rv3d)
#endif
-int ED_view3d_scene_layer_set(int lay, const int *values, int *active);
+int ED_view3d_view_layer_set(int lay, const int *values, int *active);
struct RV3DMatrixStore *ED_view3d_mats_rv3d_backup(struct RegionView3D *rv3d);
void ED_view3d_mats_rv3d_restore(struct RegionView3D *rv3d, struct RV3DMatrixStore *rv3dmat);
+void ED_draw_object_facemap(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob, const float col[4], const int facemap);
+
bool ED_view3d_context_activate(struct bContext *C);
-void ED_view3d_draw_offscreen_init(struct Scene *scene, struct View3D *v3d);
+void ED_view3d_draw_offscreen_init(
+ const struct EvaluationContext *eval_ctx, struct Scene *scene,
+ struct ViewLayer *view_layer, struct View3D *v3d);
void ED_view3d_draw_offscreen(
- struct Scene *scene, struct View3D *v3d, struct ARegion *ar, int winx, int winy, float viewmat[4][4],
+ const struct EvaluationContext *eval_ctx, struct Scene *scene,
+ struct ViewLayer *view_layer, struct View3D *v3d, struct ARegion *ar, int winx, int winy, float viewmat[4][4],
float winmat[4][4], bool do_bgpic, bool do_sky, bool is_persp, const char *viewname,
struct GPUFX *fx, struct GPUFXSettings *fx_settings,
- struct GPUOffScreen *ofs);
+ struct GPUOffScreen *ofs, struct GPUViewport *viewport);
void ED_view3d_draw_setup_view(
- struct wmWindow *win, struct Scene *scene, struct ARegion *ar, struct View3D *v3d,
+ struct wmWindow *win, const struct EvaluationContext *eval_ctx, struct Scene *scene, struct ARegion *ar, struct View3D *v3d,
float viewmat[4][4], float winmat[4][4], const struct rcti *rect);
enum {
@@ -381,12 +407,14 @@ enum {
};
struct ImBuf *ED_view3d_draw_offscreen_imbuf(
- struct Scene *scene, struct View3D *v3d, struct ARegion *ar, int sizex, int sizey,
- unsigned int flag, unsigned int draw_flags,
+ const struct EvaluationContext *eval_ctx, struct Scene *scene,
+ struct ViewLayer *view_layer, struct View3D *v3d, struct ARegion *ar,
+ int sizex, int sizey, unsigned int flag, unsigned int draw_flags,
int alpha_mode, int samples, const char *viewname,
struct GPUFX *fx, struct GPUOffScreen *ofs, char err_out[256]);
struct ImBuf *ED_view3d_draw_offscreen_imbuf_simple(
- struct Scene *scene, struct Object *camera, int width, int height,
+ const struct EvaluationContext *eval_ctx, struct Scene *scene,
+ struct ViewLayer *view_layer, struct Object *camera, int width, int height,
unsigned int flag, unsigned int draw_flags, int drawtype, int alpha_mode,
int samples, const char *viewname,
struct GPUFX *fx, struct GPUOffScreen *ofs, char err_out[256]);
@@ -394,7 +422,7 @@ struct ImBuf *ED_view3d_draw_offscreen_imbuf_simple(
struct Base *ED_view3d_give_base_under_cursor(struct bContext *C, const int mval[2]);
void ED_view3d_quadview_update(struct ScrArea *sa, struct ARegion *ar, bool do_clip);
void ED_view3d_update_viewmat(
- struct Scene *scene, struct View3D *v3d, struct ARegion *ar,
+ const struct EvaluationContext *eval_ctx, struct Scene *scene, struct View3D *v3d, struct ARegion *ar,
float viewmat[4][4], float winmat[4][4], const struct rcti *rect);
bool ED_view3d_quat_from_axis_view(const char view, float quat[4]);
char ED_view3d_quat_to_axis_view(const float quat[4], const float epsilon);
@@ -403,7 +431,7 @@ char ED_view3d_axis_view_opposite(char view);
bool ED_view3d_lock(struct RegionView3D *rv3d);
uint64_t ED_view3d_datamask(const struct Scene *scene, const struct View3D *v3d);
-uint64_t ED_view3d_screen_datamask(const struct bScreen *screen);
+uint64_t ED_view3d_screen_datamask(const struct Scene *scene, const struct bScreen *screen);
bool ED_view3d_offset_lock_check(const struct View3D *v3d, const struct RegionView3D *rv3d);
void ED_view3d_persp_switch_from_camera(struct View3D *v3d, struct RegionView3D *rv3d, const char persp);
@@ -427,10 +455,6 @@ bool ED_view3d_camera_lock_autokey(
void ED_view3d_lock_clear(struct View3D *v3d);
-struct BGpic *ED_view3d_background_image_new(struct View3D *v3d);
-void ED_view3d_background_image_remove(struct View3D *v3d, struct BGpic *bgpic);
-void ED_view3d_background_image_clear(struct View3D *v3d);
-
#define VIEW3D_MARGIN 1.4f
#define VIEW3D_DIST_FALLBACK 1.0f
@@ -459,4 +483,11 @@ void ED_view3d_shade_update(struct Main *bmain, struct View3D *v3d, struct ScrAr
void ED_view3d_id_remap(struct View3D *v3d, const struct ID *old_id, struct ID *new_id);
+/* view3d_draw_legacy.c */
+/* Try avoid using these more move out of legacy. */
+void ED_view3d_draw_bgpic_test(
+ struct Scene *scene, const struct Depsgraph *depsgraph,
+ struct ARegion *ar, struct View3D *v3d,
+ const bool do_foreground, const bool do_camera_frame);
+
#endif /* __ED_VIEW3D_H__ */
diff --git a/source/blender/editors/include/UI_icons.h b/source/blender/editors/include/UI_icons.h
index 0c83038b7a3..923038a7490 100644
--- a/source/blender/editors/include/UI_icons.h
+++ b/source/blender/editors/include/UI_icons.h
@@ -190,8 +190,8 @@ DEF_ICON(SCULPTMODE_HLT)
DEF_ICON(POSE_HLT)
DEF_ICON(PARTICLEMODE)
DEF_ICON(LIGHTPAINT)
+DEF_ICON(GREASEPENCIL_STROKE_PAINT)
#ifndef DEF_ICON_BLANK_SKIP
- DEF_ICON(BLANK063)
DEF_ICON(BLANK064)
DEF_ICON(BLANK065)
DEF_ICON(BLANK066)
@@ -257,9 +257,7 @@ DEF_ICON(STRANDS)
DEF_ICON(LIBRARY_DATA_INDIRECT)
DEF_ICON(GREASEPENCIL)
DEF_ICON(LINE_DATA)
-#ifndef DEF_ICON_BLANK_SKIP
- DEF_ICON(BLANK084)
-#endif
+DEF_ICON(LIBRARY_DATA_OVERRIDE)
DEF_ICON(GROUP_BONE)
DEF_ICON(GROUP_VERTEX)
DEF_ICON(GROUP_VCOL)
@@ -315,8 +313,8 @@ DEF_ICON(OUTLINER_OB_SURFACE)
DEF_ICON(OUTLINER_OB_SPEAKER)
DEF_ICON(OUTLINER_OB_FORCE_FIELD)
DEF_ICON(OUTLINER_OB_GROUP_INSTANCE)
+DEF_ICON(OUTLINER_OB_GREASEPENCIL)
#ifndef DEF_ICON_BLANK_SKIP
- DEF_ICON(BLANK122)
DEF_ICON(BLANK123)
DEF_ICON(BLANK124)
DEF_ICON(BLANK125)
@@ -346,8 +344,8 @@ DEF_ICON(OUTLINER_DATA_FONT)
DEF_ICON(OUTLINER_DATA_SURFACE)
DEF_ICON(OUTLINER_DATA_SPEAKER)
DEF_ICON(OUTLINER_DATA_POSE)
+DEF_ICON(OUTLINER_DATA_GREASEPENCIL)
#ifndef DEF_ICON_BLANK_SKIP
- DEF_ICON(BLANK130)
DEF_ICON(BLANK131)
DEF_ICON(BLANK132)
DEF_ICON(BLANK133)
@@ -715,8 +713,8 @@ DEF_ICON(CLIPUV_DEHLT)
DEF_ICON(CLIPUV_HLT)
DEF_ICON(SNAP_PEEL_OBJECT)
DEF_ICON(GRID)
+DEF_ICON(OBJECT_ORIGIN)
#ifndef DEF_ICON_BLANK_SKIP
- DEF_ICON(BLANK221)
DEF_ICON(BLANK222)
DEF_ICON(BLANK224)
DEF_ICON(BLANK225)
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index d6c6f0a2eb6..6e09318314d 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -73,6 +73,8 @@ struct bNodeSocket;
struct wmDropBox;
struct wmDrag;
struct wmEvent;
+struct wmManipulator;
+struct wmMsgBus;
typedef struct uiBut uiBut;
typedef struct uiBlock uiBlock;
@@ -183,6 +185,8 @@ enum {
UI_BUT_UPDATE_DELAY = (1 << 28), /* don't run updates while dragging (needed in rare cases). */
UI_BUT_TEXTEDIT_UPDATE = (1 << 29), /* when widget is in textedit mode, update value on each char stroke */
UI_BUT_VALUE_CLEAR = (1 << 30), /* show 'x' icon to clear/unlink value of text or search button */
+
+ UI_BUT_OVERRIDEN = (1 << 31), /* RNA property of the button is overriden from linked reference data. */
};
#define UI_PANEL_WIDTH 340
@@ -261,6 +265,7 @@ typedef enum {
UI_BTYPE_CHECKBOX = (13 << 9), /* similar to toggle, display a 'tick' */
UI_BTYPE_CHECKBOX_N = (14 << 9),
UI_BTYPE_COLOR = (15 << 9),
+ UI_BTYPE_TAB = (16 << 9),
UI_BTYPE_SCROLL = (18 << 9),
UI_BTYPE_BLOCK = (19 << 9),
UI_BTYPE_LABEL = (20 << 9),
@@ -313,18 +318,22 @@ typedef enum {
* Functions to draw various shapes, taking theme settings into account.
* Used for code that draws its own UI style elements. */
-void UI_draw_roundbox(float minx, float miny, float maxx, float maxy, float rad);
void UI_draw_roundbox_corner_set(int type);
+void UI_draw_roundbox_aa(bool filled, float minx, float miny, float maxx, float maxy, float rad, const float color[4]);
+void UI_draw_roundbox_4fv(bool filled, float minx, float miny, float maxx, float maxy, float rad, const float col[4]);
+void UI_draw_roundbox_3ubAlpha(bool filled, float minx, float miny, float maxx, float maxy, float rad, const unsigned char col[3], unsigned char alpha);
+void UI_draw_roundbox_3fvAlpha(bool filled, float minx, float miny, float maxx, float maxy, float rad, const float col[3], float alpha);
+void UI_draw_roundbox_shade_x(bool filled, float minx, float miny, float maxx, float maxy, float rad, float shadetop, float shadedown, const float col[4]);
+
+#if 0 /* unused */
int UI_draw_roundbox_corner_get(void);
-void UI_draw_roundbox_unfilled(float minx, float miny, float maxx, float maxy, float rad);
+void UI_draw_roundbox_shade_y(bool filled, float minx, float miny, float maxx, float maxy, float rad, float shadeleft, float shaderight, const float col[4]);
+#endif
+
void UI_draw_box_shadow(unsigned char alpha, float minx, float miny, float maxx, float maxy);
-void UI_draw_roundbox_gl_mode(int mode, float minx, float miny, float maxx, float maxy, float rad);
-void UI_draw_roundbox_shade_x(int mode, float minx, float miny, float maxx, float maxy, float rad, float shadetop, float shadedown);
-void UI_draw_roundbox_shade_y(int mode, float minx, float miny, float maxx, float maxy, float rad, float shadeLeft, float shadeRight);
-void UI_draw_text_underline(int pos_x, int pos_y, int len, int height);
+void UI_draw_text_underline(int pos_x, int pos_y, int len, int height, const float color[4]);
-void UI_draw_safe_areas(
- float x1, float x2, float y1, float y2,
+void UI_draw_safe_areas(uint pos, float x1, float x2, float y1, float y2,
const float title_aspect[2], const float action_aspect[2]);
/* state for scrolldrawing */
@@ -659,6 +668,7 @@ void UI_but_string_info_get(struct bContext *C, uiBut *but, ...) ATTR_SENTINEL(0
#define UI_ID_FAKE_USER (1 << 8)
#define UI_ID_PIN (1 << 9)
#define UI_ID_PREVIEWS (1 << 10)
+#define UI_ID_OVERRIDE (1 << 11)
#define UI_ID_FULL (UI_ID_RENAME | UI_ID_BROWSE | UI_ID_ADD_NEW | UI_ID_OPEN | UI_ID_ALONE | UI_ID_DELETE | UI_ID_LOCAL)
/**
@@ -809,7 +819,6 @@ void UI_popup_handlers_remove_all(struct bContext *C, struct ListBase *handlers)
void UI_init(void);
void UI_init_userdef(void);
void UI_reinit_font(void);
-void UI_reinit_gl_state(void);
void UI_exit(void);
/* Layout
@@ -874,13 +883,12 @@ enum {
UI_CNR_ALL = (UI_CNR_TOP_LEFT | UI_CNR_TOP_RIGHT | UI_CNR_BOTTOM_RIGHT | UI_CNR_BOTTOM_LEFT)
};
-/* not apart of the corner flags but mixed in some functions */
-#define UI_RB_ALPHA (UI_CNR_ALL + 1)
-
uiLayout *UI_block_layout(uiBlock *block, int dir, int type, int x, int y, int size, int em, int padding, struct uiStyle *style);
void UI_block_layout_set_current(uiBlock *block, uiLayout *layout);
void UI_block_layout_resolve(uiBlock *block, int *x, int *y);
+void UI_region_message_subscribe(struct ARegion *ar, struct wmMsgBus *mbus);
+
uiBlock *uiLayoutGetBlock(uiLayout *layout);
void uiLayoutSetFunc(uiLayout *layout, uiMenuHandleFunc handlefunc, void *argv);
@@ -938,6 +946,17 @@ void uiTemplateIDPreview(
const char *newop, const char *openop, const char *unlinkop, int rows, int cols, int filter);
void uiTemplateAnyID(uiLayout *layout, struct PointerRNA *ptr, const char *propname,
const char *proptypename, const char *text);
+void uiTemplateSearch(
+ uiLayout *layout, struct bContext *C,
+ struct PointerRNA *ptr, const char *propname,
+ struct PointerRNA *searchptr, const char *searchpropname,
+ const char *newop, const char *unlinkop);
+void uiTemplateSearchPreview(
+ uiLayout *layout, struct bContext *C,
+ struct PointerRNA *ptr, const char *propname,
+ struct PointerRNA *searchptr, const char *searchpropname,
+ const char *newop, const char *unlinkop,
+ const int rows, const int cols);
void uiTemplatePathBuilder(uiLayout *layout, struct PointerRNA *ptr, const char *propname,
struct PointerRNA *root_ptr, const char *text);
uiLayout *uiTemplateModifier(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr);
@@ -974,6 +993,11 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C);
void uiTemplateEditModeSelection(uiLayout *layout, struct bContext *C);
void uiTemplateReportsBanner(uiLayout *layout, struct bContext *C);
void uiTemplateKeymapItemProperties(uiLayout *layout, struct PointerRNA *ptr);
+void uiTemplateOverrideProperty(
+ uiLayout *layout, struct PointerRNA *collection_props_ptr, struct PointerRNA *scene_props_ptr,
+ const char *propname,
+ const char *name, const char *text_ctxt, int translate, int icon,
+ const char *custom_template);
void uiTemplateComponentMenu(uiLayout *layout, struct PointerRNA *ptr, const char *propname, const char *name);
void uiTemplateNodeSocket(uiLayout *layout, struct bContext *C, float *color);
void uiTemplateCacheFile(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, const char *propname);
@@ -1085,20 +1109,22 @@ uiBut *UI_region_active_but_get(struct ARegion *ar);
/* Styled text draw */
void UI_fontstyle_set(const struct uiFontStyle *fs);
-void UI_fontstyle_draw_ex(
- const struct uiFontStyle *fs, const struct rcti *rect, const char *str,
- size_t len, float *r_xofs, float *r_yofs);
-void UI_fontstyle_draw(const struct uiFontStyle *fs, const struct rcti *rect, const char *str);
-void UI_fontstyle_draw_rotated(const struct uiFontStyle *fs, const struct rcti *rect, const char *str);
-void UI_fontstyle_draw_simple(const struct uiFontStyle *fs, float x, float y, const char *str);
+void UI_fontstyle_draw_ex(const struct uiFontStyle *fs, const struct rcti *rect, const char *str,
+ const unsigned char col[4], size_t len, float *r_xofs, float *r_yofs);
+void UI_fontstyle_draw(const struct uiFontStyle *fs, const struct rcti *rect, const char *str,
+ const unsigned char col[4]);
+void UI_fontstyle_draw_rotated(const struct uiFontStyle *fs, const struct rcti *rect, const char *str,
+ const unsigned char col[4]);
+void UI_fontstyle_draw_simple(const struct uiFontStyle *fs, float x, float y, const char *str,
+ const unsigned char col[4]);
void UI_fontstyle_draw_simple_backdrop(
const struct uiFontStyle *fs, float x, float y, const char *str,
- const unsigned char fg[4], const unsigned char bg[4]);
+ const float col_fg[4], const float col_bg[4]);
int UI_fontstyle_string_width(const struct uiFontStyle *fs, const char *str);
int UI_fontstyle_height_max(const struct uiFontStyle *fs);
-void UI_draw_icon_tri(float x, float y, char dir);
+void UI_draw_icon_tri(float x, float y, char dir, const float[4]);
struct uiStyle *UI_style_get(void); /* use for fonts etc */
struct uiStyle *UI_style_get_dpi(void); /* DPI scaled settings for drawing */
@@ -1126,6 +1152,7 @@ void UI_butstore_unregister(uiButStore *bs_handle, uiBut **but_p);
/* ui_interface_region_tooltip.c */
struct ARegion *UI_tooltip_create_from_button(struct bContext *C, struct ARegion *butregion, uiBut *but);
+struct ARegion *UI_tooltip_create_from_manipulator(struct bContext *C, struct wmManipulator *mpr);
void UI_tooltip_free(struct bContext *C, struct bScreen *sc, struct ARegion *ar);
/* How long before a tool-tip shows. */
diff --git a/source/blender/editors/include/UI_interface_icons.h b/source/blender/editors/include/UI_interface_icons.h
index 945ac1b6db9..cee68ed361c 100644
--- a/source/blender/editors/include/UI_interface_icons.h
+++ b/source/blender/editors/include/UI_interface_icons.h
@@ -66,6 +66,7 @@ void UI_id_icon_render(
int UI_preview_render_size(enum eIconSizes size);
void UI_icon_draw(float x, float y, int icon_id);
+void UI_icon_draw_alpha(float x, float y, int icon_id, float alpha);
void UI_icon_draw_preview(float x, float y, int icon_id);
void UI_icon_draw_preview_aspect(float x, float y, int icon_id, float aspect);
void UI_icon_draw_preview_aspect_size(float x, float y, int icon_id, float aspect, float alpha, int size);
diff --git a/source/blender/editors/include/UI_resources.h b/source/blender/editors/include/UI_resources.h
index a0efd586af5..7d2837ffe4e 100644
--- a/source/blender/editors/include/UI_resources.h
+++ b/source/blender/editors/include/UI_resources.h
@@ -279,6 +279,12 @@ enum {
TH_AXIS_Y,
TH_AXIS_Z,
+ TH_MANIPULATOR_HI,
+ TH_MANIPULATOR_PRIMARY,
+ TH_MANIPULATOR_SECONDARY,
+ TH_MANIPULATOR_A,
+ TH_MANIPULATOR_B,
+
TH_LOW_GRAD,
TH_HIGH_GRAD,
TH_SHOW_BACK_GRAD,
@@ -319,13 +325,13 @@ struct bThemeState {
void UI_ThemeColor(int colorid);
// sets the color plus alpha
-void UI_ThemeColor4(int colorid);
+void UI_ThemeColor4(int colorid);
// sets color plus offset for shade
-void UI_ThemeColorShade(int colorid, int offset);
+void UI_ThemeColorShade(int colorid, int offset);
// sets color plus offset for alpha
-void UI_ThemeColorShadeAlpha(int colorid, int coloffset, int alphaoffset);
+void UI_ThemeColorShadeAlpha(int colorid, int coloffset, int alphaoffset);
// sets color, which is blend between two theme colors
void UI_ThemeColorBlend(int colorid1, int colorid2, float fac);
@@ -343,14 +349,27 @@ int UI_GetThemeValueType(int colorid, int spacetype);
// get three color values, scaled to 0.0-1.0 range
void UI_GetThemeColor3fv(int colorid, float col[3]);
void UI_GetThemeColorBlend3ubv(int colorid1, int colorid2, float fac, unsigned char col[3]);
+void UI_GetThemeColorBlend3f(int colorid1, int colorid2, float fac, float r_col[3]);
// get the color, range 0.0-1.0, complete with shading offset
void UI_GetThemeColorShade3fv(int colorid, int offset, float col[3]);
void UI_GetThemeColorShade3ubv(int colorid, int offset, unsigned char col[3]);
+void UI_GetThemeColorShade4ubv(int colorid, int offset, unsigned char col[4]);
+
+// get three color values, range 0-255, complete with shading offset for the RGB components and blending
+void UI_GetThemeColorBlendShade3ubv(int colorid1, int colorid2, float fac, int offset, unsigned char col[3]);
// get four color values, scaled to 0.0-1.0 range
void UI_GetThemeColor4fv(int colorid, float col[4]);
// get four color values, range 0.0-1.0, complete with shading offset for the RGB components
void UI_GetThemeColorShade4fv(int colorid, int offset, float col[4]);
+void UI_GetThemeColorShadeAlpha4fv(int colorid, int coloffset, int alphaoffset, float col[4]);
+
+// get four colour values ranged between 0 and 255; includes the alpha channel
+void UI_GetThemeColorShadeAlpha4ubv(int colorid, int coloffset, int alphaoffset, unsigned char col[4]);
+
+// get four color values, range 0.0-1.0, complete with shading offset for the RGB components and blending
+void UI_GetThemeColorBlendShade3fv(int colorid1, int colorid2, float fac, int offset, float col[3]);
+void UI_GetThemeColorBlendShade4fv(int colorid1, int colorid2, float fac, int offset, float col[4]);
// get the 3 or 4 byte values
void UI_GetThemeColor3ubv(int colorid, unsigned char col[3]);
@@ -368,6 +387,10 @@ void UI_GetColorPtrShade3ubv(const unsigned char cp1[3], unsigned char col[3]
// get a 3 byte color, blended and shaded between two other char color pointers
void UI_GetColorPtrBlendShade3ubv(const unsigned char cp1[3], const unsigned char cp2[3], unsigned char col[3], float fac, int offset);
+// sets the font color
+// (for anything fancy use UI_GetThemeColor[Fancy] then BLF_color)
+void UI_FontThemeColor(int fontid, int colorid);
+
// clear the openGL ClearColor using the input colorid
void UI_ThemeClearColor(int colorid);
diff --git a/source/blender/editors/interface/CMakeLists.txt b/source/blender/editors/interface/CMakeLists.txt
index ede28b49dbe..523215da29e 100644
--- a/source/blender/editors/interface/CMakeLists.txt
+++ b/source/blender/editors/interface/CMakeLists.txt
@@ -24,6 +24,7 @@ set(INC
../../blenkernel
../../blenlib
../../blentranslation
+ ../../depsgraph
../../gpu
../../imbuf
../../makesdna
diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c
index 5f36c5e21bf..9e6d9f23442 100644
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@ -41,6 +41,7 @@
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
#include "DNA_userdef_types.h"
+#include "DNA_workspace_types.h"
#include "BLI_math.h"
#include "BLI_listbase.h"
@@ -56,7 +57,8 @@
#include "BKE_screen.h"
#include "BKE_idprop.h"
-#include "BIF_gl.h"
+#include "GPU_glew.h"
+#include "GPU_matrix.h"
#include "BLF_api.h"
#include "BLT_translation.h"
@@ -68,11 +70,14 @@
#include "WM_api.h"
#include "WM_types.h"
#include "wm_subwindow.h"
+#include "WM_message.h"
#include "RNA_access.h"
#include "BPY_extern.h"
+#include "ED_screen.h"
+
#include "IMB_colormanagement.h"
#include "interface_intern.h"
@@ -509,6 +514,7 @@ static int ui_but_calc_float_precision(uiBut *but, double value)
static void ui_draw_linkline(uiLinkLine *line, int highlightActiveLines, int dashInactiveLines)
{
rcti rect;
+ float color[4] = {1.0f};
if (line->from == NULL || line->to == NULL) return;
@@ -518,15 +524,15 @@ static void ui_draw_linkline(uiLinkLine *line, int highlightActiveLines, int das
rect.ymax = BLI_rctf_cent_y(&line->to->rect);
if (dashInactiveLines)
- UI_ThemeColor(TH_GRID);
+ UI_GetThemeColor4fv(TH_GRID, color);
else if (line->flag & UI_SELECT)
- glColor3ub(100, 100, 100);
+ rgba_float_args_set_ch(color, 100, 100, 100, 255);
else if (highlightActiveLines && ((line->from->flag & UI_ACTIVE) || (line->to->flag & UI_ACTIVE)))
- UI_ThemeColor(TH_TEXT_HI);
+ UI_GetThemeColor4fv(TH_TEXT_HI, color);
else
- glColor3ub(0, 0, 0);
+ rgba_float_args_set_ch(color, 0, 0, 0, 255);
- ui_draw_link_bezier(&rect);
+ ui_draw_link_bezier(&rect, color);
}
static void ui_draw_links(uiBlock *block)
@@ -1214,6 +1220,20 @@ static void ui_menu_block_set_keymaps(const bContext *C, uiBlock *block)
}
}
+void ui_but_override_flag(uiBut *but)
+{
+ bool is_overridden;
+
+ RNA_property_override_status(&but->rnapoin, but->rnaprop, but->rnaindex, NULL, &is_overridden, NULL, NULL);
+
+ if (is_overridden) {
+ but->flag |= UI_BUT_OVERRIDEN;
+ }
+ else {
+ but->flag &= ~UI_BUT_OVERRIDEN;
+ }
+}
+
void UI_block_update_from_old(const bContext *C, uiBlock *block)
{
uiBut *but_old;
@@ -1278,6 +1298,7 @@ void UI_block_end_ex(const bContext *C, uiBlock *block, const int xy[2], int r_x
}
ui_but_anim_flag(but, (scene) ? scene->r.cfra : 0.0f);
+ ui_but_override_flag(but);
}
@@ -1400,11 +1421,9 @@ void UI_block_draw(const bContext *C, uiBlock *block)
ui_but_to_pixelrect(&rect, ar, block, NULL);
/* pixel space for AA widgets */
- glMatrixMode(GL_PROJECTION);
- glPushMatrix();
- glMatrixMode(GL_MODELVIEW);
- glPushMatrix();
- glLoadIdentity();
+ gpuPushProjectionMatrix();
+ gpuPushMatrix();
+ gpuLoadIdentity();
wmOrtho2_region_pixelspace(ar);
@@ -1429,10 +1448,8 @@ void UI_block_draw(const bContext *C, uiBlock *block)
}
/* restore matrix */
- glMatrixMode(GL_PROJECTION);
- glPopMatrix();
- glMatrixMode(GL_MODELVIEW);
- glPopMatrix();
+ gpuPopProjectionMatrix();
+ gpuPopMatrix();
if (multisample_enabled)
glEnable(GL_MULTISAMPLE);
@@ -1440,6 +1457,40 @@ void UI_block_draw(const bContext *C, uiBlock *block)
ui_draw_links(block);
}
+static void ui_block_message_subscribe(ARegion *ar, struct wmMsgBus *mbus, uiBlock *block)
+{
+ uiBut *but_prev = NULL;
+ /* possibly we should keep the region this block is contained in? */
+ for (uiBut *but = block->buttons.first; but; but = but->next) {
+ if (but->rnapoin.type && but->rnaprop) {
+ /* quick check to avoid adding buttons representing a vector, multiple times. */
+ if ((but_prev &&
+ (but_prev->rnaprop == but->rnaprop) &&
+ (but_prev->rnapoin.type == but->rnapoin.type) &&
+ (but_prev->rnapoin.data == but->rnapoin.data) &&
+ (but_prev->rnapoin.id.data == but->rnapoin.id.data)) == false)
+ {
+ /* TODO: could make this into utility function. */
+ WM_msg_subscribe_rna(
+ mbus, &but->rnapoin, but->rnaprop,
+ &(const wmMsgSubscribeValue){
+ .owner = ar,
+ .user_data = ar,
+ .notify = ED_region_do_msg_notify_tag_redraw,
+ }, __func__);
+ but_prev = but;
+ }
+ }
+ }
+}
+
+void UI_region_message_subscribe(ARegion *ar, struct wmMsgBus *mbus)
+{
+ for (uiBlock *block = ar->uiblocks.first; block; block = block->next) {
+ ui_block_message_subscribe(ar, mbus, block);
+ }
+}
+
/* ************* EVENTS ************* */
/**
@@ -1486,6 +1537,7 @@ int ui_but_is_pushed_ex(uiBut *but, double *value)
break;
case UI_BTYPE_ROW:
case UI_BTYPE_LISTROW:
+ case UI_BTYPE_TAB:
UI_GET_BUT_VALUE_INIT(but, *value);
/* support for rna enum buts */
if (but->rnaprop && (RNA_property_flag(but->rnaprop) & PROP_ENUM_FLAG)) {
@@ -2425,7 +2477,7 @@ static void ui_but_string_free_internal(uiBut *but)
bool ui_but_string_set(bContext *C, uiBut *but, const char *str)
{
- if (but->rnaprop && ELEM(but->type, UI_BTYPE_TEXT, UI_BTYPE_SEARCH_MENU)) {
+ if (but->rnaprop && but->rnapoin.data && ELEM(but->type, UI_BTYPE_TEXT, UI_BTYPE_SEARCH_MENU)) {
if (RNA_property_editable(&but->rnapoin, but->rnaprop)) {
PropertyType type;
@@ -2472,8 +2524,15 @@ bool ui_but_string_set(bContext *C, uiBut *but, const char *str)
}
else if (but->type == UI_BTYPE_TEXT) {
/* string */
- if (ui_but_is_utf8(but)) BLI_strncpy_utf8(but->poin, str, but->hardmax);
- else BLI_strncpy(but->poin, str, but->hardmax);
+ if (!but->poin || (str[0] == '\0')) {
+ str = "";
+ }
+ else if (ui_but_is_utf8(but)) {
+ BLI_strncpy_utf8(but->poin, str, but->hardmax);
+ }
+ else {
+ BLI_strncpy(but->poin, str, but->hardmax);
+ }
return true;
}
@@ -2685,6 +2744,10 @@ static void ui_but_free(const bContext *C, uiBut *but)
MEM_freeN(but->hold_argN);
}
+ if (!but->editstr && but->free_search_arg) {
+ MEM_SAFE_FREE(but->search_arg);
+ }
+
if (but->active) {
/* XXX solve later, buttons should be free-able without context ideally,
* however they may have open tooltips or popup windows, which need to
@@ -2837,11 +2900,13 @@ uiBlock *UI_block_begin(const bContext *C, ARegion *region, const char *name, sh
block->aspect = 2.0f / fabsf(getsizex * block->winmat[0][0]);
}
else {
+ const bScreen *screen = WM_window_get_active_screen(window);
+
/* no subwindow created yet, for menus for example, so we
* use the main window instead, since buttons are created
* there anyway */
- wm_subwindow_matrix_get(window, window->screen->mainwin, block->winmat);
- wm_subwindow_size_get(window, window->screen->mainwin, &getsizex, &getsizey);
+ wm_subwindow_matrix_get(window, screen->mainwin, block->winmat);
+ wm_subwindow_size_get(window, screen->mainwin, &getsizex, &getsizey);
block->aspect = 2.0f / fabsf(getsizex * block->winmat[0][0]);
block->auto_open = true;
@@ -3558,7 +3623,7 @@ static uiBut *ui_def_but_rna(
}
const char *info;
- if (!RNA_property_editable_info(&but->rnapoin, prop, &info)) {
+ if (but->rnapoin.data && !RNA_property_editable_info(&but->rnapoin, prop, &info)) {
ui_def_but_rna__disable(but, info);
}
@@ -4457,7 +4522,7 @@ static void operator_enum_search_cb(const struct bContext *C, void *but, const c
for (item = item_array; item->identifier; item++) {
/* note: need to give the index rather than the identifier because the enum can be freed */
if (BLI_strcasestr(item->name, str)) {
- if (false == UI_search_item_add(items, item->name, SET_INT_IN_POINTER(item->value), 0))
+ if (false == UI_search_item_add(items, item->name, SET_INT_IN_POINTER(item->value), item->icon))
break;
}
}
@@ -4588,7 +4653,7 @@ void UI_but_string_info_get(bContext *C, uiBut *but, ...)
tmp = BLI_strdup(RNA_property_identifier(but->rnaprop));
}
else if (type == BUT_GET_RNASTRUCT_IDENTIFIER) {
- if (but->rnaprop)
+ if (but->rnaprop && but->rnapoin.data)
tmp = BLI_strdup(RNA_struct_identifier(but->rnapoin.type));
else if (but->optype)
tmp = BLI_strdup(but->optype->idname);
@@ -4683,7 +4748,10 @@ void UI_but_string_info_get(bContext *C, uiBut *but, ...)
if (ptr && prop) {
if (!item) {
int i;
-
+
+ /* so the context is passed to itemf functions */
+ WM_operator_properties_sanitize(ptr, false);
+
RNA_property_enum_items_gettexted(C, ptr, prop, &items, &totitems, &free_items);
for (i = 0, item = items; i < totitems; i++, item++) {
if (item->identifier[0] && item->value == value)
diff --git a/source/blender/editors/interface/interface_align.c b/source/blender/editors/interface/interface_align.c
index 500744c366d..9aeb685a907 100644
--- a/source/blender/editors/interface/interface_align.c
+++ b/source/blender/editors/interface/interface_align.c
@@ -110,9 +110,9 @@ enum {
bool ui_but_can_align(const uiBut *but)
{
- return (
- !ELEM(but->type, UI_BTYPE_LABEL, UI_BTYPE_CHECKBOX, UI_BTYPE_CHECKBOX_N, UI_BTYPE_SEPR, UI_BTYPE_SEPR_LINE) &&
- (BLI_rctf_size_x(&but->rect) > 0.0f) && (BLI_rctf_size_y(&but->rect) > 0.0f));
+ const bool btype_can_align = !ELEM(but->type, UI_BTYPE_LABEL, UI_BTYPE_CHECKBOX, UI_BTYPE_CHECKBOX_N,
+ UI_BTYPE_TAB, UI_BTYPE_SEPR, UI_BTYPE_SEPR_LINE);
+ return (btype_can_align && (BLI_rctf_size_x(&but->rect) > 0.0f) && (BLI_rctf_size_y(&but->rect) > 0.0f));
}
/**
diff --git a/source/blender/editors/interface/interface_anim.c b/source/blender/editors/interface/interface_anim.c
index a04360b3395..812f4ef0747 100644
--- a/source/blender/editors/interface/interface_anim.c
+++ b/source/blender/editors/interface/interface_anim.c
@@ -39,11 +39,12 @@
#include "BLI_utildefines.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
#include "BKE_global.h"
#include "BKE_nla.h"
+#include "DEG_depsgraph_build.h"
+
#include "ED_keyframing.h"
#include "UI_interface.h"
@@ -211,7 +212,7 @@ bool ui_but_anim_expression_create(uiBut *but, const char *str)
/* updates */
driver->flag |= DRIVER_FLAG_RECOMPILE;
- DAG_relations_tag_update(CTX_data_main(C));
+ DEG_relations_tag_update(CTX_data_main(C));
WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME, NULL);
ok = true;
}
diff --git a/source/blender/editors/interface/interface_draw.c b/source/blender/editors/interface/interface_draw.c
index 9a05c12e00a..3ecb72353bc 100644
--- a/source/blender/editors/interface/interface_draw.c
+++ b/source/blender/editors/interface/interface_draw.c
@@ -50,13 +50,14 @@
#include "IMB_imbuf_types.h"
#include "IMB_colormanagement.h"
-#include "BIF_gl.h"
#include "BIF_glutil.h"
#include "BLF_api.h"
-#include "GPU_draw.h"
-#include "GPU_basic_shader.h"
+#include "GPU_batch.h"
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+#include "GPU_matrix.h"
#include "UI_interface.h"
@@ -71,336 +72,462 @@ void UI_draw_roundbox_corner_set(int type)
* if this is undone, it's not that big a deal, only makes curves edges
* square for the */
roundboxtype = type;
-
}
+#if 0 /* unused */
int UI_draw_roundbox_corner_get(void)
{
return roundboxtype;
}
+#endif
+
+void UI_draw_roundbox_3ubAlpha(bool filled, float minx, float miny, float maxx, float maxy, float rad, const unsigned char col[3], unsigned char alpha)
+{
+ float colv[4];
+ colv[0] = ((float)col[0]) / 255;
+ colv[1] = ((float)col[1]) / 255;
+ colv[2] = ((float)col[2]) / 255;
+ colv[3] = ((float)alpha) / 255;
+ UI_draw_roundbox_4fv(filled, minx, miny, maxx, maxy, rad, colv);
+}
+
+void UI_draw_roundbox_3fvAlpha(bool filled, float minx, float miny, float maxx, float maxy, float rad, const float col[3], float alpha)
+{
+ float colv[4];
+ colv[0] = col[0];
+ colv[1] = col[1];
+ colv[2] = col[2];
+ colv[3] = alpha;
+ UI_draw_roundbox_4fv(filled, minx, miny, maxx, maxy, rad, colv);
+}
-void UI_draw_roundbox_gl_mode(int mode, float minx, float miny, float maxx, float maxy, float rad)
+void UI_draw_roundbox_4fv(bool filled, float minx, float miny, float maxx, float maxy, float rad, const float col[4])
{
float vec[7][2] = {{0.195, 0.02}, {0.383, 0.067}, {0.55, 0.169}, {0.707, 0.293},
{0.831, 0.45}, {0.924, 0.617}, {0.98, 0.805}};
int a;
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
/* mult */
for (a = 0; a < 7; a++) {
mul_v2_fl(vec[a], rad);
}
- glBegin(mode);
+ unsigned int vert_ct = 0;
+ vert_ct += (roundboxtype & UI_CNR_BOTTOM_RIGHT) ? 9 : 1;
+ vert_ct += (roundboxtype & UI_CNR_TOP_RIGHT) ? 9 : 1;
+ vert_ct += (roundboxtype & UI_CNR_TOP_LEFT) ? 9 : 1;
+ vert_ct += (roundboxtype & UI_CNR_BOTTOM_LEFT) ? 9 : 1;
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor4fv(col);
+ immBegin(filled ? GWN_PRIM_TRI_FAN : GWN_PRIM_LINE_LOOP, vert_ct);
/* start with corner right-bottom */
if (roundboxtype & UI_CNR_BOTTOM_RIGHT) {
- glVertex2f(maxx - rad, miny);
+ immVertex2f(pos, maxx - rad, miny);
for (a = 0; a < 7; a++) {
- glVertex2f(maxx - rad + vec[a][0], miny + vec[a][1]);
+ immVertex2f(pos, maxx - rad + vec[a][0], miny + vec[a][1]);
}
- glVertex2f(maxx, miny + rad);
+ immVertex2f(pos, maxx, miny + rad);
}
else {
- glVertex2f(maxx, miny);
+ immVertex2f(pos, maxx, miny);
}
/* corner right-top */
if (roundboxtype & UI_CNR_TOP_RIGHT) {
- glVertex2f(maxx, maxy - rad);
+ immVertex2f(pos, maxx, maxy - rad);
for (a = 0; a < 7; a++) {
- glVertex2f(maxx - vec[a][1], maxy - rad + vec[a][0]);
+ immVertex2f(pos, maxx - vec[a][1], maxy - rad + vec[a][0]);
}
- glVertex2f(maxx - rad, maxy);
+ immVertex2f(pos, maxx - rad, maxy);
}
else {
- glVertex2f(maxx, maxy);
+ immVertex2f(pos, maxx, maxy);
}
/* corner left-top */
if (roundboxtype & UI_CNR_TOP_LEFT) {
- glVertex2f(minx + rad, maxy);
+ immVertex2f(pos, minx + rad, maxy);
for (a = 0; a < 7; a++) {
- glVertex2f(minx + rad - vec[a][0], maxy - vec[a][1]);
+ immVertex2f(pos, minx + rad - vec[a][0], maxy - vec[a][1]);
}
- glVertex2f(minx, maxy - rad);
+ immVertex2f(pos, minx, maxy - rad);
}
else {
- glVertex2f(minx, maxy);
+ immVertex2f(pos, minx, maxy);
}
/* corner left-bottom */
if (roundboxtype & UI_CNR_BOTTOM_LEFT) {
- glVertex2f(minx, miny + rad);
+ immVertex2f(pos, minx, miny + rad);
for (a = 0; a < 7; a++) {
- glVertex2f(minx + vec[a][1], miny + rad - vec[a][0]);
+ immVertex2f(pos, minx + vec[a][1], miny + rad - vec[a][0]);
}
- glVertex2f(minx + rad, miny);
+ immVertex2f(pos, minx + rad, miny);
}
else {
- glVertex2f(minx, miny);
+ immVertex2f(pos, minx, miny);
}
- glEnd();
+ immEnd();
+ immUnbindProgram();
}
-static void round_box_shade_col(const float col1[3], float const col2[3], const float fac)
+static void round_box_shade_col(unsigned attrib, const float col1[3], float const col2[3], const float fac)
{
- float col[3] = {
+ float col[4] = {
fac * col1[0] + (1.0f - fac) * col2[0],
fac * col1[1] + (1.0f - fac) * col2[1],
- fac * col1[2] + (1.0f - fac) * col2[2]
+ fac * col1[2] + (1.0f - fac) * col2[2],
+ 1.0f
};
- glColor3fv(col);
+ immAttrib4fv(attrib, col);
}
/* linear horizontal shade within button or in outline */
/* view2d scrollers use it */
void UI_draw_roundbox_shade_x(
- int mode, float minx, float miny, float maxx, float maxy,
- float rad, float shadetop, float shadedown)
+ bool filled, float minx, float miny, float maxx, float maxy,
+ float rad, float shadetop, float shadedown, const float col[4])
{
float vec[7][2] = {{0.195, 0.02}, {0.383, 0.067}, {0.55, 0.169}, {0.707, 0.293},
{0.831, 0.45}, {0.924, 0.617}, {0.98, 0.805}};
const float div = maxy - miny;
const float idiv = 1.0f / div;
- float coltop[3], coldown[3], color[4];
+ float coltop[3], coldown[3];
+ int vert_count = 0;
int a;
-
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_F32, 4, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_SMOOTH_COLOR);
+
/* mult */
for (a = 0; a < 7; a++) {
mul_v2_fl(vec[a], rad);
}
- /* get current color, needs to be outside of glBegin/End */
- glGetFloatv(GL_CURRENT_COLOR, color);
/* 'shade' defines strength of shading */
- coltop[0] = min_ff(1.0f, color[0] + shadetop);
- coltop[1] = min_ff(1.0f, color[1] + shadetop);
- coltop[2] = min_ff(1.0f, color[2] + shadetop);
- coldown[0] = max_ff(0.0f, color[0] + shadedown);
- coldown[1] = max_ff(0.0f, color[1] + shadedown);
- coldown[2] = max_ff(0.0f, color[2] + shadedown);
+ coltop[0] = min_ff(1.0f, col[0] + shadetop);
+ coltop[1] = min_ff(1.0f, col[1] + shadetop);
+ coltop[2] = min_ff(1.0f, col[2] + shadetop);
+ coldown[0] = max_ff(0.0f, col[0] + shadedown);
+ coldown[1] = max_ff(0.0f, col[1] + shadedown);
+ coldown[2] = max_ff(0.0f, col[2] + shadedown);
- glBegin(mode);
+ vert_count += (roundboxtype & UI_CNR_BOTTOM_RIGHT) ? 9 : 1;
+ vert_count += (roundboxtype & UI_CNR_TOP_RIGHT) ? 9 : 1;
+ vert_count += (roundboxtype & UI_CNR_TOP_LEFT) ? 9 : 1;
+ vert_count += (roundboxtype & UI_CNR_BOTTOM_LEFT) ? 9 : 1;
+
+ immBegin(filled ? GWN_PRIM_TRI_FAN : GWN_PRIM_LINE_LOOP, vert_count);
/* start with corner right-bottom */
if (roundboxtype & UI_CNR_BOTTOM_RIGHT) {
- round_box_shade_col(coltop, coldown, 0.0);
- glVertex2f(maxx - rad, miny);
+ round_box_shade_col(color, coltop, coldown, 0.0);
+ immVertex2f(pos, maxx - rad, miny);
for (a = 0; a < 7; a++) {
- round_box_shade_col(coltop, coldown, vec[a][1] * idiv);
- glVertex2f(maxx - rad + vec[a][0], miny + vec[a][1]);
+ round_box_shade_col(color, coltop, coldown, vec[a][1] * idiv);
+ immVertex2f(pos, maxx - rad + vec[a][0], miny + vec[a][1]);
}
- round_box_shade_col(coltop, coldown, rad * idiv);
- glVertex2f(maxx, miny + rad);
+ round_box_shade_col(color, coltop, coldown, rad * idiv);
+ immVertex2f(pos, maxx, miny + rad);
}
else {
- round_box_shade_col(coltop, coldown, 0.0);
- glVertex2f(maxx, miny);
+ round_box_shade_col(color, coltop, coldown, 0.0);
+ immVertex2f(pos, maxx, miny);
}
/* corner right-top */
if (roundboxtype & UI_CNR_TOP_RIGHT) {
- round_box_shade_col(coltop, coldown, (div - rad) * idiv);
- glVertex2f(maxx, maxy - rad);
+ round_box_shade_col(color, coltop, coldown, (div - rad) * idiv);
+ immVertex2f(pos, maxx, maxy - rad);
for (a = 0; a < 7; a++) {
- round_box_shade_col(coltop, coldown, (div - rad + vec[a][1]) * idiv);
- glVertex2f(maxx - vec[a][1], maxy - rad + vec[a][0]);
+ round_box_shade_col(color, coltop, coldown, (div - rad + vec[a][1]) * idiv);
+ immVertex2f(pos, maxx - vec[a][1], maxy - rad + vec[a][0]);
}
- round_box_shade_col(coltop, coldown, 1.0);
- glVertex2f(maxx - rad, maxy);
+ round_box_shade_col(color, coltop, coldown, 1.0);
+ immVertex2f(pos, maxx - rad, maxy);
}
else {
- round_box_shade_col(coltop, coldown, 1.0);
- glVertex2f(maxx, maxy);
+ round_box_shade_col(color, coltop, coldown, 1.0);
+ immVertex2f(pos, maxx, maxy);
}
/* corner left-top */
if (roundboxtype & UI_CNR_TOP_LEFT) {
- round_box_shade_col(coltop, coldown, 1.0);
- glVertex2f(minx + rad, maxy);
+ round_box_shade_col(color, coltop, coldown, 1.0);
+ immVertex2f(pos, minx + rad, maxy);
for (a = 0; a < 7; a++) {
- round_box_shade_col(coltop, coldown, (div - vec[a][1]) * idiv);
- glVertex2f(minx + rad - vec[a][0], maxy - vec[a][1]);
+ round_box_shade_col(color, coltop, coldown, (div - vec[a][1]) * idiv);
+ immVertex2f(pos, minx + rad - vec[a][0], maxy - vec[a][1]);
}
- round_box_shade_col(coltop, coldown, (div - rad) * idiv);
- glVertex2f(minx, maxy - rad);
+ round_box_shade_col(color, coltop, coldown, (div - rad) * idiv);
+ immVertex2f(pos, minx, maxy - rad);
}
else {
- round_box_shade_col(coltop, coldown, 1.0);
- glVertex2f(minx, maxy);
+ round_box_shade_col(color, coltop, coldown, 1.0);
+ immVertex2f(pos, minx, maxy);
}
/* corner left-bottom */
if (roundboxtype & UI_CNR_BOTTOM_LEFT) {
- round_box_shade_col(coltop, coldown, rad * idiv);
- glVertex2f(minx, miny + rad);
+ round_box_shade_col(color, coltop, coldown, rad * idiv);
+ immVertex2f(pos, minx, miny + rad);
for (a = 0; a < 7; a++) {
- round_box_shade_col(coltop, coldown, (rad - vec[a][1]) * idiv);
- glVertex2f(minx + vec[a][1], miny + rad - vec[a][0]);
+ round_box_shade_col(color, coltop, coldown, (rad - vec[a][1]) * idiv);
+ immVertex2f(pos, minx + vec[a][1], miny + rad - vec[a][0]);
}
- round_box_shade_col(coltop, coldown, 0.0);
- glVertex2f(minx + rad, miny);
+ round_box_shade_col(color, coltop, coldown, 0.0);
+ immVertex2f(pos, minx + rad, miny);
}
else {
- round_box_shade_col(coltop, coldown, 0.0);
- glVertex2f(minx, miny);
+ round_box_shade_col(color, coltop, coldown, 0.0);
+ immVertex2f(pos, minx, miny);
}
-
- glEnd();
+
+ immEnd();
+ immUnbindProgram();
}
+#if 0 /* unused */
/* linear vertical shade within button or in outline */
/* view2d scrollers use it */
void UI_draw_roundbox_shade_y(
- int mode, float minx, float miny, float maxx, float maxy,
- float rad, float shadeLeft, float shadeRight)
+ bool filled, float minx, float miny, float maxx, float maxy,
+ float rad, float shadeleft, float shaderight, const float col[4])
{
float vec[7][2] = {{0.195, 0.02}, {0.383, 0.067}, {0.55, 0.169}, {0.707, 0.293},
{0.831, 0.45}, {0.924, 0.617}, {0.98, 0.805}};
const float div = maxx - minx;
const float idiv = 1.0f / div;
- float colLeft[3], colRight[3], color[4];
+ float colLeft[3], colRight[3];
+ int vert_count = 0;
int a;
/* mult */
for (a = 0; a < 7; a++) {
mul_v2_fl(vec[a], rad);
}
- /* get current color, needs to be outside of glBegin/End */
- glGetFloatv(GL_CURRENT_COLOR, color);
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_F32, 4, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_SMOOTH_COLOR);
/* 'shade' defines strength of shading */
- colLeft[0] = min_ff(1.0f, color[0] + shadeLeft);
- colLeft[1] = min_ff(1.0f, color[1] + shadeLeft);
- colLeft[2] = min_ff(1.0f, color[2] + shadeLeft);
- colRight[0] = max_ff(0.0f, color[0] + shadeRight);
- colRight[1] = max_ff(0.0f, color[1] + shadeRight);
- colRight[2] = max_ff(0.0f, color[2] + shadeRight);
+ colLeft[0] = min_ff(1.0f, col[0] + shadeleft);
+ colLeft[1] = min_ff(1.0f, col[1] + shadeleft);
+ colLeft[2] = min_ff(1.0f, col[2] + shadeleft);
+ colRight[0] = max_ff(0.0f, col[0] + shaderight);
+ colRight[1] = max_ff(0.0f, col[1] + shaderight);
+ colRight[2] = max_ff(0.0f, col[2] + shaderight);
+
- glBegin(mode);
+ vert_count += (roundboxtype & UI_CNR_BOTTOM_RIGHT) ? 9 : 1;
+ vert_count += (roundboxtype & UI_CNR_TOP_RIGHT) ? 9 : 1;
+ vert_count += (roundboxtype & UI_CNR_TOP_LEFT) ? 9 : 1;
+ vert_count += (roundboxtype & UI_CNR_BOTTOM_LEFT) ? 9 : 1;
+
+ immBegin(filled ? GWN_PRIM_TRI_FAN : GWN_PRIM_LINE_LOOP, vert_count);
/* start with corner right-bottom */
if (roundboxtype & UI_CNR_BOTTOM_RIGHT) {
- round_box_shade_col(colLeft, colRight, 0.0);
- glVertex2f(maxx - rad, miny);
+ round_box_shade_col(color, colLeft, colRight, 0.0);
+ immVertex2f(pos, maxx - rad, miny);
for (a = 0; a < 7; a++) {
- round_box_shade_col(colLeft, colRight, vec[a][0] * idiv);
- glVertex2f(maxx - rad + vec[a][0], miny + vec[a][1]);
+ round_box_shade_col(color, colLeft, colRight, vec[a][0] * idiv);
+ immVertex2f(pos, maxx - rad + vec[a][0], miny + vec[a][1]);
}
- round_box_shade_col(colLeft, colRight, rad * idiv);
- glVertex2f(maxx, miny + rad);
+ round_box_shade_col(color, colLeft, colRight, rad * idiv);
+ immVertex2f(pos, maxx, miny + rad);
}
else {
- round_box_shade_col(colLeft, colRight, 0.0);
- glVertex2f(maxx, miny);
+ round_box_shade_col(color, colLeft, colRight, 0.0);
+ immVertex2f(pos, maxx, miny);
}
/* corner right-top */
if (roundboxtype & UI_CNR_TOP_RIGHT) {
- round_box_shade_col(colLeft, colRight, 0.0);
- glVertex2f(maxx, maxy - rad);
+ round_box_shade_col(color, colLeft, colRight, 0.0);
+ immVertex2f(pos, maxx, maxy - rad);
for (a = 0; a < 7; a++) {
- round_box_shade_col(colLeft, colRight, (div - rad - vec[a][0]) * idiv);
- glVertex2f(maxx - vec[a][1], maxy - rad + vec[a][0]);
+ round_box_shade_col(color, colLeft, colRight, (div - rad - vec[a][0]) * idiv);
+ immVertex2f(pos, maxx - vec[a][1], maxy - rad + vec[a][0]);
}
- round_box_shade_col(colLeft, colRight, (div - rad) * idiv);
- glVertex2f(maxx - rad, maxy);
+ round_box_shade_col(color, colLeft, colRight, (div - rad) * idiv);
+ immVertex2f(pos, maxx - rad, maxy);
}
else {
- round_box_shade_col(colLeft, colRight, 0.0);
- glVertex2f(maxx, maxy);
+ round_box_shade_col(color, colLeft, colRight, 0.0);
+ immVertex2f(pos, maxx, maxy);
}
/* corner left-top */
if (roundboxtype & UI_CNR_TOP_LEFT) {
- round_box_shade_col(colLeft, colRight, (div - rad) * idiv);
- glVertex2f(minx + rad, maxy);
+ round_box_shade_col(color, colLeft, colRight, (div - rad) * idiv);
+ immVertex2f(pos, minx + rad, maxy);
for (a = 0; a < 7; a++) {
- round_box_shade_col(colLeft, colRight, (div - rad + vec[a][0]) * idiv);
- glVertex2f(minx + rad - vec[a][0], maxy - vec[a][1]);
+ round_box_shade_col(color, colLeft, colRight, (div - rad + vec[a][0]) * idiv);
+ immVertex2f(pos, minx + rad - vec[a][0], maxy - vec[a][1]);
}
- round_box_shade_col(colLeft, colRight, 1.0);
- glVertex2f(minx, maxy - rad);
+ round_box_shade_col(color, colLeft, colRight, 1.0);
+ immVertex2f(pos, minx, maxy - rad);
}
else {
- round_box_shade_col(colLeft, colRight, 1.0);
- glVertex2f(minx, maxy);
+ round_box_shade_col(color, colLeft, colRight, 1.0);
+ immVertex2f(pos, minx, maxy);
}
/* corner left-bottom */
if (roundboxtype & UI_CNR_BOTTOM_LEFT) {
- round_box_shade_col(colLeft, colRight, 1.0);
- glVertex2f(minx, miny + rad);
+ round_box_shade_col(color, colLeft, colRight, 1.0);
+ immVertex2f(pos, minx, miny + rad);
for (a = 0; a < 7; a++) {
- round_box_shade_col(colLeft, colRight, (vec[a][0]) * idiv);
- glVertex2f(minx + vec[a][1], miny + rad - vec[a][0]);
+ round_box_shade_col(color, colLeft, colRight, (vec[a][0]) * idiv);
+ immVertex2f(pos, minx + vec[a][1], miny + rad - vec[a][0]);
}
- round_box_shade_col(colLeft, colRight, 1.0);
- glVertex2f(minx + rad, miny);
+ round_box_shade_col(color, colLeft, colRight, 1.0);
+ immVertex2f(pos, minx + rad, miny);
}
else {
- round_box_shade_col(colLeft, colRight, 1.0);
- glVertex2f(minx, miny);
+ round_box_shade_col(color, colLeft, colRight, 1.0);
+ immVertex2f(pos, minx, miny);
}
-
- glEnd();
+
+ immEnd();
+ immUnbindProgram();
}
+#endif /* unused */
-/* plain antialiased unfilled rectangle */
-void UI_draw_roundbox_unfilled(float minx, float miny, float maxx, float maxy, float rad)
+void UI_draw_text_underline(int pos_x, int pos_y, int len, int height, const float color[4])
{
- float color[4];
-
- if (roundboxtype & UI_RB_ALPHA) {
- glGetFloatv(GL_CURRENT_COLOR, color);
- color[3] = 0.5;
- glColor4fv(color);
- glEnable(GL_BLEND);
- }
-
- /* set antialias line */
- glEnable(GL_LINE_SMOOTH);
- glEnable(GL_BLEND);
+ int ofs_y = 4 * U.pixelsize;
- UI_draw_roundbox_gl_mode(GL_LINE_LOOP, minx, miny, maxx, maxy, rad);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
- glDisable(GL_BLEND);
- glDisable(GL_LINE_SMOOTH);
-}
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor4fv(color);
-/* (old, used in outliner) plain antialiased filled box */
-void UI_draw_roundbox(float minx, float miny, float maxx, float maxy, float rad)
-{
- ui_draw_anti_roundbox(GL_POLYGON, minx, miny, maxx, maxy, rad, roundboxtype & UI_RB_ALPHA);
+ immRecti(pos, pos_x, pos_y - ofs_y, pos_x + len, pos_y - ofs_y + (height * U.pixelsize));
+ immUnbindProgram();
}
-void UI_draw_text_underline(int pos_x, int pos_y, int len, int height)
+/* ************** SPECIAL BUTTON DRAWING FUNCTIONS ************* */
+
+/* based on UI_draw_roundbox_gl_mode, check on making a version which allows us to skip some sides */
+void ui_draw_but_TAB_outline(const rcti *rect, float rad, unsigned char highlight[3], unsigned char highlight_fade[3])
{
- int ofs_y = 4 * U.pixelsize;
- glRecti(pos_x, pos_y - ofs_y, pos_x + len, pos_y - ofs_y + (height * U.pixelsize));
-}
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int col = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
+ /* add a 1px offset, looks nicer */
+ const int minx = rect->xmin + U.pixelsize, maxx = rect->xmax - U.pixelsize;
+ const int miny = rect->ymin + U.pixelsize, maxy = rect->ymax - U.pixelsize;
+ int a;
+ float vec[4][2] = {
+ {0.195, 0.02},
+ {0.55, 0.169},
+ {0.831, 0.45},
+ {0.98, 0.805},
+ };
-/* ************** SPECIAL BUTTON DRAWING FUNCTIONS ************* */
+
+ /* mult */
+ for (a = 0; a < 4; a++) {
+ mul_v2_fl(vec[a], rad);
+ }
+
+ immBindBuiltinProgram(GPU_SHADER_2D_SMOOTH_COLOR);
+ immBeginAtMost(GWN_PRIM_LINE_STRIP, 25);
+
+ immAttrib3ubv(col, highlight);
+
+ /* start with corner left-top */
+ if (roundboxtype & UI_CNR_TOP_LEFT) {
+ immVertex2f(pos, minx, maxy - rad);
+ for (a = 0; a < 4; a++) {
+ immVertex2f(pos, minx + vec[a][1], maxy - rad + vec[a][0]);
+ }
+ immVertex2f(pos, minx + rad, maxy);
+ }
+ else {
+ immVertex2f(pos, minx, maxy);
+ }
+
+ /* corner right-top */
+ if (roundboxtype & UI_CNR_TOP_RIGHT) {
+ immVertex2f(pos, maxx - rad, maxy);
+ for (a = 0; a < 4; a++) {
+ immVertex2f(pos, maxx - rad + vec[a][0], maxy - vec[a][1]);
+ }
+ immVertex2f(pos, maxx, maxy - rad);
+ }
+ else {
+ immVertex2f(pos, maxx, maxy);
+ }
+
+ immAttrib3ubv(col, highlight_fade);
+
+ /* corner right-bottom */
+ if (roundboxtype & UI_CNR_BOTTOM_RIGHT) {
+ immVertex2f(pos, maxx, miny + rad);
+ for (a = 0; a < 4; a++) {
+ immVertex2f(pos, maxx - vec[a][1], miny + rad - vec[a][0]);
+ }
+ immVertex2f(pos, maxx - rad, miny);
+ }
+ else {
+ immVertex2f(pos, maxx, miny);
+ }
+
+ /* corner left-bottom */
+ if (roundboxtype & UI_CNR_BOTTOM_LEFT) {
+ immVertex2f(pos, minx + rad, miny);
+ for (a = 0; a < 4; a++) {
+ immVertex2f(pos, minx + rad - vec[a][0], miny + vec[a][1]);
+ }
+ immVertex2f(pos, minx, miny + rad);
+ }
+ else {
+ immVertex2f(pos, minx, miny);
+ }
+
+ immAttrib3ubv(col, highlight);
+
+ /* back to corner left-top */
+ immVertex2f(pos, minx, roundboxtype & UI_CNR_TOP_LEFT ? maxy - rad : maxy);
+
+ immEnd();
+ immUnbindProgram();
+}
void ui_draw_but_IMAGE(ARegion *UNUSED(ar), uiBut *but, uiWidgetColors *UNUSED(wcol), const rcti *rect)
{
@@ -411,15 +538,15 @@ void ui_draw_but_IMAGE(ARegion *UNUSED(ar), uiBut *but, uiWidgetColors *UNUSED(w
ImBuf *ibuf = (ImBuf *)but->poin;
if (!ibuf) return;
+
+ float facx = 1.0f;
+ float facy = 1.0f;
int w = BLI_rcti_size_x(rect);
int h = BLI_rcti_size_y(rect);
/* scissor doesn't seem to be doing the right thing...? */
#if 0
- //glColor4f(1.0, 0.f, 0.f, 1.f);
- //fdrawbox(rect->xmin, rect->ymin, rect->xmax, rect->ymax)
-
/* prevent drawing outside widget area */
GLint scissor[4];
glGetIntegerv(GL_SCISSOR_BOX, scissor);
@@ -427,16 +554,15 @@ void ui_draw_but_IMAGE(ARegion *UNUSED(ar), uiBut *but, uiWidgetColors *UNUSED(w
#endif
glEnable(GL_BLEND);
- glColor4f(0.0, 0.0, 0.0, 0.0);
if (w != ibuf->x || h != ibuf->y) {
- float facx = (float)w / (float)ibuf->x;
- float facy = (float)h / (float)ibuf->y;
- glPixelZoom(facx, facy);
+ facx = (float)w / (float)ibuf->x;
+ facy = (float)h / (float)ibuf->y;
}
- glaDrawPixelsAuto((float)rect->xmin, (float)rect->ymin, ibuf->x, ibuf->y, GL_RGBA, GL_UNSIGNED_BYTE, GL_NEAREST, ibuf->rect);
-
- glPixelZoom(1.0f, 1.0f);
+
+ IMMDrawPixelsTexState state = immDrawPixelsTexSetup(GPU_SHADER_2D_IMAGE_COLOR);
+ immDrawPixelsTex(&state, (float)rect->xmin, (float)rect->ymin, ibuf->x, ibuf->y, GL_RGBA, GL_UNSIGNED_BYTE, GL_NEAREST, ibuf->rect,
+ facx, facy, NULL);
glDisable(GL_BLEND);
@@ -451,43 +577,34 @@ void ui_draw_but_IMAGE(ARegion *UNUSED(ar), uiBut *but, uiWidgetColors *UNUSED(w
/**
* Draw title and text safe areas.
*
- * The first 4 parameters are the offsets for the view, not the zones.
+ * \Note This functionn is to be used with the 2D dashed shader enabled.
+ *
+ * \param pos is a PRIM_FLOAT, 2, GWN_FETCH_FLOAT vertex attrib
+ * \param line_origin is a PRIM_FLOAT, 2, GWN_FETCH_FLOAT vertex attrib
+ *
+ * The next 4 parameters are the offsets for the view, not the zones.
*/
void UI_draw_safe_areas(
- float x1, float x2, float y1, float y2,
+ uint pos, float x1, float x2, float y1, float y2,
const float title_aspect[2], const float action_aspect[2])
{
const float size_x_half = (x2 - x1) * 0.5f;
const float size_y_half = (y2 - y1) * 0.5f;
const float *safe_areas[] = {title_aspect, action_aspect};
- int safe_len = ARRAY_SIZE(safe_areas);
- bool is_first = true;
+ const int safe_len = ARRAY_SIZE(safe_areas);
for (int i = 0; i < safe_len; i++) {
if (safe_areas[i][0] || safe_areas[i][1]) {
- float margin_x, margin_y;
- float minx, miny, maxx, maxy;
+ float margin_x = safe_areas[i][0] * size_x_half;
+ float margin_y = safe_areas[i][1] * size_y_half;
- if (is_first) {
- UI_ThemeColorBlendShade(TH_VIEW_OVERLAY, TH_BACK, 0.25f, 0);
- is_first = false;
- }
+ float minx = x1 + margin_x;
+ float miny = y1 + margin_y;
+ float maxx = x2 - margin_x;
+ float maxy = y2 - margin_y;
- margin_x = safe_areas[i][0] * size_x_half;
- margin_y = safe_areas[i][1] * size_y_half;
-
- minx = x1 + margin_x;
- miny = y1 + margin_y;
- maxx = x2 - margin_x;
- maxy = y2 - margin_y;
-
- glBegin(GL_LINE_LOOP);
- glVertex2f(maxx, miny);
- glVertex2f(maxx, maxy);
- glVertex2f(minx, maxy);
- glVertex2f(minx, miny);
- glEnd();
+ imm_draw_box_wire_2d(pos, minx, miny, maxx, maxy);
}
}
}
@@ -501,52 +618,60 @@ static void draw_scope_end(const rctf *rect, GLint *scissor)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
/* outline */
- glColor4f(0.f, 0.f, 0.f, 0.5f);
UI_draw_roundbox_corner_set(UI_CNR_ALL);
- UI_draw_roundbox_gl_mode(GL_LINE_LOOP, rect->xmin - 1, rect->ymin, rect->xmax + 1, rect->ymax + 1, 3.0f);
+ float color[4] = {0.0f, 0.0f, 0.0f, 0.5f};
+ UI_draw_roundbox_4fv(false, rect->xmin - 1, rect->ymin, rect->xmax + 1, rect->ymax + 1, 3.0f, color);
}
static void histogram_draw_one(
float r, float g, float b, float alpha,
- float x, float y, float w, float h, const float *data, int res, const bool is_line)
+ float x, float y, float w, float h, const float *data, int res, const bool is_line,
+ unsigned int pos_attrib)
{
+ float color[4] = {r, g, b, alpha};
+
+ /* that can happen */
+ if (res == 0)
+ return;
+
glEnable(GL_LINE_SMOOTH);
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
- glColor4f(r, g, b, alpha);
+
+ immUniformColor4fv(color);
if (is_line) {
/* curve outline */
glLineWidth(1.5);
- glBegin(GL_LINE_STRIP);
+ immBegin(GWN_PRIM_LINE_STRIP, res);
for (int i = 0; i < res; i++) {
float x2 = x + i * (w / (float)res);
- glVertex2f(x2, y + (data[i] * h));
+ immVertex2f(pos_attrib, x2, y + (data[i] * h));
}
- glEnd();
+ immEnd();
}
else {
/* under the curve */
- glBegin(GL_TRIANGLE_STRIP);
- glVertex2f(x, y);
- glVertex2f(x, y + (data[0] * h));
+ immBegin(GWN_PRIM_TRI_STRIP, res * 2);
+ immVertex2f(pos_attrib, x, y);
+ immVertex2f(pos_attrib, x, y + (data[0] * h));
for (int i = 1; i < res; i++) {
float x2 = x + i * (w / (float)res);
- glVertex2f(x2, y + (data[i] * h));
- glVertex2f(x2, y);
+ immVertex2f(pos_attrib, x2, y + (data[i] * h));
+ immVertex2f(pos_attrib, x2, y);
}
- glEnd();
+ immEnd();
/* curve outline */
- glColor4f(0.f, 0.f, 0.f, 0.25f);
+ immUniformColor4f(0.0f, 0.0f, 0.0f, 0.25f);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glBegin(GL_LINE_STRIP);
+ immBegin(GWN_PRIM_LINE_STRIP, res);
for (int i = 0; i < res; i++) {
float x2 = x + i * (w / (float)res);
- glVertex2f(x2, y + (data[i] * h));
+ immVertex2f(pos_attrib, x2, y + (data[i] * h));
}
- glEnd();
+ immEnd();
}
glDisable(GL_LINE_SMOOTH);
@@ -559,7 +684,7 @@ void ui_draw_but_HISTOGRAM(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wcol)
Histogram *hist = (Histogram *)but->poin;
int res = hist->x_resolution;
const bool is_line = (hist->flag & HISTO_FLAG_LINE) != 0;
-
+
rctf rect = {
.xmin = (float)recti->xmin + 1,
.xmax = (float)recti->xmax - 1,
@@ -573,9 +698,10 @@ void ui_draw_but_HISTOGRAM(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wcol)
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- UI_ThemeColor4(TH_PREVIEW_BACK);
+ float color[4];
+ UI_GetThemeColor4fv(TH_PREVIEW_BACK, color);
UI_draw_roundbox_corner_set(UI_CNR_ALL);
- UI_draw_roundbox_gl_mode(GL_POLYGON, rect.xmin - 1, rect.ymin - 1, rect.xmax + 1, rect.ymax + 1, 3.0f);
+ UI_draw_roundbox_4fv(true, rect.xmin - 1, rect.ymin - 1, rect.xmax + 1, rect.ymax + 1, 3.0f, color);
/* need scissor test, histogram can draw outside of boundary */
GLint scissor[4];
@@ -585,34 +711,48 @@ void ui_draw_but_HISTOGRAM(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wcol)
(rect.xmax + 1) - (rect.xmin - 1),
(rect.ymax + 1) - (rect.ymin - 1));
- glColor4f(1.f, 1.f, 1.f, 0.08f);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ immUniformColor4f(1.0f, 1.0f, 1.0f, 0.08f);
/* draw grid lines here */
for (int i = 1; i <= HISTOGRAM_TOT_GRID_LINES; i++) {
const float fac = (float)i / (float)HISTOGRAM_TOT_GRID_LINES;
/* so we can tell the 1.0 color point */
if (i == HISTOGRAM_TOT_GRID_LINES) {
- glColor4f(1.0f, 1.0f, 1.0f, 0.5f);
+ immUniformColor4f(1.0f, 1.0f, 1.0f, 0.5f);
}
- fdrawline(rect.xmin, rect.ymin + fac * h, rect.xmax, rect.ymin + fac * h);
- fdrawline(rect.xmin + fac * w, rect.ymin, rect.xmin + fac * w, rect.ymax);
+ immBegin(GWN_PRIM_LINES, 4);
+
+ immVertex2f(pos, rect.xmin, rect.ymin + fac * h);
+ immVertex2f(pos, rect.xmax, rect.ymin + fac * h);
+
+ immVertex2f(pos, rect.xmin + fac * w, rect.ymin);
+ immVertex2f(pos, rect.xmin + fac * w, rect.ymax);
+
+ immEnd();
}
-
+
if (hist->mode == HISTO_MODE_LUMA) {
- histogram_draw_one(1.0, 1.0, 1.0, 0.75, rect.xmin, rect.ymin, w, h, hist->data_luma, res, is_line);
+ histogram_draw_one(1.0, 1.0, 1.0, 0.75, rect.xmin, rect.ymin, w, h, hist->data_luma, res, is_line, pos);
}
else if (hist->mode == HISTO_MODE_ALPHA) {
- histogram_draw_one(1.0, 1.0, 1.0, 0.75, rect.xmin, rect.ymin, w, h, hist->data_a, res, is_line);
+ histogram_draw_one(1.0, 1.0, 1.0, 0.75, rect.xmin, rect.ymin, w, h, hist->data_a, res, is_line, pos);
}
else {
if (hist->mode == HISTO_MODE_RGB || hist->mode == HISTO_MODE_R)
- histogram_draw_one(1.0, 0.0, 0.0, 0.75, rect.xmin, rect.ymin, w, h, hist->data_r, res, is_line);
+ histogram_draw_one(1.0, 0.0, 0.0, 0.75, rect.xmin, rect.ymin, w, h, hist->data_r, res, is_line, pos);
if (hist->mode == HISTO_MODE_RGB || hist->mode == HISTO_MODE_G)
- histogram_draw_one(0.0, 1.0, 0.0, 0.75, rect.xmin, rect.ymin, w, h, hist->data_g, res, is_line);
+ histogram_draw_one(0.0, 1.0, 0.0, 0.75, rect.xmin, rect.ymin, w, h, hist->data_g, res, is_line, pos);
if (hist->mode == HISTO_MODE_RGB || hist->mode == HISTO_MODE_B)
- histogram_draw_one(0.0, 0.0, 1.0, 0.75, rect.xmin, rect.ymin, w, h, hist->data_b, res, is_line);
+ histogram_draw_one(0.0, 0.0, 1.0, 0.75, rect.xmin, rect.ymin, w, h, hist->data_b, res, is_line, pos);
}
+
+ immUnbindProgram();
/* outline */
draw_scope_end(&rect, scissor);
@@ -620,6 +760,25 @@ void ui_draw_but_HISTOGRAM(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wcol)
#undef HISTOGRAM_TOT_GRID_LINES
+static void waveform_draw_one(float *waveform, int nbr, const float col[3])
+{
+ Gwn_VertFormat format = {0};
+ unsigned int pos_id = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, nbr);
+
+ GWN_vertbuf_attr_fill(vbo, pos_id, waveform);
+
+ /* TODO store the Gwn_Batch inside the scope */
+ Gwn_Batch *batch = GWN_batch_create_ex(GWN_PRIM_POINTS, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ GWN_batch_program_set_builtin(batch, GPU_SHADER_2D_UNIFORM_COLOR);
+ GWN_batch_uniform_4f(batch, "color", col[0], col[1], col[2], 1.0f);
+ GWN_batch_draw(batch);
+
+ GWN_batch_discard(batch);
+}
+
void ui_draw_but_WAVEFORM(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wcol), const rcti *recti)
{
Scopes *scopes = (Scopes *)but->poin;
@@ -642,7 +801,7 @@ void ui_draw_but_WAVEFORM(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wcol),
scopes->wavefrm_yfac = 0.98f;
float w = BLI_rctf_size_x(&rect) - 7;
float h = BLI_rctf_size_y(&rect) * scopes->wavefrm_yfac;
- float yofs = rect.ymin + (BLI_rctf_size_y(&rect) - h) / 2.0f;
+ float yofs = rect.ymin + (BLI_rctf_size_y(&rect) - h) * 0.5f;
float w3 = w / 3.0f;
/* log scale for alpha */
@@ -660,9 +819,10 @@ void ui_draw_but_WAVEFORM(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wcol),
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- UI_ThemeColor4(TH_PREVIEW_BACK);
+ float color[4];
+ UI_GetThemeColor4fv(TH_PREVIEW_BACK, color);
UI_draw_roundbox_corner_set(UI_CNR_ALL);
- UI_draw_roundbox_gl_mode(GL_POLYGON, rect.xmin - 1, rect.ymin - 1, rect.xmax + 1, rect.ymax + 1, 3.0f);
+ UI_draw_roundbox_4fv(true, rect.xmin - 1, rect.ymin - 1, rect.xmax + 1, rect.ymax + 1, 3.0f, color);
/* need scissor test, waveform can draw outside of boundary */
glGetIntegerv(GL_VIEWPORT, scissor);
@@ -671,94 +831,119 @@ void ui_draw_but_WAVEFORM(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wcol),
(rect.xmax + 1) - (rect.xmin - 1),
(rect.ymax + 1) - (rect.ymin - 1));
- glColor4f(1.f, 1.f, 1.f, 0.08f);
- /* draw grid lines here */
+ /* draw scale numbers first before binding any shader */
for (int i = 0; i < 6; i++) {
char str[4];
BLI_snprintf(str, sizeof(str), "%-3d", i * 20);
str[3] = '\0';
- fdrawline(rect.xmin + 22, yofs + (i / 5.f) * h, rect.xmax + 1, yofs + (i / 5.f) * h);
- BLF_draw_default(rect.xmin + 1, yofs - 5 + (i / 5.f) * h, 0, str, sizeof(str) - 1);
- /* in the loop because blf_draw reset it */
- glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ BLF_color4f(BLF_default(), 1.0f, 1.0f, 1.0f, 0.08f);
+ BLF_draw_default(rect.xmin + 1, yofs - 5 + (i * 0.2f) * h, 0, str, sizeof(str) - 1);
+ }
+
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ immUniformColor4f(1.0f, 1.0f, 1.0f, 0.08f);
+
+ /* draw grid lines here */
+ immBegin(GWN_PRIM_LINES, 12);
+
+ for (int i = 0; i < 6; i++) {
+ immVertex2f(pos, rect.xmin + 22, yofs + (i * 0.2f) * h);
+ immVertex2f(pos, rect.xmax + 1, yofs + (i * 0.2f) * h);
}
+
+ immEnd();
+
/* 3 vertical separation */
if (scopes->wavefrm_mode != SCOPES_WAVEFRM_LUMA) {
+ immBegin(GWN_PRIM_LINES, 4);
+
for (int i = 1; i < 3; i++) {
- fdrawline(rect.xmin + i * w3, rect.ymin, rect.xmin + i * w3, rect.ymax);
+ immVertex2f(pos, rect.xmin + i * w3, rect.ymin);
+ immVertex2f(pos, rect.xmin + i * w3, rect.ymax);
}
+
+ immEnd();
}
/* separate min max zone on the right */
- fdrawline(rect.xmin + w, rect.ymin, rect.xmin + w, rect.ymax);
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2f(pos, rect.xmin + w, rect.ymin);
+ immVertex2f(pos, rect.xmin + w, rect.ymax);
+ immEnd();
+
/* 16-235-240 level in case of ITU-R BT601/709 */
- glColor4f(1.f, 0.4f, 0.f, 0.2f);
+ immUniformColor4f(1.0f, 0.4f, 0.0f, 0.2f);
if (ELEM(scopes->wavefrm_mode, SCOPES_WAVEFRM_YCC_601, SCOPES_WAVEFRM_YCC_709)) {
- fdrawline(rect.xmin + 22, yofs + h * 16.0f / 255.0f, rect.xmax + 1, yofs + h * 16.0f / 255.0f);
- fdrawline(rect.xmin + 22, yofs + h * 235.0f / 255.0f, rect.xmin + w3, yofs + h * 235.0f / 255.0f);
- fdrawline(rect.xmin + 3 * w3, yofs + h * 235.0f / 255.0f, rect.xmax + 1, yofs + h * 235.0f / 255.0f);
- fdrawline(rect.xmin + w3, yofs + h * 240.0f / 255.0f, rect.xmax + 1, yofs + h * 240.0f / 255.0f);
+ immBegin(GWN_PRIM_LINES, 8);
+
+ immVertex2f(pos, rect.xmin + 22, yofs + h * 16.0f / 255.0f);
+ immVertex2f(pos, rect.xmax + 1, yofs + h * 16.0f / 255.0f);
+
+ immVertex2f(pos, rect.xmin + 22, yofs + h * 235.0f / 255.0f);
+ immVertex2f(pos, rect.xmin + w3, yofs + h * 235.0f / 255.0f);
+
+ immVertex2f(pos, rect.xmin + 3 * w3, yofs + h * 235.0f / 255.0f);
+ immVertex2f(pos, rect.xmax + 1, yofs + h * 235.0f / 255.0f);
+
+ immVertex2f(pos, rect.xmin + w3, yofs + h * 240.0f / 255.0f);
+ immVertex2f(pos, rect.xmax + 1, yofs + h * 240.0f / 255.0f);
+
+ immEnd();
}
/* 7.5 IRE black point level for NTSC */
- if (scopes->wavefrm_mode == SCOPES_WAVEFRM_LUMA)
- fdrawline(rect.xmin, yofs + h * 0.075f, rect.xmax + 1, yofs + h * 0.075f);
+ if (scopes->wavefrm_mode == SCOPES_WAVEFRM_LUMA) {
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2f(pos, rect.xmin, yofs + h * 0.075f);
+ immVertex2f(pos, rect.xmax + 1, yofs + h * 0.075f);
+ immEnd();
+ }
if (scopes->ok && scopes->waveform_1 != NULL) {
-
- /* LUMA (1 channel) */
glBlendFunc(GL_ONE, GL_ONE);
- glColor3f(alpha, alpha, alpha);
glPointSize(1.0);
+ /* LUMA (1 channel) */
if (scopes->wavefrm_mode == SCOPES_WAVEFRM_LUMA) {
+ float col[3] = {alpha, alpha, alpha};
- glBlendFunc(GL_ONE, GL_ONE);
-
- glPushMatrix();
- glEnableClientState(GL_VERTEX_ARRAY);
-
- glTranslatef(rect.xmin, yofs, 0.f);
- glScalef(w, h, 0.f);
- glVertexPointer(2, GL_FLOAT, 0, scopes->waveform_1);
- glDrawArrays(GL_POINTS, 0, scopes->waveform_tot);
+ gpuPushMatrix();
+ gpuTranslate2f(rect.xmin, yofs);
+ gpuScale2f(w, h);
- glDisableClientState(GL_VERTEX_ARRAY);
- glPopMatrix();
+ waveform_draw_one(scopes->waveform_1, scopes->waveform_tot, col);
+
+ gpuPopMatrix();
/* min max */
- glColor3f(0.5f, 0.5f, 0.5f);
+ immUniformColor3f(0.5f, 0.5f, 0.5f);
min = yofs + scopes->minmax[0][0] * h;
max = yofs + scopes->minmax[0][1] * h;
CLAMP(min, rect.ymin, rect.ymax);
CLAMP(max, rect.ymin, rect.ymax);
- fdrawline(rect.xmax - 3, min, rect.xmax - 3, max);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2f(pos, rect.xmax - 3, min);
+ immVertex2f(pos, rect.xmax - 3, max);
+ immEnd();
}
/* RGB (3 channel) */
else if (scopes->wavefrm_mode == SCOPES_WAVEFRM_RGB) {
- glBlendFunc(GL_ONE, GL_ONE);
-
- glEnableClientState(GL_VERTEX_ARRAY);
-
- glPushMatrix();
+ gpuPushMatrix();
+ gpuTranslate2f(rect.xmin, yofs);
+ gpuScale2f(w, h);
- glTranslatef(rect.xmin, yofs, 0.f);
- glScalef(w, h, 0.f);
+ waveform_draw_one(scopes->waveform_1, scopes->waveform_tot, colors_alpha[0]);
+ waveform_draw_one(scopes->waveform_2, scopes->waveform_tot, colors_alpha[1]);
+ waveform_draw_one(scopes->waveform_3, scopes->waveform_tot, colors_alpha[2]);
- glColor3fv( colors_alpha[0] );
- glVertexPointer(2, GL_FLOAT, 0, scopes->waveform_1);
- glDrawArrays(GL_POINTS, 0, scopes->waveform_tot);
-
- glColor3fv( colors_alpha[1] );
- glVertexPointer(2, GL_FLOAT, 0, scopes->waveform_2);
- glDrawArrays(GL_POINTS, 0, scopes->waveform_tot);
-
- glColor3fv( colors_alpha[2] );
- glVertexPointer(2, GL_FLOAT, 0, scopes->waveform_3);
- glDrawArrays(GL_POINTS, 0, scopes->waveform_tot);
-
- glDisableClientState(GL_VERTEX_ARRAY);
- glPopMatrix();
+ gpuPopMatrix();
}
/* PARADE / YCC (3 channels) */
else if (ELEM(scopes->wavefrm_mode,
@@ -770,49 +955,47 @@ void ui_draw_but_WAVEFORM(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wcol),
{
int rgb = (scopes->wavefrm_mode == SCOPES_WAVEFRM_RGB_PARADE);
- glBlendFunc(GL_ONE, GL_ONE);
-
- glPushMatrix();
- glEnableClientState(GL_VERTEX_ARRAY);
+ gpuPushMatrix();
+ gpuTranslate2f(rect.xmin, yofs);
+ gpuScale2f(w3, h);
- glTranslatef(rect.xmin, yofs, 0.f);
- glScalef(w3, h, 0.f);
+ waveform_draw_one(scopes->waveform_1, scopes->waveform_tot, (rgb) ? colors_alpha[0] : colorsycc_alpha[0]);
- glColor3fv((rgb) ? colors_alpha[0] : colorsycc_alpha[0]);
- glVertexPointer(2, GL_FLOAT, 0, scopes->waveform_1);
- glDrawArrays(GL_POINTS, 0, scopes->waveform_tot);
+ gpuTranslate2f(1.0f, 0.0f);
+ waveform_draw_one(scopes->waveform_2, scopes->waveform_tot, (rgb) ? colors_alpha[1] : colorsycc_alpha[1]);
- glTranslatef(1.f, 0.f, 0.f);
- glColor3fv((rgb) ? colors_alpha[1] : colorsycc_alpha[1]);
- glVertexPointer(2, GL_FLOAT, 0, scopes->waveform_2);
- glDrawArrays(GL_POINTS, 0, scopes->waveform_tot);
+ gpuTranslate2f(1.0f, 0.0f);
+ waveform_draw_one(scopes->waveform_3, scopes->waveform_tot, (rgb) ? colors_alpha[2] : colorsycc_alpha[2]);
- glTranslatef(1.f, 0.f, 0.f);
- glColor3fv((rgb) ? colors_alpha[2] : colorsycc_alpha[2]);
- glVertexPointer(2, GL_FLOAT, 0, scopes->waveform_3);
- glDrawArrays(GL_POINTS, 0, scopes->waveform_tot);
-
- glDisableClientState(GL_VERTEX_ARRAY);
- glPopMatrix();
+ gpuPopMatrix();
}
+
/* min max */
if (scopes->wavefrm_mode != SCOPES_WAVEFRM_LUMA ) {
for (int c = 0; c < 3; c++) {
if (ELEM(scopes->wavefrm_mode, SCOPES_WAVEFRM_RGB_PARADE, SCOPES_WAVEFRM_RGB))
- glColor3f(colors[c][0] * 0.75f, colors[c][1] * 0.75f, colors[c][2] * 0.75f);
+ immUniformColor3f(colors[c][0] * 0.75f, colors[c][1] * 0.75f, colors[c][2] * 0.75f);
else
- glColor3f(colorsycc[c][0] * 0.75f, colorsycc[c][1] * 0.75f, colorsycc[c][2] * 0.75f);
+ immUniformColor3f(colorsycc[c][0] * 0.75f, colorsycc[c][1] * 0.75f, colorsycc[c][2] * 0.75f);
min = yofs + scopes->minmax[c][0] * h;
max = yofs + scopes->minmax[c][1] * h;
CLAMP(min, rect.ymin, rect.ymax);
CLAMP(max, rect.ymin, rect.ymax);
- fdrawline(rect.xmin + w + 2 + c * 2, min, rect.xmin + w + 2 + c * 2, max);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2f(pos, rect.xmin + w + 2 + c * 2, min);
+ immVertex2f(pos, rect.xmin + w + 2 + c * 2, max);
+ immEnd();
}
}
}
-
+
+ immUnbindProgram();
+
/* outline */
draw_scope_end(&rect, scissor);
+
+ glDisable(GL_BLEND);
}
static float polar_to_x(float center, float diam, float ampli, float angle)
@@ -825,10 +1008,10 @@ static float polar_to_y(float center, float diam, float ampli, float angle)
return center + diam * ampli * sinf(angle);
}
-static void vectorscope_draw_target(float centerx, float centery, float diam, const float colf[3])
+static void vectorscope_draw_target(unsigned int pos, float centerx, float centery, float diam, const float colf[3])
{
float y, u, v;
- float tangle = 0.f, tampli;
+ float tangle = 0.0f, tampli;
float dangle, dampli, dangle2, dampli2;
rgb_to_yuv(colf[0], colf[1], colf[2], &y, &u, &v);
@@ -840,41 +1023,41 @@ static void vectorscope_draw_target(float centerx, float centery, float diam, co
tampli = sqrtf(u * u + v * v);
/* small target vary by 2.5 degree and 2.5 IRE unit */
- glColor4f(1.0f, 1.0f, 1.0, 0.12f);
+ immUniformColor4f(1.0f, 1.0f, 1.0f, 0.12f);
dangle = DEG2RADF(2.5f);
dampli = 2.5f / 200.0f;
- glBegin(GL_LINE_LOOP);
- glVertex2f(polar_to_x(centerx, diam, tampli + dampli, tangle + dangle), polar_to_y(centery, diam, tampli + dampli, tangle + dangle));
- glVertex2f(polar_to_x(centerx, diam, tampli - dampli, tangle + dangle), polar_to_y(centery, diam, tampli - dampli, tangle + dangle));
- glVertex2f(polar_to_x(centerx, diam, tampli - dampli, tangle - dangle), polar_to_y(centery, diam, tampli - dampli, tangle - dangle));
- glVertex2f(polar_to_x(centerx, diam, tampli + dampli, tangle - dangle), polar_to_y(centery, diam, tampli + dampli, tangle - dangle));
- glEnd();
+ immBegin(GWN_PRIM_LINE_LOOP, 4);
+ immVertex2f(pos, polar_to_x(centerx, diam, tampli + dampli, tangle + dangle), polar_to_y(centery, diam, tampli + dampli, tangle + dangle));
+ immVertex2f(pos, polar_to_x(centerx, diam, tampli - dampli, tangle + dangle), polar_to_y(centery, diam, tampli - dampli, tangle + dangle));
+ immVertex2f(pos, polar_to_x(centerx, diam, tampli - dampli, tangle - dangle), polar_to_y(centery, diam, tampli - dampli, tangle - dangle));
+ immVertex2f(pos, polar_to_x(centerx, diam, tampli + dampli, tangle - dangle), polar_to_y(centery, diam, tampli + dampli, tangle - dangle));
+ immEnd();
/* big target vary by 10 degree and 20% amplitude */
- glColor4f(1.0f, 1.0f, 1.0, 0.12f);
+ immUniformColor4f(1.0f, 1.0f, 1.0f, 0.12f);
dangle = DEG2RADF(10.0f);
dampli = 0.2f * tampli;
dangle2 = DEG2RADF(5.0f);
dampli2 = 0.5f * dampli;
- glBegin(GL_LINE_STRIP);
- glVertex2f(polar_to_x(centerx, diam, tampli + dampli - dampli2, tangle + dangle), polar_to_y(centery, diam, tampli + dampli - dampli2, tangle + dangle));
- glVertex2f(polar_to_x(centerx, diam, tampli + dampli, tangle + dangle), polar_to_y(centery, diam, tampli + dampli, tangle + dangle));
- glVertex2f(polar_to_x(centerx, diam, tampli + dampli, tangle + dangle - dangle2), polar_to_y(centery, diam, tampli + dampli, tangle + dangle - dangle2));
- glEnd();
- glBegin(GL_LINE_STRIP);
- glVertex2f(polar_to_x(centerx, diam, tampli - dampli + dampli2, tangle + dangle), polar_to_y(centery, diam, tampli - dampli + dampli2, tangle + dangle));
- glVertex2f(polar_to_x(centerx, diam, tampli - dampli, tangle + dangle), polar_to_y(centery, diam, tampli - dampli, tangle + dangle));
- glVertex2f(polar_to_x(centerx, diam, tampli - dampli, tangle + dangle - dangle2), polar_to_y(centery, diam, tampli - dampli, tangle + dangle - dangle2));
- glEnd();
- glBegin(GL_LINE_STRIP);
- glVertex2f(polar_to_x(centerx, diam, tampli - dampli + dampli2, tangle - dangle), polar_to_y(centery, diam, tampli - dampli + dampli2, tangle - dangle));
- glVertex2f(polar_to_x(centerx, diam, tampli - dampli, tangle - dangle), polar_to_y(centery, diam, tampli - dampli, tangle - dangle));
- glVertex2f(polar_to_x(centerx, diam, tampli - dampli, tangle - dangle + dangle2), polar_to_y(centery, diam, tampli - dampli, tangle - dangle + dangle2));
- glEnd();
- glBegin(GL_LINE_STRIP);
- glVertex2f(polar_to_x(centerx, diam, tampli + dampli - dampli2, tangle - dangle), polar_to_y(centery, diam, tampli + dampli - dampli2, tangle - dangle));
- glVertex2f(polar_to_x(centerx, diam, tampli + dampli, tangle - dangle), polar_to_y(centery, diam, tampli + dampli, tangle - dangle));
- glVertex2f(polar_to_x(centerx, diam, tampli + dampli, tangle - dangle + dangle2), polar_to_y(centery, diam, tampli + dampli, tangle - dangle + dangle2));
- glEnd();
+ immBegin(GWN_PRIM_LINE_STRIP, 3);
+ immVertex2f(pos, polar_to_x(centerx, diam, tampli + dampli - dampli2, tangle + dangle), polar_to_y(centery, diam, tampli + dampli - dampli2, tangle + dangle));
+ immVertex2f(pos, polar_to_x(centerx, diam, tampli + dampli, tangle + dangle), polar_to_y(centery, diam, tampli + dampli, tangle + dangle));
+ immVertex2f(pos, polar_to_x(centerx, diam, tampli + dampli, tangle + dangle - dangle2), polar_to_y(centery, diam, tampli + dampli, tangle + dangle - dangle2));
+ immEnd();
+ immBegin(GWN_PRIM_LINE_STRIP, 3);
+ immVertex2f(pos, polar_to_x(centerx, diam, tampli - dampli + dampli2, tangle + dangle), polar_to_y(centery, diam, tampli - dampli + dampli2, tangle + dangle));
+ immVertex2f(pos, polar_to_x(centerx, diam, tampli - dampli, tangle + dangle), polar_to_y(centery, diam, tampli - dampli, tangle + dangle));
+ immVertex2f(pos, polar_to_x(centerx, diam, tampli - dampli, tangle + dangle - dangle2), polar_to_y(centery, diam, tampli - dampli, tangle + dangle - dangle2));
+ immEnd();
+ immBegin(GWN_PRIM_LINE_STRIP, 3);
+ immVertex2f(pos, polar_to_x(centerx, diam, tampli - dampli + dampli2, tangle - dangle), polar_to_y(centery, diam, tampli - dampli + dampli2, tangle - dangle));
+ immVertex2f(pos, polar_to_x(centerx, diam, tampli - dampli, tangle - dangle), polar_to_y(centery, diam, tampli - dampli, tangle - dangle));
+ immVertex2f(pos, polar_to_x(centerx, diam, tampli - dampli, tangle - dangle + dangle2), polar_to_y(centery, diam, tampli - dampli, tangle - dangle + dangle2));
+ immEnd();
+ immBegin(GWN_PRIM_LINE_STRIP, 3);
+ immVertex2f(pos, polar_to_x(centerx, diam, tampli + dampli - dampli2, tangle - dangle), polar_to_y(centery, diam, tampli + dampli - dampli2, tangle - dangle));
+ immVertex2f(pos, polar_to_x(centerx, diam, tampli + dampli, tangle - dangle), polar_to_y(centery, diam, tampli + dampli, tangle - dangle));
+ immVertex2f(pos, polar_to_x(centerx, diam, tampli + dampli, tangle - dangle + dangle2), polar_to_y(centery, diam, tampli + dampli, tangle - dangle + dangle2));
+ immEnd();
}
void ui_draw_but_VECTORSCOPE(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wcol), const rcti *recti)
@@ -895,8 +1078,8 @@ void ui_draw_but_VECTORSCOPE(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wco
float w = BLI_rctf_size_x(&rect);
float h = BLI_rctf_size_y(&rect);
- float centerx = rect.xmin + w / 2;
- float centery = rect.ymin + h / 2;
+ float centerx = rect.xmin + w * 0.5f;
+ float centery = rect.ymin + h * 0.5f;
float diam = (w < h) ? w : h;
float alpha = scopes->vecscope_alpha * scopes->vecscope_alpha * scopes->vecscope_alpha;
@@ -904,9 +1087,10 @@ void ui_draw_but_VECTORSCOPE(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wco
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- UI_ThemeColor4(TH_PREVIEW_BACK);
+ float color[4];
+ UI_GetThemeColor4fv(TH_PREVIEW_BACK, color);
UI_draw_roundbox_corner_set(UI_CNR_ALL);
- UI_draw_roundbox_gl_mode(GL_POLYGON, rect.xmin - 1, rect.ymin - 1, rect.xmax + 1, rect.ymax + 1, 3.0f);
+ UI_draw_roundbox_4fv(true, rect.xmin - 1, rect.ymin - 1, rect.xmax + 1, rect.ymax + 1, 3.0f, color);
/* need scissor test, hvectorscope can draw outside of boundary */
GLint scissor[4];
@@ -916,93 +1100,109 @@ void ui_draw_but_VECTORSCOPE(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wco
(rect.xmax + 1) - (rect.xmin - 1),
(rect.ymax + 1) - (rect.ymin - 1));
- glColor4f(1.f, 1.f, 1.f, 0.08f);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ immUniformColor4f(1.0f, 1.0f, 1.0f, 0.08f);
/* draw grid elements */
/* cross */
- fdrawline(centerx - (diam / 2) - 5, centery, centerx + (diam / 2) + 5, centery);
- fdrawline(centerx, centery - (diam / 2) - 5, centerx, centery + (diam / 2) + 5);
+ immBegin(GWN_PRIM_LINES, 4);
+
+ immVertex2f(pos, centerx - (diam * 0.5f) - 5, centery);
+ immVertex2f(pos, centerx + (diam * 0.5f) + 5, centery);
+
+ immVertex2f(pos, centerx, centery - (diam * 0.5f) - 5);
+ immVertex2f(pos, centerx, centery + (diam * 0.5f) + 5);
+
+ immEnd();
+
/* circles */
for (int j = 0; j < 5; j++) {
- glBegin(GL_LINE_LOOP);
const int increment = 15;
+ immBegin(GWN_PRIM_LINE_LOOP, (int)(360 / increment));
for (int i = 0; i <= 360 - increment; i += increment) {
const float a = DEG2RADF((float)i);
- const float r = (j + 1) / 10.0f;
- glVertex2f(polar_to_x(centerx, diam, r, a), polar_to_y(centery, diam, r, a));
+ const float r = (j + 1) * 0.1f;
+ immVertex2f(pos, polar_to_x(centerx, diam, r, a), polar_to_y(centery, diam, r, a));
}
- glEnd();
+ immEnd();
}
/* skin tone line */
- glColor4f(1.f, 0.4f, 0.f, 0.2f);
- fdrawline(polar_to_x(centerx, diam, 0.5f, skin_rad), polar_to_y(centery, diam, 0.5, skin_rad),
- polar_to_x(centerx, diam, 0.1f, skin_rad), polar_to_y(centery, diam, 0.1, skin_rad));
+ immUniformColor4f(1.0f, 0.4f, 0.0f, 0.2f);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2f(pos, polar_to_x(centerx, diam, 0.5f, skin_rad), polar_to_y(centery, diam, 0.5f, skin_rad));
+ immVertex2f(pos, polar_to_x(centerx, diam, 0.1f, skin_rad), polar_to_y(centery, diam, 0.1f, skin_rad));
+ immEnd();
+
/* saturation points */
for (int i = 0; i < 6; i++)
- vectorscope_draw_target(centerx, centery, diam, colors[i]);
+ vectorscope_draw_target(pos, centerx, centery, diam, colors[i]);
if (scopes->ok && scopes->vecscope != NULL) {
/* pixel point cloud */
+ float col[3] = {alpha, alpha, alpha};
+
glBlendFunc(GL_ONE, GL_ONE);
- glColor3f(alpha, alpha, alpha);
+ glPointSize(1.0);
- glPushMatrix();
- glEnableClientState(GL_VERTEX_ARRAY);
+ gpuPushMatrix();
+ gpuTranslate2f(centerx, centery);
+ gpuScaleUniform(diam);
- glTranslatef(centerx, centery, 0.f);
- glScalef(diam, diam, 0.f);
+ waveform_draw_one(scopes->vecscope, scopes->waveform_tot, col);
- glVertexPointer(2, GL_FLOAT, 0, scopes->vecscope);
- glPointSize(1.0);
- glDrawArrays(GL_POINTS, 0, scopes->waveform_tot);
-
- glDisableClientState(GL_VERTEX_ARRAY);
- glPopMatrix();
+ gpuPopMatrix();
}
+ immUnbindProgram();
+
/* outline */
draw_scope_end(&rect, scissor);
glDisable(GL_BLEND);
}
-static void ui_draw_colorband_handle_tri_hlight(float x1, float y1, float halfwidth, float height)
+static void ui_draw_colorband_handle_tri_hlight(unsigned int pos, float x1, float y1, float halfwidth, float height)
{
glEnable(GL_LINE_SMOOTH);
- glBegin(GL_LINE_STRIP);
- glVertex2f(x1 + halfwidth, y1);
- glVertex2f(x1, y1 + height);
- glVertex2f(x1 - halfwidth, y1);
- glEnd();
+ immBegin(GWN_PRIM_LINE_STRIP, 3);
+ immVertex2f(pos, x1 + halfwidth, y1);
+ immVertex2f(pos, x1, y1 + height);
+ immVertex2f(pos, x1 - halfwidth, y1);
+ immEnd();
glDisable(GL_LINE_SMOOTH);
}
-static void ui_draw_colorband_handle_tri(float x1, float y1, float halfwidth, float height, bool fill)
+static void ui_draw_colorband_handle_tri(unsigned int pos, float x1, float y1, float halfwidth, float height, bool fill)
{
glEnable(fill ? GL_POLYGON_SMOOTH : GL_LINE_SMOOTH);
- glBegin(fill ? GL_TRIANGLES : GL_LINE_LOOP);
- glVertex2f(x1 + halfwidth, y1);
- glVertex2f(x1, y1 + height);
- glVertex2f(x1 - halfwidth, y1);
- glEnd();
+ immBegin(fill ? GWN_PRIM_TRIS : GWN_PRIM_LINE_LOOP, 3);
+ immVertex2f(pos, x1 + halfwidth, y1);
+ immVertex2f(pos, x1, y1 + height);
+ immVertex2f(pos, x1 - halfwidth, y1);
+ immEnd();
glDisable(fill ? GL_POLYGON_SMOOTH : GL_LINE_SMOOTH);
}
-static void ui_draw_colorband_handle_box(float x1, float y1, float x2, float y2, bool fill)
+static void ui_draw_colorband_handle_box(unsigned int pos, float x1, float y1, float x2, float y2, bool fill)
{
- glBegin(fill ? GL_QUADS : GL_LINE_LOOP);
- glVertex2f(x1, y1);
- glVertex2f(x1, y2);
- glVertex2f(x2, y2);
- glVertex2f(x2, y1);
- glEnd();
+ immBegin(fill ? GWN_PRIM_TRI_FAN : GWN_PRIM_LINE_LOOP, 4);
+ immVertex2f(pos, x1, y1);
+ immVertex2f(pos, x1, y2);
+ immVertex2f(pos, x2, y2);
+ immVertex2f(pos, x2, y1);
+ immEnd();
}
static void ui_draw_colorband_handle(
- const rcti *rect, float x,
+ uint shdr_pos, const rcti *rect, float x,
const float rgb[3], struct ColorManagedDisplay *display,
bool active)
{
@@ -1021,18 +1221,26 @@ static void ui_draw_colorband_handle(
y1 = floorf(y1 + 0.5f);
if (active || half_width < min_width) {
- glBegin(GL_LINES);
- glColor3ub(0, 0, 0);
- glVertex2f(x, y1);
- glVertex2f(x, y2);
- glEnd();
- setlinestyle(active ? 2 : 1);
- glBegin(GL_LINES);
- glColor3ub(200, 200, 200);
- glVertex2f(x, y1);
- glVertex2f(x, y2);
- glEnd();
- setlinestyle(0);
+ immUnbindProgram();
+
+ immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR);
+
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2] / UI_DPI_FAC, viewport_size[3] / UI_DPI_FAC);
+
+ immUniform1i("num_colors", 2); /* "advanced" mode */
+ immUniformArray4fv("colors", (float *)(float[][4]){{0.8f, 0.8f, 0.8f, 1.0f}, {0.0f, 0.0f, 0.0f, 1.0f}}, 2);
+ immUniform1f("dash_width", active ? 4.0f : 2.0f);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2f(shdr_pos, x, y1);
+ immVertex2f(shdr_pos, x, y2);
+ immEnd();
+
+ immUnbindProgram();
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
/* hide handles when zoomed out too far */
if (half_width < min_width) {
@@ -1043,45 +1251,46 @@ static void ui_draw_colorband_handle(
/* shift handle down */
y1 -= half_width;
- glColor3ub(0, 0, 0);
- ui_draw_colorband_handle_box(x - half_width, y1 - 1, x + half_width, y1 + height, false);
+ immUniformColor3ub(0, 0, 0);
+ ui_draw_colorband_handle_box(shdr_pos, x - half_width, y1 - 1, x + half_width, y1 + height, false);
/* draw all triangles blended */
glEnable(GL_BLEND);
- ui_draw_colorband_handle_tri(x, y1 + height, half_width, half_width, true);
+ ui_draw_colorband_handle_tri(shdr_pos, x, y1 + height, half_width, half_width, true);
if (active)
- glColor3ub(196, 196, 196);
+ immUniformColor3ub(196, 196, 196);
else
- glColor3ub(96, 96, 96);
- ui_draw_colorband_handle_tri(x, y1 + height, half_width, half_width, true);
+ immUniformColor3ub(96, 96, 96);
+ ui_draw_colorband_handle_tri(shdr_pos, x, y1 + height, half_width, half_width, true);
if (active)
- glColor3ub(255, 255, 255);
+ immUniformColor3ub(255, 255, 255);
else
- glColor3ub(128, 128, 128);
- ui_draw_colorband_handle_tri_hlight(x, y1 + height - 1, (half_width - 1), (half_width - 1));
+ immUniformColor3ub(128, 128, 128);
+ ui_draw_colorband_handle_tri_hlight(shdr_pos, x, y1 + height - 1, (half_width - 1), (half_width - 1));
- glColor3ub(0, 0, 0);
- ui_draw_colorband_handle_tri_hlight(x, y1 + height, half_width, half_width);
+ immUniformColor3ub(0, 0, 0);
+ ui_draw_colorband_handle_tri_hlight(shdr_pos, x, y1 + height, half_width, half_width);
glDisable(GL_BLEND);
- glColor3ub(128, 128, 128);
- ui_draw_colorband_handle_box(x - (half_width - 1), y1, x + (half_width - 1), y1 + height, true);
+ immUniformColor3ub(128, 128, 128);
+ ui_draw_colorband_handle_box(shdr_pos, x - (half_width - 1), y1, x + (half_width - 1), y1 + height, true);
if (display) {
IMB_colormanagement_scene_linear_to_display_v3(colf, display);
}
- glColor3fv(colf);
- ui_draw_colorband_handle_box(x - (half_width - 2), y1 + 1, x + (half_width - 2), y1 + height - 2, true);
+ immUniformColor3fv(colf);
+ ui_draw_colorband_handle_box(shdr_pos, x - (half_width - 2), y1 + 1, x + (half_width - 2), y1 + height - 2, true);
}
void ui_draw_but_COLORBAND(uiBut *but, uiWidgetColors *UNUSED(wcol), const rcti *rect)
{
struct ColorManagedDisplay *display = NULL;
+ unsigned int position, color;
ColorBand *coba = (ColorBand *)(but->editcoba ? but->editcoba : but->poin);
if (coba == NULL) return;
@@ -1092,20 +1301,25 @@ void ui_draw_but_COLORBAND(uiBut *but, uiWidgetColors *UNUSED(wcol), const rcti
float x1 = rect->xmin;
float sizex = rect->xmax - x1;
float sizey = BLI_rcti_size_y(rect);
- float sizey_solid = sizey / 4;
+ float sizey_solid = sizey * 0.25f;
float y1 = rect->ymin;
- /* Drawing the checkerboard.
- * This could be optimized with a single checkerboard shader,
- * instead of drawing twice and using stippling the second time. */
- /* layer: background, to show tranparency */
- glColor4ub(UI_ALPHA_CHECKER_DARK, UI_ALPHA_CHECKER_DARK, UI_ALPHA_CHECKER_DARK, 255);
- glRectf(x1, y1, x1 + sizex, rect->ymax);
- GPU_basic_shader_bind(GPU_SHADER_STIPPLE | GPU_SHADER_USE_COLOR);
- glColor4ub(UI_ALPHA_CHECKER_LIGHT, UI_ALPHA_CHECKER_LIGHT, UI_ALPHA_CHECKER_LIGHT, 255);
- GPU_basic_shader_stipple(GPU_SHADER_STIPPLE_CHECKER_8PX);
- glRectf(x1, y1, x1 + sizex, rect->ymax);
- GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
+ Gwn_VertFormat *format = immVertexFormat();
+ position = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_CHECKER);
+
+ /* Drawing the checkerboard. */
+ immUniform4f("color1", UI_ALPHA_CHECKER_DARK / 255.0f, UI_ALPHA_CHECKER_DARK / 255.0f, UI_ALPHA_CHECKER_DARK / 255.0f, 1.0f);
+ immUniform4f("color2", UI_ALPHA_CHECKER_LIGHT / 255.0f, UI_ALPHA_CHECKER_LIGHT / 255.0f, UI_ALPHA_CHECKER_LIGHT / 255.0f, 1.0f);
+ immUniform1i("size", 8);
+ immRectf(position, x1, y1, x1 + sizex, rect->ymax);
+ immUnbindProgram();
+
+ /* New format */
+ format = immVertexFormat();
+ position = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ color = GWN_vertformat_attr_add(format, "color", GWN_COMP_F32, 4, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_SMOOTH_COLOR);
/* layer: color ramp */
glEnable(GL_BLEND);
@@ -1118,7 +1332,7 @@ void ui_draw_but_COLORBAND(uiBut *but, uiWidgetColors *UNUSED(wcol), const rcti
v1[1] = y1 + sizey_solid;
v2[1] = rect->ymax;
- glBegin(GL_TRIANGLE_STRIP);
+ immBegin(GWN_PRIM_TRI_STRIP, (sizex + 1) * 2);
for (int a = 0; a <= sizex; a++) {
float pos = ((float)a) / sizex;
BKE_colorband_evaluate(coba, pos, colf);
@@ -1127,17 +1341,17 @@ void ui_draw_but_COLORBAND(uiBut *but, uiWidgetColors *UNUSED(wcol), const rcti
v1[0] = v2[0] = x1 + a;
- glColor4fv(colf);
- glVertex2fv(v1);
- glVertex2fv(v2);
+ immAttrib4fv(color, colf);
+ immVertex2fv(position, v1);
+ immVertex2fv(position, v2);
}
- glEnd();
+ immEnd();
/* layer: color ramp without alpha for reference when manipulating ramp properties */
v1[1] = y1;
v2[1] = y1 + sizey_solid;
- glBegin(GL_TRIANGLE_STRIP);
+ immBegin(GWN_PRIM_TRI_STRIP, (sizex + 1) * 2);
for (int a = 0; a <= sizex; a++) {
float pos = ((float)a) / sizex;
BKE_colorband_evaluate(coba, pos, colf);
@@ -1146,31 +1360,48 @@ void ui_draw_but_COLORBAND(uiBut *but, uiWidgetColors *UNUSED(wcol), const rcti
v1[0] = v2[0] = x1 + a;
- glColor4f(colf[0], colf[1], colf[2], 1.0f);
- glVertex2fv(v1);
- glVertex2fv(v2);
+ immAttrib4f(color, colf[0], colf[1], colf[2], 1.0f);
+ immVertex2fv(position, v1);
+ immVertex2fv(position, v2);
}
- glEnd();
+ immEnd();
+
+ immUnbindProgram();
glDisable(GL_BLEND);
+ /* New format */
+ format = immVertexFormat();
+ position = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
/* layer: box outline */
- glColor4f(0.0, 0.0, 0.0, 1.0);
- fdrawbox(x1, y1, x1 + sizex, rect->ymax);
-
+ immUniformColor4f(0.0f, 0.0f, 0.0f, 1.0f);
+ imm_draw_box_wire_2d(position, x1, y1, x1 + sizex, rect->ymax);
+
/* layer: box outline */
glEnable(GL_BLEND);
- glColor4f(0.0f, 0.0f, 0.0f, 0.5f);
- fdrawline(x1, y1, x1 + sizex, y1);
- glColor4f(1.0f, 1.0f, 1.0f, 0.25f);
- fdrawline(x1, y1 - 1, x1 + sizex, y1 - 1);
+ immUniformColor4f(0.0f, 0.0f, 0.0f, 0.5f);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2f(position, x1, y1);
+ immVertex2f(position, x1 + sizex, y1);
+ immEnd();
+
+ immUniformColor4f(1.0f, 1.0f, 1.0f, 0.25f);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2f(position, x1, y1 - 1);
+ immVertex2f(position, x1 + sizex, y1 - 1);
+ immEnd();
+
glDisable(GL_BLEND);
/* layer: draw handles */
for (int a = 0; a < coba->tot; a++, cbd++) {
if (a != coba->cur) {
float pos = x1 + cbd->pos * (sizex - 1) + 1;
- ui_draw_colorband_handle(rect, pos, &cbd->r, display, false);
+ ui_draw_colorband_handle(position, rect, pos, &cbd->r, display, false);
}
}
@@ -1178,117 +1409,100 @@ void ui_draw_but_COLORBAND(uiBut *but, uiWidgetColors *UNUSED(wcol), const rcti
if (coba->tot != 0) {
cbd = &coba->data[coba->cur];
float pos = x1 + cbd->pos * (sizex - 1) + 1;
- ui_draw_colorband_handle(rect, pos, &cbd->r, display, true);
+ ui_draw_colorband_handle(position, rect, pos, &cbd->r, display, true);
}
+
+ immUnbindProgram();
}
void ui_draw_but_UNITVEC(uiBut *but, uiWidgetColors *wcol, const rcti *rect)
{
- static GLuint displist = 0;
+ /* sphere color */
float diffuse[3] = {1.0f, 1.0f, 1.0f};
+ float light[3];
float size;
/* backdrop */
- glColor3ubv((unsigned char *)wcol->inner);
UI_draw_roundbox_corner_set(UI_CNR_ALL);
- UI_draw_roundbox_gl_mode(GL_POLYGON, rect->xmin, rect->ymin, rect->xmax, rect->ymax, 5.0f);
+ UI_draw_roundbox_3ubAlpha(true, rect->xmin, rect->ymin, rect->xmax, rect->ymax, 5.0f, (unsigned char *)wcol->inner, 255);
- /* sphere color */
glCullFace(GL_BACK);
glEnable(GL_CULL_FACE);
/* setup lights */
- GPULightData light = {0};
- light.type = GPU_LIGHT_SUN;
- copy_v3_v3(light.diffuse, diffuse);
- zero_v3(light.specular);
- ui_but_v3_get(but, light.direction);
-
- GPU_basic_shader_light_set(0, &light);
- for (int a = 1; a < 8; a++)
- GPU_basic_shader_light_set(a, NULL);
-
- /* setup shader */
- GPU_basic_shader_colors(diffuse, NULL, 0, 1.0f);
- GPU_basic_shader_bind(GPU_SHADER_LIGHTING);
+ ui_but_v3_get(but, light);
/* transform to button */
- glPushMatrix();
- glTranslatef(rect->xmin + 0.5f * BLI_rcti_size_x(rect), rect->ymin + 0.5f * BLI_rcti_size_y(rect), 0.0f);
+ gpuPushMatrix();
if (BLI_rcti_size_x(rect) < BLI_rcti_size_y(rect))
- size = BLI_rcti_size_x(rect) / 200.f;
+ size = 0.5f * BLI_rcti_size_x(rect);
else
- size = BLI_rcti_size_y(rect) / 200.f;
-
- glScalef(size, size, MIN2(size, 1.0f));
+ size = 0.5f * BLI_rcti_size_y(rect);
- if (displist == 0) {
- GLUquadricObj *qobj;
-
- displist = glGenLists(1);
- glNewList(displist, GL_COMPILE);
-
- qobj = gluNewQuadric();
- gluQuadricDrawStyle(qobj, GLU_FILL);
- GPU_basic_shader_bind(GPU_basic_shader_bound_options());
- gluSphere(qobj, 100.0, 32, 24);
- gluDeleteQuadric(qobj);
-
- glEndList();
- }
+ gpuTranslate2f(rect->xmin + 0.5f * BLI_rcti_size_x(rect), rect->ymin + 0.5f * BLI_rcti_size_y(rect));
+ gpuScaleUniform(size);
- glCallList(displist);
+ Gwn_Batch *sphere = GPU_batch_preset_sphere(2);
+ GWN_batch_program_set_builtin(sphere, GPU_SHADER_SIMPLE_LIGHTING);
+ GWN_batch_uniform_4f(sphere, "color", diffuse[0], diffuse[1], diffuse[2], 1.0f);
+ GWN_batch_uniform_3fv(sphere, "light", light);
+ GWN_batch_draw(sphere);
/* restore */
- GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
- GPU_default_lights();
glDisable(GL_CULL_FACE);
/* AA circle */
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor3ubv((unsigned char *)wcol->inner);
+
glEnable(GL_BLEND);
glEnable(GL_LINE_SMOOTH);
- glColor3ubv((unsigned char *)wcol->inner);
- glutil_draw_lined_arc(0.0f, M_PI * 2.0, 100.0f, 32);
+ imm_draw_circle_wire_2d(pos, 0.0f, 0.0f, 1.0f, 32);
glDisable(GL_BLEND);
glDisable(GL_LINE_SMOOTH);
/* matrix after circle */
- glPopMatrix();
+ gpuPopMatrix();
- /* We disabled all blender lights above, so restore them here. */
- GPU_default_lights();
+ immUnbindProgram();
}
-static void ui_draw_but_curve_grid(const rcti *rect, float zoomx, float zoomy, float offsx, float offsy, float step)
+static void ui_draw_but_curve_grid(unsigned int pos, const rcti *rect, float zoomx, float zoomy, float offsx, float offsy, float step)
{
- glBegin(GL_LINES);
float dx = step * zoomx;
float fx = rect->xmin + zoomx * (-offsx);
if (fx > rect->xmin) fx -= dx * (floorf(fx - rect->xmin));
- while (fx < rect->xmax) {
- glVertex2f(fx, rect->ymin);
- glVertex2f(fx, rect->ymax);
- fx += dx;
- }
float dy = step * zoomy;
float fy = rect->ymin + zoomy * (-offsy);
if (fy > rect->ymin) fy -= dy * (floorf(fy - rect->ymin));
+
+ float line_count = floorf((rect->xmax - fx) / dx) + 1.0f +
+ floorf((rect->ymax - fy) / dy) + 1.0f;
+
+ immBegin(GWN_PRIM_LINES, (int)line_count * 2);
+ while (fx < rect->xmax) {
+ immVertex2f(pos, fx, rect->ymin);
+ immVertex2f(pos, fx, rect->ymax);
+ fx += dx;
+ }
while (fy < rect->ymax) {
- glVertex2f(rect->xmin, fy);
- glVertex2f(rect->xmax, fy);
+ immVertex2f(pos, rect->xmin, fy);
+ immVertex2f(pos, rect->xmax, fy);
fy += dy;
}
- glEnd();
+ immEnd();
}
static void gl_shaded_color(unsigned char *col, int shade)
{
- glColor3ub(col[0] - shade > 0 ? col[0] - shade : 0,
- col[1] - shade > 0 ? col[1] - shade : 0,
- col[2] - shade > 0 ? col[2] - shade : 0);
+ immUniformColor3ub(col[0] - shade > 0 ? col[0] - shade : 0,
+ col[1] - shade > 0 ? col[1] - shade : 0,
+ col[2] - shade > 0 ? col[2] - shade : 0);
}
void ui_draw_but_CURVE(ARegion *ar, uiBut *but, uiWidgetColors *wcol, const rcti *rect)
@@ -1324,10 +1538,8 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, uiWidgetColors *wcol, const rcti
float zoomy = (BLI_rcti_size_y(rect) - 2.0f) / BLI_rctf_size_y(&cumap->curr);
float offsx = cumap->curr.xmin - (1.0f / zoomx);
float offsy = cumap->curr.ymin - (1.0f / zoomy);
-
- glLineWidth(1.0f);
- /* backdrop */
+ /* Do this first to not mess imm context */
if (but->a1 == UI_GRAD_H) {
/* magic trigger for curve backgrounds */
float col[3] = {0.0f, 0.0f, 0.0f}; /* dummy arg */
@@ -1340,96 +1552,105 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, uiWidgetColors *wcol, const rcti
};
ui_draw_gradient(&grid, col, UI_GRAD_H, 1.0f);
+ }
+ glLineWidth(1.0f);
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ /* backdrop */
+ if (but->a1 == UI_GRAD_H) {
/* grid, hsv uses different grid */
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glColor4ub(0, 0, 0, 48);
- ui_draw_but_curve_grid(rect, zoomx, zoomy, offsx, offsy, 0.1666666f);
+ immUniformColor4ub(0, 0, 0, 48);
+ ui_draw_but_curve_grid(pos, rect, zoomx, zoomy, offsx, offsy, 0.1666666f);
glDisable(GL_BLEND);
}
else {
if (cumap->flag & CUMA_DO_CLIP) {
gl_shaded_color((unsigned char *)wcol->inner, -20);
- glRectf(rect->xmin, rect->ymin, rect->xmax, rect->ymax);
- glColor3ubv((unsigned char *)wcol->inner);
- glRectf(rect->xmin + zoomx * (cumap->clipr.xmin - offsx),
- rect->ymin + zoomy * (cumap->clipr.ymin - offsy),
- rect->xmin + zoomx * (cumap->clipr.xmax - offsx),
- rect->ymin + zoomy * (cumap->clipr.ymax - offsy));
+ immRectf(pos, rect->xmin, rect->ymin, rect->xmax, rect->ymax);
+ immUniformColor3ubv((unsigned char *)wcol->inner);
+ immRectf(pos, rect->xmin + zoomx * (cumap->clipr.xmin - offsx),
+ rect->ymin + zoomy * (cumap->clipr.ymin - offsy),
+ rect->xmin + zoomx * (cumap->clipr.xmax - offsx),
+ rect->ymin + zoomy * (cumap->clipr.ymax - offsy));
}
else {
- glColor3ubv((unsigned char *)wcol->inner);
- glRectf(rect->xmin, rect->ymin, rect->xmax, rect->ymax);
+ immUniformColor3ubv((unsigned char *)wcol->inner);
+ immRectf(pos, rect->xmin, rect->ymin, rect->xmax, rect->ymax);
}
/* grid, every 0.25 step */
gl_shaded_color((unsigned char *)wcol->inner, -16);
- ui_draw_but_curve_grid(rect, zoomx, zoomy, offsx, offsy, 0.25f);
+ ui_draw_but_curve_grid(pos, rect, zoomx, zoomy, offsx, offsy, 0.25f);
/* grid, every 1.0 step */
gl_shaded_color((unsigned char *)wcol->inner, -24);
- ui_draw_but_curve_grid(rect, zoomx, zoomy, offsx, offsy, 1.0f);
+ ui_draw_but_curve_grid(pos, rect, zoomx, zoomy, offsx, offsy, 1.0f);
/* axes */
gl_shaded_color((unsigned char *)wcol->inner, -50);
- glBegin(GL_LINES);
- glVertex2f(rect->xmin, rect->ymin + zoomy * (-offsy));
- glVertex2f(rect->xmax, rect->ymin + zoomy * (-offsy));
- glVertex2f(rect->xmin + zoomx * (-offsx), rect->ymin);
- glVertex2f(rect->xmin + zoomx * (-offsx), rect->ymax);
- glEnd();
+ immBegin(GWN_PRIM_LINES, 4);
+ immVertex2f(pos, rect->xmin, rect->ymin + zoomy * (-offsy));
+ immVertex2f(pos, rect->xmax, rect->ymin + zoomy * (-offsy));
+ immVertex2f(pos, rect->xmin + zoomx * (-offsx), rect->ymin);
+ immVertex2f(pos, rect->xmin + zoomx * (-offsx), rect->ymax);
+ immEnd();
}
/* cfra option */
/* XXX 2.48 */
#if 0
if (cumap->flag & CUMA_DRAW_CFRA) {
- glColor3ub(0x60, 0xc0, 0x40);
- glBegin(GL_LINES);
- glVertex2f(rect->xmin + zoomx * (cumap->sample[0] - offsx), rect->ymin);
- glVertex2f(rect->xmin + zoomx * (cumap->sample[0] - offsx), rect->ymax);
- glEnd();
+ immUniformColor3ub(0x60, 0xc0, 0x40);
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2f(pos, rect->xmin + zoomx * (cumap->sample[0] - offsx), rect->ymin);
+ immVertex2f(pos, rect->xmin + zoomx * (cumap->sample[0] - offsx), rect->ymax);
+ immEnd();
}
#endif
/* sample option */
if (cumap->flag & CUMA_DRAW_SAMPLE) {
- glBegin(GL_LINES); /* will draw one of the following 3 lines */
+ immBegin(GWN_PRIM_LINES, 2); /* will draw one of the following 3 lines */
if (but->a1 == UI_GRAD_H) {
float tsample[3];
float hsv[3];
linearrgb_to_srgb_v3_v3(tsample, cumap->sample);
rgb_to_hsv_v(tsample, hsv);
- glColor3ub(240, 240, 240);
+ immUniformColor3ub(240, 240, 240);
- glVertex2f(rect->xmin + zoomx * (hsv[0] - offsx), rect->ymin);
- glVertex2f(rect->xmin + zoomx * (hsv[0] - offsx), rect->ymax);
+ immVertex2f(pos, rect->xmin + zoomx * (hsv[0] - offsx), rect->ymin);
+ immVertex2f(pos, rect->xmin + zoomx * (hsv[0] - offsx), rect->ymax);
}
else if (cumap->cur == 3) {
float lum = IMB_colormanagement_get_luminance(cumap->sample);
- glColor3ub(240, 240, 240);
+ immUniformColor3ub(240, 240, 240);
- glVertex2f(rect->xmin + zoomx * (lum - offsx), rect->ymin);
- glVertex2f(rect->xmin + zoomx * (lum - offsx), rect->ymax);
+ immVertex2f(pos, rect->xmin + zoomx * (lum - offsx), rect->ymin);
+ immVertex2f(pos, rect->xmin + zoomx * (lum - offsx), rect->ymax);
}
else {
if (cumap->cur == 0)
- glColor3ub(240, 100, 100);
+ immUniformColor3ub(240, 100, 100);
else if (cumap->cur == 1)
- glColor3ub(100, 240, 100);
+ immUniformColor3ub(100, 240, 100);
else
- glColor3ub(100, 100, 240);
+ immUniformColor3ub(100, 100, 240);
- glVertex2f(rect->xmin + zoomx * (cumap->sample[cumap->cur] - offsx), rect->ymin);
- glVertex2f(rect->xmin + zoomx * (cumap->sample[cumap->cur] - offsx), rect->ymax);
+ immVertex2f(pos, rect->xmin + zoomx * (cumap->sample[cumap->cur] - offsx), rect->ymin);
+ immVertex2f(pos, rect->xmin + zoomx * (cumap->sample[cumap->cur] - offsx), rect->ymax);
}
- glEnd();
+ immEnd();
}
/* the curve */
- glColor3ubv((unsigned char *)wcol->item);
+ immUniformColor3ubv((unsigned char *)wcol->item);
glEnable(GL_LINE_SMOOTH);
glEnable(GL_BLEND);
- glBegin(GL_LINE_STRIP);
+ immBegin(GWN_PRIM_LINE_STRIP, (CM_TABLE + 1) + 2);
if (cuma->table == NULL)
curvemapping_changed(cumap, false);
@@ -1438,52 +1659,67 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, uiWidgetColors *wcol, const rcti
/* first point */
if ((cuma->flag & CUMA_EXTEND_EXTRAPOLATE) == 0) {
- glVertex2f(rect->xmin, rect->ymin + zoomy * (cmp[0].y - offsy));
+ immVertex2f(pos, rect->xmin, rect->ymin + zoomy * (cmp[0].y - offsy));
}
else {
float fx = rect->xmin + zoomx * (cmp[0].x - offsx + cuma->ext_in[0]);
float fy = rect->ymin + zoomy * (cmp[0].y - offsy + cuma->ext_in[1]);
- glVertex2f(fx, fy);
+ immVertex2f(pos, fx, fy);
}
for (int a = 0; a <= CM_TABLE; a++) {
float fx = rect->xmin + zoomx * (cmp[a].x - offsx);
float fy = rect->ymin + zoomy * (cmp[a].y - offsy);
- glVertex2f(fx, fy);
+ immVertex2f(pos, fx, fy);
}
/* last point */
if ((cuma->flag & CUMA_EXTEND_EXTRAPOLATE) == 0) {
- glVertex2f(rect->xmax, rect->ymin + zoomy * (cmp[CM_TABLE].y - offsy));
+ immVertex2f(pos, rect->xmax, rect->ymin + zoomy * (cmp[CM_TABLE].y - offsy));
}
else {
float fx = rect->xmin + zoomx * (cmp[CM_TABLE].x - offsx - cuma->ext_out[0]);
float fy = rect->ymin + zoomy * (cmp[CM_TABLE].y - offsy - cuma->ext_out[1]);
- glVertex2f(fx, fy);
+ immVertex2f(pos, fx, fy);
}
- glEnd();
+ immEnd();
glDisable(GL_LINE_SMOOTH);
glDisable(GL_BLEND);
+ immUnbindProgram();
/* the points, use aspect to make them visible on edges */
+ format = immVertexFormat();
+ pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int col = GWN_vertformat_attr_add(format, "color", GWN_COMP_F32, 4, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_FLAT_COLOR);
+
cmp = cuma->curve;
glPointSize(3.0f);
- glBegin(GL_POINTS);
+ immBegin(GWN_PRIM_POINTS, cuma->totpoint);
for (int a = 0; a < cuma->totpoint; a++) {
+ float color[4];
if (cmp[a].flag & CUMA_SELECT)
- UI_ThemeColor(TH_TEXT_HI);
+ UI_GetThemeColor4fv(TH_TEXT_HI, color);
else
- UI_ThemeColor(TH_TEXT);
+ UI_GetThemeColor4fv(TH_TEXT, color);
float fx = rect->xmin + zoomx * (cmp[a].x - offsx);
float fy = rect->ymin + zoomy * (cmp[a].y - offsy);
- glVertex2f(fx, fy);
+ immAttrib4fv(col, color);
+ immVertex2f(pos, fx, fy);
}
- glEnd();
+ immEnd();
+ immUnbindProgram();
/* restore scissortest */
glScissor(scissor[0], scissor[1], scissor[2], scissor[3]);
/* outline */
- glColor3ubv((unsigned char *)wcol->outline);
- fdrawbox(rect->xmin, rect->ymin, rect->xmax, rect->ymax);
+ format = immVertexFormat();
+ pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ immUniformColor3ubv((unsigned char *)wcol->outline);
+ imm_draw_box_wire_2d(pos, rect->xmin, rect->ymin, rect->xmax, rect->ymax);
+
+ immUnbindProgram();
}
void ui_draw_but_TRACKPREVIEW(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wcol), const rcti *recti)
@@ -1513,9 +1749,9 @@ void ui_draw_but_TRACKPREVIEW(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wc
(rect.ymax + 1) - (rect.ymin - 1));
if (scopes->track_disabled) {
- glColor4f(0.7f, 0.3f, 0.3f, 0.3f);
+ float color[4] = {0.7f, 0.3f, 0.3f, 0.3f};
UI_draw_roundbox_corner_set(UI_CNR_ALL);
- UI_draw_roundbox_gl_mode(GL_POLYGON, rect.xmin - 1, rect.ymin, rect.xmax + 1, rect.ymax + 1, 3.0f);
+ UI_draw_roundbox_4fv(true, rect.xmin - 1, rect.ymin, rect.xmax + 1, rect.ymax + 1, 3.0f, color);
ok = true;
}
@@ -1542,62 +1778,72 @@ void ui_draw_but_TRACKPREVIEW(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wc
}
if (!ok && scopes->track_preview) {
- glPushMatrix();
+ gpuPushMatrix();
/* draw content of pattern area */
glScissor(ar->winrct.xmin + rect.xmin, ar->winrct.ymin + rect.ymin, scissor[2], scissor[3]);
if (width > 0 && height > 0) {
ImBuf *drawibuf = scopes->track_preview;
+ float col_sel[4], col_outline[4];
if (scopes->use_track_mask) {
- glColor4f(0.0f, 0.0f, 0.0f, 0.3f);
+ float color[4] = {0.0f, 0.0f, 0.0f, 0.3f};
UI_draw_roundbox_corner_set(UI_CNR_ALL);
- UI_draw_roundbox_gl_mode(GL_POLYGON, rect.xmin - 1, rect.ymin, rect.xmax + 1, rect.ymax + 1, 3.0f);
+ UI_draw_roundbox_4fv(true, rect.xmin - 1, rect.ymin, rect.xmax + 1, rect.ymax + 1, 3.0f, color);
}
- glaDrawPixelsSafe(rect.xmin, rect.ymin + 1, drawibuf->x, drawibuf->y,
- drawibuf->x, GL_RGBA, GL_UNSIGNED_BYTE, drawibuf->rect);
+ IMMDrawPixelsTexState state = immDrawPixelsTexSetup(GPU_SHADER_2D_IMAGE_COLOR);
+ immDrawPixelsTex(&state, rect.xmin, rect.ymin + 1, drawibuf->x, drawibuf->y, GL_RGBA, GL_UNSIGNED_BYTE, GL_LINEAR, drawibuf->rect, 1.0f, 1.0f, NULL);
/* draw cross for pixel position */
- glTranslatef(rect.xmin + scopes->track_pos[0], rect.ymin + scopes->track_pos[1], 0.f);
+ gpuTranslate2f(rect.xmin + scopes->track_pos[0], rect.ymin + scopes->track_pos[1]);
glScissor(ar->winrct.xmin + rect.xmin,
ar->winrct.ymin + rect.ymin,
BLI_rctf_size_x(&rect),
BLI_rctf_size_y(&rect));
- GPU_basic_shader_bind_enable(GPU_SHADER_LINE);
-
- for (int a = 0; a < 2; a++) {
- if (a == 1) {
- GPU_basic_shader_bind_enable(GPU_SHADER_STIPPLE);
- GPU_basic_shader_line_stipple(3, 0xAAAA);
- UI_ThemeColor(TH_SEL_MARKER);
- }
- else {
- UI_ThemeColor(TH_MARKER_OUTLINE);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int col = GWN_vertformat_attr_add(format, "color", GWN_COMP_F32, 4, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_FLAT_COLOR);
+
+ UI_GetThemeColor4fv(TH_SEL_MARKER, col_sel);
+ UI_GetThemeColor4fv(TH_MARKER_OUTLINE, col_outline);
+
+ /* Do stipple cross with geometry */
+ immBegin(GWN_PRIM_LINES, 7 * 2 * 2);
+ float pos_sel[8] = {-10.0f, -7.0f, -4.0f, -1.0f, 2.0f, 5.0f, 8.0f, 11.0f};
+ for (int axe = 0; axe < 2; ++axe) {
+ for (int i = 0; i < 7; ++i) {
+ float x1 = pos_sel[i] * (1 - axe);
+ float y1 = pos_sel[i] * axe;
+ float x2 = pos_sel[i + 1] * (1 - axe);
+ float y2 = pos_sel[i + 1] * axe;
+
+ if (i % 2 == 1)
+ immAttrib4fv(col, col_sel);
+ else
+ immAttrib4fv(col, col_outline);
+
+ immVertex2f(pos, x1, y1);
+ immVertex2f(pos, x2, y2);
}
-
- glBegin(GL_LINES);
- glVertex2f(-10.0f, 0.0f);
- glVertex2f(10.0f, 0.0f);
- glVertex2f(0.0f, -10.0f);
- glVertex2f(0.0f, 10.0f);
- glEnd();
}
+ immEnd();
- GPU_basic_shader_bind_disable(GPU_SHADER_LINE | GPU_SHADER_STIPPLE);
+ immUnbindProgram();
}
- glPopMatrix();
+ gpuPopMatrix();
ok = true;
}
if (!ok) {
- glColor4f(0.f, 0.f, 0.f, 0.3f);
+ float color[4] = {0.0f, 0.0f, 0.0f, 0.3f};
UI_draw_roundbox_corner_set(UI_CNR_ALL);
- UI_draw_roundbox_gl_mode(GL_POLYGON, rect.xmin - 1, rect.ymin, rect.xmax + 1, rect.ymax + 1, 3.0f);
+ UI_draw_roundbox_4fv(true, rect.xmin - 1, rect.ymin, rect.xmax + 1, rect.ymax + 1, 3.0f, color);
}
/* outline */
@@ -1643,26 +1889,31 @@ void ui_draw_but_NODESOCKET(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wcol
BLI_rcti_size_x(&scissor_new),
BLI_rcti_size_y(&scissor_new));
- glColor4ubv(but->col);
-
float x = 0.5f * (recti->xmin + recti->xmax);
float y = 0.5f * (recti->ymin + recti->ymax);
-
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor4ubv(but->col);
+
glEnable(GL_BLEND);
- glBegin(GL_POLYGON);
+ immBegin(GWN_PRIM_TRI_FAN, 16);
for (int a = 0; a < 16; a++)
- glVertex2f(x + size * si[a], y + size * co[a]);
- glEnd();
+ immVertex2f(pos, x + size * si[a], y + size * co[a]);
+ immEnd();
- glColor4ub(0, 0, 0, 150);
+ immUniformColor4ub(0, 0, 0, 150);
glLineWidth(1);
glEnable(GL_LINE_SMOOTH);
- glBegin(GL_LINE_LOOP);
+ immBegin(GWN_PRIM_LINE_LOOP, 16);
for (int a = 0; a < 16; a++)
- glVertex2f(x + size * si[a], y + size * co[a]);
- glEnd();
+ immVertex2f(pos, x + size * si[a], y + size * co[a]);
+ immEnd();
glDisable(GL_LINE_SMOOTH);
glDisable(GL_BLEND);
+
+ immUnbindProgram();
/* restore scissortest */
glScissor(scissor[0], scissor[1], scissor[2], scissor[3]);
@@ -1670,47 +1921,91 @@ void ui_draw_but_NODESOCKET(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wcol
/* ****************************************************** */
+/* TODO: high quality UI drop shadows using GLSL shader and single draw call
+ * would replace / modify the following 3 functions - merwin
+ */
-static void ui_shadowbox(float minx, float miny, float maxx, float maxy, float shadsize, unsigned char alpha)
+static void ui_shadowbox(unsigned pos, unsigned color, float minx, float miny, float maxx, float maxy, float shadsize, unsigned char alpha)
{
+ /* v1-_
+ * | -_v2
+ * | |
+ * | |
+ * | |
+ * v7_______v3____v4
+ * \ | /
+ * \ | _v5
+ * v8______v6_-
+ */
+ const float v1[2] = {maxx, maxy - 0.3f * shadsize};
+ const float v2[2] = {maxx + shadsize, maxy - 0.75f * shadsize};
+ const float v3[2] = {maxx, miny};
+ const float v4[2] = {maxx + shadsize, miny};
+
+ const float v5[2] = {maxx + 0.7f * shadsize, miny - 0.7f * shadsize};
+
+ const float v6[2] = {maxx, miny - shadsize};
+ const float v7[2] = {minx + 0.3f * shadsize, miny};
+ const float v8[2] = {minx + 0.5f * shadsize, miny - shadsize};
+
/* right quad */
- glColor4ub(0, 0, 0, alpha);
- glVertex2f(maxx, miny);
- glVertex2f(maxx, maxy - 0.3f * shadsize);
- glColor4ub(0, 0, 0, 0);
- glVertex2f(maxx + shadsize, maxy - 0.75f * shadsize);
- glVertex2f(maxx + shadsize, miny);
-
+ immAttrib4ub(color, 0, 0, 0, alpha);
+ immVertex2fv(pos, v3);
+ immVertex2fv(pos, v1);
+ immAttrib4ub(color, 0, 0, 0, 0);
+ immVertex2fv(pos, v2);
+
+ immVertex2fv(pos, v2);
+ immVertex2fv(pos, v4);
+ immAttrib4ub(color, 0, 0, 0, alpha);
+ immVertex2fv(pos, v3);
+
/* corner shape */
- glColor4ub(0, 0, 0, alpha);
- glVertex2f(maxx, miny);
- glColor4ub(0, 0, 0, 0);
- glVertex2f(maxx + shadsize, miny);
- glVertex2f(maxx + 0.7f * shadsize, miny - 0.7f * shadsize);
- glVertex2f(maxx, miny - shadsize);
-
+ /* immAttrib4ub(color, 0, 0, 0, alpha); */ /* Not needed, done above in previous tri */
+ immVertex2fv(pos, v3);
+ immAttrib4ub(color, 0, 0, 0, 0);
+ immVertex2fv(pos, v4);
+ immVertex2fv(pos, v5);
+
+ immVertex2fv(pos, v5);
+ immVertex2fv(pos, v6);
+ immAttrib4ub(color, 0, 0, 0, alpha);
+ immVertex2fv(pos, v3);
+
/* bottom quad */
- glColor4ub(0, 0, 0, alpha);
- glVertex2f(minx + 0.3f * shadsize, miny);
- glVertex2f(maxx, miny);
- glColor4ub(0, 0, 0, 0);
- glVertex2f(maxx, miny - shadsize);
- glVertex2f(minx + 0.5f * shadsize, miny - shadsize);
+ /* immAttrib4ub(color, 0, 0, 0, alpha); */ /* Not needed, done above in previous tri */
+ immVertex2fv(pos, v3);
+ immAttrib4ub(color, 0, 0, 0, 0);
+ immVertex2fv(pos, v6);
+ immVertex2fv(pos, v8);
+
+ immVertex2fv(pos, v8);
+ immAttrib4ub(color, 0, 0, 0, alpha);
+ immVertex2fv(pos, v7);
+ immVertex2fv(pos, v3);
}
void UI_draw_box_shadow(unsigned char alpha, float minx, float miny, float maxx, float maxy)
{
glEnable(GL_BLEND);
-
- glBegin(GL_QUADS);
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 4, GWN_FETCH_INT_TO_FLOAT_UNIT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_SMOOTH_COLOR);
+
+ immBegin(GWN_PRIM_TRIS, 54);
/* accumulated outline boxes to make shade not linear, is more pleasant */
- ui_shadowbox(minx, miny, maxx, maxy, 11.0, (20 * alpha) >> 8);
- ui_shadowbox(minx, miny, maxx, maxy, 7.0, (40 * alpha) >> 8);
- ui_shadowbox(minx, miny, maxx, maxy, 5.0, (80 * alpha) >> 8);
-
- glEnd();
+ ui_shadowbox(pos, color, minx, miny, maxx, maxy, 11.0, (20 * alpha) >> 8);
+ ui_shadowbox(pos, color, minx, miny, maxx, maxy, 7.0, (40 * alpha) >> 8);
+ ui_shadowbox(pos, color, minx, miny, maxx, maxy, 5.0, (80 * alpha) >> 8);
+ immEnd();
+
+ immUnbindProgram();
+
glDisable(GL_BLEND);
}
@@ -1719,8 +2014,8 @@ void ui_draw_dropshadow(const rctf *rct, float radius, float aspect, float alpha
{
float rad;
- if (radius > (BLI_rctf_size_y(rct) - 10.0f) / 2.0f)
- rad = (BLI_rctf_size_y(rct) - 10.0f) / 2.0f;
+ if (radius > (BLI_rctf_size_y(rct) - 10.0f) * 0.5f)
+ rad = (BLI_rctf_size_y(rct) - 10.0f) * 0.5f;
else
rad = radius;
@@ -1741,29 +2036,16 @@ void ui_draw_dropshadow(const rctf *rct, float radius, float aspect, float alpha
float calpha = dalpha;
for (; i--; a -= aspect) {
/* alpha ranges from 2 to 20 or so */
- glColor4f(0.0f, 0.0f, 0.0f, calpha);
+ float color[4] = {0.0f, 0.0f, 0.0f, calpha};
+ UI_draw_roundbox_4fv(true, rct->xmin - a, rct->ymin - a, rct->xmax + a, rct->ymax - 10.0f + a, rad + a, color);
calpha += dalpha;
-
- UI_draw_roundbox_gl_mode(GL_POLYGON, rct->xmin - a, rct->ymin - a, rct->xmax + a, rct->ymax - 10.0f + a, rad + a);
}
/* outline emphasis */
glEnable(GL_LINE_SMOOTH);
- glColor4ub(0, 0, 0, 100);
- UI_draw_roundbox_gl_mode(GL_LINE_LOOP, rct->xmin - 0.5f, rct->ymin - 0.5f, rct->xmax + 0.5f, rct->ymax + 0.5f, radius + 0.5f);
+ float color[4] = {0.0f, 0.0f, 0.0f, 0.4f};
+ UI_draw_roundbox_4fv(false, rct->xmin - 0.5f, rct->ymin - 0.5f, rct->xmax + 0.5f, rct->ymax + 0.5f, radius + 0.5f, color);
glDisable(GL_LINE_SMOOTH);
glDisable(GL_BLEND);
}
-
-/**
- * Reset GL state (keep minimal).
- *
- * \note Blender's internal code doesn't assume these are reset,
- * but external callbacks may depend on their state.
- */
-void UI_reinit_gl_state(void)
-{
- glLineWidth(1.0f);
- glPointSize(1.0f);
-}
diff --git a/source/blender/editors/interface/interface_eyedropper.c b/source/blender/editors/interface/interface_eyedropper.c
index 381d9f3cc42..8cb55b724fb 100644
--- a/source/blender/editors/interface/interface_eyedropper.c
+++ b/source/blender/editors/interface/interface_eyedropper.c
@@ -135,8 +135,8 @@ void eyedropper_draw_cursor_text(const struct bContext *C, const ARegion *ar, co
wmWindow *win = CTX_wm_window(C);
int x = win->eventstate->x;
int y = win->eventstate->y;
- const unsigned char fg[4] = {255, 255, 255, 255};
- const unsigned char bg[4] = {0, 0, 0, 50};
+ const float col_fg[4] = {1.0f, 1.0f, 1.0f, 1.0f};
+ const float col_bg[4] = {0.0f, 0.0f, 0.0f, 0.2f};
if ((name[0] == '\0') ||
@@ -150,7 +150,7 @@ void eyedropper_draw_cursor_text(const struct bContext *C, const ARegion *ar, co
y += U.widget_unit;
- UI_fontstyle_draw_simple_backdrop(fstyle, x, y, name, fg, bg);
+ UI_fontstyle_draw_simple_backdrop(fstyle, x, y, name, col_fg, col_bg);
}
@@ -165,8 +165,8 @@ void eyedropper_draw_cursor_text(const struct bContext *C, const ARegion *ar, co
*/
uiBut *eyedropper_get_property_button_under_mouse(bContext *C, const wmEvent *event)
{
- wmWindow *win = CTX_wm_window(C);
- ScrArea *sa = BKE_screen_find_area_xy(win->screen, SPACE_TYPE_ANY, event->x, event->y);
+ bScreen *screen = CTX_wm_screen(C);
+ ScrArea *sa = BKE_screen_find_area_xy(screen, SPACE_TYPE_ANY, event->x, event->y);
ARegion *ar = BKE_area_find_region_xy(sa, RGN_TYPE_ANY, event->x, event->y);
uiBut *but = ui_but_find_mouse_over(ar, event);
diff --git a/source/blender/editors/interface/interface_eyedropper_color.c b/source/blender/editors/interface/interface_eyedropper_color.c
index 052da74623f..f3301d55284 100644
--- a/source/blender/editors/interface/interface_eyedropper_color.c
+++ b/source/blender/editors/interface/interface_eyedropper_color.c
@@ -131,8 +131,8 @@ static void eyedropper_exit(bContext *C, wmOperator *op)
void eyedropper_color_sample_fl(bContext *C, int mx, int my, float r_col[3])
{
/* we could use some clever */
- wmWindow *win = CTX_wm_window(C);
- ScrArea *sa = BKE_screen_find_area_xy(win->screen, SPACE_TYPE_ANY, mx, my);
+ bScreen *screen = CTX_wm_screen(C);
+ ScrArea *sa = BKE_screen_find_area_xy(screen, SPACE_TYPE_ANY, mx, my);
const char *display_device = CTX_data_scene(C)->display_settings.display_device;
struct ColorManagedDisplay *display = IMB_colormanagement_display_get_named(display_device);
diff --git a/source/blender/editors/interface/interface_eyedropper_datablock.c b/source/blender/editors/interface/interface_eyedropper_datablock.c
index 416022a9dd0..f814048c0c0 100644
--- a/source/blender/editors/interface/interface_eyedropper_datablock.c
+++ b/source/blender/editors/interface/interface_eyedropper_datablock.c
@@ -150,8 +150,8 @@ static void datadropper_exit(bContext *C, wmOperator *op)
static void datadropper_id_sample_pt(bContext *C, DataDropper *ddr, int mx, int my, ID **r_id)
{
/* we could use some clever */
- wmWindow *win = CTX_wm_window(C);
- ScrArea *sa = BKE_screen_find_area_xy(win->screen, -1, mx, my);
+ bScreen *screen = CTX_wm_screen(C);
+ ScrArea *sa = BKE_screen_find_area_xy(screen, -1, mx, my);
ScrArea *area_prev = CTX_wm_area(C);
ARegion *ar_prev = CTX_wm_region(C);
diff --git a/source/blender/editors/interface/interface_eyedropper_depth.c b/source/blender/editors/interface/interface_eyedropper_depth.c
index b2ba7594fcb..6e85d091fdb 100644
--- a/source/blender/editors/interface/interface_eyedropper_depth.c
+++ b/source/blender/editors/interface/interface_eyedropper_depth.c
@@ -44,6 +44,8 @@
#include "BKE_screen.h"
#include "BKE_unit.h"
+#include "DEG_depsgraph.h"
+
#include "RNA_access.h"
#include "UI_interface.h"
@@ -151,9 +153,10 @@ static void depthdropper_exit(bContext *C, wmOperator *op)
static void depthdropper_depth_sample_pt(bContext *C, DepthDropper *ddr, int mx, int my, float *r_depth)
{
/* we could use some clever */
- wmWindow *win = CTX_wm_window(C);
- ScrArea *sa = BKE_screen_find_area_xy(win->screen, SPACE_TYPE_ANY, mx, my);
- Scene *scene = win->screen->scene;
+ bScreen *screen = CTX_wm_screen(C);
+ ScrArea *sa = BKE_screen_find_area_xy(screen, SPACE_TYPE_ANY, mx, my);
+ Scene *scene = CTX_data_scene(C);
+
UnitSettings *unit = &scene->unit;
const bool do_split = (unit->flag & USER_UNIT_OPT_SPLIT) != 0;
@@ -166,6 +169,7 @@ static void depthdropper_depth_sample_pt(bContext *C, DepthDropper *ddr, int mx,
if (sa->spacetype == SPACE_VIEW3D) {
ARegion *ar = BKE_area_find_region_xy(sa, RGN_TYPE_WINDOW, mx, my);
if (ar) {
+ struct Depsgraph *graph = CTX_data_depsgraph(C);
View3D *v3d = sa->spacedata.first;
RegionView3D *rv3d = ar->regiondata;
/* weak, we could pass in some reference point */
@@ -175,6 +179,9 @@ static void depthdropper_depth_sample_pt(bContext *C, DepthDropper *ddr, int mx,
my - ar->winrct.ymin};
float co[3];
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
CTX_wm_area_set(C, sa);
CTX_wm_region_set(C, ar);
@@ -183,7 +190,7 @@ static void depthdropper_depth_sample_pt(bContext *C, DepthDropper *ddr, int mx,
view3d_operator_needs_opengl(C);
- if (ED_view3d_autodist(scene, ar, v3d, mval, co, true, NULL)) {
+ if (ED_view3d_autodist(&eval_ctx, graph, ar, v3d, mval, co, true, NULL)) {
const float mval_center_fl[2] = {
(float)ar->winx / 2,
(float)ar->winy / 2};
diff --git a/source/blender/editors/interface/interface_eyedropper_driver.c b/source/blender/editors/interface/interface_eyedropper_driver.c
index 1b7407c87dd..50a8473135a 100644
--- a/source/blender/editors/interface/interface_eyedropper_driver.c
+++ b/source/blender/editors/interface/interface_eyedropper_driver.c
@@ -42,7 +42,9 @@
#include "BKE_context.h"
#include "BKE_animsys.h"
-#include "BKE_depsgraph.h"
+
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
#include "RNA_access.h"
#include "RNA_define.h"
@@ -130,8 +132,8 @@ static void driverdropper_sample(bContext *C, wmOperator *op, const wmEvent *eve
if (success) {
/* send updates */
UI_context_update_anim_flag(C);
- DAG_relations_tag_update(CTX_data_main(C));
- DAG_id_tag_update(ddr->ptr.id.data, OB_RECALC_OB | OB_RECALC_DATA);
+ DEG_relations_tag_update(CTX_data_main(C));
+ DEG_id_tag_update(ddr->ptr.id.data, OB_RECALC_OB | OB_RECALC_DATA);
WM_event_add_notifier(C, NC_ANIMATION | ND_FCURVES_ORDER, NULL); // XXX
}
}
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index 47de598c028..3a01ff16297 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -46,6 +46,7 @@
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
+#include "DNA_workspace_types.h"
#include "BLI_math.h"
#include "BLI_listbase.h"
@@ -73,6 +74,8 @@
#include "BKE_unit.h"
#include "BKE_paint.h"
+#include "DEG_depsgraph.h"
+
#include "ED_screen.h"
#include "ED_util.h"
#include "ED_keyframing.h"
@@ -2115,6 +2118,7 @@ static void ui_apply_but(bContext *C, uiBlock *block, uiBut *but, uiHandleButton
break;
case UI_BTYPE_ROW:
case UI_BTYPE_LISTROW:
+ case UI_BTYPE_TAB:
ui_apply_but_ROW(C, block, but, data);
break;
case UI_BTYPE_SCROLL:
@@ -3167,6 +3171,9 @@ static void ui_textedit_end(bContext *C, uiBut *but, uiHandleButtonData *data)
ui_searchbox_free(C, data->searchbox);
data->searchbox = NULL;
+ if (but->free_search_arg) {
+ MEM_SAFE_FREE(but->search_arg);
+ }
}
but->editstr = NULL;
@@ -3872,6 +3879,18 @@ static int ui_do_but_KEYEVT(
return WM_UI_HANDLER_CONTINUE;
}
+static int ui_do_but_TAB(bContext *C, uiBut *but, uiHandleButtonData *data, const wmEvent *event)
+{
+ if (data->state == BUTTON_STATE_HIGHLIGHT) {
+ if (ELEM(event->type, LEFTMOUSE, PADENTER, RETKEY) && event->val == KM_RELEASE) {
+ button_activate_state(C, but, BUTTON_STATE_EXIT);
+ return WM_UI_HANDLER_CONTINUE;
+ }
+ }
+
+ return WM_UI_HANDLER_CONTINUE;
+}
+
static bool ui_but_is_mouse_over_icon_extra(const ARegion *region, uiBut *but, const int mouse_xy[2])
{
int x = mouse_xy[0], y = mouse_xy[1];
@@ -5215,8 +5234,10 @@ static int ui_do_but_COLOR(
if ((int)(but->a1) == UI_PALETTE_COLOR) {
if (!event->ctrl) {
float color[3];
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Scene *scene = CTX_data_scene(C);
- Paint *paint = BKE_paint_get_active(scene);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Paint *paint = BKE_paint_get_active(scene, view_layer, workspace->object_mode);
Brush *brush = BKE_paint_brush(paint);
if (brush->flag & BRUSH_USE_GRADIENT) {
@@ -6132,7 +6153,9 @@ static int ui_do_but_CURVE(
{
int mx, my, a;
bool changed = false;
+
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
mx = event->x;
my = event->y;
@@ -6247,6 +6270,7 @@ static int ui_do_but_CURVE(
}
else if (event->type == LEFTMOUSE && event->val != KM_PRESS) {
if (data->dragsel != -1) {
+ const WorkSpace *workspace = CTX_wm_workspace(C);
CurveMapping *cumap = (CurveMapping *)but->poin;
CurveMap *cuma = cumap->cm + cumap->cur;
CurveMapPoint *cmp = cuma->curve;
@@ -6261,7 +6285,7 @@ static int ui_do_but_CURVE(
}
else {
curvemapping_changed(cumap, true); /* remove doubles */
- BKE_paint_invalidate_cursor_overlay(scene, cumap);
+ BKE_paint_invalidate_cursor_overlay(scene, view_layer, cumap, workspace->object_mode);
}
}
@@ -6767,6 +6791,8 @@ static bool ui_but_menu(bContext *C, uiBut *but)
MenuType *mt = WM_menutype_find("WM_MT_button_context", true);
bool is_array, is_array_component;
uiStringInfo label = {BUT_GET_LABEL, NULL};
+ wmOperatorType *ot;
+ PointerRNA op_ptr;
/* if ((but->rnapoin.data && but->rnaprop) == 0 && but->optype == NULL)*/
/* return 0;*/
@@ -6793,11 +6819,11 @@ static bool ui_but_menu(bContext *C, uiBut *but)
const PropertySubType subtype = RNA_property_subtype(prop);
bool is_anim = RNA_property_animateable(ptr, prop);
bool is_editable = RNA_property_editable(ptr, prop);
+ bool is_overridable;
/*bool is_idprop = RNA_property_is_idprop(prop);*/ /* XXX does not work as expected, not strictly needed */
bool is_set = RNA_property_is_set(ptr, prop);
- /* Set the (button_pointer, button_prop) and pointer data for Python access to the hovered ui element. */
- uiLayoutSetContextFromBut(layout, but);
+ RNA_property_override_status(ptr, prop, -1, &is_overridable, NULL, NULL, NULL);
/* second slower test, saved people finding keyframe items in menus when its not possible */
if (is_anim)
@@ -6926,11 +6952,57 @@ static bool ui_but_menu(bContext *C, uiBut *but)
ICON_NONE, "ANIM_OT_keyingset_button_remove");
}
}
-
+
+ if (is_overridable) {
+ /* Override Operators */
+ uiItemS(layout);
+
+ if (but->flag & UI_BUT_OVERRIDEN) {
+ if (is_array_component) {
+ ot = WM_operatortype_find("UI_OT_override_type_set_button", false);
+ uiItemFullO_ptr(layout, ot, "Overrides Type", ICON_NONE,
+ NULL, WM_OP_INVOKE_DEFAULT, 0, &op_ptr);
+ RNA_boolean_set(&op_ptr, "all", true);
+ uiItemFullO_ptr(layout, ot, "Single Override Type", ICON_NONE,
+ NULL, WM_OP_INVOKE_DEFAULT, 0, &op_ptr);
+ RNA_boolean_set(&op_ptr, "all", false);
+
+ uiItemBooleanO(layout, CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Remove Overrides"),
+ ICON_X, "UI_OT_override_remove_button", "all", true);
+ uiItemBooleanO(layout, CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Remove Single Override"),
+ ICON_X, "UI_OT_override_remove_button", "all", false);
+ }
+ else {
+ uiItemFullO(layout, "UI_OT_override_type_set_button", "Override Type", ICON_NONE,
+ NULL, WM_OP_INVOKE_DEFAULT, 0, &op_ptr);
+ RNA_boolean_set(&op_ptr, "all", false);
+
+ uiItemBooleanO(layout, CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Remove Override"),
+ ICON_X, "UI_OT_override_remove_button", "all", true);
+ }
+ }
+ else {
+ if (is_array_component) {
+ ot = WM_operatortype_find("UI_OT_override_type_set_button", false);
+ uiItemFullO_ptr(layout, ot, "Define Overrides", ICON_NONE,
+ NULL, WM_OP_INVOKE_DEFAULT, 0, &op_ptr);
+ RNA_boolean_set(&op_ptr, "all", true);
+ uiItemFullO_ptr(layout, ot, "Define Single Override", ICON_NONE,
+ NULL, WM_OP_INVOKE_DEFAULT, 0, &op_ptr);
+ RNA_boolean_set(&op_ptr, "all", false);
+ }
+ else {
+ uiItemFullO(layout, "UI_OT_override_type_set_button", "Define Override", ICON_NONE,
+ NULL, WM_OP_INVOKE_DEFAULT, 0, &op_ptr);
+ RNA_boolean_set(&op_ptr, "all", false);
+ }
+ }
+ }
+
uiItemS(layout);
-
+
/* Property Operators */
-
+
/* Copy Property Value
* Paste Property Value */
@@ -7135,6 +7207,9 @@ static int ui_do_button(bContext *C, uiBlock *block, uiBut *but, const wmEvent *
case UI_BTYPE_HOTKEY_EVENT:
retval = ui_do_but_HOTKEYEVT(C, but, data, event);
break;
+ case UI_BTYPE_TAB:
+ retval = ui_do_but_TAB(C, but, data, event);
+ break;
case UI_BTYPE_BUT_TOGGLE:
case UI_BTYPE_TOGGLE:
case UI_BTYPE_ICON_TOGGLE:
@@ -7652,7 +7727,7 @@ void UI_but_tooltip_refresh(bContext *C, uiBut *but)
{
uiHandleButtonData *data = but->active;
if (data) {
- bScreen *sc = data->window->screen;
+ bScreen *sc = WM_window_get_active_screen(data->window);
if (sc->tool_tip && sc->tool_tip->region) {
WM_tooltip_refresh(C, data->window);
}
@@ -8208,6 +8283,7 @@ void UI_context_update_anim_flag(const bContext *C)
for (block = ar->uiblocks.first; block; block = block->next) {
for (but = block->buttons.first; but; but = but->next) {
ui_but_anim_flag(but, (scene) ? scene->r.cfra : 0.0f);
+ ui_but_override_flag(but);
ED_region_tag_redraw(ar);
if (but->active) {
diff --git a/source/blender/editors/interface/interface_icons.c b/source/blender/editors/interface/interface_icons.c
index 0357fc8ff01..f2798cedae1 100644
--- a/source/blender/editors/interface/interface_icons.c
+++ b/source/blender/editors/interface/interface_icons.c
@@ -33,8 +33,8 @@
#include "MEM_guardedalloc.h"
-#include "GPU_extensions.h"
-#include "GPU_basic_shader.h"
+#include "GPU_draw.h"
+#include "GPU_immediate.h"
#include "BLI_blenlib.h"
#include "BLI_utildefines.h"
@@ -46,6 +46,7 @@
#include "DNA_object_types.h"
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
+#include "DNA_workspace_types.h"
#include "RNA_access.h"
#include "RNA_enum_types.h"
@@ -59,9 +60,10 @@
#include "IMB_imbuf_types.h"
#include "IMB_thumbs.h"
-#include "BIF_gl.h"
#include "BIF_glutil.h"
+#include "DEG_depsgraph.h"
+
#include "ED_datafiles.h"
#include "ED_keyframes_draw.h"
#include "ED_render.h"
@@ -224,13 +226,17 @@ static void vicon_small_tri_right_draw(int x, int y, int w, int UNUSED(h), float
viconutil_set_point(pts[1], cx - d2, cy - d);
viconutil_set_point(pts[2], cx + d2, cy);
- glColor4f(0.2f, 0.2f, 0.2f, alpha);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor4f(0.2f, 0.2f, 0.2f, alpha);
+
+ immBegin(GWN_PRIM_TRIS, 3);
+ immVertex2iv(pos, pts[0]);
+ immVertex2iv(pos, pts[1]);
+ immVertex2iv(pos, pts[2]);
+ immEnd();
- glBegin(GL_TRIANGLES);
- glVertex2iv(pts[0]);
- glVertex2iv(pts[1]);
- glVertex2iv(pts[2]);
- glEnd();
+ immUnbindProgram();
}
static void vicon_keytype_draw_wrapper(int x, int y, int w, int h, float alpha, short key_type)
@@ -239,7 +245,6 @@ static void vicon_keytype_draw_wrapper(int x, int y, int w, int h, float alpha,
* (since we're doing this offscreen, free from any particular space_id)
*/
struct bThemeState theme_state;
- int xco, yco;
UI_Theme_Store(&theme_state);
UI_SetTheme(SPACE_ACTION, RGN_TYPE_WINDOW);
@@ -248,16 +253,30 @@ static void vicon_keytype_draw_wrapper(int x, int y, int w, int h, float alpha,
* while the draw_keyframe_shape() function needs the midpoint for
* the keyframe
*/
- xco = x + w / 2;
- yco = y + h / 2;
-
+ int xco = x + w / 2;
+ int yco = y + h / 2;
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos_id = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int size_id = GWN_vertformat_attr_add(format, "size", GWN_COMP_F32, 1, GWN_FETCH_FLOAT);
+ unsigned int color_id = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 4, GWN_FETCH_INT_TO_FLOAT_UNIT);
+ unsigned int outline_color_id = GWN_vertformat_attr_add(format, "outlineColor", GWN_COMP_U8, 4, GWN_FETCH_INT_TO_FLOAT_UNIT);
+
+ immBindBuiltinProgram(GPU_SHADER_KEYFRAME_DIAMOND);
+ GPU_enable_program_point_size();
+ immBegin(GWN_PRIM_POINTS, 1);
+
/* draw keyframe
- * - xscale: 1.0 (since there's no timeline scaling to compensate for)
- * - yscale: 0.3 * h (found out experimentally... dunno why!)
+ * - size: 0.6 * h (found out experimentally... dunno why!)
* - sel: true (so that "keyframe" state shows the iconic yellow icon)
*/
- draw_keyframe_shape(xco, yco, 1.0f, 0.3f * h, true, key_type, KEYFRAME_SHAPE_BOTH, alpha);
-
+ draw_keyframe_shape(xco, yco, 0.6f * h, true, key_type, KEYFRAME_SHAPE_BOTH, alpha,
+ pos_id, size_id, color_id, outline_color_id);
+
+ immEnd();
+ GPU_disable_program_point_size();
+ immUnbindProgram();
+
UI_Theme_Restore(&theme_state);
}
@@ -290,7 +309,7 @@ static void vicon_colorset_draw(int index, int x, int y, int w, int h, float UNU
{
bTheme *btheme = UI_GetTheme();
ThemeWireColor *cs = &btheme->tarm[index];
-
+
/* Draw three bands of color: One per color
* x-----a-----b-----c
* | N | S | A |
@@ -299,19 +318,24 @@ static void vicon_colorset_draw(int index, int x, int y, int w, int h, float UNU
const int a = x + w / 3;
const int b = x + w / 3 * 2;
const int c = x + w;
-
+
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
/* XXX: Include alpha into this... */
/* normal */
- glColor3ubv((unsigned char *)cs->solid);
- glRecti(x, y, a, y + h);
-
+ immUniformColor3ubv((unsigned char *)cs->solid);
+ immRecti(pos, x, y, a, y + h);
+
/* selected */
- glColor3ubv((unsigned char *)cs->select);
- glRecti(a, y, b, y + h);
-
+ immUniformColor3ubv((unsigned char *)cs->select);
+ immRecti(pos, a, y, b, y + h);
+
/* active */
- glColor3ubv((unsigned char *)cs->active);
- glRecti(b, y, c, y + h);
+ immUniformColor3ubv((unsigned char *)cs->active);
+ immRecti(pos, b, y, c, y + h);
+
+ immUnbindProgram();
}
#define DEF_VICON_COLORSET_DRAW_NTH(prefix, index) \
@@ -504,8 +528,12 @@ static void init_internal_icons(void)
icongltex.id = 0;
}
+#if 0 /* should be a compile-time check (if needed at all) */
/* we only use a texture for cards with non-power of two */
if (GPU_full_non_power_of_two_support()) {
+#else
+ {
+#endif
glGenTextures(1, &icongltex.id);
if (icongltex.id) {
@@ -533,11 +561,6 @@ static void init_internal_icons(void)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glBindTexture(GL_TEXTURE_2D, 0);
-
- if (glGetError() == GL_OUT_OF_MEMORY) {
- glDeleteTextures(1, &icongltex.id);
- icongltex.id = 0;
- }
}
}
}
@@ -851,12 +874,15 @@ void ui_icon_ensure_deferred(const bContext *C, const int icon_id, const bool bi
{
ID *id = (icon->type != 0) ? icon->obj : NULL;
PreviewImage *prv = id ? BKE_previewimg_id_ensure(id) : icon->obj;
+ /* Using jobs for screen previews crashes due to offscreen rendering.
+ * XXX would be nicer if PreviewImage could store if it supports jobs */
+ const bool use_jobs = !id || (GS(id->name) != ID_SCR);
if (prv) {
const int size = big ? ICON_SIZE_PREVIEW : ICON_SIZE_ICON;
if (id || (prv->tag & PRV_TAG_DEFFERED) != 0) {
- ui_id_preview_image_render_size(C, NULL, id, prv, size, true);
+ ui_id_preview_image_render_size(C, NULL, id, prv, size, use_jobs);
}
}
break;
@@ -936,7 +962,7 @@ PreviewImage *UI_icon_to_preview(int icon_id)
}
static void icon_draw_rect(float x, float y, int w, int h, float UNUSED(aspect), int rw, int rh,
- unsigned int *rect, float alpha, const float rgb[3], const bool is_preview)
+ unsigned int *rect, float alpha, const float rgb[3], const bool UNUSED(is_preview))
{
ImBuf *ima = NULL;
int draw_w = w;
@@ -950,15 +976,13 @@ static void icon_draw_rect(float x, float y, int w, int h, float UNUSED(aspect),
BLI_assert(!"invalid icon size");
return;
}
-
/* modulate color */
- if (alpha != 1.0f)
- glPixelTransferf(GL_ALPHA_SCALE, alpha);
+ float col[4] = {1.0f, 1.0f, 1.0f, alpha};
if (rgb) {
- glPixelTransferf(GL_RED_SCALE, rgb[0]);
- glPixelTransferf(GL_GREEN_SCALE, rgb[1]);
- glPixelTransferf(GL_BLUE_SCALE, rgb[2]);
+ col[0] = rgb[0];
+ col[1] = rgb[1];
+ col[2] = rgb[2];
}
/* rect contains image in 'rendersize', we only scale if needed */
@@ -984,31 +1008,12 @@ static void icon_draw_rect(float x, float y, int w, int h, float UNUSED(aspect),
}
/* draw */
- if (is_preview) {
- glaDrawPixelsSafe(draw_x, draw_y, draw_w, draw_h, draw_w, GL_RGBA, GL_UNSIGNED_BYTE, rect);
- }
- else {
- int bound_options;
- GPU_BASIC_SHADER_DISABLE_AND_STORE(bound_options);
-
- glRasterPos2f(draw_x, draw_y);
- glDrawPixels(draw_w, draw_h, GL_RGBA, GL_UNSIGNED_BYTE, rect);
-
- GPU_BASIC_SHADER_ENABLE_AND_RESTORE(bound_options);
- }
+ IMMDrawPixelsTexState state = immDrawPixelsTexSetup(GPU_SHADER_2D_IMAGE_COLOR);
+ immDrawPixelsTex(&state, draw_x, draw_y, draw_w, draw_h, GL_RGBA, GL_UNSIGNED_BYTE, GL_NEAREST, rect,
+ 1.0f, 1.0f, col);
if (ima)
IMB_freeImBuf(ima);
-
- /* restore color */
- if (alpha != 0.0f)
- glPixelTransferf(GL_ALPHA_SCALE, 1.0f);
-
- if (rgb) {
- glPixelTransferf(GL_RED_SCALE, 1.0f);
- glPixelTransferf(GL_GREEN_SCALE, 1.0f);
- glPixelTransferf(GL_BLUE_SCALE, 1.0f);
- }
}
static void icon_draw_texture(
@@ -1017,38 +1022,39 @@ static void icon_draw_texture(
{
float x1, x2, y1, y2;
- if (rgb) glColor4f(rgb[0], rgb[1], rgb[2], alpha);
- else glColor4f(alpha, alpha, alpha, alpha);
-
x1 = ix * icongltex.invw;
x2 = (ix + ih) * icongltex.invw;
y1 = iy * icongltex.invh;
y2 = (iy + ih) * icongltex.invh;
- GPU_basic_shader_bind(GPU_SHADER_TEXTURE_2D | GPU_SHADER_USE_COLOR);
glBindTexture(GL_TEXTURE_2D, icongltex.id);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int texCoord = GWN_vertformat_attr_add(format, "texCoord", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_IMAGE_COLOR);
+ if (rgb) immUniformColor3fvAlpha(rgb, alpha);
+ else immUniformColor4f(alpha, alpha, alpha, alpha);
- /* sharper downscaling, has no effect when scale matches with a mip level */
- glTexEnvf(GL_TEXTURE_FILTER_CONTROL, GL_TEXTURE_LOD_BIAS, -0.5f);
+ immUniform1i("image", 0);
- glBegin(GL_QUADS);
- glTexCoord2f(x1, y1);
- glVertex2f(x, y);
+ immBegin(GWN_PRIM_TRI_STRIP, 4);
+ immAttrib2f(texCoord, x1, y2);
+ immVertex2f(pos, x, y + h);
- glTexCoord2f(x2, y1);
- glVertex2f(x + w, y);
+ immAttrib2f(texCoord, x1, y1);
+ immVertex2f(pos, x, y);
- glTexCoord2f(x2, y2);
- glVertex2f(x + w, y + h);
+ immAttrib2f(texCoord, x2, y2);
+ immVertex2f(pos, x + w, y + h);
- glTexCoord2f(x1, y2);
- glVertex2f(x, y + h);
- glEnd();
+ immAttrib2f(texCoord, x2, y1);
+ immVertex2f(pos, x + w, y);
+ immEnd();
- glTexEnvf(GL_TEXTURE_FILTER_CONTROL, GL_TEXTURE_LOD_BIAS, 0.0f);
+ immUnbindProgram();
glBindTexture(GL_TEXTURE_2D, 0);
- GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
}
/* Drawing size for preview images */
@@ -1162,7 +1168,7 @@ void UI_id_icon_render(const bContext *C, Scene *scene, ID *id, const bool big,
}
}
-static void ui_id_brush_render(const bContext *C, ID *id)
+static void ui_id_icon_render(const bContext *C, ID *id, bool use_jobs)
{
PreviewImage *pi = BKE_previewimg_id_ensure(id);
enum eIconSizes i;
@@ -1174,7 +1180,7 @@ static void ui_id_brush_render(const bContext *C, ID *id)
/* check if rect needs to be created; changed
* only set by dynamic icons */
if (((pi->flag[i] & PRV_CHANGED) || !pi->rect[i])) {
- icon_set_image(C, NULL, id, pi, i, true);
+ icon_set_image(C, NULL, id, pi, i, use_jobs);
pi->flag[i] &= ~PRV_CHANGED;
}
}
@@ -1187,9 +1193,10 @@ static int ui_id_brush_get_icon(const bContext *C, ID *id)
if (br->flag & BRUSH_CUSTOM_ICON) {
BKE_icon_id_ensure(id);
- ui_id_brush_render(C, id);
+ ui_id_icon_render(C, id, true);
}
else {
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Object *ob = CTX_data_active_object(C);
SpaceImage *sima;
const EnumPropertyItem *items = NULL;
@@ -1200,11 +1207,11 @@ static int ui_id_brush_get_icon(const bContext *C, ID *id)
* checking various context stuff here */
if (CTX_wm_view3d(C) && ob) {
- if (ob->mode & OB_MODE_SCULPT)
+ if (workspace->object_mode & OB_MODE_SCULPT)
mode = OB_MODE_SCULPT;
- else if (ob->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT))
+ else if (workspace->object_mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT))
mode = OB_MODE_VERTEX_PAINT;
- else if (ob->mode & OB_MODE_TEXTURE_PAINT)
+ else if (workspace->object_mode & OB_MODE_TEXTURE_PAINT)
mode = OB_MODE_TEXTURE_PAINT;
}
else if ((sima = CTX_wm_space_image(C)) &&
@@ -1234,6 +1241,15 @@ static int ui_id_brush_get_icon(const bContext *C, ID *id)
return id->icon_id;
}
+static int ui_id_screen_get_icon(const bContext *C, ID *id)
+{
+ BKE_icon_id_ensure(id);
+ /* Don't use jobs here, offscreen rendering doesn't like this and crashes. */
+ ui_id_icon_render(C, id, false);
+
+ return id->icon_id;
+}
+
int ui_id_icon_get(const bContext *C, ID *id, const bool big)
{
int iconid = 0;
@@ -1252,6 +1268,9 @@ int ui_id_icon_get(const bContext *C, ID *id, const bool big)
/* checks if not exists, or changed */
UI_id_icon_render(C, NULL, id, big, true);
break;
+ case ID_SCR:
+ iconid = ui_id_screen_get_icon(C, id);
+ break;
default:
break;
}
@@ -1344,6 +1363,8 @@ int UI_idcode_icon_get(const int idcode)
return ICON_COLOR; /* TODO! this would need its own icon! */
case ID_PC:
return ICON_CURVE_BEZCURVE; /* TODO! this would need its own icon! */
+ case ID_LP:
+ return ICON_RADIO;
case ID_SCE:
return ICON_SCENE_DATA;
case ID_SPK:
@@ -1388,6 +1409,11 @@ void UI_icon_draw(float x, float y, int icon_id)
UI_icon_draw_aspect(x, y, icon_id, 1.0f / UI_DPI_FAC, 1.0f);
}
+void UI_icon_draw_alpha(float x, float y, int icon_id, float alpha)
+{
+ UI_icon_draw_aspect(x, y, icon_id, 1.0f / UI_DPI_FAC, alpha);
+}
+
void UI_icon_draw_size(float x, float y, int size, int icon_id, float alpha)
{
icon_draw_size(x, y, icon_id, 1.0f, alpha, NULL, ICON_SIZE_ICON, size, true, false);
diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h
index d5e89357a9f..8d7f9d47ab5 100644
--- a/source/blender/editors/interface/interface_intern.h
+++ b/source/blender/editors/interface/interface_intern.h
@@ -72,6 +72,7 @@ typedef enum {
UI_WTYPE_NUMBER,
UI_WTYPE_SLIDER,
UI_WTYPE_EXEC,
+ UI_WTYPE_TAB,
UI_WTYPE_TOOLTIP,
/* strings */
@@ -258,6 +259,7 @@ struct uiBut {
uiButSearchCreateFunc search_create_func;
uiButSearchFunc search_func;
+ bool free_search_arg;
void *search_arg;
uiButHandleRenameFunc rename_func;
@@ -281,7 +283,7 @@ struct uiBut {
BIFIconID icon;
char dt; /* drawtype: UI_EMBOSS, UI_EMBOSS_NONE ... etc, copied from the block */
signed char pie_dir; /* direction in a pie menu, used for collision detection (RadialDirection) */
- char changed; /* could be made into a single flag */
+ bool changed; /* could be made into a single flag */
unsigned char unit_type; /* so buttons can support unit systems which are not RNA */
short modifier_key;
short iconadd;
@@ -507,6 +509,7 @@ extern bool ui_but_supports_cycling(const uiBut *but) ATTR_WARN_UNUSED_RESULT;
extern int ui_but_is_pushed_ex(uiBut *but, double *value) ATTR_WARN_UNUSED_RESULT;
extern int ui_but_is_pushed(uiBut *but) ATTR_WARN_UNUSED_RESULT;
+void ui_but_override_flag(uiBut *but);
extern void ui_block_bounds_calc(uiBlock *block);
extern void ui_block_translate(uiBlock *block, int x, int y);
@@ -653,6 +656,8 @@ extern void ui_draw_dropshadow(const rctf *rct, float radius, float aspect, floa
void ui_draw_gradient(const rcti *rect, const float hsv[3], const int type, const float alpha);
+
+void ui_draw_but_TAB_outline(const rcti *rect, float rad, unsigned char highlight[3], unsigned char highlight_fade[3]);
void ui_draw_but_HISTOGRAM(ARegion *ar, uiBut *but, struct uiWidgetColors *wcol, const rcti *rect);
void ui_draw_but_WAVEFORM(ARegion *ar, uiBut *but, struct uiWidgetColors *wcol, const rcti *rect);
void ui_draw_but_VECTORSCOPE(ARegion *ar, uiBut *but, struct uiWidgetColors *wcol, const rcti *rect);
@@ -695,15 +700,16 @@ struct wmIMEData *ui_but_ime_data_get(uiBut *but);
#endif
/* interface_widgets.c */
-void ui_draw_anti_tria(float x1, float y1, float x2, float y2, float x3, float y3);
-void ui_draw_anti_roundbox(int mode, float minx, float miny, float maxx, float maxy, float rad, bool use_alpha);
+void ui_draw_anti_tria(float x1, float y1, float x2, float y2, float x3, float y3, const float color[4]);
+void ui_draw_anti_roundbox(int mode, float minx, float miny, float maxx, float maxy,
+ float rad, bool use_alpha, const float color[4]);
void ui_draw_menu_back(struct uiStyle *style, uiBlock *block, rcti *rect);
void ui_draw_pie_center(uiBlock *block);
uiWidgetColors *ui_tooltip_get_theme(void);
void ui_draw_tooltip_background(uiStyle *UNUSED(style), uiBlock *block, rcti *rect);
void ui_draw_search_back(struct uiStyle *style, uiBlock *block, rcti *rect);
bool ui_link_bezier_points(const rcti *rect, float coord_array[][2], int resol);
-void ui_draw_link_bezier(const rcti *rect);
+void ui_draw_link_bezier(const rcti *rect, const float color[4]);
extern void ui_draw_but(const struct bContext *C, ARegion *ar, struct uiStyle *style, uiBut *but, rcti *rect);
/* theme color init */
@@ -770,4 +776,20 @@ void UI_OT_eyedropper_depth(struct wmOperatorType *ot);
/* interface_eyedropper_driver.c */
void UI_OT_eyedropper_driver(struct wmOperatorType *ot);
+/* interface_util.c */
+
+/**
+ * For use with #ui_rna_collection_search_cb.
+ */
+typedef struct uiRNACollectionSearch {
+ PointerRNA target_ptr;
+ PropertyRNA *target_prop;
+
+ PointerRNA search_ptr;
+ PropertyRNA *search_prop;
+
+ bool *but_changed; /* pointer to uiBut.changed */
+} uiRNACollectionSearch;
+void ui_rna_collection_search_cb(const struct bContext *C, void *arg, const char *str, uiSearchItems *items);
+
#endif /* __INTERFACE_INTERN_H__ */
diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c
index 21dac015f82..30a18ddc8bc 100644
--- a/source/blender/editors/interface/interface_layout.c
+++ b/source/blender/editors/interface/interface_layout.c
@@ -870,7 +870,7 @@ static uiBut *uiItemFullO_ptr_ex(
return but;
}
-static void ui_item_hold_menu(struct bContext *C, ARegion *butregion, uiBut *but)
+static void ui_item_menu_hold(struct bContext *C, ARegion *butregion, uiBut *but)
{
uiPopupMenu *pup = UI_popup_menu_begin(C, "", ICON_NONE);
uiLayout *layout = UI_popup_menu_layout(pup);
@@ -878,6 +878,8 @@ static void ui_item_hold_menu(struct bContext *C, ARegion *butregion, uiBut *but
UI_popup_menu_but_set(pup, butregion, but);
block->flag |= UI_BLOCK_POPUP_HOLD;
+ block->flag |= UI_BLOCK_IS_FLIP;
+ UI_block_direction_set(block, UI_DIR_DOWN);
const char *menu_id = but->hold_argN;
MenuType *mt = WM_menutype_find(menu_id, true);
@@ -907,7 +909,7 @@ void uiItemFullOMenuHold_ptr(
PointerRNA *r_opptr)
{
uiBut *but = uiItemFullO_ptr_ex(layout, ot, name, icon, properties, context, flag, r_opptr);
- UI_but_func_hold_set(but, ui_item_hold_menu, BLI_strdup(menu_id));
+ UI_but_func_hold_set(but, ui_item_menu_hold, BLI_strdup(menu_id));
}
void uiItemFullO(
@@ -1639,95 +1641,6 @@ void uiItemsEnumR(uiLayout *layout, struct PointerRNA *ptr, const char *propname
/* Pointer RNA button with search */
-typedef struct CollItemSearch {
- struct CollItemSearch *next, *prev;
- char *name;
- int index;
- int iconid;
-} CollItemSearch;
-
-static int sort_search_items_list(const void *a, const void *b)
-{
- const CollItemSearch *cis1 = a;
- const CollItemSearch *cis2 = b;
-
- if (BLI_strcasecmp(cis1->name, cis2->name) > 0)
- return 1;
- else
- return 0;
-}
-
-static void rna_search_cb(const struct bContext *C, void *arg_but, const char *str, uiSearchItems *items)
-{
- uiBut *but = arg_but;
- char *name;
- int i = 0, iconid = 0, flag = RNA_property_flag(but->rnaprop);
- ListBase *items_list = MEM_callocN(sizeof(ListBase), "items_list");
- CollItemSearch *cis;
- const bool skip_filter = !but->changed;
-
- /* build a temporary list of relevant items first */
- RNA_PROP_BEGIN (&but->rnasearchpoin, itemptr, but->rnasearchprop)
- {
- if (flag & PROP_ID_SELF_CHECK)
- if (itemptr.data == but->rnapoin.id.data)
- continue;
-
- /* use filter */
- if (RNA_property_type(but->rnaprop) == PROP_POINTER) {
- if (RNA_property_pointer_poll(&but->rnapoin, but->rnaprop, &itemptr) == 0)
- continue;
- }
-
- if (itemptr.type && RNA_struct_is_ID(itemptr.type)) {
- ID *id = itemptr.data;
- char name_ui[MAX_ID_NAME];
-
-#if 0 /* this name is used for a string comparison and can't be modified, TODO */
- /* if ever enabled, make name_ui be MAX_ID_NAME+1 */
- BKE_id_ui_prefix(name_ui, id);
-#else
- BLI_strncpy(name_ui, id->name + 2, sizeof(name_ui));
-#endif
- name = BLI_strdup(name_ui);
- iconid = ui_id_icon_get(C, id, false);
- }
- else {
- name = RNA_struct_name_get_alloc(&itemptr, NULL, 0, NULL); /* could use the string length here */
- iconid = 0;
- }
-
- if (name) {
- if (skip_filter || BLI_strcasestr(name, str)) {
- cis = MEM_callocN(sizeof(CollItemSearch), "CollectionItemSearch");
- cis->name = MEM_dupallocN(name);
- cis->index = i;
- cis->iconid = iconid;
- BLI_addtail(items_list, cis);
- }
- MEM_freeN(name);
- }
-
- i++;
- }
- RNA_PROP_END;
-
- BLI_listbase_sort(items_list, sort_search_items_list);
-
- /* add search items from temporary list */
- for (cis = items_list->first; cis; cis = cis->next) {
- if (false == UI_search_item_add(items, cis->name, SET_INT_IN_POINTER(cis->index), cis->iconid)) {
- break;
- }
- }
-
- for (cis = items_list->first; cis; cis = cis->next) {
- MEM_freeN(cis->name);
- }
- BLI_freelistN(items_list);
- MEM_freeN(items_list);
-}
-
static void search_id_collection(StructRNA *ptype, PointerRNA *ptr, PropertyRNA **prop)
{
StructRNA *srna;
@@ -1768,6 +1681,8 @@ void ui_but_add_search(uiBut *but, PointerRNA *ptr, PropertyRNA *prop, PointerRN
/* turn button into search button */
if (searchprop) {
+ uiRNACollectionSearch *coll_search = MEM_mallocN(sizeof(*coll_search), __func__);
+
but->type = UI_BTYPE_SEARCH_MENU;
but->hardmax = MAX2(but->hardmax, 256.0f);
but->rnasearchpoin = *searchptr;
@@ -1777,13 +1692,22 @@ void ui_but_add_search(uiBut *but, PointerRNA *ptr, PropertyRNA *prop, PointerRN
but->flag |= UI_BUT_VALUE_CLEAR;
}
+ coll_search->target_ptr = *ptr;
+ coll_search->target_prop = prop;
+ coll_search->search_ptr = *searchptr;
+ coll_search->search_prop = searchprop;
+ coll_search->but_changed = &but->changed;
+
if (RNA_property_type(prop) == PROP_ENUM) {
/* XXX, this will have a menu string,
* but in this case we just want the text */
but->str[0] = 0;
}
- UI_but_func_search_set(but, ui_searchbox_create_generic, rna_search_cb, but, NULL, NULL);
+ UI_but_func_search_set(
+ but, ui_searchbox_create_generic, ui_rna_collection_search_cb,
+ coll_search, NULL, NULL);
+ but->free_search_arg = true;
}
else if (but->type == UI_BTYPE_SEARCH_MENU) {
/* In case we fail to find proper searchprop, so other code might have already set but->type to search menu... */
diff --git a/source/blender/editors/interface/interface_ops.c b/source/blender/editors/interface/interface_ops.c
index 7cf8a315895..16525dfbc9e 100644
--- a/source/blender/editors/interface/interface_ops.c
+++ b/source/blender/editors/interface/interface_ops.c
@@ -42,14 +42,20 @@
#include "BLT_lang.h"
#include "BKE_context.h"
+#include "BKE_idprop.h"
+#include "BKE_layer.h"
#include "BKE_screen.h"
#include "BKE_global.h"
+#include "BKE_library_override.h"
#include "BKE_node.h"
#include "BKE_text.h" /* for UI_OT_reports_to_text */
#include "BKE_report.h"
+#include "DEG_depsgraph.h"
+
#include "RNA_access.h"
#include "RNA_define.h"
+#include "RNA_types.h"
#include "UI_interface.h"
@@ -328,6 +334,334 @@ static void UI_OT_unset_property_button(wmOperatorType *ot)
ot->flag = OPTYPE_UNDO;
}
+/* Use/Unuse Property Button Operator ------------------------ */
+
+static int use_property_button_exec(bContext *C, wmOperator *UNUSED(op))
+{
+ PointerRNA ptr, scene_props_ptr;
+ PropertyRNA *prop;
+ IDProperty *props;
+
+ uiBut *but = UI_context_active_but_get(C);
+
+ prop = but->rnaprop;
+ ptr = but->rnapoin;
+ props = (IDProperty *)ptr.data;
+ /* XXX Using existing data struct to pass another RNAPointer */
+ scene_props_ptr = but->rnasearchpoin;
+
+ const char *identifier = RNA_property_identifier(prop);
+ if (IDP_GetPropertyFromGroup(props, identifier)) {
+ return OPERATOR_CANCELLED;
+ }
+
+ int array_len = RNA_property_array_length(&scene_props_ptr, prop);
+ bool is_array = array_len != 0;
+
+ switch (RNA_property_type(prop)) {
+ case PROP_FLOAT:
+ {
+ if (is_array) {
+ float values[RNA_MAX_ARRAY_LENGTH];
+ RNA_property_float_get_array(&scene_props_ptr, prop, values);
+ BKE_collection_engine_property_add_float_array(props, identifier, values, array_len);
+ }
+ else {
+ float value = RNA_property_float_get(&scene_props_ptr, prop);
+ BKE_collection_engine_property_add_float(props, identifier, value);
+ }
+ break;
+ }
+ case PROP_ENUM:
+ {
+ int value = RNA_enum_get(&scene_props_ptr, identifier);
+ BKE_collection_engine_property_add_int(props, identifier, value);
+ break;
+ }
+ case PROP_INT:
+ {
+ int value = RNA_int_get(&scene_props_ptr, identifier);
+ BKE_collection_engine_property_add_int(props, identifier, value);
+ break;
+ }
+ case PROP_BOOLEAN:
+ {
+ int value = RNA_boolean_get(&scene_props_ptr, identifier);
+ BKE_collection_engine_property_add_bool(props, identifier, value);
+ break;
+ }
+ case PROP_STRING:
+ case PROP_POINTER:
+ case PROP_COLLECTION:
+ default:
+ break;
+ }
+
+ /* TODO(sergey): Use proper flag for tagging here. */
+ DEG_id_tag_update((ID *)CTX_data_scene(C), 0);
+
+ return OPERATOR_FINISHED;
+}
+
+static void UI_OT_use_property_button(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Use property";
+ ot->idname = "UI_OT_use_property_button";
+ ot->description = "Create a property";
+
+ /* callbacks */
+ ot->poll = ED_operator_regionactive;
+ ot->exec = use_property_button_exec;
+
+ /* flags */
+ ot->flag = OPTYPE_UNDO;
+}
+
+static int unuse_property_button_exec(bContext *C, wmOperator *UNUSED(op))
+{
+ PointerRNA ptr;
+ PropertyRNA *prop;
+ int index;
+
+ /* try to unset the nominated property */
+ UI_context_active_but_prop_get(C, &ptr, &prop, &index);
+ const char *identifier = RNA_property_identifier(prop);
+
+ IDProperty *props = (IDProperty *)ptr.data;
+ IDProperty *prop_to_remove = IDP_GetPropertyFromGroup(props, identifier);
+ IDP_FreeFromGroup(props, prop_to_remove);
+
+ /* TODO(sergey): Use proper flag for tagging here. */
+ DEG_id_tag_update((ID *)CTX_data_scene(C), 0);
+
+ return OPERATOR_FINISHED;
+}
+
+static void UI_OT_unuse_property_button(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Unuse property";
+ ot->idname = "UI_OT_unuse_property_button";
+ ot->description = "Remove a property";
+
+ /* callbacks */
+ ot->poll = ED_operator_regionactive;
+ ot->exec = unuse_property_button_exec;
+
+ /* flags */
+ ot->flag = OPTYPE_UNDO;
+}
+
+
+
+
+
+/* Note that we use different values for UI/UX than 'real' override operations, user does not care
+ * whether it's added or removed for the differential operation e.g. */
+enum {
+ UIOverride_Type_NOOP = 0,
+ UIOverride_Type_Replace = 1,
+ UIOverride_Type_Difference = 2, /* Add/subtract */
+ UIOverride_Type_Factor = 3, /* Multiply */
+ /* TODO: should/can we expose insert/remove ones for collections? Doubt it... */
+};
+
+static EnumPropertyItem override_type_items[] = {
+ {UIOverride_Type_NOOP, "NOOP", 0, "NoOp",
+ "'No-Operation', place holder preventing automatic override to ever affect the property"},
+ {UIOverride_Type_Replace, "REPLACE", 0, "Replace", "Completely replace value from linked data by local one"},
+ {UIOverride_Type_Difference, "DIFFERENCE", 0, "Difference", "Store difference to linked data value"},
+ {UIOverride_Type_Factor, "FACTOR", 0, "Factor", "Store factor to linked data value (useful e.g. for scale)"},
+ {0, NULL, 0, NULL, NULL}
+};
+
+
+static int override_type_set_button_poll(bContext *C)
+{
+ PointerRNA ptr;
+ PropertyRNA *prop;
+ int index;
+ bool is_overridable;
+
+ UI_context_active_but_prop_get(C, &ptr, &prop, &index);
+
+ RNA_property_override_status(&ptr, prop, index, &is_overridable, NULL, NULL, NULL);
+
+ return (ptr.data && prop && is_overridable);
+}
+
+static int override_type_set_button_exec(bContext *C, wmOperator *op)
+{
+ PointerRNA ptr;
+ PropertyRNA *prop;
+ int index;
+ bool created;
+ const bool all = RNA_boolean_get(op->ptr, "all");
+ const int op_type = RNA_enum_get(op->ptr, "type");
+
+ short operation;
+
+ switch (op_type) {
+ case UIOverride_Type_NOOP:
+ operation = IDOVERRIDESTATIC_OP_NOOP;
+ break;
+ case UIOverride_Type_Replace:
+ operation = IDOVERRIDESTATIC_OP_REPLACE;
+ break;
+ case UIOverride_Type_Difference:
+ operation = IDOVERRIDESTATIC_OP_ADD; /* override code will automatically switch to subtract if needed. */
+ break;
+ case UIOverride_Type_Factor:
+ operation = IDOVERRIDESTATIC_OP_MULTIPLY;
+ break;
+ default:
+ operation = IDOVERRIDESTATIC_OP_REPLACE;
+ BLI_assert(0);
+ break;
+ }
+
+ /* try to reset the nominated setting to its default value */
+ UI_context_active_but_prop_get(C, &ptr, &prop, &index);
+
+ BLI_assert(ptr.id.data != NULL);
+
+ if (all) {
+ index = -1;
+ }
+
+ IDOverrideStaticPropertyOperation *opop = RNA_property_override_property_operation_get(
+ &ptr, prop, operation, index, true, NULL, &created);
+ if (!created) {
+ opop->operation = operation;
+ }
+
+ return operator_button_property_finish(C, &ptr, prop);
+}
+
+static int override_type_set_button_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
+{
+ return WM_menu_invoke_ex(C, op, WM_OP_INVOKE_DEFAULT);
+}
+
+static void UI_OT_override_type_set_button(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Define Override Type";
+ ot->idname = "UI_OT_override_type_set_button";
+ ot->description = "Create an override operation, or set the type of an existing one";
+
+ /* callbacks */
+ ot->poll = override_type_set_button_poll;
+ ot->exec = override_type_set_button_exec;
+ ot->invoke = override_type_set_button_invoke;
+
+ /* flags */
+ ot->flag = OPTYPE_UNDO;
+
+ /* properties */
+ RNA_def_boolean(ot->srna, "all", 1, "All", "Reset to default values all elements of the array");
+ ot->prop = RNA_def_enum(ot->srna, "type", override_type_items, UIOverride_Type_Replace,
+ "Type", "Type of override operation");
+ /* TODO: add itemf callback, not all aoptions are available for all data types... */
+}
+
+
+static int override_remove_button_poll(bContext *C)
+{
+ PointerRNA ptr;
+ PropertyRNA *prop;
+ int index;
+ bool is_overridden;
+
+ UI_context_active_but_prop_get(C, &ptr, &prop, &index);
+
+ RNA_property_override_status(&ptr, prop, index, NULL, &is_overridden, NULL, NULL);
+
+ return (ptr.data && ptr.id.data && prop && is_overridden);
+}
+
+static int override_remove_button_exec(bContext *C, wmOperator *op)
+{
+ PointerRNA ptr, id_refptr, src;
+ PropertyRNA *prop;
+ int index;
+ const bool all = RNA_boolean_get(op->ptr, "all");
+
+ /* try to reset the nominated setting to its default value */
+ UI_context_active_but_prop_get(C, &ptr, &prop, &index);
+
+ ID *id = ptr.id.data;
+ IDOverrideStaticProperty *oprop = RNA_property_override_property_find(&ptr, prop);
+ BLI_assert(oprop != NULL);
+ BLI_assert(id != NULL && id->override_static != NULL);
+
+ const bool is_template = (id->override_static->reference == NULL);
+
+ /* We need source (i.e. linked data) to restore values of deleted overrides...
+ * If this is an override template, we obviously do not need to restore anything. */
+ if (!is_template) {
+ RNA_id_pointer_create(id->override_static->reference, &id_refptr);
+ if (!RNA_path_resolve(&id_refptr, oprop->rna_path, &src, NULL)) {
+ BLI_assert(0 && "Failed to create matching source (linked data) RNA pointer");
+ }
+ }
+
+ if (!all && index != -1) {
+ bool is_strict_find;
+ /* Remove override operation for given item, add singular operations for the other items as needed. */
+ IDOverrideStaticPropertyOperation *opop = BKE_override_static_property_operation_find(
+ oprop, NULL, NULL, index, index, false, &is_strict_find);
+ BLI_assert(opop != NULL);
+ if (!is_strict_find) {
+ /* No specific override operation, we have to get generic one,
+ * and create item-specific override operations for all but given index, before removing generic one. */
+ for (int idx = RNA_property_array_length(&ptr, prop); idx--; ) {
+ if (idx != index) {
+ BKE_override_static_property_operation_get(oprop, opop->operation, NULL, NULL, idx, idx, true, NULL, NULL);
+ }
+ }
+ }
+ BKE_override_static_property_operation_delete(oprop, opop);
+ if (!is_template) {
+ RNA_property_copy(&ptr, &src, prop, index);
+ }
+ if (BLI_listbase_is_empty(&oprop->operations)) {
+ BKE_override_static_property_delete(id->override_static, oprop);
+ }
+ }
+ else {
+ /* Just remove whole generic override operation of this property. */
+ BKE_override_static_property_delete(id->override_static, oprop);
+ if (!is_template) {
+ RNA_property_copy(&ptr, &src, prop, -1);
+ }
+ }
+
+ return operator_button_property_finish(C, &ptr, prop);
+}
+
+static void UI_OT_override_remove_button(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Remove Override";
+ ot->idname = "UI_OT_override_remove_button";
+ ot->description = "Remove an override operation";
+
+ /* callbacks */
+ ot->poll = override_remove_button_poll;
+ ot->exec = override_remove_button_exec;
+
+ /* flags */
+ ot->flag = OPTYPE_UNDO;
+
+ /* properties */
+ RNA_def_boolean(ot->srna, "all", 1, "All", "Reset to default values all elements of the array");
+}
+
+
+
+
/* Copy To Selected Operator ------------------------ */
bool UI_context_copy_to_selected_list(
@@ -1117,6 +1451,10 @@ void ED_operatortypes_ui(void)
WM_operatortype_append(UI_OT_copy_python_command_button);
WM_operatortype_append(UI_OT_reset_default_button);
WM_operatortype_append(UI_OT_unset_property_button);
+ WM_operatortype_append(UI_OT_use_property_button);
+ WM_operatortype_append(UI_OT_unuse_property_button);
+ WM_operatortype_append(UI_OT_override_type_set_button);
+ WM_operatortype_append(UI_OT_override_remove_button);
WM_operatortype_append(UI_OT_copy_to_selected_button);
WM_operatortype_append(UI_OT_reports_to_textblock); /* XXX: temp? */
WM_operatortype_append(UI_OT_drop_color);
diff --git a/source/blender/editors/interface/interface_panel.c b/source/blender/editors/interface/interface_panel.c
index d9685d7281b..c3759e232b0 100644
--- a/source/blender/editors/interface/interface_panel.c
+++ b/source/blender/editors/interface/interface_panel.c
@@ -50,9 +50,6 @@
#include "BKE_context.h"
#include "BKE_screen.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
-
#include "BLF_api.h"
#include "WM_api.h"
@@ -65,6 +62,8 @@
#include "UI_interface_icons.h"
#include "UI_resources.h"
+#include "GPU_immediate.h"
+
#include "interface_intern.h"
/*********************** defines and structs ************************/
@@ -393,54 +392,42 @@ static void ui_offset_panel_block(uiBlock *block)
/**************************** drawing *******************************/
-/* extern used by previewrender */
-#if 0 /*UNUSED 2.5*/
-static void uiPanelPush(uiBlock *block)
-{
- glPushMatrix();
-
- if (block->panel)
- glTranslatef((float)block->panel->ofsx, (float)block->panel->ofsy, 0.0);
-}
-
-static void uiPanelPop(uiBlock *UNUSED(block))
-{
- glPopMatrix();
-}
-#endif
-
/* triangle 'icon' for panel header */
-void UI_draw_icon_tri(float x, float y, char dir)
+void UI_draw_icon_tri(float x, float y, char dir, const float color[4])
{
float f3 = 0.15 * U.widget_unit;
float f5 = 0.25 * U.widget_unit;
float f7 = 0.35 * U.widget_unit;
if (dir == 'h') {
- ui_draw_anti_tria(x - f3, y - f5, x - f3, y + f5, x + f7, y);
+ ui_draw_anti_tria(x - f3, y - f5, x - f3, y + f5, x + f7, y, color);
}
else if (dir == 't') {
- ui_draw_anti_tria(x - f5, y - f7, x + f5, y - f7, x, y + f3);
+ ui_draw_anti_tria(x - f5, y - f7, x + f5, y - f7, x, y + f3, color);
}
else { /* 'v' = vertical, down */
- ui_draw_anti_tria(x - f5, y + f3, x + f5, y + f3, x, y - f7);
+ ui_draw_anti_tria(x - f5, y + f3, x + f5, y + f3, x, y - f7, color);
}
}
/* triangle 'icon' inside rect */
static void ui_draw_tria_rect(const rctf *rect, char dir)
{
+ float color[4];
+ UI_GetThemeColor3fv(TH_TITLE, color);
+ color[3] = 1.0f;
+
if (dir == 'h') {
float half = 0.5f * BLI_rctf_size_y(rect);
- ui_draw_anti_tria(rect->xmin, rect->ymin, rect->xmin, rect->ymax, rect->xmax, rect->ymin + half);
+ ui_draw_anti_tria(rect->xmin, rect->ymin, rect->xmin, rect->ymax, rect->xmax, rect->ymin + half, color);
}
else {
float half = 0.5f * BLI_rctf_size_x(rect);
- ui_draw_anti_tria(rect->xmin, rect->ymax, rect->xmax, rect->ymax, rect->xmin + half, rect->ymin);
+ ui_draw_anti_tria(rect->xmin, rect->ymax, rect->xmax, rect->ymax, rect->xmin + half, rect->ymin, color);
}
}
-static void ui_draw_anti_x(float x1, float y1, float x2, float y2)
+static void ui_draw_anti_x(unsigned int pos, float x1, float y1, float x2, float y2)
{
/* set antialias line */
@@ -448,9 +435,16 @@ static void ui_draw_anti_x(float x1, float y1, float x2, float y2)
glEnable(GL_BLEND);
glLineWidth(2.0);
-
- fdrawline(x1, y1, x2, y2);
- fdrawline(x1, y2, x2, y1);
+
+ immBegin(GWN_PRIM_LINES, 4);
+
+ immVertex2f(pos, x1, y1);
+ immVertex2f(pos, x2, y2);
+
+ immVertex2f(pos, x1, y2);
+ immVertex2f(pos, x2, y1);
+
+ immEnd();
glDisable(GL_LINE_SMOOTH);
glDisable(GL_BLEND);
@@ -458,16 +452,16 @@ static void ui_draw_anti_x(float x1, float y1, float x2, float y2)
}
/* x 'icon' for panel header */
-static void ui_draw_x_icon(float x, float y)
+static void ui_draw_x_icon(unsigned int pos, float x, float y)
{
- ui_draw_anti_x(x, y, x + 9.375f, y + 9.375f);
+ ui_draw_anti_x(pos, x, y, x + 9.375f, y + 9.375f);
}
#define PNL_ICON UI_UNIT_X /* could be UI_UNIT_Y too */
-static void ui_draw_panel_scalewidget(const rcti *rect)
+static void ui_draw_panel_scalewidget(unsigned int pos, const rcti *rect)
{
float xmin, xmax, dx;
float ymin, ymax, dy;
@@ -481,16 +475,33 @@ static void ui_draw_panel_scalewidget(const rcti *rect)
dy = 0.5f * (ymax - ymin);
glEnable(GL_BLEND);
- glColor4ub(255, 255, 255, 50);
- fdrawline(xmin, ymin, xmax, ymax);
- fdrawline(xmin + dx, ymin, xmax, ymax - dy);
+ immUniformColor4ub(255, 255, 255, 50);
+
+ immBegin(GWN_PRIM_LINES, 4);
+
+ immVertex2f(pos, xmin, ymin);
+ immVertex2f(pos, xmax, ymax);
+
+ immVertex2f(pos, xmin + dx, ymin);
+ immVertex2f(pos, xmax, ymax - dy);
+
+ immEnd();
- glColor4ub(0, 0, 0, 50);
- fdrawline(xmin, ymin + 1, xmax, ymax + 1);
- fdrawline(xmin + dx, ymin + 1, xmax, ymax - dy + 1);
+ immUniformColor4ub(0, 0, 0, 50);
+
+ immBegin(GWN_PRIM_LINES, 4);
+
+ immVertex2f(pos, xmin, ymin + 1);
+ immVertex2f(pos, xmax, ymax + 1);
+
+ immVertex2f(pos, xmin + dx, ymin + 1);
+ immVertex2f(pos, xmax, ymax - dy + 1);
+
+ immEnd();
+
glDisable(GL_BLEND);
}
-static void ui_draw_panel_dragwidget(const rctf *rect)
+static void ui_draw_panel_dragwidget(unsigned int pos, const rctf *rect)
{
unsigned char col_back[3], col_high[3], col_dark[3];
const int col_tint = 84;
@@ -519,10 +530,10 @@ static void ui_draw_panel_dragwidget(const rctf *rect)
const int x_co = (x_min + x_ofs) + (i_x * (box_size + box_margin));
const int y_co = (y_min + y_ofs) + (i_y * (box_size + box_margin));
- glColor3ubv(col_dark);
- glRectf(x_co - box_size, y_co - px_zoom, x_co, (y_co + box_size) - px_zoom);
- glColor3ubv(col_high);
- glRectf(x_co - box_size, y_co, x_co, y_co + box_size);
+ immUniformColor3ubv(col_dark);
+ immRectf(pos, x_co - box_size, y_co - px_zoom, x_co, (y_co + box_size) - px_zoom);
+ immUniformColor3ubv(col_high);
+ immRectf(pos, x_co - box_size, y_co, x_co, y_co + box_size);
}
}
}
@@ -534,29 +545,30 @@ static void ui_draw_aligned_panel_header(uiStyle *style, uiBlock *block, const r
rcti hrect;
int pnl_icons;
const char *activename = panel->drawname[0] ? panel->drawname : panel->panelname;
+ unsigned char col_title[4];
/* + 0.001f to avoid flirting with float inaccuracy */
if (panel->control & UI_PNL_CLOSE)
pnl_icons = (panel->labelofs + 2 * PNL_ICON + 5) / block->aspect + 0.001f;
else
pnl_icons = (panel->labelofs + PNL_ICON + 5) / block->aspect + 0.001f;
-
- /* active tab */
+
/* draw text label */
- UI_ThemeColor(TH_TITLE);
-
+ UI_GetThemeColor3ubv(TH_TITLE, col_title);
+ col_title[3] = 255;
+
hrect = *rect;
if (dir == 'h') {
hrect.xmin = rect->xmin + pnl_icons;
hrect.ymin += 2.0f / block->aspect;
- UI_fontstyle_draw(&style->paneltitle, &hrect, activename);
+ UI_fontstyle_draw(&style->paneltitle, &hrect, activename, col_title);
}
else {
/* ignore 'pnl_icons', otherwise the text gets offset horizontally
* + 0.001f to avoid flirting with float inaccuracy
*/
hrect.xmin = rect->xmin + (PNL_ICON + 5) / block->aspect + 0.001f;
- UI_fontstyle_draw_rotated(&style->paneltitle, &hrect, activename);
+ UI_fontstyle_draw_rotated(&style->paneltitle, &hrect, activename, col_title);
}
}
@@ -566,7 +578,7 @@ void ui_draw_aligned_panel(uiStyle *style, uiBlock *block, const rcti *rect, con
Panel *panel = block->panel;
rcti headrect;
rctf itemrect;
- int ofsx;
+ float color[4];
const bool is_closed_x = (panel->flag & PNL_CLOSEDX) ? true : false;
const bool is_closed_y = (panel->flag & PNL_CLOSEDY) ? true : false;
@@ -579,6 +591,9 @@ void ui_draw_aligned_panel(uiStyle *style, uiBlock *block, const rcti *rect, con
headrect.ymin = headrect.ymax;
headrect.ymax = headrect.ymin + floor(PNL_HEADER / block->aspect + 0.001f);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
{
float minx = rect->xmin;
float maxx = is_closed_x ? (minx + PNL_HEADER / block->aspect) : rect->xmax;
@@ -588,11 +603,18 @@ void ui_draw_aligned_panel(uiStyle *style, uiBlock *block, const rcti *rect, con
if (UI_GetThemeValue(TH_PANEL_SHOW_HEADER)) {
/* draw with background color */
- UI_ThemeColor4(TH_PANEL_HEADER);
- glRectf(minx, headrect.ymin + 1, maxx, y);
+ immUniformThemeColor(TH_PANEL_HEADER);
+ immRectf(pos, minx, headrect.ymin + 1, maxx, y);
+
+ immBegin(GWN_PRIM_LINES, 4);
+
+ immVertex2f(pos, minx, y);
+ immVertex2f(pos, maxx, y);
+
+ immVertex2f(pos, minx, y);
+ immVertex2f(pos, maxx, y);
- fdrawline(minx, y, maxx, y);
- fdrawline(minx, y, maxx, y);
+ immEnd();
}
else if (!(panel->runtime_flag & PNL_FIRST)) {
/* draw embossed separator */
@@ -602,15 +624,26 @@ void ui_draw_aligned_panel(uiStyle *style, uiBlock *block, const rcti *rect, con
maxx -= 5.0f / block->aspect;
}
- glColor4f(0.0f, 0.0f, 0.0f, 0.5f);
- fdrawline(minx, y, maxx, y);
- glColor4f(1.0f, 1.0f, 1.0f, 0.25f);
- fdrawline(minx, y - 1, maxx, y - 1);
+ immUniformColor4f(0.0f, 0.0f, 0.0f, 0.5f);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2f(pos, minx, y);
+ immVertex2f(pos, maxx, y);
+ immEnd();
+
+ immUniformColor4f(1.0f, 1.0f, 1.0f, 0.25f);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2f(pos, minx, y - 1);
+ immVertex2f(pos, maxx, y - 1);
+ immEnd();
}
glDisable(GL_BLEND);
}
+ immUnbindProgram();
+
/* draw optional pin icon */
#ifdef USE_PIN_HIDDEN
@@ -626,9 +659,11 @@ void ui_draw_aligned_panel(uiStyle *style, uiBlock *block, const rcti *rect, con
glDisable(GL_BLEND);
}
+
/* horizontal title */
if (is_closed_x == false) {
ui_draw_aligned_panel_header(style, block, &headrect, 'h');
+ pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
/* itemrect smaller */
itemrect.xmax = headrect.xmax - 5.0f / block->aspect;
@@ -637,7 +672,9 @@ void ui_draw_aligned_panel(uiStyle *style, uiBlock *block, const rcti *rect, con
itemrect.ymax = headrect.ymax;
BLI_rctf_scale(&itemrect, 0.7f);
- ui_draw_panel_dragwidget(&itemrect);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ ui_draw_panel_dragwidget(pos, &itemrect);
+ immUnbindProgram();
}
/* if the panel is minimized vertically:
@@ -649,6 +686,7 @@ void ui_draw_aligned_panel(uiStyle *style, uiBlock *block, const rcti *rect, con
else if (is_closed_x) {
/* draw vertical title */
ui_draw_aligned_panel_header(style, block, &headrect, 'v');
+ pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
}
/* an open panel */
else {
@@ -657,33 +695,37 @@ void ui_draw_aligned_panel(uiStyle *style, uiBlock *block, const rcti *rect, con
if (panel->control & UI_PNL_SOLID) UI_draw_roundbox_corner_set(UI_CNR_ALL);
else UI_draw_roundbox_corner_set(UI_CNR_NONE);
- UI_ThemeColorShade(TH_BACK, -120);
- UI_draw_roundbox_unfilled(0.5f + rect->xmin, 0.5f + rect->ymin, 0.5f + rect->xmax, 0.5f + headrect.ymax + 1, 8);
+ UI_GetThemeColorShade4fv(TH_BACK, -120, color);
+ UI_draw_roundbox_aa(false, 0.5f + rect->xmin, 0.5f + rect->ymin, 0.5f + rect->xmax, 0.5f + headrect.ymax + 1, 8, color);
}
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
/* panel backdrop */
if (UI_GetThemeValue(TH_PANEL_SHOW_BACK)) {
/* draw with background color */
glEnable(GL_BLEND);
- UI_ThemeColor4(TH_PANEL_BACK);
- glRecti(rect->xmin, rect->ymin, rect->xmax, rect->ymax);
+ immUniformThemeColor(TH_PANEL_BACK);
+ immRectf(pos, rect->xmin, rect->ymin, rect->xmax, rect->ymax);
}
if (panel->control & UI_PNL_SCALE)
- ui_draw_panel_scalewidget(rect);
+ ui_draw_panel_scalewidget(pos, rect);
+
+ immUnbindProgram();
}
/* draw optional close icon */
- ofsx = 6;
if (panel->control & UI_PNL_CLOSE) {
- UI_ThemeColor(TH_TITLE);
- ui_draw_x_icon(rect->xmin + 2 + ofsx, rect->ymax + 2);
- ofsx = 22;
+ const int ofsx = 6;
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformThemeColor3(TH_TITLE);
+ ui_draw_x_icon(pos, rect->xmin + 2 + ofsx, rect->ymax + 2);
+ immUnbindProgram();
}
/* draw collapse icon */
- UI_ThemeColor(TH_TITLE);
/* itemrect smaller */
itemrect.xmin = headrect.xmin + 5.0f / block->aspect;
@@ -699,8 +741,6 @@ void ui_draw_aligned_panel(uiStyle *style, uiBlock *block, const rcti *rect, con
ui_draw_tria_rect(&itemrect, 'h');
else
ui_draw_tria_rect(&itemrect, 'v');
-
- (void)ofsx;
}
/************************** panel alignment *************************/
@@ -1513,12 +1553,13 @@ void UI_panel_category_clear_all(ARegion *ar)
BLI_freelistN(&ar->panels_category);
}
-/* based on UI_draw_roundbox_gl_mode, check on making a version which allows us to skip some sides */
+/* based on UI_draw_roundbox, check on making a version which allows us to skip some sides */
static void ui_panel_category_draw_tab(
- int mode, float minx, float miny, float maxx, float maxy, float rad,
+ bool filled, float minx, float miny, float maxx, float maxy, float rad,
int roundboxtype,
- const bool use_highlight, const bool use_shadow,
- const unsigned char highlight_fade[3])
+ bool use_highlight, bool use_shadow,
+ const unsigned char highlight_fade[3],
+ const unsigned char col[3])
{
float vec[4][2] = {
{0.195, 0.02},
@@ -1527,74 +1568,96 @@ static void ui_panel_category_draw_tab(
{0.98, 0.805}};
int a;
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
+
/* mult */
for (a = 0; a < 4; a++) {
mul_v2_fl(vec[a], rad);
}
- glBegin(mode);
+ unsigned int vert_ct = 0;
+ if (use_highlight) {
+ vert_ct += (roundboxtype & UI_CNR_TOP_RIGHT) ? 6 : 1;
+ vert_ct += (roundboxtype & UI_CNR_TOP_LEFT) ? 6 : 1;
+ }
+ if (use_highlight && !use_shadow) {
+ vert_ct++;
+ }
+ else {
+ vert_ct += (roundboxtype & UI_CNR_BOTTOM_RIGHT) ? 6 : 1;
+ vert_ct += (roundboxtype & UI_CNR_BOTTOM_LEFT) ? 6 : 1;
+ }
+
+ immBindBuiltinProgram(GPU_SHADER_2D_SMOOTH_COLOR);
+
+ immBegin(filled ? GWN_PRIM_TRI_FAN : GWN_PRIM_LINE_STRIP, vert_ct);
+
+ immAttrib3ubv(color, col);
/* start with corner right-top */
if (use_highlight) {
if (roundboxtype & UI_CNR_TOP_RIGHT) {
- glVertex2f(maxx, maxy - rad);
+ immVertex2f(pos, maxx, maxy - rad);
for (a = 0; a < 4; a++) {
- glVertex2f(maxx - vec[a][1], maxy - rad + vec[a][0]);
+ immVertex2f(pos, maxx - vec[a][1], maxy - rad + vec[a][0]);
}
- glVertex2f(maxx - rad, maxy);
+ immVertex2f(pos, maxx - rad, maxy);
}
else {
- glVertex2f(maxx, maxy);
+ immVertex2f(pos, maxx, maxy);
}
/* corner left-top */
if (roundboxtype & UI_CNR_TOP_LEFT) {
- glVertex2f(minx + rad, maxy);
+ immVertex2f(pos, minx + rad, maxy);
for (a = 0; a < 4; a++) {
- glVertex2f(minx + rad - vec[a][0], maxy - vec[a][1]);
+ immVertex2f(pos, minx + rad - vec[a][0], maxy - vec[a][1]);
}
- glVertex2f(minx, maxy - rad);
+ immVertex2f(pos, minx, maxy - rad);
}
else {
- glVertex2f(minx, maxy);
+ immVertex2f(pos, minx, maxy);
}
}
if (use_highlight && !use_shadow) {
if (highlight_fade) {
- glColor3ubv(highlight_fade);
+ immAttrib3ubv(color, highlight_fade);
}
- glVertex2f(minx, miny + rad);
- glEnd();
+ immVertex2f(pos, minx, miny + rad);
+ immEnd();
+ immUnbindProgram();
return;
}
/* corner left-bottom */
if (roundboxtype & UI_CNR_BOTTOM_LEFT) {
- glVertex2f(minx, miny + rad);
+ immVertex2f(pos, minx, miny + rad);
for (a = 0; a < 4; a++) {
- glVertex2f(minx + vec[a][1], miny + rad - vec[a][0]);
+ immVertex2f(pos, minx + vec[a][1], miny + rad - vec[a][0]);
}
- glVertex2f(minx + rad, miny);
+ immVertex2f(pos, minx + rad, miny);
}
else {
- glVertex2f(minx, miny);
+ immVertex2f(pos, minx, miny);
}
/* corner right-bottom */
-
if (roundboxtype & UI_CNR_BOTTOM_RIGHT) {
- glVertex2f(maxx - rad, miny);
+ immVertex2f(pos, maxx - rad, miny);
for (a = 0; a < 4; a++) {
- glVertex2f(maxx - rad + vec[a][0], miny + vec[a][1]);
+ immVertex2f(pos, maxx - rad + vec[a][0], miny + vec[a][1]);
}
- glVertex2f(maxx, miny + rad);
+ immVertex2f(pos, maxx, miny + rad);
}
else {
- glVertex2f(maxx, miny);
+ immVertex2f(pos, maxx, miny);
}
- glEnd();
+ immEnd();
+ immUnbindProgram();
}
@@ -1717,21 +1780,26 @@ void UI_panel_category_draw_all(ARegion *ar, const char *category_id_active)
/* begin drawing */
glEnable(GL_LINE_SMOOTH);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
/* draw the background */
if (is_alpha) {
glEnable(GL_BLEND);
- glColor4ubv(theme_col_tab_bg);
+ immUniformColor4ubv(theme_col_tab_bg);
}
else {
- glColor3ubv(theme_col_tab_bg);
+ immUniformColor3ubv(theme_col_tab_bg);
}
- glRecti(v2d->mask.xmin, v2d->mask.ymin, v2d->mask.xmin + category_tabs_width, v2d->mask.ymax);
+ immRecti(pos, v2d->mask.xmin, v2d->mask.ymin, v2d->mask.xmin + category_tabs_width, v2d->mask.ymax);
if (is_alpha) {
glDisable(GL_BLEND);
}
+ immUnbindProgram();
+
for (pc_dyn = ar->panels_category.first; pc_dyn; pc_dyn = pc_dyn->next) {
const rcti *rct = &pc_dyn->rect;
const char *category_id = pc_dyn->idname;
@@ -1754,28 +1822,33 @@ void UI_panel_category_draw_all(ARegion *ar, const char *category_id_active)
if (is_active)
#endif
{
- glColor3ubv(is_active ? theme_col_tab_active : theme_col_tab_inactive);
- ui_panel_category_draw_tab(GL_POLYGON, rct->xmin, rct->ymin, rct->xmax, rct->ymax,
- tab_curve_radius - px, roundboxtype, true, true, NULL);
+ ui_panel_category_draw_tab(true, rct->xmin, rct->ymin, rct->xmax, rct->ymax,
+ tab_curve_radius - px, roundboxtype, true, true, NULL,
+ is_active ? theme_col_tab_active : theme_col_tab_inactive);
/* tab outline */
- glColor3ubv(theme_col_tab_outline);
- ui_panel_category_draw_tab(GL_LINE_STRIP, rct->xmin - px, rct->ymin - px, rct->xmax - px, rct->ymax + px,
- tab_curve_radius, roundboxtype, true, true, NULL);
+ ui_panel_category_draw_tab(false, rct->xmin - px, rct->ymin - px, rct->xmax - px, rct->ymax + px,
+ tab_curve_radius, roundboxtype, true, true, NULL, theme_col_tab_outline);
+
/* tab highlight (3d look) */
- glColor3ubv(is_active ? theme_col_tab_highlight : theme_col_tab_highlight_inactive);
- ui_panel_category_draw_tab(GL_LINE_STRIP, rct->xmin, rct->ymin, rct->xmax, rct->ymax,
+ ui_panel_category_draw_tab(false, rct->xmin, rct->ymin, rct->xmax, rct->ymax,
tab_curve_radius, roundboxtype, true, false,
- is_active ? theme_col_back : theme_col_tab_inactive);
+ is_active ? theme_col_back : theme_col_tab_inactive,
+ is_active ? theme_col_tab_highlight : theme_col_tab_highlight_inactive);
}
/* tab blackline */
if (!is_active) {
- glColor3ubv(theme_col_tab_divider);
- glRecti(v2d->mask.xmin + category_tabs_width - px,
- rct->ymin - tab_v_pad,
- v2d->mask.xmin + category_tabs_width,
- rct->ymax + tab_v_pad);
+ pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ immUniformColor3ubv(theme_col_tab_divider);
+ immRecti(pos, v2d->mask.xmin + category_tabs_width - px,
+ rct->ymin - tab_v_pad,
+ v2d->mask.xmin + category_tabs_width,
+ rct->ymax + tab_v_pad);
+
+ immUnbindProgram();
}
if (do_scaletabs) {
@@ -1788,7 +1861,7 @@ void UI_panel_category_draw_all(ARegion *ar, const char *category_id_active)
/* tab titles */
/* draw white shadow to give text more depth */
- glColor3ubv(theme_col_text);
+ BLF_color3ubv(fontid, theme_col_text);
/* main tab title */
BLF_draw(fontid, category_id_draw, category_draw_len);
@@ -1796,33 +1869,36 @@ void UI_panel_category_draw_all(ARegion *ar, const char *category_id_active)
glDisable(GL_BLEND);
/* tab blackline remaining (last tab) */
+ pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
if (pc_dyn->prev == NULL) {
- glColor3ubv(theme_col_tab_divider);
- glRecti(v2d->mask.xmin + category_tabs_width - px,
- rct->ymax + px,
- v2d->mask.xmin + category_tabs_width,
- v2d->mask.ymax);
+ immUniformColor3ubv(theme_col_tab_divider);
+ immRecti(pos, v2d->mask.xmin + category_tabs_width - px,
+ rct->ymax + px,
+ v2d->mask.xmin + category_tabs_width,
+ v2d->mask.ymax);
}
if (pc_dyn->next == NULL) {
- glColor3ubv(theme_col_tab_divider);
- glRecti(v2d->mask.xmin + category_tabs_width - px,
- 0,
- v2d->mask.xmin + category_tabs_width,
- rct->ymin);
+ immUniformColor3ubv(theme_col_tab_divider);
+ immRecti(pos, v2d->mask.xmin + category_tabs_width - px,
+ 0,
+ v2d->mask.xmin + category_tabs_width,
+ rct->ymin);
}
#ifdef USE_FLAT_INACTIVE
/* draw line between inactive tabs */
if (is_active == false && is_active_prev == false && pc_dyn->prev) {
- glColor3ubv(theme_col_tab_divider);
- glRecti(v2d->mask.xmin + (category_tabs_width / 5),
- rct->ymax + px,
- (v2d->mask.xmin + category_tabs_width) - (category_tabs_width / 5),
- rct->ymax + (px * 3));
+ immUniformColor3ubv(theme_col_tab_divider);
+ immRecti(pos, v2d->mask.xmin + (category_tabs_width / 5),
+ rct->ymax + px,
+ (v2d->mask.xmin + category_tabs_width) - (category_tabs_width / 5),
+ rct->ymax + (px * 3));
}
is_active_prev = is_active;
#endif
+ immUnbindProgram();
/* not essential, but allows events to be handled right up until the region edge [#38171] */
pc_dyn->rect.xmin = v2d->mask.xmin;
diff --git a/source/blender/editors/interface/interface_region_menu_popup.c b/source/blender/editors/interface/interface_region_menu_popup.c
index aa3e2464237..a0aecb12b84 100644
--- a/source/blender/editors/interface/interface_region_menu_popup.c
+++ b/source/blender/editors/interface/interface_region_menu_popup.c
@@ -603,11 +603,13 @@ void UI_popup_block_close(bContext *C, wmWindow *win, uiBlock *block)
/* if loading new .blend while popup is open, window will be NULL */
if (block->handle) {
if (win) {
+ const bScreen *screen = WM_window_get_active_screen(win);
+
UI_popup_handlers_remove(&win->modalhandlers, block->handle);
ui_popup_block_free(C, block->handle);
/* In the case we have nested popups, closing one may need to redraw another, see: T48874 */
- for (ARegion *ar = win->screen->regionbase.first; ar; ar = ar->next) {
+ for (ARegion *ar = screen->regionbase.first; ar; ar = ar->next) {
ED_region_tag_refresh_ui(ar);
}
}
diff --git a/source/blender/editors/interface/interface_region_popup.c b/source/blender/editors/interface/interface_region_popup.c
index 15053f0d8ca..24990c593ac 100644
--- a/source/blender/editors/interface/interface_region_popup.c
+++ b/source/blender/editors/interface/interface_region_popup.c
@@ -324,7 +324,7 @@ static void ui_block_region_draw(const bContext *C, ARegion *ar)
* Use to refresh centered popups on screen resizing (for splash).
*/
static void ui_block_region_popup_window_listener(
- bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn, const Scene *UNUSED(scene))
{
switch (wmn->category) {
case NC_WINDOW:
diff --git a/source/blender/editors/interface/interface_region_search.c b/source/blender/editors/interface/interface_region_search.c
index c9d313a4bab..f14f9af8785 100644
--- a/source/blender/editors/interface/interface_region_search.c
+++ b/source/blender/editors/interface/interface_region_search.c
@@ -397,7 +397,7 @@ int ui_searchbox_autocomplete(bContext *C, ARegion *ar, uiBut *but, char *str)
return match;
}
-static void ui_searchbox_region_draw_cb(const bContext *UNUSED(C), ARegion *ar)
+static void ui_searchbox_region_draw_cb(const bContext *C, ARegion *ar)
{
uiSearchboxData *data = ar->regiondata;
@@ -415,6 +415,9 @@ static void ui_searchbox_region_draw_cb(const bContext *UNUSED(C), ARegion *ar)
if (data->preview) {
/* draw items */
for (a = 0; a < data->items.totitem; a++) {
+ /* ensure icon is up-to-date */
+ ui_icon_ensure_deferred(C, data->items.icons[a], data->preview);
+
ui_searchbox_butrect(&rect, data, a);
/* widget itself */
diff --git a/source/blender/editors/interface/interface_region_tooltip.c b/source/blender/editors/interface/interface_region_tooltip.c
index 1eec3737215..07fbefa42e1 100644
--- a/source/blender/editors/interface/interface_region_tooltip.c
+++ b/source/blender/editors/interface/interface_region_tooltip.c
@@ -164,6 +164,7 @@ static void ui_tooltip_region_draw_cb(const bContext *UNUSED(C), ARegion *ar)
uiWidgetColors *theme = ui_tooltip_get_theme();
rcti bbox = data->bbox;
float tip_colors[UI_TIP_LC_MAX][3];
+ unsigned char drawcol[4] = {0, 0, 0, 255}; /* to store color in while drawing (alpha is always 255) */
float *main_color = tip_colors[UI_TIP_LC_MAIN]; /* the color from the theme */
float *value_color = tip_colors[UI_TIP_LC_VALUE];
@@ -232,9 +233,9 @@ static void ui_tooltip_region_draw_cb(const bContext *UNUSED(C), ARegion *ar)
fstyle_header.shadowalpha = 1.0f;
fstyle_header.word_wrap = true;
+ rgb_float_to_uchar(drawcol, tip_colors[UI_TIP_LC_MAIN]);
UI_fontstyle_set(&fstyle_header);
- glColor3fv(tip_colors[UI_TIP_LC_MAIN]);
- UI_fontstyle_draw(&fstyle_header, &bbox, field->text);
+ UI_fontstyle_draw(&fstyle_header, &bbox, field->text, drawcol);
fstyle_header.shadow = 0;
@@ -245,8 +246,8 @@ static void ui_tooltip_region_draw_cb(const bContext *UNUSED(C), ARegion *ar)
bbox.xmin += xofs;
bbox.ymax -= yofs;
- glColor3fv(tip_colors[UI_TIP_LC_ACTIVE]);
- UI_fontstyle_draw(&fstyle_header, &bbox, field->text_suffix);
+ rgb_float_to_uchar(drawcol, tip_colors[UI_TIP_LC_ACTIVE]);
+ UI_fontstyle_draw(&fstyle_header, &bbox, field->text_suffix, drawcol);
/* undo offset */
bbox.xmin -= xofs;
@@ -261,8 +262,8 @@ static void ui_tooltip_region_draw_cb(const bContext *UNUSED(C), ARegion *ar)
UI_fontstyle_set(&fstyle_mono);
/* XXX, needed because we dont have mono in 'U.uifonts' */
BLF_size(fstyle_mono.uifont_id, fstyle_mono.points * U.pixelsize, U.dpi);
- glColor3fv(tip_colors[field->format.color_id]);
- UI_fontstyle_draw(&fstyle_mono, &bbox, field->text);
+ rgb_float_to_uchar(drawcol, tip_colors[field->format.color_id]);
+ UI_fontstyle_draw(&fstyle_mono, &bbox, field->text, drawcol);
}
else {
uiFontStyle fstyle_normal = data->fstyle;
@@ -270,9 +271,9 @@ static void ui_tooltip_region_draw_cb(const bContext *UNUSED(C), ARegion *ar)
fstyle_normal.word_wrap = true;
/* draw remaining data */
+ rgb_float_to_uchar(drawcol, tip_colors[field->format.color_id]);
UI_fontstyle_set(&fstyle_normal);
- glColor3fv(tip_colors[field->format.color_id]);
- UI_fontstyle_draw(&fstyle_normal, &bbox, field->text);
+ UI_fontstyle_draw(&fstyle_normal, &bbox, field->text, drawcol);
}
bbox.ymax -= data->lineh * field->geom.lines;
@@ -313,6 +314,63 @@ static void ui_tooltip_region_free_cb(ARegion *ar)
/** \name ToolTip Creation
* \{ */
+static uiTooltipData *ui_tooltip_data_from_keymap(bContext *C, wmKeyMap *keymap)
+{
+ char buf[512];
+
+ /* create tooltip data */
+ uiTooltipData *data = MEM_callocN(sizeof(uiTooltipData), "uiTooltipData");
+
+ for (wmKeyMapItem *kmi = keymap->items.first; kmi; kmi = kmi->next) {
+ wmOperatorType *ot = WM_operatortype_find(kmi->idname, true);
+ if (ot != NULL) {
+ /* Tip */
+ {
+ uiTooltipField *field = text_field_add(
+ data, &(uiTooltipFormat){
+ .style = UI_TIP_STYLE_NORMAL,
+ .color_id = UI_TIP_LC_MAIN,
+ .is_pad = true,
+ });
+ field->text = BLI_strdup(ot->description[0] ? ot->description : ot->name);
+ }
+ /* Shortcut */
+ {
+ uiTooltipField *field = text_field_add(
+ data, &(uiTooltipFormat){
+ .style = UI_TIP_STYLE_NORMAL,
+ .color_id = UI_TIP_LC_NORMAL,
+ });
+ bool found = false;
+ if (WM_keymap_item_to_string(kmi, false, buf, sizeof(buf))) {
+ found = true;
+ }
+ field->text = BLI_sprintfN(TIP_("Shortcut: %s"), found ? buf : "None");
+ }
+
+ /* Python */
+ {
+ uiTooltipField *field = text_field_add(
+ data, &(uiTooltipFormat){
+ .style = UI_TIP_STYLE_NORMAL,
+ .color_id = UI_TIP_LC_PYTHON,
+ });
+ char *str = WM_operator_pystring_ex(C, NULL, false, false, ot, kmi->ptr);
+ WM_operator_pystring_abbreviate(str, 32);
+ field->text = BLI_sprintfN(TIP_("Python: %s"), str);
+ MEM_freeN(str);
+ }
+ }
+ }
+ if (data->fields_len == 0) {
+ MEM_freeN(data);
+ return NULL;
+ }
+ else {
+ return data;
+ }
+}
+
static uiTooltipData *ui_tooltip_data_from_button(bContext *C, uiBut *but)
{
uiStringInfo but_tip = {BUT_GET_TIP, NULL};
@@ -565,6 +623,112 @@ static uiTooltipData *ui_tooltip_data_from_button(bContext *C, uiBut *but)
}
}
+static uiTooltipData *ui_tooltip_data_from_manipulator(bContext *C, wmManipulator *mpr)
+{
+ uiTooltipData *data = MEM_callocN(sizeof(uiTooltipData), "uiTooltipData");
+
+ /* TODO(campbell): a way for manipulators to have their own descriptions (low priority). */
+
+ /* Operator Actions */
+ {
+ bool use_drag = mpr->drag_part != -1 && mpr->highlight_part != mpr->drag_part;
+
+ const struct {
+ int part;
+ const char *prefix;
+ } mpop_actions[] = {
+ {
+ .part = mpr->highlight_part,
+ .prefix = use_drag ? TIP_("Click") : NULL,
+ }, {
+ .part = use_drag ? mpr->drag_part : -1,
+ .prefix = use_drag ? TIP_("Drag") : NULL,
+ },
+ };
+
+ for (int i = 0; i < ARRAY_SIZE(mpop_actions); i++) {
+ wmManipulatorOpElem *mpop = (mpop_actions[i].part != -1) ? WM_manipulator_operator_get(mpr, mpop_actions[i].part) : NULL;
+ if (mpop != NULL) {
+ /* Description */
+ const char *info = RNA_struct_ui_description(mpop->type->srna);
+ if (!(info && info[0])) {
+ info = RNA_struct_ui_name(mpop->type->srna);
+ }
+
+ if (info && info[0]) {
+ char *text = NULL;
+ if (mpop_actions[i].prefix != NULL) {
+ text = BLI_sprintfN("%s: %s", mpop_actions[i].prefix, info);
+ }
+ else {
+ text = BLI_strdup(info);
+ }
+
+ if (text != NULL) {
+ uiTooltipField *field = text_field_add(
+ data, &(uiTooltipFormat){
+ .style = UI_TIP_STYLE_HEADER,
+ .color_id = UI_TIP_LC_VALUE,
+ .is_pad = true,
+ });
+ field->text = text;
+ }
+ }
+
+ /* Shortcut */
+ {
+ bool found = false;
+ IDProperty *prop = mpop->ptr.data;
+ char buf[128];
+ if (WM_key_event_operator_string(
+ C, mpop->type->idname, WM_OP_INVOKE_DEFAULT, prop, true,
+ buf, ARRAY_SIZE(buf)))
+ {
+ found = true;
+ }
+ uiTooltipField *field = text_field_add(
+ data, &(uiTooltipFormat){
+ .style = UI_TIP_STYLE_NORMAL,
+ .color_id = UI_TIP_LC_VALUE,
+ .is_pad = true,
+ });
+ field->text = BLI_sprintfN(TIP_("Shortcut: %s"), found ? buf : "None");
+ }
+ }
+ }
+ }
+
+ /* Property Actions */
+ if (mpr->type->target_property_defs_len) {
+ wmManipulatorProperty *mpr_prop_array = WM_manipulator_target_property_array(mpr);
+ for (int i = 0; i < mpr->type->target_property_defs_len; i++) {
+ /* TODO(campbell): function callback descriptions. */
+ wmManipulatorProperty *mpr_prop = &mpr_prop_array[i];
+ if (mpr_prop->prop != NULL) {
+ const char *info = RNA_property_ui_description(mpr_prop->prop);
+ if (info && info[0]) {
+ uiTooltipField *field = text_field_add(
+ data, &(uiTooltipFormat){
+ .style = UI_TIP_STYLE_NORMAL,
+ .color_id = UI_TIP_LC_VALUE,
+ .is_pad = true,
+ });
+ field->text = BLI_strdup(info);
+ }
+ }
+ }
+ }
+
+ if (data->fields_len == 0) {
+ MEM_freeN(data);
+ return NULL;
+ }
+ else {
+ return data;
+ }
+}
+
+
static ARegion *ui_tooltip_create_with_data(
bContext *C, uiTooltipData *data,
const float init_position[2],
@@ -738,6 +902,22 @@ ARegion *UI_tooltip_create_from_button(bContext *C, ARegion *butregion, uiBut *b
}
uiTooltipData *data = NULL;
+ /* custom tips for pre-defined operators */
+ if (but->optype) {
+ if (STREQ(but->optype->idname, "WM_OT_tool_set")) {
+ char keymap[64] = "";
+ RNA_string_get(but->opptr, "keymap", keymap);
+ if (keymap[0]) {
+ ScrArea *sa = CTX_wm_area(C);
+ wmKeyMap *km = WM_keymap_find_all(C, keymap, sa->spacetype, RGN_TYPE_WINDOW);
+ if (km != NULL) {
+ data = ui_tooltip_data_from_keymap(C, km);
+ }
+ }
+ }
+ }
+ /* toolsystem exception */
+
if (data == NULL) {
data = ui_tooltip_data_from_button(C, but);
}
@@ -756,6 +936,23 @@ ARegion *UI_tooltip_create_from_button(bContext *C, ARegion *butregion, uiBut *b
return ui_tooltip_create_with_data(C, data, init_position, aspect);
}
+ARegion *UI_tooltip_create_from_manipulator(bContext *C, wmManipulator *mpr)
+{
+ wmWindow *win = CTX_wm_window(C);
+ const float aspect = 1.0f;
+ float init_position[2];
+
+ uiTooltipData *data = ui_tooltip_data_from_manipulator(C, mpr);
+ if (data == NULL) {
+ return NULL;
+ }
+
+ init_position[0] = win->eventstate->x;
+ init_position[1] = win->eventstate->y;
+
+ return ui_tooltip_create_with_data(C, data, init_position, aspect);
+}
+
void UI_tooltip_free(bContext *C, bScreen *sc, ARegion *ar)
{
ui_region_temp_remove(C, sc, ar);
diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c
index dd1d38bbe2e..fa25a119ada 100644
--- a/source/blender/editors/interface/interface_regions.c
+++ b/source/blender/editors/interface/interface_regions.c
@@ -61,6 +61,9 @@ ARegion *ui_region_temp_add(bScreen *sc)
void ui_region_temp_remove(bContext *C, bScreen *sc, ARegion *ar)
{
wmWindow *win = CTX_wm_window(C);
+
+ BLI_assert(ar->regiontype == RGN_TYPE_TEMPORARY);
+ BLI_assert(BLI_findindex(&sc->regionbase, ar) != -1);
if (win)
wm_draw_region_clear(win, ar);
diff --git a/source/blender/editors/interface/interface_style.c b/source/blender/editors/interface/interface_style.c
index 8b41302b5bb..01456e2e122 100644
--- a/source/blender/editors/interface/interface_style.c
+++ b/source/blender/editors/interface/interface_style.c
@@ -149,7 +149,7 @@ static uiFont *uifont_to_blfont(int id)
void UI_fontstyle_draw_ex(
- const uiFontStyle *fs, const rcti *rect, const char *str,
+ const uiFontStyle *fs, const rcti *rect, const char *str, const unsigned char col[4],
size_t len, float *r_xofs, float *r_yofs)
{
int xofs = 0, yofs;
@@ -196,6 +196,7 @@ void UI_fontstyle_draw_ex(
/* clip is very strict, so we give it some space */
BLF_clipping(fs->uifont_id, rect->xmin - 2, rect->ymin - 4, rect->xmax + 1, rect->ymax + 4);
BLF_position(fs->uifont_id, rect->xmin + xofs, rect->ymin + yofs, 0.0f);
+ BLF_color4ubv(fs->uifont_id, col);
BLF_draw(fs->uifont_id, str, len);
@@ -205,17 +206,17 @@ void UI_fontstyle_draw_ex(
*r_yofs = yofs;
}
-void UI_fontstyle_draw(const uiFontStyle *fs, const rcti *rect, const char *str)
+void UI_fontstyle_draw(const uiFontStyle *fs, const rcti *rect, const char *str, const unsigned char col[4])
{
float xofs, yofs;
UI_fontstyle_draw_ex(
- fs, rect, str,
+ fs, rect, str, col,
BLF_DRAW_STR_DUMMY_MAX, &xofs, &yofs);
}
/* drawn same as above, but at 90 degree angle */
-void UI_fontstyle_draw_rotated(const uiFontStyle *fs, const rcti *rect, const char *str)
+void UI_fontstyle_draw_rotated(const uiFontStyle *fs, const rcti *rect, const char *str, const unsigned char col[4])
{
float height;
int xofs, yofs;
@@ -249,6 +250,7 @@ void UI_fontstyle_draw_rotated(const uiFontStyle *fs, const rcti *rect, const ch
BLF_enable(fs->uifont_id, BLF_ROTATION);
BLF_rotation(fs->uifont_id, angle);
+ BLF_color4ubv(fs->uifont_id, col);
if (fs->shadow) {
BLF_enable(fs->uifont_id, BLF_SHADOW);
@@ -275,13 +277,14 @@ void UI_fontstyle_draw_rotated(const uiFontStyle *fs, const rcti *rect, const ch
*
* For drawing on-screen labels.
*/
-void UI_fontstyle_draw_simple(const uiFontStyle *fs, float x, float y, const char *str)
+void UI_fontstyle_draw_simple(const uiFontStyle *fs, float x, float y, const char *str, const unsigned char col[4])
{
if (fs->kerning == 1)
BLF_enable(fs->uifont_id, BLF_KERNING_DEFAULT);
UI_fontstyle_set(fs);
BLF_position(fs->uifont_id, x, y, 0.0f);
+ BLF_color4ubv(fs->uifont_id, col);
BLF_draw(fs->uifont_id, str, BLF_DRAW_STR_DUMMY_MAX);
if (fs->kerning == 1)
@@ -293,7 +296,7 @@ void UI_fontstyle_draw_simple(const uiFontStyle *fs, float x, float y, const cha
*/
void UI_fontstyle_draw_simple_backdrop(
const uiFontStyle *fs, float x, float y, const char *str,
- const unsigned char fg[4], const unsigned char bg[4])
+ const float col_fg[4], const float col_bg[4])
{
if (fs->kerning == 1)
BLF_enable(fs->uifont_id, BLF_KERNING_DEFAULT);
@@ -307,21 +310,19 @@ void UI_fontstyle_draw_simple_backdrop(
const float margin = height / 4.0f;
/* backdrop */
- glColor4ubv(bg);
+ float color[4] = { col_bg[0], col_bg[1], col_bg[2], 0.5f };
- UI_draw_roundbox_corner_set(UI_CNR_ALL | UI_RB_ALPHA);
- UI_draw_roundbox(
+ UI_draw_roundbox_corner_set(UI_CNR_ALL);
+ UI_draw_roundbox_aa(true,
x - margin,
(y + decent) - margin,
x + width + margin,
(y + decent) + height + margin,
- margin);
-
- glColor4ubv(fg);
+ margin, color);
}
-
BLF_position(fs->uifont_id, x, y, 0.0f);
+ BLF_color4fv(fs->uifont_id, col_fg);
BLF_draw(fs->uifont_id, str, BLF_DRAW_STR_DUMMY_MAX);
if (fs->kerning == 1)
diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c
index 82a502db0ad..94379ee1185 100644
--- a/source/blender/editors/interface/interface_templates.c
+++ b/source/blender/editors/interface/interface_templates.c
@@ -56,11 +56,12 @@
#include "BKE_colorband.h"
#include "BKE_colortools.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_global.h"
#include "BKE_idcode.h"
#include "BKE_idprop.h"
+#include "BKE_layer.h"
#include "BKE_library.h"
+#include "BKE_library_override.h"
#include "BKE_linestyle.h"
#include "BKE_main.h"
#include "BKE_modifier.h"
@@ -72,6 +73,9 @@
#include "BKE_sca.h"
#include "BKE_screen.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#include "ED_screen.h"
#include "ED_object.h"
#include "ED_render.h"
@@ -91,11 +95,126 @@
// #define USE_OP_RESET_BUT // we may want to make this optional, disable for now.
+/* defines for templateID/TemplateSearch */
+#define TEMPLATE_SEARCH_TEXTBUT_WIDTH (UI_UNIT_X * 6)
+#define TEMPLATE_SEARCH_TEXTBUT_HEIGHT UI_UNIT_Y
+
void UI_template_fix_linking(void)
{
}
+/**
+ * Add a block button for the search menu for templateID and templateSearch.
+ */
+static void template_add_button_search_menu(
+ const bContext *C, uiLayout *layout, uiBlock *block,
+ PointerRNA *ptr, PropertyRNA *prop,
+ uiBlockCreateFunc block_func, void *block_argN, const char * const tip,
+ const bool use_previews, const bool editable)
+{
+ PointerRNA active_ptr = RNA_property_pointer_get(ptr, prop);
+ ID *id = (active_ptr.data && RNA_struct_is_ID(active_ptr.type)) ? active_ptr.data : NULL;
+ const ID *idfrom = ptr->id.data;
+ const StructRNA *type = active_ptr.type ? active_ptr.type : RNA_property_pointer_type(ptr, prop);
+ uiBut *but;
+
+ if (use_previews) {
+ ARegion *region = CTX_wm_region(C);
+ const bool use_big_size = (region->regiontype != RGN_TYPE_HEADER); /* silly check, could be more generic */
+ /* Ugly exception for screens here, drawing their preview in icon size looks ugly/useless */
+ const bool use_preview_icon = use_big_size || (id && (GS(id->name) != ID_SCR));
+ const short width = UI_UNIT_X * (use_big_size ? 6 : 1.6f);
+ const short height = UI_UNIT_Y * (use_big_size ? 6 : 1);
+
+ but = uiDefBlockButN(block, block_func, block_argN, "", 0, 0, width, height, tip);
+ if (use_preview_icon) {
+ int icon = id ? ui_id_icon_get(C, id, use_big_size) : RNA_struct_ui_icon(type);
+ ui_def_but_icon(but, icon, UI_HAS_ICON | UI_BUT_ICON_PREVIEW);
+ }
+ else {
+ ui_def_but_icon(but, RNA_struct_ui_icon(type), UI_HAS_ICON);
+ UI_but_drawflag_enable(but, UI_BUT_ICON_LEFT);
+ }
+
+ if ((idfrom && idfrom->lib) || !editable)
+ UI_but_flag_enable(but, UI_BUT_DISABLED);
+ if (use_big_size) {
+ uiLayoutRow(layout, true);
+ }
+ }
+ else {
+ but = uiDefBlockButN(block, block_func, block_argN, "", 0, 0, UI_UNIT_X * 1.6, UI_UNIT_Y, tip);
+ ui_def_but_icon(but, RNA_struct_ui_icon(type), UI_HAS_ICON);
+ if (id) {
+ /* default dragging of icon for id browse buttons */
+ UI_but_drag_set_id(but, id);
+ }
+ UI_but_drawflag_enable(but, UI_BUT_ICON_LEFT);
+
+ if ((idfrom && idfrom->lib) || !editable)
+ UI_but_flag_enable(but, UI_BUT_DISABLED);
+ }
+}
+
+static uiBlock *template_common_search_menu(
+ const bContext *C, ARegion *region,
+ uiButSearchFunc search_func, void *search_arg,
+ uiButHandleFunc handle_func, void *active_item,
+ const int preview_rows, const int preview_cols)
+{
+ static char search[256];
+ wmWindow *win = CTX_wm_window(C);
+ uiBlock *block;
+ uiBut *but;
+
+ /* clear initial search string, then all items show */
+ search[0] = 0;
+
+ block = UI_block_begin(C, region, "_popup", UI_EMBOSS);
+ UI_block_flag_enable(block, UI_BLOCK_LOOP | UI_BLOCK_SEARCH_MENU);
+
+ /* preview thumbnails */
+ if (preview_rows > 0 && preview_cols > 0) {
+ const int w = 4 * U.widget_unit * preview_cols;
+ const int h = 5 * U.widget_unit * preview_rows;
+
+ /* fake button, it holds space for search items */
+ uiDefBut(block, UI_BTYPE_LABEL, 0, "", 10, 26, w, h, NULL, 0, 0, 0, 0, NULL);
+
+ but = uiDefSearchBut(
+ block, search, 0, ICON_VIEWZOOM, sizeof(search), 10, 0, w, UI_UNIT_Y,
+ preview_rows, preview_cols, "");
+ }
+ /* list view */
+ else {
+ const int searchbox_width = UI_searchbox_size_x();
+ const int searchbox_height = UI_searchbox_size_y();
+
+ /* fake button, it holds space for search items */
+ uiDefBut(
+ block, UI_BTYPE_LABEL, 0, "", 10, 15, searchbox_width, searchbox_height,
+ NULL, 0, 0, 0, 0, NULL);
+ but = uiDefSearchBut(
+ block, search, 0, ICON_VIEWZOOM, sizeof(search), 10, 0,
+ searchbox_width, UI_UNIT_Y - 1, 0, 0, "");
+ }
+ UI_but_func_search_set(
+ but, ui_searchbox_create_generic, search_func,
+ search_arg, handle_func, active_item);
+
+
+ UI_block_bounds_set_normal(block, 0.3f * U.widget_unit);
+ UI_block_direction_set(block, UI_DIR_DOWN);
+
+ /* give search-field focus */
+ UI_but_focus_on_enter_event(win, but);
+ /* this type of search menu requires undo */
+ but->flag |= UI_BUT_UNDO;
+
+ return block;
+}
+
/********************** Header Template *************************/
void uiTemplateHeader(uiLayout *layout, bContext *C)
@@ -231,30 +350,25 @@ static void id_search_cb_objects_from_scene(const bContext *C, void *arg_templat
}
BKE_main_id_flag_listbase(lb, LIB_TAG_DOIT, false);
- for (Base *base = scene->base.first; base; base = base->next) {
- base->object->id.tag |= LIB_TAG_DOIT;
+
+ FOREACH_SCENE_OBJECT(scene, ob_iter)
+ {
+ ob_iter->id.tag |= LIB_TAG_DOIT;
}
+ FOREACH_SCENE_OBJECT_END
id_search_cb_tagged(C, arg_template, str, items);
}
/* ID Search browse menu, open */
static uiBlock *id_search_menu(bContext *C, ARegion *ar, void *arg_litem)
{
- static char search[256];
static TemplateID template_ui;
- PointerRNA idptr;
- wmWindow *win = CTX_wm_window(C);
- uiBlock *block;
- uiBut *but;
+ PointerRNA active_item_ptr;
void (*id_search_cb_p)(const bContext *, void *, const char *, uiSearchItems *) = id_search_cb;
- /* clear initial search string, then all items show */
- search[0] = 0;
/* arg_litem is malloced, can be freed by parent button */
template_ui = *((TemplateID *)arg_litem);
-
- /* get active id for showing first item */
- idptr = RNA_property_pointer_get(&template_ui.ptr, template_ui.prop);
+ active_item_ptr = RNA_property_pointer_get(&template_ui.ptr, template_ui.prop);
if (template_ui.filter) {
/* Currently only used for objects. */
@@ -265,46 +379,9 @@ static uiBlock *id_search_menu(bContext *C, ARegion *ar, void *arg_litem)
}
}
- block = UI_block_begin(C, ar, "_popup", UI_EMBOSS);
- UI_block_flag_enable(block, UI_BLOCK_LOOP | UI_BLOCK_SEARCH_MENU);
-
- /* preview thumbnails */
- if (template_ui.prv_rows > 0 && template_ui.prv_cols > 0) {
- int w = 4 * U.widget_unit * template_ui.prv_cols;
- int h = 5 * U.widget_unit * template_ui.prv_rows;
-
- /* fake button, it holds space for search items */
- uiDefBut(block, UI_BTYPE_LABEL, 0, "", 10, 26, w, h, NULL, 0, 0, 0, 0, NULL);
-
- but = uiDefSearchBut(block, search, 0, ICON_VIEWZOOM, sizeof(search), 10, 0, w, UI_UNIT_Y,
- template_ui.prv_rows, template_ui.prv_cols, "");
- UI_but_func_search_set(
- but, ui_searchbox_create_generic, id_search_cb_p,
- &template_ui, id_search_call_cb, idptr.data);
- }
- /* list view */
- else {
- const int searchbox_width = UI_searchbox_size_x();
- const int searchbox_height = UI_searchbox_size_y();
-
- /* fake button, it holds space for search items */
- uiDefBut(block, UI_BTYPE_LABEL, 0, "", 10, 15, searchbox_width, searchbox_height, NULL, 0, 0, 0, 0, NULL);
- but = uiDefSearchBut(block, search, 0, ICON_VIEWZOOM, sizeof(search), 10, 0, searchbox_width, UI_UNIT_Y - 1, 0, 0, "");
- UI_but_func_search_set(
- but, ui_searchbox_create_generic, id_search_cb_p,
- &template_ui, id_search_call_cb, idptr.data);
- }
-
-
- UI_block_bounds_set_normal(block, 0.3f * U.widget_unit);
- UI_block_direction_set(block, UI_DIR_DOWN);
-
- /* give search-field focus */
- UI_but_focus_on_enter_event(win, but);
- /* this type of search menu requires undo */
- but->flag |= UI_BUT_UNDO;
-
- return block;
+ return template_common_search_menu(
+ C, ar, id_search_cb_p, &template_ui, id_search_call_cb, active_item_ptr.data,
+ template_ui.prv_rows, template_ui.prv_cols);
}
/************************ ID Template ***************************/
@@ -382,14 +459,34 @@ static void template_id_cb(bContext *C, void *arg_litem, void *arg_event)
case UI_ID_LOCAL:
if (id) {
Main *bmain = CTX_data_main(C);
- if (id_make_local(bmain, id, false, false)) {
- BKE_main_id_clear_newpoins(bmain);
+ if (CTX_wm_window(C)->eventstate->shift) {
+ ID *override_id = BKE_override_static_create_from_id(bmain, id);
+ if (override_id != NULL) {
+ BKE_main_id_clear_newpoins(bmain);
- /* reassign to get get proper updates/notifiers */
- idptr = RNA_property_pointer_get(&template_ui->ptr, template_ui->prop);
- RNA_property_pointer_set(&template_ui->ptr, template_ui->prop, idptr);
- RNA_property_update(C, &template_ui->ptr, template_ui->prop);
+ /* Assign new pointer, takes care of updates/notifiers */
+ RNA_id_pointer_create(override_id, &idptr);
+ }
}
+ else {
+ if (id_make_local(bmain, id, false, false)) {
+ BKE_main_id_clear_newpoins(bmain);
+
+ /* reassign to get get proper updates/notifiers */
+ idptr = RNA_property_pointer_get(&template_ui->ptr, template_ui->prop);
+ }
+ }
+ RNA_property_pointer_set(&template_ui->ptr, template_ui->prop, idptr);
+ RNA_property_update(C, &template_ui->ptr, template_ui->prop);
+ }
+ break;
+ case UI_ID_OVERRIDE:
+ if (id && id->override_static) {
+ BKE_override_static_free(&id->override_static);
+ /* reassign to get get proper updates/notifiers */
+ idptr = RNA_property_pointer_get(&template_ui->ptr, template_ui->prop);
+ RNA_property_pointer_set(&template_ui->ptr, template_ui->prop, idptr);
+ RNA_property_update(C, &template_ui->ptr, template_ui->prop);
}
break;
case UI_ID_ALONE:
@@ -403,13 +500,13 @@ static void template_id_cb(bContext *C, void *arg_litem, void *arg_event)
Scene *scene = CTX_data_scene(C);
ED_object_single_user(bmain, scene, (struct Object *)id);
WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, scene);
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
}
else {
if (id) {
Main *bmain = CTX_data_main(C);
id_single_user(C, id, &template_ui->ptr, template_ui->prop);
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
}
}
}
@@ -421,7 +518,7 @@ static void template_id_cb(bContext *C, void *arg_litem, void *arg_event)
}
}
-static const char *template_id_browse_tip(StructRNA *type)
+static const char *template_id_browse_tip(const StructRNA *type)
{
if (type) {
switch (RNA_type_to_ID_code(type)) {
@@ -453,6 +550,8 @@ static const char *template_id_browse_tip(StructRNA *type)
case ID_PAL: return N_("Browse Palette Data to be linked");
case ID_PC: return N_("Browse Paint Curve Data to be linked");
case ID_CF: return N_("Browse Cache Files to be linked");
+ case ID_WS: return N_("Browse Workspace to be linked");
+ case ID_LP: return N_("Browse LightProbe to be linked");
}
}
return N_("Browse ID data to be linked");
@@ -476,12 +575,16 @@ static void template_ID(
bContext *C, uiLayout *layout, TemplateID *template_ui, StructRNA *type, int flag,
const char *newop, const char *openop, const char *unlinkop)
{
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
uiBut *but;
uiBlock *block;
PointerRNA idptr;
// ListBase *lb; // UNUSED
ID *id, *idfrom;
const bool editable = RNA_property_editable(&template_ui->ptr, template_ui->prop);
+ const bool use_previews = template_ui->preview = (flag & UI_ID_PREVIEWS) != 0;
idptr = RNA_property_pointer_get(&template_ui->ptr, template_ui->prop);
id = idptr.data;
@@ -494,29 +597,11 @@ static void template_ID(
if (idptr.type)
type = idptr.type;
- if (flag & UI_ID_PREVIEWS) {
- template_ui->preview = true;
-
- but = uiDefBlockButN(block, id_search_menu, MEM_dupallocN(template_ui), "", 0, 0, UI_UNIT_X * 6, UI_UNIT_Y * 6,
- TIP_(template_id_browse_tip(type)));
- ui_def_but_icon(but, id ? ui_id_icon_get(C, id, true) : RNA_struct_ui_icon(type),
- UI_HAS_ICON | UI_BUT_ICON_PREVIEW);
-
- if ((idfrom && idfrom->lib) || !editable)
- UI_but_flag_enable(but, UI_BUT_DISABLED);
-
- uiLayoutRow(layout, true);
- }
- else if (flag & UI_ID_BROWSE) {
- but = uiDefBlockButN(block, id_search_menu, MEM_dupallocN(template_ui), "", 0, 0, UI_UNIT_X * 1.6, UI_UNIT_Y,
- TIP_(template_id_browse_tip(type)));
- ui_def_but_icon(but, RNA_struct_ui_icon(type), UI_HAS_ICON);
- /* default dragging of icon for id browse buttons */
- UI_but_drag_set_id(but, id);
- UI_but_drawflag_enable(but, UI_BUT_ICON_LEFT);
-
- if ((idfrom && idfrom->lib) || !editable)
- UI_but_flag_enable(but, UI_BUT_DISABLED);
+ if (flag & UI_ID_BROWSE) {
+ template_add_button_search_menu(
+ C, layout, block, &template_ui->ptr, template_ui->prop,
+ id_search_menu, MEM_dupallocN(template_ui), TIP_(template_id_browse_tip(type)),
+ use_previews, editable);
}
/* text button with name */
@@ -526,8 +611,9 @@ static void template_ID(
//text_idbutton(id, name);
name[0] = '\0';
- but = uiDefButR(block, UI_BTYPE_TEXT, 0, name, 0, 0, UI_UNIT_X * 6, UI_UNIT_Y,
- &idptr, "name", -1, 0, 0, -1, -1, RNA_struct_ui_description(type));
+ but = uiDefButR(
+ block, UI_BTYPE_TEXT, 0, name, 0, 0, TEMPLATE_SEARCH_TEXTBUT_WIDTH, TEMPLATE_SEARCH_TEXTBUT_HEIGHT,
+ &idptr, "name", -1, 0, 0, -1, -1, RNA_struct_ui_description(type));
UI_but_funcN_set(but, template_id_cb, MEM_dupallocN(template_ui), SET_INT_IN_POINTER(UI_ID_RENAME));
if (user_alert) UI_but_flag_enable(but, UI_BUT_REDALERT);
@@ -538,13 +624,25 @@ static void template_ID(
UI_but_flag_enable(but, UI_BUT_DISABLED);
}
else {
+ const bool disabled = (!id_make_local(CTX_data_main(C), id, true /* test */, false) ||
+ (idfrom && idfrom->lib));
but = uiDefIconBut(block, UI_BTYPE_BUT, 0, ICON_LIBRARY_DATA_DIRECT, 0, 0, UI_UNIT_X, UI_UNIT_Y,
- NULL, 0, 0, 0, 0, TIP_("Direct linked library data-block, click to make local"));
- if (!id_make_local(CTX_data_main(C), id, true /* test */, false) || (idfrom && idfrom->lib))
+ NULL, 0, 0, 0, 0,
+ TIP_("Direct linked library data-block, click to make local, "
+ "Shift + Click to create a static override"));
+ if (disabled) {
UI_but_flag_enable(but, UI_BUT_DISABLED);
+ }
+ else {
+ UI_but_funcN_set(but, template_id_cb, MEM_dupallocN(template_ui), SET_INT_IN_POINTER(UI_ID_LOCAL));
+ }
}
-
- UI_but_funcN_set(but, template_id_cb, MEM_dupallocN(template_ui), SET_INT_IN_POINTER(UI_ID_LOCAL));
+ }
+ else if (ID_IS_STATIC_OVERRIDE(id)) {
+ but = uiDefIconBut(block, UI_BTYPE_BUT, 0, ICON_LIBRARY_DATA_OVERRIDE, 0, 0, UI_UNIT_X, UI_UNIT_Y,
+ NULL, 0, 0, 0, 0,
+ TIP_("Static override of linked library data-block, click to make fully local"));
+ UI_but_funcN_set(but, template_id_cb, MEM_dupallocN(template_ui), SET_INT_IN_POINTER(UI_ID_OVERRIDE));
}
if (id->us > 1) {
@@ -564,7 +662,7 @@ static void template_ID(
(idfrom && idfrom->lib) ||
(!editable) ||
/* object in editmode - don't change data */
- (idfrom && GS(idfrom->name) == ID_OB && (((Object *)idfrom)->mode & OB_MODE_EDIT)))
+ (idfrom && GS(idfrom->name) == ID_OB && (eval_ctx.object_mode & OB_MODE_EDIT)))
{
UI_but_flag_enable(but, UI_BUT_DISABLED);
}
@@ -572,7 +670,7 @@ static void template_ID(
if (user_alert) UI_but_flag_enable(but, UI_BUT_REDALERT);
- if (id->lib == NULL && !(ELEM(GS(id->name), ID_GR, ID_SCE, ID_SCR, ID_TXT, ID_OB))) {
+ if (id->lib == NULL && !(ELEM(GS(id->name), ID_GR, ID_SCE, ID_SCR, ID_TXT, ID_OB, ID_WS))) {
uiDefButR(block, UI_BTYPE_TOGGLE, 0, "F", 0, 0, UI_UNIT_X, UI_UNIT_Y, &idptr, "use_fake_user", -1, 0, 0, -1, -1, NULL);
}
}
@@ -606,6 +704,8 @@ static void template_ID(
BLT_I18NCONTEXT_ID_PARTICLESETTINGS,
BLT_I18NCONTEXT_ID_GPENCIL,
BLT_I18NCONTEXT_ID_FREESTYLELINESTYLE,
+ BLT_I18NCONTEXT_ID_WORKSPACE,
+ BLT_I18NCONTEXT_ID_LIGHTPROBE,
);
if (newop) {
@@ -821,6 +921,208 @@ void uiTemplateAnyID(
uiItemFullR(sub, ptr, propID, 0, 0, 0, "", ICON_NONE);
}
+/********************* Search Template ********************/
+
+typedef struct TemplateSearch {
+ uiRNACollectionSearch search_data;
+
+ bool use_previews;
+ int preview_rows, preview_cols;
+} TemplateSearch;
+
+static void template_search_handle_cb(bContext *C, void *arg_template, void *item)
+{
+ TemplateSearch *template_search = arg_template;
+ uiRNACollectionSearch *coll_search = &template_search->search_data;
+ StructRNA *type = RNA_property_pointer_type(&coll_search->target_ptr, coll_search->target_prop);
+ PointerRNA item_ptr;
+
+ RNA_pointer_create(NULL, type, item, &item_ptr);
+ RNA_property_pointer_set(&coll_search->target_ptr, coll_search->target_prop, item_ptr);
+ RNA_property_update(C, &coll_search->target_ptr, coll_search->target_prop);
+}
+
+static uiBlock *template_search_menu(bContext *C, ARegion *region, void *arg_template)
+{
+ static TemplateSearch template_search;
+ PointerRNA active_ptr;
+
+ /* arg_template is malloced, can be freed by parent button */
+ template_search = *((TemplateSearch *)arg_template);
+ active_ptr = RNA_property_pointer_get(&template_search.search_data.target_ptr,
+ template_search.search_data.target_prop);
+
+ return template_common_search_menu(
+ C, region, ui_rna_collection_search_cb, &template_search,
+ template_search_handle_cb, active_ptr.data,
+ template_search.preview_rows, template_search.preview_cols);
+}
+
+static void template_search_add_button_searchmenu(
+ const bContext *C, uiLayout *layout, uiBlock *block,
+ TemplateSearch *template_search, const bool editable)
+{
+ const char *ui_description = RNA_property_ui_description(template_search->search_data.target_prop);
+
+ template_add_button_search_menu(
+ C, layout, block,
+ &template_search->search_data.target_ptr, template_search->search_data.target_prop,
+ template_search_menu, MEM_dupallocN(template_search), ui_description,
+ template_search->use_previews, editable);
+}
+
+static void template_search_add_button_name(
+ uiBlock *block, PointerRNA *active_ptr, const StructRNA *type)
+{
+ uiDefAutoButR(
+ block, active_ptr, RNA_struct_name_property(type), 0, "", ICON_NONE,
+ 0, 0, TEMPLATE_SEARCH_TEXTBUT_WIDTH, TEMPLATE_SEARCH_TEXTBUT_HEIGHT);
+}
+
+static void template_search_add_button_operator(
+ uiBlock *block, const char * const operator_name,
+ const int opcontext, const int icon, const bool editable)
+{
+ if (!operator_name) {
+ return;
+ }
+
+ uiBut *but = uiDefIconButO(
+ block, UI_BTYPE_BUT, operator_name, opcontext, icon,
+ 0, 0, UI_UNIT_X, UI_UNIT_Y, NULL);
+
+ if (!editable) {
+ UI_but_drawflag_enable(but, UI_BUT_DISABLED);
+ }
+}
+
+static void template_search_buttons(
+ const bContext *C, uiLayout *layout, TemplateSearch *template_search,
+ const char *newop, const char *unlinkop)
+{
+ uiBlock *block = uiLayoutGetBlock(layout);
+ uiRNACollectionSearch *search_data = &template_search->search_data;
+ StructRNA *type = RNA_property_pointer_type(&search_data->target_ptr, search_data->target_prop);
+ const bool editable = RNA_property_editable(&search_data->target_ptr, search_data->target_prop);
+ PointerRNA active_ptr = RNA_property_pointer_get(&search_data->target_ptr, search_data->target_prop);
+
+ if (active_ptr.type) {
+ /* can only get correct type when there is an active item */
+ type = active_ptr.type;
+ }
+
+ uiLayoutRow(layout, true);
+ UI_block_align_begin(block);
+
+ template_search_add_button_searchmenu(C, layout, block, template_search, editable);
+ template_search_add_button_name(block, &active_ptr, type);
+ template_search_add_button_operator(block, newop, WM_OP_INVOKE_DEFAULT, ICON_ZOOMIN, editable);
+ template_search_add_button_operator(block, unlinkop, WM_OP_INVOKE_REGION_WIN, ICON_X, editable);
+
+ UI_block_align_end(block);
+}
+
+static PropertyRNA *template_search_get_searchprop(
+ PointerRNA *targetptr, PropertyRNA *targetprop,
+ PointerRNA *searchptr, const char * const searchpropname)
+{
+ PropertyRNA *searchprop;
+
+ if (searchptr && !searchptr->data) {
+ searchptr = NULL;
+ }
+
+ if (!searchptr && !searchpropname) {
+ /* both NULL means we don't use a custom rna collection to search in */
+ }
+ else if (!searchptr && searchpropname) {
+ RNA_warning("searchpropname defined (%s) but searchptr is missing", searchpropname);
+ }
+ else if (searchptr && !searchpropname) {
+ RNA_warning("searchptr defined (%s) but searchpropname is missing", RNA_struct_identifier(searchptr->type));
+ }
+ else if (!(searchprop = RNA_struct_find_property(searchptr, searchpropname))) {
+ RNA_warning("search collection property not found: %s.%s",
+ RNA_struct_identifier(searchptr->type), searchpropname);
+ }
+ else if (RNA_property_type(searchprop) != PROP_COLLECTION) {
+ RNA_warning("search collection property is not a collection type: %s.%s",
+ RNA_struct_identifier(searchptr->type), searchpropname);
+ }
+ /* check if searchprop has same type as targetprop */
+ else if (RNA_property_pointer_type(searchptr, searchprop) != RNA_property_pointer_type(targetptr, targetprop)) {
+ RNA_warning("search collection items from %s.%s are not of type %s",
+ RNA_struct_identifier(searchptr->type), searchpropname,
+ RNA_struct_identifier(RNA_property_pointer_type(targetptr, targetprop)));
+ }
+ else {
+ return searchprop;
+ }
+
+ return NULL;
+}
+
+static TemplateSearch *template_search_setup(
+ PointerRNA *ptr, const char * const propname,
+ PointerRNA *searchptr, const char * const searchpropname)
+{
+ TemplateSearch *template_search;
+ PropertyRNA *prop, *searchprop;
+
+ prop = RNA_struct_find_property(ptr, propname);
+
+ if (!prop || RNA_property_type(prop) != PROP_POINTER) {
+ RNA_warning("pointer property not found: %s.%s", RNA_struct_identifier(ptr->type), propname);
+ return NULL;
+ }
+ searchprop = template_search_get_searchprop(ptr, prop, searchptr, searchpropname);
+
+ template_search = MEM_callocN(sizeof(*template_search), __func__);
+ template_search->search_data.target_ptr = *ptr;
+ template_search->search_data.target_prop = prop;
+ template_search->search_data.search_ptr = *searchptr;
+ template_search->search_data.search_prop = searchprop;
+
+ return template_search;
+}
+
+/**
+ * Search menu to pick an item from a collection.
+ * A version of uiTemplateID that works for non-ID types.
+ */
+void uiTemplateSearch(
+ uiLayout *layout, bContext *C,
+ PointerRNA *ptr, const char *propname,
+ PointerRNA *searchptr, const char *searchpropname,
+ const char *newop, const char *unlinkop)
+{
+ TemplateSearch *template_search = template_search_setup(ptr, propname, searchptr, searchpropname);
+ if (template_search != NULL) {
+ template_search_buttons(C, layout, template_search, newop, unlinkop);
+ MEM_freeN(template_search);
+ }
+}
+
+void uiTemplateSearchPreview(
+ uiLayout *layout, bContext *C,
+ PointerRNA *ptr, const char *propname,
+ PointerRNA *searchptr, const char *searchpropname,
+ const char *newop, const char *unlinkop,
+ const int rows, const int cols)
+{
+ TemplateSearch *template_search = template_search_setup(ptr, propname, searchptr, searchpropname);
+
+ if (template_search != NULL) {
+ template_search->use_previews = true;
+ template_search->preview_rows = rows;
+ template_search->preview_cols = cols;
+
+ template_search_buttons(C, layout, template_search, newop, unlinkop);
+
+ MEM_freeN(template_search);
+ }
+}
+
/********************* RNA Path Builder Template ********************/
/* ---------- */
@@ -874,7 +1176,7 @@ static void modifiers_convertToReal(bContext *C, void *ob_v, void *md_v)
ob->partype = PAROBJECT;
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
ED_undo_push(C, "Modifier convert to real");
}
@@ -908,7 +1210,8 @@ static int modifier_is_simulation(ModifierData *md)
}
static uiLayout *draw_modifier(
- uiLayout *layout, Scene *scene, Object *ob,
+ uiLayout *layout,
+ const EvaluationContext *eval_ctx, Scene *scene, Object *ob,
ModifierData *md, int index, int cageIndex, int lastCageIndex)
{
const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
@@ -1018,7 +1321,7 @@ static uiLayout *draw_modifier(
/* When Modifier is a simulation, show button to switch to context rather than the delete button. */
if (modifier_can_delete(md) &&
(!modifier_is_simulation(md) ||
- STREQ(scene->r.engine, RE_engine_id_BLENDER_GAME)))
+ STREQ(scene->view_render.engine_id, RE_engine_id_BLENDER_GAME)))
{
uiItemO(row, "", ICON_X, "OBJECT_OT_modifier_remove");
}
@@ -1045,7 +1348,7 @@ static uiLayout *draw_modifier(
if (md->type == eModifierType_ParticleSystem) {
ParticleSystem *psys = ((ParticleSystemModifierData *)md)->psys;
- if (!(ob->mode & OB_MODE_PARTICLE_EDIT)) {
+ if (!(eval_ctx->object_mode & OB_MODE_PARTICLE_EDIT)) {
if (ELEM(psys->part->ren_as, PART_DRAW_GR, PART_DRAW_OB))
uiItemO(row, CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Convert"), ICON_NONE,
"OBJECT_OT_duplicates_make_real");
@@ -1094,6 +1397,8 @@ static uiLayout *draw_modifier(
uiLayout *uiTemplateModifier(uiLayout *layout, bContext *C, PointerRNA *ptr)
{
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
Scene *scene = CTX_data_scene(C);
Object *ob;
ModifierData *md, *vmd;
@@ -1124,7 +1429,7 @@ uiLayout *uiTemplateModifier(uiLayout *layout, bContext *C, PointerRNA *ptr)
for (i = 0; vmd; i++, vmd = vmd->next) {
if (md == vmd)
- return draw_modifier(layout, scene, ob, md, i, cageIndex, lastCageIndex);
+ return draw_modifier(layout, &eval_ctx, scene, ob, md, i, cageIndex, lastCageIndex);
else if (vmd->mode & eModifierMode_Virtual)
i--;
}
@@ -1155,7 +1460,7 @@ static void do_constraint_panels(bContext *C, void *ob_pt, int event)
Main *bmain = CTX_data_main(C);
if (ob->pose)
BKE_pose_tag_recalc(bmain, ob->pose); /* checks & sorts pose channels */
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
break;
}
#endif
@@ -1169,8 +1474,8 @@ static void do_constraint_panels(bContext *C, void *ob_pt, int event)
* object_test_constraints(ob);
* if (ob->pose) BKE_pose_update_constraint_flags(ob->pose); */
- if (ob->type == OB_ARMATURE) DAG_id_tag_update(&ob->id, OB_RECALC_DATA | OB_RECALC_OB);
- else DAG_id_tag_update(&ob->id, OB_RECALC_OB);
+ if (ob->type == OB_ARMATURE) DEG_id_tag_update(&ob->id, OB_RECALC_DATA | OB_RECALC_OB);
+ else DEG_id_tag_update(&ob->id, OB_RECALC_OB);
WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT, ob);
}
@@ -3935,6 +4240,7 @@ void uiTemplateKeymapItemProperties(uiLayout *layout, PointerRNA *ptr)
if (propptr.data) {
uiBut *but = uiLayoutGetBlock(layout)->buttons.last;
+ WM_operator_properties_sanitize(&propptr, false);
template_keymap_item_properties(layout, NULL, &propptr);
/* attach callbacks to compensate for missing properties update,
@@ -3951,6 +4257,66 @@ void uiTemplateKeymapItemProperties(uiLayout *layout, PointerRNA *ptr)
}
}
+/********************************* Overrides *************************************/
+
+void uiTemplateOverrideProperty(
+ uiLayout *layout, PointerRNA *collection_props_ptr, PointerRNA *scene_props_ptr, const char *propname,
+ const char *name, const char *text_ctxt, int translate, int icon,
+ const char *custom_template)
+{
+ bool is_set = false;
+ uiLayout *row, *col;
+
+ PointerRNA *ptr;
+ PropertyRNA *prop;
+
+ IDProperty *collection_props = collection_props_ptr->data;
+
+ if (IDP_GetPropertyFromGroup(collection_props, propname)) {
+ prop = RNA_struct_find_property(collection_props_ptr, propname);
+ ptr = collection_props_ptr;
+ is_set = RNA_property_is_set(ptr, prop);
+ }
+ else {
+ /* property doesn't exist yet */
+ prop = RNA_struct_find_property(scene_props_ptr, propname);
+ ptr = scene_props_ptr;
+ }
+
+ /* Get translated name (label). */
+ name = RNA_translate_ui_text(name, text_ctxt, NULL, prop, translate);
+
+ row = uiLayoutRow(layout, false);
+ col = uiLayoutColumn(row, false);
+
+ uiLayoutSetEnabled(col, is_set);
+
+ if (custom_template && STREQ(custom_template, "icon_view")) {
+ uiTemplateIconView(col, ptr, propname, false, 5.0f);
+ }
+ else {
+ uiItemFullR(col, ptr, prop, -1, 0, 0, name, icon);
+ }
+
+ col = uiLayoutColumn(row, false);
+ uiBut *but;
+ uiBlock *block = uiLayoutGetBlock(col);
+ UI_block_emboss_set(block, UI_EMBOSS_NONE);
+
+ if (is_set) {
+ but = uiDefIconButO(block, UI_BTYPE_BUT, "UI_OT_unuse_property_button", WM_OP_EXEC_DEFAULT, ICON_X, 0, 0, UI_UNIT_X, UI_UNIT_Y, NULL);
+ }
+ else {
+ but = uiDefIconButO(block, UI_BTYPE_BUT, "UI_OT_use_property_button", WM_OP_EXEC_DEFAULT, ICON_ZOOMIN, 0, 0, UI_UNIT_X, UI_UNIT_Y, NULL);
+ /* XXX - Using existing data struct to pass another RNAPointer */
+ but->rnasearchpoin = *scene_props_ptr;
+ }
+
+ but->rnapoin = *collection_props_ptr;
+ but->rnaprop = prop;
+ UI_block_emboss_set(block, UI_EMBOSS);
+}
+
/********************************* Color management *************************************/
void uiTemplateColorspaceSettings(uiLayout *layout, PointerRNA *ptr, const char *propname)
diff --git a/source/blender/editors/interface/interface_utils.c b/source/blender/editors/interface/interface_utils.c
index 1927d7280f3..f0317087ddc 100644
--- a/source/blender/editors/interface/interface_utils.c
+++ b/source/blender/editors/interface/interface_utils.c
@@ -215,8 +215,90 @@ int uiDefAutoButsRNA(
return tot;
}
-/***************************** ID Utilities *******************************/
+/* *** RNA collection search menu *** */
+typedef struct CollItemSearch {
+ struct CollItemSearch *next, *prev;
+ void *data;
+ char *name;
+ int index;
+ int iconid;
+} CollItemSearch;
+
+static int sort_search_items_list(const void *a, const void *b)
+{
+ const CollItemSearch *cis1 = a;
+ const CollItemSearch *cis2 = b;
+
+ if (BLI_strcasecmp(cis1->name, cis2->name) > 0)
+ return 1;
+ else
+ return 0;
+}
+
+void ui_rna_collection_search_cb(const struct bContext *C, void *arg, const char *str, uiSearchItems *items)
+{
+ uiRNACollectionSearch *data = arg;
+ char *name;
+ int i = 0, iconid = 0, flag = RNA_property_flag(data->target_prop);
+ ListBase *items_list = MEM_callocN(sizeof(ListBase), "items_list");
+ CollItemSearch *cis;
+ const bool skip_filter = !(data->but_changed && *data->but_changed);
+
+ /* build a temporary list of relevant items first */
+ RNA_PROP_BEGIN (&data->search_ptr, itemptr, data->search_prop)
+ {
+
+ if (flag & PROP_ID_SELF_CHECK)
+ if (itemptr.data == data->target_ptr.id.data)
+ continue;
+
+ /* use filter */
+ if (RNA_property_type(data->target_prop) == PROP_POINTER) {
+ if (RNA_property_pointer_poll(&data->target_ptr, data->target_prop, &itemptr) == 0)
+ continue;
+ }
+
+ name = RNA_struct_name_get_alloc(&itemptr, NULL, 0, NULL); /* could use the string length here */
+ iconid = 0;
+ if (itemptr.type && RNA_struct_is_ID(itemptr.type)) {
+ iconid = ui_id_icon_get(C, itemptr.data, false);
+ }
+
+ if (name) {
+ if (skip_filter || BLI_strcasestr(name, str)) {
+ cis = MEM_callocN(sizeof(CollItemSearch), "CollectionItemSearch");
+ cis->data = itemptr.data;
+ cis->name = MEM_dupallocN(name);
+ cis->index = i;
+ cis->iconid = iconid;
+ BLI_addtail(items_list, cis);
+ }
+ MEM_freeN(name);
+ }
+
+ i++;
+ }
+ RNA_PROP_END;
+
+ BLI_listbase_sort(items_list, sort_search_items_list);
+
+ /* add search items from temporary list */
+ for (cis = items_list->first; cis; cis = cis->next) {
+ if (UI_search_item_add(items, cis->name, cis->data, cis->iconid) == false) {
+ break;
+ }
+ }
+
+ for (cis = items_list->first; cis; cis = cis->next) {
+ MEM_freeN(cis->name);
+ }
+ BLI_freelistN(items_list);
+ MEM_freeN(items_list);
+}
+
+
+/***************************** ID Utilities *******************************/
int UI_icon_from_id(ID *id)
{
Object *ob;
diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c
index b25e1130c60..3afae5ed8d4 100644
--- a/source/blender/editors/interface/interface_widgets.c
+++ b/source/blender/editors/interface/interface_widgets.c
@@ -47,9 +47,6 @@
#include "RNA_access.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
-
#include "BLF_api.h"
#include "UI_interface.h"
@@ -58,6 +55,9 @@
#include "interface_intern.h"
#include "GPU_basic_shader.h"
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+#include "GPU_matrix.h"
#ifdef WITH_INPUT_IME
# include "WM_types.h"
@@ -208,48 +208,58 @@ static const uint g_shape_preset_hold_action_face[2][3] = {{2, 0, 1}, {3, 5, 4}}
/* ************************************************* */
-void ui_draw_anti_tria(float x1, float y1, float x2, float y2, float x3, float y3)
+void ui_draw_anti_tria(float x1, float y1, float x2, float y2, float x3, float y3,
+ const float color[4])
{
float tri_arr[3][2] = {{x1, y1}, {x2, y2}, {x3, y3}};
- float color[4];
- int j;
-
+ float draw_color[4];
+
+ copy_v4_v4(draw_color, color);
+ draw_color[3] *= 0.125f;
+
glEnable(GL_BLEND);
- glGetFloatv(GL_CURRENT_COLOR, color);
- color[3] *= 0.125f;
- glColor4fv(color);
- glEnableClientState(GL_VERTEX_ARRAY);
- glVertexPointer(2, GL_FLOAT, 0, tri_arr);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ immUniformColor4fv(draw_color);
+ immBegin(GWN_PRIM_TRIS, 3 * WIDGET_AA_JITTER);
/* for each AA step */
- for (j = 0; j < WIDGET_AA_JITTER; j++) {
- glTranslate2fv(jit[j]);
- glDrawArrays(GL_TRIANGLES, 0, 3);
- glTranslatef(-jit[j][0], -jit[j][1], 0.0f);
+ for (int j = 0; j < WIDGET_AA_JITTER; j++) {
+ immVertex2f(pos, tri_arr[0][0] + jit[j][0], tri_arr[0][1] + jit[j][1]);
+ immVertex2f(pos, tri_arr[1][0] + jit[j][0], tri_arr[1][1] + jit[j][1]);
+ immVertex2f(pos, tri_arr[2][0] + jit[j][0], tri_arr[2][1] + jit[j][1]);
}
- glDisableClientState(GL_VERTEX_ARRAY);
+ immEnd();
+
+ immUnbindProgram();
+
glDisable(GL_BLEND);
}
-void ui_draw_anti_roundbox(int mode, float minx, float miny, float maxx, float maxy, float rad, bool use_alpha)
+/* belongs in interface_draw.c, but needs WIDGET_AA_JITTER from this file */
+void UI_draw_roundbox_aa(bool filled, float minx, float miny, float maxx, float maxy, float rad, const float color[4])
{
- float color[4];
- int j;
-
glEnable(GL_BLEND);
- glGetFloatv(GL_CURRENT_COLOR, color);
- if (use_alpha) {
- color[3] = 0.5f;
+
+ if (filled) {
+ /* plain antialiased filled box */
+ const float alpha = color[3] * 0.125f;
+
+ for (int j = 0; j < WIDGET_AA_JITTER; j++) {
+ gpuPushMatrix();
+ gpuTranslate2fv(jit[j]);
+ UI_draw_roundbox_3fvAlpha(true, minx, miny, maxx, maxy, rad, color, alpha);
+ gpuPopMatrix();
+ }
}
- color[3] *= 0.125f;
- glColor4fv(color);
-
- for (j = 0; j < WIDGET_AA_JITTER; j++) {
- glTranslate2fv(jit[j]);
- UI_draw_roundbox_gl_mode(mode, minx, miny, maxx, maxy, rad);
- glTranslatef(-jit[j][0], -jit[j][1], 0.0f);
+ else {
+ /* plain antialiased unfilled box */
+ glEnable(GL_LINE_SMOOTH);
+ UI_draw_roundbox_4fv(false, minx, miny, maxx, maxy, rad, color);
+ glDisable(GL_LINE_SMOOTH);
}
glDisable(GL_BLEND);
@@ -570,12 +580,27 @@ static void shape_preset_init_scroll_circle(uiWidgetTrias *tria, const rcti *rec
g_shape_preset_scroll_circle_face, ARRAY_SIZE(g_shape_preset_scroll_circle_face));
}
-static void shape_preset_draw_trias(uiWidgetTrias *tria)
+static void shape_preset_draw_trias(uiWidgetTrias *tria, uint pos)
{
- glEnableClientState(GL_VERTEX_ARRAY);
- glVertexPointer(2, GL_FLOAT, 0, tria->vec);
- glDrawElements(GL_TRIANGLES, tria->tot * 3, GL_UNSIGNED_INT, tria->index);
- glDisableClientState(GL_VERTEX_ARRAY);
+ immBegin(GWN_PRIM_TRIS, tria->tot * 3);
+ for (int i = 0; i < tria->tot; ++i)
+ for (int j = 0; j < 3; ++j)
+ immVertex2fv(pos, tria->vec[tria->index[i][j]]);
+ immEnd();
+}
+
+static void widget_draw_vertex_buffer(unsigned int pos, unsigned int col, int mode,
+ const float quads_pos[WIDGET_SIZE_MAX][2],
+ const unsigned char quads_col[WIDGET_SIZE_MAX][4],
+ unsigned int totvert)
+{
+ immBegin(mode, totvert);
+ for (int i = 0; i < totvert; ++i) {
+ if (quads_col)
+ immAttrib4ubv(col, quads_col[i]);
+ immVertex2fv(pos, quads_pos[i]);
+ }
+ immEnd();
}
static void shape_preset_trias_from_rect_menu(uiWidgetTrias *tria, const rcti *rect)
@@ -666,21 +691,18 @@ static void widget_verts_to_triangle_strip_open(uiWidgetBase *wtb, const int tot
}
}
-static void widgetbase_outline(uiWidgetBase *wtb)
+static void widgetbase_outline(uiWidgetBase *wtb, unsigned int pos)
{
float triangle_strip[WIDGET_SIZE_MAX * 2 + 2][2]; /* + 2 because the last pair is wrapped */
widget_verts_to_triangle_strip(wtb, wtb->totvert, triangle_strip);
- glEnableClientState(GL_VERTEX_ARRAY);
- glVertexPointer(2, GL_FLOAT, 0, triangle_strip);
- glDrawArrays(GL_TRIANGLE_STRIP, 0, wtb->totvert * 2 + 2);
- glDisableClientState(GL_VERTEX_ARRAY);
+ widget_draw_vertex_buffer(pos, 0, GL_TRIANGLE_STRIP, triangle_strip, NULL, wtb->totvert * 2 + 2);
}
static void widgetbase_draw(uiWidgetBase *wtb, uiWidgetColors *wcol)
{
int j, a;
-
+
glEnable(GL_BLEND);
/* backdrop non AA */
@@ -691,78 +713,76 @@ static void widgetbase_draw(uiWidgetBase *wtb, uiWidgetColors *wcol)
float inner_v_half[WIDGET_SIZE_MAX][2];
float x_mid = 0.0f; /* used for dumb clamping of values */
- /* dark checkers */
- glColor4ub(UI_ALPHA_CHECKER_DARK, UI_ALPHA_CHECKER_DARK, UI_ALPHA_CHECKER_DARK, 255);
- glEnableClientState(GL_VERTEX_ARRAY);
- glVertexPointer(2, GL_FLOAT, 0, wtb->inner_v);
- glDrawArrays(GL_POLYGON, 0, wtb->totvert);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_CHECKER);
- /* light checkers */
- GPU_basic_shader_bind(GPU_SHADER_STIPPLE | GPU_SHADER_USE_COLOR);
- glColor4ub(UI_ALPHA_CHECKER_LIGHT, UI_ALPHA_CHECKER_LIGHT, UI_ALPHA_CHECKER_LIGHT, 255);
- GPU_basic_shader_stipple(GPU_SHADER_STIPPLE_CHECKER_8PX);
+ /* checkers */
+ immUniform4f("color1", UI_ALPHA_CHECKER_DARK / 255.0f, UI_ALPHA_CHECKER_DARK / 255.0f, UI_ALPHA_CHECKER_DARK / 255.0f, 1.0f);
+ immUniform4f("color2", UI_ALPHA_CHECKER_LIGHT / 255.0f, UI_ALPHA_CHECKER_LIGHT / 255.0f, UI_ALPHA_CHECKER_LIGHT / 255.0f, 1.0f);
+ immUniform1i("size", 8);
- glVertexPointer(2, GL_FLOAT, 0, wtb->inner_v);
- glDrawArrays(GL_POLYGON, 0, wtb->totvert);
+ widget_draw_vertex_buffer(pos, 0, GL_TRIANGLE_FAN, wtb->inner_v, NULL, wtb->totvert);
- GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
+ immUnbindProgram();
/* alpha fill */
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor4ubv((unsigned char *)wcol->inner);
- glColor4ubv((unsigned char *)wcol->inner);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
for (a = 0; a < wtb->totvert; a++) {
x_mid += wtb->inner_v[a][0];
}
x_mid /= wtb->totvert;
- glVertexPointer(2, GL_FLOAT, 0, wtb->inner_v);
- glDrawArrays(GL_POLYGON, 0, wtb->totvert);
+ widget_draw_vertex_buffer(pos, 0, GL_TRIANGLE_FAN, wtb->inner_v, NULL, wtb->totvert);
/* 1/2 solid color */
- glColor4ub(wcol->inner[0], wcol->inner[1], wcol->inner[2], 255);
+ immUniformColor3ubv((unsigned char *)wcol->inner);
for (a = 0; a < wtb->totvert; a++) {
inner_v_half[a][0] = MIN2(wtb->inner_v[a][0], x_mid);
inner_v_half[a][1] = wtb->inner_v[a][1];
}
- glVertexPointer(2, GL_FLOAT, 0, inner_v_half);
- glDrawArrays(GL_POLYGON, 0, wtb->totvert);
- glDisableClientState(GL_VERTEX_ARRAY);
+ widget_draw_vertex_buffer(pos, 0, GL_TRIANGLE_FAN, inner_v_half, NULL, wtb->totvert);
+
+ immUnbindProgram();
}
else {
/* simple fill */
- glColor4ubv((unsigned char *)wcol->inner);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor4ubv((unsigned char *)wcol->inner);
- glEnableClientState(GL_VERTEX_ARRAY);
- glVertexPointer(2, GL_FLOAT, 0, wtb->inner_v);
- glDrawArrays(GL_POLYGON, 0, wtb->totvert);
- glDisableClientState(GL_VERTEX_ARRAY);
+ widget_draw_vertex_buffer(pos, 0, GL_TRIANGLE_FAN, wtb->inner_v, NULL, wtb->totvert);
+
+ immUnbindProgram();
}
}
else {
char col1[4], col2[4];
- unsigned char col_array[WIDGET_SIZE_MAX * 4];
- unsigned char *col_pt = col_array;
-
+ unsigned char col_array[WIDGET_SIZE_MAX][4];
+ unsigned char *col_pt = &col_array[0][0];
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int col = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 4, GWN_FETCH_INT_TO_FLOAT_UNIT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_SMOOTH_COLOR);
+
shadecolors4(col1, col2, wcol->inner, wcol->shadetop, wcol->shadedown);
for (a = 0; a < wtb->totvert; a++, col_pt += 4) {
round_box_shade_col4_r(col_pt, col1, col2, wtb->inner_uv[a][wtb->draw_shadedir ? 1 : 0]);
}
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_COLOR_ARRAY);
- glVertexPointer(2, GL_FLOAT, 0, wtb->inner_v);
- glColorPointer(4, GL_UNSIGNED_BYTE, 0, col_array);
- glDrawArrays(GL_POLYGON, 0, wtb->totvert);
- glDisableClientState(GL_VERTEX_ARRAY);
- glDisableClientState(GL_COLOR_ARRAY);
+ widget_draw_vertex_buffer(pos, col, GL_TRIANGLE_FAN, wtb->inner_v, col_array, wtb->totvert);
+ immUnbindProgram();
}
}
-
+
/* for each AA step */
if (wtb->draw_outline) {
BLI_assert(wtb->totvert != 0);
@@ -782,53 +802,55 @@ static void widgetbase_draw(uiWidgetBase *wtb, uiWidgetColors *wcol)
UI_GetThemeColor4ubv(TH_WIDGET_EMBOSS, emboss);
}
- glEnableClientState(GL_VERTEX_ARRAY);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
for (j = 0; j < WIDGET_AA_JITTER; j++) {
- glTranslate2fv(jit[j]);
+ gpuTranslate2fv(jit[j]);
/* outline */
- glColor4ubv(tcol);
+ immUniformColor4ubv(tcol);
- glVertexPointer(2, GL_FLOAT, 0, triangle_strip);
- glDrawArrays(GL_TRIANGLE_STRIP, 0, wtb->totvert * 2 + 2);
+ widget_draw_vertex_buffer(pos, 0, GL_TRIANGLE_STRIP, triangle_strip, NULL, wtb->totvert * 2 + 2);
/* emboss bottom shadow */
if (wtb->draw_emboss) {
if (emboss[3]) {
- glColor4ubv(emboss);
- glVertexPointer(2, GL_FLOAT, 0, triangle_strip_emboss);
- glDrawArrays(GL_TRIANGLE_STRIP, 0, wtb->halfwayvert * 2);
+ immUniformColor4ubv(emboss);
+ widget_draw_vertex_buffer(pos, 0, GL_TRIANGLE_STRIP, triangle_strip_emboss, NULL, wtb->halfwayvert * 2);
}
}
- glTranslatef(-jit[j][0], -jit[j][1], 0.0f);
+ gpuTranslate2f(-jit[j][0], -jit[j][1]);
}
-
- glDisableClientState(GL_VERTEX_ARRAY);
+ immUnbindProgram();
}
-
+
/* decoration */
if (wtb->tria1.tot || wtb->tria2.tot) {
const unsigned char tcol[4] = {wcol->item[0],
wcol->item[1],
wcol->item[2],
(unsigned char)((float)wcol->item[3] / WIDGET_AA_JITTER)};
- glColor4ubv(tcol);
+
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor4ubv(tcol);
/* for each AA step */
for (j = 0; j < WIDGET_AA_JITTER; j++) {
- glTranslate2fv(jit[j]);
+ gpuTranslate2fv(jit[j]);
- if (wtb->tria1.tot) {
- shape_preset_draw_trias(&wtb->tria1);
- }
- if (wtb->tria2.tot) {
- shape_preset_draw_trias(&wtb->tria2);
- }
+ if (wtb->tria1.tot)
+ shape_preset_draw_trias(&wtb->tria1, pos);
- glTranslatef(-jit[j][0], -jit[j][1], 0.0f);
+ if (wtb->tria2.tot)
+ shape_preset_draw_trias(&wtb->tria2, pos);
+
+ gpuTranslate2f(-jit[j][0], -jit[j][1]);
}
+
+ immUnbindProgram();
}
glDisable(GL_BLEND);
@@ -1284,6 +1306,7 @@ static void widget_draw_text_ime_underline(
int ofs_x, width;
int rect_x = BLI_rcti_size_x(rect);
int sel_start = ime_data->sel_start, sel_end = ime_data->sel_end;
+ float fcol[4];
if (drawstr[0] != 0) {
if (but->pos >= but->ofs) {
@@ -1296,8 +1319,8 @@ static void widget_draw_text_ime_underline(
width = BLF_width(fstyle->uifont_id, drawstr + but->ofs,
ime_data->composite_len + but->pos - but->ofs);
- glColor4ubv((unsigned char *)wcol->text);
- UI_draw_text_underline(rect->xmin + ofs_x, rect->ymin + 6 * U.pixelsize, min_ii(width, rect_x - 2) - ofs_x, 1);
+ rgba_uchar_to_float(fcol, wcol->text);
+ UI_draw_text_underline(rect->xmin + ofs_x, rect->ymin + 6 * U.pixelsize, min_ii(width, rect_x - 2) - ofs_x, 1, fcol);
/* draw the thick line */
if (sel_start != -1 && sel_end != -1) {
@@ -1314,7 +1337,7 @@ static void widget_draw_text_ime_underline(
width = BLF_width(fstyle->uifont_id, drawstr + but->ofs,
sel_end + sel_start - but->ofs);
- UI_draw_text_underline(rect->xmin + ofs_x, rect->ymin + 6 * U.pixelsize, min_ii(width, rect_x - 2) - ofs_x, 2);
+ UI_draw_text_underline(rect->xmin + ofs_x, rect->ymin + 6 * U.pixelsize, min_ii(width, rect_x - 2) - ofs_x, 2, fcol);
}
}
}
@@ -1398,11 +1421,16 @@ static void widget_draw_text(uiFontStyle *fstyle, uiWidgetColors *wcol, uiBut *b
selwidth_draw = BLF_width(fstyle->uifont_id, drawstr + but->ofs, but->selend - but->ofs);
- glColor4ubv((unsigned char *)wcol->item);
- glRecti(rect->xmin + selsta_draw,
- rect->ymin + 2,
- min_ii(rect->xmin + selwidth_draw, rect->xmax - 2),
- rect->ymax - 2);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ immUniformColor4ubv((unsigned char *)wcol->item);
+ immRecti(pos, rect->xmin + selsta_draw,
+ rect->ymin + 2,
+ min_ii(rect->xmin + selwidth_draw, rect->xmax - 2),
+ rect->ymax - 2);
+
+ immUnbindProgram();
}
}
@@ -1425,13 +1453,18 @@ static void widget_draw_text(uiFontStyle *fstyle, uiWidgetColors *wcol, uiBut *b
t = 0;
}
- glColor3f(0.2, 0.6, 0.9);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ immUniformColor3f(0.2f, 0.6f, 0.9f);
tx = rect->xmin + t + 2;
ty = rect->ymin + 2;
/* draw cursor */
- glRecti(rect->xmin + t, ty, tx, rect->ymax - 2);
+ immRecti(pos, rect->xmin + t, ty, tx, rect->ymax - 2);
+
+ immUnbindProgram();
}
#ifdef WITH_INPUT_IME
@@ -1490,43 +1523,46 @@ static void widget_draw_text(uiFontStyle *fstyle, uiWidgetColors *wcol, uiBut *b
}
#endif
- glColor4ubv((unsigned char *)wcol->text);
-
if (!use_right_only) {
/* for underline drawing */
float font_xofs, font_yofs;
- UI_fontstyle_draw_ex(fstyle, rect, drawstr + but->ofs,
- drawstr_left_len - but->ofs, &font_xofs, &font_yofs);
+ int drawlen = (drawstr_left_len == INT_MAX) ? strlen(drawstr + but->ofs) : (drawstr_left_len - but->ofs);
- if (but->menu_key != '\0') {
- char fixedbuf[128];
- const char *str;
+ if (drawlen > 0) {
+ UI_fontstyle_draw_ex(fstyle, rect, drawstr + but->ofs, (unsigned char *)wcol->text,
+ drawlen, &font_xofs, &font_yofs);
- BLI_strncpy(fixedbuf, drawstr + but->ofs, min_ii(sizeof(fixedbuf), drawstr_left_len));
+ if (but->menu_key != '\0') {
+ char fixedbuf[128];
+ const char *str;
- str = strchr(fixedbuf, but->menu_key - 32); /* upper case */
- if (str == NULL)
- str = strchr(fixedbuf, but->menu_key);
+ BLI_strncpy(fixedbuf, drawstr + but->ofs, min_ii(sizeof(fixedbuf), drawlen));
- if (str) {
- int ul_index = -1;
- float ul_advance;
+ str = strchr(fixedbuf, but->menu_key - 32); /* upper case */
+ if (str == NULL)
+ str = strchr(fixedbuf, but->menu_key);
- ul_index = (int)(str - fixedbuf);
+ if (str) {
+ int ul_index = -1;
+ float ul_advance;
- if (fstyle->kerning == 1) {
- BLF_enable(fstyle->uifont_id, BLF_KERNING_DEFAULT);
- }
+ ul_index = (int)(str - fixedbuf);
+
+ if (fstyle->kerning == 1) {
+ BLF_enable(fstyle->uifont_id, BLF_KERNING_DEFAULT);
+ }
- fixedbuf[ul_index] = '\0';
- ul_advance = BLF_width(fstyle->uifont_id, fixedbuf, ul_index);
+ fixedbuf[ul_index] = '\0';
+ ul_advance = BLF_width(fstyle->uifont_id, fixedbuf, ul_index);
- BLF_position(fstyle->uifont_id, rect->xmin + font_xofs + ul_advance, rect->ymin + font_yofs, 0.0f);
- BLF_draw(fstyle->uifont_id, "_", 2);
+ BLF_position(fstyle->uifont_id, rect->xmin + font_xofs + ul_advance, rect->ymin + font_yofs, 0.0f);
+ BLF_color4ubv(fstyle->uifont_id, (unsigned char *)wcol->text);
+ BLF_draw(fstyle->uifont_id, "_", 2);
- if (fstyle->kerning == 1) {
- BLF_disable(fstyle->uifont_id, BLF_KERNING_DEFAULT);
+ if (fstyle->kerning == 1) {
+ BLF_disable(fstyle->uifont_id, BLF_KERNING_DEFAULT);
+ }
}
}
}
@@ -1536,7 +1572,7 @@ static void widget_draw_text(uiFontStyle *fstyle, uiWidgetColors *wcol, uiBut *b
if (drawstr_right) {
fstyle->align = UI_STYLE_TEXT_RIGHT;
rect->xmax -= UI_TEXT_CLIP_MARGIN;
- UI_fontstyle_draw(fstyle, rect, drawstr_right);
+ UI_fontstyle_draw(fstyle, rect, drawstr_right, (unsigned char *)wcol->text);
}
}
@@ -1659,6 +1695,9 @@ static void widget_draw_text_icon(uiFontStyle *fstyle, uiWidgetColors *wcol, uiB
widget_draw_text(fstyle, wcol, but, rect);
ui_but_text_password_hide(password_str, but, true);
+
+ /* if a widget uses font shadow it has to be deactivated now */
+ BLF_disable(fstyle->uifont_id, BLF_SHADOW);
}
#undef UI_TEXT_CLIP_MARGIN
@@ -1673,6 +1712,8 @@ static struct uiWidgetStateColors wcol_state_colors = {
{215, 211, 75, 255},
{180, 0, 255, 255},
{153, 0, 230, 255},
+ {74, 137, 137, 255},
+ {49, 112, 112, 255},
0.5f, 0.0f
};
@@ -1917,6 +1958,19 @@ static struct uiWidgetColors wcol_list_item = {
0, 0
};
+struct uiWidgetColors wcol_tab = {
+ {255, 255, 255, 255},
+ {83, 83, 83, 255},
+ {114, 114, 114, 255},
+ {90, 90, 90, 255},
+
+ {0, 0, 0, 255},
+ {0, 0, 0, 255},
+
+ 0,
+ 0, 0
+};
+
/* free wcol struct to play with */
static struct uiWidgetColors wcol_tmp = {
{0, 0, 0, 255},
@@ -1939,6 +1993,7 @@ void ui_widget_color_init(ThemeUI *tui)
tui->wcol_tool = wcol_tool;
tui->wcol_text = wcol_text;
tui->wcol_radio = wcol_radio;
+ tui->wcol_tab = wcol_tab;
tui->wcol_option = wcol_option;
tui->wcol_toggle = wcol_toggle;
tui->wcol_num = wcol_num;
@@ -2011,6 +2066,8 @@ static void widget_state(uiWidgetType *wt, int state)
widget_state_blend(wt->wcol.inner, wcol_state->inner_anim_sel, wcol_state->blend);
else if (state & UI_BUT_DRIVEN)
widget_state_blend(wt->wcol.inner, wcol_state->inner_driven_sel, wcol_state->blend);
+ else if (state & UI_BUT_OVERRIDEN)
+ widget_state_blend(wt->wcol.inner, wcol_state->inner_overridden_sel, wcol_state->blend);
copy_v3_v3_char(wt->wcol.text, wt->wcol.text_sel);
@@ -2024,6 +2081,8 @@ static void widget_state(uiWidgetType *wt, int state)
widget_state_blend(wt->wcol.inner, wcol_state->inner_anim, wcol_state->blend);
else if (state & UI_BUT_DRIVEN)
widget_state_blend(wt->wcol.inner, wcol_state->inner_driven, wcol_state->blend);
+ else if (state & UI_BUT_OVERRIDEN)
+ widget_state_blend(wt->wcol.inner, wcol_state->inner_overridden, wcol_state->blend);
if (state & UI_ACTIVE) { /* mouse over? */
wt->wcol.inner[0] = wt->wcol.inner[0] >= 240 ? 255 : wt->wcol.inner[0] + 15;
@@ -2069,7 +2128,9 @@ static void widget_state_numslider(uiWidgetType *wt, int state)
widget_state_blend(wt->wcol.item, wcol_state->inner_anim_sel, blend);
else if (state & UI_BUT_DRIVEN)
widget_state_blend(wt->wcol.item, wcol_state->inner_driven_sel, blend);
-
+ else if (state & UI_BUT_OVERRIDEN)
+ widget_state_blend(wt->wcol.item, wcol_state->inner_overridden_sel, blend);
+
if (state & UI_SELECT)
SWAP(short, wt->wcol.shadetop, wt->wcol.shadedown);
}
@@ -2080,6 +2141,8 @@ static void widget_state_numslider(uiWidgetType *wt, int state)
widget_state_blend(wt->wcol.item, wcol_state->inner_anim, blend);
else if (state & UI_BUT_DRIVEN)
widget_state_blend(wt->wcol.item, wcol_state->inner_driven, blend);
+ else if (state & UI_BUT_OVERRIDEN)
+ widget_state_blend(wt->wcol.item, wcol_state->inner_overridden, blend);
}
}
@@ -2197,23 +2260,24 @@ static void widget_softshadow(const rcti *rect, int roundboxalign, const float r
/* we draw a number of increasing size alpha quad strips */
alphastep = 3.0f * btheme->tui.menu_shadow_fac / radout;
-
- glEnableClientState(GL_VERTEX_ARRAY);
+
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
for (step = 1; step <= (int)radout; step++) {
float expfac = sqrtf(step / radout);
round_box_shadow_edges(wtb.outer_v, &rect1, radin, UI_CNR_ALL, (float)step);
- glColor4f(0.0f, 0.0f, 0.0f, alphastep * (1.0f - expfac));
+ immUniformColor4f(0.0f, 0.0f, 0.0f, alphastep * (1.0f - expfac));
widget_verts_to_triangle_strip(&wtb, totvert, triangle_strip);
- glVertexPointer(2, GL_FLOAT, 0, triangle_strip);
- glDrawArrays(GL_TRIANGLE_STRIP, 0, totvert * 2); /* add + 2 for getting a complete soft rect. Now it skips top edge to allow transparent menus */
+ widget_draw_vertex_buffer(pos, 0, GL_TRIANGLE_STRIP, triangle_strip, NULL, totvert * 2);
}
- glDisableClientState(GL_VERTEX_ARRAY);
+ immUnbindProgram();
}
static void widget_menu_back(uiWidgetColors *wcol, rcti *rect, int flag, int direction)
@@ -2250,20 +2314,21 @@ static void widget_menu_back(uiWidgetColors *wcol, rcti *rect, int flag, int dir
static void ui_hsv_cursor(float x, float y)
{
- glPushMatrix();
- glTranslatef(x, y, 0.0f);
-
- glColor3f(1.0f, 1.0f, 1.0f);
- glutil_draw_filled_arc(0.0f, M_PI * 2.0, 3.0f * U.pixelsize, 8);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ immUniformColor3f(1.0f, 1.0f, 1.0f);
+ imm_draw_circle_fill_2d(pos, x, y, 3.0f * U.pixelsize, 8);
glEnable(GL_BLEND);
glEnable(GL_LINE_SMOOTH);
- glColor3f(0.0f, 0.0f, 0.0f);
- glutil_draw_lined_arc(0.0f, M_PI * 2.0, 3.0f * U.pixelsize, 12);
+ immUniformColor3f(0.0f, 0.0f, 0.0f);
+ imm_draw_circle_wire_2d(pos, x, y, 3.0f * U.pixelsize, 12);
glDisable(GL_BLEND);
glDisable(GL_LINE_SMOOTH);
-
- glPopMatrix();
+
+ immUnbindProgram();
}
void ui_hsvcircle_vals_from_pos(float *val_rad, float *val_dist, const rcti *rect,
@@ -2303,18 +2368,17 @@ void ui_hsvcircle_pos_from_vals(uiBut *but, const rcti *rect, float *hsv, float
static void ui_draw_but_HSVCIRCLE(uiBut *but, uiWidgetColors *wcol, const rcti *rect)
{
+ /* TODO(merwin): reimplement as shader for pixel-perfect colors */
+
const int tot = 64;
const float radstep = 2.0f * (float)M_PI / (float)tot;
const float centx = BLI_rcti_cent_x_fl(rect);
const float centy = BLI_rcti_cent_y_fl(rect);
float radius = (float)min_ii(BLI_rcti_size_x(rect), BLI_rcti_size_y(rect)) / 2.0f;
- /* gouraud triangle fan */
ColorPicker *cpicker = but->custom_data;
const float *hsv_ptr = cpicker->color_data;
- float xpos, ypos, ang = 0.0f;
float rgb[3], hsvo[3], hsv[3], col[3], colcent[3];
- int a;
bool color_profile = ui_but_is_colorpicker_display_space(but);
/* color */
@@ -2345,11 +2409,18 @@ static void ui_draw_but_HSVCIRCLE(uiBut *but, uiWidgetColors *wcol, const rcti *
ui_color_picker_to_rgb(0.0f, 0.0f, hsv[2], colcent, colcent + 1, colcent + 2);
- glBegin(GL_TRIANGLE_FAN);
- glColor3fv(colcent);
- glVertex2f(centx, centy);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_SMOOTH_COLOR);
+
+ immBegin(GWN_PRIM_TRI_FAN, tot + 2);
+ immAttrib3fv(color, colcent);
+ immVertex2f(pos, centx, centy);
- for (a = 0; a <= tot; a++, ang += radstep) {
+ float ang = 0.0f;
+ for (int a = 0; a <= tot; a++, ang += radstep) {
float si = sinf(ang);
float co = cosf(ang);
@@ -2357,25 +2428,32 @@ static void ui_draw_but_HSVCIRCLE(uiBut *but, uiWidgetColors *wcol, const rcti *
ui_color_picker_to_rgb_v(hsv, col);
- glColor3fv(col);
- glVertex2f(centx + co * radius, centy + si * radius);
+ immAttrib3fv(color, col);
+ immVertex2f(pos, centx + co * radius, centy + si * radius);
}
- glEnd();
-
+ immEnd();
+ immUnbindProgram();
+
/* fully rounded outline */
- glPushMatrix();
- glTranslatef(centx, centy, 0.0f);
+ format = immVertexFormat();
+ pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
glEnable(GL_BLEND);
glEnable(GL_LINE_SMOOTH);
- glColor3ubv((unsigned char *)wcol->outline);
- glutil_draw_lined_arc(0.0f, M_PI * 2.0, radius, tot + 1);
+
+ immUniformColor3ubv((unsigned char *)wcol->outline);
+ imm_draw_circle_wire_2d(pos, centx, centy, radius, tot);
+
+ immUnbindProgram();
+
glDisable(GL_BLEND);
glDisable(GL_LINE_SMOOTH);
- glPopMatrix();
/* cursor */
+ float xpos, ypos;
ui_hsvcircle_pos_from_vals(but, rect, hsvo, &xpos, &ypos);
-
ui_hsv_cursor(xpos, ypos);
}
@@ -2385,7 +2463,8 @@ static void ui_draw_but_HSVCIRCLE(uiBut *but, uiWidgetColors *wcol, const rcti *
void ui_draw_gradient(const rcti *rect, const float hsv[3], const int type, const float alpha)
{
/* allows for 4 steps (red->yellow) */
- const float color_step = 1.0f / 48.0f;
+ const int steps = 48;
+ const float color_step = 1.0f / steps;
int a;
float h = hsv[0], s = hsv[1], v = hsv[2];
float dx, dy, sx1, sx2, sy;
@@ -2439,9 +2518,14 @@ void ui_draw_gradient(const rcti *rect, const float hsv[3], const int type, cons
copy_v3_v3(col1[3], col1[2]);
break;
}
-
+
/* old below */
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int col = GWN_vertformat_attr_add(format, "color", GWN_COMP_F32, 4, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_SMOOTH_COLOR);
+ immBegin(GWN_PRIM_TRIS, steps * 3 * 6);
for (dx = 0.0f; dx < 0.999f; dx += color_step) { /* 0.999 = prevent float inaccuracy for steps */
const float dx_next = dx + color_step;
@@ -2499,22 +2583,29 @@ void ui_draw_gradient(const rcti *rect, const float hsv[3], const int type, cons
sy = rect->ymin;
dy = (float)BLI_rcti_size_y(rect) / 3.0f;
- glBegin(GL_QUADS);
for (a = 0; a < 3; a++, sy += dy) {
- glColor4f(col0[a][0], col0[a][1], col0[a][2], alpha);
- glVertex2f(sx1, sy);
+ immAttrib4f(col, col0[a][0], col0[a][1], col0[a][2], alpha);
+ immVertex2f(pos, sx1, sy);
- glColor4f(col1[a][0], col1[a][1], col1[a][2], alpha);
- glVertex2f(sx2, sy);
+ immAttrib4f(col, col1[a][0], col1[a][1], col1[a][2], alpha);
+ immVertex2f(pos, sx2, sy);
+
+ immAttrib4f(col, col1[a + 1][0], col1[a + 1][1], col1[a + 1][2], alpha);
+ immVertex2f(pos, sx2, sy + dy);
- glColor4f(col1[a + 1][0], col1[a + 1][1], col1[a + 1][2], alpha);
- glVertex2f(sx2, sy + dy);
+ immAttrib4f(col, col0[a][0], col0[a][1], col0[a][2], alpha);
+ immVertex2f(pos, sx1, sy);
+
+ immAttrib4f(col, col1[a + 1][0], col1[a + 1][1], col1[a + 1][2], alpha);
+ immVertex2f(pos, sx2, sy + dy);
- glColor4f(col0[a + 1][0], col0[a + 1][1], col0[a + 1][2], alpha);
- glVertex2f(sx1, sy + dy);
+ immAttrib4f(col, col0[a + 1][0], col0[a + 1][1], col0[a + 1][2], alpha);
+ immVertex2f(pos, sx1, sy + dy);
}
- glEnd();
}
+ immEnd();
+
+ immUnbindProgram();
}
bool ui_but_is_colorpicker_display_space(uiBut *but)
@@ -2590,8 +2681,11 @@ static void ui_draw_but_HSVCUBE(uiBut *but, const rcti *rect)
ui_hsv_cursor(x, y);
/* outline */
- glColor3ub(0, 0, 0);
- fdrawbox((rect->xmin), (rect->ymin), (rect->xmax), (rect->ymax));
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor3ub(0, 0, 0);
+ imm_draw_box_wire_2d(pos, (rect->xmin), (rect->ymin), (rect->xmax), (rect->ymax));
+ immUnbindProgram();
}
/* vertical 'value' slider, using new widget code */
@@ -2659,12 +2753,22 @@ static void ui_draw_separator(const rcti *rect, uiWidgetColors *wcol)
wcol->text[2],
30
};
-
+
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
glEnable(GL_BLEND);
- glColor4ubv(col);
+ immUniformColor4ubv(col);
glLineWidth(1.0f);
- sdrawline(rect->xmin, y, rect->xmax, y);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2f(pos, rect->xmin, y);
+ immVertex2f(pos, rect->xmax, y);
+ immEnd();
+
glDisable(GL_BLEND);
+
+ immUnbindProgram();
}
/* ************ button callbacks, draw ***************** */
@@ -2740,11 +2844,14 @@ bool ui_link_bezier_points(const rcti *rect, float coord_array[][2], int resol)
}
#define LINK_RESOL 24
-void ui_draw_link_bezier(const rcti *rect)
+void ui_draw_link_bezier(const rcti *rect, const float color[4])
{
float coord_array[LINK_RESOL + 1][2];
if (ui_link_bezier_points(rect, coord_array, LINK_RESOL)) {
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
#if 0 /* unused */
/* we can reuse the dist variable here to increment the GL curve eval amount*/
const float dist = 1.0f / (float)LINK_RESOL;
@@ -2752,13 +2859,17 @@ void ui_draw_link_bezier(const rcti *rect)
glEnable(GL_BLEND);
glEnable(GL_LINE_SMOOTH);
- glEnableClientState(GL_VERTEX_ARRAY);
- glVertexPointer(2, GL_FLOAT, 0, coord_array);
- glDrawArrays(GL_LINE_STRIP, 0, LINK_RESOL + 1);
- glDisableClientState(GL_VERTEX_ARRAY);
+ immUniformColor4fv(color);
+
+ immBegin(GWN_PRIM_LINE_STRIP, LINK_RESOL + 1);
+ for (int i = 0; i <= LINK_RESOL; ++i)
+ immVertex2fv(pos, coord_array[i]);
+ immEnd();
glDisable(GL_BLEND);
glDisable(GL_LINE_SMOOTH);
+
+ immUnbindProgram();
}
}
@@ -2940,15 +3051,16 @@ static void widget_link(uiBut *but, uiWidgetColors *UNUSED(wcol), rcti *rect, in
if (but->flag & UI_SELECT) {
rcti rectlink;
+ float color[4];
- UI_ThemeColor(TH_TEXT_HI);
+ UI_GetThemeColor4fv(TH_TEXT_HI, color);
rectlink.xmin = BLI_rcti_cent_x(rect);
rectlink.ymin = BLI_rcti_cent_y(rect);
rectlink.xmax = but->linkto[0];
rectlink.ymax = but->linkto[1];
- ui_draw_link_bezier(&rectlink);
+ ui_draw_link_bezier(&rectlink, color);
}
}
@@ -3061,7 +3173,7 @@ static void widget_swatch(uiBut *but, uiWidgetColors *wcol, rcti *rect, int stat
ui_but_v3_get(but, col);
- if (state & (UI_BUT_ANIMATED | UI_BUT_ANIMATED_KEY | UI_BUT_DRIVEN | UI_BUT_REDALERT)) {
+ if (state & (UI_BUT_ANIMATED | UI_BUT_ANIMATED_KEY | UI_BUT_DRIVEN | UI_BUT_OVERRIDEN | UI_BUT_REDALERT)) {
/* draw based on state - color for keyed etc */
widgetbase_draw(&wtb, wcol);
@@ -3100,13 +3212,18 @@ static void widget_swatch(uiBut *but, uiWidgetColors *wcol, rcti *rect, int stat
float bw = rgb_to_grayscale(col);
bw += (bw < 0.5f) ? 0.5f : -0.5f;
-
- glColor4f(bw, bw, bw, 1.0);
- glBegin(GL_TRIANGLES);
- glVertex2f(rect->xmin + 0.1f * width, rect->ymin + 0.9f * height);
- glVertex2f(rect->xmin + 0.1f * width, rect->ymin + 0.5f * height);
- glVertex2f(rect->xmin + 0.5f * width, rect->ymin + 0.9f * height);
- glEnd();
+
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ immUniformColor3f(bw, bw, bw);
+ immBegin(GWN_PRIM_TRIS, 3);
+ immVertex2f(pos, rect->xmin + 0.1f * width, rect->ymin + 0.9f * height);
+ immVertex2f(pos, rect->xmin + 0.1f * width, rect->ymin + 0.5f * height);
+ immVertex2f(pos, rect->xmin + 0.5f * width, rect->ymin + 0.9f * height);
+ immEnd();
+
+ immUnbindProgram();
}
}
@@ -3422,12 +3539,50 @@ static void widget_roundbut_exec(uiWidgetColors *wcol, rcti *rect, int state, in
widgetbase_draw(&wtb, wcol);
}
+static void widget_tab(uiBut *but, uiWidgetColors *wcol, rcti *rect, int UNUSED(state), int roundboxalign)
+{
+ const uiStyle *style = UI_style_get();
+ const float rad = 0.15f * U.widget_unit;
+ const int fontid = style->widget.uifont_id;
+ const bool is_active = (but->flag & UI_SELECT);
+
+ uiWidgetBase wtb;
+ unsigned char theme_col_tab_highlight[3];
+
+ /* create outline highlight colors */
+ if (is_active) {
+ interp_v3_v3v3_uchar(theme_col_tab_highlight, (unsigned char *)wcol->inner_sel,
+ (unsigned char *)wcol->outline, 0.2f);
+ }
+ else {
+ interp_v3_v3v3_uchar(theme_col_tab_highlight, (unsigned char *)wcol->inner,
+ (unsigned char *)wcol->outline, 0.12f);
+ }
+
+ widget_init(&wtb);
+
+ /* half rounded */
+ round_box_edges(&wtb, roundboxalign, rect, rad);
+
+ /* draw inner */
+ wtb.draw_outline = 0;
+ widgetbase_draw(&wtb, wcol);
+
+ /* draw outline (3d look) */
+ ui_draw_but_TAB_outline(rect, rad, theme_col_tab_highlight, (unsigned char *)wcol->inner);
+
+ /* text shadow */
+ BLF_enable(fontid, BLF_SHADOW);
+ BLF_shadow(fontid, 3, (const float[4]){1.0f, 1.0f, 1.0f, 0.25f});
+ BLF_shadow_offset(fontid, 0, -1);
+}
+
static void widget_draw_extra_mask(const bContext *C, uiBut *but, uiWidgetType *wt, rcti *rect)
{
uiWidgetBase wtb;
const float rad = 0.25f * U.widget_unit;
unsigned char col[4];
-
+
/* state copy! */
wt->wcol = *(wt->wcol_theme);
@@ -3437,12 +3592,17 @@ static void widget_draw_extra_mask(const bContext *C, uiBut *but, uiWidgetType *
/* note: drawextra can change rect +1 or -1, to match round errors of existing previews */
but->block->drawextra(C, but->poin, but->block->drawextra_arg1, but->block->drawextra_arg2, rect);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
/* make mask to draw over image */
UI_GetThemeColor3ubv(TH_BACK, col);
- glColor3ubv(col);
-
+ immUniformColor3ubv(col);
+
round_box__edges(&wtb, UI_CNR_ALL, rect, 0.0f, rad);
- widgetbase_outline(&wtb);
+ widgetbase_outline(&wtb, pos);
+
+ immUnbindProgram();
}
/* outline */
@@ -3504,6 +3664,11 @@ static uiWidgetType *widget_type(uiWidgetTypeEnum type)
wt.draw = widget_roundbut_exec;
break;
+ case UI_WTYPE_TAB:
+ wt.custom = widget_tab;
+ wt.wcol_theme = &btheme->tui.wcol_tab;
+ break;
+
case UI_WTYPE_TOOLTIP:
wt.wcol_theme = &btheme->tui.wcol_tooltip;
wt.draw = widget_menu_back;
@@ -3766,7 +3931,11 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle *style, uiBut *but, rct
if (but->block->flag & UI_BLOCK_LOOP)
wt->wcol_theme = &btheme->tui.wcol_menu_back;
break;
-
+
+ case UI_BTYPE_TAB:
+ wt = widget_type(UI_WTYPE_TAB);
+ break;
+
case UI_BTYPE_BUT_TOGGLE:
case UI_BTYPE_TOGGLE:
case UI_BTYPE_TOGGLE_N:
@@ -3968,15 +4137,21 @@ void ui_draw_menu_back(uiStyle *UNUSED(style), uiBlock *block, rcti *rect)
wt->draw(&wt->wcol, rect, 0, 0);
if (block) {
+ float draw_color[4];
+ unsigned char *color = (unsigned char *)wt->wcol.text;
+
+ draw_color[0] = ((float)color[0]) / 255.0f;
+ draw_color[1] = ((float)color[1]) / 255.0f;
+ draw_color[2] = ((float)color[2]) / 255.0f;
+ draw_color[3] = 1.0f;
+
if (block->flag & UI_BLOCK_CLIPTOP) {
/* XXX no scaling for UI here yet */
- glColor3ubv((unsigned char *)wt->wcol.text);
- UI_draw_icon_tri(BLI_rcti_cent_x(rect), rect->ymax - 8, 't');
+ UI_draw_icon_tri(BLI_rcti_cent_x(rect), rect->ymax - 8, 't', draw_color);
}
if (block->flag & UI_BLOCK_CLIPBOTTOM) {
/* XXX no scaling for UI here yet */
- glColor3ubv((unsigned char *)wt->wcol.text);
- UI_draw_icon_tri(BLI_rcti_cent_x(rect), rect->ymin + 10, 'v');
+ UI_draw_icon_tri(BLI_rcti_cent_x(rect), rect->ymin + 10, 'v', draw_color);
}
}
}
@@ -3994,33 +4169,21 @@ static void draw_disk_shaded(
float y1, y2;
float fac;
unsigned char r_col[4];
+ unsigned int pos, col;
- glBegin(GL_TRIANGLE_STRIP);
-
- s = sinf(start);
- c = cosf(start);
-
- y1 = s * radius_int;
- y2 = s * radius_ext;
-
+ Gwn_VertFormat *format = immVertexFormat();
+ pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
if (shaded) {
- fac = (y1 + radius_ext) * radius_ext_scale;
- round_box_shade_col4_r(r_col, col1, col2, fac);
-
- glColor4ubv(r_col);
+ col = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 4, GWN_FETCH_INT_TO_FLOAT_UNIT);
+ immBindBuiltinProgram(GPU_SHADER_2D_SMOOTH_COLOR);
}
-
- glVertex2f(c * radius_int, s * radius_int);
-
- if (shaded) {
- fac = (y2 + radius_ext) * radius_ext_scale;
- round_box_shade_col4_r(r_col, col1, col2, fac);
-
- glColor4ubv(r_col);
+ else {
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor4ubv((unsigned char *)col1);
}
- glVertex2f(c * radius_ext, s * radius_ext);
- for (i = 1; i < subd; i++) {
+ immBegin(GWN_PRIM_TRI_STRIP, subd * 2);
+ for (i = 0; i < subd; i++) {
float a;
a = start + ((i) / (float)(subd - 1)) * angle;
@@ -4032,20 +4195,20 @@ static void draw_disk_shaded(
if (shaded) {
fac = (y1 + radius_ext) * radius_ext_scale;
round_box_shade_col4_r(r_col, col1, col2, fac);
-
- glColor4ubv(r_col);
+ immAttrib4ubv(col, r_col);
}
- glVertex2f(c * radius_int, s * radius_int);
+ immVertex2f(pos, c * radius_int, s * radius_int);
if (shaded) {
fac = (y2 + radius_ext) * radius_ext_scale;
round_box_shade_col4_r(r_col, col1, col2, fac);
-
- glColor4ubv(r_col);
+ immAttrib4ubv(col, r_col);
}
- glVertex2f(c * radius_ext, s * radius_ext);
+ immVertex2f(pos, c * radius_ext, s * radius_ext);
}
- glEnd();
+ immEnd();
+
+ immUnbindProgram();
}
void ui_draw_pie_center(uiBlock *block)
@@ -4064,8 +4227,8 @@ void ui_draw_pie_center(uiBlock *block)
float angle = atan2f(pie_dir[1], pie_dir[0]);
float range = (block->pie_data.flags & UI_PIE_DEGREES_RANGE_LARGE) ? M_PI_2 : M_PI_4;
- glPushMatrix();
- glTranslatef(cx, cy, 0.0f);
+ gpuPushMatrix();
+ gpuTranslate2f(cx, cy);
glEnable(GL_BLEND);
if (btheme->tui.wcol_pie_menu.shaded) {
@@ -4074,8 +4237,7 @@ void ui_draw_pie_center(uiBlock *block)
draw_disk_shaded(0.0f, (float)(M_PI * 2.0), pie_radius_internal, pie_radius_external, subd, col1, col2, true);
}
else {
- glColor4ubv((GLubyte *)btheme->tui.wcol_pie_menu.inner);
- draw_disk_shaded(0.0f, (float)(M_PI * 2.0), pie_radius_internal, pie_radius_external, subd, NULL, NULL, false);
+ draw_disk_shaded(0.0f, (float)(M_PI * 2.0), pie_radius_internal, pie_radius_external, subd, btheme->tui.wcol_pie_menu.inner, NULL, false);
}
if (!(block->pie_data.flags & UI_PIE_INVALID_DIR)) {
@@ -4085,25 +4247,34 @@ void ui_draw_pie_center(uiBlock *block)
draw_disk_shaded(angle - range / 2.0f, range, pie_radius_internal, pie_radius_external, subd, col1, col2, true);
}
else {
- glColor4ubv((GLubyte *)btheme->tui.wcol_pie_menu.inner_sel);
- draw_disk_shaded(angle - range / 2.0f, range, pie_radius_internal, pie_radius_external, subd, NULL, NULL, false);
+ draw_disk_shaded(angle - range / 2.0f, range, pie_radius_internal, pie_radius_external, subd, btheme->tui.wcol_pie_menu.inner_sel, NULL, false);
}
}
- glColor4ubv((GLubyte *)btheme->tui.wcol_pie_menu.outline);
- glutil_draw_lined_arc(0.0f, (float)M_PI * 2.0f, pie_radius_internal, subd);
- glutil_draw_lined_arc(0.0f, (float)M_PI * 2.0f, pie_radius_external, subd);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor4ubv((unsigned char *)btheme->tui.wcol_pie_menu.outline);
+
+ imm_draw_circle_wire_2d(pos, 0.0f, 0.0f, pie_radius_internal, subd);
+ imm_draw_circle_wire_2d(pos, 0.0f, 0.0f, pie_radius_external, subd);
+
+ immUnbindProgram();
if (U.pie_menu_confirm > 0 && !(block->pie_data.flags & (UI_PIE_INVALID_DIR | UI_PIE_CLICK_STYLE))) {
float pie_confirm_radius = U.pixelsize * (pie_radius_internal + U.pie_menu_confirm);
float pie_confirm_external = U.pixelsize * (pie_radius_internal + U.pie_menu_confirm + 7.0f);
- glColor4ub(btheme->tui.wcol_pie_menu.text_sel[0], btheme->tui.wcol_pie_menu.text_sel[1], btheme->tui.wcol_pie_menu.text_sel[2], 64);
- draw_disk_shaded(angle - range / 2.0f, range, pie_confirm_radius, pie_confirm_external, subd, NULL, NULL, false);
+ const char col[4] = {btheme->tui.wcol_pie_menu.text_sel[0],
+ btheme->tui.wcol_pie_menu.text_sel[1],
+ btheme->tui.wcol_pie_menu.text_sel[2],
+ 64};
+
+ draw_disk_shaded(angle - range / 2.0f, range, pie_confirm_radius, pie_confirm_external, subd, col, NULL, false);
}
glDisable(GL_BLEND);
- glPopMatrix();
+ gpuPopMatrix();
}
@@ -4187,8 +4358,7 @@ void ui_draw_menu_item(uiFontStyle *fstyle, rcti *rect, const char *name, int ic
UI_text_clip_middle_ex(fstyle, drawstr, okwidth, minwidth, max_len, '\0');
}
- glColor4ubv((unsigned char *)wt->wcol.text);
- UI_fontstyle_draw(fstyle, rect, drawstr);
+ UI_fontstyle_draw(fstyle, rect, drawstr, (unsigned char *)wt->wcol.text);
}
/* part text right aligned */
@@ -4196,7 +4366,7 @@ void ui_draw_menu_item(uiFontStyle *fstyle, rcti *rect, const char *name, int ic
if (cpoin) {
fstyle->align = UI_STYLE_TEXT_RIGHT;
rect->xmax = _rect.xmax - 5;
- UI_fontstyle_draw(fstyle, rect, cpoin + 1);
+ UI_fontstyle_draw(fstyle, rect, cpoin + 1, (unsigned char *)wt->wcol.text);
*cpoin = UI_SEP_CHAR;
}
}
@@ -4254,8 +4424,7 @@ void ui_draw_preview_item(uiFontStyle *fstyle, rcti *rect, const char *name, int
BLI_strncpy(drawstr, name, sizeof(drawstr));
UI_text_clip_middle_ex(fstyle, drawstr, okwidth, minwidth, max_len, '\0');
- glColor4ubv((unsigned char *)wt->wcol.text);
- UI_fontstyle_draw(fstyle, &trect, drawstr);
+ UI_fontstyle_draw(fstyle, &trect, drawstr, (unsigned char *)wt->wcol.text);
}
}
diff --git a/source/blender/editors/interface/resources.c b/source/blender/editors/interface/resources.c
index d12e7cc036b..2eae452debb 100644
--- a/source/blender/editors/interface/resources.c
+++ b/source/blender/editors/interface/resources.c
@@ -53,6 +53,8 @@
#include "BIF_gl.h"
+#include "BLF_api.h"
+
#include "UI_interface.h"
#include "UI_interface_icons.h"
@@ -665,6 +667,17 @@ const unsigned char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colo
case TH_AXIS_Z:
cp = btheme->tui.zaxis; break;
+ case TH_MANIPULATOR_HI:
+ cp = btheme->tui.manipulator_hi; break;
+ case TH_MANIPULATOR_PRIMARY:
+ cp = btheme->tui.manipulator_primary; break;
+ case TH_MANIPULATOR_SECONDARY:
+ cp = btheme->tui.manipulator_secondary; break;
+ case TH_MANIPULATOR_A:
+ cp = btheme->tui.manipulator_a; break;
+ case TH_MANIPULATOR_B:
+ cp = btheme->tui.manipulator_b; break;
+
case TH_INFO_SELECTED:
cp = ts->info_selected;
break;
@@ -835,6 +848,15 @@ static void ui_theme_space_init_handles_color(ThemeSpace *theme_space)
rgba_char_args_set(theme_space->act_spline, 0xdb, 0x25, 0x12, 255);
}
+static void ui_theme_space_init_manipulator_colors(bTheme *btheme)
+{
+ rgba_char_args_set(btheme->tui.manipulator_hi, 255, 255, 255, 255);
+ rgba_char_args_set(btheme->tui.manipulator_primary, 222, 255, 13, 255);
+ rgba_char_args_set(btheme->tui.manipulator_secondary, 0, 255, 255, 255);
+ rgba_char_args_set(btheme->tui.manipulator_a, 23, 127, 23, 255);
+ rgba_char_args_set(btheme->tui.manipulator_b, 127, 23, 23, 255);
+}
+
/**
* initialize default theme
* \note: when you add new colors, created & saved themes need initialized
@@ -875,6 +897,9 @@ void ui_theme_init_default(void)
/* common (new) variables */
ui_theme_init_new(btheme);
+ /* Manipulator. */
+ ui_theme_space_init_manipulator_colors(btheme);
+
/* space view3d */
rgba_char_args_set_fl(btheme->tv3d.back, 0.225, 0.225, 0.225, 1.0);
rgba_char_args_set(btheme->tv3d.text, 0, 0, 0, 255);
@@ -1272,25 +1297,35 @@ void UI_ThemeColor4(int colorid)
cp = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid);
glColor4ubv(cp);
-
}
/* set the color with offset for shades */
void UI_ThemeColorShade(int colorid, int offset)
{
- int r, g, b;
+ unsigned char col[4];
+ UI_GetThemeColorShade4ubv(colorid, offset, col);
+ glColor4ubv(col);
+}
+
+void UI_ThemeColorShadeAlpha(int colorid, int coloffset, int alphaoffset)
+{
+ int r, g, b, a;
const unsigned char *cp;
cp = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid);
- r = offset + (int) cp[0];
+ r = coloffset + (int) cp[0];
CLAMP(r, 0, 255);
- g = offset + (int) cp[1];
+ g = coloffset + (int) cp[1];
CLAMP(g, 0, 255);
- b = offset + (int) cp[2];
+ b = coloffset + (int) cp[2];
CLAMP(b, 0, 255);
- glColor4ub(r, g, b, cp[3]);
+ a = alphaoffset + (int) cp[3];
+ CLAMP(a, 0, 255);
+
+ glColor4ub(r, g, b, a);
}
-void UI_ThemeColorShadeAlpha(int colorid, int coloffset, int alphaoffset)
+
+void UI_GetThemeColorShadeAlpha4ubv(int colorid, int coloffset, int alphaoffset, unsigned char col[4])
{
int r, g, b, a;
const unsigned char *cp;
@@ -1304,7 +1339,11 @@ void UI_ThemeColorShadeAlpha(int colorid, int coloffset, int alphaoffset)
CLAMP(b, 0, 255);
a = alphaoffset + (int) cp[3];
CLAMP(a, 0, 255);
- glColor4ub(r, g, b, a);
+
+ col[0] = r;
+ col[1] = g;
+ col[2] = b;
+ col[3] = a;
}
void UI_GetThemeColorBlend3ubv(int colorid1, int colorid2, float fac, unsigned char col[3])
@@ -1320,6 +1359,19 @@ void UI_GetThemeColorBlend3ubv(int colorid1, int colorid2, float fac, unsigned c
col[2] = floorf((1.0f - fac) * cp1[2] + fac * cp2[2]);
}
+void UI_GetThemeColorBlend3f(int colorid1, int colorid2, float fac, float r_col[3])
+{
+ const unsigned char *cp1, *cp2;
+
+ cp1 = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid1);
+ cp2 = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid2);
+
+ CLAMP(fac, 0.0f, 1.0f);
+ r_col[0] = ((1.0f - fac) * cp1[0] + fac * cp2[0]) / 255.0f;
+ r_col[1] = ((1.0f - fac) * cp1[1] + fac * cp2[1]) / 255.0f;
+ r_col[2] = ((1.0f - fac) * cp1[2] + fac * cp2[2]) / 255.0f;
+}
+
/* blend between to theme colors, and set it */
void UI_ThemeColorBlend(int colorid1, int colorid2, float fac)
{
@@ -1372,6 +1424,12 @@ void UI_ThemeColorBlendShadeAlpha(int colorid1, int colorid2, float fac, int off
glColor4ub(r, g, b, a);
}
+void UI_FontThemeColor(int fontid, int colorid)
+{
+ unsigned char color[4];
+ UI_GetThemeColor4ubv(colorid, color);
+ BLF_color4ubv(fontid, color);
+}
/* get individual values, not scaled */
float UI_GetThemeValuef(int colorid)
@@ -1470,6 +1528,111 @@ void UI_GetThemeColorShade3ubv(int colorid, int offset, unsigned char col[3])
col[2] = b;
}
+void UI_GetThemeColorBlendShade3ubv(int colorid1, int colorid2, float fac, int offset, unsigned char col[3])
+{
+ const unsigned char *cp1, *cp2;
+
+ cp1 = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid1);
+ cp2 = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid2);
+
+ CLAMP(fac, 0.0f, 1.0f);
+
+ float blend[3];
+ blend[0] = offset + floorf((1.0f - fac) * cp1[0] + fac * cp2[0]);
+ blend[1] = offset + floorf((1.0f - fac) * cp1[1] + fac * cp2[1]);
+ blend[2] = offset + floorf((1.0f - fac) * cp1[2] + fac * cp2[2]);
+
+ F3TOCHAR3(blend, col);
+}
+
+void UI_GetThemeColorShade4ubv(int colorid, int offset, unsigned char col[4])
+{
+ int r, g, b;
+ const unsigned char *cp;
+
+ cp = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid);
+ r = offset + (int) cp[0];
+ CLAMP(r, 0, 255);
+ g = offset + (int) cp[1];
+ CLAMP(g, 0, 255);
+ b = offset + (int) cp[2];
+ CLAMP(b, 0, 255);
+
+ col[0] = r;
+ col[1] = g;
+ col[2] = b;
+ col[3] = cp[3];
+}
+
+void UI_GetThemeColorShadeAlpha4fv(int colorid, int coloffset, int alphaoffset, float col[4])
+{
+ int r, g, b, a;
+ const unsigned char *cp;
+
+ cp = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid);
+
+ r = coloffset + (int) cp[0];
+ CLAMP(r, 0, 255);
+ g = coloffset + (int) cp[1];
+ CLAMP(g, 0, 255);
+ b = coloffset + (int) cp[2];
+ CLAMP(b, 0, 255);
+ a = alphaoffset + (int) cp[3];
+ CLAMP(b, 0, 255);
+
+ col[0] = ((float)r) / 255.0f;
+ col[1] = ((float)g) / 255.0f;
+ col[2] = ((float)b) / 255.0f;
+ col[3] = ((float)a) / 255.0f;
+}
+
+void UI_GetThemeColorBlendShade3fv(int colorid1, int colorid2, float fac, int offset, float col[3])
+{
+ int r, g, b;
+ const unsigned char *cp1, *cp2;
+
+ cp1 = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid1);
+ cp2 = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid2);
+
+ CLAMP(fac, 0.0f, 1.0f);
+
+ r = offset + floorf((1.0f - fac) * cp1[0] + fac * cp2[0]);
+ CLAMP(r, 0, 255);
+ g = offset + floorf((1.0f - fac) * cp1[1] + fac * cp2[1]);
+ CLAMP(g, 0, 255);
+ b = offset + floorf((1.0f - fac) * cp1[2] + fac * cp2[2]);
+ CLAMP(b, 0, 255);
+
+ col[0] = ((float)r) / 255.0f;
+ col[1] = ((float)g) / 255.0f;
+ col[2] = ((float)b) / 255.0f;
+}
+
+void UI_GetThemeColorBlendShade4fv(int colorid1, int colorid2, float fac, int offset, float col[4])
+{
+ int r, g, b, a;
+ const unsigned char *cp1, *cp2;
+
+ cp1 = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid1);
+ cp2 = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid2);
+
+ CLAMP(fac, 0.0f, 1.0f);
+
+ r = offset + floorf((1.0f - fac) * cp1[0] + fac * cp2[0]);
+ CLAMP(r, 0, 255);
+ g = offset + floorf((1.0f - fac) * cp1[1] + fac * cp2[1]);
+ CLAMP(g, 0, 255);
+ b = offset + floorf((1.0f - fac) * cp1[2] + fac * cp2[2]);
+ CLAMP(b, 0, 255);
+ a = offset + floorf((1.0f - fac) * cp1[3] + fac * cp2[3]);
+ CLAMP(a, 0, 255);
+
+ col[0] = ((float)r) / 255.0f;
+ col[1] = ((float)g) / 255.0f;
+ col[2] = ((float)b) / 255.0f;
+ col[3] = ((float)a) / 255.0f;
+}
+
/* get the color, in char pointer */
void UI_GetThemeColor3ubv(int colorid, unsigned char col[3])
{
@@ -1658,11 +1821,9 @@ void init_userdef_do_versions(void)
U.savetime = 1;
// XXX error(STRINGIFY(BLENDER_STARTUP_FILE)" is buggy, please consider removing it.\n");
}
- /* transform widget settings */
- if (U.tw_hotspot == 0) {
- U.tw_hotspot = 14;
- U.tw_size = 25; /* percentage of window size */
- U.tw_handlesize = 16; /* percentage of widget radius */
+ if (U.manipulator_size == 0) {
+ U.manipulator_size = 75;
+ U.manipulator_flag |= USER_MANIPULATOR_DRAW;
}
if (U.pad_rot_angle == 0.0f)
U.pad_rot_angle = 15.0f;
@@ -2500,9 +2661,6 @@ void init_userdef_do_versions(void)
if (!USER_VERSION_ATLEAST(269, 9)) {
bTheme *btheme;
-
- U.tw_size = U.tw_size * 5.0f;
-
/* Action Editor (and NLA Editor) - Keyframe Colors */
/* Graph Editor - larger vertex size defaults */
for (btheme = U.themes.first; btheme; btheme = btheme->next) {
@@ -2776,13 +2934,35 @@ void init_userdef_do_versions(void)
U.uiflag |= USER_LOCK_CURSOR_ADJUST;
}
+ if (!USER_VERSION_ATLEAST(280, 1)) {
+ /* interface_widgets.c */
+ struct uiWidgetColors wcol_tab = {
+ {255, 255, 255, 255},
+ {83, 83, 83, 255},
+ {114, 114, 114, 255},
+ {90, 90, 90, 255},
+
+ {0, 0, 0, 255},
+ {0, 0, 0, 255},
+
+ 0,
+ 0, 0
+ };
+
+ for (bTheme *btheme = U.themes.first; btheme; btheme = btheme->next) {
+ btheme->tui.wcol_tab = wcol_tab;
+ }
+ }
+
/**
* Include next version bump.
*
* (keep this block even if it becomes empty).
*/
- {
-
+ if (((bTheme *)U.themes.first)->tui.manipulator_hi[3] == 0) {
+ for (bTheme *btheme = U.themes.first; btheme; btheme = btheme->next) {
+ ui_theme_space_init_manipulator_colors(btheme);
+ }
}
if (U.pixelsize == 0.0f)
@@ -2791,11 +2971,8 @@ void init_userdef_do_versions(void)
if (U.image_draw_method == 0)
U.image_draw_method = IMAGE_DRAW_METHOD_2DTEXTURE;
- // keep the following until the new audaspace is default to be built with
-#ifdef WITH_SYSTEM_AUDASPACE
// we default to the first audio device
U.audiodevice = 0;
-#endif
/* funny name, but it is GE stuff, moves userdef stuff to engine */
// XXX space_set_commmandline_options();
diff --git a/source/blender/editors/interface/view2d.c b/source/blender/editors/interface/view2d.c
index f2f4154160d..d31f2dec145 100644
--- a/source/blender/editors/interface/view2d.c
+++ b/source/blender/editors/interface/view2d.c
@@ -49,11 +49,11 @@
#include "BKE_screen.h"
#include "BKE_global.h"
+#include "GPU_immediate.h"
+#include "GPU_matrix.h"
#include "WM_api.h"
-#include "BIF_gl.h"
-
#include "BLF_api.h"
#include "ED_screen.h"
@@ -1107,9 +1107,6 @@ void UI_view2d_view_ortho(View2D *v2d)
/* set matrix on all appropriate axes */
wmOrtho2(curmasked.xmin, curmasked.xmax, curmasked.ymin, curmasked.ymax);
-
- /* XXX is this necessary? */
- glLoadIdentity();
}
/**
@@ -1137,9 +1134,6 @@ void UI_view2d_view_orthoSpecial(ARegion *ar, View2D *v2d, const bool xaxis)
wmOrtho2(curmasked.xmin - xofs, curmasked.xmax - xofs, -yofs, ar->winy - yofs);
else
wmOrtho2(-xofs, ar->winx - xofs, curmasked.ymin - yofs, curmasked.ymax - yofs);
-
- /* XXX is this necessary? */
- glLoadIdentity();
}
@@ -1151,7 +1145,7 @@ void UI_view2d_view_restore(const bContext *C)
int height = BLI_rcti_size_y(&ar->winrct) + 1;
wmOrtho2(0.0f, (float)width, 0.0f, (float)height);
- glLoadIdentity();
+ gpuLoadIdentity();
// ED_region_pixelspace(CTX_wm_region(C));
}
@@ -1305,12 +1299,45 @@ void UI_view2d_grid_draw(View2D *v2d, View2DGrid *grid, int flag)
{
float vec1[2], vec2[2];
int a, step;
+ int vertical_minor_step = (BLI_rcti_size_x(&v2d->mask) + 1) / (U.v2d_min_gridsize * UI_DPI_FAC),
+ horizontal_major_step = (BLI_rcti_size_y(&v2d->mask) + 1) / (U.v2d_min_gridsize * UI_DPI_FAC);
+ unsigned char grid_line_color[3];
/* check for grid first, as it may not exist */
if (grid == NULL)
return;
- glBegin(GL_LINES);
+ /* Count the needed vertices for the gridlines */
+ unsigned vertex_count = 0;
+ if (flag & V2D_VERTICAL_LINES) {
+ /* vertical lines */
+ vertex_count += 2 * vertical_minor_step; /* minor gridlines */
+ vertex_count += 2 * (vertical_minor_step + 2); /* major gridlines */
+ }
+ if (flag & V2D_HORIZONTAL_LINES) {
+ /* horizontal lines */
+ vertex_count += 2 * (horizontal_major_step + 1); /* major gridlines */
+
+ /* fine lines */
+ if (flag & V2D_HORIZONTAL_FINELINES)
+ vertex_count += 2 * (horizontal_major_step + 1);
+ }
+ /* axes */
+ if (flag & V2D_HORIZONTAL_AXIS)
+ vertex_count += 2;
+ if (flag & V2D_VERTICAL_AXIS)
+ vertex_count += 2;
+
+ /* If there is nothing to render, exit early */
+ if (vertex_count == 0)
+ return;
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_FLAT_COLOR);
+ immBegin(GWN_PRIM_LINES, vertex_count);
/* vertical lines */
if (flag & V2D_VERTICAL_LINES) {
@@ -1320,24 +1347,31 @@ void UI_view2d_grid_draw(View2D *v2d, View2DGrid *grid, int flag)
vec2[1] = v2d->cur.ymax;
/* minor gridlines */
- step = (BLI_rcti_size_x(&v2d->mask) + 1) / (U.v2d_min_gridsize * UI_DPI_FAC);
- UI_ThemeColor(TH_GRID);
-
- for (a = 0; a < step; a++) {
- glVertex2fv(vec1);
- glVertex2fv(vec2);
-
- vec2[0] = vec1[0] += grid->dx;
+ step = vertical_minor_step;
+ if (step != 0) {
+ UI_GetThemeColor3ubv(TH_GRID, grid_line_color);
+
+ for (a = 0; a < step; a++) {
+ immSkipAttrib(color);
+ immVertex2fv(pos, vec1);
+ immAttrib3ubv(color, grid_line_color);
+ immVertex2fv(pos, vec2);
+
+ vec2[0] = vec1[0] += grid->dx;
+ }
}
/* major gridlines */
vec2[0] = vec1[0] -= 0.5f * grid->dx;
- UI_ThemeColorShade(TH_GRID, 16);
+
+ UI_GetThemeColorShade3ubv(TH_GRID, 16, grid_line_color);
step++;
for (a = 0; a <= step; a++) {
- glVertex2fv(vec1);
- glVertex2fv(vec2);
+ immSkipAttrib(color);
+ immVertex2fv(pos, vec1);
+ immAttrib3ubv(color, grid_line_color);
+ immVertex2fv(pos, vec2);
vec2[0] = vec1[0] -= grid->dx;
}
@@ -1350,12 +1384,15 @@ void UI_view2d_grid_draw(View2D *v2d, View2DGrid *grid, int flag)
vec1[0] = grid->startx;
vec2[0] = v2d->cur.xmax;
- step = (BLI_rcti_size_y(&v2d->mask) + 1) / (U.v2d_min_gridsize * UI_DPI_FAC);
-
- UI_ThemeColor(TH_GRID);
+ step = horizontal_major_step;
+
+ UI_GetThemeColor3ubv(TH_GRID, grid_line_color);
+
for (a = 0; a <= step; a++) {
- glVertex2fv(vec1);
- glVertex2fv(vec2);
+ immSkipAttrib(color);
+ immVertex2fv(pos, vec1);
+ immAttrib3ubv(color, grid_line_color);
+ immVertex2fv(pos, vec2);
vec2[1] = vec1[1] += grid->dy;
}
@@ -1365,10 +1402,12 @@ void UI_view2d_grid_draw(View2D *v2d, View2DGrid *grid, int flag)
step++;
if (flag & V2D_HORIZONTAL_FINELINES) {
- UI_ThemeColorShade(TH_GRID, 16);
+ UI_GetThemeColorShade3ubv(TH_GRID, 16, grid_line_color);
for (a = 0; a < step; a++) {
- glVertex2fv(vec1);
- glVertex2fv(vec2);
+ immSkipAttrib(color);
+ immVertex2fv(pos, vec1);
+ immAttrib3ubv(color, grid_line_color);
+ immVertex2fv(pos, vec2);
vec2[1] = vec1[1] -= grid->dy;
}
@@ -1376,7 +1415,7 @@ void UI_view2d_grid_draw(View2D *v2d, View2DGrid *grid, int flag)
}
/* Axes are drawn as darker lines */
- UI_ThemeColorShade(TH_GRID, -50);
+ UI_GetThemeColorShade3ubv(TH_GRID, -50, grid_line_color);
/* horizontal axis */
if (flag & V2D_HORIZONTAL_AXIS) {
@@ -1384,8 +1423,10 @@ void UI_view2d_grid_draw(View2D *v2d, View2DGrid *grid, int flag)
vec2[0] = v2d->cur.xmax;
vec1[1] = vec2[1] = 0.0f;
- glVertex2fv(vec1);
- glVertex2fv(vec2);
+ immSkipAttrib(color);
+ immVertex2fv(pos, vec1);
+ immAttrib3ubv(color, grid_line_color);
+ immVertex2fv(pos, vec2);
}
/* vertical axis */
@@ -1394,91 +1435,157 @@ void UI_view2d_grid_draw(View2D *v2d, View2DGrid *grid, int flag)
vec2[1] = v2d->cur.ymax;
vec1[0] = vec2[0] = 0.0f;
- glVertex2fv(vec1);
- glVertex2fv(vec2);
+ immSkipAttrib(color);
+ immVertex2fv(pos, vec1);
+ immAttrib3ubv(color, grid_line_color);
+ immVertex2fv(pos, vec2);
}
- glEnd();
+ immEnd();
+ immUnbindProgram();
}
/* Draw a constant grid in given 2d-region */
void UI_view2d_constant_grid_draw(View2D *v2d, float step)
{
- float start;
-
- UI_ThemeColorShade(TH_BACK, -10);
+ float start_x, start_y;
+ int count_x, count_y;
- start = v2d->cur.xmin - (float)fmod(v2d->cur.xmin, step);
+ start_x = v2d->cur.xmin;
+ if (start_x < 0.0)
+ start_x += -(float)fmod(v2d->cur.xmin, step);
+ else
+ start_x += (step - (float)fmod(v2d->cur.xmin, step));
+
+ if (start_x > v2d->cur.xmax)
+ count_x = 0;
+ else
+ count_x = (v2d->cur.xmax - start_x) / step + 1;
+
+ start_y = v2d->cur.ymin;
+ if (start_y < 0.0)
+ start_y += -(float)fmod(v2d->cur.ymin, step);
+ else
+ start_y += (step - (float)fabs(fmod(v2d->cur.ymin, step)));
+
+ if (start_y > v2d->cur.ymax)
+ count_y = 0;
+ else
+ count_y = (v2d->cur.ymax - start_y) / step + 1;
- glBegin(GL_LINES);
- for (; start < v2d->cur.xmax; start += step) {
- glVertex2f(start, v2d->cur.ymin);
- glVertex2f(start, v2d->cur.ymax);
- }
+ if (count_x > 0 || count_y > 0) {
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ float theme_color[3];
- start = v2d->cur.ymin - (float)fmod(v2d->cur.ymin, step);
- for (; start < v2d->cur.ymax; start += step) {
- glVertex2f(v2d->cur.xmin, start);
- glVertex2f(v2d->cur.xmax, start);
- }
+ UI_GetThemeColorShade3fv(TH_BACK, -10, theme_color);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_FLAT_COLOR);
+ immBegin(GWN_PRIM_LINES, count_x * 2 + count_y * 2 + 4);
+
+ immAttrib3fv(color, theme_color);
+ for (int i = 0; i < count_x ; start_x += step, i++) {
+ immVertex2f(pos, start_x, v2d->cur.ymin);
+ immVertex2f(pos, start_x, v2d->cur.ymax);
+ }
+
+ for (int i = 0; i < count_y; start_y += step, i++) {
+ immVertex2f(pos, v2d->cur.xmin, start_y);
+ immVertex2f(pos, v2d->cur.xmax, start_y);
+ }
- /* X and Y axis */
- UI_ThemeColorShade(TH_BACK, -18);
- glVertex2f(0.0f, v2d->cur.ymin);
- glVertex2f(0.0f, v2d->cur.ymax);
- glVertex2f(v2d->cur.xmin, 0.0f);
- glVertex2f(v2d->cur.xmax, 0.0f);
+ /* X and Y axis */
+ UI_GetThemeColorShade3fv(TH_BACK, -18, theme_color);
+
+ immAttrib3fv(color, theme_color);
+ immVertex2f(pos, 0.0f, v2d->cur.ymin);
+ immVertex2f(pos, 0.0f, v2d->cur.ymax);
+ immVertex2f(pos, v2d->cur.xmin, 0.0f);
+ immVertex2f(pos, v2d->cur.xmax, 0.0f);
- glEnd();
+ immEnd();
+ immUnbindProgram();
+ }
}
/* Draw a multi-level grid in given 2d-region */
void UI_view2d_multi_grid_draw(View2D *v2d, int colorid, float step, int level_size, int totlevels)
{
+ /* Exit if there is nothing to draw */
+ if (totlevels == 0)
+ return;
+
int offset = -10;
float lstep = step;
- int level;
+ unsigned char grid_line_color[3];
+
+ /* Make an estimate of at least how many vertices will be needed */
+ unsigned vertex_count = 4;
+ vertex_count += 2 * ((int)((v2d->cur.xmax - v2d->cur.xmin) / lstep) + 1);
+ vertex_count += 2 * ((int)((v2d->cur.ymax - v2d->cur.ymin) / lstep) + 1);
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
glLineWidth(1.0f);
- for (level = 0; level < totlevels; ++level) {
- int i;
- float start;
-
- UI_ThemeColorShade(colorid, offset);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_FLAT_COLOR);
+ immBeginAtMost(GWN_PRIM_LINES, vertex_count);
+
+ for (int level = 0; level < totlevels; ++level) {
+ UI_GetThemeColorShade3ubv(colorid, offset, grid_line_color);
- i = (v2d->cur.xmin >= 0.0f ? -(int)(-v2d->cur.xmin / lstep) : (int)(v2d->cur.xmin / lstep));
- start = i * lstep;
+ int i = (int)(v2d->cur.xmin / lstep);
+ if (v2d->cur.xmin > 0.0f)
+ i++;
+ float start = i * lstep;
- glBegin(GL_LINES);
for (; start < v2d->cur.xmax; start += lstep, ++i) {
if (i == 0 || (level < totlevels - 1 && i % level_size == 0))
continue;
- glVertex2f(start, v2d->cur.ymin);
- glVertex2f(start, v2d->cur.ymax);
+
+ immSkipAttrib(color);
+ immVertex2f(pos, start, v2d->cur.ymin);
+ immAttrib3ubv(color, grid_line_color);
+ immVertex2f(pos, start, v2d->cur.ymax);
}
- i = (v2d->cur.ymin >= 0.0f ? -(int)(-v2d->cur.ymin / lstep) : (int)(v2d->cur.ymin / lstep));
+ i = (int)(v2d->cur.ymin / lstep);
+ if (v2d->cur.ymin > 0.0f)
+ i++;
start = i * lstep;
for (; start < v2d->cur.ymax; start += lstep, ++i) {
if (i == 0 || (level < totlevels - 1 && i % level_size == 0))
continue;
- glVertex2f(v2d->cur.xmin, start);
- glVertex2f(v2d->cur.xmax, start);
+
+ immSkipAttrib(color);
+ immVertex2f(pos, v2d->cur.xmin, start);
+ immAttrib3ubv(color, grid_line_color);
+ immVertex2f(pos, v2d->cur.xmax, start);
}
- /* X and Y axis */
- UI_ThemeColorShade(colorid, offset - 8);
- glVertex2f(0.0f, v2d->cur.ymin);
- glVertex2f(0.0f, v2d->cur.ymax);
- glVertex2f(v2d->cur.xmin, 0.0f);
- glVertex2f(v2d->cur.xmax, 0.0f);
-
- glEnd();
-
lstep *= level_size;
offset -= 6;
}
+
+ /* X and Y axis */
+ UI_GetThemeColorShade3ubv(colorid, -18 + ((totlevels - 1) * -6), grid_line_color);
+
+ immSkipAttrib(color);
+ immVertex2f(pos, 0.0f, v2d->cur.ymin);
+ immAttrib3ubv(color, grid_line_color);
+ immVertex2f(pos, 0.0f, v2d->cur.ymax);
+
+ immSkipAttrib(color);
+ immVertex2f(pos, v2d->cur.xmin, 0.0f);
+ immAttrib3ubv(color, grid_line_color);
+ immVertex2f(pos, v2d->cur.xmax, 0.0f);
+
+ immEnd();
+ immUnbindProgram();
}
/* the price we pay for not exposting structs :( */
@@ -1700,6 +1807,10 @@ void UI_view2d_scrollers_draw(const bContext *C, View2D *v2d, View2DScrollers *v
Scene *scene = CTX_data_scene(C);
rcti vert, hor;
int scroll = view2d_scroll_mapped(v2d->scroll);
+ unsigned char scrollers_back_color[4];
+
+ /* Color for scrollbar backs */
+ UI_GetThemeColor4ubv(TH_BACK, scrollers_back_color);
/* make copies of rects for less typing */
vert = vs->vert;
@@ -1711,7 +1822,6 @@ void UI_view2d_scrollers_draw(const bContext *C, View2D *v2d, View2DScrollers *v
uiWidgetColors wcol = btheme->tui.wcol_scroll;
rcti slider;
int state;
- unsigned char col[4];
slider.xmin = vs->hor_min;
slider.xmax = vs->hor_max;
@@ -1735,16 +1845,23 @@ void UI_view2d_scrollers_draw(const bContext *C, View2D *v2d, View2DScrollers *v
}
/* clean rect behind slider, but not with transparent background */
- UI_GetThemeColor4ubv(TH_BACK, col);
- if (col[3] == 255) {
- glColor3ub(col[0], col[1], col[2]);
- glRecti(v2d->hor.xmin, v2d->hor.ymin, v2d->hor.xmax, v2d->hor.ymax);
+ if (scrollers_back_color[3] == 255) {
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ immUniformColor3ubv(scrollers_back_color);
+ immRecti(pos, v2d->hor.xmin, v2d->hor.ymin, v2d->hor.xmax, v2d->hor.ymax);
+
+ immUnbindProgram();
}
UI_draw_widget_scroll(&wcol, &hor, &slider, state);
/* scale indicators */
if ((scroll & V2D_SCROLL_SCALE_HORIZONTAL) && (vs->grid)) {
+ const int font_id = BLF_default();
View2DGrid *grid = vs->grid;
float fac, dfac, fac2, val;
@@ -1759,7 +1876,7 @@ void UI_view2d_scrollers_draw(const bContext *C, View2D *v2d, View2DScrollers *v
dfac = dfac * BLI_rcti_size_x(&hor);
/* set starting value, and text color */
- UI_ThemeColor(TH_TEXT);
+ UI_FontThemeColor(font_id, TH_TEXT);
val = grid->startx;
/* if we're clamping to whole numbers only, make sure entries won't be repeated */
@@ -1771,7 +1888,7 @@ void UI_view2d_scrollers_draw(const bContext *C, View2D *v2d, View2DScrollers *v
}
if (vs->xunits == V2D_UNIT_FRAMES)
grid->powerx = 1;
-
+
/* draw numbers in the appropriate range */
if (dfac > 0.0f) {
float h = 0.1f * UI_UNIT_Y + (float)(hor.ymin);
@@ -1812,7 +1929,6 @@ void UI_view2d_scrollers_draw(const bContext *C, View2D *v2d, View2DScrollers *v
uiWidgetColors wcol = btheme->tui.wcol_scroll;
rcti slider;
int state;
- unsigned char col[4];
slider.xmin = vert.xmin;
slider.xmax = vert.xmax;
@@ -1836,10 +1952,16 @@ void UI_view2d_scrollers_draw(const bContext *C, View2D *v2d, View2DScrollers *v
}
/* clean rect behind slider, but not with transparent background */
- UI_GetThemeColor4ubv(TH_BACK, col);
- if (col[3] == 255) {
- glColor3ub(col[0], col[1], col[2]);
- glRecti(v2d->vert.xmin, v2d->vert.ymin, v2d->vert.xmax, v2d->vert.ymax);
+ if (scrollers_back_color[3] == 255) {
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ immUniformColor3ubv(scrollers_back_color);
+ immRecti(pos, v2d->vert.xmin, v2d->vert.ymin, v2d->vert.xmax, v2d->vert.ymax);
+
+ immUnbindProgram();
}
UI_draw_widget_scroll(&wcol, &vert, &slider, state);
@@ -1863,7 +1985,8 @@ void UI_view2d_scrollers_draw(const bContext *C, View2D *v2d, View2DScrollers *v
dfac = dfac * BLI_rcti_size_y(&vert);
/* set starting value, and text color */
- UI_ThemeColor(TH_TEXT);
+ const int font_id = BLF_default();
+ UI_FontThemeColor(font_id, TH_TEXT);
val = grid->starty;
/* if vertical clamping (to whole numbers) is used (i.e. in Sequencer), apply correction */
@@ -1872,9 +1995,8 @@ void UI_view2d_scrollers_draw(const bContext *C, View2D *v2d, View2DScrollers *v
/* draw vertical steps */
if (dfac > 0.0f) {
-
- BLF_rotation_default(M_PI_2);
- BLF_enable_default(BLF_ROTATION);
+ BLF_rotation(font_id, M_PI_2);
+ BLF_enable(font_id, BLF_ROTATION);
for (; fac < vert.ymax - 10; fac += dfac, val += grid->dy) {
@@ -1885,7 +2007,7 @@ void UI_view2d_scrollers_draw(const bContext *C, View2D *v2d, View2DScrollers *v
scroll_printstr(scene, (float)(vert.xmax) - 2.0f, fac, val, grid->powery, vs->yunits, 'v');
}
- BLF_disable_default(BLF_ROTATION);
+ BLF_disable(font_id, BLF_ROTATION);
}
}
}
@@ -2407,7 +2529,8 @@ void UI_view2d_text_cache_draw(ARegion *ar)
int col_pack_prev = 0;
/* investigate using BLF_ascender() */
- const float default_height = g_v2d_strings ? BLF_height_default("28", 3) : 0.0f;
+ const int font_id = BLF_default();
+ const float default_height = g_v2d_strings ? BLF_height(font_id, "28", 3) : 0.0f;
wmOrtho2_region_pixelspace(ar);
@@ -2418,7 +2541,7 @@ void UI_view2d_text_cache_draw(ARegion *ar)
if (yofs < 1) yofs = 1;
if (col_pack_prev != v2s->col.pack) {
- glColor3ubv(v2s->col.ub);
+ BLF_color3ubv(font_id, v2s->col.ub);
col_pack_prev = v2s->col.pack;
}
@@ -2426,11 +2549,11 @@ void UI_view2d_text_cache_draw(ARegion *ar)
BLF_draw_default((float)(v2s->mval[0] + xofs), (float)(v2s->mval[1] + yofs), 0.0,
v2s->str, BLF_DRAW_STR_DUMMY_MAX);
else {
- BLF_clipping_default(v2s->rect.xmin - 4, v2s->rect.ymin - 4, v2s->rect.xmax + 4, v2s->rect.ymax + 4);
- BLF_enable_default(BLF_CLIPPING);
+ BLF_enable(font_id, BLF_CLIPPING);
+ BLF_clipping(font_id, v2s->rect.xmin - 4, v2s->rect.ymin - 4, v2s->rect.xmax + 4, v2s->rect.ymax + 4);
BLF_draw_default(v2s->rect.xmin + xofs, v2s->rect.ymin + yofs, 0.0f,
v2s->str, BLF_DRAW_STR_DUMMY_MAX);
- BLF_disable_default(BLF_CLIPPING);
+ BLF_disable(font_id, BLF_CLIPPING);
}
}
g_v2d_strings = NULL;
@@ -2439,11 +2562,6 @@ void UI_view2d_text_cache_draw(ARegion *ar)
BLI_memarena_free(g_v2d_strings_arena);
g_v2d_strings_arena = NULL;
}
-
- // glMatrixMode(GL_PROJECTION);
- // glPopMatrix();
- // glMatrixMode(GL_MODELVIEW);
- // glPopMatrix();
}
diff --git a/source/blender/editors/io/CMakeLists.txt b/source/blender/editors/io/CMakeLists.txt
index b3bbce939a5..4d3f106a5d6 100644
--- a/source/blender/editors/io/CMakeLists.txt
+++ b/source/blender/editors/io/CMakeLists.txt
@@ -24,6 +24,7 @@ set(INC
../../blenlib
../../blentranslation
../../bmesh
+ ../../depsgraph
../../makesdna
../../makesrna
../../windowmanager
diff --git a/source/blender/editors/io/io_collada.c b/source/blender/editors/io/io_collada.c
index 39065606201..1b7fd319da0 100644
--- a/source/blender/editors/io/io_collada.c
+++ b/source/blender/editors/io/io_collada.c
@@ -40,6 +40,8 @@
#include "BKE_main.h"
#include "BKE_report.h"
+#include "DEG_depsgraph.h"
+
#include "ED_screen.h"
#include "ED_object.h"
@@ -56,6 +58,8 @@
#include "io_collada.h"
+#include "DEG_depsgraph.h"
+
static int wm_collada_export_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
{
if (!RNA_struct_property_is_set(op->ptr, "filepath")) {
@@ -78,6 +82,7 @@ static int wm_collada_export_invoke(bContext *C, wmOperator *op, const wmEvent *
/* function used for WM_OT_save_mainfile too */
static int wm_collada_export_exec(bContext *C, wmOperator *op)
{
+ EvaluationContext eval_ctx;
char filepath[FILE_MAX];
int apply_modifiers;
int export_mesh_type;
@@ -87,7 +92,7 @@ static int wm_collada_export_exec(bContext *C, wmOperator *op)
int include_shapekeys;
int deform_bones_only;
- int export_texture_type;
+ int include_material_textures;
int use_texture_copies;
int active_uv_only;
@@ -103,6 +108,8 @@ static int wm_collada_export_exec(bContext *C, wmOperator *op)
int export_count;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
if (!RNA_struct_property_is_set(op->ptr, "filepath")) {
BKE_report(op->reports, RPT_ERROR, "No filename given");
return OPERATOR_CANCELLED;
@@ -138,7 +145,7 @@ static int wm_collada_export_exec(bContext *C, wmOperator *op)
include_shapekeys = RNA_boolean_get(op->ptr, "include_shapekeys");
deform_bones_only = RNA_boolean_get(op->ptr, "deform_bones_only");
- export_texture_type = RNA_enum_get(op->ptr, "export_texture_type_selection");
+ include_material_textures = RNA_boolean_get(op->ptr, "include_material_textures");
use_texture_copies = RNA_boolean_get(op->ptr, "use_texture_copies");
active_uv_only = RNA_boolean_get(op->ptr, "active_uv_only");
@@ -156,7 +163,9 @@ static int wm_collada_export_exec(bContext *C, wmOperator *op)
ED_object_editmode_load(CTX_data_edit_object(C));
- export_count = collada_export(CTX_data_scene(C),
+ export_count = collada_export(&eval_ctx,
+ CTX_data_scene(C),
+ CTX_data_view_layer(C),
filepath,
apply_modifiers,
export_mesh_type,
@@ -167,7 +176,7 @@ static int wm_collada_export_exec(bContext *C, wmOperator *op)
deform_bones_only,
active_uv_only,
- export_texture_type,
+ include_material_textures,
use_texture_copies,
triangulate,
@@ -238,7 +247,7 @@ static void uiCollada_exportSettings(uiLayout *layout, PointerRNA *imfptr)
uiItemR(row, imfptr, "active_uv_only", 0, NULL, ICON_NONE);
row = uiLayoutRow(box, false);
- uiItemR(row, imfptr, "export_texture_type_selection", 0, "", ICON_NONE);
+ uiItemR(row, imfptr, "include_material_textures", 0, NULL, ICON_NONE);
row = uiLayoutRow(box, false);
uiItemR(row, imfptr, "use_texture_copies", 1, NULL, ICON_NONE);
@@ -315,15 +324,9 @@ void WM_OT_collada_export(wmOperatorType *ot)
};
static const EnumPropertyItem prop_bc_export_transformation_type[] = {
- { BC_TRANSFORMATION_TYPE_MATRIX, "matrix", 0, "Matrix", "Use <matrix> to specify transformations" },
- { BC_TRANSFORMATION_TYPE_TRANSROTLOC, "transrotloc", 0, "TransRotLoc", "Use <translate>, <rotate>, <scale> to specify transformations" },
- { 0, NULL, 0, NULL, NULL }
- };
-
- static const EnumPropertyItem prop_bc_export_texture_type[] = {
- { BC_TEXTURE_TYPE_MAT, "mat", 0, "Materials", "Export Materials" },
- { BC_TEXTURE_TYPE_UV, "uv", 0, "UV Textures", "Export UV Textures (Face textures) as materials" },
- { 0, NULL, 0, NULL, NULL }
+ {BC_TRANSFORMATION_TYPE_MATRIX, "matrix", 0, "Matrix", "Use <matrix> to specify transformations"},
+ {BC_TRANSFORMATION_TYPE_TRANSROTLOC, "transrotloc", 0, "TransRotLoc", "Use <translate>, <rotate>, <scale> to specify transformations"},
+ {0, NULL, 0, NULL, NULL}
};
ot->name = "Export COLLADA";
@@ -368,9 +371,13 @@ void WM_OT_collada_export(wmOperatorType *ot)
RNA_def_boolean(func, "deform_bones_only", 0, "Deform Bones only",
"Only export deforming bones with armatures");
+
RNA_def_boolean(func, "active_uv_only", 0, "Only Selected UV Map",
"Export only the selected UV Map");
+ RNA_def_boolean(func, "include_material_textures", 0, "Include Material Textures",
+ "Export textures assigned to the object Materials");
+
RNA_def_boolean(func, "use_texture_copies", 1, "Copy",
"Copy textures to same folder where the .dae file is exported");
@@ -387,20 +394,11 @@ void WM_OT_collada_export(wmOperatorType *ot)
RNA_def_boolean(func, "sort_by_name", 0, "Sort by Object name",
"Sort exported data by Object name");
-
RNA_def_int(func, "export_transformation_type", 0, INT_MIN, INT_MAX,
- "Transform", "Transformation type for translation, scale and rotation", INT_MIN, INT_MAX);
+ "Transform", "Transformation type for translation, scale and rotation", INT_MIN, INT_MAX);
RNA_def_enum(func, "export_transformation_type_selection", prop_bc_export_transformation_type, 0,
- "Transform", "Transformation type for translation, scale and rotation");
-
-
- RNA_def_int(func, "export_texture_type", 0, INT_MIN, INT_MAX,
- "Texture Type", "Type for exported Textures (UV or MAT)", INT_MIN, INT_MAX);
-
- RNA_def_enum(func, "export_texture_type_selection", prop_bc_export_texture_type, 0,
- "Texture Type", "Type for exported Textures (UV or MAT)");
-
+ "Transform", "Transformation type for translation, scale and rotation");
RNA_def_boolean(func, "open_sim", 0, "Export to SL/OpenSim",
"Compatibility mode for SL, OpenSim and other compatible online worlds");
@@ -451,6 +449,7 @@ static int wm_collada_import_exec(bContext *C, wmOperator *op)
min_chain_length,
keep_bind_info) )
{
+ DEG_id_tag_update(&CTX_data_scene(C)->id, DEG_TAG_BASE_FLAGS_UPDATE);
return OPERATOR_FINISHED;
}
else {
diff --git a/source/blender/editors/manipulator_library/CMakeLists.txt b/source/blender/editors/manipulator_library/CMakeLists.txt
new file mode 100644
index 00000000000..86e1bb3b6d7
--- /dev/null
+++ b/source/blender/editors/manipulator_library/CMakeLists.txt
@@ -0,0 +1,60 @@
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ***** END GPL LICENSE BLOCK *****
+
+set(INC
+ ../include
+ ../../blenkernel
+ ../../blenlib
+ ../../blentranslation
+ ../../bmesh
+ ../../depsgraph
+ ../../gpu
+ ../../makesdna
+ ../../makesrna
+ ../../windowmanager
+ ../../../../intern/guardedalloc
+ ../../../../intern/eigen
+ ../../../../intern/glew-mx
+)
+
+set(INC_SYS
+ ${GLEW_INCLUDE_PATH}
+)
+
+set(SRC
+ manipulator_draw_utils.c
+ manipulator_geometry.h
+ manipulator_library_intern.h
+ manipulator_library_presets.c
+ manipulator_library_utils.c
+ geometry/geom_arrow_manipulator.c
+ geometry/geom_cube_manipulator.c
+ geometry/geom_dial_manipulator.c
+ manipulator_types/arrow2d_manipulator.c
+ manipulator_types/arrow3d_manipulator.c
+ manipulator_types/button2d_manipulator.c
+ manipulator_types/cage2d_manipulator.c
+ manipulator_types/cage3d_manipulator.c
+ manipulator_types/dial3d_manipulator.c
+ manipulator_types/grab3d_manipulator.c
+ manipulator_types/primitive3d_manipulator.c
+)
+
+add_definitions(${GL_DEFINITIONS})
+
+blender_add_lib(bf_editor_manipulator_library "${SRC}" "${INC}" "${INC_SYS}")
diff --git a/source/blender/editors/manipulator_library/geometry/geom_arrow_manipulator.c b/source/blender/editors/manipulator_library/geometry/geom_arrow_manipulator.c
new file mode 100644
index 00000000000..34f7d73589c
--- /dev/null
+++ b/source/blender/editors/manipulator_library/geometry/geom_arrow_manipulator.c
@@ -0,0 +1,141 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2016 Blender Foundation.
+ * All rights reserved.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file geom_arrow_manipulator.c
+ * \ingroup wm
+ */
+
+#include "../manipulator_geometry.h"
+
+static float verts[][3] = {
+ {-0.000000, 0.012320, 0.000000},
+ {-0.000000, 0.012320, 0.974306},
+ {0.008711, 0.008711, 0.000000},
+ {0.008711, 0.008711, 0.974306},
+ {0.012320, -0.000000, 0.000000},
+ {0.012320, -0.000000, 0.974306},
+ {0.008711, -0.008711, 0.000000},
+ {0.008711, -0.008711, 0.974306},
+ {-0.000000, -0.012320, 0.000000},
+ {-0.000000, -0.012320, 0.974306},
+ {-0.008711, -0.008711, 0.000000},
+ {-0.008711, -0.008711, 0.974306},
+ {-0.012320, 0.000000, 0.000000},
+ {-0.012320, 0.000000, 0.974306},
+ {-0.008711, 0.008711, 0.000000},
+ {-0.008711, 0.008711, 0.974306},
+ {0.000000, 0.072555, 0.974306},
+ {0.051304, 0.051304, 0.974306},
+ {0.072555, -0.000000, 0.974306},
+ {0.051304, -0.051304, 0.974306},
+ {-0.000000, -0.072555, 0.974306},
+ {-0.051304, -0.051304, 0.974306},
+ {-0.072555, 0.000000, 0.974306},
+ {-0.051304, 0.051304, 0.974306},
+ {0.000000, -0.000000, 1.268098},
+};
+
+static float normals[][3] = {
+ {0.000000, 0.776360, -0.630238},
+ {0.000000, 0.594348, -0.804163},
+ {0.548967, 0.548967, -0.630238},
+ {0.420270, 0.420270, -0.804163},
+ {0.776360, 0.000000, -0.630238},
+ {0.594378, 0.000000, -0.804163},
+ {0.548967, -0.548967, -0.630238},
+ {0.420270, -0.420270, -0.804163},
+ {0.000000, -0.776360, -0.630238},
+ {0.000000, -0.594378, -0.804163},
+ {-0.548967, -0.548967, -0.630238},
+ {-0.420270, -0.420270, -0.804163},
+ {-0.776360, 0.000000, -0.630238},
+ {-0.594378, 0.000000, -0.804163},
+ {-0.548967, 0.548967, -0.630238},
+ {-0.420270, 0.420270, -0.804163},
+ {0.000000, 0.843226, -0.537492},
+ {0.596271, 0.596271, -0.537492},
+ {0.843226, 0.000000, -0.537492},
+ {0.596271, -0.596271, -0.537492},
+ {0.000000, -0.843226, -0.537492},
+ {-0.596271, -0.596271, -0.537492},
+ {-0.843226, 0.000000, -0.537492},
+ {-0.596271, 0.596271, -0.537492},
+ {0.000000, 0.000000, 1.000000},
+};
+
+static unsigned short indices[] = {
+ 1, 3, 2,
+ 3, 5, 4,
+ 5, 7, 6,
+ 7, 9, 8,
+ 9, 11, 10,
+ 11, 13, 12,
+ 5, 18, 19,
+ 15, 1, 0,
+ 13, 15, 14,
+ 6, 10, 14,
+ 11, 21, 22,
+ 7, 19, 20,
+ 13, 22, 23,
+ 3, 17, 18,
+ 9, 20, 21,
+ 15, 23, 16,
+ 1, 16, 17,
+ 23, 22, 24,
+ 21, 20, 24,
+ 19, 18, 24,
+ 17, 16, 24,
+ 16, 23, 24,
+ 22, 21, 24,
+ 20, 19, 24,
+ 18, 17, 24,
+ 0, 1, 2,
+ 2, 3, 4,
+ 4, 5, 6,
+ 6, 7, 8,
+ 8, 9, 10,
+ 10, 11, 12,
+ 7, 5, 19,
+ 14, 15, 0,
+ 12, 13, 14,
+ 14, 0, 2,
+ 2, 4, 6,
+ 6, 8, 10,
+ 10, 12, 14,
+ 14, 2, 6,
+ 13, 11, 22,
+ 9, 7, 20,
+ 15, 13, 23,
+ 5, 3, 18,
+ 11, 9, 21,
+ 1, 15, 16,
+ 3, 1, 17,
+};
+
+ManipulatorGeomInfo wm_manipulator_geom_data_arrow = {
+ .nverts = 25,
+ .ntris = 46,
+ .verts = verts,
+ .normals = normals,
+ .indices = indices,
+};
diff --git a/source/blender/editors/manipulator_library/geometry/geom_cube_manipulator.c b/source/blender/editors/manipulator_library/geometry/geom_cube_manipulator.c
new file mode 100644
index 00000000000..cee8e1e22ee
--- /dev/null
+++ b/source/blender/editors/manipulator_library/geometry/geom_cube_manipulator.c
@@ -0,0 +1,75 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2016 Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file geom_cube_manipulator.c
+ * \ingroup wm
+ */
+
+#include "../manipulator_geometry.h"
+
+static const float verts[][3] = {
+ {1.000000, 1.000000, -1.000000},
+ {1.000000, -1.000000, -1.000000},
+ {-1.000000, -1.000000, -1.000000},
+ {-1.000000, 1.000000, -1.000000},
+ {1.000000, 1.000000, 1.000000},
+ {0.999999, -1.000001, 1.000000},
+ {-1.000000, -1.000000, 1.000000},
+ {-1.000000, 1.000000, 1.000000},
+};
+
+static const float normals[][3] = {
+ {0.577349, 0.577349, -0.577349},
+ {0.577349, -0.577349, -0.577349},
+ {-0.577349, -0.577349, -0.577349},
+ {-0.577349, 0.577349, -0.577349},
+ {0.577349, 0.577349, 0.577349},
+ {0.577349, -0.577349, 0.577349},
+ {-0.577349, -0.577349, 0.577349},
+ {-0.577349, 0.577349, 0.577349},
+};
+
+static const unsigned short indices[] = {
+ 1, 2, 3,
+ 7, 6, 5,
+ 4, 5, 1,
+ 5, 6, 2,
+ 2, 6, 7,
+ 0, 3, 7,
+ 0, 1, 3,
+ 4, 7, 5,
+ 0, 4, 1,
+ 1, 5, 2,
+ 3, 2, 7,
+ 4, 0, 7,
+};
+
+ManipulatorGeomInfo wm_manipulator_geom_data_cube = {
+ .nverts = 8,
+ .ntris = 12,
+ .verts = verts,
+ .normals = normals,
+ .indices = indices,
+};
diff --git a/source/blender/editors/manipulator_library/geometry/geom_dial_manipulator.c b/source/blender/editors/manipulator_library/geometry/geom_dial_manipulator.c
new file mode 100644
index 00000000000..811fc872a81
--- /dev/null
+++ b/source/blender/editors/manipulator_library/geometry/geom_dial_manipulator.c
@@ -0,0 +1,813 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2016 Blender Foundation.
+ * All rights reserved.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file geom_dial_manipulator.c
+ * \ingroup wm
+ */
+
+#include "../manipulator_geometry.h"
+
+static const float verts[][3] = {
+ {1.034000, 0.000000, 0.000000},
+ {1.017000, 0.000000, 0.029445},
+ {0.983000, 0.000000, 0.029445},
+ {0.966000, 0.000000, 0.000000},
+ {0.983000, 0.000000, -0.029445},
+ {1.017000, 0.000000, -0.029445},
+ {1.014132, 0.201723, 0.000000},
+ {0.997459, 0.198407, 0.029445},
+ {0.964112, 0.191774, 0.029445},
+ {0.947439, 0.188457, 0.000000},
+ {0.964112, 0.191774, -0.029445},
+ {0.997459, 0.198407, -0.029445},
+ {0.955292, 0.395695, 0.000000},
+ {0.939586, 0.389189, 0.029445},
+ {0.908174, 0.376178, 0.029445},
+ {0.892468, 0.369672, 0.000000},
+ {0.908174, 0.376178, -0.029445},
+ {0.939586, 0.389189, -0.029445},
+ {0.859740, 0.574460, 0.000000},
+ {0.845605, 0.565015, 0.029445},
+ {0.817335, 0.546126, 0.029445},
+ {0.803200, 0.536681, 0.000000},
+ {0.817335, 0.546126, -0.029445},
+ {0.845605, 0.565015, -0.029445},
+ {0.731148, 0.731148, 0.000000},
+ {0.719128, 0.719128, 0.029445},
+ {0.695086, 0.695086, 0.029445},
+ {0.683065, 0.683065, 0.000000},
+ {0.695086, 0.695086, -0.029445},
+ {0.719128, 0.719128, -0.029445},
+ {0.574460, 0.859740, 0.000000},
+ {0.565015, 0.845605, 0.029445},
+ {0.546125, 0.817335, 0.029445},
+ {0.536681, 0.803200, 0.000000},
+ {0.546125, 0.817335, -0.029445},
+ {0.565015, 0.845605, -0.029445},
+ {0.395695, 0.955291, 0.000000},
+ {0.389189, 0.939585, 0.029445},
+ {0.376178, 0.908173, 0.029445},
+ {0.369672, 0.892467, 0.000000},
+ {0.376178, 0.908173, -0.029445},
+ {0.389189, 0.939585, -0.029445},
+ {0.201724, 1.014132, 0.000000},
+ {0.198407, 0.997459, 0.029445},
+ {0.191774, 0.964112, 0.029445},
+ {0.188457, 0.947439, 0.000000},
+ {0.191774, 0.964112, -0.029445},
+ {0.198407, 0.997459, -0.029445},
+ {0.000000, 1.034000, 0.000000},
+ {0.000000, 1.017000, 0.029445},
+ {0.000000, 0.983000, 0.029445},
+ {0.000000, 0.966000, 0.000000},
+ {0.000000, 0.983000, -0.029445},
+ {0.000000, 1.017000, -0.029445},
+ {-0.201723, 1.014132, 0.000000},
+ {-0.198407, 0.997459, 0.029445},
+ {-0.191774, 0.964112, 0.029445},
+ {-0.188457, 0.947439, 0.000000},
+ {-0.191774, 0.964112, -0.029445},
+ {-0.198407, 0.997459, -0.029445},
+ {-0.395695, 0.955291, 0.000000},
+ {-0.389189, 0.939585, 0.029445},
+ {-0.376178, 0.908174, 0.029445},
+ {-0.369672, 0.892468, 0.000000},
+ {-0.376178, 0.908174, -0.029445},
+ {-0.389189, 0.939585, -0.029445},
+ {-0.574459, 0.859740, 0.000000},
+ {-0.565015, 0.845605, 0.029445},
+ {-0.546125, 0.817335, 0.029445},
+ {-0.536681, 0.803200, 0.000000},
+ {-0.546125, 0.817335, -0.029445},
+ {-0.565015, 0.845605, -0.029445},
+ {-0.731149, 0.731148, 0.000000},
+ {-0.719128, 0.719127, 0.029445},
+ {-0.695086, 0.695086, 0.029445},
+ {-0.683065, 0.683065, 0.000000},
+ {-0.695086, 0.695086, -0.029445},
+ {-0.719128, 0.719127, -0.029445},
+ {-0.859740, 0.574460, 0.000000},
+ {-0.845604, 0.565015, 0.029445},
+ {-0.817335, 0.546126, 0.029445},
+ {-0.803200, 0.536681, 0.000000},
+ {-0.817335, 0.546126, -0.029445},
+ {-0.845604, 0.565015, -0.029445},
+ {-0.955291, 0.395695, 0.000000},
+ {-0.939585, 0.389189, 0.029445},
+ {-0.908173, 0.376178, 0.029445},
+ {-0.892468, 0.369672, 0.000000},
+ {-0.908173, 0.376178, -0.029445},
+ {-0.939585, 0.389189, -0.029445},
+ {-1.014132, 0.201723, 0.000000},
+ {-0.997459, 0.198407, 0.029445},
+ {-0.964112, 0.191774, 0.029445},
+ {-0.947439, 0.188457, 0.000000},
+ {-0.964112, 0.191774, -0.029445},
+ {-0.997459, 0.198407, -0.029445},
+ {-1.034000, 0.000000, 0.000000},
+ {-1.017000, 0.000000, 0.029445},
+ {-0.983000, 0.000000, 0.029445},
+ {-0.966000, 0.000000, 0.000000},
+ {-0.983000, 0.000000, -0.029445},
+ {-1.017000, 0.000000, -0.029445},
+ {-1.014132, -0.201723, 0.000000},
+ {-0.997459, -0.198407, 0.029445},
+ {-0.964112, -0.191774, 0.029445},
+ {-0.947439, -0.188457, 0.000000},
+ {-0.964112, -0.191774, -0.029445},
+ {-0.997459, -0.198407, -0.029445},
+ {-0.955292, -0.395694, 0.000000},
+ {-0.939586, -0.389189, 0.029445},
+ {-0.908174, -0.376177, 0.029445},
+ {-0.892468, -0.369672, 0.000000},
+ {-0.908174, -0.376177, -0.029445},
+ {-0.939586, -0.389189, -0.029445},
+ {-0.859740, -0.574460, 0.000000},
+ {-0.845604, -0.565015, 0.029445},
+ {-0.817335, -0.546126, 0.029445},
+ {-0.803200, -0.536681, 0.000000},
+ {-0.817335, -0.546126, -0.029445},
+ {-0.845604, -0.565015, -0.029445},
+ {-0.731149, -0.731148, 0.000000},
+ {-0.719128, -0.719127, 0.029445},
+ {-0.695086, -0.695086, 0.029445},
+ {-0.683065, -0.683065, 0.000000},
+ {-0.695086, -0.695086, -0.029445},
+ {-0.719128, -0.719127, -0.029445},
+ {-0.574460, -0.859739, 0.000000},
+ {-0.565015, -0.845604, 0.029445},
+ {-0.546126, -0.817334, 0.029445},
+ {-0.536681, -0.803199, 0.000000},
+ {-0.546126, -0.817334, -0.029445},
+ {-0.565015, -0.845604, -0.029445},
+ {-0.395695, -0.955291, 0.000000},
+ {-0.389189, -0.939585, 0.029445},
+ {-0.376178, -0.908174, 0.029445},
+ {-0.369672, -0.892468, 0.000000},
+ {-0.376178, -0.908174, -0.029445},
+ {-0.389189, -0.939585, -0.029445},
+ {-0.201724, -1.014132, 0.000000},
+ {-0.198407, -0.997459, 0.029445},
+ {-0.191774, -0.964112, 0.029445},
+ {-0.188458, -0.947438, 0.000000},
+ {-0.191774, -0.964112, -0.029445},
+ {-0.198407, -0.997459, -0.029445},
+ {0.000000, -1.034000, 0.000000},
+ {0.000000, -1.017000, 0.029445},
+ {0.000000, -0.983000, 0.029445},
+ {0.000000, -0.966000, 0.000000},
+ {0.000000, -0.983000, -0.029445},
+ {0.000000, -1.017000, -0.029445},
+ {0.201723, -1.014132, 0.000000},
+ {0.198407, -0.997459, 0.029445},
+ {0.191773, -0.964112, 0.029445},
+ {0.188457, -0.947439, 0.000000},
+ {0.191773, -0.964112, -0.029445},
+ {0.198407, -0.997459, -0.029445},
+ {0.395695, -0.955291, 0.000000},
+ {0.389189, -0.939585, 0.029445},
+ {0.376178, -0.908173, 0.029445},
+ {0.369672, -0.892467, 0.000000},
+ {0.376178, -0.908173, -0.029445},
+ {0.389189, -0.939585, -0.029445},
+ {0.574460, -0.859740, 0.000000},
+ {0.565015, -0.845605, 0.029445},
+ {0.546125, -0.817335, 0.029445},
+ {0.536681, -0.803200, 0.000000},
+ {0.546125, -0.817335, -0.029445},
+ {0.565015, -0.845605, -0.029445},
+ {0.731148, -0.731149, 0.000000},
+ {0.719127, -0.719128, 0.029445},
+ {0.695086, -0.695086, 0.029445},
+ {0.683065, -0.683066, 0.000000},
+ {0.695086, -0.695086, -0.029445},
+ {0.719127, -0.719128, -0.029445},
+ {0.859740, -0.574460, 0.000000},
+ {0.845605, -0.565015, 0.029445},
+ {0.817335, -0.546126, 0.029445},
+ {0.803200, -0.536681, 0.000000},
+ {0.817335, -0.546126, -0.029445},
+ {0.845605, -0.565015, -0.029445},
+ {0.955291, -0.395695, 0.000000},
+ {0.939585, -0.389189, 0.029445},
+ {0.908173, -0.376178, 0.029445},
+ {0.892467, -0.369673, 0.000000},
+ {0.908173, -0.376178, -0.029445},
+ {0.939585, -0.389189, -0.029445},
+ {1.014132, -0.201723, 0.000000},
+ {0.997459, -0.198407, 0.029445},
+ {0.964112, -0.191774, 0.029445},
+ {0.947439, -0.188457, 0.000000},
+ {0.964112, -0.191774, -0.029445},
+ {0.997459, -0.198407, -0.029445},
+};
+
+static const float normals[][3] = {
+ {1.000000, 0.000000, 0.000000},
+ {0.522691, 0.000000, 0.852504},
+ {-0.475845, 0.000000, 0.879513},
+ {-1.000000, 0.000000, 0.000000},
+ {-0.475845, 0.000000, -0.879513},
+ {0.522691, 0.000000, -0.852504},
+ {0.980773, 0.195074, 0.000000},
+ {0.512650, 0.101962, 0.852504},
+ {-0.466689, -0.092807, 0.879513},
+ {-0.980773, -0.195074, 0.000000},
+ {-0.466689, -0.092807, -0.879513},
+ {0.512650, 0.101962, -0.852504},
+ {0.923856, 0.382672, 0.000000},
+ {0.482894, 0.200018, 0.852504},
+ {-0.439619, -0.182073, 0.879513},
+ {-0.923856, -0.382672, 0.000000},
+ {-0.439619, -0.182073, -0.879513},
+ {0.482894, 0.200018, -0.852504},
+ {0.831446, 0.555559, 0.000000},
+ {0.434614, 0.290384, 0.852504},
+ {-0.395642, -0.264351, 0.879513},
+ {-0.831446, -0.555559, 0.000000},
+ {-0.395642, -0.264351, -0.879513},
+ {0.434614, 0.290384, -0.852504},
+ {0.707083, 0.707083, 0.000000},
+ {0.369610, 0.369610, 0.852504},
+ {-0.336467, -0.336467, 0.879513},
+ {-0.707083, -0.707083, 0.000000},
+ {-0.336467, -0.336467, -0.879513},
+ {0.369610, 0.369610, -0.852504},
+ {0.555559, 0.831446, 0.000000},
+ {0.290384, 0.434614, 0.852504},
+ {-0.264351, -0.395642, 0.879513},
+ {-0.555559, -0.831446, 0.000000},
+ {-0.264351, -0.395642, -0.879513},
+ {0.290384, 0.434614, -0.852504},
+ {0.382672, 0.923856, 0.000000},
+ {0.200018, 0.482894, 0.852504},
+ {-0.182073, -0.439619, 0.879513},
+ {-0.382672, -0.923856, 0.000000},
+ {-0.182073, -0.439619, -0.879513},
+ {0.200018, 0.482894, -0.852504},
+ {0.195074, 0.980773, 0.000000},
+ {0.101962, 0.512650, 0.852504},
+ {-0.092807, -0.466689, 0.879513},
+ {-0.195074, -0.980773, 0.000000},
+ {-0.092807, -0.466689, -0.879513},
+ {0.101962, 0.512650, -0.852504},
+ {0.000000, 1.000000, 0.000000},
+ {0.000000, 0.522691, 0.852504},
+ {0.000000, -0.475845, 0.879513},
+ {0.000000, -1.000000, 0.000000},
+ {0.000000, -0.475845, -0.879513},
+ {0.000000, 0.522691, -0.852504},
+ {-0.195074, 0.980773, 0.000000},
+ {-0.101962, 0.512650, 0.852504},
+ {0.092807, -0.466689, 0.879513},
+ {0.195074, -0.980773, 0.000000},
+ {0.092807, -0.466689, -0.879513},
+ {-0.101962, 0.512650, -0.852504},
+ {-0.382672, 0.923856, 0.000000},
+ {-0.200018, 0.482894, 0.852504},
+ {0.182073, -0.439619, 0.879513},
+ {0.382672, -0.923856, 0.000000},
+ {0.182073, -0.439619, -0.879513},
+ {-0.200018, 0.482894, -0.852504},
+ {-0.555559, 0.831446, 0.000000},
+ {-0.290384, 0.434614, 0.852504},
+ {0.264351, -0.395642, 0.879513},
+ {0.555559, -0.831446, 0.000000},
+ {0.264351, -0.395642, -0.879513},
+ {-0.290384, 0.434614, -0.852504},
+ {-0.707083, 0.707083, 0.000000},
+ {-0.369610, 0.369610, 0.852504},
+ {0.336467, -0.336467, 0.879513},
+ {0.707083, -0.707083, 0.000000},
+ {0.336467, -0.336467, -0.879513},
+ {-0.369610, 0.369610, -0.852504},
+ {-0.831446, 0.555559, 0.000000},
+ {-0.434614, 0.290384, 0.852504},
+ {0.395642, -0.264351, 0.879513},
+ {0.831446, -0.555559, 0.000000},
+ {0.395642, -0.264351, -0.879513},
+ {-0.434614, 0.290384, -0.852504},
+ {-0.923856, 0.382672, 0.000000},
+ {-0.482894, 0.200018, 0.852504},
+ {0.439619, -0.182073, 0.879513},
+ {0.923856, -0.382672, 0.000000},
+ {0.439619, -0.182073, -0.879513},
+ {-0.482894, 0.200018, -0.852504},
+ {-0.980773, 0.195074, 0.000000},
+ {-0.512650, 0.101962, 0.852504},
+ {0.466689, -0.092807, 0.879513},
+ {0.980773, -0.195074, 0.000000},
+ {0.466689, -0.092807, -0.879513},
+ {-0.512650, 0.101962, -0.852504},
+ {-1.000000, 0.000000, 0.000000},
+ {-0.522691, 0.000000, 0.852504},
+ {0.475845, 0.000000, 0.879513},
+ {1.000000, 0.000000, 0.000000},
+ {0.475845, 0.000000, -0.879513},
+ {-0.522691, 0.000000, -0.852504},
+ {-0.980773, -0.195074, 0.000000},
+ {-0.512650, -0.101962, 0.852504},
+ {0.466689, 0.092807, 0.879513},
+ {0.980773, 0.195074, 0.000000},
+ {0.466689, 0.092807, -0.879513},
+ {-0.512650, -0.101962, -0.852504},
+ {-0.923856, -0.382672, 0.000000},
+ {-0.482894, -0.200018, 0.852504},
+ {0.439619, 0.182073, 0.879513},
+ {0.923856, 0.382672, 0.000000},
+ {0.439619, 0.182073, -0.879513},
+ {-0.482894, -0.200018, -0.852504},
+ {-0.831446, -0.555559, 0.000000},
+ {-0.434614, -0.290384, 0.852504},
+ {0.395642, 0.264351, 0.879513},
+ {0.831446, 0.555559, 0.000000},
+ {0.395642, 0.264351, -0.879513},
+ {-0.434614, -0.290384, -0.852504},
+ {-0.707083, -0.707083, 0.000000},
+ {-0.369610, -0.369610, 0.852504},
+ {0.336467, 0.336467, 0.879513},
+ {0.707083, 0.707083, 0.000000},
+ {0.336467, 0.336467, -0.879513},
+ {-0.369610, -0.369610, -0.852504},
+ {-0.555559, -0.831446, 0.000000},
+ {-0.290384, -0.434614, 0.852504},
+ {0.264351, 0.395642, 0.879513},
+ {0.555559, 0.831446, 0.000000},
+ {0.264351, 0.395642, -0.879513},
+ {-0.290384, -0.434614, -0.852504},
+ {-0.382672, -0.923856, 0.000000},
+ {-0.200018, -0.482894, 0.852504},
+ {0.182073, 0.439619, 0.879513},
+ {0.382672, 0.923856, 0.000000},
+ {0.182073, 0.439619, -0.879513},
+ {-0.200018, -0.482894, -0.852504},
+ {-0.195074, -0.980773, 0.000000},
+ {-0.101962, -0.512650, 0.852504},
+ {0.092807, 0.466689, 0.879513},
+ {0.195074, 0.980773, 0.000000},
+ {0.092807, 0.466689, -0.879513},
+ {-0.101962, -0.512650, -0.852504},
+ {0.000000, -1.000000, 0.000000},
+ {0.000000, -0.522691, 0.852504},
+ {0.000000, 0.475845, 0.879513},
+ {0.000000, 1.000000, 0.000000},
+ {0.000000, 0.475845, -0.879513},
+ {0.000000, -0.522691, -0.852504},
+ {0.195074, -0.980773, 0.000000},
+ {0.101962, -0.512650, 0.852504},
+ {-0.092807, 0.466689, 0.879513},
+ {-0.195074, 0.980773, 0.000000},
+ {-0.092807, 0.466689, -0.879513},
+ {0.101962, -0.512650, -0.852504},
+ {0.382672, -0.923856, 0.000000},
+ {0.200018, -0.482894, 0.852504},
+ {-0.182073, 0.439619, 0.879513},
+ {-0.382672, 0.923856, 0.000000},
+ {-0.182073, 0.439619, -0.879513},
+ {0.200018, -0.482894, -0.852504},
+ {0.555559, -0.831446, 0.000000},
+ {0.290384, -0.434614, 0.852504},
+ {-0.264351, 0.395642, 0.879513},
+ {-0.555559, 0.831446, 0.000000},
+ {-0.264351, 0.395642, -0.879513},
+ {0.290384, -0.434614, -0.852504},
+ {0.707083, -0.707083, 0.000000},
+ {0.369610, -0.369610, 0.852504},
+ {-0.336467, 0.336467, 0.879513},
+ {-0.707083, 0.707083, 0.000000},
+ {-0.336467, 0.336467, -0.879513},
+ {0.369610, -0.369610, -0.852504},
+ {0.831446, -0.555559, 0.000000},
+ {0.434614, -0.290384, 0.852504},
+ {-0.395642, 0.264351, 0.879513},
+ {-0.831446, 0.555559, 0.000000},
+ {-0.395642, 0.264351, -0.879513},
+ {0.434614, -0.290384, -0.852504},
+ {0.923856, -0.382672, 0.000000},
+ {0.482894, -0.200018, 0.852504},
+ {-0.439619, 0.182073, 0.879513},
+ {-0.923856, 0.382672, 0.000000},
+ {-0.439619, 0.182073, -0.879513},
+ {0.482894, -0.200018, -0.852504},
+ {0.980773, -0.195074, 0.000000},
+ {0.512650, -0.101962, 0.852504},
+ {-0.466689, 0.092807, 0.879513},
+ {-0.980773, 0.195074, 0.000000},
+ {-0.466689, 0.092807, -0.879513},
+ {0.512650, -0.101962, -0.852504},
+};
+
+static const unsigned short indices[] = {
+ 6, 7, 1,
+ 7, 8, 2,
+ 8, 9, 3,
+ 9, 10, 4,
+ 10, 11, 5,
+ 5, 11, 6,
+ 12, 13, 7,
+ 13, 14, 8,
+ 14, 15, 9,
+ 15, 16, 10,
+ 16, 17, 11,
+ 11, 17, 12,
+ 18, 19, 13,
+ 13, 19, 20,
+ 20, 21, 15,
+ 15, 21, 22,
+ 22, 23, 17,
+ 17, 23, 18,
+ 24, 25, 19,
+ 19, 25, 26,
+ 26, 27, 21,
+ 21, 27, 28,
+ 28, 29, 23,
+ 23, 29, 24,
+ 30, 31, 25,
+ 25, 31, 32,
+ 26, 32, 33,
+ 27, 33, 34,
+ 34, 35, 29,
+ 29, 35, 30,
+ 36, 37, 31,
+ 31, 37, 38,
+ 38, 39, 33,
+ 39, 40, 34,
+ 40, 41, 35,
+ 35, 41, 36,
+ 36, 42, 43,
+ 43, 44, 38,
+ 44, 45, 39,
+ 45, 46, 40,
+ 46, 47, 41,
+ 47, 42, 36,
+ 48, 49, 43,
+ 49, 50, 44,
+ 50, 51, 45,
+ 51, 52, 46,
+ 52, 53, 47,
+ 47, 53, 48,
+ 54, 55, 49,
+ 49, 55, 56,
+ 50, 56, 57,
+ 57, 58, 52,
+ 58, 59, 53,
+ 53, 59, 54,
+ 60, 61, 55,
+ 55, 61, 62,
+ 56, 62, 63,
+ 63, 64, 58,
+ 64, 65, 59,
+ 59, 65, 60,
+ 66, 67, 61,
+ 61, 67, 68,
+ 68, 69, 63,
+ 69, 70, 64,
+ 70, 71, 65,
+ 71, 66, 60,
+ 72, 73, 67,
+ 73, 74, 68,
+ 68, 74, 75,
+ 75, 76, 70,
+ 76, 77, 71,
+ 71, 77, 72,
+ 78, 79, 73,
+ 79, 80, 74,
+ 74, 80, 81,
+ 81, 82, 76,
+ 82, 83, 77,
+ 83, 78, 72,
+ 78, 84, 85,
+ 85, 86, 80,
+ 80, 86, 87,
+ 87, 88, 82,
+ 82, 88, 89,
+ 89, 84, 78,
+ 90, 91, 85,
+ 91, 92, 86,
+ 86, 92, 93,
+ 93, 94, 88,
+ 88, 94, 95,
+ 95, 90, 84,
+ 96, 97, 91,
+ 97, 98, 92,
+ 98, 99, 93,
+ 99, 100, 94,
+ 100, 101, 95,
+ 101, 96, 90,
+ 102, 103, 97,
+ 103, 104, 98,
+ 104, 105, 99,
+ 99, 105, 106,
+ 106, 107, 101,
+ 101, 107, 102,
+ 108, 109, 103,
+ 103, 109, 110,
+ 110, 111, 105,
+ 105, 111, 112,
+ 112, 113, 107,
+ 107, 113, 108,
+ 114, 115, 109,
+ 115, 116, 110,
+ 116, 117, 111,
+ 111, 117, 118,
+ 112, 118, 119,
+ 113, 119, 114,
+ 114, 120, 121,
+ 121, 122, 116,
+ 122, 123, 117,
+ 117, 123, 124,
+ 124, 125, 119,
+ 125, 120, 114,
+ 126, 127, 121,
+ 121, 127, 128,
+ 128, 129, 123,
+ 123, 129, 130,
+ 130, 131, 125,
+ 125, 131, 126,
+ 132, 133, 127,
+ 133, 134, 128,
+ 128, 134, 135,
+ 135, 136, 130,
+ 136, 137, 131,
+ 131, 137, 132,
+ 132, 138, 139,
+ 133, 139, 140,
+ 134, 140, 141,
+ 141, 142, 136,
+ 142, 143, 137,
+ 143, 138, 132,
+ 138, 144, 145,
+ 139, 145, 146,
+ 146, 147, 141,
+ 141, 147, 148,
+ 148, 149, 143,
+ 149, 144, 138,
+ 144, 150, 151,
+ 151, 152, 146,
+ 146, 152, 153,
+ 153, 154, 148,
+ 154, 155, 149,
+ 155, 150, 144,
+ 156, 157, 151,
+ 151, 157, 158,
+ 158, 159, 153,
+ 159, 160, 154,
+ 160, 161, 155,
+ 155, 161, 156,
+ 156, 162, 163,
+ 163, 164, 158,
+ 158, 164, 165,
+ 165, 166, 160,
+ 160, 166, 167,
+ 167, 162, 156,
+ 162, 168, 169,
+ 169, 170, 164,
+ 164, 170, 171,
+ 165, 171, 172,
+ 166, 172, 173,
+ 173, 168, 162,
+ 174, 175, 169,
+ 175, 176, 170,
+ 170, 176, 177,
+ 177, 178, 172,
+ 172, 178, 179,
+ 173, 179, 174,
+ 174, 180, 181,
+ 181, 182, 176,
+ 176, 182, 183,
+ 183, 184, 178,
+ 178, 184, 185,
+ 179, 185, 180,
+ 186, 187, 181,
+ 187, 188, 182,
+ 188, 189, 183,
+ 183, 189, 190,
+ 190, 191, 185,
+ 191, 186, 180,
+ 0, 1, 187,
+ 1, 2, 188,
+ 2, 3, 189,
+ 3, 4, 190,
+ 190, 4, 5,
+ 191, 5, 0,
+ 0, 6, 1,
+ 1, 7, 2,
+ 2, 8, 3,
+ 3, 9, 4,
+ 4, 10, 5,
+ 0, 5, 6,
+ 6, 12, 7,
+ 7, 13, 8,
+ 8, 14, 9,
+ 9, 15, 10,
+ 10, 16, 11,
+ 6, 11, 12,
+ 12, 18, 13,
+ 14, 13, 20,
+ 14, 20, 15,
+ 16, 15, 22,
+ 16, 22, 17,
+ 12, 17, 18,
+ 18, 24, 19,
+ 20, 19, 26,
+ 20, 26, 21,
+ 22, 21, 28,
+ 22, 28, 23,
+ 18, 23, 24,
+ 24, 30, 25,
+ 26, 25, 32,
+ 27, 26, 33,
+ 28, 27, 34,
+ 28, 34, 29,
+ 24, 29, 30,
+ 30, 36, 31,
+ 32, 31, 38,
+ 32, 38, 33,
+ 33, 39, 34,
+ 34, 40, 35,
+ 30, 35, 36,
+ 37, 36, 43,
+ 37, 43, 38,
+ 38, 44, 39,
+ 39, 45, 40,
+ 40, 46, 41,
+ 41, 47, 36,
+ 42, 48, 43,
+ 43, 49, 44,
+ 44, 50, 45,
+ 45, 51, 46,
+ 46, 52, 47,
+ 42, 47, 48,
+ 48, 54, 49,
+ 50, 49, 56,
+ 51, 50, 57,
+ 51, 57, 52,
+ 52, 58, 53,
+ 48, 53, 54,
+ 54, 60, 55,
+ 56, 55, 62,
+ 57, 56, 63,
+ 57, 63, 58,
+ 58, 64, 59,
+ 54, 59, 60,
+ 60, 66, 61,
+ 62, 61, 68,
+ 62, 68, 63,
+ 63, 69, 64,
+ 64, 70, 65,
+ 65, 71, 60,
+ 66, 72, 67,
+ 67, 73, 68,
+ 69, 68, 75,
+ 69, 75, 70,
+ 70, 76, 71,
+ 66, 71, 72,
+ 72, 78, 73,
+ 73, 79, 74,
+ 75, 74, 81,
+ 75, 81, 76,
+ 76, 82, 77,
+ 77, 83, 72,
+ 79, 78, 85,
+ 79, 85, 80,
+ 81, 80, 87,
+ 81, 87, 82,
+ 83, 82, 89,
+ 83, 89, 78,
+ 84, 90, 85,
+ 85, 91, 86,
+ 87, 86, 93,
+ 87, 93, 88,
+ 89, 88, 95,
+ 89, 95, 84,
+ 90, 96, 91,
+ 91, 97, 92,
+ 92, 98, 93,
+ 93, 99, 94,
+ 94, 100, 95,
+ 95, 101, 90,
+ 96, 102, 97,
+ 97, 103, 98,
+ 98, 104, 99,
+ 100, 99, 106,
+ 100, 106, 101,
+ 96, 101, 102,
+ 102, 108, 103,
+ 104, 103, 110,
+ 104, 110, 105,
+ 106, 105, 112,
+ 106, 112, 107,
+ 102, 107, 108,
+ 108, 114, 109,
+ 109, 115, 110,
+ 110, 116, 111,
+ 112, 111, 118,
+ 113, 112, 119,
+ 108, 113, 114,
+ 115, 114, 121,
+ 115, 121, 116,
+ 116, 122, 117,
+ 118, 117, 124,
+ 118, 124, 119,
+ 119, 125, 114,
+ 120, 126, 121,
+ 122, 121, 128,
+ 122, 128, 123,
+ 124, 123, 130,
+ 124, 130, 125,
+ 120, 125, 126,
+ 126, 132, 127,
+ 127, 133, 128,
+ 129, 128, 135,
+ 129, 135, 130,
+ 130, 136, 131,
+ 126, 131, 132,
+ 133, 132, 139,
+ 134, 133, 140,
+ 135, 134, 141,
+ 135, 141, 136,
+ 136, 142, 137,
+ 137, 143, 132,
+ 139, 138, 145,
+ 140, 139, 146,
+ 140, 146, 141,
+ 142, 141, 148,
+ 142, 148, 143,
+ 143, 149, 138,
+ 145, 144, 151,
+ 145, 151, 146,
+ 147, 146, 153,
+ 147, 153, 148,
+ 148, 154, 149,
+ 149, 155, 144,
+ 150, 156, 151,
+ 152, 151, 158,
+ 152, 158, 153,
+ 153, 159, 154,
+ 154, 160, 155,
+ 150, 155, 156,
+ 157, 156, 163,
+ 157, 163, 158,
+ 159, 158, 165,
+ 159, 165, 160,
+ 161, 160, 167,
+ 161, 167, 156,
+ 163, 162, 169,
+ 163, 169, 164,
+ 165, 164, 171,
+ 166, 165, 172,
+ 167, 166, 173,
+ 167, 173, 162,
+ 168, 174, 169,
+ 169, 175, 170,
+ 171, 170, 177,
+ 171, 177, 172,
+ 173, 172, 179,
+ 168, 173, 174,
+ 175, 174, 181,
+ 175, 181, 176,
+ 177, 176, 183,
+ 177, 183, 178,
+ 179, 178, 185,
+ 174, 179, 180,
+ 180, 186, 181,
+ 181, 187, 182,
+ 182, 188, 183,
+ 184, 183, 190,
+ 184, 190, 185,
+ 185, 191, 180,
+ 186, 0, 187,
+ 187, 1, 188,
+ 188, 2, 189,
+ 189, 3, 190,
+ 191, 190, 5,
+ 186, 191, 0,
+};
+
+ManipulatorGeomInfo wm_manipulator_geom_data_dial = {
+ .nverts = 192,
+ .ntris = 384,
+ .verts = verts,
+ .normals = normals,
+ .indices = indices,
+};
diff --git a/source/blender/editors/manipulator_library/manipulator_draw_utils.c b/source/blender/editors/manipulator_library/manipulator_draw_utils.c
new file mode 100644
index 00000000000..430841311aa
--- /dev/null
+++ b/source/blender/editors/manipulator_library/manipulator_draw_utils.c
@@ -0,0 +1,131 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2014 Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): Blender Foundation
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file manipulator_draw_utils.c
+ * \ingroup wm
+ */
+
+#include "BLI_listbase.h"
+#include "BLI_ghash.h"
+#include "BLI_math.h"
+#include "BLI_string.h"
+#include "BLI_string_utils.h"
+
+#include "BKE_context.h"
+
+#include "ED_screen.h"
+#include "ED_view3d.h"
+
+#include "GPU_batch.h"
+#include "GPU_glew.h"
+#include "GPU_immediate.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "RNA_access.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+/* only for own init/exit calls (wm_manipulatortype_init/wm_manipulatortype_free) */
+#include "wm.h"
+
+/* own includes */
+#include "manipulator_library_intern.h"
+
+/**
+ * Main draw call for ManipulatorGeomInfo data
+ */
+void wm_manipulator_geometryinfo_draw(const ManipulatorGeomInfo *info, const bool select, const float color[4])
+{
+ /* TODO store the Batches inside the ManipulatorGeomInfo and updated it when geom changes
+ * So we don't need to re-created and discard it every time */
+
+ const bool use_lighting = true || (!select && ((U.manipulator_flag & USER_MANIPULATOR_SHADED) != 0));
+ Gwn_VertBuf *vbo;
+ Gwn_IndexBuf *el;
+ Gwn_Batch *batch;
+ Gwn_IndexBufBuilder elb = {0};
+
+ Gwn_VertFormat format = {0};
+ uint pos_id = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ uint nor_id;
+
+ if (use_lighting) {
+ nor_id = GWN_vertformat_attr_add(&format, "nor", GWN_COMP_I16, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
+ }
+
+ /* Elements */
+ GWN_indexbuf_init(&elb, GWN_PRIM_TRIS, info->ntris, info->nverts);
+ for (int i = 0; i < info->ntris; ++i) {
+ const unsigned short *idx = &info->indices[i * 3];
+ GWN_indexbuf_add_tri_verts(&elb, idx[0], idx[1], idx[2]);
+ }
+ el = GWN_indexbuf_build(&elb);
+
+ vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, info->nverts);
+
+ GWN_vertbuf_attr_fill(vbo, pos_id, info->verts);
+
+ if (use_lighting) {
+ /* Normals are expected to be smooth. */
+ GWN_vertbuf_attr_fill(vbo, nor_id, info->normals);
+ }
+
+ batch = GWN_batch_create_ex(GWN_PRIM_TRIS, vbo, el, GWN_BATCH_OWNS_VBO | GWN_BATCH_OWNS_INDEX);
+ GWN_batch_program_set_builtin(batch, GPU_SHADER_3D_UNIFORM_COLOR);
+
+ GWN_batch_uniform_4fv(batch, "color", color);
+
+ /* We may want to re-visit this, for now disable
+ * since it causes issues leaving the GL state modified. */
+#if 0
+ glEnable(GL_CULL_FACE);
+ glEnable(GL_DEPTH_TEST);
+#endif
+
+ GWN_batch_draw(batch);
+
+#if 0
+ glDisable(GL_DEPTH_TEST);
+ glDisable(GL_CULL_FACE);
+#endif
+
+
+ GWN_batch_discard(batch);
+}
+
+void wm_manipulator_vec_draw(
+ const float color[4], const float (*verts)[3], uint vert_count,
+ uint pos, uint primitive_type)
+{
+ immUniformColor4fv(color);
+ immBegin(primitive_type, vert_count);
+ for (int i = 0; i < vert_count; i++) {
+ immVertex3fv(pos, verts[i]);
+ }
+ immEnd();
+}
diff --git a/source/blender/editors/manipulator_library/manipulator_geometry.h b/source/blender/editors/manipulator_library/manipulator_geometry.h
new file mode 100644
index 00000000000..2083f9d4d31
--- /dev/null
+++ b/source/blender/editors/manipulator_library/manipulator_geometry.h
@@ -0,0 +1,54 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2016 Blender Foundation.
+ * All rights reserved.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file manipulator_geometry.h
+ * \ingroup wm
+ *
+ * \name Manipulator Geometry
+ *
+ * \brief Prototypes for arrays defining the manipulator geometry. The actual definitions can be found in files usually
+ * called geom_xxx_manipulator.c
+ */
+
+
+#ifndef __MANIPULATOR_GEOMETRY_H__
+#define __MANIPULATOR_GEOMETRY_H__
+
+typedef struct ManipulatorGeomInfo {
+ int nverts;
+ int ntris;
+ const float (*verts)[3];
+ const float (*normals)[3];
+ const unsigned short *indices;
+} ManipulatorGeomInfo;
+
+/* arrow manipulator */
+extern ManipulatorGeomInfo wm_manipulator_geom_data_arrow;
+
+/* cube manipulator */
+extern ManipulatorGeomInfo wm_manipulator_geom_data_cube;
+
+/* dial manipulator */
+extern ManipulatorGeomInfo wm_manipulator_geom_data_dial;
+
+#endif /* __MANIPULATOR_GEOMETRY_H__ */
diff --git a/source/blender/editors/manipulator_library/manipulator_library_intern.h b/source/blender/editors/manipulator_library/manipulator_library_intern.h
new file mode 100644
index 00000000000..92ca195f21d
--- /dev/null
+++ b/source/blender/editors/manipulator_library/manipulator_library_intern.h
@@ -0,0 +1,108 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2016 Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file manipulator_library_intern.h
+ * \ingroup wm
+ */
+
+#ifndef __MANIPULATOR_LIBRARY_INTERN_H__
+#define __MANIPULATOR_LIBRARY_INTERN_H__
+
+/* distance around which manipulators respond to input (and get highlighted) */
+#define MANIPULATOR_HOTSPOT 14.0f
+
+/**
+ * Data for common interactions. Used in manipulator_library_utils.c functions.
+ */
+typedef struct ManipulatorCommonData {
+ int flag;
+
+ float range_fac; /* factor for arrow min/max distance */
+ float offset;
+
+ /* property range for constrained manipulators */
+ float range;
+ /* min/max value for constrained manipulators */
+ float min, max;
+} ManipulatorCommonData;
+
+typedef struct ManipulatorInteraction {
+ float init_value; /* initial property value */
+ float init_mval[2];
+ float init_offset;
+ float init_matrix_final[4][4];
+ float init_matrix_basis[4][4];
+
+ /* offset of last handling step */
+ float prev_offset;
+ /* Total offset added by precision tweaking.
+ * Needed to allow toggling precision on/off without causing jumps */
+ float precision_offset;
+} ManipulatorInteraction;
+
+/* ManipulatorCommonData->flag */
+enum {
+ MANIPULATOR_CUSTOM_RANGE_SET = (1 << 0),
+};
+
+
+float manipulator_offset_from_value(
+ ManipulatorCommonData *data, const float value,
+ const bool constrained, const bool inverted);
+float manipulator_value_from_offset(
+ ManipulatorCommonData *data, ManipulatorInteraction *inter, const float offset,
+ const bool constrained, const bool inverted, const bool use_precision);
+
+void manipulator_property_data_update(
+ struct wmManipulator *mpr, ManipulatorCommonData *data, wmManipulatorProperty *mpr_prop,
+ const bool constrained, const bool inverted);
+
+void manipulator_property_value_reset(
+ bContext *C, const struct wmManipulator *mpr, ManipulatorInteraction *inter, wmManipulatorProperty *mpr_prop);
+
+
+/* -------------------------------------------------------------------- */
+
+void manipulator_color_get(
+ const struct wmManipulator *mpr, const bool highlight,
+ float r_color[4]);
+
+bool manipulator_window_project_2d(
+ bContext *C, const struct wmManipulator *mpr, const float mval[2], int axis, bool use_offset,
+ float r_co[2]);
+
+/* -------------------------------------------------------------------- */
+/* Manipulator drawing */
+
+#include "manipulator_geometry.h"
+
+void wm_manipulator_geometryinfo_draw(const struct ManipulatorGeomInfo *info, const bool select, const float color[4]);
+void wm_manipulator_vec_draw(
+ const float color[4], const float (*verts)[3], uint vert_count,
+ uint pos, uint primitive_type);
+
+
+#endif /* __MANIPULATOR_LIBRARY_INTERN_H__ */
+
diff --git a/source/blender/editors/manipulator_library/manipulator_library_presets.c b/source/blender/editors/manipulator_library/manipulator_library_presets.c
new file mode 100644
index 00000000000..7b8d2104992
--- /dev/null
+++ b/source/blender/editors/manipulator_library/manipulator_library_presets.c
@@ -0,0 +1,154 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/editors/manipulator_library/manipulator_library_presets.c
+ * \ingroup wm
+ *
+ * \name Manipulator Lib Presets
+ *
+ * \brief Preset shapes that can be drawn from any manipulator type.
+ */
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_math.h"
+
+#include "DNA_view3d_types.h"
+#include "DNA_object_types.h"
+
+#include "BKE_context.h"
+
+#include "BIF_gl.h"
+
+#include "GPU_draw.h"
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+#include "GPU_matrix.h"
+#include "GPU_select.h"
+
+#include "DEG_depsgraph.h"
+
+#include "RNA_access.h"
+
+#include "WM_types.h"
+#include "WM_api.h"
+
+#include "ED_view3d.h"
+#include "ED_screen.h"
+
+/* own includes */
+#include "ED_manipulator_library.h" /* own include */
+#include "manipulator_library_intern.h" /* own include */
+
+/* TODO, this is to be used by RNA. might move to ED_manipulator_library */
+
+/**
+ * Given a single axis, orient the matrix to a different direction.
+ */
+static void single_axis_convert(
+ int src_axis, float src_mat[4][4],
+ int dst_axis, float dst_mat[4][4])
+{
+ copy_m4_m4(dst_mat, src_mat);
+ if (src_axis == dst_axis) {
+ return;
+ }
+
+ float rotmat[3][3];
+ mat3_from_axis_conversion_single(src_axis, dst_axis, rotmat);
+ transpose_m3(rotmat);
+ mul_m4_m4m3(dst_mat, src_mat, rotmat);
+}
+
+/**
+ * Use for all geometry.
+ */
+static void ed_manipulator_draw_preset_geometry(
+ const struct wmManipulator *mpr, float mat[4][4], int select_id,
+ const ManipulatorGeomInfo *info)
+{
+ const bool is_select = (select_id != -1);
+ const bool is_highlight = is_select && (mpr->state & WM_MANIPULATOR_STATE_HIGHLIGHT) != 0;
+
+ float color[4];
+ manipulator_color_get(mpr, is_highlight, color);
+
+ if (is_select) {
+ GPU_select_load_id(select_id);
+ }
+
+ gpuPushMatrix();
+ gpuMultMatrix(mat);
+ wm_manipulator_geometryinfo_draw(info, is_select, color);
+ gpuPopMatrix();
+
+ if (is_select) {
+ GPU_select_load_id(-1);
+ }
+}
+
+void ED_manipulator_draw_preset_box(
+ const struct wmManipulator *mpr, float mat[4][4], int select_id)
+{
+ ed_manipulator_draw_preset_geometry(mpr, mat, select_id, &wm_manipulator_geom_data_cube);
+}
+
+void ED_manipulator_draw_preset_arrow(
+ const struct wmManipulator *mpr, float mat[4][4], int axis, int select_id)
+{
+ float mat_rotate[4][4];
+ single_axis_convert(OB_POSZ, mat, axis, mat_rotate);
+ ed_manipulator_draw_preset_geometry(mpr, mat_rotate, select_id, &wm_manipulator_geom_data_arrow);
+}
+
+void ED_manipulator_draw_preset_circle(
+ const struct wmManipulator *mpr, float mat[4][4], int axis, int select_id)
+{
+ float mat_rotate[4][4];
+ single_axis_convert(OB_POSZ, mat, axis, mat_rotate);
+ ed_manipulator_draw_preset_geometry(mpr, mat_rotate, select_id, &wm_manipulator_geom_data_dial);
+}
+
+void ED_manipulator_draw_preset_facemap(
+ const bContext *C, const struct wmManipulator *mpr, struct Scene *scene, Object *ob, const int facemap, int select_id)
+{
+ const bool is_select = (select_id != -1);
+ const bool is_highlight = is_select && (mpr->state & WM_MANIPULATOR_STATE_HIGHLIGHT) != 0;
+
+ float color[4];
+ manipulator_color_get(mpr, is_highlight, color);
+
+ if (is_select) {
+ GPU_select_load_id(select_id);
+ }
+
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
+ gpuPushMatrix();
+ gpuMultMatrix(ob->obmat);
+ ED_draw_object_facemap(&eval_ctx, scene, ob, color, facemap);
+ gpuPopMatrix();
+
+ if (is_select) {
+ GPU_select_load_id(-1);
+ }
+}
+
diff --git a/source/blender/editors/manipulator_library/manipulator_library_utils.c b/source/blender/editors/manipulator_library/manipulator_library_utils.c
new file mode 100644
index 00000000000..12f9d1b48d3
--- /dev/null
+++ b/source/blender/editors/manipulator_library/manipulator_library_utils.c
@@ -0,0 +1,221 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2015 Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file manipulator_library_utils.c
+ * \ingroup wm
+ *
+ * \name Manipulator Library Utilities
+ *
+ * \brief This file contains functions for common behaviors of manipulators.
+ */
+
+#include "BLI_math.h"
+#include "BLI_listbase.h"
+
+#include "DNA_view3d_types.h"
+#include "DNA_screen_types.h"
+
+#include "BKE_context.h"
+
+#include "RNA_access.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "ED_view3d.h"
+
+/* own includes */
+#include "manipulator_library_intern.h"
+
+/* factor for precision tweaking */
+#define MANIPULATOR_PRECISION_FAC 0.05f
+
+
+BLI_INLINE float manipulator_offset_from_value_constr(
+ const float range_fac, const float min, const float range, const float value,
+ const bool inverted)
+{
+ return inverted ? (range_fac * (min + range - value) / range) : (range_fac * (value / range));
+}
+
+BLI_INLINE float manipulator_value_from_offset_constr(
+ const float range_fac, const float min, const float range, const float value,
+ const bool inverted)
+{
+ return inverted ? (min + range - (value * range / range_fac)) : (value * range / range_fac);
+}
+
+float manipulator_offset_from_value(
+ ManipulatorCommonData *data, const float value, const bool constrained, const bool inverted)
+{
+ if (constrained)
+ return manipulator_offset_from_value_constr(data->range_fac, data->min, data->range, value, inverted);
+
+ return value;
+}
+
+float manipulator_value_from_offset(
+ ManipulatorCommonData *data, ManipulatorInteraction *inter, const float offset,
+ const bool constrained, const bool inverted, const bool use_precision)
+{
+ const float max = data->min + data->range;
+
+ if (use_precision) {
+ /* add delta offset of this step to total precision_offset */
+ inter->precision_offset += offset - inter->prev_offset;
+ }
+ inter->prev_offset = offset;
+
+ float ofs_new = inter->init_offset + offset - inter->precision_offset * (1.0f - MANIPULATOR_PRECISION_FAC);
+ float value;
+
+ if (constrained) {
+ value = manipulator_value_from_offset_constr(data->range_fac, data->min, data->range, ofs_new, inverted);
+ }
+ else {
+ value = ofs_new;
+ }
+
+ /* clamp to custom range */
+ if (data->flag & MANIPULATOR_CUSTOM_RANGE_SET) {
+ CLAMP(value, data->min, max);
+ }
+
+ return value;
+}
+
+void manipulator_property_data_update(
+ wmManipulator *mpr, ManipulatorCommonData *data, wmManipulatorProperty *mpr_prop,
+ const bool constrained, const bool inverted)
+{
+ if (mpr_prop->custom_func.value_get_fn != NULL) {
+ /* pass */
+ }
+ else if (mpr_prop->prop != NULL) {
+ /* pass */
+ }
+ else {
+ data->offset = 0.0f;
+ return;
+ }
+
+ float value = WM_manipulator_target_property_value_get(mpr, mpr_prop);
+
+ if (constrained) {
+ if ((data->flag & MANIPULATOR_CUSTOM_RANGE_SET) == 0) {
+ float range[2];
+ if (WM_manipulator_target_property_range_get(mpr, mpr_prop, range)) {
+ data->range = range[1] - range[0];
+ data->min = range[0];
+ }
+ else {
+ BLI_assert(0);
+ }
+ }
+ data->offset = manipulator_offset_from_value_constr(data->range_fac, data->min, data->range, value, inverted);
+ }
+ else {
+ data->offset = value;
+ }
+}
+
+void manipulator_property_value_reset(
+ bContext *C, const wmManipulator *mpr, ManipulatorInteraction *inter,
+ wmManipulatorProperty *mpr_prop)
+{
+ WM_manipulator_target_property_value_set(C, mpr, mpr_prop, inter->init_value);
+}
+
+/* -------------------------------------------------------------------- */
+
+void manipulator_color_get(
+ const wmManipulator *mpr, const bool highlight,
+ float r_col[4])
+{
+ if (highlight && !(mpr->flag & WM_MANIPULATOR_DRAW_HOVER)) {
+ copy_v4_v4(r_col, mpr->color_hi);
+ }
+ else {
+ copy_v4_v4(r_col, mpr->color);
+ }
+}
+
+/* -------------------------------------------------------------------- */
+
+/**
+ * Takes mouse coordinates and returns them in relation to the manipulator.
+ * Both 2D & 3D supported, use so we can use 2D manipulators in the 3D view.
+ */
+bool manipulator_window_project_2d(
+ bContext *C, const struct wmManipulator *mpr, const float mval[2], int axis, bool use_offset,
+ float r_co[2])
+{
+ float mat[4][4];
+ {
+ float mat_identity[4][4];
+ struct WM_ManipulatorMatrixParams params = {NULL};
+ if (use_offset == false) {
+ unit_m4(mat_identity);
+ params.matrix_offset = mat_identity;
+ }
+ WM_manipulator_calc_matrix_final_params(mpr, &params, mat);
+ }
+
+ /* rotate mouse in relation to the center and relocate it */
+ if (mpr->parent_mgroup->type->flag & WM_MANIPULATORGROUPTYPE_3D) {
+ /* For 3d views, transform 2D mouse pos onto plane. */
+ View3D *v3d = CTX_wm_view3d(C);
+ ARegion *ar = CTX_wm_region(C);
+
+ float plane[4];
+
+ plane_from_point_normal_v3(plane, mat[3], mat[2]);
+
+ float ray_origin[3], ray_direction[3];
+
+ if (ED_view3d_win_to_ray(CTX_data_depsgraph(C), ar, v3d, mval, ray_origin, ray_direction, false)) {
+ float lambda;
+ if (isect_ray_plane_v3(ray_origin, ray_direction, plane, &lambda, true)) {
+ float co[3];
+ madd_v3_v3v3fl(co, ray_origin, ray_direction, lambda);
+ float imat[4][4];
+ invert_m4_m4(imat, mat);
+ mul_m4_v3(imat, co);
+ r_co[0] = co[(axis + 1) % 3];
+ r_co[1] = co[(axis + 2) % 3];
+ return true;
+ }
+ }
+ return false;
+ }
+ else {
+ float co[3] = {mval[0], mval[1], 0.0f};
+ float imat[4][4];
+ invert_m4_m4(imat, mat);
+ mul_m4_v3(imat, co);
+ copy_v2_v2(r_co, co);
+ return true;
+ }
+}
diff --git a/source/blender/editors/manipulator_library/manipulator_types/arrow2d_manipulator.c b/source/blender/editors/manipulator_library/manipulator_types/arrow2d_manipulator.c
new file mode 100644
index 00000000000..749e92e25fb
--- /dev/null
+++ b/source/blender/editors/manipulator_library/manipulator_types/arrow2d_manipulator.c
@@ -0,0 +1,224 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2016 Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file arrow2d_manipulator.c
+ * \ingroup wm
+ *
+ * \name 2D Arrow Manipulator
+ *
+ * \brief Simple arrow manipulator which is dragged into a certain direction.
+ */
+
+#include "BLI_listbase.h"
+#include "BLI_math.h"
+#include "BLI_rect.h"
+
+#include "DNA_windowmanager_types.h"
+
+#include "BKE_context.h"
+
+#include "BIF_gl.h"
+
+#include "GPU_draw.h"
+#include "GPU_immediate.h"
+#include "GPU_matrix.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "RNA_access.h"
+#include "RNA_define.h"
+
+#include "WM_types.h"
+
+#include "ED_screen.h"
+#include "ED_manipulator_library.h"
+
+/* own includes */
+#include "WM_api.h"
+
+#include "../manipulator_library_intern.h"
+
+static void arrow2d_draw_geom(wmManipulator *mpr, const float matrix[4][4], const float color[4])
+{
+ const float size = 0.11f;
+ const float size_breadth = size / 2.0f;
+ const float size_length = size * 1.7f;
+ /* Subtract the length so the arrow fits in the hotspot. */
+ const float arrow_length = RNA_float_get(mpr->ptr, "length") - size_length;
+ const float arrow_angle = RNA_float_get(mpr->ptr, "angle");
+
+ uint pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ gpuPushMatrix();
+ gpuMultMatrix(matrix);
+ gpuRotate2D(RAD2DEGF(arrow_angle));
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ immUniformColor4fv(color);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2f(pos, 0.0f, 0.0f);
+ immVertex2f(pos, 0.0f, arrow_length);
+ immEnd();
+
+ immBegin(GWN_PRIM_TRIS, 3);
+ immVertex2f(pos, size_breadth, arrow_length);
+ immVertex2f(pos, -size_breadth, arrow_length);
+ immVertex2f(pos, 0.0f, arrow_length + size_length);
+ immEnd();
+
+ immUnbindProgram();
+
+ gpuPopMatrix();
+}
+
+static void manipulator_arrow2d_draw(const bContext *UNUSED(C), wmManipulator *mpr)
+{
+ float color[4];
+
+ float matrix_final[4][4];
+
+ manipulator_color_get(mpr, mpr->state & WM_MANIPULATOR_STATE_HIGHLIGHT, color);
+
+ glLineWidth(mpr->line_width);
+
+ WM_manipulator_calc_matrix_final(mpr, matrix_final);
+
+ glEnable(GL_BLEND);
+ arrow2d_draw_geom(mpr, matrix_final, color);
+ glDisable(GL_BLEND);
+
+ if (mpr->interaction_data) {
+ ManipulatorInteraction *inter = mpr->interaction_data;
+
+ glEnable(GL_BLEND);
+ arrow2d_draw_geom(mpr, inter->init_matrix_final, (const float[4]){0.5f, 0.5f, 0.5f, 0.5f});
+ glDisable(GL_BLEND);
+ }
+}
+
+static void manipulator_arrow2d_setup(wmManipulator *mpr)
+{
+ mpr->flag |= WM_MANIPULATOR_DRAW_MODAL;
+}
+
+static int manipulator_arrow2d_invoke(
+ bContext *UNUSED(C), wmManipulator *mpr, const wmEvent *UNUSED(event))
+{
+ ManipulatorInteraction *inter = MEM_callocN(sizeof(ManipulatorInteraction), __func__);
+
+ copy_m4_m4(inter->init_matrix_basis, mpr->matrix_basis);
+ WM_manipulator_calc_matrix_final(mpr, inter->init_matrix_final);
+
+ mpr->interaction_data = inter;
+
+ return OPERATOR_RUNNING_MODAL;
+}
+
+static int manipulator_arrow2d_test_select(
+ bContext *UNUSED(C), wmManipulator *mpr, const wmEvent *event)
+{
+ const float mval[2] = {event->mval[0], event->mval[1]};
+ const float arrow_length = RNA_float_get(mpr->ptr, "length");
+ const float arrow_angle = RNA_float_get(mpr->ptr, "angle");
+ const float line_len = arrow_length * mpr->scale_final;
+ float mval_local[2];
+
+ copy_v2_v2(mval_local, mval);
+ sub_v2_v2(mval_local, mpr->matrix_basis[3]);
+
+ float line[2][2];
+ line[0][0] = line[0][1] = line[1][0] = 0.0f;
+ line[1][1] = line_len;
+
+ /* rotate only if needed */
+ if (arrow_angle != 0.0f) {
+ float rot_point[2];
+ copy_v2_v2(rot_point, line[1]);
+ rotate_v2_v2fl(line[1], rot_point, arrow_angle);
+ }
+
+ /* arrow line intersection check */
+ float isect_1[2], isect_2[2];
+ const int isect = isect_line_sphere_v2(
+ line[0], line[1], mval_local, MANIPULATOR_HOTSPOT + mpr->line_width * 0.5f,
+ isect_1, isect_2);
+
+ if (isect > 0) {
+ float line_ext[2][2]; /* extended line for segment check including hotspot */
+ copy_v2_v2(line_ext[0], line[0]);
+ line_ext[1][0] = line[1][0] + MANIPULATOR_HOTSPOT * ((line[1][0] - line[0][0]) / line_len);
+ line_ext[1][1] = line[1][1] + MANIPULATOR_HOTSPOT * ((line[1][1] - line[0][1]) / line_len);
+
+ const float lambda_1 = line_point_factor_v2(isect_1, line_ext[0], line_ext[1]);
+ if (isect == 1) {
+ if (IN_RANGE_INCL(lambda_1, 0.0f, 1.0f)) {
+ return 0;
+ }
+ }
+ else {
+ BLI_assert(isect == 2);
+ const float lambda_2 = line_point_factor_v2(isect_2, line_ext[0], line_ext[1]);
+ if (IN_RANGE_INCL(lambda_1, 0.0f, 1.0f) && IN_RANGE_INCL(lambda_2, 0.0f, 1.0f)) {
+ return 0;
+ }
+ }
+ }
+
+ return -1;
+}
+
+/* -------------------------------------------------------------------- */
+/** \name 2D Arrow Manipulator API
+ *
+ * \{ */
+
+static void MANIPULATOR_WT_arrow_2d(wmManipulatorType *wt)
+{
+ /* identifiers */
+ wt->idname = "MANIPULATOR_WT_arrow_2d";
+
+ /* api callbacks */
+ wt->draw = manipulator_arrow2d_draw;
+ wt->setup = manipulator_arrow2d_setup;
+ wt->invoke = manipulator_arrow2d_invoke;
+ wt->test_select = manipulator_arrow2d_test_select;
+
+ wt->struct_size = sizeof(wmManipulator);
+
+ /* rna */
+ RNA_def_float(wt->srna, "length", 1.0f, 0.0f, FLT_MAX, "Arrow Line Length", "", 0.0f, FLT_MAX);
+ RNA_def_float_rotation(
+ wt->srna, "angle", 0, NULL, DEG2RADF(-360.0f), DEG2RADF(360.0f),
+ "Roll", "", DEG2RADF(-360.0f), DEG2RADF(360.0f));
+}
+
+void ED_manipulatortypes_arrow_2d(void)
+{
+ WM_manipulatortype_append(MANIPULATOR_WT_arrow_2d);
+}
+
+/** \} */
diff --git a/source/blender/editors/manipulator_library/manipulator_types/arrow3d_manipulator.c b/source/blender/editors/manipulator_library/manipulator_types/arrow3d_manipulator.c
new file mode 100644
index 00000000000..cc8fd72aa03
--- /dev/null
+++ b/source/blender/editors/manipulator_library/manipulator_types/arrow3d_manipulator.c
@@ -0,0 +1,478 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2014 Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): Blender Foundation
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file arrow3d_manipulator.c
+ * \ingroup wm
+ *
+ * \name Arrow Manipulator
+ *
+ * 3D Manipulator
+ *
+ * \brief Simple arrow manipulator which is dragged into a certain direction.
+ * The arrow head can have varying shapes, e.g. cone, box, etc.
+ *
+ * - `matrix[0]` is derived from Y and Z.
+ * - `matrix[1]` is 'up' for manipulator types that have an up.
+ * - `matrix[2]` is the arrow direction (for all arrowes).
+ */
+
+#include "BIF_gl.h"
+
+#include "BLI_math.h"
+
+#include "DNA_view3d_types.h"
+
+#include "BKE_context.h"
+
+#include "GPU_draw.h"
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+#include "GPU_matrix.h"
+#include "GPU_select.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "RNA_access.h"
+#include "RNA_define.h"
+
+#include "WM_types.h"
+#include "WM_api.h"
+
+#include "ED_view3d.h"
+#include "ED_screen.h"
+#include "ED_manipulator_library.h"
+
+/* own includes */
+#include "../manipulator_geometry.h"
+#include "../manipulator_library_intern.h"
+
+/* to use custom arrows exported to geom_arrow_manipulator.c */
+//#define USE_MANIPULATOR_CUSTOM_ARROWS
+
+typedef struct ArrowManipulator3D {
+ wmManipulator manipulator;
+ ManipulatorCommonData data;
+} ArrowManipulator3D;
+
+
+/* -------------------------------------------------------------------- */
+
+static void manipulator_arrow_matrix_basis_get(const wmManipulator *mpr, float r_matrix[4][4])
+{
+ ArrowManipulator3D *arrow = (ArrowManipulator3D *)mpr;
+
+ copy_m4_m4(r_matrix, arrow->manipulator.matrix_basis);
+ madd_v3_v3fl(r_matrix[3], arrow->manipulator.matrix_basis[2], arrow->data.offset);
+}
+
+static void arrow_draw_geom(const ArrowManipulator3D *arrow, const bool select, const float color[4])
+{
+ uint pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ bool unbind_shader = true;
+ const int draw_style = RNA_enum_get(arrow->manipulator.ptr, "draw_style");
+
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+
+ if (draw_style == ED_MANIPULATOR_ARROW_STYLE_CROSS) {
+ immUniformColor4fv(color);
+
+ immBegin(GWN_PRIM_LINES, 4);
+ immVertex3f(pos, -1.0f, 0.0f, 0.0f);
+ immVertex3f(pos, 1.0f, 0.0f, 0.0f);
+ immVertex3f(pos, 0.0f, -1.0f, 0.0f);
+ immVertex3f(pos, 0.0f, 1.0f, 0.0f);
+ immEnd();
+ }
+ else if (draw_style == ED_MANIPULATOR_ARROW_STYLE_CONE) {
+ float aspect[2];
+ RNA_float_get_array(arrow->manipulator.ptr, "aspect", aspect);
+ const float unitx = aspect[0];
+ const float unity = aspect[1];
+ const float vec[4][3] = {
+ {-unitx, -unity, 0},
+ { unitx, -unity, 0},
+ { unitx, unity, 0},
+ {-unitx, unity, 0},
+ };
+
+ glLineWidth(arrow->manipulator.line_width);
+ wm_manipulator_vec_draw(color, vec, ARRAY_SIZE(vec), pos, GWN_PRIM_LINE_LOOP);
+ }
+ else {
+#ifdef USE_MANIPULATOR_CUSTOM_ARROWS
+ wm_manipulator_geometryinfo_draw(&wm_manipulator_geom_data_arrow, select, color);
+#else
+ const float arrow_length = RNA_float_get(arrow->manipulator.ptr, "length");
+
+ const float vec[2][3] = {
+ {0.0f, 0.0f, 0.0f},
+ {0.0f, 0.0f, arrow_length},
+ };
+
+ glLineWidth(arrow->manipulator.line_width);
+ wm_manipulator_vec_draw(color, vec, ARRAY_SIZE(vec), pos, GWN_PRIM_LINE_STRIP);
+
+
+ /* *** draw arrow head *** */
+
+ gpuPushMatrix();
+
+ if (draw_style == ED_MANIPULATOR_ARROW_STYLE_BOX) {
+ const float size = 0.05f;
+
+ /* translate to line end with some extra offset so box starts exactly where line ends */
+ gpuTranslate3f(0.0f, 0.0f, arrow_length + size);
+ /* scale down to box size */
+ gpuScale3f(size, size, size);
+
+ /* draw cube */
+ immUnbindProgram();
+ unbind_shader = false;
+ wm_manipulator_geometryinfo_draw(&wm_manipulator_geom_data_cube, select, color);
+ }
+ else {
+ BLI_assert(draw_style == ED_MANIPULATOR_ARROW_STYLE_NORMAL);
+
+ const float len = 0.25f;
+ const float width = 0.06f;
+ const bool use_lighting = (!select && ((U.manipulator_flag & USER_MANIPULATOR_SHADED) != 0));
+
+ /* translate to line end */
+ gpuTranslate3f(0.0f, 0.0f, arrow_length);
+
+ if (use_lighting) {
+ immUnbindProgram();
+ immBindBuiltinProgram(GPU_SHADER_3D_SMOOTH_COLOR);
+ }
+
+ imm_draw_circle_fill_3d(pos, 0.0, 0.0, width, 8);
+ imm_draw_cylinder_fill_3d(pos, width, 0.0, len, 8, 1);
+ }
+
+ gpuPopMatrix();
+#endif /* USE_MANIPULATOR_CUSTOM_ARROWS */
+ }
+
+ if (unbind_shader) {
+ immUnbindProgram();
+ }
+}
+
+static void arrow_draw_intern(ArrowManipulator3D *arrow, const bool select, const bool highlight)
+{
+ wmManipulator *mpr = &arrow->manipulator;
+ float color[4];
+ float matrix_final[4][4];
+
+ manipulator_color_get(mpr, highlight, color);
+
+ WM_manipulator_calc_matrix_final(mpr, matrix_final);
+
+ gpuPushMatrix();
+ gpuMultMatrix(matrix_final);
+ glEnable(GL_BLEND);
+ arrow_draw_geom(arrow, select, color);
+ glDisable(GL_BLEND);
+
+ gpuPopMatrix();
+
+ if (mpr->interaction_data) {
+ ManipulatorInteraction *inter = mpr->interaction_data;
+
+ gpuPushMatrix();
+ gpuMultMatrix(inter->init_matrix_final);
+
+
+ glEnable(GL_BLEND);
+ arrow_draw_geom(arrow, select, (const float [4]){0.5f, 0.5f, 0.5f, 0.5f});
+ glDisable(GL_BLEND);
+
+ gpuPopMatrix();
+ }
+}
+
+static void manipulator_arrow_draw_select(
+ const bContext *UNUSED(C), wmManipulator *mpr,
+ int select_id)
+{
+ GPU_select_load_id(select_id);
+ arrow_draw_intern((ArrowManipulator3D *)mpr, true, false);
+}
+
+static void manipulator_arrow_draw(const bContext *UNUSED(C), wmManipulator *mpr)
+{
+ arrow_draw_intern((ArrowManipulator3D *)mpr, false, (mpr->state & WM_MANIPULATOR_STATE_HIGHLIGHT) != 0);
+}
+
+/**
+ * Calculate arrow offset independent from prop min value,
+ * meaning the range will not be offset by min value first.
+ */
+static int manipulator_arrow_modal(
+ bContext *C, wmManipulator *mpr, const wmEvent *event,
+ eWM_ManipulatorTweak tweak_flag)
+{
+ ArrowManipulator3D *arrow = (ArrowManipulator3D *)mpr;
+ ManipulatorInteraction *inter = mpr->interaction_data;
+ View3D *v3d = CTX_wm_view3d(C);
+ ARegion *ar = CTX_wm_region(C);
+ RegionView3D *rv3d = ar->regiondata;
+
+ float offset[3];
+ float facdir = 1.0f;
+
+ /* (src, dst) */
+ struct {
+ float mval[2];
+ float ray_origin[3], ray_direction[3];
+ float location[3];
+ } proj[2] = {
+ {.mval = {UNPACK2(inter->init_mval)}},
+ {.mval = {UNPACK2(event->mval)}},
+ };
+
+ float arrow_co[3];
+ float arrow_no[3];
+ copy_v3_v3(arrow_co, inter->init_matrix_basis[3]);
+ normalize_v3_v3(arrow_no, arrow->manipulator.matrix_basis[2]);
+
+ int ok = 0;
+
+ for (int j = 0; j < 2; j++) {
+ if (ED_view3d_win_to_ray(
+ CTX_data_depsgraph(C),
+ ar, v3d, proj[j].mval,
+ proj[j].ray_origin, proj[j].ray_direction, false))
+ {
+ /* Force Y axis if we're view aligned */
+ if (j == 0) {
+ if (RAD2DEGF(acosf(dot_v3v3(proj[j].ray_direction, arrow->manipulator.matrix_basis[2]))) < 5.0f) {
+ normalize_v3_v3(arrow_no, rv3d->viewinv[1]);
+ }
+ }
+
+ float arrow_no_proj[3];
+ project_plane_v3_v3v3(arrow_no_proj, arrow_no, proj[j].ray_direction);
+
+ normalize_v3(arrow_no_proj);
+
+ float plane[4];
+ plane_from_point_normal_v3(plane, proj[j].ray_origin, arrow_no_proj);
+
+ float lambda;
+ if (isect_ray_plane_v3(arrow_co, arrow_no, plane, &lambda, false)) {
+ madd_v3_v3v3fl(proj[j].location, arrow_co, arrow_no, lambda);
+ ok++;
+ }
+ }
+ }
+
+ if (ok != 2) {
+ return OPERATOR_RUNNING_MODAL;
+ }
+
+ sub_v3_v3v3(offset, proj[1].location, proj[0].location);
+ facdir = dot_v3v3(arrow_no, offset) < 0.0f ? -1 : 1;
+
+ ManipulatorCommonData *data = &arrow->data;
+ const float ofs_new = facdir * len_v3(offset);
+
+ wmManipulatorProperty *mpr_prop = WM_manipulator_target_property_find(mpr, "offset");
+
+ /* set the property for the operator and call its modal function */
+ if (WM_manipulator_target_property_is_valid(mpr_prop)) {
+ const int draw_options = RNA_enum_get(arrow->manipulator.ptr, "draw_options");
+ const bool constrained = (draw_options & ED_MANIPULATOR_ARROW_STYLE_CONSTRAINED) != 0;
+ const bool inverted = (draw_options & ED_MANIPULATOR_ARROW_STYLE_INVERTED) != 0;
+ const bool use_precision = (tweak_flag & WM_MANIPULATOR_TWEAK_PRECISE) != 0;
+ float value = manipulator_value_from_offset(data, inter, ofs_new, constrained, inverted, use_precision);
+
+ WM_manipulator_target_property_value_set(C, mpr, mpr_prop, value);
+ /* get clamped value */
+ value = WM_manipulator_target_property_value_get(mpr, mpr_prop);
+
+ data->offset = manipulator_offset_from_value(data, value, constrained, inverted);
+ }
+ else {
+ data->offset = ofs_new;
+ }
+
+ /* tag the region for redraw */
+ ED_region_tag_redraw(ar);
+ WM_event_add_mousemove(C);
+
+ return OPERATOR_RUNNING_MODAL;
+}
+
+static void manipulator_arrow_setup(wmManipulator *mpr)
+{
+ ArrowManipulator3D *arrow = (ArrowManipulator3D *)mpr;
+
+ arrow->manipulator.flag |= WM_MANIPULATOR_DRAW_MODAL;
+
+ arrow->data.range_fac = 1.0f;
+}
+
+static int manipulator_arrow_invoke(
+ bContext *UNUSED(C), wmManipulator *mpr, const wmEvent *event)
+{
+ ArrowManipulator3D *arrow = (ArrowManipulator3D *)mpr;
+ ManipulatorInteraction *inter = MEM_callocN(sizeof(ManipulatorInteraction), __func__);
+ wmManipulatorProperty *mpr_prop = WM_manipulator_target_property_find(mpr, "offset");
+
+ /* Some manipulators don't use properties. */
+ if (WM_manipulator_target_property_is_valid(mpr_prop)) {
+ inter->init_value = WM_manipulator_target_property_value_get(mpr, mpr_prop);
+ }
+
+ inter->init_offset = arrow->data.offset;
+
+ inter->init_mval[0] = event->mval[0];
+ inter->init_mval[1] = event->mval[1];
+
+ manipulator_arrow_matrix_basis_get(mpr, inter->init_matrix_basis);
+ WM_manipulator_calc_matrix_final(mpr, inter->init_matrix_final);
+
+ mpr->interaction_data = inter;
+
+ return OPERATOR_RUNNING_MODAL;
+}
+
+static void manipulator_arrow_property_update(wmManipulator *mpr, wmManipulatorProperty *mpr_prop)
+{
+ ArrowManipulator3D *arrow = (ArrowManipulator3D *)mpr;
+ const int draw_options = RNA_enum_get(arrow->manipulator.ptr, "draw_options");
+ const bool constrained = (draw_options & ED_MANIPULATOR_ARROW_STYLE_CONSTRAINED) != 0;
+ const bool inverted = (draw_options & ED_MANIPULATOR_ARROW_STYLE_INVERTED) != 0;
+ manipulator_property_data_update(mpr, &arrow->data, mpr_prop, constrained, inverted);
+}
+
+static void manipulator_arrow_exit(bContext *C, wmManipulator *mpr, const bool cancel)
+{
+ ArrowManipulator3D *arrow = (ArrowManipulator3D *)mpr;
+ ManipulatorCommonData *data = &arrow->data;
+ wmManipulatorProperty *mpr_prop = WM_manipulator_target_property_find(mpr, "offset");
+ const bool is_prop_valid = WM_manipulator_target_property_is_valid(mpr_prop);
+
+ if (!cancel) {
+ /* Assign incase applying the opetration needs an updated offset
+ * editmesh bisect needs this. */
+ if (is_prop_valid) {
+ data->offset = WM_manipulator_target_property_value_get(mpr, mpr_prop);
+ }
+ return;
+ }
+
+ ManipulatorInteraction *inter = mpr->interaction_data;
+ if (is_prop_valid) {
+ manipulator_property_value_reset(C, mpr, inter, mpr_prop);
+ }
+ data->offset = inter->init_offset;
+}
+
+
+/* -------------------------------------------------------------------- */
+/** \name Arrow Manipulator API
+ *
+ * \{ */
+
+/**
+ * Define a custom property UI range
+ *
+ * \note Needs to be called before WM_manipulator_target_property_def_rna!
+ */
+void ED_manipulator_arrow3d_set_ui_range(wmManipulator *mpr, const float min, const float max)
+{
+ ArrowManipulator3D *arrow = (ArrowManipulator3D *)mpr;
+
+ BLI_assert(min < max);
+ BLI_assert(!(WM_manipulator_target_property_is_valid(WM_manipulator_target_property_find(mpr, "offset")) &&
+ "Make sure this function is called before WM_manipulator_target_property_def_rna"));
+
+ arrow->data.range = max - min;
+ arrow->data.min = min;
+ arrow->data.flag |= MANIPULATOR_CUSTOM_RANGE_SET;
+}
+
+/**
+ * Define a custom factor for arrow min/max distance
+ *
+ * \note Needs to be called before WM_manipulator_target_property_def_rna!
+ */
+void ED_manipulator_arrow3d_set_range_fac(wmManipulator *mpr, const float range_fac)
+{
+ ArrowManipulator3D *arrow = (ArrowManipulator3D *)mpr;
+ BLI_assert(!(WM_manipulator_target_property_is_valid(WM_manipulator_target_property_find(mpr, "offset")) &&
+ "Make sure this function is called before WM_manipulator_target_property_def_rna"));
+
+ arrow->data.range_fac = range_fac;
+}
+
+static void MANIPULATOR_WT_arrow_3d(wmManipulatorType *wt)
+{
+ /* identifiers */
+ wt->idname = "MANIPULATOR_WT_arrow_3d";
+
+ /* api callbacks */
+ wt->draw = manipulator_arrow_draw;
+ wt->draw_select = manipulator_arrow_draw_select;
+ wt->matrix_basis_get = manipulator_arrow_matrix_basis_get;
+ wt->modal = manipulator_arrow_modal;
+ wt->setup = manipulator_arrow_setup;
+ wt->invoke = manipulator_arrow_invoke;
+ wt->property_update = manipulator_arrow_property_update;
+ wt->exit = manipulator_arrow_exit;
+
+ wt->struct_size = sizeof(ArrowManipulator3D);
+
+ /* rna */
+ static EnumPropertyItem rna_enum_draw_style[] = {
+ {ED_MANIPULATOR_ARROW_STYLE_NORMAL, "NORMAL", 0, "Normal", ""},
+ {ED_MANIPULATOR_ARROW_STYLE_CROSS, "CROSS", 0, "Cross", ""},
+ {ED_MANIPULATOR_ARROW_STYLE_BOX, "BOX", 0, "Box", ""},
+ {ED_MANIPULATOR_ARROW_STYLE_CONE, "CONE", 0, "Cone", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
+ static EnumPropertyItem rna_enum_draw_options[] = {
+ {ED_MANIPULATOR_ARROW_STYLE_INVERTED, "INVERT", 0, "Inverted", ""},
+ {ED_MANIPULATOR_ARROW_STYLE_CONSTRAINED, "CONSTRAIN", 0, "Constrained", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
+
+ RNA_def_enum(wt->srna, "draw_style", rna_enum_draw_style, ED_MANIPULATOR_ARROW_STYLE_NORMAL, "Draw Style", "");
+ RNA_def_enum_flag(wt->srna, "draw_options", rna_enum_draw_options, 0, "Draw Options", "");
+
+ RNA_def_float(wt->srna, "length", 1.0f, 0.0f, FLT_MAX, "Arrow Line Length", "", 0.0f, FLT_MAX);
+ RNA_def_float_vector(wt->srna, "aspect", 2, NULL, 0, FLT_MAX, "Aspect", "Cone/box style only", 0.0f, FLT_MAX);
+
+ WM_manipulatortype_target_property_def(wt, "offset", PROP_FLOAT, 1);
+}
+
+void ED_manipulatortypes_arrow_3d(void)
+{
+ WM_manipulatortype_append(MANIPULATOR_WT_arrow_3d);
+}
+
+/** \} */
diff --git a/source/blender/editors/manipulator_library/manipulator_types/button2d_manipulator.c b/source/blender/editors/manipulator_library/manipulator_types/button2d_manipulator.c
new file mode 100644
index 00000000000..7e57b48c77c
--- /dev/null
+++ b/source/blender/editors/manipulator_library/manipulator_types/button2d_manipulator.c
@@ -0,0 +1,262 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file button2d_manipulator.c
+ * \ingroup wm
+ *
+ * \name Button Manipulator
+ *
+ * 2D Manipulator, also works in 3D views.
+ *
+ * \brief Single click button action for use in manipulator groups.
+ *
+ * \note Currently only basic icon & vector-shape buttons are supported.
+ *
+ */
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_math.h"
+
+#include "BKE_context.h"
+
+#include "BIF_gl.h"
+#include "BIF_glutil.h"
+
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+#include "GPU_matrix.h"
+#include "GPU_select.h"
+#include "GPU_batch.h"
+
+#include "RNA_access.h"
+#include "RNA_define.h"
+#include "RNA_enum_types.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "ED_screen.h"
+#include "ED_view3d.h"
+#include "ED_manipulator_library.h"
+
+#include "UI_interface_icons.h"
+#include "UI_resources.h"
+
+/* own includes */
+#include "../manipulator_geometry.h"
+#include "../manipulator_library_intern.h"
+
+typedef struct ButtonManipulator2D {
+ wmManipulator manipulator;
+ bool is_init;
+ /* Use an icon or shape */
+ int icon;
+ Gwn_Batch *shape_batch[2];
+} ButtonManipulator2D;
+
+#define CIRCLE_RESOLUTION 32
+
+/* -------------------------------------------------------------------- */
+
+static void button2d_geom_draw_backdrop(
+ const wmManipulator *mpr, const float color[4], const bool select)
+{
+ glLineWidth(mpr->line_width);
+
+ Gwn_VertFormat *format = immVertexFormat();
+ uint pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+
+ immUniformColor4fv(color);
+
+ /* TODO, other draw styles */
+ imm_draw_circle_fill_2d(pos, 0, 0, 1.0f, CIRCLE_RESOLUTION);
+
+ immUnbindProgram();
+
+ UNUSED_VARS(select);
+}
+
+static void button2d_draw_intern(
+ const bContext *UNUSED(C), wmManipulator *mpr,
+ const bool select, const bool highlight)
+{
+ ButtonManipulator2D *button = (ButtonManipulator2D *)mpr;
+
+ if (button->is_init == false) {
+ button->is_init = true;
+ PropertyRNA *prop = RNA_struct_find_property(mpr->ptr, "icon");
+ if (RNA_property_is_set(mpr->ptr, prop)) {
+ button->icon = RNA_property_enum_get(mpr->ptr, prop);
+ }
+ else {
+ prop = RNA_struct_find_property(mpr->ptr, "shape");
+ const uint polys_len = RNA_property_string_length(mpr->ptr, prop);
+ /* We shouldn't need the +1, but a NULL char is set. */
+ char *polys = MEM_mallocN(polys_len + 1, __func__);
+ RNA_property_string_get(mpr->ptr, prop, polys);
+ button->shape_batch[0] = GPU_batch_wire_from_poly_2d_encoded((uchar *)polys, polys_len, NULL);
+ button->shape_batch[1] = GPU_batch_tris_from_poly_2d_encoded((uchar *)polys, polys_len, NULL);
+ MEM_freeN(polys);
+ }
+ }
+
+ float color[4];
+ float matrix_final[4][4];
+
+ manipulator_color_get(mpr, highlight, color);
+ WM_manipulator_calc_matrix_final(mpr, matrix_final);
+
+ gpuPushMatrix();
+ gpuMultMatrix(matrix_final);
+
+ glEnable(GL_BLEND);
+
+ if (select == false) {
+ if (button->shape_batch[0] != NULL) {
+ glEnable(GL_LINE_SMOOTH);
+ glLineWidth(1.0f);
+ for (uint i = 0; i < ARRAY_SIZE(button->shape_batch) && button->shape_batch[i]; i++) {
+ /* Invert line color for wire. */
+ color[0] = 1.0f - color[0];
+ color[1] = 1.0f - color[1];
+ color[2] = 1.0f - color[2];
+
+ GWN_batch_program_set_builtin(button->shape_batch[i], GPU_SHADER_2D_UNIFORM_COLOR);
+ GWN_batch_uniform_4f(button->shape_batch[i], "color", UNPACK4(color));
+ GWN_batch_draw(button->shape_batch[i]);
+ }
+ glDisable(GL_LINE_SMOOTH);
+ gpuPopMatrix();
+ }
+ else if (button->icon != ICON_NONE) {
+ button2d_geom_draw_backdrop(mpr, color, select);
+ gpuPopMatrix();
+ UI_icon_draw(
+ mpr->matrix_basis[3][0] - (ICON_DEFAULT_WIDTH / 2.0) * U.ui_scale,
+ mpr->matrix_basis[3][1] - (ICON_DEFAULT_HEIGHT / 2.0) * U.ui_scale,
+ button->icon);
+ }
+ else {
+ gpuPopMatrix();
+ }
+ }
+ glDisable(GL_BLEND);
+}
+
+static void manipulator_button2d_draw_select(const bContext *C, wmManipulator *mpr, int select_id)
+{
+ GPU_select_load_id(select_id);
+ button2d_draw_intern(C, mpr, true, false);
+}
+
+static void manipulator_button2d_draw(const bContext *C, wmManipulator *mpr)
+{
+ const bool is_highlight = (mpr->state & WM_MANIPULATOR_STATE_HIGHLIGHT) != 0;
+
+ glEnable(GL_BLEND);
+ button2d_draw_intern(C, mpr, false, is_highlight);
+ glDisable(GL_BLEND);
+}
+
+static int manipulator_button2d_test_select(
+ bContext *C, wmManipulator *mpr, const wmEvent *event)
+{
+ float point_local[2];
+
+ if (0) {
+ /* correct, but unnecessarily slow. */
+ if (manipulator_window_project_2d(
+ C, mpr, (const float[2]){UNPACK2(event->mval)}, 2, true, point_local) == false)
+ {
+ return -1;
+ }
+ }
+ else {
+ copy_v2_v2(point_local, (float [2]){UNPACK2(event->mval)});
+ sub_v2_v2(point_local, mpr->matrix_basis[3]);
+ mul_v2_fl(point_local, 1.0f / (mpr->scale_basis * U.ui_scale));
+ }
+ /* The 'mpr->scale_final' is already applied when projecting. */
+ if (len_squared_v2(point_local) < 1.0f) {
+ return 0;
+ }
+
+ return -1;
+}
+
+static int manipulator_button2d_cursor_get(wmManipulator *mpr)
+{
+ if (RNA_boolean_get(mpr->ptr, "show_drag")) {
+ return BC_NSEW_SCROLLCURSOR;
+ }
+ return CURSOR_STD;
+}
+
+static void manipulator_button2d_free(wmManipulator *mpr)
+{
+ ButtonManipulator2D *shape = (ButtonManipulator2D *)mpr;
+
+ for (uint i = 0; i < ARRAY_SIZE(shape->shape_batch); i++) {
+ GWN_BATCH_DISCARD_SAFE(shape->shape_batch[i]);
+ }
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Button Manipulator API
+ *
+ * \{ */
+
+static void MANIPULATOR_WT_button_2d(wmManipulatorType *wt)
+{
+ /* identifiers */
+ wt->idname = "MANIPULATOR_WT_button_2d";
+
+ /* api callbacks */
+ wt->draw = manipulator_button2d_draw;
+ wt->draw_select = manipulator_button2d_draw_select;
+ wt->test_select = manipulator_button2d_test_select;
+ wt->cursor_get = manipulator_button2d_cursor_get;
+ wt->free = manipulator_button2d_free;
+
+ wt->struct_size = sizeof(ButtonManipulator2D);
+
+ /* rna */
+ PropertyRNA *prop;
+ prop = RNA_def_property(wt->srna, "icon", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_items(prop, rna_enum_icon_items);
+
+ /* Passed to 'GPU_batch_from_poly_2d_encoded' */
+ RNA_def_property(wt->srna, "shape", PROP_STRING, PROP_BYTESTRING);
+
+ /* Currently only used for cursor display. */
+ RNA_def_boolean(wt->srna, "show_drag", true, "Show Drag", "");
+}
+
+void ED_manipulatortypes_button_2d(void)
+{
+ WM_manipulatortype_append(MANIPULATOR_WT_button_2d);
+}
+
+/** \} */ // Button Manipulator API
diff --git a/source/blender/editors/manipulator_library/manipulator_types/cage2d_manipulator.c b/source/blender/editors/manipulator_library/manipulator_types/cage2d_manipulator.c
new file mode 100644
index 00000000000..0299a33d0fe
--- /dev/null
+++ b/source/blender/editors/manipulator_library/manipulator_types/cage2d_manipulator.c
@@ -0,0 +1,1109 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2014 Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): Blender Foundation
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file cage2d_manipulator.c
+ * \ingroup wm
+ *
+ * \name Cage Manipulator
+ *
+ * 2D Manipulator
+ *
+ * \brief Rectangular manipulator acting as a 'cage' around its content.
+ * Interacting scales or translates the manipulator.
+ */
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_math.h"
+#include "BLI_dial.h"
+#include "BLI_rect.h"
+
+#include "BKE_context.h"
+
+#include "BIF_gl.h"
+
+#include "GPU_matrix.h"
+#include "GPU_shader.h"
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+#include "GPU_select.h"
+
+#include "RNA_access.h"
+#include "RNA_define.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "ED_screen.h"
+#include "ED_view3d.h"
+#include "ED_manipulator_library.h"
+
+/* own includes */
+#include "../manipulator_library_intern.h"
+
+#define MANIPULATOR_RESIZER_SIZE 10.0f
+#define MANIPULATOR_MARGIN_OFFSET_SCALE 1.5f
+
+static void manipulator_calc_matrix_final_no_offset(
+ const wmManipulator *mpr, float orig_matrix_final_no_offset[4][4])
+{
+ float mat_identity[4][4];
+ struct WM_ManipulatorMatrixParams params = {NULL};
+ unit_m4(mat_identity);
+ params.matrix_offset = mat_identity;
+ WM_manipulator_calc_matrix_final_params(mpr, &params, orig_matrix_final_no_offset);
+}
+
+static void manipulator_calc_rect_view_scale(
+ const wmManipulator *mpr, const float dims[2], float scale[2])
+{
+ float matrix_final_no_offset[4][4];
+ float asp[2] = {1.0f, 1.0f};
+ if (dims[0] > dims[1]) {
+ asp[0] = dims[1] / dims[0];
+ }
+ else {
+ asp[1] = dims[0] / dims[1];
+ }
+ float x_axis[3], y_axis[3];
+ manipulator_calc_matrix_final_no_offset(mpr, matrix_final_no_offset);
+ mul_v3_mat3_m4v3(x_axis, matrix_final_no_offset, mpr->matrix_offset[0]);
+ mul_v3_mat3_m4v3(y_axis, matrix_final_no_offset, mpr->matrix_offset[1]);
+
+ mul_v2_v2(x_axis, asp);
+ mul_v2_v2(y_axis, asp);
+
+ scale[0] = 1.0f / len_v3(x_axis);
+ scale[1] = 1.0f / len_v3(y_axis);
+}
+
+static void manipulator_calc_rect_view_margin(
+ const wmManipulator *mpr, const float dims[2], float margin[2])
+{
+ float handle_size;
+ if (mpr->parent_mgroup->type->flag & WM_MANIPULATORGROUPTYPE_3D) {
+ handle_size = 0.15f;
+ }
+ else {
+ handle_size = MANIPULATOR_RESIZER_SIZE;
+ }
+ handle_size *= mpr->scale_final;
+ float scale_xy[2];
+ manipulator_calc_rect_view_scale(mpr, dims, scale_xy);
+ margin[0] = ((handle_size * scale_xy[0]));
+ margin[1] = ((handle_size * scale_xy[1]));
+}
+
+/* -------------------------------------------------------------------- */
+
+static void manipulator_rect_pivot_from_scale_part(int part, float r_pt[2], bool r_constrain_axis[2])
+{
+ bool x = true, y = true;
+ switch (part) {
+ case ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_X: { ARRAY_SET_ITEMS(r_pt, 0.5, 0.0); x = false; break; }
+ case ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_X: { ARRAY_SET_ITEMS(r_pt, -0.5, 0.0); x = false; break; }
+ case ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_Y: { ARRAY_SET_ITEMS(r_pt, 0.0, 0.5); y = false; break; }
+ case ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_Y: { ARRAY_SET_ITEMS(r_pt, 0.0, -0.5); y = false; break; }
+ case ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_X_MIN_Y: { ARRAY_SET_ITEMS(r_pt, 0.5, 0.5); x = y = false; break; }
+ case ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_X_MAX_Y: { ARRAY_SET_ITEMS(r_pt, 0.5, -0.5); x = y = false; break; }
+ case ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_X_MIN_Y: { ARRAY_SET_ITEMS(r_pt, -0.5, 0.5); x = y = false; break; }
+ case ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_X_MAX_Y: { ARRAY_SET_ITEMS(r_pt, -0.5, -0.5); x = y = false; break; }
+ default: BLI_assert(0);
+ }
+ r_constrain_axis[0] = x;
+ r_constrain_axis[1] = y;
+}
+
+/* -------------------------------------------------------------------- */
+/** \name Box Draw Style
+ *
+ * Useful for 3D views, see: #ED_MANIPULATOR_CAGE2D_STYLE_BOX
+ * \{ */
+
+static void cage2d_draw_box_corners(
+ const rctf *r, const float margin[2], const float color[3])
+{
+ uint pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor3fv(color);
+
+ immBegin(GWN_PRIM_LINES, 16);
+
+ immVertex2f(pos, r->xmin, r->ymin + margin[1]);
+ immVertex2f(pos, r->xmin, r->ymin);
+ immVertex2f(pos, r->xmin, r->ymin);
+ immVertex2f(pos, r->xmin + margin[0], r->ymin);
+
+ immVertex2f(pos, r->xmax, r->ymin + margin[1]);
+ immVertex2f(pos, r->xmax, r->ymin);
+ immVertex2f(pos, r->xmax, r->ymin);
+ immVertex2f(pos, r->xmax - margin[0], r->ymin);
+
+ immVertex2f(pos, r->xmax, r->ymax - margin[1]);
+ immVertex2f(pos, r->xmax, r->ymax);
+ immVertex2f(pos, r->xmax, r->ymax);
+ immVertex2f(pos, r->xmax - margin[0], r->ymax);
+
+ immVertex2f(pos, r->xmin, r->ymax - margin[1]);
+ immVertex2f(pos, r->xmin, r->ymax);
+ immVertex2f(pos, r->xmin, r->ymax);
+ immVertex2f(pos, r->xmin + margin[0], r->ymax);
+
+ immEnd();
+
+ immUnbindProgram();
+}
+
+static void cage2d_draw_box_interaction(
+ const float color[4], const int highlighted,
+ const float size[2], const float margin[2],
+ const float line_width, const bool is_solid, const int draw_options)
+{
+ /* 4 verts for translate, otherwise only 3 are used. */
+ float verts[4][2];
+ uint verts_len = 0;
+ Gwn_PrimType prim_type = GWN_PRIM_NONE;
+
+ switch (highlighted) {
+ case ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_X:
+ {
+ rctf r = {
+ .xmin = -size[0], .xmax = -size[0] + margin[0],
+ .ymin = -size[1] + margin[1], .ymax = size[1] - margin[1],
+ };
+ ARRAY_SET_ITEMS(verts[0], r.xmin, r.ymin);
+ ARRAY_SET_ITEMS(verts[1], r.xmin, r.ymax);
+ verts_len = 2;
+ if (is_solid) {
+ ARRAY_SET_ITEMS(verts[2], r.xmax, r.ymax);
+ ARRAY_SET_ITEMS(verts[3], r.xmax, r.ymin);
+ verts_len += 2;
+ prim_type = GWN_PRIM_TRI_FAN;
+ }
+ else {
+ prim_type = GWN_PRIM_LINE_STRIP;
+ }
+ break;
+ }
+ case ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_X:
+ {
+ rctf r = {
+ .xmin = size[0] - margin[0], .xmax = size[0],
+ .ymin = -size[1] + margin[1], .ymax = size[1] - margin[1],
+ };
+ ARRAY_SET_ITEMS(verts[0], r.xmax, r.ymin);
+ ARRAY_SET_ITEMS(verts[1], r.xmax, r.ymax);
+ verts_len = 2;
+ if (is_solid) {
+ ARRAY_SET_ITEMS(verts[2], r.xmin, r.ymax);
+ ARRAY_SET_ITEMS(verts[3], r.xmin, r.ymin);
+ verts_len += 2;
+ prim_type = GWN_PRIM_TRI_FAN;
+ }
+ else {
+ prim_type = GWN_PRIM_LINE_STRIP;
+ }
+ break;
+ }
+ case ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_Y:
+ {
+ rctf r = {
+ .xmin = -size[0] + margin[0], .xmax = size[0] - margin[0],
+ .ymin = -size[1], .ymax = -size[1] + margin[1],
+ };
+ ARRAY_SET_ITEMS(verts[0], r.xmin, r.ymin);
+ ARRAY_SET_ITEMS(verts[1], r.xmax, r.ymin);
+ verts_len = 2;
+ if (is_solid) {
+ ARRAY_SET_ITEMS(verts[2], r.xmax, r.ymax);
+ ARRAY_SET_ITEMS(verts[3], r.xmin, r.ymax);
+ verts_len += 2;
+ prim_type = GWN_PRIM_TRI_FAN;
+ }
+ else {
+ prim_type = GWN_PRIM_LINE_STRIP;
+ }
+ break;
+ }
+ case ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_Y:
+ {
+ rctf r = {
+ .xmin = -size[0] + margin[0], .xmax = size[0] - margin[0],
+ .ymin = size[1] - margin[1], .ymax = size[1],
+ };
+ ARRAY_SET_ITEMS(verts[0], r.xmin, r.ymax);
+ ARRAY_SET_ITEMS(verts[1], r.xmax, r.ymax);
+ verts_len = 2;
+ if (is_solid) {
+ ARRAY_SET_ITEMS(verts[2], r.xmax, r.ymin);
+ ARRAY_SET_ITEMS(verts[3], r.xmin, r.ymin);
+ verts_len += 2;
+ prim_type = GWN_PRIM_TRI_FAN;
+ }
+ else {
+ prim_type = GWN_PRIM_LINE_STRIP;
+ }
+ break;
+ }
+ case ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_X_MIN_Y:
+ {
+ rctf r = {
+ .xmin = -size[0], .xmax = -size[0] + margin[0],
+ .ymin = -size[1], .ymax = -size[1] + margin[1],
+ };
+ ARRAY_SET_ITEMS(verts[0], r.xmax, r.ymin);
+ ARRAY_SET_ITEMS(verts[1], r.xmax, r.ymax);
+ ARRAY_SET_ITEMS(verts[2], r.xmin, r.ymax);
+ verts_len = 3;
+ if (is_solid) {
+ ARRAY_SET_ITEMS(verts[3], r.xmin, r.ymin);
+ verts_len += 1;
+ prim_type = GWN_PRIM_TRI_FAN;
+ }
+ else {
+ prim_type = GWN_PRIM_LINE_STRIP;
+ }
+ break;
+ }
+ case ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_X_MAX_Y:
+ {
+ rctf r = {
+ .xmin = -size[0], .xmax = -size[0] + margin[0],
+ .ymin = size[1] - margin[1], .ymax = size[1],
+ };
+ ARRAY_SET_ITEMS(verts[0], r.xmax, r.ymax);
+ ARRAY_SET_ITEMS(verts[1], r.xmax, r.ymin);
+ ARRAY_SET_ITEMS(verts[2], r.xmin, r.ymin);
+ verts_len = 3;
+ if (is_solid) {
+ ARRAY_SET_ITEMS(verts[3], r.xmin, r.ymax);
+ verts_len += 1;
+ prim_type = GWN_PRIM_TRI_FAN;
+ }
+ else {
+ prim_type = GWN_PRIM_LINE_STRIP;
+ }
+ break;
+ }
+ case ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_X_MIN_Y:
+ {
+ rctf r = {
+ .xmin = size[0] - margin[0], .xmax = size[0],
+ .ymin = -size[1], .ymax = -size[1] + margin[1],
+ };
+ ARRAY_SET_ITEMS(verts[0], r.xmin, r.ymin);
+ ARRAY_SET_ITEMS(verts[1], r.xmin, r.ymax);
+ ARRAY_SET_ITEMS(verts[2], r.xmax, r.ymax);
+ verts_len = 3;
+ if (is_solid) {
+ ARRAY_SET_ITEMS(verts[3], r.xmax, r.ymin);
+ verts_len += 1;
+ prim_type = GWN_PRIM_TRI_FAN;
+ }
+ else {
+ prim_type = GWN_PRIM_LINE_STRIP;
+ }
+ break;
+ }
+ case ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_X_MAX_Y:
+ {
+ rctf r = {
+ .xmin = size[0] - margin[0], .xmax = size[0],
+ .ymin = size[1] - margin[1], .ymax = size[1],
+ };
+ ARRAY_SET_ITEMS(verts[0], r.xmin, r.ymax);
+ ARRAY_SET_ITEMS(verts[1], r.xmin, r.ymin);
+ ARRAY_SET_ITEMS(verts[2], r.xmax, r.ymin);
+ verts_len = 3;
+ if (is_solid) {
+ ARRAY_SET_ITEMS(verts[3], r.xmax, r.ymax);
+ verts_len += 1;
+ prim_type = GWN_PRIM_TRI_FAN;
+ }
+ else {
+ prim_type = GWN_PRIM_LINE_STRIP;
+ }
+ break;
+ }
+ case ED_MANIPULATOR_CAGE2D_PART_ROTATE:
+ {
+ const float rotate_pt[2] = {0.0f, size[1] + margin[1]};
+ const rctf r_rotate = {
+ .xmin = rotate_pt[0] - margin[0] / 2.0f,
+ .xmax = rotate_pt[0] + margin[0] / 2.0f,
+ .ymin = rotate_pt[1] - margin[1] / 2.0f,
+ .ymax = rotate_pt[1] + margin[1] / 2.0f,
+ };
+
+ ARRAY_SET_ITEMS(verts[0], r_rotate.xmin, r_rotate.ymin);
+ ARRAY_SET_ITEMS(verts[1], r_rotate.xmin, r_rotate.ymax);
+ ARRAY_SET_ITEMS(verts[2], r_rotate.xmax, r_rotate.ymax);
+ ARRAY_SET_ITEMS(verts[3], r_rotate.xmax, r_rotate.ymin);
+ verts_len = 4;
+ if (is_solid) {
+ prim_type = GWN_PRIM_TRI_FAN;
+ }
+ else {
+ prim_type = GWN_PRIM_LINE_STRIP;
+ }
+ break;
+ }
+
+ case ED_MANIPULATOR_CAGE2D_PART_TRANSLATE:
+ if (draw_options & ED_MANIPULATOR_CAGE2D_DRAW_FLAG_XFORM_CENTER_HANDLE) {
+ ARRAY_SET_ITEMS(verts[0], -margin[0] / 2, -margin[1] / 2);
+ ARRAY_SET_ITEMS(verts[1], margin[0] / 2, margin[1] / 2);
+ ARRAY_SET_ITEMS(verts[2], -margin[0] / 2, margin[1] / 2);
+ ARRAY_SET_ITEMS(verts[3], margin[0] / 2, -margin[1] / 2);
+ verts_len = 4;
+ if (is_solid) {
+ prim_type = GWN_PRIM_TRI_FAN;
+ }
+ else {
+ prim_type = GWN_PRIM_LINES;
+ }
+ }
+ else {
+ /* Only used for 3D view selection, never displayed to the user. */
+ ARRAY_SET_ITEMS(verts[0], -size[0], -size[1]);
+ ARRAY_SET_ITEMS(verts[1], -size[0], size[1]);
+ ARRAY_SET_ITEMS(verts[2], size[0], size[1]);
+ ARRAY_SET_ITEMS(verts[3], size[0], -size[1]);
+ verts_len = 4;
+ if (is_solid) {
+ prim_type = GWN_PRIM_TRI_FAN;
+ }
+ else {
+ /* unreachable */
+ BLI_assert(0);
+ prim_type = GWN_PRIM_LINE_STRIP;
+ }
+ }
+ break;
+ default:
+ return;
+ }
+
+ BLI_assert(prim_type != GWN_PRIM_NONE);
+
+ Gwn_VertFormat *format = immVertexFormat();
+ struct {
+ uint pos, col;
+ } attr_id = {
+ .pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT),
+ .col = GWN_vertformat_attr_add(format, "color", GWN_COMP_F32, 3, GWN_FETCH_FLOAT),
+ };
+ immBindBuiltinProgram(GPU_SHADER_2D_FLAT_COLOR);
+
+ {
+ if (is_solid) {
+ BLI_assert(ELEM(prim_type, GWN_PRIM_TRI_FAN));
+ immBegin(prim_type, verts_len);
+ immAttrib3f(attr_id.col, 0.0f, 0.0f, 0.0f);
+ for (uint i = 0; i < verts_len; i++) {
+ immVertex2fv(attr_id.pos, verts[i]);
+ }
+ immEnd();
+ }
+ else {
+ BLI_assert(ELEM(prim_type, GWN_PRIM_LINE_STRIP, GWN_PRIM_LINES));
+ glLineWidth(line_width + 3.0f);
+
+ immBegin(prim_type, verts_len);
+ immAttrib3f(attr_id.col, 0.0f, 0.0f, 0.0f);
+ for (uint i = 0; i < verts_len; i++) {
+ immVertex2fv(attr_id.pos, verts[i]);
+ }
+ immEnd();
+
+ glLineWidth(line_width);
+
+ immBegin(prim_type, verts_len);
+ immAttrib3fv(attr_id.col, color);
+ for (uint i = 0; i < verts_len; i++) {
+ immVertex2fv(attr_id.pos, verts[i]);
+ }
+ immEnd();
+ }
+ }
+
+ immUnbindProgram();
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Circle Draw Style
+ *
+ * Useful for 2D views, see: #ED_MANIPULATOR_CAGE2D_STYLE_CIRCLE
+ * \{ */
+
+static void imm_draw_point_aspect_2d(
+ uint pos, float x, float y, float rad_x, float rad_y, bool solid)
+{
+ immBegin(solid ? GWN_PRIM_TRI_FAN : GWN_PRIM_LINE_LOOP, 4);
+ immVertex2f(pos, x - rad_x, y - rad_y);
+ immVertex2f(pos, x - rad_x, y + rad_y);
+ immVertex2f(pos, x + rad_x, y + rad_y);
+ immVertex2f(pos, x + rad_x, y - rad_y);
+ immEnd();
+}
+
+static void cage2d_draw_circle_wire(
+ const rctf *r, const float margin[2], const float color[3],
+ const int transform_flag, const int draw_options)
+{
+ uint pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor3fv(color);
+
+ immBegin(GWN_PRIM_LINE_LOOP, 4);
+ immVertex2f(pos, r->xmin, r->ymin);
+ immVertex2f(pos, r->xmax, r->ymin);
+ immVertex2f(pos, r->xmax, r->ymax);
+ immVertex2f(pos, r->xmin, r->ymax);
+ immEnd();
+
+ if (transform_flag & ED_MANIPULATOR_CAGE2D_XFORM_FLAG_ROTATE) {
+ immBegin(GWN_PRIM_LINE_LOOP, 2);
+ immVertex2f(pos, BLI_rctf_cent_x(r), r->ymax);
+ immVertex2f(pos, BLI_rctf_cent_x(r), r->ymax + margin[1]);
+ immEnd();
+ }
+
+ if (transform_flag & ED_MANIPULATOR_CAGE2D_XFORM_FLAG_TRANSLATE) {
+ if (draw_options & ED_MANIPULATOR_CAGE2D_DRAW_FLAG_XFORM_CENTER_HANDLE) {
+ const float rad[2] = {margin[0] / 2, margin[1] / 2};
+ const float center[2] = {BLI_rctf_cent_x(r), BLI_rctf_cent_y(r)};
+
+ immBegin(GWN_PRIM_LINES, 4);
+ immVertex2f(pos, center[0] - rad[0], center[1] - rad[1]);
+ immVertex2f(pos, center[0] + rad[0], center[1] + rad[1]);
+ immVertex2f(pos, center[0] + rad[0], center[1] - rad[1]);
+ immVertex2f(pos, center[0] - rad[0], center[1] + rad[1]);
+ immEnd();
+ }
+ }
+
+ immUnbindProgram();
+}
+
+static void cage2d_draw_circle_handles(
+ const rctf *r, const float margin[2], const float color[3],
+ const int transform_flag,
+ bool solid)
+{
+ uint pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ void (*circle_fn)(uint, float, float, float, float, int) =
+ (solid) ? imm_draw_circle_fill_aspect_2d : imm_draw_circle_wire_aspect_2d;
+ const int resolu = 12;
+ const float rad[2] = {margin[0] / 3, margin[1] / 3};
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor3fv(color);
+
+ /* should really divide by two, but looks too bulky. */
+ {
+ imm_draw_point_aspect_2d(pos, r->xmin, r->ymin, rad[0], rad[1], solid);
+ imm_draw_point_aspect_2d(pos, r->xmax, r->ymin, rad[0], rad[1], solid);
+ imm_draw_point_aspect_2d(pos, r->xmax, r->ymax, rad[0], rad[1], solid);
+ imm_draw_point_aspect_2d(pos, r->xmin, r->ymax, rad[0], rad[1], solid);
+ }
+
+ if (transform_flag & ED_MANIPULATOR_CAGE2D_XFORM_FLAG_ROTATE) {
+ const float handle[2] = {BLI_rctf_cent_x(r), r->ymax + (margin[1] * MANIPULATOR_MARGIN_OFFSET_SCALE)};
+ circle_fn(pos, handle[0], handle[1], rad[0], rad[1], resolu);
+ }
+
+ immUnbindProgram();
+}
+
+/** \} */
+
+static void manipulator_cage2d_draw_intern(
+ wmManipulator *mpr, const bool select, const bool highlight, const int select_id)
+{
+ // const bool use_clamp = (mpr->parent_mgroup->type->flag & WM_MANIPULATORGROUPTYPE_3D) == 0;
+ float dims[2];
+ RNA_float_get_array(mpr->ptr, "dimensions", dims);
+ float matrix_final[4][4];
+
+ const int transform_flag = RNA_enum_get(mpr->ptr, "transform");
+ const int draw_style = RNA_enum_get(mpr->ptr, "draw_style");
+ const int draw_options = RNA_enum_get(mpr->ptr, "draw_options");
+
+ const float size_real[2] = {dims[0] / 2.0f, dims[1] / 2.0f};
+
+ WM_manipulator_calc_matrix_final(mpr, matrix_final);
+
+ gpuPushMatrix();
+ gpuMultMatrix(matrix_final);
+
+ float margin[2];
+ manipulator_calc_rect_view_margin(mpr, dims, margin);
+
+ /* Handy for quick testing draw (if it's outside bounds). */
+ if (false) {
+ glEnable(GL_BLEND);
+ uint pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor4fv((const float[4]){1, 1, 1, 0.5f});
+ float s = 0.5f;
+ immRectf(pos, -s, -s, s, s);
+ immUnbindProgram();
+ glDisable(GL_BLEND);
+ }
+
+ if (select) {
+ /* expand for hotspot */
+ const float size[2] = {size_real[0] + margin[0] / 2, size_real[1] + margin[1] / 2};
+
+ if (transform_flag & ED_MANIPULATOR_CAGE2D_XFORM_FLAG_SCALE) {
+ int scale_parts[] = {
+ ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_X,
+ ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_X,
+ ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_Y,
+ ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_Y,
+
+ ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_X_MIN_Y,
+ ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_X_MAX_Y,
+ ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_X_MIN_Y,
+ ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_X_MAX_Y,
+ };
+ for (int i = 0; i < ARRAY_SIZE(scale_parts); i++) {
+ GPU_select_load_id(select_id | scale_parts[i]);
+ cage2d_draw_box_interaction(
+ mpr->color, scale_parts[i], size, margin, mpr->line_width, true, draw_options);
+ }
+ }
+ if (transform_flag & ED_MANIPULATOR_CAGE2D_XFORM_FLAG_TRANSLATE) {
+ const int transform_part = ED_MANIPULATOR_CAGE2D_PART_TRANSLATE;
+ GPU_select_load_id(select_id | transform_part);
+ cage2d_draw_box_interaction(
+ mpr->color, transform_part, size, margin, mpr->line_width, true, draw_options);
+ }
+ if (transform_flag & ED_MANIPULATOR_CAGE2D_XFORM_FLAG_ROTATE) {
+ cage2d_draw_box_interaction(
+ mpr->color, ED_MANIPULATOR_CAGE2D_PART_ROTATE, size_real, margin, mpr->line_width, true, draw_options);
+ }
+ }
+ else {
+ const rctf r = {
+ .xmin = -size_real[0],
+ .ymin = -size_real[1],
+ .xmax = size_real[0],
+ .ymax = size_real[1],
+ };
+ if (draw_style == ED_MANIPULATOR_CAGE2D_STYLE_BOX) {
+ /* corner manipulators */
+ glLineWidth(mpr->line_width + 3.0f);
+ cage2d_draw_box_corners(&r, margin, (const float[3]){0, 0, 0});
+
+ /* corner manipulators */
+ float color[4];
+ manipulator_color_get(mpr, highlight, color);
+ glLineWidth(mpr->line_width);
+ cage2d_draw_box_corners(&r, margin, color);
+
+ bool show = false;
+ if (mpr->highlight_part == ED_MANIPULATOR_CAGE2D_PART_TRANSLATE) {
+ /* Only show if we're drawing the center handle
+ * otherwise the entire rectangle is the hotspot. */
+ if (draw_options & ED_MANIPULATOR_CAGE2D_DRAW_FLAG_XFORM_CENTER_HANDLE) {
+ show = true;
+ }
+ }
+ else {
+ show = true;
+ }
+
+ if (show) {
+ cage2d_draw_box_interaction(
+ mpr->color, mpr->highlight_part, size_real, margin, mpr->line_width, false, draw_options);
+ }
+
+ if (transform_flag & ED_MANIPULATOR_CAGE2D_XFORM_FLAG_ROTATE) {
+ cage2d_draw_box_interaction(
+ mpr->color, ED_MANIPULATOR_CAGE2D_PART_ROTATE, size_real, margin, mpr->line_width, false, draw_options);
+ }
+ }
+ else if (draw_style == ED_MANIPULATOR_CAGE2D_STYLE_CIRCLE) {
+ float color[4];
+ manipulator_color_get(mpr, highlight, color);
+
+ glEnable(GL_LINE_SMOOTH);
+ glEnable(GL_BLEND);
+
+ glLineWidth(mpr->line_width + 3.0f);
+ cage2d_draw_circle_wire(&r, margin, (const float[3]){0, 0, 0}, transform_flag, draw_options);
+ glLineWidth(mpr->line_width);
+ cage2d_draw_circle_wire(&r, margin, color, transform_flag, draw_options);
+
+
+ /* corner manipulators */
+ cage2d_draw_circle_handles(&r, margin, color, transform_flag, true);
+ cage2d_draw_circle_handles(&r, margin, (const float[3]){0, 0, 0}, transform_flag, false);
+
+ glDisable(GL_BLEND);
+ glDisable(GL_LINE_SMOOTH);
+ }
+ else {
+ BLI_assert(0);
+ }
+ }
+
+ glLineWidth(1.0);
+ gpuPopMatrix();
+}
+
+/**
+ * For when we want to draw 2d cage in 3d views.
+ */
+static void manipulator_cage2d_draw_select(const bContext *UNUSED(C), wmManipulator *mpr, int select_id)
+{
+ manipulator_cage2d_draw_intern(mpr, true, false, select_id);
+}
+
+static void manipulator_cage2d_draw(const bContext *UNUSED(C), wmManipulator *mpr)
+{
+ const bool is_highlight = (mpr->state & WM_MANIPULATOR_STATE_HIGHLIGHT) != 0;
+ manipulator_cage2d_draw_intern(mpr, false, is_highlight, -1);
+}
+
+static int manipulator_cage2d_get_cursor(wmManipulator *mpr)
+{
+ int highlight_part = mpr->highlight_part;
+
+ if (mpr->parent_mgroup->type->flag & WM_MANIPULATORGROUPTYPE_3D) {
+ return BC_NSEW_SCROLLCURSOR;
+ }
+
+ switch (highlight_part) {
+ case ED_MANIPULATOR_CAGE2D_PART_TRANSLATE:
+ return BC_HANDCURSOR;
+ case ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_X:
+ case ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_X:
+ return CURSOR_X_MOVE;
+ case ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_Y:
+ case ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_Y:
+ return CURSOR_Y_MOVE;
+
+ /* TODO diagonal cursor */
+ case ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_X_MIN_Y:
+ case ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_X_MIN_Y:
+ return BC_NSEW_SCROLLCURSOR;
+ case ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_X_MAX_Y:
+ case ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_X_MAX_Y:
+ return BC_NSEW_SCROLLCURSOR;
+ case ED_MANIPULATOR_CAGE2D_PART_ROTATE:
+ return BC_CROSSCURSOR;
+ default:
+ return CURSOR_STD;
+ }
+}
+
+static int manipulator_cage2d_test_select(
+ bContext *C, wmManipulator *mpr, const wmEvent *event)
+{
+ float point_local[2];
+ float dims[2];
+ RNA_float_get_array(mpr->ptr, "dimensions", dims);
+ const float size_real[2] = {dims[0] / 2.0f, dims[1] / 2.0f};
+
+ if (manipulator_window_project_2d(
+ C, mpr, (const float[2]){UNPACK2(event->mval)}, 2, true, point_local) == false)
+ {
+ return -1;
+ }
+
+ float margin[2];
+ manipulator_calc_rect_view_margin(mpr, dims, margin);
+ /* expand for hotspot */
+ const float size[2] = {size_real[0] + margin[0] / 2, size_real[1] + margin[1] / 2};
+
+ const int transform_flag = RNA_enum_get(mpr->ptr, "transform");
+ const int draw_options = RNA_enum_get(mpr->ptr, "draw_options");
+
+ if (transform_flag & ED_MANIPULATOR_CAGE2D_XFORM_FLAG_TRANSLATE) {
+ rctf r;
+ if (draw_options & ED_MANIPULATOR_CAGE2D_DRAW_FLAG_XFORM_CENTER_HANDLE) {
+ r.xmin = -margin[0] / 2;
+ r.ymin = -margin[1] / 2;
+ r.xmax = margin[0] / 2;
+ r.ymax = margin[1] / 2;
+ }
+ else {
+ r.xmin = -size[0] + margin[0];
+ r.ymin = -size[1] + margin[1];
+ r.xmax = size[0] - margin[0];
+ r.ymax = size[1] - margin[1];
+ };
+ bool isect = BLI_rctf_isect_pt_v(&r, point_local);
+ if (isect) {
+ return ED_MANIPULATOR_CAGE2D_PART_TRANSLATE;
+ }
+ }
+
+ /* if manipulator does not have a scale intersection, don't do it */
+ if (transform_flag & (ED_MANIPULATOR_CAGE2D_XFORM_FLAG_SCALE | ED_MANIPULATOR_CAGE2D_XFORM_FLAG_SCALE_UNIFORM)) {
+ const rctf r_xmin = {.xmin = -size[0], .ymin = -size[1], .xmax = -size[0] + margin[0], .ymax = size[1]};
+ const rctf r_xmax = {.xmin = size[0] - margin[0], .ymin = -size[1], .xmax = size[0], .ymax = size[1]};
+ const rctf r_ymin = {.xmin = -size[0], .ymin = -size[1], .xmax = size[0], .ymax = -size[1] + margin[1]};
+ const rctf r_ymax = {.xmin = -size[0], .ymin = size[1] - margin[1], .xmax = size[0], .ymax = size[1]};
+
+ if (BLI_rctf_isect_pt_v(&r_xmin, point_local)) {
+ if (BLI_rctf_isect_pt_v(&r_ymin, point_local)) {
+ return ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_X_MIN_Y;
+ }
+ if (BLI_rctf_isect_pt_v(&r_ymax, point_local)) {
+ return ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_X_MAX_Y;
+ }
+ return ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_X;
+ }
+ if (BLI_rctf_isect_pt_v(&r_xmax, point_local)) {
+ if (BLI_rctf_isect_pt_v(&r_ymin, point_local)) {
+ return ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_X_MIN_Y;
+ }
+ if (BLI_rctf_isect_pt_v(&r_ymax, point_local)) {
+ return ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_X_MAX_Y;
+ }
+ return ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_X;
+ }
+ if (BLI_rctf_isect_pt_v(&r_ymin, point_local)) {
+ return ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_Y;
+ }
+ if (BLI_rctf_isect_pt_v(&r_ymax, point_local)) {
+ return ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_Y;
+ }
+ }
+
+ if (transform_flag & ED_MANIPULATOR_CAGE2D_XFORM_FLAG_ROTATE) {
+ /* Rotate:
+ * (*) <-- hot spot is here!
+ * +---+
+ * | |
+ * +---+ */
+ const float r_rotate_pt[2] = {0.0f, size_real[1] + (margin[1] * MANIPULATOR_MARGIN_OFFSET_SCALE)};
+ const rctf r_rotate = {
+ .xmin = r_rotate_pt[0] - margin[0] / 2.0f,
+ .xmax = r_rotate_pt[0] + margin[0] / 2.0f,
+ .ymin = r_rotate_pt[1] - margin[1] / 2.0f,
+ .ymax = r_rotate_pt[1] + margin[1] / 2.0f,
+ };
+
+ if (BLI_rctf_isect_pt_v(&r_rotate, point_local)) {
+ return ED_MANIPULATOR_CAGE2D_PART_ROTATE;
+ }
+ }
+
+ return -1;
+}
+
+typedef struct RectTransformInteraction {
+ float orig_mouse[2];
+ float orig_matrix_offset[4][4];
+ float orig_matrix_final_no_offset[4][4];
+ Dial *dial;
+} RectTransformInteraction;
+
+static void manipulator_cage2d_setup(wmManipulator *mpr)
+{
+ mpr->flag |= WM_MANIPULATOR_DRAW_MODAL | WM_MANIPULATOR_DRAW_NO_SCALE;
+}
+
+static int manipulator_cage2d_invoke(
+ bContext *C, wmManipulator *mpr, const wmEvent *event)
+{
+ RectTransformInteraction *data = MEM_callocN(sizeof(RectTransformInteraction), "cage_interaction");
+
+ copy_m4_m4(data->orig_matrix_offset, mpr->matrix_offset);
+ manipulator_calc_matrix_final_no_offset(mpr, data->orig_matrix_final_no_offset);
+
+ if (manipulator_window_project_2d(
+ C, mpr, (const float[2]){UNPACK2(event->mval)}, 2, false, data->orig_mouse) == 0)
+ {
+ zero_v2(data->orig_mouse);
+ }
+
+ mpr->interaction_data = data;
+
+ return OPERATOR_RUNNING_MODAL;
+}
+
+static int manipulator_cage2d_modal(
+ bContext *C, wmManipulator *mpr, const wmEvent *event,
+ eWM_ManipulatorTweak UNUSED(tweak_flag))
+{
+ /* For transform logic to be managable we operate in -0.5..0.5 2D space,
+ * no matter the size of the rectangle, mouse coorts are scaled to unit space.
+ * The mouse coords have been projected into the matrix so we don't need to worry about axis alignment.
+ *
+ * - The cursor offset are multiplied by 'dims'.
+ * - Matrix translation is also multiplied by 'dims'.
+ */
+ RectTransformInteraction *data = mpr->interaction_data;
+ float point_local[2];
+
+ float dims[2];
+ RNA_float_get_array(mpr->ptr, "dimensions", dims);
+
+ {
+ float matrix_back[4][4];
+ copy_m4_m4(matrix_back, mpr->matrix_offset);
+ copy_m4_m4(mpr->matrix_offset, data->orig_matrix_offset);
+
+ bool ok = manipulator_window_project_2d(
+ C, mpr, (const float[2]){UNPACK2(event->mval)}, 2, false, point_local);
+ copy_m4_m4(mpr->matrix_offset, matrix_back);
+ if (!ok) {
+ return OPERATOR_RUNNING_MODAL;
+ }
+ }
+
+ const int transform_flag = RNA_enum_get(mpr->ptr, "transform");
+ wmManipulatorProperty *mpr_prop;
+
+ mpr_prop = WM_manipulator_target_property_find(mpr, "matrix");
+ if (mpr_prop->type != NULL) {
+ WM_manipulator_target_property_value_get_array(mpr, mpr_prop, &mpr->matrix_offset[0][0]);
+ }
+
+ if (mpr->highlight_part == ED_MANIPULATOR_CAGE2D_PART_TRANSLATE) {
+ /* do this to prevent clamping from changing size */
+ copy_m4_m4(mpr->matrix_offset, data->orig_matrix_offset);
+ mpr->matrix_offset[3][0] = data->orig_matrix_offset[3][0] + (point_local[0] - data->orig_mouse[0]);
+ mpr->matrix_offset[3][1] = data->orig_matrix_offset[3][1] + (point_local[1] - data->orig_mouse[1]);
+ }
+ else if (mpr->highlight_part == ED_MANIPULATOR_CAGE2D_PART_ROTATE) {
+
+#define MUL_V2_V3_M4_FINAL(test_co, mouse_co) \
+ mul_v3_m4v3(test_co, data->orig_matrix_final_no_offset, ((const float[3]){UNPACK2(mouse_co), 0.0}))
+
+ float test_co[3];
+
+ if (data->dial == NULL) {
+ MUL_V2_V3_M4_FINAL(test_co, data->orig_matrix_offset[3]);
+
+ data->dial = BLI_dial_initialize(test_co, FLT_EPSILON);
+
+ MUL_V2_V3_M4_FINAL(test_co, data->orig_mouse);
+ BLI_dial_angle(data->dial, test_co);
+ }
+
+ /* rotate */
+ MUL_V2_V3_M4_FINAL(test_co, point_local);
+ const float angle = BLI_dial_angle(data->dial, test_co);
+
+ float matrix_space_inv[4][4];
+ float matrix_rotate[4][4];
+ float pivot[3];
+
+ copy_v3_v3(pivot, data->orig_matrix_offset[3]);
+
+ invert_m4_m4(matrix_space_inv, mpr->matrix_space);
+
+ unit_m4(matrix_rotate);
+ mul_m4_m4m4(matrix_rotate, matrix_rotate, matrix_space_inv);
+ rotate_m4(matrix_rotate, 'Z', -angle);
+ mul_m4_m4m4(matrix_rotate, matrix_rotate, mpr->matrix_space);
+
+ zero_v3(matrix_rotate[3]);
+ transform_pivot_set_m4(matrix_rotate, pivot);
+
+ mul_m4_m4m4(mpr->matrix_offset, matrix_rotate, data->orig_matrix_offset);
+
+#undef MUL_V2_V3_M4_FINAL
+ }
+ else {
+ /* scale */
+ copy_m4_m4(mpr->matrix_offset, data->orig_matrix_offset);
+ float pivot[2];
+ bool constrain_axis[2] = {false};
+
+ if (transform_flag & ED_MANIPULATOR_CAGE2D_XFORM_FLAG_TRANSLATE) {
+ manipulator_rect_pivot_from_scale_part(mpr->highlight_part, pivot, constrain_axis);
+ }
+ else {
+ zero_v2(pivot);
+ }
+
+ /* Cursor deltas scaled to (-0.5..0.5). */
+ float delta_orig[2], delta_curr[2];
+ for (int i = 0; i < 2; i++) {
+ delta_orig[i] = ((data->orig_mouse[i] - data->orig_matrix_offset[3][i]) / dims[i]) - pivot[i];
+ delta_curr[i] = ((point_local[i] - data->orig_matrix_offset[3][i]) / dims[i]) - pivot[i];
+ }
+
+ float scale[2] = {1.0f, 1.0f};
+ for (int i = 0; i < 2; i++) {
+ if (constrain_axis[i] == false) {
+ if (delta_orig[i] < 0.0f) {
+ delta_orig[i] *= -1.0f;
+ delta_curr[i] *= -1.0f;
+ }
+ const int sign = signum_i(scale[i]);
+
+ scale[i] = 1.0f + ((delta_curr[i] - delta_orig[i]) / len_v3(data->orig_matrix_offset[i]));
+
+ if ((transform_flag & ED_MANIPULATOR_CAGE2D_XFORM_FLAG_SCALE_SIGNED) == 0) {
+ if (sign != signum_i(scale[i])) {
+ scale[i] = 0.0f;
+ }
+ }
+ }
+ }
+
+ if (transform_flag & ED_MANIPULATOR_CAGE2D_XFORM_FLAG_SCALE_UNIFORM) {
+ if (constrain_axis[0] == false && constrain_axis[1] == false) {
+ scale[1] = scale[0] = (scale[1] + scale[0]) / 2.0f;
+ }
+ else if (constrain_axis[0] == false) {
+ scale[1] = scale[0];
+ }
+ else if (constrain_axis[1] == false) {
+ scale[0] = scale[1];
+ }
+ else {
+ BLI_assert(0);
+ }
+ }
+
+ /* scale around pivot */
+ float matrix_scale[4][4];
+ unit_m4(matrix_scale);
+
+ mul_v3_fl(matrix_scale[0], scale[0]);
+ mul_v3_fl(matrix_scale[1], scale[1]);
+
+ transform_pivot_set_m4(matrix_scale, (const float [3]){pivot[0] * dims[0], pivot[1] * dims[1], 0.0f});
+ mul_m4_m4m4(mpr->matrix_offset, data->orig_matrix_offset, matrix_scale);
+ }
+
+ if (mpr_prop->type != NULL) {
+ WM_manipulator_target_property_value_set_array(C, mpr, mpr_prop, &mpr->matrix_offset[0][0]);
+ }
+
+ /* tag the region for redraw */
+ ED_region_tag_redraw(CTX_wm_region(C));
+ WM_event_add_mousemove(C);
+
+ return OPERATOR_RUNNING_MODAL;
+}
+
+static void manipulator_cage2d_property_update(wmManipulator *mpr, wmManipulatorProperty *mpr_prop)
+{
+ if (STREQ(mpr_prop->type->idname, "matrix")) {
+ if (WM_manipulator_target_property_array_length(mpr, mpr_prop) == 16) {
+ WM_manipulator_target_property_value_get_array(mpr, mpr_prop, &mpr->matrix_offset[0][0]);
+ }
+ else {
+ BLI_assert(0);
+ }
+ }
+ else {
+ BLI_assert(0);
+ }
+}
+
+static void manipulator_cage2d_exit(bContext *C, wmManipulator *mpr, const bool cancel)
+{
+ RectTransformInteraction *data = mpr->interaction_data;
+
+ MEM_SAFE_FREE(data->dial);
+
+ if (!cancel)
+ return;
+
+ wmManipulatorProperty *mpr_prop;
+
+ /* reset properties */
+ mpr_prop = WM_manipulator_target_property_find(mpr, "matrix");
+ if (mpr_prop->type != NULL) {
+ WM_manipulator_target_property_value_set_array(C, mpr, mpr_prop, &data->orig_matrix_offset[0][0]);
+ }
+
+ copy_m4_m4(mpr->matrix_offset, data->orig_matrix_offset);
+}
+
+
+/* -------------------------------------------------------------------- */
+/** \name Cage Manipulator API
+ *
+ * \{ */
+
+static void MANIPULATOR_WT_cage_2d(wmManipulatorType *wt)
+{
+ /* identifiers */
+ wt->idname = "MANIPULATOR_WT_cage_2d";
+
+ /* api callbacks */
+ wt->draw = manipulator_cage2d_draw;
+ wt->draw_select = manipulator_cage2d_draw_select;
+ wt->test_select = manipulator_cage2d_test_select;
+ wt->setup = manipulator_cage2d_setup;
+ wt->invoke = manipulator_cage2d_invoke;
+ wt->property_update = manipulator_cage2d_property_update;
+ wt->modal = manipulator_cage2d_modal;
+ wt->exit = manipulator_cage2d_exit;
+ wt->cursor_get = manipulator_cage2d_get_cursor;
+
+ wt->struct_size = sizeof(wmManipulator);
+
+ /* rna */
+ static EnumPropertyItem rna_enum_draw_style[] = {
+ {ED_MANIPULATOR_CAGE2D_STYLE_BOX, "BOX", 0, "Box", ""},
+ {ED_MANIPULATOR_CAGE2D_STYLE_CIRCLE, "CIRCLE", 0, "Circle", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
+ static EnumPropertyItem rna_enum_transform[] = {
+ {ED_MANIPULATOR_CAGE2D_XFORM_FLAG_TRANSLATE, "TRANSLATE", 0, "Translate", ""},
+ {ED_MANIPULATOR_CAGE2D_XFORM_FLAG_ROTATE, "ROTATE", 0, "Rotate", ""},
+ {ED_MANIPULATOR_CAGE2D_XFORM_FLAG_SCALE, "SCALE", 0, "Scale", ""},
+ {ED_MANIPULATOR_CAGE2D_XFORM_FLAG_SCALE_UNIFORM, "SCALE_UNIFORM", 0, "Scale Uniform", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
+ static EnumPropertyItem rna_enum_draw_options[] = {
+ {ED_MANIPULATOR_CAGE2D_DRAW_FLAG_XFORM_CENTER_HANDLE, "XFORM_CENTER_HANDLE", 0, "Center Handle", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
+ static float unit_v2[2] = {1.0f, 1.0f};
+ RNA_def_float_vector(wt->srna, "dimensions", 2, unit_v2, 0, FLT_MAX, "Dimensions", "", 0.0f, FLT_MAX);
+ RNA_def_enum_flag(wt->srna, "transform", rna_enum_transform, 0, "Transform Options", "");
+ RNA_def_enum(wt->srna, "draw_style", rna_enum_draw_style, ED_MANIPULATOR_CAGE2D_STYLE_CIRCLE, "Draw Style", "");
+ RNA_def_enum_flag(
+ wt->srna, "draw_options", rna_enum_draw_options,
+ ED_MANIPULATOR_CAGE2D_DRAW_FLAG_XFORM_CENTER_HANDLE, "Draw Options", "");
+
+ WM_manipulatortype_target_property_def(wt, "matrix", PROP_FLOAT, 16);
+}
+
+void ED_manipulatortypes_cage_2d(void)
+{
+ WM_manipulatortype_append(MANIPULATOR_WT_cage_2d);
+}
+
+/** \} */
diff --git a/source/blender/editors/manipulator_library/manipulator_types/cage3d_manipulator.c b/source/blender/editors/manipulator_library/manipulator_types/cage3d_manipulator.c
new file mode 100644
index 00000000000..d58cdb4b187
--- /dev/null
+++ b/source/blender/editors/manipulator_library/manipulator_types/cage3d_manipulator.c
@@ -0,0 +1,735 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2014 Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): Blender Foundation
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file cage3d_manipulator.c
+ * \ingroup wm
+ *
+ * \name Cage Manipulator
+ *
+ * 2D Manipulator
+ *
+ * \brief Rectangular manipulator acting as a 'cage' around its content.
+ * Interacting scales or translates the manipulator.
+ */
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_math.h"
+#include "BLI_dial.h"
+#include "BLI_rect.h"
+
+#include "BKE_context.h"
+
+#include "BIF_gl.h"
+
+#include "GPU_matrix.h"
+#include "GPU_shader.h"
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+#include "GPU_select.h"
+
+#include "RNA_access.h"
+#include "RNA_define.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "ED_screen.h"
+#include "ED_view3d.h"
+#include "ED_manipulator_library.h"
+
+/* own includes */
+#include "../manipulator_library_intern.h"
+
+#define MANIPULATOR_RESIZER_SIZE 10.0f
+#define MANIPULATOR_MARGIN_OFFSET_SCALE 1.5f
+
+static void manipulator_calc_matrix_final_no_offset(
+ const wmManipulator *mpr, float orig_matrix_final_no_offset[4][4], bool use_space)
+{
+ float mat_identity[4][4];
+ struct WM_ManipulatorMatrixParams params = {NULL};
+ unit_m4(mat_identity);
+ if (use_space == false) {
+ params.matrix_basis = mat_identity;
+ }
+ params.matrix_offset = mat_identity;
+ WM_manipulator_calc_matrix_final_params(mpr, &params, orig_matrix_final_no_offset);
+}
+
+static void manipulator_calc_rect_view_scale(
+ const wmManipulator *mpr, const float dims[3], float scale[3])
+{
+ UNUSED_VARS(dims);
+
+ /* Unlike cage2d, no need to correct for aspect. */
+ float matrix_final_no_offset[4][4];
+
+ float x_axis[3], y_axis[3], z_axis[3];
+ manipulator_calc_matrix_final_no_offset(mpr, matrix_final_no_offset, false);
+ mul_v3_mat3_m4v3(x_axis, matrix_final_no_offset, mpr->matrix_offset[0]);
+ mul_v3_mat3_m4v3(y_axis, matrix_final_no_offset, mpr->matrix_offset[1]);
+ mul_v3_mat3_m4v3(z_axis, matrix_final_no_offset, mpr->matrix_offset[2]);
+
+ scale[0] = 1.0f / len_v3(x_axis);
+ scale[1] = 1.0f / len_v3(y_axis);
+ scale[2] = 1.0f / len_v3(z_axis);
+}
+
+static void manipulator_calc_rect_view_margin(
+ const wmManipulator *mpr, const float dims[3], float margin[3])
+{
+ float handle_size;
+ if (mpr->parent_mgroup->type->flag & WM_MANIPULATORGROUPTYPE_3D) {
+ handle_size = 0.15f;
+ }
+ else {
+ handle_size = MANIPULATOR_RESIZER_SIZE;
+ }
+ // XXX, the scale isn't taking offset into account, we need to calculate scale per handle!
+ // handle_size *= mpr->scale_final;
+
+ float scale_xyz[3];
+ manipulator_calc_rect_view_scale(mpr, dims, scale_xyz);
+ margin[0] = ((handle_size * scale_xyz[0]));
+ margin[1] = ((handle_size * scale_xyz[1]));
+ margin[2] = ((handle_size * scale_xyz[2]));
+}
+
+/* -------------------------------------------------------------------- */
+
+static void manipulator_rect_pivot_from_scale_part(int part, float r_pt[3], bool r_constrain_axis[3])
+{
+ if (part >= ED_MANIPULATOR_CAGE3D_PART_SCALE_MIN_X_MIN_Y_MIN_Z &&
+ part <= ED_MANIPULATOR_CAGE3D_PART_SCALE_MAX_X_MAX_Y_MAX_Z)
+ {
+ int index = (part - ED_MANIPULATOR_CAGE3D_PART_SCALE_MIN_X_MIN_Y_MIN_Z);
+ int range[3];
+ range[2] = index % 3;
+ index = index / 3;
+ range[1] = index % 3;
+ index = index / 3;
+ range[0] = index % 3;
+
+ const float sign[3] = {-0.5f, 0.0f, 0.5f};
+ for (int i = 0; i < 3; i++) {
+ r_pt[i] = 0.5 * sign[range[i]];
+ r_constrain_axis[i] = (range[i] == 1);
+ }
+ }
+}
+
+/* -------------------------------------------------------------------- */
+/** \name Box Draw Style
+ *
+ * Useful for 3D views, see: #ED_MANIPULATOR_CAGE2D_STYLE_BOX
+ * \{ */
+
+static void cage3d_draw_box_corners(
+ const float r[3], const float margin[3], const float color[3])
+{
+ uint pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ UNUSED_VARS(margin);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformColor3fv(color);
+
+ imm_draw_cube_wire_3d(pos, (float[3]){0}, r);
+
+ immUnbindProgram();
+}
+
+static void cage3d_draw_box_interaction(
+ const float color[4], const int highlighted,
+ const float size[3], const float margin[3])
+{
+ if (highlighted >= ED_MANIPULATOR_CAGE3D_PART_SCALE_MIN_X_MIN_Y_MIN_Z &&
+ highlighted <= ED_MANIPULATOR_CAGE3D_PART_SCALE_MAX_X_MAX_Y_MAX_Z)
+ {
+ int index = (highlighted - ED_MANIPULATOR_CAGE3D_PART_SCALE_MIN_X_MIN_Y_MIN_Z);
+ int range[3];
+ range[2] = index % 3;
+ index = index / 3;
+ range[1] = index % 3;
+ index = index / 3;
+ range[0] = index % 3;
+
+ const float sign[3] = {-1.0f, 0.0f, 1.0f};
+ float co[3];
+
+ for (int i = 0; i < 3; i++) {
+ co[i] = size[i] * sign[range[i]];
+ }
+ const float rad[3] = {margin[0] / 3, margin[1] / 3, margin[2] / 3};
+
+ {
+ uint pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformColor3fv(color);
+ imm_draw_cube_fill_3d(pos, co, rad);
+ immUnbindProgram();
+ }
+ }
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Circle Draw Style
+ *
+ * Useful for 2D views, see: #ED_MANIPULATOR_CAGE2D_STYLE_CIRCLE
+ * \{ */
+
+static void imm_draw_point_aspect_3d(
+ uint pos, const float co[3], const float rad[3], bool solid)
+{
+ if (solid) {
+ imm_draw_cube_fill_3d(pos, co, rad);
+ }
+ else {
+ imm_draw_cube_wire_3d(pos, co, rad);
+ }
+}
+
+static void cage3d_draw_circle_wire(
+ const float r[3], const float margin[3], const float color[3],
+ const int transform_flag, const int draw_options)
+{
+ uint pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformColor3fv(color);
+
+ imm_draw_cube_wire_3d(pos, (float[3]){0}, r);
+
+#if 0
+ if (transform_flag & ED_MANIPULATOR_CAGE2D_XFORM_FLAG_TRANSLATE) {
+ if (draw_options & ED_MANIPULATOR_CAGE2D_DRAW_FLAG_XFORM_CENTER_HANDLE) {
+ const float rad[2] = {margin[0] / 2, margin[1] / 2};
+ const float center[2] = {0.0f, 0.0f};
+
+ immBegin(GWN_PRIM_LINES, 4);
+ immVertex2f(pos, center[0] - rad[0], center[1] - rad[1]);
+ immVertex2f(pos, center[0] + rad[0], center[1] + rad[1]);
+ immVertex2f(pos, center[0] + rad[0], center[1] - rad[1]);
+ immVertex2f(pos, center[0] - rad[0], center[1] + rad[1]);
+ immEnd();
+ }
+ }
+#else
+ UNUSED_VARS(margin, transform_flag, draw_options);
+#endif
+
+
+ immUnbindProgram();
+}
+
+static void cage3d_draw_circle_handles(
+ const RegionView3D *rv3d, const float matrix_final[4][4],
+ const float r[3], const float margin[3], const float color[3],
+ bool solid, float scale)
+{
+ uint pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ const float rad[3] = {margin[0] / 3, margin[1] / 3, margin[2] / 3};
+
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformColor3fv(color);
+
+ float sign[3] = {-1.0f, 0.0f, 1.0f};
+ for (int x = 0; x < 3; x++) {
+ for (int y = 0; y < 3; y++) {
+ for (int z = 0; z < 3; z++) {
+ if (x == 1 && y == 1 && z == 1) {
+ continue;
+ }
+ const float co[3] = {r[0] * sign[x], r[1] * sign[y], r[2] * sign[z]};
+ float co_test[3];
+ mul_v3_m4v3(co_test, matrix_final, co);
+ float rad_scale[3];
+ mul_v3_v3fl(rad_scale, rad, ED_view3d_pixel_size(rv3d, co_test) * scale);
+ imm_draw_point_aspect_3d(pos, co, rad_scale, solid);
+ }
+ }
+ }
+
+ immUnbindProgram();
+}
+
+/** \} */
+
+static void manipulator_cage3d_draw_intern(
+ RegionView3D *rv3d,
+ wmManipulator *mpr, const bool select, const bool highlight, const int select_id)
+{
+ // const bool use_clamp = (mpr->parent_mgroup->type->flag & WM_MANIPULATORGROUPTYPE_3D) == 0;
+ float dims[3];
+ RNA_float_get_array(mpr->ptr, "dimensions", dims);
+ float matrix_final[4][4];
+
+ const int transform_flag = RNA_enum_get(mpr->ptr, "transform");
+ const int draw_style = RNA_enum_get(mpr->ptr, "draw_style");
+ const int draw_options = RNA_enum_get(mpr->ptr, "draw_options");
+
+ const float size_real[3] = {dims[0] / 2.0f, dims[1] / 2.0f, dims[2] / 2.0f};
+
+ WM_manipulator_calc_matrix_final(mpr, matrix_final);
+
+ gpuPushMatrix();
+ gpuMultMatrix(matrix_final);
+
+ float margin[3];
+ manipulator_calc_rect_view_margin(mpr, dims, margin);
+
+ /* Handy for quick testing draw (if it's outside bounds). */
+ if (false) {
+ glEnable(GL_BLEND);
+ uint pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformColor4fv((const float[4]){1, 1, 1, 0.5f});
+ float s = 0.5f;
+ immRectf(pos, -s, -s, s, s);
+ immUnbindProgram();
+ glDisable(GL_BLEND);
+ }
+
+ if (select) {
+ /* expand for hotspot */
+#if 0
+ const float size[3] = {
+ size_real[0] + margin[0] / 2,
+ size_real[1] + margin[1] / 2,
+ size_real[2] + margin[2] / 2,
+ };
+#else
+ /* just use same value for now. */
+ const float size[3] = {UNPACK3(size_real)};
+#endif
+
+
+ if (transform_flag & ED_MANIPULATOR_CAGE2D_XFORM_FLAG_SCALE) {
+ for (int i = ED_MANIPULATOR_CAGE3D_PART_SCALE_MIN_X_MIN_Y_MIN_Z;
+ i <= ED_MANIPULATOR_CAGE3D_PART_SCALE_MAX_X_MAX_Y_MAX_Z;
+ i++)
+ {
+ if (i == ED_MANIPULATOR_CAGE3D_PART_SCALE_MID_X_MID_Y_MID_Z) {
+ continue;
+ }
+ GPU_select_load_id(select_id | i);
+ cage3d_draw_box_interaction(
+ mpr->color, i, size, margin);
+ }
+ }
+ if (transform_flag & ED_MANIPULATOR_CAGE2D_XFORM_FLAG_TRANSLATE) {
+ const int transform_part = ED_MANIPULATOR_CAGE3D_PART_TRANSLATE;
+ GPU_select_load_id(select_id | transform_part);
+ cage3d_draw_box_interaction(
+ mpr->color, transform_part, size, margin);
+ }
+ }
+ else {
+#if 0
+ const rctf _r = {
+ .xmin = -size_real[0],
+ .ymin = -size_real[1],
+ .xmax = size_real[0],
+ .ymax = size_real[1],
+ };
+#endif
+ if (draw_style == ED_MANIPULATOR_CAGE2D_STYLE_BOX) {
+ /* corner manipulators */
+ glLineWidth(mpr->line_width + 3.0f);
+ cage3d_draw_box_corners(size_real, margin, (const float[3]){0, 0, 0});
+
+ /* corner manipulators */
+ float color[4];
+ manipulator_color_get(mpr, highlight, color);
+ glLineWidth(mpr->line_width);
+ cage3d_draw_box_corners(size_real, margin, color);
+
+ bool show = false;
+ if (mpr->highlight_part == ED_MANIPULATOR_CAGE3D_PART_TRANSLATE) {
+ /* Only show if we're drawing the center handle
+ * otherwise the entire rectangle is the hotspot. */
+ if (draw_options & ED_MANIPULATOR_CAGE2D_DRAW_FLAG_XFORM_CENTER_HANDLE) {
+ show = true;
+ }
+ }
+ else {
+ show = true;
+ }
+
+ if (show) {
+ cage3d_draw_box_interaction(
+ mpr->color, mpr->highlight_part, size_real, margin);
+ }
+ }
+ else if (draw_style == ED_MANIPULATOR_CAGE2D_STYLE_CIRCLE) {
+ float color[4];
+ manipulator_color_get(mpr, highlight, color);
+
+ glEnable(GL_LINE_SMOOTH);
+ glEnable(GL_POLYGON_SMOOTH);
+ glEnable(GL_BLEND);
+
+ glLineWidth(mpr->line_width + 3.0f);
+ cage3d_draw_circle_wire(size_real, margin, (const float[3]){0, 0, 0}, transform_flag, draw_options);
+ glLineWidth(mpr->line_width);
+ cage3d_draw_circle_wire(size_real, margin, color, transform_flag, draw_options);
+
+ /* corner manipulators */
+ cage3d_draw_circle_handles(rv3d, matrix_final, size_real, margin, (const float[3]){0, 0, 0}, true, 60);
+ cage3d_draw_circle_handles(rv3d, matrix_final, size_real, margin, color, true, 40);
+
+ glDisable(GL_BLEND);
+ glDisable(GL_POLYGON_SMOOTH);
+ glDisable(GL_LINE_SMOOTH);
+ }
+ else {
+ BLI_assert(0);
+ }
+ }
+
+ glLineWidth(1.0);
+ gpuPopMatrix();
+}
+
+/**
+ * For when we want to draw 3d cage in 3d views.
+ */
+static void manipulator_cage3d_draw_select(const bContext *C, wmManipulator *mpr, int select_id)
+{
+ ARegion *ar = CTX_wm_region(C);
+ RegionView3D *rv3d = ar->regiondata;
+ manipulator_cage3d_draw_intern(rv3d, mpr, true, false, select_id);
+}
+
+static void manipulator_cage3d_draw(const bContext *C, wmManipulator *mpr)
+{
+ ARegion *ar = CTX_wm_region(C);
+ RegionView3D *rv3d = ar->regiondata;
+ const bool is_highlight = (mpr->state & WM_MANIPULATOR_STATE_HIGHLIGHT) != 0;
+ manipulator_cage3d_draw_intern(rv3d, mpr, false, is_highlight, -1);
+}
+
+static int manipulator_cage3d_get_cursor(wmManipulator *mpr)
+{
+ if (mpr->parent_mgroup->type->flag & WM_MANIPULATORGROUPTYPE_3D) {
+ return BC_NSEW_SCROLLCURSOR;
+ }
+
+ return CURSOR_STD;
+}
+
+typedef struct RectTransformInteraction {
+ float orig_mouse[2];
+ float orig_matrix_offset[4][4];
+ float orig_matrix_final_no_offset[4][4];
+ Dial *dial;
+} RectTransformInteraction;
+
+static void manipulator_cage3d_setup(wmManipulator *mpr)
+{
+ mpr->flag |= /* WM_MANIPULATOR_DRAW_MODAL | */ /* TODO */
+ WM_MANIPULATOR_DRAW_NO_SCALE;
+}
+
+static int manipulator_cage3d_invoke(
+ bContext *C, wmManipulator *mpr, const wmEvent *event)
+{
+ RectTransformInteraction *data = MEM_callocN(sizeof(RectTransformInteraction), "cage_interaction");
+
+ copy_m4_m4(data->orig_matrix_offset, mpr->matrix_offset);
+ manipulator_calc_matrix_final_no_offset(mpr, data->orig_matrix_final_no_offset, true);
+
+ if (manipulator_window_project_2d(
+ C, mpr, (const float[2]){UNPACK2(event->mval)}, 2, false, data->orig_mouse) == 0)
+ {
+ zero_v2(data->orig_mouse);
+ }
+
+ mpr->interaction_data = data;
+
+ return OPERATOR_RUNNING_MODAL;
+}
+
+/* XXX. this isn't working properly, for now rely on the modal operators. */
+static int manipulator_cage3d_modal(
+ bContext *C, wmManipulator *mpr, const wmEvent *event,
+ eWM_ManipulatorTweak UNUSED(tweak_flag))
+{
+ /* For transform logic to be managable we operate in -0.5..0.5 2D space,
+ * no matter the size of the rectangle, mouse coorts are scaled to unit space.
+ * The mouse coords have been projected into the matrix so we don't need to worry about axis alignment.
+ *
+ * - The cursor offset are multiplied by 'dims'.
+ * - Matrix translation is also multiplied by 'dims'.
+ */
+ RectTransformInteraction *data = mpr->interaction_data;
+ float point_local[2];
+
+ float dims[3];
+ RNA_float_get_array(mpr->ptr, "dimensions", dims);
+
+ {
+ float matrix_back[4][4];
+ copy_m4_m4(matrix_back, mpr->matrix_offset);
+ copy_m4_m4(mpr->matrix_offset, data->orig_matrix_offset);
+
+ bool ok = manipulator_window_project_2d(
+ C, mpr, (const float[2]){UNPACK2(event->mval)}, 2, false, point_local);
+ copy_m4_m4(mpr->matrix_offset, matrix_back);
+ if (!ok) {
+ return OPERATOR_RUNNING_MODAL;
+ }
+ }
+
+ const int transform_flag = RNA_enum_get(mpr->ptr, "transform");
+ wmManipulatorProperty *mpr_prop;
+
+ mpr_prop = WM_manipulator_target_property_find(mpr, "matrix");
+ if (mpr_prop->type != NULL) {
+ WM_manipulator_target_property_value_get_array(mpr, mpr_prop, &mpr->matrix_offset[0][0]);
+ }
+
+ if (mpr->highlight_part == ED_MANIPULATOR_CAGE3D_PART_TRANSLATE) {
+ /* do this to prevent clamping from changing size */
+ copy_m4_m4(mpr->matrix_offset, data->orig_matrix_offset);
+ mpr->matrix_offset[3][0] = data->orig_matrix_offset[3][0] + (point_local[0] - data->orig_mouse[0]);
+ mpr->matrix_offset[3][1] = data->orig_matrix_offset[3][1] + (point_local[1] - data->orig_mouse[1]);
+ }
+ else if (mpr->highlight_part == ED_MANIPULATOR_CAGE3D_PART_ROTATE) {
+
+#define MUL_V2_V3_M4_FINAL(test_co, mouse_co) \
+ mul_v3_m4v3(test_co, data->orig_matrix_final_no_offset, ((const float[3]){UNPACK2(mouse_co), 0.0}))
+
+ float test_co[3];
+
+ if (data->dial == NULL) {
+ MUL_V2_V3_M4_FINAL(test_co, data->orig_matrix_offset[3]);
+
+ data->dial = BLI_dial_initialize(test_co, FLT_EPSILON);
+
+ MUL_V2_V3_M4_FINAL(test_co, data->orig_mouse);
+ BLI_dial_angle(data->dial, test_co);
+ }
+
+ /* rotate */
+ MUL_V2_V3_M4_FINAL(test_co, point_local);
+ const float angle = BLI_dial_angle(data->dial, test_co);
+
+ float matrix_space_inv[4][4];
+ float matrix_rotate[4][4];
+ float pivot[3];
+
+ copy_v3_v3(pivot, data->orig_matrix_offset[3]);
+
+ invert_m4_m4(matrix_space_inv, mpr->matrix_space);
+
+ unit_m4(matrix_rotate);
+ mul_m4_m4m4(matrix_rotate, matrix_rotate, matrix_space_inv);
+ rotate_m4(matrix_rotate, 'Z', -angle);
+ mul_m4_m4m4(matrix_rotate, matrix_rotate, mpr->matrix_space);
+
+ zero_v3(matrix_rotate[3]);
+ transform_pivot_set_m4(matrix_rotate, pivot);
+
+ mul_m4_m4m4(mpr->matrix_offset, matrix_rotate, data->orig_matrix_offset);
+
+#undef MUL_V2_V3_M4_FINAL
+ }
+ else {
+ /* scale */
+ copy_m4_m4(mpr->matrix_offset, data->orig_matrix_offset);
+ float pivot[3];
+ bool constrain_axis[3] = {false};
+
+ if (transform_flag & ED_MANIPULATOR_CAGE2D_XFORM_FLAG_TRANSLATE) {
+ manipulator_rect_pivot_from_scale_part(mpr->highlight_part, pivot, constrain_axis);
+ }
+ else {
+ zero_v3(pivot);
+ }
+
+ /* Cursor deltas scaled to (-0.5..0.5). */
+ float delta_orig[3], delta_curr[3];
+
+ delta_orig[2] = 0.0;
+ delta_curr[2] = 0.0;
+
+ for (int i = 0; i < 2; i++) {
+ delta_orig[i] = ((data->orig_mouse[i] - data->orig_matrix_offset[3][i]) / dims[i]) - pivot[i];
+ delta_curr[i] = ((point_local[i] - data->orig_matrix_offset[3][i]) / dims[i]) - pivot[i];
+ }
+
+ float scale[3] = {1.0f, 1.0f, 1.0f};
+ for (int i = 0; i < 3; i++) {
+ if (constrain_axis[i] == false) {
+ if (delta_orig[i] < 0.0f) {
+ delta_orig[i] *= -1.0f;
+ delta_curr[i] *= -1.0f;
+ }
+ const int sign = signum_i(scale[i]);
+
+ scale[i] = 1.0f + ((delta_curr[i] - delta_orig[i]) / len_v3(data->orig_matrix_offset[i]));
+
+ if ((transform_flag & ED_MANIPULATOR_CAGE2D_XFORM_FLAG_SCALE_SIGNED) == 0) {
+ if (sign != signum_i(scale[i])) {
+ scale[i] = 0.0f;
+ }
+ }
+ }
+ }
+
+ if (transform_flag & ED_MANIPULATOR_CAGE2D_XFORM_FLAG_SCALE_UNIFORM) {
+ if (constrain_axis[0] == false && constrain_axis[1] == false) {
+ scale[1] = scale[0] = (scale[1] + scale[0]) / 2.0f;
+ }
+ else if (constrain_axis[0] == false) {
+ scale[1] = scale[0];
+ }
+ else if (constrain_axis[1] == false) {
+ scale[0] = scale[1];
+ }
+ else {
+ BLI_assert(0);
+ }
+ }
+
+ /* scale around pivot */
+ float matrix_scale[4][4];
+ unit_m4(matrix_scale);
+
+ mul_v3_fl(matrix_scale[0], scale[0]);
+ mul_v3_fl(matrix_scale[1], scale[1]);
+ mul_v3_fl(matrix_scale[2], scale[2]);
+
+ transform_pivot_set_m4(
+ matrix_scale,
+ (const float [3]){pivot[0] * dims[0], pivot[1] * dims[1], pivot[2] * dims[2]});
+ mul_m4_m4m4(mpr->matrix_offset, data->orig_matrix_offset, matrix_scale);
+ }
+
+ if (mpr_prop->type != NULL) {
+ WM_manipulator_target_property_value_set_array(C, mpr, mpr_prop, &mpr->matrix_offset[0][0]);
+ }
+
+ /* tag the region for redraw */
+ ED_region_tag_redraw(CTX_wm_region(C));
+ WM_event_add_mousemove(C);
+
+ return OPERATOR_RUNNING_MODAL;
+}
+
+static void manipulator_cage3d_property_update(wmManipulator *mpr, wmManipulatorProperty *mpr_prop)
+{
+ if (STREQ(mpr_prop->type->idname, "matrix")) {
+ if (WM_manipulator_target_property_array_length(mpr, mpr_prop) == 16) {
+ WM_manipulator_target_property_value_get_array(mpr, mpr_prop, &mpr->matrix_offset[0][0]);
+ }
+ else {
+ BLI_assert(0);
+ }
+ }
+ else {
+ BLI_assert(0);
+ }
+}
+
+static void manipulator_cage3d_exit(bContext *C, wmManipulator *mpr, const bool cancel)
+{
+ RectTransformInteraction *data = mpr->interaction_data;
+
+ MEM_SAFE_FREE(data->dial);
+
+ if (!cancel)
+ return;
+
+ wmManipulatorProperty *mpr_prop;
+
+ /* reset properties */
+ mpr_prop = WM_manipulator_target_property_find(mpr, "matrix");
+ if (mpr_prop->type != NULL) {
+ WM_manipulator_target_property_value_set_array(C, mpr, mpr_prop, &data->orig_matrix_offset[0][0]);
+ }
+
+ copy_m4_m4(mpr->matrix_offset, data->orig_matrix_offset);
+}
+
+
+/* -------------------------------------------------------------------- */
+/** \name Cage Manipulator API
+ *
+ * \{ */
+
+static void MANIPULATOR_WT_cage_3d(wmManipulatorType *wt)
+{
+ /* identifiers */
+ wt->idname = "MANIPULATOR_WT_cage_3d";
+
+ /* api callbacks */
+ wt->draw = manipulator_cage3d_draw;
+ wt->draw_select = manipulator_cage3d_draw_select;
+ wt->setup = manipulator_cage3d_setup;
+ wt->invoke = manipulator_cage3d_invoke;
+ wt->property_update = manipulator_cage3d_property_update;
+ wt->modal = manipulator_cage3d_modal;
+ wt->exit = manipulator_cage3d_exit;
+ wt->cursor_get = manipulator_cage3d_get_cursor;
+
+ wt->struct_size = sizeof(wmManipulator);
+
+ /* rna */
+ static EnumPropertyItem rna_enum_draw_style[] = {
+ {ED_MANIPULATOR_CAGE2D_STYLE_BOX, "BOX", 0, "Box", ""},
+ {ED_MANIPULATOR_CAGE2D_STYLE_CIRCLE, "CIRCLE", 0, "Circle", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
+ static EnumPropertyItem rna_enum_transform[] = {
+ {ED_MANIPULATOR_CAGE2D_XFORM_FLAG_TRANSLATE, "TRANSLATE", 0, "Translate", ""},
+ {ED_MANIPULATOR_CAGE2D_XFORM_FLAG_SCALE, "SCALE", 0, "Scale", ""},
+ {ED_MANIPULATOR_CAGE2D_XFORM_FLAG_SCALE_UNIFORM, "SCALE_UNIFORM", 0, "Scale Uniform", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
+ static EnumPropertyItem rna_enum_draw_options[] = {
+ {ED_MANIPULATOR_CAGE2D_DRAW_FLAG_XFORM_CENTER_HANDLE, "XFORM_CENTER_HANDLE", 0, "Center Handle", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
+ static float unit_v3[3] = {1.0f, 1.0f, 1.0f};
+ RNA_def_float_vector(wt->srna, "dimensions", 3, unit_v3, 0, FLT_MAX, "Dimensions", "", 0.0f, FLT_MAX);
+ RNA_def_enum_flag(wt->srna, "transform", rna_enum_transform, 0, "Transform Options", "");
+ RNA_def_enum(wt->srna, "draw_style", rna_enum_draw_style, ED_MANIPULATOR_CAGE2D_STYLE_CIRCLE, "Draw Style", "");
+ RNA_def_enum_flag(
+ wt->srna, "draw_options", rna_enum_draw_options,
+ ED_MANIPULATOR_CAGE2D_DRAW_FLAG_XFORM_CENTER_HANDLE, "Draw Options", "");
+
+ WM_manipulatortype_target_property_def(wt, "matrix", PROP_FLOAT, 16);
+}
+
+void ED_manipulatortypes_cage_3d(void)
+{
+ WM_manipulatortype_append(MANIPULATOR_WT_cage_3d);
+}
+
+/** \} */
diff --git a/source/blender/editors/manipulator_library/manipulator_types/dial3d_manipulator.c b/source/blender/editors/manipulator_library/manipulator_types/dial3d_manipulator.c
new file mode 100644
index 00000000000..2991c972f6e
--- /dev/null
+++ b/source/blender/editors/manipulator_library/manipulator_types/dial3d_manipulator.c
@@ -0,0 +1,480 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2014 Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): Blender Foundation
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file dial3d_manipulator.c
+ * \ingroup wm
+ *
+ * \name Dial Manipulator
+ *
+ * 3D Manipulator
+ *
+ * \brief Circle shaped manipulator for circular interaction.
+ * Currently no own handling, use with operator only.
+ *
+ * - `matrix[0]` is derived from Y and Z.
+ * - `matrix[1]` is 'up' when DialManipulator.use_start_y_axis is set.
+ * - `matrix[2]` is the axis the dial rotates around (all dials).
+ */
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_math.h"
+
+#include "BKE_context.h"
+
+#include "BIF_gl.h"
+#include "BIF_glutil.h"
+
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+#include "GPU_matrix.h"
+#include "GPU_select.h"
+
+#include "RNA_access.h"
+#include "RNA_define.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "ED_screen.h"
+#include "ED_view3d.h"
+#include "ED_manipulator_library.h"
+
+/* own includes */
+#include "../manipulator_geometry.h"
+#include "../manipulator_library_intern.h"
+
+/* to use custom dials exported to geom_dial_manipulator.c */
+// #define USE_MANIPULATOR_CUSTOM_DIAL
+
+static int manipulator_dial_modal(
+ bContext *C, wmManipulator *mpr, const wmEvent *event,
+ eWM_ManipulatorTweak tweak_flag);
+
+typedef struct DialInteraction {
+ float init_mval[2];
+
+ /* only for when using properties */
+ float init_prop_angle;
+
+ /* cache the last angle to detect rotations bigger than -/+ PI */
+ float last_angle;
+ /* number of full rotations */
+ int rotations;
+
+ /* final output values, used for drawing */
+ struct {
+ float angle_ofs;
+ float angle_delta;
+ } output;
+} DialInteraction;
+
+#define DIAL_WIDTH 1.0f
+#define DIAL_RESOLUTION 32
+
+/**
+ * We can't use this for the #wmManipulatorType.matrix_basis_get callback, it conflicts with depth picking.
+ */
+static void dial_calc_matrix(const wmManipulator *mpr, float mat[4][4])
+{
+ float rot[3][3];
+ const float up[3] = {0.0f, 0.0f, 1.0f};
+
+ rotation_between_vecs_to_mat3(rot, up, mpr->matrix_basis[2]);
+ copy_m4_m3(mat, rot);
+ copy_v3_v3(mat[3], mpr->matrix_basis[3]);
+}
+
+/* -------------------------------------------------------------------- */
+
+static void dial_geom_draw(
+ const wmManipulator *mpr, const float color[4], const bool select,
+ float axis_modal_mat[4][4], float clip_plane[4])
+{
+#ifdef USE_MANIPULATOR_CUSTOM_DIAL
+ UNUSED_VARS(dial, col, axis_modal_mat, clip_plane);
+ wm_manipulator_geometryinfo_draw(&wm_manipulator_geom_data_dial, select);
+#else
+ const int draw_options = RNA_enum_get(mpr->ptr, "draw_options");
+ const bool filled = (draw_options & ED_MANIPULATOR_DIAL_DRAW_FLAG_FILL) != 0;
+
+ glLineWidth(mpr->line_width);
+
+ Gwn_VertFormat *format = immVertexFormat();
+ uint pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ if (clip_plane) {
+ immBindBuiltinProgram(GPU_SHADER_3D_CLIPPED_UNIFORM_COLOR);
+ float clip_plane_f[4] = {clip_plane[0], clip_plane[1], clip_plane[2], clip_plane[3]};
+ immUniform4fv("ClipPlane", clip_plane_f);
+ immUniformMatrix4fv("ModelMatrix", axis_modal_mat);
+ }
+ else {
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ }
+
+ immUniformColor4fv(color);
+
+ if (filled) {
+ imm_draw_circle_fill_2d(pos, 0, 0, 1.0, DIAL_RESOLUTION);
+ }
+ else {
+ imm_draw_circle_wire_2d(pos, 0, 0, 1.0, DIAL_RESOLUTION);
+ }
+
+ immUnbindProgram();
+
+ UNUSED_VARS(select);
+#endif
+}
+
+/**
+ * Draws a line from (0, 0, 0) to \a co_outer, at \a angle.
+ */
+static void dial_ghostarc_draw_helpline(const float angle, const float co_outer[3], const float color[4])
+{
+ glLineWidth(1.0f);
+
+ gpuPushMatrix();
+ gpuRotate3f(RAD2DEGF(angle), 0.0f, 0.0f, -1.0f);
+
+ uint pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+
+ immUniformColor4fv(color);
+
+ immBegin(GWN_PRIM_LINE_STRIP, 2);
+ immVertex3f(pos, 0.0f, 0.0f, 0.0f);
+ immVertex3fv(pos, co_outer);
+ immEnd();
+
+ immUnbindProgram();
+
+ gpuPopMatrix();
+}
+
+static void dial_ghostarc_draw(
+ const wmManipulator *mpr, const float angle_ofs, const float angle_delta, const float color[4])
+{
+ const float width_inner = DIAL_WIDTH - mpr->line_width * 0.5f / U.manipulator_size;
+
+ Gwn_VertFormat *format = immVertexFormat();
+ uint pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformColor4fv(color);
+ imm_draw_disk_partial_fill_2d(
+ pos, 0, 0, 0.0, width_inner, DIAL_RESOLUTION, RAD2DEGF(angle_ofs), RAD2DEGF(angle_delta));
+ immUnbindProgram();
+}
+
+static void dial_ghostarc_get_angles(
+ const struct Depsgraph *depsgraph,
+ const wmManipulator *mpr,
+ const wmEvent *event,
+ const ARegion *ar, const View3D *v3d,
+ float mat[4][4], const float co_outer[3],
+ float *r_start, float *r_delta)
+{
+ DialInteraction *inter = mpr->interaction_data;
+ const RegionView3D *rv3d = ar->regiondata;
+ const float mval[2] = {event->x - ar->winrct.xmin, event->y - ar->winrct.ymin};
+
+ /* we might need to invert the direction of the angles */
+ float view_vec[3], axis_vec[3];
+ ED_view3d_global_to_vector(rv3d, mpr->matrix_basis[3], view_vec);
+ normalize_v3_v3(axis_vec, mpr->matrix_basis[2]);
+
+ float proj_outer_rel[3];
+ mul_v3_project_m4_v3(proj_outer_rel, mat, co_outer);
+ sub_v3_v3(proj_outer_rel, mpr->matrix_basis[3]);
+
+ float proj_mval_new_rel[3];
+ float proj_mval_init_rel[3];
+ float dial_plane[4];
+ float ray_co[3], ray_no[3];
+ float ray_lambda;
+
+ plane_from_point_normal_v3(dial_plane, mpr->matrix_basis[3], axis_vec);
+
+ if (!ED_view3d_win_to_ray(depsgraph, ar, v3d, inter->init_mval, ray_co, ray_no, false) ||
+ !isect_ray_plane_v3(ray_co, ray_no, dial_plane, &ray_lambda, false))
+ {
+ goto fail;
+ }
+ madd_v3_v3v3fl(proj_mval_init_rel, ray_co, ray_no, ray_lambda);
+ sub_v3_v3(proj_mval_init_rel, mpr->matrix_basis[3]);
+
+ if (!ED_view3d_win_to_ray(depsgraph, ar, v3d, mval, ray_co, ray_no, false) ||
+ !isect_ray_plane_v3(ray_co, ray_no, dial_plane, &ray_lambda, false))
+ {
+ goto fail;
+ }
+ madd_v3_v3v3fl(proj_mval_new_rel, ray_co, ray_no, ray_lambda);
+ sub_v3_v3(proj_mval_new_rel, mpr->matrix_basis[3]);
+
+ const int draw_options = RNA_enum_get(mpr->ptr, "draw_options");
+
+ /* Start direction from mouse or set by user */
+ const float *proj_init_rel =
+ (draw_options & ED_MANIPULATOR_DIAL_DRAW_FLAG_ANGLE_START_Y) ?
+ mpr->matrix_basis[1] : proj_mval_init_rel;
+
+ /* return angles */
+ const float start = angle_wrap_rad(angle_signed_on_axis_v3v3_v3(proj_outer_rel, proj_init_rel, axis_vec));
+ const float delta = angle_wrap_rad(angle_signed_on_axis_v3v3_v3(proj_mval_init_rel, proj_mval_new_rel, axis_vec));
+
+ /* Change of sign, we passed the 180 degree threshold. This means we need to add a turn
+ * to distinguish between transition from 0 to -1 and -PI to +PI, use comparison with PI/2.
+ * Logic taken from BLI_dial_angle */
+ if ((delta * inter->last_angle < 0.0f) &&
+ (fabsf(inter->last_angle) > (float)M_PI_2))
+ {
+ if (inter->last_angle < 0.0f)
+ inter->rotations--;
+ else
+ inter->rotations++;
+ }
+ inter->last_angle = delta;
+
+ *r_start = start;
+ *r_delta = fmod(delta + 2.0f * (float)M_PI * inter->rotations, 2 * (float)M_PI);
+ return;
+
+ /* If we can't project (unlikely). */
+fail:
+ *r_start = 0.0;
+ *r_delta = 0.0;
+}
+
+static void dial_draw_intern(
+ const bContext *C, wmManipulator *mpr,
+ const bool select, const bool highlight, float clip_plane[4])
+{
+ float matrix_basis_adjust[4][4];
+ float matrix_final[4][4];
+ float color[4];
+
+ BLI_assert(CTX_wm_area(C)->spacetype == SPACE_VIEW3D);
+
+ manipulator_color_get(mpr, highlight, color);
+
+ dial_calc_matrix(mpr, matrix_basis_adjust);
+
+ WM_manipulator_calc_matrix_final_params(
+ mpr, &((struct WM_ManipulatorMatrixParams) {
+ .matrix_basis = (void *)matrix_basis_adjust,
+ }), matrix_final);
+
+ gpuPushMatrix();
+ gpuMultMatrix(matrix_final);
+
+ /* draw rotation indicator arc first */
+ if ((mpr->flag & WM_MANIPULATOR_DRAW_VALUE) &&
+ (mpr->state & WM_MANIPULATOR_STATE_MODAL))
+ {
+ const float co_outer[4] = {0.0f, DIAL_WIDTH, 0.0f}; /* coordinate at which the arc drawing will be started */
+
+ DialInteraction *inter = mpr->interaction_data;
+
+ /* XXX, View3D rotation manipulator doesn't call modal. */
+ if (!WM_manipulator_target_property_is_valid_any(mpr)) {
+ wmWindow *win = CTX_wm_window(C);
+ manipulator_dial_modal((bContext *)C, mpr, win->eventstate, 0);
+ }
+
+ float angle_ofs = inter->output.angle_ofs;
+ float angle_delta = inter->output.angle_delta;
+
+ /* draw! */
+ for (int i = 0; i < 2; i++) {
+ dial_ghostarc_draw(mpr, angle_ofs, angle_delta, (const float [4]){0.8f, 0.8f, 0.8f, 0.4f});
+
+ dial_ghostarc_draw_helpline(angle_ofs, co_outer, color); /* starting position */
+ dial_ghostarc_draw_helpline(angle_ofs + angle_delta, co_outer, color); /* starting position + current value */
+
+ if (i == 0) {
+ const int draw_options = RNA_enum_get(mpr->ptr, "draw_options");
+ if ((draw_options & ED_MANIPULATOR_DIAL_DRAW_FLAG_ANGLE_MIRROR) == 0) {
+ break;
+ }
+ }
+
+ angle_ofs += (float)M_PI;
+ }
+ }
+
+ /* draw actual dial manipulator */
+ dial_geom_draw(mpr, color, select, matrix_basis_adjust, clip_plane);
+
+ gpuPopMatrix();
+}
+
+static void manipulator_dial_draw_select(const bContext *C, wmManipulator *mpr, int select_id)
+{
+ float clip_plane_buf[4];
+ const int draw_options = RNA_enum_get(mpr->ptr, "draw_options");
+ float *clip_plane = (draw_options & ED_MANIPULATOR_DIAL_DRAW_FLAG_CLIP) ? clip_plane_buf : NULL;
+
+ /* enable clipping if needed */
+ if (clip_plane) {
+ ARegion *ar = CTX_wm_region(C);
+ RegionView3D *rv3d = ar->regiondata;
+
+ copy_v3_v3(clip_plane, rv3d->viewinv[2]);
+ clip_plane[3] = -dot_v3v3(rv3d->viewinv[2], mpr->matrix_basis[3]);
+ glEnable(GL_CLIP_DISTANCE0);
+ }
+
+ GPU_select_load_id(select_id);
+ dial_draw_intern(C, mpr, true, false, clip_plane);
+
+ if (clip_plane) {
+ glDisable(GL_CLIP_DISTANCE0);
+ }
+}
+
+static void manipulator_dial_draw(const bContext *C, wmManipulator *mpr)
+{
+ const bool is_modal = mpr->state & WM_MANIPULATOR_STATE_MODAL;
+ const bool is_highlight = (mpr->state & WM_MANIPULATOR_STATE_HIGHLIGHT) != 0;
+ float clip_plane_buf[4];
+ const int draw_options = RNA_enum_get(mpr->ptr, "draw_options");
+ float *clip_plane = (!is_modal && (draw_options & ED_MANIPULATOR_DIAL_DRAW_FLAG_CLIP)) ? clip_plane_buf : NULL;
+
+ /* enable clipping if needed */
+ if (clip_plane) {
+ ARegion *ar = CTX_wm_region(C);
+ RegionView3D *rv3d = ar->regiondata;
+
+ copy_v3_v3(clip_plane, rv3d->viewinv[2]);
+ clip_plane[3] = -dot_v3v3(rv3d->viewinv[2], mpr->matrix_basis[3]);
+ clip_plane[3] -= 0.02f * mpr->scale_final;
+
+ glEnable(GL_CLIP_DISTANCE0);
+ }
+
+ glEnable(GL_BLEND);
+ dial_draw_intern(C, mpr, false, is_highlight, clip_plane);
+ glDisable(GL_BLEND);
+
+ if (clip_plane) {
+ glDisable(GL_CLIP_DISTANCE0);
+ }
+}
+
+static int manipulator_dial_modal(
+ bContext *C, wmManipulator *mpr, const wmEvent *event,
+ eWM_ManipulatorTweak UNUSED(tweak_flag))
+{
+ const float co_outer[4] = {0.0f, DIAL_WIDTH, 0.0f}; /* coordinate at which the arc drawing will be started */
+ float angle_ofs, angle_delta;
+
+ float matrix[4][4];
+
+ dial_calc_matrix(mpr, matrix);
+
+ dial_ghostarc_get_angles(
+ CTX_data_depsgraph(C),
+ mpr, event, CTX_wm_region(C), CTX_wm_view3d(C), matrix, co_outer, &angle_ofs, &angle_delta);
+
+ DialInteraction *inter = mpr->interaction_data;
+
+ inter->output.angle_delta = angle_delta;
+ inter->output.angle_ofs = angle_ofs;
+
+ /* set the property for the operator and call its modal function */
+ wmManipulatorProperty *mpr_prop = WM_manipulator_target_property_find(mpr, "offset");
+ if (WM_manipulator_target_property_is_valid(mpr_prop)) {
+ WM_manipulator_target_property_value_set(C, mpr, mpr_prop, inter->init_prop_angle + angle_delta);
+ }
+ return OPERATOR_RUNNING_MODAL;
+}
+
+
+static void manipulator_dial_setup(wmManipulator *mpr)
+{
+ const float dir_default[3] = {0.0f, 0.0f, 1.0f};
+
+ /* defaults */
+ copy_v3_v3(mpr->matrix_basis[2], dir_default);
+}
+
+static int manipulator_dial_invoke(
+ bContext *UNUSED(C), wmManipulator *mpr, const wmEvent *event)
+{
+ DialInteraction *inter = MEM_callocN(sizeof(DialInteraction), __func__);
+
+ inter->init_mval[0] = event->mval[0];
+ inter->init_mval[1] = event->mval[1];
+
+ wmManipulatorProperty *mpr_prop = WM_manipulator_target_property_find(mpr, "offset");
+ if (WM_manipulator_target_property_is_valid(mpr_prop)) {
+ inter->init_prop_angle = WM_manipulator_target_property_value_get(mpr, mpr_prop);
+ }
+
+ mpr->interaction_data = inter;
+
+ return OPERATOR_RUNNING_MODAL;
+}
+
+/* -------------------------------------------------------------------- */
+/** \name Dial Manipulator API
+ *
+ * \{ */
+
+static void MANIPULATOR_WT_dial_3d(wmManipulatorType *wt)
+{
+ /* identifiers */
+ wt->idname = "MANIPULATOR_WT_dial_3d";
+
+ /* api callbacks */
+ wt->draw = manipulator_dial_draw;
+ wt->draw_select = manipulator_dial_draw_select;
+ wt->setup = manipulator_dial_setup;
+ wt->invoke = manipulator_dial_invoke;
+ wt->modal = manipulator_dial_modal;
+
+ wt->struct_size = sizeof(wmManipulator);
+
+ /* rna */
+ static EnumPropertyItem rna_enum_draw_options[] = {
+ {ED_MANIPULATOR_DIAL_DRAW_FLAG_CLIP, "CLIP", 0, "Clipped", ""},
+ {ED_MANIPULATOR_DIAL_DRAW_FLAG_FILL, "FILL", 0, "Filled", ""},
+ {ED_MANIPULATOR_DIAL_DRAW_FLAG_ANGLE_MIRROR, "ANGLE_MIRROR", 0, "Angle Mirror", ""},
+ {ED_MANIPULATOR_DIAL_DRAW_FLAG_ANGLE_START_Y, "ANGLE_START_Y", 0, "Angle Start Y", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
+ RNA_def_enum_flag(wt->srna, "draw_options", rna_enum_draw_options, 0, "Draw Options", "");
+
+ WM_manipulatortype_target_property_def(wt, "offset", PROP_FLOAT, 1);
+}
+
+void ED_manipulatortypes_dial_3d(void)
+{
+ WM_manipulatortype_append(MANIPULATOR_WT_dial_3d);
+}
+
+/** \} */
diff --git a/source/blender/editors/manipulator_library/manipulator_types/grab3d_manipulator.c b/source/blender/editors/manipulator_library/manipulator_types/grab3d_manipulator.c
new file mode 100644
index 00000000000..4e62c9c396e
--- /dev/null
+++ b/source/blender/editors/manipulator_library/manipulator_types/grab3d_manipulator.c
@@ -0,0 +1,374 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file grab3d_manipulator.c
+ * \ingroup wm
+ *
+ * \name Grab Manipulator
+ *
+ * 3D Manipulator, also works in 2D views.
+ *
+ * \brief Simple manipulator to grab and translate.
+ *
+ * - `matrix[0]` is derived from Y and Z.
+ * - `matrix[1]` currently not used.
+ * - `matrix[2]` is the widget direction (for all manipulators).
+ *
+ */
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_math.h"
+
+#include "BKE_context.h"
+
+#include "BIF_gl.h"
+#include "BIF_glutil.h"
+
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+#include "GPU_matrix.h"
+#include "GPU_select.h"
+
+#include "RNA_access.h"
+#include "RNA_define.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "ED_screen.h"
+#include "ED_view3d.h"
+#include "ED_manipulator_library.h"
+
+/* own includes */
+#include "../manipulator_geometry.h"
+#include "../manipulator_library_intern.h"
+
+typedef struct GrabManipulator3D {
+ wmManipulator manipulator;
+ /* Added to 'matrix_basis' when calculating the matrix. */
+ float prop_co[3];
+} GrabManipulator3D;
+
+static void manipulator_grab_matrix_basis_get(const wmManipulator *mpr, float r_matrix[4][4])
+{
+ GrabManipulator3D *grab = (GrabManipulator3D *)mpr;
+
+ copy_m4_m4(r_matrix, grab->manipulator.matrix_basis);
+ add_v3_v3(r_matrix[3], grab->prop_co);
+}
+
+static int manipulator_grab_modal(
+ bContext *C, wmManipulator *mpr, const wmEvent *event,
+ eWM_ManipulatorTweak tweak_flag);
+
+typedef struct GrabInteraction {
+ float init_mval[2];
+
+ /* only for when using properties */
+ float init_prop_co[3];
+
+ float init_matrix_final[4][4];
+} GrabInteraction;
+
+#define DIAL_RESOLUTION 32
+
+/* -------------------------------------------------------------------- */
+
+static void grab_geom_draw(
+ const wmManipulator *mpr, const float color[4], const bool select, const int draw_options)
+{
+#ifdef USE_MANIPULATOR_CUSTOM_DIAL
+ UNUSED_VARS(grab3d, col, axis_modal_mat);
+ wm_manipulator_geometryinfo_draw(&wm_manipulator_geom_data_grab3d, select);
+#else
+ const int draw_style = RNA_enum_get(mpr->ptr, "draw_style");
+ const bool filled = (draw_options & ED_MANIPULATOR_GRAB_DRAW_FLAG_FILL) != 0;
+
+ glLineWidth(mpr->line_width);
+
+ Gwn_VertFormat *format = immVertexFormat();
+ uint pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+
+ immUniformColor4fv(color);
+
+ if (draw_style == ED_MANIPULATOR_GRAB_STYLE_RING_2D) {
+ if (filled) {
+ imm_draw_circle_fill_2d(pos, 0, 0, 1.0f, DIAL_RESOLUTION);
+ }
+ else {
+ imm_draw_circle_wire_2d(pos, 0, 0, 1.0f, DIAL_RESOLUTION);
+ }
+ }
+ else if (draw_style == ED_MANIPULATOR_GRAB_STYLE_CROSS_2D) {
+ immBegin(GWN_PRIM_LINES, 4);
+ immVertex2f(pos, 1.0f, 1.0f);
+ immVertex2f(pos, -1.0f, -1.0f);
+
+ immVertex2f(pos, -1.0f, 1.0f);
+ immVertex2f(pos, 1.0f, -1.0f);
+ immEnd();
+ }
+ else {
+ BLI_assert(0);
+ }
+
+ immUnbindProgram();
+
+ UNUSED_VARS(select);
+#endif
+}
+
+static void grab3d_get_translate(
+ const wmManipulator *mpr, const wmEvent *event, const ARegion *ar,
+ float co_delta[3])
+{
+ GrabInteraction *inter = mpr->interaction_data;
+ const float mval_delta[2] = {
+ event->mval[0] - inter->init_mval[0],
+ event->mval[1] - inter->init_mval[1],
+ };
+
+ RegionView3D *rv3d = ar->regiondata;
+ float co_ref[3];
+ mul_v3_mat3_m4v3(co_ref, mpr->matrix_space, inter->init_prop_co);
+ const float zfac = ED_view3d_calc_zfac(rv3d, co_ref, NULL);
+
+ ED_view3d_win_to_delta(ar, mval_delta, co_delta, zfac);
+
+ float matrix_space_inv[3][3];
+ copy_m3_m4(matrix_space_inv, mpr->matrix_space);
+ invert_m3(matrix_space_inv);
+ mul_m3_v3(matrix_space_inv, co_delta);
+}
+
+static void grab3d_draw_intern(
+ const bContext *C, wmManipulator *mpr,
+ const bool select, const bool highlight)
+{
+ GrabInteraction *inter = mpr->interaction_data;
+ const int draw_options = RNA_enum_get(mpr->ptr, "draw_options");
+ const bool align_view = (draw_options & ED_MANIPULATOR_GRAB_DRAW_FLAG_ALIGN_VIEW) != 0;
+ float color[4];
+ float matrix_final[4][4];
+ float matrix_align[4][4];
+
+ manipulator_color_get(mpr, highlight, color);
+ WM_manipulator_calc_matrix_final(mpr, matrix_final);
+
+ gpuPushMatrix();
+ gpuMultMatrix(matrix_final);
+
+ if (align_view) {
+ float matrix_final_unit[4][4];
+ RegionView3D *rv3d = CTX_wm_region_view3d(C);
+ normalize_m4_m4(matrix_final_unit, matrix_final);
+ mul_m4_m4m4(matrix_align, rv3d->viewmat, matrix_final_unit);
+ zero_v3(matrix_align[3]);
+ transpose_m4(matrix_align);
+ gpuMultMatrix(matrix_align);
+ }
+
+ glEnable(GL_BLEND);
+ grab_geom_draw(mpr, color, select, draw_options);
+ glDisable(GL_BLEND);
+ gpuPopMatrix();
+
+ if (mpr->interaction_data) {
+ gpuPushMatrix();
+ gpuMultMatrix(inter->init_matrix_final);
+
+ if (align_view) {
+ gpuMultMatrix(matrix_align);
+ }
+
+ glEnable(GL_BLEND);
+ grab_geom_draw(mpr, (const float [4]){0.5f, 0.5f, 0.5f, 0.5f}, select, draw_options);
+ glDisable(GL_BLEND);
+ gpuPopMatrix();
+ }
+}
+
+static void manipulator_grab_draw_select(const bContext *C, wmManipulator *mpr, int select_id)
+{
+ GPU_select_load_id(select_id);
+ grab3d_draw_intern(C, mpr, true, false);
+}
+
+static void manipulator_grab_draw(const bContext *C, wmManipulator *mpr)
+{
+ const bool is_modal = mpr->state & WM_MANIPULATOR_STATE_MODAL;
+ const bool is_highlight = (mpr->state & WM_MANIPULATOR_STATE_HIGHLIGHT) != 0;
+
+ (void)is_modal;
+
+ glEnable(GL_BLEND);
+ grab3d_draw_intern(C, mpr, false, is_highlight);
+ glDisable(GL_BLEND);
+}
+
+static int manipulator_grab_modal(
+ bContext *C, wmManipulator *mpr, const wmEvent *event,
+ eWM_ManipulatorTweak UNUSED(tweak_flag))
+{
+ GrabManipulator3D *grab = (GrabManipulator3D *)mpr;
+ GrabInteraction *inter = mpr->interaction_data;
+ ARegion *ar = CTX_wm_region(C);
+
+ float prop_delta[3];
+ if (CTX_wm_area(C)->spacetype == SPACE_VIEW3D) {
+ grab3d_get_translate(mpr, event, ar, prop_delta);
+ }
+ else {
+ float mval_proj_init[2], mval_proj_curr[2];
+ if ((manipulator_window_project_2d(
+ C, mpr, inter->init_mval, 2, false, mval_proj_init) == false) ||
+ (manipulator_window_project_2d(
+ C, mpr, (const float[2]){UNPACK2(event->mval)}, 2, false, mval_proj_curr) == false))
+ {
+ return OPERATOR_RUNNING_MODAL;
+ }
+ sub_v2_v2v2(prop_delta, mval_proj_curr, mval_proj_init);
+ prop_delta[2] = 0.0f;
+ }
+ add_v3_v3v3(grab->prop_co, inter->init_prop_co, prop_delta);
+
+ /* set the property for the operator and call its modal function */
+ wmManipulatorProperty *mpr_prop = WM_manipulator_target_property_find(mpr, "offset");
+ if (WM_manipulator_target_property_is_valid(mpr_prop)) {
+ WM_manipulator_target_property_value_set_array(C, mpr, mpr_prop, grab->prop_co);
+ }
+ else {
+ zero_v3(grab->prop_co);
+ }
+
+ ED_region_tag_redraw(ar);
+
+ return OPERATOR_RUNNING_MODAL;
+}
+
+static int manipulator_grab_invoke(
+ bContext *UNUSED(C), wmManipulator *mpr, const wmEvent *event)
+{
+ GrabInteraction *inter = MEM_callocN(sizeof(GrabInteraction), __func__);
+
+ inter->init_mval[0] = event->mval[0];
+ inter->init_mval[1] = event->mval[1];
+
+#if 0
+ copy_v3_v3(inter->init_prop_co, grab->prop_co);
+#else
+ wmManipulatorProperty *mpr_prop = WM_manipulator_target_property_find(mpr, "offset");
+ if (WM_manipulator_target_property_is_valid(mpr_prop)) {
+ WM_manipulator_target_property_value_get_array(mpr, mpr_prop, inter->init_prop_co);
+ }
+#endif
+
+ WM_manipulator_calc_matrix_final(mpr, inter->init_matrix_final);
+
+ mpr->interaction_data = inter;
+
+ return OPERATOR_RUNNING_MODAL;
+}
+
+
+static int manipulator_grab_test_select(
+ bContext *C, wmManipulator *mpr, const wmEvent *event)
+{
+ float point_local[2];
+
+ if (manipulator_window_project_2d(
+ C, mpr, (const float[2]){UNPACK2(event->mval)}, 2, true, point_local) == false)
+ {
+ return -1;
+ }
+
+ /* The 'mpr->scale_final' is already applied when projecting. */
+ if (len_squared_v2(point_local) < 1.0f) {
+ return 0;
+ }
+
+ return -1;
+}
+
+static void manipulator_grab_property_update(wmManipulator *mpr, wmManipulatorProperty *mpr_prop)
+{
+ GrabManipulator3D *grab = (GrabManipulator3D *)mpr;
+ if (WM_manipulator_target_property_is_valid(mpr_prop)) {
+ WM_manipulator_target_property_value_get_array(mpr, mpr_prop, grab->prop_co);
+ }
+ else {
+ zero_v3(grab->prop_co);
+ }
+}
+
+static int manipulator_grab_cursor_get(wmManipulator *UNUSED(mpr))
+{
+ return BC_HANDCURSOR;
+}
+
+/* -------------------------------------------------------------------- */
+/** \name Grab Manipulator API
+ *
+ * \{ */
+
+static void MANIPULATOR_WT_grab_3d(wmManipulatorType *wt)
+{
+ /* identifiers */
+ wt->idname = "MANIPULATOR_WT_grab_3d";
+
+ /* api callbacks */
+ wt->draw = manipulator_grab_draw;
+ wt->draw_select = manipulator_grab_draw_select;
+ wt->test_select = manipulator_grab_test_select;
+ wt->matrix_basis_get = manipulator_grab_matrix_basis_get;
+ wt->invoke = manipulator_grab_invoke;
+ wt->property_update = manipulator_grab_property_update;
+ wt->modal = manipulator_grab_modal;
+ wt->cursor_get = manipulator_grab_cursor_get;
+
+ wt->struct_size = sizeof(GrabManipulator3D);
+
+ /* rna */
+ static EnumPropertyItem rna_enum_draw_style[] = {
+ {ED_MANIPULATOR_GRAB_STYLE_RING_2D, "RING_2D", 0, "Ring", ""},
+ {ED_MANIPULATOR_GRAB_STYLE_CROSS_2D, "CROSS_2D", 0, "Ring", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
+ static EnumPropertyItem rna_enum_draw_options[] = {
+ {ED_MANIPULATOR_GRAB_DRAW_FLAG_FILL, "FILL", 0, "Filled", ""},
+ {ED_MANIPULATOR_GRAB_DRAW_FLAG_ALIGN_VIEW, "ALIGN_VIEW", 0, "Align View", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
+
+ RNA_def_enum(wt->srna, "draw_style", rna_enum_draw_style, ED_MANIPULATOR_GRAB_STYLE_RING_2D, "Draw Style", "");
+ RNA_def_enum_flag(wt->srna, "draw_options", rna_enum_draw_options, 0, "Draw Options", "");
+
+ WM_manipulatortype_target_property_def(wt, "offset", PROP_FLOAT, 3);
+}
+
+void ED_manipulatortypes_grab_3d(void)
+{
+ WM_manipulatortype_append(MANIPULATOR_WT_grab_3d);
+}
+
+/** \} */ // Grab Manipulator API
diff --git a/source/blender/editors/manipulator_library/manipulator_types/primitive3d_manipulator.c b/source/blender/editors/manipulator_library/manipulator_types/primitive3d_manipulator.c
new file mode 100644
index 00000000000..531cf742e6f
--- /dev/null
+++ b/source/blender/editors/manipulator_library/manipulator_types/primitive3d_manipulator.c
@@ -0,0 +1,190 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file primitive3d_manipulator.c
+ * \ingroup wm
+ *
+ * \name Primitive Manipulator
+ *
+ * 3D Manipulator
+ *
+ * \brief Manipulator with primitive drawing type (plane, cube, etc.).
+ * Currently only plane primitive supported without own handling, use with operator only.
+ */
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_math.h"
+
+#include "DNA_view3d_types.h"
+
+#include "BKE_context.h"
+
+#include "BIF_gl.h"
+
+#include "GPU_immediate.h"
+#include "GPU_matrix.h"
+#include "GPU_select.h"
+
+#include "RNA_access.h"
+#include "RNA_define.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "ED_manipulator_library.h"
+
+/* own includes */
+#include "../manipulator_library_intern.h"
+
+static float verts_plane[4][3] = {
+ {-1, -1, 0},
+ { 1, -1, 0},
+ { 1, 1, 0},
+ {-1, 1, 0},
+};
+
+
+/* -------------------------------------------------------------------- */
+
+static void manipulator_primitive_draw_geom(
+ const float col_inner[4], const float col_outer[4], const int draw_style)
+{
+ float (*verts)[3];
+ uint vert_count = 0;
+
+ if (draw_style == ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE) {
+ verts = verts_plane;
+ vert_count = ARRAY_SIZE(verts_plane);
+ }
+
+ if (vert_count > 0) {
+ uint pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ wm_manipulator_vec_draw(col_inner, verts, vert_count, pos, GWN_PRIM_TRI_FAN);
+ wm_manipulator_vec_draw(col_outer, verts, vert_count, pos, GWN_PRIM_LINE_LOOP);
+ immUnbindProgram();
+ }
+}
+
+static void manipulator_primitive_draw_intern(
+ wmManipulator *mpr, const bool UNUSED(select),
+ const bool highlight)
+{
+ float color_inner[4], color_outer[4];
+ float matrix_final[4][4];
+ const int draw_style = RNA_enum_get(mpr->ptr, "draw_style");
+
+ manipulator_color_get(mpr, highlight, color_outer);
+ copy_v4_v4(color_inner, color_outer);
+ color_inner[3] *= 0.5f;
+
+ WM_manipulator_calc_matrix_final(mpr, matrix_final);
+
+ gpuPushMatrix();
+ gpuMultMatrix(matrix_final);
+
+ glEnable(GL_BLEND);
+ manipulator_primitive_draw_geom(color_inner, color_outer, draw_style);
+ glDisable(GL_BLEND);
+
+ gpuPopMatrix();
+
+ if (mpr->interaction_data) {
+ ManipulatorInteraction *inter = mpr->interaction_data;
+
+ copy_v4_fl(color_inner, 0.5f);
+ copy_v3_fl(color_outer, 0.5f);
+ color_outer[3] = 0.8f;
+
+ gpuPushMatrix();
+ gpuMultMatrix(inter->init_matrix_final);
+
+ glEnable(GL_BLEND);
+ manipulator_primitive_draw_geom(color_inner, color_outer, draw_style);
+ glDisable(GL_BLEND);
+
+ gpuPopMatrix();
+ }
+}
+
+static void manipulator_primitive_draw_select(
+ const bContext *UNUSED(C), wmManipulator *mpr,
+ int select_id)
+{
+ GPU_select_load_id(select_id);
+ manipulator_primitive_draw_intern(mpr, true, false);
+}
+
+static void manipulator_primitive_draw(const bContext *UNUSED(C), wmManipulator *mpr)
+{
+ manipulator_primitive_draw_intern(
+ mpr, false,
+ (mpr->state & WM_MANIPULATOR_STATE_HIGHLIGHT));
+}
+
+static void manipulator_primitive_setup(wmManipulator *mpr)
+{
+ mpr->flag |= WM_MANIPULATOR_DRAW_MODAL;
+}
+
+static int manipulator_primitive_invoke(
+ bContext *UNUSED(C), wmManipulator *mpr, const wmEvent *UNUSED(event))
+{
+ ManipulatorInteraction *inter = MEM_callocN(sizeof(ManipulatorInteraction), __func__);
+
+ WM_manipulator_calc_matrix_final(mpr, inter->init_matrix_final);
+
+ mpr->interaction_data = inter;
+
+ return OPERATOR_RUNNING_MODAL;
+}
+
+/* -------------------------------------------------------------------- */
+/** \name Primitive Manipulator API
+ *
+ * \{ */
+
+static void MANIPULATOR_WT_primitive_3d(wmManipulatorType *wt)
+{
+ /* identifiers */
+ wt->idname = "MANIPULATOR_WT_primitive_3d";
+
+ /* api callbacks */
+ wt->draw = manipulator_primitive_draw;
+ wt->draw_select = manipulator_primitive_draw_select;
+ wt->setup = manipulator_primitive_setup;
+ wt->invoke = manipulator_primitive_invoke;
+
+ wt->struct_size = sizeof(wmManipulator);
+
+ static EnumPropertyItem rna_enum_draw_style[] = {
+ {ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE, "PLANE", 0, "Plane", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
+ RNA_def_enum(wt->srna, "draw_style", rna_enum_draw_style, ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE, "Draw Style", "");
+}
+
+void ED_manipulatortypes_primitive_3d(void)
+{
+ WM_manipulatortype_append(MANIPULATOR_WT_primitive_3d);
+}
+
+/** \} */
diff --git a/source/blender/editors/mask/CMakeLists.txt b/source/blender/editors/mask/CMakeLists.txt
index 033d034cf4e..d17df344dc9 100644
--- a/source/blender/editors/mask/CMakeLists.txt
+++ b/source/blender/editors/mask/CMakeLists.txt
@@ -25,6 +25,7 @@ set(INC
../include
../../blenkernel
../../blenlib
+ ../../depsgraph
../../gpu
../../makesdna
../../makesrna
diff --git a/source/blender/editors/mask/mask_add.c b/source/blender/editors/mask/mask_add.c
index 69335195b96..ad1a567f843 100644
--- a/source/blender/editors/mask/mask_add.c
+++ b/source/blender/editors/mask/mask_add.c
@@ -34,9 +34,10 @@
#include "BLI_math.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_mask.h"
+#include "DEG_depsgraph.h"
+
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
#include "DNA_mask_types.h"
@@ -692,7 +693,7 @@ static int add_feather_vertex_exec(bContext *C, wmOperator *op)
WM_event_add_notifier(C, NC_MASK | NA_EDITED, mask);
- DAG_id_tag_update(&mask->id, 0);
+ DEG_id_tag_update(&mask->id, 0);
return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/mask/mask_draw.c b/source/blender/editors/mask/mask_draw.c
index 407c19a3860..c60b673ec69 100644
--- a/source/blender/editors/mask/mask_draw.c
+++ b/source/blender/editors/mask/mask_draw.c
@@ -36,6 +36,7 @@
#include "BLI_math.h"
#include "BLI_rect.h"
#include "BLI_task.h"
+#include "BLI_listbase.h"
#include "BKE_context.h"
#include "BKE_mask.h"
@@ -48,10 +49,13 @@
#include "ED_clip.h"
#include "ED_mask.h" /* own include */
#include "ED_space_api.h"
-#include "BIF_gl.h"
+
#include "BIF_glutil.h"
-#include "GPU_basic_shader.h"
+#include "GPU_immediate.h"
+#include "GPU_draw.h"
+#include "GPU_shader.h"
+#include "GPU_matrix.h"
#include "UI_resources.h"
#include "UI_view2d.h"
@@ -93,40 +97,6 @@ static void mask_spline_feather_color_get(MaskLayer *UNUSED(masklay), MaskSpline
r_rgb[3] = 255;
}
-#if 0
-static void draw_spline_parents(MaskLayer *UNUSED(masklay), MaskSpline *spline)
-{
- int i;
- MaskSplinePoint *points_array = BKE_mask_spline_point_array(spline);
-
- if (!spline->tot_point)
- return;
-
- GPU_basic_shader_bind_enable(GPU_SHADER_LINE | GPU_SHADER_STIPPLE);
- GPU_basic_shader_line_stipple(1, 0xAAAA);
-
- glColor3ub(0, 0, 0);
- glBegin(GL_LINES);
-
- for (i = 0; i < spline->tot_point; i++) {
- MaskSplinePoint *point = &points_array[i];
- BezTriple *bezt = &point->bezt;
-
- if (point->parent.id) {
- glVertex2f(bezt->vec[1][0],
- bezt->vec[1][1]);
-
- glVertex2f(bezt->vec[1][0] - point->parent.offset[0],
- bezt->vec[1][1] - point->parent.offset[1]);
- }
- }
-
- glEnd();
-
- GPU_basic_shader_bind_disable(GPU_SHADER_LINE | GPU_SHADER_STIPPLE);
-}
-#endif
-
static void mask_point_undistort_pos(SpaceClip *sc, float r_co[2], const float co[2])
{
BKE_mask_coord_to_movieclip(sc->clip, &sc->user, r_co, co);
@@ -134,46 +104,9 @@ static void mask_point_undistort_pos(SpaceClip *sc, float r_co[2], const float c
BKE_mask_coord_from_movieclip(sc->clip, &sc->user, r_co, r_co);
}
-static void draw_circle(const float x, const float y,
- const float size, const bool fill,
- const float xscale, const float yscale)
-{
- static GLuint wire_displist = 0;
- static GLuint fill_displist = 0;
- GLuint displist = fill ? fill_displist : wire_displist;
-
- /* Initialize round circle shape. */
- if (displist == 0) {
- GLUquadricObj *qobj;
-
- displist = glGenLists(1);
- glNewList(displist, GL_COMPILE);
-
- qobj = gluNewQuadric();
- gluQuadricDrawStyle(qobj, fill ? GLU_FILL : GLU_SILHOUETTE);
- gluDisk(qobj, 0, 0.7, 8, 1);
- gluDeleteQuadric(qobj);
-
- glEndList();
-
- if (fill) {
- fill_displist = displist;
- }
- else {
- wire_displist = displist;
- }
- }
-
- glPushMatrix();
- glTranslatef(x, y, 0.0f);
- glScalef(1.0f / xscale * size, 1.0f / yscale * size, 1.0f);
- glCallList(displist);
- glPopMatrix();
-}
-
static void draw_single_handle(const MaskLayer *mask_layer, const MaskSplinePoint *point,
const eMaskWhichHandle which_handle, const int draw_type,
- const float handle_size, const float xscale, const float yscale,
+ const float handle_size,
const float point_pos[2], const float handle_pos[2])
{
const BezTriple *bezt = &point->bezt;
@@ -190,54 +123,70 @@ static void draw_single_handle(const MaskLayer *mask_layer, const MaskSplinePoin
return;
}
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ const unsigned char rgb_gray[4] = {0x60, 0x60, 0x60, 0xff};
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor3ubv(rgb_gray);
+
/* this could be split into its own loop */
if (draw_type == MASK_DT_OUTLINE) {
- const unsigned char rgb_gray[4] = {0x60, 0x60, 0x60, 0xff};
- glLineWidth(3);
- glColor4ubv(rgb_gray);
- glBegin(GL_LINES);
- glVertex2fv(point_pos);
- glVertex2fv(handle_pos);
- glEnd();
+ glLineWidth(3.0f);
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2fv(pos, point_pos);
+ immVertex2fv(pos, handle_pos);
+ immEnd();
}
switch (handle_type) {
case HD_FREE:
- UI_ThemeColor(TH_HANDLE_FREE);
+ immUniformThemeColor(TH_HANDLE_FREE);
break;
case HD_AUTO:
- UI_ThemeColor(TH_HANDLE_AUTO);
+ immUniformThemeColor(TH_HANDLE_AUTO);
break;
case HD_ALIGN:
case HD_ALIGN_DOUBLESIDE:
- UI_ThemeColor(TH_HANDLE_ALIGN);
+ immUniformThemeColor(TH_HANDLE_ALIGN);
break;
}
- glLineWidth(1);
- glBegin(GL_LINES);
- glVertex2fv(point_pos);
- glVertex2fv(handle_pos);
- glEnd();
+ glLineWidth(1.0f);
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2fv(pos, point_pos);
+ immVertex2fv(pos, handle_pos);
+ immEnd();
+ immUnbindProgram();
/* draw handle points */
+ immBindBuiltinProgram(GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_OUTLINE_AA);
+ immUniform1f("size", handle_size);
+ immUniform1f("outlineWidth", 1.5f);
+
+ float point_color[4] = { 1.0f, 1.0f, 1.0f, 1.0f }; /* active color by default */
if (MASKPOINT_ISSEL_HANDLE(point, which_handle)) {
- if (point == mask_layer->act_point)
- glColor3f(1.0f, 1.0f, 1.0f);
- else
- UI_ThemeColor(TH_HANDLE_VERTEX_SELECT);
+ if (point != mask_layer->act_point) {
+ UI_GetThemeColor3fv(TH_HANDLE_VERTEX_SELECT, point_color);
+ }
}
else {
- UI_ThemeColor(TH_HANDLE_VERTEX);
+ UI_GetThemeColor3fv(TH_HANDLE_VERTEX, point_color);
}
- draw_circle(handle_pos[0], handle_pos[1], handle_size, false, xscale, yscale);
+ immUniform4fv("outlineColor", point_color);
+ immUniformColor3fvAlpha(point_color, 0.25f);
+
+ immBegin(GWN_PRIM_POINTS, 1);
+ immVertex2fv(pos, handle_pos);
+ immEnd();
+
+ immUnbindProgram();
}
/* return non-zero if spline is selected */
static void draw_spline_points(const bContext *C, MaskLayer *masklay, MaskSpline *spline,
- const char draw_flag, const char draw_type,
- const float xscale, const float yscale)
+ const char draw_flag, const char draw_type)
{
const bool is_spline_sel = (spline->flag & SELECT) && (masklay->restrictflag & MASK_RESTRICT_SELECT) == 0;
const bool is_smooth = (draw_flag & MASK_DRAWFLAG_SMOOTH) != 0;
@@ -247,7 +196,7 @@ static void draw_spline_points(const bContext *C, MaskLayer *masklay, MaskSpline
SpaceClip *sc = CTX_wm_space_clip(C);
bool undistort = false;
- int i, handle_size, tot_feather_point;
+ int tot_feather_point;
float (*feather_points)[2], (*fp)[2];
float min[2], max[2];
@@ -258,22 +207,24 @@ static void draw_spline_points(const bContext *C, MaskLayer *masklay, MaskSpline
undistort = sc->clip && (sc->user.render_flag & MCLIP_PROXY_RENDER_UNDISTORT);
/* TODO, add this to sequence editor */
- handle_size = UI_GetThemeValuef(TH_HANDLE_VERTEX_SIZE) * U.pixelsize;
-
- glPointSize(handle_size);
+ float handle_size = 2.0f * UI_GetThemeValuef(TH_HANDLE_VERTEX_SIZE) * U.pixelsize;
mask_spline_color_get(masklay, spline, is_spline_sel, rgb_spline);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA);
+ immUniform1f("size", 0.7f * handle_size);
+
/* feather points */
feather_points = fp = BKE_mask_spline_feather_points(spline, &tot_feather_point);
- for (i = 0; i < spline->tot_point; i++) {
+ for (int i = 0; i < spline->tot_point; i++) {
/* watch it! this is intentionally not the deform array, only check for sel */
MaskSplinePoint *point = &spline->points[i];
- int j;
-
- for (j = 0; j <= point->tot_uw; j++) {
+ for (int j = 0; j <= point->tot_uw; j++) {
float feather_point[2];
bool sel = false;
@@ -291,32 +242,32 @@ static void draw_spline_points(const bContext *C, MaskLayer *masklay, MaskSpline
if (sel) {
if (point == masklay->act_point)
- glColor3f(1.0f, 1.0f, 1.0f);
+ immUniformColor3f(1.0f, 1.0f, 1.0f);
else
- UI_ThemeColor(TH_HANDLE_VERTEX_SELECT);
+ immUniformThemeColor(TH_HANDLE_VERTEX_SELECT);
}
else {
- UI_ThemeColor(TH_HANDLE_VERTEX);
+ immUniformThemeColor(TH_HANDLE_VERTEX);
}
- glBegin(GL_POINTS);
- glVertex2fv(feather_point);
- glEnd();
+ immBegin(GWN_PRIM_POINTS, 1);
+ immVertex2fv(pos, feather_point);
+ immEnd();
fp++;
}
}
MEM_freeN(feather_points);
+ immUnbindProgram();
+
if (is_smooth) {
glEnable(GL_LINE_SMOOTH);
- glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}
/* control points */
INIT_MINMAX2(min, max);
- for (i = 0; i < spline->tot_point; i++) {
+ for (int i = 0; i < spline->tot_point; i++) {
/* watch it! this is intentionally not the deform array, only check for sel */
MaskSplinePoint *point = &spline->points[i];
@@ -339,7 +290,7 @@ static void draw_spline_points(const bContext *C, MaskLayer *masklay, MaskSpline
mask_point_undistort_pos(sc, handle, handle);
}
draw_single_handle(masklay, point, MASK_WHICH_HANDLE_STICK,
- draw_type, handle_size, xscale, yscale, vert, handle);
+ draw_type, handle_size, vert, handle);
}
else {
float handle_left[2], handle_right[2];
@@ -350,53 +301,62 @@ static void draw_spline_points(const bContext *C, MaskLayer *masklay, MaskSpline
mask_point_undistort_pos(sc, handle_left, handle_left);
}
draw_single_handle(masklay, point, MASK_WHICH_HANDLE_LEFT,
- draw_type, handle_size, xscale, yscale, vert, handle_left);
+ draw_type, handle_size, vert, handle_left);
draw_single_handle(masklay, point, MASK_WHICH_HANDLE_RIGHT,
- draw_type, handle_size, xscale, yscale, vert, handle_right);
+ draw_type, handle_size, vert, handle_right);
}
+ /* bind program in loop so it does not interfere with draw_single_handle */
+ immBindBuiltinProgram(GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA);
+
/* draw CV point */
if (MASKPOINT_ISSEL_KNOT(point)) {
if (point == masklay->act_point)
- glColor3f(1.0f, 1.0f, 1.0f);
+ immUniformColor3f(1.0f, 1.0f, 1.0f);
else
- UI_ThemeColor(TH_HANDLE_VERTEX_SELECT);
+ immUniformThemeColor(TH_HANDLE_VERTEX_SELECT);
}
else
- UI_ThemeColor(TH_HANDLE_VERTEX);
+ immUniformThemeColor(TH_HANDLE_VERTEX);
+
+ immBegin(GWN_PRIM_POINTS, 1);
+ immVertex2fv(pos, vert);
+ immEnd();
- glBegin(GL_POINTS);
- glVertex2fv(vert);
- glEnd();
+ immUnbindProgram();
minmax_v2v2_v2(min, max, vert);
}
+ if (is_smooth) {
+ glDisable(GL_LINE_SMOOTH);
+ }
+
if (is_spline_sel) {
- float x = (min[0] + max[0]) / 2.0f;
- float y = (min[1] + max[1]) / 2.0f;
- /* TODO(sergey): Remove hardcoded colors. */
+ float x = (min[0] + max[0]) * 0.5f;
+ float y = (min[1] + max[1]) * 0.5f;
+
+ immBindBuiltinProgram(GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_OUTLINE_AA);
+ immUniform1f("outlineWidth", 1.5f);
+
if (masklay->act_spline == spline) {
- glColor3ub(255, 255, 255);
+ immUniformColor3f(1.0f, 1.0f, 1.0f);
}
else {
- glColor3ub(255, 255, 0);
+ immUniformColor3f(1.0f, 1.0f, 0.0f);
}
- draw_circle(x, y, 6.0f, true, xscale, yscale);
+ immUniform4f("outlineColor", 0.0f, 0.0f, 0.0f, 1.0f);
+ immUniform1f("size", 12.0f);
- glColor3ub(0, 0, 0);
- draw_circle(x, y, 6.0f, false, xscale, yscale);
- }
+ immBegin(GWN_PRIM_POINTS, 1);
+ immVertex2f(pos, x, y);
+ immEnd();
- if (is_smooth) {
- glDisable(GL_LINE_SMOOTH);
- glDisable(GL_BLEND);
+ immUnbindProgram();
}
}
-/* #define USE_XOR */
-
static void mask_color_active_tint(unsigned char r_rgb[4], const unsigned char rgb[4], const bool is_active)
{
if (!is_active) {
@@ -410,13 +370,21 @@ static void mask_color_active_tint(unsigned char r_rgb[4], const unsigned char r
}
}
+static void mask_draw_array(unsigned int pos, Gwn_PrimType prim_type, const float (*points)[2], unsigned int vertex_ct)
+{
+ immBegin(prim_type, vertex_ct);
+ for (unsigned int i = 0; i < vertex_ct; ++i) {
+ immVertex2fv(pos, points[i]);
+ }
+ immEnd();
+}
+
static void mask_draw_curve_type(const bContext *C, MaskSpline *spline, float (*orig_points)[2], int tot_point,
- const bool is_feather, const bool is_smooth, const bool is_active,
+ const bool is_feather, const bool is_active,
const unsigned char rgb_spline[4], const char draw_type)
{
- const int draw_method = (spline->flag & MASK_SPLINE_CYCLIC) ? GL_LINE_LOOP : GL_LINE_STRIP;
+ const Gwn_PrimType draw_method = (spline->flag & MASK_SPLINE_CYCLIC) ? GWN_PRIM_LINE_LOOP : GWN_PRIM_LINE_STRIP;
const unsigned char rgb_black[4] = {0x00, 0x00, 0x00, 0xff};
-// const unsigned char rgb_white[4] = {0xff, 0xff, 0xff, 0xff};
unsigned char rgb_tmp[4];
SpaceClip *sc = CTX_wm_space_clip(C);
float (*points)[2] = orig_points;
@@ -425,65 +393,45 @@ static void mask_draw_curve_type(const bContext *C, MaskSpline *spline, float (*
const bool undistort = sc->clip && (sc->user.render_flag & MCLIP_PROXY_RENDER_UNDISTORT);
if (undistort) {
- int i;
-
points = MEM_callocN(2 * tot_point * sizeof(float), "undistorthed mask curve");
- for (i = 0; i < tot_point; i++) {
+ for (int i = 0; i < tot_point; i++) {
mask_point_undistort_pos(sc, points[i], orig_points[i]);
}
}
}
- glEnableClientState(GL_VERTEX_ARRAY);
- glVertexPointer(2, GL_FLOAT, 0, points);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
switch (draw_type) {
case MASK_DT_OUTLINE:
- glLineWidth(3);
-
- mask_color_active_tint(rgb_tmp, rgb_black, is_active);
- glColor4ubv(rgb_tmp);
-
- glDrawArrays(draw_method, 0, tot_point);
+ /* TODO(merwin): use fancy line shader here
+ * probably better with geometry shader (after core profile switch)
+ */
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
- glLineWidth(1);
- mask_color_active_tint(rgb_tmp, rgb_spline, is_active);
- glColor4ubv(rgb_tmp);
- glDrawArrays(draw_method, 0, tot_point);
+ glLineWidth(3.0f);
- break;
+ mask_color_active_tint(rgb_tmp, rgb_black, is_active);
+ immUniformColor4ubv(rgb_tmp);
+ mask_draw_array(pos, draw_method, points, tot_point);
- case MASK_DT_DASH:
- default:
- GPU_basic_shader_bind_enable(GPU_SHADER_LINE | GPU_SHADER_STIPPLE);
- GPU_basic_shader_line_stipple(3, 0xAAAA);
+ glLineWidth(1.0f);
-#ifdef USE_XOR
- glEnable(GL_COLOR_LOGIC_OP);
- glLogicOp(GL_OR);
-#endif
mask_color_active_tint(rgb_tmp, rgb_spline, is_active);
- glColor4ubv(rgb_tmp);
- glEnableClientState(GL_VERTEX_ARRAY);
- glVertexPointer(2, GL_FLOAT, 0, points);
- glDrawArrays(draw_method, 0, tot_point);
-
-#ifdef USE_XOR
- glDisable(GL_COLOR_LOGIC_OP);
-#endif
- mask_color_active_tint(rgb_tmp, rgb_black, is_active);
- glColor4ubv(rgb_tmp);
- GPU_basic_shader_line_stipple(3, 0x5555);
- glDrawArrays(draw_method, 0, tot_point);
+ immUniformColor4ubv(rgb_tmp);
+ mask_draw_array(pos, draw_method, points, tot_point);
- GPU_basic_shader_bind_disable(GPU_SHADER_LINE | GPU_SHADER_STIPPLE);
+ immUnbindProgram();
break;
-
case MASK_DT_BLACK:
case MASK_DT_WHITE:
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ glLineWidth(1.0f);
+
if (draw_type == MASK_DT_BLACK) { rgb_tmp[0] = rgb_tmp[1] = rgb_tmp[2] = 0; }
else { rgb_tmp[0] = rgb_tmp[1] = rgb_tmp[2] = 255; }
/* alpha values seem too low but gl draws many points that compensate for it */
@@ -496,26 +444,39 @@ static void mask_draw_curve_type(const bContext *C, MaskSpline *spline, float (*
rgb_tmp[2] = (unsigned char)(((short)rgb_tmp[2] + (short)rgb_spline[2]) / 2);
}
- if (is_smooth == false && is_feather) {
- glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- }
-
mask_color_active_tint(rgb_tmp, rgb_tmp, is_active);
- glColor4ubv(rgb_tmp);
+ immUniformColor4ubv(rgb_tmp);
+ mask_draw_array(pos, draw_method, points, tot_point);
- glEnableClientState(GL_VERTEX_ARRAY);
- glVertexPointer(2, GL_FLOAT, 0, points);
- glDrawArrays(draw_method, 0, tot_point);
+ immUnbindProgram();
+ break;
- if (is_smooth == false && is_feather) {
- glDisable(GL_BLEND);
- }
+ case MASK_DT_DASH:
+ /* TODO(merwin): use dashed line shader here
+ * probably better with geometry shader (after core profile switch)
+ */
+#if 0
+ glLineWidth(1.0f);
+
+ GPU_basic_shader_bind_enable(GPU_SHADER_LINE | GPU_SHADER_STIPPLE);
+ GPU_basic_shader_line_stipple(3, 0xAAAA);
+ mask_color_active_tint(rgb_tmp, rgb_spline, is_active);
+ immUniformColor4ubv(rgb_tmp);
+ mask_draw_array(pos, draw_method, points, tot_point);
+
+ mask_color_active_tint(rgb_tmp, rgb_black, is_active);
+ immUniformColor4ubv(rgb_tmp);
+ GPU_basic_shader_line_stipple(3, 0x5555);
+ mask_draw_array(pos, draw_method, points, tot_point);
+
+ GPU_basic_shader_bind_disable(GPU_SHADER_LINE | GPU_SHADER_STIPPLE);
+#endif
break;
- }
- glDisableClientState(GL_VERTEX_ARRAY);
+ default:
+ BLI_assert(false);
+ }
if (points != orig_points)
MEM_freeN(points);
@@ -548,8 +509,6 @@ static void draw_spline_curve(const bContext *C, MaskLayer *masklay, MaskSpline
if (is_smooth) {
glEnable(GL_LINE_SMOOTH);
- glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}
feather_points = BKE_mask_spline_feather_differentiated_points_with_resolution(spline, &tot_feather_point, resol, (is_fill != false));
@@ -557,26 +516,24 @@ static void draw_spline_curve(const bContext *C, MaskLayer *masklay, MaskSpline
/* draw feather */
mask_spline_feather_color_get(masklay, spline, is_spline_sel, rgb_tmp);
mask_draw_curve_type(C, spline, feather_points, tot_feather_point,
- true, is_smooth, is_active,
+ true, is_active,
rgb_tmp, draw_type);
if (!is_fill) {
-
const float *fp = &diff_points[0][0];
float *fp_feather = &feather_points[0][0];
- float tvec[2];
- int i;
BLI_assert(tot_diff_point == tot_feather_point);
- for (i = 0; i < tot_diff_point; i++, fp += 2, fp_feather += 2) {
+ for (int i = 0; i < tot_diff_point; i++, fp += 2, fp_feather += 2) {
+ float tvec[2];
sub_v2_v2v2(tvec, fp, fp_feather);
add_v2_v2v2(fp_feather, fp, tvec);
}
/* same as above */
mask_draw_curve_type(C, spline, feather_points, tot_feather_point,
- true, is_smooth, is_active,
+ true, is_active,
rgb_tmp, draw_type);
}
@@ -585,21 +542,22 @@ static void draw_spline_curve(const bContext *C, MaskLayer *masklay, MaskSpline
/* draw main curve */
mask_spline_color_get(masklay, spline, is_spline_sel, rgb_tmp);
mask_draw_curve_type(C, spline, diff_points, tot_diff_point,
- false, is_smooth, is_active,
+ false, is_active,
rgb_tmp, draw_type);
MEM_freeN(diff_points);
- if (draw_flag & MASK_DRAWFLAG_SMOOTH) {
+ if (is_smooth) {
glDisable(GL_LINE_SMOOTH);
- glDisable(GL_BLEND);
}
-
- (void)draw_type;
}
static void draw_masklays(const bContext *C, Mask *mask, const char draw_flag, const char draw_type,
- const int width, const int height, const float xscale, const float yscale)
+ const int width, const int height)
{
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ GPU_enable_program_point_size();
+
MaskLayer *masklay;
int i;
@@ -616,11 +574,9 @@ static void draw_masklays(const bContext *C, Mask *mask, const char draw_flag, c
/* draw curve itself first... */
draw_spline_curve(C, masklay, spline, draw_flag, draw_type, is_active, width, height);
-// draw_spline_parents(masklay, spline);
-
if (!(masklay->restrictflag & MASK_RESTRICT_SELECT)) {
/* ...and then handles over the curve so they're nicely visible */
- draw_spline_points(C, masklay, spline, draw_flag, draw_type, xscale, yscale);
+ draw_spline_points(C, masklay, spline, draw_flag, draw_type);
}
/* show undeform for testing */
@@ -629,33 +585,29 @@ static void draw_masklays(const bContext *C, Mask *mask, const char draw_flag, c
spline->points_deform = NULL;
draw_spline_curve(C, masklay, spline, draw_flag, draw_type, is_active, width, height);
-// draw_spline_parents(masklay, spline);
- draw_spline_points(C, masklay, spline, draw_flag, draw_type, xscale, yscale);
+ draw_spline_points(C, masklay, spline, draw_flag, draw_type);
spline->points_deform = back;
}
}
}
+
+ GPU_disable_program_point_size();
+ glDisable(GL_BLEND);
}
void ED_mask_draw(const bContext *C,
const char draw_flag, const char draw_type)
{
ScrArea *sa = CTX_wm_area(C);
- ARegion *ar = CTX_wm_region(C);
-
Mask *mask = CTX_data_edit_mask(C);
int width, height;
- float aspx, aspy;
- float xscale, yscale;
if (!mask)
return;
ED_mask_get_size(sa, &width, &height);
- ED_mask_get_aspect(sa, ar, &aspx, &aspy);
- UI_view2d_scale_get(&ar->v2d, &xscale, &yscale);
- draw_masklays(C, mask, draw_flag, draw_type, width, height, xscale * aspx, yscale * aspy);
+ draw_masklays(C, mask, draw_flag, draw_type, width, height);
}
static float *mask_rasterize(Mask *mask, const int width, const int height)
@@ -733,28 +685,26 @@ void ED_mask_draw_region(Mask *mask, ARegion *ar,
}
if (draw_flag & MASK_DRAWFLAG_OVERLAY) {
+ float red[4] = {1.0f, 0.0f, 0.0f, 0.0f};
float *buffer = mask_rasterize(mask, width, height);
- int format;
- if (overlay_mode == MASK_OVERLAY_ALPHACHANNEL) {
- glColor3f(1.0f, 1.0f, 1.0f);
- format = GL_LUMINANCE;
- }
- else {
+ if (overlay_mode != MASK_OVERLAY_ALPHACHANNEL) {
/* More blending types could be supported in the future. */
glEnable(GL_BLEND);
- glBlendFunc(GL_DST_COLOR, GL_SRC_ALPHA);
- format = GL_ALPHA;
+ glBlendFunc(GL_DST_COLOR, GL_ZERO);
}
- glPushMatrix();
- glTranslatef(x, y, 0);
- glScalef(zoomx, zoomy, 0);
+ gpuPushMatrix();
+ gpuTranslate2f(x, y);
+ gpuScale2f(zoomx, zoomy);
if (stabmat) {
- glMultMatrixf(stabmat);
+ gpuMultMatrix(stabmat);
}
- glaDrawPixelsTex(0.0f, 0.0f, width, height, format, GL_FLOAT, GL_NEAREST, buffer);
- glPopMatrix();
+ IMMDrawPixelsTexState state = immDrawPixelsTexSetup(GPU_SHADER_2D_IMAGE_SHUFFLE_COLOR);
+ GPU_shader_uniform_vector(state.shader, GPU_shader_get_uniform(state.shader, "shuffle"), 4, 1, red);
+ immDrawPixelsTex(&state, 0.0f, 0.0f, width, height, GL_RED, GL_FLOAT, GL_NEAREST, buffer, 1.0f, 1.0f, NULL);
+
+ gpuPopMatrix();
if (overlay_mode != MASK_OVERLAY_ALPHACHANNEL) {
glDisable(GL_BLEND);
@@ -764,26 +714,26 @@ void ED_mask_draw_region(Mask *mask, ARegion *ar,
}
/* apply transformation so mask editing tools will assume drawing from the origin in normalized space */
- glPushMatrix();
- glTranslatef(x + xofs, y + yofs, 0);
- glScalef(zoomx, zoomy, 0);
+ gpuPushMatrix();
+ gpuTranslate2f(x + xofs, y + yofs);
+ gpuScale2f(zoomx, zoomy);
if (stabmat) {
- glMultMatrixf(stabmat);
+ gpuMultMatrix(stabmat);
}
- glScalef(maxdim, maxdim, 0);
+ gpuScale2f(maxdim, maxdim);
if (do_draw_cb) {
ED_region_draw_cb_draw(C, ar, REGION_DRAW_PRE_VIEW);
}
/* draw! */
- draw_masklays(C, mask, draw_flag, draw_type, width, height, maxdim * zoomx, maxdim * zoomy);
+ draw_masklays(C, mask, draw_flag, draw_type, width, height);
if (do_draw_cb) {
ED_region_draw_cb_draw(C, ar, REGION_DRAW_POST_VIEW);
}
- glPopMatrix();
+ gpuPopMatrix();
}
void ED_mask_draw_frames(Mask *mask, ARegion *ar, const int cfra, const int sfra, const int efra)
@@ -792,25 +742,31 @@ void ED_mask_draw_frames(Mask *mask, ARegion *ar, const int cfra, const int sfra
MaskLayer *masklay = BKE_mask_layer_active(mask);
- glBegin(GL_LINES);
- glColor4ub(255, 175, 0, 255);
-
if (masklay) {
- MaskLayerShape *masklay_shape;
-
- for (masklay_shape = masklay->splines_shapes.first;
- masklay_shape;
- masklay_shape = masklay_shape->next)
- {
- int frame = masklay_shape->frame;
-
- /* draw_keyframe(i, CFRA, sfra, framelen, 1); */
- int height = (frame == cfra) ? 22 : 10;
- int x = (frame - sfra) * framelen;
- glVertex2i(x, 0);
- glVertex2i(x, height);
+ unsigned int num_lines = BLI_listbase_count(&masklay->splines_shapes);
+
+ if (num_lines > 0) {
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor4ub(255, 175, 0, 255);
+
+ immBegin(GWN_PRIM_LINES, 2 * num_lines);
+
+ for (MaskLayerShape *masklay_shape = masklay->splines_shapes.first;
+ masklay_shape;
+ masklay_shape = masklay_shape->next)
+ {
+ int frame = masklay_shape->frame;
+
+ /* draw_keyframe(i, CFRA, sfra, framelen, 1); */
+ int height = (frame == cfra) ? 22 : 10;
+ int x = (frame - sfra) * framelen;
+ immVertex2i(pos, x, 0);
+ immVertex2i(pos, x, height);
+ }
+ immEnd();
+ immUnbindProgram();
}
}
-
- glEnd();
}
diff --git a/source/blender/editors/mask/mask_ops.c b/source/blender/editors/mask/mask_ops.c
index 97d5ee1eff0..b6ac23a37e8 100644
--- a/source/blender/editors/mask/mask_ops.c
+++ b/source/blender/editors/mask/mask_ops.c
@@ -35,10 +35,11 @@
#include "BLI_math.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_main.h"
#include "BKE_mask.h"
+#include "DEG_depsgraph.h"
+
#include "DNA_scene_types.h"
#include "DNA_mask_types.h"
#include "DNA_object_types.h" /* SELECT */
@@ -1062,7 +1063,7 @@ static int slide_point_modal(bContext *C, wmOperator *op, const wmEvent *event)
}
WM_event_add_notifier(C, NC_MASK | NA_EDITED, data->mask);
- DAG_id_tag_update(&data->mask->id, 0);
+ DEG_id_tag_update(&data->mask->id, 0);
break;
}
@@ -1089,7 +1090,7 @@ static int slide_point_modal(bContext *C, wmOperator *op, const wmEvent *event)
}
WM_event_add_notifier(C, NC_MASK | NA_EDITED, data->mask);
- DAG_id_tag_update(&data->mask->id, 0);
+ DEG_id_tag_update(&data->mask->id, 0);
free_slide_point_data(op->customdata); /* keep this last! */
return OPERATOR_FINISHED;
@@ -1105,7 +1106,7 @@ static int slide_point_modal(bContext *C, wmOperator *op, const wmEvent *event)
cancel_slide_point(op->customdata);
WM_event_add_notifier(C, NC_MASK | NA_EDITED, data->mask);
- DAG_id_tag_update(&data->mask->id, 0);
+ DEG_id_tag_update(&data->mask->id, 0);
free_slide_point_data(op->customdata); /* keep this last! */
return OPERATOR_CANCELLED;
@@ -1469,7 +1470,7 @@ static int slide_spline_curvature_modal(bContext *C, wmOperator *op, const wmEve
}
WM_event_add_notifier(C, NC_MASK | NA_EDITED, slide_data->mask);
- DAG_id_tag_update(&slide_data->mask->id, 0);
+ DEG_id_tag_update(&slide_data->mask->id, 0);
break;
}
@@ -1483,7 +1484,7 @@ static int slide_spline_curvature_modal(bContext *C, wmOperator *op, const wmEve
}
WM_event_add_notifier(C, NC_MASK | NA_EDITED, slide_data->mask);
- DAG_id_tag_update(&slide_data->mask->id, 0);
+ DEG_id_tag_update(&slide_data->mask->id, 0);
free_slide_spline_curvature_data(slide_data); /* keep this last! */
return OPERATOR_FINISHED;
@@ -1495,7 +1496,7 @@ static int slide_spline_curvature_modal(bContext *C, wmOperator *op, const wmEve
cancel_slide_spline_curvature(slide_data);
WM_event_add_notifier(C, NC_MASK | NA_EDITED, slide_data->mask);
- DAG_id_tag_update(&slide_data->mask->id, 0);
+ DEG_id_tag_update(&slide_data->mask->id, 0);
free_slide_spline_curvature_data(op->customdata); /* keep this last! */
return OPERATOR_CANCELLED;
@@ -1541,7 +1542,7 @@ static int cyclic_toggle_exec(bContext *C, wmOperator *UNUSED(op))
}
}
- DAG_id_tag_update(&mask->id, 0);
+ DEG_id_tag_update(&mask->id, 0);
WM_event_add_notifier(C, NC_MASK | NA_EDITED, mask);
return OPERATOR_FINISHED;
@@ -1900,7 +1901,7 @@ static int set_handle_type_exec(bContext *C, wmOperator *op)
if (changed) {
WM_event_add_notifier(C, NC_MASK | ND_DATA, mask);
- DAG_id_tag_update(&mask->id, 0);
+ DEG_id_tag_update(&mask->id, 0);
return OPERATOR_FINISHED;
}
@@ -1955,7 +1956,7 @@ static int mask_hide_view_clear_exec(bContext *C, wmOperator *op)
if (changed) {
WM_event_add_notifier(C, NC_MASK | ND_DRAW, mask);
- DAG_id_tag_update(&mask->id, 0);
+ DEG_id_tag_update(&mask->id, 0);
return OPERATOR_FINISHED;
}
@@ -2019,7 +2020,7 @@ static int mask_hide_view_set_exec(bContext *C, wmOperator *op)
if (changed) {
WM_event_add_notifier(C, NC_MASK | ND_DRAW, mask);
- DAG_id_tag_update(&mask->id, 0);
+ DEG_id_tag_update(&mask->id, 0);
return OPERATOR_FINISHED;
}
@@ -2079,7 +2080,7 @@ static int mask_feather_weight_clear_exec(bContext *C, wmOperator *UNUSED(op))
BKE_mask_update_display(mask, CFRA);
WM_event_add_notifier(C, NC_MASK | ND_DRAW, mask);
- DAG_id_tag_update(&mask->id, 0);
+ DEG_id_tag_update(&mask->id, 0);
return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/mask/mask_relationships.c b/source/blender/editors/mask/mask_relationships.c
index 4e0aa8f84ae..c500ec75aee 100644
--- a/source/blender/editors/mask/mask_relationships.c
+++ b/source/blender/editors/mask/mask_relationships.c
@@ -34,10 +34,11 @@
#include "BLI_string.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_mask.h"
#include "BKE_tracking.h"
+#include "DEG_depsgraph.h"
+
#include "DNA_mask_types.h"
#include "WM_api.h"
@@ -73,7 +74,7 @@ static int mask_parent_clear_exec(bContext *C, wmOperator *UNUSED(op))
}
WM_event_add_notifier(C, NC_MASK | ND_DATA, mask);
- DAG_id_tag_update(&mask->id, 0);
+ DEG_id_tag_update(&mask->id, 0);
return OPERATOR_FINISHED;
}
@@ -176,7 +177,7 @@ static int mask_parent_set_exec(bContext *C, wmOperator *UNUSED(op))
}
WM_event_add_notifier(C, NC_MASK | ND_DATA, mask);
- DAG_id_tag_update(&mask->id, 0);
+ DEG_id_tag_update(&mask->id, 0);
return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/mask/mask_shapekey.c b/source/blender/editors/mask/mask_shapekey.c
index 99ffc9cd7d2..3fb1cc87dbd 100644
--- a/source/blender/editors/mask/mask_shapekey.c
+++ b/source/blender/editors/mask/mask_shapekey.c
@@ -36,13 +36,14 @@
#include "BLI_math.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_mask.h"
#include "DNA_object_types.h"
#include "DNA_mask_types.h"
#include "DNA_scene_types.h"
+#include "DEG_depsgraph.h"
+
#include "RNA_access.h"
#include "RNA_define.h"
@@ -75,7 +76,7 @@ static int mask_shape_key_insert_exec(bContext *C, wmOperator *UNUSED(op))
if (changed) {
WM_event_add_notifier(C, NC_MASK | ND_DATA, mask);
- DAG_id_tag_update(&mask->id, 0);
+ DEG_id_tag_update(&mask->id, 0);
return OPERATOR_FINISHED;
}
@@ -124,7 +125,7 @@ static int mask_shape_key_clear_exec(bContext *C, wmOperator *UNUSED(op))
if (changed) {
WM_event_add_notifier(C, NC_MASK | ND_DATA, mask);
- DAG_id_tag_update(&mask->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&mask->id, OB_RECALC_DATA);
return OPERATOR_FINISHED;
}
@@ -216,7 +217,7 @@ static int mask_shape_key_feather_reset_exec(bContext *C, wmOperator *UNUSED(op)
if (changed) {
WM_event_add_notifier(C, NC_MASK | ND_DATA, mask);
- DAG_id_tag_update(&mask->id, 0);
+ DEG_id_tag_update(&mask->id, 0);
return OPERATOR_FINISHED;
}
@@ -386,7 +387,7 @@ static int mask_shape_key_rekey_exec(bContext *C, wmOperator *op)
if (changed) {
WM_event_add_notifier(C, NC_MASK | ND_DATA, mask);
- DAG_id_tag_update(&mask->id, 0);
+ DEG_id_tag_update(&mask->id, 0);
return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/mesh/CMakeLists.txt b/source/blender/editors/mesh/CMakeLists.txt
index 8783367ef7e..80e1187609c 100644
--- a/source/blender/editors/mesh/CMakeLists.txt
+++ b/source/blender/editors/mesh/CMakeLists.txt
@@ -24,6 +24,7 @@ set(INC
../../blenkernel
../../blenlib
../../blentranslation
+ ../../depsgraph
../../bmesh
../../gpu
../../imbuf
@@ -51,6 +52,7 @@ set(SRC
editmesh_knife_project.c
editmesh_loopcut.c
editmesh_path.c
+ editmesh_polybuild.c
editmesh_rip.c
editmesh_rip_edge.c
editmesh_select.c
diff --git a/source/blender/editors/mesh/editface.c b/source/blender/editors/mesh/editface.c
index 87c8c55b0a1..113173c1c03 100644
--- a/source/blender/editors/mesh/editface.c
+++ b/source/blender/editors/mesh/editface.c
@@ -105,6 +105,8 @@ void paintface_flush_flags(Object *ob, short flag)
/* draw-object caches hidden faces, force re-generation T46867 */
GPU_drawobject_free(dm);
}
+
+ BKE_mesh_batch_cache_dirty(me, BKE_MESH_BATCH_DIRTY_ALL);
}
void paintface_hide(Object *ob, const bool unselected)
@@ -386,14 +388,14 @@ bool paintface_mouse_select(struct bContext *C, Object *ob, const int mval[2], b
}
/* image window redraw */
-
+
paintface_flush_flags(ob, SELECT);
WM_event_add_notifier(C, NC_GEOM | ND_SELECT, ob->data);
ED_region_tag_redraw(CTX_wm_region(C)); // XXX - should redraw all 3D views
return true;
}
-int do_paintface_box_select(ViewContext *vc, rcti *rect, bool select, bool extend)
+int do_paintface_box_select(const struct EvaluationContext *eval_ctx, ViewContext *vc, rcti *rect, bool select, bool extend)
{
Object *ob = vc->obact;
Mesh *me;
@@ -424,7 +426,7 @@ int do_paintface_box_select(ViewContext *vc, rcti *rect, bool select, bool exten
}
}
- ED_view3d_backbuf_validate(vc);
+ ED_view3d_backbuf_validate(eval_ctx, vc);
ibuf = IMB_allocImBuf(size[0], size[1], 32, IB_rect);
rt = ibuf->rect;
@@ -514,6 +516,8 @@ void paintvert_flush_flags(Object *ob)
dm_mv->flag = me->mvert[i].flag;
}
}
+
+ BKE_mesh_batch_cache_dirty(me, BKE_MESH_BATCH_DIRTY_ALL);
}
/* note: if the caller passes false to flush_flags, then they will need to run paintvert_flush_flags(ob) themselves */
void paintvert_deselect_all_visible(Object *ob, int action, bool flush_flags)
@@ -631,8 +635,9 @@ static int mirrtopo_vert_sort(const void *v1, const void *v2)
return 0;
}
-bool ED_mesh_mirrtopo_recalc_check(Mesh *me, DerivedMesh *dm, const int ob_mode, MirrTopoStore_t *mesh_topo_store)
+bool ED_mesh_mirrtopo_recalc_check(Mesh *me, DerivedMesh *dm, MirrTopoStore_t *mesh_topo_store)
{
+ const bool is_editmode = (me->edit_btmesh != NULL);
int totvert;
int totedge;
@@ -650,7 +655,7 @@ bool ED_mesh_mirrtopo_recalc_check(Mesh *me, DerivedMesh *dm, const int ob_mode,
}
if ((mesh_topo_store->index_lookup == NULL) ||
- (mesh_topo_store->prev_ob_mode != ob_mode) ||
+ (mesh_topo_store->prev_is_editmode != is_editmode) ||
(totvert != mesh_topo_store->prev_vert_tot) ||
(totedge != mesh_topo_store->prev_edge_tot))
{
@@ -662,9 +667,11 @@ bool ED_mesh_mirrtopo_recalc_check(Mesh *me, DerivedMesh *dm, const int ob_mode,
}
-void ED_mesh_mirrtopo_init(Mesh *me, DerivedMesh *dm, const int ob_mode, MirrTopoStore_t *mesh_topo_store,
- const bool skip_em_vert_array_init)
+void ED_mesh_mirrtopo_init(
+ Mesh *me, DerivedMesh *dm, MirrTopoStore_t *mesh_topo_store,
+ const bool skip_em_vert_array_init)
{
+ const bool is_editmode = (me->edit_btmesh != NULL);
MEdge *medge = NULL, *med;
BMEditMesh *em = dm ? NULL : me->edit_btmesh;
@@ -687,7 +694,7 @@ void ED_mesh_mirrtopo_init(Mesh *me, DerivedMesh *dm, const int ob_mode, MirrTop
/* reallocate if needed */
ED_mesh_mirrtopo_free(mesh_topo_store);
- mesh_topo_store->prev_ob_mode = ob_mode;
+ mesh_topo_store->prev_is_editmode = is_editmode;
if (em) {
BM_mesh_elem_index_ensure(em->bm, BM_VERT);
diff --git a/source/blender/editors/mesh/editmesh_add.c b/source/blender/editors/mesh/editmesh_add.c
index 77772cfc8cc..a21fc2fffde 100644
--- a/source/blender/editors/mesh/editmesh_add.c
+++ b/source/blender/editors/mesh/editmesh_add.c
@@ -60,30 +60,35 @@
/* ********* add primitive operators ************* */
+typedef struct MakePrimitiveData {
+ float mat[4][4];
+ bool was_editmode;
+} MakePrimitiveData;
+
static Object *make_prim_init(bContext *C, const char *idname,
- float *dia, float mat[4][4],
- bool *was_editmode, const float loc[3], const float rot[3], const unsigned int layer)
+ const float loc[3], const float rot[3], const unsigned int layer,
+ MakePrimitiveData *r_creation_data)
{
Object *obedit = CTX_data_edit_object(C);
- *was_editmode = false;
+ r_creation_data->was_editmode = false;
if (obedit == NULL || obedit->type != OB_MESH) {
obedit = ED_object_add_type(C, OB_MESH, idname, loc, rot, false, layer);
/* create editmode */
ED_object_editmode_enter(C, EM_DO_UNDO | EM_IGNORE_LAYER); /* rare cases the active layer is messed up */
- *was_editmode = true;
+ r_creation_data->was_editmode = true;
}
- *dia = ED_object_new_primitive_matrix(C, obedit, loc, rot, mat);
+ ED_object_new_primitive_matrix(C, obedit, loc, rot, r_creation_data->mat);
return obedit;
}
-static void make_prim_finish(bContext *C, Object *obedit, bool was_editmode, int enter_editmode)
+static void make_prim_finish(bContext *C, Object *obedit, const MakePrimitiveData *creation_data, int enter_editmode)
{
BMEditMesh *em = BKE_editmesh_from_object(obedit);
- const bool exit_editmode = ((was_editmode == true) && (enter_editmode == false));
+ const bool exit_editmode = ((creation_data->was_editmode == true) && (enter_editmode == false));
/* Primitive has all verts selected, use vert select flush
* to push this up to edges & faces. */
@@ -101,17 +106,17 @@ static void make_prim_finish(bContext *C, Object *obedit, bool was_editmode, int
static int add_primitive_plane_exec(bContext *C, wmOperator *op)
{
+ MakePrimitiveData creation_data;
Object *obedit;
BMEditMesh *em;
- float loc[3], rot[3], mat[4][4], dia;
+ float loc[3], rot[3];
bool enter_editmode;
- bool was_editmode;
unsigned int layer;
const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
WM_operator_view3d_unit_defaults(C, op);
ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &layer, NULL);
- obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Plane"), &dia, mat, &was_editmode, loc, rot, layer);
+ obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Plane"), loc, rot, layer, &creation_data);
em = BKE_editmesh_from_object(obedit);
if (calc_uvs) {
@@ -121,12 +126,12 @@ static int add_primitive_plane_exec(bContext *C, wmOperator *op)
if (!EDBM_op_call_and_selectf(
em, op, "verts.out", false,
"create_grid x_segments=%i y_segments=%i size=%f matrix=%m4 calc_uvs=%b",
- 1, 1, RNA_float_get(op->ptr, "radius"), mat, calc_uvs))
+ 1, 1, RNA_float_get(op->ptr, "radius"), creation_data.mat, calc_uvs))
{
return OPERATOR_CANCELLED;
}
- make_prim_finish(C, obedit, was_editmode, enter_editmode);
+ make_prim_finish(C, obedit, &creation_data, enter_editmode);
return OPERATOR_FINISHED;
}
@@ -152,17 +157,17 @@ void MESH_OT_primitive_plane_add(wmOperatorType *ot)
static int add_primitive_cube_exec(bContext *C, wmOperator *op)
{
+ MakePrimitiveData creation_data;
Object *obedit;
BMEditMesh *em;
- float loc[3], rot[3], mat[4][4], dia;
+ float loc[3], rot[3];
bool enter_editmode;
- bool was_editmode;
unsigned int layer;
const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
WM_operator_view3d_unit_defaults(C, op);
ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &layer, NULL);
- obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Cube"), &dia, mat, &was_editmode, loc, rot, layer);
+ obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Cube"), loc, rot, layer, &creation_data);
em = BKE_editmesh_from_object(obedit);
if (calc_uvs) {
@@ -172,13 +177,13 @@ static int add_primitive_cube_exec(bContext *C, wmOperator *op)
if (!EDBM_op_call_and_selectf(
em, op, "verts.out", false,
"create_cube matrix=%m4 size=%f calc_uvs=%b",
- mat, RNA_float_get(op->ptr, "radius") * 2.0f, calc_uvs))
+ creation_data.mat, RNA_float_get(op->ptr, "radius") * 2.0f, calc_uvs))
{
return OPERATOR_CANCELLED;
}
/* BMESH_TODO make plane side this: M_SQRT2 - plane (diameter of 1.41 makes it unit size) */
- make_prim_finish(C, obedit, was_editmode, enter_editmode);
+ make_prim_finish(C, obedit, &creation_data, enter_editmode);
return OPERATOR_FINISHED;
}
@@ -210,13 +215,13 @@ static const EnumPropertyItem fill_type_items[] = {
static int add_primitive_circle_exec(bContext *C, wmOperator *op)
{
+ MakePrimitiveData creation_data;
Object *obedit;
BMEditMesh *em;
- float loc[3], rot[3], mat[4][4], dia;
+ float loc[3], rot[3];
bool enter_editmode;
int cap_end, cap_tri;
unsigned int layer;
- bool was_editmode;
const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
cap_end = RNA_enum_get(op->ptr, "fill_type");
@@ -224,7 +229,7 @@ static int add_primitive_circle_exec(bContext *C, wmOperator *op)
WM_operator_view3d_unit_defaults(C, op);
ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &layer, NULL);
- obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Circle"), &dia, mat, &was_editmode, loc, rot, layer);
+ obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Circle"), loc, rot, layer, &creation_data);
em = BKE_editmesh_from_object(obedit);
if (calc_uvs) {
@@ -235,12 +240,12 @@ static int add_primitive_circle_exec(bContext *C, wmOperator *op)
em, op, "verts.out", false,
"create_circle segments=%i radius=%f cap_ends=%b cap_tris=%b matrix=%m4 calc_uvs=%b",
RNA_int_get(op->ptr, "vertices"), RNA_float_get(op->ptr, "radius"),
- cap_end, cap_tri, mat, calc_uvs))
+ cap_end, cap_tri, creation_data.mat, calc_uvs))
{
return OPERATOR_CANCELLED;
}
- make_prim_finish(C, obedit, was_editmode, enter_editmode);
+ make_prim_finish(C, obedit, &creation_data, enter_editmode);
return OPERATOR_FINISHED;
}
@@ -270,12 +275,12 @@ void MESH_OT_primitive_circle_add(wmOperatorType *ot)
static int add_primitive_cylinder_exec(bContext *C, wmOperator *op)
{
+ MakePrimitiveData creation_data;
Object *obedit;
BMEditMesh *em;
- float loc[3], rot[3], mat[4][4], dia;
+ float loc[3], rot[3];
bool enter_editmode;
unsigned int layer;
- bool was_editmode;
const int end_fill_type = RNA_enum_get(op->ptr, "end_fill_type");
const bool cap_end = (end_fill_type != 0);
const bool cap_tri = (end_fill_type == 2);
@@ -283,7 +288,7 @@ static int add_primitive_cylinder_exec(bContext *C, wmOperator *op)
WM_operator_view3d_unit_defaults(C, op);
ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &layer, NULL);
- obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Cylinder"), &dia, mat, &was_editmode, loc, rot, layer);
+ obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Cylinder"), loc, rot, layer, &creation_data);
em = BKE_editmesh_from_object(obedit);
if (calc_uvs) {
@@ -297,12 +302,12 @@ static int add_primitive_cylinder_exec(bContext *C, wmOperator *op)
RNA_float_get(op->ptr, "radius"),
RNA_float_get(op->ptr, "radius"),
cap_end, cap_tri,
- RNA_float_get(op->ptr, "depth"), mat, calc_uvs))
+ RNA_float_get(op->ptr, "depth"), creation_data.mat, calc_uvs))
{
return OPERATOR_CANCELLED;
}
- make_prim_finish(C, obedit, was_editmode, enter_editmode);
+ make_prim_finish(C, obedit, &creation_data, enter_editmode);
return OPERATOR_FINISHED;
}
@@ -333,12 +338,12 @@ void MESH_OT_primitive_cylinder_add(wmOperatorType *ot)
static int add_primitive_cone_exec(bContext *C, wmOperator *op)
{
+ MakePrimitiveData creation_data;
Object *obedit;
BMEditMesh *em;
- float loc[3], rot[3], mat[4][4], dia;
+ float loc[3], rot[3];
bool enter_editmode;
unsigned int layer;
- bool was_editmode;
const int end_fill_type = RNA_enum_get(op->ptr, "end_fill_type");
const bool cap_end = (end_fill_type != 0);
const bool cap_tri = (end_fill_type == 2);
@@ -346,7 +351,7 @@ static int add_primitive_cone_exec(bContext *C, wmOperator *op)
WM_operator_view3d_unit_defaults(C, op);
ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &layer, NULL);
- obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Cone"), &dia, mat, &was_editmode, loc, rot, layer);
+ obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Cone"), loc, rot, layer, &creation_data);
em = BKE_editmesh_from_object(obedit);
if (calc_uvs) {
@@ -357,12 +362,13 @@ static int add_primitive_cone_exec(bContext *C, wmOperator *op)
em, op, "verts.out", false,
"create_cone segments=%i diameter1=%f diameter2=%f cap_ends=%b cap_tris=%b depth=%f matrix=%m4 calc_uvs=%b",
RNA_int_get(op->ptr, "vertices"), RNA_float_get(op->ptr, "radius1"),
- RNA_float_get(op->ptr, "radius2"), cap_end, cap_tri, RNA_float_get(op->ptr, "depth"), mat, calc_uvs))
+ RNA_float_get(op->ptr, "radius2"), cap_end, cap_tri, RNA_float_get(op->ptr, "depth"),
+ creation_data.mat, calc_uvs))
{
return OPERATOR_CANCELLED;
}
- make_prim_finish(C, obedit, was_editmode, enter_editmode);
+ make_prim_finish(C, obedit, &creation_data, enter_editmode);
return OPERATOR_FINISHED;
}
@@ -394,17 +400,17 @@ void MESH_OT_primitive_cone_add(wmOperatorType *ot)
static int add_primitive_grid_exec(bContext *C, wmOperator *op)
{
+ MakePrimitiveData creation_data;
Object *obedit;
BMEditMesh *em;
- float loc[3], rot[3], mat[4][4], dia;
+ float loc[3], rot[3];
bool enter_editmode;
- bool was_editmode;
unsigned int layer;
const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
WM_operator_view3d_unit_defaults(C, op);
ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &layer, NULL);
- obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Grid"), &dia, mat, &was_editmode, loc, rot, layer);
+ obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Grid"), loc, rot, layer, &creation_data);
em = BKE_editmesh_from_object(obedit);
if (calc_uvs) {
@@ -416,12 +422,12 @@ static int add_primitive_grid_exec(bContext *C, wmOperator *op)
"create_grid x_segments=%i y_segments=%i size=%f matrix=%m4 calc_uvs=%b",
RNA_int_get(op->ptr, "x_subdivisions"),
RNA_int_get(op->ptr, "y_subdivisions"),
- RNA_float_get(op->ptr, "radius"), mat, calc_uvs))
+ RNA_float_get(op->ptr, "radius"), creation_data.mat, calc_uvs))
{
return OPERATOR_CANCELLED;
}
- make_prim_finish(C, obedit, was_editmode, enter_editmode);
+ make_prim_finish(C, obedit, &creation_data, enter_editmode);
return OPERATOR_FINISHED;
}
@@ -453,22 +459,21 @@ void MESH_OT_primitive_grid_add(wmOperatorType *ot)
static int add_primitive_monkey_exec(bContext *C, wmOperator *op)
{
+ MakePrimitiveData creation_data;
Object *obedit;
BMEditMesh *em;
- float mat[4][4];
float loc[3], rot[3];
float dia;
bool enter_editmode;
unsigned int layer;
- bool was_editmode;
const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
WM_operator_view3d_unit_defaults(C, op);
ED_object_add_generic_get_opts(C, op, 'Y', loc, rot, &enter_editmode, &layer, NULL);
- obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Suzanne"), &dia, mat, &was_editmode, loc, rot, layer);
+ obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Suzanne"), loc, rot, layer, &creation_data);
dia = RNA_float_get(op->ptr, "radius");
- mul_mat3_m4_fl(mat, dia);
+ mul_mat3_m4_fl(creation_data.mat, dia);
em = BKE_editmesh_from_object(obedit);
@@ -478,12 +483,12 @@ static int add_primitive_monkey_exec(bContext *C, wmOperator *op)
if (!EDBM_op_call_and_selectf(
em, op, "verts.out", false,
- "create_monkey matrix=%m4 calc_uvs=%b", mat, calc_uvs))
+ "create_monkey matrix=%m4 calc_uvs=%b", creation_data.mat, calc_uvs))
{
return OPERATOR_CANCELLED;
}
- make_prim_finish(C, obedit, was_editmode, enter_editmode);
+ make_prim_finish(C, obedit, &creation_data, enter_editmode);
return OPERATOR_FINISHED;
}
@@ -510,17 +515,17 @@ void MESH_OT_primitive_monkey_add(wmOperatorType *ot)
static int add_primitive_uvsphere_exec(bContext *C, wmOperator *op)
{
+ MakePrimitiveData creation_data;
Object *obedit;
BMEditMesh *em;
- float loc[3], rot[3], mat[4][4], dia;
+ float loc[3], rot[3];
bool enter_editmode;
- bool was_editmode;
unsigned int layer;
const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
WM_operator_view3d_unit_defaults(C, op);
ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &layer, NULL);
- obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Sphere"), &dia, mat, &was_editmode, loc, rot, layer);
+ obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Sphere"), loc, rot, layer, &creation_data);
em = BKE_editmesh_from_object(obedit);
if (calc_uvs) {
@@ -531,12 +536,12 @@ static int add_primitive_uvsphere_exec(bContext *C, wmOperator *op)
em, op, "verts.out", false,
"create_uvsphere u_segments=%i v_segments=%i diameter=%f matrix=%m4 calc_uvs=%b",
RNA_int_get(op->ptr, "segments"), RNA_int_get(op->ptr, "ring_count"),
- RNA_float_get(op->ptr, "size"), mat, calc_uvs))
+ RNA_float_get(op->ptr, "size"), creation_data.mat, calc_uvs))
{
return OPERATOR_CANCELLED;
}
- make_prim_finish(C, obedit, was_editmode, enter_editmode);
+ make_prim_finish(C, obedit, &creation_data, enter_editmode);
return OPERATOR_FINISHED;
}
@@ -566,17 +571,17 @@ void MESH_OT_primitive_uv_sphere_add(wmOperatorType *ot)
static int add_primitive_icosphere_exec(bContext *C, wmOperator *op)
{
+ MakePrimitiveData creation_data;
Object *obedit;
BMEditMesh *em;
- float loc[3], rot[3], mat[4][4], dia;
+ float loc[3], rot[3];
bool enter_editmode;
- bool was_editmode;
unsigned int layer;
const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
WM_operator_view3d_unit_defaults(C, op);
ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &layer, NULL);
- obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Icosphere"), &dia, mat, &was_editmode, loc, rot, layer);
+ obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Icosphere"), loc, rot, layer, &creation_data);
em = BKE_editmesh_from_object(obedit);
if (calc_uvs) {
@@ -587,12 +592,12 @@ static int add_primitive_icosphere_exec(bContext *C, wmOperator *op)
em, op, "verts.out", false,
"create_icosphere subdivisions=%i diameter=%f matrix=%m4 calc_uvs=%b",
RNA_int_get(op->ptr, "subdivisions"),
- RNA_float_get(op->ptr, "size"), mat, calc_uvs))
+ RNA_float_get(op->ptr, "size"), creation_data.mat, calc_uvs))
{
return OPERATOR_CANCELLED;
}
- make_prim_finish(C, obedit, was_editmode, enter_editmode);
+ make_prim_finish(C, obedit, &creation_data, enter_editmode);
return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/mesh/editmesh_bisect.c b/source/blender/editors/mesh/editmesh_bisect.c
index 3a9e278f039..1937a9f6891 100644
--- a/source/blender/editors/mesh/editmesh_bisect.c
+++ b/source/blender/editors/mesh/editmesh_bisect.c
@@ -50,9 +50,17 @@
#include "ED_screen.h"
#include "ED_view3d.h"
+#include "UI_resources.h"
#include "mesh_intern.h" /* own include */
+#define USE_MANIPULATOR
+
+#ifdef USE_MANIPULATOR
+#include "ED_manipulator_library.h"
+#include "ED_util.h"
+#endif
+
static int mesh_bisect_exec(bContext *C, wmOperator *op);
/* -------------------------------------------------------------------- */
@@ -186,6 +194,16 @@ static int mesh_bisect_modal(bContext *C, wmOperator *op, const wmEvent *event)
if (ret & (OPERATOR_FINISHED | OPERATOR_CANCELLED)) {
edbm_bisect_exit(C, &opdata_back);
+
+#ifdef USE_MANIPULATOR
+ /* Setup manipulators */
+ {
+ View3D *v3d = CTX_wm_view3d(C);
+ if (v3d && (v3d->twtype & V3D_MANIPULATOR_DRAW)) {
+ WM_manipulator_group_type_ensure("MESH_WGT_bisect");
+ }
+ }
+#endif
}
return ret;
@@ -315,6 +333,9 @@ static int mesh_bisect_exec(bContext *C, wmOperator *op)
}
}
+#ifdef USE_MANIPULATOR
+static void MESH_WGT_bisect(struct wmManipulatorGroupType *wgt);
+#endif
void MESH_OT_bisect(struct wmOperatorType *ot)
{
@@ -350,4 +371,331 @@ void MESH_OT_bisect(struct wmOperatorType *ot)
RNA_def_float(ot->srna, "threshold", 0.0001, 0.0, 10.0, "Axis Threshold", "", 0.00001, 0.1);
WM_operator_properties_gesture_straightline(ot, CURSOR_EDIT);
+
+#ifdef USE_MANIPULATOR
+ WM_manipulatorgrouptype_append(MESH_WGT_bisect);
+#endif
+}
+
+
+#ifdef USE_MANIPULATOR
+
+/* -------------------------------------------------------------------- */
+
+/** \name Bisect Manipulator
+ * \{ */
+
+typedef struct ManipulatorGroup {
+ /* Arrow to change plane depth. */
+ struct wmManipulator *translate_z;
+ /* Translate XYZ */
+ struct wmManipulator *translate_c;
+ /* For grabbing the manipulator and moving freely. */
+ struct wmManipulator *rotate_c;
+
+ /* We could store more vars here! */
+ struct {
+ bContext *context;
+ wmOperator *op;
+ PropertyRNA *prop_plane_co;
+ PropertyRNA *prop_plane_no;
+
+ float rotate_axis[3];
+ float rotate_up[3];
+ } data;
+} ManipulatorGroup;
+
+/**
+ * XXX. calling redo from property updates is not great.
+ * This is needed because changing the RNA doesn't cause a redo
+ * and we're not using operator UI which does just this.
+ */
+static void manipulator_bisect_exec(ManipulatorGroup *man)
+{
+ wmOperator *op = man->data.op;
+ if (op == WM_operator_last_redo((bContext *)man->data.context)) {
+ ED_undo_operator_repeat((bContext *)man->data.context, op);
+ }
+}
+
+static void manipulator_mesh_bisect_update_from_op(ManipulatorGroup *man)
+{
+ wmOperator *op = man->data.op;
+
+ float plane_co[3], plane_no[3];
+
+ RNA_property_float_get_array(op->ptr, man->data.prop_plane_co, plane_co);
+ RNA_property_float_get_array(op->ptr, man->data.prop_plane_no, plane_no);
+
+ WM_manipulator_set_matrix_location(man->translate_z, plane_co);
+ WM_manipulator_set_matrix_location(man->rotate_c, plane_co);
+ /* translate_c location comes from the property. */
+
+ WM_manipulator_set_matrix_rotation_from_z_axis(man->translate_z, plane_no);
+
+ WM_manipulator_set_scale(man->translate_c, 0.2);
+
+ RegionView3D *rv3d = ED_view3d_context_rv3d(man->data.context);
+ if (rv3d) {
+ normalize_v3_v3(man->data.rotate_axis, rv3d->viewinv[2]);
+ normalize_v3_v3(man->data.rotate_up, rv3d->viewinv[1]);
+
+ /* ensure its orthogonal */
+ project_plane_normalized_v3_v3v3(man->data.rotate_up, man->data.rotate_up, man->data.rotate_axis);
+ normalize_v3(man->data.rotate_up);
+
+ WM_manipulator_set_matrix_rotation_from_z_axis(man->translate_c, plane_no);
+
+ float plane_no_cross[3];
+ cross_v3_v3v3(plane_no_cross, plane_no, man->data.rotate_axis);
+
+ WM_manipulator_set_matrix_offset_rotation_from_yz_axis(man->rotate_c, plane_no_cross, man->data.rotate_axis);
+ RNA_enum_set(man->rotate_c->ptr, "draw_options",
+ ED_MANIPULATOR_DIAL_DRAW_FLAG_ANGLE_MIRROR |
+ ED_MANIPULATOR_DIAL_DRAW_FLAG_ANGLE_START_Y);
+ }
+}
+
+/* depth callbacks */
+static void manipulator_bisect_prop_depth_get(
+ const wmManipulator *mpr, wmManipulatorProperty *mpr_prop,
+ void *value_p)
+{
+ ManipulatorGroup *man = mpr->parent_mgroup->customdata;
+ wmOperator *op = man->data.op;
+ float *value = value_p;
+
+ BLI_assert(mpr_prop->type->array_length == 1);
+ UNUSED_VARS_NDEBUG(mpr_prop);
+
+ float plane_co[3], plane_no[3];
+ RNA_property_float_get_array(op->ptr, man->data.prop_plane_co, plane_co);
+ RNA_property_float_get_array(op->ptr, man->data.prop_plane_no, plane_no);
+
+ value[0] = dot_v3v3(plane_no, plane_co) - dot_v3v3(plane_no, mpr->matrix_basis[3]);
+}
+
+static void manipulator_bisect_prop_depth_set(
+ const wmManipulator *mpr, wmManipulatorProperty *mpr_prop,
+ const void *value_p)
+{
+ ManipulatorGroup *man = mpr->parent_mgroup->customdata;
+ wmOperator *op = man->data.op;
+ const float *value = value_p;
+
+ BLI_assert(mpr_prop->type->array_length == 1);
+ UNUSED_VARS_NDEBUG(mpr_prop);
+
+ float plane_co[3], plane[4];
+ RNA_property_float_get_array(op->ptr, man->data.prop_plane_co, plane_co);
+ RNA_property_float_get_array(op->ptr, man->data.prop_plane_no, plane);
+ normalize_v3(plane);
+
+ plane[3] = -value[0] - dot_v3v3(plane, mpr->matrix_basis[3]);
+
+ /* Keep our location, may be offset simply to be inside the viewport. */
+ closest_to_plane_normalized_v3(plane_co, plane, plane_co);
+
+ RNA_property_float_set_array(op->ptr, man->data.prop_plane_co, plane_co);
+
+ manipulator_bisect_exec(man);
+}
+
+/* translate callbacks */
+static void manipulator_bisect_prop_translate_get(
+ const wmManipulator *mpr, wmManipulatorProperty *mpr_prop,
+ void *value_p)
+{
+ ManipulatorGroup *man = mpr->parent_mgroup->customdata;
+ wmOperator *op = man->data.op;
+
+ BLI_assert(mpr_prop->type->array_length == 3);
+ UNUSED_VARS_NDEBUG(mpr_prop);
+
+ RNA_property_float_get_array(op->ptr, man->data.prop_plane_co, value_p);
+}
+
+static void manipulator_bisect_prop_translate_set(
+ const wmManipulator *mpr, wmManipulatorProperty *mpr_prop,
+ const void *value_p)
+{
+ ManipulatorGroup *man = mpr->parent_mgroup->customdata;
+ wmOperator *op = man->data.op;
+
+ BLI_assert(mpr_prop->type->array_length == 3);
+ UNUSED_VARS_NDEBUG(mpr_prop);
+
+ RNA_property_float_set_array(op->ptr, man->data.prop_plane_co, value_p);
+
+ manipulator_bisect_exec(man);
+}
+
+/* angle callbacks */
+static void manipulator_bisect_prop_angle_get(
+ const wmManipulator *mpr, wmManipulatorProperty *mpr_prop,
+ void *value_p)
+{
+ ManipulatorGroup *man = mpr->parent_mgroup->customdata;
+ wmOperator *op = man->data.op;
+ float *value = value_p;
+
+ BLI_assert(mpr_prop->type->array_length == 1);
+ UNUSED_VARS_NDEBUG(mpr_prop);
+
+ float plane_no[4];
+ RNA_property_float_get_array(op->ptr, man->data.prop_plane_no, plane_no);
+ normalize_v3(plane_no);
+
+ float plane_no_proj[3];
+ project_plane_normalized_v3_v3v3(plane_no_proj, plane_no, man->data.rotate_axis);
+
+ if (!is_zero_v3(plane_no_proj)) {
+ const float angle = -angle_signed_on_axis_v3v3_v3(plane_no_proj, man->data.rotate_up, man->data.rotate_axis);
+ value[0] = angle;
+ }
+ else {
+ value[0] = 0.0f;
+ }
+}
+
+static void manipulator_bisect_prop_angle_set(
+ const wmManipulator *mpr, wmManipulatorProperty *mpr_prop,
+ const void *value_p)
+{
+ ManipulatorGroup *man = mpr->parent_mgroup->customdata;
+ wmOperator *op = man->data.op;
+ const float *value = value_p;
+
+ BLI_assert(mpr_prop->type->array_length == 1);
+ UNUSED_VARS_NDEBUG(mpr_prop);
+
+ float plane_no[4];
+ RNA_property_float_get_array(op->ptr, man->data.prop_plane_no, plane_no);
+ normalize_v3(plane_no);
+
+ float plane_no_proj[3];
+ project_plane_normalized_v3_v3v3(plane_no_proj, plane_no, man->data.rotate_axis);
+
+ if (!is_zero_v3(plane_no_proj)) {
+ const float angle = -angle_signed_on_axis_v3v3_v3(plane_no_proj, man->data.rotate_up, man->data.rotate_axis);
+ const float angle_delta = angle - angle_compat_rad(value[0], angle);
+ if (angle_delta != 0.0f) {
+ float mat[3][3];
+ axis_angle_normalized_to_mat3(mat, man->data.rotate_axis, angle_delta);
+ mul_m3_v3(mat, plane_no);
+
+ /* re-normalize - seems acceptable */
+ RNA_property_float_set_array(op->ptr, man->data.prop_plane_no, plane_no);
+
+ manipulator_bisect_exec(man);
+ }
+ }
+}
+
+static bool manipulator_mesh_bisect_poll(const bContext *C, wmManipulatorGroupType *wgt)
+{
+ wmOperator *op = WM_operator_last_redo(C);
+ if (op == NULL || !STREQ(op->type->idname, "MESH_OT_bisect")) {
+ WM_manipulator_group_type_unlink_delayed_ptr(wgt);
+ return false;
+ }
+ return true;
}
+
+static void manipulator_mesh_bisect_setup(const bContext *C, wmManipulatorGroup *mgroup)
+{
+ wmOperator *op = WM_operator_last_redo(C);
+
+ if (op == NULL || !STREQ(op->type->idname, "MESH_OT_bisect")) {
+ return;
+ }
+
+ struct ManipulatorGroup *man = MEM_callocN(sizeof(ManipulatorGroup), __func__);
+ mgroup->customdata = man;
+
+ const wmManipulatorType *wt_arrow = WM_manipulatortype_find("MANIPULATOR_WT_arrow_3d", true);
+ const wmManipulatorType *wt_grab = WM_manipulatortype_find("MANIPULATOR_WT_grab_3d", true);
+ const wmManipulatorType *wt_dial = WM_manipulatortype_find("MANIPULATOR_WT_dial_3d", true);
+
+ man->translate_z = WM_manipulator_new_ptr(wt_arrow, mgroup, NULL);
+ man->translate_c = WM_manipulator_new_ptr(wt_grab, mgroup, NULL);
+ man->rotate_c = WM_manipulator_new_ptr(wt_dial, mgroup, NULL);
+
+ UI_GetThemeColor3fv(TH_MANIPULATOR_PRIMARY, man->translate_z->color);
+ UI_GetThemeColor3fv(TH_MANIPULATOR_PRIMARY, man->translate_c->color);
+ UI_GetThemeColor3fv(TH_MANIPULATOR_SECONDARY, man->rotate_c->color);
+
+ RNA_enum_set(man->translate_z->ptr, "draw_style", ED_MANIPULATOR_ARROW_STYLE_NORMAL);
+ RNA_enum_set(man->translate_c->ptr, "draw_style", ED_MANIPULATOR_GRAB_STYLE_RING_2D);
+
+ WM_manipulator_set_flag(man->translate_c, WM_MANIPULATOR_DRAW_VALUE, true);
+ WM_manipulator_set_flag(man->rotate_c, WM_MANIPULATOR_DRAW_VALUE, true);
+
+ {
+ man->data.context = (bContext *)C;
+ man->data.op = op;
+ man->data.prop_plane_co = RNA_struct_find_property(op->ptr, "plane_co");
+ man->data.prop_plane_no = RNA_struct_find_property(op->ptr, "plane_no");
+ }
+
+ manipulator_mesh_bisect_update_from_op(man);
+
+ /* Setup property callbacks */
+ {
+ WM_manipulator_target_property_def_func(
+ man->translate_z, "offset",
+ &(const struct wmManipulatorPropertyFnParams) {
+ .value_get_fn = manipulator_bisect_prop_depth_get,
+ .value_set_fn = manipulator_bisect_prop_depth_set,
+ .range_get_fn = NULL,
+ .user_data = NULL,
+ });
+
+ WM_manipulator_target_property_def_func(
+ man->translate_c, "offset",
+ &(const struct wmManipulatorPropertyFnParams) {
+ .value_get_fn = manipulator_bisect_prop_translate_get,
+ .value_set_fn = manipulator_bisect_prop_translate_set,
+ .range_get_fn = NULL,
+ .user_data = NULL,
+ });
+
+ WM_manipulator_target_property_def_func(
+ man->rotate_c, "offset",
+ &(const struct wmManipulatorPropertyFnParams) {
+ .value_get_fn = manipulator_bisect_prop_angle_get,
+ .value_set_fn = manipulator_bisect_prop_angle_set,
+ .range_get_fn = NULL,
+ .user_data = NULL,
+ });
+ }
+}
+
+static void manipulator_mesh_bisect_draw_prepare(
+ const bContext *UNUSED(C), wmManipulatorGroup *mgroup)
+{
+ ManipulatorGroup *man = mgroup->customdata;
+ if (man->data.op->next) {
+ man->data.op = WM_operator_last_redo((bContext *)man->data.context);
+ }
+ manipulator_mesh_bisect_update_from_op(man);
+}
+
+static void MESH_WGT_bisect(struct wmManipulatorGroupType *wgt)
+{
+ wgt->name = "Mesh Bisect";
+ wgt->idname = "MESH_WGT_bisect";
+
+ wgt->flag = WM_MANIPULATORGROUPTYPE_3D;
+
+ wgt->mmap_params.spaceid = SPACE_VIEW3D;
+ wgt->mmap_params.regionid = RGN_TYPE_WINDOW;
+
+ wgt->poll = manipulator_mesh_bisect_poll;
+ wgt->setup = manipulator_mesh_bisect_setup;
+ wgt->draw_prepare = manipulator_mesh_bisect_draw_prepare;
+}
+
+/** \} */
+
+#endif /* USE_MANIPULATOR */
diff --git a/source/blender/editors/mesh/editmesh_extrude.c b/source/blender/editors/mesh/editmesh_extrude.c
index 5ac90ec29e6..18320ec65f5 100644
--- a/source/blender/editors/mesh/editmesh_extrude.c
+++ b/source/blender/editors/mesh/editmesh_extrude.c
@@ -45,6 +45,7 @@
#include "RNA_define.h"
#include "RNA_access.h"
+#include "WM_api.h"
#include "WM_types.h"
#include "ED_mesh.h"
@@ -52,8 +53,19 @@
#include "ED_transform.h"
#include "ED_view3d.h"
+#include "UI_resources.h"
+
+#include "MEM_guardedalloc.h"
+
#include "mesh_intern.h" /* own include */
+#define USE_MANIPULATOR
+
+#ifdef USE_MANIPULATOR
+#include "ED_manipulator_library.h"
+#include "ED_util.h"
+#endif
+
static void edbm_extrude_edge_exclude_mirror(
Object *obedit, BMEditMesh *em,
const char hflag,
@@ -747,9 +759,25 @@ static int edbm_spin_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(e
}
}
- return edbm_spin_exec(C, op);
+ int ret = edbm_spin_exec(C, op);
+
+#ifdef USE_MANIPULATOR
+ if (ret & OPERATOR_FINISHED) {
+ /* Setup manipulators */
+ if (v3d && (v3d->twtype & V3D_MANIPULATOR_DRAW)) {
+ WM_manipulator_group_type_ensure("MESH_WGT_spin");
+ }
+ }
+#endif
+
+ return ret;
+
}
+#ifdef USE_MANIPULATOR
+static void MESH_WGT_spin(struct wmManipulatorGroupType *wgt);
+#endif
+
void MESH_OT_spin(wmOperatorType *ot)
{
PropertyRNA *prop;
@@ -778,8 +806,385 @@ void MESH_OT_spin(wmOperatorType *ot)
"Center", "Center in global view space", -1e4f, 1e4f);
RNA_def_float_vector(ot->srna, "axis", 3, NULL, -1.0f, 1.0f, "Axis", "Axis in global view space", -1.0f, 1.0f);
+#ifdef USE_MANIPULATOR
+ WM_manipulatorgrouptype_append(MESH_WGT_spin);
+#endif
+}
+
+
+#ifdef USE_MANIPULATOR
+
+/* -------------------------------------------------------------------- */
+
+/** \name Spin Manipulator
+ * \{ */
+
+typedef struct ManipulatorSpinGroup {
+ /* Arrow to change plane depth. */
+ struct wmManipulator *translate_z;
+ /* Translate XYZ */
+ struct wmManipulator *translate_c;
+ /* For grabbing the manipulator and moving freely. */
+ struct wmManipulator *rotate_c;
+ /* Spin angle */
+ struct wmManipulator *angle_z;
+
+ /* We could store more vars here! */
+ struct {
+ bContext *context;
+ wmOperator *op;
+ PropertyRNA *prop_axis_co;
+ PropertyRNA *prop_axis_no;
+ PropertyRNA *prop_angle;
+
+ float rotate_axis[3];
+ float rotate_up[3];
+ } data;
+} ManipulatorSpinGroup;
+
+/**
+ * XXX. calling redo from property updates is not great.
+ * This is needed because changing the RNA doesn't cause a redo
+ * and we're not using operator UI which does just this.
+ */
+static void manipulator_spin_exec(ManipulatorSpinGroup *man)
+{
+ wmOperator *op = man->data.op;
+ if (op == WM_operator_last_redo((bContext *)man->data.context)) {
+ ED_undo_operator_repeat((bContext *)man->data.context, op);
+ }
+}
+
+static void manipulator_mesh_spin_update_from_op(ManipulatorSpinGroup *man)
+{
+ wmOperator *op = man->data.op;
+
+ float plane_co[3], plane_no[3];
+
+ RNA_property_float_get_array(op->ptr, man->data.prop_axis_co, plane_co);
+ RNA_property_float_get_array(op->ptr, man->data.prop_axis_no, plane_no);
+
+ WM_manipulator_set_matrix_location(man->translate_z, plane_co);
+ WM_manipulator_set_matrix_location(man->rotate_c, plane_co);
+ WM_manipulator_set_matrix_location(man->angle_z, plane_co);
+ /* translate_c location comes from the property. */
+
+ WM_manipulator_set_matrix_rotation_from_z_axis(man->translate_z, plane_no);
+ WM_manipulator_set_matrix_rotation_from_z_axis(man->angle_z, plane_no);
+
+ WM_manipulator_set_scale(man->translate_c, 0.2);
+
+ RegionView3D *rv3d = ED_view3d_context_rv3d(man->data.context);
+ if (rv3d) {
+ normalize_v3_v3(man->data.rotate_axis, rv3d->viewinv[2]);
+ normalize_v3_v3(man->data.rotate_up, rv3d->viewinv[1]);
+
+ /* ensure its orthogonal */
+ project_plane_normalized_v3_v3v3(man->data.rotate_up, man->data.rotate_up, man->data.rotate_axis);
+ normalize_v3(man->data.rotate_up);
+
+ WM_manipulator_set_matrix_rotation_from_z_axis(man->translate_c, plane_no);
+ WM_manipulator_set_matrix_rotation_from_yz_axis(man->rotate_c, plane_no, man->data.rotate_axis);
+
+ /* show the axis instead of mouse cursor */
+ RNA_enum_set(man->rotate_c->ptr, "draw_options",
+ ED_MANIPULATOR_DIAL_DRAW_FLAG_ANGLE_MIRROR |
+ ED_MANIPULATOR_DIAL_DRAW_FLAG_ANGLE_START_Y);
+
+ }
}
+/* depth callbacks */
+static void manipulator_spin_prop_depth_get(
+ const wmManipulator *mpr, wmManipulatorProperty *mpr_prop,
+ void *value_p)
+{
+ ManipulatorSpinGroup *man = mpr->parent_mgroup->customdata;
+ wmOperator *op = man->data.op;
+ float *value = value_p;
+
+ BLI_assert(mpr_prop->type->array_length == 1);
+ UNUSED_VARS_NDEBUG(mpr_prop);
+
+ float plane_co[3], plane_no[3];
+ RNA_property_float_get_array(op->ptr, man->data.prop_axis_co, plane_co);
+ RNA_property_float_get_array(op->ptr, man->data.prop_axis_no, plane_no);
+
+ value[0] = dot_v3v3(plane_no, plane_co) - dot_v3v3(plane_no, mpr->matrix_basis[3]);
+}
+
+static void manipulator_spin_prop_depth_set(
+ const wmManipulator *mpr, wmManipulatorProperty *mpr_prop,
+ const void *value_p)
+{
+ ManipulatorSpinGroup *man = mpr->parent_mgroup->customdata;
+ wmOperator *op = man->data.op;
+ const float *value = value_p;
+
+ BLI_assert(mpr_prop->type->array_length == 1);
+ UNUSED_VARS_NDEBUG(mpr_prop);
+
+ float plane_co[3], plane[4];
+ RNA_property_float_get_array(op->ptr, man->data.prop_axis_co, plane_co);
+ RNA_property_float_get_array(op->ptr, man->data.prop_axis_no, plane);
+ normalize_v3(plane);
+
+ plane[3] = -value[0] - dot_v3v3(plane, mpr->matrix_basis[3]);
+
+ /* Keep our location, may be offset simply to be inside the viewport. */
+ closest_to_plane_normalized_v3(plane_co, plane, plane_co);
+
+ RNA_property_float_set_array(op->ptr, man->data.prop_axis_co, plane_co);
+
+ manipulator_spin_exec(man);
+}
+
+/* translate callbacks */
+static void manipulator_spin_prop_translate_get(
+ const wmManipulator *mpr, wmManipulatorProperty *mpr_prop,
+ void *value_p)
+{
+ ManipulatorSpinGroup *man = mpr->parent_mgroup->customdata;
+ wmOperator *op = man->data.op;
+ float *value = value_p;
+
+ BLI_assert(mpr_prop->type->array_length == 3);
+ UNUSED_VARS_NDEBUG(mpr_prop);
+
+ RNA_property_float_get_array(op->ptr, man->data.prop_axis_co, value);
+}
+
+static void manipulator_spin_prop_translate_set(
+ const wmManipulator *mpr, wmManipulatorProperty *mpr_prop,
+ const void *value)
+{
+ ManipulatorSpinGroup *man = mpr->parent_mgroup->customdata;
+ wmOperator *op = man->data.op;
+
+ BLI_assert(mpr_prop->type->array_length == 3);
+ UNUSED_VARS_NDEBUG(mpr_prop);
+
+ RNA_property_float_set_array(op->ptr, man->data.prop_axis_co, value);
+
+ manipulator_spin_exec(man);
+}
+
+/* angle callbacks */
+static void manipulator_spin_prop_axis_angle_get(
+ const wmManipulator *mpr, wmManipulatorProperty *mpr_prop,
+ void *value_p)
+{
+ ManipulatorSpinGroup *man = mpr->parent_mgroup->customdata;
+ wmOperator *op = man->data.op;
+ float *value = value_p;
+
+ BLI_assert(mpr_prop->type->array_length == 1);
+ UNUSED_VARS_NDEBUG(mpr_prop);
+
+ float plane_no[4];
+ RNA_property_float_get_array(op->ptr, man->data.prop_axis_no, plane_no);
+ normalize_v3(plane_no);
+
+ float plane_no_proj[3];
+ project_plane_normalized_v3_v3v3(plane_no_proj, plane_no, man->data.rotate_axis);
+
+ if (!is_zero_v3(plane_no_proj)) {
+ const float angle = -angle_signed_on_axis_v3v3_v3(plane_no_proj, man->data.rotate_up, man->data.rotate_axis);
+ value[0] = angle;
+ }
+ else {
+ value[0] = 0.0f;
+ }
+}
+
+static void manipulator_spin_prop_axis_angle_set(
+ const wmManipulator *mpr, wmManipulatorProperty *mpr_prop,
+ const void *value_p)
+{
+ ManipulatorSpinGroup *man = mpr->parent_mgroup->customdata;
+ wmOperator *op = man->data.op;
+ const float *value = value_p;
+
+ BLI_assert(mpr_prop->type->array_length == 1);
+ UNUSED_VARS_NDEBUG(mpr_prop);
+
+ float plane_no[4];
+ RNA_property_float_get_array(op->ptr, man->data.prop_axis_no, plane_no);
+ normalize_v3(plane_no);
+
+ float plane_no_proj[3];
+ project_plane_normalized_v3_v3v3(plane_no_proj, plane_no, man->data.rotate_axis);
+
+ if (!is_zero_v3(plane_no_proj)) {
+ const float angle = -angle_signed_on_axis_v3v3_v3(plane_no_proj, man->data.rotate_up, man->data.rotate_axis);
+ const float angle_delta = angle - angle_compat_rad(value[0], angle);
+ if (angle_delta != 0.0f) {
+ float mat[3][3];
+ axis_angle_normalized_to_mat3(mat, man->data.rotate_axis, angle_delta);
+ mul_m3_v3(mat, plane_no);
+
+ /* re-normalize - seems acceptable */
+ RNA_property_float_set_array(op->ptr, man->data.prop_axis_no, plane_no);
+
+ manipulator_spin_exec(man);
+ }
+ }
+}
+
+/* angle callbacks */
+static void manipulator_spin_prop_angle_get(
+ const wmManipulator *mpr, wmManipulatorProperty *mpr_prop,
+ void *value_p)
+{
+ ManipulatorSpinGroup *man = mpr->parent_mgroup->customdata;
+ wmOperator *op = man->data.op;
+ float *value = value_p;
+
+ BLI_assert(mpr_prop->type->array_length == 1);
+ UNUSED_VARS_NDEBUG(mpr_prop);
+ value[0] = RNA_property_float_get(op->ptr, man->data.prop_angle);
+}
+
+static void manipulator_spin_prop_angle_set(
+ const wmManipulator *mpr, wmManipulatorProperty *mpr_prop,
+ const void *value_p)
+{
+ ManipulatorSpinGroup *man = mpr->parent_mgroup->customdata;
+ wmOperator *op = man->data.op;
+ BLI_assert(mpr_prop->type->array_length == 1);
+ UNUSED_VARS_NDEBUG(mpr_prop);
+ const float *value = value_p;
+ RNA_property_float_set(op->ptr, man->data.prop_angle, value[0]);
+
+ manipulator_spin_exec(man);
+}
+
+static bool manipulator_mesh_spin_poll(const bContext *C, wmManipulatorGroupType *wgt)
+{
+ wmOperator *op = WM_operator_last_redo(C);
+ if (op == NULL || !STREQ(op->type->idname, "MESH_OT_spin")) {
+ WM_manipulator_group_type_unlink_delayed_ptr(wgt);
+ return false;
+ }
+ return true;
+}
+
+static void manipulator_mesh_spin_setup(const bContext *C, wmManipulatorGroup *mgroup)
+{
+ wmOperator *op = WM_operator_last_redo(C);
+
+ if (op == NULL || !STREQ(op->type->idname, "MESH_OT_spin")) {
+ return;
+ }
+
+ struct ManipulatorSpinGroup *man = MEM_callocN(sizeof(ManipulatorSpinGroup), __func__);
+ mgroup->customdata = man;
+
+ const wmManipulatorType *wt_arrow = WM_manipulatortype_find("MANIPULATOR_WT_arrow_3d", true);
+ const wmManipulatorType *wt_grab = WM_manipulatortype_find("MANIPULATOR_WT_grab_3d", true);
+ const wmManipulatorType *wt_dial = WM_manipulatortype_find("MANIPULATOR_WT_dial_3d", true);
+
+ man->translate_z = WM_manipulator_new_ptr(wt_arrow, mgroup, NULL);
+ man->translate_c = WM_manipulator_new_ptr(wt_grab, mgroup, NULL);
+ man->rotate_c = WM_manipulator_new_ptr(wt_dial, mgroup, NULL);
+ man->angle_z = WM_manipulator_new_ptr(wt_dial, mgroup, NULL);
+
+ UI_GetThemeColor3fv(TH_MANIPULATOR_PRIMARY, man->translate_z->color);
+ UI_GetThemeColor3fv(TH_MANIPULATOR_PRIMARY, man->translate_c->color);
+ UI_GetThemeColor3fv(TH_MANIPULATOR_SECONDARY, man->rotate_c->color);
+ UI_GetThemeColor3fv(TH_AXIS_Z, man->angle_z->color);
+
+
+ RNA_enum_set(man->translate_z->ptr, "draw_style", ED_MANIPULATOR_ARROW_STYLE_NORMAL);
+ RNA_enum_set(man->translate_c->ptr, "draw_style", ED_MANIPULATOR_GRAB_STYLE_RING_2D);
+
+ WM_manipulator_set_flag(man->translate_c, WM_MANIPULATOR_DRAW_VALUE, true);
+ WM_manipulator_set_flag(man->rotate_c, WM_MANIPULATOR_DRAW_VALUE, true);
+ WM_manipulator_set_flag(man->angle_z, WM_MANIPULATOR_DRAW_VALUE, true);
+
+ WM_manipulator_set_scale(man->angle_z, 0.5f);
+
+ {
+ man->data.context = (bContext *)C;
+ man->data.op = op;
+ man->data.prop_axis_co = RNA_struct_find_property(op->ptr, "center");
+ man->data.prop_axis_no = RNA_struct_find_property(op->ptr, "axis");
+ man->data.prop_angle = RNA_struct_find_property(op->ptr, "angle");
+ }
+
+ manipulator_mesh_spin_update_from_op(man);
+
+ /* Setup property callbacks */
+ {
+ WM_manipulator_target_property_def_func(
+ man->translate_z, "offset",
+ &(const struct wmManipulatorPropertyFnParams) {
+ .value_get_fn = manipulator_spin_prop_depth_get,
+ .value_set_fn = manipulator_spin_prop_depth_set,
+ .range_get_fn = NULL,
+ .user_data = NULL,
+ });
+
+ WM_manipulator_target_property_def_func(
+ man->translate_c, "offset",
+ &(const struct wmManipulatorPropertyFnParams) {
+ .value_get_fn = manipulator_spin_prop_translate_get,
+ .value_set_fn = manipulator_spin_prop_translate_set,
+ .range_get_fn = NULL,
+ .user_data = NULL,
+ });
+
+ WM_manipulator_target_property_def_func(
+ man->rotate_c, "offset",
+ &(const struct wmManipulatorPropertyFnParams) {
+ .value_get_fn = manipulator_spin_prop_axis_angle_get,
+ .value_set_fn = manipulator_spin_prop_axis_angle_set,
+ .range_get_fn = NULL,
+ .user_data = NULL,
+ });
+
+ WM_manipulator_target_property_def_func(
+ man->angle_z, "offset",
+ &(const struct wmManipulatorPropertyFnParams) {
+ .value_get_fn = manipulator_spin_prop_angle_get,
+ .value_set_fn = manipulator_spin_prop_angle_set,
+ .range_get_fn = NULL,
+ .user_data = NULL,
+ });
+
+ }
+}
+
+static void manipulator_mesh_spin_draw_prepare(
+ const bContext *UNUSED(C), wmManipulatorGroup *mgroup)
+{
+ ManipulatorSpinGroup *man = mgroup->customdata;
+ if (man->data.op->next) {
+ man->data.op = WM_operator_last_redo((bContext *)man->data.context);
+ }
+ manipulator_mesh_spin_update_from_op(man);
+}
+
+static void MESH_WGT_spin(struct wmManipulatorGroupType *wgt)
+{
+ wgt->name = "Mesh Spin";
+ wgt->idname = "MESH_WGT_spin";
+
+ wgt->flag = WM_MANIPULATORGROUPTYPE_3D;
+
+ wgt->mmap_params.spaceid = SPACE_VIEW3D;
+ wgt->mmap_params.regionid = RGN_TYPE_WINDOW;
+
+ wgt->poll = manipulator_mesh_spin_poll;
+ wgt->setup = manipulator_mesh_spin_setup;
+ wgt->draw_prepare = manipulator_mesh_spin_draw_prepare;
+}
+
+/** \} */
+
+#endif /* USE_MANIPULATOR */
+
+
static int edbm_screw_exec(bContext *C, wmOperator *op)
{
Object *obedit = CTX_data_edit_object(C);
diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c
index 658f8b3958b..5d5e54edf56 100644
--- a/source/blender/editors/mesh/editmesh_knife.c
+++ b/source/blender/editors/mesh/editmesh_knife.c
@@ -54,8 +54,10 @@
#include "BKE_editmesh_bvh.h"
#include "BKE_report.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h" /* for paint cursor */
+#include "DEG_depsgraph.h"
+
+#include "GPU_immediate.h"
+#include "GPU_matrix.h"
#include "ED_screen.h"
#include "ED_space_api.h"
@@ -159,6 +161,7 @@ typedef struct KnifePosData {
typedef struct KnifeTool_OpData {
ARegion *ar; /* region that knifetool was activated in */
void *draw_handle; /* for drawing preview loop */
+ EvaluationContext eval_ctx;
ViewContext vc; /* note: _don't_ use 'mval', instead use the one we define below */
float mval[2]; /* mouse value with snapping applied */
//bContext *C;
@@ -1004,12 +1007,18 @@ static void knifetool_draw_angle_snapping(const KnifeTool_OpData *kcd)
copy_v3_v3(v2, ray_hit_best[1]);
}
- UI_ThemeColor(TH_TRANSFORM);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformThemeColor(TH_TRANSFORM);
glLineWidth(2.0);
- glBegin(GL_LINES);
- glVertex3fv(v1);
- glVertex3fv(v2);
- glEnd();
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex3fv(pos, v1);
+ immVertex3fv(pos, v2);
+ immEnd();
+
+ immUnbindProgram();
}
static void knife_init_colors(KnifeColors *colors)
@@ -1037,66 +1046,69 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg)
glPolygonOffset(1.0f, 1.0f);
- glPushMatrix();
- glMultMatrixf(kcd->ob->obmat);
+ gpuPushMatrix();
+ gpuMultMatrix(kcd->ob->obmat);
+
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
if (kcd->mode == MODE_DRAGGING) {
if (kcd->is_angle_snapping)
knifetool_draw_angle_snapping(kcd);
- glColor3ubv(kcd->colors.line);
-
+ immUniformColor3ubv(kcd->colors.line);
glLineWidth(2.0);
- glBegin(GL_LINES);
- glVertex3fv(kcd->prev.cage);
- glVertex3fv(kcd->curr.cage);
- glEnd();
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex3fv(pos, kcd->prev.cage);
+ immVertex3fv(pos, kcd->curr.cage);
+ immEnd();
}
if (kcd->prev.vert) {
- glColor3ubv(kcd->colors.point);
+ immUniformColor3ubv(kcd->colors.point);
glPointSize(11);
- glBegin(GL_POINTS);
- glVertex3fv(kcd->prev.cage);
- glEnd();
+ immBegin(GWN_PRIM_POINTS, 1);
+ immVertex3fv(pos, kcd->prev.cage);
+ immEnd();
}
if (kcd->prev.bmface) {
- glColor3ubv(kcd->colors.curpoint);
+ immUniformColor3ubv(kcd->colors.curpoint);
glPointSize(9);
- glBegin(GL_POINTS);
- glVertex3fv(kcd->prev.cage);
- glEnd();
+ immBegin(GWN_PRIM_POINTS, 1);
+ immVertex3fv(pos, kcd->prev.cage);
+ immEnd();
}
if (kcd->curr.edge) {
- glColor3ubv(kcd->colors.edge);
+ immUniformColor3ubv(kcd->colors.edge);
glLineWidth(2.0);
- glBegin(GL_LINES);
- glVertex3fv(kcd->curr.edge->v1->cageco);
- glVertex3fv(kcd->curr.edge->v2->cageco);
- glEnd();
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex3fv(pos, kcd->curr.edge->v1->cageco);
+ immVertex3fv(pos, kcd->curr.edge->v2->cageco);
+ immEnd();
}
else if (kcd->curr.vert) {
- glColor3ubv(kcd->colors.point);
+ immUniformColor3ubv(kcd->colors.point);
glPointSize(11);
- glBegin(GL_POINTS);
- glVertex3fv(kcd->curr.cage);
- glEnd();
+ immBegin(GWN_PRIM_POINTS, 1);
+ immVertex3fv(pos, kcd->curr.cage);
+ immEnd();
}
if (kcd->curr.bmface) {
- glColor3ubv(kcd->colors.curpoint);
+ immUniformColor3ubv(kcd->colors.curpoint);
glPointSize(9);
- glBegin(GL_POINTS);
- glVertex3fv(kcd->curr.cage);
- glEnd();
+ immBegin(GWN_PRIM_POINTS, 1);
+ immVertex3fv(pos, kcd->curr.cage);
+ immEnd();
}
if (kcd->totlinehit > 0) {
@@ -1107,26 +1119,35 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
/* draw any snapped verts first */
- glColor4ubv(kcd->colors.point_a);
+ immUniformColor4ubv(kcd->colors.point_a);
glPointSize(11);
- glBegin(GL_POINTS);
+
+ immBeginAtMost(GWN_PRIM_POINTS, kcd->totlinehit);
+
lh = kcd->linehits;
for (i = 0; i < kcd->totlinehit; i++, lh++) {
- if (lh->v)
- glVertex3fv(lh->cagehit);
+ if (lh->v) {
+ immVertex3fv(pos, lh->cagehit);
+ }
}
- glEnd();
+
+ immEnd();
/* now draw the rest */
- glColor4ubv(kcd->colors.curpoint_a);
+ immUniformColor4ubv(kcd->colors.curpoint_a);
glPointSize(7);
- glBegin(GL_POINTS);
+
+ immBeginAtMost(GWN_PRIM_POINTS, kcd->totlinehit);
+
lh = kcd->linehits;
for (i = 0; i < kcd->totlinehit; i++, lh++) {
- if (!lh->v)
- glVertex3fv(lh->cagehit);
+ if (!lh->v) {
+ immVertex3fv(pos, lh->cagehit);
+ }
}
- glEnd();
+
+ immEnd();
+
glDisable(GL_BLEND);
}
@@ -1134,44 +1155,46 @@ static void knifetool_draw(const bContext *C, ARegion *UNUSED(ar), void *arg)
BLI_mempool_iter iter;
KnifeEdge *kfe;
+ immUniformColor3ubv(kcd->colors.line);
glLineWidth(1.0);
- glBegin(GL_LINES);
+
+ immBeginAtMost(GWN_PRIM_LINES, BLI_mempool_count(kcd->kedges) * 2);
BLI_mempool_iternew(kcd->kedges, &iter);
for (kfe = BLI_mempool_iterstep(&iter); kfe; kfe = BLI_mempool_iterstep(&iter)) {
if (!kfe->is_cut)
continue;
- glColor3ubv(kcd->colors.line);
-
- glVertex3fv(kfe->v1->cageco);
- glVertex3fv(kfe->v2->cageco);
+ immVertex3fv(pos, kfe->v1->cageco);
+ immVertex3fv(pos, kfe->v2->cageco);
}
- glEnd();
+ immEnd();
}
if (kcd->totkvert > 0) {
BLI_mempool_iter iter;
KnifeVert *kfv;
+ immUniformColor3ubv(kcd->colors.point);
glPointSize(5.0);
- glBegin(GL_POINTS);
+ immBeginAtMost(GWN_PRIM_POINTS, BLI_mempool_count(kcd->kverts));
+
BLI_mempool_iternew(kcd->kverts, &iter);
for (kfv = BLI_mempool_iterstep(&iter); kfv; kfv = BLI_mempool_iterstep(&iter)) {
if (!kfv->is_cut)
continue;
- glColor3ubv(kcd->colors.point);
-
- glVertex3fv(kfv->cageco);
+ immVertex3fv(pos, kfv->cageco);
}
- glEnd();
+ immEnd();
}
- glPopMatrix();
+ immUnbindProgram();
+
+ gpuPopMatrix();
if (v3d->zbuf) glEnable(GL_DEPTH_TEST);
}
@@ -1394,7 +1417,7 @@ static bool bm_ray_cast_cb_elem_not_in_face_check(BMFace *f, void *user_data)
* intersecting faces matching this face (or connected when an vert/edge) will be ignored.
*/
static bool point_is_visible(
- KnifeTool_OpData *kcd, const float p[3], const float s[2], bglMats *mats,
+ KnifeTool_OpData *kcd, const float p[3], const float s[2],
BMElem *ele_test)
{
BMFace *f_hit;
@@ -1412,7 +1435,7 @@ static bool point_is_visible(
float view[3], p_ofs[3];
/* TODO: I think there's a simpler way to get the required raycast ray */
- ED_view3d_unproject(mats, view, s[0], s[1], 0.0f);
+ ED_view3d_unproject(kcd->vc.ar, s[0], s[1], 0.0f, view);
mul_m4_v3(kcd->ob->imat, view);
@@ -1485,7 +1508,6 @@ static void set_linehit_depth(KnifeTool_OpData *kcd, KnifeLineHit *lh)
/* Finds visible (or all, if cutting through) edges that intersects the current screen drag line */
static void knife_find_line_hits(KnifeTool_OpData *kcd)
{
- bglMats mats;
SmallHash faces, kfes, kfvs;
float v1[3], v2[3], v3[3], v4[3], s1[2], s2[2];
BVHTree *planetree, *tree;
@@ -1515,8 +1537,6 @@ static void knife_find_line_hits(KnifeTool_OpData *kcd)
const bool use_hit_prev = true;
const bool use_hit_curr = (kcd->is_drag_hold == false);
- bgl_get_mats(&mats);
-
if (kcd->linehits) {
MEM_freeN(kcd->linehits);
kcd->linehits = NULL;
@@ -1542,8 +1562,8 @@ static void knife_find_line_hits(KnifeTool_OpData *kcd)
}
/* unproject screen line */
- ED_view3d_win_to_segment(kcd->ar, kcd->vc.v3d, s1, v1, v3, true);
- ED_view3d_win_to_segment(kcd->ar, kcd->vc.v3d, s2, v2, v4, true);
+ ED_view3d_win_to_segment(kcd->eval_ctx.depsgraph, kcd->ar, kcd->vc.v3d, s1, v1, v3, true);
+ ED_view3d_win_to_segment(kcd->eval_ctx.depsgraph, kcd->ar, kcd->vc.v3d, s2, v2, v4, true);
mul_m4_v3(kcd->ob->imat, v1);
mul_m4_v3(kcd->ob->imat, v2);
@@ -1645,7 +1665,7 @@ static void knife_find_line_hits(KnifeTool_OpData *kcd)
knife_project_v2(kcd, v->cageco, s);
d = dist_squared_to_line_segment_v2(s, s1, s2);
if ((d <= vert_tol_sq) &&
- (point_is_visible(kcd, v->cageco, s, &mats, bm_elem_from_knife_vert(v, &kfe_hit))))
+ (point_is_visible(kcd, v->cageco, s, bm_elem_from_knife_vert(v, &kfe_hit))))
{
memset(&hit, 0, sizeof(hit));
hit.v = v;
@@ -1708,7 +1728,7 @@ static void knife_find_line_hits(KnifeTool_OpData *kcd)
* Need to find 3d intersection of ray through sint */
knife_input_ray_segment(kcd, sint, 1.0f, r1, r2);
isect_kind = isect_line_line_v3(kfe->v1->cageco, kfe->v2->cageco, r1, r2, p_cage, p_cage_tmp);
- if (isect_kind >= 1 && point_is_visible(kcd, p_cage, sint, &mats, bm_elem_from_knife_edge(kfe))) {
+ if (isect_kind >= 1 && point_is_visible(kcd, p_cage, sint, bm_elem_from_knife_edge(kfe))) {
memset(&hit, 0, sizeof(hit));
if (kcd->snap_midpoints) {
/* choose intermediate point snap too */
@@ -1737,7 +1757,7 @@ static void knife_find_line_hits(KnifeTool_OpData *kcd)
float p[3], p_cage[3];
if (use_hit_prev && knife_ray_intersect_face(kcd, s1, v1, v3, f, face_tol_sq, p, p_cage)) {
- if (point_is_visible(kcd, p_cage, s1, &mats, (BMElem *)f)) {
+ if (point_is_visible(kcd, p_cage, s1, (BMElem *)f)) {
memset(&hit, 0, sizeof(hit));
hit.f = f;
copy_v3_v3(hit.hit, p);
@@ -1749,7 +1769,7 @@ static void knife_find_line_hits(KnifeTool_OpData *kcd)
}
if (use_hit_curr && knife_ray_intersect_face(kcd, s2, v2, v4, f, face_tol_sq, p, p_cage)) {
- if (point_is_visible(kcd, p_cage, s2, &mats, (BMElem *)f)) {
+ if (point_is_visible(kcd, p_cage, s2, (BMElem *)f)) {
memset(&hit, 0, sizeof(hit));
hit.f = f;
copy_v3_v3(hit.hit, p);
@@ -1782,13 +1802,9 @@ static void knife_find_line_hits(KnifeTool_OpData *kcd)
static void knife_input_ray_segment(KnifeTool_OpData *kcd, const float mval[2], const float ofs,
float r_origin[3], float r_origin_ofs[3])
{
- bglMats mats;
-
- bgl_get_mats(&mats);
-
/* unproject to find view ray */
- ED_view3d_unproject(&mats, r_origin, mval[0], mval[1], 0.0f);
- ED_view3d_unproject(&mats, r_origin_ofs, mval[0], mval[1], ofs);
+ ED_view3d_unproject(kcd->vc.ar, mval[0], mval[1], 0.0f, r_origin);
+ ED_view3d_unproject(kcd->vc.ar, mval[0], mval[1], ofs, r_origin_ofs);
/* transform into object space */
invert_m4_m4(kcd->ob->imat, kcd->ob->obmat);
@@ -1822,7 +1838,7 @@ static BMFace *knife_find_closest_face(KnifeTool_OpData *kcd, float co[3], float
if (!f) {
if (kcd->is_interactive) {
/* try to use backbuffer selection method if ray casting failed */
- f = EDBM_face_find_nearest(&kcd->vc, &dist);
+ f = EDBM_face_find_nearest(&kcd->eval_ctx, &kcd->vc, &dist);
/* cheat for now; just put in the origin instead
* of a true coordinate on the face.
@@ -2503,7 +2519,8 @@ static void knife_recalc_projmat(KnifeTool_OpData *kcd)
mul_v3_mat3_m4v3(kcd->proj_zaxis, kcd->ob->imat, kcd->vc.rv3d->viewinv[2]);
normalize_v3(kcd->proj_zaxis);
- kcd->is_ortho = ED_view3d_clip_range_get(kcd->vc.v3d, kcd->vc.rv3d,
+ kcd->is_ortho = ED_view3d_clip_range_get(kcd->eval_ctx.depsgraph,
+ kcd->vc.v3d, kcd->vc.rv3d,
&kcd->clipsta, &kcd->clipend, true);
}
@@ -2574,7 +2591,7 @@ static void knifetool_init_bmbvh(KnifeTool_OpData *kcd)
{
BM_mesh_elem_index_ensure(kcd->em->bm, BM_VERT);
- kcd->cagecos = (const float (*)[3])BKE_editmesh_vertexCos_get(kcd->em, kcd->scene, NULL);
+ kcd->cagecos = (const float (*)[3])BKE_editmesh_vertexCos_get(&kcd->eval_ctx, kcd->em, kcd->scene, NULL);
kcd->bmbvh = BKE_bmbvh_new_from_editmesh(
kcd->em,
@@ -2608,6 +2625,7 @@ static void knifetool_init(bContext *C, KnifeTool_OpData *kcd,
kcd->ob = obedit;
kcd->ar = CTX_wm_region(C);
+ CTX_data_eval_ctx(C, &kcd->eval_ctx);
em_setup_viewcontext(C, &kcd->vc);
kcd->em = BKE_editmesh_from_object(kcd->ob);
@@ -2775,6 +2793,7 @@ static int knifetool_modal(bContext *C, wmOperator *op, const wmEvent *event)
return OPERATOR_FINISHED;
}
+ CTX_data_eval_ctx(C, &kcd->eval_ctx);
em_setup_viewcontext(C, &kcd->vc);
kcd->ar = kcd->vc.ar;
@@ -3008,7 +3027,6 @@ static bool edbm_mesh_knife_point_isect(LinkNode *polys, const float cent_ss[2])
void EDBM_mesh_knife(bContext *C, LinkNode *polys, bool use_tag, bool cut_through)
{
KnifeTool_OpData *kcd;
- bglMats mats;
view3d_operator_needs_opengl(C);
@@ -3027,10 +3045,6 @@ void EDBM_mesh_knife(bContext *C, LinkNode *polys, bool use_tag, bool cut_throug
if (use_tag) {
BM_mesh_elem_hflag_enable_all(kcd->em->bm, BM_EDGE, BM_ELEM_TAG, false);
}
-
- if (kcd->cut_through == false) {
- bgl_get_mats(&mats);
- }
}
/* execute */
@@ -3139,7 +3153,7 @@ void EDBM_mesh_knife(bContext *C, LinkNode *polys, bool use_tag, bool cut_throug
float cent[3], cent_ss[2];
BM_face_calc_point_in_face(f, cent);
knife_project_v2(kcd, cent, cent_ss);
- if ((kcd->cut_through || point_is_visible(kcd, cent, cent_ss, &mats, (BMElem *)f)) &&
+ if ((kcd->cut_through || point_is_visible(kcd, cent, cent_ss, (BMElem *)f)) &&
edbm_mesh_knife_point_isect(polys, cent_ss))
{
BM_elem_flag_enable(f, BM_ELEM_TAG);
diff --git a/source/blender/editors/mesh/editmesh_knife_project.c b/source/blender/editors/mesh/editmesh_knife_project.c
index 0d3cc07589b..c98d22503e1 100644
--- a/source/blender/editors/mesh/editmesh_knife_project.c
+++ b/source/blender/editors/mesh/editmesh_knife_project.c
@@ -42,6 +42,8 @@
#include "BKE_editmesh.h"
#include "BKE_report.h"
+#include "DEG_depsgraph.h"
+
#include "RNA_define.h"
#include "RNA_access.h"
@@ -56,13 +58,17 @@
#include "mesh_intern.h" /* own include */
-static LinkNode *knifeproject_poly_from_object(ARegion *ar, Scene *scene, Object *ob, LinkNode *polys)
+static LinkNode *knifeproject_poly_from_object(const bContext *C, Scene *scene, Object *ob, LinkNode *polys)
{
+ ARegion *ar = CTX_wm_region(C);
+ EvaluationContext eval_ctx;
DerivedMesh *dm;
bool dm_needsFree;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
if (ob->type == OB_MESH || ob->derivedFinal) {
- dm = ob->derivedFinal ? ob->derivedFinal : mesh_get_derived_final(scene, ob, CD_MASK_BAREMESH);
+ dm = ob->derivedFinal ? ob->derivedFinal : mesh_get_derived_final(&eval_ctx, scene, ob, CD_MASK_BAREMESH);
dm_needsFree = false;
}
else if (ELEM(ob->type, OB_FONT, OB_CURVE, OB_SURF)) {
@@ -116,7 +122,6 @@ static LinkNode *knifeproject_poly_from_object(ARegion *ar, Scene *scene, Object
static int knifeproject_exec(bContext *C, wmOperator *op)
{
- ARegion *ar = CTX_wm_region(C);
Scene *scene = CTX_data_scene(C);
Object *obedit = CTX_data_edit_object(C);
BMEditMesh *em = BKE_editmesh_from_object(obedit);
@@ -127,7 +132,7 @@ static int knifeproject_exec(bContext *C, wmOperator *op)
CTX_DATA_BEGIN (C, Object *, ob, selected_objects)
{
if (ob != obedit) {
- polys = knifeproject_poly_from_object(ar, scene, ob, polys);
+ polys = knifeproject_poly_from_object(C, scene, ob, polys);
}
}
CTX_DATA_END;
diff --git a/source/blender/editors/mesh/editmesh_loopcut.c b/source/blender/editors/mesh/editmesh_loopcut.c
index 5d4f6242e4f..793e5609d31 100644
--- a/source/blender/editors/mesh/editmesh_loopcut.c
+++ b/source/blender/editors/mesh/editmesh_loopcut.c
@@ -45,7 +45,8 @@
#include "BKE_DerivedMesh.h"
#include "BKE_unit.h"
-#include "BIF_gl.h"
+#include "GPU_immediate.h"
+#include "GPU_matrix.h"
#include "UI_interface.h"
@@ -62,6 +63,8 @@
#include "WM_api.h"
#include "WM_types.h"
+#include "DEG_depsgraph.h"
+
#include "mesh_intern.h" /* own include */
#define SUBD_SMOOTH_MAX 4.0f
@@ -104,27 +107,41 @@ static void ringsel_draw(const bContext *C, ARegion *UNUSED(ar), void *arg)
if (v3d && v3d->zbuf)
glDisable(GL_DEPTH_TEST);
- glPushMatrix();
- glMultMatrixf(lcd->ob->obmat);
+ gpuPushMatrix();
+ gpuMultMatrix(lcd->ob->obmat);
+
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformColor3ub(255, 0, 255);
- glColor3ub(255, 0, 255);
if (lcd->totedge > 0) {
- glEnableClientState(GL_VERTEX_ARRAY);
- glVertexPointer(3, GL_FLOAT, 0, lcd->edges);
- glDrawArrays(GL_LINES, 0, lcd->totedge * 2);
- glDisableClientState(GL_VERTEX_ARRAY);
+ immBegin(GWN_PRIM_LINES, lcd->totedge * 2);
+
+ for (int i = 0; i < lcd->totedge; i++) {
+ immVertex3fv(pos, lcd->edges[i][0]);
+ immVertex3fv(pos, lcd->edges[i][1]);
+ }
+
+ immEnd();
}
if (lcd->totpoint > 0) {
glPointSize(3.0f);
- glEnableClientState(GL_VERTEX_ARRAY);
- glVertexPointer(3, GL_FLOAT, 0, lcd->points);
- glDrawArrays(GL_POINTS, 0, lcd->totpoint);
- glDisableClientState(GL_VERTEX_ARRAY);
+ immBegin(GWN_PRIM_POINTS, lcd->totpoint);
+
+ for (int i = 0; i < lcd->totpoint; i++) {
+ immVertex3fv(pos, lcd->points[i]);
+ }
+
+ immEnd();
}
- glPopMatrix();
+ immUnbindProgram();
+
+ gpuPopMatrix();
+
if (v3d && v3d->zbuf)
glEnable(GL_DEPTH_TEST);
}
@@ -538,20 +555,23 @@ static void loopcut_update_edge(RingSelOpData *lcd, BMEdge *e, const int preview
}
}
-static void loopcut_mouse_move(RingSelOpData *lcd, const int previewlines)
+static void loopcut_mouse_move(const struct EvaluationContext *eval_ctx, RingSelOpData *lcd, const int previewlines)
{
float dist = ED_view3d_select_dist_px();
- BMEdge *e = EDBM_edge_find_nearest(&lcd->vc, &dist);
+ BMEdge *e = EDBM_edge_find_nearest(eval_ctx, &lcd->vc, &dist);
loopcut_update_edge(lcd, e, previewlines);
}
/* called by both init() and exec() */
static int loopcut_init(bContext *C, wmOperator *op, const wmEvent *event)
{
+ EvaluationContext eval_ctx;
const bool is_interactive = (event != NULL);
Object *obedit = CTX_data_edit_object(C);
RingSelOpData *lcd;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
if (modifiers_isDeformedByLattice(obedit) || modifiers_isDeformedByArmature(obedit))
BKE_report(op->reports, RPT_WARNING, "Loop cut does not work well on deformed edit mesh display");
@@ -579,7 +599,7 @@ static int loopcut_init(bContext *C, wmOperator *op, const wmEvent *event)
if (is_interactive) {
copy_v2_v2_int(lcd->vc.mval, event->mval);
- loopcut_mouse_move(lcd, is_interactive ? 1 : 0);
+ loopcut_mouse_move(&eval_ctx, lcd, is_interactive ? 1 : 0);
}
else {
const int e_index = RNA_int_get(op->ptr, "edge_index");
@@ -652,12 +672,14 @@ static int loopcut_finish(RingSelOpData *lcd, bContext *C, wmOperator *op)
static int loopcut_modal(bContext *C, wmOperator *op, const wmEvent *event)
{
+ EvaluationContext eval_ctx;
RingSelOpData *lcd = op->customdata;
float cuts = lcd->cuts;
float smoothness = lcd->smoothness;
bool show_cuts = false;
const bool has_numinput = hasNumInput(&lcd->num);
+ CTX_data_eval_ctx(C, &eval_ctx);
em_setup_viewcontext(C, &lcd->vc);
lcd->ar = lcd->vc.ar;
@@ -751,7 +773,7 @@ static int loopcut_modal(bContext *C, wmOperator *op, const wmEvent *event)
{
lcd->vc.mval[0] = event->mval[0];
lcd->vc.mval[1] = event->mval[1];
- loopcut_mouse_move(lcd, (int)lcd->cuts);
+ loopcut_mouse_move(&eval_ctx, lcd, (int)lcd->cuts);
ED_region_tag_redraw(lcd->ar);
handled = true;
@@ -855,6 +877,8 @@ void MESH_OT_loopcut(wmOperatorType *ot)
"Smoothness", "Smoothness factor", -SUBD_SMOOTH_MAX, SUBD_SMOOTH_MAX);
RNA_def_property_flag(prop, PROP_SKIP_SAVE);
+ WM_operatortype_props_advanced_begin(ot);
+
prop = RNA_def_property(ot->srna, "falloff", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, rna_enum_proportional_falloff_curve_only_items);
RNA_def_property_enum_default(prop, PROP_INVSQUARE);
diff --git a/source/blender/editors/mesh/editmesh_path.c b/source/blender/editors/mesh/editmesh_path.c
index a85d2425b3c..b71dd029bf2 100644
--- a/source/blender/editors/mesh/editmesh_path.c
+++ b/source/blender/editors/mesh/editmesh_path.c
@@ -59,6 +59,8 @@
#include "bmesh.h"
#include "bmesh_tools.h"
+#include "DEG_depsgraph.h"
+
#include "mesh_intern.h" /* own include */
struct PathSelectParams {
@@ -570,19 +572,19 @@ static bool edbm_shortest_path_pick_ex(
static int edbm_shortest_path_pick_exec(bContext *C, wmOperator *op);
-static BMElem *edbm_elem_find_nearest(ViewContext *vc, const char htype)
+static BMElem *edbm_elem_find_nearest(const struct EvaluationContext *eval_ctx, ViewContext *vc, const char htype)
{
BMEditMesh *em = vc->em;
float dist = ED_view3d_select_dist_px();
if ((em->selectmode & SCE_SELECT_VERTEX) && (htype == BM_VERT)) {
- return (BMElem *)EDBM_vert_find_nearest(vc, &dist);
+ return (BMElem *)EDBM_vert_find_nearest(eval_ctx, vc, &dist);
}
else if ((em->selectmode & SCE_SELECT_EDGE) && (htype == BM_EDGE)) {
- return (BMElem *)EDBM_edge_find_nearest(vc, &dist);
+ return (BMElem *)EDBM_edge_find_nearest(eval_ctx, vc, &dist);
}
else if ((em->selectmode & SCE_SELECT_FACE) && (htype == BM_FACE)) {
- return (BMElem *)EDBM_face_find_nearest(vc, &dist);
+ return (BMElem *)EDBM_face_find_nearest(eval_ctx, vc, &dist);
}
return NULL;
@@ -605,10 +607,12 @@ static int edbm_shortest_path_pick_invoke(bContext *C, wmOperator *op, const wmE
return edbm_shortest_path_pick_exec(C, op);
}
+ EvaluationContext eval_ctx;
ViewContext vc;
BMEditMesh *em;
bool track_active = true;
+ CTX_data_eval_ctx(C, &eval_ctx);
em_setup_viewcontext(C, &vc);
copy_v2_v2_int(vc.mval, event->mval);
em = vc.em;
@@ -617,14 +621,14 @@ static int edbm_shortest_path_pick_invoke(bContext *C, wmOperator *op, const wmE
BMElem *ele_src, *ele_dst;
if (!(ele_src = edbm_elem_active_elem_or_face_get(em->bm)) ||
- !(ele_dst = edbm_elem_find_nearest(&vc, ele_src->head.htype)))
+ !(ele_dst = edbm_elem_find_nearest(&eval_ctx, &vc, ele_src->head.htype)))
{
/* special case, toggle edge tags even when we don't have a path */
if (((em->selectmode & SCE_SELECT_EDGE) &&
(vc.scene->toolsettings->edge_mode != EDGE_MODE_SELECT)) &&
/* check if we only have a destination edge */
((ele_src == NULL) &&
- (ele_dst = edbm_elem_find_nearest(&vc, BM_EDGE))))
+ (ele_dst = edbm_elem_find_nearest(&eval_ctx, &vc, BM_EDGE))))
{
ele_src = ele_dst;
track_active = false;
diff --git a/source/blender/editors/mesh/editmesh_polybuild.c b/source/blender/editors/mesh/editmesh_polybuild.c
new file mode 100644
index 00000000000..dff501ece13
--- /dev/null
+++ b/source/blender/editors/mesh/editmesh_polybuild.c
@@ -0,0 +1,542 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/editors/mesh/editmesh_polybuild.c
+ * \ingroup edmesh
+ *
+ * Tools to implement polygon building tool,
+ * an experimental tool for quickly constructing/manipulating faces.
+ */
+
+#include "DNA_object_types.h"
+
+#include "BLI_math.h"
+
+#include "BKE_context.h"
+#include "BKE_report.h"
+#include "BKE_editmesh.h"
+#include "BKE_mesh.h"
+
+#include "WM_types.h"
+
+#include "ED_mesh.h"
+#include "ED_screen.h"
+#include "ED_transform.h"
+#include "ED_view3d.h"
+
+#include "bmesh.h"
+
+#include "mesh_intern.h" /* own include */
+
+#include "RNA_access.h"
+#include "RNA_define.h"
+
+#include "WM_api.h"
+
+/* -------------------------------------------------------------------- */
+/** \name Local Utilities
+ * \{ */
+
+static void edbm_selectmode_ensure(Scene *scene, BMEditMesh *em, short selectmode)
+{
+ if ((scene->toolsettings->selectmode & selectmode) == 0) {
+ scene->toolsettings->selectmode |= selectmode;
+ em->selectmode = scene->toolsettings->selectmode;
+ EDBM_selectmode_set(em);
+ }
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Face At Cursor
+ * \{ */
+
+static int edbm_polybuild_face_at_cursor_invoke(
+ bContext *C, wmOperator *UNUSED(op), const wmEvent *event)
+{
+ ViewContext vc;
+ float center[3];
+ bool changed = false;
+
+ em_setup_viewcontext(C, &vc);
+ Object *obedit = CTX_data_edit_object(C);
+ BMEditMesh *em = BKE_editmesh_from_object(obedit);
+ BMesh *bm = em->bm;
+ BMElem *ele_act = BM_mesh_active_elem_get(bm);
+
+ invert_m4_m4(vc.obedit->imat, vc.obedit->obmat);
+ ED_view3d_init_mats_rv3d(vc.obedit, vc.rv3d);
+
+ edbm_selectmode_ensure(vc.scene, vc.em, SCE_SELECT_VERTEX);
+
+ if (ele_act == NULL || ele_act->head.htype == BM_FACE) {
+ /* Just add vert */
+ copy_v3_v3(center, ED_view3d_cursor3d_get(vc.scene, vc.v3d));
+ mul_v3_m4v3(center, vc.obedit->obmat, center);
+ ED_view3d_win_to_3d_int(vc.v3d, vc.ar, center, event->mval, center);
+ mul_m4_v3(vc.obedit->imat, center);
+
+ BMVert *v_new = BM_vert_create(bm, center, NULL, BM_CREATE_NOP);
+ EDBM_flag_disable_all(em, BM_ELEM_SELECT);
+ BM_vert_select_set(bm, v_new, true);
+ changed = true;
+ }
+ else if (ele_act->head.htype == BM_EDGE) {
+ BMEdge *e_act = (BMEdge *)ele_act;
+ BMFace *f_reference = e_act->l ? e_act->l->f : NULL;
+
+ mid_v3_v3v3(center, e_act->v1->co, e_act->v2->co);
+ mul_m4_v3(vc.obedit->obmat, center);
+ ED_view3d_win_to_3d_int(vc.v3d, vc.ar, center, event->mval, center);
+ mul_m4_v3(vc.obedit->imat, center);
+
+ BMVert *v_tri[3];
+ v_tri[0] = e_act->v1;
+ v_tri[1] = e_act->v2;
+ v_tri[2] = BM_vert_create(bm, center, NULL, BM_CREATE_NOP);
+ if (e_act->l && e_act->l->v == v_tri[0]) {
+ SWAP(BMVert *, v_tri[0], v_tri[1]);
+ }
+ // BMFace *f_new =
+ BM_face_create_verts(bm, v_tri, 3, f_reference, BM_CREATE_NOP, true);
+
+ EDBM_flag_disable_all(em, BM_ELEM_SELECT);
+ BM_vert_select_set(bm, v_tri[2], true);
+ changed = true;
+ }
+ else if (ele_act->head.htype == BM_VERT) {
+ BMVert *v_act = (BMVert *)ele_act;
+ BMEdge *e_pair[2] = {NULL};
+
+ if (v_act->e != NULL) {
+ for (uint allow_wire = 0; allow_wire < 2 && (e_pair[1] == NULL); allow_wire++) {
+ int i = 0;
+ BMEdge *e_iter = v_act->e;
+ do {
+ if ((BM_elem_flag_test(e_iter, BM_ELEM_HIDDEN) == false) &&
+ (allow_wire ? BM_edge_is_wire(e_iter) : BM_edge_is_boundary(e_iter)))
+ {
+ if (i == 2) {
+ e_pair[0] = e_pair[1] = NULL;
+ break;
+ }
+ e_pair[i++] = e_iter;
+ }
+ } while ((e_iter = BM_DISK_EDGE_NEXT(e_iter, v_act)) != v_act->e);
+ }
+ }
+
+ if (e_pair[1] != NULL) {
+ /* Quad from edge pair. */
+ if (BM_edge_calc_length_squared(e_pair[0]) <
+ BM_edge_calc_length_squared(e_pair[1]))
+ {
+ SWAP(BMEdge *, e_pair[0], e_pair[1]);
+ }
+
+ BMFace *f_reference = e_pair[0]->l ? e_pair[0]->l->f : NULL;
+
+ mul_v3_m4v3(center, vc.obedit->obmat, v_act->co);
+ ED_view3d_win_to_3d_int(vc.v3d, vc.ar, center, event->mval, center);
+ mul_m4_v3(vc.obedit->imat, center);
+
+ BMVert *v_quad[4];
+ v_quad[0] = v_act;
+ v_quad[1] = BM_edge_other_vert(e_pair[0], v_act);
+ v_quad[2] = BM_vert_create(bm, center, NULL, BM_CREATE_NOP);
+ v_quad[3] = BM_edge_other_vert(e_pair[1], v_act);
+ if (e_pair[0]->l && e_pair[0]->l->v == v_quad[0]) {
+ SWAP(BMVert *, v_quad[1], v_quad[3]);
+ }
+ // BMFace *f_new =
+ BM_face_create_verts(bm, v_quad, 4, f_reference, BM_CREATE_NOP, true);
+
+ EDBM_flag_disable_all(em, BM_ELEM_SELECT);
+ BM_vert_select_set(bm, v_quad[2], true);
+ changed = true;
+ }
+ else {
+ /* Just add edge */
+ mul_m4_v3(vc.obedit->obmat, center);
+ ED_view3d_win_to_3d_int(vc.v3d, vc.ar, v_act->co, event->mval, center);
+ mul_m4_v3(vc.obedit->imat, center);
+
+ BMVert *v_new = BM_vert_create(bm, center, NULL, BM_CREATE_NOP);
+
+ BM_edge_create(bm, v_act, v_new, NULL, BM_CREATE_NOP);
+
+ BM_vert_select_set(bm, v_new, true);
+ }
+ }
+
+ if (changed) {
+ BM_select_history_clear(bm);
+
+ EDBM_mesh_normals_update(em);
+ EDBM_update_generic(em, true, true);
+
+ WM_event_add_mousemove(C);
+
+ return OPERATOR_FINISHED;
+ }
+ else {
+ return OPERATOR_CANCELLED;
+ }
+}
+
+void MESH_OT_polybuild_face_at_cursor(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Poly Build Face At Cursor";
+ ot->idname = "MESH_OT_polybuild_face_at_cursor";
+ ot->description = "";
+
+ /* api callbacks */
+ ot->invoke = edbm_polybuild_face_at_cursor_invoke;
+ ot->poll = EDBM_view3d_poll;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+
+ /* to give to transform */
+ Transform_Properties(ot, P_PROPORTIONAL | P_MIRROR_DUMMY);
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Split At Cursor
+ * \{ */
+
+static int edbm_polybuild_split_at_cursor_invoke(
+ bContext *C, wmOperator *UNUSED(op), const wmEvent *event)
+{
+ ViewContext vc;
+ float center[3];
+ bool changed = false;
+
+ em_setup_viewcontext(C, &vc);
+ Object *obedit = CTX_data_edit_object(C);
+ BMEditMesh *em = BKE_editmesh_from_object(obedit);
+ BMesh *bm = em->bm;
+
+ invert_m4_m4(vc.obedit->imat, vc.obedit->obmat);
+ ED_view3d_init_mats_rv3d(vc.obedit, vc.rv3d);
+
+ edbm_selectmode_ensure(vc.scene, vc.em, SCE_SELECT_VERTEX);
+
+ BMElem *ele_act = BM_mesh_active_elem_get(bm);
+
+ if (ele_act == NULL || ele_act->head.hflag == BM_FACE) {
+ return OPERATOR_PASS_THROUGH;
+ }
+ else if (ele_act->head.htype == BM_EDGE) {
+ BMEdge *e_act = (BMEdge *)ele_act;
+ mid_v3_v3v3(center, e_act->v1->co, e_act->v2->co);
+ mul_m4_v3(vc.obedit->obmat, center);
+ ED_view3d_win_to_3d_int(vc.v3d, vc.ar, center, event->mval, center);
+ mul_m4_v3(vc.obedit->imat, center);
+
+ const float fac = line_point_factor_v3(center, e_act->v1->co, e_act->v2->co);
+ BMVert *v_new = BM_edge_split(bm, e_act, e_act->v1, NULL, CLAMPIS(fac, 0.0f, 1.0f));
+ copy_v3_v3(v_new->co, center);
+
+ EDBM_flag_disable_all(em, BM_ELEM_SELECT);
+ BM_vert_select_set(bm, v_new, true);
+ changed = true;
+ }
+ else if (ele_act->head.htype == BM_VERT) {
+ /* Just do nothing, allow dragging. */
+ return OPERATOR_FINISHED;
+ }
+
+ if (changed) {
+ BM_select_history_clear(bm);
+
+ EDBM_mesh_normals_update(em);
+ EDBM_update_generic(em, true, true);
+
+ WM_event_add_mousemove(C);
+
+ return OPERATOR_FINISHED;
+ }
+ else {
+ return OPERATOR_CANCELLED;
+ }
+}
+
+void MESH_OT_polybuild_split_at_cursor(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Poly Build Split At Cursor";
+ ot->idname = "MESH_OT_polybuild_split_at_cursor";
+ ot->description = "";
+
+ /* api callbacks */
+ ot->invoke = edbm_polybuild_split_at_cursor_invoke;
+ ot->poll = EDBM_view3d_poll;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+
+ /* to give to transform */
+ Transform_Properties(ot, P_PROPORTIONAL | P_MIRROR_DUMMY);
+}
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+/** \name Dissolve At Cursor
+ *
+ * \{ */
+
+static int edbm_polybuild_dissolve_at_cursor_invoke(
+ bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
+{
+ ViewContext vc;
+ em_setup_viewcontext(C, &vc);
+ bool changed = false;
+
+ Object *obedit = CTX_data_edit_object(C);
+ BMEditMesh *em = BKE_editmesh_from_object(obedit);
+ BMesh *bm = em->bm;
+ BMVert *v_act = BM_mesh_active_vert_get(bm);
+ BMEdge *e_act = BM_mesh_active_edge_get(bm);
+
+ invert_m4_m4(vc.obedit->imat, vc.obedit->obmat);
+ ED_view3d_init_mats_rv3d(vc.obedit, vc.rv3d);
+
+ edbm_selectmode_ensure(vc.scene, vc.em, SCE_SELECT_VERTEX);
+
+
+ if (e_act) {
+ BMLoop *l_a, *l_b;
+ if (BM_edge_loop_pair(e_act, &l_a, &l_b)) {
+ BMFace *f_new = BM_faces_join_pair(bm, l_a, l_b, true);
+ if (f_new) {
+ changed = true;
+ }
+ }
+ }
+ else if (v_act) {
+ if (BM_vert_is_edge_pair(v_act)) {
+ BM_edge_collapse(
+ bm, v_act->e, v_act,
+ true, true);
+ }
+ else {
+ /* too involved to do inline */
+ if (!EDBM_op_callf(em, op,
+ "dissolve_verts verts=%hv use_face_split=%b use_boundary_tear=%b",
+ BM_ELEM_SELECT, false, true))
+ {
+ return OPERATOR_CANCELLED;
+ }
+ }
+ changed = true;
+ }
+
+ if (changed) {
+ EDBM_flag_disable_all(em, BM_ELEM_SELECT);
+
+ BM_select_history_clear(bm);
+
+ EDBM_mesh_normals_update(em);
+ EDBM_update_generic(em, true, true);
+
+ WM_event_add_mousemove(C);
+
+ return OPERATOR_FINISHED;
+ }
+ else {
+ return OPERATOR_CANCELLED;
+ }
+}
+
+void MESH_OT_polybuild_dissolve_at_cursor(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Poly Build Dissolve At Cursor";
+ ot->idname = "MESH_OT_polybuild_dissolve_at_cursor";
+ ot->description = "";
+
+ /* api callbacks */
+ ot->invoke = edbm_polybuild_dissolve_at_cursor_invoke;
+ ot->poll = EDBM_view3d_poll;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Cursor Manipulator
+ *
+ * \note This may need its own file, for now not.
+ * \{ */
+
+static BMElem *edbm_hover_preselect(
+ bContext *C,
+ const int mval[2],
+ bool use_boundary)
+{
+ ViewContext vc;
+
+ em_setup_viewcontext(C, &vc);
+ Object *obedit = CTX_data_edit_object(C);
+ BMEditMesh *em = BKE_editmesh_from_object(obedit);
+ BMesh *bm = em->bm;
+
+ invert_m4_m4(vc.obedit->imat, vc.obedit->obmat);
+ ED_view3d_init_mats_rv3d(vc.obedit, vc.rv3d);
+
+ const float mval_fl[2] = {UNPACK2(mval)};
+ float ray_origin[3], ray_direction[3];
+
+ BMElem *ele_best = NULL;
+
+ if (ED_view3d_win_to_ray(
+ CTX_data_depsgraph(C),
+ vc.ar, vc.v3d, mval_fl,
+ ray_origin, ray_direction, true))
+ {
+ BMEdge *e;
+
+ BMIter eiter;
+ float dist_sq_best = FLT_MAX;
+
+ BM_ITER_MESH (e, &eiter, bm, BM_EDGES_OF_MESH) {
+ if ((BM_elem_flag_test(e, BM_ELEM_HIDDEN) == false) &&
+ (!use_boundary || BM_edge_is_boundary(e)))
+ {
+ float dist_sq_test;
+ float point[3];
+ float depth;
+#if 0
+ dist_sq_test = dist_squared_ray_to_seg_v3(
+ ray_origin, ray_direction,
+ e->v1->co, e->v2->co,
+ point, &depth);
+#else
+ mid_v3_v3v3(point, e->v1->co, e->v2->co);
+ dist_sq_test = dist_squared_to_ray_v3(
+ ray_origin, ray_direction,
+ point, &depth);
+#endif
+
+ if (dist_sq_test < dist_sq_best) {
+ dist_sq_best = dist_sq_test;
+ ele_best = (BMElem *)e;
+ }
+
+ dist_sq_test = dist_squared_to_ray_v3(
+ ray_origin, ray_direction,
+ e->v1->co, &depth);
+ if (dist_sq_test < dist_sq_best) {
+ dist_sq_best = dist_sq_test;
+ ele_best = (BMElem *)e->v1;
+ }
+ dist_sq_test = dist_squared_to_ray_v3(
+ ray_origin, ray_direction,
+ e->v2->co, &depth);
+ if (dist_sq_test < dist_sq_best) {
+ dist_sq_best = dist_sq_test;
+ ele_best = (BMElem *)e->v2;
+ }
+ }
+ }
+ }
+ return ele_best;
+}
+
+/*
+ * Developer note: this is not advocating pre-selection highlighting.
+ * This is just a quick way to test how a tool for interactively editing polygons may work. */
+static int edbm_polybuild_hover_invoke(
+ bContext *C, wmOperator *op, const wmEvent *event)
+{
+ const bool use_boundary = RNA_boolean_get(op->ptr, "use_boundary");
+ ViewContext vc;
+
+ em_setup_viewcontext(C, &vc);
+
+ /* Vertex selection is needed */
+ if ((vc.scene->toolsettings->selectmode & SCE_SELECT_VERTEX) == 0) {
+ return OPERATOR_PASS_THROUGH;
+ }
+
+ /* Don't overwrite click-drag events. */
+ if (use_boundary == false) {
+ /* pass */
+ }
+ else if (vc.win->tweak ||
+ (vc.win->eventstate->check_click &&
+ vc.win->eventstate->prevval == KM_PRESS &&
+ ISMOUSE(vc.win->eventstate->prevtype)))
+ {
+ return OPERATOR_PASS_THROUGH;
+ }
+
+ Object *obedit = CTX_data_edit_object(C);
+ BMEditMesh *em = BKE_editmesh_from_object(obedit);
+ BMesh *bm = em->bm;
+ BMElem *ele_active = BM_mesh_active_elem_get(bm);
+ BMElem *ele_hover = edbm_hover_preselect(C, event->mval, use_boundary);
+
+ if (ele_hover && (ele_hover != ele_active)) {
+ if (event->shift == 0) {
+ EDBM_flag_disable_all(em, BM_ELEM_SELECT);
+ BM_select_history_clear(bm);
+ }
+ BM_elem_select_set(bm, ele_hover, true);
+ BM_select_history_store(em->bm, ele_hover);
+ BKE_mesh_batch_cache_dirty(obedit->data, BKE_MESH_BATCH_DIRTY_SELECT);
+
+ ED_region_tag_redraw(vc.ar);
+
+ return OPERATOR_FINISHED;
+ }
+ else {
+ return OPERATOR_CANCELLED;
+ }
+}
+
+void MESH_OT_polybuild_hover(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Poly Build Hover";
+ ot->idname = "MESH_OT_polybuild_hover";
+ ot->description = "";
+
+ /* api callbacks */
+ ot->invoke = edbm_polybuild_hover_invoke;
+ ot->poll = EDBM_view3d_poll;
+
+ /* flags */
+ ot->flag = OPTYPE_INTERNAL;
+
+ /* properties */
+ RNA_def_boolean(ot->srna, "use_boundary", false, "Boundary", "Select only boundary geometry");
+}
+
+/** \} */
diff --git a/source/blender/editors/mesh/editmesh_select.c b/source/blender/editors/mesh/editmesh_select.c
index 1c620ad4681..7b88b091672 100644
--- a/source/blender/editors/mesh/editmesh_select.c
+++ b/source/blender/editors/mesh/editmesh_select.c
@@ -68,6 +68,8 @@
#include "bmesh_tools.h"
+#include "DEG_depsgraph.h"
+
#include "mesh_intern.h" /* own include */
/* use bmesh operator flags for a few operators */
@@ -194,7 +196,9 @@ static BLI_bitmap *edbm_backbuf_alloc(const int size)
/* reads rect, and builds selection array for quick lookup */
/* returns if all is OK */
-bool EDBM_backbuf_border_init(ViewContext *vc, short xmin, short ymin, short xmax, short ymax)
+bool EDBM_backbuf_border_init(
+ const struct EvaluationContext *eval_ctx, ViewContext *vc, short xmin,
+ short ymin, short xmax, short ymax)
{
struct ImBuf *buf;
unsigned int *dr;
@@ -204,7 +208,7 @@ bool EDBM_backbuf_border_init(ViewContext *vc, short xmin, short ymin, short xma
return false;
}
- buf = ED_view3d_backbuf_read(vc, xmin, ymin, xmax, ymax);
+ buf = ED_view3d_backbuf_read(eval_ctx, vc, xmin, ymin, xmax, ymax);
if ((buf == NULL) || (bm_vertoffs == 0)) {
return false;
}
@@ -267,7 +271,7 @@ static void edbm_mask_lasso_px_cb(int x, int x_end, int y, void *user_data)
* - grab again and compare
* returns 'OK'
*/
-bool EDBM_backbuf_border_mask_init(ViewContext *vc, const int mcords[][2], short tot, short xmin, short ymin, short xmax, short ymax)
+bool EDBM_backbuf_border_mask_init(const struct EvaluationContext *eval_ctx, ViewContext *vc, const int mcords[][2], short tot, short xmin, short ymin, short xmax, short ymax)
{
unsigned int *dr, *dr_mask, *dr_mask_arr;
struct ImBuf *buf;
@@ -276,7 +280,7 @@ bool EDBM_backbuf_border_mask_init(ViewContext *vc, const int mcords[][2], short
/* method in use for face selecting too */
if (vc->obedit == NULL) {
- if (!BKE_paint_select_elem_test(vc->obact)) {
+ if (!BKE_paint_select_elem_test(vc->obact, eval_ctx->object_mode)) {
return false;
}
}
@@ -284,7 +288,7 @@ bool EDBM_backbuf_border_mask_init(ViewContext *vc, const int mcords[][2], short
return false;
}
- buf = ED_view3d_backbuf_read(vc, xmin, ymin, xmax, ymax);
+ buf = ED_view3d_backbuf_read(eval_ctx, vc, xmin, ymin, xmax, ymax);
if ((buf == NULL) || (bm_vertoffs == 0)) {
return false;
}
@@ -317,7 +321,9 @@ bool EDBM_backbuf_border_mask_init(ViewContext *vc, const int mcords[][2], short
}
/* circle shaped sample area */
-bool EDBM_backbuf_circle_init(ViewContext *vc, short xs, short ys, short rads)
+bool EDBM_backbuf_circle_init(
+ const struct EvaluationContext *eval_ctx, ViewContext *vc,
+ short xs, short ys, short rads)
{
struct ImBuf *buf;
unsigned int *dr;
@@ -326,7 +332,7 @@ bool EDBM_backbuf_circle_init(ViewContext *vc, short xs, short ys, short rads)
/* method in use for face selecting too */
if (vc->obedit == NULL) {
- if (!BKE_paint_select_elem_test(vc->obact)) {
+ if (!BKE_paint_select_elem_test(vc->obact, eval_ctx->object_mode)) {
return false;
}
}
@@ -336,7 +342,7 @@ bool EDBM_backbuf_circle_init(ViewContext *vc, short xs, short ys, short rads)
xmin = xs - rads; xmax = xs + rads;
ymin = ys - rads; ymax = ys + rads;
- buf = ED_view3d_backbuf_read(vc, xmin, ymin, xmax, ymax);
+ buf = ED_view3d_backbuf_read(eval_ctx, vc, xmin, ymin, xmax, ymax);
if ((buf == NULL) || (bm_vertoffs == 0)) {
return false;
}
@@ -435,7 +441,7 @@ static void findnearestvert__doClosest(void *userData, BMVert *eve, const float
* \param use_cycle Cycle over elements within #FIND_NEAR_CYCLE_THRESHOLD_MIN in order of index.
*/
BMVert *EDBM_vert_find_nearest_ex(
- ViewContext *vc, float *r_dist,
+ const struct EvaluationContext *eval_ctx, ViewContext *vc, float *r_dist,
const bool use_select_bias, bool use_cycle)
{
BMesh *bm = vc->em->bm;
@@ -447,10 +453,10 @@ BMVert *EDBM_vert_find_nearest_ex(
BMVert *eve;
/* No afterqueue (yet), so we check it now, otherwise the bm_xxxofs indices are bad. */
- ED_view3d_backbuf_validate(vc);
+ ED_view3d_backbuf_validate(eval_ctx, vc);
index = ED_view3d_backbuf_sample_rect(
- vc, vc->mval, dist_px, bm_wireoffs, 0xFFFFFF, &dist_test);
+ eval_ctx, vc, vc->mval, dist_px, bm_wireoffs, 0xFFFFFF, &dist_test);
eve = index ? BM_vert_at_index_find_or_table(bm, index - 1) : NULL;
if (eve) {
@@ -485,7 +491,7 @@ BMVert *EDBM_vert_find_nearest_ex(
data.cycle_index_prev = prev_select_index;
ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
- mesh_foreachScreenVert(vc, findnearestvert__doClosest, &data, clip_flag);
+ mesh_foreachScreenVert(eval_ctx, vc, findnearestvert__doClosest, &data, clip_flag);
hit = (data.use_cycle && data.hit_cycle.vert) ? &data.hit_cycle : &data.hit;
*r_dist = hit->dist;
@@ -497,9 +503,9 @@ BMVert *EDBM_vert_find_nearest_ex(
}
}
-BMVert *EDBM_vert_find_nearest(ViewContext *vc, float *r_dist)
+BMVert *EDBM_vert_find_nearest(const struct EvaluationContext *eval_ctx, ViewContext *vc, float *r_dist)
{
- return EDBM_vert_find_nearest_ex(vc, r_dist, false, false);
+ return EDBM_vert_find_nearest_ex(eval_ctx, vc, r_dist, false, false);
}
/* find the distance to the edge we already have */
@@ -621,7 +627,7 @@ static void find_nearest_edge__doClosest(
}
BMEdge *EDBM_edge_find_nearest_ex(
- ViewContext *vc, float *r_dist,
+ const struct EvaluationContext *eval_ctx, ViewContext *vc, float *r_dist,
float *r_dist_center,
const bool use_select_bias, const bool use_cycle,
BMEdge **r_eed_zbuf)
@@ -634,18 +640,18 @@ BMEdge *EDBM_edge_find_nearest_ex(
unsigned int index;
BMEdge *eed;
- /* Make sure that the edges are considered for selection.
+ /* Make sure that the edges also are considered to find nearest.
* TODO: cleanup: add `selectmode` as a parameter */
const short ts_selectmode = vc->scene->toolsettings->selectmode;
vc->scene->toolsettings->selectmode |= SCE_SELECT_EDGE;
/* No afterqueue (yet), so we check it now, otherwise the bm_xxxofs indices are bad. */
- ED_view3d_backbuf_validate(vc);
+ ED_view3d_backbuf_validate(eval_ctx, vc);
/* restore `selectmode` */
vc->scene->toolsettings->selectmode = ts_selectmode;
- index = ED_view3d_backbuf_sample_rect(vc, vc->mval, dist_px, bm_solidoffs, bm_wireoffs, &dist_test);
+ index = ED_view3d_backbuf_sample_rect(eval_ctx, vc, vc->mval, dist_px, bm_solidoffs, bm_wireoffs, &dist_test);
eed = index ? BM_edge_at_index_find_or_table(bm, index - 1) : NULL;
if (r_eed_zbuf) {
@@ -663,7 +669,7 @@ BMEdge *EDBM_edge_find_nearest_ex(
ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
- mesh_foreachScreenEdge(vc, find_nearest_edge_center__doZBuf, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
+ mesh_foreachScreenEdge(eval_ctx, vc, find_nearest_edge_center__doZBuf, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
*r_dist_center = data.dist;
}
@@ -703,7 +709,7 @@ BMEdge *EDBM_edge_find_nearest_ex(
data.cycle_index_prev = prev_select_index;
ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
- mesh_foreachScreenEdge(vc, find_nearest_edge__doClosest, &data, clip_flag);
+ mesh_foreachScreenEdge(eval_ctx, vc, find_nearest_edge__doClosest, &data, clip_flag);
hit = (data.use_cycle && data.hit_cycle.edge) ? &data.hit_cycle : &data.hit;
*r_dist = hit->dist;
@@ -719,9 +725,9 @@ BMEdge *EDBM_edge_find_nearest_ex(
}
BMEdge *EDBM_edge_find_nearest(
- ViewContext *vc, float *r_dist)
+ const struct EvaluationContext *eval_ctx, ViewContext *vc, float *r_dist)
{
- return EDBM_edge_find_nearest_ex(vc, r_dist, NULL, false, false, NULL);
+ return EDBM_edge_find_nearest_ex(eval_ctx, vc, r_dist, NULL, false, false, NULL);
}
/* find the distance to the face we already have */
@@ -795,7 +801,7 @@ static void findnearestface__doClosest(void *userData, BMFace *efa, const float
BMFace *EDBM_face_find_nearest_ex(
- ViewContext *vc, float *r_dist,
+ const struct EvaluationContext *eval_ctx, ViewContext *vc, float *r_dist,
float *r_dist_center,
const bool use_select_bias, const bool use_cycle,
BMFace **r_efa_zbuf)
@@ -807,9 +813,9 @@ BMFace *EDBM_face_find_nearest_ex(
unsigned int index;
BMFace *efa;
- ED_view3d_backbuf_validate(vc);
+ ED_view3d_backbuf_validate(eval_ctx, vc);
- index = ED_view3d_backbuf_sample(vc, vc->mval[0], vc->mval[1]);
+ index = ED_view3d_backbuf_sample(eval_ctx, vc, vc->mval[0], vc->mval[1]);
efa = index ? BM_face_at_index_find_or_table(bm, index - 1) : NULL;
if (r_efa_zbuf) {
@@ -827,7 +833,7 @@ BMFace *EDBM_face_find_nearest_ex(
ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
- mesh_foreachScreenFace(vc, find_nearest_face_center__doZBuf, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
+ mesh_foreachScreenFace(eval_ctx, vc, find_nearest_face_center__doZBuf, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
*r_dist_center = data.dist;
}
@@ -865,7 +871,7 @@ BMFace *EDBM_face_find_nearest_ex(
data.cycle_index_prev = prev_select_index;
ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
- mesh_foreachScreenFace(vc, findnearestface__doClosest, &data, clip_flag);
+ mesh_foreachScreenFace(eval_ctx, vc, findnearestface__doClosest, &data, clip_flag);
hit = (data.use_cycle && data.hit_cycle.face) ? &data.hit_cycle : &data.hit;
*r_dist = hit->dist;
@@ -880,9 +886,9 @@ BMFace *EDBM_face_find_nearest_ex(
}
}
-BMFace *EDBM_face_find_nearest(ViewContext *vc, float *r_dist)
+BMFace *EDBM_face_find_nearest(const struct EvaluationContext *eval_ctx, ViewContext *vc, float *r_dist)
{
- return EDBM_face_find_nearest_ex(vc, r_dist, NULL, false, false, NULL);
+ return EDBM_face_find_nearest_ex(eval_ctx, vc, r_dist, NULL, false, false, NULL);
}
#undef FIND_NEAR_SELECT_BIAS
@@ -894,7 +900,9 @@ BMFace *EDBM_face_find_nearest(ViewContext *vc, float *r_dist)
* selected vertices and edges get disadvantage
* return 1 if found one
*/
-static int unified_findnearest(ViewContext *vc, BMVert **r_eve, BMEdge **r_eed, BMFace **r_efa)
+static int unified_findnearest(
+ const struct EvaluationContext *eval_ctx, ViewContext *vc,
+ BMVert **r_eve, BMEdge **r_eed, BMFace **r_efa)
{
BMEditMesh *em = vc->em;
static short mval_prev[2] = {-1, -1};
@@ -913,12 +921,12 @@ static int unified_findnearest(ViewContext *vc, BMVert **r_eve, BMEdge **r_eed,
/* no afterqueue (yet), so we check it now, otherwise the em_xxxofs indices are bad */
- ED_view3d_backbuf_validate(vc);
+ ED_view3d_backbuf_validate(eval_ctx, vc);
if ((dist > 0.0f) && em->selectmode & SCE_SELECT_FACE) {
float dist_center = 0.0f;
float *dist_center_p = (em->selectmode & (SCE_SELECT_EDGE | SCE_SELECT_VERTEX)) ? &dist_center : NULL;
- efa = EDBM_face_find_nearest_ex(vc, &dist, dist_center_p, true, use_cycle, &efa_zbuf);
+ efa = EDBM_face_find_nearest_ex(eval_ctx, vc, &dist, dist_center_p, true, use_cycle, &efa_zbuf);
if (efa && dist_center_p) {
dist = min_ff(dist_margin, dist_center);
}
@@ -927,14 +935,14 @@ static int unified_findnearest(ViewContext *vc, BMVert **r_eve, BMEdge **r_eed,
if ((dist > 0.0f) && (em->selectmode & SCE_SELECT_EDGE)) {
float dist_center = 0.0f;
float *dist_center_p = (em->selectmode & SCE_SELECT_VERTEX) ? &dist_center : NULL;
- eed = EDBM_edge_find_nearest_ex(vc, &dist, dist_center_p, true, use_cycle, &eed_zbuf);
+ eed = EDBM_edge_find_nearest_ex(eval_ctx, vc, &dist, dist_center_p, true, use_cycle, &eed_zbuf);
if (eed && dist_center_p) {
dist = min_ff(dist_margin, dist_center);
}
}
if ((dist > 0.0f) && em->selectmode & SCE_SELECT_VERTEX) {
- eve = EDBM_vert_find_nearest_ex(vc, &dist, true, use_cycle);
+ eve = EDBM_vert_find_nearest_ex(eval_ctx, vc, &dist, true, use_cycle);
}
/* return only one of 3 pointers, for frontbuffer redraws */
@@ -997,13 +1005,13 @@ static const EnumPropertyItem prop_similar_types[] = {
#endif
{SIMFACE_MATERIAL, "MATERIAL", 0, "Material", ""},
- {SIMFACE_IMAGE, "IMAGE", 0, "Image", ""},
{SIMFACE_AREA, "AREA", 0, "Area", ""},
{SIMFACE_SIDES, "SIDES", 0, "Polygon Sides", ""},
{SIMFACE_PERIMETER, "PERIMETER", 0, "Perimeter", ""},
{SIMFACE_NORMAL, "NORMAL", 0, "Normal", ""},
{SIMFACE_COPLANAR, "COPLANAR", 0, "Co-planar", ""},
{SIMFACE_SMOOTH, "SMOOTH", 0, "Flat/Smooth", ""},
+ {SIMFACE_FACEMAP, "FACE_MAP", 0, "Face-Map", ""},
#ifdef WITH_FREESTYLE
{SIMFACE_FREESTYLE, "FREESTYLE_FACE", 0, "Freestyle Face Marks", ""},
#endif
@@ -1181,7 +1189,7 @@ static const EnumPropertyItem *select_similar_type_itemf(bContext *C, PointerRNA
#ifdef WITH_FREESTYLE
const int a_end = SIMFACE_FREESTYLE;
#else
- const int a_end = SIMFACE_SMOOTH;
+ const int a_end = SIMFACE_FACEMAP;
#endif
for (a = SIMFACE_MATERIAL; a <= a_end; a++) {
RNA_enum_items_add_value(&item, &totitem, prop_similar_types, a);
@@ -1567,6 +1575,7 @@ static void mouse_mesh_loop_edge(BMEditMesh *em, BMEdge *eed, bool select, bool
static bool mouse_mesh_loop(bContext *C, const int mval[2], bool extend, bool deselect, bool toggle, bool ring)
{
+ EvaluationContext eval_ctx;
ViewContext vc;
BMEditMesh *em;
BMEdge *eed;
@@ -1576,6 +1585,7 @@ static bool mouse_mesh_loop(bContext *C, const int mval[2], bool extend, bool de
float dist = ED_view3d_select_dist_px() * 0.6666f;
float mvalf[2];
+ CTX_data_eval_ctx(C, &eval_ctx);
em_setup_viewcontext(C, &vc);
mvalf[0] = (float)(vc.mval[0] = mval[0]);
mvalf[1] = (float)(vc.mval[1] = mval[1]);
@@ -1587,12 +1597,12 @@ static bool mouse_mesh_loop(bContext *C, const int mval[2], bool extend, bool de
vc.scene->toolsettings->selectmode |= SCE_SELECT_EDGE;
/* no afterqueue (yet), so we check it now, otherwise the bm_xxxofs indices are bad */
- ED_view3d_backbuf_validate(&vc);
+ ED_view3d_backbuf_validate(&eval_ctx, &vc);
/* restore `selectmode` */
vc.scene->toolsettings->selectmode = ts_selectmode;
- eed = EDBM_edge_find_nearest_ex(&vc, &dist, NULL, true, true, NULL);
+ eed = EDBM_edge_find_nearest_ex(&eval_ctx, &vc, &dist, NULL, true, true, NULL);
if (eed == NULL) {
return false;
}
@@ -1835,17 +1845,19 @@ void MESH_OT_select_interior_faces(wmOperatorType *ot)
/* gets called via generic mouse select operator */
bool EDBM_select_pick(bContext *C, const int mval[2], bool extend, bool deselect, bool toggle)
{
+ EvaluationContext eval_ctx;
ViewContext vc;
BMVert *eve = NULL;
BMEdge *eed = NULL;
BMFace *efa = NULL;
/* setup view context for argument to callbacks */
+ CTX_data_eval_ctx(C, &eval_ctx);
em_setup_viewcontext(C, &vc);
vc.mval[0] = mval[0];
vc.mval[1] = mval[1];
- if (unified_findnearest(&vc, &eve, &eed, &efa)) {
+ if (unified_findnearest(&eval_ctx, &vc, &eve, &eed, &efa)) {
/* Deselect everything */
if (extend == false && deselect == false && toggle == false)
@@ -1932,12 +1944,30 @@ bool EDBM_select_pick(bContext *C, const int mval[2], bool extend, bool deselect
EDBM_selectmode_flush(vc.em);
- /* change active material on object */
- if (efa && efa->mat_nr != vc.obedit->actcol - 1) {
- vc.obedit->actcol = efa->mat_nr + 1;
- vc.em->mat_nr = efa->mat_nr;
+ if (efa) {
+ /* Change active material on object. */
+ if (efa->mat_nr != vc.obedit->actcol - 1) {
+ vc.obedit->actcol = efa->mat_nr + 1;
+ vc.em->mat_nr = efa->mat_nr;
+ WM_event_add_notifier(C, NC_MATERIAL | ND_SHADING_LINKS, NULL);
+ }
- WM_event_add_notifier(C, NC_MATERIAL | ND_SHADING_LINKS, NULL);
+ /* Change active face-map on object. */
+ if (!BLI_listbase_is_empty(&vc.obedit->fmaps)) {
+ const int cd_fmap_offset = CustomData_get_offset(&vc.em->bm->pdata, CD_FACEMAP);
+ if (cd_fmap_offset != -1) {
+ int map = *((int *)BM_ELEM_CD_GET_VOID_P(efa, cd_fmap_offset));
+ if ((map < -1) || (map > BLI_listbase_count_ex(&vc.obedit->fmaps, map))) {
+ map = -1;
+ }
+ map += 1;
+ if (map != vc.obedit->actfmap) {
+ /* We may want to add notifiers later,
+ * currently select update handles redraw. */
+ vc.obedit->actfmap = map;
+ }
+ }
+ }
}
@@ -2791,6 +2821,7 @@ static void edbm_select_linked_pick_ex(BMEditMesh *em, BMElem *ele, bool sel, in
static int edbm_select_linked_pick_invoke(bContext *C, wmOperator *op, const wmEvent *event)
{
Object *obedit = CTX_data_edit_object(C);
+ EvaluationContext eval_ctx;
ViewContext vc;
BMEditMesh *em;
BMesh *bm;
@@ -2808,6 +2839,7 @@ static int edbm_select_linked_pick_invoke(bContext *C, wmOperator *op, const wmE
view3d_operator_needs_opengl(C);
/* setup view context for argument to callbacks */
+ CTX_data_eval_ctx(C, &eval_ctx);
em_setup_viewcontext(C, &vc);
em = vc.em;
bm = em->bm;
@@ -2820,7 +2852,7 @@ static int edbm_select_linked_pick_invoke(bContext *C, wmOperator *op, const wmE
vc.mval[1] = event->mval[1];
/* return warning! */
- if (unified_findnearest(&vc, &eve, &eed, &efa) == 0) {
+ if (unified_findnearest(&eval_ctx, &vc, &eve, &eed, &efa) == 0) {
WM_event_add_notifier(C, NC_GEOM | ND_SELECT, obedit);
return OPERATOR_CANCELLED;
diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c
index 4b4f1b2afea..ff1cd7224cd 100644
--- a/source/blender/editors/mesh/editmesh_tools.c
+++ b/source/blender/editors/mesh/editmesh_tools.c
@@ -47,15 +47,18 @@
#include "BLI_rand.h"
#include "BLI_sort_utils.h"
+#include "BKE_layer.h"
#include "BKE_material.h"
#include "BKE_context.h"
#include "BKE_deform.h"
-#include "BKE_depsgraph.h"
#include "BKE_report.h"
#include "BKE_texture.h"
#include "BKE_main.h"
#include "BKE_editmesh.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#include "BLT_translation.h"
#include "RNA_define.h"
@@ -144,6 +147,8 @@ void MESH_OT_subdivide(wmOperatorType *ot)
RNA_def_float(ot->srna, "smoothness", 0.0f, 0.0f, 1e3f, "Smoothness", "Smoothness factor", 0.0f, 1.0f);
+ WM_operatortype_props_advanced_begin(ot);
+
RNA_def_boolean(ot->srna, "quadtri", 0, "Quad/Tri Mode", "Tries to prevent ngons");
RNA_def_enum(ot->srna, "quadcorner", prop_mesh_cornervert_types, SUBD_CORNER_STRAIGHT_CUT,
"Quad Corner Type", "How to subdivide quad corners (anything other than Straight Cut will prevent ngons)");
@@ -306,7 +311,7 @@ void EMBM_project_snap_verts(bContext *C, ARegion *ar, BMEditMesh *em)
ED_view3d_init_mats_rv3d(obedit, ar->regiondata);
struct SnapObjectContext *snap_context = ED_transform_snap_object_context_create_view3d(
- CTX_data_main(C), CTX_data_scene(C), 0,
+ CTX_data_main(C), CTX_data_scene(C), CTX_data_view_layer(C), CTX_data_engine_type(C), 0,
ar, CTX_wm_view3d(C));
BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) {
@@ -860,9 +865,11 @@ void MESH_OT_mark_seam(wmOperatorType *ot)
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-
+
prop = RNA_def_boolean(ot->srna, "clear", 0, "Clear", "");
RNA_def_property_flag(prop, PROP_SKIP_SAVE);
+
+ WM_operatortype_props_advanced_begin(ot);
}
static int edbm_mark_sharp_exec(bContext *C, wmOperator *op)
@@ -1804,6 +1811,9 @@ void MESH_OT_vertices_smooth(wmOperatorType *ot)
RNA_def_float(ot->srna, "factor", 0.5f, -10.0f, 10.0f, "Smoothing", "Smoothing factor", 0.0f, 1.0f);
RNA_def_int(ot->srna, "repeat", 1, 1, 1000, "Repeat", "Number of times to smooth the mesh", 1, 100);
+
+ WM_operatortype_props_advanced_begin(ot);
+
RNA_def_boolean(ot->srna, "xaxis", true, "X-Axis", "Smooth along the X axis");
RNA_def_boolean(ot->srna, "yaxis", true, "Y-Axis", "Smooth along the Y axis");
RNA_def_boolean(ot->srna, "zaxis", true, "Z-Axis", "Smooth along the Z axis");
@@ -1887,6 +1897,9 @@ void MESH_OT_vertices_smooth_laplacian(wmOperatorType *ot)
"Lambda factor", "", 1e-7f, 1000.0f);
RNA_def_float(ot->srna, "lambda_border", 5e-5f, 1e-7f, 1000.0f,
"Lambda factor in border", "", 1e-7f, 1000.0f);
+
+ WM_operatortype_props_advanced_begin(ot);
+
RNA_def_boolean(ot->srna, "use_x", true, "Smooth X Axis", "Smooth object along X axis");
RNA_def_boolean(ot->srna, "use_y", true, "Smooth Y Axis", "Smooth object along Y axis");
RNA_def_boolean(ot->srna, "use_z", true, "Smooth Z Axis", "Smooth object along Z axis");
@@ -2342,6 +2355,9 @@ void MESH_OT_merge(wmOperatorType *ot)
/* properties */
ot->prop = RNA_def_enum(ot->srna, "type", merge_type_items, MESH_MERGE_CENTER, "Type", "Merge method to use");
RNA_def_enum_funcs(ot->prop, merge_type_itemf);
+
+ WM_operatortype_props_advanced_begin(ot);
+
RNA_def_boolean(ot->srna, "uvs", false, "UVs", "Move UVs according to merge");
}
@@ -2453,7 +2469,7 @@ static void shape_propagate(BMEditMesh *em, wmOperator *op)
//TAG Mesh Objects that share this data
for (base = scene->base.first; base; base = base->next) {
if (base->object && base->object->data == me) {
- DAG_id_tag_update(&base->object->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&base->object->id, OB_RECALC_DATA);
}
}
#endif
@@ -3016,7 +3032,7 @@ enum {
MESH_SEPARATE_LOOSE = 2,
};
-static Base *mesh_separate_tagged(Main *bmain, Scene *scene, Base *base_old, BMesh *bm_old)
+static Base *mesh_separate_tagged(Main *bmain, Scene *scene, ViewLayer *view_layer, Base *base_old, BMesh *bm_old)
{
Base *base_new;
Object *obedit = base_old->object;
@@ -3037,11 +3053,11 @@ static Base *mesh_separate_tagged(Main *bmain, Scene *scene, Base *base_old, BMe
CustomData_bmesh_init_pool(&bm_new->ldata, bm_mesh_allocsize_default.totloop, BM_LOOP);
CustomData_bmesh_init_pool(&bm_new->pdata, bm_mesh_allocsize_default.totface, BM_FACE);
- base_new = ED_object_add_duplicate(bmain, scene, base_old, USER_DUP_MESH);
+ base_new = ED_object_add_duplicate(bmain, scene, view_layer, base_old, USER_DUP_MESH);
/* DAG_relations_tag_update(bmain); */ /* normally would call directly after but in this case delay recalc */
assign_matarar(base_new->object, give_matarar(obedit), *give_totcolp(obedit)); /* new in 2.5 */
- ED_base_object_select(base_new, BA_SELECT);
+ ED_object_base_select(base_new, BA_SELECT);
BMO_op_callf(bm_old, (BMO_FLAG_DEFAULTS & ~BMO_FLAG_RESPECT_HIDE),
"duplicate geom=%hvef dest=%p", BM_ELEM_TAG, bm_new);
@@ -3063,7 +3079,7 @@ static Base *mesh_separate_tagged(Main *bmain, Scene *scene, Base *base_old, BMe
return base_new;
}
-static bool mesh_separate_selected(Main *bmain, Scene *scene, Base *base_old, BMesh *bm_old)
+static bool mesh_separate_selected(Main *bmain, Scene *scene, ViewLayer *view_layer, Base *base_old, BMesh *bm_old)
{
/* we may have tags from previous operators */
BM_mesh_elem_hflag_disable_all(bm_old, BM_FACE | BM_EDGE | BM_VERT, BM_ELEM_TAG, false);
@@ -3071,7 +3087,7 @@ static bool mesh_separate_selected(Main *bmain, Scene *scene, Base *base_old, BM
/* sel -> tag */
BM_mesh_elem_hflag_enable_test(bm_old, BM_FACE | BM_EDGE | BM_VERT, BM_ELEM_TAG, true, false, BM_ELEM_SELECT);
- return (mesh_separate_tagged(bmain, scene, base_old, bm_old) != NULL);
+ return (mesh_separate_tagged(bmain, scene, view_layer, base_old, bm_old) != NULL);
}
/* flush a hflag to from verts to edges/faces */
@@ -3170,7 +3186,7 @@ static void mesh_separate_material_assign_mat_nr(Main *bmain, Object *ob, const
}
}
-static bool mesh_separate_material(Main *bmain, Scene *scene, Base *base_old, BMesh *bm_old)
+static bool mesh_separate_material(Main *bmain, Scene *scene, ViewLayer *view_layer, Base *base_old, BMesh *bm_old)
{
BMFace *f_cmp, *f;
BMIter iter;
@@ -3211,7 +3227,7 @@ static bool mesh_separate_material(Main *bmain, Scene *scene, Base *base_old, BM
}
/* Move selection into a separate object */
- base_new = mesh_separate_tagged(bmain, scene, base_old, bm_old);
+ base_new = mesh_separate_tagged(bmain, scene, view_layer, base_old, bm_old);
if (base_new) {
mesh_separate_material_assign_mat_nr(bmain, base_new->object, mat_nr);
}
@@ -3222,7 +3238,7 @@ static bool mesh_separate_material(Main *bmain, Scene *scene, Base *base_old, BM
return result;
}
-static bool mesh_separate_loose(Main *bmain, Scene *scene, Base *base_old, BMesh *bm_old)
+static bool mesh_separate_loose(Main *bmain, Scene *scene, ViewLayer *view_layer, Base *base_old, BMesh *bm_old)
{
int i;
BMEdge *e;
@@ -3275,7 +3291,7 @@ static bool mesh_separate_loose(Main *bmain, Scene *scene, Base *base_old, BMesh
bm_mesh_hflag_flush_vert(bm_old, BM_ELEM_TAG);
/* Move selection into a separate object */
- result |= (mesh_separate_tagged(bmain, scene, base_old, bm_old) != NULL);
+ result |= (mesh_separate_tagged(bmain, scene, view_layer, base_old, bm_old) != NULL);
}
return result;
@@ -3285,6 +3301,7 @@ static int edbm_separate_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
const int type = RNA_enum_get(op->ptr, "type");
int retval = 0;
@@ -3305,13 +3322,13 @@ static int edbm_separate_exec(bContext *C, wmOperator *op)
/* editmode separate */
switch (type) {
case MESH_SEPARATE_SELECTED:
- retval = mesh_separate_selected(bmain, scene, base, em->bm);
+ retval = mesh_separate_selected(bmain, scene, view_layer, base, em->bm);
break;
case MESH_SEPARATE_MATERIAL:
- retval = mesh_separate_material(bmain, scene, base, em->bm);
+ retval = mesh_separate_material(bmain, scene, view_layer, base, em->bm);
break;
case MESH_SEPARATE_LOOSE:
- retval = mesh_separate_loose(bmain, scene, base, em->bm);
+ retval = mesh_separate_loose(bmain, scene, view_layer, base, em->bm);
break;
default:
BLI_assert(0);
@@ -3346,10 +3363,10 @@ static int edbm_separate_exec(bContext *C, wmOperator *op)
switch (type) {
case MESH_SEPARATE_MATERIAL:
- retval_iter = mesh_separate_material(bmain, scene, base_iter, bm_old);
+ retval_iter = mesh_separate_material(bmain, scene, view_layer, base_iter, bm_old);
break;
case MESH_SEPARATE_LOOSE:
- retval_iter = mesh_separate_loose(bmain, scene, base_iter, bm_old);
+ retval_iter = mesh_separate_loose(bmain, scene, view_layer, base_iter, bm_old);
break;
default:
BLI_assert(0);
@@ -3359,7 +3376,7 @@ static int edbm_separate_exec(bContext *C, wmOperator *op)
if (retval_iter) {
BM_mesh_bm_to_me(bm_old, me, (&(struct BMeshToMeshParams){0}));
- DAG_id_tag_update(&me->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&me->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, me);
}
@@ -3374,7 +3391,7 @@ static int edbm_separate_exec(bContext *C, wmOperator *op)
if (retval) {
/* delay depsgraph recalc until all objects are duplicated */
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, NULL);
return OPERATOR_FINISHED;
@@ -5065,7 +5082,7 @@ static void sort_bmelem_flag(Scene *scene, Object *ob,
}
BM_mesh_remap(em->bm, map[0], map[1], map[2]);
-/* DAG_id_tag_update(ob->data, 0);*/
+/* DEG_id_tag_update(ob->data, 0);*/
for (j = 3; j--; ) {
if (map[j])
@@ -5892,7 +5909,7 @@ static int edbm_mark_freestyle_edge_exec(bContext *C, wmOperator *op)
}
}
- DAG_id_tag_update(obedit->data, OB_RECALC_DATA);
+ DEG_id_tag_update(obedit->data, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
return OPERATOR_FINISHED;
@@ -5956,7 +5973,7 @@ static int edbm_mark_freestyle_face_exec(bContext *C, wmOperator *op)
}
}
- DAG_id_tag_update(obedit->data, OB_RECALC_DATA);
+ DEG_id_tag_update(obedit->data, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
return OPERATOR_FINISHED;
diff --git a/source/blender/editors/mesh/editmesh_utils.c b/source/blender/editors/mesh/editmesh_utils.c
index e407d342603..132ac0d30b7 100644
--- a/source/blender/editors/mesh/editmesh_utils.c
+++ b/source/blender/editors/mesh/editmesh_utils.c
@@ -44,7 +44,6 @@
#include "BKE_DerivedMesh.h"
#include "BKE_context.h"
#include "BKE_global.h"
-#include "BKE_depsgraph.h"
#include "BKE_main.h"
#include "BKE_mesh.h"
#include "BKE_mesh_mapping.h"
@@ -52,6 +51,8 @@
#include "BKE_editmesh.h"
#include "BKE_editmesh_bvh.h"
+#include "DEG_depsgraph.h"
+
#include "BKE_object.h" /* XXX. only for EDBM_mesh_load(). */
#include "WM_api.h"
@@ -367,7 +368,7 @@ void EDBM_mesh_make(ToolSettings *ts, Object *ob, const bool add_key_index)
/**
* \warning This can invalidate the #DerivedMesh cache of other objects (for linked duplicates).
- * Most callers should run #DAG_id_tag_update on \a ob->data, see: T46738, T46913
+ * Most callers should run #DEG_id_tag_update on \a ob->data, see: T46738, T46913
*/
void EDBM_mesh_load(Object *ob)
{
@@ -507,7 +508,6 @@ UvVertMap *BM_uv_vert_map_create(
/* vars from original func */
UvVertMap *vmap;
UvMapVert *buf;
- /* MTexPoly *tf; */ /* UNUSED */
MLoopUV *luv;
unsigned int a;
int totverts, i, totuv, totfaces;
@@ -589,7 +589,6 @@ UvVertMap *BM_uv_vert_map_create(
newvlist = v;
efa = BM_face_at_index(bm, v->f);
- /* tf = CustomData_bmesh_get(&bm->pdata, efa->head.data, CD_MTEXPOLY); */ /* UNUSED */
l = BM_iter_at_index(bm, BM_LOOPS_OF_FACE, efa, v->tfindex);
luv = BM_ELEM_CD_GET_VOID_P(l, cd_loop_uv_offset);
@@ -601,7 +600,6 @@ UvVertMap *BM_uv_vert_map_create(
while (iterv) {
next = iterv->next;
efa = BM_face_at_index(bm, iterv->f);
- /* tf = CustomData_bmesh_get(&bm->pdata, efa->head.data, CD_MTEXPOLY); */ /* UNUSED */
l = BM_iter_at_index(bm, BM_LOOPS_OF_FACE, efa, iterv->tfindex);
luv = BM_ELEM_CD_GET_VOID_P(l, cd_loop_uv_offset);
@@ -916,29 +914,27 @@ UvElement *BM_uv_element_get(UvElementMap *map, BMFace *efa, BMLoop *l)
/* last_sel, use em->act_face otherwise get the last selected face in the editselections
* at the moment, last_sel is mainly useful for making sure the space image dosnt flicker */
-MTexPoly *EDBM_mtexpoly_active_get(BMEditMesh *em, BMFace **r_act_efa, const bool sloppy, const bool selected)
+BMFace *EDBM_uv_active_face_get(BMEditMesh *em, const bool sloppy, const bool selected)
{
BMFace *efa = NULL;
- if (!EDBM_mtexpoly_check(em))
+ if (!EDBM_uv_check(em))
return NULL;
efa = BM_mesh_active_face_get(em->bm, sloppy, selected);
if (efa) {
- if (r_act_efa) *r_act_efa = efa;
- return CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY);
+ return efa;
}
- if (r_act_efa) *r_act_efa = NULL;
return NULL;
}
/* can we edit UV's for this mesh?*/
-bool EDBM_mtexpoly_check(BMEditMesh *em)
+bool EDBM_uv_check(BMEditMesh *em)
{
/* some of these checks could be a touch overkill */
- return em && em->bm->totface && CustomData_has_layer(&em->bm->pdata, CD_MTEXPOLY) &&
+ return em && em->bm->totface &&
CustomData_has_layer(&em->bm->ldata, CD_MLOOPUV);
}
@@ -1017,7 +1013,7 @@ void EDBM_verts_mirror_cache_begin_ex(BMEditMesh *em, const int axis, const bool
BM_mesh_elem_index_ensure(bm, BM_VERT);
if (use_topology) {
- ED_mesh_mirrtopo_init(me, NULL, -1, &mesh_topo_store, true);
+ ED_mesh_mirrtopo_init(me, NULL, &mesh_topo_store, true);
}
else {
tree = BLI_kdtree_new(bm->totvert);
@@ -1267,7 +1263,7 @@ void EDBM_update_generic(BMEditMesh *em, const bool do_tessface, const bool is_d
{
Object *ob = em->ob;
/* order of calling isn't important */
- DAG_id_tag_update(ob->data, OB_RECALC_DATA);
+ DEG_id_tag_update(ob->data, OB_RECALC_DATA);
WM_main_add_notifier(NC_GEOM | ND_DATA, ob->data);
if (do_tessface) {
@@ -1396,7 +1392,9 @@ static void scale_point(float c1[3], const float p[3], const float s)
add_v3_v3(c1, p);
}
-bool BMBVH_EdgeVisible(struct BMBVHTree *tree, BMEdge *e, ARegion *ar, View3D *v3d, Object *obedit)
+bool BMBVH_EdgeVisible(struct BMBVHTree *tree, BMEdge *e,
+ const struct Depsgraph *depsgraph,
+ ARegion *ar, View3D *v3d, Object *obedit)
{
BMFace *f;
float co1[3], co2[3], co3[3], dir1[3], dir2[3], dir3[3];
@@ -1406,7 +1404,7 @@ bool BMBVH_EdgeVisible(struct BMBVHTree *tree, BMEdge *e, ARegion *ar, View3D *v
const float mval_f[2] = {ar->winx / 2.0f,
ar->winy / 2.0f};
- ED_view3d_win_to_segment(ar, v3d, mval_f, origin, end, false);
+ ED_view3d_win_to_segment(depsgraph, ar, v3d, mval_f, origin, end, false);
invert_m4_m4(invmat, obedit->obmat);
mul_m4_v3(invmat, origin);
diff --git a/source/blender/editors/mesh/mesh_data.c b/source/blender/editors/mesh/mesh_data.c
index bd7aaec075b..bd3d2f652c0 100644
--- a/source/blender/editors/mesh/mesh_data.c
+++ b/source/blender/editors/mesh/mesh_data.c
@@ -42,7 +42,6 @@
#include "BLI_math.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_mesh.h"
@@ -50,6 +49,8 @@
#include "BKE_report.h"
#include "BKE_editmesh.h"
+#include "DEG_depsgraph.h"
+
#include "RNA_define.h"
#include "WM_api.h"
@@ -245,14 +246,14 @@ void ED_mesh_uv_loop_reset_ex(struct Mesh *me, const int layernum)
}
}
- DAG_id_tag_update(&me->id, 0);
+ DEG_id_tag_update(&me->id, 0);
}
void ED_mesh_uv_loop_reset(struct bContext *C, struct Mesh *me)
{
/* could be ldata or pdata */
- CustomData *pdata = GET_CD_DATA(me, pdata);
- const int layernum = CustomData_get_active_layer(pdata, CD_MTEXPOLY);
+ CustomData *ldata = GET_CD_DATA(me, ldata);
+ const int layernum = CustomData_get_active_layer(ldata, CD_MLOOPUV);
ED_mesh_uv_loop_reset_ex(me, layernum);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, me);
@@ -269,21 +270,10 @@ int ED_mesh_uv_texture_add(Mesh *me, const char *name, const bool active_set)
if (me->edit_btmesh) {
em = me->edit_btmesh;
- layernum_dst = CustomData_number_of_layers(&em->bm->pdata, CD_MTEXPOLY);
+ layernum_dst = CustomData_number_of_layers(&em->bm->ldata, CD_MLOOPUV);
if (layernum_dst >= MAX_MTFACE)
return -1;
- /* CD_MTEXPOLY */
- BM_data_layer_add_named(em->bm, &em->bm->pdata, CD_MTEXPOLY, name);
- /* copy data from active UV */
- if (layernum_dst) {
- const int layernum_src = CustomData_get_active_layer(&em->bm->pdata, CD_MTEXPOLY);
- BM_data_layer_copy(em->bm, &em->bm->pdata, CD_MTEXPOLY, layernum_src, layernum_dst);
- }
- if (active_set || layernum_dst == 0) {
- CustomData_set_layer_active(&em->bm->pdata, CD_MTEXPOLY, layernum_dst);
- }
-
/* CD_MLOOPUV */
BM_data_layer_add_named(em->bm, &em->bm->ldata, CD_MLOOPUV, name);
/* copy data from active UV */
@@ -298,26 +288,22 @@ int ED_mesh_uv_texture_add(Mesh *me, const char *name, const bool active_set)
}
}
else {
- layernum_dst = CustomData_number_of_layers(&me->pdata, CD_MTEXPOLY);
+ layernum_dst = CustomData_number_of_layers(&me->ldata, CD_MLOOPUV);
if (layernum_dst >= MAX_MTFACE)
return -1;
- if (me->mtpoly) {
- CustomData_add_layer_named(&me->pdata, CD_MTEXPOLY, CD_DUPLICATE, me->mtpoly, me->totpoly, name);
+ if (me->mloopuv) {
CustomData_add_layer_named(&me->ldata, CD_MLOOPUV, CD_DUPLICATE, me->mloopuv, me->totloop, name);
CustomData_add_layer_named(&me->fdata, CD_MTFACE, CD_DUPLICATE, me->mtface, me->totface, name);
is_init = true;
}
else {
- CustomData_add_layer_named(&me->pdata, CD_MTEXPOLY, CD_DEFAULT, NULL, me->totpoly, name);
CustomData_add_layer_named(&me->ldata, CD_MLOOPUV, CD_DEFAULT, NULL, me->totloop, name);
CustomData_add_layer_named(&me->fdata, CD_MTFACE, CD_DEFAULT, NULL, me->totface, name);
}
if (active_set || layernum_dst == 0) {
- CustomData_set_layer_active(&me->pdata, CD_MTEXPOLY, layernum_dst);
CustomData_set_layer_active(&me->ldata, CD_MLOOPUV, layernum_dst);
-
CustomData_set_layer_active(&me->fdata, CD_MTFACE, layernum_dst);
}
@@ -329,7 +315,7 @@ int ED_mesh_uv_texture_add(Mesh *me, const char *name, const bool active_set)
ED_mesh_uv_loop_reset_ex(me, layernum_dst);
}
- DAG_id_tag_update(&me->id, 0);
+ DEG_id_tag_update(&me->id, 0);
WM_main_add_notifier(NC_GEOM | ND_DATA, me);
return layernum_dst;
@@ -343,12 +329,12 @@ void ED_mesh_uv_texture_ensure(struct Mesh *me, const char *name)
if (me->edit_btmesh) {
em = me->edit_btmesh;
- layernum_dst = CustomData_number_of_layers(&em->bm->pdata, CD_MTEXPOLY);
+ layernum_dst = CustomData_number_of_layers(&em->bm->ldata, CD_MLOOPUV);
if (layernum_dst == 0)
ED_mesh_uv_texture_add(me, name, true);
}
else {
- layernum_dst = CustomData_number_of_layers(&me->pdata, CD_MTEXPOLY);
+ layernum_dst = CustomData_number_of_layers(&me->ldata, CD_MLOOPUV);
if (layernum_dst == 0)
ED_mesh_uv_texture_add(me, name, true);
}
@@ -357,23 +343,19 @@ void ED_mesh_uv_texture_ensure(struct Mesh *me, const char *name)
bool ED_mesh_uv_texture_remove_index(Mesh *me, const int n)
{
- CustomData *pdata = GET_CD_DATA(me, pdata), *ldata = GET_CD_DATA(me, ldata);
- CustomDataLayer *cdlp, *cdlu;
+ CustomData *ldata = GET_CD_DATA(me, ldata);
+ CustomDataLayer *cdlu;
int index;
- index = CustomData_get_layer_index_n(pdata, CD_MTEXPOLY, n);
- cdlp = (index == -1) ? NULL : &pdata->layers[index];
-
index = CustomData_get_layer_index_n(ldata, CD_MLOOPUV, n);
cdlu = (index == -1) ? NULL : &ldata->layers[index];
- if (!cdlp || !cdlu)
+ if (!cdlu)
return false;
- delete_customdata_layer(me, cdlp);
delete_customdata_layer(me, cdlu);
- DAG_id_tag_update(&me->id, 0);
+ DEG_id_tag_update(&me->id, 0);
WM_main_add_notifier(NC_GEOM | ND_DATA, me);
return true;
@@ -381,14 +363,8 @@ bool ED_mesh_uv_texture_remove_index(Mesh *me, const int n)
bool ED_mesh_uv_texture_remove_active(Mesh *me)
{
/* texpoly/uv are assumed to be in sync */
- CustomData *pdata = GET_CD_DATA(me, pdata);
- const int n = CustomData_get_active_layer(pdata, CD_MTEXPOLY);
-
- /* double check active layers align! */
-#ifdef DEBUG
CustomData *ldata = GET_CD_DATA(me, ldata);
- BLI_assert(CustomData_get_active_layer(ldata, CD_MLOOPUV) == n);
-#endif
+ const int n = CustomData_get_active_layer(ldata, CD_MLOOPUV);
if (n != -1) {
return ED_mesh_uv_texture_remove_index(me, n);
@@ -400,8 +376,8 @@ bool ED_mesh_uv_texture_remove_active(Mesh *me)
bool ED_mesh_uv_texture_remove_named(Mesh *me, const char *name)
{
/* texpoly/uv are assumed to be in sync */
- CustomData *pdata = GET_CD_DATA(me, pdata);
- const int n = CustomData_get_named_layer(pdata, CD_MTEXPOLY, name);
+ CustomData *ldata = GET_CD_DATA(me, ldata);
+ const int n = CustomData_get_named_layer(ldata, CD_MLOOPUV, name);
if (n != -1) {
return ED_mesh_uv_texture_remove_index(me, n);
}
@@ -458,7 +434,7 @@ int ED_mesh_color_add(Mesh *me, const char *name, const bool active_set)
BKE_mesh_update_customdata_pointers(me, true);
}
- DAG_id_tag_update(&me->id, 0);
+ DEG_id_tag_update(&me->id, 0);
WM_main_add_notifier(NC_GEOM | ND_DATA, me);
return layernum;
@@ -473,7 +449,7 @@ bool ED_mesh_color_ensure(struct Mesh *me, const char *name)
BKE_mesh_update_customdata_pointers(me, true);
}
- DAG_id_tag_update(&me->id, 0);
+ DEG_id_tag_update(&me->id, 0);
return (me->mloopcol != NULL);
}
@@ -491,7 +467,7 @@ bool ED_mesh_color_remove_index(Mesh *me, const int n)
return false;
delete_customdata_layer(me, cdl);
- DAG_id_tag_update(&me->id, 0);
+ DEG_id_tag_update(&me->id, 0);
WM_main_add_notifier(NC_GEOM | ND_DATA, me);
return true;
@@ -530,13 +506,14 @@ static int layers_poll(bContext *C)
static int mesh_uv_texture_add_exec(bContext *C, wmOperator *UNUSED(op))
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Object *ob = ED_object_context(C);
Mesh *me = ob->data;
if (ED_mesh_uv_texture_add(me, NULL, true) == -1)
return OPERATOR_CANCELLED;
- if (ob->mode & OB_MODE_TEXTURE_PAINT) {
+ if (workspace->object_mode & OB_MODE_TEXTURE_PAINT) {
Scene *scene = CTX_data_scene(C);
BKE_paint_proj_mesh_data_check(scene, ob, NULL, NULL, NULL, NULL);
WM_event_add_notifier(C, NC_SCENE | ND_TOOLSETTINGS, NULL);
@@ -612,7 +589,7 @@ static int drop_named_image_invoke(bContext *C, wmOperator *op, const wmEvent *e
/* load_editMesh free's pointers used by CustomData layers which might be used by DerivedMesh too,
* so signal to re-create DerivedMesh here (sergey) */
- DAG_id_tag_update(&me->id, 0);
+ DEG_id_tag_update(&me->id, 0);
}
/* dummie drop support; ensure view shows a result :) */
@@ -646,13 +623,14 @@ void MESH_OT_drop_named_image(wmOperatorType *ot)
static int mesh_uv_texture_remove_exec(bContext *C, wmOperator *UNUSED(op))
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Object *ob = ED_object_context(C);
Mesh *me = ob->data;
if (!ED_mesh_uv_texture_remove_active(me))
return OPERATOR_CANCELLED;
- if (ob->mode & OB_MODE_TEXTURE_PAINT) {
+ if (workspace->object_mode & OB_MODE_TEXTURE_PAINT) {
Scene *scene = CTX_data_scene(C);
BKE_paint_proj_mesh_data_check(scene, ob, NULL, NULL, NULL, NULL);
WM_event_add_notifier(C, NC_SCENE | ND_TOOLSETTINGS, NULL);
@@ -751,7 +729,7 @@ static int mesh_customdata_clear_exec__internal(bContext *C,
CustomData_free_layers(data, type, tot);
}
- DAG_id_tag_update(&me->id, 0);
+ DEG_id_tag_update(&me->id, 0);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, me);
return OPERATOR_FINISHED;
@@ -766,13 +744,14 @@ static int mesh_customdata_mask_clear_poll(bContext *C)
{
Object *ob = ED_object_context(C);
if (ob && ob->type == OB_MESH) {
- Mesh *me = ob->data;
+ const WorkSpace *workspace = CTX_wm_workspace(C);
/* special case - can't run this if we're in sculpt mode */
- if (ob->mode & OB_MODE_SCULPT) {
+ if (workspace->object_mode & OB_MODE_SCULPT) {
return false;
}
+ Mesh *me = ob->data;
if (!ID_IS_LINKED(me)) {
CustomData *data = GET_CD_DATA(me, vdata);
if (CustomData_has_layer(data, CD_PAINT_MASK)) {
@@ -847,7 +826,7 @@ static int mesh_customdata_skin_add_exec(bContext *C, wmOperator *UNUSED(op))
BKE_mesh_ensure_skin_customdata(me);
- DAG_id_tag_update(&me->id, 0);
+ DEG_id_tag_update(&me->id, 0);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, me);
return OPERATOR_FINISHED;
@@ -909,7 +888,7 @@ static int mesh_customdata_custom_splitnormals_add_exec(bContext *C, wmOperator
CustomData_add_layer(data, CD_CUSTOMLOOPNORMAL, CD_DEFAULT, NULL, me->totloop);
}
- DAG_id_tag_update(&me->id, 0);
+ DEG_id_tag_update(&me->id, 0);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, me);
return OPERATOR_FINISHED;
@@ -986,7 +965,7 @@ void ED_mesh_update(Mesh *mesh, bContext *C, int calc_edges, int calc_tessface)
BKE_mesh_calc_normals(mesh);
- DAG_id_tag_update(&mesh->id, 0);
+ DEG_id_tag_update(&mesh->id, 0);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, mesh);
}
@@ -1306,7 +1285,6 @@ void ED_mesh_calc_tessface(Mesh *mesh, bool free_mpoly)
mesh->mloopcol = NULL;
mesh->mloopuv = NULL;
mesh->mpoly = NULL;
- mesh->mtpoly = NULL;
}
}
diff --git a/source/blender/editors/mesh/mesh_intern.h b/source/blender/editors/mesh/mesh_intern.h
index 300b21a052d..99342222d52 100644
--- a/source/blender/editors/mesh/mesh_intern.h
+++ b/source/blender/editors/mesh/mesh_intern.h
@@ -109,6 +109,11 @@ void MESH_OT_dupli_extrude_cursor(struct wmOperatorType *ot);
void MESH_OT_spin(struct wmOperatorType *ot);
void MESH_OT_screw(struct wmOperatorType *ot);
+/* *** editmesh_polybuild.c *** */
+void MESH_OT_polybuild_face_at_cursor(struct wmOperatorType *ot);
+void MESH_OT_polybuild_split_at_cursor(struct wmOperatorType *ot);
+void MESH_OT_polybuild_dissolve_at_cursor(struct wmOperatorType *ot);
+void MESH_OT_polybuild_hover(struct wmOperatorType *ot);
/* *** editmesh_inset.c *** */
void MESH_OT_inset(struct wmOperatorType *ot);
diff --git a/source/blender/editors/mesh/mesh_navmesh.c b/source/blender/editors/mesh/mesh_navmesh.c
index 0f1884f4017..aaa06951ec6 100644
--- a/source/blender/editors/mesh/mesh_navmesh.c
+++ b/source/blender/editors/mesh/mesh_navmesh.c
@@ -40,8 +40,8 @@
#include "BLI_math_vector.h"
#include "BLI_linklist.h"
+#include "BKE_layer.h"
#include "BKE_library.h"
-#include "BKE_depsgraph.h"
#include "BKE_context.h"
#include "BKE_mesh.h"
#include "BKE_scene.h"
@@ -58,6 +58,8 @@
#include "recast-capi.h"
+#include "DEG_depsgraph.h"
+
#include "mesh_intern.h" /* own include */
@@ -72,18 +74,21 @@ static void createVertsTrisData(bContext *C, LinkNode *obs,
LinkNode *oblink, *dmlink;
DerivedMesh *dm;
Scene *scene = CTX_data_scene(C);
+ EvaluationContext eval_ctx;
LinkNodePair dms_pair = {NULL, NULL};
int nverts, ntris, *tris;
float *verts;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
nverts = 0;
ntris = 0;
/* calculate number of verts and tris */
for (oblink = obs; oblink; oblink = oblink->next) {
ob = (Object *) oblink->link;
- dm = mesh_create_derived_no_virtual(scene, ob, NULL, CD_MASK_MESH);
+ dm = mesh_create_derived_no_virtual(&eval_ctx, scene, ob, NULL, CD_MASK_MESH);
DM_ensure_tessface(dm);
BLI_linklist_append(&dms_pair, dm);
@@ -334,7 +339,7 @@ static Object *createRepresentation(bContext *C, struct recast_polyMesh *pmesh,
int i, j, k;
unsigned short *v;
int face[3];
- Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Object *obedit;
int createob = base == NULL;
int nverts, nmeshes, nvp;
@@ -352,8 +357,8 @@ static Object *createRepresentation(bContext *C, struct recast_polyMesh *pmesh,
}
else {
obedit = base->object;
- BKE_scene_base_deselect_all(scene);
- BKE_scene_base_select(scene, base);
+ BKE_view_layer_base_deselect_all(view_layer);
+ BKE_view_layer_base_select(view_layer, base);
copy_v3_v3(obedit->loc, co);
copy_v3_v3(obedit->rot, rot);
}
@@ -441,7 +446,7 @@ static Object *createRepresentation(bContext *C, struct recast_polyMesh *pmesh,
recast_destroyPolyMesh(pmesh);
recast_destroyPolyMeshDetail(dmesh);
- DAG_id_tag_update((ID *)obedit->data, OB_RECALC_DATA);
+ DEG_id_tag_update((ID *)obedit->data, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
@@ -462,6 +467,7 @@ static Object *createRepresentation(bContext *C, struct recast_polyMesh *pmesh,
static int navmesh_create_exec(bContext *C, wmOperator *op)
{
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
LinkNode *obs = NULL;
Base *navmeshBase = NULL;
@@ -469,7 +475,7 @@ static int navmesh_create_exec(bContext *C, wmOperator *op)
{
if (base->object->type == OB_MESH) {
if (base->object->body_type == OB_BODY_TYPE_NAVMESH) {
- if (!navmeshBase || base == scene->basact) {
+ if (!navmeshBase || base == view_layer->basact) {
navmeshBase = base;
}
}
@@ -552,7 +558,7 @@ static int navmesh_face_copy_exec(bContext *C, wmOperator *op)
}
}
- DAG_id_tag_update((ID *)obedit->data, OB_RECALC_DATA);
+ DEG_id_tag_update((ID *)obedit->data, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
return OPERATOR_FINISHED;
@@ -633,7 +639,7 @@ static int navmesh_face_add_exec(bContext *C, wmOperator *UNUSED(op))
}
}
- DAG_id_tag_update((ID *)obedit->data, OB_RECALC_DATA);
+ DEG_id_tag_update((ID *)obedit->data, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
return OPERATOR_FINISHED;
@@ -656,8 +662,10 @@ void MESH_OT_navmesh_face_add(struct wmOperatorType *ot)
static int navmesh_obmode_data_poll(bContext *C)
{
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
Object *ob = ED_object_active_context(C);
- if (ob && (ob->mode == OB_MODE_OBJECT) && (ob->type == OB_MESH)) {
+ if (ob && (eval_ctx.object_mode == OB_MODE_OBJECT) && (ob->type == OB_MESH)) {
Mesh *me = ob->data;
return CustomData_has_layer(&me->pdata, CD_RECAST);
}
@@ -666,8 +674,10 @@ static int navmesh_obmode_data_poll(bContext *C)
static int navmesh_obmode_poll(bContext *C)
{
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
Object *ob = ED_object_active_context(C);
- if (ob && (ob->mode == OB_MODE_OBJECT) && (ob->type == OB_MESH)) {
+ if (ob && (eval_ctx.object_mode == OB_MODE_OBJECT) && (ob->type == OB_MESH)) {
return true;
}
return false;
@@ -682,7 +692,7 @@ static int navmesh_reset_exec(bContext *C, wmOperator *UNUSED(op))
BKE_mesh_ensure_navmesh(me);
- DAG_id_tag_update(&me->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&me->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, &me->id);
return OPERATOR_FINISHED;
@@ -710,7 +720,7 @@ static int navmesh_clear_exec(bContext *C, wmOperator *UNUSED(op))
CustomData_free_layers(&me->pdata, CD_RECAST, me->totpoly);
- DAG_id_tag_update(&me->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&me->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, &me->id);
return OPERATOR_FINISHED;
diff --git a/source/blender/editors/mesh/mesh_ops.c b/source/blender/editors/mesh/mesh_ops.c
index 697a92f36d1..b9920f9deca 100644
--- a/source/blender/editors/mesh/mesh_ops.c
+++ b/source/blender/editors/mesh/mesh_ops.c
@@ -147,7 +147,13 @@ void ED_operatortypes_mesh(void)
WM_operatortype_append(MESH_OT_rip_edge);
WM_operatortype_append(MESH_OT_blend_from_shape);
WM_operatortype_append(MESH_OT_shape_propagate_to_all);
-
+
+ /* editmesh_polybuild */
+ WM_operatortype_append(MESH_OT_polybuild_face_at_cursor);
+ WM_operatortype_append(MESH_OT_polybuild_split_at_cursor);
+ WM_operatortype_append(MESH_OT_polybuild_dissolve_at_cursor);
+ WM_operatortype_append(MESH_OT_polybuild_hover);
+
WM_operatortype_append(MESH_OT_uv_texture_add);
WM_operatortype_append(MESH_OT_uv_texture_remove);
WM_operatortype_append(MESH_OT_vertex_color_add);
@@ -298,6 +304,23 @@ void ED_operatormacros_mesh(void)
otmacro = WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate");
RNA_enum_set(otmacro->ptr, "proportional", 0);
RNA_boolean_set(otmacro->ptr, "mirror", false);
+
+
+ ot = WM_operatortype_append_macro(
+ "MESH_OT_polybuild_face_at_cursor_move", "Face At Cursor Move", "",
+ OPTYPE_UNDO | OPTYPE_REGISTER);
+ WM_operatortype_macro_define(ot, "MESH_OT_polybuild_face_at_cursor");
+ otmacro = WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate");
+ RNA_enum_set(otmacro->ptr, "proportional", 0);
+ RNA_boolean_set(otmacro->ptr, "mirror", false);
+
+ ot = WM_operatortype_append_macro(
+ "MESH_OT_polybuild_split_at_cursor_move", "Split At Cursor Move", "",
+ OPTYPE_UNDO | OPTYPE_REGISTER);
+ WM_operatortype_macro_define(ot, "MESH_OT_polybuild_split_at_cursor");
+ otmacro = WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate");
+ RNA_enum_set(otmacro->ptr, "proportional", 0);
+ RNA_boolean_set(otmacro->ptr, "mirror", false);
}
/* note mesh keymap also for other space? */
diff --git a/source/blender/editors/mesh/meshtools.c b/source/blender/editors/mesh/meshtools.c
index c900373a59c..85b1c70fde3 100644
--- a/source/blender/editors/mesh/meshtools.c
+++ b/source/blender/editors/mesh/meshtools.c
@@ -49,7 +49,6 @@
#include "BLI_kdtree.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_deform.h"
#include "BKE_DerivedMesh.h"
#include "BKE_key.h"
@@ -62,6 +61,9 @@
#include "BKE_editmesh.h"
#include "BKE_multires.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#include "ED_mesh.h"
#include "ED_object.h"
#include "ED_view3d.h"
@@ -77,7 +79,7 @@
* return 0 if no join is made (error) and 1 if the join is done */
static void join_mesh_single(
- Main *bmain, Scene *scene,
+ bContext *C, Main *bmain, Scene *scene,
Object *ob_dst, Object *ob_src, float imat[4][4],
MVert **mvert_pp, MEdge **medge_pp, MLoop **mloop_pp, MPoly **mpoly_pp,
CustomData *vdata, CustomData *edata, CustomData *ldata, CustomData *pdata,
@@ -86,6 +88,7 @@ static void join_mesh_single(
Material **matar, int *matmap, int totcol,
int *vertofs, int *edgeofs, int *loopofs, int *polyofs)
{
+ EvaluationContext eval_ctx;
int a, b;
Mesh *me = ob_src->data;
@@ -94,6 +97,8 @@ static void join_mesh_single(
MLoop *mloop = *mloop_pp;
MPoly *mpoly = *mpoly_pp;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
if (me->totvert) {
/* merge customdata flag */
((Mesh *)ob_dst->data)->cd_flag |= me->cd_flag;
@@ -214,12 +219,13 @@ static void join_mesh_single(
if (ob_src != ob_dst) {
MultiresModifierData *mmd;
- multiresModifier_prepare_join(scene, ob_src, ob_dst);
+ multiresModifier_prepare_join(&eval_ctx, scene, ob_src, ob_dst);
if ((mmd = get_multires_modifier(scene, ob_src, true))) {
- ED_object_iter_other(bmain, ob_src, true,
- ED_object_multires_update_totlevels_cb,
- &mmd->totlvl);
+ ED_object_iter_other(
+ &eval_ctx, bmain, ob_src, true,
+ ED_object_multires_update_totlevels_cb,
+ &mmd->totlvl);
}
}
@@ -493,7 +499,7 @@ int join_mesh_exec(bContext *C, wmOperator *op)
* active mesh will remain first ones in new result of the merge, in same order for CD layers, etc. See also T50084.
*/
join_mesh_single(
- bmain, scene,
+ C, bmain, scene,
ob, ob, imat,
&mvert, &medge, &mloop, &mpoly,
&vdata, &edata, &ldata, &pdata,
@@ -510,7 +516,7 @@ int join_mesh_exec(bContext *C, wmOperator *op)
/* only join if this is a mesh */
if (base->object->type == OB_MESH) {
join_mesh_single(
- bmain, scene,
+ C, bmain, scene,
ob, base->object, imat,
&mvert, &medge, &mloop, &mpoly,
&vdata, &edata, &ldata, &pdata,
@@ -521,7 +527,7 @@ int join_mesh_exec(bContext *C, wmOperator *op)
/* free base, now that data is merged */
if (base->object != ob) {
- ED_base_object_free_and_unlink(bmain, scene, base);
+ ED_object_base_free_and_unlink(bmain, scene, base->object);
}
}
}
@@ -594,9 +600,9 @@ int join_mesh_exec(bContext *C, wmOperator *op)
/* Due to dependnecy cycle some other object might access old derived data. */
BKE_object_free_derived_caches(ob);
- DAG_relations_tag_update(bmain); /* removed objects, need to rebuild dag */
+ DEG_relations_tag_update(bmain); /* removed objects, need to rebuild dag */
- DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA);
WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, scene);
@@ -612,6 +618,7 @@ int join_mesh_shapes_exec(bContext *C, wmOperator *op)
{
Scene *scene = CTX_data_scene(C);
Object *ob = CTX_data_active_object(C);
+ EvaluationContext eval_ctx;
Mesh *me = (Mesh *)ob->data;
Mesh *selme = NULL;
DerivedMesh *dm = NULL;
@@ -619,6 +626,8 @@ int join_mesh_shapes_exec(bContext *C, wmOperator *op)
KeyBlock *kb;
bool ok = false, nonequal_verts = false;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases)
{
if (base->object == ob) continue;
@@ -660,7 +669,7 @@ int join_mesh_shapes_exec(bContext *C, wmOperator *op)
selme = (Mesh *)base->object->data;
if (selme->totvert == me->totvert) {
- dm = mesh_get_derived_deform(scene, base->object, CD_MASK_BAREMESH);
+ dm = mesh_get_derived_deform(&eval_ctx, scene, base->object, CD_MASK_BAREMESH);
if (!dm) continue;
@@ -769,15 +778,16 @@ static MirrTopoStore_t mesh_topo_store = {NULL, -1. - 1, -1};
/* mode is 's' start, or 'e' end, or 'u' use */
/* if end, ob can be NULL */
/* note, is supposed return -1 on error, which callers are currently checking for, but is not used so far */
-int ED_mesh_mirror_topo_table(Object *ob, DerivedMesh *dm, char mode)
+int ED_mesh_mirror_topo_table(
+ Object *ob, DerivedMesh *dm, char mode)
{
if (mode == 'u') { /* use table */
- if (ED_mesh_mirrtopo_recalc_check(ob->data, dm, ob->mode, &mesh_topo_store)) {
+ if (ED_mesh_mirrtopo_recalc_check(ob->data, dm, &mesh_topo_store)) {
ED_mesh_mirror_topo_table(ob, dm, 's');
}
}
else if (mode == 's') { /* start table */
- ED_mesh_mirrtopo_init(ob->data, dm, ob->mode, &mesh_topo_store, false);
+ ED_mesh_mirrtopo_init(ob->data, dm, &mesh_topo_store, false);
}
else if (mode == 'e') { /* end table */
ED_mesh_mirrtopo_free(&mesh_topo_store);
@@ -1088,6 +1098,7 @@ int *mesh_get_x_mirror_faces(Object *ob, BMEditMesh *em, DerivedMesh *dm)
*/
bool ED_mesh_pick_face(bContext *C, Object *ob, const int mval[2], unsigned int *index, int size)
{
+ EvaluationContext eval_ctx;
ViewContext vc;
Mesh *me = ob->data;
@@ -1096,6 +1107,7 @@ bool ED_mesh_pick_face(bContext *C, Object *ob, const int mval[2], unsigned int
if (!me || me->totpoly == 0)
return false;
+ CTX_data_eval_ctx(C, &eval_ctx);
view3d_set_viewcontext(C, &vc);
if (size) {
@@ -1103,11 +1115,11 @@ bool ED_mesh_pick_face(bContext *C, Object *ob, const int mval[2], unsigned int
* on an edge in the backbuf, we can still select a face */
float dummy_dist;
- *index = ED_view3d_backbuf_sample_rect(&vc, mval, size, 1, me->totpoly + 1, &dummy_dist);
+ *index = ED_view3d_backbuf_sample_rect(&eval_ctx, &vc, mval, size, 1, me->totpoly + 1, &dummy_dist);
}
else {
/* sample only on the exact position */
- *index = ED_view3d_backbuf_sample(&vc, mval[0], mval[1]);
+ *index = ED_view3d_backbuf_sample(&eval_ctx, &vc, mval[0], mval[1]);
}
if ((*index) == 0 || (*index) > (unsigned int)me->totpoly)
@@ -1146,9 +1158,12 @@ static void ed_mesh_pick_face_vert__mpoly_find(
*/
bool ED_mesh_pick_face_vert(bContext *C, Object *ob, const int mval[2], unsigned int *index, int size)
{
+ EvaluationContext eval_ctx;
unsigned int poly_index;
Mesh *me = ob->data;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
BLI_assert(me && GS(me->id.name) == ID_ME);
if (ED_mesh_pick_face(C, ob, mval, &poly_index, size)) {
@@ -1156,7 +1171,7 @@ bool ED_mesh_pick_face_vert(bContext *C, Object *ob, const int mval[2], unsigned
struct ARegion *ar = CTX_wm_region(C);
/* derived mesh to find deformed locations */
- DerivedMesh *dm = mesh_get_derived_final(scene, ob, CD_MASK_BAREMESH | CD_MASK_ORIGINDEX);
+ DerivedMesh *dm = mesh_get_derived_final(&eval_ctx, scene, ob, CD_MASK_BAREMESH | CD_MASK_ORIGINDEX);
int v_idx_best = ORIGINDEX_NONE;
@@ -1253,9 +1268,12 @@ static void ed_mesh_pick_vert__mapFunc(void *userData, int index, const float co
}
bool ED_mesh_pick_vert(bContext *C, Object *ob, const int mval[2], unsigned int *index, int size, bool use_zbuf)
{
+ EvaluationContext eval_ctx;
ViewContext vc;
Mesh *me = ob->data;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
BLI_assert(me && GS(me->id.name) == ID_ME);
if (!me || me->totvert == 0)
@@ -1269,11 +1287,11 @@ bool ED_mesh_pick_vert(bContext *C, Object *ob, const int mval[2], unsigned int
* on an face in the backbuf, we can still select a vert */
float dummy_dist;
- *index = ED_view3d_backbuf_sample_rect(&vc, mval, size, 1, me->totvert + 1, &dummy_dist);
+ *index = ED_view3d_backbuf_sample_rect(&eval_ctx, &vc, mval, size, 1, me->totvert + 1, &dummy_dist);
}
else {
/* sample only on the exact position */
- *index = ED_view3d_backbuf_sample(&vc, mval[0], mval[1]);
+ *index = ED_view3d_backbuf_sample(&eval_ctx, &vc, mval[0], mval[1]);
}
if ((*index) == 0 || (*index) > (unsigned int)me->totvert)
@@ -1283,7 +1301,7 @@ bool ED_mesh_pick_vert(bContext *C, Object *ob, const int mval[2], unsigned int
}
else {
/* derived mesh to find deformed locations */
- DerivedMesh *dm = mesh_get_derived_final(vc.scene, ob, CD_MASK_BAREMESH);
+ DerivedMesh *dm = mesh_get_derived_final(&eval_ctx, vc.scene, ob, CD_MASK_BAREMESH);
ARegion *ar = vc.ar;
RegionView3D *rv3d = ar->regiondata;
@@ -1323,17 +1341,17 @@ bool ED_mesh_pick_vert(bContext *C, Object *ob, const int mval[2], unsigned int
MDeformVert *ED_mesh_active_dvert_get_em(Object *ob, BMVert **r_eve)
{
- if (ob->mode & OB_MODE_EDIT && ob->type == OB_MESH && ob->defbase.first) {
+ if (ob->type == OB_MESH && ob->defbase.first) {
Mesh *me = ob->data;
- BMesh *bm = me->edit_btmesh->bm;
- const int cd_dvert_offset = CustomData_get_offset(&bm->vdata, CD_MDEFORMVERT);
-
- if (cd_dvert_offset != -1) {
- BMVert *eve = BM_mesh_active_vert_get(bm);
-
- if (eve) {
- if (r_eve) *r_eve = eve;
- return BM_ELEM_CD_GET_VOID_P(eve, cd_dvert_offset);
+ if (me->edit_btmesh != NULL) {
+ BMesh *bm = me->edit_btmesh->bm;
+ const int cd_dvert_offset = CustomData_get_offset(&bm->vdata, CD_MDEFORMVERT);
+ if (cd_dvert_offset != -1) {
+ BMVert *eve = BM_mesh_active_vert_get(bm);
+ if (eve) {
+ if (r_eve) *r_eve = eve;
+ return BM_ELEM_CD_GET_VOID_P(eve, cd_dvert_offset);
+ }
}
}
}
@@ -1358,7 +1376,8 @@ MDeformVert *ED_mesh_active_dvert_get_ob(Object *ob, int *r_index)
MDeformVert *ED_mesh_active_dvert_get_only(Object *ob)
{
if (ob->type == OB_MESH) {
- if (ob->mode & OB_MODE_EDIT) {
+ Mesh *me = ob->data;
+ if (me->edit_btmesh != NULL) {
return ED_mesh_active_dvert_get_em(ob, NULL);
}
else {
diff --git a/source/blender/editors/metaball/CMakeLists.txt b/source/blender/editors/metaball/CMakeLists.txt
index 0f9de8dbf87..89ba942ac36 100644
--- a/source/blender/editors/metaball/CMakeLists.txt
+++ b/source/blender/editors/metaball/CMakeLists.txt
@@ -22,6 +22,7 @@ set(INC
../include
../../blenkernel
../../blenlib
+ ../../depsgraph
../../makesdna
../../makesrna
../../render/extern/include
diff --git a/source/blender/editors/metaball/mball_edit.c b/source/blender/editors/metaball/mball_edit.c
index 5b4078b98b7..935f1a5ea4a 100644
--- a/source/blender/editors/metaball/mball_edit.c
+++ b/source/blender/editors/metaball/mball_edit.c
@@ -48,10 +48,11 @@
#include "RNA_define.h"
#include "RNA_access.h"
-#include "BKE_depsgraph.h"
#include "BKE_context.h"
#include "BKE_mball.h"
+#include "DEG_depsgraph.h"
+
#include "ED_mball.h"
#include "ED_screen.h"
#include "ED_view3d.h"
@@ -433,7 +434,7 @@ static int duplicate_metaelems_exec(bContext *C, wmOperator *UNUSED(op))
ml = ml->prev;
}
WM_event_add_notifier(C, NC_GEOM | ND_DATA, mb);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
}
return OPERATOR_FINISHED;
@@ -475,7 +476,7 @@ static int delete_metaelems_exec(bContext *C, wmOperator *UNUSED(op))
ml = next;
}
WM_event_add_notifier(C, NC_GEOM | ND_DATA, mb);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
}
return OPERATOR_FINISHED;
@@ -515,7 +516,7 @@ static int hide_metaelems_exec(bContext *C, wmOperator *op)
ml = ml->next;
}
WM_event_add_notifier(C, NC_GEOM | ND_DATA, mb);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
}
return OPERATOR_FINISHED;
@@ -558,7 +559,7 @@ static int reveal_metaelems_exec(bContext *C, wmOperator *op)
}
if (changed) {
WM_event_add_notifier(C, NC_GEOM | ND_DATA, mb);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
}
return OPERATOR_FINISHED;
@@ -588,6 +589,7 @@ bool ED_mball_select_pick(bContext *C, const int mval[2], bool extend, bool dese
{
static MetaElem *startelem = NULL;
Object *obedit = CTX_data_edit_object(C);
+ EvaluationContext eval_ctx;
ViewContext vc;
MetaBall *mb = (MetaBall *)obedit->data;
MetaElem *ml, *ml_act = NULL;
@@ -595,11 +597,12 @@ bool ED_mball_select_pick(bContext *C, const int mval[2], bool extend, bool dese
unsigned int buffer[MAXPICKBUF];
rcti rect;
+ CTX_data_eval_ctx(C, &eval_ctx);
view3d_set_viewcontext(C, &vc);
BLI_rcti_init_pt_radius(&rect, mval, 12);
- hits = view3d_opengl_select(&vc, buffer, MAXPICKBUF, &rect, VIEW3D_SELECT_PICK_NEAREST);
+ hits = view3d_opengl_select(&eval_ctx, &vc, buffer, MAXPICKBUF, &rect, VIEW3D_SELECT_PICK_NEAREST);
/* does startelem exist? */
ml = mb->editelems->first;
diff --git a/source/blender/editors/object/CMakeLists.txt b/source/blender/editors/object/CMakeLists.txt
index b3d02d45e13..8050508983b 100644
--- a/source/blender/editors/object/CMakeLists.txt
+++ b/source/blender/editors/object/CMakeLists.txt
@@ -24,6 +24,7 @@ set(INC
../../blenlib
../../blentranslation
../../bmesh
+ ../../depsgraph
../../gpu
../../ikplugin
../../imbuf
@@ -46,6 +47,7 @@ set(SRC
object_bake_api.c
object_constraint.c
object_edit.c
+ object_facemap_ops.c
object_group.c
object_hook.c
object_lattice.c
diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c
index 8d5c4684c2b..18c18f10c13 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -45,6 +45,7 @@
#include "DNA_object_fluidsim_types.h"
#include "DNA_object_force_types.h"
#include "DNA_object_types.h"
+#include "DNA_lightprobe_types.h"
#include "DNA_scene_types.h"
#include "DNA_vfont_types.h"
#include "DNA_actuator_types.h"
@@ -63,10 +64,10 @@
#include "BKE_animsys.h"
#include "BKE_armature.h"
#include "BKE_camera.h"
+#include "BKE_collection.h"
#include "BKE_context.h"
#include "BKE_constraint.h"
#include "BKE_curve.h"
-#include "BKE_depsgraph.h"
#include "BKE_DerivedMesh.h"
#include "BKE_displist.h"
#include "BKE_effect.h"
@@ -74,6 +75,7 @@
#include "BKE_group.h"
#include "BKE_lamp.h"
#include "BKE_lattice.h"
+#include "BKE_layer.h"
#include "BKE_library.h"
#include "BKE_library_query.h"
#include "BKE_library_remap.h"
@@ -91,6 +93,9 @@
#include "BKE_screen.h"
#include "BKE_speaker.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#include "RNA_access.h"
#include "RNA_define.h"
#include "RNA_enum_types.h"
@@ -112,7 +117,7 @@
#include "UI_resources.h"
-#include "GPU_material.h"
+#include "GPU_lamp.h"
#include "object_intern.h"
@@ -146,6 +151,16 @@ static const EnumPropertyItem field_type_items[] = {
{0, NULL, 0, NULL, NULL}
};
+static EnumPropertyItem lightprobe_type_items[] = {
+ {LIGHTPROBE_TYPE_CUBE, "SPHERE", ICON_MESH_UVSPHERE, "Reflection Cubemap",
+ "Reflection probe with spherical or cubic attenuation"},
+ {LIGHTPROBE_TYPE_PLANAR, "PLANAR", ICON_MESH_PLANE, "Reflection Plane",
+ "Planar reflection probe"},
+ {LIGHTPROBE_TYPE_GRID, "GRID", ICON_MESH_GRID, "Irradiance Volume",
+ "Irradiance probe to capture diffuse indirect lighting"},
+ {0, NULL, 0, NULL, NULL}
+};
+
/************************** Exported *****************************/
void ED_object_location_from_view(bContext *C, float loc[3])
@@ -208,16 +223,19 @@ void ED_object_base_init_transform(bContext *C, Base *base, const float loc[3],
{
Object *ob = base->object;
Scene *scene = CTX_data_scene(C);
+ EvaluationContext eval_ctx;
if (!scene) return;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
if (loc)
copy_v3_v3(ob->loc, loc);
if (rot)
copy_v3_v3(ob->rot, rot);
- BKE_object_where_is_calc(scene, ob);
+ BKE_object_where_is_calc(&eval_ctx, scene, ob);
}
/* Uses context to figure out transform for primitive.
@@ -405,10 +423,11 @@ Object *ED_object_add_type(
bContext *C,
int type, const char *name,
const float loc[3], const float rot[3],
- bool enter_editmode, unsigned int layer)
+ bool enter_editmode, unsigned int UNUSED(layer))
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Object *ob;
/* for as long scene has editmode... */
@@ -416,13 +435,12 @@ Object *ED_object_add_type(
ED_object_editmode_exit(C, EM_FREEDATA | EM_FREEUNDO | EM_WAITCURSOR | EM_DO_UNDO); /* freedata, and undo */
/* deselects all, sets scene->basact */
- ob = BKE_object_add(bmain, scene, type, name);
- BASACT->lay = ob->lay = layer;
+ ob = BKE_object_add(bmain, scene, view_layer, type, name);
/* editor level activate, notifiers */
- ED_base_object_activate(C, BASACT);
+ ED_object_base_activate(C, view_layer->basact);
/* more editor stuff */
- ED_object_base_init_transform(C, BASACT, loc, rot);
+ ED_object_base_init_transform(C, view_layer->basact, loc, rot);
/* Ignore collisions by default for non-mesh objects */
if (type != OB_MESH) {
@@ -430,10 +448,13 @@ Object *ED_object_add_type(
ob->gameflag &= ~(OB_SENSOR | OB_RIGID_BODY | OB_SOFT_BODY | OB_COLLISION | OB_CHARACTER | OB_OCCLUDER | OB_DYNAMIC | OB_NAVMESH); /* copied from rna_object.c */
}
- DAG_id_type_tag(bmain, ID_OB);
- DAG_relations_tag_update(bmain);
- if (ob->data) {
- ED_render_id_flush_update(bmain, ob->data);
+ /* TODO(sergey): This is weird to manually tag objects for update, better to
+ * use DEG_id_tag_update here perhaps.
+ */
+ DEG_id_type_tag(bmain, ID_OB);
+ DEG_relations_tag_update(bmain);
+ if (ob->data != NULL) {
+ DEG_id_tag_update_ex(bmain, (ID *)ob->data, DEG_TAG_EDITORS_UPDATE);
}
if (enter_editmode)
@@ -441,6 +462,9 @@ Object *ED_object_add_type(
WM_event_add_notifier(C, NC_SCENE | ND_LAYER_CONTENT, scene);
+ /* TODO(sergey): Use proper flag for tagging here. */
+ DEG_id_tag_update(&scene->id, 0);
+
return ob;
}
@@ -492,6 +516,79 @@ void OBJECT_OT_add(wmOperatorType *ot)
ED_object_add_generic_props(ot, true);
}
+/********************** Add Probe Operator **********************/
+
+/* for object add operator */
+static int lightprobe_add_exec(bContext *C, wmOperator *op)
+{
+ Object *ob;
+ LightProbe *probe;
+ int type;
+ bool enter_editmode;
+ unsigned int layer;
+ float loc[3], rot[3];
+ float radius;
+
+ WM_operator_view3d_unit_defaults(C, op);
+ if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &layer, NULL))
+ return OPERATOR_CANCELLED;
+
+ type = RNA_enum_get(op->ptr, "type");
+ radius = RNA_float_get(op->ptr, "radius");
+
+ const char *name = CTX_DATA_(BLT_I18NCONTEXT_ID_OBJECT, "Light Probe");
+ ob = ED_object_add_type(C, OB_LIGHTPROBE, name, loc, rot, false, layer);
+ BKE_object_obdata_size_init(ob, radius);
+
+ probe = (LightProbe *)ob->data;
+ probe->type = type;
+
+ switch (type) {
+ case LIGHTPROBE_TYPE_GRID:
+ probe->distinf = 0.3f;
+ probe->falloff = 1.0f;
+ probe->clipsta = 0.01f;
+ break;
+ case LIGHTPROBE_TYPE_PLANAR:
+ probe->distinf = 0.1f;
+ probe->falloff = 0.5f;
+ probe->clipsta = 0.001f;
+ ob->empty_drawsize = 0.5f;
+ break;
+ case LIGHTPROBE_TYPE_CUBE:
+ probe->attenuation_type = LIGHTPROBE_SHAPE_ELIPSOID;
+ break;
+ default:
+ BLI_assert(!"Lightprobe type not configured.");
+ break;
+ }
+
+ DEG_relations_tag_update(CTX_data_main(C));
+
+ return OPERATOR_FINISHED;
+}
+
+void OBJECT_OT_lightprobe_add(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Add Light Probe";
+ ot->description = "Add a light probe object";
+ ot->idname = "OBJECT_OT_lightprobe_add";
+
+ /* api callbacks */
+ ot->exec = lightprobe_add_exec;
+ ot->poll = ED_operator_objectmode;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+
+ /* properties */
+ ot->prop = RNA_def_enum(ot->srna, "type", lightprobe_type_items, 0, "Type", "");
+
+ ED_object_add_unit_props(ot);
+ ED_object_add_generic_props(ot, true);
+}
+
/********************* Add Effector Operator ********************/
/* for object add operator */
@@ -535,7 +632,7 @@ static int effector_add_exec(bContext *C, wmOperator *op)
ob->pd = object_add_collision_fields(type);
- DAG_relations_tag_update(CTX_data_main(C));
+ DEG_relations_tag_update(CTX_data_main(C));
return OPERATOR_FINISHED;
}
@@ -640,7 +737,7 @@ static int object_metaball_add_exec(bContext *C, wmOperator *op)
newob = true;
}
else {
- DAG_id_tag_update(&obedit->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&obedit->id, OB_RECALC_DATA);
}
ED_object_new_primitive_matrix(C, obedit, loc, rot, mat);
@@ -744,7 +841,7 @@ static int object_armature_add_exec(bContext *C, wmOperator *op)
newob = true;
}
else {
- DAG_id_tag_update(&obedit->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&obedit->id, OB_RECALC_DATA);
}
if (obedit == NULL) {
@@ -1002,7 +1099,8 @@ static int group_instance_add_exec(bContext *C, wmOperator *op)
id_us_plus(&group->id);
/* works without this except if you try render right after, see: 22027 */
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
+ DEG_id_tag_update(&group->id, 0);
WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, scene);
@@ -1109,22 +1207,21 @@ static void object_delete_check_glsl_update(Object *ob)
/* remove base from a specific scene */
/* note: now unlinks constraints as well */
-void ED_base_object_free_and_unlink(Main *bmain, Scene *scene, Base *base)
+void ED_object_base_free_and_unlink(Main *bmain, Scene *scene, Object *ob)
{
- if (BKE_library_ID_is_indirectly_used(bmain, base->object) &&
- ID_REAL_USERS(base->object) <= 1 && ID_EXTRA_USERS(base->object) == 0)
+ if (BKE_library_ID_is_indirectly_used(bmain, ob) &&
+ ID_REAL_USERS(ob) <= 1 && ID_EXTRA_USERS(ob) == 0)
{
/* We cannot delete indirectly used object... */
printf("WARNING, undeletable object '%s', should have been catched before reaching this function!",
- base->object->id.name + 2);
+ ob->id.name + 2);
return;
}
- BKE_scene_base_unlink(scene, base);
- object_delete_check_glsl_update(base->object);
- BKE_libblock_free_us(bmain, base->object);
- MEM_freeN(base);
- DAG_id_type_tag(bmain, ID_OB);
+ DEG_id_tag_update_ex(bmain, &ob->id, DEG_TAG_BASE_FLAGS_UPDATE);
+
+ object_delete_check_glsl_update(ob);
+ BKE_collections_object_remove(bmain, &scene->id, ob, true);
}
static int object_delete_exec(bContext *C, wmOperator *op)
@@ -1139,18 +1236,18 @@ static int object_delete_exec(bContext *C, wmOperator *op)
if (CTX_data_edit_object(C))
return OPERATOR_CANCELLED;
- CTX_DATA_BEGIN (C, Base *, base, selected_bases)
+ CTX_DATA_BEGIN (C, Object *, ob, selected_objects)
{
- const bool is_indirectly_used = BKE_library_ID_is_indirectly_used(bmain, base->object);
- if (base->object->id.tag & LIB_TAG_INDIRECT) {
+ const bool is_indirectly_used = BKE_library_ID_is_indirectly_used(bmain, ob);
+ if (ob->id.tag & LIB_TAG_INDIRECT) {
/* Can this case ever happen? */
- BKE_reportf(op->reports, RPT_WARNING, "Cannot delete indirectly linked object '%s'", base->object->id.name + 2);
+ BKE_reportf(op->reports, RPT_WARNING, "Cannot delete indirectly linked object '%s'", ob->id.name + 2);
continue;
}
- else if (is_indirectly_used && ID_REAL_USERS(base->object) <= 1 && ID_EXTRA_USERS(base->object) == 0) {
+ else if (is_indirectly_used && ID_REAL_USERS(ob) <= 1 && ID_EXTRA_USERS(ob) == 0) {
BKE_reportf(op->reports, RPT_WARNING,
"Cannot delete object '%s' from scene '%s', indirectly used objects need at least one user",
- base->object->id.name + 2, scene->id.name + 2);
+ ob->id.name + 2, scene->id.name + 2);
continue;
}
@@ -1158,9 +1255,9 @@ static int object_delete_exec(bContext *C, wmOperator *op)
* custom scene/object/base handling, and use generic lib remap/query for that.
* But this is for later (aka 2.8, once layers & co are settled and working).
*/
- if (use_global && base->object->id.lib == NULL) {
+ if (use_global && ob->id.lib == NULL) {
/* We want to nuke the object, let's nuke it the easy way (not for linked data though)... */
- BKE_libblock_delete(bmain, &base->object->id);
+ BKE_libblock_delete(bmain, &ob->id);
changed = true;
continue;
}
@@ -1171,38 +1268,28 @@ static int object_delete_exec(bContext *C, wmOperator *op)
for (bGPdata *gpd = bmain->gpencil.first; gpd; gpd = gpd->id.next) {
for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
if (gpl->parent != NULL) {
- Object *ob = gpl->parent;
- Object *curob = base->object;
- if (ob == curob) {
+ if (gpl->parent == ob) {
gpl->parent = NULL;
}
}
}
}
- /* deselect object -- it could be used in other scenes */
- base->object->flag &= ~SELECT;
-
/* remove from current scene only */
- ED_base_object_free_and_unlink(bmain, scene, base);
+ ED_object_base_free_and_unlink(bmain, scene, ob);
changed = true;
if (use_global) {
Scene *scene_iter;
- Base *base_other;
-
for (scene_iter = bmain->scene.first; scene_iter; scene_iter = scene_iter->id.next) {
if (scene_iter != scene && !ID_IS_LINKED(scene_iter)) {
- base_other = BKE_scene_base_find(scene_iter, base->object);
- if (base_other) {
- if (is_indirectly_used && ID_REAL_USERS(base->object) <= 1 && ID_EXTRA_USERS(base->object) == 0) {
- BKE_reportf(op->reports, RPT_WARNING,
- "Cannot delete object '%s' from scene '%s', indirectly used objects need at least one user",
- base->object->id.name + 2, scene_iter->id.name + 2);
- break;
- }
- ED_base_object_free_and_unlink(bmain, scene_iter, base_other);
+ if (is_indirectly_used && ID_REAL_USERS(ob) <= 1 && ID_EXTRA_USERS(ob) == 0) {
+ BKE_reportf(op->reports, RPT_WARNING,
+ "Cannot delete object '%s' from scene '%s', indirectly used objects need at least one user",
+ ob->id.name + 2, scene_iter->id.name + 2);
+ break;
}
+ ED_object_base_free_and_unlink(bmain, scene_iter, ob);
}
}
}
@@ -1216,12 +1303,12 @@ static int object_delete_exec(bContext *C, wmOperator *op)
/* delete has to handle all open scenes */
BKE_main_id_tag_listbase(&bmain->scene, LIB_TAG_DOIT, true);
for (win = wm->windows.first; win; win = win->next) {
- scene = win->screen->scene;
-
+ scene = WM_window_get_active_scene(win);
+
if (scene->id.tag & LIB_TAG_DOIT) {
scene->id.tag &= ~LIB_TAG_DOIT;
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, scene);
WM_event_add_notifier(C, NC_SCENE | ND_LAYER_CONTENT, scene);
@@ -1343,6 +1430,7 @@ static void make_object_duplilist_real(bContext *C, Scene *scene, Base *base,
const bool use_hierarchy)
{
Main *bmain = CTX_data_main(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
ListBase *lb_duplis;
DupliObject *dob;
GHash *dupli_gh, *parent_gh = NULL;
@@ -1375,12 +1463,11 @@ static void make_object_duplilist_real(bContext *C, Scene *scene, Base *base,
ob_dst->totcol = 0;
}
- base_dst = MEM_dupallocN(base);
- base_dst->flag &= ~(OB_FROMDUPLI | OB_FROMGROUP);
- ob_dst->flag = base_dst->flag;
- base_dst->lay = base->lay;
- BLI_addhead(&scene->base, base_dst); /* addhead: othwise eternal loop */
- base_dst->object = ob_dst;
+ BKE_collection_object_add_from(scene, base->object, ob_dst);
+ base_dst = BKE_view_layer_base_find(view_layer, ob_dst);
+ BLI_assert(base_dst != NULL);
+
+ BKE_scene_object_base_flag_sync_from_base(base_dst);
/* make sure apply works */
BKE_animdata_free(&ob_dst->id, true);
@@ -1395,7 +1482,6 @@ static void make_object_duplilist_real(bContext *C, Scene *scene, Base *base,
BKE_constraints_free(&ob_dst->constraints);
ob_dst->curve_cache = NULL;
ob_dst->transflag &= ~OB_DUPLI;
- ob_dst->lay = base->lay;
copy_m4_m4(ob_dst->obmat, dob->mat);
BKE_object_apply_mat4(ob_dst, ob_dst->obmat, false, false);
@@ -1419,7 +1505,7 @@ static void make_object_duplilist_real(bContext *C, Scene *scene, Base *base,
BKE_libblock_relink_to_newid(&ob_dst->id);
set_sca_new_poins_ob(ob_dst);
- DAG_id_tag_update(&ob_dst->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob_dst->id, OB_RECALC_DATA);
if (use_hierarchy) {
/* original parents */
@@ -1473,7 +1559,7 @@ static void make_object_duplilist_real(bContext *C, Scene *scene, Base *base,
BKE_object_apply_mat4(ob_dst, dob->mat, false, true);
/* to set ob_dst->orig and in case theres any other discrepicies */
- DAG_id_tag_update(&ob_dst->id, OB_RECALC_OB);
+ DEG_id_tag_update(&ob_dst->id, OB_RECALC_OB);
}
}
@@ -1482,7 +1568,7 @@ static void make_object_duplilist_real(bContext *C, Scene *scene, Base *base,
if (ob->proxy_group == base->object) {
ob->proxy = NULL;
ob->proxy_from = NULL;
- DAG_id_tag_update(&ob->id, OB_RECALC_OB);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB);
}
}
}
@@ -1518,7 +1604,7 @@ static int object_duplicates_make_real_exec(bContext *C, wmOperator *op)
}
CTX_DATA_END;
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
WM_event_add_notifier(C, NC_SCENE, scene);
WM_main_add_notifier(NC_OBJECT | ND_DRAW, NULL);
@@ -1552,14 +1638,14 @@ static const EnumPropertyItem convert_target_items[] = {
{0, NULL, 0, NULL, NULL}
};
-static void convert_ensure_curve_cache(Main *bmain, Scene *scene, Object *ob)
+static void convert_ensure_curve_cache(EvaluationContext *eval_ctx, Main *bmain, Scene *scene, Object *ob)
{
if (ob->curve_cache == NULL) {
/* Force creation. This is normally not needed but on operator
* redo we might end up with an object which isn't evaluated yet.
*/
if (ELEM(ob->type, OB_SURF, OB_CURVE, OB_FONT)) {
- BKE_displist_make_curveTypes(scene, ob, false);
+ BKE_displist_make_curveTypes(eval_ctx, scene, ob, false);
}
else if (ob->type == OB_MBALL) {
BKE_displist_make_mball(bmain->eval_ctx, scene, ob);
@@ -1567,9 +1653,9 @@ static void convert_ensure_curve_cache(Main *bmain, Scene *scene, Object *ob)
}
}
-static void curvetomesh(Main *bmain, Scene *scene, Object *ob)
+static void curvetomesh(EvaluationContext *eval_ctx, Main *bmain, Scene *scene, Object *ob)
{
- convert_ensure_curve_cache(bmain, scene, ob);
+ convert_ensure_curve_cache(eval_ctx, bmain, scene, ob);
BKE_mesh_from_nurbs(ob); /* also does users */
if (ob->type == OB_MESH) {
@@ -1583,15 +1669,16 @@ static void curvetomesh(Main *bmain, Scene *scene, Object *ob)
static int convert_poll(bContext *C)
{
- Object *obact = CTX_data_active_object(C);
Scene *scene = CTX_data_scene(C);
+ Base *base_act = CTX_data_active_base(C);
+ Object *obact = base_act ? base_act->object : NULL;
return (!ID_IS_LINKED(scene) && obact && scene->obedit != obact &&
- (obact->flag & SELECT) && !ID_IS_LINKED(obact));
+ (base_act->flag & BASE_SELECTED) && !ID_IS_LINKED(obact));
}
/* Helper for convert_exec */
-static Base *duplibase_for_convert(Main *bmain, Scene *scene, Base *base, Object *ob)
+static Base *duplibase_for_convert(Main *bmain, Scene *scene, ViewLayer *view_layer, Base *base, Object *ob)
{
Object *obn;
Base *basen;
@@ -1601,17 +1688,12 @@ static Base *duplibase_for_convert(Main *bmain, Scene *scene, Base *base, Object
}
obn = BKE_object_copy(bmain, ob);
- DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
-
- basen = MEM_mallocN(sizeof(Base), "duplibase");
- *basen = *base;
- BLI_addhead(&scene->base, basen); /* addhead: otherwise eternal loop */
- basen->object = obn;
- basen->flag |= SELECT;
- obn->flag |= SELECT;
- base->flag &= ~SELECT;
- ob->flag &= ~SELECT;
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+ BKE_collection_object_add_from(scene, ob, obn);
+ basen = BKE_view_layer_base_find(view_layer, obn);
+ ED_object_base_select(basen, BA_SELECT);
+ ED_object_base_select(basen, BA_DESELECT);
return basen;
}
@@ -1619,8 +1701,10 @@ static int convert_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ EvaluationContext eval_ctx;
Base *basen = NULL, *basact = NULL;
- Object *ob, *ob1, *newob, *obact = CTX_data_active_object(C);
+ Object *ob1, *newob, *obact = CTX_data_active_object(C);
DerivedMesh *dm;
Curve *cu;
Nurb *nu;
@@ -1630,13 +1714,13 @@ static int convert_exec(bContext *C, wmOperator *op)
bool keep_original = RNA_boolean_get(op->ptr, "keep_original");
int a, mballConverted = 0;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
/* don't forget multiple users! */
{
- Base *base;
-
- for (base = scene->base.first; base; base = base->next) {
- ob = base->object;
+ FOREACH_SCENE_OBJECT(scene, ob)
+ {
ob->flag &= ~OB_DONE;
/* flag data thats not been edited (only needed for !keep_original) */
@@ -1655,6 +1739,7 @@ static int convert_exec(bContext *C, wmOperator *op)
}
}
}
+ FOREACH_SCENE_OBJECT_END
}
ListBase selected_editable_bases = CTX_data_collection_get(C, "selected_editable_bases");
@@ -1665,7 +1750,7 @@ static int convert_exec(bContext *C, wmOperator *op)
{
for (CollectionPointerLink *link = selected_editable_bases.first; link; link = link->next) {
Base *base = link->ptr.data;
- ob = base->object;
+ Object *ob = base->object;
/* The way object type conversion works currently (enforcing conversion of *all* objetcs using converted
* obdata, even some un-selected/hidden/inother scene ones, sounds totally bad to me.
@@ -1678,18 +1763,19 @@ static int convert_exec(bContext *C, wmOperator *op)
"Converting some linked object/object data, enforcing 'Keep Original' option to True");
}
- DAG_id_tag_update(&base->object->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&base->object->id, OB_RECALC_DATA);
}
+ Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true);
uint64_t customdata_mask_prev = scene->customdata_mask;
scene->customdata_mask |= CD_MASK_MESH;
- BKE_scene_update_tagged(bmain->eval_ctx, bmain, scene);
+ BKE_scene_graph_update_tagged(bmain->eval_ctx, depsgraph, bmain, scene, view_layer);
scene->customdata_mask = customdata_mask_prev;
}
for (CollectionPointerLink *link = selected_editable_bases.first; link; link = link->next) {
Base *base = link->ptr.data;
- ob = base->object;
+ Object *ob = base->object;
if (ob->flag & OB_DONE || !IS_TAGGED(ob->data)) {
if (ob->type != target) {
@@ -1710,7 +1796,7 @@ static int convert_exec(bContext *C, wmOperator *op)
ob->flag |= OB_DONE;
if (keep_original) {
- basen = duplibase_for_convert(bmain, scene, base, NULL);
+ basen = duplibase_for_convert(bmain, scene, view_layer, base, NULL);
newob = basen->object;
/* decrement original mesh's usage count */
@@ -1724,7 +1810,7 @@ static int convert_exec(bContext *C, wmOperator *op)
newob = ob;
}
- BKE_mesh_to_curve(scene, newob);
+ BKE_mesh_to_curve(&eval_ctx, scene, newob);
if (newob->type == OB_CURVE) {
BKE_object_free_modifiers(newob); /* after derivedmesh calls! */
@@ -1735,7 +1821,7 @@ static int convert_exec(bContext *C, wmOperator *op)
ob->flag |= OB_DONE;
if (keep_original) {
- basen = duplibase_for_convert(bmain, scene, base, NULL);
+ basen = duplibase_for_convert(bmain, scene, view_layer, base, NULL);
newob = basen->object;
/* decrement original mesh's usage count */
@@ -1747,14 +1833,14 @@ static int convert_exec(bContext *C, wmOperator *op)
}
else {
newob = ob;
- DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
}
/* make new mesh data from the original copy */
/* note: get the mesh from the original, not from the copy in some
* cases this doesnt give correct results (when MDEF is used for eg)
*/
- dm = mesh_get_derived_final(scene, newob, CD_MASK_MESH);
+ dm = mesh_get_derived_final(&eval_ctx, scene, newob, CD_MASK_MESH);
DM_to_mesh(dm, newob->data, newob, CD_MASK_MESH, true);
@@ -1766,7 +1852,7 @@ static int convert_exec(bContext *C, wmOperator *op)
ob->flag |= OB_DONE;
if (keep_original) {
- basen = duplibase_for_convert(bmain, scene, base, NULL);
+ basen = duplibase_for_convert(bmain, scene, view_layer, base, NULL);
newob = basen->object;
/* decrement original curve's usage count */
@@ -1813,7 +1899,7 @@ static int convert_exec(bContext *C, wmOperator *op)
for (ob1 = bmain->object.first; ob1; ob1 = ob1->id.next) {
if (ob1->data == ob->data) {
ob1->type = OB_CURVE;
- DAG_id_tag_update(&ob1->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+ DEG_id_tag_update(&ob1->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
}
}
}
@@ -1826,7 +1912,7 @@ static int convert_exec(bContext *C, wmOperator *op)
BKE_curve_curve_dimension_update(cu);
if (target == OB_MESH) {
- curvetomesh(bmain, scene, newob);
+ curvetomesh(&eval_ctx, bmain, scene, newob);
/* meshes doesn't use displist */
BKE_object_free_curve_cache(newob);
@@ -1837,7 +1923,7 @@ static int convert_exec(bContext *C, wmOperator *op)
if (target == OB_MESH) {
if (keep_original) {
- basen = duplibase_for_convert(bmain, scene, base, NULL);
+ basen = duplibase_for_convert(bmain, scene, view_layer, base, NULL);
newob = basen->object;
/* decrement original curve's usage count */
@@ -1850,7 +1936,7 @@ static int convert_exec(bContext *C, wmOperator *op)
newob = ob;
}
- curvetomesh(bmain, scene, newob);
+ curvetomesh(&eval_ctx, bmain, scene, newob);
/* meshes doesn't use displist */
BKE_object_free_curve_cache(newob);
@@ -1859,8 +1945,8 @@ static int convert_exec(bContext *C, wmOperator *op)
else if (ob->type == OB_MBALL && target == OB_MESH) {
Object *baseob;
- base->flag &= ~SELECT;
- ob->flag &= ~SELECT;
+ base->flag &= ~BASE_SELECTED;
+ ob->base_flag &= ~BASE_SELECTED;
baseob = BKE_mball_basis_find(scene, ob);
@@ -1872,7 +1958,7 @@ static int convert_exec(bContext *C, wmOperator *op)
if (!(baseob->flag & OB_DONE)) {
baseob->flag |= OB_DONE;
- basen = duplibase_for_convert(bmain, scene, base, baseob);
+ basen = duplibase_for_convert(bmain, scene, view_layer, base, baseob);
newob = basen->object;
mb = newob->data;
@@ -1888,7 +1974,7 @@ static int convert_exec(bContext *C, wmOperator *op)
for (a = 0; a < newob->totcol; a++) id_us_plus((ID *)me->mat[a]);
}
- convert_ensure_curve_cache(bmain, scene, baseob);
+ convert_ensure_curve_cache(&eval_ctx, bmain, scene, baseob);
BKE_mesh_from_metaball(&baseob->curve_cache->disp, newob->data);
if (obact->type == OB_MBALL) {
@@ -1915,7 +2001,7 @@ static int convert_exec(bContext *C, wmOperator *op)
}
if (!keep_original && (ob->flag & OB_DONE)) {
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
((ID *)ob->data)->tag &= ~LIB_TAG_DOIT; /* flag not to convert this datablock again */
}
}
@@ -1923,27 +2009,24 @@ static int convert_exec(bContext *C, wmOperator *op)
if (!keep_original) {
if (mballConverted) {
- Base *base, *base_next;
-
- for (base = scene->base.first; base; base = base_next) {
- base_next = base->next;
-
- ob = base->object;
- if (ob->type == OB_MBALL) {
- if (ob->flag & OB_DONE) {
+ FOREACH_SCENE_OBJECT(scene, ob_mball)
+ {
+ if (ob_mball->type == OB_MBALL) {
+ if (ob_mball->flag & OB_DONE) {
Object *ob_basis = NULL;
- if (BKE_mball_is_basis(ob) ||
- ((ob_basis = BKE_mball_basis_find(scene, ob)) && (ob_basis->flag & OB_DONE)))
+ if (BKE_mball_is_basis(ob_mball) ||
+ ((ob_basis = BKE_mball_basis_find(scene, ob_mball)) && (ob_basis->flag & OB_DONE)))
{
- ED_base_object_free_and_unlink(bmain, scene, base);
+ ED_object_base_free_and_unlink(bmain, scene, ob_mball);
}
}
}
}
+ FOREACH_SCENE_OBJECT_END
}
/* delete object should renew depsgraph */
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
}
// XXX ED_object_editmode_enter(C, 0);
@@ -1951,15 +2034,15 @@ static int convert_exec(bContext *C, wmOperator *op)
if (basact) {
/* active base was changed */
- ED_base_object_activate(C, basact);
- BASACT = basact;
+ ED_object_base_activate(C, basact);
+ BASACT(view_layer) = basact;
}
- else if (BASACT->object->flag & OB_DONE) {
- WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, BASACT->object);
- WM_event_add_notifier(C, NC_OBJECT | ND_DATA, BASACT->object);
+ else if (BASACT(view_layer)->object->flag & OB_DONE) {
+ WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, BASACT(view_layer)->object);
+ WM_event_add_notifier(C, NC_OBJECT | ND_DATA, BASACT(view_layer)->object);
}
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, scene);
WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
@@ -1998,39 +2081,49 @@ void OBJECT_OT_convert(wmOperatorType *ot)
/* used below, assumes id.new is correct */
/* leaves selection of base/object unaltered */
/* Does set ID->newid pointers. */
-static Base *object_add_duplicate_internal(Main *bmain, Scene *scene, Base *base, int dupflag)
+static Base *object_add_duplicate_internal(
+ Main *bmain, Scene *scene,
+ ViewLayer *view_layer, Object *ob, int dupflag)
{
#define ID_NEW_REMAP_US(a) if ( (a)->id.newid) { (a) = (void *)(a)->id.newid; (a)->id.us++; }
#define ID_NEW_REMAP_US2(a) if (((ID *)a)->newid) { (a) = ((ID *)a)->newid; ((ID *)a)->us++; }
- Base *basen = NULL;
+ Base *base, *basen = NULL;
Material ***matarar;
- Object *ob, *obn;
+ Object *obn;
ID *id;
int a, didit;
- ob = base->object;
- if (ob->mode & OB_MODE_POSE) {
+ /* ignore pose mode now, Caller can inspect mode. */
+#if 0
+ if (eval_ctx->object_mode & OB_MODE_POSE) {
; /* nothing? */
}
- else {
+ else
+#endif
+ {
obn = ID_NEW_SET(ob, BKE_object_copy(bmain, ob));
- DAG_id_tag_update(&obn->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+ DEG_id_tag_update(&obn->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
- basen = MEM_mallocN(sizeof(Base), "duplibase");
- *basen = *base;
- BLI_addhead(&scene->base, basen); /* addhead: prevent eternal loop */
- basen->object = obn;
+ base = BKE_view_layer_base_find(view_layer, ob);
+ if ((base != NULL) && (base->flag & BASE_VISIBLED)) {
+ BKE_collection_object_add_from(scene, ob, obn);
+ }
+ else {
+ LayerCollection *layer_collection = BKE_layer_collection_get_active_ensure(scene, view_layer);
+ BKE_collection_object_add(&scene->id, layer_collection->scene_collection, obn);
+ }
+ basen = BKE_view_layer_base_find(view_layer, obn);
/* 1) duplis should end up in same group as the original
* 2) Rigid Body sim participants MUST always be part of a group...
*/
// XXX: is 2) really a good measure here?
- if ((basen->flag & OB_FROMGROUP) || ob->rigidbody_object || ob->rigidbody_constraint) {
+ if ((ob->flag & OB_FROMGROUP) != 0 || ob->rigidbody_object || ob->rigidbody_constraint) {
Group *group;
for (group = bmain->group.first; group; group = group->id.next) {
if (BKE_group_object_exists(group, ob))
- BKE_group_object_add(group, obn, scene, basen);
+ BKE_group_object_add(group, obn);
}
}
@@ -2139,7 +2232,7 @@ static Base *object_add_duplicate_internal(Main *bmain, Scene *scene, Base *base
}
break;
case OB_ARMATURE:
- DAG_id_tag_update(&obn->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&obn->id, OB_RECALC_DATA);
if (obn->pose)
BKE_pose_tag_recalc(bmain, obn->pose);
if (dupflag & USER_DUP_ARM) {
@@ -2243,14 +2336,14 @@ static Base *object_add_duplicate_internal(Main *bmain, Scene *scene, Base *base
* note: don't call this within a loop since clear_* funcs loop over the entire database.
* note: caller must do DAG_relations_tag_update(bmain);
* this is not done automatic since we may duplicate many objects in a batch */
-Base *ED_object_add_duplicate(Main *bmain, Scene *scene, Base *base, int dupflag)
+Base *ED_object_add_duplicate(Main *bmain, Scene *scene, ViewLayer *view_layer, Base *base, int dupflag)
{
Base *basen;
Object *ob;
clear_sca_new_poins(); /* BGE logic */
- basen = object_add_duplicate_internal(bmain, scene, base, dupflag);
+ basen = object_add_duplicate_internal(bmain, scene, view_layer, base->object, dupflag);
if (basen == NULL) {
return NULL;
}
@@ -2263,8 +2356,8 @@ Base *ED_object_add_duplicate(Main *bmain, Scene *scene, Base *base, int dupflag
/* DAG_relations_tag_update(bmain); */ /* caller must do */
- if (ob->data) {
- ED_render_id_flush_update(bmain, ob->data);
+ if (ob->data != NULL) {
+ DEG_id_tag_update_ex(bmain, (ID *)ob->data, DEG_TAG_EDITORS_UPDATE);
}
BKE_main_id_clear_newpoins(bmain);
@@ -2277,6 +2370,7 @@ static int duplicate_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
const bool linked = RNA_boolean_get(op->ptr, "linked");
int dupflag = (linked) ? 0 : U.dupflag;
@@ -2284,22 +2378,23 @@ static int duplicate_exec(bContext *C, wmOperator *op)
CTX_DATA_BEGIN (C, Base *, base, selected_bases)
{
- Base *basen = object_add_duplicate_internal(bmain, scene, base, dupflag);
+ Base *basen = object_add_duplicate_internal(bmain, scene, view_layer, base->object, dupflag);
/* note that this is safe to do with this context iterator,
* the list is made in advance */
- ED_base_object_select(base, BA_DESELECT);
+ ED_object_base_select(base, BA_DESELECT);
+ ED_object_base_select(basen, BA_SELECT);
if (basen == NULL) {
continue;
}
/* new object becomes active */
- if (BASACT == base)
- ED_base_object_activate(C, basen);
+ if (BASACT(view_layer) == base)
+ ED_object_base_activate(C, basen);
if (basen->object->data) {
- DAG_id_tag_update(basen->object->data, 0);
+ DEG_id_tag_update(basen->object->data, 0);
}
}
CTX_DATA_END;
@@ -2308,7 +2403,9 @@ static int duplicate_exec(bContext *C, wmOperator *op)
BKE_main_id_clear_newpoins(bmain);
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
+ /* TODO(sergey): Use proper flag for tagging here. */
+ DEG_id_tag_update(&CTX_data_scene(C)->id, 0);
WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
@@ -2344,9 +2441,9 @@ static int add_named_exec(bContext *C, wmOperator *op)
wmWindow *win = CTX_wm_window(C);
const wmEvent *event = win ? win->eventstate : NULL;
Main *bmain = CTX_data_main(C);
- View3D *v3d = CTX_wm_view3d(C); /* may be NULL */
Scene *scene = CTX_data_scene(C);
- Base *basen, *base;
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Base *basen;
Object *ob;
const bool linked = RNA_boolean_get(op->ptr, "linked");
int dupflag = (linked) ? 0 : U.dupflag;
@@ -2361,22 +2458,17 @@ static int add_named_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
- base = MEM_callocN(sizeof(Base), "duplibase");
- base->object = ob;
- base->flag = ob->flag;
-
/* prepare dupli */
clear_sca_new_poins(); /* BGE logic */
- basen = object_add_duplicate_internal(bmain, scene, base, dupflag);
+ basen = object_add_duplicate_internal(bmain, scene, view_layer, ob, dupflag);
if (basen == NULL) {
- MEM_freeN(base);
BKE_report(op->reports, RPT_ERROR, "Object could not be duplicated");
return OPERATOR_CANCELLED;
}
- basen->lay = basen->object->lay = BKE_screen_view3d_layer_active(v3d, scene);
+ BKE_scene_object_base_flag_sync_from_object(basen);
basen->object->restrictflag &= ~OB_RESTRICT_VIEW;
if (event) {
@@ -2387,16 +2479,15 @@ static int add_named_exec(bContext *C, wmOperator *op)
ED_view3d_cursor3d_position(C, basen->object->loc, mval);
}
- ED_base_object_select(basen, BA_SELECT);
- ED_base_object_activate(C, basen);
+ ED_object_base_select(basen, BA_SELECT);
+ ED_object_base_activate(C, basen);
copy_object_set_idnew(C);
BKE_main_id_clear_newpoins(bmain);
- DAG_relations_tag_update(bmain);
-
- MEM_freeN(base);
+ /* TODO(sergey): Only update relations for the current scene. */
+ DEG_relations_tag_update(bmain);
WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, scene);
diff --git a/source/blender/editors/object/object_bake.c b/source/blender/editors/object/object_bake.c
index 11d96da5786..3c0c083dbd7 100644
--- a/source/blender/editors/object/object_bake.c
+++ b/source/blender/editors/object/object_bake.c
@@ -52,15 +52,17 @@
#include "BKE_global.h"
#include "BKE_image.h"
#include "BKE_main.h"
+#include "BKE_material.h"
#include "BKE_multires.h"
#include "BKE_report.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_modifier.h"
#include "BKE_DerivedMesh.h"
-#include "BKE_depsgraph.h"
#include "BKE_mesh.h"
#include "BKE_scene.h"
+#include "DEG_depsgraph.h"
+
#include "RE_pipeline.h"
#include "RE_shader_ext.h"
#include "RE_multires_bake.h"
@@ -86,6 +88,11 @@
* needed to make job totally thread-safe */
typedef struct MultiresBakerJobData {
struct MultiresBakerJobData *next, *prev;
+ /* material aligned image array (for per-face bake image) */
+ struct {
+ Image **array;
+ int len;
+ } ob_image;
DerivedMesh *lores_dm, *hires_dm;
bool simple;
int lvl, tot_lvl;
@@ -152,7 +159,7 @@ static bool multiresbake_check(bContext *C, wmOperator *op)
break;
}
- if (!me->mtpoly) {
+ if (!me->mloopuv) {
BKE_report(op->reports, RPT_ERROR, "Mesh should be unwrapped before multires data baking");
ok = false;
@@ -160,7 +167,7 @@ static bool multiresbake_check(bContext *C, wmOperator *op)
else {
a = me->totpoly;
while (ok && a--) {
- Image *ima = me->mtpoly[a].tpage;
+ Image *ima = BKE_object_material_edit_image_get(ob, me->mpoly[a].mat_nr);
if (!ima) {
BKE_report(op->reports, RPT_ERROR, "You should have active texture to use multires baker");
@@ -199,7 +206,8 @@ static bool multiresbake_check(bContext *C, wmOperator *op)
return ok;
}
-static DerivedMesh *multiresbake_create_loresdm(Scene *scene, Object *ob, int *lvl)
+static DerivedMesh *multiresbake_create_loresdm(
+ Scene *scene, Object *ob, eObjectMode object_mode, int *lvl)
{
DerivedMesh *dm;
MultiresModifierData *mmd = get_multires_modifier(scene, ob, 0);
@@ -219,13 +227,15 @@ static DerivedMesh *multiresbake_create_loresdm(Scene *scene, Object *ob, int *l
tmp_mmd.lvl = *lvl;
tmp_mmd.sculptlvl = *lvl;
- dm = multires_make_derived_from_derived(cddm, &tmp_mmd, ob, 0);
+ dm = multires_make_derived_from_derived(cddm, &tmp_mmd, ob, 0, object_mode);
cddm->release(cddm);
return dm;
}
-static DerivedMesh *multiresbake_create_hiresdm(Scene *scene, Object *ob, int *lvl, bool *simple)
+static DerivedMesh *multiresbake_create_hiresdm(
+ Scene *scene, Object *ob, eObjectMode object_mode,
+ int *lvl, bool *simple)
{
Mesh *me = (Mesh *)ob->data;
MultiresModifierData *mmd = get_multires_modifier(scene, ob, 0);
@@ -246,7 +256,7 @@ static DerivedMesh *multiresbake_create_hiresdm(Scene *scene, Object *ob, int *l
tmp_mmd.lvl = mmd->totlvl;
tmp_mmd.sculptlvl = mmd->totlvl;
- dm = multires_make_derived_from_derived(cddm, &tmp_mmd, ob, 0);
+ dm = multires_make_derived_from_derived(cddm, &tmp_mmd, ob, 0, object_mode);
cddm->release(cddm);
return dm;
@@ -283,26 +293,34 @@ static void clear_single_image(Image *image, ClearFlag flag)
}
}
-static void clear_images_poly(MTexPoly *mtpoly, int totpoly, ClearFlag flag)
+static void clear_images_poly(Image **ob_image_array, int ob_image_array_len, ClearFlag flag)
{
- int a;
-
- for (a = 0; a < totpoly; a++) {
- mtpoly[a].tpage->id.tag &= ~LIB_TAG_DOIT;
+ for (int i = 0; i < ob_image_array_len; i++) {
+ Image *image = ob_image_array[i];
+ if (image) {
+ image->id.tag &= ~LIB_TAG_DOIT;
+ }
}
- for (a = 0; a < totpoly; a++) {
- clear_single_image(mtpoly[a].tpage, flag);
+ for (int i = 0; i < ob_image_array_len; i++) {
+ Image *image = ob_image_array[i];
+ if (image) {
+ clear_single_image(image, flag);
+ }
}
- for (a = 0; a < totpoly; a++) {
- mtpoly[a].tpage->id.tag &= ~LIB_TAG_DOIT;
+ for (int i = 0; i < ob_image_array_len; i++) {
+ Image *image = ob_image_array[i];
+ if (image) {
+ image->id.tag &= ~LIB_TAG_DOIT;
+ }
}
}
static int multiresbake_image_exec_locked(bContext *C, wmOperator *op)
{
Object *ob;
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Scene *scene = CTX_data_scene(C);
int objects_baked = 0;
@@ -312,11 +330,10 @@ static int multiresbake_image_exec_locked(bContext *C, wmOperator *op)
if (scene->r.bake_flag & R_BAKE_CLEAR) { /* clear images */
CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases)
{
- Mesh *me;
ClearFlag clear_flag = 0;
ob = base->object;
- me = (Mesh *)ob->data;
+ // me = (Mesh *)ob->data;
if (scene->r.bake_mode == RE_BAKE_NORMALS) {
clear_flag = CLEAR_TANGENT_NORMAL;
@@ -325,7 +342,11 @@ static int multiresbake_image_exec_locked(bContext *C, wmOperator *op)
clear_flag = CLEAR_DISPLACEMENT;
}
- clear_images_poly(me->mtpoly, me->totpoly, clear_flag);
+ {
+ Image **ob_image_array = BKE_object_material_edit_image_get_array(ob);
+ clear_images_poly(ob_image_array, ob->totcol, clear_flag);
+ MEM_freeN(ob_image_array);
+ }
}
CTX_DATA_END;
}
@@ -351,11 +372,16 @@ static int multiresbake_image_exec_locked(bContext *C, wmOperator *op)
//bkr.reports= op->reports;
/* create low-resolution DM (to bake to) and hi-resolution DM (to bake from) */
- bkr.hires_dm = multiresbake_create_hiresdm(scene, ob, &bkr.tot_lvl, &bkr.simple);
- bkr.lores_dm = multiresbake_create_loresdm(scene, ob, &bkr.lvl);
+ bkr.ob_image.array = BKE_object_material_edit_image_get_array(ob);
+ bkr.ob_image.len = ob->totcol;
+
+ bkr.hires_dm = multiresbake_create_hiresdm(scene, ob, workspace->object_mode, &bkr.tot_lvl, &bkr.simple);
+ bkr.lores_dm = multiresbake_create_loresdm(scene, ob, workspace->object_mode, &bkr.lvl);
RE_multires_bake_images(&bkr);
+ MEM_freeN(bkr.ob_image.array);
+
BLI_freelistN(&bkr.image);
bkr.lores_dm->release(bkr.lores_dm);
@@ -374,6 +400,7 @@ static int multiresbake_image_exec_locked(bContext *C, wmOperator *op)
/* Multiresbake adopted for job-system executing */
static void init_multiresbake_job(bContext *C, MultiresBakeJob *bkj)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Scene *scene = CTX_data_scene(C);
Object *ob;
@@ -401,9 +428,12 @@ static void init_multiresbake_job(bContext *C, MultiresBakeJob *bkj)
data = MEM_callocN(sizeof(MultiresBakerJobData), "multiresBaker derivedMesh_data");
+ data->ob_image.array = BKE_object_material_edit_image_get_array(ob);
+ data->ob_image.len = ob->totcol;
+
/* create low-resolution DM (to bake to) and hi-resolution DM (to bake from) */
- data->hires_dm = multiresbake_create_hiresdm(scene, ob, &data->tot_lvl, &data->simple);
- data->lores_dm = multiresbake_create_loresdm(scene, ob, &lvl);
+ data->hires_dm = multiresbake_create_hiresdm(scene, ob, workspace->object_mode, &data->tot_lvl, &data->simple);
+ data->lores_dm = multiresbake_create_loresdm(scene, ob, workspace->object_mode, &lvl);
data->lvl = lvl;
BLI_addtail(&bkj->data, data);
@@ -421,8 +451,6 @@ static void multiresbake_startjob(void *bkv, short *stop, short *do_update, floa
if (bkj->bake_clear) { /* clear images */
for (data = bkj->data.first; data; data = data->next) {
- DerivedMesh *dm = data->lores_dm;
- MTexPoly *mtexpoly = CustomData_get_layer(&dm->polyData, CD_MTEXPOLY);
ClearFlag clear_flag = 0;
if (bkj->mode == RE_BAKE_NORMALS) {
@@ -432,7 +460,7 @@ static void multiresbake_startjob(void *bkv, short *stop, short *do_update, floa
clear_flag = CLEAR_DISPLACEMENT;
}
- clear_images_poly(mtexpoly, dm->getNumPolys(dm), clear_flag);
+ clear_images_poly(data->ob_image.array, data->ob_image.len, clear_flag);
}
}
@@ -445,6 +473,8 @@ static void multiresbake_startjob(void *bkv, short *stop, short *do_update, floa
bkr.use_lores_mesh = bkj->use_lores_mesh;
bkr.user_scale = bkj->user_scale;
//bkr.reports = bkj->reports;
+ bkr.ob_image.array = data->ob_image.array;
+ bkr.ob_image.len = data->ob_image.len;
/* create low-resolution DM (to bake to) and hi-resolution DM (to bake from) */
bkr.lores_dm = data->lores_dm;
@@ -493,6 +523,8 @@ static void multiresbake_freejob(void *bkv)
GPU_free_image(ima);
}
+ MEM_freeN(data->ob_image.array);
+
BLI_freelistN(&data->images);
MEM_freeN(data);
@@ -589,6 +621,7 @@ static int test_bake_internal(bContext *C, ReportList *reports)
static void init_bake_internal(BakeRender *bkr, bContext *C)
{
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
bScreen *sc = CTX_wm_screen(C);
/* get editmode results */
@@ -597,7 +630,7 @@ static void init_bake_internal(BakeRender *bkr, bContext *C)
bkr->sa = sc ? BKE_screen_find_big_area(sc, SPACE_IMAGE, 10) : NULL; /* can be NULL */
bkr->main = CTX_data_main(C);
bkr->scene = scene;
- bkr->actob = (scene->r.bake_flag & R_BAKE_TO_ACTIVE) ? OBACT : NULL;
+ bkr->actob = (scene->r.bake_flag & R_BAKE_TO_ACTIVE) ? OBACT(view_layer) : NULL;
bkr->re = RE_NewRender("_Bake View_");
if (scene->r.bake_mode == RE_BAKE_AO) {
@@ -661,7 +694,7 @@ static void finish_bake_internal(BakeRender *bkr)
}
BKE_image_release_ibuf(ima, ibuf, NULL);
- DAG_id_tag_update(&ima->id, 0);
+ DEG_id_tag_update(&ima->id, 0);
}
}
@@ -671,7 +704,7 @@ static void finish_bake_internal(BakeRender *bkr)
BLI_assert(BLI_thread_is_main());
for (me = G.main->mesh.first; me; me = me->id.next) {
if (me->id.tag & LIB_TAG_DOIT) {
- DAG_id_tag_update(&me->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&me->id, OB_RECALC_DATA);
BKE_mesh_tessface_clear(me);
}
}
@@ -810,6 +843,7 @@ static int bake_image_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
int result = OPERATOR_CANCELLED;
if (is_multires_bake(scene)) {
@@ -829,7 +863,7 @@ static int bake_image_exec(bContext *C, wmOperator *op)
RE_test_break_cb(bkr.re, NULL, thread_break);
G.is_break = false; /* BKE_blender_test_break uses this global */
- RE_Database_Baking(bkr.re, bmain, scene, scene->lay, scene->r.bake_mode, (scene->r.bake_flag & R_BAKE_TO_ACTIVE) ? OBACT : NULL);
+ RE_Database_Baking(bkr.re, bmain, scene, scene->lay, scene->r.bake_mode, (scene->r.bake_flag & R_BAKE_TO_ACTIVE) ? OBACT(view_layer) : NULL);
/* baking itself is threaded, cannot use test_break in threads */
BLI_init_threads(&threads, do_bake_render, 1);
diff --git a/source/blender/editors/object/object_bake_api.c b/source/blender/editors/object/object_bake_api.c
index c78b9b37da1..c8bcc9224e9 100644
--- a/source/blender/editors/object/object_bake_api.c
+++ b/source/blender/editors/object/object_bake_api.c
@@ -57,7 +57,8 @@
#include "BKE_modifier.h"
#include "BKE_mesh.h"
#include "BKE_screen.h"
-#include "BKE_depsgraph.h"
+
+#include "DEG_depsgraph.h"
#include "RE_engine.h"
#include "RE_pipeline.h"
@@ -83,6 +84,7 @@ static void bake_set_props(wmOperator *op, Scene *scene);
typedef struct BakeAPIRender {
Object *ob;
Main *main;
+ Depsgraph *depsgraph;
Scene *scene;
ReportList *reports;
ListBase selected_objects;
@@ -272,7 +274,7 @@ static void refresh_images(BakeImages *bake_images)
Image *ima = bake_images->data[i].image;
if (ima->ok == IMA_OK_LOADED) {
GPU_free_image(ima);
- DAG_id_tag_update(&ima->id, 0);
+ DEG_id_tag_update(&ima->id, 0);
}
}
}
@@ -619,11 +621,11 @@ static size_t initialize_internal_images(BakeImages *bake_images, ReportList *re
}
/* create new mesh with edit mode changes and modifiers applied */
-static Mesh *bake_mesh_new_from_object(Main *bmain, Scene *scene, Object *ob)
+static Mesh *bake_mesh_new_from_object(EvaluationContext *eval_ctx, Main *bmain, Scene *scene, Object *ob)
{
ED_object_editmode_load(ob);
- Mesh *me = BKE_mesh_new_from_object(bmain, scene, ob, 1, 2, 0, 0);
+ Mesh *me = BKE_mesh_new_from_object(eval_ctx, bmain, scene, ob, 1, 2, 0, 0);
if (me->flag & ME_AUTOSMOOTH) {
BKE_mesh_split_faces(me, true);
}
@@ -632,7 +634,7 @@ static Mesh *bake_mesh_new_from_object(Main *bmain, Scene *scene, Object *ob)
}
static int bake(
- Render *re, Main *bmain, Scene *scene, Object *ob_low, ListBase *selected_objects, ReportList *reports,
+ Render *re, Main *bmain, Depsgraph *graph, Scene *scene, Object *ob_low, ListBase *selected_objects, ReportList *reports,
const eScenePassType pass_type, const int pass_filter, const int margin,
const eBakeSaveMode save_mode, const bool is_clear, const bool is_split_materials,
const bool is_automatic_name, const bool is_selected_to_active, const bool is_cage,
@@ -671,7 +673,7 @@ static int bake(
size_t num_pixels;
int tot_materials;
- RE_bake_engine_set_engine_parameters(re, bmain, scene);
+ RE_bake_engine_set_engine_parameters(re, bmain, graph, scene);
if (!RE_bake_has_engine(re)) {
BKE_report(reports, RPT_ERROR, "Current render engine does not support baking");
@@ -782,7 +784,7 @@ static int bake(
}
/* get the mesh as it arrives in the renderer */
- me_low = bake_mesh_new_from_object(bmain, scene, ob_low);
+ me_low = bake_mesh_new_from_object(RE_GetEvalCtx(re), bmain, scene, ob_low);
/* populate the pixel array with the face data */
if ((is_selected_to_active && (ob_cage == NULL) && is_cage) == false)
@@ -797,7 +799,7 @@ static int bake(
/* prepare cage mesh */
if (ob_cage) {
- me_cage = bake_mesh_new_from_object(bmain, scene, ob_cage);
+ me_cage = bake_mesh_new_from_object(RE_GetEvalCtx(re), bmain, scene, ob_cage);
if ((me_low->totpoly != me_cage->totpoly) || (me_low->totloop != me_cage->totloop)) {
BKE_report(reports, RPT_ERROR,
"Invalid cage object, the cage mesh must have the same number "
@@ -829,7 +831,7 @@ static int bake(
ob_low->modifiers = modifiers_tmp;
/* get the cage mesh as it arrives in the renderer */
- me_cage = bake_mesh_new_from_object(bmain, scene, ob_low);
+ me_cage = bake_mesh_new_from_object(RE_GetEvalCtx(re), bmain, scene, ob_low);
RE_bake_pixels_populate(me_cage, pixel_array_low, num_pixels, &bake_images, uv_layer);
}
@@ -849,13 +851,13 @@ static int bake(
/* triangulating so BVH returns the primitive_id that will be used for rendering */
highpoly[i].tri_mod = ED_object_modifier_add(
- reports, bmain, scene, highpoly[i].ob,
+ reports, bmain, scene, highpoly[i].ob, OB_MODE_OBJECT,
"TmpTriangulate", eModifierType_Triangulate);
tmd = (TriangulateModifierData *)highpoly[i].tri_mod;
tmd->quad_method = MOD_TRIANGULATE_QUAD_FIXED;
tmd->ngon_method = MOD_TRIANGULATE_NGON_EARCLIP;
- highpoly[i].me = bake_mesh_new_from_object(bmain, scene, highpoly[i].ob);
+ highpoly[i].me = bake_mesh_new_from_object(RE_GetEvalCtx(re), bmain, scene, highpoly[i].ob);
highpoly[i].ob->restrictflag &= ~OB_RESTRICT_RENDER;
/* lowpoly to highpoly transformation matrix */
@@ -958,7 +960,7 @@ cage_cleanup:
md->mode &= ~eModifierMode_Render;
}
- me_nores = bake_mesh_new_from_object(bmain, scene, ob_low);
+ me_nores = bake_mesh_new_from_object(RE_GetEvalCtx(re), bmain, scene, ob_low);
RE_bake_pixels_populate(me_nores, pixel_array_low, num_pixels, &bake_images, uv_layer);
RE_bake_normal_world_to_tangent(pixel_array_low, num_pixels, depth, result, me_nores, normal_swizzle, ob_low->obmat);
@@ -1119,6 +1121,7 @@ static void bake_init_api_data(wmOperator *op, bContext *C, BakeAPIRender *bkr)
bkr->ob = CTX_data_active_object(C);
bkr->main = CTX_data_main(C);
+ bkr->depsgraph = CTX_data_depsgraph(C);
bkr->scene = CTX_data_scene(C);
bkr->sa = sc ? BKE_screen_find_big_area(sc, SPACE_IMAGE, 10) : NULL;
@@ -1202,7 +1205,7 @@ static int bake_exec(bContext *C, wmOperator *op)
if (bkr.is_selected_to_active) {
result = bake(
- bkr.render, bkr.main, bkr.scene, bkr.ob, &bkr.selected_objects, bkr.reports,
+ bkr.render, bkr.main, bkr.depsgraph, bkr.scene, bkr.ob, &bkr.selected_objects, bkr.reports,
bkr.pass_type, bkr.pass_filter, bkr.margin, bkr.save_mode,
bkr.is_clear, bkr.is_split_materials, bkr.is_automatic_name, true, bkr.is_cage,
bkr.cage_extrusion, bkr.normal_space, bkr.normal_swizzle,
@@ -1215,7 +1218,7 @@ static int bake_exec(bContext *C, wmOperator *op)
for (link = bkr.selected_objects.first; link; link = link->next) {
Object *ob_iter = link->ptr.data;
result = bake(
- bkr.render, bkr.main, bkr.scene, ob_iter, NULL, bkr.reports,
+ bkr.render, bkr.main, bkr.depsgraph, bkr.scene, ob_iter, NULL, bkr.reports,
bkr.pass_type, bkr.pass_filter, bkr.margin, bkr.save_mode,
is_clear, bkr.is_split_materials, bkr.is_automatic_name, false, bkr.is_cage,
bkr.cage_extrusion, bkr.normal_space, bkr.normal_swizzle,
@@ -1260,7 +1263,7 @@ static void bake_startjob(void *bkv, short *UNUSED(stop), short *do_update, floa
if (bkr->is_selected_to_active) {
bkr->result = bake(
- bkr->render, bkr->main, bkr->scene, bkr->ob, &bkr->selected_objects, bkr->reports,
+ bkr->render, bkr->main, bkr->depsgraph, bkr->scene, bkr->ob, &bkr->selected_objects, bkr->reports,
bkr->pass_type, bkr->pass_filter, bkr->margin, bkr->save_mode,
bkr->is_clear, bkr->is_split_materials, bkr->is_automatic_name, true, bkr->is_cage,
bkr->cage_extrusion, bkr->normal_space, bkr->normal_swizzle,
@@ -1273,7 +1276,7 @@ static void bake_startjob(void *bkv, short *UNUSED(stop), short *do_update, floa
for (link = bkr->selected_objects.first; link; link = link->next) {
Object *ob_iter = link->ptr.data;
bkr->result = bake(
- bkr->render, bkr->main, bkr->scene, ob_iter, NULL, bkr->reports,
+ bkr->render, bkr->main, bkr->depsgraph, bkr->scene, ob_iter, NULL, bkr->reports,
bkr->pass_type, bkr->pass_filter, bkr->margin, bkr->save_mode,
is_clear, bkr->is_split_materials, bkr->is_automatic_name, false, bkr->is_cage,
bkr->cage_extrusion, bkr->normal_space, bkr->normal_swizzle,
diff --git a/source/blender/editors/object/object_constraint.c b/source/blender/editors/object/object_constraint.c
index 94caaedec19..1b462e92ca4 100644
--- a/source/blender/editors/object/object_constraint.c
+++ b/source/blender/editors/object/object_constraint.c
@@ -53,7 +53,6 @@
#include "BKE_armature.h"
#include "BKE_constraint.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
#include "BKE_global.h"
#include "BKE_main.h"
@@ -62,6 +61,9 @@
#include "BKE_tracking.h"
#include "BIK_api.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#ifdef WITH_PYTHON
#include "BPY_extern.h"
#endif
@@ -85,12 +87,12 @@
/* -------------- Get Active Constraint Data ---------------------- */
/* if object in posemode, active bone constraints, else object constraints */
-ListBase *get_active_constraints(Object *ob)
+ListBase *get_active_constraints(const EvaluationContext *eval_ctx, Object *ob)
{
if (ob == NULL)
return NULL;
- if (ob->mode & OB_MODE_POSE) {
+ if (eval_ctx->object_mode & OB_MODE_POSE) {
bPoseChannel *pchan;
pchan = BKE_pose_channel_active(ob);
@@ -140,9 +142,9 @@ ListBase *get_constraint_lb(Object *ob, bConstraint *con, bPoseChannel **r_pchan
}
/* single constraint */
-bConstraint *get_active_constraint(Object *ob)
+bConstraint *get_active_constraint(const EvaluationContext *eval_ctx, Object *ob)
{
- return BKE_constraints_active_get(get_active_constraints(ob));
+ return BKE_constraints_active_get(get_active_constraints(eval_ctx, ob));
}
/* -------------- Constraint Management (Add New, Remove, Rename) -------------------- */
@@ -637,7 +639,8 @@ static int edit_constraint_invoke_properties(bContext *C, wmOperator *op)
return 0;
}
-static bConstraint *edit_constraint_property_get(wmOperator *op, Object *ob, int type)
+static bConstraint *edit_constraint_property_get(
+ const EvaluationContext *eval_ctx, wmOperator *op, Object *ob, int type)
{
char constraint_name[MAX_NAME];
int owner = RNA_enum_get(op->ptr, "owner");
@@ -662,7 +665,7 @@ static bConstraint *edit_constraint_property_get(wmOperator *op, Object *ob, int
else {
//if (G.debug & G_DEBUG)
//printf("edit_constraint_property_get: defaulting to getting list in the standard way\n");
- list = get_active_constraints(ob);
+ list = get_active_constraints(eval_ctx, ob);
}
con = BKE_constraints_find_name(list, constraint_name);
@@ -682,8 +685,10 @@ static bConstraint *edit_constraint_property_get(wmOperator *op, Object *ob, int
static int stretchto_reset_exec(bContext *C, wmOperator *op)
{
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
Object *ob = ED_object_active_context(C);
- bConstraint *con = edit_constraint_property_get(op, ob, CONSTRAINT_TYPE_STRETCHTO);
+ bConstraint *con = edit_constraint_property_get(&eval_ctx, op, ob, CONSTRAINT_TYPE_STRETCHTO);
bStretchToConstraint *data = (con) ? (bStretchToConstraint *)con->data : NULL;
/* despite 3 layers of checks, we may still not be able to find a constraint */
@@ -728,8 +733,10 @@ void CONSTRAINT_OT_stretchto_reset(wmOperatorType *ot)
static int limitdistance_reset_exec(bContext *C, wmOperator *op)
{
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
Object *ob = ED_object_active_context(C);
- bConstraint *con = edit_constraint_property_get(op, ob, CONSTRAINT_TYPE_DISTLIMIT);
+ bConstraint *con = edit_constraint_property_get(&eval_ctx, op, ob, CONSTRAINT_TYPE_DISTLIMIT);
bDistLimitConstraint *data = (con) ? (bDistLimitConstraint *)con->data : NULL;
/* despite 3 layers of checks, we may still not be able to find a constraint */
@@ -773,8 +780,12 @@ void CONSTRAINT_OT_limitdistance_reset(wmOperatorType *ot)
/* ------------- Child-Of Constraint ------------------ */
-static void child_get_inverse_matrix(Scene *scene, Object *ob, bConstraint *con, float invmat[4][4], const int owner)
+static void child_get_inverse_matrix(const bContext *C, Scene *scene, Object *ob, bConstraint *con, float invmat[4][4], const int owner)
{
+ EvaluationContext eval_ctx;
+
+ CTX_data_eval_ctx(C, &eval_ctx);
+
/* nullify inverse matrix first */
unit_m4(invmat);
@@ -800,7 +811,7 @@ static void child_get_inverse_matrix(Scene *scene, Object *ob, bConstraint *con,
* to use as baseline ("pmat") to derive delta from. This extra calc saves users
* from having pressing "Clear Inverse" first
*/
- BKE_pose_where_is(scene, ob);
+ BKE_pose_where_is(&eval_ctx, scene, ob);
copy_m4_m4(pmat, pchan->pose_mat);
/* 2. knock out constraints starting from this one */
@@ -817,7 +828,7 @@ static void child_get_inverse_matrix(Scene *scene, Object *ob, bConstraint *con,
}
/* 3. solve pose without disabled constraints */
- BKE_pose_where_is(scene, ob);
+ BKE_pose_where_is(&eval_ctx, scene, ob);
/* 4. determine effect of constraint by removing the newly calculated
* pchan->pose_mat from the original pchan->pose_mat, thus determining
@@ -840,7 +851,7 @@ static void child_get_inverse_matrix(Scene *scene, Object *ob, bConstraint *con,
}
/* 6. recalculate pose with new inv-mat applied */
- BKE_pose_where_is(scene, ob);
+ BKE_pose_where_is(&eval_ctx, scene, ob);
}
}
if (owner == EDIT_CONSTRAINT_OWNER_OBJECT) {
@@ -851,7 +862,7 @@ static void child_get_inverse_matrix(Scene *scene, Object *ob, bConstraint *con,
BLI_assert(BLI_findindex(&ob->constraints, con) != -1);
/* use BKE_object_workob_calc_parent to find inverse - just like for normal parenting */
- BKE_object_workob_calc_parent(scene, ob, &workob);
+ BKE_object_workob_calc_parent(&eval_ctx, scene, ob, &workob);
invert_m4_m4(invmat, workob.obmat);
}
}
@@ -860,9 +871,11 @@ static void child_get_inverse_matrix(Scene *scene, Object *ob, bConstraint *con,
/* ChildOf Constraint - set inverse callback */
static int childof_set_inverse_exec(bContext *C, wmOperator *op)
{
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
Scene *scene = CTX_data_scene(C);
Object *ob = ED_object_active_context(C);
- bConstraint *con = edit_constraint_property_get(op, ob, CONSTRAINT_TYPE_CHILDOF);
+ bConstraint *con = edit_constraint_property_get(&eval_ctx, op, ob, CONSTRAINT_TYPE_CHILDOF);
bChildOfConstraint *data = (con) ? (bChildOfConstraint *)con->data : NULL;
const int owner = RNA_enum_get(op->ptr, "owner");
@@ -873,7 +886,7 @@ static int childof_set_inverse_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
- child_get_inverse_matrix(scene, ob, con, data->invmat, owner);
+ child_get_inverse_matrix(C, scene, ob, con, data->invmat, owner);
WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT, ob);
@@ -911,7 +924,9 @@ void CONSTRAINT_OT_childof_set_inverse(wmOperatorType *ot)
static int childof_clear_inverse_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
- bConstraint *con = edit_constraint_property_get(op, ob, CONSTRAINT_TYPE_CHILDOF);
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
+ bConstraint *con = edit_constraint_property_get(&eval_ctx, op, ob, CONSTRAINT_TYPE_CHILDOF);
bChildOfConstraint *data = (con) ? (bChildOfConstraint *)con->data : NULL;
if (data == NULL) {
@@ -958,8 +973,10 @@ void CONSTRAINT_OT_childof_clear_inverse(wmOperatorType *ot)
static int followpath_path_animate_exec(bContext *C, wmOperator *op)
{
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
Object *ob = ED_object_active_context(C);
- bConstraint *con = edit_constraint_property_get(op, ob, CONSTRAINT_TYPE_FOLLOWPATH);
+ bConstraint *con = edit_constraint_property_get(&eval_ctx, op, ob, CONSTRAINT_TYPE_FOLLOWPATH);
bFollowPathConstraint *data = (con) ? (bFollowPathConstraint *)con->data : NULL;
bAction *act = NULL;
@@ -1082,9 +1099,11 @@ void CONSTRAINT_OT_followpath_path_animate(wmOperatorType *ot)
static int objectsolver_set_inverse_exec(bContext *C, wmOperator *op)
{
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
Scene *scene = CTX_data_scene(C);
Object *ob = ED_object_active_context(C);
- bConstraint *con = edit_constraint_property_get(op, ob, CONSTRAINT_TYPE_OBJECTSOLVER);
+ bConstraint *con = edit_constraint_property_get(&eval_ctx, op, ob, CONSTRAINT_TYPE_OBJECTSOLVER);
bObjectSolverConstraint *data = (con) ? (bObjectSolverConstraint *)con->data : NULL;
const int owner = RNA_enum_get(op->ptr, "owner");
@@ -1095,7 +1114,7 @@ static int objectsolver_set_inverse_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
- child_get_inverse_matrix(scene, ob, con, data->invmat, owner);
+ child_get_inverse_matrix(C, scene, ob, con, data->invmat, owner);
WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT, ob);
@@ -1131,8 +1150,10 @@ void CONSTRAINT_OT_objectsolver_set_inverse(wmOperatorType *ot)
static int objectsolver_clear_inverse_exec(bContext *C, wmOperator *op)
{
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
Object *ob = ED_object_active_context(C);
- bConstraint *con = edit_constraint_property_get(op, ob, CONSTRAINT_TYPE_OBJECTSOLVER);
+ bConstraint *con = edit_constraint_property_get(&eval_ctx, op, ob, CONSTRAINT_TYPE_OBJECTSOLVER);
bObjectSolverConstraint *data = (con) ? (bObjectSolverConstraint *)con->data : NULL;
if (data == NULL) {
@@ -1196,9 +1217,9 @@ void ED_object_constraint_update(Object *ob)
object_test_constraints(ob);
if (ob->type == OB_ARMATURE)
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA | OB_RECALC_OB);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA | OB_RECALC_OB);
else
- DAG_id_tag_update(&ob->id, OB_RECALC_OB);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB);
}
static void object_pose_tag_update(Main *bmain, Object *ob)
@@ -1221,7 +1242,7 @@ void ED_object_constraint_dependency_update(Main *bmain, Object *ob)
if (ob->pose) {
object_pose_tag_update(bmain, ob);
}
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
}
void ED_object_constraint_tag_update(Object *ob, bConstraint *con)
@@ -1233,9 +1254,9 @@ void ED_object_constraint_tag_update(Object *ob, bConstraint *con)
object_test_constraint(ob, con);
if (ob->type == OB_ARMATURE)
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA | OB_RECALC_OB);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA | OB_RECALC_OB);
else
- DAG_id_tag_update(&ob->id, OB_RECALC_OB);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB);
}
void ED_object_constraint_dependency_tag_update(Main *bmain, Object *ob, bConstraint *con)
@@ -1245,7 +1266,7 @@ void ED_object_constraint_dependency_tag_update(Main *bmain, Object *ob, bConstr
if (ob->pose) {
object_pose_tag_update(bmain, ob);
}
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
}
static int constraint_poll(bContext *C)
@@ -1269,7 +1290,7 @@ static int constraint_delete_exec(bContext *C, wmOperator *UNUSED(op))
ED_object_constraint_update(ob); /* needed to set the flags on posebones correctly */
/* relatiols */
- DAG_relations_tag_update(CTX_data_main(C));
+ DEG_relations_tag_update(CTX_data_main(C));
/* notifiers */
WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT | NA_REMOVED, ob);
@@ -1300,8 +1321,10 @@ void CONSTRAINT_OT_delete(wmOperatorType *ot)
static int constraint_move_down_exec(bContext *C, wmOperator *op)
{
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
Object *ob = ED_object_active_context(C);
- bConstraint *con = edit_constraint_property_get(op, ob, 0);
+ bConstraint *con = edit_constraint_property_get(&eval_ctx, op, ob, 0);
if (con && con->next) {
ListBase *conlist = get_constraint_lb(ob, con, NULL);
@@ -1349,8 +1372,10 @@ void CONSTRAINT_OT_move_down(wmOperatorType *ot)
static int constraint_move_up_exec(bContext *C, wmOperator *op)
{
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
Object *ob = ED_object_active_context(C);
- bConstraint *con = edit_constraint_property_get(op, ob, 0);
+ bConstraint *con = edit_constraint_property_get(&eval_ctx, op, ob, 0);
if (con && con->prev) {
ListBase *conlist = get_constraint_lb(ob, con, NULL);
@@ -1411,12 +1436,12 @@ static int pose_constraints_clear_exec(bContext *C, wmOperator *UNUSED(op))
CTX_DATA_END;
/* force depsgraph to get recalculated since relationships removed */
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
/* note, calling BIK_clear_data() isn't needed here */
/* do updates */
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT | NA_REMOVED, ob);
return OPERATOR_FINISHED;
@@ -1443,12 +1468,12 @@ static int object_constraints_clear_exec(bContext *C, wmOperator *UNUSED(op))
CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects)
{
BKE_constraints_free(&ob->constraints);
- DAG_id_tag_update(&ob->id, OB_RECALC_OB);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB);
}
CTX_DATA_END;
/* force depsgraph to get recalculated since relationships removed */
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
/* do updates */
WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT | NA_REMOVED, NULL);
@@ -1496,13 +1521,13 @@ static int pose_constraint_copy_exec(bContext *C, wmOperator *op)
chan->constflag |= pchan->constflag;
BKE_pose_tag_recalc(bmain, ob->pose);
- DAG_id_tag_update((ID *)ob, OB_RECALC_DATA);
+ DEG_id_tag_update((ID *)ob, OB_RECALC_DATA);
}
}
BLI_freelistN(&lb);
/* force depsgraph to get recalculated since new relationships added */
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT, NULL);
@@ -1535,13 +1560,13 @@ static int object_constraint_copy_exec(bContext *C, wmOperator *UNUSED(op))
/* if we're not handling the object we're copying from, copy all constraints over */
if (obact != ob) {
BKE_constraints_copy(&ob->constraints, &obact->constraints, true);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
}
}
CTX_DATA_END;
/* force depsgraph to get recalculated since new relationships added */
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
/* notifiers for updates */
WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT | NA_ADDED, NULL);
@@ -1569,6 +1594,8 @@ void OBJECT_OT_constraints_copy(wmOperatorType *ot)
/* get the Object and/or PoseChannel to use as target */
static bool get_new_constraint_target(bContext *C, int con_type, Object **tar_ob, bPoseChannel **tar_pchan, bool add)
{
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
Object *obact = ED_object_active_context(C);
bPoseChannel *pchanact = BKE_pose_channel_active(obact);
bool only_curve = false, only_mesh = false, only_ob = false;
@@ -1647,7 +1674,7 @@ static bool get_new_constraint_target(bContext *C, int con_type, Object **tar_ob
/* for armatures in pose mode, look inside the armature for the active bone
* so that we set up cross-armature constraints with less effort
*/
- if ((ob->type == OB_ARMATURE) && (ob->mode & OB_MODE_POSE) &&
+ if ((ob->type == OB_ARMATURE) && (eval_ctx.mode & OB_MODE_POSE) &&
(!only_curve && !only_mesh))
{
/* just use the active bone, and assume that it is visible + usable */
@@ -1682,14 +1709,15 @@ static bool get_new_constraint_target(bContext *C, int con_type, Object **tar_ob
if ((found == false) && (add)) {
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
- Base *base = BASACT, *newbase = NULL;
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Base *base = BASACT(view_layer), *newbase = NULL;
Object *obt;
/* add new target object */
- obt = BKE_object_add(bmain, scene, OB_EMPTY, NULL);
+ obt = BKE_object_add(bmain, scene, view_layer, OB_EMPTY, NULL);
/* set layers OK */
- newbase = BASACT;
+ newbase = BASACT(view_layer);
newbase->lay = base->lay;
obt->lay = newbase->lay;
@@ -1708,8 +1736,8 @@ static bool get_new_constraint_target(bContext *C, int con_type, Object **tar_ob
}
/* restore, BKE_object_add sets active */
- BASACT = base;
- base->flag |= SELECT;
+ BASACT(view_layer) = base;
+ base->flag |= BASE_SELECTED;
/* make our new target the new object */
*tar_ob = obt;
@@ -1817,7 +1845,7 @@ static int constraint_add_exec(bContext *C, wmOperator *op, Object *ob, ListBase
/* force depsgraph to get recalculated since new relationships added */
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
if ((ob->type == OB_ARMATURE) && (pchan)) {
BKE_pose_tag_recalc(bmain, ob->pose); /* sort pose channels */
@@ -1827,10 +1855,10 @@ static int constraint_add_exec(bContext *C, wmOperator *op, Object *ob, ListBase
* XXX Temp hack until new depsgraph hopefully solves this. */
ob->adt->recalc |= ADT_RECALC_ANIM;
}
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA | OB_RECALC_OB);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA | OB_RECALC_OB);
}
else
- DAG_id_tag_update(&ob->id, OB_RECALC_OB);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB);
/* notifiers for updates */
WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT | NA_ADDED, ob);
@@ -1864,6 +1892,8 @@ static int object_constraint_add_exec(bContext *C, wmOperator *op)
/* dummy operator callback */
static int pose_constraint_add_exec(bContext *C, wmOperator *op)
{
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
Object *ob = BKE_object_pose_armature_get(ED_object_active_context(C));
int type = RNA_enum_get(op->ptr, "type");
short with_targets = 0;
@@ -1879,7 +1909,7 @@ static int pose_constraint_add_exec(bContext *C, wmOperator *op)
if (strstr(op->idname, "with_targets"))
with_targets = 1;
- return constraint_add_exec(C, op, ob, get_active_constraints(ob), type, with_targets);
+ return constraint_add_exec(C, op, ob, get_active_constraints(&eval_ctx, ob), type, with_targets);
}
/* ------------------ */
@@ -2020,11 +2050,13 @@ static int pose_ik_add_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED
/* call constraint_add_exec() to add the IK constraint */
static int pose_ik_add_exec(bContext *C, wmOperator *op)
{
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
Object *ob = CTX_data_active_object(C);
const bool with_targets = RNA_boolean_get(op->ptr, "with_targets");
/* add the constraint - all necessary checks should have been done by the invoke() callback already... */
- return constraint_add_exec(C, op, ob, get_active_constraints(ob), CONSTRAINT_TYPE_KINEMATIC, with_targets);
+ return constraint_add_exec(C, op, ob, get_active_constraints(&eval_ctx, ob), CONSTRAINT_TYPE_KINEMATIC, with_targets);
}
void POSE_OT_ik_add(wmOperatorType *ot)
@@ -2070,7 +2102,7 @@ static int pose_ik_clear_exec(bContext *C, wmOperator *UNUSED(op))
CTX_DATA_END;
/* refresh depsgraph */
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
/* note, notifier might evolve */
WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT | NA_REMOVED, ob);
diff --git a/source/blender/editors/object/object_data_transfer.c b/source/blender/editors/object/object_data_transfer.c
index 7845cfe1022..2daa8652335 100644
--- a/source/blender/editors/object/object_data_transfer.c
+++ b/source/blender/editors/object/object_data_transfer.c
@@ -40,13 +40,14 @@
#include "BKE_context.h"
#include "BKE_data_transfer.h"
-#include "BKE_depsgraph.h"
#include "BKE_DerivedMesh.h"
#include "BKE_mesh_mapping.h"
#include "BKE_mesh_remap.h"
#include "BKE_object.h"
#include "BKE_report.h"
+#include "DEG_depsgraph.h"
+
#include "RNA_access.h"
#include "RNA_define.h"
#include "RNA_enum_types.h"
@@ -93,15 +94,17 @@ static const EnumPropertyItem DT_layer_items[] = {
static const EnumPropertyItem *dt_layers_select_src_itemf(
bContext *C, PointerRNA *ptr, PropertyRNA *UNUSED(prop), bool *r_free)
{
+ EvaluationContext eval_ctx;
EnumPropertyItem *item = NULL, tmp_item = {0};
int totitem = 0;
-
const int data_type = RNA_enum_get(ptr, "data_type");
if (!C) { /* needed for docs and i18n tools */
return rna_enum_dt_layers_select_src_items;
}
+ CTX_data_eval_ctx(C, &eval_ctx);
+
RNA_enum_items_add_value(&item, &totitem, rna_enum_dt_layers_select_src_items, DT_LAYERS_ACTIVE_SRC);
RNA_enum_items_add_value(&item, &totitem, rna_enum_dt_layers_select_src_items, DT_LAYERS_ALL_SRC);
@@ -135,19 +138,19 @@ static const EnumPropertyItem *dt_layers_select_src_itemf(
if (ob_src) {
DerivedMesh *dm_src;
- CustomData *pdata;
+ CustomData *ldata;
int num_data, i;
/* XXX Is this OK? */
- dm_src = mesh_get_derived_final(scene, ob_src, CD_MASK_BAREMESH | CD_MTEXPOLY);
- pdata = dm_src->getPolyDataLayout(dm_src);
- num_data = CustomData_number_of_layers(pdata, CD_MTEXPOLY);
+ dm_src = mesh_get_derived_final(&eval_ctx, scene, ob_src, CD_MASK_BAREMESH | CD_MLOOPUV);
+ ldata = dm_src->getLoopDataLayout(dm_src);
+ num_data = CustomData_number_of_layers(ldata, CD_MLOOPUV);
RNA_enum_item_add_separator(&item, &totitem);
for (i = 0; i < num_data; i++) {
tmp_item.value = i;
- tmp_item.identifier = tmp_item.name = CustomData_get_layer_name(pdata, CD_MTEXPOLY, i);
+ tmp_item.identifier = tmp_item.name = CustomData_get_layer_name(ldata, CD_MLOOPUV, i);
RNA_enum_item_add(&item, &totitem, &tmp_item);
}
}
@@ -162,7 +165,7 @@ static const EnumPropertyItem *dt_layers_select_src_itemf(
int num_data, i;
/* XXX Is this OK? */
- dm_src = mesh_get_derived_final(scene, ob_src, CD_MASK_BAREMESH | CD_MLOOPCOL);
+ dm_src = mesh_get_derived_final(&eval_ctx, scene, ob_src, CD_MASK_BAREMESH | CD_MLOOPCOL);
ldata = dm_src->getLoopDataLayout(dm_src);
num_data = CustomData_number_of_layers(ldata, CD_MLOOPCOL);
@@ -344,6 +347,9 @@ static int data_transfer_exec(bContext *C, wmOperator *op)
{
Scene *scene = CTX_data_scene(C);
Object *ob_src = ED_object_active_context(C);
+ EvaluationContext eval_ctx;
+
+ CTX_data_eval_ctx(C, &eval_ctx);
ListBase ctx_objects;
CollectionPointerLink *ctx_ob_dst;
@@ -412,7 +418,7 @@ static int data_transfer_exec(bContext *C, wmOperator *op)
}
if (BKE_object_data_transfer_mesh(
- scene, ob_src, ob_dst, data_type, use_create,
+ &eval_ctx, scene, ob_src, ob_dst, data_type, use_create,
map_vert_mode, map_edge_mode, map_loop_mode, map_poly_mode,
space_transform, use_auto_transform,
max_distance, ray_radius, islands_precision,
@@ -423,7 +429,7 @@ static int data_transfer_exec(bContext *C, wmOperator *op)
}
}
- DAG_id_tag_update(&ob_dst->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob_dst->id, OB_RECALC_DATA);
if (reverse_transfer) {
SWAP(Object *, ob_src, ob_dst);
@@ -622,8 +628,11 @@ static int datalayout_transfer_exec(bContext *C, wmOperator *op)
{
Scene *scene = CTX_data_scene(C);
Object *ob_act = ED_object_active_context(C);
+ EvaluationContext eval_ctx;
DataTransferModifierData *dtmd;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
dtmd = (DataTransferModifierData *)edit_modifier_property_get(op, ob_act, eModifierType_DataTransfer);
/* If we have a modifier, we transfer data layout from this modifier's source object to active one.
@@ -638,10 +647,10 @@ static int datalayout_transfer_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
- BKE_object_data_transfer_layout(scene, ob_src, ob_dst, dtmd->data_types, use_delete,
+ BKE_object_data_transfer_layout(&eval_ctx, scene, ob_src, ob_dst, dtmd->data_types, use_delete,
dtmd->layers_select_src, dtmd->layers_select_dst);
- DAG_id_tag_update(&ob_dst->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob_dst->id, OB_RECALC_DATA);
}
else {
Object *ob_src = ob_act;
@@ -668,11 +677,11 @@ static int datalayout_transfer_exec(bContext *C, wmOperator *op)
for (ctx_ob_dst = ctx_objects.first; ctx_ob_dst; ctx_ob_dst = ctx_ob_dst->next) {
Object *ob_dst = ctx_ob_dst->ptr.data;
if (data_transfer_exec_is_object_valid(op, ob_src, ob_dst, false)) {
- BKE_object_data_transfer_layout(scene, ob_src, ob_dst, data_type, use_delete,
+ BKE_object_data_transfer_layout(&eval_ctx, scene, ob_src, ob_dst, data_type, use_delete,
layers_select_src, layers_select_dst);
}
- DAG_id_tag_update(&ob_dst->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob_dst->id, OB_RECALC_DATA);
}
BLI_freelistN(&ctx_objects);
diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c
index 5b86febfd4b..ca96e1c6798 100644
--- a/source/blender/editors/object/object_edit.c
+++ b/source/blender/editors/object/object_edit.c
@@ -59,6 +59,7 @@
#include "DNA_vfont_types.h"
#include "DNA_mesh_types.h"
#include "DNA_lattice_types.h"
+#include "DNA_workspace_types.h"
#include "IMB_imbuf_types.h"
@@ -67,7 +68,6 @@
#include "BKE_context.h"
#include "BKE_curve.h"
#include "BKE_effect.h"
-#include "BKE_depsgraph.h"
#include "BKE_global.h"
#include "BKE_image.h"
#include "BKE_lattice.h"
@@ -84,6 +84,10 @@
#include "BKE_modifier.h"
#include "BKE_editmesh.h"
#include "BKE_report.h"
+#include "BKE_workspace.h"
+
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
#include "ED_armature.h"
#include "ED_curve.h"
@@ -133,192 +137,6 @@ Object *ED_object_active_context(bContext *C)
}
-/* ********* clear/set restrict view *********/
-static int object_hide_view_clear_exec(bContext *C, wmOperator *op)
-{
- Main *bmain = CTX_data_main(C);
- ScrArea *sa = CTX_wm_area(C);
- View3D *v3d = sa->spacedata.first;
- Scene *scene = CTX_data_scene(C);
- Base *base;
- bool changed = false;
- const bool select = RNA_boolean_get(op->ptr, "select");
-
- /* XXX need a context loop to handle such cases */
- for (base = FIRSTBASE; base; base = base->next) {
- if ((base->lay & v3d->lay) && base->object->restrictflag & OB_RESTRICT_VIEW) {
- if (!(base->object->restrictflag & OB_RESTRICT_SELECT)) {
- SET_FLAG_FROM_TEST(base->flag, select, SELECT);
- }
- base->object->flag = base->flag;
- base->object->restrictflag &= ~OB_RESTRICT_VIEW;
- changed = true;
- }
- }
- if (changed) {
- DAG_id_type_tag(bmain, ID_OB);
- DAG_relations_tag_update(bmain);
- WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
- }
-
- return OPERATOR_FINISHED;
-}
-
-void OBJECT_OT_hide_view_clear(wmOperatorType *ot)
-{
-
- /* identifiers */
- ot->name = "Clear Restrict View";
- ot->description = "Reveal the object by setting the hide flag";
- ot->idname = "OBJECT_OT_hide_view_clear";
-
- /* api callbacks */
- ot->exec = object_hide_view_clear_exec;
- ot->poll = ED_operator_view3d_active;
-
- /* flags */
- ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-
- RNA_def_boolean(ot->srna, "select", true, "Select", "");
-}
-
-static int object_hide_view_set_exec(bContext *C, wmOperator *op)
-{
- Main *bmain = CTX_data_main(C);
- Scene *scene = CTX_data_scene(C);
- bool changed = false;
- const bool unselected = RNA_boolean_get(op->ptr, "unselected");
-
- CTX_DATA_BEGIN(C, Base *, base, visible_bases)
- {
- if (!unselected) {
- if (base->flag & SELECT) {
- base->flag &= ~SELECT;
- base->object->flag = base->flag;
- base->object->restrictflag |= OB_RESTRICT_VIEW;
- changed = true;
- if (base == BASACT) {
- ED_base_object_activate(C, NULL);
- }
- }
- }
- else {
- if (!(base->flag & SELECT)) {
- base->object->restrictflag |= OB_RESTRICT_VIEW;
- changed = true;
- if (base == BASACT) {
- ED_base_object_activate(C, NULL);
- }
- }
- }
- }
- CTX_DATA_END;
-
- if (changed) {
- DAG_id_type_tag(bmain, ID_OB);
- DAG_relations_tag_update(bmain);
-
- WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
-
- }
-
- return OPERATOR_FINISHED;
-}
-
-void OBJECT_OT_hide_view_set(wmOperatorType *ot)
-{
- /* identifiers */
- ot->name = "Set Restrict View";
- ot->description = "Hide the object by setting the hide flag";
- ot->idname = "OBJECT_OT_hide_view_set";
-
- /* api callbacks */
- ot->exec = object_hide_view_set_exec;
- ot->poll = ED_operator_view3d_active;
-
- /* flags */
- ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-
- RNA_def_boolean(ot->srna, "unselected", 0, "Unselected", "Hide unselected rather than selected objects");
-
-}
-
-/* 99% same as above except no need for scene refreshing (TODO, update render preview) */
-static int object_hide_render_clear_exec(bContext *C, wmOperator *UNUSED(op))
-{
- bool changed = false;
-
- /* XXX need a context loop to handle such cases */
- CTX_DATA_BEGIN(C, Object *, ob, selected_editable_objects)
- {
- if (ob->restrictflag & OB_RESTRICT_RENDER) {
- ob->restrictflag &= ~OB_RESTRICT_RENDER;
- changed = true;
- }
- }
- CTX_DATA_END;
-
- if (changed)
- WM_event_add_notifier(C, NC_SPACE | ND_SPACE_OUTLINER, NULL);
-
- return OPERATOR_FINISHED;
-}
-
-void OBJECT_OT_hide_render_clear(wmOperatorType *ot)
-{
-
- /* identifiers */
- ot->name = "Clear Restrict Render";
- ot->description = "Reveal the render object by setting the hide render flag";
- ot->idname = "OBJECT_OT_hide_render_clear";
-
- /* api callbacks */
- ot->exec = object_hide_render_clear_exec;
- ot->poll = ED_operator_view3d_active;
-
- /* flags */
- ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-}
-
-static int object_hide_render_set_exec(bContext *C, wmOperator *op)
-{
- const bool unselected = RNA_boolean_get(op->ptr, "unselected");
-
- CTX_DATA_BEGIN(C, Base *, base, visible_bases)
- {
- if (!unselected) {
- if (base->flag & SELECT) {
- base->object->restrictflag |= OB_RESTRICT_RENDER;
- }
- }
- else {
- if (!(base->flag & SELECT)) {
- base->object->restrictflag |= OB_RESTRICT_RENDER;
- }
- }
- }
- CTX_DATA_END;
- WM_event_add_notifier(C, NC_SPACE | ND_SPACE_OUTLINER, NULL);
- return OPERATOR_FINISHED;
-}
-
-void OBJECT_OT_hide_render_set(wmOperatorType *ot)
-{
- /* identifiers */
- ot->name = "Set Restrict Render";
- ot->description = "Hide the render object by setting the hide render flag";
- ot->idname = "OBJECT_OT_hide_render_set";
-
- /* api callbacks */
- ot->exec = object_hide_render_set_exec;
- ot->poll = ED_operator_view3d_active;
-
- /* flags */
- ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-
- RNA_def_boolean(ot->srna, "unselected", 0, "Unselected", "Hide unselected rather than selected objects");
-}
-
/* ******************* toggle editmode operator ***************** */
static bool mesh_needs_keyindex(const Mesh *me)
@@ -389,7 +207,7 @@ static bool ED_object_editmode_load_ex(Main *bmain, Object *obedit, const bool f
* to inform dependency graph about this. But is it really the
* best place to do this?
*/
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
}
else if (ELEM(obedit->type, OB_CURVE, OB_SURF)) {
const Curve *cu = obedit->data;
@@ -445,6 +263,7 @@ void ED_object_editmode_exit(bContext *C, int flag)
{
/* Note! only in exceptional cases should 'EM_DO_UNDO' NOT be in the flag */
/* Note! if 'EM_FREEDATA' isn't in the flag, use ED_object_editmode_load directly */
+ WorkSpace *workspace = CTX_wm_workspace(C);
Scene *scene = CTX_data_scene(C);
Object *obedit = CTX_data_edit_object(C);
const bool freedata = (flag & EM_FREEDATA) != 0;
@@ -454,9 +273,7 @@ void ED_object_editmode_exit(bContext *C, int flag)
if (ED_object_editmode_load_ex(CTX_data_main(C), obedit, freedata) == false) {
/* in rare cases (background mode) its possible active object
* is flagged for editmode, without 'obedit' being set [#35489] */
- if (UNLIKELY(scene->basact && (scene->basact->object->mode & OB_MODE_EDIT))) {
- scene->basact->object->mode &= ~OB_MODE_EDIT;
- }
+ workspace->object_mode &= ~OB_MODE_EDIT;
if (flag & EM_WAITCURSOR) waitcursor(0);
return;
}
@@ -480,48 +297,43 @@ void ED_object_editmode_exit(bContext *C, int flag)
BKE_ptcache_object_reset(scene, obedit, PTCACHE_RESET_OUTDATED);
/* also flush ob recalc, doesn't take much overhead, but used for particles */
- DAG_id_tag_update(&obedit->id, OB_RECALC_OB | OB_RECALC_DATA);
+ DEG_id_tag_update(&obedit->id, OB_RECALC_OB | OB_RECALC_DATA);
if (flag & EM_DO_UNDO)
ED_undo_push(C, "Editmode");
WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_MODE_OBJECT, scene);
- obedit->mode &= ~OB_MODE_EDIT;
+ workspace->object_mode &= ~OB_MODE_EDIT;
}
if (flag & EM_WAITCURSOR) waitcursor(0);
+
+ /* This way we ensure scene's obedit is copied into all CoW scenes. */
+ DEG_id_tag_update(&scene->id, 0);
}
void ED_object_editmode_enter(bContext *C, int flag)
{
+ WorkSpace *workspace = CTX_wm_workspace(C);
Scene *scene = CTX_data_scene(C);
- Base *base = NULL;
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Object *ob;
- ScrArea *sa = CTX_wm_area(C);
- View3D *v3d = NULL;
bool ok = false;
if (ID_IS_LINKED(scene)) return;
- if (sa && sa->spacetype == SPACE_VIEW3D)
- v3d = sa->spacedata.first;
-
if ((flag & EM_IGNORE_LAYER) == 0) {
- base = CTX_data_active_base(C); /* active layer checked here for view3d */
+ ob = CTX_data_active_object(C); /* active layer checked here for view3d */
- if (base == NULL) return;
- else if (v3d && (base->lay & v3d->lay) == 0) return;
- else if (!v3d && (base->lay & scene->lay) == 0) return;
+ if (ob == NULL) return;
}
else {
- base = scene->basact;
+ ob = view_layer->basact->object;
}
- if (ELEM(NULL, base, base->object, base->object->data)) return;
-
- ob = base->object;
+ if (ELEM(NULL, ob, ob->data)) return;
/* this checks actual object->data, for cases when other scenes have it in editmode context */
if (BKE_object_is_in_editmode(ob))
@@ -534,14 +346,14 @@ void ED_object_editmode_enter(bContext *C, int flag)
if (flag & EM_WAITCURSOR) waitcursor(1);
- ob->restore_mode = ob->mode;
+ workspace->object_mode_restore = workspace->object_mode;
/* note, when switching scenes the object can have editmode data but
* not be scene->obedit: bug 22954, this avoids calling self eternally */
- if ((ob->restore_mode & OB_MODE_EDIT) == 0)
- ED_object_toggle_modes(C, ob->mode);
+ if ((workspace->object_mode_restore & OB_MODE_EDIT) == 0)
+ ED_object_toggle_modes(C, workspace->object_mode);
- ob->mode = OB_MODE_EDIT;
+ workspace->object_mode = OB_MODE_EDIT;
if (ob->type == OB_MESH) {
BMEditMesh *em;
@@ -580,7 +392,7 @@ void ED_object_editmode_enter(bContext *C, int flag)
scene->obedit = ob;
ED_armature_to_edit(arm);
/* to ensure all goes in restposition and without striding */
- DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME); /* XXX: should this be OB_RECALC_DATA? */
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME); /* XXX: should this be OB_RECALC_DATA? */
WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_EDITMODE_ARMATURE, scene);
}
@@ -614,11 +426,13 @@ void ED_object_editmode_enter(bContext *C, int flag)
}
if (ok) {
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ /* This way we ensure scene's obedit is copied into all CoW scenes. */
+ DEG_id_tag_update(&scene->id, 0);
}
else {
scene->obedit = NULL; /* XXX for context */
- ob->mode &= ~OB_MODE_EDIT;
+ workspace->object_mode &= ~OB_MODE_EDIT;
WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_MODE_OBJECT, scene);
}
@@ -628,13 +442,13 @@ void ED_object_editmode_enter(bContext *C, int flag)
static int editmode_toggle_exec(bContext *C, wmOperator *op)
{
+ WorkSpace *workspace = CTX_wm_workspace(C);
const int mode_flag = OB_MODE_EDIT;
const bool is_mode_set = (CTX_data_edit_object(C) != NULL);
Scene *scene = CTX_data_scene(C);
if (!is_mode_set) {
- Object *ob = CTX_data_active_object(C);
- if (!ED_object_mode_compat_set(C, ob, mode_flag, op->reports)) {
+ if (!ED_object_mode_compat_set(C, workspace, mode_flag, op->reports)) {
return OPERATOR_CANCELLED;
}
}
@@ -657,9 +471,12 @@ static int editmode_toggle_poll(bContext *C)
if (ELEM(NULL, ob, ob->data) || ID_IS_LINKED(ob->data))
return 0;
+ const WorkSpace *workspace = CTX_wm_workspace(C);
+
/* if hidden but in edit mode, we still display */
- if ((ob->restrictflag & OB_RESTRICT_VIEW) && !(ob->mode & OB_MODE_EDIT))
+ if ((ob->restrictflag & OB_RESTRICT_VIEW) && !(workspace->object_mode & OB_MODE_EDIT)) {
return 0;
+ }
return OB_TYPE_SUPPORT_EDITMODE(ob->type);
}
@@ -684,13 +501,14 @@ void OBJECT_OT_editmode_toggle(wmOperatorType *ot)
static int posemode_exec(bContext *C, wmOperator *op)
{
+ WorkSpace *workspace = CTX_wm_workspace(C);
Base *base = CTX_data_active_base(C);
Object *ob = base->object;
const int mode_flag = OB_MODE_POSE;
- const bool is_mode_set = (ob->mode & mode_flag) != 0;
-
+ const bool is_mode_set = (workspace->object_mode & mode_flag) != 0;
+
if (!is_mode_set) {
- if (!ED_object_mode_compat_set(C, ob, mode_flag, op->reports)) {
+ if (!ED_object_mode_compat_set(C, workspace, mode_flag, op->reports)) {
return OPERATOR_CANCELLED;
}
}
@@ -726,7 +544,7 @@ void OBJECT_OT_posemode_toggle(wmOperatorType *ot)
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
-static void copymenu_properties(Scene *scene, View3D *v3d, Object *ob)
+static void copymenu_properties(ViewLayer *view_layer, Object *ob)
{
//XXX no longer used - to be removed - replaced by game_properties_copy_exec
bProperty *prop;
@@ -759,8 +577,8 @@ static void copymenu_properties(Scene *scene, View3D *v3d, Object *ob)
nr = pupmenu(str);
if (nr == 1 || nr == 2) {
- for (base = FIRSTBASE; base; base = base->next) {
- if ((base != BASACT) && (TESTBASELIB(v3d, base))) {
+ for (base = FIRSTBASE(view_layer); base; base = base->next) {
+ if ((base != BASACT(view_layer)) && (TESTBASELIB(base))) {
if (nr == 1) { /* replace */
BKE_bproperty_copy_list(&base->object->prop, &ob->prop);
}
@@ -776,8 +594,8 @@ static void copymenu_properties(Scene *scene, View3D *v3d, Object *ob)
prop = BLI_findlink(&ob->prop, nr - 4); /* account for first 3 menu items & menu index starting at 1*/
if (prop) {
- for (base = FIRSTBASE; base; base = base->next) {
- if ((base != BASACT) && (TESTBASELIB(v3d, base))) {
+ for (base = FIRSTBASE(view_layer); base; base = base->next) {
+ if ((base != BASACT(view_layer)) && (TESTBASELIB(base))) {
BKE_bproperty_object_set(base->object, prop);
}
}
@@ -787,14 +605,14 @@ static void copymenu_properties(Scene *scene, View3D *v3d, Object *ob)
}
-static void copymenu_logicbricks(Scene *scene, View3D *v3d, Object *ob)
+static void copymenu_logicbricks(ViewLayer *view_layer, Object *ob)
{
//XXX no longer used - to be removed - replaced by logicbricks_copy_exec
Base *base;
- for (base = FIRSTBASE; base; base = base->next) {
+ for (base = FIRSTBASE(view_layer); base; base = base->next) {
if (base->object != ob) {
- if (TESTBASELIB(v3d, base)) {
+ if (TESTBASELIB(base)) {
/* first: free all logic */
free_sensors(&base->object->sensors);
@@ -873,7 +691,7 @@ static void copy_texture_space(Object *to, Object *ob)
}
/* UNUSED, keep in case we want to copy functionality for use elsewhere */
-static void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event)
+static void copy_attr(Main *bmain, Scene *scene, ViewLayer *view_layer, short event)
{
Object *ob;
Base *base;
@@ -883,18 +701,18 @@ static void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event)
if (ID_IS_LINKED(scene)) return;
- if (!(ob = OBACT)) return;
+ if (!(ob = OBACT(view_layer))) return;
if (scene->obedit) { // XXX get from context
/* obedit_copymenu(); */
return;
}
if (event == 9) {
- copymenu_properties(scene, v3d, ob);
+ copymenu_properties(view_layer, ob);
return;
}
else if (event == 10) {
- copymenu_logicbricks(scene, v3d, ob);
+ copymenu_logicbricks(view_layer, ob);
return;
}
else if (event == 24) {
@@ -903,10 +721,10 @@ static void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event)
return;
}
- for (base = FIRSTBASE; base; base = base->next) {
- if (base != BASACT) {
- if (TESTBASELIB(v3d, base)) {
- DAG_id_tag_update(&base->object->id, OB_RECALC_DATA);
+ for (base = FIRSTBASE(view_layer); base; base = base->next) {
+ if (base != BASACT(view_layer)) {
+ if (TESTBASELIB(base)) {
+ DEG_id_tag_update(&base->object->id, OB_RECALC_DATA);
if (event == 1) { /* loc */
copy_v3_v3(base->object->loc, ob->loc);
@@ -1009,7 +827,7 @@ static void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event)
BLI_strncpy(cu1->family, cu->family, sizeof(cu1->family));
- DAG_id_tag_update(&base->object->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&base->object->id, OB_RECALC_DATA);
}
}
else if (event == 19) { /* bevel settings */
@@ -1025,7 +843,7 @@ static void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event)
cu1->ext1 = cu->ext1;
cu1->ext2 = cu->ext2;
- DAG_id_tag_update(&base->object->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&base->object->id, OB_RECALC_DATA);
}
}
else if (event == 25) { /* curve resolution */
@@ -1044,7 +862,7 @@ static void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event)
nu = nu->next;
}
- DAG_id_tag_update(&base->object->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&base->object->id, OB_RECALC_DATA);
}
}
else if (event == 21) {
@@ -1060,7 +878,7 @@ static void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event)
}
modifier_copyData(md, tmd);
- DAG_id_tag_update(&base->object->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&base->object->id, OB_RECALC_DATA);
}
}
}
@@ -1121,16 +939,16 @@ static void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event)
}
if (do_depgraph_update)
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
}
-static void UNUSED_FUNCTION(copy_attr_menu) (Main *bmain, Scene *scene, View3D *v3d)
+static void UNUSED_FUNCTION(copy_attr_menu) (Main *bmain, Scene *scene, ViewLayer *view_layer)
{
Object *ob;
short event;
char str[512];
- if (!(ob = OBACT)) return;
+ if (!(ob = OBACT(view_layer))) return;
if (scene->obedit) { /* XXX get from context */
/* if (ob->type == OB_MESH) */
@@ -1178,12 +996,12 @@ static void UNUSED_FUNCTION(copy_attr_menu) (Main *bmain, Scene *scene, View3D *
event = pupmenu(str);
if (event <= 0) return;
- copy_attr(bmain, scene, v3d, event);
+ copy_attr(bmain, scene, view_layer, event);
}
/* ******************* force field toggle operator ***************** */
-void ED_object_check_force_modifiers(Main *bmain, Scene *scene, Object *object)
+void ED_object_check_force_modifiers(Main *bmain, Scene *scene, Object *object, eObjectMode object_mode)
{
PartDeflect *pd = object->pd;
ModifierData *md = modifiers_findByType(object, eModifierType_Surface);
@@ -1192,7 +1010,7 @@ void ED_object_check_force_modifiers(Main *bmain, Scene *scene, Object *object)
if (!md) {
if (pd && (pd->shape == PFIELD_SHAPE_SURFACE) && !ELEM(pd->forcefield, 0, PFIELD_GUIDE, PFIELD_TEXTURE)) {
if (ELEM(object->type, OB_MESH, OB_SURF, OB_FONT, OB_CURVE)) {
- ED_object_modifier_add(NULL, bmain, scene, object, NULL, eModifierType_Surface);
+ ED_object_modifier_add(NULL, bmain, scene, object, object_mode, NULL, eModifierType_Surface);
}
}
}
@@ -1213,8 +1031,9 @@ static int forcefield_toggle_exec(bContext *C, wmOperator *UNUSED(op))
ob->pd->forcefield = PFIELD_FORCE;
else
ob->pd->forcefield = 0;
-
- ED_object_check_force_modifiers(CTX_data_main(C), CTX_data_scene(C), ob);
+
+ const WorkSpace *workspace = CTX_wm_workspace(C);
+ ED_object_check_force_modifiers(CTX_data_main(C), CTX_data_scene(C), ob, workspace->object_mode);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
@@ -1247,6 +1066,9 @@ void OBJECT_OT_forcefield_toggle(wmOperatorType *ot)
*/
void ED_objects_recalculate_paths(bContext *C, Scene *scene)
{
+ struct Main *bmain = CTX_data_main(C);
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
ListBase targets = {NULL, NULL};
/* loop over objects in scene */
@@ -1259,7 +1081,7 @@ void ED_objects_recalculate_paths(bContext *C, Scene *scene)
CTX_DATA_END;
/* recalculate paths, then free */
- animviz_calc_motionpaths(scene, &targets);
+ animviz_calc_motionpaths(&eval_ctx, bmain, scene, &targets);
BLI_freelistN(&targets);
}
@@ -1480,7 +1302,8 @@ static int shade_smooth_exec(bContext *C, wmOperator *op)
if (ob->type == OB_MESH) {
BKE_mesh_smooth_flag_set(ob, !clear);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ BKE_mesh_batch_cache_dirty(ob->data, BKE_MESH_BATCH_DIRTY_ALL);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
done = true;
@@ -1493,7 +1316,7 @@ static int shade_smooth_exec(bContext *C, wmOperator *op)
else nu->flag &= ~ME_SMOOTH;
}
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
done = true;
@@ -1544,7 +1367,7 @@ void OBJECT_OT_shade_smooth(wmOperatorType *ot)
/* ********************** */
-static void UNUSED_FUNCTION(image_aspect) (Scene *scene, View3D *v3d)
+static void UNUSED_FUNCTION(image_aspect) (Scene *scene, ViewLayer *view_layer)
{
/* all selected objects with an image map: scale in image aspect */
Base *base;
@@ -1557,8 +1380,8 @@ static void UNUSED_FUNCTION(image_aspect) (Scene *scene, View3D *v3d)
if (scene->obedit) return; // XXX get from context
if (ID_IS_LINKED(scene)) return;
- for (base = FIRSTBASE; base; base = base->next) {
- if (TESTBASELIB(v3d, base)) {
+ for (base = FIRSTBASE(view_layer); base; base = base->next) {
+ if (TESTBASELIB(base)) {
ob = base->object;
done = false;
@@ -1591,7 +1414,7 @@ static void UNUSED_FUNCTION(image_aspect) (Scene *scene, View3D *v3d)
else ob->size[1] = ob->size[0] * y / x;
done = true;
- DAG_id_tag_update(&ob->id, OB_RECALC_OB);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB);
BKE_image_release_ibuf(tex->ima, ibuf, NULL);
}
@@ -1722,13 +1545,14 @@ static bool object_mode_compat_test(Object *ob, eObjectMode mode)
*
* This is so each mode's exec function can call
*/
-bool ED_object_mode_compat_set(bContext *C, Object *ob, eObjectMode mode, ReportList *reports)
+bool ED_object_mode_compat_set(bContext *C, WorkSpace *workspace, eObjectMode mode, ReportList *reports)
{
bool ok;
- if (!ELEM(ob->mode, mode, OB_MODE_OBJECT)) {
- const char *opstring = object_mode_op_string(ob->mode);
+ if (!ELEM(workspace->object_mode, mode, OB_MODE_OBJECT)) {
+ const char *opstring = object_mode_op_string(workspace->object_mode);
+
WM_operator_name_call(C, opstring, WM_OP_EXEC_REGION_WIN, NULL);
- ok = ELEM(ob->mode, mode, OB_MODE_OBJECT);
+ ok = ELEM(workspace->object_mode, mode, OB_MODE_OBJECT);
if (!ok) {
wmOperatorType *ot = WM_operatortype_find(opstring, false);
BKE_reportf(reports, RPT_ERROR, "Unable to execute '%s', error changing modes", ot->name);
@@ -1756,10 +1580,11 @@ static int object_mode_set_poll(bContext *C)
static int object_mode_set_exec(bContext *C, wmOperator *op)
{
+ WorkSpace *workspace = CTX_wm_workspace(C);
Object *ob = CTX_data_active_object(C);
bGPdata *gpd = CTX_data_gpencil_data(C);
eObjectMode mode = RNA_enum_get(op->ptr, "mode");
- eObjectMode restore_mode = (ob) ? ob->mode : OB_MODE_OBJECT;
+ eObjectMode restore_mode = workspace->object_mode;
const bool toggle = RNA_boolean_get(op->ptr, "toggle");
if (gpd) {
@@ -1783,28 +1608,31 @@ static int object_mode_set_exec(bContext *C, wmOperator *op)
if (!ob || !object_mode_compat_test(ob, mode))
return OPERATOR_PASS_THROUGH;
- if (ob->mode != mode) {
+ if (workspace->object_mode != mode) {
/* we should be able to remove this call, each operator calls */
- ED_object_mode_compat_set(C, ob, mode, op->reports);
+ ED_object_mode_compat_set(C, workspace, mode, op->reports);
}
/* Exit current mode if it's not the mode we're setting */
- if (mode != OB_MODE_OBJECT && (ob->mode != mode || toggle)) {
+ if (mode != OB_MODE_OBJECT && (workspace->object_mode != mode || toggle)) {
/* Enter new mode */
ED_object_toggle_modes(C, mode);
}
if (toggle) {
/* Special case for Object mode! */
- if (mode == OB_MODE_OBJECT && restore_mode == OB_MODE_OBJECT && ob->restore_mode != OB_MODE_OBJECT) {
- ED_object_toggle_modes(C, ob->restore_mode);
+ if ((mode == OB_MODE_OBJECT) &&
+ (restore_mode == OB_MODE_OBJECT) &&
+ (workspace->object_mode_restore != OB_MODE_OBJECT))
+ {
+ ED_object_toggle_modes(C, workspace->object_mode_restore);
}
- else if (ob->mode == mode) {
+ else if (workspace->object_mode == mode) {
/* For toggling, store old mode so we know what to go back to */
- ob->restore_mode = restore_mode;
+ workspace->object_mode_restore = restore_mode;
}
- else if (ob->restore_mode != OB_MODE_OBJECT && ob->restore_mode != mode) {
- ED_object_toggle_modes(C, ob->restore_mode);
+ else if (!ELEM(workspace->object_mode_restore, mode, OB_MODE_OBJECT)) {
+ ED_object_toggle_modes(C, workspace->object_mode_restore);
}
}
@@ -1840,6 +1668,7 @@ void ED_object_toggle_modes(bContext *C, eObjectMode mode)
{
if (mode != OB_MODE_OBJECT) {
const char *opstring = object_mode_op_string(mode);
+
if (opstring) {
WM_operator_name_call(C, opstring, WM_OP_EXEC_REGION_WIN, NULL);
}
diff --git a/source/blender/editors/object/object_facemap_ops.c b/source/blender/editors/object/object_facemap_ops.c
new file mode 100644
index 00000000000..c865b45889a
--- /dev/null
+++ b/source/blender/editors/object/object_facemap_ops.c
@@ -0,0 +1,499 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2008 Blender Foundation.
+ * All rights reserved.
+ *
+ *
+ * Contributor(s): Blender Foundation
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include <string.h>
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_utildefines.h"
+#include "BLI_path_util.h"
+#include "BLI_string.h"
+#include "BLI_listbase.h"
+
+#include "DNA_object_types.h"
+#include "DNA_mesh_types.h"
+#include "DNA_workspace_types.h"
+
+#include "BKE_context.h"
+#include "BKE_customdata.h"
+#include "BKE_editmesh.h"
+#include "BKE_object.h"
+#include "BKE_object_facemap.h"
+#include "BKE_object_deform.h"
+
+#include "DEG_depsgraph.h"
+
+#include "RNA_define.h"
+#include "RNA_access.h"
+
+#include "WM_types.h"
+#include "WM_api.h"
+
+#include "ED_mesh.h"
+#include "ED_object.h"
+
+#include "object_intern.h"
+
+/* called while not in editmode */
+void ED_object_facemap_face_add(Object *ob, bFaceMap *fmap, int facenum)
+{
+ int fmap_nr;
+ if (GS(((ID *)ob->data)->name) != ID_ME)
+ return;
+
+ /* get the face map number, exit if it can't be found */
+ fmap_nr = BLI_findindex(&ob->fmaps, fmap);
+
+ if (fmap_nr != -1) {
+ int *facemap;
+ Mesh *me = ob->data;
+
+ /* if there's is no facemap layer then create one */
+ if ((facemap = CustomData_get_layer(&me->pdata, CD_FACEMAP)) == NULL)
+ facemap = CustomData_add_layer(&me->pdata, CD_FACEMAP, CD_DEFAULT, NULL, me->totpoly);
+
+ facemap[facenum] = fmap_nr;
+ }
+}
+
+/* called while not in editmode */
+void ED_object_facemap_face_remove(Object *ob, bFaceMap *fmap, int facenum)
+{
+ int fmap_nr;
+ if (GS(((ID *)ob->data)->name) != ID_ME)
+ return;
+
+ /* get the face map number, exit if it can't be found */
+ fmap_nr = BLI_findindex(&ob->fmaps, fmap);
+
+ if (fmap_nr != -1) {
+ int *facemap;
+ Mesh *me = ob->data;
+
+ /* if there's is no facemap layer then create one */
+ if ((facemap = CustomData_get_layer(&me->pdata, CD_FACEMAP)) == NULL)
+ return;
+
+ facemap[facenum] = -1;
+ }
+}
+
+static void object_fmap_swap_edit_mode(Object *ob, int num1, int num2)
+{
+ if (ob->type == OB_MESH) {
+ Mesh *me = ob->data;
+
+ if (me->edit_btmesh) {
+ BMEditMesh *em = me->edit_btmesh;
+ const int cd_fmap_offset = CustomData_get_offset(&em->bm->pdata, CD_FACEMAP);
+
+ if (cd_fmap_offset != -1) {
+ BMFace *efa;
+ BMIter iter;
+ int *map;
+
+ BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
+ map = BM_ELEM_CD_GET_VOID_P(efa, cd_fmap_offset);
+
+ if (map) {
+ if (num1 != -1) {
+ if (*map == num1)
+ *map = num2;
+ else if (*map == num2)
+ *map = num1;
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+static void object_fmap_swap_object_mode(Object *ob, int num1, int num2)
+{
+ if (ob->type == OB_MESH) {
+ Mesh *me = ob->data;
+
+ if (CustomData_has_layer(&me->pdata, CD_FACEMAP)) {
+ int *map = CustomData_get_layer(&me->pdata, CD_FACEMAP);
+ int i;
+
+ if (map) {
+ for (i = 0; i < me->totpoly; i++) {
+ if (num1 != -1) {
+ if (map[i] == num1)
+ map[i] = num2;
+ else if (map[i] == num2)
+ map[i] = num1;
+ }
+ }
+ }
+ }
+ }
+}
+
+static void object_facemap_swap(Object *ob, int num1, int num2)
+{
+ if (BKE_object_is_in_editmode(ob))
+ object_fmap_swap_edit_mode(ob, num1, num2);
+ else
+ object_fmap_swap_object_mode(ob, num1, num2);
+}
+
+static int face_map_supported_poll(bContext *C)
+{
+ Object *ob = ED_object_context(C);
+ ID *data = (ob) ? ob->data : NULL;
+ return (ob && !ob->id.lib && ob->type == OB_MESH && data && !data->lib);
+}
+
+static int face_map_supported_edit_mode_poll(bContext *C)
+{
+ Object *ob = ED_object_context(C);
+ ID *data = (ob) ? ob->data : NULL;
+ if (ob && !ob->id.lib && ob->type == OB_MESH && data && !data->lib) {
+ const WorkSpace *workspace = CTX_wm_workspace(C);
+ if (workspace->object_mode == OB_MODE_EDIT) {
+ return true;
+ }
+ }
+ return false;
+}
+
+static int face_map_add_exec(bContext *C, wmOperator *UNUSED(op))
+{
+ Object *ob = ED_object_context(C);
+
+ BKE_object_facemap_add(ob);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data);
+ WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
+
+ return OPERATOR_FINISHED;
+}
+
+void OBJECT_OT_face_map_add(struct wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Add Face Map";
+ ot->idname = "OBJECT_OT_face_map_add";
+ ot->description = "Add a new face map to the active object";
+
+ /* api callbacks */
+ ot->poll = face_map_supported_poll;
+ ot->exec = face_map_add_exec;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+}
+
+static int face_map_remove_exec(bContext *C, wmOperator *UNUSED(op))
+{
+ Object *ob = ED_object_context(C);
+ bFaceMap *fmap = BLI_findlink(&ob->fmaps, ob->actfmap - 1);
+
+ if (fmap) {
+ BKE_object_facemap_remove(ob, fmap);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data);
+ WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
+ }
+ return OPERATOR_FINISHED;
+}
+
+void OBJECT_OT_face_map_remove(struct wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Remove Face Map";
+ ot->idname = "OBJECT_OT_face_map_remove";
+ ot->description = "Remove a face map from the active object";
+
+ /* api callbacks */
+ ot->poll = face_map_supported_poll;
+ ot->exec = face_map_remove_exec;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+}
+
+static int face_map_assign_exec(bContext *C, wmOperator *UNUSED(op))
+{
+ Object *ob = ED_object_context(C);
+ bFaceMap *fmap = BLI_findlink(&ob->fmaps, ob->actfmap - 1);
+
+ if (fmap) {
+ Mesh *me = ob->data;
+ BMEditMesh *em = me->edit_btmesh;
+ BMFace *efa;
+ BMIter iter;
+ int *map;
+ int cd_fmap_offset;
+
+ if (!CustomData_has_layer(&em->bm->pdata, CD_FACEMAP))
+ BM_data_layer_add(em->bm, &em->bm->pdata, CD_FACEMAP);
+
+ cd_fmap_offset = CustomData_get_offset(&em->bm->pdata, CD_FACEMAP);
+
+ BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
+ map = BM_ELEM_CD_GET_VOID_P(efa, cd_fmap_offset);
+
+ if (BM_elem_flag_test(efa, BM_ELEM_SELECT)) {
+ *map = ob->actfmap - 1;
+ }
+ }
+
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data);
+ WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
+ }
+ return OPERATOR_FINISHED;
+}
+
+void OBJECT_OT_face_map_assign(struct wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Assign Face Map";
+ ot->idname = "OBJECT_OT_face_map_assign";
+ ot->description = "Assign faces to a face map";
+
+ /* api callbacks */
+ ot->poll = face_map_supported_edit_mode_poll;
+ ot->exec = face_map_assign_exec;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+}
+
+static int face_map_remove_from_exec(bContext *C, wmOperator *UNUSED(op))
+{
+ Object *ob = ED_object_context(C);
+ bFaceMap *fmap = BLI_findlink(&ob->fmaps, ob->actfmap - 1);
+
+ if (fmap) {
+ Mesh *me = ob->data;
+ BMEditMesh *em = me->edit_btmesh;
+ BMFace *efa;
+ BMIter iter;
+ int *map;
+ int cd_fmap_offset;
+ int mapindex = ob->actfmap - 1;
+
+ if (!CustomData_has_layer(&em->bm->pdata, CD_FACEMAP))
+ return OPERATOR_CANCELLED;
+
+ cd_fmap_offset = CustomData_get_offset(&em->bm->pdata, CD_FACEMAP);
+
+ BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
+ map = BM_ELEM_CD_GET_VOID_P(efa, cd_fmap_offset);
+
+ if (BM_elem_flag_test(efa, BM_ELEM_SELECT) && *map == mapindex) {
+ *map = -1;
+ }
+ }
+
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data);
+ WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
+ }
+ return OPERATOR_FINISHED;
+}
+
+void OBJECT_OT_face_map_remove_from(struct wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Remove From Face Map";
+ ot->idname = "OBJECT_OT_face_map_remove_from";
+ ot->description = "Remove faces from a face map";
+
+ /* api callbacks */
+ ot->poll = face_map_supported_edit_mode_poll;
+ ot->exec = face_map_remove_from_exec;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+}
+
+static void fmap_select(Object *ob, bool select)
+{
+ Mesh *me = ob->data;
+ BMEditMesh *em = me->edit_btmesh;
+ BMFace *efa;
+ BMIter iter;
+ int *map;
+ int cd_fmap_offset;
+ int mapindex = ob->actfmap - 1;
+
+ if (!CustomData_has_layer(&em->bm->pdata, CD_FACEMAP))
+ BM_data_layer_add(em->bm, &em->bm->pdata, CD_FACEMAP);
+
+ cd_fmap_offset = CustomData_get_offset(&em->bm->pdata, CD_FACEMAP);
+
+ BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
+ map = BM_ELEM_CD_GET_VOID_P(efa, cd_fmap_offset);
+
+ if (*map == mapindex) {
+ BM_face_select_set(em->bm, efa, select);
+ }
+ }
+}
+
+static int face_map_select_exec(bContext *C, wmOperator *UNUSED(op))
+{
+ Object *ob = ED_object_context(C);
+ bFaceMap *fmap = BLI_findlink(&ob->fmaps, ob->actfmap - 1);
+
+ if (fmap) {
+ fmap_select(ob, true);
+
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data);
+ WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
+ }
+ return OPERATOR_FINISHED;
+}
+
+void OBJECT_OT_face_map_select(struct wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Select Face Map Faces";
+ ot->idname = "OBJECT_OT_face_map_select";
+ ot->description = "Select faces belonging to a face map";
+
+ /* api callbacks */
+ ot->poll = face_map_supported_edit_mode_poll;
+ ot->exec = face_map_select_exec;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+}
+
+static int face_map_deselect_exec(bContext *C, wmOperator *UNUSED(op))
+{
+ Object *ob = ED_object_context(C);
+ bFaceMap *fmap = BLI_findlink(&ob->fmaps, ob->actfmap - 1);
+
+ if (fmap) {
+ fmap_select(ob, false);
+
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data);
+ WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
+ }
+ return OPERATOR_FINISHED;
+}
+
+void OBJECT_OT_face_map_deselect(struct wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Deselect Face Map Faces";
+ ot->idname = "OBJECT_OT_face_map_deselect";
+ ot->description = "Deselect faces belonging to a face map";
+
+ /* api callbacks */
+ ot->poll = face_map_supported_edit_mode_poll;
+ ot->exec = face_map_deselect_exec;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+}
+
+
+static int face_map_move_exec(bContext *C, wmOperator *op)
+{
+ Object *ob = ED_object_context(C);
+ bFaceMap *fmap;
+ int dir = RNA_enum_get(op->ptr, "direction");
+ int pos1, pos2 = -1, count;
+
+ fmap = BLI_findlink(&ob->fmaps, ob->actfmap - 1);
+ if (!fmap) {
+ return OPERATOR_CANCELLED;
+ }
+
+ count = BLI_listbase_count(&ob->fmaps);
+ pos1 = BLI_findindex(&ob->fmaps, fmap);
+
+ if (dir == 1) { /*up*/
+ void *prev = fmap->prev;
+
+ if (prev) {
+ pos2 = pos1 - 1;
+ }
+ else {
+ pos2 = count - 1;
+ }
+
+ BLI_remlink(&ob->fmaps, fmap);
+ BLI_insertlinkbefore(&ob->fmaps, prev, fmap);
+ }
+ else { /*down*/
+ void *next = fmap->next;
+
+ if (next) {
+ pos2 = pos1 + 1;
+ }
+ else {
+ pos2 = 0;
+ }
+
+ BLI_remlink(&ob->fmaps, fmap);
+ BLI_insertlinkafter(&ob->fmaps, next, fmap);
+ }
+
+ /* iterate through mesh and substitute the indices as necessary */
+ object_facemap_swap(ob, pos2, pos1);
+
+ ob->actfmap = pos2 + 1;
+
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ WM_event_add_notifier(C, NC_GEOM | ND_VERTEX_GROUP, ob);
+
+ return OPERATOR_FINISHED;
+}
+
+
+void OBJECT_OT_face_map_move(wmOperatorType *ot)
+{
+ static EnumPropertyItem fmap_slot_move[] = {
+ {1, "UP", 0, "Up", ""},
+ {-1, "DOWN", 0, "Down", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
+
+ /* identifiers */
+ ot->name = "Move Face Map";
+ ot->idname = "OBJECT_OT_face_map_move";
+ ot->description = "Move the active face map up/down in the list";
+
+ /* api callbacks */
+ ot->poll = face_map_supported_poll;
+ ot->exec = face_map_move_exec;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+
+ RNA_def_enum(ot->srna, "direction", fmap_slot_move, 0, "Direction", "Direction to move, UP or DOWN");
+}
diff --git a/source/blender/editors/object/object_group.c b/source/blender/editors/object/object_group.c
index 46c2c4e4b7d..cb0fbdda970 100644
--- a/source/blender/editors/object/object_group.c
+++ b/source/blender/editors/object/object_group.c
@@ -40,7 +40,6 @@
#include "DNA_scene_types.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_group.h"
#include "BKE_library.h"
#include "BKE_library_remap.h"
@@ -48,6 +47,8 @@
#include "BKE_report.h"
#include "BKE_object.h"
+#include "DEG_depsgraph_build.h"
+
#include "ED_screen.h"
#include "ED_object.h"
@@ -128,7 +129,6 @@ static int objects_add_active_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Main *bmain = CTX_data_main(C);
- Scene *scene = CTX_data_scene(C);
int single_group_index = RNA_enum_get(op->ptr, "group");
Group *single_group = group_object_active_find_index(ob, single_group_index);
Group *group;
@@ -151,7 +151,7 @@ static int objects_add_active_exec(bContext *C, wmOperator *op)
continue;
if (!BKE_group_object_cyclic_check(bmain, base->object, group)) {
- BKE_group_object_add(group, base->object, scene, base);
+ BKE_group_object_add(group, base->object);
updated = true;
}
else {
@@ -167,7 +167,7 @@ static int objects_add_active_exec(bContext *C, wmOperator *op)
if (!updated)
return OPERATOR_CANCELLED;
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
WM_event_add_notifier(C, NC_GROUP | NA_EDITED, NULL);
return OPERATOR_FINISHED;
@@ -200,8 +200,8 @@ void GROUP_OT_objects_add_active(wmOperatorType *ot)
static int objects_remove_active_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
- Scene *scene = CTX_data_scene(C);
- Object *ob = OBACT;
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Object *ob = OBACT(view_layer);
int single_group_index = RNA_enum_get(op->ptr, "group");
Group *single_group = group_object_active_find_index(ob, single_group_index);
Group *group;
@@ -221,7 +221,7 @@ static int objects_remove_active_exec(bContext *C, wmOperator *op)
/* Remove groups from selected objects */
CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases)
{
- BKE_group_object_unlink(group, base->object, scene, base);
+ BKE_group_object_unlink(group, base->object);
ok = 1;
}
CTX_DATA_END;
@@ -231,7 +231,7 @@ static int objects_remove_active_exec(bContext *C, wmOperator *op)
if (!ok)
BKE_report(op->reports, RPT_ERROR, "Active object contains no groups");
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
WM_event_add_notifier(C, NC_GROUP | NA_EDITED, NULL);
return OPERATOR_FINISHED;
@@ -264,15 +264,14 @@ void GROUP_OT_objects_remove_active(wmOperatorType *ot)
static int group_objects_remove_all_exec(bContext *C, wmOperator *UNUSED(op))
{
Main *bmain = CTX_data_main(C);
- Scene *scene = CTX_data_scene(C);
CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases)
{
- BKE_object_groups_clear(scene, base, base->object);
+ BKE_object_groups_clear(base->object);
}
CTX_DATA_END;
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
WM_event_add_notifier(C, NC_GROUP | NA_EDITED, NULL);
return OPERATOR_FINISHED;
@@ -297,7 +296,6 @@ static int group_objects_remove_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_context(C);
Main *bmain = CTX_data_main(C);
- Scene *scene = CTX_data_scene(C);
int single_group_index = RNA_enum_get(op->ptr, "group");
Group *single_group = group_object_active_find_index(ob, single_group_index);
Group *group;
@@ -315,7 +313,7 @@ static int group_objects_remove_exec(bContext *C, wmOperator *op)
/* now remove all selected objects from the group */
CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases)
{
- BKE_group_object_unlink(group, base->object, scene, base);
+ BKE_group_object_unlink(group, base->object);
updated = true;
}
CTX_DATA_END;
@@ -324,7 +322,7 @@ static int group_objects_remove_exec(bContext *C, wmOperator *op)
if (!updated)
return OPERATOR_CANCELLED;
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
WM_event_add_notifier(C, NC_GROUP | NA_EDITED, NULL);
return OPERATOR_FINISHED;
@@ -357,7 +355,6 @@ void GROUP_OT_objects_remove(wmOperatorType *ot)
static int group_create_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
- Scene *scene = CTX_data_scene(C);
Group *group = NULL;
char name[MAX_ID_NAME - 2]; /* id name */
@@ -367,11 +364,11 @@ static int group_create_exec(bContext *C, wmOperator *op)
CTX_DATA_BEGIN (C, Base *, base, selected_bases)
{
- BKE_group_object_add(group, base->object, scene, base);
+ BKE_group_object_add(group, base->object);
}
CTX_DATA_END;
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
WM_event_add_notifier(C, NC_GROUP | NA_EDITED, NULL);
return OPERATOR_FINISHED;
@@ -398,7 +395,6 @@ void GROUP_OT_create(wmOperatorType *ot)
static int group_add_exec(bContext *C, wmOperator *UNUSED(op))
{
- Scene *scene = CTX_data_scene(C);
Object *ob = ED_object_context(C);
Main *bmain = CTX_data_main(C);
Group *group;
@@ -407,7 +403,7 @@ static int group_add_exec(bContext *C, wmOperator *UNUSED(op))
return OPERATOR_CANCELLED;
group = BKE_group_add(bmain, "Group");
- BKE_group_object_add(group, ob, scene, NULL);
+ BKE_group_object_add(group, ob);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
@@ -432,7 +428,6 @@ void OBJECT_OT_group_add(wmOperatorType *ot)
static int group_link_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
- Scene *scene = CTX_data_scene(C);
Object *ob = ED_object_context(C);
Group *group = BLI_findlink(&bmain->group, RNA_enum_get(op->ptr, "group"));
@@ -457,7 +452,7 @@ static int group_link_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
- BKE_group_object_add(group, ob, scene, NULL);
+ BKE_group_object_add(group, ob);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
@@ -490,14 +485,13 @@ void OBJECT_OT_group_link(wmOperatorType *ot)
static int group_remove_exec(bContext *C, wmOperator *UNUSED(op))
{
- Scene *scene = CTX_data_scene(C);
Object *ob = ED_object_context(C);
Group *group = CTX_data_pointer_get_type(C, "group", &RNA_Group).data;
if (!ob || !group)
return OPERATOR_CANCELLED;
- BKE_group_object_unlink(group, ob, scene, NULL); /* base will be used if found */
+ BKE_group_object_unlink(group, ob);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
@@ -559,8 +553,10 @@ static int select_grouped_exec(bContext *C, wmOperator *UNUSED(op)) /* Select o
CTX_DATA_BEGIN (C, Base *, base, visible_bases)
{
- if (!(base->flag & SELECT) && BKE_group_object_exists(group, base->object)) {
- ED_base_object_select(base, BA_SELECT);
+ if (((base->flag & BASE_SELECTED) == 0) && ((base->flag & BASE_SELECTABLED) != 0)) {
+ if (BKE_group_object_exists(group, base->object)) {
+ ED_object_base_select(base, BA_SELECT);
+ }
}
}
CTX_DATA_END;
diff --git a/source/blender/editors/object/object_hook.c b/source/blender/editors/object/object_hook.c
index 42e3a4a6837..93546b1bd5d 100644
--- a/source/blender/editors/object/object_hook.c
+++ b/source/blender/editors/object/object_hook.c
@@ -48,7 +48,7 @@
#include "BKE_action.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
+#include "BKE_layer.h"
#include "BKE_main.h"
#include "BKE_modifier.h"
#include "BKE_object.h"
@@ -57,6 +57,9 @@
#include "BKE_deform.h"
#include "BKE_editmesh.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#include "RNA_define.h"
#include "RNA_access.h"
#include "RNA_enum_types.h"
@@ -318,7 +321,7 @@ static bool object_hook_index_array(Scene *scene, Object *obedit,
EDBM_mesh_load(obedit);
EDBM_mesh_make(scene->toolsettings, obedit, true);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
em = me->edit_btmesh;
@@ -445,34 +448,37 @@ static int hook_op_edit_poll(bContext *C)
return 0;
}
-static Object *add_hook_object_new(Main *bmain, Scene *scene, Object *obedit)
+static Object *add_hook_object_new(Main *bmain, Scene *scene, ViewLayer *view_layer, Object *obedit)
{
Base *base, *basedit;
Object *ob;
- ob = BKE_object_add(bmain, scene, OB_EMPTY, NULL);
+ ob = BKE_object_add(bmain, scene, view_layer, OB_EMPTY, NULL);
- basedit = BKE_scene_base_find(scene, obedit);
- base = scene->basact;
+ basedit = BKE_view_layer_base_find(view_layer, obedit);
+ base = view_layer->basact;
base->lay = ob->lay = obedit->lay;
- BLI_assert(scene->basact->object == ob);
+ BLI_assert(view_layer->basact->object == ob);
/* icky, BKE_object_add sets new base as active.
* so set it back to the original edit object */
- scene->basact = basedit;
+ view_layer->basact = basedit;
return ob;
}
-static int add_hook_object(Main *bmain, Scene *scene, Object *obedit, Object *ob, int mode, ReportList *reports)
+static int add_hook_object(const bContext *C, Main *bmain, Scene *scene, ViewLayer *view_layer, Object *obedit, Object *ob, int mode, ReportList *reports)
{
ModifierData *md = NULL;
HookModifierData *hmd = NULL;
+ EvaluationContext eval_ctx;
float cent[3];
float pose_mat[4][4];
int tot, ok, *indexar;
char name[MAX_NAME];
+ CTX_data_eval_ctx(C, &eval_ctx);
+
ok = object_hook_index_array(scene, obedit, &tot, &indexar, name, cent);
if (!ok) {
@@ -482,7 +488,7 @@ static int add_hook_object(Main *bmain, Scene *scene, Object *obedit, Object *ob
if (mode == OBJECT_ADDHOOK_NEWOB && !ob) {
- ob = add_hook_object_new(bmain, scene, obedit);
+ ob = add_hook_object_new(bmain, scene, view_layer, obedit);
/* transform cent to global coords for loc */
mul_v3_m4v3(ob->loc, obedit->obmat, cent);
@@ -541,13 +547,13 @@ static int add_hook_object(Main *bmain, Scene *scene, Object *obedit, Object *ob
/* matrix calculus */
/* vert x (obmat x hook->imat) x hook->obmat x ob->imat */
/* (parentinv ) */
- BKE_object_where_is_calc(scene, ob);
+ BKE_object_where_is_calc(&eval_ctx, scene, ob);
invert_m4_m4(ob->imat, ob->obmat);
/* apparently this call goes from right to left... */
mul_m4_series(hmd->parentinv, pose_mat, ob->imat, obedit->obmat);
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
return true;
}
@@ -556,6 +562,7 @@ static int object_add_hook_selob_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Object *obedit = CTX_data_edit_object(C);
Object *obsel = NULL;
const bool use_bone = RNA_boolean_get(op->ptr, "use_bone");
@@ -580,7 +587,7 @@ static int object_add_hook_selob_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
- if (add_hook_object(bmain, scene, obedit, obsel, mode, op->reports)) {
+ if (add_hook_object(C, bmain, scene, view_layer, obedit, obsel, mode, op->reports)) {
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, obedit);
return OPERATOR_FINISHED;
}
@@ -611,9 +618,10 @@ static int object_add_hook_newob_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Object *obedit = CTX_data_edit_object(C);
- if (add_hook_object(bmain, scene, obedit, NULL, OBJECT_ADDHOOK_NEWOB, op->reports)) {
+ if (add_hook_object(C, bmain, scene, view_layer, obedit, NULL, OBJECT_ADDHOOK_NEWOB, op->reports)) {
WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, obedit);
return OPERATOR_FINISHED;
@@ -655,7 +663,7 @@ static int object_hook_remove_exec(bContext *C, wmOperator *op)
BLI_remlink(&ob->modifiers, (ModifierData *)hmd);
modifier_free((ModifierData *)hmd);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
return OPERATOR_FINISHED;
@@ -729,7 +737,7 @@ static int object_hook_reset_exec(bContext *C, wmOperator *op)
BKE_object_modifier_hook_reset(ob, hmd);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
return OPERATOR_FINISHED;
@@ -779,7 +787,7 @@ static int object_hook_recenter_exec(bContext *C, wmOperator *op)
sub_v3_v3v3(hmd->cent, scene->cursor, ob->obmat[3]);
mul_m3_v3(imat, hmd->cent);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
return OPERATOR_FINISHED;
@@ -837,7 +845,7 @@ static int object_hook_assign_exec(bContext *C, wmOperator *op)
hmd->indexar = indexar;
hmd->totindex = tot;
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
return OPERATOR_FINISHED;
diff --git a/source/blender/editors/object/object_intern.h b/source/blender/editors/object/object_intern.h
index b8957bdedf9..03aacc86ea7 100644
--- a/source/blender/editors/object/object_intern.h
+++ b/source/blender/editors/object/object_intern.h
@@ -55,6 +55,7 @@ void OBJECT_OT_scale_clear(struct wmOperatorType *ot);
void OBJECT_OT_origin_clear(struct wmOperatorType *ot);
void OBJECT_OT_visual_transform_apply(struct wmOperatorType *ot);
void OBJECT_OT_transform_apply(struct wmOperatorType *ot);
+void OBJECT_OT_transform_axis_target(struct wmOperatorType *ot);
void OBJECT_OT_origin_set(struct wmOperatorType *ot);
/* object_relations.c */
@@ -67,10 +68,10 @@ void OBJECT_OT_track_clear(struct wmOperatorType *ot);
void OBJECT_OT_slow_parent_set(struct wmOperatorType *ot);
void OBJECT_OT_slow_parent_clear(struct wmOperatorType *ot);
void OBJECT_OT_make_local(struct wmOperatorType *ot);
+void OBJECT_OT_make_override_static(struct wmOperatorType *ot);
void OBJECT_OT_make_single_user(struct wmOperatorType *ot);
void OBJECT_OT_make_links_scene(struct wmOperatorType *ot);
void OBJECT_OT_make_links_data(struct wmOperatorType *ot);
-void OBJECT_OT_move_to_layer(struct wmOperatorType *ot);
void OBJECT_OT_drop_named_material(struct wmOperatorType *ot);
void OBJECT_OT_unlink_data(struct wmOperatorType *ot);
@@ -78,10 +79,6 @@ void OBJECT_OT_unlink_data(struct wmOperatorType *ot);
void OBJECT_OT_mode_set(struct wmOperatorType *ot);
void OBJECT_OT_editmode_toggle(struct wmOperatorType *ot);
void OBJECT_OT_posemode_toggle(struct wmOperatorType *ot);
-void OBJECT_OT_hide_view_set(struct wmOperatorType *ot);
-void OBJECT_OT_hide_view_clear(struct wmOperatorType *ot);
-void OBJECT_OT_hide_render_set(struct wmOperatorType *ot);
-void OBJECT_OT_hide_render_clear(struct wmOperatorType *ot);
void OBJECT_OT_proxy_make(struct wmOperatorType *ot);
void OBJECT_OT_shade_smooth(struct wmOperatorType *ot);
void OBJECT_OT_shade_flat(struct wmOperatorType *ot);
@@ -117,6 +114,7 @@ void OBJECT_OT_metaball_add(struct wmOperatorType *ot);
void OBJECT_OT_text_add(struct wmOperatorType *ot);
void OBJECT_OT_armature_add(struct wmOperatorType *ot);
void OBJECT_OT_empty_add(struct wmOperatorType *ot);
+void OBJECT_OT_lightprobe_add(struct wmOperatorType *ot);
void OBJECT_OT_drop_named_image(struct wmOperatorType *ot);
void OBJECT_OT_lamp_add(struct wmOperatorType *ot);
void OBJECT_OT_effector_add(struct wmOperatorType *ot);
@@ -247,6 +245,15 @@ void OBJECT_OT_vertex_weight_set_active(struct wmOperatorType *ot);
void OBJECT_OT_vertex_weight_normalize_active_vertex(struct wmOperatorType *ot);
void OBJECT_OT_vertex_weight_copy(struct wmOperatorType *ot);
+/* object_facemap_ops.c */
+void OBJECT_OT_face_map_add(struct wmOperatorType *ot);
+void OBJECT_OT_face_map_remove(struct wmOperatorType *ot);
+void OBJECT_OT_face_map_assign(struct wmOperatorType *ot);
+void OBJECT_OT_face_map_remove_from(struct wmOperatorType *ot);
+void OBJECT_OT_face_map_select(struct wmOperatorType *ot);
+void OBJECT_OT_face_map_deselect(struct wmOperatorType *ot);
+void OBJECT_OT_face_map_move(struct wmOperatorType *ot);
+
/* object_warp.c */
void TRANSFORM_OT_vertex_warp(struct wmOperatorType *ot);
diff --git a/source/blender/editors/object/object_lattice.c b/source/blender/editors/object/object_lattice.c
index 57053ddc020..b2f9bee27ff 100644
--- a/source/blender/editors/object/object_lattice.c
+++ b/source/blender/editors/object/object_lattice.c
@@ -52,12 +52,13 @@
#include "RNA_enum_types.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_key.h"
#include "BKE_lattice.h"
#include "BKE_deform.h"
#include "BKE_report.h"
+#include "DEG_depsgraph.h"
+
#include "ED_lattice.h"
#include "ED_object.h"
#include "ED_screen.h"
@@ -590,7 +591,7 @@ static int make_regular_exec(bContext *C, wmOperator *UNUSED(op))
BKE_lattice_resize(lt, lt->pntsu, lt->pntsv, lt->pntsw, NULL);
}
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data);
return OPERATOR_FINISHED;
@@ -810,7 +811,7 @@ static int lattice_flip_exec(bContext *C, wmOperator *op)
}
/* updates */
- DAG_id_tag_update(&obedit->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&obedit->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
return OPERATOR_FINISHED;
diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c
index 81883725f64..78554713f4d 100644
--- a/source/blender/editors/object/object_modifier.c
+++ b/source/blender/editors/object/object_modifier.c
@@ -54,7 +54,6 @@
#include "BKE_animsys.h"
#include "BKE_curve.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_displist.h"
#include "BKE_DerivedMesh.h"
#include "BKE_effect.h"
@@ -75,6 +74,9 @@
#include "BKE_softbody.h"
#include "BKE_editmesh.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#include "RNA_access.h"
#include "RNA_define.h"
#include "RNA_enum_types.h"
@@ -93,7 +95,10 @@ static void modifier_skin_customdata_delete(struct Object *ob);
/******************************** API ****************************/
-ModifierData *ED_object_modifier_add(ReportList *reports, Main *bmain, Scene *scene, Object *ob, const char *name, int type)
+ModifierData *ED_object_modifier_add(
+ ReportList *reports,
+ Main *bmain, Scene *scene,
+ Object *ob, eObjectMode object_mode, const char *name, int type)
{
ModifierData *md = NULL, *new_md = NULL;
const ModifierTypeInfo *mti = modifierType_getInfo(type);
@@ -160,7 +165,7 @@ ModifierData *ED_object_modifier_add(ReportList *reports, Main *bmain, Scene *sc
/* set totlvl from existing MDISPS layer if object already had it */
multiresModifier_set_levels_from_disps((MultiresModifierData *)new_md, ob);
- if (ob->mode & OB_MODE_SCULPT) {
+ if (object_mode & OB_MODE_SCULPT) {
/* ensure that grid paint mask layer is created */
BKE_sculpt_mask_layers_ensure(ob, (MultiresModifierData *)new_md);
}
@@ -171,8 +176,8 @@ ModifierData *ED_object_modifier_add(ReportList *reports, Main *bmain, Scene *sc
}
}
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
- DAG_relations_tag_update(bmain);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_relations_tag_update(bmain);
return new_md;
}
@@ -200,9 +205,11 @@ static bool object_has_modifier(const Object *ob, const ModifierData *exclude,
* If the callback ever returns true, iteration will stop and the
* function value will be true. Otherwise the function returns false.
*/
-bool ED_object_iter_other(Main *bmain, Object *orig_ob, const bool include_orig,
- bool (*callback)(Object *ob, void *callback_data),
- void *callback_data)
+bool ED_object_iter_other(
+ const EvaluationContext *eval_ctx,
+ Main *bmain, Object *orig_ob, const bool include_orig,
+ bool (*callback)(const EvaluationContext *eval_ctx, Object *ob, void *callback_data),
+ void *callback_data)
{
ID *ob_data_id = orig_ob->data;
int users = ob_data_id->us;
@@ -221,7 +228,7 @@ bool ED_object_iter_other(Main *bmain, Object *orig_ob, const bool include_orig,
if (((ob != orig_ob) || include_orig) &&
(ob->data == orig_ob->data))
{
- if (callback(ob, callback_data))
+ if (callback(eval_ctx, ob, callback_data))
return true;
totfound++;
@@ -229,13 +236,15 @@ bool ED_object_iter_other(Main *bmain, Object *orig_ob, const bool include_orig,
}
}
else if (include_orig) {
- return callback(orig_ob, callback_data);
+ return callback(eval_ctx, orig_ob, callback_data);
}
return false;
}
-static bool object_has_modifier_cb(Object *ob, void *data)
+static bool object_has_modifier_cb(
+ const EvaluationContext *UNUSED(eval_ctx),
+ Object *ob, void *data)
{
ModifierType type = *((ModifierType *)data);
@@ -245,15 +254,17 @@ static bool object_has_modifier_cb(Object *ob, void *data)
/* Use with ED_object_iter_other(). Sets the total number of levels
* for any multires modifiers on the object to the int pointed to by
* callback_data. */
-bool ED_object_multires_update_totlevels_cb(Object *ob, void *totlevel_v)
+bool ED_object_multires_update_totlevels_cb(
+ const struct EvaluationContext *eval_ctx,
+ Object *ob, void *totlevel_v)
{
ModifierData *md;
int totlevel = *((char *)totlevel_v);
for (md = ob->modifiers.first; md; md = md->next) {
if (md->type == eModifierType_Multires) {
- multires_set_tot_level(ob, (MultiresModifierData *)md, totlevel);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ multires_set_tot_level((MultiresModifierData *)md, totlevel, eval_ctx->object_mode);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
}
}
return false;
@@ -265,7 +276,7 @@ static bool object_modifier_safe_to_delete(Main *bmain, Object *ob,
ModifierType type)
{
return (!object_has_modifier(ob, exclude, type) &&
- !ED_object_iter_other(bmain, ob, false,
+ !ED_object_iter_other(NULL, bmain, ob, false,
object_has_modifier_cb, &type));
}
@@ -314,13 +325,15 @@ static bool object_modifier_remove(Main *bmain, Object *ob, ModifierData *md,
modifier_skin_customdata_delete(ob);
}
+#if 0 /* not needed now modes are in workspace */
if (ELEM(md->type, eModifierType_Softbody, eModifierType_Cloth) &&
BLI_listbase_is_empty(&ob->particlesystem))
{
ob->mode &= ~OB_MODE_PARTICLE_EDIT;
}
+#endif
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
BLI_remlink(&ob->modifiers, md);
modifier_free(md);
@@ -341,8 +354,8 @@ bool ED_object_modifier_remove(ReportList *reports, Main *bmain, Object *ob, Mod
return 0;
}
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
- DAG_relations_tag_update(bmain);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_relations_tag_update(bmain);
return 1;
}
@@ -365,8 +378,8 @@ void ED_object_modifier_clear(Main *bmain, Object *ob)
md = next_md;
}
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
- DAG_relations_tag_update(bmain);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_relations_tag_update(bmain);
}
int ED_object_modifier_move_up(ReportList *reports, Object *ob, ModifierData *md)
@@ -411,7 +424,9 @@ int ED_object_modifier_move_down(ReportList *reports, Object *ob, ModifierData *
return 1;
}
-int ED_object_modifier_convert(ReportList *UNUSED(reports), Main *bmain, Scene *scene, Object *ob, ModifierData *md)
+int ED_object_modifier_convert(
+ ReportList *UNUSED(reports), Main *bmain, Scene *scene,
+ ViewLayer *view_layer, Object *UNUSED(ob), eObjectMode object_mode, ModifierData *md)
{
Object *obn;
ParticleSystem *psys;
@@ -425,7 +440,7 @@ int ED_object_modifier_convert(ReportList *UNUSED(reports), Main *bmain, Scene *
int totpart = 0, totchild = 0;
if (md->type != eModifierType_ParticleSystem) return 0;
- if (ob && ob->mode & OB_MODE_PARTICLE_EDIT) return 0;
+ if (object_mode & OB_MODE_PARTICLE_EDIT) return 0;
psys = ((ParticleSystemModifierData *)md)->psys;
part = psys->part;
@@ -463,7 +478,7 @@ int ED_object_modifier_convert(ReportList *UNUSED(reports), Main *bmain, Scene *
if (totvert == 0) return 0;
/* add new mesh */
- obn = BKE_object_add(bmain, scene, OB_MESH, NULL);
+ obn = BKE_object_add(bmain, scene, view_layer, OB_MESH, NULL);
me = obn->data;
me->totvert = totvert;
@@ -515,14 +530,17 @@ int ED_object_modifier_convert(ReportList *UNUSED(reports), Main *bmain, Scene *
}
}
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
return 1;
}
-static int modifier_apply_shape(ReportList *reports, Scene *scene, Object *ob, ModifierData *md)
+static int modifier_apply_shape(ReportList *reports, const bContext *C, Scene *scene, Object *ob, ModifierData *md)
{
const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
+ EvaluationContext eval_ctx;
+
+ CTX_data_eval_ctx(C, &eval_ctx);
md->scene = scene;
@@ -553,7 +571,7 @@ static int modifier_apply_shape(ReportList *reports, Scene *scene, Object *ob, M
return 0;
}
- dm = mesh_create_derived_for_modifier(scene, ob, md, 0);
+ dm = mesh_create_derived_for_modifier(&eval_ctx, scene, ob, md, 0);
if (!dm) {
BKE_report(reports, RPT_ERROR, "Modifier is disabled or returned error, skipping apply");
return 0;
@@ -580,9 +598,12 @@ static int modifier_apply_shape(ReportList *reports, Scene *scene, Object *ob, M
return 1;
}
-static int modifier_apply_obdata(ReportList *reports, Scene *scene, Object *ob, ModifierData *md)
+static int modifier_apply_obdata(ReportList *reports, const bContext *C, Scene *scene, Object *ob, ModifierData *md)
{
const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
+ EvaluationContext eval_ctx;
+
+ CTX_data_eval_ctx(C, &eval_ctx);
md->scene = scene;
@@ -606,13 +627,13 @@ static int modifier_apply_obdata(ReportList *reports, Scene *scene, Object *ob,
multires_force_update(ob);
if (mmd && mmd->totlvl && mti->type == eModifierTypeType_OnlyDeform) {
- if (!multiresModifier_reshapeFromDeformMod(scene, mmd, ob, md)) {
+ if (!multiresModifier_reshapeFromDeformMod(&eval_ctx, scene, mmd, ob, md)) {
BKE_report(reports, RPT_ERROR, "Multires modifier returned error, skipping apply");
return 0;
}
}
else {
- dm = mesh_create_derived_for_modifier(scene, ob, md, 1);
+ dm = mesh_create_derived_for_modifier(&eval_ctx, scene, ob, md, 1);
if (!dm) {
BKE_report(reports, RPT_ERROR, "Modifier returned error, skipping apply");
return 0;
@@ -638,12 +659,12 @@ static int modifier_apply_obdata(ReportList *reports, Scene *scene, Object *ob,
BKE_report(reports, RPT_INFO, "Applied modifier only changed CV points, not tessellated/bevel vertices");
vertexCos = BKE_curve_nurbs_vertexCos_get(&cu->nurb, &numVerts);
- mti->deformVerts(md, ob, NULL, vertexCos, numVerts, 0);
+ mti->deformVerts(md, &eval_ctx, ob, NULL, vertexCos, numVerts, 0);
BK_curve_nurbs_vertexCos_apply(&cu->nurb, vertexCos);
MEM_freeN(vertexCos);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
}
else {
BKE_report(reports, RPT_ERROR, "Cannot apply modifier for this object type");
@@ -660,15 +681,16 @@ static int modifier_apply_obdata(ReportList *reports, Scene *scene, Object *ob,
if (psys->part->type != PART_HAIR)
continue;
- psys_apply_hair_lattice(scene, ob, psys);
+ psys_apply_hair_lattice(&eval_ctx, scene, ob, psys);
}
}
return 1;
}
-int ED_object_modifier_apply(ReportList *reports, Scene *scene, Object *ob, ModifierData *md, int mode)
+int ED_object_modifier_apply(ReportList *reports, const bContext *C, Scene *scene, Object *ob, ModifierData *md, int mode)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
int prev_mode;
if (scene->obedit) {
@@ -679,7 +701,7 @@ int ED_object_modifier_apply(ReportList *reports, Scene *scene, Object *ob, Modi
BKE_report(reports, RPT_ERROR, "Modifiers cannot be applied to multi-user data");
return 0;
}
- else if ((ob->mode & OB_MODE_SCULPT) &&
+ else if ((workspace->object_mode & OB_MODE_SCULPT) &&
(find_multires_modifier_before(scene, md)) &&
(modifier_isSameTopology(md) == false))
{
@@ -695,13 +717,13 @@ int ED_object_modifier_apply(ReportList *reports, Scene *scene, Object *ob, Modi
md->mode |= eModifierMode_Realtime;
if (mode == MODIFIER_APPLY_SHAPE) {
- if (!modifier_apply_shape(reports, scene, ob, md)) {
+ if (!modifier_apply_shape(reports, C, scene, ob, md)) {
md->mode = prev_mode;
return 0;
}
}
else {
- if (!modifier_apply_obdata(reports, scene, ob, md)) {
+ if (!modifier_apply_obdata(reports, C, scene, ob, md)) {
md->mode = prev_mode;
return 0;
}
@@ -731,12 +753,13 @@ int ED_object_modifier_copy(ReportList *UNUSED(reports), Object *ob, ModifierDat
static int modifier_add_exec(bContext *C, wmOperator *op)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
Object *ob = ED_object_active_context(C);
int type = RNA_enum_get(op->ptr, "type");
- if (!ED_object_modifier_add(op->reports, bmain, scene, ob, NULL, type))
+ if (!ED_object_modifier_add(op->reports, bmain, scene, ob, workspace->object_mode, NULL, type))
return OPERATOR_CANCELLED;
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
@@ -873,11 +896,12 @@ ModifierData *edit_modifier_property_get(wmOperator *op, Object *ob, int type)
static int modifier_remove_exec(bContext *C, wmOperator *op)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Main *bmain = CTX_data_main(C);
- Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Object *ob = ED_object_active_context(C);
ModifierData *md = edit_modifier_property_get(op, ob, 0);
- int mode_orig = ob->mode;
+ int mode_orig = workspace->object_mode;
if (!md || !ED_object_modifier_remove(op->reports, bmain, ob, md))
return OPERATOR_CANCELLED;
@@ -885,11 +909,13 @@ static int modifier_remove_exec(bContext *C, wmOperator *op)
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
/* if cloth/softbody was removed, particle mode could be cleared */
- if (mode_orig & OB_MODE_PARTICLE_EDIT)
- if ((ob->mode & OB_MODE_PARTICLE_EDIT) == 0)
- if (scene->basact && scene->basact->object == ob)
+ if (mode_orig & OB_MODE_PARTICLE_EDIT) {
+ if ((workspace->object_mode & OB_MODE_PARTICLE_EDIT) == 0) {
+ if (view_layer->basact && view_layer->basact->object == ob) {
WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_MODE_OBJECT, NULL);
-
+ }
+ }
+ }
return OPERATOR_FINISHED;
}
@@ -926,7 +952,7 @@ static int modifier_move_up_exec(bContext *C, wmOperator *op)
if (!md || !ED_object_modifier_move_up(op->reports, ob, md))
return OPERATOR_CANCELLED;
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
return OPERATOR_FINISHED;
@@ -965,7 +991,7 @@ static int modifier_move_down_exec(bContext *C, wmOperator *op)
if (!md || !ED_object_modifier_move_down(op->reports, ob, md))
return OPERATOR_CANCELLED;
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
return OPERATOR_FINISHED;
@@ -1003,11 +1029,11 @@ static int modifier_apply_exec(bContext *C, wmOperator *op)
ModifierData *md = edit_modifier_property_get(op, ob, 0);
int apply_as = RNA_enum_get(op->ptr, "apply_as");
- if (!md || !ED_object_modifier_apply(op->reports, scene, ob, md, apply_as)) {
+ if (!md || !ED_object_modifier_apply(op->reports, C, scene, ob, md, apply_as)) {
return OPERATOR_CANCELLED;
}
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
return OPERATOR_FINISHED;
@@ -1048,15 +1074,18 @@ void OBJECT_OT_modifier_apply(wmOperatorType *ot)
static int modifier_convert_exec(bContext *C, wmOperator *op)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Object *ob = ED_object_active_context(C);
ModifierData *md = edit_modifier_property_get(op, ob, 0);
-
- if (!md || !ED_object_modifier_convert(op->reports, bmain, scene, ob, md))
+
+ if (!md || !ED_object_modifier_convert(op->reports, bmain, scene, view_layer, ob, workspace->object_mode, md)) {
return OPERATOR_CANCELLED;
+ }
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
return OPERATOR_FINISHED;
@@ -1095,7 +1124,7 @@ static int modifier_copy_exec(bContext *C, wmOperator *op)
if (!md || !ED_object_modifier_copy(op->reports, ob, md))
return OPERATOR_CANCELLED;
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
return OPERATOR_FINISHED;
@@ -1138,10 +1167,13 @@ static int multires_higher_levels_delete_exec(bContext *C, wmOperator *op)
if (!mmd)
return OPERATOR_CANCELLED;
-
- multiresModifier_del_levels(mmd, ob, 1);
- ED_object_iter_other(CTX_data_main(C), ob, true,
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
+ multiresModifier_del_levels(mmd, ob, 1, eval_ctx.object_mode);
+
+ ED_object_iter_other(&eval_ctx, CTX_data_main(C), ob, true,
ED_object_multires_update_totlevels_cb,
&mmd->totlvl);
@@ -1182,17 +1214,20 @@ static int multires_subdivide_exec(bContext *C, wmOperator *op)
if (!mmd)
return OPERATOR_CANCELLED;
-
- multiresModifier_subdivide(mmd, ob, 0, mmd->simple);
- ED_object_iter_other(CTX_data_main(C), ob, true,
- ED_object_multires_update_totlevels_cb,
- &mmd->totlvl);
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
+ multiresModifier_subdivide(mmd, ob, 0, mmd->simple, eval_ctx.object_mode);
+
+ ED_object_iter_other(
+ &eval_ctx, CTX_data_main(C), ob, true,
+ ED_object_multires_update_totlevels_cb,
+ &mmd->totlvl);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
- if (ob->mode & OB_MODE_SCULPT) {
+ if (eval_ctx.mode & OB_MODE_SCULPT) {
/* ensure that grid paint mask layer is created */
BKE_sculpt_mask_layers_ensure(ob, mmd);
}
@@ -1229,8 +1264,11 @@ static int multires_reshape_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C), *secondob = NULL;
Scene *scene = CTX_data_scene(C);
+ EvaluationContext eval_ctx;
MultiresModifierData *mmd = (MultiresModifierData *)edit_modifier_property_get(op, ob, eModifierType_Multires);
+ CTX_data_eval_ctx(C, &eval_ctx);
+
if (!mmd)
return OPERATOR_CANCELLED;
@@ -1253,12 +1291,12 @@ static int multires_reshape_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
- if (!multiresModifier_reshape(scene, mmd, ob, secondob)) {
+ if (!multiresModifier_reshape(&eval_ctx, scene, mmd, ob, secondob)) {
BKE_report(op->reports, RPT_ERROR, "Objects do not have the same number of vertices");
return OPERATOR_CANCELLED;
}
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
return OPERATOR_FINISHED;
@@ -1403,10 +1441,11 @@ static int multires_base_apply_exec(bContext *C, wmOperator *op)
if (!mmd)
return OPERATOR_CANCELLED;
-
- multiresModifier_base_apply(mmd, ob);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ const WorkSpace *workspace = CTX_wm_workspace(C);
+ multiresModifier_base_apply(mmd, ob, workspace->object_mode);
+
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
return OPERATOR_FINISHED;
@@ -1512,7 +1551,7 @@ static int skin_root_mark_exec(bContext *C, wmOperator *UNUSED(op))
BLI_gset_free(visited, NULL);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
return OPERATOR_FINISHED;
@@ -1567,7 +1606,7 @@ static int skin_loose_mark_clear_exec(bContext *C, wmOperator *op)
}
}
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
return OPERATOR_FINISHED;
@@ -1617,7 +1656,7 @@ static int skin_radii_equalize_exec(bContext *C, wmOperator *UNUSED(op))
}
}
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
return OPERATOR_FINISHED;
@@ -1686,8 +1725,10 @@ static void skin_armature_bone_create(Object *skin_ob,
}
}
-static Object *modifier_skin_armature_create(Main *bmain, Scene *scene, Object *skin_ob)
+static Object *modifier_skin_armature_create(const bContext *C, Scene *scene, ViewLayer *view_layer, Object *skin_ob)
{
+ Main *bmain = CTX_data_main(C);
+ EvaluationContext eval_ctx;
BLI_bitmap *edges_visited;
DerivedMesh *deform_dm;
MVert *mvert;
@@ -1699,7 +1740,9 @@ static Object *modifier_skin_armature_create(Main *bmain, Scene *scene, Object *
int *emap_mem;
int v;
- deform_dm = mesh_get_derived_deform(scene, skin_ob, CD_MASK_BAREMESH);
+ CTX_data_eval_ctx(C, &eval_ctx);
+
+ deform_dm = mesh_get_derived_deform(&eval_ctx, scene, skin_ob, CD_MASK_BAREMESH);
mvert = deform_dm->getVertArray(deform_dm);
/* add vertex weights to original mesh */
@@ -1709,7 +1752,7 @@ static Object *modifier_skin_armature_create(Main *bmain, Scene *scene, Object *
NULL,
me->totvert);
- arm_ob = BKE_object_add(bmain, scene, OB_ARMATURE, NULL);
+ arm_ob = BKE_object_add(bmain, scene, view_layer, OB_ARMATURE, NULL);
BKE_object_transform_copy(arm_ob, skin_ob);
arm = arm_ob->data;
arm->layer = 1;
@@ -1768,6 +1811,7 @@ static int skin_armature_create_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Object *ob = CTX_data_active_object(C), *arm_ob;
Mesh *me = ob->data;
ModifierData *skin_md;
@@ -1779,7 +1823,7 @@ static int skin_armature_create_exec(bContext *C, wmOperator *op)
}
/* create new armature */
- arm_ob = modifier_skin_armature_create(bmain, scene, ob);
+ arm_ob = modifier_skin_armature_create(C, scene, view_layer, ob);
/* add a modifier to connect the new armature to the mesh */
arm_md = (ArmatureModifierData *)modifier_new(eModifierType_Armature);
@@ -1789,8 +1833,8 @@ static int skin_armature_create_exec(bContext *C, wmOperator *op)
arm_md->object = arm_ob;
arm_md->deformflag = ARM_DEF_VGROUP | ARM_DEF_QUATERNION;
- DAG_relations_tag_update(bmain);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_relations_tag_update(bmain);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
}
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
@@ -1857,7 +1901,7 @@ static int correctivesmooth_bind_exec(bContext *C, wmOperator *op)
csmd->bind_coords_num = (unsigned int)-1;
}
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
return OPERATOR_FINISHED;
@@ -1899,8 +1943,11 @@ static int meshdeform_bind_exec(bContext *C, wmOperator *op)
{
Scene *scene = CTX_data_scene(C);
Object *ob = ED_object_active_context(C);
+ EvaluationContext eval_ctx;
MeshDeformModifierData *mmd = (MeshDeformModifierData *)edit_modifier_property_get(op, ob, eModifierType_MeshDeform);
+ CTX_data_eval_ctx(C, &eval_ctx);
+
if (!mmd)
return OPERATOR_CANCELLED;
@@ -1926,7 +1973,7 @@ static int meshdeform_bind_exec(bContext *C, wmOperator *op)
mmd->totcagevert = 0;
mmd->totinfluence = 0;
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
}
else {
@@ -1938,17 +1985,17 @@ static int meshdeform_bind_exec(bContext *C, wmOperator *op)
mmd->modifier.mode |= eModifierMode_Realtime;
if (ob->type == OB_MESH) {
- dm = mesh_create_derived_view(scene, ob, 0);
+ dm = mesh_create_derived_view(&eval_ctx, scene, ob, 0);
dm->release(dm);
}
else if (ob->type == OB_LATTICE) {
- BKE_lattice_modifiers_calc(scene, ob);
+ BKE_lattice_modifiers_calc(&eval_ctx, scene, ob);
}
else if (ob->type == OB_MBALL) {
- BKE_displist_make_mball(CTX_data_main(C)->eval_ctx, scene, ob);
+ BKE_displist_make_mball(&eval_ctx, scene, ob);
}
else if (ELEM(ob->type, OB_CURVE, OB_SURF, OB_FONT)) {
- BKE_displist_make_curveTypes(scene, ob, 0);
+ BKE_displist_make_curveTypes(&eval_ctx, scene, ob, 0);
}
mmd->bindfunc = NULL;
@@ -2000,7 +2047,7 @@ static int explode_refresh_exec(bContext *C, wmOperator *op)
emd->flag |= eExplodeFlag_CalcFaces;
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
return OPERATOR_FINISHED;
@@ -2145,7 +2192,7 @@ static int ocean_bake_exec(bContext *C, wmOperator *op)
if (free) {
omd->refresh |= MOD_OCEAN_REFRESH_CLEAR_CACHE;
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
return OPERATOR_FINISHED;
}
@@ -2173,7 +2220,7 @@ static int ocean_bake_exec(bContext *C, wmOperator *op)
* this part of the process before a threaded job is created */
//scene->r.cfra = f;
- //ED_update_for_newframe(CTX_data_main(C), scene, 1);
+ //ED_update_for_newframe(CTX_data_main(C), scene);
/* ok, this doesn't work with drivers, but is way faster.
* let's use this for now and hope nobody wants to drive the time value... */
@@ -2195,7 +2242,7 @@ static int ocean_bake_exec(bContext *C, wmOperator *op)
scene->r.cfra = cfra;
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
#endif
@@ -2268,7 +2315,7 @@ static int laplaciandeform_bind_exec(bContext *C, wmOperator *op)
else {
lmd->flag |= MOD_LAPLACIANDEFORM_BIND;
}
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
return OPERATOR_FINISHED;
}
@@ -2320,7 +2367,7 @@ static int surfacedeform_bind_exec(bContext *C, wmOperator *op)
smd->flags |= MOD_SDEF_BIND;
}
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
return OPERATOR_FINISHED;
diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c
index 9b9f77a1dbb..ba3541b428a 100644
--- a/source/blender/editors/object/object_ops.c
+++ b/source/blender/editors/object/object_ops.c
@@ -47,6 +47,8 @@
#include "ED_screen.h"
#include "ED_object.h"
+#include "DEG_depsgraph.h"
+
#include "object_intern.h"
@@ -61,16 +63,13 @@ void ED_operatortypes_object(void)
WM_operatortype_append(OBJECT_OT_origin_clear);
WM_operatortype_append(OBJECT_OT_visual_transform_apply);
WM_operatortype_append(OBJECT_OT_transform_apply);
+ WM_operatortype_append(OBJECT_OT_transform_axis_target);
WM_operatortype_append(OBJECT_OT_origin_set);
WM_operatortype_append(OBJECT_OT_mode_set);
WM_operatortype_append(OBJECT_OT_editmode_toggle);
WM_operatortype_append(OBJECT_OT_posemode_toggle);
WM_operatortype_append(OBJECT_OT_proxy_make);
- WM_operatortype_append(OBJECT_OT_hide_view_clear);
- WM_operatortype_append(OBJECT_OT_hide_view_set);
- WM_operatortype_append(OBJECT_OT_hide_render_clear);
- WM_operatortype_append(OBJECT_OT_hide_render_set);
WM_operatortype_append(OBJECT_OT_shade_smooth);
WM_operatortype_append(OBJECT_OT_shade_flat);
WM_operatortype_append(OBJECT_OT_paths_calculate);
@@ -87,16 +86,15 @@ void ED_operatortypes_object(void)
WM_operatortype_append(OBJECT_OT_slow_parent_set);
WM_operatortype_append(OBJECT_OT_slow_parent_clear);
WM_operatortype_append(OBJECT_OT_make_local);
+ WM_operatortype_append(OBJECT_OT_make_override_static);
WM_operatortype_append(OBJECT_OT_make_single_user);
WM_operatortype_append(OBJECT_OT_make_links_scene);
WM_operatortype_append(OBJECT_OT_make_links_data);
- WM_operatortype_append(OBJECT_OT_move_to_layer);
WM_operatortype_append(OBJECT_OT_select_random);
WM_operatortype_append(OBJECT_OT_select_all);
WM_operatortype_append(OBJECT_OT_select_same_group);
WM_operatortype_append(OBJECT_OT_select_by_type);
- WM_operatortype_append(OBJECT_OT_select_by_layer);
WM_operatortype_append(OBJECT_OT_select_linked);
WM_operatortype_append(OBJECT_OT_select_grouped);
WM_operatortype_append(OBJECT_OT_select_mirror);
@@ -113,6 +111,7 @@ void ED_operatortypes_object(void)
WM_operatortype_append(OBJECT_OT_text_add);
WM_operatortype_append(OBJECT_OT_armature_add);
WM_operatortype_append(OBJECT_OT_empty_add);
+ WM_operatortype_append(OBJECT_OT_lightprobe_add);
WM_operatortype_append(OBJECT_OT_drop_named_image);
WM_operatortype_append(OBJECT_OT_lamp_add);
WM_operatortype_append(OBJECT_OT_camera_add);
@@ -202,6 +201,14 @@ void ED_operatortypes_object(void)
WM_operatortype_append(OBJECT_OT_vertex_weight_normalize_active_vertex);
WM_operatortype_append(OBJECT_OT_vertex_weight_copy);
+ WM_operatortype_append(OBJECT_OT_face_map_add);
+ WM_operatortype_append(OBJECT_OT_face_map_remove);
+ WM_operatortype_append(OBJECT_OT_face_map_assign);
+ WM_operatortype_append(OBJECT_OT_face_map_remove_from);
+ WM_operatortype_append(OBJECT_OT_face_map_select);
+ WM_operatortype_append(OBJECT_OT_face_map_deselect);
+ WM_operatortype_append(OBJECT_OT_face_map_move);
+
WM_operatortype_append(TRANSFORM_OT_vertex_warp);
WM_operatortype_append(OBJECT_OT_game_property_new);
@@ -285,8 +292,9 @@ void ED_operatormacros_object(void)
static int object_mode_poll(bContext *C)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Object *ob = CTX_data_active_object(C);
- return (!ob || ob->mode == OB_MODE_OBJECT);
+ return (!ob || workspace->object_mode == OB_MODE_OBJECT);
}
void ED_keymap_object(wmKeyConfig *keyconf)
@@ -376,25 +384,6 @@ void ED_keymap_object(wmKeyConfig *keyconf)
WM_keymap_verify_item(keymap, "OBJECT_OT_origin_clear", OKEY, KM_PRESS, KM_ALT, 0);
- WM_keymap_add_item(keymap, "OBJECT_OT_hide_view_clear", HKEY, KM_PRESS, KM_ALT, 0);
- kmi = WM_keymap_add_item(keymap, "OBJECT_OT_hide_view_set", HKEY, KM_PRESS, 0, 0);
- RNA_boolean_set(kmi->ptr, "unselected", false);
-
- kmi = WM_keymap_add_item(keymap, "OBJECT_OT_hide_view_set", HKEY, KM_PRESS, KM_SHIFT, 0);
- RNA_boolean_set(kmi->ptr, "unselected", true);
-
- /* same as above but for rendering */
- WM_keymap_add_item(keymap, "OBJECT_OT_hide_render_clear", HKEY, KM_PRESS, KM_ALT | KM_CTRL, 0);
- WM_keymap_add_item(keymap, "OBJECT_OT_hide_render_set", HKEY, KM_PRESS, KM_CTRL, 0);
-
- /* conflicts, removing */
-#if 0
- kmi = WM_keymap_add_item(keymap, "OBJECT_OT_hide_render_set", HKEY, KM_PRESS, KM_SHIFT | KM_CTRL, 0)
- RNA_boolean_set(kmi->ptr, "unselected", true);
-#endif
-
- WM_keymap_add_item(keymap, "OBJECT_OT_move_to_layer", MKEY, KM_PRESS, 0, 0);
-
kmi = WM_keymap_add_item(keymap, "OBJECT_OT_delete", XKEY, KM_PRESS, 0, 0);
RNA_boolean_set(kmi->ptr, "use_global", false);
diff --git a/source/blender/editors/object/object_relations.c b/source/blender/editors/object/object_relations.c
index f8c80f2a933..f2111adc09a 100644
--- a/source/blender/editors/object/object_relations.c
+++ b/source/blender/editors/object/object_relations.c
@@ -63,10 +63,10 @@
#include "BKE_animsys.h"
#include "BKE_armature.h"
#include "BKE_camera.h"
+#include "BKE_collection.h"
#include "BKE_context.h"
#include "BKE_constraint.h"
#include "BKE_curve.h"
-#include "BKE_depsgraph.h"
#include "BKE_DerivedMesh.h"
#include "BKE_displist.h"
#include "BKE_global.h"
@@ -75,9 +75,12 @@
#include "BKE_idprop.h"
#include "BKE_lamp.h"
#include "BKE_lattice.h"
+#include "BKE_layer.h"
#include "BKE_library.h"
+#include "BKE_library_override.h"
#include "BKE_library_query.h"
#include "BKE_library_remap.h"
+#include "BKE_lightprobe.h"
#include "BKE_main.h"
#include "BKE_material.h"
#include "BKE_mball.h"
@@ -92,6 +95,9 @@
#include "BKE_texture.h"
#include "BKE_editmesh.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#include "WM_api.h"
#include "WM_types.h"
@@ -123,7 +129,9 @@ static int vertex_parent_set_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Object *obedit = CTX_data_edit_object(C);
+ EvaluationContext eval_ctx;
BMVert *eve;
BMIter iter;
Curve *cu;
@@ -133,6 +141,8 @@ static int vertex_parent_set_exec(bContext *C, wmOperator *op)
Object *par;
int a, v1 = 0, v2 = 0, v3 = 0, v4 = 0, nr = 1;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
/* we need 1 to 3 selected vertices */
if (obedit->type == OB_MESH) {
@@ -142,7 +152,7 @@ static int vertex_parent_set_exec(bContext *C, wmOperator *op)
EDBM_mesh_load(obedit);
EDBM_mesh_make(scene->toolsettings, obedit, true);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
em = me->edit_btmesh;
@@ -151,7 +161,7 @@ static int vertex_parent_set_exec(bContext *C, wmOperator *op)
/* derivedMesh might be needed for solving parenting,
* so re-create it here */
- makeDerivedMesh(scene, obedit, em, CD_MASK_BAREMESH | CD_MASK_ORIGINDEX, false);
+ makeDerivedMesh(&eval_ctx, scene, obedit, em, CD_MASK_BAREMESH | CD_MASK_ORIGINDEX, false);
BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) {
if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) {
@@ -230,7 +240,7 @@ static int vertex_parent_set_exec(bContext *C, wmOperator *op)
CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects)
{
if (ob != obedit) {
- DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
par = obedit->parent;
if (BKE_object_parent_loop_check(par, ob)) {
@@ -239,7 +249,7 @@ static int vertex_parent_set_exec(bContext *C, wmOperator *op)
else {
Object workob;
- ob->parent = BASACT->object;
+ ob->parent = BASACT(view_layer)->object;
if (v3) {
ob->partype = PARVERT3;
ob->par1 = v1 - 1;
@@ -247,7 +257,7 @@ static int vertex_parent_set_exec(bContext *C, wmOperator *op)
ob->par3 = v3 - 1;
/* inverse parent matrix */
- BKE_object_workob_calc_parent(scene, ob, &workob);
+ BKE_object_workob_calc_parent(&eval_ctx, scene, ob, &workob);
invert_m4_m4(ob->parentinv, workob.obmat);
}
else {
@@ -255,7 +265,7 @@ static int vertex_parent_set_exec(bContext *C, wmOperator *op)
ob->par1 = v1 - 1;
/* inverse parent matrix */
- BKE_object_workob_calc_parent(scene, ob, &workob);
+ BKE_object_workob_calc_parent(&eval_ctx, scene, ob, &workob);
invert_m4_m4(ob->parentinv, workob.obmat);
}
}
@@ -263,7 +273,7 @@ static int vertex_parent_set_exec(bContext *C, wmOperator *op)
}
CTX_DATA_END;
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
WM_event_add_notifier(C, NC_OBJECT, NULL);
@@ -332,44 +342,41 @@ static int make_proxy_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Object *ob, *gob = ED_object_active_context(C);
- GroupObject *go;
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
if (gob->dup_group != NULL) {
- go = BLI_findlink(&gob->dup_group->gobject, RNA_enum_get(op->ptr, "object"));
- ob = go->ob;
+ Base *base = BLI_findlink(&gob->dup_group->view_layer->object_bases, RNA_enum_get(op->ptr, "object"));
+ ob = base->object;
}
else {
ob = gob;
- gob = NULL;
}
if (ob) {
Object *newob;
- Base *newbase, *oldbase = BASACT;
char name[MAX_ID_NAME + 4];
BLI_snprintf(name, sizeof(name), "%s_proxy", ((ID *)(gob ? gob : ob))->name + 2);
/* Add new object for the proxy */
- newob = BKE_object_add(bmain, scene, OB_EMPTY, name);
+ newob = BKE_object_add_from(bmain, scene, view_layer, OB_EMPTY, name, gob ? gob : ob);
/* set layers OK */
- newbase = BASACT; /* BKE_object_add sets active... */
- newbase->lay = oldbase->lay;
- newob->lay = newbase->lay;
-
- /* remove base, leave user count of object, it gets linked in BKE_object_make_proxy */
- if (gob == NULL) {
- BKE_scene_base_unlink(scene, oldbase);
- MEM_freeN(oldbase);
- }
-
BKE_object_make_proxy(newob, ob, gob);
+ /* Set back pointer immediately so dependency graph knows that this is
+ * is a proxy and will act accordingly. Otherwise correctness of graph
+ * will depend on order of bases.
+ *
+ * TODO(sergey): We really need to get rid of this bi-directional links
+ * in proxies with something like static overrides.
+ */
+ newob->proxy->proxy_from = newob;
+
/* depsgraph flushes are needed for the new data */
- DAG_relations_tag_update(bmain);
- DAG_id_tag_update(&newob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+ DEG_relations_tag_update(bmain);
+ DEG_id_tag_update(&newob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, newob);
}
else {
@@ -388,17 +395,18 @@ static const EnumPropertyItem *proxy_group_object_itemf(bContext *C, PointerRNA
int totitem = 0;
int i = 0;
Object *ob = ED_object_active_context(C);
- GroupObject *go;
if (!ob || !ob->dup_group)
return DummyRNA_DEFAULT_items;
/* find the object to affect */
- for (go = ob->dup_group->gobject.first; go; go = go->next) {
- item_tmp.identifier = item_tmp.name = go->ob->id.name + 2;
+ FOREACH_GROUP_OBJECT(ob->dup_group, object)
+ {
+ item_tmp.identifier = item_tmp.name = object->id.name + 2;
item_tmp.value = i++;
RNA_enum_item_add(&item, &totitem, &item_tmp);
}
+ FOREACH_GROUP_OBJECT_END
RNA_enum_item_end(&item, &totitem);
*r_free = true;
@@ -524,7 +532,7 @@ void ED_object_parent_clear(Object *ob, const int type)
/* Always clear parentinv matrix for sake of consistency, see T41950. */
unit_m4(ob->parentinv);
- DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
}
/* note, poll should check for editable scene */
@@ -539,7 +547,7 @@ static int parent_clear_exec(bContext *C, wmOperator *op)
}
CTX_DATA_END;
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
WM_event_add_notifier(C, NC_OBJECT | ND_PARENT, NULL);
return OPERATOR_FINISHED;
@@ -607,13 +615,17 @@ EnumPropertyItem prop_make_parent_types[] = {
{0, NULL, 0, NULL, NULL}
};
-bool ED_object_parent_set(ReportList *reports, Main *bmain, Scene *scene, Object *ob, Object *par,
+bool ED_object_parent_set(ReportList *reports, const bContext *C, Scene *scene, Object *ob, Object *par,
int partype, const bool xmirror, const bool keep_transform, const int vert_par[3])
{
+ Main *bmain = CTX_data_main(C);
+ EvaluationContext eval_ctx;
bPoseChannel *pchan = NULL;
const bool pararm = ELEM(partype, PAR_ARMATURE, PAR_ARMATURE_NAME, PAR_ARMATURE_ENVELOPE, PAR_ARMATURE_AUTO);
- DAG_id_tag_update(&par->id, OB_RECALC_OB);
+ CTX_data_eval_ctx(C, &eval_ctx);
+
+ DEG_id_tag_update(&par->id, OB_RECALC_OB);
/* preconditions */
if (partype == PAR_FOLLOW || partype == PAR_PATH_CONST) {
@@ -624,7 +636,7 @@ bool ED_object_parent_set(ReportList *reports, Main *bmain, Scene *scene, Object
if ((cu->flag & CU_PATH) == 0) {
cu->flag |= CU_PATH | CU_FOLLOW;
- BKE_displist_make_curveTypes(scene, par, 0); /* force creation of path data */
+ BKE_displist_make_curveTypes(&eval_ctx, scene, par, 0); /* force creation of path data */
}
else {
cu->flag |= CU_FOLLOW;
@@ -705,18 +717,20 @@ bool ED_object_parent_set(ReportList *reports, Main *bmain, Scene *scene, Object
switch (partype) {
case PAR_CURVE: /* curve deform */
if (modifiers_isDeformedByCurve(ob) != par) {
- md = ED_object_modifier_add(reports, bmain, scene, ob, NULL, eModifierType_Curve);
+ md = ED_object_modifier_add(
+ reports, bmain, scene, ob, eval_ctx.object_mode, NULL, eModifierType_Curve);
if (md) {
((CurveModifierData *)md)->object = par;
}
if (par->curve_cache && par->curve_cache->path == NULL) {
- DAG_id_tag_update(&par->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&par->id, OB_RECALC_DATA);
}
}
break;
case PAR_LATTICE: /* lattice deform */
if (modifiers_isDeformedByLattice(ob) != par) {
- md = ED_object_modifier_add(reports, bmain, scene, ob, NULL, eModifierType_Lattice);
+ md = ED_object_modifier_add(
+ reports, bmain, scene, ob, eval_ctx.object_mode, NULL, eModifierType_Lattice);
if (md) {
((LatticeModifierData *)md)->object = par;
}
@@ -724,7 +738,8 @@ bool ED_object_parent_set(ReportList *reports, Main *bmain, Scene *scene, Object
break;
default: /* armature deform */
if (modifiers_isDeformedByArmature(ob) != par) {
- md = ED_object_modifier_add(reports, bmain, scene, ob, NULL, eModifierType_Armature);
+ md = ED_object_modifier_add(
+ reports, bmain, scene, ob, eval_ctx.object_mode, NULL, eModifierType_Armature);
if (md) {
((ArmatureModifierData *)md)->object = par;
}
@@ -766,34 +781,36 @@ bool ED_object_parent_set(ReportList *reports, Main *bmain, Scene *scene, Object
data = con->data;
data->tar = par;
- BKE_constraint_target_matrix_get(scene, con, 0, CONSTRAINT_OBTYPE_OBJECT, NULL, cmat, scene->r.cfra);
+ BKE_constraint_target_matrix_get(&eval_ctx, scene, con, 0, CONSTRAINT_OBTYPE_OBJECT, NULL, cmat, scene->r.cfra);
sub_v3_v3v3(vec, ob->obmat[3], cmat[3]);
copy_v3_v3(ob->loc, vec);
}
else if (pararm && (ob->type == OB_MESH) && (par->type == OB_ARMATURE)) {
- if (partype == PAR_ARMATURE_NAME)
- create_vgroups_from_armature(reports, scene, ob, par, ARM_GROUPS_NAME, false);
- else if (partype == PAR_ARMATURE_ENVELOPE)
- create_vgroups_from_armature(reports, scene, ob, par, ARM_GROUPS_ENVELOPE, xmirror);
+ if (partype == PAR_ARMATURE_NAME) {
+ create_vgroups_from_armature(reports, &eval_ctx, scene, ob, par, ARM_GROUPS_NAME, false);
+ }
+ else if (partype == PAR_ARMATURE_ENVELOPE) {
+ create_vgroups_from_armature(reports, &eval_ctx, scene, ob, par, ARM_GROUPS_ENVELOPE, xmirror);
+ }
else if (partype == PAR_ARMATURE_AUTO) {
WM_cursor_wait(1);
- create_vgroups_from_armature(reports, scene, ob, par, ARM_GROUPS_AUTO, xmirror);
+ create_vgroups_from_armature(reports, &eval_ctx, scene, ob, par, ARM_GROUPS_AUTO, xmirror);
WM_cursor_wait(0);
}
/* get corrected inverse */
ob->partype = PAROBJECT;
- BKE_object_workob_calc_parent(scene, ob, &workob);
+ BKE_object_workob_calc_parent(&eval_ctx, scene, ob, &workob);
invert_m4_m4(ob->parentinv, workob.obmat);
}
else {
/* calculate inverse parent matrix */
- BKE_object_workob_calc_parent(scene, ob, &workob);
+ BKE_object_workob_calc_parent(&eval_ctx, scene, ob, &workob);
invert_m4_m4(ob->parentinv, workob.obmat);
}
- DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA);
}
}
@@ -864,7 +881,7 @@ static int parent_set_exec(bContext *C, wmOperator *op)
parent_set_vert_find(tree, ob, vert_par, is_tri);
}
- if (!ED_object_parent_set(op->reports, bmain, scene, ob, par, partype, xmirror, keep_transform, vert_par_p)) {
+ if (!ED_object_parent_set(op->reports, C, scene, ob, par, partype, xmirror, keep_transform, vert_par_p)) {
ok = false;
break;
}
@@ -879,7 +896,7 @@ static int parent_set_exec(bContext *C, wmOperator *op)
if (!ok)
return OPERATOR_CANCELLED;
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
WM_event_add_notifier(C, NC_OBJECT | ND_PARENT, NULL);
@@ -996,7 +1013,7 @@ static int parent_noinv_set_exec(bContext *C, wmOperator *op)
Main *bmain = CTX_data_main(C);
Object *par = ED_object_active_context(C);
- DAG_id_tag_update(&par->id, OB_RECALC_OB);
+ DEG_id_tag_update(&par->id, OB_RECALC_OB);
/* context iterator */
CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects)
@@ -1011,7 +1028,7 @@ static int parent_noinv_set_exec(bContext *C, wmOperator *op)
memset(ob->loc, 0, 3 * sizeof(float));
/* set recalc flags */
- DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA);
/* set parenting type for object - object only... */
ob->parent = par;
@@ -1021,7 +1038,7 @@ static int parent_noinv_set_exec(bContext *C, wmOperator *op)
}
CTX_DATA_END;
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
return OPERATOR_FINISHED;
@@ -1048,15 +1065,18 @@ void OBJECT_OT_parent_no_inverse_set(wmOperatorType *ot)
static int object_slow_parent_clear_exec(bContext *C, wmOperator *UNUSED(op))
{
Scene *scene = CTX_data_scene(C);
+ EvaluationContext eval_ctx;
+
+ CTX_data_eval_ctx(C, &eval_ctx);
CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects)
{
if (ob->parent) {
if (ob->partype & PARSLOW) {
ob->partype -= PARSLOW;
- BKE_object_where_is_calc(scene, ob);
+ BKE_object_where_is_calc(&eval_ctx, scene, ob);
ob->partype |= PARSLOW;
- DAG_id_tag_update(&ob->id, OB_RECALC_OB);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB);
}
}
}
@@ -1094,7 +1114,7 @@ static int object_slow_parent_set_exec(bContext *C, wmOperator *UNUSED(op))
if (ob->parent)
ob->partype |= PARSLOW;
- DAG_id_tag_update(&ob->id, OB_RECALC_OB);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB);
}
CTX_DATA_END;
@@ -1148,7 +1168,7 @@ static int object_track_clear_exec(bContext *C, wmOperator *op)
/* remove track-object for old track */
ob->track = NULL;
- DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
/* also remove all tracking constraints */
for (con = ob->constraints.last; con; con = pcon) {
@@ -1162,7 +1182,7 @@ static int object_track_clear_exec(bContext *C, wmOperator *op)
}
CTX_DATA_END;
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
return OPERATOR_FINISHED;
@@ -1222,7 +1242,7 @@ static int track_set_exec(bContext *C, wmOperator *op)
data = con->data;
data->tar = obact;
- DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
/* Lamp, Camera and Speaker track differently by default */
if (ELEM(ob->type, OB_LAMP, OB_CAMERA, OB_SPEAKER)) {
@@ -1245,7 +1265,7 @@ static int track_set_exec(bContext *C, wmOperator *op)
data = con->data;
data->tar = obact;
- DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
/* Lamp, Camera and Speaker track differently by default */
if (ELEM(ob->type, OB_LAMP, OB_CAMERA, OB_SPEAKER)) {
@@ -1269,7 +1289,7 @@ static int track_set_exec(bContext *C, wmOperator *op)
data = con->data;
data->tar = obact;
- DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
/* Lamp, Camera and Speaker track differently by default */
if (ELEM(ob->type, OB_LAMP, OB_CAMERA, OB_SPEAKER)) {
@@ -1283,7 +1303,7 @@ static int track_set_exec(bContext *C, wmOperator *op)
}
}
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
return OPERATOR_FINISHED;
@@ -1309,119 +1329,6 @@ void OBJECT_OT_track_set(wmOperatorType *ot)
ot->prop = RNA_def_enum(ot->srna, "type", prop_make_track_types, 0, "Type", "");
}
-/************************** Move to Layer Operator *****************************/
-
-static unsigned int move_to_layer_init(bContext *C, wmOperator *op)
-{
- int values[20], a;
- unsigned int lay = 0;
-
- if (!RNA_struct_property_is_set(op->ptr, "layers")) {
- /* note: layers are set in bases, library objects work for this */
- CTX_DATA_BEGIN (C, Base *, base, selected_bases)
- {
- lay |= base->lay;
- }
- CTX_DATA_END;
-
- for (a = 0; a < 20; a++)
- values[a] = (lay & (1 << a)) != 0;
-
- RNA_boolean_set_array(op->ptr, "layers", values);
- }
- else {
- RNA_boolean_get_array(op->ptr, "layers", values);
-
- for (a = 0; a < 20; a++)
- if (values[a])
- lay |= (1 << a);
- }
-
- return lay;
-}
-
-static int move_to_layer_invoke(bContext *C, wmOperator *op, const wmEvent *event)
-{
- View3D *v3d = CTX_wm_view3d(C);
- if (v3d && v3d->localvd) {
- return WM_operator_confirm_message(C, op, "Move out of Local View");
- }
- else {
- move_to_layer_init(C, op);
- return WM_operator_props_popup(C, op, event);
- }
-}
-
-static int move_to_layer_exec(bContext *C, wmOperator *op)
-{
- Main *bmain = CTX_data_main(C);
- Scene *scene = CTX_data_scene(C);
- View3D *v3d = CTX_wm_view3d(C);
- unsigned int lay, local;
- /* bool is_lamp = false; */ /* UNUSED */
-
- lay = move_to_layer_init(C, op);
- lay &= 0xFFFFFF;
-
- if (lay == 0) return OPERATOR_CANCELLED;
-
- if (v3d && v3d->localvd) {
- /* now we can move out of localview. */
- /* note: layers are set in bases, library objects work for this */
- CTX_DATA_BEGIN (C, Base *, base, selected_bases)
- {
- lay = base->lay & ~v3d->lay;
- base->lay = lay;
- base->object->lay = lay;
- base->object->flag &= ~SELECT;
- base->flag &= ~SELECT;
- /* if (base->object->type == OB_LAMP) is_lamp = true; */
- }
- CTX_DATA_END;
- }
- else {
- /* normal non localview operation */
- /* note: layers are set in bases, library objects work for this */
- CTX_DATA_BEGIN (C, Base *, base, selected_bases)
- {
- /* upper byte is used for local view */
- local = base->lay & 0xFF000000;
- base->lay = lay + local;
- base->object->lay = base->lay;
- /* if (base->object->type == OB_LAMP) is_lamp = true; */
- }
- CTX_DATA_END;
- }
-
- /* warning, active object may be hidden now */
-
- WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, scene);
- WM_event_add_notifier(C, NC_SCENE | ND_LAYER_CONTENT, scene);
-
- DAG_relations_tag_update(bmain);
-
- return OPERATOR_FINISHED;
-}
-
-void OBJECT_OT_move_to_layer(wmOperatorType *ot)
-{
- /* identifiers */
- ot->name = "Move to Layer";
- ot->description = "Move the object to different layers";
- ot->idname = "OBJECT_OT_move_to_layer";
-
- /* api callbacks */
- ot->invoke = move_to_layer_invoke;
- ot->exec = move_to_layer_exec;
- ot->poll = ED_operator_objectmode;
-
- /* flags */
- ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-
- /* properties */
- RNA_def_boolean_layer_member(ot->srna, "layers", 20, NULL, "Layer", "");
-}
-
/************************** Link to Scene Operator *****************************/
#if 0
@@ -1444,20 +1351,6 @@ static void link_to_scene(Main *UNUSED(bmain), unsigned short UNUSED(nr))
}
#endif
-Base *ED_object_scene_link(Scene *scene, Object *ob)
-{
- Base *base;
-
- if (BKE_scene_base_find(scene, ob)) {
- return NULL;
- }
-
- base = BKE_scene_base_add(scene, ob);
- id_us_plus(&ob->id);
-
- return base;
-}
-
static int make_links_scene_exec(bContext *C, wmOperator *op)
{
Scene *scene_to = BLI_findlink(&CTX_data_main(C)->scene, RNA_enum_get(op->ptr, "scene"));
@@ -1477,9 +1370,10 @@ static int make_links_scene_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
+ SceneCollection *sc_to = BKE_collection_master(&scene_to->id);
CTX_DATA_BEGIN (C, Base *, base, selected_bases)
{
- ED_object_scene_link(scene_to, base->object);
+ BKE_collection_object_add(&scene_to->id, sc_to, base->object);
}
CTX_DATA_END;
@@ -1534,8 +1428,8 @@ static bool allow_make_links_data(const int type, Object *ob_src, Object *ob_dst
static int make_links_data_exec(bContext *C, wmOperator *op)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Main *bmain = CTX_data_main(C);
- Scene *scene = CTX_data_scene(C);
const int type = RNA_enum_get(op->ptr, "type");
Object *ob_src;
ID *obdata_id;
@@ -1572,7 +1466,7 @@ static int make_links_data_exec(bContext *C, wmOperator *op)
/* if amount of material indices changed: */
test_object_materials(ob_dst, ob_dst->data);
- DAG_id_tag_update(&ob_dst->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob_dst->id, OB_RECALC_DATA);
break;
case MAKE_LINKS_MATERIALS:
/* new approach, using functions from kernel */
@@ -1580,7 +1474,7 @@ static int make_links_data_exec(bContext *C, wmOperator *op)
Material *ma = give_current_material(ob_src, a + 1);
assign_material(ob_dst, ma, a + 1, BKE_MAT_ASSIGN_USERPREF); /* also works with ma==NULL */
}
- DAG_id_tag_update(&ob_dst->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob_dst->id, OB_RECALC_DATA);
break;
case MAKE_LINKS_ANIMDATA:
BKE_animdata_copy_id(bmain, (ID *)ob_dst, (ID *)ob_src, false);
@@ -1591,19 +1485,19 @@ static int make_links_data_exec(bContext *C, wmOperator *op)
}
BKE_animdata_copy_id(bmain, (ID *)ob_dst->data, (ID *)ob_src->data, false);
}
- DAG_id_tag_update(&ob_dst->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+ DEG_id_tag_update(&ob_dst->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
break;
case MAKE_LINKS_GROUP:
{
LinkNode *group_node;
/* first clear groups */
- BKE_object_groups_clear(scene, base_dst, ob_dst);
+ BKE_object_groups_clear(ob_dst);
/* now add in the groups from the link nodes */
for (group_node = ob_groups; group_node; group_node = group_node->next) {
if (ob_dst->dup_group != group_node->link) {
- BKE_group_object_add(group_node->link, ob_dst, scene, base_dst);
+ BKE_group_object_add(group_node->link, ob_dst);
}
else {
is_cycle = true;
@@ -1619,8 +1513,8 @@ static int make_links_data_exec(bContext *C, wmOperator *op)
}
break;
case MAKE_LINKS_MODIFIERS:
- BKE_object_link_modifiers(ob_dst, ob_src);
- DAG_id_tag_update(&ob_dst->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+ BKE_object_link_modifiers(ob_dst, ob_src, workspace->object_mode);
+ DEG_id_tag_update(&ob_dst->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
break;
case MAKE_LINKS_FONTS:
{
@@ -1649,7 +1543,7 @@ static int make_links_data_exec(bContext *C, wmOperator *op)
cu_dst->vfontbi = cu_src->vfontbi;
id_us_plus((ID *)cu_dst->vfontbi);
- DAG_id_tag_update(&ob_dst->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+ DEG_id_tag_update(&ob_dst->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
break;
}
}
@@ -1672,7 +1566,7 @@ static int make_links_data_exec(bContext *C, wmOperator *op)
BKE_report(op->reports, RPT_WARNING, "Skipped editing library object data");
}
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, CTX_wm_view3d(C));
WM_event_add_notifier(C, NC_ANIMATION | ND_NLA_ACTCHANGE, CTX_wm_view3d(C));
WM_event_add_notifier(C, NC_OBJECT, NULL);
@@ -1736,69 +1630,103 @@ void OBJECT_OT_make_links_data(wmOperatorType *ot)
/**************************** Make Single User ********************************/
-/* Warning, sets ID->newid pointers of objects and groups, but does not clear them. */
-static void single_object_users(Main *bmain, Scene *scene, View3D *v3d, const int flag, const bool copy_groups)
+static Object *single_object_users_object(Main *bmain, Scene *scene, Object *ob, const bool copy_groups)
{
- Base *base;
- Object *ob, *obn;
- Group *group, *groupn;
- GroupObject *go;
+ if (!ID_IS_LINKED(ob) && ob->id.us > 1) {
+ /* base gets copy of object */
+ Object *obn = ID_NEW_SET(ob, BKE_object_copy(bmain, ob));
- clear_sca_new_poins(); /* BGE logic */
+ if (copy_groups) {
+ if (ob->flag & OB_FROMGROUP) {
+ obn->flag |= OB_FROMGROUP;
+ }
+ }
+ else {
+ /* copy already clears */
+ }
+ /* remap gpencil parenting */
- /* duplicate (must set newid) */
- for (base = FIRSTBASE; base; base = base->next) {
- ob = base->object;
+ if (scene->gpd) {
+ bGPdata *gpd = scene->gpd;
+ for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
+ if (gpl->parent == ob) {
+ gpl->parent = obn;
+ }
+ }
+ }
- if ((base->flag & flag) == flag) {
- if (!ID_IS_LINKED(ob) && ob->id.us > 1) {
- /* base gets copy of object */
- base->object = obn = ID_NEW_SET(ob, BKE_object_copy(bmain, ob));
+ id_us_min(&ob->id);
+ return obn;
+ }
+ return NULL;
+}
- if (copy_groups) {
- if (ob->flag & OB_FROMGROUP) {
- obn->flag |= OB_FROMGROUP;
- }
- }
- else {
- /* copy already clears */
- }
- /* remap gpencil parenting */
+static void libblock_relink_scene_collection(SceneCollection *sc)
+{
+ for (LinkData *link = sc->objects.first; link; link = link->next) {
+ BKE_libblock_relink_to_newid(link->data);
+ }
- if (scene->gpd) {
- bGPdata *gpd = scene->gpd;
- for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
- if (gpl->parent == ob) {
- gpl->parent = obn;
- }
- }
- }
+ for (SceneCollection *nsc = sc->scene_collections.first; nsc; nsc = nsc->next) {
+ libblock_relink_scene_collection(nsc);
+ }
+}
+
+static void single_object_users_scene_collection(Main *bmain, Scene *scene, SceneCollection *sc, const int flag, const bool copy_groups)
+{
+ for (LinkData *link = sc->objects.first; link; link = link->next) {
+ Object *ob = link->data;
+ /* an object may be in more than one collection */
+ if ((ob->id.newid == NULL) && ((ob->flag & flag) == flag)) {
+ link->data = single_object_users_object(bmain, scene, link->data, copy_groups);
+ }
+ }
- base->flag = obn->flag;
+ for (SceneCollection *nsc = sc->scene_collections.first; nsc; nsc = nsc->next) {
+ single_object_users_scene_collection(bmain, scene, nsc, flag, copy_groups);
+ }
+}
- id_us_min(&ob->id);
- }
+/* Warning, sets ID->newid pointers of objects and groups, but does not clear them. */
+static void single_object_users(Main *bmain, Scene *scene, View3D *v3d, const int flag, const bool copy_groups)
+{
+ Group *group, *groupn;
+
+ clear_sca_new_poins(); /* BGE logic */
+
+ /* duplicate all the objects of the scene */
+ SceneCollection *msc = BKE_collection_master(&scene->id);
+ single_object_users_scene_collection(bmain, scene, msc, flag, copy_groups);
+
+ /* loop over ViewLayers and assign the pointers accordingly */
+ for (ViewLayer *view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ ID_NEW_REMAP(base->object);
}
}
/* duplicate groups that consist entirely of duplicated objects */
for (group = bmain->group.first; group; group = group->id.next) {
- if (copy_groups && group->gobject.first) {
+ if (copy_groups && group->view_layer->object_bases.first) {
bool all_duplicated = true;
- for (go = group->gobject.first; go; go = go->next) {
- if (!(go->ob && (go->ob->id.newid))) {
+ FOREACH_GROUP_OBJECT(group, object)
+ {
+ if (object->id.newid == NULL) {
all_duplicated = false;
break;
}
}
+ FOREACH_GROUP_OBJECT_END
if (all_duplicated) {
groupn = ID_NEW_SET(group, BKE_group_copy(bmain, group));
- for (go = groupn->gobject.first; go; go = go->next) {
- go->ob = (Object *)go->ob->id.newid;
+ FOREACH_GROUP_BASE(groupn, base)
+ {
+ base->object = (Object *)base->object->id.newid;
}
+ FOREACH_GROUP_BASE_END
}
}
}
@@ -1810,9 +1738,7 @@ static void single_object_users(Main *bmain, Scene *scene, View3D *v3d, const in
if (v3d) ID_NEW_REMAP(v3d->camera);
/* object and group pointers */
- for (base = FIRSTBASE; base; base = base->next) {
- BKE_libblock_relink_to_newid(&base->object->id);
- }
+ libblock_relink_scene_collection(msc);
set_sca_new_poins();
}
@@ -1821,16 +1747,16 @@ static void single_object_users(Main *bmain, Scene *scene, View3D *v3d, const in
* button can be functional.*/
void ED_object_single_user(Main *bmain, Scene *scene, Object *ob)
{
- Base *base;
- const bool copy_groups = false;
-
- for (base = FIRSTBASE; base; base = base->next) {
- if (base->object == ob) base->flag |= OB_DONE;
- else base->flag &= ~OB_DONE;
+ FOREACH_SCENE_OBJECT(scene, ob_iter)
+ {
+ ob_iter->flag &= ~OB_DONE;
}
+ FOREACH_SCENE_OBJECT_END
- single_object_users(bmain, scene, NULL, OB_DONE, copy_groups);
+ /* tag only the one object */
+ ob->flag |= OB_DONE;
+ single_object_users(bmain, scene, NULL, OB_DONE, false);
BKE_main_id_clear_newpoins(bmain);
}
@@ -1855,25 +1781,23 @@ static void new_id_matar(Main *bmain, Material **matar, const int totcol)
}
}
-static void single_obdata_users(Main *bmain, Scene *scene, const int flag)
+static void single_obdata_users(Main *bmain, Scene *scene, ViewLayer *view_layer, const int flag)
{
- Object *ob;
Lamp *la;
Curve *cu;
/* Camera *cam; */
- Base *base;
Mesh *me;
Lattice *lat;
ID *id;
int a;
- for (base = FIRSTBASE; base; base = base->next) {
- ob = base->object;
- if (!ID_IS_LINKED(ob) && (base->flag & flag) == flag) {
+ FOREACH_OBJECT_FLAG(scene, view_layer, flag, ob)
+ {
+ if (!ID_IS_LINKED(ob)) {
id = ob->data;
if (id && id->us > 1 && !ID_IS_LINKED(id)) {
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
switch (ob->type) {
case OB_LAMP:
@@ -1911,16 +1835,22 @@ static void single_obdata_users(Main *bmain, Scene *scene, const int flag)
BKE_animdata_copy_id_action((ID *)lat->key, false);
break;
case OB_ARMATURE:
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
ob->data = ID_NEW_SET(ob->data, BKE_armature_copy(bmain, ob->data));
BKE_pose_rebuild(ob, ob->data);
break;
case OB_SPEAKER:
ob->data = ID_NEW_SET(ob->data, BKE_speaker_copy(bmain, ob->data));
break;
+ case OB_LIGHTPROBE:
+ ob->data = ID_NEW_SET(ob->data, BKE_lightprobe_copy(bmain, ob->data));
+ break;
default:
- if (G.debug & G_DEBUG)
- printf("ERROR %s: can't copy %s\n", __func__, id->name);
+ printf("ERROR %s: can't copy %s\n", __func__, id->name);
+ BLI_assert(!"This should never happen.");
+
+ /* We need to end the FOREACH_OBJECT_FLAG iterator to prevent memory leak. */
+ BKE_scene_objects_iterator_end(&iter_macro);
return;
}
@@ -1935,6 +1865,7 @@ static void single_obdata_users(Main *bmain, Scene *scene, const int flag)
}
}
}
+ FOREACH_OBJECT_FLAG_END
me = bmain->mesh.first;
while (me) {
@@ -1943,31 +1874,24 @@ static void single_obdata_users(Main *bmain, Scene *scene, const int flag)
}
}
-static void single_object_action_users(Scene *scene, const int flag)
+static void single_object_action_users(Scene *scene, ViewLayer *view_layer, const int flag)
{
- Object *ob;
- Base *base;
-
- for (base = FIRSTBASE; base; base = base->next) {
- ob = base->object;
- if (!ID_IS_LINKED(ob) && (flag == 0 || (base->flag & SELECT)) ) {
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ FOREACH_OBJECT_FLAG(scene, view_layer, flag, ob)
+ if (!ID_IS_LINKED(ob)) {
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
BKE_animdata_copy_id_action(&ob->id, false);
}
- }
+ FOREACH_OBJECT_FLAG_END
}
-static void single_mat_users(Main *bmain, Scene *scene, const int flag, const bool do_textures)
+static void single_mat_users(Main *bmain, Scene *scene, ViewLayer *view_layer, const int flag, const bool do_textures)
{
- Object *ob;
- Base *base;
Material *ma, *man;
Tex *tex;
int a, b;
- for (base = FIRSTBASE; base; base = base->next) {
- ob = base->object;
- if (!ID_IS_LINKED(ob) && (flag == 0 || (base->flag & SELECT)) ) {
+ FOREACH_OBJECT_FLAG(scene, view_layer, flag, ob)
+ if (!ID_IS_LINKED(ob)) {
for (a = 1; a <= ob->totcol; a++) {
ma = give_current_material(ob, a);
if (ma) {
@@ -1996,7 +1920,7 @@ static void single_mat_users(Main *bmain, Scene *scene, const int flag, const bo
}
}
}
- }
+ FOREACH_OBJECT_FLAG_END
}
static void do_single_tex_user(Main *bmain, Tex **from)
@@ -2099,8 +2023,8 @@ void ED_object_single_users(Main *bmain, Scene *scene, const bool full, const bo
single_object_users(bmain, scene, NULL, 0, copy_groups);
if (full) {
- single_obdata_users(bmain, scene, 0);
- single_object_action_users(scene, 0);
+ single_obdata_users(bmain, scene, NULL, 0);
+ single_object_action_users(scene, NULL, 0);
single_mat_users_expand(bmain);
single_tex_users_expand(bmain);
}
@@ -2121,12 +2045,13 @@ void ED_object_single_users(Main *bmain, Scene *scene, const bool full, const bo
{
IDP_RelinkProperty(scene->id.properties);
- for (Base *base = scene->base.first; base; base = base->next) {
- Object *ob = base->object;
+ FOREACH_SCENE_OBJECT(scene, ob)
+ {
if (!ID_IS_LINKED(ob)) {
IDP_RelinkProperty(ob->id.properties);
}
}
+ FOREACH_SCENE_OBJECT_END
if (scene->nodetree) {
IDP_RelinkProperty(scene->nodetree->id.properties);
@@ -2148,7 +2073,7 @@ void ED_object_single_users(Main *bmain, Scene *scene, const bool full, const bo
}
}
BKE_main_id_clear_newpoins(bmain);
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
}
/******************************* Make Local ***********************************/
@@ -2215,7 +2140,7 @@ static void tag_localizable_objects(bContext *C, const int mode)
* Instance indirectly referenced zero user objects,
* otherwise they're lost on reload, see T40595.
*/
-static bool make_local_all__instance_indirect_unused(Main *bmain, Scene *scene)
+static bool make_local_all__instance_indirect_unused(Main *bmain, Scene *scene, ViewLayer *view_layer, SceneCollection *sc)
{
Object *ob;
bool changed = false;
@@ -2226,10 +2151,11 @@ static bool make_local_all__instance_indirect_unused(Main *bmain, Scene *scene)
id_us_plus(&ob->id);
- base = BKE_scene_base_add(scene, ob);
- base->flag |= SELECT;
- base->object->flag = base->flag;
- DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+ BKE_collection_object_add(&scene->id, sc, ob);
+ base = BKE_view_layer_base_find(view_layer, ob);
+ base->flag |= BASE_SELECTED;
+ BKE_scene_object_base_flag_sync_from_base(base);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
changed = true;
}
@@ -2308,12 +2234,15 @@ static int make_local_exec(bContext *C, wmOperator *op)
/* Note: we (ab)use LIB_TAG_PRE_EXISTING to cherry pick which ID to make local... */
if (mode == MAKE_LOCAL_ALL) {
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ SceneCollection *scene_collection = CTX_data_scene_collection(C);
+
BKE_main_id_tag_all(bmain, LIB_TAG_PRE_EXISTING, false);
- /* de-select so the user can differentiate newly instanced from existing objects */
- BKE_scene_base_deselect_all(scene);
+ /* De-select so the user can differentiate newly instanced from existing objects. */
+ BKE_view_layer_base_deselect_all(view_layer);
- if (make_local_all__instance_indirect_unused(bmain, scene)) {
+ if (make_local_all__instance_indirect_unused(bmain, scene, view_layer, scene_collection)) {
BKE_report(op->reports, RPT_INFO, "Orphan library objects added to the current scene to avoid loss");
}
}
@@ -2404,6 +2333,192 @@ void OBJECT_OT_make_local(wmOperatorType *ot)
ot->prop = RNA_def_enum(ot->srna, "type", type_items, 0, "Type", "");
}
+
+static void make_override_static_tag_object(Object *obact, Object *ob)
+{
+ if (ob == obact) {
+ return;
+ }
+
+ if (!ID_IS_LINKED(ob)) {
+ return;
+ }
+
+ /* Note: all this is very case-by-case bad handling, ultimately we'll want a real full 'automatic', generic
+ * handling of all this, will probably require adding some override-aware stuff to library_query code... */
+
+ if (obact->type == OB_ARMATURE && ob->modifiers.first != NULL) {
+ for (ModifierData *md = ob->modifiers.first; md != NULL; md = md->next) {
+ if (md->type == eModifierType_Armature) {
+ ArmatureModifierData *amd = (ArmatureModifierData *)md;
+ if (amd->object == obact) {
+ ob->id.tag |= LIB_TAG_DOIT;
+ break;
+ }
+ }
+ }
+ }
+ else if (ob->parent == obact) {
+ ob->id.tag |= LIB_TAG_DOIT;
+ }
+
+ if (ob->id.tag & LIB_TAG_DOIT) {
+ printf("Indirectly overriding %s for %s\n", ob->id.name, obact->id.name);
+ }
+}
+
+/* Set the object to override. */
+static int make_override_static_invoke(bContext *C, wmOperator *op, const wmEvent *event)
+{
+ Scene *scene = CTX_data_scene(C);
+ Object *obact = ED_object_active_context(C);
+
+ /* Sanity checks. */
+ if (!scene || ID_IS_LINKED(scene) || !obact) {
+ return OPERATOR_CANCELLED;
+ }
+
+ /* Get object to work on - use a menu if we need to... */
+ if (!ID_IS_LINKED(obact) && obact->dup_group != NULL && ID_IS_LINKED(obact->dup_group)) {
+ /* Gives menu with list of objects in group. */
+ WM_enum_search_invoke(C, op, event);
+ return OPERATOR_CANCELLED;
+ }
+ else if (ID_IS_LINKED(obact)) {
+ uiPopupMenu *pup = UI_popup_menu_begin(C, IFACE_("OK?"), ICON_QUESTION);
+ uiLayout *layout = UI_popup_menu_layout(pup);
+
+ /* Create operator menu item with relevant properties filled in. */
+ PointerRNA opptr_dummy;
+ uiItemFullO_ptr(layout, op->type, op->type->name, ICON_NONE, NULL,
+ WM_OP_EXEC_REGION_WIN, 0, &opptr_dummy);
+
+ /* Present the menu and be done... */
+ UI_popup_menu_end(C, pup);
+
+ /* This invoke just calls another instance of this operator... */
+ return OPERATOR_INTERFACE;
+ }
+ else {
+ /* Error.. cannot continue. */
+ BKE_report(op->reports, RPT_ERROR, "Can only make static override for a referenced object or group");
+ return OPERATOR_CANCELLED;
+ }
+
+}
+
+static int make_override_static_exec(bContext *C, wmOperator *op)
+{
+ Main *bmain = CTX_data_main(C);
+ Object *obact = CTX_data_active_object(C);
+
+ bool success = false;
+
+ if (!ID_IS_LINKED(obact) && obact->dup_group != NULL && ID_IS_LINKED(obact->dup_group)) {
+ Base *base = BLI_findlink(&obact->dup_group->view_layer->object_bases, RNA_enum_get(op->ptr, "object"));
+ Object *obgroup = obact;
+ obact = base->object;
+
+ /* First, we make a static override of the linked group itself. */
+ obgroup->dup_group->id.tag |= LIB_TAG_DOIT;
+
+ /* Then, we tag our 'main' object and its detected dependencies to be also overridden. */
+ obact->id.tag |= LIB_TAG_DOIT;
+
+ FOREACH_GROUP_OBJECT(obgroup->dup_group, ob)
+ {
+ make_override_static_tag_object(obact, ob);
+ }
+ FOREACH_GROUP_OBJECT_END;
+
+ success = BKE_override_static_create_from_tag(bmain);
+
+ /* Intantiate our 'main' newly overridden object in scene, if not yet done. */
+ Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Object *new_obact = (Object *)obact->id.newid;
+ if (new_obact != NULL && (base = BKE_view_layer_base_find(view_layer, new_obact)) == NULL) {
+ BKE_collection_object_add_from(scene, obgroup, new_obact);
+ base = BKE_view_layer_base_find(view_layer, new_obact);
+ BKE_view_layer_base_select(view_layer, base);
+ }
+
+ /* Parent the group instantiating object to the new overridden one, or vice-versa, if possible. */
+ if (obgroup->parent == NULL) {
+ obgroup->parent = new_obact;
+ }
+ else if (new_obact->parent == NULL) {
+ new_obact->parent = obgroup;
+ }
+
+ /* Also, we'd likely want to lock by default things like transformations of implicitly overriden objects? */
+
+ /* Cleanup. */
+ BKE_main_id_clear_newpoins(bmain);
+ BKE_main_id_tag_listbase(&bmain->object, LIB_TAG_DOIT, false);
+ }
+ /* Else, poll func ensures us that ID_IS_LINKED(obact) is true. */
+ else if (obact->type == OB_ARMATURE) {
+ BKE_main_id_tag_all(bmain, LIB_TAG_DOIT, false);
+
+ obact->id.tag |= LIB_TAG_DOIT;
+
+ for (Object *ob = bmain->object.first; ob != NULL; ob = ob->id.next) {
+ make_override_static_tag_object(obact, ob);
+ }
+
+ success = BKE_override_static_create_from_tag(bmain);
+
+ /* Also, we'd likely want to lock by default things like transformations of implicitly overriden objects? */
+
+ /* Cleanup. */
+ BKE_main_id_clear_newpoins(bmain);
+ BKE_main_id_tag_listbase(&bmain->object, LIB_TAG_DOIT, false);
+ }
+ /* TODO: probably more cases where we want ot do automated smart things in the future! */
+ else {
+ success = (BKE_override_static_create_from_id(bmain, &obact->id) != NULL);
+ }
+
+ WM_event_add_notifier(C, NC_WINDOW, NULL);
+
+ return success ? OPERATOR_FINISHED : OPERATOR_CANCELLED;
+}
+
+static int make_override_static_poll(bContext *C)
+{
+ Object *obact = CTX_data_active_object(C);
+
+ /* Object must be directly linked to be overridable. */
+ return (ED_operator_objectmode(C) && obact != NULL &&
+ ((ID_IS_LINKED(obact) && obact->id.tag & LIB_TAG_EXTERN) ||
+ (!ID_IS_LINKED(obact) && obact->dup_group != NULL && ID_IS_LINKED(obact->dup_group))));
+}
+
+void OBJECT_OT_make_override_static(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Make Static Override";
+ ot->description = "Make local override of this library linked data-block";
+ ot->idname = "OBJECT_OT_make_override_static";
+
+ /* api callbacks */
+ ot->invoke = make_override_static_invoke;
+ ot->exec = make_override_static_exec;
+ ot->poll = make_override_static_poll;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+
+ /* properties */
+ PropertyRNA *prop;
+ prop = RNA_def_enum(ot->srna, "object", DummyRNA_DEFAULT_items, 0, "Override Object",
+ "Name of lib-linked/group object to make an override from");
+ RNA_def_enum_funcs(prop, proxy_group_object_itemf);
+ RNA_def_property_flag(prop, PROP_ENUM_NO_TRANSLATE);
+ ot->prop = prop;
+}
+
enum {
MAKE_SINGLE_USER_ALL = 1,
MAKE_SINGLE_USER_SELECTED = 2,
@@ -2413,24 +2528,31 @@ static int make_single_user_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
View3D *v3d = CTX_wm_view3d(C); /* ok if this is NULL */
const int flag = (RNA_enum_get(op->ptr, "type") == MAKE_SINGLE_USER_SELECTED) ? SELECT : 0;
const bool copy_groups = false;
bool update_deps = false;
if (RNA_boolean_get(op->ptr, "object")) {
- single_object_users(bmain, scene, v3d, flag, copy_groups);
+ if (flag == SELECT) {
+ BKE_view_layer_selected_objects_tag(view_layer, OB_DONE);
+ single_object_users(bmain, scene, v3d, OB_DONE, copy_groups);
+ }
+ else {
+ single_object_users(bmain, scene, v3d, 0, copy_groups);
+ }
/* needed since object relationships may have changed */
update_deps = true;
}
if (RNA_boolean_get(op->ptr, "obdata")) {
- single_obdata_users(bmain, scene, flag);
+ single_obdata_users(bmain, scene, view_layer, flag);
}
if (RNA_boolean_get(op->ptr, "material")) {
- single_mat_users(bmain, scene, flag, RNA_boolean_get(op->ptr, "texture"));
+ single_mat_users(bmain, scene, view_layer, flag, RNA_boolean_get(op->ptr, "texture"));
}
#if 0 /* can't do this separate from materials */
@@ -2438,7 +2560,7 @@ static int make_single_user_exec(bContext *C, wmOperator *op)
single_mat_users(scene, flag, true);
#endif
if (RNA_boolean_get(op->ptr, "animation")) {
- single_object_action_users(scene, flag);
+ single_object_action_users(scene, view_layer, flag);
}
BKE_main_id_clear_newpoins(bmain);
@@ -2446,7 +2568,7 @@ static int make_single_user_exec(bContext *C, wmOperator *op)
WM_event_add_notifier(C, NC_WINDOW, NULL);
if (update_deps) {
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
}
return OPERATOR_FINISHED;
@@ -2496,7 +2618,7 @@ static int drop_named_material_invoke(bContext *C, wmOperator *op, const wmEvent
assign_material(base->object, ma, 1, BKE_MAT_ASSIGN_USERPREF);
- DAG_id_tag_update(&base->object->id, OB_RECALC_OB);
+ DEG_id_tag_update(&base->object->id, OB_RECALC_OB);
WM_event_add_notifier(C, NC_OBJECT | ND_OB_SHADING, base->object);
WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, CTX_wm_view3d(C));
diff --git a/source/blender/editors/object/object_select.c b/source/blender/editors/object/object_select.c
index 8d5c2387fe9..69e0fd20b86 100644
--- a/source/blender/editors/object/object_select.c
+++ b/source/blender/editors/object/object_select.c
@@ -41,6 +41,7 @@
#include "DNA_scene_types.h"
#include "DNA_armature_types.h"
#include "DNA_lamp_types.h"
+#include "DNA_workspace_types.h"
#include "BLI_math.h"
#include "BLI_listbase.h"
@@ -52,15 +53,19 @@
#include "BKE_context.h"
#include "BKE_group.h"
+#include "BKE_layer.h"
#include "BKE_main.h"
#include "BKE_material.h"
#include "BKE_particle.h"
#include "BKE_property.h"
#include "BKE_report.h"
#include "BKE_scene.h"
+#include "BKE_workspace.h"
#include "BKE_library.h"
#include "BKE_deform.h"
+#include "DEG_depsgraph.h"
+
#include "WM_api.h"
#include "WM_types.h"
@@ -86,37 +91,70 @@
/* Note: send a NC_SCENE|ND_OB_SELECT notifier yourself! (or
* or a NC_SCENE|ND_OB_VISIBLE in case of visibility toggling */
-void ED_base_object_select(Base *base, short mode)
+void ED_object_base_select(Base *base, eObjectSelect_Mode mode)
{
+ if (mode == BA_INVERT) {
+ mode = (base->flag & BASE_SELECTED) != 0 ? BA_DESELECT : BA_SELECT;
+ }
+
if (base) {
- if (mode == BA_SELECT) {
- if (!(base->object->restrictflag & OB_RESTRICT_SELECT))
- base->flag |= SELECT;
- }
- else if (mode == BA_DESELECT) {
- base->flag &= ~SELECT;
+ switch (mode) {
+ case BA_SELECT:
+ if ((base->flag & BASE_SELECTABLED) != 0) {
+ base->flag |= BASE_SELECTED;
+ }
+ break;
+ case BA_DESELECT:
+ base->flag &= ~BASE_SELECTED;
+ break;
+ case BA_INVERT:
+ /* Never happens. */
+ break;
}
- base->object->flag = base->flag;
+ BKE_scene_object_base_flag_sync_from_base(base);
}
}
-/* also to set active NULL */
-void ED_base_object_activate(bContext *C, Base *base)
+/**
+ * Change active base, it includes the notifier
+ */
+void ED_object_base_activate(bContext *C, Base *base)
{
- Scene *scene = CTX_data_scene(C);
-
- /* sets scene->basact */
- BASACT = base;
-
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+
+ WorkSpace *workspace = CTX_wm_workspace(C);
+
+ bool reset = true;
if (base) {
-
- /* XXX old signals, remember to handle notifiers now! */
- // select_actionchannel_by_name(base->object->action, "Object", 1);
-
- WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, scene);
+ Object *ob_prev = OBACT(view_layer);
+ Object *ob_curr = base->object;
+ if (ob_prev != NULL) {
+ if (ob_prev->type == ob_curr->type) {
+ reset = false;
+ }
+ }
}
- else
+
+ eObjectMode object_mode = workspace->object_mode;
+ workspace->object_mode = OB_MODE_OBJECT;
+
+ view_layer->basact = base;
+
+ if (reset == false) {
+ wmOperatorType *ot = WM_operatortype_find("OBJECT_OT_mode_set", false);
+ PointerRNA ptr;
+ WM_operator_properties_create_ptr(&ptr, ot);
+ RNA_enum_set(&ptr, "mode", object_mode);
+ WM_operator_name_call_ptr(C, ot, WM_OP_INVOKE_DEFAULT, &ptr);
+ WM_operator_properties_free(&ptr);
+ }
+
+ if (base) {
+ WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, view_layer);
+ }
+ else {
WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, NULL);
+ }
}
/********************** Selection Operators **********************/
@@ -125,13 +163,14 @@ static int objects_selectable_poll(bContext *C)
{
/* we don't check for linked scenes here, selection is
* still allowed then for inspection of scene */
- Object *obact = CTX_data_active_object(C);
-
- if (CTX_data_edit_object(C))
+ if (CTX_data_edit_object(C)) {
return 0;
- if (obact && obact->mode)
+ }
+
+ const WorkSpace *workspace = CTX_wm_workspace(C);
+ if (workspace->object_mode != OB_MODE_OBJECT) {
return 0;
-
+ }
return 1;
}
@@ -147,7 +186,7 @@ static int object_select_by_type_exec(bContext *C, wmOperator *op)
if (extend == 0) {
CTX_DATA_BEGIN (C, Base *, base, visible_bases)
{
- ED_base_object_select(base, BA_DESELECT);
+ ED_object_base_select(base, BA_DESELECT);
}
CTX_DATA_END;
}
@@ -155,7 +194,7 @@ static int object_select_by_type_exec(bContext *C, wmOperator *op)
CTX_DATA_BEGIN (C, Base *, base, visible_bases)
{
if (base->object->type == obtype) {
- ED_base_object_select(base, BA_SELECT);
+ ED_object_base_select(base, BA_SELECT);
}
}
CTX_DATA_END;
@@ -210,38 +249,15 @@ static const EnumPropertyItem prop_select_linked_types[] = {
{0, NULL, 0, NULL, NULL}
};
-// XXX old animation system
-#if 0
-static int object_select_all_by_ipo(bContext *C, Ipo *ipo)
-{
- bool changed = false;
-
- CTX_DATA_BEGIN (C, Base *, base, visible_bases)
- {
- if (base->object->ipo == ipo) {
- base->flag |= SELECT;
- base->object->flag = base->flag;
-
- changed = true;
- }
- }
- CTX_DATA_END;
-
- return changed;
-}
-#endif
-
static bool object_select_all_by_obdata(bContext *C, void *obdata)
{
bool changed = false;
CTX_DATA_BEGIN (C, Base *, base, visible_bases)
{
- if ((base->flag & SELECT) == 0) {
+ if (((base->flag & BASE_SELECTED) == 0) && ((base->flag & BASE_SELECTABLED) != 0)) {
if (base->object->data == obdata) {
- base->flag |= SELECT;
- base->object->flag = base->flag;
-
+ ED_object_base_select(base, BA_SELECT);
changed = true;
}
}
@@ -257,7 +273,7 @@ static bool object_select_all_by_material_texture(bContext *C, int use_texture,
CTX_DATA_BEGIN (C, Base *, base, visible_bases)
{
- if ((base->flag & SELECT) == 0) {
+ if (((base->flag & BASE_SELECTED) == 0) && ((base->flag & BASE_SELECTABLED) != 0)) {
Object *ob = base->object;
Material *mat1;
int a, b;
@@ -267,7 +283,7 @@ static bool object_select_all_by_material_texture(bContext *C, int use_texture,
if (!use_texture) {
if (mat1 == mat) {
- base->flag |= SELECT;
+ ED_object_base_select(base, BA_SELECT);
changed = true;
}
}
@@ -275,7 +291,7 @@ static bool object_select_all_by_material_texture(bContext *C, int use_texture,
for (b = 0; b < MAX_MTEX; b++) {
if (mat1->mtex[b]) {
if (tex == mat1->mtex[b]->tex) {
- base->flag |= SELECT;
+ ED_object_base_select(base, BA_SELECT);
changed = true;
break;
}
@@ -283,8 +299,6 @@ static bool object_select_all_by_material_texture(bContext *C, int use_texture,
}
}
}
-
- base->object->flag = base->flag;
}
}
CTX_DATA_END;
@@ -299,12 +313,10 @@ static bool object_select_all_by_dup_group(bContext *C, Object *ob)
CTX_DATA_BEGIN (C, Base *, base, visible_bases)
{
- if ((base->flag & SELECT) == 0) {
+ if (((base->flag & BASE_SELECTED) == 0) && ((base->flag & BASE_SELECTABLED) != 0)) {
Group *dup_group_other = (base->object->transflag & OB_DUPLIGROUP) ? base->object->dup_group : NULL;
if (dup_group == dup_group_other) {
- base->flag |= SELECT;
- base->object->flag = base->flag;
-
+ ED_object_base_select(base, BA_SELECT);
changed = true;
}
}
@@ -321,23 +333,21 @@ static bool object_select_all_by_particle(bContext *C, Object *ob)
CTX_DATA_BEGIN (C, Base *, base, visible_bases)
{
- if ((base->flag & SELECT) == 0) {
+ if (((base->flag & BASE_SELECTED) == 0) && ((base->flag & BASE_SELECTABLED) != 0)) {
/* loop through other particles*/
ParticleSystem *psys;
for (psys = base->object->particlesystem.first; psys; psys = psys->next) {
if (psys->part == psys_act->part) {
- base->flag |= SELECT;
+ ED_object_base_select(base, BA_SELECT);
changed = true;
break;
}
- if (base->flag & SELECT) {
+ if (base->flag & BASE_SELECTED) {
break;
}
}
-
- base->object->flag = base->flag;
}
}
CTX_DATA_END;
@@ -351,11 +361,9 @@ static bool object_select_all_by_library(bContext *C, Library *lib)
CTX_DATA_BEGIN (C, Base *, base, visible_bases)
{
- if ((base->flag & SELECT) == 0) {
+ if (((base->flag & BASE_SELECTED) == 0) && ((base->flag & BASE_SELECTABLED) != 0)) {
if (lib == base->object->id.lib) {
- base->flag |= SELECT;
- base->object->flag = base->flag;
-
+ ED_object_base_select(base, BA_SELECT);
changed = true;
}
}
@@ -371,11 +379,9 @@ static bool object_select_all_by_library_obdata(bContext *C, Library *lib)
CTX_DATA_BEGIN (C, Base *, base, visible_bases)
{
- if ((base->flag & SELECT) == 0) {
+ if (((base->flag & BASE_SELECTED) == 0) && ((base->flag & BASE_SELECTABLED) != 0)) {
if (base->object->data && lib == ((ID *)base->object->data)->lib) {
- base->flag |= SELECT;
- base->object->flag = base->flag;
-
+ ED_object_base_select(base, BA_SELECT);
changed = true;
}
}
@@ -408,6 +414,7 @@ void ED_object_select_linked_by_id(bContext *C, ID *id)
static int object_select_linked_exec(bContext *C, wmOperator *op)
{
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Object *ob;
int nr = RNA_enum_get(op->ptr, "type");
bool changed = false, extend;
@@ -417,12 +424,12 @@ static int object_select_linked_exec(bContext *C, wmOperator *op)
if (extend == 0) {
CTX_DATA_BEGIN (C, Base *, base, visible_bases)
{
- ED_base_object_select(base, BA_DESELECT);
+ ED_object_base_select(base, BA_DESELECT);
}
CTX_DATA_END;
}
- ob = OBACT;
+ ob = OBACT(view_layer);
if (ob == NULL) {
BKE_report(op->reports, RPT_ERROR, "No active object");
return OPERATOR_CANCELLED;
@@ -517,7 +524,7 @@ enum {
OBJECT_GRPSEL_PARENT = 2,
OBJECT_GRPSEL_SIBLINGS = 3,
OBJECT_GRPSEL_TYPE = 4,
- OBJECT_GRPSEL_LAYER = 5,
+ /*OBJECT_GRPSEL_LAYER = 5,*/
OBJECT_GRPSEL_GROUP = 6,
OBJECT_GRPSEL_HOOK = 7,
OBJECT_GRPSEL_PASS = 8,
@@ -533,7 +540,6 @@ static const EnumPropertyItem prop_select_grouped_types[] = {
{OBJECT_GRPSEL_PARENT, "PARENT", 0, "Parent", ""},
{OBJECT_GRPSEL_SIBLINGS, "SIBLINGS", 0, "Siblings", "Shared Parent"},
{OBJECT_GRPSEL_TYPE, "TYPE", 0, "Type", "Shared object type"},
- {OBJECT_GRPSEL_LAYER, "LAYER", 0, "Layer", "Shared layers"},
{OBJECT_GRPSEL_GROUP, "GROUP", 0, "Group", "Shared group"},
{OBJECT_GRPSEL_HOOK, "HOOK", 0, "Hook", ""},
{OBJECT_GRPSEL_PASS, "PASS", 0, "Pass", "Render pass Index"},
@@ -551,13 +557,14 @@ static bool select_grouped_children(bContext *C, Object *ob, const bool recursiv
CTX_DATA_BEGIN (C, Base *, base, selectable_bases)
{
if (ob == base->object->parent) {
- if (!(base->flag & SELECT)) {
- ED_base_object_select(base, BA_SELECT);
+ if ((base->flag & BASE_SELECTED) == 0) {
+ ED_object_base_select(base, BA_SELECT);
changed = true;
}
- if (recursive)
+ if (recursive) {
changed |= select_grouped_children(C, base->object, 1);
+ }
}
}
CTX_DATA_END;
@@ -566,20 +573,20 @@ static bool select_grouped_children(bContext *C, Object *ob, const bool recursiv
static bool select_grouped_parent(bContext *C) /* Makes parent active and de-selected OBACT */
{
- Scene *scene = CTX_data_scene(C);
- View3D *v3d = CTX_wm_view3d(C);
-
- bool changed = false;
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Base *baspar, *basact = CTX_data_active_base(C);
+ bool changed = false;
- if (!basact || !(basact->object->parent)) return 0; /* we know OBACT is valid */
+ if (!basact || !(basact->object->parent)) {
+ return 0; /* we know OBACT is valid */
+ }
- baspar = BKE_scene_base_find(scene, basact->object->parent);
+ baspar = BKE_view_layer_base_find(view_layer, basact->object->parent);
/* can be NULL if parent in other scene */
- if (baspar && BASE_SELECTABLE(v3d, baspar)) {
- ED_base_object_select(baspar, BA_SELECT);
- ED_base_object_activate(C, baspar);
+ if (baspar && BASE_SELECTABLE(baspar)) {
+ ED_object_base_select(baspar, BA_SELECT);
+ ED_object_base_activate(C, baspar);
changed = true;
}
return changed;
@@ -608,9 +615,11 @@ static bool select_grouped_group(bContext *C, Object *ob) /* Select objects in
group = ob_groups[0];
CTX_DATA_BEGIN (C, Base *, base, visible_bases)
{
- if (!(base->flag & SELECT) && BKE_group_object_exists(group, base->object)) {
- ED_base_object_select(base, BA_SELECT);
- changed = true;
+ if (((base->flag & BASE_SELECTED) == 0) && ((base->flag & BASE_SELECTABLED) != 0)) {
+ if (BKE_group_object_exists(group, base->object)) {
+ ED_object_base_select(base, BA_SELECT);
+ changed = true;
+ }
}
}
CTX_DATA_END;
@@ -632,8 +641,7 @@ static bool select_grouped_group(bContext *C, Object *ob) /* Select objects in
static bool select_grouped_object_hooks(bContext *C, Object *ob)
{
- Scene *scene = CTX_data_scene(C);
- View3D *v3d = CTX_wm_view3d(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
bool changed = false;
Base *base;
@@ -643,10 +651,10 @@ static bool select_grouped_object_hooks(bContext *C, Object *ob)
for (md = ob->modifiers.first; md; md = md->next) {
if (md->type == eModifierType_Hook) {
hmd = (HookModifierData *) md;
- if (hmd->object && !(hmd->object->flag & SELECT)) {
- base = BKE_scene_base_find(scene, hmd->object);
- if (base && (BASE_SELECTABLE(v3d, base))) {
- ED_base_object_select(base, BA_SELECT);
+ if (hmd->object) {
+ base = BKE_view_layer_base_find(view_layer, hmd->object);
+ if (base && ((base->flag & BASE_SELECTED) == 0) && (BASE_SELECTABLE(base))) {
+ ED_object_base_select(base, BA_SELECT);
changed = true;
}
}
@@ -663,8 +671,8 @@ static bool select_grouped_siblings(bContext *C, Object *ob)
CTX_DATA_BEGIN (C, Base *, base, selectable_bases)
{
- if ((base->object->parent == ob->parent) && !(base->flag & SELECT)) {
- ED_base_object_select(base, BA_SELECT);
+ if ((base->object->parent == ob->parent) && ((base->flag & BASE_SELECTED) == 0)) {
+ ED_object_base_select(base, BA_SELECT);
changed = true;
}
}
@@ -681,8 +689,8 @@ static bool select_grouped_lamptype(bContext *C, Object *ob)
{
if (base->object->type == OB_LAMP) {
Lamp *la_test = base->object->data;
- if ((la->type == la_test->type) && !(base->flag & SELECT)) {
- ED_base_object_select(base, BA_SELECT);
+ if ((la->type == la_test->type) && ((base->flag & BASE_SELECTED) == 0)) {
+ ED_object_base_select(base, BA_SELECT);
changed = true;
}
}
@@ -696,23 +704,8 @@ static bool select_grouped_type(bContext *C, Object *ob)
CTX_DATA_BEGIN (C, Base *, base, selectable_bases)
{
- if ((base->object->type == ob->type) && !(base->flag & SELECT)) {
- ED_base_object_select(base, BA_SELECT);
- changed = true;
- }
- }
- CTX_DATA_END;
- return changed;
-}
-
-static bool select_grouped_layer(bContext *C, Object *ob)
-{
- bool changed = false;
-
- CTX_DATA_BEGIN (C, Base *, base, selectable_bases)
- {
- if ((base->lay & ob->lay) && !(base->flag & SELECT)) {
- ED_base_object_select(base, BA_SELECT);
+ if ((base->object->type == ob->type) && ((base->flag & BASE_SELECTED) == 0)) {
+ ED_object_base_select(base, BA_SELECT);
changed = true;
}
}
@@ -726,8 +719,8 @@ static bool select_grouped_index_object(bContext *C, Object *ob)
CTX_DATA_BEGIN (C, Base *, base, selectable_bases)
{
- if ((base->object->index == ob->index) && !(base->flag & SELECT)) {
- ED_base_object_select(base, BA_SELECT);
+ if ((base->object->index == ob->index) && ((base->flag & BASE_SELECTED) == 0)) {
+ ED_object_base_select(base, BA_SELECT);
changed = true;
}
}
@@ -741,8 +734,8 @@ static bool select_grouped_color(bContext *C, Object *ob)
CTX_DATA_BEGIN (C, Base *, base, selectable_bases)
{
- if (!(base->flag & SELECT) && (compare_v3v3(base->object->col, ob->col, 0.005f))) {
- ED_base_object_select(base, BA_SELECT);
+ if (((base->flag & BASE_SELECTED) == 0) && (compare_v3v3(base->object->col, ob->col, 0.005f))) {
+ ED_object_base_select(base, BA_SELECT);
changed = true;
}
}
@@ -768,8 +761,8 @@ static bool select_grouped_gameprops(bContext *C, Object *ob)
CTX_DATA_BEGIN (C, Base *, base, selectable_bases)
{
- if (!(base->flag & SELECT) && (objects_share_gameprop(base->object, ob))) {
- ED_base_object_select(base, BA_SELECT);
+ if (((base->flag & BASE_SELECTED) == 0) && (objects_share_gameprop(base->object, ob))) {
+ ED_object_base_select(base, BA_SELECT);
changed = true;
}
}
@@ -807,7 +800,7 @@ static bool select_grouped_keyingset(bContext *C, Object *UNUSED(ob), ReportList
CTX_DATA_BEGIN (C, Base *, base, selectable_bases)
{
/* only check for this object if it isn't selected already, to limit time wasted */
- if ((base->flag & SELECT) == 0) {
+ if ((base->flag & BASE_SELECTED) == 0) {
KS_Path *ksp;
/* this is the slow way... we could end up with > 500 items here,
@@ -816,7 +809,7 @@ static bool select_grouped_keyingset(bContext *C, Object *UNUSED(ob), ReportList
for (ksp = ks->paths.first; ksp; ksp = ksp->next) {
/* if id matches, select then stop looping (match found) */
if (ksp->id == (ID *)base->object) {
- ED_base_object_select(base, BA_SELECT);
+ ED_object_base_select(base, BA_SELECT);
changed = true;
break;
}
@@ -831,6 +824,7 @@ static bool select_grouped_keyingset(bContext *C, Object *UNUSED(ob), ReportList
static int object_select_grouped_exec(bContext *C, wmOperator *op)
{
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Object *ob;
const int type = RNA_enum_get(op->ptr, "type");
bool changed = false, extend;
@@ -840,13 +834,13 @@ static int object_select_grouped_exec(bContext *C, wmOperator *op)
if (extend == 0) {
CTX_DATA_BEGIN (C, Base *, base, visible_bases)
{
- ED_base_object_select(base, BA_DESELECT);
+ ED_object_base_select(base, BA_DESELECT);
changed = true;
}
CTX_DATA_END;
}
- ob = OBACT;
+ ob = OBACT(view_layer);
if (ob == NULL) {
BKE_report(op->reports, RPT_ERROR, "No active object");
return OPERATOR_CANCELLED;
@@ -868,9 +862,6 @@ static int object_select_grouped_exec(bContext *C, wmOperator *op)
case OBJECT_GRPSEL_TYPE:
changed |= select_grouped_type(C, ob);
break;
- case OBJECT_GRPSEL_LAYER:
- changed |= select_grouped_layer(C, ob);
- break;
case OBJECT_GRPSEL_GROUP:
changed |= select_grouped_group(C, ob);
break;
@@ -928,85 +919,6 @@ void OBJECT_OT_select_grouped(wmOperatorType *ot)
ot->prop = RNA_def_enum(ot->srna, "type", prop_select_grouped_types, 0, "Type", "");
}
-/************************* Select by Layer **********************/
-enum {
- OB_SEL_LAYERMATCH_EXACT = 1,
- OB_SEL_LAYERMATCH_SHARED = 2,
-};
-
-static int object_select_by_layer_exec(bContext *C, wmOperator *op)
-{
- unsigned int layernum;
- bool extend;
- int match;
-
- extend = RNA_boolean_get(op->ptr, "extend");
- layernum = RNA_int_get(op->ptr, "layers");
- match = RNA_enum_get(op->ptr, "match");
-
- if (extend == false) {
- CTX_DATA_BEGIN (C, Base *, base, visible_bases)
- {
- ED_base_object_select(base, BA_DESELECT);
- }
- CTX_DATA_END;
- }
-
- CTX_DATA_BEGIN (C, Base *, base, visible_bases)
- {
- bool ok = false;
-
- switch (match) {
- case OB_SEL_LAYERMATCH_EXACT:
- /* Mask out bits used for local view, only work on real layer ones, see T45783. */
- ok = ((base->lay & ((1 << 20) - 1)) == (1 << (layernum - 1)));
- break;
- case OB_SEL_LAYERMATCH_SHARED:
- ok = (base->lay & (1 << (layernum - 1))) != 0;
- break;
- default:
- break;
- }
-
- if (ok) {
- ED_base_object_select(base, BA_SELECT);
- }
- }
- CTX_DATA_END;
-
- /* undo? */
- WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, CTX_data_scene(C));
-
- return OPERATOR_FINISHED;
-}
-
-void OBJECT_OT_select_by_layer(wmOperatorType *ot)
-{
- static const EnumPropertyItem match_items[] = {
- {OB_SEL_LAYERMATCH_EXACT, "EXACT", 0, "Exact Match", ""},
- {OB_SEL_LAYERMATCH_SHARED, "SHARED", 0, "Shared Layers", ""},
- {0, NULL, 0, NULL, NULL}
- };
-
- /* identifiers */
- ot->name = "Select by Layer";
- ot->description = "Select all visible objects on a layer";
- ot->idname = "OBJECT_OT_select_by_layer";
-
- /* api callbacks */
- /*ot->invoke = XXX - need a int grid popup*/
- ot->exec = object_select_by_layer_exec;
- ot->poll = objects_selectable_poll;
-
- /* flags */
- ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-
- /* properties */
- RNA_def_enum(ot->srna, "match", match_items, OB_SEL_LAYERMATCH_EXACT, "Match", "");
- RNA_def_boolean(ot->srna, "extend", false, "Extend", "Extend selection instead of deselecting everything first");
- RNA_def_int(ot->srna, "layers", 1, 1, 20, "Layer", "", 1, 20);
-}
-
/**************************** (De)select All ****************************/
static int object_select_all_exec(bContext *C, wmOperator *op)
@@ -1020,7 +932,7 @@ static int object_select_all_exec(bContext *C, wmOperator *op)
action = SEL_SELECT;
CTX_DATA_BEGIN (C, Base *, base, visible_bases)
{
- if (base->flag & SELECT) {
+ if ((base->flag & BASE_SELECTED) != 0) {
action = SEL_DESELECT;
break;
}
@@ -1032,17 +944,17 @@ static int object_select_all_exec(bContext *C, wmOperator *op)
{
switch (action) {
case SEL_SELECT:
- ED_base_object_select(base, BA_SELECT);
+ ED_object_base_select(base, BA_SELECT);
break;
case SEL_DESELECT:
- ED_base_object_select(base, BA_DESELECT);
+ ED_object_base_select(base, BA_DESELECT);
break;
case SEL_INVERT:
- if (base->flag & SELECT) {
- ED_base_object_select(base, BA_DESELECT);
+ if ((base->flag & BASE_SELECTED) != 0) {
+ ED_object_base_select(base, BA_DESELECT);
}
else {
- ED_base_object_select(base, BA_SELECT);
+ ED_object_base_select(base, BA_SELECT);
}
break;
}
@@ -1092,8 +1004,11 @@ static int object_select_same_group_exec(bContext *C, wmOperator *op)
CTX_DATA_BEGIN (C, Base *, base, visible_bases)
{
- if (!(base->flag & SELECT) && BKE_group_object_exists(group, base->object))
- ED_base_object_select(base, BA_SELECT);
+ if (((base->flag & BASE_SELECTED) == 0) && ((base->flag & BASE_SELECTABLED) != 0)) {
+ if (BKE_group_object_exists(group, base->object)) {
+ ED_object_base_select(base, BA_SELECT);
+ }
+ }
}
CTX_DATA_END;
@@ -1124,6 +1039,7 @@ void OBJECT_OT_select_same_group(wmOperatorType *ot)
static int object_select_mirror_exec(bContext *C, wmOperator *op)
{
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
bool extend;
extend = RNA_boolean_get(op->ptr, "extend");
@@ -1137,15 +1053,15 @@ static int object_select_mirror_exec(bContext *C, wmOperator *op)
if (!STREQ(name_flip, primbase->object->id.name + 2)) {
Object *ob = (Object *)BKE_libblock_find_name(ID_OB, name_flip);
if (ob) {
- Base *secbase = BKE_scene_base_find(scene, ob);
+ Base *secbase = BKE_view_layer_base_find(view_layer, ob);
if (secbase) {
- ED_base_object_select(secbase, BA_SELECT);
+ ED_object_base_select(secbase, BA_SELECT);
}
}
}
- if (extend == false) ED_base_object_select(primbase, BA_DESELECT);
+ if (extend == false) ED_object_base_select(primbase, BA_DESELECT);
}
CTX_DATA_END;
@@ -1180,9 +1096,9 @@ void OBJECT_OT_select_mirror(wmOperatorType *ot)
static bool object_select_more_less(bContext *C, const bool select)
{
- Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
- for (Base *base = scene->base.first; base; base = base->next) {
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
Object *ob = base->object;
ob->flag &= ~OB_DONE;
ob->id.tag &= ~LIB_TAG_DOIT;
@@ -1217,13 +1133,13 @@ static bool object_select_more_less(bContext *C, const bool select)
bool changed = false;
const short select_mode = select ? BA_SELECT : BA_DESELECT;
- const short select_flag = select ? SELECT : 0;
+ const short select_flag = select ? BASE_SELECTED : 0;
for (ctx_base = ctx_base_list.first; ctx_base; ctx_base = ctx_base->next) {
Base *base = ctx_base->ptr.data;
Object *ob = base->object;
- if ((ob->id.tag & LIB_TAG_DOIT) && ((ob->flag & SELECT) != select_flag)) {
- ED_base_object_select(base, select_mode);
+ if ((ob->id.tag & LIB_TAG_DOIT) && ((base->flag & BASE_SELECTED) != select_flag)) {
+ ED_object_base_select(base, select_mode);
changed = true;
}
}
@@ -1305,7 +1221,7 @@ static int object_select_random_exec(bContext *C, wmOperator *op)
CTX_DATA_BEGIN (C, Base *, base, selectable_bases)
{
if (BLI_rng_get_float(rng) < randfac) {
- ED_base_object_select(base, select);
+ ED_object_base_select(base, select);
}
}
CTX_DATA_END;
diff --git a/source/blender/editors/object/object_shapekey.c b/source/blender/editors/object/object_shapekey.c
index 27da607c696..bd3bd8fd0a5 100644
--- a/source/blender/editors/object/object_shapekey.c
+++ b/source/blender/editors/object/object_shapekey.c
@@ -49,9 +49,9 @@
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
+#include "DNA_workspace_types.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_key.h"
#include "BKE_library.h"
#include "BKE_main.h"
@@ -59,6 +59,9 @@
#include "BKE_lattice.h"
#include "BKE_curve.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#include "BLI_sys_types.h" // for intptr_t support
#include "ED_object.h"
@@ -213,7 +216,7 @@ static bool object_shape_key_mirror(bContext *C, Object *ob,
*r_totmirr = totmirr;
*r_totfail = totfail;
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
return 1;
@@ -223,18 +226,20 @@ static bool object_shape_key_mirror(bContext *C, Object *ob,
static int shape_key_mode_poll(bContext *C)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Object *ob = ED_object_context(C);
ID *data = (ob) ? ob->data : NULL;
- return (ob && !ID_IS_LINKED(ob) && data && !ID_IS_LINKED(data) && ob->mode != OB_MODE_EDIT);
+ return (ob && !ID_IS_LINKED(ob) && data && !ID_IS_LINKED(data) && (workspace->object_mode != OB_MODE_EDIT));
}
static int shape_key_mode_exists_poll(bContext *C)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Object *ob = ED_object_context(C);
ID *data = (ob) ? ob->data : NULL;
/* same as shape_key_mode_poll */
- return (ob && !ID_IS_LINKED(ob) && data && !ID_IS_LINKED(data) && ob->mode != OB_MODE_EDIT) &&
+ return (ob && !ID_IS_LINKED(ob) && data && !ID_IS_LINKED(data) && (workspace->object_mode != OB_MODE_EDIT)) &&
/* check a keyblock exists */
(BKE_keyblock_from_object(ob) != NULL);
}
@@ -242,12 +247,13 @@ static int shape_key_mode_exists_poll(bContext *C)
static int shape_key_move_poll(bContext *C)
{
/* Same as shape_key_mode_exists_poll above, but ensure we have at least two shapes! */
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Object *ob = ED_object_context(C);
ID *data = (ob) ? ob->data : NULL;
Key *key = BKE_key_from_object(ob);
return (ob && !ID_IS_LINKED(ob) && data && !ID_IS_LINKED(data) &&
- ob->mode != OB_MODE_EDIT && key && key->totkey > 1);
+ (workspace->object_mode != OB_MODE_EDIT) && key && key->totkey > 1);
}
static int shape_key_poll(bContext *C)
@@ -264,8 +270,8 @@ static int shape_key_add_exec(bContext *C, wmOperator *op)
ED_object_shape_key_add(C, ob, from_mix);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
- DAG_relations_tag_update(CTX_data_main(C));
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_relations_tag_update(CTX_data_main(C));
return OPERATOR_FINISHED;
}
@@ -302,8 +308,8 @@ static int shape_key_remove_exec(bContext *C, wmOperator *op)
}
if (changed) {
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
- DAG_relations_tag_update(CTX_data_main(C));
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_relations_tag_update(CTX_data_main(C));
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
return OPERATOR_FINISHED;
@@ -343,7 +349,7 @@ static int shape_key_clear_exec(bContext *C, wmOperator *UNUSED(op))
for (kb = key->block.first; kb; kb = kb->next)
kb->curval = 0.0f;
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
return OPERATOR_FINISHED;
@@ -378,7 +384,7 @@ static int shape_key_retime_exec(bContext *C, wmOperator *UNUSED(op))
for (kb = key->block.first; kb; kb = kb->next)
kb->pos = (cfra += 0.1f);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
return OPERATOR_FINISHED;
@@ -469,7 +475,7 @@ static int shape_key_move_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
return OPERATOR_FINISHED;
diff --git a/source/blender/editors/object/object_transform.c b/source/blender/editors/object/object_transform.c
index 9fea7bf5b89..d69d8f8b26e 100644
--- a/source/blender/editors/object/object_transform.c
+++ b/source/blender/editors/object/object_transform.c
@@ -39,14 +39,15 @@
#include "DNA_scene_types.h"
#include "DNA_group_types.h"
#include "DNA_lattice_types.h"
+#include "DNA_lamp_types.h"
#include "BLI_math.h"
#include "BLI_listbase.h"
#include "BLI_utildefines.h"
+#include "BLI_array.h"
#include "BKE_context.h"
#include "BKE_curve.h"
-#include "BKE_depsgraph.h"
#include "BKE_main.h"
#include "BKE_idcode.h"
#include "BKE_mball.h"
@@ -59,6 +60,8 @@
#include "BKE_lattice.h"
#include "BKE_tracking.h"
+#include "DEG_depsgraph.h"
+
#include "RNA_define.h"
#include "RNA_access.h"
@@ -71,6 +74,8 @@
#include "ED_screen.h"
#include "ED_view3d.h"
+#include "MEM_guardedalloc.h"
+
#include "object_intern.h"
/*************************** Clear Transformation ****************************/
@@ -240,6 +245,7 @@ static int object_clear_transform_generic_exec(bContext *C, wmOperator *op,
void (*clear_func)(Object *, const bool),
const char default_ksName[])
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Scene *scene = CTX_data_scene(C);
KeyingSet *ks;
const bool clear_delta = RNA_boolean_get(op->ptr, "clear_delta");
@@ -258,14 +264,14 @@ static int object_clear_transform_generic_exec(bContext *C, wmOperator *op,
*/
CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects)
{
- if (!(ob->mode & OB_MODE_WEIGHT_PAINT)) {
+ if (!(workspace->object_mode & OB_MODE_WEIGHT_PAINT)) {
/* run provided clearing function */
clear_func(ob, clear_delta);
ED_autokeyframe_object(C, scene, ob, ks);
/* tag for updates */
- DAG_id_tag_update(&ob->id, OB_RECALC_OB);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB);
}
}
CTX_DATA_END;
@@ -371,7 +377,7 @@ static int object_origin_clear_exec(bContext *C, wmOperator *UNUSED(op))
mul_m3_v3(mat, v3);
}
- DAG_id_tag_update(&ob->id, OB_RECALC_OB);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB);
}
CTX_DATA_END;
@@ -399,16 +405,19 @@ void OBJECT_OT_origin_clear(wmOperatorType *ot)
/* use this when the loc/size/rot of the parent has changed but the children
* should stay in the same place, e.g. for apply-size-rot or object center */
-static void ignore_parent_tx(Main *bmain, Scene *scene, Object *ob)
+static void ignore_parent_tx(const bContext *C, Main *bmain, Scene *scene, Object *ob)
{
Object workob;
Object *ob_child;
+ EvaluationContext eval_ctx;
+
+ CTX_data_eval_ctx(C, &eval_ctx);
/* a change was made, adjust the children to compensate */
for (ob_child = bmain->object.first; ob_child; ob_child = ob_child->id.next) {
if (ob_child->parent == ob) {
BKE_object_apply_mat4(ob_child, ob_child->obmat, true, false);
- BKE_object_workob_calc_parent(scene, ob_child, &workob);
+ BKE_object_workob_calc_parent(&eval_ctx, scene, ob_child, &workob);
invert_m4_m4(ob_child->parentinv, workob.obmat);
}
}
@@ -421,8 +430,11 @@ static int apply_objects_internal(
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
+ EvaluationContext eval_ctx;
float rsmat[3][3], obmat[3][3], iobmat[3][3], mat[4][4], scale;
bool changed = true;
+
+ CTX_data_eval_ctx(C, &eval_ctx);
/* first check if we can execute */
CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects)
@@ -525,7 +537,7 @@ static int apply_objects_internal(
Mesh *me = ob->data;
if (apply_scale)
- multiresModifier_scale_disp(scene, ob);
+ multiresModifier_scale_disp(&eval_ctx, scene, ob);
/* adjust data */
BKE_mesh_transform(me, mat, true);
@@ -615,14 +627,14 @@ static int apply_objects_internal(
unit_axis_angle(ob->rotAxis, &ob->rotAngle);
}
- BKE_object_where_is_calc(scene, ob);
+ BKE_object_where_is_calc(&eval_ctx, scene, ob);
if (ob->type == OB_ARMATURE) {
- BKE_pose_where_is(scene, ob); /* needed for bone parents */
+ BKE_pose_where_is(&eval_ctx, scene, ob); /* needed for bone parents */
}
- ignore_parent_tx(bmain, scene, ob);
+ ignore_parent_tx(C, bmain, scene, ob);
- DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA);
changed = true;
}
@@ -640,16 +652,19 @@ static int apply_objects_internal(
static int visual_transform_apply_exec(bContext *C, wmOperator *UNUSED(op))
{
Scene *scene = CTX_data_scene(C);
+ EvaluationContext eval_ctx;
bool changed = false;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects)
{
- BKE_object_where_is_calc(scene, ob);
+ BKE_object_where_is_calc(&eval_ctx, scene, ob);
BKE_object_apply_mat4(ob, ob->obmat, true, true);
- BKE_object_where_is_calc(scene, ob);
+ BKE_object_where_is_calc(&eval_ctx, scene, ob);
/* update for any children that may get moved */
- DAG_id_tag_update(&ob->id, OB_RECALC_OB);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB);
changed = true;
}
@@ -730,6 +745,7 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
Scene *scene = CTX_data_scene(C);
Object *obact = CTX_data_active_object(C);
Object *obedit = CTX_data_edit_object(C);
+ EvaluationContext eval_ctx;
Object *tob;
float cursor[3], cent[3], cent_neg[3], centn[3];
int centermode = RNA_enum_get(op->ptr, "type");
@@ -739,6 +755,8 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
CollectionPointerLink *ctx_ob;
CollectionPointerLink *ctx_ob_act = NULL;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
/* keep track of what is changed */
int tot_change = 0, tot_lib_error = 0, tot_multiuser_arm_error = 0;
@@ -793,7 +811,7 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
EDBM_mesh_normals_update(em);
tot_change++;
- DAG_id_tag_update(&obedit->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&obedit->id, OB_RECALC_DATA);
}
}
@@ -918,7 +936,7 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
if (obedit) {
if (centermode == GEOMETRY_TO_ORIGIN) {
- DAG_id_tag_update(&obedit->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&obedit->id, OB_RECALC_DATA);
}
break;
}
@@ -971,10 +989,10 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
arm->id.tag |= LIB_TAG_DOIT;
/* do_inverse_offset = true; */ /* docenter_armature() handles this */
- BKE_object_where_is_calc(scene, ob);
- BKE_pose_where_is(scene, ob); /* needed for bone parents */
+ BKE_object_where_is_calc(&eval_ctx, scene, ob);
+ BKE_pose_where_is(&eval_ctx, scene, ob); /* needed for bone parents */
- ignore_parent_tx(bmain, scene, ob);
+ ignore_parent_tx(C, bmain, scene, ob);
if (obedit)
break;
@@ -996,7 +1014,7 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
if (obedit) {
if (centermode == GEOMETRY_TO_ORIGIN) {
- DAG_id_tag_update(&obedit->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&obedit->id, OB_RECALC_DATA);
}
break;
}
@@ -1030,12 +1048,12 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
add_v3_v3(ob->loc, centn);
- BKE_object_where_is_calc(scene, ob);
+ BKE_object_where_is_calc(&eval_ctx, scene, ob);
if (ob->type == OB_ARMATURE) {
- BKE_pose_where_is(scene, ob); /* needed for bone parents */
+ BKE_pose_where_is(&eval_ctx, scene, ob); /* needed for bone parents */
}
- ignore_parent_tx(bmain, scene, ob);
+ ignore_parent_tx(C, bmain, scene, ob);
/* other users? */
//CTX_DATA_BEGIN (C, Object *, ob_other, selected_editable_objects)
@@ -1054,16 +1072,16 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
(ob->transflag | ob_other->transflag) & OB_DUPLIGROUP)))
{
ob_other->flag |= OB_DONE;
- DAG_id_tag_update(&ob_other->id, OB_RECALC_OB | OB_RECALC_DATA);
+ DEG_id_tag_update(&ob_other->id, OB_RECALC_OB | OB_RECALC_DATA);
mul_v3_mat3_m4v3(centn, ob_other->obmat, cent); /* omit translation part */
add_v3_v3(ob_other->loc, centn);
- BKE_object_where_is_calc(scene, ob_other);
+ BKE_object_where_is_calc(&eval_ctx, scene, ob_other);
if (ob_other->type == OB_ARMATURE) {
- BKE_pose_where_is(scene, ob_other); /* needed for bone parents */
+ BKE_pose_where_is(&eval_ctx, scene, ob_other); /* needed for bone parents */
}
- ignore_parent_tx(bmain, scene, ob_other);
+ ignore_parent_tx(C, bmain, scene, ob_other);
}
}
//CTX_DATA_END;
@@ -1072,9 +1090,12 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
}
BLI_freelistN(&ctx_data_list);
- for (tob = bmain->object.first; tob; tob = tob->id.next)
- if (tob->data && (((ID *)tob->data)->tag & LIB_TAG_DOIT))
- DAG_id_tag_update(&tob->id, OB_RECALC_OB | OB_RECALC_DATA);
+ for (tob = bmain->object.first; tob; tob = tob->id.next) {
+ if (tob->data && (((ID *)tob->data)->tag & LIB_TAG_DOIT)) {
+ BKE_mesh_batch_cache_dirty(tob->data, BKE_MESH_BATCH_DIRTY_ALL);
+ DEG_id_tag_update(&tob->id, OB_RECALC_OB | OB_RECALC_DATA);
+ }
+ }
if (tot_change) {
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
@@ -1131,3 +1152,389 @@ void OBJECT_OT_origin_set(wmOperatorType *ot)
ot->prop = RNA_def_enum(ot->srna, "type", prop_set_center_types, 0, "Type", "");
RNA_def_enum(ot->srna, "center", prop_set_bounds_types, V3D_AROUND_CENTER_MEAN, "Center", "");
}
+
+/* -------------------------------------------------------------------- */
+
+/** \name Transform Axis Target
+ *
+ * Note this is an experemental operator to point lamps/cameras at objects.
+ * We may re-work how this behaves based on user feedback.
+ * - campbell.
+ * \{ */
+
+/* When using multiple objects, apply their relative rotational offset to the active object. */
+#define USE_RELATIVE_ROTATION
+
+struct XFormAxisItem {
+ Object *ob;
+ float rot_mat[3][3];
+ void *obtfm;
+ float xform_dist;
+
+#ifdef USE_RELATIVE_ROTATION
+ /* use when translating multiple */
+ float xform_rot_offset[3][3];
+#endif
+};
+
+struct XFormAxisData {
+ ViewContext vc;
+ struct {
+ float depth;
+ float normal[3];
+ bool is_depth_valid;
+ bool is_normal_valid;
+ } prev;
+
+ struct XFormAxisItem *object_data;
+ uint object_data_len;
+ bool is_translate;
+
+ int init_event;
+};
+
+static bool object_is_target_compat(const Object *ob)
+{
+ if (ob->type == OB_LAMP) {
+ const Lamp *la = ob->data;
+ if (ELEM(la->type, LA_SUN, LA_SPOT, LA_HEMI, LA_AREA)) {
+ return true;
+ }
+ }
+ /* We might want to enable this later, for now just lamps */
+#if 0
+ else if (ob->type == OB_CAMERA) {
+ return true;
+ }
+#endif
+ return false;
+}
+
+static void object_transform_axis_target_free_data(wmOperator *op)
+{
+ struct XFormAxisData *xfd = op->customdata;
+ struct XFormAxisItem *item = xfd->object_data;
+ for (int i = 0; i < xfd->object_data_len; i++, item++) {
+ MEM_freeN(item->obtfm);
+ }
+ MEM_freeN(xfd->object_data);
+ MEM_freeN(xfd);
+ op->customdata = NULL;
+}
+
+/* We may want to expose as alternative to: BKE_object_apply_rotation */
+static void object_apply_rotation(Object *ob, const float rmat[3][3])
+{
+ float size[3];
+ float loc[3];
+ float rmat4[4][4];
+ copy_m4_m3(rmat4, rmat);
+
+ copy_v3_v3(size, ob->size);
+ copy_v3_v3(loc, ob->loc);
+ BKE_object_apply_mat4(ob, rmat4, true, true);
+ copy_v3_v3(ob->size, size);
+ copy_v3_v3(ob->loc, loc);
+}
+/* We may want to extract this to: BKE_object_apply_location */
+static void object_apply_location(Object *ob, const float loc[3])
+{
+ /* quick but weak */
+ Object ob_prev = *ob;
+ float mat[4][4];
+ copy_m4_m4(mat, ob->obmat);
+ copy_v3_v3(mat[3], loc);
+ BKE_object_apply_mat4(ob, mat, true, true);
+ copy_v3_v3(mat[3], ob->loc);
+ *ob = ob_prev;
+ copy_v3_v3(ob->loc, mat[3]);
+}
+
+static void object_orient_to_location(
+ Object *ob, float rot_orig[3][3], const float axis[3], const float location[3])
+{
+ float delta[3];
+ sub_v3_v3v3(delta, ob->obmat[3], location);
+ if (normalize_v3(delta) != 0.0f) {
+ if (len_squared_v3v3(delta, axis) > FLT_EPSILON) {
+ float delta_rot[3][3];
+ float final_rot[3][3];
+ rotation_between_vecs_to_mat3(delta_rot, axis, delta);
+
+ mul_m3_m3m3(final_rot, delta_rot, rot_orig);
+
+ object_apply_rotation(ob, final_rot);
+
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB);
+ }
+ }
+}
+
+static void object_transform_axis_target_cancel(bContext *C, wmOperator *op)
+{
+ struct XFormAxisData *xfd = op->customdata;
+ struct XFormAxisItem *item = xfd->object_data;
+ for (int i = 0; i < xfd->object_data_len; i++, item++) {
+ BKE_object_tfm_restore(item->ob, item->obtfm);
+ DEG_id_tag_update(&item->ob->id, OB_RECALC_OB);
+ WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, item->ob);
+ }
+
+ object_transform_axis_target_free_data(op);
+}
+
+static int object_transform_axis_target_invoke(bContext *C, wmOperator *op, const wmEvent *event)
+{
+ ViewContext vc;
+ view3d_set_viewcontext(C, &vc);
+
+ if (!object_is_target_compat(vc.obact)) {
+ /* Falls back to texture space transform. */
+ return OPERATOR_PASS_THROUGH;
+ }
+
+ EvaluationContext eval_ctx;
+
+ CTX_data_eval_ctx(C, &eval_ctx);
+
+ ED_view3d_autodist_init(&eval_ctx, vc.depsgraph, vc.ar, vc.v3d, 0);
+
+ if (vc.rv3d->depths != NULL) {
+ vc.rv3d->depths->damaged = true;
+ }
+ ED_view3d_depth_update(vc.ar);
+
+ if (vc.rv3d->depths == NULL) {
+ BKE_report(op->reports, RPT_WARNING, "Unable to access depth buffer, using view plane");
+ return OPERATOR_CANCELLED;
+ }
+
+ ED_region_tag_redraw(vc.ar);
+
+ struct XFormAxisData *xfd;
+ xfd = op->customdata = MEM_callocN(sizeof(struct XFormAxisData), __func__);
+
+ /* Don't change this at runtime. */
+ xfd->vc = vc;
+ xfd->vc.mval[0] = event->mval[0];
+ xfd->vc.mval[1] = event->mval[1];
+
+ xfd->prev.depth = 1.0f;
+ xfd->prev.is_depth_valid = false;
+ xfd->prev.is_normal_valid = false;
+ xfd->is_translate = false;
+
+ xfd->init_event = WM_userdef_event_type_from_keymap_type(event->type);
+
+ {
+ struct XFormAxisItem *object_data = NULL;
+ BLI_array_declare(object_data);
+
+ struct XFormAxisItem *item = BLI_array_append_ret(object_data);
+ item->ob = xfd->vc.obact;
+
+ CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects)
+ {
+ if ((ob != xfd->vc.obact) && object_is_target_compat(ob)) {
+ item = BLI_array_append_ret(object_data);
+ item->ob = ob;
+ }
+ }
+ CTX_DATA_END;
+
+ xfd->object_data = object_data;
+ xfd->object_data_len = BLI_array_count(object_data);
+
+ if (xfd->object_data_len != BLI_array_count(object_data)) {
+ xfd->object_data = MEM_reallocN(xfd->object_data, xfd->object_data_len * sizeof(*xfd->object_data));
+ }
+ }
+
+ {
+ struct XFormAxisItem *item = xfd->object_data;
+ for (int i = 0; i < xfd->object_data_len; i++, item++) {
+ item->obtfm = BKE_object_tfm_backup(item->ob);
+ BKE_object_rot_to_mat3(item->ob, item->rot_mat, true);
+ }
+ }
+
+ WM_event_add_modal_handler(C, op);
+
+ return OPERATOR_RUNNING_MODAL;
+}
+
+static int object_transform_axis_target_modal(bContext *C, wmOperator *op, const wmEvent *event)
+{
+ struct XFormAxisData *xfd = op->customdata;
+ ARegion *ar = xfd->vc.ar;
+
+ view3d_operator_needs_opengl(C);
+
+ const bool is_translate = (event->ctrl != 0);
+ const bool is_translate_init = is_translate && (xfd->is_translate != is_translate);
+
+ if (event->type == MOUSEMOVE || is_translate_init) {
+ const ViewDepths *depths = xfd->vc.rv3d->depths;
+ if (depths &&
+ ((unsigned int)event->mval[0] < depths->w) &&
+ ((unsigned int)event->mval[1] < depths->h))
+ {
+ double depth = (double)ED_view3d_depth_read_cached(&xfd->vc, event->mval);
+ float location_world[3];
+ if (depth == 1.0f) {
+ if (xfd->prev.is_depth_valid) {
+ depth = (double)xfd->prev.depth;
+ }
+ }
+ if ((depth > depths->depth_range[0]) && (depth < depths->depth_range[1])) {
+ xfd->prev.depth = depth;
+ xfd->prev.is_depth_valid = true;
+ if (ED_view3d_depth_unproject(ar, event->mval, depth, location_world)) {
+ if (is_translate) {
+
+ float normal[3];
+ bool normal_found = false;
+ if (ED_view3d_depth_read_cached_normal(&xfd->vc, event->mval, normal)) {
+ normal_found = true;
+
+ /* cheap attempt to smooth normals out a bit! */
+ const uint ofs = 2;
+ for (uint x = -ofs; x <= ofs; x += ofs / 2) {
+ for (uint y = -ofs; y <= ofs; y += ofs / 2) {
+ if (x != 0 && y != 0) {
+ int mval_ofs[2] = {event->mval[0] + x, event->mval[1] + y};
+ float n[3];
+ if (ED_view3d_depth_read_cached_normal(
+ &xfd->vc, mval_ofs, n))
+ {
+ add_v3_v3(normal, n);
+ }
+ }
+ }
+ }
+ normalize_v3(normal);
+ }
+ else if (xfd->prev.is_normal_valid) {
+ copy_v3_v3(normal, xfd->prev.normal);
+ normal_found = true;
+ }
+
+ if (normal_found) {
+#ifdef USE_RELATIVE_ROTATION
+ if (is_translate_init && xfd->object_data_len > 1) {
+ float xform_rot_offset_inv_first[3][3];
+ struct XFormAxisItem *item = xfd->object_data;
+ for (int i = 0; i < xfd->object_data_len; i++, item++) {
+ copy_m3_m4(item->xform_rot_offset, item->ob->obmat);
+ normalize_m3(item->xform_rot_offset);
+
+ if (i == 0) {
+ invert_m3_m3(xform_rot_offset_inv_first, xfd->object_data[0].xform_rot_offset);
+ }
+ else {
+ mul_m3_m3m3(item->xform_rot_offset,
+ item->xform_rot_offset,
+ xform_rot_offset_inv_first);
+ }
+ }
+ }
+
+#endif
+
+ struct XFormAxisItem *item = xfd->object_data;
+ for (int i = 0; i < xfd->object_data_len; i++, item++) {
+ if (is_translate_init) {
+ float ob_axis[3];
+ item->xform_dist = len_v3v3(item->ob->obmat[3], location_world);
+ normalize_v3_v3(ob_axis, item->ob->obmat[2]);
+ /* Scale to avoid adding distance when moving between surfaces. */
+ float scale = fabsf(dot_v3v3(ob_axis, normal));
+ item->xform_dist *= scale;
+ }
+
+ float target_normal[3];
+ copy_v3_v3(target_normal, normal);
+
+#ifdef USE_RELATIVE_ROTATION
+ if (i != 0) {
+ mul_m3_v3(item->xform_rot_offset, target_normal);
+ }
+#endif
+ {
+ float loc[3];
+
+ copy_v3_v3(loc, location_world);
+ madd_v3_v3fl(loc, target_normal, item->xform_dist);
+ object_apply_location(item->ob, loc);
+ copy_v3_v3(item->ob->obmat[3], loc); /* so orient behaves as expected */
+ }
+
+ object_orient_to_location(item->ob, item->rot_mat, item->rot_mat[2], location_world);
+ WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, item->ob);
+ }
+ copy_v3_v3(xfd->prev.normal, normal);
+ xfd->prev.is_normal_valid = true;
+ }
+ }
+ else {
+ struct XFormAxisItem *item = xfd->object_data;
+ for (int i = 0; i < xfd->object_data_len; i++, item++) {
+ object_orient_to_location(item->ob, item->rot_mat, item->rot_mat[2], location_world);
+ WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, item->ob);
+ }
+ xfd->prev.is_normal_valid = false;
+ }
+ }
+ }
+ }
+ xfd->is_translate = is_translate;
+
+ ED_region_tag_redraw(xfd->vc.ar);
+ }
+
+ bool is_finished = false;
+
+ if (ISMOUSE(xfd->init_event)) {
+ if ((event->type == xfd->init_event) && (event->val == KM_RELEASE)) {
+ is_finished = true;
+ }
+ }
+ else {
+ if (ELEM(event->type, LEFTMOUSE, RETKEY, PADENTER)) {
+ is_finished = true;
+ }
+ }
+
+ if (is_finished) {
+ object_transform_axis_target_free_data(op);
+ return OPERATOR_FINISHED;
+ }
+ else if (ELEM(event->type, ESCKEY, RIGHTMOUSE)) {
+ object_transform_axis_target_cancel(C, op);
+ return OPERATOR_CANCELLED;
+ }
+
+
+ return OPERATOR_RUNNING_MODAL;
+}
+
+void OBJECT_OT_transform_axis_target(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Interactive Lamp Track to Cursor";
+ ot->description = "Interactively point cameras and lamps to a location (Ctrl translates)";
+ ot->idname = "OBJECT_OT_transform_axis_target";
+
+ /* api callbacks */
+ ot->invoke = object_transform_axis_target_invoke;
+ ot->cancel = object_transform_axis_target_cancel;
+ ot->modal = object_transform_axis_target_modal;
+ ot->poll = ED_operator_region_view3d_active;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING;
+}
+
+#undef USE_RELATIVE_ROTATION
+
+/** \} */
diff --git a/source/blender/editors/object/object_vgroup.c b/source/blender/editors/object/object_vgroup.c
index c62ed74eaff..8c6ccb7e8f0 100644
--- a/source/blender/editors/object/object_vgroup.c
+++ b/source/blender/editors/object/object_vgroup.c
@@ -43,6 +43,7 @@
#include "DNA_modifier_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
+#include "DNA_workspace_types.h"
#include "BLI_alloca.h"
#include "BLI_array.h"
@@ -56,9 +57,9 @@
#include "BKE_context.h"
#include "BKE_customdata.h"
#include "BKE_deform.h"
-#include "BKE_depsgraph.h"
#include "BKE_mesh_mapping.h"
#include "BKE_editmesh.h"
+#include "BKE_layer.h"
#include "BKE_modifier.h"
#include "BKE_report.h"
#include "BKE_DerivedMesh.h"
@@ -66,6 +67,8 @@
#include "BKE_object.h"
#include "BKE_lattice.h"
+#include "DEG_depsgraph.h"
+
#include "DNA_armature_types.h"
#include "RNA_access.h"
#include "RNA_define.h"
@@ -82,9 +85,9 @@
#include "object_intern.h"
/************************ Exported Functions **********************/
-static bool vertex_group_use_vert_sel(Object *ob)
+static bool vertex_group_use_vert_sel(const Object *ob)
{
- if (ob->mode == OB_MODE_EDIT) {
+ if (BKE_object_is_in_editmode(ob)) {
return true;
}
else if (ob->type == OB_MESH && ((Mesh *)ob->data)->editflag & ME_EDIT_PAINT_VERT_SEL) {
@@ -105,13 +108,15 @@ static Lattice *vgroup_edit_lattice(Object *ob)
bool ED_vgroup_sync_from_pose(Object *ob)
{
Object *armobj = BKE_object_pose_armature_get(ob);
- if (armobj && (armobj->mode & OB_MODE_POSE)) {
+ if (armobj) {
struct bArmature *arm = armobj->data;
- if (arm->act_bone) {
- int def_num = defgroup_name_index(ob, arm->act_bone->name);
- if (def_num != -1) {
- ob->actdef = def_num + 1;
- return true;
+ if (arm->flag & ARM_POSEMODE) {
+ if (arm->act_bone) {
+ int def_num = defgroup_name_index(ob, arm->act_bone->name);
+ if (def_num != -1) {
+ ob->actdef = def_num + 1;
+ return true;
+ }
}
}
}
@@ -1270,9 +1275,9 @@ static void dm_deform_clear(DerivedMesh *dm, Object *ob)
}
/* recalculate the deformation */
-static DerivedMesh *dm_deform_recalc(Scene *scene, Object *ob)
+static DerivedMesh *dm_deform_recalc(EvaluationContext *eval_ctx, Scene *scene, Object *ob)
{
- return mesh_get_derived_deform(scene, ob, CD_MASK_BAREMESH);
+ return mesh_get_derived_deform(eval_ctx, scene, ob, CD_MASK_BAREMESH);
}
/* by changing nonzero weights, try to move a vertex in me->mverts with index 'index' to
@@ -1285,7 +1290,7 @@ static DerivedMesh *dm_deform_recalc(Scene *scene, Object *ob)
* coord is a point on the plane
*/
static void moveCloserToDistanceFromPlane(
- Scene *scene, Object *ob, Mesh *me, int index, float norm[3],
+ EvaluationContext *eval_ctx, Scene *scene, Object *ob, Mesh *me, int index, float norm[3],
float coord[3], float d, float distToBe, float strength, float cp)
{
DerivedMesh *dm;
@@ -1312,7 +1317,7 @@ static void moveCloserToDistanceFromPlane(
float originalDistToBe = distToBe;
do {
wasChange = false;
- dm = dm_deform_recalc(scene, ob);
+ dm = dm_deform_recalc(eval_ctx, scene, ob);
dm->getVert(dm, index, &m);
copy_v3_v3(oldPos, m.co);
distToStart = dot_v3v3(norm, oldPos) + d;
@@ -1350,7 +1355,7 @@ static void moveCloserToDistanceFromPlane(
if (dw->weight > 1) {
dw->weight = 1;
}
- dm = dm_deform_recalc(scene, ob);
+ dm = dm_deform_recalc(eval_ctx, scene, ob);
dm->getVert(dm, index, &m);
getVerticalAndHorizontalChange(norm, d, coord, oldPos, distToStart, m.co, changes, dists, i);
dw->weight = oldw;
@@ -1460,10 +1465,13 @@ static void moveCloserToDistanceFromPlane(
/* this is used to try to smooth a surface by only adjusting the nonzero weights of a vertex
* but it could be used to raise or lower an existing 'bump.' */
-static void vgroup_fix(Scene *scene, Object *ob, float distToBe, float strength, float cp)
+static void vgroup_fix(const bContext *C, Scene *scene, Object *ob, float distToBe, float strength, float cp)
{
+ EvaluationContext eval_ctx;
int i;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
Mesh *me = ob->data;
MVert *mvert = me->mvert;
int *verts = NULL;
@@ -1477,7 +1485,7 @@ static void vgroup_fix(Scene *scene, Object *ob, float distToBe, float strength,
MVert *p = MEM_callocN(sizeof(MVert) * (count), "deformedPoints");
int k;
- DerivedMesh *dm = mesh_get_derived_deform(scene, ob, CD_MASK_BAREMESH);
+ DerivedMesh *dm = mesh_get_derived_deform(&eval_ctx, scene, ob, CD_MASK_BAREMESH);
k = count;
while (k--) {
dm->getVert(dm, verts[k], &m);
@@ -1495,7 +1503,7 @@ static void vgroup_fix(Scene *scene, Object *ob, float distToBe, float strength,
if (mag) { /* zeros fix */
d = -dot_v3v3(norm, coord);
/* dist = (dot_v3v3(norm, m.co) + d); */ /* UNUSED */
- moveCloserToDistanceFromPlane(scene, ob, me, i, norm, coord, d, distToBe, strength, cp);
+ moveCloserToDistanceFromPlane(&eval_ctx, scene, ob, me, i, norm, coord, d, distToBe, strength, cp);
}
}
@@ -2542,12 +2550,13 @@ static int vertex_group_vert_poll_ex(bContext *C, const bool needs_select, const
return false;
}
+ const WorkSpace *workspace = CTX_wm_workspace(C);
if (BKE_object_is_in_editmode_vgroup(ob)) {
return true;
}
- else if (ob->mode & OB_MODE_WEIGHT_PAINT) {
+ else if (workspace->object_mode & OB_MODE_WEIGHT_PAINT) {
if (needs_select) {
- if (BKE_object_is_in_wpaint_select_vert(ob)) {
+ if (BKE_object_is_in_wpaint_select_vert(ob, workspace->object_mode)) {
return true;
}
else {
@@ -2599,8 +2608,9 @@ static int vertex_group_vert_select_unlocked_poll(bContext *C)
if (!(ob && !ID_IS_LINKED(ob) && data && !ID_IS_LINKED(data)))
return 0;
+ const WorkSpace *workspace = CTX_wm_workspace(C);
if (!(BKE_object_is_in_editmode_vgroup(ob) ||
- BKE_object_is_in_wpaint_select_vert(ob)))
+ BKE_object_is_in_wpaint_select_vert(ob, workspace->object_mode)))
{
return 0;
}
@@ -2626,8 +2636,9 @@ static int vertex_group_vert_select_mesh_poll(bContext *C)
if (ob->type != OB_MESH)
return 0;
+ const WorkSpace *workspace = CTX_wm_workspace(C);
return (BKE_object_is_in_editmode_vgroup(ob) ||
- BKE_object_is_in_wpaint_select_vert(ob));
+ BKE_object_is_in_wpaint_select_vert(ob, workspace->object_mode));
}
static int vertex_group_add_exec(bContext *C, wmOperator *UNUSED(op))
@@ -2635,7 +2646,7 @@ static int vertex_group_add_exec(bContext *C, wmOperator *UNUSED(op))
Object *ob = ED_object_context(C);
BKE_object_defgroup_add(ob);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_GEOM | ND_VERTEX_GROUP, ob->data);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
@@ -2668,7 +2679,7 @@ static int vertex_group_remove_exec(bContext *C, wmOperator *op)
else
vgroup_delete_active(ob);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_GEOM | ND_VERTEX_GROUP, ob->data);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
@@ -2703,7 +2714,7 @@ static int vertex_group_assign_exec(bContext *C, wmOperator *UNUSED(op))
Object *ob = ED_object_context(C);
vgroup_assign_verts(ob, ts->vgroup_weight);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data);
return OPERATOR_FINISHED;
@@ -2776,7 +2787,7 @@ static int vertex_group_remove_from_exec(bContext *C, wmOperator *op)
}
}
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data);
return OPERATOR_FINISHED;
@@ -2865,7 +2876,7 @@ static int vertex_group_copy_exec(bContext *C, wmOperator *UNUSED(op))
Object *ob = ED_object_context(C);
vgroup_duplicate(ob);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
WM_event_add_notifier(C, NC_GEOM | ND_VERTEX_GROUP, ob->data);
@@ -2901,7 +2912,7 @@ static int vertex_group_levels_exec(bContext *C, wmOperator *op)
vgroup_levels_subset(ob, vgroup_validmap, vgroup_tot, subset_count, offset, gain);
MEM_freeN((void *)vgroup_validmap);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data);
@@ -2935,7 +2946,7 @@ static int vertex_group_normalize_exec(bContext *C, wmOperator *UNUSED(op))
changed = vgroup_normalize(ob);
if (changed) {
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data);
@@ -2974,7 +2985,7 @@ static int vertex_group_normalize_all_exec(bContext *C, wmOperator *op)
MEM_freeN((void *)vgroup_validmap);
if (changed) {
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data);
@@ -3027,9 +3038,9 @@ static int vertex_group_fix_exec(bContext *C, wmOperator *op)
BKE_report(op->reports, RPT_ERROR_INVALID_CONTEXT, "This operator does not support an active mirror modifier");
return OPERATOR_CANCELLED;
}
- vgroup_fix(scene, ob, distToBe, strength, cp);
+ vgroup_fix(C, scene, ob, distToBe, strength, cp);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data);
@@ -3101,7 +3112,7 @@ static int vertex_group_invert_exec(bContext *C, wmOperator *op)
vgroup_invert_subset(ob, vgroup_validmap, vgroup_tot, subset_count, auto_assign, auto_remove);
MEM_freeN((void *)vgroup_validmap);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data);
@@ -3143,7 +3154,7 @@ static int vertex_group_smooth_exec(bContext *C, wmOperator *op)
vgroup_smooth_subset(ob, vgroup_validmap, vgroup_tot, subset_count, fac, repeat, fac_expand);
MEM_freeN((void *)vgroup_validmap);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data);
@@ -3185,7 +3196,7 @@ static int vertex_group_clean_exec(bContext *C, wmOperator *op)
vgroup_clean_subset(ob, vgroup_validmap, vgroup_tot, subset_count, limit, keep_single);
MEM_freeN((void *)vgroup_validmap);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data);
@@ -3226,7 +3237,7 @@ static int vertex_group_quantize_exec(bContext *C, wmOperator *op)
vgroup_quantize_subset(ob, vgroup_validmap, vgroup_tot, subset_count, steps);
MEM_freeN((void *)vgroup_validmap);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data);
@@ -3267,7 +3278,7 @@ static int vertex_group_limit_total_exec(bContext *C, wmOperator *op)
BKE_reportf(op->reports, remove_tot ? RPT_INFO : RPT_WARNING, "%d vertex weights limited", remove_tot);
if (remove_tot) {
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data);
@@ -3313,7 +3324,7 @@ static int vertex_group_mirror_exec(bContext *C, wmOperator *op)
ED_mesh_report_mirror(op, totmirr, totfail);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data);
@@ -3346,25 +3357,26 @@ void OBJECT_OT_vertex_group_mirror(wmOperatorType *ot)
static int vertex_group_copy_to_linked_exec(bContext *C, wmOperator *UNUSED(op))
{
Scene *scene = CTX_data_scene(C);
- Object *ob = ED_object_context(C);
- Base *base;
+ Object *ob_active = ED_object_context(C);
int retval = OPERATOR_CANCELLED;
- for (base = scene->base.first; base; base = base->next) {
- if (base->object->type == ob->type) {
- if (base->object != ob && base->object->data == ob->data) {
- BLI_freelistN(&base->object->defbase);
- BLI_duplicatelist(&base->object->defbase, &ob->defbase);
- base->object->actdef = ob->actdef;
+ FOREACH_SCENE_OBJECT(scene, ob_iter)
+ {
+ if (ob_iter->type == ob_active->type) {
+ if (ob_iter != ob_active && ob_iter->data == ob_active->data) {
+ BLI_freelistN(&ob_iter->defbase);
+ BLI_duplicatelist(&ob_iter->defbase, &ob_active->defbase);
+ ob_iter->actdef = ob_active->actdef;
- DAG_id_tag_update(&base->object->id, OB_RECALC_DATA);
- WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, base->object);
- WM_event_add_notifier(C, NC_GEOM | ND_VERTEX_GROUP, base->object->data);
+ DEG_id_tag_update(&ob_iter->id, OB_RECALC_DATA);
+ WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob_iter);
+ WM_event_add_notifier(C, NC_GEOM | ND_VERTEX_GROUP, ob_iter->data);
retval = OPERATOR_FINISHED;
}
}
}
+ FOREACH_SCENE_OBJECT_END
return retval;
}
@@ -3394,7 +3406,7 @@ static int vertex_group_copy_to_selected_exec(bContext *C, wmOperator *op)
{
if (obact != ob) {
if (ED_vgroup_array_copy(ob, obact)) {
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_GEOM | ND_VERTEX_GROUP, ob);
changed_tot++;
}
@@ -3437,7 +3449,7 @@ static int set_active_group_exec(bContext *C, wmOperator *op)
BLI_assert(nr + 1 >= 0);
ob->actdef = nr + 1;
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_GEOM | ND_VERTEX_GROUP, ob);
return OPERATOR_FINISHED;
@@ -3510,7 +3522,8 @@ static char *vgroup_init_remap(Object *ob)
return name_array;
}
-static int vgroup_do_remap(Object *ob, const char *name_array, wmOperator *op)
+static int vgroup_do_remap(
+ const EvaluationContext *eval_ctx, Object *ob, const char *name_array, wmOperator *op)
{
MDeformVert *dvert = NULL;
bDeformGroup *def;
@@ -3531,7 +3544,7 @@ static int vgroup_do_remap(Object *ob, const char *name_array, wmOperator *op)
BLI_assert(sort_map[i] != -1);
}
- if (ob->mode == OB_MODE_EDIT) {
+ if (eval_ctx->object_mode == OB_MODE_EDIT) {
if (ob->type == OB_MESH) {
BMEditMesh *em = BKE_editmesh_from_object(ob);
const int cd_dvert_offset = CustomData_get_offset(&em->bm->vdata, CD_MDEFORMVERT);
@@ -3629,6 +3642,8 @@ enum {
static int vertex_group_sort_exec(bContext *C, wmOperator *op)
{
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
Object *ob = ED_object_context(C);
char *name_array;
int ret;
@@ -3648,10 +3663,10 @@ static int vertex_group_sort_exec(bContext *C, wmOperator *op)
}
/*remap vgroup data to map to correct names*/
- ret = vgroup_do_remap(ob, name_array, op);
+ ret = vgroup_do_remap(&eval_ctx, ob, name_array, op);
if (ret != OPERATOR_CANCELLED) {
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_GEOM | ND_VERTEX_GROUP, ob);
}
@@ -3684,6 +3699,8 @@ void OBJECT_OT_vertex_group_sort(wmOperatorType *ot)
static int vgroup_move_exec(bContext *C, wmOperator *op)
{
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
Object *ob = ED_object_context(C);
bDeformGroup *def;
char *name_array;
@@ -3698,10 +3715,10 @@ static int vgroup_move_exec(bContext *C, wmOperator *op)
name_array = vgroup_init_remap(ob);
if (BLI_listbase_link_move(&ob->defbase, def, dir)) {
- ret = vgroup_do_remap(ob, name_array, op);
+ ret = vgroup_do_remap(&eval_ctx, ob, name_array, op);
if (ret != OPERATOR_CANCELLED) {
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_GEOM | ND_VERTEX_GROUP, ob);
}
}
@@ -3830,7 +3847,7 @@ static int vertex_weight_paste_exec(bContext *C, wmOperator *op)
vgroup_copy_active_to_sel_single(ob, def_nr);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
return OPERATOR_FINISHED;
@@ -3867,7 +3884,7 @@ static int vertex_weight_delete_exec(bContext *C, wmOperator *op)
vgroup_remove_weight(ob, def_nr);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
return OPERATOR_FINISHED;
@@ -3900,7 +3917,7 @@ static int vertex_weight_set_active_exec(bContext *C, wmOperator *op)
if (wg_index != -1) {
ob->actdef = wg_index + 1;
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
}
@@ -3937,7 +3954,7 @@ static int vertex_weight_normalize_active_vertex_exec(bContext *C, wmOperator *U
changed = vgroup_normalize_active_vertex(ob, subset_type);
if (changed) {
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
return OPERATOR_FINISHED;
@@ -3970,7 +3987,7 @@ static int vertex_weight_copy_exec(bContext *C, wmOperator *UNUSED(op))
vgroup_copy_active_to_sel(ob, subset_type);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
return OPERATOR_FINISHED;
diff --git a/source/blender/editors/physics/CMakeLists.txt b/source/blender/editors/physics/CMakeLists.txt
index 898422dac51..3cecdccd758 100644
--- a/source/blender/editors/physics/CMakeLists.txt
+++ b/source/blender/editors/physics/CMakeLists.txt
@@ -23,6 +23,7 @@ set(INC
../../blenkernel
../../blenlib
../../blentranslation
+ ../../depsgraph
../../gpu
../../makesdna
../../makesrna
diff --git a/source/blender/editors/physics/dynamicpaint_ops.c b/source/blender/editors/physics/dynamicpaint_ops.c
index b0c14ef3623..e068b898345 100644
--- a/source/blender/editors/physics/dynamicpaint_ops.c
+++ b/source/blender/editors/physics/dynamicpaint_ops.c
@@ -42,7 +42,6 @@
#include "BKE_context.h"
#include "BKE_deform.h"
#include "BKE_object_deform.h"
-#include "BKE_depsgraph.h"
#include "BKE_dynamicpaint.h"
#include "BKE_global.h"
#include "BKE_main.h"
@@ -50,6 +49,9 @@
#include "BKE_report.h"
#include "BKE_screen.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#include "ED_mesh.h"
#include "ED_screen.h"
#include "ED_object.h"
@@ -135,7 +137,7 @@ static int surface_slot_remove_exec(bContext *C, wmOperator *UNUSED(op))
}
dynamicPaint_resetPreview(canvas);
- DAG_id_tag_update(&obj_ctx->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&obj_ctx->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, obj_ctx);
return OPERATOR_FINISHED;
@@ -181,8 +183,8 @@ static int type_toggle_exec(bContext *C, wmOperator *op)
}
/* update dependency */
- DAG_id_tag_update(&cObject->id, OB_RECALC_DATA);
- DAG_relations_tag_update(CTX_data_main(C));
+ DEG_id_tag_update(&cObject->id, OB_RECALC_DATA);
+ DEG_relations_tag_update(CTX_data_main(C));
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, cObject);
return OPERATOR_FINISHED;
@@ -286,11 +288,15 @@ typedef struct DynamicPaintBakeJob {
struct Main *bmain;
Scene *scene;
+ ViewLayer *view_layer;
+ Depsgraph *depsgraph;
Object *ob;
DynamicPaintSurface *surface;
DynamicPaintCanvasSettings *canvas;
+ EvaluationContext *eval_ctx;
+
int success;
double start;
} DynamicPaintBakeJob;
@@ -310,6 +316,8 @@ static void dpaint_bake_endjob(void *customdata)
dynamicPaint_freeSurfaceData(job->surface);
+ MEM_freeN(job->eval_ctx);
+
G.is_rendering = false;
BKE_spacedata_draw_locks(false);
@@ -357,7 +365,7 @@ static void dynamicPaint_bakeImageSequence(DynamicPaintBakeJob *job)
frame = surface->start_frame;
orig_frame = scene->r.cfra;
scene->r.cfra = (int)frame;
- ED_update_for_newframe(job->bmain, scene, 1);
+ ED_update_for_newframe(job->bmain, scene, job->view_layer, job->depsgraph);
/* Init surface */
if (!dynamicPaint_createUVSurface(scene, surface, job->progress, job->do_update)) {
@@ -383,8 +391,8 @@ static void dynamicPaint_bakeImageSequence(DynamicPaintBakeJob *job)
/* calculate a frame */
scene->r.cfra = (int)frame;
- ED_update_for_newframe(job->bmain, scene, 1);
- if (!dynamicPaint_calculateFrame(surface, scene, cObject, frame)) {
+ ED_update_for_newframe(job->bmain, scene, job->view_layer, job->depsgraph);
+ if (!dynamicPaint_calculateFrame(surface, job->eval_ctx, scene, cObject, frame)) {
job->success = 0;
return;
}
@@ -452,6 +460,10 @@ static int dynamicpaint_bake_exec(struct bContext *C, struct wmOperator *op)
DynamicPaintCanvasSettings *canvas;
Object *ob = ED_object_context(C);
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ EvaluationContext *eval_ctx = MEM_mallocN(sizeof(*eval_ctx), "EvaluationContext");
+
+ CTX_data_eval_ctx(C, eval_ctx);
DynamicPaintSurface *surface;
@@ -479,9 +491,12 @@ static int dynamicpaint_bake_exec(struct bContext *C, struct wmOperator *op)
DynamicPaintBakeJob *job = MEM_mallocN(sizeof(DynamicPaintBakeJob), "DynamicPaintBakeJob");
job->bmain = CTX_data_main(C);
job->scene = scene;
+ job->view_layer = view_layer;
+ job->depsgraph = CTX_data_depsgraph(C);
job->ob = ob;
job->canvas = canvas;
job->surface = surface;
+ job->eval_ctx = eval_ctx;
wmJob *wm_job = WM_jobs_get(CTX_wm_manager(C), CTX_wm_window(C), scene,
"Dynamic Paint Bake", WM_JOB_PROGRESS,
diff --git a/source/blender/editors/physics/particle_boids.c b/source/blender/editors/physics/particle_boids.c
index 14b12497c4a..681ac75e847 100644
--- a/source/blender/editors/physics/particle_boids.c
+++ b/source/blender/editors/physics/particle_boids.c
@@ -39,10 +39,12 @@
#include "BKE_boids.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_main.h"
#include "BKE_particle.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#include "RNA_access.h"
#include "RNA_enum_types.h"
#include "RNA_define.h"
@@ -75,7 +77,7 @@ static int rule_add_exec(bContext *C, wmOperator *op)
BLI_addtail(&state->rules, rule);
- DAG_id_tag_update(&part->id, OB_RECALC_DATA|PSYS_RECALC_RESET);
+ DEG_id_tag_update(&part->id, OB_RECALC_DATA|PSYS_RECALC_RESET);
return OPERATOR_FINISHED;
}
@@ -121,8 +123,8 @@ static int rule_del_exec(bContext *C, wmOperator *UNUSED(op))
if (rule)
rule->flag |= BOIDRULE_CURRENT;
- DAG_relations_tag_update(bmain);
- DAG_id_tag_update(&part->id, OB_RECALC_DATA|PSYS_RECALC_RESET);
+ DEG_relations_tag_update(bmain);
+ DEG_id_tag_update(&part->id, OB_RECALC_DATA|PSYS_RECALC_RESET);
return OPERATOR_FINISHED;
}
@@ -158,7 +160,7 @@ static int rule_move_up_exec(bContext *C, wmOperator *UNUSED(op))
BLI_remlink(&state->rules, rule);
BLI_insertlinkbefore(&state->rules, rule->prev, rule);
- DAG_id_tag_update(&part->id, OB_RECALC_DATA|PSYS_RECALC_RESET);
+ DEG_id_tag_update(&part->id, OB_RECALC_DATA|PSYS_RECALC_RESET);
break;
}
}
@@ -194,7 +196,7 @@ static int rule_move_down_exec(bContext *C, wmOperator *UNUSED(op))
BLI_remlink(&state->rules, rule);
BLI_insertlinkafter(&state->rules, rule->next, rule);
- DAG_id_tag_update(&part->id, OB_RECALC_DATA|PSYS_RECALC_RESET);
+ DEG_id_tag_update(&part->id, OB_RECALC_DATA|PSYS_RECALC_RESET);
break;
}
}
@@ -277,8 +279,8 @@ static int state_del_exec(bContext *C, wmOperator *UNUSED(op))
state->flag |= BOIDSTATE_CURRENT;
- DAG_relations_tag_update(bmain);
- DAG_id_tag_update(&part->id, OB_RECALC_DATA|PSYS_RECALC_RESET);
+ DEG_relations_tag_update(bmain);
+ DEG_id_tag_update(&part->id, OB_RECALC_DATA|PSYS_RECALC_RESET);
return OPERATOR_FINISHED;
}
@@ -349,7 +351,7 @@ static int state_move_down_exec(bContext *C, wmOperator *UNUSED(op))
if (state->flag & BOIDSTATE_CURRENT && state->next) {
BLI_remlink(&boids->states, state);
BLI_insertlinkafter(&boids->states, state->next, state);
- DAG_id_tag_update(&part->id, OB_RECALC_DATA|PSYS_RECALC_RESET);
+ DEG_id_tag_update(&part->id, OB_RECALC_DATA|PSYS_RECALC_RESET);
break;
}
}
diff --git a/source/blender/editors/physics/particle_edit.c b/source/blender/editors/physics/particle_edit.c
index da66ec44235..c78f1eaebd0 100644
--- a/source/blender/editors/physics/particle_edit.c
+++ b/source/blender/editors/physics/particle_edit.c
@@ -43,6 +43,7 @@
#include "DNA_view3d_types.h"
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
+#include "DNA_workspace_types.h"
#include "BLI_math.h"
#include "BLI_lasso.h"
@@ -53,7 +54,6 @@
#include "BLI_utildefines.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_DerivedMesh.h"
#include "BKE_global.h"
#include "BKE_object.h"
@@ -64,8 +64,9 @@
#include "BKE_bvhutils.h"
#include "BKE_pointcache.h"
+#include "DEG_depsgraph.h"
+
#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "ED_object.h"
#include "ED_physics.h"
@@ -73,6 +74,9 @@
#include "ED_particle.h"
#include "ED_view3d.h"
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+
#include "UI_resources.h"
#include "WM_api.h"
@@ -83,7 +87,9 @@
#include "physics_intern.h"
-void PE_create_particle_edit(Scene *scene, Object *ob, PointCache *cache, ParticleSystem *psys);
+void PE_create_particle_edit(
+ const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, Object *ob,
+ PointCache *cache, ParticleSystem *psys);
void PTCacheUndo_clear(PTCacheEdit *edit);
void recalc_lengths(PTCacheEdit *edit);
void recalc_emitter_field(Object *ob, ParticleSystem *psys);
@@ -108,25 +114,29 @@ void update_world_cos(Object *ob, PTCacheEdit *edit);
int PE_poll(bContext *C)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Scene *scene= CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Object *ob= CTX_data_active_object(C);
- if (!scene || !ob || !(ob->mode & OB_MODE_PARTICLE_EDIT))
+ if (!scene || !view_layer || !ob || !(workspace->object_mode & OB_MODE_PARTICLE_EDIT)) {
return 0;
-
- return (PE_get_current(scene, ob) != NULL);
+ }
+ return (PE_get_current(scene, view_layer, ob) != NULL);
}
int PE_hair_poll(bContext *C)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Scene *scene= CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Object *ob= CTX_data_active_object(C);
PTCacheEdit *edit;
- if (!scene || !ob || !(ob->mode & OB_MODE_PARTICLE_EDIT))
+ if (!scene || !ob || !(workspace->object_mode & OB_MODE_PARTICLE_EDIT)) {
return 0;
-
- edit= PE_get_current(scene, ob);
+ }
+ edit= PE_get_current(scene, view_layer, ob);
return (edit && edit->psys);
}
@@ -211,7 +221,8 @@ static float pe_brush_size_get(const Scene *UNUSED(scene), ParticleBrushData *br
*
* note: this function runs on poll, therefor it can runs many times a second
* keep it fast! */
-static PTCacheEdit *pe_get_current(Scene *scene, Object *ob, int create)
+static PTCacheEdit *pe_get_current(
+ const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, Object *ob, int create)
{
ParticleEditSettings *pset= PE_settings(scene);
PTCacheEdit *edit = NULL;
@@ -222,6 +233,7 @@ static PTCacheEdit *pe_get_current(Scene *scene, Object *ob, int create)
return NULL;
pset->scene = scene;
+ pset->view_layer = view_layer;
pset->object = ob;
BKE_ptcache_ids_from_object(&pidlist, ob, NULL, 0);
@@ -250,18 +262,18 @@ static PTCacheEdit *pe_get_current(Scene *scene, Object *ob, int create)
if (psys->part && psys->part->type == PART_HAIR) {
if (psys->flag & PSYS_HAIR_DYNAMICS && psys->pointcache->flag & PTCACHE_BAKED) {
if (create && !psys->pointcache->edit)
- PE_create_particle_edit(scene, ob, pid->cache, NULL);
+ PE_create_particle_edit(eval_ctx, scene, view_layer, ob, pid->cache, NULL);
edit = pid->cache->edit;
}
else {
if (create && !psys->edit && psys->flag & PSYS_HAIR_DONE)
- PE_create_particle_edit(scene, ob, NULL, psys);
+ PE_create_particle_edit(eval_ctx, scene, view_layer, ob, NULL, psys);
edit = psys->edit;
}
}
else {
if (create && pid->cache->flag & PTCACHE_BAKED && !pid->cache->edit)
- PE_create_particle_edit(scene, ob, pid->cache, psys);
+ PE_create_particle_edit(eval_ctx, scene, view_layer, ob, pid->cache, psys);
edit = pid->cache->edit;
}
@@ -272,7 +284,7 @@ static PTCacheEdit *pe_get_current(Scene *scene, Object *ob, int create)
if (create && pid->cache->flag & PTCACHE_BAKED && !pid->cache->edit) {
pset->flag |= PE_FADE_TIME;
// NICE TO HAVE but doesn't work: pset->brushtype = PE_BRUSH_COMB;
- PE_create_particle_edit(scene, ob, pid->cache, NULL);
+ PE_create_particle_edit(eval_ctx, scene, view_layer, ob, pid->cache, NULL);
}
edit = pid->cache->edit;
break;
@@ -281,7 +293,7 @@ static PTCacheEdit *pe_get_current(Scene *scene, Object *ob, int create)
if (create && pid->cache->flag & PTCACHE_BAKED && !pid->cache->edit) {
pset->flag |= PE_FADE_TIME;
// NICE TO HAVE but doesn't work: pset->brushtype = PE_BRUSH_COMB;
- PE_create_particle_edit(scene, ob, pid->cache, NULL);
+ PE_create_particle_edit(eval_ctx, scene, view_layer, ob, pid->cache, NULL);
}
edit = pid->cache->edit;
break;
@@ -296,20 +308,21 @@ static PTCacheEdit *pe_get_current(Scene *scene, Object *ob, int create)
return edit;
}
-PTCacheEdit *PE_get_current(Scene *scene, Object *ob)
+PTCacheEdit *PE_get_current(Scene *scene, ViewLayer *view_layer, Object *ob)
{
- return pe_get_current(scene, ob, 0);
+ return pe_get_current(NULL, scene, view_layer, ob, 0);
}
-PTCacheEdit *PE_create_current(Scene *scene, Object *ob)
+PTCacheEdit *PE_create_current(const EvaluationContext *eval_ctx, Scene *scene, Object *ob)
{
- return pe_get_current(scene, ob, 1);
+ return pe_get_current(eval_ctx, scene, NULL, ob, 1);
}
-void PE_current_changed(Scene *scene, Object *ob)
+void PE_current_changed(const EvaluationContext *eval_ctx, Scene *scene, Object *ob)
{
- if (ob->mode == OB_MODE_PARTICLE_EDIT)
- PE_create_current(scene, ob);
+ if (eval_ctx->object_mode == OB_MODE_PARTICLE_EDIT) {
+ PE_create_current(eval_ctx, scene, ob);
+ }
}
void PE_hide_keys_time(Scene *scene, PTCacheEdit *edit, float cfra)
@@ -351,9 +364,10 @@ static int pe_x_mirror(Object *ob)
typedef struct PEData {
ViewContext vc;
- bglMats mats;
+ const bContext *context;
Scene *scene;
+ ViewLayer *view_layer;
Object *ob;
DerivedMesh *dm;
PTCacheEdit *edit;
@@ -387,9 +401,10 @@ static void PE_set_data(bContext *C, PEData *data)
{
memset(data, 0, sizeof(*data));
- data->scene= CTX_data_scene(C);
- data->ob= CTX_data_active_object(C);
- data->edit= PE_get_current(data->scene, data->ob);
+ data->scene = CTX_data_scene(C);
+ data->view_layer = CTX_data_view_layer(C);
+ data->ob = CTX_data_active_object(C);
+ data->edit = PE_get_current(data->scene, data->view_layer, data->ob);
}
static void PE_set_view3d_data(bContext *C, PEData *data)
@@ -397,15 +412,16 @@ static void PE_set_view3d_data(bContext *C, PEData *data)
PE_set_data(C, data);
view3d_set_viewcontext(C, &data->vc);
- /* note, the object argument means the modelview matrix does not account for the objects matrix, use viewmat rather than (obmat * viewmat) */
- view3d_get_transformation(data->vc.ar, data->vc.rv3d, NULL, &data->mats);
if (V3D_IS_ZBUF(data->vc.v3d)) {
if (data->vc.v3d->flag & V3D_INVALID_BACKBUF) {
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
/* needed or else the draw matrix can be incorrect */
view3d_operator_needs_opengl(C);
- ED_view3d_backbuf_validate(&data->vc);
+ ED_view3d_backbuf_validate(&eval_ctx, &data->vc);
/* we may need to force an update here by setting the rv3d as dirty
* for now it seems ok, but take care!:
* rv3d->depths->dirty = 1; */
@@ -438,7 +454,6 @@ static bool key_test_depth(PEData *data, const float co[3], const int screen_co[
{
View3D *v3d= data->vc.v3d;
ViewDepths *vd = data->vc.rv3d->depths;
- double ux, uy, uz;
float depth;
/* nothing to do */
@@ -454,9 +469,6 @@ static bool key_test_depth(PEData *data, const float co[3], const int screen_co[
}
#endif
- gluProject(co[0], co[1], co[2], data->mats.modelview, data->mats.projection,
- (GLint *)data->mats.viewport, &ux, &uy, &uz);
-
/* check if screen_co is within bounds because brush_cut uses out of screen coords */
if (screen_co[0] >= 0 && screen_co[0] < vd->w && screen_co[1] >= 0 && screen_co[1] < vd->h) {
BLI_assert(vd && vd->depths);
@@ -466,7 +478,10 @@ static bool key_test_depth(PEData *data, const float co[3], const int screen_co[
else
return 0;
- if ((float)uz - 0.00001f > depth)
+ float win[3];
+ ED_view3d_project(data->vc.ar, co, win);
+
+ if (win[2] - 0.00001f > depth)
return 0;
else
return 1;
@@ -1151,12 +1166,15 @@ void recalc_emitter_field(Object *ob, ParticleSystem *psys)
BLI_kdtree_balance(edit->emitter_field);
}
-static void PE_update_selection(Scene *scene, Object *ob, int useflag)
+static void PE_update_selection(const bContext *C, Scene *scene, ViewLayer *view_layer, Object *ob, int useflag)
{
- PTCacheEdit *edit= PE_get_current(scene, ob);
+ PTCacheEdit *edit = PE_get_current(scene, view_layer, ob);
HairKey *hkey;
+ EvaluationContext eval_ctx;
POINT_P; KEY_K;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
/* flag all particles to be updated if not using flag */
if (!useflag)
LOOP_POINTS
@@ -1172,7 +1190,7 @@ static void PE_update_selection(Scene *scene, Object *ob, int useflag)
}
}
- psys_cache_edit_paths(scene, ob, edit, CFRA, G.is_rendering);
+ psys_cache_edit_paths(&eval_ctx, scene, ob, edit, CFRA, G.is_rendering);
/* disable update flag */
@@ -1258,12 +1276,12 @@ static void update_velocities(PTCacheEdit *edit)
}
}
-void PE_update_object(Scene *scene, Object *ob, int useflag)
+void PE_update_object(const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, Object *ob, int useflag)
{
/* use this to do partial particle updates, not usable when adding or
* removing, then a full redo is necessary and calling this may crash */
ParticleEditSettings *pset= PE_settings(scene);
- PTCacheEdit *edit = PE_get_current(scene, ob);
+ PTCacheEdit *edit = PE_get_current(scene, view_layer, ob);
POINT_P;
if (!edit)
@@ -1288,7 +1306,7 @@ void PE_update_object(Scene *scene, Object *ob, int useflag)
PE_hide_keys_time(scene, edit, CFRA);
/* regenerate path caches */
- psys_cache_edit_paths(scene, ob, edit, CFRA, G.is_rendering);
+ psys_cache_edit_paths(eval_ctx, scene, ob, edit, CFRA, G.is_rendering);
/* disable update flag */
LOOP_POINTS {
@@ -1398,8 +1416,9 @@ static void select_action_apply(PTCacheEditPoint *point, PTCacheEditKey *key, in
static int pe_select_all_exec(bContext *C, wmOperator *op)
{
Scene *scene= CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Object *ob= CTX_data_active_object(C);
- PTCacheEdit *edit= PE_get_current(scene, ob);
+ PTCacheEdit *edit= PE_get_current(scene, view_layer, ob);
POINT_P; KEY_K;
int action = RNA_enum_get(op->ptr, "action");
@@ -1422,7 +1441,7 @@ static int pe_select_all_exec(bContext *C, wmOperator *op)
}
}
- PE_update_selection(scene, ob, 1);
+ PE_update_selection(C, scene, view_layer, ob, 1);
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE|NA_SELECTED, ob);
return OPERATOR_FINISHED;
@@ -1451,10 +1470,11 @@ int PE_mouse_particles(bContext *C, const int mval[2], bool extend, bool deselec
{
PEData data;
Scene *scene= CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Object *ob= CTX_data_active_object(C);
- PTCacheEdit *edit= PE_get_current(scene, ob);
+ PTCacheEdit *edit= PE_get_current(scene, view_layer, ob);
POINT_P; KEY_K;
-
+
if (!PE_start_edit(edit))
return OPERATOR_CANCELLED;
@@ -1479,7 +1499,7 @@ int PE_mouse_particles(bContext *C, const int mval[2], bool extend, bool deselec
else
for_mouse_hit_keys(&data, toggle_key_select, 1);
- PE_update_selection(scene, ob, 1);
+ PE_update_selection(C, scene, view_layer, ob, 1);
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE|NA_SELECTED, data.ob);
return OPERATOR_FINISHED;
@@ -1520,7 +1540,7 @@ static int select_roots_exec(bContext *C, wmOperator *op)
data.select_action = action;
foreach_point(&data, select_root);
- PE_update_selection(data.scene, data.ob, 1);
+ PE_update_selection(C, data.scene, data.view_layer, data.ob, 1);
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE|NA_SELECTED, data.ob);
return OPERATOR_FINISHED;
@@ -1585,7 +1605,7 @@ static int select_tips_exec(bContext *C, wmOperator *op)
data.select_action = action;
foreach_point(&data, select_tip);
- PE_update_selection(data.scene, data.ob, 1);
+ PE_update_selection(C, data.scene, data.view_layer, data.ob, 1);
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE|NA_SELECTED, data.ob);
return OPERATOR_FINISHED;
@@ -1624,6 +1644,7 @@ static int select_random_exec(bContext *C, wmOperator *op)
PEData data;
int type;
Scene *scene;
+ ViewLayer *view_layer;
Object *ob;
/* used by LOOP_VISIBLE_POINTS, LOOP_VISIBLE_KEYS and LOOP_KEYS */
@@ -1643,8 +1664,9 @@ static int select_random_exec(bContext *C, wmOperator *op)
PE_set_data(C, &data);
data.select_action = SEL_SELECT;
scene = CTX_data_scene(C);
+ view_layer = CTX_data_view_layer(C);
ob = CTX_data_active_object(C);
- edit = PE_get_current(scene, ob);
+ edit = PE_get_current(scene, view_layer, ob);
rng = BLI_rng_new_srandom(seed);
@@ -1669,7 +1691,7 @@ static int select_random_exec(bContext *C, wmOperator *op)
BLI_rng_free(rng);
- PE_update_selection(data.scene, data.ob, 1);
+ PE_update_selection(C, data.scene, data.view_layer, data.ob, 1);
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE|NA_SELECTED, data.ob);
return OPERATOR_FINISHED;
@@ -1713,7 +1735,7 @@ static int select_linked_exec(bContext *C, wmOperator *op)
data.select= !RNA_boolean_get(op->ptr, "deselect");
for_mouse_hit_keys(&data, select_keys, 1); /* nearest only */
- PE_update_selection(data.scene, data.ob, 1);
+ PE_update_selection(C, data.scene, data.view_layer, data.ob, 1);
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE|NA_SELECTED, data.ob);
return OPERATOR_FINISHED;
@@ -1761,8 +1783,9 @@ void PE_deselect_all_visible(PTCacheEdit *edit)
int PE_border_select(bContext *C, rcti *rect, bool select, bool extend)
{
Scene *scene= CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Object *ob= CTX_data_active_object(C);
- PTCacheEdit *edit= PE_get_current(scene, ob);
+ PTCacheEdit *edit= PE_get_current(scene, view_layer, ob);
PEData data;
if (!PE_start_edit(edit))
@@ -1777,7 +1800,7 @@ int PE_border_select(bContext *C, rcti *rect, bool select, bool extend)
for_mouse_hit_keys(&data, select_key, 0);
- PE_update_selection(scene, ob, 1);
+ PE_update_selection(C, scene, view_layer, ob, 1);
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE|NA_SELECTED, ob);
return OPERATOR_FINISHED;
@@ -1788,8 +1811,9 @@ int PE_border_select(bContext *C, rcti *rect, bool select, bool extend)
int PE_circle_select(bContext *C, int selecting, const int mval[2], float rad)
{
Scene *scene= CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Object *ob= CTX_data_active_object(C);
- PTCacheEdit *edit= PE_get_current(scene, ob);
+ PTCacheEdit *edit= PE_get_current(scene, view_layer, ob);
PEData data;
if (!PE_start_edit(edit))
@@ -1802,7 +1826,7 @@ int PE_circle_select(bContext *C, int selecting, const int mval[2], float rad)
for_mouse_hit_keys(&data, select_key, 0);
- PE_update_selection(scene, ob, 1);
+ PE_update_selection(C, scene, view_layer, ob, 1);
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE|NA_SELECTED, ob);
return OPERATOR_FINISHED;
@@ -1813,10 +1837,11 @@ int PE_circle_select(bContext *C, int selecting, const int mval[2], float rad)
int PE_lasso_select(bContext *C, const int mcords[][2], const short moves, bool extend, bool select)
{
Scene *scene= CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Object *ob= CTX_data_active_object(C);
ARegion *ar= CTX_wm_region(C);
ParticleEditSettings *pset= PE_settings(scene);
- PTCacheEdit *edit = PE_get_current(scene, ob);
+ PTCacheEdit *edit = PE_get_current(scene, view_layer, ob);
ParticleSystem *psys = edit->psys;
ParticleSystemModifierData *psmd = psys_get_modifier(ob, psys);
POINT_P; KEY_K;
@@ -1890,7 +1915,7 @@ int PE_lasso_select(bContext *C, const int mcords[][2], const short moves, bool
}
}
- PE_update_selection(scene, ob, 1);
+ PE_update_selection(C, scene, view_layer, ob, 1);
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE|NA_SELECTED, ob);
return OPERATOR_FINISHED;
@@ -1902,7 +1927,8 @@ static int hide_exec(bContext *C, wmOperator *op)
{
Object *ob= CTX_data_active_object(C);
Scene *scene= CTX_data_scene(C);
- PTCacheEdit *edit= PE_get_current(scene, ob);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ PTCacheEdit *edit= PE_get_current(scene, view_layer, ob);
POINT_P; KEY_K;
if (RNA_enum_get(op->ptr, "unselected")) {
@@ -1924,7 +1950,7 @@ static int hide_exec(bContext *C, wmOperator *op)
}
}
- PE_update_selection(scene, ob, 1);
+ PE_update_selection(C, scene, view_layer, ob, 1);
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE|NA_SELECTED, ob);
return OPERATOR_FINISHED;
@@ -1954,7 +1980,8 @@ static int reveal_exec(bContext *C, wmOperator *op)
{
Object *ob= CTX_data_active_object(C);
Scene *scene= CTX_data_scene(C);
- PTCacheEdit *edit = PE_get_current(scene, ob);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ PTCacheEdit *edit= PE_get_current(scene, view_layer, ob);
const bool select = RNA_boolean_get(op->ptr, "select");
POINT_P; KEY_K;
@@ -1969,7 +1996,7 @@ static int reveal_exec(bContext *C, wmOperator *op)
}
}
- PE_update_selection(scene, ob, 1);
+ PE_update_selection(C, scene, view_layer, ob, 1);
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE|NA_SELECTED, ob);
return OPERATOR_FINISHED;
@@ -2031,7 +2058,7 @@ static int select_less_exec(bContext *C, wmOperator *UNUSED(op))
PE_set_data(C, &data);
foreach_point(&data, select_less_keys);
- PE_update_selection(data.scene, data.ob, 1);
+ PE_update_selection(C, data.scene, data.view_layer, data.ob, 1);
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE|NA_SELECTED, data.ob);
return OPERATOR_FINISHED;
@@ -2093,7 +2120,7 @@ static int select_more_exec(bContext *C, wmOperator *UNUSED(op))
PE_set_data(C, &data);
foreach_point(&data, select_more_keys);
- PE_update_selection(data.scene, data.ob, 1);
+ PE_update_selection(C, data.scene, data.view_layer, data.ob, 1);
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE|NA_SELECTED, data.ob);
return OPERATOR_FINISHED;
@@ -2126,12 +2153,15 @@ static void rekey_particle(PEData *data, int pa_index)
ParticleKey state;
HairKey *key, *new_keys, *okey;
PTCacheEditKey *ekey;
+ EvaluationContext eval_ctx;
float dval, sta, end;
int k;
- sim.scene= data->scene;
- sim.ob= data->ob;
- sim.psys= edit->psys;
+ CTX_data_eval_ctx(data->context, &eval_ctx);
+ sim.eval_ctx = &eval_ctx;
+ sim.scene = data->scene;
+ sim.ob = data->ob;
+ sim.psys = edit->psys;
pa->flag |= PARS_REKEY;
@@ -2182,6 +2212,9 @@ static int rekey_exec(bContext *C, wmOperator *op)
{
PEData data;
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
PE_set_data(C, &data);
data.dval= 1.0f / (float)(data.totrekey-1);
@@ -2190,7 +2223,7 @@ static int rekey_exec(bContext *C, wmOperator *op)
foreach_selected_point(&data, rekey_particle);
recalc_lengths(data.edit);
- PE_update_object(data.scene, data.ob, 1);
+ PE_update_object(&eval_ctx, data.scene, data.view_layer, data.ob, 1);
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE|NA_EDITED, data.ob);
return OPERATOR_FINISHED;
@@ -2215,24 +2248,28 @@ void PARTICLE_OT_rekey(wmOperatorType *ot)
RNA_def_int(ot->srna, "keys_number", 2, 2, INT_MAX, "Number of Keys", "", 2, 100);
}
-static void rekey_particle_to_time(Scene *scene, Object *ob, int pa_index, float path_time)
+static void rekey_particle_to_time(const bContext *C, Scene *scene, ViewLayer *view_layer, Object *ob, int pa_index, float path_time)
{
- PTCacheEdit *edit= PE_get_current(scene, ob);
+ PTCacheEdit *edit= PE_get_current(scene, view_layer, ob);
ParticleSystem *psys;
- ParticleSimulationData sim= {0};
+ ParticleSimulationData sim = {0};
ParticleData *pa;
ParticleKey state;
HairKey *new_keys, *key;
PTCacheEditKey *ekey;
+ EvaluationContext eval_ctx;
int k;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
if (!edit || !edit->psys) return;
psys = edit->psys;
- sim.scene= scene;
- sim.ob= ob;
- sim.psys= psys;
+ sim.eval_ctx = &eval_ctx;
+ sim.scene = scene;
+ sim.ob = ob;
+ sim.psys = psys;
pa= psys->particles + pa_index;
@@ -2442,14 +2479,17 @@ static void subdivide_particle(PEData *data, int pa_index)
ParticleKey state;
HairKey *key, *nkey, *new_keys;
PTCacheEditKey *ekey, *nekey, *new_ekeys;
+ EvaluationContext eval_ctx;
int k;
short totnewkey=0;
float endtime;
- sim.scene= data->scene;
- sim.ob= data->ob;
- sim.psys= edit->psys;
+ CTX_data_eval_ctx(data->context, &eval_ctx);
+ sim.eval_ctx = &eval_ctx;
+ sim.scene = data->scene;
+ sim.ob = data->ob;
+ sim.psys = edit->psys;
for (k=0, ekey=point->keys; k<pa->totkey-1; k++, ekey++) {
if (ekey->flag&PEK_SELECT && (ekey+1)->flag&PEK_SELECT)
@@ -2517,11 +2557,14 @@ static int subdivide_exec(bContext *C, wmOperator *UNUSED(op))
{
PEData data;
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
PE_set_data(C, &data);
foreach_point(&data, subdivide_particle);
recalc_lengths(data.edit);
- PE_update_object(data.scene, data.ob, 1);
+ PE_update_object(&eval_ctx, data.scene, data.view_layer, data.ob, 1);
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE|NA_EDITED, data.ob);
return OPERATOR_FINISHED;
@@ -2547,8 +2590,9 @@ void PARTICLE_OT_subdivide(wmOperatorType *ot)
static int remove_doubles_exec(bContext *C, wmOperator *op)
{
Scene *scene= CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Object *ob= CTX_data_active_object(C);
- PTCacheEdit *edit= PE_get_current(scene, ob);
+ PTCacheEdit *edit= PE_get_current(scene, view_layer, ob);
ParticleSystem *psys = edit->psys;
ParticleSystemModifierData *psmd;
KDTree *tree;
@@ -2610,7 +2654,7 @@ static int remove_doubles_exec(bContext *C, wmOperator *op)
BKE_reportf(op->reports, RPT_INFO, "Removed %d double particles", totremoved);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE|NA_EDITED, ob);
return OPERATOR_FINISHED;
@@ -2639,9 +2683,10 @@ void PARTICLE_OT_remove_doubles(wmOperatorType *ot)
static int weight_set_exec(bContext *C, wmOperator *op)
{
Scene *scene= CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
ParticleEditSettings *pset= PE_settings(scene);
Object *ob= CTX_data_active_object(C);
- PTCacheEdit *edit= PE_get_current(scene, ob);
+ PTCacheEdit *edit= PE_get_current(scene, view_layer, ob);
ParticleSystem *psys = edit->psys;
POINT_P;
KEY_K;
@@ -2662,7 +2707,7 @@ static int weight_set_exec(bContext *C, wmOperator *op)
}
}
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE|NA_EDITED, ob);
return OPERATOR_FINISHED;
@@ -2694,24 +2739,27 @@ static void brush_drawcursor(bContext *C, int x, int y, void *UNUSED(customdata)
ParticleEditSettings *pset= PE_settings(scene);
ParticleBrushData *brush;
- if (pset->brushtype < 0)
+ if (pset->brushtype < 0) {
return;
+ }
- brush= &pset->brush[pset->brushtype];
+ brush = &pset->brush[pset->brushtype];
if (brush) {
- glPushMatrix();
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
- glTranslatef((float)x, (float)y, 0.0f);
+ immUniformColor4ub(255, 255, 255, 128);
- glColor4ub(255, 255, 255, 128);
glEnable(GL_LINE_SMOOTH);
glEnable(GL_BLEND);
- glutil_draw_lined_arc(0.0, M_PI*2.0, pe_brush_size_get(scene, brush), 40);
+
+ imm_draw_circle_wire_2d(pos, (float)x, (float)y, pe_brush_size_get(scene, brush), 40);
+
glDisable(GL_BLEND);
glDisable(GL_LINE_SMOOTH);
-
- glPopMatrix();
+
+ immUnbindProgram();
}
}
@@ -2768,7 +2816,7 @@ static int delete_exec(bContext *C, wmOperator *op)
recalc_lengths(data.edit);
}
- DAG_id_tag_update(&data.ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&data.ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE|NA_EDITED, data.ob);
return OPERATOR_FINISHED;
@@ -2795,11 +2843,12 @@ void PARTICLE_OT_delete(wmOperatorType *ot)
/*************************** mirror operator **************************/
-static void PE_mirror_x(Scene *scene, Object *ob, int tagged)
+static void PE_mirror_x(
+ Scene *scene, ViewLayer *view_layer, Object *ob, int tagged)
{
Mesh *me= (Mesh *)(ob->data);
ParticleSystemModifierData *psmd;
- PTCacheEdit *edit= PE_get_current(scene, ob);
+ PTCacheEdit *edit = PE_get_current(scene, view_layer, ob);
ParticleSystem *psys = edit->psys;
ParticleData *pa, *newpa, *new_pars;
PTCacheEditPoint *newpoint, *new_points;
@@ -2946,14 +2995,15 @@ static void PE_mirror_x(Scene *scene, Object *ob, int tagged)
static int mirror_exec(bContext *C, wmOperator *UNUSED(op))
{
Scene *scene= CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Object *ob= CTX_data_active_object(C);
- PTCacheEdit *edit= PE_get_current(scene, ob);
+ PTCacheEdit *edit= PE_get_current(scene, view_layer, ob);
- PE_mirror_x(scene, ob, 0);
+ PE_mirror_x(scene, view_layer, ob, 0);
update_world_cos(ob, edit);
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE|NA_EDITED, ob);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
return OPERATOR_FINISHED;
}
@@ -3086,7 +3136,7 @@ static void brush_cut(PEData *data, int pa_index)
edit->points[pa_index].flag |= PEP_TAG;
}
else {
- rekey_particle_to_time(data->scene, ob, pa_index, cut_time);
+ rekey_particle_to_time(data->context, data->scene, data->view_layer, ob, pa_index, cut_time);
edit->points[pa_index].flag |= PEP_EDIT_RECALC;
}
}
@@ -3334,25 +3384,28 @@ static void intersect_dm_quad_weights(const float v1[3], const float v2[3], cons
}
/* check intersection with a derivedmesh */
-static int particle_intersect_dm(Scene *scene, Object *ob, DerivedMesh *dm,
+static int particle_intersect_dm(const bContext *C, Scene *scene, Object *ob, DerivedMesh *dm,
float *vert_cos,
const float co1[3], const float co2[3],
float *min_d, int *min_face, float *min_w,
float *face_minmax, float *pa_minmax,
float radius, float *ipoint)
{
+ EvaluationContext eval_ctx;
MFace *mface= NULL;
MVert *mvert= NULL;
int i, totface, intersect=0;
float cur_d, cur_uv[2], v1[3], v2[3], v3[3], v4[3], min[3], max[3], p_min[3], p_max[3];
float cur_ipoint[3];
+ CTX_data_eval_ctx(C, &eval_ctx);
+
if (dm == NULL) {
psys_disable_all(ob);
- dm=mesh_get_derived_final(scene, ob, 0);
+ dm = mesh_get_derived_final(&eval_ctx, scene, ob, 0);
if (dm == NULL)
- dm=mesh_get_derived_deform(scene, ob, 0);
+ dm = mesh_get_derived_deform(&eval_ctx, scene, ob, 0);
psys_enable_all(ob);
@@ -3465,8 +3518,10 @@ static int particle_intersect_dm(Scene *scene, Object *ob, DerivedMesh *dm,
return intersect;
}
-static int brush_add(PEData *data, short number)
+static int brush_add(const bContext *C, PEData *data, short number)
{
+ EvaluationContext eval_ctx;
+ const Depsgraph *depsgraph = CTX_data_depsgraph(C);
Scene *scene= data->scene;
Object *ob= data->ob;
DerivedMesh *dm;
@@ -3494,6 +3549,9 @@ static int brush_add(PEData *data, short number)
rng = BLI_rng_new_srandom(psys->seed+data->mval[0]+data->mval[1]);
+ CTX_data_eval_ctx(C, &eval_ctx);
+
+ sim.eval_ctx = &eval_ctx;
sim.scene= scene;
sim.ob= ob;
sim.psys= psys;
@@ -3527,14 +3585,14 @@ static int brush_add(PEData *data, short number)
mco[0] = data->mval[0] + dmx;
mco[1] = data->mval[1] + dmy;
- ED_view3d_win_to_segment(data->vc.ar, data->vc.v3d, mco, co1, co2, true);
+ ED_view3d_win_to_segment(depsgraph, data->vc.ar, data->vc.v3d, mco, co1, co2, true);
mul_m4_v3(imat, co1);
mul_m4_v3(imat, co2);
min_d=2.0;
/* warning, returns the derived mesh face */
- if (particle_intersect_dm(scene, ob, dm, 0, co1, co2, &min_d, &add_pars[n].num_dmcache, add_pars[n].fuv, 0, 0, 0, 0)) {
+ if (particle_intersect_dm(C, scene, ob, dm, 0, co1, co2, &min_d, &add_pars[n].num_dmcache, add_pars[n].fuv, 0, 0, 0, 0)) {
if (psys->part->use_modifier_stack && !psmd->dm_final->deformedOnly) {
add_pars[n].num = add_pars[n].num_dmcache;
add_pars[n].num_dmcache = DMCACHE_ISCHILD;
@@ -3715,6 +3773,7 @@ static int brush_add(PEData *data, short number)
typedef struct BrushEdit {
Scene *scene;
+ ViewLayer *view_layer;
Object *ob;
PTCacheEdit *edit;
@@ -3729,9 +3788,10 @@ typedef struct BrushEdit {
static int brush_edit_init(bContext *C, wmOperator *op)
{
Scene *scene= CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Object *ob= CTX_data_active_object(C);
ParticleEditSettings *pset= PE_settings(scene);
- PTCacheEdit *edit= PE_get_current(scene, ob);
+ PTCacheEdit *edit= PE_get_current(scene, view_layer, ob);
ARegion *ar= CTX_wm_region(C);
BrushEdit *bedit;
float min[3], max[3];
@@ -3741,7 +3801,7 @@ static int brush_edit_init(bContext *C, wmOperator *op)
/* set the 'distance factor' for grabbing (used in comb etc) */
INIT_MINMAX(min, max);
- PE_minmax(scene, min, max);
+ PE_minmax(scene, view_layer, min, max);
mid_v3_v3v3(min, min, max);
bedit= MEM_callocN(sizeof(BrushEdit), "BrushEdit");
@@ -3749,6 +3809,7 @@ static int brush_edit_init(bContext *C, wmOperator *op)
op->customdata= bedit;
bedit->scene= scene;
+ bedit->view_layer = view_layer;
bedit->ob= ob;
bedit->edit= edit;
@@ -3764,6 +3825,7 @@ static void brush_edit_apply(bContext *C, wmOperator *op, PointerRNA *itemptr)
{
BrushEdit *bedit= op->customdata;
Scene *scene= bedit->scene;
+ ViewLayer *view_layer = bedit->view_layer;
Object *ob= bedit->ob;
PTCacheEdit *edit= bedit->edit;
ParticleEditSettings *pset= PE_settings(scene);
@@ -3779,6 +3841,9 @@ static void brush_edit_apply(bContext *C, wmOperator *op, PointerRNA *itemptr)
if (!PE_start_edit(edit))
return;
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
RNA_float_get_array(itemptr, "mouse", mousef);
mouse[0] = mousef[0];
mouse[1] = mousef[1];
@@ -3904,7 +3969,7 @@ static void brush_edit_apply(bContext *C, wmOperator *op, PointerRNA *itemptr)
if (edit->psys && edit->psys->part->from==PART_FROM_FACE) {
data.mval= mval;
- added= brush_add(&data, brush->count);
+ added= brush_add(C, &data, brush->count);
if (pset->flag & PE_KEEP_LENGTHS)
recalc_lengths(edit);
@@ -3954,21 +4019,22 @@ static void brush_edit_apply(bContext *C, wmOperator *op, PointerRNA *itemptr)
if (ELEM(pset->brushtype, PE_BRUSH_ADD, PE_BRUSH_CUT) && (added || removed)) {
if (pset->brushtype == PE_BRUSH_ADD && pe_x_mirror(ob))
- PE_mirror_x(scene, ob, 1);
+ PE_mirror_x(scene, view_layer, ob, 1);
update_world_cos(ob, edit);
psys_free_path_cache(NULL, edit);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ }
+ else {
+ PE_update_object(&eval_ctx, scene, view_layer, ob, 1);
}
- else
- PE_update_object(scene, ob, 1);
}
if (edit->psys) {
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE|NA_EDITED, ob);
}
else {
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob);
}
@@ -4176,7 +4242,7 @@ static void shape_cut(PEData *data, int pa_index)
edit->points[pa_index].flag |= PEP_TAG;
}
else {
- rekey_particle_to_time(data->scene, ob, pa_index, cut_time);
+ rekey_particle_to_time(data->context, data->scene, data->view_layer, ob, pa_index, cut_time);
edit->points[pa_index].flag |= PEP_EDIT_RECALC;
}
}
@@ -4185,9 +4251,10 @@ static void shape_cut(PEData *data, int pa_index)
static int shape_cut_exec(bContext *C, wmOperator *UNUSED(op))
{
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Object *ob = CTX_data_active_object(C);
ParticleEditSettings *pset = PE_settings(scene);
- PTCacheEdit *edit = PE_get_current(scene, ob);
+ PTCacheEdit *edit = PE_get_current(scene, view_layer, ob);
Object *shapeob = pset->shape_object;
int selected = count_selected_keys(scene, edit);
int lock_root = pset->flag & PE_LOCK_FIRST;
@@ -4195,6 +4262,9 @@ static int shape_cut_exec(bContext *C, wmOperator *UNUSED(op))
if (!PE_start_edit(edit))
return OPERATOR_CANCELLED;
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
/* disable locking temporatily for disconnected hair */
if (edit->psys && edit->psys->flag & PSYS_GLOBAL_HAIR)
pset->flag &= ~PE_LOCK_FIRST;
@@ -4220,16 +4290,17 @@ static int shape_cut_exec(bContext *C, wmOperator *UNUSED(op))
if (removed) {
update_world_cos(ob, edit);
psys_free_path_cache(NULL, edit);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ }
+ else {
+ PE_update_object(&eval_ctx, scene, view_layer, ob, 1);
}
- else
- PE_update_object(scene, ob, 1);
if (edit->psys) {
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE|NA_EDITED, ob);
}
else {
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob);
}
@@ -4395,9 +4466,9 @@ static void get_PTCacheUndo(PTCacheEdit *edit, PTCacheUndo *undo)
}
}
-void PE_undo_push(Scene *scene, const char *str)
+void PE_undo_push(Scene *scene, ViewLayer *view_layer, const char *str)
{
- PTCacheEdit *edit= PE_get_current(scene, OBACT);
+ PTCacheEdit *edit= PE_get_current(scene, view_layer, OBACT(view_layer));
PTCacheUndo *undo;
int nr;
@@ -4437,9 +4508,9 @@ void PE_undo_push(Scene *scene, const char *str)
make_PTCacheUndo(edit, edit->curundo);
}
-void PE_undo_step(Scene *scene, int step)
+void PE_undo_step(Scene *scene, ViewLayer *view_layer, int step)
{
- PTCacheEdit *edit= PE_get_current(scene, OBACT);
+ PTCacheEdit *edit= PE_get_current(scene, view_layer, OBACT(view_layer));
if (!edit) return;
@@ -4470,12 +4541,12 @@ void PE_undo_step(Scene *scene, int step)
}
}
- DAG_id_tag_update(&OBACT->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&OBACT(view_layer)->id, OB_RECALC_DATA);
}
-bool PE_undo_is_valid(Scene *scene)
+bool PE_undo_is_valid(Scene *scene, ViewLayer *view_layer)
{
- PTCacheEdit *edit= PE_get_current(scene, OBACT);
+ PTCacheEdit *edit= PE_get_current(scene, view_layer, OBACT(view_layer));
if (edit) {
return (edit->undo.last != edit->undo.first);
@@ -4498,19 +4569,19 @@ void PTCacheUndo_clear(PTCacheEdit *edit)
edit->curundo= NULL;
}
-void PE_undo(Scene *scene)
+void PE_undo(Scene *scene, ViewLayer *view_layer)
{
- PE_undo_step(scene, 1);
+ PE_undo_step(scene, view_layer, 1);
}
-void PE_redo(Scene *scene)
+void PE_redo(Scene *scene, ViewLayer *view_layer)
{
- PE_undo_step(scene, -1);
+ PE_undo_step(scene, view_layer, -1);
}
-void PE_undo_number(Scene *scene, int nr)
+void PE_undo_number(Scene *scene, ViewLayer *view_layer, int nr)
{
- PTCacheEdit *edit= PE_get_current(scene, OBACT);
+ PTCacheEdit *edit= PE_get_current(scene, view_layer, OBACT(view_layer));
PTCacheUndo *undo;
int a=0;
@@ -4518,15 +4589,15 @@ void PE_undo_number(Scene *scene, int nr)
if (a==nr) break;
}
edit->curundo= undo;
- PE_undo_step(scene, 0);
+ PE_undo_step(scene, view_layer, 0);
}
/* get name of undo item, return null if no item with this index */
/* if active pointer, set it to 1 if true */
-const char *PE_undo_get_name(Scene *scene, int nr, bool *r_active)
+const char *PE_undo_get_name(Scene *scene, ViewLayer *view_layer, int nr, bool *r_active)
{
- PTCacheEdit *edit= PE_get_current(scene, OBACT);
+ PTCacheEdit *edit= PE_get_current(scene, view_layer, OBACT(view_layer));
PTCacheUndo *undo;
if (r_active) *r_active = false;
@@ -4545,10 +4616,10 @@ const char *PE_undo_get_name(Scene *scene, int nr, bool *r_active)
/************************ utilities ******************************/
-int PE_minmax(Scene *scene, float min[3], float max[3])
+int PE_minmax(Scene *scene, ViewLayer *view_layer, float min[3], float max[3])
{
- Object *ob= OBACT;
- PTCacheEdit *edit= PE_get_current(scene, ob);
+ Object *ob= OBACT(view_layer);
+ PTCacheEdit *edit= PE_get_current(scene, view_layer, ob);
ParticleSystem *psys;
ParticleSystemModifierData *psmd = NULL;
POINT_P; KEY_K;
@@ -4585,7 +4656,8 @@ int PE_minmax(Scene *scene, float min[3], float max[3])
/************************ particle edit toggle operator ************************/
/* initialize needed data for bake edit */
-void PE_create_particle_edit(Scene *scene, Object *ob, PointCache *cache, ParticleSystem *psys)
+void PE_create_particle_edit(
+ const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, Object *ob, PointCache *cache, ParticleSystem *psys)
{
PTCacheEdit *edit;
ParticleSystemModifierData *psmd = (psys) ? psys_get_modifier(ob, psys) : NULL;
@@ -4686,10 +4758,10 @@ void PE_create_particle_edit(Scene *scene, Object *ob, PointCache *cache, Partic
recalc_lengths(edit);
if (psys && !cache)
recalc_emitter_field(ob, psys);
- PE_update_object(scene, ob, 1);
+ PE_update_object(eval_ctx, scene, view_layer, ob, 1);
PTCacheUndo_clear(edit);
- PE_undo_push(scene, "Original");
+ PE_undo_push(scene, view_layer, "Original");
}
}
@@ -4711,21 +4783,28 @@ static int particle_edit_toggle_poll(bContext *C)
static int particle_edit_toggle_exec(bContext *C, wmOperator *op)
{
+ struct WorkSpace *workspace = CTX_wm_workspace(C);
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
Scene *scene = CTX_data_scene(C);
Object *ob = CTX_data_active_object(C);
const int mode_flag = OB_MODE_PARTICLE_EDIT;
- const bool is_mode_set = (ob->mode & mode_flag) != 0;
+ const bool is_mode_set = (eval_ctx.object_mode & mode_flag) != 0;
+
+ BKE_report(op->reports, RPT_INFO, "Particles are changing, editing is not possible");
+ return OPERATOR_CANCELLED;
if (!is_mode_set) {
- if (!ED_object_mode_compat_set(C, ob, mode_flag, op->reports)) {
+ if (!ED_object_mode_compat_set(C, workspace, mode_flag, op->reports)) {
return OPERATOR_CANCELLED;
}
}
if (!is_mode_set) {
PTCacheEdit *edit;
- ob->mode |= mode_flag;
- edit= PE_create_current(scene, ob);
+
+ workspace->object_mode |= mode_flag;
+ edit= PE_create_current(&eval_ctx, scene, ob);
/* mesh may have changed since last entering editmode.
* note, this may have run before if the edit data was just created, so could avoid this and speed up a little */
@@ -4736,12 +4815,12 @@ static int particle_edit_toggle_exec(bContext *C, wmOperator *op)
WM_event_add_notifier(C, NC_SCENE|ND_MODE|NS_MODE_PARTICLE, NULL);
}
else {
- ob->mode &= ~mode_flag;
+ workspace->object_mode &= ~mode_flag;
toggle_particle_cursor(C, 0);
WM_event_add_notifier(C, NC_SCENE|ND_MODE|NS_MODE_OBJECT, NULL);
}
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
return OPERATOR_FINISHED;
}
@@ -4782,7 +4861,7 @@ static int clear_edited_exec(bContext *C, wmOperator *UNUSED(op))
psys_reset(psys, PSYS_RESET_DEPSGRAPH);
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE|NA_EDITED, ob);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
}
}
else { /* some operation might have protected hair from editing so let's clear the flag */
@@ -4790,7 +4869,7 @@ static int clear_edited_exec(bContext *C, wmOperator *UNUSED(op))
psys->flag &= ~PSYS_GLOBAL_HAIR;
psys->flag &= ~PSYS_EDITED;
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE|NA_EDITED, ob);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
}
return OPERATOR_FINISHED;
@@ -4893,19 +4972,24 @@ static int unify_length_exec(bContext *C, wmOperator *UNUSED(op))
{
Object *ob = CTX_data_active_object(C);
Scene *scene = CTX_data_scene(C);
- PTCacheEdit *edit = PE_get_current(scene, ob);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ PTCacheEdit *edit = PE_get_current(scene, view_layer, ob);
float average_length = calculate_average_length(edit);
+
if (average_length == 0.0f) {
return OPERATOR_CANCELLED;
}
scale_points_to_length(edit, average_length);
- PE_update_object(scene, ob, 1);
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
+ PE_update_object(&eval_ctx, scene, view_layer, ob, 1);
if (edit->psys) {
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE|NA_EDITED, ob);
}
else {
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob);
}
diff --git a/source/blender/editors/physics/particle_object.c b/source/blender/editors/physics/particle_object.c
index ce18083917f..7a22a0d81d9 100644
--- a/source/blender/editors/physics/particle_object.c
+++ b/source/blender/editors/physics/particle_object.c
@@ -43,7 +43,6 @@
#include "BLI_string.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_DerivedMesh.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_global.h"
@@ -55,6 +54,9 @@
#include "BKE_pointcache.h"
#include "BKE_report.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#include "RNA_access.h"
#include "RNA_define.h"
@@ -69,7 +71,7 @@
#include "physics_intern.h"
-extern void PE_create_particle_edit(Scene *scene, Object *ob, PointCache *cache, ParticleSystem *psys);
+extern void PE_create_particle_edit(const bContext *C, Scene *scene, ViewLayer *view_layer, Object *ob, PointCache *cache, ParticleSystem *psys);
extern void PTCacheUndo_clear(PTCacheEdit *edit);
extern void recalc_lengths(PTCacheEdit *edit);
extern void recalc_emitter_field(Object *ob, ParticleSystem *psys);
@@ -131,22 +133,25 @@ void OBJECT_OT_particle_system_add(wmOperatorType *ot)
static int particle_system_remove_exec(bContext *C, wmOperator *UNUSED(op))
{
+ WorkSpace *workspace = CTX_wm_workspace(C);
Object *ob = ED_object_context(C);
Scene *scene = CTX_data_scene(C);
- int mode_orig;
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ eObjectMode mode_orig;
if (!scene || !ob)
return OPERATOR_CANCELLED;
- mode_orig = ob->mode;
+ mode_orig = workspace->object_mode;
object_remove_particle_system(scene, ob);
/* possible this isn't the active object
* object_remove_particle_system() clears the mode on the last psys
*/
if (mode_orig & OB_MODE_PARTICLE_EDIT) {
- if ((ob->mode & OB_MODE_PARTICLE_EDIT) == 0) {
- if (scene->basact && scene->basact->object == ob) {
+ if ((workspace->object_mode & OB_MODE_PARTICLE_EDIT) == 0) {
+ if (view_layer->basact && view_layer->basact->object == ob) {
+ workspace->object_mode &= ~OB_MODE_PARTICLE_EDIT;
WM_event_add_notifier(C, NC_SCENE|ND_MODE|NS_MODE_OBJECT, NULL);
}
}
@@ -208,8 +213,8 @@ static int new_particle_settings_exec(bContext *C, wmOperator *UNUSED(op))
psys_check_boid_data(psys);
- DAG_relations_tag_update(bmain);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_relations_tag_update(bmain);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, ob);
@@ -256,8 +261,8 @@ static int new_particle_target_exec(bContext *C, wmOperator *UNUSED(op))
BLI_addtail(&psys->targets, pt);
- DAG_relations_tag_update(bmain);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_relations_tag_update(bmain);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, ob);
@@ -304,8 +309,8 @@ static int remove_particle_target_exec(bContext *C, wmOperator *UNUSED(op))
if (pt)
pt->flag |= PTARGET_CURRENT;
- DAG_relations_tag_update(bmain);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_relations_tag_update(bmain);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, ob);
@@ -344,7 +349,7 @@ static int target_move_up_exec(bContext *C, wmOperator *UNUSED(op))
BLI_remlink(&psys->targets, pt);
BLI_insertlinkbefore(&psys->targets, pt->prev, pt);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, ob);
break;
}
@@ -382,7 +387,7 @@ static int target_move_down_exec(bContext *C, wmOperator *UNUSED(op))
BLI_remlink(&psys->targets, pt);
BLI_insertlinkafter(&psys->targets, pt->next, pt);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, ob);
break;
}
@@ -565,7 +570,9 @@ void PARTICLE_OT_dupliob_move_down(wmOperatorType *ot)
/************************ connect/disconnect hair operators *********************/
-static void disconnect_hair(Scene *scene, Object *ob, ParticleSystem *psys)
+static void disconnect_hair(
+ const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer,
+ Object *ob, ParticleSystem *psys)
{
ParticleSystemModifierData *psmd = psys_get_modifier(ob, psys);
ParticleEditSettings *pset= PE_settings(scene);
@@ -611,30 +618,34 @@ static void disconnect_hair(Scene *scene, Object *ob, ParticleSystem *psys)
if (ELEM(pset->brushtype, PE_BRUSH_ADD, PE_BRUSH_PUFF))
pset->brushtype = PE_BRUSH_NONE;
- PE_update_object(scene, ob, 0);
+ PE_update_object(eval_ctx, scene, view_layer, ob, 0);
}
static int disconnect_hair_exec(bContext *C, wmOperator *op)
{
Scene *scene= CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Object *ob= ED_object_context(C);
ParticleSystem *psys= NULL;
const bool all = RNA_boolean_get(op->ptr, "all");
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
if (!ob)
return OPERATOR_CANCELLED;
if (all) {
for (psys=ob->particlesystem.first; psys; psys=psys->next) {
- disconnect_hair(scene, ob, psys);
+ disconnect_hair(&eval_ctx, scene, view_layer, ob, psys);
}
}
else {
psys = psys_get_current(ob);
- disconnect_hair(scene, ob, psys);
+ disconnect_hair(&eval_ctx, scene, view_layer, ob, psys);
}
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, ob);
return OPERATOR_FINISHED;
@@ -657,9 +668,10 @@ void PARTICLE_OT_disconnect_hair(wmOperatorType *ot)
/* from/to_world_space : whether from/to particles are in world or hair space
* from/to_mat : additional transform for from/to particles (e.g. for using object space copying)
*/
-static bool remap_hair_emitter(Scene *scene, Object *ob, ParticleSystem *psys,
- Object *target_ob, ParticleSystem *target_psys, PTCacheEdit *target_edit,
- float from_mat[4][4], float to_mat[4][4], bool from_global, bool to_global)
+static bool remap_hair_emitter(
+ const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, Object *ob, ParticleSystem *psys,
+ Object *target_ob, ParticleSystem *target_psys, PTCacheEdit *target_edit,
+ float from_mat[4][4], float to_mat[4][4], bool from_global, bool to_global)
{
ParticleSystemModifierData *target_psmd = psys_get_modifier(target_ob, target_psys);
ParticleData *pa, *tpa;
@@ -843,19 +855,23 @@ static bool remap_hair_emitter(Scene *scene, Object *ob, ParticleSystem *psys,
psys_free_path_cache(target_psys, target_edit);
- PE_update_object(scene, target_ob, 0);
+ PE_update_object(eval_ctx, scene, view_layer, target_ob, 0);
return true;
}
-static bool connect_hair(Scene *scene, Object *ob, ParticleSystem *psys)
+static bool connect_hair(
+ const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer,
+ Object *ob, ParticleSystem *psys)
{
bool ok;
if (!psys)
return false;
- ok = remap_hair_emitter(scene, ob, psys, ob, psys, psys->edit, ob->obmat, ob->obmat, psys->flag & PSYS_GLOBAL_HAIR, false);
+ ok = remap_hair_emitter(
+ eval_ctx, scene, view_layer, ob, psys, ob, psys, psys->edit,
+ ob->obmat, ob->obmat, psys->flag & PSYS_GLOBAL_HAIR, false);
psys->flag &= ~PSYS_GLOBAL_HAIR;
return ok;
@@ -863,7 +879,9 @@ static bool connect_hair(Scene *scene, Object *ob, ParticleSystem *psys)
static int connect_hair_exec(bContext *C, wmOperator *op)
{
+ EvaluationContext eval_ctx;
Scene *scene= CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Object *ob= ED_object_context(C);
ParticleSystem *psys= NULL;
const bool all = RNA_boolean_get(op->ptr, "all");
@@ -872,14 +890,16 @@ static int connect_hair_exec(bContext *C, wmOperator *op)
if (!ob)
return OPERATOR_CANCELLED;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
if (all) {
for (psys=ob->particlesystem.first; psys; psys=psys->next) {
- any_connected |= connect_hair(scene, ob, psys);
+ any_connected |= connect_hair(&eval_ctx, scene, view_layer, ob, psys);
}
}
else {
psys = psys_get_current(ob);
- any_connected |= connect_hair(scene, ob, psys);
+ any_connected |= connect_hair(&eval_ctx, scene, view_layer, ob, psys);
}
if (!any_connected) {
@@ -888,7 +908,7 @@ static int connect_hair_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, ob);
return OPERATOR_FINISHED;
@@ -915,7 +935,9 @@ typedef enum eCopyParticlesSpace {
PAR_COPY_SPACE_WORLD = 1,
} eCopyParticlesSpace;
-static void copy_particle_edit(Scene *scene, Object *ob, ParticleSystem *psys, ParticleSystem *psys_from)
+static void copy_particle_edit(
+ const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer,
+ Object *ob, ParticleSystem *psys, ParticleSystem *psys_from)
{
PTCacheEdit *edit_from = psys_from->edit, *edit;
ParticleData *pa;
@@ -965,10 +987,10 @@ static void copy_particle_edit(Scene *scene, Object *ob, ParticleSystem *psys, P
recalc_lengths(edit);
recalc_emitter_field(ob, psys);
- PE_update_object(scene, ob, true);
+ PE_update_object(eval_ctx, scene, view_layer, ob, true);
PTCacheUndo_clear(edit);
- PE_undo_push(scene, "Original");
+ PE_undo_push(scene, view_layer, "Original");
}
static void remove_particle_systems_from_object(Object *ob_to)
@@ -996,14 +1018,17 @@ static void remove_particle_systems_from_object(Object *ob_to)
}
/* single_psys_from is optional, if NULL all psys of ob_from are copied */
-static bool copy_particle_systems_to_object(Main *bmain,
+static bool copy_particle_systems_to_object(const bContext *C,
Scene *scene,
+ ViewLayer *view_layer,
Object *ob_from,
ParticleSystem *single_psys_from,
Object *ob_to,
int space,
bool duplicate_settings)
{
+ Main *bmain = CTX_data_main(C);
+ EvaluationContext eval_ctx;
ModifierData *md;
ParticleSystem *psys_start = NULL, *psys, *psys_from;
ParticleSystem **tmp_psys;
@@ -1011,6 +1036,8 @@ static bool copy_particle_systems_to_object(Main *bmain,
CustomDataMask cdmask;
int i, totpsys;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
if (ob_to->type != OB_MESH)
return false;
if (!ob_to->data || ID_IS_LINKED(ob_to->data))
@@ -1049,7 +1076,7 @@ static bool copy_particle_systems_to_object(Main *bmain,
psys_start = totpsys > 0 ? tmp_psys[0] : NULL;
/* get the DM (psys and their modifiers have not been appended yet) */
- final_dm = mesh_get_derived_final(scene, ob_to, cdmask);
+ final_dm = mesh_get_derived_final(&eval_ctx, scene, ob_to, cdmask);
/* now append psys to the object and make modifiers */
for (i = 0, psys_from = PSYS_FROM_FIRST;
@@ -1077,8 +1104,9 @@ static bool copy_particle_systems_to_object(Main *bmain,
CDDM_calc_normals(psmd->dm_final);
DM_ensure_tessface(psmd->dm_final);
- if (psys_from->edit)
- copy_particle_edit(scene, ob_to, psys, psys_from);
+ if (psys_from->edit) {
+ copy_particle_edit(&eval_ctx, scene, view_layer, ob_to, psys, psys_from);
+ }
if (duplicate_settings) {
id_us_min(&psys->part->id);
@@ -1112,7 +1140,9 @@ static bool copy_particle_systems_to_object(Main *bmain,
break;
}
if (ob_from != ob_to) {
- remap_hair_emitter(scene, ob_from, psys_from, ob_to, psys, psys->edit, from_mat, to_mat, psys_from->flag & PSYS_GLOBAL_HAIR, psys->flag & PSYS_GLOBAL_HAIR);
+ remap_hair_emitter(
+ &eval_ctx, scene, view_layer, ob_from, psys_from, ob_to, psys, psys->edit,
+ from_mat, to_mat, psys_from->flag & PSYS_GLOBAL_HAIR, psys->flag & PSYS_GLOBAL_HAIR);
}
/* tag for recalc */
@@ -1122,7 +1152,7 @@ static bool copy_particle_systems_to_object(Main *bmain,
#undef PSYS_FROM_FIRST
#undef PSYS_FROM_NEXT
- DAG_id_tag_update(&ob_to->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob_to->id, OB_RECALC_DATA);
WM_main_add_notifier(NC_OBJECT | ND_PARTICLE | NA_EDITED, ob_to);
return true;
}
@@ -1145,8 +1175,8 @@ static int copy_particle_systems_exec(bContext *C, wmOperator *op)
const int space = RNA_enum_get(op->ptr, "space");
const bool remove_target_particles = RNA_boolean_get(op->ptr, "remove_target_particles");
const bool use_active = RNA_boolean_get(op->ptr, "use_active");
- Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Object *ob_from = ED_object_active_context(C);
ParticleSystem *psys_from = use_active ? CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem).data : NULL;
@@ -1161,7 +1191,7 @@ static int copy_particle_systems_exec(bContext *C, wmOperator *op)
remove_particle_systems_from_object(ob_to);
changed = true;
}
- if (copy_particle_systems_to_object(bmain, scene, ob_from, psys_from, ob_to, space, false))
+ if (copy_particle_systems_to_object(C, scene, view_layer, ob_from, psys_from, ob_to, space, false))
changed = true;
else
fail++;
@@ -1222,7 +1252,7 @@ static int duplicate_particle_systems_exec(bContext *C, wmOperator *op)
Scene *scene = CTX_data_scene(C);
Object *ob = ED_object_active_context(C);
ParticleSystem *psys = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem).data;
- copy_particle_systems_to_object(CTX_data_main(C), scene, ob, psys, ob,
+ copy_particle_systems_to_object(C, scene, CTX_data_view_layer(C), ob, psys, ob,
PAR_COPY_SPACE_OBJECT, duplicate_settings);
return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/physics/physics_fluid.c b/source/blender/editors/physics/physics_fluid.c
index 2f95f360fe2..d9a7d288f9c 100644
--- a/source/blender/editors/physics/physics_fluid.c
+++ b/source/blender/editors/physics/physics_fluid.c
@@ -55,6 +55,8 @@
#include "BKE_report.h"
#include "BKE_scene.h"
+#include "DEG_depsgraph.h"
+
#include "LBM_fluidsim.h"
#include "ED_screen.h"
@@ -244,7 +246,7 @@ static void set_channel(float *channel, float time, float *value, int i, int siz
}
}
-static void set_vertex_channel(float *channel, float time, struct Scene *scene, struct FluidObject *fobj, int i)
+static void set_vertex_channel(EvaluationContext *eval_ctx, float *channel, float time, struct Scene *scene, struct FluidObject *fobj, int i)
{
Object *ob = fobj->object;
FluidsimModifierData *fluidmd = (FluidsimModifierData *)modifiers_findByType(ob, eModifierType_Fluidsim);
@@ -257,7 +259,7 @@ static void set_vertex_channel(float *channel, float time, struct Scene *scene,
if (channel == NULL)
return;
- initElbeemMesh(scene, ob, &numVerts, &verts, &numTris, &tris, 1, modifierIndex);
+ initElbeemMesh(eval_ctx, scene, ob, &numVerts, &verts, &numTris, &tris, 1, modifierIndex);
/* don't allow mesh to change number of verts in anim sequence */
if (numVerts != fobj->numVerts) {
@@ -329,10 +331,15 @@ static void free_all_fluidobject_channels(ListBase *fobjects)
static void fluid_init_all_channels(bContext *C, Object *UNUSED(fsDomain), FluidsimSettings *domainSettings, FluidAnimChannels *channels, ListBase *fobjects)
{
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Depsgraph *depsgraph = CTX_data_depsgraph(C);
+ EvaluationContext eval_ctx;
Base *base;
int i;
int length = channels->length;
float eval_time;
+
+ CTX_data_eval_ctx(C, &eval_ctx);
/* init time values (assuming that time moves at a constant speed; may be overridden later) */
init_time(domainSettings, channels);
@@ -343,7 +350,7 @@ static void fluid_init_all_channels(bContext *C, Object *UNUSED(fsDomain), Fluid
channels->DomainTime = MEM_callocN(length * (CHANNEL_FLOAT+1) * sizeof(float), "channel DomainTime");
/* allocate fluid objects */
- for (base=scene->base.first; base; base= base->next) {
+ for (base = FIRSTBASE(view_layer); base; base = base->next) {
Object *ob = base->object;
FluidsimModifierData *fluidmd = (FluidsimModifierData *)modifiers_findByType(ob, eModifierType_Fluidsim);
@@ -373,7 +380,7 @@ static void fluid_init_all_channels(bContext *C, Object *UNUSED(fsDomain), Fluid
float *verts=NULL;
int *tris=NULL, modifierIndex = BLI_findindex(&ob->modifiers, (ModifierData *)fluidmd);
- initElbeemMesh(scene, ob, &fobj->numVerts, &verts, &fobj->numTris, &tris, 0, modifierIndex);
+ initElbeemMesh(&eval_ctx, scene, ob, &fobj->numVerts, &verts, &fobj->numTris, &tris, 0, modifierIndex);
fobj->VertexCache = MEM_callocN(length *((fobj->numVerts*CHANNEL_VEC)+1) * sizeof(float), "fluidobject VertexCache");
MEM_freeN(verts);
@@ -402,7 +409,7 @@ static void fluid_init_all_channels(bContext *C, Object *UNUSED(fsDomain), Fluid
/* Modifying the global scene isn't nice, but we can do it in
* this part of the process before a threaded job is created */
scene->r.cfra = (int)eval_time;
- ED_update_for_newframe(CTX_data_main(C), scene, 1);
+ ED_update_for_newframe(CTX_data_main(C), scene, view_layer, depsgraph);
/* now scene data should be current according to animation system, so we fill the channels */
@@ -461,15 +468,18 @@ static void fluid_init_all_channels(bContext *C, Object *UNUSED(fsDomain), Fluid
}
if (fluid_is_animated_mesh(fluidmd->fss)) {
- set_vertex_channel(fobj->VertexCache, timeAtFrame, scene, fobj, i);
+ set_vertex_channel(&eval_ctx, fobj->VertexCache, timeAtFrame, scene, fobj, i);
}
}
}
}
-static void export_fluid_objects(ListBase *fobjects, Scene *scene, int length)
+static void export_fluid_objects(const bContext *C, ListBase *fobjects, Scene *scene, int length)
{
FluidObject *fobj;
+ EvaluationContext eval_ctx;
+
+ CTX_data_eval_ctx(C, &eval_ctx);
for (fobj=fobjects->first; fobj; fobj=fobj->next) {
Object *ob = fobj->object;
@@ -491,7 +501,7 @@ static void export_fluid_objects(ListBase *fobjects, Scene *scene, int length)
fsmesh.type = fluidmd->fss->type;
fsmesh.name = ob->id.name;
- initElbeemMesh(scene, ob, &numVerts, &verts, &numTris, &tris, 0, modifierIndex);
+ initElbeemMesh(&eval_ctx, scene, ob, &numVerts, &verts, &numTris, &tris, 0, modifierIndex);
fsmesh.numVertices = numVerts;
fsmesh.numTriangles = numTris;
@@ -570,14 +580,14 @@ static void export_fluid_objects(ListBase *fobjects, Scene *scene, int length)
}
}
-static int fluid_validate_scene(ReportList *reports, Scene *scene, Object *fsDomain)
+static int fluid_validate_scene(ReportList *reports, ViewLayer *view_layer, Object *fsDomain)
{
Base *base;
Object *newdomain = NULL;
int channelObjCount = 0;
int fluidInputCount = 0;
- for (base=scene->base.first; base; base= base->next) {
+ for (base = FIRSTBASE(view_layer); base; base = base->next) {
Object *ob = base->object;
FluidsimModifierData *fluidmdtmp = (FluidsimModifierData *)modifiers_findByType(ob, eModifierType_Fluidsim);
@@ -835,7 +845,9 @@ static void fluidsim_delete_until_lastframe(FluidsimSettings *fss, const char *r
static int fluidsimBake(bContext *C, ReportList *reports, Object *fsDomain, short do_job)
{
- Scene *scene= CTX_data_scene(C);
+ Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Depsgraph *depsgraph = CTX_data_depsgraph(C);
int i;
FluidsimSettings *domainSettings;
@@ -882,7 +894,7 @@ static int fluidsimBake(bContext *C, ReportList *reports, Object *fsDomain, shor
}
/* check scene for sane object/modifier settings */
- if (!fluid_validate_scene(reports, scene, fsDomain)) {
+ if (!fluid_validate_scene(reports, view_layer, fsDomain)) {
fluidbake_free_data(channels, fobjects, fsset, fb);
return 0;
}
@@ -947,7 +959,7 @@ static int fluidsimBake(bContext *C, ReportList *reports, Object *fsDomain, shor
/* reset to original current frame */
scene->r.cfra = origFrame;
- ED_update_for_newframe(CTX_data_main(C), scene, 1);
+ ED_update_for_newframe(CTX_data_main(C), scene, view_layer, depsgraph);
/* ******** init domain object's matrix ******** */
copy_m4_m4(domainMat, fsDomain->obmat);
@@ -1034,7 +1046,7 @@ static int fluidsimBake(bContext *C, ReportList *reports, Object *fsDomain, shor
elbeemAddDomain(fsset);
/* ******** export all fluid objects to elbeem ******** */
- export_fluid_objects(fobjects, scene, channels->length);
+ export_fluid_objects(C, fobjects, scene, channels->length);
/* custom data for fluid bake job */
fb->settings = fsset;
diff --git a/source/blender/editors/physics/physics_ops.c b/source/blender/editors/physics/physics_ops.c
index b1d708ebc07..758ef43590e 100644
--- a/source/blender/editors/physics/physics_ops.c
+++ b/source/blender/editors/physics/physics_ops.c
@@ -137,23 +137,6 @@ static void keymap_particle(wmKeyConfig *keyconf)
kmi = WM_keymap_add_item(keymap, "PARTICLE_OT_hide", HKEY, KM_PRESS, KM_SHIFT, 0);
RNA_boolean_set(kmi->ptr, "unselected", true);
- /* Shift+LMB behavior first, so it has priority over KM_ANY item below. */
- kmi = WM_keymap_add_item(keymap, "VIEW3D_OT_manipulator", LEFTMOUSE, KM_PRESS, KM_SHIFT, 0);
- RNA_boolean_set(kmi->ptr, "release_confirm", true);
- RNA_boolean_set(kmi->ptr, "use_planar_constraint", true);
- RNA_boolean_set(kmi->ptr, "use_accurate", false);
-
- kmi = WM_keymap_add_item(keymap, "VIEW3D_OT_manipulator", LEFTMOUSE, KM_PRESS, KM_SHIFT, 0);
- RNA_boolean_set(kmi->ptr, "release_confirm", true);
- RNA_boolean_set(kmi->ptr, "use_planar_constraint", false);
- RNA_boolean_set(kmi->ptr, "use_accurate", true);
-
- /* Using KM_ANY here to allow holding modifiers before starting to transform. */
- kmi = WM_keymap_add_item(keymap, "VIEW3D_OT_manipulator", LEFTMOUSE, KM_PRESS, KM_ANY, 0);
- RNA_boolean_set(kmi->ptr, "release_confirm", true);
- RNA_boolean_set(kmi->ptr, "use_planar_constraint", false);
- RNA_boolean_set(kmi->ptr, "use_accurate", false);
-
WM_keymap_add_item(keymap, "PARTICLE_OT_brush_edit", LEFTMOUSE, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "PARTICLE_OT_brush_edit", LEFTMOUSE, KM_PRESS, KM_SHIFT, 0);
diff --git a/source/blender/editors/physics/physics_pointcache.c b/source/blender/editors/physics/physics_pointcache.c
index f36ebb3715e..a859f664dc8 100644
--- a/source/blender/editors/physics/physics_pointcache.c
+++ b/source/blender/editors/physics/physics_pointcache.c
@@ -42,6 +42,7 @@
#include "BKE_context.h"
#include "BKE_screen.h"
#include "BKE_global.h"
+#include "BKE_layer.h"
#include "BKE_main.h"
#include "BKE_particle.h"
#include "BKE_pointcache.h"
@@ -165,6 +166,8 @@ static PTCacheBaker *ptcache_baker_create(bContext *C, wmOperator *op, bool all)
baker->main = CTX_data_main(C);
baker->scene = CTX_data_scene(C);
+ baker->view_layer = CTX_data_view_layer(C);
+ baker->depsgraph = CTX_data_depsgraph(C);
baker->bake = RNA_boolean_get(op->ptr, "bake");
baker->render = 0;
baker->anim_init = 0;
@@ -253,22 +256,23 @@ static void ptcache_bake_cancel(bContext *C, wmOperator *op)
static int ptcache_free_bake_all_exec(bContext *C, wmOperator *UNUSED(op))
{
- Scene *scene= CTX_data_scene(C);
- Base *base;
+ Scene *scene = CTX_data_scene(C);
PTCacheID *pid;
ListBase pidlist;
- for (base=scene->base.first; base; base= base->next) {
- BKE_ptcache_ids_from_object(&pidlist, base->object, scene, MAX_DUPLI_RECUR);
+ FOREACH_SCENE_OBJECT(scene, ob)
+ {
+ BKE_ptcache_ids_from_object(&pidlist, ob, scene, MAX_DUPLI_RECUR);
- for (pid=pidlist.first; pid; pid=pid->next) {
+ for (pid = pidlist.first; pid; pid = pid->next) {
ptcache_free_bake(pid->cache);
}
BLI_freelistN(&pidlist);
- WM_event_add_notifier(C, NC_OBJECT|ND_POINTCACHE, base->object);
+ WM_event_add_notifier(C, NC_OBJECT|ND_POINTCACHE, ob);
}
+ FOREACH_SCENE_OBJECT_END
WM_event_add_notifier(C, NC_SCENE|ND_FRAME, scene);
diff --git a/source/blender/editors/physics/rigidbody_constraint.c b/source/blender/editors/physics/rigidbody_constraint.c
index 1bfc162a331..f77e164ba16 100644
--- a/source/blender/editors/physics/rigidbody_constraint.c
+++ b/source/blender/editors/physics/rigidbody_constraint.c
@@ -38,13 +38,15 @@
#include "DNA_scene_types.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_global.h"
#include "BKE_group.h"
#include "BKE_main.h"
#include "BKE_report.h"
#include "BKE_rigidbody.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#include "RNA_access.h"
#include "RNA_define.h"
#include "RNA_enum_types.h"
@@ -89,10 +91,10 @@ bool ED_rigidbody_constraint_add(Main *bmain, Scene *scene, Object *ob, int type
ob->rigidbody_constraint->flag |= RBC_FLAG_NEEDS_VALIDATE;
/* add constraint to rigid body constraint group */
- BKE_group_object_add(rbw->constraints, ob, scene, NULL);
+ BKE_group_object_add(rbw->constraints, ob);
- DAG_relations_tag_update(bmain);
- DAG_id_tag_update(&ob->id, OB_RECALC_OB);
+ DEG_relations_tag_update(bmain);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB);
return true;
}
@@ -102,10 +104,10 @@ void ED_rigidbody_constraint_remove(Main *bmain, Scene *scene, Object *ob)
BKE_rigidbody_remove_constraint(scene, ob);
if (rbw)
- BKE_group_object_unlink(rbw->constraints, ob, scene, NULL);
+ BKE_group_object_unlink(rbw->constraints, ob);
- DAG_relations_tag_update(bmain);
- DAG_id_tag_update(&ob->id, OB_RECALC_OB);
+ DEG_relations_tag_update(bmain);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB);
}
/* ********************************************** */
@@ -117,8 +119,9 @@ static int rigidbody_con_add_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
RigidBodyWorld *rbw = BKE_rigidbody_get_world(scene);
- Object *ob = (scene) ? OBACT : NULL;
+ Object *ob = OBACT(view_layer);
int type = RNA_enum_get(op->ptr, "type");
bool changed;
@@ -166,11 +169,8 @@ static int rigidbody_con_remove_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
- Object *ob = (scene) ? OBACT : NULL;
-
- /* sanity checks */
- if (scene == NULL)
- return OPERATOR_CANCELLED;
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Object *ob = OBACT(view_layer);
/* apply to active object */
if (ELEM(NULL, ob, ob->rigidbody_constraint)) {
diff --git a/source/blender/editors/physics/rigidbody_object.c b/source/blender/editors/physics/rigidbody_object.c
index fa80fb5fbc1..3b667520550 100644
--- a/source/blender/editors/physics/rigidbody_object.c
+++ b/source/blender/editors/physics/rigidbody_object.c
@@ -43,13 +43,15 @@
#include "BLT_translation.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_global.h"
#include "BKE_group.h"
#include "BKE_main.h"
#include "BKE_report.h"
#include "BKE_rigidbody.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#include "RNA_access.h"
#include "RNA_define.h"
#include "RNA_enum_types.h"
@@ -119,10 +121,10 @@ bool ED_rigidbody_object_add(Main *bmain, Scene *scene, Object *ob, int type, Re
ob->rigidbody_object->flag |= RBO_FLAG_NEEDS_VALIDATE;
/* add object to rigid body group */
- BKE_group_object_add(rbw->group, ob, scene, NULL);
+ BKE_group_object_add(rbw->group, ob);
- DAG_relations_tag_update(bmain);
- DAG_id_tag_update(&ob->id, OB_RECALC_OB);
+ DEG_relations_tag_update(bmain);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB);
return true;
}
@@ -133,10 +135,10 @@ void ED_rigidbody_object_remove(Main *bmain, Scene *scene, Object *ob)
BKE_rigidbody_remove_object(scene, ob);
if (rbw)
- BKE_group_object_unlink(rbw->group, ob, scene, NULL);
+ BKE_group_object_unlink(rbw->group, ob);
- DAG_relations_tag_update(bmain);
- DAG_id_tag_update(&ob->id, OB_RECALC_OB);
+ DEG_relations_tag_update(bmain);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB);
}
/* ********************************************** */
@@ -345,7 +347,7 @@ static int rigidbody_objects_shape_change_exec(bContext *C, wmOperator *op)
RNA_pointer_create(&ob->id, &RNA_RigidBodyObject, ob->rigidbody_object, &ptr);
RNA_enum_set(&ptr, "collision_shape", shape);
- DAG_id_tag_update(&ob->id, OB_RECALC_OB);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB);
changed = true;
}
@@ -527,7 +529,7 @@ static int rigidbody_objects_calc_mass_exec(bContext *C, wmOperator *op)
RNA_pointer_create(&ob->id, &RNA_RigidBodyObject, ob->rigidbody_object, &ptr);
RNA_float_set(&ptr, "mass", mass);
- DAG_id_tag_update(&ob->id, OB_RECALC_OB);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB);
changed = true;
}
diff --git a/source/blender/editors/render/CMakeLists.txt b/source/blender/editors/render/CMakeLists.txt
index ec8bf3e955d..ed2e9747d1c 100644
--- a/source/blender/editors/render/CMakeLists.txt
+++ b/source/blender/editors/render/CMakeLists.txt
@@ -24,6 +24,8 @@ set(INC
../../blenlib
../../blenloader
../../blentranslation
+ ../../depsgraph
+ ../../draw
../../gpu
../../imbuf
../../bmesh
diff --git a/source/blender/editors/render/render_intern.h b/source/blender/editors/render/render_intern.h
index fb07b03c286..2bc96a7f218 100644
--- a/source/blender/editors/render/render_intern.h
+++ b/source/blender/editors/render/render_intern.h
@@ -53,8 +53,8 @@ void WORLD_OT_new(struct wmOperatorType *ot);
void MATERIAL_OT_copy(struct wmOperatorType *ot);
void MATERIAL_OT_paste(struct wmOperatorType *ot);
-void SCENE_OT_render_layer_add(struct wmOperatorType *ot);
-void SCENE_OT_render_layer_remove(struct wmOperatorType *ot);
+void SCENE_OT_view_layer_add(struct wmOperatorType *ot);
+void SCENE_OT_view_layer_remove(struct wmOperatorType *ot);
void SCENE_OT_render_view_add(struct wmOperatorType *ot);
void SCENE_OT_render_view_remove(struct wmOperatorType *ot);
diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c
index d0da35aeb9d..8e410a3abbb 100644
--- a/source/blender/editors/render/render_internal.c
+++ b/source/blender/editors/render/render_internal.c
@@ -54,9 +54,9 @@
#include "BKE_camera.h"
#include "BKE_context.h"
#include "BKE_colortools.h"
-#include "BKE_depsgraph.h"
#include "BKE_global.h"
#include "BKE_image.h"
+#include "BKE_layer.h"
#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_node.h"
@@ -65,6 +65,9 @@
#include "BKE_sequencer.h"
#include "BKE_screen.h"
#include "BKE_scene.h"
+#include "BKE_workspace.h"
+
+#include "DEG_depsgraph.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -81,6 +84,7 @@
#include "IMB_colormanagement.h"
#include "IMB_imbuf_types.h"
+#include "GPU_shader.h"
#include "BIF_gl.h"
#include "BIF_glutil.h"
@@ -97,9 +101,13 @@ static int render_break(void *rjv);
typedef struct RenderJob {
Main *main;
Scene *scene;
+ ViewLayer *view_layer;
Scene *current_scene;
+ /* TODO(sergey): Should not be needed once engine will have own
+ * depsgraph and copy-on-write will be implemented.
+ */
+ Depsgraph *depsgraph;
Render *re;
- SceneRenderLayer *srl;
struct Object *camera_override;
int lay_override;
bool v3d_override;
@@ -252,7 +260,7 @@ static void image_buffer_rect_update(RenderJob *rj, RenderResult *rr, ImBuf *ibu
/* set callbacks, exported to sequence render too.
* Only call in foreground (UI) renders. */
-static void screen_render_scene_layer_set(wmOperator *op, Main *mainp, Scene **scene, SceneRenderLayer **srl)
+static void screen_render_view_layer_set(wmOperator *op, Main *mainp, Scene **scene, ViewLayer **view_layer)
{
/* single layer re-render */
if (RNA_struct_property_is_set(op->ptr, "scene")) {
@@ -272,14 +280,14 @@ static void screen_render_scene_layer_set(wmOperator *op, Main *mainp, Scene **s
}
if (RNA_struct_property_is_set(op->ptr, "layer")) {
- SceneRenderLayer *rl;
+ ViewLayer *rl;
char rl_name[RE_MAXNAME];
RNA_string_get(op->ptr, "layer", rl_name);
- rl = (SceneRenderLayer *)BLI_findstring(&(*scene)->r.layers, rl_name, offsetof(SceneRenderLayer, name));
+ rl = (ViewLayer *)BLI_findstring(&(*scene)->view_layers, rl_name, offsetof(ViewLayer, name));
if (rl)
- *srl = rl;
+ *view_layer = rl;
}
}
@@ -287,7 +295,9 @@ static void screen_render_scene_layer_set(wmOperator *op, Main *mainp, Scene **s
static int screen_render_exec(bContext *C, wmOperator *op)
{
Scene *scene = CTX_data_scene(C);
- SceneRenderLayer *srl = NULL;
+ RenderEngineType *re_type = RE_engines_find(scene->view_render.engine_id);
+ ViewLayer *view_layer = NULL;
+ Depsgraph *depsgraph = CTX_data_depsgraph(C);
Render *re;
Image *ima;
View3D *v3d = CTX_wm_view3d(C);
@@ -297,8 +307,13 @@ static int screen_render_exec(bContext *C, wmOperator *op)
const bool is_write_still = RNA_boolean_get(op->ptr, "write_still");
struct Object *camera_override = v3d ? V3D_CAMERA_LOCAL(v3d) : NULL;
+ /* Cannot do render if there is not this function. */
+ if (re_type->render_to_image == NULL) {
+ return OPERATOR_CANCELLED;
+ }
+
/* custom scene and single layer re-render */
- screen_render_scene_layer_set(op, mainp, &scene, &srl);
+ screen_render_view_layer_set(op, mainp, &scene, &view_layer);
if (!is_animation && is_write_still && BKE_imtype_is_movie(scene->r.im_format.imtype)) {
BKE_report(op->reports, RPT_ERROR, "Cannot write a single file with an animation format selected");
@@ -306,6 +321,7 @@ static int screen_render_exec(bContext *C, wmOperator *op)
}
re = RE_NewSceneRender(scene);
+ RE_SetDepsgraph(re, CTX_data_depsgraph(C));
lay_override = (v3d && v3d->lay != scene->lay) ? v3d->lay : 0;
G.is_break = false;
@@ -327,13 +343,13 @@ static int screen_render_exec(bContext *C, wmOperator *op)
if (is_animation)
RE_BlenderAnim(re, mainp, scene, camera_override, lay_override, scene->r.sfra, scene->r.efra, scene->r.frame_step);
else
- RE_BlenderFrame(re, mainp, scene, srl, camera_override, lay_override, scene->r.cfra, is_write_still);
+ RE_BlenderFrame(re, mainp, scene, view_layer, camera_override, lay_override, scene->r.cfra, is_write_still);
BLI_end_threaded_malloc();
RE_SetReports(re, NULL);
// no redraw needed, we leave state as we entered it
- ED_update_for_newframe(mainp, scene, 1);
+ ED_update_for_newframe(mainp, scene, view_layer, depsgraph);
WM_event_add_notifier(C, NC_SCENE | ND_RENDER_RESULT, scene);
@@ -489,8 +505,9 @@ static void render_image_update_pass_and_layer(RenderJob *rj, RenderResult *rr,
for (wm = rj->main->wm.first; wm && matched_sa == NULL; wm = wm->id.next) { /* only 1 wm */
wmWindow *win;
for (win = wm->windows.first; win && matched_sa == NULL; win = win->next) {
- ScrArea *sa;
- for (sa = win->screen->areabase.first; sa; sa = sa->next) {
+ const bScreen *screen = WM_window_get_active_screen(win);
+
+ for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
if (sa->spacetype == SPACE_IMAGE) {
SpaceImage *sima = sa->spacedata.first;
// sa->spacedata might be empty when toggling fullscreen mode.
@@ -603,7 +620,7 @@ static void render_startjob(void *rjv, short *stop, short *do_update, float *pro
if (rj->anim)
RE_BlenderAnim(rj->re, rj->main, rj->scene, rj->camera_override, rj->lay_override, rj->scene->r.sfra, rj->scene->r.efra, rj->scene->r.frame_step);
else
- RE_BlenderFrame(rj->re, rj->main, rj->scene, rj->srl, rj->camera_override, rj->lay_override, rj->scene->r.cfra, rj->write_still);
+ RE_BlenderFrame(rj->re, rj->main, rj->scene, rj->view_layer, rj->camera_override, rj->lay_override, rj->scene->r.cfra, rj->write_still);
RE_SetReports(rj->re, NULL);
}
@@ -616,8 +633,9 @@ static void render_image_restore_layer(RenderJob *rj)
for (wm = rj->main->wm.first; wm; wm = wm->id.next) { /* only 1 wm */
wmWindow *win;
for (win = wm->windows.first; win; win = win->next) {
- ScrArea *sa;
- for (sa = win->screen->areabase.first; sa; sa = sa->next) {
+ const bScreen *screen = WM_window_get_active_screen(win);
+
+ for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
if (sa == rj->sa) {
if (sa->spacetype == SPACE_IMAGE) {
SpaceImage *sima = sa->spacedata.first;
@@ -645,7 +663,7 @@ static void render_endjob(void *rjv)
if (rj->anim && !(rj->scene->r.scemode & R_NO_FRAME_UPDATE)) {
/* possible this fails of loading new file while rendering */
if (G.main->wm.first) {
- ED_update_for_newframe(G.main, rj->scene, 1);
+ ED_update_for_newframe(G.main, rj->scene, rj->view_layer, rj->depsgraph);
}
}
@@ -655,7 +673,7 @@ static void render_endjob(void *rjv)
/* potentially set by caller */
rj->scene->r.scemode &= ~R_NO_FRAME_UPDATE;
- if (rj->srl) {
+ if (rj->view_layer) {
nodeUpdateID(rj->scene->nodetree, &rj->scene->id);
WM_main_add_notifier(NC_NODE | NA_EDITED, rj->scene);
}
@@ -685,7 +703,7 @@ static void render_endjob(void *rjv)
* engine API, so lets use simple and robust way for now
* - sergey -
*/
- if (rj->scene->r.layers.first != rj->scene->r.layers.last ||
+ if (rj->scene->view_layers.first != rj->scene->view_layers.last ||
rj->image_outdated)
{
void *lock;
@@ -718,7 +736,7 @@ static void render_endjob(void *rjv)
scene->lay_updated = 0;
}
- DAG_on_visible_update(G.main, false);
+ DEG_on_visible_update(G.main, false);
}
}
@@ -782,33 +800,46 @@ static void screen_render_cancel(bContext *C, wmOperator *op)
WM_jobs_kill_type(wm, scene, WM_JOB_TYPE_RENDER);
}
-static void clean_viewport_memory(Main *bmain, Scene *scene, int renderlay)
+static void clean_viewport_memory_base(Base *base)
{
- Object *object;
- Scene *sce_iter;
- Base *base;
+ if ((base->flag & BASE_VISIBLED) == 0) {
+ return;
+ }
+
+ Object *object = base->object;
- for (object = bmain->object.first; object; object = object->id.next) {
- object->id.tag |= LIB_TAG_DOIT;
+ if (object->id.tag & LIB_TAG_DOIT) {
+ return;
}
- for (SETLOOPER(scene, sce_iter, base)) {
- if ((base->lay & renderlay) == 0) {
- continue;
- }
- if (RE_allow_render_generic_object(base->object)) {
- base->object->id.tag &= ~LIB_TAG_DOIT;
- }
+ object->id.tag &= ~LIB_TAG_DOIT;
+ if (RE_allow_render_generic_object(object)) {
+ BKE_object_free_derived_caches(object);
}
+}
+
+static void clean_viewport_memory(Main *bmain, Scene *scene)
+{
+ Scene *sce_iter;
+ Base *base;
+
+ /* Tag all the available objects. */
+ BKE_main_id_tag_listbase(&bmain->object, LIB_TAG_DOIT, true);
- for (SETLOOPER(scene, sce_iter, base)) {
- object = base->object;
- if ((object->id.tag & LIB_TAG_DOIT) == 0) {
- continue;
+ /* Go over all the visible objects. */
+ for (wmWindowManager *wm = bmain->wm.first; wm; wm = wm->id.next) {
+ for (wmWindow *win = wm->windows.first; win; win = win->next) {
+ WorkSpace *workspace = BKE_workspace_active_get(win->workspace_hook);
+ ViewLayer *view_layer = BKE_view_layer_from_workspace_get(scene, workspace);
+
+ for (base = view_layer->object_bases.first; base; base = base->next) {
+ clean_viewport_memory_base(base);
+ }
}
- object->id.tag &= ~LIB_TAG_DOIT;
+ }
- BKE_object_free_derived_caches(object);
+ for (SETLOOPER_SET_ONLY(scene, sce_iter, base)) {
+ clean_viewport_memory_base(base);
}
}
@@ -817,8 +848,9 @@ static int screen_render_invoke(bContext *C, wmOperator *op, const wmEvent *even
{
/* new render clears all callbacks */
Main *mainp;
+ ViewLayer *view_layer = NULL;
Scene *scene = CTX_data_scene(C);
- SceneRenderLayer *srl = NULL;
+ RenderEngineType *re_type = RE_engines_find(scene->view_render.engine_id);
Render *re;
wmJob *wm_job;
RenderJob *rj;
@@ -831,6 +863,20 @@ static int screen_render_invoke(bContext *C, wmOperator *op, const wmEvent *even
struct Object *camera_override = v3d ? V3D_CAMERA_LOCAL(v3d) : NULL;
const char *name;
ScrArea *sa;
+
+ /* Cannot do render if there is not this function. */
+ if (re_type->render_to_image == NULL) {
+ return OPERATOR_CANCELLED;
+ }
+
+ /* XXX FIXME If engine is an OpenGL engine do not run modal.
+ * This is a problem for animation rendering since you cannot abort them.
+ * This also does not open an image editor space. */
+ if (RE_engine_is_opengl(re_type)) {
+ /* ensure at least 1 area shows result */
+ render_view_open(C, event->x, event->y, op->reports);
+ return screen_render_exec(C, op);
+ }
/* only one render job at a time */
if (WM_jobs_test(CTX_wm_manager(C), scene, WM_JOB_TYPE_RENDER))
@@ -885,7 +931,7 @@ static int screen_render_invoke(bContext *C, wmOperator *op, const wmEvent *even
jobflag = WM_JOB_EXCL_RENDER | WM_JOB_PRIORITY | WM_JOB_PROGRESS;
/* custom scene and single layer re-render */
- screen_render_scene_layer_set(op, mainp, &scene, &srl);
+ screen_render_view_layer_set(op, mainp, &scene, &view_layer);
if (RNA_struct_property_is_set(op->ptr, "layer"))
jobflag |= WM_JOB_SUSPEND;
@@ -895,7 +941,9 @@ static int screen_render_invoke(bContext *C, wmOperator *op, const wmEvent *even
rj->main = mainp;
rj->scene = scene;
rj->current_scene = rj->scene;
- rj->srl = srl;
+ rj->view_layer = view_layer;
+ /* TODO(sergey): Render engine should be using own depsgraph. */
+ rj->depsgraph = CTX_data_depsgraph(C);
rj->camera_override = camera_override;
rj->lay_override = 0;
rj->anim = is_animation;
@@ -930,8 +978,6 @@ static int screen_render_invoke(bContext *C, wmOperator *op, const wmEvent *even
/* Lock the user interface depending on render settings. */
if (scene->r.use_lock_interface) {
- int renderlay = rj->lay_override ? rj->lay_override : scene->lay;
-
WM_set_locked_interface(CTX_wm_manager(C), true);
/* Set flag interface need to be unlocked.
@@ -945,7 +991,7 @@ static int screen_render_invoke(bContext *C, wmOperator *op, const wmEvent *even
rj->interface_locked = true;
/* Clean memory used by viewport? */
- clean_viewport_memory(rj->main, scene, renderlay);
+ clean_viewport_memory(rj->main, scene);
}
/* setup job */
@@ -971,6 +1017,7 @@ static int screen_render_invoke(bContext *C, wmOperator *op, const wmEvent *even
RE_current_scene_update_cb(re, rj, current_scene_update);
RE_stats_draw_cb(re, rj, image_renderinfo_cb);
RE_progress_cb(re, rj, render_progress_update);
+ RE_SetDepsgraph(re, CTX_data_depsgraph(C));
rj->re = re;
G.is_break = false;
@@ -1041,6 +1088,7 @@ typedef struct RenderPreview {
wmJob *job;
Scene *scene;
+ Depsgraph *depsgraph;
ScrArea *sa;
ARegion *ar;
View3D *v3d;
@@ -1055,7 +1103,8 @@ typedef struct RenderPreview {
bool has_freestyle;
} RenderPreview;
-static int render_view3d_disprect(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D *rv3d, rcti *disprect)
+static int render_view3d_disprect(Scene *scene, const Depsgraph *depsgraph,
+ ARegion *ar, View3D *v3d, RegionView3D *rv3d, rcti *disprect)
{
/* copied code from view3d_draw.c */
rctf viewborder;
@@ -1068,7 +1117,7 @@ static int render_view3d_disprect(Scene *scene, ARegion *ar, View3D *v3d, Region
if (draw_border) {
if (rv3d->persp == RV3D_CAMOB) {
- ED_view3d_calc_camera_border(scene, ar, v3d, rv3d, &viewborder, false);
+ ED_view3d_calc_camera_border(scene, depsgraph, ar, v3d, rv3d, &viewborder, false);
disprect->xmin = viewborder.xmin + scene->r.border.xmin * BLI_rctf_size_x(&viewborder);
disprect->ymin = viewborder.ymin + scene->r.border.ymin * BLI_rctf_size_y(&viewborder);
@@ -1090,13 +1139,15 @@ static int render_view3d_disprect(Scene *scene, ARegion *ar, View3D *v3d, Region
}
/* returns true if OK */
-static bool render_view3d_get_rects(ARegion *ar, View3D *v3d, RegionView3D *rv3d, rctf *viewplane, RenderEngine *engine,
- float *r_clipsta, float *r_clipend, float *r_pixsize, bool *r_ortho)
+static bool render_view3d_get_rects(
+ const Depsgraph *depsgraph,
+ ARegion *ar, View3D *v3d, RegionView3D *rv3d, rctf *viewplane, RenderEngine *engine,
+ float *r_clipsta, float *r_clipend, float *r_pixsize, bool *r_ortho)
{
if (ar->winx < 4 || ar->winy < 4) return false;
- *r_ortho = ED_view3d_viewplane_get(v3d, rv3d, ar->winx, ar->winy, viewplane, r_clipsta, r_clipend, r_pixsize);
+ *r_ortho = ED_view3d_viewplane_get(depsgraph, v3d, rv3d, ar->winx, ar->winy, viewplane, r_clipsta, r_clipend, r_pixsize);
engine->resolution_x = ar->winx;
engine->resolution_y = ar->winy;
@@ -1203,7 +1254,7 @@ static void render_view3d_startjob(void *customdata, short *stop, short *do_upda
G.is_break = false;
- if (false == render_view3d_get_rects(rp->ar, rp->v3d, rp->rv3d, &viewplane, rp->engine, &clipsta, &clipend, &pixsize, &orth))
+ if (false == render_view3d_get_rects(rp->depsgraph, rp->ar, rp->v3d, rp->rv3d, &viewplane, rp->engine, &clipsta, &clipend, &pixsize, &orth))
return;
rp->stop = stop;
@@ -1236,8 +1287,9 @@ static void render_view3d_startjob(void *customdata, short *stop, short *do_upda
}
}
- use_border = render_view3d_disprect(rp->scene, rp->ar, rp->v3d,
- rp->rv3d, &cliprct);
+ use_border = render_view3d_disprect(rp->scene, rp->depsgraph,
+ rp->ar, rp->v3d, rp->rv3d,
+ &cliprct);
if ((update_flag & (PR_UPDATE_RENDERSIZE | PR_UPDATE_DATABASE | PR_UPDATE_VIEW)) || rstats->convertdone == 0) {
RenderData rdata;
@@ -1254,10 +1306,10 @@ static void render_view3d_startjob(void *customdata, short *stop, short *do_upda
/* initalize always */
if (use_border) {
rdata.mode |= R_BORDER;
- RE_InitState(re, NULL, &rdata, NULL, rp->ar->winx, rp->ar->winy, &cliprct);
+ RE_InitState(re, NULL, &rdata, &rp->scene->view_layers, rp->scene->active_view_layer, &rp->scene->view_render, NULL, rp->ar->winx, rp->ar->winy, &cliprct);
}
else
- RE_InitState(re, NULL, &rdata, NULL, rp->ar->winx, rp->ar->winy, NULL);
+ RE_InitState(re, NULL, &rdata, &rp->scene->view_layers, rp->scene->active_view_layer, &rp->scene->view_render, NULL, rp->ar->winx, rp->ar->winy, NULL);
}
if (orth)
@@ -1360,6 +1412,7 @@ static bool render_view3d_flag_changed(RenderEngine *engine, const bContext *C)
View3D *v3d = CTX_wm_view3d(C);
ARegion *ar = CTX_wm_region(C);
Scene *scene = CTX_data_scene(C);
+ Depsgraph *depsgraph = CTX_data_depsgraph(C);
Render *re;
rctf viewplane;
rcti disprect;
@@ -1409,14 +1462,14 @@ static bool render_view3d_flag_changed(RenderEngine *engine, const bContext *C)
job_update_flag |= PR_UPDATE_VIEW;
}
- render_view3d_get_rects(ar, v3d, rv3d, &viewplane, engine, &clipsta, &clipend, NULL, &orth);
+ render_view3d_get_rects(depsgraph, ar, v3d, rv3d, &viewplane, engine, &clipsta, &clipend, NULL, &orth);
if (BLI_rctf_compare(&viewplane, &engine->last_viewplane, 0.00001f) == 0) {
engine->last_viewplane = viewplane;
job_update_flag |= PR_UPDATE_VIEW;
}
- render_view3d_disprect(scene, ar, v3d, rv3d, &disprect);
+ render_view3d_disprect(scene, depsgraph, ar, v3d, rv3d, &disprect);
if (BLI_rcti_compare(&disprect, &engine->last_disprect) == 0) {
engine->last_disprect = disprect;
job_update_flag |= PR_UPDATE_RENDERSIZE;
@@ -1436,6 +1489,7 @@ static void render_view3d_do(RenderEngine *engine, const bContext *C)
wmJob *wm_job;
RenderPreview *rp;
Scene *scene = CTX_data_scene(C);
+ Depsgraph *depsgraph = CTX_data_depsgraph(C);
ARegion *ar = CTX_wm_region(C);
int width = ar->winx, height = ar->winy;
int divider = BKE_render_preview_pixel_size(&scene->r);
@@ -1460,6 +1514,7 @@ static void render_view3d_do(RenderEngine *engine, const bContext *C)
/* customdata for preview thread */
rp->scene = scene;
+ rp->depsgraph = depsgraph;
rp->engine = engine;
rp->sa = CTX_wm_area(C);
rp->ar = CTX_wm_region(C);
@@ -1517,6 +1572,7 @@ void render_view3d_draw(RenderEngine *engine, const bContext *C)
RegionView3D *rv3d = CTX_wm_region_view3d(C);
View3D *v3d = CTX_wm_view3d(C);
Scene *scene = CTX_data_scene(C);
+ Depsgraph *depsgraph = CTX_data_depsgraph(C);
ARegion *ar = CTX_wm_region(C);
bool force_fallback = false;
bool need_fallback = true;
@@ -1525,7 +1581,7 @@ void render_view3d_draw(RenderEngine *engine, const bContext *C)
rcti clip_rect;
int xof, yof;
- if (render_view3d_disprect(scene, ar, v3d, rv3d, &clip_rect)) {
+ if (render_view3d_disprect(scene, depsgraph, ar, v3d, rv3d, &clip_rect)) {
scale_x = (float) BLI_rcti_size_x(&clip_rect) / rres.rectx;
scale_y = (float) BLI_rcti_size_y(&clip_rect) / rres.recty;
xof = clip_rect.xmin;
@@ -1545,11 +1601,10 @@ void render_view3d_draw(RenderEngine *engine, const bContext *C)
if (force_fallback == false) {
if (IMB_colormanagement_setup_glsl_draw(&scene->view_settings, &scene->display_settings, dither, true)) {
glEnable(GL_BLEND);
- glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
- glPixelZoom(scale_x, scale_y);
- glaDrawPixelsTex(xof, yof, rres.rectx, rres.recty,
- GL_RGBA, GL_FLOAT, GL_NEAREST, rres.rectf);
- glPixelZoom(1.0f, 1.0f);
+ IMMDrawPixelsTexState state = immDrawPixelsTexSetup(GPU_SHADER_2D_IMAGE_COLOR);
+ immDrawPixelsTex(&state, xof, yof, rres.rectx, rres.recty,
+ GL_RGBA, GL_FLOAT, GL_NEAREST, rres.rectf,
+ scale_x, scale_y, NULL);;
glDisable(GL_BLEND);
IMB_colormanagement_finish_glsl_draw();
@@ -1566,12 +1621,11 @@ void render_view3d_draw(RenderEngine *engine, const bContext *C)
4, dither, &scene->view_settings, &scene->display_settings);
glEnable(GL_BLEND);
- glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
- glPixelZoom(scale_x, scale_y);
- glaDrawPixelsAuto(xof, yof, rres.rectx, rres.recty,
- GL_RGBA, GL_UNSIGNED_BYTE,
- GL_NEAREST, display_buffer);
- glPixelZoom(1.0f, 1.0f);
+ IMMDrawPixelsTexState state = immDrawPixelsTexSetup(GPU_SHADER_2D_IMAGE_COLOR);
+ immDrawPixelsTex(&state, xof, yof, rres.rectx, rres.recty,
+ GL_RGBA, GL_UNSIGNED_BYTE,
+ GL_NEAREST, display_buffer,
+ scale_x, scale_y, NULL);
glDisable(GL_BLEND);
MEM_freeN(display_buffer);
diff --git a/source/blender/editors/render/render_opengl.c b/source/blender/editors/render/render_opengl.c
index 1133b5f79d1..6e969067985 100644
--- a/source/blender/editors/render/render_opengl.c
+++ b/source/blender/editors/render/render_opengl.c
@@ -55,6 +55,8 @@
#include "BKE_sequencer.h"
#include "BKE_writeavi.h"
+#include "DEG_depsgraph.h"
+
#include "WM_api.h"
#include "WM_types.h"
@@ -70,9 +72,10 @@
#include "RNA_access.h"
#include "RNA_define.h"
-#include "GPU_glew.h"
#include "GPU_compositing.h"
#include "GPU_framebuffer.h"
+#include "GPU_glew.h"
+#include "GPU_matrix.h"
#include "render_intern.h"
@@ -91,6 +94,9 @@ typedef struct OGLRender {
Main *bmain;
Render *re;
Scene *scene;
+ WorkSpace *workspace;
+ ViewLayer *view_layer;
+ Depsgraph *depsgraph;
View3D *v3d;
RegionView3D *rv3d;
@@ -148,17 +154,6 @@ typedef struct OGLRender {
#endif
} OGLRender;
-/* added because v3d is not always valid */
-static unsigned int screen_opengl_layers(OGLRender *oglrender)
-{
- if (oglrender->v3d) {
- return oglrender->scene->lay | oglrender->v3d->lay;
- }
- else {
- return oglrender->scene->lay;
- }
-}
-
static bool screen_opengl_is_multiview(OGLRender *oglrender)
{
View3D *v3d = oglrender->v3d;
@@ -271,9 +266,10 @@ static void screen_opengl_views_setup(OGLRender *oglrender)
RE_ReleaseResult(oglrender->re);
}
-static void screen_opengl_render_doit(OGLRender *oglrender, RenderResult *rr)
+static void screen_opengl_render_doit(const bContext *C, OGLRender *oglrender, RenderResult *rr)
{
Scene *scene = oglrender->scene;
+ ViewLayer *view_layer = oglrender->view_layer;
ARegion *ar = oglrender->ar;
View3D *v3d = oglrender->v3d;
RegionView3D *rv3d = oglrender->rv3d;
@@ -283,9 +279,12 @@ static void screen_opengl_render_doit(OGLRender *oglrender, RenderResult *rr)
const short view_context = (v3d != NULL);
bool draw_bgpic = true;
bool draw_sky = (scene->r.alphamode == R_ADDSKY);
- unsigned char *rect = NULL;
+ float *rectf = NULL;
const char *viewname = RE_GetActiveRenderView(oglrender->re);
ImBuf *ibuf_result = NULL;
+ EvaluationContext eval_ctx;
+
+ CTX_data_eval_ctx(C, &eval_ctx);
if (oglrender->is_sequencer) {
SpaceSeq *sseq = oglrender->sseq;
@@ -330,7 +329,7 @@ static void screen_opengl_render_doit(OGLRender *oglrender, RenderResult *rr)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
wmOrtho2(0, sizex, 0, sizey);
- glTranslatef(sizex / 2, sizey / 2, 0.0f);
+ gpuTranslate2f(sizex / 2, sizey / 2);
G.f |= G_RENDER_OGL;
ED_gpencil_draw_ex(scene, gpd, sizex, sizey, scene->r.cfra, SPACE_SEQ);
@@ -360,8 +359,8 @@ static void screen_opengl_render_doit(OGLRender *oglrender, RenderResult *rr)
draw_flags |= (draw_bgpic) ? V3D_OFSDRAW_USE_BACKGROUND : 0;
ibuf_view = ED_view3d_draw_offscreen_imbuf(
- scene, v3d, ar, sizex, sizey,
- IB_rect, draw_flags, alpha_mode, oglrender->ofs_samples, viewname,
+ &eval_ctx, scene, view_layer, v3d, ar, sizex, sizey,
+ IB_rectfloat, draw_flags, alpha_mode, oglrender->ofs_samples, viewname,
oglrender->fx, oglrender->ofs, err_out);
/* for stamp only */
@@ -372,8 +371,8 @@ static void screen_opengl_render_doit(OGLRender *oglrender, RenderResult *rr)
else {
draw_flags |= (V3D_OFSDRAW_USE_GPENCIL | V3D_OFSDRAW_USE_BACKGROUND);
ibuf_view = ED_view3d_draw_offscreen_imbuf_simple(
- scene, scene->camera, oglrender->sizex, oglrender->sizey,
- IB_rect, draw_flags, OB_SOLID,
+ &eval_ctx, scene, view_layer, scene->camera, oglrender->sizex, oglrender->sizey,
+ IB_rectfloat, draw_flags, OB_SOLID,
alpha_mode, oglrender->ofs_samples, viewname,
oglrender->fx, oglrender->ofs, err_out);
camera = scene->camera;
@@ -381,7 +380,7 @@ static void screen_opengl_render_doit(OGLRender *oglrender, RenderResult *rr)
if (ibuf_view) {
ibuf_result = ibuf_view;
- rect = (unsigned char *)ibuf_view->rect;
+ rectf = (float *)ibuf_view->rect_float;
}
else {
fprintf(stderr, "%s: failed to get buffer, %s\n", __func__, err_out);
@@ -390,7 +389,7 @@ static void screen_opengl_render_doit(OGLRender *oglrender, RenderResult *rr)
if (ibuf_result != NULL) {
if ((scene->r.stamp & R_STAMP_ALL) && (scene->r.stamp & R_STAMP_DRAW)) {
- BKE_image_stamp_buf(scene, camera, NULL, rect, NULL, rr->rectx, rr->recty, 4);
+ BKE_image_stamp_buf(scene, camera, NULL, NULL, rectf, rr->rectx, rr->recty, 4);
}
RE_render_result_rect_from_ibuf(rr, &scene->r, ibuf_result, oglrender->view_id);
IMB_freeImBuf(ibuf_result);
@@ -435,7 +434,7 @@ static void addAlphaOverFloat(float dest[4], const float source[4])
}
/* add renderlayer and renderpass for each grease pencil layer for using in composition */
-static void add_gpencil_renderpass(OGLRender *oglrender, RenderResult *rr, RenderView *rv)
+static void add_gpencil_renderpass(const bContext *C, OGLRender *oglrender, RenderResult *rr, RenderView *rv)
{
bGPdata *gpd = oglrender->scene->gpd;
Scene *scene = oglrender->scene;
@@ -479,7 +478,7 @@ static void add_gpencil_renderpass(OGLRender *oglrender, RenderResult *rr, Rende
}
/* render this gp layer */
- screen_opengl_render_doit(oglrender, rr);
+ screen_opengl_render_doit(C, oglrender, rr);
/* add RendePass composite */
RenderPass *rp = RE_create_gp_pass(rr, gpl->info, rv->name);
@@ -519,7 +518,7 @@ static void add_gpencil_renderpass(OGLRender *oglrender, RenderResult *rr, Rende
scene->r.alphamode = oldalphamode;
}
-static void screen_opengl_render_apply(OGLRender *oglrender)
+static void screen_opengl_render_apply(const bContext *C, OGLRender *oglrender)
{
RenderResult *rr;
RenderView *rv;
@@ -557,10 +556,10 @@ static void screen_opengl_render_apply(OGLRender *oglrender)
/* add grease pencil passes. For sequencer, the render does not include renderpasses
* TODO: The sequencer render of grease pencil should be rethought */
if (!oglrender->is_sequencer) {
- add_gpencil_renderpass(oglrender, rr, rv);
+ add_gpencil_renderpass(C, oglrender, rr, rv);
}
/* render composite */
- screen_opengl_render_doit(oglrender, rr);
+ screen_opengl_render_doit(C, oglrender, rr);
}
RE_ReleaseResult(oglrender->re);
@@ -576,11 +575,30 @@ static void screen_opengl_render_apply(OGLRender *oglrender)
}
}
+static bool screen_opengl_fullsample_enabled(Scene *scene)
+{
+ if (scene->r.scemode & R_FULL_SAMPLE) {
+ return true;
+ }
+ else {
+ /* XXX TODO:
+ * Technically if the hardware supports MSAA we could keep using Blender 2.7x approach.
+ * However anti-aliasing without full_sample is not playing well even in 2.7x.
+ *
+ * For example, if you enable depth of field, there is aliasing, even if the viewport is fine.
+ * For 2.8x this is more complicated because so many things rely on shader.
+ * So until we fix the gpu_framebuffer anti-aliasing suupport we need to force full sample.
+ */
+ return true;
+ }
+}
+
static bool screen_opengl_render_init(bContext *C, wmOperator *op)
{
/* new render clears all callbacks */
wmWindowManager *wm = CTX_wm_manager(C);
wmWindow *win = CTX_wm_window(C);
+ WorkSpace *workspace = CTX_wm_workspace(C);
Scene *scene = CTX_data_scene(C);
ScrArea *prevsa = CTX_wm_area(C);
@@ -589,7 +607,7 @@ static bool screen_opengl_render_init(bContext *C, wmOperator *op)
OGLRender *oglrender;
int sizex, sizey;
const int samples = (scene->r.mode & R_OSA) ? scene->r.osa : 0;
- const bool full_samples = (samples != 0) && (scene->r.scemode & R_FULL_SAMPLE);
+ const bool full_samples = (samples != 0) && screen_opengl_fullsample_enabled(scene);
bool is_view_context = RNA_boolean_get(op->ptr, "view_context");
const bool is_animation = RNA_boolean_get(op->ptr, "animation");
const bool is_sequencer = RNA_boolean_get(op->ptr, "sequencer");
@@ -634,7 +652,7 @@ static bool screen_opengl_render_init(bContext *C, wmOperator *op)
sizey = (scene->r.size * scene->r.ysch) / 100;
/* corrects render size with actual size, not every card supports non-power-of-two dimensions */
- ofs = GPU_offscreen_create(sizex, sizey, full_samples ? 0 : samples, err_out);
+ ofs = GPU_offscreen_create(sizex, sizey, full_samples ? 0 : samples, true, err_out);
if (!ofs) {
BKE_reportf(op->reports, RPT_ERROR, "Failed to create OpenGL off-screen buffer, %s", err_out);
@@ -652,6 +670,9 @@ static bool screen_opengl_render_init(bContext *C, wmOperator *op)
oglrender->sizey = sizey;
oglrender->bmain = CTX_data_main(C);
oglrender->scene = scene;
+ oglrender->workspace = workspace;
+ oglrender->view_layer = CTX_data_view_layer(C);
+ oglrender->depsgraph = CTX_data_depsgraph(C);
oglrender->cfrao = scene->r.cfra;
oglrender->write_still = is_write_still && !is_animation;
@@ -696,6 +717,8 @@ static bool screen_opengl_render_init(bContext *C, wmOperator *op)
/* create render */
oglrender->re = RE_NewSceneRender(scene);
+ ViewRender *view_render = BKE_viewrender_get(scene, workspace);
+ RE_SetEngineByID(oglrender->re, view_render->engine_id);
/* create image and image user */
oglrender->ima = BKE_image_verify_viewer(IMA_TYPE_R_RESULT, "Render Result");
@@ -706,7 +729,7 @@ static bool screen_opengl_render_init(bContext *C, wmOperator *op)
oglrender->iuser.ok = 1;
/* create render result */
- RE_InitState(oglrender->re, NULL, &scene->r, NULL, sizex, sizey, NULL);
+ RE_InitState(oglrender->re, NULL, &scene->r, &scene->view_layers, scene->active_view_layer, view_render, NULL, sizex, sizey, NULL);
/* create render views */
screen_opengl_views_setup(oglrender);
@@ -803,8 +826,10 @@ static void screen_opengl_render_end(bContext *C, OGLRender *oglrender)
}
if (oglrender->timer) { /* exec will not have a timer */
+ Depsgraph *depsgraph = oglrender->depsgraph;
+ ViewLayer *view_layer = oglrender->view_layer;
scene->r.cfra = oglrender->cfrao;
- BKE_scene_update_for_newframe(bmain->eval_ctx, bmain, scene, screen_opengl_layers(oglrender));
+ BKE_scene_graph_update_for_newframe(bmain->eval_ctx, depsgraph, bmain, scene, view_layer);
WM_event_remove_timer(oglrender->wm, oglrender->win, oglrender->timer);
}
@@ -1004,6 +1029,8 @@ static bool screen_opengl_render_anim_step(bContext *C, wmOperator *op)
Main *bmain = CTX_data_main(C);
OGLRender *oglrender = op->customdata;
Scene *scene = oglrender->scene;
+ ViewLayer *view_layer = oglrender->view_layer;
+ Depsgraph *depsgraph = oglrender->depsgraph;
char name[FILE_MAX];
bool ok = false;
const bool view_context = (oglrender->v3d != NULL);
@@ -1014,12 +1041,7 @@ static bool screen_opengl_render_anim_step(bContext *C, wmOperator *op)
if (CFRA < oglrender->nfra)
CFRA++;
while (CFRA < oglrender->nfra) {
- unsigned int lay = screen_opengl_layers(oglrender);
-
- if (lay & 0xFF000000)
- lay &= 0xFF000000;
-
- BKE_scene_update_for_newframe(bmain->eval_ctx, bmain, scene, lay);
+ BKE_scene_graph_update_for_newframe(bmain->eval_ctx, depsgraph, bmain, scene, view_layer);
CFRA++;
}
@@ -1041,11 +1063,11 @@ static bool screen_opengl_render_anim_step(bContext *C, wmOperator *op)
WM_cursor_time(oglrender->win, scene->r.cfra);
- BKE_scene_update_for_newframe(bmain->eval_ctx, bmain, scene, screen_opengl_layers(oglrender));
+ BKE_scene_graph_update_for_newframe(bmain->eval_ctx, depsgraph, bmain, scene, view_layer);
if (view_context) {
if (oglrender->rv3d->persp == RV3D_CAMOB && oglrender->v3d->camera && oglrender->v3d->scenelock) {
- /* since BKE_scene_update_for_newframe() is used rather
+ /* since BKE_scene_graph_update_for_newframe() is used rather
* then ED_update_for_newframe() the camera needs to be set */
if (BKE_scene_camera_switch_update(scene)) {
oglrender->v3d->camera = scene->camera;
@@ -1057,7 +1079,7 @@ static bool screen_opengl_render_anim_step(bContext *C, wmOperator *op)
}
/* render into offscreen buffer */
- screen_opengl_render_apply(oglrender);
+ screen_opengl_render_apply(C, oglrender);
/* save to disk */
rr = RE_AcquireResultRead(oglrender->re);
@@ -1107,7 +1129,7 @@ static int screen_opengl_render_modal(bContext *C, wmOperator *op, const wmEvent
WM_event_add_notifier(C, NC_SCENE | ND_RENDER_RESULT, oglrender->scene);
if (anim == 0) {
- screen_opengl_render_apply(op->customdata);
+ screen_opengl_render_apply(C, op->customdata);
screen_opengl_render_end(C, op->customdata);
return OPERATOR_FINISHED;
}
@@ -1158,7 +1180,7 @@ static int screen_opengl_render_exec(bContext *C, wmOperator *op)
if (!is_animation) { /* same as invoke */
/* render image */
- screen_opengl_render_apply(op->customdata);
+ screen_opengl_render_apply(C, op->customdata);
screen_opengl_render_end(C, op->customdata);
return OPERATOR_FINISHED;
@@ -1175,7 +1197,7 @@ static int screen_opengl_render_exec(bContext *C, wmOperator *op)
}
/* no redraw needed, we leave state as we entered it */
-// ED_update_for_newframe(C, 1);
+// ED_update_for_newframe(C);
WM_event_add_notifier(C, NC_SCENE | ND_RENDER_RESULT, CTX_data_scene(C));
return OPERATOR_FINISHED;
diff --git a/source/blender/editors/render/render_ops.c b/source/blender/editors/render/render_ops.c
index c09e8576dc2..bd75c6879e1 100644
--- a/source/blender/editors/render/render_ops.c
+++ b/source/blender/editors/render/render_ops.c
@@ -56,8 +56,8 @@ void ED_operatortypes_render(void)
WM_operatortype_append(MATERIAL_OT_copy);
WM_operatortype_append(MATERIAL_OT_paste);
- WM_operatortype_append(SCENE_OT_render_layer_add);
- WM_operatortype_append(SCENE_OT_render_layer_remove);
+ WM_operatortype_append(SCENE_OT_view_layer_add);
+ WM_operatortype_append(SCENE_OT_view_layer_remove);
WM_operatortype_append(SCENE_OT_render_view_add);
WM_operatortype_append(SCENE_OT_render_view_remove);
diff --git a/source/blender/editors/render/render_preview.c b/source/blender/editors/render/render_preview.c
index 9656a57e2b7..2e3091268a9 100644
--- a/source/blender/editors/render/render_preview.c
+++ b/source/blender/editors/render/render_preview.c
@@ -69,6 +69,7 @@
#include "BKE_image.h"
#include "BKE_icons.h"
#include "BKE_lamp.h"
+#include "BKE_layer.h"
#include "BKE_library.h"
#include "BKE_library_remap.h"
#include "BKE_main.h"
@@ -78,6 +79,9 @@
#include "BKE_texture.h"
#include "BKE_world.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#include "IMB_imbuf.h"
#include "IMB_imbuf_types.h"
#include "IMB_thumbs.h"
@@ -85,6 +89,7 @@
#include "BIF_gl.h"
#include "BIF_glutil.h"
+#include "GPU_shader.h"
#include "RE_pipeline.h"
#include "RE_engine.h"
@@ -94,6 +99,7 @@
#include "ED_datafiles.h"
#include "ED_render.h"
+#include "ED_screen.h"
#ifndef NDEBUG
/* Used for database init assert(). */
@@ -167,6 +173,7 @@ typedef struct ShaderPreview {
Main *bmain;
Main *pr_main;
+ ViewRender *view_render;
} ShaderPreview;
typedef struct IconPreviewSize {
@@ -181,6 +188,7 @@ typedef struct IconPreview {
void *owner;
ID *id;
ListBase sizes;
+ ViewRender *view_render;
} IconPreview;
/* *************************** Preview for buttons *********************** */
@@ -223,7 +231,7 @@ void ED_preview_ensure_dbase(void)
static bool check_engine_supports_textures(Scene *scene)
{
- RenderEngineType *type = RE_engines_find(scene->r.engine);
+ RenderEngineType *type = RE_engines_find(scene->view_render.engine_id);
return type->flag & RE_USE_TEXTURE_PREVIEW;
}
@@ -269,20 +277,76 @@ static Scene *preview_get_scene(Main *pr_main)
return pr_main->scene.first;
}
+static const char *preview_layer_name(const char pr_type)
+{
+ switch (pr_type) {
+ case MA_FLAT:
+ return "Flat";
+ case MA_SPHERE:
+ return "Sphere";
+ case MA_CUBE:
+ return "Cube";
+ case MA_MONKEY:
+ return "Monkey";
+ case MA_SPHERE_A:
+ return "World Sphere";
+ case MA_TEXTURE:
+ return "Texture";
+ case MA_LAMP:
+ return "Lamp";
+ case MA_SKY:
+ return "Sky";
+ case MA_HAIR:
+ return "Hair";
+ case MA_ATMOS:
+ return "Atmosphere";
+ default:
+ BLI_assert(!"Unknown preview type");
+ return "";
+ }
+}
+
+static void set_preview_layer(ViewLayer *view_layer, char pr_type)
+{
+ LayerCollection *lc;
+ const char *collection_name = preview_layer_name(pr_type);
+
+ for (lc = view_layer->layer_collections.first; lc; lc = lc->next) {
+ if (STREQ(lc->scene_collection->name, collection_name)) {
+ lc->flag = COLLECTION_VIEWPORT | COLLECTION_RENDER;
+ }
+ else {
+ lc->flag = COLLECTION_DISABLED;
+ }
+ }
+}
+
+static World *preview_get_localized_world(ShaderPreview *sp, World *world)
+{
+ if (world == NULL) {
+ return NULL;
+ }
+ if (sp->worldcopy != NULL) {
+ return sp->worldcopy;
+ }
+ sp->worldcopy = BKE_world_localize(world);
+ BLI_addtail(&sp->pr_main->world, sp->worldcopy);
+ return sp->worldcopy;
+}
/* call this with a pointer to initialize preview scene */
/* call this with NULL to restore assigned ID pointers in preview scene */
static Scene *preview_prepare_scene(Main *bmain, Scene *scene, ID *id, int id_type, ShaderPreview *sp)
{
Scene *sce;
- Base *base;
Main *pr_main = sp->pr_main;
memcpy(pr_main->name, bmain->name, sizeof(pr_main->name));
sce = preview_get_scene(pr_main);
if (sce) {
-
+ ViewLayer *view_layer = BKE_view_layer_from_scene_get(sce);
+
/* this flag tells render to not execute depsgraph or ipos etc */
sce->r.scemode |= R_BUTS_PREVIEW;
/* set world always back, is used now */
@@ -320,10 +384,10 @@ static Scene *preview_prepare_scene(Main *bmain, Scene *scene, ID *id, int id_ty
* seems commonly used render engines does not support
* such kind of rendering.
*/
- BLI_strncpy(sce->r.engine, RE_engine_id_BLENDER_RENDER, sizeof(sce->r.engine));
+ BLI_strncpy(sce->view_render.engine_id, RE_engine_id_BLENDER_RENDER, sizeof(sce->view_render.engine_id));
}
else {
- BLI_strncpy(sce->r.engine, scene->r.engine, sizeof(sce->r.engine));
+ BLI_strncpy(sce->view_render.engine_id, scene->view_render.engine_id, sizeof(sce->view_render.engine_id));
}
if (id_type == ID_MA) {
@@ -357,50 +421,60 @@ static Scene *preview_prepare_scene(Main *bmain, Scene *scene, ID *id, int id_ty
/* this only works in a specific case where the preview.blend contains
* an object starting with 'c' which has a material linked to it (not the obdata)
* and that material has a fake shadow texture in the active texture slot */
- for (base = sce->base.first; base; base = base->next) {
- if (base->object->id.name[2] == 'c') {
- Material *shadmat = give_current_material(base->object, base->object->actcol);
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ Object *ob = base->object;
+ if (ob->id.name[2] == 'c') {
+ Material *shadmat = give_current_material(ob, ob->actcol);
if (shadmat) {
- if (mat->mode2 & MA_CASTSHADOW) shadmat->septex = 0;
- else shadmat->septex |= 1;
+ if (mat->mode2 & MA_CASTSHADOW) {
+ shadmat->septex = 0;
+ }
+ else {
+ shadmat->septex |= 1;
+ }
}
}
}
/* turn off bounce lights for volume,
* doesn't make much visual difference and slows it down too */
- for (base = sce->base.first; base; base = base->next) {
- if (base->object->type == OB_LAMP) {
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ Object *ob = base->object;
+ if (ob->type == OB_LAMP) {
/* if doesn't match 'Lamp.002' --> main key light */
- if (!STREQ(base->object->id.name + 2, "Lamp.002")) {
- if (mat->material_type == MA_TYPE_VOLUME)
- base->object->restrictflag |= OB_RESTRICT_RENDER;
- else
- base->object->restrictflag &= ~OB_RESTRICT_RENDER;
+ if (!STREQ(ob->id.name + 2, "Lamp.002")) {
+ if (mat->material_type == MA_TYPE_VOLUME) {
+ base->flag &= ~BASE_VISIBLED;
+ }
+ else {
+ base->flag |= BASE_VISIBLED;
+ }
}
}
}
}
else {
/* use current scene world to light sphere */
- if (mat->pr_type == MA_SPHERE_A)
- sce->world = scene->world;
+ if (mat->pr_type == MA_SPHERE_A) {
+ sce->world = preview_get_localized_world(sp, scene->world);
+ }
}
if (sp->pr_method == PR_ICON_RENDER) {
if (mat->material_type == MA_TYPE_HALO) {
- sce->lay = 1 << MA_FLAT;
+ set_preview_layer(view_layer, MA_FLAT);
}
else {
- sce->lay = 1 << MA_SPHERE_A;
+ set_preview_layer(view_layer, MA_SPHERE_A);
/* same as above, use current scene world to light sphere */
if (BKE_scene_use_new_shading_nodes(scene))
- sce->world = scene->world;
+ sce->world = preview_get_localized_world(sp, scene->world);
}
}
else {
- sce->lay = 1 << mat->pr_type;
+ set_preview_layer(view_layer, mat->pr_type);
+
if (mat->nodetree && sp->pr_method == PR_NODE_RENDER) {
/* two previews, they get copied by wmJob */
BKE_node_preview_init_tree(mat->nodetree, sp->sizex, sp->sizey, true);
@@ -413,7 +487,7 @@ static Scene *preview_prepare_scene(Main *bmain, Scene *scene, ID *id, int id_ty
}
- for (base = sce->base.first; base; base = base->next) {
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
if (base->object->id.name[2] == 'p') {
/* copy over object color, in case material uses it */
copy_v4_v4(base->object->col, sp->col);
@@ -427,7 +501,7 @@ static Scene *preview_prepare_scene(Main *bmain, Scene *scene, ID *id, int id_ty
(*matar)[actcol] = mat;
}
else if (base->object->type == OB_LAMP) {
- base->object->restrictflag &= ~OB_RESTRICT_RENDER;
+ base->flag |= BASE_VISIBLED;
}
}
}
@@ -440,9 +514,9 @@ static Scene *preview_prepare_scene(Main *bmain, Scene *scene, ID *id, int id_ty
sp->texcopy = tex;
BLI_addtail(&pr_main->tex, tex);
}
- sce->lay = 1 << MA_TEXTURE;
+ set_preview_layer(view_layer, MA_TEXTURE);
- for (base = sce->base.first; base; base = base->next) {
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
if (base->object->id.name[2] == 't') {
Material *mat = give_current_material(base->object, base->object->actcol);
if (mat && mat->mtex[0]) {
@@ -481,21 +555,23 @@ static Scene *preview_prepare_scene(Main *bmain, Scene *scene, ID *id, int id_ty
BLI_addtail(&pr_main->lamp, la);
}
- sce->lay = 1 << MA_LAMP;
-
if (!BKE_scene_use_new_shading_nodes(scene)) {
if (la && la->type == LA_SUN && (la->sun_effect_type & LA_SUN_EFFECT_SKY)) {
- sce->lay = 1 << MA_ATMOS;
- sce->world = scene->world;
+ set_preview_layer(view_layer, MA_ATMOS);
+ sce->world = preview_get_localized_world(sp, scene->world);
sce->camera = (Object *)BLI_findstring(&pr_main->object, "CameraAtmo", offsetof(ID, name) + 2);
}
else {
sce->world = NULL;
sce->camera = (Object *)BLI_findstring(&pr_main->object, "Camera", offsetof(ID, name) + 2);
+ set_preview_layer(view_layer, MA_LAMP);
}
}
+ else {
+ set_preview_layer(view_layer, MA_LAMP);
+ }
- for (base = sce->base.first; base; base = base->next) {
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
if (base->object->id.name[2] == 'p') {
if (base->object->type == OB_LAMP)
base->object->data = la;
@@ -517,7 +593,7 @@ static Scene *preview_prepare_scene(Main *bmain, Scene *scene, ID *id, int id_ty
BLI_addtail(&pr_main->world, wrld);
}
- sce->lay = 1 << MA_SKY;
+ set_preview_layer(view_layer, MA_SKY);
sce->world = wrld;
if (wrld && wrld->nodetree && sp->pr_method == PR_NODE_RENDER) {
@@ -527,6 +603,12 @@ static Scene *preview_prepare_scene(Main *bmain, Scene *scene, ID *id, int id_ty
}
}
+ Depsgraph *depsgraph = BKE_scene_get_depsgraph(sce, view_layer, true);
+ /* TODO(sergey): Use proper flag for tagging here. */
+ DEG_graph_id_tag_update(pr_main, depsgraph, &sce->id, 0);
+ DEG_relations_tag_update(pr_main);
+ BKE_scene_graph_update_tagged(pr_main->eval_ctx, depsgraph, pr_main, sce, view_layer);
+
return sce;
}
@@ -593,7 +675,9 @@ static bool ed_preview_draw_rect(ScrArea *sa, int split, int first, rcti *rect,
if (re)
RE_AcquiredResultGet32(re, &rres, (unsigned int *)rect_byte, 0);
- glaDrawPixelsSafe(fx, fy, rres.rectx, rres.recty, rres.rectx, GL_RGBA, GL_UNSIGNED_BYTE, rect_byte);
+ IMMDrawPixelsTexState state = immDrawPixelsTexSetup(GPU_SHADER_2D_IMAGE_COLOR);
+ immDrawPixelsTex(&state, fx, fy, rres.rectx, rres.recty, GL_RGBA, GL_UNSIGNED_BYTE, GL_NEAREST, rect_byte,
+ 1.0f, 1.0f, NULL);
MEM_freeN(rect_byte);
@@ -775,7 +859,7 @@ static void shader_preview_render(ShaderPreview *sp, ID *id, int split, int firs
((Camera *)sce->camera->data)->lens *= (float)sp->sizey / (float)sizex;
/* entire cycle for render engine */
- RE_PreviewRender(re, pr_main, sce);
+ RE_PreviewRender(re, pr_main, sce, sp->view_render);
((Camera *)sce->camera->data)->lens = oldlens;
@@ -1022,6 +1106,12 @@ static void icon_preview_startjob(void *customdata, short *stop, short *do_updat
*do_update = true;
}
+ else if (idtype == ID_SCR) {
+ bScreen *screen = (bScreen *)id;
+
+ ED_screen_preview_render(screen, sp->sizex, sp->sizey, sp->pr_rect);
+ *do_update = true;
+ }
else {
/* re-use shader job */
shader_preview_startjob(customdata, stop, do_update);
@@ -1096,6 +1186,7 @@ static void icon_preview_startjob_all_sizes(void *customdata, short *stop, short
/* construct shader preview from image size and previewcustomdata */
sp->scene = ip->scene;
+ sp->view_render = ip->view_render;
sp->owner = ip->owner;
sp->sizex = cur_size->sizex;
sp->sizey = cur_size->sizey;
@@ -1180,6 +1271,7 @@ void ED_preview_icon_render(Main *bmain, Scene *scene, ID *id, unsigned int *rec
ip.bmain = bmain;
ip.scene = scene;
+ ip.view_render = &scene->view_render;
ip.owner = BKE_previewimg_id_ensure(id);
ip.id = id;
@@ -1213,6 +1305,7 @@ void ED_preview_icon_job(const bContext *C, void *owner, ID *id, unsigned int *r
/* customdata for preview thread */
ip->bmain = CTX_data_main(C);
ip->scene = CTX_data_scene(C);
+ ip->view_render = &ip->scene->view_render;
ip->owner = owner;
ip->id = id;
@@ -1240,8 +1333,12 @@ void ED_preview_shader_job(const bContext *C, void *owner, ID *id, ID *parent, M
wmJob *wm_job;
ShaderPreview *sp;
Scene *scene = CTX_data_scene(C);
+ WorkSpace *workspace = CTX_wm_workspace(C);
short id_type = GS(id->name);
- bool use_new_shading = BKE_scene_use_new_shading_nodes(scene);
+
+ /* Use workspace render only for buttons Window, since the other previews are related to the datablock. */
+ ViewRender *view_render = (method == PR_BUTS_RENDER) ? BKE_viewrender_get(scene, workspace) : &scene->view_render;
+ bool use_new_shading = BKE_viewrender_use_new_shading_nodes(view_render);
/* Only texture node preview is supported with Cycles. */
if (use_new_shading && method == PR_NODE_RENDER && id_type != ID_TE) {
@@ -1264,6 +1361,7 @@ void ED_preview_shader_job(const bContext *C, void *owner, ID *id, ID *parent, M
sp->parent = parent;
sp->slot = slot;
sp->bmain = CTX_data_main(C);
+ sp->view_render = view_render;
/* hardcoded preview .blend for cycles/internal, this should be solved
* once with custom preview .blend path for external engines */
diff --git a/source/blender/editors/render/render_shading.c b/source/blender/editors/render/render_shading.c
index 49d74c25633..222e0e20dff 100644
--- a/source/blender/editors/render/render_shading.c
+++ b/source/blender/editors/render/render_shading.c
@@ -50,10 +50,10 @@
#include "BKE_animsys.h"
#include "BKE_context.h"
#include "BKE_curve.h"
-#include "BKE_depsgraph.h"
#include "BKE_font.h"
#include "BKE_global.h"
#include "BKE_image.h"
+#include "BKE_layer.h"
#include "BKE_library.h"
#include "BKE_linestyle.h"
#include "BKE_main.h"
@@ -65,7 +65,8 @@
#include "BKE_world.h"
#include "BKE_editmesh.h"
-
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
#ifdef WITH_FREESTYLE
# include "BKE_freestyle.h"
@@ -83,6 +84,7 @@
#include "ED_mesh.h"
#include "ED_node.h"
#include "ED_render.h"
+#include "ED_scene.h"
#include "ED_screen.h"
#include "RNA_define.h"
@@ -97,6 +99,7 @@
static int material_slot_add_exec(bContext *C, wmOperator *UNUSED(op))
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Object *ob = ED_object_context(C);
if (!ob)
@@ -104,7 +107,7 @@ static int material_slot_add_exec(bContext *C, wmOperator *UNUSED(op))
BKE_object_material_slot_add(ob);
- if (ob->mode & OB_MODE_TEXTURE_PAINT) {
+ if (workspace->object_mode & OB_MODE_TEXTURE_PAINT) {
Scene *scene = CTX_data_scene(C);
BKE_paint_proj_mesh_data_check(scene, ob, NULL, NULL, NULL, NULL);
WM_event_add_notifier(C, NC_SCENE | ND_TOOLSETTINGS, NULL);
@@ -134,6 +137,7 @@ void OBJECT_OT_material_slot_add(wmOperatorType *ot)
static int material_slot_remove_exec(bContext *C, wmOperator *op)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Object *ob = ED_object_context(C);
if (!ob)
@@ -147,13 +151,13 @@ static int material_slot_remove_exec(bContext *C, wmOperator *op)
BKE_object_material_slot_remove(ob);
- if (ob->mode & OB_MODE_TEXTURE_PAINT) {
+ if (workspace->object_mode & OB_MODE_TEXTURE_PAINT) {
Scene *scene = CTX_data_scene(C);
BKE_paint_proj_mesh_data_check(scene, ob, NULL, NULL, NULL, NULL);
WM_event_add_notifier(C, NC_SCENE | ND_TOOLSETTINGS, NULL);
}
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
WM_event_add_notifier(C, NC_OBJECT | ND_OB_SHADING, ob);
WM_event_add_notifier(C, NC_MATERIAL | ND_SHADING_PREVIEW, ob);
@@ -219,7 +223,7 @@ static int material_slot_assign_exec(bContext *C, wmOperator *UNUSED(op))
}
}
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data);
return OPERATOR_FINISHED;
@@ -359,7 +363,7 @@ static int material_slot_copy_exec(bContext *C, wmOperator *UNUSED(op))
if (ob_iter->totcol == ob->totcol) {
ob_iter->actcol = ob->actcol;
- DAG_id_tag_update(&ob_iter->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob_iter->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob_iter);
}
}
@@ -424,7 +428,7 @@ static int material_slot_move_exec(bContext *C, wmOperator *op)
MEM_freeN(slot_remap);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
WM_event_add_notifier(C, NC_OBJECT | ND_DATA, ob);
@@ -623,56 +627,58 @@ void WORLD_OT_new(wmOperatorType *ot)
/********************** render layer operators *********************/
-static int render_layer_add_exec(bContext *C, wmOperator *UNUSED(op))
+static int view_layer_add_exec(bContext *C, wmOperator *UNUSED(op))
{
Scene *scene = CTX_data_scene(C);
- BKE_scene_add_render_layer(scene, NULL);
- scene->r.actlay = BLI_listbase_count(&scene->r.layers) - 1;
+ BKE_view_layer_add(scene, NULL);
+ scene->active_view_layer = BLI_listbase_count(&scene->view_layers) - 1;
- DAG_id_tag_update(&scene->id, 0);
- WM_event_add_notifier(C, NC_SCENE | ND_RENDER_OPTIONS, scene);
+ DEG_id_tag_update(&scene->id, 0);
+ DEG_relations_tag_update(CTX_data_main(C));
+ WM_event_add_notifier(C, NC_SCENE | ND_LAYER, scene);
return OPERATOR_FINISHED;
}
-void SCENE_OT_render_layer_add(wmOperatorType *ot)
+void SCENE_OT_view_layer_add(wmOperatorType *ot)
{
/* identifiers */
- ot->name = "Add Render Layer";
- ot->idname = "SCENE_OT_render_layer_add";
- ot->description = "Add a render layer";
+ ot->name = "Add View Layer";
+ ot->idname = "SCENE_OT_view_layer_add";
+ ot->description = "Add a view layer";
/* api callbacks */
- ot->exec = render_layer_add_exec;
+ ot->exec = view_layer_add_exec;
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_INTERNAL;
}
-static int render_layer_remove_exec(bContext *C, wmOperator *UNUSED(op))
+static int view_layer_remove_exec(bContext *C, wmOperator *UNUSED(op))
{
+ Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
- SceneRenderLayer *rl = BLI_findlink(&scene->r.layers, scene->r.actlay);
+ ViewLayer *view_layer = BKE_view_layer_from_scene_get(scene);
- if (!BKE_scene_remove_render_layer(CTX_data_main(C), scene, rl))
+ if (!ED_scene_view_layer_delete(bmain, scene, view_layer, NULL)) {
return OPERATOR_CANCELLED;
+ }
- DAG_id_tag_update(&scene->id, 0);
WM_event_add_notifier(C, NC_SCENE | ND_RENDER_OPTIONS, scene);
-
+
return OPERATOR_FINISHED;
}
-void SCENE_OT_render_layer_remove(wmOperatorType *ot)
+void SCENE_OT_view_layer_remove(wmOperatorType *ot)
{
/* identifiers */
- ot->name = "Remove Render Layer";
- ot->idname = "SCENE_OT_render_layer_remove";
- ot->description = "Remove the selected render layer";
+ ot->name = "Remove View Layer";
+ ot->idname = "SCENE_OT_view_layer_remove";
+ ot->description = "Remove the selected view layer";
/* api callbacks */
- ot->exec = render_layer_remove_exec;
+ ot->exec = view_layer_remove_exec;
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_INTERNAL;
@@ -769,9 +775,9 @@ static int freestyle_active_module_poll(bContext *C)
static int freestyle_module_add_exec(bContext *C, wmOperator *UNUSED(op))
{
Scene *scene = CTX_data_scene(C);
- SceneRenderLayer *srl = BLI_findlink(&scene->r.layers, scene->r.actlay);
+ ViewLayer *view_layer = BLI_findlink(&scene->view_layers, scene->active_view_layer);
- BKE_freestyle_module_add(&srl->freestyleConfig);
+ BKE_freestyle_module_add(&view_layer->freestyle_config);
WM_event_add_notifier(C, NC_SCENE | ND_RENDER_OPTIONS, scene);
@@ -795,13 +801,13 @@ void SCENE_OT_freestyle_module_add(wmOperatorType *ot)
static int freestyle_module_remove_exec(bContext *C, wmOperator *UNUSED(op))
{
Scene *scene = CTX_data_scene(C);
- SceneRenderLayer *srl = BLI_findlink(&scene->r.layers, scene->r.actlay);
+ ViewLayer *view_layer = BLI_findlink(&scene->view_layers, scene->active_view_layer);
PointerRNA ptr = CTX_data_pointer_get_type(C, "freestyle_module", &RNA_FreestyleModuleSettings);
FreestyleModuleConfig *module = ptr.data;
- BKE_freestyle_module_delete(&srl->freestyleConfig, module);
+ BKE_freestyle_module_delete(&view_layer->freestyle_config, module);
- DAG_id_tag_update(&scene->id, 0);
+ DEG_id_tag_update(&scene->id, 0);
WM_event_add_notifier(C, NC_SCENE | ND_RENDER_OPTIONS, scene);
return OPERATOR_FINISHED;
@@ -825,13 +831,13 @@ void SCENE_OT_freestyle_module_remove(wmOperatorType *ot)
static int freestyle_module_move_exec(bContext *C, wmOperator *op)
{
Scene *scene = CTX_data_scene(C);
- SceneRenderLayer *srl = BLI_findlink(&scene->r.layers, scene->r.actlay);
+ ViewLayer *view_layer = BLI_findlink(&scene->view_layers, scene->active_view_layer);
PointerRNA ptr = CTX_data_pointer_get_type(C, "freestyle_module", &RNA_FreestyleModuleSettings);
FreestyleModuleConfig *module = ptr.data;
int dir = RNA_enum_get(op->ptr, "direction");
- if (BKE_freestyle_module_move(&srl->freestyleConfig, module, dir)) {
- DAG_id_tag_update(&scene->id, 0);
+ if (BKE_freestyle_module_move(&view_layer->freestyle_config, module, dir)) {
+ DEG_id_tag_update(&scene->id, 0);
WM_event_add_notifier(C, NC_SCENE | ND_RENDER_OPTIONS, scene);
}
@@ -867,11 +873,11 @@ static int freestyle_lineset_add_exec(bContext *C, wmOperator *UNUSED(op))
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
- SceneRenderLayer *srl = BLI_findlink(&scene->r.layers, scene->r.actlay);
+ ViewLayer *view_layer = BLI_findlink(&scene->view_layers, scene->active_view_layer);
- BKE_freestyle_lineset_add(bmain, &srl->freestyleConfig, NULL);
+ BKE_freestyle_lineset_add(bmain, &view_layer->freestyle_config, NULL);
- DAG_id_tag_update(&scene->id, 0);
+ DEG_id_tag_update(&scene->id, 0);
WM_event_add_notifier(C, NC_SCENE | ND_RENDER_OPTIONS, scene);
return OPERATOR_FINISHED;
@@ -894,21 +900,21 @@ void SCENE_OT_freestyle_lineset_add(wmOperatorType *ot)
static int freestyle_active_lineset_poll(bContext *C)
{
Scene *scene = CTX_data_scene(C);
- SceneRenderLayer *srl = BLI_findlink(&scene->r.layers, scene->r.actlay);
+ ViewLayer *view_layer = BLI_findlink(&scene->view_layers, scene->active_view_layer);
- if (!srl) {
+ if (!view_layer) {
return false;
}
- return BKE_freestyle_lineset_get_active(&srl->freestyleConfig) != NULL;
+ return BKE_freestyle_lineset_get_active(&view_layer->freestyle_config) != NULL;
}
static int freestyle_lineset_copy_exec(bContext *C, wmOperator *UNUSED(op))
{
Scene *scene = CTX_data_scene(C);
- SceneRenderLayer *srl = BLI_findlink(&scene->r.layers, scene->r.actlay);
+ ViewLayer *view_layer = BLI_findlink(&scene->view_layers, scene->active_view_layer);
- FRS_copy_active_lineset(&srl->freestyleConfig);
+ FRS_copy_active_lineset(&view_layer->freestyle_config);
return OPERATOR_FINISHED;
}
@@ -931,11 +937,11 @@ void SCENE_OT_freestyle_lineset_copy(wmOperatorType *ot)
static int freestyle_lineset_paste_exec(bContext *C, wmOperator *UNUSED(op))
{
Scene *scene = CTX_data_scene(C);
- SceneRenderLayer *srl = BLI_findlink(&scene->r.layers, scene->r.actlay);
+ ViewLayer *view_layer = BLI_findlink(&scene->view_layers, scene->active_view_layer);
- FRS_paste_active_lineset(&srl->freestyleConfig);
+ FRS_paste_active_lineset(&view_layer->freestyle_config);
- DAG_id_tag_update(&scene->id, 0);
+ DEG_id_tag_update(&scene->id, 0);
WM_event_add_notifier(C, NC_SCENE | ND_RENDER_OPTIONS, scene);
return OPERATOR_FINISHED;
@@ -959,11 +965,11 @@ void SCENE_OT_freestyle_lineset_paste(wmOperatorType *ot)
static int freestyle_lineset_remove_exec(bContext *C, wmOperator *UNUSED(op))
{
Scene *scene = CTX_data_scene(C);
- SceneRenderLayer *srl = BLI_findlink(&scene->r.layers, scene->r.actlay);
+ ViewLayer *view_layer = BLI_findlink(&scene->view_layers, scene->active_view_layer);
- FRS_delete_active_lineset(&srl->freestyleConfig);
+ FRS_delete_active_lineset(&view_layer->freestyle_config);
- DAG_id_tag_update(&scene->id, 0);
+ DEG_id_tag_update(&scene->id, 0);
WM_event_add_notifier(C, NC_SCENE | ND_RENDER_OPTIONS, scene);
return OPERATOR_FINISHED;
@@ -987,11 +993,11 @@ void SCENE_OT_freestyle_lineset_remove(wmOperatorType *ot)
static int freestyle_lineset_move_exec(bContext *C, wmOperator *op)
{
Scene *scene = CTX_data_scene(C);
- SceneRenderLayer *srl = BLI_findlink(&scene->r.layers, scene->r.actlay);
+ ViewLayer *view_layer = BLI_findlink(&scene->view_layers, scene->active_view_layer);
int dir = RNA_enum_get(op->ptr, "direction");
- if (FRS_move_active_lineset(&srl->freestyleConfig, dir)) {
- DAG_id_tag_update(&scene->id, 0);
+ if (FRS_move_active_lineset(&view_layer->freestyle_config, dir)) {
+ DEG_id_tag_update(&scene->id, 0);
WM_event_add_notifier(C, NC_SCENE | ND_RENDER_OPTIONS, scene);
}
@@ -1027,8 +1033,8 @@ static int freestyle_linestyle_new_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
- SceneRenderLayer *srl = BLI_findlink(&scene->r.layers, scene->r.actlay);
- FreestyleLineSet *lineset = BKE_freestyle_lineset_get_active(&srl->freestyleConfig);
+ ViewLayer *view_layer = BLI_findlink(&scene->view_layers, scene->active_view_layer);
+ FreestyleLineSet *lineset = BKE_freestyle_lineset_get_active(&view_layer->freestyle_config);
if (!lineset) {
BKE_report(op->reports, RPT_ERROR, "No active lineset to add a new line style to");
@@ -1041,7 +1047,7 @@ static int freestyle_linestyle_new_exec(bContext *C, wmOperator *op)
else {
lineset->linestyle = BKE_linestyle_new(bmain, "LineStyle");
}
- DAG_id_tag_update(&lineset->linestyle->id, 0);
+ DEG_id_tag_update(&lineset->linestyle->id, 0);
WM_event_add_notifier(C, NC_LINESTYLE, lineset->linestyle);
return OPERATOR_FINISHED;
@@ -1065,8 +1071,8 @@ void SCENE_OT_freestyle_linestyle_new(wmOperatorType *ot)
static int freestyle_color_modifier_add_exec(bContext *C, wmOperator *op)
{
Scene *scene = CTX_data_scene(C);
- SceneRenderLayer *srl = BLI_findlink(&scene->r.layers, scene->r.actlay);
- FreestyleLineSet *lineset = BKE_freestyle_lineset_get_active(&srl->freestyleConfig);
+ ViewLayer *view_layer = BLI_findlink(&scene->view_layers, scene->active_view_layer);
+ FreestyleLineSet *lineset = BKE_freestyle_lineset_get_active(&view_layer->freestyle_config);
int type = RNA_enum_get(op->ptr, "type");
if (!freestyle_linestyle_check_report(lineset, op->reports)) {
@@ -1077,7 +1083,7 @@ static int freestyle_color_modifier_add_exec(bContext *C, wmOperator *op)
BKE_report(op->reports, RPT_ERROR, "Unknown line color modifier type");
return OPERATOR_CANCELLED;
}
- DAG_id_tag_update(&lineset->linestyle->id, 0);
+ DEG_id_tag_update(&lineset->linestyle->id, 0);
WM_event_add_notifier(C, NC_LINESTYLE, lineset->linestyle);
return OPERATOR_FINISHED;
@@ -1105,8 +1111,8 @@ void SCENE_OT_freestyle_color_modifier_add(wmOperatorType *ot)
static int freestyle_alpha_modifier_add_exec(bContext *C, wmOperator *op)
{
Scene *scene = CTX_data_scene(C);
- SceneRenderLayer *srl = BLI_findlink(&scene->r.layers, scene->r.actlay);
- FreestyleLineSet *lineset = BKE_freestyle_lineset_get_active(&srl->freestyleConfig);
+ ViewLayer *view_layer = BLI_findlink(&scene->view_layers, scene->active_view_layer);
+ FreestyleLineSet *lineset = BKE_freestyle_lineset_get_active(&view_layer->freestyle_config);
int type = RNA_enum_get(op->ptr, "type");
if (!freestyle_linestyle_check_report(lineset, op->reports)) {
@@ -1117,7 +1123,7 @@ static int freestyle_alpha_modifier_add_exec(bContext *C, wmOperator *op)
BKE_report(op->reports, RPT_ERROR, "Unknown alpha transparency modifier type");
return OPERATOR_CANCELLED;
}
- DAG_id_tag_update(&lineset->linestyle->id, 0);
+ DEG_id_tag_update(&lineset->linestyle->id, 0);
WM_event_add_notifier(C, NC_LINESTYLE, lineset->linestyle);
return OPERATOR_FINISHED;
@@ -1145,8 +1151,8 @@ void SCENE_OT_freestyle_alpha_modifier_add(wmOperatorType *ot)
static int freestyle_thickness_modifier_add_exec(bContext *C, wmOperator *op)
{
Scene *scene = CTX_data_scene(C);
- SceneRenderLayer *srl = BLI_findlink(&scene->r.layers, scene->r.actlay);
- FreestyleLineSet *lineset = BKE_freestyle_lineset_get_active(&srl->freestyleConfig);
+ ViewLayer *view_layer = BLI_findlink(&scene->view_layers, scene->active_view_layer);
+ FreestyleLineSet *lineset = BKE_freestyle_lineset_get_active(&view_layer->freestyle_config);
int type = RNA_enum_get(op->ptr, "type");
if (!freestyle_linestyle_check_report(lineset, op->reports)) {
@@ -1157,7 +1163,7 @@ static int freestyle_thickness_modifier_add_exec(bContext *C, wmOperator *op)
BKE_report(op->reports, RPT_ERROR, "Unknown line thickness modifier type");
return OPERATOR_CANCELLED;
}
- DAG_id_tag_update(&lineset->linestyle->id, 0);
+ DEG_id_tag_update(&lineset->linestyle->id, 0);
WM_event_add_notifier(C, NC_LINESTYLE, lineset->linestyle);
return OPERATOR_FINISHED;
@@ -1185,8 +1191,8 @@ void SCENE_OT_freestyle_thickness_modifier_add(wmOperatorType *ot)
static int freestyle_geometry_modifier_add_exec(bContext *C, wmOperator *op)
{
Scene *scene = CTX_data_scene(C);
- SceneRenderLayer *srl = BLI_findlink(&scene->r.layers, scene->r.actlay);
- FreestyleLineSet *lineset = BKE_freestyle_lineset_get_active(&srl->freestyleConfig);
+ ViewLayer *view_layer = BLI_findlink(&scene->view_layers, scene->active_view_layer);
+ FreestyleLineSet *lineset = BKE_freestyle_lineset_get_active(&view_layer->freestyle_config);
int type = RNA_enum_get(op->ptr, "type");
if (!freestyle_linestyle_check_report(lineset, op->reports)) {
@@ -1197,7 +1203,7 @@ static int freestyle_geometry_modifier_add_exec(bContext *C, wmOperator *op)
BKE_report(op->reports, RPT_ERROR, "Unknown stroke geometry modifier type");
return OPERATOR_CANCELLED;
}
- DAG_id_tag_update(&lineset->linestyle->id, 0);
+ DEG_id_tag_update(&lineset->linestyle->id, 0);
WM_event_add_notifier(C, NC_LINESTYLE, lineset->linestyle);
return OPERATOR_FINISHED;
@@ -1238,8 +1244,8 @@ static int freestyle_get_modifier_type(PointerRNA *ptr)
static int freestyle_modifier_remove_exec(bContext *C, wmOperator *op)
{
Scene *scene = CTX_data_scene(C);
- SceneRenderLayer *srl = BLI_findlink(&scene->r.layers, scene->r.actlay);
- FreestyleLineSet *lineset = BKE_freestyle_lineset_get_active(&srl->freestyleConfig);
+ ViewLayer *view_layer = BLI_findlink(&scene->view_layers, scene->active_view_layer);
+ FreestyleLineSet *lineset = BKE_freestyle_lineset_get_active(&view_layer->freestyle_config);
PointerRNA ptr = CTX_data_pointer_get_type(C, "modifier", &RNA_LineStyleModifier);
LineStyleModifier *modifier = ptr.data;
@@ -1264,7 +1270,7 @@ static int freestyle_modifier_remove_exec(bContext *C, wmOperator *op)
BKE_report(op->reports, RPT_ERROR, "The object the data pointer refers to is not a valid modifier");
return OPERATOR_CANCELLED;
}
- DAG_id_tag_update(&lineset->linestyle->id, 0);
+ DEG_id_tag_update(&lineset->linestyle->id, 0);
WM_event_add_notifier(C, NC_LINESTYLE, lineset->linestyle);
return OPERATOR_FINISHED;
@@ -1288,8 +1294,8 @@ void SCENE_OT_freestyle_modifier_remove(wmOperatorType *ot)
static int freestyle_modifier_copy_exec(bContext *C, wmOperator *op)
{
Scene *scene = CTX_data_scene(C);
- SceneRenderLayer *srl = BLI_findlink(&scene->r.layers, scene->r.actlay);
- FreestyleLineSet *lineset = BKE_freestyle_lineset_get_active(&srl->freestyleConfig);
+ ViewLayer *view_layer = BLI_findlink(&scene->view_layers, scene->active_view_layer);
+ FreestyleLineSet *lineset = BKE_freestyle_lineset_get_active(&view_layer->freestyle_config);
PointerRNA ptr = CTX_data_pointer_get_type(C, "modifier", &RNA_LineStyleModifier);
LineStyleModifier *modifier = ptr.data;
@@ -1314,7 +1320,7 @@ static int freestyle_modifier_copy_exec(bContext *C, wmOperator *op)
BKE_report(op->reports, RPT_ERROR, "The object the data pointer refers to is not a valid modifier");
return OPERATOR_CANCELLED;
}
- DAG_id_tag_update(&lineset->linestyle->id, 0);
+ DEG_id_tag_update(&lineset->linestyle->id, 0);
WM_event_add_notifier(C, NC_LINESTYLE, lineset->linestyle);
return OPERATOR_FINISHED;
@@ -1338,8 +1344,8 @@ void SCENE_OT_freestyle_modifier_copy(wmOperatorType *ot)
static int freestyle_modifier_move_exec(bContext *C, wmOperator *op)
{
Scene *scene = CTX_data_scene(C);
- SceneRenderLayer *srl = BLI_findlink(&scene->r.layers, scene->r.actlay);
- FreestyleLineSet *lineset = BKE_freestyle_lineset_get_active(&srl->freestyleConfig);
+ ViewLayer *view_layer = BLI_findlink(&scene->view_layers, scene->active_view_layer);
+ FreestyleLineSet *lineset = BKE_freestyle_lineset_get_active(&view_layer->freestyle_config);
PointerRNA ptr = CTX_data_pointer_get_type(C, "modifier", &RNA_LineStyleModifier);
LineStyleModifier *modifier = ptr.data;
int dir = RNA_enum_get(op->ptr, "direction");
@@ -1368,7 +1374,7 @@ static int freestyle_modifier_move_exec(bContext *C, wmOperator *op)
}
if (changed) {
- DAG_id_tag_update(&lineset->linestyle->id, 0);
+ DEG_id_tag_update(&lineset->linestyle->id, 0);
WM_event_add_notifier(C, NC_LINESTYLE, lineset->linestyle);
}
@@ -1489,7 +1495,7 @@ static int texture_slot_move_exec(bContext *C, wmOperator *op)
}
}
- DAG_id_tag_update(id, 0);
+ DEG_id_tag_update(id, 0);
WM_event_add_notifier(C, NC_TEXTURE, CTX_data_scene(C));
}
diff --git a/source/blender/editors/render/render_update.c b/source/blender/editors/render/render_update.c
index 4e02ff77a31..92f9dd9ee26 100644
--- a/source/blender/editors/render/render_update.c
+++ b/source/blender/editors/render/render_update.c
@@ -38,9 +38,12 @@
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
#include "DNA_view3d_types.h"
+#include "DNA_workspace_types.h"
#include "DNA_world_types.h"
#include "DNA_windowmanager_types.h"
+#include "DRW_engine.h"
+
#include "BLI_listbase.h"
#include "BLI_threads.h"
#include "BLI_utildefines.h"
@@ -48,12 +51,15 @@
#include "BKE_context.h"
#include "BKE_DerivedMesh.h"
#include "BKE_icons.h"
+#include "BKE_layer.h"
#include "BKE_main.h"
#include "BKE_material.h"
#include "BKE_node.h"
#include "BKE_paint.h"
#include "BKE_scene.h"
+#include "BKE_workspace.h"
+#include "GPU_lamp.h"
#include "GPU_material.h"
#include "GPU_buffers.h"
@@ -64,16 +70,23 @@
#include "ED_render.h"
#include "ED_view3d.h"
+#include "DEG_depsgraph.h"
+
+#include "WM_api.h"
+
#include "render_intern.h" // own include
extern Material defmaterial;
/***************************** Render Engines ********************************/
-void ED_render_scene_update(Main *bmain, Scene *scene, int updated)
+void ED_render_scene_update(const DEGEditorUpdateContext *update_ctx, int updated)
{
/* viewport rendering update on data changes, happens after depsgraph
* updates if there was any change. context is set to the 3d view */
+ Main *bmain = update_ctx->bmain;
+ Scene *scene = update_ctx->scene;
+ ViewLayer *view_layer = update_ctx->view_layer;
bContext *C;
wmWindowManager *wm;
wmWindow *win;
@@ -102,26 +115,24 @@ void ED_render_scene_update(Main *bmain, Scene *scene, int updated)
wm = bmain->wm.first;
for (win = wm->windows.first; win; win = win->next) {
- bScreen *sc = win->screen;
+ bScreen *sc = WM_window_get_active_screen(win);
ScrArea *sa;
ARegion *ar;
CTX_wm_window_set(C, win);
-
+ WorkSpace *workspace = BKE_workspace_active_get(win->workspace_hook);
+ ViewRender *view_render = BKE_viewrender_get(win->scene, workspace);
+
for (sa = sc->areabase.first; sa; sa = sa->next) {
if (sa->spacetype != SPACE_VIEW3D)
continue;
for (ar = sa->regionbase.first; ar; ar = ar->next) {
- RegionView3D *rv3d;
- RenderEngine *engine;
-
- if (ar->regiontype != RGN_TYPE_WINDOW)
+ if (ar->regiontype != RGN_TYPE_WINDOW) {
continue;
-
- rv3d = ar->regiondata;
- engine = rv3d->render_engine;
-
+ }
+ RegionView3D *rv3d = ar->regiondata;
+ RenderEngine *engine = rv3d->render_engine;
/* call update if the scene changed, or if the render engine
* tagged itself for update (e.g. because it was busy at the
* time of the last update) */
@@ -133,6 +144,24 @@ void ED_render_scene_update(Main *bmain, Scene *scene, int updated)
engine->flag &= ~RE_ENGINE_DO_UPDATE;
engine->type->view_update(engine, C);
+
+ }
+ else {
+ RenderEngineType *engine_type = RE_engines_find(view_render->engine_id);
+ if ((engine_type->flag & RE_USE_LEGACY_PIPELINE) == 0) {
+ if (updated) {
+ DRW_notify_view_update(
+ (&(DRWUpdateContext){
+ .bmain = bmain,
+ .depsgraph = update_ctx->depsgraph,
+ .scene = scene,
+ .view_layer = view_layer,
+ .ar = ar,
+ .v3d = (View3D *)sa->spacedata.first,
+ .engine_type = engine_type
+ }));
+ }
+ }
}
}
}
@@ -143,23 +172,6 @@ void ED_render_scene_update(Main *bmain, Scene *scene, int updated)
recursive_check = false;
}
-void ED_render_scene_update_pre(Main *bmain, Scene *scene, bool time)
-{
- /* Blender internal might access to the data which is gonna to be freed
- * by the scene update functions. This applies for example to simulation
- * data like smoke and fire.
- */
- if (time && !BKE_scene_use_new_shading_nodes(scene)) {
- bScreen *sc;
- ScrArea *sa;
- for (sc = bmain->screen.first; sc; sc = sc->id.next) {
- for (sa = sc->areabase.first; sa; sa = sa->next) {
- ED_render_engine_area_exit(bmain, sa);
- }
- }
- }
-}
-
void ED_render_engine_area_exit(Main *bmain, ScrArea *sa)
{
/* clear all render engines in this area */
@@ -179,18 +191,23 @@ void ED_render_engine_area_exit(Main *bmain, ScrArea *sa)
void ED_render_engine_changed(Main *bmain)
{
/* on changing the render engine type, clear all running render engines */
- bScreen *sc;
- ScrArea *sa;
- Scene *scene;
-
- for (sc = bmain->screen.first; sc; sc = sc->id.next)
- for (sa = sc->areabase.first; sa; sa = sa->next)
+ for (bScreen *sc = bmain->screen.first; sc; sc = sc->id.next) {
+ for (ScrArea *sa = sc->areabase.first; sa; sa = sa->next) {
ED_render_engine_area_exit(bmain, sa);
-
+ }
+ }
RE_FreePersistentData();
-
- for (scene = bmain->scene.first; scene; scene = scene->id.next) {
- ED_render_id_flush_update(bmain, &scene->id);
+ /* Inform all render engines and draw managers. */
+ DEGEditorUpdateContext update_ctx = {NULL};
+ update_ctx.bmain = bmain;
+ for (Scene *scene = bmain->scene.first; scene; scene = scene->id.next) {
+ update_ctx.scene = scene;
+ BLI_LISTBASE_FOREACH(ViewLayer *, view_layer, &scene->view_layers) {
+ /* TDODO(sergey): Iterate over depsgraphs instead? */
+ update_ctx.depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true);
+ update_ctx.view_layer = view_layer;
+ ED_render_id_flush_update(&update_ctx, &scene->id);
+ }
if (scene->nodetree) {
ntreeCompositUpdateRLayers(scene->nodetree);
}
@@ -198,7 +215,7 @@ void ED_render_engine_changed(Main *bmain)
}
/***************************** Updates ***********************************
- * ED_render_id_flush_update gets called from DAG_id_tag_update, to do *
+ * ED_render_id_flush_update gets called from DEG_id_tag_update, to do *
* editor level updates when the ID changes. when these ID blocks are in *
* the dependency graph, we can get rid of the manual dependency checks */
@@ -295,8 +312,11 @@ static void material_changed(Main *bmain, Material *ma)
BKE_icon_changed(BKE_icon_id_ensure(&ma->id));
/* glsl */
- if (ma->gpumaterial.first)
- GPU_material_free(&ma->gpumaterial);
+ if (ma->id.recalc & ID_RECALC) {
+ if (!BLI_listbase_is_empty(&ma->gpumaterial)) {
+ GPU_material_free(&ma->gpumaterial);
+ }
+ }
/* find node materials using this */
for (parent = bmain->mat.first; parent; parent = parent->id.next) {
@@ -344,7 +364,6 @@ static void material_changed(Main *bmain, Material *ma)
static void lamp_changed(Main *bmain, Lamp *la)
{
Object *ob;
- Material *ma;
/* icons */
BKE_icon_changed(BKE_icon_id_ensure(&la->id));
@@ -354,10 +373,6 @@ static void lamp_changed(Main *bmain, Lamp *la)
if (ob->data == la && ob->gpulamp.first)
GPU_lamp_free(ob);
- for (ma = bmain->mat.first; ma; ma = ma->id.next)
- if (ma->gpumaterial.first)
- GPU_material_free(&ma->gpumaterial);
-
if (defmaterial.gpumaterial.first)
GPU_material_free(&defmaterial.gpumaterial);
}
@@ -378,6 +393,7 @@ static void texture_changed(Main *bmain, Tex *tex)
Lamp *la;
World *wo;
Scene *scene;
+ ViewLayer *view_layer;
Object *ob;
bNode *node;
bool texture_draw = false;
@@ -385,9 +401,14 @@ static void texture_changed(Main *bmain, Tex *tex)
/* icons */
BKE_icon_changed(BKE_icon_id_ensure(&tex->id));
+ const eObjectMode object_mode = WM_windows_object_mode_get(bmain->wm.first);
+
/* paint overlays */
- for (scene = bmain->scene.first; scene; scene = scene->id.next)
- BKE_paint_invalidate_overlay_tex(scene, tex);
+ for (scene = bmain->scene.first; scene; scene = scene->id.next) {
+ for (view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
+ BKE_paint_invalidate_overlay_tex(scene, view_layer, tex, object_mode);
+ }
+ }
/* find materials */
for (ma = bmain->mat.first; ma; ma = ma->id.next) {
@@ -468,23 +489,23 @@ static void texture_changed(Main *bmain, Tex *tex)
}
}
-static void world_changed(Main *bmain, World *wo)
+static void world_changed(Main *UNUSED(bmain), World *wo)
{
- Material *ma;
-
/* icons */
BKE_icon_changed(BKE_icon_id_ensure(&wo->id));
-
- /* glsl */
- for (ma = bmain->mat.first; ma; ma = ma->id.next)
- if (ma->gpumaterial.first)
- GPU_material_free(&ma->gpumaterial);
- if (defmaterial.gpumaterial.first)
- GPU_material_free(&defmaterial.gpumaterial);
-
- if (wo->gpumaterial.first)
- GPU_material_free(&wo->gpumaterial);
+ /* XXX temporary flag waiting for depsgraph proper tagging */
+ wo->update_flag = 1;
+
+ /* glsl */
+ if (wo->id.recalc & ID_RECALC) {
+ if (!BLI_listbase_is_empty(&defmaterial.gpumaterial)) {
+ GPU_material_free(&defmaterial.gpumaterial);
+ }
+ if (!BLI_listbase_is_empty(&wo->gpumaterial)) {
+ GPU_material_free(&wo->gpumaterial);
+ }
+ }
}
static void image_changed(Main *bmain, Image *ima)
@@ -503,41 +524,37 @@ static void image_changed(Main *bmain, Image *ima)
static void scene_changed(Main *bmain, Scene *scene)
{
Object *ob;
- Material *ma;
- World *wo;
/* glsl */
- for (ob = bmain->object.first; ob; ob = ob->id.next) {
- if (ob->gpulamp.first)
- GPU_lamp_free(ob);
-
- if (ob->mode & OB_MODE_TEXTURE_PAINT) {
+ bool has_texture_mode = false;
+ wmWindowManager *wm = bmain->wm.first;
+ for (wmWindow *win = wm->windows.first; win; win = win->next) {
+ WorkSpace *workspace = WM_window_get_active_workspace(win);
+ if (workspace->object_mode & OB_MODE_TEXTURE_PAINT) {
+ has_texture_mode = true;
+ break;
+ }
+ }
+
+ if (has_texture_mode) {
+ for (ob = bmain->object.first; ob; ob = ob->id.next) {
BKE_texpaint_slots_refresh_object(scene, ob);
BKE_paint_proj_mesh_data_check(scene, ob, NULL, NULL, NULL, NULL);
GPU_drawobject_free(ob->derivedFinal);
}
}
-
- for (ma = bmain->mat.first; ma; ma = ma->id.next)
- if (ma->gpumaterial.first)
- GPU_material_free(&ma->gpumaterial);
-
- for (wo = bmain->world.first; wo; wo = wo->id.next)
- if (wo->gpumaterial.first)
- GPU_material_free(&wo->gpumaterial);
-
- if (defmaterial.gpumaterial.first)
- GPU_material_free(&defmaterial.gpumaterial);
}
-void ED_render_id_flush_update(Main *bmain, ID *id)
+void ED_render_id_flush_update(const DEGEditorUpdateContext *update_ctx, ID *id)
{
/* this can be called from render or baking thread when a python script makes
* changes, in that case we don't want to do any editor updates, and making
* GPU changes is not possible because OpenGL only works in the main thread */
- if (!BLI_thread_is_main())
+ if (!BLI_thread_is_main()) {
return;
-
+ }
+ Main *bmain = update_ctx->bmain;
+ /* Internal ID update handlers. */
switch (GS(id->name)) {
case ID_MA:
material_changed(bmain, (Material *)id);
@@ -553,8 +570,10 @@ void ED_render_id_flush_update(Main *bmain, ID *id)
lamp_changed(bmain, (Lamp *)id);
break;
case ID_IM:
+ {
image_changed(bmain, (Image *)id);
break;
+ }
case ID_SCE:
scene_changed(bmain, (Scene *)id);
render_engine_flag_changed(bmain, RE_ENGINE_UPDATE_OTHER);
@@ -563,7 +582,6 @@ void ED_render_id_flush_update(Main *bmain, ID *id)
render_engine_flag_changed(bmain, RE_ENGINE_UPDATE_OTHER);
break;
}
-
}
@@ -572,6 +590,6 @@ void ED_render_internal_init(void)
RenderEngineType *ret = RE_engines_find(RE_engine_id_BLENDER_RENDER);
ret->view_update = render_view3d_update;
- ret->view_draw = render_view3d_draw;
+ ret->render_to_view = render_view3d_draw;
}
diff --git a/source/blender/editors/render/render_view.c b/source/blender/editors/render/render_view.c
index c4a9af79ec2..e4bae9d78ea 100644
--- a/source/blender/editors/render/render_view.c
+++ b/source/blender/editors/render/render_view.c
@@ -90,8 +90,10 @@ static ScrArea *find_area_showing_r_result(bContext *C, Scene *scene, wmWindow *
/* find an imagewindow showing render result */
for (*win = wm->windows.first; *win; *win = (*win)->next) {
- if ((*win)->screen->scene == scene) {
- for (sa = (*win)->screen->areabase.first; sa; sa = sa->next) {
+ if (WM_window_get_active_scene(*win) == scene) {
+ const bScreen *screen = WM_window_get_active_screen(*win);
+
+ for (sa = screen->areabase.first; sa; sa = sa->next) {
if (sa->spacetype == SPACE_IMAGE) {
sima = sa->spacedata.first;
if (sima->image && sima->image->type == IMA_TYPE_R_RESULT)
@@ -246,7 +248,7 @@ static int render_view_cancel_exec(bContext *C, wmOperator *UNUSED(op))
}
/* test if we have a temp screen in front */
- if (win->screen->temp) {
+ if (WM_window_is_temp_screen(win)) {
wm_window_lower(win);
return OPERATOR_FINISHED;
}
@@ -292,7 +294,7 @@ static int render_view_show_invoke(bContext *C, wmOperator *op, const wmEvent *e
wmWindow *wincur = CTX_wm_window(C);
/* test if we have currently a temp screen active */
- if (wincur->screen->temp) {
+ if (WM_window_is_temp_screen(wincur)) {
wm_window_lower(wincur);
}
else {
@@ -301,8 +303,9 @@ static int render_view_show_invoke(bContext *C, wmOperator *op, const wmEvent *e
/* is there another window on current scene showing result? */
for (win = CTX_wm_manager(C)->windows.first; win; win = win->next) {
- bScreen *sc = win->screen;
- if ((sc->temp && ((ScrArea *)sc->areabase.first)->spacetype == SPACE_IMAGE) ||
+ const bScreen *sc = WM_window_get_active_screen(win);
+
+ if ((WM_window_is_temp_screen(win) && ((ScrArea *)sc->areabase.first)->spacetype == SPACE_IMAGE) ||
(win == winshow && winshow != wincur))
{
wm_window_raise(win);
diff --git a/source/blender/editors/scene/CMakeLists.txt b/source/blender/editors/scene/CMakeLists.txt
new file mode 100644
index 00000000000..9fbebbc58cc
--- /dev/null
+++ b/source/blender/editors/scene/CMakeLists.txt
@@ -0,0 +1,44 @@
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Contributor(s): Jacques Beaurain.
+#
+# ***** END GPL LICENSE BLOCK *****
+
+set(INC
+ ../include
+ ../../blenkernel
+ ../../blenlib
+ ../../blentranslation
+ ../../depsgraph
+ ../../makesdna
+ ../../makesrna
+ ../../windowmanager
+)
+
+set(INC_SYS
+
+)
+
+set(SRC
+ scene_edit.c
+)
+
+if(WITH_INTERNATIONAL)
+ add_definitions(-DWITH_INTERNATIONAL)
+endif()
+
+blender_add_lib(bf_editor_scene "${SRC}" "${INC}" "${INC_SYS}")
diff --git a/source/blender/editors/scene/scene_edit.c b/source/blender/editors/scene/scene_edit.c
new file mode 100644
index 00000000000..d0077df73e4
--- /dev/null
+++ b/source/blender/editors/scene/scene_edit.c
@@ -0,0 +1,280 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/editors/scene/scene_edit.c
+ * \ingroup edscene
+ */
+
+#include <stdio.h>
+
+#include "BLI_compiler_attrs.h"
+#include "BLI_listbase.h"
+
+#include "BKE_context.h"
+#include "BKE_global.h"
+#include "BKE_layer.h"
+#include "BKE_library_remap.h"
+#include "BKE_main.h"
+#include "BKE_node.h"
+#include "BKE_report.h"
+#include "BKE_scene.h"
+#include "BKE_workspace.h"
+
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
+#include "BLT_translation.h"
+
+#include "DNA_workspace_types.h"
+
+#include "ED_object.h"
+#include "ED_render.h"
+#include "ED_scene.h"
+#include "ED_screen.h"
+#include "ED_util.h"
+
+#include "RNA_access.h"
+#include "RNA_define.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+
+Scene *ED_scene_add(Main *bmain, bContext *C, wmWindow *win, eSceneCopyMethod method)
+{
+ Scene *scene_new;
+
+ if (method == SCE_COPY_NEW) {
+ scene_new = BKE_scene_add(bmain, DATA_("Scene"));
+ }
+ else { /* different kinds of copying */
+ Scene *scene_old = WM_window_get_active_scene(win);
+
+ scene_new = BKE_scene_copy(bmain, scene_old, method);
+
+ /* these can't be handled in blenkernel currently, so do them here */
+ if (method == SCE_COPY_LINK_DATA) {
+ ED_object_single_users(bmain, scene_new, false, true);
+ }
+ else if (method == SCE_COPY_FULL) {
+ ED_editors_flush_edits(C, false);
+ ED_object_single_users(bmain, scene_new, true, true);
+ }
+ }
+
+ WM_window_change_active_scene(bmain, C, win, scene_new);
+
+ WM_event_add_notifier(C, NC_SCENE | ND_SCENEBROWSE, scene_new);
+
+ return scene_new;
+}
+
+/**
+ * \note Only call outside of area/region loops
+ * \return true if successful
+ */
+bool ED_scene_delete(bContext *C, Main *bmain, wmWindow *win, Scene *scene)
+{
+ Scene *scene_new;
+
+ if (scene->id.prev)
+ scene_new = scene->id.prev;
+ else if (scene->id.next)
+ scene_new = scene->id.next;
+ else
+ return false;
+
+ WM_window_change_active_scene(bmain, C, win, scene_new);
+
+ BKE_libblock_remap(bmain, scene, scene_new, ID_REMAP_SKIP_INDIRECT_USAGE | ID_REMAP_SKIP_NEVER_NULL_USAGE);
+
+ id_us_clear_real(&scene->id);
+ if (scene->id.us == 0) {
+ BKE_libblock_free(bmain, scene);
+ }
+
+ return true;
+}
+
+void ED_scene_exit(bContext *C)
+{
+ ED_object_editmode_exit(C, EM_FREEDATA | EM_DO_UNDO);
+}
+
+static ViewLayer *scene_change_get_new_view_layer(const WorkSpace *workspace, const Scene *scene_new)
+{
+ ViewLayer *layer_new = BKE_workspace_view_layer_get(workspace, scene_new);
+ return layer_new ? layer_new : BKE_view_layer_from_scene_get(scene_new);
+}
+
+void ED_scene_changed_update(Main *bmain, bContext *C, Scene *scene_new, const bScreen *active_screen)
+{
+ WorkSpace *workspace = CTX_wm_workspace(C);
+ ViewLayer *layer_new = scene_change_get_new_view_layer(workspace, scene_new);
+ Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene_new, layer_new, true);
+
+ CTX_data_scene_set(C, scene_new);
+ BKE_workspace_view_layer_set(workspace, layer_new, scene_new);
+ BKE_scene_set_background(bmain, scene_new);
+ DEG_graph_relations_update(depsgraph, bmain, scene_new, layer_new);
+ DEG_on_visible_update(bmain, false);
+
+ ED_screen_update_after_scene_change(active_screen, scene_new, layer_new);
+ ED_render_engine_changed(bmain);
+ ED_update_for_newframe(bmain, scene_new, layer_new, depsgraph);
+
+ /* complete redraw */
+ WM_event_add_notifier(C, NC_WINDOW, NULL);
+}
+
+static bool view_layer_remove_poll(
+ const Scene *scene, const ViewLayer *layer)
+{
+ const int act = BLI_findindex(&scene->view_layers, layer);
+
+ if (act == -1) {
+ return false;
+ }
+ else if ((scene->view_layers.first == scene->view_layers.last) &&
+ (scene->view_layers.first == layer))
+ {
+ /* ensure 1 layer is kept */
+ return false;
+ }
+
+ return true;
+}
+
+static void view_layer_remove_unset_nodetrees(const Main *bmain, Scene *scene, ViewLayer *layer)
+{
+ int act_layer_index = BLI_findindex(&scene->view_layers, layer);
+
+ for (Scene *sce = bmain->scene.first; sce; sce = sce->id.next) {
+ if (sce->nodetree) {
+ BKE_nodetree_remove_layer_n(sce->nodetree, scene, act_layer_index);
+ }
+ }
+}
+
+bool ED_scene_view_layer_delete(
+ Main *bmain, Scene *scene, ViewLayer *layer,
+ ReportList *reports)
+{
+ if (view_layer_remove_poll(scene, layer) == false) {
+ if (reports) {
+ BKE_reportf(reports, RPT_ERROR, "View layer '%s' could not be removed from scene '%s'",
+ layer->name, scene->id.name + 2);
+ }
+
+ return false;
+ }
+
+ /* We need to unset nodetrees before removing the layer, otherwise its index will be -1. */
+ view_layer_remove_unset_nodetrees(bmain, scene, layer);
+
+ BLI_remlink(&scene->view_layers, layer);
+ BLI_assert(BLI_listbase_is_empty(&scene->view_layers) == false);
+ scene->active_view_layer = 0;
+
+ ED_workspace_view_layer_unset(bmain, scene, layer, scene->view_layers.first);
+ BKE_workspace_view_layer_remove_references(bmain, layer);
+
+ BKE_view_layer_free(layer);
+
+ DEG_id_tag_update(&scene->id, 0);
+ DEG_relations_tag_update(bmain);
+ WM_main_add_notifier(NC_SCENE | ND_LAYER | NA_REMOVED, scene);
+
+ return true;
+}
+
+static int scene_new_exec(bContext *C, wmOperator *op)
+{
+ Main *bmain = CTX_data_main(C);
+ wmWindow *win = CTX_wm_window(C);
+ int type = RNA_enum_get(op->ptr, "type");
+
+ ED_scene_add(bmain, C, win, type);
+
+ return OPERATOR_FINISHED;
+}
+
+static void SCENE_OT_new(wmOperatorType *ot)
+{
+ static EnumPropertyItem type_items[] = {
+ {SCE_COPY_NEW, "NEW", 0, "New", "Add new scene"},
+ {SCE_COPY_EMPTY, "EMPTY", 0, "Copy Settings", "Make a copy without any objects"},
+ {SCE_COPY_LINK_OB, "LINK_OBJECTS", 0, "Link Objects", "Link to the objects from the current scene"},
+ {SCE_COPY_LINK_DATA, "LINK_OBJECT_DATA", 0, "Link Object Data", "Copy objects linked to data from the current scene"},
+ {SCE_COPY_FULL, "FULL_COPY", 0, "Full Copy", "Make a full copy of the current scene"},
+ {0, NULL, 0, NULL, NULL}
+ };
+
+ /* identifiers */
+ ot->name = "New Scene";
+ ot->description = "Add new scene by type";
+ ot->idname = "SCENE_OT_new";
+
+ /* api callbacks */
+ ot->exec = scene_new_exec;
+ ot->invoke = WM_menu_invoke;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+
+ /* properties */
+ ot->prop = RNA_def_enum(ot->srna, "type", type_items, 0, "Type", "");
+}
+
+static int scene_delete_exec(bContext *C, wmOperator *UNUSED(op))
+{
+ Scene *scene = CTX_data_scene(C);
+
+ if (ED_scene_delete(C, CTX_data_main(C), CTX_wm_window(C), scene) == false) {
+ return OPERATOR_CANCELLED;
+ }
+
+ if (G.debug & G_DEBUG)
+ printf("scene delete %p\n", scene);
+
+ WM_event_add_notifier(C, NC_SCENE | NA_REMOVED, scene);
+
+ return OPERATOR_FINISHED;
+}
+
+static void SCENE_OT_delete(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Delete Scene";
+ ot->description = "Delete active scene";
+ ot->idname = "SCENE_OT_delete";
+
+ /* api callbacks */
+ ot->exec = scene_delete_exec;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+}
+
+void ED_operatortypes_scene(void)
+{
+ WM_operatortype_append(SCENE_OT_new);
+ WM_operatortype_append(SCENE_OT_delete);
+}
diff --git a/source/blender/editors/screen/CMakeLists.txt b/source/blender/editors/screen/CMakeLists.txt
index 43e044b613a..29b9971eabb 100644
--- a/source/blender/editors/screen/CMakeLists.txt
+++ b/source/blender/editors/screen/CMakeLists.txt
@@ -23,8 +23,10 @@ set(INC
../../blenfont
../../blenkernel
../../blenlib
+ ../../blenloader
../../blentranslation
../../bmesh
+ ../../depsgraph
../../gpu
../../imbuf
../../makesdna
@@ -46,6 +48,8 @@ set(SRC
screen_edit.c
screen_ops.c
screendump.c
+ workspace_edit.c
+ workspace_layout_edit.c
screen_intern.h
)
diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c
index fc0922c7b7c..274dbcc73cb 100644
--- a/source/blender/editors/screen/area.c
+++ b/source/blender/editors/screen/area.c
@@ -51,14 +51,18 @@
#include "WM_api.h"
#include "WM_types.h"
+#include "WM_message.h"
#include "wm_subwindow.h"
#include "ED_screen.h"
#include "ED_screen_types.h"
#include "ED_space_api.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+#include "GPU_matrix.h"
+#include "GPU_draw.h"
+
#include "BLF_api.h"
#include "IMB_imbuf.h"
@@ -71,7 +75,7 @@
#include "screen_intern.h"
-extern void ui_draw_anti_tria(float x1, float y1, float x2, float y2, float x3, float y3); /* xxx temp */
+extern void ui_draw_anti_tria(float x1, float y1, float x2, float y2, float x3, float y3, const float color[4]); /* xxx temp */
/* general area and region code */
@@ -89,21 +93,30 @@ static void region_draw_emboss(const ARegion *ar, const rcti *scirct)
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 4, GWN_FETCH_INT_TO_FLOAT_UNIT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_FLAT_COLOR);
+ immBegin(GWN_PRIM_LINE_STRIP, 5);
+
/* right */
- glColor4ub(0, 0, 0, 30);
- sdrawline(rect.xmax, rect.ymin, rect.xmax, rect.ymax);
+ immAttrib4ub(color, 0, 0, 0, 30);
+ immVertex2f(pos, rect.xmax, rect.ymax);
+ immVertex2f(pos, rect.xmax, rect.ymin);
/* bottom */
- glColor4ub(0, 0, 0, 30);
- sdrawline(rect.xmin, rect.ymin, rect.xmax, rect.ymin);
+ immVertex2f(pos, rect.xmin, rect.ymin);
- /* top */
- glColor4ub(255, 255, 255, 30);
- sdrawline(rect.xmin, rect.ymax, rect.xmax, rect.ymax);
-
/* left */
- glColor4ub(255, 255, 255, 30);
- sdrawline(rect.xmin, rect.ymin, rect.xmin, rect.ymax);
+ immAttrib4ub(color, 255, 255, 255, 30);
+ immVertex2f(pos, rect.xmin, rect.ymax);
+
+ /* top */
+ immVertex2f(pos, rect.xmax, rect.ymax);
+
+ immEnd();
+ immUnbindProgram();
glDisable(GL_BLEND);
}
@@ -111,11 +124,11 @@ static void region_draw_emboss(const ARegion *ar, const rcti *scirct)
void ED_region_pixelspace(ARegion *ar)
{
wmOrtho2_region_pixelspace(ar);
- glLoadIdentity();
+ gpuLoadIdentity();
}
/* only exported for WM */
-void ED_region_do_listen(bScreen *sc, ScrArea *sa, ARegion *ar, wmNotifier *note)
+void ED_region_do_listen(bScreen *sc, ScrArea *sa, ARegion *ar, wmNotifier *note, const Scene *scene)
{
/* generic notes first */
switch (note->category) {
@@ -129,15 +142,15 @@ void ED_region_do_listen(bScreen *sc, ScrArea *sa, ARegion *ar, wmNotifier *note
}
if (ar->type && ar->type->listener)
- ar->type->listener(sc, sa, ar, note);
+ ar->type->listener(sc, sa, ar, note, scene);
}
/* only exported for WM */
-void ED_area_do_listen(bScreen *sc, ScrArea *sa, wmNotifier *note)
+void ED_area_do_listen(bScreen *sc, ScrArea *sa, wmNotifier *note, Scene *scene, WorkSpace *workspace)
{
/* no generic notes? */
if (sa->type && sa->type->listener) {
- sa->type->listener(sc, sa, note);
+ sa->type->listener(sc, sa, note, scene, workspace);
}
}
@@ -206,15 +219,27 @@ static void area_draw_azone_fullscreen(short x1, short y1, short x2, short y2, f
if (G.debug_value == 1) {
rcti click_rect;
float icon_size = UI_DPI_ICON_SIZE + 7 * UI_DPI_FAC;
- char alpha_debug = 255 * alpha;
+ unsigned char alpha_debug = 255 * alpha;
BLI_rcti_init(&click_rect, x, x + icon_size, y, y + icon_size);
- glColor4ub(255, 0, 0, alpha_debug);
- fdrawbox(click_rect.xmin, click_rect.ymin, click_rect.xmax, click_rect.ymax);
- glColor4ub(0, 255, 255, alpha_debug);
- fdrawline(click_rect.xmin, click_rect.ymin, click_rect.xmax, click_rect.ymax);
- fdrawline(click_rect.xmin, click_rect.ymax, click_rect.xmax, click_rect.ymin);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 4, GWN_FETCH_INT_TO_FLOAT_UNIT);
+
+ immAttrib4ub(color, 255, 0, 0, alpha_debug);
+ immBindBuiltinProgram(GPU_SHADER_2D_FLAT_COLOR);
+ imm_draw_box_wire_2d(pos, click_rect.xmin, click_rect.ymin, click_rect.xmax, click_rect.ymax);
+
+ immAttrib4ub(color, 0, 255, 255, alpha_debug);
+ immBegin(GWN_PRIM_LINES, 4);
+ immVertex2f(pos, click_rect.xmin, click_rect.ymin);
+ immVertex2f(pos, click_rect.xmax, click_rect.ymax);
+ immVertex2f(pos, click_rect.xmin, click_rect.ymax);
+ immVertex2f(pos, click_rect.xmax, click_rect.ymin);
+ immEnd();
+
+ immUnbindProgram();
}
}
@@ -229,69 +254,96 @@ static void area_draw_azone(short x1, short y1, short x2, short y2)
dx = copysign(ceilf(0.3f * abs(dx)), dx);
dy = copysign(ceilf(0.3f * abs(dy)), dy);
- glEnable(GL_BLEND);
glEnable(GL_LINE_SMOOTH);
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int col = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 4, GWN_FETCH_INT_TO_FLOAT_UNIT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_FLAT_COLOR);
+ immBegin(GWN_PRIM_LINES, 12);
+
+ immAttrib4ub(col, 255, 255, 255, 180);
+ immVertex2f(pos, x1, y2);
+ immVertex2f(pos, x2, y1);
+
+ immAttrib4ub(col, 255, 255, 255, 130);
+ immVertex2f(pos, x1, y2 - dy);
+ immVertex2f(pos, x2 - dx, y1);
+
+ immAttrib4ub(col, 255, 255, 255, 80);
+ immVertex2f(pos, x1, y2 - 2 * dy);
+ immVertex2f(pos, x2 - 2 * dx, y1);
- glColor4ub(255, 255, 255, 180);
- fdrawline(x1, y2, x2, y1);
- glColor4ub(255, 255, 255, 130);
- fdrawline(x1, y2 - dy, x2 - dx, y1);
- glColor4ub(255, 255, 255, 80);
- fdrawline(x1, y2 - 2 * dy, x2 - 2 * dx, y1);
-
- glColor4ub(0, 0, 0, 210);
- fdrawline(x1, y2 + 1, x2 + 1, y1);
- glColor4ub(0, 0, 0, 180);
- fdrawline(x1, y2 - dy + 1, x2 - dx + 1, y1);
- glColor4ub(0, 0, 0, 150);
- fdrawline(x1, y2 - 2 * dy + 1, x2 - 2 * dx + 1, y1);
+ immAttrib4ub(col, 0, 0, 0, 210);
+ immVertex2f(pos, x1, y2 + 1);
+ immVertex2f(pos, x2 + 1, y1);
+
+ immAttrib4ub(col, 0, 0, 0, 180);
+ immVertex2f(pos, x1, y2 - dy + 1);
+ immVertex2f(pos, x2 - dx + 1, y1);
+
+ immAttrib4ub(col, 0, 0, 0, 150);
+ immVertex2f(pos, x1, y2 - 2 * dy + 1);
+ immVertex2f(pos, x2 - 2 * dx + 1, y1);
+
+ immEnd();
+ immUnbindProgram();
glDisable(GL_LINE_SMOOTH);
- glDisable(GL_BLEND);
}
static void region_draw_azone_icon(AZone *az)
{
- GLUquadricObj *qobj = NULL;
- short midx = az->x1 + (az->x2 - az->x1) / 2;
- short midy = az->y1 + (az->y2 - az->y1) / 2;
-
- qobj = gluNewQuadric();
-
- glPushMatrix();
- glTranslatef(midx, midy, 0.0);
-
- /* outlined circle */
- glEnable(GL_LINE_SMOOTH);
+ float midx = az->x1 + (az->x2 - az->x1) * 0.5f;
+ float midy = az->y1 + (az->y2 - az->y1) * 0.5f;
- glColor4f(1.f, 1.f, 1.f, 0.8f);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
- gluQuadricDrawStyle(qobj, GLU_FILL);
- gluDisk(qobj, 0.0, 4.25f, 16, 1);
+ /* outlined circle */
+ GPU_enable_program_point_size(); /* TODO: make a fixed-size shader to avoid this */
+ immBindBuiltinProgram(GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_OUTLINE_AA);
+ immUniformColor4f(1.0f, 1.0f, 1.0f, 0.8f);
+ immUniform4f("outlineColor", 0.2f, 0.2f, 0.2f, 0.9f);
+ immUniform1f("outlineWidth", 1.0f);
+ immUniform1f("size", 9.5f);
+ immBegin(GWN_PRIM_POINTS, 1);
+ immVertex2f(pos, midx, midy);
+ immEnd();
+ immUnbindProgram();
+ GPU_disable_program_point_size();
- glColor4f(0.2f, 0.2f, 0.2f, 0.9f);
-
- gluQuadricDrawStyle(qobj, GLU_SILHOUETTE);
- gluDisk(qobj, 0.0, 4.25f, 16, 1);
-
- glDisable(GL_LINE_SMOOTH);
-
- glPopMatrix();
- gluDeleteQuadric(qobj);
-
/* + */
- sdrawline(midx, midy - 2, midx, midy + 3);
- sdrawline(midx - 2, midy, midx + 3, midy);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor4f(0.2f, 0.2f, 0.2f, 0.9f);
+ immBegin(GWN_PRIM_LINES, 4);
+ immVertex2f(pos, midx, midy - 2);
+ immVertex2f(pos, midx, midy + 3);
+ immVertex2f(pos, midx - 2, midy);
+ immVertex2f(pos, midx + 3, midy);
+ immEnd();
+ immUnbindProgram();
}
static void draw_azone_plus(float x1, float y1, float x2, float y2)
{
float width = 0.1f * U.widget_unit;
float pad = 0.2f * U.widget_unit;
-
- glRectf((x1 + x2 - width) * 0.5f, y1 + pad, (x1 + x2 + width) * 0.5f, y2 - pad);
- glRectf(x1 + pad, (y1 + y2 - width) * 0.5f, (x1 + x2 - width) * 0.5f, (y1 + y2 + width) * 0.5f);
- glRectf((x1 + x2 + width) * 0.5f, (y1 + y2 - width) * 0.5f, x2 - pad, (y1 + y2 + width) * 0.5f);
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ glEnable(GL_BLEND);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor4f(0.8f, 0.8f, 0.8f, 0.4f);
+
+ immRectf(pos, (x1 + x2 - width) * 0.5f, y1 + pad, (x1 + x2 + width) * 0.5f, y2 - pad);
+ immRectf(pos, x1 + pad, (y1 + y2 - width) * 0.5f, (x1 + x2 - width) * 0.5f, (y1 + y2 + width) * 0.5f);
+ immRectf(pos, (x1 + x2 + width) * 0.5f, (y1 + y2 - width) * 0.5f, x2 - pad, (y1 + y2 + width) * 0.5f);
+
+ immUnbindProgram();
+ glDisable(GL_BLEND);
}
static void region_draw_azone_tab_plus(AZone *az)
@@ -314,54 +366,41 @@ static void region_draw_azone_tab_plus(AZone *az)
break;
}
- glColor4f(0.05f, 0.05f, 0.05f, 0.4f);
- UI_draw_roundbox((float)az->x1, (float)az->y1, (float)az->x2, (float)az->y2, 4.0f);
+ float color[4] = {0.05f, 0.05f, 0.05f, 0.4f};
+ UI_draw_roundbox_aa(true, (float)az->x1, (float)az->y1, (float)az->x2, (float)az->y2, 4.0f, color);
- glEnable(GL_BLEND);
-
- glColor4f(0.8f, 0.8f, 0.8f, 0.4f);
draw_azone_plus((float)az->x1, (float)az->y1, (float)az->x2, (float)az->y2);
-
- glDisable(GL_BLEND);
}
static void region_draw_azone_tab(AZone *az)
{
- float col[3];
+ float col[4], black[4] = {0.0f, 0.0f, 0.0f, 0.5f};
glEnable(GL_BLEND);
UI_GetThemeColor3fv(TH_HEADER, col);
- glColor4f(col[0], col[1], col[2], 0.5f);
-
+ col[3] = 0.5f;
+
/* add code to draw region hidden as 'too small' */
switch (az->edge) {
case AE_TOP_TO_BOTTOMRIGHT:
- UI_draw_roundbox_corner_set(UI_CNR_TOP_LEFT | UI_CNR_TOP_RIGHT | UI_RB_ALPHA);
-
- UI_draw_roundbox_shade_x(GL_POLYGON, (float)az->x1, (float)az->y1, (float)az->x2, (float)az->y2, 4.0f, -0.3f, 0.05f);
- glColor4ub(0, 0, 0, 255);
- UI_draw_roundbox_unfilled((float)az->x1, 0.3f + (float)az->y1, (float)az->x2, 0.3f + (float)az->y2, 4.0f);
+ UI_draw_roundbox_corner_set(UI_CNR_TOP_LEFT | UI_CNR_TOP_RIGHT);
+ UI_draw_roundbox_shade_x(true, (float)az->x1, (float)az->y1, (float)az->x2, (float)az->y2, 4.0f, -0.3f, 0.05f, col);
+ UI_draw_roundbox_aa(false, (float)az->x1, 0.3f + (float)az->y1, (float)az->x2, 0.3f + (float)az->y2, 4.0f, black);
break;
case AE_BOTTOM_TO_TOPLEFT:
- UI_draw_roundbox_corner_set(UI_CNR_BOTTOM_RIGHT | UI_CNR_BOTTOM_LEFT | UI_RB_ALPHA);
-
- UI_draw_roundbox_shade_x(GL_POLYGON, (float)az->x1, (float)az->y1, (float)az->x2, (float)az->y2, 4.0f, -0.3f, 0.05f);
- glColor4ub(0, 0, 0, 255);
- UI_draw_roundbox_unfilled((float)az->x1, 0.3f + (float)az->y1, (float)az->x2, 0.3f + (float)az->y2, 4.0f);
+ UI_draw_roundbox_corner_set(UI_CNR_BOTTOM_RIGHT | UI_CNR_BOTTOM_LEFT);
+ UI_draw_roundbox_shade_x(true, (float)az->x1, (float)az->y1, (float)az->x2, (float)az->y2, 4.0f, -0.3f, 0.05f, col);
+ UI_draw_roundbox_aa(false, (float)az->x1, 0.3f + (float)az->y1, (float)az->x2, 0.3f + (float)az->y2, 4.0f, black);
break;
case AE_LEFT_TO_TOPRIGHT:
- UI_draw_roundbox_corner_set(UI_CNR_TOP_LEFT | UI_CNR_BOTTOM_LEFT | UI_RB_ALPHA);
-
- UI_draw_roundbox_shade_x(GL_POLYGON, (float)az->x1, (float)az->y1, (float)az->x2, (float)az->y2, 4.0f, -0.3f, 0.05f);
- glColor4ub(0, 0, 0, 255);
- UI_draw_roundbox_unfilled((float)az->x1, (float)az->y1, (float)az->x2, (float)az->y2, 4.0f);
+ UI_draw_roundbox_corner_set(UI_CNR_TOP_LEFT | UI_CNR_BOTTOM_LEFT);
+ UI_draw_roundbox_shade_x(true, (float)az->x1, (float)az->y1, (float)az->x2, (float)az->y2, 4.0f, -0.3f, 0.05f, col);
+ UI_draw_roundbox_aa(false, (float)az->x1, (float)az->y1, (float)az->x2, (float)az->y2, 4.0f, black);
break;
case AE_RIGHT_TO_TOPLEFT:
- UI_draw_roundbox_corner_set(UI_CNR_TOP_RIGHT | UI_CNR_BOTTOM_RIGHT | UI_RB_ALPHA);
-
- UI_draw_roundbox_shade_x(GL_POLYGON, (float)az->x1, (float)az->y1, (float)az->x2, (float)az->y2, 4.0f, -0.3f, 0.05f);
- glColor4ub(0, 0, 0, 255);
- UI_draw_roundbox_unfilled((float)az->x1, (float)az->y1, (float)az->x2, (float)az->y2, 4.0f);
+ UI_draw_roundbox_corner_set(UI_CNR_TOP_RIGHT | UI_CNR_BOTTOM_RIGHT);
+ UI_draw_roundbox_shade_x(true, (float)az->x1, (float)az->y1, (float)az->x2, (float)az->y2, 4.0f, -0.3f, 0.05f, col);
+ UI_draw_roundbox_aa(false, (float)az->x1, (float)az->y1, (float)az->x2, (float)az->y2, 4.0f, black);
break;
}
@@ -372,24 +411,24 @@ static void region_draw_azone_tria(AZone *az)
{
glEnable(GL_BLEND);
//UI_GetThemeColor3fv(TH_HEADER, col);
- glColor4f(0.0f, 0.0f, 0.0f, 0.35f);
+ float color[4] = {0.0f, 0.0f, 0.0f, 0.35f};
/* add code to draw region hidden as 'too small' */
switch (az->edge) {
case AE_TOP_TO_BOTTOMRIGHT:
- ui_draw_anti_tria((float)az->x1, (float)az->y1, (float)az->x2, (float)az->y1, (float)(az->x1 + az->x2) / 2, (float)az->y2);
+ ui_draw_anti_tria((float)az->x1, (float)az->y1, (float)az->x2, (float)az->y1, (float)(az->x1 + az->x2) / 2, (float)az->y2, color);
break;
case AE_BOTTOM_TO_TOPLEFT:
- ui_draw_anti_tria((float)az->x1, (float)az->y2, (float)az->x2, (float)az->y2, (float)(az->x1 + az->x2) / 2, (float)az->y1);
+ ui_draw_anti_tria((float)az->x1, (float)az->y2, (float)az->x2, (float)az->y2, (float)(az->x1 + az->x2) / 2, (float)az->y1, color);
break;
case AE_LEFT_TO_TOPRIGHT:
- ui_draw_anti_tria((float)az->x2, (float)az->y1, (float)az->x2, (float)az->y2, (float)az->x1, (float)(az->y1 + az->y2) / 2);
+ ui_draw_anti_tria((float)az->x2, (float)az->y1, (float)az->x2, (float)az->y2, (float)az->x1, (float)(az->y1 + az->y2) / 2, color);
break;
case AE_RIGHT_TO_TOPLEFT:
- ui_draw_anti_tria((float)az->x1, (float)az->y1, (float)az->x1, (float)az->y2, (float)az->x2, (float)(az->y1 + az->y2) / 2);
+ ui_draw_anti_tria((float)az->x1, (float)az->y1, (float)az->x1, (float)az->y2, (float)az->x2, (float)(az->y1 + az->y2) / 2, color);
break;
}
@@ -413,8 +452,8 @@ static void region_draw_azones(ScrArea *sa, ARegion *ar)
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glPushMatrix();
- glTranslatef(-ar->winrct.xmin, -ar->winrct.ymin, 0.0f);
+ gpuPushMatrix();
+ gpuTranslate2f(-ar->winrct.xmin, -ar->winrct.ymin);
for (az = sa->actionzones.first; az; az = az->next) {
/* test if action zone is over this region */
@@ -451,7 +490,7 @@ static void region_draw_azones(ScrArea *sa, ARegion *ar)
}
}
- glPopMatrix();
+ gpuPopMatrix();
glDisable(GL_BLEND);
}
@@ -473,6 +512,33 @@ void ED_region_set(const bContext *C, ARegion *ar)
ED_region_pixelspace(ar);
}
+/* Follow wmMsgNotifyFn spec */
+void ED_region_do_msg_notify_tag_redraw(
+ bContext *UNUSED(C), wmMsgSubscribeKey *UNUSED(msg_key), wmMsgSubscribeValue *msg_val)
+{
+ ARegion *ar = msg_val->owner;
+ ED_region_tag_redraw(ar);
+
+ /* This avoids _many_ situations where header/properties control display settings.
+ * the common case is space properties in the header */
+ if (ELEM(ar->regiontype, RGN_TYPE_HEADER, RGN_TYPE_UI)) {
+ while (ar && ar->prev) {
+ ar = ar->prev;
+ }
+ for (; ar; ar = ar->next) {
+ if (ELEM(ar->regiontype, RGN_TYPE_WINDOW, RGN_TYPE_CHANNELS)) {
+ ED_region_tag_redraw(ar);
+ }
+ }
+ }
+}
+/* Follow wmMsgNotifyFn spec */
+void ED_area_do_msg_notify_tag_refresh(
+ bContext *UNUSED(C), wmMsgSubscribeKey *UNUSED(msg_key), wmMsgSubscribeValue *msg_val)
+{
+ ScrArea *sa = msg_val->user_data;
+ ED_area_tag_refresh(sa);
+}
/* only exported for WM */
void ED_region_do_draw(bContext *C, ARegion *ar)
@@ -511,7 +577,7 @@ void ED_region_do_draw(bContext *C, ARegion *ar)
UI_ThemeClearColor(TH_HEADER);
glClear(GL_COLOR_BUFFER_BIT);
- UI_ThemeColor(TH_TEXT);
+ UI_FontThemeColor(BLF_default(), TH_TEXT);
BLF_draw_default(UI_UNIT_X, 0.4f * UI_UNIT_Y, 0.0f, ar->headerstr, BLF_DRAW_STR_DUMMY_MAX);
}
else if (at->draw) {
@@ -528,9 +594,13 @@ void ED_region_do_draw(bContext *C, ARegion *ar)
/* for debugging unneeded area redraws and partial redraw */
#if 0
glEnable(GL_BLEND);
- glColor4f(drand48(), drand48(), drand48(), 0.1f);
- glRectf(ar->drawrct.xmin - ar->winrct.xmin, ar->drawrct.ymin - ar->winrct.ymin,
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor4f(drand48(), drand48(), drand48(), 0.1f);
+ immRectf(pos, ar->drawrct.xmin - ar->winrct.xmin, ar->drawrct.ymin - ar->winrct.ymin,
ar->drawrct.xmax - ar->winrct.xmin, ar->drawrct.ymax - ar->winrct.ymin);
+ immUnbindProgram();
glDisable(GL_BLEND);
#endif
@@ -539,12 +609,45 @@ void ED_region_do_draw(bContext *C, ARegion *ar)
UI_blocklist_free_inactive(C, &ar->uiblocks);
if (sa) {
+ const bScreen *screen = WM_window_get_active_screen(win);
+
/* disable emboss when the area is full,
* unless we need to see division between regions (quad-split for eg) */
- if (((win->screen->state == SCREENFULL) && (ar->alignment == RGN_ALIGN_NONE)) == 0) {
+ if (((screen->state == SCREENFULL) && (ar->alignment == RGN_ALIGN_NONE)) == 0) {
region_draw_emboss(ar, &ar->winrct);
}
}
+
+ /* We may want to detach message-subscriptions from drawing. */
+ {
+ WorkSpace *workspace = CTX_wm_workspace(C);
+ wmWindowManager *wm = CTX_wm_manager(C);
+ bScreen *screen = WM_window_get_active_screen(win);
+ Scene *scene = CTX_data_scene(C);
+ struct wmMsgBus *mbus = wm->message_bus;
+ WM_msgbus_clear_by_owner(mbus, ar);
+
+ /* Cheat, always subscribe to this space type properties.
+ *
+ * This covers most cases and avoids copy-paste similar code for each space type.
+ */
+ if (ELEM(ar->regiontype, RGN_TYPE_WINDOW, RGN_TYPE_CHANNELS, RGN_TYPE_UI, RGN_TYPE_TOOLS)) {
+ SpaceLink *sl = sa->spacedata.first;
+
+ PointerRNA ptr;
+ RNA_pointer_create(&screen->id, &RNA_Space, sl, &ptr);
+
+ wmMsgSubscribeValue msg_sub_value_region_tag_redraw = {
+ .owner = ar,
+ .user_data = ar,
+ .notify = ED_region_do_msg_notify_tag_redraw,
+ };
+ /* All properties for this space type. */
+ WM_msg_subscribe_rna(mbus, &ptr, NULL, &msg_sub_value_region_tag_redraw, __func__);
+ }
+
+ ED_region_message_subscribe(C, workspace, scene, screen, sa, ar, mbus);
+ }
}
/* **********************************
@@ -655,7 +758,7 @@ void ED_area_headerprint(ScrArea *sa, const char *str)
/* ************************************************************ */
-static void area_azone_initialize(wmWindow *win, bScreen *screen, ScrArea *sa)
+static void area_azone_initialize(wmWindow *win, const bScreen *screen, ScrArea *sa)
{
AZone *az;
@@ -1315,7 +1418,9 @@ static void region_rect_recursive(wmWindow *win, ScrArea *sa, ARegion *ar, rcti
* must be minimum '4' */
}
else {
- if (ELEM(win->screen->state, SCREENNORMAL, SCREENMAXIMIZED)) {
+ const bScreen *screen = WM_window_get_active_screen(win);
+
+ if (ELEM(screen->state, SCREENNORMAL, SCREENMAXIMIZED)) {
region_azone_add(sa, ar, alignment, false);
}
else {
@@ -1439,6 +1544,7 @@ static void ed_default_handlers(wmWindowManager *wm, ScrArea *sa, ListBase *hand
/* called in screen_refresh, or screens_init, also area size changes */
void ED_area_initialize(wmWindowManager *wm, wmWindow *win, ScrArea *sa)
{
+ const bScreen *screen = WM_window_get_active_screen(win);
ARegion *ar;
rcti rect;
@@ -1457,7 +1563,7 @@ void ED_area_initialize(wmWindowManager *wm, wmWindow *win, ScrArea *sa)
area_calc_totrct(sa, WM_window_pixels_x(win), WM_window_pixels_y(win));
/* clear all azones, add the area triange widgets */
- area_azone_initialize(win, win->screen, sa);
+ area_azone_initialize(win, screen, sa);
/* region rect sizes */
rect = sa->totrct;
@@ -1477,8 +1583,9 @@ void ED_area_initialize(wmWindowManager *wm, wmWindow *win, ScrArea *sa)
/* default region handlers */
ed_default_handlers(wm, sa, &ar->handlers, ar->type->keymapflag);
/* own handlers */
- if (ar->type->init)
+ if (ar->type->init) {
ar->type->init(wm, ar);
+ }
}
else {
/* prevent uiblocks to run */
@@ -1972,8 +2079,12 @@ void ED_region_panels(const bContext *C, ARegion *ar, const char *context, int c
/* view should be in pixelspace */
UI_view2d_view_restore(C);
glEnable(GL_BLEND);
- UI_ThemeColor4((ar->type->regionid == RGN_TYPE_PREVIEW) ? TH_PREVIEW_BACK : TH_BACK);
- glRecti(0, 0, BLI_rcti_size_x(&ar->winrct), BLI_rcti_size_y(&ar->winrct) + 1);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformThemeColor((ar->type->regionid == RGN_TYPE_PREVIEW) ? TH_PREVIEW_BACK : TH_BACK);
+ immRecti(pos, 0, 0, BLI_rcti_size_x(&ar->winrct), BLI_rcti_size_y(&ar->winrct) + 1);
+ immUnbindProgram();
glDisable(GL_BLEND);
}
else {
@@ -2077,22 +2188,37 @@ int ED_area_headersize(void)
return (int)(HEADERY * UI_DPI_FAC);
}
-void ED_region_info_draw(ARegion *ar, const char *text, float fill_color[4], const bool full_redraw)
+void ED_region_info_draw_multiline(ARegion *ar, const char *text_array[], float fill_color[4], const bool full_redraw)
{
const int header_height = UI_UNIT_Y;
uiStyle *style = UI_style_get_dpi();
int fontid = style->widget.uifont_id;
GLint scissor[4];
rcti rect;
+ int num_lines = 0;
/* background box */
ED_region_visible_rect(ar, &rect);
- rect.ymin = BLI_rcti_size_y(&ar->winrct) - header_height;
- /* box fill entire width or just around text */
- if (!full_redraw)
- rect.xmax = min_ii(rect.xmax, rect.xmin + BLF_width(fontid, text, BLF_DRAW_STR_DUMMY_MAX) + 1.2f * U.widget_unit);
+ /* Box fill entire width or just around text. */
+ if (!full_redraw) {
+ const char **text = &text_array[0];
+ while (*text) {
+ rect.xmax = min_ii(rect.xmax, rect.xmin + BLF_width(fontid, *text, BLF_DRAW_STR_DUMMY_MAX) + 1.2f * U.widget_unit);
+ text++;
+ num_lines++;
+ }
+ }
+ /* Just count the line number. */
+ else {
+ const char **text = &text_array[0];
+ while (*text) {
+ text++;
+ num_lines++;
+ }
+ }
+ rect.ymin = BLI_rcti_size_y(&ar->winrct) - header_height * num_lines;
rect.ymax = BLI_rcti_size_y(&ar->winrct);
/* setup scissor */
@@ -2102,17 +2228,28 @@ void ED_region_info_draw(ARegion *ar, const char *text, float fill_color[4], con
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glColor4fv(fill_color);
- glRecti(rect.xmin, rect.ymin, rect.xmax + 1, rect.ymax + 1);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor4fv(fill_color);
+ immRecti(pos, rect.xmin, rect.ymin, rect.xmax + 1, rect.ymax + 1);
+ immUnbindProgram();
glDisable(GL_BLEND);
/* text */
- UI_ThemeColor(TH_TEXT_HI);
+ UI_FontThemeColor(fontid, TH_TEXT_HI);
BLF_clipping(fontid, rect.xmin, rect.ymin, rect.xmax, rect.ymax);
BLF_enable(fontid, BLF_CLIPPING);
- BLF_position(fontid, rect.xmin + 0.6f * U.widget_unit, rect.ymin + 0.3f * U.widget_unit, 0.0f);
-
- BLF_draw(fontid, text, BLF_DRAW_STR_DUMMY_MAX);
+ int offset = num_lines - 1;
+ {
+ const char **text = &text_array[0];
+ while (*text) {
+ BLF_position(fontid, rect.xmin + 0.6f * U.widget_unit, rect.ymin + 0.3f * U.widget_unit + offset * header_height, 0.0f);
+ BLF_draw(fontid, *text, BLF_DRAW_STR_DUMMY_MAX);
+ text++;
+ offset--;
+ }
+ }
BLF_disable(fontid, BLF_CLIPPING);
@@ -2120,6 +2257,11 @@ void ED_region_info_draw(ARegion *ar, const char *text, float fill_color[4], con
glScissor(scissor[0], scissor[1], scissor[2], scissor[3]);
}
+void ED_region_info_draw(ARegion *ar, const char *text, float fill_color[4], const bool full_redraw)
+{
+ ED_region_info_draw_multiline(ar, (const char *[2]){text, NULL}, fill_color, full_redraw);
+}
+
#define MAX_METADATA_STR 1024
static const char *meta_data_list[] =
@@ -2288,11 +2430,11 @@ void ED_region_image_metadata_draw(int x, int y, ImBuf *ibuf, const rctf *frame,
return;
/* find window pixel coordinates of origin */
- glPushMatrix();
+ gpuPushMatrix();
/* offset and zoom using ogl */
- glTranslatef(x, y, 0.0f);
- glScalef(zoomx, zoomy, 1.0f);
+ gpuTranslate2f(x, y);
+ gpuScale2f(zoomx, zoomy);
BLF_size(blf_mono_font, style->widgetlabel.points * 1.5f * U.pixelsize, U.dpi);
@@ -2302,17 +2444,20 @@ void ED_region_image_metadata_draw(int x, int y, ImBuf *ibuf, const rctf *frame,
box_y = metadata_box_height_get(ibuf, blf_mono_font, true);
if (box_y) {
- UI_ThemeColor(TH_METADATA_BG);
-
/* set up rect */
BLI_rctf_init(&rect, frame->xmin, frame->xmax, frame->ymax, frame->ymax + box_y);
/* draw top box */
- glRectf(rect.xmin, rect.ymin, rect.xmax, rect.ymax);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformThemeColor(TH_METADATA_BG);
+ immRectf(pos, rect.xmin, rect.ymin, rect.xmax, rect.ymax);
+ immUnbindProgram();
BLF_clipping(blf_mono_font, rect.xmin, rect.ymin, rect.xmax, rect.ymax);
BLF_enable(blf_mono_font, BLF_CLIPPING);
- UI_ThemeColor(TH_METADATA_TEXT);
+ UI_FontThemeColor(blf_mono_font, TH_METADATA_TEXT);
metadata_draw_imbuf(ibuf, &rect, blf_mono_font, true);
BLF_disable(blf_mono_font, BLF_CLIPPING);
@@ -2324,23 +2469,26 @@ void ED_region_image_metadata_draw(int x, int y, ImBuf *ibuf, const rctf *frame,
box_y = metadata_box_height_get(ibuf, blf_mono_font, false);
if (box_y) {
- UI_ThemeColor(TH_METADATA_BG);
-
/* set up box rect */
BLI_rctf_init(&rect, frame->xmin, frame->xmax, frame->ymin - box_y, frame->ymin);
/* draw top box */
- glRectf(rect.xmin, rect.ymin, rect.xmax, rect.ymax);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformThemeColor(TH_METADATA_BG);
+ immRectf(pos, rect.xmin, rect.ymin, rect.xmax, rect.ymax);
+ immUnbindProgram();
BLF_clipping(blf_mono_font, rect.xmin, rect.ymin, rect.xmax, rect.ymax);
BLF_enable(blf_mono_font, BLF_CLIPPING);
- UI_ThemeColor(TH_METADATA_TEXT);
+ UI_FontThemeColor(blf_mono_font, TH_METADATA_TEXT);
metadata_draw_imbuf(ibuf, &rect, blf_mono_font, false);
BLF_disable(blf_mono_font, BLF_CLIPPING);
}
- glPopMatrix();
+ gpuPopMatrix();
}
void ED_region_grid_draw(ARegion *ar, float zoomx, float zoomy)
@@ -2350,11 +2498,16 @@ void ED_region_grid_draw(ARegion *ar, float zoomx, float zoomy)
int x1, y1, x2, y2;
/* the image is located inside (0, 0), (1, 1) as set by view2d */
- UI_ThemeColorShade(TH_BACK, 20);
-
UI_view2d_view_to_region(&ar->v2d, 0.0f, 0.0f, &x1, &y1);
UI_view2d_view_to_region(&ar->v2d, 1.0f, 1.0f, &x2, &y2);
- glRectf(x1, y1, x2, y2);
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformThemeColorShade(TH_BACK, 20);
+ immRectf(pos, x1, y1, x2, y2);
+ immUnbindProgram();
/* gridsize adapted to zoom level */
gridsize = 0.5f * (zoomx + zoomy);
@@ -2374,33 +2527,52 @@ void ED_region_grid_draw(ARegion *ar, float zoomx, float zoomy)
}
}
- /* the fine resolution level */
blendfac = 0.25f * gridsize - floorf(0.25f * gridsize);
CLAMP(blendfac, 0.0f, 1.0f);
- UI_ThemeColorShade(TH_BACK, (int)(20.0f * (1.0f - blendfac)));
- fac = 0.0f;
- glBegin(GL_LINES);
- while (fac < 1.0f) {
- glVertex2f(x1, y1 * (1.0f - fac) + y2 * fac);
- glVertex2f(x2, y1 * (1.0f - fac) + y2 * fac);
- glVertex2f(x1 * (1.0f - fac) + x2 * fac, y1);
- glVertex2f(x1 * (1.0f - fac) + x2 * fac, y2);
- fac += gridstep;
- }
+ int count_fine = 1.0f / gridstep;
+ int count_large = 1.0f / (4.0f * gridstep);
+
+ if (count_fine > 0) {
+ GWN_vertformat_clear(format);
+ pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned color = GWN_vertformat_attr_add(format, "color", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_FLAT_COLOR);
+ immBegin(GWN_PRIM_LINES, 4 * count_fine + 4 * count_large);
+
+ float theme_color[3];
+ UI_GetThemeColorShade3fv(TH_BACK, (int)(20.0f * (1.0f - blendfac)), theme_color);
+ immAttrib3fv(color, theme_color);
+ fac = 0.0f;
+
+ /* the fine resolution level */
+ for (int i = 0; i < count_fine; i++) {
+ immVertex2f(pos, x1, y1 * (1.0f - fac) + y2 * fac);
+ immVertex2f(pos, x2, y1 * (1.0f - fac) + y2 * fac);
+ immVertex2f(pos, x1 * (1.0f - fac) + x2 * fac, y1);
+ immVertex2f(pos, x1 * (1.0f - fac) + x2 * fac, y2);
+ fac += gridstep;
+ }
- /* the large resolution level */
- UI_ThemeColor(TH_BACK);
+ if (count_large > 0) {
+ UI_GetThemeColor3fv(TH_BACK, theme_color);
+ immAttrib3fv(color, theme_color);
+ fac = 0.0f;
+
+ /* the large resolution level */
+ for (int i = 0; i < count_large; i++) {
+ immVertex2f(pos, x1, y1 * (1.0f - fac) + y2 * fac);
+ immVertex2f(pos, x2, y1 * (1.0f - fac) + y2 * fac);
+ immVertex2f(pos, x1 * (1.0f - fac) + x2 * fac, y1);
+ immVertex2f(pos, x1 * (1.0f - fac) + x2 * fac, y2);
+ fac += 4.0f * gridstep;
+ }
+ }
- fac = 0.0f;
- while (fac < 1.0f) {
- glVertex2f(x1, y1 * (1.0f - fac) + y2 * fac);
- glVertex2f(x2, y1 * (1.0f - fac) + y2 * fac);
- glVertex2f(x1 * (1.0f - fac) + x2 * fac, y1);
- glVertex2f(x1 * (1.0f - fac) + x2 * fac, y2);
- fac += 4.0f * gridstep;
+ immEnd();
+ immUnbindProgram();
}
- glEnd();
}
/* If the area has overlapping regions, it returns visible rect for Region *ar */
@@ -2437,8 +2609,11 @@ void ED_region_visible_rect(ARegion *ar, rcti *rect)
void ED_region_cache_draw_background(const ARegion *ar)
{
- glColor4ub(128, 128, 255, 64);
- glRecti(0, 0, ar->winx, 8 * UI_DPI_FAC);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor4ub(128, 128, 255, 64);
+ immRecti(pos, 0, 0, ar->winx, 8 * UI_DPI_FAC);
+ immUnbindProgram();
}
void ED_region_cache_draw_curfra_label(const int framenr, const float x, const float y)
@@ -2454,9 +2629,13 @@ void ED_region_cache_draw_curfra_label(const int framenr, const float x, const f
BLF_width_and_height(fontid, numstr, sizeof(numstr), &font_dims[0], &font_dims[1]);
- glRecti(x, y, x + font_dims[0] + 6.0f, y + font_dims[1] + 4.0f);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformThemeColor(TH_CFRAME);
+ immRecti(pos, x, y, x + font_dims[0] + 6.0f, y + font_dims[1] + 4.0f);
+ immUnbindProgram();
- UI_ThemeColor(TH_TEXT);
+ UI_FontThemeColor(fontid, TH_TEXT);
BLF_position(fontid, x + 2.0f, y + 2.0f, 0.0f);
BLF_draw(fontid, numstr, sizeof(numstr));
}
@@ -2464,17 +2643,40 @@ void ED_region_cache_draw_curfra_label(const int framenr, const float x, const f
void ED_region_cache_draw_cached_segments(const ARegion *ar, const int num_segments, const int *points, const int sfra, const int efra)
{
if (num_segments) {
- int a;
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor4ub(128, 128, 255, 128);
- glColor4ub(128, 128, 255, 128);
+ for (int a = 0; a < num_segments; a++) {
+ float x1 = (float)(points[a * 2] - sfra) / (efra - sfra + 1) * ar->winx;
+ float x2 = (float)(points[a * 2 + 1] - sfra + 1) / (efra - sfra + 1) * ar->winx;
- for (a = 0; a < num_segments; a++) {
- float x1, x2;
+ immRecti(pos, x1, 0, x2, 8 * UI_DPI_FAC);
+ /* TODO(merwin): use primitive restart to draw multiple rects more efficiently */
+ }
- x1 = (float)(points[a * 2] - sfra) / (efra - sfra + 1) * ar->winx;
- x2 = (float)(points[a * 2 + 1] - sfra + 1) / (efra - sfra + 1) * ar->winx;
+ immUnbindProgram();
+ }
+}
- glRecti(x1, 0, x2, 8 * UI_DPI_FAC);
- }
+/**
+ * Generate subscriptions for this region.
+ */
+void ED_region_message_subscribe(
+ bContext *C,
+ struct WorkSpace *workspace, struct Scene *scene,
+ struct bScreen *screen, struct ScrArea *sa, struct ARegion *ar,
+ struct wmMsgBus *mbus)
+{
+ if (ar->manipulator_map != NULL) {
+ WM_manipulatormap_message_subscribe(C, ar->manipulator_map, ar, mbus);
+ }
+
+ if (BLI_listbase_is_empty(&ar->uiblocks)) {
+ UI_region_message_subscribe(ar, mbus);
+ }
+
+ if (ar->type->message_subscribe != NULL) {
+ ar->type->message_subscribe(C, workspace, scene, screen, sa, ar, mbus);
}
}
diff --git a/source/blender/editors/screen/glutil.c b/source/blender/editors/screen/glutil.c
index 216cbe9d7f4..7ce16efdb97 100644
--- a/source/blender/editors/screen/glutil.c
+++ b/source/blender/editors/screen/glutil.c
@@ -49,133 +49,11 @@
#include "IMB_imbuf_types.h"
#include "GPU_basic_shader.h"
+#include "GPU_immediate.h"
+#include "GPU_matrix.h"
#include "UI_interface.h"
-#ifndef GL_CLAMP_TO_EDGE
-#define GL_CLAMP_TO_EDGE 0x812F
-#endif
-
-/* UNUSED */
-#if 0
-void fdrawbezier(float vec[4][3])
-{
- float dist;
- float curve_res = 24, spline_step = 0.0f;
-
- dist = 0.5f * fabsf(vec[0][0] - vec[3][0]);
-
- /* check direction later, for top sockets */
- vec[1][0] = vec[0][0] + dist;
- vec[1][1] = vec[0][1];
-
- vec[2][0] = vec[3][0] - dist;
- vec[2][1] = vec[3][1];
- /* we can reuse the dist variable here to increment the GL curve eval amount */
- dist = 1.0f / curve_res;
-
- cpack(0x0);
- glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, vec[0]);
- glBegin(GL_LINE_STRIP);
- while (spline_step < 1.000001f) {
-#if 0
- if (do_shaded)
- UI_ThemeColorBlend(th_col1, th_col2, spline_step);
-#endif
- glEvalCoord1f(spline_step);
- spline_step += dist;
- }
- glEnd();
-}
-#endif
-
-void fdrawline(float x1, float y1, float x2, float y2)
-{
- glBegin(GL_LINES);
- glVertex2f(x1, y1);
- glVertex2f(x2, y2);
- glEnd();
-}
-
-void fdrawbox(float x1, float y1, float x2, float y2)
-{
- glBegin(GL_LINE_LOOP);
-
- glVertex2f(x1, y1);
- glVertex2f(x1, y2);
- glVertex2f(x2, y2);
- glVertex2f(x2, y1);
-
- glEnd();
-}
-
-void fdrawcheckerboard(float x1, float y1, float x2, float y2)
-{
- unsigned char col1[4] = {40, 40, 40}, col2[4] = {50, 50, 50};
-
- glColor3ubv(col1);
- glRectf(x1, y1, x2, y2);
- glColor3ubv(col2);
-
- GPU_basic_shader_bind(GPU_SHADER_STIPPLE | GPU_SHADER_USE_COLOR);
- GPU_basic_shader_stipple(GPU_SHADER_STIPPLE_CHECKER_8PX);
- glRectf(x1, y1, x2, y2);
- GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
-}
-
-void sdrawline(int x1, int y1, int x2, int y2)
-{
- glBegin(GL_LINES);
- glVertex2i(x1, y1);
- glVertex2i(x2, y2);
- glEnd();
-}
-
-/* UNUSED */
-#if 0
-/*
- * x1,y2
- * | \
- * | \
- * | \
- * x1,y1-- x2,y1
- */
-
-static void sdrawtripoints(int x1, int y1, int x2, int y2)
-{
- glVertex2i(x1, y1);
- glVertex2i(x1, y2);
- glVertex2i(x2, y1);
-}
-
-void sdrawtri(int x1, int y1, int x2, int y2)
-{
- glBegin(GL_LINE_STRIP);
- sdrawtripoints(x1, y1, x2, y2);
- glEnd();
-}
-
-void sdrawtrifill(int x1, int y1, int x2, int y2)
-{
- glBegin(GL_TRIANGLES);
- sdrawtripoints(x1, y1, x2, y2);
- glEnd();
-}
-#endif
-
-void sdrawbox(int x1, int y1, int x2, int y2)
-{
- glBegin(GL_LINE_LOOP);
-
- glVertex2i(x1, y1);
- glVertex2i(x1, y2);
- glVertex2i(x2, y2);
- glVertex2i(x2, y1);
-
- glEnd();
-}
-
-
/* ******************************************** */
void setlinestyle(int nr)
@@ -204,122 +82,6 @@ void set_inverted_drawing(int enable)
GL_TOGGLE(GL_DITHER, !enable);
}
-/* UNUSED */
-#if 0
-void sdrawXORline(int x0, int y0, int x1, int y1)
-{
- if (x0 == x1 && y0 == y1) return;
-
- set_inverted_drawing(1);
-
- glBegin(GL_LINES);
- glVertex2i(x0, y0);
- glVertex2i(x1, y1);
- glEnd();
-
- set_inverted_drawing(0);
-}
-
-void sdrawXORline4(int nr, int x0, int y0, int x1, int y1)
-{
- static int old[4][2][2];
- static char flags[4] = {0, 0, 0, 0};
-
- /* with builtin memory, max 4 lines */
-
- set_inverted_drawing(1);
-
- glBegin(GL_LINES);
- if (nr == -1) { /* flush */
- for (nr = 0; nr < 4; nr++) {
- if (flags[nr]) {
- glVertex2iv(old[nr][0]);
- glVertex2iv(old[nr][1]);
- flags[nr] = 0;
- }
- }
- }
- else {
- if (nr >= 0 && nr < 4) {
- if (flags[nr]) {
- glVertex2iv(old[nr][0]);
- glVertex2iv(old[nr][1]);
- }
-
- old[nr][0][0] = x0;
- old[nr][0][1] = y0;
- old[nr][1][0] = x1;
- old[nr][1][1] = y1;
-
- flags[nr] = 1;
- }
-
- glVertex2i(x0, y0);
- glVertex2i(x1, y1);
- }
- glEnd();
-
- set_inverted_drawing(0);
-}
-
-void fdrawXORellipse(float xofs, float yofs, float hw, float hh)
-{
- if (hw == 0) return;
-
- set_inverted_drawing(1);
-
- glPushMatrix();
- glTranslatef(xofs, yofs, 0.0f);
- glScalef(1.0f, hh / hw, 1.0f);
- glutil_draw_lined_arc(0.0, M_PI * 2.0, hw, 20);
- glPopMatrix();
-
- set_inverted_drawing(0);
-}
-
-#endif
-
-void fdrawXORcirc(float xofs, float yofs, float rad)
-{
- set_inverted_drawing(1);
-
- glPushMatrix();
- glTranslatef(xofs, yofs, 0.0);
- glutil_draw_lined_arc(0.0, M_PI * 2.0, rad, 20);
- glPopMatrix();
-
- set_inverted_drawing(0);
-}
-
-void glutil_draw_filled_arc(float start, float angle, float radius, int nsegments)
-{
- int i;
-
- glBegin(GL_TRIANGLE_FAN);
- glVertex2f(0.0, 0.0);
- for (i = 0; i < nsegments; i++) {
- float t = (float) i / (nsegments - 1);
- float cur = start + t * angle;
-
- glVertex2f(cosf(cur) * radius, sinf(cur) * radius);
- }
- glEnd();
-}
-
-void glutil_draw_lined_arc(float start, float angle, float radius, int nsegments)
-{
- int i;
-
- glBegin(GL_LINE_STRIP);
- for (i = 0; i < nsegments; i++) {
- float t = (float) i / (nsegments - 1);
- float cur = start + t * angle;
-
- glVertex2f(cosf(cur) * radius, sinf(cur) * radius);
- }
- glEnd();
-}
-
float glaGetOneFloat(int param)
{
GLfloat v;
@@ -375,24 +137,66 @@ static int get_cached_work_texture(int *r_w, int *r_h)
return texid;
}
-void glaDrawPixelsTexScaled_clipping(float x, float y, int img_w, int img_h,
+static void immDrawPixelsTexSetupAttributes(IMMDrawPixelsTexState *state)
+{
+ Gwn_VertFormat *vert_format = immVertexFormat();
+ state->pos = GWN_vertformat_attr_add(vert_format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ state->texco = GWN_vertformat_attr_add(vert_format, "texCoord", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+}
+
+/* To be used before calling immDrawPixelsTex
+ * Default shader is GPU_SHADER_2D_IMAGE_COLOR
+ * You can still set uniforms with :
+ * GPU_shader_uniform_int(shader, GPU_shader_get_uniform(shader, "name"), 0);
+ * */
+IMMDrawPixelsTexState immDrawPixelsTexSetup(int builtin)
+{
+ IMMDrawPixelsTexState state;
+ immDrawPixelsTexSetupAttributes(&state);
+
+ state.shader = GPU_shader_get_builtin_shader(builtin);
+
+ /* Shader will be unbind by immUnbindProgram in immDrawPixelsTexScaled_clipping */
+ immBindBuiltinProgram(builtin);
+ immUniform1i("image", 0);
+ state.do_shader_unbind = true;
+
+ return state;
+}
+
+/* Use the currently bound shader.
+ *
+ * Use immDrawPixelsTexSetup to bind the shader you
+ * want before calling immDrawPixelsTex.
+ *
+ * If using a special shader double check it uses the same
+ * attributes "pos" "texCoord" and uniform "image".
+ *
+ * If color is NULL then use white by default
+ *
+ * Be also aware that this function unbinds the shader when
+ * it's finished.
+ * */
+void immDrawPixelsTexScaled_clipping(IMMDrawPixelsTexState *state,
+ float x, float y, int img_w, int img_h,
int format, int type, int zoomfilter, void *rect,
float scaleX, float scaleY,
float clip_min_x, float clip_min_y,
- float clip_max_x, float clip_max_y)
+ float clip_max_x, float clip_max_y,
+ float xzoom, float yzoom, float color[4])
{
unsigned char *uc_rect = (unsigned char *) rect;
const float *f_rect = (float *)rect;
- float xzoom = glaGetOneFloat(GL_ZOOM_X), yzoom = glaGetOneFloat(GL_ZOOM_Y);
int subpart_x, subpart_y, tex_w, tex_h;
int seamless, offset_x, offset_y, nsubparts_x, nsubparts_y;
int texid = get_cached_work_texture(&tex_w, &tex_h);
int components;
const bool use_clipping = ((clip_min_x < clip_max_x) && (clip_min_y < clip_max_y));
+ float white[4] = {1.0f, 1.0f, 1.0f, 1.0f};
+
+ GLint unpack_row_length;
+ glGetIntegerv(GL_UNPACK_ROW_LENGTH, &unpack_row_length);
- /* Specify the color outside this function, and tex will modulate it.
- * This is useful for changing alpha without using glPixelTransferf()
- */
glPixelStorei(GL_UNPACK_ROW_LENGTH, img_w);
glBindTexture(GL_TEXTURE_2D, texid);
@@ -401,18 +205,12 @@ void glaDrawPixelsTexScaled_clipping(float x, float y, int img_w, int img_h,
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, zoomfilter);
-#if defined(__APPLE__) && 0
- /* [merwin] disable this workaround and see if anyone is affected. If not scrap it! Also at end of this function */
- /* workaround for os x 10.5/10.6 driver bug: http://lists.apple.com/archives/Mac-opengl/2008/Jul/msg00117.html */
- glPixelZoom(1.0f, 1.0f);
-#endif
-
/* setup seamless 2=on, 0=off */
seamless = ((tex_w < img_w || tex_h < img_h) && tex_w > 2 && tex_h > 2) ? 2 : 0;
-
+
offset_x = tex_w - seamless;
offset_y = tex_h - seamless;
-
+
nsubparts_x = (img_w + (offset_x - 1)) / (offset_x);
nsubparts_y = (img_h + (offset_y - 1)) / (offset_y);
@@ -420,7 +218,7 @@ void glaDrawPixelsTexScaled_clipping(float x, float y, int img_w, int img_h,
components = 4;
else if (format == GL_RGB)
components = 3;
- else if (ELEM(format, GL_LUMINANCE, GL_ALPHA))
+ else if (format == GL_RED)
components = 1;
else {
BLI_assert(!"Incompatible format passed to glaDrawPixelsTexScaled");
@@ -436,6 +234,7 @@ void glaDrawPixelsTexScaled_clipping(float x, float y, int img_w, int img_h,
* it's possible to use GL_RGBA16F_ARB
*/
+ /* TODO viewport : remove extension */
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F_ARB, tex_w, tex_h, 0, format, GL_FLOAT, NULL);
}
else {
@@ -443,6 +242,16 @@ void glaDrawPixelsTexScaled_clipping(float x, float y, int img_w, int img_h,
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, tex_w, tex_h, 0, format, GL_UNSIGNED_BYTE, NULL);
}
+ unsigned int pos = state->pos, texco = state->texco;
+
+ /* optional */
+ /* NOTE: Shader could be null for GLSL OCIO drawing, it is fine, since
+ * it does not need color.
+ */
+ if (state->shader != NULL && GPU_shader_get_uniform(state->shader, "color") != -1) {
+ immUniformColor4fv((color) ? color : white);
+ }
+
for (subpart_y = 0; subpart_y < nsubparts_y; subpart_y++) {
for (subpart_x = 0; subpart_x < nsubparts_x; subpart_x++) {
int remainder_x = img_w - subpart_x * offset_x;
@@ -474,7 +283,7 @@ void glaDrawPixelsTexScaled_clipping(float x, float y, int img_w, int img_h,
if (type == GL_FLOAT) {
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, subpart_w, subpart_h, format, GL_FLOAT, &f_rect[((size_t)subpart_y) * offset_y * img_w * components + subpart_x * offset_x * components]);
-
+
/* add an extra border of pixels so linear looks ok at edges of full image */
if (subpart_w < tex_w)
glTexSubImage2D(GL_TEXTURE_2D, 0, subpart_w, 0, 1, subpart_h, format, GL_FLOAT, &f_rect[((size_t)subpart_y) * offset_y * img_w * components + (subpart_x * offset_x + subpart_w - 1) * components]);
@@ -485,7 +294,7 @@ void glaDrawPixelsTexScaled_clipping(float x, float y, int img_w, int img_h,
}
else {
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, subpart_w, subpart_h, format, GL_UNSIGNED_BYTE, &uc_rect[((size_t)subpart_y) * offset_y * img_w * components + subpart_x * offset_x * components]);
-
+
if (subpart_w < tex_w)
glTexSubImage2D(GL_TEXTURE_2D, 0, subpart_w, 0, 1, subpart_h, format, GL_UNSIGNED_BYTE, &uc_rect[((size_t)subpart_y) * offset_y * img_w * components + (subpart_x * offset_x + subpart_w - 1) * components]);
if (subpart_h < tex_h)
@@ -494,158 +303,55 @@ void glaDrawPixelsTexScaled_clipping(float x, float y, int img_w, int img_h,
glTexSubImage2D(GL_TEXTURE_2D, 0, subpart_w, subpart_h, 1, 1, format, GL_UNSIGNED_BYTE, &uc_rect[(((size_t)subpart_y) * offset_y + subpart_h - 1) * img_w * components + (subpart_x * offset_x + subpart_w - 1) * components]);
}
- GPU_basic_shader_bind(GPU_SHADER_TEXTURE_2D | GPU_SHADER_USE_COLOR);
- glBegin(GL_QUADS);
- glTexCoord2f((float)(0 + offset_left) / tex_w, (float)(0 + offset_bot) / tex_h);
- glVertex2f(rast_x + (float)offset_left * xzoom, rast_y + (float)offset_bot * yzoom);
+ immBegin(GWN_PRIM_TRI_FAN, 4);
+ immAttrib2f(texco, (float)(0 + offset_left) / tex_w, (float)(0 + offset_bot) / tex_h);
+ immVertex2f(pos, rast_x + (float)offset_left * xzoom, rast_y + (float)offset_bot * yzoom);
- glTexCoord2f((float)(subpart_w - offset_right) / tex_w, (float)(0 + offset_bot) / tex_h);
- glVertex2f(rast_x + (float)(subpart_w - offset_right) * xzoom * scaleX, rast_y + (float)offset_bot * yzoom);
+ immAttrib2f(texco, (float)(subpart_w - offset_right) / tex_w, (float)(0 + offset_bot) / tex_h);
+ immVertex2f(pos, rast_x + (float)(subpart_w - offset_right) * xzoom * scaleX, rast_y + (float)offset_bot * yzoom);
- glTexCoord2f((float)(subpart_w - offset_right) / tex_w, (float)(subpart_h - offset_top) / tex_h);
- glVertex2f(rast_x + (float)(subpart_w - offset_right) * xzoom * scaleX, rast_y + (float)(subpart_h - offset_top) * yzoom * scaleY);
+ immAttrib2f(texco, (float)(subpart_w - offset_right) / tex_w, (float)(subpart_h - offset_top) / tex_h);
+ immVertex2f(pos, rast_x + (float)(subpart_w - offset_right) * xzoom * scaleX, rast_y + (float)(subpart_h - offset_top) * yzoom * scaleY);
- glTexCoord2f((float)(0 + offset_left) / tex_w, (float)(subpart_h - offset_top) / tex_h);
- glVertex2f(rast_x + (float)offset_left * xzoom, rast_y + (float)(subpart_h - offset_top) * yzoom * scaleY);
- glEnd();
- GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
+ immAttrib2f(texco, (float)(0 + offset_left) / tex_w, (float)(subpart_h - offset_top) / tex_h);
+ immVertex2f(pos, rast_x + (float)offset_left * xzoom, rast_y + (float)(subpart_h - offset_top) * yzoom * scaleY);
+ immEnd();
}
}
+ if (state->do_shader_unbind) {
+ immUnbindProgram();
+ }
+
glBindTexture(GL_TEXTURE_2D, 0);
- glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
-
-#if defined(__APPLE__) && 0
- /* workaround for os x 10.5/10.6 driver bug (above) */
- glPixelZoom(xzoom, yzoom);
-#endif
+ glPixelStorei(GL_UNPACK_ROW_LENGTH, unpack_row_length);
}
-void glaDrawPixelsTexScaled(float x, float y, int img_w, int img_h,
+void immDrawPixelsTexScaled(IMMDrawPixelsTexState *state,
+ float x, float y, int img_w, int img_h,
int format, int type, int zoomfilter, void *rect,
- float scaleX, float scaleY)
+ float scaleX, float scaleY, float xzoom, float yzoom, float color[4])
{
- glaDrawPixelsTexScaled_clipping(x, y, img_w, img_h, format, type, zoomfilter, rect,
- scaleX, scaleY, 0.0f, 0.0f, 0.0f, 0.0f);
+ immDrawPixelsTexScaled_clipping(state, x, y, img_w, img_h, format, type, zoomfilter, rect,
+ scaleX, scaleY, 0.0f, 0.0f, 0.0f, 0.0f, xzoom, yzoom, color);
}
-void glaDrawPixelsTex(float x, float y, int img_w, int img_h, int format, int type, int zoomfilter, void *rect)
+void immDrawPixelsTex(IMMDrawPixelsTexState *state,
+ float x, float y, int img_w, int img_h, int format, int type, int zoomfilter, void *rect,
+ float xzoom, float yzoom, float color[4])
{
- glaDrawPixelsTexScaled_clipping(x, y, img_w, img_h, format, type, zoomfilter, rect, 1.0f, 1.0f,
- 0.0f, 0.0f, 0.0f, 0.0f);
+ immDrawPixelsTexScaled_clipping(state, x, y, img_w, img_h, format, type, zoomfilter, rect, 1.0f, 1.0f,
+ 0.0f, 0.0f, 0.0f, 0.0f, xzoom, yzoom, color);
}
-void glaDrawPixelsTex_clipping(float x, float y, int img_w, int img_h,
+void immDrawPixelsTex_clipping(IMMDrawPixelsTexState *state,
+ float x, float y, int img_w, int img_h,
int format, int type, int zoomfilter, void *rect,
- float clip_min_x, float clip_min_y, float clip_max_x, float clip_max_y)
-{
- glaDrawPixelsTexScaled_clipping(x, y, img_w, img_h, format, type, zoomfilter, rect, 1.0f, 1.0f,
- clip_min_x, clip_min_y, clip_max_x, clip_max_y);
-}
-
-void glaDrawPixelsSafe(float x, float y, int img_w, int img_h, int row_w, int format, int type, void *rect)
-{
- float xzoom = glaGetOneFloat(GL_ZOOM_X);
- float yzoom = glaGetOneFloat(GL_ZOOM_Y);
-
- /* The pixel space coordinate of the intersection of
- * the [zoomed] image with the origin.
- */
- float ix = -x / xzoom;
- float iy = -y / yzoom;
-
- /* The maximum pixel amounts the image can be cropped
- * at the lower left without exceeding the origin.
- */
- int off_x = floor(max_ff(ix, 0.0f));
- int off_y = floor(max_ff(iy, 0.0f));
-
- /* The zoomed space coordinate of the raster position
- * (starting at the lower left most unclipped pixel).
- */
- float rast_x = x + off_x * xzoom;
- float rast_y = y + off_y * yzoom;
-
- GLfloat viewport[4];
- int draw_w, draw_h;
-
- /* Determine the smallest number of pixels we need to draw
- * before the image would go off the upper right corner.
- *
- * It may seem this is just an optimization but some graphics
- * cards (ATI) freak out if there is a large zoom factor and
- * a large number of pixels off the screen (probably at some
- * level the number of image pixels to draw is getting multiplied
- * by the zoom and then clamped). Making sure we draw the
- * fewest pixels possible keeps everyone mostly happy (still
- * fails if we zoom in on one really huge pixel so that it
- * covers the entire screen).
- */
- glGetFloatv(GL_VIEWPORT, viewport);
- draw_w = min_ii(img_w - off_x, ceil((viewport[2] - rast_x) / xzoom));
- draw_h = min_ii(img_h - off_y, ceil((viewport[3] - rast_y) / yzoom));
-
- if (draw_w > 0 && draw_h > 0) {
-
- int bound_options;
- GPU_BASIC_SHADER_DISABLE_AND_STORE(bound_options);
-
- /* Don't use safe RasterPos (slower) if we can avoid it. */
- if (rast_x >= 0 && rast_y >= 0) {
- glRasterPos2f(rast_x, rast_y);
- }
- else {
- glaRasterPosSafe2f(rast_x, rast_y, 0, 0);
- }
-
- glPixelStorei(GL_UNPACK_ROW_LENGTH, row_w);
- if (format == GL_LUMINANCE || format == GL_RED) {
- if (type == GL_FLOAT) {
- const float *f_rect = (float *)rect;
- glDrawPixels(draw_w, draw_h, format, type, f_rect + (off_y * row_w + off_x));
- }
- else if (type == GL_INT || type == GL_UNSIGNED_INT) {
- const int *i_rect = (int *)rect;
- glDrawPixels(draw_w, draw_h, format, type, i_rect + (off_y * row_w + off_x));
- }
- }
- else { /* RGBA */
- if (type == GL_FLOAT) {
- const float *f_rect = (float *)rect;
- glDrawPixels(draw_w, draw_h, format, type, f_rect + (off_y * row_w + off_x) * 4);
- }
- else if (type == GL_UNSIGNED_BYTE) {
- unsigned char *uc_rect = (unsigned char *) rect;
- glDrawPixels(draw_w, draw_h, format, type, uc_rect + (off_y * row_w + off_x) * 4);
- }
- }
-
- glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
-
- GPU_BASIC_SHADER_ENABLE_AND_RESTORE(bound_options);
- }
-}
-
-/* uses either DrawPixelsSafe or DrawPixelsTex, based on user defined maximum */
-void glaDrawPixelsAuto_clipping(float x, float y, int img_w, int img_h,
- int format, int type, int zoomfilter, void *rect,
- float clip_min_x, float clip_min_y,
- float clip_max_x, float clip_max_y)
+ float clip_min_x, float clip_min_y, float clip_max_x, float clip_max_y,
+ float xzoom, float yzoom, float color[4])
{
- if (U.image_draw_method != IMAGE_DRAW_METHOD_DRAWPIXELS) {
- glColor4f(1.0, 1.0, 1.0, 1.0);
- glaDrawPixelsTex_clipping(x, y, img_w, img_h, format, type, zoomfilter, rect,
- clip_min_x, clip_min_y, clip_max_x, clip_max_y);
- }
- else {
- glaDrawPixelsSafe(x, y, img_w, img_h, img_w, format, type, rect);
- }
-}
-
-void glaDrawPixelsAuto(float x, float y, int img_w, int img_h, int format, int type, int zoomfilter, void *rect)
-{
- glaDrawPixelsAuto_clipping(x, y, img_w, img_h, format, type, zoomfilter, rect,
- 0.0f, 0.0f, 0.0f, 0.0f);
+ immDrawPixelsTexScaled_clipping(state, x, y, img_w, img_h, format, type, zoomfilter, rect, 1.0f, 1.0f,
+ clip_min_x, clip_min_y, clip_max_x, clip_max_y, xzoom, yzoom, color);
}
/* 2D Drawing Assistance */
@@ -664,15 +370,12 @@ void glaDefine2DArea(rcti *screen_rect)
* Programming Guide, Appendix H, Correctness Tips.
*/
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glOrtho(0.0, sc_w, 0.0, sc_h, -1, 1);
- glTranslatef(GLA_PIXEL_OFS, GLA_PIXEL_OFS, 0.0);
-
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
+ gpuOrtho2D(GLA_PIXEL_OFS, sc_w + GLA_PIXEL_OFS, GLA_PIXEL_OFS, sc_h + GLA_PIXEL_OFS);
+ gpuLoadIdentity();
}
+/* TODO(merwin): put the following 2D code to use, or build new 2D code inspired & informd by it */
+
#if 0 /* UNUSED */
struct gla2DDrawInfo {
@@ -726,8 +429,8 @@ gla2DDrawInfo *glaBegin2DDraw(rcti *screen_rect, rctf *world_rect)
glGetIntegerv(GL_VIEWPORT, (GLint *)di->orig_vp);
glGetIntegerv(GL_SCISSOR_BOX, (GLint *)di->orig_sc);
- glGetFloatv(GL_PROJECTION_MATRIX, (GLfloat *)di->orig_projmat);
- glGetFloatv(GL_MODELVIEW_MATRIX, (GLfloat *)di->orig_viewmat);
+ gpuGetProjectionMatrix(di->orig_projmat);
+ gpuGetModelViewMatrix(di->orig_viewmat);
di->screen_rect = *screen_rect;
if (world_rect) {
@@ -778,42 +481,14 @@ void glaEnd2DDraw(gla2DDrawInfo *di)
{
glViewport(di->orig_vp[0], di->orig_vp[1], di->orig_vp[2], di->orig_vp[3]);
glScissor(di->orig_vp[0], di->orig_vp[1], di->orig_vp[2], di->orig_vp[3]);
- glMatrixMode(GL_PROJECTION);
- glLoadMatrixf(di->orig_projmat);
- glMatrixMode(GL_MODELVIEW);
- glLoadMatrixf(di->orig_viewmat);
+ gpuLoadProjectionMatrix(di->orig_projmat);
+ gpuLoadMatrix(di->orig_viewmat);
MEM_freeN(di);
}
-#endif
+#endif /* UNUSED */
-/* Uses current OpenGL state to get view matrices for gluProject/gluUnProject */
-void bgl_get_mats(bglMats *mats)
-{
- const double badvalue = 1.0e-6;
-
- glGetDoublev(GL_MODELVIEW_MATRIX, mats->modelview);
- glGetDoublev(GL_PROJECTION_MATRIX, mats->projection);
- glGetIntegerv(GL_VIEWPORT, (GLint *)mats->viewport);
-
- /* Very strange code here - it seems that certain bad values in the
- * modelview matrix can cause gluUnProject to give bad results. */
- if (mats->modelview[0] < badvalue &&
- mats->modelview[0] > -badvalue)
- {
- mats->modelview[0] = 0;
- }
- if (mats->modelview[5] < badvalue &&
- mats->modelview[5] > -badvalue)
- {
- mats->modelview[5] = 0;
- }
-
- /* Set up viewport so that gluUnProject will give correct values */
- mats->viewport[0] = 0;
- mats->viewport[1] = 0;
-}
/* *************** glPolygonOffset hack ************* */
@@ -831,8 +506,7 @@ void bglPolygonOffset(float viewdist, float dist)
// glPolygonOffset(-1.0, -1.0);
/* hack below is to mimic polygon offset */
- glMatrixMode(GL_PROJECTION);
- glGetFloatv(GL_PROJECTION_MATRIX, (float *)winmat);
+ gpuGetProjectionMatrix(winmat);
/* dist is from camera to center point */
@@ -863,17 +537,13 @@ void bglPolygonOffset(float viewdist, float dist)
winmat[14] -= offs;
offset += offs;
-
- glLoadMatrixf(winmat);
- glMatrixMode(GL_MODELVIEW);
}
else {
- glMatrixMode(GL_PROJECTION);
winmat[14] += offset;
offset = 0.0;
- glLoadMatrixf(winmat);
- glMatrixMode(GL_MODELVIEW);
}
+
+ gpuLoadProjectionMatrix(winmat);
}
/* **** Color management helper functions for GLSL display/transform ***** */
@@ -883,7 +553,8 @@ void glaDrawImBuf_glsl_clipping(ImBuf *ibuf, float x, float y, int zoomfilter,
ColorManagedViewSettings *view_settings,
ColorManagedDisplaySettings *display_settings,
float clip_min_x, float clip_min_y,
- float clip_max_x, float clip_max_y)
+ float clip_max_x, float clip_max_y,
+ float zoom_x, float zoom_y)
{
bool force_fallback = false;
bool need_fallback = true;
@@ -902,6 +573,11 @@ void glaDrawImBuf_glsl_clipping(ImBuf *ibuf, float x, float y, int zoomfilter,
if (force_fallback == false) {
int ok;
+ IMMDrawPixelsTexState state = {0};
+ /* We want GLSL state to be fully handled by OCIO. */
+ state.do_shader_unbind = false;
+ immDrawPixelsTexSetupAttributes(&state);
+
if (ibuf->rect_float) {
if (ibuf->float_colorspace) {
ok = IMB_colormanagement_setup_glsl_draw_from_space(view_settings, display_settings,
@@ -920,8 +596,6 @@ void glaDrawImBuf_glsl_clipping(ImBuf *ibuf, float x, float y, int zoomfilter,
}
if (ok) {
- glColor4f(1.0, 1.0, 1.0, 1.0);
-
if (ibuf->rect_float) {
int format = 0;
@@ -933,16 +607,20 @@ void glaDrawImBuf_glsl_clipping(ImBuf *ibuf, float x, float y, int zoomfilter,
BLI_assert(!"Incompatible number of channels for GLSL display");
if (format != 0) {
- glaDrawPixelsTex_clipping(x, y, ibuf->x, ibuf->y, format, GL_FLOAT,
+ immDrawPixelsTex_clipping(&state,
+ x, y, ibuf->x, ibuf->y, format, GL_FLOAT,
zoomfilter, ibuf->rect_float,
- clip_min_x, clip_min_y, clip_max_x, clip_max_y);
+ clip_min_x, clip_min_y, clip_max_x, clip_max_y,
+ zoom_x, zoom_y, NULL);
}
}
else if (ibuf->rect) {
/* ibuf->rect is always RGBA */
- glaDrawPixelsTex_clipping(x, y, ibuf->x, ibuf->y, GL_RGBA, GL_UNSIGNED_BYTE,
+ immDrawPixelsTex_clipping(&state,
+ x, y, ibuf->x, ibuf->y, GL_RGBA, GL_UNSIGNED_BYTE,
zoomfilter, ibuf->rect,
- clip_min_x, clip_min_y, clip_max_x, clip_max_y);
+ clip_min_x, clip_min_y, clip_max_x, clip_max_y,
+ zoom_x, zoom_y, NULL);
}
IMB_colormanagement_finish_glsl_draw();
@@ -959,9 +637,12 @@ void glaDrawImBuf_glsl_clipping(ImBuf *ibuf, float x, float y, int zoomfilter,
display_buffer = IMB_display_buffer_acquire(ibuf, view_settings, display_settings, &cache_handle);
if (display_buffer) {
- glaDrawPixelsAuto_clipping(x, y, ibuf->x, ibuf->y, GL_RGBA, GL_UNSIGNED_BYTE,
- zoomfilter, display_buffer,
- clip_min_x, clip_min_y, clip_max_x, clip_max_y);
+ IMMDrawPixelsTexState state = immDrawPixelsTexSetup(GPU_SHADER_2D_IMAGE_COLOR);
+ immDrawPixelsTex_clipping(&state,
+ x, y, ibuf->x, ibuf->y, GL_RGBA, GL_UNSIGNED_BYTE,
+ zoomfilter, display_buffer,
+ clip_min_x, clip_min_y, clip_max_x, clip_max_y,
+ zoom_x, zoom_y, NULL);
}
IMB_display_buffer_release(cache_handle);
@@ -970,10 +651,11 @@ void glaDrawImBuf_glsl_clipping(ImBuf *ibuf, float x, float y, int zoomfilter,
void glaDrawImBuf_glsl(ImBuf *ibuf, float x, float y, int zoomfilter,
ColorManagedViewSettings *view_settings,
- ColorManagedDisplaySettings *display_settings)
+ ColorManagedDisplaySettings *display_settings,
+ float zoom_x, float zoom_y)
{
glaDrawImBuf_glsl_clipping(ibuf, x, y, zoomfilter, view_settings, display_settings,
- 0.0f, 0.0f, 0.0f, 0.0f);
+ 0.0f, 0.0f, 0.0f, 0.0f, zoom_x, zoom_y);
}
void glaDrawImBuf_glsl_ctx_clipping(const bContext *C,
@@ -981,7 +663,8 @@ void glaDrawImBuf_glsl_ctx_clipping(const bContext *C,
float x, float y,
int zoomfilter,
float clip_min_x, float clip_min_y,
- float clip_max_x, float clip_max_y)
+ float clip_max_x, float clip_max_y,
+ float zoom_x, float zoom_y)
{
ColorManagedViewSettings *view_settings;
ColorManagedDisplaySettings *display_settings;
@@ -989,22 +672,19 @@ void glaDrawImBuf_glsl_ctx_clipping(const bContext *C,
IMB_colormanagement_display_settings_from_ctx(C, &view_settings, &display_settings);
glaDrawImBuf_glsl_clipping(ibuf, x, y, zoomfilter, view_settings, display_settings,
- clip_min_x, clip_min_y, clip_max_x, clip_max_y);
-}
-
-void glaDrawImBuf_glsl_ctx(const bContext *C, ImBuf *ibuf, float x, float y, int zoomfilter)
-{
- glaDrawImBuf_glsl_ctx_clipping(C, ibuf, x, y, zoomfilter, 0.0f, 0.0f, 0.0f, 0.0f);
+ clip_min_x, clip_min_y, clip_max_x, clip_max_y,
+ zoom_x, zoom_y);
}
-void cpack(unsigned int x)
+void glaDrawImBuf_glsl_ctx(const bContext *C, ImBuf *ibuf, float x, float y, int zoomfilter,
+ float zoom_x, float zoom_y)
{
- glColor3ub(( (x) & 0xFF),
- (((x) >> 8) & 0xFF),
- (((x) >> 16) & 0xFF));
+ glaDrawImBuf_glsl_ctx_clipping(C, ibuf, x, y, zoomfilter, 0.0f, 0.0f, 0.0f, 0.0f, zoom_x, zoom_y);
}
-void glaDrawBorderCorners(const rcti *border, float zoomx, float zoomy)
+/* don't move to GPU_immediate_util.h because this uses user-prefs
+ * and isn't very low level */
+void immDrawBorderCorners(unsigned int pos, const rcti *border, float zoomx, float zoomy)
{
float delta_x = 4.0f * UI_DPI_FAC / zoomx;
float delta_y = 4.0f * UI_DPI_FAC / zoomy;
@@ -1013,30 +693,30 @@ void glaDrawBorderCorners(const rcti *border, float zoomx, float zoomy)
delta_y = min_ff(delta_y, border->ymax - border->ymin);
/* left bottom corner */
- glBegin(GL_LINE_STRIP);
- glVertex2f(border->xmin, border->ymin + delta_y);
- glVertex2f(border->xmin, border->ymin);
- glVertex2f(border->xmin + delta_x, border->ymin);
- glEnd();
+ immBegin(GWN_PRIM_LINE_STRIP, 3);
+ immVertex2f(pos, border->xmin, border->ymin + delta_y);
+ immVertex2f(pos, border->xmin, border->ymin);
+ immVertex2f(pos, border->xmin + delta_x, border->ymin);
+ immEnd();
/* left top corner */
- glBegin(GL_LINE_STRIP);
- glVertex2f(border->xmin, border->ymax - delta_y);
- glVertex2f(border->xmin, border->ymax);
- glVertex2f(border->xmin + delta_x, border->ymax);
- glEnd();
+ immBegin(GWN_PRIM_LINE_STRIP, 3);
+ immVertex2f(pos, border->xmin, border->ymax - delta_y);
+ immVertex2f(pos, border->xmin, border->ymax);
+ immVertex2f(pos, border->xmin + delta_x, border->ymax);
+ immEnd();
/* right bottom corner */
- glBegin(GL_LINE_STRIP);
- glVertex2f(border->xmax - delta_x, border->ymin);
- glVertex2f(border->xmax, border->ymin);
- glVertex2f(border->xmax, border->ymin + delta_y);
- glEnd();
+ immBegin(GWN_PRIM_LINE_STRIP, 3);
+ immVertex2f(pos, border->xmax - delta_x, border->ymin);
+ immVertex2f(pos, border->xmax, border->ymin);
+ immVertex2f(pos, border->xmax, border->ymin + delta_y);
+ immEnd();
/* right top corner */
- glBegin(GL_LINE_STRIP);
- glVertex2f(border->xmax - delta_x, border->ymax);
- glVertex2f(border->xmax, border->ymax);
- glVertex2f(border->xmax, border->ymax - delta_y);
- glEnd();
+ immBegin(GWN_PRIM_LINE_STRIP, 3);
+ immVertex2f(pos, border->xmax - delta_x, border->ymax);
+ immVertex2f(pos, border->xmax, border->ymax);
+ immVertex2f(pos, border->xmax, border->ymax - delta_y);
+ immEnd();
}
diff --git a/source/blender/editors/screen/screen_context.c b/source/blender/editors/screen/screen_context.c
index 1190423e2f1..bb92ea35ad0 100644
--- a/source/blender/editors/screen/screen_context.c
+++ b/source/blender/editors/screen/screen_context.c
@@ -38,6 +38,7 @@
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
#include "DNA_windowmanager_types.h"
+#include "DNA_workspace_types.h"
#include "BLI_utildefines.h"
@@ -47,8 +48,12 @@
#include "BKE_action.h"
#include "BKE_armature.h"
#include "BKE_gpencil.h"
+#include "BKE_layer.h"
#include "BKE_screen.h"
#include "BKE_sequencer.h"
+#include "BKE_workspace.h"
+
+#include "DEG_depsgraph.h"
#include "RNA_access.h"
@@ -61,20 +66,8 @@
#include "screen_intern.h"
-static unsigned int context_layers(bScreen *sc, Scene *scene, ScrArea *sa_ctx)
-{
- /* needed for 'USE_ALLSELECT' define, otherwise we end up editing off-screen layers. */
- if (sc && sa_ctx && (sa_ctx->spacetype == SPACE_BUTS)) {
- const unsigned int lay = BKE_screen_view3d_layer_all(sc);
- if (lay) {
- return lay;
- }
- }
- return scene->lay;
-}
-
const char *screen_context_dir[] = {
- "scene", "visible_objects", "visible_bases", "selectable_objects", "selectable_bases",
+ "scene", "view_layer", "visible_objects", "visible_bases", "selectable_objects", "selectable_bases",
"selected_objects", "selected_bases",
"editable_objects", "editable_bases",
"selected_editable_objects", "selected_editable_bases",
@@ -93,20 +86,14 @@ const char *screen_context_dir[] = {
int ed_screen_context(const bContext *C, const char *member, bContextDataResult *result)
{
+ wmWindow *win = CTX_wm_window(C);
bScreen *sc = CTX_wm_screen(C);
ScrArea *sa = CTX_wm_area(C);
- Scene *scene = sc->scene;
- Base *base;
-
-#if 0 /* Using the context breaks adding objects in the UI. Need to find out why - campbell */
- Object *obact = CTX_data_active_object(C);
- Object *obedit = CTX_data_edit_object(C);
- base = CTX_data_active_base(C);
-#else
+ Scene *scene = WM_window_get_active_scene(win);
+ WorkSpace *workspace = BKE_workspace_active_get(win->workspace_hook);
+ ViewLayer *view_layer = BKE_view_layer_from_workspace_get(scene, workspace);
Object *obedit = scene->obedit;
- Object *obact = OBACT;
- base = BASACT;
-#endif
+ Object *obact = (view_layer && view_layer->basact) ? view_layer->basact->object : NULL;
if (CTX_data_dir(member)) {
CTX_data_dir_set(result, screen_context_dir);
@@ -116,84 +103,100 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult
CTX_data_id_pointer_set(result, &scene->id);
return 1;
}
- else if (CTX_data_equals(member, "visible_objects") || CTX_data_equals(member, "visible_bases")) {
- const unsigned int lay = context_layers(sc, scene, sa);
- const bool visible_objects = CTX_data_equals(member, "visible_objects");
-
- for (base = scene->base.first; base; base = base->next) {
- if (((base->object->restrictflag & OB_RESTRICT_VIEW) == 0) && (base->lay & lay)) {
- if (visible_objects)
- CTX_data_id_list_add(result, &base->object->id);
- else
- CTX_data_list_add(result, &scene->id, &RNA_ObjectBase, base);
+ else if (CTX_data_equals(member, "visible_objects")) {
+ FOREACH_VISIBLE_OBJECT(view_layer, ob)
+ {
+ CTX_data_id_list_add(result, &ob->id);
+ }
+ FOREACH_VISIBLE_BASE_END
+ CTX_data_type_set(result, CTX_DATA_TYPE_COLLECTION);
+ return 1;
+ }
+ else if (CTX_data_equals(member, "selectable_objects")) {
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ if (((base->flag & BASE_VISIBLED) != 0) && ((base->flag & BASE_SELECTABLED) != 0)) {
+ CTX_data_id_list_add(result, &base->object->id);
}
}
CTX_data_type_set(result, CTX_DATA_TYPE_COLLECTION);
return 1;
}
- else if (CTX_data_equals(member, "selectable_objects") || CTX_data_equals(member, "selectable_bases")) {
- const unsigned int lay = context_layers(sc, scene, sa);
- const bool selectable_objects = CTX_data_equals(member, "selectable_objects");
-
- for (base = scene->base.first; base; base = base->next) {
- if (base->lay & lay) {
- if ((base->object->restrictflag & OB_RESTRICT_VIEW) == 0 && (base->object->restrictflag & OB_RESTRICT_SELECT) == 0) {
- if (selectable_objects)
- CTX_data_id_list_add(result, &base->object->id);
- else
- CTX_data_list_add(result, &scene->id, &RNA_ObjectBase, base);
- }
+ else if (CTX_data_equals(member, "selected_objects")) {
+ FOREACH_SELECTED_OBJECT(view_layer, ob)
+ {
+ CTX_data_id_list_add(result, &ob->id);
+ }
+ FOREACH_SELECTED_OBJECT_END
+ CTX_data_type_set(result, CTX_DATA_TYPE_COLLECTION);
+ return 1;
+ }
+ else if (CTX_data_equals(member, "selected_editable_objects")) {
+ FOREACH_SELECTED_OBJECT(view_layer, ob)
+ {
+ if (0 == BKE_object_is_libdata(ob)) {
+ CTX_data_id_list_add(result, &ob->id);
}
}
+ FOREACH_SELECTED_OBJECT_END
CTX_data_type_set(result, CTX_DATA_TYPE_COLLECTION);
return 1;
}
- else if (CTX_data_equals(member, "selected_objects") || CTX_data_equals(member, "selected_bases")) {
- const unsigned int lay = context_layers(sc, scene, sa);
- const bool selected_objects = CTX_data_equals(member, "selected_objects");
-
- for (base = scene->base.first; base; base = base->next) {
- if ((base->flag & SELECT) && (base->lay & lay)) {
- if (selected_objects)
- CTX_data_id_list_add(result, &base->object->id);
- else
- CTX_data_list_add(result, &scene->id, &RNA_ObjectBase, base);
+ else if (CTX_data_equals(member, "editable_objects")) {
+ /* Visible + Editable, but not necessarily selected */
+ FOREACH_VISIBLE_OBJECT(view_layer, ob)
+ {
+ if (0 == BKE_object_is_libdata(ob)) {
+ CTX_data_id_list_add(result, &ob->id);
}
}
+ FOREACH_VISIBLE_OBJECT_END
CTX_data_type_set(result, CTX_DATA_TYPE_COLLECTION);
return 1;
}
- else if (CTX_data_equals(member, "selected_editable_objects") || CTX_data_equals(member, "selected_editable_bases")) {
- const unsigned int lay = context_layers(sc, scene, sa);
- const bool selected_editable_objects = CTX_data_equals(member, "selected_editable_objects");
-
- for (base = scene->base.first; base; base = base->next) {
- if ((base->flag & SELECT) && (base->lay & lay)) {
- if ((base->object->restrictflag & OB_RESTRICT_VIEW) == 0) {
- if (0 == BKE_object_is_libdata(base->object)) {
- if (selected_editable_objects)
- CTX_data_id_list_add(result, &base->object->id);
- else
- CTX_data_list_add(result, &scene->id, &RNA_ObjectBase, base);
- }
+ else if ( CTX_data_equals(member, "visible_bases")) {
+ FOREACH_VISIBLE_BASE(view_layer, base)
+ {
+ CTX_data_list_add(result, &scene->id, &RNA_ObjectBase, base);
+ }
+ FOREACH_VISIBLE_BASE_END
+ CTX_data_type_set(result, CTX_DATA_TYPE_COLLECTION);
+ return 1;
+ }
+ else if (CTX_data_equals(member, "selectable_bases")) {
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ if ((base->flag & BASE_SELECTABLED) != 0) {
+ CTX_data_list_add(result, &scene->id, &RNA_ObjectBase, base);
+ }
+ }
+ CTX_data_type_set(result, CTX_DATA_TYPE_COLLECTION);
+ return 1;
+ }
+ else if (CTX_data_equals(member, "selected_bases")) {
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ if ((base->flag & BASE_SELECTED) != 0) {
+ CTX_data_list_add(result, &scene->id, &RNA_ObjectBase, base);
+ }
+ }
+ CTX_data_type_set(result, CTX_DATA_TYPE_COLLECTION);
+ return 1;
+ }
+ else if (CTX_data_equals(member, "selected_editable_bases")) {
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ if ((base->flag & BASE_SELECTED) != 0) {
+ if (0 == BKE_object_is_libdata(base->object)) {
+ CTX_data_list_add(result, &scene->id, &RNA_ObjectBase, base);
}
}
}
CTX_data_type_set(result, CTX_DATA_TYPE_COLLECTION);
return 1;
}
- else if (CTX_data_equals(member, "editable_objects") || CTX_data_equals(member, "editable_bases")) {
- const unsigned int lay = context_layers(sc, scene, sa);
- const bool editable_objects = CTX_data_equals(member, "editable_objects");
-
+ else if (CTX_data_equals(member, "editable_bases")) {
/* Visible + Editable, but not necessarily selected */
- for (base = scene->base.first; base; base = base->next) {
- if (((base->object->restrictflag & OB_RESTRICT_VIEW) == 0) && (base->lay & lay)) {
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ if ((base->flag & BASE_VISIBLED) != 0) {
if (0 == BKE_object_is_libdata(base->object)) {
- if (editable_objects)
- CTX_data_id_list_add(result, &base->object->id);
- else
- CTX_data_list_add(result, &scene->id, &RNA_ObjectBase, base);
+ CTX_data_list_add(result, &scene->id, &RNA_ObjectBase, base);
}
}
}
@@ -345,8 +348,8 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult
}
}
else if (CTX_data_equals(member, "active_base")) {
- if (base)
- CTX_data_pointer_set(result, &scene->id, &RNA_ObjectBase, base);
+ if (view_layer->basact)
+ CTX_data_pointer_set(result, &scene->id, &RNA_ObjectBase, view_layer->basact);
return 1;
}
@@ -370,31 +373,31 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult
return 1;
}
else if (CTX_data_equals(member, "sculpt_object")) {
- if (obact && (obact->mode & OB_MODE_SCULPT))
+ if (obact && (workspace->object_mode & OB_MODE_SCULPT)) {
CTX_data_id_pointer_set(result, &obact->id);
-
+ }
return 1;
}
else if (CTX_data_equals(member, "vertex_paint_object")) {
- if (obact && (obact->mode & OB_MODE_VERTEX_PAINT))
+ if (obact && (workspace->object_mode & OB_MODE_VERTEX_PAINT))
CTX_data_id_pointer_set(result, &obact->id);
return 1;
}
else if (CTX_data_equals(member, "weight_paint_object")) {
- if (obact && (obact->mode & OB_MODE_WEIGHT_PAINT))
+ if (obact && (workspace->object_mode & OB_MODE_WEIGHT_PAINT))
CTX_data_id_pointer_set(result, &obact->id);
return 1;
}
else if (CTX_data_equals(member, "image_paint_object")) {
- if (obact && (obact->mode & OB_MODE_TEXTURE_PAINT))
+ if (obact && (workspace->object_mode & OB_MODE_TEXTURE_PAINT))
CTX_data_id_pointer_set(result, &obact->id);
return 1;
}
else if (CTX_data_equals(member, "particle_edit_object")) {
- if (obact && (obact->mode & OB_MODE_PARTICLE_EDIT))
+ if (obact && (workspace->object_mode & OB_MODE_PARTICLE_EDIT))
CTX_data_id_pointer_set(result, &obact->id);
return 1;
diff --git a/source/blender/editors/screen/screen_draw.c b/source/blender/editors/screen/screen_draw.c
index e67ae4e321c..2e4e9127ed6 100644
--- a/source/blender/editors/screen/screen_draw.c
+++ b/source/blender/editors/screen/screen_draw.c
@@ -22,18 +22,21 @@
* \ingroup edscr
*/
-#include "BIF_gl.h"
+#include "ED_screen.h"
-#include "WM_api.h"
+#include "GPU_framebuffer.h"
+#include "GPU_immediate.h"
+#include "GPU_matrix.h"
-#include "ED_screen.h"
+#include "WM_api.h"
+#include "WM_types.h"
#include "screen_intern.h"
/**
* Draw horizontal shape visualizing future joining (left as well right direction of future joining).
*/
-static void draw_horizontal_join_shape(ScrArea *sa, char dir)
+static void draw_horizontal_join_shape(ScrArea *sa, char dir, unsigned int pos)
{
vec2f points[10];
short i;
@@ -90,24 +93,31 @@ static void draw_horizontal_join_shape(ScrArea *sa, char dir)
}
}
- glBegin(GL_POLYGON);
- for (i = 0; i < 5; i++)
- glVertex2f(points[i].x, points[i].y);
- glEnd();
- glBegin(GL_POLYGON);
- for (i = 4; i < 8; i++)
- glVertex2f(points[i].x, points[i].y);
- glVertex2f(points[0].x, points[0].y);
- glEnd();
-
- glRectf(points[2].x, points[2].y, points[8].x, points[8].y);
- glRectf(points[6].x, points[6].y, points[9].x, points[9].y);
+ immBegin(GWN_PRIM_TRI_FAN, 5);
+
+ for (i = 0; i < 5; i++) {
+ immVertex2f(pos, points[i].x, points[i].y);
+ }
+
+ immEnd();
+
+ immBegin(GWN_PRIM_TRI_FAN, 5);
+
+ for (i = 4; i < 8; i++) {
+ immVertex2f(pos, points[i].x, points[i].y);
+ }
+
+ immVertex2f(pos, points[0].x, points[0].y);
+ immEnd();
+
+ immRectf(pos, points[2].x, points[2].y, points[8].x, points[8].y);
+ immRectf(pos, points[6].x, points[6].y, points[9].x, points[9].y);
}
/**
* Draw vertical shape visualizing future joining (up/down direction).
*/
-static void draw_vertical_join_shape(ScrArea *sa, char dir)
+static void draw_vertical_join_shape(ScrArea *sa, char dir, unsigned int pos)
{
vec2f points[10];
short i;
@@ -144,7 +154,7 @@ static void draw_vertical_join_shape(ScrArea *sa, char dir)
points[6].x = sa->v4->vec.x;
points[6].y = sa->v4->vec.y + h;
-
+
points[7].x = sa->v3->vec.x;
points[7].y = sa->v3->vec.y;
@@ -164,93 +174,117 @@ static void draw_vertical_join_shape(ScrArea *sa, char dir)
}
}
- glBegin(GL_POLYGON);
- for (i = 0; i < 5; i++)
- glVertex2f(points[i].x, points[i].y);
- glEnd();
- glBegin(GL_POLYGON);
- for (i = 4; i < 8; i++)
- glVertex2f(points[i].x, points[i].y);
- glVertex2f(points[0].x, points[0].y);
- glEnd();
-
- glRectf(points[2].x, points[2].y, points[8].x, points[8].y);
- glRectf(points[6].x, points[6].y, points[9].x, points[9].y);
+ immBegin(GWN_PRIM_TRI_FAN, 5);
+
+ for (i = 0; i < 5; i++) {
+ immVertex2f(pos, points[i].x, points[i].y);
+ }
+
+ immEnd();
+
+ immBegin(GWN_PRIM_TRI_FAN, 5);
+
+ for (i = 4; i < 8; i++) {
+ immVertex2f(pos, points[i].x, points[i].y);
+ }
+
+ immVertex2f(pos, points[0].x, points[0].y);
+ immEnd();
+
+ immRectf(pos, points[2].x, points[2].y, points[8].x, points[8].y);
+ immRectf(pos, points[6].x, points[6].y, points[9].x, points[9].y);
}
/**
* Draw join shape due to direction of joining.
*/
-static void draw_join_shape(ScrArea *sa, char dir)
+static void draw_join_shape(ScrArea *sa, char dir, unsigned int pos)
{
if (dir == 'u' || dir == 'd') {
- draw_vertical_join_shape(sa, dir);
+ draw_vertical_join_shape(sa, dir, pos);
}
else {
- draw_horizontal_join_shape(sa, dir);
+ draw_horizontal_join_shape(sa, dir, pos);
}
}
/**
* Draw screen area darker with arrow (visualization of future joining).
*/
-static void scrarea_draw_shape_dark(ScrArea *sa, char dir)
+static void scrarea_draw_shape_dark(ScrArea *sa, char dir, unsigned int pos)
{
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glColor4ub(0, 0, 0, 50);
- draw_join_shape(sa, dir);
+ immUniformColor4ub(0, 0, 0, 50);
+
+ draw_join_shape(sa, dir, pos);
}
/**
* Draw screen area ligher with arrow shape ("eraser" of previous dark shape).
*/
-static void scrarea_draw_shape_light(ScrArea *sa, char UNUSED(dir))
+static void scrarea_draw_shape_light(ScrArea *sa, char UNUSED(dir), unsigned int pos)
{
glBlendFunc(GL_DST_COLOR, GL_SRC_ALPHA);
/* value 181 was hardly computed: 181~105 */
- glColor4ub(255, 255, 255, 50);
+ immUniformColor4ub(255, 255, 255, 50);
/* draw_join_shape(sa, dir); */
- glRecti(sa->v1->vec.x, sa->v1->vec.y, sa->v3->vec.x, sa->v3->vec.y);
+
+ immRectf(pos, sa->v1->vec.x, sa->v1->vec.y, sa->v3->vec.x, sa->v3->vec.y);
}
-static void drawscredge_area_draw(int sizex, int sizey, short x1, short y1, short x2, short y2)
+static void drawscredge_area_draw(int sizex, int sizey, short x1, short y1, short x2, short y2, unsigned int pos)
{
+ int count = 0;
+
+ if (x2 < sizex - 1) count += 2;
+ if (x1 > 0) count += 2;
+ if (y2 < sizey - 1) count += 2;
+ if (y1 > 0) count += 2;
+
+ if (count == 0) {
+ return;
+ }
+
+ immBegin(GWN_PRIM_LINES, count);
+
/* right border area */
if (x2 < sizex - 1) {
- glVertex2s(x2, y1);
- glVertex2s(x2, y2);
+ immVertex2f(pos, x2, y1);
+ immVertex2f(pos, x2, y2);
}
/* left border area */
if (x1 > 0) { /* otherwise it draws the emboss of window over */
- glVertex2s(x1, y1);
- glVertex2s(x1, y2);
+ immVertex2f(pos, x1, y1);
+ immVertex2f(pos, x1, y2);
}
/* top border area */
if (y2 < sizey - 1) {
- glVertex2s(x1, y2);
- glVertex2s(x2, y2);
+ immVertex2f(pos, x1, y2);
+ immVertex2f(pos, x2, y2);
}
/* bottom border area */
if (y1 > 0) {
- glVertex2s(x1, y1);
- glVertex2s(x2, y1);
+ immVertex2f(pos, x1, y1);
+ immVertex2f(pos, x2, y1);
}
+
+ immEnd();
}
/**
* \brief Screen edges drawing.
*/
-static void drawscredge_area(ScrArea *sa, int sizex, int sizey)
+static void drawscredge_area(ScrArea *sa, int sizex, int sizey, unsigned int pos)
{
short x1 = sa->v1->vec.x;
short y1 = sa->v1->vec.y;
short x2 = sa->v3->vec.x;
short y2 = sa->v3->vec.y;
- drawscredge_area_draw(sizex, sizey, x1, y1, x2, y2);
+ drawscredge_area_draw(sizex, sizey, x1, y1, x2, y2, pos);
}
/**
@@ -258,33 +292,38 @@ static void drawscredge_area(ScrArea *sa, int sizex, int sizey)
*/
void ED_screen_draw_edges(wmWindow *win)
{
+ bScreen *screen = WM_window_get_active_screen(win);
const int winsize_x = WM_window_pixels_x(win);
const int winsize_y = WM_window_pixels_y(win);
ScrArea *sa;
- wmSubWindowSet(win, win->screen->mainwin);
+ wmSubWindowSet(win, screen->mainwin);
+
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
/* Note: first loop only draws if U.pixelsize > 1, skip otherwise */
if (U.pixelsize > 1.0f) {
/* FIXME: doesn't our glLineWidth already scale by U.pixelsize? */
glLineWidth((2.0f * U.pixelsize) - 1);
- glColor3ub(0x50, 0x50, 0x50);
- glBegin(GL_LINES);
- for (sa = win->screen->areabase.first; sa; sa = sa->next)
- drawscredge_area(sa, winsize_x, winsize_y);
- glEnd();
+ immUniformColor3ub(0x50, 0x50, 0x50);
+
+ for (sa = screen->areabase.first; sa; sa = sa->next) {
+ drawscredge_area(sa, winsize_x, winsize_y, pos);
+ }
}
glLineWidth(1);
- glColor3ub(0, 0, 0);
- glBegin(GL_LINES);
- for (sa = win->screen->areabase.first; sa; sa = sa->next) {
- drawscredge_area(sa, winsize_x, winsize_y);
+ immUniformColor3ub(0, 0, 0);
+
+ for (sa = screen->areabase.first; sa; sa = sa->next) {
+ drawscredge_area(sa, winsize_x, winsize_y, pos);
}
- glEnd();
- win->screen->do_draw = false;
+ immUnbindProgram();
+
+ screen->do_draw = false;
}
/**
@@ -295,6 +334,9 @@ void ED_screen_draw_edges(wmWindow *win)
*/
void ED_screen_draw_join_shape(ScrArea *sa1, ScrArea *sa2)
{
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
glLineWidth(1);
/* blended join arrow */
@@ -319,37 +361,154 @@ void ED_screen_draw_join_shape(ScrArea *sa1, ScrArea *sa2)
dira = 'd';
break;
}
+
glEnable(GL_BLEND);
- scrarea_draw_shape_dark(sa2, dir);
- scrarea_draw_shape_light(sa1, dira);
+
+ scrarea_draw_shape_dark(sa2, dir, pos);
+ scrarea_draw_shape_light(sa1, dira, pos);
+
glDisable(GL_BLEND);
}
+
+ immUnbindProgram();
}
void ED_screen_draw_split_preview(ScrArea *sa, const int dir, const float fac)
{
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
/* splitpoint */
glEnable(GL_BLEND);
- glBegin(GL_LINES);
- glColor4ub(255, 255, 255, 100);
+ immUniformColor4ub(255, 255, 255, 100);
+
+ immBegin(GWN_PRIM_LINES, 2);
if (dir == 'h') {
const float y = (1 - fac) * sa->totrct.ymin + fac * sa->totrct.ymax;
- glVertex2s(sa->totrct.xmin, y);
- glVertex2s(sa->totrct.xmax, y);
- glColor4ub(0, 0, 0, 100);
- glVertex2s(sa->totrct.xmin, y + 1);
- glVertex2s(sa->totrct.xmax, y + 1);
+
+ immVertex2f(pos, sa->totrct.xmin, y);
+ immVertex2f(pos, sa->totrct.xmax, y);
+
+ immEnd();
+
+ immUniformColor4ub(0, 0, 0, 100);
+
+ immBegin(GWN_PRIM_LINES, 2);
+
+ immVertex2f(pos, sa->totrct.xmin, y + 1);
+ immVertex2f(pos, sa->totrct.xmax, y + 1);
+
+ immEnd();
}
else {
+ BLI_assert(dir == 'v');
const float x = (1 - fac) * sa->totrct.xmin + fac * sa->totrct.xmax;
- glVertex2s(x, sa->totrct.ymin);
- glVertex2s(x, sa->totrct.ymax);
- glColor4ub(0, 0, 0, 100);
- glVertex2s(x + 1, sa->totrct.ymin);
- glVertex2s(x + 1, sa->totrct.ymax);
+
+ immVertex2f(pos, x, sa->totrct.ymin);
+ immVertex2f(pos, x, sa->totrct.ymax);
+
+ immEnd();
+
+ immUniformColor4ub(0, 0, 0, 100);
+
+ immBegin(GWN_PRIM_LINES, 2);
+
+ immVertex2f(pos, x + 1, sa->totrct.ymin);
+ immVertex2f(pos, x + 1, sa->totrct.ymax);
+
+ immEnd();
}
- glEnd();
+
glDisable(GL_BLEND);
+
+ immUnbindProgram();
}
+
+/* -------------------------------------------------------------------- */
+/* Screen Thumbnail Preview */
+
+/**
+ * Calculates a scale factor to squash the preview for \a screen into a rectangle of given size and aspect.
+ */
+static void screen_preview_scale_get(
+ const bScreen *screen, float size_x, float size_y,
+ const float asp[2],
+ float r_scale[2])
+{
+ float max_x = 0, max_y = 0;
+
+ for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
+ max_x = MAX2(max_x, sa->totrct.xmax);
+ max_y = MAX2(max_y, sa->totrct.ymax);
+ }
+ r_scale[0] = (size_x * asp[0]) / max_x;
+ r_scale[1] = (size_y * asp[1]) / max_y;
+}
+
+static void screen_preview_draw_areas(const bScreen *screen, const float scale[2], const float col[4],
+ const float ofs_between_areas)
+{
+ const float ofs_h = ofs_between_areas * 0.5f;
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor4fv(col);
+
+ for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
+ rctf rect = {
+ .xmin = sa->totrct.xmin * scale[0] + ofs_h,
+ .xmax = sa->totrct.xmax * scale[0] - ofs_h,
+ .ymin = sa->totrct.ymin * scale[1] + ofs_h,
+ .ymax = sa->totrct.ymax * scale[1] - ofs_h
+ };
+
+ immBegin(GWN_PRIM_TRI_FAN, 4);
+ immVertex2f(pos, rect.xmin, rect.ymin);
+ immVertex2f(pos, rect.xmax, rect.ymin);
+ immVertex2f(pos, rect.xmax, rect.ymax);
+ immVertex2f(pos, rect.xmin, rect.ymax);
+ immEnd();
+ }
+
+ immUnbindProgram();
+}
+
+static void screen_preview_draw(const bScreen *screen, int size_x, int size_y)
+{
+ const float asp[2] = {1.0f, 0.8f}; /* square previews look a bit ugly */
+ /* could use theme color (tui.wcol_menu_item.text), but then we'd need to regenerate all previews when changing */
+ const float col[4] = {1.0f, 1.0f, 1.0f, 1.0f};
+ float scale[2];
+
+ wmOrtho2(0.0f, size_x, 0.0f, size_y);
+ /* center */
+ gpuPushMatrix();
+ gpuTranslate2f(size_x * (1.0f - asp[0]) * 0.5f, size_y * (1.0f - asp[1]) * 0.5f);
+
+ screen_preview_scale_get(screen, size_x, size_y, asp, scale);
+ screen_preview_draw_areas(screen, scale, col, 1.5f);
+
+ gpuPopMatrix();
+}
+
+/**
+ * Render the preview for a screen layout in \a screen.
+ */
+void ED_screen_preview_render(const bScreen *screen, int size_x, int size_y, unsigned int *r_rect)
+{
+ char err_out[256] = "unknown";
+ GPUOffScreen *offscreen = GPU_offscreen_create(size_x, size_y, 0, false, err_out);
+
+ GPU_offscreen_bind(offscreen, true);
+ glClearColor(0.0, 0.0, 0.0, 0.0);
+ glClear(GL_COLOR_BUFFER_BIT);
+
+ screen_preview_draw(screen, size_x, size_y);
+
+ GPU_offscreen_read_pixels(offscreen, GL_UNSIGNED_BYTE, r_rect);
+ GPU_offscreen_unbind(offscreen, true);
+
+ GPU_offscreen_free(offscreen);
+}
diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c
index 2cd8ee9223f..604a86a1519 100644
--- a/source/blender/editors/screen/screen_edit.c
+++ b/source/blender/editors/screen/screen_edit.c
@@ -34,6 +34,7 @@
#include "MEM_guardedalloc.h"
#include "DNA_scene_types.h"
+#include "DNA_workspace_types.h"
#include "DNA_userdef_types.h"
#include "BLI_math.h"
@@ -41,18 +42,17 @@
#include "BLI_utildefines.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
+#include "BKE_icons.h"
#include "BKE_image.h"
#include "BKE_global.h"
+#include "BKE_layer.h"
#include "BKE_library.h"
#include "BKE_library_remap.h"
#include "BKE_main.h"
#include "BKE_node.h"
#include "BKE_screen.h"
#include "BKE_scene.h"
-
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
+#include "BKE_workspace.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -66,6 +66,8 @@
#include "UI_interface.h"
+#include "WM_message.h"
+
/* XXX actually should be not here... solve later */
#include "wm_subwindow.h"
@@ -266,7 +268,7 @@ bool scredge_is_horizontal(ScrEdge *se)
}
/* need win size to make sure not to include edges along screen edge */
-ScrEdge *screen_find_active_scredge(bScreen *sc,
+ScrEdge *screen_find_active_scredge(const bScreen *sc,
const int winsize_x, const int winsize_y,
const int mx, const int my)
{
@@ -457,21 +459,17 @@ ScrArea *area_split(bScreen *sc, ScrArea *sa, char dir, float fac, int merge)
return newa;
}
-/* empty screen, with 1 dummy area without spacedata */
-/* uses window size */
-bScreen *ED_screen_add(wmWindow *win, Scene *scene, const char *name)
+/**
+ * Empty screen, with 1 dummy area without spacedata. Uses window size.
+ */
+bScreen *screen_add(const char *name, const int winsize_x, const int winsize_y)
{
- const int winsize_x = WM_window_pixels_x(win);
- const int winsize_y = WM_window_pixels_y(win);
-
bScreen *sc;
ScrVert *sv1, *sv2, *sv3, *sv4;
sc = BKE_libblock_alloc(G.main, ID_SCR, name, 0);
- sc->scene = scene;
sc->do_refresh = true;
sc->redraws_flag = TIME_ALL_3D_WIN | TIME_ALL_ANIM_WIN;
- sc->winid = win->winid;
sv1 = screen_addvert(sc, 0, 0);
sv2 = screen_addvert(sc, 0, winsize_y - 1);
@@ -489,7 +487,7 @@ bScreen *ED_screen_add(wmWindow *win, Scene *scene, const char *name)
return sc;
}
-static void screen_copy(bScreen *to, bScreen *from)
+void screen_data_copy(bScreen *to, bScreen *from)
{
ScrVert *s1, *s2;
ScrEdge *se;
@@ -532,7 +530,16 @@ static void screen_copy(bScreen *to, bScreen *from)
/* put at zero (needed?) */
for (s1 = from->vertbase.first; s1; s1 = s1->next)
s1->newv = NULL;
+}
+/**
+ * Prepare a newly created screen for initializing it as active screen.
+ */
+void screen_new_activate_prepare(const wmWindow *win, bScreen *screen_new)
+{
+ screen_new->winid = win->winid;
+ screen_new->do_refresh = true;
+ screen_new->do_draw = true;
}
@@ -613,6 +620,9 @@ int screen_area_join(bContext *C, bScreen *scr, ScrArea *sa1, ScrArea *sa2)
screen_delarea(C, scr, sa2);
removedouble_scrverts(scr);
+ /* Update preview thumbnail */
+ BKE_icon_changed(scr->id.icon_id);
+
return 1;
}
@@ -835,29 +845,23 @@ static void screen_test_scale(bScreen *sc, int winsize_x, int winsize_y)
}
-/* ****************** EXPORTED API TO OTHER MODULES *************************** */
-
-bScreen *ED_screen_duplicate(wmWindow *win, bScreen *sc)
-{
- bScreen *newsc;
-
- if (sc->state != SCREENNORMAL) return NULL; /* XXX handle this case! */
-
- /* make new empty screen: */
- newsc = ED_screen_add(win, sc->scene, sc->id.name + 2);
- /* copy all data */
- screen_copy(newsc, sc);
- return newsc;
-}
+/* ****************** EXPORTED API TO OTHER MODULES *************************** */
/* screen sets cursor based on swinid */
static void region_cursor_set(wmWindow *win, int swinid, int swin_changed)
{
- for (ScrArea *sa = win->screen->areabase.first; sa; sa = sa->next) {
+ bScreen *screen = WM_window_get_active_screen(win);
+
+ for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
for (ARegion *ar = sa->regionbase.first; ar; ar = ar->next) {
if (ar->swinid == swinid) {
if (swin_changed || (ar->type && ar->type->event_cursor)) {
+ if (ar->manipulator_map != NULL) {
+ if (WM_manipulatormap_cursor_set(ar->manipulator_map, win)) {
+ return;
+ }
+ }
ED_region_cursor_set(win, sa, ar);
}
return;
@@ -869,19 +873,20 @@ static void region_cursor_set(wmWindow *win, int swinid, int swin_changed)
void ED_screen_do_listen(bContext *C, wmNotifier *note)
{
wmWindow *win = CTX_wm_window(C);
-
+ bScreen *screen = CTX_wm_screen(C);
+
/* generic notes */
switch (note->category) {
case NC_WM:
if (note->data == ND_FILEREAD)
- win->screen->do_draw = true;
+ screen->do_draw = true;
break;
case NC_WINDOW:
- win->screen->do_draw = true;
+ screen->do_draw = true;
break;
case NC_SCREEN:
if (note->action == NA_EDITED)
- win->screen->do_draw = win->screen->do_refresh = true;
+ screen->do_draw = screen->do_refresh = true;
break;
case NC_SCENE:
if (note->data == ND_MODE)
@@ -905,7 +910,9 @@ static void screen_refresh_headersizes(void)
/* make this screen usable */
/* for file read and first use, for scaling window, area moves */
void ED_screen_refresh(wmWindowManager *wm, wmWindow *win)
-{
+{
+ bScreen *screen = WM_window_get_active_screen(win);
+
/* exception for bg mode, we only need the screen context */
if (!G.background) {
const int winsize_x = WM_window_pixels_x(win);
@@ -922,32 +929,34 @@ void ED_screen_refresh(wmWindowManager *wm, wmWindow *win)
WM_window_set_dpi(win);
screen_refresh_headersizes();
- screen_test_scale(win->screen, winsize_x, winsize_y);
+ screen_test_scale(screen, winsize_x, winsize_y);
- if (win->screen->mainwin == 0) {
- win->screen->mainwin = wm_subwindow_open(win, &winrct, false);
+ if (screen->mainwin == 0) {
+ screen->mainwin = wm_subwindow_open(win, &winrct, false);
}
else {
- wm_subwindow_position(win, win->screen->mainwin, &winrct, false);
+ wm_subwindow_position(win, screen->mainwin, &winrct, false);
}
- for (sa = win->screen->areabase.first; sa; sa = sa->next) {
+ for (sa = screen->areabase.first; sa; sa = sa->next) {
/* set spacetype and region callbacks, calls init() */
/* sets subwindows for regions, adds handlers */
ED_area_initialize(wm, win, sa);
}
/* wake up animtimer */
- if (win->screen->animtimer)
- WM_event_timer_sleep(wm, win, win->screen->animtimer, false);
+ if (screen->animtimer)
+ WM_event_timer_sleep(wm, win, screen->animtimer, false);
}
if (G.debug & G_DEBUG_EVENTS) {
printf("%s: set screen\n", __func__);
}
- win->screen->do_refresh = false;
+ screen->do_refresh = false;
+ /* prevent multiwin errors */
+ screen->winid = win->winid;
- win->screen->context = ed_screen_context;
+ screen->context = ed_screen_context;
}
/* file read, set all screens, ... */
@@ -956,10 +965,10 @@ void ED_screens_initialize(wmWindowManager *wm)
wmWindow *win;
for (win = wm->windows.first; win; win = win->next) {
-
- if (win->screen == NULL)
- win->screen = G.main->screen.first;
-
+ if (WM_window_get_active_workspace(win) == NULL) {
+ WM_window_set_active_workspace(win, G.main->workspaces.first);
+ }
+
ED_screen_refresh(wm, win);
}
}
@@ -970,15 +979,18 @@ void ED_screens_initialize(wmWindowManager *wm)
void ED_region_exit(bContext *C, ARegion *ar)
{
wmWindowManager *wm = CTX_wm_manager(C);
+ wmWindow *win = CTX_wm_window(C);
ARegion *prevar = CTX_wm_region(C);
if (ar->type && ar->type->exit)
ar->type->exit(wm, ar);
CTX_wm_region_set(C, ar);
+
WM_event_remove_handlers(C, &ar->handlers);
+ WM_event_modal_handler_region_replace(win, ar, NULL);
if (ar->swinid) {
- wm_subwindow_close(CTX_wm_window(C), ar->swinid);
+ wm_subwindow_close(win, ar->swinid);
ar->swinid = 0;
}
@@ -988,16 +1000,19 @@ void ED_region_exit(bContext *C, ARegion *ar)
}
if (ar->regiontimer) {
- WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), ar->regiontimer);
+ WM_event_remove_timer(wm, win, ar->regiontimer);
ar->regiontimer = NULL;
}
+ WM_msgbus_clear_by_owner(wm->message_bus, ar);
+
CTX_wm_region_set(C, prevar);
}
void ED_area_exit(bContext *C, ScrArea *sa)
{
wmWindowManager *wm = CTX_wm_manager(C);
+ wmWindow *win = CTX_wm_window(C);
ScrArea *prevsa = CTX_wm_area(C);
ARegion *ar;
@@ -1005,10 +1020,13 @@ void ED_area_exit(bContext *C, ScrArea *sa)
sa->type->exit(wm, sa);
CTX_wm_area_set(C, sa);
+
for (ar = sa->regionbase.first; ar; ar = ar->next)
ED_region_exit(C, ar);
WM_event_remove_handlers(C, &sa->handlers);
+ WM_event_modal_handler_area_replace(win, sa, NULL);
+
CTX_wm_area_set(C, prevsa);
}
@@ -1040,7 +1058,7 @@ void ED_screen_exit(bContext *C, wmWindow *window, bScreen *screen)
/* mark it available for use for other windows */
screen->winid = 0;
- if (prevwin->screen->temp == 0) {
+ if (!WM_window_is_temp_screen(prevwin)) {
/* use previous window if possible */
CTX_wm_window_set(C, prevwin);
}
@@ -1056,13 +1074,14 @@ void ED_screen_exit(bContext *C, wmWindow *window, bScreen *screen)
/* case when on area-edge or in azones, or outside window */
static void screen_cursor_set(wmWindow *win, const wmEvent *event)
{
+ const bScreen *screen = WM_window_get_active_screen(win);
const int winsize_x = WM_window_pixels_x(win);
const int winsize_y = WM_window_pixels_y(win);
AZone *az = NULL;
ScrArea *sa;
- for (sa = win->screen->areabase.first; sa; sa = sa->next)
+ for (sa = screen->areabase.first; sa; sa = sa->next)
if ((az = is_in_area_actionzone(sa, &event->x)))
break;
@@ -1077,7 +1096,7 @@ static void screen_cursor_set(wmWindow *win, const wmEvent *event)
}
}
else {
- ScrEdge *actedge = screen_find_active_scredge(win->screen, winsize_x, winsize_y, event->x, event->y);
+ ScrEdge *actedge = screen_find_active_scredge(screen, winsize_x, winsize_y, event->x, event->y);
if (actedge) {
if (scredge_is_horizontal(actedge))
@@ -1096,9 +1115,9 @@ static void screen_cursor_set(wmWindow *win, const wmEvent *event)
void ED_screen_set_subwinactive(bContext *C, const wmEvent *event)
{
wmWindow *win = CTX_wm_window(C);
-
- if (win->screen) {
- bScreen *scr = win->screen;
+ bScreen *scr = WM_window_get_active_screen(win);
+
+ if (scr) {
ScrArea *sa;
ARegion *ar;
int oldswin = scr->subwinactive;
@@ -1151,7 +1170,7 @@ void ED_screen_set_subwinactive(bContext *C, const wmEvent *event)
/* this used to be a notifier, but needs to be done immediate
* because it can undo setting the right button as active due
* to delayed notifier handling */
- UI_screen_free_active_but(C, win->screen);
+ UI_screen_free_active_but(C, scr);
}
else
region_cursor_set(win, scr->subwinactive, false);
@@ -1179,177 +1198,120 @@ int ED_screen_area_active(const bContext *C)
return 0;
}
+
+/* -------------------------------------------------------------------- */
+/* Screen changing */
+
+static bScreen *screen_fullscreen_find_associated_normal_screen(const Main *bmain, bScreen *screen)
+{
+ for (bScreen *screen_iter = bmain->screen.first; screen_iter; screen_iter = screen_iter->id.next) {
+ ScrArea *sa = screen_iter->areabase.first;
+ if (sa->full == screen) {
+ return screen_iter;
+ }
+ }
+
+ return screen;
+}
+
/**
- * operator call, WM + Window + screen already existed before
- *
- * \warning Do NOT call in area/region queues!
- * \returns success.
+ * \return the screen to activate.
+ * \warning The returned screen may not always equal \a screen_new!
*/
-bool ED_screen_set(bContext *C, bScreen *sc)
+bScreen *screen_change_prepare(bScreen *screen_old, bScreen *screen_new, Main *bmain, bContext *C, wmWindow *win)
{
- Main *bmain = CTX_data_main(C);
- wmWindowManager *wm = CTX_wm_manager(C);
- wmWindow *win = CTX_wm_window(C);
- bScreen *oldscreen = CTX_wm_screen(C);
-
/* validate screen, it's called with notifier reference */
- if (BLI_findindex(&bmain->screen, sc) == -1) {
- return true;
+ if (BLI_findindex(&bmain->screen, screen_new) == -1) {
+ return NULL;
}
- if (ELEM(sc->state, SCREENMAXIMIZED, SCREENFULL)) {
- /* find associated full */
- bScreen *sc1;
- for (sc1 = bmain->screen.first; sc1; sc1 = sc1->id.next) {
- ScrArea *sa = sc1->areabase.first;
- if (sa->full == sc) {
- sc = sc1;
- break;
- }
- }
+ if (ELEM(screen_new->state, SCREENMAXIMIZED, SCREENFULL)) {
+ screen_new = screen_fullscreen_find_associated_normal_screen(bmain, screen_new);
}
/* check for valid winid */
- if (sc->winid != 0 && sc->winid != win->winid) {
- return false;
+ if (!(screen_new->winid == 0 || screen_new->winid == win->winid)) {
+ return NULL;
}
-
- if (oldscreen != sc) {
- wmTimer *wt = oldscreen->animtimer;
- ScrArea *sa;
- Scene *oldscene = oldscreen->scene;
+
+ if (screen_old != screen_new) {
+ wmTimer *wt = screen_old->animtimer;
/* remove handlers referencing areas in old screen */
- for (sa = oldscreen->areabase.first; sa; sa = sa->next) {
+ for (ScrArea *sa = screen_old->areabase.first; sa; sa = sa->next) {
WM_event_remove_area_handler(&win->modalhandlers, sa);
}
/* we put timer to sleep, so screen_exit has to think there's no timer */
- oldscreen->animtimer = NULL;
+ screen_old->animtimer = NULL;
if (wt) {
- WM_event_timer_sleep(wm, win, wt, true);
+ WM_event_timer_sleep(CTX_wm_manager(C), win, wt, true);
}
-
- ED_screen_exit(C, win, oldscreen);
+ ED_screen_exit(C, win, screen_old);
/* Same scene, "transfer" playback to new screen. */
if (wt) {
- if (oldscene == sc->scene) {
- sc->animtimer = wt;
- }
- /* Else, stop playback. */
- else {
- oldscreen->animtimer = wt;
- ED_screen_animation_play(C, 0, 0);
- }
+ screen_new->animtimer = wt;
}
- win->screen = sc;
- CTX_wm_window_set(C, win); // stores C->wm.screen... hrmf
-
- /* prevent multiwin errors */
- sc->winid = win->winid;
-
- ED_screen_refresh(CTX_wm_manager(C), CTX_wm_window(C));
- WM_event_add_notifier(C, NC_WINDOW, NULL);
- WM_event_add_notifier(C, NC_SCREEN | ND_SCREENSET, sc);
-
- /* makes button hilites work */
- WM_event_add_mousemove(C);
-
- /* Needed to make sure all the derivedMeshes are
- * up-to-date before viewport starts acquiring this.
- *
- * This is needed in cases when, for example, boolean
- * modifier uses operant from invisible layer.
- * Without this trick boolean wouldn't apply correct.
- *
- * Quite the same happens when setting screen's scene,
- * so perhaps this is in fact correct thing to do.
- */
- if (oldscene != sc->scene) {
- BKE_scene_set_background(bmain, sc->scene);
- }
-
- /* Always do visible update since it's possible new screen will
- * have different layers visible in 3D view-ports.
- * This is possible because of view3d.lock_camera_and_layers option.
- */
- DAG_on_visible_update(bmain, false);
+ return screen_new;
}
- return true;
+ return NULL;
}
-static bool ed_screen_used(wmWindowManager *wm, bScreen *sc)
+void screen_changed_update(bContext *C, wmWindow *win, bScreen *sc)
{
- wmWindow *win;
+ Scene *scene = WM_window_get_active_scene(win);
+ WorkSpace *workspace = BKE_workspace_active_get(win->workspace_hook);
+ WorkSpaceLayout *layout = BKE_workspace_layout_find(workspace, sc);
- for (win = wm->windows.first; win; win = win->next) {
- if (win->screen == sc) {
- return true;
- }
+ CTX_wm_window_set(C, win); /* stores C->wm.screen... hrmf */
- if (ELEM(win->screen->state, SCREENMAXIMIZED, SCREENFULL)) {
- ScrArea *sa = win->screen->areabase.first;
- if (sa->full == sc) {
- return true;
- }
- }
- }
+ ED_screen_refresh(CTX_wm_manager(C), win);
- return false;
+ BKE_screen_view3d_scene_sync(sc, scene); /* sync new screen with scene data */
+ WM_event_add_notifier(C, NC_WINDOW, NULL);
+ WM_event_add_notifier(C, NC_SCREEN | ND_LAYOUTSET, layout);
+
+ /* makes button hilites work */
+ WM_event_add_mousemove(C);
}
-/* only call outside of area/region loops */
-bool ED_screen_delete(bContext *C, bScreen *sc)
+
+/**
+ * \brief Change the active screen.
+ *
+ * Operator call, WM + Window + screen already existed before
+ *
+ * \warning Do NOT call in area/region queues!
+ * \returns if screen changing was successful.
+ */
+bool ED_screen_change(bContext *C, bScreen *sc)
{
Main *bmain = CTX_data_main(C);
- wmWindowManager *wm = CTX_wm_manager(C);
wmWindow *win = CTX_wm_window(C);
- bScreen *newsc;
-
- /* don't allow deleting temp fullscreens for now */
- if (ELEM(sc->state, SCREENMAXIMIZED, SCREENFULL)) {
- return false;
- }
-
- /* screen can only be in use by one window at a time, so as
- * long as we are able to find a screen that is unused, we
- * can safely assume ours is not in use anywhere an delete it */
-
- for (newsc = sc->id.prev; newsc; newsc = newsc->id.prev)
- if (!ed_screen_used(wm, newsc) && !newsc->temp)
- break;
-
- if (!newsc) {
- for (newsc = sc->id.next; newsc; newsc = newsc->id.next)
- if (!ed_screen_used(wm, newsc) && !newsc->temp)
- break;
- }
+ bScreen *screen_old = CTX_wm_screen(C);
+ bScreen *screen_new = screen_change_prepare(screen_old, sc, bmain, C, win);
- if (!newsc) {
- return false;
- }
-
- ED_screen_set(C, newsc);
+ if (screen_new) {
+ WorkSpace *workspace = BKE_workspace_active_get(win->workspace_hook);
+ WM_window_set_active_screen(win, workspace, sc);
+ screen_changed_update(C, win, screen_new);
- if (win->screen != sc) {
- BKE_libblock_free(bmain, sc);
return true;
}
- else {
- return false;
- }
+
+ return false;
}
-static void ed_screen_set_3dview_camera(Scene *scene, bScreen *sc, ScrArea *sa, View3D *v3d)
+static void screen_set_3dview_camera(Scene *scene, ViewLayer *view_layer, ScrArea *sa, View3D *v3d)
{
/* fix any cameras that are used in the 3d view but not in the scene */
BKE_screen_view3d_sync(v3d, scene);
- if (!v3d->camera || !BKE_scene_base_find(scene, v3d->camera)) {
- v3d->camera = BKE_scene_camera_find(sc->scene);
+ if (!v3d->camera || !BKE_view_layer_base_find(view_layer, v3d->camera)) {
+ v3d->camera = BKE_view_layer_camera_find(view_layer);
// XXX if (sc == curscreen) handle_view3d_lock();
if (!v3d->camera) {
ARegion *ar;
@@ -1373,93 +1335,16 @@ static void ed_screen_set_3dview_camera(Scene *scene, bScreen *sc, ScrArea *sa,
}
}
-/* only call outside of area/region loops */
-void ED_screen_set_scene(bContext *C, bScreen *screen, Scene *scene)
+void ED_screen_update_after_scene_change(const bScreen *screen, Scene *scene_new, ViewLayer *view_layer)
{
- Main *bmain = CTX_data_main(C);
- bScreen *sc;
-
- if (screen == NULL)
- return;
-
- if (ed_screen_used(CTX_wm_manager(C), screen))
- ED_object_editmode_exit(C, EM_FREEDATA | EM_DO_UNDO);
-
- for (sc = bmain->screen.first; sc; sc = sc->id.next) {
- if ((U.flag & USER_SCENEGLOBAL) || sc == screen) {
-
- if (scene != sc->scene) {
- /* all areas endlocalview */
- // XXX ScrArea *sa = sc->areabase.first;
- // while (sa) {
- // endlocalview(sa);
- // sa = sa->next;
- // }
- sc->scene = scene;
- }
-
- }
- }
-
- // copy_view3d_lock(0); /* space.c */
-
- /* are there cameras in the views that are not in the scene? */
- for (sc = bmain->screen.first; sc; sc = sc->id.next) {
- if ((U.flag & USER_SCENEGLOBAL) || sc == screen) {
- ScrArea *sa = sc->areabase.first;
- while (sa) {
- SpaceLink *sl = sa->spacedata.first;
- while (sl) {
- if (sl->spacetype == SPACE_VIEW3D) {
- View3D *v3d = (View3D *) sl;
- ed_screen_set_3dview_camera(scene, sc, sa, v3d);
-
- }
- sl = sl->next;
- }
- sa = sa->next;
+ for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
+ for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) {
+ if (sl->spacetype == SPACE_VIEW3D) {
+ View3D *v3d = (View3D *)sl;
+ screen_set_3dview_camera(scene_new, view_layer, sa, v3d);
}
}
}
-
- CTX_data_scene_set(C, scene);
- BKE_scene_set_background(bmain, scene);
- DAG_on_visible_update(bmain, false);
-
- ED_render_engine_changed(bmain);
- ED_update_for_newframe(bmain, scene, 1);
-
- /* complete redraw */
- WM_event_add_notifier(C, NC_WINDOW, NULL);
-
-}
-
-/**
- * \note Only call outside of area/region loops
- * \return true if successful
- */
-bool ED_screen_delete_scene(bContext *C, Scene *scene)
-{
- Main *bmain = CTX_data_main(C);
- Scene *newscene;
-
- if (scene->id.prev)
- newscene = scene->id.prev;
- else if (scene->id.next)
- newscene = scene->id.next;
- else
- return false;
-
- ED_screen_set_scene(C, CTX_wm_screen(C), newscene);
-
- BKE_libblock_remap(bmain, scene, newscene, ID_REMAP_SKIP_INDIRECT_USAGE | ID_REMAP_SKIP_NEVER_NULL_USAGE);
-
- id_us_clear_real(&scene->id);
- if (scene->id.us == 0) {
- BKE_libblock_free(bmain, scene);
- }
-
- return true;
}
ScrArea *ED_screen_full_newspace(bContext *C, ScrArea *sa, int type)
@@ -1566,6 +1451,7 @@ void ED_screen_full_restore(bContext *C, ScrArea *sa)
ScrArea *ED_screen_state_toggle(bContext *C, wmWindow *win, ScrArea *sa, const short state)
{
wmWindowManager *wm = CTX_wm_manager(C);
+ WorkSpace *workspace = WM_window_get_active_workspace(win);
bScreen *sc, *oldscreen;
ARegion *ar;
@@ -1587,9 +1473,10 @@ ScrArea *ED_screen_state_toggle(bContext *C, wmWindow *win, ScrArea *sa, const s
}
if (sa && sa->full) {
+ WorkSpaceLayout *layout_old = WM_window_get_active_layout(win);
/* restoring back to SCREENNORMAL */
sc = sa->full; /* the old screen to restore */
- oldscreen = win->screen; /* the one disappearing */
+ oldscreen = WM_window_get_active_screen(win); /* the one disappearing */
sc->state = SCREENNORMAL;
@@ -1628,9 +1515,9 @@ ScrArea *ED_screen_state_toggle(bContext *C, wmWindow *win, ScrArea *sa, const s
sc->animtimer = oldscreen->animtimer;
oldscreen->animtimer = NULL;
- ED_screen_set(C, sc);
+ ED_screen_change(C, sc);
- BKE_libblock_free(CTX_data_main(C), oldscreen);
+ BKE_workspace_layout_remove(CTX_data_main(C), workspace, layout_old);
/* After we've restored back to SCREENNORMAL, we have to wait with
* screen handling as it uses the area coords which aren't updated yet.
@@ -1640,14 +1527,18 @@ ScrArea *ED_screen_state_toggle(bContext *C, wmWindow *win, ScrArea *sa, const s
}
else {
/* change from SCREENNORMAL to new state */
+ WorkSpaceLayout *layout_new;
ScrArea *newa;
char newname[MAX_ID_NAME - 2];
- oldscreen = win->screen;
+ oldscreen = WM_window_get_active_screen(win);
oldscreen->state = state;
BLI_snprintf(newname, sizeof(newname), "%s-%s", oldscreen->id.name + 2, "nonnormal");
- sc = ED_screen_add(win, oldscreen->scene, newname);
+
+ layout_new = ED_workspace_layout_add(workspace, win, newname);
+
+ sc = BKE_workspace_layout_screen_get(layout_new);
sc->state = state;
sc->redraws_flag = oldscreen->redraws_flag;
sc->temp = oldscreen->temp;
@@ -1702,7 +1593,7 @@ ScrArea *ED_screen_state_toggle(bContext *C, wmWindow *win, ScrArea *sa, const s
BLI_assert(false);
}
- ED_screen_set(C, sc);
+ ED_screen_change(C, sc);
}
/* XXX bad code: setscreen() ends with first area active. fullscreen render assumes this too */
@@ -1837,14 +1728,9 @@ void ED_screen_animation_timer_update(bScreen *screen, int redraws, int refresh)
}
}
-/* results in fully updated anim system
- * screen can be NULL */
-void ED_update_for_newframe(Main *bmain, Scene *scene, int UNUSED(mute))
+/* results in fully updated anim system */
+void ED_update_for_newframe(Main *bmain, Scene *scene, ViewLayer *view_layer, struct Depsgraph *depsgraph)
{
- wmWindowManager *wm = bmain->wm.first;
- wmWindow *window;
- int layers = 0;
-
#ifdef DURIAN_CAMERA_SWITCH
void *camera = BKE_scene_camera_switch_find(scene);
if (camera && scene->camera != camera) {
@@ -1852,19 +1738,15 @@ void ED_update_for_newframe(Main *bmain, Scene *scene, int UNUSED(mute))
scene->camera = camera;
/* are there cameras in the views that are not in the scene? */
for (sc = bmain->screen.first; sc; sc = sc->id.next) {
- BKE_screen_view3d_scene_sync(sc);
+ BKE_screen_view3d_scene_sync(sc, scene);
}
}
#endif
ED_clip_update_frame(bmain, scene->r.cfra);
- /* get layers from all windows */
- for (window = wm->windows.first; window; window = window->next)
- layers |= BKE_screen_visible_layers(window->screen, scene);
-
/* this function applies the changes too */
- BKE_scene_update_for_newframe(bmain->eval_ctx, bmain, scene, layers);
+ BKE_scene_graph_update_for_newframe(bmain->eval_ctx, depsgraph, bmain, scene, view_layer);
/* composite */
if (scene->use_nodes && scene->nodetree)
@@ -1885,11 +1767,10 @@ void ED_update_for_newframe(Main *bmain, Scene *scene, int UNUSED(mute))
/*
* return true if any active area requires to see in 3D
*/
-bool ED_screen_stereo3d_required(bScreen *screen)
+bool ED_screen_stereo3d_required(const bScreen *screen, const Scene *scene)
{
ScrArea *sa;
- Scene *sce = screen->scene;
- const bool is_multiview = (sce->r.scemode & R_MULTIVIEW) != 0;
+ const bool is_multiview = (scene->r.scemode & R_MULTIVIEW) != 0;
for (sa = screen->areabase.first; sa; sa = sa->next) {
switch (sa->spacetype) {
@@ -1964,3 +1845,29 @@ bool ED_screen_stereo3d_required(bScreen *screen)
return false;
}
+
+/**
+ * Find the scene displayed in \a screen.
+ * \note Assumes \a screen to be visible/active!
+ */
+
+Scene *ED_screen_scene_find_with_window(const bScreen *screen, const wmWindowManager *wm, struct wmWindow **r_window)
+{
+ for (wmWindow *win = wm->windows.first; win; win = win->next) {
+ if (WM_window_get_active_screen(win) == screen) {
+ if (r_window) {
+ *r_window = win;
+ }
+ return WM_window_get_active_scene(win);
+ }
+ }
+
+ BLI_assert(0);
+ return NULL;
+}
+
+
+Scene *ED_screen_scene_find(const bScreen *screen, const wmWindowManager *wm)
+{
+ return ED_screen_scene_find_with_window(screen, wm, NULL);
+}
diff --git a/source/blender/editors/screen/screen_intern.h b/source/blender/editors/screen/screen_intern.h
index db5259f5865..df92ab86ef2 100644
--- a/source/blender/editors/screen/screen_intern.h
+++ b/source/blender/editors/screen/screen_intern.h
@@ -33,6 +33,7 @@
struct bContext;
struct bContextDataResult;
+struct Main;
/* internal exports only */
@@ -43,9 +44,14 @@ struct bContextDataResult;
/* area.c */
void ED_area_data_copy(ScrArea *sa_dst, ScrArea *sa_src, const bool do_free);
void ED_area_data_swap(ScrArea *sa1, ScrArea *sa2);
-void region_toggle_hidden(struct bContext *C, ARegion *ar, const bool do_fade);
+void region_toggle_hidden(struct bContext *C, ARegion *ar, const bool do_fade);
/* screen_edit.c */
+bScreen *screen_add(const char *name, const int winsize_x, const int winsize_y);
+void screen_data_copy(bScreen *to, bScreen *from);
+void screen_new_activate_prepare(const wmWindow *win, bScreen *screen_new);
+void screen_changed_update(struct bContext *C, wmWindow *win, bScreen *sc);
+bScreen *screen_change_prepare(bScreen *screen_old, bScreen *screen_new, struct Main *bmain, struct bContext *C, wmWindow *win);
ScrEdge *screen_findedge(bScreen *sc, ScrVert *v1, ScrVert *v2);
ScrArea *area_split(bScreen *sc, ScrArea *sa, char dir, float fac, int merge);
int screen_area_join(struct bContext *C, bScreen *scr, ScrArea *sa1, ScrArea *sa2);
@@ -57,7 +63,7 @@ void removedouble_scrverts(bScreen *sc);
void removedouble_scredges(bScreen *sc);
void removenotused_scredges(bScreen *sc);
bool scredge_is_horizontal(ScrEdge *se);
-ScrEdge *screen_find_active_scredge(bScreen *sc,
+ScrEdge *screen_find_active_scredge(const bScreen *sc,
const int winsize_x, const int winsize_y,
const int mx, const int my);
@@ -76,5 +82,8 @@ void SCREEN_OT_screencast(struct wmOperatorType *ot);
/* screen_ops.c */
void region_blend_start(struct bContext *C, struct ScrArea *sa, struct ARegion *ar);
+/* workspace_layout_edit.c */
+bool workspace_layout_set_poll(const struct WorkSpaceLayout *layout);
+
#endif /* __SCREEN_INTERN_H__ */
diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c
index 2e5f93ff521..bc266180e09 100644
--- a/source/blender/editors/screen/screen_ops.c
+++ b/source/blender/editors/screen/screen_ops.c
@@ -48,11 +48,13 @@
#include "DNA_meta_types.h"
#include "DNA_mask_types.h"
#include "DNA_node_types.h"
+#include "DNA_workspace_types.h"
#include "DNA_userdef_types.h"
#include "BKE_context.h"
#include "BKE_customdata.h"
#include "BKE_global.h"
+#include "BKE_icons.h"
#include "BKE_main.h"
#include "BKE_object.h"
#include "BKE_report.h"
@@ -61,10 +63,13 @@
#include "BKE_editmesh.h"
#include "BKE_sound.h"
#include "BKE_mask.h"
+#include "BKE_workspace.h"
#include "WM_api.h"
#include "WM_types.h"
+#include "DEG_depsgraph.h"
+
#include "ED_armature.h"
#include "ED_clip.h"
#include "ED_image.h"
@@ -147,6 +152,7 @@ int ED_operator_scene_editable(bContext *C)
int ED_operator_objectmode(bContext *C)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Scene *scene = CTX_data_scene(C);
Object *obact = CTX_data_active_object(C);
@@ -156,7 +162,7 @@ int ED_operator_objectmode(bContext *C)
return 0;
/* add a check for ob->mode too? */
- if (obact && (obact->mode != OB_MODE_OBJECT))
+ if (obact && (workspace->object_mode != OB_MODE_OBJECT))
return 0;
return 1;
@@ -298,35 +304,39 @@ int ED_operator_console_active(bContext *C)
return ed_spacetype_test(C, SPACE_CONSOLE);
}
-static int ed_object_hidden(Object *ob)
+static int ed_object_hidden(Object *ob, eObjectMode object_mode)
{
/* if hidden but in edit mode, we still display, can happen with animation */
- return ((ob->restrictflag & OB_RESTRICT_VIEW) && !(ob->mode & OB_MODE_EDIT));
+ return ((ob->restrictflag & OB_RESTRICT_VIEW) && !(object_mode & OB_MODE_EDIT));
}
int ED_operator_object_active(bContext *C)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Object *ob = ED_object_active_context(C);
- return ((ob != NULL) && !ed_object_hidden(ob));
+ return ((ob != NULL) && !ed_object_hidden(ob, workspace->object_mode));
}
int ED_operator_object_active_editable(bContext *C)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Object *ob = ED_object_active_context(C);
- return ((ob != NULL) && !ID_IS_LINKED(ob) && !ed_object_hidden(ob));
+ return ((ob != NULL) && !ID_IS_LINKED(ob) && !ed_object_hidden(ob, workspace->object_mode));
}
int ED_operator_object_active_editable_mesh(bContext *C)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Object *ob = ED_object_active_context(C);
- return ((ob != NULL) && !ID_IS_LINKED(ob) && !ed_object_hidden(ob) &&
+ return ((ob != NULL) && !ID_IS_LINKED(ob) && !ed_object_hidden(ob, workspace->object_mode) &&
(ob->type == OB_MESH) && !ID_IS_LINKED(ob->data));
}
int ED_operator_object_active_editable_font(bContext *C)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Object *ob = ED_object_active_context(C);
- return ((ob != NULL) && !ID_IS_LINKED(ob) && !ed_object_hidden(ob) &&
+ return ((ob != NULL) && !ID_IS_LINKED(ob) && !ed_object_hidden(ob, workspace->object_mode) &&
(ob->type == OB_FONT));
}
@@ -371,11 +381,14 @@ int ED_operator_posemode_exclusive(bContext *C)
{
Object *obact = CTX_data_active_object(C);
- if (obact && !(obact->mode & OB_MODE_EDIT)) {
- Object *obpose;
- if ((obpose = BKE_object_pose_armature_get(obact))) {
- if (obact == obpose) {
- return 1;
+ if (obact) {
+ const WorkSpace *workspace = CTX_wm_workspace(C);
+ if ((workspace->object_mode & OB_MODE_EDIT) == 0) {
+ Object *obpose;
+ if ((obpose = BKE_object_pose_armature_get(obact))) {
+ if (obact == obpose) {
+ return 1;
+ }
}
}
}
@@ -389,9 +402,15 @@ int ED_operator_posemode_context(bContext *C)
{
Object *obpose = ED_pose_object_from_context(C);
- if (obpose && !(obpose->mode & OB_MODE_EDIT)) {
- if (BKE_object_pose_context_check(obpose)) {
- return 1;
+ if (obpose) {
+ const WorkSpace *workspace = CTX_wm_workspace(C);
+ /* TODO, should we allow this out of pose mode? */
+ if (workspace->object_mode & OB_MODE_POSE) {
+ // if ((workspace->object_mode & OB_MODE_EDIT) == 0) {
+ if (BKE_object_pose_context_check(obpose)) {
+ return 1;
+ }
+ // }
}
}
@@ -402,11 +421,17 @@ int ED_operator_posemode(bContext *C)
{
Object *obact = CTX_data_active_object(C);
- if (obact && !(obact->mode & OB_MODE_EDIT)) {
- Object *obpose;
- if ((obpose = BKE_object_pose_armature_get(obact))) {
- if ((obact == obpose) || (obact->mode & OB_MODE_WEIGHT_PAINT)) {
- return 1;
+
+ if (obact) {
+ const WorkSpace *workspace = CTX_wm_workspace(C);
+ if ((workspace->object_mode & OB_MODE_EDIT) == 0) {
+ Object *obpose;
+ if ((obpose = BKE_object_pose_armature_get(obact))) {
+ if (((workspace->object_mode & OB_MODE_POSE) && (obact == obpose)) ||
+ (workspace->object_mode & OB_MODE_WEIGHT_PAINT))
+ {
+ return 1;
+ }
}
}
}
@@ -542,9 +567,10 @@ int ED_operator_mask(bContext *C)
}
case SPACE_IMAGE:
{
+ WorkSpace *workspace = CTX_wm_workspace(C);
SpaceImage *sima = sa->spacedata.first;
- Scene *scene = CTX_data_scene(C);
- return ED_space_image_check_show_maskedit(scene, sima);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ return ED_space_image_check_show_maskedit(sima, workspace, view_layer);
}
}
}
@@ -552,6 +578,12 @@ int ED_operator_mask(bContext *C)
return false;
}
+int ED_operator_camera(bContext *C)
+{
+ struct Camera *cam = CTX_data_pointer_get_type(C, "camera", &RNA_Camera).data;
+ return (cam != NULL);
+}
+
/** \} */
/* -------------------------------------------------------------------- */
@@ -998,13 +1030,17 @@ static void SCREEN_OT_area_swap(wmOperatorType *ot)
/* operator callback */
static int area_dupli_invoke(bContext *C, wmOperator *op, const wmEvent *event)
{
- wmWindow *newwin, *win;
- bScreen *newsc, *sc;
+ wmWindow *newwin, *win = CTX_wm_window(C);
+ Scene *scene;
+ WorkSpace *workspace = WM_window_get_active_workspace(win);
+ WorkSpaceLayout *layout_old = WM_window_get_active_layout(win);
+ WorkSpaceLayout *layout_new;
+ bScreen *newsc;
ScrArea *sa;
rcti rect;
win = CTX_wm_window(C);
- sc = CTX_wm_screen(C);
+ scene = CTX_data_scene(C);
sa = CTX_wm_area(C);
/* XXX hrmf! */
@@ -1030,11 +1066,15 @@ static int area_dupli_invoke(bContext *C, wmOperator *op, const wmEvent *event)
}
*newwin->stereo3d_format = *win->stereo3d_format;
-
+
+ newwin->scene = scene;
+
+ WM_window_set_active_workspace(newwin, workspace);
/* allocs new screen and adds to newly created window, using window size */
- newsc = ED_screen_add(newwin, CTX_data_scene(C), sc->id.name + 2);
- newwin->screen = newsc;
-
+ layout_new = ED_workspace_layout_add(workspace, newwin, BKE_workspace_layout_name_get(layout_old));
+ newsc = BKE_workspace_layout_screen_get(layout_new);
+ WM_window_set_active_layout(newwin, workspace, layout_new);
+
/* copy area to new screen */
ED_area_data_copy((ScrArea *)newsc->areabase.first, sa, true);
@@ -1288,6 +1328,8 @@ static void area_move_apply_do(
}
}
WM_event_add_notifier(C, NC_SCREEN | NA_EDITED, NULL); /* redraw everything */
+ /* Update preview thumbnail */
+ BKE_icon_changed(sc->id.icon_id);
}
}
@@ -1583,7 +1625,9 @@ static int area_split_apply(bContext *C, wmOperator *op)
ED_area_tag_redraw(sd->narea);
WM_event_add_notifier(C, NC_SCREEN | NA_EDITED, NULL);
-
+ /* Update preview thumbnail */
+ BKE_icon_changed(sc->id.icon_id);
+
return 1;
}
@@ -1852,7 +1896,7 @@ static int area_split_modal(bContext *C, wmOperator *op, const wmEvent *event)
ED_area_tag_redraw(sd->sarea);
}
- CTX_wm_window(C)->screen->do_draw = true;
+ CTX_wm_screen(C)->do_draw = true;
}
float fac = (float)(sd->delta + sd->origval - sd->origmin) / sd->origsize;
@@ -2175,12 +2219,11 @@ static void areas_do_frame_follow(bContext *C, bool middle)
bScreen *scr = CTX_wm_screen(C);
Scene *scene = CTX_data_scene(C);
wmWindowManager *wm = CTX_wm_manager(C);
- wmWindow *window;
- for (window = wm->windows.first; window; window = window->next) {
- ScrArea *sa;
- for (sa = window->screen->areabase.first; sa; sa = sa->next) {
- ARegion *ar;
- for (ar = sa->regionbase.first; ar; ar = ar->next) {
+ for (wmWindow *window = wm->windows.first; window; window = window->next) {
+ const bScreen *screen = WM_window_get_active_screen(window);
+
+ for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
+ for (ARegion *ar = sa->regionbase.first; ar; ar = ar->next) {
/* do follow here if editor type supports it */
if ((scr->redraws_flag & TIME_FOLLOW)) {
if ((ar->regiontype == RGN_TYPE_WINDOW &&
@@ -2495,64 +2538,16 @@ static void SCREEN_OT_marker_jump(wmOperatorType *ot)
/** \name Set Screen Operator
* \{ */
-static bool screen_set_is_ok(bScreen *screen, bScreen *screen_prev)
-{
- return ((screen->winid == 0) &&
- /* in typical usage these should have a nonzero winid
- * (all temp screens should be used, or closed & freed). */
- (screen->temp == false) &&
- (screen->state == SCREENNORMAL) &&
- (screen != screen_prev) &&
- (screen->id.name[2] != '.' || !(U.uiflag & USER_HIDE_DOT)));
-}
-
/* function to be called outside UI context, or for redo */
static int screen_set_exec(bContext *C, wmOperator *op)
{
- Main *bmain = CTX_data_main(C);
- bScreen *screen = CTX_wm_screen(C);
- bScreen *screen_prev = screen;
-
- ScrArea *sa = CTX_wm_area(C);
- int tot = BLI_listbase_count(&bmain->screen);
+ WorkSpace *workspace = CTX_wm_workspace(C);
int delta = RNA_int_get(op->ptr, "delta");
-
- /* temp screens are for userpref or render display */
- if (screen->temp || (sa && sa->full && sa->full->temp)) {
- return OPERATOR_CANCELLED;
- }
-
- if (delta == 1) {
- while (tot--) {
- screen = screen->id.next;
- if (screen == NULL) screen = bmain->screen.first;
- if (screen_set_is_ok(screen, screen_prev)) {
- break;
- }
- }
- }
- else if (delta == -1) {
- while (tot--) {
- screen = screen->id.prev;
- if (screen == NULL) screen = bmain->screen.last;
- if (screen_set_is_ok(screen, screen_prev)) {
- break;
- }
- }
- }
- else {
- screen = NULL;
- }
-
- if (screen && screen_prev != screen) {
- /* return to previous state before switching screens */
- if (sa && sa->full) {
- ED_screen_full_restore(C, sa); /* may free 'screen_prev' */
- }
-
- ED_screen_set(C, screen);
+
+ if (ED_workspace_layout_cycle(workspace, delta, C)) {
return OPERATOR_FINISHED;
}
+
return OPERATOR_CANCELLED;
}
@@ -3396,7 +3391,7 @@ static int header_toggle_menus_exec(bContext *C, wmOperator *UNUSED(op))
sa->flag = sa->flag ^ HEADER_NO_PULLDOWN;
ED_area_tag_redraw(sa);
- WM_event_add_notifier(C, NC_SCREEN | NA_EDITED, NULL);
+ WM_event_add_notifier(C, NC_SCREEN | NA_EDITED, NULL);
return OPERATOR_FINISHED;
}
@@ -3589,6 +3584,8 @@ static int screen_animation_step(bContext *C, wmOperator *UNUSED(op), const wmEv
if (screen->animtimer && screen->animtimer == event->customdata) {
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ struct Depsgraph *depsgraph = CTX_data_depsgraph(C);
wmTimer *wt = screen->animtimer;
ScreenAnimData *sad = wt->customdata;
wmWindowManager *wm = CTX_wm_manager(C);
@@ -3699,10 +3696,12 @@ static int screen_animation_step(bContext *C, wmOperator *UNUSED(op), const wmEv
}
/* since we follow drawflags, we can't send notifier but tag regions ourselves */
- ED_update_for_newframe(bmain, scene, 1);
+ ED_update_for_newframe(bmain, scene, view_layer, depsgraph);
for (window = wm->windows.first; window; window = window->next) {
- for (sa = window->screen->areabase.first; sa; sa = sa->next) {
+ const bScreen *win_screen = WM_window_get_active_screen(window);
+
+ for (sa = win_screen->areabase.first; sa; sa = sa->next) {
ARegion *ar;
for (ar = sa->regionbase.first; ar; ar = ar->next) {
bool redraw = false;
@@ -3782,11 +3781,11 @@ static void SCREEN_OT_animation_step(wmOperatorType *ot)
/* find window that owns the animation timer */
bScreen *ED_screen_animation_playing(const wmWindowManager *wm)
{
- wmWindow *win;
+ for (wmWindow *win = wm->windows.first; win; win = win->next) {
+ bScreen *screen = WM_window_get_active_screen(win);
- for (win = wm->windows.first; win; win = win->next) {
- if (win->screen->animtimer || win->screen->scrubbing) {
- return win->screen;
+ if (screen->animtimer || screen->scrubbing) {
+ return screen;
}
}
@@ -3795,11 +3794,11 @@ bScreen *ED_screen_animation_playing(const wmWindowManager *wm)
bScreen *ED_screen_animation_no_scrub(const wmWindowManager *wm)
{
- wmWindow *win;
+ for (wmWindow *win = wm->windows.first; win; win = win->next) {
+ bScreen *screen = WM_window_get_active_screen(win);
- for (win = wm->windows.first; win; win = win->next) {
- if (win->screen->animtimer) {
- return win->screen;
+ if (screen->animtimer) {
+ return screen;
}
}
@@ -4057,11 +4056,13 @@ static void SCREEN_OT_userpref_show(struct wmOperatorType *ot)
static int screen_new_exec(bContext *C, wmOperator *UNUSED(op))
{
wmWindow *win = CTX_wm_window(C);
- bScreen *sc = CTX_wm_screen(C);
-
- sc = ED_screen_duplicate(win, sc);
- WM_event_add_notifier(C, NC_SCREEN | ND_SCREENBROWSE, sc);
-
+ WorkSpace *workspace = BKE_workspace_active_get(win->workspace_hook);
+ WorkSpaceLayout *layout_old = BKE_workspace_active_layout_get(win->workspace_hook);
+ WorkSpaceLayout *layout_new;
+
+ layout_new = ED_workspace_layout_duplicate(workspace, layout_old, win);
+ WM_event_add_notifier(C, NC_SCREEN | ND_LAYOUTBROWSE, layout_new);
+
return OPERATOR_FINISHED;
}
@@ -4086,9 +4087,11 @@ static void SCREEN_OT_new(wmOperatorType *ot)
static int screen_delete_exec(bContext *C, wmOperator *UNUSED(op))
{
bScreen *sc = CTX_wm_screen(C);
-
- WM_event_add_notifier(C, NC_SCREEN | ND_SCREENDELETE, sc);
-
+ WorkSpace *workspace = CTX_wm_workspace(C);
+ WorkSpaceLayout *layout = BKE_workspace_layout_find(workspace, sc);
+
+ WM_event_add_notifier(C, NC_SCREEN | ND_LAYOUTDELETE, layout);
+
return OPERATOR_FINISHED;
}
@@ -4106,103 +4109,6 @@ static void SCREEN_OT_delete(wmOperatorType *ot)
/** \} */
/* -------------------------------------------------------------------- */
-/** \name New Scene Operator
- * \{ */
-
-static int scene_new_exec(bContext *C, wmOperator *op)
-{
- Scene *newscene, *scene = CTX_data_scene(C);
- Main *bmain = CTX_data_main(C);
- int type = RNA_enum_get(op->ptr, "type");
-
- if (type == SCE_COPY_NEW) {
- newscene = BKE_scene_add(bmain, DATA_("Scene"));
- }
- else { /* different kinds of copying */
- newscene = BKE_scene_copy(bmain, scene, type);
-
- /* these can't be handled in blenkernel currently, so do them here */
- if (type == SCE_COPY_LINK_DATA) {
- ED_object_single_users(bmain, newscene, false, true);
- }
- else if (type == SCE_COPY_FULL) {
- ED_editors_flush_edits(C, false);
- ED_object_single_users(bmain, newscene, true, true);
- }
- }
-
- ED_screen_set_scene(C, CTX_wm_screen(C), newscene);
-
- WM_event_add_notifier(C, NC_SCENE | ND_SCENEBROWSE, newscene);
-
- return OPERATOR_FINISHED;
-}
-
-static void SCENE_OT_new(wmOperatorType *ot)
-{
- static const EnumPropertyItem type_items[] = {
- {SCE_COPY_NEW, "NEW", 0, "New", "Add new scene"},
- {SCE_COPY_EMPTY, "EMPTY", 0, "Copy Settings", "Make a copy without any objects"},
- {SCE_COPY_LINK_OB, "LINK_OBJECTS", 0, "Link Objects", "Link to the objects from the current scene"},
- {SCE_COPY_LINK_DATA, "LINK_OBJECT_DATA", 0, "Link Object Data", "Copy objects linked to data from the current scene"},
- {SCE_COPY_FULL, "FULL_COPY", 0, "Full Copy", "Make a full copy of the current scene"},
- {0, NULL, 0, NULL, NULL}};
-
- /* identifiers */
- ot->name = "New Scene";
- ot->description = "Add new scene by type";
- ot->idname = "SCENE_OT_new";
-
- /* api callbacks */
- ot->exec = scene_new_exec;
- ot->invoke = WM_menu_invoke;
-
- /* flags */
- ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-
- /* properties */
- ot->prop = RNA_def_enum(ot->srna, "type", type_items, 0, "Type", "");
-}
-
-/** \} */
-
-/* -------------------------------------------------------------------- */
-/** \name Delete Screen Operator
- * \{ */
-
-static int scene_delete_exec(bContext *C, wmOperator *UNUSED(op))
-{
- Scene *scene = CTX_data_scene(C);
-
- if (ED_screen_delete_scene(C, scene) == false) {
- return OPERATOR_CANCELLED;
- }
-
- if (G.debug & G_DEBUG)
- printf("scene delete %p\n", scene);
-
- WM_event_add_notifier(C, NC_SCENE | NA_REMOVED, scene);
-
- return OPERATOR_FINISHED;
-}
-
-static void SCENE_OT_delete(wmOperatorType *ot)
-{
- /* identifiers */
- ot->name = "Delete Scene";
- ot->description = "Delete active scene";
- ot->idname = "SCENE_OT_delete";
-
- /* api callbacks */
- ot->exec = scene_delete_exec;
-
- /* flags */
- ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-}
-
-/** \} */
-
-/* -------------------------------------------------------------------- */
/** \name Region Alpha Blending Operator
* \{ */
@@ -4480,13 +4386,11 @@ void ED_operatortypes_screen(void)
WM_operatortype_append(SCREEN_OT_animation_step);
WM_operatortype_append(SCREEN_OT_animation_play);
WM_operatortype_append(SCREEN_OT_animation_cancel);
-
+
/* new/delete */
WM_operatortype_append(SCREEN_OT_new);
WM_operatortype_append(SCREEN_OT_delete);
- WM_operatortype_append(SCENE_OT_new);
- WM_operatortype_append(SCENE_OT_delete);
-
+
/* tools shared by more space types */
WM_operatortype_append(ED_OT_undo);
WM_operatortype_append(ED_OT_undo_push);
diff --git a/source/blender/editors/screen/screendump.c b/source/blender/editors/screen/screendump.c
index 2dd7400bc37..69891a727d4 100644
--- a/source/blender/editors/screen/screendump.c
+++ b/source/blender/editors/screen/screendump.c
@@ -54,7 +54,9 @@
#include "BKE_writeavi.h"
#include "BIF_gl.h"
-#include "BIF_glutil.h"
+
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
#include "RNA_access.h"
#include "RNA_define.h"
@@ -451,25 +453,24 @@ static void screenshot_startjob(void *sjv, short *stop, short *do_update, float
/* Helper callback for drawing the cursor itself */
static void screencast_draw_cursor(bContext *UNUSED(C), int x, int y, void *UNUSED(p_ptr))
{
-
- glPushMatrix();
-
- glTranslatef((float)x, (float)y, 0.0f);
-
-
glEnable(GL_LINE_SMOOTH);
glEnable(GL_BLEND);
-
- glColor4ub(0, 0, 0, 32);
- glutil_draw_filled_arc(0.0, M_PI * 2.0, 20, 40);
-
- glColor4ub(255, 255, 255, 128);
- glutil_draw_lined_arc(0.0, M_PI * 2.0, 20, 40);
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ immUniformColor4ub(0, 0, 0, 32);
+ imm_draw_circle_fill_2d(pos, (float)x, (float)y, 20, 40);
+
+ immUniformColor4ub(255, 255, 255, 128);
+ imm_draw_circle_wire_2d(pos, (float)x, (float)y, 20, 40);
+
+ immUnbindProgram();
glDisable(GL_BLEND);
glDisable(GL_LINE_SMOOTH);
-
- glPopMatrix();
}
/* Turn brush cursor in 3D view on/off */
diff --git a/source/blender/editors/screen/workspace_edit.c b/source/blender/editors/screen/workspace_edit.c
new file mode 100644
index 00000000000..1ec83ed7c08
--- /dev/null
+++ b/source/blender/editors/screen/workspace_edit.c
@@ -0,0 +1,422 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/editors/screen/workspace_edit.c
+ * \ingroup edscr
+ */
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "BLI_utildefines.h"
+#include "BLI_fileops.h"
+#include "BLI_listbase.h"
+#include "BLI_path_util.h"
+#include "BLI_string.h"
+
+#include "BKE_appdir.h"
+#include "BKE_blendfile.h"
+#include "BKE_context.h"
+#include "BKE_idcode.h"
+#include "BKE_main.h"
+#include "BKE_library.h"
+#include "BKE_report.h"
+#include "BKE_scene.h"
+#include "BKE_screen.h"
+#include "BKE_workspace.h"
+
+#include "BLO_readfile.h"
+
+#include "DNA_object_types.h"
+#include "DNA_screen_types.h"
+#include "DNA_windowmanager_types.h"
+#include "DNA_workspace_types.h"
+
+#include "ED_object.h"
+#include "ED_screen.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "RNA_access.h"
+
+#include "UI_interface.h"
+#include "UI_resources.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "screen_intern.h"
+
+
+/** \name Workspace API
+ *
+ * \brief API for managing workspaces and their data.
+ * \{ */
+
+WorkSpace *ED_workspace_add(
+ Main *bmain, const char *name, Scene *scene,
+ ViewLayer *act_view_layer, ViewRender *view_render)
+{
+ WorkSpace *workspace = BKE_workspace_add(bmain, name);
+
+ BKE_workspace_view_layer_set(workspace, act_view_layer, scene);
+ BKE_viewrender_copy(&workspace->view_render, view_render);
+
+ return workspace;
+}
+
+static void workspace_change_update_view_layer(
+ WorkSpace *workspace_new, const WorkSpace *workspace_old,
+ Scene *scene)
+{
+ if (!BKE_workspace_view_layer_get(workspace_new, scene)) {
+ BKE_workspace_view_layer_set(workspace_new, BKE_workspace_view_layer_get(workspace_old, scene), scene);
+ }
+}
+
+static void workspace_change_update(
+ WorkSpace *workspace_new, const WorkSpace *workspace_old,
+ bContext *C)
+{
+ /* needs to be done before changing mode! (to ensure right context) */
+ workspace_change_update_view_layer(workspace_new, workspace_old, CTX_data_scene(C));
+}
+
+static bool workspace_change_find_new_layout_cb(const WorkSpaceLayout *layout, void *UNUSED(arg))
+{
+ /* return false to stop the iterator if we've found a layout that can be activated */
+ return workspace_layout_set_poll(layout) ? false : true;
+}
+
+static WorkSpaceLayout *workspace_change_get_new_layout(
+ WorkSpace *workspace_new, wmWindow *win)
+{
+ /* ED_workspace_duplicate may have stored a layout to activate once the workspace gets activated. */
+ WorkSpaceLayout *layout_new;
+ bScreen *screen_new;
+
+ if (win->workspace_hook->temp_workspace_store) {
+ layout_new = win->workspace_hook->temp_layout_store;
+ }
+ else {
+ layout_new = BKE_workspace_hook_layout_for_workspace_get(win->workspace_hook, workspace_new);
+ if (!layout_new) {
+ layout_new = BKE_workspace_layouts_get(workspace_new)->first;
+ }
+ }
+ screen_new = BKE_workspace_layout_screen_get(layout_new);
+
+ if (screen_new->winid) {
+ /* screen is already used, try to find a free one */
+ WorkSpaceLayout *layout_temp = BKE_workspace_layout_iter_circular(
+ workspace_new, layout_new, workspace_change_find_new_layout_cb,
+ NULL, false);
+ if (!layout_temp) {
+ /* fallback solution: duplicate layout */
+ layout_temp = ED_workspace_layout_duplicate(workspace_new, layout_new, win);
+ }
+ layout_new = layout_temp;
+ }
+
+ return layout_new;
+}
+
+/**
+ * \brief Change the active workspace.
+ *
+ * Operator call, WM + Window + screen already existed before
+ * Pretty similar to #ED_screen_change since changing workspace also changes screen.
+ *
+ * \warning Do NOT call in area/region queues!
+ * \returns if workspace changing was successful.
+ */
+bool ED_workspace_change(
+ WorkSpace *workspace_new, bContext *C, wmWindow *win)
+{
+ Main *bmain = CTX_data_main(C);
+ WorkSpace *workspace_old = WM_window_get_active_workspace(win);
+ WorkSpaceLayout *layout_new = workspace_change_get_new_layout(workspace_new, win);
+ bScreen *screen_new = BKE_workspace_layout_screen_get(layout_new);
+ bScreen *screen_old = BKE_workspace_active_screen_get(win->workspace_hook);
+
+ win->workspace_hook->temp_layout_store = NULL;
+ if (workspace_old == workspace_new) {
+ /* Could also return true, everything that needs to be done was done (nothing :P), but nothing changed */
+ return false;
+ }
+
+ screen_new = screen_change_prepare(screen_old, screen_new, bmain, C, win);
+ BLI_assert(BKE_workspace_layout_screen_get(layout_new) == screen_new);
+
+ if (screen_new) {
+ WM_window_set_active_layout(win, workspace_new, layout_new);
+ WM_window_set_active_workspace(win, workspace_new);
+
+ /* update screen *after* changing workspace - which also causes the actual screen change */
+ screen_changed_update(C, win, screen_new);
+ workspace_change_update(workspace_new, workspace_old, C);
+
+ BLI_assert(BKE_workspace_view_layer_get(workspace_new, CTX_data_scene(C)) != NULL);
+ BLI_assert(CTX_wm_workspace(C) == workspace_new);
+
+ WM_toolsystem_unlink(C, workspace_old);
+ WM_toolsystem_link(C, workspace_new);
+
+ return true;
+ }
+
+ return false;
+}
+
+/**
+ * Duplicate a workspace including its layouts. Does not activate the workspace, but
+ * it stores the screen-layout to be activated (BKE_workspace_temp_layout_store)
+ */
+WorkSpace *ED_workspace_duplicate(
+ WorkSpace *workspace_old, Main *bmain, wmWindow *win)
+{
+ WorkSpaceLayout *layout_active_old = BKE_workspace_active_layout_get(win->workspace_hook);
+ ListBase *layouts_old = BKE_workspace_layouts_get(workspace_old);
+ Scene *scene = WM_window_get_active_scene(win);
+ WorkSpace *workspace_new = ED_workspace_add(
+ bmain, workspace_old->id.name + 2, scene,
+ BKE_workspace_view_layer_get(workspace_old, scene),
+ &workspace_old->view_render);
+ ListBase *transform_orientations_old = BKE_workspace_transform_orientations_get(workspace_old);
+ ListBase *transform_orientations_new = BKE_workspace_transform_orientations_get(workspace_new);
+
+ BLI_duplicatelist(transform_orientations_new, transform_orientations_old);
+
+ workspace_new->tool = workspace_old->tool;
+
+ for (WorkSpaceLayout *layout_old = layouts_old->first; layout_old; layout_old = layout_old->next) {
+ WorkSpaceLayout *layout_new = ED_workspace_layout_duplicate(workspace_new, layout_old, win);
+
+ if (layout_active_old == layout_old) {
+ win->workspace_hook->temp_layout_store = layout_new;
+ }
+ }
+ return workspace_new;
+}
+
+/**
+ * \return if succeeded.
+ */
+bool ED_workspace_delete(
+ WorkSpace *workspace, Main *bmain, bContext *C, wmWindowManager *wm)
+{
+ ID *workspace_id = (ID *)workspace;
+
+ if (BLI_listbase_is_single(&bmain->workspaces)) {
+ return false;
+ }
+
+ for (wmWindow *win = wm->windows.first; win; win = win->next) {
+ WorkSpace *prev = workspace_id->prev;
+ WorkSpace *next = workspace_id->next;
+
+ ED_workspace_change((prev != NULL) ? prev : next, C, win);
+ }
+ BKE_libblock_free(bmain, workspace_id);
+
+ return true;
+}
+
+/**
+ * Some editor data may need to be synced with scene data (3D View camera and layers).
+ * This function ensures data is synced for editors in active layout of \a workspace.
+ */
+void ED_workspace_scene_data_sync(
+ WorkSpaceInstanceHook *hook, Scene *scene)
+{
+ bScreen *screen = BKE_workspace_active_screen_get(hook);
+ BKE_screen_view3d_scene_sync(screen, scene);
+}
+
+void ED_workspace_view_layer_unset(
+ const Main *bmain, Scene *scene,
+ const ViewLayer *layer_unset, ViewLayer *layer_new)
+{
+ for (WorkSpace *workspace = bmain->workspaces.first; workspace; workspace = workspace->id.next) {
+ if (BKE_workspace_view_layer_get(workspace, scene) == layer_unset) {
+ BKE_workspace_view_layer_set(workspace, layer_new, scene);
+ }
+ }
+}
+
+/** \} Workspace API */
+
+
+/** \name Workspace Operators
+ *
+ * \{ */
+
+static int workspace_new_exec(bContext *C, wmOperator *UNUSED(op))
+{
+ Main *bmain = CTX_data_main(C);
+ wmWindow *win = CTX_wm_window(C);
+ WorkSpace *workspace = ED_workspace_duplicate(WM_window_get_active_workspace(win), bmain, win);
+
+ WM_event_add_notifier(C, NC_SCREEN | ND_WORKSPACE_SET, workspace);
+
+ return OPERATOR_FINISHED;
+}
+
+static void WORKSPACE_OT_workspace_duplicate(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "New Workspace";
+ ot->description = "Add a new workspace";
+ ot->idname = "WORKSPACE_OT_workspace_duplicate";
+
+ /* api callbacks */
+ ot->exec = workspace_new_exec;
+ ot->poll = WM_operator_winactive;
+}
+
+static int workspace_delete_exec(bContext *C, wmOperator *UNUSED(op))
+{
+ Main *bmain = CTX_data_main(C);
+ wmWindowManager *wm = CTX_wm_manager(C);
+ wmWindow *win = CTX_wm_window(C);
+
+ ED_workspace_delete(WM_window_get_active_workspace(win), bmain, C, wm);
+
+ return OPERATOR_FINISHED;
+}
+
+static void WORKSPACE_OT_workspace_delete(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Delete Workspace";
+ ot->description = "Delete the active workspace";
+ ot->idname = "WORKSPACE_OT_workspace_delete";
+
+ /* api callbacks */
+ ot->exec = workspace_delete_exec;
+}
+
+static void workspace_config_file_path_from_folder_id(
+ const Main *bmain, int folder_id, char *r_path)
+{
+ const char *app_template = U.app_template[0] ? U.app_template : NULL;
+ const char * const cfgdir = BKE_appdir_folder_id(folder_id, app_template);
+
+ if (cfgdir) {
+ BLI_make_file_string(bmain->name, r_path, cfgdir, BLENDER_WORKSPACES_FILE);
+ }
+ else {
+ r_path[0] = '\0';
+ }
+}
+
+ATTR_NONNULL(1)
+static WorkspaceConfigFileData *workspace_config_file_read(
+ const Main *bmain, ReportList *reports)
+{
+ char workspace_config_path[FILE_MAX];
+ bool has_path = false;
+
+ workspace_config_file_path_from_folder_id(bmain, BLENDER_USER_CONFIG, workspace_config_path);
+ if (BLI_exists(workspace_config_path)) {
+ has_path = true;
+ }
+ else {
+ workspace_config_file_path_from_folder_id(bmain, BLENDER_DATAFILES, workspace_config_path);
+ if (BLI_exists(workspace_config_path)) {
+ has_path = true;
+ }
+ }
+
+ return has_path ? BKE_blendfile_workspace_config_read(workspace_config_path, reports) : NULL;
+}
+
+static void workspace_append_button(
+ uiLayout *layout, wmOperatorType *ot_append, const WorkSpace *workspace, const Main *from_main)
+{
+ const ID *id = (ID *)workspace;
+ PointerRNA opptr;
+ char lib_path[FILE_MAX_LIBEXTRA];
+
+ BLI_path_join(
+ lib_path, sizeof(lib_path), from_main->name, BKE_idcode_to_name(GS(id->name)), NULL);
+
+ BLI_assert(STREQ(ot_append->idname, "WM_OT_append"));
+ uiItemFullO_ptr(
+ layout, ot_append, workspace->id.name + 2, ICON_NONE, NULL,
+ WM_OP_EXEC_DEFAULT, 0, &opptr);
+ RNA_string_set(&opptr, "directory", lib_path);
+ RNA_string_set(&opptr, "filename", id->name + 2);
+ RNA_boolean_set(&opptr, "autoselect", false);
+}
+
+ATTR_NONNULL(1, 2)
+static void workspace_config_file_append_buttons(
+ uiLayout *layout, const Main *bmain, ReportList *reports)
+{
+ WorkspaceConfigFileData *workspace_config = workspace_config_file_read(bmain, reports);
+
+ if (workspace_config) {
+ wmOperatorType *ot_append = WM_operatortype_find("WM_OT_append", true);
+
+ for (WorkSpace *workspace = workspace_config->workspaces.first; workspace; workspace = workspace->id.next) {
+ workspace_append_button(layout, ot_append, workspace, workspace_config->main);
+ }
+
+ BKE_blendfile_workspace_config_data_free(workspace_config);
+ }
+}
+
+static int workspace_add_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
+{
+ const Main *bmain = CTX_data_main(C);
+
+ uiPopupMenu *pup = UI_popup_menu_begin(C, op->type->name, ICON_NONE);
+ uiLayout *layout = UI_popup_menu_layout(pup);
+
+ uiItemO(layout, "Duplicate Current", ICON_NONE, "WORKSPACE_OT_workspace_duplicate");
+ uiItemS(layout);
+ workspace_config_file_append_buttons(layout, bmain, op->reports);
+
+ UI_popup_menu_end(C, pup);
+
+ return OPERATOR_INTERFACE;
+}
+
+static void WORKSPACE_OT_workspace_add_menu(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Add Workspace";
+ ot->description = "Add a new workspace by duplicating the current one or appending one "
+ "from the user configuration";
+ ot->idname = "WORKSPACE_OT_workspace_add_menu";
+
+ /* api callbacks */
+ ot->invoke = workspace_add_invoke;
+}
+
+void ED_operatortypes_workspace(void)
+{
+ WM_operatortype_append(WORKSPACE_OT_workspace_duplicate);
+ WM_operatortype_append(WORKSPACE_OT_workspace_delete);
+ WM_operatortype_append(WORKSPACE_OT_workspace_add_menu);
+}
+
+/** \} Workspace Operators */
diff --git a/source/blender/editors/screen/workspace_layout_edit.c b/source/blender/editors/screen/workspace_layout_edit.c
new file mode 100644
index 00000000000..d84df160125
--- /dev/null
+++ b/source/blender/editors/screen/workspace_layout_edit.c
@@ -0,0 +1,197 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/editors/screen/workspace_layout_edit.c
+ * \ingroup edscr
+ */
+
+#include <stdlib.h>
+
+#include "BLI_utildefines.h"
+#include "BLI_listbase.h"
+
+#include "DNA_screen_types.h"
+#include "DNA_workspace_types.h"
+
+#include "BKE_context.h"
+#include "BKE_global.h"
+#include "BKE_main.h"
+#include "BKE_screen.h"
+#include "BKE_workspace.h"
+
+#include "WM_api.h"
+
+#include "ED_screen.h"
+
+#include "screen_intern.h"
+
+/**
+ * Empty screen, with 1 dummy area without spacedata. Uses window size.
+ */
+WorkSpaceLayout *ED_workspace_layout_add(
+ WorkSpace *workspace,
+ wmWindow *win,
+ const char *name)
+{
+ const int winsize_x = WM_window_pixels_x(win);
+ const int winsize_y = WM_window_pixels_y(win);
+
+ bScreen *screen = screen_add(name, winsize_x, winsize_y);
+ WorkSpaceLayout *layout = BKE_workspace_layout_add(workspace, screen, name);
+
+ return layout;
+}
+
+WorkSpaceLayout *ED_workspace_layout_duplicate(
+ WorkSpace *workspace, const WorkSpaceLayout *layout_old,
+ wmWindow *win)
+{
+ bScreen *screen_old = BKE_workspace_layout_screen_get(layout_old);
+ const char *name = BKE_workspace_layout_name_get(layout_old);
+ bScreen *screen_new;
+ WorkSpaceLayout *layout_new;
+
+ if (BKE_screen_is_fullscreen_area(screen_old)) {
+ return NULL; /* XXX handle this case! */
+ }
+
+ layout_new = ED_workspace_layout_add(workspace, win, name);
+ screen_new = BKE_workspace_layout_screen_get(layout_new);
+ screen_data_copy(screen_new, screen_old);
+
+ return layout_new;
+}
+
+static bool workspace_layout_delete_doit(
+ WorkSpace *workspace, WorkSpaceLayout *layout_old, WorkSpaceLayout *layout_new,
+ bContext *C)
+{
+ Main *bmain = CTX_data_main(C);
+ wmWindow *win = CTX_wm_window(C);
+ bScreen *screen_new = BKE_workspace_layout_screen_get(layout_new);
+
+ ED_screen_change(C, screen_new);
+
+ if (BKE_workspace_active_layout_get(win->workspace_hook) != layout_old) {
+ BKE_workspace_layout_remove(bmain, workspace, layout_old);
+ return true;
+ }
+
+ return false;
+}
+
+bool workspace_layout_set_poll(const WorkSpaceLayout *layout)
+{
+ const bScreen *screen = BKE_workspace_layout_screen_get(layout);
+
+ return ((BKE_screen_is_used(screen) == false) &&
+ /* in typical usage temp screens should have a nonzero winid
+ * (all temp screens should be used, or closed & freed). */
+ (screen->temp == false) &&
+ (BKE_screen_is_fullscreen_area(screen) == false) &&
+ (screen->id.name[2] != '.' || !(U.uiflag & USER_HIDE_DOT)));
+}
+
+static WorkSpaceLayout *workspace_layout_delete_find_new(const WorkSpaceLayout *layout_old)
+{
+ for (WorkSpaceLayout *layout_new = layout_old->prev; layout_new; layout_new = layout_new->next) {
+ if (workspace_layout_set_poll(layout_new)) {
+ return layout_new;
+ }
+ }
+
+ for (WorkSpaceLayout *layout_new = layout_old->next; layout_new; layout_new = layout_new->next) {
+ if (workspace_layout_set_poll(layout_new)) {
+ return layout_new;
+ }
+ }
+
+ return NULL;
+}
+
+/**
+ * \warning Only call outside of area/region loops!
+ * \return true if succeeded.
+ */
+bool ED_workspace_layout_delete(
+ WorkSpace *workspace, WorkSpaceLayout *layout_old,
+ bContext *C)
+{
+ const bScreen *screen_old = BKE_workspace_layout_screen_get(layout_old);
+ WorkSpaceLayout *layout_new;
+
+ BLI_assert(BLI_findindex(BKE_workspace_layouts_get(workspace), layout_old) != -1);
+
+ /* don't allow deleting temp fullscreens for now */
+ if (BKE_screen_is_fullscreen_area(screen_old)) {
+ return false;
+ }
+
+ /* A layout/screen can only be in use by one window at a time, so as
+ * long as we are able to find a layout/screen that is unused, we
+ * can safely assume ours is not in use anywhere an delete it. */
+
+ layout_new = workspace_layout_delete_find_new(layout_old);
+
+ if (layout_new) {
+ return workspace_layout_delete_doit(workspace, layout_old, layout_new, C);
+ }
+
+ return false;
+}
+
+static bool workspace_layout_cycle_iter_cb(const WorkSpaceLayout *layout, void *UNUSED(arg))
+{
+ /* return false to stop iterator when we have found a layout to activate */
+ return !workspace_layout_set_poll(layout);
+}
+
+bool ED_workspace_layout_cycle(
+ WorkSpace *workspace, const short direction, bContext *C)
+{
+ wmWindow *win = CTX_wm_window(C);
+ WorkSpaceLayout *old_layout = BKE_workspace_active_layout_get(win->workspace_hook);
+ WorkSpaceLayout *new_layout;
+ const bScreen *old_screen = BKE_workspace_layout_screen_get(old_layout);
+ ScrArea *sa = CTX_wm_area(C);
+
+ if (old_screen->temp || (sa && sa->full && sa->full->temp)) {
+ return false;
+ }
+
+ BLI_assert(ELEM(direction, 1, -1));
+ new_layout = BKE_workspace_layout_iter_circular(workspace, old_layout, workspace_layout_cycle_iter_cb,
+ NULL, (direction == -1) ? true : false);
+
+ if (new_layout && (old_layout != new_layout)) {
+ bScreen *new_screen = BKE_workspace_layout_screen_get(new_layout);
+
+ if (sa && sa->full) {
+ /* return to previous state before switching screens */
+ ED_screen_full_restore(C, sa); /* may free screen of old_layout */
+ }
+
+ ED_screen_change(C, new_screen);
+
+ return true;
+ }
+
+ return false;
+}
diff --git a/source/blender/editors/sculpt_paint/CMakeLists.txt b/source/blender/editors/sculpt_paint/CMakeLists.txt
index 69f14c950bb..b3e125baae3 100644
--- a/source/blender/editors/sculpt_paint/CMakeLists.txt
+++ b/source/blender/editors/sculpt_paint/CMakeLists.txt
@@ -25,6 +25,7 @@ set(INC
../../blenlib
../../blentranslation
../../bmesh
+ ../../depsgraph
../../gpu
../../imbuf
../../makesdna
diff --git a/source/blender/editors/sculpt_paint/paint_cursor.c b/source/blender/editors/sculpt_paint/paint_cursor.c
index e8778eea3b9..3a43c7a6585 100644
--- a/source/blender/editors/sculpt_paint/paint_cursor.c
+++ b/source/blender/editors/sculpt_paint/paint_cursor.c
@@ -54,14 +54,14 @@
#include "WM_api.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
-
#include "IMB_imbuf_types.h"
#include "ED_view3d.h"
-#include "GPU_basic_shader.h"
+#include "GPU_draw.h"
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+#include "GPU_matrix.h"
#include "UI_resources.h"
@@ -341,8 +341,8 @@ static int load_tex(Brush *br, ViewContext *vc, float zoom, bool col, bool prima
glBindTexture(GL_TEXTURE_2D, target->overlay_texture);
if (refresh) {
- GLenum format = col ? GL_RGBA : GL_ALPHA;
- GLenum internalformat = col ? GL_RGBA8 : GL_ALPHA8;
+ GLenum format = col ? GL_RGBA : GL_RED;
+ GLenum internalformat = col ? GL_RGBA8 : GL_R8;
if (!init || (target->old_col != col)) {
glTexImage2D(GL_TEXTURE_2D, 0, internalformat, size, size, 0, format, GL_UNSIGNED_BYTE, buffer);
@@ -357,8 +357,6 @@ static int load_tex(Brush *br, ViewContext *vc, float zoom, bool col, bool prima
target->old_col = col;
}
- GPU_basic_shader_bind(GPU_SHADER_TEXTURE_2D | GPU_SHADER_USE_COLOR);
-
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
@@ -470,18 +468,16 @@ static int load_tex_cursor(Brush *br, ViewContext *vc, float zoom)
if (refresh) {
if (!init) {
- glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA8, size, size, 0, GL_ALPHA, GL_UNSIGNED_BYTE, buffer);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_R8, size, size, 0, GL_RED, GL_UNSIGNED_BYTE, buffer);
}
else {
- glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, size, size, GL_ALPHA, GL_UNSIGNED_BYTE, buffer);
+ glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, size, size, GL_RED, GL_UNSIGNED_BYTE, buffer);
}
if (buffer)
MEM_freeN(buffer);
}
- GPU_basic_shader_bind(GPU_SHADER_TEXTURE_2D | GPU_SHADER_USE_COLOR);
-
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
@@ -615,22 +611,20 @@ static void paint_draw_tex_overlay(UnifiedPaintSettings *ups, Brush *brush,
glDepthMask(GL_FALSE);
glDepthFunc(GL_ALWAYS);
- glMatrixMode(GL_TEXTURE);
- glPushMatrix();
- glLoadIdentity();
-
if (mtex->brush_map_mode == MTEX_MAP_MODE_VIEW) {
+ gpuPushMatrix();
+
/* brush rotation */
- glTranslatef(0.5, 0.5, 0);
- glRotatef((double)RAD2DEGF((primary) ? ups->brush_rotation : ups->brush_rotation_sec),
- 0.0, 0.0, 1.0);
- glTranslatef(-0.5f, -0.5f, 0);
+ gpuTranslate2f(x, y);
+ gpuRotate2D(-RAD2DEGF(primary ? ups->brush_rotation : ups->brush_rotation_sec));
+ gpuTranslate2f(-x, -y);
/* scale based on tablet pressure */
if (primary && ups->stroke_active && BKE_brush_use_size_pressure(vc->scene, brush)) {
- glTranslatef(0.5f, 0.5f, 0);
- glScalef(1.0f / ups->size_pressure_value, 1.0f / ups->size_pressure_value, 1);
- glTranslatef(-0.5f, -0.5f, 0);
+ const float scale = ups->size_pressure_value;
+ gpuTranslate2f(x, y);
+ gpuScale2f(scale, scale);
+ gpuTranslate2f(-x, -y);
}
if (ups->draw_anchored) {
@@ -668,41 +662,46 @@ static void paint_draw_tex_overlay(UnifiedPaintSettings *ups, Brush *brush,
quad.xmax = brush->mask_stencil_dimension[0];
quad.ymax = brush->mask_stencil_dimension[1];
}
- glMatrixMode(GL_MODELVIEW);
- glPushMatrix();
+ gpuPushMatrix();
if (primary)
- glTranslate2fv(brush->stencil_pos);
+ gpuTranslate2fv(brush->stencil_pos);
else
- glTranslate2fv(brush->mask_stencil_pos);
- glRotatef(RAD2DEGF(mtex->rot), 0, 0, 1);
- glMatrixMode(GL_TEXTURE);
+ gpuTranslate2fv(brush->mask_stencil_pos);
+ gpuRotate2D(RAD2DEGF(mtex->rot));
}
/* set quad color. Colored overlay does not get blending */
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int texCoord = GWN_vertformat_attr_add(format, "texCoord", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
if (col) {
- glColor4f(1.0, 1.0, 1.0, overlay_alpha / 100.0f);
+ immBindBuiltinProgram(GPU_SHADER_2D_IMAGE_COLOR);
+ immUniformColor4f(1.0f, 1.0f, 1.0f, overlay_alpha * 0.01f);
}
else {
- glColor4f(UNPACK3(U.sculpt_paint_overlay_col), overlay_alpha / 100.0f);
+ immBindBuiltinProgram(GPU_SHADER_2D_IMAGE_ALPHA_COLOR);
+ immUniformColor3fvAlpha(U.sculpt_paint_overlay_col, overlay_alpha * 0.01f);
}
/* draw textured quad */
- glBegin(GL_QUADS);
- glTexCoord2f(0, 0);
- glVertex2f(quad.xmin, quad.ymin);
- glTexCoord2f(1, 0);
- glVertex2f(quad.xmax, quad.ymin);
- glTexCoord2f(1, 1);
- glVertex2f(quad.xmax, quad.ymax);
- glTexCoord2f(0, 1);
- glVertex2f(quad.xmin, quad.ymax);
- glEnd();
-
- glPopMatrix();
-
- if (mtex->brush_map_mode == MTEX_MAP_MODE_STENCIL) {
- glMatrixMode(GL_MODELVIEW);
- glPopMatrix();
+ immUniform1i("image", GL_TEXTURE0);
+
+ immBegin(GWN_PRIM_TRI_FAN, 4);
+ immAttrib2f(texCoord, 0.0f, 0.0f);
+ immVertex2f(pos, quad.xmin, quad.ymin);
+ immAttrib2f(texCoord, 1.0f, 0.0f);
+ immVertex2f(pos, quad.xmax, quad.ymin);
+ immAttrib2f(texCoord, 1.0f, 1.0f);
+ immVertex2f(pos, quad.xmax, quad.ymax);
+ immAttrib2f(texCoord, 0.0f, 1.0f);
+ immVertex2f(pos, quad.xmin, quad.ymax);
+ immEnd();
+
+ immUnbindProgram();
+
+ if (ELEM(mtex->brush_map_mode, MTEX_MAP_MODE_STENCIL, MTEX_MAP_MODE_VIEW)) {
+ gpuPopMatrix();
}
}
}
@@ -750,32 +749,41 @@ static void paint_draw_cursor_overlay(UnifiedPaintSettings *ups, Brush *brush,
/* scale based on tablet pressure */
if (ups->stroke_active && BKE_brush_use_size_pressure(vc->scene, brush)) {
do_pop = true;
- glPushMatrix();
- glLoadIdentity();
- glTranslate2fv(center);
- glScalef(ups->size_pressure_value, ups->size_pressure_value, 1);
- glTranslatef(-center[0], -center[1], 0);
+ gpuPushMatrix();
+ gpuLoadIdentity();
+ gpuTranslate2fv(center);
+ gpuScaleUniform(ups->size_pressure_value);
+ gpuTranslate2f(-center[0], -center[1]);
}
- glColor4f(U.sculpt_paint_overlay_col[0],
- U.sculpt_paint_overlay_col[1],
- U.sculpt_paint_overlay_col[2],
- brush->cursor_overlay_alpha / 100.0f);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int texCoord = GWN_vertformat_attr_add(format, "texCoord", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_IMAGE_COLOR);
+
+ immUniformColor3fvAlpha(U.sculpt_paint_overlay_col, brush->cursor_overlay_alpha * 0.01f);
+
+ /* draw textured quad */
/* draw textured quad */
- glBegin(GL_QUADS);
- glTexCoord2f(0, 0);
- glVertex2f(quad.xmin, quad.ymin);
- glTexCoord2f(1, 0);
- glVertex2f(quad.xmax, quad.ymin);
- glTexCoord2f(1, 1);
- glVertex2f(quad.xmax, quad.ymax);
- glTexCoord2f(0, 1);
- glVertex2f(quad.xmin, quad.ymax);
- glEnd();
+ immUniform1i("image", GL_TEXTURE0);
+
+ immBegin(GWN_PRIM_TRI_FAN, 4);
+ immAttrib2f(texCoord, 0.0f, 0.0f);
+ immVertex2f(pos, quad.xmin, quad.ymin);
+ immAttrib2f(texCoord, 1.0f, 0.0f);
+ immVertex2f(pos, quad.xmax, quad.ymin);
+ immAttrib2f(texCoord, 1.0f, 1.0f);
+ immVertex2f(pos, quad.xmax, quad.ymax);
+ immAttrib2f(texCoord, 0.0f, 1.0f);
+ immVertex2f(pos, quad.xmin, quad.ymax);
+ immEnd();
+
+ immUnbindProgram();
if (do_pop)
- glPopMatrix();
+ gpuPopMatrix();
}
}
@@ -785,19 +793,7 @@ static void paint_draw_alpha_overlay(UnifiedPaintSettings *ups, Brush *brush,
/* color means that primary brush texture is colured and secondary is used for alpha/mask control */
bool col = ELEM(mode, ePaintTextureProjective, ePaintTexture2D, ePaintVertex) ? true : false;
eOverlayControlFlags flags = BKE_paint_get_overlay_flags();
- /* save lots of GL state
- * TODO: check on whether all of these are needed? */
- glPushAttrib(GL_COLOR_BUFFER_BIT |
- GL_CURRENT_BIT |
- GL_DEPTH_BUFFER_BIT |
- GL_ENABLE_BIT |
- GL_LINE_BIT |
- GL_POLYGON_BIT |
- GL_STENCIL_BUFFER_BIT |
- GL_TRANSFORM_BIT |
- GL_VIEWPORT_BIT |
- GL_TEXTURE_BIT);
-
+ gpuPushAttrib(GPU_DEPTH_BUFFER_BIT | GPU_BLEND_BIT);
/* coloured overlay should be drawn separately */
if (col) {
@@ -815,86 +811,98 @@ static void paint_draw_alpha_overlay(UnifiedPaintSettings *ups, Brush *brush,
paint_draw_cursor_overlay(ups, brush, vc, x, y, zoom);
}
- glPopAttrib();
- GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
+ gpuPopAttrib();
}
-BLI_INLINE void draw_tri_point(float *co, float width, bool selected)
+BLI_INLINE void draw_tri_point(
+ unsigned int pos, float sel_col[4], float pivot_col[4],
+ float *co, float width, bool selected)
{
+ immUniformColor4fv(selected ? sel_col : pivot_col);
+
+ glLineWidth(3.0f);
+
float w = width / 2.0f;
- if (selected)
- UI_ThemeColor4(TH_VERTEX_SELECT);
- else
- UI_ThemeColor4(TH_PAINT_CURVE_PIVOT);
-
- glLineWidth(3.0);
-
- glBegin(GL_LINE_LOOP);
- glVertex2f(co[0], co[1] + w);
- glVertex2f(co[0] - w, co[1] - w);
- glVertex2f(co[0] + w, co[1] - w);
- glEnd();
-
- glColor4f(1.0, 1.0, 1.0, 0.5);
- glLineWidth(1.0);
-
- glBegin(GL_LINE_LOOP);
- glVertex2f(co[0], co[1] + w);
- glVertex2f(co[0] - w, co[1] - w);
- glVertex2f(co[0] + w, co[1] - w);
- glEnd();
+ float tri[3][2] = {
+ {co[0], co[1] + w},
+ {co[0] - w, co[1] - w},
+ {co[0] + w, co[1] - w},
+ };
+
+ immBegin(GWN_PRIM_LINE_LOOP, 3);
+ immVertex2fv(pos, tri[0]);
+ immVertex2fv(pos, tri[1]);
+ immVertex2fv(pos, tri[2]);
+ immEnd();
+
+ immUniformColor4f(1.0f, 1.0f, 1.0f, 0.5f);
+ glLineWidth(1.0f);
+
+ immBegin(GWN_PRIM_LINE_LOOP, 3);
+ immVertex2fv(pos, tri[0]);
+ immVertex2fv(pos, tri[1]);
+ immVertex2fv(pos, tri[2]);
+ immEnd();
}
-BLI_INLINE void draw_rect_point(float *co, float width, bool selected)
+BLI_INLINE void draw_rect_point(
+ unsigned int pos, float sel_col[4], float handle_col[4],
+ float *co, float width, bool selected)
{
+ immUniformColor4fv(selected ? sel_col : handle_col);
+
+ glLineWidth(3.0f);
+
float w = width / 2.0f;
- if (selected)
- UI_ThemeColor4(TH_VERTEX_SELECT);
- else
- UI_ThemeColor4(TH_PAINT_CURVE_HANDLE);
- glLineWidth(3.0);
-
- glBegin(GL_LINE_LOOP);
- glVertex2f(co[0] + w, co[1] + w);
- glVertex2f(co[0] - w, co[1] + w);
- glVertex2f(co[0] - w, co[1] - w);
- glVertex2f(co[0] + w, co[1] - w);
- glEnd();
-
- glColor4f(1.0, 1.0, 1.0, 0.5);
- glLineWidth(1.0);
-
- glBegin(GL_LINE_LOOP);
- glVertex2f(co[0] + w, co[1] + w);
- glVertex2f(co[0] - w, co[1] + w);
- glVertex2f(co[0] - w, co[1] - w);
- glVertex2f(co[0] + w, co[1] - w);
- glEnd();
+ float minx = co[0] - w;
+ float miny = co[1] - w;
+ float maxx = co[0] + w;
+ float maxy = co[1] + w;
+
+ imm_draw_box_wire_2d(pos, minx, miny, maxx, maxy);
+
+ immUniformColor4f(1.0f, 1.0f, 1.0f, 0.5f);
+ glLineWidth(1.0f);
+
+ imm_draw_box_wire_2d(pos, minx, miny, maxx, maxy);
}
-BLI_INLINE void draw_bezier_handle_lines(BezTriple *bez)
+BLI_INLINE void draw_bezier_handle_lines(unsigned int pos, float sel_col[4], BezTriple *bez)
{
- short line1[] = {0, 1};
- short line2[] = {1, 2};
-
- glVertexPointer(2, GL_FLOAT, 3 * sizeof(float), bez->vec);
- glColor4f(0.0, 0.0, 0.0, 0.5);
- glLineWidth(3.0);
- glDrawArrays(GL_LINE_STRIP, 0, 3);
-
- glLineWidth(1.0);
- if (bez->f1 || bez->f2)
- UI_ThemeColor4(TH_VERTEX_SELECT);
- else
- glColor4f(1.0, 1.0, 1.0, 0.5);
- glDrawElements(GL_LINES, 2, GL_UNSIGNED_SHORT, line1);
- if (bez->f3 || bez->f2)
- UI_ThemeColor4(TH_VERTEX_SELECT);
- else
- glColor4f(1.0, 1.0, 1.0, 0.5);
- glDrawElements(GL_LINES, 2, GL_UNSIGNED_SHORT, line2);
+ immUniformColor4f(0.0f, 0.0f, 0.0f, 0.5f);
+ glLineWidth(3.0f);
+
+ immBegin(GWN_PRIM_LINE_STRIP, 3);
+ immVertex2fv(pos, bez->vec[0]);
+ immVertex2fv(pos, bez->vec[1]);
+ immVertex2fv(pos, bez->vec[2]);
+ immEnd();
+
+ glLineWidth(1.0f);
+
+ if (bez->f1 || bez->f2) {
+ immUniformColor4fv(sel_col);
+ }
+ else {
+ immUniformColor4f(1.0f, 1.0f, 1.0f, 0.5f);
+ }
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2fv(pos, bez->vec[0]);
+ immVertex2fv(pos, bez->vec[1]);
+ immEnd();
+
+ if (bez->f3 || bez->f2) {
+ immUniformColor4fv(sel_col);
+ }
+ else {
+ immUniformColor4f(1.0f, 1.0f, 1.0f, 0.5f);
+ }
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2fv(pos, bez->vec[1]);
+ immVertex2fv(pos, bez->vec[2]);
+ immEnd();
}
static void paint_draw_curve_cursor(Brush *brush)
@@ -906,18 +914,26 @@ static void paint_draw_curve_cursor(Brush *brush)
glEnable(GL_LINE_SMOOTH);
glEnable(GL_BLEND);
- glEnableClientState(GL_VERTEX_ARRAY);
/* draw the bezier handles and the curve segment between the current and next point */
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ float selec_col[4], handle_col[4], pivot_col[4];
+ UI_GetThemeColor4fv(TH_VERTEX_SELECT, selec_col);
+ UI_GetThemeColor4fv(TH_PAINT_CURVE_HANDLE, handle_col);
+ UI_GetThemeColor4fv(TH_PAINT_CURVE_PIVOT, pivot_col);
+
for (i = 0; i < pc->tot_points - 1; i++, cp++) {
int j;
PaintCurvePoint *cp_next = cp + 1;
float data[(PAINT_CURVE_NUM_SEGMENTS + 1) * 2];
/* use color coding to distinguish handles vs curve segments */
- draw_bezier_handle_lines(&cp->bez);
- draw_tri_point(&cp->bez.vec[1][0], 10.0, cp->bez.f2);
- draw_rect_point(&cp->bez.vec[0][0], 8.0, cp->bez.f1 || cp->bez.f2);
- draw_rect_point(&cp->bez.vec[2][0], 8.0, cp->bez.f3 || cp->bez.f2);
+ draw_bezier_handle_lines(pos, selec_col, &cp->bez);
+ draw_tri_point(pos, selec_col, pivot_col, &cp->bez.vec[1][0], 10.0f, cp->bez.f2);
+ draw_rect_point(pos, selec_col, handle_col, &cp->bez.vec[0][0], 8.0f, cp->bez.f1 || cp->bez.f2);
+ draw_rect_point(pos, selec_col, handle_col, &cp->bez.vec[2][0], 8.0f, cp->bez.f3 || cp->bez.f2);
for (j = 0; j < 2; j++)
BKE_curve_forward_diff_bezier(
@@ -927,25 +943,35 @@ static void paint_draw_curve_cursor(Brush *brush)
cp_next->bez.vec[1][j],
data + j, PAINT_CURVE_NUM_SEGMENTS, sizeof(float[2]));
- glVertexPointer(2, GL_FLOAT, 0, data);
- glLineWidth(3.0);
- glColor4f(0.0, 0.0, 0.0, 0.5);
- glDrawArrays(GL_LINE_STRIP, 0, PAINT_CURVE_NUM_SEGMENTS + 1);
+ float (*v)[2] = (float(*)[2])data;
+
+ immUniformColor4f(0.0f, 0.0f, 0.0f, 0.5f);
+ glLineWidth(3.0f);
+ immBegin(GWN_PRIM_LINE_STRIP, PAINT_CURVE_NUM_SEGMENTS + 1);
+ for (j = 0; j <= PAINT_CURVE_NUM_SEGMENTS; j++) {
+ immVertex2fv(pos, v[j]);
+ }
+ immEnd();
- glLineWidth(1.0);
- glColor4f(0.9, 0.9, 1.0, 0.5);
- glDrawArrays(GL_LINE_STRIP, 0, PAINT_CURVE_NUM_SEGMENTS + 1);
+ immUniformColor4f(0.9f, 0.9f, 1.0f, 0.5f);
+ glLineWidth(1.0f);
+ immBegin(GWN_PRIM_LINE_STRIP, PAINT_CURVE_NUM_SEGMENTS + 1);
+ for (j = 0; j <= PAINT_CURVE_NUM_SEGMENTS; j++) {
+ immVertex2fv(pos, v[j]);
+ }
+ immEnd();
}
/* draw last line segment */
- draw_bezier_handle_lines(&cp->bez);
- draw_tri_point(&cp->bez.vec[1][0], 10.0, cp->bez.f2);
- draw_rect_point(&cp->bez.vec[0][0], 8.0, cp->bez.f1 || cp->bez.f2);
- draw_rect_point(&cp->bez.vec[2][0], 8.0, cp->bez.f3 || cp->bez.f2);
+ draw_bezier_handle_lines(pos, selec_col, &cp->bez);
+ draw_tri_point(pos, selec_col, pivot_col, &cp->bez.vec[1][0], 10.0f, cp->bez.f2);
+ draw_rect_point(pos, selec_col, handle_col, &cp->bez.vec[0][0], 8.0f, cp->bez.f1 || cp->bez.f2);
+ draw_rect_point(pos, selec_col, handle_col, &cp->bez.vec[2][0], 8.0f, cp->bez.f3 || cp->bez.f2);
glDisable(GL_BLEND);
glDisable(GL_LINE_SMOOTH);
- glDisableClientState(GL_VERTEX_ARRAY);
+
+ immUnbindProgram();
}
}
@@ -999,11 +1025,6 @@ static void paint_draw_cursor(bContext *C, int x, int y, void *UNUSED(unused))
Paint *paint = BKE_paint_get_active_from_context(C);
Brush *brush = BKE_paint_brush(paint);
ePaintMode mode = BKE_paintmode_get_active_from_context(C);
- ViewContext vc;
- float final_radius;
- float translation[2];
- float outline_alpha, *outline_col;
- float zoomx, zoomy;
/* check that brush drawing is enabled */
if (ommit_cursor_drawing(paint, mode, brush))
@@ -1011,6 +1032,7 @@ static void paint_draw_cursor(bContext *C, int x, int y, void *UNUSED(unused))
/* can't use stroke vc here because this will be called during
* mouse over too, not just during a stroke */
+ ViewContext vc;
view3d_set_viewcontext(C, &vc);
if (vc.rv3d && (vc.rv3d->rflag & RV3D_NAVIGATING)) {
@@ -1023,15 +1045,15 @@ static void paint_draw_cursor(bContext *C, int x, int y, void *UNUSED(unused))
return;
}
+ float zoomx, zoomy;
get_imapaint_zoom(C, &zoomx, &zoomy);
zoomx = max_ff(zoomx, zoomy);
/* set various defaults */
- translation[0] = x;
- translation[1] = y;
- outline_alpha = 0.5;
- outline_col = brush->add_col;
- final_radius = (BKE_brush_size_get(scene, brush) * zoomx);
+ const float *outline_col = brush->add_col;
+ const float outline_alpha = 0.5f;
+ float translation[2] = { x, y };
+ float final_radius = (BKE_brush_size_get(scene, brush) * zoomx);
/* don't calculate rake angles while a stroke is active because the rake variables are global and
* we may get interference with the stroke itself. For line strokes, such interference is visible */
@@ -1047,10 +1069,9 @@ static void paint_draw_cursor(bContext *C, int x, int y, void *UNUSED(unused))
if ((mode == ePaintSculpt) && vc.obact->sculpt) {
float location[3];
int pixel_radius;
- bool hit;
/* test if brush is over the mesh */
- hit = sculpt_get_brush_geometry(C, &vc, x, y, &pixel_radius, location, ups);
+ bool hit = sculpt_get_brush_geometry(C, &vc, x, y, &pixel_radius, location, ups);
if (BKE_brush_use_locked_size(scene, brush))
BKE_brush_size_set(scene, brush, pixel_radius);
@@ -1077,24 +1098,25 @@ static void paint_draw_cursor(bContext *C, int x, int y, void *UNUSED(unused))
/* make lines pretty */
glLineWidth(1.0f);
- glEnable(GL_BLEND);
+ glEnable(GL_BLEND); /* TODO: also set blend mode? */
glEnable(GL_LINE_SMOOTH);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
/* set brush color */
- glColor4f(outline_col[0], outline_col[1], outline_col[2], outline_alpha);
+ immUniformColor3fvAlpha(outline_col, outline_alpha);
/* draw brush outline */
- glTranslate2fv(translation);
-
- /* draw an inner brush */
if (ups->stroke_active && BKE_brush_use_size_pressure(scene, brush)) {
/* inner at full alpha */
- glutil_draw_lined_arc(0.0, M_PI * 2.0, final_radius * ups->size_pressure_value, 40);
+ imm_draw_circle_wire_2d(pos, translation[0], translation[1], final_radius * ups->size_pressure_value, 40);
/* outer at half alpha */
- glColor4f(outline_col[0], outline_col[1], outline_col[2], outline_alpha * 0.5f);
+ immUniformColor3fvAlpha(outline_col, outline_alpha * 0.5f);
}
- glutil_draw_lined_arc(0.0, M_PI * 2.0, final_radius, 40);
- glTranslatef(-translation[0], -translation[1], 0);
+ imm_draw_circle_wire_2d(pos, translation[0], translation[1], final_radius, 40);
+
+ immUnbindProgram();
/* restore GL state */
glDisable(GL_BLEND);
diff --git a/source/blender/editors/sculpt_paint/paint_curve.c b/source/blender/editors/sculpt_paint/paint_curve.c
index 337f7a1ef2b..c9ad4a46a13 100644
--- a/source/blender/editors/sculpt_paint/paint_curve.c
+++ b/source/blender/editors/sculpt_paint/paint_curve.c
@@ -32,6 +32,7 @@
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
#include "DNA_view3d_types.h"
+#include "DNA_workspace_types.h"
#include "BLI_math_vector.h"
#include "BLI_string.h"
@@ -40,6 +41,8 @@
#include "BKE_main.h"
#include "BKE_paint.h"
+#include "DEG_depsgraph.h"
+
#include "ED_paint.h"
#include "ED_view3d.h"
@@ -59,12 +62,13 @@
int paint_curve_poll(bContext *C)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Object *ob = CTX_data_active_object(C);
Paint *p;
RegionView3D *rv3d = CTX_wm_region_view3d(C);
SpaceImage *sima;
- if (rv3d && !(ob && ((ob->mode & OB_MODE_ALL_PAINT) != 0)))
+ if (rv3d && !(ob && ((workspace->object_mode & OB_MODE_ALL_PAINT) != 0)))
return false;
sima = CTX_wm_space_image(C);
diff --git a/source/blender/editors/sculpt_paint/paint_hide.c b/source/blender/editors/sculpt_paint/paint_hide.c
index d085c6953da..4c6cd8d6d22 100644
--- a/source/blender/editors/sculpt_paint/paint_hide.c
+++ b/source/blender/editors/sculpt_paint/paint_hide.c
@@ -52,7 +52,7 @@
#include "BKE_paint.h"
#include "BKE_subsurf.h"
-#include "BIF_glutil.h"
+#include "DEG_depsgraph.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -323,12 +323,10 @@ static void clip_planes_from_rect(bContext *C,
{
ViewContext vc;
BoundBox bb;
- bglMats mats = {{0}};
view3d_operator_needs_opengl(C);
view3d_set_viewcontext(C, &vc);
- view3d_get_transformation(vc.ar, vc.rv3d, vc.obact, &mats);
- ED_view3d_clipping_calc(&bb, clip_planes, &mats, rect);
+ ED_view3d_clipping_calc(&bb, clip_planes, vc.ar, vc.obact, rect);
negate_m4(clip_planes);
}
@@ -364,6 +362,7 @@ static int hide_show_exec(bContext *C, wmOperator *op)
{
ARegion *ar = CTX_wm_region(C);
Object *ob = CTX_data_active_object(C);
+ EvaluationContext eval_ctx;
Mesh *me = ob->data;
PartialVisAction action;
PartialVisArea area;
@@ -375,6 +374,8 @@ static int hide_show_exec(bContext *C, wmOperator *op)
rcti rect;
int totnode, i;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
/* read operator properties */
action = RNA_enum_get(op->ptr, "action");
area = RNA_enum_get(op->ptr, "area");
@@ -382,8 +383,8 @@ static int hide_show_exec(bContext *C, wmOperator *op)
clip_planes_from_rect(C, clip_planes, &rect);
- dm = mesh_get_derived_final(CTX_data_scene(C), ob, CD_MASK_BAREMESH);
- pbvh = dm->getPBVH(ob, dm);
+ dm = mesh_get_derived_final(&eval_ctx, CTX_data_scene(C), ob, CD_MASK_BAREMESH);
+ pbvh = dm->getPBVH(ob, dm, eval_ctx.object_mode);
ob->sculpt->pbvh = pbvh;
get_pbvh_nodes(pbvh, &nodes, &totnode, clip_planes, area);
diff --git a/source/blender/editors/sculpt_paint/paint_image.c b/source/blender/editors/sculpt_paint/paint_image.c
index 3ecece580ee..d42bbfdc43a 100644
--- a/source/blender/editors/sculpt_paint/paint_image.c
+++ b/source/blender/editors/sculpt_paint/paint_image.c
@@ -52,7 +52,6 @@
#include "BKE_colorband.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_DerivedMesh.h"
#include "BKE_brush.h"
#include "BKE_image.h"
@@ -61,6 +60,8 @@
#include "BKE_node.h"
#include "BKE_paint.h"
+#include "DEG_depsgraph.h"
+
#include "UI_interface.h"
#include "UI_view2d.h"
@@ -78,9 +79,9 @@
#include "GPU_draw.h"
#include "GPU_buffers.h"
+#include "GPU_immediate.h"
#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "IMB_colormanagement.h"
@@ -372,7 +373,7 @@ void ED_image_undo_restore(bContext *C, ListBase *lb)
ibuf->userflags |= IB_MIPMAP_INVALID; /* force mipmap recreatiom */
ibuf->userflags |= IB_DISPLAY_BUFFER_INVALID;
- DAG_id_tag_update(&ima->id, 0);
+ DEG_id_tag_update(&ima->id, 0);
BKE_image_release_ibuf(ima, ibuf, NULL);
}
@@ -589,11 +590,13 @@ static int image_paint_poll(bContext *C)
{
Object *obact;
- if (!image_paint_brush(C))
+ if (!image_paint_brush(C)) {
return 0;
+ }
+ const WorkSpace *workspace = CTX_wm_workspace(C);
obact = CTX_data_active_object(C);
- if ((obact && obact->mode & OB_MODE_TEXTURE_PAINT) && CTX_wm_region_view3d(C)) {
+ if ((obact && workspace->object_mode & OB_MODE_TEXTURE_PAINT) && CTX_wm_region_view3d(C)) {
return 1;
}
else {
@@ -721,12 +724,28 @@ static void gradient_draw_line(bContext *UNUSED(C), int x, int y, void *customda
glEnable(GL_LINE_SMOOTH);
glEnable(GL_BLEND);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
glLineWidth(4.0);
- glColor4ub(0, 0, 0, 255);
- sdrawline(x, y, pop->startmouse[0], pop->startmouse[1]);
+ immUniformColor4ub(0, 0, 0, 255);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2i(pos, x, y);
+ immVertex2i(pos, pop->startmouse[0], pop->startmouse[1]);
+ immEnd();
+
glLineWidth(2.0);
- glColor4ub(255, 255, 255, 255);
- sdrawline(x, y, pop->startmouse[0], pop->startmouse[1]);
+ immUniformColor4ub(255, 255, 255, 255);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2i(pos, x, y);
+ immVertex2i(pos, pop->startmouse[0], pop->startmouse[1]);
+ immEnd();
+
+ immUnbindProgram();
glDisable(GL_BLEND);
glDisable(GL_LINE_SMOOTH);
@@ -748,7 +767,8 @@ static PaintOperation *texture_paint_init(bContext *C, wmOperator *op, const flo
/* initialize from context */
if (CTX_wm_region_view3d(C)) {
- Object *ob = OBACT;
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Object *ob = OBACT(view_layer);
bool uvs, mat, tex, stencil;
if (!BKE_paint_proj_mesh_data_check(scene, ob, &uvs, &mat, &tex, &stencil)) {
BKE_paint_data_warning(op->reports, uvs, mat, tex, stencil);
@@ -1039,16 +1059,20 @@ static void toggle_paint_cursor(bContext *C, int enable)
void ED_space_image_paint_update(wmWindowManager *wm, Scene *scene)
{
ToolSettings *settings = scene->toolsettings;
- wmWindow *win;
- ScrArea *sa;
ImagePaintSettings *imapaint = &settings->imapaint;
bool enabled = false;
- for (win = wm->windows.first; win; win = win->next)
- for (sa = win->screen->areabase.first; sa; sa = sa->next)
- if (sa->spacetype == SPACE_IMAGE)
- if (((SpaceImage *)sa->spacedata.first)->mode == SI_MODE_PAINT)
+ for (wmWindow *win = wm->windows.first; win; win = win->next) {
+ bScreen *screen = WM_window_get_active_screen(win);
+
+ for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
+ if (sa->spacetype == SPACE_IMAGE) {
+ if (((SpaceImage *)sa->spacedata.first)->mode == SI_MODE_PAINT) {
enabled = true;
+ }
+ }
+ }
+ }
if (enabled) {
BKE_paint_init(scene, ePaintTexture2D, PAINT_CURSOR_TEXTURE_PAINT);
@@ -1352,19 +1376,20 @@ static int texture_paint_toggle_poll(bContext *C)
static int texture_paint_toggle_exec(bContext *C, wmOperator *op)
{
+ WorkSpace *workspace = CTX_wm_workspace(C);
Scene *scene = CTX_data_scene(C);
Object *ob = CTX_data_active_object(C);
const int mode_flag = OB_MODE_TEXTURE_PAINT;
- const bool is_mode_set = (ob->mode & mode_flag) != 0;
+ const bool is_mode_set = (workspace->object_mode & mode_flag) != 0;
if (!is_mode_set) {
- if (!ED_object_mode_compat_set(C, ob, mode_flag, op->reports)) {
+ if (!ED_object_mode_compat_set(C, workspace, mode_flag, op->reports)) {
return OPERATOR_CANCELLED;
}
}
- if (ob->mode & mode_flag) {
- ob->mode &= ~mode_flag;
+ if (workspace->object_mode & mode_flag) {
+ workspace->object_mode &= ~mode_flag;
if (U.glreslimit != 0)
GPU_free_images();
@@ -1412,7 +1437,7 @@ static int texture_paint_toggle_exec(bContext *C, wmOperator *op)
}
}
- ob->mode |= mode_flag;
+ workspace->object_mode |= mode_flag;
BKE_paint_init(scene, ePaintTextureProjective, PAINT_CURSOR_TEXTURE_PAINT);
@@ -1449,9 +1474,10 @@ static int brush_colors_flip_exec(bContext *C, wmOperator *UNUSED(op))
{
UnifiedPaintSettings *ups = &CTX_data_tool_settings(C)->unified_paint_settings;
- Brush *br;
+ WorkSpace *workspace = CTX_wm_workspace(C);
Object *ob = CTX_data_active_object(C);
- if (!(ob && (ob->mode & OB_MODE_VERTEX_PAINT))) {
+ Brush *br;
+ if (!(ob && (workspace->object_mode & OB_MODE_VERTEX_PAINT))) {
br = image_paint_brush(C);
}
else {
@@ -1482,8 +1508,11 @@ static int brush_colors_flip_poll(bContext *C)
}
else {
Object *ob = CTX_data_active_object(C);
- if (ob && (ob->mode & OB_MODE_VERTEX_PAINT)) {
- return 1;
+ if (ob) {
+ WorkSpace *workspace = CTX_wm_workspace(C);
+ if (workspace->object_mode & OB_MODE_VERTEX_PAINT) {
+ return 1;
+ }
}
}
return 0;
@@ -1517,16 +1546,18 @@ void ED_imapaint_bucket_fill(struct bContext *C, float color[3], wmOperator *op)
ED_undo_paint_push_end(UNDO_PAINT_IMAGE);
- DAG_id_tag_update(&ima->id, 0);
+ DEG_id_tag_update(&ima->id, 0);
}
static int texture_paint_poll(bContext *C)
{
- if (texture_paint_toggle_poll(C))
- if (CTX_data_active_object(C)->mode & OB_MODE_TEXTURE_PAINT)
+ if (texture_paint_toggle_poll(C)) {
+ WorkSpace *workspace = CTX_wm_workspace(C);
+ if (workspace->object_mode & OB_MODE_TEXTURE_PAINT) {
return 1;
-
+ }
+ }
return 0;
}
@@ -1537,16 +1568,19 @@ int image_texture_paint_poll(bContext *C)
int facemask_paint_poll(bContext *C)
{
- return BKE_paint_select_face_test(CTX_data_active_object(C));
+ const WorkSpace *workspace = CTX_wm_workspace(C);
+ return BKE_paint_select_face_test(CTX_data_active_object(C), workspace->object_mode);
}
int vert_paint_poll(bContext *C)
{
- return BKE_paint_select_vert_test(CTX_data_active_object(C));
+ const WorkSpace *workspace = CTX_wm_workspace(C);
+ return BKE_paint_select_vert_test(CTX_data_active_object(C), workspace->object_mode);
}
int mask_paint_poll(bContext *C)
{
- return BKE_paint_select_elem_test(CTX_data_active_object(C));
+ const WorkSpace *workspace = CTX_wm_workspace(C);
+ return BKE_paint_select_elem_test(CTX_data_active_object(C), workspace->object_mode);
}
diff --git a/source/blender/editors/sculpt_paint/paint_image_2d.c b/source/blender/editors/sculpt_paint/paint_image_2d.c
index 894277402a7..2ce7c51b6b4 100644
--- a/source/blender/editors/sculpt_paint/paint_image_2d.c
+++ b/source/blender/editors/sculpt_paint/paint_image_2d.c
@@ -46,12 +46,13 @@
#include "BKE_colorband.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_brush.h"
#include "BKE_image.h"
#include "BKE_paint.h"
#include "BKE_report.h"
+#include "DEG_depsgraph.h"
+
#include "ED_paint.h"
#include "ED_screen.h"
@@ -1365,7 +1366,7 @@ void paint_2d_redraw(const bContext *C, void *ps, bool final)
/* compositor listener deals with updating */
WM_event_add_notifier(C, NC_IMAGE | NA_EDITED, s->image);
- DAG_id_tag_update(&s->image->id, 0);
+ DEG_id_tag_update(&s->image->id, 0);
}
else {
if (!s->sima || !s->sima->lock)
diff --git a/source/blender/editors/sculpt_paint/paint_image_proj.c b/source/blender/editors/sculpt_paint/paint_image_proj.c
index c309b223a81..e339a4c13b6 100644
--- a/source/blender/editors/sculpt_paint/paint_image_proj.c
+++ b/source/blender/editors/sculpt_paint/paint_image_proj.c
@@ -65,7 +65,6 @@
#include "BKE_colorband.h"
#include "BKE_context.h"
#include "BKE_colortools.h"
-#include "BKE_depsgraph.h"
#include "BKE_DerivedMesh.h"
#include "BKE_idprop.h"
#include "BKE_brush.h"
@@ -81,6 +80,8 @@
#include "BKE_scene.h"
#include "BKE_texture.h"
+#include "DEG_depsgraph.h"
+
#include "UI_interface.h"
#include "ED_mesh.h"
@@ -226,6 +227,7 @@ typedef struct ProjPaintState {
View3D *v3d;
RegionView3D *rv3d;
ARegion *ar;
+ const Depsgraph *depsgraph;
Scene *scene;
int source; /* PROJ_SRC_**** */
@@ -3132,7 +3134,7 @@ static void proj_paint_state_viewport_init(
ED_view3d_ob_project_mat_get_from_obmat(ps->rv3d, ps->obmat, ps->projectMat);
- ps->is_ortho = ED_view3d_clip_range_get(ps->v3d, ps->rv3d, &ps->clipsta, &ps->clipend, true);
+ ps->is_ortho = ED_view3d_clip_range_get(ps->depsgraph, ps->v3d, ps->rv3d, &ps->clipsta, &ps->clipend, true);
}
else {
/* re-projection */
@@ -3421,12 +3423,15 @@ static void project_paint_bleed_add_face_user(
#endif
/* Return true if DM can be painted on, false otherwise */
-static bool proj_paint_state_dm_init(ProjPaintState *ps)
+static bool proj_paint_state_dm_init(const bContext *C, ProjPaintState *ps)
{
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
/* Workaround for subsurf selection, try the display mesh first */
if (ps->source == PROJ_SRC_IMAGE_CAM) {
/* using render mesh, assume only camera was rendered from */
- ps->dm = mesh_create_derived_render(ps->scene, ps->ob, ps->scene->customdata_mask | CD_MASK_MTFACE);
+ ps->dm = mesh_create_derived_render(&eval_ctx, ps->scene, ps->ob, ps->scene->customdata_mask | CD_MASK_MTFACE);
ps->dm_release = true;
}
else if (ps->ob->derivedFinal &&
@@ -3438,7 +3443,7 @@ static bool proj_paint_state_dm_init(ProjPaintState *ps)
}
else {
ps->dm = mesh_get_derived_final(
- ps->scene, ps->ob,
+ &eval_ctx, ps->scene, ps->ob,
ps->scene->customdata_mask | CD_MASK_MTFACE | (ps->do_face_sel ? CD_ORIGINDEX : 0));
ps->dm_release = true;
}
@@ -3488,7 +3493,7 @@ static void proj_paint_layer_clone_init(
/* use clone mtface? */
if (ps->do_layer_clone) {
- const int layer_num = CustomData_get_clone_layer(&((Mesh *)ps->ob->data)->pdata, CD_MTEXPOLY);
+ const int layer_num = CustomData_get_clone_layer(&((Mesh *)ps->ob->data)->ldata, CD_MLOOPUV);
ps->dm_mloopuv_clone = MEM_mallocN(ps->dm_totpoly * sizeof(MLoopUV *), "proj_paint_mtfaces");
@@ -3818,7 +3823,7 @@ static void project_paint_prepare_all_faces(
/* run once per stroke before projection painting */
static void project_paint_begin(
- ProjPaintState *ps,
+ const bContext *C, ProjPaintState *ps,
const bool is_multi_view, const char symmetry_flag)
{
ProjPaintLayerClone layer_clone;
@@ -3841,7 +3846,7 @@ static void project_paint_begin(
/* paint onto the derived mesh */
if (ps->is_shared_user == false) {
- if (!proj_paint_state_dm_init(ps)) {
+ if (!proj_paint_state_dm_init(C, ps)) {
return;
}
}
@@ -3851,7 +3856,7 @@ static void project_paint_begin(
if (ps->do_layer_stencil || ps->do_stencil_brush) {
//int layer_num = CustomData_get_stencil_layer(&ps->dm->loopData, CD_MLOOPUV);
- int layer_num = CustomData_get_stencil_layer(&((Mesh *)ps->ob->data)->pdata, CD_MTEXPOLY);
+ int layer_num = CustomData_get_stencil_layer(&((Mesh *)ps->ob->data)->ldata, CD_MLOOPUV);
if (layer_num != -1)
ps->dm_mloopuv_stencil = CustomData_get_layer_n(&ps->dm->loopData, CD_MLOOPUV, layer_num);
@@ -3939,7 +3944,7 @@ static void project_paint_end(ProjPaintState *ps)
ProjPaintImage *projIma;
for (a = 0, projIma = ps->projImages; a < ps->image_tot; a++, projIma++) {
BKE_image_release_ibuf(projIma->ima, projIma->ibuf, NULL);
- DAG_id_tag_update(&projIma->ima->id, 0);
+ DEG_id_tag_update(&projIma->ima->id, 0);
}
}
@@ -5024,7 +5029,9 @@ void paint_proj_stroke(
/* clone gets special treatment here to avoid going through image initialization */
if (ps_handle->is_clone_cursor_pick) {
+ EvaluationContext eval_ctx;
Scene *scene = ps_handle->scene;
+ struct Depsgraph *graph = CTX_data_depsgraph(C);
View3D *v3d = CTX_wm_view3d(C);
ARegion *ar = CTX_wm_region(C);
float *cursor = ED_view3d_cursor3d_get(scene, v3d);
@@ -5032,8 +5039,11 @@ void paint_proj_stroke(
view3d_operator_needs_opengl(C);
- if (!ED_view3d_autodist(scene, ar, v3d, mval_i, cursor, false, NULL))
+ CTX_data_eval_ctx(C, &eval_ctx);
+
+ if (!ED_view3d_autodist(&eval_ctx, graph, ar, v3d, mval_i, cursor, false, NULL)) {
return;
+ }
ED_region_tag_redraw(ar);
@@ -5089,6 +5099,7 @@ static void project_state_init(bContext *C, Object *ob, ProjPaintState *ps, int
ps->rv3d = CTX_wm_region_view3d(C);
ps->ar = CTX_wm_region(C);
+ ps->depsgraph = CTX_data_depsgraph(C);
ps->scene = scene;
ps->ob = ob; /* allow override of active object */
@@ -5211,7 +5222,7 @@ void *paint_proj_new_stroke(bContext *C, Object *ob, const float mouse[2], int m
project_state_init(C, ob, ps, mode);
- if (ps->ob == NULL || !(ps->ob->lay & ps->v3d->lay)) {
+ if (ps->ob == NULL) {
ps_handle->ps_views_tot = i + 1;
goto fail;
}
@@ -5235,7 +5246,7 @@ void *paint_proj_new_stroke(bContext *C, Object *ob, const float mouse[2], int m
PROJ_PAINT_STATE_SHARED_MEMCPY(ps, ps_handle->ps_views[0]);
}
- project_paint_begin(ps, is_multi_view, symmetry_flag_views[i]);
+ project_paint_begin(C, ps, is_multi_view, symmetry_flag_views[i]);
paint_proj_begin_clone(ps, mouse);
@@ -5313,11 +5324,12 @@ static int texture_paint_camera_project_exec(bContext *C, wmOperator *op)
{
Image *image = BLI_findlink(&CTX_data_main(C)->image, RNA_enum_get(op->ptr, "image"));
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
ProjPaintState ps = {NULL};
int orig_brush_size;
IDProperty *idgroup;
IDProperty *view_data = NULL;
- Object *ob = OBACT;
+ Object *ob = OBACT(view_layer);
bool uvs, mat, tex;
if (ob == NULL || ob->type != OB_MESH) {
@@ -5388,7 +5400,7 @@ static int texture_paint_camera_project_exec(bContext *C, wmOperator *op)
ED_image_undo_restore, ED_image_undo_free, NULL);
/* allocate and initialize spatial data structures */
- project_paint_begin(&ps, false, 0);
+ project_paint_begin(C, &ps, false, 0);
if (ps.dm == NULL) {
BKE_brush_size_set(scene, ps.brush, orig_brush_size);
@@ -5446,12 +5458,16 @@ static int texture_paint_image_from_view_exec(bContext *C, wmOperator *op)
char filename[FILE_MAX];
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ EvaluationContext eval_ctx;
ToolSettings *settings = scene->toolsettings;
int w = settings->imapaint.screen_grab_size[0];
int h = settings->imapaint.screen_grab_size[1];
int maxsize;
char err_out[256] = "unknown";
+ CTX_data_eval_ctx(C, &eval_ctx);
+
RNA_string_get(op->ptr, "filepath", filename);
maxsize = GPU_max_texture_size();
@@ -5460,7 +5476,7 @@ static int texture_paint_image_from_view_exec(bContext *C, wmOperator *op)
if (h > maxsize) h = maxsize;
ibuf = ED_view3d_draw_offscreen_imbuf(
- scene, CTX_wm_view3d(C), CTX_wm_region(C),
+ &eval_ctx, scene, view_layer, CTX_wm_view3d(C), CTX_wm_region(C),
w, h, IB_rect, V3D_OFSDRAW_NONE, R_ALPHAPREMUL, 0, NULL,
NULL, NULL, err_out);
if (!ibuf) {
@@ -5494,7 +5510,7 @@ static int texture_paint_image_from_view_exec(bContext *C, wmOperator *op)
array = (float *)IDP_Array(view_data);
memcpy(array, rv3d->winmat, sizeof(rv3d->winmat)); array += sizeof(rv3d->winmat) / sizeof(float);
memcpy(array, rv3d->viewmat, sizeof(rv3d->viewmat)); array += sizeof(rv3d->viewmat) / sizeof(float);
- is_ortho = ED_view3d_clip_range_get(v3d, rv3d, &array[0], &array[1], true);
+ is_ortho = ED_view3d_clip_range_get(CTX_data_depsgraph(C), v3d, rv3d, &array[0], &array[1], true);
/* using float for a bool is dodgy but since its an extra member in the array...
* easier then adding a single bool prop */
array[2] = is_ortho ? 1.0f : 0.0f;
@@ -5594,7 +5610,7 @@ bool BKE_paint_proj_mesh_data_check(Scene *scene, Object *ob, bool *uvs, bool *m
}
me = BKE_mesh_from_object(ob);
- layernum = CustomData_number_of_layers(&me->pdata, CD_MTEXPOLY);
+ layernum = CustomData_number_of_layers(&me->ldata, CD_MLOOPUV);
if (layernum == 0) {
hasuvs = false;
@@ -5743,7 +5759,7 @@ static bool proj_paint_add_slot(bContext *C, wmOperator *op)
BKE_texpaint_slot_refresh_cache(scene, ma);
BKE_image_signal(ima, NULL, IMA_SIGNAL_USER_NEW_IMAGE);
WM_event_add_notifier(C, NC_IMAGE | NA_ADDED, ima);
- DAG_id_tag_update(&ma->id, 0);
+ DEG_id_tag_update(&ma->id, 0);
ED_area_tag_redraw(CTX_wm_area(C));
BKE_paint_proj_mesh_data_check(scene, ob, NULL, NULL, NULL, NULL);
@@ -5859,7 +5875,7 @@ static int texture_paint_delete_texture_paint_slot_exec(bContext *C, wmOperator
ma->mtex[slot->index] = NULL;
BKE_texpaint_slot_refresh_cache(scene, ma);
- DAG_id_tag_update(&ma->id, 0);
+ DEG_id_tag_update(&ma->id, 0);
WM_event_add_notifier(C, NC_MATERIAL, ma);
/* we need a notifier for data change since we change the displayed modifier uvs */
WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data);
@@ -5917,7 +5933,7 @@ static int add_simple_uvs_exec(bContext *C, wmOperator *UNUSED(op))
BKE_paint_proj_mesh_data_check(scene, ob, NULL, NULL, NULL, NULL);
- DAG_id_tag_update(ob->data, 0);
+ DEG_id_tag_update(ob->data, 0);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data);
WM_event_add_notifier(C, NC_SCENE | ND_TOOLSETTINGS, scene);
return OPERATOR_FINISHED;
@@ -5925,11 +5941,11 @@ static int add_simple_uvs_exec(bContext *C, wmOperator *UNUSED(op))
static int add_simple_uvs_poll(bContext *C)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Object *ob = CTX_data_active_object(C);
-
- if (!ob || ob->type != OB_MESH || ob->mode != OB_MODE_TEXTURE_PAINT)
+ if (!ob || (ob->type != OB_MESH) || (workspace->object_mode != OB_MODE_TEXTURE_PAINT)) {
return false;
-
+ }
return true;
}
diff --git a/source/blender/editors/sculpt_paint/paint_intern.h b/source/blender/editors/sculpt_paint/paint_intern.h
index 48fcf0596e3..28d9dfe13b0 100644
--- a/source/blender/editors/sculpt_paint/paint_intern.h
+++ b/source/blender/editors/sculpt_paint/paint_intern.h
@@ -155,10 +155,10 @@ void PAINT_OT_weight_sample_group(struct wmOperatorType *ot);
/* paint_vertex_proj.c */
struct VertProjHandle;
struct VertProjHandle *ED_vpaint_proj_handle_create(
- struct Scene *scene, struct Object *ob,
+ const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob,
struct DMCoNo **r_vcosnos);
void ED_vpaint_proj_handle_update(
- struct VertProjHandle *vp_handle,
+ const struct EvaluationContext *eval_ctx, struct VertProjHandle *vp_handle,
/* runtime vars */
struct ARegion *ar, const float mval_fl[2]);
void ED_vpaint_proj_handle_free(
@@ -237,7 +237,6 @@ bool paint_convert_bb_to_rect(struct rcti *rect,
* 2D screens-space bounding box into four 3D planes) */
void paint_calc_redraw_planes(float planes[4][4],
const struct ARegion *ar,
- struct RegionView3D *rv3d,
struct Object *ob,
const struct rcti *screen_rect);
diff --git a/source/blender/editors/sculpt_paint/paint_mask.c b/source/blender/editors/sculpt_paint/paint_mask.c
index 264135d1d03..ff261a808da 100644
--- a/source/blender/editors/sculpt_paint/paint_mask.c
+++ b/source/blender/editors/sculpt_paint/paint_mask.c
@@ -35,8 +35,6 @@
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
-#include "BIF_glutil.h"
-
#include "BLI_bitmap_draw_2d.h"
#include "BLI_math_matrix.h"
#include "BLI_math_geom.h"
@@ -52,6 +50,8 @@
#include "BKE_paint.h"
#include "BKE_subsurf.h"
+#include "DEG_depsgraph.h"
+
#include "RNA_access.h"
#include "RNA_define.h"
@@ -134,6 +134,7 @@ static int mask_flood_fill_exec(bContext *C, wmOperator *op)
ARegion *ar = CTX_wm_region(C);
struct Scene *scene = CTX_data_scene(C);
Object *ob = CTX_data_active_object(C);
+ EvaluationContext eval_ctx;
PaintMaskFloodMode mode;
float value;
PBVH *pbvh;
@@ -142,10 +143,12 @@ static int mask_flood_fill_exec(bContext *C, wmOperator *op)
bool multires;
Sculpt *sd = CTX_data_tool_settings(C)->sculpt;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
mode = RNA_enum_get(op->ptr, "mode");
value = RNA_float_get(op->ptr, "value");
- BKE_sculpt_update_mesh_elements(scene, sd, ob, false, true);
+ BKE_sculpt_update_mesh_elements(&eval_ctx, scene, sd, ob, false, true);
pbvh = ob->sculpt->pbvh;
multires = (BKE_pbvh_type(pbvh) == PBVH_GRIDS);
@@ -258,9 +261,9 @@ static void mask_box_select_task_cb(
int ED_sculpt_mask_box_select(struct bContext *C, ViewContext *vc, const rcti *rect, bool select, bool UNUSED(extend))
{
+ EvaluationContext eval_ctx;
Sculpt *sd = vc->scene->toolsettings->sculpt;
BoundBox bb;
- bglMats mats = {{0}};
float clip_planes[4][4];
float clip_planes_final[4][4];
ARegion *ar = vc->ar;
@@ -274,15 +277,16 @@ int ED_sculpt_mask_box_select(struct bContext *C, ViewContext *vc, const rcti *r
int totnode, symmpass;
int symm = sd->paint.symmetry_flags & PAINT_SYMM_AXIS_ALL;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
mode = PAINT_MASK_FLOOD_VALUE;
value = select ? 1.0 : 0.0;
/* transform the clip planes in object space */
- view3d_get_transformation(vc->ar, vc->rv3d, vc->obact, &mats);
- ED_view3d_clipping_calc(&bb, clip_planes, &mats, rect);
+ ED_view3d_clipping_calc(&bb, clip_planes, vc->ar, vc->obact, rect);
negate_m4(clip_planes);
- BKE_sculpt_update_mesh_elements(scene, sd, ob, false, true);
+ BKE_sculpt_update_mesh_elements(&eval_ctx, scene, sd, ob, false, true);
pbvh = ob->sculpt->pbvh;
multires = (BKE_pbvh_type(pbvh) == PBVH_GRIDS);
@@ -424,9 +428,9 @@ static int paint_mask_gesture_lasso_exec(bContext *C, wmOperator *op)
const int (*mcords)[2] = WM_gesture_lasso_path_to_array(C, op, &mcords_tot);
if (mcords) {
+ EvaluationContext eval_ctx;
float clip_planes[4][4], clip_planes_final[4][4];
BoundBox bb;
- bglMats mats = {{0}};
Object *ob;
ViewContext vc;
LassoMaskData data;
@@ -440,11 +444,12 @@ static int paint_mask_gesture_lasso_exec(bContext *C, wmOperator *op)
PaintMaskFloodMode mode = RNA_enum_get(op->ptr, "mode");
float value = RNA_float_get(op->ptr, "value");
+ CTX_data_eval_ctx(C, &eval_ctx);
+
/* Calculations of individual vertices are done in 2D screen space to diminish the amount of
* calculations done. Bounding box PBVH collision is not computed against enclosing rectangle
* of lasso */
view3d_set_viewcontext(C, &vc);
- view3d_get_transformation(vc.ar, vc.rv3d, vc.obact, &mats);
/* lasso data calculations */
data.vc = &vc;
@@ -460,10 +465,10 @@ static int paint_mask_gesture_lasso_exec(bContext *C, wmOperator *op)
mcords, mcords_tot,
mask_lasso_px_cb, &data);
- ED_view3d_clipping_calc(&bb, clip_planes, &mats, &data.rect);
+ ED_view3d_clipping_calc(&bb, clip_planes, vc.ar, vc.obact, &data.rect);
negate_m4(clip_planes);
- BKE_sculpt_update_mesh_elements(scene, sd, ob, false, true);
+ BKE_sculpt_update_mesh_elements(&eval_ctx, scene, sd, ob, false, true);
pbvh = ob->sculpt->pbvh;
multires = (BKE_pbvh_type(pbvh) == PBVH_GRIDS);
diff --git a/source/blender/editors/sculpt_paint/paint_ops.c b/source/blender/editors/sculpt_paint/paint_ops.c
index 004d2757a71..c031a733630 100644
--- a/source/blender/editors/sculpt_paint/paint_ops.c
+++ b/source/blender/editors/sculpt_paint/paint_ops.c
@@ -40,6 +40,8 @@
#include "BKE_paint.h"
#include "BKE_main.h"
+#include "DEG_depsgraph.h"
+
#include "ED_paint.h"
#include "ED_screen.h"
#include "ED_image.h"
@@ -260,7 +262,9 @@ static void PALETTE_OT_color_delete(wmOperatorType *ot)
}
static int brush_reset_exec(bContext *C, wmOperator *UNUSED(op))
+
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Paint *paint = BKE_paint_get_active_from_context(C);
Brush *brush = BKE_paint_brush(paint);
Object *ob = CTX_data_active_object(C);
@@ -268,7 +272,7 @@ static int brush_reset_exec(bContext *C, wmOperator *UNUSED(op))
if (!ob || !brush) return OPERATOR_CANCELLED;
/* TODO: other modes */
- if (ob->mode & OB_MODE_SCULPT) {
+ if (workspace->object_mode & OB_MODE_SCULPT) {
BKE_brush_sculpt_reset(brush);
}
else {
@@ -401,6 +405,7 @@ static int brush_generic_tool_set(Main *bmain, Paint *paint, const int tool,
static int brush_select_exec(bContext *C, wmOperator *op)
{
+ WorkSpace *workspace = CTX_wm_workspace(C);
Main *bmain = CTX_data_main(C);
ToolSettings *toolsettings = CTX_data_tool_settings(C);
Paint *paint = NULL;
@@ -414,7 +419,7 @@ static int brush_select_exec(bContext *C, wmOperator *op)
Object *ob = CTX_data_active_object(C);
if (ob) {
/* select current paint mode */
- paint_mode = ob->mode & OB_MODE_ALL_PAINT;
+ paint_mode = workspace->object_mode & OB_MODE_ALL_PAINT;
}
else {
return OPERATOR_CANCELLED;
diff --git a/source/blender/editors/sculpt_paint/paint_stroke.c b/source/blender/editors/sculpt_paint/paint_stroke.c
index 2ce047e33ec..3982c9a3c30 100644
--- a/source/blender/editors/sculpt_paint/paint_stroke.c
+++ b/source/blender/editors/sculpt_paint/paint_stroke.c
@@ -51,6 +51,7 @@
#include "BKE_curve.h"
#include "BKE_colortools.h"
#include "BKE_image.h"
+#include "BKE_mesh.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -58,7 +59,7 @@
#include "BIF_gl.h"
#include "BIF_glutil.h"
-#include "GPU_basic_shader.h"
+#include "GPU_immediate.h"
#include "ED_screen.h"
#include "ED_view3d.h"
@@ -147,9 +148,18 @@ static void paint_draw_smooth_cursor(bContext *C, int x, int y, void *customdata
if (stroke && brush) {
glEnable(GL_LINE_SMOOTH);
glEnable(GL_BLEND);
- glColor4ubv(paint->paint_cursor_col);
- sdrawline(x, y, (int)stroke->last_mouse_position[0],
- (int)stroke->last_mouse_position[1]);
+
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor4ubv(paint->paint_cursor_col);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2f(pos, x, y);
+ immVertex2f(pos, stroke->last_mouse_position[0], stroke->last_mouse_position[1]);
+ immEnd();
+
+ immUnbindProgram();
+
glDisable(GL_BLEND);
glDisable(GL_LINE_SMOOTH);
}
@@ -161,36 +171,35 @@ static void paint_draw_line_cursor(bContext *C, int x, int y, void *customdata)
PaintStroke *stroke = customdata;
glEnable(GL_LINE_SMOOTH);
- glEnable(GL_BLEND);
- GPU_basic_shader_bind_enable(GPU_SHADER_LINE | GPU_SHADER_STIPPLE);
- GPU_basic_shader_line_stipple(3, 0xAAAA);
- GPU_basic_shader_line_width(3.0);
+ uint shdr_pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
- glColor4ub(0, 0, 0, paint->paint_cursor_col[3]);
- if (stroke->constrain_line) {
- sdrawline((int)stroke->last_mouse_position[0], (int)stroke->last_mouse_position[1],
- stroke->constrained_pos[0], stroke->constrained_pos[1]);
- }
- else {
- sdrawline((int)stroke->last_mouse_position[0], (int)stroke->last_mouse_position[1],
- x, y);
- }
+ immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR);
+
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2], viewport_size[3]);
+
+ immUniform1i("num_colors", 2); /* "advanced" mode */
+ const float alpha = (float)paint->paint_cursor_col[3] / 255.0f;
+ immUniformArray4fv("colors", (float *)(float[][4]){{0.0f, 0.0f, 0.0f, alpha}, {1.0f, 1.0f, 1.0f, alpha}}, 2);
+ immUniform1f("dash_width", 6.0f);
+
+ immBegin(GWN_PRIM_LINES, 2);
- glColor4ub(255, 255, 255, paint->paint_cursor_col[3]);
- GPU_basic_shader_line_width(1.0);
if (stroke->constrain_line) {
- sdrawline((int)stroke->last_mouse_position[0], (int)stroke->last_mouse_position[1],
- stroke->constrained_pos[0], stroke->constrained_pos[1]);
+ immVertex2f(shdr_pos, stroke->last_mouse_position[0], stroke->last_mouse_position[1]);
+ immVertex2f(shdr_pos, stroke->constrained_pos[0], stroke->constrained_pos[1]);
}
else {
- sdrawline((int)stroke->last_mouse_position[0], (int)stroke->last_mouse_position[1],
- x, y);
+ immVertex2f(shdr_pos, stroke->last_mouse_position[0], stroke->last_mouse_position[1]);
+ immVertex2f(shdr_pos, x, y);
}
- GPU_basic_shader_bind_disable(GPU_SHADER_LINE | GPU_SHADER_STIPPLE);
+ immEnd();
+
+ immUnbindProgram();
- glDisable(GL_BLEND);
glDisable(GL_LINE_SMOOTH);
}
diff --git a/source/blender/editors/sculpt_paint/paint_utils.c b/source/blender/editors/sculpt_paint/paint_utils.c
index 7473808012d..6b14f97d80c 100644
--- a/source/blender/editors/sculpt_paint/paint_utils.c
+++ b/source/blender/editors/sculpt_paint/paint_utils.c
@@ -56,11 +56,13 @@
#include "BKE_paint.h"
#include "BKE_report.h"
+#include "DEG_depsgraph.h"
+
#include "RNA_access.h"
#include "RNA_define.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
+#include "GPU_glew.h"
+#include "GPU_matrix.h"
#include "IMB_colormanagement.h"
#include "IMB_imbuf_types.h"
@@ -130,17 +132,12 @@ bool paint_convert_bb_to_rect(rcti *rect,
* 2D screens-space bounding box into four 3D planes) */
void paint_calc_redraw_planes(float planes[4][4],
const ARegion *ar,
- RegionView3D *rv3d,
Object *ob,
const rcti *screen_rect)
{
BoundBox bb;
- bglMats mats;
rcti rect;
- memset(&bb, 0, sizeof(BoundBox));
- view3d_get_transformation(ar, rv3d, ob, &mats);
-
/* use some extra space just in case */
rect = *screen_rect;
rect.xmin -= 2;
@@ -148,7 +145,7 @@ void paint_calc_redraw_planes(float planes[4][4],
rect.ymin -= 2;
rect.ymax += 2;
- ED_view3d_clipping_calc(&bb, planes, &mats, &rect);
+ ED_view3d_clipping_calc(&bb, planes, ar, ob, &rect);
negate_m4(planes);
}
@@ -277,9 +274,9 @@ static void imapaint_tri_weights(float matrix[4][4], GLint view[4],
}
/* compute uv coordinates of mouse in face */
-static void imapaint_pick_uv(Scene *scene, Object *ob, unsigned int faceindex, const int xy[2], float uv[2])
+static void imapaint_pick_uv(EvaluationContext *eval_ctx, Scene *scene, Object *ob, unsigned int faceindex, const int xy[2], float uv[2])
{
- DerivedMesh *dm = mesh_get_derived_final(scene, ob, CD_MASK_BAREMESH);
+ DerivedMesh *dm = mesh_get_derived_final(eval_ctx, scene, ob, CD_MASK_BAREMESH);
const int tottri = dm->getNumLoopTri(dm);
int i, findex;
float p[2], w[3], absw, minabsw;
@@ -293,8 +290,8 @@ static void imapaint_pick_uv(Scene *scene, Object *ob, unsigned int faceindex, c
/* get the needed opengl matrices */
glGetIntegerv(GL_VIEWPORT, view);
- glGetFloatv(GL_MODELVIEW_MATRIX, (float *)matrix);
- glGetFloatv(GL_PROJECTION_MATRIX, (float *)proj);
+ gpuGetModelViewMatrix(matrix);
+ gpuGetProjectionMatrix(proj);
view[0] = view[1] = 0;
mul_m4_m4m4(matrix, matrix, ob->obmat);
mul_m4_m4m4(matrix, proj, matrix);
@@ -355,13 +352,15 @@ static void imapaint_pick_uv(Scene *scene, Object *ob, unsigned int faceindex, c
}
/* returns 0 if not found, otherwise 1 */
-static int imapaint_pick_face(ViewContext *vc, const int mval[2], unsigned int *r_index, unsigned int totpoly)
+static int imapaint_pick_face(
+ const struct EvaluationContext *eval_ctx, ViewContext *vc, const int mval[2],
+ unsigned int *r_index, unsigned int totpoly)
{
if (totpoly == 0)
return 0;
/* sample only on the exact position */
- *r_index = ED_view3d_backbuf_sample(vc, mval[0], mval[1]);
+ *r_index = ED_view3d_backbuf_sample(eval_ctx, vc, mval[0], mval[1]);
if ((*r_index) == 0 || (*r_index) > (unsigned int)totpoly) {
return 0;
@@ -427,6 +426,7 @@ void flip_qt_qt(float out[4], const float in[4], const char symm)
void paint_sample_color(bContext *C, ARegion *ar, int x, int y, bool texpaint_proj, bool use_palette)
{
Scene *scene = CTX_data_scene(C);
+ EvaluationContext eval_ctx;
Paint *paint = BKE_paint_get_active_from_context(C);
Palette *palette = BKE_paint_palette(paint);
PaletteColor *color = NULL;
@@ -434,6 +434,8 @@ void paint_sample_color(bContext *C, ARegion *ar, int x, int y, bool texpaint_pr
unsigned int col;
const unsigned char *cp;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
CLAMP(x, 0, ar->winx);
CLAMP(y, 0, ar->winy);
@@ -450,14 +452,15 @@ void paint_sample_color(bContext *C, ARegion *ar, int x, int y, bool texpaint_pr
if (CTX_wm_view3d(C) && texpaint_proj) {
/* first try getting a colour directly from the mesh faces if possible */
- Object *ob = OBACT;
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Object *ob = OBACT(view_layer);
bool sample_success = false;
ImagePaintSettings *imapaint = &scene->toolsettings->imapaint;
bool use_material = (imapaint->mode == IMAGEPAINT_MODE_MATERIAL);
if (ob) {
Mesh *me = (Mesh *)ob->data;
- DerivedMesh *dm = mesh_get_derived_final(scene, ob, CD_MASK_BAREMESH);
+ DerivedMesh *dm = mesh_get_derived_final(&eval_ctx, scene, ob, CD_MASK_BAREMESH);
ViewContext vc;
const int mval[2] = {x, y};
@@ -469,7 +472,7 @@ void paint_sample_color(bContext *C, ARegion *ar, int x, int y, bool texpaint_pr
view3d_operator_needs_opengl(C);
- if (imapaint_pick_face(&vc, mval, &faceindex, totpoly)) {
+ if (imapaint_pick_face(&eval_ctx, &vc, mval, &faceindex, totpoly)) {
Image *image;
if (use_material)
@@ -482,7 +485,7 @@ void paint_sample_color(bContext *C, ARegion *ar, int x, int y, bool texpaint_pr
if (ibuf && ibuf->rect) {
float uv[2];
float u, v;
- imapaint_pick_uv(scene, ob, faceindex, mval, uv);
+ imapaint_pick_uv(&eval_ctx, scene, ob, faceindex, mval, uv);
sample_success = true;
u = fmodf(uv[0], 1.0f);
@@ -563,9 +566,11 @@ static int brush_curve_preset_exec(bContext *C, wmOperator *op)
Brush *br = BKE_paint_brush(BKE_paint_get_active_from_context(C));
if (br) {
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
BKE_brush_curve_preset(br, RNA_enum_get(op->ptr, "shape"));
- BKE_paint_invalidate_cursor_overlay(scene, br->curve);
+ BKE_paint_invalidate_cursor_overlay(scene, view_layer, br->curve, workspace->object_mode);
}
return OPERATOR_FINISHED;
diff --git a/source/blender/editors/sculpt_paint/paint_vertex.c b/source/blender/editors/sculpt_paint/paint_vertex.c
index 490343ab1f2..4fc6ba40fdc 100644
--- a/source/blender/editors/sculpt_paint/paint_vertex.c
+++ b/source/blender/editors/sculpt_paint/paint_vertex.c
@@ -54,7 +54,6 @@
#include "BKE_brush.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_deform.h"
#include "BKE_mesh.h"
#include "BKE_mesh_mapping.h"
@@ -63,6 +62,8 @@
#include "BKE_report.h"
#include "BKE_subsurf.h"
+#include "DEG_depsgraph.h"
+
#include "WM_api.h"
#include "WM_types.h"
@@ -198,9 +199,12 @@ static void paint_last_stroke_update(Scene *scene, ARegion *ar, const float mval
/* Returns true if vertex paint mode is active */
int vertex_paint_mode_poll(bContext *C)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Object *ob = CTX_data_active_object(C);
-
- return ob && ob->mode == OB_MODE_VERTEX_PAINT && ((Mesh *)ob->data)->totpoly;
+ return (ob &&
+ (ob->type == OB_MESH) &&
+ ((Mesh *)ob->data)->totpoly &&
+ (workspace->object_mode & OB_MODE_VERTEX_PAINT));
}
int vertex_paint_poll(bContext *C)
@@ -220,18 +224,22 @@ int vertex_paint_poll(bContext *C)
int weight_paint_mode_poll(bContext *C)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Object *ob = CTX_data_active_object(C);
-
- return ob && ob->mode == OB_MODE_WEIGHT_PAINT && ((Mesh *)ob->data)->totpoly;
+ return (ob &&
+ (ob->type == OB_MESH) &&
+ ((Mesh *)ob->data)->totpoly &&
+ (workspace->object_mode == OB_MODE_WEIGHT_PAINT));
}
int weight_paint_poll(bContext *C)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Object *ob = CTX_data_active_object(C);
ScrArea *sa;
if ((ob != NULL) &&
- (ob->mode & OB_MODE_WEIGHT_PAINT) &&
+ (workspace->object_mode & OB_MODE_WEIGHT_PAINT) &&
(BKE_paint_brush(&CTX_data_tool_settings(C)->wpaint->paint) != NULL) &&
(sa = CTX_wm_area(C)) &&
(sa->spacetype == SPACE_VIEW3D))
@@ -937,28 +945,29 @@ static void do_weight_paint_vertex(
/* Toggle operator for turning vertex paint mode on or off (copied from sculpt.c) */
-static void vertex_paint_init_session(Scene *scene, Object *ob)
+static void vertex_paint_init_session(const EvaluationContext *eval_ctx, Scene *scene, Object *ob)
{
/* Create persistent sculpt mode data */
BKE_sculpt_toolsettings_data_ensure(scene);
if (ob->sculpt == NULL) {
ob->sculpt = MEM_callocN(sizeof(SculptSession), "sculpt session");
- BKE_sculpt_update_mesh_elements(scene, scene->toolsettings->sculpt, ob, 0, false);
+ BKE_sculpt_update_mesh_elements(eval_ctx, scene, scene->toolsettings->sculpt, ob, 0, false);
}
}
-static void vertex_paint_init_session_data(const ToolSettings *ts, Object *ob)
+static void vertex_paint_init_session_data(
+ const EvaluationContext *eval_ctx, const ToolSettings *ts, Object *ob)
{
/* Create maps */
struct SculptVertexPaintGeomMap *gmap = NULL;
const Brush *brush = NULL;
- if (ob->mode == OB_MODE_VERTEX_PAINT) {
+ if (eval_ctx->object_mode == OB_MODE_VERTEX_PAINT) {
gmap = &ob->sculpt->mode.vpaint.gmap;
brush = BKE_paint_brush(&ts->vpaint->paint);
ob->sculpt->mode_type = OB_MODE_VERTEX_PAINT;
}
- else if (ob->mode == OB_MODE_WEIGHT_PAINT) {
+ else if (eval_ctx->object_mode == OB_MODE_WEIGHT_PAINT) {
gmap = &ob->sculpt->mode.wpaint.gmap;
brush = BKE_paint_brush(&ts->wpaint->paint);
ob->sculpt->mode_type = OB_MODE_WEIGHT_PAINT;
@@ -987,7 +996,7 @@ static void vertex_paint_init_session_data(const ToolSettings *ts, Object *ob)
}
/* Create average brush arrays */
- if (ob->mode == OB_MODE_VERTEX_PAINT) {
+ if (eval_ctx->object_mode == OB_MODE_VERTEX_PAINT) {
if (!brush_use_accumulate(brush)) {
if (ob->sculpt->mode.vpaint.previous_color == NULL) {
ob->sculpt->mode.vpaint.previous_color =
@@ -998,7 +1007,7 @@ static void vertex_paint_init_session_data(const ToolSettings *ts, Object *ob)
MEM_SAFE_FREE(ob->sculpt->mode.vpaint.previous_color);
}
}
- else if (ob->mode == OB_MODE_WEIGHT_PAINT) {
+ else if (eval_ctx->object_mode == OB_MODE_WEIGHT_PAINT) {
if (!brush_use_accumulate(brush)) {
if (ob->sculpt->mode.wpaint.alpha_weight == NULL) {
ob->sculpt->mode.wpaint.alpha_weight =
@@ -1033,23 +1042,24 @@ static void vertex_paint_init_session_data(const ToolSettings *ts, Object *ob)
*/
static int wpaint_mode_toggle_exec(bContext *C, wmOperator *op)
{
+ WorkSpace *workspace = CTX_wm_workspace(C);
Object *ob = CTX_data_active_object(C);
const int mode_flag = OB_MODE_WEIGHT_PAINT;
- const bool is_mode_set = (ob->mode & mode_flag) != 0;
+ const bool is_mode_set = (workspace->object_mode & mode_flag) != 0;
Scene *scene = CTX_data_scene(C);
VPaint *wp = scene->toolsettings->wpaint;
Mesh *me;
if (!is_mode_set) {
- if (!ED_object_mode_compat_set(C, ob, mode_flag, op->reports)) {
+ if (!ED_object_mode_compat_set(C, workspace, mode_flag, op->reports)) {
return OPERATOR_CANCELLED;
}
}
me = BKE_mesh_from_object(ob);
- if (ob->mode & mode_flag) {
- ob->mode &= ~mode_flag;
+ if (workspace->object_mode & mode_flag) {
+ workspace->object_mode &= ~mode_flag;
if (me->editflag & ME_EDIT_PAINT_VERT_SEL) {
BKE_mesh_flush_select_from_verts(me);
@@ -1073,7 +1083,7 @@ static int wpaint_mode_toggle_exec(bContext *C, wmOperator *op)
paint_cursor_delete_textures();
}
else {
- ob->mode |= mode_flag;
+ workspace->object_mode |= mode_flag;
if (wp == NULL)
wp = scene->toolsettings->wpaint = new_vpaint();
@@ -1090,15 +1100,20 @@ static int wpaint_mode_toggle_exec(bContext *C, wmOperator *op)
if (ob->sculpt) {
BKE_sculptsession_free(ob);
}
- vertex_paint_init_session(scene, ob);
+
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
+ vertex_paint_init_session(&eval_ctx, scene, ob);
}
+ BKE_mesh_batch_cache_dirty(ob->data, BKE_MESH_BATCH_DIRTY_ALL);
+
/* Weightpaint works by overriding colors in mesh,
* so need to make sure we recalc on enter and
* exit (exit needs doing regardless because we
* should redeform).
*/
- DAG_id_tag_update(&me->id, 0);
+ DEG_id_tag_update(&me->id, 0);
WM_event_add_notifier(C, NC_SCENE | ND_MODE, scene);
@@ -1281,11 +1296,14 @@ static bool wpaint_stroke_test_start(bContext *C, wmOperator *op, const float mo
bool *defbase_sel;
SculptSession *ss = ob->sculpt;
VPaint *vp = CTX_data_tool_settings(C)->wpaint;
+ EvaluationContext eval_ctx;
if (ED_wpaint_ensure_data(C, op->reports, WPAINT_ENSURE_MIRROR, &vgroup_index) == false) {
return false;
}
+ CTX_data_eval_ctx(C, &eval_ctx);
+
{
/* check if we are attempting to paint onto a locked vertex group,
* and other options disallow it from doing anything useful */
@@ -1384,9 +1402,9 @@ static bool wpaint_stroke_test_start(bContext *C, wmOperator *op, const float mo
}
/* If not previously created, create vertex/weight paint mode session data */
- vertex_paint_init_session(scene, ob);
+ vertex_paint_init_session(&eval_ctx, scene, ob);
vwpaint_update_cache_invariants(C, vp, ss, op, mouse);
- vertex_paint_init_session_data(ts, ob);
+ vertex_paint_init_session_data(&eval_ctx, ts, ob);
if (ob->sculpt->mode.wpaint.dvert_prev != NULL) {
MDeformVert *dv = ob->sculpt->mode.wpaint.dvert_prev;
@@ -1825,7 +1843,8 @@ static void wpaint_paint_leaves(
/* threaded loop over nodes */
SculptThreadedTaskData data = {
- .sd = sd, .ob = ob, .brush = brush, .nodes = nodes, .vp = vp, .wpd = wpd, .wpi = wpi, .me = me, .C = C,
+ .C = C, .sd = sd, .ob = ob, .brush = brush, .nodes = nodes,
+ .vp = vp, .wpd = wpd, .wpi = wpi, .me = me,
};
/* Use this so average can modify its weight without touching the brush. */
@@ -2053,7 +2072,9 @@ static void wpaint_stroke_update_step(bContext *C, struct PaintStroke *stroke, P
/* also needed for "View Selected" on last stroke */
paint_last_stroke_update(scene, vc->ar, mval);
- DAG_id_tag_update(ob->data, 0);
+ BKE_mesh_batch_cache_dirty(ob->data, BKE_MESH_BATCH_DIRTY_ALL);
+
+ DEG_id_tag_update(ob->data, 0);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
swap_m4m4(wpd->vc.rv3d->persmat, mat);
@@ -2117,7 +2138,7 @@ static void wpaint_stroke_done(const bContext *C, struct PaintStroke *stroke)
}
}
- DAG_id_tag_update(ob->data, 0);
+ DEG_id_tag_update(ob->data, 0);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
@@ -2199,15 +2220,16 @@ void PAINT_OT_weight_paint(wmOperatorType *ot)
*/
static int vpaint_mode_toggle_exec(bContext *C, wmOperator *op)
{
+ WorkSpace *workspace = CTX_wm_workspace(C);
Object *ob = CTX_data_active_object(C);
const int mode_flag = OB_MODE_VERTEX_PAINT;
- const bool is_mode_set = (ob->mode & mode_flag) != 0;
+ const bool is_mode_set = (workspace->object_mode & mode_flag) != 0;
Scene *scene = CTX_data_scene(C);
VPaint *vp = scene->toolsettings->vpaint;
Mesh *me;
if (!is_mode_set) {
- if (!ED_object_mode_compat_set(C, ob, mode_flag, op->reports)) {
+ if (!ED_object_mode_compat_set(C, workspace, mode_flag, op->reports)) {
return OPERATOR_CANCELLED;
}
}
@@ -2216,7 +2238,7 @@ static int vpaint_mode_toggle_exec(bContext *C, wmOperator *op)
/* toggle: end vpaint */
if (is_mode_set) {
- ob->mode &= ~mode_flag;
+ workspace->object_mode &= ~mode_flag;
if (me->editflag & ME_EDIT_PAINT_FACE_SEL) {
BKE_mesh_flush_select_from_polys(me);
@@ -2236,7 +2258,7 @@ static int vpaint_mode_toggle_exec(bContext *C, wmOperator *op)
paint_cursor_delete_textures();
}
else {
- ob->mode |= mode_flag;
+ workspace->object_mode |= mode_flag;
ED_mesh_color_ensure(me, NULL);
@@ -2255,11 +2277,16 @@ static int vpaint_mode_toggle_exec(bContext *C, wmOperator *op)
}
BKE_sculptsession_free(ob);
}
- vertex_paint_init_session(scene, ob);
+
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
+ vertex_paint_init_session(&eval_ctx, scene, ob);
}
+ BKE_mesh_batch_cache_dirty(ob->data, BKE_MESH_BATCH_DIRTY_ALL);
+
/* update modifier stack for mapping requirements */
- DAG_id_tag_update(&me->id, 0);
+ DEG_id_tag_update(&me->id, 0);
WM_event_add_notifier(C, NC_SCENE | ND_MODE, scene);
@@ -2345,6 +2372,9 @@ static bool vpaint_stroke_test_start(bContext *C, struct wmOperator *op, const f
Object *ob = CTX_data_active_object(C);
Mesh *me;
SculptSession *ss = ob->sculpt;
+ EvaluationContext eval_ctx;
+
+ CTX_data_eval_ctx(C, &eval_ctx);
/* context checks could be a poll() */
me = BKE_mesh_from_object(ob);
@@ -2392,14 +2422,14 @@ static bool vpaint_stroke_test_start(bContext *C, struct wmOperator *op, const f
/* Create projection handle */
if (vpd->is_texbrush) {
ob->sculpt->building_vp_handle = true;
- vpd->vp_handle = ED_vpaint_proj_handle_create(scene, ob, &vpd->vertexcosnos);
+ vpd->vp_handle = ED_vpaint_proj_handle_create(&eval_ctx, scene, ob, &vpd->vertexcosnos);
ob->sculpt->building_vp_handle = false;
}
/* If not previously created, create vertex/weight paint mode session data */
- vertex_paint_init_session(scene, ob);
+ vertex_paint_init_session(&eval_ctx, scene, ob);
vwpaint_update_cache_invariants(C, vp, ss, op, mouse);
- vertex_paint_init_session_data(ts, ob);
+ vertex_paint_init_session_data(&eval_ctx, ts, ob);
if (ob->sculpt->mode.vpaint.previous_color != NULL) {
memset(ob->sculpt->mode.vpaint.previous_color, 0, sizeof(uint) * me->totloop);
@@ -2853,8 +2883,8 @@ static void vpaint_paint_leaves(
const Brush *brush = ob->sculpt->cache->brush;
SculptThreadedTaskData data = {
- .sd = sd, .ob = ob, .brush = brush, .nodes = nodes, .vp = vp, .vpd = vpd,
- .lcol = (uint *)me->mloopcol, .me = me, .C = C,
+ .C = C, .sd = sd, .ob = ob, .brush = brush, .nodes = nodes, .vp = vp, .vpd = vpd,
+ .lcol = (uint *)me->mloopcol, .me = me,
};
ParallelRangeSettings settings;
BLI_parallel_range_settings_defaults(&settings);
@@ -2991,6 +3021,8 @@ static void vpaint_stroke_update_step(bContext *C, struct PaintStroke *stroke, P
swap_m4m4(vc->rv3d->persmat, mat);
+ BKE_mesh_batch_cache_dirty(ob->data, BKE_MESH_BATCH_DIRTY_ALL);
+
if (vp->paint.brush->vertexpaint_tool == PAINT_BLEND_SMEAR) {
memcpy(vpd->smear.color_prev, vpd->smear.color_curr, sizeof(uint) * ((Mesh *)ob->data)->totloop);
}
@@ -3004,7 +3036,7 @@ static void vpaint_stroke_update_step(bContext *C, struct PaintStroke *stroke, P
if (vpd->use_fast_update == false) {
/* recalculate modifier stack to get new colors, slow,
* avoid this if we can! */
- DAG_id_tag_update(ob->data, 0);
+ DEG_id_tag_update(ob->data, 0);
}
else {
/* If using new VBO drawing, mark mcol as dirty to force colors gpu buffer refresh! */
@@ -3103,3 +3135,4 @@ void PAINT_OT_vertex_paint(wmOperatorType *ot)
paint_stroke_operator_properties(ot);
}
+
diff --git a/source/blender/editors/sculpt_paint/paint_vertex_color_ops.c b/source/blender/editors/sculpt_paint/paint_vertex_color_ops.c
index b69ca32e5af..f442c12cbe9 100644
--- a/source/blender/editors/sculpt_paint/paint_vertex_color_ops.c
+++ b/source/blender/editors/sculpt_paint/paint_vertex_color_ops.c
@@ -28,15 +28,17 @@
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
+#include "DNA_workspace_types.h"
#include "BLI_math_base.h"
#include "BLI_math_color.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_mesh.h"
#include "BKE_deform.h"
+#include "DEG_depsgraph.h"
+
#include "RNA_access.h"
#include "RNA_define.h"
@@ -50,9 +52,10 @@
static int vertex_weight_paint_mode_poll(bContext *C)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Object *ob = CTX_data_active_object(C);
Mesh *me = BKE_mesh_from_object(ob);
- return (ob && (ob->mode == OB_MODE_VERTEX_PAINT || ob->mode == OB_MODE_WEIGHT_PAINT)) &&
+ return (ob && ELEM(workspace->object_mode, OB_MODE_VERTEX_PAINT, OB_MODE_WEIGHT_PAINT)) &&
(me && me->totpoly && me->dvert);
}
@@ -97,7 +100,7 @@ static bool vertex_color_set(Object *ob, uint paintcol)
/* remove stale me->mcol, will be added later */
BKE_mesh_tessface_clear(me);
- DAG_id_tag_update(&me->id, 0);
+ DEG_id_tag_update(&me->id, 0);
return true;
}
@@ -168,7 +171,7 @@ static bool vertex_paint_from_weight(Object *ob)
} while (j < mp->totloop);
}
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
return true;
}
@@ -304,7 +307,7 @@ static bool vertex_color_smooth(Object *ob)
MEM_freeN(mlooptag);
- DAG_id_tag_update(&me->id, 0);
+ DEG_id_tag_update(&me->id, 0);
return true;
}
diff --git a/source/blender/editors/sculpt_paint/paint_vertex_color_utils.c b/source/blender/editors/sculpt_paint/paint_vertex_color_utils.c
index 398512287c4..a8045232e05 100644
--- a/source/blender/editors/sculpt_paint/paint_vertex_color_utils.c
+++ b/source/blender/editors/sculpt_paint/paint_vertex_color_utils.c
@@ -38,9 +38,10 @@
#include "IMB_colormanagement.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_mesh.h"
+#include "DEG_depsgraph.h"
+
#include "ED_mesh.h"
#include "paint_intern.h" /* own include */
@@ -87,7 +88,7 @@ bool ED_vpaint_color_transform(
/* remove stale me->mcol, will be added later */
BKE_mesh_tessface_clear(me);
- DAG_id_tag_update(&me->id, 0);
+ DEG_id_tag_update(&me->id, 0);
return true;
}
diff --git a/source/blender/editors/sculpt_paint/paint_vertex_proj.c b/source/blender/editors/sculpt_paint/paint_vertex_proj.c
index 411a0ca9ec3..336f851d4c1 100644
--- a/source/blender/editors/sculpt_paint/paint_vertex_proj.c
+++ b/source/blender/editors/sculpt_paint/paint_vertex_proj.c
@@ -42,6 +42,8 @@
#include "BKE_DerivedMesh.h"
#include "BKE_context.h"
+#include "DEG_depsgraph.h"
+
#include "ED_screen.h"
#include "ED_view3d.h"
@@ -100,13 +102,13 @@ static void vpaint_proj_dm_map_cosnos_init__map_cb(
}
static void vpaint_proj_dm_map_cosnos_init(
- Scene *scene, Object *ob,
+ const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob,
struct VertProjHandle *vp_handle)
{
Mesh *me = ob->data;
DerivedMesh *dm;
- dm = mesh_get_derived_final(scene, ob, CD_MASK_BAREMESH | CD_MASK_ORIGINDEX);
+ dm = mesh_get_derived_final(eval_ctx, scene, ob, CD_MASK_BAREMESH | CD_MASK_ORIGINDEX);
if (dm->foreachMappedVert) {
memset(vp_handle->vcosnos, 0, sizeof(DMCoNo) * me->totvert);
@@ -174,7 +176,7 @@ static void vpaint_proj_dm_map_cosnos_update__map_cb(
}
static void vpaint_proj_dm_map_cosnos_update(
- struct VertProjHandle *vp_handle,
+ const struct EvaluationContext *eval_ctx, struct VertProjHandle *vp_handle,
ARegion *ar, const float mval_fl[2])
{
struct VertProjUpdate vp_update = {vp_handle, ar, mval_fl};
@@ -187,7 +189,7 @@ static void vpaint_proj_dm_map_cosnos_update(
/* quick sanity check - we shouldn't have to run this if there are no modifiers */
BLI_assert(BLI_listbase_is_empty(&ob->modifiers) == false);
- dm = mesh_get_derived_final(scene, ob, CD_MASK_BAREMESH | CD_MASK_ORIGINDEX);
+ dm = mesh_get_derived_final(eval_ctx, scene, ob, CD_MASK_BAREMESH | CD_MASK_ORIGINDEX);
/* highly unlikely this will become unavailable once painting starts (perhaps with animated modifiers) */
if (LIKELY(dm->foreachMappedVert)) {
@@ -204,7 +206,7 @@ static void vpaint_proj_dm_map_cosnos_update(
/* Public Functions */
struct VertProjHandle *ED_vpaint_proj_handle_create(
- Scene *scene, Object *ob,
+ const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob,
DMCoNo **r_vcosnos)
{
struct VertProjHandle *vp_handle = MEM_mallocN(sizeof(struct VertProjHandle), __func__);
@@ -215,7 +217,7 @@ struct VertProjHandle *ED_vpaint_proj_handle_create(
vp_handle->use_update = false;
/* sets 'use_update' if needed */
- vpaint_proj_dm_map_cosnos_init(scene, ob, vp_handle);
+ vpaint_proj_dm_map_cosnos_init(eval_ctx, scene, ob, vp_handle);
if (vp_handle->use_update) {
vp_handle->dists_sq = MEM_mallocN(sizeof(float) * me->totvert, __func__);
@@ -235,11 +237,11 @@ struct VertProjHandle *ED_vpaint_proj_handle_create(
}
void ED_vpaint_proj_handle_update(
- struct VertProjHandle *vp_handle,
+ const struct EvaluationContext *eval_ctx, struct VertProjHandle *vp_handle,
ARegion *ar, const float mval_fl[2])
{
if (vp_handle->use_update) {
- vpaint_proj_dm_map_cosnos_update(vp_handle, ar, mval_fl);
+ vpaint_proj_dm_map_cosnos_update(eval_ctx, vp_handle, ar, mval_fl);
}
}
diff --git a/source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c b/source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c
index 2afbecbc6fb..72e2e7b323d 100644
--- a/source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c
+++ b/source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c
@@ -49,7 +49,6 @@
#include "BKE_DerivedMesh.h"
#include "BKE_brush.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_deform.h"
#include "BKE_mesh.h"
#include "BKE_mesh_mapping.h"
@@ -59,6 +58,8 @@
#include "BKE_report.h"
#include "BKE_colortools.h"
+#include "DEG_depsgraph.h"
+
#include "WM_api.h"
#include "WM_types.h"
@@ -117,9 +118,10 @@ static void wpaint_prev_destroy(struct WPaintPrev *wpp)
static int weight_from_bones_poll(bContext *C)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Object *ob = CTX_data_active_object(C);
- return (ob && (ob->mode & OB_MODE_WEIGHT_PAINT) && modifiers_isDeformedByArmature(ob));
+ return (ob && (workspace->object_mode & OB_MODE_WEIGHT_PAINT) && modifiers_isDeformedByArmature(ob));
}
static int weight_from_bones_exec(bContext *C, wmOperator *op)
@@ -130,9 +132,13 @@ static int weight_from_bones_exec(bContext *C, wmOperator *op)
Mesh *me = ob->data;
int type = RNA_enum_get(op->ptr, "type");
- create_vgroups_from_armature(op->reports, scene, ob, armob, type, (me->editflag & ME_EDIT_MIRROR_X));
+ EvaluationContext eval_ctx;
+
+ CTX_data_eval_ctx(C, &eval_ctx);
+
+ create_vgroups_from_armature(op->reports, &eval_ctx, scene, ob, armob, type, (me->editflag & ME_EDIT_MIRROR_X));
- DAG_id_tag_update(&me->id, 0);
+ DEG_id_tag_update(&me->id, 0);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, me);
return OPERATOR_FINISHED;
@@ -366,7 +372,7 @@ static int weight_sample_group_exec(bContext *C, wmOperator *op)
BLI_assert(type + 1 >= 0);
vc.obact->actdef = type + 1;
- DAG_id_tag_update(&vc.obact->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&vc.obact->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, vc.obact);
return OPERATOR_FINISHED;
}
@@ -482,7 +488,7 @@ static bool weight_paint_set(Object *ob, float paintweight)
wpaint_prev_destroy(&wpp);
- DAG_id_tag_update(&me->id, 0);
+ DEG_id_tag_update(&me->id, 0);
return true;
}
@@ -694,7 +700,7 @@ static int paint_weight_gradient_modal(bContext *C, wmOperator *op, const wmEven
}
MEM_freeN(vert_cache);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
}
else if (ret & OPERATOR_FINISHED) {
@@ -720,7 +726,12 @@ static int paint_weight_gradient_exec(bContext *C, wmOperator *op)
float sco_start[2] = {x_start, y_start};
float sco_end[2] = {x_end, y_end};
const bool is_interactive = (gesture != NULL);
- DerivedMesh *dm = mesh_get_derived_final(scene, ob, scene->customdata_mask);
+
+ EvaluationContext eval_ctx;
+
+ CTX_data_eval_ctx(C, &eval_ctx);
+
+ DerivedMesh *dm = mesh_get_derived_final(&eval_ctx, scene, ob, scene->customdata_mask);
DMGradient_userData data = {NULL};
@@ -792,7 +803,7 @@ static int paint_weight_gradient_exec(bContext *C, wmOperator *op)
dm->foreachMappedVert(dm, gradientVertUpdate__mapFunc, &data, DM_FOREACH_NOP);
}
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
if (is_interactive == false) {
diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c
index d631a23bee0..02404ef2d8e 100644
--- a/source/blender/editors/sculpt_paint/sculpt.c
+++ b/source/blender/editors/sculpt_paint/sculpt.c
@@ -56,7 +56,6 @@
#include "BKE_brush.h"
#include "BKE_ccg.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_global.h"
#include "BKE_image.h"
#include "BKE_key.h"
@@ -72,6 +71,8 @@
#include "BKE_subsurf.h"
#include "BKE_colortools.h"
+#include "DEG_depsgraph.h"
+
#include "WM_api.h"
#include "WM_types.h"
@@ -499,8 +500,7 @@ bool sculpt_get_redraw_rect(ARegion *ar, RegionView3D *rv3d,
return 1;
}
-void ED_sculpt_redraw_planes_get(float planes[4][4], ARegion *ar,
- RegionView3D *rv3d, Object *ob)
+void ED_sculpt_redraw_planes_get(float planes[4][4], ARegion *ar, Object *ob)
{
PBVH *pbvh = ob->sculpt->pbvh;
/* copy here, original will be used below */
@@ -508,7 +508,7 @@ void ED_sculpt_redraw_planes_get(float planes[4][4], ARegion *ar,
sculpt_extend_redraw_rect_previous(ob, &rect);
- paint_calc_redraw_planes(planes, ar, rv3d, ob, &rect);
+ paint_calc_redraw_planes(planes, ar, ob, &rect);
/* we will draw this rect, so now we can set it as the previous partial rect.
* Note that we don't update with the union of previous/current (rect), only with
@@ -2098,6 +2098,10 @@ static void do_draw_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
mul_v3_v3(offset, ss->cache->scale);
mul_v3_fl(offset, bstrength);
+ /* XXX - this shouldn't be necessary, but sculpting crashes in blender2.8 otherwise
+ * initialize before threads so they can do curve mapping */
+ curvemapping_initialize(brush->curve);
+
/* threaded loop over nodes */
SculptThreadedTaskData data = {
.sd = sd, .ob = ob, .brush = brush, .nodes = nodes,
@@ -4078,8 +4082,9 @@ static void sculpt_update_tex(const Scene *scene, Sculpt *sd, SculptSession *ss)
int sculpt_mode_poll(bContext *C)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Object *ob = CTX_data_active_object(C);
- return ob && ob->mode & OB_MODE_SCULPT;
+ return ob && workspace->object_mode & OB_MODE_SCULPT;
}
int sculpt_mode_poll_view3d(bContext *C)
@@ -4596,10 +4601,12 @@ static void sculpt_stroke_modifiers_check(const bContext *C, Object *ob, const B
SculptSession *ss = ob->sculpt;
if (ss->kb || ss->modifiers_active) {
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
Scene *scene = CTX_data_scene(C);
Sculpt *sd = scene->toolsettings->sculpt;
bool need_pmap = sculpt_any_smooth_mode(brush, ss->cache, 0);
- BKE_sculpt_update_mesh_elements(scene, sd, ob, need_pmap, false);
+ BKE_sculpt_update_mesh_elements(&eval_ctx, scene, sd, ob, need_pmap, false);
}
}
@@ -4684,7 +4691,7 @@ static float sculpt_raycast_init(
RegionView3D *rv3d = vc->ar->regiondata;
/* TODO: what if the segment is totally clipped? (return == 0) */
- ED_view3d_win_to_segment(vc->ar, vc->v3d, mouse, ray_start, ray_end, true);
+ ED_view3d_win_to_segment(vc->depsgraph, vc->ar, vc->v3d, mouse, ray_start, ray_end, true);
invert_m4_m4(obimat, ob->obmat);
mul_m4_v3(obimat, ray_start);
@@ -4805,12 +4812,15 @@ static bool sculpt_brush_stroke_init(bContext *C, wmOperator *op)
Scene *scene = CTX_data_scene(C);
Object *ob = CTX_data_active_object(C);
Sculpt *sd = CTX_data_tool_settings(C)->sculpt;
+ EvaluationContext eval_ctx;
SculptSession *ss = CTX_data_active_object(C)->sculpt;
Brush *brush = BKE_paint_brush(&sd->paint);
int mode = RNA_enum_get(op->ptr, "mode");
bool is_smooth;
bool need_mask = false;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
if (brush->sculpt_tool == SCULPT_TOOL_MASK) {
need_mask = true;
}
@@ -4819,7 +4829,7 @@ static bool sculpt_brush_stroke_init(bContext *C, wmOperator *op)
sculpt_brush_init_tex(scene, sd, ss);
is_smooth = sculpt_any_smooth_mode(brush, NULL, mode);
- BKE_sculpt_update_mesh_elements(scene, sd, ob, is_smooth, need_mask);
+ BKE_sculpt_update_mesh_elements(&eval_ctx, scene, sd, ob, is_smooth, need_mask);
return 1;
}
@@ -4863,7 +4873,7 @@ static void sculpt_flush_update(bContext *C)
GPU_drawobject_free(ob->derivedFinal);
if (ss->kb || ss->modifiers_active) {
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
ED_region_tag_redraw(ar);
}
else {
@@ -4893,6 +4903,9 @@ static void sculpt_flush_update(bContext *C)
ED_region_tag_redraw_partial(ar, &r);
}
}
+
+ /* 2.8x - avoid full mesh update! */
+ BKE_mesh_batch_cache_dirty(ob->data, BKE_MESH_BATCH_DIRTY_SCULPT_COORDS);
}
/* Returns whether the mouse/stylus is over the mesh (1)
@@ -4976,7 +4989,7 @@ static void sculpt_stroke_update_step(bContext *C, struct PaintStroke *UNUSED(st
* Could be optimized later, but currently don't think it's so
* much common scenario.
*
- * Same applies to the DAG_id_tag_update() invoked from
+ * Same applies to the DEG_id_tag_update() invoked from
* sculpt_flush_update().
*/
if (ss->modifiers_active) {
@@ -5050,7 +5063,7 @@ static void sculpt_stroke_done(const bContext *C, struct PaintStroke *UNUSED(str
/* try to avoid calling this, only for e.g. linked duplicates now */
if (((Mesh *)ob->data)->id.us > 1)
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
}
@@ -5206,7 +5219,7 @@ void sculpt_pbvh_clear(Object *ob)
BKE_pbvh_free(ss->pbvh);
ss->pbvh = NULL;
if (dm)
- dm->getPBVH(NULL, dm);
+ dm->getPBVH(NULL, dm, OB_MODE_OBJECT);
BKE_object_free_derived_caches(ob);
}
@@ -5246,10 +5259,13 @@ void sculpt_update_after_dynamic_topology_toggle(bContext *C)
{
Scene *scene = CTX_data_scene(C);
Object *ob = CTX_data_active_object(C);
+ EvaluationContext eval_ctx;
Sculpt *sd = scene->toolsettings->sculpt;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
/* Create the PBVH */
- BKE_sculpt_update_mesh_elements(scene, sd, ob, false, false);
+ BKE_sculpt_update_mesh_elements(&eval_ctx, scene, sd, ob, false, false);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
}
@@ -5583,28 +5599,29 @@ static void SCULPT_OT_symmetrize(wmOperatorType *ot)
/**** Toggle operator for turning sculpt mode on or off ****/
-static void sculpt_init_session(Scene *scene, Object *ob)
+static void sculpt_init_session(const EvaluationContext *eval_ctx, Scene *scene, Object *ob)
{
/* Create persistent sculpt mode data */
BKE_sculpt_toolsettings_data_ensure(scene);
ob->sculpt = MEM_callocN(sizeof(SculptSession), "sculpt session");
- BKE_sculpt_update_mesh_elements(scene, scene->toolsettings->sculpt, ob, 0, false);
+ BKE_sculpt_update_mesh_elements(eval_ctx, scene, scene->toolsettings->sculpt, ob, 0, false);
}
static int sculpt_mode_toggle_exec(bContext *C, wmOperator *op)
{
+ WorkSpace *workspace = CTX_wm_workspace(C);
Scene *scene = CTX_data_scene(C);
Object *ob = CTX_data_active_object(C);
const int mode_flag = OB_MODE_SCULPT;
- const bool is_mode_set = (ob->mode & mode_flag) != 0;
+ const bool is_mode_set = (workspace->object_mode & mode_flag) != 0;
Mesh *me;
MultiresModifierData *mmd = BKE_sculpt_multires_active(scene, ob);
int flush_recalc = 0;
if (!is_mode_set) {
- if (!ED_object_mode_compat_set(C, ob, mode_flag, op->reports)) {
+ if (!ED_object_mode_compat_set(C, workspace, mode_flag, op->reports)) {
return OPERATOR_CANCELLED;
}
}
@@ -5624,7 +5641,7 @@ static int sculpt_mode_toggle_exec(bContext *C, wmOperator *op)
* a consistent state.
*/
if (true || flush_recalc || (ob->sculpt && ob->sculpt->bm)) {
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
}
if (me->flag & ME_SCULPT_DYNAMIC_TOPOLOGY) {
@@ -5638,7 +5655,7 @@ static int sculpt_mode_toggle_exec(bContext *C, wmOperator *op)
}
/* Leave sculptmode */
- ob->mode &= ~mode_flag;
+ workspace->object_mode &= ~mode_flag;
BKE_sculptsession_free(ob);
@@ -5646,16 +5663,19 @@ static int sculpt_mode_toggle_exec(bContext *C, wmOperator *op)
}
else {
/* Enter sculptmode */
- ob->mode |= mode_flag;
+ workspace->object_mode |= mode_flag;
if (flush_recalc)
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
/* Create sculpt mode session data */
- if (ob->sculpt)
+ if (ob->sculpt) {
BKE_sculptsession_free(ob);
+ }
- sculpt_init_session(scene, ob);
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
+ sculpt_init_session(&eval_ctx, scene, ob);
/* Mask layer is required */
if (mmd) {
diff --git a/source/blender/editors/sculpt_paint/sculpt_undo.c b/source/blender/editors/sculpt_paint/sculpt_undo.c
index 1b96d2fd5a0..3d9021480d9 100644
--- a/source/blender/editors/sculpt_paint/sculpt_undo.c
+++ b/source/blender/editors/sculpt_paint/sculpt_undo.c
@@ -51,12 +51,12 @@
#include "BKE_ccg.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_multires.h"
#include "BKE_paint.h"
#include "BKE_key.h"
#include "BKE_mesh.h"
#include "BKE_subsurf.h"
+#include "DEG_depsgraph.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -127,9 +127,12 @@ static bool sculpt_undo_restore_coords(bContext *C, DerivedMesh *dm, SculptUndoN
Scene *scene = CTX_data_scene(C);
Sculpt *sd = CTX_data_tool_settings(C)->sculpt;
Object *ob = CTX_data_active_object(C);
+ EvaluationContext eval_ctx;
SculptSession *ss = ob->sculpt;
MVert *mvert;
int *index;
+
+ CTX_data_eval_ctx(C, &eval_ctx);
if (unode->maxvert) {
/* regular mesh restore */
@@ -143,7 +146,7 @@ static bool sculpt_undo_restore_coords(bContext *C, DerivedMesh *dm, SculptUndoN
if (kb) {
ob->shapenr = BLI_findindex(&key->block, kb) + 1;
- BKE_sculpt_update_mesh_elements(scene, sd, ob, 0, false);
+ BKE_sculpt_update_mesh_elements(&eval_ctx, scene, sd, ob, 0, false);
WM_event_add_notifier(C, NC_OBJECT | ND_DATA, ob);
}
else {
@@ -365,8 +368,8 @@ static void sculpt_undo_bmesh_restore_generic(bContext *C,
}
/* Create empty sculpt BMesh and enable logging */
-static void sculpt_undo_bmesh_enable(Object *ob,
- SculptUndoNode *unode)
+static void sculpt_undo_bmesh_enable(
+ Object *ob, SculptUndoNode *unode)
{
SculptSession *ss = ob->sculpt;
Mesh *me = ob->data;
@@ -459,6 +462,7 @@ static void sculpt_undo_restore(bContext *C, ListBase *lb)
Scene *scene = CTX_data_scene(C);
Sculpt *sd = CTX_data_tool_settings(C)->sculpt;
Object *ob = CTX_data_active_object(C);
+ EvaluationContext eval_ctx;
DerivedMesh *dm;
SculptSession *ss = ob->sculpt;
SculptUndoNode *unode;
@@ -466,6 +470,8 @@ static void sculpt_undo_restore(bContext *C, ListBase *lb)
bool need_mask = false;
bool partial_update = true;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
for (unode = lb->first; unode; unode = unode->next) {
if (STREQ(unode->idname, ob->id.name)) {
if (unode->type == SCULPT_UNDO_MASK) {
@@ -477,10 +483,10 @@ static void sculpt_undo_restore(bContext *C, ListBase *lb)
}
}
- BKE_sculpt_update_mesh_elements(scene, sd, ob, 0, need_mask);
+ BKE_sculpt_update_mesh_elements(&eval_ctx, scene, sd, ob, 0, need_mask);
/* call _after_ sculpt_update_mesh_elements() which may update 'ob->derivedFinal' */
- dm = mesh_get_derived_final(scene, ob, 0);
+ dm = mesh_get_derived_final(&eval_ctx, scene, ob, 0);
if (lb->first && sculpt_undo_bmesh_restore(C, lb->first, ob, ss))
return;
@@ -563,7 +569,7 @@ static void sculpt_undo_restore(bContext *C, ListBase *lb)
}
if (tag_update) {
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
}
else {
sculpt_update_object_bounding_box(ob);
diff --git a/source/blender/editors/sculpt_paint/sculpt_uv.c b/source/blender/editors/sculpt_paint/sculpt_uv.c
index abc4b28ee50..c9453f94e61 100644
--- a/source/blender/editors/sculpt_paint/sculpt_uv.c
+++ b/source/blender/editors/sculpt_paint/sculpt_uv.c
@@ -46,15 +46,19 @@
#include "BKE_paint.h"
#include "BKE_colortools.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_mesh_mapping.h"
#include "BKE_customdata.h"
#include "BKE_editmesh.h"
+#include "DEG_depsgraph.h"
+
#include "ED_screen.h"
#include "ED_image.h"
#include "ED_mesh.h"
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+
#include "WM_api.h"
#include "WM_types.h"
@@ -64,9 +68,6 @@
#include "paint_intern.h"
#include "uvedit_intern.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
-
#include "UI_view2d.h"
#define MARK_BOUNDARY 1
@@ -173,7 +174,7 @@ static int uv_sculpt_brush_poll_do(bContext *C, const bool check_region)
}
em = BKE_editmesh_from_object(obedit);
- ret = EDBM_mtexpoly_check(em);
+ ret = EDBM_uv_check(em);
if (ret) {
ARegion *ar = CTX_wm_region(C);
@@ -212,18 +213,17 @@ static void brush_drawcursor_uvsculpt(bContext *C, int x, int y, void *UNUSED(cu
alpha *= (size - PX_SIZE_FADE_MIN) / (PX_SIZE_FADE_MAX - PX_SIZE_FADE_MIN);
}
- glPushMatrix();
-
- glTranslatef((float)x, (float)y, 0.0f);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor3fvAlpha(brush->add_col, alpha);
- glColor4f(brush->add_col[0], brush->add_col[1], brush->add_col[2], alpha);
glEnable(GL_LINE_SMOOTH);
glEnable(GL_BLEND);
- glutil_draw_lined_arc(0, (float)(M_PI * 2.0), size, 40);
+ imm_draw_circle_wire_2d(pos, (float)x, (float)y, size, 40);
glDisable(GL_BLEND);
glDisable(GL_LINE_SMOOTH);
- glPopMatrix();
+ immUnbindProgram();
}
#undef PX_SIZE_FADE_MAX
#undef PX_SIZE_FADE_MIN
@@ -899,7 +899,7 @@ static int uv_sculpt_stroke_modal(bContext *C, wmOperator *op, const wmEvent *ev
ED_region_tag_redraw(CTX_wm_region(C));
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
return OPERATOR_RUNNING_MODAL;
}
diff --git a/source/blender/editors/sound/CMakeLists.txt b/source/blender/editors/sound/CMakeLists.txt
index 535cd579030..9efdf11e8d7 100644
--- a/source/blender/editors/sound/CMakeLists.txt
+++ b/source/blender/editors/sound/CMakeLists.txt
@@ -39,7 +39,7 @@ set(SRC
)
if(WITH_AUDASPACE)
- add_definitions(${AUDASPACE_DEFINITIONS})
+ add_definitions(-DWITH_AUDASPACE)
list(APPEND INC_SYS
${AUDASPACE_C_INCLUDE_DIRS}
diff --git a/source/blender/editors/sound/sound_ops.c b/source/blender/editors/sound/sound_ops.c
index 0c349e6433e..daeb7823a43 100644
--- a/source/blender/editors/sound/sound_ops.c
+++ b/source/blender/editors/sound/sound_ops.c
@@ -67,7 +67,7 @@
#include "WM_types.h"
#ifdef WITH_AUDASPACE
-# include AUD_SPECIAL_H
+# include <AUD_Special.h>
#endif
#include "ED_sound.h"
@@ -311,6 +311,8 @@ static int sound_bake_animation_exec(bContext *C, wmOperator *UNUSED(op))
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ struct Depsgraph *depsgraph = CTX_data_depsgraph(C);
int oldfra = scene->r.cfra;
int cfra;
@@ -318,11 +320,11 @@ static int sound_bake_animation_exec(bContext *C, wmOperator *UNUSED(op))
for (cfra = (scene->r.sfra > 0) ? (scene->r.sfra - 1) : 0; cfra <= scene->r.efra + 1; cfra++) {
scene->r.cfra = cfra;
- BKE_scene_update_for_newframe(bmain->eval_ctx, bmain, scene, scene->lay);
+ BKE_scene_graph_update_for_newframe(bmain->eval_ctx, depsgraph, bmain, scene, view_layer);
}
scene->r.cfra = oldfra;
- BKE_scene_update_for_newframe(bmain->eval_ctx, bmain, scene, scene->lay);
+ BKE_scene_graph_update_for_newframe(bmain->eval_ctx, depsgraph, bmain, scene, view_layer);
return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/space_action/action_buttons.c b/source/blender/editors/space_action/action_buttons.c
index bfc808f6d83..80ec9107984 100644
--- a/source/blender/editors/space_action/action_buttons.c
+++ b/source/blender/editors/space_action/action_buttons.c
@@ -48,7 +48,6 @@
#include "BKE_context.h"
#include "BKE_curve.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
#include "BKE_main.h"
#include "BKE_global.h"
diff --git a/source/blender/editors/space_action/action_draw.c b/source/blender/editors/space_action/action_draw.c
index 0764f586de9..11ac1d60f39 100644
--- a/source/blender/editors/space_action/action_draw.c
+++ b/source/blender/editors/space_action/action_draw.c
@@ -61,6 +61,7 @@
#include "ED_keyframes_draw.h"
#include "action_intern.h"
+#include "GPU_immediate.h"
/* ************************************************************************* */
/* Channel List */
@@ -156,15 +157,12 @@ void draw_channel_strips(bAnimContext *ac, SpaceAction *saction, ARegion *ar)
{
ListBase anim_data = {NULL, NULL};
bAnimListElem *ale;
- int filter;
View2D *v2d = &ar->v2d;
bDopeSheet *ads = &saction->ads;
AnimData *adt = NULL;
float act_start, act_end, y;
- size_t items;
- int height;
unsigned char col1[3], col2[3];
unsigned char col1a[3], col2a[3];
@@ -194,10 +192,10 @@ void draw_channel_strips(bAnimContext *ac, SpaceAction *saction, ARegion *ar)
}
/* build list of channels to draw */
- filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_LIST_CHANNELS);
- items = ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
+ int filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_LIST_CHANNELS);
+ size_t items = ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
- height = ((items * ACHANNEL_STEP(ac)) + (ACHANNEL_HEIGHT(ac)));
+ int height = ((items * ACHANNEL_STEP(ac)) + (ACHANNEL_HEIGHT(ac)));
/* don't use totrect set, as the width stays the same
* (NOTE: this is ok here, the configuration is pretty straightforward)
*/
@@ -205,6 +203,12 @@ void draw_channel_strips(bAnimContext *ac, SpaceAction *saction, ARegion *ar)
/* first backdrop strips */
y = (float)(-ACHANNEL_HEIGHT(ac));
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
glEnable(GL_BLEND);
for (ale = anim_data.first; ale; ale = ale->next) {
@@ -223,28 +227,26 @@ void draw_channel_strips(bAnimContext *ac, SpaceAction *saction, ARegion *ar)
/* determine if channel is selected */
if (acf->has_setting(ac, ale, ACHANNEL_SETTING_SELECT))
sel = ANIM_channel_setting_get(ac, ale, ACHANNEL_SETTING_SELECT);
-
+
if (ELEM(ac->datatype, ANIMCONT_ACTION, ANIMCONT_DOPESHEET, ANIMCONT_SHAPEKEY)) {
switch (ale->type) {
case ANIMTYPE_SUMMARY:
{
/* reddish color from NLA */
- UI_ThemeColor4(TH_ANIM_ACTIVE);
+ immUniformThemeColor(TH_ANIM_ACTIVE);
break;
}
case ANIMTYPE_SCENE:
case ANIMTYPE_OBJECT:
{
- if (sel) glColor4ub(col1b[0], col1b[1], col1b[2], 0x45);
- else glColor4ub(col1b[0], col1b[1], col1b[2], 0x22);
+ immUniformColor3ubvAlpha(col1b, sel ? 0x45 : 0x22);
break;
}
case ANIMTYPE_FILLACTD:
case ANIMTYPE_DSSKEY:
case ANIMTYPE_DSWOR:
{
- if (sel) glColor4ub(col2b[0], col2b[1], col2b[2], 0x45);
- else glColor4ub(col2b[0], col2b[1], col2b[2], 0x22);
+ immUniformColor3ubvAlpha(col2b, sel ? 0x45 : 0x22);
break;
}
case ANIMTYPE_GROUP:
@@ -252,17 +254,14 @@ void draw_channel_strips(bAnimContext *ac, SpaceAction *saction, ARegion *ar)
bActionGroup *agrp = ale->data;
if (show_group_colors && agrp->customCol) {
if (sel) {
- unsigned char *cp = (unsigned char *)agrp->cs.select;
- glColor4ub(cp[0], cp[1], cp[2], 0x45);
+ immUniformColor3ubvAlpha((unsigned char *)agrp->cs.select, 0x45);
}
else {
- unsigned char *cp = (unsigned char *)agrp->cs.solid;
- glColor4ub(cp[0], cp[1], cp[2], 0x1D);
+ immUniformColor3ubvAlpha((unsigned char *)agrp->cs.solid, 0x1D);
}
}
else {
- if (sel) glColor4ub(col1a[0], col1a[1], col1a[2], 0x22);
- else glColor4ub(col2a[0], col2a[1], col2a[2], 0x22);
+ immUniformColor3ubvAlpha(sel ? col1a : col2a, 0x22);
}
break;
}
@@ -270,53 +269,43 @@ void draw_channel_strips(bAnimContext *ac, SpaceAction *saction, ARegion *ar)
{
FCurve *fcu = ale->data;
if (show_group_colors && fcu->grp && fcu->grp->customCol) {
- unsigned char *cp = (unsigned char *)fcu->grp->cs.active;
-
- if (sel) glColor4ub(cp[0], cp[1], cp[2], 0x65);
- else glColor4ub(cp[0], cp[1], cp[2], 0x0B);
+ immUniformColor3ubvAlpha((unsigned char *)fcu->grp->cs.active, sel ? 0x65 : 0x0B);
}
else {
- if (sel) glColor4ub(col1[0], col1[1], col1[2], 0x22);
- else glColor4ub(col2[0], col2[1], col2[2], 0x22);
+ immUniformColor3ubvAlpha(sel ? col1 : col2, 0x22);
}
break;
}
default:
{
- if (sel) glColor4ub(col1[0], col1[1], col1[2], 0x22);
- else glColor4ub(col2[0], col2[1], col2[2], 0x22);
- break;
+ immUniformColor3ubvAlpha(sel ? col1 : col2, 0x22);
}
}
/* draw region twice: firstly backdrop, then the current range */
- glRectf(v2d->cur.xmin, (float)y - ACHANNEL_HEIGHT_HALF(ac), v2d->cur.xmax + EXTRA_SCROLL_PAD, (float)y + ACHANNEL_HEIGHT_HALF(ac));
+ immRectf(pos, v2d->cur.xmin, (float)y - ACHANNEL_HEIGHT_HALF(ac), v2d->cur.xmax + EXTRA_SCROLL_PAD, (float)y + ACHANNEL_HEIGHT_HALF(ac));
if (ac->datatype == ANIMCONT_ACTION)
- glRectf(act_start, (float)y - ACHANNEL_HEIGHT_HALF(ac), act_end, (float)y + ACHANNEL_HEIGHT_HALF(ac));
+ immRectf(pos, act_start, (float)y - ACHANNEL_HEIGHT_HALF(ac), act_end, (float)y + ACHANNEL_HEIGHT_HALF(ac));
}
else if (ac->datatype == ANIMCONT_GPENCIL) {
/* frames less than one get less saturated background */
- if (sel) glColor4ub(col1[0], col1[1], col1[2], 0x22);
- else glColor4ub(col2[0], col2[1], col2[2], 0x22);
- glRectf(0.0f, (float)y - ACHANNEL_HEIGHT_HALF(ac), v2d->cur.xmin, (float)y + ACHANNEL_HEIGHT_HALF(ac));
+ immUniformColor3ubvAlpha(sel ? col1 : col2, 0x22);
+ immRectf(pos, 0.0f, (float)y - ACHANNEL_HEIGHT_HALF(ac), v2d->cur.xmin, (float)y + ACHANNEL_HEIGHT_HALF(ac));
/* frames one and higher get a saturated background */
- if (sel) glColor4ub(col1[0], col1[1], col1[2], 0x44);
- else glColor4ub(col2[0], col2[1], col2[2], 0x44);
- glRectf(v2d->cur.xmin, (float)y - ACHANNEL_HEIGHT_HALF(ac), v2d->cur.xmax + EXTRA_SCROLL_PAD, (float)y + ACHANNEL_HEIGHT_HALF(ac));
+ immUniformColor3ubvAlpha(sel ? col1 : col2, 0x44);
+ immRectf(pos, v2d->cur.xmin, (float)y - ACHANNEL_HEIGHT_HALF(ac), v2d->cur.xmax + EXTRA_SCROLL_PAD, (float)y + ACHANNEL_HEIGHT_HALF(ac));
}
else if (ac->datatype == ANIMCONT_MASK) {
/* TODO --- this is a copy of gpencil */
/* frames less than one get less saturated background */
- if (sel) glColor4ub(col1[0], col1[1], col1[2], 0x22);
- else glColor4ub(col2[0], col2[1], col2[2], 0x22);
- glRectf(0.0f, (float)y - ACHANNEL_HEIGHT_HALF(ac), v2d->cur.xmin, (float)y + ACHANNEL_HEIGHT_HALF(ac));
+ immUniformColor3ubvAlpha(sel ? col1 : col2, 0x22);
+ immRectf(pos, 0.0f, (float)y - ACHANNEL_HEIGHT_HALF(ac), v2d->cur.xmin, (float)y + ACHANNEL_HEIGHT_HALF(ac));
/* frames one and higher get a saturated background */
- if (sel) glColor4ub(col1[0], col1[1], col1[2], 0x44);
- else glColor4ub(col2[0], col2[1], col2[2], 0x44);
- glRectf(v2d->cur.xmin, (float)y - ACHANNEL_HEIGHT_HALF(ac), v2d->cur.xmax + EXTRA_SCROLL_PAD, (float)y + ACHANNEL_HEIGHT_HALF(ac));
+ immUniformColor3ubvAlpha(sel ? col1 : col2, 0x44);
+ immRectf(pos, v2d->cur.xmin, (float)y - ACHANNEL_HEIGHT_HALF(ac), v2d->cur.xmax + EXTRA_SCROLL_PAD, (float)y + ACHANNEL_HEIGHT_HALF(ac));
}
}
}
@@ -325,18 +314,29 @@ void draw_channel_strips(bAnimContext *ac, SpaceAction *saction, ARegion *ar)
y -= ACHANNEL_STEP(ac);
}
glDisable(GL_BLEND);
-
- /* Draw keyframes
+
+ /* black line marking 'current frame' for Time-Slide transform mode */
+ if (saction->flag & SACTION_MOVING) {
+ immUniformColor3f(0.0f, 0.0f, 0.0f);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2f(pos, saction->timeslide, v2d->cur.ymin - EXTRA_SCROLL_PAD);
+ immVertex2f(pos, saction->timeslide, v2d->cur.ymax);
+ immEnd();
+ }
+ immUnbindProgram();
+
+ /* Draw keyframes
* 1) Only channels that are visible in the Action Editor get drawn/evaluated.
* This is to try to optimize this for heavier data sets
* 2) Keyframes which are out of view horizontally are disregarded
*/
y = (float)(-ACHANNEL_HEIGHT(ac));
-
+
for (ale = anim_data.first; ale; ale = ale->next) {
const float yminc = (float)(y - ACHANNEL_HEIGHT_HALF(ac));
const float ymaxc = (float)(y + ACHANNEL_HEIGHT_HALF(ac));
-
+
/* check if visible */
if (IN_RANGE(yminc, v2d->cur.ymin, v2d->cur.ymax) ||
IN_RANGE(ymaxc, v2d->cur.ymin, v2d->cur.ymax) )
@@ -344,7 +344,7 @@ void draw_channel_strips(bAnimContext *ac, SpaceAction *saction, ARegion *ar)
/* check if anything to show for this channel */
if (ale->datatype != ALE_NONE) {
adt = ANIM_nla_mapping_get(ac, ale);
-
+
/* draw 'keyframes' for each specific datatype */
switch (ale->datatype) {
case ALE_ALL:
@@ -374,20 +374,10 @@ void draw_channel_strips(bAnimContext *ac, SpaceAction *saction, ARegion *ar)
}
}
}
-
+
y -= ACHANNEL_STEP(ac);
}
-
- /* free tempolary channels used for drawing */
- ANIM_animdata_freelist(&anim_data);
- /* black line marking 'current frame' for Time-Slide transform mode */
- if (saction->flag & SACTION_MOVING) {
- glColor3f(0.0f, 0.0f, 0.0f);
-
- glBegin(GL_LINES);
- glVertex2f(saction->timeslide, v2d->cur.ymin - EXTRA_SCROLL_PAD);
- glVertex2f(saction->timeslide, v2d->cur.ymax);
- glEnd();
- }
+ /* free temporary channels used for drawing */
+ ANIM_animdata_freelist(&anim_data);
}
diff --git a/source/blender/editors/space_action/space_action.c b/source/blender/editors/space_action/space_action.c
index 5cde224b7dc..50882571dad 100644
--- a/source/blender/editors/space_action/space_action.c
+++ b/source/blender/editors/space_action/space_action.c
@@ -308,7 +308,9 @@ static void action_header_region_draw(const bContext *C, ARegion *ar)
ED_region_header(C, ar);
}
-static void action_channel_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+static void action_channel_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar,
+ wmNotifier *wmn, const Scene *UNUSED(scene))
{
/* context changes */
switch (wmn->category) {
@@ -351,7 +353,9 @@ static void action_channel_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(
}
}
-static void action_main_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+static void action_main_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar,
+ wmNotifier *wmn, const Scene *UNUSED(scene))
{
/* context changes */
switch (wmn->category) {
@@ -391,7 +395,11 @@ static void action_main_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa)
if (wmn->action == NA_RENAME)
ED_region_tag_redraw(ar);
break;
-
+ case NC_SCREEN:
+ if (ELEM(wmn->data, ND_LAYER)) {
+ ED_region_tag_redraw(ar);
+ }
+ break;
default:
if (wmn->data == ND_KEYS)
ED_region_tag_redraw(ar);
@@ -400,7 +408,9 @@ static void action_main_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa)
}
/* editor level listener */
-static void action_listener(bScreen *UNUSED(sc), ScrArea *sa, wmNotifier *wmn)
+static void action_listener(
+ bScreen *UNUSED(sc), ScrArea *sa, wmNotifier *wmn, Scene *UNUSED(scene),
+ WorkSpace *UNUSED(workspace))
{
SpaceAction *saction = (SpaceAction *)sa->spacedata.first;
@@ -507,7 +517,9 @@ static void action_listener(bScreen *UNUSED(sc), ScrArea *sa, wmNotifier *wmn)
}
}
-static void action_header_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+static void action_header_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar,
+ wmNotifier *wmn, const Scene *UNUSED(scene))
{
// SpaceAction *saction = (SpaceAction *)sa->spacedata.first;
@@ -559,7 +571,9 @@ static void action_buttons_area_draw(const bContext *C, ARegion *ar)
ED_region_panels(C, ar, NULL, -1, true);
}
-static void action_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+static void action_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar,
+ wmNotifier *wmn, const Scene *UNUSED(scene))
{
/* context changes */
switch (wmn->category) {
diff --git a/source/blender/editors/space_api/spacetypes.c b/source/blender/editors/space_api/spacetypes.c
index ac6e3123e4e..e417026640e 100644
--- a/source/blender/editors/space_api/spacetypes.c
+++ b/source/blender/editors/space_api/spacetypes.c
@@ -55,6 +55,7 @@
#include "ED_paint.h"
#include "ED_physics.h"
#include "ED_render.h"
+#include "ED_scene.h"
#include "ED_screen.h"
#include "ED_sculpt.h"
#include "ED_space_api.h"
@@ -65,6 +66,7 @@
#include "ED_clip.h"
#include "ED_mask.h"
#include "ED_sequencer.h"
+#include "ED_manipulator_library.h"
#include "io_ops.h"
@@ -99,6 +101,8 @@ void ED_spacetypes_init(void)
// ...
/* register operator types for screen and all spaces */
+ ED_operatortypes_workspace();
+ ED_operatortypes_scene();
ED_operatortypes_screen();
ED_operatortypes_anim();
ED_operatortypes_animchannels();
@@ -121,12 +125,27 @@ void ED_spacetypes_init(void)
ED_operatortypes_view2d();
ED_operatortypes_ui();
-
- /* register operators */
+
+ /* manipulator types */
+ ED_manipulatortypes_button_2d();
+ ED_manipulatortypes_dial_3d();
+ ED_manipulatortypes_grab_3d();
+ ED_manipulatortypes_arrow_2d();
+ ED_manipulatortypes_arrow_3d();
+ ED_manipulatortypes_primitive_3d();
+ ED_manipulatortypes_cage_2d();
+ ED_manipulatortypes_cage_3d();
+
+ /* register types for operators and manipulators */
spacetypes = BKE_spacetypes_list();
for (type = spacetypes->first; type; type = type->next) {
- if (type->operatortypes)
+ /* init manipulator types first, operator-types need them */
+ if (type->manipulators) {
+ type->manipulators();
+ }
+ if (type->operatortypes) {
type->operatortypes();
+ }
}
/* register internal render callbacks */
@@ -251,7 +270,6 @@ void ED_region_draw_cb_draw(const bContext *C, ARegion *ar, int type)
for (rdc = ar->type->drawcalls.first; rdc; rdc = rdc->next) {
if (rdc->type == type) {
- UI_reinit_gl_state();
rdc->draw(C, ar, rdc->customdata);
}
}
diff --git a/source/blender/editors/space_buttons/CMakeLists.txt b/source/blender/editors/space_buttons/CMakeLists.txt
index 397d79e1dbe..ec866780122 100644
--- a/source/blender/editors/space_buttons/CMakeLists.txt
+++ b/source/blender/editors/space_buttons/CMakeLists.txt
@@ -23,6 +23,7 @@ set(INC
../../blenkernel
../../blenlib
../../blentranslation
+ ../../depsgraph
../../gpu
../../makesdna
../../makesrna
diff --git a/source/blender/editors/space_buttons/buttons_context.c b/source/blender/editors/space_buttons/buttons_context.c
index da3364d872d..ebb14d3caeb 100644
--- a/source/blender/editors/space_buttons/buttons_context.c
+++ b/source/blender/editors/space_buttons/buttons_context.c
@@ -39,6 +39,7 @@
#include "BLT_translation.h"
#include "DNA_armature_types.h"
+#include "DNA_group_types.h"
#include "DNA_lamp_types.h"
#include "DNA_material_types.h"
#include "DNA_node_types.h"
@@ -49,6 +50,7 @@
#include "BKE_context.h"
#include "BKE_action.h"
+#include "BKE_layer.h"
#include "BKE_material.h"
#include "BKE_modifier.h"
#include "BKE_paint.h"
@@ -56,9 +58,12 @@
#include "BKE_screen.h"
#include "BKE_texture.h"
#include "BKE_linestyle.h"
+#include "BKE_workspace.h"
#include "RNA_access.h"
+#include "DEG_depsgraph.h"
+
#include "ED_buttons.h"
#include "ED_armature.h"
#include "ED_screen.h"
@@ -167,27 +172,64 @@ static int buttons_context_path_linestyle(ButsContextPath *path)
return 0;
}
+static int buttons_context_path_workspace(ButsContextPath *path)
+{
+ PointerRNA *ptr = &path->ptr[path->len - 1];
+
+ /* This one just verifies. */
+ return RNA_struct_is_a(ptr->type, &RNA_WorkSpace);
+}
+
+static int buttons_context_path_collection(ButsContextPath *path, eSpaceButtons_Collection_Context collection_context)
+{
+ PointerRNA *ptr = &path->ptr[path->len - 1];
+
+ /* if we already have a (pinned) Collection, we're done */
+ if (RNA_struct_is_a(ptr->type, &RNA_LayerCollection)) {
+ return 1;
+ }
+
+ ViewLayer *view_layer = ptr->data;
+
+ if (collection_context == SB_COLLECTION_CTX_GROUP) {
+ Object *ob = OBACT(view_layer);
+ if (ob && ob->dup_group) {
+ view_layer = ob->dup_group->view_layer;
+
+ /* Replace the view layer by the group in the context path. */
+ RNA_pointer_create(NULL, &RNA_Group, ob->dup_group, &path->ptr[path->len - 1]);
+ }
+ }
+
+ LayerCollection *layer_collection = BKE_layer_collection_get_active(view_layer);
+
+ if (layer_collection) {
+ RNA_pointer_create(NULL, &RNA_LayerCollection, layer_collection, &path->ptr[path->len]);
+ path->len++;
+ return 1;
+ }
+
+ /* no path to a collection possible */
+ return 0;
+}
+
static int buttons_context_path_object(ButsContextPath *path)
{
- Scene *scene;
- Object *ob;
PointerRNA *ptr = &path->ptr[path->len - 1];
/* if we already have a (pinned) object, we're done */
if (RNA_struct_is_a(ptr->type, &RNA_Object)) {
return 1;
}
- /* if we have a scene, use the scene's active object */
- else if (buttons_context_path_scene(path)) {
- scene = path->ptr[path->len - 1].data;
- ob = (scene->basact) ? scene->basact->object : NULL;
- if (ob) {
- RNA_id_pointer_create(&ob->id, &path->ptr[path->len]);
- path->len++;
+ ViewLayer *view_layer = ptr->data;
+ Object *ob = (view_layer->basact) ? view_layer->basact->object : NULL;
- return 1;
- }
+ if (ob) {
+ RNA_id_pointer_create(&ob->id, &path->ptr[path->len]);
+ path->len++;
+
+ return 1;
}
/* no path to a object possible */
@@ -208,6 +250,7 @@ static int buttons_context_path_data(ButsContextPath *path, int type)
else if (RNA_struct_is_a(ptr->type, &RNA_Camera) && (type == -1 || type == OB_CAMERA)) return 1;
else if (RNA_struct_is_a(ptr->type, &RNA_Lamp) && (type == -1 || type == OB_LAMP)) return 1;
else if (RNA_struct_is_a(ptr->type, &RNA_Speaker) && (type == -1 || type == OB_SPEAKER)) return 1;
+ else if (RNA_struct_is_a(ptr->type, &RNA_LightProbe) && (type == -1 || type == OB_LIGHTPROBE)) return 1;
/* try to get an object in the path, no pinning supported here */
else if (buttons_context_path_object(path)) {
ob = path->ptr[path->len - 1].data;
@@ -367,7 +410,7 @@ static int buttons_context_path_particle(ButsContextPath *path)
return 0;
}
-static int buttons_context_path_brush(ButsContextPath *path)
+static int buttons_context_path_brush(const bContext *C, ButsContextPath *path)
{
Scene *scene;
Brush *br = NULL;
@@ -381,8 +424,11 @@ static int buttons_context_path_brush(ButsContextPath *path)
else if (buttons_context_path_scene(path)) {
scene = path->ptr[path->len - 1].data;
- if (scene)
- br = BKE_paint_brush(BKE_paint_get_active(scene));
+ if (scene) {
+ const WorkSpace *workspace = CTX_wm_workspace(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ br = BKE_paint_brush(BKE_paint_get_active(scene, view_layer, workspace->object_mode));
+ }
if (br) {
RNA_id_pointer_create((ID *)br, &path->ptr[path->len]);
@@ -396,7 +442,7 @@ static int buttons_context_path_brush(ButsContextPath *path)
return 0;
}
-static int buttons_context_path_texture(ButsContextPath *path, ButsContextTexture *ct)
+static int buttons_context_path_texture(const bContext *C, ButsContextPath *path, ButsContextTexture *ct)
{
if (ct) {
/* new shading system */
@@ -414,7 +460,7 @@ static int buttons_context_path_texture(ButsContextPath *path, ButsContextTextur
if (id) {
if (GS(id->name) == ID_BR)
- buttons_context_path_brush(path);
+ buttons_context_path_brush(C, path);
else if (GS(id->name) == ID_MA)
buttons_context_path_material(path, false, true);
else if (GS(id->name) == ID_WO)
@@ -530,7 +576,7 @@ static int buttons_context_path_texture(ButsContextPath *path, ButsContextTextur
static bool buttons_context_linestyle_pinnable(const bContext *C)
{
Scene *scene = CTX_data_scene(C);
- SceneRenderLayer *actsrl;
+ ViewLayer *active_view_layer;
FreestyleConfig *config;
SpaceButs *sbuts;
@@ -539,8 +585,8 @@ static bool buttons_context_linestyle_pinnable(const bContext *C)
return false;
}
/* if Freestyle is not in the Parameter Editor mode */
- actsrl = BLI_findlink(&scene->r.layers, scene->r.actlay);
- config = &actsrl->freestyleConfig;
+ active_view_layer = BLI_findlink(&scene->view_layers, scene->active_view_layer);
+ config = &active_view_layer->freestyle_config;
if (config->mode != FREESTYLE_CONTROL_EDITOR_MODE) {
return false;
}
@@ -556,6 +602,8 @@ static bool buttons_context_linestyle_pinnable(const bContext *C)
static int buttons_context_path(const bContext *C, ButsContextPath *path, int mainb, int flag)
{
SpaceButs *sbuts = CTX_wm_space_buts(C);
+ Scene *scene = CTX_data_scene(C);
+ WorkSpace *workspace = CTX_wm_workspace(C);
ID *id;
int found;
@@ -563,18 +611,32 @@ static int buttons_context_path(const bContext *C, ButsContextPath *path, int ma
path->flag = flag;
path->tex_ctx = sbuts->texture_context;
- /* if some ID datablock is pinned, set the root pointer */
+ const bool use_scene_settings = BKE_workspace_use_scene_settings_get(workspace);
+
+ /* If some ID datablock is pinned, set the root pointer. */
if (sbuts->pinid) {
id = sbuts->pinid;
RNA_id_pointer_create(id, &path->ptr[0]);
path->len++;
}
+ /* No pinned root, use scene or workspace as initial root. */
+ else {
+ if ((mainb != BCONTEXT_WORKSPACE) && (use_scene_settings ||
+ ELEM(mainb, BCONTEXT_SCENE, BCONTEXT_RENDER, BCONTEXT_VIEW_LAYER, BCONTEXT_WORLD)))
+ {
+ RNA_id_pointer_create(&scene->id, &path->ptr[0]);
+ path->len++;
+ }
+ else {
+ RNA_id_pointer_create(&workspace->id, &path->ptr[0]);
+ path->len++;
+ }
+ }
- /* no pinned root, use scene as root */
- if (path->len == 0) {
- id = (ID *)CTX_data_scene(C);
- RNA_id_pointer_create(id, &path->ptr[0]);
+ if (!ELEM(mainb, BCONTEXT_WORKSPACE, BCONTEXT_SCENE, BCONTEXT_RENDER, BCONTEXT_VIEW_LAYER, BCONTEXT_WORLD)) {
+ ViewLayer *view_layer = BKE_view_layer_from_workspace_get(scene, workspace);
+ RNA_pointer_create(NULL, &RNA_ViewLayer, view_layer, &path->ptr[path->len]);
path->len++;
}
@@ -585,7 +647,7 @@ static int buttons_context_path(const bContext *C, ButsContextPath *path, int ma
case BCONTEXT_RENDER:
found = buttons_context_path_scene(path);
break;
- case BCONTEXT_RENDER_LAYER:
+ case BCONTEXT_VIEW_LAYER:
#ifdef WITH_FREESTYLE
if (buttons_context_linestyle_pinnable(C)) {
found = buttons_context_path_linestyle(path);
@@ -599,6 +661,12 @@ static int buttons_context_path(const bContext *C, ButsContextPath *path, int ma
case BCONTEXT_WORLD:
found = buttons_context_path_world(path);
break;
+ case BCONTEXT_WORKSPACE:
+ found = buttons_context_path_workspace(path);
+ break;
+ case BCONTEXT_COLLECTION:
+ found = buttons_context_path_collection(path, sbuts->collection_context);
+ break;
case BCONTEXT_OBJECT:
case BCONTEXT_PHYSICS:
case BCONTEXT_CONSTRAINT:
@@ -617,7 +685,7 @@ static int buttons_context_path(const bContext *C, ButsContextPath *path, int ma
found = buttons_context_path_material(path, false, (sbuts->texuser != NULL));
break;
case BCONTEXT_TEXTURE:
- found = buttons_context_path_texture(path, sbuts->texuser);
+ found = buttons_context_path_texture(C, path, sbuts->texuser);
break;
case BCONTEXT_BONE:
found = buttons_context_path_bone(path);
@@ -740,11 +808,11 @@ void buttons_context_compute(const bContext *C, SpaceButs *sbuts)
const char *buttons_context_dir[] = {
"texture_slot", "scene", "world", "object", "mesh", "armature", "lattice", "curve",
- "meta_ball", "lamp", "speaker", "camera", "material", "material_slot",
+ "meta_ball", "lamp", "speaker", "lightprobe", "camera", "material", "material_slot",
"texture", "texture_user", "texture_user_property", "bone", "edit_bone",
"pose_bone", "particle_system", "particle_system_editable", "particle_settings",
"cloth", "soft_body", "fluid", "smoke", "collision", "brush", "dynamic_paint",
- "line_style", NULL
+ "line_style", "collection", "workspace", NULL
};
int buttons_context(const bContext *C, const char *member, bContextDataResult *result)
@@ -773,6 +841,10 @@ int buttons_context(const bContext *C, const char *member, bContextDataResult *r
set_pointer_type(path, result, &RNA_World);
return 1;
}
+ else if (CTX_data_equals(member, "workspace")) {
+ /* Do not return one here if scene not found in path, in this case we want to get default context scene! */
+ return set_pointer_type(path, result, &RNA_WorkSpace);
+ }
else if (CTX_data_equals(member, "object")) {
set_pointer_type(path, result, &RNA_Object);
return 1;
@@ -809,6 +881,10 @@ int buttons_context(const bContext *C, const char *member, bContextDataResult *r
set_pointer_type(path, result, &RNA_Speaker);
return 1;
}
+ else if (CTX_data_equals(member, "lightprobe")) {
+ set_pointer_type(path, result, &RNA_LightProbe);
+ return 1;
+ }
else if (CTX_data_equals(member, "material")) {
set_pointer_type(path, result, &RNA_Material);
return 1;
@@ -1064,6 +1140,10 @@ int buttons_context(const bContext *C, const char *member, bContextDataResult *r
set_pointer_type(path, result, &RNA_FreestyleLineStyle);
return 1;
}
+ else if (CTX_data_equals(member, "collection")) {
+ set_pointer_type(path, result, &RNA_LayerCollection);
+ return 1;
+ }
else {
return 0; /* not found */
}
@@ -1121,10 +1201,14 @@ void buttons_context_draw(const bContext *C, uiLayout *layout)
name = RNA_struct_name_get_alloc(ptr, namebuf, sizeof(namebuf), NULL);
if (name) {
- if (!ELEM(sbuts->mainb, BCONTEXT_RENDER, BCONTEXT_SCENE, BCONTEXT_RENDER_LAYER) && ptr->type == &RNA_Scene)
+ if ((!ELEM(sbuts->mainb, BCONTEXT_RENDER, BCONTEXT_SCENE, BCONTEXT_VIEW_LAYER) && ptr->type == &RNA_Scene) ||
+ (!ELEM(sbuts->mainb, BCONTEXT_WORKSPACE) && ptr->type == &RNA_WorkSpace))
+ {
uiItemLDrag(row, ptr, "", icon); /* save some space */
- else
+ }
+ else {
uiItemLDrag(row, ptr, name, icon);
+ }
if (name != namebuf)
MEM_freeN(name);
diff --git a/source/blender/editors/space_buttons/buttons_intern.h b/source/blender/editors/space_buttons/buttons_intern.h
index 7fc35a6b1e7..e6d19caad47 100644
--- a/source/blender/editors/space_buttons/buttons_intern.h
+++ b/source/blender/editors/space_buttons/buttons_intern.h
@@ -65,6 +65,7 @@ typedef struct ButsContextPath {
int len;
int flag;
int tex_ctx;
+ int collection_ctx;
} ButsContextPath;
typedef struct ButsTextureUser {
diff --git a/source/blender/editors/space_buttons/buttons_texture.c b/source/blender/editors/space_buttons/buttons_texture.c
index 3c48f3c1111..d0e69a3dd7e 100644
--- a/source/blender/editors/space_buttons/buttons_texture.c
+++ b/source/blender/editors/space_buttons/buttons_texture.c
@@ -54,6 +54,7 @@
#include "DNA_linestyle_types.h"
#include "BKE_context.h"
+#include "BKE_layer.h"
#include "BKE_linestyle.h"
#include "BKE_material.h"
#include "BKE_modifier.h"
@@ -108,14 +109,14 @@ bool ED_texture_context_check_linestyle(const bContext *C)
{
#ifdef WITH_FREESTYLE
Scene *scene = CTX_data_scene(C);
- SceneRenderLayer *actsrl;
+ ViewLayer *active_view_layer;
FreestyleConfig *config;
FreestyleLineSet *lineset;
FreestyleLineStyle *linestyle;
if (scene && (scene->r.mode & R_EDGE_FRS)) {
- actsrl = BLI_findlink(&scene->r.layers, scene->r.actlay);
- config = &actsrl->freestyleConfig;
+ active_view_layer = BLI_findlink(&scene->view_layers, scene->active_view_layer);
+ config = &active_view_layer->freestyle_config;
if (config->mode == FREESTYLE_CONTROL_EDITOR_MODE) {
lineset = BKE_freestyle_lineset_get_active(config);
if (lineset) {
@@ -195,7 +196,7 @@ static void set_texture_context(const bContext *C, SpaceButs *sbuts)
else if ((sbuts->mainb == BCONTEXT_PARTICLE) && valid_particles) {
sbuts->texture_context = sbuts->texture_context_prev = SB_TEXC_PARTICLES;
}
- else if ((sbuts->mainb == BCONTEXT_RENDER_LAYER) && valid_linestyle) {
+ else if ((sbuts->mainb == BCONTEXT_VIEW_LAYER) && valid_linestyle) {
sbuts->texture_context = sbuts->texture_context_prev = SB_TEXC_LINESTYLE;
}
else if ((ELEM(sbuts->mainb, BCONTEXT_MODIFIER, BCONTEXT_PHYSICS)) && valid_others) {
@@ -324,6 +325,7 @@ static void buttons_texture_users_from_context(ListBase *users, const bContext *
Material *ma = NULL;
Lamp *la = NULL;
World *wrld = NULL;
+ WorkSpace *workspace = NULL;
FreestyleLineStyle *linestyle = NULL;
Brush *brush = NULL;
ID *pinid = sbuts->pinid;
@@ -345,17 +347,25 @@ static void buttons_texture_users_from_context(ListBase *users, const bContext *
brush = (Brush *)pinid;
else if (GS(pinid->name) == ID_LS)
linestyle = (FreestyleLineStyle *)pinid;
+ else if (GS(pinid->name) == ID_WS)
+ workspace = (WorkSpace *)workspace;
}
if (!scene)
scene = CTX_data_scene(C);
if (!pinid || GS(pinid->name) == ID_SCE) {
- ob = (scene->basact) ? scene->basact->object : NULL;
wrld = scene->world;
brush = BKE_paint_brush(BKE_paint_get_active_from_context(C));
linestyle = BKE_linestyle_active_from_scene(scene);
}
+ else if (!pinid || GS(pinid->name) == ID_WS) {
+ if (!workspace) {
+ workspace = CTX_wm_workspace(C);
+ }
+ ViewLayer *view_layer = BKE_view_layer_from_workspace_get(scene, workspace);
+ ob = OBACT(view_layer);
+ }
if (ob && ob->type == OB_LAMP && !la)
la = ob->data;
diff --git a/source/blender/editors/space_buttons/space_buttons.c b/source/blender/editors/space_buttons/space_buttons.c
index e4c23ad74f8..179780bf517 100644
--- a/source/blender/editors/space_buttons/space_buttons.c
+++ b/source/blender/editors/space_buttons/space_buttons.c
@@ -44,6 +44,7 @@
#include "WM_api.h"
#include "WM_types.h"
+#include "WM_message.h"
#include "RNA_access.h"
@@ -147,10 +148,14 @@ static void buttons_main_region_draw(const bContext *C, ARegion *ar)
ED_region_panels(C, ar, "scene", sbuts->mainb, vertical);
else if (sbuts->mainb == BCONTEXT_RENDER)
ED_region_panels(C, ar, "render", sbuts->mainb, vertical);
- else if (sbuts->mainb == BCONTEXT_RENDER_LAYER)
- ED_region_panels(C, ar, "render_layer", sbuts->mainb, vertical);
+ else if (sbuts->mainb == BCONTEXT_VIEW_LAYER)
+ ED_region_panels(C, ar, "view_layer", sbuts->mainb, vertical);
else if (sbuts->mainb == BCONTEXT_WORLD)
ED_region_panels(C, ar, "world", sbuts->mainb, vertical);
+ else if (sbuts->mainb == BCONTEXT_WORKSPACE)
+ ED_region_panels(C, ar, "workspace", sbuts->mainb, vertical);
+ else if (sbuts->mainb == BCONTEXT_COLLECTION)
+ ED_region_panels(C, ar, "collection", sbuts->mainb, vertical);
else if (sbuts->mainb == BCONTEXT_OBJECT)
ED_region_panels(C, ar, "object", sbuts->mainb, vertical);
else if (sbuts->mainb == BCONTEXT_DATA)
@@ -176,6 +181,20 @@ static void buttons_main_region_draw(const bContext *C, ARegion *ar)
sbuts->mainbo = sbuts->mainb;
}
+static void buttons_main_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn,
+ const Scene *UNUSED(scene))
+{
+ /* context changes */
+ switch (wmn->category) {
+ case NC_SCREEN:
+ if (ELEM(wmn->data, ND_LAYER)) {
+ ED_region_tag_redraw(ar);
+ }
+ break;
+ }
+}
+
static void buttons_operatortypes(void)
{
WM_operatortype_append(BUTTONS_OT_toolbox);
@@ -206,6 +225,28 @@ static void buttons_header_region_draw(const bContext *C, ARegion *ar)
ED_region_header(C, ar);
}
+static void buttons_header_region_message_subscribe(
+ const bContext *UNUSED(C),
+ WorkSpace *UNUSED(workspace), Scene *UNUSED(scene),
+ bScreen *UNUSED(screen), ScrArea *sa, ARegion *ar,
+ struct wmMsgBus *mbus)
+{
+ SpaceButs *sbuts = sa->spacedata.first;
+ wmMsgSubscribeValue msg_sub_value_region_tag_redraw = {
+ .owner = ar,
+ .user_data = ar,
+ .notify = ED_region_do_msg_notify_tag_redraw,
+ };
+
+ /* Don't check for SpaceButs.mainb here, we may toggle between view-layers
+ * where one has no active object, so that available contexts changes. */
+ WM_msg_subscribe_rna_anon_prop(mbus, Window, view_layer, &msg_sub_value_region_tag_redraw);
+
+ if (!ELEM(sbuts->mainb, BCONTEXT_RENDER, BCONTEXT_SCENE, BCONTEXT_WORLD)) {
+ WM_msg_subscribe_rna_anon_prop(mbus, ViewLayer, name, &msg_sub_value_region_tag_redraw);
+ }
+}
+
/* draw a certain button set only if properties area is currently
* showing that button set, to reduce unnecessary drawing. */
static void buttons_area_redraw(ScrArea *sa, short buttons)
@@ -218,7 +259,9 @@ static void buttons_area_redraw(ScrArea *sa, short buttons)
}
/* reused! */
-static void buttons_area_listener(bScreen *UNUSED(sc), ScrArea *sa, wmNotifier *wmn)
+static void buttons_area_listener(
+ bScreen *UNUSED(sc), ScrArea *sa, wmNotifier *wmn, Scene *UNUSED(scene),
+ WorkSpace *UNUSED(workspace))
{
SpaceButs *sbuts = sa->spacedata.first;
@@ -228,7 +271,7 @@ static void buttons_area_listener(bScreen *UNUSED(sc), ScrArea *sa, wmNotifier *
switch (wmn->data) {
case ND_RENDER_OPTIONS:
buttons_area_redraw(sa, BCONTEXT_RENDER);
- buttons_area_redraw(sa, BCONTEXT_RENDER_LAYER);
+ buttons_area_redraw(sa, BCONTEXT_VIEW_LAYER);
break;
case ND_WORLD:
buttons_area_redraw(sa, BCONTEXT_WORLD);
@@ -468,6 +511,7 @@ void ED_spacetype_buttons(void)
art->regionid = RGN_TYPE_WINDOW;
art->init = buttons_main_region_init;
art->draw = buttons_main_region_draw;
+ art->listener = buttons_main_region_listener;
art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_FRAMES;
BLI_addhead(&st->regiontypes, art);
@@ -481,6 +525,7 @@ void ED_spacetype_buttons(void)
art->init = buttons_header_region_init;
art->draw = buttons_header_region_draw;
+ art->message_subscribe = buttons_header_region_message_subscribe;
BLI_addhead(&st->regiontypes, art);
BKE_spacetype_register(st);
diff --git a/source/blender/editors/space_clip/CMakeLists.txt b/source/blender/editors/space_clip/CMakeLists.txt
index 32d48c9c564..8fa4a0de53f 100644
--- a/source/blender/editors/space_clip/CMakeLists.txt
+++ b/source/blender/editors/space_clip/CMakeLists.txt
@@ -27,6 +27,7 @@ set(INC
../../blenkernel
../../blenlib
../../blentranslation
+ ../../depsgraph
../../imbuf
../../gpu
../../makesdna
diff --git a/source/blender/editors/space_clip/clip_buttons.c b/source/blender/editors/space_clip/clip_buttons.c
index ec8e4a881e1..469d94fed3a 100644
--- a/source/blender/editors/space_clip/clip_buttons.c
+++ b/source/blender/editors/space_clip/clip_buttons.c
@@ -47,11 +47,12 @@
#include "BLT_translation.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_screen.h"
#include "BKE_movieclip.h"
#include "BKE_tracking.h"
+#include "DEG_depsgraph.h"
+
#include "ED_gpencil.h"
#include "UI_interface.h"
@@ -236,7 +237,7 @@ static void marker_block_handler(bContext *C, void *arg_cb, int event)
marker->pos[1] = cb->marker_pos[1] / height;
/* to update position of "parented" objects */
- DAG_id_tag_update(&cb->clip->id, 0);
+ DEG_id_tag_update(&cb->clip->id, 0);
WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, NULL);
ok = true;
@@ -321,7 +322,7 @@ static void marker_block_handler(bContext *C, void *arg_cb, int event)
sub_v2_v2(cb->track->markers[i].pos, delta);
/* to update position of "parented" objects */
- DAG_id_tag_update(&cb->clip->id, 0);
+ DEG_id_tag_update(&cb->clip->id, 0);
WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, NULL);
ok = true;
diff --git a/source/blender/editors/space_clip/clip_dopesheet_draw.c b/source/blender/editors/space_clip/clip_dopesheet_draw.c
index 4bf4c1e7baa..631d891ce02 100644
--- a/source/blender/editors/space_clip/clip_dopesheet_draw.c
+++ b/source/blender/editors/space_clip/clip_dopesheet_draw.c
@@ -42,8 +42,6 @@
#include "ED_screen.h"
#include "ED_clip.h"
-#include "BIF_gl.h"
-
#include "WM_types.h"
#include "UI_interface.h"
@@ -54,6 +52,9 @@
#include "RNA_access.h"
+#include "GPU_draw.h"
+#include "GPU_immediate.h"
+
#include "clip_intern.h" /* own include */
static void track_channel_color(MovieTrackingTrack *track, float default_color[3], float color[3])
@@ -72,78 +73,25 @@ static void track_channel_color(MovieTrackingTrack *track, float default_color[3
}
}
-static void draw_keyframe_shape(float x, float y, float xscale, float yscale, bool sel, float alpha)
+static void draw_keyframe_shape(float x, float y, bool sel, float alpha,
+ unsigned int pos_id, unsigned int color_id)
{
- /* coordinates for diamond shape */
- static const float _unit_diamond_shape[4][2] = {
- {0.0f, 1.0f}, /* top vert */
- {1.0f, 0.0f}, /* mid-right */
- {0.0f, -1.0f}, /* bottom vert */
- {-1.0f, 0.0f} /* mid-left */
- };
- static GLuint displist1 = 0;
- static GLuint displist2 = 0;
- int hsize = STRIP_HEIGHT_HALF;
-
- /* initialize 2 display lists for diamond shape - one empty, one filled */
- if (displist1 == 0) {
- displist1 = glGenLists(1);
- glNewList(displist1, GL_COMPILE);
-
- glBegin(GL_LINE_LOOP);
- glVertex2fv(_unit_diamond_shape[0]);
- glVertex2fv(_unit_diamond_shape[1]);
- glVertex2fv(_unit_diamond_shape[2]);
- glVertex2fv(_unit_diamond_shape[3]);
- glEnd();
- glEndList();
+ float color[4] = { 0.91f, 0.91f, 0.91f, alpha };
+ if (sel) {
+ UI_GetThemeColorShadeAlpha4fv(TH_STRIP_SELECT, 50, -255 * (1.0f - alpha), color);
}
- if (displist2 == 0) {
- displist2 = glGenLists(1);
- glNewList(displist2, GL_COMPILE);
-
- glBegin(GL_QUADS);
- glVertex2fv(_unit_diamond_shape[0]);
- glVertex2fv(_unit_diamond_shape[1]);
- glVertex2fv(_unit_diamond_shape[2]);
- glVertex2fv(_unit_diamond_shape[3]);
- glEnd();
- glEndList();
- }
-
- glPushMatrix();
-
- /* adjust view transform before starting */
- glTranslatef(x, y, 0.0f);
- glScalef(1.0f / xscale * hsize, 1.0f / yscale * hsize, 1.0f);
-
- /* anti-aliased lines for more consistent appearance */
- glEnable(GL_LINE_SMOOTH);
-
- if (sel)
- UI_ThemeColorShadeAlpha(TH_STRIP_SELECT, 50, -255 * (1.0f - alpha));
- else
- glColor4f(0.91f, 0.91f, 0.91f, alpha);
-
- glCallList(displist2);
- /* exterior - black frame */
- glColor4f(0.0f, 0.0f, 0.0f, alpha);
- glCallList(displist1);
-
- glDisable(GL_LINE_SMOOTH);
-
- /* restore view transform */
- glPopMatrix();
+ immAttrib4fv(color_id, color);
+ immVertex2f(pos_id, x, y);
}
-static void clip_draw_dopesheet_background(ARegion *ar, MovieClip *clip)
+static void clip_draw_dopesheet_background(ARegion *ar, MovieClip *clip, unsigned int pos_id)
{
View2D *v2d = &ar->v2d;
MovieTracking *tracking = &clip->tracking;
MovieTrackingDopesheet *dopesheet = &tracking->dopesheet;
MovieTrackingDopesheetCoverageSegment *coverage_segment;
-
+
for (coverage_segment = dopesheet->coverage_segments.first;
coverage_segment;
coverage_segment = coverage_segment->next)
@@ -153,12 +101,13 @@ static void clip_draw_dopesheet_background(ARegion *ar, MovieClip *clip)
int end_frame = BKE_movieclip_remap_clip_to_scene_frame(clip, coverage_segment->end_frame);
if (coverage_segment->coverage == TRACKING_COVERAGE_BAD) {
- glColor4f(1.0f, 0.0f, 0.0f, 0.07f);
+ immUniformColor4f(1.0f, 0.0f, 0.0f, 0.07f);
+ }
+ else {
+ immUniformColor4f(1.0f, 1.0f, 0.0f, 0.07f);
}
- else
- glColor4f(1.0f, 1.0f, 0.0f, 0.07f);
- glRectf(start_frame, v2d->cur.ymin, end_frame, v2d->cur.ymax);
+ immRectf(pos_id, start_frame, v2d->cur.ymin, end_frame, v2d->cur.ymax);
}
}
}
@@ -175,18 +124,21 @@ void clip_draw_dopesheet_main(SpaceClip *sc, ARegion *ar, Scene *scene)
MovieTracking *tracking = &clip->tracking;
MovieTrackingDopesheet *dopesheet = &tracking->dopesheet;
MovieTrackingDopesheetChannel *channel;
- float y, xscale, yscale;
float strip[4], selected_strip[4];
float height = (dopesheet->tot_channel * CHANNEL_STEP) + (CHANNEL_HEIGHT);
+ unsigned int keyframe_ct = 0;
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos_id = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
/* don't use totrect set, as the width stays the same
* (NOTE: this is ok here, the configuration is pretty straightforward)
*/
v2d->tot.ymin = (float)(-height);
- y = (float) CHANNEL_FIRST;
-
- UI_view2d_scale_get(v2d, &xscale, &yscale);
+ float y = (float) CHANNEL_FIRST;
/* setup colors for regular and selected strips */
UI_GetThemeColor3fv(TH_STRIP, strip);
@@ -197,7 +149,7 @@ void clip_draw_dopesheet_main(SpaceClip *sc, ARegion *ar, Scene *scene)
glEnable(GL_BLEND);
- clip_draw_dopesheet_background(ar, clip);
+ clip_draw_dopesheet_background(ar, clip, pos_id);
for (channel = dopesheet->channels.first; channel; channel = channel->next) {
float yminc = (float) (y - CHANNEL_HEIGHT_HALF);
@@ -208,7 +160,6 @@ void clip_draw_dopesheet_main(SpaceClip *sc, ARegion *ar, Scene *scene)
IN_RANGE(ymaxc, v2d->cur.ymin, v2d->cur.ymax))
{
MovieTrackingTrack *track = channel->track;
- float alpha;
int i;
bool sel = (track->flag & TRACK_DOPE_SEL) != 0;
@@ -218,32 +169,26 @@ void clip_draw_dopesheet_main(SpaceClip *sc, ARegion *ar, Scene *scene)
float default_color[4] = {0.8f, 0.93f, 0.8f, 0.3f};
track_channel_color(track, default_color, color);
- glColor4fv(color);
+ immUniformColor4fv(color);
- glRectf(v2d->cur.xmin, (float) y - CHANNEL_HEIGHT_HALF,
- v2d->cur.xmax + EXTRA_SCROLL_PAD, (float) y + CHANNEL_HEIGHT_HALF);
+ immRectf(pos_id, v2d->cur.xmin, (float) y - CHANNEL_HEIGHT_HALF,
+ v2d->cur.xmax + EXTRA_SCROLL_PAD, (float) y + CHANNEL_HEIGHT_HALF);
}
- alpha = (track->flag & TRACK_LOCKED) ? 0.5f : 1.0f;
-
/* tracked segments */
for (i = 0; i < channel->tot_segment; i++) {
int start_frame = BKE_movieclip_remap_clip_to_scene_frame(clip, channel->segments[2 * i]);
int end_frame = BKE_movieclip_remap_clip_to_scene_frame(clip, channel->segments[2 * i + 1]);
- if (sel)
- glColor4fv(selected_strip);
- else
- glColor4fv(strip);
+ immUniformColor4fv(sel ? selected_strip : strip);
if (start_frame != end_frame) {
- glRectf(start_frame, (float) y - STRIP_HEIGHT_HALF,
- end_frame, (float) y + STRIP_HEIGHT_HALF);
- draw_keyframe_shape(start_frame, y, xscale, yscale, sel, alpha);
- draw_keyframe_shape(end_frame, y, xscale, yscale, sel, alpha);
+ immRectf(pos_id, start_frame, (float) y - STRIP_HEIGHT_HALF,
+ end_frame, (float) y + STRIP_HEIGHT_HALF);
+ keyframe_ct += 2;
}
else {
- draw_keyframe_shape(start_frame, y, xscale, yscale, sel, alpha);
+ keyframe_ct++;
}
}
@@ -253,9 +198,7 @@ void clip_draw_dopesheet_main(SpaceClip *sc, ARegion *ar, Scene *scene)
MovieTrackingMarker *marker = &track->markers[i];
if ((marker->flag & (MARKER_DISABLED | MARKER_TRACKED)) == 0) {
- int framenr = BKE_movieclip_remap_clip_to_scene_frame(clip, marker->framenr);
-
- draw_keyframe_shape(framenr, y, xscale, yscale, sel, alpha);
+ keyframe_ct++;
}
i++;
@@ -266,6 +209,76 @@ void clip_draw_dopesheet_main(SpaceClip *sc, ARegion *ar, Scene *scene)
y -= CHANNEL_STEP;
}
+ immUnbindProgram();
+
+ if (keyframe_ct > 0) {
+ /* draw keyframe markers */
+ format = immVertexFormat();
+ pos_id = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int size_id = GWN_vertformat_attr_add(format, "size", GWN_COMP_F32, 1, GWN_FETCH_FLOAT);
+ unsigned int color_id = GWN_vertformat_attr_add(format, "color", GWN_COMP_F32, 4, GWN_FETCH_FLOAT);
+ unsigned int outline_color_id = GWN_vertformat_attr_add(format, "outlineColor", GWN_COMP_U8, 4, GWN_FETCH_INT_TO_FLOAT_UNIT);
+
+ immBindBuiltinProgram(GPU_SHADER_KEYFRAME_DIAMOND);
+ GPU_enable_program_point_size();
+ immBegin(GWN_PRIM_POINTS, keyframe_ct);
+
+ /* all same size with black outline */
+ immAttrib1f(size_id, 2.0f * STRIP_HEIGHT_HALF);
+ immAttrib4ub(outline_color_id, 0, 0, 0, 255);
+
+ y = (float) CHANNEL_FIRST; /* start again at the top */
+ for (channel = dopesheet->channels.first; channel; channel = channel->next) {
+ float yminc = (float) (y - CHANNEL_HEIGHT_HALF);
+ float ymaxc = (float) (y + CHANNEL_HEIGHT_HALF);
+
+ /* check if visible */
+ if (IN_RANGE(yminc, v2d->cur.ymin, v2d->cur.ymax) ||
+ IN_RANGE(ymaxc, v2d->cur.ymin, v2d->cur.ymax))
+ {
+ MovieTrackingTrack *track = channel->track;
+ int i;
+ bool sel = (track->flag & TRACK_DOPE_SEL) != 0;
+ float alpha = (track->flag & TRACK_LOCKED) ? 0.5f : 1.0f;
+
+ /* tracked segments */
+ for (i = 0; i < channel->tot_segment; i++) {
+ int start_frame = BKE_movieclip_remap_clip_to_scene_frame(clip, channel->segments[2 * i]);
+ int end_frame = BKE_movieclip_remap_clip_to_scene_frame(clip, channel->segments[2 * i + 1]);
+
+ if (start_frame != end_frame) {
+ draw_keyframe_shape(start_frame, y, sel, alpha, pos_id, color_id);
+ draw_keyframe_shape(end_frame, y, sel, alpha, pos_id, color_id);
+ }
+ else {
+ draw_keyframe_shape(start_frame, y, sel, alpha, pos_id, color_id);
+ }
+ }
+
+ /* keyframes */
+ i = 0;
+ while (i < track->markersnr) {
+ MovieTrackingMarker *marker = &track->markers[i];
+
+ if ((marker->flag & (MARKER_DISABLED | MARKER_TRACKED)) == 0) {
+ int framenr = BKE_movieclip_remap_clip_to_scene_frame(clip, marker->framenr);
+
+ draw_keyframe_shape(framenr, y, sel, alpha, pos_id, color_id);
+ }
+
+ i++;
+ }
+ }
+
+ /* adjust y-position for next one */
+ y -= CHANNEL_STEP;
+ }
+
+ immEnd();
+ GPU_disable_program_point_size();
+ immUnbindProgram();
+ }
+
glDisable(GL_BLEND);
}
@@ -279,22 +292,15 @@ void clip_draw_dopesheet_channels(const bContext *C, ARegion *ar)
SpaceClip *sc = CTX_wm_space_clip(C);
View2D *v2d = &ar->v2d;
MovieClip *clip = ED_space_clip_get_clip(sc);
- MovieTracking *tracking;
- MovieTrackingDopesheet *dopesheet;
- MovieTrackingDopesheetChannel *channel;
uiStyle *style = UI_style_get();
- uiBlock *block;
int fontid = style->widget.uifont_id;
- int height;
- float y;
- PropertyRNA *chan_prop_lock;
-
+
if (!clip)
return;
- tracking = &clip->tracking;
- dopesheet = &tracking->dopesheet;
- height = (dopesheet->tot_channel * CHANNEL_STEP) + (CHANNEL_HEIGHT);
+ MovieTracking *tracking = &clip->tracking;
+ MovieTrackingDopesheet *dopesheet = &tracking->dopesheet;
+ int height = (dopesheet->tot_channel * CHANNEL_STEP) + (CHANNEL_HEIGHT);
if (height > BLI_rcti_size_y(&v2d->mask)) {
/* don't use totrect set, as the width stays the same
@@ -309,6 +315,37 @@ void clip_draw_dopesheet_channels(const bContext *C, ARegion *ar)
/* loop through channels, and set up drawing depending on their type
* first pass: just the standard GL-drawing for backdrop + text
*/
+ float y = (float) CHANNEL_FIRST;
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ MovieTrackingDopesheetChannel *channel;
+ for (channel = dopesheet->channels.first; channel; channel = channel->next) {
+ float yminc = (float) (y - CHANNEL_HEIGHT_HALF);
+ float ymaxc = (float) (y + CHANNEL_HEIGHT_HALF);
+
+ /* check if visible */
+ if (IN_RANGE(yminc, v2d->cur.ymin, v2d->cur.ymax) ||
+ IN_RANGE(ymaxc, v2d->cur.ymin, v2d->cur.ymax))
+ {
+ MovieTrackingTrack *track = channel->track;
+ float color[3];
+ track_channel_color(track, NULL, color);
+ immUniformColor3fv(color);
+
+ immRectf(pos, v2d->cur.xmin, (float) y - CHANNEL_HEIGHT_HALF,
+ v2d->cur.xmax + EXTRA_SCROLL_PAD, (float) y + CHANNEL_HEIGHT_HALF);
+ }
+
+ /* adjust y-position for next one */
+ y -= CHANNEL_STEP;
+ }
+ immUnbindProgram();
+
+ /* second pass: text */
y = (float) CHANNEL_FIRST;
BLF_size(fontid, 11.0f * U.pixelsize, U.dpi);
@@ -322,21 +359,11 @@ void clip_draw_dopesheet_channels(const bContext *C, ARegion *ar)
IN_RANGE(ymaxc, v2d->cur.ymin, v2d->cur.ymax))
{
MovieTrackingTrack *track = channel->track;
- float font_height, color[3];
bool sel = (track->flag & TRACK_DOPE_SEL) != 0;
- track_channel_color(track, NULL, color);
- glColor3fv(color);
-
- glRectf(v2d->cur.xmin, (float) y - CHANNEL_HEIGHT_HALF,
- v2d->cur.xmax + EXTRA_SCROLL_PAD, (float) y + CHANNEL_HEIGHT_HALF);
-
- if (sel)
- UI_ThemeColor(TH_TEXT_HI);
- else
- UI_ThemeColor(TH_TEXT);
+ UI_FontThemeColor(fontid, sel ? TH_TEXT_HI : TH_TEXT);
- font_height = BLF_height(fontid, channel->name, sizeof(channel->name));
+ float font_height = BLF_height(fontid, channel->name, sizeof(channel->name));
BLF_position(fontid, v2d->cur.xmin + CHANNEL_PAD,
y - font_height / 2.0f, 0.0f);
BLF_draw(fontid, channel->name, strlen(channel->name));
@@ -346,12 +373,12 @@ void clip_draw_dopesheet_channels(const bContext *C, ARegion *ar)
y -= CHANNEL_STEP;
}
- /* second pass: widgets */
- block = UI_block_begin(C, ar, __func__, UI_EMBOSS);
+ /* third pass: widgets */
+ uiBlock *block = UI_block_begin(C, ar, __func__, UI_EMBOSS);
y = (float) CHANNEL_FIRST;
/* get RNA properties (once) */
- chan_prop_lock = RNA_struct_type_find_property(&RNA_MovieTrackingTrack, "lock");
+ PropertyRNA *chan_prop_lock = RNA_struct_type_find_property(&RNA_MovieTrackingTrack, "lock");
BLI_assert(chan_prop_lock);
glEnable(GL_BLEND);
diff --git a/source/blender/editors/space_clip/clip_draw.c b/source/blender/editors/space_clip/clip_draw.c
index a71b2baa96f..09d225fc1b8 100644
--- a/source/blender/editors/space_clip/clip_draw.c
+++ b/source/blender/editors/space_clip/clip_draw.c
@@ -55,10 +55,11 @@
#include "ED_mask.h"
#include "ED_gpencil.h"
-#include "BIF_gl.h"
#include "BIF_glutil.h"
-#include "GPU_basic_shader.h"
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+#include "GPU_matrix.h"
#include "WM_types.h"
@@ -66,26 +67,25 @@
#include "UI_resources.h"
#include "UI_view2d.h"
-
#include "BLF_api.h"
#include "clip_intern.h" // own include
/*********************** main area drawing *************************/
-static void draw_keyframe(int frame, int cfra, int sfra, float framelen, int width)
+static void draw_keyframe(int frame, int cfra, int sfra, float framelen, int width, unsigned int pos)
{
int height = (frame == cfra) ? 22 : 10;
int x = (frame - sfra) * framelen;
if (width == 1) {
- glBegin(GL_LINES);
- glVertex2i(x, 0);
- glVertex2i(x, height * UI_DPI_FAC);
- glEnd();
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2i(pos, x, 0);
+ immVertex2i(pos, x, height * UI_DPI_FAC);
+ immEnd();
}
else {
- glRecti(x, 0, x + width, height * UI_DPI_FAC);
+ immRecti(pos, x, 0, x + width, height * UI_DPI_FAC);
}
}
@@ -166,6 +166,9 @@ static void draw_movieclip_cache(SpaceClip *sc, ARegion *ar, MovieClip *clip, Sc
BKE_movieclip_get_cache_segments(clip, &sc->user, &totseg, &points);
ED_region_cache_draw_cached_segments(ar, totseg, points, sfra, efra);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
/* track */
if (act_track || act_plane_track) {
for (i = sfra - clip->start_frame + 1, a = 0; i <= efra - clip->start_frame + 1; i++) {
@@ -189,14 +192,17 @@ static void draw_movieclip_cache(SpaceClip *sc, ARegion *ar, MovieClip *clip, Sc
if (generic_track_is_marker_enabled(act_track, act_plane_track, a)) {
framenr = generic_track_get_marker_framenr(act_track, act_plane_track, a);
- if (framenr != i)
- glColor4ub(128, 128, 0, 96);
- else if (generic_track_is_marker_keyframed(act_track, act_plane_track, a))
- glColor4ub(255, 255, 0, 196);
- else
- glColor4ub(255, 255, 0, 96);
+ if (framenr != i) {
+ immUniformColor4ub(128, 128, 0, 96);
+ }
+ else if (generic_track_is_marker_keyframed(act_track, act_plane_track, a)) {
+ immUniformColor4ub(255, 255, 0, 196);
+ }
+ else {
+ immUniformColor4ub(255, 255, 0, 96);
+ }
- glRecti((i - sfra + clip->start_frame - 1) * framelen, 0, (i - sfra + clip->start_frame) * framelen, 4 * UI_DPI_FAC);
+ immRecti(pos, (i - sfra + clip->start_frame - 1) * framelen, 0, (i - sfra + clip->start_frame) * framelen, 4 * UI_DPI_FAC);
}
}
}
@@ -206,7 +212,7 @@ static void draw_movieclip_cache(SpaceClip *sc, ARegion *ar, MovieClip *clip, Sc
int n = reconstruction->camnr;
MovieReconstructedCamera *cameras = reconstruction->cameras;
- glColor4ub(255, 0, 0, 96);
+ immUniformColor4ub(255, 0, 0, 96);
for (i = sfra, a = 0; i <= efra; i++) {
bool ok = false;
@@ -223,8 +229,9 @@ static void draw_movieclip_cache(SpaceClip *sc, ARegion *ar, MovieClip *clip, Sc
a++;
}
- if (!ok)
- glRecti((i - sfra + clip->start_frame - 1) * framelen, 0, (i - sfra + clip->start_frame) * framelen, 8 * UI_DPI_FAC);
+ if (!ok) {
+ immRecti(pos, (i - sfra + clip->start_frame - 1) * framelen, 0, (i - sfra + clip->start_frame) * framelen, 8 * UI_DPI_FAC);
+ }
}
}
@@ -233,15 +240,22 @@ static void draw_movieclip_cache(SpaceClip *sc, ARegion *ar, MovieClip *clip, Sc
/* current frame */
x = (sc->user.framenr - sfra) / (efra - sfra + 1) * ar->winx;
- UI_ThemeColor(TH_CFRAME);
- glRecti(x, 0, x + ceilf(framelen), 8 * UI_DPI_FAC);
+ immUniformThemeColor(TH_CFRAME);
+ immRecti(pos, x, 0, x + ceilf(framelen), 8 * UI_DPI_FAC);
+
+ immUnbindProgram();
ED_region_cache_draw_curfra_label(sc->user.framenr, x, 8.0f * UI_DPI_FAC);
+ pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
/* solver keyframes */
- glColor4ub(175, 255, 0, 255);
- draw_keyframe(act_object->keyframe1 + clip->start_frame - 1, CFRA, sfra, framelen, 2);
- draw_keyframe(act_object->keyframe2 + clip->start_frame - 1, CFRA, sfra, framelen, 2);
+ immUniformColor4ub(175, 255, 0, 255);
+ draw_keyframe(act_object->keyframe1 + clip->start_frame - 1, CFRA, sfra, framelen, 2, pos);
+ draw_keyframe(act_object->keyframe2 + clip->start_frame - 1, CFRA, sfra, framelen, 2, pos);
+
+ immUnbindProgram();
/* movie clip animation */
if ((sc->mode == SC_MODE_MASKEDIT) && sc->mask_info.mask) {
@@ -275,11 +289,16 @@ static void draw_movieclip_muted(ARegion *ar, int width, int height, float zoomx
{
int x, y;
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
/* find window pixel coordinates of origin */
UI_view2d_view_to_region(&ar->v2d, 0.0f, 0.0f, &x, &y);
- glColor3f(0.0f, 0.0f, 0.0f);
- glRectf(x, y, x + zoomx * width, y + zoomy * height);
+ immUniformColor3f(0.0f, 0.0f, 0.0f);
+ immRectf(pos, x, y, x + zoomx * width, y + zoomy * height);
+
+ immUnbindProgram();
}
static void draw_movieclip_buffer(const bContext *C, SpaceClip *sc, ARegion *ar, ImBuf *ibuf,
@@ -297,7 +316,7 @@ static void draw_movieclip_buffer(const bContext *C, SpaceClip *sc, ARegion *ar,
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- fdrawcheckerboard(x, y, x + zoomx * ibuf->x, y + zoomy * ibuf->y);
+ imm_draw_box_checker_2d(x, y, x + zoomx * ibuf->x, y + zoomy * ibuf->y);
}
/* non-scaled proxy shouldn't use filtering */
@@ -307,13 +326,7 @@ static void draw_movieclip_buffer(const bContext *C, SpaceClip *sc, ARegion *ar,
filter = GL_NEAREST;
}
- /* set zoom */
- glPixelZoom(zoomx * width / ibuf->x, zoomy * height / ibuf->y);
-
- glaDrawImBuf_glsl_ctx(C, ibuf, x, y, filter);
- /* reset zoom */
- glPixelZoom(1.0f, 1.0f);
-
+ glaDrawImBuf_glsl_ctx(C, ibuf, x, y, filter, zoomx * width / ibuf->x, zoomy * height / ibuf->y);
if (sc->flag & SC_SHOW_METADATA) {
rctf frame;
@@ -335,31 +348,37 @@ static void draw_stabilization_border(SpaceClip *sc, ARegion *ar, int width, int
/* draw boundary border for frame if stabilization is enabled */
if (sc->flag & SC_SHOW_STABLE && clip->tracking.stabilization.flag & TRACKING_2D_STABILIZATION) {
- glColor3f(0.0f, 0.0f, 0.0f);
-
- GPU_basic_shader_bind_enable(GPU_SHADER_LINE | GPU_SHADER_STIPPLE);
- GPU_basic_shader_line_stipple(3, 0xAAAA);
+ const uint shdr_pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ /* Exclusive OR allows to get orig value when second operand is 0,
+ * and negative of orig value when second operand is 1. */
glEnable(GL_COLOR_LOGIC_OP);
- glLogicOp(GL_NOR);
+ glLogicOp(GL_XOR);
+
+ gpuPushMatrix();
+ gpuTranslate2f(x, y);
+
+ gpuScale2f(zoomx, zoomy);
+ gpuMultMatrix(sc->stabmat);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR);
+
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2] / UI_DPI_FAC, viewport_size[3] / UI_DPI_FAC);
- glPushMatrix();
- glTranslatef(x, y, 0.0f);
+ immUniform1i("num_colors", 0); /* "simple" mode */
+ immUniformColor4f(1.0f, 1.0f, 1.0f, 0.0f);
+ immUniform1f("dash_width", 6.0f);
+ immUniform1f("dash_factor", 0.5f);
- glScalef(zoomx, zoomy, 1.0f);
- glMultMatrixf(sc->stabmat);
+ imm_draw_box_wire_2d(shdr_pos, 0.0f, 0.0f, width, height);
- glBegin(GL_LINE_LOOP);
- glVertex2f(0.0f, 0.0f);
- glVertex2f(width, 0.0f);
- glVertex2f(width, height);
- glVertex2f(0.0f, height);
- glEnd();
+ immUnbindProgram();
- glPopMatrix();
+ gpuPopMatrix();
glDisable(GL_COLOR_LOGIC_OP);
- GPU_basic_shader_bind_disable(GPU_SHADER_LINE | GPU_SHADER_STIPPLE);
}
}
@@ -432,53 +451,97 @@ static void draw_track_path(SpaceClip *sc, MovieClip *UNUSED(clip), MovieTrackin
i++;
}
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
if (!tiny) {
- UI_ThemeColor(TH_MARKER_OUTLINE);
+ immUniformThemeColor(TH_MARKER_OUTLINE);
if (TRACK_VIEW_SELECTED(sc, track)) {
- glPointSize(5.0f);
- glBegin(GL_POINTS);
- for (i = a; i < b; i++) {
- if (i != curindex)
- glVertex2f(path[i][0], path[i][1]);
+ if ((b - a - 1) >= 1) {
+ glPointSize(5.0f);
+
+ immBegin(GWN_PRIM_POINTS, b - a - 1);
+
+ for (i = a; i < b; i++) {
+ if (i != curindex) {
+ immVertex2f(pos, path[i][0], path[i][1]);
+ }
+ }
+
+ immEnd();
}
- glEnd();
}
- glLineWidth(3.0f);
- glBegin(GL_LINE_STRIP);
- for (i = a; i < b; i++)
- glVertex2f(path[i][0], path[i][1]);
- glEnd();
- }
+ if ((b - a) >= 2) {
+ glLineWidth(3.0f);
+
+ immBegin(GWN_PRIM_LINE_STRIP, b - a);
+
+ for (i = a; i < b; i++) {
+ immVertex2f(pos, path[i][0], path[i][1]);
+ }
- UI_ThemeColor(TH_PATH_BEFORE);
+ immEnd();
+ }
+ }
if (TRACK_VIEW_SELECTED(sc, track)) {
glPointSize(3.0f);
- glBegin(GL_POINTS);
- for (i = a; i < b; i++) {
- if (i == count + 1)
- UI_ThemeColor(TH_PATH_AFTER);
- if (i != curindex)
- glVertex2f(path[i][0], path[i][1]);
+ if ((curindex - a) >= 1) {
+ immUniformThemeColor(TH_PATH_BEFORE);
+
+ immBegin(GWN_PRIM_POINTS, curindex - a);
+
+ for (i = a; i < curindex; i++) {
+ immVertex2f(pos, path[i][0], path[i][1]);
+ }
+
+ immEnd();
}
- glEnd();
- }
- UI_ThemeColor(TH_PATH_BEFORE);
+ if ((b - curindex - 1) >= 1) {
+ immUniformThemeColor(TH_PATH_AFTER);
+
+ immBegin(GWN_PRIM_POINTS, b - curindex - 1);
+
+ for (i = curindex + 1; i < b; i++) {
+ immVertex2f(pos, path[i][0], path[i][1]);
+ }
+
+ immEnd();
+ }
+ }
glLineWidth(1);
- glBegin(GL_LINE_STRIP);
- for (i = a; i < b; i++) {
- if (i == count + 1)
- UI_ThemeColor(TH_PATH_AFTER);
+ if ((curindex - a + 1) >= 2) {
+ immUniformThemeColor(TH_PATH_BEFORE);
+
+ immBegin(GWN_PRIM_LINE_STRIP, curindex - a + 1);
+
+ for (i = a; i <= curindex; i++) {
+ immVertex2f(pos, path[i][0], path[i][1]);
+ }
+
+ immEnd();
+ }
+
+ if ((b - curindex) >= 2) {
+ immUniformThemeColor(TH_PATH_AFTER);
+
+ immBegin(GWN_PRIM_LINE_STRIP, b - curindex);
+
+ for (i = curindex; i < b; i++) {
+ immVertex2f(pos, path[i][0], path[i][1]);
+ }
- glVertex2f(path[i][0], path[i][1]);
+ immEnd();
}
- glEnd();
+
+ immUnbindProgram();
if (path != path_static) {
MEM_freeN(path);
@@ -487,19 +550,19 @@ static void draw_track_path(SpaceClip *sc, MovieClip *UNUSED(clip), MovieTrackin
}
static void draw_marker_outline(SpaceClip *sc, MovieTrackingTrack *track, MovieTrackingMarker *marker,
- const float marker_pos[2], int width, int height)
+ const float marker_pos[2], int width, int height, unsigned int position)
{
int tiny = sc->flag & SC_SHOW_TINY_MARKER;
bool show_search = false;
float px[2];
- UI_ThemeColor(TH_MARKER_OUTLINE);
-
px[0] = 1.0f / width / sc->zoom;
px[1] = 1.0f / height / sc->zoom;
glLineWidth(tiny ? 1.0f : 3.0f);
+ immUniformThemeColor(TH_MARKER_OUTLINE);
+
if ((marker->flag & MARKER_DISABLED) == 0) {
float pos[2];
float p[2];
@@ -514,51 +577,54 @@ static void draw_marker_outline(SpaceClip *sc, MovieTrackingTrack *track, MovieT
marker->pattern_corners[2], marker->pattern_corners[3]))
{
glPointSize(tiny ? 3.0f : 4.0f);
- glBegin(GL_POINTS);
- glVertex2f(pos[0], pos[1]);
- glEnd();
+
+ immBegin(GWN_PRIM_POINTS, 1);
+ immVertex2f(position, pos[0], pos[1]);
+ immEnd();
}
else {
- glBegin(GL_LINES);
- glVertex2f(pos[0] + px[0] * 2, pos[1]);
- glVertex2f(pos[0] + px[0] * 8, pos[1]);
+ immBegin(GWN_PRIM_LINES, 8);
+
+ immVertex2f(position, pos[0] + px[0] * 2, pos[1]);
+ immVertex2f(position, pos[0] + px[0] * 8, pos[1]);
+
+ immVertex2f(position, pos[0] - px[0] * 2, pos[1]);
+ immVertex2f(position, pos[0] - px[0] * 8, pos[1]);
- glVertex2f(pos[0] - px[0] * 2, pos[1]);
- glVertex2f(pos[0] - px[0] * 8, pos[1]);
+ immVertex2f(position, pos[0], pos[1] - px[1] * 2);
+ immVertex2f(position, pos[0], pos[1] - px[1] * 8);
- glVertex2f(pos[0], pos[1] - px[1] * 2);
- glVertex2f(pos[0], pos[1] - px[1] * 8);
+ immVertex2f(position, pos[0], pos[1] + px[1] * 2);
+ immVertex2f(position, pos[0], pos[1] + px[1] * 8);
- glVertex2f(pos[0], pos[1] + px[1] * 2);
- glVertex2f(pos[0], pos[1] + px[1] * 8);
- glEnd();
+ immEnd();
}
}
/* pattern and search outline */
- glPushMatrix();
- glTranslate2fv(marker_pos);
+ gpuPushMatrix();
+ gpuTranslate2fv(marker_pos);
if (sc->flag & SC_SHOW_MARKER_PATTERN) {
- glBegin(GL_LINE_LOOP);
- glVertex2fv(marker->pattern_corners[0]);
- glVertex2fv(marker->pattern_corners[1]);
- glVertex2fv(marker->pattern_corners[2]);
- glVertex2fv(marker->pattern_corners[3]);
- glEnd();
+ immBegin(GWN_PRIM_LINE_LOOP, 4);
+ immVertex2fv(position, marker->pattern_corners[0]);
+ immVertex2fv(position, marker->pattern_corners[1]);
+ immVertex2fv(position, marker->pattern_corners[2]);
+ immVertex2fv(position, marker->pattern_corners[3]);
+ immEnd();
}
show_search = (TRACK_VIEW_SELECTED(sc, track) &&
((marker->flag & MARKER_DISABLED) == 0 || (sc->flag & SC_SHOW_MARKER_PATTERN) == 0)) != 0;
+
if (sc->flag & SC_SHOW_MARKER_SEARCH && show_search) {
- glBegin(GL_LINE_LOOP);
- glVertex2f(marker->search_min[0], marker->search_min[1]);
- glVertex2f(marker->search_max[0], marker->search_min[1]);
- glVertex2f(marker->search_max[0], marker->search_max[1]);
- glVertex2f(marker->search_min[0], marker->search_max[1]);
- glEnd();
- }
- glPopMatrix();
+ imm_draw_box_wire_2d(position, marker->search_min[0],
+ marker->search_min[1],
+ marker->search_max[0],
+ marker->search_max[1]);
+ }
+
+ gpuPopMatrix();
}
static void track_colors(MovieTrackingTrack *track, int act, float col[3], float scol[3])
@@ -582,11 +648,12 @@ static void track_colors(MovieTrackingTrack *track, int act, float col[3], float
}
static void draw_marker_areas(SpaceClip *sc, MovieTrackingTrack *track, MovieTrackingMarker *marker,
- const float marker_pos[2], int width, int height, int act, int sel)
+ const float marker_pos[2], int width, int height, int act, int sel, const uint shdr_pos)
{
int tiny = sc->flag & SC_SHOW_TINY_MARKER;
bool show_search = false;
- float col[3], scol[3], px[2];
+ float col[3], scol[3];
+ float px[2];
track_colors(track, act, col, scol);
@@ -595,23 +662,34 @@ static void draw_marker_areas(SpaceClip *sc, MovieTrackingTrack *track, MovieTra
glLineWidth(1.0f);
+ /* Since we are switching solid and dashed lines in rather complex logic here, just always go with dashed shader. */
+ immUnbindProgram();
+
+ immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR);
+
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2] / UI_DPI_FAC, viewport_size[3] / UI_DPI_FAC);
+
+ immUniform1i("num_colors", 0); /* "simple" mode */
+
/* marker position and offset position */
if ((track->flag & SELECT) == sel && (marker->flag & MARKER_DISABLED) == 0) {
float pos[2], p[2];
if (track->flag & TRACK_LOCKED) {
- if (act)
- UI_ThemeColor(TH_ACT_MARKER);
- else if (track->flag & SELECT)
- UI_ThemeColorShade(TH_LOCK_MARKER, 64);
- else
- UI_ThemeColor(TH_LOCK_MARKER);
+ if (act) {
+ immUniformThemeColor(TH_ACT_MARKER);
+ }
+ else if (track->flag & SELECT) {
+ immUniformThemeColorShade(TH_LOCK_MARKER, 64);
+ }
+ else {
+ immUniformThemeColor(TH_LOCK_MARKER);
+ }
}
else {
- if (track->flag & SELECT)
- glColor3fv(scol);
- else
- glColor3fv(col);
+ immUniformColor3fv((track->flag & SELECT) ? scol : col);
}
add_v2_v2v2(pos, marker->pos, track->offset);
@@ -623,123 +701,114 @@ static void draw_marker_areas(SpaceClip *sc, MovieTrackingTrack *track, MovieTra
marker->pattern_corners[2], marker->pattern_corners[3]))
{
glPointSize(tiny ? 1.0f : 2.0f);
- glBegin(GL_POINTS);
- glVertex2f(pos[0], pos[1]);
- glEnd();
+
+ immUniform1f("dash_factor", 2.0f); /* Solid "line" */
+
+ immBegin(GWN_PRIM_POINTS, 1);
+ immVertex2f(shdr_pos, pos[0], pos[1]);
+ immEnd();
}
else {
- glBegin(GL_LINES);
- glVertex2f(pos[0] + px[0] * 3, pos[1]);
- glVertex2f(pos[0] + px[0] * 7, pos[1]);
+ immUniform1f("dash_factor", 2.0f); /* Solid line */
+
+ immBegin(GWN_PRIM_LINES, 8);
+
+ immVertex2f(shdr_pos, pos[0] + px[0] * 3, pos[1]);
+ immVertex2f(shdr_pos, pos[0] + px[0] * 7, pos[1]);
+
+ immVertex2f(shdr_pos, pos[0] - px[0] * 3, pos[1]);
+ immVertex2f(shdr_pos, pos[0] - px[0] * 7, pos[1]);
- glVertex2f(pos[0] - px[0] * 3, pos[1]);
- glVertex2f(pos[0] - px[0] * 7, pos[1]);
+ immVertex2f(shdr_pos, pos[0], pos[1] - px[1] * 3);
+ immVertex2f(shdr_pos, pos[0], pos[1] - px[1] * 7);
- glVertex2f(pos[0], pos[1] - px[1] * 3);
- glVertex2f(pos[0], pos[1] - px[1] * 7);
+ immVertex2f(shdr_pos, pos[0], pos[1] + px[1] * 3);
+ immVertex2f(shdr_pos, pos[0], pos[1] + px[1] * 7);
- glVertex2f(pos[0], pos[1] + px[1] * 3);
- glVertex2f(pos[0], pos[1] + px[1] * 7);
- glEnd();
+ immEnd();
+
+ immUniformColor4f(1.0f, 1.0f, 1.0f, 0.0f);
+ immUniform1f("dash_width", 6.0f);
+ immUniform1f("dash_factor", 0.5f);
- glColor3f(0.0f, 0.0f, 0.0f);
- GPU_basic_shader_bind_enable(GPU_SHADER_LINE | GPU_SHADER_STIPPLE);
- GPU_basic_shader_line_stipple(3, 0xAAAA);
glEnable(GL_COLOR_LOGIC_OP);
- glLogicOp(GL_NOR);
+ glLogicOp(GL_XOR);
- glBegin(GL_LINES);
- glVertex2fv(pos);
- glVertex2fv(marker_pos);
- glEnd();
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2fv(shdr_pos, pos);
+ immVertex2fv(shdr_pos, marker_pos);
+ immEnd();
glDisable(GL_COLOR_LOGIC_OP);
- GPU_basic_shader_bind_disable(GPU_SHADER_LINE | GPU_SHADER_STIPPLE);
}
}
/* pattern */
- glPushMatrix();
- glTranslate2fv(marker_pos);
-
- if (tiny) {
- GPU_basic_shader_bind_enable(GPU_SHADER_LINE | GPU_SHADER_STIPPLE);
- GPU_basic_shader_line_stipple(3, 0xAAAA);
- }
- else {
- GPU_basic_shader_bind_enable(GPU_SHADER_LINE);
- }
+ gpuPushMatrix();
+ gpuTranslate2fv(marker_pos);
- if ((track->pat_flag & SELECT) == sel && (sc->flag & SC_SHOW_MARKER_PATTERN)) {
- if (track->flag & TRACK_LOCKED) {
- if (act)
- UI_ThemeColor(TH_ACT_MARKER);
- else if (track->pat_flag & SELECT)
- UI_ThemeColorShade(TH_LOCK_MARKER, 64);
- else UI_ThemeColor(TH_LOCK_MARKER);
+ if (track->flag & TRACK_LOCKED) {
+ if (act) {
+ immUniformThemeColor(TH_ACT_MARKER);
}
- else if (marker->flag & MARKER_DISABLED) {
- if (act)
- UI_ThemeColor(TH_ACT_MARKER);
- else if (track->pat_flag & SELECT)
- UI_ThemeColorShade(TH_DIS_MARKER, 128);
- else UI_ThemeColor(TH_DIS_MARKER);
+ else if (track->pat_flag & SELECT) {
+ immUniformThemeColorShade(TH_LOCK_MARKER, 64);
}
else {
- if (track->pat_flag & SELECT)
- glColor3fv(scol);
- else glColor3fv(col);
+ immUniformThemeColor(TH_LOCK_MARKER);
}
-
- glBegin(GL_LINE_LOOP);
- glVertex2fv(marker->pattern_corners[0]);
- glVertex2fv(marker->pattern_corners[1]);
- glVertex2fv(marker->pattern_corners[2]);
- glVertex2fv(marker->pattern_corners[3]);
- glEnd();
}
-
- /* search */
- show_search = (TRACK_VIEW_SELECTED(sc, track) &&
- ((marker->flag & MARKER_DISABLED) == 0 || (sc->flag & SC_SHOW_MARKER_PATTERN) == 0)) != 0;
- if ((track->search_flag & SELECT) == sel && (sc->flag & SC_SHOW_MARKER_SEARCH) && show_search) {
- if (track->flag & TRACK_LOCKED) {
- if (act)
- UI_ThemeColor(TH_ACT_MARKER);
- else if (track->search_flag & SELECT)
- UI_ThemeColorShade(TH_LOCK_MARKER, 64);
- else UI_ThemeColor(TH_LOCK_MARKER);
+ else if (marker->flag & MARKER_DISABLED) {
+ if (act) {
+ immUniformThemeColor(TH_ACT_MARKER);
}
- else if (marker->flag & MARKER_DISABLED) {
- if (act)
- UI_ThemeColor(TH_ACT_MARKER);
- else if (track->search_flag & SELECT)
- UI_ThemeColorShade(TH_DIS_MARKER, 128);
- else UI_ThemeColor(TH_DIS_MARKER);
+ else if (track->pat_flag & SELECT) {
+ immUniformThemeColorShade(TH_DIS_MARKER, 128);
}
else {
- if (track->search_flag & SELECT)
- glColor3fv(scol);
- else
- glColor3fv(col);
+ immUniformThemeColor(TH_DIS_MARKER);
}
-
- glBegin(GL_LINE_LOOP);
- glVertex2f(marker->search_min[0], marker->search_min[1]);
- glVertex2f(marker->search_max[0], marker->search_min[1]);
- glVertex2f(marker->search_max[0], marker->search_max[1]);
- glVertex2f(marker->search_min[0], marker->search_max[1]);
- glEnd();
+ }
+ else {
+ immUniformColor3fv((track->pat_flag & SELECT) ? scol : col);
}
if (tiny) {
- GPU_basic_shader_bind_disable(GPU_SHADER_LINE | GPU_SHADER_STIPPLE);
+ immUniform1f("dash_width", 6.0f);
+ immUniform1f("dash_factor", 0.5f);
}
else {
- GPU_basic_shader_bind_disable(GPU_SHADER_LINE);
+ immUniform1f("dash_factor", 2.0f); /* Solid line */
+ }
+
+ if ((track->pat_flag & SELECT) == sel && (sc->flag & SC_SHOW_MARKER_PATTERN)) {
+ immBegin(GWN_PRIM_LINE_LOOP, 4);
+ immVertex2fv(shdr_pos, marker->pattern_corners[0]);
+ immVertex2fv(shdr_pos, marker->pattern_corners[1]);
+ immVertex2fv(shdr_pos, marker->pattern_corners[2]);
+ immVertex2fv(shdr_pos, marker->pattern_corners[3]);
+ immEnd();
+ }
+
+ /* search */
+ show_search = (TRACK_VIEW_SELECTED(sc, track) &&
+ ((marker->flag & MARKER_DISABLED) == 0 || (sc->flag & SC_SHOW_MARKER_PATTERN) == 0)) != 0;
+
+ if ((track->search_flag & SELECT) == sel && (sc->flag & SC_SHOW_MARKER_SEARCH) && show_search) {
+ imm_draw_box_wire_2d(shdr_pos, marker->search_min[0], marker->search_min[1],
+ marker->search_max[0], marker->search_max[1]);
}
- glPopMatrix();
+ gpuPopMatrix();
+
+ /* Restore default shader */
+ immUnbindProgram();
+
+ const uint pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ BLI_assert(pos == shdr_pos);
+ UNUSED_VARS_NDEBUG(pos);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
}
static float get_shortest_pattern_side(MovieTrackingMarker *marker)
@@ -760,7 +829,7 @@ static float get_shortest_pattern_side(MovieTrackingMarker *marker)
return sqrtf(len_sq);
}
-static void draw_marker_slide_square(float x, float y, float dx, float dy, int outline, float px[2])
+static void draw_marker_slide_square(float x, float y, float dx, float dy, int outline, float px[2], unsigned int pos)
{
float tdx, tdy;
@@ -772,15 +841,10 @@ static void draw_marker_slide_square(float x, float y, float dx, float dy, int o
tdy += px[1];
}
- glBegin(GL_QUADS);
- glVertex3f(x - tdx, y + tdy, 0.0f);
- glVertex3f(x + tdx, y + tdy, 0.0f);
- glVertex3f(x + tdx, y - tdy, 0.0f);
- glVertex3f(x - tdx, y - tdy, 0.0f);
- glEnd();
+ immRectf(pos, x - tdx, y - tdy, x + tdx, y + tdy);
}
-static void draw_marker_slide_triangle(float x, float y, float dx, float dy, int outline, float px[2])
+static void draw_marker_slide_triangle(float x, float y, float dx, float dy, int outline, float px[2], unsigned int pos)
{
float tdx, tdy;
@@ -792,15 +856,16 @@ static void draw_marker_slide_triangle(float x, float y, float dx, float dy, int
tdy += px[1];
}
- glBegin(GL_TRIANGLES);
- glVertex3f(x, y, 0.0f);
- glVertex3f(x - tdx, y, 0.0f);
- glVertex3f(x, y + tdy, 0.0f);
- glEnd();
+ immBegin(GWN_PRIM_TRIS, 3);
+ immVertex2f(pos, x, y);
+ immVertex2f(pos, x - tdx, y);
+ immVertex2f(pos, x, y + tdy);
+ immEnd();
}
static void draw_marker_slide_zones(SpaceClip *sc, MovieTrackingTrack *track, MovieTrackingMarker *marker,
- const float marker_pos[2], int outline, int sel, int act, int width, int height)
+ const float marker_pos[2], int outline, int sel, int act,
+ int width, int height, unsigned int pos)
{
float dx, dy, patdx, patdy, searchdx, searchdy;
int tiny = sc->flag & SC_SHOW_TINY_MARKER;
@@ -815,11 +880,11 @@ static void draw_marker_slide_zones(SpaceClip *sc, MovieTrackingTrack *track, Mo
track_colors(track, act, col, scol);
if (outline) {
- UI_ThemeColor(TH_MARKER_OUTLINE);
+ immUniformThemeColor(TH_MARKER_OUTLINE);
}
- glPushMatrix();
- glTranslate2fv(marker_pos);
+ gpuPushMatrix();
+ gpuTranslate2fv(marker_pos);
dx = 6.0f / width / sc->zoom;
dy = 6.0f / height / sc->zoom;
@@ -836,17 +901,14 @@ static void draw_marker_slide_zones(SpaceClip *sc, MovieTrackingTrack *track, Mo
if ((sc->flag & SC_SHOW_MARKER_SEARCH) && ((track->search_flag & SELECT) == sel || outline)) {
if (!outline) {
- if (track->search_flag & SELECT)
- glColor3fv(scol);
- else
- glColor3fv(col);
+ immUniformColor3fv((track->search_flag & SELECT) ? scol : col);
}
/* search offset square */
- draw_marker_slide_square(marker->search_min[0], marker->search_max[1], searchdx, searchdy, outline, px);
+ draw_marker_slide_square(marker->search_min[0], marker->search_max[1], searchdx, searchdy, outline, px, pos);
/* search re-sizing triangle */
- draw_marker_slide_triangle(marker->search_max[0], marker->search_min[1], searchdx, searchdy, outline, px);
+ draw_marker_slide_triangle(marker->search_max[0], marker->search_min[1], searchdx, searchdy, outline, px, pos);
}
if ((sc->flag & SC_SHOW_MARKER_PATTERN) && ((track->pat_flag & SELECT) == sel || outline)) {
@@ -856,16 +918,13 @@ static void draw_marker_slide_zones(SpaceClip *sc, MovieTrackingTrack *track, Mo
float tilt_ctrl[2];
if (!outline) {
- if (track->pat_flag & SELECT)
- glColor3fv(scol);
- else
- glColor3fv(col);
+ immUniformColor3fv((track->pat_flag & SELECT) ? scol : col);
}
/* pattern's corners sliding squares */
for (i = 0; i < 4; i++) {
draw_marker_slide_square(marker->pattern_corners[i][0], marker->pattern_corners[i][1],
- patdx / 1.5f, patdy / 1.5f, outline, px);
+ patdx / 1.5f, patdy / 1.5f, outline, px, pos);
}
/* ** sliders to control overall pattern ** */
@@ -875,18 +934,16 @@ static void draw_marker_slide_zones(SpaceClip *sc, MovieTrackingTrack *track, Mo
glLineWidth(outline ? 3.0f : 1.0f);
- glBegin(GL_LINES);
- glVertex2f(0.0f, 0.0f);
- glVertex2fv(tilt_ctrl);
- glEnd();
-
- GPU_basic_shader_bind_disable(GPU_SHADER_LINE | GPU_SHADER_STIPPLE);
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2f(pos, 0.0f, 0.0f);
+ immVertex2fv(pos, tilt_ctrl);
+ immEnd();
/* slider to control pattern tilt */
- draw_marker_slide_square(tilt_ctrl[0], tilt_ctrl[1], patdx, patdy, outline, px);
+ draw_marker_slide_square(tilt_ctrl[0], tilt_ctrl[1], patdx, patdy, outline, px, pos);
}
- glPopMatrix();
+ gpuPopMatrix();
}
static void draw_marker_texts(SpaceClip *sc, MovieTrackingTrack *track, MovieTrackingMarker *marker,
@@ -904,16 +961,17 @@ static void draw_marker_texts(SpaceClip *sc, MovieTrackingTrack *track, MovieTra
fontsize = BLF_height_max(fontid);
if (marker->flag & MARKER_DISABLED) {
- if (act)
- UI_ThemeColor(TH_ACT_MARKER);
- else
- UI_ThemeColorShade(TH_DIS_MARKER, 128);
+ if (act) {
+ UI_FontThemeColor(fontid, TH_ACT_MARKER);
+ }
+ else {
+ unsigned char color[4];
+ UI_GetThemeColorShade4ubv(TH_DIS_MARKER, 128, color);
+ BLF_color4ubv(fontid, color);
+ }
}
else {
- if (act)
- UI_ThemeColor(TH_ACT_MARKER);
- else
- UI_ThemeColor(TH_SEL_MARKER);
+ UI_FontThemeColor(fontid, act ? TH_ACT_MARKER : TH_SEL_MARKER);
}
if ((sc->flag & SC_SHOW_MARKER_SEARCH) &&
@@ -974,10 +1032,7 @@ static void plane_track_colors(bool is_active, float color[3], float selected_co
{
UI_GetThemeColor3fv(TH_MARKER, color);
- if (is_active)
- UI_GetThemeColor3fv(TH_ACT_MARKER, selected_color);
- else
- UI_GetThemeColor3fv(TH_SEL_MARKER, selected_color);
+ UI_GetThemeColor3fv(is_active ? TH_ACT_MARKER : TH_SEL_MARKER, selected_color);
}
static void getArrowEndPoint(const int width, const int height, const float zoom,
@@ -1074,9 +1129,6 @@ static void draw_plane_marker_image(Scene *scene,
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}
- glColor4f(1.0, 1.0, 1.0, plane_track->image_opacity);
-
- GPU_basic_shader_bind(GPU_SHADER_TEXTURE_2D | GPU_SHADER_USE_COLOR);
glGenTextures(1, (GLuint *)&texid);
glBindTexture(GL_TEXTURE_2D, texid);
@@ -1087,20 +1139,38 @@ static void draw_plane_marker_image(Scene *scene,
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, ibuf->x, ibuf->y, 0, GL_RGBA,
GL_UNSIGNED_BYTE, display_buffer);
- glPushMatrix();
- glMultMatrixf(gl_matrix);
+ gpuPushMatrix();
+ gpuMultMatrix(gl_matrix);
+
+ Gwn_VertFormat *imm_format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(imm_format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int texCoord = GWN_vertformat_attr_add(imm_format, "texCoord", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_IMAGE_COLOR);
+ immUniformColor4f(1.0f, 1.0f, 1.0f, plane_track->image_opacity);
+ immUniform1i("image", GL_TEXTURE0);
+
+ immBegin(GWN_PRIM_TRI_FAN, 4);
+
+ immAttrib2f(texCoord, 0.0f, 0.0f);
+ immVertex2f(pos, 0.0f, 0.0f);
+
+ immAttrib2f(texCoord, 1.0f, 0.0f);
+ immVertex2f(pos, 1.0f, 0.0f);
+
+ immAttrib2f(texCoord, 1.0f, 1.0f);
+ immVertex2f(pos, 1.0f, 1.0f);
+
+ immAttrib2f(texCoord, 0.0f, 1.0f);
+ immVertex2f(pos, 0.0f, 1.0f);
+
+ immEnd();
- glBegin(GL_QUADS);
- glTexCoord2f(0.0f, 0.0f); glVertex2f(0.0f, 0.0f);
- glTexCoord2f(1.0f, 0.0f); glVertex2f(1.0f, 0.0f);
- glTexCoord2f(1.0f, 1.0f); glVertex2f(1.0f, 1.0f);
- glTexCoord2f(0.0f, 1.0f); glVertex2f(0.0f, 1.0f);
- glEnd();
+ immUnbindProgram();
- glPopMatrix();
+ gpuPopMatrix();
glBindTexture(GL_TEXTURE_2D, 0);
- GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
if (transparent) {
glDisable(GL_BLEND);
@@ -1123,20 +1193,7 @@ static void draw_plane_marker_ex(SpaceClip *sc, Scene *scene, MovieTrackingPlane
BKE_image_has_ibuf(plane_track->image, NULL);
const bool draw_plane_quad = !has_image || plane_track->image_opacity == 0.0f;
float px[2];
-
- if (draw_outline) {
- UI_ThemeColor(TH_MARKER_OUTLINE);
- }
- else {
- float color[3], selected_color[3];
- plane_track_colors(is_active_track, color, selected_color);
- if (is_selected_track) {
- glColor3fv(selected_color);
- }
- else {
- glColor3fv(color);
- }
- }
+ float color[3], selected_color[3];
px[0] = 1.0f / width / sc->zoom;
px[1] = 1.0f / height / sc->zoom;
@@ -1146,66 +1203,92 @@ static void draw_plane_marker_ex(SpaceClip *sc, Scene *scene, MovieTrackingPlane
draw_plane_marker_image(scene, plane_track, plane_marker);
}
- if (draw_plane_quad) {
+ if (draw_plane_quad || is_selected_track) {
+ const uint shdr_pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
- const bool stipple = !draw_outline && tiny;
- const bool thick = draw_outline && !tiny;
+ immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR);
- if (stipple) {
- GPU_basic_shader_bind_enable(GPU_SHADER_LINE | GPU_SHADER_STIPPLE);
- GPU_basic_shader_line_stipple(3, 0xAAAA);
- }
- else {
- GPU_basic_shader_bind_enable(GPU_SHADER_LINE);
- }
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2] / UI_DPI_FAC, viewport_size[3] / UI_DPI_FAC);
- GPU_basic_shader_line_width(thick ? 3.0f : 1.0f);
+ immUniform1i("num_colors", 0); /* "simple" mode */
- /* Draw rectangle itself. */
- glBegin(GL_LINE_LOOP);
- glVertex2fv(plane_marker->corners[0]);
- glVertex2fv(plane_marker->corners[1]);
- glVertex2fv(plane_marker->corners[2]);
- glVertex2fv(plane_marker->corners[3]);
- glEnd();
+ if (draw_plane_quad) {
+ const bool stipple = !draw_outline && tiny;
+ const bool thick = draw_outline && !tiny;
- /* Draw axis. */
- if (!draw_outline) {
- float end_point[2];
- glPushAttrib(GL_COLOR_BUFFER_BIT | GL_CURRENT_BIT);
+ glLineWidth(thick ? 3.0f : 1.0f);
- glBegin(GL_LINES);
+ if (stipple) {
+ immUniform1f("dash_width", 6.0f);
+ immUniform1f("dash_factor", 0.5f);
+ }
+ else {
+ immUniform1f("dash_factor", 2.0f); /* Solid line */
+ }
- getArrowEndPoint(width, height, sc->zoom, plane_marker->corners[0], plane_marker->corners[1], end_point);
- glColor3f(1.0, 0.0, 0.0f);
- glVertex2fv(plane_marker->corners[0]);
- glVertex2fv(end_point);
+ if (draw_outline) {
+ immUniformThemeColor(TH_MARKER_OUTLINE);
+ }
+ else {
+ plane_track_colors(is_active_track, color, selected_color);
+ immUniformColor3fv(is_selected_track ? selected_color : color);
+ }
- getArrowEndPoint(width, height, sc->zoom, plane_marker->corners[0], plane_marker->corners[3], end_point);
- glColor3f(0.0, 1.0, 0.0f);
- glVertex2fv(plane_marker->corners[0]);
- glVertex2fv(end_point);
+ /* Draw rectangle itself. */
+ immBegin(GWN_PRIM_LINE_LOOP, 4);
+ immVertex2fv(shdr_pos, plane_marker->corners[0]);
+ immVertex2fv(shdr_pos, plane_marker->corners[1]);
+ immVertex2fv(shdr_pos, plane_marker->corners[2]);
+ immVertex2fv(shdr_pos, plane_marker->corners[3]);
+ immEnd();
- glEnd();
+ /* Draw axis. */
+ if (!draw_outline) {
+ float end_point[2];
- glPopAttrib();
- }
+ immUniformColor3f(1.0f, 0.0f, 0.0f);
- if (stipple) {
- GPU_basic_shader_bind_disable(GPU_SHADER_LINE | GPU_SHADER_STIPPLE);
- }
- else {
- GPU_basic_shader_bind_disable(GPU_SHADER_LINE);
+ immBegin(GWN_PRIM_LINES, 2);
+
+ getArrowEndPoint(width, height, sc->zoom, plane_marker->corners[0], plane_marker->corners[1], end_point);
+ immVertex2fv(shdr_pos, plane_marker->corners[0]);
+ immVertex2fv(shdr_pos, end_point);
+
+ immEnd();
+
+ immUniformColor3f(0.0f, 1.0f, 0.0f);
+
+ immBegin(GWN_PRIM_LINES, 2);
+
+ getArrowEndPoint(width, height, sc->zoom, plane_marker->corners[0], plane_marker->corners[3], end_point);
+ immVertex2fv(shdr_pos, plane_marker->corners[0]);
+ immVertex2fv(shdr_pos, end_point);
+
+ immEnd();
+ }
}
- }
- /* Draw sliders. */
- if (is_selected_track) {
- int i;
- for (i = 0; i < 4; i++) {
- draw_marker_slide_square(plane_marker->corners[i][0], plane_marker->corners[i][1],
- 3.0f * px[0], 3.0f * px[1], draw_outline, px);
+ /* Draw sliders. */
+ if (is_selected_track) {
+ immUniform1f("dash_factor", 2.0f); /* Solid line */
+
+ if (draw_outline) {
+ immUniformThemeColor(TH_MARKER_OUTLINE);
+ }
+ else {
+ immUniformColor3fv(selected_color);
+ }
+
+ int i;
+ for (i = 0; i < 4; i++) {
+ draw_marker_slide_square(plane_marker->corners[i][0], plane_marker->corners[i][1],
+ 3.0f * px[0], 3.0f * px[1], draw_outline, px, shdr_pos);
+ }
}
+
+ immUnbindProgram();
}
}
@@ -1257,13 +1340,13 @@ static void draw_tracking_tracks(SpaceClip *sc, Scene *scene, ARegion *ar, Movie
UI_view2d_view_to_region_fl(&ar->v2d, 0.0f, 0.0f, &x, &y);
- glPushMatrix();
- glTranslatef(x, y, 0);
+ gpuPushMatrix();
+ gpuTranslate2f(x, y);
- glPushMatrix();
- glScalef(zoomx, zoomy, 0);
- glMultMatrixf(sc->stabmat);
- glScalef(width, height, 0);
+ gpuPushMatrix();
+ gpuScale2f(zoomx, zoomy);
+ gpuMultMatrix(sc->stabmat);
+ gpuScale2f(width, height);
act_track = BKE_tracking_track_get_active(tracking);
@@ -1329,6 +1412,10 @@ static void draw_tracking_tracks(SpaceClip *sc, Scene *scene, ARegion *ar, Movie
}
}
+ unsigned int position = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
/* markers outline and non-selected areas */
track = tracksbase->first;
fp = marker_pos;
@@ -1339,10 +1426,10 @@ static void draw_tracking_tracks(SpaceClip *sc, Scene *scene, ARegion *ar, Movie
if (MARKER_VISIBLE(sc, track, marker)) {
copy_v2_v2(cur_pos, fp ? fp : marker->pos);
- draw_marker_outline(sc, track, marker, cur_pos, width, height);
- draw_marker_areas(sc, track, marker, cur_pos, width, height, 0, 0);
- draw_marker_slide_zones(sc, track, marker, cur_pos, 1, 0, 0, width, height);
- draw_marker_slide_zones(sc, track, marker, cur_pos, 0, 0, 0, width, height);
+ draw_marker_outline(sc, track, marker, cur_pos, width, height, position);
+ draw_marker_areas(sc, track, marker, cur_pos, width, height, 0, 0, position);
+ draw_marker_slide_zones(sc, track, marker, cur_pos, 1, 0, 0, width, height, position);
+ draw_marker_slide_zones(sc, track, marker, cur_pos, 0, 0, 0, width, height, position);
if (fp)
fp += 2;
@@ -1365,8 +1452,8 @@ static void draw_tracking_tracks(SpaceClip *sc, Scene *scene, ARegion *ar, Movie
if (!act) {
copy_v2_v2(cur_pos, fp ? fp : marker->pos);
- draw_marker_areas(sc, track, marker, cur_pos, width, height, 0, 1);
- draw_marker_slide_zones(sc, track, marker, cur_pos, 0, 1, 0, width, height);
+ draw_marker_areas(sc, track, marker, cur_pos, width, height, 0, 1, position);
+ draw_marker_slide_zones(sc, track, marker, cur_pos, 0, 1, 0, width, height, position);
}
if (fp)
@@ -1385,8 +1472,8 @@ static void draw_tracking_tracks(SpaceClip *sc, Scene *scene, ARegion *ar, Movie
if (MARKER_VISIBLE(sc, act_track, marker)) {
copy_v2_v2(cur_pos, active_pos ? active_pos : marker->pos);
- draw_marker_areas(sc, act_track, marker, cur_pos, width, height, 1, 1);
- draw_marker_slide_zones(sc, act_track, marker, cur_pos, 0, 1, 1, width, height);
+ draw_marker_areas(sc, act_track, marker, cur_pos, width, height, 1, 1, position);
+ draw_marker_slide_zones(sc, act_track, marker, cur_pos, 0, 1, 1, width, height, position);
}
}
}
@@ -1395,7 +1482,6 @@ static void draw_tracking_tracks(SpaceClip *sc, Scene *scene, ARegion *ar, Movie
MovieTrackingObject *object = BKE_tracking_object_get_active(tracking);
float pos[4], vec[4], mat[4][4], aspy;
- glEnable(GL_POINT_SMOOTH);
glPointSize(3.0f);
aspy = 1.0f / clip->tracking.camera.pixel_aspect;
@@ -1424,28 +1510,34 @@ static void draw_tracking_tracks(SpaceClip *sc, Scene *scene, ARegion *ar, Movie
sub_v2_v2(vec, npos);
- if (len_squared_v2(vec) < (3.0f * 3.0f))
- glColor3f(0.0f, 1.0f, 0.0f);
- else
- glColor3f(1.0f, 0.0f, 0.0f);
+ if (len_squared_v2(vec) < (3.0f * 3.0f)) {
+ immUniformColor3f(0.0f, 1.0f, 0.0f);
+ }
+ else {
+ immUniformColor3f(1.0f, 0.0f, 0.0f);
+ }
- glBegin(GL_POINTS);
- if (undistort)
- glVertex3f(pos[0] / width, pos[1] / (height * aspy), 0);
- else
- glVertex3f(npos[0] / width, npos[1] / (height * aspy), 0);
- glEnd();
+ immBegin(GWN_PRIM_POINTS, 1);
+
+ if (undistort) {
+ immVertex2f(position, pos[0] / width, pos[1] / (height * aspy));
+ }
+ else {
+ immVertex2f(position, npos[0] / width, npos[1] / (height * aspy));
+ }
+
+ immEnd();
}
}
}
track = track->next;
}
-
- glDisable(GL_POINT_SMOOTH);
}
- glPopMatrix();
+ immUnbindProgram();
+
+ gpuPopMatrix();
if (sc->flag & SC_SHOW_NAMES) {
/* scaling should be cleared before drawing texts, otherwise font would also be scaled */
@@ -1471,7 +1563,7 @@ static void draw_tracking_tracks(SpaceClip *sc, Scene *scene, ARegion *ar, Movie
}
}
- glPopMatrix();
+ gpuPopMatrix();
if (marker_pos)
MEM_freeN(marker_pos);
@@ -1498,11 +1590,15 @@ static void draw_distortion(SpaceClip *sc, ARegion *ar, MovieClip *clip,
UI_view2d_view_to_region_fl(&ar->v2d, 0.0f, 0.0f, &x, &y);
- glPushMatrix();
- glTranslatef(x, y, 0);
- glScalef(zoomx, zoomy, 0);
- glMultMatrixf(sc->stabmat);
- glScalef(width, height, 0);
+ gpuPushMatrix();
+ gpuTranslate2f(x, y);
+ gpuScale2f(zoomx, zoomy);
+ gpuMultMatrix(sc->stabmat);
+ gpuScale2f(width, height);
+
+ unsigned int position = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
/* grid */
if (sc->flag & SC_SHOW_GRID) {
@@ -1574,22 +1670,26 @@ static void draw_distortion(SpaceClip *sc, ARegion *ar, MovieClip *clip,
pos[1] += dy;
}
- glColor3f(1.0f, 0.0f, 0.0f);
+ immUniformColor3f(1.0f, 0.0f, 0.0f);
for (i = 0; i <= n; i++) {
- glBegin(GL_LINE_STRIP);
+ immBegin(GWN_PRIM_LINE_STRIP, n + 1);
+
for (j = 0; j <= n; j++) {
- glVertex2fv(grid[i][j]);
+ immVertex2fv(position, grid[i][j]);
}
- glEnd();
+
+ immEnd();
}
for (j = 0; j <= n; j++) {
- glBegin(GL_LINE_STRIP);
+ immBegin(GWN_PRIM_LINE_STRIP, n + 1);
+
for (i = 0; i <= n; i++) {
- glVertex2fv(grid[i][j]);
+ immVertex2fv(position, grid[i][j]);
}
- glEnd();
+
+ immEnd();
}
}
@@ -1608,7 +1708,8 @@ static void draw_distortion(SpaceClip *sc, ARegion *ar, MovieClip *clip,
continue;
}
- glColor4fv(layer->color);
+ immUniformColor4fv(layer->color);
+
glLineWidth(layer->thickness);
glPointSize((float)(layer->thickness + 2));
@@ -1618,7 +1719,6 @@ static void draw_distortion(SpaceClip *sc, ARegion *ar, MovieClip *clip,
while (stroke) {
if (stroke->flag & GP_STROKE_2DSPACE) {
if (stroke->totpoints > 1) {
- glBegin(GL_LINE_STRIP);
for (i = 0; i < stroke->totpoints - 1; i++) {
float npos[2], dpos[2], len;
int steps;
@@ -1641,19 +1741,22 @@ static void draw_distortion(SpaceClip *sc, ARegion *ar, MovieClip *clip,
sub_v2_v2v2(dpos, npos, pos);
mul_v2_fl(dpos, 1.0f / steps);
+ immBegin(GWN_PRIM_LINE_STRIP, steps + 1);
+
for (j = 0; j <= steps; j++) {
BKE_tracking_distort_v2(tracking, pos, tpos);
- glVertex2f(tpos[0] / width, tpos[1] / (height * aspy));
+ immVertex2f(position, tpos[0] / width, tpos[1] / (height * aspy));
add_v2_v2(pos, dpos);
}
+
+ immEnd();
}
- glEnd();
}
else if (stroke->totpoints == 1) {
- glBegin(GL_POINTS);
- glVertex2f(stroke->points[0].x + offsx, stroke->points[0].y + offsy);
- glEnd();
+ immBegin(GWN_PRIM_POINTS, 1);
+ immVertex2f(position, stroke->points[0].x + offsx, stroke->points[0].y + offsy);
+ immEnd();
}
}
@@ -1667,7 +1770,9 @@ static void draw_distortion(SpaceClip *sc, ARegion *ar, MovieClip *clip,
}
}
- glPopMatrix();
+ immUnbindProgram();
+
+ gpuPopMatrix();
}
void clip_draw_main(const bContext *C, SpaceClip *sc, ARegion *ar)
@@ -1764,8 +1869,8 @@ void clip_draw_grease_pencil(bContext *C, int onlyv2d)
* associated with the clip is already drawn in draw_distortion
*/
if ((sc->flag & SC_MANUAL_CALIBRATION) == 0 || is_track_source) {
- glPushMatrix();
- glMultMatrixf(sc->unistabmat);
+ gpuPushMatrix();
+ gpuMultMatrix(sc->unistabmat);
if (is_track_source) {
MovieTrackingTrack *track = BKE_tracking_track_get_active(&sc->clip->tracking);
@@ -1774,13 +1879,13 @@ void clip_draw_grease_pencil(bContext *C, int onlyv2d)
int framenr = ED_space_clip_get_clip_frame_number(sc);
MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr);
- glTranslate2fv(marker->pos);
+ gpuTranslate2fv(marker->pos);
}
}
ED_gpencil_draw_2dimage(C);
- glPopMatrix();
+ gpuPopMatrix();
}
}
else {
diff --git a/source/blender/editors/space_clip/clip_editor.c b/source/blender/editors/space_clip/clip_editor.c
index 59dd755173f..942bc2661c3 100644
--- a/source/blender/editors/space_clip/clip_editor.c
+++ b/source/blender/editors/space_clip/clip_editor.c
@@ -305,15 +305,12 @@ bool ED_space_clip_color_sample(SpaceClip *sc, ARegion *ar, int mval[2], float r
void ED_clip_update_frame(const Main *mainp, int cfra)
{
- wmWindowManager *wm;
- wmWindow *win;
-
/* image window, compo node users */
- for (wm = mainp->wm.first; wm; wm = wm->id.next) { /* only 1 wm */
- for (win = wm->windows.first; win; win = win->next) {
- ScrArea *sa;
+ for (wmWindowManager *wm = mainp->wm.first; wm; wm = wm->id.next) { /* only 1 wm */
+ for (wmWindow *win = wm->windows.first; win; win = win->next) {
+ bScreen *screen = WM_window_get_active_screen(win);
- for (sa = win->screen->areabase.first; sa; sa = sa->next) {
+ for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
if (sa->spacetype == SPACE_CLIP) {
SpaceClip *sc = sa->spacedata.first;
diff --git a/source/blender/editors/space_clip/clip_graph_draw.c b/source/blender/editors/space_clip/clip_graph_draw.c
index 424d25defdd..1bd1ad69d64 100644
--- a/source/blender/editors/space_clip/clip_graph_draw.c
+++ b/source/blender/editors/space_clip/clip_graph_draw.c
@@ -42,7 +42,9 @@
#include "ED_screen.h"
#include "ED_clip.h"
-#include "BIF_gl.h"
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+#include "GPU_matrix.h"
#include "WM_types.h"
@@ -53,52 +55,30 @@
#include "clip_intern.h" // own include
-static void draw_curve_knot(float x, float y, float xscale, float yscale, float hsize)
-{
- static GLuint displist = 0;
-
- /* initialize round circle shape */
- if (displist == 0) {
- GLUquadricObj *qobj;
-
- displist = glGenLists(1);
- glNewList(displist, GL_COMPILE);
-
- qobj = gluNewQuadric();
- gluQuadricDrawStyle(qobj, GLU_SILHOUETTE);
- gluDisk(qobj, 0, 0.7, 8, 1);
- gluDeleteQuadric(qobj);
-
- glEndList();
- }
-
- glPushMatrix();
-
- glTranslatef(x, y, 0.0f);
- glScalef(1.0f / xscale * hsize, 1.0f / yscale * hsize, 1.0f);
- glCallList(displist);
-
- glPopMatrix();
-}
+typedef struct TrackMotionCurveUserData {
+ MovieTrackingTrack *act_track;
+ bool sel;
+ float xscale, yscale, hsize;
+ unsigned int pos;
+} TrackMotionCurveUserData;
-static void tracking_segment_point_cb(void *UNUSED(userdata), MovieTrackingTrack *UNUSED(track),
+static void tracking_segment_point_cb(void *userdata, MovieTrackingTrack *UNUSED(track),
MovieTrackingMarker *UNUSED(marker), int UNUSED(coord),
int scene_framenr, float val)
{
- glVertex2f(scene_framenr, val);
+ TrackMotionCurveUserData *data = (TrackMotionCurveUserData *) userdata;
+
+ immVertex2f(data->pos, scene_framenr, val);
}
-static void tracking_segment_start_cb(void *userdata, MovieTrackingTrack *track, int coord)
+static void tracking_segment_start_cb(void *userdata, MovieTrackingTrack *track, int coord, bool is_point)
{
- const float colors[2][3] = {
- {1.0f, 0.0f, 0.0f},
- {0.0f, 1.0f, 0.0f},
- };
- float col[4];
+ TrackMotionCurveUserData *data = (TrackMotionCurveUserData *) userdata;
+ float col[4] = {0.0f, 0.0f, 0.0f, 0.0f};
- copy_v3_v3(col, colors[coord]);
+ col[coord] = 1.0f;
- if (track == userdata) {
+ if (track == data->act_track) {
col[3] = 1.0f;
glLineWidth(2.0f);
}
@@ -107,22 +87,22 @@ static void tracking_segment_start_cb(void *userdata, MovieTrackingTrack *track,
glLineWidth(1.0f);
}
- glColor4fv(col);
+ immUniformColor4fv(col);
- glBegin(GL_LINE_STRIP);
+ if (is_point) {
+ immBeginAtMost(GWN_PRIM_POINTS, 1);
+ }
+ else {
+ /* Graph can be composed of smaller segments, if any marker is disabled */
+ immBeginAtMost(GWN_PRIM_LINE_STRIP, track->markersnr);
+ }
}
static void tracking_segment_end_cb(void *UNUSED(userdata), int UNUSED(coord))
{
- glEnd();
+ immEnd();
}
-typedef struct TrackMotionCurveUserData {
- MovieTrackingTrack *act_track;
- bool sel;
- float xscale, yscale, hsize;
-} TrackMotionCurveUserData;
-
static void tracking_segment_knot_cb(void *userdata, MovieTrackingTrack *track,
MovieTrackingMarker *marker, int coord, int scene_framenr, float val)
{
@@ -136,16 +116,19 @@ static void tracking_segment_knot_cb(void *userdata, MovieTrackingTrack *track,
sel = (marker->flag & sel_flag) ? 1 : 0;
if (sel == data->sel) {
- if (sel)
- UI_ThemeColor(TH_HANDLE_VERTEX_SELECT);
- else
- UI_ThemeColor(TH_HANDLE_VERTEX);
+ immUniformThemeColor(sel ? TH_HANDLE_VERTEX_SELECT : TH_HANDLE_VERTEX);
+
+ gpuPushMatrix();
+ gpuTranslate2f(scene_framenr, val);
+ gpuScale2f(1.0f / data->xscale * data->hsize, 1.0f / data->yscale * data->hsize);
- draw_curve_knot(scene_framenr, val, data->xscale, data->yscale, data->hsize);
+ imm_draw_circle_wire_2d(data->pos, 0, 0, 0.7, 8);
+
+ gpuPopMatrix();
}
}
-static void draw_tracks_motion_curves(View2D *v2d, SpaceClip *sc)
+static void draw_tracks_motion_curves(View2D *v2d, SpaceClip *sc, unsigned int pos)
{
MovieClip *clip = ED_space_clip_get_clip(sc);
MovieTracking *tracking = &clip->tracking;
@@ -162,18 +145,18 @@ static void draw_tracks_motion_curves(View2D *v2d, SpaceClip *sc)
userdata.hsize = UI_GetThemeValuef(TH_HANDLE_VERTEX_SIZE);
userdata.sel = false;
userdata.act_track = act_track;
+ userdata.pos = pos;
UI_view2d_scale_get(v2d, &userdata.xscale, &userdata.yscale);
clip_graph_tracking_values_iterate(sc,
(sc->flag & SC_SHOW_GRAPH_SEL_ONLY) != 0,
(sc->flag & SC_SHOW_GRAPH_HIDDEN) != 0,
&userdata, tracking_segment_knot_cb, NULL, NULL);
-
/* draw graph lines */
glEnable(GL_BLEND);
clip_graph_tracking_values_iterate(sc,
(sc->flag & SC_SHOW_GRAPH_SEL_ONLY) != 0,
(sc->flag & SC_SHOW_GRAPH_HIDDEN) != 0,
- act_track, tracking_segment_point_cb, tracking_segment_start_cb,
+ &userdata, tracking_segment_point_cb, tracking_segment_start_cb,
tracking_segment_end_cb);
glDisable(GL_BLEND);
@@ -195,6 +178,7 @@ typedef struct TrackErrorCurveUserData {
float projection_matrix[4][4];
int width, height;
float aspy;
+ unsigned int pos;
} TrackErrorCurveUserData;
static void tracking_error_segment_point_cb(void *userdata,
@@ -230,11 +214,11 @@ static void tracking_error_segment_point_cb(void *userdata,
sub_v2_v2v2(delta, reprojected_position, marker_position);
reprojection_error = len_v2(delta) * weight;
- glVertex2f(scene_framenr, reprojection_error);
+ immVertex2f(data->pos, scene_framenr, reprojection_error);
}
}
-static void tracking_error_segment_start_cb(void *userdata, MovieTrackingTrack *track, int coord)
+static void tracking_error_segment_start_cb(void *userdata, MovieTrackingTrack *track, int coord, bool is_point)
{
if (coord == 1) {
TrackErrorCurveUserData *data = (TrackErrorCurveUserData *) userdata;
@@ -249,20 +233,26 @@ static void tracking_error_segment_start_cb(void *userdata, MovieTrackingTrack *
glLineWidth(1.0f);
}
- glColor4fv(col);
+ immUniformColor4fv(col);
- glBegin(GL_LINE_STRIP);
+ if (is_point) { /* This probably never happens here, but just in case... */
+ immBeginAtMost(GWN_PRIM_POINTS, 1);
+ }
+ else {
+ /* Graph can be composed of smaller segments, if any marker is disabled */
+ immBeginAtMost(GWN_PRIM_LINE_STRIP, track->markersnr);
+ }
}
}
static void tracking_error_segment_end_cb(void *UNUSED(userdata), int coord)
{
if (coord == 1) {
- glEnd();
+ immEnd();
}
}
-static void draw_tracks_error_curves(SpaceClip *sc)
+static void draw_tracks_error_curves(SpaceClip *sc, unsigned int pos)
{
MovieClip *clip = ED_space_clip_get_clip(sc);
MovieTracking *tracking = &clip->tracking;
@@ -273,6 +263,7 @@ static void draw_tracks_error_curves(SpaceClip *sc)
data.tracking_object = BKE_tracking_object_get_active(tracking);
data.active_track = BKE_tracking_track_get_active(tracking);
data.matrix_initialized = false;
+ data.pos = pos;
BKE_movieclip_get_size(clip, &sc->user, &data.width, &data.height);
data.aspy = 1.0f / tracking->camera.pixel_aspect;
@@ -289,37 +280,38 @@ static void draw_tracks_error_curves(SpaceClip *sc)
tracking_error_segment_end_cb);
}
-static void draw_frame_curves(SpaceClip *sc)
+static void draw_frame_curves(SpaceClip *sc, unsigned int pos)
{
MovieClip *clip = ED_space_clip_get_clip(sc);
MovieTracking *tracking = &clip->tracking;
MovieTrackingReconstruction *reconstruction = BKE_tracking_get_active_reconstruction(tracking);
int i, lines = 0, prevfra = 0;
- glColor3f(0.0f, 0.0f, 1.0f);
+ immUniformColor3f(0.0f, 0.0f, 1.0f);
for (i = 0; i < reconstruction->camnr; i++) {
MovieReconstructedCamera *camera = &reconstruction->cameras[i];
int framenr;
if (lines && camera->framenr != prevfra + 1) {
- glEnd();
+ immEnd();
lines = 0;
}
if (!lines) {
- glBegin(GL_LINE_STRIP);
+ immBeginAtMost(GWN_PRIM_LINE_STRIP, reconstruction->camnr);
lines = 1;
}
framenr = BKE_movieclip_remap_clip_to_scene_frame(clip, camera->framenr);
- glVertex2f(framenr, camera->error);
+ immVertex2f(pos, framenr, camera->error);
prevfra = camera->framenr;
}
- if (lines)
- glEnd();
+ if (lines) {
+ immEnd();
+ }
}
void clip_draw_graph(SpaceClip *sc, ARegion *ar, Scene *scene)
@@ -335,14 +327,24 @@ void clip_draw_graph(SpaceClip *sc, ARegion *ar, Scene *scene)
UI_view2d_grid_free(grid);
if (clip) {
- if (sc->flag & SC_SHOW_GRAPH_TRACKS_MOTION)
- draw_tracks_motion_curves(v2d, sc);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ glPointSize(3.0f);
- if (sc->flag & SC_SHOW_GRAPH_TRACKS_ERROR)
- draw_tracks_error_curves(sc);
+ if (sc->flag & SC_SHOW_GRAPH_TRACKS_MOTION) {
+ draw_tracks_motion_curves(v2d, sc, pos);
+ }
+
+ if (sc->flag & SC_SHOW_GRAPH_TRACKS_ERROR) {
+ draw_tracks_error_curves(sc, pos);
+ }
+
+ if (sc->flag & SC_SHOW_GRAPH_FRAMES) {
+ draw_frame_curves(sc, pos);
+ }
- if (sc->flag & SC_SHOW_GRAPH_FRAMES)
- draw_frame_curves(sc);
+ immUnbindProgram();
}
/* frame range */
diff --git a/source/blender/editors/space_clip/clip_graph_ops.c b/source/blender/editors/space_clip/clip_graph_ops.c
index 9ad4fd4642a..e5a3cb6b57b 100644
--- a/source/blender/editors/space_clip/clip_graph_ops.c
+++ b/source/blender/editors/space_clip/clip_graph_ops.c
@@ -37,7 +37,8 @@
#include "BKE_context.h"
#include "BKE_tracking.h"
-#include "BKE_depsgraph.h"
+
+#include "DEG_depsgraph.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -691,7 +692,7 @@ static int graph_disable_markers_exec(bContext *C, wmOperator *op)
}
}
- DAG_id_tag_update(&clip->id, 0);
+ DEG_id_tag_update(&clip->id, 0);
WM_event_add_notifier(C, NC_MOVIECLIP | NA_EVALUATED, clip);
diff --git a/source/blender/editors/space_clip/clip_intern.h b/source/blender/editors/space_clip/clip_intern.h
index ae15834a1d9..b0d00744558 100644
--- a/source/blender/editors/space_clip/clip_intern.h
+++ b/source/blender/editors/space_clip/clip_intern.h
@@ -125,12 +125,12 @@ void ED_clip_tool_props_register(struct ARegionType *art);
/* clip_utils.c */
void clip_graph_tracking_values_iterate_track(struct SpaceClip *sc, struct MovieTrackingTrack *track, void *userdata,
void (*func)(void *userdata, struct MovieTrackingTrack *track, struct MovieTrackingMarker *marker, int coord, int scene_framenr, float val),
- void (*segment_start)(void *userdata, struct MovieTrackingTrack *track, int coord),
+ void (*segment_start)(void *userdata, struct MovieTrackingTrack *track, int coord, bool is_point),
void (*segment_end)(void *userdata, int coord));
void clip_graph_tracking_values_iterate(struct SpaceClip *sc, bool selected_only, bool include_hidden, void *userdata,
void (*func)(void *userdata, struct MovieTrackingTrack *track, struct MovieTrackingMarker *marker, int coord, int scene_framenr, float val),
- void (*segment_start)(void *userdata, struct MovieTrackingTrack *track, int coord),
+ void (*segment_start)(void *userdata, struct MovieTrackingTrack *track, int coord, bool is_point),
void (*segment_end)(void *userdata, int coord));
void clip_graph_tracking_iterate(struct SpaceClip *sc, bool selected_only, bool include_hidden, void *userdata,
diff --git a/source/blender/editors/space_clip/clip_ops.c b/source/blender/editors/space_clip/clip_ops.c
index 7d8dd629562..4afec844f6d 100644
--- a/source/blender/editors/space_clip/clip_ops.c
+++ b/source/blender/editors/space_clip/clip_ops.c
@@ -56,7 +56,6 @@
#include "BKE_context.h"
#include "BKE_global.h"
-#include "BKE_depsgraph.h"
#include "BKE_report.h"
#include "BKE_library.h"
#include "BKE_main.h"
@@ -83,6 +82,8 @@
#include "PIL_time.h"
+#include "DEG_depsgraph_build.h"
+
#include "clip_intern.h" // own include
/******************** view navigation utilities *********************/
@@ -248,7 +249,7 @@ static int open_exec(bContext *C, wmOperator *op)
WM_event_add_notifier(C, NC_MOVIECLIP | NA_ADDED, clip);
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
MEM_freeN(op->customdata);
return OPERATOR_FINISHED;
diff --git a/source/blender/editors/space_clip/clip_utils.c b/source/blender/editors/space_clip/clip_utils.c
index e7853cb2a0c..7f9d9bf577c 100644
--- a/source/blender/editors/space_clip/clip_utils.c
+++ b/source/blender/editors/space_clip/clip_utils.c
@@ -41,10 +41,11 @@
#include "BKE_context.h"
#include "BKE_movieclip.h"
#include "BKE_tracking.h"
-#include "BKE_depsgraph.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
+#include "DEG_depsgraph.h"
+
+#include "GPU_immediate.h"
+#include "GPU_matrix.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -52,7 +53,6 @@
#include "ED_screen.h"
#include "ED_clip.h"
-
#include "UI_interface.h"
#include "UI_resources.h"
#include "UI_view2d.h"
@@ -63,7 +63,7 @@ void clip_graph_tracking_values_iterate_track(
SpaceClip *sc, MovieTrackingTrack *track, void *userdata,
void (*func)(void *userdata, MovieTrackingTrack *track, MovieTrackingMarker *marker, int coord,
int scene_framenr, float val),
- void (*segment_start)(void *userdata, MovieTrackingTrack *track, int coord),
+ void (*segment_start)(void *userdata, MovieTrackingTrack *track, int coord, bool is_point),
void (*segment_end)(void *userdata, int coord))
{
MovieClip *clip = ED_space_clip_get_clip(sc);
@@ -92,8 +92,14 @@ void clip_graph_tracking_values_iterate_track(
}
if (!open) {
- if (segment_start)
- segment_start(userdata, track, coord);
+ if (segment_start) {
+ if ((i + 1) == track->markersnr) {
+ segment_start(userdata, track, coord, true);
+ }
+ else {
+ segment_start(userdata, track, coord, (track->markers[i + 1].flag & MARKER_DISABLED));
+ }
+ }
open = true;
prevval = marker->pos[coord];
@@ -124,7 +130,7 @@ void clip_graph_tracking_values_iterate(
SpaceClip *sc, bool selected_only, bool include_hidden, void *userdata,
void (*func)(void *userdata, MovieTrackingTrack *track, MovieTrackingMarker *marker,
int coord, int scene_framenr, float val),
- void (*segment_start)(void *userdata, MovieTrackingTrack *track, int coord),
+ void (*segment_start)(void *userdata, MovieTrackingTrack *track, int coord, bool is_point),
void (*segment_end)(void *userdata, int coord))
{
MovieClip *clip = ED_space_clip_get_clip(sc);
@@ -204,11 +210,11 @@ void clip_delete_track(bContext *C, MovieClip *clip, MovieTrackingTrack *track)
if (used_for_stabilization) {
WM_event_add_notifier(C, NC_MOVIECLIP | ND_DISPLAY, clip);
}
+ /* Inform dependency graph. */
+ DEG_id_tag_update(&clip->id, 0);
if (has_bundle) {
WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, NULL);
}
- /* Inform dependency graph. */
- DAG_id_tag_update(&clip->id, 0);
}
void clip_delete_marker(bContext *C, MovieClip *clip, MovieTrackingTrack *track,
@@ -243,7 +249,7 @@ void clip_delete_plane_track(bContext *C,
/* TODO(sergey): Any notifiers to be sent here? */
(void) C;
/* Inform dependency graph. */
- DAG_id_tag_update(&clip->id, 0);
+ DEG_id_tag_update(&clip->id, 0);
}
void clip_view_center_to_point(SpaceClip *sc, float x, float y)
@@ -260,31 +266,35 @@ void clip_view_center_to_point(SpaceClip *sc, float x, float y)
void clip_draw_cfra(SpaceClip *sc, ARegion *ar, Scene *scene)
{
+ /* Draw a light green line to indicate current frame */
View2D *v2d = &ar->v2d;
- float xscale, yscale;
+ float x = (float)(sc->user.framenr * scene->r.framelen);
- /* Draw a light green line to indicate current frame */
- UI_ThemeColor(TH_CFRAME);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
- float x = (float)(sc->user.framenr * scene->r.framelen);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformThemeColor(TH_CFRAME);
+ glLineWidth(2.0f);
- glLineWidth(2.0);
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2f(pos, x, v2d->cur.ymin);
+ immVertex2f(pos, x, v2d->cur.ymax);
+ immEnd();
- glBegin(GL_LINES);
- glVertex2f(x, v2d->cur.ymin);
- glVertex2f(x, v2d->cur.ymax);
- glEnd();
+ immUnbindProgram();
UI_view2d_view_orthoSpecial(ar, v2d, 1);
/* because the frame number text is subject to the same scaling as the contents of the view */
- UI_view2d_scale_get(v2d, &xscale, &yscale);
- glScalef(1.0f / xscale, 1.0f, 1.0f);
+ float xscale;
+ UI_view2d_scale_get(v2d, &xscale, NULL);
+ gpuPushMatrix();
+ gpuScale2f(1.0f / xscale, 1.0f);
ED_region_cache_draw_curfra_label(sc->user.framenr, (float)sc->user.framenr * xscale, 18);
/* restore view transform */
- glScalef(xscale, 1.0, 1.0);
+ gpuPopMatrix();
}
void clip_draw_sfra_efra(View2D *v2d, Scene *scene)
@@ -294,15 +304,27 @@ void clip_draw_sfra_efra(View2D *v2d, Scene *scene)
/* currently clip editor supposes that editing clip length is equal to scene frame range */
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
- glColor4f(0.0f, 0.0f, 0.0f, 0.4f);
- glRectf(v2d->cur.xmin, v2d->cur.ymin, (float)SFRA, v2d->cur.ymax);
- glRectf((float)EFRA, v2d->cur.ymin, v2d->cur.xmax, v2d->cur.ymax);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ immUniformColor4f(0.0f, 0.0f, 0.0f, 0.4f);
+ immRectf(pos, v2d->cur.xmin, v2d->cur.ymin, (float)SFRA, v2d->cur.ymax);
+ immRectf(pos, (float)EFRA, v2d->cur.ymin, v2d->cur.xmax, v2d->cur.ymax);
+
glDisable(GL_BLEND);
- UI_ThemeColorShade(TH_BACK, -60);
+ immUniformThemeColorShade(TH_BACK, -60);
/* thin lines where the actual frames are */
- fdrawline((float)SFRA, v2d->cur.ymin, (float)SFRA, v2d->cur.ymax);
- fdrawline((float)EFRA, v2d->cur.ymin, (float)EFRA, v2d->cur.ymax);
+ glLineWidth(1.0f);
+
+ immBegin(GWN_PRIM_LINES, 4);
+ immVertex2f(pos, (float)SFRA, v2d->cur.ymin);
+ immVertex2f(pos, (float)SFRA, v2d->cur.ymax);
+ immVertex2f(pos, (float)EFRA, v2d->cur.ymin);
+ immVertex2f(pos, (float)EFRA, v2d->cur.ymax);
+ immEnd();
+
+ immUnbindProgram();
}
diff --git a/source/blender/editors/space_clip/space_clip.c b/source/blender/editors/space_clip/space_clip.c
index 58930fa2cf2..478254fb165 100644
--- a/source/blender/editors/space_clip/space_clip.c
+++ b/source/blender/editors/space_clip/space_clip.c
@@ -60,7 +60,8 @@
#include "IMB_imbuf.h"
-#include "BIF_gl.h"
+#include "GPU_glew.h"
+#include "GPU_matrix.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -329,7 +330,8 @@ static SpaceLink *clip_duplicate(SpaceLink *sl)
return (SpaceLink *)scn;
}
-static void clip_listener(bScreen *UNUSED(sc), ScrArea *sa, wmNotifier *wmn)
+static void clip_listener(bScreen *UNUSED(sc), ScrArea *sa, wmNotifier *wmn, Scene *UNUSED(scene),
+ WorkSpace *UNUSED(workspace))
{
/* context changes */
switch (wmn->category) {
@@ -1214,13 +1216,13 @@ static void clip_main_region_draw(const bContext *C, ARegion *ar)
show_cursor |= sc->around == V3D_AROUND_CURSOR;
if (show_cursor) {
- glPushMatrix();
- glTranslatef(x, y, 0);
- glScalef(zoomx, zoomy, 0);
- glMultMatrixf(sc->stabmat);
- glScalef(width, height, 0);
+ gpuPushMatrix();
+ gpuTranslate2f(x, y);
+ gpuScale2f(zoomx, zoomy);
+ gpuMultMatrix(sc->stabmat);
+ gpuScale2f(width, height);
ED_image_draw_cursor(ar, sc->cursor);
- glPopMatrix();
+ gpuPopMatrix();
}
clip_draw_cache_and_notes(C, sc, ar);
@@ -1239,7 +1241,9 @@ static void clip_main_region_draw(const bContext *C, ARegion *ar)
}
}
-static void clip_main_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+static void clip_main_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar,
+ wmNotifier *wmn, const Scene *UNUSED(scene))
{
/* context changes */
switch (wmn->category) {
@@ -1350,7 +1354,9 @@ static void clip_preview_region_draw(const bContext *C, ARegion *ar)
dopesheet_region_draw(C, ar);
}
-static void clip_preview_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *UNUSED(ar), wmNotifier *UNUSED(wmn))
+static void clip_preview_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *UNUSED(ar),
+ wmNotifier *UNUSED(wmn), const Scene *UNUSED(scene))
{
}
@@ -1391,7 +1397,9 @@ static void clip_channels_region_draw(const bContext *C, ARegion *ar)
UI_view2d_view_restore(C);
}
-static void clip_channels_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *UNUSED(ar), wmNotifier *UNUSED(wmn))
+static void clip_channels_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *UNUSED(ar),
+ wmNotifier *UNUSED(wmn), const Scene *UNUSED(scene))
{
}
@@ -1408,7 +1416,9 @@ static void clip_header_region_draw(const bContext *C, ARegion *ar)
ED_region_header(C, ar);
}
-static void clip_header_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+static void clip_header_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar,
+ wmNotifier *wmn, const Scene *UNUSED(scene))
{
/* context changes */
switch (wmn->category) {
@@ -1448,7 +1458,9 @@ static void clip_tools_region_draw(const bContext *C, ARegion *ar)
/****************** tool properties region ******************/
-static void clip_props_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+static void clip_props_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar,
+ wmNotifier *wmn, const Scene *UNUSED(scene))
{
/* context changes */
switch (wmn->category) {
@@ -1493,7 +1505,9 @@ static void clip_properties_region_draw(const bContext *C, ARegion *ar)
ED_region_panels(C, ar, NULL, -1, true);
}
-static void clip_properties_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+static void clip_properties_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar,
+ wmNotifier *wmn, const Scene *UNUSED(scene))
{
/* context changes */
switch (wmn->category) {
diff --git a/source/blender/editors/space_clip/tracking_ops.c b/source/blender/editors/space_clip/tracking_ops.c
index 2ec4f96931f..4ca2b54eaaf 100644
--- a/source/blender/editors/space_clip/tracking_ops.c
+++ b/source/blender/editors/space_clip/tracking_ops.c
@@ -42,10 +42,11 @@
#include "BKE_context.h"
#include "BKE_movieclip.h"
#include "BKE_tracking.h"
-#include "BKE_depsgraph.h"
#include "BKE_report.h"
#include "BKE_sound.h"
+#include "DEG_depsgraph.h"
+
#include "WM_api.h"
#include "WM_types.h"
@@ -898,7 +899,7 @@ static int slide_marker_modal(bContext *C, wmOperator *op, const wmEvent *event)
}
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
- DAG_id_tag_update(&sc->clip->id, 0);
+ DEG_id_tag_update(&sc->clip->id, 0);
}
else if (data->area == TRACK_AREA_PAT) {
if (data->action == SLIDE_ACTION_SIZE) {
@@ -1193,7 +1194,7 @@ static int disable_markers_exec(bContext *C, wmOperator *op)
}
}
- DAG_id_tag_update(&clip->id, 0);
+ DEG_id_tag_update(&clip->id, 0);
WM_event_add_notifier(C, NC_MOVIECLIP | NA_EVALUATED, clip);
diff --git a/source/blender/editors/space_clip/tracking_ops_orient.c b/source/blender/editors/space_clip/tracking_ops_orient.c
index 71a5a825b0e..8e3871836e4 100644
--- a/source/blender/editors/space_clip/tracking_ops_orient.c
+++ b/source/blender/editors/space_clip/tracking_ops_orient.c
@@ -43,10 +43,12 @@
#include "BKE_constraint.h"
#include "BKE_tracking.h"
#include "BKE_global.h"
-#include "BKE_depsgraph.h"
+#include "BKE_layer.h"
#include "BKE_object.h"
#include "BKE_report.h"
+#include "DEG_depsgraph.h"
+
#include "WM_api.h"
#include "WM_types.h"
@@ -69,17 +71,16 @@ static Object *get_camera_with_movieclip(Scene *scene, MovieClip *clip)
return camera;
}
- for (Base *base = scene->base.first;
- base != NULL;
- base = base->next)
+ FOREACH_SCENE_OBJECT(scene, ob)
{
- if (base->object->type == OB_CAMERA) {
- if (BKE_object_movieclip_get(scene, base->object, false) == clip) {
- camera = base->object;
+ if (ob->type == OB_CAMERA) {
+ if (BKE_object_movieclip_get(scene, ob, false) == clip) {
+ camera = ob;
break;
}
}
}
+ FOREACH_SCENE_OBJECT_END
return camera;
}
@@ -87,6 +88,7 @@ static Object *get_camera_with_movieclip(Scene *scene, MovieClip *clip)
static Object *get_orientation_object(bContext *C)
{
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
SpaceClip *sc = CTX_wm_space_clip(C);
MovieClip *clip = ED_space_clip_get_clip(sc);
MovieTracking *tracking = &clip->tracking;
@@ -97,7 +99,7 @@ static Object *get_orientation_object(bContext *C)
object = get_camera_with_movieclip(scene, clip);
}
else {
- object = OBACT;
+ object = OBACT(view_layer);
}
if (object != NULL && object->parent != NULL) {
@@ -111,7 +113,7 @@ static int set_orientation_poll(bContext *C)
{
SpaceClip *sc = CTX_wm_space_clip(C);
if (sc != NULL) {
- Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
MovieClip *clip = ED_space_clip_get_clip(sc);
if (clip != NULL) {
MovieTracking *tracking = &clip->tracking;
@@ -120,7 +122,7 @@ static int set_orientation_poll(bContext *C)
return true;
}
else {
- return OBACT != NULL;
+ return OBACT(view_layer) != NULL;
}
}
}
@@ -247,8 +249,8 @@ static int set_origin_exec(bContext *C, wmOperator *op)
copy_v3_v3(object->loc, vec);
}
- DAG_id_tag_update(&clip->id, 0);
- DAG_id_tag_update(&object->id, OB_RECALC_OB);
+ DEG_id_tag_update(&clip->id, 0);
+ DEG_id_tag_update(&object->id, OB_RECALC_OB);
WM_event_add_notifier(C, NC_MOVIECLIP | NA_EVALUATED, clip);
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
@@ -404,6 +406,7 @@ static int set_plane_exec(bContext *C, wmOperator *op)
ListBase *tracksbase;
Object *object;
Object *camera = get_camera_with_movieclip(scene, clip);
+ EvaluationContext eval_ctx;
int tot = 0;
float vec[3][3], mat[4][4], obmat[4][4], newmat[4][4], orig[3] = {0.0f, 0.0f, 0.0f};
int plane = RNA_enum_get(op->ptr, "plane");
@@ -428,6 +431,8 @@ static int set_plane_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
+ CTX_data_eval_ctx(C, &eval_ctx);
+
BKE_tracking_get_camera_object_matrix(scene, camera, mat);
/* Get 3 bundles to use as reference. */
@@ -490,11 +495,11 @@ static int set_plane_exec(bContext *C, wmOperator *op)
BKE_object_apply_mat4(object, mat, 0, 0);
}
- BKE_object_where_is_calc(scene, object);
+ BKE_object_where_is_calc(&eval_ctx, scene, object);
set_axis(scene, object, clip, tracking_object, axis_track, 'X');
- DAG_id_tag_update(&clip->id, 0);
- DAG_id_tag_update(&object->id, OB_RECALC_OB);
+ DEG_id_tag_update(&clip->id, 0);
+ DEG_id_tag_update(&object->id, OB_RECALC_OB);
WM_event_add_notifier(C, NC_MOVIECLIP | NA_EVALUATED, clip);
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
@@ -567,8 +572,8 @@ static int set_axis_exec(bContext *C, wmOperator *op)
set_axis(scene, object, clip, tracking_object, track, axis == 0 ? 'X' : 'Y');
- DAG_id_tag_update(&clip->id, 0);
- DAG_id_tag_update(&object->id, OB_RECALC_OB);
+ DEG_id_tag_update(&clip->id, 0);
+ DEG_id_tag_update(&object->id, OB_RECALC_OB);
WM_event_add_notifier(C, NC_MOVIECLIP | NA_EVALUATED, clip);
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
@@ -694,10 +699,10 @@ static int do_set_scale(bContext *C,
tracking_object->scale = scale;
}
- DAG_id_tag_update(&clip->id, 0);
+ DEG_id_tag_update(&clip->id, 0);
if (object)
- DAG_id_tag_update(&object->id, OB_RECALC_OB);
+ DEG_id_tag_update(&object->id, OB_RECALC_OB);
WM_event_add_notifier(C, NC_MOVIECLIP | NA_EVALUATED, clip);
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
diff --git a/source/blender/editors/space_clip/tracking_ops_plane.c b/source/blender/editors/space_clip/tracking_ops_plane.c
index aa8518befaa..6c85bdfc4ec 100644
--- a/source/blender/editors/space_clip/tracking_ops_plane.c
+++ b/source/blender/editors/space_clip/tracking_ops_plane.c
@@ -39,9 +39,10 @@
#include "BKE_context.h"
#include "BKE_tracking.h"
-#include "BKE_depsgraph.h"
#include "BKE_report.h"
+#include "DEG_depsgraph.h"
+
#include "WM_api.h"
#include "WM_types.h"
@@ -372,7 +373,7 @@ static int slide_plane_marker_modal(bContext *C,
data->previous_mval[1] = event->mval[1];
copy_v2_v2(data->previous_corner, data->corner);
- DAG_id_tag_update(&sc->clip->id, 0);
+ DEG_id_tag_update(&sc->clip->id, 0);
WM_event_add_notifier(C, NC_MOVIECLIP | NA_EDITED, NULL);
@@ -390,7 +391,7 @@ static int slide_plane_marker_modal(bContext *C,
clip_tracking_show_cursor(C);
- DAG_id_tag_update(&sc->clip->id, 0);
+ DEG_id_tag_update(&sc->clip->id, 0);
WM_event_add_notifier(C, NC_MOVIECLIP | NA_EDITED, clip);
return OPERATOR_FINISHED;
diff --git a/source/blender/editors/space_clip/tracking_ops_solve.c b/source/blender/editors/space_clip/tracking_ops_solve.c
index 5c74c1947e3..89dfadc8974 100644
--- a/source/blender/editors/space_clip/tracking_ops_solve.c
+++ b/source/blender/editors/space_clip/tracking_ops_solve.c
@@ -43,10 +43,11 @@
#include "BKE_movieclip.h"
#include "BKE_tracking.h"
#include "BKE_global.h"
-#include "BKE_depsgraph.h"
#include "BKE_report.h"
#include "BKE_library.h"
+#include "DEG_depsgraph.h"
+
#include "WM_api.h"
#include "WM_types.h"
@@ -180,7 +181,7 @@ static void solve_camera_freejob(void *scv)
MEM_freeN(tracking->stats);
tracking->stats = NULL;
- DAG_id_tag_update(&clip->id, 0);
+ DEG_id_tag_update(&clip->id, 0);
WM_main_add_notifier(NC_MOVIECLIP | NA_EVALUATED, clip);
WM_main_add_notifier(NC_OBJECT | ND_TRANSFORM, NULL);
@@ -327,7 +328,7 @@ static int clear_solution_exec(bContext *C, wmOperator *UNUSED(op))
reconstruction->camnr = 0;
reconstruction->flag &= ~TRACKING_RECONSTRUCTED;
- DAG_id_tag_update(&clip->id, 0);
+ DEG_id_tag_update(&clip->id, 0);
WM_event_add_notifier(C, NC_MOVIECLIP | NA_EVALUATED, clip);
WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, NULL);
diff --git a/source/blender/editors/space_clip/tracking_ops_stabilize.c b/source/blender/editors/space_clip/tracking_ops_stabilize.c
index 35b1aead343..4eb6a4fbb24 100644
--- a/source/blender/editors/space_clip/tracking_ops_stabilize.c
+++ b/source/blender/editors/space_clip/tracking_ops_stabilize.c
@@ -38,7 +38,8 @@
#include "BKE_context.h"
#include "BKE_tracking.h"
-#include "BKE_depsgraph.h"
+
+#include "DEG_depsgraph.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -84,7 +85,7 @@ static int stabilize_2d_add_exec(bContext *C, wmOperator *UNUSED(op))
}
if (update) {
- DAG_id_tag_update(&clip->id, 0);
+ DEG_id_tag_update(&clip->id, 0);
WM_event_add_notifier(C, NC_MOVIECLIP | ND_DISPLAY, clip);
}
@@ -138,7 +139,7 @@ static int stabilize_2d_remove_exec(bContext *C, wmOperator *UNUSED(op))
}
if (update) {
- DAG_id_tag_update(&clip->id, 0);
+ DEG_id_tag_update(&clip->id, 0);
WM_event_add_notifier(C, NC_MOVIECLIP | ND_DISPLAY, clip);
}
@@ -227,7 +228,7 @@ static int stabilize_2d_rotation_add_exec(bContext *C, wmOperator *UNUSED(op))
}
if (update) {
- DAG_id_tag_update(&clip->id, 0);
+ DEG_id_tag_update(&clip->id, 0);
WM_event_add_notifier(C, NC_MOVIECLIP | ND_DISPLAY, clip);
}
@@ -281,7 +282,7 @@ static int stabilize_2d_rotation_remove_exec(bContext *C, wmOperator *UNUSED(op)
}
if (update) {
- DAG_id_tag_update(&clip->id, 0);
+ DEG_id_tag_update(&clip->id, 0);
WM_event_add_notifier(C, NC_MOVIECLIP | ND_DISPLAY, clip);
}
diff --git a/source/blender/editors/space_clip/tracking_ops_track.c b/source/blender/editors/space_clip/tracking_ops_track.c
index 0dd0ee8c7d4..cd8e92c9b9c 100644
--- a/source/blender/editors/space_clip/tracking_ops_track.c
+++ b/source/blender/editors/space_clip/tracking_ops_track.c
@@ -297,7 +297,8 @@ static void track_markers_endjob(void *tmv)
tmj->scene->r.cfra = BKE_movieclip_remap_clip_to_scene_frame(tmj->clip,
tmj->lastfra);
if (wm != NULL) {
- ED_update_for_newframe(tmj->main, tmj->scene, 0);
+ // XXX: ...
+ // ED_update_for_newframe(tmj->main, tmj->scene);
}
BKE_autotrack_context_sync(tmj->context);
diff --git a/source/blender/editors/space_console/console_draw.c b/source/blender/editors/space_console/console_draw.c
index 6396b390ca0..c8a06545e0f 100644
--- a/source/blender/editors/space_console/console_draw.c
+++ b/source/blender/editors/space_console/console_draw.c
@@ -40,6 +40,7 @@
#include "MEM_guardedalloc.h"
#include "BIF_gl.h"
+#include "GPU_immediate.h"
#include "UI_interface.h"
#include "UI_resources.h"
@@ -157,6 +158,8 @@ static int console_textview_line_color(struct TextViewContext *tvc, unsigned cha
int offl = 0, offc = 0;
int xy[2] = {CONSOLE_DRAW_MARGIN, CONSOLE_DRAW_MARGIN};
int pen[2];
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
xy[1] += tvc->lheight / 6;
console_cursor_wrap_offset(sc->prompt, tvc->console_width, &offl, &offc, NULL);
@@ -168,14 +171,17 @@ static int console_textview_line_color(struct TextViewContext *tvc, unsigned cha
pen[1] += tvc->lheight * offl;
/* cursor */
- UI_GetThemeColor3ubv(TH_CONSOLE_CURSOR, fg);
- glColor3ubv(fg);
-
- glRecti((xy[0] + pen[0]) - 1,
- (xy[1] + pen[1]),
- (xy[0] + pen[0]) + 1,
- (xy[1] + pen[1] + tvc->lheight)
- );
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformThemeColor(TH_CONSOLE_CURSOR);
+
+ immRectf(pos,
+ (xy[0] + pen[0]) - 1,
+ (xy[1] + pen[1]),
+ (xy[0] + pen[0]) + 1,
+ (xy[1] + pen[1] + tvc->lheight)
+ );
+
+ immUnbindProgram();
}
console_line_color(fg, cl_iter->type);
diff --git a/source/blender/editors/space_console/space_console.c b/source/blender/editors/space_console/space_console.c
index 97a85bce006..9a2f4b5d431 100644
--- a/source/blender/editors/space_console/space_console.c
+++ b/source/blender/editors/space_console/space_console.c
@@ -368,7 +368,9 @@ static void console_header_region_draw(const bContext *C, ARegion *ar)
ED_region_header(C, ar);
}
-static void console_main_region_listener(bScreen *UNUSED(sc), ScrArea *sa, ARegion *ar, wmNotifier *wmn)
+static void console_main_region_listener(
+ bScreen *UNUSED(sc), ScrArea *sa, ARegion *ar,
+ wmNotifier *wmn, const Scene *UNUSED(scene))
{
// SpaceInfo *sinfo = sa->spacedata.first;
diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c
index 52d01063175..c1e298c426f 100644
--- a/source/blender/editors/space_file/file_draw.c
+++ b/source/blender/editors/space_file/file_draw.c
@@ -42,7 +42,6 @@
# include "BLI_winstuff.h"
#endif
-#include "BIF_gl.h"
#include "BIF_glutil.h"
#include "BKE_context.h"
@@ -71,6 +70,9 @@
#include "WM_api.h"
#include "WM_types.h"
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+
#include "filelist.h"
#include "file_intern.h" // own include
@@ -258,9 +260,10 @@ void file_draw_buttons(const bContext *C, ARegion *ar)
static void draw_tile(int sx, int sy, int width, int height, int colorid, int shade)
{
- UI_ThemeColorShade(colorid, shade);
+ float color[4];
+ UI_GetThemeColorShade4fv(colorid, shade, color);
UI_draw_roundbox_corner_set(UI_CNR_ALL);
- UI_draw_roundbox((float)sx, (float)(sy - height), (float)(sx + width), (float)sy, 5.0f);
+ UI_draw_roundbox_aa(true, (float)sx, (float)(sy - height), (float)(sx + width), (float)sy, 5.0f, color);
}
@@ -285,7 +288,8 @@ static void file_draw_icon(uiBlock *block, const char *path, int sx, int sy, int
}
-static void file_draw_string(int sx, int sy, const char *string, float width, int height, short align)
+static void file_draw_string(int sx, int sy, const char *string, float width, int height, short align,
+ const unsigned char col[4])
{
uiStyle *style;
uiFontStyle fs;
@@ -310,7 +314,7 @@ static void file_draw_string(int sx, int sy, const char *string, float width, in
rect.ymin = sy - height;
rect.ymax = sy;
- UI_fontstyle_draw(&fs, &rect, fname);
+ UI_fontstyle_draw(&fs, &rect, fname, col);
}
void file_calc_previews(const bContext *C, ARegion *ar)
@@ -335,6 +339,7 @@ static void file_draw_preview(
float scale;
int ex, ey;
bool use_dropshadow = !is_icon && (typeflags & FILE_TYPE_IMAGE);
+ float col[4] = {1.0f, 1.0f, 1.0f, 1.0f};
BLI_assert(imb != NULL);
@@ -381,12 +386,12 @@ static void file_draw_preview(
/* the image */
if (!is_icon && typeflags & FILE_TYPE_FTFONT) {
- UI_ThemeColor(TH_TEXT);
- }
- else {
- glColor4f(1.0, 1.0, 1.0, 1.0);
+ UI_GetThemeColor4fv(TH_TEXT, col);
}
- glaDrawPixelsTexScaled((float)xco, (float)yco, imb->x, imb->y, GL_RGBA, GL_UNSIGNED_BYTE, GL_NEAREST, imb->rect, scale, scale);
+
+ IMMDrawPixelsTexState state = immDrawPixelsTexSetup(GPU_SHADER_2D_IMAGE_COLOR);
+ immDrawPixelsTexScaled(&state, (float)xco, (float)yco, imb->x, imb->y, GL_RGBA, GL_UNSIGNED_BYTE, GL_NEAREST, imb->rect,
+ scale, scale, 1.0f, 1.0f, col);
if (icon) {
UI_icon_draw_aspect((float)xco, (float)yco, icon, icon_aspect, 1.0f);
@@ -394,8 +399,13 @@ static void file_draw_preview(
/* border */
if (use_dropshadow) {
- glColor4f(0.0f, 0.0f, 0.0f, 0.4f);
- fdrawbox((float)xco, (float)yco, (float)(xco + ex), (float)(yco + ey));
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor4f(0.0f, 0.0f, 0.0f, 0.4f);
+ imm_draw_box_wire_2d(pos, (float)xco, (float)yco, (float)(xco + ex), (float)(yco + ey));
+ immUnbindProgram();
}
but = uiDefBut(block, UI_BTYPE_LABEL, 0, "", xco, yco, ex, ey, NULL, 0.0, 0.0, 0, 0, NULL);
@@ -451,49 +461,70 @@ static void draw_background(FileLayout *layout, View2D *v2d)
int i;
int sy;
- UI_ThemeColorShade(TH_BACK, -7);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformThemeColorShade(TH_BACK, -7);
/* alternating flat shade background */
for (i = 0; (i <= layout->rows); i += 2) {
sy = (int)v2d->cur.ymax - i * (layout->tile_h + 2 * layout->tile_border_y) - layout->tile_border_y;
- glRectf(v2d->cur.xmin, (float)sy, v2d->cur.xmax, (float)(sy + layout->tile_h + 2 * layout->tile_border_y));
-
+ immRectf(pos, v2d->cur.xmin, (float)sy, v2d->cur.xmax, (float)(sy + layout->tile_h + 2 * layout->tile_border_y));
}
+
+ immUnbindProgram();
}
static void draw_dividers(FileLayout *layout, View2D *v2d)
{
+ /* vertical column dividers */
+
const int step = (layout->tile_w + 2 * layout->tile_border_x);
- int v1[2], v2[2];
- int sx;
- unsigned char col_hi[3], col_lo[3];
- UI_GetThemeColorShade3ubv(TH_BACK, 30, col_hi);
- UI_GetThemeColorShade3ubv(TH_BACK, -30, col_lo);
+ unsigned int vertex_ct = 0;
+ int sx = (int)v2d->tot.xmin;
+ while (sx < v2d->cur.xmax) {
+ sx += step;
+ vertex_ct += 4; /* vertex_count = 2 points per line * 2 lines per divider */
+ }
- v1[1] = v2d->cur.ymax - layout->tile_border_y;
- v2[1] = v2d->cur.ymin;
+ if (vertex_ct > 0) {
+ int v1[2], v2[2];
+ unsigned char col_hi[3], col_lo[3];
- glBegin(GL_LINES);
+ UI_GetThemeColorShade3ubv(TH_BACK, 30, col_hi);
+ UI_GetThemeColorShade3ubv(TH_BACK, -30, col_lo);
- /* vertical column dividers */
- sx = (int)v2d->tot.xmin;
- while (sx < v2d->cur.xmax) {
- sx += step;
+ v1[1] = v2d->cur.ymax - layout->tile_border_y;
+ v2[1] = v2d->cur.ymin;
- glColor3ubv(col_lo);
- v1[0] = v2[0] = sx;
- glVertex2iv(v1);
- glVertex2iv(v2);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
- glColor3ubv(col_hi);
- v1[0] = v2[0] = sx + 1;
- glVertex2iv(v1);
- glVertex2iv(v2);
- }
+ immBindBuiltinProgram(GPU_SHADER_2D_FLAT_COLOR);
+ immBegin(GWN_PRIM_LINES, vertex_ct);
+
+ sx = (int)v2d->tot.xmin;
+ while (sx < v2d->cur.xmax) {
+ sx += step;
+
+ v1[0] = v2[0] = sx;
+ immSkipAttrib(color);
+ immVertex2iv(pos, v1);
+ immAttrib3ubv(color, col_lo);
+ immVertex2iv(pos, v2);
- glEnd();
+ v1[0] = v2[0] = sx + 1;
+ immSkipAttrib(color);
+ immVertex2iv(pos, v1);
+ immAttrib3ubv(color, col_hi);
+ immVertex2iv(pos, v2);
+ }
+
+ immEnd();
+ immUnbindProgram();
+ }
}
void file_draw_list(const bContext *C, ARegion *ar)
@@ -517,6 +548,7 @@ void file_draw_list(const bContext *C, ARegion *ar)
short align;
bool do_drag;
int column_space = 0.6f * UI_UNIT_X;
+ unsigned char text_col[4];
const bool small_size = SMALL_SIZE_CHECK(params->thumbnail_size);
const bool update_stat_strings = small_size != SMALL_SIZE_CHECK(layout->curr_size);
const float thumb_icon_aspect = sqrtf(64.0f / (float)(params->thumbnail_size));
@@ -587,9 +619,6 @@ void file_draw_list(const bContext *C, ARegion *ar)
BLI_join_dirfile(path, sizeof(path), root, file->relpath);
- UI_ThemeColor4(TH_TEXT);
-
-
if (!(file_selflag & FILE_SEL_EDITING)) {
if ((params->highlight_file == i) || (file_selflag & FILE_SEL_HIGHLIGHTED) ||
(file_selflag & FILE_SEL_SELECTED))
@@ -625,7 +654,7 @@ void file_draw_list(const bContext *C, ARegion *ar)
sx += ICON_DEFAULT_WIDTH_SCALE + 0.2f * UI_UNIT_X;
}
- UI_ThemeColor4(TH_TEXT);
+ UI_GetThemeColor4ubv(TH_TEXT, text_col);
if (file_selflag & FILE_SEL_EDITING) {
uiBut *but;
@@ -656,7 +685,7 @@ void file_draw_list(const bContext *C, ARegion *ar)
if (!(file_selflag& FILE_SEL_EDITING)) {
int tpos = (FILE_IMGDISPLAY == params->display) ? sy - layout->tile_h + layout->textheight : sy;
- file_draw_string(sx + 1, tpos, file->name, (float)textwidth, textheight, align);
+ file_draw_string(sx + 1, tpos, file->name, (float)textwidth, textheight, align, text_col);
}
sx += (int)layout->column_widths[COLUMN_NAME] + column_space;
@@ -668,7 +697,8 @@ void file_draw_list(const bContext *C, ARegion *ar)
BLI_filelist_entry_size_to_string(NULL, file->entry->size, small_size, file->entry->size_str);
}
file_draw_string(
- sx, sy, file->entry->size_str, layout->column_widths[COLUMN_SIZE], layout->tile_h, align);
+ sx, sy, file->entry->size_str, layout->column_widths[COLUMN_SIZE], layout->tile_h,
+ align, text_col);
}
sx += (int)layout->column_widths[COLUMN_SIZE] + column_space;
}
@@ -679,10 +709,12 @@ void file_draw_list(const bContext *C, ARegion *ar)
NULL, file->entry->time, small_size, file->entry->time_str, file->entry->date_str);
}
file_draw_string(
- sx, sy, file->entry->date_str, layout->column_widths[COLUMN_DATE], layout->tile_h, align);
+ sx, sy, file->entry->date_str, layout->column_widths[COLUMN_DATE], layout->tile_h,
+ align, text_col);
sx += (int)layout->column_widths[COLUMN_DATE] + column_space;
file_draw_string(
- sx, sy, file->entry->time_str, layout->column_widths[COLUMN_TIME], layout->tile_h, align);
+ sx, sy, file->entry->time_str, layout->column_widths[COLUMN_TIME], layout->tile_h,
+ align, text_col);
sx += (int)layout->column_widths[COLUMN_TIME] + column_space;
}
else {
@@ -697,7 +729,8 @@ void file_draw_list(const bContext *C, ARegion *ar)
BLI_filelist_entry_size_to_string(NULL, file->entry->size, small_size, file->entry->size_str);
}
file_draw_string(
- sx, sy, file->entry->size_str, layout->column_widths[COLUMN_SIZE], layout->tile_h, align);
+ sx, sy, file->entry->size_str, layout->column_widths[COLUMN_SIZE], layout->tile_h,
+ align, text_col);
}
sx += (int)layout->column_widths[COLUMN_SIZE] + column_space;
}
diff --git a/source/blender/editors/space_file/file_utils.c b/source/blender/editors/space_file/file_utils.c
index c1caf5ae8ac..fc870399696 100644
--- a/source/blender/editors/space_file/file_utils.c
+++ b/source/blender/editors/space_file/file_utils.c
@@ -26,6 +26,7 @@
#include "BLI_rect.h"
#include "BLI_fileops.h"
+#include "BLI_listbase.h"
#include "BLO_readfile.h"
diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c
index 7abe5ff5070..3dfeb5eb5b3 100644
--- a/source/blender/editors/space_file/filesel.c
+++ b/source/blender/editors/space_file/filesel.c
@@ -215,7 +215,8 @@ short ED_fileselect_set_params(SpaceFile *sfile)
FILTER_ID_GR | FILTER_ID_IM | FILTER_ID_LA | FILTER_ID_LS | FILTER_ID_LT | FILTER_ID_MA |
FILTER_ID_MB | FILTER_ID_MC | FILTER_ID_ME | FILTER_ID_MSK | FILTER_ID_NT | FILTER_ID_OB |
FILTER_ID_PA | FILTER_ID_PAL | FILTER_ID_PC | FILTER_ID_SCE | FILTER_ID_SPK | FILTER_ID_SO |
- FILTER_ID_TE | FILTER_ID_TXT | FILTER_ID_VF | FILTER_ID_WO | FILTER_ID_CF;
+ FILTER_ID_TE | FILTER_ID_TXT | FILTER_ID_VF | FILTER_ID_WO | FILTER_ID_CF | FILTER_ID_WS |
+ FILTER_ID_LP;
if (U.uiflag & USER_HIDE_DOT) {
params->flag |= FILE_HIDE_DOT;
@@ -228,7 +229,7 @@ short ED_fileselect_set_params(SpaceFile *sfile)
if (params->type == FILE_LOADLIB) {
params->flag |= RNA_boolean_get(op->ptr, "link") ? FILE_LINK : 0;
params->flag |= RNA_boolean_get(op->ptr, "autoselect") ? FILE_AUTOSELECT : 0;
- params->flag |= RNA_boolean_get(op->ptr, "active_layer") ? FILE_ACTIVELAY : 0;
+ params->flag |= RNA_boolean_get(op->ptr, "active_collection") ? FILE_ACTIVE_COLLECTION : 0;
}
if ((prop = RNA_struct_find_property(op->ptr, "display_type"))) {
diff --git a/source/blender/editors/space_file/space_file.c b/source/blender/editors/space_file/space_file.c
index 3657e4d2a1f..0fe51ea1c70 100644
--- a/source/blender/editors/space_file/space_file.c
+++ b/source/blender/editors/space_file/space_file.c
@@ -49,6 +49,7 @@
#include "WM_api.h"
#include "WM_types.h"
+#include "WM_message.h"
#include "ED_space_api.h"
#include "ED_screen.h"
@@ -291,11 +292,13 @@ static void file_refresh(const bContext *C, ScrArea *sa)
file_tools_region(sa);
ED_area_initialize(wm, CTX_wm_window(C), sa);
- ED_area_tag_redraw(sa);
}
+
+ ED_area_tag_redraw(sa);
}
-static void file_listener(bScreen *UNUSED(sc), ScrArea *sa, wmNotifier *wmn)
+static void file_listener(bScreen *UNUSED(sc), ScrArea *sa, wmNotifier *wmn, Scene *UNUSED(scene),
+ WorkSpace *UNUSED(workspace))
{
SpaceFile *sfile = (SpaceFile *)sa->spacedata.first;
@@ -305,16 +308,13 @@ static void file_listener(bScreen *UNUSED(sc), ScrArea *sa, wmNotifier *wmn)
switch (wmn->data) {
case ND_SPACE_FILE_LIST:
ED_area_tag_refresh(sa);
- ED_area_tag_redraw(sa);
break;
case ND_SPACE_FILE_PARAMS:
ED_area_tag_refresh(sa);
- ED_area_tag_redraw(sa);
break;
case ND_SPACE_FILE_PREVIEW:
if (sfile->files && filelist_cache_previews_update(sfile->files)) {
ED_area_tag_refresh(sa);
- ED_area_tag_redraw(sa);
}
break;
}
@@ -337,7 +337,9 @@ static void file_main_region_init(wmWindowManager *wm, ARegion *ar)
WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct);
}
-static void file_main_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+static void file_main_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar,
+ wmNotifier *wmn, const Scene *UNUSED(scene))
{
/* context changes */
switch (wmn->category) {
@@ -354,6 +356,42 @@ static void file_main_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa),
}
}
+static void file_main_region_message_subscribe(
+ const struct bContext *UNUSED(C),
+ struct WorkSpace *UNUSED(workspace), struct Scene *UNUSED(scene),
+ struct bScreen *screen, struct ScrArea *sa, struct ARegion *ar,
+ struct wmMsgBus *mbus)
+{
+ SpaceFile *sfile = sa->spacedata.first;
+ FileSelectParams *params = ED_fileselect_get_params(sfile);
+ /* This is a bit odd that a region owns the subscriber for an area,
+ * keep for now since all subscribers for WM are regions.
+ * May be worth re-visiting later. */
+ wmMsgSubscribeValue msg_sub_value_area_tag_refresh = {
+ .owner = ar,
+ .user_data = sa,
+ .notify = ED_area_do_msg_notify_tag_refresh,
+ };
+
+ /* SpaceFile itself. */
+ {
+ PointerRNA ptr;
+ RNA_pointer_create(&screen->id, &RNA_SpaceFileBrowser, sfile, &ptr);
+
+ /* All properties for this space type. */
+ WM_msg_subscribe_rna(mbus, &ptr, NULL, &msg_sub_value_area_tag_refresh, __func__);
+ }
+
+ /* FileSelectParams */
+ {
+ PointerRNA ptr;
+ RNA_pointer_create(&screen->id, &RNA_FileSelectParams, params, &ptr);
+
+ /* All properties for this space type. */
+ WM_msg_subscribe_rna(mbus, &ptr, NULL, &msg_sub_value_area_tag_refresh, __func__);
+ }
+}
+
static void file_main_region_draw(const bContext *C, ARegion *ar)
{
/* draw entirely, view changes should be handled here */
@@ -601,7 +639,9 @@ static void file_tools_region_draw(const bContext *C, ARegion *ar)
ED_region_panels(C, ar, NULL, -1, true);
}
-static void file_tools_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *UNUSED(ar), wmNotifier *UNUSED(wmn))
+static void file_tools_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *UNUSED(ar),
+ wmNotifier *UNUSED(wmn), const Scene *UNUSED(scene))
{
#if 0
/* context changes */
@@ -663,7 +703,9 @@ static void file_ui_region_draw(const bContext *C, ARegion *ar)
UI_view2d_view_restore(C);
}
-static void file_ui_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+static void file_ui_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar,
+ wmNotifier *wmn, const Scene *UNUSED(scene))
{
/* context changes */
switch (wmn->category) {
@@ -727,6 +769,7 @@ void ED_spacetype_file(void)
art->init = file_main_region_init;
art->draw = file_main_region_draw;
art->listener = file_main_region_listener;
+ art->message_subscribe = file_main_region_message_subscribe;
art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_VIEW2D;
BLI_addhead(&st->regiontypes, art);
diff --git a/source/blender/editors/space_graph/CMakeLists.txt b/source/blender/editors/space_graph/CMakeLists.txt
index 40a196fa95b..2840324e65e 100644
--- a/source/blender/editors/space_graph/CMakeLists.txt
+++ b/source/blender/editors/space_graph/CMakeLists.txt
@@ -23,6 +23,7 @@ set(INC
../../blenkernel
../../blenlib
../../blentranslation
+ ../../depsgraph
../../gpu
../../makesdna
../../makesrna
@@ -48,7 +49,7 @@ set(SRC
)
if(WITH_AUDASPACE)
- add_definitions(${AUDASPACE_DEFINITIONS})
+ add_definitions(-DWITH_AUDASPACE)
list(APPEND INC_SYS
${AUDASPACE_C_INCLUDE_DIRS}
diff --git a/source/blender/editors/space_graph/graph_buttons.c b/source/blender/editors/space_graph/graph_buttons.c
index df6bd01144d..49f498b3419 100644
--- a/source/blender/editors/space_graph/graph_buttons.c
+++ b/source/blender/editors/space_graph/graph_buttons.c
@@ -48,13 +48,13 @@
#include "BKE_context.h"
#include "BKE_curve.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
#include "BKE_main.h"
#include "BKE_global.h"
#include "BKE_screen.h"
#include "BKE_unit.h"
+#include "DEG_depsgraph_build.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -481,7 +481,7 @@ static void do_graph_region_driver_buttons(bContext *C, void *UNUSED(arg), int e
case B_IPO_DEPCHANGE:
{
/* rebuild depsgraph for the new deps */
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
break;
}
}
diff --git a/source/blender/editors/space_graph/graph_draw.c b/source/blender/editors/space_graph/graph_draw.c
index 96a078b2817..d917e3b85a2 100644
--- a/source/blender/editors/space_graph/graph_draw.c
+++ b/source/blender/editors/space_graph/graph_draw.c
@@ -46,10 +46,12 @@
#include "BKE_curve.h"
#include "BKE_fcurve.h"
-
-#include "BIF_gl.h"
#include "BIF_glutil.h"
+#include "GPU_draw.h"
+#include "GPU_immediate.h"
+#include "GPU_matrix.h"
+
#include "ED_anim_api.h"
#include "graph_intern.h"
@@ -82,38 +84,59 @@ static void draw_fcurve_modifier_controls_envelope(FModifier *fcm, View2D *v2d)
FCM_EnvelopeData *fed;
const float fac = 0.05f * BLI_rctf_size_x(&v2d->cur);
int i;
-
+
+ const uint shdr_pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ glLineWidth(1.0f);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR);
+
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2] / UI_DPI_FAC, viewport_size[3] / UI_DPI_FAC);
+
+ immUniform1i("num_colors", 0); /* Simple dashes. */
+ immUniformColor3f(0.0f, 0.0f, 0.0f);
+ immUniform1f("dash_width", 10.0f);
+ immUniform1f("dash_factor", 0.5f);
+
/* draw two black lines showing the standard reference levels */
- glColor3f(0.0f, 0.0f, 0.0f);
- glLineWidth(1);
- setlinestyle(5);
-
- glBegin(GL_LINES);
- glVertex2f(v2d->cur.xmin, env->midval + env->min);
- glVertex2f(v2d->cur.xmax, env->midval + env->min);
-
- glVertex2f(v2d->cur.xmin, env->midval + env->max);
- glVertex2f(v2d->cur.xmax, env->midval + env->max);
- glEnd();
- setlinestyle(0);
-
- /* set size of vertices (non-adjustable for now) */
- glPointSize(2.0f);
-
- /* for now, point color is fixed, and is white */
- glColor3f(1.0f, 1.0f, 1.0f);
-
- glBegin(GL_POINTS);
- for (i = 0, fed = env->data; i < env->totvert; i++, fed++) {
- /* only draw if visible
- * - min/max here are fixed, not relative
- */
- if (IN_RANGE(fed->time, (v2d->cur.xmin - fac), (v2d->cur.xmax + fac))) {
- glVertex2f(fed->time, fed->min);
- glVertex2f(fed->time, fed->max);
+
+ immBegin(GWN_PRIM_LINES, 4);
+ immVertex2f(shdr_pos, v2d->cur.xmin, env->midval + env->min);
+ immVertex2f(shdr_pos, v2d->cur.xmax, env->midval + env->min);
+
+ immVertex2f(shdr_pos, v2d->cur.xmin, env->midval + env->max);
+ immVertex2f(shdr_pos, v2d->cur.xmax, env->midval + env->max);
+ immEnd();
+
+ immUnbindProgram();
+
+ if (env->totvert > 0) {
+ /* set size of vertices (non-adjustable for now) */
+ glPointSize(2.0f);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ /* for now, point color is fixed, and is white */
+ immUniformColor3f(1.0f, 1.0f, 1.0f);
+
+ immBeginAtMost(GWN_PRIM_POINTS, env->totvert * 2);
+
+ for (i = 0, fed = env->data; i < env->totvert; i++, fed++) {
+ /* only draw if visible
+ * - min/max here are fixed, not relative
+ */
+ if (IN_RANGE(fed->time, (v2d->cur.xmin - fac), (v2d->cur.xmax + fac))) {
+ immVertex2f(shdr_pos, fed->time, fed->min);
+ immVertex2f(shdr_pos, fed->time, fed->max);
+ }
}
+
+ immEnd();
+
+ immUnbindProgram();
}
- glEnd();
}
/* *************************** */
@@ -121,16 +144,37 @@ static void draw_fcurve_modifier_controls_envelope(FModifier *fcm, View2D *v2d)
/* Points ---------------- */
-/* helper func - draw keyframe vertices only for an F-Curve */
-static void draw_fcurve_vertices_keyframes(FCurve *fcu, SpaceIpo *UNUSED(sipo), View2D *v2d, short edit, short sel)
+/* helper func - set color to draw F-Curve data with */
+static void set_fcurve_vertex_color(FCurve *fcu, bool sel)
+{
+ /* Fade the 'intensity' of the vertices based on the selection of the curves too */
+ int alphaOffset = (int)((fcurve_display_alpha(fcu) - 1.0f) * 255);
+
+ float color[4];
+
+ /* Set color of curve vertex based on state of curve (i.e. 'Edit' Mode) */
+ if ((fcu->flag & FCURVE_PROTECTED) == 0) {
+ /* Curve's points ARE BEING edited */
+ UI_GetThemeColorShadeAlpha4fv(sel ? TH_VERTEX_SELECT : TH_VERTEX, 0, alphaOffset, color);
+ }
+ else {
+ /* Curve's points CANNOT BE edited */
+ UI_GetThemeColorShadeAlpha4fv(sel ? TH_TEXT_HI : TH_TEXT, 0, alphaOffset, color);
+ }
+
+ immUniformColor4fv(color);
+}
+
+static void draw_fcurve_selected_keyframe_vertices(FCurve *fcu, View2D *v2d, bool edit, bool sel, unsigned pos)
{
- BezTriple *bezt = fcu->bezt;
const float fac = 0.05f * BLI_rctf_size_x(&v2d->cur);
- int i;
-
- glBegin(GL_POINTS);
-
- for (i = 0; i < fcu->totvert; i++, bezt++) {
+
+ set_fcurve_vertex_color(fcu, sel);
+
+ immBeginAtMost(GWN_PRIM_POINTS, fcu->totvert);
+
+ BezTriple *bezt = fcu->bezt;
+ for (int i = 0; i < fcu->totvert; i++, bezt++) {
/* as an optimization step, only draw those in view
* - we apply a correction factor to ensure that points don't pop in/out due to slight twitches of view size
*/
@@ -141,80 +185,50 @@ static void draw_fcurve_vertices_keyframes(FCurve *fcu, SpaceIpo *UNUSED(sipo),
* -
*/
if ((bezt->f2 & SELECT) == sel)
- glVertex3fv(bezt->vec[1]);
+ immVertex2fv(pos, bezt->vec[1]);
}
else {
/* no check for selection here, as curve is not editable... */
/* XXX perhaps we don't want to even draw points? maybe add an option for that later */
- glVertex3fv(bezt->vec[1]);
+ immVertex2fv(pos, bezt->vec[1]);
}
}
}
-
- glEnd();
-}
+ immEnd();
+}
-/* helper func - draw handle vertex for an F-Curve as a round unfilled circle
- * NOTE: the caller MUST HAVE GL_LINE_SMOOTH & GL_BLEND ENABLED, otherwise, the controls don't
- * have a consistent appearance (due to off-pixel alignments)...
- */
-static void draw_fcurve_handle_control(float x, float y, float xscale, float yscale, float hsize)
+/* helper func - draw keyframe vertices only for an F-Curve */
+static void draw_fcurve_keyframe_vertices(FCurve *fcu, View2D *v2d, bool edit, unsigned pos)
{
- static GLuint displist = 0;
-
- /* initialize round circle shape */
- if (displist == 0) {
- GLUquadricObj *qobj;
-
- displist = glGenLists(1);
- glNewList(displist, GL_COMPILE);
-
- qobj = gluNewQuadric();
- gluQuadricDrawStyle(qobj, GLU_SILHOUETTE);
- gluDisk(qobj, 0, 0.7, 8, 1);
- gluDeleteQuadric(qobj);
-
- glEndList();
- }
-
- /* adjust view transform before starting */
- glTranslatef(x, y, 0.0f);
- glScalef(1.0f / xscale * hsize, 1.0f / yscale * hsize, 1.0f);
-
- /* draw! */
- glCallList(displist);
-
- /* restore view transform */
- glScalef(xscale / hsize, yscale / hsize, 1.0);
- glTranslatef(-x, -y, 0.0f);
+ immBindBuiltinProgram(GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA);
+
+ immUniform1f("size", UI_GetThemeValuef(TH_VERTEX_SIZE) * U.pixelsize);
+
+ draw_fcurve_selected_keyframe_vertices(fcu, v2d, edit, false, pos);
+ draw_fcurve_selected_keyframe_vertices(fcu, v2d, edit, true, pos);
+
+ immUnbindProgram();
}
+
/* helper func - draw handle vertices only for an F-Curve (if it is not protected) */
-static void draw_fcurve_vertices_handles(FCurve *fcu, SpaceIpo *sipo, View2D *v2d, short sel, short sel_handle_only, float units_scale)
+static void draw_fcurve_selected_handle_vertices(FCurve *fcu, View2D *v2d, bool sel, bool sel_handle_only, unsigned pos)
{
- BezTriple *bezt = fcu->bezt;
- BezTriple *prevbezt = NULL;
- float hsize, xscale, yscale;
- int i;
-
- /* get view settings */
- hsize = UI_GetThemeValuef(TH_HANDLE_VERTEX_SIZE) * U.pixelsize;
- UI_view2d_scale_get(v2d, &xscale, &yscale);
+ (void) v2d; /* TODO: use this to draw only points in view */
- /* Compensate OGL scale sued for unit mapping, so circle will be circle, not ellipse */
- yscale *= units_scale;
-
/* set handle color */
- if (sel) UI_ThemeColor(TH_HANDLE_VERTEX_SELECT);
- else UI_ThemeColor(TH_HANDLE_VERTEX);
-
- /* anti-aliased lines for more consistent appearance */
- if ((sipo->flag & SIPO_BEAUTYDRAW_OFF) == 0) glEnable(GL_LINE_SMOOTH);
- glEnable(GL_BLEND);
-
- for (i = 0; i < fcu->totvert; i++, prevbezt = bezt, bezt++) {
- /* Draw the editmode handles for a bezier curve (others don't have handles)
+ float hcolor[3];
+ UI_GetThemeColor3fv(sel ? TH_HANDLE_VERTEX_SELECT : TH_HANDLE_VERTEX, hcolor);
+ immUniform4f("outlineColor", hcolor[0], hcolor[1], hcolor[2], 1.0f);
+ immUniformColor3fvAlpha(hcolor, 0.01f); /* almost invisible - only keep for smoothness */
+
+ immBeginAtMost(GWN_PRIM_POINTS, fcu->totvert * 2);
+
+ BezTriple *bezt = fcu->bezt;
+ BezTriple *prevbezt = NULL;
+ for (int i = 0; i < fcu->totvert; i++, prevbezt = bezt, bezt++) {
+ /* Draw the editmode handles for a bezier curve (others don't have handles)
* if their selection status matches the selection status we're drawing for
* - first handle only if previous beztriple was bezier-mode
* - second handle only if current beztriple is bezier-mode
@@ -225,68 +239,61 @@ static void draw_fcurve_vertices_handles(FCurve *fcu, SpaceIpo *sipo, View2D *v2
if (!sel_handle_only || BEZT_ISSEL_ANY(bezt)) {
if ((!prevbezt && (bezt->ipo == BEZT_IPO_BEZ)) || (prevbezt && (prevbezt->ipo == BEZT_IPO_BEZ))) {
if ((bezt->f1 & SELECT) == sel) /* && v2d->cur.xmin < bezt->vec[0][0] < v2d->cur.xmax)*/
- draw_fcurve_handle_control(bezt->vec[0][0], bezt->vec[0][1], xscale, yscale, hsize);
+ immVertex2fv(pos, bezt->vec[0]);
}
-
+
if (bezt->ipo == BEZT_IPO_BEZ) {
if ((bezt->f3 & SELECT) == sel) /* && v2d->cur.xmin < bezt->vec[2][0] < v2d->cur.xmax)*/
- draw_fcurve_handle_control(bezt->vec[2][0], bezt->vec[2][1], xscale, yscale, hsize);
+ immVertex2fv(pos, bezt->vec[2]);
}
}
}
-
- if ((sipo->flag & SIPO_BEAUTYDRAW_OFF) == 0) glDisable(GL_LINE_SMOOTH);
- glDisable(GL_BLEND);
+
+ immEnd();
}
-/* helper func - set color to draw F-Curve data with */
-static void set_fcurve_vertex_color(FCurve *fcu, short sel)
+/* helper func - draw handle vertices only for an F-Curve (if it is not protected) */
+static void draw_fcurve_handle_vertices(FCurve *fcu, View2D *v2d, bool sel_handle_only, unsigned pos)
{
- /* Fade the 'intensity' of the vertices based on the selection of the curves too */
- int alphaOffset = (int)((fcurve_display_alpha(fcu) - 1.0f) * 255);
-
- /* Set color of curve vertex based on state of curve (i.e. 'Edit' Mode) */
- if ((fcu->flag & FCURVE_PROTECTED) == 0) {
- /* Curve's points ARE BEING edited */
- if (sel) UI_ThemeColorShadeAlpha(TH_VERTEX_SELECT, 0, alphaOffset);
- else UI_ThemeColorShadeAlpha(TH_VERTEX, 0, alphaOffset);
- }
- else {
- /* Curve's points CANNOT BE edited */
- if (sel) UI_ThemeColorShadeAlpha(TH_TEXT_HI, 0, alphaOffset);
- else UI_ThemeColorShadeAlpha(TH_TEXT, 0, alphaOffset);
- }
+ /* smooth outlines for more consistent appearance */
+ immBindBuiltinProgram(GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_OUTLINE_AA);
+
+ /* set handle size */
+ immUniform1f("size", (1.4f * UI_GetThemeValuef(TH_HANDLE_VERTEX_SIZE)) * U.pixelsize);
+ immUniform1f("outlineWidth", 1.5f * U.pixelsize);
+
+ draw_fcurve_selected_handle_vertices(fcu, v2d, false, sel_handle_only, pos);
+ draw_fcurve_selected_handle_vertices(fcu, v2d, true, sel_handle_only, pos);
+
+ immUnbindProgram();
}
-static void draw_fcurve_vertices(SpaceIpo *sipo, ARegion *ar, FCurve *fcu, short do_handles, short sel_handle_only, float units_scale)
+static void draw_fcurve_vertices(ARegion *ar, FCurve *fcu, bool do_handles, bool sel_handle_only)
{
View2D *v2d = &ar->v2d;
-
+
/* only draw points if curve is visible
- * - draw unselected points before selected points as separate passes to minimize color-changing overhead
- * (XXX dunno if this is faster than drawing all in one pass though)
- * and also to make sure in the case of overlapping points that the selected is always visible
+ * - draw unselected points before selected points as separate passes
+ * to make sure in the case of overlapping points that the selected is always visible
* - draw handles before keyframes, so that keyframes will overlap handles (keyframes are more important for users)
*/
-
- glPointSize(UI_GetThemeValuef(TH_VERTEX_SIZE));
-
+
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ glEnable(GL_BLEND);
+ GPU_enable_program_point_size();
+
/* draw the two handles first (if they're shown, the curve doesn't have just a single keyframe, and the curve is being edited) */
if (do_handles) {
- set_fcurve_vertex_color(fcu, 0);
- draw_fcurve_vertices_handles(fcu, sipo, v2d, 0, sel_handle_only, units_scale);
-
- set_fcurve_vertex_color(fcu, 1);
- draw_fcurve_vertices_handles(fcu, sipo, v2d, 1, sel_handle_only, units_scale);
+ draw_fcurve_handle_vertices(fcu, v2d, sel_handle_only, pos);
}
-
+
/* draw keyframes over the handles */
- set_fcurve_vertex_color(fcu, 0);
- draw_fcurve_vertices_keyframes(fcu, sipo, v2d, !(fcu->flag & FCURVE_PROTECTED), 0);
-
- set_fcurve_vertex_color(fcu, 1);
- draw_fcurve_vertices_keyframes(fcu, sipo, v2d, !(fcu->flag & FCURVE_PROTECTED), 1);
+ draw_fcurve_keyframe_vertices(fcu, v2d, !(fcu->flag & FCURVE_PROTECTED), pos);
+
+ GPU_disable_program_point_size();
+ glDisable(GL_BLEND);
}
/* Handles ---------------- */
@@ -303,10 +310,10 @@ static bool draw_fcurve_handles_check(SpaceIpo *sipo, FCurve *fcu)
(fcu->totvert <= 1) /* do not show handles if there is only 1 keyframe, otherwise they all clump together in an ugly ball */
)
{
- return 0;
+ return false;
}
else {
- return 1;
+ return true;
}
}
@@ -315,13 +322,10 @@ static bool draw_fcurve_handles_check(SpaceIpo *sipo, FCurve *fcu)
static void draw_fcurve_handles(SpaceIpo *sipo, FCurve *fcu)
{
int sel, b;
-
- /* a single call to GL_LINES here around these calls should be sufficient to still
- * get separate line segments, but which aren't wrapped with GL_LINE_STRIP every time we
- * want a single line
- */
- glBegin(GL_LINES);
-
+
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
/* slightly hacky, but we want to draw unselected points before selected ones
* so that selected points are clearly visible
*/
@@ -348,18 +352,24 @@ static void draw_fcurve_handles(SpaceIpo *sipo, FCurve *fcu)
if ((!prevbezt && (bezt->ipo == BEZT_IPO_BEZ)) || (prevbezt && (prevbezt->ipo == BEZT_IPO_BEZ))) {
UI_GetThemeColor3ubv(basecol + bezt->h1, col);
col[3] = fcurve_display_alpha(fcu) * 255;
- glColor4ubv((GLubyte *)col);
-
- glVertex2fv(fp); glVertex2fv(fp + 3);
+ immUniformColor4ubv(col);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2fv(pos, fp);
+ immVertex2fv(pos, fp + 3);
+ immEnd();
}
/* only draw second handle if this segment is bezier */
if (bezt->ipo == BEZT_IPO_BEZ) {
UI_GetThemeColor3ubv(basecol + bezt->h2, col);
col[3] = fcurve_display_alpha(fcu) * 255;
- glColor4ubv((GLubyte *)col);
-
- glVertex2fv(fp + 3); glVertex2fv(fp + 6);
+ immUniformColor4ubv(col);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2fv(pos, fp + 3);
+ immVertex2fv(pos, fp + 6);
+ immEnd();
}
}
else {
@@ -370,9 +380,12 @@ static void draw_fcurve_handles(SpaceIpo *sipo, FCurve *fcu)
fp = bezt->vec[0];
UI_GetThemeColor3ubv(basecol + bezt->h1, col);
col[3] = fcurve_display_alpha(fcu) * 255;
- glColor4ubv((GLubyte *)col);
-
- glVertex2fv(fp); glVertex2fv(fp + 3);
+ immUniformColor4ubv(col);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2fv(pos, fp);
+ immVertex2fv(pos, fp + 3);
+ immEnd();
}
/* only draw second handle if this segment is bezier, and selection is ok */
@@ -382,15 +395,18 @@ static void draw_fcurve_handles(SpaceIpo *sipo, FCurve *fcu)
fp = bezt->vec[1];
UI_GetThemeColor3ubv(basecol + bezt->h2, col);
col[3] = fcurve_display_alpha(fcu) * 255;
- glColor4ubv((GLubyte *)col);
-
- glVertex2fv(fp); glVertex2fv(fp + 3);
+ immUniformColor4ubv(col);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2fv(pos, fp);
+ immVertex2fv(pos, fp + 3);
+ immEnd();
}
}
}
}
-
- glEnd(); /* GL_LINES */
+
+ immUnbindProgram();
}
/* Samples ---------------- */
@@ -399,36 +415,24 @@ static void draw_fcurve_handles(SpaceIpo *sipo, FCurve *fcu)
* NOTE: the caller MUST HAVE GL_LINE_SMOOTH & GL_BLEND ENABLED, otherwise, the controls don't
* have a consistent appearance (due to off-pixel alignments)...
*/
-static void draw_fcurve_sample_control(float x, float y, float xscale, float yscale, float hsize)
+static void draw_fcurve_sample_control(float x, float y, float xscale, float yscale, float hsize, unsigned int pos)
{
- static GLuint displist = 0;
-
- /* initialize X shape */
- if (displist == 0) {
- displist = glGenLists(1);
- glNewList(displist, GL_COMPILE);
-
- glBegin(GL_LINES);
- glVertex2f(-0.7f, -0.7f);
- glVertex2f(+0.7f, +0.7f);
-
- glVertex2f(-0.7f, +0.7f);
- glVertex2f(+0.7f, -0.7f);
- glEnd(); /* GL_LINES */
-
- glEndList();
- }
-
/* adjust view transform before starting */
- glTranslatef(x, y, 0.0f);
- glScalef(1.0f / xscale * hsize, 1.0f / yscale * hsize, 1.0f);
-
- /* draw! */
- glCallList(displist);
-
+ gpuPushMatrix();
+ gpuTranslate2f(x, y);
+ gpuScale2f(1.0f / xscale * hsize, 1.0f / yscale * hsize);
+
+ /* draw X shape */
+ immBegin(GWN_PRIM_LINES, 4);
+ immVertex2f(pos, -0.7f, -0.7f);
+ immVertex2f(pos, +0.7f, +0.7f);
+
+ immVertex2f(pos, -0.7f, +0.7f);
+ immVertex2f(pos, +0.7f, -0.7f);
+ immEnd();
+
/* restore view transform */
- glScalef(xscale / hsize, yscale / hsize, 1.0);
- glTranslatef(-x, -y, 0.0f);
+ gpuPopMatrix();
}
/* helper func - draw keyframe vertices only for an F-Curve */
@@ -441,10 +445,6 @@ static void draw_fcurve_samples(SpaceIpo *sipo, ARegion *ar, FCurve *fcu)
hsize = UI_GetThemeValuef(TH_VERTEX_SIZE);
UI_view2d_scale_get(&ar->v2d, &xscale, &yscale);
- /* set vertex color */
- if (fcu->flag & (FCURVE_ACTIVE | FCURVE_SELECTED)) UI_ThemeColor(TH_TEXT_HI);
- else UI_ThemeColor(TH_TEXT);
-
/* get verts */
first = fcu->fpt;
last = (first) ? (first + (fcu->totvert - 1)) : (NULL);
@@ -454,10 +454,17 @@ static void draw_fcurve_samples(SpaceIpo *sipo, ARegion *ar, FCurve *fcu)
/* anti-aliased lines for more consistent appearance */
if ((sipo->flag & SIPO_BEAUTYDRAW_OFF) == 0) glEnable(GL_LINE_SMOOTH);
glEnable(GL_BLEND);
-
- draw_fcurve_sample_control(first->vec[0], first->vec[1], xscale, yscale, hsize);
- draw_fcurve_sample_control(last->vec[0], last->vec[1], xscale, yscale, hsize);
-
+
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ immUniformThemeColor((fcu->flag & FCURVE_SELECTED) ? TH_TEXT_HI : TH_TEXT);
+
+ draw_fcurve_sample_control(first->vec[0], first->vec[1], xscale, yscale, hsize, pos);
+ draw_fcurve_sample_control(last->vec[0], last->vec[1], xscale, yscale, hsize, pos);
+
+ immUnbindProgram();
+
glDisable(GL_BLEND);
if ((sipo->flag & SIPO_BEAUTYDRAW_OFF) == 0) glDisable(GL_LINE_SMOOTH);
}
@@ -466,7 +473,7 @@ static void draw_fcurve_samples(SpaceIpo *sipo, ARegion *ar, FCurve *fcu)
/* Curve ---------------- */
/* helper func - just draw the F-Curve by sampling the visible region (for drawing curves with modifiers) */
-static void draw_fcurve_curve(bAnimContext *ac, ID *id, FCurve *fcu, View2D *v2d, View2DGrid *grid)
+static void draw_fcurve_curve(bAnimContext *ac, ID *id, FCurve *fcu, View2D *v2d, View2DGrid *grid, unsigned int pos)
{
SpaceIpo *sipo = (SpaceIpo *)ac->sl;
ChannelDriver *driver;
@@ -536,37 +543,50 @@ static void draw_fcurve_curve(bAnimContext *ac, ID *id, FCurve *fcu, View2D *v2d
* - apply the unit correction factor to the calculated values so that
* the displayed values appear correctly in the viewport
*/
- glBegin(GL_LINE_STRIP);
-
+
n = (etime - stime) / samplefreq + 0.5f;
- for (i = 0; i <= n; i++) {
- float ctime = stime + i * samplefreq;
- glVertex2f(ctime, (evaluate_fcurve(fcu, ctime) + offset) * unitFac);
+
+ if (n > 0) {
+ immBegin(GWN_PRIM_LINE_STRIP, (n + 1));
+
+ for (i = 0; i <= n; i++) {
+ float ctime = stime + i * samplefreq;
+ immVertex2f(pos, ctime, (evaluate_fcurve(fcu, ctime) + offset) * unitFac);
+ }
+
+ immEnd();
}
-
- glEnd();
-
+
/* restore driver */
fcu->driver = driver;
}
/* helper func - draw a samples-based F-Curve */
-static void draw_fcurve_curve_samples(bAnimContext *ac, ID *id, FCurve *fcu, View2D *v2d)
+static void draw_fcurve_curve_samples(bAnimContext *ac, ID *id, FCurve *fcu, View2D *v2d, const uint shdr_pos)
{
FPoint *prevfpt = fcu->fpt;
FPoint *fpt = prevfpt + 1;
float fac, v[2];
- int b = fcu->totvert - 1;
+ int b = fcu->totvert;
float unit_scale, offset;
short mapping_flag = ANIM_get_normalization_flags(ac);
+ int count = fcu->totvert;
+
+ if (prevfpt->vec[0] > v2d->cur.xmin) {
+ count++;
+ }
+
+ if ((prevfpt + b - 1)->vec[0] < v2d->cur.xmax) {
+ count++;
+ }
/* apply unit mapping */
- glPushMatrix();
+ gpuPushMatrix();
unit_scale = ANIM_unit_mapping_get_factor(ac->scene, id, fcu, mapping_flag, &offset);
- glScalef(1.0f, unit_scale, 1.0f);
- glTranslatef(0.0f, offset, 0.0f);
+ gpuScale2f(1.0f, unit_scale);
+ gpuTranslate2f(0.0f, offset);
- glBegin(GL_LINE_STRIP);
+ immBegin(GWN_PRIM_LINE_STRIP, count);
/* extrapolate to left? - left-side of view comes before first keyframe? */
if (prevfpt->vec[0] > v2d->cur.xmin) {
@@ -584,26 +604,19 @@ static void draw_fcurve_curve_samples(bAnimContext *ac, ID *id, FCurve *fcu, Vie
v[1] = prevfpt->vec[1] - fac * (prevfpt->vec[1] - fpt->vec[1]);
}
- glVertex2fv(v);
+ immVertex2fv(shdr_pos, v);
}
- /* if only one sample, add it now */
- if (fcu->totvert == 1)
- glVertex2fv(prevfpt->vec);
-
/* loop over samples, drawing segments */
/* draw curve between first and last keyframe (if there are enough to do so) */
while (b--) {
/* Linear interpolation: just add one point (which should add a new line segment) */
- glVertex2fv(prevfpt->vec);
+ immVertex2fv(shdr_pos, prevfpt->vec);
/* get next pointers */
- prevfpt = fpt;
- fpt++;
-
- /* last point? */
- if (b == 0)
- glVertex2fv(prevfpt->vec);
+ if (b > 0) {
+ prevfpt++;
+ }
}
/* extrapolate to right? (see code for left-extrapolation above too) */
@@ -623,11 +636,12 @@ static void draw_fcurve_curve_samples(bAnimContext *ac, ID *id, FCurve *fcu, Vie
v[1] = prevfpt->vec[1] - fac * (prevfpt->vec[1] - fpt->vec[1]);
}
- glVertex2fv(v);
+ immVertex2fv(shdr_pos, v);
}
- glEnd();
- glPopMatrix();
+ immEnd();
+
+ gpuPopMatrix();
}
/* helper func - check if the F-Curve only contains easily drawable segments
@@ -648,7 +662,7 @@ static bool fcurve_can_use_simple_bezt_drawing(FCurve *fcu)
}
/* helper func - draw one repeat of an F-Curve (using Bezier curve approximations) */
-static void draw_fcurve_curve_bezts(bAnimContext *ac, ID *id, FCurve *fcu, View2D *v2d)
+static void draw_fcurve_curve_bezts(bAnimContext *ac, ID *id, FCurve *fcu, View2D *v2d, unsigned int pos)
{
BezTriple *prevbezt = fcu->bezt;
BezTriple *bezt = prevbezt + 1;
@@ -661,12 +675,15 @@ static void draw_fcurve_curve_bezts(bAnimContext *ac, ID *id, FCurve *fcu, View2
short mapping_flag = ANIM_get_normalization_flags(ac);
/* apply unit mapping */
- glPushMatrix();
+ gpuPushMatrix();
unit_scale = ANIM_unit_mapping_get_factor(ac->scene, id, fcu, mapping_flag, &offset);
- glScalef(1.0f, unit_scale, 1.0f);
- glTranslatef(0.0f, offset, 0.0f);
+ gpuScale2f(1.0f, unit_scale);
+ gpuTranslate2f(0.0f, offset);
- glBegin(GL_LINE_STRIP);
+ /* For now, this assumes the worst case scenario, where all the keyframes have
+ * bezier interpolation, and are drawn at full res.
+ * This is tricky to optimize, but maybe can be improved at some point... */
+ immBeginAtMost(GWN_PRIM_LINE_STRIP, (b * 32 + 3));
/* extrapolate to left? */
if (prevbezt->vec[1][0] > v2d->cur.xmin) {
@@ -691,14 +708,14 @@ static void draw_fcurve_curve_bezts(bAnimContext *ac, ID *id, FCurve *fcu, View2
v1[1] = prevbezt->vec[1][1] - fac * (prevbezt->vec[0][1] - prevbezt->vec[1][1]);
}
- glVertex2fv(v1);
+ immVertex2fv(pos, v1);
}
/* if only one keyframe, add it now */
if (fcu->totvert == 1) {
v1[0] = prevbezt->vec[1][0];
v1[1] = prevbezt->vec[1][1];
- glVertex2fv(v1);
+ immVertex2fv(pos, v1);
}
/* draw curve between first and last keyframe (if there are enough to do so) */
@@ -708,17 +725,17 @@ static void draw_fcurve_curve_bezts(bAnimContext *ac, ID *id, FCurve *fcu, View2
/* Constant-Interpolation: draw segment between previous keyframe and next, but holding same value */
v1[0] = prevbezt->vec[1][0];
v1[1] = prevbezt->vec[1][1];
- glVertex2fv(v1);
+ immVertex2fv(pos, v1);
v1[0] = bezt->vec[1][0];
v1[1] = prevbezt->vec[1][1];
- glVertex2fv(v1);
+ immVertex2fv(pos, v1);
}
else if (prevbezt->ipo == BEZT_IPO_LIN) {
/* Linear interpolation: just add one point (which should add a new line segment) */
v1[0] = prevbezt->vec[1][0];
v1[1] = prevbezt->vec[1][1];
- glVertex2fv(v1);
+ immVertex2fv(pos, v1);
}
else if (prevbezt->ipo == BEZT_IPO_BEZ) {
/* Bezier-Interpolation: draw curve as series of segments between keyframes
@@ -738,7 +755,7 @@ static void draw_fcurve_curve_bezts(bAnimContext *ac, ID *id, FCurve *fcu, View2
/* only draw one */
v1[0] = prevbezt->vec[1][0];
v1[1] = prevbezt->vec[1][1];
- glVertex2fv(v1);
+ immVertex2fv(pos, v1);
}
else {
/* clamp resolution to max of 32 */
@@ -760,8 +777,9 @@ static void draw_fcurve_curve_bezts(bAnimContext *ac, ID *id, FCurve *fcu, View2
BKE_curve_forward_diff_bezier(v1[0], v2[0], v3[0], v4[0], data, resol, sizeof(float) * 3);
BKE_curve_forward_diff_bezier(v1[1], v2[1], v3[1], v4[1], data + 1, resol, sizeof(float) * 3);
- for (fp = data; resol; resol--, fp += 3)
- glVertex2fv(fp);
+ for (fp = data; resol; resol--, fp += 3) {
+ immVertex2fv(pos, fp);
+ }
}
}
@@ -773,7 +791,7 @@ static void draw_fcurve_curve_bezts(bAnimContext *ac, ID *id, FCurve *fcu, View2
if (b == 0) {
v1[0] = prevbezt->vec[1][0];
v1[1] = prevbezt->vec[1][1];
- glVertex2fv(v1);
+ immVertex2fv(pos, v1);
}
}
@@ -800,11 +818,12 @@ static void draw_fcurve_curve_bezts(bAnimContext *ac, ID *id, FCurve *fcu, View2
v1[1] = prevbezt->vec[1][1] - fac * (prevbezt->vec[2][1] - prevbezt->vec[1][1]);
}
- glVertex2fv(v1);
+ immVertex2fv(pos, v1);
}
- glEnd();
- glPopMatrix();
+ immEnd();
+
+ gpuPopMatrix();
}
/* Debugging -------------------------------- */
@@ -825,7 +844,16 @@ static void graph_draw_driver_debug(bAnimContext *ac, ID *id, FCurve *fcu)
/* for now, only show when debugging driver... */
//if ((driver->flag & DRIVER_FLAG_SHOWDEBUG) == 0)
// return;
-
+
+ const uint shdr_pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR);
+
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2] / UI_DPI_FAC, viewport_size[3] / UI_DPI_FAC);
+
+ immUniform1i("num_colors", 0); /* Simple dashes. */
+
/* No curve to modify/visualize the result?
* => We still want to show the 1-1 default...
*/
@@ -833,26 +861,24 @@ static void graph_draw_driver_debug(bAnimContext *ac, ID *id, FCurve *fcu)
float t;
/* draw with thin dotted lines in style of what curve would have been */
- glColor3fv(fcu->color);
+ immUniformColor3fv(fcu->color);
- setlinestyle(20);
+ immUniform1f("dash_width", 40.0f);
+ immUniform1f("dash_factor", 0.5f);
glLineWidth(2.0f);
/* draw 1-1 line, stretching just past the screen limits
* NOTE: we need to scale the y-values to be valid for the units
*/
- glBegin(GL_LINES);
- {
- t = v2d->cur.xmin;
- glVertex2f(t, (t + offset) * unitfac);
-
- t = v2d->cur.xmax;
- glVertex2f(t, (t + offset) * unitfac);
- }
- glEnd();
-
- /* cleanup line drawing */
- setlinestyle(0);
+ immBegin(GWN_PRIM_LINES, 2);
+
+ t = v2d->cur.xmin;
+ immVertex2f(shdr_pos, t, (t + offset) * unitfac);
+
+ t = v2d->cur.xmax;
+ immVertex2f(shdr_pos, t, (t + offset) * unitfac);
+
+ immEnd();
}
/* draw driver only if actually functional */
@@ -866,53 +892,59 @@ static void graph_draw_driver_debug(bAnimContext *ac, ID *id, FCurve *fcu)
float co[2];
/* draw dotted lines leading towards this point from both axes ....... */
- glColor3f(0.9f, 0.9f, 0.9f);
- setlinestyle(5);
-
- glBegin(GL_LINES);
- {
- /* x-axis lookup */
- co[0] = x;
-
- if (y >= v2d->cur.ymin) {
- co[1] = v2d->cur.ymin - 1.0f;
- glVertex2fv(co);
-
- co[1] = y;
- glVertex2fv(co);
- }
-
- /* y-axis lookup */
+ immUniformColor3f(0.9f, 0.9f, 0.9f);
+ immUniform1f("dash_width", 10.0f);
+ immUniform1f("dash_factor", 0.5f);
+
+ immBegin(GWN_PRIM_LINES, (y >= v2d->cur.ymin) ? 4 : 2);
+
+ /* x-axis lookup */
+ co[0] = x;
+
+ if (y >= v2d->cur.ymin) {
+ co[1] = v2d->cur.ymin - 1.0f;
+ immVertex2fv(shdr_pos, co);
+
co[1] = y;
-
- co[0] = v2d->cur.xmin - 1.0f;
- glVertex2fv(co);
-
- co[0] = x;
- glVertex2fv(co);
+ immVertex2fv(shdr_pos, co);
}
- glEnd();
-
- setlinestyle(0);
+
+ /* y-axis lookup */
+ co[1] = y;
+
+ co[0] = v2d->cur.xmin - 1.0f;
+ immVertex2fv(shdr_pos, co);
+
+ co[0] = x;
+ immVertex2fv(shdr_pos, co);
+
+ immEnd();
+ immUnbindProgram();
+
+ /* GWN_PRIM_POINTS do not survive dashed line geometry shader... */
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
/* x marks the spot .................................................... */
/* -> outer frame */
- glColor3f(0.9f, 0.9f, 0.9f);
+ immUniformColor3f(0.9f, 0.9f, 0.9f);
glPointSize(7.0);
- glBegin(GL_POINTS);
- glVertex2f(x, y);
- glEnd();
+ immBegin(GWN_PRIM_POINTS, 1);
+ immVertex2f(shdr_pos, x, y);
+ immEnd();
/* inner frame */
- glColor3f(0.9f, 0.0f, 0.0f);
+ immUniformColor3f(0.9f, 0.0f, 0.0f);
glPointSize(3.0);
- glBegin(GL_POINTS);
- glVertex2f(x, y);
- glEnd();
+ immBegin(GWN_PRIM_POINTS, 1);
+ immVertex2f(shdr_pos, x, y);
+ immEnd();
}
}
+
+ immUnbindProgram();
}
/* Public Curve-Drawing API ---------------- */
@@ -925,29 +957,43 @@ void graph_draw_ghost_curves(bAnimContext *ac, SpaceIpo *sipo, ARegion *ar)
FCurve *fcu;
/* draw with thick dotted lines */
- setlinestyle(10);
glLineWidth(3.0f);
/* anti-aliased lines for less jagged appearance */
- if ((sipo->flag & SIPO_BEAUTYDRAW_OFF) == 0) glEnable(GL_LINE_SMOOTH);
+ if ((sipo->flag & SIPO_BEAUTYDRAW_OFF) == 0) {
+ glEnable(GL_LINE_SMOOTH);
+ }
glEnable(GL_BLEND);
-
+
+ const uint shdr_pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR);
+
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2] / UI_DPI_FAC, viewport_size[3] / UI_DPI_FAC);
+
+ immUniform1i("num_colors", 0); /* Simple dashes. */
+ immUniform1f("dash_width", 20.0f);
+ immUniform1f("dash_factor", 0.5f);
+
/* the ghost curves are simply sampled F-Curves stored in sipo->ghostCurves */
for (fcu = sipo->ghostCurves.first; fcu; fcu = fcu->next) {
/* set whatever color the curve has set
* - this is set by the function which creates these
* - draw with a fixed opacity of 2
*/
- glColor4f(fcu->color[0], fcu->color[1], fcu->color[2], 0.5f);
+ immUniformColor3fvAlpha(fcu->color, 0.5f);
/* simply draw the stored samples */
- draw_fcurve_curve_samples(ac, NULL, fcu, &ar->v2d);
+ draw_fcurve_curve_samples(ac, NULL, fcu, &ar->v2d, shdr_pos);
+ }
+
+ immUnbindProgram();
+
+ if ((sipo->flag & SIPO_BEAUTYDRAW_OFF) == 0) {
+ glDisable(GL_LINE_SMOOTH);
}
-
- /* restore settings */
- setlinestyle(0);
-
- if ((sipo->flag & SIPO_BEAUTYDRAW_OFF) == 0) glDisable(GL_LINE_SMOOTH);
glDisable(GL_BLEND);
}
@@ -975,9 +1021,10 @@ void graph_draw_curves(bAnimContext *ac, SpaceIpo *sipo, ARegion *ar, View2DGrid
AnimData *adt = ANIM_nla_mapping_get(ac, ale);
/* map keyframes for drawing if scaled F-Curve */
- if (adt)
- ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 0, 0);
-
+ if (adt) {
+ ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 0, 0);
+ }
+
/* draw curve:
* - curve line may be result of one or more destructive modifiers or just the raw data,
* so we need to check which method should be used
@@ -986,60 +1033,82 @@ void graph_draw_curves(bAnimContext *ac, SpaceIpo *sipo, ARegion *ar, View2DGrid
*/
/* 1) draw curve line */
+ if (((fcu->modifiers.first) || (fcu->flag & FCURVE_INT_VALUES)) ||
+ (((fcu->bezt) || (fcu->fpt)) && (fcu->totvert)))
{
/* set color/drawing style for curve itself */
+ /* draw active F-Curve thicker than the rest to make it stand out */
+ if (fcu->flag & FCURVE_ACTIVE) {
+ glLineWidth(2.5);
+ }
+ else {
+ glLineWidth(1.0);
+ }
+
+ /* anti-aliased lines for less jagged appearance */
+ if ((sipo->flag & SIPO_BEAUTYDRAW_OFF) == 0) {
+ glEnable(GL_LINE_SMOOTH);
+ }
+ glEnable(GL_BLEND);
+
+ const uint shdr_pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR);
+
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2] / UI_DPI_FAC, viewport_size[3] / UI_DPI_FAC);
+
+ immUniform1i("num_colors", 0); /* Simple dashes. */
+
if (BKE_fcurve_is_protected(fcu)) {
/* protected curves (non editable) are drawn with dotted lines */
- setlinestyle(2);
+ immUniform1f("dash_width", 4.0f);
+ immUniform1f("dash_factor", 0.5f);
+ }
+ else {
+ immUniform1f("dash_factor", 2.0f); /* solid line */
}
+
if (((fcu->grp) && (fcu->grp->flag & AGRP_MUTED)) || (fcu->flag & FCURVE_MUTED)) {
/* muted curves are drawn in a grayish hue */
/* XXX should we have some variations? */
- UI_ThemeColorShade(TH_HEADER, 50);
+ immUniformThemeColorShade(TH_HEADER, 50);
}
else {
- /* set whatever color the curve has set
+ /* set whatever color the curve has set
* - unselected curves draw less opaque to help distinguish the selected ones
*/
- glColor4f(fcu->color[0], fcu->color[1], fcu->color[2], fcurve_display_alpha(fcu));
- }
-
- /* draw active F-Curve thicker than the rest to make it stand out */
- if (fcu->flag & FCURVE_ACTIVE) {
- glLineWidth(2.0);
- }
- else {
- glLineWidth(1.0);
+ immUniformColor3fvAlpha(fcu->color, fcurve_display_alpha(fcu));
}
-
- /* anti-aliased lines for less jagged appearance */
- if ((sipo->flag & SIPO_BEAUTYDRAW_OFF) == 0) glEnable(GL_LINE_SMOOTH);
- glEnable(GL_BLEND);
-
+
/* draw F-Curve */
if ((fcu->modifiers.first) || (fcu->flag & FCURVE_INT_VALUES)) {
/* draw a curve affected by modifiers or only allowed to have integer values
* by sampling it at various small-intervals over the visible region
*/
- draw_fcurve_curve(ac, ale->id, fcu, &ar->v2d, grid);
+ draw_fcurve_curve(ac, ale->id, fcu, &ar->v2d, grid, shdr_pos);
}
else if (((fcu->bezt) || (fcu->fpt)) && (fcu->totvert)) {
/* just draw curve based on defined data (i.e. no modifiers) */
if (fcu->bezt) {
- if (fcurve_can_use_simple_bezt_drawing(fcu))
- draw_fcurve_curve_bezts(ac, ale->id, fcu, &ar->v2d);
- else
- draw_fcurve_curve(ac, ale->id, fcu, &ar->v2d, grid);
+ if (fcurve_can_use_simple_bezt_drawing(fcu)) {
+ draw_fcurve_curve_bezts(ac, ale->id, fcu, &ar->v2d, shdr_pos);
+ }
+ else {
+ draw_fcurve_curve(ac, ale->id, fcu, &ar->v2d, grid, shdr_pos);
+ }
}
else if (fcu->fpt) {
- draw_fcurve_curve_samples(ac, ale->id, fcu, &ar->v2d);
+ draw_fcurve_curve_samples(ac, ale->id, fcu, &ar->v2d, shdr_pos);
}
}
-
- /* restore settings */
- setlinestyle(0);
-
- if ((sipo->flag & SIPO_BEAUTYDRAW_OFF) == 0) glDisable(GL_LINE_SMOOTH);
+
+ immUnbindProgram();
+
+ if ((sipo->flag & SIPO_BEAUTYDRAW_OFF) == 0) {
+ glDisable(GL_LINE_SMOOTH);
+ }
glDisable(GL_BLEND);
}
@@ -1047,7 +1116,7 @@ void graph_draw_curves(bAnimContext *ac, SpaceIpo *sipo, ARegion *ar, View2DGrid
* - if the option to only show controls if the F-Curve is selected is enabled, we must obey this
*/
if (!(sipo->flag & SIPO_SELCUVERTSONLY) || (fcu->flag & FCURVE_SELECTED)) {
- if (fcurve_are_keyframes_usable(fcu) == 0) {
+ if (!fcurve_are_keyframes_usable(fcu) && !(fcu->fpt && fcu->totvert)) {
/* only draw controls if this is the active modifier */
if ((fcu->flag & FCURVE_ACTIVE) && (fcm)) {
switch (fcm->type) {
@@ -1063,9 +1132,9 @@ void graph_draw_curves(bAnimContext *ac, SpaceIpo *sipo, ARegion *ar, View2DGrid
float unit_scale = ANIM_unit_mapping_get_factor(ac->scene, ale->id, fcu, mapping_flag, &offset);
/* apply unit-scaling to all values via OpenGL */
- glPushMatrix();
- glScalef(1.0f, unit_scale, 1.0f);
- glTranslatef(0.0f, offset, 0.0f);
+ gpuPushMatrix();
+ gpuScale2f(1.0f, unit_scale);
+ gpuTranslate2f(0.0f, offset);
/* set this once and for all - all handles and handle-verts should use the same thickness */
glLineWidth(1.0);
@@ -1080,14 +1149,14 @@ void graph_draw_curves(bAnimContext *ac, SpaceIpo *sipo, ARegion *ar, View2DGrid
glDisable(GL_BLEND);
}
- draw_fcurve_vertices(sipo, ar, fcu, do_handles, (sipo->flag & SIPO_SELVHANDLESONLY), unit_scale);
+ draw_fcurve_vertices(ar, fcu, do_handles, (sipo->flag & SIPO_SELVHANDLESONLY));
}
else {
/* samples: only draw two indicators at either end as indicators */
draw_fcurve_samples(sipo, ar, fcu);
}
- glPopMatrix();
+ gpuPopMatrix();
}
}
diff --git a/source/blender/editors/space_graph/graph_edit.c b/source/blender/editors/space_graph/graph_edit.c
index 12d24502ad6..29e3f99e1d4 100644
--- a/source/blender/editors/space_graph/graph_edit.c
+++ b/source/blender/editors/space_graph/graph_edit.c
@@ -36,7 +36,7 @@
#include <float.h>
#ifdef WITH_AUDASPACE
-# include AUD_SPECIAL_H
+# include <AUD_Special.h>
#endif
#include "MEM_guardedalloc.h"
@@ -54,13 +54,14 @@
#include "BLT_translation.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
#include "BKE_global.h"
#include "BKE_nla.h"
#include "BKE_context.h"
#include "BKE_report.h"
+#include "DEG_depsgraph_build.h"
+
#include "UI_view2d.h"
#include "ED_anim_api.h"
@@ -2714,7 +2715,7 @@ static int graph_driver_vars_paste_exec(bContext *C, wmOperator *op)
/* successful or not? */
if (ok) {
/* rebuild depsgraph, now that there are extra deps here */
- DAG_relations_tag_update(CTX_data_main(C));
+ DEG_relations_tag_update(CTX_data_main(C));
/* set notifier that keyframes have changed */
WM_event_add_notifier(C, NC_SCENE | ND_FRAME, CTX_data_scene(C));
@@ -2788,7 +2789,7 @@ static int graph_driver_delete_invalid_exec(bContext *C, wmOperator *op)
if (deleted > 0) {
/* notify the world of any changes */
- DAG_relations_tag_update(CTX_data_main(C));
+ DEG_relations_tag_update(CTX_data_main(C));
WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_REMOVED, NULL);
WM_reportf(RPT_INFO, "Deleted %u drivers", deleted);
}
diff --git a/source/blender/editors/space_graph/space_graph.c b/source/blender/editors/space_graph/space_graph.c
index f12db310856..4b89c8db9e6 100644
--- a/source/blender/editors/space_graph/space_graph.c
+++ b/source/blender/editors/space_graph/space_graph.c
@@ -53,7 +53,7 @@
#include "ED_anim_api.h"
#include "ED_markers.h"
-#include "BIF_gl.h"
+#include "GPU_immediate.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -265,43 +265,52 @@ static void graph_main_region_draw(const bContext *C, ARegion *ar)
/* only free grid after drawing data, as we need to use it to determine sampling rate */
UI_view2d_grid_free(grid);
-
- /* horizontal component of value-cursor (value line before the current frame line) */
- if ((sipo->flag & SIPO_NODRAWCURSOR) == 0) {
- float y = sipo->cursorVal;
-
- /* Draw a green line to indicate the cursor value */
- UI_ThemeColorShadeAlpha(TH_CFRAME, -10, -50);
- glEnable(GL_BLEND);
- glLineWidth(2.0);
+ if (((sipo->flag & SIPO_NODRAWCURSOR) == 0) || (sipo->mode == SIPO_MODE_DRIVERS)) {
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
- glBegin(GL_LINES);
- glVertex2f(v2d->cur.xmin, y);
- glVertex2f(v2d->cur.xmax, y);
- glEnd();
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
- glDisable(GL_BLEND);
- }
-
- /* current frame or vertical component of vertical component of the cursor */
- if (sipo->mode == SIPO_MODE_DRIVERS) {
- /* cursor x-value */
- float x = sipo->cursorTime;
-
- /* to help differentiate this from the current frame, draw slightly darker like the horizontal one */
- UI_ThemeColorShadeAlpha(TH_CFRAME, -40, -50);
- glEnable(GL_BLEND);
- glLineWidth(2.0);
-
- glBegin(GL_LINES);
- glVertex2f(x, v2d->cur.ymin);
- glVertex2f(x, v2d->cur.ymax);
- glEnd();
+ /* horizontal component of value-cursor (value line before the current frame line) */
+ if ((sipo->flag & SIPO_NODRAWCURSOR) == 0) {
+
+ float y = sipo->cursorVal;
+
+ /* Draw a green line to indicate the cursor value */
+ immUniformThemeColorShadeAlpha(TH_CFRAME, -10, -50);
+ glEnable(GL_BLEND);
+ glLineWidth(2.0);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2f(pos, v2d->cur.xmin, y);
+ immVertex2f(pos, v2d->cur.xmax, y);
+ immEnd();
+
+ glDisable(GL_BLEND);
+ }
+
+ /* current frame or vertical component of vertical component of the cursor */
+ if (sipo->mode == SIPO_MODE_DRIVERS) {
+ /* cursor x-value */
+ float x = sipo->cursorTime;
+
+ /* to help differentiate this from the current frame, draw slightly darker like the horizontal one */
+ immUniformThemeColorShadeAlpha(TH_CFRAME, -40, -50);
+ glEnable(GL_BLEND);
+ glLineWidth(2.0);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2f(pos, x, v2d->cur.ymin);
+ immVertex2f(pos, x, v2d->cur.ymax);
+ immEnd();
+
+ glDisable(GL_BLEND);
+ }
- glDisable(GL_BLEND);
+ immUnbindProgram();
}
- else {
+
+ if (sipo->mode != SIPO_MODE_DRIVERS) {
/* current frame */
if (sipo->flag & SIPO_DRAWTIME) flag |= DRAWCFRA_UNIT_SECONDS;
if ((sipo->flag & SIPO_NODRAWCFRANUM) == 0) flag |= DRAWCFRA_SHOW_NUMBOX;
@@ -404,7 +413,9 @@ static void graph_buttons_region_draw(const bContext *C, ARegion *ar)
ED_region_panels(C, ar, NULL, -1, true);
}
-static void graph_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+static void graph_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar,
+ wmNotifier *wmn, const Scene *UNUSED(scene))
{
/* context changes */
switch (wmn->category) {
@@ -450,6 +461,11 @@ static void graph_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), AReg
if (wmn->action == NA_RENAME)
ED_region_tag_redraw(ar);
break;
+ case NC_SCREEN:
+ if (ELEM(wmn->data, ND_LAYER)) {
+ ED_region_tag_redraw(ar);
+ }
+ break;
default:
if (wmn->data == ND_KEYS)
ED_region_tag_redraw(ar);
@@ -459,7 +475,8 @@ static void graph_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), AReg
}
/* editor level listener */
-static void graph_listener(bScreen *UNUSED(sc), ScrArea *sa, wmNotifier *wmn)
+static void graph_listener(bScreen *UNUSED(sc), ScrArea *sa, wmNotifier *wmn, Scene *UNUSED(scene),
+ WorkSpace *UNUSED(workspace))
{
SpaceIpo *sipo = (SpaceIpo *)sa->spacedata.first;
diff --git a/source/blender/editors/space_image/CMakeLists.txt b/source/blender/editors/space_image/CMakeLists.txt
index c60d194b620..0bc09981ba5 100644
--- a/source/blender/editors/space_image/CMakeLists.txt
+++ b/source/blender/editors/space_image/CMakeLists.txt
@@ -25,6 +25,7 @@ set(INC
../../blenlib
../../blentranslation
../../bmesh
+ ../../depsgraph
../../imbuf
../../gpu
../../makesdna
diff --git a/source/blender/editors/space_image/image_draw.c b/source/blender/editors/space_image/image_draw.c
index 8cb23c9e021..23c4fbbe45e 100644
--- a/source/blender/editors/space_image/image_draw.c
+++ b/source/blender/editors/space_image/image_draw.c
@@ -60,9 +60,12 @@
#include "BKE_image.h"
#include "BKE_paint.h"
-#include "BIF_gl.h"
#include "BIF_glutil.h"
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+#include "GPU_matrix.h"
+
#include "BLF_api.h"
#include "ED_gpencil.h"
@@ -87,7 +90,6 @@ static void draw_render_info(const bContext *C,
float zoomx,
float zoomy)
{
- RenderResult *rr;
Render *re = RE_GetSceneRender(scene);
RenderData *rd = RE_engine_get_render_data(re);
Scene *stats_scene = ED_render_job_get_scene(C);
@@ -95,7 +97,7 @@ static void draw_render_info(const bContext *C,
stats_scene = CTX_data_scene(C);
}
- rr = BKE_image_acquire_renderresult(stats_scene, ima);
+ RenderResult *rr = BKE_image_acquire_renderresult(stats_scene, ima);
if (rr && rr->text) {
float fill_color[4] = {0.0f, 0.0f, 0.0f, 0.25f};
@@ -107,39 +109,41 @@ static void draw_render_info(const bContext *C,
if (re) {
int total_tiles;
bool need_free_tiles;
- rcti *tiles;
-
- tiles = RE_engine_get_current_tiles(re, &total_tiles, &need_free_tiles);
+ rcti *tiles = RE_engine_get_current_tiles(re, &total_tiles, &need_free_tiles);
if (total_tiles) {
- int i, x, y;
- rcti *tile;
-
/* find window pixel coordinates of origin */
+ int x, y;
UI_view2d_view_to_region(&ar->v2d, 0.0f, 0.0f, &x, &y);
- glPushMatrix();
- glTranslatef(x, y, 0.0f);
- glScalef(zoomx, zoomy, 1.0f);
+ gpuPushMatrix();
+ gpuTranslate2f(x, y);
+ gpuScale2f(zoomx, zoomy);
if (rd->mode & R_BORDER) {
- glTranslatef((int)(-rd->border.xmin * rd->xsch * rd->size / 100.0f),
- (int)(-rd->border.ymin * rd->ysch * rd->size / 100.0f),
- 0.0f);
+ /* TODO: round or floor instead of casting to int */
+ gpuTranslate2f((int)(-rd->border.xmin * rd->xsch * rd->size * 0.01f),
+ (int)(-rd->border.ymin * rd->ysch * rd->size * 0.01f));
}
- UI_ThemeColor(TH_FACE_SELECT);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformThemeColor(TH_FACE_SELECT);
glLineWidth(1.0f);
- for (i = 0, tile = tiles; i < total_tiles; i++, tile++) {
- glaDrawBorderCorners(tile, zoomx, zoomy);
+
+ rcti *tile = tiles;
+ for (int i = 0; i < total_tiles; i++, tile++) {
+ immDrawBorderCorners(pos, tile, zoomx, zoomy);
}
+ immUnbindProgram();
+
if (need_free_tiles) {
MEM_freeN(tiles);
}
- glPopMatrix();
+ gpuPopMatrix();
}
}
}
@@ -169,28 +173,34 @@ void ED_image_draw_info(Scene *scene, ARegion *ar, bool color_manage, bool use_d
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
/* noisy, high contrast make impossible to read if lower alpha is used. */
- glColor4ub(0, 0, 0, 190);
- glRecti(0.0, 0.0, BLI_rcti_size_x(&ar->winrct) + 1, UI_UNIT_Y);
+ immUniformColor4ub(0, 0, 0, 190);
+ immRecti(pos, 0, 0, BLI_rcti_size_x(&ar->winrct) + 1, UI_UNIT_Y);
+
+ immUnbindProgram();
+
glDisable(GL_BLEND);
BLF_size(blf_mono_font, 11 * U.pixelsize, U.dpi);
- glColor3ub(255, 255, 255);
+ BLF_color3ub(blf_mono_font, 255, 255, 255);
BLI_snprintf(str, sizeof(str), "X:%-4d Y:%-4d |", x, y);
BLF_position(blf_mono_font, dx, dy, 0);
BLF_draw_ascii(blf_mono_font, str, sizeof(str));
dx += BLF_width(blf_mono_font, str, sizeof(str));
if (zp) {
- glColor3ub(255, 255, 255);
+ BLF_color3ub(blf_mono_font, 255, 255, 255);
BLI_snprintf(str, sizeof(str), " Z:%-.4f |", 0.5f + 0.5f * (((float)*zp) / (float)0x7fffffff));
BLF_position(blf_mono_font, dx, dy, 0);
BLF_draw_ascii(blf_mono_font, str, sizeof(str));
dx += BLF_width(blf_mono_font, str, sizeof(str));
}
if (zpf) {
- glColor3ub(255, 255, 255);
+ BLF_color3ub(blf_mono_font, 255, 255, 255);
BLI_snprintf(str, sizeof(str), " Z:%-.3f |", *zpf);
BLF_position(blf_mono_font, dx, dy, 0);
BLF_draw_ascii(blf_mono_font, str, sizeof(str));
@@ -204,14 +214,14 @@ void ED_image_draw_info(Scene *scene, ARegion *ar, bool color_manage, bool use_d
else if (cp != NULL) {
BLI_snprintf(str, sizeof(str), " Val:%-.3f |", cp[0] / 255.0f);
}
- glColor3ub(255, 255, 255);
+ BLF_color3ub(blf_mono_font, 255, 255, 255);
BLF_position(blf_mono_font, dx, dy, 0);
BLF_draw_ascii(blf_mono_font, str, sizeof(str));
dx += BLF_width(blf_mono_font, str, sizeof(str));
}
if (channels >= 3) {
- glColor3ubv(red);
+ BLF_color3ubv(blf_mono_font, red);
if (fp)
BLI_snprintf(str, sizeof(str), " R:%-.5f", fp[0]);
else if (cp)
@@ -222,7 +232,7 @@ void ED_image_draw_info(Scene *scene, ARegion *ar, bool color_manage, bool use_d
BLF_draw_ascii(blf_mono_font, str, sizeof(str));
dx += BLF_width(blf_mono_font, str, sizeof(str));
- glColor3ubv(green);
+ BLF_color3ubv(blf_mono_font, green);
if (fp)
BLI_snprintf(str, sizeof(str), " G:%-.5f", fp[1]);
else if (cp)
@@ -233,7 +243,7 @@ void ED_image_draw_info(Scene *scene, ARegion *ar, bool color_manage, bool use_d
BLF_draw_ascii(blf_mono_font, str, sizeof(str));
dx += BLF_width(blf_mono_font, str, sizeof(str));
- glColor3ubv(blue);
+ BLF_color3ubv(blf_mono_font, blue);
if (fp)
BLI_snprintf(str, sizeof(str), " B:%-.5f", fp[2]);
else if (cp)
@@ -245,7 +255,7 @@ void ED_image_draw_info(Scene *scene, ARegion *ar, bool color_manage, bool use_d
dx += BLF_width(blf_mono_font, str, sizeof(str));
if (channels == 4) {
- glColor3ub(255, 255, 255);
+ BLF_color3ub(blf_mono_font, 255, 255, 255);
if (fp)
BLI_snprintf(str, sizeof(str), " A:%-.4f", fp[3]);
else if (cp)
@@ -267,9 +277,9 @@ void ED_image_draw_info(Scene *scene, ARegion *ar, bool color_manage, bool use_d
rgba[3] = linearcol[3];
if (use_default_view)
- IMB_colormanagement_pixel_to_display_space_v4(rgba, rgba, NULL, &scene->display_settings);
+ IMB_colormanagement_pixel_to_display_space_v4(rgba, rgba, NULL, &scene->display_settings);
else
- IMB_colormanagement_pixel_to_display_space_v4(rgba, rgba, &scene->view_settings, &scene->display_settings);
+ IMB_colormanagement_pixel_to_display_space_v4(rgba, rgba, &scene->view_settings, &scene->display_settings);
BLI_snprintf(str, sizeof(str), " | CM R:%-.4f G:%-.4f B:%-.4f", rgba[0], rgba[1], rgba[2]);
BLF_position(blf_mono_font, dx, dy, 0);
@@ -305,9 +315,9 @@ void ED_image_draw_info(Scene *scene, ARegion *ar, bool color_manage, bool use_d
if (color_manage) {
if (use_default_view)
- IMB_colormanagement_pixel_to_display_space_v4(finalcol, col, NULL, &scene->display_settings);
+ IMB_colormanagement_pixel_to_display_space_v4(finalcol, col, NULL, &scene->display_settings);
else
- IMB_colormanagement_pixel_to_display_space_v4(finalcol, col, &scene->view_settings, &scene->display_settings);
+ IMB_colormanagement_pixel_to_display_space_v4(finalcol, col, &scene->view_settings, &scene->display_settings);
}
else {
copy_v4_v4(finalcol, col);
@@ -318,13 +328,18 @@ void ED_image_draw_info(Scene *scene, ARegion *ar, bool color_manage, bool use_d
BLI_rcti_init(&color_rect, dx, dx + (1.5f * UI_UNIT_X), 0.15f * UI_UNIT_Y, 0.85f * UI_UNIT_Y);
+ /* BLF uses immediate mode too, so we must reset our vertex format */
+ pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
if (channels == 4) {
rcti color_rect_half;
int color_quater_x, color_quater_y;
color_rect_half = color_rect;
color_rect_half.xmax = BLI_rcti_cent_x(&color_rect);
- glRecti(color_rect.xmin, color_rect.ymin, color_rect.xmax, color_rect.ymax);
+ /* what color ??? */
+ immRecti(pos, color_rect.xmin, color_rect.ymin, color_rect.xmax, color_rect.ymax);
color_rect_half = color_rect;
color_rect_half.xmin = BLI_rcti_cent_x(&color_rect);
@@ -332,31 +347,34 @@ void ED_image_draw_info(Scene *scene, ARegion *ar, bool color_manage, bool use_d
color_quater_x = BLI_rcti_cent_x(&color_rect_half);
color_quater_y = BLI_rcti_cent_y(&color_rect_half);
- glColor4ub(UI_ALPHA_CHECKER_DARK, UI_ALPHA_CHECKER_DARK, UI_ALPHA_CHECKER_DARK, 255);
- glRecti(color_rect_half.xmin, color_rect_half.ymin, color_rect_half.xmax, color_rect_half.ymax);
+ immUniformColor3ub(UI_ALPHA_CHECKER_DARK, UI_ALPHA_CHECKER_DARK, UI_ALPHA_CHECKER_DARK);
+ immRecti(pos, color_rect_half.xmin, color_rect_half.ymin, color_rect_half.xmax, color_rect_half.ymax);
- glColor4ub(UI_ALPHA_CHECKER_LIGHT, UI_ALPHA_CHECKER_LIGHT, UI_ALPHA_CHECKER_LIGHT, 255);
- glRecti(color_quater_x, color_quater_y, color_rect_half.xmax, color_rect_half.ymax);
- glRecti(color_rect_half.xmin, color_rect_half.ymin, color_quater_x, color_quater_y);
+ immUniformColor3ub(UI_ALPHA_CHECKER_LIGHT, UI_ALPHA_CHECKER_LIGHT, UI_ALPHA_CHECKER_LIGHT);
+ immRecti(pos, color_quater_x, color_quater_y, color_rect_half.xmax, color_rect_half.ymax);
+ immRecti(pos, color_rect_half.xmin, color_rect_half.ymin, color_quater_x, color_quater_y);
glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glColor4f(UNPACK3(finalcol), fp ? fp[3] : (cp[3] / 255.0f));
- glRecti(color_rect.xmin, color_rect.ymin, color_rect.xmax, color_rect.ymax);
+ immUniformColor3fvAlpha(finalcol, fp ? fp[3] : (cp[3] / 255.0f));
+ immRecti(pos, color_rect.xmin, color_rect.ymin, color_rect.xmax, color_rect.ymax);
glDisable(GL_BLEND);
}
else {
- glColor3fv(finalcol);
- glRecti(color_rect.xmin, color_rect.ymin, color_rect.xmax, color_rect.ymax);
+ immUniformColor3fv(finalcol);
+ immRecti(pos, color_rect.xmin, color_rect.ymin, color_rect.xmax, color_rect.ymax);
}
+ immUnbindProgram();
/* draw outline */
- glColor3ub(128, 128, 128);
- sdrawbox(color_rect.xmin, color_rect.ymin, color_rect.xmax, color_rect.ymax);
+ pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor3ub(128, 128, 128);
+ imm_draw_box_wire_2d(pos, color_rect.xmin, color_rect.ymin, color_rect.xmax, color_rect.ymax);
+ immUnbindProgram();
dx += 1.75f * UI_UNIT_X;
- glColor3ub(255, 255, 255);
+ BLF_color3ub(blf_mono_font, 255, 255, 255);
if (channels == 1) {
if (fp) {
rgb_to_hsv(fp[0], fp[0], fp[0], &hue, &sat, &val);
@@ -375,7 +393,6 @@ void ED_image_draw_info(Scene *scene, ARegion *ar, bool color_manage, bool use_d
BLI_snprintf(str, sizeof(str), " L:%-.4f", lum);
BLF_position(blf_mono_font, dx, dy, 0);
BLF_draw_ascii(blf_mono_font, str, sizeof(str));
- dx += BLF_width(blf_mono_font, str, sizeof(str));
}
else if (channels >= 3) {
rgb_to_hsv(finalcol[0], finalcol[1], finalcol[2], &hue, &sat, &val);
@@ -399,70 +416,37 @@ void ED_image_draw_info(Scene *scene, ARegion *ar, bool color_manage, bool use_d
BLI_snprintf(str, sizeof(str), " L:%-.4f", lum);
BLF_position(blf_mono_font, dx, dy, 0);
BLF_draw_ascii(blf_mono_font, str, sizeof(str));
- dx += BLF_width(blf_mono_font, str, sizeof(str));
}
-
- (void)dx;
}
/* image drawing */
-
-static void sima_draw_alpha_pixels(float x1, float y1, int rectx, int recty, unsigned int *recti)
+static void sima_draw_zbuf_pixels(float x1, float y1, int rectx, int recty, int *rect,
+ float zoomx, float zoomy)
{
-
- /* swap bytes, so alpha is most significant one, then just draw it as luminance int */
- if (ENDIAN_ORDER == B_ENDIAN)
- glPixelStorei(GL_UNPACK_SWAP_BYTES, 1);
+ float red[4] = {1.0f, 0.0f, 0.0f, 0.0f};
- glaDrawPixelsSafe(x1, y1, rectx, recty, rectx, GL_LUMINANCE, GL_UNSIGNED_INT, recti);
- glPixelStorei(GL_UNPACK_SWAP_BYTES, 0);
-}
+ /* Slowwww */
+ int *recti = MEM_mallocN(rectx * recty * sizeof(int), "temp");
+ for (int a = rectx * recty - 1; a >= 0; a--) {
+ /* zbuffer values are signed, so we need to shift color range */
+ recti[a] = rect[a] * 0.5f + 0.5f;
+ }
-static void sima_draw_alpha_pixelsf(float x1, float y1, int rectx, int recty, float *rectf)
-{
- float *trectf = MEM_mallocN(rectx * recty * 4, "temp");
- int a, b;
-
- for (a = rectx * recty - 1, b = 4 * a + 3; a >= 0; a--, b -= 4)
- trectf[a] = rectf[b];
-
- glaDrawPixelsSafe(x1, y1, rectx, recty, rectx, GL_LUMINANCE, GL_FLOAT, trectf);
- MEM_freeN(trectf);
- /* ogl trick below is slower... (on ATI 9600) */
-// glColorMask(1, 0, 0, 0);
-// glaDrawPixelsSafe(x1, y1, rectx, recty, rectx, GL_RGBA, GL_FLOAT, rectf + 3);
-// glColorMask(0, 1, 0, 0);
-// glaDrawPixelsSafe(x1, y1, rectx, recty, rectx, GL_RGBA, GL_FLOAT, rectf + 2);
-// glColorMask(0, 0, 1, 0);
-// glaDrawPixelsSafe(x1, y1, rectx, recty, rectx, GL_RGBA, GL_FLOAT, rectf + 1);
-// glColorMask(1, 1, 1, 1);
-}
+ IMMDrawPixelsTexState state = immDrawPixelsTexSetup(GPU_SHADER_2D_IMAGE_SHUFFLE_COLOR);
+ GPU_shader_uniform_vector(state.shader, GPU_shader_get_uniform(state.shader, "shuffle"), 4, 1, red);
-static void sima_draw_zbuf_pixels(float x1, float y1, int rectx, int recty, int *recti)
-{
- /* zbuffer values are signed, so we need to shift color range */
- glPixelTransferf(GL_RED_SCALE, 0.5f);
- glPixelTransferf(GL_GREEN_SCALE, 0.5f);
- glPixelTransferf(GL_BLUE_SCALE, 0.5f);
- glPixelTransferf(GL_RED_BIAS, 0.5f);
- glPixelTransferf(GL_GREEN_BIAS, 0.5f);
- glPixelTransferf(GL_BLUE_BIAS, 0.5f);
-
- glaDrawPixelsSafe(x1, y1, rectx, recty, rectx, GL_LUMINANCE, GL_INT, recti);
-
- glPixelTransferf(GL_RED_SCALE, 1.0f);
- glPixelTransferf(GL_GREEN_SCALE, 1.0f);
- glPixelTransferf(GL_BLUE_SCALE, 1.0f);
- glPixelTransferf(GL_RED_BIAS, 0.0f);
- glPixelTransferf(GL_GREEN_BIAS, 0.0f);
- glPixelTransferf(GL_BLUE_BIAS, 0.0f);
+ immDrawPixelsTex(&state, x1, y1, rectx, recty, GL_RED, GL_INT, GL_NEAREST, recti, zoomx, zoomy, NULL);
+
+ MEM_freeN(recti);
}
-static void sima_draw_zbuffloat_pixels(Scene *scene, float x1, float y1, int rectx, int recty, float *rect_float)
+static void sima_draw_zbuffloat_pixels(Scene *scene, float x1, float y1, int rectx, int recty,
+ float *rect_float, float zoomx, float zoomy)
{
float bias, scale, *rectf, clipend;
int a;
-
+ float red[4] = {1.0f, 0.0f, 0.0f, 0.0f};
+
if (scene->camera && scene->camera->type == OB_CAMERA) {
bias = ((Camera *)scene->camera->data)->clipsta;
clipend = ((Camera *)scene->camera->data)->clipend;
@@ -473,8 +457,8 @@ static void sima_draw_zbuffloat_pixels(Scene *scene, float x1, float y1, int rec
scale = 0.01f;
clipend = 100.0f;
}
-
- rectf = MEM_mallocN(rectx * recty * 4, "temp");
+
+ rectf = MEM_mallocN(rectx * recty * sizeof(float), "temp");
for (a = rectx * recty - 1; a >= 0; a--) {
if (rect_float[a] > clipend)
rectf[a] = 0.0f;
@@ -485,92 +469,85 @@ static void sima_draw_zbuffloat_pixels(Scene *scene, float x1, float y1, int rec
rectf[a] *= rectf[a];
}
}
- glaDrawPixelsSafe(x1, y1, rectx, recty, rectx, GL_LUMINANCE, GL_FLOAT, rectf);
-
- MEM_freeN(rectf);
-}
-static int draw_image_channel_offset(SpaceImage *sima)
-{
-#ifdef __BIG_ENDIAN__
- if (sima->flag & SI_SHOW_R) return 0;
- else if (sima->flag & SI_SHOW_G) return 1;
- else return 2;
-#else
- if (sima->flag & SI_SHOW_R) return 1;
- else if (sima->flag & SI_SHOW_G) return 2;
- else return 3;
-#endif
+ IMMDrawPixelsTexState state = immDrawPixelsTexSetup(GPU_SHADER_2D_IMAGE_SHUFFLE_COLOR);
+ GPU_shader_uniform_vector(state.shader, GPU_shader_get_uniform(state.shader, "shuffle"), 4, 1, red);
+
+ immDrawPixelsTex(&state, x1, y1, rectx, recty, GL_RED, GL_FLOAT, GL_NEAREST, rectf, zoomx, zoomy, NULL);
+
+ MEM_freeN(rectf);
}
static void draw_image_buffer(const bContext *C, SpaceImage *sima, ARegion *ar, Scene *scene, ImBuf *ibuf, float fx, float fy, float zoomx, float zoomy)
{
int x, y;
- /* set zoom */
- glPixelZoom(zoomx, zoomy);
-
glaDefine2DArea(&ar->winrct);
/* find window pixel coordinates of origin */
UI_view2d_view_to_region(&ar->v2d, fx, fy, &x, &y);
/* this part is generic image display */
- if (sima->flag & SI_SHOW_ALPHA) {
- if (ibuf->rect)
- sima_draw_alpha_pixels(x, y, ibuf->x, ibuf->y, ibuf->rect);
- else if (ibuf->rect_float && ibuf->channels == 4)
- sima_draw_alpha_pixelsf(x, y, ibuf->x, ibuf->y, ibuf->rect_float);
- }
- else if (sima->flag & SI_SHOW_ZBUF && (ibuf->zbuf || ibuf->zbuf_float || (ibuf->channels == 1))) {
+ if (sima->flag & SI_SHOW_ZBUF && (ibuf->zbuf || ibuf->zbuf_float || (ibuf->channels == 1))) {
if (ibuf->zbuf)
- sima_draw_zbuf_pixels(x, y, ibuf->x, ibuf->y, ibuf->zbuf);
+ sima_draw_zbuf_pixels(x, y, ibuf->x, ibuf->y, ibuf->zbuf, zoomx, zoomy);
else if (ibuf->zbuf_float)
- sima_draw_zbuffloat_pixels(scene, x, y, ibuf->x, ibuf->y, ibuf->zbuf_float);
+ sima_draw_zbuffloat_pixels(scene, x, y, ibuf->x, ibuf->y, ibuf->zbuf_float, zoomx, zoomy);
else if (ibuf->channels == 1)
- sima_draw_zbuffloat_pixels(scene, x, y, ibuf->x, ibuf->y, ibuf->rect_float);
+ sima_draw_zbuffloat_pixels(scene, x, y, ibuf->x, ibuf->y, ibuf->rect_float, zoomx, zoomy);
}
else {
+ int clip_max_x, clip_max_y;
+ UI_view2d_view_to_region(&ar->v2d,
+ ar->v2d.cur.xmax, ar->v2d.cur.ymax,
+ &clip_max_x, &clip_max_y);
+
if (sima->flag & SI_USE_ALPHA) {
+ imm_draw_box_checker_2d(x, y, x + ibuf->x * zoomx, y + ibuf->y * zoomy);
+
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-
- fdrawcheckerboard(x, y, x + ibuf->x * zoomx, y + ibuf->y * zoomy);
}
- if ((sima->flag & (SI_SHOW_R | SI_SHOW_G | SI_SHOW_B)) == 0) {
- int clip_max_x, clip_max_y;
- UI_view2d_view_to_region(&ar->v2d,
- ar->v2d.cur.xmax, ar->v2d.cur.ymax,
- &clip_max_x, &clip_max_y);
+ /* If RGBA display with color management */
+ if ((sima->flag & (SI_SHOW_R | SI_SHOW_G | SI_SHOW_B | SI_SHOW_ALPHA)) == 0) {
+
glaDrawImBuf_glsl_ctx_clipping(C, ibuf, x, y, GL_NEAREST,
- 0, 0, clip_max_x, clip_max_y);
+ 0, 0, clip_max_x, clip_max_y, zoomx, zoomy);
}
else {
+ float shuffle[4] = {0.0f, 0.0f, 0.0f, 0.0f};
unsigned char *display_buffer;
void *cache_handle;
-
- /* TODO(sergey): Ideally GLSL shading should be capable of either
- * disabling some channels or displaying buffer with custom offset.
- */
- display_buffer = IMB_display_buffer_acquire_ctx(C, ibuf, &cache_handle);
-
- if (display_buffer != NULL) {
- int channel_offset = draw_image_channel_offset(sima);
- glaDrawPixelsSafe(x, y, ibuf->x, ibuf->y, ibuf->x, GL_LUMINANCE, GL_UNSIGNED_INT,
- display_buffer - (4 - channel_offset));
- }
- if (cache_handle != NULL) {
- IMB_display_buffer_release(cache_handle);
+ ColorManagedViewSettings *view_settings;
+ ColorManagedDisplaySettings *display_settings;
+
+ if (sima->flag & SI_SHOW_R)
+ shuffle[0] = 1.0f;
+ else if (sima->flag & SI_SHOW_G)
+ shuffle[1] = 1.0f;
+ else if (sima->flag & SI_SHOW_B)
+ shuffle[2] = 1.0f;
+ else if (sima->flag & SI_SHOW_ALPHA)
+ shuffle[3] = 1.0f;
+
+ IMMDrawPixelsTexState state = immDrawPixelsTexSetup(GPU_SHADER_2D_IMAGE_SHUFFLE_COLOR);
+ GPU_shader_uniform_vector(state.shader, GPU_shader_get_uniform(state.shader, "shuffle"), 4, 1, shuffle);
+
+ IMB_colormanagement_display_settings_from_ctx(C, &view_settings, &display_settings);
+ display_buffer = IMB_display_buffer_acquire(ibuf, view_settings, display_settings, &cache_handle);
+
+ if (display_buffer) {
+ immDrawPixelsTex_clipping(&state, x, y, ibuf->x, ibuf->y, GL_RGBA, GL_UNSIGNED_BYTE, GL_NEAREST, display_buffer,
+ 0, 0, clip_max_x, clip_max_y, zoomx, zoomy, NULL);
}
+
+ IMB_display_buffer_release(cache_handle);
}
if (sima->flag & SI_USE_ALPHA)
glDisable(GL_BLEND);
}
-
- /* reset zoom */
- glPixelZoom(1.0f, 1.0f);
}
static unsigned int *get_part_from_buffer(unsigned int *buffer, int width, short startx, short starty, short endx, short endy)
@@ -601,7 +578,7 @@ static void draw_image_buffer_tiled(SpaceImage *sima, ARegion *ar, Scene *scene,
unsigned int *rect;
int dx, dy, sx, sy, x, y;
void *cache_handle;
- int channel_offset = -1;
+ float shuffle[4] = {0.0f, 0.0f, 0.0f, 0.0f};
/* verify valid values, just leave this a while */
if (ima->xrep < 1) return;
@@ -615,8 +592,6 @@ static void draw_image_buffer_tiled(SpaceImage *sima, ARegion *ar, Scene *scene,
if (!display_buffer)
return;
- glPixelZoom(zoomx, zoomy);
-
if (sima->curtile >= ima->xrep * ima->yrep)
sima->curtile = ima->xrep * ima->yrep - 1;
@@ -628,24 +603,34 @@ static void draw_image_buffer_tiled(SpaceImage *sima, ARegion *ar, Scene *scene,
rect = get_part_from_buffer((unsigned int *)display_buffer, ibuf->x, sx, sy, sx + dx, sy + dy);
/* draw repeated */
- if ((sima->flag & (SI_SHOW_R | SI_SHOW_G | SI_SHOW_B)) != 0) {
- channel_offset = draw_image_channel_offset(sima);
+ if ((sima->flag & (SI_SHOW_R | SI_SHOW_G | SI_SHOW_B | SI_SHOW_ALPHA)) != 0) {
+ if (sima->flag & SI_SHOW_R)
+ shuffle[0] = 1.0f;
+ else if (sima->flag & SI_SHOW_G)
+ shuffle[1] = 1.0f;
+ else if (sima->flag & SI_SHOW_B)
+ shuffle[2] = 1.0f;
+ else if (sima->flag & SI_SHOW_ALPHA)
+ shuffle[3] = 1.0f;
}
+
for (sy = 0; sy + dy <= ibuf->y; sy += dy) {
for (sx = 0; sx + dx <= ibuf->x; sx += dx) {
UI_view2d_view_to_region(&ar->v2d, fx + (float)sx / (float)ibuf->x, fy + (float)sy / (float)ibuf->y, &x, &y);
- if (channel_offset == -1) {
- glaDrawPixelsSafe(x, y, dx, dy, dx, GL_RGBA, GL_UNSIGNED_BYTE, rect);
+
+ if ((sima->flag & (SI_SHOW_R | SI_SHOW_G | SI_SHOW_B | SI_SHOW_ALPHA)) == 0) {
+ IMMDrawPixelsTexState state = immDrawPixelsTexSetup(GPU_SHADER_2D_IMAGE_COLOR);
+ immDrawPixelsTex(&state, x, y, dx, dy, GL_RGBA, GL_UNSIGNED_BYTE, GL_NEAREST, rect, zoomx, zoomy, NULL);
}
else {
- glaDrawPixelsSafe(x, y, dx, dy, dx, GL_LUMINANCE, GL_UNSIGNED_INT,
- (unsigned char *)rect - (4 - channel_offset));
+ IMMDrawPixelsTexState state = immDrawPixelsTexSetup(GPU_SHADER_2D_IMAGE_SHUFFLE_COLOR);
+ GPU_shader_uniform_vector(state.shader, GPU_shader_get_uniform(state.shader, "shuffle"), 4, 1, shuffle);
+
+ immDrawPixelsTex(&state, x, y, dx, dy, GL_RGBA, GL_UNSIGNED_BYTE, GL_NEAREST, rect, zoomx, zoomy, NULL);
}
}
}
- glPixelZoom(1.0f, 1.0f);
-
IMB_display_buffer_release(cache_handle);
MEM_freeN(rect);
@@ -701,134 +686,62 @@ void draw_image_sample_line(SpaceImage *sima)
if (sima->sample_line_hist.flag & HISTO_FLAG_SAMPLELINE) {
Histogram *hist = &sima->sample_line_hist;
- glBegin(GL_LINES);
- glColor3ub(0, 0, 0);
- glVertex2fv(hist->co[0]);
- glVertex2fv(hist->co[1]);
- glEnd();
-
- setlinestyle(1);
- glBegin(GL_LINES);
- glColor3ub(255, 255, 255);
- glVertex2fv(hist->co[0]);
- glVertex2fv(hist->co[1]);
- glEnd();
- setlinestyle(0);
-
- }
-}
-
-/* XXX becomes WM paint cursor */
-#if 0
-static void draw_image_view_tool(Scene *scene)
-{
- ToolSettings *settings = scene->toolsettings;
- Brush *brush = settings->imapaint.brush;
- int mval[2];
- float radius;
- int draw = 0;
-
- if (brush) {
- if (settings->imapaint.flag & IMAGEPAINT_DRAWING) {
- if (settings->imapaint.flag & IMAGEPAINT_DRAW_TOOL_DRAWING)
- draw = 1;
- }
- else if (settings->imapaint.flag & IMAGEPAINT_DRAW_TOOL)
- draw = 1;
-
- if (draw) {
- getmouseco_areawin(mval);
-
- radius = BKE_brush_size_get(brush) * G.sima->zoom;
- fdrawXORcirc(mval[0], mval[1], radius);
-
- if (brush->innerradius != 1.0) {
- radius *= brush->innerradius;
- fdrawXORcirc(mval[0], mval[1], radius);
- }
- }
- }
-}
-#endif
-
-static unsigned char *get_alpha_clone_image(const bContext *C, Scene *scene, int *width, int *height)
-{
- Brush *brush = BKE_paint_brush(&scene->toolsettings->imapaint.paint);
- ImBuf *ibuf;
- unsigned int size, alpha;
- unsigned char *display_buffer;
- unsigned char *rect, *cp;
- void *cache_handle;
-
- if (!brush || !brush->clone.image)
- return NULL;
-
- ibuf = BKE_image_acquire_ibuf(brush->clone.image, NULL, NULL);
-
- if (!ibuf)
- return NULL;
-
- display_buffer = IMB_display_buffer_acquire_ctx(C, ibuf, &cache_handle);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int shdr_dashed_pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
- if (!display_buffer) {
- BKE_image_release_ibuf(brush->clone.image, ibuf, NULL);
- IMB_display_buffer_release(cache_handle);
+ immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR);
- return NULL;
- }
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2] / UI_DPI_FAC, viewport_size[3] / UI_DPI_FAC);
- rect = MEM_dupallocN(display_buffer);
+ immUniform1i("num_colors", 2); /* Advanced dashes. */
+ immUniformArray4fv("colors", (float *)(float[][4]){{1.0f, 1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f, 1.0f}}, 2);
+ immUniform1f("dash_width", 2.0f);
- IMB_display_buffer_release(cache_handle);
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2fv(shdr_dashed_pos, hist->co[0]);
+ immVertex2fv(shdr_dashed_pos, hist->co[1]);
+ immEnd();
- if (!rect) {
- BKE_image_release_ibuf(brush->clone.image, ibuf, NULL);
- return NULL;
+ immUnbindProgram();
}
-
- *width = ibuf->x;
- *height = ibuf->y;
-
- size = (*width) * (*height);
- alpha = (unsigned char)255 * brush->clone.alpha;
- cp = rect;
-
- while (size-- > 0) {
- cp[3] = alpha;
- cp += 4;
- }
-
- BKE_image_release_ibuf(brush->clone.image, ibuf, NULL);
-
- return rect;
}
static void draw_image_paint_helpers(const bContext *C, ARegion *ar, Scene *scene, float zoomx, float zoomy)
{
Brush *brush;
- int x, y, w, h;
- unsigned char *clonerect;
+ int x, y;
+ ImBuf *ibuf;
brush = BKE_paint_brush(&scene->toolsettings->imapaint.paint);
- if (brush && (brush->imagepaint_tool == PAINT_TOOL_CLONE)) {
- /* this is not very efficient, but glDrawPixels doesn't allow
- * drawing with alpha */
- clonerect = get_alpha_clone_image(C, scene, &w, &h);
+ if (brush && (brush->imagepaint_tool == PAINT_TOOL_CLONE) && brush->clone.image) {
+ ibuf = BKE_image_acquire_ibuf(brush->clone.image, NULL, NULL);
- if (clonerect) {
+ if (ibuf) {
+ void *cache_handle = NULL;
+ float col[4] = {1.0f, 1.0f, 1.0f, brush->clone.alpha};
UI_view2d_view_to_region(&ar->v2d, brush->clone.offset[0], brush->clone.offset[1], &x, &y);
- glPixelZoom(zoomx, zoomy);
+ unsigned char *display_buffer = IMB_display_buffer_acquire_ctx(C, ibuf, &cache_handle);
+
+ if (!display_buffer) {
+ BKE_image_release_ibuf(brush->clone.image, ibuf, NULL);
+ IMB_display_buffer_release(cache_handle);
+ return;
+ }
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glaDrawPixelsSafe(x, y, w, h, w, GL_RGBA, GL_UNSIGNED_BYTE, clonerect);
- glDisable(GL_BLEND);
- glPixelZoom(1.0, 1.0);
+ IMMDrawPixelsTexState state = immDrawPixelsTexSetup(GPU_SHADER_2D_IMAGE_COLOR);
+ immDrawPixelsTex(&state, x, y, ibuf->x, ibuf->y, GL_RGBA, GL_UNSIGNED_BYTE, GL_NEAREST, display_buffer, zoomx, zoomy, col);
- MEM_freeN(clonerect);
+ glDisable(GL_BLEND);
+
+ BKE_image_release_ibuf(brush->clone.image, ibuf, NULL);
+ IMB_display_buffer_release(cache_handle);
}
}
}
@@ -924,23 +837,6 @@ void draw_image_main(const bContext *C, ARegion *ar)
if (show_paint)
draw_image_paint_helpers(C, ar, scene, zoomx, zoomy);
- /* XXX integrate this code */
-#if 0
- if (ibuf) {
- float xoffs = 0.0f, yoffs = 0.0f;
-
- if (image_preview_active(sa, &xim, &yim)) {
- xoffs = scene->r.disprect.xmin;
- yoffs = scene->r.disprect.ymin;
- glColor3ub(0, 0, 0);
- calc_image_view(sima, 'f');
- myortho2(G.v2d->cur.xmin, G.v2d->cur.xmax, G.v2d->cur.ymin, G.v2d->cur.ymax);
- glRectf(0.0f, 0.0f, 1.0f, 1.0f);
- glLoadIdentity();
- }
- }
-#endif
-
if (show_viewer) {
BLI_unlock_thread(LOCK_DRAW_IMAGE);
}
@@ -1002,8 +898,12 @@ void draw_image_cache(const bContext *C, ARegion *ar)
/* Draw current frame. */
x = (cfra - sfra) / (efra - sfra + 1) * ar->winx;
- UI_ThemeColor(TH_CFRAME);
- glRecti(x, 0, x + ceilf(framelen), 8 * UI_DPI_FAC);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformThemeColor(TH_CFRAME);
+ immRecti(pos, x, 0, x + ceilf(framelen), 8 * UI_DPI_FAC);
+ immUnbindProgram();
+
ED_region_cache_draw_curfra_label(cfra, x, 8.0f * UI_DPI_FAC);
if (mask != NULL) {
diff --git a/source/blender/editors/space_image/image_edit.c b/source/blender/editors/space_image/image_edit.c
index 8f2f6595408..95ed8967380 100644
--- a/source/blender/editors/space_image/image_edit.c
+++ b/source/blender/editors/space_image/image_edit.c
@@ -44,6 +44,8 @@
#include "IMB_imbuf_types.h"
+#include "DEG_depsgraph.h"
+
#include "ED_image.h" /* own include */
#include "ED_mesh.h"
#include "ED_screen.h"
@@ -321,15 +323,16 @@ bool ED_image_slot_cycle(struct Image *image, int direction)
void ED_space_image_scopes_update(const struct bContext *C, struct SpaceImage *sima, struct ImBuf *ibuf, bool use_view_settings)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Scene *scene = CTX_data_scene(C);
Object *ob = CTX_data_active_object(C);
-
+
/* scope update can be expensive, don't update during paint modes */
if (sima->mode == SI_MODE_PAINT)
return;
- if (ob && ((ob->mode & (OB_MODE_TEXTURE_PAINT | OB_MODE_EDIT)) != 0))
+ if (ob && ((workspace->object_mode & (OB_MODE_TEXTURE_PAINT | OB_MODE_EDIT)) != 0)) {
return;
-
+ }
/* We also don't update scopes of render result during render. */
if (G.is_rendering) {
const Image *image = sima->image;
@@ -365,7 +368,7 @@ bool ED_space_image_show_uvedit(SpaceImage *sima, Object *obedit)
struct BMEditMesh *em = BKE_editmesh_from_object(obedit);
bool ret;
- ret = EDBM_mtexpoly_check(em);
+ ret = EDBM_uv_check(em);
return ret;
}
@@ -374,11 +377,12 @@ bool ED_space_image_show_uvedit(SpaceImage *sima, Object *obedit)
}
/* matches clip function */
-bool ED_space_image_check_show_maskedit(Scene *scene, SpaceImage *sima)
+bool ED_space_image_check_show_maskedit(
+ SpaceImage *sima, const WorkSpace *workspace, ViewLayer *view_layer)
{
/* check editmode - this is reserved for UV editing */
- Object *ob = OBACT;
- if (ob && ob->mode & OB_MODE_EDIT && ED_space_image_show_uvedit(sima, ob)) {
+ Object *ob = OBACT(view_layer);
+ if (ob && (workspace->object_mode & OB_MODE_EDIT) && ED_space_image_show_uvedit(sima, ob)) {
return false;
}
@@ -388,10 +392,10 @@ bool ED_space_image_check_show_maskedit(Scene *scene, SpaceImage *sima)
int ED_space_image_maskedit_poll(bContext *C)
{
SpaceImage *sima = CTX_wm_space_image(C);
-
if (sima) {
- Scene *scene = CTX_data_scene(C);
- return ED_space_image_check_show_maskedit(scene, sima);
+ WorkSpace *workspace = CTX_wm_workspace(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ return ED_space_image_check_show_maskedit(sima, workspace, view_layer);
}
return false;
diff --git a/source/blender/editors/space_image/image_intern.h b/source/blender/editors/space_image/image_intern.h
index 52d04ad4956..47d6257366c 100644
--- a/source/blender/editors/space_image/image_intern.h
+++ b/source/blender/editors/space_image/image_intern.h
@@ -90,7 +90,7 @@ void IMAGE_OT_curves_point_set(struct wmOperatorType *ot);
void IMAGE_OT_change_frame(struct wmOperatorType *ot);
-void IMAGE_OT_read_renderlayers(struct wmOperatorType *ot);
+void IMAGE_OT_read_viewlayers(struct wmOperatorType *ot);
void IMAGE_OT_render_border(struct wmOperatorType *ot);
void IMAGE_OT_clear_render_border(struct wmOperatorType *ot);
diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c
index 956043afea3..0ff30c228b4 100644
--- a/source/blender/editors/space_image/image_ops.c
+++ b/source/blender/editors/space_image/image_ops.c
@@ -48,6 +48,7 @@
#include "BLT_translation.h"
+#include "DNA_camera_types.h"
#include "DNA_object_types.h"
#include "DNA_node_types.h"
#include "DNA_packedFile_types.h"
@@ -56,7 +57,6 @@
#include "BKE_colortools.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_DerivedMesh.h"
#include "BKE_icons.h"
#include "BKE_image.h"
@@ -70,6 +70,8 @@
#include "BKE_sound.h"
#include "BKE_scene.h"
+#include "DEG_depsgraph.h"
+
#include "GPU_draw.h"
#include "GPU_buffers.h"
@@ -789,9 +791,11 @@ void IMAGE_OT_view_all(wmOperatorType *ot)
static int image_view_selected_exec(bContext *C, wmOperator *UNUSED(op))
{
+ WorkSpace *workspace = CTX_wm_workspace(C);
SpaceImage *sima;
ARegion *ar;
Scene *scene;
+ ViewLayer *view_layer;
Object *obedit;
Image *ima;
@@ -799,6 +803,7 @@ static int image_view_selected_exec(bContext *C, wmOperator *UNUSED(op))
sima = CTX_wm_space_image(C);
ar = CTX_wm_region(C);
scene = CTX_data_scene(C);
+ view_layer = CTX_data_view_layer(C);
obedit = CTX_data_edit_object(C);
ima = ED_space_image(sima);
@@ -810,7 +815,7 @@ static int image_view_selected_exec(bContext *C, wmOperator *UNUSED(op))
return OPERATOR_CANCELLED;
}
}
- else if (ED_space_image_check_show_maskedit(scene, sima)) {
+ else if (ED_space_image_check_show_maskedit(sima, workspace, view_layer)) {
if (!ED_mask_selected_minmax(C, min, max)) {
return OPERATOR_CANCELLED;
}
@@ -1307,21 +1312,23 @@ static int image_open_exec(bContext *C, wmOperator *op)
ED_space_image_set(sima, scene, obedit, ima);
iuser = &sima->iuser;
}
- else if (sa && sa->spacetype == SPACE_VIEW3D) {
- View3D *v3d = sa->spacedata.first;
-
- for (BGpic *bgpic = v3d->bgpicbase.first; bgpic; bgpic = bgpic->next) {
- if (bgpic->ima == ima) {
- iuser = &bgpic->iuser;
- break;
- }
- }
- }
else {
Tex *tex = CTX_data_pointer_get_type(C, "texture", &RNA_Texture).data;
if (tex && tex->type == TEX_IMAGE) {
iuser = &tex->iuser;
}
+
+ if (iuser == NULL) {
+ Camera *cam = CTX_data_pointer_get_type(C, "camera", &RNA_Camera).data;
+ if (cam) {
+ for (CameraBGImage *bgpic = cam->bg_images.first; bgpic; bgpic = bgpic->next) {
+ if (bgpic->ima == ima) {
+ iuser = &bgpic->iuser;
+ break;
+ }
+ }
+ }
+ }
}
/* initialize because of new image */
@@ -2341,7 +2348,7 @@ static int image_reload_exec(bContext *C, wmOperator *UNUSED(op))
// XXX other users?
BKE_image_signal(ima, (sima) ? &sima->iuser : NULL, IMA_SIGNAL_RELOAD);
- DAG_id_tag_update(&ima->id, 0);
+ DEG_id_tag_update(&ima->id, 0);
WM_event_add_notifier(C, NC_IMAGE | NA_EDITED, ima);
@@ -3594,7 +3601,7 @@ void IMAGE_OT_change_frame(wmOperatorType *ot)
/* Reload cached render results... */
/* goes over all scenes, reads render layers */
-static int image_read_renderlayers_exec(bContext *C, wmOperator *UNUSED(op))
+static int image_read_viewlayers_exec(bContext *C, wmOperator *UNUSED(op))
{
Scene *scene = CTX_data_scene(C);
SpaceImage *sima = CTX_wm_space_image(C);
@@ -3611,14 +3618,14 @@ static int image_read_renderlayers_exec(bContext *C, wmOperator *UNUSED(op))
return OPERATOR_FINISHED;
}
-void IMAGE_OT_read_renderlayers(wmOperatorType *ot)
+void IMAGE_OT_read_viewlayers(wmOperatorType *ot)
{
- ot->name = "Read Render Layers";
- ot->idname = "IMAGE_OT_read_renderlayers";
- ot->description = "Read all the current scene's render layers from cache, as needed";
+ ot->name = "Read View Layers";
+ ot->idname = "IMAGE_OT_read_viewlayers";
+ ot->description = "Read all the current scene's view layers from cache, as needed";
ot->poll = space_image_main_region_poll;
- ot->exec = image_read_renderlayers_exec;
+ ot->exec = image_read_viewlayers_exec;
/* flags */
ot->flag = 0;
diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c
index 54adb121fe8..aa6120942d8 100644
--- a/source/blender/editors/space_image/space_image.c
+++ b/source/blender/editors/space_image/space_image.c
@@ -44,10 +44,15 @@
#include "BKE_colortools.h"
#include "BKE_context.h"
+#include "BKE_editmesh.h"
#include "BKE_image.h"
+#include "BKE_layer.h"
#include "BKE_library.h"
#include "BKE_scene.h"
#include "BKE_screen.h"
+#include "BKE_material.h"
+
+#include "DEG_depsgraph.h"
#include "IMB_imbuf_types.h"
@@ -59,6 +64,7 @@
#include "ED_space_api.h"
#include "ED_screen.h"
#include "ED_uvedit.h"
+#include "ED_transform.h"
#include "BIF_gl.h"
@@ -275,7 +281,7 @@ static void image_operatortypes(void)
WM_operatortype_append(IMAGE_OT_change_frame);
- WM_operatortype_append(IMAGE_OT_read_renderlayers);
+ WM_operatortype_append(IMAGE_OT_read_viewlayers);
WM_operatortype_append(IMAGE_OT_render_border);
WM_operatortype_append(IMAGE_OT_clear_render_border);
}
@@ -289,7 +295,7 @@ static void image_keymap(struct wmKeyConfig *keyconf)
WM_keymap_add_item(keymap, "IMAGE_OT_new", NKEY, KM_PRESS, KM_ALT, 0);
WM_keymap_add_item(keymap, "IMAGE_OT_open", OKEY, KM_PRESS, KM_ALT, 0);
WM_keymap_add_item(keymap, "IMAGE_OT_reload", RKEY, KM_PRESS, KM_ALT, 0);
- WM_keymap_add_item(keymap, "IMAGE_OT_read_renderlayers", RKEY, KM_PRESS, KM_CTRL, 0);
+ WM_keymap_add_item(keymap, "IMAGE_OT_read_viewlayers", RKEY, KM_PRESS, KM_CTRL, 0);
WM_keymap_add_item(keymap, "IMAGE_OT_save", SKEY, KM_PRESS, KM_ALT, 0);
WM_keymap_add_item(keymap, "IMAGE_OT_save_as", F3KEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "IMAGE_OT_properties", NKEY, KM_PRESS, 0, 0);
@@ -434,27 +440,23 @@ static void image_refresh(const bContext *C, ScrArea *sa)
}
else {
/* old shading system, we set texface */
- MTexPoly *tf;
-
- if (em && EDBM_mtexpoly_check(em)) {
- tf = EDBM_mtexpoly_active_get(em, NULL, sloppy, selected);
+ if (em && EDBM_uv_check(em)) {
+ BMFace *efa = BM_mesh_active_face_get(em->bm, sloppy, selected);
- if (tf) {
+ if (efa) {
/* don't need to check for pin here, see above */
- sima->image = tf->tpage;
-
- if ((sima->flag & SI_EDITTILE) == 0) {
- sima->curtile = tf->tile;
- }
+ Image *image = BKE_object_material_edit_image_get(obedit, efa->mat_nr);
+
+ sima->image = image;
}
}
}
}
}
-static void image_listener(bScreen *sc, ScrArea *sa, wmNotifier *wmn)
+static void image_listener(bScreen *UNUSED(sc), ScrArea *sa, wmNotifier *wmn, Scene *scene,
+ WorkSpace *workspace)
{
- Scene *scene = sc->scene;
SpaceImage *sima = (SpaceImage *)sa->spacedata.first;
/* context changes */
@@ -547,8 +549,9 @@ static void image_listener(bScreen *sc, ScrArea *sa, wmNotifier *wmn)
case ND_TRANSFORM:
case ND_MODIFIER:
{
- Object *ob = OBACT;
- if (ob && (ob == wmn->reference) && (ob->mode & OB_MODE_EDIT)) {
+ ViewLayer *view_layer = BKE_view_layer_from_workspace_get(scene, workspace);
+ Object *ob = OBACT(view_layer);
+ if (ob && (ob == wmn->reference) && (workspace->object_mode & OB_MODE_EDIT)) {
if (sima->lock && (sima->flag & SI_DRAWSHADOW)) {
ED_area_tag_refresh(sa);
ED_area_tag_redraw(sa);
@@ -599,6 +602,27 @@ static int image_context(const bContext *C, const char *member, bContextDataResu
return 0;
}
+static void IMAGE_WGT_manipulator2d(wmManipulatorGroupType *wgt)
+{
+ wgt->name = "UV Transform Manipulator";
+ wgt->idname = "IMAGE_WGT_manipulator2d";
+
+ wgt->flag |= WM_MANIPULATORGROUPTYPE_PERSISTENT;
+
+ wgt->poll = ED_widgetgroup_manipulator2d_poll;
+ wgt->setup = ED_widgetgroup_manipulator2d_setup;
+ wgt->refresh = ED_widgetgroup_manipulator2d_refresh;
+ wgt->draw_prepare = ED_widgetgroup_manipulator2d_draw_prepare;
+}
+
+static void image_widgets(void)
+{
+ wmManipulatorMapType *mmap_type = WM_manipulatormaptype_ensure(
+ &(const struct wmManipulatorMapType_Params){SPACE_IMAGE, RGN_TYPE_WINDOW});
+
+ WM_manipulatorgrouptype_append_and_link(mmap_type, IMAGE_WGT_manipulator2d);
+}
+
/************************** main region ***************************/
/* sets up the fields of the View2D from zoom and offset */
@@ -662,6 +686,16 @@ static void image_main_region_init(wmWindowManager *wm, ARegion *ar)
// image space manages own v2d
// UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_STANDARD, ar->winx, ar->winy);
+ /* manipulators */
+ if (ar->manipulator_map == NULL) {
+ const struct wmManipulatorMapType_Params wmap_params = {
+ .spaceid = SPACE_IMAGE,
+ .regionid = RGN_TYPE_WINDOW,
+ };
+ ar->manipulator_map = WM_manipulatormap_new_from_type(&wmap_params);
+ }
+ WM_manipulatormap_add_handlers(ar, ar->manipulator_map);
+
/* mask polls mode */
keymap = WM_keymap_find(wm->defaultconf, "Mask Editing", 0, 0);
WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct);
@@ -687,18 +721,22 @@ static void image_main_region_init(wmWindowManager *wm, ARegion *ar)
WM_event_add_keymap_handler(&ar->handlers, keymap);
keymap = WM_keymap_find(wm->defaultconf, "Image", SPACE_IMAGE, 0);
WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct);
-
}
static void image_main_region_draw(const bContext *C, ARegion *ar)
{
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
/* draw entirely, view changes should be handled here */
SpaceImage *sima = CTX_wm_space_image(C);
Object *obact = CTX_data_active_object(C);
Object *obedit = CTX_data_edit_object(C);
+ Depsgraph *depsgraph = CTX_data_depsgraph(C);
Mask *mask = NULL;
bool curve = false;
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
View2D *v2d = &ar->v2d;
//View2DScrollers *scrollers;
float col[3];
@@ -724,7 +762,7 @@ static void image_main_region_draw(const bContext *C, ARegion *ar)
ED_region_draw_cb_draw(C, ar, REGION_DRAW_PRE_VIEW);
- ED_uvedit_draw_main(sima, ar, scene, obedit, obact);
+ ED_uvedit_draw_main(sima, &eval_ctx, ar, scene, view_layer, obedit, obact, depsgraph);
/* check for mask (delay draw) */
if (ED_space_image_show_uvedit(sima, obedit)) {
@@ -793,6 +831,8 @@ static void image_main_region_draw(const bContext *C, ARegion *ar)
UI_view2d_view_restore(C);
}
+ WM_manipulatormap_draw(ar->manipulator_map, C, WM_MANIPULATORMAP_DRAWSTEP_2D);
+
draw_image_cache(C, ar);
/* scrollers? */
@@ -803,10 +843,16 @@ static void image_main_region_draw(const bContext *C, ARegion *ar)
#endif
}
-static void image_main_region_listener(bScreen *UNUSED(sc), ScrArea *sa, ARegion *ar, wmNotifier *wmn)
+static void image_main_region_listener(
+ bScreen *UNUSED(sc), ScrArea *sa, ARegion *ar,
+ wmNotifier *wmn, const Scene *UNUSED(scene))
{
/* context changes */
switch (wmn->category) {
+ case NC_GEOM:
+ if (ELEM(wmn->data, ND_DATA, ND_SELECT))
+ WM_manipulatormap_tag_refresh(ar->manipulator_map);
+ break;
case NC_GPENCIL:
if (ELEM(wmn->action, NA_EDITED, NA_SELECTED))
ED_region_tag_redraw(ar);
@@ -816,6 +862,7 @@ static void image_main_region_listener(bScreen *UNUSED(sc), ScrArea *sa, ARegion
case NC_IMAGE:
if (wmn->action == NA_PAINTING)
ED_region_tag_redraw(ar);
+ WM_manipulatormap_tag_refresh(ar->manipulator_map);
break;
case NC_MATERIAL:
if (wmn->data == ND_SHADING_LINKS) {
@@ -825,6 +872,11 @@ static void image_main_region_listener(bScreen *UNUSED(sc), ScrArea *sa, ARegion
ED_region_tag_redraw(ar);
}
break;
+ case NC_SCREEN:
+ if (ELEM(wmn->data, ND_LAYER)) {
+ ED_region_tag_redraw(ar);
+ }
+ break;
}
}
@@ -847,7 +899,9 @@ static void image_buttons_region_draw(const bContext *C, ARegion *ar)
ED_region_panels(C, ar, NULL, -1, true);
}
-static void image_buttons_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+static void image_buttons_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar,
+ wmNotifier *wmn, const Scene *UNUSED(scene))
{
/* context changes */
switch (wmn->category) {
@@ -920,7 +974,9 @@ static void image_tools_region_draw(const bContext *C, ARegion *ar)
ED_region_panels(C, ar, NULL, -1, true);
}
-static void image_tools_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+static void image_tools_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar,
+ wmNotifier *wmn, const Scene *UNUSED(scene))
{
/* context changes */
switch (wmn->category) {
@@ -971,7 +1027,9 @@ static void image_header_region_draw(const bContext *C, ARegion *ar)
ED_region_header(C, ar);
}
-static void image_header_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+static void image_header_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar,
+ wmNotifier *wmn, const Scene *UNUSED(scene))
{
/* context changes */
switch (wmn->category) {
@@ -1040,6 +1098,7 @@ void ED_spacetype_image(void)
st->refresh = image_refresh;
st->listener = image_listener;
st->context = image_context;
+ st->manipulators = image_widgets;
st->id_remap = image_id_remap;
/* regions: main window */
diff --git a/source/blender/editors/space_info/info_stats.c b/source/blender/editors/space_info/info_stats.c
index 8dc6c4229b2..118be88216e 100644
--- a/source/blender/editors/space_info/info_stats.c
+++ b/source/blender/editors/space_info/info_stats.c
@@ -36,6 +36,7 @@
#include "DNA_lattice_types.h"
#include "DNA_meta_types.h"
#include "DNA_scene_types.h"
+#include "DNA_workspace_types.h"
#include "BLI_math.h"
#include "BLI_string.h"
@@ -49,6 +50,7 @@
#include "BKE_displist.h"
#include "BKE_DerivedMesh.h"
#include "BKE_key.h"
+#include "BKE_layer.h"
#include "BKE_paint.h"
#include "BKE_particle.h"
#include "BKE_editmesh.h"
@@ -269,9 +271,42 @@ static void stats_object_sculpt_dynamic_topology(Object *ob, SceneStats *stats)
stats->tottri = ob->sculpt->bm->totface;
}
+static void stats_dupli_object_group_count(SceneCollection *scene_collection, int *count)
+{
+ for (LinkData *link = scene_collection->objects.first; link; link = link->next) {
+ (*count)++;
+ }
+
+ SceneCollection *scene_collection_nested;
+ for (scene_collection_nested = scene_collection->scene_collections.first;
+ scene_collection_nested;
+ scene_collection_nested = scene_collection_nested->next)
+ {
+ stats_dupli_object_group_count(scene_collection_nested, count);
+ }
+}
+
+static void stats_dupli_object_group_doit(SceneCollection *scene_collection, SceneStats *stats, ParticleSystem *psys,
+ const int totgroup, int *cur)
+{
+ for (LinkData *link = scene_collection->objects.first; link; link = link->next) {
+ int tot = count_particles_mod(psys, totgroup, *cur);
+ stats_object(link->data, 0, tot, stats);
+ (*cur)++;
+ }
+
+ SceneCollection *scene_collection_nested;
+ for (scene_collection_nested = scene_collection->scene_collections.first;
+ scene_collection_nested;
+ scene_collection_nested = scene_collection_nested->next)
+ {
+ stats_dupli_object_group_doit(scene_collection_nested, stats, psys, totgroup, cur);
+ }
+}
+
static void stats_dupli_object(Base *base, Object *ob, SceneStats *stats)
{
- if (base->flag & SELECT) stats->totobjsel++;
+ if (base->flag & BASE_SELECTED) stats->totobjsel++;
if (ob->transflag & OB_DUPLIPARTS) {
/* Dupli Particles */
@@ -286,21 +321,15 @@ static void stats_dupli_object(Base *base, Object *ob, SceneStats *stats)
stats_object(part->dup_ob, 0, tot, stats);
}
else if (part->draw_as == PART_DRAW_GR && part->dup_group) {
- GroupObject *go;
- int tot, totgroup = 0, cur = 0;
-
- for (go = part->dup_group->gobject.first; go; go = go->next)
- totgroup++;
-
- for (go = part->dup_group->gobject.first; go; go = go->next) {
- tot = count_particles_mod(psys, totgroup, cur);
- stats_object(go->ob, 0, tot, stats);
- cur++;
- }
+ int totgroup = 0, cur = 0;
+
+ SceneCollection *scene_collection = part->dup_group->collection;
+ stats_dupli_object_group_count(scene_collection, &totgroup);
+ stats_dupli_object_group_doit(scene_collection, stats, psys, totgroup, &cur);
}
}
- stats_object(ob, base->flag & SELECT, 1, stats);
+ stats_object(ob, base->flag & BASE_SELECTED, 1, stats);
stats->totobj++;
}
else if (ob->parent && (ob->parent->transflag & (OB_DUPLIVERTS | OB_DUPLIFACES))) {
@@ -316,71 +345,74 @@ static void stats_dupli_object(Base *base, Object *ob, SceneStats *stats)
}
stats->totobj += tot;
- stats_object(ob, base->flag & SELECT, tot, stats);
+ stats_object(ob, base->flag & BASE_SELECTED, tot, stats);
}
else if (ob->transflag & OB_DUPLIFRAMES) {
/* Dupli Frames */
int tot = count_duplilist(ob);
stats->totobj += tot;
- stats_object(ob, base->flag & SELECT, tot, stats);
+ stats_object(ob, base->flag & BASE_SELECTED, tot, stats);
}
else if ((ob->transflag & OB_DUPLIGROUP) && ob->dup_group) {
/* Dupli Group */
int tot = count_duplilist(ob);
stats->totobj += tot;
- stats_object(ob, base->flag & SELECT, tot, stats);
+ stats_object(ob, base->flag & BASE_SELECTED, tot, stats);
}
else {
/* No Dupli */
- stats_object(ob, base->flag & SELECT, 1, stats);
+ stats_object(ob, base->flag & BASE_SELECTED, 1, stats);
stats->totobj++;
}
}
-static bool stats_is_object_dynamic_topology_sculpt(Object *ob)
+static bool stats_is_object_dynamic_topology_sculpt(Object *ob, const eObjectMode object_mode)
{
- return (ob && (ob->mode & OB_MODE_SCULPT) &&
+ return (ob &&
+ (object_mode & OB_MODE_SCULPT) &&
ob->sculpt && ob->sculpt->bm);
}
/* Statistics displayed in info header. Called regularly on scene changes. */
-static void stats_update(Scene *scene)
+static void stats_update(Scene *scene, ViewLayer *view_layer, const eObjectMode object_mode)
{
SceneStats stats = {0};
- Object *ob = (scene->basact) ? scene->basact->object : NULL;
+ Object *ob = (view_layer->basact) ? view_layer->basact->object : NULL;
Base *base;
if (scene->obedit) {
/* Edit Mode */
stats_object_edit(scene->obedit, &stats);
}
- else if (ob && (ob->mode & OB_MODE_POSE)) {
+ else if (ob && (object_mode & OB_MODE_POSE)) {
/* Pose Mode */
stats_object_pose(ob, &stats);
}
- else if (stats_is_object_dynamic_topology_sculpt(ob)) {
+ else if (stats_is_object_dynamic_topology_sculpt(ob, object_mode)) {
/* Dynamic-topology sculpt mode */
stats_object_sculpt_dynamic_topology(ob, &stats);
}
else {
/* Objects */
- for (base = scene->base.first; base; base = base->next)
- if (scene->lay & base->lay)
+ for (base = view_layer->object_bases.first; base; base = base->next)
+ if (base->flag & BASE_VISIBLED) {
stats_dupli_object(base, base->object, &stats);
+ }
}
- if (!scene->stats)
- scene->stats = MEM_callocN(sizeof(SceneStats), "SceneStats");
+ if (!view_layer->stats) {
+ view_layer->stats = MEM_callocN(sizeof(SceneStats), "SceneStats");
+ }
- *(scene->stats) = stats;
+ *(view_layer->stats) = stats;
}
-static void stats_string(Scene *scene)
+static void stats_string(Scene *scene, ViewLayer *view_layer, const eObjectMode object_mode)
{
#define MAX_INFO_MEM_LEN 64
- SceneStats *stats = scene->stats;
+ SceneStats *stats = view_layer->stats;
SceneStatsFmt stats_fmt;
- Object *ob = (scene->basact) ? scene->basact->object : NULL;
+ Object *ob = (view_layer->basact) ? view_layer->basact->object : NULL;
uintptr_t mem_in_use, mmap_in_use;
char memstr[MAX_INFO_MEM_LEN];
char gpumemstr[MAX_INFO_MEM_LEN] = "";
@@ -463,11 +495,11 @@ static void stats_string(Scene *scene)
ofs += BLI_strncpy_rlen(s + ofs, memstr, MAX_INFO_LEN - ofs);
ofs += BLI_strncpy_rlen(s + ofs, gpumemstr, MAX_INFO_LEN - ofs);
}
- else if (ob && (ob->mode & OB_MODE_POSE)) {
+ else if (ob && (object_mode & OB_MODE_POSE)) {
ofs += BLI_snprintf(s + ofs, MAX_INFO_LEN - ofs, IFACE_("Bones:%s/%s %s%s"),
stats_fmt.totbonesel, stats_fmt.totbone, memstr, gpumemstr);
}
- else if (stats_is_object_dynamic_topology_sculpt(ob)) {
+ else if (stats_is_object_dynamic_topology_sculpt(ob, object_mode)) {
ofs += BLI_snprintf(s + ofs, MAX_INFO_LEN - ofs, IFACE_("Verts:%s | Tris:%s%s"), stats_fmt.totvert,
stats_fmt.tottri, gpumemstr);
}
@@ -487,19 +519,20 @@ static void stats_string(Scene *scene)
#undef MAX_INFO_LEN
-void ED_info_stats_clear(Scene *scene)
+void ED_info_stats_clear(ViewLayer *view_layer)
{
- if (scene->stats) {
- MEM_freeN(scene->stats);
- scene->stats = NULL;
+ if (view_layer->stats) {
+ MEM_freeN(view_layer->stats);
+ view_layer->stats = NULL;
}
}
-const char *ED_info_stats_string(Scene *scene)
+const char *ED_info_stats_string(Scene *scene, WorkSpace *workspace, ViewLayer *view_layer)
{
- if (!scene->stats)
- stats_update(scene);
- stats_string(scene);
+ if (!view_layer->stats) {
+ stats_update(scene, view_layer, workspace->object_mode);
+ }
+ stats_string(scene, view_layer, workspace->object_mode);
- return scene->stats->infostr;
+ return view_layer->stats->infostr;
}
diff --git a/source/blender/editors/space_info/space_info.c b/source/blender/editors/space_info/space_info.c
index 21777fd8afa..b13152883c3 100644
--- a/source/blender/editors/space_info/space_info.c
+++ b/source/blender/editors/space_info/space_info.c
@@ -50,6 +50,9 @@
#include "WM_api.h"
#include "WM_types.h"
+#include "WM_message.h"
+
+#include "RNA_access.h"
#include "UI_resources.h"
#include "UI_interface.h"
@@ -236,7 +239,9 @@ static void info_header_region_draw(const bContext *C, ARegion *ar)
ED_region_header(C, ar);
}
-static void info_main_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+static void info_main_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar,
+ wmNotifier *wmn, const Scene *UNUSED(scene))
{
// SpaceInfo *sinfo = sa->spacedata.first;
@@ -251,13 +256,16 @@ static void info_main_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa),
}
}
-static void info_header_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+static void info_header_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar,
+ wmNotifier *wmn, const Scene *UNUSED(scene))
{
/* context changes */
switch (wmn->category) {
case NC_SCREEN:
- if (ELEM(wmn->data, ND_SCREENCAST, ND_ANIMPLAY))
+ if (ELEM(wmn->data, ND_LAYER, ND_SCREENCAST, ND_ANIMPLAY)) {
ED_region_tag_redraw(ar);
+ }
break;
case NC_WM:
if (wmn->data == ND_JOB)
@@ -279,6 +287,22 @@ static void info_header_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegi
}
+static void info_header_region_message_subscribe(
+ const bContext *UNUSED(C),
+ WorkSpace *UNUSED(workspace), Scene *UNUSED(scene),
+ bScreen *UNUSED(screen), ScrArea *UNUSED(sa), ARegion *ar,
+ struct wmMsgBus *mbus)
+{
+ wmMsgSubscribeValue msg_sub_value_region_tag_redraw = {
+ .owner = ar,
+ .user_data = ar,
+ .notify = ED_region_do_msg_notify_tag_redraw,
+ };
+
+ WM_msg_subscribe_rna_anon_prop(mbus, Window, view_layer, &msg_sub_value_region_tag_redraw);
+ WM_msg_subscribe_rna_anon_prop(mbus, ViewLayer, name, &msg_sub_value_region_tag_redraw);
+}
+
static void recent_files_menu_draw(const bContext *UNUSED(C), Menu *menu)
{
struct RecentFile *recent;
@@ -342,6 +366,7 @@ void ED_spacetype_info(void)
art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_VIEW2D | ED_KEYMAP_FRAMES | ED_KEYMAP_HEADER;
art->listener = info_header_listener;
+ art->message_subscribe = info_header_region_message_subscribe;
art->init = info_header_region_init;
art->draw = info_header_region_draw;
diff --git a/source/blender/editors/space_info/textview.c b/source/blender/editors/space_info/textview.c
index c801a736e31..3eb0158e7b5 100644
--- a/source/blender/editors/space_info/textview.c
+++ b/source/blender/editors/space_info/textview.c
@@ -39,6 +39,8 @@
#include "BLI_utildefines.h"
#include "BLI_string_utf8.h"
+#include "GPU_immediate.h"
+
#include "BIF_gl.h"
#include "BKE_text.h"
@@ -81,9 +83,15 @@ static void console_draw_sel(const char *str, const int sel[2], const int xy[2],
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glColor4ubv(bg_sel);
- glRecti(xy[0] + (cwidth * sta), xy[1] - 2 + lheight, xy[0] + (cwidth * end), xy[1] - 2);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ immUniformColor4ubv(bg_sel);
+ immRecti(pos, xy[0] + (cwidth * sta), xy[1] - 2 + lheight, xy[0] + (cwidth * end), xy[1] - 2);
+
+ immUnbindProgram();
glDisable(GL_BLEND);
}
@@ -182,21 +190,25 @@ static int console_draw_string(ConsoleDrawContext *cdc, const char *str, int str
cdc->sel[1] = str_len - sel_orig[0];
if (bg) {
- glColor3ubv(bg);
- glRecti(0, cdc->xy[1], cdc->winx, (cdc->xy[1] + (cdc->lheight * tot_lines)));
- }
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
- glColor3ubv(fg);
+ immUniformColor3ubv(bg);
+ immRecti(pos, 0, cdc->xy[1], cdc->winx, (cdc->xy[1] + (cdc->lheight * tot_lines)));
+
+ immUnbindProgram();
+ }
/* last part needs no clipping */
BLF_position(cdc->font_id, cdc->xy[0], cdc->lofs + cdc->xy[1], 0);
+ BLF_color3ubv(cdc->font_id, fg);
BLF_draw_mono(cdc->font_id, s, len, cdc->cwidth);
if (cdc->sel[0] != cdc->sel[1]) {
console_step_sel(cdc, -initial_offset);
- // glColor4ub(255, 0, 0, 96); // debug
+ /* BLF_color3ub(cdc->font_id, 255, 0, 0); // debug */
console_draw_sel(s, cdc->sel, cdc->xy, len, cdc->cwidth, cdc->lheight, bg_sel);
- glColor3ubv(fg);
}
cdc->xy[1] += cdc->lheight;
@@ -210,9 +222,8 @@ static int console_draw_string(ConsoleDrawContext *cdc, const char *str, int str
if (cdc->sel[0] != cdc->sel[1]) {
console_step_sel(cdc, len);
- // glColor4ub(0, 255, 0, 96); // debug
+ /* BLF_color3ub(cdc->font_id, 0, 255, 0); // debug */
console_draw_sel(s, cdc->sel, cdc->xy, len, cdc->cwidth, cdc->lheight, bg_sel);
- glColor3ubv(fg);
}
cdc->xy[1] += cdc->lheight;
@@ -230,12 +241,17 @@ static int console_draw_string(ConsoleDrawContext *cdc, const char *str, int str
else { /* simple, no wrap */
if (bg) {
- glColor3ubv(bg);
- glRecti(0, cdc->xy[1], cdc->winx, cdc->xy[1] + cdc->lheight);
- }
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
- glColor3ubv(fg);
+ immUniformColor3ubv(bg);
+ immRecti(pos, 0, cdc->xy[1], cdc->winx, cdc->xy[1] + cdc->lheight);
+
+ immUnbindProgram();
+ }
+ BLF_color3ubv(cdc->font_id, fg);
BLF_position(cdc->font_id, cdc->xy[0], cdc->lofs + cdc->xy[1], 0);
BLF_draw_mono(cdc->font_id, str, str_len, cdc->cwidth);
@@ -245,7 +261,7 @@ static int console_draw_string(ConsoleDrawContext *cdc, const char *str, int str
isel[0] = str_len - cdc->sel[1];
isel[1] = str_len - cdc->sel[0];
- // glColor4ub(255, 255, 0, 96); // debug
+ /* BLF_color3ub(cdc->font_id, 255, 255, 0); // debug */
console_draw_sel(str, isel, cdc->xy, str_len, cdc->cwidth, cdc->lheight, bg_sel);
console_step_sel(cdc, -(str_len + 1));
}
diff --git a/source/blender/editors/space_logic/logic_window.c b/source/blender/editors/space_logic/logic_window.c
index e1a31be4afb..c6fd70a60dd 100644
--- a/source/blender/editors/space_logic/logic_window.c
+++ b/source/blender/editors/space_logic/logic_window.c
@@ -461,13 +461,13 @@ static void set_sca_ob(Object *ob)
static ID **get_selected_and_linked_obs(bContext *C, short *count, short scavisflag)
{
Base *base;
- Main *bmain= CTX_data_main(C);
- Scene *scene= CTX_data_scene(C);
- Object *ob, *obt, *obact= CTX_data_active_object(C);
+ Main *bmain = CTX_data_main(C);
+ Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Object *ob, *obt, *obact = CTX_data_active_object(C);
ID **idar;
bSensor *sens;
bController *cont;
- unsigned int lay;
int a, nr, do_it;
/* we need a sorted object list */
@@ -485,19 +485,12 @@ static ID **get_selected_and_linked_obs(bContext *C, short *count, short scavisf
ob= ob->id.next;
}
- /* XXX here it checked 3d lay */
- lay= scene->lay;
-
- base= FIRSTBASE;
- while (base) {
- if (base->lay & lay) {
- if (base->flag & SELECT) {
- if (scavisflag & BUTS_SENS_SEL) base->object->scavisflag |= OB_VIS_SENS;
- if (scavisflag & BUTS_CONT_SEL) base->object->scavisflag |= OB_VIS_CONT;
- if (scavisflag & BUTS_ACT_SEL) base->object->scavisflag |= OB_VIS_ACT;
- }
+ for (base = FIRSTBASE(view_layer); base; base = base->next) {
+ if ((base->flag & BASE_VISIBLED) && (base->flag & SELECT)) {
+ if (scavisflag & BUTS_SENS_SEL) base->object->scavisflag |= OB_VIS_SENS;
+ if (scavisflag & BUTS_CONT_SEL) base->object->scavisflag |= OB_VIS_CONT;
+ if (scavisflag & BUTS_ACT_SEL) base->object->scavisflag |= OB_VIS_ACT;
}
- base= base->next;
}
if (obact) {
diff --git a/source/blender/editors/space_logic/space_logic.c b/source/blender/editors/space_logic/space_logic.c
index 12ca141128b..af90ef487e0 100644
--- a/source/blender/editors/space_logic/space_logic.c
+++ b/source/blender/editors/space_logic/space_logic.c
@@ -198,7 +198,9 @@ static void logic_refresh(const bContext *UNUSED(C), ScrArea *UNUSED(sa))
}
-static void logic_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+static void logic_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar,
+ wmNotifier *wmn, const Scene *UNUSED(scene))
{
/* context changes */
switch (wmn->category) {
diff --git a/source/blender/editors/space_nla/nla_channels.c b/source/blender/editors/space_nla/nla_channels.c
index c261821db16..89bf57fdb6c 100644
--- a/source/blender/editors/space_nla/nla_channels.c
+++ b/source/blender/editors/space_nla/nla_channels.c
@@ -45,6 +45,7 @@
#include "BKE_nla.h"
#include "BKE_context.h"
#include "BKE_global.h"
+#include "BKE_scene.h"
#include "BKE_screen.h"
#include "BKE_report.h"
@@ -123,40 +124,37 @@ static int mouse_nla_channels(bContext *C, bAnimContext *ac, float x, int channe
}
case ANIMTYPE_OBJECT:
{
- bDopeSheet *ads = (bDopeSheet *)ac->data;
- Scene *sce = (Scene *)ads->source;
+ ViewLayer *view_layer = ac->view_layer;
Base *base = (Base *)ale->data;
Object *ob = base->object;
AnimData *adt = ob->adt;
- if (nlaedit_is_tweakmode_on(ac) == 0 && (ob->restrictflag & OB_RESTRICT_SELECT) == 0) {
+ if (nlaedit_is_tweakmode_on(ac) == 0 && (base->flag & BASE_SELECTABLED)) {
/* set selection status */
if (selectmode == SELECT_INVERT) {
/* swap select */
- base->flag ^= SELECT;
- ob->flag = base->flag;
+ ED_object_base_select(base, BA_INVERT);
+ BKE_scene_object_base_flag_sync_from_base(base);
if (adt) adt->flag ^= ADT_UI_SELECTED;
}
else {
- Base *b;
-
/* deselect all */
/* TODO: should this deselect all other types of channels too? */
- for (b = sce->base.first; b; b = b->next) {
- b->flag &= ~SELECT;
- b->object->flag = b->flag;
+ for (Base *b = view_layer->object_bases.first; b; b = b->next) {
+ ED_object_base_select(b, BA_DESELECT);
+ BKE_scene_object_base_flag_sync_from_base(b);
if (b->object->adt) b->object->adt->flag &= ~(ADT_UI_SELECTED | ADT_UI_ACTIVE);
}
/* select object now */
- base->flag |= SELECT;
- ob->flag |= SELECT;
+ ED_object_base_select(base, BA_SELECT);
+ BKE_scene_object_base_flag_sync_from_base(base);
if (adt) adt->flag |= ADT_UI_SELECTED;
}
/* change active object - regardless of whether it is now selected [T37883] */
- ED_base_object_activate(C, base); /* adds notifier */
+ ED_object_base_activate(C, base); /* adds notifier */
if ((adt) && (adt->flag & ADT_UI_SELECTED))
adt->flag |= ADT_UI_ACTIVE;
diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c
index 255fc0d6f8f..cb20b76a3ee 100644
--- a/source/blender/editors/space_nla/nla_draw.c
+++ b/source/blender/editors/space_nla/nla_draw.c
@@ -53,9 +53,12 @@
#include "ED_anim_api.h"
#include "ED_keyframes_draw.h"
-#include "BIF_gl.h"
#include "BIF_glutil.h"
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+#include "GPU_draw.h"
+
#include "WM_types.h"
#include "UI_interface.h"
@@ -97,50 +100,68 @@ void nla_action_get_color(AnimData *adt, bAction *act, float color[4])
}
/* draw the keyframes in the specified Action */
-static void nla_action_draw_keyframes(AnimData *adt, bAction *act, View2D *v2d, float y, float ymin, float ymax)
+static void nla_action_draw_keyframes(AnimData *adt, bAction *act, float y, float ymin, float ymax)
{
- DLRBT_Tree keys;
- ActKeyColumn *ak;
- float xscale, f1, f2;
- float color[4];
-
/* get a list of the keyframes with NLA-scaling applied */
+ DLRBT_Tree keys;
BLI_dlrbTree_init(&keys);
action_to_keylist(adt, act, &keys, NULL);
BLI_dlrbTree_linkedlist_sync(&keys);
-
+
if (ELEM(NULL, act, keys.first))
return;
-
+
/* draw a darkened region behind the strips
* - get and reset the background color, this time without the alpha to stand out better
* (amplified alpha is used instead)
*/
+ float color[4];
nla_action_get_color(adt, act, color);
color[3] *= 2.5f;
-
- glColor4fv(color);
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos_id = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ immUniformColor4fv(color);
+
/* - draw a rect from the first to the last frame (no extra overlaps for now)
* that is slightly stumpier than the track background (hardcoded 2-units here)
*/
- f1 = ((ActKeyColumn *)keys.first)->cfra;
- f2 = ((ActKeyColumn *)keys.last)->cfra;
-
- glRectf(f1, ymin + 2, f2, ymax - 2);
-
-
- /* get View2D scaling factor */
- UI_view2d_scale_get(v2d, &xscale, NULL);
-
- /* for now, color is hardcoded to be black */
- glColor3f(0.0f, 0.0f, 0.0f);
-
- /* just draw each keyframe as a simple dot (regardless of the selection status)
- * - size is 3.0f which is smaller than the editable keyframes, so that there is a distinction
- */
- for (ak = keys.first; ak; ak = ak->next)
- draw_keyframe_shape(ak->cfra, y, xscale, 3.0f, 0, ak->key_type, KEYFRAME_SHAPE_FRAME, 1.0f);
-
+ float f1 = ((ActKeyColumn *)keys.first)->cfra;
+ float f2 = ((ActKeyColumn *)keys.last)->cfra;
+
+ immRectf(pos_id, f1, ymin + 2, f2, ymax - 2);
+ immUnbindProgram();
+
+ /* count keys before drawing */
+ /* Note: It's safe to cast DLRBT_Tree, as it's designed to degrade down to a ListBase */
+ unsigned int key_ct = BLI_listbase_count((ListBase *)&keys);
+
+ if (key_ct > 0) {
+ format = immVertexFormat();
+ pos_id = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int size_id = GWN_vertformat_attr_add(format, "size", GWN_COMP_F32, 1, GWN_FETCH_FLOAT);
+ unsigned int color_id = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 4, GWN_FETCH_INT_TO_FLOAT_UNIT);
+ unsigned int outline_color_id = GWN_vertformat_attr_add(format, "outlineColor", GWN_COMP_U8, 4, GWN_FETCH_INT_TO_FLOAT_UNIT);
+ immBindBuiltinProgram(GPU_SHADER_KEYFRAME_DIAMOND);
+ GPU_enable_program_point_size();
+ immBegin(GWN_PRIM_POINTS, key_ct);
+
+ /* - disregard the selection status of keyframes so they draw a certain way
+ * - size is 6.0f which is smaller than the editable keyframes, so that there is a distinction
+ */
+ for (ActKeyColumn *ak = keys.first; ak; ak = ak->next) {
+ draw_keyframe_shape(ak->cfra, y, 6.0f, false, ak->key_type, KEYFRAME_SHAPE_FRAME, 1.0f,
+ pos_id, size_id, color_id, outline_color_id);
+ }
+
+ immEnd();
+ GPU_disable_program_point_size();
+ immUnbindProgram();
+ }
+
/* free icons */
BLI_dlrbTree_free(&keys);
}
@@ -148,57 +169,70 @@ static void nla_action_draw_keyframes(AnimData *adt, bAction *act, View2D *v2d,
/* Strip Markers ------------------------ */
/* Markers inside an action strip */
-static void nla_actionclip_draw_markers(NlaStrip *strip, float yminc, float ymaxc)
+static void nla_actionclip_draw_markers(NlaStrip *strip, float yminc, float ymaxc, int shade, const bool dashed)
{
- bAction *act = strip->act;
- TimeMarker *marker;
-
- if (ELEM(NULL, strip->act, strip->act->markers.first))
+ const bAction *act = strip->act;
+
+ if (ELEM(NULL, act, act->markers.first))
return;
-
- for (marker = act->markers.first; marker; marker = marker->next) {
+
+ const uint shdr_pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ if (dashed) {
+ immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR);
+
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2] / UI_DPI_FAC, viewport_size[3] / UI_DPI_FAC);
+
+ immUniform1i("num_colors", 0); /* "simple" mode */
+ immUniform1f("dash_width", 6.0f);
+ immUniform1f("dash_factor", 0.5f);
+ }
+ else {
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ }
+ immUniformThemeColorShade(TH_STRIP_SELECT, shade);
+
+ immBeginAtMost(GWN_PRIM_LINES, BLI_listbase_count(&act->markers) * 2);
+ for (TimeMarker *marker = act->markers.first; marker; marker = marker->next) {
if ((marker->frame > strip->actstart) && (marker->frame < strip->actend)) {
float frame = nlastrip_get_frame(strip, marker->frame, NLATIME_CONVERT_MAP);
-
+
/* just a simple line for now */
- // XXX: draw a triangle instead...
- fdrawline(frame, yminc + 1, frame, ymaxc - 1);
+ /* XXX: draw a triangle instead... */
+ immVertex2f(shdr_pos, frame, yminc + 1);
+ immVertex2f(shdr_pos, frame, ymaxc - 1);
}
}
+ immEnd();
+
+ immUnbindProgram();
}
/* Markers inside a NLA-Strip */
static void nla_strip_draw_markers(NlaStrip *strip, float yminc, float ymaxc)
{
- glLineWidth(2.0);
+ glLineWidth(2.0f);
if (strip->type == NLASTRIP_TYPE_CLIP) {
/* try not to be too conspicuous, while being visible enough when transforming */
- if (strip->flag & NLASTRIP_FLAG_SELECT)
- UI_ThemeColorShade(TH_STRIP_SELECT, -60);
- else
- UI_ThemeColorShade(TH_STRIP_SELECT, -40);
-
- setlinestyle(3);
-
+ int shade = (strip->flag & NLASTRIP_FLAG_SELECT) ? -60 : -40;
+
/* just draw the markers in this clip */
- nla_actionclip_draw_markers(strip, yminc, ymaxc);
-
- setlinestyle(0);
+ nla_actionclip_draw_markers(strip, yminc, ymaxc, shade, true);
}
else if (strip->flag & NLASTRIP_FLAG_TEMP_META) {
/* just a solid color, so that it is very easy to spot */
- UI_ThemeColorShade(TH_STRIP_SELECT, 20);
-
+ int shade = 20;
/* draw the markers in the first level of strips only (if they are actions) */
for (NlaStrip *nls = strip->strips.first; nls; nls = nls->next) {
if (nls->type == NLASTRIP_TYPE_CLIP) {
- nla_actionclip_draw_markers(nls, yminc, ymaxc);
+ nla_actionclip_draw_markers(nls, yminc, ymaxc, shade, false);
}
}
}
- glLineWidth(1.0);
+ glLineWidth(1.0f);
}
/* Strips (Proper) ---------------------- */
@@ -266,15 +300,12 @@ static void nla_strip_get_color_inside(AnimData *adt, NlaStrip *strip, float col
}
/* helper call for drawing influence/time control curves for a given NLA-strip */
-static void nla_draw_strip_curves(NlaStrip *strip, float yminc, float ymaxc)
+static void nla_draw_strip_curves(NlaStrip *strip, float yminc, float ymaxc, unsigned int pos)
{
const float yheight = ymaxc - yminc;
- /* drawing color is simply a light-gray */
- // TODO: is this color suitable?
- // XXX nasty hacked color for now... which looks quite bad too...
- glColor3f(0.7f, 0.7f, 0.7f);
-
+ immUniformColor3f(0.7f, 0.7f, 0.7f);
+
/* draw with AA'd line */
glEnable(GL_LINE_SMOOTH);
glEnable(GL_BLEND);
@@ -285,57 +316,93 @@ static void nla_draw_strip_curves(NlaStrip *strip, float yminc, float ymaxc)
float cfra;
/* plot the curve (over the strip's main region) */
- glBegin(GL_LINE_STRIP);
+ immBegin(GWN_PRIM_LINE_STRIP, abs((int)(strip->end - strip->start) + 1));
+
/* sample at 1 frame intervals, and draw
* - min y-val is yminc, max is y-maxc, so clamp in those regions
*/
for (cfra = strip->start; cfra <= strip->end; cfra += 1.0f) {
- float y = evaluate_fcurve(fcu, cfra);
+ float y = evaluate_fcurve(fcu, cfra); /* assume this to be in 0-1 range */
CLAMP(y, 0.0f, 1.0f);
- glVertex2f(cfra, ((y * yheight) + yminc));
+ immVertex2f(pos, cfra, ((y * yheight) + yminc));
}
- glEnd(); // GL_LINE_STRIP
+
+ immEnd();
}
else {
/* use blend in/out values only if both aren't zero */
if ((IS_EQF(strip->blendin, 0.0f) && IS_EQF(strip->blendout, 0.0f)) == 0) {
- glBegin(GL_LINE_STRIP);
+ immBeginAtMost(GWN_PRIM_LINE_STRIP, 4);
+
/* start of strip - if no blendin, start straight at 1, otherwise from 0 to 1 over blendin frames */
if (IS_EQF(strip->blendin, 0.0f) == 0) {
- glVertex2f(strip->start, yminc);
- glVertex2f(strip->start + strip->blendin, ymaxc);
+ immVertex2f(pos, strip->start, yminc);
+ immVertex2f(pos, strip->start + strip->blendin, ymaxc);
}
else
- glVertex2f(strip->start, ymaxc);
+ immVertex2f(pos, strip->start, ymaxc);
/* end of strip */
if (IS_EQF(strip->blendout, 0.0f) == 0) {
- glVertex2f(strip->end - strip->blendout, ymaxc);
- glVertex2f(strip->end, yminc);
+ immVertex2f(pos, strip->end - strip->blendout, ymaxc);
+ immVertex2f(pos, strip->end, yminc);
}
else
- glVertex2f(strip->end, ymaxc);
- glEnd(); // GL_LINE_STRIP
+ immVertex2f(pos, strip->end, ymaxc);
+
+ immEnd();
}
}
-
- /* time -------------------------- */
- // XXX do we want to draw this curve? in a different color too?
-
+
/* turn off AA'd lines */
glDisable(GL_LINE_SMOOTH);
glDisable(GL_BLEND);
}
+/* helper call to setup dashed-lines for strip outlines */
+static uint nla_draw_use_dashed_outlines(float color[4], bool muted)
+{
+ /* Note that we use dashed shader here, and make it draw solid lines if not muted... */
+ uint shdr_pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR);
+
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2] / UI_DPI_FAC, viewport_size[3] / UI_DPI_FAC);
+
+ immUniform1i("num_colors", 0); /* Simple dashes. */
+ immUniformColor3fv(color);
+
+ /* line style: dotted for muted */
+ if (muted) {
+ /* dotted - and slightly thicker for readability of the dashes */
+ immUniform1f("dash_width", 5.0f);
+ immUniform1f("dash_factor", 0.4f);
+ glLineWidth(1.5f);
+ }
+ else {
+ /* solid line */
+ immUniform1f("dash_factor", 2.0f);
+ glLineWidth(1.0f);
+ }
+
+ return shdr_pos;
+}
+
/* main call for drawing a single NLA-strip */
static void nla_draw_strip(SpaceNla *snla, AnimData *adt, NlaTrack *nlt, NlaStrip *strip, View2D *v2d, float yminc, float ymaxc)
{
const bool non_solo = ((adt && (adt->flag & ADT_NLA_SOLO_TRACK)) && (nlt->flag & NLATRACK_SOLO) == 0);
- float color[3];
+ const bool muted = ((nlt->flag & NLATRACK_MUTED) || (strip->flag & NLASTRIP_FLAG_MUTED));
+ float color[4] = {1.0f, 1.0f, 1.0f, 1.0f};
+ uint shdr_pos;
/* get color of strip */
nla_strip_get_color_inside(adt, strip, color);
+ shdr_pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
/* draw extrapolation info first (as backdrop)
* - but this should only be drawn if track has some contribution
*/
@@ -343,7 +410,7 @@ static void nla_draw_strip(SpaceNla *snla, AnimData *adt, NlaTrack *nlt, NlaStri
/* enable transparency... */
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
-
+
switch (strip->extendmode) {
/* since this does both sides, only do the 'before' side, and leave the rest to the next case */
case NLASTRIP_EXTEND_HOLD:
@@ -352,15 +419,10 @@ static void nla_draw_strip(SpaceNla *snla, AnimData *adt, NlaTrack *nlt, NlaStri
*/
if (strip->prev == NULL) {
/* set the drawing color to the color of the strip, but with very faint alpha */
- glColor4f(color[0], color[1], color[2], 0.15f);
-
+ immUniformColor3fvAlpha(color, 0.15f);
+
/* draw the rect to the edge of the screen */
- glBegin(GL_QUADS);
- glVertex2f(v2d->cur.xmin, yminc);
- glVertex2f(v2d->cur.xmin, ymaxc);
- glVertex2f(strip->start, ymaxc);
- glVertex2f(strip->start, yminc);
- glEnd();
+ immRectf(shdr_pos, v2d->cur.xmin, yminc, strip->start, ymaxc);
}
ATTR_FALLTHROUGH;
@@ -369,118 +431,132 @@ static void nla_draw_strip(SpaceNla *snla, AnimData *adt, NlaTrack *nlt, NlaStri
/* only need to try and draw if the next strip doesn't occur immediately after */
if ((strip->next == NULL) || (IS_EQF(strip->next->start, strip->end) == 0)) {
/* set the drawing color to the color of the strip, but this time less faint */
- glColor4f(color[0], color[1], color[2], 0.3f);
+ immUniformColor3fvAlpha(color, 0.3f);
/* draw the rect to the next strip or the edge of the screen */
- glBegin(GL_QUADS);
- glVertex2f(strip->end, yminc);
- glVertex2f(strip->end, ymaxc);
-
- if (strip->next) {
- glVertex2f(strip->next->start, ymaxc);
- glVertex2f(strip->next->start, yminc);
- }
- else {
- glVertex2f(v2d->cur.xmax, ymaxc);
- glVertex2f(v2d->cur.xmax, yminc);
- }
- glEnd();
+ float x2 = strip->next ? strip->next->start : v2d->cur.xmax;
+ immRectf(shdr_pos, strip->end, yminc, x2, ymaxc);
}
break;
}
-
+
glDisable(GL_BLEND);
}
-
-
+
+
/* draw 'inside' of strip itself */
if (non_solo == 0) {
+ immUnbindProgram();
+
/* strip is in normal track */
- glColor3fv(color);
UI_draw_roundbox_corner_set(UI_CNR_ALL); /* all corners rounded */
-
- UI_draw_roundbox_shade_x(GL_POLYGON, strip->start, yminc, strip->end, ymaxc, 0.0, 0.5, 0.1);
+ UI_draw_roundbox_shade_x(true, strip->start, yminc, strip->end, ymaxc, 0.0, 0.5, 0.1, color);
+
+ /* restore current vertex format & program (roundbox trashes it) */
+ shdr_pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
}
else {
/* strip is in disabled track - make less visible */
- glColor4f(color[0], color[1], color[2], 0.1f);
+ immUniformColor3fvAlpha(color, 0.1f);
glEnable(GL_BLEND);
- glRectf(strip->start, yminc, strip->end, ymaxc);
+ immRectf(shdr_pos, strip->start, yminc, strip->end, ymaxc);
glDisable(GL_BLEND);
}
-
-
+
+
/* draw strip's control 'curves'
* - only if user hasn't hidden them...
*/
if ((snla->flag & SNLA_NOSTRIPCURVES) == 0)
- nla_draw_strip_curves(strip, yminc, ymaxc);
-
-
+ nla_draw_strip_curves(strip, yminc, ymaxc, shdr_pos);
+
+ immUnbindProgram();
+
/* draw markings indicating locations of local markers (useful for lining up different actions) */
if ((snla->flag & SNLA_NOLOCALMARKERS) == 0)
nla_strip_draw_markers(strip, yminc, ymaxc);
-
- /* draw strip outline
+
+ /* draw strip outline
* - color used here is to indicate active vs non-active
*/
if (strip->flag & NLASTRIP_FLAG_ACTIVE) {
/* strip should appear 'sunken', so draw a light border around it */
- glColor3f(0.9f, 1.0f, 0.9f); // FIXME: hardcoded temp-hack colors
+ color[0] = 0.9f; /* FIXME: hardcoded temp-hack colors */
+ color[1] = 1.0f;
+ color[2] = 0.9f;
}
else {
/* strip should appear to stand out, so draw a dark border around it */
- glColor3f(0.0f, 0.0f, 0.0f);
+ color[0] = color[1] = color[2] = 0.0f; /* FIXME: or 1.0f ?? */
}
-
- /* - line style: dotted for muted */
- if ((nlt->flag & NLATRACK_MUTED) || (strip->flag & NLASTRIP_FLAG_MUTED))
- setlinestyle(4);
+
+ /* draw outline
+ * - dashed-line shader is loaded after this block
+ */
+ if (muted) {
+ /* muted - draw dotted, squarish outline (for simplicity) */
+ shdr_pos = nla_draw_use_dashed_outlines(color, muted);
+ imm_draw_box_wire_2d(shdr_pos, strip->start, yminc, strip->end, ymaxc);
+ }
+ else {
+ /* non-muted - draw solid, rounded outline */
+ UI_draw_roundbox_shade_x(false, strip->start, yminc, strip->end, ymaxc, 0.0, 0.0, 0.1, color);
- /* draw outline */
- UI_draw_roundbox_shade_x(GL_LINE_LOOP, strip->start, yminc, strip->end, ymaxc, 0.0, 0.0, 0.1);
-
+ /* restore current vertex format & program (roundbox trashes it) */
+ shdr_pos = nla_draw_use_dashed_outlines(color, muted);
+ }
+
/* if action-clip strip, draw lines delimiting repeats too (in the same color as outline) */
if ((strip->type == NLASTRIP_TYPE_CLIP) && IS_EQF(strip->repeat, 1.0f) == 0) {
float repeatLen = (strip->actend - strip->actstart) * strip->scale;
- int i;
-
+
/* only draw lines for whole-numbered repeats, starting from the first full-repeat
* up to the last full repeat (but not if it lies on the end of the strip)
*/
- for (i = 1; i < strip->repeat; i++) {
+ immBeginAtMost(GWN_PRIM_LINES, 2 * (strip->repeat - 1));
+ for (int i = 1; i < strip->repeat; i++) {
float repeatPos = strip->start + (repeatLen * i);
-
+
/* don't draw if line would end up on or after the end of the strip */
- if (repeatPos < strip->end)
- fdrawline(repeatPos, yminc + 4, repeatPos, ymaxc - 4);
+ if (repeatPos < strip->end) {
+ immVertex2f(shdr_pos, repeatPos, yminc + 4);
+ immVertex2f(shdr_pos, repeatPos, ymaxc - 4);
+ }
}
+ immEnd();
}
/* or if meta-strip, draw lines delimiting extents of sub-strips (in same color as outline, if more than 1 exists) */
else if ((strip->type == NLASTRIP_TYPE_META) && (strip->strips.first != strip->strips.last)) {
- NlaStrip *cs;
- float y = (ymaxc - yminc) / 2.0f + yminc;
-
+ const float y = (ymaxc - yminc) * 0.5f + yminc;
+
+ immBeginAtMost(GWN_PRIM_LINES, 4 * BLI_listbase_count(&strip->strips)); /* up to 2 lines per strip */
+
/* only draw first-level of child-strips, but don't draw any lines on the endpoints */
- for (cs = strip->strips.first; cs; cs = cs->next) {
+ for (NlaStrip *cs = strip->strips.first; cs; cs = cs->next) {
/* draw start-line if not same as end of previous (and only if not the first strip)
* - on upper half of strip
*/
- if ((cs->prev) && IS_EQF(cs->prev->end, cs->start) == 0)
- fdrawline(cs->start, y, cs->start, ymaxc);
-
+ if ((cs->prev) && IS_EQF(cs->prev->end, cs->start) == 0) {
+ immVertex2f(shdr_pos, cs->start, y);
+ immVertex2f(shdr_pos, cs->start, ymaxc);
+ }
+
/* draw end-line if not the last strip
* - on lower half of strip
*/
- if (cs->next)
- fdrawline(cs->end, yminc, cs->end, y);
+ if (cs->next) {
+ immVertex2f(shdr_pos, cs->end, yminc);
+ immVertex2f(shdr_pos, cs->end, y);
+ }
}
+
+ immEnd();
}
-
- /* reset linestyle */
- setlinestyle(0);
-}
+
+ immUnbindProgram();
+}
/* add the relevant text to the cache of text-strings to draw in pixelspace */
static void nla_draw_strip_text(
@@ -491,7 +567,6 @@ static void nla_draw_strip_text(
char str[256];
size_t str_len;
char col[4];
- rctf rect;
/* just print the name and the range */
if (strip->flag & NLASTRIP_FLAG_TEMP_META) {
@@ -518,12 +593,14 @@ static void nla_draw_strip_text(
/* set bounding-box for text
* - padding of 2 'units' on either side
*/
- // TODO: make this centered?
- rect.xmin = xminc;
- rect.ymin = yminc;
- rect.xmax = xmaxc;
- rect.ymax = ymaxc;
-
+ /* TODO: make this centered? */
+ rctf rect = {
+ .xmin = xminc,
+ .ymin = yminc,
+ .xmax = xmaxc,
+ .ymax = ymaxc
+ };
+
/* add this string to the cache of texts to draw */
UI_view2d_text_cache_add_rectf(v2d, &rect, str, str_len, col);
}
@@ -537,8 +614,7 @@ static void nla_draw_strip_frames_text(NlaTrack *UNUSED(nlt), NlaStrip *strip, V
const char col[4] = {220, 220, 220, 255}; /* light gray */
char numstr[32];
size_t numstr_len;
-
-
+
/* Always draw times above the strip, whereas sequencer drew below + above.
* However, we should be fine having everything on top, since these tend to be
* quite spaced out.
@@ -548,7 +624,7 @@ static void nla_draw_strip_frames_text(NlaTrack *UNUSED(nlt), NlaStrip *strip, V
/* start frame */
numstr_len = BLI_snprintf_rlen(numstr, sizeof(numstr), "%.1f", strip->start);
UI_view2d_text_cache_add(v2d, strip->start - 1.0f, ymaxc + ytol, numstr, numstr_len, col);
-
+
/* end frame */
numstr_len = BLI_snprintf_rlen(numstr, sizeof(numstr), "%.1f", strip->end);
UI_view2d_text_cache_add(v2d, strip->end, ymaxc + ytol, numstr, numstr_len, col);
@@ -558,20 +634,14 @@ static void nla_draw_strip_frames_text(NlaTrack *UNUSED(nlt), NlaStrip *strip, V
void draw_nla_main_data(bAnimContext *ac, SpaceNla *snla, ARegion *ar)
{
- ListBase anim_data = {NULL, NULL};
- bAnimListElem *ale;
- int filter;
-
View2D *v2d = &ar->v2d;
- float y = 0.0f;
- size_t items;
- int height;
const float pixelx = BLI_rctf_size_x(&v2d->cur) / BLI_rcti_size_x(&v2d->mask);
const float text_margin_x = (8 * UI_DPI_FAC) * pixelx;
/* build list of channels to draw */
- filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_LIST_CHANNELS);
- items = ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
+ ListBase anim_data = {NULL, NULL};
+ int filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_LIST_CHANNELS);
+ size_t items = ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
/* Update max-extent of channels here (taking into account scrollers):
* - this is done to allow the channel list to be scrollable, but must be done here
@@ -579,16 +649,17 @@ void draw_nla_main_data(bAnimContext *ac, SpaceNla *snla, ARegion *ar)
* - offset of NLACHANNEL_HEIGHT*2 is added to the height of the channels, as first is for
* start of list offset, and the second is as a correction for the scrollers.
*/
- height = ((items * NLACHANNEL_STEP(snla)) + (NLACHANNEL_HEIGHT(snla) * 2));
+ int height = ((items * NLACHANNEL_STEP(snla)) + (NLACHANNEL_HEIGHT(snla) * 2));
+
/* don't use totrect set, as the width stays the same
* (NOTE: this is ok here, the configuration is pretty straightforward)
*/
v2d->tot.ymin = (float)(-height);
/* loop through channels, and set up drawing depending on their type */
- y = (float)(-NLACHANNEL_HEIGHT(snla));
+ float y = (float)(-NLACHANNEL_HEIGHT(snla));
- for (ale = anim_data.first; ale; ale = ale->next) {
+ for (bAnimListElem *ale = anim_data.first; ale; ale = ale->next) {
const float yminc = (float)(y - NLACHANNEL_HEIGHT_HALF(snla));
const float ymaxc = (float)(y + NLACHANNEL_HEIGHT_HALF(snla));
@@ -631,45 +702,60 @@ void draw_nla_main_data(bAnimContext *ac, SpaceNla *snla, ARegion *ar)
case ANIMTYPE_NLAACTION:
{
AnimData *adt = ale->adt;
- float color[4];
-
+
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
/* just draw a semi-shaded rect spanning the width of the viewable area if there's data,
* and a second darker rect within which we draw keyframe indicator dots if there's data
*/
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
-
+
/* get colors for drawing */
+ float color[4];
nla_action_get_color(adt, ale->data, color);
- glColor4fv(color);
-
+ immUniformColor4fv(color);
+
/* draw slightly shifted up for greater separation from standard channels,
* but also slightly shorter for some more contrast when viewing the strips
*/
- glRectf(v2d->cur.xmin, yminc + NLACHANNEL_SKIP, v2d->cur.xmax, ymaxc - NLACHANNEL_SKIP);
-
- /* draw keyframes in the action */
- nla_action_draw_keyframes(adt, ale->data, v2d, y, yminc + NLACHANNEL_SKIP, ymaxc - NLACHANNEL_SKIP);
+ immRectf(pos, v2d->cur.xmin, yminc + NLACHANNEL_SKIP, v2d->cur.xmax, ymaxc - NLACHANNEL_SKIP);
/* draw 'embossed' lines above and below the strip for effect */
/* white base-lines */
glLineWidth(2.0f);
- glColor4f(1.0f, 1.0f, 1.0f, 0.3);
- fdrawline(v2d->cur.xmin, yminc + NLACHANNEL_SKIP, v2d->cur.xmax, yminc + NLACHANNEL_SKIP);
- fdrawline(v2d->cur.xmin, ymaxc - NLACHANNEL_SKIP, v2d->cur.xmax, ymaxc - NLACHANNEL_SKIP);
-
+ immUniformColor4f(1.0f, 1.0f, 1.0f, 0.3f);
+ immBegin(GWN_PRIM_LINES, 4);
+ immVertex2f(pos, v2d->cur.xmin, yminc + NLACHANNEL_SKIP);
+ immVertex2f(pos, v2d->cur.xmax, yminc + NLACHANNEL_SKIP);
+ immVertex2f(pos, v2d->cur.xmin, ymaxc - NLACHANNEL_SKIP);
+ immVertex2f(pos, v2d->cur.xmax, ymaxc - NLACHANNEL_SKIP);
+ immEnd();
+
/* black top-lines */
glLineWidth(1.0f);
- glColor3f(0.0f, 0.0f, 0.0f);
- fdrawline(v2d->cur.xmin, yminc + NLACHANNEL_SKIP, v2d->cur.xmax, yminc + NLACHANNEL_SKIP);
- fdrawline(v2d->cur.xmin, ymaxc - NLACHANNEL_SKIP, v2d->cur.xmax, ymaxc - NLACHANNEL_SKIP);
-
+ immUniformColor3f(0.0f, 0.0f, 0.0f);
+ immBegin(GWN_PRIM_LINES, 4);
+ immVertex2f(pos, v2d->cur.xmin, yminc + NLACHANNEL_SKIP);
+ immVertex2f(pos, v2d->cur.xmax, yminc + NLACHANNEL_SKIP);
+ immVertex2f(pos, v2d->cur.xmin, ymaxc - NLACHANNEL_SKIP);
+ immVertex2f(pos, v2d->cur.xmax, ymaxc - NLACHANNEL_SKIP);
+ immEnd();
+
+ /* TODO: these lines but better --^ */
+
+ immUnbindProgram();
+
+ /* draw keyframes in the action */
+ nla_action_draw_keyframes(adt, ale->data, y, yminc + NLACHANNEL_SKIP, ymaxc - NLACHANNEL_SKIP);
+
glDisable(GL_BLEND);
break;
}
}
}
-
+
/* adjust y-position for next one */
y -= NLACHANNEL_STEP(snla);
}
@@ -691,7 +777,6 @@ void draw_nla_channel_list(const bContext *C, bAnimContext *ac, ARegion *ar)
View2D *v2d = &ar->v2d;
float y = 0.0f;
size_t items;
- int height;
/* build list of channels to draw */
filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_LIST_CHANNELS);
@@ -703,7 +788,7 @@ void draw_nla_channel_list(const bContext *C, bAnimContext *ac, ARegion *ar)
* - offset of NLACHANNEL_HEIGHT*2 is added to the height of the channels, as first is for
* start of list offset, and the second is as a correction for the scrollers.
*/
- height = ((items * NLACHANNEL_STEP(snla)) + (NLACHANNEL_HEIGHT(snla) * 2));
+ int height = ((items * NLACHANNEL_STEP(snla)) + (NLACHANNEL_HEIGHT(snla) * 2));
/* don't use totrect set, as the width stays the same
* (NOTE: this is ok here, the configuration is pretty straightforward)
*/
diff --git a/source/blender/editors/space_nla/space_nla.c b/source/blender/editors/space_nla/space_nla.c
index 3b5604087b9..f6068087f02 100644
--- a/source/blender/editors/space_nla/space_nla.c
+++ b/source/blender/editors/space_nla/space_nla.c
@@ -353,7 +353,9 @@ static void nla_buttons_region_draw(const bContext *C, ARegion *ar)
ED_region_panels(C, ar, NULL, -1, true);
}
-static void nla_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+static void nla_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar,
+ wmNotifier *wmn, const Scene *UNUSED(scene))
{
/* context changes */
switch (wmn->category) {
@@ -386,7 +388,9 @@ static void nla_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegio
}
-static void nla_main_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+static void nla_main_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar,
+ wmNotifier *wmn, const Scene *UNUSED(scene))
{
/* context changes */
switch (wmn->category) {
@@ -424,6 +428,11 @@ static void nla_main_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), A
if (wmn->action == NA_RENAME)
ED_region_tag_redraw(ar);
break;
+ case NC_SCREEN:
+ if (ELEM(wmn->data, ND_LAYER)) {
+ ED_region_tag_redraw(ar);
+ }
+ break;
default:
if (wmn->data == ND_KEYS)
ED_region_tag_redraw(ar);
@@ -431,7 +440,9 @@ static void nla_main_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), A
}
}
-static void nla_channel_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+static void nla_channel_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar,
+ wmNotifier *wmn, const Scene *UNUSED(scene))
{
/* context changes */
switch (wmn->category) {
@@ -466,7 +477,8 @@ static void nla_channel_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa)
}
/* editor level listener */
-static void nla_listener(bScreen *UNUSED(sc), ScrArea *sa, wmNotifier *wmn)
+static void nla_listener(bScreen *UNUSED(sc), ScrArea *sa, wmNotifier *wmn, Scene *UNUSED(scene),
+ WorkSpace *UNUSED(workspace))
{
/* context changes */
switch (wmn->category) {
diff --git a/source/blender/editors/space_node/CMakeLists.txt b/source/blender/editors/space_node/CMakeLists.txt
index cde818333e4..77b1351435b 100644
--- a/source/blender/editors/space_node/CMakeLists.txt
+++ b/source/blender/editors/space_node/CMakeLists.txt
@@ -24,6 +24,7 @@ set(INC
../../blenkernel
../../blenlib
../../blentranslation
+ ../../depsgraph
../../imbuf
../../gpu
../../makesdna
@@ -47,6 +48,7 @@ set(SRC
node_draw.c
node_edit.c
node_group.c
+ node_manipulators.c
node_ops.c
node_relationships.c
node_select.c
diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c
index eccf3c057d4..ead0e848716 100644
--- a/source/blender/editors/space_node/drawnode.c
+++ b/source/blender/editors/space_node/drawnode.c
@@ -50,9 +50,12 @@
#include "BLF_api.h"
#include "BLT_translation.h"
-#include "BIF_gl.h"
#include "BIF_glutil.h"
+#include "GPU_draw.h"
+#include "GPU_immediate.h"
+#include "GPU_matrix.h"
+
#include "RNA_access.h"
#include "RNA_define.h"
@@ -62,6 +65,7 @@
#include "WM_types.h"
#include "UI_resources.h"
+#include "UI_view2d.h"
#include "IMB_colormanagement.h"
#include "IMB_imbuf_types.h"
@@ -80,49 +84,6 @@ static void node_socket_button_label(bContext *UNUSED(C), uiLayout *layout, Poin
uiItemL(layout, text, 0);
}
-
-/* ****************** BASE DRAW FUNCTIONS FOR NEW OPERATOR NODES ***************** */
-
-#if 0 /* UNUSED */
-static void node_draw_socket_new(bNodeSocket *sock, float size)
-{
- float x = sock->locx, y = sock->locy;
-
- /* 16 values of sin function */
- static float si[16] = {
- 0.00000000f, 0.39435585f, 0.72479278f, 0.93775213f,
- 0.99871650f, 0.89780453f, 0.65137248f, 0.29936312f,
- -0.10116832f, -0.48530196f, -0.79077573f, -0.96807711f,
- -0.98846832f, -0.84864425f, -0.57126821f, -0.20129852f
- };
- /* 16 values of cos function */
- static float co[16] = {
- 1.00000000f, 0.91895781f, 0.68896691f, 0.34730525f,
- -0.05064916f, -0.44039415f, -0.75875812f, -0.95413925f,
- -0.99486932f, -0.87434661f, -0.61210598f, -0.25065253f,
- 0.15142777f, 0.52896401f, 0.82076344f, 0.97952994f,
- };
- int a;
-
- glColor3ub(180, 180, 180);
-
- glBegin(GL_POLYGON);
- for (a = 0; a < 16; a++)
- glVertex2f(x + size * si[a], y + size * co[a]);
- glEnd();
-
- glColor4ub(0, 0, 0, 150);
- glEnable(GL_BLEND);
- glEnable(GL_LINE_SMOOTH);
- glBegin(GL_LINE_LOOP);
- for (a = 0; a < 16; a++)
- glVertex2f(x + size * si[a], y + size * co[a]);
- glEnd();
- glDisable(GL_LINE_SMOOTH);
- glDisable(GL_BLEND);
-}
-#endif
-
/* ****************** BUTTON CALLBACKS FOR ALL TREES ***************** */
static void node_buts_value(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
@@ -392,6 +353,7 @@ static void node_draw_frame_label(bNodeTree *ntree, bNode *node, const float asp
const int font_size = data->label_size / aspect;
const float margin = (float)(NODE_DY / 4);
int label_height;
+ unsigned char color[3];
nodeLabel(ntree, node, label, sizeof(label));
@@ -400,7 +362,8 @@ static void node_draw_frame_label(bNodeTree *ntree, bNode *node, const float asp
BLF_size(fontid, MIN2(24, font_size), U.dpi); /* clamp otherwise it can suck up a LOT of memory */
/* title color */
- UI_ThemeColorBlendShade(TH_TEXT, color_id, 0.4f, 10);
+ UI_GetThemeColorBlendShade3ubv(TH_TEXT, color_id, 0.4f, 10, color);
+ BLF_color3ubv(fontid, color);
width = BLF_width(fontid, label, sizeof(label));
ascender = BLF_ascender(fontid);
@@ -465,7 +428,7 @@ static void node_draw_frame(const bContext *C, ARegion *ar, SpaceNode *snode,
{
rctf *rct = &node->totr;
int color_id = node_get_colorid(node);
- unsigned char color[4];
+ float color[4];
float alpha;
/* skip if out of view */
@@ -475,40 +438,32 @@ static void node_draw_frame(const bContext *C, ARegion *ar, SpaceNode *snode,
return;
}
- UI_GetThemeColor4ubv(TH_NODE_FRAME, color);
- alpha = (float)(color[3]) / 255.0f;
+ UI_GetThemeColor4fv(TH_NODE_FRAME, color);
+ alpha = color[3];
/* shadow */
node_draw_shadow(snode, node, BASIS_RAD, alpha);
/* body */
- if (node->flag & NODE_CUSTOM_COLOR)
- glColor4f(node->color[0], node->color[1], node->color[2], alpha);
+ if (node->flag & NODE_CUSTOM_COLOR) {
+ rgba_float_args_set(color, node->color[0], node->color[1], node->color[2], alpha);
+ }
else
- UI_ThemeColor4(TH_NODE_FRAME);
- glEnable(GL_BLEND);
+ UI_GetThemeColor4fv(TH_NODE_FRAME, color);
+
UI_draw_roundbox_corner_set(UI_CNR_ALL);
- UI_draw_roundbox(rct->xmin, rct->ymin, rct->xmax, rct->ymax, BASIS_RAD);
- glDisable(GL_BLEND);
+ UI_draw_roundbox_aa(true, rct->xmin, rct->ymin, rct->xmax, rct->ymax, BASIS_RAD, color);
/* outline active and selected emphasis */
if (node->flag & SELECT) {
- glEnable(GL_BLEND);
- glEnable(GL_LINE_SMOOTH);
-
if (node->flag & NODE_ACTIVE)
- UI_ThemeColorShadeAlpha(TH_ACTIVE, 0, -40);
+ UI_GetThemeColorShadeAlpha4fv(TH_ACTIVE, 0, -40, color);
else
- UI_ThemeColorShadeAlpha(TH_SELECT, 0, -40);
- UI_draw_roundbox_corner_set(UI_CNR_ALL);
- UI_draw_roundbox_gl_mode(GL_LINE_LOOP,
- rct->xmin, rct->ymin,
- rct->xmax, rct->ymax, BASIS_RAD);
-
- glDisable(GL_LINE_SMOOTH);
- glDisable(GL_BLEND);
+ UI_GetThemeColorShadeAlpha4fv(TH_SELECT, 0, -40, color);
+
+ UI_draw_roundbox_aa(false, rct->xmin, rct->ymin, rct->xmax, rct->ymax, BASIS_RAD, color);
}
-
+
/* label */
node_draw_frame_label(ntree, node, snode->aspect);
@@ -580,15 +535,9 @@ static void node_draw_reroute_prepare(const bContext *UNUSED(C), bNodeTree *UNUS
static void node_draw_reroute(const bContext *C, ARegion *ar, SpaceNode *UNUSED(snode),
bNodeTree *ntree, bNode *node, bNodeInstanceKey UNUSED(key))
{
- bNodeSocket *sock;
char showname[128]; /* 128 used below */
rctf *rct = &node->totr;
-#if 0 /* UNUSED */
- float size = NODE_REROUTE_SIZE;
-#endif
- float socket_size = NODE_SOCKSIZE;
-
/* skip if out of view */
if (node->totr.xmax < ar->v2d.cur.xmin || node->totr.xmin > ar->v2d.cur.xmax ||
node->totr.ymax < ar->v2d.cur.ymin || node->totr.ymin > ar->v2d.cur.ymax)
@@ -602,23 +551,26 @@ static void node_draw_reroute(const bContext *C, ARegion *ar, SpaceNode *UNUSED(
* selection state is indicated by socket outline below!
*/
#if 0
+ float size = NODE_REROUTE_SIZE;
+
/* body */
+ float debug_color[4];
UI_draw_roundbox_corner_set(UI_CNR_ALL);
- UI_ThemeColor4(TH_NODE);
- glEnable(GL_BLEND);
- UI_draw_roundbox(rct->xmin, rct->ymin, rct->xmax, rct->ymax, size);
- glDisable(GL_BLEND);
+ UI_GetThemeColor4fv(TH_NODE, debug_color);
+ UI_draw_roundbox_aa(true, rct->xmin, rct->ymin, rct->xmax, rct->ymax, size, debug_color);
/* outline active and selected emphasis */
if (node->flag & SELECT) {
glEnable(GL_BLEND);
glEnable(GL_LINE_SMOOTH);
/* using different shades of TH_TEXT_HI for the empasis, like triangle */
- if (node->flag & NODE_ACTIVE)
- UI_ThemeColorShadeAlpha(TH_TEXT_HI, 0, -40);
- else
- UI_ThemeColorShadeAlpha(TH_TEXT_HI, -20, -120);
- UI_draw_roundbox_gl_mode(GL_LINE_LOOP, rct->xmin, rct->ymin, rct->xmax, rct->ymax, size);
+ if (node->flag & NODE_ACTIVE) {
+ UI_GetThemeColorShadeAlpha4fv(TH_TEXT_HI, 0, -40, debug_color);
+ }
+ else {
+ UI_GetThemeColorShadeAlpha4fv(TH_TEXT_HI, -20, -120, debug_color);
+ }
+ UI_draw_roundbox_4fv(false, rct->xmin, rct->ymin, rct->xmax, rct->ymax, size, debug_color);
glDisable(GL_LINE_SMOOTH);
glDisable(GL_BLEND);
@@ -637,9 +589,7 @@ static void node_draw_reroute(const bContext *C, ARegion *ar, SpaceNode *UNUSED(
/* only draw input socket. as they all are placed on the same position.
* highlight also if node itself is selected, since we don't display the node body separately!
*/
- for (sock = node->inputs.first; sock; sock = sock->next) {
- node_socket_draw(C, ntree, node, sock, socket_size, (sock->flag & SELECT) || (node->flag & SELECT));
- }
+ node_draw_sockets(&ar->v2d, C, ntree, node, false, node->flag & SELECT);
UI_block_end(C, node->block);
UI_block_draw(C, node->block);
@@ -800,7 +750,7 @@ static void node_shader_buts_geometry(uiLayout *layout, bContext *C, PointerRNA
if (obptr.data && RNA_enum_get(&obptr, "type") == OB_MESH) {
PointerRNA dataptr = RNA_pointer_get(&obptr, "data");
- uiItemPointerR(col, ptr, "uv_layer", &dataptr, "uv_textures", "", ICON_NONE);
+ uiItemPointerR(col, ptr, "uv_layer", &dataptr, "uv_layers", "", ICON_NONE);
uiItemPointerR(col, ptr, "color_layer", &dataptr, "vertex_colors", "", ICON_NONE);
}
else {
@@ -1022,7 +972,7 @@ static void node_shader_buts_uvmap(uiLayout *layout, bContext *C, PointerRNA *pt
if (obptr.data && RNA_enum_get(&obptr, "type") == OB_MESH) {
PointerRNA dataptr = RNA_pointer_get(&obptr, "data");
- uiItemPointerR(layout, ptr, "uv_map", &dataptr, "uv_textures", "", ICON_NONE);
+ uiItemPointerR(layout, ptr, "uv_map", &dataptr, "uv_layers", "", ICON_NONE);
}
}
}
@@ -1041,7 +991,7 @@ static void node_shader_buts_normal_map(uiLayout *layout, bContext *C, PointerRN
if (obptr.data && RNA_enum_get(&obptr, "type") == OB_MESH) {
PointerRNA dataptr = RNA_pointer_get(&obptr, "data");
- uiItemPointerR(layout, ptr, "uv_map", &dataptr, "uv_textures", "", ICON_NONE);
+ uiItemPointerR(layout, ptr, "uv_map", &dataptr, "uv_layers", "", ICON_NONE);
}
else
uiItemR(layout, ptr, "uv_map", 0, "", 0);
@@ -1068,7 +1018,7 @@ static void node_shader_buts_tangent(uiLayout *layout, bContext *C, PointerRNA *
if (obptr.data && RNA_enum_get(&obptr, "type") == OB_MESH) {
PointerRNA dataptr = RNA_pointer_get(&obptr, "data");
- uiItemPointerR(row, ptr, "uv_map", &dataptr, "uv_textures", "", ICON_NONE);
+ uiItemPointerR(row, ptr, "uv_map", &dataptr, "uv_layers", "", ICON_NONE);
}
else
uiItemR(row, ptr, "uv_map", 0, "", 0);
@@ -1337,7 +1287,7 @@ static void node_composit_buts_image_ex(uiLayout *layout, bContext *C, PointerRN
uiTemplateImage(layout, C, ptr, "image", &iuserptr, 0, 1);
}
-static void node_composit_buts_renderlayers(uiLayout *layout, bContext *C, PointerRNA *ptr)
+static void node_composit_buts_viewlayers(uiLayout *layout, bContext *C, PointerRNA *ptr)
{
bNode *node = ptr->data;
uiLayout *col, *row;
@@ -2235,14 +2185,21 @@ static void node_composit_backdrop_viewer(SpaceNode *snode, ImBuf *backdrop, bNo
const float cy = y + snode->zoom * backdropHeight * node->custom4;
const float cross_size = 12 * U.pixelsize;
- glColor3f(1.0, 1.0, 1.0);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
- glBegin(GL_LINES);
- glVertex2f(cx - cross_size, cy - cross_size);
- glVertex2f(cx + cross_size, cy + cross_size);
- glVertex2f(cx + cross_size, cy - cross_size);
- glVertex2f(cx - cross_size, cy + cross_size);
- glEnd();
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ immUniformColor3f(1.0f, 1.0f, 1.0f);
+
+ immBegin(GWN_PRIM_LINES, 4);
+ immVertex2f(pos, cx - cross_size, cy - cross_size);
+ immVertex2f(pos, cx + cross_size, cy + cross_size);
+ immVertex2f(pos, cx + cross_size, cy - cross_size);
+ immVertex2f(pos, cx - cross_size, cy + cross_size);
+ immEnd();
+
+ immUnbindProgram();
}
}
@@ -2261,9 +2218,6 @@ static void node_composit_backdrop_boxmask(SpaceNode *snode, ImBuf *backdrop, bN
float cx, cy, x1, x2, x3, x4;
float y1, y2, y3, y4;
-
- glColor3f(1.0, 1.0, 1.0);
-
cx = x + snode->zoom * backdropWidth * boxmask->x;
cy = y + snode->zoom * backdropHeight * boxmask->y;
@@ -2276,12 +2230,21 @@ static void node_composit_backdrop_boxmask(SpaceNode *snode, ImBuf *backdrop, bN
y3 = cy - (-sine * -halveBoxWidth + cosine * -halveBoxHeight) * snode->zoom;
y4 = cy - (-sine * halveBoxWidth + cosine * -halveBoxHeight) * snode->zoom;
- glBegin(GL_LINE_LOOP);
- glVertex2f(x1, y1);
- glVertex2f(x2, y2);
- glVertex2f(x3, y3);
- glVertex2f(x4, y4);
- glEnd();
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ immUniformColor3f(1.0f, 1.0f, 1.0f);
+
+ immBegin(GWN_PRIM_LINE_LOOP, 4);
+ immVertex2f(pos, x1, y1);
+ immVertex2f(pos, x2, y2);
+ immVertex2f(pos, x3, y3);
+ immVertex2f(pos, x4, y4);
+ immEnd();
+
+ immUnbindProgram();
}
static void node_composit_backdrop_ellipsemask(SpaceNode *snode, ImBuf *backdrop, bNode *node, int x, int y)
@@ -2299,9 +2262,6 @@ static void node_composit_backdrop_ellipsemask(SpaceNode *snode, ImBuf *backdrop
float cx, cy, x1, x2, x3, x4;
float y1, y2, y3, y4;
-
- glColor3f(1.0, 1.0, 1.0);
-
cx = x + snode->zoom * backdropWidth * ellipsemask->x;
cy = y + snode->zoom * backdropHeight * ellipsemask->y;
@@ -2314,13 +2274,21 @@ static void node_composit_backdrop_ellipsemask(SpaceNode *snode, ImBuf *backdrop
y3 = cy - (-sine * -halveBoxWidth + cosine * -halveBoxHeight) * snode->zoom;
y4 = cy - (-sine * halveBoxWidth + cosine * -halveBoxHeight) * snode->zoom;
- glBegin(GL_LINE_LOOP);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ immUniformColor3f(1.0f, 1.0f, 1.0f);
- glVertex2f(x1, y1);
- glVertex2f(x2, y2);
- glVertex2f(x3, y3);
- glVertex2f(x4, y4);
- glEnd();
+ immBegin(GWN_PRIM_LINE_LOOP, 4);
+ immVertex2f(pos, x1, y1);
+ immVertex2f(pos, x2, y2);
+ immVertex2f(pos, x3, y3);
+ immVertex2f(pos, x4, y4);
+ immEnd();
+
+ immUnbindProgram();
}
static void node_composit_buts_ellipsemask(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
@@ -2520,7 +2488,7 @@ static void node_composit_set_butfunc(bNodeType *ntype)
ntype->draw_buttons_ex = node_composit_buts_image_ex;
break;
case CMP_NODE_R_LAYERS:
- ntype->draw_buttons = node_composit_buts_renderlayers;
+ ntype->draw_buttons = node_composit_buts_viewlayers;
break;
case CMP_NODE_NORMAL:
ntype->draw_buttons = node_buts_normal;
@@ -3226,6 +3194,7 @@ void ED_init_node_socket_type_virtual(bNodeSocketType *stype)
void draw_nodespace_back_pix(const bContext *C, ARegion *ar, SpaceNode *snode, bNodeInstanceKey parent_key)
{
bNodeInstanceKey active_viewer_key = (snode->nodetree ? snode->nodetree->active_viewer_key : NODE_INSTANCE_KEY_NONE);
+ float shuffle[4] = {0.0f, 0.0f, 0.0f, 0.0f};
Image *ima;
void *lock;
ImBuf *ibuf;
@@ -3240,12 +3209,10 @@ void draw_nodespace_back_pix(const bContext *C, ARegion *ar, SpaceNode *snode, b
ibuf = BKE_image_acquire_ibuf(ima, NULL, &lock);
if (ibuf) {
float x, y;
-
- glMatrixMode(GL_PROJECTION);
- glPushMatrix();
- glMatrixMode(GL_MODELVIEW);
- glPushMatrix();
-
+
+ gpuPushProjectionMatrix();
+ gpuPushMatrix();
+
/* somehow the offset has to be calculated inverse */
glaDefine2DArea(&ar->winrct);
@@ -3258,60 +3225,37 @@ void draw_nodespace_back_pix(const bContext *C, ARegion *ar, SpaceNode *snode, b
unsigned char *display_buffer = NULL;
void *cache_handle = NULL;
- if (snode->flag & (SNODE_SHOW_R | SNODE_SHOW_G | SNODE_SHOW_B)) {
- int ofs;
-
- display_buffer = IMB_display_buffer_acquire_ctx(C, ibuf, &cache_handle);
-
-#ifdef __BIG_ENDIAN__
- if (snode->flag & SNODE_SHOW_R) ofs = 0;
- else if (snode->flag & SNODE_SHOW_G) ofs = 1;
- else ofs = 2;
-#else
- if (snode->flag & SNODE_SHOW_R) ofs = 1;
- else if (snode->flag & SNODE_SHOW_G) ofs = 2;
- else ofs = 3;
-#endif
+ if (snode->flag & (SNODE_SHOW_R | SNODE_SHOW_G | SNODE_SHOW_B | SNODE_SHOW_ALPHA)) {
- glPixelZoom(snode->zoom, snode->zoom);
- /* swap bytes, so alpha is most significant one, then just draw it as luminance int */
-
- glaDrawPixelsSafe(x, y, ibuf->x, ibuf->y, ibuf->x, GL_LUMINANCE, GL_UNSIGNED_INT,
- display_buffer - (4 - ofs));
-
- glPixelZoom(1.0f, 1.0f);
- }
- else if (snode->flag & SNODE_SHOW_ALPHA) {
display_buffer = IMB_display_buffer_acquire_ctx(C, ibuf, &cache_handle);
-
- glPixelZoom(snode->zoom, snode->zoom);
- /* swap bytes, so alpha is most significant one, then just draw it as luminance int */
-#ifdef __BIG_ENDIAN__
- glPixelStorei(GL_UNPACK_SWAP_BYTES, 1);
-#endif
- glaDrawPixelsSafe(x, y, ibuf->x, ibuf->y, ibuf->x, GL_LUMINANCE, GL_UNSIGNED_INT, display_buffer);
-
-#ifdef __BIG_ENDIAN__
- glPixelStorei(GL_UNPACK_SWAP_BYTES, 0);
-#endif
- glPixelZoom(1.0f, 1.0f);
+
+ if (snode->flag & SNODE_SHOW_R)
+ shuffle[0] = 1.0f;
+ else if (snode->flag & SNODE_SHOW_G)
+ shuffle[1] = 1.0f;
+ else if (snode->flag & SNODE_SHOW_B)
+ shuffle[2] = 1.0f;
+ else
+ shuffle[3] = 1.0f;
+
+ IMMDrawPixelsTexState state = immDrawPixelsTexSetup(GPU_SHADER_2D_IMAGE_SHUFFLE_COLOR);
+ GPU_shader_uniform_vector(state.shader, GPU_shader_get_uniform(state.shader, "shuffle"), 4, 1, shuffle);
+
+ immDrawPixelsTex(&state, x, y, ibuf->x, ibuf->y, GL_RGBA, GL_UNSIGNED_BYTE, GL_NEAREST,
+ display_buffer, snode->zoom, snode->zoom, NULL);
+
+ GPU_shader_unbind();
}
else if (snode->flag & SNODE_USE_ALPHA) {
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glPixelZoom(snode->zoom, snode->zoom);
-
- glaDrawImBuf_glsl_ctx(C, ibuf, x, y, GL_NEAREST);
-
- glPixelZoom(1.0f, 1.0f);
+
+ glaDrawImBuf_glsl_ctx(C, ibuf, x, y, GL_NEAREST, snode->zoom, snode->zoom);
+
glDisable(GL_BLEND);
}
else {
- glPixelZoom(snode->zoom, snode->zoom);
-
- glaDrawImBuf_glsl_ctx(C, ibuf, x, y, GL_NEAREST);
-
- glPixelZoom(1.0f, 1.0f);
+ glaDrawImBuf_glsl_ctx(C, ibuf, x, y, GL_NEAREST, snode->zoom, snode->zoom);
}
if (cache_handle)
@@ -3336,20 +3280,24 @@ void draw_nodespace_back_pix(const bContext *C, ARegion *ar, SpaceNode *snode, b
viewer_border->ymin < viewer_border->ymax)
{
rcti pixel_border;
- UI_ThemeColor(TH_ACTIVE);
BLI_rcti_init(&pixel_border,
x + snode->zoom * viewer_border->xmin * ibuf->x,
x + snode->zoom * viewer_border->xmax * ibuf->x,
y + snode->zoom * viewer_border->ymin * ibuf->y,
y + snode->zoom * viewer_border->ymax * ibuf->y);
- glaDrawBorderCorners(&pixel_border, 1.0f, 1.0f);
+
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformThemeColor(TH_ACTIVE);
+
+ immDrawBorderCorners(pos, &pixel_border, 1.0f, 1.0f);
+
+ immUnbindProgram();
}
}
-
- glMatrixMode(GL_PROJECTION);
- glPopMatrix();
- glMatrixMode(GL_MODELVIEW);
- glPopMatrix();
+
+ gpuPopProjectionMatrix();
+ gpuPopMatrix();
}
BKE_image_release_ibuf(ima, ibuf, lock);
@@ -3461,6 +3409,7 @@ void node_draw_link_bezier(View2D *v2d, SpaceNode *snode, bNodeLink *link,
float linew;
float arrow[2], arrow1[2], arrow2[2];
glGetFloatv(GL_LINE_WIDTH, &linew);
+ unsigned int pos;
/* we can reuse the dist variable here to increment the GL curve eval amount*/
dist = 1.0f / (float)LINK_RESOL;
@@ -3484,141 +3433,89 @@ void node_draw_link_bezier(View2D *v2d, SpaceNode *snode, bNodeLink *link,
arrow[0] = coord_array[LINK_ARROW][0];
arrow[1] = coord_array[LINK_ARROW][1];
}
+
+ if (do_triple || drawarrow || (!do_shaded)) {
+ pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ }
+
if (do_triple) {
- UI_ThemeColorShadeAlpha(th_col3, -80, -120);
+ immUniformThemeColorShadeAlpha(th_col3, -80, -120);
glLineWidth(4.0f);
-
- glBegin(GL_LINE_STRIP);
+
+ immBegin(GWN_PRIM_LINE_STRIP, (LINK_RESOL + 1));
+
for (i = 0; i <= LINK_RESOL; i++) {
- glVertex2fv(coord_array[i]);
+ immVertex2fv(pos, coord_array[i]);
}
- glEnd();
+
+ immEnd();
+
if (drawarrow) {
- glBegin(GL_LINE_STRIP);
- glVertex2fv(arrow1);
- glVertex2fv(arrow);
- glVertex2fv(arrow2);
- glEnd();
+ immBegin(GWN_PRIM_LINE_STRIP, 3);
+ immVertex2fv(pos, arrow1);
+ immVertex2fv(pos, arrow);
+ immVertex2fv(pos, arrow2);
+ immEnd();
}
}
-
- /* XXX using GL_LINES for shaded node lines is a workaround
- * for Intel hardware, this breaks with GL_LINE_STRIP and
- * changing color in begin/end blocks.
- */
+
glLineWidth(1.5f);
- if (do_shaded) {
- glBegin(GL_LINES);
- for (i = 0; i < LINK_RESOL; i++) {
- UI_ThemeColorBlend(th_col1, th_col2, spline_step);
- glVertex2fv(coord_array[i]);
-
- UI_ThemeColorBlend(th_col1, th_col2, spline_step + dist);
- glVertex2fv(coord_array[i + 1]);
-
- spline_step += dist;
- }
- glEnd();
+
+ if (drawarrow) {
+ immUniformThemeColorBlend(th_col1, th_col2, 0.5f);
+
+ immBegin(GWN_PRIM_LINE_STRIP, 3);
+ immVertex2fv(pos, arrow1);
+ immVertex2fv(pos, arrow);
+ immVertex2fv(pos, arrow2);
+ immEnd();
}
- else {
- UI_ThemeColor(th_col1);
- glBegin(GL_LINE_STRIP);
+
+ if (!do_shaded) {
+ immUniformThemeColor(th_col1);
+
+ immBegin(GWN_PRIM_LINE_STRIP, (LINK_RESOL + 1));
+
for (i = 0; i <= LINK_RESOL; i++) {
- glVertex2fv(coord_array[i]);
+ immVertex2fv(pos, coord_array[i]);
}
- glEnd();
+
+ immEnd();
}
-
- if (drawarrow) {
- glBegin(GL_LINE_STRIP);
- glVertex2fv(arrow1);
- glVertex2fv(arrow);
- glVertex2fv(arrow2);
- glEnd();
+
+ if (do_triple || drawarrow || (!do_shaded)) {
+ immUnbindProgram();
}
-
- glDisable(GL_LINE_SMOOTH);
- }
-}
-#if 0 /* not used in 2.5x yet */
-static void node_link_straight_points(View2D *UNUSED(v2d), SpaceNode *snode, bNodeLink *link, float coord_array[][2])
-{
- if (link->fromsock) {
- coord_array[0][0] = link->fromsock->locx;
- coord_array[0][1] = link->fromsock->locy;
- }
- else {
- if (snode == NULL) return;
- coord_array[0][0] = snode->mx;
- coord_array[0][1] = snode->my;
- }
- if (link->tosock) {
- coord_array[1][0] = link->tosock->locx;
- coord_array[1][1] = link->tosock->locy;
- }
- else {
- if (snode == NULL) return;
- coord_array[1][0] = snode->mx;
- coord_array[1][1] = snode->my;
- }
-}
+ if (do_shaded) {
+ unsigned char col[3];
-void node_draw_link_straight(View2D *v2d, SpaceNode *snode, bNodeLink *link,
- int th_col1, int do_shaded, int th_col2, int do_triple, int th_col3)
-{
- float coord_array[2][2];
- int i;
-
- node_link_straight_points(v2d, snode, link, coord_array);
-
- glEnable(GL_LINE_SMOOTH);
-
- if (do_triple) {
- UI_ThemeColorShadeAlpha(th_col3, -80, -120);
- glLineWidth(4.0f);
-
- glBegin(GL_LINES);
- glVertex2fv(coord_array[0]);
- glVertex2fv(coord_array[1]);
- glEnd();
- }
-
- UI_ThemeColor(th_col1);
- glLineWidth(1.5f);
-
- /* XXX using GL_LINES for shaded node lines is a workaround
- * for Intel hardware, this breaks with GL_LINE_STRIP and
- * changing color in begin/end blocks.
- */
- if (do_shaded) {
- glBegin(GL_LINES);
- for (i = 0; i < LINK_RESOL - 1; ++i) {
- float t = (float)i / (float)(LINK_RESOL - 1);
- UI_ThemeColorBlend(th_col1, th_col2, t);
- glVertex2f((1.0f - t) * coord_array[0][0] + t * coord_array[1][0],
- (1.0f - t) * coord_array[0][1] + t * coord_array[1][1]);
-
- t = (float)(i + 1) / (float)(LINK_RESOL - 1);
- UI_ThemeColorBlend(th_col1, th_col2, t);
- glVertex2f((1.0f - t) * coord_array[0][0] + t * coord_array[1][0],
- (1.0f - t) * coord_array[0][1] + t * coord_array[1][1]);
- }
- glEnd();
- }
- else {
- glBegin(GL_LINE_STRIP);
- for (i = 0; i < LINK_RESOL; ++i) {
- float t = (float)i / (float)(LINK_RESOL - 1);
- glVertex2f((1.0f - t) * coord_array[0][0] + t * coord_array[1][0],
- (1.0f - t) * coord_array[0][1] + t * coord_array[1][1]);
+ Gwn_VertFormat *format = immVertexFormat();
+ pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_SMOOTH_COLOR);
+
+ immBegin(GWN_PRIM_LINE_STRIP, (LINK_RESOL + 1));
+
+ for (i = 0; i <= LINK_RESOL; i++) {
+ UI_GetThemeColorBlend3ubv(th_col1, th_col2, spline_step, col);
+ immAttrib3ubv(color, col);
+
+ immVertex2fv(pos, coord_array[i]);
+
+ spline_step += dist;
+ }
+
+ immEnd();
+
+ immUnbindProgram();
}
- glEnd();
+
+ glDisable(GL_LINE_SMOOTH);
}
-
- glDisable(GL_LINE_SMOOTH);
}
-#endif
/* note; this is used for fake links in groups too */
void node_draw_link(View2D *v2d, SpaceNode *snode, bNodeLink *link)
@@ -3666,27 +3563,27 @@ void node_draw_link(View2D *v2d, SpaceNode *snode, bNodeLink *link)
// node_draw_link_straight(v2d, snode, link, th_col1, do_shaded, th_col2, do_triple, th_col3);
}
-void ED_node_draw_snap(View2D *v2d, const float cent[2], float size, NodeBorder border)
+void ED_node_draw_snap(View2D *v2d, const float cent[2], float size, NodeBorder border, unsigned pos)
{
- glBegin(GL_LINES);
+ immBegin(GWN_PRIM_LINES, 4);
if (border & (NODE_LEFT | NODE_RIGHT)) {
- glVertex2f(cent[0], v2d->cur.ymin);
- glVertex2f(cent[0], v2d->cur.ymax);
+ immVertex2f(pos, cent[0], v2d->cur.ymin);
+ immVertex2f(pos, cent[0], v2d->cur.ymax);
}
else {
- glVertex2f(cent[0], cent[1] - size);
- glVertex2f(cent[0], cent[1] + size);
+ immVertex2f(pos, cent[0], cent[1] - size);
+ immVertex2f(pos, cent[0], cent[1] + size);
}
if (border & (NODE_TOP | NODE_BOTTOM)) {
- glVertex2f(v2d->cur.xmin, cent[1]);
- glVertex2f(v2d->cur.xmax, cent[1]);
+ immVertex2f(pos, v2d->cur.xmin, cent[1]);
+ immVertex2f(pos, v2d->cur.xmax, cent[1]);
}
else {
- glVertex2f(cent[0] - size, cent[1]);
- glVertex2f(cent[0] + size, cent[1]);
+ immVertex2f(pos, cent[0] - size, cent[1]);
+ immVertex2f(pos, cent[0] + size, cent[1]);
}
- glEnd();
+ immEnd();
}
diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c
index d7119302611..231039b2e22 100644
--- a/source/blender/editors/space_node/node_draw.c
+++ b/source/blender/editors/space_node/node_draw.c
@@ -44,16 +44,21 @@
#include "BLT_translation.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_node.h"
+#include "DEG_depsgraph.h"
+
#include "BLF_api.h"
-#include "BIF_gl.h"
#include "BIF_glutil.h"
+#include "GPU_draw.h"
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+#include "GPU_matrix.h"
+
#include "WM_api.h"
#include "WM_types.h"
@@ -128,10 +133,10 @@ void ED_node_tag_update_id(ID *id)
* all the users of this tree will have update
* flushed from the tree,
*/
- DAG_id_tag_update(&ntree->id, 0);
+ DEG_id_tag_update(&ntree->id, 0);
if (ntree->type == NTREE_SHADER) {
- DAG_id_tag_update(id, 0);
+ DEG_id_tag_update(id, 0);
if (GS(id->name) == ID_MA)
WM_main_add_notifier(NC_MATERIAL | ND_SHADING, id);
@@ -144,12 +149,12 @@ void ED_node_tag_update_id(ID *id)
WM_main_add_notifier(NC_SCENE | ND_NODES, id);
}
else if (ntree->type == NTREE_TEXTURE) {
- DAG_id_tag_update(id, 0);
+ DEG_id_tag_update(id, 0);
WM_main_add_notifier(NC_TEXTURE | ND_NODES, id);
}
else if (id == &ntree->id) {
/* node groups */
- DAG_id_tag_update(id, 0);
+ DEG_id_tag_update(id, 0);
}
}
@@ -617,103 +622,16 @@ static void node_draw_mute_line(View2D *v2d, SpaceNode *snode, bNode *node)
glDisable(GL_LINE_SMOOTH);
}
-static void node_socket_shape_draw(
- float x, float y, float size, const float col[4], bool highlight,
- const float coords[][2], int coords_len)
-{
- int a;
-
- glColor4fv(col);
-
- glEnable(GL_BLEND);
- glBegin(GL_POLYGON);
- for (a = 0; a < coords_len; a++) {
- glVertex2f(x + size * coords[a][0], y + size * coords[a][1]);
- }
- glEnd();
- glDisable(GL_BLEND);
-
- if (highlight) {
- UI_ThemeColor(TH_TEXT_HI);
- glLineWidth(1.5f);
- }
- else {
- glColor4ub(0, 0, 0, 150);
- }
- glEnable(GL_BLEND);
- glEnable(GL_LINE_SMOOTH);
- glBegin(GL_LINE_LOOP);
- for (a = 0; a < coords_len; a++) {
- glVertex2f(x + size * coords[a][0], y + size * coords[a][1]);
- }
- glEnd();
- glDisable(GL_LINE_SMOOTH);
- glDisable(GL_BLEND);
-}
-
-
-void node_socket_draw(const bContext *C, bNodeTree *ntree, bNode *node, bNodeSocket *sock, float size, bool highlight)
+static void node_socket_circle_draw(const bContext *C, bNodeTree *ntree, PointerRNA node_ptr, bNodeSocket *sock, unsigned pos, unsigned col)
{
- PointerRNA ptr, node_ptr;
+ PointerRNA ptr;
float color[4];
RNA_pointer_create((ID *)ntree, &RNA_NodeSocket, sock, &ptr);
- RNA_pointer_create((ID *)ntree, &RNA_Node, node, &node_ptr);
sock->typeinfo->draw_color((bContext *)C, &ptr, &node_ptr, color);
-
- /* 16 values of {sin, cos} function */
- const float shape_circle[16][2] = {
- {0.00000000f, 1.00000000f},
- {0.39435585f, 0.91895781f},
- {0.72479278f, 0.68896691f},
- {0.93775213f, 0.34730525f},
- {0.99871650f, -0.05064916f},
- {0.89780453f, -0.44039415f},
- {0.65137248f, -0.75875812f},
- {0.29936312f, -0.95413925f},
- {-0.10116832f, -0.99486932f},
- {-0.48530196f, -0.87434661f},
- {-0.79077573f, -0.61210598f},
- {-0.96807711f, -0.25065253f},
- {-0.98846832f, 0.15142777f},
- {-0.84864425f, 0.52896401f},
- {-0.57126821f, 0.82076344f},
- {-0.20129852f, 0.97952994f }
- };
-
- const float shape_diamond[4][2] = {
- {0.0f, 1.2f},
- {1.2f, 0.0f},
- {0.0f, -1.2f},
- {-1.2f, 0.0f},
- };
-
- const float shape_square[4][2] = {
- {-0.9f, 0.9f},
- {0.9f, 0.9f},
- {0.9f, -0.9f},
- {-0.9f, -0.9f},
- };
-
- const float (*shape)[2];
- int shape_len;
- switch (sock->draw_shape) {
- default:
- case SOCK_DRAW_SHAPE_CIRCLE:
- shape = shape_circle;
- shape_len = ARRAY_SIZE(shape_circle);
- break;
- case SOCK_DRAW_SHAPE_DIAMOND:
- shape = shape_diamond;
- shape_len = ARRAY_SIZE(shape_diamond);
- break;
- case SOCK_DRAW_SHAPE_SQUARE:
- shape = shape_square;
- shape_len = ARRAY_SIZE(shape_square);
- break;
- }
-
- node_socket_shape_draw(sock->locx, sock->locy, size, color, highlight, shape, shape_len);
+
+ immAttrib4fv(col, color);
+ immVertex2f(pos, sock->locx, sock->locy);
}
/* ************** Socket callbacks *********** */
@@ -722,10 +640,15 @@ static void node_draw_preview_background(float tile, rctf *rect)
{
float x, y;
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
/* draw checkerboard backdrop to show alpha */
- glColor3ub(120, 120, 120);
- glRectf(rect->xmin, rect->ymin, rect->xmax, rect->ymax);
- glColor3ub(160, 160, 160);
+ immUniformColor3ub(120, 120, 120);
+ immRectf(pos, rect->xmin, rect->ymin, rect->xmax, rect->ymax);
+ immUniformColor3ub(160, 160, 160);
for (y = rect->ymin; y < rect->ymax; y += tile * 2) {
for (x = rect->xmin; x < rect->xmax; x += tile * 2) {
@@ -736,7 +659,7 @@ static void node_draw_preview_background(float tile, rctf *rect)
if (y + tile > rect->ymax)
tiley = rect->ymax - y;
- glRectf(x, y, x + tilex, y + tiley);
+ immRectf(pos, x, y, x + tilex, y + tiley);
}
}
for (y = rect->ymin + tile; y < rect->ymax; y += tile * 2) {
@@ -748,9 +671,10 @@ static void node_draw_preview_background(float tile, rctf *rect)
if (y + tile > rect->ymax)
tiley = rect->ymax - y;
- glRectf(x, y, x + tilex, y + tiley);
+ immRectf(pos, x, y, x + tilex, y + tiley);
}
}
+ immUnbindProgram();
}
/* not a callback */
@@ -783,15 +707,17 @@ static void node_draw_preview(bNodePreview *preview, rctf *prv)
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); /* premul graphics */
- glColor4f(1.0, 1.0, 1.0, 1.0);
- glPixelZoom(scale, scale);
- glaDrawPixelsTex(draw_rect.xmin, draw_rect.ymin, preview->xsize, preview->ysize, GL_RGBA, GL_UNSIGNED_BYTE, GL_LINEAR, preview->rect);
- glPixelZoom(1.0f, 1.0f);
+ IMMDrawPixelsTexState state = immDrawPixelsTexSetup(GPU_SHADER_2D_IMAGE_COLOR);
+ immDrawPixelsTex(&state, draw_rect.xmin, draw_rect.ymin, preview->xsize, preview->ysize, GL_RGBA, GL_UNSIGNED_BYTE, GL_LINEAR, preview->rect,
+ scale, scale, NULL);
glDisable(GL_BLEND);
- UI_ThemeColorShadeAlpha(TH_BACK, -15, +100);
- fdrawbox(draw_rect.xmin, draw_rect.ymin, draw_rect.xmax, draw_rect.ymax);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformThemeColorShadeAlpha(TH_BACK, -15, +100);
+ imm_draw_box_wire_2d(pos, draw_rect.xmin, draw_rect.ymin, draw_rect.xmax, draw_rect.ymax);
+ immUnbindProgram();
}
/* common handle function for operator buttons that need to select the node first */
@@ -816,23 +742,134 @@ void node_draw_shadow(SpaceNode *snode, bNode *node, float radius, float alpha)
else {
const float margin = 3.0f;
- glColor4f(0.0f, 0.0f, 0.0f, 0.33f);
- glEnable(GL_BLEND);
- UI_draw_roundbox(rct->xmin - margin, rct->ymin - margin,
- rct->xmax + margin, rct->ymax + margin, radius + margin);
- glDisable(GL_BLEND);
+ float color[4] = {0.0f, 0.0f, 0.0f, 0.33f};
+ UI_draw_roundbox_aa(true, rct->xmin - margin, rct->ymin - margin,
+ rct->xmax + margin, rct->ymax + margin, radius + margin, color);
+ }
+}
+
+void node_draw_sockets(View2D *v2d, const bContext *C, bNodeTree *ntree, bNode *node, bool draw_outputs, bool select_all)
+{
+ const unsigned int total_input_ct = BLI_listbase_count(&node->inputs);
+ const unsigned int total_output_ct = BLI_listbase_count(&node->outputs);
+
+ if (total_input_ct + total_output_ct == 0) {
+ return;
+ }
+
+ PointerRNA node_ptr;
+ RNA_pointer_create((ID *)ntree, &RNA_Node, node, &node_ptr);
+
+ float scale;
+ UI_view2d_scale_get(v2d, &scale, NULL);
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int col = GWN_vertformat_attr_add(format, "color", GWN_COMP_F32, 4, GWN_FETCH_FLOAT);
+
+ glEnable(GL_BLEND);
+ GPU_enable_program_point_size();
+
+ immBindBuiltinProgram(GPU_SHADER_2D_POINT_UNIFORM_SIZE_VARYING_COLOR_OUTLINE_AA);
+
+ /* set handle size */
+ immUniform1f("size", 2.0f * NODE_SOCKSIZE * scale); /* 2 * size to have diameter */
+
+ if (!select_all) {
+ /* outline for unselected sockets */
+ immUniform1f("outlineWidth", 1.0f);
+ immUniform4f("outlineColor", 0.0f, 0.0f, 0.0f, 0.6f);
+
+ immBeginAtMost(GWN_PRIM_POINTS, total_input_ct + total_output_ct);
+ }
+
+ /* socket inputs */
+ short selected_input_ct = 0;
+ bNodeSocket *sock;
+ for (sock = node->inputs.first; sock; sock = sock->next) {
+ if (nodeSocketIsHidden(sock))
+ continue;
+ if (select_all || (sock->flag & SELECT)) {
+ ++selected_input_ct;
+ continue;
+ }
+
+ node_socket_circle_draw(C, ntree, node_ptr, sock, pos, col);
+ }
+
+ /* socket outputs */
+ short selected_output_ct = 0;
+ if (draw_outputs) {
+ for (sock = node->outputs.first; sock; sock = sock->next) {
+ if (nodeSocketIsHidden(sock))
+ continue;
+ if (select_all || (sock->flag & SELECT)) {
+ ++selected_output_ct;
+ continue;
+ }
+
+ node_socket_circle_draw(C, ntree, node_ptr, sock, pos, col);
+ }
+ }
+
+ if (!select_all) {
+ immEnd();
+ }
+
+ /* go back and draw selected sockets */
+ if (selected_input_ct + selected_output_ct > 0) {
+ /* outline for selected sockets */
+ float c[3];
+ UI_GetThemeColor3fv(TH_TEXT_HI, c);
+ immUniform4f("outlineColor", c[0], c[1], c[2], 1.0f);
+ immUniform1f("outlineWidth", 1.5f);
+
+ immBegin(GWN_PRIM_POINTS, selected_input_ct + selected_output_ct);
+
+ if (selected_input_ct) {
+ /* socket inputs */
+ for (sock = node->inputs.first; sock; sock = sock->next) {
+ if (nodeSocketIsHidden(sock))
+ continue;
+ if (select_all || (sock->flag & SELECT)) {
+ node_socket_circle_draw(C, ntree, node_ptr, sock, pos, col);
+ if (--selected_input_ct == 0)
+ break; /* stop as soon as last one is drawn */
+ }
+ }
+ }
+
+ if (selected_output_ct) {
+ /* socket outputs */
+ for (sock = node->outputs.first; sock; sock = sock->next) {
+ if (nodeSocketIsHidden(sock))
+ continue;
+ if (select_all || (sock->flag & SELECT)) {
+ node_socket_circle_draw(C, ntree, node_ptr, sock, pos, col);
+ if (--selected_output_ct == 0)
+ break; /* stop as soon as last one is drawn */
+ }
+ }
+ }
+
+ immEnd();
}
+
+ immUnbindProgram();
+
+ GPU_disable_program_point_size();
+ glDisable(GL_BLEND);
}
static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bNodeTree *ntree, bNode *node, bNodeInstanceKey key)
{
bNodeInstanceHash *previews = CTX_data_pointer_get(C, "node_previews").data;
- bNodeSocket *sock;
rctf *rct = &node->totr;
float iconofs;
/* float socket_size = NODE_SOCKSIZE*U.dpi/72; */ /* UNUSED */
float iconbutw = 0.8f * UI_UNIT_X;
int color_id = node_get_colorid(node);
+ float color[4];
char showname[128]; /* 128 used below */
View2D *v2d = &ar->v2d;
@@ -841,7 +878,7 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN
nodeSynchronizeID(node, false);
/* skip if out of view */
- if (BLI_rctf_isect(&node->totr, &ar->v2d.cur, NULL) == false) {
+ if (BLI_rctf_isect(&node->totr, &v2d->cur, NULL) == false) {
UI_block_end(C, node->block);
node->block = NULL;
return;
@@ -850,23 +887,24 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN
/* shadow */
node_draw_shadow(snode, node, BASIS_RAD, 1.0f);
- /* header uses color from backdrop, but we make it opaqie */
- if (color_id == TH_NODE) {
- float col[3];
- UI_GetThemeColorShade3fv(color_id, -20, col);
- glColor4f(col[0], col[1], col[2], 1.0f);
+ if (node->flag & NODE_MUTED) {
+ UI_GetThemeColorBlendShade4fv(color_id, TH_REDALERT, 0.5f, 0, color);
+ }
+ else {
+ /* header uses color from backdrop, but we make it opaque */
+ if (color_id == TH_NODE) {
+ UI_GetThemeColorShade3fv(color_id, -20, color);
+ color[3] = 1.0f;
+ }
+ else {
+ UI_GetThemeColor4fv(color_id, color);
+ }
}
- else
- UI_ThemeColor(color_id);
-
- if (node->flag & NODE_MUTED)
- UI_ThemeColorBlend(color_id, TH_REDALERT, 0.5f);
-
glLineWidth(1.0f);
UI_draw_roundbox_corner_set(UI_CNR_TOP_LEFT | UI_CNR_TOP_RIGHT);
- UI_draw_roundbox(rct->xmin, rct->ymax - NODE_DY, rct->xmax, rct->ymax, BASIS_RAD);
+ UI_draw_roundbox_aa(true, rct->xmin, rct->ymax - NODE_DY, rct->xmax, rct->ymax, BASIS_RAD, color);
/* show/hide icons */
iconofs = rct->xmax - 0.35f * U.widget_unit;
@@ -899,10 +937,12 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN
}
/* title */
- if (node->flag & SELECT)
- UI_ThemeColor(TH_SELECT);
- else
- UI_ThemeColorBlendShade(TH_TEXT, color_id, 0.4f, 10);
+ if (node->flag & SELECT) {
+ UI_GetThemeColor4fv(TH_SELECT, color);
+ }
+ else {
+ UI_GetThemeColorBlendShade4fv(TH_SELECT, color_id, 0.4f, 10, color);
+ }
/* open/close entirely? */
{
@@ -917,17 +957,9 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN
UI_block_emboss_set(node->block, UI_EMBOSS);
/* custom draw function for this button */
- UI_draw_icon_tri(rct->xmin + 0.5f * U.widget_unit, rct->ymax - NODE_DY / 2.0f, 'v');
+ UI_draw_icon_tri(rct->xmin + 0.5f * U.widget_unit, rct->ymax - NODE_DY / 2.0f, 'v', color);
}
- /* this isn't doing anything for the label, so commenting out */
-#if 0
- if (node->flag & SELECT)
- UI_ThemeColor(TH_TEXT_HI);
- else
- UI_ThemeColor(TH_TEXT);
-#endif
-
nodeLabel(ntree, node, showname, sizeof(showname));
//if (node->flag & NODE_MUTED)
@@ -940,55 +972,30 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN
/* body */
if (!nodeIsRegistered(node))
- UI_ThemeColor4(TH_REDALERT); /* use warning color to indicate undefined types */
- else if (node->flag & NODE_CUSTOM_COLOR)
- glColor3fv(node->color);
+ UI_GetThemeColor4fv(TH_REDALERT, color); /* use warning color to indicate undefined types */
+ else if (node->flag & NODE_CUSTOM_COLOR) {
+ rgba_float_args_set(color, node->color[0], node->color[1], node->color[2], 1.0f);
+ }
else
- UI_ThemeColor4(TH_NODE);
- glEnable(GL_BLEND);
+ UI_GetThemeColor4fv(TH_NODE, color);
+
UI_draw_roundbox_corner_set(UI_CNR_BOTTOM_LEFT | UI_CNR_BOTTOM_RIGHT);
- UI_draw_roundbox(rct->xmin, rct->ymin, rct->xmax, rct->ymax - NODE_DY, BASIS_RAD);
- glDisable(GL_BLEND);
+ UI_draw_roundbox_aa(true, rct->xmin, rct->ymin, rct->xmax, rct->ymax - NODE_DY, BASIS_RAD, color);
/* outline active and selected emphasis */
if (node->flag & SELECT) {
-
- glEnable(GL_BLEND);
- glEnable(GL_LINE_SMOOTH);
-
- if (node->flag & NODE_ACTIVE)
- UI_ThemeColorShadeAlpha(TH_ACTIVE, 0, -40);
- else
- UI_ThemeColorShadeAlpha(TH_SELECT, 0, -40);
-
+ UI_GetThemeColorShadeAlpha4fv((node->flag & NODE_ACTIVE) ? TH_ACTIVE : TH_SELECT, 0, -40, color);
+
UI_draw_roundbox_corner_set(UI_CNR_ALL);
- UI_draw_roundbox_gl_mode(GL_LINE_LOOP, rct->xmin, rct->ymin, rct->xmax, rct->ymax, BASIS_RAD);
-
- glDisable(GL_LINE_SMOOTH);
- glDisable(GL_BLEND);
+ UI_draw_roundbox_aa(false, rct->xmin, rct->ymin, rct->xmax, rct->ymax, BASIS_RAD, color);
}
/* disable lines */
if (node->flag & NODE_MUTED)
node_draw_mute_line(v2d, snode, node);
-
- /* socket inputs, buttons */
- for (sock = node->inputs.first; sock; sock = sock->next) {
- if (nodeSocketIsHidden(sock))
- continue;
-
- node_socket_draw(C, ntree, node, sock, NODE_SOCKSIZE, sock->flag & SELECT);
- }
-
- /* socket outputs */
- for (sock = node->outputs.first; sock; sock = sock->next) {
- if (nodeSocketIsHidden(sock))
- continue;
-
- node_socket_draw(C, ntree, node, sock, NODE_SOCKSIZE, sock->flag & SELECT);
- }
-
+ node_draw_sockets(v2d, C, ntree, node, true, false);
+
/* preview */
if (node->flag & NODE_PREVIEW && previews) {
bNodePreview *preview = BKE_node_instance_hash_lookup(previews, key);
@@ -1008,37 +1015,33 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN
static void node_draw_hidden(const bContext *C, ARegion *ar, SpaceNode *snode, bNodeTree *ntree, bNode *node, bNodeInstanceKey UNUSED(key))
{
- bNodeSocket *sock;
rctf *rct = &node->totr;
float dx, centy = BLI_rctf_cent_y(rct);
float hiddenrad = BLI_rctf_size_y(rct) / 2.0f;
- float socket_size = NODE_SOCKSIZE;
int color_id = node_get_colorid(node);
+ float color[4];
char showname[128]; /* 128 is used below */
+ View2D *v2d = &ar->v2d;
+ float scale;
+
+ UI_view2d_scale_get(v2d, &scale, NULL);
/* shadow */
node_draw_shadow(snode, node, hiddenrad, 1.0f);
/* body */
- UI_ThemeColor(color_id);
if (node->flag & NODE_MUTED)
- UI_ThemeColorBlend(color_id, TH_REDALERT, 0.5f);
-
- UI_draw_roundbox(rct->xmin, rct->ymin, rct->xmax, rct->ymax, hiddenrad);
+ UI_GetThemeColorBlendShade4fv(color_id, TH_REDALERT, 0.5f, 0, color);
+ else
+ UI_GetThemeColor4fv(color_id, color);
+
+ UI_draw_roundbox_aa(true, rct->xmin, rct->ymin, rct->xmax, rct->ymax, hiddenrad, color);
/* outline active and selected emphasis */
if (node->flag & SELECT) {
- glEnable(GL_BLEND);
- glEnable(GL_LINE_SMOOTH);
-
- if (node->flag & NODE_ACTIVE)
- UI_ThemeColorShadeAlpha(TH_ACTIVE, 0, -40);
- else
- UI_ThemeColorShadeAlpha(TH_SELECT, 0, -40);
- UI_draw_roundbox_gl_mode(GL_LINE_LOOP, rct->xmin, rct->ymin, rct->xmax, rct->ymax, hiddenrad);
-
- glDisable(GL_LINE_SMOOTH);
- glDisable(GL_BLEND);
+ UI_GetThemeColorShadeAlpha4fv((node->flag & NODE_ACTIVE) ? TH_ACTIVE : TH_SELECT, 0, -40, color);
+
+ UI_draw_roundbox_aa(false, rct->xmin, rct->ymin, rct->xmax, rct->ymax, hiddenrad, color);
}
/* custom color inline */
@@ -1046,18 +1049,19 @@ static void node_draw_hidden(const bContext *C, ARegion *ar, SpaceNode *snode, b
glEnable(GL_BLEND);
glEnable(GL_LINE_SMOOTH);
- glColor3fv(node->color);
- UI_draw_roundbox_gl_mode(GL_LINE_LOOP, rct->xmin + 1, rct->ymin + 1, rct->xmax -1, rct->ymax - 1, hiddenrad);
+ UI_draw_roundbox_3fvAlpha(false, rct->xmin + 1, rct->ymin + 1, rct->xmax -1, rct->ymax - 1, hiddenrad, node->color, 1.0f);
glDisable(GL_LINE_SMOOTH);
glDisable(GL_BLEND);
}
/* title */
- if (node->flag & SELECT)
- UI_ThemeColor(TH_SELECT);
- else
- UI_ThemeColorBlendShade(TH_TEXT, color_id, 0.4f, 10);
+ if (node->flag & SELECT) {
+ UI_GetThemeColor4fv(TH_SELECT, color);
+ }
+ else {
+ UI_GetThemeColorBlendShade4fv(TH_SELECT, color_id, 0.4f, 10, color);
+ }
/* open entirely icon */
{
@@ -1072,18 +1076,13 @@ static void node_draw_hidden(const bContext *C, ARegion *ar, SpaceNode *snode, b
UI_block_emboss_set(node->block, UI_EMBOSS);
/* custom draw function for this button */
- UI_draw_icon_tri(rct->xmin + 10.0f, centy, 'h');
+ UI_draw_icon_tri(rct->xmin + 10.0f, centy, 'h', color);
}
/* disable lines */
if (node->flag & NODE_MUTED)
node_draw_mute_line(&ar->v2d, snode, node);
-
- if (node->flag & SELECT)
- UI_ThemeColor(TH_SELECT);
- else
- UI_ThemeColor(TH_TEXT);
-
+
if (node->miniwidth > 0.0f) {
nodeLabel(ntree, node, showname, sizeof(showname));
@@ -1097,29 +1096,35 @@ static void node_draw_hidden(const bContext *C, ARegion *ar, SpaceNode *snode, b
}
/* scale widget thing */
- UI_ThemeColorShade(color_id, -10);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ immUniformThemeColorShade(color_id, -10);
dx = 10.0f;
- fdrawline(rct->xmax - dx, centy - 4.0f, rct->xmax - dx, centy + 4.0f);
- fdrawline(rct->xmax - dx - 3.0f * snode->aspect, centy - 4.0f, rct->xmax - dx - 3.0f * snode->aspect, centy + 4.0f);
-
- UI_ThemeColorShade(color_id, +30);
+
+ immBegin(GWN_PRIM_LINES, 4);
+ immVertex2f(pos, rct->xmax - dx, centy - 4.0f);
+ immVertex2f(pos, rct->xmax - dx, centy + 4.0f);
+
+ immVertex2f(pos, rct->xmax - dx - 3.0f * snode->aspect, centy - 4.0f);
+ immVertex2f(pos, rct->xmax - dx - 3.0f * snode->aspect, centy + 4.0f);
+ immEnd();
+
+ immUniformThemeColorShade(color_id, 30);
dx -= snode->aspect;
- fdrawline(rct->xmax - dx, centy - 4.0f, rct->xmax - dx, centy + 4.0f);
- fdrawline(rct->xmax - dx - 3.0f * snode->aspect, centy - 4.0f, rct->xmax - dx - 3.0f * snode->aspect, centy + 4.0f);
- /* sockets */
- for (sock = node->inputs.first; sock; sock = sock->next) {
- if (!nodeSocketIsHidden(sock)) {
- node_socket_draw(C, ntree, node, sock, socket_size, sock->flag & SELECT);
- }
- }
-
- for (sock = node->outputs.first; sock; sock = sock->next) {
- if (!nodeSocketIsHidden(sock)) {
- node_socket_draw(C, ntree, node, sock, socket_size, sock->flag & SELECT);
- }
- }
-
+ immBegin(GWN_PRIM_LINES, 4);
+ immVertex2f(pos, rct->xmax - dx, centy - 4.0f);
+ immVertex2f(pos, rct->xmax - dx, centy + 4.0f);
+
+ immVertex2f(pos, rct->xmax - dx - 3.0f * snode->aspect, centy - 4.0f);
+ immVertex2f(pos, rct->xmax - dx - 3.0f * snode->aspect, centy + 4.0f);
+ immEnd();
+
+ immUnbindProgram();
+
+ node_draw_sockets(v2d, C, ntree, node, true, false);
+
UI_block_end(C, node->block);
UI_block_draw(C, node->block);
node->block = NULL;
@@ -1260,7 +1265,7 @@ static void draw_tree_path(SpaceNode *snode)
ED_node_tree_path_get_fixedbuf(snode, info, sizeof(info));
- UI_ThemeColor(TH_TEXT_HI);
+ UI_FontThemeColor(BLF_default(), TH_TEXT_HI);
BLF_draw_default(1.5f * UI_UNIT_X, 1.5f * UI_UNIT_Y, 0.0f, info, sizeof(info));
}
@@ -1293,12 +1298,14 @@ static void draw_group_overlay(const bContext *C, ARegion *ar)
View2D *v2d = &ar->v2d;
rctf rect = v2d->cur;
uiBlock *block;
-
+ float color[4];
+
/* shade node groups to separate them visually */
- UI_ThemeColorShadeAlpha(TH_NODE_GROUP, 0, -70);
glEnable(GL_BLEND);
+
+ UI_GetThemeColorShadeAlpha4fv(TH_NODE_GROUP, 0, -70, color);
UI_draw_roundbox_corner_set(UI_CNR_NONE);
- UI_draw_roundbox_gl_mode(GL_POLYGON, rect.xmin, rect.ymin, rect.xmax, rect.ymax, 0);
+ UI_draw_roundbox_4fv(true, rect.xmin, rect.ymin, rect.xmax, rect.ymax, 0, color);
glDisable(GL_BLEND);
/* set the block bounds to clip mouse events from underlying nodes */
@@ -1330,7 +1337,6 @@ void drawnodespace(const bContext *C, ARegion *ar)
/* only set once */
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glEnable(GL_MAP1_VERTEX_3);
/* nodes */
snode_set_context(C);
@@ -1390,7 +1396,23 @@ void drawnodespace(const bContext *C, ARegion *ar)
/* backdrop */
draw_nodespace_back_pix(C, ar, snode, path->parent_key);
-
+
+ {
+ float original_proj[4][4];
+ gpuGetProjectionMatrix(original_proj);
+
+ gpuPushMatrix();
+ gpuLoadIdentity();
+
+ glaDefine2DArea(&ar->winrct);
+ wmOrtho2_pixelspace(ar->winx, ar->winy);
+
+ WM_manipulatormap_draw(ar->manipulator_map, C, WM_MANIPULATORMAP_DRAWSTEP_2D);
+
+ gpuPopMatrix();
+ gpuLoadProjectionMatrix(original_proj);
+ }
+
draw_nodetree(C, ar, ntree, path->parent_key);
}
diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c
index e38b48d4bb8..94c31a7ddb7 100644
--- a/source/blender/editors/space_node/node_edit.c
+++ b/source/blender/editors/space_node/node_edit.c
@@ -41,7 +41,6 @@
#include "BLI_blenlib.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_global.h"
#include "BKE_image.h"
#include "BKE_library.h"
@@ -50,6 +49,8 @@
#include "BKE_report.h"
#include "BKE_scene.h"
+#include "DEG_depsgraph.h"
+
#include "RE_engine.h"
#include "RE_pipeline.h"
@@ -123,7 +124,7 @@ static int compo_get_recalc_flags(const bContext *C)
int recalc_flags = 0;
for (win = wm->windows.first; win; win = win->next) {
- bScreen *sc = win->screen;
+ const bScreen *sc = WM_window_get_active_screen(win);
ScrArea *sa;
for (sa = sc->areabase.first; sa; sa = sa->next) {
@@ -328,11 +329,11 @@ void snode_dag_update(bContext *C, SpaceNode *snode)
if (snode->edittree != snode->nodetree) {
FOREACH_NODETREE(bmain, tntree, id) {
if (ntreeHasTree(tntree, snode->edittree))
- DAG_id_tag_update(id, 0);
+ DEG_id_tag_update(id, 0);
} FOREACH_NODETREE_END
}
- DAG_id_tag_update(snode->id, 0);
+ DEG_id_tag_update(snode->id, 0);
}
void snode_notify(bContext *C, SpaceNode *snode)
@@ -382,7 +383,7 @@ bool ED_node_is_texture(struct SpaceNode *snode)
/* called from shading buttons or header */
void ED_node_shader_default(const bContext *C, ID *id)
{
- Scene *scene = CTX_data_scene(C);
+ ViewRender *view_render = CTX_data_view_render(C);
bNode *in, *out;
bNodeSocket *fromsock, *tosock, *sock;
bNodeTree *ntree;
@@ -397,7 +398,11 @@ void ED_node_shader_default(const bContext *C, ID *id)
Material *ma = (Material *)id;
ma->nodetree = ntree;
- if (BKE_scene_use_new_shading_nodes(scene)) {
+ if (BKE_viewrender_uses_blender_eevee(view_render)) {
+ output_type = SH_NODE_OUTPUT_MATERIAL;
+ shader_type = SH_NODE_BSDF_PRINCIPLED;
+ }
+ else if (BKE_viewrender_use_new_shading_nodes(view_render)) {
output_type = SH_NODE_OUTPUT_MATERIAL;
shader_type = SH_NODE_BSDF_DIFFUSE;
}
@@ -455,7 +460,7 @@ void ED_node_shader_default(const bContext *C, ID *id)
nodeAddLink(ntree, in, fromsock, out, tosock);
/* default values */
- if (BKE_scene_use_new_shading_nodes(scene)) {
+ if (BKE_viewrender_use_new_shading_nodes(view_render)) {
PointerRNA sockptr;
sock = in->inputs.first;
RNA_pointer_create((ID *)ntree, &RNA_NodeSocket, sock, &sockptr);
@@ -695,12 +700,12 @@ void ED_node_set_active(Main *bmain, bNodeTree *ntree, bNode *node)
for (scene = bmain->scene.first; scene; scene = scene->id.next) {
if (scene->nodetree && scene->use_nodes && ntreeHasTree(scene->nodetree, ntree)) {
if (node->id == NULL || node->id == (ID *)scene) {
- int num_layers = BLI_listbase_count(&scene->r.layers);
- scene->r.actlay = node->custom1;
+ int num_layers = BLI_listbase_count(&scene->view_layers);
+ scene->active_view_layer = node->custom1;
/* Clamp the value, because it might have come from a different
* scene which could have more render layers than new one.
*/
- scene->r.actlay = min_ff(scene->r.actlay, num_layers - 1);
+ scene->active_view_layer = min_ff(scene->active_view_layer, num_layers - 1);
}
}
}
@@ -1271,7 +1276,7 @@ bool ED_node_select_check(ListBase *lb)
/* goes over all scenes, reads render layers */
-static int node_read_renderlayers_exec(bContext *C, wmOperator *UNUSED(op))
+static int node_read_viewlayers_exec(bContext *C, wmOperator *UNUSED(op))
{
Main *bmain = CTX_data_main(C);
SpaceNode *snode = CTX_wm_space_node(C);
@@ -1301,14 +1306,14 @@ static int node_read_renderlayers_exec(bContext *C, wmOperator *UNUSED(op))
return OPERATOR_FINISHED;
}
-void NODE_OT_read_renderlayers(wmOperatorType *ot)
+void NODE_OT_read_viewlayers(wmOperatorType *ot)
{
- ot->name = "Read Render Layers";
- ot->idname = "NODE_OT_read_renderlayers";
+ ot->name = "Read View Layers";
+ ot->idname = "NODE_OT_read_viewlayers";
ot->description = "Read all render layers of all used scenes";
- ot->exec = node_read_renderlayers_exec;
+ ot->exec = node_read_viewlayers_exec;
ot->poll = composite_node_active;
@@ -1361,13 +1366,13 @@ int node_render_changed_exec(bContext *C, wmOperator *UNUSED(op))
}
}
if (node) {
- SceneRenderLayer *srl = BLI_findlink(&sce->r.layers, node->custom1);
+ ViewLayer *view_layer = BLI_findlink(&sce->view_layers, node->custom1);
- if (srl) {
+ if (view_layer) {
PointerRNA op_ptr;
WM_operator_properties_create(&op_ptr, "RENDER_OT_render");
- RNA_string_set(&op_ptr, "layer", srl->name);
+ RNA_string_set(&op_ptr, "layer", view_layer->name);
RNA_string_set(&op_ptr, "scene", sce->id.name + 2);
/* to keep keypositions */
@@ -2348,7 +2353,7 @@ void NODE_OT_tree_socket_move(wmOperatorType *ot)
static int node_shader_script_update_poll(bContext *C)
{
Scene *scene = CTX_data_scene(C);
- RenderEngineType *type = RE_engines_find(scene->r.engine);
+ RenderEngineType *type = RE_engines_find(scene->view_render.engine_id);
SpaceNode *snode = CTX_wm_space_node(C);
bNode *node;
Text *text;
@@ -2418,7 +2423,7 @@ static int node_shader_script_update_exec(bContext *C, wmOperator *op)
bool found = false;
/* setup render engine */
- type = RE_engines_find(scene->r.engine);
+ type = RE_engines_find(scene->view_render.engine_id);
engine = RE_engine_create(type);
engine->reports = op->reports;
diff --git a/source/blender/editors/space_node/node_intern.h b/source/blender/editors/space_node/node_intern.h
index 352f9e51012..7138b63364a 100644
--- a/source/blender/editors/space_node/node_intern.h
+++ b/source/blender/editors/space_node/node_intern.h
@@ -67,13 +67,11 @@ void snode_group_offset(struct SpaceNode *snode, float *x, float *y); /* transfo
/* node_draw.c */
int node_get_colorid(struct bNode *node);
-void node_socket_draw(
- const struct bContext *C, struct bNodeTree *ntree, struct bNode *node,
- struct bNodeSocket *sock, float size, bool highlight);
int node_get_resize_cursor(int directions);
void node_draw_shadow(struct SpaceNode *snode, struct bNode *node, float radius, float alpha);
void node_draw_default(const struct bContext *C, struct ARegion *ar, struct SpaceNode *snode,
struct bNodeTree *ntree, struct bNode *node, bNodeInstanceKey key);
+void node_draw_sockets(struct View2D *v2d, const struct bContext *C, struct bNodeTree *ntree, struct bNode *node, bool draw_outputs, bool select_all);
void node_update_default(const struct bContext *C, struct bNodeTree *ntree, struct bNode *node);
int node_select_area_default(struct bNode *node, int x, int y);
int node_tweak_area_default(struct bNode *node, int x, int y);
@@ -199,7 +197,7 @@ void NODE_OT_options_toggle(struct wmOperatorType *ot);
void NODE_OT_node_copy_color(struct wmOperatorType *ot);
void NODE_OT_read_fullsamplelayers(struct wmOperatorType *ot);
-void NODE_OT_read_renderlayers(struct wmOperatorType *ot);
+void NODE_OT_read_viewlayers(struct wmOperatorType *ot);
void NODE_OT_render_changed(struct wmOperatorType *ot);
void NODE_OT_output_file_add_socket(struct wmOperatorType *ot);
@@ -221,6 +219,13 @@ void NODE_OT_shader_script_update(struct wmOperatorType *ot);
void NODE_OT_viewer_border(struct wmOperatorType *ot);
void NODE_OT_clear_viewer_border(struct wmOperatorType *ot);
+/* node_widgets.c */
+void NODE_WGT_backdrop_transform(struct wmManipulatorGroupType *wgt);
+void NODE_WGT_backdrop_crop(struct wmManipulatorGroupType *wgt);
+void NODE_WGT_backdrop_sun_beams(struct wmManipulatorGroupType *wgt);
+void NODE_WGT_backdrop_corner_pin(struct wmManipulatorGroupType *wgt);
+
+
extern const char *node_context_dir[];
// XXXXXX
diff --git a/source/blender/editors/space_node/node_manipulators.c b/source/blender/editors/space_node/node_manipulators.c
new file mode 100644
index 00000000000..73b0f44b043
--- /dev/null
+++ b/source/blender/editors/space_node/node_manipulators.c
@@ -0,0 +1,616 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/editors/space_node/node_manipulators.c
+ * \ingroup spnode
+ */
+
+#include <math.h>
+
+#include "BLI_utildefines.h"
+#include "BLI_math_matrix.h"
+#include "BLI_math_vector.h"
+#include "BLI_rect.h"
+
+#include "BKE_context.h"
+#include "BKE_image.h"
+
+#include "ED_screen.h"
+#include "ED_manipulator_library.h"
+
+#include "IMB_imbuf_types.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "RNA_access.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "node_intern.h"
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Local Utilities
+ * \{ */
+
+static void node_manipulator_calc_matrix_space(
+ const SpaceNode *snode, const ARegion *ar, float matrix_space[4][4])
+{
+ unit_m4(matrix_space);
+ mul_v3_fl(matrix_space[0], snode->zoom);
+ mul_v3_fl(matrix_space[1], snode->zoom);
+ matrix_space[3][0] = (ar->winx / 2) + snode->xof;
+ matrix_space[3][1] = (ar->winy / 2) + snode->yof;
+}
+
+static void node_manipulator_calc_matrix_space_with_image_dims(
+ const SpaceNode *snode, const ARegion *ar, const float image_dims[2], float matrix_space[4][4])
+{
+ unit_m4(matrix_space);
+ mul_v3_fl(matrix_space[0], snode->zoom * image_dims[0]);
+ mul_v3_fl(matrix_space[1], snode->zoom * image_dims[1]);
+ matrix_space[3][0] = ((ar->winx / 2) + snode->xof) - ((image_dims[0] / 2.0f) * snode->zoom);
+ matrix_space[3][1] = ((ar->winy / 2) + snode->yof) - ((image_dims[1] / 2.0f) * snode->zoom);
+}
+
+/** \} */
+
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Backdrop Manipulator
+ * \{ */
+
+static void manipulator_node_backdrop_prop_matrix_get(
+ const wmManipulator *UNUSED(mpr), wmManipulatorProperty *mpr_prop,
+ void *value_p)
+{
+ float (*matrix)[4] = value_p;
+ BLI_assert(mpr_prop->type->array_length == 16);
+ const SpaceNode *snode = mpr_prop->custom_func.user_data;
+ matrix[0][0] = snode->zoom;
+ matrix[1][1] = snode->zoom;
+ matrix[3][0] = snode->xof;
+ matrix[3][1] = snode->yof;
+}
+
+static void manipulator_node_backdrop_prop_matrix_set(
+ const wmManipulator *UNUSED(mpr), wmManipulatorProperty *mpr_prop,
+ const void *value_p)
+{
+ const float (*matrix)[4] = value_p;
+ BLI_assert(mpr_prop->type->array_length == 16);
+ SpaceNode *snode = mpr_prop->custom_func.user_data;
+ snode->zoom = matrix[0][0];
+ snode->zoom = matrix[1][1];
+ snode->xof = matrix[3][0];
+ snode->yof = matrix[3][1];
+}
+
+static bool WIDGETGROUP_node_transform_poll(const bContext *C, wmManipulatorGroupType *UNUSED(wgt))
+{
+ SpaceNode *snode = CTX_wm_space_node(C);
+
+ if ((snode->flag & SNODE_BACKDRAW) == 0) {
+ return false;
+ }
+
+ if (snode && snode->edittree && snode->edittree->type == NTREE_COMPOSIT) {
+ bNode *node = nodeGetActive(snode->edittree);
+
+ if (node && ELEM(node->type, CMP_NODE_VIEWER, CMP_NODE_SPLITVIEWER)) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+static void WIDGETGROUP_node_transform_setup(const bContext *UNUSED(C), wmManipulatorGroup *mgroup)
+{
+ wmManipulatorWrapper *wwrapper = MEM_mallocN(sizeof(wmManipulatorWrapper), __func__);
+
+ wwrapper->manipulator = WM_manipulator_new("MANIPULATOR_WT_cage_2d", mgroup, NULL);
+
+ RNA_enum_set(wwrapper->manipulator->ptr, "transform",
+ ED_MANIPULATOR_CAGE2D_XFORM_FLAG_TRANSLATE | ED_MANIPULATOR_CAGE2D_XFORM_FLAG_SCALE_UNIFORM);
+
+ mgroup->customdata = wwrapper;
+}
+
+static void WIDGETGROUP_node_transform_refresh(const bContext *C, wmManipulatorGroup *mgroup)
+{
+ wmManipulator *cage = ((wmManipulatorWrapper *)mgroup->customdata)->manipulator;
+ const ARegion *ar = CTX_wm_region(C);
+ /* center is always at the origin */
+ const float origin[3] = {ar->winx / 2, ar->winy / 2};
+
+ void *lock;
+ Image *ima = BKE_image_verify_viewer(IMA_TYPE_COMPOSITE, "Viewer Node");
+ ImBuf *ibuf = BKE_image_acquire_ibuf(ima, NULL, &lock);
+
+ if (ibuf) {
+ const float dims[2] = {
+ (ibuf->x > 0) ? ibuf->x : 64.0f,
+ (ibuf->y > 0) ? ibuf->y : 64.0f,
+ };
+
+ RNA_float_set_array(cage->ptr, "dimensions", dims);
+ WM_manipulator_set_matrix_location(cage, origin);
+ WM_manipulator_set_flag(cage, WM_MANIPULATOR_HIDDEN, false);
+
+ /* need to set property here for undo. TODO would prefer to do this in _init */
+ SpaceNode *snode = CTX_wm_space_node(C);
+#if 0
+ PointerRNA nodeptr;
+ RNA_pointer_create(snode->id, &RNA_SpaceNodeEditor, snode, &nodeptr);
+ WM_manipulator_target_property_def_rna(cage, "offset", &nodeptr, "backdrop_offset", -1);
+ WM_manipulator_target_property_def_rna(cage, "scale", &nodeptr, "backdrop_zoom", -1);
+#endif
+
+ WM_manipulator_target_property_def_func(
+ cage, "matrix",
+ &(const struct wmManipulatorPropertyFnParams) {
+ .value_get_fn = manipulator_node_backdrop_prop_matrix_get,
+ .value_set_fn = manipulator_node_backdrop_prop_matrix_set,
+ .range_get_fn = NULL,
+ .user_data = snode,
+ });
+ }
+ else {
+ WM_manipulator_set_flag(cage, WM_MANIPULATOR_HIDDEN, true);
+ }
+
+ BKE_image_release_ibuf(ima, ibuf, lock);
+}
+
+void NODE_WGT_backdrop_transform(wmManipulatorGroupType *wgt)
+{
+ wgt->name = "Backdrop Transform Widget";
+ wgt->idname = "NODE_WGT_backdrop_transform";
+
+ wgt->flag |= WM_MANIPULATORGROUPTYPE_PERSISTENT;
+
+ wgt->poll = WIDGETGROUP_node_transform_poll;
+ wgt->setup = WIDGETGROUP_node_transform_setup;
+ wgt->refresh = WIDGETGROUP_node_transform_refresh;
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+
+/** \name Crop Manipulator
+ * \{ */
+
+struct NodeCropWidgetGroup {
+ wmManipulator *border;
+
+ struct {
+ float dims[2];
+ } state;
+
+ struct {
+ PointerRNA ptr;
+ PropertyRNA *prop;
+ bContext *context;
+ } update_data;
+};
+
+static void manipulator_node_crop_update(struct NodeCropWidgetGroup *crop_group)
+{
+ RNA_property_update(crop_group->update_data.context, &crop_group->update_data.ptr, crop_group->update_data.prop);
+}
+
+static void two_xy_to_rect(const NodeTwoXYs *nxy, rctf *rect, const float dims[2], bool is_relative)
+{
+ if (is_relative) {
+ rect->xmin = nxy->fac_x1;
+ rect->xmax = nxy->fac_x2;
+ rect->ymin = nxy->fac_y1;
+ rect->ymax = nxy->fac_y2;
+ }
+ else {
+ rect->xmin = nxy->x1 / dims[0];
+ rect->xmax = nxy->x2 / dims[0];
+ rect->ymin = nxy->y1 / dims[1];
+ rect->ymax = nxy->y2 / dims[1];
+ }
+}
+
+static void two_xy_from_rect(NodeTwoXYs *nxy, const rctf *rect, const float dims[2], bool is_relative)
+{
+ if (is_relative) {
+ nxy->fac_x1 = rect->xmin;
+ nxy->fac_x2 = rect->xmax;
+ nxy->fac_y1 = rect->ymin;
+ nxy->fac_y2 = rect->ymax;
+ }
+ else {
+ nxy->x1 = rect->xmin * dims[0];
+ nxy->x2 = rect->xmax * dims[0];
+ nxy->y1 = rect->ymin * dims[1];
+ nxy->y2 = rect->ymax * dims[1];
+ }
+}
+
+/* scale callbacks */
+static void manipulator_node_crop_prop_matrix_get(
+ const wmManipulator *mpr, wmManipulatorProperty *mpr_prop,
+ void *value_p)
+{
+ float (*matrix)[4] = value_p;
+ BLI_assert(mpr_prop->type->array_length == 16);
+ struct NodeCropWidgetGroup *crop_group = mpr->parent_mgroup->customdata;
+ const float *dims = crop_group->state.dims;
+ const bNode *node = mpr_prop->custom_func.user_data;
+ const NodeTwoXYs *nxy = node->storage;
+ bool is_relative = (bool)node->custom2;
+ rctf rct;
+ two_xy_to_rect(nxy, &rct, dims, is_relative);
+ matrix[0][0] = BLI_rctf_size_x(&rct);
+ matrix[1][1] = BLI_rctf_size_y(&rct);
+ matrix[3][0] = (BLI_rctf_cent_x(&rct) - 0.5f) * dims[0];
+ matrix[3][1] = (BLI_rctf_cent_y(&rct) - 0.5f) * dims[1];
+}
+
+static void manipulator_node_crop_prop_matrix_set(
+ const wmManipulator *mpr, wmManipulatorProperty *mpr_prop,
+ const void *value_p)
+{
+ const float (*matrix)[4] = value_p;
+ BLI_assert(mpr_prop->type->array_length == 16);
+ struct NodeCropWidgetGroup *crop_group = mpr->parent_mgroup->customdata;
+ const float *dims = crop_group->state.dims;
+ bNode *node = mpr_prop->custom_func.user_data;
+ NodeTwoXYs *nxy = node->storage;
+ bool is_relative = (bool)node->custom2;
+ rctf rct;
+ two_xy_to_rect(nxy, &rct, dims, is_relative);
+ BLI_rctf_resize(&rct, matrix[0][0], matrix[1][1]);
+ BLI_rctf_recenter(&rct, (matrix[3][0] / dims[0]) + 0.5f, (matrix[3][1] / dims[1]) + 0.5f);
+ BLI_rctf_isect(&(rctf){.xmin = 0, .ymin = 0, .xmax = 1, .ymax = 1}, &rct, &rct);
+ two_xy_from_rect(nxy, &rct, dims, is_relative);
+ manipulator_node_crop_update(crop_group);
+}
+
+static bool WIDGETGROUP_node_crop_poll(const bContext *C, wmManipulatorGroupType *UNUSED(wgt))
+{
+ SpaceNode *snode = CTX_wm_space_node(C);
+
+ if ((snode->flag & SNODE_BACKDRAW) == 0) {
+ return false;
+ }
+
+ if (snode && snode->edittree && snode->edittree->type == NTREE_COMPOSIT) {
+ bNode *node = nodeGetActive(snode->edittree);
+
+ if (node && ELEM(node->type, CMP_NODE_CROP)) {
+ /* ignore 'use_crop_size', we can't usefully edit the crop in this case. */
+ if ((node->custom1 & (0 << 1)) == 0) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+static void WIDGETGROUP_node_crop_setup(const bContext *UNUSED(C), wmManipulatorGroup *mgroup)
+{
+ struct NodeCropWidgetGroup *crop_group = MEM_mallocN(sizeof(struct NodeCropWidgetGroup), __func__);
+
+ crop_group->border = WM_manipulator_new("MANIPULATOR_WT_cage_2d", mgroup, NULL);
+
+ RNA_enum_set(crop_group->border->ptr, "transform",
+ ED_MANIPULATOR_CAGE2D_XFORM_FLAG_TRANSLATE | ED_MANIPULATOR_CAGE2D_XFORM_FLAG_SCALE);
+
+ mgroup->customdata = crop_group;
+}
+
+static void WIDGETGROUP_node_crop_draw_prepare(const bContext *C, wmManipulatorGroup *mgroup)
+{
+ ARegion *ar = CTX_wm_region(C);
+ wmManipulator *mpr = mgroup->manipulators.first;
+
+ SpaceNode *snode = CTX_wm_space_node(C);
+
+ node_manipulator_calc_matrix_space(snode, ar, mpr->matrix_space);
+}
+
+static void WIDGETGROUP_node_crop_refresh(const bContext *C, wmManipulatorGroup *mgroup)
+{
+ struct NodeCropWidgetGroup *crop_group = mgroup->customdata;
+ wmManipulator *mpr = crop_group->border;
+
+ void *lock;
+ Image *ima = BKE_image_verify_viewer(IMA_TYPE_COMPOSITE, "Viewer Node");
+ ImBuf *ibuf = BKE_image_acquire_ibuf(ima, NULL, &lock);
+
+ if (ibuf) {
+ crop_group->state.dims[0] = (ibuf->x > 0) ? ibuf->x : 64.0f;
+ crop_group->state.dims[1] = (ibuf->y > 0) ? ibuf->y : 64.0f;
+
+ RNA_float_set_array(mpr->ptr, "dimensions", crop_group->state.dims);
+ WM_manipulator_set_flag(mpr, WM_MANIPULATOR_HIDDEN, false);
+
+ SpaceNode *snode = CTX_wm_space_node(C);
+ bNode *node = nodeGetActive(snode->edittree);
+
+ crop_group->update_data.context = (bContext *)C;
+ RNA_pointer_create((ID *)snode->edittree, &RNA_CompositorNodeCrop, node, &crop_group->update_data.ptr);
+ crop_group->update_data.prop = RNA_struct_find_property(&crop_group->update_data.ptr, "relative");
+
+ WM_manipulator_target_property_def_func(
+ mpr, "matrix",
+ &(const struct wmManipulatorPropertyFnParams) {
+ .value_get_fn = manipulator_node_crop_prop_matrix_get,
+ .value_set_fn = manipulator_node_crop_prop_matrix_set,
+ .range_get_fn = NULL,
+ .user_data = node,
+ });
+ }
+ else {
+ WM_manipulator_set_flag(mpr, WM_MANIPULATOR_HIDDEN, true);
+ }
+
+ BKE_image_release_ibuf(ima, ibuf, lock);
+}
+
+void NODE_WGT_backdrop_crop(wmManipulatorGroupType *wgt)
+{
+ wgt->name = "Backdrop Crop Widget";
+ wgt->idname = "NODE_WGT_backdrop_crop";
+
+ wgt->flag |= WM_MANIPULATORGROUPTYPE_PERSISTENT;
+
+ wgt->poll = WIDGETGROUP_node_crop_poll;
+ wgt->setup = WIDGETGROUP_node_crop_setup;
+ wgt->draw_prepare = WIDGETGROUP_node_crop_draw_prepare;
+ wgt->refresh = WIDGETGROUP_node_crop_refresh;
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+
+/** \name Sun Beams
+ * \{ */
+
+struct NodeSunBeamsWidgetGroup {
+ wmManipulator *manipulator;
+
+ struct {
+ float dims[2];
+ } state;
+};
+
+static bool WIDGETGROUP_node_sbeam_poll(const bContext *C, wmManipulatorGroupType *UNUSED(wgt))
+{
+ SpaceNode *snode = CTX_wm_space_node(C);
+
+ if ((snode->flag & SNODE_BACKDRAW) == 0) {
+ return false;
+ }
+
+ if (snode && snode->edittree && snode->edittree->type == NTREE_COMPOSIT) {
+ bNode *node = nodeGetActive(snode->edittree);
+
+ if (node && ELEM(node->type, CMP_NODE_SUNBEAMS)) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+static void WIDGETGROUP_node_sbeam_setup(const bContext *UNUSED(C), wmManipulatorGroup *mgroup)
+{
+ struct NodeSunBeamsWidgetGroup *sbeam_group = MEM_mallocN(sizeof(struct NodeSunBeamsWidgetGroup), __func__);
+
+ sbeam_group->manipulator = WM_manipulator_new("MANIPULATOR_WT_grab_3d", mgroup, NULL);
+ wmManipulator *mpr = sbeam_group->manipulator;
+
+ RNA_enum_set(mpr->ptr, "draw_style", ED_MANIPULATOR_GRAB_STYLE_CROSS_2D);
+
+ mpr->scale_basis = 0.05f;
+
+ mgroup->customdata = sbeam_group;
+}
+
+static void WIDGETGROUP_node_sbeam_draw_prepare(const bContext *C, wmManipulatorGroup *mgroup)
+{
+ struct NodeSunBeamsWidgetGroup *sbeam_group = mgroup->customdata;
+ ARegion *ar = CTX_wm_region(C);
+ wmManipulator *mpr = mgroup->manipulators.first;
+
+ SpaceNode *snode = CTX_wm_space_node(C);
+
+ node_manipulator_calc_matrix_space_with_image_dims(snode, ar, sbeam_group->state.dims, mpr->matrix_space);
+}
+
+static void WIDGETGROUP_node_sbeam_refresh(const bContext *C, wmManipulatorGroup *mgroup)
+{
+ struct NodeSunBeamsWidgetGroup *sbeam_group = mgroup->customdata;
+ wmManipulator *mpr = sbeam_group->manipulator;
+
+ void *lock;
+ Image *ima = BKE_image_verify_viewer(IMA_TYPE_COMPOSITE, "Viewer Node");
+ ImBuf *ibuf = BKE_image_acquire_ibuf(ima, NULL, &lock);
+
+ if (ibuf) {
+ sbeam_group->state.dims[0] = (ibuf->x > 0) ? ibuf->x : 64.0f;
+ sbeam_group->state.dims[1] = (ibuf->y > 0) ? ibuf->y : 64.0f;
+
+ SpaceNode *snode = CTX_wm_space_node(C);
+ bNode *node = nodeGetActive(snode->edittree);
+
+ /* need to set property here for undo. TODO would prefer to do this in _init */
+ PointerRNA nodeptr;
+ RNA_pointer_create((ID *)snode->edittree, &RNA_CompositorNodeSunBeams, node, &nodeptr);
+ WM_manipulator_target_property_def_rna(mpr, "offset", &nodeptr, "source", -1);
+
+ WM_manipulator_set_flag(mpr, WM_MANIPULATOR_DRAW_MODAL, true);
+ }
+ else {
+ WM_manipulator_set_flag(mpr, WM_MANIPULATOR_HIDDEN, true);
+ }
+
+ BKE_image_release_ibuf(ima, ibuf, lock);
+}
+
+void NODE_WGT_backdrop_sun_beams(wmManipulatorGroupType *wgt)
+{
+ wgt->name = "Sun Beams Widget";
+ wgt->idname = "NODE_WGT_sbeam";
+
+ wgt->flag |= WM_MANIPULATORGROUPTYPE_PERSISTENT;
+
+ wgt->poll = WIDGETGROUP_node_sbeam_poll;
+ wgt->setup = WIDGETGROUP_node_sbeam_setup;
+ wgt->draw_prepare = WIDGETGROUP_node_sbeam_draw_prepare;
+ wgt->refresh = WIDGETGROUP_node_sbeam_refresh;
+}
+
+/** \} */
+
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Corner Pin
+ * \{ */
+
+struct NodeCornerPinWidgetGroup {
+ wmManipulator *manipulators[4];
+
+ struct {
+ float dims[2];
+ } state;
+};
+
+static bool WIDGETGROUP_node_corner_pin_poll(const bContext *C, wmManipulatorGroupType *UNUSED(wgt))
+{
+ SpaceNode *snode = CTX_wm_space_node(C);
+
+ if ((snode->flag & SNODE_BACKDRAW) == 0) {
+ return false;
+ }
+
+ if (snode && snode->edittree && snode->edittree->type == NTREE_COMPOSIT) {
+ bNode *node = nodeGetActive(snode->edittree);
+
+ if (node && ELEM(node->type, CMP_NODE_CORNERPIN)) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+static void WIDGETGROUP_node_corner_pin_setup(const bContext *UNUSED(C), wmManipulatorGroup *mgroup)
+{
+ struct NodeCornerPinWidgetGroup *cpin_group = MEM_mallocN(sizeof(struct NodeCornerPinWidgetGroup), __func__);
+ const wmManipulatorType *wt_grab_3d = WM_manipulatortype_find("MANIPULATOR_WT_grab_3d", false);
+
+ for (int i = 0; i < 4; i++) {
+ cpin_group->manipulators[i] = WM_manipulator_new_ptr(wt_grab_3d, mgroup, NULL);
+ wmManipulator *mpr = cpin_group->manipulators[i];
+
+ RNA_enum_set(mpr->ptr, "draw_style", ED_MANIPULATOR_GRAB_STYLE_CROSS_2D);
+
+ mpr->scale_basis = 0.01f;
+ }
+
+ mgroup->customdata = cpin_group;
+}
+
+static void WIDGETGROUP_node_corner_pin_draw_prepare(const bContext *C, wmManipulatorGroup *mgroup)
+{
+ struct NodeCornerPinWidgetGroup *cpin_group = mgroup->customdata;
+ ARegion *ar = CTX_wm_region(C);
+
+ SpaceNode *snode = CTX_wm_space_node(C);
+
+ float matrix_space[4][4];
+ node_manipulator_calc_matrix_space_with_image_dims(snode, ar, cpin_group->state.dims, matrix_space);
+
+ for (int i = 0; i < 4; i++) {
+ wmManipulator *mpr = cpin_group->manipulators[i];
+ copy_m4_m4(mpr->matrix_space, matrix_space);
+ }
+}
+
+static void WIDGETGROUP_node_corner_pin_refresh(const bContext *C, wmManipulatorGroup *mgroup)
+{
+ struct NodeCornerPinWidgetGroup *cpin_group = mgroup->customdata;
+
+ void *lock;
+ Image *ima = BKE_image_verify_viewer(IMA_TYPE_COMPOSITE, "Viewer Node");
+ ImBuf *ibuf = BKE_image_acquire_ibuf(ima, NULL, &lock);
+
+ if (ibuf) {
+ cpin_group->state.dims[0] = (ibuf->x > 0) ? ibuf->x : 64.0f;
+ cpin_group->state.dims[1] = (ibuf->y > 0) ? ibuf->y : 64.0f;
+
+ SpaceNode *snode = CTX_wm_space_node(C);
+ bNode *node = nodeGetActive(snode->edittree);
+
+ /* need to set property here for undo. TODO would prefer to do this in _init */
+ int i = 0;
+ for (bNodeSocket *sock = node->inputs.first; sock && i < 4; sock = sock->next) {
+ if (sock->type == SOCK_VECTOR) {
+ wmManipulator *mpr = cpin_group->manipulators[i++];
+
+ PointerRNA sockptr;
+ RNA_pointer_create((ID *)snode->edittree, &RNA_NodeSocket, sock, &sockptr);
+ WM_manipulator_target_property_def_rna(mpr, "offset", &sockptr, "default_value", -1);
+
+ WM_manipulator_set_flag(mpr, WM_MANIPULATOR_DRAW_MODAL, true);
+ }
+ }
+ }
+ else {
+ for (int i = 0; i < 4; i++) {
+ wmManipulator *mpr = cpin_group->manipulators[i];
+ WM_manipulator_set_flag(mpr, WM_MANIPULATOR_HIDDEN, true);
+ }
+ }
+
+ BKE_image_release_ibuf(ima, ibuf, lock);
+}
+
+void NODE_WGT_backdrop_corner_pin(wmManipulatorGroupType *wgt)
+{
+ wgt->name = "Corner Pin Widget";
+ wgt->idname = "NODE_WGT_backdrop_corner_pin";
+
+ wgt->flag |= WM_MANIPULATORGROUPTYPE_PERSISTENT;
+
+ wgt->poll = WIDGETGROUP_node_corner_pin_poll;
+ wgt->setup = WIDGETGROUP_node_corner_pin_setup;
+ wgt->draw_prepare = WIDGETGROUP_node_corner_pin_draw_prepare;
+ wgt->refresh = WIDGETGROUP_node_corner_pin_refresh;
+}
+
+/** \} */
diff --git a/source/blender/editors/space_node/node_ops.c b/source/blender/editors/space_node/node_ops.c
index 5118d52efc4..1859785173c 100644
--- a/source/blender/editors/space_node/node_ops.c
+++ b/source/blender/editors/space_node/node_ops.c
@@ -94,7 +94,7 @@ void node_operatortypes(void)
WM_operatortype_append(NODE_OT_insert_offset);
- WM_operatortype_append(NODE_OT_read_renderlayers);
+ WM_operatortype_append(NODE_OT_read_viewlayers);
WM_operatortype_append(NODE_OT_read_fullsamplelayers);
WM_operatortype_append(NODE_OT_render_changed);
@@ -335,7 +335,7 @@ void node_keymap(struct wmKeyConfig *keyconf)
kmi = WM_keymap_add_item(keymap, "NODE_OT_group_edit", TABKEY, KM_PRESS, KM_CTRL, 0);
RNA_boolean_set(kmi->ptr, "exit", true);
- WM_keymap_add_item(keymap, "NODE_OT_read_renderlayers", RKEY, KM_PRESS, KM_CTRL, 0);
+ WM_keymap_add_item(keymap, "NODE_OT_read_viewlayers", RKEY, KM_PRESS, KM_CTRL, 0);
WM_keymap_add_item(keymap, "NODE_OT_read_fullsamplelayers", RKEY, KM_PRESS, KM_SHIFT, 0);
WM_keymap_add_item(keymap, "NODE_OT_render_changed", ZKEY, KM_PRESS, 0, 0);
diff --git a/source/blender/editors/space_node/node_templates.c b/source/blender/editors/space_node/node_templates.c
index 5d0877a1eff..c791b9f6eae 100644
--- a/source/blender/editors/space_node/node_templates.c
+++ b/source/blender/editors/space_node/node_templates.c
@@ -559,6 +559,7 @@ static void ui_template_node_link_menu(bContext *C, uiLayout *layout, void *but_
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
+ ViewRender *view_render = CTX_data_view_render(C);
uiBlock *block = uiLayoutGetBlock(layout);
uiBut *but = (uiBut *)but_p;
uiLayout *split, *column;
@@ -575,7 +576,7 @@ static void ui_template_node_link_menu(bContext *C, uiLayout *layout, void *but_
arg->layout = split;
if (ntreetype && ntreetype->foreach_nodeclass)
- ntreetype->foreach_nodeclass(scene, arg, node_menu_column_foreach_cb);
+ ntreetype->foreach_nodeclass(view_render, arg, node_menu_column_foreach_cb);
column = uiLayoutColumn(split, false);
UI_block_layout_set_current(block, column);
diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c
index 2267316d257..e1765e39f7a 100644
--- a/source/blender/editors/space_node/space_node.c
+++ b/source/blender/editors/space_node/space_node.c
@@ -49,14 +49,15 @@
#include "ED_node.h"
#include "ED_render.h"
#include "ED_screen.h"
-#include "WM_api.h"
-#include "WM_types.h"
#include "UI_resources.h"
#include "UI_view2d.h"
#include "RNA_access.h"
+#include "WM_api.h"
+#include "WM_types.h"
+
#include "node_intern.h" /* own include */
@@ -381,12 +382,14 @@ static void node_init(struct wmWindowManager *UNUSED(wm), ScrArea *UNUSED(sa))
}
-static void node_area_listener(bScreen *sc, ScrArea *sa, wmNotifier *wmn)
+static void node_area_listener(bScreen *UNUSED(sc), ScrArea *sa, wmNotifier *wmn, Scene *scene,
+ WorkSpace *workspace)
{
/* note, ED_area_tag_refresh will re-execute compositor */
SpaceNode *snode = sa->spacedata.first;
+ ViewRender *view_render = BKE_viewrender_get(scene, workspace);
/* shaderfrom is only used for new shading nodes, otherwise all shaders are from objects */
- short shader_type = BKE_scene_use_new_shading_nodes(sc->scene) ? snode->shaderfrom : SNODE_SHADER_OBJECT;
+ short shader_type = BKE_viewrender_use_new_shading_nodes(view_render) ? snode->shaderfrom : SNODE_SHADER_OBJECT;
/* preview renders */
switch (wmn->category) {
@@ -643,6 +646,14 @@ static void node_main_region_init(wmWindowManager *wm, ARegion *ar)
UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_CUSTOM, ar->winx, ar->winy);
+ /* manipulators stay in the background for now - quick patchjob to make sure nodes themselves work */
+ if (ar->manipulator_map == NULL) {
+ ar->manipulator_map = WM_manipulatormap_new_from_type(
+ &(const struct wmManipulatorMapType_Params){SPACE_NODE, RGN_TYPE_WINDOW});
+ }
+
+ WM_manipulatormap_add_handlers(ar, ar->manipulator_map);
+
/* own keymaps */
keymap = WM_keymap_find(wm->defaultconf, "Node Generic", SPACE_NODE, 0);
WM_event_add_keymap_handler(&ar->handlers, keymap);
@@ -737,18 +748,32 @@ static void node_header_region_draw(const bContext *C, ARegion *ar)
}
/* used for header + main region */
-static void node_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+static void node_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar,
+ wmNotifier *wmn, const Scene *UNUSED(scene))
{
+ wmManipulatorMap *mmap = ar->manipulator_map;
+
/* context changes */
switch (wmn->category) {
case NC_SPACE:
- if (wmn->data == ND_SPACE_NODE)
- ED_region_tag_redraw(ar);
+ switch (wmn->data) {
+ case ND_SPACE_NODE:
+ ED_region_tag_redraw(ar);
+ break;
+ case ND_SPACE_NODE_VIEW:
+ WM_manipulatormap_tag_refresh(mmap);
+ break;
+ }
break;
case NC_SCREEN:
+ if (wmn->data == ND_LAYOUTSET || wmn->action == NA_EDITED) {
+ WM_manipulatormap_tag_refresh(mmap);
+ }
switch (wmn->data) {
case ND_SCREENCAST:
case ND_ANIMPLAY:
+ case ND_LAYER:
ED_region_tag_redraw(ar);
break;
}
@@ -758,10 +783,20 @@ static void node_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegi
ED_region_tag_redraw(ar);
break;
case NC_SCENE:
+ ED_region_tag_redraw(ar);
+ if (wmn->data == ND_RENDER_RESULT) {
+ WM_manipulatormap_tag_refresh(mmap);
+ }
+ break;
+ case NC_NODE:
+ ED_region_tag_redraw(ar);
+ if (ELEM(wmn->action, NA_EDITED, NA_SELECTED)) {
+ WM_manipulatormap_tag_refresh(mmap);
+ }
+ break;
case NC_MATERIAL:
case NC_TEXTURE:
case NC_WORLD:
- case NC_NODE:
case NC_LINESTYLE:
ED_region_tag_redraw(ar);
break;
@@ -826,6 +861,17 @@ static int node_context(const bContext *C, const char *member, bContextDataResul
return 0;
}
+static void node_widgets(void)
+{
+ /* create the widgetmap for the area here */
+ wmManipulatorMapType *mmap_type = WM_manipulatormaptype_ensure(
+ &(const struct wmManipulatorMapType_Params){SPACE_NODE, RGN_TYPE_WINDOW});
+ WM_manipulatorgrouptype_append_and_link(mmap_type, NODE_WGT_backdrop_transform);
+ WM_manipulatorgrouptype_append_and_link(mmap_type, NODE_WGT_backdrop_crop);
+ WM_manipulatorgrouptype_append_and_link(mmap_type, NODE_WGT_backdrop_sun_beams);
+ WM_manipulatorgrouptype_append_and_link(mmap_type, NODE_WGT_backdrop_corner_pin);
+}
+
static void node_id_remap(ScrArea *UNUSED(sa), SpaceLink *slink, ID *old_id, ID *new_id)
{
SpaceNode *snode = (SpaceNode *)slink;
@@ -916,6 +962,7 @@ void ED_spacetype_node(void)
st->refresh = node_area_refresh;
st->context = node_context;
st->dropboxes = node_dropboxes;
+ st->manipulators = node_widgets;
st->id_remap = node_id_remap;
/* regions: main window */
diff --git a/source/blender/editors/space_outliner/CMakeLists.txt b/source/blender/editors/space_outliner/CMakeLists.txt
index 289d6e715e1..96d27c6fd89 100644
--- a/source/blender/editors/space_outliner/CMakeLists.txt
+++ b/source/blender/editors/space_outliner/CMakeLists.txt
@@ -23,6 +23,7 @@ set(INC
../../blenkernel
../../blenlib
../../blentranslation
+ ../../depsgraph
../../imbuf
../../gpu
../../makesdna
@@ -37,12 +38,14 @@ set(INC_SYS
)
set(SRC
+ outliner_collections.c
outliner_draw.c
outliner_edit.c
outliner_ops.c
outliner_select.c
outliner_tools.c
outliner_tree.c
+ outliner_utils.c
space_outliner.c
outliner_intern.h
diff --git a/source/blender/editors/space_outliner/outliner_collections.c b/source/blender/editors/space_outliner/outliner_collections.c
new file mode 100644
index 00000000000..3d5f12a94fd
--- /dev/null
+++ b/source/blender/editors/space_outliner/outliner_collections.c
@@ -0,0 +1,1054 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Foundation, Dalai Felinto
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/editors/space_outliner/outliner_collections.c
+ * \ingroup spoutliner
+ */
+
+#include "BLI_utildefines.h"
+#include "BLI_listbase.h"
+
+#include "BKE_context.h"
+#include "BKE_collection.h"
+#include "BKE_layer.h"
+#include "BKE_main.h"
+#include "BKE_report.h"
+
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
+#include "DNA_group_types.h"
+#include "DNA_object_types.h"
+
+#include "ED_screen.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "RNA_access.h"
+#include "RNA_define.h"
+#include "RNA_enum_types.h"
+
+#include "UI_resources.h"
+
+#include "outliner_intern.h" /* own include */
+
+/* Prototypes. */
+static int collection_delete_exec(struct bContext *C, struct wmOperator *op);
+
+/* -------------------------------------------------------------------- */
+
+static LayerCollection *outliner_collection_active(bContext *C)
+{
+ return CTX_data_layer_collection(C);
+}
+
+SceneCollection *outliner_scene_collection_from_tree_element(TreeElement *te)
+{
+ TreeStoreElem *tselem = TREESTORE(te);
+
+ if (tselem->type == TSE_SCENE_COLLECTION) {
+ return te->directdata;
+ }
+ else if (tselem->type == TSE_LAYER_COLLECTION) {
+ LayerCollection *lc = te->directdata;
+ return lc->scene_collection;
+ }
+
+ return NULL;
+}
+
+/* -------------------------------------------------------------------- */
+/* Poll functions. */
+
+static int collections_editor_poll(bContext *C)
+{
+ SpaceOops *so = CTX_wm_space_outliner(C);
+ return (so != NULL) && (so->outlinevis == SO_COLLECTIONS);
+}
+
+static int view_layer_editor_poll(bContext *C)
+{
+ SpaceOops *so = CTX_wm_space_outliner(C);
+ return (so != NULL) && (so->outlinevis == SO_VIEW_LAYER);
+}
+
+static int outliner_either_collection_editor_poll(bContext *C)
+{
+ SpaceOops *so = CTX_wm_space_outliner(C);
+ return (so != NULL) && (ELEM(so->outlinevis, SO_VIEW_LAYER, SO_COLLECTIONS));
+}
+
+static int outliner_objects_collection_poll(bContext *C)
+{
+ SpaceOops *so = CTX_wm_space_outliner(C);
+ if (so == NULL) {
+ return 0;
+ }
+
+ /* Groups don't support filtering. */
+ if ((so->outlinevis != SO_GROUPS) &&
+ ((so->filter & (SO_FILTER_ENABLE | SO_FILTER_NO_COLLECTION)) ==
+ (SO_FILTER_ENABLE | SO_FILTER_NO_COLLECTION)))
+ {
+ return 0;
+ }
+
+ return ELEM(so->outlinevis, SO_VIEW_LAYER, SO_COLLECTIONS, SO_GROUPS);
+}
+
+/* -------------------------------------------------------------------- */
+/* collection manager operators */
+
+/**
+ * Recursively get the collection for a given index
+ */
+static SceneCollection *scene_collection_from_index(ListBase *lb, const int number, int *i)
+{
+ for (SceneCollection *sc = lb->first; sc; sc = sc->next) {
+ if (*i == number) {
+ return sc;
+ }
+
+ (*i)++;
+
+ SceneCollection *sc_nested = scene_collection_from_index(&sc->scene_collections, number, i);
+ if (sc_nested) {
+ return sc_nested;
+ }
+ }
+ return NULL;
+}
+
+typedef struct TreeElementFindData {
+ SceneCollection *collection;
+ TreeElement *r_result_te;
+} TreeElementFindData;
+
+static TreeTraversalAction tree_element_find_by_scene_collection_cb(TreeElement *te, void *customdata)
+{
+ TreeElementFindData *data = customdata;
+ const SceneCollection *current_element_sc = outliner_scene_collection_from_tree_element(te);
+
+ if (current_element_sc == data->collection) {
+ data->r_result_te = te;
+ return TRAVERSE_BREAK;
+ }
+
+ return TRAVERSE_CONTINUE;
+}
+
+static TreeElement *outliner_tree_element_from_layer_collection_index(
+ SpaceOops *soops, ViewLayer *view_layer,
+ const int index)
+{
+ LayerCollection *lc = BKE_layer_collection_from_index(view_layer, index);
+
+ if (lc == NULL) {
+ return NULL;
+ }
+
+ /* Find the tree element containing the LayerCollection's scene_collection. */
+ TreeElementFindData data = {
+ .collection = lc->scene_collection,
+ .r_result_te = NULL,
+ };
+ outliner_tree_traverse(soops, &soops->tree, 0, 0, tree_element_find_by_scene_collection_cb, &data);
+
+ return data.r_result_te;
+}
+
+static int collection_link_exec(bContext *C, wmOperator *op)
+{
+ Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ SceneCollection *sc_master = BKE_collection_master(&scene->id);
+ SceneCollection *sc;
+
+ int scene_collection_index = RNA_enum_get(op->ptr, "scene_collection");
+ if (scene_collection_index == 0) {
+ sc = sc_master;
+ }
+ else {
+ int index = 1;
+ sc = scene_collection_from_index(&sc_master->scene_collections, scene_collection_index, &index);
+ BLI_assert(sc);
+ }
+
+ BKE_collection_link(view_layer, sc);
+
+ DEG_relations_tag_update(CTX_data_main(C));
+
+ /* TODO(sergey): Use proper flag for tagging here. */
+ DEG_id_tag_update(&scene->id, 0);
+
+ WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
+ return OPERATOR_FINISHED;
+}
+
+static int collection_link_invoke(bContext *C, wmOperator *op, const wmEvent *event)
+{
+ Scene *scene = CTX_data_scene(C);
+ SceneCollection *master_collection = BKE_collection_master(&scene->id);
+ if (master_collection->scene_collections.first == NULL) {
+ RNA_enum_set(op->ptr, "scene_collection", 0);
+ return collection_link_exec(C, op);
+ }
+ else {
+ return WM_enum_search_invoke(C, op, event);
+ }
+}
+
+static void collection_scene_collection_itemf_recursive(
+ EnumPropertyItem *tmp, EnumPropertyItem **item, int *totitem, int *value, SceneCollection *sc)
+{
+ tmp->value = *value;
+ tmp->icon = ICON_COLLAPSEMENU;
+ tmp->identifier = sc->name;
+ tmp->name = sc->name;
+ RNA_enum_item_add(item, totitem, tmp);
+
+ (*value)++;
+
+ for (SceneCollection *ncs = sc->scene_collections.first; ncs; ncs = ncs->next) {
+ collection_scene_collection_itemf_recursive(tmp, item, totitem, value, ncs);
+ }
+}
+
+static const EnumPropertyItem *collection_scene_collection_itemf(
+ bContext *C, PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop), bool *r_free)
+{
+ EnumPropertyItem tmp = {0, "", 0, "", ""};
+ EnumPropertyItem *item = NULL;
+ int value = 0, totitem = 0;
+
+ Scene *scene = CTX_data_scene(C);
+ SceneCollection *sc = BKE_collection_master(&scene->id);
+
+ collection_scene_collection_itemf_recursive(&tmp, &item, &totitem, &value, sc);
+ RNA_enum_item_end(&item, &totitem);
+ *r_free = true;
+
+ return item;
+}
+
+void OUTLINER_OT_collection_link(wmOperatorType *ot)
+{
+ PropertyRNA *prop;
+
+ /* identifiers */
+ ot->name = "Link Collection";
+ ot->idname = "OUTLINER_OT_collection_link";
+ ot->description = "Link a new collection to the active layer";
+
+ /* api callbacks */
+ ot->exec = collection_link_exec;
+ ot->invoke = collection_link_invoke;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+
+ prop = RNA_def_enum(ot->srna, "scene_collection", DummyRNA_NULL_items, 0, "Scene Collection", "");
+ RNA_def_enum_funcs(prop, collection_scene_collection_itemf);
+ RNA_def_property_flag(prop, PROP_ENUM_NO_TRANSLATE);
+ ot->prop = prop;
+}
+
+/**
+ * Returns true if selected element is a collection directly
+ * linked to the active ViewLayer (not a nested collection)
+ */
+static int collection_unlink_poll(bContext *C)
+{
+ if (view_layer_editor_poll(C) == 0) {
+ return 0;
+ }
+
+ LayerCollection *lc = outliner_collection_active(C);
+
+ if (lc == NULL) {
+ return 0;
+ }
+
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ return BLI_findindex(&view_layer->layer_collections, lc) != -1 ? 1 : 0;
+}
+
+static int collection_unlink_exec(bContext *C, wmOperator *op)
+{
+ LayerCollection *lc = outliner_collection_active(C);
+ SpaceOops *soops = CTX_wm_space_outliner(C);
+
+ if (lc == NULL) {
+ BKE_report(op->reports, RPT_ERROR, "Active element is not a collection");
+ return OPERATOR_CANCELLED;
+ }
+
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ BKE_collection_unlink(view_layer, lc);
+
+ if (soops) {
+ outliner_cleanup_tree(soops);
+ }
+
+ DEG_relations_tag_update(CTX_data_main(C));
+
+ /* TODO(sergey): Use proper flag for tagging here. */
+ DEG_id_tag_update(&CTX_data_scene(C)->id, 0);
+
+ WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
+ return OPERATOR_FINISHED;
+}
+
+void OUTLINER_OT_collection_unlink(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Unlink Collection";
+ ot->idname = "OUTLINER_OT_collection_unlink";
+ ot->description = "Unlink collection from the active layer";
+
+ /* api callbacks */
+ ot->exec = collection_unlink_exec;
+ ot->poll = collection_unlink_poll;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+}
+
+/**********************************************************************************/
+/* Add new collection. */
+
+static int collection_new_exec(bContext *C, wmOperator *UNUSED(op))
+{
+ Main *bmain = CTX_data_main(C);
+ Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ SceneCollection *scene_collection_parent = BKE_collection_master(&scene->id);
+ SceneCollection *scene_collection = BKE_collection_add(&scene->id, scene_collection_parent, COLLECTION_TYPE_NONE, NULL);
+ BKE_collection_link(view_layer, scene_collection);
+
+ DEG_relations_tag_update(bmain);
+ WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
+ return OPERATOR_FINISHED;
+}
+
+void OUTLINER_OT_collection_new(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "New Collection";
+ ot->idname = "OUTLINER_OT_collection_new";
+ ot->description = "Add a new collection to the scene";
+
+ /* api callbacks */
+ ot->exec = collection_new_exec;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+}
+
+/**********************************************************************************/
+/* Add new nested collection. */
+
+struct CollectionNewData
+{
+ bool error;
+ SceneCollection *scene_collection;
+};
+
+static TreeTraversalAction collection_find_selected_to_add(TreeElement *te, void *customdata)
+{
+ struct CollectionNewData *data = customdata;
+ SceneCollection *scene_collection = outliner_scene_collection_from_tree_element(te);
+
+ if (!scene_collection) {
+ return TRAVERSE_SKIP_CHILDS;
+ }
+
+ if (data->scene_collection != NULL) {
+ data->error = true;
+ return TRAVERSE_BREAK;
+ }
+
+ data->scene_collection = scene_collection;
+ return TRAVERSE_CONTINUE;
+}
+
+static int collection_nested_new_exec(bContext *C, wmOperator *op)
+{
+ SpaceOops *soops = CTX_wm_space_outliner(C);
+ Main *bmain = CTX_data_main(C);
+ Scene *scene = CTX_data_scene(C);
+
+ struct CollectionNewData data = {
+ .error = false,
+ .scene_collection = NULL,
+ };
+
+ outliner_tree_traverse(soops, &soops->tree, 0, TSE_SELECTED, collection_find_selected_to_add, &data);
+
+ if (data.error) {
+ BKE_report(op->reports, RPT_ERROR, "More than one collection is selected");
+ return OPERATOR_CANCELLED;
+ }
+
+ BKE_collection_add(
+ &scene->id,
+ data.scene_collection,
+ COLLECTION_TYPE_NONE,
+ NULL);
+
+ outliner_cleanup_tree(soops);
+ DEG_relations_tag_update(bmain);
+ WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
+ return OPERATOR_FINISHED;
+}
+
+void OUTLINER_OT_collection_nested_new(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "New Nested Collection";
+ ot->idname = "OUTLINER_OT_collection_nested_new";
+ ot->description = "Add a new collection inside selected collection";
+
+ /* api callbacks */
+ ot->exec = collection_nested_new_exec;
+ ot->poll = collections_editor_poll;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+}
+
+/**********************************************************************************/
+/* Delete selected collection. */
+
+void OUTLINER_OT_collection_delete_selected(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Delete Selected Collections";
+ ot->idname = "OUTLINER_OT_collection_delete_selected";
+ ot->description = "Delete all the selected collections";
+
+ /* api callbacks */
+ ot->exec = collection_delete_exec;
+ ot->poll = collections_editor_poll;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+}
+
+/**********************************************************************************/
+/* Add new selected objects. */
+
+struct SceneCollectionSelectedData {
+ ListBase scene_collections_array;
+};
+
+static TreeTraversalAction collection_find_selected_scene_collections(TreeElement *te, void *customdata)
+{
+ struct SceneCollectionSelectedData *data = customdata;
+ SceneCollection *scene_collection = outliner_scene_collection_from_tree_element(te);
+
+ if (!scene_collection) {
+ return TRAVERSE_SKIP_CHILDS;
+ }
+
+ BLI_addtail(&data->scene_collections_array, BLI_genericNodeN(scene_collection));
+ return TRAVERSE_CONTINUE;
+}
+
+static int collection_objects_add_exec(bContext *C, wmOperator *op)
+{
+ SpaceOops *soops = CTX_wm_space_outliner(C);
+ Main *bmain = CTX_data_main(C);
+ Scene *scene = CTX_data_scene(C);
+
+ struct SceneCollectionSelectedData data = {
+ .scene_collections_array = {NULL, NULL},
+ };
+
+ outliner_tree_traverse(soops, &soops->tree, 0, TSE_SELECTED, collection_find_selected_scene_collections, &data);
+
+ if (BLI_listbase_is_empty(&data.scene_collections_array)) {
+ BKE_report(op->reports, RPT_ERROR, "No collection is selected");
+ return OPERATOR_CANCELLED;
+ }
+
+ CTX_DATA_BEGIN (C, struct Object *, ob, selected_objects)
+ {
+ BLI_LISTBASE_FOREACH (LinkData *, link, &data.scene_collections_array) {
+ SceneCollection *scene_collection = link->data;
+ BKE_collection_object_add(
+ &scene->id,
+ scene_collection,
+ ob);
+ }
+ }
+ CTX_DATA_END;
+ BLI_freelistN(&data.scene_collections_array);
+
+ outliner_cleanup_tree(soops);
+ DEG_relations_tag_update(bmain);
+ WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
+ return OPERATOR_FINISHED;
+}
+
+void OUTLINER_OT_collection_objects_add(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Add Objects";
+ ot->idname = "OUTLINER_OT_collection_objects_add";
+ ot->description = "Add selected objects to collection";
+
+ /* api callbacks */
+ ot->exec = collection_objects_add_exec;
+ ot->poll = collections_editor_poll;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+}
+
+/**********************************************************************************/
+/* Remove selected objects. */
+
+
+static int collection_objects_remove_exec(bContext *C, wmOperator *op)
+{
+ SpaceOops *soops = CTX_wm_space_outliner(C);
+ Main *bmain = CTX_data_main(C);
+ Scene *scene = CTX_data_scene(C);
+
+ struct SceneCollectionSelectedData data = {
+ .scene_collections_array = {NULL, NULL},
+ };
+
+ outliner_tree_traverse(soops, &soops->tree, 0, TSE_SELECTED, collection_find_selected_scene_collections, &data);
+
+ if (BLI_listbase_is_empty(&data.scene_collections_array)) {
+ BKE_report(op->reports, RPT_ERROR, "No collection is selected");
+ return OPERATOR_CANCELLED;
+ }
+
+ CTX_DATA_BEGIN (C, struct Object *, ob, selected_objects)
+ {
+ BLI_LISTBASE_FOREACH (LinkData *, link, &data.scene_collections_array) {
+ SceneCollection *scene_collection = link->data;
+ BKE_collection_object_remove(
+ bmain,
+ &scene->id,
+ scene_collection,
+ ob,
+ true);
+ }
+ }
+ CTX_DATA_END;
+ BLI_freelistN(&data.scene_collections_array);
+
+ outliner_cleanup_tree(soops);
+ DEG_relations_tag_update(bmain);
+ WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
+ return OPERATOR_FINISHED;
+}
+
+void OUTLINER_OT_collection_objects_remove(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Remove Objects";
+ ot->idname = "OUTLINER_OT_collection_objects_remove";
+ ot->description = "Remove selected objects from collection";
+
+ /* api callbacks */
+ ot->exec = collection_objects_remove_exec;
+ ot->poll = collections_editor_poll;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+}
+
+static TreeElement *outliner_collection_parent_element_get(TreeElement *te)
+{
+ TreeElement *te_parent = te;
+ while ((te_parent = te_parent->parent)) {
+ if (outliner_scene_collection_from_tree_element(te->parent)) {
+ return te_parent;
+ }
+ }
+ return NULL;
+}
+
+static int object_collection_remove_exec(bContext *C, wmOperator *UNUSED(op))
+{
+ SpaceOops *soops = CTX_wm_space_outliner(C);
+ Main *bmain = CTX_data_main(C);
+
+ struct ObjectsSelectedData data = {
+ .objects_selected_array = {NULL, NULL},
+ };
+
+ outliner_tree_traverse(soops, &soops->tree, 0, TSE_SELECTED, outliner_find_selected_objects, &data);
+
+ BLI_LISTBASE_FOREACH (LinkData *, link, &data.objects_selected_array) {
+ TreeElement *te = (TreeElement *)link->data;
+ Object *ob = (Object *)TREESTORE(te)->id;
+ SceneCollection *scene_collection = NULL;
+
+ TreeElement *te_parent = outliner_collection_parent_element_get(te);
+ if (te_parent != NULL) {
+ scene_collection = outliner_scene_collection_from_tree_element(te_parent);
+ ID *owner_id = TREESTORE(te_parent)->id;
+ BKE_collection_object_remove(bmain, owner_id, scene_collection, ob, true);
+ DEG_id_tag_update(owner_id, DEG_TAG_BASE_FLAGS_UPDATE);
+ }
+ }
+
+ BLI_freelistN(&data.objects_selected_array);
+
+ outliner_cleanup_tree(soops);
+ DEG_relations_tag_update(bmain);
+
+ WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
+ WM_main_add_notifier(NC_SCENE | ND_OB_ACTIVE, NULL);
+ WM_main_add_notifier(NC_SCENE | ND_OB_SELECT, NULL);
+
+ return OPERATOR_FINISHED;
+}
+
+void OUTLINER_OT_object_remove_from_collection(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Remove Object from Collection";
+ ot->idname = "OUTLINER_OT_object_remove_from_collection";
+ ot->description = "Remove selected objects from their respective collection";
+
+ /* api callbacks */
+ ot->exec = object_collection_remove_exec;
+ ot->poll = outliner_objects_collection_poll;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+}
+
+static int object_add_to_new_collection_exec(bContext *C, wmOperator *op)
+{
+ int operator_result = OPERATOR_CANCELLED;
+
+ SpaceOops *soops = CTX_wm_space_outliner(C);
+ Main *bmain = CTX_data_main(C);
+
+ SceneCollection *scene_collection_parent, *scene_collection_new;
+ TreeElement *te_active, *te_parent;
+
+ struct ObjectsSelectedData data = {NULL}, active = {NULL};
+
+ outliner_tree_traverse(soops, &soops->tree, 0, TSE_HIGHLIGHTED, outliner_find_selected_objects, &active);
+ if (BLI_listbase_is_empty(&active.objects_selected_array)) {
+ BKE_report(op->reports, RPT_ERROR, "No object is selected");
+ goto cleanup;
+ }
+
+ outliner_tree_traverse(soops, &soops->tree, 0, TSE_SELECTED, outliner_find_selected_objects, &data);
+ if (BLI_listbase_is_empty(&data.objects_selected_array)) {
+ BKE_report(op->reports, RPT_ERROR, "No objects are selected");
+ goto cleanup;
+ }
+
+ /* Heuristic to get the "active" / "last object" */
+ te_active = ((LinkData *)active.objects_selected_array.first)->data;
+ te_parent = outliner_collection_parent_element_get(te_active);
+
+ if (te_parent == NULL) {
+ BKE_reportf(op->reports, RPT_ERROR, "Couldn't find collection of \"%s\" object", te_active->name);
+ goto cleanup;
+ }
+
+ ID *owner_id = TREESTORE(te_parent)->id;
+ scene_collection_parent = outliner_scene_collection_from_tree_element(te_parent);
+ scene_collection_new = BKE_collection_add(owner_id, scene_collection_parent, scene_collection_parent->type, NULL);
+
+ BLI_LISTBASE_FOREACH (LinkData *, link, &data.objects_selected_array) {
+ TreeElement *te = (TreeElement *)link->data;
+ Object *ob = (Object *)TREESTORE(te)->id;
+ BKE_collection_object_add(owner_id, scene_collection_new, ob);
+ }
+
+ outliner_cleanup_tree(soops);
+ DEG_relations_tag_update(bmain);
+
+ WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
+
+ operator_result = OPERATOR_FINISHED;
+cleanup:
+ BLI_freelistN(&active.objects_selected_array);
+ BLI_freelistN(&data.objects_selected_array);
+ return operator_result;
+}
+
+void OUTLINER_OT_object_add_to_new_collection(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Add Objects to New Collection";
+ ot->idname = "OUTLINER_OT_object_add_to_new_collection";
+ ot->description = "Add objects to a new collection";
+
+ /* api callbacks */
+ ot->exec = object_add_to_new_collection_exec;
+ ot->poll = outliner_objects_collection_poll;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+}
+
+struct CollectionDeleteData {
+ Scene *scene;
+ SpaceOops *soops;
+ GSet *collections_to_delete;
+};
+
+static TreeTraversalAction collection_find_data_to_delete(TreeElement *te, void *customdata)
+{
+ struct CollectionDeleteData *data = customdata;
+ SceneCollection *scene_collection = outliner_scene_collection_from_tree_element(te);
+
+ if (!scene_collection) {
+ return TRAVERSE_SKIP_CHILDS;
+ }
+
+ if (scene_collection == BKE_collection_master(&data->scene->id)) {
+ /* skip - showing warning/error message might be missleading
+ * when deleting multiple collections, so just do nothing */
+ }
+ else {
+ BLI_gset_add(data->collections_to_delete, scene_collection);
+ return TRAVERSE_SKIP_CHILDS; /* Childs will be gone anyway, no need to recurse deeper. */
+ }
+
+ return TRAVERSE_CONTINUE;
+}
+
+static TreeTraversalAction collection_delete_elements_from_collection(TreeElement *te, void *customdata)
+{
+ struct CollectionDeleteData *data = customdata;
+ SceneCollection *scene_collection = outliner_scene_collection_from_tree_element(te);
+
+ if (!scene_collection) {
+ return TRAVERSE_SKIP_CHILDS;
+ }
+
+ const bool will_be_deleted = BLI_gset_haskey(data->collections_to_delete, scene_collection);
+ if (will_be_deleted) {
+ outliner_free_tree_element(te, te->parent ? &te->parent->subtree : &data->soops->tree);
+ /* Childs are freed now, so don't recurse into them. */
+ return TRAVERSE_SKIP_CHILDS;
+ }
+
+ return TRAVERSE_CONTINUE;
+}
+
+static int collection_delete_exec(bContext *C, wmOperator *UNUSED(op))
+{
+ Scene *scene = CTX_data_scene(C);
+ SpaceOops *soops = CTX_wm_space_outliner(C);
+ struct CollectionDeleteData data = {.scene = scene, .soops = soops};
+
+ data.collections_to_delete = BLI_gset_ptr_new(__func__);
+
+ /* We first walk over and find the SceneCollections we actually want to delete (ignoring duplicates). */
+ outliner_tree_traverse(soops, &soops->tree, 0, TSE_SELECTED, collection_find_data_to_delete, &data);
+
+ /* Now, delete all tree elements representing a collection that will be deleted. We'll look for a
+ * new element to select in a few lines, so we can't wait until the tree is recreated on redraw. */
+ outliner_tree_traverse(soops, &soops->tree, 0, 0, collection_delete_elements_from_collection, &data);
+
+ /* Effectively delete the collections. */
+ GSetIterator collections_to_delete_iter;
+ GSET_ITER(collections_to_delete_iter, data.collections_to_delete) {
+ SceneCollection *sc = BLI_gsetIterator_getKey(&collections_to_delete_iter);
+ BKE_collection_remove(&data.scene->id, sc);
+ }
+
+ BLI_gset_free(data.collections_to_delete, NULL);
+
+ TreeElement *select_te = outliner_tree_element_from_layer_collection_index(soops, CTX_data_view_layer(C), 0);
+ if (select_te) {
+ outliner_item_select(soops, select_te, false, false);
+ }
+
+ DEG_relations_tag_update(CTX_data_main(C));
+
+ /* TODO(sergey): Use proper flag for tagging here. */
+ DEG_id_tag_update(&scene->id, 0);
+
+ soops->storeflag |= SO_TREESTORE_REDRAW;
+ WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
+
+ return OPERATOR_FINISHED;
+}
+
+void OUTLINER_OT_collections_delete(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Delete";
+ ot->idname = "OUTLINER_OT_collections_delete";
+ ot->description = "Delete selected overrides or collections";
+
+ /* api callbacks */
+ ot->exec = collection_delete_exec;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+}
+
+static int collection_select_exec(bContext *C, wmOperator *op)
+{
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ const int collection_index = RNA_int_get(op->ptr, "collection_index");
+ view_layer->active_collection = collection_index;
+ WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
+ return OPERATOR_FINISHED;
+}
+
+void OUTLINER_OT_collection_select(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Select";
+ ot->idname = "OUTLINER_OT_collection_select";
+ ot->description = "Change active collection or override";
+
+ /* api callbacks */
+ ot->exec = collection_select_exec;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+
+ RNA_def_int(ot->srna, "collection_index", 0, 0, INT_MAX, "Index",
+ "Index of collection to select", 0, INT_MAX);
+}
+
+#define ACTION_DISABLE 0
+#define ACTION_ENABLE 1
+#define ACTION_TOGGLE 2
+
+static int collection_toggle_exec(bContext *C, wmOperator *op)
+{
+ Main *bmain = CTX_data_main(C);
+ Scene *scene = CTX_data_scene(C);
+ int action = RNA_enum_get(op->ptr, "action");
+ LayerCollection *layer_collection = CTX_data_layer_collection(C);
+
+ if (layer_collection->flag & COLLECTION_DISABLED) {
+ if (ELEM(action, ACTION_TOGGLE, ACTION_ENABLE)) {
+ layer_collection->flag &= ~COLLECTION_DISABLED;
+ }
+ else { /* ACTION_DISABLE */
+ BKE_reportf(op->reports, RPT_ERROR, "Layer collection %s already disabled",
+ layer_collection->scene_collection->name);
+ return OPERATOR_CANCELLED;
+ }
+ }
+ else {
+ if (ELEM(action, ACTION_TOGGLE, ACTION_DISABLE)) {
+ layer_collection->flag |= COLLECTION_DISABLED;
+ }
+ else { /* ACTION_ENABLE */
+ BKE_reportf(op->reports, RPT_ERROR, "Layer collection %s already enabled",
+ layer_collection->scene_collection->name);
+ return OPERATOR_CANCELLED;
+ }
+ }
+
+ DEG_relations_tag_update(bmain);
+ /* TODO(sergey): Use proper flag for tagging here. */
+ DEG_id_tag_update(&scene->id, 0);
+
+ WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
+ WM_event_add_notifier(C, NC_SCENE | ND_LAYER_CONTENT, scene);
+
+ return OPERATOR_FINISHED;
+}
+
+void OUTLINER_OT_collection_toggle(wmOperatorType *ot)
+{
+ PropertyRNA *prop;
+
+ static EnumPropertyItem actions_items[] = {
+ {ACTION_DISABLE, "DISABLE", 0, "Disable", "Disable selected markers"},
+ {ACTION_ENABLE, "ENABLE", 0, "Enable", "Enable selected markers"},
+ {ACTION_TOGGLE, "TOGGLE", 0, "Toggle", "Toggle disabled flag for selected markers"},
+ {0, NULL, 0, NULL, NULL}
+ };
+
+ /* identifiers */
+ ot->name = "Toggle Collection";
+ ot->idname = "OUTLINER_OT_collection_toggle";
+ ot->description = "Deselect collection objects";
+
+ /* api callbacks */
+ ot->exec = collection_toggle_exec;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+
+ /* properties */
+ prop = RNA_def_int(ot->srna, "collection_index", -1, -1, INT_MAX, "Collection Index", "Index of collection to toggle", 0, INT_MAX);
+ RNA_def_property_flag(prop, PROP_SKIP_SAVE);
+ prop = RNA_def_enum(ot->srna, "action", actions_items, ACTION_TOGGLE, "Action", "Selection action to execute");
+ RNA_def_property_flag(prop, PROP_SKIP_SAVE);
+}
+
+#undef ACTION_TOGGLE
+#undef ACTION_ENABLE
+#undef ACTION_DISABLE
+
+struct CollectionObjectsSelectData {
+ bool error;
+ LayerCollection *layer_collection;
+};
+
+static TreeTraversalAction outliner_find_first_selected_layer_collection(TreeElement *te, void *customdata)
+{
+ struct CollectionObjectsSelectData *data = customdata;
+ TreeStoreElem *tselem = TREESTORE(te);
+
+ switch (tselem->type) {
+ case TSE_LAYER_COLLECTION:
+ data->layer_collection = te->directdata;
+ return TRAVERSE_BREAK;
+ case TSE_LAYER_COLLECTION_BASE:
+ return TRAVERSE_CONTINUE;
+ default:
+ return TRAVERSE_SKIP_CHILDS;
+ }
+}
+
+static LayerCollection *outliner_active_layer_collection(bContext *C)
+{
+ SpaceOops *soops = CTX_wm_space_outliner(C);
+
+ struct CollectionObjectsSelectData data = {
+ .layer_collection = NULL,
+ };
+
+ outliner_tree_traverse(soops, &soops->tree, 0, TSE_SELECTED, outliner_find_first_selected_layer_collection, &data);
+ return data.layer_collection;
+}
+
+static int collection_objects_select_exec(bContext *C, wmOperator *UNUSED(op))
+{
+ LayerCollection *layer_collection = outliner_active_layer_collection(C);
+
+ if (layer_collection == NULL) {
+ return OPERATOR_CANCELLED;
+ }
+
+ BKE_layer_collection_objects_select(layer_collection);
+ WM_main_add_notifier(NC_SCENE | ND_OB_SELECT, CTX_data_scene(C));
+
+ return OPERATOR_FINISHED;
+}
+
+void OUTLINER_OT_collection_objects_select(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Select Objects";
+ ot->idname = "OUTLINER_OT_collection_objects_select";
+ ot->description = "Select all the collection objects";
+
+ /* api callbacks */
+ ot->exec = collection_objects_select_exec;
+ ot->poll = view_layer_editor_poll;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+}
+
+struct CollectionDuplicateData {
+ TreeElement *te;
+};
+
+static TreeTraversalAction outliner_find_first_selected_collection(TreeElement *te, void *customdata)
+{
+ struct CollectionDuplicateData *data = customdata;
+ TreeStoreElem *tselem = TREESTORE(te);
+
+ switch (tselem->type) {
+ case TSE_LAYER_COLLECTION:
+ case TSE_SCENE_COLLECTION:
+ data->te = te;
+ return TRAVERSE_BREAK;
+ case TSE_LAYER_COLLECTION_BASE:
+ default:
+ return TRAVERSE_CONTINUE;
+ }
+}
+
+static TreeElement *outliner_active_collection(bContext *C)
+{
+ SpaceOops *soops = CTX_wm_space_outliner(C);
+
+ struct CollectionDuplicateData data = {
+ .te = NULL,
+ };
+
+ outliner_tree_traverse(soops, &soops->tree, 0, TSE_SELECTED, outliner_find_first_selected_collection, &data);
+ return data.te;
+}
+
+static int collection_duplicate_exec(bContext *C, wmOperator *op)
+{
+ SpaceOops *soops = CTX_wm_space_outliner(C);
+ TreeElement *te = outliner_active_collection(C);
+
+ BLI_assert(te != NULL);
+ if (BKE_collection_master(TREESTORE(te)->id) == outliner_scene_collection_from_tree_element(te)) {
+ BKE_report(op->reports, RPT_ERROR, "You can't duplicate the master collection");
+ return OPERATOR_CANCELLED;
+ }
+
+ switch (soops->outlinevis) {
+ case SO_COLLECTIONS:
+ BKE_collection_duplicate(TREESTORE(te)->id, (SceneCollection *)te->directdata);
+ break;
+ case SO_VIEW_LAYER:
+ case SO_GROUPS:
+ BKE_layer_collection_duplicate(TREESTORE(te)->id, (LayerCollection *)te->directdata);
+ break;
+ }
+
+ DEG_relations_tag_update(CTX_data_main(C));
+ WM_main_add_notifier(NC_SCENE | ND_LAYER, CTX_data_scene(C));
+
+ return OPERATOR_FINISHED;
+}
+
+void OUTLINER_OT_collection_duplicate(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Duplicate Collection";
+ ot->idname = "OUTLINER_OT_collection_duplicate";
+ ot->description = "Duplicate collection";
+
+ /* api callbacks */
+ ot->exec = collection_duplicate_exec;
+ ot->poll = outliner_either_collection_editor_poll;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+}
diff --git a/source/blender/editors/space_outliner/outliner_draw.c b/source/blender/editors/space_outliner/outliner_draw.c
index d8d6b09ac6b..4308a795a9c 100644
--- a/source/blender/editors/space_outliner/outliner_draw.c
+++ b/source/blender/editors/space_outliner/outliner_draw.c
@@ -48,9 +48,9 @@
#include "BKE_context.h"
#include "BKE_deform.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
#include "BKE_global.h"
+#include "BKE_layer.h"
#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_modifier.h"
@@ -58,6 +58,9 @@
#include "BKE_scene.h"
#include "BKE_object.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#include "ED_armature.h"
#include "ED_keyframing.h"
#include "ED_object.h"
@@ -66,8 +69,7 @@
#include "WM_api.h"
#include "WM_types.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
+#include "GPU_immediate.h"
#include "UI_interface.h"
#include "UI_interface_icons.h"
@@ -172,116 +174,6 @@ static void restrictbutton_recursive_bone(Bone *bone_parent, int flag, bool set_
}
-static void restrictbutton_recursive_child(bContext *C, Scene *scene, Object *ob_parent, char flag,
- bool state, bool deselect, const char *rnapropname)
-{
- Main *bmain = CTX_data_main(C);
- Object *ob;
-
- for (ob = bmain->object.first; ob; ob = ob->id.next) {
- if (BKE_object_is_child_recursive(ob_parent, ob)) {
- /* only do if child object is selectable */
- if ((flag == OB_RESTRICT_SELECT) || (ob->restrictflag & OB_RESTRICT_SELECT) == 0) {
- if (state) {
- ob->restrictflag |= flag;
- if (deselect) {
- ED_base_object_select(BKE_scene_base_find(scene, ob), BA_DESELECT);
- }
- }
- else {
- ob->restrictflag &= ~flag;
- }
- }
-
- if (rnapropname) {
- PointerRNA ptr;
- PropertyRNA *prop;
- ID *id;
- bAction *action;
- FCurve *fcu;
- bool driven, special;
-
- RNA_id_pointer_create(&ob->id, &ptr);
- prop = RNA_struct_find_property(&ptr, rnapropname);
- fcu = rna_get_fcurve_context_ui(C, &ptr, prop, 0, NULL, &action, &driven, &special);
-
- if (fcu && !driven) {
- id = ptr.id.data;
- if (autokeyframe_cfra_can_key(scene, id)) {
- ReportList *reports = CTX_wm_reports(C);
- ToolSettings *ts = scene->toolsettings;
- eInsertKeyFlags key_flag = ANIM_get_keyframing_flags(scene, 1);
-
- fcu->flag &= ~FCURVE_SELECTED;
- insert_keyframe(reports, id, action, ((fcu->grp) ? (fcu->grp->name) : (NULL)),
- fcu->rna_path, fcu->array_index, CFRA, ts->keyframe_type, key_flag);
- /* Assuming this is not necessary here, since 'ancestor' object button will do it anyway. */
- /* WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL); */
- }
- }
- }
- }
- }
-}
-
-static void restrictbutton_view_cb(bContext *C, void *poin, void *poin2)
-{
- Scene *scene = (Scene *)poin;
- Object *ob = (Object *)poin2;
-
- if (!common_restrict_check(C, ob)) return;
-
- /* deselect objects that are invisible */
- if (ob->restrictflag & OB_RESTRICT_VIEW) {
- /* Ouch! There is no backwards pointer from Object to Base,
- * so have to do loop to find it. */
- ED_base_object_select(BKE_scene_base_find(scene, ob), BA_DESELECT);
- }
-
- if (CTX_wm_window(C)->eventstate->ctrl) {
- restrictbutton_recursive_child(C, scene, ob, OB_RESTRICT_VIEW,
- (ob->restrictflag & OB_RESTRICT_VIEW) != 0, true, "hide");
- }
-
- WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
-
-}
-
-static void restrictbutton_sel_cb(bContext *C, void *poin, void *poin2)
-{
- Scene *scene = (Scene *)poin;
- Object *ob = (Object *)poin2;
-
- if (!common_restrict_check(C, ob)) return;
-
- /* if select restriction has just been turned on */
- if (ob->restrictflag & OB_RESTRICT_SELECT) {
- /* Ouch! There is no backwards pointer from Object to Base,
- * so have to do loop to find it. */
- ED_base_object_select(BKE_scene_base_find(scene, ob), BA_DESELECT);
- }
-
- if (CTX_wm_window(C)->eventstate->ctrl) {
- restrictbutton_recursive_child(C, scene, ob, OB_RESTRICT_SELECT,
- (ob->restrictflag & OB_RESTRICT_SELECT) != 0, true, NULL);
- }
-
- WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
-
-}
-
-static void restrictbutton_rend_cb(bContext *C, void *poin, void *poin2)
-{
- Object *ob = (Object *)poin2;
-
- if (CTX_wm_window(C)->eventstate->ctrl) {
- restrictbutton_recursive_child(C, (Scene *)poin, ob, OB_RESTRICT_RENDER,
- (ob->restrictflag & OB_RESTRICT_RENDER) != 0, false, "hide_render");
- }
-
- WM_event_add_notifier(C, NC_SCENE | ND_OB_RENDER, poin);
-}
-
static void restrictbutton_r_lay_cb(bContext *C, void *poin, void *UNUSED(poin2))
{
WM_event_add_notifier(C, NC_SCENE | ND_RENDER_OPTIONS, poin);
@@ -291,7 +183,7 @@ static void restrictbutton_modifier_cb(bContext *C, void *UNUSED(poin), void *po
{
Object *ob = (Object *)poin2;
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
}
@@ -355,96 +247,17 @@ static void restrictbutton_gp_layer_flag_cb(bContext *C, void *UNUSED(poin), voi
WM_event_add_notifier(C, NC_GPENCIL | ND_DATA | NA_EDITED, NULL);
}
-static int group_restrict_flag(Group *gr, int flag)
-{
- GroupObject *gob;
-
-#ifdef USE_GROUP_SELECT
- for (gob = gr->gobject.first; gob; gob = gob->next) {
- if ((gob->ob->restrictflag & flag) == 0)
- return 0;
- }
- return 1;
-#else
- /* weak but fast */
- if ((gob = gr->gobject.first))
- if ((gob->ob->restrictflag & flag) == 0)
- return 0;
- return 1;
-#endif
-}
-
-static int group_select_flag(Group *gr)
-{
- GroupObject *gob;
-
-#ifdef USE_GROUP_SELECT
- for (gob = gr->gobject.first; gob; gob = gob->next)
- if ((gob->ob->flag & SELECT))
- return 1;
-
- return 0;
-#else
- /* weak but fast */
- if ((gob = gr->gobject.first))
- if (gob->ob->flag & SELECT)
- return 1;
- return 0;
-#endif
-}
-
-void restrictbutton_gr_restrict_flag(void *poin, void *poin2, int flag)
+static void restrictbutton_collection_flag_cb(bContext *C, void *poin, void *UNUSED(poin2))
{
- Scene *scene = (Scene *)poin;
- GroupObject *gob;
- Group *gr = (Group *)poin2;
-
- if (group_restrict_flag(gr, flag)) {
- for (gob = gr->gobject.first; gob; gob = gob->next) {
- if (ID_IS_LINKED(gob->ob))
- continue;
-
- gob->ob->restrictflag &= ~flag;
-
- if (flag == OB_RESTRICT_VIEW)
- if (gob->ob->flag & SELECT)
- ED_base_object_select(BKE_scene_base_find(scene, gob->ob), BA_DESELECT);
- }
- }
- else {
- for (gob = gr->gobject.first; gob; gob = gob->next) {
- if (ID_IS_LINKED(gob->ob))
- continue;
+ ID *id = (ID *)poin;
- /* not in editmode */
- if (scene->obedit != gob->ob) {
- gob->ob->restrictflag |= flag;
+ /* TODO(sergey): Use proper flag for tagging here. */
+ DEG_id_tag_update(id, 0);
- if (ELEM(flag, OB_RESTRICT_SELECT, OB_RESTRICT_VIEW)) {
- if ((gob->ob->flag & SELECT)) {
- ED_base_object_select(BKE_scene_base_find(scene, gob->ob), BA_DESELECT);
- }
- }
- }
- }
+ if (GS(id->name) == ID_SCE) {
+ WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, id);
}
-}
-
-static void restrictbutton_gr_restrict_view(bContext *C, void *poin, void *poin2)
-{
- restrictbutton_gr_restrict_flag(poin, poin2, OB_RESTRICT_VIEW);
- WM_event_add_notifier(C, NC_GROUP, NULL);
- DAG_id_type_tag(CTX_data_main(C), ID_OB);
-}
-static void restrictbutton_gr_restrict_select(bContext *C, void *poin, void *poin2)
-{
- restrictbutton_gr_restrict_flag(poin, poin2, OB_RESTRICT_SELECT);
- WM_event_add_notifier(C, NC_GROUP, NULL);
-}
-static void restrictbutton_gr_restrict_render(bContext *C, void *poin, void *poin2)
-{
- restrictbutton_gr_restrict_flag(poin, poin2, OB_RESTRICT_RENDER);
- WM_event_add_notifier(C, NC_GROUP, NULL);
+ WM_event_add_notifier(C, NC_SCENE | ND_LAYER_CONTENT, NULL);
}
static void restrictbutton_id_user_toggle(bContext *UNUSED(C), void *poin, void *UNUSED(poin2))
@@ -466,6 +279,7 @@ static void namebutton_cb(bContext *C, void *tsep, char *oldname)
{
SpaceOops *soops = CTX_wm_space_outliner(C);
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Object *obedit = CTX_data_edit_object(C);
BLI_mempool *ts = soops->treestore;
TreeStoreElem *tselem = tsep;
@@ -527,7 +341,7 @@ static void namebutton_cb(bContext *C, void *tsep, char *oldname)
BLI_strncpy(newname, ebone->name, sizeof(ebone->name));
BLI_strncpy(ebone->name, oldname, sizeof(ebone->name));
ED_armature_bone_rename(obedit->data, oldname, newname);
- WM_event_add_notifier(C, NC_OBJECT | ND_POSE, OBACT);
+ WM_event_add_notifier(C, NC_OBJECT | ND_POSE, OBACT(view_layer));
}
break;
}
@@ -539,8 +353,8 @@ static void namebutton_cb(bContext *C, void *tsep, char *oldname)
char newname[sizeof(bone->name)];
/* always make current object active */
- tree_element_active(C, scene, soops, te, OL_SETSEL_NORMAL, true);
- ob = OBACT;
+ tree_element_active(C, scene, view_layer, soops, te, OL_SETSEL_NORMAL, true);
+ ob = OBACT(view_layer);
/* restore bone name */
BLI_strncpy(newname, bone->name, sizeof(bone->name));
@@ -556,8 +370,8 @@ static void namebutton_cb(bContext *C, void *tsep, char *oldname)
char newname[sizeof(pchan->name)];
/* always make current pose-bone active */
- tree_element_active(C, scene, soops, te, OL_SETSEL_NORMAL, true);
- ob = OBACT;
+ tree_element_active(C, scene, view_layer, soops, te, OL_SETSEL_NORMAL, true);
+ ob = OBACT(view_layer);
BLI_assert(ob->type == OB_ARMATURE);
@@ -591,6 +405,13 @@ static void namebutton_cb(bContext *C, void *tsep, char *oldname)
}
case TSE_R_LAYER:
break;
+ case TSE_SCENE_COLLECTION:
+ case TSE_LAYER_COLLECTION:
+ {
+ SceneCollection *sc = outliner_scene_collection_from_tree_element(te);
+ BKE_collection_rename(scene, sc, te->name);
+ break;
+ }
}
}
tselem->flag &= ~TSE_TEXTBUT;
@@ -603,8 +424,8 @@ static void outliner_draw_restrictbuts(uiBlock *block, Scene *scene, ARegion *ar
TreeElement *te;
TreeStoreElem *tselem;
Object *ob = NULL;
- Group *gr = NULL;
+#if 0
PropertyRNA *object_prop_hide, *object_prop_hide_select, *object_prop_hide_render;
/* get RNA properties (once) */
@@ -612,81 +433,17 @@ static void outliner_draw_restrictbuts(uiBlock *block, Scene *scene, ARegion *ar
object_prop_hide_select = RNA_struct_type_find_property(&RNA_Object, "hide_select");
object_prop_hide_render = RNA_struct_type_find_property(&RNA_Object, "hide_render");
BLI_assert(object_prop_hide && object_prop_hide_select && object_prop_hide_render);
+#endif
for (te = lb->first; te; te = te->next) {
tselem = TREESTORE(te);
if (te->ys + 2 * UI_UNIT_Y >= ar->v2d.cur.ymin && te->ys <= ar->v2d.cur.ymax) {
- /* objects have toggle-able restriction flags */
- if (tselem->type == 0 && te->idcode == ID_OB) {
- PointerRNA ptr;
-
- ob = (Object *)tselem->id;
- RNA_pointer_create((ID *)ob, &RNA_Object, ob, &ptr);
-
- UI_block_emboss_set(block, UI_EMBOSS_NONE);
- bt = uiDefIconButR_prop(block, UI_BTYPE_ICON_TOGGLE, 0, ICON_RESTRICT_VIEW_OFF,
- (int)(ar->v2d.cur.xmax - OL_TOG_RESTRICT_VIEWX), te->ys, UI_UNIT_X, UI_UNIT_Y,
- &ptr, object_prop_hide, -1, 0, 0, -1, -1,
- TIP_("Restrict viewport visibility (Ctrl - Recursive)"));
- UI_but_func_set(bt, restrictbutton_view_cb, scene, ob);
- UI_but_flag_enable(bt, UI_BUT_DRAG_LOCK);
-
- bt = uiDefIconButR_prop(block, UI_BTYPE_ICON_TOGGLE, 0, ICON_RESTRICT_SELECT_OFF,
- (int)(ar->v2d.cur.xmax - OL_TOG_RESTRICT_SELECTX), te->ys, UI_UNIT_X, UI_UNIT_Y,
- &ptr, object_prop_hide_select, -1, 0, 0, -1, -1,
- TIP_("Restrict viewport selection (Ctrl - Recursive)"));
- UI_but_func_set(bt, restrictbutton_sel_cb, scene, ob);
- UI_but_flag_enable(bt, UI_BUT_DRAG_LOCK);
-
- bt = uiDefIconButR_prop(block, UI_BTYPE_ICON_TOGGLE, 0, ICON_RESTRICT_RENDER_OFF,
- (int)(ar->v2d.cur.xmax - OL_TOG_RESTRICT_RENDERX), te->ys, UI_UNIT_X, UI_UNIT_Y,
- &ptr, object_prop_hide_render, -1, 0, 0, -1, -1,
- TIP_("Restrict rendering (Ctrl - Recursive)"));
- UI_but_func_set(bt, restrictbutton_rend_cb, scene, ob);
- UI_but_flag_enable(bt, UI_BUT_DRAG_LOCK);
-
- UI_block_emboss_set(block, UI_EMBOSS);
-
- }
- if (tselem->type == 0 && te->idcode == ID_GR) {
- int restrict_bool;
- int but_flag = UI_BUT_DRAG_LOCK;
- gr = (Group *)tselem->id;
-
- if (ID_IS_LINKED(gr))
- but_flag |= UI_BUT_DISABLED;
-
- UI_block_emboss_set(block, UI_EMBOSS_NONE);
-
- restrict_bool = group_restrict_flag(gr, OB_RESTRICT_VIEW);
- bt = uiDefIconBut(block, UI_BTYPE_ICON_TOGGLE, 0, restrict_bool ? ICON_RESTRICT_VIEW_ON : ICON_RESTRICT_VIEW_OFF,
- (int)(ar->v2d.cur.xmax - OL_TOG_RESTRICT_VIEWX), te->ys, UI_UNIT_X, UI_UNIT_Y,
- NULL, 0, 0, 0, 0, TIP_("Restrict/Allow visibility in the 3D View"));
- UI_but_func_set(bt, restrictbutton_gr_restrict_view, scene, gr);
- UI_but_flag_enable(bt, but_flag);
-
- restrict_bool = group_restrict_flag(gr, OB_RESTRICT_SELECT);
- bt = uiDefIconBut(block, UI_BTYPE_ICON_TOGGLE, 0, restrict_bool ? ICON_RESTRICT_SELECT_ON : ICON_RESTRICT_SELECT_OFF,
- (int)(ar->v2d.cur.xmax - OL_TOG_RESTRICT_SELECTX), te->ys, UI_UNIT_X, UI_UNIT_Y,
- NULL, 0, 0, 0, 0, TIP_("Restrict/Allow selection in the 3D View"));
- UI_but_func_set(bt, restrictbutton_gr_restrict_select, scene, gr);
- UI_but_flag_enable(bt, but_flag);
-
- restrict_bool = group_restrict_flag(gr, OB_RESTRICT_RENDER);
- bt = uiDefIconBut(block, UI_BTYPE_ICON_TOGGLE, 0, restrict_bool ? ICON_RESTRICT_RENDER_ON : ICON_RESTRICT_RENDER_OFF,
- (int)(ar->v2d.cur.xmax - OL_TOG_RESTRICT_RENDERX), te->ys, UI_UNIT_X, UI_UNIT_Y,
- NULL, 0, 0, 0, 0, TIP_("Restrict/Allow renderability"));
- UI_but_func_set(bt, restrictbutton_gr_restrict_render, scene, gr);
- UI_but_flag_enable(bt, but_flag);
-
- UI_block_emboss_set(block, UI_EMBOSS);
- }
/* scene render layers and passes have toggle-able flags too! */
- else if (tselem->type == TSE_R_LAYER) {
+ if (tselem->type == TSE_R_LAYER) {
UI_block_emboss_set(block, UI_EMBOSS_NONE);
- bt = uiDefIconButBitI(block, UI_BTYPE_ICON_TOGGLE_N, SCE_LAY_DISABLE, 0, ICON_CHECKBOX_HLT - 1,
+ bt = uiDefIconButBitI(block, UI_BTYPE_ICON_TOGGLE, VIEW_LAYER_RENDER, 0, ICON_CHECKBOX_HLT - 1,
(int)(ar->v2d.cur.xmax - OL_TOG_RESTRICT_VIEWX), te->ys, UI_UNIT_X,
UI_UNIT_Y, te->directdata, 0, 0, 0, 0, TIP_("Render this RenderLayer"));
UI_but_func_set(bt, restrictbutton_r_lay_cb, tselem->id, NULL);
@@ -805,6 +562,49 @@ static void outliner_draw_restrictbuts(uiBlock *block, Scene *scene, ARegion *ar
UI_block_emboss_set(block, UI_EMBOSS);
}
+ else if (tselem->type == TSE_LAYER_COLLECTION) {
+ LayerCollection *collection = te->directdata;
+
+ const bool is_enabled = (collection->flag & COLLECTION_DISABLED) == 0;
+
+ UI_block_emboss_set(block, UI_EMBOSS_NONE);
+
+ if (collection->scene_collection->type == COLLECTION_TYPE_NONE) {
+ bt = uiDefIconButBitS(block, UI_BTYPE_ICON_TOGGLE_N, COLLECTION_SELECTABLE, 0, ICON_RESTRICT_SELECT_OFF,
+ (int)(ar->v2d.cur.xmax - OL_TOG_RESTRICT_SELECTX), te->ys, UI_UNIT_X,
+ UI_UNIT_Y, &collection->flag, 0, 0, 0, 0,
+ TIP_("Restrict/Allow 3D View selection of objects in the collection"));
+ UI_but_func_set(bt, restrictbutton_collection_flag_cb, scene, collection);
+ UI_but_flag_enable(bt, UI_BUT_DRAG_LOCK);
+ }
+ else if ((soops->outlinevis == SO_GROUPS) &&
+ (collection->scene_collection->type == COLLECTION_TYPE_GROUP_INTERNAL))
+ {
+ bt = uiDefIconButBitS(block, UI_BTYPE_ICON_TOGGLE_N, COLLECTION_VIEWPORT, 0, ICON_RESTRICT_VIEW_OFF,
+ (int)(ar->v2d.cur.xmax - OL_TOG_RESTRICT_VIEWX), te->ys, UI_UNIT_X,
+ UI_UNIT_Y, &collection->flag, 0, 0, 0, 0,
+ TIP_("Restrict/Allow 3D View selection of objects in the collection"));
+ UI_but_func_set(bt, restrictbutton_collection_flag_cb, tselem->id, collection);
+ UI_but_flag_enable(bt, UI_BUT_DRAG_LOCK);
+
+ bt = uiDefIconButBitS(block, UI_BTYPE_ICON_TOGGLE_N, COLLECTION_RENDER, 0, ICON_RESTRICT_RENDER_OFF,
+ (int)(ar->v2d.cur.xmax - OL_TOG_RESTRICT_SELECTX), te->ys, UI_UNIT_X,
+ UI_UNIT_Y, &collection->flag, 0, 0, 0, 0,
+ TIP_("Restrict/Allow 3D View selection of objects in the collection"));
+ UI_but_func_set(bt, restrictbutton_collection_flag_cb, tselem->id, collection);
+ UI_but_flag_enable(bt, UI_BUT_DRAG_LOCK);
+ }
+
+ bt = uiDefIconButBitS(block, UI_BTYPE_BUT_TOGGLE, COLLECTION_DISABLED, 0,
+ is_enabled ? ICON_CHECKBOX_HLT : ICON_CHECKBOX_DEHLT,
+ (int)(ar->v2d.cur.xmax - OL_TOG_RESTRICT_RENDERX), te->ys, UI_UNIT_X,
+ UI_UNIT_Y, &collection->flag, 0, 0, 0, 0,
+ TIP_("Enable/Disable collection"));
+ UI_but_func_set(bt, restrictbutton_collection_flag_cb, tselem->id, collection);
+ UI_but_flag_enable(bt, UI_BUT_DRAG_LOCK);
+
+ UI_block_emboss_set(block, UI_EMBOSS);
+ }
}
if (TSELEM_OPEN(tselem, soops)) outliner_draw_restrictbuts(block, scene, ar, soops, &te->subtree);
@@ -878,18 +678,23 @@ static void outliner_draw_rnacols(ARegion *ar, int sizex)
float miny = v2d->cur.ymin;
if (miny < v2d->tot.ymin) miny = v2d->tot.ymin;
- UI_ThemeColorShadeAlpha(TH_BACK, -15, -200);
+ glLineWidth(1.0f);
+
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformThemeColorShadeAlpha(TH_BACK, -15, -200);
+
+ immBegin(GWN_PRIM_LINES, 4);
+
+ immVertex2f(pos, sizex, v2d->cur.ymax);
+ immVertex2f(pos, sizex, miny);
+
+ immVertex2f(pos, sizex + OL_RNA_COL_SIZEX, v2d->cur.ymax);
+ immVertex2f(pos, sizex + OL_RNA_COL_SIZEX, miny);
- /* draw column separator lines */
- fdrawline((float)sizex,
- v2d->cur.ymax,
- (float)sizex,
- miny);
+ immEnd();
- fdrawline((float)sizex + OL_RNA_COL_SIZEX,
- v2d->cur.ymax,
- (float)sizex + OL_RNA_COL_SIZEX,
- miny);
+ immUnbindProgram();
}
static void outliner_draw_rnabuts(uiBlock *block, ARegion *ar, SpaceOops *soops, int sizex, ListBase *lb)
@@ -987,7 +792,7 @@ static void tselem_draw_icon_uibut(struct DrawIconArg *arg, int icon)
/* restrict column clip... it has been coded by simply overdrawing, doesnt work for buttons */
if (arg->x >= arg->xmax) {
glEnable(GL_BLEND);
- UI_icon_draw_aspect(arg->x, arg->y, icon, 1.0f / UI_DPI_FAC, arg->alpha);
+ UI_icon_draw_alpha(arg->x, arg->y, icon, arg->alpha);
glDisable(GL_BLEND);
}
else {
@@ -1047,7 +852,7 @@ static void tselem_draw_icon(uiBlock *block, int xmax, float x, float y, TreeSto
arg.xb = x; /* for ui buttons */
arg.yb = y;
arg.alpha = alpha;
-
+
/* placement of icons, copied from interface_widgets.c */
aspect = (0.8f * UI_UNIT_Y) / ICON_DEFAULT_HEIGHT;
x += 2.0f * aspect;
@@ -1055,184 +860,257 @@ static void tselem_draw_icon(uiBlock *block, int xmax, float x, float y, TreeSto
arg.x = x;
arg.y = y;
+#define ICON_DRAW(_icon) UI_icon_draw_alpha(x, y, _icon, alpha)
+
if (tselem->type) {
switch (tselem->type) {
case TSE_ANIM_DATA:
- UI_icon_draw(x, y, ICON_ANIM_DATA); break; // xxx
+ ICON_DRAW(ICON_ANIM_DATA); /* XXX */
+ break;
case TSE_NLA:
- UI_icon_draw(x, y, ICON_NLA); break;
+ ICON_DRAW(ICON_NLA);
+ break;
case TSE_NLA_TRACK:
- UI_icon_draw(x, y, ICON_NLA); break; // XXX
+ ICON_DRAW(ICON_NLA); /* XXX */
+ break;
case TSE_NLA_ACTION:
- UI_icon_draw(x, y, ICON_ACTION); break;
+ ICON_DRAW(ICON_ACTION);
+ break;
case TSE_DRIVER_BASE:
- UI_icon_draw(x, y, ICON_DRIVER); break;
+ ICON_DRAW(ICON_DRIVER);
+ break;
case TSE_DEFGROUP_BASE:
- UI_icon_draw(x, y, ICON_GROUP_VERTEX); break;
+ ICON_DRAW(ICON_GROUP_VERTEX);
+ break;
case TSE_BONE:
case TSE_EBONE:
- UI_icon_draw(x, y, ICON_BONE_DATA); break;
+ ICON_DRAW(ICON_BONE_DATA);
+ break;
case TSE_CONSTRAINT_BASE:
- UI_icon_draw(x, y, ICON_CONSTRAINT); break;
+ ICON_DRAW(ICON_CONSTRAINT);
+ break;
case TSE_MODIFIER_BASE:
- UI_icon_draw(x, y, ICON_MODIFIER); break;
+ ICON_DRAW(ICON_MODIFIER);
+ break;
case TSE_LINKED_OB:
- UI_icon_draw(x, y, ICON_OBJECT_DATA); break;
+ ICON_DRAW(ICON_OBJECT_DATA);
+ break;
case TSE_LINKED_PSYS:
- UI_icon_draw(x, y, ICON_PARTICLES); break;
+ ICON_DRAW(ICON_PARTICLES);
+ break;
case TSE_MODIFIER:
{
Object *ob = (Object *)tselem->id;
ModifierData *md = BLI_findlink(&ob->modifiers, tselem->nr);
switch ((ModifierType)md->type) {
- case eModifierType_Subsurf:
- UI_icon_draw(x, y, ICON_MOD_SUBSURF); break;
- case eModifierType_Armature:
- UI_icon_draw(x, y, ICON_MOD_ARMATURE); break;
- case eModifierType_Lattice:
- UI_icon_draw(x, y, ICON_MOD_LATTICE); break;
- case eModifierType_Curve:
- UI_icon_draw(x, y, ICON_MOD_CURVE); break;
- case eModifierType_Build:
- UI_icon_draw(x, y, ICON_MOD_BUILD); break;
- case eModifierType_Mirror:
- UI_icon_draw(x, y, ICON_MOD_MIRROR); break;
- case eModifierType_Decimate:
- UI_icon_draw(x, y, ICON_MOD_DECIM); break;
- case eModifierType_Wave:
- UI_icon_draw(x, y, ICON_MOD_WAVE); break;
- case eModifierType_Hook:
- UI_icon_draw(x, y, ICON_HOOK); break;
- case eModifierType_Softbody:
- UI_icon_draw(x, y, ICON_MOD_SOFT); break;
- case eModifierType_Boolean:
- UI_icon_draw(x, y, ICON_MOD_BOOLEAN); break;
- case eModifierType_ParticleSystem:
- UI_icon_draw(x, y, ICON_MOD_PARTICLES); break;
+ case eModifierType_Subsurf:
+ ICON_DRAW(ICON_MOD_SUBSURF);
+ break;
+ case eModifierType_Armature:
+ ICON_DRAW(ICON_MOD_ARMATURE);
+ break;
+ case eModifierType_Lattice:
+ ICON_DRAW(ICON_MOD_LATTICE);
+ break;
+ case eModifierType_Curve:
+ ICON_DRAW(ICON_MOD_CURVE);
+ break;
+ case eModifierType_Build:
+ ICON_DRAW(ICON_MOD_BUILD);
+ break;
+ case eModifierType_Mirror:
+ ICON_DRAW(ICON_MOD_MIRROR);
+ break;
+ case eModifierType_Decimate:
+ ICON_DRAW(ICON_MOD_DECIM);
+ break;
+ case eModifierType_Wave:
+ ICON_DRAW(ICON_MOD_WAVE);
+ break;
+ case eModifierType_Hook:
+ ICON_DRAW(ICON_HOOK);
+ break;
+ case eModifierType_Softbody:
+ ICON_DRAW(ICON_MOD_SOFT);
+ break;
+ case eModifierType_Boolean:
+ ICON_DRAW(ICON_MOD_BOOLEAN);
+ break;
+ case eModifierType_ParticleSystem:
+ ICON_DRAW(ICON_MOD_PARTICLES);
+ break;
case eModifierType_ParticleInstance:
- UI_icon_draw(x, y, ICON_MOD_PARTICLES); break;
+ ICON_DRAW(ICON_MOD_PARTICLES);
+ break;
case eModifierType_EdgeSplit:
- UI_icon_draw(x, y, ICON_MOD_EDGESPLIT); break;
+ ICON_DRAW(ICON_MOD_EDGESPLIT);
+ break;
case eModifierType_Array:
- UI_icon_draw(x, y, ICON_MOD_ARRAY); break;
+ ICON_DRAW(ICON_MOD_ARRAY);
+ break;
case eModifierType_UVProject:
case eModifierType_UVWarp: /* TODO, get own icon */
- UI_icon_draw(x, y, ICON_MOD_UVPROJECT); break;
+ ICON_DRAW(ICON_MOD_UVPROJECT);
+ break;
case eModifierType_Displace:
- UI_icon_draw(x, y, ICON_MOD_DISPLACE); break;
+ ICON_DRAW(ICON_MOD_DISPLACE);
+ break;
case eModifierType_Shrinkwrap:
- UI_icon_draw(x, y, ICON_MOD_SHRINKWRAP); break;
+ ICON_DRAW(ICON_MOD_SHRINKWRAP);
+ break;
case eModifierType_Cast:
- UI_icon_draw(x, y, ICON_MOD_CAST); break;
+ ICON_DRAW(ICON_MOD_CAST);
+ break;
case eModifierType_MeshDeform:
case eModifierType_SurfaceDeform:
- UI_icon_draw(x, y, ICON_MOD_MESHDEFORM); break;
+ ICON_DRAW(ICON_MOD_MESHDEFORM);
+ break;
case eModifierType_Bevel:
- UI_icon_draw(x, y, ICON_MOD_BEVEL); break;
+ ICON_DRAW(ICON_MOD_BEVEL);
+ break;
case eModifierType_Smooth:
case eModifierType_LaplacianSmooth:
case eModifierType_CorrectiveSmooth:
- UI_icon_draw(x, y, ICON_MOD_SMOOTH); break;
+ ICON_DRAW(ICON_MOD_SMOOTH);
+ break;
case eModifierType_SimpleDeform:
- UI_icon_draw(x, y, ICON_MOD_SIMPLEDEFORM); break;
+ ICON_DRAW(ICON_MOD_SIMPLEDEFORM);
+ break;
case eModifierType_Mask:
- UI_icon_draw(x, y, ICON_MOD_MASK); break;
+ ICON_DRAW(ICON_MOD_MASK);
+ break;
case eModifierType_Cloth:
- UI_icon_draw(x, y, ICON_MOD_CLOTH); break;
+ ICON_DRAW(ICON_MOD_CLOTH);
+ break;
case eModifierType_Explode:
- UI_icon_draw(x, y, ICON_MOD_EXPLODE); break;
+ ICON_DRAW(ICON_MOD_EXPLODE);
+ break;
case eModifierType_Collision:
case eModifierType_Surface:
- UI_icon_draw(x, y, ICON_MOD_PHYSICS); break;
+ ICON_DRAW(ICON_MOD_PHYSICS);
+ break;
case eModifierType_Fluidsim:
- UI_icon_draw(x, y, ICON_MOD_FLUIDSIM); break;
+ ICON_DRAW(ICON_MOD_FLUIDSIM);
+ break;
case eModifierType_Multires:
- UI_icon_draw(x, y, ICON_MOD_MULTIRES); break;
+ ICON_DRAW(ICON_MOD_MULTIRES);
+ break;
case eModifierType_Smoke:
- UI_icon_draw(x, y, ICON_MOD_SMOKE); break;
+ ICON_DRAW(ICON_MOD_SMOKE);
+ break;
case eModifierType_Solidify:
- UI_icon_draw(x, y, ICON_MOD_SOLIDIFY); break;
+ ICON_DRAW(ICON_MOD_SOLIDIFY);
+ break;
case eModifierType_Screw:
- UI_icon_draw(x, y, ICON_MOD_SCREW); break;
+ ICON_DRAW(ICON_MOD_SCREW);
+ break;
case eModifierType_Remesh:
- UI_icon_draw(x, y, ICON_MOD_REMESH); break;
+ ICON_DRAW(ICON_MOD_REMESH);
+ break;
case eModifierType_WeightVGEdit:
case eModifierType_WeightVGMix:
case eModifierType_WeightVGProximity:
- UI_icon_draw(x, y, ICON_MOD_VERTEX_WEIGHT); break;
+ ICON_DRAW(ICON_MOD_VERTEX_WEIGHT);
+ break;
case eModifierType_DynamicPaint:
- UI_icon_draw(x, y, ICON_MOD_DYNAMICPAINT); break;
+ ICON_DRAW(ICON_MOD_DYNAMICPAINT);
+ break;
case eModifierType_Ocean:
- UI_icon_draw(x, y, ICON_MOD_OCEAN); break;
+ ICON_DRAW(ICON_MOD_OCEAN);
+ break;
case eModifierType_Warp:
- UI_icon_draw(x, y, ICON_MOD_WARP); break;
+ ICON_DRAW(ICON_MOD_WARP);
+ break;
case eModifierType_Skin:
- UI_icon_draw(x, y, ICON_MOD_SKIN); break;
+ ICON_DRAW(ICON_MOD_SKIN);
+ break;
case eModifierType_Triangulate:
- UI_icon_draw(x, y, ICON_MOD_TRIANGULATE); break;
+ ICON_DRAW(ICON_MOD_TRIANGULATE);
+ break;
case eModifierType_MeshCache:
- UI_icon_draw(x, y, ICON_MOD_MESHDEFORM); break; /* XXX, needs own icon */
+ ICON_DRAW(ICON_MOD_MESHDEFORM); /* XXX, needs own icon */
+ break;
case eModifierType_MeshSequenceCache:
- UI_icon_draw(x, y, ICON_MOD_MESHDEFORM); break; /* XXX, needs own icon */
+ ICON_DRAW(ICON_MOD_MESHDEFORM); /* XXX, needs own icon */
+ break;
case eModifierType_Wireframe:
- UI_icon_draw(x, y, ICON_MOD_WIREFRAME); break;
+ ICON_DRAW(ICON_MOD_WIREFRAME);
+ break;
case eModifierType_LaplacianDeform:
- UI_icon_draw(x, y, ICON_MOD_MESHDEFORM); break; /* XXX, needs own icon */
+ ICON_DRAW(ICON_MOD_MESHDEFORM); /* XXX, needs own icon */
+ break;
case eModifierType_DataTransfer:
- UI_icon_draw(x, y, ICON_MOD_DATA_TRANSFER); break;
+ ICON_DRAW(ICON_MOD_DATA_TRANSFER);
+ break;
case eModifierType_NormalEdit:
- UI_icon_draw(x, y, ICON_MOD_NORMALEDIT); break;
+ ICON_DRAW(ICON_MOD_NORMALEDIT);
+ break;
/* Default */
case eModifierType_None:
case eModifierType_ShapeKey:
case NUM_MODIFIER_TYPES:
- UI_icon_draw(x, y, ICON_DOT); break;
+ ICON_DRAW(ICON_DOT);
+ break;
}
break;
}
case TSE_POSE_BASE:
- UI_icon_draw(x, y, ICON_ARMATURE_DATA); break;
+ ICON_DRAW(ICON_ARMATURE_DATA);
+ break;
case TSE_POSE_CHANNEL:
- UI_icon_draw(x, y, ICON_BONE_DATA); break;
+ ICON_DRAW(ICON_BONE_DATA);
+ break;
case TSE_PROXY:
- UI_icon_draw(x, y, ICON_GHOST); break;
+ ICON_DRAW(ICON_GHOST);
+ break;
case TSE_R_LAYER_BASE:
- UI_icon_draw(x, y, ICON_RENDERLAYERS); break;
+ ICON_DRAW(ICON_RENDERLAYERS);
+ break;
case TSE_R_LAYER:
- UI_icon_draw(x, y, ICON_RENDERLAYERS); break;
+ ICON_DRAW(ICON_RENDERLAYERS);
+ break;
case TSE_LINKED_LAMP:
- UI_icon_draw(x, y, ICON_LAMP_DATA); break;
+ ICON_DRAW(ICON_LAMP_DATA);
+ break;
case TSE_LINKED_MAT:
- UI_icon_draw(x, y, ICON_MATERIAL_DATA); break;
+ ICON_DRAW(ICON_MATERIAL_DATA);
+ break;
case TSE_POSEGRP_BASE:
- UI_icon_draw(x, y, ICON_GROUP_BONE); break;
+ ICON_DRAW(ICON_GROUP_BONE);
+ break;
case TSE_SEQUENCE:
if (te->idcode == SEQ_TYPE_MOVIE)
- UI_icon_draw(x, y, ICON_SEQUENCE);
+ ICON_DRAW(ICON_SEQUENCE);
else if (te->idcode == SEQ_TYPE_META)
- UI_icon_draw(x, y, ICON_DOT);
+ ICON_DRAW(ICON_DOT);
else if (te->idcode == SEQ_TYPE_SCENE)
- UI_icon_draw(x, y, ICON_SCENE);
+ ICON_DRAW(ICON_SCENE);
else if (te->idcode == SEQ_TYPE_SOUND_RAM)
- UI_icon_draw(x, y, ICON_SOUND);
+ ICON_DRAW(ICON_SOUND);
else if (te->idcode == SEQ_TYPE_IMAGE)
- UI_icon_draw(x, y, ICON_IMAGE_COL);
+ ICON_DRAW(ICON_IMAGE_COL);
else
- UI_icon_draw(x, y, ICON_PARTICLES);
+ ICON_DRAW(ICON_PARTICLES);
break;
case TSE_SEQ_STRIP:
- UI_icon_draw(x, y, ICON_LIBRARY_DATA_DIRECT);
+ ICON_DRAW(ICON_LIBRARY_DATA_DIRECT);
break;
case TSE_SEQUENCE_DUP:
- UI_icon_draw(x, y, ICON_OBJECT_DATA);
+ ICON_DRAW(ICON_OBJECT_DATA);
break;
case TSE_RNA_STRUCT:
if (RNA_struct_is_ID(te->rnaptr.type)) {
arg.id = (ID *)te->rnaptr.data;
tselem_draw_icon_uibut(&arg, RNA_struct_ui_icon(te->rnaptr.type));
}
- else
- UI_icon_draw(x, y, RNA_struct_ui_icon(te->rnaptr.type));
+ else {
+ int icon = RNA_struct_ui_icon(te->rnaptr.type);
+ ICON_DRAW(icon);
+ }
+ break;
+ case TSE_LAYER_COLLECTION:
+ case TSE_SCENE_COLLECTION:
+ ICON_DRAW(ICON_COLLAPSEMENU);
break;
/* Removed the icons from outliner. Need a better structure with Layers, Palettes and Colors */
#if 0
@@ -1241,7 +1119,8 @@ static void tselem_draw_icon(uiBlock *block, int xmax, float x, float y, TreeSto
break;
#endif
default:
- UI_icon_draw(x, y, ICON_DOT); break;
+ ICON_DRAW(ICON_DOT);
+ break;
}
}
else if (tselem->id) {
@@ -1351,17 +1230,18 @@ static void tselem_draw_icon(uiBlock *block, int xmax, float x, float y, TreeSto
}
}
}
+
+#undef ICON_DRAW
}
-static void outliner_draw_iconrow(bContext *C, uiBlock *block, Scene *scene, SpaceOops *soops, ListBase *lb, int level,
- int xmax, int *offsx, int ys)
+static void outliner_draw_iconrow(bContext *C, uiBlock *block, Scene *scene, ViewLayer *view_layer, SpaceOops *soops,
+ ListBase *lb, int level, int xmax, int *offsx, int ys, float alpha_fac)
{
TreeElement *te;
TreeStoreElem *tselem;
eOLDrawState active;
for (te = lb->first; te; te = te->next) {
-
/* exit drawing early */
if ((*offsx) - UI_UNIT_X > xmax)
break;
@@ -1374,34 +1254,38 @@ static void outliner_draw_iconrow(bContext *C, uiBlock *block, Scene *scene, Spa
/* active blocks get white circle */
if (tselem->type == 0) {
if (te->idcode == ID_OB) {
- active = (OBACT == (Object *)tselem->id) ? OL_DRAWSEL_NORMAL : OL_DRAWSEL_NONE;
+ active = (OBACT(view_layer) == (Object *)tselem->id) ? OL_DRAWSEL_NORMAL : OL_DRAWSEL_NONE;
}
else if (scene->obedit && scene->obedit->data == tselem->id) {
active = OL_DRAWSEL_NORMAL;
}
else {
- active = tree_element_active(C, scene, soops, te, OL_SETSEL_NONE, false);
+ active = tree_element_active(C, scene, view_layer, soops, te, OL_SETSEL_NONE, false);
}
}
else {
- active = tree_element_type_active(NULL, scene, soops, te, tselem, OL_SETSEL_NONE, false);
+ active = tree_element_type_active(C, scene, view_layer, soops, te, tselem, OL_SETSEL_NONE, false);
}
if (active != OL_DRAWSEL_NONE) {
float ufac = UI_UNIT_X / 20.0f;
+ float color[4] = {1.0f, 1.0f, 1.0f, 0.4f};
UI_draw_roundbox_corner_set(UI_CNR_ALL);
- glColor4ub(255, 255, 255, 100);
- UI_draw_roundbox(
+ color[3] *= alpha_fac;
+
+ UI_draw_roundbox_aa(
+ true,
(float) *offsx + 1.0f * ufac,
(float)ys + 1.0f * ufac,
(float)*offsx + UI_UNIT_X - 1.0f * ufac,
(float)ys + UI_UNIT_Y - ufac,
- (float)UI_UNIT_Y / 2.0f - ufac);
+ (float)UI_UNIT_Y / 2.0f - ufac,
+ color);
glEnable(GL_BLEND); /* roundbox disables */
}
- tselem_draw_icon(block, xmax, (float)*offsx, (float)ys, tselem, te, 0.5f);
+ tselem_draw_icon(block, xmax, (float)*offsx, (float)ys, tselem, te, 0.5f * alpha_fac);
te->xs = *offsx;
te->ys = ys;
te->xend = (short)*offsx + UI_UNIT_X;
@@ -1412,7 +1296,7 @@ static void outliner_draw_iconrow(bContext *C, uiBlock *block, Scene *scene, Spa
/* this tree element always has same amount of branches, so don't draw */
if (tselem->type != TSE_R_LAYER)
- outliner_draw_iconrow(C, block, scene, soops, &te->subtree, level + 1, xmax, offsx, ys);
+ outliner_draw_iconrow(C, block, scene, view_layer, soops, &te->subtree, level + 1, xmax, offsx, ys, alpha_fac);
}
}
@@ -1421,11 +1305,14 @@ static void outliner_draw_iconrow(bContext *C, uiBlock *block, Scene *scene, Spa
static void outliner_set_coord_tree_element(TreeElement *te, int startx, int starty)
{
TreeElement *ten;
-
- /* store coord and continue, we need coordinates for elements outside view too */
- te->xs = startx;
- te->ys = starty;
-
+
+ /* closed items may be displayed in row of parent, don't change their coordinate! */
+ if ((te->flag & TE_ICONROW) == 0) {
+ /* store coord and continue, we need coordinates for elements outside view too */
+ te->xs = startx;
+ te->ys = starty;
+ }
+
for (ten = te->subtree.first; ten; ten = ten->next) {
outliner_set_coord_tree_element(ten, startx + UI_UNIT_X, starty);
}
@@ -1433,24 +1320,28 @@ static void outliner_set_coord_tree_element(TreeElement *te, int startx, int sta
static void outliner_draw_tree_element(
- bContext *C, uiBlock *block, const uiFontStyle *fstyle, Scene *scene, ARegion *ar, SpaceOops *soops,
- TreeElement *te, int startx, int *starty, TreeElement **te_edit)
+ bContext *C, uiBlock *block, const uiFontStyle *fstyle, Scene *scene, ViewLayer *view_layer,
+ ARegion *ar, SpaceOops *soops, TreeElement *te, bool draw_grayed_out,
+ int startx, int *starty, TreeElement **te_edit, TreeElement **te_floating)
{
- TreeElement *ten;
TreeStoreElem *tselem;
float ufac = UI_UNIT_X / 20.0f;
int offsx = 0;
eOLDrawState active = OL_DRAWSEL_NONE;
-
+ float color[4];
tselem = TREESTORE(te);
if (*starty + 2 * UI_UNIT_Y >= ar->v2d.cur.ymin && *starty <= ar->v2d.cur.ymax) {
+ const float alpha_fac = draw_grayed_out ? 0.5f : 1.0f;
+ const float alpha = 0.5f * alpha_fac;
int xmax = ar->v2d.cur.xmax;
- unsigned char alpha = 128;
-
+
if ((tselem->flag & TSE_TEXTBUT) && (*te_edit == NULL)) {
*te_edit = te;
}
+ if ((te->drag_data != NULL) && (*te_floating == NULL)) {
+ *te_floating = te;
+ }
/* icons can be ui buts, we don't want it to overlap with restrict */
if ((soops->flag & SO_HIDE_RESTRICTCOLS) == 0)
@@ -1458,151 +1349,137 @@ static void outliner_draw_tree_element(
glEnable(GL_BLEND);
- /* start by highlighting search matches
- * we don't expand items when searching in the datablocks but we
- * still want to highlight any filter matches.
- */
- if ((SEARCHING_OUTLINER(soops) || (soops->outlinevis == SO_DATABLOCKS && soops->search_string[0] != 0)) &&
- (tselem->flag & TSE_SEARCHMATCH))
- {
- char col[4];
- UI_GetThemeColorType4ubv(TH_MATCH, SPACE_OUTLINER, col);
- col[3] = alpha;
- glColor4ubv((GLubyte *)col);
- glRecti(startx, *starty + 1, ar->v2d.cur.xmax, *starty + UI_UNIT_Y - 1);
- }
-
/* colors for active/selected data */
if (tselem->type == 0) {
-
if (te->idcode == ID_SCE) {
if (tselem->id == (ID *)scene) {
- glColor4ub(255, 255, 255, alpha);
- active = OL_DRAWSEL_ACTIVE;
- }
- }
- else if (te->idcode == ID_GR) {
- Group *gr = (Group *)tselem->id;
- if (group_select_flag(gr)) {
- char col[4];
- UI_GetThemeColorType4ubv(TH_SELECT, SPACE_VIEW3D, col);
- col[3] = alpha;
- glColor4ubv((GLubyte *)col);
-
+ rgba_float_args_set(color, 1.0f, 1.0f, 1.0f, alpha);
active = OL_DRAWSEL_ACTIVE;
}
}
else if (te->idcode == ID_OB) {
Object *ob = (Object *)tselem->id;
-
- if (ob == OBACT || (ob->flag & SELECT)) {
+ Base *base = (Base *)te->directdata;
+ const bool is_selected = (base != NULL) && ((base->flag & BASE_SELECTED) != 0);
+
+ if (ob == OBACT(view_layer) || is_selected) {
char col[4] = {0, 0, 0, 0};
/* outliner active ob: always white text, circle color now similar to view3d */
active = OL_DRAWSEL_ACTIVE;
- if (ob == OBACT) {
- if (ob->flag & SELECT) {
+ if (ob == OBACT(view_layer)) {
+ if (is_selected) {
UI_GetThemeColorType4ubv(TH_ACTIVE, SPACE_VIEW3D, col);
col[3] = alpha;
}
active = OL_DRAWSEL_NORMAL;
}
- else if (ob->flag & SELECT) {
+ else if (is_selected) {
UI_GetThemeColorType4ubv(TH_SELECT, SPACE_VIEW3D, col);
col[3] = alpha;
}
-
- glColor4ubv((GLubyte *)col);
+ rgba_float_args_set(color, (float)col[0] / 255, (float)col[1] / 255, (float)col[2] / 255, alpha);
}
}
else if (scene->obedit && scene->obedit->data == tselem->id) {
- glColor4ub(255, 255, 255, alpha);
+ rgba_float_args_set(color, 1.0f, 1.0f, 1.0f, alpha);
active = OL_DRAWSEL_ACTIVE;
}
else {
- if (tree_element_active(C, scene, soops, te, OL_SETSEL_NONE, false)) {
- glColor4ub(220, 220, 255, alpha);
+ if (tree_element_active(C, scene, view_layer, soops, te, OL_SETSEL_NONE, false)) {
+ rgba_float_args_set(color, 0.85f, 0.85f, 1.0f, alpha);
active = OL_DRAWSEL_ACTIVE;
}
}
}
else {
- if (tree_element_type_active(NULL, scene, soops, te, tselem, OL_SETSEL_NONE, false) != OL_DRAWSEL_NONE) {
- active = OL_DRAWSEL_ACTIVE;
- }
- glColor4ub(220, 220, 255, alpha);
+ active = tree_element_type_active(C, scene, view_layer, soops, te, tselem, OL_SETSEL_NONE, false);
+ rgba_float_args_set(color, 0.85f, 0.85f, 1.0f, alpha);
}
/* active circle */
if (active != OL_DRAWSEL_NONE) {
UI_draw_roundbox_corner_set(UI_CNR_ALL);
- UI_draw_roundbox(
+ UI_draw_roundbox_aa(
+ true,
(float)startx + UI_UNIT_X + 1.0f * ufac,
(float)*starty + 1.0f * ufac,
(float)startx + 2.0f * UI_UNIT_X - 1.0f * ufac,
(float)*starty + UI_UNIT_Y - 1.0f * ufac,
- UI_UNIT_Y / 2.0f - 1.0f * ufac);
+ UI_UNIT_Y / 2.0f - 1.0f * ufac, color);
glEnable(GL_BLEND); /* roundbox disables it */
te->flag |= TE_ACTIVE; // for lookup in display hierarchies
}
+ if ((soops->outlinevis == SO_COLLECTIONS) && (tselem->type == TSE_SCENE_COLLECTION) && (te->parent == NULL)) {
+ /* Master collection can't expand/collapse. */
+ }
+ else if (te->subtree.first || (tselem->type == 0 && te->idcode == ID_SCE) || (te->flag & TE_LAZY_CLOSED)) {
/* open/close icon, only when sublevels, except for scene */
- if (te->subtree.first || (tselem->type == 0 && te->idcode == ID_SCE) || (te->flag & TE_LAZY_CLOSED)) {
- int icon_x;
- icon_x = startx;
-
+ int icon_x = startx;
+
// icons a bit higher
if (TSELEM_OPEN(tselem, soops))
- UI_icon_draw((float)icon_x + 2 * ufac, (float)*starty + 1 * ufac, ICON_DISCLOSURE_TRI_DOWN);
+ UI_icon_draw_alpha((float)icon_x + 2 * ufac, (float)*starty + 1 * ufac, ICON_DISCLOSURE_TRI_DOWN,
+ alpha_fac);
else
- UI_icon_draw((float)icon_x + 2 * ufac, (float)*starty + 1 * ufac, ICON_DISCLOSURE_TRI_RIGHT);
+ UI_icon_draw_alpha((float)icon_x + 2 * ufac, (float)*starty + 1 * ufac, ICON_DISCLOSURE_TRI_RIGHT,
+ alpha_fac);
}
offsx += UI_UNIT_X;
/* datatype icon */
if (!(ELEM(tselem->type, TSE_RNA_PROPERTY, TSE_RNA_ARRAY_ELEM))) {
-
- tselem_draw_icon(block, xmax, (float)startx + offsx, (float)*starty, tselem, te, 1.0f);
-
+ tselem_draw_icon(block, xmax, (float)startx + offsx, (float)*starty, tselem, te, alpha_fac);
offsx += UI_UNIT_X + 2 * ufac;
}
else
offsx += 2 * ufac;
if (tselem->type == 0 && ID_IS_LINKED(tselem->id)) {
- glPixelTransferf(GL_ALPHA_SCALE, 0.5f);
if (tselem->id->tag & LIB_TAG_MISSING) {
- UI_icon_draw((float)startx + offsx + 2 * ufac, (float)*starty + 2 * ufac, ICON_LIBRARY_DATA_BROKEN);
+ UI_icon_draw_alpha((float)startx + offsx + 2 * ufac, (float)*starty + 2 * ufac, ICON_LIBRARY_DATA_BROKEN,
+ alpha_fac);
}
else if (tselem->id->tag & LIB_TAG_INDIRECT) {
- UI_icon_draw((float)startx + offsx + 2 * ufac, (float)*starty + 2 * ufac, ICON_LIBRARY_DATA_INDIRECT);
+ UI_icon_draw_alpha((float)startx + offsx + 2 * ufac, (float)*starty + 2 * ufac, ICON_LIBRARY_DATA_INDIRECT,
+ alpha_fac);
}
else {
- UI_icon_draw((float)startx + offsx + 2 * ufac, (float)*starty + 2 * ufac, ICON_LIBRARY_DATA_DIRECT);
+ UI_icon_draw_alpha((float)startx + offsx + 2 * ufac, (float)*starty + 2 * ufac, ICON_LIBRARY_DATA_DIRECT,
+ alpha_fac);
}
- glPixelTransferf(GL_ALPHA_SCALE, 1.0f);
+ offsx += UI_UNIT_X + 2 * ufac;
+ }
+ else if (tselem->type == 0 && ID_IS_STATIC_OVERRIDE(tselem->id)) {
+ UI_icon_draw_alpha((float)startx + offsx + 2 * ufac, (float)*starty + 2 * ufac, ICON_LIBRARY_DATA_OVERRIDE,
+ alpha_fac);
offsx += UI_UNIT_X + 2 * ufac;
}
glDisable(GL_BLEND);
/* name */
if ((tselem->flag & TSE_TEXTBUT) == 0) {
+ unsigned char text_col[4];
+
if (active == OL_DRAWSEL_NORMAL) {
- UI_ThemeColor(TH_TEXT_HI);
+ UI_GetThemeColor4ubv(TH_TEXT_HI, text_col);
}
else if (ELEM(tselem->type, TSE_RNA_PROPERTY, TSE_RNA_ARRAY_ELEM)) {
- UI_ThemeColorBlend(TH_BACK, TH_TEXT, 0.75f);
+ UI_GetThemeColorBlend3ubv(TH_BACK, TH_TEXT, 0.75f, text_col);
+ text_col[3] = 255;
}
else {
- UI_ThemeColor(TH_TEXT);
+ UI_GetThemeColor4ubv(TH_TEXT, text_col);
}
+ text_col[3] *= alpha_fac;
- UI_fontstyle_draw_simple(fstyle, startx + offsx, *starty + 5 * ufac, te->name);
+ UI_fontstyle_draw_simple(fstyle, startx + offsx, *starty + 5 * ufac, te->name, text_col);
}
offsx += (int)(UI_UNIT_X + UI_fontstyle_string_width(fstyle, te->name));
@@ -1613,24 +1490,33 @@ static void outliner_draw_tree_element(
if (tselem->type == 0 && te->idcode == ID_SCE) {
/* pass */
}
+ /* this tree element always has same amount of branches, so don't draw */
else if (tselem->type != TSE_R_LAYER) {
- /* this tree element always has same amount of branches, so don't draw */
-
int tempx = startx + offsx;
-
- /* divider */
- UI_ThemeColorShade(TH_BACK, -40);
- glRecti(tempx - 10.0f * ufac,
- *starty + 4.0f * ufac,
- tempx - 8.0f * ufac,
- *starty + UI_UNIT_Y - 4.0f * ufac);
-
+
glEnable(GL_BLEND);
- glPixelTransferf(GL_ALPHA_SCALE, 0.5);
-
- outliner_draw_iconrow(C, block, scene, soops, &te->subtree, 0, xmax, &tempx, *starty);
-
- glPixelTransferf(GL_ALPHA_SCALE, 1.0);
+
+ /* divider */
+ {
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ unsigned char col[4];
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ UI_GetThemeColorShade4ubv(TH_BACK, -40, col);
+ col[3] *= alpha_fac;
+
+ immUniformColor4ubv(col);
+ immRecti(pos, tempx - 10.0f * ufac,
+ *starty + 4.0f * ufac,
+ tempx - 8.0f * ufac,
+ *starty + UI_UNIT_Y - 4.0f * ufac);
+ immUnbindProgram();
+ }
+
+ outliner_draw_iconrow(C, block, scene, view_layer, soops, &te->subtree, 0, xmax, &tempx,
+ *starty, alpha_fac);
+
glDisable(GL_BLEND);
}
}
@@ -1640,16 +1526,20 @@ static void outliner_draw_tree_element(
te->xs = startx;
te->ys = *starty;
te->xend = startx + offsx;
-
+
if (TSELEM_OPEN(tselem, soops)) {
*starty -= UI_UNIT_Y;
- for (ten = te->subtree.first; ten; ten = ten->next) {
- outliner_draw_tree_element(C, block, fstyle, scene, ar, soops, ten, startx + UI_UNIT_X, starty, te_edit);
+ for (TreeElement *ten = te->subtree.first; ten; ten = ten->next) {
+ /* check if element needs to be drawn grayed out, but also gray out
+ * childs of a grayed out parent (pass on draw_grayed_out to childs) */
+ bool draw_childs_grayed_out = draw_grayed_out || (ten->drag_data != NULL);
+ outliner_draw_tree_element(C, block, fstyle, scene, view_layer, ar, soops, ten, draw_childs_grayed_out,
+ startx + UI_UNIT_X, starty, te_edit, te_floating);
}
}
else {
- for (ten = te->subtree.first; ten; ten = ten->next) {
+ for (TreeElement *ten = te->subtree.first; ten; ten = ten->next) {
outliner_set_coord_tree_element(ten, startx, *starty);
}
@@ -1657,115 +1547,284 @@ static void outliner_draw_tree_element(
}
}
-static void outliner_draw_hierarchy(SpaceOops *soops, ListBase *lb, int startx, int *starty)
+static void outliner_draw_tree_element_floating(
+ const ARegion *ar, const TreeElement *te_floating)
{
- TreeElement *te;
+ const TreeElement *te_insert = te_floating->drag_data->insert_handle;
+ const int line_width = 2;
+
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ int coord_y = te_insert->ys;
+ int coord_x = te_insert->xs;
+ float col[4];
+
+ if (te_insert == te_floating) {
+ /* don't draw anything */
+ return;
+ }
+
+ UI_GetThemeColorShade4fv(TH_BACK, -40, col);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ glEnable(GL_BLEND);
+
+ if (ELEM(te_floating->drag_data->insert_type, TE_INSERT_BEFORE, TE_INSERT_AFTER)) {
+ if (te_floating->drag_data->insert_type == TE_INSERT_BEFORE) {
+ coord_y += UI_UNIT_Y;
+ }
+ immUniformColor4fv(col);
+ glLineWidth(line_width);
+
+ immBegin(GWN_PRIM_LINE_STRIP, 2);
+ immVertex2f(pos, coord_x, coord_y);
+ immVertex2f(pos, ar->v2d.cur.xmax, coord_y);
+ immEnd();
+ }
+ else {
+ BLI_assert(te_floating->drag_data->insert_type == TE_INSERT_INTO);
+ immUniformColor3fvAlpha(col, col[3] * 0.5f);
+
+ immBegin(GWN_PRIM_TRI_STRIP, 4);
+ immVertex2f(pos, coord_x, coord_y + UI_UNIT_Y);
+ immVertex2f(pos, coord_x, coord_y);
+ immVertex2f(pos, ar->v2d.cur.xmax, coord_y + UI_UNIT_Y);
+ immVertex2f(pos, ar->v2d.cur.xmax, coord_y);
+ immEnd();
+ }
+
+ glDisable(GL_BLEND);
+ immUnbindProgram();
+}
+
+static void outliner_draw_hierarchy_lines_recursive(unsigned pos, SpaceOops *soops, ListBase *lb, int startx,
+ const unsigned char col[4], bool draw_grayed_out,
+ int *starty)
+{
+ TreeElement *te, *te_vertical_line_last = NULL;
TreeStoreElem *tselem;
int y1, y2;
-
- if (BLI_listbase_is_empty(lb)) return;
-
- y1 = y2 = *starty; /* for vertical lines between objects */
+
+ if (BLI_listbase_is_empty(lb)) {
+ return;
+ }
+
+ const unsigned char grayed_alpha = col[3] / 2;
+
+ /* For vertical lines between objects. */
+ y1 = *starty;
for (te = lb->first; te; te = te->next) {
- y2 = *starty;
+ bool draw_childs_grayed_out = draw_grayed_out || (te->drag_data != NULL);
tselem = TREESTORE(te);
-
- /* horizontal line? */
- if (tselem->type == 0 && (te->idcode == ID_OB || te->idcode == ID_SCE))
- glRecti(startx, *starty, startx + UI_UNIT_X, *starty - 1);
-
+
+ if (draw_childs_grayed_out) {
+ immUniformColor3ubvAlpha(col, grayed_alpha);
+ }
+ else {
+ immUniformColor4ubv(col);
+ }
+
+ /* Horizontal Line? */
+ if (tselem->type == 0 && (te->idcode == ID_OB || te->idcode == ID_SCE)) {
+ immRecti(pos, startx, *starty, startx + UI_UNIT_X, *starty - 1);
+
+ /* Vertical Line? */
+ if (te->idcode == ID_OB) {
+ te_vertical_line_last = te;
+ y2 = *starty;
+ }
+ }
+
*starty -= UI_UNIT_Y;
if (TSELEM_OPEN(tselem, soops))
- outliner_draw_hierarchy(soops, &te->subtree, startx + UI_UNIT_X, starty);
+ outliner_draw_hierarchy_lines_recursive(pos, soops, &te->subtree, startx + UI_UNIT_X,
+ col, draw_childs_grayed_out, starty);
}
-
- /* vertical line */
- te = lb->last;
- if (te->parent || lb->first != lb->last) {
- tselem = TREESTORE(te);
- if (tselem->type == 0 && te->idcode == ID_OB) {
-
- glRecti(startx, y1 + UI_UNIT_Y, startx + 1, y2);
- }
+
+ if (draw_grayed_out) {
+ immUniformColor3ubvAlpha(col, grayed_alpha);
+ }
+ else {
+ immUniformColor4ubv(col);
}
+
+ /* Vertical line. */
+ te = te_vertical_line_last;
+ if ((te != NULL) && (te->parent || lb->first != lb->last)) {
+ immRecti(pos, startx, y1 + UI_UNIT_Y, startx + 1, y2);
+ }
+}
+
+static void outliner_draw_hierarchy_lines(SpaceOops *soops, ListBase *lb, int startx, int *starty)
+{
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ unsigned char col[4];
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ UI_GetThemeColorBlend3ubv(TH_BACK, TH_TEXT, 0.4f, col);
+ col[3] = 255;
+
+ glEnable(GL_BLEND);
+ outliner_draw_hierarchy_lines_recursive(pos, soops, lb, startx, col, false, starty);
+ glDisable(GL_BLEND);
+
+ immUnbindProgram();
}
static void outliner_draw_struct_marks(ARegion *ar, SpaceOops *soops, ListBase *lb, int *starty)
{
TreeElement *te;
TreeStoreElem *tselem;
-
+
for (te = lb->first; te; te = te->next) {
tselem = TREESTORE(te);
/* selection status */
if (TSELEM_OPEN(tselem, soops))
- if (tselem->type == TSE_RNA_STRUCT)
- glRecti(0, *starty + 1, (int)ar->v2d.cur.xmax, *starty + UI_UNIT_Y - 1);
+ if (tselem->type == TSE_RNA_STRUCT) {
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immThemeColorShadeAlpha(TH_BACK, -15, -200);
+ immRecti(pos, 0, *starty + 1, (int)ar->v2d.cur.xmax, *starty + UI_UNIT_Y - 1);
+ immUnbindProgram();
+ }
*starty -= UI_UNIT_Y;
if (TSELEM_OPEN(tselem, soops)) {
outliner_draw_struct_marks(ar, soops, &te->subtree, starty);
- if (tselem->type == TSE_RNA_STRUCT)
- fdrawline(0, (float)*starty + UI_UNIT_Y, ar->v2d.cur.xmax, (float)*starty + UI_UNIT_Y);
+ if (tselem->type == TSE_RNA_STRUCT) {
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immThemeColorShadeAlpha(TH_BACK, -15, -200);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2f(pos, 0, (float)*starty + UI_UNIT_Y);
+ immVertex2f(pos, ar->v2d.cur.xmax, (float)*starty + UI_UNIT_Y);
+ immEnd();
+
+ immUnbindProgram();
+ }
}
}
}
-static void outliner_draw_selection(ARegion *ar, SpaceOops *soops, ListBase *lb, int *starty)
+static void outliner_draw_highlights_recursive(
+ unsigned pos, const ARegion *ar, const SpaceOops *soops, const ListBase *lb,
+ const float col_selection[4], const float col_highlight[4], const float col_searchmatch[4],
+ int start_x, int *io_start_y)
{
- TreeElement *te;
- TreeStoreElem *tselem;
-
- for (te = lb->first; te; te = te->next) {
- tselem = TREESTORE(te);
-
+ const bool is_searching = SEARCHING_OUTLINER(soops) ||
+ (soops->outlinevis == SO_DATABLOCKS &&
+ (soops->filter & SO_FILTER_SEARCH) &&
+ soops->search_string[0] != 0);
+
+ for (TreeElement *te = lb->first; te; te = te->next) {
+ const TreeStoreElem *tselem = TREESTORE(te);
+ const int start_y = *io_start_y;
+
/* selection status */
if (tselem->flag & TSE_SELECTED) {
- glRecti(0, *starty + 1, (int)ar->v2d.cur.xmax, *starty + UI_UNIT_Y - 1);
+ immUniformColor4fv(col_selection);
+ immRecti(pos, 0, start_y + 1, (int)ar->v2d.cur.xmax, start_y + UI_UNIT_Y - 1);
+ }
+
+ /* search match highlights
+ * we don't expand items when searching in the datablocks but we
+ * still want to highlight any filter matches. */
+ if (is_searching && (tselem->flag & TSE_SEARCHMATCH)) {
+ immUniformColor4fv(col_searchmatch);
+ immRecti(pos, start_x, start_y + 1, ar->v2d.cur.xmax, start_y + UI_UNIT_Y - 1);
+ }
+
+ /* mouse hover highlights */
+ if ((tselem->flag & TSE_HIGHLIGHTED) || (te->drag_data != NULL)) {
+ immUniformColor4fv(col_highlight);
+ immRecti(pos, 0, start_y + 1, (int)ar->v2d.cur.xmax, start_y + UI_UNIT_Y - 1);
+ }
+
+ *io_start_y -= UI_UNIT_Y;
+ if (TSELEM_OPEN(tselem, soops)) {
+ outliner_draw_highlights_recursive(
+ pos, ar, soops, &te->subtree, col_selection, col_highlight, col_searchmatch,
+ start_x + UI_UNIT_X, io_start_y);
}
- *starty -= UI_UNIT_Y;
- if (TSELEM_OPEN(tselem, soops)) outliner_draw_selection(ar, soops, &te->subtree, starty);
}
}
+static void outliner_draw_highlights(ARegion *ar, SpaceOops *soops, int startx, int *starty)
+{
+ const float col_highlight[4] = {1.0f, 1.0f, 1.0f, 0.13f};
+ float col_selection[4], col_searchmatch[4];
+
+ UI_GetThemeColor3fv(TH_SELECT_HIGHLIGHT, col_selection);
+ col_selection[3] = 1.0f; /* no alpha */
+ UI_GetThemeColor4fv(TH_MATCH, col_searchmatch);
+ col_searchmatch[3] = 0.5f;
+
+ glEnable(GL_BLEND);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ outliner_draw_highlights_recursive(pos, ar, soops, &soops->tree, col_selection, col_highlight, col_searchmatch,
+ startx, starty);
+ immUnbindProgram();
+ glDisable(GL_BLEND);
+}
-static void outliner_draw_tree(bContext *C, uiBlock *block, Scene *scene, ARegion *ar,
- SpaceOops *soops, TreeElement **te_edit)
+static void outliner_draw_tree(
+ bContext *C, uiBlock *block, Scene *scene, ViewLayer *view_layer, ARegion *ar,
+ SpaceOops *soops, const bool has_restrict_icons,
+ TreeElement **te_edit)
{
const uiFontStyle *fstyle = UI_FSTYLE_WIDGET;
- TreeElement *te;
+ TreeElement *te_floating = NULL;
int starty, startx;
- float col[3];
-
+
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // only once
-
- if (ELEM(soops->outlinevis, SO_DATABLOCKS, SO_USERDEF)) {
+
+ if (soops->outlinevis == SO_DATABLOCKS) {
/* struct marks */
- UI_ThemeColorShadeAlpha(TH_BACK, -15, -200);
- //UI_ThemeColorShade(TH_BACK, -20);
starty = (int)ar->v2d.tot.ymax - UI_UNIT_Y - OL_Y_OFFSET;
outliner_draw_struct_marks(ar, soops, &soops->tree, &starty);
}
-
- /* always draw selection fill before hierarchy */
- UI_GetThemeColor3fv(TH_SELECT_HIGHLIGHT, col);
- glColor3fv(col);
+
+ /* draw highlights before hierarchy */
starty = (int)ar->v2d.tot.ymax - UI_UNIT_Y - OL_Y_OFFSET;
- outliner_draw_selection(ar, soops, &soops->tree, &starty);
-
+ startx = 0;
+ outliner_draw_highlights(ar, soops, startx, &starty);
+
+ /* set scissor so tree elements or lines can't overlap restriction icons */
+ GLfloat scissor[4] = {0};
+ if (has_restrict_icons) {
+ int mask_x = BLI_rcti_size_x(&ar->v2d.mask) - (int)OL_TOGW + 1;
+ CLAMP_MIN(mask_x, 0);
+
+ glGetFloatv(GL_SCISSOR_BOX, scissor);
+ glScissor(ar->winrct.xmin, ar->winrct.ymin, mask_x, ar->winy);
+ }
+
// gray hierarchy lines
- UI_ThemeColorBlend(TH_BACK, TH_TEXT, 0.4f);
+
starty = (int)ar->v2d.tot.ymax - UI_UNIT_Y / 2 - OL_Y_OFFSET;
startx = UI_UNIT_X / 2 - 1.0f;
- outliner_draw_hierarchy(soops, &soops->tree, startx, &starty);
-
+ outliner_draw_hierarchy_lines(soops, &soops->tree, startx, &starty);
+
// items themselves
starty = (int)ar->v2d.tot.ymax - UI_UNIT_Y - OL_Y_OFFSET;
startx = 0;
- for (te = soops->tree.first; te; te = te->next) {
- outliner_draw_tree_element(C, block, fstyle, scene, ar, soops, te, startx, &starty, te_edit);
+ for (TreeElement *te = soops->tree.first; te; te = te->next) {
+ outliner_draw_tree_element(C, block, fstyle, scene, view_layer, ar, soops, te, te->drag_data != NULL,
+ startx, &starty, te_edit, &te_floating);
+ }
+ if (te_floating && te_floating->drag_data->insert_handle) {
+ outliner_draw_tree_element_floating(ar, te_floating);
+ }
+
+ if (has_restrict_icons) {
+ /* reset scissor */
+ glScissor(UNPACK4(scissor));
}
}
@@ -1774,53 +1833,57 @@ static void outliner_back(ARegion *ar)
{
int ystart;
- UI_ThemeColorShade(TH_BACK, 6);
ystart = (int)ar->v2d.tot.ymax;
ystart = UI_UNIT_Y * (ystart / (UI_UNIT_Y)) - OL_Y_OFFSET;
-
- while (ystart + 2 * UI_UNIT_Y > ar->v2d.cur.ymin) {
- glRecti(0, ystart, (int)ar->v2d.cur.xmax, ystart + UI_UNIT_Y);
- ystart -= 2 * UI_UNIT_Y;
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformThemeColorShade(TH_BACK, 6);
+
+ const float x1 = 0.0f, x2 = ar->v2d.cur.xmax;
+ float y1 = ystart, y2;
+ int tot = (int)floor(ystart - ar->v2d.cur.ymin + 2 * UI_UNIT_Y) / (2 * UI_UNIT_Y);
+
+ if (tot > 0) {
+ immBegin(GWN_PRIM_TRIS, 6 * tot);
+ while (tot--) {
+ y1 -= 2 * UI_UNIT_Y;
+ y2 = y1 + UI_UNIT_Y;
+ immVertex2f(pos, x1, y1);
+ immVertex2f(pos, x2, y1);
+ immVertex2f(pos, x2, y2);
+
+ immVertex2f(pos, x1, y1);
+ immVertex2f(pos, x2, y2);
+ immVertex2f(pos, x1, y2);
+ }
+ immEnd();
}
+ immUnbindProgram();
}
static void outliner_draw_restrictcols(ARegion *ar)
{
- int ystart;
-
- /* background underneath */
- UI_ThemeColor(TH_BACK);
- glRecti((int)(ar->v2d.cur.xmax - OL_TOGW),
- (int)(ar->v2d.cur.ymin - 1), (int)ar->v2d.cur.xmax, (int)ar->v2d.cur.ymax);
-
- UI_ThemeColorShade(TH_BACK, 6);
- ystart = (int)ar->v2d.tot.ymax;
- ystart = UI_UNIT_Y * (ystart / (UI_UNIT_Y)) - OL_Y_OFFSET;
-
- while (ystart + 2 * UI_UNIT_Y > ar->v2d.cur.ymin) {
- glRecti((int)ar->v2d.cur.xmax - OL_TOGW, ystart, (int)ar->v2d.cur.xmax, ystart + UI_UNIT_Y);
- ystart -= 2 * UI_UNIT_Y;
- }
-
- UI_ThemeColorShadeAlpha(TH_BACK, -15, -200);
-
- /* view */
- sdrawline((int)(ar->v2d.cur.xmax - OL_TOG_RESTRICT_VIEWX),
- (int)ar->v2d.cur.ymax,
- (int)(ar->v2d.cur.xmax - OL_TOG_RESTRICT_VIEWX),
- (int)ar->v2d.cur.ymin);
-
- /* render */
- sdrawline((int)(ar->v2d.cur.xmax - OL_TOG_RESTRICT_SELECTX),
- (int)ar->v2d.cur.ymax,
- (int)(ar->v2d.cur.xmax - OL_TOG_RESTRICT_SELECTX),
- (int)ar->v2d.cur.ymin);
-
- /* render */
- sdrawline((int)(ar->v2d.cur.xmax - OL_TOG_RESTRICT_RENDERX),
- (int)ar->v2d.cur.ymax,
- (int)(ar->v2d.cur.xmax - OL_TOG_RESTRICT_RENDERX),
- (int)ar->v2d.cur.ymin);
+ glLineWidth(1.0f);
+
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformThemeColorShadeAlpha(TH_BACK, -15, -200);
+ immBegin(GWN_PRIM_LINES, 6);
+
+ immVertex2i(pos, (int)(ar->v2d.cur.xmax - OL_TOG_RESTRICT_VIEWX), (int)ar->v2d.cur.ymax);
+ immVertex2i(pos, (int)(ar->v2d.cur.xmax - OL_TOG_RESTRICT_VIEWX), (int)ar->v2d.cur.ymin);
+
+ immVertex2i(pos, (int)(ar->v2d.cur.xmax - OL_TOG_RESTRICT_SELECTX), (int)ar->v2d.cur.ymax);
+ immVertex2i(pos, (int)(ar->v2d.cur.xmax - OL_TOG_RESTRICT_SELECTX), (int)ar->v2d.cur.ymin);
+
+ immVertex2i(pos, (int)(ar->v2d.cur.xmax - OL_TOG_RESTRICT_RENDERX), (int)ar->v2d.cur.ymax);
+ immVertex2i(pos, (int)(ar->v2d.cur.xmax - OL_TOG_RESTRICT_RENDERX), (int)ar->v2d.cur.ymin);
+
+ immEnd();
+ immUnbindProgram();
}
/* ****************************************************** */
@@ -1828,21 +1891,25 @@ static void outliner_draw_restrictcols(ARegion *ar)
void draw_outliner(const bContext *C)
{
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
Main *mainvar = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
ARegion *ar = CTX_wm_region(C);
View2D *v2d = &ar->v2d;
SpaceOops *soops = CTX_wm_space_outliner(C);
uiBlock *block;
int sizey = 0, sizex = 0, sizex_rna = 0;
TreeElement *te_edit = NULL;
+ bool has_restrict_icons;
- outliner_build_tree(mainvar, scene, soops); // always
+ outliner_build_tree(mainvar, &eval_ctx, scene, view_layer, soops, ar); // always
/* get extents of data */
outliner_height(soops, &soops->tree, &sizey);
- if (ELEM(soops->outlinevis, SO_DATABLOCKS, SO_USERDEF)) {
+ if (soops->outlinevis == SO_DATABLOCKS) {
/* RNA has two columns:
* - column 1 is (max_width + OL_RNA_COL_SPACEX) or
* (OL_RNA_COL_X), whichever is wider...
@@ -1857,6 +1924,7 @@ void draw_outliner(const bContext *C)
/* get width of data (for setting 'tot' rect, this is column 1 + column 2 + a bit extra) */
sizex = sizex_rna + OL_RNA_COL_SIZEX + 50;
+ has_restrict_icons = false;
}
else {
/* width must take into account restriction columns (if visible) so that entries will still be visible */
@@ -1866,9 +1934,11 @@ void draw_outliner(const bContext *C)
/* constant offset for restriction columns */
// XXX this isn't that great yet...
- if ((soops->flag & SO_HIDE_RESTRICTCOLS) == 0)
+ if ((soops->flag & SO_HIDE_RESTRICTCOLS) == 0) {
sizex += OL_TOGW * 3;
-
+ }
+
+ has_restrict_icons = !(soops->flag & SO_HIDE_RESTRICTCOLS);
}
/* adds vertical offset */
@@ -1885,19 +1955,19 @@ void draw_outliner(const bContext *C)
/* draw outliner stuff (background, hierarchy lines and names) */
outliner_back(ar);
block = UI_block_begin(C, ar, __func__, UI_EMBOSS);
- outliner_draw_tree((bContext *)C, block, scene, ar, soops, &te_edit);
-
- if (ELEM(soops->outlinevis, SO_DATABLOCKS, SO_USERDEF)) {
+ outliner_draw_tree((bContext *)C, block, scene, view_layer, ar, soops, has_restrict_icons, &te_edit);
+
+ if (soops->outlinevis == SO_DATABLOCKS) {
/* draw rna buttons */
outliner_draw_rnacols(ar, sizex_rna);
outliner_draw_rnabuts(block, ar, soops, sizex_rna, &soops->tree);
}
- else if ((soops->outlinevis == SO_ID_ORPHANS) && !(soops->flag & SO_HIDE_RESTRICTCOLS)) {
+ else if ((soops->outlinevis == SO_ID_ORPHANS) && has_restrict_icons) {
/* draw user toggle columns */
outliner_draw_restrictcols(ar);
outliner_draw_userbuts(block, ar, soops, &soops->tree);
}
- else if (!(soops->flag & SO_HIDE_RESTRICTCOLS)) {
+ else if (has_restrict_icons) {
/* draw restriction columns */
outliner_draw_restrictcols(ar);
outliner_draw_restrictbuts(block, scene, ar, soops, &soops->tree);
diff --git a/source/blender/editors/space_outliner/outliner_edit.c b/source/blender/editors/space_outliner/outliner_edit.c
index 0b001ca9578..6bbec6a1a48 100644
--- a/source/blender/editors/space_outliner/outliner_edit.c
+++ b/source/blender/editors/space_outliner/outliner_edit.c
@@ -51,9 +51,9 @@
#include "BKE_animsys.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_global.h"
#include "BKE_idcode.h"
+#include "BKE_layer.h"
#include "BKE_library.h"
#include "BKE_library_query.h"
#include "BKE_library_remap.h"
@@ -64,6 +64,9 @@
#include "BKE_material.h"
#include "BKE_group.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#include "../blenloader/BLO_readfile.h"
#include "ED_object.h"
@@ -148,8 +151,46 @@ TreeElement *outliner_dropzone_find(const SpaceOops *soops, const float fmval[2]
return NULL;
}
+
/* ************************************************************** */
-/* Click Activated */
+
+/* Highlight --------------------------------------------------- */
+
+static int outliner_highlight_update(bContext *C, wmOperator *UNUSED(op), const wmEvent *event)
+{
+ ARegion *ar = CTX_wm_region(C);
+ SpaceOops *soops = CTX_wm_space_outliner(C);
+ const float my = UI_view2d_region_to_view_y(&ar->v2d, event->mval[1]);
+
+ TreeElement *hovered_te = outliner_find_item_at_y(soops, &soops->tree, my);
+ bool changed = false;
+
+ if (!hovered_te || !(hovered_te->store_elem->flag & TSE_HIGHLIGHTED)) {
+ changed = outliner_set_flag(&soops->tree, TSE_HIGHLIGHTED, false);
+ if (hovered_te) {
+ hovered_te->store_elem->flag |= TSE_HIGHLIGHTED;
+ changed = true;
+ }
+ }
+
+ if (changed) {
+ soops->storeflag |= SO_TREESTORE_REDRAW; /* only needs to redraw, no rebuild */
+ ED_region_tag_redraw(ar);
+ }
+
+ return (OPERATOR_FINISHED | OPERATOR_PASS_THROUGH);
+}
+
+void OUTLINER_OT_highlight_update(wmOperatorType *ot)
+{
+ ot->name = "Update Highlight";
+ ot->idname = "OUTLINER_OT_highlight_update";
+ ot->description = "Update the item highlight based on the current mouse position";
+
+ ot->invoke = outliner_highlight_update;
+
+ ot->poll = ED_operator_outliner_active;
+}
/* Toggle Open/Closed ------------------------------------------- */
@@ -216,8 +257,11 @@ void OUTLINER_OT_item_openclose(wmOperatorType *ot)
/* Rename --------------------------------------------------- */
-static void do_item_rename(ARegion *ar, TreeElement *te, TreeStoreElem *tselem, ReportList *reports)
+static void do_item_rename(const Scene *scene, ARegion *ar, TreeElement *te, TreeStoreElem *tselem,
+ ReportList *reports)
{
+ bool add_textbut = false;
+
/* can't rename rna datablocks entries or listbases */
if (ELEM(tselem->type, TSE_RNA_STRUCT, TSE_RNA_PROPERTY, TSE_RNA_ARRAY_ELEM, TSE_ID_BASE)) {
/* do nothing */;
@@ -230,6 +274,18 @@ static void do_item_rename(ARegion *ar, TreeElement *te, TreeStoreElem *tselem,
else if (ELEM(tselem->type, TSE_SEQUENCE, TSE_SEQ_STRIP, TSE_SEQUENCE_DUP)) {
BKE_report(reports, RPT_WARNING, "Cannot edit sequence name");
}
+ else if (ELEM(tselem->type, TSE_LAYER_COLLECTION, TSE_SCENE_COLLECTION)) {
+ SceneCollection *master = BKE_collection_master(&scene->id);
+
+ if ((tselem->type == TSE_SCENE_COLLECTION && te->directdata == master) ||
+ (((LayerCollection *)te->directdata)->scene_collection == master))
+ {
+ BKE_report(reports, RPT_WARNING, "Cannot edit name of master collection");
+ }
+ else {
+ add_textbut = true;
+ }
+ }
else if (ID_IS_LINKED(tselem->id)) {
BKE_report(reports, RPT_WARNING, "Cannot edit external libdata");
}
@@ -237,34 +293,39 @@ static void do_item_rename(ARegion *ar, TreeElement *te, TreeStoreElem *tselem,
BKE_report(reports, RPT_WARNING, "Cannot edit the path of an indirectly linked library");
}
else {
+ add_textbut = true;
+ }
+
+ if (add_textbut) {
tselem->flag |= TSE_TEXTBUT;
ED_region_tag_redraw(ar);
}
}
void item_rename_cb(
- bContext *C, ReportList *reports, Scene *UNUSED(scene), TreeElement *te,
+ bContext *C, ReportList *reports, Scene *scene, TreeElement *te,
TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem, void *UNUSED(user_data))
{
ARegion *ar = CTX_wm_region(C);
- do_item_rename(ar, te, tselem, reports);
+ do_item_rename(scene, ar, te, tselem, reports);
}
-static int do_outliner_item_rename(ReportList *reports, ARegion *ar, TreeElement *te, const float mval[2])
+static int do_outliner_item_rename(const Scene *scene, ReportList *reports, ARegion *ar, TreeElement *te,
+ const float mval[2])
{
if (mval[1] > te->ys && mval[1] < te->ys + UI_UNIT_Y) {
TreeStoreElem *tselem = TREESTORE(te);
/* click on name */
if (mval[0] > te->xs + UI_UNIT_X * 2 && mval[0] < te->xend) {
- do_item_rename(ar, te, tselem, reports);
+ do_item_rename(scene, ar, te, tselem, reports);
return 1;
}
return 0;
}
for (te = te->subtree.first; te; te = te->next) {
- if (do_outliner_item_rename(reports, ar, te, mval)) return 1;
+ if (do_outliner_item_rename(scene, reports, ar, te, mval)) return 1;
}
return 0;
}
@@ -280,7 +341,7 @@ static int outliner_item_rename(bContext *C, wmOperator *op, const wmEvent *even
UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &fmval[0], &fmval[1]);
for (te = soops->tree.first; te; te = te->next) {
- if (do_outliner_item_rename(op->reports, ar, te, fmval)) {
+ if (do_outliner_item_rename(CTX_data_scene(C), op->reports, ar, te, fmval)) {
changed = true;
break;
}
@@ -403,7 +464,6 @@ void OUTLINER_OT_id_delete(wmOperatorType *ot)
static int outliner_id_remap_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
- Scene *scene = CTX_data_scene(C);
SpaceOops *soops = CTX_wm_space_outliner(C);
const short id_type = (short)RNA_enum_get(op->ptr, "id_type");
@@ -433,7 +493,7 @@ static int outliner_id_remap_exec(bContext *C, wmOperator *op)
BKE_main_lib_objects_recalc_all(bmain);
/* recreate dependency graph to include new objects */
- DAG_scene_relations_rebuild(bmain, scene);
+ DEG_relations_tag_update(bmain);
/* free gpu materials, some materials depend on existing objects, such as lamps so freeing correctly refreshes */
GPU_materials_free();
@@ -744,17 +804,34 @@ int outliner_has_one_flag(ListBase *lb, short flag, const int curlevel)
return 0;
}
-void outliner_set_flag(ListBase *lb, short flag, short set)
+/**
+ * Set or unset \a flag for all outliner elements in \a lb and sub-trees.
+ * \return if any flag was modified.
+ */
+bool outliner_set_flag(ListBase *lb, short flag, short set)
{
TreeElement *te;
TreeStoreElem *tselem;
-
+ bool changed = false;
+ bool has_flag;
+
for (te = lb->first; te; te = te->next) {
tselem = TREESTORE(te);
- if (set == 0) tselem->flag &= ~flag;
- else tselem->flag |= flag;
- outliner_set_flag(&te->subtree, flag, set);
+ has_flag = (tselem->flag & flag);
+ if (set == 0) {
+ if (has_flag) {
+ tselem->flag &= ~flag;
+ changed = true;
+ }
+ }
+ else if (!has_flag) {
+ tselem->flag |= flag;
+ changed = true;
+ }
+ changed |= outliner_set_flag(&te->subtree, flag, set);
}
+
+ return changed;
}
/* Restriction Columns ------------------------------- */
@@ -782,181 +859,6 @@ int common_restrict_check(bContext *C, Object *ob)
}
/* =============================================== */
-/* Restriction toggles */
-
-/* Toggle Visibility ---------------------------------------- */
-
-void object_toggle_visibility_cb(
- bContext *C, ReportList *reports, Scene *scene, TreeElement *te,
- TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem, void *UNUSED(user_data))
-{
- Base *base = (Base *)te->directdata;
- Object *ob = (Object *)tselem->id;
-
- if (ID_IS_LINKED(tselem->id)) {
- BKE_report(reports, RPT_WARNING, "Cannot edit external libdata");
- return;
- }
-
- /* add check for edit mode */
- if (!common_restrict_check(C, ob)) return;
-
- if (base || (base = BKE_scene_base_find(scene, ob))) {
- if ((base->object->restrictflag ^= OB_RESTRICT_VIEW)) {
- ED_base_object_select(base, BA_DESELECT);
- }
- }
-}
-
-void group_toggle_visibility_cb(
- bContext *UNUSED(C), ReportList *UNUSED(reports), Scene *scene, TreeElement *UNUSED(te),
- TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem, void *UNUSED(user_data))
-{
- Group *group = (Group *)tselem->id;
- restrictbutton_gr_restrict_flag(scene, group, OB_RESTRICT_VIEW);
-}
-
-static int outliner_toggle_visibility_exec(bContext *C, wmOperator *op)
-{
- Main *bmain = CTX_data_main(C);
- SpaceOops *soops = CTX_wm_space_outliner(C);
- Scene *scene = CTX_data_scene(C);
- ARegion *ar = CTX_wm_region(C);
-
- outliner_do_object_operation(C, op->reports, scene, soops, &soops->tree, object_toggle_visibility_cb);
-
- DAG_id_type_tag(bmain, ID_OB);
- WM_event_add_notifier(C, NC_SCENE | ND_OB_VISIBLE, scene);
- ED_region_tag_redraw(ar);
-
- return OPERATOR_FINISHED;
-}
-
-void OUTLINER_OT_visibility_toggle(wmOperatorType *ot)
-{
- /* identifiers */
- ot->name = "Toggle Visibility";
- ot->idname = "OUTLINER_OT_visibility_toggle";
- ot->description = "Toggle the visibility of selected items";
-
- /* callbacks */
- ot->exec = outliner_toggle_visibility_exec;
- ot->poll = ED_operator_outliner_active_no_editobject;
-
- ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-}
-
-/* Toggle Selectability ---------------------------------------- */
-
-void object_toggle_selectability_cb(
- bContext *UNUSED(C), ReportList *reports, Scene *scene, TreeElement *te,
- TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem, void *UNUSED(user_data))
-{
- Base *base = (Base *)te->directdata;
-
- if (ID_IS_LINKED(tselem->id)) {
- BKE_report(reports, RPT_WARNING, "Cannot edit external libdata");
- return;
- }
-
- if (base == NULL) base = BKE_scene_base_find(scene, (Object *)tselem->id);
- if (base) {
- base->object->restrictflag ^= OB_RESTRICT_SELECT;
- }
-}
-
-void group_toggle_selectability_cb(
- bContext *UNUSED(C), ReportList *UNUSED(reports), Scene *scene, TreeElement *UNUSED(te),
- TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem, void *UNUSED(user_data))
-{
- Group *group = (Group *)tselem->id;
- restrictbutton_gr_restrict_flag(scene, group, OB_RESTRICT_SELECT);
-}
-
-static int outliner_toggle_selectability_exec(bContext *C, wmOperator *op)
-{
- SpaceOops *soops = CTX_wm_space_outliner(C);
- Scene *scene = CTX_data_scene(C);
- ARegion *ar = CTX_wm_region(C);
-
- outliner_do_object_operation(C, op->reports, scene, soops, &soops->tree, object_toggle_selectability_cb);
-
- WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
- ED_region_tag_redraw(ar);
-
- return OPERATOR_FINISHED;
-}
-
-void OUTLINER_OT_selectability_toggle(wmOperatorType *ot)
-{
- /* identifiers */
- ot->name = "Toggle Selectability";
- ot->idname = "OUTLINER_OT_selectability_toggle";
- ot->description = "Toggle the selectability";
-
- /* callbacks */
- ot->exec = outliner_toggle_selectability_exec;
- ot->poll = ED_operator_outliner_active_no_editobject;
-
- ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-}
-
-/* Toggle Renderability ---------------------------------------- */
-
-void object_toggle_renderability_cb(
- bContext *UNUSED(C), ReportList *reports, Scene *scene, TreeElement *te,
- TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem, void *UNUSED(user_data))
-{
- Base *base = (Base *)te->directdata;
-
- if (ID_IS_LINKED(tselem->id)) {
- BKE_report(reports, RPT_WARNING, "Cannot edit external libdata");
- return;
- }
-
- if (base == NULL) base = BKE_scene_base_find(scene, (Object *)tselem->id);
- if (base) {
- base->object->restrictflag ^= OB_RESTRICT_RENDER;
- }
-}
-
-void group_toggle_renderability_cb(
- bContext *UNUSED(C), ReportList *UNUSED(reports), Scene *scene, TreeElement *UNUSED(te),
- TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem, void *UNUSED(user_data))
-{
- Group *group = (Group *)tselem->id;
- restrictbutton_gr_restrict_flag(scene, group, OB_RESTRICT_RENDER);
-}
-
-static int outliner_toggle_renderability_exec(bContext *C, wmOperator *op)
-{
- Main *bmain = CTX_data_main(C);
- SpaceOops *soops = CTX_wm_space_outliner(C);
- Scene *scene = CTX_data_scene(C);
-
- outliner_do_object_operation(C, op->reports, scene, soops, &soops->tree, object_toggle_renderability_cb);
-
- DAG_id_type_tag(bmain, ID_OB);
- WM_event_add_notifier(C, NC_SCENE | ND_OB_RENDER, scene);
-
- return OPERATOR_FINISHED;
-}
-
-void OUTLINER_OT_renderability_toggle(wmOperatorType *ot)
-{
- /* identifiers */
- ot->name = "Toggle Renderability";
- ot->idname = "OUTLINER_OT_renderability_toggle";
- ot->description = "Toggle the renderability of selected items";
-
- /* callbacks */
- ot->exec = outliner_toggle_renderability_exec;
- ot->poll = ED_operator_outliner_active;
-
- ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-}
-
-/* =============================================== */
/* Outliner setting toggles */
/* Toggle Expanded (Outliner) ---------------------------------------- */
@@ -1048,7 +950,7 @@ static void outliner_set_coordinates_element_recursive(SpaceOops *soops, TreeEle
}
/* to retrieve coordinates with redrawing the entire tree */
-static void outliner_set_coordinates(ARegion *ar, SpaceOops *soops)
+void outliner_set_coordinates(ARegion *ar, SpaceOops *soops)
{
TreeElement *te;
int starty = (int)(ar->v2d.tot.ymax) - UI_UNIT_Y;
@@ -1076,15 +978,16 @@ static int outliner_open_back(TreeElement *te)
static int outliner_show_active_exec(bContext *C, wmOperator *UNUSED(op))
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
SpaceOops *so = CTX_wm_space_outliner(C);
- Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
ARegion *ar = CTX_wm_region(C);
View2D *v2d = &ar->v2d;
TreeElement *te;
int xdelta, ytop;
- Object *obact = OBACT;
+ Object *obact = OBACT(view_layer);
if (!obact)
return OPERATOR_CANCELLED;
@@ -1096,13 +999,13 @@ static int outliner_show_active_exec(bContext *C, wmOperator *UNUSED(op))
/* traverse down the bone hierarchy in case of armature */
TreeElement *te_obact = te;
- if (obact->mode & OB_MODE_POSE) {
+ if (workspace->object_mode & OB_MODE_POSE) {
bPoseChannel *pchan = CTX_data_active_pose_bone(C);
if (pchan) {
te = outliner_find_posechannel(&te_obact->subtree, pchan);
}
}
- else if (obact->mode & OB_MODE_EDIT) {
+ else if (workspace->object_mode & OB_MODE_EDIT) {
EditBone *ebone = CTX_data_active_bone(C);
if (ebone) {
te = outliner_find_editbone(&te_obact->subtree, ebone);
@@ -2002,9 +1905,9 @@ static int parent_drop_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
- ED_object_parent_set(op->reports, bmain, scene, ob, par, partype, false, false, NULL);
+ ED_object_parent_set(op->reports, C, scene, ob, par, partype, false, false, NULL);
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
WM_event_add_notifier(C, NC_OBJECT | ND_PARENT, NULL);
@@ -2020,6 +1923,7 @@ static int parent_drop_invoke(bContext *C, wmOperator *op, const wmEvent *event)
Main *bmain = CTX_data_main(C);
Scene *scene = NULL;
TreeElement *te = NULL;
+ TreeStoreElem *tselem;
char childname[MAX_ID_NAME];
char parname[MAX_ID_NAME];
int partype = 0;
@@ -2029,8 +1933,21 @@ static int parent_drop_invoke(bContext *C, wmOperator *op, const wmEvent *event)
/* Find object hovered over */
te = outliner_dropzone_find(soops, fmval, true);
+ tselem = te ? TREESTORE(te) : NULL;
- if (te) {
+ if (tselem && ELEM(tselem->type, TSE_LAYER_COLLECTION, TSE_SCENE_COLLECTION)) {
+ SceneCollection *sc = outliner_scene_collection_from_tree_element(te);
+
+ scene = BKE_scene_find_from_collection(bmain, sc);
+ BLI_assert(scene);
+ RNA_string_get(op->ptr, "child", childname);
+ ob = (Object *)BKE_libblock_find_name(ID_OB, childname);
+ BKE_collection_object_add(&scene->id, sc, ob);
+
+ DEG_relations_tag_update(bmain);
+ WM_event_add_notifier(C, NC_SCENE | ND_LAYER, scene);
+ }
+ else if (te) {
RNA_string_set(op->ptr, "parent", te->name);
/* Identify parent and child */
RNA_string_get(op->ptr, "child", childname);
@@ -2062,8 +1979,8 @@ static int parent_drop_invoke(bContext *C, wmOperator *op, const wmEvent *event)
}
if ((par->type != OB_ARMATURE) && (par->type != OB_CURVE) && (par->type != OB_LATTICE)) {
- if (ED_object_parent_set(op->reports, bmain, scene, ob, par, partype, false, false, NULL)) {
- DAG_relations_tag_update(bmain);
+ if (ED_object_parent_set(op->reports, C, scene, ob, par, partype, false, false, NULL)) {
+ DEG_relations_tag_update(bmain);
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
WM_event_add_notifier(C, NC_OBJECT | ND_PARENT, NULL);
}
@@ -2170,7 +2087,7 @@ static int outliner_parenting_poll(bContext *C)
SpaceOops *soops = CTX_wm_space_outliner(C);
if (soops) {
- return ELEM(soops->outlinevis, SO_ALL_SCENES, SO_CUR_SCENE, SO_VISIBLE, SO_GROUPS);
+ return ELEM(soops->outlinevis, SO_VIEW_LAYER, SO_COLLECTIONS, SO_GROUPS);
}
return false;
@@ -2191,7 +2108,7 @@ static int parent_clear_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSE
ED_object_parent_clear(ob, RNA_enum_get(op->ptr, "type"));
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
WM_event_add_notifier(C, NC_OBJECT | ND_PARENT, NULL);
return OPERATOR_FINISHED;
@@ -2234,8 +2151,6 @@ static int scene_drop_invoke(bContext *C, wmOperator *op, const wmEvent *event)
te = outliner_dropzone_find(soops, fmval, false);
if (te) {
- Base *base;
-
RNA_string_set(op->ptr, "scene", te->name);
scene = (Scene *)BKE_libblock_find_name(ID_SCE, te->name);
@@ -2246,19 +2161,29 @@ static int scene_drop_invoke(bContext *C, wmOperator *op, const wmEvent *event)
return OPERATOR_CANCELLED;
}
- base = ED_object_scene_link(scene, ob);
-
- if (base == NULL) {
+ if (BKE_scene_has_object(scene, ob)) {
return OPERATOR_CANCELLED;
}
- if (scene == CTX_data_scene(C)) {
- /* when linking to an inactive scene don't touch the layer */
- ob->lay = base->lay;
- ED_base_object_select(base, BA_SELECT);
+ SceneCollection *sc;
+ if (scene != CTX_data_scene(C)) {
+ /* when linking to an inactive scene link to the master collection */
+ sc = BKE_collection_master(&scene->id);
+ }
+ else {
+ sc = CTX_data_scene_collection(C);
+ }
+
+ BKE_collection_object_add(&scene->id, sc, ob);
+
+ for (ViewLayer *view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
+ Base *base = BKE_view_layer_base_find(view_layer, ob);
+ if (base) {
+ ED_object_base_select(base, BA_SELECT);
+ }
}
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
WM_main_add_notifier(NC_SCENE | ND_OB_SELECT, scene);
@@ -2350,7 +2275,6 @@ static int group_link_invoke(bContext *C, wmOperator *op, const wmEvent *event)
Main *bmain = CTX_data_main(C);
Group *group = NULL;
Object *ob = NULL;
- Scene *scene = CTX_data_scene(C);
SpaceOops *soops = CTX_wm_space_outliner(C);
ARegion *ar = CTX_wm_region(C);
TreeElement *te = NULL;
@@ -2380,7 +2304,7 @@ static int group_link_invoke(bContext *C, wmOperator *op, const wmEvent *event)
return OPERATOR_CANCELLED;
}
- BKE_group_object_add(group, ob, scene, NULL);
+ BKE_group_object_add(group, ob);
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
return OPERATOR_FINISHED;
diff --git a/source/blender/editors/space_outliner/outliner_intern.h b/source/blender/editors/space_outliner/outliner_intern.h
index ca7dbe4f73c..148af52050d 100644
--- a/source/blender/editors/space_outliner/outliner_intern.h
+++ b/source/blender/editors/space_outliner/outliner_intern.h
@@ -36,14 +36,56 @@
/* internal exports only */
+struct ARegion;
+struct ListBase;
struct wmOperatorType;
+struct TreeElement;
struct TreeStoreElem;
+struct Main;
struct bContext;
struct Scene;
+struct ViewLayer;
struct ID;
struct Object;
struct bPoseChannel;
struct EditBone;
+struct wmEvent;
+struct wmKeyConfig;
+struct EvaluationContext;
+
+typedef enum TreeElementInsertType {
+ TE_INSERT_BEFORE,
+ TE_INSERT_AFTER,
+ TE_INSERT_INTO,
+} TreeElementInsertType;
+
+typedef enum TreeTraversalAction {
+ /* Continue traversal regularly, don't skip children. */
+ TRAVERSE_CONTINUE = 0,
+ /* Stop traversal */
+ TRAVERSE_BREAK,
+ /* Continue traversal, but skip childs of traversed element */
+ TRAVERSE_SKIP_CHILDS,
+} TreeTraversalAction;
+
+/**
+ * Callback type for reinserting elements at a different position, used to allow user customizable element order.
+ */
+typedef void (*TreeElementReinsertFunc)(struct Main *bmain,
+ struct SpaceOops *soops,
+ struct TreeElement *insert_element,
+ struct TreeElement *insert_handle,
+ TreeElementInsertType action,
+ const struct wmEvent *event);
+/**
+ * Executed on (almost) each mouse move while dragging. It's supposed to give info
+ * if reinserting insert_element before/after/into insert_handle would be allowed.
+ * It's allowed to change the reinsert info here for non const pointers.
+ */
+typedef bool (*TreeElementReinsertPollFunc)(const struct TreeElement *insert_element,
+ struct TreeElement **io_insert_handle, TreeElementInsertType *io_action);
+typedef TreeTraversalAction (*TreeTraversalFunc)(struct TreeElement *te, void *customdata);
+
typedef struct TreeElement {
struct TreeElement *next, *prev, *parent;
@@ -57,18 +99,33 @@ typedef struct TreeElement {
const char *name;
void *directdata; // Armature Bones, Base, Sequence, Strip...
PointerRNA rnaptr; // RNA Pointer
-} TreeElement;
+
+ /* callbacks - TODO should be moved into a type (like TreeElementType) */
+ TreeElementReinsertFunc reinsert;
+ TreeElementReinsertPollFunc reinsert_poll;
+
+ struct {
+ TreeElementInsertType insert_type;
+ /* the element before/after/into which we may insert the dragged one (NULL to insert at top) */
+ struct TreeElement *insert_handle;
+ void *tooltip_draw_handle;
+ } *drag_data;
+} TreeElement;
#define TREESTORE_ID_TYPE(_id) \
(ELEM(GS((_id)->name), ID_SCE, ID_LI, ID_OB, ID_ME, ID_CU, ID_MB, ID_NT, ID_MA, ID_TE, ID_IM, ID_LT, ID_LA, ID_CA) || \
- ELEM(GS((_id)->name), ID_KE, ID_WO, ID_SPK, ID_GR, ID_AR, ID_AC, ID_BR, ID_PA, ID_GD, ID_LS) || \
- ELEM(GS((_id)->name), ID_SCR, ID_WM, ID_TXT, ID_VF, ID_SO, ID_CF, ID_PAL)) /* Only in 'blendfile' mode ... :/ */
+ ELEM(GS((_id)->name), ID_KE, ID_WO, ID_SPK, ID_GR, ID_AR, ID_AC, ID_BR, ID_PA, ID_GD, ID_LS, ID_LP) || \
+ ELEM(GS((_id)->name), ID_SCR, ID_WM, ID_TXT, ID_VF, ID_SO, ID_CF, ID_PAL, ID_WS)) /* Only in 'blendfile' mode ... :/ */
/* TreeElement->flag */
-#define TE_ACTIVE 1
-#define TE_ICONROW 2
-#define TE_LAZY_CLOSED 4
-#define TE_FREE_NAME 8
+enum {
+ TE_ACTIVE = (1 << 0),
+ /* Closed items display their children as icon within the row. TE_ICONROW is for
+ * these child-items that are visible but only within the row of the closed parent. */
+ TE_ICONROW = (1 << 1),
+ TE_LAZY_CLOSED = (1 << 2),
+ TE_FREE_NAME = (1 << 3),
+};
/* button events */
#define OL_NAMEBUTTON 1
@@ -103,6 +160,9 @@ typedef enum {
#define OL_RNA_COL_SIZEX (UI_UNIT_X * 7.5f)
#define OL_RNA_COL_SPACEX (UI_UNIT_X * 2.5f)
+/* The outliner display modes that support the filter system.
+ * Note: keep it synced with space_outliner.py */
+#define SUPPORT_FILTER_OUTLINER(soops_) ELEM((soops_)->outlinevis, SO_VIEW_LAYER, SO_COLLECTIONS)
/* Outliner Searching --
*
@@ -120,24 +180,28 @@ typedef enum {
* - not searching into RNA items helps but isn't the complete solution
*/
-#define SEARCHING_OUTLINER(sov) (sov->search_flags & SO_SEARCH_RECURSIVE)
+#define SEARCHING_OUTLINER(sov) ((sov->search_flags & SO_SEARCH_RECURSIVE) && (sov->filter & SO_FILTER_SEARCH))
/* is the currrent element open? if so we also show children */
#define TSELEM_OPEN(telm, sv) ( (telm->flag & TSE_CLOSED) == 0 || (SEARCHING_OUTLINER(sv) && (telm->flag & TSE_CHILDSEARCH)) )
/* outliner_tree.c ----------------------------------------------- */
-void outliner_free_tree(ListBase *lb);
+void outliner_free_tree(ListBase *tree);
void outliner_cleanup_tree(struct SpaceOops *soops);
+void outliner_free_tree_element(TreeElement *element, ListBase *parent_subtree);
+void outliner_remove_treestore_element(struct SpaceOops *soops, TreeStoreElem *tselem);
-TreeElement *outliner_find_tse(struct SpaceOops *soops, const TreeStoreElem *tse);
-TreeElement *outliner_find_tree_element(ListBase *lb, const TreeStoreElem *store_elem);
-TreeElement *outliner_find_id(struct SpaceOops *soops, ListBase *lb, const struct ID *id);
-TreeElement *outliner_find_posechannel(ListBase *lb, const struct bPoseChannel *pchan);
-TreeElement *outliner_find_editbone(ListBase *lb, const struct EditBone *ebone);
-struct ID *outliner_search_back(SpaceOops *soops, TreeElement *te, short idcode);
+void outliner_build_tree(
+ struct Main *mainvar, const struct EvaluationContext *eval_ctx,
+ struct Scene *scene, struct ViewLayer *view_layer,
+ struct SpaceOops *soops, struct ARegion *ar);
+
+typedef struct ObjectsSelectedData {
+ struct ListBase objects_selected_array;
+} ObjectsSelectedData;
-void outliner_build_tree(struct Main *mainvar, struct Scene *scene, struct SpaceOops *soops);
+TreeTraversalAction outliner_find_selected_objects(struct TreeElement *te, void *customdata);
/* outliner_draw.c ---------------------------------------------- */
@@ -146,9 +210,9 @@ void restrictbutton_gr_restrict_flag(void *poin, void *poin2, int flag);
/* outliner_select.c -------------------------------------------- */
eOLDrawState tree_element_type_active(
- struct bContext *C, struct Scene *scene, struct SpaceOops *soops,
+ struct bContext *C, struct Scene *scene, struct ViewLayer *view_layer, struct SpaceOops *soops,
TreeElement *te, TreeStoreElem *tselem, const eOLSetState set, bool recursive);
-eOLDrawState tree_element_active(struct bContext *C, struct Scene *scene, SpaceOops *soops,
+eOLDrawState tree_element_active(struct bContext *C, struct Scene *scene, struct ViewLayer *view_layer, SpaceOops *soops,
TreeElement *te, const eOLSetState set, const bool handle_all_types);
void outliner_item_do_activate_from_tree_element(
@@ -158,22 +222,26 @@ int outliner_item_do_activate_from_cursor(
struct bContext *C, const int mval[2],
bool extend, bool recursive);
+void outliner_item_select(
+ struct SpaceOops *soops, const struct TreeElement *te,
+ const bool extend, const bool toggle);
+
/* outliner_edit.c ---------------------------------------------- */
typedef void (*outliner_operation_cb)(
struct bContext *C, struct ReportList *, struct Scene *scene,
struct TreeElement *, struct TreeStoreElem *, TreeStoreElem *, void *);
void outliner_do_object_operation_ex(
- struct bContext *C, ReportList *reports, struct Scene *scene, struct SpaceOops *soops, struct ListBase *lb,
- outliner_operation_cb operation_cb, bool recurse_selected);
+ struct bContext *C, struct ReportList *reports, struct Scene *scene, struct SpaceOops *soops,
+ struct ListBase *lb, outliner_operation_cb operation_cb, bool recurse_selected);
void outliner_do_object_operation(
- struct bContext *C, ReportList *reports, struct Scene *scene, struct SpaceOops *soops, struct ListBase *lb,
- outliner_operation_cb operation_cb);
+ struct bContext *C, struct ReportList *reports, struct Scene *scene, struct SpaceOops *soops,
+ struct ListBase *lb, outliner_operation_cb operation_cb);
int common_restrict_check(struct bContext *C, struct Object *ob);
int outliner_has_one_flag(ListBase *lb, short flag, const int curlevel);
-void outliner_set_flag(ListBase *lb, short flag, short set);
+bool outliner_set_flag(ListBase *lb, short flag, short set);
void object_toggle_visibility_cb(
struct bContext *C, struct ReportList *reports, struct Scene *scene,
@@ -214,8 +282,13 @@ void id_remap_cb(
struct TreeStoreElem *tsep, struct TreeStoreElem *tselem, void *user_data);
TreeElement *outliner_dropzone_find(const struct SpaceOops *soops, const float fmval[2], const bool children);
+
+void outliner_set_coordinates(struct ARegion *ar, struct SpaceOops *soops);
+
/* ...................................................... */
+void OUTLINER_OT_highlight_update(struct wmOperatorType *ot);
+
void OUTLINER_OT_item_activate(struct wmOperatorType *ot);
void OUTLINER_OT_item_openclose(struct wmOperatorType *ot);
void OUTLINER_OT_item_rename(struct wmOperatorType *ot);
@@ -235,10 +308,6 @@ void OUTLINER_OT_expanded_toggle(struct wmOperatorType *ot);
void OUTLINER_OT_scroll_page(struct wmOperatorType *ot);
-void OUTLINER_OT_renderability_toggle(struct wmOperatorType *ot);
-void OUTLINER_OT_selectability_toggle(struct wmOperatorType *ot);
-void OUTLINER_OT_visibility_toggle(struct wmOperatorType *ot);
-
void OUTLINER_OT_keyingset_add_selected(struct wmOperatorType *ot);
void OUTLINER_OT_keyingset_remove_selected(struct wmOperatorType *ot);
@@ -267,10 +336,45 @@ void OUTLINER_OT_animdata_operation(struct wmOperatorType *ot);
void OUTLINER_OT_action_set(struct wmOperatorType *ot);
void OUTLINER_OT_constraint_operation(struct wmOperatorType *ot);
void OUTLINER_OT_modifier_operation(struct wmOperatorType *ot);
+void OUTLINER_OT_collection_operation(struct wmOperatorType *ot);
/* ---------------------------------------------------------------- */
/* outliner_ops.c */
void outliner_operatortypes(void);
void outliner_keymap(struct wmKeyConfig *keyconf);
+/* outliner_collections.c */
+
+struct SceneCollection *outliner_scene_collection_from_tree_element(TreeElement *te);
+
+void OUTLINER_OT_collections_delete(struct wmOperatorType *ot);
+void OUTLINER_OT_collection_select(struct wmOperatorType *ot);
+void OUTLINER_OT_collection_toggle(struct wmOperatorType *ot);
+void OUTLINER_OT_collection_link(struct wmOperatorType *ot);
+void OUTLINER_OT_collection_unlink(struct wmOperatorType *ot);
+void OUTLINER_OT_collection_new(struct wmOperatorType *ot);
+void OUTLINER_OT_collection_duplicate(struct wmOperatorType *ot);
+void OUTLINER_OT_collection_objects_remove(struct wmOperatorType *ot);
+void OUTLINER_OT_collection_objects_select(struct wmOperatorType *ot);
+void OUTLINER_OT_object_add_to_new_collection(struct wmOperatorType *ot);
+void OUTLINER_OT_object_remove_from_collection(struct wmOperatorType *ot);
+
+void OUTLINER_OT_collection_objects_add(struct wmOperatorType *ot);
+void OUTLINER_OT_collection_nested_new(struct wmOperatorType *ot);
+void OUTLINER_OT_collection_delete_selected(struct wmOperatorType *ot);
+
+/* outliner_utils.c ---------------------------------------------- */
+
+TreeElement *outliner_find_item_at_y(const SpaceOops *soops, const ListBase *tree, float view_co_y);
+TreeElement *outliner_find_item_at_x_in_row(const SpaceOops *soops, const TreeElement *parent_te, float view_co_x);
+TreeElement *outliner_find_tse(struct SpaceOops *soops, const TreeStoreElem *tse);
+TreeElement *outliner_find_tree_element(ListBase *lb, const TreeStoreElem *store_elem);
+TreeElement *outliner_find_id(struct SpaceOops *soops, ListBase *lb, const struct ID *id);
+TreeElement *outliner_find_posechannel(ListBase *lb, const struct bPoseChannel *pchan);
+TreeElement *outliner_find_editbone(ListBase *lb, const struct EditBone *ebone);
+struct ID *outliner_search_back(SpaceOops *soops, TreeElement *te, short idcode);
+bool outliner_tree_traverse(const SpaceOops *soops, ListBase *tree, int filter_te_flag, int filter_tselem_flag,
+ TreeTraversalFunc func, void *customdata);
+
+
#endif /* __OUTLINER_INTERN_H__ */
diff --git a/source/blender/editors/space_outliner/outliner_ops.c b/source/blender/editors/space_outliner/outliner_ops.c
index 776717c8443..ba501ac7db5 100644
--- a/source/blender/editors/space_outliner/outliner_ops.c
+++ b/source/blender/editors/space_outliner/outliner_ops.c
@@ -28,25 +28,407 @@
* \ingroup spoutliner
*/
-#include "DNA_space_types.h"
+#include "MEM_guardedalloc.h"
+#include "BLI_listbase.h"
+#include "BLI_math.h"
+
+#include "BLT_translation.h"
+
+#include "BKE_context.h"
+#include "BKE_main.h"
+
+#include "GPU_immediate.h"
#include "RNA_access.h"
+#include "UI_interface.h"
+#include "UI_view2d.h"
+
#include "WM_api.h"
#include "WM_types.h"
+#include "ED_screen.h"
+
#include "outliner_intern.h"
+typedef struct OutlinerDragDropTooltip {
+ TreeElement *te;
+ void *handle;
+} OutlinerDragDropTooltip;
+
+enum {
+ OUTLINER_ITEM_DRAG_CANCEL,
+ OUTLINER_ITEM_DRAG_CONFIRM,
+};
+
+static int outliner_item_drag_drop_poll(bContext *C)
+{
+ SpaceOops *soops = CTX_wm_space_outliner(C);
+ return ED_operator_outliner_active(C) &&
+ /* Only collection display modes supported for now. Others need more design work */
+ ELEM(soops->outlinevis, SO_VIEW_LAYER, SO_COLLECTIONS, SO_GROUPS);
+}
+
+static TreeElement *outliner_item_drag_element_find(SpaceOops *soops, ARegion *ar, const wmEvent *event)
+{
+ /* note: using EVT_TWEAK_ events to trigger dragging is fine,
+ * it sends coordinates from where dragging was started */
+ const float my = UI_view2d_region_to_view_y(&ar->v2d, event->mval[1]);
+ return outliner_find_item_at_y(soops, &soops->tree, my);
+}
+
+static void outliner_item_drag_end(wmWindow *win, OutlinerDragDropTooltip *data)
+{
+ MEM_SAFE_FREE(data->te->drag_data);
+
+ if (data->handle) {
+ WM_draw_cb_exit(win, data->handle);
+ }
+
+ MEM_SAFE_FREE(data);
+}
+
+static void outliner_item_drag_get_insert_data(
+ const SpaceOops *soops, ARegion *ar, const wmEvent *event, TreeElement *te_dragged,
+ TreeElement **r_te_insert_handle, TreeElementInsertType *r_insert_type)
+{
+ TreeElement *te_hovered;
+ float view_mval[2];
+
+ UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &view_mval[0], &view_mval[1]);
+ te_hovered = outliner_find_item_at_y(soops, &soops->tree, view_mval[1]);
+
+ if (te_hovered) {
+ /* mouse hovers an element (ignoring x-axis), now find out how to insert the dragged item exactly */
+
+ if (te_hovered == te_dragged) {
+ *r_te_insert_handle = te_dragged;
+ }
+ else if (te_hovered != te_dragged) {
+ const float margin = UI_UNIT_Y * (1.0f / 4);
+
+ *r_te_insert_handle = te_hovered;
+ if (view_mval[1] < (te_hovered->ys + margin)) {
+ if (TSELEM_OPEN(TREESTORE(te_hovered), soops)) {
+ /* inserting after a open item means we insert into it, but as first child */
+ if (BLI_listbase_is_empty(&te_hovered->subtree)) {
+ *r_insert_type = TE_INSERT_INTO;
+ }
+ else {
+ *r_insert_type = TE_INSERT_BEFORE;
+ *r_te_insert_handle = te_hovered->subtree.first;
+ }
+ }
+ else {
+ *r_insert_type = TE_INSERT_AFTER;
+ }
+ }
+ else if (view_mval[1] > (te_hovered->ys + (3 * margin))) {
+ *r_insert_type = TE_INSERT_BEFORE;
+ }
+ else {
+ *r_insert_type = TE_INSERT_INTO;
+ }
+ }
+ }
+ else {
+ /* mouse doesn't hover any item (ignoring x-axis), so it's either above list bounds or below. */
+
+ TreeElement *first = soops->tree.first;
+ TreeElement *last = soops->tree.last;
+
+ if (view_mval[1] < last->ys) {
+ *r_te_insert_handle = last;
+ *r_insert_type = TE_INSERT_AFTER;
+ }
+ else if (view_mval[1] > (first->ys + UI_UNIT_Y)) {
+ *r_te_insert_handle = first;
+ *r_insert_type = TE_INSERT_BEFORE;
+ }
+ else {
+ BLI_assert(0);
+ }
+ }
+}
+
+static void outliner_item_drag_handle(
+ SpaceOops *soops, ARegion *ar, const wmEvent *event, TreeElement *te_dragged)
+{
+ TreeElement *te_insert_handle;
+ TreeElementInsertType insert_type;
+
+ outliner_item_drag_get_insert_data(soops, ar, event, te_dragged, &te_insert_handle, &insert_type);
+
+ if (!te_dragged->reinsert_poll &&
+ /* there is no reinsert_poll, so we do some generic checks (same types and reinsert callback is available) */
+ (TREESTORE(te_dragged)->type == TREESTORE(te_insert_handle)->type) &&
+ te_dragged->reinsert)
+ {
+ /* pass */
+ }
+ else if (te_dragged == te_insert_handle) {
+ /* nothing will happen anyway, no need to do poll check */
+ }
+ else if (!te_dragged->reinsert_poll ||
+ !te_dragged->reinsert_poll(te_dragged, &te_insert_handle, &insert_type))
+ {
+ te_insert_handle = NULL;
+ }
+ te_dragged->drag_data->insert_type = insert_type;
+ te_dragged->drag_data->insert_handle = te_insert_handle;
+}
+
+/**
+ * Returns true if it is a collection and empty.
+ */
+static bool is_empty_collection(TreeElement *te)
+{
+ if (!ELEM(TREESTORE(te)->type, TSE_SCENE_COLLECTION, TSE_LAYER_COLLECTION)) {
+ return false;
+ }
+
+ SceneCollection *scene_collection;
+ if (TREESTORE(te)->type == TSE_SCENE_COLLECTION) {
+ scene_collection = (SceneCollection *)te->directdata;
+ }
+ else {
+ BLI_assert(TREESTORE(te)->type == TSE_LAYER_COLLECTION);
+ scene_collection = ((LayerCollection *)te->directdata)->scene_collection;
+ }
+
+ return BLI_listbase_is_empty(&scene_collection->objects) &&
+ BLI_listbase_is_empty(&scene_collection->scene_collections);
+}
+
+static bool outliner_item_drag_drop_apply(
+ Main *bmain,
+ SpaceOops *soops,
+ OutlinerDragDropTooltip *data,
+ const wmEvent *event)
+{
+ TreeElement *dragged_te = data->te;
+ TreeElement *insert_handle = dragged_te->drag_data->insert_handle;
+ TreeElementInsertType insert_type = dragged_te->drag_data->insert_type;
+
+ if ((insert_handle == dragged_te) || !insert_handle) {
+ /* No need to do anything */
+ }
+ else if (dragged_te->reinsert) {
+ BLI_assert(!dragged_te->reinsert_poll || dragged_te->reinsert_poll(dragged_te, &insert_handle,
+ &insert_type));
+ /* call of assert above should not have changed insert_handle and insert_type at this point */
+ BLI_assert(dragged_te->drag_data->insert_handle == insert_handle &&
+ dragged_te->drag_data->insert_type == insert_type);
+
+ /* If the collection was just created and you moved objects/collections inside it,
+ * it is strange to have it closed and we not see the newly dragged elements. */
+ const bool should_open_collection = (insert_type == TE_INSERT_INTO) && is_empty_collection(insert_handle);
+
+ dragged_te->reinsert(bmain, soops, dragged_te, insert_handle, insert_type, event);
+
+ if (should_open_collection && !is_empty_collection(insert_handle)) {
+ TREESTORE(insert_handle)->flag &= ~TSE_CLOSED;
+ }
+ return true;
+ }
+
+ return false;
+}
+
+static int outliner_item_drag_drop_modal(bContext *C, wmOperator *op, const wmEvent *event)
+{
+ Main *bmain = CTX_data_main(C);
+ ARegion *ar = CTX_wm_region(C);
+ SpaceOops *soops = CTX_wm_space_outliner(C);
+ OutlinerDragDropTooltip *data = op->customdata;
+ TreeElement *te_dragged = data->te;
+ int retval = OPERATOR_RUNNING_MODAL;
+ bool redraw = false;
+ bool skip_rebuild = true;
+
+ switch (event->type) {
+ case EVT_MODAL_MAP:
+ if (event->val == OUTLINER_ITEM_DRAG_CONFIRM) {
+ if (outliner_item_drag_drop_apply(bmain, soops, data, event)) {
+ skip_rebuild = false;
+ }
+ retval = OPERATOR_FINISHED;
+ }
+ else if (event->val == OUTLINER_ITEM_DRAG_CANCEL) {
+ retval = OPERATOR_CANCELLED;
+ }
+ else {
+ BLI_assert(0);
+ }
+ WM_event_add_mousemove(C); /* update highlight */
+ outliner_item_drag_end(CTX_wm_window(C), data);
+ redraw = true;
+ break;
+ case MOUSEMOVE:
+ outliner_item_drag_handle(soops, ar, event, te_dragged);
+ redraw = true;
+ break;
+ }
+
+ if (skip_rebuild) {
+ soops->storeflag |= SO_TREESTORE_REDRAW; /* only needs to redraw, no rebuild */
+ }
+ if (redraw) {
+ ED_region_tag_redraw(ar);
+ }
+
+ return retval;
+}
+
+/**
+ * Check if the given TreeElement is a collection
+ *
+ * This test is mainly used to see if next/prev TreeElement is a collection.
+ * It will fail when there is no next/prev TreeElement, or when the
+ * element is an Override or something else in the future.
+ */
+static bool tree_element_is_collection_get(const TreeElement *te) {
+ if (te == NULL) {
+ return false;
+ }
+
+ TreeStoreElem *tselem = TREESTORE(te);
+ return ELEM(tselem->type, TSE_LAYER_COLLECTION, TSE_SCENE_COLLECTION);
+}
+
+static const char *outliner_drag_drop_tooltip_get(
+ const TreeElement *te_float)
+{
+ const char *name = NULL;
+
+ const TreeElement *te_insert = te_float->drag_data->insert_handle;
+ if (tree_element_is_collection_get(te_float)) {
+ if (te_insert == NULL) {
+ name = TIP_("Move collection");
+ }
+ else {
+ switch (te_float->drag_data->insert_type) {
+ case TE_INSERT_BEFORE:
+ if (tree_element_is_collection_get(te_insert->prev)) {
+ name = TIP_("Move between collections");
+ }
+ else {
+ name = TIP_("Move before collection");
+ }
+ break;
+ case TE_INSERT_AFTER:
+ if (tree_element_is_collection_get(te_insert->next)) {
+ name = TIP_("Move between collections");
+ }
+ else {
+ name = TIP_("Move after collection");
+ }
+ break;
+ case TE_INSERT_INTO:
+ name = TIP_("Move inside collection");
+ break;
+ }
+ }
+ }
+ else if ((TREESTORE(te_float)->type == 0) && (te_float->idcode == ID_OB)) {
+ name = TIP_("Move to collection (Ctrl to add)");
+ }
+
+ return name;
+}
+
+static void outliner_drag_drop_tooltip_cb(const wmWindow *win, void *vdata)
+{
+ OutlinerDragDropTooltip *data = vdata;
+ const char *tooltip;
+
+ int cursorx, cursory;
+ int x, y;
+
+ tooltip = outliner_drag_drop_tooltip_get(data->te);
+ if (tooltip == NULL) {
+ return;
+ }
+
+ cursorx = win->eventstate->x;
+ cursory = win->eventstate->y;
+
+ x = cursorx + U.widget_unit;
+ y = cursory - U.widget_unit;
+
+ /* Drawing. */
+ const uiFontStyle *fstyle = UI_FSTYLE_WIDGET;
+
+ const float col_fg[4] = {1.0f, 1.0f, 1.0f, 1.0f};
+ const float col_bg[4] = {0.0f, 0.0f, 0.0f, 0.2f};
+
+ glEnable(GL_BLEND);
+ UI_fontstyle_draw_simple_backdrop(fstyle, x, y, tooltip, col_fg, col_bg);
+ glDisable(GL_BLEND);
+}
+
+static int outliner_item_drag_drop_invoke(bContext *C, wmOperator *op, const wmEvent *event)
+{
+ ARegion *ar = CTX_wm_region(C);
+ SpaceOops *soops = CTX_wm_space_outliner(C);
+ TreeElement *te_dragged = outliner_item_drag_element_find(soops, ar, event);
+
+ if (!te_dragged) {
+ return (OPERATOR_FINISHED | OPERATOR_PASS_THROUGH);
+ }
+
+ OutlinerDragDropTooltip *data = MEM_mallocN(sizeof(OutlinerDragDropTooltip), __func__);
+ data->te = te_dragged;
+
+ op->customdata = data;
+ te_dragged->drag_data = MEM_callocN(sizeof(*te_dragged->drag_data), __func__);
+ /* by default we don't change the item position */
+ te_dragged->drag_data->insert_handle = te_dragged;
+ /* unset highlighted tree element, dragged one will be highlighted instead */
+ outliner_set_flag(&soops->tree, TSE_HIGHLIGHTED, false);
+
+ soops->storeflag |= SO_TREESTORE_REDRAW; /* only needs to redraw, no rebuild */
+ ED_region_tag_redraw(ar);
+
+ WM_event_add_modal_handler(C, op);
+
+ data->handle = WM_draw_cb_activate(CTX_wm_window(C), outliner_drag_drop_tooltip_cb, data);
+
+ return OPERATOR_RUNNING_MODAL;
+}
+
+/**
+ * Notes about Outliner Item Drag 'n Drop:
+ * Right now only collections display mode is supported. But ideally all/most modes would support this. There are
+ * just some open design questions that have to be answered: do we want to allow mixing order of different data types
+ * (like render-layers and objects)? Would that be a purely visual change or would that have any other effect? ...
+ */
+static void OUTLINER_OT_item_drag_drop(wmOperatorType *ot)
+{
+ ot->name = "Drag and Drop Item";
+ ot->idname = "OUTLINER_OT_item_drag_drop";
+ ot->description = "Change the hierarchical position of an item by repositioning it using drag and drop";
+
+ ot->invoke = outliner_item_drag_drop_invoke;
+ ot->modal = outliner_item_drag_drop_modal;
+
+ ot->poll = outliner_item_drag_drop_poll;
+
+ ot->flag = OPTYPE_UNDO;
+}
+
/* ************************** registration **********************************/
void outliner_operatortypes(void)
{
+ WM_operatortype_append(OUTLINER_OT_highlight_update);
WM_operatortype_append(OUTLINER_OT_item_activate);
WM_operatortype_append(OUTLINER_OT_select_border);
WM_operatortype_append(OUTLINER_OT_item_openclose);
WM_operatortype_append(OUTLINER_OT_item_rename);
+ WM_operatortype_append(OUTLINER_OT_item_drag_drop);
WM_operatortype_append(OUTLINER_OT_operation);
WM_operatortype_append(OUTLINER_OT_scene_operation);
WM_operatortype_append(OUTLINER_OT_object_operation);
@@ -61,6 +443,7 @@ void outliner_operatortypes(void)
WM_operatortype_append(OUTLINER_OT_action_set);
WM_operatortype_append(OUTLINER_OT_constraint_operation);
WM_operatortype_append(OUTLINER_OT_modifier_operation);
+ WM_operatortype_append(OUTLINER_OT_collection_operation);
WM_operatortype_append(OUTLINER_OT_show_one_level);
WM_operatortype_append(OUTLINER_OT_show_active);
@@ -70,10 +453,6 @@ void outliner_operatortypes(void)
WM_operatortype_append(OUTLINER_OT_selected_toggle);
WM_operatortype_append(OUTLINER_OT_expanded_toggle);
- WM_operatortype_append(OUTLINER_OT_renderability_toggle);
- WM_operatortype_append(OUTLINER_OT_selectability_toggle);
- WM_operatortype_append(OUTLINER_OT_visibility_toggle);
-
WM_operatortype_append(OUTLINER_OT_keyingset_add_selected);
WM_operatortype_append(OUTLINER_OT_keyingset_remove_selected);
@@ -87,13 +466,62 @@ void outliner_operatortypes(void)
WM_operatortype_append(OUTLINER_OT_scene_drop);
WM_operatortype_append(OUTLINER_OT_material_drop);
WM_operatortype_append(OUTLINER_OT_group_link);
+
+ /* collections */
+ WM_operatortype_append(OUTLINER_OT_collections_delete);
+ WM_operatortype_append(OUTLINER_OT_collection_select);
+ WM_operatortype_append(OUTLINER_OT_collection_toggle);
+ WM_operatortype_append(OUTLINER_OT_collection_link);
+ WM_operatortype_append(OUTLINER_OT_collection_unlink);
+ WM_operatortype_append(OUTLINER_OT_collection_new);
+ WM_operatortype_append(OUTLINER_OT_collection_duplicate);
+
+ WM_operatortype_append(OUTLINER_OT_collection_nested_new);
+ WM_operatortype_append(OUTLINER_OT_collection_delete_selected);
+ WM_operatortype_append(OUTLINER_OT_collection_objects_add);
+ WM_operatortype_append(OUTLINER_OT_collection_objects_remove);
+ WM_operatortype_append(OUTLINER_OT_collection_objects_select);
+ WM_operatortype_append(OUTLINER_OT_object_add_to_new_collection);
+ WM_operatortype_append(OUTLINER_OT_object_remove_from_collection);
+}
+
+static wmKeyMap *outliner_item_drag_drop_modal_keymap(wmKeyConfig *keyconf)
+{
+ static EnumPropertyItem modal_items[] = {
+ {OUTLINER_ITEM_DRAG_CANCEL, "CANCEL", 0, "Cancel", ""},
+ {OUTLINER_ITEM_DRAG_CONFIRM, "CONFIRM", 0, "Confirm/Drop", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
+ const char *map_name = "Outliner Item Drap 'n Drop Modal Map";
+
+ wmKeyMap *keymap = WM_modalkeymap_get(keyconf, map_name);
+
+ /* this function is called for each spacetype, only needs to add map once */
+ if (keymap && keymap->modal_items)
+ return NULL;
+
+ keymap = WM_modalkeymap_add(keyconf, map_name, modal_items);
+
+ /* items for modal map */
+ WM_modalkeymap_add_item(keymap, ESCKEY, KM_PRESS, KM_ANY, 0, OUTLINER_ITEM_DRAG_CANCEL);
+ WM_modalkeymap_add_item(keymap, RIGHTMOUSE, KM_PRESS, KM_ANY, 0, OUTLINER_ITEM_DRAG_CANCEL);
+
+ WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_RELEASE, KM_ANY, 0, OUTLINER_ITEM_DRAG_CONFIRM);
+ WM_modalkeymap_add_item(keymap, RETKEY, KM_RELEASE, KM_ANY, 0, OUTLINER_ITEM_DRAG_CONFIRM);
+ WM_modalkeymap_add_item(keymap, PADENTER, KM_RELEASE, KM_ANY, 0, OUTLINER_ITEM_DRAG_CONFIRM);
+
+ WM_modalkeymap_assign(keymap, "OUTLINER_OT_item_drag_drop");
+
+ return keymap;
}
void outliner_keymap(wmKeyConfig *keyconf)
{
wmKeyMap *keymap = WM_keymap_find(keyconf, "Outliner", SPACE_OUTLINER, 0);
wmKeyMapItem *kmi;
-
+
+ WM_keymap_add_item(keymap, "OUTLINER_OT_highlight_update", MOUSEMOVE, KM_ANY, KM_ANY, 0);
+
WM_keymap_add_item(keymap, "OUTLINER_OT_item_rename", LEFTMOUSE, KM_DBL_CLICK, 0, 0);
kmi = WM_keymap_add_item(keymap, "OUTLINER_OT_item_activate", LEFTMOUSE, KM_CLICK, 0, 0);
@@ -123,6 +551,8 @@ void outliner_keymap(wmKeyConfig *keyconf)
WM_keymap_add_item(keymap, "OUTLINER_OT_item_rename", LEFTMOUSE, KM_PRESS, KM_CTRL, 0);
WM_keymap_add_item(keymap, "OUTLINER_OT_operation", RIGHTMOUSE, KM_PRESS, 0, 0);
+ WM_keymap_add_item(keymap, "OUTLINER_OT_item_drag_drop", EVT_TWEAK_L, KM_ANY, 0, 0);
+
WM_keymap_add_item(keymap, "OUTLINER_OT_show_hierarchy", HOMEKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "OUTLINER_OT_show_active", PERIODKEY, KM_PRESS, 0, 0);
@@ -140,11 +570,6 @@ void outliner_keymap(wmKeyConfig *keyconf)
WM_keymap_verify_item(keymap, "OUTLINER_OT_selected_toggle", AKEY, KM_PRESS, 0, 0);
WM_keymap_verify_item(keymap, "OUTLINER_OT_expanded_toggle", AKEY, KM_PRESS, KM_SHIFT, 0);
- WM_keymap_verify_item(keymap, "OUTLINER_OT_renderability_toggle", RKEY, KM_PRESS, 0, 0);
- WM_keymap_verify_item(keymap, "OUTLINER_OT_selectability_toggle", SKEY, KM_PRESS, 0, 0);
- WM_keymap_verify_item(keymap, "OUTLINER_OT_visibility_toggle", VKEY, KM_PRESS, 0, 0);
-
-
/* keying sets - only for databrowse */
WM_keymap_verify_item(keymap, "OUTLINER_OT_keyingset_add_selected", KKEY, KM_PRESS, 0, 0);
WM_keymap_verify_item(keymap, "OUTLINER_OT_keyingset_remove_selected", KKEY, KM_PRESS, KM_ALT, 0);
@@ -154,5 +579,10 @@ void outliner_keymap(wmKeyConfig *keyconf)
WM_keymap_verify_item(keymap, "OUTLINER_OT_drivers_add_selected", DKEY, KM_PRESS, 0, 0);
WM_keymap_verify_item(keymap, "OUTLINER_OT_drivers_delete_selected", DKEY, KM_PRESS, KM_ALT, 0);
+
+ WM_keymap_verify_item(keymap, "OUTLINER_OT_collection_nested_new", CKEY, KM_PRESS, 0, 0);
+ WM_keymap_verify_item(keymap, "OUTLINER_OT_collection_delete_selected", XKEY, KM_PRESS, 0, 0);
+
+ outliner_item_drag_drop_modal_keymap(keyconf);
}
diff --git a/source/blender/editors/space_outliner/outliner_select.c b/source/blender/editors/space_outliner/outliner_select.c
index 12b9d273a47..df5f43978e6 100644
--- a/source/blender/editors/space_outliner/outliner_select.c
+++ b/source/blender/editors/space_outliner/outliner_select.c
@@ -44,12 +44,15 @@
#include "BLI_listbase.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
+#include "BKE_group.h"
#include "BKE_object.h"
+#include "BKE_layer.h"
#include "BKE_scene.h"
#include "BKE_sequencer.h"
#include "BKE_armature.h"
+#include "DEG_depsgraph.h"
+
#include "ED_armature.h"
#include "ED_object.h"
#include "ED_screen.h"
@@ -68,61 +71,12 @@
#include "outliner_intern.h"
-/* ****************************************************** */
-/* Outliner Selection (gray-blue highlight for rows) */
-
-static int outliner_select(SpaceOops *soops, ListBase *lb, int *index, short *selecting)
-{
- TreeElement *te;
- TreeStoreElem *tselem;
- bool changed = false;
-
- for (te = lb->first; te && *index >= 0; te = te->next, (*index)--) {
- tselem = TREESTORE(te);
-
- /* if we've encountered the right item, set its 'Outliner' selection status */
- if (*index == 0) {
- /* this should be the last one, so no need to do anything with index */
- if ((te->flag & TE_ICONROW) == 0) {
- /* -1 value means toggle testing for now... */
- if (*selecting == -1) {
- if (tselem->flag & TSE_SELECTED)
- *selecting = 0;
- else
- *selecting = 1;
- }
-
- /* set selection */
- if (*selecting)
- tselem->flag |= TSE_SELECTED;
- else
- tselem->flag &= ~TSE_SELECTED;
-
- changed |= true;
- }
- }
- else if (TSELEM_OPEN(tselem, soops)) {
- /* Only try selecting sub-elements if we haven't hit the right element yet
- *
- * Hack warning:
- * Index must be reduced before supplying it to the sub-tree to try to do
- * selection, however, we need to increment it again for the next loop to
- * function correctly
- */
- (*index)--;
- changed |= outliner_select(soops, &te->subtree, index, selecting);
- (*index)++;
- }
- }
-
- return changed;
-}
/* ****************************************************** */
/* Outliner Element Selection/Activation on Click */
static eOLDrawState tree_element_active_renderlayer(
- bContext *C, TreeElement *te, TreeStoreElem *tselem, const eOLSetState set)
+ bContext *C, Scene *UNUSED(scene), ViewLayer *UNUSED(sl), TreeElement *te, TreeStoreElem *tselem, const eOLSetState set)
{
Scene *sce;
@@ -132,11 +86,11 @@ static eOLDrawState tree_element_active_renderlayer(
sce = (Scene *)tselem->id;
if (set != OL_SETSEL_NONE) {
- sce->r.actlay = tselem->nr;
+ sce->active_view_layer = tselem->nr;
WM_event_add_notifier(C, NC_SCENE | ND_RENDER_OPTIONS, sce);
}
else {
- return sce->r.actlay == tselem->nr;
+ return sce->active_view_layer == tselem->nr;
}
return OL_DRAWSEL_NONE;
}
@@ -146,14 +100,14 @@ static eOLDrawState tree_element_active_renderlayer(
* CTRL+LMB: Select/Deselect object and all children.
* CTRL+SHIFT+LMB: Add/Remove object and all children.
*/
-static void do_outliner_object_select_recursive(Scene *scene, Object *ob_parent, bool select)
+static void do_outliner_object_select_recursive(ViewLayer *view_layer, Object *ob_parent, bool select)
{
Base *base;
- for (base = FIRSTBASE; base; base = base->next) {
+ for (base = FIRSTBASE(view_layer); base; base = base->next) {
Object *ob = base->object;
- if ((((ob->restrictflag & OB_RESTRICT_VIEW) == 0) && BKE_object_is_child_recursive(ob_parent, ob))) {
- ED_base_object_select(base, select ? BA_SELECT : BA_DESELECT);
+ if ((((base->flag & BASE_VISIBLED) == 0) && BKE_object_is_child_recursive(ob_parent, ob))) {
+ ED_object_base_select(base, select ? BA_SELECT : BA_DESELECT);
}
}
}
@@ -184,7 +138,7 @@ static void do_outliner_ebone_select_recursive(bArmature *arm, EditBone *ebone_p
}
static eOLDrawState tree_element_set_active_object(
- bContext *C, Scene *scene, SpaceOops *soops,
+ bContext *C, Scene *scene, ViewLayer *view_layer, SpaceOops *soops,
TreeElement *te, const eOLSetState set, bool recursive)
{
TreeStoreElem *tselem = TREESTORE(te);
@@ -198,7 +152,7 @@ static eOLDrawState tree_element_set_active_object(
}
else {
ob = (Object *)outliner_search_back(soops, te, ID_OB);
- if (ob == OBACT) {
+ if (ob == OBACT(view_layer)) {
return OL_DRAWSEL_NONE;
}
}
@@ -208,34 +162,34 @@ static eOLDrawState tree_element_set_active_object(
sce = (Scene *)outliner_search_back(soops, te, ID_SCE);
if (sce && scene != sce) {
- ED_screen_set_scene(C, CTX_wm_screen(C), sce);
+ WM_window_change_active_scene(CTX_data_main(C), C, CTX_wm_window(C), sce);
scene = sce;
}
/* find associated base in current scene */
- base = BKE_scene_base_find(scene, ob);
+ base = BKE_view_layer_base_find(view_layer, ob);
if (base) {
if (set == OL_SETSEL_EXTEND) {
/* swap select */
- if (base->flag & SELECT)
- ED_base_object_select(base, BA_DESELECT);
+ if (base->flag & BASE_SELECTED)
+ ED_object_base_select(base, BA_DESELECT);
else
- ED_base_object_select(base, BA_SELECT);
+ ED_object_base_select(base, BA_SELECT);
}
else {
/* deleselect all */
- BKE_scene_base_deselect_all(scene);
- ED_base_object_select(base, BA_SELECT);
+ BKE_view_layer_base_deselect_all(view_layer);
+ ED_object_base_select(base, BA_SELECT);
}
if (recursive) {
/* Recursive select/deselect for Object hierarchies */
- do_outliner_object_select_recursive(scene, ob, (ob->flag & SELECT) != 0);
+ do_outliner_object_select_recursive(view_layer, ob, (base->flag & BASE_SELECTED) != 0);
}
- if (C) {
- ED_base_object_activate(C, base); /* adds notifier */
+ if (set != OL_SETSEL_NONE) {
+ ED_object_base_activate(C, base); /* adds notifier */
WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
}
}
@@ -247,7 +201,7 @@ static eOLDrawState tree_element_set_active_object(
}
static eOLDrawState tree_element_active_material(
- bContext *C, Scene *scene, SpaceOops *soops,
+ bContext *C, Scene *UNUSED(scene), ViewLayer *view_layer, SpaceOops *soops,
TreeElement *te, const eOLSetState set)
{
TreeElement *tes;
@@ -256,7 +210,7 @@ static eOLDrawState tree_element_active_material(
/* we search for the object parent */
ob = (Object *)outliner_search_back(soops, te, ID_OB);
// note: ob->matbits can be NULL when a local object points to a library mesh.
- if (ob == NULL || ob != OBACT || ob->matbits == NULL) {
+ if (ob == NULL || ob != OBACT(view_layer) || ob->matbits == NULL) {
return OL_DRAWSEL_NONE; /* just paranoia */
}
@@ -293,19 +247,19 @@ static eOLDrawState tree_element_active_material(
/* Tagging object for update seems a bit stupid here, but looks like we have to do it
* for render views to update. See T42973.
* Note that RNA material update does it too, see e.g. rna_MaterialSlot_update(). */
- DAG_id_tag_update((ID *)ob, OB_RECALC_OB);
+ DEG_id_tag_update((ID *)ob, OB_RECALC_OB);
WM_event_add_notifier(C, NC_MATERIAL | ND_SHADING_LINKS, NULL);
}
return OL_DRAWSEL_NONE;
}
static eOLDrawState tree_element_active_texture(
- bContext *C, Scene *scene, SpaceOops *UNUSED(soops),
+ bContext *C, Scene *scene, ViewLayer *view_layer, SpaceOops *UNUSED(soops),
TreeElement *te, const eOLSetState set)
{
TreeElement *tep;
TreeStoreElem /* *tselem,*/ *tselemp;
- Object *ob = OBACT;
+ Object *ob = OBACT(view_layer);
SpaceButs *sbuts = NULL;
if (ob == NULL) {
@@ -387,14 +341,14 @@ static eOLDrawState tree_element_active_texture(
static eOLDrawState tree_element_active_lamp(
- bContext *UNUSED(C), Scene *scene, SpaceOops *soops,
+ bContext *UNUSED(C), Scene *UNUSED(scene), ViewLayer *view_layer, SpaceOops *soops,
TreeElement *te, const eOLSetState set)
{
Object *ob;
/* we search for the object parent */
ob = (Object *)outliner_search_back(soops, te, ID_OB);
- if (ob == NULL || ob != OBACT) {
+ if (ob == NULL || ob != OBACT(view_layer)) {
/* just paranoia */
return OL_DRAWSEL_NONE;
}
@@ -410,7 +364,7 @@ static eOLDrawState tree_element_active_lamp(
}
static eOLDrawState tree_element_active_camera(
- bContext *UNUSED(C), Scene *scene, SpaceOops *soops,
+ bContext *UNUSED(C), Scene *scene, ViewLayer *UNUSED(sl), SpaceOops *soops,
TreeElement *te, const eOLSetState set)
{
Object *ob = (Object *)outliner_search_back(soops, te, ID_OB);
@@ -423,7 +377,7 @@ static eOLDrawState tree_element_active_camera(
}
static eOLDrawState tree_element_active_world(
- bContext *C, Scene *scene, SpaceOops *UNUSED(soops),
+ bContext *C, Scene *scene, ViewLayer *UNUSED(sl), SpaceOops *UNUSED(soops),
TreeElement *te, const eOLSetState set)
{
TreeElement *tep;
@@ -440,7 +394,7 @@ static eOLDrawState tree_element_active_world(
if (set != OL_SETSEL_NONE) {
/* make new scene active */
if (sce && scene != sce) {
- ED_screen_set_scene(C, CTX_wm_screen(C), sce);
+ WM_window_change_active_scene(CTX_data_main(C), C, CTX_wm_window(C), sce);
}
}
@@ -456,7 +410,7 @@ static eOLDrawState tree_element_active_world(
}
static eOLDrawState tree_element_active_defgroup(
- bContext *C, Scene *scene, TreeElement *te, TreeStoreElem *tselem, const eOLSetState set)
+ bContext *C, ViewLayer *view_layer, TreeElement *te, TreeStoreElem *tselem, const eOLSetState set)
{
Object *ob;
@@ -466,21 +420,20 @@ static eOLDrawState tree_element_active_defgroup(
BLI_assert(te->index + 1 >= 0);
ob->actdef = te->index + 1;
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, ob);
}
else {
- if (ob == OBACT) {
+ if (ob == OBACT(view_layer))
if (ob->actdef == te->index + 1) {
return OL_DRAWSEL_NORMAL;
}
- }
}
return OL_DRAWSEL_NONE;
}
static eOLDrawState tree_element_active_posegroup(
- bContext *C, Scene *scene, TreeElement *te, TreeStoreElem *tselem, const eOLSetState set)
+ bContext *C, Scene *UNUSED(scene), ViewLayer *view_layer, TreeElement *te, TreeStoreElem *tselem, const eOLSetState set)
{
Object *ob = (Object *)tselem->id;
@@ -491,7 +444,7 @@ static eOLDrawState tree_element_active_posegroup(
}
}
else {
- if (ob == OBACT && ob->pose) {
+ if (ob == OBACT(view_layer) && ob->pose) {
if (ob->pose->active_group == te->index + 1) {
return OL_DRAWSEL_NORMAL;
}
@@ -501,7 +454,7 @@ static eOLDrawState tree_element_active_posegroup(
}
static eOLDrawState tree_element_active_posechannel(
- bContext *C, Scene *scene, TreeElement *te, TreeStoreElem *tselem, const eOLSetState set, bool recursive)
+ bContext *C, Scene *UNUSED(scene), ViewLayer *view_layer, TreeElement *te, TreeStoreElem *tselem, const eOLSetState set, bool recursive)
{
Object *ob = (Object *)tselem->id;
bArmature *arm = ob->data;
@@ -535,7 +488,7 @@ static eOLDrawState tree_element_active_posechannel(
}
}
else {
- if (ob == OBACT && ob->pose) {
+ if (ob == OBACT(view_layer) && ob->pose) {
if (pchan->bone->flag & BONE_SELECTED) {
return OL_DRAWSEL_NORMAL;
}
@@ -545,14 +498,14 @@ static eOLDrawState tree_element_active_posechannel(
}
static eOLDrawState tree_element_active_bone(
- bContext *C, Scene *scene, TreeElement *te, TreeStoreElem *tselem, const eOLSetState set, bool recursive)
+ bContext *C, ViewLayer *view_layer, TreeElement *te, TreeStoreElem *tselem, const eOLSetState set, bool recursive)
{
bArmature *arm = (bArmature *)tselem->id;
Bone *bone = te->directdata;
if (set != OL_SETSEL_NONE) {
if (!(bone->flag & BONE_HIDDEN_P)) {
- Object *ob = OBACT;
+ Object *ob = OBACT(view_layer);
if (ob) {
if (set != OL_SETSEL_EXTEND) {
/* single select forces all other bones to get unselected */
@@ -581,7 +534,7 @@ static eOLDrawState tree_element_active_bone(
}
}
else {
- Object *ob = OBACT;
+ Object *ob = OBACT(view_layer);
if (ob && ob->data == arm) {
if (bone->flag & BONE_SELECTED) {
@@ -654,7 +607,7 @@ static eOLDrawState tree_element_active_ebone(
}
static eOLDrawState tree_element_active_modifier(
- bContext *C, TreeElement *UNUSED(te), TreeStoreElem *tselem, const eOLSetState set)
+ bContext *C, Scene *UNUSED(scene), ViewLayer *UNUSED(sl), TreeElement *UNUSED(te), TreeStoreElem *tselem, const eOLSetState set)
{
if (set != OL_SETSEL_NONE) {
Object *ob = (Object *)tselem->id;
@@ -682,7 +635,7 @@ static eOLDrawState tree_element_active_psys(
}
static int tree_element_active_constraint(
- bContext *C, TreeElement *UNUSED(te), TreeStoreElem *tselem, const eOLSetState set)
+ bContext *C, Scene *UNUSED(scene), ViewLayer *UNUSED(sl), TreeElement *UNUSED(te), TreeStoreElem *tselem, const eOLSetState set)
{
if (set != OL_SETSEL_NONE) {
Object *ob = (Object *)tselem->id;
@@ -695,7 +648,7 @@ static int tree_element_active_constraint(
}
static eOLDrawState tree_element_active_text(
- bContext *UNUSED(C), Scene *UNUSED(scene), SpaceOops *UNUSED(soops),
+ bContext *UNUSED(C), Scene *UNUSED(scene), ViewLayer *UNUSED(sl), SpaceOops *UNUSED(soops),
TreeElement *UNUSED(te), int UNUSED(set))
{
// XXX removed
@@ -703,10 +656,11 @@ static eOLDrawState tree_element_active_text(
}
static eOLDrawState tree_element_active_pose(
- bContext *C, Scene *scene, TreeElement *UNUSED(te), TreeStoreElem *tselem, const eOLSetState set)
+ bContext *C, Scene *scene, ViewLayer *view_layer, TreeElement *UNUSED(te), TreeStoreElem *tselem, const eOLSetState set)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Object *ob = (Object *)tselem->id;
- Base *base = BKE_scene_base_find(scene, ob);
+ Base *base = BKE_view_layer_base_find(view_layer, ob);
if (base == NULL) {
/* Armature not instantiated in current scene (e.g. inside an appended group...). */
@@ -714,16 +668,18 @@ static eOLDrawState tree_element_active_pose(
}
if (set != OL_SETSEL_NONE) {
- if (scene->obedit)
+ if (scene->obedit) {
ED_object_editmode_exit(C, EM_FREEDATA | EM_FREEUNDO | EM_WAITCURSOR | EM_DO_UNDO);
-
- if (ob->mode & OB_MODE_POSE)
+ }
+ if (workspace->object_mode & OB_MODE_POSE) {
ED_armature_exit_posemode(C, base);
- else
+ }
+ else {
ED_armature_enter_posemode(C, base);
+ }
}
else {
- if (ob->mode & OB_MODE_POSE) {
+ if (workspace->object_mode & OB_MODE_POSE) {
return OL_DRAWSEL_NORMAL;
}
}
@@ -792,7 +748,7 @@ static eOLDrawState tree_element_active_sequence_dup(
}
static eOLDrawState tree_element_active_keymap_item(
- bContext *UNUSED(C), TreeElement *te, TreeStoreElem *UNUSED(tselem), const eOLSetState set)
+ bContext *UNUSED(C), Scene *UNUSED(scene), ViewLayer *UNUSED(sl), TreeElement *te, TreeStoreElem *UNUSED(tselem), const eOLSetState set)
{
wmKeyMapItem *kmi = te->directdata;
@@ -808,84 +764,127 @@ static eOLDrawState tree_element_active_keymap_item(
return OL_DRAWSEL_NONE;
}
+static eOLDrawState tree_element_active_collection(
+ bContext *C, TreeElement *te, TreeStoreElem *tselem, const eOLSetState set)
+{
+ if (set == OL_SETSEL_NONE) {
+ LayerCollection *active = CTX_data_layer_collection(C);
+
+ /* sometimes the renderlayer has no LayerCollection at all */
+ if (active == NULL) {
+ return OL_DRAWSEL_NONE;
+ }
+
+ if ((tselem->type == TSE_SCENE_COLLECTION && active->scene_collection == te->directdata) ||
+ (tselem->type == TSE_LAYER_COLLECTION && active == te->directdata))
+ {
+ return OL_DRAWSEL_NORMAL;
+ }
+ }
+ /* don't allow selecting a scene collection, it can have multiple layer collection
+ * instances (which one would the user want to be selected then?) */
+ else if (tselem->type == TSE_LAYER_COLLECTION) {
+ LayerCollection *layer_collection = te->directdata;
+
+ switch (layer_collection->scene_collection->type) {
+ case COLLECTION_TYPE_NONE:
+ case COLLECTION_TYPE_GROUP_INTERNAL:
+ {
+ ViewLayer *view_layer = BKE_view_layer_find_from_collection(tselem->id, layer_collection);
+ const int collection_index = BKE_layer_collection_findindex(view_layer, layer_collection);
+
+ if (collection_index > -1) {
+ view_layer->active_collection = collection_index;
+ }
+ break;
+ }
+ default:
+ BLI_assert(!"Collection type not fully implemented");
+ }
+ WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
+ }
+
+ return OL_DRAWSEL_NONE;
+}
+
/* ---------------------------------------------- */
/* generic call for ID data check or make/check active in UI */
-eOLDrawState tree_element_active(bContext *C, Scene *scene, SpaceOops *soops, TreeElement *te,
+eOLDrawState tree_element_active(bContext *C, Scene *scene, ViewLayer *view_layer, SpaceOops *soops, TreeElement *te,
const eOLSetState set, const bool handle_all_types)
{
switch (te->idcode) {
/* Note: ID_OB only if handle_all_type is true, else objects are handled specially to allow multiple
- * selection. See do_outliner_item_activate_from_cursor. */
+ * selection. See do_outliner_item_activate. */
case ID_OB:
if (handle_all_types) {
- return tree_element_set_active_object(C, scene, soops, te, set, false);
+ return tree_element_set_active_object(C, scene, view_layer, soops, te, set, false);
}
break;
case ID_MA:
- return tree_element_active_material(C, scene, soops, te, set);
+ return tree_element_active_material(C, scene, view_layer, soops, te, set);
case ID_WO:
- return tree_element_active_world(C, scene, soops, te, set);
+ return tree_element_active_world(C, scene, view_layer, soops, te, set);
case ID_LA:
- return tree_element_active_lamp(C, scene, soops, te, set);
+ return tree_element_active_lamp(C, scene, view_layer, soops, te, set);
case ID_TE:
- return tree_element_active_texture(C, scene, soops, te, set);
+ return tree_element_active_texture(C, scene, view_layer, soops, te, set);
case ID_TXT:
- return tree_element_active_text(C, scene, soops, te, set);
+ return tree_element_active_text(C, scene, view_layer, soops, te, set);
case ID_CA:
- return tree_element_active_camera(C, scene, soops, te, set);
+ return tree_element_active_camera(C, scene, view_layer, soops, te, set);
}
return OL_DRAWSEL_NONE;
}
/**
* Generic call for non-id data to make/check active in UI
- *
- * \note Context can be NULL when ``(set == OL_SETSEL_NONE)``
*/
eOLDrawState tree_element_type_active(
- bContext *C, Scene *scene, SpaceOops *soops,
+ bContext *C, Scene *scene, ViewLayer *view_layer, SpaceOops *soops,
TreeElement *te, TreeStoreElem *tselem, const eOLSetState set, bool recursive)
{
switch (tselem->type) {
case TSE_DEFGROUP:
- return tree_element_active_defgroup(C, scene, te, tselem, set);
+ return tree_element_active_defgroup(C, view_layer, te, tselem, set);
case TSE_BONE:
- return tree_element_active_bone(C, scene, te, tselem, set, recursive);
+ return tree_element_active_bone(C, view_layer, te, tselem, set, recursive);
case TSE_EBONE:
return tree_element_active_ebone(C, scene, te, tselem, set, recursive);
case TSE_MODIFIER:
- return tree_element_active_modifier(C, te, tselem, set);
+ return tree_element_active_modifier(C, scene, view_layer, te, tselem, set);
case TSE_LINKED_OB:
if (set != OL_SETSEL_NONE) {
- tree_element_set_active_object(C, scene, soops, te, set, false);
+ tree_element_set_active_object(C, scene, view_layer, soops, te, set, false);
}
- else if (tselem->id == (ID *)OBACT) {
+ else if (tselem->id == (ID *)OBACT(view_layer)) {
return OL_DRAWSEL_NORMAL;
}
break;
case TSE_LINKED_PSYS:
return tree_element_active_psys(C, scene, te, tselem, set);
case TSE_POSE_BASE:
- return tree_element_active_pose(C, scene, te, tselem, set);
+ return tree_element_active_pose(C, scene, view_layer, te, tselem, set);
case TSE_POSE_CHANNEL:
- return tree_element_active_posechannel(C, scene, te, tselem, set, recursive);
+ return tree_element_active_posechannel(C, scene, view_layer, te, tselem, set, recursive);
case TSE_CONSTRAINT:
- return tree_element_active_constraint(C, te, tselem, set);
+ return tree_element_active_constraint(C, scene, view_layer, te, tselem, set);
case TSE_R_LAYER:
- return tree_element_active_renderlayer(C, te, tselem, set);
+ return tree_element_active_renderlayer(C, scene, view_layer, te, tselem, set);
case TSE_POSEGRP:
- return tree_element_active_posegroup(C, scene, te, tselem, set);
+ return tree_element_active_posegroup(C, scene, view_layer, te, tselem, set);
case TSE_SEQUENCE:
return tree_element_active_sequence(C, scene, te, tselem, set);
case TSE_SEQUENCE_DUP:
return tree_element_active_sequence_dup(scene, te, tselem, set);
case TSE_KEYMAP_ITEM:
- return tree_element_active_keymap_item(C, te, tselem, set);
+ return tree_element_active_keymap_item(C, scene, view_layer, te, tselem, set);
case TSE_GP_LAYER:
- //return tree_element_active_gplayer(C, scene, te, tselem, set);
+ //return tree_element_active_gplayer(C, scene, s, te, tselem, set);
break;
-
+ case TSE_SCENE_COLLECTION:
+ case TSE_LAYER_COLLECTION:
+ return tree_element_active_collection(C, te, tselem, set);
}
return OL_DRAWSEL_NONE;
}
@@ -899,16 +898,16 @@ eOLDrawState tree_element_type_active(
* Needed to run from operators accessed from a menu.
*/
static void do_outliner_item_activate_tree_element(
- bContext *C, Scene *scene, SpaceOops *soops,
+ bContext *C, Scene *scene, ViewLayer *view_layer, SpaceOops *soops,
TreeElement *te, TreeStoreElem *tselem,
- bool extend, bool recursive)
+ const bool extend, const bool recursive)
{
/* always makes active object, except for some specific types.
* Note about TSE_EBONE: In case of a same ID_AR datablock shared among several objects, we do not want
* to switch out of edit mode (see T48328 for details). */
- if (!ELEM(tselem->type, TSE_SEQUENCE, TSE_SEQ_STRIP, TSE_SEQUENCE_DUP, TSE_EBONE)) {
+ if (!ELEM(tselem->type, TSE_SEQUENCE, TSE_SEQ_STRIP, TSE_SEQUENCE_DUP, TSE_EBONE, TSE_LAYER_COLLECTION)) {
tree_element_set_active_object(
- C, scene, soops, te,
+ C, scene, view_layer, soops, te,
(extend && tselem->type == 0) ? OL_SETSEL_EXTEND : OL_SETSEL_NORMAL,
recursive && tselem->type == 0);
}
@@ -917,100 +916,101 @@ static void do_outliner_item_activate_tree_element(
/* editmode? */
if (te->idcode == ID_SCE) {
if (scene != (Scene *)tselem->id) {
- ED_screen_set_scene(C, CTX_wm_screen(C), (Scene *)tselem->id);
+ WM_window_change_active_scene(CTX_data_main(C), C, CTX_wm_window(C), (Scene *)tselem->id);
}
}
else if (te->idcode == ID_GR) {
Group *gr = (Group *)tselem->id;
- GroupObject *gob;
if (extend) {
int sel = BA_SELECT;
- for (gob = gr->gobject.first; gob; gob = gob->next) {
- if (gob->ob->flag & SELECT) {
+ FOREACH_GROUP_BASE(gr, base)
+ {
+ if (base->flag & BASE_SELECTED) {
sel = BA_DESELECT;
break;
}
}
+ FOREACH_GROUP_BASE_END
- for (gob = gr->gobject.first; gob; gob = gob->next) {
- ED_base_object_select(BKE_scene_base_find(scene, gob->ob), sel);
+ FOREACH_GROUP_OBJECT(gr, object)
+ {
+ ED_object_base_select(BKE_view_layer_base_find(view_layer, object), sel);
}
+ FOREACH_GROUP_OBJECT_END
}
else {
- BKE_scene_base_deselect_all(scene);
-
- for (gob = gr->gobject.first; gob; gob = gob->next) {
- if ((gob->ob->flag & SELECT) == 0)
- ED_base_object_select(BKE_scene_base_find(scene, gob->ob), BA_SELECT);
+ BKE_view_layer_base_deselect_all(view_layer);
+
+ FOREACH_GROUP_OBJECT(gr, object)
+ {
+ Base *base = BKE_view_layer_base_find(view_layer, object);
+ /* Object may not be in this scene */
+ if (base != NULL) {
+ if ((base->flag & BASE_SELECTED) == 0) {
+ ED_object_base_select(base, BA_SELECT);
+ }
+ }
}
+ FOREACH_GROUP_OBJECT_END
}
-
+
WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
}
else if (ELEM(te->idcode, ID_ME, ID_CU, ID_MB, ID_LT, ID_AR)) {
WM_operator_name_call(C, "OBJECT_OT_editmode_toggle", WM_OP_INVOKE_REGION_WIN, NULL);
}
else { // rest of types
- tree_element_active(C, scene, soops, te, OL_SETSEL_NORMAL, false);
+ tree_element_active(C, scene, view_layer, soops, te, OL_SETSEL_NORMAL, false);
}
}
else {
- tree_element_type_active(
- C, scene, soops, te, tselem,
- extend ? OL_SETSEL_EXTEND : OL_SETSEL_NORMAL,
- recursive);
+ tree_element_type_active(C, scene, view_layer, soops, te, tselem,
+ extend ? OL_SETSEL_EXTEND : OL_SETSEL_NORMAL,
+ recursive);
}
}
/**
- * Activates tree items, also handles clicking on arrows.
+ * \param extend: Don't deselect other items, only modify \a te.
+ * \param toggle: Select \a te when not selected, deselect when selected.
*/
-static bool do_outliner_item_activate_from_cursor(
- bContext *C, Scene *scene, ARegion *ar, SpaceOops *soops,
- TreeElement *te, bool extend, bool recursive, const float mval[2])
+void outliner_item_select(SpaceOops *soops, const TreeElement *te, const bool extend, const bool toggle)
{
- if (mval[1] > te->ys && mval[1] < te->ys + UI_UNIT_Y) {
- TreeStoreElem *tselem = TREESTORE(te);
- bool openclose = false;
-
- /* open close icon */
- if ((te->flag & TE_ICONROW) == 0) { // hidden icon, no open/close
- if (mval[0] > te->xs && mval[0] < te->xs + UI_UNIT_X)
- openclose = true;
- }
-
- if (openclose) {
- /* all below close/open? */
- if (extend) {
- tselem->flag &= ~TSE_CLOSED;
- outliner_set_flag(&te->subtree, TSE_CLOSED, !outliner_has_one_flag(&te->subtree, TSE_CLOSED, 1));
- }
- else {
- if (tselem->flag & TSE_CLOSED) tselem->flag &= ~TSE_CLOSED;
- else tselem->flag |= TSE_CLOSED;
-
- }
-
- return true;
- }
- /* name and first icon */
- else if (mval[0] > te->xs + UI_UNIT_X && mval[0] < te->xend) {
- do_outliner_item_activate_tree_element(
- C, scene, soops,
- te, tselem,
- extend, recursive);
- return true;
- }
+ TreeStoreElem *tselem = TREESTORE(te);
+ const short new_flag = toggle ? (tselem->flag ^ TSE_SELECTED) : (tselem->flag | TSE_SELECTED);
+
+ if (extend == false) {
+ outliner_set_flag(&soops->tree, TSE_SELECTED, false);
}
-
- for (te = te->subtree.first; te; te = te->next) {
- if (do_outliner_item_activate_from_cursor(C, scene, ar, soops, te, extend, recursive, mval)) {
- return true;
- }
+ tselem->flag = new_flag;
+}
+
+static void outliner_item_toggle_closed(TreeElement *te, const bool toggle_children)
+{
+ TreeStoreElem *tselem = TREESTORE(te);
+ if (toggle_children) {
+ tselem->flag &= ~TSE_CLOSED;
+
+ const bool all_opened = !outliner_has_one_flag(&te->subtree, TSE_CLOSED, 1);
+ outliner_set_flag(&te->subtree, TSE_CLOSED, all_opened);
}
- return false;
+ else {
+ tselem->flag ^= TSE_CLOSED;
+ }
+}
+
+static bool outliner_item_is_co_within_close_toggle(TreeElement *te, float view_co_x)
+{
+ return ((te->flag & TE_ICONROW) == 0) && (view_co_x > te->xs) && (view_co_x < te->xs + UI_UNIT_X);
+}
+
+static bool outliner_is_co_within_restrict_columns(const SpaceOops *soops, const ARegion *ar, float view_co_x)
+{
+ return ((soops->outlinevis != SO_DATABLOCKS) &&
+ !(soops->flag & SO_HIDE_RESTRICTCOLS) &&
+ (view_co_x > ar->v2d.cur.xmax - OL_TOG_RESTRICT_VIEWX));
}
/**
@@ -1024,10 +1024,11 @@ void outliner_item_do_activate_from_tree_element(
bool extend, bool recursive)
{
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
SpaceOops *soops = CTX_wm_space_outliner(C);
do_outliner_item_activate_tree_element(
- C, scene, soops,
+ C, scene, view_layer, soops,
te, tselem,
extend, recursive);
}
@@ -1041,56 +1042,52 @@ int outliner_item_do_activate_from_cursor(
bContext *C, const int mval[2],
bool extend, bool recursive)
{
- Scene *scene = CTX_data_scene(C);
ARegion *ar = CTX_wm_region(C);
SpaceOops *soops = CTX_wm_space_outliner(C);
TreeElement *te;
- float fmval[2];
+ float view_mval[2];
+ bool changed = false, rebuild_tree = false;
- UI_view2d_region_to_view(&ar->v2d, mval[0], mval[1], &fmval[0], &fmval[1]);
+ UI_view2d_region_to_view(&ar->v2d, mval[0], mval[1], &view_mval[0], &view_mval[1]);
- if (!ELEM(soops->outlinevis, SO_DATABLOCKS, SO_USERDEF) &&
- !(soops->flag & SO_HIDE_RESTRICTCOLS) &&
- (fmval[0] > ar->v2d.cur.xmax - OL_TOG_RESTRICT_VIEWX))
- {
+ if (outliner_is_co_within_restrict_columns(soops, ar, view_mval[0])) {
return OPERATOR_CANCELLED;
}
- for (te = soops->tree.first; te; te = te->next) {
- if (do_outliner_item_activate_from_cursor(C, scene, ar, soops, te, extend, recursive, fmval)) {
- break;
- }
+ if (!(te = outliner_find_item_at_y(soops, &soops->tree, view_mval[1]))) {
+ /* skip */
}
-
- if (te) {
- ED_undo_push(C, "Outliner click event");
+ else if (outliner_item_is_co_within_close_toggle(te, view_mval[0])) {
+ outliner_item_toggle_closed(te, extend);
+ changed = true;
+ rebuild_tree = true;
}
else {
- short selecting = -1;
- int row;
-
- /* get row number - 100 here is just a dummy value since we don't need the column */
- UI_view2d_listview_view_to_cell(&ar->v2d, 1000, UI_UNIT_Y, 0.0f, OL_Y_OFFSET,
- fmval[0], fmval[1], NULL, &row);
-
- /* select relevant row */
- if (outliner_select(soops, &soops->tree, &row, &selecting)) {
-
+ Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ /* the row may also contain children, if one is hovered we want this instead of current te */
+ TreeElement *activate_te = outliner_find_item_at_x_in_row(soops, te, view_mval[0]);
+ TreeStoreElem *activate_tselem = TREESTORE(activate_te);
+
+ outliner_item_select(soops, activate_te, extend, extend);
+ do_outliner_item_activate_tree_element(C, scene, view_layer, soops, activate_te, activate_tselem, extend, recursive);
+ changed = true;
+ }
+
+ if (changed) {
+ if (!rebuild_tree) {
+ /* only needs to redraw, no rebuild */
soops->storeflag |= SO_TREESTORE_REDRAW;
-
- /* no need for undo push here, only changing outliner data which is
- * scene level - campbell */
- /* ED_undo_push(C, "Outliner selection event"); */
}
+ ED_undo_push(C, "Outliner selection change");
+ ED_region_tag_redraw(ar);
}
-
- ED_region_tag_redraw(ar);
return OPERATOR_FINISHED;
}
/* event can enterkey, then it opens/closes */
-static int outliner_item_activate(bContext *C, wmOperator *op, const wmEvent *event)
+static int outliner_item_activate_invoke(bContext *C, wmOperator *op, const wmEvent *event)
{
bool extend = RNA_boolean_get(op->ptr, "extend");
bool recursive = RNA_boolean_get(op->ptr, "recursive");
@@ -1103,7 +1100,7 @@ void OUTLINER_OT_item_activate(wmOperatorType *ot)
ot->idname = "OUTLINER_OT_item_activate";
ot->description = "Handle mouse clicks to activate/select items";
- ot->invoke = outliner_item_activate;
+ ot->invoke = outliner_item_activate_invoke;
ot->poll = ED_operator_outliner_active;
diff --git a/source/blender/editors/space_outliner/outliner_tools.c b/source/blender/editors/space_outliner/outliner_tools.c
index cf9deeaedf8..3ee0d011bbb 100644
--- a/source/blender/editors/space_outliner/outliner_tools.c
+++ b/source/blender/editors/space_outliner/outliner_tools.c
@@ -53,10 +53,11 @@
#include "BKE_animsys.h"
#include "BKE_context.h"
#include "BKE_constraint.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
#include "BKE_group.h"
+#include "BKE_layer.h"
#include "BKE_library.h"
+#include "BKE_library_override.h"
#include "BKE_library_query.h"
#include "BKE_library_remap.h"
#include "BKE_main.h"
@@ -64,8 +65,12 @@
#include "BKE_scene.h"
#include "BKE_sequencer.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#include "ED_armature.h"
#include "ED_object.h"
+#include "ED_scene.h"
#include "ED_screen.h"
#include "ED_sequencer.h"
#include "ED_util.h"
@@ -308,7 +313,7 @@ static bool scene_cb(bContext *C, eOutliner_PropSceneOps event, TreeElement *UNU
Scene *scene = (Scene *)tselem->id;
if (event == OL_SCENE_OP_DELETE) {
- if (ED_screen_delete_scene(C, scene)) {
+ if (ED_scene_delete(C, CTX_data_main(C), CTX_wm_window(C), scene)) {
WM_event_add_notifier(C, NC_SCENE | NA_REMOVED, scene);
}
else {
@@ -359,15 +364,15 @@ void OUTLINER_OT_scene_operation(wmOperatorType *ot)
/* ******************************************** */
static void object_select_cb(
- bContext *UNUSED(C), ReportList *UNUSED(reports), Scene *scene, TreeElement *te,
+ bContext *C, ReportList *UNUSED(reports), Scene *UNUSED(scene), TreeElement *UNUSED(te),
TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem, void *UNUSED(user_data))
{
- Base *base = (Base *)te->directdata;
-
- if (base == NULL) base = BKE_scene_base_find(scene, (Object *)tselem->id);
- if (base && ((base->object->restrictflag & OB_RESTRICT_VIEW) == 0)) {
- base->flag |= SELECT;
- base->object->flag |= SELECT;
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Object *ob = (Object *)tselem->id;
+ Base *base = BKE_view_layer_base_find(view_layer, ob);
+
+ if (base && ((base->flag & BASE_VISIBLED) != 0)) {
+ base->flag |= BASE_SELECTED;
}
}
@@ -381,15 +386,15 @@ static void object_select_hierarchy_cb(
}
static void object_deselect_cb(
- bContext *UNUSED(C), ReportList *UNUSED(reports), Scene *scene, TreeElement *te,
+ bContext *C, ReportList *UNUSED(reports), Scene *UNUSED(scene), TreeElement *UNUSED(te),
TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem, void *UNUSED(user_data))
{
- Base *base = (Base *)te->directdata;
-
- if (base == NULL) base = BKE_scene_base_find(scene, (Object *)tselem->id);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Object *ob = (Object *)tselem->id;
+ Base *base = BKE_view_layer_base_find(view_layer, ob);
+
if (base) {
- base->flag &= ~SELECT;
- base->object->flag &= ~SELECT;
+ base->flag &= ~BASE_SELECTED;
}
}
@@ -397,30 +402,27 @@ static void object_delete_cb(
bContext *C, ReportList *reports, Scene *scene, TreeElement *te,
TreeStoreElem *tsep, TreeStoreElem *tselem, void *user_data)
{
- Base *base = (Base *)te->directdata;
-
- if (base == NULL)
- base = BKE_scene_base_find(scene, (Object *)tselem->id);
- if (base) {
+ Object *ob = (Object *)tselem->id;
+ if (ob) {
Main *bmain = CTX_data_main(C);
- if (base->object->id.tag & LIB_TAG_INDIRECT) {
- BKE_reportf(reports, RPT_WARNING, "Cannot delete indirectly linked object '%s'", base->object->id.name + 2);
+ if (ob->id.tag & LIB_TAG_INDIRECT) {
+ BKE_reportf(reports, RPT_WARNING, "Cannot delete indirectly linked object '%s'", ob->id.name + 2);
return;
}
- else if (BKE_library_ID_is_indirectly_used(bmain, base->object) &&
- ID_REAL_USERS(base->object) <= 1 && ID_EXTRA_USERS(base->object) == 0)
+ else if (BKE_library_ID_is_indirectly_used(bmain, ob) &&
+ ID_REAL_USERS(ob) <= 1 && ID_EXTRA_USERS(ob) == 0)
{
BKE_reportf(reports, RPT_WARNING,
"Cannot delete object '%s' from scene '%s', indirectly used objects need at least one user",
- base->object->id.name + 2, scene->id.name + 2);
+ ob->id.name + 2, scene->id.name + 2);
return;
}
// check also library later
- if (scene->obedit == base->object)
+ if (scene->obedit == ob)
ED_object_editmode_exit(C, EM_FREEDATA | EM_FREEUNDO | EM_WAITCURSOR | EM_DO_UNDO);
- ED_base_object_free_and_unlink(CTX_data_main(C), scene, base);
+ ED_object_base_free_and_unlink(CTX_data_main(C), scene, ob);
/* leave for ED_outliner_id_unref to handle */
#if 0
te->directdata = NULL;
@@ -453,6 +455,19 @@ static void id_local_cb(
}
}
+static void id_static_override_cb(
+ bContext *C, ReportList *UNUSED(reports), Scene *UNUSED(scene), TreeElement *UNUSED(te),
+ TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem, void *UNUSED(user_data))
+{
+ if (ID_IS_LINKED(tselem->id) && (tselem->id->tag & LIB_TAG_EXTERN)) {
+ Main *bmain = CTX_data_main(C);
+ ID *override_id = BKE_override_static_create_from_id(bmain, tselem->id);
+ if (override_id != NULL) {
+ BKE_main_id_clear_newpoins(bmain);
+ }
+ }
+}
+
static void id_fake_user_set_cb(
bContext *UNUSED(C), ReportList *UNUSED(reports), Scene *UNUSED(scene), TreeElement *UNUSED(te),
TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem, void *UNUSED(user_data))
@@ -518,23 +533,27 @@ static void singleuser_world_cb(
}
static void group_linkobs2scene_cb(
- bContext *UNUSED(C), ReportList *UNUSED(reports), Scene *scene, TreeElement *UNUSED(te),
+ bContext *C, ReportList *UNUSED(reports), Scene *scene, TreeElement *UNUSED(te),
TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem, void *UNUSED(user_data))
{
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ SceneCollection *sc = CTX_data_scene_collection(C);
Group *group = (Group *)tselem->id;
- GroupObject *gob;
Base *base;
- for (gob = group->gobject.first; gob; gob = gob->next) {
- base = BKE_scene_base_find(scene, gob->ob);
+ FOREACH_GROUP_OBJECT(group, object)
+ {
+ base = BKE_view_layer_base_find(view_layer, object);
if (!base) {
/* link to scene */
- base = BKE_scene_base_add(scene, gob->ob);
- id_us_plus(&gob->ob->id);
+ BKE_collection_object_add(&scene->id, sc, object);
+ base = BKE_view_layer_base_find(view_layer, object);
+ id_us_plus(&object->id);
}
- base->object->flag |= SELECT;
- base->flag |= SELECT;
+
+ base->flag |= BASE_SELECTED;
}
+ FOREACH_GROUP_OBJECT_END
}
static void group_instance_cb(
@@ -566,7 +585,7 @@ void outliner_do_object_operation_ex(
// when objects selected in other scenes... dunno if that should be allowed
Scene *scene_owner = (Scene *)outliner_search_back(soops, te, ID_SCE);
if (scene_owner && scene_act != scene_owner) {
- ED_screen_set_scene(C, CTX_wm_screen(C), scene_owner);
+ WM_window_change_active_scene(CTX_data_main(C), C, CTX_wm_window(C), scene_owner);
}
/* important to use 'scene_owner' not scene_act else deleting objects can crash.
* only use 'scene_act' when 'scene_owner' is NULL, which can happen when the
@@ -653,6 +672,17 @@ typedef enum eOutliner_PropModifierOps {
OL_MODIFIER_OP_DELETE
} eOutliner_PropModifierOps;
+typedef enum eOutliner_PropCollectionOps {
+ OL_COLLECTION_OP_OBJECTS_ADD = 1,
+ OL_COLLECTION_OP_OBJECTS_REMOVE,
+ OL_COLLECTION_OP_OBJECTS_SELECT,
+ OL_COLLECTION_OP_COLLECTION_NEW,
+ OL_COLLECTION_OP_COLLECTION_COPY,
+ OL_COLLECTION_OP_COLLECTION_DEL,
+ OL_COLLECTION_OP_COLLECTION_UNLINK,
+ OL_COLLECTION_OP_GROUP_CREATE,
+} eOutliner_PropCollectionOps;
+
static void pchan_cb(int event, TreeElement *te, TreeStoreElem *UNUSED(tselem), void *UNUSED(arg))
{
bPoseChannel *pchan = (bPoseChannel *)te->directdata;
@@ -788,12 +818,12 @@ static void modifier_cb(int event, TreeElement *te, TreeStoreElem *UNUSED(tselem
if (event == OL_MODIFIER_OP_TOGVIS) {
md->mode ^= eModifierMode_Realtime;
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
}
else if (event == OL_MODIFIER_OP_TOGREN) {
md->mode ^= eModifierMode_Render;
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
}
else if (event == OL_MODIFIER_OP_DELETE) {
@@ -803,6 +833,90 @@ static void modifier_cb(int event, TreeElement *te, TreeStoreElem *UNUSED(tselem
}
}
+static void collection_cb(int event, TreeElement *te, TreeStoreElem *UNUSED(tselem), void *Carg)
+{
+ bContext *C = (bContext *)Carg;
+ Scene *scene = CTX_data_scene(C);
+ LayerCollection *lc = te->directdata;
+ ID *id = te->store_elem->id;
+ SceneCollection *sc = lc->scene_collection;
+
+ if (event == OL_COLLECTION_OP_OBJECTS_ADD) {
+ CTX_DATA_BEGIN (C, Object *, ob, selected_objects)
+ {
+ BKE_collection_object_add(id, sc, ob);
+ }
+ CTX_DATA_END;
+
+ WM_event_add_notifier(C, NC_SCENE | ND_LAYER, scene);
+ }
+ else if (event == OL_COLLECTION_OP_OBJECTS_REMOVE) {
+ Main *bmain = CTX_data_main(C);
+
+ CTX_DATA_BEGIN (C, Object *, ob, selected_objects)
+ {
+ BKE_collection_object_remove(bmain, id, sc, ob, true);
+ }
+ CTX_DATA_END;
+
+ WM_event_add_notifier(C, NC_SCENE | ND_LAYER, scene);
+ te->store_elem->flag &= ~TSE_SELECTED;
+ }
+ else if (event == OL_COLLECTION_OP_OBJECTS_SELECT) {
+ BKE_layer_collection_objects_select(lc);
+ WM_main_add_notifier(NC_SCENE | ND_OB_SELECT, scene);
+ }
+ else if (event == OL_COLLECTION_OP_COLLECTION_NEW) {
+ if (GS(id->name) == ID_GR) {
+ BKE_collection_add(id, sc, COLLECTION_TYPE_GROUP_INTERNAL, NULL);
+ }
+ else {
+ BLI_assert(GS(id->name) == ID_SCE);
+ BKE_collection_add(id, sc, COLLECTION_TYPE_NONE, NULL);
+ }
+ WM_event_add_notifier(C, NC_SCENE | ND_LAYER, scene);
+ }
+ else if (event == OL_COLLECTION_OP_COLLECTION_COPY) {
+ BKE_layer_collection_duplicate(id, lc);
+ DEG_relations_tag_update(CTX_data_main(C));
+ WM_event_add_notifier(C, NC_SCENE | ND_LAYER, scene);
+ }
+ else if (event == OL_COLLECTION_OP_COLLECTION_UNLINK) {
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+
+ if (BLI_findindex(&view_layer->layer_collections, lc) == -1) {
+ /* we can't unlink if the layer collection wasn't directly linked */
+ TODO_LAYER_OPERATORS; /* this shouldn't be in the menu in those cases */
+ }
+ else {
+ BKE_collection_unlink(view_layer, lc);
+ DEG_relations_tag_update(CTX_data_main(C));
+ WM_event_add_notifier(C, NC_SCENE | ND_LAYER, scene);
+ }
+ }
+ else if (event == OL_COLLECTION_OP_COLLECTION_DEL) {
+ if (BKE_collection_remove(id, sc)) {
+ DEG_relations_tag_update(CTX_data_main(C));
+ WM_event_add_notifier(C, NC_SCENE | ND_LAYER, scene);
+ }
+ else {
+ /* we can't remove the master collection */
+ TODO_LAYER_OPERATORS; /* this shouldn't be in the menu in those cases */
+ }
+ }
+ else if (event == OL_COLLECTION_OP_GROUP_CREATE) {
+ Main *bmain = CTX_data_main(C);
+ BKE_collection_group_create(bmain, scene, lc);
+ DEG_relations_tag_update(bmain);
+ /* TODO(sergey): Use proper flag for tagging here. */
+ DEG_id_tag_update(&scene->id, 0);
+ WM_event_add_notifier(C, NC_SCENE | ND_LAYER, scene);
+ }
+ else {
+ BLI_assert(!"Collection operation not fully implemented!");
+ }
+}
+
static void outliner_do_data_operation(SpaceOops *soops, int type, int event, ListBase *lb,
void (*operation_cb)(int, TreeElement *, TreeStoreElem *, void *),
void *arg)
@@ -827,12 +941,13 @@ static Base *outline_delete_hierarchy(bContext *C, ReportList *reports, Scene *s
{
Base *child_base, *base_next;
Object *parent;
+ ViewLayer *view_layer = CTX_data_view_layer(C);
if (!base) {
return NULL;
}
- for (child_base = scene->base.first; child_base; child_base = base_next) {
+ for (child_base = view_layer->object_bases.first; child_base; child_base = base_next) {
base_next = child_base->next;
for (parent = child_base->object->parent; parent && (parent != base->object); parent = parent->parent);
if (parent) {
@@ -855,7 +970,7 @@ static Base *outline_delete_hierarchy(bContext *C, ReportList *reports, Scene *s
base->object->id.name + 2, scene->id.name + 2);
return base_next;
}
- ED_base_object_free_and_unlink(CTX_data_main(C), scene, base);
+ ED_object_base_free_and_unlink(CTX_data_main(C), scene, base->object);
return base_next;
}
@@ -863,11 +978,12 @@ static void object_delete_hierarchy_cb(
bContext *C, ReportList *reports, Scene *scene,
TreeElement *te, TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem, void *UNUSED(user_data))
{
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Base *base = (Base *)te->directdata;
Object *obedit = scene->obedit;
if (!base) {
- base = BKE_scene_base_find(scene, (Object *)tselem->id);
+ base = BKE_view_layer_base_find(view_layer, (Object *)tselem->id);
}
if (base) {
/* Check also library later. */
@@ -911,9 +1027,6 @@ static const EnumPropertyItem prop_object_op_types[] = {
{OL_OP_DELETE_HIERARCHY, "DELETE_HIERARCHY", 0, "Delete Hierarchy", ""},
{OL_OP_REMAP, "REMAP", 0, "Remap Users",
"Make all users of selected data-blocks to use instead a new chosen one"},
- {OL_OP_TOGVIS, "TOGVIS", 0, "Toggle Visible", ""},
- {OL_OP_TOGSEL, "TOGSEL", 0, "Toggle Selectable", ""},
- {OL_OP_TOGREN, "TOGREN", 0, "Toggle Renderable", ""},
{OL_OP_RENAME, "RENAME", 0, "Rename", ""},
{0, NULL, 0, NULL, NULL}
};
@@ -922,6 +1035,7 @@ static int outliner_object_operation_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
+ wmWindow *win = CTX_wm_window(C);
SpaceOops *soops = CTX_wm_space_outliner(C);
int event;
const char *str = NULL;
@@ -936,7 +1050,7 @@ static int outliner_object_operation_exec(bContext *C, wmOperator *op)
Scene *sce = scene; // to be able to delete, scenes are set...
outliner_do_object_operation(C, op->reports, scene, soops, &soops->tree, object_select_cb);
if (scene != sce) {
- ED_screen_set_scene(C, CTX_wm_screen(C), sce);
+ WM_window_change_active_scene(bmain, C, win, sce);
}
str = "Select Objects";
@@ -946,8 +1060,8 @@ static int outliner_object_operation_exec(bContext *C, wmOperator *op)
Scene *sce = scene; // to be able to delete, scenes are set...
outliner_do_object_operation_ex(C, op->reports, scene, soops, &soops->tree, object_select_hierarchy_cb, false);
if (scene != sce) {
- ED_screen_set_scene(C, CTX_wm_screen(C), sce);
- }
+ WM_window_change_active_scene(bmain, C, win, sce);
+ }
str = "Select Object Hierarchy";
WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
}
@@ -966,7 +1080,7 @@ static int outliner_object_operation_exec(bContext *C, wmOperator *op)
* cleanup tree here to prevent such cases. */
outliner_cleanup_tree(soops);
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
str = "Delete Objects";
WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, scene);
}
@@ -976,7 +1090,7 @@ static int outliner_object_operation_exec(bContext *C, wmOperator *op)
/* XXX: See OL_OP_DELETE comment above. */
outliner_cleanup_tree(soops);
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
str = "Delete Object Hierarchy";
WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, scene);
}
@@ -988,21 +1102,6 @@ static int outliner_object_operation_exec(bContext *C, wmOperator *op)
outliner_do_object_operation(C, op->reports, scene, soops, &soops->tree, id_local_cb);
str = "Localized Objects";
}
- else if (event == OL_OP_TOGVIS) {
- outliner_do_object_operation(C, op->reports, scene, soops, &soops->tree, object_toggle_visibility_cb);
- str = "Toggle Visibility";
- WM_event_add_notifier(C, NC_SCENE | ND_OB_VISIBLE, scene);
- }
- else if (event == OL_OP_TOGSEL) {
- outliner_do_object_operation(C, op->reports, scene, soops, &soops->tree, object_toggle_selectability_cb);
- str = "Toggle Selectability";
- WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
- }
- else if (event == OL_OP_TOGREN) {
- outliner_do_object_operation(C, op->reports, scene, soops, &soops->tree, object_toggle_renderability_cb);
- str = "Toggle Renderability";
- WM_event_add_notifier(C, NC_SCENE | ND_OB_RENDER, scene);
- }
else if (event == OL_OP_RENAME) {
outliner_do_object_operation(C, op->reports, scene, soops, &soops->tree, item_rename_cb);
str = "Rename Object";
@@ -1040,6 +1139,7 @@ void OUTLINER_OT_object_operation(wmOperatorType *ot)
typedef enum eOutliner_PropGroupOps {
OL_GROUPOP_UNLINK = 1,
OL_GROUPOP_LOCAL,
+ OL_GROUPOP_STATIC_OVERRIDE,
OL_GROUPOP_LINK,
OL_GROUPOP_DELETE,
OL_GROUPOP_REMAP,
@@ -1053,6 +1153,8 @@ typedef enum eOutliner_PropGroupOps {
static const EnumPropertyItem prop_group_op_types[] = {
{OL_GROUPOP_UNLINK, "UNLINK", 0, "Unlink Group", ""},
{OL_GROUPOP_LOCAL, "LOCAL", 0, "Make Local Group", ""},
+ {OL_GROUPOP_STATIC_OVERRIDE, "STATIC_OVERRIDE",
+ 0, "Add Static Override", "Add a local static override of that group"},
{OL_GROUPOP_LINK, "LINK", 0, "Link Group Objects to Scene", ""},
{OL_GROUPOP_DELETE, "DELETE", 0, "Delete Group", ""},
{OL_GROUPOP_REMAP, "REMAP", 0, "Remap Users",
@@ -1084,13 +1186,16 @@ static int outliner_group_operation_exec(bContext *C, wmOperator *op)
case OL_GROUPOP_LOCAL:
outliner_do_libdata_operation(C, op->reports, scene, soops, &soops->tree, id_local_cb, NULL);
break;
+ case OL_GROUPOP_STATIC_OVERRIDE:
+ outliner_do_libdata_operation(C, op->reports, scene, soops, &soops->tree, id_static_override_cb, NULL);
+ break;
case OL_GROUPOP_LINK:
outliner_do_libdata_operation(C, op->reports, scene, soops, &soops->tree, group_linkobs2scene_cb, NULL);
break;
case OL_GROUPOP_INSTANCE:
outliner_do_libdata_operation(C, op->reports, scene, soops, &soops->tree, group_instance_cb, NULL);
/* works without this except if you try render right after, see: 22027 */
- DAG_relations_tag_update(CTX_data_main(C));
+ DEG_relations_tag_update(CTX_data_main(C));
break;
case OL_GROUPOP_DELETE:
outliner_do_libdata_operation(C, op->reports, scene, soops, &soops->tree, id_delete_cb, NULL);
@@ -1098,15 +1203,6 @@ static int outliner_group_operation_exec(bContext *C, wmOperator *op)
case OL_GROUPOP_REMAP:
outliner_do_libdata_operation(C, op->reports, scene, soops, &soops->tree, id_remap_cb, NULL);
break;
- case OL_GROUPOP_TOGVIS:
- outliner_do_libdata_operation(C, op->reports, scene, soops, &soops->tree, group_toggle_visibility_cb, NULL);
- break;
- case OL_GROUPOP_TOGSEL:
- outliner_do_libdata_operation(C, op->reports, scene, soops, &soops->tree, group_toggle_selectability_cb, NULL);
- break;
- case OL_GROUPOP_TOGREN:
- outliner_do_libdata_operation(C, op->reports, scene, soops, &soops->tree, group_toggle_renderability_cb, NULL);
- break;
case OL_GROUPOP_RENAME:
outliner_do_libdata_operation(C, op->reports, scene, soops, &soops->tree, item_rename_cb, NULL);
break;
@@ -1145,6 +1241,7 @@ typedef enum eOutlinerIdOpTypes {
OUTLINER_IDOP_UNLINK,
OUTLINER_IDOP_LOCAL,
+ OUTLINER_IDOP_STATIC_OVERRIDE,
OUTLINER_IDOP_SINGLE,
OUTLINER_IDOP_DELETE,
OUTLINER_IDOP_REMAP,
@@ -1160,6 +1257,8 @@ typedef enum eOutlinerIdOpTypes {
static const EnumPropertyItem prop_id_op_types[] = {
{OUTLINER_IDOP_UNLINK, "UNLINK", 0, "Unlink", ""},
{OUTLINER_IDOP_LOCAL, "LOCAL", 0, "Make Local", ""},
+ {OUTLINER_IDOP_STATIC_OVERRIDE, "STATIC_OVERRIDE",
+ 0, "Add Static Override", "Add a local static override of this data-block"},
{OUTLINER_IDOP_SINGLE, "SINGLE", 0, "Make Single User", ""},
{OUTLINER_IDOP_DELETE, "DELETE", 0, "Delete", "WARNING: no undo"},
{OUTLINER_IDOP_REMAP, "REMAP", 0, "Remap Users",
@@ -1229,6 +1328,13 @@ static int outliner_id_operation_exec(bContext *C, wmOperator *op)
ED_undo_push(C, "Localized Data");
break;
}
+ case OUTLINER_IDOP_STATIC_OVERRIDE:
+ {
+ /* make local */
+ outliner_do_libdata_operation(C, op->reports, scene, soops, &soops->tree, id_static_override_cb, NULL);
+ ED_undo_push(C, "Overrided Data");
+ break;
+ }
case OUTLINER_IDOP_SINGLE:
{
/* make single user */
@@ -1628,7 +1734,7 @@ static int outliner_animdata_operation_exec(bContext *C, wmOperator *op)
/* update dependencies */
if (updateDeps) {
/* rebuild depsgraph for the new deps */
- DAG_relations_tag_update(CTX_data_main(C));
+ DEG_relations_tag_update(CTX_data_main(C));
}
return OPERATOR_FINISHED;
@@ -1746,6 +1852,84 @@ void OUTLINER_OT_modifier_operation(wmOperatorType *ot)
/* ******************** */
+static EnumPropertyItem prop_collection_op_types[] = {
+ {OL_COLLECTION_OP_OBJECTS_ADD, "OBJECTS_ADD", ICON_ZOOMIN, "Add Selected", "Add selected objects to collection"},
+ {OL_COLLECTION_OP_OBJECTS_REMOVE, "OBJECTS_REMOVE", ICON_X, "Remove Selected", "Remove selected objects from collection"},
+ {OL_COLLECTION_OP_OBJECTS_SELECT, "OBJECTS_SELECT", ICON_RESTRICT_SELECT_OFF, "Select Objects", "Selected collection objects"},
+ {OL_COLLECTION_OP_COLLECTION_NEW, "COLLECTION_NEW", ICON_NEW, "New Collection", "Add a new nested collection"},
+ {OL_COLLECTION_OP_COLLECTION_COPY, "COLLECTION_DUPLI", ICON_NONE, "Duplicate Collection", "Duplicate the collection"},
+ {OL_COLLECTION_OP_COLLECTION_UNLINK, "COLLECTION_UNLINK", ICON_UNLINKED, "Unlink", "Unlink collection"},
+ {OL_COLLECTION_OP_COLLECTION_DEL, "COLLECTION_DEL", ICON_X, "Delete Collection", "Delete the collection"},
+ {OL_COLLECTION_OP_GROUP_CREATE, "GROUP_CREATE", ICON_GROUP, "Create Group", "Turn the collection into a group collection"},
+ {0, NULL, 0, NULL, NULL}
+};
+
+static int outliner_collection_operation_exec(bContext *C, wmOperator *op)
+{
+ SpaceOops *soops = CTX_wm_space_outliner(C);
+ int scenelevel = 0, objectlevel = 0, idlevel = 0, datalevel = 0;
+ eOutliner_PropCollectionOps event;
+
+ event = RNA_enum_get(op->ptr, "type");
+ set_operation_types(soops, &soops->tree, &scenelevel, &objectlevel, &idlevel, &datalevel);
+
+ outliner_do_data_operation(soops, datalevel, event, &soops->tree, collection_cb, C);
+
+ outliner_cleanup_tree(soops);
+
+ ED_undo_push(C, "Collection operation");
+
+ return OPERATOR_FINISHED;
+}
+
+static int outliner_collection_operation_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
+{
+ SpaceOops *soops = CTX_wm_space_outliner(C);
+ wmOperatorType *ot = op->type;
+ EnumPropertyItem *prop = &prop_collection_op_types[0];
+
+ uiPopupMenu *pup = UI_popup_menu_begin(C, "Collection", ICON_NONE);
+ uiLayout *layout = UI_popup_menu_layout(pup);
+
+ for (int i = 0; i < (ARRAY_SIZE(prop_collection_op_types) - 1); i++, prop++) {
+ if (soops->outlinevis != SO_GROUPS ||
+ !ELEM(prop->value,
+ OL_COLLECTION_OP_OBJECTS_SELECT,
+ OL_COLLECTION_OP_COLLECTION_UNLINK,
+ OL_COLLECTION_OP_GROUP_CREATE))
+ {
+ uiItemEnumO_ptr(layout, ot, NULL, prop->icon, "type", prop->value);
+ }
+ }
+
+ UI_popup_menu_end(C, pup);
+
+ return OPERATOR_INTERFACE;
+}
+
+void OUTLINER_OT_collection_operation(wmOperatorType *ot)
+{
+ PropertyRNA *prop;
+
+ /* identifiers */
+ ot->name = "Outliner Collection Operation";
+ ot->idname = "OUTLINER_OT_collection_operation";
+ ot->description = "";
+
+ /* callbacks */
+ ot->invoke = outliner_collection_operation_invoke;
+ ot->exec = outliner_collection_operation_exec;
+ ot->poll = ED_operator_outliner_active;
+
+ ot->flag = 0;
+
+ prop = RNA_def_enum(ot->srna, "type", prop_collection_op_types, OL_COLLECTION_OP_OBJECTS_ADD, "Collection Operation", "");
+ RNA_def_property_flag(prop, PROP_ENUM_NO_TRANSLATE);
+ ot->prop = prop;
+}
+
+/* ******************** */
+
// XXX: select linked is for RNA structs only
static const EnumPropertyItem prop_data_op_types[] = {
{OL_DOP_SELECT, "SELECT", 0, "Select", ""},
@@ -1878,7 +2062,7 @@ static int do_outliner_operation_event(bContext *C, ARegion *ar, SpaceOops *soop
}
}
else if (objectlevel) {
- WM_operator_name_call(C, "OUTLINER_OT_object_operation", WM_OP_INVOKE_REGION_WIN, NULL);
+ WM_menu_name_call(C, "OUTLINER_MT_context_object", WM_OP_INVOKE_REGION_WIN);
}
else if (idlevel) {
if (idlevel == -1 || datalevel) {
@@ -1920,6 +2104,12 @@ static int do_outliner_operation_event(bContext *C, ARegion *ar, SpaceOops *soop
else if (datalevel == TSE_MODIFIER) {
WM_operator_name_call(C, "OUTLINER_OT_modifier_operation", WM_OP_INVOKE_REGION_WIN, NULL);
}
+ else if (datalevel == TSE_LAYER_COLLECTION) {
+ WM_operator_name_call(C, "OUTLINER_OT_collection_operation", WM_OP_INVOKE_REGION_WIN, NULL);
+ }
+ else if (datalevel == TSE_SCENE_COLLECTION) {
+ WM_menu_name_call(C, "OUTLINER_MT_context_scene_collection", WM_OP_INVOKE_REGION_WIN);
+ }
else {
WM_operator_name_call(C, "OUTLINER_OT_data_operation", WM_OP_INVOKE_REGION_WIN, NULL);
}
diff --git a/source/blender/editors/space_outliner/outliner_tree.c b/source/blender/editors/space_outliner/outliner_tree.c
index cf77afa32c4..e2bd4c5672c 100644
--- a/source/blender/editors/space_outliner/outliner_tree.c
+++ b/source/blender/editors/space_outliner/outliner_tree.c
@@ -46,6 +46,7 @@
#include "DNA_material_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meta_types.h"
+#include "DNA_lightprobe_types.h"
#include "DNA_particle_types.h"
#include "DNA_scene_types.h"
#include "DNA_world_types.h"
@@ -63,12 +64,16 @@
#include "BKE_fcurve.h"
#include "BKE_main.h"
+#include "BKE_layer.h"
#include "BKE_library.h"
#include "BKE_modifier.h"
#include "BKE_sequencer.h"
#include "BKE_idcode.h"
#include "BKE_outliner_treehash.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#include "ED_armature.h"
#include "ED_screen.h"
@@ -77,12 +82,25 @@
#include "RNA_access.h"
+#include "UI_interface.h"
+
#include "outliner_intern.h"
#ifdef WIN32
# include "BLI_math_base.h" /* M_PI */
#endif
+/* prototypes */
+static void outliner_add_layer_collections_recursive(
+ SpaceOops *soops, const EvaluationContext *eval_ctx,
+ ListBase *tree, ID *id, ListBase *layer_collections, TreeElement *parent_ten,
+ const bool show_objects);
+static void outliner_add_view_layer(
+ SpaceOops *soops, const EvaluationContext *eval_ctx,
+ ListBase *tree, TreeElement *parent,
+ Scene *scene, ViewLayer *layer, const bool show_objects);
+static void outliner_make_hierarchy(ListBase *lb);
+
/* ********************************************************* */
/* Persistent Data */
@@ -180,16 +198,11 @@ static void check_persistent(SpaceOops *soops, TreeElement *te, ID *id, short ty
/* ********************************************************* */
/* Tree Management */
-void outliner_free_tree(ListBase *lb)
+void outliner_free_tree(ListBase *tree)
{
- while (lb->first) {
- TreeElement *te = lb->first;
-
- outliner_free_tree(&te->subtree);
- BLI_remlink(lb, te);
-
- if (te->flag & TE_FREE_NAME) MEM_freeN((void *)te->name);
- MEM_freeN(te);
+ for (TreeElement *element = tree->first, *element_next; element; element = element_next) {
+ element_next = element->next;
+ outliner_free_tree_element(element, tree);
}
}
@@ -199,126 +212,48 @@ void outliner_cleanup_tree(SpaceOops *soops)
outliner_storage_cleanup(soops);
}
-/* Find specific item from the treestore */
-TreeElement *outliner_find_tree_element(ListBase *lb, const TreeStoreElem *store_elem)
-{
- TreeElement *te, *tes;
- for (te = lb->first; te; te = te->next) {
- if (te->store_elem == store_elem) return te;
- tes = outliner_find_tree_element(&te->subtree, store_elem);
- if (tes) return tes;
- }
- return NULL;
-}
-
-/* tse is not in the treestore, we use its contents to find a match */
-TreeElement *outliner_find_tse(SpaceOops *soops, const TreeStoreElem *tse)
-{
- TreeStoreElem *tselem;
-
- if (tse->id == NULL) return NULL;
-
- /* check if 'tse' is in treestore */
- tselem = BKE_outliner_treehash_lookup_any(soops->treehash, tse->type, tse->nr, tse->id);
- if (tselem)
- return outliner_find_tree_element(&soops->tree, tselem);
-
- return NULL;
-}
-
-/* Find treestore that refers to given ID */
-TreeElement *outliner_find_id(SpaceOops *soops, ListBase *lb, const ID *id)
-{
- for (TreeElement *te = lb->first; te; te = te->next) {
- TreeStoreElem *tselem = TREESTORE(te);
- if (tselem->type == 0) {
- if (tselem->id == id) {
- return te;
- }
- /* only deeper on scene or object */
- if (ELEM(te->idcode, ID_OB, ID_SCE) ||
- ((soops->outlinevis == SO_GROUPS) && (te->idcode == ID_GR)))
- {
- TreeElement *tes = outliner_find_id(soops, &te->subtree, id);
- if (tes) {
- return tes;
- }
- }
- }
- }
- return NULL;
-}
-
-TreeElement *outliner_find_posechannel(ListBase *lb, const bPoseChannel *pchan)
-{
- for (TreeElement *te = lb->first; te; te = te->next) {
- if (te->directdata == pchan) {
- return te;
- }
-
- TreeStoreElem *tselem = TREESTORE(te);
- if (ELEM(tselem->type, TSE_POSE_BASE, TSE_POSE_CHANNEL)) {
- TreeElement *tes = outliner_find_posechannel(&te->subtree, pchan);
- if (tes) {
- return tes;
- }
- }
- }
- return NULL;
-}
-
-TreeElement *outliner_find_editbone(ListBase *lb, const EditBone *ebone)
+/**
+ * Free \a element and its sub-tree and remove its link in \a parent_subtree.
+ *
+ * \note Does not remove the TreeStoreElem of \a element!
+ * \param parent_subtree Subtree of the parent element, so the list containing \a element.
+ */
+void outliner_free_tree_element(TreeElement *element, ListBase *parent_subtree)
{
- for (TreeElement *te = lb->first; te; te = te->next) {
- if (te->directdata == ebone) {
- return te;
- }
+ BLI_assert(BLI_findindex(parent_subtree, element) > -1);
+ BLI_remlink(parent_subtree, element);
- TreeStoreElem *tselem = TREESTORE(te);
- if (ELEM(tselem->type, 0, TSE_EBONE)) {
- TreeElement *tes = outliner_find_editbone(&te->subtree, ebone);
- if (tes) {
- return tes;
- }
- }
- }
- return NULL;
-}
+ outliner_free_tree(&element->subtree);
-ID *outliner_search_back(SpaceOops *UNUSED(soops), TreeElement *te, short idcode)
-{
- TreeStoreElem *tselem;
- te = te->parent;
-
- while (te) {
- tselem = TREESTORE(te);
- if (tselem->type == 0 && te->idcode == idcode) return tselem->id;
- te = te->parent;
+ if (element->flag & TE_FREE_NAME) {
+ MEM_freeN((void *)element->name);
}
- return NULL;
+ MEM_freeN(element);
}
/* ********************************************************* */
/* Prototype, see functions below */
-static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *idv,
- TreeElement *parent, short type, short index);
+static TreeElement *outliner_add_element(
+ SpaceOops *soops, const EvaluationContext *eval_ctx,
+ ListBase *lb, void *idv, TreeElement *parent, short type, short index);
/* -------------------------------------------------------- */
/* special handling of hierarchical non-lib data */
-static void outliner_add_bone(SpaceOops *soops, ListBase *lb, ID *id, Bone *curBone,
- TreeElement *parent, int *a)
+static void outliner_add_bone(
+ SpaceOops *soops, const EvaluationContext *eval_ctx,
+ ListBase *lb, ID *id, Bone *curBone, TreeElement *parent, int *a)
{
- TreeElement *te = outliner_add_element(soops, lb, id, parent, TSE_BONE, *a);
+ TreeElement *te = outliner_add_element(soops, eval_ctx, lb, id, parent, TSE_BONE, *a);
(*a)++;
te->name = curBone->name;
te->directdata = curBone;
for (curBone = curBone->childbase.first; curBone; curBone = curBone->next) {
- outliner_add_bone(soops, &te->subtree, id, curBone, te, a);
+ outliner_add_bone(soops, eval_ctx, &te->subtree, id, curBone, te, a);
}
}
@@ -326,7 +261,9 @@ static void outliner_add_bone(SpaceOops *soops, ListBase *lb, ID *id, Bone *curB
#define LOG2I(x) (int)(log(x) / M_LN2)
-static void outliner_add_passes(SpaceOops *soops, TreeElement *tenla, ID *id, SceneRenderLayer *srl)
+static void outliner_add_passes(
+ SpaceOops *soops, const EvaluationContext *eval_ctx,
+ TreeElement *tenla, ID *id, ViewLayer *view_layer)
{
TreeStoreElem *tselem = NULL;
TreeElement *te = NULL;
@@ -334,82 +271,82 @@ static void outliner_add_passes(SpaceOops *soops, TreeElement *tenla, ID *id, Sc
/* log stuff is to convert bitflags (powers of 2) to small integers,
* in order to not overflow short tselem->nr */
- te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_COMBINED));
+ te = outliner_add_element(soops, eval_ctx, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_COMBINED));
te->name = IFACE_("Combined");
- te->directdata = &srl->passflag;
+ te->directdata = &view_layer->passflag;
/* save cpu cycles, but we add the first to invoke an open/close triangle */
tselem = TREESTORE(tenla);
if (tselem->flag & TSE_CLOSED)
return;
- te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_Z));
+ te = outliner_add_element(soops, eval_ctx, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_Z));
te->name = IFACE_("Z");
- te->directdata = &srl->passflag;
+ te->directdata = &view_layer->passflag;
- te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_VECTOR));
+ te = outliner_add_element(soops, eval_ctx, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_VECTOR));
te->name = IFACE_("Vector");
- te->directdata = &srl->passflag;
+ te->directdata = &view_layer->passflag;
- te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_NORMAL));
+ te = outliner_add_element(soops, eval_ctx, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_NORMAL));
te->name = IFACE_("Normal");
- te->directdata = &srl->passflag;
+ te->directdata = &view_layer->passflag;
- te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_UV));
+ te = outliner_add_element(soops, eval_ctx, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_UV));
te->name = IFACE_("UV");
- te->directdata = &srl->passflag;
+ te->directdata = &view_layer->passflag;
- te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_MIST));
+ te = outliner_add_element(soops, eval_ctx, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_MIST));
te->name = IFACE_("Mist");
- te->directdata = &srl->passflag;
+ te->directdata = &view_layer->passflag;
- te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_INDEXOB));
+ te = outliner_add_element(soops, eval_ctx, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_INDEXOB));
te->name = IFACE_("Index Object");
- te->directdata = &srl->passflag;
+ te->directdata = &view_layer->passflag;
- te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_INDEXMA));
+ te = outliner_add_element(soops, eval_ctx, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_INDEXMA));
te->name = IFACE_("Index Material");
- te->directdata = &srl->passflag;
+ te->directdata = &view_layer->passflag;
- te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_RGBA));
+ te = outliner_add_element(soops, eval_ctx, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_RGBA));
te->name = IFACE_("Color");
- te->directdata = &srl->passflag;
+ te->directdata = &view_layer->passflag;
- te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_DIFFUSE));
+ te = outliner_add_element(soops, eval_ctx, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_DIFFUSE));
te->name = IFACE_("Diffuse");
- te->directdata = &srl->passflag;
+ te->directdata = &view_layer->passflag;
- te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_SPEC));
+ te = outliner_add_element(soops, eval_ctx, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_SPEC));
te->name = IFACE_("Specular");
- te->directdata = &srl->passflag;
+ te->directdata = &view_layer->passflag;
- te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_SHADOW));
+ te = outliner_add_element(soops, eval_ctx, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_SHADOW));
te->name = IFACE_("Shadow");
- te->directdata = &srl->passflag;
+ te->directdata = &view_layer->passflag;
- te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_AO));
+ te = outliner_add_element(soops, eval_ctx, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_AO));
te->name = IFACE_("AO");
- te->directdata = &srl->passflag;
+ te->directdata = &view_layer->passflag;
- te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_REFLECT));
+ te = outliner_add_element(soops, eval_ctx, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_REFLECT));
te->name = IFACE_("Reflection");
- te->directdata = &srl->passflag;
+ te->directdata = &view_layer->passflag;
- te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_REFRACT));
+ te = outliner_add_element(soops, eval_ctx, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_REFRACT));
te->name = IFACE_("Refraction");
- te->directdata = &srl->passflag;
+ te->directdata = &view_layer->passflag;
- te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_INDIRECT));
+ te = outliner_add_element(soops, eval_ctx, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_INDIRECT));
te->name = IFACE_("Indirect");
- te->directdata = &srl->passflag;
+ te->directdata = &view_layer->passflag;
- te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_ENVIRONMENT));
+ te = outliner_add_element(soops, eval_ctx, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_ENVIRONMENT));
te->name = IFACE_("Environment");
- te->directdata = &srl->passflag;
+ te->directdata = &view_layer->passflag;
- te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_EMIT));
+ te = outliner_add_element(soops, eval_ctx, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_EMIT));
te->name = IFACE_("Emit");
- te->directdata = &srl->passflag;
+ te->directdata = &view_layer->passflag;
}
#undef LOG2I
@@ -424,94 +361,200 @@ static bool outliner_animdata_test(AnimData *adt)
#ifdef WITH_FREESTYLE
static void outliner_add_line_styles(SpaceOops *soops, ListBase *lb, Scene *sce, TreeElement *te)
{
- SceneRenderLayer *srl;
+ ViewLayer *view_layer;
FreestyleLineSet *lineset;
- for (srl = sce->r.layers.first; srl; srl = srl->next) {
- for (lineset = srl->freestyleConfig.linesets.first; lineset; lineset = lineset->next) {
+ for (view_layer = sce->view_layers.first; view_layer; view_layer = view_layer->next) {
+ for (lineset = view_layer->freestyle_config.linesets.first; lineset; lineset = lineset->next) {
FreestyleLineStyle *linestyle = lineset->linestyle;
if (linestyle) {
linestyle->id.tag |= LIB_TAG_DOIT;
}
}
}
- for (srl = sce->r.layers.first; srl; srl = srl->next) {
- for (lineset = srl->freestyleConfig.linesets.first; lineset; lineset = lineset->next) {
+ for (view_layer = sce->view_layers.first; view_layer; view_layer = view_layer->next) {
+ for (lineset = view_layer->freestyle_config.linesets.first; lineset; lineset = lineset->next) {
FreestyleLineStyle *linestyle = lineset->linestyle;
if (linestyle) {
if (!(linestyle->id.tag & LIB_TAG_DOIT))
continue;
linestyle->id.tag &= ~LIB_TAG_DOIT;
- outliner_add_element(soops, lb, linestyle, te, 0, 0);
+ outliner_add_element(soops, eval_ctx, lb, linestyle, te, 0, 0);
}
}
}
}
#endif
-static void outliner_add_scene_contents(SpaceOops *soops, ListBase *lb, Scene *sce, TreeElement *te)
+static void outliner_add_scene_contents(
+ SpaceOops *soops, const EvaluationContext *eval_ctx,
+ ListBase *lb, Scene *sce, TreeElement *te)
{
- SceneRenderLayer *srl;
- TreeElement *tenla = outliner_add_element(soops, lb, sce, te, TSE_R_LAYER_BASE, 0);
+ ViewLayer *view_layer;
+ TreeElement *tenla = outliner_add_element(soops, eval_ctx, lb, sce, te, TSE_R_LAYER_BASE, 0);
int a;
- tenla->name = IFACE_("RenderLayers");
- for (a = 0, srl = sce->r.layers.first; srl; srl = srl->next, a++) {
- TreeElement *tenlay = outliner_add_element(soops, &tenla->subtree, sce, te, TSE_R_LAYER, a);
- tenlay->name = srl->name;
- tenlay->directdata = &srl->layflag;
-
- if (srl->light_override)
- outliner_add_element(soops, &tenlay->subtree, srl->light_override, tenlay, TSE_LINKED_LAMP, 0);
- if (srl->mat_override)
- outliner_add_element(soops, &tenlay->subtree, srl->mat_override, tenlay, TSE_LINKED_MAT, 0);
-
- outliner_add_passes(soops, tenlay, &sce->id, srl);
+ tenla->name = IFACE_("View Layers");
+ for (a = 0, view_layer = sce->view_layers.first; view_layer; view_layer = view_layer->next, a++) {
+ TreeElement *tenlay = outliner_add_element(soops, eval_ctx, &tenla->subtree, sce, te, TSE_R_LAYER, a);
+ tenlay->name = view_layer->name;
+ tenlay->directdata = &view_layer->flag;
+
+ TreeElement *te_view_layers;
+ te_view_layers = outliner_add_element(soops, eval_ctx, &tenlay->subtree, sce, tenlay, TSE_LAYER_COLLECTION_BASE, 0);
+ te_view_layers->name = IFACE_("Collections");
+ outliner_add_view_layer(soops, eval_ctx, &te_view_layers->subtree, te_view_layers, sce, view_layer, false);
+
+ TreeElement *te_passes;
+ te_passes = outliner_add_element(soops, eval_ctx, &tenlay->subtree, sce, tenlay, TSE_LAYER_COLLECTION_BASE, 0);
+ te_passes->name = IFACE_("Passes");
+ outliner_add_passes(soops, eval_ctx, te_passes, &sce->id, view_layer);
}
// TODO: move this to the front?
if (outliner_animdata_test(sce->adt))
- outliner_add_element(soops, lb, sce, te, TSE_ANIM_DATA, 0);
+ outliner_add_element(soops, eval_ctx, lb, sce, te, TSE_ANIM_DATA, 0);
- outliner_add_element(soops, lb, sce->gpd, te, 0, 0);
+ outliner_add_element(soops, eval_ctx, lb, sce->gpd, te, 0, 0);
- outliner_add_element(soops, lb, sce->world, te, 0, 0);
-
#ifdef WITH_FREESTYLE
- if (STREQ(sce->r.engine, RE_engine_id_BLENDER_RENDER) && (sce->r.mode & R_EDGE_FRS))
+ if (STREQ(sce->view_render->engine_id, RE_engine_id_BLENDER_RENDER) && (sce->r.mode & R_EDGE_FRS))
outliner_add_line_styles(soops, lb, sce, te);
#endif
}
+TreeTraversalAction outliner_find_selected_objects(TreeElement *te, void *customdata)
+{
+ struct ObjectsSelectedData *data = customdata;
+ TreeStoreElem *tselem = TREESTORE(te);
+
+ if (ELEM(tselem->type, TSE_LAYER_COLLECTION, TSE_SCENE_COLLECTION)) {
+ return TRAVERSE_CONTINUE;
+ }
+
+ if (tselem->type || (tselem->id == NULL) || (GS(tselem->id->name) != ID_OB)) {
+ return TRAVERSE_SKIP_CHILDS;
+ }
+
+ BLI_addtail(&data->objects_selected_array, BLI_genericNodeN(te));
+
+ return TRAVERSE_CONTINUE;
+}
+
+/**
+ * Move objects from a collection to another.
+ * We ignore the original object being inserted, we used it for polling only.
+ * Instead we move all the selected objects around.
+ */
+static void outliner_object_reorder(
+ Main *bmain, SpaceOops *soops,
+ TreeElement *insert_element,
+ TreeElement *insert_handle, TreeElementInsertType action,
+ const wmEvent *event)
+{
+ SceneCollection *sc = outliner_scene_collection_from_tree_element(insert_handle);
+ SceneCollection *sc_ob_parent = NULL;
+ ID *id = insert_handle->store_elem->id;
+
+ BLI_assert(action == TE_INSERT_INTO);
+ UNUSED_VARS_NDEBUG(action);
+
+ struct ObjectsSelectedData data = {
+ .objects_selected_array = {NULL, NULL},
+ };
+
+ const bool is_append = event->ctrl;
+
+ /* Make sure we include the originally inserted element as well. */
+ TREESTORE(insert_element)->flag |= TSE_SELECTED;
+
+ outliner_tree_traverse(soops, &soops->tree, 0, TSE_SELECTED, outliner_find_selected_objects, &data);
+ BLI_LISTBASE_FOREACH (LinkData *, link, &data.objects_selected_array) {
+ TreeElement *ten_selected = (TreeElement *)link->data;
+ Object *ob = (Object *)TREESTORE(ten_selected)->id;
+
+ if (is_append) {
+ BKE_collection_object_add(id, sc, ob);
+ continue;
+ }
+
+ /* Find parent scene-collection of object. */
+ if (ten_selected->parent) {
+ for (TreeElement *te_ob_parent = ten_selected->parent; te_ob_parent; te_ob_parent = te_ob_parent->parent) {
+ if (ELEM(TREESTORE(te_ob_parent)->type, TSE_SCENE_COLLECTION, TSE_LAYER_COLLECTION)) {
+ sc_ob_parent = outliner_scene_collection_from_tree_element(te_ob_parent);
+ break;
+ }
+ }
+ }
+ else {
+ sc_ob_parent = BKE_collection_master(id);
+ }
+
+ BKE_collection_object_move(id, sc, sc_ob_parent, ob);
+ }
+
+ BLI_freelistN(&data.objects_selected_array);
+
+ DEG_relations_tag_update(bmain);
+
+ /* TODO(sergey): Use proper flag for tagging here. */
+ DEG_id_tag_update(id, 0);
+
+ WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
+}
+
+static bool outliner_object_reorder_poll(
+ const TreeElement *insert_element,
+ TreeElement **io_insert_handle, TreeElementInsertType *io_action)
+{
+ TreeStoreElem *tselem_handle = TREESTORE(*io_insert_handle);
+ if (ELEM(tselem_handle->type, TSE_SCENE_COLLECTION, TSE_LAYER_COLLECTION) &&
+ (insert_element->parent != *io_insert_handle))
+ {
+ *io_action = TE_INSERT_INTO;
+ return true;
+ }
+
+ return false;
+}
+
// can be inlined if necessary
-static void outliner_add_object_contents(SpaceOops *soops, TreeElement *te, TreeStoreElem *tselem, Object *ob)
+static void outliner_add_object_contents(
+ SpaceOops *soops, const EvaluationContext *eval_ctx,
+ TreeElement *te, TreeStoreElem *tselem, Object *ob)
{
+ te->reinsert = outliner_object_reorder;
+ te->reinsert_poll = outliner_object_reorder_poll;
+
if (outliner_animdata_test(ob->adt))
- outliner_add_element(soops, &te->subtree, ob, te, TSE_ANIM_DATA, 0);
-
- outliner_add_element(soops, &te->subtree, ob->poselib, te, 0, 0); // XXX FIXME.. add a special type for this
+ outliner_add_element(soops, eval_ctx, &te->subtree, ob, te, TSE_ANIM_DATA, 0);
+
+ outliner_add_element(soops, eval_ctx, &te->subtree, ob->poselib, te, 0, 0); // XXX FIXME.. add a special type for this
if (ob->proxy && !ID_IS_LINKED(ob))
- outliner_add_element(soops, &te->subtree, ob->proxy, te, TSE_PROXY, 0);
+ outliner_add_element(soops, eval_ctx, &te->subtree, ob->proxy, te, TSE_PROXY, 0);
- outliner_add_element(soops, &te->subtree, ob->gpd, te, 0, 0);
+ outliner_add_element(soops, eval_ctx, &te->subtree, ob->gpd, te, 0, 0);
- outliner_add_element(soops, &te->subtree, ob->data, te, 0, 0);
+ outliner_add_element(soops, eval_ctx, &te->subtree, ob->data, te, 0, 0);
if (ob->pose) {
bArmature *arm = ob->data;
bPoseChannel *pchan;
- TreeElement *tenla = outliner_add_element(soops, &te->subtree, ob, te, TSE_POSE_BASE, 0);
+ TreeElement *tenla = outliner_add_element(
+ soops, eval_ctx, &te->subtree, ob, te, TSE_POSE_BASE, 0);
tenla->name = IFACE_("Pose");
/* channels undefined in editmode, but we want the 'tenla' pose icon itself */
- if ((arm->edbo == NULL) && (ob->mode & OB_MODE_POSE)) {
+ if ((arm->edbo == NULL) && (eval_ctx->object_mode & OB_MODE_POSE)) {
TreeElement *ten;
int a = 0, const_index = 1000; /* ensure unique id for bone constraints */
for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next, a++) {
- ten = outliner_add_element(soops, &tenla->subtree, ob, tenla, TSE_POSE_CHANNEL, a);
+ ten = outliner_add_element(
+ soops, eval_ctx, &tenla->subtree, ob, tenla, TSE_POSE_CHANNEL, a);
ten->name = pchan->name;
ten->directdata = pchan;
pchan->temp = (void *)ten;
@@ -520,12 +563,14 @@ static void outliner_add_object_contents(SpaceOops *soops, TreeElement *te, Tree
//Object *target;
bConstraint *con;
TreeElement *ten1;
- TreeElement *tenla1 = outliner_add_element(soops, &ten->subtree, ob, ten, TSE_CONSTRAINT_BASE, 0);
+ TreeElement *tenla1 = outliner_add_element(
+ soops, eval_ctx, &ten->subtree, ob, ten, TSE_CONSTRAINT_BASE, 0);
//char *str;
tenla1->name = IFACE_("Constraints");
for (con = pchan->constraints.first; con; con = con->next, const_index++) {
- ten1 = outliner_add_element(soops, &tenla1->subtree, ob, tenla1, TSE_CONSTRAINT, const_index);
+ ten1 = outliner_add_element(
+ soops, eval_ctx, &tenla1->subtree, ob, tenla1, TSE_CONSTRAINT, const_index);
#if 0 /* disabled as it needs to be reworked for recoded constraints system */
target = get_constraint_target(con, &str);
if (str && str[0]) ten1->name = str;
@@ -559,13 +604,15 @@ static void outliner_add_object_contents(SpaceOops *soops, TreeElement *te, Tree
/* Pose Groups */
if (ob->pose->agroups.first) {
bActionGroup *agrp;
- TreeElement *ten_bonegrp = outliner_add_element(soops, &te->subtree, ob, te, TSE_POSEGRP_BASE, 0);
+ TreeElement *ten_bonegrp = outliner_add_element(
+ soops, eval_ctx, &te->subtree, ob, te, TSE_POSEGRP_BASE, 0);
int a = 0;
ten_bonegrp->name = IFACE_("Bone Groups");
for (agrp = ob->pose->agroups.first; agrp; agrp = agrp->next, a++) {
TreeElement *ten;
- ten = outliner_add_element(soops, &ten_bonegrp->subtree, ob, ten_bonegrp, TSE_POSEGRP, a);
+ ten = outliner_add_element(
+ soops, eval_ctx, &ten_bonegrp->subtree, ob, ten_bonegrp, TSE_POSEGRP, a);
ten->name = agrp->name;
ten->directdata = agrp;
}
@@ -573,20 +620,21 @@ static void outliner_add_object_contents(SpaceOops *soops, TreeElement *te, Tree
}
for (int a = 0; a < ob->totcol; a++) {
- outliner_add_element(soops, &te->subtree, ob->mat[a], te, 0, a);
+ outliner_add_element(
+ soops, eval_ctx, &te->subtree, ob->mat[a], te, 0, a);
}
if (ob->constraints.first) {
//Object *target;
bConstraint *con;
TreeElement *ten;
- TreeElement *tenla = outliner_add_element(soops, &te->subtree, ob, te, TSE_CONSTRAINT_BASE, 0);
+ TreeElement *tenla = outliner_add_element(soops, eval_ctx, &te->subtree, ob, te, TSE_CONSTRAINT_BASE, 0);
//char *str;
int a;
tenla->name = IFACE_("Constraints");
for (con = ob->constraints.first, a = 0; con; con = con->next, a++) {
- ten = outliner_add_element(soops, &tenla->subtree, ob, tenla, TSE_CONSTRAINT, a);
+ ten = outliner_add_element(soops, eval_ctx, &tenla->subtree, ob, tenla, TSE_CONSTRAINT, a);
#if 0 /* disabled due to constraints system targets recode... code here needs review */
target = get_constraint_target(con, &str);
if (str && str[0]) ten->name = str;
@@ -601,32 +649,38 @@ static void outliner_add_object_contents(SpaceOops *soops, TreeElement *te, Tree
if (ob->modifiers.first) {
ModifierData *md;
- TreeElement *ten_mod = outliner_add_element(soops, &te->subtree, ob, te, TSE_MODIFIER_BASE, 0);
+ TreeElement *ten_mod = outliner_add_element(soops, eval_ctx, &te->subtree, ob, te, TSE_MODIFIER_BASE, 0);
int index;
ten_mod->name = IFACE_("Modifiers");
for (index = 0, md = ob->modifiers.first; md; index++, md = md->next) {
- TreeElement *ten = outliner_add_element(soops, &ten_mod->subtree, ob, ten_mod, TSE_MODIFIER, index);
+ TreeElement *ten = outliner_add_element(
+ soops, eval_ctx, &ten_mod->subtree, ob, ten_mod, TSE_MODIFIER, index);
ten->name = md->name;
ten->directdata = md;
if (md->type == eModifierType_Lattice) {
- outliner_add_element(soops, &ten->subtree, ((LatticeModifierData *) md)->object, ten, TSE_LINKED_OB, 0);
+ outliner_add_element(
+ soops, eval_ctx, &ten->subtree, ((LatticeModifierData *) md)->object, ten, TSE_LINKED_OB, 0);
}
else if (md->type == eModifierType_Curve) {
- outliner_add_element(soops, &ten->subtree, ((CurveModifierData *) md)->object, ten, TSE_LINKED_OB, 0);
+ outliner_add_element(
+ soops, eval_ctx, &ten->subtree, ((CurveModifierData *) md)->object, ten, TSE_LINKED_OB, 0);
}
else if (md->type == eModifierType_Armature) {
- outliner_add_element(soops, &ten->subtree, ((ArmatureModifierData *) md)->object, ten, TSE_LINKED_OB, 0);
+ outliner_add_element(
+ soops, eval_ctx, &ten->subtree, ((ArmatureModifierData *) md)->object, ten, TSE_LINKED_OB, 0);
}
else if (md->type == eModifierType_Hook) {
- outliner_add_element(soops, &ten->subtree, ((HookModifierData *) md)->object, ten, TSE_LINKED_OB, 0);
+ outliner_add_element(
+ soops, eval_ctx, &ten->subtree, ((HookModifierData *) md)->object, ten, TSE_LINKED_OB, 0);
}
else if (md->type == eModifierType_ParticleSystem) {
ParticleSystem *psys = ((ParticleSystemModifierData *) md)->psys;
TreeElement *ten_psys;
- ten_psys = outliner_add_element(soops, &ten->subtree, ob, te, TSE_LINKED_PSYS, 0);
+ ten_psys = outliner_add_element(
+ soops, eval_ctx, &ten->subtree, ob, te, TSE_LINKED_PSYS, 0);
ten_psys->directdata = psys;
ten_psys->name = psys->part->id.name + 2;
}
@@ -637,25 +691,29 @@ static void outliner_add_object_contents(SpaceOops *soops, TreeElement *te, Tree
if (ob->defbase.first) {
bDeformGroup *defgroup;
TreeElement *ten;
- TreeElement *tenla = outliner_add_element(soops, &te->subtree, ob, te, TSE_DEFGROUP_BASE, 0);
+ TreeElement *tenla = outliner_add_element(
+ soops, eval_ctx, &te->subtree, ob, te, TSE_DEFGROUP_BASE, 0);
int a;
tenla->name = IFACE_("Vertex Groups");
for (defgroup = ob->defbase.first, a = 0; defgroup; defgroup = defgroup->next, a++) {
- ten = outliner_add_element(soops, &tenla->subtree, ob, tenla, TSE_DEFGROUP, a);
+ ten = outliner_add_element(soops, eval_ctx, &tenla->subtree, ob, tenla, TSE_DEFGROUP, a);
ten->name = defgroup->name;
ten->directdata = defgroup;
}
}
/* duplicated group */
- if (ob->dup_group)
- outliner_add_element(soops, &te->subtree, ob->dup_group, te, 0, 0);
+ if (ob->dup_group) {
+ outliner_add_element(soops, eval_ctx, &te->subtree, ob->dup_group, te, 0, 0);
+ }
}
// can be inlined if necessary
-static void outliner_add_id_contents(SpaceOops *soops, TreeElement *te, TreeStoreElem *tselem, ID *id)
+static void outliner_add_id_contents(
+ SpaceOops *soops, const EvaluationContext *eval_ctx,
+ TreeElement *te, TreeStoreElem *tselem, ID *id)
{
/* tuck pointer back in object, to construct hierarchy */
if (GS(id->name) == ID_OB) id->newid = (ID *)te;
@@ -669,25 +727,26 @@ static void outliner_add_id_contents(SpaceOops *soops, TreeElement *te, TreeStor
}
case ID_SCE:
{
- outliner_add_scene_contents(soops, &te->subtree, (Scene *)id, te);
+ outliner_add_scene_contents(soops, eval_ctx, &te->subtree, (Scene *)id, te);
break;
}
case ID_OB:
{
- outliner_add_object_contents(soops, te, tselem, (Object *)id);
+ outliner_add_object_contents(soops, eval_ctx, te, tselem, (Object *)id);
break;
}
case ID_ME:
{
Mesh *me = (Mesh *)id;
int a;
-
- if (outliner_animdata_test(me->adt))
- outliner_add_element(soops, &te->subtree, me, te, TSE_ANIM_DATA, 0);
-
- outliner_add_element(soops, &te->subtree, me->key, te, 0, 0);
+
+ if (outliner_animdata_test(me->adt)) {
+ outliner_add_element(soops, eval_ctx, &te->subtree, me, te, TSE_ANIM_DATA, 0);
+ }
+
+ outliner_add_element(soops, eval_ctx, &te->subtree, me->key, te, 0, 0);
for (a = 0; a < me->totcol; a++)
- outliner_add_element(soops, &te->subtree, me->mat[a], te, 0, a);
+ outliner_add_element(soops, eval_ctx, &te->subtree, me->mat[a], te, 0, a);
/* could do tfaces with image links, but the images are not grouped nicely.
* would require going over all tfaces, sort images in use. etc... */
break;
@@ -698,10 +757,10 @@ static void outliner_add_id_contents(SpaceOops *soops, TreeElement *te, TreeStor
int a;
if (outliner_animdata_test(cu->adt))
- outliner_add_element(soops, &te->subtree, cu, te, TSE_ANIM_DATA, 0);
+ outliner_add_element(soops, eval_ctx, &te->subtree, cu, te, TSE_ANIM_DATA, 0);
for (a = 0; a < cu->totcol; a++)
- outliner_add_element(soops, &te->subtree, cu->mat[a], te, 0, a);
+ outliner_add_element(soops, eval_ctx, &te->subtree, cu->mat[a], te, 0, a);
break;
}
case ID_MB:
@@ -710,10 +769,10 @@ static void outliner_add_id_contents(SpaceOops *soops, TreeElement *te, TreeStor
int a;
if (outliner_animdata_test(mb->adt))
- outliner_add_element(soops, &te->subtree, mb, te, TSE_ANIM_DATA, 0);
+ outliner_add_element(soops, eval_ctx, &te->subtree, mb, te, TSE_ANIM_DATA, 0);
for (a = 0; a < mb->totcol; a++)
- outliner_add_element(soops, &te->subtree, mb->mat[a], te, 0, a);
+ outliner_add_element(soops, eval_ctx, &te->subtree, mb->mat[a], te, 0, a);
break;
}
case ID_MA:
@@ -721,11 +780,14 @@ static void outliner_add_id_contents(SpaceOops *soops, TreeElement *te, TreeStor
Material *ma = (Material *)id;
int a;
- if (outliner_animdata_test(ma->adt))
- outliner_add_element(soops, &te->subtree, ma, te, TSE_ANIM_DATA, 0);
+ if (outliner_animdata_test(ma->adt)) {
+ outliner_add_element(soops, eval_ctx, &te->subtree, ma, te, TSE_ANIM_DATA, 0);
+ }
for (a = 0; a < MAX_MTEX; a++) {
- if (ma->mtex[a]) outliner_add_element(soops, &te->subtree, ma->mtex[a]->tex, te, 0, a);
+ if (ma->mtex[a]) {
+ outliner_add_element(soops, eval_ctx, &te->subtree, ma->mtex[a]->tex, te, 0, a);
+ }
}
break;
}
@@ -733,10 +795,10 @@ static void outliner_add_id_contents(SpaceOops *soops, TreeElement *te, TreeStor
{
Tex *tex = (Tex *)id;
- if (outliner_animdata_test(tex->adt))
- outliner_add_element(soops, &te->subtree, tex, te, TSE_ANIM_DATA, 0);
-
- outliner_add_element(soops, &te->subtree, tex->ima, te, 0, 0);
+ if (outliner_animdata_test(tex->adt)) {
+ outliner_add_element(soops, eval_ctx, &te->subtree, tex, te, TSE_ANIM_DATA, 0);
+ }
+ outliner_add_element(soops, eval_ctx, &te->subtree, tex->ima, te, 0, 0);
break;
}
case ID_CA:
@@ -744,7 +806,7 @@ static void outliner_add_id_contents(SpaceOops *soops, TreeElement *te, TreeStor
Camera *ca = (Camera *)id;
if (outliner_animdata_test(ca->adt))
- outliner_add_element(soops, &te->subtree, ca, te, TSE_ANIM_DATA, 0);
+ outliner_add_element(soops, eval_ctx, &te->subtree, ca, te, TSE_ANIM_DATA, 0);
break;
}
case ID_CF:
@@ -752,7 +814,7 @@ static void outliner_add_id_contents(SpaceOops *soops, TreeElement *te, TreeStor
CacheFile *cache_file = (CacheFile *)id;
if (outliner_animdata_test(cache_file->adt)) {
- outliner_add_element(soops, &te->subtree, cache_file, te, TSE_ANIM_DATA, 0);
+ outliner_add_element(soops, eval_ctx, &te->subtree, cache_file, te, TSE_ANIM_DATA, 0);
}
break;
@@ -763,10 +825,12 @@ static void outliner_add_id_contents(SpaceOops *soops, TreeElement *te, TreeStor
int a;
if (outliner_animdata_test(la->adt))
- outliner_add_element(soops, &te->subtree, la, te, TSE_ANIM_DATA, 0);
+ outliner_add_element(soops, eval_ctx, &te->subtree, la, te, TSE_ANIM_DATA, 0);
for (a = 0; a < MAX_MTEX; a++) {
- if (la->mtex[a]) outliner_add_element(soops, &te->subtree, la->mtex[a]->tex, te, 0, a);
+ if (la->mtex[a]) {
+ outliner_add_element(soops, eval_ctx, &te->subtree, la->mtex[a]->tex, te, 0, a);
+ }
}
break;
}
@@ -774,8 +838,18 @@ static void outliner_add_id_contents(SpaceOops *soops, TreeElement *te, TreeStor
{
Speaker *spk = (Speaker *)id;
- if (outliner_animdata_test(spk->adt))
- outliner_add_element(soops, &te->subtree, spk, te, TSE_ANIM_DATA, 0);
+ if (outliner_animdata_test(spk->adt)) {
+ outliner_add_element(soops, eval_ctx, &te->subtree, spk, te, TSE_ANIM_DATA, 0);
+ }
+ break;
+ }
+ case ID_LP:
+ {
+ LightProbe *prb = (LightProbe *)id;
+
+ if (outliner_animdata_test(prb->adt)) {
+ outliner_add_element(soops, eval_ctx, &te->subtree, prb, te, TSE_ANIM_DATA, 0);
+ }
break;
}
case ID_WO:
@@ -783,11 +857,13 @@ static void outliner_add_id_contents(SpaceOops *soops, TreeElement *te, TreeStor
World *wrld = (World *)id;
int a;
- if (outliner_animdata_test(wrld->adt))
- outliner_add_element(soops, &te->subtree, wrld, te, TSE_ANIM_DATA, 0);
-
+ if (outliner_animdata_test(wrld->adt)) {
+ outliner_add_element(soops, eval_ctx, &te->subtree, wrld, te, TSE_ANIM_DATA, 0);
+ }
for (a = 0; a < MAX_MTEX; a++) {
- if (wrld->mtex[a]) outliner_add_element(soops, &te->subtree, wrld->mtex[a]->tex, te, 0, a);
+ if (wrld->mtex[a]) {
+ outliner_add_element(soops, eval_ctx, &te->subtree, wrld->mtex[a]->tex, te, 0, a);
+ }
}
break;
}
@@ -795,8 +871,9 @@ static void outliner_add_id_contents(SpaceOops *soops, TreeElement *te, TreeStor
{
Key *key = (Key *)id;
- if (outliner_animdata_test(key->adt))
- outliner_add_element(soops, &te->subtree, key, te, TSE_ANIM_DATA, 0);
+ if (outliner_animdata_test(key->adt)) {
+ outliner_add_element(soops, eval_ctx, &te->subtree, key, te, TSE_ANIM_DATA, 0);
+ }
break;
}
case ID_AC:
@@ -810,15 +887,15 @@ static void outliner_add_id_contents(SpaceOops *soops, TreeElement *te, TreeStor
bArmature *arm = (bArmature *)id;
int a = 0;
- if (outliner_animdata_test(arm->adt))
- outliner_add_element(soops, &te->subtree, arm, te, TSE_ANIM_DATA, 0);
-
+ if (outliner_animdata_test(arm->adt)) {
+ outliner_add_element(soops, eval_ctx, &te->subtree, arm, te, TSE_ANIM_DATA, 0);
+ }
if (arm->edbo) {
EditBone *ebone;
TreeElement *ten;
for (ebone = arm->edbo->first; ebone; ebone = ebone->next, a++) {
- ten = outliner_add_element(soops, &te->subtree, id, te, TSE_EBONE, a);
+ ten = outliner_add_element(soops, eval_ctx, &te->subtree, id, te, TSE_EBONE, a);
ten->directdata = ebone;
ten->name = ebone->name;
ebone->temp.p = ten;
@@ -840,13 +917,17 @@ static void outliner_add_id_contents(SpaceOops *soops, TreeElement *te, TreeStor
else {
/* do not extend Armature when we have posemode */
tselem = TREESTORE(te->parent);
- if (GS(tselem->id->name) == ID_OB && ((Object *)tselem->id)->mode & OB_MODE_POSE) {
+ if (GS(tselem->id->name) == ID_OB &&
+ (eval_ctx->object_mode & OB_MODE_POSE)
+ /* (((Object *)tselem->id)->mode & OB_MODE_POSE) */
+ )
+ {
/* pass */
}
else {
Bone *curBone;
for (curBone = arm->bonebase.first; curBone; curBone = curBone->next) {
- outliner_add_bone(soops, &te->subtree, id, curBone, te, &a);
+ outliner_add_bone(soops, eval_ctx, &te->subtree, id, curBone, te, &a);
}
}
}
@@ -856,13 +937,14 @@ static void outliner_add_id_contents(SpaceOops *soops, TreeElement *te, TreeStor
{
FreestyleLineStyle *linestyle = (FreestyleLineStyle *)id;
int a;
-
- if (outliner_animdata_test(linestyle->adt))
- outliner_add_element(soops, &te->subtree, linestyle, te, TSE_ANIM_DATA, 0);
+
+ if (outliner_animdata_test(linestyle->adt)) {
+ outliner_add_element(soops, eval_ctx, &te->subtree, linestyle, te, TSE_ANIM_DATA, 0);
+ }
for (a = 0; a < MAX_MTEX; a++) {
if (linestyle->mtex[a])
- outliner_add_element(soops, &te->subtree, linestyle->mtex[a]->tex, te, 0, a);
+ outliner_add_element(soops, eval_ctx, &te->subtree, linestyle->mtex[a]->tex, te, 0, a);
}
break;
}
@@ -873,11 +955,11 @@ static void outliner_add_id_contents(SpaceOops *soops, TreeElement *te, TreeStor
int a = 0;
if (outliner_animdata_test(gpd->adt))
- outliner_add_element(soops, &te->subtree, gpd, te, TSE_ANIM_DATA, 0);
+ outliner_add_element(soops, eval_ctx, &te->subtree, gpd, te, TSE_ANIM_DATA, 0);
// TODO: base element for layers?
for (gpl = gpd->layers.first; gpl; gpl = gpl->next) {
- outliner_add_element(soops, &te->subtree, gpl, te, TSE_GP_LAYER, a);
+ outliner_add_element(soops, eval_ctx, &te->subtree, gpl, te, TSE_GP_LAYER, a);
a++;
}
break;
@@ -889,8 +971,9 @@ static void outliner_add_id_contents(SpaceOops *soops, TreeElement *te, TreeStor
// TODO: this function needs to be split up! It's getting a bit too large...
// Note: "ID" is not always a real ID
-static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *idv,
- TreeElement *parent, short type, short index)
+static TreeElement *outliner_add_element(
+ SpaceOops *soops, const EvaluationContext *eval_ctx,
+ ListBase *lb, void *idv, TreeElement *parent, short type, short index)
{
TreeElement *te;
TreeStoreElem *tselem;
@@ -905,7 +988,7 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i
id = TREESTORE(parent)->id;
}
- /* One exception */
+ /* exceptions */
if (type == TSE_ID_BASE) {
/* pass */
}
@@ -943,6 +1026,9 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i
else if (type == TSE_GP_LAYER) {
/* pass */
}
+ else if (ELEM(type, TSE_LAYER_COLLECTION, TSE_SCENE_COLLECTION)) {
+ /* pass */
+ }
else if (type == TSE_ID_BASE) {
/* pass */
}
@@ -960,7 +1046,7 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i
/* ID datablock */
if (tsepar == NULL || tsepar->type != TSE_ID_BASE)
- outliner_add_id_contents(soops, te, tselem, id);
+ outliner_add_id_contents(soops, eval_ctx, te, tselem, id);
}
else if (type == TSE_ANIM_DATA) {
IdAdtTemplate *iat = (IdAdtTemplate *)idv;
@@ -971,11 +1057,11 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i
te->directdata = adt;
/* Action */
- outliner_add_element(soops, &te->subtree, adt->action, te, 0, 0);
+ outliner_add_element(soops, eval_ctx, &te->subtree, adt->action, te, 0, 0);
/* Drivers */
if (adt->drivers.first) {
- TreeElement *ted = outliner_add_element(soops, &te->subtree, adt, te, TSE_DRIVER_BASE, 0);
+ TreeElement *ted = outliner_add_element(soops, eval_ctx, &te->subtree, adt, te, TSE_DRIVER_BASE, 0);
ID *lastadded = NULL;
FCurve *fcu;
@@ -992,7 +1078,7 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i
{
if (lastadded != dtar->id) {
// XXX this lastadded check is rather lame, and also fails quite badly...
- outliner_add_element(soops, &ted->subtree, dtar->id, ted, TSE_LINKED_OB, 0);
+ outliner_add_element(soops, eval_ctx, &ted->subtree, dtar->id, ted, TSE_LINKED_OB, 0);
lastadded = dtar->id;
}
}
@@ -1004,14 +1090,14 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i
/* NLA Data */
if (adt->nla_tracks.first) {
- TreeElement *tenla = outliner_add_element(soops, &te->subtree, adt, te, TSE_NLA, 0);
+ TreeElement *tenla = outliner_add_element(soops, eval_ctx, &te->subtree, adt, te, TSE_NLA, 0);
NlaTrack *nlt;
int a = 0;
tenla->name = IFACE_("NLA Tracks");
for (nlt = adt->nla_tracks.first; nlt; nlt = nlt->next) {
- TreeElement *tenlt = outliner_add_element(soops, &tenla->subtree, nlt, tenla, TSE_NLA_TRACK, a);
+ TreeElement *tenlt = outliner_add_element(soops, eval_ctx, &tenla->subtree, nlt, tenla, TSE_NLA_TRACK, a);
NlaStrip *strip;
TreeElement *ten;
int b = 0;
@@ -1019,7 +1105,7 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i
tenlt->name = nlt->name;
for (strip = nlt->strips.first; strip; strip = strip->next, b++) {
- ten = outliner_add_element(soops, &tenlt->subtree, strip->act, tenlt, TSE_NLA_ACTION, b);
+ ten = outliner_add_element(soops, eval_ctx, &tenlt->subtree, strip->act, tenlt, TSE_NLA_ACTION, b);
if (ten) ten->directdata = strip;
}
}
@@ -1054,12 +1140,12 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i
if (seq->type == SEQ_TYPE_META) {
p = seq->seqbase.first;
while (p) {
- outliner_add_element(soops, &te->subtree, (void *)p, te, TSE_SEQUENCE, index);
+ outliner_add_element(soops, eval_ctx, &te->subtree, (void *)p, te, TSE_SEQUENCE, index);
p = p->next;
}
}
else
- outliner_add_element(soops, &te->subtree, (void *)seq->strip, te, TSE_SEQ_STRIP, index);
+ outliner_add_element(soops, eval_ctx, &te->subtree, (void *)seq->strip, te, TSE_SEQ_STRIP, index);
}
}
else if (type == TSE_SEQ_STRIP) {
@@ -1120,7 +1206,7 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i
for (a = 0; a < tot; a++) {
RNA_property_collection_lookup_int(ptr, iterprop, a, &propptr);
if (!(RNA_property_flag(propptr.data) & PROP_HIDDEN)) {
- outliner_add_element(soops, &te->subtree, (void *)ptr, te, TSE_RNA_PROPERTY, a);
+ outliner_add_element(soops, eval_ctx, &te->subtree, (void *)ptr, te, TSE_RNA_PROPERTY, a);
}
}
}
@@ -1149,7 +1235,7 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i
if (pptr.data) {
if (TSELEM_OPEN(tselem, soops))
- outliner_add_element(soops, &te->subtree, (void *)&pptr, te, TSE_RNA_STRUCT, -1);
+ outliner_add_element(soops, eval_ctx, &te->subtree, (void *)&pptr, te, TSE_RNA_STRUCT, -1);
else
te->flag |= TE_LAZY_CLOSED;
}
@@ -1161,7 +1247,7 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i
if (TSELEM_OPEN(tselem, soops)) {
for (a = 0; a < tot; a++) {
RNA_property_collection_lookup_int(ptr, prop, a, &pptr);
- outliner_add_element(soops, &te->subtree, (void *)&pptr, te, TSE_RNA_STRUCT, a);
+ outliner_add_element(soops, eval_ctx, &te->subtree, (void *)&pptr, te, TSE_RNA_STRUCT, a);
}
}
else if (tot)
@@ -1173,7 +1259,7 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i
if (TSELEM_OPEN(tselem, soops)) {
for (a = 0; a < tot; a++)
- outliner_add_element(soops, &te->subtree, (void *)ptr, te, TSE_RNA_ARRAY_ELEM, a);
+ outliner_add_element(soops, eval_ctx, &te->subtree, (void *)ptr, te, TSE_RNA_ARRAY_ELEM, a);
}
else if (tot)
te->flag |= TE_LAZY_CLOSED;
@@ -1221,7 +1307,8 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i
}
if (ot || kmi->propvalue) {
- TreeElement *ten = outliner_add_element(soops, &te->subtree, kmi, te, TSE_KEYMAP_ITEM, a);
+ TreeElement *ten = outliner_add_element(
+ soops, eval_ctx, &te->subtree, kmi, te, TSE_KEYMAP_ITEM, a);
ten->directdata = kmi;
@@ -1241,9 +1328,24 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i
te->flag |= TE_LAZY_CLOSED;
}
+ if ((type != TSE_LAYER_COLLECTION) && (te->idcode == ID_GR)) {
+ Group *group = (Group *)id;
+ outliner_add_layer_collections_recursive(
+ soops, eval_ctx, &te->subtree, id, &group->view_layer->layer_collections, NULL, true);
+ }
+
return te;
}
+/**
+ * \note Really only removes \a tselem, not it's TreeElement instance or any children.
+ */
+void outliner_remove_treestore_element(SpaceOops *soops, TreeStoreElem *tselem)
+{
+ BKE_outliner_treehash_remove_element(soops->treehash, tselem);
+ BLI_mempool_free(soops->treestore, tselem);
+}
+
/* ======================================================= */
/* Sequencer mode tree building */
@@ -1285,7 +1387,9 @@ static int need_add_seq_dup(Sequence *seq)
return(1);
}
-static void outliner_add_seq_dup(SpaceOops *soops, Sequence *seq, TreeElement *te, short index)
+static void outliner_add_seq_dup(
+ SpaceOops *soops, const EvaluationContext *eval_ctx,
+ Sequence *seq, TreeElement *te, short index)
{
/* TreeElement *ch; */ /* UNUSED */
Sequence *p;
@@ -1298,7 +1402,8 @@ static void outliner_add_seq_dup(SpaceOops *soops, Sequence *seq, TreeElement *t
}
if (STREQ(p->strip->stripdata->name, seq->strip->stripdata->name))
- /* ch = */ /* UNUSED */ outliner_add_element(soops, &te->subtree, (void *)p, te, TSE_SEQUENCE, index);
+ /* ch = */ /* UNUSED */ outliner_add_element(
+ soops, eval_ctx, &te->subtree, (void *)p, te, TSE_SEQUENCE, index);
p = p->next;
}
}
@@ -1307,7 +1412,9 @@ static void outliner_add_seq_dup(SpaceOops *soops, Sequence *seq, TreeElement *t
/* ----------------------------------------------- */
-static void outliner_add_library_contents(Main *mainvar, SpaceOops *soops, TreeElement *te, Library *lib)
+static void outliner_add_library_contents(
+ Main *mainvar, SpaceOops *soops, const EvaluationContext *eval_ctx,
+ TreeElement *te, Library *lib)
{
TreeElement *ten;
ListBase *lbarray[MAX_LIBARRAY];
@@ -1324,7 +1431,7 @@ static void outliner_add_library_contents(Main *mainvar, SpaceOops *soops, TreeE
break;
if (id) {
- ten = outliner_add_element(soops, &te->subtree, lbarray[a], NULL, TSE_ID_BASE, 0);
+ ten = outliner_add_element(soops, eval_ctx, &te->subtree, lbarray[a], NULL, TSE_ID_BASE, 0);
ten->directdata = lbarray[a];
ten->name = BKE_idcode_to_name_plural(GS(id->name));
@@ -1333,7 +1440,7 @@ static void outliner_add_library_contents(Main *mainvar, SpaceOops *soops, TreeE
for (id = lbarray[a]->first; id; id = id->next) {
if (id->lib == lib)
- outliner_add_element(soops, &ten->subtree, id, ten, 0, 0);
+ outliner_add_element(soops, eval_ctx, &ten->subtree, id, ten, 0, 0);
}
}
}
@@ -1341,7 +1448,7 @@ static void outliner_add_library_contents(Main *mainvar, SpaceOops *soops, TreeE
}
-static void outliner_add_orphaned_datablocks(Main *mainvar, SpaceOops *soops)
+static void outliner_add_orphaned_datablocks(Main *mainvar, SpaceOops *soops, const EvaluationContext *eval_ctx)
{
TreeElement *ten;
ListBase *lbarray[MAX_LIBARRAY];
@@ -1364,7 +1471,7 @@ static void outliner_add_orphaned_datablocks(Main *mainvar, SpaceOops *soops)
* - Add a parameter to BKE_idcode_to_name_plural to get a sane "user-visible" name instead?
* - Ensure that this uses nice icons for the datablock type involved instead of the dot?
*/
- ten = outliner_add_element(soops, &soops->tree, lbarray[a], NULL, TSE_ID_BASE, 0);
+ ten = outliner_add_element(soops, eval_ctx, &soops->tree, lbarray[a], NULL, TSE_ID_BASE, 0);
ten->directdata = lbarray[a];
ten->name = BKE_idcode_to_name_plural(GS(id->name));
@@ -1374,13 +1481,192 @@ static void outliner_add_orphaned_datablocks(Main *mainvar, SpaceOops *soops)
/* add the orphaned datablocks - these will not be added with any subtrees attached */
for (id = lbarray[a]->first; id; id = id->next) {
if (ID_REAL_USERS(id) <= 0)
- outliner_add_element(soops, &ten->subtree, id, ten, 0, 0);
+ outliner_add_element(soops, eval_ctx, &ten->subtree, id, ten, 0, 0);
}
}
}
}
}
+static void outliner_layer_collections_reorder(
+ Main *bmain,
+ SpaceOops *UNUSED(soops),
+ TreeElement *insert_element, TreeElement *insert_handle, TreeElementInsertType action,
+ const wmEvent *UNUSED(event))
+{
+ LayerCollection *lc_insert = insert_element->directdata;
+ LayerCollection *lc_handle = insert_handle->directdata;
+ ID *id = insert_element->store_elem->id;
+
+ if (action == TE_INSERT_BEFORE) {
+ BKE_layer_collection_move_above(id, lc_handle, lc_insert);
+ }
+ else if (action == TE_INSERT_AFTER) {
+ BKE_layer_collection_move_below(id, lc_handle, lc_insert);
+ }
+ else if (action == TE_INSERT_INTO) {
+ BKE_layer_collection_move_into(id, lc_handle, lc_insert);
+ }
+ else {
+ BLI_assert(0);
+ }
+
+ DEG_relations_tag_update(bmain);
+}
+static bool outliner_layer_collections_reorder_poll(
+ const TreeElement *insert_element,
+ TreeElement **io_insert_handle, TreeElementInsertType *UNUSED(io_action))
+{
+ const TreeStoreElem *tselem_handle = TREESTORE(*io_insert_handle);
+
+ if (tselem_handle->id != insert_element->store_elem->id) {
+ return false;
+ }
+
+ return ELEM(tselem_handle->type, TSE_LAYER_COLLECTION);
+}
+
+static void outliner_add_layer_collections_recursive(
+ SpaceOops *soops, const EvaluationContext *eval_ctx,
+ ListBase *tree, ID *id, ListBase *layer_collections, TreeElement *parent_ten,
+ const bool show_objects)
+{
+ for (LayerCollection *collection = layer_collections->first; collection; collection = collection->next) {
+ TreeElement *ten = outliner_add_element(soops, eval_ctx, tree, id, parent_ten, TSE_LAYER_COLLECTION, 0);
+
+ ten->name = collection->scene_collection->name;
+ ten->directdata = collection;
+ ten->reinsert = outliner_layer_collections_reorder;
+ ten->reinsert_poll = outliner_layer_collections_reorder_poll;
+
+ outliner_add_layer_collections_recursive(
+ soops, eval_ctx, &ten->subtree, id, &collection->layer_collections, ten, show_objects);
+ if (show_objects) {
+ for (LinkData *link = collection->object_bases.first; link; link = link->next) {
+ Base *base = (Base *)link->data;
+ TreeElement *te_object = outliner_add_element(soops, eval_ctx, &ten->subtree, base->object, ten, 0, 0);
+ te_object->directdata = base;
+ }
+ }
+ outliner_make_hierarchy(&ten->subtree);
+ }
+}
+
+static void outliner_add_view_layer(
+ SpaceOops *soops, const EvaluationContext *eval_ctx,
+ ListBase *tree, TreeElement *parent,
+ Scene *scene, ViewLayer *layer, const bool show_objects)
+{
+ outliner_add_layer_collections_recursive(
+ soops, eval_ctx, tree, &scene->id, &layer->layer_collections, parent, show_objects);
+}
+
+static void outliner_scene_collections_reorder(
+ Main *bmain,
+ SpaceOops *UNUSED(soops),
+ TreeElement *insert_element, TreeElement *insert_handle, TreeElementInsertType action,
+ const wmEvent *UNUSED(event))
+{
+ SceneCollection *sc_insert = insert_element->directdata;
+ SceneCollection *sc_handle = insert_handle->directdata;
+ ID *id = insert_handle->store_elem->id;
+ BLI_assert(id == insert_element->store_elem->id);
+
+ BLI_assert((action == TE_INSERT_INTO) || (sc_handle != BKE_collection_master(id)));
+ if (action == TE_INSERT_BEFORE) {
+ BKE_collection_move_above(id, sc_handle, sc_insert);
+ }
+ else if (action == TE_INSERT_AFTER) {
+ BKE_collection_move_below(id, sc_handle, sc_insert);
+ }
+ else if (action == TE_INSERT_INTO) {
+ BKE_collection_move_into(id, sc_handle, sc_insert);
+ }
+ else {
+ BLI_assert(0);
+ }
+
+ DEG_relations_tag_update(bmain);
+}
+static bool outliner_scene_collections_reorder_poll(
+ const TreeElement *insert_element,
+ TreeElement **io_insert_handle, TreeElementInsertType *io_action)
+{
+ const TreeStoreElem *tselem_handle = TREESTORE(*io_insert_handle);
+ ID *id = tselem_handle->id;
+
+ if (id != insert_element->store_elem->id) {
+ return false;
+ }
+
+ if (!ELEM(tselem_handle->type, TSE_SCENE_COLLECTION)) {
+ return false;
+ }
+
+ SceneCollection *sc_master = BKE_collection_master(id);
+ SceneCollection *sc_handle = (*io_insert_handle)->directdata;
+
+ if (sc_handle == sc_master) {
+ /* exception: Can't insert before/after master selection, has to be one of its childs */
+ TreeElement *te_master = *io_insert_handle;
+ if (*io_action == TE_INSERT_BEFORE) {
+ /* can't go higher than master collection, insert into it */
+ *io_action = TE_INSERT_INTO;
+ }
+ else if (*io_action == TE_INSERT_AFTER) {
+ *io_insert_handle = te_master->subtree.last;
+ }
+ }
+ return true;
+}
+
+BLI_INLINE void outliner_add_scene_collection_init(TreeElement *te, SceneCollection *collection)
+{
+ te->name = collection->name;
+ te->directdata = collection;
+ te->reinsert = outliner_scene_collections_reorder;
+ te->reinsert_poll = outliner_scene_collections_reorder_poll;
+}
+
+BLI_INLINE void outliner_add_scene_collection_objects(
+ SpaceOops *soops, const EvaluationContext *eval_ctx,
+ ListBase *tree, SceneCollection *collection, TreeElement *parent)
+{
+ for (LinkData *link = collection->objects.first; link; link = link->next) {
+ outliner_add_element(soops, eval_ctx, tree, link->data, parent, 0, 0);
+ }
+}
+
+static TreeElement *outliner_add_scene_collection_recursive(
+ SpaceOops *soops, const EvaluationContext *eval_ctx,
+ ListBase *tree, ID *id, SceneCollection *scene_collection, TreeElement *parent_ten)
+{
+ TreeElement *ten = outliner_add_element(soops, eval_ctx, tree, id, parent_ten, TSE_SCENE_COLLECTION, 0);
+ outliner_add_scene_collection_init(ten, scene_collection);
+ outliner_add_scene_collection_objects(soops, eval_ctx, &ten->subtree, scene_collection, ten);
+
+ for (SceneCollection *scene_collection_nested = scene_collection->scene_collections.first;
+ scene_collection_nested != NULL;
+ scene_collection_nested = scene_collection_nested->next)
+ {
+ outliner_add_scene_collection_recursive(
+ soops, eval_ctx, &ten->subtree, id, scene_collection_nested, ten);
+ }
+
+ outliner_make_hierarchy(&ten->subtree);
+ return ten;
+}
+
+static void outliner_add_collections(
+ SpaceOops *soops, const EvaluationContext *eval_ctx, Scene *scene)
+{
+ SceneCollection *master_collection = BKE_collection_master(&scene->id);
+ TreeElement *ten = outliner_add_scene_collection_recursive(
+ soops, eval_ctx, &soops->tree, &scene->id, master_collection, NULL);
+ /* Master Collection should always be expanded. */
+ TREESTORE(ten)->flag &= ~TSE_CLOSED;
+}
+
/* ======================================================= */
/* Generic Tree Building helpers - order these are called is top to bottom */
@@ -1494,18 +1780,15 @@ static void outliner_sort(ListBase *lb)
{
TreeElement *te;
TreeStoreElem *tselem;
- int totelem = 0;
te = lb->last;
if (te == NULL) return;
tselem = TREESTORE(te);
-
+
/* sorting rules; only object lists, ID lists, or deformgroups */
- if ( ELEM(tselem->type, TSE_DEFGROUP, TSE_ID_BASE) || (tselem->type == 0 && te->idcode == ID_OB)) {
-
- /* count first */
- for (te = lb->first; te; te = te->next) totelem++;
-
+ if (ELEM(tselem->type, TSE_DEFGROUP, TSE_ID_BASE) || (tselem->type == 0 && te->idcode == ID_OB)) {
+ int totelem = BLI_listbase_count(lb);
+
if (totelem > 1) {
tTreeSort *tear = MEM_mallocN(totelem * sizeof(tTreeSort), "tree sort array");
tTreeSort *tp = tear;
@@ -1555,6 +1838,305 @@ static void outliner_sort(ListBase *lb)
/* Filtering ----------------------------------------------- */
+typedef struct OutlinerTreeElementFocus {
+ TreeStoreElem *tselem;
+ int ys;
+} OutlinerTreeElementFocus;
+
+/**
+ * Bring the outliner scrolling back to where it was in relation to the original focus element
+ * Caller is expected to handle redrawing of ARegion.
+ */
+static void outliner_restore_scrolling_position(SpaceOops *soops, ARegion *ar, OutlinerTreeElementFocus *focus)
+{
+ View2D *v2d = &ar->v2d;
+ int ytop;
+
+ if (focus->tselem != NULL) {
+ outliner_set_coordinates(ar, soops);
+
+ TreeElement *te_new = outliner_find_tree_element(&soops->tree, focus->tselem);
+
+ if (te_new != NULL) {
+ int ys_new, ys_old;
+
+ ys_new = te_new->ys;
+ ys_old = focus->ys;
+
+ ytop = v2d->cur.ymax + (ys_new - ys_old) -1;
+ if (ytop > 0) ytop = 0;
+
+ v2d->cur.ymax = (float)ytop;
+ v2d->cur.ymin = (float)(ytop - BLI_rcti_size_y(&v2d->mask));
+ }
+ else {
+ return;
+ }
+
+ soops->storeflag |= SO_TREESTORE_REDRAW;
+ }
+}
+
+static bool test_collection_callback(TreeElement *te)
+{
+ TreeStoreElem *tselem = TREESTORE(te);
+ return ELEM(tselem->type, TSE_LAYER_COLLECTION, TSE_SCENE_COLLECTION);
+}
+
+static bool test_object_callback(TreeElement *te)
+{
+ TreeStoreElem *tselem = TREESTORE(te);
+ return ((tselem->type == 0) && (te->idcode == ID_OB));
+}
+
+/**
+ * See if TreeElement or any of its children pass the callback_test.
+ */
+static TreeElement *outliner_find_first_desired_element_at_y_recursive(
+ const SpaceOops *soops,
+ TreeElement *te,
+ const float limit,
+ bool (*callback_test)(TreeElement *))
+{
+ if (callback_test(te)) {
+ return te;
+ }
+
+ if (TSELEM_OPEN(te->store_elem, soops)) {
+ TreeElement *te_iter, *te_sub;
+ for (te_iter = te->subtree.first; te_iter; te_iter = te_iter->next) {
+ te_sub = outliner_find_first_desired_element_at_y_recursive(soops, te_iter, limit, callback_test);
+ if (te_sub != NULL) {
+ return te_sub;
+ }
+ }
+ }
+
+ return NULL;
+}
+
+/**
+ * Find the first element that passes a test starting from a reference vertical coordinate
+ *
+ * If the element that is in the position is not what we are looking for, keep looking for its
+ * children, siblings, and eventually, aunts, cousins, disntant families, ...
+ *
+ * Basically we keep going up and down the outliner tree from that point forward, until we find
+ * what we are looking for. If we are past the visible range and we can't find a valid element
+ * we return NULL.
+ */
+static TreeElement *outliner_find_first_desired_element_at_y(
+ const SpaceOops *soops,
+ const float view_co,
+ const float view_co_limit)
+{
+ TreeElement *te, *te_sub;
+ te = outliner_find_item_at_y(soops, &soops->tree, view_co);
+
+ bool (*callback_test)(TreeElement *);
+ if (soops->filter & SO_FILTER_NO_COLLECTION) {
+ callback_test = test_object_callback;
+ }
+ else {
+ callback_test = test_collection_callback;
+ }
+
+ while (te != NULL) {
+ te_sub = outliner_find_first_desired_element_at_y_recursive(soops, te, view_co_limit, callback_test);
+ if (te_sub != NULL) {
+ /* Skip the element if it was not visible to start with. */
+ if (te->ys + UI_UNIT_Y > view_co_limit) {
+ return te_sub;
+ }
+ else {
+ return NULL;
+ }
+ }
+
+ if (te->next) {
+ te = te->next;
+ continue;
+ }
+
+ if (te->parent == NULL) {
+ break;
+ }
+
+ while (te->parent) {
+ if (te->parent->next) {
+ te = te->parent->next;
+ break;
+ }
+ te = te->parent;
+ }
+ }
+
+ return NULL;
+}
+
+/**
+ * Store information of current outliner scrolling status to be restored later
+ *
+ * Finds the top-most collection visible in the outliner and populates the OutlinerTreeElementFocus
+ * struct to retrieve this element later to make sure it is in the same original position as before filtering
+ */
+static void outliner_store_scrolling_position(SpaceOops *soops, ARegion *ar, OutlinerTreeElementFocus *focus)
+{
+ TreeElement *te;
+ float limit = ar->v2d.cur.ymin;
+
+ outliner_set_coordinates(ar, soops);
+
+ te = outliner_find_first_desired_element_at_y(soops, ar->v2d.cur.ymax, limit);
+
+ if (te != NULL) {
+ focus->tselem = TREESTORE(te);
+ focus->ys = te->ys;
+ }
+ else {
+ focus->tselem = NULL;
+ }
+}
+
+static int outliner_exclude_filter_get(SpaceOops *soops)
+{
+ int exclude_filter = soops->filter & ~(SO_FILTER_OB_STATE_VISIBLE |
+ SO_FILTER_OB_STATE_SELECTED |
+ SO_FILTER_OB_STATE_ACTIVE);
+
+ if (soops->filter & SO_FILTER_SEARCH) {
+ if (soops->search_string[0] == 0) {
+ exclude_filter &= ~SO_FILTER_SEARCH;
+ }
+ }
+
+ /* Let's have this for the collection options at first. */
+ if (!SUPPORT_FILTER_OUTLINER(soops)) {
+ return (exclude_filter & SO_FILTER_SEARCH);
+ }
+
+ if ((exclude_filter & SO_FILTER_NO_OB_ALL) == 0) {
+ exclude_filter &= ~SO_FILTER_OB_TYPE;
+ }
+
+ if (exclude_filter & SO_FILTER_OB_STATE) {
+ switch (soops->filter_state) {
+ case SO_FILTER_OB_VISIBLE:
+ exclude_filter |= SO_FILTER_OB_STATE_VISIBLE;
+ break;
+ case SO_FILTER_OB_SELECTED:
+ exclude_filter |= SO_FILTER_OB_STATE_SELECTED;
+ break;
+ case SO_FILTER_OB_ACTIVE:
+ exclude_filter |= SO_FILTER_OB_STATE_ACTIVE;
+ break;
+ }
+ }
+
+ if ((exclude_filter & SO_FILTER_ANY) == 0) {
+ exclude_filter &= ~(SO_FILTER_OB_STATE);
+ }
+
+ return exclude_filter;
+}
+
+static bool outliner_element_visible_get(ViewLayer *view_layer, TreeElement *te, const int exclude_filter)
+{
+ if ((exclude_filter & SO_FILTER_ENABLE) == 0) {
+ return true;
+ }
+
+ TreeStoreElem *tselem = TREESTORE(te);
+ if ((tselem->type == 0) && (te->idcode == ID_OB)) {
+ if ((exclude_filter & SO_FILTER_NO_OBJECT)) {
+ return false;
+ }
+
+ Object *ob = (Object *)tselem->id;
+ Base *base = (Base *)te->directdata;
+ BLI_assert((base == NULL) || (base->object == ob));
+
+ if (exclude_filter & SO_FILTER_OB_TYPE) {
+ switch (ob->type) {
+ case OB_MESH:
+ if (exclude_filter & SO_FILTER_NO_OB_MESH) {
+ return false;
+ }
+ break;
+ case OB_ARMATURE:
+ if (exclude_filter & SO_FILTER_NO_OB_ARMATURE) {
+ return false;
+ }
+ break;
+ case OB_EMPTY:
+ if (exclude_filter & SO_FILTER_NO_OB_EMPTY) {
+ return false;
+ }
+ break;
+ case OB_LAMP:
+ if (exclude_filter & SO_FILTER_NO_OB_LAMP) {
+ return false;
+ }
+ break;
+ case OB_CAMERA:
+ if (exclude_filter & SO_FILTER_NO_OB_CAMERA) {
+ return false;
+ }
+ break;
+ default:
+ if (exclude_filter & SO_FILTER_NO_OB_OTHERS) {
+ return false;
+ }
+ break;
+ }
+ }
+
+ if (exclude_filter & SO_FILTER_OB_STATE) {
+ if (base == NULL) {
+ base = BKE_view_layer_base_find(view_layer, ob);
+
+ if (base == NULL) {
+ return false;
+ }
+ }
+
+ if (exclude_filter & SO_FILTER_OB_STATE_VISIBLE) {
+ if ((base->flag & BASE_VISIBLED) == 0) {
+ return false;
+ }
+ }
+ else if (exclude_filter & SO_FILTER_OB_STATE_SELECTED) {
+ if ((base->flag & BASE_SELECTED) == 0) {
+ return false;
+ }
+ }
+ else {
+ BLI_assert(exclude_filter & SO_FILTER_OB_STATE_ACTIVE);
+ if (base != BASACT(view_layer)) {
+ return false;
+ }
+ }
+ }
+
+ if ((te->parent != NULL) &&
+ (TREESTORE(te->parent)->type == 0) && (te->parent->idcode == ID_OB))
+ {
+ if (exclude_filter & SO_FILTER_NO_CHILDREN) {
+ return false;
+ }
+ }
+ }
+ else if (te->parent != NULL &&
+ TREESTORE(te->parent)->type == 0 && te->parent->idcode == ID_OB)
+ {
+ if (exclude_filter & SO_FILTER_NO_OB_CONTENT) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
static bool outliner_filter_has_name(TreeElement *te, const char *name, int flags)
{
int fn_flag = 0;
@@ -1565,31 +2147,25 @@ static bool outliner_filter_has_name(TreeElement *te, const char *name, int flag
return fnmatch(name, te->name, fn_flag) == 0;
}
-static int outliner_filter_tree(SpaceOops *soops, ListBase *lb)
+static int outliner_filter_subtree(
+ SpaceOops *soops, ViewLayer *view_layer, ListBase *lb, const char *search_string, const int exclude_filter)
{
- TreeElement *te, *ten;
+ TreeElement *te, *te_next;
TreeStoreElem *tselem;
- char search_buff[sizeof(((struct SpaceOops *)NULL)->search_string) + 2];
- char *search_string;
- /* although we don't have any search string, we return true
- * since the entire tree is ok then...
- */
- if (soops->search_string[0] == 0)
- return 1;
+ for (te = lb->first; te; te = te_next) {
+ te_next = te->next;
- if (soops->search_flags & SO_FIND_COMPLETE) {
- search_string = soops->search_string;
- }
- else {
- /* Implicitly add heading/trailing wildcards if needed. */
- BLI_strncpy_ensure_pad(search_buff, soops->search_string, '*', sizeof(search_buff));
- search_string = search_buff;
- }
+ if ((outliner_element_visible_get(view_layer, te, exclude_filter) == false)) {
+ outliner_free_tree_element(te, lb);
+ continue;
+ }
+ else if ((exclude_filter & SO_FILTER_SEARCH) == 0) {
+ /* Filter subtree too. */
+ outliner_filter_subtree(soops, view_layer, &te->subtree, search_string, exclude_filter);
+ continue;
+ }
- for (te = lb->first; te; te = ten) {
- ten = te->next;
-
if (!outliner_filter_has_name(te, search_string, soops->search_flags)) {
/* item isn't something we're looking for, but...
* - if the subtree is expanded, check if there are any matches that can be easily found
@@ -1598,41 +2174,63 @@ static int outliner_filter_tree(SpaceOops *soops, ListBase *lb)
* so these can be safely ignored (i.e. the subtree can get freed)
*/
tselem = TREESTORE(te);
-
+
/* flag as not a found item */
tselem->flag &= ~TSE_SEARCHMATCH;
- if ((!TSELEM_OPEN(tselem, soops)) || outliner_filter_tree(soops, &te->subtree) == 0) {
- outliner_free_tree(&te->subtree);
- BLI_remlink(lb, te);
-
- if (te->flag & TE_FREE_NAME) MEM_freeN((void *)te->name);
- MEM_freeN(te);
+ if ((!TSELEM_OPEN(tselem, soops)) ||
+ outliner_filter_subtree(soops, view_layer, &te->subtree, search_string, exclude_filter) == 0)
+ {
+ outliner_free_tree_element(te, lb);
}
}
else {
tselem = TREESTORE(te);
-
+
/* flag as a found item - we can then highlight it */
tselem->flag |= TSE_SEARCHMATCH;
-
+
/* filter subtree too */
- outliner_filter_tree(soops, &te->subtree);
+ outliner_filter_subtree(soops, view_layer, &te->subtree, search_string, exclude_filter);
}
}
-
+
/* if there are still items in the list, that means that there were still some matches */
return (BLI_listbase_is_empty(lb) == false);
}
+static void outliner_filter_tree(SpaceOops *soops, ViewLayer *view_layer)
+{
+ char search_buff[sizeof(((struct SpaceOops *)NULL)->search_string) + 2];
+ char *search_string;
+
+ const int exclude_filter = outliner_exclude_filter_get(soops);
+
+ if (exclude_filter == 0) {
+ return;
+ }
+
+ if (soops->search_flags & SO_FIND_COMPLETE) {
+ search_string = soops->search_string;
+ }
+ else {
+ /* Implicitly add heading/trailing wildcards if needed. */
+ BLI_strncpy_ensure_pad(search_buff, soops->search_string, '*', sizeof(search_buff));
+ search_string = search_buff;
+ }
+
+ outliner_filter_subtree(soops, view_layer, &soops->tree, search_string, exclude_filter);
+}
+
/* ======================================================= */
/* Main Tree Building API */
/* Main entry point for building the tree data-structure that the outliner represents */
// TODO: split each mode into its own function?
-void outliner_build_tree(Main *mainvar, Scene *scene, SpaceOops *soops)
+void outliner_build_tree(
+ Main *mainvar, const EvaluationContext *eval_ctx, Scene *scene,
+ ViewLayer *view_layer, SpaceOops *soops, ARegion *ar)
{
- Base *base;
TreeElement *te = NULL, *ten;
TreeStoreElem *tselem;
int show_opened = !soops->treestore || !BLI_mempool_count(soops->treestore); /* on first view, we open scenes */
@@ -1653,6 +2251,9 @@ void outliner_build_tree(Main *mainvar, Scene *scene, SpaceOops *soops)
if (soops->tree.first && (soops->storeflag & SO_TREESTORE_REDRAW))
return;
+ OutlinerTreeElementFocus focus;
+ outliner_store_scrolling_position(soops, ar, &focus);
+
outliner_free_tree(&soops->tree);
outliner_storage_cleanup(soops);
@@ -1661,20 +2262,20 @@ void outliner_build_tree(Main *mainvar, Scene *scene, SpaceOops *soops)
Library *lib;
/* current file first - mainvar provides tselem with unique pointer - not used */
- ten = outliner_add_element(soops, &soops->tree, mainvar, NULL, TSE_ID_BASE, 0);
+ ten = outliner_add_element(soops, eval_ctx, &soops->tree, mainvar, NULL, TSE_ID_BASE, 0);
ten->name = IFACE_("Current File");
tselem = TREESTORE(ten);
if (!tselem->used)
tselem->flag &= ~TSE_CLOSED;
- outliner_add_library_contents(mainvar, soops, ten, NULL);
+ outliner_add_library_contents(mainvar, soops, eval_ctx, ten, NULL);
for (lib = mainvar->library.first; lib; lib = lib->id.next) {
- ten = outliner_add_element(soops, &soops->tree, lib, NULL, 0, 0);
+ ten = outliner_add_element(soops, eval_ctx, &soops->tree, lib, NULL, 0, 0);
lib->id.newid = (ID *)ten;
- outliner_add_library_contents(mainvar, soops, ten, lib);
+ outliner_add_library_contents(mainvar, soops, eval_ctx, ten, lib);
}
/* make hierarchy */
@@ -1694,8 +2295,8 @@ void outliner_build_tree(Main *mainvar, Scene *scene, SpaceOops *soops)
}
else {
/* Else, make a new copy of the libtree for our parent. */
- TreeElement *dupten = outliner_add_element(soops, &par->subtree, lib, NULL, 0, 0);
- outliner_add_library_contents(mainvar, soops, dupten, lib);
+ TreeElement *dupten = outliner_add_element(soops, eval_ctx, &par->subtree, lib, NULL, 0, 0);
+ outliner_add_library_contents(mainvar, soops, eval_ctx, dupten, lib);
dupten->parent = par;
}
}
@@ -1706,80 +2307,25 @@ void outliner_build_tree(Main *mainvar, Scene *scene, SpaceOops *soops)
lib->id.newid = NULL;
}
- else if (soops->outlinevis == SO_ALL_SCENES) {
+ else if (soops->outlinevis == SO_SCENES) {
Scene *sce;
for (sce = mainvar->scene.first; sce; sce = sce->id.next) {
- te = outliner_add_element(soops, &soops->tree, sce, NULL, 0, 0);
+ te = outliner_add_element(soops, eval_ctx, &soops->tree, sce, NULL, 0, 0);
tselem = TREESTORE(te);
- if (sce == scene && show_opened)
+
+ if (sce == scene && show_opened) {
tselem->flag &= ~TSE_CLOSED;
-
- for (base = sce->base.first; base; base = base->next) {
- ten = outliner_add_element(soops, &te->subtree, base->object, te, 0, 0);
- ten->directdata = base;
}
+
outliner_make_hierarchy(&te->subtree);
- /* clear id.newid, to prevent objects be inserted in wrong scenes (parent in other scene) */
- for (base = sce->base.first; base; base = base->next) base->object->id.newid = NULL;
- }
- }
- else if (soops->outlinevis == SO_CUR_SCENE) {
-
- outliner_add_scene_contents(soops, &soops->tree, scene, NULL);
-
- for (base = scene->base.first; base; base = base->next) {
- ten = outliner_add_element(soops, &soops->tree, base->object, NULL, 0, 0);
- ten->directdata = base;
- }
- outliner_make_hierarchy(&soops->tree);
- }
- else if (soops->outlinevis == SO_VISIBLE) {
- for (base = scene->base.first; base; base = base->next) {
- if (base->lay & scene->lay)
- outliner_add_element(soops, &soops->tree, base->object, NULL, 0, 0);
}
- outliner_make_hierarchy(&soops->tree);
}
else if (soops->outlinevis == SO_GROUPS) {
Group *group;
- GroupObject *go;
-
for (group = mainvar->group.first; group; group = group->id.next) {
- if (group->gobject.first) {
- te = outliner_add_element(soops, &soops->tree, group, NULL, 0, 0);
-
- for (go = group->gobject.first; go; go = go->next) {
- ten = outliner_add_element(soops, &te->subtree, go->ob, te, 0, 0);
- ten->directdata = NULL; /* eh, why? */
- }
- outliner_make_hierarchy(&te->subtree);
- /* clear id.newid, to prevent objects be inserted in wrong scenes (parent in other scene) */
- for (go = group->gobject.first; go; go = go->next) go->ob->id.newid = NULL;
- }
- }
- }
- else if (soops->outlinevis == SO_SAME_TYPE) {
- Object *ob = OBACT;
- if (ob) {
- for (base = scene->base.first; base; base = base->next) {
- if (base->object->type == ob->type) {
- ten = outliner_add_element(soops, &soops->tree, base->object, NULL, 0, 0);
- ten->directdata = base;
- }
- }
- outliner_make_hierarchy(&soops->tree);
- }
- }
- else if (soops->outlinevis == SO_SELECTED) {
- for (base = scene->base.first; base; base = base->next) {
- if (base->lay & scene->lay) {
- if (base->flag & SELECT) {
- ten = outliner_add_element(soops, &soops->tree, base->object, NULL, 0, 0);
- ten->directdata = base;
- }
- }
+ te = outliner_add_element(soops, eval_ctx, &soops->tree, group, NULL, 0, 0);
+ outliner_make_hierarchy(&te->subtree);
}
- outliner_make_hierarchy(&soops->tree);
}
else if (soops->outlinevis == SO_SEQUENCE) {
Sequence *seq;
@@ -1796,11 +2342,11 @@ void outliner_build_tree(Main *mainvar, Scene *scene, SpaceOops *soops)
while (seq) {
op = need_add_seq_dup(seq);
if (op == 1) {
- /* ten = */ outliner_add_element(soops, &soops->tree, (void *)seq, NULL, TSE_SEQUENCE, 0);
+ /* ten = */ outliner_add_element(soops, eval_ctx, &soops->tree, (void *)seq, NULL, TSE_SEQUENCE, 0);
}
else if (op == 0) {
- ten = outliner_add_element(soops, &soops->tree, (void *)seq, NULL, TSE_SEQUENCE_DUP, 0);
- outliner_add_seq_dup(soops, seq, ten, 0);
+ ten = outliner_add_element(soops, eval_ctx, &soops->tree, (void *)seq, NULL, TSE_SEQUENCE_DUP, 0);
+ outliner_add_seq_dup(soops, eval_ctx, seq, ten, 0);
}
seq = seq->next;
}
@@ -1810,37 +2356,54 @@ void outliner_build_tree(Main *mainvar, Scene *scene, SpaceOops *soops)
RNA_main_pointer_create(mainvar, &mainptr);
- ten = outliner_add_element(soops, &soops->tree, (void *)&mainptr, NULL, TSE_RNA_STRUCT, -1);
+ ten = outliner_add_element(soops, eval_ctx, &soops->tree, (void *)&mainptr, NULL, TSE_RNA_STRUCT, -1);
if (show_opened) {
tselem = TREESTORE(ten);
tselem->flag &= ~TSE_CLOSED;
}
}
- else if (soops->outlinevis == SO_USERDEF) {
- PointerRNA userdefptr;
-
- RNA_pointer_create(NULL, &RNA_UserPreferences, &U, &userdefptr);
-
- ten = outliner_add_element(soops, &soops->tree, (void *)&userdefptr, NULL, TSE_RNA_STRUCT, -1);
-
- if (show_opened) {
- tselem = TREESTORE(ten);
- tselem->flag &= ~TSE_CLOSED;
+ else if (soops->outlinevis == SO_ID_ORPHANS) {
+ outliner_add_orphaned_datablocks(mainvar, soops, eval_ctx);
+ }
+ else if (soops->outlinevis == SO_VIEW_LAYER) {
+ if ((soops->filter & SO_FILTER_ENABLE) && (soops->filter & SO_FILTER_NO_COLLECTION)) {
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ TreeElement *te_object = outliner_add_element(soops, eval_ctx, &soops->tree, base->object, NULL, 0, 0);
+ te_object->directdata = base;
+ }
+ outliner_make_hierarchy(&soops->tree);
+ }
+ else {
+ outliner_add_view_layer(soops, eval_ctx, &soops->tree, NULL, scene, view_layer, true);
}
}
- else if (soops->outlinevis == SO_ID_ORPHANS) {
- outliner_add_orphaned_datablocks(mainvar, soops);
+ else if (soops->outlinevis == SO_COLLECTIONS) {
+ if ((soops->filter & SO_FILTER_ENABLE) && (soops->filter & SO_FILTER_NO_COLLECTION)) {
+ FOREACH_SCENE_OBJECT(scene, ob)
+ {
+ outliner_add_element(soops, eval_ctx, &soops->tree, ob, NULL, 0, 0);
+ }
+ FOREACH_SCENE_OBJECT_END
+ outliner_make_hierarchy(&soops->tree);
+ }
+ else {
+ outliner_add_collections(soops, eval_ctx, scene);
+ }
}
else {
- ten = outliner_add_element(soops, &soops->tree, OBACT, NULL, 0, 0);
- if (ten) ten->directdata = BASACT;
+ if (BASACT(view_layer)) {
+ ten = outliner_add_element(soops, eval_ctx, &soops->tree, OBACT(view_layer), NULL, 0, 0);
+ ten->directdata = BASACT(view_layer);
+ }
}
if ((soops->flag & SO_SKIP_SORT_ALPHA) == 0) {
outliner_sort(&soops->tree);
}
- outliner_filter_tree(soops, &soops->tree);
+
+ outliner_filter_tree(soops, view_layer);
+ outliner_restore_scrolling_position(soops, ar, &focus);
BKE_main_id_clear_newpoins(mainvar);
}
diff --git a/source/blender/editors/space_outliner/outliner_utils.c b/source/blender/editors/space_outliner/outliner_utils.c
new file mode 100644
index 00000000000..d3f7fd7055e
--- /dev/null
+++ b/source/blender/editors/space_outliner/outliner_utils.c
@@ -0,0 +1,233 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2017 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/editors/space_outliner/outliner_utils.c
+ * \ingroup spoutliner
+ */
+
+#include "BLI_utildefines.h"
+
+#include "DNA_action_types.h"
+#include "DNA_space_types.h"
+
+#include "BKE_outliner_treehash.h"
+
+#include "ED_armature.h"
+
+#include "UI_interface.h"
+
+#include "outliner_intern.h"
+
+/**
+ * Try to find an item under y-coordinate \a view_co_y (view-space).
+ * \note Recursive
+ */
+TreeElement *outliner_find_item_at_y(const SpaceOops *soops, const ListBase *tree, float view_co_y)
+{
+ for (TreeElement *te_iter = tree->first; te_iter; te_iter = te_iter->next) {
+ if (view_co_y < (te_iter->ys + UI_UNIT_Y)) {
+ if (view_co_y >= te_iter->ys) {
+ /* co_y is inside this element */
+ return te_iter;
+ }
+ else if (TSELEM_OPEN(te_iter->store_elem, soops)) {
+ /* co_y is lower than current element, possibly inside children */
+ TreeElement *te_sub = outliner_find_item_at_y(soops, &te_iter->subtree, view_co_y);
+ if (te_sub) {
+ return te_sub;
+ }
+ }
+ }
+ }
+
+ return NULL;
+}
+
+/**
+ * Collapsed items can show their children as click-able icons. This function tries to find
+ * such an icon that represents the child item at x-coordinate \a view_co_x (view-space).
+ *
+ * \return a hovered child item or \a parent_te (if no hovered child found).
+ */
+TreeElement *outliner_find_item_at_x_in_row(const SpaceOops *soops, const TreeElement *parent_te, float view_co_x)
+{
+ if (!TSELEM_OPEN(TREESTORE(parent_te), soops)) { /* if parent_te is opened, it doesn't show childs in row */
+ /* no recursion, items can only display their direct children in the row */
+ for (TreeElement *child_te = parent_te->subtree.first;
+ child_te && view_co_x >= child_te->xs; /* don't look further if co_x is smaller than child position*/
+ child_te = child_te->next)
+ {
+ if ((child_te->flag & TE_ICONROW) && (view_co_x > child_te->xs) && (view_co_x < child_te->xend)) {
+ return child_te;
+ }
+ }
+ }
+
+ /* return parent if no child is hovered */
+ return (TreeElement *)parent_te;
+}
+
+/* Find specific item from the treestore */
+TreeElement *outliner_find_tree_element(ListBase *lb, const TreeStoreElem *store_elem)
+{
+ TreeElement *te, *tes;
+ for (te = lb->first; te; te = te->next) {
+ if (te->store_elem == store_elem) return te;
+ tes = outliner_find_tree_element(&te->subtree, store_elem);
+ if (tes) return tes;
+ }
+ return NULL;
+}
+
+/* tse is not in the treestore, we use its contents to find a match */
+TreeElement *outliner_find_tse(SpaceOops *soops, const TreeStoreElem *tse)
+{
+ TreeStoreElem *tselem;
+
+ if (tse->id == NULL) return NULL;
+
+ /* check if 'tse' is in treestore */
+ tselem = BKE_outliner_treehash_lookup_any(soops->treehash, tse->type, tse->nr, tse->id);
+ if (tselem)
+ return outliner_find_tree_element(&soops->tree, tselem);
+
+ return NULL;
+}
+
+/* Find treestore that refers to given ID */
+TreeElement *outliner_find_id(SpaceOops *soops, ListBase *lb, const ID *id)
+{
+ for (TreeElement *te = lb->first; te; te = te->next) {
+ TreeStoreElem *tselem = TREESTORE(te);
+ if (tselem->type == 0) {
+ if (tselem->id == id) {
+ return te;
+ }
+ /* only deeper on scene or object */
+ if (ELEM(te->idcode, ID_OB, ID_SCE) ||
+ ((soops->outlinevis == SO_GROUPS) && (te->idcode == ID_GR)))
+ {
+ TreeElement *tes = outliner_find_id(soops, &te->subtree, id);
+ if (tes) {
+ return tes;
+ }
+ }
+ }
+ }
+ return NULL;
+}
+
+TreeElement *outliner_find_posechannel(ListBase *lb, const bPoseChannel *pchan)
+{
+ for (TreeElement *te = lb->first; te; te = te->next) {
+ if (te->directdata == pchan) {
+ return te;
+ }
+
+ TreeStoreElem *tselem = TREESTORE(te);
+ if (ELEM(tselem->type, TSE_POSE_BASE, TSE_POSE_CHANNEL)) {
+ TreeElement *tes = outliner_find_posechannel(&te->subtree, pchan);
+ if (tes) {
+ return tes;
+ }
+ }
+ }
+ return NULL;
+}
+
+TreeElement *outliner_find_editbone(ListBase *lb, const EditBone *ebone)
+{
+ for (TreeElement *te = lb->first; te; te = te->next) {
+ if (te->directdata == ebone) {
+ return te;
+ }
+
+ TreeStoreElem *tselem = TREESTORE(te);
+ if (ELEM(tselem->type, 0, TSE_EBONE)) {
+ TreeElement *tes = outliner_find_editbone(&te->subtree, ebone);
+ if (tes) {
+ return tes;
+ }
+ }
+ }
+ return NULL;
+}
+
+ID *outliner_search_back(SpaceOops *UNUSED(soops), TreeElement *te, short idcode)
+{
+ TreeStoreElem *tselem;
+ te = te->parent;
+
+ while (te) {
+ tselem = TREESTORE(te);
+ if (tselem->type == 0 && te->idcode == idcode) return tselem->id;
+ te = te->parent;
+ }
+ return NULL;
+}
+
+/**
+ * Iterate over all tree elements (pre-order traversal), executing \a func callback for
+ * each tree element matching the optional filters.
+ *
+ * \param filter_te_flag: If not 0, only TreeElements with this flag will be visited.
+ * \param filter_tselem_flag: Same as \a filter_te_flag, but for the TreeStoreElem.
+ * \param func: Custom callback to execute for each visited item.
+ */
+bool outliner_tree_traverse(const SpaceOops *soops, ListBase *tree, int filter_te_flag, int filter_tselem_flag,
+ TreeTraversalFunc func, void *customdata)
+{
+ for (TreeElement *te = tree->first, *te_next; te; te = te_next) {
+ TreeTraversalAction func_retval = TRAVERSE_CONTINUE;
+ /* in case te is freed in callback */
+ TreeStoreElem *tselem = TREESTORE(te);
+ ListBase subtree = te->subtree;
+ te_next = te->next;
+
+ if (filter_te_flag && (te->flag & filter_te_flag) == 0) {
+ /* skip */
+ }
+ else if (filter_tselem_flag && (tselem->flag & filter_tselem_flag) == 0) {
+ /* skip */
+ }
+ else {
+ func_retval = func(te, customdata);
+ }
+ /* Don't access te or tselem from now on! Might've been freed... */
+
+ if (func_retval == TRAVERSE_BREAK) {
+ return false;
+ }
+
+ if (func_retval == TRAVERSE_SKIP_CHILDS) {
+ /* skip */
+ }
+ else if (!outliner_tree_traverse(soops, &subtree, filter_te_flag, filter_tselem_flag, func, customdata)) {
+ return false;
+ }
+ }
+
+ return true;
+}
diff --git a/source/blender/editors/space_outliner/space_outliner.c b/source/blender/editors/space_outliner/space_outliner.c
index 759ef4e78e4..1529e6143c3 100644
--- a/source/blender/editors/space_outliner/space_outliner.c
+++ b/source/blender/editors/space_outliner/space_outliner.c
@@ -39,6 +39,7 @@
#include "BLI_mempool.h"
#include "BKE_context.h"
+#include "BKE_layer.h"
#include "BKE_screen.h"
#include "BKE_scene.h"
#include "BKE_outliner_treehash.h"
@@ -47,6 +48,7 @@
#include "ED_screen.h"
#include "WM_api.h"
+#include "WM_message.h"
#include "WM_types.h"
#include "BIF_gl.h"
@@ -102,10 +104,14 @@ static int outliner_parent_drop_poll(bContext *C, wmDrag *drag, const wmEvent *e
if (GS(id->name) == ID_OB) {
/* Ensure item under cursor is valid drop target */
TreeElement *te = outliner_dropzone_find(soops, fmval, true);
+ TreeStoreElem *tselem = te ? TREESTORE(te) : NULL;
- if (te && te->idcode == ID_OB && TREESTORE(te)->type == 0) {
+ if (!te) {
+ /* pass */
+ }
+ else if (te->idcode == ID_OB && tselem->type == 0) {
Scene *scene;
- ID *te_id = TREESTORE(te)->id;
+ ID *te_id = tselem->id;
/* check if dropping self or parent */
if (te_id == id || (Object *)te_id == ((Object *)id)->parent)
@@ -118,9 +124,23 @@ static int outliner_parent_drop_poll(bContext *C, wmDrag *drag, const wmEvent *e
* element for object it means that all displayed objects belong to
* active scene and parenting them is allowed (sergey)
*/
- if (!scene || BKE_scene_base_find(scene, (Object *)id)) {
+ if (!scene) {
return 1;
}
+ else {
+ for (ViewLayer *view_layer = scene->view_layers.first;
+ view_layer;
+ view_layer = view_layer->next)
+ {
+ if (BKE_view_layer_base_find(view_layer, (Object *)id)) {
+ return 1;
+ }
+ }
+ }
+ }
+ else if (ELEM(tselem->type, TSE_LAYER_COLLECTION, TSE_SCENE_COLLECTION)) {
+ /* support adding object from different scene to collection */
+ return 1;
}
}
}
@@ -143,7 +163,7 @@ static int outliner_parent_clear_poll(bContext *C, wmDrag *drag, const wmEvent *
UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &fmval[0], &fmval[1]);
- if (!ELEM(soops->outlinevis, SO_ALL_SCENES, SO_CUR_SCENE, SO_VISIBLE, SO_GROUPS)) {
+ if (!ELEM(soops->outlinevis, SO_SCENES, SO_GROUPS, SO_VIEW_LAYER, SO_COLLECTIONS)) {
return false;
}
@@ -292,7 +312,9 @@ static void outliner_main_region_free(ARegion *UNUSED(ar))
}
-static void outliner_main_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+static void outliner_main_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar,
+ wmNotifier *wmn, const Scene *UNUSED(scene))
{
/* context changes */
switch (wmn->category) {
@@ -308,6 +330,7 @@ static void outliner_main_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(s
case ND_RENDER_OPTIONS:
case ND_SEQUENCER:
case ND_LAYER:
+ case ND_LAYER_CONTENT:
case ND_WORLD:
ED_region_tag_redraw(ar);
break;
@@ -392,10 +415,33 @@ static void outliner_main_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(s
if (ELEM(wmn->action, NA_EDITED, NA_SELECTED))
ED_region_tag_redraw(ar);
break;
+ case NC_SCREEN:
+ if (ELEM(wmn->data, ND_LAYER)) {
+ ED_region_tag_redraw(ar);
+ }
+ break;
}
}
+static void outliner_main_region_message_subscribe(
+ const struct bContext *UNUSED(C),
+ struct WorkSpace *UNUSED(workspace), struct Scene *UNUSED(scene),
+ struct bScreen *UNUSED(screen), struct ScrArea *sa, struct ARegion *ar,
+ struct wmMsgBus *mbus)
+{
+ SpaceOops *soops = sa->spacedata.first;
+ wmMsgSubscribeValue msg_sub_value_region_tag_redraw = {
+ .owner = ar,
+ .user_data = ar,
+ .notify = ED_region_do_msg_notify_tag_redraw,
+ };
+
+ if (ELEM(soops->outlinevis, SO_VIEW_LAYER, SO_COLLECTIONS)) {
+ WM_msg_subscribe_rna_anon_prop(mbus, Window, view_layer, &msg_sub_value_region_tag_redraw);
+ }
+}
+
/* ************************ header outliner area region *********************** */
@@ -414,7 +460,9 @@ static void outliner_header_region_free(ARegion *UNUSED(ar))
{
}
-static void outliner_header_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+static void outliner_header_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar,
+ wmNotifier *wmn, const Scene *UNUSED(scene))
{
/* context changes */
switch (wmn->category) {
@@ -547,6 +595,7 @@ void ED_spacetype_outliner(void)
art->draw = outliner_main_region_draw;
art->free = outliner_main_region_free;
art->listener = outliner_main_region_listener;
+ art->message_subscribe = outliner_main_region_message_subscribe;
BLI_addhead(&st->regiontypes, art);
/* regions: header */
diff --git a/source/blender/editors/space_script/space_script.c b/source/blender/editors/space_script/space_script.c
index 4228635ccd6..fb8de02d3bd 100644
--- a/source/blender/editors/space_script/space_script.c
+++ b/source/blender/editors/space_script/space_script.c
@@ -176,7 +176,9 @@ static void script_header_region_draw(const bContext *C, ARegion *ar)
ED_region_header(C, ar);
}
-static void script_main_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *UNUSED(ar), wmNotifier *UNUSED(wmn))
+static void script_main_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *UNUSED(ar),
+ wmNotifier *UNUSED(wmn), const Scene *UNUSED(scene))
{
/* context changes */
// XXX - Todo, need the ScriptSpace accessible to get the python script to run.
diff --git a/source/blender/editors/space_sequencer/CMakeLists.txt b/source/blender/editors/space_sequencer/CMakeLists.txt
index 6dce962ee02..6b8108a1265 100644
--- a/source/blender/editors/space_sequencer/CMakeLists.txt
+++ b/source/blender/editors/space_sequencer/CMakeLists.txt
@@ -54,7 +54,7 @@ set(SRC
)
if(WITH_AUDASPACE)
- add_definitions(${AUDASPACE_DEFINITIONS})
+ add_definitions(-DWITH_AUDASPACE)
list(APPEND INC_SYS
${AUDASPACE_C_INCLUDE_DIRS}
diff --git a/source/blender/editors/space_sequencer/sequencer_add.c b/source/blender/editors/space_sequencer/sequencer_add.c
index 258cbdfaffd..0b6bacfbe68 100644
--- a/source/blender/editors/space_sequencer/sequencer_add.c
+++ b/source/blender/editors/space_sequencer/sequencer_add.c
@@ -69,7 +69,7 @@
#include "BKE_sound.h"
#ifdef WITH_AUDASPACE
-# include AUD_SEQUENCE_H
+# include <AUD_Sequence.h>
#endif
/* own include */
diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c b/source/blender/editors/space_sequencer/sequencer_draw.c
index 14661e2f44f..04dbab0b853 100644
--- a/source/blender/editors/space_sequencer/sequencer_draw.c
+++ b/source/blender/editors/space_sequencer/sequencer_draw.c
@@ -56,11 +56,12 @@
#include "IMB_colormanagement.h"
#include "IMB_imbuf.h"
-#include "BIF_gl.h"
#include "BIF_glutil.h"
-#include "GPU_basic_shader.h"
#include "GPU_compositing.h"
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+#include "GPU_matrix.h"
#include "ED_anim_api.h"
#include "ED_gpencil.h"
@@ -194,25 +195,35 @@ void color3ubv_from_seq(Scene *curscene, Sequence *seq, unsigned char col[3])
}
}
-static void drawseqwave(const bContext *C, SpaceSeq *sseq, Scene *scene, Sequence *seq, float x1, float y1, float x2, float y2, float stepsize)
+static void drawseqwave(View2D *v2d, const bContext *C, SpaceSeq *sseq, Scene *scene, Sequence *seq,
+ float x1, float y1, float x2, float y2, float stepsize, unsigned int pos)
{
/*
* x1 is the starting x value to draw the wave,
* x2 the end x value, same for y1 and y2
* stepsize is width of a pixel.
*/
+
+ /* offset x1 and x2 values, to match view min/max, if strip is out of bounds */
+ int x1_offset = max_ff(v2d->cur.xmin, x1);
+ int x2_offset = min_ff(v2d->cur.xmax + 1.0f, x2);
+
if (seq->sound && ((sseq->flag & SEQ_ALL_WAVEFORMS) || (seq->flag & SEQ_AUDIO_DRAW_WAVEFORM))) {
- int i, j, pos;
- int length = floor((x2 - x1) / stepsize) + 1;
- float ymid = (y1 + y2) / 2;
- float yscale = (y2 - y1) / 2;
+ int i, j, p;
+ int length = floor((x2_offset - x1_offset) / stepsize) + 1;
+ float ymid = (y1 + y2) / 2.0f;
+ float yscale = (y2 - y1) / 2.0f;
float samplestep;
float startsample, endsample;
float value1, value2;
bSound *sound = seq->sound;
SoundWaveform *waveform;
-
+
+ if (length < 2) {
+ return;
+ }
+
if (!sound->spinlock) {
sound->spinlock = MEM_mallocN(sizeof(SpinLock), "sound_spinlock");
BLI_spin_init(sound->spinlock);
@@ -245,21 +256,27 @@ static void drawseqwave(const bContext *C, SpaceSeq *sseq, Scene *scene, Sequenc
endsample = ceil((seq->startofs + seq->anim_startofs + seq->enddisp - seq->startdisp) / FPS * SOUND_WAVE_SAMPLES_PER_SECOND);
samplestep = (endsample - startsample) * stepsize / (x2 - x1);
- if (length > floor((waveform->length - startsample) / samplestep))
- length = floor((waveform->length - startsample) / samplestep);
+ length = min_ii(floor((waveform->length - startsample) / samplestep), length);
+
+ if (length < 2) {
+ return;
+ }
+
+ immUniformColor4f(1.0f, 1.0f, 1.0f, 0.5f);
- glColor4f(1.0f, 1.0f, 1.0f, 0.5);
glEnable(GL_BLEND);
- glBegin(GL_TRIANGLE_STRIP);
+
+ immBegin(GWN_PRIM_TRI_STRIP, length * 2);
+
for (i = 0; i < length; i++) {
- float sampleoffset = startsample + i * samplestep;
- pos = sampleoffset;
+ float sampleoffset = startsample + ((x1_offset - x1) / stepsize + i) * samplestep;
+ p = sampleoffset;
- value1 = waveform->data[pos * 3];
- value2 = waveform->data[pos * 3 + 1];
+ value1 = waveform->data[p * 3];
+ value2 = waveform->data[p * 3 + 1];
if (samplestep > 1.0f) {
- for (j = pos + 1; (j < waveform->length) && (j < pos + samplestep); j++) {
+ for (j = p + 1; (j < waveform->length) && (j < p + samplestep); j++) {
if (value1 > waveform->data[j * 3])
value1 = waveform->data[j * 3];
@@ -269,34 +286,20 @@ static void drawseqwave(const bContext *C, SpaceSeq *sseq, Scene *scene, Sequenc
}
else {
/* use simple linear interpolation */
- float f = sampleoffset - pos;
- value1 = (1.0f - f) * value1 + f * waveform->data[pos * 3 + 3];
- value2 = (1.0f - f) * value2 + f * waveform->data[pos * 3 + 4];
+ float f = sampleoffset - p;
+ value1 = (1.0f - f) * value1 + f * waveform->data[p * 3 + 3];
+ value2 = (1.0f - f) * value2 + f * waveform->data[p * 3 + 4];
}
- glVertex2f(x1 + i * stepsize, ymid + value1 * yscale);
- glVertex2f(x1 + i * stepsize, ymid + value2 * yscale);
+ immVertex2f(pos, x1_offset + i * stepsize, ymid + value1 * yscale);
+ immVertex2f(pos, x1_offset + i * stepsize, ymid + value2 * yscale);
}
- glEnd();
- glDisable(GL_BLEND);
- }
-}
-static void drawmeta_stipple(int value)
-{
- if (value) {
- GPU_basic_shader_bind(GPU_SHADER_STIPPLE | GPU_SHADER_USE_COLOR);
- GPU_basic_shader_stipple(GPU_SHADER_STIPPLE_HALFTONE);
-
- glEnable(GL_LINE_STIPPLE);
- glLineStipple(1, 0x8888);
- }
- else {
- GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
- glDisable(GL_LINE_STIPPLE);
+ immEnd();
+
+ glDisable(GL_BLEND);
}
}
-
static void drawmeta_contents(Scene *scene, Sequence *seqm, float x1, float y1, float x2, float y2)
{
/* note: this used to use SEQ_BEGIN/SEQ_END, but it messes up the
@@ -329,9 +332,6 @@ static void drawmeta_contents(Scene *scene, Sequence *seqm, float x1, float y1,
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- if (seqm->flag & SEQ_MUTE)
- drawmeta_stipple(1);
-
for (seq = seqbase->first; seq; seq = seq->next) {
chan_min = min_ii(chan_min, seq->machine);
chan_max = max_ii(chan_max, seq->machine);
@@ -342,6 +342,10 @@ static void drawmeta_contents(Scene *scene, Sequence *seqm, float x1, float y1,
col[3] = 196; /* alpha, used for all meta children */
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
for (seq = seqbase->first; seq; seq = seq->next) {
const int startdisp = seq->startdisp + offset;
const int enddisp = seq->enddisp + offset;
@@ -352,12 +356,16 @@ static void drawmeta_contents(Scene *scene, Sequence *seqm, float x1, float y1,
float x2_chan = enddisp;
float y1_chan, y2_chan;
- if ((seqm->flag & SEQ_MUTE) == 0 && (seq->flag & SEQ_MUTE))
- drawmeta_stipple(1);
-
color3ubv_from_seq(scene, seq, col);
- glColor4ubv(col);
+ if ((seqm->flag & SEQ_MUTE) || (seq->flag & SEQ_MUTE)) {
+ col[3] = 64;
+ }
+ else {
+ col[3] = 196;
+ }
+
+ immUniformColor4ubv(col);
/* clamp within parent sequence strip bounds */
if (x1_chan < x1) x1_chan = x1;
@@ -366,20 +374,12 @@ static void drawmeta_contents(Scene *scene, Sequence *seqm, float x1, float y1,
y1_chan = y1 + y_chan + (draw_height * SEQ_STRIP_OFSBOTTOM);
y2_chan = y1 + y_chan + (draw_height * SEQ_STRIP_OFSTOP);
- glRectf(x1_chan, y1_chan, x2_chan, y2_chan);
-
- UI_GetColorPtrShade3ubv(col, col, -30);
- glColor4ubv(col);
- fdrawbox(x1_chan, y1_chan, x2_chan, y2_chan);
-
- if ((seqm->flag & SEQ_MUTE) == 0 && (seq->flag & SEQ_MUTE))
- drawmeta_stipple(0);
+ immRectf(pos, x1_chan, y1_chan, x2_chan, y2_chan);
}
}
- if (seqm->flag & SEQ_MUTE)
- drawmeta_stipple(0);
-
+ immUnbindProgram();
+
glDisable(GL_BLEND);
}
@@ -395,7 +395,7 @@ static float draw_seq_handle_size_get_clamped(Sequence *seq, const float pixelx)
}
/* draw a handle, for each end of a sequence strip */
-static void draw_seq_handle(View2D *v2d, Sequence *seq, const float handsize_clamped, const short direction)
+static void draw_seq_handle(View2D *v2d, Sequence *seq, const float handsize_clamped, const short direction, unsigned int pos)
{
float v1[2], v2[2], v3[2], rx1 = 0, rx2 = 0; //for triangles and rect
float x1, x2, y1, y2;
@@ -437,21 +437,31 @@ static void draw_seq_handle(View2D *v2d, Sequence *seq, const float handsize_cla
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- if (seq->flag & whichsel) glColor4ub(0, 0, 0, 80);
- else if (seq->flag & SELECT) glColor4ub(255, 255, 255, 30);
- else glColor4ub(0, 0, 0, 22);
-
- glRectf(rx1, y1, rx2, y2);
-
- if (seq->flag & whichsel) glColor4ub(255, 255, 255, 200);
- else glColor4ub(0, 0, 0, 50);
+ if (seq->flag & whichsel) {
+ immUniformColor4ub(0, 0, 0, 80);
+ }
+ else if (seq->flag & SELECT) {
+ immUniformColor4ub(255, 255, 255, 30);
+ }
+ else {
+ immUniformColor4ub(0, 0, 0, 22);
+ }
- glEnable(GL_POLYGON_SMOOTH);
- glBegin(GL_TRIANGLES);
- glVertex2fv(v1); glVertex2fv(v2); glVertex2fv(v3);
- glEnd();
+ immRectf(pos, rx1, y1, rx2, y2);
- glDisable(GL_POLYGON_SMOOTH);
+ if (seq->flag & whichsel) {
+ immUniformColor4ub(255, 255, 255, 200);
+ }
+ else {
+ immUniformColor4ub(0, 0, 0, 50);
+ }
+
+ immBegin(GWN_PRIM_TRIS, 3);
+ immVertex2fv(pos, v1);
+ immVertex2fv(pos, v2);
+ immVertex2fv(pos, v3);
+ immEnd();
+
glDisable(GL_BLEND);
}
@@ -590,67 +600,10 @@ static void draw_seq_text(View2D *v2d, SpaceSeq *sseq, Sequence *seq, float x1,
UI_view2d_text_cache_add_rectf(v2d, &rect, str, str_len, col);
}
-/* draws a shaded strip, made from gradient + flat color + gradient */
-void draw_shadedstrip(Sequence *seq, unsigned char col[3], float x1, float y1, float x2, float y2)
+static void draw_sequence_extensions(Scene *scene, ARegion *ar, Sequence *seq, unsigned int pos)
{
- float ymid1, ymid2;
-
- if (seq->flag & SEQ_MUTE) {
- GPU_basic_shader_bind(GPU_SHADER_STIPPLE | GPU_SHADER_USE_COLOR);
- GPU_basic_shader_stipple(GPU_SHADER_STIPPLE_HALFTONE);
- }
-
- ymid1 = (y2 - y1) * 0.25f + y1;
- ymid2 = (y2 - y1) * 0.65f + y1;
-
- glBegin(GL_QUADS);
-
- if (seq->flag & SEQ_INVALID_EFFECT) { col[0] = 255; col[1] = 0; col[2] = 255; }
- else if (seq->flag & SELECT) UI_GetColorPtrShade3ubv(col, col, -50);
- /* else UI_GetColorPtrShade3ubv(col, col, 0); */ /* DO NOTHING */
-
- glColor3ubv(col);
-
- glVertex2f(x1, y1);
- glVertex2f(x2, y1);
-
- if (seq->flag & SEQ_INVALID_EFFECT) { col[0] = 255; col[1] = 0; col[2] = 255; }
- else if (seq->flag & SELECT) UI_GetColorPtrBlendShade3ubv(col, col, col, 0.0, 5);
- else UI_GetColorPtrShade3ubv(col, col, -5);
-
- glColor3ubv((GLubyte *)col);
-
- glVertex2f(x2, ymid1);
- glVertex2f(x1, ymid1);
-
- glEnd();
-
- glRectf(x1, ymid1, x2, ymid2);
-
- glBegin(GL_QUADS);
-
- glVertex2f(x1, ymid2);
- glVertex2f(x2, ymid2);
-
- if (seq->flag & SELECT) UI_GetColorPtrShade3ubv(col, col, -15);
- else UI_GetColorPtrShade3ubv(col, col, 25);
-
- glColor3ubv((GLubyte *)col);
-
- glVertex2f(x2, y2);
- glVertex2f(x1, y2);
-
- glEnd();
-
- if (seq->flag & SEQ_MUTE) {
- GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
- }
-}
-
-void draw_sequence_extensions(Scene *scene, ARegion *ar, Sequence *seq)
-{
- float x1, x2, y1, y2, pixely, a;
- unsigned char col[3], blendcol[3];
+ float x1, x2, y1, y2, pixely;
+ unsigned char col[4], blendcol[3];
View2D *v2d = &ar->v2d;
x1 = seq->startdisp;
@@ -664,90 +617,82 @@ void draw_sequence_extensions(Scene *scene, ARegion *ar, Sequence *seq)
if (pixely <= 0) return; /* can happen when the view is split/resized */
blendcol[0] = blendcol[1] = blendcol[2] = 120;
-
- if (seq->startofs) {
+
+ if (seq->startofs || seq->endofs) {
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
color3ubv_from_seq(scene, seq, col);
-
+
if (seq->flag & SELECT) {
- UI_GetColorPtrBlendShade3ubv(col, blendcol, col, 0.3, -40);
- glColor4ub(col[0], col[1], col[2], 170);
+ UI_GetColorPtrShade3ubv(col, col, -50);
+ }
+
+ if (seq->flag & SEQ_MUTE) {
+ col[3] = 64;
}
else {
- UI_GetColorPtrBlendShade3ubv(col, blendcol, col, 0.6, 0);
- glColor4ub(col[0], col[1], col[2], 110);
+ if (seq->flag & SELECT) {
+ col[3] = 170;
+ }
+ else {
+ col[3] = 80;
+ }
}
-
- glRectf((float)(seq->start), y1 - SEQ_STRIP_OFSBOTTOM, x1, y1);
-
- if (seq->flag & SELECT) glColor4ub(col[0], col[1], col[2], 255);
- else glColor4ub(col[0], col[1], col[2], 160);
-
- fdrawbox((float)(seq->start), y1 - SEQ_STRIP_OFSBOTTOM, x1, y1); //outline
-
- glDisable(GL_BLEND);
+ }
+
+ if (seq->startofs) {
+ immUniformColor4ubv(col);
+ immRectf(pos, (float)(seq->start), y1 - SEQ_STRIP_OFSBOTTOM, x1, y1);
+
+ immUniformColor3ubvAlpha(col, col[3] + 50);
+
+ imm_draw_box_wire_2d(pos, (float)(seq->start), y1 - SEQ_STRIP_OFSBOTTOM, x1, y1); /* outline */
}
if (seq->endofs) {
+ immUniformColor4ubv(col);
+ immRectf(pos, x2, y2, (float)(seq->start + seq->len), y2 + SEQ_STRIP_OFSBOTTOM);
+
+ immUniformColor3ubvAlpha(col, col[3] + 50);
+
+ imm_draw_box_wire_2d(pos, x2, y2, (float)(seq->start + seq->len), y2 + SEQ_STRIP_OFSBOTTOM); /* outline */
+ }
+
+ if (seq->startofs || seq->endofs) {
+ glDisable(GL_BLEND);
+ }
+
+ if (seq->startstill || seq->endstill) {
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-
+
color3ubv_from_seq(scene, seq, col);
-
- if (seq->flag & SELECT) {
- UI_GetColorPtrBlendShade3ubv(col, blendcol, col, 0.3, -40);
- glColor4ub(col[0], col[1], col[2], 170);
+ UI_GetColorPtrBlendShade3ubv(col, blendcol, col, 0.5f, 60);
+
+ if (seq->flag & SEQ_MUTE) {
+ col[3] = 96;
}
else {
- UI_GetColorPtrBlendShade3ubv(col, blendcol, col, 0.6, 0);
- glColor4ub(col[0], col[1], col[2], 110);
+ if (seq->flag & SELECT) {
+ col[3] = 255;
+ }
+ else {
+ col[3] = 170;
+ }
}
-
- glRectf(x2, y2, (float)(seq->start + seq->len), y2 + SEQ_STRIP_OFSBOTTOM);
-
- if (seq->flag & SELECT) glColor4ub(col[0], col[1], col[2], 255);
- else glColor4ub(col[0], col[1], col[2], 160);
-
- fdrawbox(x2, y2, (float)(seq->start + seq->len), y2 + SEQ_STRIP_OFSBOTTOM); //outline
-
- glDisable(GL_BLEND);
+
+ immUniformColor4ubv(col);
}
+
if (seq->startstill) {
- color3ubv_from_seq(scene, seq, col);
- UI_GetColorPtrBlendShade3ubv(col, blendcol, col, 0.75, 40);
- glColor3ubv((GLubyte *)col);
-
- draw_shadedstrip(seq, col, x1, y1, (float)(seq->start), y2);
-
- /* feint pinstripes, helps see exactly which is extended and which isn't,
- * especially when the extension is very small */
- if (seq->flag & SELECT) UI_GetColorPtrBlendShade3ubv(col, col, col, 0.0, 24);
- else UI_GetColorPtrShade3ubv(col, col, -16);
-
- glColor3ubv((GLubyte *)col);
-
- for (a = y1; a < y2; a += pixely * 2.0f) {
- fdrawline(x1, a, (float)(seq->start), a);
- }
+ immRectf(pos, x1, y1, (float)(seq->start), y2);
}
if (seq->endstill) {
- color3ubv_from_seq(scene, seq, col);
- UI_GetColorPtrBlendShade3ubv(col, blendcol, col, 0.75, 40);
- glColor3ubv((GLubyte *)col);
-
- draw_shadedstrip(seq, col, (float)(seq->start + seq->len), y1, x2, y2);
-
- /* feint pinstripes, helps see exactly which is extended and which isn't,
- * especially when the extension is very small */
- if (seq->flag & SELECT) UI_GetColorPtrShade3ubv(col, col, 24);
- else UI_GetColorPtrShade3ubv(col, col, -16);
-
- glColor3ubv((GLubyte *)col);
-
- for (a = y1; a < y2; a += pixely * 2.0f) {
- fdrawline((float)(seq->start + seq->len), a, x2, a);
- }
+ immRectf(pos, (float)(seq->start + seq->len), y1, x2, y2);
+ }
+
+ if (seq->startstill || seq->endstill) {
+ glDisable(GL_BLEND);
}
}
@@ -761,7 +706,7 @@ static void draw_seq_strip(const bContext *C, SpaceSeq *sseq, Scene *scene, AReg
{
View2D *v2d = &ar->v2d;
float x1, x2, y1, y2;
- unsigned char col[3], background_col[3], is_single_image;
+ unsigned char col[4], background_col[4], is_single_image;
const float handsize_clamped = draw_seq_handle_size_get_clamped(seq, pixelx);
/* we need to know if this is a single image/color or not for drawing */
@@ -773,72 +718,105 @@ static void draw_seq_strip(const bContext *C, SpaceSeq *sseq, Scene *scene, AReg
x2 = (seq->endstill) ? (seq->start + seq->len) : seq->enddisp;
y2 = seq->machine + SEQ_STRIP_OFSTOP;
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
/* get the correct color per strip type*/
//color3ubv_from_seq(scene, seq, col);
color3ubv_from_seq(scene, seq, background_col);
-
+
+ if (seq->flag & SEQ_MUTE) {
+ background_col[3] = 128;
+
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ }
+ else {
+ background_col[3] = 255;
+ }
+
+ if (seq->flag & SELECT) {
+ UI_GetColorPtrShade3ubv(background_col, background_col, -50);
+ }
+
+ immUniformColor4ubv(background_col);
+
/* draw the main strip body */
if (is_single_image) { /* single image */
- draw_shadedstrip(seq, background_col,
- BKE_sequence_tx_get_final_left(seq, false), y1,
- BKE_sequence_tx_get_final_right(seq, false), y2);
+ immRectf(pos, BKE_sequence_tx_get_final_left(seq, false), y1,
+ BKE_sequence_tx_get_final_right(seq, false), y2);
}
else { /* normal operation */
- draw_shadedstrip(seq, background_col, x1, y1, x2, y2);
+ immRectf(pos, x1, y1, x2, y2);
+ }
+
+ if (seq->flag & SEQ_MUTE) {
+ glDisable(GL_BLEND);
}
if (!is_single_image) {
if ((sseq->draw_flag & SEQ_DRAW_OFFSET_EXT) || (seq == special_seq_update)) {
- draw_sequence_extensions(scene, ar, seq);
+ draw_sequence_extensions(scene, ar, seq, pos);
}
}
- draw_seq_handle(v2d, seq, handsize_clamped, SEQ_LEFTHANDLE);
- draw_seq_handle(v2d, seq, handsize_clamped, SEQ_RIGHTHANDLE);
-
- /* draw the strip outline */
+ draw_seq_handle(v2d, seq, handsize_clamped, SEQ_LEFTHANDLE, pos);
+ draw_seq_handle(v2d, seq, handsize_clamped, SEQ_RIGHTHANDLE, pos);
+
x1 = seq->startdisp;
x2 = seq->enddisp;
/* draw sound wave */
if (seq->type == SEQ_TYPE_SOUND_RAM) {
if (!(sseq->flag & SEQ_NO_WAVEFORMS)) {
- drawseqwave(C, sseq, scene, seq, x1, y1, x2, y2, BLI_rctf_size_x(&ar->v2d.cur) / ar->winx);
+ drawseqwave(v2d, C, sseq, scene, seq, x1, y1, x2, y2, BLI_rctf_size_x(&ar->v2d.cur) / ar->winx, pos);
}
}
+ immUnbindProgram();
+
/* draw lock */
if (seq->flag & SEQ_LOCK) {
- GPU_basic_shader_bind(GPU_SHADER_STIPPLE | GPU_SHADER_USE_COLOR);
glEnable(GL_BLEND);
- /* light stripes */
- glColor4ub(255, 255, 255, 32);
- GPU_basic_shader_stipple(GPU_SHADER_STIPPLE_DIAG_STRIPES);
- glRectf(x1, y1, x2, y2);
+ pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_DIAG_STRIPES);
+
+ immUniform4f("color1", 1.0f, 1.0f, 1.0f, 0.125f);
+ immUniform4f("color2", 0.0f, 0.0f, 0.0f, 0.125f);
+ immUniform1i("size1", 8);
+ immUniform1i("size2", 8);
+
+ immRectf(pos, x1, y1, x2, y2);
- /* dark stripes */
- glColor4ub(0, 0, 0, 32);
- GPU_basic_shader_stipple(GPU_SHADER_STIPPLE_DIAG_STRIPES_SWAP);
- glRectf(x1, y1, x2, y2);
+ immUnbindProgram();
- GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
glDisable(GL_BLEND);
}
if (!BKE_sequence_is_valid_check(seq)) {
- GPU_basic_shader_bind(GPU_SHADER_STIPPLE | GPU_SHADER_USE_COLOR);
+ glEnable(GL_BLEND);
+
+ pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_DIAG_STRIPES);
+
+ immUniform4f("color1", 1.0f, 0.0f, 0.0f, 1.0f);
+ immUniform4f("color2", 0.0f, 0.0f, 0.0f, 0.0f);
+ immUniform1i("size1", 8);
+ immUniform1i("size2", 8);
- /* panic! */
- glColor4ub(255, 0, 0, 255);
- GPU_basic_shader_stipple(GPU_SHADER_STIPPLE_DIAG_STRIPES);
- glRectf(x1, y1, x2, y2);
+ immRectf(pos, x1, y1, x2, y2);
- GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
+ immUnbindProgram();
+
+ glDisable(GL_BLEND);
}
color3ubv_from_seq(scene, seq, col);
+
+ /* draw the strip outline */
+ color3ubv_from_seq(scene, seq, col);
if ((G.moving & G_TRANSFORM_SEQ) && (seq->flag & SELECT)) {
if (seq->flag & SEQ_OVERLAP) {
col[0] = 255; col[1] = col[2] = 40;
@@ -855,19 +833,27 @@ static void draw_seq_strip(const bContext *C, SpaceSeq *sseq, Scene *scene, AReg
drawmeta_contents(scene, seq, x1, y1, x2, y2);
}
+ pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ /* TODO: add back stippled line for muted strips? */
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
if (seq->flag & SEQ_MUTE) {
- glEnable(GL_LINE_STIPPLE);
- glLineStipple(1, 0x8888);
+ col[3] = 96;
+
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
+ immUniformColor4ubv(col);
}
-
- glColor3ubv((GLubyte *)col);
-
- UI_draw_roundbox_shade_x(GL_LINE_LOOP, x1, y1, x2, y2, 0.0, 0.1, 0.0);
-
- if (seq->flag & SEQ_MUTE) {
- glDisable(GL_LINE_STIPPLE);
+ else {
+ immUniformColor3ubv(col);
}
-
+
+ imm_draw_box_wire_2d(pos, x1, y1, x2, y2); /* outline */
+
+ immUnbindProgram();
+
/* calculate if seq is long enough to print a name */
x1 = seq->startdisp + handsize_clamped;
x2 = seq->enddisp - handsize_clamped;
@@ -1057,33 +1043,39 @@ static void sequencer_draw_borders(const SpaceSeq *sseq, const View2D *v2d, cons
glLineWidth(1.0f);
/* border */
- setlinestyle(3);
+ const uint shdr_pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
- UI_ThemeColorBlendShade(TH_WIRE, TH_BACK, 1.0, 0);
+ immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR);
- glBegin(GL_LINE_LOOP);
- glVertex2f(x1 - 0.5f, y1 - 0.5f);
- glVertex2f(x1 - 0.5f, y2 + 0.5f);
- glVertex2f(x2 + 0.5f, y2 + 0.5f);
- glVertex2f(x2 + 0.5f, y1 - 0.5f);
- glEnd();
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2] / UI_DPI_FAC, viewport_size[3] / UI_DPI_FAC);
+
+ immUniformThemeColor(TH_BACK);
+ immUniform1i("num_colors", 0); /* Simple dashes. */
+ immUniform1f("dash_width", 6.0f);
+ immUniform1f("dash_factor", 0.5f);
+
+ imm_draw_box_wire_2d(shdr_pos, x1 - 0.5f, y1 - 0.5f, x2 + 0.5f, y2 + 0.5f);
/* safety border */
if (sseq->flag & SEQ_SHOW_SAFE_MARGINS) {
+ immUniformThemeColorBlend(TH_VIEW_OVERLAY, TH_BACK, 0.25f);
+
UI_draw_safe_areas(
- x1, x2, y1, y2,
+ shdr_pos, x1, x2, y1, y2,
scene->safe_areas.title,
scene->safe_areas.action);
if (sseq->flag & SEQ_SHOW_SAFE_CENTER) {
UI_draw_safe_areas(
- x1, x2, y1, y2,
+ shdr_pos, x1, x2, y1, y2,
scene->safe_areas.title_center,
scene->safe_areas.action_center);
}
}
- setlinestyle(0);
+ immUnbindProgram();
}
/* draws checkerboard background for transparent content */
@@ -1098,11 +1090,7 @@ static void sequencer_draw_background(
/* only draw alpha for main buffer */
if (sseq->mainb == SEQ_DRAW_IMG_IMBUF) {
if ((sseq->flag & SEQ_USE_ALPHA) && !draw_overlay) {
- glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-
- fdrawcheckerboard(v2d->tot.xmin, v2d->tot.ymin, v2d->tot.xmax, v2d->tot.ymax);
- glColor4f(1.0, 1.0, 1.0, 1.0);
+ imm_draw_box_checker_2d(v2d->tot.xmin, v2d->tot.ymin, v2d->tot.xmax, v2d->tot.ymax);
}
}
}
@@ -1144,9 +1132,6 @@ void draw_image_seq(const bContext *C, Scene *scene, ARegion *ar, SpaceSeq *sseq
glClear(GL_COLOR_BUFFER_BIT);
}
- /* without this colors can flicker from previous opengl state */
- glColor4ub(255, 255, 255, 255);
-
/* only initialize the preview if a render is in progress */
if (G.is_rendering)
return;
@@ -1161,15 +1146,16 @@ void draw_image_seq(const bContext *C, Scene *scene, ARegion *ar, SpaceSeq *sseq
if ((ibuf == NULL) ||
(ibuf->rect == NULL && ibuf->rect_float == NULL))
{
- /* gpencil can also be drawn without a valid imbuf */
- if ((draw_gpencil && is_imbuf) && !draw_overlay) {
- sequencer_display_size(scene, sseq, viewrect);
+ sequencer_display_size(scene, sseq, viewrect);
- sequencer_draw_background(sseq, v2d, viewrect, false);
- sequencer_draw_borders(sseq, v2d, scene);
+ sequencer_draw_background(sseq, v2d, viewrect, false);
+ sequencer_draw_borders(sseq, v2d, scene);
+ /* gpencil can also be drawn without a valid imbuf */
+ if ((draw_gpencil && is_imbuf) && !draw_overlay) {
sequencer_draw_gpencil(C);
}
+
return;
}
@@ -1238,6 +1224,18 @@ void draw_image_seq(const bContext *C, Scene *scene, ARegion *ar, SpaceSeq *sseq
sequencer_draw_background(sseq, v2d, viewrect, draw_overlay);
}
+ if (sseq->mainb == SEQ_DRAW_IMG_IMBUF && sseq->flag & SEQ_USE_ALPHA) {
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ }
+
+ /* Format needs to be created prior to any immBindProgram call.
+ * Do it here because OCIO binds it's own shader.
+ */
+ Gwn_VertFormat *imm_format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(imm_format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int texCoord = GWN_vertformat_attr_add(imm_format, "texCoord", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
if (scope) {
IMB_freeImBuf(ibuf);
ibuf = scope;
@@ -1310,9 +1308,12 @@ void draw_image_seq(const bContext *C, Scene *scene, ARegion *ar, SpaceSeq *sseq
}
}
- glColor4f(1.0, 1.0, 1.0, 1.0);
+ if (draw_backdrop) {
+ /* XXX: need to load identity projection too? */
+ gpuPushMatrix();
+ gpuLoadIdentity();
+ }
- GPU_basic_shader_bind(GPU_SHADER_TEXTURE_2D | GPU_SHADER_USE_COLOR);
glGenTextures(1, (GLuint *)&texid);
glBindTexture(GL_TEXTURE_2D, texid);
@@ -1325,15 +1326,13 @@ void draw_image_seq(const bContext *C, Scene *scene, ARegion *ar, SpaceSeq *sseq
else
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, ibuf->x, ibuf->y, 0, format, type, display_buffer);
- if (draw_backdrop) {
- glMatrixMode(GL_PROJECTION);
- glPushMatrix();
- glLoadIdentity();
- glMatrixMode(GL_MODELVIEW);
- glPushMatrix();
- glLoadIdentity();
+ if (!glsl_used) {
+ immBindBuiltinProgram(GPU_SHADER_2D_IMAGE_COLOR);
+ immUniformColor3f(1.0f, 1.0f, 1.0f);
+ immUniform1i("image", GL_TEXTURE0);
}
- glBegin(GL_QUADS);
+
+ immBegin(GWN_PRIM_TRI_FAN, 4);
if (draw_overlay) {
if (sseq->overlay_type == SEQ_DRAW_OVERLAY_RECT) {
@@ -1343,16 +1342,30 @@ void draw_image_seq(const bContext *C, Scene *scene, ARegion *ar, SpaceSeq *sseq
tot_clip.xmax = v2d->tot.xmin + (fabsf(BLI_rctf_size_x(&v2d->tot)) * scene->ed->over_border.xmax);
tot_clip.ymax = v2d->tot.ymin + (fabsf(BLI_rctf_size_y(&v2d->tot)) * scene->ed->over_border.ymax);
- glTexCoord2f(scene->ed->over_border.xmin, scene->ed->over_border.ymin); glVertex2f(tot_clip.xmin, tot_clip.ymin);
- glTexCoord2f(scene->ed->over_border.xmin, scene->ed->over_border.ymax); glVertex2f(tot_clip.xmin, tot_clip.ymax);
- glTexCoord2f(scene->ed->over_border.xmax, scene->ed->over_border.ymax); glVertex2f(tot_clip.xmax, tot_clip.ymax);
- glTexCoord2f(scene->ed->over_border.xmax, scene->ed->over_border.ymin); glVertex2f(tot_clip.xmax, tot_clip.ymin);
+ immAttrib2f(texCoord, scene->ed->over_border.xmin, scene->ed->over_border.ymin);
+ immVertex2f(pos, tot_clip.xmin, tot_clip.ymin);
+
+ immAttrib2f(texCoord, scene->ed->over_border.xmin, scene->ed->over_border.ymax);
+ immVertex2f(pos, tot_clip.xmin, tot_clip.ymax);
+
+ immAttrib2f(texCoord, scene->ed->over_border.xmax, scene->ed->over_border.ymax);
+ immVertex2f(pos, tot_clip.xmax, tot_clip.ymax);
+
+ immAttrib2f(texCoord, scene->ed->over_border.xmax, scene->ed->over_border.ymin);
+ immVertex2f(pos, tot_clip.xmax, tot_clip.ymin);
}
else if (sseq->overlay_type == SEQ_DRAW_OVERLAY_REFERENCE) {
- glTexCoord2f(0.0f, 0.0f); glVertex2f(v2d->tot.xmin, v2d->tot.ymin);
- glTexCoord2f(0.0f, 1.0f); glVertex2f(v2d->tot.xmin, v2d->tot.ymax);
- glTexCoord2f(1.0f, 1.0f); glVertex2f(v2d->tot.xmax, v2d->tot.ymax);
- glTexCoord2f(1.0f, 0.0f); glVertex2f(v2d->tot.xmax, v2d->tot.ymin);
+ immAttrib2f(texCoord, 0.0f, 0.0f);
+ immVertex2f(pos, v2d->tot.xmin, v2d->tot.ymin);
+
+ immAttrib2f(texCoord, 0.0f, 1.0f);
+ immVertex2f(pos, v2d->tot.xmin, v2d->tot.ymax);
+
+ immAttrib2f(texCoord, 1.0f, 1.0f);
+ immVertex2f(pos, v2d->tot.xmax, v2d->tot.ymax);
+
+ immAttrib2f(texCoord, 1.0f, 0.0f);
+ immVertex2f(pos, v2d->tot.xmax, v2d->tot.ymin);
}
}
else if (draw_backdrop) {
@@ -1371,25 +1384,46 @@ void draw_image_seq(const bContext *C, Scene *scene, ARegion *ar, SpaceSeq *sseq
imagey = aspect / image_aspect;
}
- glTexCoord2f(0.0f, 0.0f); glVertex2f(-imagex, -imagey);
- glTexCoord2f(0.0f, 1.0f); glVertex2f(-imagex, imagey);
- glTexCoord2f(1.0f, 1.0f); glVertex2f(imagex, imagey);
- glTexCoord2f(1.0f, 0.0f); glVertex2f(imagex, -imagey);
+ immAttrib2f(texCoord, 0.0f, 0.0f);
+ immVertex2f(pos, -imagex, -imagey);
+
+ immAttrib2f(texCoord, 0.0f, 1.0f);
+ immVertex2f(pos, -imagex, imagey);
+
+ immAttrib2f(texCoord, 1.0f, 1.0f);
+ immVertex2f(pos, imagex, imagey);
+
+ immAttrib2f(texCoord, 1.0f, 0.0f);
+ immVertex2f(pos, imagex, -imagey);
}
else {
draw_metadata = ((sseq->flag & SEQ_SHOW_METADATA) != 0);
- glTexCoord2f(0.0f, 0.0f); glVertex2f(v2d->tot.xmin, v2d->tot.ymin);
- glTexCoord2f(0.0f, 1.0f); glVertex2f(v2d->tot.xmin, v2d->tot.ymax);
- glTexCoord2f(1.0f, 1.0f); glVertex2f(v2d->tot.xmax, v2d->tot.ymax);
- glTexCoord2f(1.0f, 0.0f); glVertex2f(v2d->tot.xmax, v2d->tot.ymin);
+ immAttrib2f(texCoord, 0.0f, 0.0f);
+ immVertex2f(pos, v2d->tot.xmin, v2d->tot.ymin);
+
+ immAttrib2f(texCoord, 0.0f, 1.0f);
+ immVertex2f(pos, v2d->tot.xmin, v2d->tot.ymax);
+
+ immAttrib2f(texCoord, 1.0f, 1.0f);
+ immVertex2f(pos, v2d->tot.xmax, v2d->tot.ymax);
+
+ immAttrib2f(texCoord, 1.0f, 0.0f);
+ immVertex2f(pos, v2d->tot.xmax, v2d->tot.ymin);
}
- glEnd();
+
+ immEnd();
glBindTexture(GL_TEXTURE_2D, 0);
- GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
- if (sseq->mainb == SEQ_DRAW_IMG_IMBUF && sseq->flag & SEQ_USE_ALPHA)
+
+ if (!glsl_used) {
+ immUnbindProgram();
+ }
+
+ if (sseq->mainb == SEQ_DRAW_IMG_IMBUF && sseq->flag & SEQ_USE_ALPHA) {
glDisable(GL_BLEND);
+ }
+
glDeleteTextures(1, &texid);
if (glsl_used)
@@ -1406,10 +1440,7 @@ void draw_image_seq(const bContext *C, Scene *scene, ARegion *ar, SpaceSeq *sseq
}
if (draw_backdrop) {
- glPopMatrix();
- glMatrixMode(GL_PROJECTION);
- glPopMatrix();
- glMatrixMode(GL_MODELVIEW);
+ gpuPopMatrix();
return;
}
@@ -1483,42 +1514,42 @@ void drawprefetchseqspace(Scene *scene, ARegion *UNUSED(ar), SpaceSeq *sseq)
static void draw_seq_backdrop(View2D *v2d)
{
int i;
-
+
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
/* darker gray overlay over the view backdrop */
- UI_ThemeColorShade(TH_BACK, -20);
- glRectf(v2d->cur.xmin, -1.0, v2d->cur.xmax, 1.0);
+ immUniformThemeColorShade(TH_BACK, -20);
+ immRectf(pos, v2d->cur.xmin, -1.0, v2d->cur.xmax, 1.0);
/* Alternating horizontal stripes */
i = max_ii(1, ((int)v2d->cur.ymin) - 1);
- glBegin(GL_QUADS);
while (i < v2d->cur.ymax) {
- if (((int)i) & 1)
- UI_ThemeColorShade(TH_BACK, -15);
- else
- UI_ThemeColorShade(TH_BACK, -25);
-
- glVertex2f(v2d->cur.xmax, i);
- glVertex2f(v2d->cur.xmin, i);
- glVertex2f(v2d->cur.xmin, i + 1);
- glVertex2f(v2d->cur.xmax, i + 1);
+ if (i & 1) {
+ immUniformThemeColorShade(TH_BACK, -15);
+ }
+ else {
+ immUniformThemeColorShade(TH_BACK, -25);
+ }
+
+ immRectf(pos, v2d->cur.xmin, i, v2d->cur.xmax, i + 1);
- i += 1.0;
+ i++;
}
- glEnd();
-
+
/* Darker lines separating the horizontal bands */
i = max_ii(1, ((int)v2d->cur.ymin) - 1);
- UI_ThemeColor(TH_GRID);
-
- glBegin(GL_LINES);
- while (i < v2d->cur.ymax) {
- glVertex2f(v2d->cur.xmax, i);
- glVertex2f(v2d->cur.xmin, i);
-
- i += 1.0;
+ int line_ct = (int)v2d->cur.ymax - i + 1;
+ immUniformThemeColor(TH_GRID);
+ immBegin(GWN_PRIM_LINES, line_ct * 2);
+ while (line_ct--) {
+ immVertex2f(pos, v2d->cur.xmax, i);
+ immVertex2f(pos, v2d->cur.xmin, i);
}
- glEnd();
+ immEnd();
+
+ immUnbindProgram();
}
/* draw the contents of the sequencer strips view */
@@ -1534,7 +1565,7 @@ static void draw_seq_strips(const bContext *C, Editing *ed, ARegion *ar)
/* loop through twice, first unselected, then selected */
for (j = 0; j < 2; j++) {
Sequence *seq;
- int outline_tint = (j) ? -60 : -150; /* highlighting around strip edges indicating selection */
+ int outline_tint = (j) ? 40 : -40; /* highlighting around strip edges indicating selection */
/* loop through strips, checking for those that are visible */
for (seq = ed->seqbasep->first; seq; seq = seq->next) {
@@ -1562,8 +1593,15 @@ static void draw_seq_strips(const bContext *C, Editing *ed, ARegion *ar)
if (special_seq_update) {
const Sequence *seq = special_seq_update;
glEnable(GL_BLEND);
- glColor4ub(255, 255, 255, 48);
- glRectf(seq->startdisp, seq->machine + SEQ_STRIP_OFSBOTTOM, seq->enddisp, seq->machine + SEQ_STRIP_OFSTOP);
+
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ immUniformColor4ub(255, 255, 255, 48);
+ immRectf(pos, seq->startdisp, seq->machine + SEQ_STRIP_OFSBOTTOM, seq->enddisp, seq->machine + SEQ_STRIP_OFSTOP);
+
+ immUnbindProgram();
+
glDisable(GL_BLEND);
}
}
@@ -1575,36 +1613,56 @@ static void seq_draw_sfra_efra(Scene *scene, View2D *v2d)
const int frame_end = PEFRA + 1;
glEnable(GL_BLEND);
-
+
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
/* draw darkened area outside of active timeline
* frame range used is preview range or scene range */
- UI_ThemeColorShadeAlpha(TH_BACK, -25, -100);
+ immUniformThemeColorShadeAlpha(TH_BACK, -25, -100);
if (frame_sta < frame_end) {
- glRectf(v2d->cur.xmin, v2d->cur.ymin, (float)frame_sta, v2d->cur.ymax);
- glRectf((float)frame_end, v2d->cur.ymin, v2d->cur.xmax, v2d->cur.ymax);
+ immRectf(pos, v2d->cur.xmin, v2d->cur.ymin, (float)frame_sta, v2d->cur.ymax);
+ immRectf(pos, (float)frame_end, v2d->cur.ymin, v2d->cur.xmax, v2d->cur.ymax);
}
else {
- glRectf(v2d->cur.xmin, v2d->cur.ymin, v2d->cur.xmax, v2d->cur.ymax);
+ immRectf(pos, v2d->cur.xmin, v2d->cur.ymin, v2d->cur.xmax, v2d->cur.ymax);
}
- UI_ThemeColorShade(TH_BACK, -60);
+ immUniformThemeColorShade(TH_BACK, -60);
+
/* thin lines where the actual frames are */
- fdrawline(frame_sta, v2d->cur.ymin, frame_sta, v2d->cur.ymax);
- fdrawline(frame_end, v2d->cur.ymin, frame_end, v2d->cur.ymax);
+ immBegin(GWN_PRIM_LINES, 4);
+
+ immVertex2f(pos, frame_sta, v2d->cur.ymin);
+ immVertex2f(pos, frame_sta, v2d->cur.ymax);
+
+ immVertex2f(pos, frame_end, v2d->cur.ymin);
+ immVertex2f(pos, frame_end, v2d->cur.ymax);
+
+ immEnd();
if (ed && !BLI_listbase_is_empty(&ed->metastack)) {
MetaStack *ms = ed->metastack.last;
- glColor4ub(255, 255, 255, 8);
- glRectf(ms->disp_range[0], v2d->cur.ymin, ms->disp_range[1], v2d->cur.ymax);
+ immUniformColor4ub(255, 255, 255, 8);
+ immRectf(pos, ms->disp_range[0], v2d->cur.ymin, ms->disp_range[1], v2d->cur.ymax);
+
+ immUniformThemeColorShade(TH_BACK, -40);
- UI_ThemeColorShade(TH_BACK, -40);
+ immBegin(GWN_PRIM_LINES, 4);
- fdrawline(ms->disp_range[0], v2d->cur.ymin, ms->disp_range[0], v2d->cur.ymax);
- fdrawline(ms->disp_range[1], v2d->cur.ymin, ms->disp_range[1], v2d->cur.ymax);
+ immVertex2f(pos, ms->disp_range[0], v2d->cur.ymin);
+ immVertex2f(pos, ms->disp_range[0], v2d->cur.ymax);
+
+ immVertex2f(pos, ms->disp_range[1], v2d->cur.ymin);
+ immVertex2f(pos, ms->disp_range[1], v2d->cur.ymax);
+
+ immEnd();
}
+ immUnbindProgram();
+
glDisable(GL_BLEND);
}
@@ -1678,16 +1736,20 @@ void draw_timeline_seq(const bContext *C, ARegion *ar)
/* overlap playhead */
if (scene->ed && scene->ed->over_flag & SEQ_EDIT_OVERLAY_SHOW) {
int cfra_over = (scene->ed->over_flag & SEQ_EDIT_OVERLAY_ABS) ? scene->ed->over_cfra : scene->r.cfra + scene->ed->over_ofs;
- glColor3f(0.2, 0.2, 0.2);
- // glRectf(cfra_over, v2d->cur.ymin, scene->ed->over_ofs + scene->r.cfra + 1, v2d->cur.ymax);
- glBegin(GL_LINES);
- glVertex2f(cfra_over, v2d->cur.ymin);
- glVertex2f(cfra_over, v2d->cur.ymax);
- glEnd();
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ immUniformColor3f(0.2f, 0.2f, 0.2f);
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2f(pos, cfra_over, v2d->cur.ymin);
+ immVertex2f(pos, cfra_over, v2d->cur.ymax);
+ immEnd();
+
+ immUnbindProgram();
}
-
+
/* callback */
ED_region_draw_cb_draw(C, ar, REGION_DRAW_POST_VIEW);
diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c
index 29a7e11d859..e1163fd3207 100644
--- a/source/blender/editors/space_sequencer/sequencer_edit.c
+++ b/source/blender/editors/space_sequencer/sequencer_edit.c
@@ -1265,7 +1265,6 @@ typedef struct SlipData {
int num_seq;
bool slow;
int slow_offset; /* offset at the point where offset was turned on */
- void *draw_handle;
NumInput num_input;
} SlipData;
@@ -1300,21 +1299,6 @@ static void transseq_restore(TransSeq *ts, Sequence *seq)
seq->len = ts->len;
}
-static void draw_slip_extensions(const bContext *C, ARegion *ar, void *data)
-{
- Scene *scene = CTX_data_scene(C);
- SlipData *td = data;
- int i;
-
- for (i = 0; i < td->num_seq; i++) {
- Sequence *seq = td->seq_array[i];
-
- if ((seq->type != SEQ_TYPE_META) && td->trim[i]) {
- draw_sequence_extensions(scene, ar, seq);
- }
- }
-}
-
static int slip_add_sequences_rec(ListBase *seqbasep, Sequence **seq_array, bool *trim, int offset, bool do_trim)
{
Sequence *seq;
@@ -1363,7 +1347,6 @@ static int sequencer_slip_invoke(bContext *C, wmOperator *op, const wmEvent *eve
SlipData *data;
Scene *scene = CTX_data_scene(C);
Editing *ed = BKE_sequencer_editing_get(scene, false);
- ARegion *ar = CTX_wm_region(C);
float mouseloc[2];
int num_seq, i;
View2D *v2d = UI_view2d_fromcontext(C);
@@ -1393,8 +1376,6 @@ static int sequencer_slip_invoke(bContext *C, wmOperator *op, const wmEvent *eve
transseq_backup(data->ts + i, data->seq_array[i]);
}
- data->draw_handle = ED_region_draw_cb_activate(ar->type, draw_slip_extensions, data, REGION_DRAW_POST_VIEW);
-
UI_view2d_region_to_view(v2d, event->mval[0], event->mval[1], &mouseloc[0], &mouseloc[1]);
copy_v2_v2_int(data->init_mouse, event->mval);
@@ -1536,7 +1517,6 @@ static int sequencer_slip_modal(bContext *C, wmOperator *op, const wmEvent *even
Scene *scene = CTX_data_scene(C);
SlipData *data = (SlipData *)op->customdata;
ScrArea *sa = CTX_wm_area(C);
- ARegion *ar = CTX_wm_region(C);
const bool has_numInput = hasNumInput(&data->num_input);
bool handled = true;
@@ -1594,7 +1574,6 @@ static int sequencer_slip_modal(bContext *C, wmOperator *op, const wmEvent *even
case RETKEY:
case SPACEKEY:
{
- ED_region_draw_cb_exit(ar->type, data->draw_handle);
MEM_freeN(data->seq_array);
MEM_freeN(data->trim);
MEM_freeN(data->ts);
@@ -1623,8 +1602,6 @@ static int sequencer_slip_modal(bContext *C, wmOperator *op, const wmEvent *even
BKE_sequence_calc(scene, seq);
}
- ED_region_draw_cb_exit(ar->type, data->draw_handle);
-
MEM_freeN(data->seq_array);
MEM_freeN(data->ts);
MEM_freeN(data->trim);
diff --git a/source/blender/editors/space_sequencer/sequencer_intern.h b/source/blender/editors/space_sequencer/sequencer_intern.h
index 730cc117287..7ce2f73cbef 100644
--- a/source/blender/editors/space_sequencer/sequencer_intern.h
+++ b/source/blender/editors/space_sequencer/sequencer_intern.h
@@ -56,8 +56,6 @@ struct ARegion *sequencer_has_buttons_region(struct ScrArea *sa);
void draw_timeline_seq(const struct bContext *C, struct ARegion *ar);
void draw_image_seq(const struct bContext *C, struct Scene *scene, struct ARegion *ar, struct SpaceSeq *sseq, int cfra, int offset, bool draw_overlay, bool draw_backdrop);
void color3ubv_from_seq(struct Scene *curscene, struct Sequence *seq, unsigned char col[3]);
-void draw_shadedstrip(struct Sequence *seq, unsigned char col[3], float x1, float y1, float x2, float y2);
-void draw_sequence_extensions(struct Scene *scene, struct ARegion *ar, struct Sequence *seq);
void sequencer_special_update_set(Sequence *seq);
diff --git a/source/blender/editors/space_sequencer/space_sequencer.c b/source/blender/editors/space_sequencer/space_sequencer.c
index 6b50d3fecdf..23387f291e6 100644
--- a/source/blender/editors/space_sequencer/space_sequencer.c
+++ b/source/blender/editors/space_sequencer/space_sequencer.c
@@ -344,7 +344,9 @@ static SpaceLink *sequencer_duplicate(SpaceLink *sl)
return (SpaceLink *)sseqn;
}
-static void sequencer_listener(bScreen *UNUSED(sc), ScrArea *sa, wmNotifier *wmn)
+static void sequencer_listener(
+ bScreen *UNUSED(sc), ScrArea *sa, wmNotifier *wmn, Scene *UNUSED(scene),
+ WorkSpace *UNUSED(workspace))
{
/* context changes */
switch (wmn->category) {
@@ -498,7 +500,9 @@ static void sequencer_main_region_draw(const bContext *C, ARegion *ar)
draw_timeline_seq(C, ar);
}
-static void sequencer_main_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+static void sequencer_main_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar,
+ wmNotifier *wmn, const Scene *UNUSED(scene))
{
/* context changes */
switch (wmn->category) {
@@ -604,7 +608,9 @@ static void sequencer_preview_region_draw(const bContext *C, ARegion *ar)
}
}
-static void sequencer_preview_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+static void sequencer_preview_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar,
+ wmNotifier *wmn, const Scene *UNUSED(scene))
{
/* context changes */
switch (wmn->category) {
@@ -670,7 +676,9 @@ static void sequencer_buttons_region_draw(const bContext *C, ARegion *ar)
ED_region_panels(C, ar, NULL, -1, true);
}
-static void sequencer_buttons_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+static void sequencer_buttons_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar,
+ wmNotifier *wmn, const Scene *UNUSED(scene))
{
/* context changes */
switch (wmn->category) {
diff --git a/source/blender/editors/space_text/space_text.c b/source/blender/editors/space_text/space_text.c
index fcb46ced750..539fe1c53bd 100644
--- a/source/blender/editors/space_text/space_text.c
+++ b/source/blender/editors/space_text/space_text.c
@@ -125,7 +125,8 @@ static SpaceLink *text_duplicate(SpaceLink *sl)
return (SpaceLink *)stextn;
}
-static void text_listener(bScreen *UNUSED(sc), ScrArea *sa, wmNotifier *wmn)
+static void text_listener(bScreen *UNUSED(sc), ScrArea *sa, wmNotifier *wmn, Scene *UNUSED(scene),
+ WorkSpace *UNUSED(workspace))
{
SpaceText *st = sa->spacedata.first;
diff --git a/source/blender/editors/space_text/text_draw.c b/source/blender/editors/space_text/text_draw.c
index 4eb66811c7d..62fde49cade 100644
--- a/source/blender/editors/space_text/text_draw.c
+++ b/source/blender/editors/space_text/text_draw.c
@@ -49,6 +49,8 @@
#include "BIF_gl.h"
#include "BIF_glutil.h"
+#include "GPU_immediate.h"
+
#include "UI_interface.h"
#include "UI_resources.h"
#include "UI_view2d.h"
@@ -123,38 +125,38 @@ static void txt_format_text(SpaceText *st)
#endif
/* Sets the current drawing color based on the format character specified */
-static void format_draw_color(char formatchar)
+static void format_draw_color(const TextDrawContext *tdc, char formatchar)
{
switch (formatchar) {
case FMT_TYPE_WHITESPACE:
break;
case FMT_TYPE_SYMBOL:
- UI_ThemeColor(TH_SYNTAX_S);
+ UI_FontThemeColor(tdc->font_id, TH_SYNTAX_S);
break;
case FMT_TYPE_COMMENT:
- UI_ThemeColor(TH_SYNTAX_C);
+ UI_FontThemeColor(tdc->font_id, TH_SYNTAX_C);
break;
case FMT_TYPE_NUMERAL:
- UI_ThemeColor(TH_SYNTAX_N);
+ UI_FontThemeColor(tdc->font_id, TH_SYNTAX_N);
break;
case FMT_TYPE_STRING:
- UI_ThemeColor(TH_SYNTAX_L);
+ UI_FontThemeColor(tdc->font_id, TH_SYNTAX_L);
break;
case FMT_TYPE_DIRECTIVE:
- UI_ThemeColor(TH_SYNTAX_D);
+ UI_FontThemeColor(tdc->font_id, TH_SYNTAX_D);
break;
case FMT_TYPE_SPECIAL:
- UI_ThemeColor(TH_SYNTAX_V);
+ UI_FontThemeColor(tdc->font_id, TH_SYNTAX_V);
break;
case FMT_TYPE_RESERVED:
- UI_ThemeColor(TH_SYNTAX_R);
+ UI_FontThemeColor(tdc->font_id, TH_SYNTAX_R);
break;
case FMT_TYPE_KEYWORD:
- UI_ThemeColor(TH_SYNTAX_B);
+ UI_FontThemeColor(tdc->font_id, TH_SYNTAX_B);
break;
case FMT_TYPE_DEFAULT:
default:
- UI_ThemeColor(TH_TEXT);
+ UI_FontThemeColor(tdc->font_id, TH_TEXT);
break;
}
}
@@ -429,7 +431,7 @@ static int text_draw_wrapped(
/* Draw the visible portion of text on the overshot line */
for (a = fstart, ma = mstart; ma < mend; a++, ma += BLI_str_utf8_size_safe(str + ma)) {
if (use_syntax) {
- if (fmt_prev != format[a]) format_draw_color(fmt_prev = format[a]);
+ if (fmt_prev != format[a]) format_draw_color(tdc, fmt_prev = format[a]);
}
x += text_font_draw_character_utf8(tdc, x, y, str + ma);
fpos++;
@@ -452,7 +454,7 @@ static int text_draw_wrapped(
/* Draw the remaining text */
for (a = fstart, ma = mstart; str[ma] && y > clip_min_y; a++, ma += BLI_str_utf8_size_safe(str + ma)) {
if (use_syntax) {
- if (fmt_prev != format[a]) format_draw_color(fmt_prev = format[a]);
+ if (fmt_prev != format[a]) format_draw_color(tdc, fmt_prev = format[a]);
}
x += text_font_draw_character_utf8(tdc, x, y, str + ma);
@@ -505,7 +507,7 @@ static void text_draw(
char fmt_prev = 0xff;
for (a = 0; a < amount; a++) {
- if (format[a] != fmt_prev) format_draw_color(fmt_prev = format[a]);
+ if (format[a] != fmt_prev) format_draw_color(tdc, fmt_prev = format[a]);
x += text_font_draw_character_utf8(tdc, x, y, in + str_shift);
str_shift += BLI_str_utf8_size_safe(in + str_shift);
}
@@ -906,22 +908,23 @@ static void draw_textscroll(const SpaceText *st, rcti *scroll, rcti *back)
{
bTheme *btheme = UI_GetTheme();
uiWidgetColors wcol = btheme->tui.wcol_scroll;
- unsigned char col[4];
+ float col[4];
float rad;
-
- UI_ThemeColor(TH_BACK);
- glRecti(back->xmin, back->ymin, back->xmax, back->ymax);
+
+ /* background so highlights don't go behind the scrollbar */
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformThemeColor(TH_BACK);
+ immRecti(pos, back->xmin, back->ymin, back->xmax, back->ymax);
+ immUnbindProgram();
UI_draw_widget_scroll(&wcol, scroll, &st->txtbar, (st->flags & ST_SCROLL_SELECT) ? UI_SCROLL_PRESSED : 0);
UI_draw_roundbox_corner_set(UI_CNR_ALL);
rad = 0.4f * min_ii(BLI_rcti_size_x(&st->txtscroll), BLI_rcti_size_y(&st->txtscroll));
- UI_GetThemeColor3ubv(TH_HILITE, col);
- col[3] = 48;
- glColor4ubv(col);
- glEnable(GL_BLEND);
- UI_draw_roundbox(st->txtscroll.xmin + 1, st->txtscroll.ymin, st->txtscroll.xmax - 1, st->txtscroll.ymax, rad);
- glDisable(GL_BLEND);
+ UI_GetThemeColor3fv(TH_HILITE, col);
+ col[3] = 0.18f;
+ UI_draw_roundbox_aa(true, st->txtscroll.xmin + 1, st->txtscroll.ymin, st->txtscroll.xmax - 1, st->txtscroll.ymax, rad, col);
}
/*********************** draw documentation *******************************/
@@ -963,26 +966,32 @@ static void draw_documentation(const SpaceText *st, ARegion *ar)
boxh = (DOC_HEIGHT + 1) * (st->lheight_dpi + TXT_LINE_SPACING);
/* Draw panel */
- UI_ThemeColor(TH_BACK);
- glRecti(x, y, x + boxw, y - boxh);
- UI_ThemeColor(TH_SHADE1);
- glBegin(GL_LINE_LOOP);
- glVertex2i(x, y);
- glVertex2i(x + boxw, y);
- glVertex2i(x + boxw, y - boxh);
- glVertex2i(x, y - boxh);
- glEnd();
- glBegin(GL_LINE_LOOP);
- glVertex2i(x + boxw - 10, y - 7);
- glVertex2i(x + boxw - 4, y - 7);
- glVertex2i(x + boxw - 7, y - 2);
- glEnd();
- glBegin(GL_LINE_LOOP);
- glVertex2i(x + boxw - 10, y - boxh + 7);
- glVertex2i(x + boxw - 4, y - boxh + 7);
- glVertex2i(x + boxw - 7, y - boxh + 2);
- glEnd();
- UI_ThemeColor(TH_TEXT);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ immUniformThemeColor(TH_BACK);
+ immRecti(pos, x, y, x + boxw, y - boxh);
+ immUniformThemeColor(TH_SHADE1);
+ immBegin(GWN_PRIM_LINE_LOOP, 4);
+ immVertex2i(pos, x, y);
+ immVertex2i(pos, x + boxw, y);
+ immVertex2i(pos, x + boxw, y - boxh);
+ immVertex2i(pos, x, y - boxh);
+ immEnd();
+ immBegin(GWN_PRIM_LINE_LOOP, 3);
+ immVertex2i(pos, x + boxw - 10, y - 7);
+ immVertex2i(pos, x + boxw - 4, y - 7);
+ immVertex2i(pos, x + boxw - 7, y - 2);
+ immEnd();
+ immBegin(GWN_PRIM_LINE_LOOP, 3);
+ immVertex2i(pos, x + boxw - 10, y - boxh + 7);
+ immVertex2i(pos, x + boxw - 4, y - boxh + 7);
+ immVertex2i(pos, x + boxw - 7, y - boxh + 2);
+ immEnd();
+
+ immUnbindProgram();
+
+ UI_FontThemeColor(tdc.font_id, TH_TEXT);
i = 0; br = DOC_WIDTH; lines = 0; // XXX -doc_scroll;
for (p = docs; *p; p++) {
@@ -1009,11 +1018,6 @@ static void draw_documentation(const SpaceText *st, ARegion *ar)
}
if (lines >= DOC_HEIGHT) break;
}
-
- if (0 /* XXX doc_scroll*/ /* > 0 && lines < DOC_HEIGHT */) {
- // XXX doc_scroll--;
- draw_documentation(st, ar);
- }
}
#endif
@@ -1061,10 +1065,15 @@ static void draw_suggestion_list(const SpaceText *st, const TextDrawContext *tdc
/* not needed but stands out nicer */
UI_draw_box_shadow(220, x, y - boxh, x + boxw, y);
- UI_ThemeColor(TH_SHADE1);
- glRecti(x - 1, y + 1, x + boxw + 1, y - boxh - 1);
- UI_ThemeColorShade(TH_BACK, 16);
- glRecti(x, y, x + boxw, y - boxh);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ immUniformThemeColor(TH_SHADE1);
+ immRecti(pos, x - 1, y + 1, x + boxw + 1, y - boxh - 1);
+ immUniformThemeColorShade(TH_BACK, 16);
+ immRecti(pos, x, y, x + boxw, y - boxh);
+
+ immUnbindProgram();
/* Set the top 'item' of the visible list */
for (i = 0, item = first; i < *top && item->next; i++, item = item->next) ;
@@ -1079,11 +1088,16 @@ static void draw_suggestion_list(const SpaceText *st, const TextDrawContext *tdc
w = st->cwidth * text_get_char_pos(st, str, len);
if (item == sel) {
- UI_ThemeColor(TH_SHADE2);
- glRecti(x + margin_x, y - 3, x + margin_x + w, y + lheight - 3);
+ unsigned int posi = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ immUniformThemeColor(TH_SHADE2);
+ immRecti(posi, x + margin_x, y - 3, x + margin_x + w, y + lheight - 3);
+
+ immUnbindProgram();
}
- format_draw_color(item->type);
+ format_draw_color(tdc, item->type);
text_draw(st, tdc, str, 0, 0, x + margin_x, y - 1, NULL);
if (item == last) break;
@@ -1092,42 +1106,57 @@ static void draw_suggestion_list(const SpaceText *st, const TextDrawContext *tdc
/*********************** draw cursor ************************/
-static void draw_cursor(SpaceText *st, ARegion *ar)
+static void draw_text_decoration(SpaceText *st, ARegion *ar)
{
Text *text = st->text;
int vcurl, vcurc, vsell, vselc, hidden = 0;
int x, y, w, i;
+ int offl, offc;
const int lheight = st->lheight_dpi + TXT_LINE_SPACING;
+ /* Convert to view space character coordinates to determine if cursor is hidden */
+ wrap_offset(st, ar, text->sell, text->selc, &offl, &offc);
+ vsell = txt_get_span(text->lines.first, text->sell) - st->top + offl;
+ vselc = text_get_char_pos(st, text->sell->line, text->selc) - st->left + offc;
+
+ if (vselc < 0) {
+ vselc = 0;
+ hidden = 1;
+ }
+
+ if (text->curl == text->sell && text->curc == text->selc && !st->line_hlight && hidden) {
+ /* Nothing to draw here */
+ return;
+ }
+
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
/* Draw the selection */
if (text->curl != text->sell || text->curc != text->selc) {
- int offl, offc;
/* Convert all to view space character coordinates */
wrap_offset(st, ar, text->curl, text->curc, &offl, &offc);
vcurl = txt_get_span(text->lines.first, text->curl) - st->top + offl;
vcurc = text_get_char_pos(st, text->curl->line, text->curc) - st->left + offc;
- wrap_offset(st, ar, text->sell, text->selc, &offl, &offc);
- vsell = txt_get_span(text->lines.first, text->sell) - st->top + offl;
- vselc = text_get_char_pos(st, text->sell->line, text->selc) - st->left + offc;
if (vcurc < 0) {
vcurc = 0;
}
- if (vselc < 0) {
- vselc = 0;
- hidden = 1;
- }
-
- UI_ThemeColor(TH_SHADE2);
+
+ immUniformThemeColor(TH_SHADE2);
+
x = st->showlinenrs ? TXT_OFFSET + TEXTXLOC : TXT_OFFSET;
y = ar->winy;
if (vcurl == vsell) {
y -= vcurl * lheight;
- if (vcurc < vselc)
- glRecti(x + vcurc * st->cwidth - 1, y, x + vselc * st->cwidth, y - lheight);
- else
- glRecti(x + vselc * st->cwidth - 1, y, x + vcurc * st->cwidth, y - lheight);
+
+ if (vcurc < vselc) {
+ immRecti(pos, x + vcurc * st->cwidth - 1, y, x + vselc * st->cwidth, y - lheight);
+ }
+ else {
+ immRecti(pos, x + vselc * st->cwidth - 1, y, x + vcurc * st->cwidth, y - lheight);
+ }
}
else {
int froml, fromc, tol, toc;
@@ -1143,35 +1172,24 @@ static void draw_cursor(SpaceText *st, ARegion *ar)
y -= froml * lheight;
- glRecti(x + fromc * st->cwidth - 1, y, ar->winx, y - lheight);
+ immRecti(pos, x + fromc * st->cwidth - 1, y, ar->winx, y - lheight);
y -= lheight;
+
for (i = froml + 1; i < tol; i++) {
- glRecti(x - 4, y, ar->winx, y - lheight);
+ immRecti(pos, x - 4, y, ar->winx, y - lheight);
y -= lheight;
}
- glRecti(x - 4, y, x + toc * st->cwidth, y - lheight);
+ immRecti(pos, x - 4, y, x + toc * st->cwidth, y - lheight);
y -= lheight;
}
}
- else {
- int offl, offc;
- wrap_offset(st, ar, text->sell, text->selc, &offl, &offc);
- vsell = txt_get_span(text->lines.first, text->sell) - st->top + offl;
- vselc = text_get_char_pos(st, text->sell->line, text->selc) - st->left + offc;
-
- if (vselc < 0) {
- vselc = 0;
- hidden = 1;
- }
- }
if (st->line_hlight) {
int x1, x2, y1, y2;
if (st->wordwrap) {
int visible_lines = text_get_visible_lines(st, ar, text->sell->line);
- int offl, offc;
wrap_offset_in_line(st, ar, text->sell, text->selc, &offl, &offc);
@@ -1187,36 +1205,38 @@ static void draw_cursor(SpaceText *st, ARegion *ar)
x1 = 0; // st->showlinenrs ? TXT_OFFSET + TEXTXLOC : TXT_OFFSET;
x2 = x1 + ar->winx;
- glColor4ub(255, 255, 255, 32);
-
+ immUniformColor4ub(255, 255, 255, 32);
+
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
- glRecti(x1 - 4, y1, x2, y2);
+ immRecti(pos, x1 - 4, y1, x2, y2);
glDisable(GL_BLEND);
}
}
-
+
if (!hidden) {
/* Draw the cursor itself (we draw the sel. cursor as this is the leading edge) */
x = st->showlinenrs ? TXT_OFFSET + TEXTXLOC : TXT_OFFSET;
x += vselc * st->cwidth;
y = ar->winy - vsell * lheight;
-
+
+ immUniformThemeColor(TH_HILITE);
+
if (st->overwrite) {
char ch = text->sell->line[text->selc];
-
+
y += TXT_LINE_SPACING;
w = st->cwidth;
if (ch == '\t') w *= st->tabnumber - (vselc + st->left) % st->tabnumber;
-
- UI_ThemeColor(TH_HILITE);
- glRecti(x, y - lheight - 1, x + w, y - lheight + 1);
+
+ immRecti(pos, x, y - lheight - 1, x + w, y - lheight + 1);
}
else {
- UI_ThemeColor(TH_HILITE);
- glRecti(x - 1, y, x + 1, y - lheight);
+ immRecti(pos, x - 1, y, x + 1, y - lheight);
}
}
+
+ immUnbindProgram();
}
/******************* draw matching brackets *********************/
@@ -1317,7 +1337,7 @@ static void draw_brackets(const SpaceText *st, const TextDrawContext *tdc, ARegi
if (!endl || endc == -1)
return;
- UI_ThemeColor(TH_HILITE);
+ UI_FontThemeColor(tdc->font_id, TH_HILITE);
x = st->showlinenrs ? TXT_OFFSET + TEXTXLOC : TXT_OFFSET;
y = ar->winy - st->lheight_dpi;
@@ -1422,8 +1442,11 @@ void draw_text_main(SpaceText *st, ARegion *ar)
if (st->showlinenrs) {
x = TXT_OFFSET + TEXTXLOC;
- UI_ThemeColor(TH_GRID);
- glRecti((TXT_OFFSET - 12), 0, (TXT_OFFSET - 5) + TEXTXLOC, ar->winy - 2);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformThemeColor(TH_GRID);
+ immRecti(pos, (TXT_OFFSET - 12), 0, (TXT_OFFSET - 5) + TEXTXLOC, ar->winy - 2);
+ immUnbindProgram();
}
else {
st->linenrs_tot = 0; /* not used */
@@ -1432,11 +1455,11 @@ void draw_text_main(SpaceText *st, ARegion *ar)
y = ar->winy - st->lheight_dpi;
winx = ar->winx - TXT_SCROLL_WIDTH;
- /* draw cursor */
- draw_cursor(st, ar);
+ /* draw cursor, margin, selection and highlight */
+ draw_text_decoration(st, ar);
/* draw the text */
- UI_ThemeColor(TH_TEXT);
+ UI_FontThemeColor(tdc.font_id, TH_TEXT);
for (i = 0; y > clip_min_y && i < st->viewlines && tmp; i++, tmp = tmp->next) {
if (st->showsyntax && !tmp->format)
@@ -1444,16 +1467,20 @@ void draw_text_main(SpaceText *st, ARegion *ar)
if (st->showlinenrs && !wrap_skip) {
/* draw line number */
- if (tmp == text->curl)
- UI_ThemeColor(TH_HILITE);
- else
- UI_ThemeColor(TH_TEXT);
+ if (tmp == text->curl) {
+ UI_FontThemeColor(tdc.font_id, TH_HILITE);
+ }
+ else {
+ UI_FontThemeColor(tdc.font_id, TH_TEXT);
+ }
BLI_snprintf(linenr, sizeof(linenr), "%*d", st->linenrs_tot, i + linecount + 1);
/* itoa(i + linecount + 1, linenr, 10); */ /* not ansi-c :/ */
text_font_draw(&tdc, TXT_OFFSET - 7, y, linenr);
- UI_ThemeColor(TH_TEXT);
+ if (tmp == text->curl) {
+ UI_FontThemeColor(tdc.font_id, TH_TEXT);
+ }
}
if (st->wordwrap) {
@@ -1474,15 +1501,24 @@ void draw_text_main(SpaceText *st, ARegion *ar)
margin_column_x = x + st->cwidth * (st->margin_column - st->left);
if (margin_column_x >= x) {
- /* same color as line number background */
- UI_ThemeColor(TH_GRID);
-
- setlinestyle(1);
- glBegin(GL_LINES);
- glVertex2i(margin_column_x, 0);
- glVertex2i(margin_column_x, ar->winy - 2);
- glEnd();
- setlinestyle(0);
+ const uint shdr_pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR);
+
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2] / UI_DPI_FAC, viewport_size[3] / UI_DPI_FAC);
+
+ immUniform1i("num_colors", 0); /* "simple" mode */
+ immUniformThemeColor(TH_GRID); /* same color as line number background */
+ immUniform1f("dash_width", 2.0f);
+ immUniform1f("dash_factor", 0.5f);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2i(shdr_pos, margin_column_x, 0);
+ immVertex2i(shdr_pos, margin_column_x, ar->winy - 2);
+ immEnd();
+ immUnbindProgram();
}
}
diff --git a/source/blender/editors/space_text/text_ops.c b/source/blender/editors/space_text/text_ops.c
index 4f0d2c93970..772cd6bd419 100644
--- a/source/blender/editors/space_text/text_ops.c
+++ b/source/blender/editors/space_text/text_ops.c
@@ -694,7 +694,7 @@ static int text_refresh_pyconstraints_exec(bContext *UNUSED(C), wmOperator *UNUS
}
if (update) {
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
}
}
#endif
diff --git a/source/blender/editors/space_time/space_time.c b/source/blender/editors/space_time/space_time.c
index f29d2b30ffe..853c24390d9 100644
--- a/source/blender/editors/space_time/space_time.c
+++ b/source/blender/editors/space_time/space_time.c
@@ -58,9 +58,11 @@
#include "WM_api.h"
#include "WM_types.h"
+#include "WM_message.h"
+
+#include "RNA_access.h"
#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "UI_resources.h"
#include "UI_view2d.h"
@@ -69,6 +71,9 @@
#include "ED_space_api.h"
#include "ED_markers.h"
+#include "GPU_immediate.h"
+#include "GPU_matrix.h"
+
#include "time_intern.h"
/* ************************ main time area region *********************** */
@@ -80,28 +85,42 @@ static void time_draw_sfra_efra(Scene *scene, View2D *v2d)
*/
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
- glColor4f(0.0f, 0.0f, 0.0f, 0.4f);
-
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor4f(0.0f, 0.0f, 0.0f, 0.4f);
+
if (PSFRA < PEFRA) {
- glRectf(v2d->cur.xmin, v2d->cur.ymin, (float)PSFRA, v2d->cur.ymax);
- glRectf((float)PEFRA, v2d->cur.ymin, v2d->cur.xmax, v2d->cur.ymax);
+ immRectf(pos, v2d->cur.xmin, v2d->cur.ymin, (float)PSFRA, v2d->cur.ymax);
+ immRectf(pos, (float)PEFRA, v2d->cur.ymin, v2d->cur.xmax, v2d->cur.ymax);
}
else {
- glRectf(v2d->cur.xmin, v2d->cur.ymin, v2d->cur.xmax, v2d->cur.ymax);
+ immRectf(pos, v2d->cur.xmin, v2d->cur.ymin, v2d->cur.xmax, v2d->cur.ymax);
}
+
glDisable(GL_BLEND);
- UI_ThemeColorShade(TH_BACK, -60);
/* thin lines where the actual frames are */
- fdrawline((float)PSFRA, v2d->cur.ymin, (float)PSFRA, v2d->cur.ymax);
- fdrawline((float)PEFRA, v2d->cur.ymin, (float)PEFRA, v2d->cur.ymax);
+ immUniformThemeColorShade(TH_BACK, -60);
+
+ immBegin(GWN_PRIM_LINES, 4);
+
+ immVertex2f(pos, (float)PSFRA, v2d->cur.ymin);
+ immVertex2f(pos, (float)PSFRA, v2d->cur.ymax);
+
+ immVertex2f(pos, (float)PEFRA, v2d->cur.ymin);
+ immVertex2f(pos, (float)PEFRA, v2d->cur.ymax);
+
+ immEnd();
+ immUnbindProgram();
}
static void time_draw_cache(SpaceTime *stime, Object *ob, Scene *scene)
{
PTCacheID *pid;
ListBase pidlist;
- SpaceTimeCache *stc = stime->caches.first;
const float cache_draw_height = (4.0f * UI_DPI_FAC * U.pixelsize);
float yoffs = 0.f;
@@ -110,12 +129,13 @@ static void time_draw_cache(SpaceTime *stime, Object *ob, Scene *scene)
BKE_ptcache_ids_from_object(&pidlist, ob, scene, 0);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
/* iterate over pointcaches on the active object,
* add spacetimecache and vertex array for each */
for (pid = pidlist.first; pid; pid = pid->next) {
- float col[4], *fp;
- int i, sta = pid->cache->startframe, end = pid->cache->endframe;
- int len = (end - sta + 1) * 4;
+ float col[4];
switch (pid->type) {
case PTCACHE_TYPE_SOFTBODY:
@@ -142,43 +162,9 @@ static void time_draw_cache(SpaceTime *stime, Object *ob, Scene *scene)
if (pid->cache->cached_frames == NULL)
continue;
- /* make sure we have stc with correct array length */
- if (stc == NULL || MEM_allocN_len(stc->array) != len * 2 * sizeof(float)) {
- if (stc) {
- MEM_freeN(stc->array);
- }
- else {
- stc = MEM_callocN(sizeof(SpaceTimeCache), "spacetimecache");
- BLI_addtail(&stime->caches, stc);
- }
-
- stc->array = MEM_callocN(len * 2 * sizeof(float), "SpaceTimeCache array");
- }
-
- /* fill the vertex array with a quad for each cached frame */
- for (i = sta, fp = stc->array; i <= end; i++) {
- if (pid->cache->cached_frames[i - sta]) {
- fp[0] = (float)i - 0.5f;
- fp[1] = 0.0;
- fp += 2;
-
- fp[0] = (float)i - 0.5f;
- fp[1] = 1.0;
- fp += 2;
-
- fp[0] = (float)i + 0.5f;
- fp[1] = 1.0;
- fp += 2;
-
- fp[0] = (float)i + 0.5f;
- fp[1] = 0.0;
- fp += 2;
- }
- }
-
- glPushMatrix();
- glTranslatef(0.0, (float)V2D_SCROLL_HEIGHT + yoffs, 0.0);
- glScalef(1.0, cache_draw_height, 0.0);
+ gpuPushMatrix();
+ gpuTranslate2f(0.0, (float)V2D_SCROLL_HEIGHT + yoffs);
+ gpuScale2f(1.0, cache_draw_height);
switch (pid->type) {
case PTCACHE_TYPE_SOFTBODY:
@@ -212,12 +198,15 @@ static void time_draw_cache(SpaceTime *stime, Object *ob, Scene *scene)
BLI_assert(0);
break;
}
- glColor4fv(col);
-
+
+ const int sta = pid->cache->startframe, end = pid->cache->endframe;
+ const int len = (end - sta + 1) * 6;
+
glEnable(GL_BLEND);
-
- glRectf((float)sta, 0.0, (float)end, 1.0);
-
+
+ immUniformColor4fv(col);
+ immRectf(pos, (float)sta, 0.0, (float)end, 1.0);
+
col[3] = 0.4f;
if (pid->cache->flag & PTCACHE_BAKED) {
col[0] -= 0.4f; col[1] -= 0.4f; col[2] -= 0.4f;
@@ -225,52 +214,38 @@ static void time_draw_cache(SpaceTime *stime, Object *ob, Scene *scene)
else if (pid->cache->flag & PTCACHE_OUTDATED) {
col[0] += 0.4f; col[1] += 0.4f; col[2] += 0.4f;
}
- glColor4fv(col);
-
- glEnableClientState(GL_VERTEX_ARRAY);
- glVertexPointer(2, GL_FLOAT, 0, stc->array);
- glDrawArrays(GL_QUADS, 0, (fp - stc->array) / 2);
- glDisableClientState(GL_VERTEX_ARRAY);
-
- glDisable(GL_BLEND);
-
- glPopMatrix();
-
- yoffs += cache_draw_height;
- stc = stc->next;
- }
+ immUniformColor4fv(col);
- BLI_freelistN(&pidlist);
+ if (len > 0) {
+ immBeginAtMost(GWN_PRIM_TRIS, len);
- /* free excessive caches */
- while (stc) {
- SpaceTimeCache *tmp = stc->next;
- BLI_remlink(&stime->caches, stc);
- MEM_freeN(stc->array);
- MEM_freeN(stc);
- stc = tmp;
- }
-}
+ /* draw a quad for each cached frame */
+ for (int i = sta; i <= end; i++) {
+ if (pid->cache->cached_frames[i - sta]) {
+ immVertex2f(pos, (float)i - 0.5f, 0.0f);
+ immVertex2f(pos, (float)i - 0.5f, 1.0f);
+ immVertex2f(pos, (float)i + 0.5f, 1.0f);
-static void time_cache_free(SpaceTime *stime)
-{
- SpaceTimeCache *stc;
-
- for (stc = stime->caches.first; stc; stc = stc->next) {
- if (stc->array) {
- MEM_freeN(stc->array);
- stc->array = NULL;
+ immVertex2f(pos, (float)i - 0.5f, 0.0f);
+ immVertex2f(pos, (float)i + 0.5f, 1.0f);
+ immVertex2f(pos, (float)i + 0.5f, 0.0f);
+ }
+ }
+
+ immEnd();
}
+
+ glDisable(GL_BLEND);
+
+ gpuPopMatrix();
+
+ yoffs += cache_draw_height;
}
-
- BLI_freelistN(&stime->caches);
-}
-static void time_cache_refresh(SpaceTime *stime)
-{
- /* Free previous caches to indicate full refresh */
- time_cache_free(stime);
+ immUnbindProgram();
+
+ BLI_freelistN(&pidlist);
}
/* helper function - find actkeycolumn that occurs on cframe, or the nearest one if not found */
@@ -296,7 +271,7 @@ static ActKeyColumn *time_cfra_find_ak(ActKeyColumn *ak, float cframe)
}
/* helper for time_draw_keyframes() */
-static void time_draw_idblock_keyframes(View2D *v2d, ID *id, short onlysel)
+static void time_draw_idblock_keyframes(View2D *v2d, ID *id, short onlysel, const unsigned char color[3])
{
bDopeSheet ads = {NULL};
DLRBT_Tree keys;
@@ -341,21 +316,40 @@ static void time_draw_idblock_keyframes(View2D *v2d, ID *id, short onlysel)
* the first visible keyframe (last one can then be easily checked)
* - draw within a single GL block to be faster
*/
- glBegin(GL_LINES);
- for (ak = time_cfra_find_ak(keys.root, v2d->cur.xmin);
- (ak) && (ak->cfra <= v2d->cur.xmax);
- ak = ak->next)
- {
- glVertex2f(ak->cfra, ymin);
- glVertex2f(ak->cfra, ymax);
+
+ ActKeyColumn *link;
+ int max_len = 0;
+
+ ak = time_cfra_find_ak(keys.root, v2d->cur.xmin);
+
+ for (link = ak; link; link = link->next) {
+ max_len++;
}
- glEnd(); // GL_LINES
-
+
+ if (max_len > 0) {
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor3ubv(color);
+
+ immBeginAtMost(GWN_PRIM_LINES, max_len * 2);
+
+ for (; (ak) && (ak->cfra <= v2d->cur.xmax); ak = ak->next) {
+ immVertex2f(pos, ak->cfra, ymin);
+ immVertex2f(pos, ak->cfra, ymax);
+ }
+
+ immEnd();
+ immUnbindProgram();
+ }
+
/* free temp stuff */
BLI_dlrbTree_free(&keys);
}
-static void time_draw_caches_keyframes(Main *bmain, Scene *scene, View2D *v2d, bool onlysel)
+static void time_draw_caches_keyframes(Main *bmain, ViewLayer *view_layer, View2D *v2d, bool onlysel, const unsigned char color[3])
{
CacheFile *cache_file;
@@ -366,7 +360,7 @@ static void time_draw_caches_keyframes(Main *bmain, Scene *scene, View2D *v2d, b
cache_file->draw_flag &= ~CACHEFILE_KEYFRAME_DRAWN;
}
- for (Base *base = scene->base.first; base; base = base->next) {
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
Object *ob = base->object;
ModifierData *md = modifiers_findByType(ob, eModifierType_MeshSequenceCache);
@@ -382,7 +376,7 @@ static void time_draw_caches_keyframes(Main *bmain, Scene *scene, View2D *v2d, b
cache_file->draw_flag |= CACHEFILE_KEYFRAME_DRAWN;
- time_draw_idblock_keyframes(v2d, (ID *)cache_file, onlysel);
+ time_draw_idblock_keyframes(v2d, (ID *)cache_file, onlysel, color);
}
for (bConstraint *con = ob->constraints.first; con; con = con->next) {
@@ -400,7 +394,7 @@ static void time_draw_caches_keyframes(Main *bmain, Scene *scene, View2D *v2d, b
cache_file->draw_flag |= CACHEFILE_KEYFRAME_DRAWN;
- time_draw_idblock_keyframes(v2d, (ID *)cache_file, onlysel);
+ time_draw_idblock_keyframes(v2d, (ID *)cache_file, onlysel, color);
}
}
}
@@ -408,25 +402,29 @@ static void time_draw_caches_keyframes(Main *bmain, Scene *scene, View2D *v2d, b
/* draw keyframe lines for timeline */
static void time_draw_keyframes(const bContext *C, ARegion *ar)
{
+ WorkSpace *workspace = CTX_wm_workspace(C);
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Object *ob = CTX_data_active_object(C);
View2D *v2d = &ar->v2d;
bool onlysel = ((scene->flag & SCE_KEYS_NO_SELONLY) == 0);
+ unsigned char color[3];
/* set this for all keyframe lines once and for all */
glLineWidth(1.0);
/* draw cache files keyframes (if available) */
- UI_ThemeColor(TH_TIME_KEYFRAME);
- time_draw_caches_keyframes(CTX_data_main(C), scene, v2d, onlysel);
+ UI_GetThemeColor3ubv(TH_TIME_KEYFRAME, color);
+ time_draw_caches_keyframes(CTX_data_main(C), view_layer, v2d, onlysel, color);
/* draw grease pencil keyframes (if available) */
- UI_ThemeColor(TH_TIME_GP_KEYFRAME);
+ UI_GetThemeColor3ubv(TH_TIME_GP_KEYFRAME, color);
+
if (scene->gpd) {
- time_draw_idblock_keyframes(v2d, (ID *)scene->gpd, onlysel);
+ time_draw_idblock_keyframes(v2d, (ID *)scene->gpd, onlysel, color);
}
if (ob && ob->gpd) {
- time_draw_idblock_keyframes(v2d, (ID *)ob->gpd, onlysel);
+ time_draw_idblock_keyframes(v2d, (ID *)ob->gpd, onlysel, color);
}
/* draw scene keyframes first
@@ -435,8 +433,8 @@ static void time_draw_keyframes(const bContext *C, ARegion *ar)
*/
if (onlysel == 0) {
/* set draw color */
- UI_ThemeColorShade(TH_TIME_KEYFRAME, -50);
- time_draw_idblock_keyframes(v2d, (ID *)scene, onlysel);
+ UI_GetThemeColorShade3ubv(TH_TIME_KEYFRAME, -50, color);
+ time_draw_idblock_keyframes(v2d, (ID *)scene, onlysel, color);
}
/* draw keyframes from selected objects
@@ -444,11 +442,11 @@ static void time_draw_keyframes(const bContext *C, ARegion *ar)
* OR the onlysel flag was set, which means that only active object's keyframes should
* be considered
*/
- UI_ThemeColor(TH_TIME_KEYFRAME);
-
- if (ob && ((ob->mode == OB_MODE_POSE) || onlysel)) {
+ UI_GetThemeColor3ubv(TH_TIME_KEYFRAME, color);
+
+ if (ob && ((workspace->object_mode == OB_MODE_POSE) || onlysel)) {
/* draw keyframes for active object only */
- time_draw_idblock_keyframes(v2d, (ID *)ob, onlysel);
+ time_draw_idblock_keyframes(v2d, (ID *)ob, onlysel, color);
}
else {
bool active_done = false;
@@ -457,7 +455,7 @@ static void time_draw_keyframes(const bContext *C, ARegion *ar)
CTX_DATA_BEGIN (C, Object *, obsel, selected_objects)
{
/* last arg is 0, since onlysel doesn't apply here... */
- time_draw_idblock_keyframes(v2d, (ID *)obsel, 0);
+ time_draw_idblock_keyframes(v2d, (ID *)obsel, 0, color);
/* if this object is the active one, set flag so that we don't draw again */
if (obsel == ob)
@@ -467,24 +465,15 @@ static void time_draw_keyframes(const bContext *C, ARegion *ar)
/* if active object hasn't been done yet, draw it... */
if (ob && (active_done == 0))
- time_draw_idblock_keyframes(v2d, (ID *)ob, 0);
+ time_draw_idblock_keyframes(v2d, (ID *)ob, 0, color);
}
}
/* ---------------- */
-static void time_refresh(const bContext *UNUSED(C), ScrArea *sa)
-{
- /* find the main timeline region and refresh cache display*/
- ARegion *ar = BKE_area_find_region_type(sa, RGN_TYPE_WINDOW);
- if (ar) {
- SpaceTime *stime = (SpaceTime *)sa->spacedata.first;
- time_cache_refresh(stime);
- }
-}
-
/* editor level listener */
-static void time_listener(bScreen *UNUSED(sc), ScrArea *sa, wmNotifier *wmn)
+static void time_listener(bScreen *UNUSED(sc), ScrArea *sa, wmNotifier *wmn, Scene *UNUSED(scene),
+ WorkSpace *UNUSED(workspace))
{
/* mainly for updating cache display */
@@ -625,7 +614,9 @@ static void time_main_region_draw(const bContext *C, ARegion *ar)
UI_view2d_scrollers_free(scrollers);
}
-static void time_main_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+static void time_main_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar,
+ wmNotifier *wmn, const Scene *UNUSED(scene))
{
/* context changes */
switch (wmn->category) {
@@ -654,9 +645,55 @@ static void time_main_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa),
if (wmn->data == ND_DATA)
ED_region_tag_redraw(ar);
break;
+ case NC_SCREEN:
+ if (ELEM(wmn->data, ND_LAYER)) {
+ ED_region_tag_redraw(ar);
+ }
+ break;
+ }
+}
+
+static void time_main_region_message_subscribe(
+ const struct bContext *UNUSED(C),
+ struct WorkSpace *UNUSED(workspace), struct Scene *scene,
+ struct bScreen *screen, struct ScrArea *sa, struct ARegion *ar,
+ struct wmMsgBus *mbus)
+{
+ PointerRNA ptr;
+ RNA_pointer_create(&screen->id, &RNA_SpaceTimeline, sa->spacedata.first, &ptr);
+
+ wmMsgSubscribeValue msg_sub_value_region_tag_redraw = {
+ .owner = ar,
+ .user_data = ar,
+ .notify = ED_region_do_msg_notify_tag_redraw,
+ };
+
+ /* Timeline depends on scene properties. */
+ {
+ bool use_preview = (scene->r.flag & SCER_PRV_RANGE);
+ extern PropertyRNA rna_Scene_frame_start;
+ extern PropertyRNA rna_Scene_frame_end;
+ extern PropertyRNA rna_Scene_frame_preview_start;
+ extern PropertyRNA rna_Scene_frame_preview_end;
+ extern PropertyRNA rna_Scene_use_preview_range;
+ extern PropertyRNA rna_Scene_frame_current;
+ const PropertyRNA *props[] = {
+ use_preview ? &rna_Scene_frame_preview_start : &rna_Scene_frame_start,
+ use_preview ? &rna_Scene_frame_preview_end : &rna_Scene_frame_end,
+ &rna_Scene_use_preview_range,
+ &rna_Scene_frame_current,
+ };
+
+ PointerRNA idptr;
+ RNA_id_pointer_create(&scene->id, &idptr);
+
+ for (int i = 0; i < ARRAY_SIZE(props); i++) {
+ WM_msg_subscribe_rna(mbus, &idptr, props[i], &msg_sub_value_region_tag_redraw, __func__);
+ }
}
}
+
/* ************************ header time area region *********************** */
/* add handlers, stuff you only do once or on area/region changes */
@@ -670,7 +707,9 @@ static void time_header_region_draw(const bContext *C, ARegion *ar)
ED_region_header(C, ar);
}
-static void time_header_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+static void time_header_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar,
+ wmNotifier *wmn, const Scene *UNUSED(scene))
{
/* context changes */
switch (wmn->category) {
@@ -754,13 +793,6 @@ static SpaceLink *time_new(const bContext *C)
return (SpaceLink *)stime;
}
-/* not spacelink itself */
-static void time_free(SpaceLink *sl)
-{
- SpaceTime *stime = (SpaceTime *)sl;
-
- time_cache_free(stime);
-}
/* spacetype; init callback in ED_area_initialize() */
/* init is called to (re)initialize an existing editor (file read, screen changes) */
/* validate spacedata, add own area level handlers */
@@ -768,8 +800,6 @@ static void time_init(wmWindowManager *UNUSED(wm), ScrArea *sa)
{
SpaceTime *stime = (SpaceTime *)sa->spacedata.first;
- time_cache_free(stime);
-
/* enable all cache display */
stime->cache_display |= TIME_CACHE_DISPLAY;
stime->cache_display |= (TIME_CACHE_SOFTBODY | TIME_CACHE_PARTICLES);
@@ -798,13 +828,11 @@ void ED_spacetype_time(void)
strncpy(st->name, "Timeline", BKE_ST_MAXNAME);
st->new = time_new;
- st->free = time_free;
st->init = time_init;
st->duplicate = time_duplicate;
st->operatortypes = time_operatortypes;
st->keymap = NULL;
st->listener = time_listener;
- st->refresh = time_refresh;
/* regions: main window */
art = MEM_callocN(sizeof(ARegionType), "spacetype time region");
@@ -814,6 +842,7 @@ void ED_spacetype_time(void)
art->init = time_main_region_init;
art->draw = time_main_region_draw;
art->listener = time_main_region_listener;
+ art->message_subscribe = time_main_region_message_subscribe;
art->keymap = time_keymap;
art->lock = 1; /* Due to pointcache, see T4960. */
BLI_addhead(&st->regiontypes, art);
diff --git a/source/blender/editors/space_userpref/space_userpref.c b/source/blender/editors/space_userpref/space_userpref.c
index aeba4a86f3e..f640fe63f93 100644
--- a/source/blender/editors/space_userpref/space_userpref.c
+++ b/source/blender/editors/space_userpref/space_userpref.c
@@ -136,12 +136,16 @@ static void userpref_header_region_draw(const bContext *C, ARegion *ar)
ED_region_header(C, ar);
}
-static void userpref_main_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *UNUSED(ar), wmNotifier *UNUSED(wmn))
+static void userpref_main_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *UNUSED(ar),
+ wmNotifier *UNUSED(wmn), const Scene *UNUSED(scene))
{
/* context changes */
}
-static void userpref_header_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *UNUSED(ar), wmNotifier *UNUSED(wmn))
+static void userpref_header_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *UNUSED(ar),
+ wmNotifier *UNUSED(wmn), const Scene *UNUSED(scene))
{
/* context changes */
#if 0
diff --git a/source/blender/editors/space_view3d/CMakeLists.txt b/source/blender/editors/space_view3d/CMakeLists.txt
index e25a9c04f15..d148ef3c6fe 100644
--- a/source/blender/editors/space_view3d/CMakeLists.txt
+++ b/source/blender/editors/space_view3d/CMakeLists.txt
@@ -25,6 +25,7 @@ set(INC
../../blenlib
../../blentranslation
../../bmesh
+ ../../draw
../../gpu
../../imbuf
../../makesdna
@@ -52,11 +53,20 @@ set(SRC
view3d_buttons.c
view3d_camera_control.c
view3d_draw.c
+ view3d_draw_legacy.c
view3d_edit.c
view3d_fly.c
view3d_walk.c
view3d_header.c
view3d_iterators.c
+ view3d_manipulator_armature.c
+ view3d_manipulator_camera.c
+ view3d_manipulator_empty.c
+ view3d_manipulator_forcefield.c
+ view3d_manipulator_lamp.c
+ view3d_manipulator_navigate.c
+ view3d_manipulator_navigate_type.c
+ view3d_manipulator_ruler.c
view3d_ops.c
view3d_project.c
view3d_ruler.c
@@ -95,8 +105,4 @@ if(WITH_MOD_SMOKE)
add_definitions(-DWITH_SMOKE)
endif()
-if(WITH_LEGACY_DEPSGRAPH)
- add_definitions(-DWITH_LEGACY_DEPSGRAPH)
-endif()
-
blender_add_lib(bf_editor_space_view3d "${SRC}" "${INC}" "${INC_SYS}")
diff --git a/source/blender/editors/space_view3d/drawanimviz.c b/source/blender/editors/space_view3d/drawanimviz.c
index a99ac0d46a5..9fa85b55362 100644
--- a/source/blender/editors/space_view3d/drawanimviz.c
+++ b/source/blender/editors/space_view3d/drawanimviz.c
@@ -49,7 +49,8 @@
#include "BKE_animsys.h"
#include "BKE_action.h"
-#include "BIF_gl.h"
+#include "GPU_immediate.h"
+#include "GPU_matrix.h"
#include "ED_keyframes_draw.h"
@@ -71,8 +72,8 @@ void draw_motion_paths_init(View3D *v3d, ARegion *ar)
if (v3d->zbuf) glDisable(GL_DEPTH_TEST);
- glPushMatrix();
- glLoadMatrixf(rv3d->viewmat);
+ gpuPushMatrix();
+ gpuLoadMatrix(rv3d->viewmat);
}
/* set color
@@ -86,10 +87,11 @@ void draw_motion_paths_init(View3D *v3d, ARegion *ar)
* - User selected color for next frames
*/
static void set_motion_path_color(Scene *scene, bMotionPath *mpath, int i, short sel, int sfra, int efra,
- float prev_color[3], float frame_color[3], float next_color[3])
+ float prev_color[3], float frame_color[3], float next_color[3], unsigned color)
{
int frame = sfra + i;
int blend_base = (abs(frame - CFRA) == 1) ? TH_CFRAME : TH_BACK; /* "bleed" cframe color to ease color blending */
+ unsigned char ubcolor[3];
#define SET_INTENSITY(A, B, C, min, max) (((1.0f - ((C - B) / (C - A))) * (max - min)) + min)
float intensity; /* how faint */
@@ -97,7 +99,7 @@ static void set_motion_path_color(Scene *scene, bMotionPath *mpath, int i, short
if (frame < CFRA) {
if (mpath->flag & MOTIONPATH_FLAG_CUSTOM) {
/* Custom color: previous frames color is darker than current frame */
- glColor3fv(prev_color);
+ rgb_float_to_uchar(ubcolor, prev_color);
}
else {
/* black - before cfra */
@@ -109,13 +111,14 @@ static void set_motion_path_color(Scene *scene, bMotionPath *mpath, int i, short
/* intensity = 0.8f; */
intensity = SET_INTENSITY(sfra, i, CFRA, 0.68f, 0.92f);
}
- UI_ThemeColorBlend(TH_WIRE, blend_base, intensity);
+
+ UI_GetThemeColorBlend3ubv(TH_WIRE, blend_base, intensity, ubcolor);
}
}
else if (frame > CFRA) {
if (mpath->flag & MOTIONPATH_FLAG_CUSTOM) {
/* Custom color: next frames color is equal to user selected color */
- glColor3fv(next_color);
+ rgb_float_to_uchar(ubcolor, next_color);
}
else {
/* blue - after cfra */
@@ -127,13 +130,14 @@ static void set_motion_path_color(Scene *scene, bMotionPath *mpath, int i, short
/* intensity = 0.8f; */
intensity = SET_INTENSITY(CFRA, i, efra, 0.68f, 0.92f);
}
- UI_ThemeColorBlend(TH_BONE_POSE, blend_base, intensity);
+
+ UI_GetThemeColorBlend3ubv(TH_BONE_POSE, blend_base, intensity, ubcolor);
}
}
else {
if (mpath->flag & MOTIONPATH_FLAG_CUSTOM) {
/* Custom color: current frame color is slightly darker than user selected color */
- glColor3fv(frame_color);
+ rgb_float_to_uchar(ubcolor, frame_color);
}
else {
/* green - on cfra */
@@ -143,9 +147,12 @@ static void set_motion_path_color(Scene *scene, bMotionPath *mpath, int i, short
else {
intensity = 0.99f;
}
- UI_ThemeColorBlendShade(TH_CFRAME, TH_BACK, intensity, 10);
+ UI_GetThemeColorBlendShade3ubv(TH_CFRAME, TH_BACK, intensity, 10, ubcolor);
}
}
+
+ immAttrib3ubv(color, ubcolor);
+
#undef SET_INTENSITY
}
@@ -231,42 +238,65 @@ void draw_motion_path_instance(Scene *scene,
/* set line thickness */
glLineWidth(mpath->line_thickness);
- glBegin(GL_LINE_STRIP);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_SMOOTH_COLOR);
+
+ immBegin(GWN_PRIM_LINE_STRIP, len);
+
for (i = 0, mpv = mpv_start; i < len; i++, mpv++) {
short sel = (pchan) ? (pchan->bone->flag & BONE_SELECTED) : (ob->flag & SELECT);
+
/* Set color */
- set_motion_path_color(scene, mpath, i, sel, sfra, efra, prev_color, frame_color, next_color);
+ set_motion_path_color(scene, mpath, i, sel, sfra, efra, prev_color, frame_color, next_color, color);
+
/* draw a vertex with this color */
- glVertex3fv(mpv->co);
+ immVertex3fv(pos, mpv->co);
}
- glEnd();
+ immEnd();
+
+ immUnbindProgram();
+
/* back to old line thickness */
glLineWidth(old_width);
}
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+
/* Point must be bigger than line thickness */
glPointSize(mpath->line_thickness + 1.0);
- /* draw little black point at each frame
- * NOTE: this is not really visible/noticeable
- */
- glBegin(GL_POINTS);
- for (i = 0, mpv = mpv_start; i < len; i++, mpv++)
- glVertex3fv(mpv->co);
- glEnd();
-
+ /* draw little black point at each frame */
+ immUniformColor3ub(0, 0, 0);
+
+ immBegin(GWN_PRIM_POINTS, len);
+
+ for (i = 0, mpv = mpv_start; i < len; i++, mpv++) {
+ immVertex3fv(pos, mpv->co);
+ }
+
+ immEnd();
+
/* Draw little white dots at each framestep value or replace with custom color */
if (mpath->flag & MOTIONPATH_FLAG_CUSTOM) {
- glColor4fv(mpath->color);
+ immUniformColor3fv(mpath->color);
}
else {
- UI_ThemeColor(TH_TEXT_HI);
+ immUniformThemeColor(TH_TEXT_HI);
}
- glBegin(GL_POINTS);
- for (i = 0, mpv = mpv_start; i < len; i += stepsize, mpv += stepsize)
- glVertex3fv(mpv->co);
- glEnd();
+
+ immBegin(GWN_PRIM_POINTS, (len + stepsize - 1) / stepsize);
+
+ for (i = 0, mpv = mpv_start; i < len; i += stepsize, mpv += stepsize) {
+ immVertex3fv(pos, mpv->co);
+ }
+
+ immEnd();
/* Draw big green dot where the current frame is
* NOTE: this is only done when keyframes are shown, since this adds similar types of clutter
@@ -274,16 +304,18 @@ void draw_motion_path_instance(Scene *scene,
if ((avs->path_viewflag & MOTIONPATH_VIEW_KFRAS) &&
(sfra < CFRA) && (CFRA <= efra))
{
- UI_ThemeColor(TH_CFRAME);
-
glPointSize(mpath->line_thickness + 5.0);
- glBegin(GL_POINTS);
+ immUniformThemeColor(TH_CFRAME);
+
+ immBegin(GWN_PRIM_POINTS, 1);
+
mpv = mpv_start + (CFRA - sfra);
- glVertex3fv(mpv->co);
- glEnd();
-
- UI_ThemeColor(TH_TEXT_HI);
+ immVertex3fv(pos, mpv->co);
+
+ immEnd();
}
+
+ immUnbindProgram();
/* XXX, this isn't up to date but probably should be kept so. */
invert_m4_m4(ob->imat, ob->obmat);
@@ -353,24 +385,28 @@ void draw_motion_path_instance(Scene *scene,
UI_GetThemeColor3ubv(TH_VERTEX_SELECT, col);
col[3] = 255;
- /* if custom, point must be bigger than line */
- if (mpath->flag & MOTIONPATH_FLAG_CUSTOM) {
- glPointSize(mpath->line_thickness + 3.0);
- }
- else {
- glPointSize(4.0f);
- }
- glColor3ubv(col);
+ /* point must be bigger than line */
+ glPointSize(mpath->line_thickness + 3.0);
+
+ pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformColor3ubv(col);
- glBegin(GL_POINTS);
+ immBeginAtMost(GWN_PRIM_POINTS, len);
+
for (i = 0, mpv = mpv_start; i < len; i++, mpv++) {
int frame = sfra + i;
float mframe = (float)(frame);
- if (BLI_dlrbTree_search_exact(&keys, compare_ak_cfraPtr, &mframe))
- glVertex3fv(mpv->co);
+ if (BLI_dlrbTree_search_exact(&keys, compare_ak_cfraPtr, &mframe)) {
+ immVertex3fv(pos, mpv->co);
+ }
}
- glEnd();
+
+ immEnd();
+
+ immUnbindProgram();
/* Draw frame numbers of keyframes */
if (avs->path_viewflag & MOTIONPATH_VIEW_KFNOS) {
@@ -398,5 +434,5 @@ void draw_motion_path_instance(Scene *scene,
void draw_motion_paths_cleanup(View3D *v3d)
{
if (v3d->zbuf) glEnable(GL_DEPTH_TEST);
- glPopMatrix();
+ gpuPopMatrix();
}
diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c
index 5208013b6fe..f0adf307bda 100644
--- a/source/blender/editors/space_view3d/drawarmature.c
+++ b/source/blender/editors/space_view3d/drawarmature.c
@@ -54,15 +54,20 @@
#include "BKE_modifier.h"
#include "BKE_nla.h"
#include "BKE_curve.h"
+#include "BKE_context.h"
+#include "DEG_depsgraph.h"
-#include "BIF_gl.h"
#include "BIF_glutil.h"
#include "ED_armature.h"
#include "ED_keyframes_draw.h"
#include "GPU_basic_shader.h"
+#include "GPU_batch.h"
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+#include "GPU_matrix.h"
#include "UI_resources.h"
@@ -74,8 +79,10 @@
/* global here is reset before drawing each bone */
static ThemeWireColor *bcolor = NULL;
+static float fcolor[4] = {0.0f};
+static bool flat_color;
-/* values of colCode for set_pchan_glcolor */
+/* values of colCode for set_pchan_color */
enum {
PCHAN_COLOR_NORMAL = 0, /* normal drawing */
PCHAN_COLOR_SOLID, /* specific case where "solid" color is needed */
@@ -128,7 +135,7 @@ static void set_pchan_colorset(Object *ob, bPoseChannel *pchan)
}
}
-/* This function is for brightening/darkening a given color (like UI_ThemeColorShade()) */
+/* This function is for brightening/darkening a given color (like UI_GetThemeColorShade3ubv()) */
static void cp_shade_color3ub(unsigned char cp[3], const int offset)
{
int r, g, b;
@@ -146,13 +153,13 @@ static void cp_shade_color3ub(unsigned char cp[3], const int offset)
}
/* This function sets the gl-color for coloring a certain bone (based on bcolor) */
-static bool set_pchan_glColor(short colCode, int boneflag, short constflag)
+static bool set_pchan_color(short colCode, int boneflag, short constflag)
{
switch (colCode) {
case PCHAN_COLOR_NORMAL:
{
if (bcolor) {
- unsigned char cp[3];
+ unsigned char cp[4] = {255};
if (boneflag & BONE_DRAW_ACTIVE) {
copy_v3_v3_char((char *)cp, bcolor->active);
@@ -169,20 +176,20 @@ static bool set_pchan_glColor(short colCode, int boneflag, short constflag)
cp_shade_color3ub(cp, -50);
}
- glColor3ubv(cp);
+ rgb_uchar_to_float(fcolor, cp);
}
else {
if ((boneflag & BONE_DRAW_ACTIVE) && (boneflag & BONE_SELECTED)) {
- UI_ThemeColor(TH_BONE_POSE_ACTIVE);
+ UI_GetThemeColor4fv(TH_BONE_POSE_ACTIVE, fcolor);
}
else if (boneflag & BONE_DRAW_ACTIVE) {
- UI_ThemeColorBlend(TH_WIRE, TH_BONE_POSE, 0.15f); /* unselected active */
+ UI_GetThemeColorBlendShade4fv(TH_WIRE, TH_BONE_POSE, 0.15f, 0, fcolor);
}
else if (boneflag & BONE_SELECTED) {
- UI_ThemeColor(TH_BONE_POSE);
+ UI_GetThemeColor4fv(TH_BONE_POSE, fcolor);
}
else {
- UI_ThemeColor(TH_WIRE);
+ UI_GetThemeColor4fv(TH_WIRE, fcolor);
}
}
@@ -191,21 +198,25 @@ static bool set_pchan_glColor(short colCode, int boneflag, short constflag)
case PCHAN_COLOR_SOLID:
{
if (bcolor) {
- glColor3ubv((unsigned char *)bcolor->solid);
+ rgb_uchar_to_float(fcolor, (unsigned char *)bcolor->solid);
+ }
+ else {
+ UI_GetThemeColor4fv(TH_BONE_SOLID, fcolor);
}
- else
- UI_ThemeColor(TH_BONE_SOLID);
return true;
}
case PCHAN_COLOR_CONSTS:
{
if ((bcolor == NULL) || (bcolor->flag & TH_WIRECOLOR_CONSTCOLS)) {
- if (constflag & PCHAN_HAS_TARGET) glColor4ub(255, 150, 0, 80);
- else if (constflag & PCHAN_HAS_IK) glColor4ub(255, 255, 0, 80);
- else if (constflag & PCHAN_HAS_SPLINEIK) glColor4ub(200, 255, 0, 80);
- else if (constflag & PCHAN_HAS_CONST) glColor4ub(0, 255, 120, 80);
-
+ unsigned char cp[4];
+ if (constflag & PCHAN_HAS_TARGET) rgba_char_args_set((char *)cp, 255, 150, 0, 80);
+ else if (constflag & PCHAN_HAS_IK) rgba_char_args_set((char *)cp, 255, 255, 0, 80);
+ else if (constflag & PCHAN_HAS_SPLINEIK) rgba_char_args_set((char *)cp, 200, 255, 0, 80);
+ else if (constflag & PCHAN_HAS_CONST) rgba_char_args_set((char *)cp, 0, 255, 120, 80);
+
+ rgba_uchar_to_float(fcolor, cp);
+
return true;
}
return false;
@@ -213,7 +224,7 @@ static bool set_pchan_glColor(short colCode, int boneflag, short constflag)
case PCHAN_COLOR_SPHEREBONE_BASE:
{
if (bcolor) {
- unsigned char cp[3];
+ unsigned char cp[4] = {255};
if (boneflag & BONE_DRAW_ACTIVE) {
copy_v3_v3_char((char *)cp, bcolor->active);
@@ -225,12 +236,18 @@ static bool set_pchan_glColor(short colCode, int boneflag, short constflag)
copy_v3_v3_char((char *)cp, bcolor->solid);
}
- glColor3ubv(cp);
+ rgb_uchar_to_float(fcolor, cp);
}
else {
- if (boneflag & BONE_DRAW_ACTIVE) UI_ThemeColorShade(TH_BONE_POSE, 40);
- else if (boneflag & BONE_SELECTED) UI_ThemeColor(TH_BONE_POSE);
- else UI_ThemeColor(TH_BONE_SOLID);
+ if (boneflag & BONE_DRAW_ACTIVE) {
+ UI_GetThemeColorShade4fv(TH_BONE_POSE, 40, fcolor);
+ }
+ else if (boneflag & BONE_SELECTED) {
+ UI_GetThemeColor4fv(TH_BONE_POSE, fcolor);
+ }
+ else {
+ UI_GetThemeColor4fv(TH_BONE_SOLID, fcolor);
+ }
}
return true;
@@ -238,7 +255,7 @@ static bool set_pchan_glColor(short colCode, int boneflag, short constflag)
case PCHAN_COLOR_SPHEREBONE_END:
{
if (bcolor) {
- unsigned char cp[3];
+ unsigned char cp[4] = {255};
if (boneflag & BONE_DRAW_ACTIVE) {
copy_v3_v3_char((char *)cp, bcolor->active);
@@ -253,12 +270,18 @@ static bool set_pchan_glColor(short colCode, int boneflag, short constflag)
cp_shade_color3ub(cp, -30);
}
- glColor3ubv(cp);
+ rgb_uchar_to_float(fcolor, cp);
}
else {
- if (boneflag & BONE_DRAW_ACTIVE) UI_ThemeColorShade(TH_BONE_POSE, 10);
- else if (boneflag & BONE_SELECTED) UI_ThemeColorShade(TH_BONE_POSE, -30);
- else UI_ThemeColorShade(TH_BONE_SOLID, -30);
+ if (boneflag & BONE_DRAW_ACTIVE) {
+ UI_GetThemeColorShade4fv(TH_BONE_POSE, 10, fcolor);
+ }
+ else if (boneflag & BONE_SELECTED) {
+ UI_GetThemeColorShade4fv(TH_BONE_POSE, -30, fcolor);
+ }
+ else {
+ UI_GetThemeColorShade4fv(TH_BONE_SOLID, -30, fcolor);
+ }
}
break;
}
@@ -266,19 +289,24 @@ static bool set_pchan_glColor(short colCode, int boneflag, short constflag)
{
/* inner part in background color or constraint */
if ((constflag) && ((bcolor == NULL) || (bcolor->flag & TH_WIRECOLOR_CONSTCOLS))) {
- if (constflag & PCHAN_HAS_TARGET) glColor3ub(255, 150, 0);
- else if (constflag & PCHAN_HAS_IK) glColor3ub(255, 255, 0);
- else if (constflag & PCHAN_HAS_SPLINEIK) glColor3ub(200, 255, 0);
- else if (constflag & PCHAN_HAS_CONST) glColor3ub(0, 255, 120);
- else if (constflag) UI_ThemeColor(TH_BONE_POSE); /* PCHAN_HAS_ACTION */
+ unsigned char cp[4];
+ if (constflag & PCHAN_HAS_TARGET) rgba_char_args_set((char *)cp, 255, 150, 0, 255);
+ else if (constflag & PCHAN_HAS_IK) rgba_char_args_set((char *)cp, 255, 255, 0, 255);
+ else if (constflag & PCHAN_HAS_SPLINEIK) rgba_char_args_set((char *)cp, 200, 255, 0, 255);
+ else if (constflag & PCHAN_HAS_CONST) rgba_char_args_set((char *)cp, 0, 255, 120, 255);
+ else if (constflag) UI_GetThemeColor4ubv(TH_BONE_POSE, cp); /* PCHAN_HAS_ACTION */
+
+ rgb_uchar_to_float(fcolor, cp);
}
else {
if (bcolor) {
const char *cp = bcolor->solid;
- glColor4ub(cp[0], cp[1], cp[2], 204);
+ rgb_uchar_to_float(fcolor, (unsigned char *)cp);
+ fcolor[3] = 204.f / 255.f;
+ }
+ else {
+ UI_GetThemeColorShade4fv(TH_BACK, -30, fcolor);
}
- else
- UI_ThemeColorShade(TH_BACK, -30);
}
return true;
@@ -288,26 +316,37 @@ static bool set_pchan_glColor(short colCode, int boneflag, short constflag)
return false;
}
-static void set_ebone_glColor(const unsigned int boneflag)
+static void set_ebone_color(const unsigned int boneflag)
{
if ((boneflag & BONE_DRAW_ACTIVE) && (boneflag & BONE_SELECTED)) {
- UI_ThemeColor(TH_EDGE_SELECT);
+ UI_GetThemeColor4fv(TH_EDGE_SELECT, fcolor);
}
else if (boneflag & BONE_DRAW_ACTIVE) {
- UI_ThemeColorBlend(TH_WIRE_EDIT, TH_EDGE_SELECT, 0.15f); /* unselected active */
+ UI_GetThemeColorBlendShade4fv(TH_WIRE_EDIT, TH_EDGE_SELECT, 0.15f, 0, fcolor);
}
else if (boneflag & BONE_SELECTED) {
- UI_ThemeColorShade(TH_EDGE_SELECT, -20);
+ UI_GetThemeColorShade4fv(TH_EDGE_SELECT, -20, fcolor);
}
else {
- UI_ThemeColor(TH_WIRE_EDIT);
+ UI_GetThemeColor4fv(TH_WIRE_EDIT, fcolor);
}
}
/* *************** Armature drawing, helper calls for parts ******************* */
+static void add_solid_flat_triangle(Gwn_VertBuf *vbo, unsigned int *vertex, unsigned int pos, unsigned int nor,
+ const float p1[3], const float p2[3], const float p3[3], const float n[3])
+{
+ GWN_vertbuf_attr_set(vbo, nor, *vertex, n);
+ GWN_vertbuf_attr_set(vbo, pos, (*vertex)++, p1);
+ GWN_vertbuf_attr_set(vbo, nor, *vertex, n);
+ GWN_vertbuf_attr_set(vbo, pos, (*vertex)++, p2);
+ GWN_vertbuf_attr_set(vbo, nor, *vertex, n);
+ GWN_vertbuf_attr_set(vbo, pos, (*vertex)++, p3);
+}
+
/* half the cube, in Y */
-static const float cube[8][3] = {
+static const float cube_vert[8][3] = {
{-1.0, 0.0, -1.0},
{-1.0, 0.0, 1.0},
{-1.0, 1.0, 1.0},
@@ -318,128 +357,184 @@ static const float cube[8][3] = {
{ 1.0, 1.0, -1.0},
};
+static const float cube_wire[24] = {
+ 0, 1, 1, 2, 2, 3, 3, 0,
+ 4, 5, 5, 6, 6, 7, 7, 4,
+ 0, 4, 1, 5, 2, 6, 3, 7,
+};
+
static void drawsolidcube_size(float xsize, float ysize, float zsize)
{
- static GLuint displist = 0;
- float n[3] = {0.0f};
-
- glScalef(xsize, ysize, zsize);
-
- if (displist == 0) {
- displist = glGenLists(1);
- glNewList(displist, GL_COMPILE);
+ static Gwn_VertFormat format = {0};
+ static Gwn_VertBuf vbo = {{0}};
+ static Gwn_Batch batch = {{0}};
+ const float light_vec[3] = {0.0f, 0.0f, 1.0f};
+
+ if (format.attrib_ct == 0) {
+ unsigned int i = 0;
+ float n[3] = {0.0f};
+ /* Vertex format */
+ unsigned int pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ unsigned int nor = GWN_vertformat_attr_add(&format, "nor", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ /* Vertices */
+ GWN_vertbuf_init_with_format(&vbo, &format);
+ GWN_vertbuf_data_alloc(&vbo, 36);
- glBegin(GL_QUADS);
n[0] = -1.0;
- glNormal3fv(n);
- glVertex3fv(cube[0]); glVertex3fv(cube[1]); glVertex3fv(cube[2]); glVertex3fv(cube[3]);
+ add_solid_flat_triangle(&vbo, &i, pos, nor, cube_vert[0], cube_vert[1], cube_vert[2], n);
+ add_solid_flat_triangle(&vbo, &i, pos, nor, cube_vert[2], cube_vert[3], cube_vert[0], n);
n[0] = 0;
n[1] = -1.0;
- glNormal3fv(n);
- glVertex3fv(cube[0]); glVertex3fv(cube[4]); glVertex3fv(cube[5]); glVertex3fv(cube[1]);
+ add_solid_flat_triangle(&vbo, &i, pos, nor, cube_vert[0], cube_vert[4], cube_vert[5], n);
+ add_solid_flat_triangle(&vbo, &i, pos, nor, cube_vert[5], cube_vert[1], cube_vert[0], n);
n[1] = 0;
n[0] = 1.0;
- glNormal3fv(n);
- glVertex3fv(cube[4]); glVertex3fv(cube[7]); glVertex3fv(cube[6]); glVertex3fv(cube[5]);
+ add_solid_flat_triangle(&vbo, &i, pos, nor, cube_vert[4], cube_vert[7], cube_vert[6], n);
+ add_solid_flat_triangle(&vbo, &i, pos, nor, cube_vert[6], cube_vert[5], cube_vert[4], n);
n[0] = 0;
n[1] = 1.0;
- glNormal3fv(n);
- glVertex3fv(cube[7]); glVertex3fv(cube[3]); glVertex3fv(cube[2]); glVertex3fv(cube[6]);
+ add_solid_flat_triangle(&vbo, &i, pos, nor, cube_vert[7], cube_vert[3], cube_vert[2], n);
+ add_solid_flat_triangle(&vbo, &i, pos, nor, cube_vert[2], cube_vert[6], cube_vert[7], n);
n[1] = 0;
n[2] = 1.0;
- glNormal3fv(n);
- glVertex3fv(cube[1]); glVertex3fv(cube[5]); glVertex3fv(cube[6]); glVertex3fv(cube[2]);
+ add_solid_flat_triangle(&vbo, &i, pos, nor, cube_vert[1], cube_vert[5], cube_vert[6], n);
+ add_solid_flat_triangle(&vbo, &i, pos, nor, cube_vert[6], cube_vert[2], cube_vert[1], n);
n[2] = -1.0;
- glNormal3fv(n);
- glVertex3fv(cube[7]); glVertex3fv(cube[4]); glVertex3fv(cube[0]); glVertex3fv(cube[3]);
- glEnd();
+ add_solid_flat_triangle(&vbo, &i, pos, nor, cube_vert[7], cube_vert[4], cube_vert[0], n);
+ add_solid_flat_triangle(&vbo, &i, pos, nor, cube_vert[0], cube_vert[3], cube_vert[7], n);
- glEndList();
+ GWN_batch_init(&batch, GWN_PRIM_TRIS, &vbo, NULL);
}
- glCallList(displist);
+ gpuPushMatrix();
+ gpuScale3f(xsize, ysize, zsize);
+
+ if (flat_color) {
+ GWN_batch_program_set_builtin(&batch, GPU_SHADER_3D_UNIFORM_COLOR);
+ }
+ else {
+ /* TODO replace with good default lighting shader ? */
+ GWN_batch_program_set_builtin(&batch, GPU_SHADER_SIMPLE_LIGHTING);
+ GWN_batch_uniform_3fv(&batch, "light", light_vec);
+ }
+ GWN_batch_uniform_4fv(&batch, "color", fcolor);
+ GWN_batch_draw(&batch);
+
+ gpuPopMatrix();
}
static void drawcube_size(float xsize, float ysize, float zsize)
{
- static GLuint displist = 0;
-
- if (displist == 0) {
- displist = glGenLists(1);
- glNewList(displist, GL_COMPILE);
-
- glBegin(GL_LINE_STRIP);
- glVertex3fv(cube[0]); glVertex3fv(cube[1]); glVertex3fv(cube[2]); glVertex3fv(cube[3]);
- glVertex3fv(cube[0]); glVertex3fv(cube[4]); glVertex3fv(cube[5]); glVertex3fv(cube[6]);
- glVertex3fv(cube[7]); glVertex3fv(cube[4]);
- glEnd();
-
- glBegin(GL_LINES);
- glVertex3fv(cube[1]); glVertex3fv(cube[5]);
- glVertex3fv(cube[2]); glVertex3fv(cube[6]);
- glVertex3fv(cube[3]); glVertex3fv(cube[7]);
- glEnd();
-
- glEndList();
+ static Gwn_VertFormat format = {0};
+ static Gwn_VertBuf vbo = {{0}};
+ static Gwn_IndexBufBuilder elb = {0};
+ static Gwn_IndexBuf el = {0};
+ static Gwn_Batch batch = {{0}};
+
+ if (format.attrib_ct == 0) {
+ /* Vertex format */
+ unsigned int pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ /* Elements */
+ GWN_indexbuf_init(&elb, GWN_PRIM_LINES, 12, 8);
+ for (int i = 0; i < 12; ++i) {
+ GWN_indexbuf_add_line_verts(&elb, cube_wire[i * 2], cube_wire[i * 2 + 1]);
+ }
+ GWN_indexbuf_build_in_place(&elb, &el);
+
+ /* Vertices */
+ GWN_vertbuf_init_with_format(&vbo, &format);
+ GWN_vertbuf_data_alloc(&vbo, 8);
+ for (int i = 0; i < 8; ++i) {
+ GWN_vertbuf_attr_set(&vbo, pos, i, cube_vert[i]);
+ }
+
+ GWN_batch_init(&batch, GWN_PRIM_LINES, &vbo, &el);
+ GWN_batch_program_set_builtin(&batch, GPU_SHADER_3D_UNIFORM_COLOR);
}
- glScalef(xsize, ysize, zsize);
- glCallList(displist);
-
+ gpuPushMatrix();
+ gpuScale3f(xsize, ysize, zsize);
+
+ GWN_batch_program_use_begin(&batch);
+ GWN_batch_uniform_4fv(&batch, "color", fcolor);
+ GWN_batch_draw(&batch);
+
+ gpuPopMatrix();
}
static void draw_bonevert(void)
{
- static GLuint displist = 0;
-
- if (displist == 0) {
- GLUquadricObj *qobj;
-
- displist = glGenLists(1);
- glNewList(displist, GL_COMPILE);
-
- glPushMatrix();
-
- qobj = gluNewQuadric();
- gluQuadricDrawStyle(qobj, GLU_SILHOUETTE);
- gluDisk(qobj, 0.0, 0.05, 16, 1);
-
- glRotatef(90, 0, 1, 0);
- gluDisk(qobj, 0.0, 0.05, 16, 1);
-
- glRotatef(90, 1, 0, 0);
- gluDisk(qobj, 0.0, 0.05, 16, 1);
-
- gluDeleteQuadric(qobj);
-
- glPopMatrix();
- glEndList();
+ static Gwn_VertFormat format = {0};
+ static Gwn_VertBuf vbo = {{0}};
+ static Gwn_Batch batch = {{0}};
+
+ if (format.attrib_ct == 0) {
+ /* Vertex format */
+ unsigned int pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ /* Vertices */
+ GWN_vertbuf_init_with_format(&vbo, &format);
+ GWN_vertbuf_data_alloc(&vbo, 96);
+ for (int i = 0; i < 16; ++i) {
+ float vert[3] = {0.f, 0.f, 0.f};
+ const float r = 0.05f;
+
+ vert[0] = r * cosf(2 * M_PI * i / 16.f);
+ vert[1] = r * sinf(2 * M_PI * i / 16.f);
+ GWN_vertbuf_attr_set(&vbo, pos, i * 6 + 0, vert);
+ vert[0] = r * cosf(2 * M_PI * (i + 1) / 16.f);
+ vert[1] = r * sinf(2 * M_PI * (i + 1) / 16.f);
+ GWN_vertbuf_attr_set(&vbo, pos, i * 6 + 1, vert);
+
+ vert[0] = 0.f;
+ vert[1] = r * cosf(2 * M_PI * i / 16.f);
+ vert[2] = r * sinf(2 * M_PI * i / 16.f);
+ GWN_vertbuf_attr_set(&vbo, pos, i * 6 + 2, vert);
+ vert[1] = r * cosf(2 * M_PI * (i + 1) / 16.f);
+ vert[2] = r * sinf(2 * M_PI * (i + 1) / 16.f);
+ GWN_vertbuf_attr_set(&vbo, pos, i * 6 + 3, vert);
+
+ vert[1] = 0.f;
+ vert[0] = r * cosf(2 * M_PI * i / 16.f);
+ vert[2] = r * sinf(2 * M_PI * i / 16.f);
+ GWN_vertbuf_attr_set(&vbo, pos, i * 6 + 4, vert);
+ vert[0] = r * cosf(2 * M_PI * (i + 1) / 16.f);
+ vert[2] = r * sinf(2 * M_PI * (i + 1) / 16.f);
+ GWN_vertbuf_attr_set(&vbo, pos, i * 6 + 5, vert);
+ }
+
+ GWN_batch_init(&batch, GWN_PRIM_LINES, &vbo, NULL);
+ GWN_batch_program_set_builtin(&batch, GPU_SHADER_3D_UNIFORM_COLOR);
}
- glCallList(displist);
+ GWN_batch_program_use_begin(&batch);
+ GWN_batch_uniform_4fv(&batch, "color", fcolor);
+ GWN_batch_draw(&batch);
}
static void draw_bonevert_solid(void)
{
- static GLuint displist = 0;
-
- if (displist == 0) {
- GLUquadricObj *qobj;
-
- displist = glGenLists(1);
- glNewList(displist, GL_COMPILE);
-
- qobj = gluNewQuadric();
- gluQuadricDrawStyle(qobj, GLU_FILL);
- /* Draw tips of a bone */
- gluSphere(qobj, 0.05, 8, 5);
- gluDeleteQuadric(qobj);
-
- glEndList();
+ Gwn_Batch *batch = GPU_batch_preset_sphere(0);
+ const float light_vec[3] = {0.0f, 0.0f, 1.0f};
+
+ gpuPushMatrix();
+ gpuScaleUniform(0.05);
+
+ if (flat_color) {
+ GWN_batch_program_set_builtin(batch, GPU_SHADER_3D_UNIFORM_COLOR);
}
+ else {
+ /* TODO replace with good default lighting shader ? */
+ GWN_batch_program_set_builtin(batch, GPU_SHADER_SIMPLE_LIGHTING);
+ GWN_batch_uniform_3fv(batch, "light", light_vec);
+ }
+ GWN_batch_uniform_4fv(batch, "color", fcolor);
+ GWN_batch_draw(batch);
- glCallList(displist);
+ gpuPopMatrix();
}
static const float bone_octahedral_verts[6][3] = {
@@ -451,8 +546,11 @@ static const float bone_octahedral_verts[6][3] = {
{ 0.0f, 1.0f, 0.0f}
};
-static const unsigned int bone_octahedral_wire_sides[8] = {0, 1, 5, 3, 0, 4, 5, 2};
-static const unsigned int bone_octahedral_wire_square[8] = {1, 2, 3, 4, 1};
+static const unsigned int bone_octahedral_wire[24] = {
+ 0, 1, 1, 5, 5, 3, 3, 0,
+ 0, 4, 4, 5, 5, 2, 2, 0,
+ 1, 2, 2, 3, 3, 4, 4, 1,
+};
static const unsigned int bone_octahedral_solid_tris[8][3] = {
{2, 1, 0}, /* bottom */
@@ -480,70 +578,78 @@ static const float bone_octahedral_solid_normals[8][3] = {
static void draw_bone_octahedral(void)
{
- static GLuint displist = 0;
-
- if (displist == 0) {
- displist = glGenLists(1);
- glNewList(displist, GL_COMPILE);
-
- /* Section 1, sides */
- glEnableClientState(GL_VERTEX_ARRAY);
- glVertexPointer(3, GL_FLOAT, 0, bone_octahedral_verts);
- glDrawElements(GL_LINE_LOOP,
- sizeof(bone_octahedral_wire_sides) / sizeof(*bone_octahedral_wire_sides),
- GL_UNSIGNED_INT,
- bone_octahedral_wire_sides);
-
- /* Section 1, square */
- glDrawElements(GL_LINE_LOOP,
- sizeof(bone_octahedral_wire_square) / sizeof(*bone_octahedral_wire_square),
- GL_UNSIGNED_INT,
- bone_octahedral_wire_square);
- glDisableClientState(GL_VERTEX_ARRAY);
-
- glEndList();
+ static Gwn_VertFormat format = {0};
+ static Gwn_VertBuf vbo = {{0}};
+ static Gwn_IndexBufBuilder elb = {0};
+ static Gwn_IndexBuf el = {0};
+ static Gwn_Batch batch = {{0}};
+
+ if (format.attrib_ct == 0) {
+ /* Vertex format */
+ unsigned int pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ /* Elements */
+ GWN_indexbuf_init(&elb, GWN_PRIM_LINES, 12, 6);
+ for (int i = 0; i < 12; ++i) {
+ GWN_indexbuf_add_line_verts(&elb, bone_octahedral_wire[i * 2], bone_octahedral_wire[i * 2 + 1]);
+ }
+ GWN_indexbuf_build_in_place(&elb, &el);
+
+ /* Vertices */
+ GWN_vertbuf_init_with_format(&vbo, &format);
+ GWN_vertbuf_data_alloc(&vbo, 6);
+ for (int i = 0; i < 6; ++i) {
+ GWN_vertbuf_attr_set(&vbo, pos, i, bone_octahedral_verts[i]);
+ }
+
+ GWN_batch_init(&batch, GWN_PRIM_LINES, &vbo, &el);
+ GWN_batch_program_set_builtin(&batch, GPU_SHADER_3D_UNIFORM_COLOR);
}
- glCallList(displist);
-}
+ GWN_batch_program_use_begin(&batch);
+ GWN_batch_uniform_4fv(&batch, "color", fcolor);
+ GWN_batch_draw(&batch);
+}
static void draw_bone_solid_octahedral(void)
{
- static GLuint displist = 0;
-
- if (displist == 0) {
- int i;
-
- displist = glGenLists(1);
- glNewList(displist, GL_COMPILE);
-
-#if 1
- glBegin(GL_TRIANGLES);
- for (i = 0; i < 8; i++) {
- glNormal3fv(bone_octahedral_solid_normals[i]);
- glVertex3fv(bone_octahedral_verts[bone_octahedral_solid_tris[i][0]]);
- glVertex3fv(bone_octahedral_verts[bone_octahedral_solid_tris[i][1]]);
- glVertex3fv(bone_octahedral_verts[bone_octahedral_solid_tris[i][2]]);
- }
-
- glEnd();
-
-#else /* not working because each vert needs a different normal */
- glEnableClientState(GL_NORMAL_ARRAY);
- glEnableClientState(GL_VERTEX_ARRAY);
- glNormalPointer(GL_FLOAT, 0, bone_octahedral_solid_normals);
- glVertexPointer(3, GL_FLOAT, 0, bone_octahedral_verts);
- glDrawElements(GL_TRIANGLES, sizeof(bone_octahedral_solid_tris) / sizeof(unsigned int),
- GL_UNSIGNED_INT, bone_octahedral_solid_tris);
- glDisableClientState(GL_NORMAL_ARRAY);
- glDisableClientState(GL_VERTEX_ARRAY);
-#endif
+ static Gwn_VertFormat format = {0};
+ static Gwn_VertBuf vbo = {{0}};
+ static Gwn_Batch batch = {{0}};
+ const float light_vec[3] = {0.0f, 0.0f, 1.0f};
+
+ if (format.attrib_ct == 0) {
+ unsigned int v_idx = 0;
+ /* Vertex format */
+ unsigned int pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ unsigned int nor = GWN_vertformat_attr_add(&format, "nor", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ /* Vertices */
+ GWN_vertbuf_init_with_format(&vbo, &format);
+ GWN_vertbuf_data_alloc(&vbo, 24);
+
+ for (int i = 0; i < 8; i++) {
+ add_solid_flat_triangle(&vbo, &v_idx, pos, nor,
+ bone_octahedral_verts[bone_octahedral_solid_tris[i][0]],
+ bone_octahedral_verts[bone_octahedral_solid_tris[i][1]],
+ bone_octahedral_verts[bone_octahedral_solid_tris[i][2]],
+ bone_octahedral_solid_normals[i]);
+ }
- glEndList();
+ GWN_batch_init(&batch, GWN_PRIM_TRIS, &vbo, NULL);
}
- glCallList(displist);
-}
+ if (flat_color) {
+ GWN_batch_program_set_builtin(&batch, GPU_SHADER_3D_UNIFORM_COLOR);
+ }
+ else {
+ /* TODO replace with good default lighting shader ? */
+ GWN_batch_program_set_builtin(&batch, GPU_SHADER_SIMPLE_LIGHTING);
+ GWN_batch_uniform_3fv(&batch, "light", light_vec);
+ }
+ GWN_batch_uniform_4fv(&batch, "color", fcolor);
+ GWN_batch_draw(&batch);
+}
/* *************** Armature drawing, bones ******************* */
@@ -557,15 +663,20 @@ static void draw_bone_points(const short dt, int armflag, unsigned int boneflag,
if (dt <= OB_WIRE) {
if (armflag & ARM_EDITMODE) {
- if (boneflag & BONE_ROOTSEL) UI_ThemeColor(TH_VERTEX_SELECT);
- else UI_ThemeColor(TH_VERTEX);
+ if (boneflag & BONE_ROOTSEL) {
+ UI_GetThemeColor4fv(TH_VERTEX_SELECT, fcolor);
+ }
+ else {
+ UI_GetThemeColor4fv(TH_VERTEX, fcolor);
+ }
}
}
else {
if (armflag & ARM_POSEMODE)
- set_pchan_glColor(PCHAN_COLOR_SOLID, boneflag, 0);
- else
- UI_ThemeColor(TH_BONE_SOLID);
+ set_pchan_color(PCHAN_COLOR_SOLID, boneflag, 0);
+ else {
+ UI_GetThemeColor4fv(TH_BONE_SOLID, fcolor);
+ }
}
if (dt > OB_WIRE)
@@ -580,24 +691,29 @@ static void draw_bone_points(const short dt, int armflag, unsigned int boneflag,
if (dt <= OB_WIRE) {
if (armflag & ARM_EDITMODE) {
- if (boneflag & BONE_TIPSEL) UI_ThemeColor(TH_VERTEX_SELECT);
- else UI_ThemeColor(TH_VERTEX);
+ if (boneflag & BONE_TIPSEL) {
+ UI_GetThemeColor4fv(TH_VERTEX_SELECT, fcolor);
+ }
+ else {
+ UI_GetThemeColor4fv(TH_VERTEX, fcolor);
+ }
}
}
else {
if (armflag & ARM_POSEMODE)
- set_pchan_glColor(PCHAN_COLOR_SOLID, boneflag, 0);
- else
- UI_ThemeColor(TH_BONE_SOLID);
+ set_pchan_color(PCHAN_COLOR_SOLID, boneflag, 0);
+ else {
+ UI_GetThemeColor4fv(TH_BONE_SOLID, fcolor);
+ }
}
- glTranslatef(0.0f, 1.0f, 0.0f);
+ gpuPushMatrix();
+ gpuTranslate2f(0.0f, 1.0f);
if (dt > OB_WIRE)
draw_bonevert_solid();
else
draw_bonevert();
- glTranslatef(0.0f, -1.0f, 0.0f);
-
+ gpuPopMatrix();
}
/* 16 values of sin function (still same result!) */
@@ -696,8 +812,13 @@ static void draw_sphere_bone_dist(float smat[4][4], float imat[4][4], bPoseChann
//mul_v3_fl(dirvec, head);
cross_v3_v3v3(norvec, dirvec, imat[2]);
-
- glBegin(GL_QUAD_STRIP);
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immBegin(GWN_PRIM_TRI_STRIP, 66);
+ immUniformColor4ub(255, 255, 255, 50);
for (a = 0; a < 16; a++) {
vec[0] = -si[a] * dirvec[0] + co[a] * norvec[0];
@@ -707,10 +828,8 @@ static void draw_sphere_bone_dist(float smat[4][4], float imat[4][4], bPoseChann
madd_v3_v3v3fl(vec1, headvec, vec, head);
madd_v3_v3v3fl(vec2, headvec, vec, head + dist);
- glColor4ub(255, 255, 255, 50);
- glVertex3fv(vec1);
- //glColor4ub(255, 255, 255, 0);
- glVertex3fv(vec2);
+ immVertex3fv(pos, vec1);
+ immVertex3fv(pos, vec2);
}
for (a = 15; a >= 0; a--) {
@@ -721,10 +840,8 @@ static void draw_sphere_bone_dist(float smat[4][4], float imat[4][4], bPoseChann
madd_v3_v3v3fl(vec1, tailvec, vec, tail);
madd_v3_v3v3fl(vec2, tailvec, vec, tail + dist);
- //glColor4ub(255, 255, 255, 50);
- glVertex3fv(vec1);
- //glColor4ub(255, 255, 255, 0);
- glVertex3fv(vec2);
+ immVertex3fv(pos, vec1);
+ immVertex3fv(pos, vec2);
}
/* make it cyclic... */
@@ -735,12 +852,11 @@ static void draw_sphere_bone_dist(float smat[4][4], float imat[4][4], bPoseChann
madd_v3_v3v3fl(vec1, headvec, vec, head);
madd_v3_v3v3fl(vec2, headvec, vec, head + dist);
- //glColor4ub(255, 255, 255, 50);
- glVertex3fv(vec1);
- //glColor4ub(255, 255, 255, 0);
- glVertex3fv(vec2);
+ immVertex3fv(pos, vec1);
+ immVertex3fv(pos, vec2);
- glEnd();
+ immEnd();
+ immUnbindProgram();
}
}
@@ -752,6 +868,11 @@ static void draw_sphere_bone_wire(float smat[4][4], float imat[4][4],
{
float head, tail /*, length*/;
float *headvec, *tailvec, dirvec[3];
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
/* figure out the sizes of spheres */
if (ebone) {
@@ -780,35 +901,49 @@ static void draw_sphere_bone_wire(float smat[4][4], float imat[4][4],
/* sphere root color */
if (armflag & ARM_EDITMODE) {
- if (boneflag & BONE_ROOTSEL) UI_ThemeColor(TH_VERTEX_SELECT);
- else UI_ThemeColor(TH_VERTEX);
+ if (boneflag & BONE_ROOTSEL) {
+ UI_GetThemeColor4fv(TH_VERTEX_SELECT, fcolor);
+ }
+ else {
+ UI_GetThemeColor4fv(TH_VERTEX, fcolor);
+ }
}
else if (armflag & ARM_POSEMODE)
- set_pchan_glColor(PCHAN_COLOR_NORMAL, boneflag, constflag);
-
+ set_pchan_color(PCHAN_COLOR_NORMAL, boneflag, constflag);
+
+ immUniformColor4fv(fcolor);
+
/* Draw root point if we are not connected */
if ((boneflag & BONE_CONNECTED) == 0) {
if (id != -1)
GPU_select_load_id(id | BONESEL_ROOT);
- drawcircball(GL_LINE_LOOP, headvec, head, imat);
+ imm_drawcircball(headvec, head, imat, pos);
}
/* Draw tip point */
if (armflag & ARM_EDITMODE) {
- if (boneflag & BONE_TIPSEL) UI_ThemeColor(TH_VERTEX_SELECT);
- else UI_ThemeColor(TH_VERTEX);
+ if (boneflag & BONE_TIPSEL) {
+ UI_GetThemeColor4fv(TH_VERTEX_SELECT, fcolor);
+ }
+ else {
+ UI_GetThemeColor4fv(TH_VERTEX, fcolor);
+ }
}
if (id != -1)
GPU_select_load_id(id | BONESEL_TIP);
- drawcircball(GL_LINE_LOOP, tailvec, tail, imat);
+ imm_drawcircball(tailvec, tail, imat, pos);
/* base */
if (armflag & ARM_EDITMODE) {
- if (boneflag & BONE_SELECTED) UI_ThemeColor(TH_SELECT);
- else UI_ThemeColor(TH_WIRE_EDIT);
+ if (boneflag & BONE_SELECTED) {
+ UI_GetThemeColor4fv(TH_SELECT, fcolor);
+ }
+ else {
+ UI_GetThemeColor4fv(TH_WIRE_EDIT, fcolor);
+ }
}
sub_v3_v3v3(dirvec, tailvec, headvec);
@@ -834,34 +969,40 @@ static void draw_sphere_bone_wire(float smat[4][4], float imat[4][4],
if (id != -1)
GPU_select_load_id(id | BONESEL_BONE);
- glBegin(GL_LINES);
+ immBegin(GWN_PRIM_LINES, 4);
add_v3_v3v3(vec, headvec, norvech);
- glVertex3fv(vec);
+ immVertex3fv(pos, vec);
add_v3_v3v3(vec, tailvec, norvect);
- glVertex3fv(vec);
+ immVertex3fv(pos, vec);
sub_v3_v3v3(vec, headvec, norvech);
- glVertex3fv(vec);
+ immVertex3fv(pos, vec);
sub_v3_v3v3(vec, tailvec, norvect);
- glVertex3fv(vec);
+ immVertex3fv(pos, vec);
- glEnd();
+ immEnd();
}
+
+ immUnbindProgram();
}
/* does wire only for outline selecting */
static void draw_sphere_bone(const short dt, int armflag, int boneflag, short constflag, unsigned int id,
bPoseChannel *pchan, EditBone *ebone)
{
- GLUquadricObj *qobj;
+ Gwn_Batch *sphere = GPU_batch_preset_sphere(1);
float head, tail, length;
- float fac1, fac2;
-
- glPushMatrix();
- qobj = gluNewQuadric();
+ float fac1, fac2, size1, size2;
+ const float light_vec[3] = {0.0f, 0.0f, 1.0f};
+
+ /* dt is always OB_SOlID */
+ GWN_batch_program_set_builtin(sphere, GPU_SHADER_SIMPLE_LIGHTING);
+ GWN_batch_uniform_3fv(sphere, "light", light_vec);
+
+ gpuPushMatrix();
/* figure out the sizes of spheres */
if (ebone) {
@@ -882,110 +1023,124 @@ static void draw_sphere_bone(const short dt, int armflag, int boneflag, short co
}
/* move to z-axis space */
- glRotatef(-90.0f, 1.0f, 0.0f, 0.0f);
+ gpuRotateAxis(-90.0f, 'X');
- if (dt == OB_SOLID) {
- /* set up solid drawing */
- GPU_basic_shader_bind(GPU_SHADER_LIGHTING | GPU_SHADER_USE_COLOR);
-
- gluQuadricDrawStyle(qobj, GLU_FILL);
- }
- else {
- gluQuadricDrawStyle(qobj, GLU_SILHOUETTE);
- }
-
/* sphere root color */
if (armflag & ARM_EDITMODE) {
- if (boneflag & BONE_ROOTSEL) UI_ThemeColor(TH_VERTEX_SELECT);
- else UI_ThemeColorShade(TH_BONE_SOLID, -30);
+ if (boneflag & BONE_ROOTSEL)
+ UI_GetThemeColor4fv(TH_VERTEX_SELECT, fcolor);
+ else
+ UI_GetThemeColorShade4fv(TH_BONE_SOLID, -30, fcolor);
}
else if (armflag & ARM_POSEMODE)
- set_pchan_glColor(PCHAN_COLOR_SPHEREBONE_END, boneflag, constflag);
+ set_pchan_color(PCHAN_COLOR_SPHEREBONE_END, boneflag, constflag);
else if (dt == OB_SOLID)
- UI_ThemeColorShade(TH_BONE_SOLID, -30);
+ UI_GetThemeColorShade4fv(TH_BONE_SOLID, -30, fcolor);
/* Draw root point if we are not connected */
if ((boneflag & BONE_CONNECTED) == 0) {
if (id != -1)
GPU_select_load_id(id | BONESEL_ROOT);
- gluSphere(qobj, head, 16, 10);
+ gpuPushMatrix();
+ gpuScaleUniform(head);
+ GWN_batch_uniform_4fv(sphere, "color", fcolor);
+ GWN_batch_draw(sphere);
+ gpuPopMatrix();
}
/* Draw tip point */
if (armflag & ARM_EDITMODE) {
- if (boneflag & BONE_TIPSEL) UI_ThemeColor(TH_VERTEX_SELECT);
- else UI_ThemeColorShade(TH_BONE_SOLID, -30);
+ if (boneflag & BONE_TIPSEL) UI_GetThemeColor4fv(TH_VERTEX_SELECT, fcolor);
+ else UI_GetThemeColorShade4fv(TH_BONE_SOLID, -30, fcolor);
}
if (id != -1)
GPU_select_load_id(id | BONESEL_TIP);
- glTranslatef(0.0f, 0.0f, length);
- gluSphere(qobj, tail, 16, 10);
- glTranslatef(0.0f, 0.0f, -length);
+ gpuTranslate3f(0.0f, 0.0f, length);
+
+ gpuPushMatrix();
+ gpuScaleUniform(tail);
+ GWN_batch_program_use_begin(sphere); /* hack to make the following uniforms stick */
+ GWN_batch_uniform_4fv(sphere, "color", fcolor);
+ GWN_batch_draw(sphere);
+ gpuPopMatrix();
+
+ gpuTranslate3f(0.0f, 0.0f, -length);
/* base */
if (armflag & ARM_EDITMODE) {
- if (boneflag & BONE_SELECTED) UI_ThemeColor(TH_SELECT);
- else UI_ThemeColor(TH_BONE_SOLID);
+ if (boneflag & BONE_SELECTED) UI_GetThemeColor4fv(TH_SELECT, fcolor);
+ else UI_GetThemeColor4fv(TH_BONE_SOLID, fcolor);
}
else if (armflag & ARM_POSEMODE)
- set_pchan_glColor(PCHAN_COLOR_SPHEREBONE_BASE, boneflag, constflag);
+ set_pchan_color(PCHAN_COLOR_SPHEREBONE_BASE, boneflag, constflag);
else if (dt == OB_SOLID)
- UI_ThemeColor(TH_BONE_SOLID);
+ UI_GetThemeColor4fv(TH_BONE_SOLID, fcolor);
+
+ GWN_batch_program_use_begin(sphere); /* hack to make the following uniforms stick */
+ GWN_batch_uniform_4fv(sphere, "color", fcolor);
fac1 = (length - head) / length;
fac2 = (length - tail) / length;
if (length > (head + tail)) {
+ size1 = fac2 * tail + (1.0f - fac2) * head;
+ size2 = fac1 * head + (1.0f - fac1) * tail;
+
if (id != -1)
GPU_select_load_id(id | BONESEL_BONE);
+ /* draw sphere on extrema */
+ gpuPushMatrix();
+ gpuTranslate3f(0.0f, 0.0f, length - tail);
+ gpuScaleUniform(size1);
+
+ GWN_batch_draw(sphere);
+ gpuPopMatrix();
+
+ gpuPushMatrix();
+ gpuTranslate3f(0.0f, 0.0f, head);
+ gpuScaleUniform(size2);
+
+ GWN_batch_draw(sphere);
+ gpuPopMatrix();
+
+ /* draw cynlinder between spheres */
glEnable(GL_POLYGON_OFFSET_FILL);
glPolygonOffset(-1.0f, -1.0f);
-
- glTranslatef(0.0f, 0.0f, head);
- gluCylinder(qobj, fac1 * head + (1.0f - fac1) * tail, fac2 * tail + (1.0f - fac2) * head, length - head - tail, 16, 1);
- glTranslatef(0.0f, 0.0f, -head);
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ unsigned int nor = GWN_vertformat_attr_add(format, "nor", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_SIMPLE_LIGHTING);
+ immUniformColor4fv(fcolor);
+ immUniform3fv("light", light_vec);
+
+ gpuTranslate3f(0.0f, 0.0f, head);
+ imm_draw_cylinder_fill_normal_3d(pos, nor, size2, size1, length - head - tail, 16, 1);
+
+ immUnbindProgram();
glDisable(GL_POLYGON_OFFSET_FILL);
-
- /* draw sphere on extrema */
- glTranslatef(0.0f, 0.0f, length - tail);
- gluSphere(qobj, fac2 * tail + (1.0f - fac2) * head, 16, 10);
- glTranslatef(0.0f, 0.0f, -length + tail);
-
- glTranslatef(0.0f, 0.0f, head);
- gluSphere(qobj, fac1 * head + (1.0f - fac1) * tail, 16, 10);
}
else {
+ size1 = fac1 * head + (1.0f - fac1) * tail;
+
/* 1 sphere in center */
- glTranslatef(0.0f, 0.0f, (head + length - tail) / 2.0f);
- gluSphere(qobj, fac1 * head + (1.0f - fac1) * tail, 16, 10);
- }
-
- /* restore */
- if (dt == OB_SOLID) {
- GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
+ gpuTranslate3f(0.0f, 0.0f, (head + length - tail) / 2.0f);
+
+ gpuScaleUniform(size1);
+ GWN_batch_draw(sphere);
}
- glPopMatrix();
- gluDeleteQuadric(qobj);
+ gpuPopMatrix();
}
-static GLubyte bm_dot6[] = {0x0, 0x18, 0x3C, 0x7E, 0x7E, 0x3C, 0x18, 0x0};
-static GLubyte bm_dot8[] = {0x3C, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x3C};
-
-static GLubyte bm_dot5[] = {0x0, 0x0, 0x10, 0x38, 0x7c, 0x38, 0x10, 0x0};
-static GLubyte bm_dot7[] = {0x0, 0x38, 0x7C, 0xFE, 0xFE, 0xFE, 0x7C, 0x38};
-
-
static void draw_line_bone(int armflag, int boneflag, short constflag, unsigned int id,
bPoseChannel *pchan, EditBone *ebone)
{
- /* call this once, avoid constant changing */
- BLI_assert(glaGetOneInt(GL_UNPACK_ALIGNMENT) == 1);
-
float length;
if (pchan)
@@ -993,103 +1148,119 @@ static void draw_line_bone(int armflag, int boneflag, short constflag, unsigned
else
length = ebone->length;
- glPushMatrix();
- glScalef(length, length, length);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ gpuPushMatrix();
+ gpuScaleUniform(length);
/* this chunk not in object mode */
if (armflag & (ARM_EDITMODE | ARM_POSEMODE)) {
glLineWidth(4.0f);
- if (G.f & G_PICKSEL) {
- /* no bitmap in selection mode, crashes 3d cards...
- * instead draw a solid point the same size */
- glPointSize(8.0f);
- }
+ glPointSize(8.0f);
if (armflag & ARM_POSEMODE)
- set_pchan_glColor(PCHAN_COLOR_NORMAL, boneflag, constflag);
+ set_pchan_color(PCHAN_COLOR_NORMAL, boneflag, constflag);
else if (armflag & ARM_EDITMODE) {
- UI_ThemeColor(TH_WIRE_EDIT);
+ UI_GetThemeColor4fv(TH_WIRE_EDIT, fcolor);
}
-
+
+ /* line */
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformColor4fv(fcolor);
+
+ if (id != -1)
+ GPU_select_load_id(id | BONESEL_BONE);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex3f(pos, 0.0f, 1.0f, 0.0f);
+ immVertex3f(pos, 0.0f, 0.0f, 0.0f);
+ immEnd();
+
+ immUnbindProgram();
+
+ immBindBuiltinProgram(GPU_SHADER_3D_POINT_FIXED_SIZE_UNIFORM_COLOR);
+ immUniformColor4fv(fcolor);
+
/* Draw root point if we are not connected */
if ((boneflag & BONE_CONNECTED) == 0) {
- if (G.f & G_PICKSEL) {
+ if (G.f & G_PICKSEL)
GPU_select_load_id(id | BONESEL_ROOT);
- glBegin(GL_POINTS);
- glVertex3f(0.0f, 0.0f, 0.0f);
- glEnd();
- }
- else {
- glRasterPos3f(0.0f, 0.0f, 0.0f);
- glBitmap(8, 8, 4, 4, 0, 0, bm_dot8);
- }
+
+ immBegin(GWN_PRIM_POINTS, 1);
+ immVertex3f(pos, 0.0f, 0.0f, 0.0f);
+ immEnd();
}
-
- if (id != -1)
- GPU_select_load_id((GLuint) id | BONESEL_BONE);
-
- glBegin(GL_LINES);
- glVertex3f(0.0f, 0.0f, 0.0f);
- glVertex3f(0.0f, 1.0f, 0.0f);
- glEnd();
-
+
/* tip */
- if (G.f & G_PICKSEL) {
- /* no bitmap in selection mode, crashes 3d cards... */
+ if (G.f & G_PICKSEL)
GPU_select_load_id(id | BONESEL_TIP);
- glBegin(GL_POINTS);
- glVertex3f(0.0f, 1.0f, 0.0f);
- glEnd();
- }
- else {
- glRasterPos3f(0.0f, 1.0f, 0.0f);
- glBitmap(8, 8, 4, 4, 0, 0, bm_dot7);
- }
-
+
+ immBegin(GWN_PRIM_POINTS, 1);
+ immVertex3f(pos, 0.0f, 1.0f, 0.0f);
+ immEnd();
+
+ immUnbindProgram();
+
+
/* further we send no names */
if (id != -1)
GPU_select_load_id(id & 0xFFFF); /* object tag, for bordersel optim */
if (armflag & ARM_POSEMODE)
- set_pchan_glColor(PCHAN_COLOR_LINEBONE, boneflag, constflag);
+ set_pchan_color(PCHAN_COLOR_LINEBONE, boneflag, constflag);
}
-
- glLineWidth(2.0);
-
+
+ /* Now draw the inner color */
+ glLineWidth(2.0f);
+ glPointSize(5.0f);
+
+ /* line */
+ if (armflag & ARM_EDITMODE) {
+ if (boneflag & BONE_SELECTED) UI_GetThemeColor4fv(TH_EDGE_SELECT, fcolor);
+ else UI_GetThemeColorShade4fv(TH_BACK, -30, fcolor);
+ }
+
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformColor4fv(fcolor);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex3f(pos, 0.0f, 1.0f, 0.0f);
+ immVertex3f(pos, 0.0f, 0.0f, 0.0f);
+ immEnd();
+
+ immUnbindProgram();
+
+ immBindBuiltinProgram(GPU_SHADER_3D_POINT_FIXED_SIZE_UNIFORM_COLOR);
+
/*Draw root point if we are not connected */
if ((boneflag & BONE_CONNECTED) == 0) {
- if ((G.f & G_PICKSEL) == 0) {
- /* no bitmap in selection mode, crashes 3d cards... */
- if (armflag & ARM_EDITMODE) {
- if (boneflag & BONE_ROOTSEL) UI_ThemeColor(TH_VERTEX_SELECT);
- else UI_ThemeColor(TH_VERTEX);
- }
- glRasterPos3f(0.0f, 0.0f, 0.0f);
- glBitmap(8, 8, 4, 4, 0, 0, bm_dot6);
+ if (armflag & ARM_EDITMODE) {
+ if (boneflag & BONE_ROOTSEL) UI_GetThemeColor4fv(TH_VERTEX_SELECT, fcolor);
+ else UI_GetThemeColor4fv(TH_VERTEX, fcolor);
}
+ immUniformColor4fv(fcolor);
+ immBegin(GWN_PRIM_POINTS, 1);
+ immVertex3f(pos, 0.0f, 0.0f, 0.0f);
+ immEnd();
}
-
- if (armflag & ARM_EDITMODE) {
- if (boneflag & BONE_SELECTED) UI_ThemeColor(TH_EDGE_SELECT);
- else UI_ThemeColorShade(TH_BACK, -30);
- }
- glBegin(GL_LINES);
- glVertex3f(0.0f, 0.0f, 0.0f);
- glVertex3f(0.0f, 1.0f, 0.0f);
- glEnd();
-
+
/* tip */
if ((G.f & G_PICKSEL) == 0) {
/* no bitmap in selection mode, crashes 3d cards... */
if (armflag & ARM_EDITMODE) {
- if (boneflag & BONE_TIPSEL) UI_ThemeColor(TH_VERTEX_SELECT);
- else UI_ThemeColor(TH_VERTEX);
+ if (boneflag & BONE_TIPSEL) UI_GetThemeColor4fv(TH_VERTEX_SELECT, fcolor);
+ else UI_GetThemeColor4fv(TH_VERTEX, fcolor);
}
- glRasterPos3f(0.0f, 1.0f, 0.0f);
- glBitmap(8, 8, 4, 4, 0, 0, bm_dot5);
+ immUniformColor4fv(fcolor);
+ immBegin(GWN_PRIM_POINTS, 1);
+ immVertex3f(pos, 0.0f, 1.0f, 0.0f);
+ immEnd();
}
-
- glPopMatrix();
+
+ immUnbindProgram();
+
+ gpuPopMatrix();
}
/* A partial copy of b_bone_spline_setup(), with just the parts for previewing editmode curve settings
@@ -1188,18 +1359,16 @@ static void draw_b_bone_boxes(const short dt, bPoseChannel *pchan, EditBone *ebo
}
for (a = 0; a < segments; a++) {
- glPushMatrix();
- glMultMatrixf(bbone[a].mat);
+ gpuPushMatrix();
+ gpuMultMatrix(bbone[a].mat);
if (dt == OB_SOLID) drawsolidcube_size(xwidth, dlen, zwidth);
else drawcube_size(xwidth, dlen, zwidth);
- glPopMatrix();
+ gpuPopMatrix();
}
}
else {
- glPushMatrix();
if (dt == OB_SOLID) drawsolidcube_size(xwidth, length, zwidth);
else drawcube_size(xwidth, length, zwidth);
- glPopMatrix();
}
}
@@ -1222,26 +1391,27 @@ static void draw_b_bone(const short dt, int armflag, int boneflag, short constfl
/* draw points only if... */
if (armflag & ARM_EDITMODE) {
/* move to unitspace */
- glPushMatrix();
- glScalef(length, length, length);
+ gpuPushMatrix();
+ gpuScaleUniform(length);
draw_bone_points(dt, armflag, boneflag, id);
- glPopMatrix();
+ gpuPopMatrix();
length *= 0.95f; /* make vertices visible */
}
/* colors for modes */
if (armflag & ARM_POSEMODE) {
if (dt <= OB_WIRE)
- set_pchan_glColor(PCHAN_COLOR_NORMAL, boneflag, constflag);
+ set_pchan_color(PCHAN_COLOR_NORMAL, boneflag, constflag);
else
- set_pchan_glColor(PCHAN_COLOR_SOLID, boneflag, constflag);
+ set_pchan_color(PCHAN_COLOR_SOLID, boneflag, constflag);
}
else if (armflag & ARM_EDITMODE) {
if (dt == OB_WIRE) {
- set_ebone_glColor(boneflag);
+ set_ebone_color(boneflag);
+ }
+ else {
+ UI_GetThemeColor4fv(TH_BONE_SOLID, fcolor);
}
- else
- UI_ThemeColor(TH_BONE_SOLID);
}
if (id != -1) {
@@ -1250,33 +1420,31 @@ static void draw_b_bone(const short dt, int armflag, int boneflag, short constfl
/* set up solid drawing */
if (dt > OB_WIRE) {
- GPU_basic_shader_bind(GPU_SHADER_LIGHTING | GPU_SHADER_USE_COLOR);
-
if (armflag & ARM_POSEMODE)
- set_pchan_glColor(PCHAN_COLOR_SOLID, boneflag, constflag);
- else
- UI_ThemeColor(TH_BONE_SOLID);
+ set_pchan_color(PCHAN_COLOR_SOLID, boneflag, constflag);
+ else {
+ UI_GetThemeColor4fv(TH_BONE_SOLID, fcolor);
+ }
+ flat_color = false;
draw_b_bone_boxes(OB_SOLID, pchan, ebone, xwidth, length, zwidth);
-
- /* disable solid drawing */
- GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
}
else {
/* wire */
if (armflag & ARM_POSEMODE) {
if (constflag && ((G.f & G_PICKSEL) == 0)) {
/* set constraint colors */
- if (set_pchan_glColor(PCHAN_COLOR_CONSTS, boneflag, constflag)) {
+ if (set_pchan_color(PCHAN_COLOR_CONSTS, boneflag, constflag)) {
glEnable(GL_BLEND);
+ flat_color = true;
draw_b_bone_boxes(OB_SOLID, pchan, ebone, xwidth, length, zwidth);
glDisable(GL_BLEND);
}
/* restore colors */
- set_pchan_glColor(PCHAN_COLOR_NORMAL, boneflag, constflag);
+ set_pchan_color(PCHAN_COLOR_NORMAL, boneflag, constflag);
}
}
@@ -1286,33 +1454,41 @@ static void draw_b_bone(const short dt, int armflag, int boneflag, short constfl
static void draw_wire_bone_segments(bPoseChannel *pchan, Mat4 *bbones, float length, int segments)
{
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformColor4fv(fcolor);
+
if ((segments > 1) && (pchan)) {
float dlen = length / (float)segments;
Mat4 *bbone = bbones;
int a;
-
+
for (a = 0; a < segments; a++, bbone++) {
- glPushMatrix();
- glMultMatrixf(bbone->mat);
-
- glBegin(GL_LINES);
- glVertex3f(0.0f, 0.0f, 0.0f);
- glVertex3f(0.0f, dlen, 0.0f);
- glEnd(); /* GL_LINES */
-
- glPopMatrix();
+ gpuPushMatrix();
+ gpuMultMatrix(bbone->mat);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex3f(pos, 0.0f, 0.0f, 0.0f);
+ immVertex3f(pos, 0.0f, dlen, 0.0f);
+ immEnd();
+
+ gpuPopMatrix();
}
}
else {
- glPushMatrix();
-
- glBegin(GL_LINES);
- glVertex3f(0.0f, 0.0f, 0.0f);
- glVertex3f(0.0f, length, 0.0f);
- glEnd();
-
- glPopMatrix();
+ gpuPushMatrix();
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex3f(pos, 0.0f, 0.0f, 0.0f);
+ immVertex3f(pos, 0.0f, length, 0.0f);
+ immEnd();
+
+ gpuPopMatrix();
}
+
+ immUnbindProgram();
}
static void draw_wire_bone(const short dt, int armflag, int boneflag, short constflag, unsigned int id,
@@ -1338,10 +1514,11 @@ static void draw_wire_bone(const short dt, int armflag, int boneflag, short cons
/* draw points only if... */
if (armflag & ARM_EDITMODE) {
/* move to unitspace */
- glPushMatrix();
- glScalef(length, length, length);
+ gpuPushMatrix();
+ gpuScaleUniform(length);
+ flat_color = true;
draw_bone_points(dt, armflag, boneflag, id);
- glPopMatrix();
+ gpuPopMatrix();
length *= 0.95f; /* make vertices visible */
}
@@ -1359,10 +1536,10 @@ static void draw_wire_bone(const short dt, int armflag, int boneflag, short cons
/* colors for modes */
if (armflag & ARM_POSEMODE) {
- set_pchan_glColor(PCHAN_COLOR_NORMAL, boneflag, constflag);
+ set_pchan_color(PCHAN_COLOR_NORMAL, boneflag, constflag);
}
else if (armflag & ARM_EDITMODE) {
- set_ebone_glColor(boneflag);
+ set_ebone_color(boneflag);
}
/* draw normal */
@@ -1372,23 +1549,23 @@ static void draw_wire_bone(const short dt, int armflag, int boneflag, short cons
static void draw_bone(const short dt, int armflag, int boneflag, short constflag, unsigned int id, float length)
{
- /* Draw a 3d octahedral bone, we use normalized space based on length,
- * for display-lists */
-
- glScalef(length, length, length);
+ /* Draw a 3d octahedral bone, we use normalized space based on length */
+ gpuScaleUniform(length);
/* set up solid drawing */
if (dt > OB_WIRE) {
- GPU_basic_shader_bind(GPU_SHADER_LIGHTING | GPU_SHADER_USE_COLOR);
- UI_ThemeColor(TH_BONE_SOLID);
+ UI_GetThemeColor4fv(TH_BONE_SOLID, fcolor);
+ flat_color = false;
}
+ else
+ flat_color = true;
/* colors for posemode */
if (armflag & ARM_POSEMODE) {
if (dt <= OB_WIRE)
- set_pchan_glColor(PCHAN_COLOR_NORMAL, boneflag, constflag);
+ set_pchan_color(PCHAN_COLOR_NORMAL, boneflag, constflag);
else
- set_pchan_glColor(PCHAN_COLOR_SOLID, boneflag, constflag);
+ set_pchan_color(PCHAN_COLOR_SOLID, boneflag, constflag);
}
@@ -1403,12 +1580,12 @@ static void draw_bone(const short dt, int armflag, int boneflag, short constflag
if (dt <= OB_WIRE) {
/* colors */
if (armflag & ARM_EDITMODE) {
- set_ebone_glColor(boneflag);
+ set_ebone_color(boneflag);
}
else if (armflag & ARM_POSEMODE) {
if (constflag && ((G.f & G_PICKSEL) == 0)) {
/* draw constraint colors */
- if (set_pchan_glColor(PCHAN_COLOR_CONSTS, boneflag, constflag)) {
+ if (set_pchan_color(PCHAN_COLOR_CONSTS, boneflag, constflag)) {
glEnable(GL_BLEND);
draw_bone_solid_octahedral();
@@ -1417,7 +1594,7 @@ static void draw_bone(const short dt, int armflag, int boneflag, short constflag
}
/* restore colors */
- set_pchan_glColor(PCHAN_COLOR_NORMAL, boneflag, constflag);
+ set_pchan_color(PCHAN_COLOR_NORMAL, boneflag, constflag);
}
}
draw_bone_octahedral();
@@ -1425,35 +1602,33 @@ static void draw_bone(const short dt, int armflag, int boneflag, short constflag
else {
/* solid */
if (armflag & ARM_POSEMODE)
- set_pchan_glColor(PCHAN_COLOR_SOLID, boneflag, constflag);
+ set_pchan_color(PCHAN_COLOR_SOLID, boneflag, constflag);
else
- UI_ThemeColor(TH_BONE_SOLID);
- draw_bone_solid_octahedral();
- }
+ UI_GetThemeColor4fv(TH_BONE_SOLID, fcolor);
- /* disable solid drawing */
- if (dt > OB_WIRE) {
- GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
+ draw_bone_solid_octahedral();
}
}
-static void draw_custom_bone(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob,
- const short dt, int armflag, int boneflag, unsigned int id, float length)
+static void draw_custom_bone(
+ const struct EvaluationContext *eval_ctx,
+ Scene *scene, ViewLayer *view_layer, View3D *v3d, RegionView3D *rv3d, Object *ob,
+ const short dt, int armflag, int boneflag, unsigned int id, float length)
{
if (ob == NULL) return;
- glScalef(length, length, length);
+ gpuScaleUniform(length);
/* colors for posemode */
if (armflag & ARM_POSEMODE) {
- set_pchan_glColor(PCHAN_COLOR_NORMAL, boneflag, 0);
+ set_pchan_color(PCHAN_COLOR_NORMAL, boneflag, 0);
}
if (id != -1) {
GPU_select_load_id((GLuint) id | BONESEL_BONE);
}
-
- draw_object_instance(scene, v3d, rv3d, ob, dt, armflag & ARM_POSEMODE);
+
+ draw_object_instance(eval_ctx, scene, view_layer, v3d, rv3d, ob, dt, armflag & ARM_POSEMODE, fcolor);
}
@@ -1461,7 +1636,20 @@ static void pchan_draw_IK_root_lines(bPoseChannel *pchan, short only_temp)
{
bConstraint *con;
bPoseChannel *parchan;
-
+
+ const uint shdr_pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_LINE_DASHED_UNIFORM_COLOR);
+
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2], viewport_size[3]);
+
+ immUniform1i("num_colors", 0); /* "simple" mode */
+ immUniformColor4fv(fcolor);
+ immUniform1f("dash_width", 6.0f);
+ immUniform1f("dash_factor", 0.5f);
+
for (con = pchan->constraints.first; con; con = con->next) {
if (con->enforce == 0.0f)
continue;
@@ -1471,47 +1659,45 @@ static void pchan_draw_IK_root_lines(bPoseChannel *pchan, short only_temp)
{
bKinematicConstraint *data = (bKinematicConstraint *)con->data;
int segcount = 0;
+ float ik_tip[3];
/* if only_temp, only draw if it is a temporary ik-chain */
if ((only_temp) && !(data->flag & CONSTRAINT_IK_TEMP))
continue;
-
- setlinestyle(3);
- glBegin(GL_LINES);
-
+
/* exclude tip from chain? */
if ((data->flag & CONSTRAINT_IK_TIP) == 0)
parchan = pchan->parent;
else
parchan = pchan;
- glVertex3fv(parchan->pose_tail);
+ copy_v3_v3(ik_tip, parchan->pose_tail);
/* Find the chain's root */
while (parchan->parent) {
segcount++;
- if (segcount == data->rootbone || segcount > 255) {
- break; /* 255 is weak */
- }
+ /* FIXME: revise the breaking conditions */
+ if (segcount == data->rootbone || segcount > 255) break; /* 255 is weak */
parchan = parchan->parent;
}
- if (parchan)
- glVertex3fv(parchan->pose_head);
+
+ if (parchan) {
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex3fv(shdr_pos, ik_tip);
+ immVertex3fv(shdr_pos, parchan->pose_head);
+ immEnd();
+ }
- glEnd();
- setlinestyle(0);
break;
}
case CONSTRAINT_TYPE_SPLINEIK:
{
bSplineIKConstraint *data = (bSplineIKConstraint *)con->data;
int segcount = 0;
-
- setlinestyle(3);
- glBegin(GL_LINES);
+ float ik_tip[3];
parchan = pchan;
- glVertex3fv(parchan->pose_tail);
+ copy_v3_v3(ik_tip, parchan->pose_tail);
/* Find the chain's root */
while (parchan->parent) {
@@ -1521,18 +1707,21 @@ static void pchan_draw_IK_root_lines(bPoseChannel *pchan, short only_temp)
parchan = parchan->parent;
}
/* Only draw line in case our chain is more than one bone long! */
- if (parchan != pchan) /* XXX revise the breaking conditions to only stop at the tail? */
- glVertex3fv(parchan->pose_head);
-
- glEnd();
- setlinestyle(0);
+ if (parchan != pchan) { /* XXX revise the breaking conditions to only stop at the tail? */
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex3fv(shdr_pos, ik_tip);
+ immVertex3fv(shdr_pos, parchan->pose_head);
+ immEnd();
+ }
break;
}
}
}
+
+ immUnbindProgram();
}
-static void bgl_sphere_project(float ax, float az)
+static void imm_sphere_project(unsigned int pos, float ax, float az)
{
float dir[3], sine, q3;
@@ -1543,11 +1732,13 @@ static void bgl_sphere_project(float ax, float az)
dir[1] = 1.0f - 2.0f * sine;
dir[2] = ax * q3;
- glVertex3fv(dir);
+ immVertex3fv(pos, dir);
}
-static void draw_dof_ellipse(float ax, float az)
+static void draw_dof_ellipse(unsigned int pos, float ax, float az)
{
+ const int n = 16;
+ const int tri = n * n - 2 * n + 1; /* Yay fancy math ! */
const float staticSine[16] = {
0.0f, 0.104528463268f, 0.207911690818f, 0.309016994375f,
0.406736643076f, 0.5f, 0.587785252292f, 0.669130606359f,
@@ -1556,15 +1747,15 @@ static void draw_dof_ellipse(float ax, float az)
0.994521895368f, 1.0f
};
- int i, j, n = 16;
+ int i, j;
float x, z, px, pz;
glEnable(GL_BLEND);
glDepthMask(0);
- glColor4ub(70, 70, 70, 50);
+ immUniformColor4ub(70, 70, 70, 50);
- glBegin(GL_QUADS);
+ immBegin(GWN_PRIM_TRIS, tri * 3);
pz = 0.0f;
for (i = 1; i < n; i++) {
z = staticSine[i];
@@ -1574,36 +1765,35 @@ static void draw_dof_ellipse(float ax, float az)
x = staticSine[j];
if (j == n - i) {
- glEnd();
- glBegin(GL_TRIANGLES);
- bgl_sphere_project(ax * px, az * z);
- bgl_sphere_project(ax * px, az * pz);
- bgl_sphere_project(ax * x, az * pz);
- glEnd();
- glBegin(GL_QUADS);
+ imm_sphere_project(pos, ax * px, az * z);
+ imm_sphere_project(pos, ax * px, az * pz);
+ imm_sphere_project(pos, ax * x, az * pz);
}
else {
- bgl_sphere_project(ax * x, az * z);
- bgl_sphere_project(ax * x, az * pz);
- bgl_sphere_project(ax * px, az * pz);
- bgl_sphere_project(ax * px, az * z);
+ imm_sphere_project(pos, ax * x, az * z);
+ imm_sphere_project(pos, ax * x, az * pz);
+ imm_sphere_project(pos, ax * px, az * pz);
+
+ imm_sphere_project(pos, ax * px, az * pz);
+ imm_sphere_project(pos, ax * px, az * z);
+ imm_sphere_project(pos, ax * x, az * z);
}
px = x;
}
pz = z;
}
- glEnd();
+ immEnd();
glDisable(GL_BLEND);
glDepthMask(1);
- glColor3ub(0, 0, 0);
+ immUniformColor3ub(0, 0, 0);
- glBegin(GL_LINE_STRIP);
+ immBegin(GWN_PRIM_LINE_STRIP, n);
for (i = 0; i < n; i++)
- bgl_sphere_project(staticSine[n - i - 1] * ax, staticSine[i] * az);
- glEnd();
+ imm_sphere_project(pos, staticSine[n - i - 1] * ax, staticSine[i] * az);
+ immEnd();
}
static void draw_pose_dofs(Object *ob)
@@ -1611,7 +1801,12 @@ static void draw_pose_dofs(Object *ob)
bArmature *arm = ob->data;
bPoseChannel *pchan;
Bone *bone;
-
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+
for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) {
bone = pchan->bone;
@@ -1625,54 +1820,55 @@ static void draw_pose_dofs(Object *ob)
int a, i;
/* in parent-bone pose, but own restspace */
- glPushMatrix();
+ gpuPushMatrix();
copy_v3_v3(posetrans, pchan->pose_mat[3]);
- glTranslate3fv(posetrans);
+ gpuTranslate3fv(posetrans);
if (pchan->parent) {
copy_m4_m4(mat, pchan->parent->pose_mat);
mat[3][0] = mat[3][1] = mat[3][2] = 0.0f;
- glMultMatrixf(mat);
+ gpuMultMatrix(mat);
}
copy_m4_m3(mat, pchan->bone->bone_mat);
- glMultMatrixf(mat);
+ gpuMultMatrix(mat);
scale = bone->length * pchan->size[1];
- glScalef(scale, scale, scale);
+ gpuScaleUniform(scale);
- if (pchan->ikflag & BONE_IK_XLIMIT) {
- if (pchan->ikflag & BONE_IK_ZLIMIT) {
- float amin[3], amax[3];
-
- for (i = 0; i < 3; i++) {
- /* *0.5f here comes from M_PI/360.0f when rotations were still in degrees */
- amin[i] = sinf(pchan->limitmin[i] * 0.5f);
- amax[i] = sinf(pchan->limitmax[i] * 0.5f);
- }
-
- glScalef(1.0f, -1.0f, 1.0f);
- if ((amin[0] != 0.0f) && (amin[2] != 0.0f))
- draw_dof_ellipse(amin[0], amin[2]);
- if ((amin[0] != 0.0f) && (amax[2] != 0.0f))
- draw_dof_ellipse(amin[0], amax[2]);
- if ((amax[0] != 0.0f) && (amin[2] != 0.0f))
- draw_dof_ellipse(amax[0], amin[2]);
- if ((amax[0] != 0.0f) && (amax[2] != 0.0f))
- draw_dof_ellipse(amax[0], amax[2]);
- glScalef(1.0f, -1.0f, 1.0f);
+ if (((pchan->ikflag & BONE_IK_XLIMIT) != 0) &&
+ ((pchan->ikflag & BONE_IK_ZLIMIT) != 0))
+ {
+ float amin[3], amax[3];
+
+ for (i = 0; i < 3; i++) {
+ /* *0.5f here comes from M_PI/360.0f when rotations were still in degrees */
+ amin[i] = sinf(pchan->limitmin[i] * 0.5f);
+ amax[i] = sinf(pchan->limitmax[i] * 0.5f);
}
+
+ gpuScale3f(1.0f, -1.0f, 1.0f);
+ if ((amin[0] != 0.0f) && (amin[2] != 0.0f))
+ draw_dof_ellipse(pos, amin[0], amin[2]);
+ if ((amin[0] != 0.0f) && (amax[2] != 0.0f))
+ draw_dof_ellipse(pos, amin[0], amax[2]);
+ if ((amax[0] != 0.0f) && (amin[2] != 0.0f))
+ draw_dof_ellipse(pos, amax[0], amin[2]);
+ if ((amax[0] != 0.0f) && (amax[2] != 0.0f))
+ draw_dof_ellipse(pos, amax[0], amax[2]);
+ gpuScale3f(1.0f, -1.0f, 1.0f); /* XXX same as above, is this intentional? */
}
/* arcs */
if (pchan->ikflag & BONE_IK_ZLIMIT) {
/* OpenGL requires rotations in degrees; so we're taking the average angle here */
theta = RAD2DEGF(0.5f * (pchan->limitmin[2] + pchan->limitmax[2]));
- glRotatef(theta, 0.0f, 0.0f, 1.0f);
+ gpuPushMatrix();
+ gpuRotateAxis(theta, 'Z');
- glColor3ub(50, 50, 255); /* blue, Z axis limit */
- glBegin(GL_LINE_STRIP);
+ immUniformColor3ub(50, 50, 255); /* blue, Z axis limit */
+ immBegin(GWN_PRIM_LINE_STRIP, 33);
for (a = -16; a <= 16; a++) {
/* *0.5f here comes from M_PI/360.0f when rotations were still in degrees */
float fac = ((float)a) / 16.0f * 0.5f;
@@ -1683,20 +1879,21 @@ static void draw_pose_dofs(Object *ob)
corner[i][0] = sinf(phi);
corner[i][1] = cosf(phi);
corner[i][2] = 0.0f;
- glVertex3fv(corner[i]);
+ immVertex3fv(pos, corner[i]);
}
- glEnd();
+ immEnd();
- glRotatef(-theta, 0.0f, 0.0f, 1.0f);
+ gpuPopMatrix();
}
if (pchan->ikflag & BONE_IK_XLIMIT) {
/* OpenGL requires rotations in degrees; so we're taking the average angle here */
theta = RAD2DEGF(0.5f * (pchan->limitmin[0] + pchan->limitmax[0]));
- glRotatef(theta, 1.0f, 0.0f, 0.0f);
+ gpuPushMatrix();
+ gpuRotateAxis(theta, 'X');
- glColor3ub(255, 50, 50); /* Red, X axis limit */
- glBegin(GL_LINE_STRIP);
+ immUniformColor3ub(255, 50, 50); /* Red, X axis limit */
+ immBegin(GWN_PRIM_LINE_STRIP, 33);
for (a = -16; a <= 16; a++) {
/* *0.5f here comes from M_PI/360.0f when rotations were still in degrees */
float fac = ((float)a) / 16.0f * 0.5f;
@@ -1706,21 +1903,23 @@ static void draw_pose_dofs(Object *ob)
corner[i][0] = 0.0f;
corner[i][1] = sinf(phi);
corner[i][2] = cosf(phi);
- glVertex3fv(corner[i]);
+ immVertex3fv(pos, corner[i]);
}
- glEnd();
+ immEnd();
- glRotatef(-theta, 1.0f, 0.0f, 0.0f);
+ gpuPopMatrix();
}
/* out of cone, out of bone */
- glPopMatrix();
+ gpuPopMatrix();
}
}
}
}
}
}
+
+ immUnbindProgram();
}
static void bone_matrix_translate_y(float mat[4][4], float y)
@@ -1733,9 +1932,10 @@ static void bone_matrix_translate_y(float mat[4][4], float y)
}
/* assumes object is Armature with pose */
-static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
- const short dt, const unsigned char ob_wire_col[4],
- const bool do_const_color, const bool is_outline)
+static void draw_pose_bones(
+ const struct EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, View3D *v3d, ARegion *ar, Base *base,
+ const short dt, const unsigned char ob_wire_col[4],
+ const bool do_const_color, const bool is_outline)
{
RegionView3D *rv3d = ar->regiondata;
Object *ob = base->object;
@@ -1756,7 +1956,9 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
/* being set below */
arm->layer_used = 0;
-
+
+ rgba_uchar_to_float(fcolor, ob_wire_col);
+
/* precalc inverse matrix for drawing screen aligned */
if (arm->drawtype == ARM_ENVELOPE) {
/* precalc inverse matrix for drawing screen aligned */
@@ -1805,7 +2007,7 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
/* if solid we draw that first, with selection codes, but without names, axes etc */
if (dt > OB_WIRE) {
if (arm->flag & ARM_POSEMODE)
- index = base->selcol;
+ index = base->object->select_color;
for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) {
bone = pchan->bone;
@@ -1817,13 +2019,13 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
{
if (bone->layer & arm->layer) {
const bool use_custom = (pchan->custom) && !(arm->flag & ARM_NO_CUSTOM);
- glPushMatrix();
+ gpuPushMatrix();
if (use_custom && pchan->custom_tx) {
- glMultMatrixf(pchan->custom_tx->pose_mat);
+ gpuMultMatrix(pchan->custom_tx->pose_mat);
}
else {
- glMultMatrixf(pchan->pose_mat);
+ gpuMultMatrix(pchan->pose_mat);
}
/* catch exception for bone with hidden parent */
@@ -1858,7 +2060,7 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
glDisable(GL_CULL_FACE);
}
- draw_custom_bone(scene, v3d, rv3d, pchan->custom,
+ draw_custom_bone(eval_ctx, scene, view_layer, v3d, rv3d, pchan->custom,
OB_SOLID, arm->flag, flag, index, PCHAN_CUSTOM_DRAW_SIZE(pchan));
}
}
@@ -1885,7 +2087,7 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
}
}
- glPopMatrix();
+ gpuPopMatrix();
}
}
@@ -1913,7 +2115,7 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
(draw_wire || (dt <= OB_WIRE)) )
{
if (arm->flag & ARM_POSEMODE)
- index = base->selcol;
+ index = base->object->select_color;
/* only draw custom bone shapes that need to be drawn as wires */
for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) {
@@ -1926,13 +2128,13 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
if (bone->layer & arm->layer) {
if (pchan->custom) {
if ((dt < OB_SOLID) || (bone->flag & BONE_DRAWWIRE)) {
- glPushMatrix();
+ gpuPushMatrix();
if (pchan->custom_tx) {
- glMultMatrixf(pchan->custom_tx->pose_mat);
+ gpuMultMatrix(pchan->custom_tx->pose_mat);
}
else {
- glMultMatrixf(pchan->pose_mat);
+ gpuMultMatrix(pchan->pose_mat);
}
/* prepare colors */
@@ -1942,7 +2144,7 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
else if (arm->flag & ARM_POSEMODE)
set_pchan_colorset(ob, pchan);
else {
- glColor3ubv(ob_wire_col);
+ rgba_uchar_to_float(fcolor, ob_wire_col);
}
/* catch exception for bone with hidden parent */
@@ -1954,10 +2156,10 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
if (bone == arm->act_bone)
flag |= BONE_DRAW_ACTIVE;
- draw_custom_bone(scene, v3d, rv3d, pchan->custom,
+ draw_custom_bone(eval_ctx, scene, view_layer, v3d, rv3d, pchan->custom,
OB_WIRE, arm->flag, flag, index, PCHAN_CUSTOM_DRAW_SIZE(pchan));
- glPopMatrix();
+ gpuPopMatrix();
}
}
}
@@ -1979,7 +2181,7 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
/* draw line check first. we do selection indices */
if (ELEM(arm->drawtype, ARM_LINE, ARM_WIRE)) {
if (arm->flag & ARM_POSEMODE)
- index = base->selcol;
+ index = base->object->select_color;
}
/* if solid && posemode, we draw again with polygonoffset */
else if ((dt > OB_WIRE) && (arm->flag & ARM_POSEMODE)) {
@@ -1988,7 +2190,7 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
else {
/* and we use selection indices if not done yet */
if (arm->flag & ARM_POSEMODE)
- index = base->selcol;
+ index = base->object->select_color;
}
if (is_cull_enabled == false) {
@@ -2011,16 +2213,30 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
* - only if V3D_HIDE_HELPLINES is enabled...
*/
if ((do_dashed & DASH_HELP_LINES) && ((bone->flag & BONE_CONNECTED) == 0)) {
+ const uint shdr_pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_LINE_DASHED_UNIFORM_COLOR);
+
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2], viewport_size[3]);
+
+ immUniform1i("num_colors", 0); /* "simple" mode */
+ immUniformColor4fv(fcolor);
+ immUniform1f("dash_width", 6.0f);
+ immUniform1f("dash_factor", 0.5f);
+
if (arm->flag & ARM_POSEMODE) {
GPU_select_load_id(index & 0xFFFF); /* object tag, for bordersel optim */
- UI_ThemeColor(TH_WIRE);
+ immUniformThemeColor(TH_WIRE);
}
- setlinestyle(3);
- glBegin(GL_LINES);
- glVertex3fv(pchan->pose_head);
- glVertex3fv(pchan->parent->pose_tail);
- glEnd();
- setlinestyle(0);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex3fv(shdr_pos, pchan->parent->pose_tail);
+ immVertex3fv(shdr_pos, pchan->pose_head);
+ immEnd();
+
+ immUnbindProgram();
}
/* Draw a line to IK root bone
@@ -2029,8 +2245,11 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
if (arm->flag & ARM_POSEMODE) {
if (constflag & PCHAN_HAS_IK) {
if (bone->flag & BONE_SELECTED) {
- if (constflag & PCHAN_HAS_TARGET) glColor3ub(200, 120, 0);
- else glColor3ub(200, 200, 50); /* add theme! */
+ if (constflag & PCHAN_HAS_TARGET) {
+ rgba_float_args_set(fcolor, 200.f / 255.f, 120.f / 255.f, 0.f / 255.f, 1.0f);
+ }
+ /* add theme! */
+ else rgba_float_args_set(fcolor, 200.f / 255.f, 200.f / 255.f, 50.f / 255.f, 1.0f);
GPU_select_load_id(index & 0xFFFF);
pchan_draw_IK_root_lines(pchan, !(do_dashed & DASH_HELP_LINES));
@@ -2038,8 +2257,9 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
}
else if (constflag & PCHAN_HAS_SPLINEIK) {
if (bone->flag & BONE_SELECTED) {
- glColor3ub(150, 200, 50); /* add theme! */
-
+ /* add theme! */
+ rgba_float_args_set(fcolor, 150.f / 255.f, 200.f / 255.f, 50.f / 255.f, 1.0f);
+
GPU_select_load_id(index & 0xFFFF);
pchan_draw_IK_root_lines(pchan, !(do_dashed & DASH_HELP_LINES));
}
@@ -2047,9 +2267,9 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
}
}
- glPushMatrix();
+ gpuPushMatrix();
if (arm->drawtype != ARM_ENVELOPE)
- glMultMatrixf(pchan->pose_mat);
+ gpuMultMatrix(pchan->pose_mat);
/* catch exception for bone with hidden parent */
flag = bone->flag;
@@ -2086,7 +2306,7 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
else
draw_bone(OB_WIRE, arm->flag, flag, constflag, index, bone->length);
- glPopMatrix();
+ gpuPopMatrix();
}
}
@@ -2106,7 +2326,7 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
/* draw DoFs */
if (arm->flag & ARM_POSEMODE) {
- if (((base->flag & OB_FROMDUPLI) == 0) && ((v3d->flag & V3D_HIDE_HELPLINES) == 0)) {
+ if (((base->flag_legacy & OB_FROMDUPLI) == 0) && ((v3d->flag & V3D_HIDE_HELPLINES) == 0)) {
draw_pose_dofs(ob);
}
}
@@ -2114,26 +2334,17 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
/* finally names and axes */
if ((arm->flag & (ARM_DRAWNAMES | ARM_DRAWAXES)) &&
(is_outline == 0) &&
- ((base->flag & OB_FROMDUPLI) == 0))
+ ((base->flag_legacy & OB_FROMDUPLI) == 0))
{
/* patch for several 3d cards (IBM mostly) that crash on GL_SELECT with text drawing */
if ((G.f & G_PICKSEL) == 0) {
float vec[3];
unsigned char col[4];
- if (do_const_color) {
- /* so we can draw bone names in current const color */
- float tcol[4];
- glGetFloatv(GL_CURRENT_COLOR, tcol);
- rgb_float_to_uchar(col, tcol);
- col[3] = 255;
- }
- else {
- col[0] = ob_wire_col[0];
- col[1] = ob_wire_col[1];
- col[2] = ob_wire_col[2];
- col[3] = 255;
- }
+ col[0] = ob_wire_col[0];
+ col[1] = ob_wire_col[1];
+ col[2] = ob_wire_col[2];
+ col[3] = 255;
if (v3d->zbuf) glDisable(GL_DEPTH_TEST);
@@ -2156,18 +2367,16 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
/* Draw additional axes on the bone tail */
if ((arm->flag & ARM_DRAWAXES) && (arm->flag & ARM_POSEMODE)) {
- glPushMatrix();
+ gpuPushMatrix();
copy_m4_m4(bmat, pchan->pose_mat);
bone_matrix_translate_y(bmat, pchan->bone->length);
- glMultMatrixf(bmat);
+ gpuMultMatrix(bmat);
- glColor3ubv(col);
-
float viewmat_pchan[4][4];
mul_m4_m4m4(viewmat_pchan, rv3d->viewmatob, bmat);
- drawaxes(viewmat_pchan, pchan->bone->length * 0.25f, OB_ARROWS);
+ drawaxes(viewmat_pchan, pchan->bone->length * 0.25f, OB_ARROWS, col);
- glPopMatrix();
+ gpuPopMatrix();
}
}
}
@@ -2233,9 +2442,9 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, const short dt)
for (eBone = arm->edbo->first, index = 0; eBone; eBone = eBone->next, index++) {
if (eBone->layer & arm->layer) {
if ((eBone->flag & BONE_HIDDEN_A) == 0) {
- glPushMatrix();
+ gpuPushMatrix();
get_matrix_editbone(eBone, bmat);
- glMultMatrixf(bmat);
+ gpuMultMatrix(bmat);
/* catch exception for bone with hidden parent */
flag = eBone->flag;
@@ -2257,7 +2466,7 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, const short dt)
draw_bone(OB_SOLID, arm->flag, flag, 0, index, eBone->length);
}
- glPopMatrix();
+ gpuPopMatrix();
}
}
}
@@ -2295,9 +2504,9 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, const short dt)
draw_sphere_bone_wire(smat, imat, arm->flag, flag, 0, index, NULL, eBone);
}
else {
- glPushMatrix();
+ gpuPushMatrix();
get_matrix_editbone(eBone, bmat);
- glMultMatrixf(bmat);
+ gpuMultMatrix(bmat);
if (arm->drawtype == ARM_LINE)
draw_line_bone(arm->flag, flag, 0, index, NULL, eBone);
@@ -2308,21 +2517,32 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, const short dt)
else
draw_bone(OB_WIRE, arm->flag, flag, 0, index, eBone->length);
- glPopMatrix();
+ gpuPopMatrix();
}
/* offset to parent */
if (eBone->parent) {
- UI_ThemeColor(TH_WIRE_EDIT);
+ const uint shdr_pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
GPU_select_load_id(-1); /* -1 here is OK! */
- setlinestyle(3);
-
- glBegin(GL_LINES);
- glVertex3fv(eBone->parent->tail);
- glVertex3fv(eBone->head);
- glEnd();
-
- setlinestyle(0);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_LINE_DASHED_UNIFORM_COLOR);
+
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2], viewport_size[3]);
+
+ immUniform1i("num_colors", 0); /* "simple" mode */
+ immUniformThemeColor(TH_WIRE_EDIT);
+ immUniform1f("dash_width", 6.0f);
+ immUniform1f("dash_factor", 0.5f);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex3fv(shdr_pos, eBone->parent->tail);
+ immVertex3fv(shdr_pos, eBone->head);
+ immEnd();
+
+ immUnbindProgram();
}
}
}
@@ -2364,18 +2584,16 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, const short dt)
}
/* Draw additional axes */
if (arm->flag & ARM_DRAWAXES) {
- glPushMatrix();
+ gpuPushMatrix();
get_matrix_editbone(eBone, bmat);
bone_matrix_translate_y(bmat, eBone->length);
- glMultMatrixf(bmat);
-
- glColor3ubv(col);
+ gpuMultMatrix(bmat);
float viewmat_ebone[4][4];
mul_m4_m4m4(viewmat_ebone, rv3d->viewmatob, bmat);
- drawaxes(viewmat_ebone, eBone->length * 0.25f, OB_ARROWS);
+ drawaxes(viewmat_ebone, eBone->length * 0.25f, OB_ARROWS, col);
- glPopMatrix();
+ gpuPopMatrix();
}
}
@@ -2448,14 +2666,18 @@ static void ghost_poses_tag_unselected(Object *ob, short unset)
/* draw ghosts that occur within a frame range
* note: object should be in posemode
*/
-static void draw_ghost_poses_range(Scene *scene, View3D *v3d, ARegion *ar, Base *base)
+static void draw_ghost_poses_range(
+ const EvaluationContext *eval_ctx_init,
+ Scene *scene, ViewLayer *view_layer, View3D *v3d, ARegion *ar, Base *base)
{
+ EvaluationContext eval_ctx = *eval_ctx_init;
Object *ob = base->object;
AnimData *adt = BKE_animdata_from_id(&ob->id);
bArmature *arm = ob->data;
bPose *posen, *poseo;
float start, end, stepsize, range, colfac;
int cfrao, flago;
+ unsigned char col[4];
start = (float)arm->ghostsf;
end = (float)arm->ghostef;
@@ -2470,7 +2692,7 @@ static void draw_ghost_poses_range(Scene *scene, View3D *v3d, ARegion *ar, Base
range = (float)(end - start);
/* store values */
- ob->mode &= ~OB_MODE_POSE;
+ eval_ctx.object_mode &= ~OB_MODE_POSE;
cfrao = CFRA;
flago = arm->flag;
arm->flag &= ~(ARM_DRAWNAMES | ARM_DRAWAXES);
@@ -2488,11 +2710,11 @@ static void draw_ghost_poses_range(Scene *scene, View3D *v3d, ARegion *ar, Base
/* draw from first frame of range to last */
for (CFRA = (int)start; CFRA <= end; CFRA += (int)stepsize) {
colfac = (end - (float)CFRA) / range;
- UI_ThemeColorShadeAlpha(TH_WIRE, 0, -128 - (int)(120.0f * sqrtf(colfac)));
+ UI_GetThemeColorShadeAlpha4ubv(TH_WIRE, 0, -128 - (int)(120.0f * sqrtf(colfac)), col);
BKE_animsys_evaluate_animdata(scene, &ob->id, adt, (float)CFRA, ADT_RECALC_ALL);
- BKE_pose_where_is(scene, ob);
- draw_pose_bones(scene, v3d, ar, base, OB_WIRE, NULL, true, false);
+ BKE_pose_where_is(&eval_ctx, scene, ob);
+ draw_pose_bones(&eval_ctx, scene, view_layer, v3d, ar, base, OB_WIRE, col, true, false);
}
glDisable(GL_BLEND);
if (v3d->zbuf) glEnable(GL_DEPTH_TEST);
@@ -2508,14 +2730,17 @@ static void draw_ghost_poses_range(Scene *scene, View3D *v3d, ARegion *ar, Base
CFRA = cfrao;
ob->pose = poseo;
arm->flag = flago;
- ob->mode |= OB_MODE_POSE;
+ eval_ctx.object_mode |= OB_MODE_POSE;
}
/* draw ghosts on keyframes in action within range
* - object should be in posemode
*/
-static void draw_ghost_poses_keys(Scene *scene, View3D *v3d, ARegion *ar, Base *base)
+static void draw_ghost_poses_keys(
+ const struct EvaluationContext *eval_ctx_init, Scene *scene, ViewLayer *view_layer,
+ View3D *v3d, ARegion *ar, Base *base)
{
+ EvaluationContext eval_ctx = *eval_ctx_init;
Object *ob = base->object;
AnimData *adt = BKE_animdata_from_id(&ob->id);
bAction *act = (adt) ? adt->action : NULL;
@@ -2525,6 +2750,7 @@ static void draw_ghost_poses_keys(Scene *scene, View3D *v3d, ARegion *ar, Base *
ActKeyColumn *ak, *akn;
float start, end, range, colfac, i;
int cfrao, flago;
+ unsigned char col[4];
start = (float)arm->ghostsf;
end = (float)arm->ghostef;
@@ -2548,7 +2774,7 @@ static void draw_ghost_poses_keys(Scene *scene, View3D *v3d, ARegion *ar, Base *
if (range == 0) return;
/* store values */
- ob->mode &= ~OB_MODE_POSE;
+ eval_ctx.object_mode &= ~OB_MODE_POSE;
cfrao = CFRA;
flago = arm->flag;
arm->flag &= ~(ARM_DRAWNAMES | ARM_DRAWAXES);
@@ -2566,13 +2792,13 @@ static void draw_ghost_poses_keys(Scene *scene, View3D *v3d, ARegion *ar, Base *
/* draw from first frame of range to last */
for (ak = keys.first, i = 0; ak; ak = ak->next, i++) {
colfac = i / range;
- UI_ThemeColorShadeAlpha(TH_WIRE, 0, -128 - (int)(120.0f * sqrtf(colfac)));
+ UI_GetThemeColorShadeAlpha4ubv(TH_WIRE, 0, -128 - (int)(120.0f * sqrtf(colfac)), col);
CFRA = (int)ak->cfra;
BKE_animsys_evaluate_animdata(scene, &ob->id, adt, (float)CFRA, ADT_RECALC_ALL);
- BKE_pose_where_is(scene, ob);
- draw_pose_bones(scene, v3d, ar, base, OB_WIRE, NULL, true, false);
+ BKE_pose_where_is(&eval_ctx, scene, ob);
+ draw_pose_bones(&eval_ctx, scene, view_layer, v3d, ar, base, OB_WIRE, col, true, false);
}
glDisable(GL_BLEND);
if (v3d->zbuf) glEnable(GL_DEPTH_TEST);
@@ -2589,21 +2815,25 @@ static void draw_ghost_poses_keys(Scene *scene, View3D *v3d, ARegion *ar, Base *
CFRA = cfrao;
ob->pose = poseo;
arm->flag = flago;
- ob->mode |= OB_MODE_POSE;
+ eval_ctx.object_mode |= OB_MODE_POSE;
}
/* draw ghosts around current frame
* - object is supposed to be armature in posemode
*/
-static void draw_ghost_poses(Scene *scene, View3D *v3d, ARegion *ar, Base *base)
+static void draw_ghost_poses(
+ const struct EvaluationContext *eval_ctx_init, Scene *scene, ViewLayer *view_layer,
+ View3D *v3d, ARegion *ar, Base *base)
{
+ EvaluationContext eval_ctx = *eval_ctx_init;
Object *ob = base->object;
AnimData *adt = BKE_animdata_from_id(&ob->id);
bArmature *arm = ob->data;
bPose *posen, *poseo;
float cur, start, end, stepsize, range, colfac, actframe, ctime;
int cfrao, flago;
-
+ unsigned char col[4];
+
/* pre conditions, get an action with sufficient frames */
if (ELEM(NULL, adt, adt->action))
return;
@@ -2620,7 +2850,7 @@ static void draw_ghost_poses(Scene *scene, View3D *v3d, ARegion *ar, Base *base)
range = (float)(arm->ghostep) * stepsize + 0.5f; /* plus half to make the for loop end correct */
/* store values */
- ob->mode &= ~OB_MODE_POSE;
+ eval_ctx.object_mode &= ~OB_MODE_POSE;
cfrao = CFRA;
actframe = BKE_nla_tweakedit_remap(adt, (float)CFRA, 0);
flago = arm->flag;
@@ -2640,7 +2870,7 @@ static void draw_ghost_poses(Scene *scene, View3D *v3d, ARegion *ar, Base *base)
for (cur = stepsize; cur < range; cur += stepsize) {
ctime = cur - (float)fmod(cfrao, stepsize); /* ensures consistent stepping */
colfac = ctime / range;
- UI_ThemeColorShadeAlpha(TH_WIRE, 0, -128 - (int)(120.0f * sqrtf(colfac)));
+ UI_GetThemeColorShadeAlpha4ubv(TH_WIRE, 0, -128 - (int)(120.0f * sqrtf(colfac)), col);
/* only within action range */
if (actframe + ctime >= start && actframe + ctime <= end) {
@@ -2648,14 +2878,14 @@ static void draw_ghost_poses(Scene *scene, View3D *v3d, ARegion *ar, Base *base)
if (CFRA != cfrao) {
BKE_animsys_evaluate_animdata(scene, &ob->id, adt, (float)CFRA, ADT_RECALC_ALL);
- BKE_pose_where_is(scene, ob);
- draw_pose_bones(scene, v3d, ar, base, OB_WIRE, NULL, true, false);
+ BKE_pose_where_is(&eval_ctx, scene, ob);
+ draw_pose_bones(&eval_ctx, scene, view_layer, v3d, ar, base, OB_WIRE, col, true, false);
}
}
ctime = cur + (float)fmod((float)cfrao, stepsize) - stepsize + 1.0f; /* ensures consistent stepping */
colfac = ctime / range;
- UI_ThemeColorShadeAlpha(TH_WIRE, 0, -128 - (int)(120.0f * sqrtf(colfac)));
+ UI_GetThemeColorShadeAlpha4ubv(TH_WIRE, 0, -128 - (int)(120.0f * sqrtf(colfac)), col);
/* only within action range */
if ((actframe - ctime >= start) && (actframe - ctime <= end)) {
@@ -2663,8 +2893,8 @@ static void draw_ghost_poses(Scene *scene, View3D *v3d, ARegion *ar, Base *base)
if (CFRA != cfrao) {
BKE_animsys_evaluate_animdata(scene, &ob->id, adt, (float)CFRA, ADT_RECALC_ALL);
- BKE_pose_where_is(scene, ob);
- draw_pose_bones(scene, v3d, ar, base, OB_WIRE, NULL, true, false);
+ BKE_pose_where_is(&eval_ctx, scene, ob);
+ draw_pose_bones(&eval_ctx, scene, view_layer, v3d, ar, base, OB_WIRE, col, true, false);
}
}
}
@@ -2682,16 +2912,17 @@ static void draw_ghost_poses(Scene *scene, View3D *v3d, ARegion *ar, Base *base)
CFRA = cfrao;
ob->pose = poseo;
arm->flag = flago;
- ob->mode |= OB_MODE_POSE;
+ eval_ctx.object_mode |= OB_MODE_POSE;
}
/* ********************************** Armature Drawing - Main ************************* */
/* called from drawobject.c, return true if nothing was drawn
* (ob_wire_col == NULL) when drawing ghost */
-bool draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
- const short dt, const short dflag, const unsigned char ob_wire_col[4],
- const bool is_outline)
+bool draw_armature(
+ const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, View3D *v3d, ARegion *ar, Base *base,
+ const short dt, const short dflag, const unsigned char ob_wire_col[4],
+ const bool is_outline)
{
Object *ob = base->object;
bArmature *arm = ob->data;
@@ -2700,11 +2931,7 @@ bool draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
if (v3d->flag2 & V3D_RENDER_OVERRIDE)
return true;
- /* needed for 'draw_line_bone' which draws pixel. */
- if (arm->drawtype == ARM_LINE) {
- glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
- }
-
+#if 0 /* Not used until lighting is properly reimplemented */
if (dt > OB_WIRE) {
/* we use color for solid lighting */
if (ELEM(arm->drawtype, ARM_LINE, ARM_WIRE)) {
@@ -2719,7 +2946,8 @@ bool draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
glFrontFace((ob->transflag & OB_NEG_SCALE) ? GL_CW : GL_CCW); /* only for lighting... */
}
}
-
+#endif
+
/* arm->flag is being used to detect mode... */
/* editmode? */
if (arm->edbo) {
@@ -2736,7 +2964,7 @@ bool draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
}
/* drawing posemode selection indices or colors only in these cases */
- if (!(base->flag & OB_FROMDUPLI)) {
+ if (!(base->flag_legacy & OB_FROMDUPLI)) {
if (G.f & G_PICKSEL) {
#if 0
/* nifty but actually confusing to allow bone selection out of posemode */
@@ -2746,37 +2974,34 @@ bool draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
}
else
#endif
- if (ob->mode & OB_MODE_POSE) {
+ if (eval_ctx->object_mode & OB_MODE_POSE) {
arm->flag |= ARM_POSEMODE;
}
}
- else if (ob->mode & OB_MODE_POSE) {
+ else if (eval_ctx->object_mode & OB_MODE_POSE) {
if (arm->ghosttype == ARM_GHOST_RANGE) {
- draw_ghost_poses_range(scene, v3d, ar, base);
+ draw_ghost_poses_range(eval_ctx, scene, view_layer, v3d, ar, base);
}
else if (arm->ghosttype == ARM_GHOST_KEYS) {
- draw_ghost_poses_keys(scene, v3d, ar, base);
+ draw_ghost_poses_keys(eval_ctx, scene, view_layer, v3d, ar, base);
}
else if (arm->ghosttype == ARM_GHOST_CUR) {
if (arm->ghostep)
- draw_ghost_poses(scene, v3d, ar, base);
+ draw_ghost_poses(eval_ctx, scene, view_layer, v3d, ar, base);
}
if ((dflag & DRAW_SCENESET) == 0) {
- if (ob == OBACT)
+ if (ob == OBACT(view_layer))
arm->flag |= ARM_POSEMODE;
- else if (OBACT && (OBACT->mode & OB_MODE_WEIGHT_PAINT)) {
- if (ob == modifiers_isDeformedByArmature(OBACT))
+ else if (OBACT(view_layer) && (eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT)) {
+ if (ob == modifiers_isDeformedByArmature(OBACT(view_layer)))
arm->flag |= ARM_POSEMODE;
}
draw_pose_paths(scene, v3d, ar, ob);
}
}
}
- draw_pose_bones(scene, v3d, ar, base, dt, ob_wire_col, (dflag & DRAW_CONSTCOLOR), is_outline);
+ draw_pose_bones(eval_ctx, scene, view_layer, v3d, ar, base, dt, ob_wire_col, (dflag & DRAW_CONSTCOLOR), is_outline);
arm->flag &= ~ARM_POSEMODE;
-
- if (ob->mode & OB_MODE_POSE)
- UI_ThemeColor(TH_WIRE); /* restore, for extra draw stuff */
}
else {
retval = true;
@@ -2785,9 +3010,5 @@ bool draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
/* restore */
glFrontFace(GL_CCW);
- if (arm->drawtype == ARM_LINE) {
- glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
- }
-
return retval;
}
diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c
index bbbf8c633bd..ce36d9b58c4 100644
--- a/source/blender/editors/space_view3d/drawmesh.c
+++ b/source/blender/editors/space_view3d/drawmesh.c
@@ -55,15 +55,17 @@
#include "BKE_editmesh.h"
#include "BKE_scene.h"
-#include "BIF_gl.h"
#include "BIF_glutil.h"
#include "UI_resources.h"
+#include "DEG_depsgraph.h"
+
#include "GPU_draw.h"
#include "GPU_material.h"
#include "GPU_basic_shader.h"
#include "GPU_shader.h"
+#include "GPU_matrix.h"
#include "RE_engine.h"
@@ -77,20 +79,6 @@ typedef struct drawMeshFaceSelect_userData {
BLI_bitmap *edge_flags; /* pairs of edge options (visible, select) */
} drawMeshFaceSelect_userData;
-typedef struct drawEMTFMapped_userData {
- BMEditMesh *em;
- bool has_mcol;
- int cd_poly_tex_offset;
- const MPoly *mpoly;
- const MTexPoly *mtexpoly;
-} drawEMTFMapped_userData;
-
-typedef struct drawTFace_userData {
- const Mesh *me;
- const MPoly *mpoly;
- const MTexPoly *mtexpoly;
-} drawTFace_userData;
-
/**************************** Face Select Mode *******************************/
/* mainly to be less confusing */
@@ -213,562 +201,6 @@ void draw_mesh_face_select(RegionView3D *rv3d, Mesh *me, DerivedMesh *dm, bool d
/***************************** Texture Drawing ******************************/
-static Material *give_current_material_or_def(Object *ob, int matnr)
-{
- extern Material defmaterial; /* render module abuse... */
- Material *ma = give_current_material(ob, matnr);
-
- return ma ? ma : &defmaterial;
-}
-
-/* Icky globals, fix with userdata parameter */
-
-static struct TextureDrawState {
- Object *ob;
- Image *stencil; /* texture painting stencil */
- Image *canvas; /* texture painting canvas, for image mode */
- bool use_game_mat;
- int is_lit, is_tex;
- int color_profile;
- bool use_backface_culling;
- bool two_sided_lighting;
- unsigned char obcol[4];
- bool is_texpaint;
- bool texpaint_material; /* use material slots for texture painting */
-} Gtexdraw = {NULL, NULL, NULL, false, 0, 0, 0, false, false, {0, 0, 0, 0}, false, false};
-
-static bool set_draw_settings_cached(
- int clearcache, MTexPoly *texface, Material *ma,
- const struct TextureDrawState *gtexdraw)
-{
- static Material *c_ma;
- static int c_textured;
- static MTexPoly c_texface;
- static int c_backculled;
- static bool c_badtex;
- static int c_lit;
- static int c_has_texface;
-
- int backculled = 1;
- int alphablend = GPU_BLEND_SOLID;
- int textured = 0;
- int lit = 0;
- int has_texface = texface != NULL;
- bool need_set_tpage = false;
- bool texpaint = ((gtexdraw->ob->mode & OB_MODE_TEXTURE_PAINT) != 0);
-
- Image *ima = NULL;
-
- if (ma != NULL) {
- if (ma->mode & MA_TRANSP) {
- alphablend = GPU_BLEND_ALPHA;
- }
- }
-
- if (clearcache) {
- c_textured = c_lit = c_backculled = -1;
- memset(&c_texface, 0, sizeof(c_texface));
- c_badtex = false;
- c_has_texface = -1;
- c_ma = NULL;
- }
- else {
- textured = gtexdraw->is_tex;
- }
-
- /* convert number of lights into boolean */
- if (gtexdraw->is_lit) {
- lit = 1;
- }
-
- backculled = gtexdraw->use_backface_culling;
- if (ma) {
- if (ma->mode & MA_SHLESS) lit = 0;
- if (gtexdraw->use_game_mat) {
- backculled = backculled || (ma->game.flag & GEMAT_BACKCULL);
- alphablend = ma->game.alpha_blend;
- }
- }
-
- if (texface && !texpaint) {
- textured = textured && (texface->tpage);
-
- /* no material, render alpha if texture has depth=32 */
- if (!ma && BKE_image_has_alpha(texface->tpage))
- alphablend = GPU_BLEND_ALPHA;
- }
- else if (texpaint) {
- if (gtexdraw->texpaint_material)
- ima = ma && ma->texpaintslot ? ma->texpaintslot[ma->paint_active_slot].ima : NULL;
- else
- ima = gtexdraw->canvas;
- }
- else
- textured = 0;
-
- if (backculled != c_backculled) {
- if (backculled) glEnable(GL_CULL_FACE);
- else glDisable(GL_CULL_FACE);
-
- c_backculled = backculled;
- }
-
- /* need to re-set tpage if textured flag changed or existsment of texface changed.. */
- need_set_tpage = textured != c_textured || has_texface != c_has_texface;
- /* ..or if settings inside texface were changed (if texface was used) */
- need_set_tpage |= (texpaint && c_ma != ma) || (texface && memcmp(&c_texface, texface, sizeof(c_texface)));
-
- if (need_set_tpage) {
- if (textured) {
- if (texpaint) {
- c_badtex = false;
- if (GPU_verify_image(ima, NULL, GL_TEXTURE_2D, 0, 1, 0, false)) {
- glEnable(GL_TEXTURE_2D);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE);
- glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_TEXTURE);
- glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_PRIMARY_COLOR);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE);
- glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_TEXTURE);
-
- glActiveTexture(GL_TEXTURE1);
- glEnable(GL_TEXTURE_2D);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE);
- glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_PREVIOUS);
- glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_PRIMARY_COLOR);
- glTexEnvi(GL_TEXTURE_ENV, GL_SRC2_RGB, GL_PREVIOUS);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_SRC_ALPHA);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE);
- glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_PREVIOUS);
- glBindTexture(GL_TEXTURE_2D, ima->bindcode[TEXTARGET_TEXTURE_2D]);
- glActiveTexture(GL_TEXTURE0);
- }
- else {
- glActiveTexture(GL_TEXTURE1);
- glDisable(GL_TEXTURE_2D);
- glBindTexture(GL_TEXTURE_2D, 0);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
- glActiveTexture(GL_TEXTURE0);
-
- c_badtex = true;
- GPU_clear_tpage(true);
- glDisable(GL_TEXTURE_2D);
- glBindTexture(GL_TEXTURE_2D, 0);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
- }
- }
- else {
- c_badtex = !GPU_set_tpage(texface, !texpaint, alphablend);
- }
- }
- else {
- GPU_set_tpage(NULL, 0, 0);
- c_badtex = false;
- }
- c_textured = textured;
- c_has_texface = has_texface;
- if (texface)
- memcpy(&c_texface, texface, sizeof(c_texface));
- }
-
- if (c_badtex) lit = 0;
- if (lit != c_lit || ma != c_ma || textured != c_textured) {
- int options = GPU_SHADER_USE_COLOR;
-
- if (c_textured && !c_badtex) {
- options |= GPU_SHADER_TEXTURE_2D;
- }
- if (gtexdraw->two_sided_lighting) {
- options |= GPU_SHADER_TWO_SIDED;
- }
-
- if (lit) {
- options |= GPU_SHADER_LIGHTING;
- if (!ma)
- ma = give_current_material_or_def(NULL, 0); /* default material */
-
- float specular[3];
- mul_v3_v3fl(specular, &ma->specr, ma->spec);
-
- GPU_basic_shader_colors(NULL, specular, ma->har, 1.0f);
- }
-
- GPU_basic_shader_bind(options);
-
- c_lit = lit;
- c_ma = ma;
- }
-
- return c_badtex;
-}
-
-static void draw_textured_begin(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob)
-{
- unsigned char obcol[4];
- bool is_tex, solidtex;
- Mesh *me = ob->data;
- ImagePaintSettings *imapaint = &scene->toolsettings->imapaint;
-
- /* XXX scene->obedit warning */
-
- /* texture draw is abused for mask selection mode, do this so wire draw
- * with face selection in weight paint is not lit. */
- if ((v3d->drawtype <= OB_WIRE) && (ob->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT))) {
- solidtex = false;
- Gtexdraw.is_lit = 0;
- }
- else if ((ob->mode & OB_MODE_TEXTURE_PAINT) && BKE_scene_use_new_shading_nodes(scene)) {
- solidtex = true;
- if (v3d->flag2 & V3D_SHADELESS_TEX)
- Gtexdraw.is_lit = 0;
- else
- Gtexdraw.is_lit = -1;
- }
- else if ((v3d->drawtype == OB_SOLID) ||
- ((ob->mode & OB_MODE_EDIT) && (v3d->drawtype != OB_TEXTURE)))
- {
- /* draw with default lights in solid draw mode and edit mode */
- solidtex = true;
- Gtexdraw.is_lit = -1;
- }
- else {
- /* draw with lights in the scene otherwise */
- solidtex = false;
- if (v3d->flag2 & V3D_SHADELESS_TEX) {
- Gtexdraw.is_lit = 0;
- }
- else {
- Gtexdraw.is_lit = GPU_scene_object_lights(
- scene, ob, v3d->localvd ? v3d->localvd->lay : v3d->lay,
- rv3d->viewmat, !rv3d->is_persp);
- }
- }
-
- rgba_float_to_uchar(obcol, ob->col);
-
- if (solidtex || v3d->drawtype == OB_TEXTURE) is_tex = true;
- else is_tex = false;
-
- Gtexdraw.ob = ob;
- Gtexdraw.stencil = (imapaint->flag & IMAGEPAINT_PROJECT_LAYER_STENCIL) ? imapaint->stencil : NULL;
- Gtexdraw.is_texpaint = (ob->mode == OB_MODE_TEXTURE_PAINT);
- Gtexdraw.texpaint_material = (imapaint->mode == IMAGEPAINT_MODE_MATERIAL);
- Gtexdraw.canvas = (Gtexdraw.texpaint_material) ? NULL : imapaint->canvas;
- Gtexdraw.is_tex = is_tex;
-
- /* naughty multitexturing hacks to quickly support stencil + shading + alpha blending
- * in new texpaint code. The better solution here would be to support GLSL */
- if (Gtexdraw.is_texpaint) {
- glActiveTexture(GL_TEXTURE1);
- glEnable(GL_TEXTURE_2D);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE);
- glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_PREVIOUS);
- glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_PRIMARY_COLOR);
- glTexEnvi(GL_TEXTURE_ENV, GL_SRC2_RGB, GL_PREVIOUS);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_SRC_ALPHA);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE);
- glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_PREVIOUS);
-
- /* load the stencil texture here */
- if (Gtexdraw.stencil != NULL) {
- glActiveTexture(GL_TEXTURE2);
- if (GPU_verify_image(Gtexdraw.stencil, NULL, GL_TEXTURE_2D, false, false, false, false)) {
- float col[4] = {imapaint->stencil_col[0], imapaint->stencil_col[1], imapaint->stencil_col[2], 1.0f};
- glEnable(GL_TEXTURE_2D);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE);
- glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_PREVIOUS);
- glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_CONSTANT);
- glTexEnvi(GL_TEXTURE_ENV, GL_SRC2_RGB, GL_TEXTURE);
- glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_MODULATE);
- glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_PREVIOUS);
- glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_ALPHA, GL_TEXTURE);
- glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, col);
- if ((imapaint->flag & IMAGEPAINT_PROJECT_LAYER_STENCIL_INV) == 0) {
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_ONE_MINUS_SRC_COLOR);
- }
- else {
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_SRC_COLOR);
- }
- }
- }
- glActiveTexture(GL_TEXTURE0);
- }
-
- Gtexdraw.color_profile = BKE_scene_check_color_management_enabled(scene);
- Gtexdraw.use_game_mat = (RE_engines_find(scene->r.engine)->flag & RE_GAME) != 0;
- Gtexdraw.use_backface_culling = (v3d->flag2 & V3D_BACKFACE_CULLING) != 0;
- Gtexdraw.two_sided_lighting = (me->flag & ME_TWOSIDED);
-
- memcpy(Gtexdraw.obcol, obcol, sizeof(obcol));
- set_draw_settings_cached(1, NULL, NULL, &Gtexdraw);
- glCullFace(GL_BACK);
-}
-
-static void draw_textured_end(void)
-{
- if (Gtexdraw.ob->mode & OB_MODE_TEXTURE_PAINT) {
- glActiveTexture(GL_TEXTURE1);
- glDisable(GL_TEXTURE_2D);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_SRC_COLOR);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
- glBindTexture(GL_TEXTURE_2D, 0);
-
- if (Gtexdraw.stencil != NULL) {
- glActiveTexture(GL_TEXTURE2);
- glDisable(GL_TEXTURE_2D);
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_SRC_COLOR);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
- glBindTexture(GL_TEXTURE_2D, 0);
- }
- glActiveTexture(GL_TEXTURE0);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
- /* manual reset, since we don't use tpage */
- glBindTexture(GL_TEXTURE_2D, 0);
- /* force switch off textures */
- GPU_clear_tpage(true);
- }
- else {
- /* switch off textures */
- GPU_set_tpage(NULL, 0, 0);
- }
-
- glDisable(GL_CULL_FACE);
- GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
-
- /* XXX, bad patch - GPU_default_lights() calls
- * glLightfv(GL_POSITION, ...) which
- * is transformed by the current matrix... we
- * need to make sure that matrix is identity.
- *
- * It would be better if drawmesh.c kept track
- * of and restored the light settings it changed.
- * - zr
- */
- glPushMatrix();
- glLoadIdentity();
- GPU_default_lights();
- glPopMatrix();
-}
-
-static DMDrawOption draw_tface__set_draw_legacy(MTexPoly *mtexpoly, const bool has_mcol, int matnr)
-{
- Material *ma = give_current_material(Gtexdraw.ob, matnr + 1);
- bool invalidtexture = false;
-
- if (ma && (ma->game.flag & GEMAT_INVISIBLE))
- return DM_DRAW_OPTION_SKIP;
-
- invalidtexture = set_draw_settings_cached(0, mtexpoly, ma, &Gtexdraw);
-
- if (mtexpoly && invalidtexture) {
- glColor3ub(0xFF, 0x00, 0xFF);
- return DM_DRAW_OPTION_NO_MCOL; /* Don't set color */
- }
- else if (!has_mcol) {
- if (mtexpoly) {
- glColor3f(1.0, 1.0, 1.0);
- }
- else {
- if (ma) {
- if (ma->shade_flag & MA_OBCOLOR) {
- glColor3ubv(Gtexdraw.obcol);
- }
- else {
- float col[3];
- if (Gtexdraw.color_profile) linearrgb_to_srgb_v3_v3(col, &ma->r);
- else copy_v3_v3(col, &ma->r);
-
- glColor3fv(col);
- }
- }
- else {
- glColor3f(1.0, 1.0, 1.0);
- }
- }
- return DM_DRAW_OPTION_NORMAL; /* normal drawing (no mcols anyway, no need to turn off) */
- }
- else {
- return DM_DRAW_OPTION_NORMAL; /* Set color from mcol */
- }
-}
-
-static DMDrawOption draw_tface__set_draw(MTexPoly *mtexpoly, const bool UNUSED(has_mcol), int matnr)
-{
- Material *ma = give_current_material(Gtexdraw.ob, matnr + 1);
-
- if (ma && (ma->game.flag & GEMAT_INVISIBLE)) return DM_DRAW_OPTION_SKIP;
-
- if (mtexpoly || Gtexdraw.is_texpaint)
- set_draw_settings_cached(0, mtexpoly, ma, &Gtexdraw);
-
- /* always use color from mcol, as set in update_tface_color_layer */
- return DM_DRAW_OPTION_NORMAL;
-}
-
-static void update_tface_color_layer(DerivedMesh *dm, bool use_mcol)
-{
- const MPoly *mp = dm->getPolyArray(dm);
- const int mpoly_num = dm->getNumPolys(dm);
- MTexPoly *mtexpoly = DM_get_poly_data_layer(dm, CD_MTEXPOLY);
- MLoopCol *finalCol;
- int i, j;
- MLoopCol *mloopcol = NULL;
-
- /* cache material values to avoid a lot of lookups */
- Material *ma = NULL;
- short mat_nr_prev = -1;
- enum {
- COPY_CALC,
- COPY_ORIG,
- COPY_PREV,
- } copy_mode = COPY_CALC;
-
- if (use_mcol) {
- mloopcol = dm->getLoopDataArray(dm, CD_PREVIEW_MLOOPCOL);
- if (!mloopcol)
- mloopcol = dm->getLoopDataArray(dm, CD_MLOOPCOL);
- }
-
- if (CustomData_has_layer(&dm->loopData, CD_TEXTURE_MLOOPCOL)) {
- finalCol = CustomData_get_layer(&dm->loopData, CD_TEXTURE_MLOOPCOL);
- }
- else {
- finalCol = MEM_mallocN(sizeof(MLoopCol) * dm->numLoopData, "add_tface_color_layer");
- CustomData_add_layer(&dm->loopData, CD_TEXTURE_MLOOPCOL, CD_ASSIGN, finalCol, dm->numLoopData);
- }
-
- for (i = mpoly_num; i--; mp++) {
- const short mat_nr = mp->mat_nr;
-
- if (UNLIKELY(mat_nr_prev != mat_nr)) {
- ma = give_current_material(Gtexdraw.ob, mat_nr + 1);
- copy_mode = COPY_CALC;
- mat_nr_prev = mat_nr;
- }
-
- /* avoid lookups */
- if (copy_mode == COPY_ORIG) {
- memcpy(&finalCol[mp->loopstart], &mloopcol[mp->loopstart], sizeof(*finalCol) * mp->totloop);
- }
- else if (copy_mode == COPY_PREV) {
- int loop_index = mp->loopstart;
- const MLoopCol *lcol_prev = &finalCol[(mp - 1)->loopstart];
- for (j = 0; j < mp->totloop; j++, loop_index++) {
- finalCol[loop_index] = *lcol_prev;
- }
- }
-
- /* (copy_mode == COPY_CALC) */
- else if (ma && (ma->game.flag & GEMAT_INVISIBLE)) {
- if (mloopcol) {
- memcpy(&finalCol[mp->loopstart], &mloopcol[mp->loopstart], sizeof(*finalCol) * mp->totloop);
- copy_mode = COPY_ORIG;
- }
- else {
- memset(&finalCol[mp->loopstart], 0xff, sizeof(*finalCol) * mp->totloop);
- copy_mode = COPY_PREV;
- }
- }
- else if (mtexpoly && set_draw_settings_cached(0, mtexpoly, ma, &Gtexdraw)) {
- int loop_index = mp->loopstart;
- for (j = 0; j < mp->totloop; j++, loop_index++) {
- finalCol[loop_index].r = 255;
- finalCol[loop_index].g = 0;
- finalCol[loop_index].b = 255;
- finalCol[loop_index].a = 255;
- }
- copy_mode = COPY_PREV;
- }
- else if (ma && (ma->shade_flag & MA_OBCOLOR)) {
- int loop_index = mp->loopstart;
- for (j = 0; j < mp->totloop; j++, loop_index++) {
- copy_v3_v3_uchar(&finalCol[loop_index].r, Gtexdraw.obcol);
- finalCol[loop_index].a = 255;
- }
- copy_mode = COPY_PREV;
- }
- else {
- if (mloopcol) {
- memcpy(&finalCol[mp->loopstart], &mloopcol[mp->loopstart], sizeof(*finalCol) * mp->totloop);
- copy_mode = COPY_ORIG;
- }
- else if (mtexpoly) {
- memset(&finalCol[mp->loopstart], 0xff, sizeof(*finalCol) * mp->totloop);
- copy_mode = COPY_PREV;
- }
- else {
- float col[3];
-
- if (ma) {
- int loop_index = mp->loopstart;
- MLoopCol lcol;
-
- if (Gtexdraw.color_profile) linearrgb_to_srgb_v3_v3(col, &ma->r);
- else copy_v3_v3(col, &ma->r);
- rgb_float_to_uchar((unsigned char *)&lcol.r, col);
- lcol.a = 255;
-
- for (j = 0; j < mp->totloop; j++, loop_index++) {
- finalCol[loop_index] = lcol;
- }
- }
- else {
- memset(&finalCol[mp->loopstart], 0xff, sizeof(*finalCol) * mp->totloop);
- }
- copy_mode = COPY_PREV;
- }
- }
- }
-
- dm->dirty |= DM_DIRTY_MCOL_UPDATE_DRAW;
-}
-
-static DMDrawOption draw_tface_mapped__set_draw(void *userData, int origindex, int UNUSED(mat_nr))
-{
- const Mesh *me = ((drawTFace_userData *)userData)->me;
-
- /* array checked for NULL before calling */
- MPoly *mpoly = &me->mpoly[origindex];
-
- BLI_assert(origindex >= 0 && origindex < me->totpoly);
-
- if (mpoly->flag & ME_HIDE) {
- return DM_DRAW_OPTION_SKIP;
- }
- else {
- MTexPoly *tpoly = (me->mtpoly) ? &me->mtpoly[origindex] : NULL;
- int matnr = mpoly->mat_nr;
-
- return draw_tface__set_draw(tpoly, (me->mloopcol != NULL), matnr);
- }
-}
-
-static DMDrawOption draw_em_tf_mapped__set_draw(void *userData, int origindex, int mat_nr)
-{
- drawEMTFMapped_userData *data = userData;
- BMEditMesh *em = data->em;
- BMFace *efa;
-
- if (UNLIKELY(origindex >= em->bm->totface))
- return DM_DRAW_OPTION_NORMAL;
-
- efa = BM_face_at_index(em->bm, origindex);
-
- if (BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) {
- return DM_DRAW_OPTION_SKIP;
- }
- else {
- MTexPoly *mtexpoly = (data->cd_poly_tex_offset != -1) ?
- BM_ELEM_CD_GET_VOID_P(efa, data->cd_poly_tex_offset) : NULL;
- int matnr = (mat_nr != -1) ? mat_nr : efa->mat_nr;
-
- return draw_tface__set_draw_legacy(mtexpoly, data->has_mcol, matnr);
- }
-}
-
/* when face select is on, use face hidden flag */
static DMDrawOption wpaint__setSolidDrawOptions_facemask(void *userData, int index)
{
@@ -779,288 +211,6 @@ static DMDrawOption wpaint__setSolidDrawOptions_facemask(void *userData, int ind
return DM_DRAW_OPTION_NORMAL;
}
-static void draw_mesh_text(Scene *scene, Object *ob, int glsl)
-{
- Mesh *me = ob->data;
- DerivedMesh *ddm;
- MPoly *mp, *mface = me->mpoly;
- MTexPoly *mtpoly = me->mtpoly;
- MLoopUV *mloopuv = me->mloopuv;
- MLoopUV *luv;
- MLoopCol *mloopcol = me->mloopcol; /* why does mcol exist? */
- MLoopCol *lcol;
-
- bProperty *prop = BKE_bproperty_object_get(ob, "Text");
- GPUVertexAttribs gattribs;
- int a, totpoly = me->totpoly;
-
- /* fake values to pass to GPU_render_text() */
- MCol tmp_mcol[4] = {{0}};
- MCol *tmp_mcol_pt = mloopcol ? tmp_mcol : NULL;
-
- /* don't draw without tfaces */
- if (!mtpoly || !mloopuv)
- return;
-
- /* don't draw when editing */
- if (ob->mode & OB_MODE_EDIT)
- return;
- else if (ob == OBACT)
- if (BKE_paint_select_elem_test(ob))
- return;
-
- ddm = mesh_get_derived_deform(scene, ob, CD_MASK_BAREMESH);
-
- for (a = 0, mp = mface; a < totpoly; a++, mtpoly++, mp++) {
- short matnr = mp->mat_nr;
- const bool mf_smooth = (mp->flag & ME_SMOOTH) != 0;
- Material *mat = (me->mat) ? me->mat[matnr] : NULL;
- int mode = mat ? mat->game.flag : GEMAT_INVISIBLE;
-
-
- if (!(mode & GEMAT_INVISIBLE) && (mode & GEMAT_TEXT) && mp->totloop >= 3) {
- /* get the polygon as a tri/quad */
- int mp_vi[4];
- float v_quad_data[4][3];
- const float *v_quad[4];
- const float *uv_quad[4];
- char string[MAX_PROPSTRING];
- int characters, i, glattrib = -1, badtex = 0;
-
-
- /* TEXFACE */
- if (glsl) {
- GPU_object_material_bind(matnr + 1, &gattribs);
-
- for (i = 0; i < gattribs.totlayer; i++) {
- if (gattribs.layer[i].type == CD_MTFACE) {
- glattrib = gattribs.layer[i].glindex;
- break;
- }
- }
- }
- else {
- badtex = set_draw_settings_cached(0, mtpoly, mat, &Gtexdraw);
- if (badtex) {
- continue;
- }
- }
-
- mp_vi[0] = me->mloop[mp->loopstart + 0].v;
- mp_vi[1] = me->mloop[mp->loopstart + 1].v;
- mp_vi[2] = me->mloop[mp->loopstart + 2].v;
- mp_vi[3] = (mp->totloop >= 4) ? me->mloop[mp->loopstart + 3].v : 0;
-
- /* UV */
- luv = &mloopuv[mp->loopstart];
- uv_quad[0] = luv->uv; luv++;
- uv_quad[1] = luv->uv; luv++;
- uv_quad[2] = luv->uv; luv++;
- if (mp->totloop >= 4) {
- uv_quad[3] = luv->uv;
- }
- else {
- uv_quad[3] = NULL;
- }
-
-
- /* COLOR */
- if (mloopcol) {
- unsigned int totloop_clamp = min_ii(4, mp->totloop);
- unsigned int j;
- lcol = &mloopcol[mp->loopstart];
-
- for (j = 0; j < totloop_clamp; j++, lcol++) {
- MESH_MLOOPCOL_TO_MCOL(lcol, &tmp_mcol[j]);
- }
- }
-
- /* LOCATION */
- ddm->getVertCo(ddm, mp_vi[0], v_quad_data[0]);
- ddm->getVertCo(ddm, mp_vi[1], v_quad_data[1]);
- ddm->getVertCo(ddm, mp_vi[2], v_quad_data[2]);
- if (mp->totloop >= 4) {
- ddm->getVertCo(ddm, mp_vi[3], v_quad_data[3]);
- }
-
- v_quad[0] = v_quad_data[0];
- v_quad[1] = v_quad_data[1];
- v_quad[2] = v_quad_data[2];
- if (mp->totloop >= 4) {
- v_quad[3] = v_quad_data[2];
- }
- else {
- v_quad[3] = NULL;
- }
-
-
- /* The BM_FONT handling is in the gpu module, shared with the
- * game engine, was duplicated previously */
-
- BKE_bproperty_set_valstr(prop, string);
- characters = strlen(string);
-
- if (!BKE_image_has_ibuf(mtpoly->tpage, NULL))
- characters = 0;
-
- if (!mf_smooth) {
- float nor[3];
-
- normal_tri_v3(nor, v_quad[0], v_quad[1], v_quad[2]);
-
- glNormal3fv(nor);
- }
-
- GPU_render_text(
- mtpoly, mode, string, characters,
- (unsigned int *)tmp_mcol_pt,
- v_quad, uv_quad,
- glattrib);
- }
- }
-
- ddm->release(ddm);
-}
-
-static int compareDrawOptions(void *userData, int cur_index, int next_index)
-{
- drawTFace_userData *data = userData;
-
- if (data->mpoly && data->mpoly[cur_index].mat_nr != data->mpoly[next_index].mat_nr)
- return 0;
-
- if (data->mtexpoly && data->mtexpoly[cur_index].tpage != data->mtexpoly[next_index].tpage)
- return 0;
-
- return 1;
-}
-
-
-static int compareDrawOptionsEm(void *userData, int cur_index, int next_index)
-{
- drawEMTFMapped_userData *data = userData;
-
- if (data->mpoly && data->mpoly[cur_index].mat_nr != data->mpoly[next_index].mat_nr)
- return 0;
-
- if (data->mtexpoly && data->mtexpoly[cur_index].tpage != data->mtexpoly[next_index].tpage)
- return 0;
-
- return 1;
-}
-
-static void draw_mesh_textured_old(Scene *scene, View3D *v3d, RegionView3D *rv3d,
- Object *ob, DerivedMesh *dm, const int draw_flags)
-{
- Mesh *me = ob->data;
-
- /* correct for negative scale */
- if (ob->transflag & OB_NEG_SCALE) glFrontFace(GL_CW);
- else glFrontFace(GL_CCW);
-
- /* draw the textured mesh */
- draw_textured_begin(scene, v3d, rv3d, ob);
-
- glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
-
- if (ob->mode & OB_MODE_EDIT) {
- drawEMTFMapped_userData data;
-
- data.em = me->edit_btmesh;
- data.has_mcol = CustomData_has_layer(&me->edit_btmesh->bm->ldata, CD_MLOOPCOL);
- data.cd_poly_tex_offset = CustomData_get_offset(&me->edit_btmesh->bm->pdata, CD_MTEXPOLY);
-
- data.mpoly = DM_get_poly_data_layer(dm, CD_MPOLY);
- data.mtexpoly = DM_get_poly_data_layer(dm, CD_MTEXPOLY);
-
- dm->drawMappedFacesTex(dm, draw_em_tf_mapped__set_draw, compareDrawOptionsEm, &data, 0);
- }
- else {
- DMDrawFlag dm_draw_flag;
- drawTFace_userData userData;
-
- if (ob->mode & OB_MODE_TEXTURE_PAINT) {
- dm_draw_flag = DM_DRAW_USE_TEXPAINT_UV;
- }
- else {
- dm_draw_flag = DM_DRAW_USE_ACTIVE_UV;
- }
-
- if (ob == OBACT) {
- if (ob->mode & OB_MODE_WEIGHT_PAINT) {
- dm_draw_flag |= DM_DRAW_USE_COLORS | DM_DRAW_ALWAYS_SMOOTH | DM_DRAW_SKIP_HIDDEN;
- }
- else if (ob->mode & OB_MODE_SCULPT) {
- dm_draw_flag |= DM_DRAW_SKIP_HIDDEN | DM_DRAW_USE_COLORS;
- }
- else if ((ob->mode & OB_MODE_TEXTURE_PAINT) == 0) {
- dm_draw_flag |= DM_DRAW_USE_COLORS;
- }
- }
- else {
- if ((ob->mode & OB_MODE_TEXTURE_PAINT) == 0) {
- dm_draw_flag |= DM_DRAW_USE_COLORS;
- }
- }
-
-
- userData.mpoly = DM_get_poly_data_layer(dm, CD_MPOLY);
- userData.mtexpoly = DM_get_poly_data_layer(dm, CD_MTEXPOLY);
-
- if (draw_flags & DRAW_FACE_SELECT) {
- userData.me = me;
-
- dm->drawMappedFacesTex(
- dm, me->mpoly ? draw_tface_mapped__set_draw : NULL, compareDrawOptions,
- &userData, dm_draw_flag);
- }
- else {
- userData.me = NULL;
-
- /* if ((ob->mode & OB_MODE_ALL_PAINT) == 0) */ {
-
- /* Note: this isn't efficient and runs on every redraw,
- * its needed so material colors are used for vertex colors.
- * In the future we will likely remove 'texface' so, just avoid running this where possible,
- * (when vertex paint or weight paint are used).
- *
- * Note 2: We disable optimization for now since it causes T48788
- * and it is now too close to release to do something smarter.
- *
- * TODO(sergey): Find some real solution here.
- */
-
- update_tface_color_layer(dm, !(ob->mode & OB_MODE_TEXTURE_PAINT));
- }
-
- dm->drawFacesTex(
- dm, draw_tface__set_draw, compareDrawOptions,
- &userData, dm_draw_flag);
- }
- }
-
- /* draw game engine text hack */
- if (rv3d->rflag & RV3D_IS_GAME_ENGINE) {
- if (BKE_bproperty_object_get(ob, "Text")) {
- draw_mesh_text(scene, ob, 0);
- }
- }
-
- draw_textured_end();
-
- /* draw edges and selected faces over textured mesh */
- if (!(ob == scene->obedit) && (draw_flags & DRAW_FACE_SELECT)) {
- bool draw_select_edges = (ob->mode & OB_MODE_TEXTURE_PAINT) == 0;
- draw_mesh_face_select(rv3d, me, dm, draw_select_edges);
- }
-
- /* reset from negative scale correction */
- glFrontFace(GL_CCW);
-
- /* in editmode, the blend mode needs to be set in case it was ADD */
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-}
-
/************************** NEW SHADING NODES ********************************/
typedef struct TexMatCallback {
@@ -1072,187 +222,11 @@ typedef struct TexMatCallback {
bool two_sided_lighting;
} TexMatCallback;
-static void tex_mat_set_material_cb(void *UNUSED(userData), int mat_nr, void *attribs)
-{
- /* all we have to do here is simply enable the GLSL material, but note
- * that the GLSL code will give different result depending on the drawtype,
- * in texture draw mode it will output the active texture node, in material
- * draw mode it will show the full material. */
- GPU_object_material_bind(mat_nr, attribs);
-}
-
-static void tex_mat_set_texture_cb(void *userData, int mat_nr, void *attribs)
-{
- /* texture draw mode without GLSL */
- TexMatCallback *data = (TexMatCallback *)userData;
- GPUVertexAttribs *gattribs = attribs;
- Image *ima;
- ImageUser *iuser;
- bNode *node;
-
- /* draw image texture if we find one */
- if (ED_object_get_active_image(data->ob, mat_nr, &ima, &iuser, &node, NULL)) {
- /* get openl texture */
- int mipmap = 1;
- int bindcode = (ima) ? GPU_verify_image(ima, iuser, GL_TEXTURE_2D, 0, 0, mipmap, false) : 0;
-
- if (bindcode) {
- NodeTexBase *texbase = node->storage;
-
- /* disable existing material */
- GPU_object_material_unbind();
-
- /* bind texture */
- glBindTexture(GL_TEXTURE_2D, ima->bindcode[TEXTARGET_TEXTURE_2D]);
-
- glMatrixMode(GL_TEXTURE);
- glLoadMatrixf(texbase->tex_mapping.mat);
- glMatrixMode(GL_MODELVIEW);
-
- /* use active UV texture layer */
- memset(gattribs, 0, sizeof(*gattribs));
-
- gattribs->layer[0].type = CD_MTFACE;
- gattribs->layer[0].name[0] = '\0';
- gattribs->layer[0].gltexco = 1;
- gattribs->totlayer = 1;
-
- /* bind material */
- float diffuse[3] = {1.0f, 1.0f, 1.0f};
-
- int options = GPU_SHADER_TEXTURE_2D;
- if (!data->shadeless)
- options |= GPU_SHADER_LIGHTING;
- if (data->two_sided_lighting)
- options |= GPU_SHADER_TWO_SIDED;
-
- GPU_basic_shader_colors(diffuse, NULL, 0, 1.0f);
- GPU_basic_shader_bind(options);
-
- return;
- }
- }
-
- /* disable texture material */
- GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
-
- if (data->shadeless) {
- glColor3f(1.0f, 1.0f, 1.0f);
- memset(gattribs, 0, sizeof(*gattribs));
- }
- else {
- glMatrixMode(GL_TEXTURE);
- glLoadIdentity();
- glMatrixMode(GL_MODELVIEW);
-
- /* enable solid material */
- GPU_object_material_bind(mat_nr, attribs);
- }
-}
-
-static bool tex_mat_set_face_mesh_cb(void *userData, int index)
-{
- /* faceselect mode face hiding */
- TexMatCallback *data = (TexMatCallback *)userData;
- Mesh *me = (Mesh *)data->me;
- MPoly *mp = &me->mpoly[index];
-
- return !(mp->flag & ME_HIDE);
-}
-
-static bool tex_mat_set_face_editmesh_cb(void *userData, int index)
-{
- /* editmode face hiding */
- TexMatCallback *data = (TexMatCallback *)userData;
- Mesh *me = (Mesh *)data->me;
- BMEditMesh *em = me->edit_btmesh;
- BMFace *efa;
-
- if (UNLIKELY(index >= em->bm->totface))
- return DM_DRAW_OPTION_NORMAL;
-
- efa = BM_face_at_index(em->bm, index);
-
- return !BM_elem_flag_test(efa, BM_ELEM_HIDDEN);
-}
-
-void draw_mesh_textured(Scene *scene, View3D *v3d, RegionView3D *rv3d,
+void draw_mesh_textured(Scene *scene, ViewLayer *view_layer, View3D *v3d, RegionView3D *rv3d,
Object *ob, DerivedMesh *dm, const int draw_flags)
{
- /* if not cycles, or preview-modifiers, or drawing matcaps */
- if ((draw_flags & DRAW_MODIFIERS_PREVIEW) ||
- (v3d->flag2 & V3D_SHOW_SOLID_MATCAP) ||
- (BKE_scene_use_new_shading_nodes(scene) == false) ||
- ((ob->mode & OB_MODE_TEXTURE_PAINT) && ELEM(v3d->drawtype, OB_TEXTURE, OB_SOLID)))
- {
- draw_mesh_textured_old(scene, v3d, rv3d, ob, dm, draw_flags);
- return;
- }
- else if (ob->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT)) {
- draw_mesh_paint(v3d, rv3d, ob, dm, draw_flags);
- return;
- }
-
- /* set opengl state for negative scale & color */
- if (ob->transflag & OB_NEG_SCALE) glFrontFace(GL_CW);
- else glFrontFace(GL_CCW);
-
- Mesh *me = ob->data;
-
- bool shadeless = ((v3d->flag2 & V3D_SHADELESS_TEX) &&
- ((v3d->drawtype == OB_TEXTURE) || (ob->mode & OB_MODE_TEXTURE_PAINT)));
- bool two_sided_lighting = (me->flag & ME_TWOSIDED) != 0;
-
- TexMatCallback data = {scene, ob, me, dm, shadeless, two_sided_lighting};
- bool (*set_face_cb)(void *, int);
- bool picking = (G.f & G_PICKSEL) != 0;
-
- /* face hiding callback depending on mode */
- if (ob == scene->obedit)
- set_face_cb = tex_mat_set_face_editmesh_cb;
- else if (draw_flags & DRAW_FACE_SELECT)
- set_face_cb = tex_mat_set_face_mesh_cb;
- else
- set_face_cb = NULL;
-
- /* test if we can use glsl */
- const int drawtype = view3d_effective_drawtype(v3d);
- bool glsl = (drawtype == OB_MATERIAL) && !picking;
-
- GPU_begin_object_materials(v3d, rv3d, scene, ob, glsl, NULL);
-
- if (glsl || picking) {
- /* draw glsl or solid */
- dm->drawMappedFacesMat(dm,
- tex_mat_set_material_cb,
- set_face_cb, &data);
- }
- else {
- /* draw textured */
- dm->drawMappedFacesMat(dm,
- tex_mat_set_texture_cb,
- set_face_cb, &data);
- }
-
- GPU_end_object_materials();
-
- /* reset opengl state */
- GPU_end_object_materials();
- GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
-
- glBindTexture(GL_TEXTURE_2D, 0);
-
- glFrontFace(GL_CCW);
-
- glMatrixMode(GL_TEXTURE);
- glLoadIdentity();
- glMatrixMode(GL_MODELVIEW);
-
- /* faceselect mode drawing over textured mesh */
- if (!(ob == scene->obedit) && (draw_flags & DRAW_FACE_SELECT)) {
- bool draw_select_edges = (ob->mode & OB_MODE_TEXTURE_PAINT) == 0;
- draw_mesh_face_select(rv3d, ob->data, dm, draw_select_edges);
- }
+ UNUSED_VARS(scene, view_layer, v3d, rv3d, ob, dm, draw_flags);
+ return;
}
/* Vertex Paint and Weight Paint */
@@ -1299,13 +273,6 @@ void draw_mesh_paint_vcolor_faces(DerivedMesh *dm, const bool use_light,
flags |= DM_DRAW_NEED_NORMALS;
}
- /* Don't show alpha in wire mode. */
- const bool show_alpha = use_light;
- if (show_alpha) {
- glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- }
-
if (me->mloopcol) {
dm->drawMappedFaces(dm, facemask_cb, setMaterial, NULL, user_data,
DM_DRAW_USE_COLORS | flags);
@@ -1315,10 +282,6 @@ void draw_mesh_paint_vcolor_faces(DerivedMesh *dm, const bool use_light,
dm->drawMappedFaces(dm, facemask_cb, setMaterial, NULL, user_data, flags);
}
- if (show_alpha) {
- glDisable(GL_BLEND);
- }
-
if (use_light) {
draw_mesh_paint_light_end();
}
@@ -1364,8 +327,10 @@ void draw_mesh_paint_weight_edges(RegionView3D *rv3d, DerivedMesh *dm,
}
}
-void draw_mesh_paint(View3D *v3d, RegionView3D *rv3d,
- Object *ob, DerivedMesh *dm, const int draw_flags)
+void draw_mesh_paint(
+ const EvaluationContext *eval_ctx,
+ View3D *v3d, RegionView3D *rv3d,
+ Object *ob, DerivedMesh *dm, const int draw_flags)
{
DMSetDrawOptions facemask = NULL;
Mesh *me = ob->data;
@@ -1375,21 +340,21 @@ void draw_mesh_paint(View3D *v3d, RegionView3D *rv3d,
if (me->editflag & (ME_EDIT_PAINT_VERT_SEL | ME_EDIT_PAINT_FACE_SEL))
facemask = wpaint__setSolidDrawOptions_facemask;
- if (ob->mode & OB_MODE_WEIGHT_PAINT) {
+ if (eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT) {
draw_mesh_paint_weight_faces(dm, use_light, facemask, me);
}
- else if (ob->mode & OB_MODE_VERTEX_PAINT) {
+ else if (eval_ctx->object_mode & OB_MODE_VERTEX_PAINT) {
draw_mesh_paint_vcolor_faces(dm, use_light, facemask, me, me);
}
/* draw face selection on top */
if (draw_flags & DRAW_FACE_SELECT) {
- bool draw_select_edges = (ob->mode & OB_MODE_TEXTURE_PAINT) == 0;
+ bool draw_select_edges = (eval_ctx->object_mode & OB_MODE_TEXTURE_PAINT) == 0;
draw_mesh_face_select(rv3d, me, dm, draw_select_edges);
}
else if ((use_light == false) || (ob->dtx & OB_DRAWWIRE)) {
- const bool use_depth = (v3d->flag & V3D_ZBUF_SELECT) || !(ob->mode & OB_MODE_WEIGHT_PAINT);
- const bool use_alpha = (ob->mode & OB_MODE_VERTEX_PAINT) == 0;
+ const bool use_depth = (v3d->flag & V3D_ZBUF_SELECT) || !(eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT);
+ const bool use_alpha = (eval_ctx->object_mode & OB_MODE_VERTEX_PAINT) == 0;
if (use_alpha == false) {
set_inverted_drawing(1);
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index 828617d1447..7ad5f733f02 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -54,6 +54,7 @@
#include "BKE_camera.h"
#include "BKE_colortools.h"
#include "BKE_constraint.h" /* for the get_constraint_target function */
+#include "BKE_context.h"
#include "BKE_curve.h"
#include "BKE_DerivedMesh.h"
#include "BKE_deform.h"
@@ -62,6 +63,7 @@
#include "BKE_global.h"
#include "BKE_image.h"
#include "BKE_key.h"
+#include "BKE_layer.h"
#include "BKE_lattice.h"
#include "BKE_main.h"
#include "BKE_mesh.h"
@@ -80,6 +82,8 @@
#include "BKE_editmesh.h"
+#include "DEG_depsgraph.h"
+
#include "IMB_imbuf.h"
#include "IMB_imbuf_types.h"
@@ -90,6 +94,10 @@
#include "GPU_select.h"
#include "GPU_basic_shader.h"
#include "GPU_shader.h"
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+#include "GPU_batch.h"
+#include "GPU_matrix.h"
#include "ED_mesh.h"
#include "ED_particle.h"
@@ -105,6 +113,13 @@
#include "view3d_intern.h" /* bad level include */
+#include "../../draw/intern/draw_cache_impl.h" /* bad level include (temporary) */
+
+/* prototypes */
+static void imm_draw_box(const float vec[8][3], bool solid, unsigned pos);
+
+// #define USE_MESH_DM_SELECT
+
/* Workaround for sequencer scene render mode.
*
* Strips doesn't use DAG to update objects or so, which
@@ -129,6 +144,7 @@ typedef struct drawDMVerts_userData {
BMVert *eve_act;
char sel;
+ unsigned int pos, color;
/* cached theme values */
unsigned char th_editmesh_active[4];
@@ -181,6 +197,7 @@ typedef struct drawDMFacesSel_userData {
} drawDMFacesSel_userData;
typedef struct drawDMNormal_userData {
+ unsigned int pos;
BMesh *bm;
int uniform_scale;
float normalsize;
@@ -189,6 +206,7 @@ typedef struct drawDMNormal_userData {
} drawDMNormal_userData;
typedef struct drawMVertOffset_userData {
+ unsigned int pos, col;
MVert *mvert;
int offset;
} drawMVertOffset_userData;
@@ -196,9 +214,11 @@ typedef struct drawMVertOffset_userData {
typedef struct drawDMLayer_userData {
BMesh *bm;
int cd_layer_offset;
+ unsigned int pos, col;
} drawDMLayer_userData;
typedef struct drawBMOffset_userData {
+ unsigned int pos, col;
BMesh *bm;
int offset;
} drawBMOffset_userData;
@@ -206,25 +226,23 @@ typedef struct drawBMOffset_userData {
typedef struct drawBMSelect_userData {
BMesh *bm;
bool select;
+ unsigned int pos;
} drawBMSelect_userData;
-static void draw_bounding_volume(Object *ob, char type);
-static void drawcube_size(float size);
-static void drawcircle_size(float size);
-static void draw_empty_sphere(float size);
-static void draw_empty_cone(float size);
-static void draw_box(const float vec[8][3], bool solid);
+static void drawcube_size(float size, unsigned pos);
+static void drawcircle_size(float size, unsigned pos);
+static void draw_empty_sphere(float size, unsigned pos);
+static void draw_empty_cone(float size, unsigned pos);
-static void ob_wire_color_blend_theme_id(const unsigned char ob_wire_col[4], const int theme_id, float fac)
+static void ob_wire_color_blend_theme_id(const unsigned char ob_wire_col[4], const int theme_id, float fac, float r_col[3])
{
- float col_wire[3], col_bg[3], col[3];
+ float col_wire[3], col_bg[3];
rgb_uchar_to_float(col_wire, ob_wire_col);
UI_GetThemeColor3fv(theme_id, col_bg);
- interp_v3_v3v3(col, col_bg, col_wire, fac);
- glColor3fv(col);
+ interp_v3_v3v3(r_col, col_bg, col_wire, fac);
}
int view3d_effective_drawtype(const struct View3D *v3d)
@@ -296,13 +314,15 @@ static bool check_ob_drawface_dot(Scene *sce, View3D *vd, char dt)
/* check for glsl drawing */
-bool draw_glsl_material(Scene *scene, Object *ob, View3D *v3d, const char dt)
+bool draw_glsl_material(
+ const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer,
+ Object *ob, View3D *v3d, const char dt)
{
if (G.f & G_PICKSEL)
return false;
if (!check_object_draw_texture(scene, v3d, dt))
return false;
- if (ob == OBACT && (ob && ob->mode & OB_MODE_WEIGHT_PAINT))
+ if (ob == OBACT(view_layer) && (ob && eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT))
return false;
if (v3d->flag2 & V3D_SHOW_SOLID_MATCAP)
@@ -316,16 +336,17 @@ bool draw_glsl_material(Scene *scene, Object *ob, View3D *v3d, const char dt)
return false;
}
-static bool check_alpha_pass(Base *base)
+static bool check_alpha_pass(const EvaluationContext *eval_ctx, Base *base)
{
- if (base->flag & OB_FROMDUPLI)
+ if (base->flag_legacy & OB_FROMDUPLI)
return false;
if (G.f & G_PICKSEL)
return false;
- if (base->object->mode & OB_MODE_ALL_PAINT)
+ if (eval_ctx->object_mode & OB_MODE_ALL_PAINT) {
return false;
+ }
return (base->object->dtx & OB_DRAWTRANSP);
}
@@ -414,9 +435,9 @@ static const float cosval[CIRCLE_RESOL] = {
* \param viewmat_local_unit is typically the 'rv3d->viewmatob'
* copied into a 3x3 matrix and normalized.
*/
-static void draw_xyz_wire(const float viewmat_local_unit[3][3], const float c[3], float size, int axis)
+static void draw_xyz_wire(const float viewmat_local_unit[3][3], const float c[3], float size, int axis, unsigned pos)
{
- int line_type;
+ Gwn_PrimType line_type = GWN_PRIM_LINES;
float buffer[4][3];
int n = 0;
@@ -429,8 +450,6 @@ static void draw_xyz_wire(const float viewmat_local_unit[3][3], const float c[3]
switch (axis) {
case 0: /* x axis */
- line_type = GL_LINES;
-
/* bottom left to top right */
negate_v3_v3(v1, dx);
sub_v3_v3(v1, dy);
@@ -450,8 +469,6 @@ static void draw_xyz_wire(const float viewmat_local_unit[3][3], const float c[3]
break;
case 1: /* y axis */
- line_type = GL_LINES;
-
/* bottom left to top right */
mul_v3_fl(dx, 0.75f);
negate_v3_v3(v1, dx);
@@ -472,7 +489,7 @@ static void draw_xyz_wire(const float viewmat_local_unit[3][3], const float c[3]
break;
case 2: /* z axis */
- line_type = GL_LINE_STRIP;
+ line_type = GWN_PRIM_LINE_STRIP;
/* start at top left */
negate_v3_v3(v1, dx);
@@ -501,54 +518,60 @@ static void draw_xyz_wire(const float viewmat_local_unit[3][3], const float c[3]
return;
}
+ immBegin(line_type, n);
for (int i = 0; i < n; i++) {
mul_transposed_m3_v3((float (*)[3])viewmat_local_unit, buffer[i]);
add_v3_v3(buffer[i], c);
+ immVertex3fv(pos, buffer[i]);
}
+ immEnd();
- glEnableClientState(GL_VERTEX_ARRAY);
- glVertexPointer(3, GL_FLOAT, 0, buffer);
- glDrawArrays(line_type, 0, n);
- glDisableClientState(GL_VERTEX_ARRAY);
+ /* TODO: recode this function for clarity once we're not in a hurry to modernize GL usage */
}
-void drawaxes(const float viewmat_local[4][4], float size, char drawtype)
+void drawaxes(const float viewmat_local[4][4], float size, char drawtype, const unsigned char color[4])
{
int axis;
float v1[3] = {0.0, 0.0, 0.0};
float v2[3] = {0.0, 0.0, 0.0};
float v3[3] = {0.0, 0.0, 0.0};
- glLineWidth(1);
+ glLineWidth(1.0f);
- switch (drawtype) {
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ if (color) {
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformColor4ubv(color);
+ }
+ else {
+ immBindBuiltinProgram(GPU_SHADER_3D_DEPTH_ONLY);
+ }
+ switch (drawtype) {
case OB_PLAINAXES:
+ immBegin(GWN_PRIM_LINES, 6);
for (axis = 0; axis < 3; axis++) {
- glBegin(GL_LINES);
-
v1[axis] = size;
v2[axis] = -size;
- glVertex3fv(v1);
- glVertex3fv(v2);
+ immVertex3fv(pos, v1);
+ immVertex3fv(pos, v2);
/* reset v1 & v2 to zero */
v1[axis] = v2[axis] = 0.0f;
-
- glEnd();
}
+ immEnd();
break;
- case OB_SINGLE_ARROW:
- glBegin(GL_LINES);
+ case OB_SINGLE_ARROW:
+ immBegin(GWN_PRIM_LINES, 2);
/* in positive z direction only */
v1[2] = size;
- glVertex3fv(v1);
- glVertex3fv(v2);
- glEnd();
+ immVertex3fv(pos, v1);
+ immVertex3fv(pos, v2);
+ immEnd();
/* square pyramid */
- glBegin(GL_TRIANGLES);
+ immBegin(GWN_PRIM_TRIS, 12);
v2[0] = size * 0.035f; v2[1] = size * 0.035f;
v3[0] = size * -0.035f; v3[1] = size * 0.035f;
@@ -564,28 +587,27 @@ void drawaxes(const float viewmat_local[4][4], float size, char drawtype)
v3[0] = -v3[0];
}
- glVertex3fv(v1);
- glVertex3fv(v2);
- glVertex3fv(v3);
-
+ immVertex3fv(pos, v1);
+ immVertex3fv(pos, v2);
+ immVertex3fv(pos, v3);
}
- glEnd();
-
+ immEnd();
break;
+
case OB_CUBE:
- drawcube_size(size);
+ drawcube_size(size, pos);
break;
case OB_CIRCLE:
- drawcircle_size(size);
+ drawcircle_size(size, pos);
break;
case OB_EMPTY_SPHERE:
- draw_empty_sphere(size);
+ draw_empty_sphere(size, pos);
break;
case OB_EMPTY_CONE:
- draw_empty_cone(size);
+ draw_empty_cone(size, pos);
break;
case OB_ARROWS:
@@ -599,34 +621,34 @@ void drawaxes(const float viewmat_local[4][4], float size, char drawtype)
for (axis = 0; axis < 3; axis++) {
const int arrow_axis = (axis == 0) ? 1 : 0;
- glBegin(GL_LINES);
+ immBegin(GWN_PRIM_LINES, 6);
v2[axis] = size;
- glVertex3fv(v1);
- glVertex3fv(v2);
-
+ immVertex3fv(pos, v1);
+ immVertex3fv(pos, v2);
+
v1[axis] = size * 0.85f;
v1[arrow_axis] = -size * 0.08f;
- glVertex3fv(v1);
- glVertex3fv(v2);
-
+ immVertex3fv(pos, v1);
+ immVertex3fv(pos, v2);
+
v1[arrow_axis] = size * 0.08f;
- glVertex3fv(v1);
- glVertex3fv(v2);
+ immVertex3fv(pos, v1);
+ immVertex3fv(pos, v2);
- glEnd();
-
- v2[axis] += size * 0.125f;
+ immEnd();
- draw_xyz_wire(viewmat_local_unit, v2, size, axis);
+ v2[axis] += size * 0.125f;
+ draw_xyz_wire(viewmat_local_unit, v2, size, axis, pos);
/* reset v1 & v2 to zero */
v1[arrow_axis] = v1[axis] = v2[axis] = 0.0f;
}
- break;
}
}
+
+ immUnbindProgram();
}
@@ -634,38 +656,39 @@ void drawaxes(const float viewmat_local[4][4], float size, char drawtype)
static void draw_empty_image(Object *ob, const short dflag, const unsigned char ob_wire_col[4], eStereoViews sview)
{
Image *ima = ob->data;
- ImBuf *ibuf;
- ImageUser iuser = *ob->iuser;
- /* Support multi-view */
- if (ima && (sview == STEREO_RIGHT_ID)) {
- iuser.multiview_eye = sview;
- iuser.flag |= IMA_SHOW_STEREO;
- BKE_image_multiview_index(ima, &iuser);
- }
+ const float ob_alpha = ob->col[3];
+ float ima_x, ima_y;
- ibuf = BKE_image_acquire_ibuf(ima, &iuser, NULL);
+ int bindcode = 0;
- if (ibuf && (ibuf->rect == NULL) && (ibuf->rect_float != NULL)) {
- IMB_rect_from_float(ibuf);
- }
+ if (ima) {
+ ImageUser iuser = *ob->iuser;
+
+ /* Support multi-view */
+ if (ima && (sview == STEREO_RIGHT_ID)) {
+ iuser.multiview_eye = sview;
+ iuser.flag |= IMA_SHOW_STEREO;
+ BKE_image_multiview_index(ima, &iuser);
+ }
- int ima_x, ima_y;
+ if (ob_alpha > 0.0f) {
+ bindcode = GPU_verify_image(ima, &iuser, GL_TEXTURE_2D, 0, false, false, false);
+ /* don't bother drawing the image if alpha = 0 */
+ }
- /* Get the buffer dimensions so we can fallback to fake ones */
- if (ibuf && ibuf->rect) {
- ima_x = ibuf->x;
- ima_y = ibuf->y;
+ int w, h;
+ BKE_image_get_size(ima, &iuser, &w, &h);
+ ima_x = w;
+ ima_y = h;
}
else {
- ima_x = 1;
- ima_y = 1;
+ /* if no image, make it a 1x1 empty square, honor scale & offset */
+ ima_x = ima_y = 1.0f;
}
- float sca_x = 1.0f;
- float sca_y = 1.0f;
-
/* Get the image aspect even if the buffer is invalid */
+ float sca_x = 1.0f, sca_y = 1.0f;
if (ima) {
if (ima->aspx > ima->aspy) {
sca_y = ima->aspy / ima->aspx;
@@ -675,61 +698,98 @@ static void draw_empty_image(Object *ob, const short dflag, const unsigned char
}
}
- /* Calculate the scale center based on object's origin */
- float ofs_x = ob->ima_ofs[0] * ima_x;
- float ofs_y = ob->ima_ofs[1] * ima_y;
+ float scale_x;
+ float scale_y;
+ {
+ const float scale_x_inv = ima_x * sca_x;
+ const float scale_y_inv = ima_y * sca_y;
+ if (scale_x_inv > scale_y_inv) {
+ scale_x = ob->empty_drawsize;
+ scale_y = ob->empty_drawsize * (scale_y_inv / scale_x_inv);
+ }
+ else {
+ scale_x = ob->empty_drawsize * (scale_x_inv / scale_y_inv);
+ scale_y = ob->empty_drawsize;
+ }
+ }
- glMatrixMode(GL_MODELVIEW);
- glPushMatrix();
+ const float ofs_x = ob->ima_ofs[0] * scale_x;
+ const float ofs_y = ob->ima_ofs[1] * scale_y;
- /* Calculate Image scale */
- float scale = ob->empty_drawsize / max_ff((float)ima_x * sca_x, (float)ima_y * sca_y);
+ const rctf rect = {
+ .xmin = ofs_x,
+ .xmax = ofs_x + scale_x,
+ .ymin = ofs_y,
+ .ymax = ofs_y + scale_y,
+ };
- /* Set the object scale */
- glScalef(scale * sca_x, scale * sca_y, 1.0f);
+ bool use_blend = false;
- if (ibuf && ibuf->rect) {
- const bool use_clip = (U.glalphaclip != 1.0f);
- int zoomfilter = (U.gameflags & USER_DISABLE_MIPMAP) ? GL_NEAREST : GL_LINEAR;
- /* Setup GL params */
- glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ if (bindcode) {
+ use_blend = ob_alpha < 1.0f || BKE_image_has_alpha(ima);
- if (use_clip) {
- glEnable(GL_ALPHA_TEST);
- glAlphaFunc(GL_GREATER, U.glalphaclip);
+ if (use_blend) {
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}
- /* Use the object color and alpha */
- glColor4fv(ob->col);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int texCoord = GWN_vertformat_attr_add(format, "texCoord", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_IMAGE_MODULATE_ALPHA);
+ immUniform1f("alpha", ob_alpha);
+ immUniform1i("image", 0); /* default GL_TEXTURE0 unit */
- /* Draw the Image on the screen */
- glaDrawPixelsTex(ofs_x, ofs_y, ima_x, ima_y, GL_RGBA, GL_UNSIGNED_BYTE, zoomfilter, ibuf->rect);
+ immBegin(GWN_PRIM_TRI_FAN, 4);
+ immAttrib2f(texCoord, 0.0f, 0.0f);
+ immVertex2f(pos, rect.xmin, rect.ymin);
- glDisable(GL_BLEND);
+ immAttrib2f(texCoord, 1.0f, 0.0f);
+ immVertex2f(pos, rect.xmax, rect.ymin);
- if (use_clip) {
- glDisable(GL_ALPHA_TEST);
- glAlphaFunc(GL_ALWAYS, 0.0f);
- }
+ immAttrib2f(texCoord, 1.0f, 1.0f);
+ immVertex2f(pos, rect.xmax, rect.ymax);
+
+ immAttrib2f(texCoord, 0.0f, 1.0f);
+ immVertex2f(pos, rect.xmin, rect.ymax);
+ immEnd();
+
+ immUnbindProgram();
+
+ glBindTexture(GL_TEXTURE_2D, 0); /* necessary? */
}
- if ((dflag & DRAW_CONSTCOLOR) == 0) {
- glColor3ubv(ob_wire_col);
+ /* Draw the image outline */
+ glLineWidth(1.5f);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ const bool picking = dflag & DRAW_CONSTCOLOR;
+ if (picking) {
+ /* TODO: deal with picking separately, use this function just to draw */
+ immBindBuiltinProgram(GPU_SHADER_3D_DEPTH_ONLY);
+ if (use_blend) {
+ glDisable(GL_BLEND);
+ }
+
+ imm_draw_box_wire_2d(pos, rect.xmin, rect.ymin, rect.xmax, rect.ymax);
}
+ else {
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformColor3ubv(ob_wire_col);
+ glEnable(GL_LINE_SMOOTH);
- /* Calculate the outline vertex positions */
- glBegin(GL_LINE_LOOP);
- glVertex2f(ofs_x, ofs_y);
- glVertex2f(ofs_x + ima_x, ofs_y);
- glVertex2f(ofs_x + ima_x, ofs_y + ima_y);
- glVertex2f(ofs_x, ofs_y + ima_y);
- glEnd();
+ if (!use_blend) {
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ }
- /* Reset GL settings */
- glPopMatrix();
+ imm_draw_box_wire_2d(pos, rect.xmin, rect.ymin, rect.xmax, rect.ymax);
- BKE_image_release_ibuf(ima, ibuf, NULL);
+ glDisable(GL_LINE_SMOOTH);
+ glDisable(GL_BLEND);
+ }
+
+ immUnbindProgram();
}
static void circball_array_fill(float verts[CIRCLE_RESOL][3], const float cent[3], float rad, const float tmat[4][4])
@@ -747,62 +807,65 @@ static void circball_array_fill(float verts[CIRCLE_RESOL][3], const float cent[3
}
}
-void drawcircball(int mode, const float cent[3], float rad, const float tmat[4][4])
+void imm_drawcircball(const float cent[3], float rad, const float tmat[4][4], unsigned pos)
{
float verts[CIRCLE_RESOL][3];
circball_array_fill(verts, cent, rad, tmat);
- glEnableClientState(GL_VERTEX_ARRAY);
- glVertexPointer(3, GL_FLOAT, 0, verts);
- glDrawArrays(mode, 0, CIRCLE_RESOL);
- glDisableClientState(GL_VERTEX_ARRAY);
+ immBegin(GWN_PRIM_LINE_LOOP, CIRCLE_RESOL);
+ for (int i = 0; i < CIRCLE_RESOL; ++i) {
+ immVertex3fv(pos, verts[i]);
+ }
+ immEnd();
}
/* circle for object centers, special_color is for library or ob users */
-static void drawcentercircle(View3D *v3d, RegionView3D *rv3d, const float co[3], int selstate, bool special_color)
+static void drawcentercircle(View3D *v3d, RegionView3D *UNUSED(rv3d), const float co[3], int selstate, bool special_color)
{
- const float size = ED_view3d_pixel_size(rv3d, co) * (float)U.obcenter_dia * 0.5f;
- float verts[CIRCLE_RESOL][3];
+ const float outlineWidth = 1.0f * U.pixelsize;
+ const float size = U.obcenter_dia * U.pixelsize + outlineWidth;
+
+ if (v3d->zbuf) {
+ glDisable(GL_DEPTH_TEST);
+ /* TODO(merwin): fit things like this into plates/buffers design */
+ }
- /* using glDepthFunc guarantees that it does write z values,
- * but not checks for it, so centers remain visible independent of draw order */
- if (v3d->zbuf) glDepthFunc(GL_ALWAYS);
- /* write to near buffer always */
- glDepthRange(0.0, 0.0);
glEnable(GL_BLEND);
-
+ GPU_enable_program_point_size();
+
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_OUTLINE_AA);
+ immUniform1f("size", size);
+
if (special_color) {
- if (selstate == ACTIVE || selstate == SELECT) glColor4ub(0x88, 0xFF, 0xFF, 155);
- else glColor4ub(0x55, 0xCC, 0xCC, 155);
+ if (selstate == ACTIVE || selstate == SELECT) immUniformColor4ub(0x88, 0xFF, 0xFF, 155);
+ else immUniformColor4ub(0x55, 0xCC, 0xCC, 155);
}
else {
- if (selstate == ACTIVE) UI_ThemeColorShadeAlpha(TH_ACTIVE, 0, -80);
- else if (selstate == SELECT) UI_ThemeColorShadeAlpha(TH_SELECT, 0, -80);
- else if (selstate == DESELECT) UI_ThemeColorShadeAlpha(TH_TRANSFORM, 0, -80);
+ if (selstate == ACTIVE) immUniformThemeColorShadeAlpha(TH_ACTIVE, 0, -80);
+ else if (selstate == SELECT) immUniformThemeColorShadeAlpha(TH_SELECT, 0, -80);
+ else if (selstate == DESELECT) immUniformThemeColorShadeAlpha(TH_TRANSFORM, 0, -80);
}
- circball_array_fill(verts, co, size, rv3d->viewinv);
-
- /* enable vertex array */
- glEnableClientState(GL_VERTEX_ARRAY);
- glVertexPointer(3, GL_FLOAT, 0, verts);
+ /* set up outline */
+ float outlineColor[4];
+ UI_GetThemeColorShadeAlpha4fv(TH_WIRE, 0, -30, outlineColor);
+ immUniform4fv("outlineColor", outlineColor);
+ immUniform1f("outlineWidth", outlineWidth);
- /* 1. draw filled, blended polygon */
- glDrawArrays(GL_POLYGON, 0, CIRCLE_RESOL);
+ immBegin(GWN_PRIM_POINTS, 1);
+ immVertex3fv(pos, co);
+ immEnd();
- /* 2. draw outline */
- glLineWidth(1);
- UI_ThemeColorShadeAlpha(TH_WIRE, 0, -30);
- glDrawArrays(GL_LINE_LOOP, 0, CIRCLE_RESOL);
+ immUnbindProgram();
- /* finish up */
- glDisableClientState(GL_VERTEX_ARRAY);
-
- glDepthRange(0.0, 1.0);
+ GPU_disable_program_point_size();
glDisable(GL_BLEND);
- if (v3d->zbuf) glDepthFunc(GL_LEQUAL);
+ if (v3d->zbuf) {
+ glEnable(GL_DEPTH_TEST);
+ }
}
/* *********** text drawing for object/particles/armature ************* */
@@ -893,36 +956,30 @@ void view3d_cached_text_draw_end(View3D *v3d, ARegion *ar, bool depth_write)
if (tot) {
int col_pack_prev = 0;
-#if 0
- bglMats mats; /* ZBuffer depth vars */
- double ux, uy, uz;
- float depth;
-
- if (v3d->zbuf)
- bgl_get_mats(&mats);
-#endif
if (rv3d->rflag & RV3D_CLIPPING) {
ED_view3d_clipping_disable();
}
- glMatrixMode(GL_PROJECTION);
- glPushMatrix();
- glMatrixMode(GL_MODELVIEW);
- glPushMatrix();
+ float original_proj[4][4];
+ gpuGetProjectionMatrix(original_proj);
wmOrtho2_region_pixelspace(ar);
- glLoadIdentity();
+
+ gpuPushMatrix();
+ gpuLoadIdentity();
if (depth_write) {
if (v3d->zbuf) glDisable(GL_DEPTH_TEST);
}
else {
- glDepthMask(0);
+ glDepthMask(GL_FALSE);
}
+ const int font_id = BLF_default();
+
for (vos = g_v3d_strings[g_v3d_string_level]; vos; vos = vos->next) {
if (vos->sco[0] != IS_CLIPPED) {
if (col_pack_prev != vos->col.pack) {
- glColor3ubv(vos->col.ub);
+ BLF_color3ubv(font_id, vos->col.ub);
col_pack_prev = vos->col.pack;
}
@@ -939,13 +996,11 @@ void view3d_cached_text_draw_end(View3D *v3d, ARegion *ar, bool depth_write)
if (v3d->zbuf) glEnable(GL_DEPTH_TEST);
}
else {
- glDepthMask(1);
+ glDepthMask(GL_TRUE);
}
- glMatrixMode(GL_PROJECTION);
- glPopMatrix();
- glMatrixMode(GL_MODELVIEW);
- glPopMatrix();
+ gpuPopMatrix();
+ gpuLoadProjectionMatrix(original_proj);
if (rv3d->rflag & RV3D_CLIPPING) {
ED_view3d_clipping_enable();
@@ -969,9 +1024,9 @@ void view3d_cached_text_draw_end(View3D *v3d, ARegion *ar, bool depth_write)
/* draws a cube given the scaling of the cube, assuming that
* all required matrices have been set (used for drawing empties)
*/
-static void drawcube_size(float size)
+static void drawcube_size(float size, unsigned pos)
{
- const GLfloat pos[8][3] = {
+ const float verts[8][3] = {
{-size, -size, -size},
{-size, -size, size},
{-size, size, -size},
@@ -984,13 +1039,21 @@ static void drawcube_size(float size)
const GLubyte indices[24] = {0, 1, 1, 3, 3, 2, 2, 0, 0, 4, 4, 5, 5, 7, 7, 6, 6, 4, 1, 5, 3, 7, 2, 6};
+#if 0
glEnableClientState(GL_VERTEX_ARRAY);
- glVertexPointer(3, GL_FLOAT, 0, pos);
+ glVertexPointer(3, GL_FLOAT, 0, verts);
glDrawRangeElements(GL_LINES, 0, 7, 24, GL_UNSIGNED_BYTE, indices);
glDisableClientState(GL_VERTEX_ARRAY);
+#else
+ immBegin(GWN_PRIM_LINES, 24);
+ for (int i = 0; i < 24; ++i) {
+ immVertex3fv(pos, verts[indices[i]]);
+ }
+ immEnd();
+#endif
}
-static void drawshadbuflimits(Lamp *la, float mat[4][4])
+static void drawshadbuflimits(const Lamp *la, const float mat[4][4], unsigned pos)
{
float sta[3], end[3], lavec[3];
@@ -1000,16 +1063,16 @@ static void drawshadbuflimits(Lamp *la, float mat[4][4])
madd_v3_v3v3fl(sta, mat[3], lavec, la->clipsta);
madd_v3_v3v3fl(end, mat[3], lavec, la->clipend);
- glBegin(GL_LINES);
- glVertex3fv(sta);
- glVertex3fv(end);
- glEnd();
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex3fv(pos, sta);
+ immVertex3fv(pos, end);
+ immEnd();
- glPointSize(3.0);
- glBegin(GL_POINTS);
- glVertex3fv(sta);
- glVertex3fv(end);
- glEnd();
+ glPointSize(3.0f);
+ immBegin(GWN_PRIM_POINTS, 2);
+ immVertex3fv(pos, sta);
+ immVertex3fv(pos, end);
+ immEnd();
}
static void spotvolume(float lvec[3], float vvec[3], const float inp)
@@ -1075,62 +1138,63 @@ static void spotvolume(float lvec[3], float vvec[3], const float inp)
mul_m3_v3(mat2, vvec);
}
-static void draw_spot_cone(Lamp *la, float x, float z)
+static void draw_spot_cone(Lamp *la, float x, float z, unsigned pos)
{
z = fabsf(z);
- glBegin(GL_TRIANGLE_FAN);
- glVertex3f(0.0f, 0.0f, -x);
+ const bool square = (la->mode & LA_SQUARE);
- if (la->mode & LA_SQUARE) {
- glVertex3f(z, z, 0);
- glVertex3f(-z, z, 0);
- glVertex3f(-z, -z, 0);
- glVertex3f(z, -z, 0);
- glVertex3f(z, z, 0);
+ immBegin(GWN_PRIM_TRI_FAN, square ? 6 : 34);
+ immVertex3f(pos, 0.0f, 0.0f, -x);
+
+ if (square) {
+ immVertex3f(pos, z, z, 0);
+ immVertex3f(pos, -z, z, 0);
+ immVertex3f(pos, -z, -z, 0);
+ immVertex3f(pos, z, -z, 0);
+ immVertex3f(pos, z, z, 0);
}
else {
for (int a = 0; a < 33; a++) {
float angle = a * M_PI * 2 / (33 - 1);
- glVertex3f(z * cosf(angle), z * sinf(angle), 0);
+ immVertex3f(pos, z * cosf(angle), z * sinf(angle), 0.0f);
}
}
- glEnd();
+ immEnd();
}
-static void draw_transp_spot_volume(Lamp *la, float x, float z)
+static void draw_transp_spot_volume(Lamp *la, float x, float z, unsigned pos)
{
glEnable(GL_CULL_FACE);
glEnable(GL_BLEND);
- glDepthMask(0);
+ glDepthMask(GL_FALSE);
/* draw backside darkening */
glCullFace(GL_FRONT);
glBlendFunc(GL_ZERO, GL_SRC_ALPHA);
- glColor4f(0.0f, 0.0f, 0.0f, 0.4f);
+ immUniformColor4f(0.0f, 0.0f, 0.0f, 0.4f);
- draw_spot_cone(la, x, z);
+ draw_spot_cone(la, x, z, pos);
/* draw front side lighting */
glCullFace(GL_BACK);
glBlendFunc(GL_ONE, GL_ONE);
- glColor4f(0.2f, 0.2f, 0.2f, 1.0f);
+ immUniformColor3f(0.2f, 0.2f, 0.2f);
- draw_spot_cone(la, x, z);
+ draw_spot_cone(la, x, z, pos);
/* restore state */
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_BLEND);
- glDepthMask(1);
+ glDepthMask(GL_TRUE);
glDisable(GL_CULL_FACE);
- glCullFace(GL_BACK);
}
#ifdef WITH_GAMEENGINE
-static void draw_transp_sun_volume(Lamp *la)
+static void draw_transp_sun_volume(Lamp *la, unsigned pos)
{
float box[8][3];
@@ -1143,50 +1207,46 @@ static void draw_transp_sun_volume(Lamp *la)
box[1][2] = box[2][2] = box[5][2] = box[6][2] = -la->clipsta;
/* draw edges */
- draw_box(box, false);
+ imm_draw_box(box, false, pos);
/* draw faces */
glEnable(GL_CULL_FACE);
glEnable(GL_BLEND);
- glDepthMask(0);
+ glDepthMask(GL_FALSE);
/* draw backside darkening */
glCullFace(GL_FRONT);
glBlendFunc(GL_ZERO, GL_SRC_ALPHA);
- glColor4f(0.0f, 0.0f, 0.0f, 0.4f);
+ immUniformColor4f(0.0f, 0.0f, 0.0f, 0.4f);
- draw_box(box, true);
+ imm_draw_box(box, true, pos);
/* draw front side lighting */
glCullFace(GL_BACK);
glBlendFunc(GL_ONE, GL_ONE);
- glColor4f(0.2f, 0.2f, 0.2f, 1.0f);
+ immUniformColor3f(0.2f, 0.2f, 0.2f);
- draw_box(box, true);
+ imm_draw_box(box, true, pos);
/* restore state */
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_BLEND);
- glDepthMask(1);
+ glDepthMask(GL_TRUE);
glDisable(GL_CULL_FACE);
- glCullFace(GL_BACK);
}
#endif
-static void drawlamp(View3D *v3d, RegionView3D *rv3d, Base *base,
- const char dt, const short dflag, const unsigned char ob_wire_col[4], const bool is_obact)
+void drawlamp(View3D *v3d, RegionView3D *rv3d, Base *base,
+ const char dt, const short dflag, const unsigned char ob_wire_col[4], const bool is_obact)
{
Object *ob = base->object;
const float pixsize = ED_view3d_pixel_size(rv3d, ob->obmat[3]);
Lamp *la = ob->data;
float vec[3], lvec[3], vvec[3], circrad;
- float lampsize;
float imat[4][4];
- unsigned char curcol[4];
- unsigned char col[4];
/* cone can't be drawn for duplicated lamps, because duplilist would be freed */
/* the moment of view3d_draw_transp() call */
const bool is_view = (rv3d->persp == RV3D_CAMOB && v3d->camera == base->object);
@@ -1194,7 +1254,7 @@ static void drawlamp(View3D *v3d, RegionView3D *rv3d, Base *base,
!(G.f & G_PICKSEL) &&
(la->type == LA_SPOT) &&
(la->mode & LA_SHOW_CONE) &&
- !(base->flag & OB_FROMDUPLI) &&
+ !(base->flag_legacy & OB_FROMDUPLI) &&
!is_view);
#ifdef WITH_GAMEENGINE
@@ -1206,7 +1266,7 @@ static void drawlamp(View3D *v3d, RegionView3D *rv3d, Base *base,
((la->mode & LA_SHAD_BUF) ||
(la->mode & LA_SHAD_RAY)) &&
(la->mode & LA_SHOW_SHADOW_BOX) &&
- !(base->flag & OB_FROMDUPLI) &&
+ !(base->flag_legacy & OB_FROMDUPLI) &&
!is_view);
#else
const bool drawshadowbox = false;
@@ -1214,118 +1274,159 @@ static void drawlamp(View3D *v3d, RegionView3D *rv3d, Base *base,
if ((drawcone || drawshadowbox) && !v3d->transp) {
/* in this case we need to draw delayed */
- ED_view3d_after_add(v3d->xray ? &v3d->afterdraw_xraytransp : &v3d->afterdraw_transp, base, dflag);
+ ED_view3d_after_add(&v3d->afterdraw_transp, base, dflag);
return;
}
-
+
/* we first draw only the screen aligned & fixed scale stuff */
- glPushMatrix();
- glLoadMatrixf(rv3d->viewmat);
+ gpuPushMatrix();
+ gpuLoadMatrix(rv3d->viewmat);
/* lets calculate the scale: */
- lampsize = pixsize * ((float)U.obcenter_dia * 0.5f);
+ const float lampsize_px = U.obcenter_dia;
+ const float lampsize = pixsize * lampsize_px * 0.5f;
/* and view aligned matrix: */
copy_m4_m4(imat, rv3d->viewinv);
normalize_v3(imat[0]);
normalize_v3(imat[1]);
+ const unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
/* lamp center */
copy_v3_v3(vec, ob->obmat[3]);
+ float curcol[4];
if ((dflag & DRAW_CONSTCOLOR) == 0) {
/* for AA effects */
- curcol[0] = ob_wire_col[0];
- curcol[1] = ob_wire_col[1];
- curcol[2] = ob_wire_col[2];
- curcol[3] = 154;
- glColor4ubv(curcol);
+ rgb_uchar_to_float(curcol, ob_wire_col);
+ curcol[3] = 0.6f;
+ /* TODO: pay attention to GL_BLEND */
}
- glLineWidth(1);
+ glLineWidth(1.0f);
+ setlinestyle(3);
if (lampsize > 0.0f) {
+ const float outlineWidth = 1.5f * U.pixelsize;
+ const float lampdot_size = lampsize_px * U.pixelsize + outlineWidth;
+ /* Inner Circle */
if ((dflag & DRAW_CONSTCOLOR) == 0) {
+ const float *color = curcol;
if (ob->id.us > 1) {
- if (is_obact || (ob->flag & SELECT)) {
- glColor4ub(0x88, 0xFF, 0xFF, 155);
+ if (is_obact || ((base->flag & BASE_SELECTED) != 0)) {
+ static const float active_color[4] = {0.533f, 1.0f, 1.0f, 1.0f};
+ color = active_color;
}
else {
- glColor4ub(0x77, 0xCC, 0xCC, 155);
+ static const float inactive_color[4] = {0.467f, 0.8f, 0.8f, 1.0f};
+ color = inactive_color;
}
}
+
+ GPU_enable_program_point_size();
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_OUTLINE_AA);
+ immUniform1f("size", lampdot_size);
+ immUniform1f("outlineWidth", outlineWidth);
+ immUniformColor3fvAlpha(color, 0.3f);
+ immUniform4fv("outlineColor", color);
+
+ immBegin(GWN_PRIM_POINTS, 1);
+ immVertex3fv(pos, vec);
+ immEnd();
+
+ immUnbindProgram();
+
+ glDisable(GL_BLEND);
+ GPU_disable_program_point_size();
}
-
- /* Inner Circle */
- glEnable(GL_BLEND);
- drawcircball(GL_LINE_LOOP, vec, lampsize, imat);
- glDisable(GL_BLEND);
- drawcircball(GL_POLYGON, vec, lampsize, imat);
-
+ else {
+ /* CONSTCOLOR in effect */
+ /* TODO: separate picking from drawing */
+ immBindBuiltinProgram(GPU_SHADER_3D_POINT_FIXED_SIZE_UNIFORM_COLOR);
+ /* color doesn't matter, so don't set */
+ glPointSize(lampdot_size);
+
+ immBegin(GWN_PRIM_POINTS, 1);
+ immVertex3fv(pos, vec);
+ immEnd();
+
+ immUnbindProgram();
+ }
+
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ /* TODO(merwin): short term, use DEPTH_ONLY for picking
+ * long term, separate picking from drawing
+ */
+
/* restore */
if ((dflag & DRAW_CONSTCOLOR) == 0) {
- if (ob->id.us > 1)
- glColor4ubv(curcol);
+ immUniformColor4fv(curcol);
}
/* Outer circle */
circrad = 3.0f * lampsize;
- setlinestyle(3);
- drawcircball(GL_LINE_LOOP, vec, circrad, imat);
+ imm_drawcircball(vec, circrad, imat, pos);
/* draw dashed outer circle if shadow is on. remember some lamps can't have certain shadows! */
if (la->type != LA_HEMI) {
if ((la->mode & LA_SHAD_RAY) || ((la->mode & LA_SHAD_BUF) && (la->type == LA_SPOT))) {
- drawcircball(GL_LINE_LOOP, vec, circrad + 3.0f * pixsize, imat);
+ imm_drawcircball(vec, circrad + 3.0f * pixsize, imat, pos);
}
}
}
else {
- setlinestyle(3);
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ if ((dflag & DRAW_CONSTCOLOR) == 0) {
+ immUniformColor4fv(curcol);
+ }
circrad = 0.0f;
}
-
+
/* draw the pretty sun rays */
if (la->type == LA_SUN) {
float v1[3], v2[3], mat[3][3];
short axis;
-
+
/* setup a 45 degree rotation matrix */
axis_angle_normalized_to_mat3_ex(mat, imat[2], M_SQRT1_2, M_SQRT1_2);
/* vectors */
mul_v3_v3fl(v1, imat[0], circrad * 1.2f);
mul_v3_v3fl(v2, imat[0], circrad * 2.5f);
-
+
/* center */
- glTranslate3fv(vec);
-
+ gpuPushMatrix();
+ gpuTranslate3fv(vec);
+
setlinestyle(3);
-
- glBegin(GL_LINES);
+
+ immBegin(GWN_PRIM_LINES, 16);
for (axis = 0; axis < 8; axis++) {
- glVertex3fv(v1);
- glVertex3fv(v2);
+ immVertex3fv(pos, v1);
+ immVertex3fv(pos, v2);
mul_m3_v3(mat, v1);
mul_m3_v3(mat, v2);
}
- glEnd();
-
- glTranslatef(-vec[0], -vec[1], -vec[2]);
+ immEnd();
+ gpuPopMatrix();
}
-
+
if (la->type == LA_LOCAL) {
if (la->mode & LA_SPHERE) {
- drawcircball(GL_LINE_LOOP, vec, la->dist, imat);
+ imm_drawcircball(vec, la->dist, imat, pos);
}
}
-
- glPopMatrix(); /* back in object space */
+
+ gpuPopMatrix(); /* back in object space */
zero_v3(vec);
-
+
if (is_view) {
/* skip drawing extra info */
}
@@ -1357,24 +1458,18 @@ static void drawlamp(View3D *v3d, RegionView3D *rv3d, Base *base,
{z_abs, -z_abs, x},
{-z_abs, z_abs, x},
};
- const unsigned char indices[] = {
- 0, 1, 3,
- 0, 3, 2,
- 0, 2, 4,
- 0, 1, 4,
- };
-
- /* Draw call:
- * activate and specify pointer to vertex array */
- glEnableClientState(GL_VERTEX_ARRAY);
- glVertexPointer(3, GL_FLOAT, 0, vertices);
- /* draw the pyramid */
- glDrawElements(GL_LINE_STRIP, 12, GL_UNSIGNED_BYTE, indices);
- /* deactivate vertex arrays after drawing */
- glDisableClientState(GL_VERTEX_ARRAY);
+ immBegin(GWN_PRIM_LINES, 16);
+ for (int i = 1; i <= 4; ++i) {
+ immVertex3fv(pos, vertices[0]); /* apex to corner */
+ immVertex3fv(pos, vertices[i]);
+ int next_i = (i == 4) ? 1 : (i + 1);
+ immVertex3fv(pos, vertices[i]); /* corner to next corner */
+ immVertex3fv(pos, vertices[next_i]);
+ }
+ immEnd();
- glTranslatef(0.0f, 0.0f, x);
+ gpuTranslate3f(0.0f, 0.0f, x);
/* draw the square representing spotbl */
if (la->type == LA_SPOT) {
@@ -1384,22 +1479,21 @@ static void drawlamp(View3D *v3d, RegionView3D *rv3d, Base *base,
* previously it adjusted to always to show it but that seems
* confusing because it doesn't show the actual blend size */
if (blend != 0.0f && blend != z_abs) {
- fdrawbox(blend, -blend, -blend, blend);
+ imm_draw_box_wire_3d(pos, blend, -blend, -blend, blend);
}
}
}
else {
-
/* draw the angled sides of the cone */
- glBegin(GL_LINE_STRIP);
- glVertex3fv(vvec);
- glVertex3fv(vec);
- glVertex3fv(lvec);
- glEnd();
+ immBegin(GWN_PRIM_LINE_STRIP, 3);
+ immVertex3fv(pos, vvec);
+ immVertex3fv(pos, vec);
+ immVertex3fv(pos, lvec);
+ immEnd();
/* draw the circle at the end of the cone */
- glTranslatef(0.0f, 0.0f, x);
- circ(0.0f, 0.0f, z_abs);
+ gpuTranslate3f(0.0f, 0.0f, x);
+ imm_draw_circle_wire_3d(pos, 0.0f, 0.0f, z_abs, 32);
/* draw the circle representing spotbl */
if (la->type == LA_SPOT) {
@@ -1409,17 +1503,17 @@ static void drawlamp(View3D *v3d, RegionView3D *rv3d, Base *base,
* previously it adjusted to always to show it but that seems
* confusing because it doesn't show the actual blend size */
if (blend != 0.0f && blend != z_abs) {
- circ(0.0f, 0.0f, blend);
+ imm_draw_circle_wire_3d(pos, 0.0f, 0.0f, blend, 32);
}
}
}
if (drawcone)
- draw_transp_spot_volume(la, x, z);
+ draw_transp_spot_volume(la, x, z, pos);
/* draw clip start, useful for wide cones where its not obvious where the start is */
- glTranslatef(0.0, 0.0, -x); /* reverse translation above */
- glBegin(GL_LINES);
+ gpuTranslate3f(0.0f, 0.0f, -x); /* reverse translation above */
+ immBegin(GWN_PRIM_LINES, 2);
if (la->type == LA_SPOT && (la->mode & LA_SHAD_BUF)) {
float lvec_clip[3];
float vvec_clip[3];
@@ -1428,41 +1522,40 @@ static void drawlamp(View3D *v3d, RegionView3D *rv3d, Base *base,
interp_v3_v3v3(lvec_clip, vec, lvec, clipsta_fac);
interp_v3_v3v3(vvec_clip, vec, vvec, clipsta_fac);
- glVertex3fv(lvec_clip);
- glVertex3fv(vvec_clip);
+ immVertex3fv(pos, lvec_clip);
+ immVertex3fv(pos, vvec_clip);
}
/* Else, draw spot direction (using distance as end limit, same as for Area lamp). */
else {
- glVertex3f(0.0, 0.0, -circrad);
- glVertex3f(0.0, 0.0, -la->dist);
+ immVertex3f(pos, 0.0f, 0.0f, -circrad);
+ immVertex3f(pos, 0.0f, 0.0f, -la->dist);
}
- glEnd();
+ immEnd();
}
else if (ELEM(la->type, LA_HEMI, LA_SUN)) {
-
/* draw the line from the circle along the dist */
- glBegin(GL_LINES);
+ immBegin(GWN_PRIM_LINES, 2);
vec[2] = -circrad;
- glVertex3fv(vec);
+ immVertex3fv(pos, vec);
vec[2] = -la->dist;
- glVertex3fv(vec);
- glEnd();
-
+ immVertex3fv(pos, vec);
+ immEnd();
+
if (la->type == LA_HEMI) {
/* draw the hemisphere curves */
short axis, steps, dir;
float outdist, zdist, mul;
zero_v3(vec);
- outdist = 0.14; mul = 1.4; dir = 1;
-
+ outdist = 0.14f; mul = 1.4f; dir = 1;
+
setlinestyle(4);
/* loop over the 4 compass points, and draw each arc as a LINE_STRIP */
for (axis = 0; axis < 4; axis++) {
- float v[3] = {0.0, 0.0, 0.0};
- zdist = 0.02;
-
- glBegin(GL_LINE_STRIP);
-
+ float v[3] = {0.0f, 0.0f, 0.0f};
+ zdist = 0.02f;
+
+ immBegin(GWN_PRIM_LINE_STRIP, 6);
+
for (steps = 0; steps < 6; steps++) {
if (axis == 0 || axis == 1) { /* x axis up, x axis down */
/* make the arcs start at the edge of the energy circle */
@@ -1475,13 +1568,13 @@ static void drawlamp(View3D *v3d, RegionView3D *rv3d, Base *base,
}
v[2] = v[2] - steps * zdist;
-
- glVertex3fv(v);
-
+
+ immVertex3fv(pos, v);
+
zdist = zdist * mul;
}
-
- glEnd();
+
+ immEnd();
/* flip the direction */
dir = -dir;
}
@@ -1489,96 +1582,92 @@ static void drawlamp(View3D *v3d, RegionView3D *rv3d, Base *base,
#ifdef WITH_GAMEENGINE
if (drawshadowbox) {
- draw_transp_sun_volume(la);
+ draw_transp_sun_volume(la, pos);
}
#endif
-
}
else if (la->type == LA_AREA) {
setlinestyle(3);
if (la->area_shape == LA_AREA_SQUARE)
- fdrawbox(-la->area_size * 0.5f, -la->area_size * 0.5f, la->area_size * 0.5f, la->area_size * 0.5f);
+ imm_draw_box_wire_3d(pos, -la->area_size * 0.5f, -la->area_size * 0.5f, la->area_size * 0.5f, la->area_size * 0.5f);
else if (la->area_shape == LA_AREA_RECT)
- fdrawbox(-la->area_size * 0.5f, -la->area_sizey * 0.5f, la->area_size * 0.5f, la->area_sizey * 0.5f);
+ imm_draw_box_wire_3d(pos, -la->area_size * 0.5f, -la->area_sizey * 0.5f, la->area_size * 0.5f, la->area_sizey * 0.5f);
- glBegin(GL_LINES);
- glVertex3f(0.0, 0.0, -circrad);
- glVertex3f(0.0, 0.0, -la->dist);
- glEnd();
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex3f(pos, 0.0f, 0.0f, -circrad);
+ immVertex3f(pos, 0.0f, 0.0f, -la->dist);
+ immEnd();
}
-
+
/* and back to viewspace */
- glPushMatrix();
- glLoadMatrixf(rv3d->viewmat);
+ gpuPushMatrix();
+ gpuLoadMatrix(rv3d->viewmat);
copy_v3_v3(vec, ob->obmat[3]);
setlinestyle(0);
-
+
if ((la->type == LA_SPOT) && (la->mode & LA_SHAD_BUF) && (is_view == false)) {
- drawshadbuflimits(la, ob->obmat);
+ drawshadbuflimits(la, ob->obmat, pos);
}
-
+
if ((dflag & DRAW_CONSTCOLOR) == 0) {
- UI_GetThemeColor4ubv(TH_LAMP, col);
- glColor4ubv(col);
+ immUniformThemeColor(TH_LAMP);
}
glEnable(GL_BLEND);
-
+
if (vec[2] > 0) vec[2] -= circrad;
else vec[2] += circrad;
-
- glBegin(GL_LINES);
- glVertex3fv(vec);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex3fv(pos, vec);
vec[2] = 0;
- glVertex3fv(vec);
- glEnd();
-
- glPointSize(2.0);
- glBegin(GL_POINTS);
- glVertex3fv(vec);
- glEnd();
-
+ immVertex3fv(pos, vec);
+ immEnd();
+
+ glPointSize(2.0f);
+ immBegin(GWN_PRIM_POINTS, 1);
+ immVertex3fv(pos, vec);
+ immEnd();
+
glDisable(GL_BLEND);
-
- if ((dflag & DRAW_CONSTCOLOR) == 0) {
- /* restore for drawing extra stuff */
- glColor3ubv(ob_wire_col);
- }
- /* and finally back to org object space! */
- glPopMatrix();
+
+ immUnbindProgram();
+ gpuPopMatrix();
}
-static void draw_limit_line(float sta, float end, const short dflag, const unsigned char col[3])
+static void draw_limit_line(float sta, float end, const short dflag, const unsigned char col[3], unsigned pos)
{
- glBegin(GL_LINES);
- glVertex3f(0.0, 0.0, -sta);
- glVertex3f(0.0, 0.0, -end);
- glEnd();
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex3f(pos, 0.0f, 0.0f, -sta);
+ immVertex3f(pos, 0.0f, 0.0f, -end);
+ immEnd();
if (!(dflag & DRAW_PICKING)) {
- glPointSize(3.0);
- glBegin(GL_POINTS);
+ glPointSize(3.0f);
+ /* would like smooth round points here, but that means binding another shader...
+ * if it's really desired, pull these points into their own function to be called after */
+ immBegin(GWN_PRIM_POINTS, 2);
if ((dflag & DRAW_CONSTCOLOR) == 0) {
- glColor3ubv(col);
+ immUniformColor3ubv(col);
}
- glVertex3f(0.0, 0.0, -sta);
- glVertex3f(0.0, 0.0, -end);
- glEnd();
+ immVertex3f(pos, 0.0f, 0.0f, -sta);
+ immVertex3f(pos, 0.0f, 0.0f, -end);
+ immEnd();
}
}
/* yafray: draw camera focus point (cross, similar to aqsis code in tuhopuu) */
/* qdn: now also enabled for Blender to set focus point for defocus composite node */
-static void draw_focus_cross(float dist, float size)
+static void draw_focus_cross(float dist, float size, unsigned pos)
{
- glBegin(GL_LINES);
- glVertex3f(-size, 0.0f, -dist);
- glVertex3f(size, 0.0f, -dist);
- glVertex3f(0.0f, -size, -dist);
- glVertex3f(0.0f, size, -dist);
- glEnd();
+ immBegin(GWN_PRIM_LINES, 4);
+ immVertex3f(pos, -size, 0.0f, -dist);
+ immVertex3f(pos, size, 0.0f, -dist);
+ immVertex3f(pos, 0.0f, -size, -dist);
+ immVertex3f(pos, 0.0f, size, -dist);
+ immEnd();
}
#ifdef VIEW3D_CAMERA_BORDER_HACK
@@ -1588,26 +1677,6 @@ bool view3d_camera_border_hack_test = false;
/* ****************** draw clip data *************** */
-static void draw_bundle_sphere(void)
-{
- static GLuint displist = 0;
-
- if (displist == 0) {
- GLUquadricObj *qobj;
-
- displist = glGenLists(1);
- glNewList(displist, GL_COMPILE);
- qobj = gluNewQuadric();
- gluQuadricDrawStyle(qobj, GLU_FILL);
- gluSphere(qobj, 0.05, 8, 8);
- gluDeleteQuadric(qobj);
-
- glEndList();
- }
-
- glCallList(displist);
-}
-
static void draw_viewport_object_reconstruction(
Scene *scene, Base *base, const View3D *v3d, const RegionView3D *rv3d,
MovieClip *clip, MovieTrackingObject *tracking_object,
@@ -1633,7 +1702,7 @@ static void draw_viewport_object_reconstruction(
if ((tracking_object->flag & TRACKING_OBJECT_CAMERA) == 0)
mul_v3_fl(camera_size, tracking_object->scale);
- glPushMatrix();
+ gpuPushMatrix();
if (tracking_object->flag & TRACKING_OBJECT_CAMERA) {
/* current ogl matrix is translated in camera space, bundles should
@@ -1641,8 +1710,8 @@ static void draw_viewport_object_reconstruction(
* from current ogl matrix */
invert_m4_m4(imat, base->object->obmat);
- glMultMatrixf(imat);
- glMultMatrixf(mat);
+ gpuMultMatrix(imat);
+ gpuMultMatrix(mat);
}
else {
float obmat[4][4];
@@ -1651,7 +1720,7 @@ static void draw_viewport_object_reconstruction(
BKE_tracking_camera_get_reconstructed_interpolate(tracking, tracking_object, framenr, obmat);
invert_m4_m4(imat, obmat);
- glMultMatrixf(imat);
+ gpuMultMatrix(imat);
}
for (track = tracksbase->first; track; track = track->next) {
@@ -1664,66 +1733,93 @@ static void draw_viewport_object_reconstruction(
continue;
if (dflag & DRAW_PICKING)
- GPU_select_load_id(base->selcol + (tracknr << 16));
+ GPU_select_load_id(base->object->select_color + (tracknr << 16));
- glPushMatrix();
- glTranslate3fv(track->bundle_pos);
- glScalef(v3d->bundle_size / 0.05f / camera_size[0],
- v3d->bundle_size / 0.05f / camera_size[1],
- v3d->bundle_size / 0.05f / camera_size[2]);
+ gpuPushMatrix();
+ gpuTranslate3fv(track->bundle_pos);
+ gpuScale3f(v3d->bundle_size / 0.05f / camera_size[0],
+ v3d->bundle_size / 0.05f / camera_size[1],
+ v3d->bundle_size / 0.05f / camera_size[2]);
const int v3d_drawtype = view3d_effective_drawtype(v3d);
if (v3d_drawtype == OB_WIRE) {
+ unsigned char color[4];
+ const unsigned char *color_ptr = NULL;
if ((dflag & DRAW_CONSTCOLOR) == 0) {
if (selected && (track->flag & TRACK_CUSTOMCOLOR) == 0) {
- glColor3ubv(ob_wire_col);
+ color_ptr = ob_wire_col;
}
else {
- glColor3fv(track->color);
+ rgba_float_to_uchar(color, track->color);
+ color_ptr = color;
}
}
- drawaxes(rv3d->viewmatob, 0.05f, v3d->bundle_drawtype);
+ drawaxes(rv3d->viewmatob, 0.05f, v3d->bundle_drawtype, color_ptr);
}
else if (v3d_drawtype > OB_WIRE) {
if (v3d->bundle_drawtype == OB_EMPTY_SPHERE) {
+ Gwn_Batch *batch;
+
+ gpuScaleUniform(0.05f);
+
/* selection outline */
if (selected) {
+ batch = GPU_batch_preset_sphere_wire(1);
+
if ((dflag & DRAW_CONSTCOLOR) == 0) {
- glColor3ubv(ob_wire_col);
+ GWN_batch_program_set_builtin(batch, GPU_SHADER_3D_UNIFORM_COLOR);
+ GWN_batch_uniform_4f(batch, "color",
+ ob_wire_col[0] / 255.f,
+ ob_wire_col[1] / 255.f,
+ ob_wire_col[2] / 255.f, 1.0f);
+ }
+ else {
+ GWN_batch_program_set_builtin(batch, GPU_SHADER_3D_DEPTH_ONLY);
}
-
glLineWidth(2.0f);
- glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
-
- draw_bundle_sphere();
- glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
+ GWN_batch_draw(batch);
}
+ batch = GPU_batch_preset_sphere(0);
+
if ((dflag & DRAW_CONSTCOLOR) == 0) {
- if (track->flag & TRACK_CUSTOMCOLOR) glColor3fv(track->color);
- else UI_ThemeColor(TH_BUNDLE_SOLID);
+ const float light[3] = {0.0f, 0.0f, 1.0f};
+ float col[3];
+ GWN_batch_program_set_builtin(batch, GPU_SHADER_SIMPLE_LIGHTING);
+ GWN_batch_uniform_3fv(batch, "light", light);
+
+ if (track->flag & TRACK_CUSTOMCOLOR) copy_v3_v3(col, track->color);
+ else UI_GetThemeColor3fv(TH_BUNDLE_SOLID, col);
+ GWN_batch_uniform_4f(batch, "color", col[0], col[1], col[2], 1.0f);
+ }
+ else {
+ GWN_batch_program_set_builtin(batch, GPU_SHADER_3D_DEPTH_ONLY);
}
- draw_bundle_sphere();
+ GWN_batch_draw(batch);
}
else {
+ unsigned char color[4];
+ const unsigned char *color_ptr = NULL;
if ((dflag & DRAW_CONSTCOLOR) == 0) {
if (selected) {
- glColor3ubv(ob_wire_col);
+ color_ptr = ob_wire_col;
}
else {
- if (track->flag & TRACK_CUSTOMCOLOR) glColor3fv(track->color);
- else UI_ThemeColor(TH_WIRE);
+ if (track->flag & TRACK_CUSTOMCOLOR) rgba_float_to_uchar(color, track->color);
+ else UI_GetThemeColor4ubv(TH_WIRE, color);
+
+ color_ptr = color;
}
}
- drawaxes(rv3d->viewmatob, 0.05f, v3d->bundle_drawtype);
+ drawaxes(rv3d->viewmatob, 0.05f, v3d->bundle_drawtype, color_ptr);
}
}
- glPopMatrix();
+ gpuPopMatrix();
if ((dflag & DRAW_PICKING) == 0 && (v3d->flag2 & V3D_SHOW_BUNDLENAME)) {
float pos[3];
@@ -1743,22 +1839,27 @@ static void draw_viewport_object_reconstruction(
MovieTrackingReconstruction *reconstruction;
reconstruction = BKE_tracking_object_get_reconstruction(tracking, tracking_object);
- if (reconstruction->camnr) {
+ if (reconstruction->camnr >= 2) {
MovieReconstructedCamera *camera = reconstruction->cameras;
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformThemeColor(TH_CAMERA_PATH);
- UI_ThemeColor(TH_CAMERA_PATH);
glLineWidth(2.0f);
- glBegin(GL_LINE_STRIP);
+ immBegin(GWN_PRIM_LINE_STRIP, reconstruction->camnr);
for (int a = 0; a < reconstruction->camnr; a++, camera++) {
- glVertex3fv(camera->mat[3]);
+ immVertex3fv(pos, camera->mat[3]);
}
- glEnd();
+ immEnd();
+
+ immUnbindProgram();
}
}
}
- glPopMatrix();
+ gpuPopMatrix();
*global_track_index = tracknr;
}
@@ -1793,67 +1894,65 @@ static void draw_viewport_reconstruction(
/* restore */
GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
- if ((dflag & DRAW_CONSTCOLOR) == 0) {
- glColor3ubv(ob_wire_col);
- }
-
if (dflag & DRAW_PICKING)
- GPU_select_load_id(base->selcol);
+ GPU_select_load_id(base->object->select_color);
}
-static void drawcamera_volume(float near_plane[4][3], float far_plane[4][3], const GLenum mode)
+/* camera frame */
+static void drawcamera_frame(float vec[4][3], bool filled, unsigned pos)
{
- glBegin(mode);
- glVertex3fv(near_plane[0]);
- glVertex3fv(far_plane[0]);
- glVertex3fv(far_plane[1]);
- glVertex3fv(near_plane[1]);
- glEnd();
-
- glBegin(mode);
- glVertex3fv(near_plane[1]);
- glVertex3fv(far_plane[1]);
- glVertex3fv(far_plane[2]);
- glVertex3fv(near_plane[2]);
- glEnd();
-
- glBegin(mode);
- glVertex3fv(near_plane[2]);
- glVertex3fv(far_plane[2]);
- glVertex3fv(far_plane[3]);
- glVertex3fv(near_plane[3]);
- glEnd();
-
- glBegin(mode);
- glVertex3fv(far_plane[3]);
- glVertex3fv(near_plane[3]);
- glVertex3fv(near_plane[0]);
- glVertex3fv(far_plane[0]);
- glEnd();
+ immBegin(filled ? GWN_PRIM_TRI_FAN : GWN_PRIM_LINE_LOOP, 4);
+ immVertex3fv(pos, vec[0]);
+ immVertex3fv(pos, vec[1]);
+ immVertex3fv(pos, vec[2]);
+ immVertex3fv(pos, vec[3]);
+ immEnd();
}
-/* camera frame */
-static void drawcamera_frame(float vec[4][3], const GLenum mode)
+/* center point to camera frame */
+static void drawcamera_framelines(float vec[4][3], float origin[3], unsigned pos)
{
- glBegin(mode);
- glVertex3fv(vec[0]);
- glVertex3fv(vec[1]);
- glVertex3fv(vec[2]);
- glVertex3fv(vec[3]);
- glEnd();
+ immBegin(GWN_PRIM_LINES, 8);
+ immVertex3fv(pos, origin);
+ immVertex3fv(pos, vec[0]);
+ immVertex3fv(pos, origin);
+ immVertex3fv(pos, vec[1]);
+ immVertex3fv(pos, origin);
+ immVertex3fv(pos, vec[2]);
+ immVertex3fv(pos, origin);
+ immVertex3fv(pos, vec[3]);
+ immEnd();
}
-/* center point to camera frame */
-static void drawcamera_framelines(float vec[4][3], float origin[3])
+static void drawcamera_volume(float near_plane[4][3], float far_plane[4][3], bool filled, unsigned pos)
{
- glBegin(GL_LINE_STRIP);
- glVertex3fv(vec[1]);
- glVertex3fv(origin);
- glVertex3fv(vec[0]);
- glVertex3fv(vec[3]);
- glVertex3fv(origin);
- glVertex3fv(vec[2]);
- glEnd();
+ drawcamera_frame(near_plane, filled, pos);
+ drawcamera_frame(far_plane, filled, pos);
+
+ if (filled) {
+ immBegin(GWN_PRIM_TRI_STRIP, 10);
+
+ immVertex3fv(pos, near_plane[0]);
+ immVertex3fv(pos, far_plane[0]);
+ immVertex3fv(pos, near_plane[1]);
+ immVertex3fv(pos, far_plane[1]);
+ immVertex3fv(pos, near_plane[2]);
+ immVertex3fv(pos, far_plane[2]);
+ immVertex3fv(pos, near_plane[3]);
+ immVertex3fv(pos, far_plane[3]);
+ immVertex3fv(pos, near_plane[0]);
+ immVertex3fv(pos, far_plane[0]);
+
+ immEnd();
+ }
+ else {
+ immBegin(GWN_PRIM_LINES, 8);
+ for (int i = 0; i < 4; ++i) {
+ immVertex3fv(pos, near_plane[i]);
+ immVertex3fv(pos, far_plane[i]);
+ }
+ immEnd();
+ }
}
static bool drawcamera_is_stereo3d(Scene *scene, View3D *v3d, Object *ob)
@@ -1865,7 +1964,7 @@ static bool drawcamera_is_stereo3d(Scene *scene, View3D *v3d, Object *ob)
static void drawcamera_stereo3d(
Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob, const Camera *cam,
- float vec[4][3], float drawsize, const float scale[3])
+ float vec[4][3], float drawsize, const float scale[3], unsigned pos)
{
float obmat[4][4];
float vec_lr[2][4][3];
@@ -1881,15 +1980,15 @@ static void drawcamera_stereo3d(
zero_v3(tvec);
- glPushMatrix();
+ /* caller bound GPU_SHADER_3D_UNIFORM_COLOR, passed in pos attribute ID */
for (int i = 0; i < 2; i++) {
ob = BKE_camera_multiview_render(scene, ob, names[i]);
cam_lr[i] = ob->data;
- glLoadMatrixf(rv3d->viewmat);
+ gpuLoadMatrix(rv3d->viewmat);
BKE_camera_multiview_model_matrix(&scene->r, ob, names[i], obmat);
- glMultMatrixf(obmat);
+ gpuMultMatrix(obmat);
copy_m3_m3(vec_lr[i], vec);
copy_v3_v3(vec_lr[i][3], vec[3]);
@@ -1906,10 +2005,10 @@ static void drawcamera_stereo3d(
if (is_stereo3d_cameras) {
/* camera frame */
- drawcamera_frame(vec_lr[i], GL_LINE_LOOP);
+ drawcamera_frame(vec_lr[i], false, pos);
/* center point to camera frame */
- drawcamera_framelines(vec_lr[i], tvec);
+ drawcamera_framelines(vec_lr[i], tvec, pos);
}
/* connecting line */
@@ -1923,21 +2022,20 @@ static void drawcamera_stereo3d(
}
}
-
/* the remaining drawing takes place in the view space */
- glLoadMatrixf(rv3d->viewmat);
+ gpuLoadMatrix(rv3d->viewmat);
if (is_stereo3d_cameras) {
/* draw connecting lines */
- GPU_basic_shader_bind_enable(GPU_SHADER_LINE | GPU_SHADER_STIPPLE);
- GPU_basic_shader_line_stipple(2, 0xAAAA);
+ glLineStipple(2, 0xAAAA);
+ glEnable(GL_LINE_STIPPLE);
- glBegin(GL_LINES);
- glVertex3fv(origin[0]);
- glVertex3fv(origin[1]);
- glEnd();
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex3fv(pos, origin[0]);
+ immVertex3fv(pos, origin[1]);
+ immEnd();
- GPU_basic_shader_bind_disable(GPU_SHADER_LINE | GPU_SHADER_STIPPLE);
+ glDisable(GL_LINE_STIPPLE);
}
/* draw convergence plane */
@@ -1962,21 +2060,21 @@ static void drawcamera_stereo3d(
add_v3_v3(local_plane[i], axis_center);
}
- glColor3f(0.0f, 0.0f, 0.0f);
+ immUniformColor3f(0.0f, 0.0f, 0.0f);
/* camera frame */
- drawcamera_frame(local_plane, GL_LINE_LOOP);
+ drawcamera_frame(local_plane, false, pos);
if (v3d->stereo3d_convergence_alpha > 0.0f) {
glEnable(GL_BLEND);
- glDepthMask(0); /* disable write in zbuffer, needed for nice transp */
+ glDepthMask(GL_FALSE); /* disable write in zbuffer, needed for nice transp */
- glColor4f(0.0f, 0.0f, 0.0f, v3d->stereo3d_convergence_alpha);
+ immUniformColor4f(0.0f, 0.0f, 0.0f, v3d->stereo3d_convergence_alpha);
- drawcamera_frame(local_plane, GL_QUADS);
+ drawcamera_frame(local_plane, true, pos);
glDisable(GL_BLEND);
- glDepthMask(1); /* restore write in zbuffer */
+ glDepthMask(GL_TRUE); /* restore write in zbuffer */
}
}
@@ -2001,37 +2099,31 @@ static void drawcamera_stereo3d(
}
/* camera frame */
- glColor3f(0.0f, 0.0f, 0.0f);
+ immUniformColor3f(0.0f, 0.0f, 0.0f);
- drawcamera_frame(near_plane, GL_LINE_LOOP);
- drawcamera_frame(far_plane, GL_LINE_LOOP);
- drawcamera_volume(near_plane, far_plane, GL_LINE_LOOP);
+ drawcamera_volume(near_plane, far_plane, false, pos);
if (v3d->stereo3d_volume_alpha > 0.0f) {
glEnable(GL_BLEND);
- glDepthMask(0); /* disable write in zbuffer, needed for nice transp */
+ glDepthMask(GL_FALSE); /* disable write in zbuffer, needed for nice transp */
if (i == 0)
- glColor4f(0.0f, 1.0f, 1.0f, v3d->stereo3d_volume_alpha);
+ immUniformColor4f(0.0f, 1.0f, 1.0f, v3d->stereo3d_volume_alpha);
else
- glColor4f(1.0f, 0.0f, 0.0f, v3d->stereo3d_volume_alpha);
+ immUniformColor4f(1.0f, 0.0f, 0.0f, v3d->stereo3d_volume_alpha);
- drawcamera_frame(near_plane, GL_QUADS);
- drawcamera_frame(far_plane, GL_QUADS);
- drawcamera_volume(near_plane, far_plane, GL_QUADS);
+ drawcamera_volume(near_plane, far_plane, true, pos);
glDisable(GL_BLEND);
- glDepthMask(1); /* restore write in zbuffer */
+ glDepthMask(GL_TRUE); /* restore write in zbuffer */
}
}
}
-
- glPopMatrix();
}
/* flag similar to draw_object() */
-static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base,
- const short dflag, const unsigned char ob_wire_col[4])
+void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base,
+ const short dflag, const unsigned char ob_wire_col[4])
{
/* a standing up pyramid with (0,0,0) as top */
Camera *cam;
@@ -2094,8 +2186,12 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base
BKE_camera_view_frame_ex(scene, cam, cam->drawsize, is_view, scale,
asp, shift, &drawsize, vec);
- glDisable(GL_CULL_FACE);
- glLineWidth(1);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ if (ob_wire_col) {
+ immUniformColor3ubv(ob_wire_col);
+ }
+ glLineWidth(1.0f);
/* camera frame */
if (!is_stereo3d_cameras) {
@@ -2104,27 +2200,29 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base
float obmat[4][4];
bool is_left = v3d->multiview_eye == STEREO_LEFT_ID;
- glPushMatrix();
- glLoadMatrixf(rv3d->viewmat);
+ gpuPushMatrix();
+ gpuLoadMatrix(rv3d->viewmat);
BKE_camera_multiview_model_matrix(&scene->r, ob, is_left ? STEREO_LEFT_NAME : STEREO_RIGHT_NAME, obmat);
- glMultMatrixf(obmat);
+ gpuMultMatrix(obmat);
- drawcamera_frame(vec, GL_LINE_LOOP);
- glPopMatrix();
+ drawcamera_frame(vec, false, pos);
+ gpuPopMatrix();
}
else {
- drawcamera_frame(vec, GL_LINE_LOOP);
+ drawcamera_frame(vec, false, pos);
}
}
- if (is_view)
+ if (is_view) {
+ immUnbindProgram();
return;
+ }
zero_v3(tvec);
/* center point to camera frame */
if (!is_stereo3d_cameras)
- drawcamera_framelines(vec, tvec);
+ drawcamera_framelines(vec, tvec, pos);
/* arrow on top */
tvec[2] = vec[1][2]; /* copy the depth */
@@ -2133,22 +2231,25 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base
* for active cameras. We actually draw both outline+filled
* for active cameras so the wire can be seen side-on */
for (int i = 0; i < 2; i++) {
- if (i == 0) glBegin(GL_LINE_LOOP);
- else if (i == 1 && is_active) glBegin(GL_TRIANGLES);
+ if (i == 0) immBegin(GWN_PRIM_LINE_LOOP, 3);
+ else if (i == 1 && is_active) {
+ glDisable(GL_CULL_FACE); /* TODO: declarative state tracking */
+ immBegin(GWN_PRIM_TRIS, 3);
+ }
else break;
tvec[0] = shift[0] + ((-0.7f * drawsize) * scale[0]);
tvec[1] = shift[1] + ((drawsize * (asp[1] + 0.1f)) * scale[1]);
- glVertex3fv(tvec); /* left */
+ immVertex3fv(pos, tvec); /* left */
tvec[0] = shift[0] + ((0.7f * drawsize) * scale[0]);
- glVertex3fv(tvec); /* right */
+ immVertex3fv(pos, tvec); /* right */
tvec[0] = shift[0];
tvec[1] = shift[1] + ((1.1f * drawsize * (asp[1] + 0.7f)) * scale[1]);
- glVertex3fv(tvec); /* top */
+ immVertex3fv(pos, tvec); /* top */
- glEnd();
+ immEnd();
}
if ((dflag & DRAW_SCENESET) == 0) {
@@ -2159,16 +2260,15 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base
copy_m4_m4(nobmat, ob->obmat);
normalize_m4(nobmat);
- glPushMatrix();
- glLoadMatrixf(rv3d->viewmat);
- glMultMatrixf(nobmat);
+ gpuLoadMatrix(rv3d->viewmat);
+ gpuMultMatrix(nobmat);
if (cam->flag & CAM_SHOWLIMITS) {
const unsigned char col[3] = {128, 128, 60}, col_hi[3] = {255, 255, 120};
- draw_limit_line(cam->clipsta, cam->clipend, dflag, (is_active ? col_hi : col));
+ draw_limit_line(cam->clipsta, cam->clipend, dflag, (is_active ? col_hi : col), pos);
/* qdn: was yafray only, now also enabled for Blender to be used with defocus composite node */
- draw_focus_cross(BKE_camera_object_dof_distance(ob), cam->drawsize);
+ draw_focus_cross(BKE_camera_object_dof_distance(ob), cam->drawsize, pos);
}
if (cam->flag & CAM_SHOWMIST) {
@@ -2177,69 +2277,79 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base
if (world) {
draw_limit_line(world->miststa, world->miststa + world->mistdist,
- dflag, (is_active ? col_hi : col));
+ dflag, (is_active ? col_hi : col), pos);
}
}
- glPopMatrix();
}
}
/* stereo cameras drawing */
if (is_stereo3d) {
- drawcamera_stereo3d(scene, v3d, rv3d, ob, cam, vec, drawsize, scale);
+ drawcamera_stereo3d(scene, v3d, rv3d, ob, cam, vec, drawsize, scale, pos);
}
+
+ immUnbindProgram();
}
/* flag similar to draw_object() */
-static void drawspeaker(Scene *UNUSED(scene), View3D *UNUSED(v3d), RegionView3D *UNUSED(rv3d),
- Object *UNUSED(ob), int UNUSED(flag))
+void drawspeaker(const unsigned char ob_wire_col[3])
{
- float vec[3];
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
- glEnable(GL_BLEND);
- glLineWidth(1);
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+
+ if (ob_wire_col) {
+ immUniformColor3ubv(ob_wire_col);
+ }
+
+ glLineWidth(1.0f);
+
+ const int segments = 16;
for (int j = 0; j < 3; j++) {
- vec[2] = 0.25f * j - 0.125f;
+ float z = 0.25f * j - 0.125f;
- glBegin(GL_LINE_LOOP);
- for (int i = 0; i < 16; i++) {
- vec[0] = cosf((float)M_PI * i / 8.0f) * (j == 0 ? 0.5f : 0.25f);
- vec[1] = sinf((float)M_PI * i / 8.0f) * (j == 0 ? 0.5f : 0.25f);
- glVertex3fv(vec);
+ immBegin(GWN_PRIM_LINE_LOOP, segments);
+ for (int i = 0; i < segments; i++) {
+ float x = cosf((float)M_PI * i / 8.0f) * (j == 0 ? 0.5f : 0.25f);
+ float y = sinf((float)M_PI * i / 8.0f) * (j == 0 ? 0.5f : 0.25f);
+ immVertex3f(pos, x, y, z);
}
- glEnd();
+ immEnd();
}
for (int j = 0; j < 4; j++) {
- vec[0] = (((j + 1) % 2) * (j - 1)) * 0.5f;
- vec[1] = ((j % 2) * (j - 2)) * 0.5f;
- glBegin(GL_LINE_STRIP);
+ float x = (((j + 1) % 2) * (j - 1)) * 0.5f;
+ float y = ((j % 2) * (j - 2)) * 0.5f;
+ immBegin(GWN_PRIM_LINE_STRIP, 3);
for (int i = 0; i < 3; i++) {
if (i == 1) {
- vec[0] *= 0.5f;
- vec[1] *= 0.5f;
+ x *= 0.5f;
+ y *= 0.5f;
}
- vec[2] = 0.25f * i - 0.125f;
- glVertex3fv(vec);
+ float z = 0.25f * i - 0.125f;
+ immVertex3f(pos, x, y, z);
}
- glEnd();
+ immEnd();
}
- glDisable(GL_BLEND);
+ immUnbindProgram();
}
-static void lattice_draw_verts(Lattice *lt, DispList *dl, BPoint *actbp, short sel)
+static void lattice_draw_verts(Lattice *lt, DispList *dl, BPoint *actbp, short sel,
+ unsigned int pos, unsigned int color)
{
BPoint *bp = lt->def;
const float *co = dl ? dl->verts : NULL;
+ float active_color[4], draw_color[4];
- const int color = sel ? TH_VERTEX_SELECT : TH_VERTEX;
- UI_ThemeColor(color);
+ UI_GetThemeColor4fv(sel ? TH_VERTEX_SELECT : TH_VERTEX, draw_color);
+ UI_GetThemeColor4fv(TH_ACTIVE_VERT, active_color);
glPointSize(UI_GetThemeValuef(TH_VERTEX_SIZE));
- glBegin(GL_POINTS);
+ immBeginAtMost(GWN_PRIM_POINTS, lt->pntsw * lt->pntsv * lt->pntsu);
for (int w = 0; w < lt->pntsw; w++) {
int wxt = (w == 0 || w == lt->pntsw - 1);
@@ -2251,12 +2361,12 @@ static void lattice_draw_verts(Lattice *lt, DispList *dl, BPoint *actbp, short s
if (bp->hide == 0) {
/* check for active BPoint and ensure selected */
if ((bp == actbp) && (bp->f1 & SELECT)) {
- UI_ThemeColor(TH_ACTIVE_VERT);
- glVertex3fv(dl ? co : bp->vec);
- UI_ThemeColor(color);
+ immAttrib4fv(color, active_color);
+ immVertex3fv(pos, dl ? co : bp->vec);
}
else if ((bp->f1 & SELECT) == sel) {
- glVertex3fv(dl ? co : bp->vec);
+ immAttrib4fv(color, draw_color);
+ immVertex3fv(pos, dl ? co : bp->vec);
}
}
}
@@ -2264,32 +2374,32 @@ static void lattice_draw_verts(Lattice *lt, DispList *dl, BPoint *actbp, short s
}
}
- glEnd();
+ immEnd();
}
-static void drawlattice__point(Lattice *lt, DispList *dl, int u, int v, int w, int actdef_wcol)
+static void drawlattice__point(Lattice *lt, DispList *dl, int u, int v, int w, int actdef_wcol,
+ unsigned int pos, unsigned int color)
{
int index = ((w * lt->pntsv + v) * lt->pntsu) + u;
if (actdef_wcol) {
float col[3];
MDeformWeight *mdw = defvert_find_index(lt->dvert + index, actdef_wcol - 1);
-
weight_to_rgb(col, mdw ? mdw->weight : 0.0f);
- glColor3fv(col);
-
+ immAttrib3fv(color, col);
}
if (dl) {
- glVertex3fv(&dl->verts[index * 3]);
+ immVertex3fv(pos, &dl->verts[index * 3]);
}
else {
- glVertex3fv(lt->def[index].vec);
+ immVertex3fv(pos, lt->def[index].vec);
}
}
#ifdef SEQUENCER_DAG_WORKAROUND
-static void ensure_curve_cache(Scene *scene, Object *object)
+static void ensure_curve_cache(
+ const EvaluationContext *eval_ctx, Scene *scene, Object *object)
{
bool need_recalc = object->curve_cache == NULL;
/* Render thread might have freed the curve cache if the
@@ -2318,13 +2428,13 @@ static void ensure_curve_cache(Scene *scene, Object *object)
case OB_CURVE:
case OB_SURF:
case OB_FONT:
- BKE_displist_make_curveTypes(scene, object, false);
+ BKE_displist_make_curveTypes(eval_ctx, scene, object, false);
break;
case OB_MBALL:
- BKE_displist_make_mball(G.main->eval_ctx, scene, object);
+ BKE_displist_make_mball(eval_ctx, scene, object);
break;
case OB_LATTICE:
- BKE_lattice_modifiers_calc(scene, object);
+ BKE_lattice_modifiers_calc(eval_ctx, scene, object);
break;
}
}
@@ -2332,7 +2442,7 @@ static void ensure_curve_cache(Scene *scene, Object *object)
#endif
/* lattice color is hardcoded, now also shows weightgroup values in edit mode */
-static void drawlattice(View3D *v3d, Object *ob)
+static void drawlattice(View3D *v3d, Object *ob, const short dflag, const unsigned char ob_wire_col[4])
{
Lattice *lt = ob->data;
DispList *dl;
@@ -2345,15 +2455,37 @@ static void drawlattice(View3D *v3d, Object *ob)
if (is_edit) {
lt = lt->editlatt->latt;
- UI_ThemeColor(TH_WIRE_EDIT);
-
if (ob->defbase.first && lt->dvert) {
actdef_wcol = ob->actdef;
}
}
- glLineWidth(1);
- glBegin(GL_LINES);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int color, pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ if (actdef_wcol) {
+ color = GWN_vertformat_attr_add(format, "color", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_SMOOTH_COLOR);
+ }
+ else {
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+
+ if (is_edit) {
+ immUniformThemeColor(TH_WIRE_EDIT);
+ }
+ else {
+ if ((dflag & DRAW_CONSTCOLOR) == 0) {
+ immUniformColor3ubv(ob_wire_col);
+ }
+ else {
+ immUniformColor3f(0.0f, 0.0f, 0.0f);
+ }
+ }
+ }
+
+ glLineWidth(1.0f);
+ immBeginAtMost(GWN_PRIM_LINES, lt->pntsw * lt->pntsv * lt->pntsu * 6);
+
for (w = 0; w < lt->pntsw; w++) {
int wxt = (w == 0 || w == lt->pntsw - 1);
for (v = 0; v < lt->pntsv; v++) {
@@ -2362,30 +2494,40 @@ static void drawlattice(View3D *v3d, Object *ob)
int uxt = (u == 0 || u == lt->pntsu - 1);
if (w && ((uxt || vxt) || !(lt->flag & LT_OUTSIDE))) {
- drawlattice__point(lt, dl, u, v, w - 1, actdef_wcol);
- drawlattice__point(lt, dl, u, v, w, actdef_wcol);
+ drawlattice__point(lt, dl, u, v, w - 1, actdef_wcol, pos, color);
+ drawlattice__point(lt, dl, u, v, w, actdef_wcol, pos, color);
}
if (v && ((uxt || wxt) || !(lt->flag & LT_OUTSIDE))) {
- drawlattice__point(lt, dl, u, v - 1, w, actdef_wcol);
- drawlattice__point(lt, dl, u, v, w, actdef_wcol);
+ drawlattice__point(lt, dl, u, v - 1, w, actdef_wcol, pos, color);
+ drawlattice__point(lt, dl, u, v, w, actdef_wcol, pos, color);
}
if (u && ((vxt || wxt) || !(lt->flag & LT_OUTSIDE))) {
- drawlattice__point(lt, dl, u - 1, v, w, actdef_wcol);
- drawlattice__point(lt, dl, u, v, w, actdef_wcol);
+ drawlattice__point(lt, dl, u - 1, v, w, actdef_wcol, pos, color);
+ drawlattice__point(lt, dl, u, v, w, actdef_wcol, pos, color);
}
}
}
}
- glEnd();
+
+ immEnd();
+ immUnbindProgram();
if (is_edit) {
BPoint *actbp = BKE_lattice_active_point_get(lt);
if (v3d->zbuf) glDisable(GL_DEPTH_TEST);
-
- lattice_draw_verts(lt, dl, actbp, 0);
- lattice_draw_verts(lt, dl, actbp, 1);
-
+
+ Gwn_VertFormat *v_format = immVertexFormat();
+ unsigned int v_pos = GWN_vertformat_attr_add(v_format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ unsigned int v_color = GWN_vertformat_attr_add(v_format, "color", GWN_COMP_F32, 4, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_POINT_FIXED_SIZE_VARYING_COLOR);
+
+ lattice_draw_verts(lt, dl, actbp, 0, v_pos, v_color);
+ lattice_draw_verts(lt, dl, actbp, 1, v_pos, v_color);
+
+ immUnbindProgram();
+
if (v3d->zbuf) glEnable(GL_DEPTH_TEST);
}
}
@@ -2399,6 +2541,7 @@ typedef struct drawDMVertSel_userData {
int active;
unsigned char *col[3]; /* (base, sel, act) */
char sel_prev;
+ unsigned int pos, color;
} drawDMVertSel_userData;
static void drawSelectedVertices__mapFunc(void *userData, int index, const float co[3],
@@ -2410,17 +2553,18 @@ static void drawSelectedVertices__mapFunc(void *userData, int index, const float
if (!(mv->flag & ME_HIDE)) {
const char sel = (index == data->active) ? 2 : (mv->flag & SELECT);
if (sel != data->sel_prev) {
- glColor3ubv(data->col[sel]);
+ immAttrib3ubv(data->color, data->col[sel]);
data->sel_prev = sel;
}
- glVertex3fv(co);
+ immVertex3fv(data->pos, co);
}
}
static void drawSelectedVertices(DerivedMesh *dm, Mesh *me)
{
drawDMVertSel_userData data;
+ Gwn_VertFormat *format = immVertexFormat();
/* TODO define selected color */
unsigned char base_col[3] = {0x0, 0x0, 0x0};
@@ -2435,9 +2579,18 @@ static void drawSelectedVertices(DerivedMesh *dm, Mesh *me)
data.col[1] = sel_col;
data.col[2] = act_col;
- glBegin(GL_POINTS);
+ data.color = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
+ data.pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ if (dm->getNumVerts(dm) == 0) return;
+
+ immBindBuiltinProgram(GPU_SHADER_3D_FLAT_COLOR);
+
+ immBeginAtMost(GWN_PRIM_POINTS, dm->getNumVerts(dm));
dm->foreachMappedVert(dm, drawSelectedVertices__mapFunc, &data, DM_FOREACH_NOP);
- glEnd();
+ immEnd();
+
+ immUnbindProgram();
}
/* ************** DRAW MESH ****************** */
@@ -2484,25 +2637,34 @@ static void draw_dm_face_normals__mapFunc(void *userData, int index, const float
copy_v3_v3(n, no);
}
- glVertex3fv(cent);
- glVertex3f(cent[0] + n[0] * data->normalsize,
- cent[1] + n[1] * data->normalsize,
- cent[2] + n[2] * data->normalsize);
+ immVertex3fv(data->pos, cent);
+ immVertex3f(data->pos, cent[0] + n[0] * data->normalsize,
+ cent[1] + n[1] * data->normalsize,
+ cent[2] + n[2] * data->normalsize);
}
}
-static void draw_dm_face_normals(BMEditMesh *em, Scene *scene, Object *ob, DerivedMesh *dm)
+static void draw_dm_face_normals(BMEditMesh *em, Scene *scene, Object *ob, DerivedMesh *dm, int theme_id)
{
+ Gwn_VertFormat *format = immVertexFormat();
drawDMNormal_userData data;
data.bm = em->bm;
data.normalsize = scene->toolsettings->normalsize;
+ data.pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
calcDrawDMNormalScale(ob, &data);
- glBegin(GL_LINES);
+ if (dm->getNumPolys(dm) == 0) return;
+
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformThemeColor(theme_id);
+
+ immBeginAtMost(GWN_PRIM_LINES, dm->getNumPolys(dm) * 2);
dm->foreachMappedFaceCenter(dm, draw_dm_face_normals__mapFunc, &data, DM_FOREACH_USE_NORMAL);
- glEnd();
+ immEnd();
+
+ immUnbindProgram();
}
static void draw_dm_face_centers__mapFunc(void *userData, int index, const float cent[3], const float UNUSED(no[3]))
@@ -2513,16 +2675,28 @@ static void draw_dm_face_centers__mapFunc(void *userData, int index, const float
if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN) &&
(BM_elem_flag_test(efa, BM_ELEM_SELECT) == data->select))
{
- glVertex3fv(cent);
+ immVertex3fv(data->pos, cent);
}
}
-static void draw_dm_face_centers(BMEditMesh *em, DerivedMesh *dm, bool select)
+static void draw_dm_face_centers(BMEditMesh *em, DerivedMesh *dm, bool select, const unsigned char fcol[3])
{
- drawBMSelect_userData data = {em->bm, select};
+ Gwn_VertFormat *format = immVertexFormat();
+
+ drawBMSelect_userData data;
+ data.bm = em->bm;
+ data.select = select;
+ data.pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ if (dm->getNumPolys(dm) == 0) return;
- glBegin(GL_POINTS);
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformColor3ubv(fcol);
+
+ immBeginAtMost(GWN_PRIM_POINTS, dm->getNumPolys(dm));
dm->foreachMappedFaceCenter(dm, draw_dm_face_centers__mapFunc, &data, DM_FOREACH_NOP);
- glEnd();
+ immEnd();
+
+ immUnbindProgram();
}
static void draw_dm_vert_normals__mapFunc(void *userData, int index, const float co[3], const float no_f[3], const short no_s[3])
@@ -2549,71 +2723,83 @@ static void draw_dm_vert_normals__mapFunc(void *userData, int index, const float
copy_v3_v3(n, no);
}
- glVertex3fv(co);
- glVertex3f(co[0] + n[0] * data->normalsize,
- co[1] + n[1] * data->normalsize,
- co[2] + n[2] * data->normalsize);
+ immVertex3fv(data->pos, co);
+ immVertex3f(data->pos, co[0] + n[0] * data->normalsize,
+ co[1] + n[1] * data->normalsize,
+ co[2] + n[2] * data->normalsize);
}
}
-static void draw_dm_vert_normals(BMEditMesh *em, Scene *scene, Object *ob, DerivedMesh *dm)
+static void draw_dm_vert_normals(BMEditMesh *em, Scene *scene, Object *ob, DerivedMesh *dm, int theme_id)
{
drawDMNormal_userData data;
+ Gwn_VertFormat *format = immVertexFormat();
data.bm = em->bm;
data.normalsize = scene->toolsettings->normalsize;
+ data.pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
calcDrawDMNormalScale(ob, &data);
- glBegin(GL_LINES);
+ if (dm->getNumVerts(dm) == 0) return;
+
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformThemeColor(theme_id);
+
+ immBeginAtMost(GWN_PRIM_LINES, dm->getNumVerts(dm) * 2);
dm->foreachMappedVert(dm, draw_dm_vert_normals__mapFunc, &data, DM_FOREACH_USE_NORMAL);
- glEnd();
+ immEnd();
+
+ immUnbindProgram();
}
-/* Draw verts with color set based on selection */
-static void draw_dm_verts__mapFunc(void *userData, int index, const float co[3],
- const float UNUSED(no_f[3]), const short UNUSED(no_s[3]))
+static void draw_dm_verts_skin_root__mapFunc(void *userData, int index, const float co[3],
+ const float UNUSED(no_f[3]), const short UNUSED(no_s[3]))
{
drawDMVerts_userData *data = userData;
BMVert *eve = BM_vert_at_index(data->bm, index);
if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN) && BM_elem_flag_test(eve, BM_ELEM_SELECT) == data->sel) {
/* skin nodes: draw a red circle around the root node(s) */
- if (data->cd_vskin_offset != -1) {
- const MVertSkin *vs = BM_ELEM_CD_GET_VOID_P(eve, data->cd_vskin_offset);
- if (vs->flag & MVERT_SKIN_ROOT) {
- float radius = (vs->radius[0] + vs->radius[1]) * 0.5f;
- glEnd();
-
- glColor4ubv(data->th_skin_root);
- drawcircball(GL_LINES, co, radius, data->imat);
-
- glColor4ubv(data->sel ? data->th_vertex_select : data->th_vertex);
- glBegin(GL_POINTS);
- }
+ const MVertSkin *vs = BM_ELEM_CD_GET_VOID_P(eve, data->cd_vskin_offset);
+ if (vs->flag & MVERT_SKIN_ROOT) {
+ float radius = (vs->radius[0] + vs->radius[1]) * 0.5f;
+ imm_drawcircball(co, radius, data->imat, data->pos);
}
+ }
+}
+
+/* Draw verts with color set based on selection */
+static void draw_dm_verts__mapFunc(void *userData, int index, const float co[3],
+ const float UNUSED(no_f[3]), const short UNUSED(no_s[3]))
+{
+ drawDMVerts_userData *data = userData;
+ BMVert *eve = BM_vert_at_index(data->bm, index);
+ if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN) && BM_elem_flag_test(eve, BM_ELEM_SELECT) == data->sel) {
/* draw active in a different color - no need to stop/start point drawing for this :D */
if (eve == data->eve_act) {
- glColor4ubv(data->th_editmesh_active);
- glVertex3fv(co);
-
- /* back to regular vertex color */
- glColor4ubv(data->sel ? data->th_vertex_select : data->th_vertex);
+ immAttrib4ubv(data->color, data->th_editmesh_active);
+ immVertex3fv(data->pos, co);
}
else {
- glVertex3fv(co);
+ immAttrib4ubv(data->color, data->sel ? data->th_vertex_select : data->th_vertex);
+ immVertex3fv(data->pos, co);
}
}
}
static void draw_dm_verts(BMEditMesh *em, DerivedMesh *dm, const char sel, BMVert *eve_act,
- RegionView3D *rv3d)
+ RegionView3D *rv3d, const unsigned char col[4])
{
+ Gwn_VertFormat *format = immVertexFormat();
+
drawDMVerts_userData data;
data.sel = sel;
data.eve_act = eve_act;
data.bm = em->bm;
+ data.pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ data.color = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 4, GWN_FETCH_INT_TO_FLOAT_UNIT);
/* Cache theme values */
UI_GetThemeColor4ubv(TH_EDITMESH_ACTIVE, data.th_editmesh_active);
@@ -2621,16 +2807,37 @@ static void draw_dm_verts(BMEditMesh *em, DerivedMesh *dm, const char sel, BMVer
UI_GetThemeColor4ubv(TH_VERTEX, data.th_vertex);
UI_GetThemeColor4ubv(TH_SKIN_ROOT, data.th_skin_root);
- /* For skin root drawing */
- data.cd_vskin_offset = CustomData_get_offset(&em->bm->vdata, CD_MVERT_SKIN);
+ /* Set correct alpha */
+ data.th_editmesh_active[3] = data.th_vertex_select[3] = data.th_vertex[3] = data.th_skin_root[3] = col[3];
+
/* view-aligned matrix */
mul_m4_m4m4(data.imat, rv3d->viewmat, em->ob->obmat);
invert_m4(data.imat);
+ if (dm->getNumVerts(dm) == 0) return;
+
+ immBindBuiltinProgram(GPU_SHADER_3D_FLAT_COLOR);
+
glPointSize(UI_GetThemeValuef(TH_VERTEX_SIZE));
- glBegin(GL_POINTS);
+
+ immBeginAtMost(GWN_PRIM_POINTS, dm->getNumVerts(dm));
dm->foreachMappedVert(dm, draw_dm_verts__mapFunc, &data, DM_FOREACH_NOP);
- glEnd();
+ immEnd();
+
+ immUnbindProgram();
+
+ /* For skin root drawing */
+ data.cd_vskin_offset = CustomData_get_offset(&em->bm->vdata, CD_MVERT_SKIN);
+
+ if (data.cd_vskin_offset != -1) {
+ data.pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformColor4ubv(data.th_skin_root);
+
+ dm->foreachMappedVert(dm, draw_dm_verts_skin_root__mapFunc, &data, DM_FOREACH_NOP);
+
+ immUnbindProgram();
+ }
}
/* Draw edges with color set based on selection */
@@ -2936,24 +3143,32 @@ static void draw_dm_loop_normals__mapFunc(void *userData, int vertex_index, int
}
mul_v3_fl(vec, data->normalsize);
add_v3_v3(vec, co);
- glVertex3fv(co);
- glVertex3fv(vec);
+ immVertex3fv(data->pos, co);
+ immVertex3fv(data->pos, vec);
}
}
}
-static void draw_dm_loop_normals(BMEditMesh *em, Scene *scene, Object *ob, DerivedMesh *dm)
+static void draw_dm_loop_normals(BMEditMesh *em, Scene *scene, Object *ob, DerivedMesh *dm, int theme_id)
{
drawDMNormal_userData data;
data.bm = em->bm;
data.normalsize = scene->toolsettings->normalsize;
+ data.pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ if (dm->getNumLoops(dm) == 0) return;
+
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformThemeColor(theme_id);
calcDrawDMNormalScale(ob, &data);
- glBegin(GL_LINES);
+ immBeginAtMost(GWN_PRIM_LINES, dm->getNumLoops(dm) * 2);
dm->foreachMappedLoop(dm, draw_dm_loop_normals__mapFunc, &data, DM_FOREACH_USE_NORMAL);
- glEnd();
+ immEnd();
+
+ immUnbindProgram();
}
/* Draw faces with color set based on selection
@@ -3070,7 +3285,7 @@ static void draw_dm_creases(BMEditMesh *em, DerivedMesh *dm)
data.cd_layer_offset = CustomData_get_offset(&em->bm->edata, CD_CREASE);
if (data.cd_layer_offset != -1) {
- glLineWidth(3.0);
+ glLineWidth(3.0f);
dm->drawMappedEdges(dm, draw_dm_creases__setDrawOptions, &data);
}
}
@@ -3100,8 +3315,10 @@ static void draw_dm_bweights__mapFunc(void *userData, int index, const float co[
if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) {
const float bweight = BM_ELEM_CD_GET_FLOAT(eve, data->cd_layer_offset);
if (bweight != 0.0f) {
- UI_ThemeColorBlend(TH_VERTEX, TH_VERTEX_BEVEL, bweight);
- glVertex3fv(co);
+ unsigned char col[3];
+ UI_GetThemeColorBlend3ubv(TH_VERTEX, TH_VERTEX_BEVEL, bweight, col);
+ immAttrib3ubv(data->col, col);
+ immVertex3fv(data->pos, co);
}
}
}
@@ -3115,11 +3332,21 @@ static void draw_dm_bweights(BMEditMesh *em, Scene *scene, DerivedMesh *dm)
data.bm = em->bm;
data.cd_layer_offset = CustomData_get_offset(&em->bm->vdata, CD_BWEIGHT);
+ /* is that ever true? */
if (data.cd_layer_offset != -1) {
- glPointSize(UI_GetThemeValuef(TH_VERTEX_SIZE) + 2);
- glBegin(GL_POINTS);
+ Gwn_VertFormat *format = immVertexFormat();
+ data.pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ data.col = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 4, GWN_FETCH_INT_TO_FLOAT_UNIT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_FLAT_COLOR);
+
+ glPointSize(UI_GetThemeValuef(TH_VERTEX_SIZE) + 2.0f);
+
+ immBeginAtMost(GWN_PRIM_POINTS, dm->getNumVerts(dm));
dm->foreachMappedVert(dm, draw_dm_bweights__mapFunc, &data, DM_FOREACH_NOP);
- glEnd();
+ immEnd();
+
+ immUnbindProgram();
}
}
else {
@@ -3129,7 +3356,7 @@ static void draw_dm_bweights(BMEditMesh *em, Scene *scene, DerivedMesh *dm)
data.cd_layer_offset = CustomData_get_offset(&em->bm->edata, CD_BWEIGHT);
if (data.cd_layer_offset != -1) {
- glLineWidth(3.0);
+ glLineWidth(3.0f);
dm->drawMappedEdges(dm, draw_dm_bweights__setDrawOptions, &data);
}
}
@@ -3150,7 +3377,7 @@ static void draw_em_fancy_verts(Scene *scene, View3D *v3d, Object *obedit,
{
ToolSettings *ts = scene->toolsettings;
- if (v3d->zbuf) glDepthMask(0); /* disable write in zbuffer, zbuf select */
+ if (v3d->zbuf) glDepthMask(GL_FALSE); /* disable write in zbuffer, zbuf select */
for (int sel = 0; sel < 2; sel++) {
unsigned char col[4], fcol[4];
@@ -3180,15 +3407,12 @@ static void draw_em_fancy_verts(Scene *scene, View3D *v3d, Object *obedit,
}
if (ts->selectmode & SCE_SELECT_VERTEX) {
- glPointSize(size);
- glColor4ubv(col);
- draw_dm_verts(em, cageDM, sel, eve_act, rv3d);
+ draw_dm_verts(em, cageDM, sel, eve_act, rv3d, col);
}
if (check_ob_drawface_dot(scene, v3d, obedit->dt)) {
glPointSize(fsize);
- glColor4ubv(fcol);
- draw_dm_face_centers(em, cageDM, sel);
+ draw_dm_face_centers(em, cageDM, sel, fcol);
}
if (pass == 0) {
@@ -3198,7 +3422,7 @@ static void draw_em_fancy_verts(Scene *scene, View3D *v3d, Object *obedit,
}
}
- if (v3d->zbuf) glDepthMask(1);
+ if (v3d->zbuf) glDepthMask(GL_TRUE);
}
static void draw_em_fancy_edges(BMEditMesh *em, Scene *scene, View3D *v3d,
@@ -3305,11 +3529,9 @@ static void draw_em_measure_stats(ARegion *ar, View3D *v3d, Object *ob, BMEditMe
if (me->drawflag & (ME_DRAWEXTRA_EDGELEN | ME_DRAWEXTRA_EDGEANG)) {
BoundBox bb;
- bglMats mats = {{0}};
const rcti rect = {0, ar->winx, 0, ar->winy};
- view3d_get_transformation(ar, ar->regiondata, em->ob, &mats);
- ED_view3d_clipping_calc(&bb, clip_planes, &mats, &rect);
+ ED_view3d_clipping_calc(&bb, clip_planes, ar, em->ob, &rect);
}
if (me->drawflag & ME_DRAWEXTRA_EDGELEN) {
@@ -3673,8 +3895,9 @@ static DMDrawOption draw_em_fancy__setGLSLFaceOpts(void *userData, int index)
}
}
-static void draw_em_fancy(Scene *scene, ARegion *ar, View3D *v3d,
- Object *ob, BMEditMesh *em, DerivedMesh *cageDM, DerivedMesh *finalDM, const char dt)
+static void draw_em_fancy(
+ const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, ARegion *ar, View3D *v3d,
+ Object *ob, BMEditMesh *em, DerivedMesh *cageDM, DerivedMesh *finalDM, const char dt)
{
RegionView3D *rv3d = ar->regiondata;
@@ -3682,7 +3905,7 @@ static void draw_em_fancy(Scene *scene, ARegion *ar, View3D *v3d,
const bool use_occlude_wire = (dt > OB_WIRE) && (v3d->flag2 & V3D_OCCLUDE_WIRE);
bool use_depth_offset = false;
- glLineWidth(1);
+ glLineWidth(1.0f);
BM_mesh_elem_table_ensure(em->bm, BM_VERT | BM_EDGE | BM_FACE);
@@ -3691,7 +3914,7 @@ static void draw_em_fancy(Scene *scene, ARegion *ar, View3D *v3d,
draw_mesh_paint_weight_faces(finalDM, true, draw_em_fancy__setFaceOpts, me->edit_btmesh);
ED_view3d_polygon_offset(rv3d, 1.0);
- glDepthMask(0);
+ glDepthMask(GL_FALSE);
use_depth_offset = true;
}
else {
@@ -3711,7 +3934,7 @@ static void draw_em_fancy(Scene *scene, ARegion *ar, View3D *v3d,
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
}
else if (check_object_draw_texture(scene, v3d, dt)) {
- if (draw_glsl_material(scene, ob, v3d, dt)) {
+ if (draw_glsl_material(eval_ctx, scene, view_layer, ob, v3d, dt)) {
glFrontFace((ob->transflag & OB_NEG_SCALE) ? GL_CW : GL_CCW);
finalDM->drawMappedFacesGLSL(finalDM, GPU_object_material_bind,
@@ -3721,7 +3944,7 @@ static void draw_em_fancy(Scene *scene, ARegion *ar, View3D *v3d,
glFrontFace(GL_CCW);
}
else {
- draw_mesh_textured(scene, v3d, rv3d, ob, finalDM, 0);
+ draw_mesh_textured(scene, view_layer, v3d, rv3d, ob, finalDM, 0);
}
}
else {
@@ -3738,7 +3961,7 @@ static void draw_em_fancy(Scene *scene, ARegion *ar, View3D *v3d,
UI_ThemeColor(TH_WIRE_EDIT);
ED_view3d_polygon_offset(rv3d, 1.0);
- glDepthMask(0);
+ glDepthMask(GL_FALSE);
use_depth_offset = true;
}
else {
@@ -3788,7 +4011,7 @@ static void draw_em_fancy(Scene *scene, ARegion *ar, View3D *v3d,
#endif
glEnable(GL_BLEND);
- glDepthMask(0); /* disable write in zbuffer, needed for nice transp */
+ glDepthMask(GL_FALSE); /* disable write in zbuffer, needed for nice transp */
/* don't draw unselected faces, only selected, this is MUCH nicer when texturing */
if (check_object_draw_texture(scene, v3d, dt))
@@ -3804,7 +4027,7 @@ static void draw_em_fancy(Scene *scene, ARegion *ar, View3D *v3d,
#endif
glDisable(GL_BLEND);
- glDepthMask(1); /* restore write in zbuffer */
+ glDepthMask(GL_TRUE); /* restore write in zbuffer */
}
else if (efa_act) {
/* even if draw faces is off it would be nice to draw the stipple face
@@ -3819,7 +4042,7 @@ static void draw_em_fancy(Scene *scene, ARegion *ar, View3D *v3d,
UI_GetThemeColor4ubv(TH_EDITMESH_ACTIVE, col3);
glEnable(GL_BLEND);
- glDepthMask(0); /* disable write in zbuffer, needed for nice transp */
+ glDepthMask(GL_FALSE); /* disable write in zbuffer, needed for nice transp */
#ifdef WITH_FREESTYLE
draw_dm_faces_sel(em, cageDM, col1, col2, col3, col4, efa_act);
@@ -3828,7 +4051,7 @@ static void draw_em_fancy(Scene *scene, ARegion *ar, View3D *v3d,
#endif
glDisable(GL_BLEND);
- glDepthMask(1); /* restore write in zbuffer */
+ glDepthMask(GL_TRUE); /* restore write in zbuffer */
}
/* here starts all fancy draw-extra over */
@@ -3842,7 +4065,7 @@ static void draw_em_fancy(Scene *scene, ARegion *ar, View3D *v3d,
else {
if (me->drawflag & ME_DRAWSEAMS) {
UI_ThemeColor(TH_EDGE_SEAM);
- glLineWidth(2);
+ glLineWidth(2.0f);
draw_dm_edges_seams(em, cageDM);
@@ -3851,7 +4074,7 @@ static void draw_em_fancy(Scene *scene, ARegion *ar, View3D *v3d,
if (me->drawflag & ME_DRAWSHARP) {
UI_ThemeColor(TH_EDGE_SHARP);
- glLineWidth(2);
+ glLineWidth(2.0f);
draw_dm_edges_sharp(em, cageDM);
@@ -3861,7 +4084,7 @@ static void draw_em_fancy(Scene *scene, ARegion *ar, View3D *v3d,
#ifdef WITH_FREESTYLE
if (me->drawflag & ME_DRAW_FREESTYLE_EDGE && CustomData_has_layer(&em->bm->edata, CD_FREESTYLE_EDGE)) {
UI_ThemeColor(TH_FREESTYLE_EDGE_MARK);
- glLineWidth(2);
+ glLineWidth(2.0f);
draw_dm_edges_freestyle(em, cageDM);
@@ -3876,7 +4099,7 @@ static void draw_em_fancy(Scene *scene, ARegion *ar, View3D *v3d,
draw_dm_bweights(em, scene, cageDM);
}
- glLineWidth(1);
+ glLineWidth(1.0f);
draw_em_fancy_edges(em, scene, v3d, me, cageDM, 0, eed_act);
}
@@ -3884,16 +4107,13 @@ static void draw_em_fancy(Scene *scene, ARegion *ar, View3D *v3d,
draw_em_fancy_verts(scene, v3d, ob, em, cageDM, eve_act, rv3d);
if (me->drawflag & ME_DRAWNORMALS) {
- UI_ThemeColor(TH_NORMAL);
- draw_dm_face_normals(em, scene, ob, cageDM);
+ draw_dm_face_normals(em, scene, ob, cageDM, TH_NORMAL);
}
if (me->drawflag & ME_DRAW_VNORMALS) {
- UI_ThemeColor(TH_VNORMAL);
- draw_dm_vert_normals(em, scene, ob, cageDM);
+ draw_dm_vert_normals(em, scene, ob, cageDM, TH_VNORMAL);
}
if (me->drawflag & ME_DRAW_LNORMALS) {
- UI_ThemeColor(TH_LNORMAL);
- draw_dm_loop_normals(em, scene, ob, cageDM);
+ draw_dm_loop_normals(em, scene, ob, cageDM, TH_LNORMAL);
}
if ((me->drawflag & (ME_DRAWEXTRA_EDGELEN |
@@ -3914,7 +4134,7 @@ static void draw_em_fancy(Scene *scene, ARegion *ar, View3D *v3d,
}
if (use_depth_offset) {
- glDepthMask(1);
+ glDepthMask(GL_TRUE);
ED_view3d_polygon_offset(rv3d, 0.0);
GPU_object_material_unbind();
}
@@ -3925,15 +4145,99 @@ static void draw_em_fancy(Scene *scene, ARegion *ar, View3D *v3d,
#endif
}
+static void draw_em_fancy_new(Scene *UNUSED(scene), ARegion *UNUSED(ar), View3D *UNUSED(v3d),
+ Object *UNUSED(ob), Mesh *me, BMEditMesh *UNUSED(em), DerivedMesh *UNUSED(cageDM), DerivedMesh *UNUSED(finalDM), const char UNUSED(dt))
+{
+ /* for now... something simple! */
+ Gwn_Batch *surface = DRW_mesh_batch_cache_get_all_triangles(me);
+
+ glEnable(GL_DEPTH_TEST);
+ glDepthFunc(GL_LEQUAL);
+
+ glEnable(GL_BLEND);
+
+ /* disable depth writes for transparent surface, so it doesn't interfere with itself */
+ glDepthMask(GL_FALSE);
+
+ GWN_batch_program_set_builtin(surface, GPU_SHADER_3D_UNIFORM_COLOR);
+ GWN_batch_uniform_4f(surface, "color", 1.0f, 0.5f, 0.0f, 0.5f);
+ GWN_batch_draw(surface);
+
+#if 0 /* until I understand finalDM better */
+ if (finalDM != cageDM) {
+ puts("finalDM != cageDM");
+ Gwn_Batch *finalSurface = MBC_get_all_triangles(finalDM);
+ GWN_batch_program_set_builtin(finalSurface, GPU_SHADER_3D_UNIFORM_COLOR);
+ GWN_batch_uniform_4f(finalSurface, "color", 0.0f, 0.0f, 0.0f, 0.05f);
+ GWN_batch_draw(finalSurface);
+ }
+#endif
+
+ glDepthMask(GL_TRUE);
+
+ /* now write surface depth so other objects won't poke through
+ * NOTE: does not help as much as desired
+ * TODO: draw edit object last to avoid this mess
+ */
+ GWN_batch_program_set_builtin(surface, GPU_SHADER_3D_DEPTH_ONLY);
+ GWN_batch_draw(surface);
+
+ if (GLEW_VERSION_3_2) {
+#if 0
+ Gwn_Batch *overlay = DRW_mesh_batch_cache_get_overlay_edges(me);
+ GWN_batch_program_set_builtin(overlay, GPU_SHADER_EDGES_OVERLAY);
+ GWN_batch_uniform_2f(overlay, "viewportSize", ar->winx, ar->winy);
+ GWN_batch_draw(overlay);
+#endif
+
+#if 0 /* TODO: use this SIMPLE variant for pure triangle meshes */
+ GWN_batch_program_set_builtin(surface, GPU_SHADER_EDGES_OVERLAY_SIMPLE);
+ /* use these defaults:
+ * const float edgeColor[4] = { 0.0f, 0.0f, 0.0f, 1.0f };
+ * GWN_batch_uniform_4f(surface, "fillColor", edgeColor[0], edgeColor[1], edgeColor[2], 0.0f);
+ * GWN_batch_uniform_4fv(surface, "outlineColor", edgeColor);
+ * GWN_batch_uniform_1f(surface, "outlineWidth", 1.0f);
+ */
+ GWN_batch_uniform_2f(surface, "viewportSize", ar->winx, ar->winy);
+ GWN_batch_draw(surface);
+#endif
+ }
+ else {
+ Gwn_Batch *edges = DRW_mesh_batch_cache_get_all_edges(me);
+ GWN_batch_program_set_builtin(edges, GPU_SHADER_3D_UNIFORM_COLOR);
+ GWN_batch_uniform_4f(edges, "color", 0.0f, 0.0f, 0.0f, 1.0f);
+ glEnable(GL_LINE_SMOOTH);
+ glLineWidth(1.5f);
+ GWN_batch_draw(edges);
+ glDisable(GL_LINE_SMOOTH);
+ }
+
+#if 0 /* looks good even without points */
+ Gwn_Batch *verts = MBC_get_all_verts(me);
+ glEnable(GL_BLEND);
+
+ GWN_batch_program_set_builtin(verts, GPU_SHADER_3D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA);
+ GWN_batch_uniform_4f(verts, "color", 0.0f, 0.0f, 0.0f, 1.0f);
+ GWN_batch_uniform_1f(verts, "size", UI_GetThemeValuef(TH_VERTEX_SIZE) * 1.5f);
+ GWN_batch_draw(verts);
+
+ glDisable(GL_BLEND);
+#endif
+}
+
/* Mesh drawing routines */
-static void draw_mesh_object_outline(View3D *v3d, Object *ob, DerivedMesh *dm)
+void draw_mesh_object_outline(
+ const EvaluationContext *eval_ctx, View3D *v3d,
+ Object *ob, DerivedMesh *dm, const unsigned char ob_wire_col[4]) /* LEGACY */
{
if ((v3d->transp == false) && /* not when we draw the transparent pass */
- (ob->mode & OB_MODE_ALL_PAINT) == false) /* not when painting (its distracting) - campbell */
+ (eval_ctx->object_mode & OB_MODE_ALL_PAINT) == false) /* not when painting (its distracting) - campbell */
{
glLineWidth(UI_GetThemeValuef(TH_OUTLINE_WIDTH) * 2.0f);
- glDepthMask(0);
+ glDepthMask(GL_FALSE);
+
+ if (ob_wire_col) glColor4ubv(ob_wire_col);
/* if transparent, we cannot draw the edges for solid select... edges
* have no material info. GPU_object_material_visible will skip the
@@ -3947,7 +4251,51 @@ static void draw_mesh_object_outline(View3D *v3d, Object *ob, DerivedMesh *dm)
dm->drawEdges(dm, 0, 1);
}
- glDepthMask(1);
+ glDepthMask(GL_TRUE);
+ }
+}
+
+static void draw_mesh_object_outline_new(
+ const EvaluationContext *eval_ctx, View3D *v3d, RegionView3D *rv3d,
+ Mesh *me, const bool is_active)
+{
+ if ((v3d->transp == false) && /* not when we draw the transparent pass */
+ (eval_ctx->object_mode & OB_MODE_ALL_PAINT) == false) /* not when painting (its distracting) - campbell */
+ {
+ glLineWidth(UI_GetThemeValuef(TH_OUTLINE_WIDTH) * 2.0f);
+ glDepthMask(GL_FALSE);
+
+ float outline_color[4];
+ UI_GetThemeColor4fv((is_active ? TH_ACTIVE : TH_SELECT), outline_color);
+
+#if 1 /* new version that draws only silhouette edges */
+ Gwn_Batch *fancy_edges = DRW_mesh_batch_cache_get_fancy_edges(me);
+
+ if (rv3d->persp == RV3D_ORTHO) {
+ GWN_batch_program_set_builtin(fancy_edges, GPU_SHADER_EDGES_FRONT_BACK_ORTHO);
+ /* set eye vector, transformed to object coords */
+ float eye[3] = { 0.0f, 0.0f, 1.0f }; /* looking into the screen */
+ mul_m3_v3(gpuGetNormalMatrixInverse(NULL), eye);
+ GWN_batch_uniform_3fv(fancy_edges, "eye", eye);
+ }
+ else {
+ GWN_batch_program_set_builtin(fancy_edges, GPU_SHADER_EDGES_FRONT_BACK_PERSP);
+ }
+
+ GWN_batch_uniform_1b(fancy_edges, "drawFront", false);
+ GWN_batch_uniform_1b(fancy_edges, "drawBack", false);
+ GWN_batch_uniform_1b(fancy_edges, "drawSilhouette", true);
+ GWN_batch_uniform_4fv(fancy_edges, "silhouetteColor", outline_color);
+
+ GWN_batch_draw(fancy_edges);
+#else /* alternate version that matches look of old viewport (but more efficient) */
+ Gwn_Batch *batch = MBC_get_all_edges(dm);
+ GWN_batch_program_set_builtin(batch, GPU_SHADER_3D_UNIFORM_COLOR);
+ GWN_batch_uniform_4fv(batch, "color", outline_color);
+ GWN_batch_draw(batch);
+#endif
+
+ glDepthMask(GL_TRUE);
}
}
@@ -3957,20 +4305,23 @@ static bool object_is_halo(Scene *scene, Object *ob)
return (ma && (ma->material_type == MA_TYPE_HALO) && !BKE_scene_use_new_shading_nodes(scene));
}
-static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D *rv3d, Base *base,
- const char dt, const unsigned char ob_wire_col[4], const short dflag)
+static void draw_mesh_fancy(
+ const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, ARegion *ar, View3D *v3d, RegionView3D *rv3d, Base *base,
+ const char dt, const unsigned char ob_wire_col[4], const short dflag)
{
#ifdef WITH_GAMEENGINE
- Object *ob = (rv3d->rflag & RV3D_IS_GAME_ENGINE) ? BKE_object_lod_meshob_get(base->object, scene) : base->object;
+ Object *ob = (
+ (rv3d->rflag & RV3D_IS_GAME_ENGINE) ?
+ BKE_object_lod_meshob_get(base->object, view_layer, eval_ctx->object_mode) : base->object);
#else
Object *ob = base->object;
#endif
Mesh *me = ob->data;
eWireDrawMode draw_wire = OBDRAW_WIRE_OFF;
bool /* no_verts,*/ no_edges, no_faces;
- DerivedMesh *dm = mesh_get_derived_final(scene, ob, scene->customdata_mask);
- const bool is_obact = (ob == OBACT);
- int draw_flags = (is_obact && BKE_paint_select_face_test(ob)) ? DRAW_FACE_SELECT : 0;
+ DerivedMesh *dm = mesh_get_derived_final(eval_ctx, scene, ob, scene->customdata_mask);
+ const bool is_obact = (ob == OBACT(view_layer));
+ int draw_flags = (is_obact && BKE_paint_select_face_test(ob, eval_ctx->object_mode)) ? DRAW_FACE_SELECT : 0;
if (!dm)
return;
@@ -4005,37 +4356,39 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D
if (dt == OB_BOUNDBOX) {
if (((v3d->flag2 & V3D_RENDER_OVERRIDE) && v3d->drawtype >= OB_WIRE) == 0)
- draw_bounding_volume(ob, ob->boundtype);
+ draw_bounding_volume(ob, ob->boundtype, ob_wire_col);
}
else if ((no_faces && no_edges) ||
- ((!is_obact || (ob->mode == OB_MODE_OBJECT)) && object_is_halo(scene, ob)))
+ ((!is_obact || (eval_ctx->object_mode == OB_MODE_OBJECT)) && object_is_halo(scene, ob)))
{
- glPointSize(1.5);
+ glPointSize(1.5f);
dm->drawVerts(dm);
}
else if ((dt == OB_WIRE) || no_faces) {
draw_wire = OBDRAW_WIRE_ON; /* draw wire only, no depth buffer stuff */
}
- else if (((is_obact && ob->mode & OB_MODE_TEXTURE_PAINT)) ||
+ else if (((is_obact && eval_ctx->object_mode & OB_MODE_TEXTURE_PAINT)) ||
check_object_draw_texture(scene, v3d, dt))
{
bool draw_loose = true;
if ((v3d->flag & V3D_SELECT_OUTLINE) &&
((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) &&
- (base->flag & SELECT) &&
+ (base->flag & BASE_SELECTED) &&
!(G.f & G_PICKSEL || (draw_flags & DRAW_FACE_SELECT)) &&
(draw_wire == OBDRAW_WIRE_OFF))
{
- draw_mesh_object_outline(v3d, ob, dm);
+ draw_mesh_object_outline(eval_ctx, v3d, ob, dm, ob_wire_col);
}
- if (draw_glsl_material(scene, ob, v3d, dt) && !(draw_flags & DRAW_MODIFIERS_PREVIEW)) {
+ if (draw_glsl_material(eval_ctx, scene, view_layer, ob, v3d, dt) && !(draw_flags & DRAW_MODIFIERS_PREVIEW)) {
Paint *p;
glFrontFace((ob->transflag & OB_NEG_SCALE) ? GL_CW : GL_CCW);
- if ((v3d->flag2 & V3D_SHOW_SOLID_MATCAP) && ob->sculpt && (p = BKE_paint_get_active(scene))) {
+ if ((v3d->flag2 & V3D_SHOW_SOLID_MATCAP) && ob->sculpt &&
+ (p = BKE_paint_get_active(scene, view_layer, eval_ctx->object_mode)))
+ {
GPUVertexAttribs gattribs;
float planes[4][4];
float (*fpl)[4] = NULL;
@@ -4043,7 +4396,7 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D
if (ob->sculpt->partial_redraw) {
if (ar->do_draw & RGN_DRAW_PARTIAL) {
- ED_sculpt_redraw_planes_get(planes, ar, rv3d, ob);
+ ED_sculpt_redraw_planes_get(planes, ar, ob);
fpl = planes;
ob->sculpt->partial_redraw = 0;
}
@@ -4068,7 +4421,7 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D
draw_mesh_face_select(rv3d, me, dm, false);
}
else {
- draw_mesh_textured(scene, v3d, rv3d, ob, dm, draw_flags);
+ draw_mesh_textured(scene, view_layer, v3d, rv3d, ob, dm, draw_flags);
}
if (draw_loose && !(draw_flags & DRAW_FACE_SELECT)) {
@@ -4094,11 +4447,11 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D
/* draw outline */
if ((v3d->flag & V3D_SELECT_OUTLINE) &&
((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) &&
- (base->flag & SELECT) &&
+ (base->flag & BASE_SELECTED) &&
(draw_wire == OBDRAW_WIRE_OFF) &&
(ob->sculpt == NULL))
{
- draw_mesh_object_outline(v3d, ob, dm);
+ draw_mesh_object_outline(eval_ctx, v3d, ob, dm, ob_wire_col);
}
/* materials arent compatible with vertex colors */
@@ -4118,23 +4471,23 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D
if ((v3d->flag & V3D_SELECT_OUTLINE) &&
((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) &&
- (base->flag & SELECT) &&
+ (base->flag & BASE_SELECTED) &&
(draw_wire == OBDRAW_WIRE_OFF) &&
(ob->sculpt == NULL))
{
- draw_mesh_object_outline(v3d, ob, dm);
+ draw_mesh_object_outline(eval_ctx, v3d, ob, dm, ob_wire_col);
}
glFrontFace((ob->transflag & OB_NEG_SCALE) ? GL_CW : GL_CCW);
- if (ob->sculpt && (p = BKE_paint_get_active(scene))) {
+ if (ob->sculpt && (p = BKE_paint_get_active(scene, view_layer, eval_ctx->object_mode))) {
float planes[4][4];
float (*fpl)[4] = NULL;
const bool fast = (p->flags & PAINT_FAST_NAVIGATE) && (rv3d->rflag & RV3D_NAVIGATING);
if (ob->sculpt->partial_redraw) {
if (ar->do_draw & RGN_DRAW_PARTIAL) {
- ED_sculpt_redraw_planes_get(planes, ar, rv3d, ob);
+ ED_sculpt_redraw_planes_get(planes, ar, ob);
fpl = planes;
ob->sculpt->partial_redraw = 0;
}
@@ -4159,7 +4512,7 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D
}
}
else if (dt == OB_PAINT) {
- draw_mesh_paint(v3d, rv3d, ob, dm, draw_flags);
+ draw_mesh_paint(eval_ctx, v3d, rv3d, ob, dm, draw_flags);
/* since we already draw wire as wp guide, don't draw over the top */
draw_wire = OBDRAW_WIRE_OFF;
@@ -4174,8 +4527,10 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D
* with the background. */
if ((dflag & DRAW_CONSTCOLOR) == 0) {
- if (is_obact && (ob->mode & OB_MODE_PARTICLE_EDIT)) {
- ob_wire_color_blend_theme_id(ob_wire_col, TH_BACK, 0.15f);
+ if (is_obact && (eval_ctx->object_mode & OB_MODE_PARTICLE_EDIT)) {
+ float color[3];
+ ob_wire_color_blend_theme_id(ob_wire_col, TH_BACK, 0.15f, color);
+ glColor3fv(color);
}
else {
glColor3ubv(ob_wire_col);
@@ -4193,19 +4548,19 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D
*/
if (dt != OB_WIRE && (draw_wire == OBDRAW_WIRE_ON_DEPTH)) {
ED_view3d_polygon_offset(rv3d, 1.0);
- glDepthMask(0); /* disable write in zbuffer, selected edge wires show better */
+ glDepthMask(GL_FALSE); /* disable write in zbuffer, selected edge wires show better */
}
glLineWidth(1.0f);
dm->drawEdges(dm, ((dt == OB_WIRE) || no_faces), (ob->dtx & OB_DRAW_ALL_EDGES) != 0);
if (dt != OB_WIRE && (draw_wire == OBDRAW_WIRE_ON_DEPTH)) {
- glDepthMask(1);
+ glDepthMask(GL_TRUE);
ED_view3d_polygon_offset(rv3d, 0.0);
}
}
- if (is_obact && BKE_paint_select_vert_test(ob)) {
+ if (is_obact && BKE_paint_select_vert_test(ob, eval_ctx->object_mode)) {
const bool use_depth = (v3d->flag & V3D_ZBUF_SELECT) != 0;
glPointSize(UI_GetThemeValuef(TH_VERTEX_SIZE));
@@ -4219,8 +4574,9 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D
}
/* returns true if nothing was drawn, for detecting to draw an object center */
-static bool draw_mesh_object(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D *rv3d, Base *base,
- const char dt, const unsigned char ob_wire_col[4], const short dflag)
+static bool draw_mesh_object(
+ const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, ARegion *ar, View3D *v3d, RegionView3D *rv3d, Base *base,
+ const char dt, const unsigned char ob_wire_col[4], const short dflag)
{
Object *ob = base->object;
Object *obedit = scene->obedit;
@@ -4231,7 +4587,7 @@ static bool draw_mesh_object(Scene *scene, ARegion *ar, View3D *v3d, RegionView3
/* If we are drawing shadows and any of the materials don't cast a shadow,
* then don't draw the object */
if (v3d->flag2 & V3D_RENDER_SHADOW) {
- for (int i = 1; i <= ob->totcol; ++i) {
+ for (int i = 0; i < ob->totcol; ++i) {
Material *ma = give_current_material(ob, i);
if (ma && !(ma->mode2 & MA_CASTSHADOW)) {
return true;
@@ -4260,7 +4616,7 @@ static bool draw_mesh_object(Scene *scene, ARegion *ar, View3D *v3d, RegionView3
}
else {
cageDM = editbmesh_get_derived_cage_and_final(
- scene, ob, em, scene->customdata_mask,
+ eval_ctx, scene, ob, em, scene->customdata_mask,
&finalDM);
}
@@ -4273,13 +4629,13 @@ static bool draw_mesh_object(Scene *scene, ARegion *ar, View3D *v3d, RegionView3
if (use_material) {
if (dt > OB_WIRE) {
- const bool glsl = draw_glsl_material(scene, ob, v3d, dt);
+ const bool glsl = draw_glsl_material(eval_ctx, scene, view_layer, ob, v3d, dt);
- GPU_begin_object_materials(v3d, rv3d, scene, ob, glsl, NULL);
+ GPU_begin_object_materials(v3d, rv3d, scene, view_layer, ob, glsl, eval_ctx->object_mode, NULL);
}
}
- draw_em_fancy(scene, ar, v3d, ob, em, cageDM, finalDM, dt);
+ draw_em_fancy(eval_ctx, scene, view_layer, ar, v3d, ob, em, cageDM, finalDM, dt);
if (use_material) {
GPU_end_object_materials();
@@ -4292,16 +4648,17 @@ static bool draw_mesh_object(Scene *scene, ARegion *ar, View3D *v3d, RegionView3
/* ob->bb was set by derived mesh system, do NULL check just to be sure */
if (me->totpoly <= 4 || (!ob->bb || ED_view3d_boundbox_clip(rv3d, ob->bb))) {
if (dt > OB_WIRE) {
- const bool glsl = draw_glsl_material(scene, ob, v3d, dt);
+ const bool glsl = draw_glsl_material(eval_ctx, scene, view_layer, ob, v3d, dt);
if (dt == OB_SOLID || glsl) {
- const bool check_alpha = check_alpha_pass(base);
- GPU_begin_object_materials(v3d, rv3d, scene, ob, glsl,
- (check_alpha) ? &do_alpha_after : NULL);
+ const bool check_alpha = check_alpha_pass(eval_ctx, base);
+ GPU_begin_object_materials(
+ v3d, rv3d, scene, view_layer, ob,
+ glsl, eval_ctx->object_mode, (check_alpha) ? &do_alpha_after : NULL);
}
}
- draw_mesh_fancy(scene, ar, v3d, rv3d, base, dt, ob_wire_col, dflag);
+ draw_mesh_fancy(eval_ctx, scene, view_layer, ar, v3d, rv3d, base, dt, ob_wire_col, dflag);
GPU_end_object_materials();
@@ -4309,7 +4666,7 @@ static bool draw_mesh_object(Scene *scene, ARegion *ar, View3D *v3d, RegionView3
}
}
- if ((dflag & DRAW_PICKING) == 0 && (base->flag & OB_FROMDUPLI) == 0 && (v3d->flag2 & V3D_RENDER_SHADOW) == 0) {
+ if ((dflag & DRAW_PICKING) == 0 && (base->flag_legacy & OB_FROMDUPLI) == 0 && (v3d->flag2 & V3D_RENDER_SHADOW) == 0) {
/* GPU_begin_object_materials checked if this is needed */
if (do_alpha_after) {
if (ob->dtx & OB_DRAWXRAY) {
@@ -4333,18 +4690,556 @@ static bool draw_mesh_object(Scene *scene, ARegion *ar, View3D *v3d, RegionView3
return retval;
}
+static void make_color_variations(const unsigned char base_ubyte[4], float low[4], float med[4], float high[4], const bool other_obedit)
+{
+ /* original idea: nice variations (lighter & darker shades) of base color
+ * current implementation uses input color as high; med & low get closer to background color
+ */
+
+ float bg[3];
+ UI_GetThemeColor3fv(TH_BACK, bg);
+
+ float base[4];
+ rgba_uchar_to_float(base, base_ubyte);
+
+ if (other_obedit) {
+ /* this object should fade away so user can focus on the object being edited */
+ interp_v3_v3v3(low, bg, base, 0.1f);
+ interp_v3_v3v3(med, bg, base, 0.2f);
+ interp_v3_v3v3(high, bg, base, 0.25f);
+ }
+ else {
+ interp_v3_v3v3(low, bg, base, 0.333f);
+ interp_v3_v3v3(med, bg, base, 0.667f);
+ copy_v3_v3(high, base);
+ }
+
+ /* use original alpha */
+ low[3] = base[3];
+ med[3] = base[3];
+ high[3] = base[3];
+}
+
+static void draw_mesh_fancy_new(EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, ARegion *ar, View3D *v3d, RegionView3D *rv3d, Base *base,
+ const char dt, const unsigned char ob_wire_col[4], const short dflag, const bool other_obedit)
+{
+ if (dflag & (DRAW_PICKING | DRAW_CONSTCOLOR)) {
+ /* too complicated! use existing methods */
+ /* TODO: move this into a separate depth pre-pass */
+ draw_mesh_fancy(eval_ctx, scene, view_layer, ar, v3d, rv3d, base, dt, ob_wire_col, dflag);
+ return;
+ }
+
+#ifdef WITH_GAMEENGINE
+ Object *ob = (
+ (rv3d->rflag & RV3D_IS_GAME_ENGINE) ?
+ BKE_object_lod_meshob_get(base->object, view_layer, eval_ctx->object_mode) : base->object);
+#else
+ Object *ob = base->object;
+#endif
+ Mesh *me = ob->data;
+ eWireDrawMode draw_wire = OBDRAW_WIRE_OFF; /* could be bool draw_wire_overlay */
+ bool no_edges, no_faces;
+ DerivedMesh *dm = mesh_get_derived_final(eval_ctx, scene, ob, scene->customdata_mask);
+ const bool is_obact = (ob == OBACT(view_layer));
+ int draw_flags = (is_obact && BKE_paint_select_face_test(ob, eval_ctx->object_mode)) ? DRAW_FACE_SELECT : 0;
+
+ if (!dm)
+ return;
+
+ const bool solid = dt >= OB_SOLID;
+ if (solid) {
+ DM_update_materials(dm, ob);
+ }
+
+ /* Check to draw dynamic paint colors (or weights from WeightVG modifiers).
+ * Note: Last "preview-active" modifier in stack will win! */
+ if (DM_get_loop_data_layer(dm, CD_PREVIEW_MLOOPCOL) && modifiers_isPreview(ob))
+ draw_flags |= DRAW_MODIFIERS_PREVIEW;
+
+ /* Unwanted combination */
+ if (draw_flags & DRAW_FACE_SELECT) {
+ draw_wire = OBDRAW_WIRE_OFF;
+ }
+ else if (ob->dtx & OB_DRAWWIRE) {
+ draw_wire = OBDRAW_WIRE_ON;
+ }
+
+ /* check polys instead of tessfaces because of dyntopo where tessfaces don't exist */
+ if (dm->type == DM_TYPE_CCGDM) {
+ no_edges = !subsurf_has_edges(dm);
+ no_faces = !subsurf_has_faces(dm);
+ }
+ else {
+ no_edges = (dm->getNumEdges(dm) == 0);
+ no_faces = (dm->getNumPolys(dm) == 0);
+ }
+
+ if (solid) {
+ /* vertexpaint, faceselect wants this, but it doesnt work for shaded? */
+ glFrontFace((ob->transflag & OB_NEG_SCALE) ? GL_CW : GL_CCW);
+ }
+
+ if (dt == OB_BOUNDBOX) {
+ if (((v3d->flag2 & V3D_RENDER_OVERRIDE) && v3d->drawtype >= OB_WIRE) == 0)
+ draw_bounding_volume(ob, ob->boundtype, ob_wire_col);
+ }
+ else if ((no_faces && no_edges) ||
+ ((!is_obact || (eval_ctx->object_mode == OB_MODE_OBJECT)) && object_is_halo(scene, ob)))
+ {
+ glPointSize(1.5f);
+ // dm->drawVerts(dm);
+ // TODO: draw smooth round points as a batch
+ }
+ else if ((dt == OB_WIRE) || no_faces) {
+ draw_wire = OBDRAW_WIRE_ON;
+
+ /* enable depth for wireframes */
+ glEnable(GL_DEPTH_TEST);
+ glDepthFunc(GL_LESS);
+
+ glLineWidth(1.0f);
+
+#if 1 /* fancy wireframes */
+
+ Gwn_Batch *fancy_edges = DRW_mesh_batch_cache_get_fancy_edges(me);
+
+ if (rv3d->persp == RV3D_ORTHO) {
+ GWN_batch_program_set_builtin(fancy_edges, GPU_SHADER_EDGES_FRONT_BACK_ORTHO);
+ /* set eye vector, transformed to object coords */
+ float eye[3] = { 0.0f, 0.0f, 1.0f }; /* looking into the screen */
+ mul_m3_v3(gpuGetNormalMatrixInverse(NULL), eye);
+ GWN_batch_uniform_3fv(fancy_edges, "eye", eye);
+ }
+ else {
+ GWN_batch_program_set_builtin(fancy_edges, GPU_SHADER_EDGES_FRONT_BACK_PERSP);
+ }
+
+ float frontColor[4];
+ float backColor[4];
+ float outlineColor[4];
+ make_color_variations(ob_wire_col, backColor, frontColor, outlineColor, other_obedit);
+
+ GWN_batch_uniform_4fv(fancy_edges, "frontColor", frontColor);
+ GWN_batch_uniform_4fv(fancy_edges, "backColor", backColor);
+ GWN_batch_uniform_1b(fancy_edges, "drawFront", true);
+ GWN_batch_uniform_1b(fancy_edges, "drawBack", true); /* false here = backface cull */
+ GWN_batch_uniform_1b(fancy_edges, "drawSilhouette", false);
+
+ GWN_batch_draw(fancy_edges);
+
+ /* extra oomph for the silhouette contours */
+ glLineWidth(2.0f);
+ GWN_batch_program_use_begin(fancy_edges); /* hack to make the following uniforms stick */
+ GWN_batch_uniform_1b(fancy_edges, "drawFront", false);
+ GWN_batch_uniform_1b(fancy_edges, "drawBack", false);
+ GWN_batch_uniform_1b(fancy_edges, "drawSilhouette", true);
+ GWN_batch_uniform_4fv(fancy_edges, "silhouetteColor", outlineColor);
+
+ GWN_batch_draw(fancy_edges);
+
+#else /* simple wireframes */
+
+ Gwn_Batch *batch = MBC_get_all_edges(dm);
+ GWN_batch_program_set_builtin(batch, GPU_SHADER_3D_UNIFORM_COLOR);
+
+ float color[4];
+ rgba_uchar_to_float(color, ob_wire_col);
+
+ GWN_batch_uniform_4fv(batch, "color", color);
+
+ GWN_batch_draw(batch);
+#endif
+ }
+ else if (((is_obact && eval_ctx->object_mode & OB_MODE_TEXTURE_PAINT)) ||
+ check_object_draw_texture(scene, v3d, dt))
+ {
+ bool draw_loose = true;
+
+ if ((v3d->flag & V3D_SELECT_OUTLINE) &&
+ ((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) &&
+ (base->flag & BASE_SELECTED) &&
+ !(G.f & G_PICKSEL || (draw_flags & DRAW_FACE_SELECT)) &&
+ (draw_wire == OBDRAW_WIRE_OFF))
+ {
+ draw_mesh_object_outline_new(eval_ctx, v3d, rv3d, me, (ob == OBACT(view_layer)));
+ }
+
+ if (draw_glsl_material(eval_ctx, scene, view_layer, ob, v3d, dt) && !(draw_flags & DRAW_MODIFIERS_PREVIEW)) {
+ Paint *p;
+
+ glFrontFace((ob->transflag & OB_NEG_SCALE) ? GL_CW : GL_CCW);
+
+ if ((v3d->flag2 & V3D_SHOW_SOLID_MATCAP) && ob->sculpt &&
+ (p = BKE_paint_get_active(scene, view_layer, eval_ctx->object_mode)))
+ {
+ GPUVertexAttribs gattribs;
+ float planes[4][4];
+ float (*fpl)[4] = NULL;
+ const bool fast = (p->flags & PAINT_FAST_NAVIGATE) && (rv3d->rflag & RV3D_NAVIGATING);
+
+ if (ob->sculpt->partial_redraw) {
+ if (ar->do_draw & RGN_DRAW_PARTIAL) {
+ ED_sculpt_redraw_planes_get(planes, ar, ob);
+ fpl = planes;
+ ob->sculpt->partial_redraw = 0;
+ }
+ }
+
+ GPU_object_material_bind(1, &gattribs);
+ dm->drawFacesSolid(dm, fpl, fast, NULL);
+ draw_loose = false;
+ }
+ else
+ dm->drawFacesGLSL(dm, GPU_object_material_bind);
+
+ GPU_object_material_unbind();
+
+ glFrontFace(GL_CCW);
+
+ if (draw_flags & DRAW_FACE_SELECT)
+ draw_mesh_face_select(rv3d, me, dm, false);
+ }
+ else {
+ draw_mesh_textured(scene, view_layer, v3d, rv3d, ob, dm, draw_flags);
+ }
+
+ if (draw_loose && !(draw_flags & DRAW_FACE_SELECT)) {
+ if ((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) {
+ if ((dflag & DRAW_CONSTCOLOR) == 0) {
+ glColor3ubv(ob_wire_col);
+ }
+ glLineWidth(1.0f);
+ dm->drawLooseEdges(dm);
+ }
+ }
+ }
+ else if (dt == OB_SOLID) {
+ if (draw_flags & DRAW_MODIFIERS_PREVIEW) {
+ /* for object selection draws no shade */
+ if (dflag & (DRAW_PICKING | DRAW_CONSTCOLOR)) {
+ /* TODO: draw basic faces with GPU_SHADER_3D_DEPTH_ONLY */
+ }
+ else {
+ const float specular[3] = {0.47f, 0.47f, 0.47f};
+
+ /* draw outline */
+ /* TODO: move this into a separate pass */
+ if ((v3d->flag & V3D_SELECT_OUTLINE) &&
+ ((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) &&
+ (base->flag & BASE_SELECTED) &&
+ (draw_wire == OBDRAW_WIRE_OFF) &&
+ (ob->sculpt == NULL))
+ {
+ draw_mesh_object_outline_new(eval_ctx, v3d, rv3d, me, (ob == OBACT(view_layer)));
+ }
+
+ /* materials arent compatible with vertex colors */
+ GPU_end_object_materials();
+
+ /* set default specular */
+ GPU_basic_shader_colors(NULL, specular, 35, 1.0f);
+ GPU_basic_shader_bind(GPU_SHADER_LIGHTING | GPU_SHADER_USE_COLOR);
+
+ dm->drawMappedFaces(dm, NULL, NULL, NULL, NULL, DM_DRAW_USE_COLORS | DM_DRAW_NEED_NORMALS);
+
+ GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
+ }
+ }
+ else {
+ Paint *p;
+
+ if ((v3d->flag & V3D_SELECT_OUTLINE) &&
+ ((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) &&
+ (base->flag & BASE_SELECTED) &&
+ (draw_wire == OBDRAW_WIRE_OFF) &&
+ (ob->sculpt == NULL))
+ {
+ /* TODO: move this into a separate pass */
+ draw_mesh_object_outline_new(eval_ctx, v3d, rv3d, me, (ob == OBACT(view_layer)));
+ }
+
+ glFrontFace((ob->transflag & OB_NEG_SCALE) ? GL_CW : GL_CCW);
+
+ if (ob->sculpt && (p = BKE_paint_get_active(scene, view_layer, eval_ctx->object_mode))) {
+ float planes[4][4];
+ float (*fpl)[4] = NULL;
+ const bool fast = (p->flags & PAINT_FAST_NAVIGATE) && (rv3d->rflag & RV3D_NAVIGATING);
+
+ if (ob->sculpt->partial_redraw) {
+ if (ar->do_draw & RGN_DRAW_PARTIAL) {
+ ED_sculpt_redraw_planes_get(planes, ar, ob);
+ fpl = planes;
+ ob->sculpt->partial_redraw = 0;
+ }
+ }
+
+ dm->drawFacesSolid(dm, fpl, fast, GPU_object_material_bind);
+ }
+ else
+ dm->drawFacesSolid(dm, NULL, 0, GPU_object_material_bind);
+
+ glFrontFace(GL_CCW);
+
+ GPU_object_material_unbind();
+
+ if (!ob->sculpt && (v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) {
+ if ((dflag & DRAW_CONSTCOLOR) == 0) {
+ glColor3ubv(ob_wire_col);
+ }
+ glLineWidth(1.0f);
+ dm->drawLooseEdges(dm);
+ }
+ }
+ }
+ else if (dt == OB_PAINT) {
+ draw_mesh_paint(eval_ctx, v3d, rv3d, ob, dm, draw_flags);
+
+ /* since we already draw wire as wp guide, don't draw over the top */
+ draw_wire = OBDRAW_WIRE_OFF;
+ }
+
+ if ((draw_wire != OBDRAW_WIRE_OFF) && /* draw extra wire */
+ /* when overriding with render only, don't bother */
+ (((v3d->flag2 & V3D_RENDER_OVERRIDE) && v3d->drawtype >= OB_SOLID) == 0)) // <-- is this "== 0" in the right spot???
+ {
+ /* When using wireframe object draw in particle edit mode
+ * the mesh gets in the way of seeing the particles, fade the wire color
+ * with the background. */
+
+ if ((dflag & DRAW_CONSTCOLOR) == 0) {
+ /* TODO:
+ * Batch_UniformColor4ubv(ob_wire_col);
+ */
+ }
+
+ /* If drawing wire and drawtype is not OB_WIRE then we are
+ * overlaying the wires.
+ *
+ * No need for polygon offset because new technique is AWESOME.
+ */
+#if 0
+ glLineWidth(1.0f);
+ dm->drawEdges(dm, ((dt == OB_WIRE) || no_faces), (ob->dtx & OB_DRAW_ALL_EDGES) != 0);
+#else
+ /* something */
+#endif
+ }
+
+#if 0 // (merwin) what is this for?
+ if (is_obact && BKE_paint_select_vert_test(ob)) {
+ const bool use_depth = (v3d->flag & V3D_ZBUF_SELECT) != 0;
+ glPointSize(UI_GetThemeValuef(TH_VERTEX_SIZE));
+
+ if (!use_depth) glDisable(GL_DEPTH_TEST);
+ else ED_view3d_polygon_offset(rv3d, 1.0);
+ drawSelectedVertices(dm, ob->data);
+ if (!use_depth) glEnable(GL_DEPTH_TEST);
+ else ED_view3d_polygon_offset(rv3d, 0.0);
+ }
+#endif
+
+ dm->release(dm);
+}
+
+static bool UNUSED_FUNCTION(draw_mesh_object_new)(const bContext *C, Scene *scene, ViewLayer *view_layer, ARegion *ar, View3D *v3d, RegionView3D *rv3d, Base *base,
+ const char dt, const unsigned char ob_wire_col[4], const short dflag)
+{
+ EvaluationContext eval_ctx;
+ Object *ob = base->object;
+ Object *obedit = scene->obedit;
+ Mesh *me = ob->data;
+ BMEditMesh *em = me->edit_btmesh;
+ bool do_alpha_after = false, drawlinked = false, retval = false;
+
+ CTX_data_eval_ctx(C, &eval_ctx);
+
+ if (v3d->flag2 & V3D_RENDER_SHADOW) {
+ /* TODO: handle shadow pass separately */
+ return true;
+ }
+
+ if (obedit && ob != obedit && ob->data == obedit->data) {
+ if (BKE_key_from_object(ob) || BKE_key_from_object(obedit)) {}
+ else if (ob->modifiers.first || obedit->modifiers.first) {}
+ else drawlinked = true;
+ }
+
+ /* backface culling */
+ const bool solid = dt > OB_WIRE;
+ const bool cullBackface = solid && (v3d->flag2 & V3D_BACKFACE_CULLING);
+ if (cullBackface) {
+ glEnable(GL_CULL_FACE);
+ glCullFace(GL_BACK);
+ }
+
+ if (ob == obedit || drawlinked) {
+ DerivedMesh *finalDM, *cageDM;
+
+ if (obedit != ob) {
+ /* linked to the edit object */
+ finalDM = cageDM = editbmesh_get_derived_base(
+ ob, em, scene->customdata_mask);
+ }
+ else {
+ cageDM = editbmesh_get_derived_cage_and_final(
+ &eval_ctx, scene, ob, em, scene->customdata_mask,
+ &finalDM);
+ }
+
+ const bool use_material = solid && ((me->drawflag & ME_DRAWEIGHT) == 0);
+
+#if 0 // why update if not being used?
+ DM_update_materials(finalDM, ob);
+ if (cageDM != finalDM) {
+ DM_update_materials(cageDM, ob);
+ }
+#endif // moved to below
+
+ if (use_material) {
+ DM_update_materials(finalDM, ob);
+ if (cageDM != finalDM) {
+ DM_update_materials(cageDM, ob);
+ }
+
+ const bool glsl = draw_glsl_material(&eval_ctx, scene, view_layer, ob, v3d, dt);
+
+ GPU_begin_object_materials(v3d, rv3d, scene, view_layer, ob, glsl, eval_ctx.object_mode, NULL);
+ }
+
+ draw_em_fancy_new(scene, ar, v3d, ob, me, em, cageDM, finalDM, dt);
+
+ if (use_material) {
+ GPU_end_object_materials();
+ }
+
+ if (obedit != ob)
+ finalDM->release(finalDM);
+ }
+ else {
+ /* ob->bb was set by derived mesh system, do NULL check just to be sure */
+ if (me->totpoly <= 4 || (!ob->bb || ED_view3d_boundbox_clip(rv3d, ob->bb))) {
+ if (solid) {
+ const bool glsl = draw_glsl_material(&eval_ctx, scene, view_layer, ob, v3d, dt);
+
+ if (dt == OB_SOLID || glsl) {
+ const bool check_alpha = check_alpha_pass(&eval_ctx, base);
+ GPU_begin_object_materials(
+ v3d, rv3d, scene, view_layer, ob,
+ eval_ctx.object_mode, glsl, (check_alpha) ? &do_alpha_after : NULL);
+ }
+ }
+
+ const bool other_obedit = obedit && (obedit != ob);
+
+ draw_mesh_fancy_new(&eval_ctx, scene, view_layer, ar, v3d, rv3d, base, dt, ob_wire_col, dflag, other_obedit);
+
+ GPU_end_object_materials();
+
+ if (me->totvert == 0) retval = true;
+ }
+ }
+
+ if (cullBackface)
+ glDisable(GL_CULL_FACE);
+
+ return retval;
+}
+
/* ************** DRAW DISPLIST ****************** */
+static void drawDispListVerts(Gwn_PrimType prim_type, const void *data, unsigned int vert_ct, const unsigned char wire_col[3])
+{
+ Gwn_VertFormat format = {0};
+ unsigned int pos_id = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, vert_ct);
+
+ GWN_vertbuf_attr_fill(vbo, pos_id, data);
+
+ Gwn_Batch *batch = GWN_batch_create_ex(prim_type, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ GWN_batch_program_set_builtin(batch, GPU_SHADER_3D_UNIFORM_COLOR);
+ if (wire_col) {
+ GWN_batch_uniform_4f(batch, "color", wire_col[0] / 255.0f, wire_col[1] / 255.0f, wire_col[2] / 255.0f, 1.0f);
+ }
+ GWN_batch_draw(batch);
+ GWN_batch_discard(batch);
+}
+
+/* convert dispList with elem indices to batch, only support triangles and quads
+ * XXX : This is a huge perf issue. We should cache the resulting batches inside the object instead.
+ * But new viewport will do it anyway
+ * TODO implement flat drawing */
+static void drawDispListElem(
+ bool quads, bool UNUSED(smooth), bool ndata_is_single,
+ const float *data, const float *ndata, unsigned int data_len,
+ const int *elem, unsigned int elem_len, const unsigned char wire_col[3])
+{
+ Gwn_VertFormat format = {0};
+ int i;
+ const int *idx = elem;
+ unsigned int pos_id, nor_id;
+
+ pos_id = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ if (ndata) {
+ if (ndata_is_single) {
+ /* pass */
+ }
+ else {
+ nor_id = GWN_vertformat_attr_add(&format, "nor", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+ }
+
+ Gwn_IndexBufBuilder elb;
+ GWN_indexbuf_init(&elb, GWN_PRIM_TRIS, (quads) ? elem_len * 2 : elem_len, 0xffffffff);
+
+ if (quads) {
+ for (i = elem_len; i; --i, idx += 4) {
+ GWN_indexbuf_add_tri_verts(&elb, idx[0], idx[1], idx[2]);
+ GWN_indexbuf_add_tri_verts(&elb, idx[0], idx[2], idx[3]);
+ }
+ }
+ else {
+ for (i = elem_len; i; --i, idx += 3) {
+ GWN_indexbuf_add_tri_verts(&elb, idx[0], idx[1], idx[2]);
+ }
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, data_len);
+
+ GWN_vertbuf_attr_fill(vbo, pos_id, data);
+
+ if (ndata) {
+ if (ndata_is_single) {
+ /* TODO: something like glNormal for a single value */
+ }
+ else {
+ GWN_vertbuf_attr_fill(vbo, nor_id, ndata);
+ }
+ }
+
+ Gwn_Batch *batch = GWN_batch_create_ex(
+ GWN_PRIM_TRIS, vbo, GWN_indexbuf_build(&elb), GWN_BATCH_OWNS_VBO | GWN_BATCH_OWNS_INDEX);
+ GWN_batch_program_set_builtin(batch, GPU_SHADER_SIMPLE_LIGHTING);
+ if (wire_col) {
+ GWN_batch_uniform_4f(batch, "color", wire_col[0] / 255.0f, wire_col[1] / 255.0f, wire_col[2] / 255.0f, 1.0f);
+ }
+ GWN_batch_uniform_4f(batch, "color", 0.8f, 0.8f, 0.8f, 1.0f);
+ GWN_batch_uniform_3f(batch, "light", 0.0f, 0.0f, 1.0f);
+ GWN_batch_draw(batch);
+ GWN_batch_discard(batch);
+}
/**
* \param dl_type_mask Only draw types matching this mask.
* \return true when nothing was drawn
*/
-static bool drawDispListwire_ex(ListBase *dlbase, unsigned int dl_type_mask)
+static bool drawDispListwire_ex(ListBase *dlbase, unsigned int dl_type_mask, const unsigned char wire_col[3])
{
if (dlbase == NULL) return true;
- glEnableClientState(GL_VERTEX_ARRAY);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
for (DispList *dl = dlbase->first; dl; dl = dl->next) {
@@ -4355,83 +5250,76 @@ static bool drawDispListwire_ex(ListBase *dlbase, unsigned int dl_type_mask)
if ((dl_type_mask & (1 << dl->type)) == 0) {
continue;
}
-
+
const float *data = dl->verts;
int parts;
switch (dl->type) {
case DL_SEGM:
-
- glVertexPointer(3, GL_FLOAT, 0, data);
-
for (parts = 0; parts < dl->parts; parts++)
- glDrawArrays(GL_LINE_STRIP, parts * dl->nr, dl->nr);
-
+ drawDispListVerts(GWN_PRIM_LINE_STRIP, data + (parts * dl->nr * 3), dl->nr, wire_col);
break;
- case DL_POLY:
-
- glVertexPointer(3, GL_FLOAT, 0, data);
+ case DL_POLY:
for (parts = 0; parts < dl->parts; parts++)
- glDrawArrays(GL_LINE_LOOP, parts * dl->nr, dl->nr);
-
+ drawDispListVerts(GWN_PRIM_LINE_LOOP, data + (parts * dl->nr * 3), dl->nr, wire_col);
break;
- case DL_SURF:
-
- glVertexPointer(3, GL_FLOAT, 0, data);
+ case DL_SURF:
for (parts = 0; parts < dl->parts; parts++) {
if (dl->flag & DL_CYCL_U)
- glDrawArrays(GL_LINE_LOOP, parts * dl->nr, dl->nr);
+ drawDispListVerts(GWN_PRIM_LINE_LOOP, data + (parts * dl->nr * 3), dl->nr, wire_col);
else
- glDrawArrays(GL_LINE_STRIP, parts * dl->nr, dl->nr);
+ drawDispListVerts(GWN_PRIM_LINE_STRIP, data + (parts * dl->nr * 3), dl->nr, wire_col);
}
+ float *data_aligned = MEM_mallocN(sizeof(float) * 3 * dl->parts, "aligned data");
for (int nr = 0; nr < dl->nr; nr++) {
int ofs = 3 * dl->nr;
+ int idx = 0;
data = (dl->verts) + 3 * nr;
parts = dl->parts;
- if (dl->flag & DL_CYCL_V) glBegin(GL_LINE_LOOP);
- else glBegin(GL_LINE_STRIP);
-
while (parts--) {
- glVertex3fv(data);
+ copy_v3_v3(data_aligned + idx, data);
data += ofs;
+ idx += 3;
}
- glEnd();
-#if 0
- /* (ton) this code crashes for me when resolv is 86 or higher... no clue */
- glVertexPointer(3, GL_FLOAT, sizeof(float) * 3 * dl->nr, data + 3 * nr);
- if (dl->flag & DL_CYCL_V)
- glDrawArrays(GL_LINE_LOOP, 0, dl->parts);
- else
- glDrawArrays(GL_LINE_STRIP, 0, dl->parts);
-#endif
+ if (dl->flag & DL_CYCL_V)
+ drawDispListVerts(GWN_PRIM_LINE_LOOP, data_aligned, dl->parts, wire_col);
+ else
+ drawDispListVerts(GWN_PRIM_LINE_STRIP, data_aligned, dl->parts, wire_col);
}
+
+ if (data_aligned)
+ MEM_freeN(data_aligned);
+
break;
case DL_INDEX3:
- glVertexPointer(3, GL_FLOAT, 0, dl->verts);
- glDrawElements(GL_TRIANGLES, 3 * dl->parts, GL_UNSIGNED_INT, dl->index);
+ drawDispListElem(
+ false, true, false,
+ dl->verts, NULL, dl->nr,
+ dl->index, dl->parts, wire_col);
break;
case DL_INDEX4:
- glVertexPointer(3, GL_FLOAT, 0, dl->verts);
- glDrawElements(GL_QUADS, 4 * dl->parts, GL_UNSIGNED_INT, dl->index);
+ drawDispListElem(
+ true, true, false,
+ dl->verts, NULL, dl->nr,
+ dl->index, dl->parts, wire_col);
break;
}
}
- glDisableClientState(GL_VERTEX_ARRAY);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
return false;
}
-static bool drawDispListwire(ListBase *dlbase, const short ob_type)
+static bool drawDispListwire(ListBase *dlbase, const short ob_type, const unsigned char wire_col[3])
{
unsigned int dl_mask = 0xffffffff;
@@ -4440,27 +5328,25 @@ static bool drawDispListwire(ListBase *dlbase, const short ob_type)
dl_mask &= ~((1 << DL_INDEX3) | (1 << DL_INDEX4));
}
- return drawDispListwire_ex(dlbase, dl_mask);
+ return drawDispListwire_ex(dlbase, dl_mask, wire_col);
}
static bool index3_nors_incr = true;
-static void drawDispListsolid(ListBase *lb, Object *ob, const short dflag,
+static void drawDispListsolid(ListBase *lb, Object *ob, const short UNUSED(dflag),
const unsigned char ob_wire_col[4], const bool use_glsl)
{
GPUVertexAttribs gattribs;
if (lb == NULL) return;
- glEnableClientState(GL_VERTEX_ARRAY);
-
/* track current material, -1 for none (needed for lines) */
short col = -1;
DispList *dl = lb->first;
while (dl) {
const float *data = dl->verts;
- const float *ndata = dl->nors;
+ //const float *ndata = dl->nors;
switch (dl->type) {
case DL_SEGM:
@@ -4470,15 +5356,7 @@ static void drawDispListsolid(ListBase *lb, Object *ob, const short dflag,
col = -1;
}
- if ((dflag & DRAW_CONSTCOLOR) == 0)
- glColor3ubv(ob_wire_col);
-
- // glVertexPointer(3, GL_FLOAT, 0, dl->verts);
- // glDrawArrays(GL_LINE_STRIP, 0, dl->nr);
- glBegin(GL_LINE_STRIP);
- for (int nr = dl->nr; nr; nr--, data += 3)
- glVertex3fv(data);
- glEnd();
+ drawDispListVerts(GWN_PRIM_LINE_STRIP, data, dl->nr, ob_wire_col);
}
break;
case DL_POLY:
@@ -4488,14 +5366,7 @@ static void drawDispListsolid(ListBase *lb, Object *ob, const short dflag,
col = -1;
}
- /* for some reason glDrawArrays crashes here in half of the platforms (not osx) */
- //glVertexPointer(3, GL_FLOAT, 0, dl->verts);
- //glDrawArrays(GL_LINE_LOOP, 0, dl->nr);
-
- glBegin(GL_LINE_LOOP);
- for (int nr = dl->nr; nr; nr--, data += 3)
- glVertex3fv(data);
- glEnd();
+ drawDispListVerts(GWN_PRIM_LINE_LOOP, data, dl->nr, ob_wire_col);
}
break;
case DL_SURF:
@@ -4505,15 +5376,12 @@ static void drawDispListsolid(ListBase *lb, Object *ob, const short dflag,
GPU_object_material_bind(dl->col + 1, use_glsl ? &gattribs : NULL);
col = dl->col;
}
- /* FLAT/SMOOTH shading for surfaces */
- glShadeModel((dl->rt & CU_SMOOTH) ? GL_SMOOTH : GL_FLAT);
+ const unsigned int verts_len = dl->nr * dl->parts;
- glEnableClientState(GL_NORMAL_ARRAY);
- glVertexPointer(3, GL_FLOAT, 0, dl->verts);
- glNormalPointer(GL_FLOAT, 0, dl->nors);
- glDrawElements(GL_QUADS, 4 * dl->totindex, GL_UNSIGNED_INT, dl->index);
- glDisableClientState(GL_NORMAL_ARRAY);
- glShadeModel(GL_SMOOTH);
+ drawDispListElem(
+ true, (dl->rt & CU_SMOOTH) != 0, false,
+ dl->verts, dl->nors, verts_len,
+ dl->index, dl->totindex, ob_wire_col);
}
break;
@@ -4523,8 +5391,7 @@ static void drawDispListsolid(ListBase *lb, Object *ob, const short dflag,
col = dl->col;
}
- glVertexPointer(3, GL_FLOAT, 0, dl->verts);
-
+#if 0
/* for polys only one normal needed */
if (index3_nors_incr) {
glEnableClientState(GL_NORMAL_ARRAY);
@@ -4532,11 +5399,17 @@ static void drawDispListsolid(ListBase *lb, Object *ob, const short dflag,
}
else
glNormal3fv(ndata);
+#endif
+ /* special case, 'nors' is a single value */
+ drawDispListElem(
+ false, (dl->rt & CU_SMOOTH) != 0, true,
+ dl->verts, dl->nors, dl->nr,
+ dl->index, dl->parts, ob_wire_col);
- glDrawElements(GL_TRIANGLES, 3 * dl->parts, GL_UNSIGNED_INT, dl->index);
-
+#if 0
if (index3_nors_incr)
glDisableClientState(GL_NORMAL_ARRAY);
+#endif
break;
@@ -4546,18 +5419,16 @@ static void drawDispListsolid(ListBase *lb, Object *ob, const short dflag,
col = dl->col;
}
- glEnableClientState(GL_NORMAL_ARRAY);
- glVertexPointer(3, GL_FLOAT, 0, dl->verts);
- glNormalPointer(GL_FLOAT, 0, dl->nors);
- glDrawElements(GL_QUADS, 4 * dl->parts, GL_UNSIGNED_INT, dl->index);
- glDisableClientState(GL_NORMAL_ARRAY);
+ drawDispListElem(
+ true, true, false,
+ dl->verts, dl->nors, dl->nr,
+ dl->index, dl->parts, ob_wire_col);
break;
}
dl = dl->next;
}
- glDisableClientState(GL_VERTEX_ARRAY);
glFrontFace(GL_CCW);
if (col != -1) {
@@ -4572,7 +5443,9 @@ static void drawCurveDMWired(Object *ob)
}
/* return true when nothing was drawn */
-static bool drawCurveDerivedMesh(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, const char dt)
+static bool drawCurveDerivedMesh(
+ const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, View3D *v3d, RegionView3D *rv3d,
+ Base *base, const char dt)
{
Object *ob = base->object;
DerivedMesh *dm = ob->derivedFinal;
@@ -4586,8 +5459,10 @@ static bool drawCurveDerivedMesh(Scene *scene, View3D *v3d, RegionView3D *rv3d,
glFrontFace((ob->transflag & OB_NEG_SCALE) ? GL_CW : GL_CCW);
if (dt > OB_WIRE && dm->getNumPolys(dm)) {
- bool glsl = draw_glsl_material(scene, ob, v3d, dt);
- GPU_begin_object_materials(v3d, rv3d, scene, ob, glsl, NULL);
+ bool glsl = draw_glsl_material(eval_ctx, scene, view_layer, ob, v3d, dt);
+ GPU_begin_object_materials(
+ v3d, rv3d, scene, view_layer, ob,
+ eval_ctx->object_mode, glsl, NULL);
if (!glsl)
dm->drawFacesSolid(dm, NULL, 0, GPU_object_material_bind);
@@ -4608,8 +5483,9 @@ static bool drawCurveDerivedMesh(Scene *scene, View3D *v3d, RegionView3D *rv3d,
* Only called by #drawDispList
* \return true when nothing was drawn
*/
-static bool drawDispList_nobackface(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base,
- const char dt, const short dflag, const unsigned char ob_wire_col[4])
+static bool drawDispList_nobackface(
+ const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, View3D *v3d, RegionView3D *rv3d,
+ Base *base, const char dt, const short dflag, const unsigned char ob_wire_col[4])
{
Object *ob = base->object;
ListBase *lb = NULL;
@@ -4638,10 +5514,10 @@ static bool drawDispList_nobackface(Scene *scene, View3D *v3d, RegionView3D *rv3
if (!render_only) {
/* when we have faces, only draw loose-wire */
if (has_faces) {
- drawDispListwire_ex(lb, (1 << DL_SEGM));
+ drawDispListwire_ex(lb, (1 << DL_SEGM), ob_wire_col);
}
else {
- drawDispListwire(lb, ob->type);
+ drawDispListwire(lb, ob->type, ob_wire_col);
}
}
@@ -4649,26 +5525,26 @@ static bool drawDispList_nobackface(Scene *scene, View3D *v3d, RegionView3D *rv3
/* pass */
}
else {
- if (draw_glsl_material(scene, ob, v3d, dt)) {
- GPU_begin_object_materials(v3d, rv3d, scene, ob, 1, NULL);
+ if (draw_glsl_material(eval_ctx, scene, view_layer, ob, v3d, dt)) {
+ GPU_begin_object_materials(v3d, rv3d, scene, view_layer, ob, 1, eval_ctx->object_mode, NULL);
drawDispListsolid(lb, ob, dflag, ob_wire_col, true);
GPU_end_object_materials();
}
else {
- GPU_begin_object_materials(v3d, rv3d, scene, ob, 0, NULL);
+ GPU_begin_object_materials(v3d, rv3d, scene, view_layer, ob, 0, eval_ctx->object_mode, NULL);
drawDispListsolid(lb, ob, dflag, ob_wire_col, false);
GPU_end_object_materials();
}
if (cu->editnurb && cu->bevobj == NULL && cu->taperobj == NULL && cu->ext1 == 0.0f && cu->ext2 == 0.0f) {
- cpack(0);
- drawDispListwire(lb, ob->type);
+ unsigned char col[4] = {0, 0, 0, 0};
+ drawDispListwire(lb, ob->type, col);
}
}
index3_nors_incr = true;
}
else {
if (!render_only || BKE_displist_has_faces(lb)) {
- return drawDispListwire(lb, ob->type);
+ return drawDispListwire(lb, ob->type, ob_wire_col);
}
}
break;
@@ -4684,19 +5560,19 @@ static bool drawDispList_nobackface(Scene *scene, View3D *v3d, RegionView3D *rv3
if (dl->nors == NULL) BKE_displist_normals_add(lb);
- if (draw_glsl_material(scene, ob, v3d, dt)) {
- GPU_begin_object_materials(v3d, rv3d, scene, ob, 1, NULL);
+ if (draw_glsl_material(eval_ctx, scene, view_layer, ob, v3d, dt)) {
+ GPU_begin_object_materials(v3d, rv3d, scene, view_layer, ob, 1, eval_ctx->object_mode, NULL);
drawDispListsolid(lb, ob, dflag, ob_wire_col, true);
GPU_end_object_materials();
}
else {
- GPU_begin_object_materials(v3d, rv3d, scene, ob, 0, NULL);
+ GPU_begin_object_materials(v3d, rv3d, scene, view_layer, ob, 0, eval_ctx->object_mode, NULL);
drawDispListsolid(lb, ob, dflag, ob_wire_col, false);
GPU_end_object_materials();
}
}
else {
- return drawDispListwire(lb, ob->type);
+ return drawDispListwire(lb, ob->type, ob_wire_col);
}
break;
case OB_MBALL:
@@ -4709,19 +5585,19 @@ static bool drawDispList_nobackface(Scene *scene, View3D *v3d, RegionView3D *rv3
if (solid) {
- if (draw_glsl_material(scene, ob, v3d, dt)) {
- GPU_begin_object_materials(v3d, rv3d, scene, ob, 1, NULL);
+ if (draw_glsl_material(eval_ctx, scene, view_layer, ob, v3d, dt)) {
+ GPU_begin_object_materials(v3d, rv3d, scene, view_layer, ob, 1, eval_ctx->object_mode, NULL);
drawDispListsolid(lb, ob, dflag, ob_wire_col, true);
GPU_end_object_materials();
}
else {
- GPU_begin_object_materials(v3d, rv3d, scene, ob, 0, NULL);
+ GPU_begin_object_materials(v3d, rv3d, scene, view_layer, ob, 0, eval_ctx->object_mode, NULL);
drawDispListsolid(lb, ob, dflag, ob_wire_col, false);
GPU_end_object_materials();
}
}
else {
- return drawDispListwire(lb, ob->type);
+ return drawDispListwire(lb, ob->type, ob_wire_col);
}
}
break;
@@ -4729,8 +5605,9 @@ static bool drawDispList_nobackface(Scene *scene, View3D *v3d, RegionView3D *rv3
return false;
}
-static bool drawDispList(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base,
- const char dt, const short dflag, const unsigned char ob_wire_col[4])
+static bool drawDispList(
+ const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, View3D *v3d, RegionView3D *rv3d, Base *base,
+ const char dt, const short dflag, const unsigned char ob_wire_col[4])
{
bool retval;
@@ -4742,10 +5619,10 @@ static bool drawDispList(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *ba
}
#ifdef SEQUENCER_DAG_WORKAROUND
- ensure_curve_cache(scene, base->object);
+ ensure_curve_cache(eval_ctx, scene, base->object);
#endif
- if (drawCurveDerivedMesh(scene, v3d, rv3d, base, dt) == false) {
+ if (drawCurveDerivedMesh(eval_ctx, scene, view_layer, v3d, rv3d, base, dt) == false) {
retval = false;
}
else {
@@ -4761,7 +5638,7 @@ static bool drawDispList(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *ba
glFrontFace(mode);
- retval = drawDispList_nobackface(scene, v3d, rv3d, base, dt, dflag, ob_wire_col);
+ retval = drawDispList_nobackface(eval_ctx, scene, view_layer, v3d, rv3d, base, dt, dflag, ob_wire_col);
if (mode != GL_CCW) {
glFrontFace(GL_CCW);
@@ -4776,16 +5653,63 @@ static bool drawDispList(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *ba
}
/* *********** drawing for particles ************* */
-static void draw_particle_arrays(int draw_as, int totpoint, int ob_dt, int select)
+/* stride : offset size in bytes
+ * col[4] : the color to use when *color is NULL, can be also NULL */
+static void draw_vertex_array(Gwn_PrimType prim_type, const float *vert, const float *nor, const float *color, int stride, int vert_ct, float col[4])
+{
+ Gwn_VertFormat format = {0};
+ unsigned int pos_id, nor_id, col_id;
+ pos_id = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ if (nor) nor_id = GWN_vertformat_attr_add(&format, "nor", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ if (color) col_id = GWN_vertformat_attr_add(&format, "color", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, vert_ct);
+
+ if (stride == 0) {
+ GWN_vertbuf_attr_fill(vbo, pos_id, vert);
+ if (nor) GWN_vertbuf_attr_fill(vbo, nor_id, nor);
+ if (color) GWN_vertbuf_attr_fill(vbo, col_id, color);
+ }
+ else {
+ GWN_vertbuf_attr_fill_stride(vbo, pos_id, stride, vert);
+ if (nor) GWN_vertbuf_attr_fill_stride(vbo, nor_id, stride, nor);
+ if (color) GWN_vertbuf_attr_fill_stride(vbo, col_id, stride, color);
+ }
+
+ Gwn_Batch *batch = GWN_batch_create_ex(prim_type, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ if (nor && color) {
+ GWN_batch_program_set_builtin(batch, GPU_SHADER_SIMPLE_LIGHTING_SMOOTH_COLOR);
+ GWN_batch_uniform_3f(batch, "light", 0.0f, 0.0f, 1.0f);
+ }
+ else if (nor) {
+ GWN_batch_program_set_builtin(batch, GPU_SHADER_SIMPLE_LIGHTING);
+ GWN_batch_uniform_3f(batch, "light", 0.0f, 0.0f, 1.0f);
+ if (col) GWN_batch_uniform_4fv(batch, "color", col);
+ }
+ else if (color) {
+ GWN_batch_program_set_builtin(batch, GPU_SHADER_3D_SMOOTH_COLOR);
+ }
+ else {
+ GWN_batch_program_set_builtin(batch, GPU_SHADER_3D_UNIFORM_COLOR);
+ if (col) GWN_batch_uniform_4fv(batch, "color", col);
+ }
+ GWN_batch_draw(batch);
+ GWN_batch_discard(batch);
+}
+
+static void draw_particle_arrays_new(int draw_as, int ob_dt, int select,
+ const float *vert, const float *nor, const float *color,
+ int totpoint, float col[4])
{
/* draw created data arrays */
switch (draw_as) {
case PART_DRAW_AXIS:
case PART_DRAW_CROSS:
- glDrawArrays(GL_LINES, 0, 6 * totpoint);
+ draw_vertex_array(GWN_PRIM_LINES, vert, nor, color, 0, 6 * totpoint, col);
break;
case PART_DRAW_LINE:
- glDrawArrays(GL_LINES, 0, 2 * totpoint);
+ draw_vertex_array(GWN_PRIM_LINES, vert, nor, color, 0, 2 * totpoint, col);
break;
case PART_DRAW_BB:
if (ob_dt <= OB_WIRE || select)
@@ -4793,15 +5717,16 @@ static void draw_particle_arrays(int draw_as, int totpoint, int ob_dt, int selec
else
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
- glDrawArrays(GL_QUADS, 0, 4 * totpoint);
+ draw_vertex_array(GWN_PRIM_TRIS, vert, nor, color, 0, 6 * totpoint, col);
break;
default:
- glDrawArrays(GL_POINTS, 0, totpoint);
+ draw_vertex_array(GWN_PRIM_POINTS, vert, nor, color, 0, totpoint, col);
break;
}
}
static void draw_particle(ParticleKey *state, int draw_as, short draw, float pixsize,
- float imat[4][4], const float draw_line[2], ParticleBillboardData *bb, ParticleDrawData *pdd)
+ float imat[4][4], const float draw_line[2], ParticleBillboardData *bb, ParticleDrawData *pdd,
+ unsigned int pos)
{
float vec[3], vec2[3];
float *vd = NULL;
@@ -4911,24 +5836,19 @@ static void draw_particle(ParticleKey *state, int draw_as, short draw, float pix
}
case PART_DRAW_CIRC:
{
- drawcircball(GL_LINE_LOOP, state->co, pixsize, imat);
+ imm_drawcircball(state->co, pixsize, imat, pos);
break;
}
case PART_DRAW_BB:
{
float xvec[3], yvec[3], zvec[3], bb_center[3];
- if (cd) {
- cd[0] = cd[3] = cd[6] = cd[9] = ma_col[0];
- cd[1] = cd[4] = cd[7] = cd[10] = ma_col[1];
- cd[2] = cd[5] = cd[8] = cd[11] = ma_col[2];
- pdd->cd += 12;
- }
copy_v3_v3(bb->vec, state->co);
copy_v3_v3(bb->vel, state->vel);
psys_make_billboard(bb, xvec, yvec, zvec, bb_center);
-
+
+ /* First tri */
add_v3_v3v3(pdd->vd, bb_center, xvec);
add_v3_v3(pdd->vd, yvec); pdd->vd += 3;
@@ -4938,13 +5858,24 @@ static void draw_particle(ParticleKey *state, int draw_as, short draw, float pix
sub_v3_v3v3(pdd->vd, bb_center, xvec);
sub_v3_v3v3(pdd->vd, pdd->vd, yvec); pdd->vd += 3;
+ /* Second tri */
+ add_v3_v3v3(pdd->vd, bb_center, xvec);
+ add_v3_v3(pdd->vd, yvec); pdd->vd += 3;
+
+ sub_v3_v3v3(pdd->vd, bb_center, xvec);
+ sub_v3_v3v3(pdd->vd, pdd->vd, yvec); pdd->vd += 3;
+
add_v3_v3v3(pdd->vd, bb_center, xvec);
sub_v3_v3v3(pdd->vd, pdd->vd, yvec); pdd->vd += 3;
- copy_v3_v3(pdd->nd, zvec); pdd->nd += 3;
- copy_v3_v3(pdd->nd, zvec); pdd->nd += 3;
- copy_v3_v3(pdd->nd, zvec); pdd->nd += 3;
- copy_v3_v3(pdd->nd, zvec); pdd->nd += 3;
+ if (cd) {
+ for (int i = 0; i < 6; i++, cd += 3, pdd->cd += 3) {
+ copy_v3_v3(cd, ma_col);
+ }
+ }
+ for (int i = 0; i < 6; i++, pdd->nd += 3) {
+ copy_v3_v3(pdd->nd, zvec);
+ }
break;
}
}
@@ -4952,7 +5883,8 @@ static void draw_particle(ParticleKey *state, int draw_as, short draw, float pix
static void draw_particle_data(ParticleSystem *psys, RegionView3D *rv3d,
ParticleKey *state, int draw_as,
float imat[4][4], ParticleBillboardData *bb, ParticleDrawData *pdd,
- const float ct, const float pa_size, const float r_tilt, const float pixsize_scale)
+ const float ct, const float pa_size, const float r_tilt, const float pixsize_scale,
+ unsigned int pos)
{
ParticleSettings *part = psys->part;
float pixsize;
@@ -4983,7 +5915,7 @@ static void draw_particle_data(ParticleSystem *psys, RegionView3D *rv3d,
pixsize = ED_view3d_pixel_size(rv3d, state->co) * pixsize_scale;
- draw_particle(state, draw_as, part->draw, pixsize, imat, part->draw_line, bb, pdd);
+ draw_particle(state, draw_as, part->draw, pixsize, imat, part->draw_line, bb, pdd, pos);
}
/* unified drawing of all new particle systems draw types except dupli ob & group
* mostly tries to use vertex arrays for speed
@@ -4996,9 +5928,10 @@ static void draw_particle_data(ParticleSystem *psys, RegionView3D *rv3d,
* 6. draw the arrays
* 7. clean up
*/
-static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv3d,
- Base *base, ParticleSystem *psys,
- const char ob_dt, const short dflag)
+static void draw_new_particle_system(
+ const EvaluationContext *eval_ctx, Scene *scene, View3D *v3d, RegionView3D *rv3d,
+ Base *base, ParticleSystem *psys,
+ const char ob_dt, const short dflag)
{
Object *ob = base->object;
ParticleEditSettings *pset = PE_settings(scene);
@@ -5016,10 +5949,11 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
float cfra;
float ma_col[3] = {0.0f, 0.0f, 0.0f};
int a, totpart, totpoint = 0, totve = 0, drawn, draw_as, totchild = 0;
- bool select = (ob->flag & SELECT) != 0, create_cdata = false, need_v = false;
+ bool select = (base->flag & BASE_SELECTED) != 0, create_cdata = false, need_v = false;
GLint polygonmode[2];
char numstr[32];
unsigned char tcol[4] = {0, 0, 0, 255};
+ unsigned int pos;
/* 1. */
if (part == NULL || !psys_check_enabled(ob, psys, G.is_rendering))
@@ -5028,7 +5962,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
if (pars == NULL) return;
/* don't draw normal paths in edit mode */
- if (psys_in_edit_mode(scene, psys) && (pset->flag & PE_DRAW_PART) == 0)
+ if (psys_in_edit_mode(eval_ctx, eval_ctx->view_layer, psys) && (pset->flag & PE_DRAW_PART) == 0)
return;
if (part->draw_as == PART_DRAW_REND)
@@ -5046,6 +5980,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
curvemapping_changed_all(psys->part->roughcurve);
/* 2. */
+ sim.eval_ctx = eval_ctx;
sim.scene = scene;
sim.ob = ob;
sim.psys = psys;
@@ -5081,16 +6016,12 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
copy_v3_v3(ma_col, &ma->r);
}
- if ((dflag & DRAW_CONSTCOLOR) == 0) {
- glColor3ubv(tcol);
- }
-
timestep = psys_get_timestep(&sim);
- if ((base->flag & OB_FROMDUPLI) && (ob->flag & OB_FROMGROUP)) {
+ if ((ob->flag & OB_FROMGROUP) != 0) {
float mat[4][4];
mul_m4_m4m4(mat, ob->obmat, psys->imat);
- glMultMatrixf(mat);
+ gpuMultMatrix(mat);
}
/* needed for text display */
@@ -5210,7 +6141,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
partsize *= 2;
break;
case PART_DRAW_BB:
- partsize *= 4;
+ partsize *= 6; /* New OGL only understands tris, no choice here. */
create_ndata = 1;
break;
}
@@ -5265,6 +6196,11 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
totpoint = pdd->totpoint; /* draw data is up to date */
}
else {
+ if ((draw_as == PART_DRAW_CIRC) || (part->draw & PART_DRAW_SIZE)) {
+ pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ imm_cpack(0xFFFFFF);
+ }
for (a = 0, pa = pars; a < totpart + totchild; a++, pa++) {
/* setup per particle individual stuff */
if (a < totpart) {
@@ -5335,7 +6271,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
draw_particle_data(psys, rv3d,
&state, draw_as, imat, &bb, psys->pdd,
- ct, pa_size, r_tilt, pixsize_scale);
+ ct, pa_size, r_tilt, pixsize_scale, pos);
totpoint++;
drawn = 1;
@@ -5347,7 +6283,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
draw_particle_data(psys, rv3d,
&state, draw_as, imat, &bb, psys->pdd,
- pa_time, pa_size, r_tilt, pixsize_scale);
+ pa_time, pa_size, r_tilt, pixsize_scale, pos);
totpoint++;
drawn = 1;
@@ -5369,7 +6305,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
if (part->draw & PART_DRAW_SIZE) {
setlinestyle(3);
- drawcircball(GL_LINE_LOOP, state.co, pa_size, imat);
+ imm_drawcircball(state.co, pa_size, imat, pos);
setlinestyle(0);
}
@@ -5406,31 +6342,19 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
}
}
}
+ if ((draw_as == PART_DRAW_CIRC) || (part->draw & PART_DRAW_SIZE)) {
+ immUnbindProgram();
+ }
}
}
/* 6. */
glGetIntegerv(GL_POLYGON_MODE, polygonmode);
- glEnableClientState(GL_VERTEX_ARRAY);
if (draw_as == PART_DRAW_PATH) {
ParticleCacheKey **cache, *path;
float *cdata2 = NULL;
- /* setup gl flags */
- if (1) { //ob_dt > OB_WIRE) {
- glEnableClientState(GL_NORMAL_ARRAY);
-
- if ((dflag & DRAW_CONSTCOLOR) == 0) {
- if (part->draw_col == PART_DRAW_COL_MAT)
- glEnableClientState(GL_COLOR_ARRAY);
- }
-
- // XXX test
- GPU_basic_shader_colors(NULL, NULL, 0.0f, 1.0f);
- GPU_basic_shader_bind(GPU_SHADER_LIGHTING | GPU_SHADER_USE_COLOR);
- }
-
if (totchild && (part->draw & PART_DRAW_PARENT) == 0)
totpart = 0;
else if (psys->pathcache == NULL)
@@ -5441,41 +6365,28 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
for (a = 0, pa = psys->particles; a < totpart; a++, pa++) {
path = cache[a];
if (path->segments > 0) {
- glVertexPointer(3, GL_FLOAT, sizeof(ParticleCacheKey), path->co);
-
- if (1) { //ob_dt > OB_WIRE) {
- glNormalPointer(GL_FLOAT, sizeof(ParticleCacheKey), path->vel);
- if ((dflag & DRAW_CONSTCOLOR) == 0) {
- if (part->draw_col == PART_DRAW_COL_MAT) {
- glColorPointer(3, GL_FLOAT, sizeof(ParticleCacheKey), path->col);
- }
- }
+ if (((dflag & DRAW_CONSTCOLOR) == 0) && (part->draw_col == PART_DRAW_COL_MAT)) {
+ draw_vertex_array(GWN_PRIM_LINE_STRIP, path->co, path->vel, path->col, sizeof(ParticleCacheKey), path->segments + 1, NULL);
+ }
+ else {
+ float color[4];
+ rgba_uchar_to_float(color, tcol);
+ draw_vertex_array(GWN_PRIM_LINE_STRIP, path->co, path->vel, NULL, sizeof(ParticleCacheKey), path->segments + 1, color);
}
-
- glDrawArrays(GL_LINE_STRIP, 0, path->segments + 1);
}
}
if (part->type == PART_HAIR) {
if (part->draw & PART_DRAW_GUIDE_HAIRS) {
DerivedMesh *hair_dm = psys->hair_out_dm;
-
- glDisableClientState(GL_NORMAL_ARRAY);
- glDisableClientState(GL_COLOR_ARRAY);
-
+
for (a = 0, pa = psys->particles; a < totpart; a++, pa++) {
if (pa->totkey > 1) {
HairKey *hkey = pa->hair;
- glVertexPointer(3, GL_FLOAT, sizeof(HairKey), hkey->world_co);
-
-#if 0 /* XXX use proper theme color here */
- UI_ThemeColor(TH_NORMAL);
-#else
- glColor3f(0.58f, 0.67f, 1.0f);
-#endif
-
- glDrawArrays(GL_LINE_STRIP, 0, pa->totkey);
+ /* XXX use proper theme color here */
+ float color[4] = {0.58f, 0.67f, 1.0f, 1.0f};
+ draw_vertex_array(GWN_PRIM_LINE_STRIP, hkey->world_co, NULL, NULL, sizeof(HairKey), pa->totkey, color);
}
}
@@ -5483,30 +6394,36 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
MVert *mvert = hair_dm->getVertArray(hair_dm);
int i;
- glColor3f(0.9f, 0.4f, 0.4f);
-
- glBegin(GL_LINES);
+ unsigned int pos_id = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformColor3f(0.9f, 0.4f, 0.4f);
+
+ unsigned int count = 0;
for (a = 0, pa = psys->particles; a < totpart; a++, pa++) {
- for (i = 1; i < pa->totkey; ++i) {
- float v1[3], v2[3];
-
- copy_v3_v3(v1, mvert[pa->hair_index + i - 1].co);
- copy_v3_v3(v2, mvert[pa->hair_index + i].co);
-
- mul_m4_v3(ob->obmat, v1);
- mul_m4_v3(ob->obmat, v2);
-
- glVertex3fv(v1);
- glVertex3fv(v2);
+ count += MAX2(pa->totkey - 1, 0);
+ }
+
+ if (count > 0) {
+ immBegin(GWN_PRIM_LINES, count * 2);
+ for (a = 0, pa = psys->particles; a < totpart; a++, pa++) {
+ for (i = 1; i < pa->totkey; ++i) {
+ float v1[3], v2[3];
+
+ copy_v3_v3(v1, mvert[pa->hair_index + i - 1].co);
+ copy_v3_v3(v2, mvert[pa->hair_index + i].co);
+
+ mul_m4_v3(ob->obmat, v1);
+ mul_m4_v3(ob->obmat, v2);
+
+ immVertex3fv(pos_id, v1);
+ immVertex3fv(pos_id, v2);
+ }
}
+ immEnd();
}
- glEnd();
+
+ immUnbindProgram();
}
-
- glEnableClientState(GL_NORMAL_ARRAY);
- if ((dflag & DRAW_CONSTCOLOR) == 0)
- if (part->draw_col == PART_DRAW_COL_MAT)
- glEnableClientState(GL_COLOR_ARRAY);
}
if (part->draw & PART_DRAW_HAIR_GRID) {
@@ -5517,64 +6434,69 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
int *res = clmd->hair_grid_res;
int i;
- glDisableClientState(GL_NORMAL_ARRAY);
- glDisableClientState(GL_COLOR_ARRAY);
-
+ unsigned int pos_id = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
if (select)
- UI_ThemeColor(TH_ACTIVE);
+ immUniformThemeColor(TH_ACTIVE);
else
- UI_ThemeColor(TH_WIRE);
- glBegin(GL_LINES);
- glVertex3f(gmin[0], gmin[1], gmin[2]); glVertex3f(gmax[0], gmin[1], gmin[2]);
- glVertex3f(gmax[0], gmin[1], gmin[2]); glVertex3f(gmax[0], gmax[1], gmin[2]);
- glVertex3f(gmax[0], gmax[1], gmin[2]); glVertex3f(gmin[0], gmax[1], gmin[2]);
- glVertex3f(gmin[0], gmax[1], gmin[2]); glVertex3f(gmin[0], gmin[1], gmin[2]);
+ immUniformThemeColor(TH_WIRE);
+
+ immBegin(GWN_PRIM_LINES, 24);
+ immVertex3f(pos_id, gmin[0], gmin[1], gmin[2]); immVertex3f(pos_id, gmax[0], gmin[1], gmin[2]);
+ immVertex3f(pos_id, gmax[0], gmin[1], gmin[2]); immVertex3f(pos_id, gmax[0], gmax[1], gmin[2]);
+ immVertex3f(pos_id, gmax[0], gmax[1], gmin[2]); immVertex3f(pos_id, gmin[0], gmax[1], gmin[2]);
+ immVertex3f(pos_id, gmin[0], gmax[1], gmin[2]); immVertex3f(pos_id, gmin[0], gmin[1], gmin[2]);
- glVertex3f(gmin[0], gmin[1], gmax[2]); glVertex3f(gmax[0], gmin[1], gmax[2]);
- glVertex3f(gmax[0], gmin[1], gmax[2]); glVertex3f(gmax[0], gmax[1], gmax[2]);
- glVertex3f(gmax[0], gmax[1], gmax[2]); glVertex3f(gmin[0], gmax[1], gmax[2]);
- glVertex3f(gmin[0], gmax[1], gmax[2]); glVertex3f(gmin[0], gmin[1], gmax[2]);
+ immVertex3f(pos_id, gmin[0], gmin[1], gmax[2]); immVertex3f(pos_id, gmax[0], gmin[1], gmax[2]);
+ immVertex3f(pos_id, gmax[0], gmin[1], gmax[2]); immVertex3f(pos_id, gmax[0], gmax[1], gmax[2]);
+ immVertex3f(pos_id, gmax[0], gmax[1], gmax[2]); immVertex3f(pos_id, gmin[0], gmax[1], gmax[2]);
+ immVertex3f(pos_id, gmin[0], gmax[1], gmax[2]); immVertex3f(pos_id, gmin[0], gmin[1], gmax[2]);
- glVertex3f(gmin[0], gmin[1], gmin[2]); glVertex3f(gmin[0], gmin[1], gmax[2]);
- glVertex3f(gmax[0], gmin[1], gmin[2]); glVertex3f(gmax[0], gmin[1], gmax[2]);
- glVertex3f(gmin[0], gmax[1], gmin[2]); glVertex3f(gmin[0], gmax[1], gmax[2]);
- glVertex3f(gmax[0], gmax[1], gmin[2]); glVertex3f(gmax[0], gmax[1], gmax[2]);
- glEnd();
+ immVertex3f(pos_id, gmin[0], gmin[1], gmin[2]); immVertex3f(pos_id, gmin[0], gmin[1], gmax[2]);
+ immVertex3f(pos_id, gmax[0], gmin[1], gmin[2]); immVertex3f(pos_id, gmax[0], gmin[1], gmax[2]);
+ immVertex3f(pos_id, gmin[0], gmax[1], gmin[2]); immVertex3f(pos_id, gmin[0], gmax[1], gmax[2]);
+ immVertex3f(pos_id, gmax[0], gmax[1], gmin[2]); immVertex3f(pos_id, gmax[0], gmax[1], gmax[2]);
+ immEnd();
if (select)
- UI_ThemeColorShadeAlpha(TH_ACTIVE, 0, -100);
+ immUniformThemeColorShadeAlpha(TH_ACTIVE, 0, -100);
else
- UI_ThemeColorShadeAlpha(TH_WIRE, 0, -100);
- glEnable(GL_BLEND);
- glBegin(GL_LINES);
- for (i = 1; i < res[0] - 1; ++i) {
- float f = interpf(gmax[0], gmin[0], (float)i / (float)(res[0] - 1));
- glVertex3f(f, gmin[1], gmin[2]); glVertex3f(f, gmax[1], gmin[2]);
- glVertex3f(f, gmax[1], gmin[2]); glVertex3f(f, gmax[1], gmax[2]);
- glVertex3f(f, gmax[1], gmax[2]); glVertex3f(f, gmin[1], gmax[2]);
- glVertex3f(f, gmin[1], gmax[2]); glVertex3f(f, gmin[1], gmin[2]);
- }
- for (i = 1; i < res[1] - 1; ++i) {
- float f = interpf(gmax[1], gmin[1], (float)i / (float)(res[1] - 1));
- glVertex3f(gmin[0], f, gmin[2]); glVertex3f(gmax[0], f, gmin[2]);
- glVertex3f(gmax[0], f, gmin[2]); glVertex3f(gmax[0], f, gmax[2]);
- glVertex3f(gmax[0], f, gmax[2]); glVertex3f(gmin[0], f, gmax[2]);
- glVertex3f(gmin[0], f, gmax[2]); glVertex3f(gmin[0], f, gmin[2]);
- }
- for (i = 1; i < res[2] - 1; ++i) {
- float f = interpf(gmax[2], gmin[2], (float)i / (float)(res[2] - 1));
- glVertex3f(gmin[0], gmin[1], f); glVertex3f(gmax[0], gmin[1], f);
- glVertex3f(gmax[0], gmin[1], f); glVertex3f(gmax[0], gmax[1], f);
- glVertex3f(gmax[0], gmax[1], f); glVertex3f(gmin[0], gmax[1], f);
- glVertex3f(gmin[0], gmax[1], f); glVertex3f(gmin[0], gmin[1], f);
+ immUniformThemeColorShadeAlpha(TH_WIRE, 0, -100);
+
+ int count = 0;
+ count += MAX2(0, res[0] - 2) * 8;
+ count += MAX2(0, res[1] - 2) * 8;
+ count += MAX2(0, res[2] - 2) * 8;
+
+ if (count >= 2) {
+ glEnable(GL_BLEND);
+ immBegin(GWN_PRIM_LINES, count);
+ for (i = 1; i < res[0] - 1; ++i) {
+ float f = interpf(gmax[0], gmin[0], (float)i / (float)(res[0] - 1));
+ immVertex3f(pos_id, f, gmin[1], gmin[2]); immVertex3f(pos_id, f, gmax[1], gmin[2]);
+ immVertex3f(pos_id, f, gmax[1], gmin[2]); immVertex3f(pos_id, f, gmax[1], gmax[2]);
+ immVertex3f(pos_id, f, gmax[1], gmax[2]); immVertex3f(pos_id, f, gmin[1], gmax[2]);
+ immVertex3f(pos_id, f, gmin[1], gmax[2]); immVertex3f(pos_id, f, gmin[1], gmin[2]);
+ }
+ for (i = 1; i < res[1] - 1; ++i) {
+ float f = interpf(gmax[1], gmin[1], (float)i / (float)(res[1] - 1));
+ immVertex3f(pos_id, gmin[0], f, gmin[2]); immVertex3f(pos_id, gmax[0], f, gmin[2]);
+ immVertex3f(pos_id, gmax[0], f, gmin[2]); immVertex3f(pos_id, gmax[0], f, gmax[2]);
+ immVertex3f(pos_id, gmax[0], f, gmax[2]); immVertex3f(pos_id, gmin[0], f, gmax[2]);
+ immVertex3f(pos_id, gmin[0], f, gmax[2]); immVertex3f(pos_id, gmin[0], f, gmin[2]);
+ }
+ for (i = 1; i < res[2] - 1; ++i) {
+ float f = interpf(gmax[2], gmin[2], (float)i / (float)(res[2] - 1));
+ immVertex3f(pos_id, gmin[0], gmin[1], f); immVertex3f(pos_id, gmax[0], gmin[1], f);
+ immVertex3f(pos_id, gmax[0], gmin[1], f); immVertex3f(pos_id, gmax[0], gmax[1], f);
+ immVertex3f(pos_id, gmax[0], gmax[1], f); immVertex3f(pos_id, gmin[0], gmax[1], f);
+ immVertex3f(pos_id, gmin[0], gmax[1], f); immVertex3f(pos_id, gmin[0], gmin[1], f);
+ }
+ immEnd();
+ glDisable(GL_BLEND);
}
- glEnd();
- glDisable(GL_BLEND);
-
- glEnableClientState(GL_NORMAL_ARRAY);
- if ((dflag & DRAW_CONSTCOLOR) == 0)
- if (part->draw_col == PART_DRAW_COL_MAT)
- glEnableClientState(GL_COLOR_ARRAY);
+
+ immUnbindProgram();
}
}
}
@@ -5583,27 +6505,17 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
cache = psys->childcache;
for (a = 0; a < totchild; a++) {
path = cache[a];
- glVertexPointer(3, GL_FLOAT, sizeof(ParticleCacheKey), path->co);
- if (1) { //ob_dt > OB_WIRE) {
- glNormalPointer(GL_FLOAT, sizeof(ParticleCacheKey), path->vel);
- if ((dflag & DRAW_CONSTCOLOR) == 0) {
- if (part->draw_col == PART_DRAW_COL_MAT) {
- glColorPointer(3, GL_FLOAT, sizeof(ParticleCacheKey), path->col);
- }
- }
+ if (((dflag & DRAW_CONSTCOLOR) == 0) && (part->draw_col == PART_DRAW_COL_MAT)) {
+ draw_vertex_array(GWN_PRIM_LINE_STRIP, path->co, path->vel, path->col, sizeof(ParticleCacheKey), path->segments + 1, NULL);
+ }
+ else {
+ float color[4] = {0.0f, 0.0f, 0.0f, 1.0f};
+ draw_vertex_array(GWN_PRIM_LINE_STRIP, path->co, path->vel, NULL, sizeof(ParticleCacheKey), path->segments + 1, color);
}
-
- glDrawArrays(GL_LINE_STRIP, 0, path->segments + 1);
}
/* restore & clean up */
- if (1) { //ob_dt > OB_WIRE) {
- if (part->draw_col == PART_DRAW_COL_MAT)
- glDisableClientState(GL_COLOR_ARRAY);
- GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
- }
-
if (cdata2) {
MEM_freeN(cdata2);
cdata2 = NULL;
@@ -5623,19 +6535,11 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
}
}
else if (pdd && ELEM(draw_as, 0, PART_DRAW_CIRC) == 0) {
- glDisableClientState(GL_COLOR_ARRAY);
- /* enable point data array */
if (pdd->vdata) {
- glEnableClientState(GL_VERTEX_ARRAY);
- glVertexPointer(3, GL_FLOAT, 0, pdd->vdata);
- }
- else
- glDisableClientState(GL_VERTEX_ARRAY);
-
- if ((dflag & DRAW_CONSTCOLOR) == 0) {
if (select) {
- UI_ThemeColor(TH_ACTIVE);
+ float color[4];
+ UI_GetThemeColor4fv(TH_ACTIVE, color);
if (part->draw_size)
glPointSize(part->draw_size + 2);
@@ -5644,48 +6548,39 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
glLineWidth(3.0);
- draw_particle_arrays(draw_as, totpoint, ob_dt, 1);
+ draw_particle_arrays_new(draw_as, ob_dt, 1, pdd->vdata, NULL, NULL, totpoint, color);
}
- /* restore from select */
- glColor3fv(ma_col);
- }
-
- glPointSize(part->draw_size ? part->draw_size : 2.0);
- glLineWidth(1.0);
+ glPointSize(part->draw_size ? part->draw_size : 2.0);
+ glLineWidth(1.0);
- /* enable other data arrays */
- /* billboards are drawn this way */
- if (pdd->ndata && ob_dt > OB_WIRE) {
- glEnableClientState(GL_NORMAL_ARRAY);
- glNormalPointer(GL_FLOAT, 0, pdd->ndata);
- GPU_basic_shader_colors(NULL, NULL, 0.0f, 1.0f);
- GPU_basic_shader_bind(GPU_SHADER_LIGHTING | GPU_SHADER_USE_COLOR);
- }
-
- if ((dflag & DRAW_CONSTCOLOR) == 0) {
- if (pdd->cdata) {
- glEnableClientState(GL_COLOR_ARRAY);
- glColorPointer(3, GL_FLOAT, 0, pdd->cdata);
+#if 0
+ /* enable other data arrays */
+ /* billboards are drawn this way */
+ if (pdd->ndata && ob_dt > OB_WIRE) {
+ GPU_basic_shader_colors(NULL, NULL, 0.0f, 1.0f);
+ GPU_basic_shader_bind(GPU_SHADER_LIGHTING | GPU_SHADER_USE_COLOR);
}
+ if ((dflag & DRAW_CONSTCOLOR) == 0) {
+ if (pdd->cdata) {
+ glEnableClientState(GL_COLOR_ARRAY);
+ glColorPointer(3, GL_FLOAT, 0, pdd->cdata);
+ }
+ }
+#endif
+
+ draw_particle_arrays_new(draw_as, ob_dt, 0, pdd->vdata, pdd->ndata, pdd->cdata, totpoint, NULL);
}
- draw_particle_arrays(draw_as, totpoint, ob_dt, 0);
pdd->flag |= PARTICLE_DRAW_DATA_UPDATED;
pdd->totpoint = totpoint;
}
if (pdd && pdd->vedata) {
- if ((dflag & DRAW_CONSTCOLOR) == 0) {
- glDisableClientState(GL_COLOR_ARRAY);
- cpack(0xC0C0C0);
- }
-
- glVertexPointer(3, GL_FLOAT, 0, pdd->vedata);
-
- glDrawArrays(GL_LINES, 0, 2 * totve);
+ float color[4] = {0.75f, 0.75f, 0.75f, 1.0f};
+ draw_vertex_array(GWN_PRIM_LINES, pdd->vedata, NULL, NULL, 0, 2 * totve, color);
}
glPolygonMode(GL_FRONT, polygonmode[0]);
@@ -5694,9 +6589,6 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
/* 7. */
GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
- glDisableClientState(GL_COLOR_ARRAY);
- glDisableClientState(GL_VERTEX_ARRAY);
- glDisableClientState(GL_NORMAL_ARRAY);
if (states)
MEM_freeN(states);
@@ -5719,32 +6611,28 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
pdd->ma_col = NULL;
}
- if ((base->flag & OB_FROMDUPLI) && (ob->flag & OB_FROMGROUP)) {
- glLoadMatrixf(rv3d->viewmat);
+ if ((ob->flag & OB_FROMGROUP) != 0) {
+ gpuLoadMatrix(rv3d->viewmat);
}
}
-static void draw_update_ptcache_edit(Scene *scene, Object *ob, PTCacheEdit *edit)
+static void draw_update_ptcache_edit(
+ const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, Object *ob, PTCacheEdit *edit)
{
if (edit->psys && edit->psys->flag & PSYS_HAIR_UPDATED)
- PE_update_object(scene, ob, 0);
+ PE_update_object(eval_ctx, scene, view_layer, ob, 0);
/* create path and child path cache if it doesn't exist already */
- if (edit->pathcache == NULL)
- psys_cache_edit_paths(scene, ob, edit, CFRA, G.is_rendering);
+ if (edit->pathcache == NULL) {
+ psys_cache_edit_paths(eval_ctx, scene, ob, edit, CFRA, G.is_rendering);
+ }
}
static void draw_ptcache_edit(Scene *scene, View3D *v3d, PTCacheEdit *edit)
{
- ParticleCacheKey **cache, *path, *pkey;
- PTCacheEditPoint *point;
- PTCacheEditKey *key;
ParticleEditSettings *pset = PE_settings(scene);
- int i, k, totpoint = edit->totpoint, timed = (pset->flag & PE_FADE_TIME) ? pset->fade_frames : 0;
- int totkeys = 1;
- float sel_col[3];
- float nosel_col[3];
- float *pathcol = NULL, *pcol;
+ const int totpoint = edit->totpoint;
+ const bool timed = (pset->flag & PE_FADE_TIME) ? pset->fade_frames : false;
if (edit->pathcache == NULL)
return;
@@ -5756,50 +6644,71 @@ static void draw_ptcache_edit(Scene *scene, View3D *v3d, PTCacheEdit *edit)
glDisable(GL_DEPTH_TEST);
/* get selection theme colors */
+ float sel_col[3], nosel_col[3];
UI_GetThemeColor3fv(TH_VERTEX_SELECT, sel_col);
UI_GetThemeColor3fv(TH_VERTEX, nosel_col);
/* draw paths */
- totkeys = (*edit->pathcache)->segments + 1;
+ const int totkeys = (*edit->pathcache)->segments + 1;
glEnable(GL_BLEND);
- pathcol = MEM_calloc_arrayN(totkeys, 4 * sizeof(float), "particle path color data");
-
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_COLOR_ARRAY);
+ float *pathcol = MEM_calloc_arrayN(totkeys, 4 * sizeof(float), "particle path color data");
if (pset->brushtype == PE_BRUSH_WEIGHT)
glLineWidth(2.0f);
- cache = edit->pathcache;
+ ParticleCacheKey **cache = edit->pathcache;
+ PTCacheEditPoint *point;
+ int i;
+
for (i = 0, point = edit->points; i < totpoint; i++, point++) {
- path = cache[i];
- glVertexPointer(3, GL_FLOAT, sizeof(ParticleCacheKey), path->co);
+ ParticleCacheKey *path = cache[i];
+
+ Gwn_VertFormat format = {0};
+ unsigned int pos_id, col_id, col_comp;
+
+ col_comp = ((point->flag & PEP_HIDE) || timed) ? 4 : 3;
+
+ pos_id = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ col_id = GWN_vertformat_attr_add(&format, "color", GWN_COMP_F32, col_comp, GWN_FETCH_FLOAT);
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, path->segments + 1);
+
+ GWN_vertbuf_attr_fill_stride(vbo, pos_id, sizeof(ParticleCacheKey), path->co);
+
+ float *pcol = pathcol;
if (point->flag & PEP_HIDE) {
- for (k = 0, pcol = pathcol; k < totkeys; k++, pcol += 4) {
+ for (int k = 0; k < totkeys; k++, pcol += 4) {
copy_v3_v3(pcol, path->col);
pcol[3] = 0.25f;
}
- glColorPointer(4, GL_FLOAT, 4 * sizeof(float), pathcol);
+ GWN_vertbuf_attr_fill(vbo, col_id, pathcol);
}
else if (timed) {
- for (k = 0, pcol = pathcol, pkey = path; k < totkeys; k++, pkey++, pcol += 4) {
+ ParticleCacheKey *pkey = path;
+ for (int k = 0; k < totkeys; k++, pkey++, pcol += 4) {
copy_v3_v3(pcol, pkey->col);
pcol[3] = 1.0f - fabsf((float)(CFRA) -pkey->time) / (float)pset->fade_frames;
}
- glColorPointer(4, GL_FLOAT, 4 * sizeof(float), pathcol);
+ GWN_vertbuf_attr_fill(vbo, col_id, pathcol);
+ }
+ else {
+ /* FIXME: shader wants 4 color components but the cache only contains ParticleCacheKey
+ * So alpha is random */
+ GWN_vertbuf_attr_fill_stride(vbo, col_id, sizeof(ParticleCacheKey), path->col);
}
- else
- glColorPointer(3, GL_FLOAT, sizeof(ParticleCacheKey), path->col);
- glDrawArrays(GL_LINE_STRIP, 0, path->segments + 1);
+ Gwn_Batch *batch = GWN_batch_create_ex(GWN_PRIM_LINE_STRIP, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ GWN_batch_program_set_builtin(batch, GPU_SHADER_3D_SMOOTH_COLOR);
+ GWN_batch_draw(batch);
+ GWN_batch_discard(batch);
}
- if (pathcol) { MEM_freeN(pathcol); pathcol = pcol = NULL; }
-
+ if (pathcol) { MEM_freeN(pathcol); pathcol = NULL; }
/* draw edit vertices */
if (pset->selectmode != SCE_SELECT_PATH) {
@@ -5810,6 +6719,10 @@ static void draw_ptcache_edit(Scene *scene, View3D *v3d, PTCacheEdit *edit)
float *cd = NULL, *cdata = NULL;
int totkeys_visible = 0;
+ Gwn_VertFormat format = {0};
+ unsigned int pos_id = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ unsigned int col_id = GWN_vertformat_attr_add(&format, "color", GWN_COMP_F32, (timed ? 4 : 3), GWN_FETCH_FLOAT);
+
for (i = 0, point = edit->points; i < totpoint; i++, point++)
if (!(point->flag & PEP_HIDE))
totkeys_visible += point->totkey;
@@ -5824,7 +6737,8 @@ static void draw_ptcache_edit(Scene *scene, View3D *v3d, PTCacheEdit *edit)
if (point->flag & PEP_HIDE)
continue;
- for (k = 0, key = point->keys; k < point->totkey; k++, key++) {
+ PTCacheEditKey *key = point->keys;
+ for (int k = 0; k < point->totkey; k++, key++) {
if (pd) {
copy_v3_v3(pd, key->co);
pd += 3;
@@ -5849,14 +6763,20 @@ static void draw_ptcache_edit(Scene *scene, View3D *v3d, PTCacheEdit *edit)
if (point->flag & PEP_HIDE || point->totkey == 0)
continue;
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, point->totkey);
+
if (point->keys->flag & PEK_USE_WCO)
- glVertexPointer(3, GL_FLOAT, sizeof(PTCacheEditKey), point->keys->world_co);
+ GWN_vertbuf_attr_fill_stride(vbo, pos_id, sizeof(PTCacheEditKey), point->keys->world_co);
else
- glVertexPointer(3, GL_FLOAT, 3 * sizeof(float), pd);
+ GWN_vertbuf_attr_fill(vbo, pos_id, pd);
- glColorPointer((timed ? 4 : 3), GL_FLOAT, (timed ? 4 : 3) * sizeof(float), cd);
+ GWN_vertbuf_attr_fill(vbo, col_id, cd);
- glDrawArrays(GL_POINTS, 0, point->totkey);
+ Gwn_Batch *batch = GWN_batch_create_ex(GWN_PRIM_POINTS, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ GWN_batch_program_set_builtin(batch, GPU_SHADER_3D_SMOOTH_COLOR);
+ GWN_batch_draw(batch);
+ GWN_batch_discard(batch);
pd += pd ? 3 * point->totkey : 0;
cd += (timed ? 4 : 3) * point->totkey;
@@ -5865,23 +6785,30 @@ static void draw_ptcache_edit(Scene *scene, View3D *v3d, PTCacheEdit *edit)
if (cdata) { MEM_freeN(cdata); cd = cdata = NULL; }
}
else if (pset->selectmode == SCE_SELECT_END) {
- glBegin(GL_POINTS);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos_id = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ unsigned int col_id = GWN_vertformat_attr_add(format, "color", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_FLAT_COLOR);
+ immBeginAtMost(GWN_PRIM_POINTS, totpoint);
for (i = 0, point = edit->points; i < totpoint; i++, point++) {
if ((point->flag & PEP_HIDE) == 0 && point->totkey) {
- key = point->keys + point->totkey - 1;
- glColor3fv((key->flag & PEK_SELECT) ? sel_col : nosel_col);
+ PTCacheEditKey *key = point->keys + point->totkey - 1;
+ if ((key->flag & PEK_SELECT) != 0) {
+ immAttrib3fv(col_id, sel_col);
+ }
+ else {
+ immAttrib3fv(col_id, nosel_col);
+ }
/* has to be like this.. otherwise selection won't work, have try glArrayElement later..*/
- glVertex3fv((key->flag & PEK_USE_WCO) ? key->world_co : key->co);
+ immVertex3fv(pos_id, (key->flag & PEK_USE_WCO) ? key->world_co : key->co);
}
}
- glEnd();
+ immEnd();
+ immUnbindProgram();
}
}
glDisable(GL_BLEND);
- glDisableClientState(GL_COLOR_ARRAY);
- glDisableClientState(GL_NORMAL_ARRAY);
- glDisableClientState(GL_VERTEX_ARRAY);
if (v3d->zbuf) glEnable(GL_DEPTH_TEST);
}
@@ -5894,130 +6821,137 @@ static void ob_draw_RE_motion(float com[3], float rotscale[3][3], float itw, flo
float tw = itw * drw_size;
float th = ith * drw_size;
- glBegin(GL_LINES);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ unsigned int col = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 4, GWN_FETCH_INT_TO_FLOAT_UNIT);
+ immBindBuiltinProgram(GPU_SHADER_3D_FLAT_COLOR);
+
+ immBegin(GWN_PRIM_LINES, 30);
- glColor4ub(0x7F, 0x00, 0x00, 155);
+ immAttrib4ub(col, 0x7F, 0x00, 0x00, 155);
root[1] = root[2] = 0.0f;
root[0] = -drw_size;
mul_m3_v3(tr, root);
add_v3_v3(root, com);
- glVertex3fv(root);
+ immVertex3fv(pos, root);
tip[1] = tip[2] = 0.0f;
tip[0] = drw_size;
mul_m3_v3(tr, tip);
add_v3_v3(tip, com);
- glVertex3fv(tip);
+ immVertex3fv(pos, tip);
root[1] = 0.0f; root[2] = tw;
root[0] = th;
mul_m3_v3(tr, root);
add_v3_v3(root, com);
- glVertex3fv(root);
- glVertex3fv(tip);
+ immVertex3fv(pos, root);
+ immVertex3fv(pos, tip);
root[1] = 0.0f; root[2] = -tw;
root[0] = th;
mul_m3_v3(tr, root);
add_v3_v3(root, com);
- glVertex3fv(root);
- glVertex3fv(tip);
+ immVertex3fv(pos, root);
+ immVertex3fv(pos, tip);
root[1] = tw; root[2] = 0.0f;
root[0] = th;
mul_m3_v3(tr, root);
add_v3_v3(root, com);
- glVertex3fv(root);
- glVertex3fv(tip);
+ immVertex3fv(pos, root);
+ immVertex3fv(pos, tip);
root[1] = -tw; root[2] = 0.0f;
root[0] = th;
mul_m3_v3(tr, root);
add_v3_v3(root, com);
- glVertex3fv(root);
- glVertex3fv(tip);
+ immVertex3fv(pos, root);
+ immVertex3fv(pos, tip);
- glColor4ub(0x00, 0x7F, 0x00, 155);
+ immAttrib4ub(col, 0x00, 0x7F, 0x00, 155);
root[0] = root[2] = 0.0f;
root[1] = -drw_size;
mul_m3_v3(tr, root);
add_v3_v3(root, com);
- glVertex3fv(root);
+ immVertex3fv(pos, root);
tip[0] = tip[2] = 0.0f;
tip[1] = drw_size;
mul_m3_v3(tr, tip);
add_v3_v3(tip, com);
- glVertex3fv(tip);
+ immVertex3fv(pos, tip);
root[0] = 0.0f; root[2] = tw;
root[1] = th;
mul_m3_v3(tr, root);
add_v3_v3(root, com);
- glVertex3fv(root);
- glVertex3fv(tip);
+ immVertex3fv(pos, root);
+ immVertex3fv(pos, tip);
root[0] = 0.0f; root[2] = -tw;
root[1] = th;
mul_m3_v3(tr, root);
add_v3_v3(root, com);
- glVertex3fv(root);
- glVertex3fv(tip);
+ immVertex3fv(pos, root);
+ immVertex3fv(pos, tip);
root[0] = tw; root[2] = 0.0f;
root[1] = th;
mul_m3_v3(tr, root);
add_v3_v3(root, com);
- glVertex3fv(root);
- glVertex3fv(tip);
+ immVertex3fv(pos, root);
+ immVertex3fv(pos, tip);
root[0] = -tw; root[2] = 0.0f;
root[1] = th;
mul_m3_v3(tr, root);
add_v3_v3(root, com);
- glVertex3fv(root);
- glVertex3fv(tip);
+ immVertex3fv(pos, root);
+ immVertex3fv(pos, tip);
- glColor4ub(0x00, 0x00, 0x7F, 155);
+ immAttrib4ub(col, 0x00, 0x00, 0x7F, 155);
root[0] = root[1] = 0.0f;
root[2] = -drw_size;
mul_m3_v3(tr, root);
add_v3_v3(root, com);
- glVertex3fv(root);
+ immVertex3fv(pos, root);
tip[0] = tip[1] = 0.0f;
tip[2] = drw_size;
mul_m3_v3(tr, tip);
add_v3_v3(tip, com);
- glVertex3fv(tip);
+ immVertex3fv(pos, tip);
root[0] = 0.0f; root[1] = tw;
root[2] = th;
mul_m3_v3(tr, root);
add_v3_v3(root, com);
- glVertex3fv(root);
- glVertex3fv(tip);
+ immVertex3fv(pos, root);
+ immVertex3fv(pos, tip);
root[0] = 0.0f; root[1] = -tw;
root[2] = th;
mul_m3_v3(tr, root);
add_v3_v3(root, com);
- glVertex3fv(root);
- glVertex3fv(tip);
+ immVertex3fv(pos, root);
+ immVertex3fv(pos, tip);
root[0] = tw; root[1] = 0.0f;
root[2] = th;
mul_m3_v3(tr, root);
add_v3_v3(root, com);
- glVertex3fv(root);
- glVertex3fv(tip);
+ immVertex3fv(pos, root);
+ immVertex3fv(pos, tip);
root[0] = -tw; root[1] = 0.0f;
root[2] = th;
mul_m3_v3(tr, root);
add_v3_v3(root, com);
- glVertex3fv(root);
- glVertex3fv(tip);
+ immVertex3fv(pos, root);
+ immVertex3fv(pos, tip);
- glEnd();
+ immEnd();
+
+ immUnbindProgram();
}
/* place to add drawers */
@@ -6026,7 +6960,7 @@ static void drawhandlesN(Nurb *nu, const char sel, const bool hide_handles)
{
if (nu->hide || hide_handles) return;
- if (nu->type == CU_BEZIER) {
+ if (nu->type == CU_BEZIER && nu->pntsu > 0) {
const float *fp;
@@ -6039,9 +6973,14 @@ static void drawhandlesN(Nurb *nu, const char sel, const bool hide_handles)
UI_GetThemeColor3ubv(basecol + a, handle_cols[a]);
}
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ unsigned int col = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
+ immBindBuiltinProgram(GPU_SHADER_3D_FLAT_COLOR);
+
glLineWidth(1.0f);
- glBegin(GL_LINES);
+ immBeginAtMost(GWN_PRIM_LINES, nu->pntsu * 4);
BezTriple *bezt = nu->bezt;
int a = nu->pntsu;
@@ -6050,33 +6989,35 @@ static void drawhandlesN(Nurb *nu, const char sel, const bool hide_handles)
if ((bezt->f2 & SELECT) == sel) {
fp = bezt->vec[0];
- glColor3ubv(handle_cols[MIN2(bezt->h1, TH_HANDLE_COL_TOT - 1)]);
- glVertex3fv(fp);
- glVertex3fv(fp + 3);
+ immAttrib3ubv(col, handle_cols[MIN2(bezt->h1, TH_HANDLE_COL_TOT - 1)]);
+ immVertex3fv(pos, fp);
+ immVertex3fv(pos, fp + 3);
- glColor3ubv(handle_cols[MIN2(bezt->h2, TH_HANDLE_COL_TOT - 1)]);
- glVertex3fv(fp + 3);
- glVertex3fv(fp + 6);
+ immAttrib3ubv(col, handle_cols[MIN2(bezt->h2, TH_HANDLE_COL_TOT - 1)]);
+ immVertex3fv(pos, fp + 3);
+ immVertex3fv(pos, fp + 6);
}
else if ((bezt->f1 & SELECT) == sel) {
fp = bezt->vec[0];
- glColor3ubv(handle_cols[MIN2(bezt->h1, TH_HANDLE_COL_TOT - 1)]);
- glVertex3fv(fp);
- glVertex3fv(fp + 3);
+ immAttrib3ubv(col, handle_cols[MIN2(bezt->h1, TH_HANDLE_COL_TOT - 1)]);
+ immVertex3fv(pos, fp);
+ immVertex3fv(pos, fp + 3);
}
else if ((bezt->f3 & SELECT) == sel) {
fp = bezt->vec[1];
- glColor3ubv(handle_cols[MIN2(bezt->h2, TH_HANDLE_COL_TOT - 1)]);
- glVertex3fv(fp);
- glVertex3fv(fp + 3);
+ immAttrib3ubv(col, handle_cols[MIN2(bezt->h2, TH_HANDLE_COL_TOT - 1)]);
+ immVertex3fv(pos, fp);
+ immVertex3fv(pos, fp + 3);
}
}
bezt++;
}
- glEnd();
+ immEnd();
+
+ immUnbindProgram();
#undef TH_HANDLE_COL_TOT
@@ -6087,153 +7028,196 @@ static void drawhandlesN_active(Nurb *nu)
{
if (nu->hide) return;
- UI_ThemeColor(TH_ACTIVE_SPLINE);
- glLineWidth(2);
-
- glBegin(GL_LINES);
+ if (nu->type == CU_BEZIER && nu->pntsu > 0) {
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformThemeColor(TH_ACTIVE_SPLINE);
+ glLineWidth(2.0f);
- if (nu->type == CU_BEZIER) {
+ immBeginAtMost(GWN_PRIM_LINES, nu->pntsu * 4);
BezTriple *bezt = nu->bezt;
int a = nu->pntsu;
while (a--) {
if (bezt->hide == 0) {
const float *fp = bezt->vec[0];
- glVertex3fv(fp);
- glVertex3fv(fp + 3);
+ immVertex3fv(pos, fp);
+ immVertex3fv(pos, fp + 3);
- glVertex3fv(fp + 3);
- glVertex3fv(fp + 6);
+ immVertex3fv(pos, fp + 3);
+ immVertex3fv(pos, fp + 6);
}
bezt++;
}
+ immEnd();
+ immUnbindProgram();
}
- glEnd();
-
- glColor3ub(0, 0, 0);
}
-static void drawvertsN(Nurb *nu, const char sel, const bool hide_handles, const void *vert)
+static void drawvertsN(const Nurb *nurb, const bool hide_handles, const void *vert)
{
- if (nu->hide) return;
+ const Nurb *nu;
- const int color = sel ? TH_VERTEX_SELECT : TH_VERTEX;
+ // just quick guesstimate of how many verts to draw
+ int count = 0;
+ for (nu = nurb; nu; nu = nu->next) {
+ if (!nu->hide) {
+ if (nu->type == CU_BEZIER) {
+ count += nu->pntsu * 3;
+ }
+ else {
+ count += nu->pntsu * nu->pntsv;
+ }
+ }
+ }
+ if (count == 0) return;
- UI_ThemeColor(color);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
+ immBindBuiltinProgram(GPU_SHADER_3D_FLAT_COLOR);
+
+ unsigned char vert_color[3];
+ unsigned char vert_color_select[3];
+ unsigned char vert_color_active[3];
+ UI_GetThemeColor3ubv(TH_VERTEX, vert_color);
+ UI_GetThemeColor3ubv(TH_VERTEX_SELECT, vert_color_select);
+ UI_GetThemeColor3ubv(TH_ACTIVE_VERT, vert_color_active);
glPointSize(UI_GetThemeValuef(TH_VERTEX_SIZE));
+
+ immBeginAtMost(GWN_PRIM_POINTS, count);
- glBegin(GL_POINTS);
-
- if (nu->type == CU_BEZIER) {
+ for (nu = nurb; nu; nu = nu->next) {
- BezTriple *bezt = nu->bezt;
- int a = nu->pntsu;
- while (a--) {
- if (bezt->hide == 0) {
- if (sel == 1 && bezt == vert) {
- UI_ThemeColor(TH_ACTIVE_VERT);
+ if (nu->hide) continue;
- if (bezt->f2 & SELECT) glVertex3fv(bezt->vec[1]);
- if (!hide_handles) {
- if (bezt->f1 & SELECT) glVertex3fv(bezt->vec[0]);
- if (bezt->f3 & SELECT) glVertex3fv(bezt->vec[2]);
- }
+ if (nu->type == CU_BEZIER) {
- UI_ThemeColor(color);
- }
- else if (hide_handles) {
- if ((bezt->f2 & SELECT) == sel) glVertex3fv(bezt->vec[1]);
- }
- else {
- if ((bezt->f1 & SELECT) == sel) glVertex3fv(bezt->vec[0]);
- if ((bezt->f2 & SELECT) == sel) glVertex3fv(bezt->vec[1]);
- if ((bezt->f3 & SELECT) == sel) glVertex3fv(bezt->vec[2]);
+ const BezTriple *bezt = nu->bezt;
+ int a = nu->pntsu;
+ while (a--) {
+ if (bezt->hide == 0) {
+ if (bezt == vert) {
+ immAttrib3ubv(color, bezt->f2 & SELECT ? vert_color_active : vert_color);
+ immVertex3fv(pos, bezt->vec[1]);
+ if (!hide_handles) {
+ immAttrib3ubv(color, bezt->f1 & SELECT ? vert_color_active : vert_color);
+ immVertex3fv(pos, bezt->vec[0]);
+ immAttrib3ubv(color, bezt->f3 & SELECT ? vert_color_active : vert_color);
+ immVertex3fv(pos, bezt->vec[2]);
+ }
+ }
+ else {
+ immAttrib3ubv(color, bezt->f2 & SELECT ? vert_color_select : vert_color);
+ immVertex3fv(pos, bezt->vec[1]);
+ if (!hide_handles) {
+ immAttrib3ubv(color, bezt->f1 & SELECT ? vert_color_select : vert_color);
+ immVertex3fv(pos, bezt->vec[0]);
+ immAttrib3ubv(color, bezt->f3 & SELECT ? vert_color_select : vert_color);
+ immVertex3fv(pos, bezt->vec[2]);
+ }
+ }
}
+ bezt++;
}
- bezt++;
}
- }
- else {
- BPoint *bp = nu->bp;
- int a = nu->pntsu * nu->pntsv;
- while (a--) {
- if (bp->hide == 0) {
- if (bp == vert) {
- UI_ThemeColor(TH_ACTIVE_VERT);
- glVertex3fv(bp->vec);
- UI_ThemeColor(color);
- }
- else {
- if ((bp->f1 & SELECT) == sel) glVertex3fv(bp->vec);
+ else {
+ const BPoint *bp = nu->bp;
+ int a = nu->pntsu * nu->pntsv;
+ while (a--) {
+ if (bp->hide == 0) {
+ if (bp == vert) {
+ immAttrib3ubv(color, vert_color_active);
+ }
+ else {
+ immAttrib3ubv(color, bp->f1 & SELECT ? vert_color_select : vert_color);
+ }
+ immVertex3fv(pos, bp->vec);
}
+ bp++;
}
- bp++;
}
}
-
- glEnd();
+
+ immEnd();
+ immUnbindProgram();
}
static void editnurb_draw_active_poly(Nurb *nu)
{
- UI_ThemeColor(TH_ACTIVE_SPLINE);
- glLineWidth(2);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformThemeColor(TH_ACTIVE_SPLINE);
+
+ glLineWidth(2.0f);
BPoint *bp = nu->bp;
for (int b = 0; b < nu->pntsv; b++) {
- if (nu->flagu & 1) glBegin(GL_LINE_LOOP);
- else glBegin(GL_LINE_STRIP);
+ if (nu->pntsu >= 2) {
+ if (nu->flagu & 1) immBegin(GWN_PRIM_LINE_LOOP, nu->pntsu);
+ else immBegin(GWN_PRIM_LINE_STRIP, nu->pntsu);
- for (int a = 0; a < nu->pntsu; a++, bp++) {
- glVertex3fv(bp->vec);
- }
+ for (int a = 0; a < nu->pntsu; a++, bp++) {
+ immVertex3fv(pos, bp->vec);
+ }
- glEnd();
+ immEnd();
+ }
}
- glColor3ub(0, 0, 0);
+ immUnbindProgram();
}
static void editnurb_draw_active_nurbs(Nurb *nu)
{
- UI_ThemeColor(TH_ACTIVE_SPLINE);
- glLineWidth(2);
+ if (nu->pntsv > 0) {
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformThemeColor(TH_ACTIVE_SPLINE);
- glBegin(GL_LINES);
- BPoint *bp = nu->bp;
- for (int b = 0; b < nu->pntsv; b++) {
- BPoint *bp1 = bp;
- bp++;
-
- for (int a = nu->pntsu - 1; a > 0; a--, bp++) {
- if (bp->hide == 0 && bp1->hide == 0) {
- glVertex3fv(bp->vec);
- glVertex3fv(bp1->vec);
- }
- bp1 = bp;
- }
- }
+ glLineWidth(2.0f);
+ // just quick guesstimate of how many verts to draw
+ int count = (nu->pntsu - 1) * nu->pntsv * 2;
+ if (nu->pntsv > 1) count += (nu->pntsv - 1) * nu->pntsu * 2;
+ if (count < 2) return;
- if (nu->pntsv > 1) { /* surface */
+ immBeginAtMost(GWN_PRIM_LINES, count);
+ BPoint *bp = nu->bp;
+ for (int b = 0; b < nu->pntsv; b++) {
+ BPoint *bp1 = bp;
+ bp++;
- int ofs = nu->pntsu;
- for (int b = 0; b < nu->pntsu; b++) {
- BPoint *bp1 = nu->bp + b;
- bp = bp1 + ofs;
- for (int a = nu->pntsv - 1; a > 0; a--, bp += ofs) {
+ for (int a = nu->pntsu - 1; a > 0; a--, bp++) {
if (bp->hide == 0 && bp1->hide == 0) {
- glVertex3fv(bp->vec);
- glVertex3fv(bp1->vec);
+ immVertex3fv(pos, bp->vec);
+ immVertex3fv(pos, bp1->vec);
}
bp1 = bp;
}
}
- }
- glEnd();
+ if (nu->pntsv > 1) { /* surface */
+ int ofs = nu->pntsu;
+ for (int b = 0; b < nu->pntsu; b++) {
+ BPoint *bp1 = nu->bp + b;
+ bp = bp1 + ofs;
+ for (int a = nu->pntsv - 1; a > 0; a--, bp += ofs) {
+ if (bp->hide == 0 && bp1->hide == 0) {
+ immVertex3fv(pos, bp->vec);
+ immVertex3fv(pos, bp1->vec);
+ }
+ bp1 = bp;
+ }
+ }
+ }
+
+ immEnd();
- glColor3ub(0, 0, 0);
+ immUnbindProgram();
+ }
}
static void draw_editnurb_splines(Object *ob, Nurb *nurb, const bool sel)
@@ -6241,6 +7225,9 @@ static void draw_editnurb_splines(Object *ob, Nurb *nurb, const bool sel)
BPoint *bp, *bp1;
int a, b;
Curve *cu = ob->data;
+ Gwn_VertFormat *format;
+ unsigned int pos, col;
+ unsigned char color[3];
int index = 0;
Nurb *nu = nurb;
@@ -6248,35 +7235,55 @@ static void draw_editnurb_splines(Object *ob, Nurb *nurb, const bool sel)
if (nu->hide == 0) {
switch (nu->type) {
case CU_POLY:
+ {
if (!sel && index == cu->actnu) {
/* we should draw active spline highlight below everything */
editnurb_draw_active_poly(nu);
}
- glLineWidth(1);
+ format = immVertexFormat();
+ pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
- UI_ThemeColor(TH_NURB_ULINE);
+ glLineWidth(1.0f);
+
+ immUniformThemeColor(TH_NURB_ULINE);
bp = nu->bp;
for (b = 0; b < nu->pntsv; b++) {
- if (nu->flagu & 1) glBegin(GL_LINE_LOOP);
- else glBegin(GL_LINE_STRIP);
+ if (nu->pntsu >= 2) {
+ if (nu->flagu & 1) immBegin(GWN_PRIM_LINE_LOOP, nu->pntsu);
+ else immBegin(GWN_PRIM_LINE_STRIP, nu->pntsu);
- for (a = 0; a < nu->pntsu; a++, bp++) {
- glVertex3fv(bp->vec);
- }
+ for (a = 0; a < nu->pntsu; a++, bp++) {
+ immVertex3fv(pos, bp->vec);
+ }
- glEnd();
+ immEnd();
+ }
}
+ immUnbindProgram();
break;
+ }
case CU_NURBS:
+ {
if (!sel && index == cu->actnu) {
/* we should draw active spline highlight below everything */
editnurb_draw_active_nurbs(nu);
}
- glLineWidth(1);
+ format = immVertexFormat();
+ pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ col = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
+ immBindBuiltinProgram(GPU_SHADER_3D_FLAT_COLOR);
+
+ // just quick guesstimate of how many verts to draw
+ int count = (nu->pntsu - 1) * nu->pntsv * 2;
+ if (nu->pntsv > 1) count += (nu->pntsv - 1) * nu->pntsu * 2;
+ if (count < 2) return;
- glBegin(GL_LINES);
+ glLineWidth(1.0f);
+
+ immBeginAtMost(GWN_PRIM_LINES, count);
bp = nu->bp;
for (b = 0; b < nu->pntsv; b++) {
@@ -6286,10 +7293,10 @@ static void draw_editnurb_splines(Object *ob, Nurb *nurb, const bool sel)
if (bp->hide == 0 && bp1->hide == 0) {
if (sel) {
if ((bp->f1 & SELECT) && (bp1->f1 & SELECT)) {
- UI_ThemeColor(TH_NURB_SEL_ULINE);
-
- glVertex3fv(bp->vec);
- glVertex3fv(bp1->vec);
+ UI_GetThemeColor3ubv(TH_NURB_SEL_ULINE, color);
+ immAttrib3ubv(col, color);
+ immVertex3fv(pos, bp->vec);
+ immVertex3fv(pos, bp1->vec);
}
}
else {
@@ -6297,10 +7304,10 @@ static void draw_editnurb_splines(Object *ob, Nurb *nurb, const bool sel)
/* pass */
}
else {
- UI_ThemeColor(TH_NURB_ULINE);
-
- glVertex3fv(bp->vec);
- glVertex3fv(bp1->vec);
+ UI_GetThemeColor3ubv(TH_NURB_ULINE, color);
+ immAttrib3ubv(col, color);
+ immVertex3fv(pos, bp->vec);
+ immVertex3fv(pos, bp1->vec);
}
}
}
@@ -6317,10 +7324,10 @@ static void draw_editnurb_splines(Object *ob, Nurb *nurb, const bool sel)
if (bp->hide == 0 && bp1->hide == 0) {
if (sel) {
if ((bp->f1 & SELECT) && (bp1->f1 & SELECT)) {
- UI_ThemeColor(TH_NURB_SEL_VLINE);
-
- glVertex3fv(bp->vec);
- glVertex3fv(bp1->vec);
+ UI_GetThemeColor3ubv(TH_NURB_SEL_VLINE, color);
+ immAttrib3ubv(col, color);
+ immVertex3fv(pos, bp->vec);
+ immVertex3fv(pos, bp1->vec);
}
}
else {
@@ -6328,10 +7335,10 @@ static void draw_editnurb_splines(Object *ob, Nurb *nurb, const bool sel)
/* pass */
}
else {
- UI_ThemeColor(TH_NURB_VLINE);
-
- glVertex3fv(bp->vec);
- glVertex3fv(bp1->vec);
+ UI_GetThemeColor3ubv(TH_NURB_VLINE, color);
+ immAttrib3ubv(col, color);
+ immVertex3fv(pos, bp->vec);
+ immVertex3fv(pos, bp1->vec);
}
}
}
@@ -6339,9 +7346,10 @@ static void draw_editnurb_splines(Object *ob, Nurb *nurb, const bool sel)
}
}
}
-
- glEnd();
+ immEnd();
+ immUnbindProgram();
break;
+ }
}
}
@@ -6351,8 +7359,9 @@ static void draw_editnurb_splines(Object *ob, Nurb *nurb, const bool sel)
}
static void draw_editnurb(
- Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, Nurb *nurb,
- const char dt, const short dflag, const unsigned char ob_wire_col[4])
+ const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer,
+ View3D *v3d, RegionView3D *rv3d, Base *base, Nurb *nurb,
+ const char dt, const short dflag, const unsigned char UNUSED(ob_wire_col[4]))
{
ToolSettings *ts = scene->toolsettings;
Object *ob = base->object;
@@ -6364,9 +7373,8 @@ static void draw_editnurb(
/* DispList */
UI_GetThemeColor3ubv(TH_WIRE_EDIT, wire_col);
- glColor3ubv(wire_col);
- drawDispList(scene, v3d, rv3d, base, dt, dflag, ob_wire_col);
+ drawDispList(eval_ctx, scene, view_layer, v3d, rv3d, base, dt, dflag, wire_col);
/* for shadows only show solid faces */
if (v3d->flag2 & V3D_RENDER_SHADOW)
@@ -6390,79 +7398,110 @@ static void draw_editnurb(
for (nu = nurb; nu; nu = nu->next) {
if (nu->type == CU_BEZIER && (cu->drawflag & CU_HIDE_HANDLES) == 0)
drawhandlesN(nu, 1, hide_handles);
- drawvertsN(nu, 0, hide_handles, NULL);
}
if (v3d->zbuf) glDepthFunc(GL_LEQUAL);
- glColor3ubv(wire_col);
-
/* direction vectors for 3d curve paths
* when at its lowest, don't render normals */
if ((cu->flag & CU_3D) && (ts->normalsize > 0.0015f) && (cu->drawflag & CU_HIDE_NORMALS) == 0) {
BevList *bl;
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformThemeColor(TH_WIRE_EDIT);
+
glLineWidth(1.0f);
+
+ int count = 0;
+ int count_used = 0;
for (bl = ob->curve_cache->bev.first, nu = nurb; nu && bl; bl = bl->next, nu = nu->next) {
- BevPoint *bevp = bl->bevpoints;
int nr = bl->nr;
int skip = nu->resolu / 16;
-
+
+#if 0
while (nr-- > 0) { /* accounts for empty bevel lists */
- const float fac = bevp->radius * ts->normalsize;
- float vec_a[3]; /* Offset perpendicular to the curve */
- float vec_b[3]; /* Delta along the curve */
+ count += 4;
+ nr -= skip;
+ }
+#else
+ /* Same as loop above */
+ count += 4 * ((nr / (skip + 1)) + ((nr % (skip + 1)) != 0));
+#endif
+ }
- vec_a[0] = fac;
- vec_a[1] = 0.0f;
- vec_a[2] = 0.0f;
-
- mul_qt_v3(bevp->quat, vec_a);
- madd_v3_v3fl(vec_a, bevp->dir, -fac);
+ if (count > 2) {
+ immBegin(GWN_PRIM_LINES, count);
+ for (bl = ob->curve_cache->bev.first, nu = nurb; nu && bl; bl = bl->next, nu = nu->next) {
+ BevPoint *bevp = bl->bevpoints;
+ int nr = bl->nr;
+ int skip = nu->resolu / 16;
- reflect_v3_v3v3(vec_b, vec_a, bevp->dir);
- negate_v3(vec_b);
+ while (nr-- > 0) { /* accounts for empty bevel lists */
+ const float fac = bevp->radius * ts->normalsize;
+ float vec_a[3]; /* Offset perpendicular to the curve */
+ float vec_b[3]; /* Delta along the curve */
- add_v3_v3(vec_a, bevp->vec);
- add_v3_v3(vec_b, bevp->vec);
+ vec_a[0] = fac;
+ vec_a[1] = 0.0f;
+ vec_a[2] = 0.0f;
+
+ mul_qt_v3(bevp->quat, vec_a);
+ madd_v3_v3fl(vec_a, bevp->dir, -fac);
- glBegin(GL_LINE_STRIP);
- glVertex3fv(vec_a);
- glVertex3fv(bevp->vec);
- glVertex3fv(vec_b);
- glEnd();
-
- bevp += skip + 1;
- nr -= skip;
+ reflect_v3_v3v3(vec_b, vec_a, bevp->dir);
+ negate_v3(vec_b);
+
+ add_v3_v3(vec_a, bevp->vec);
+ add_v3_v3(vec_b, bevp->vec);
+
+ immVertex3fv(pos, vec_a);
+ immVertex3fv(pos, bevp->vec);
+ immVertex3fv(pos, bevp->vec);
+ immVertex3fv(pos, vec_b);
+
+ bevp += skip + 1;
+ nr -= skip;
+ count_used += 4;
+ }
}
+ BLI_assert(count == count_used);
+ UNUSED_VARS_NDEBUG(count_used);
+
+ immEnd();
}
+ immUnbindProgram();
}
- if (v3d->zbuf) glDepthFunc(GL_ALWAYS);
-
- for (nu = nurb; nu; nu = nu->next) {
- drawvertsN(nu, 1, hide_handles, vert);
- }
-
- if (v3d->zbuf) glDepthFunc(GL_LEQUAL);
+ if (v3d->zbuf) glDisable(GL_DEPTH_TEST);
+
+ drawvertsN(nurb, hide_handles, vert);
+
+ if (v3d->zbuf) glEnable(GL_DEPTH_TEST);
}
static void draw_editfont_textcurs(RegionView3D *rv3d, float textcurs[4][2])
{
- cpack(0);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
ED_view3d_polygon_offset(rv3d, -1.0);
set_inverted_drawing(1);
- glBegin(GL_QUADS);
- glVertex2fv(textcurs[0]);
- glVertex2fv(textcurs[1]);
- glVertex2fv(textcurs[2]);
- glVertex2fv(textcurs[3]);
- glEnd();
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ imm_cpack(0);
+ immBegin(GWN_PRIM_TRI_FAN, 4);
+ immVertex2fv(pos, textcurs[0]);
+ immVertex2fv(pos, textcurs[1]);
+ immVertex2fv(pos, textcurs[2]);
+ immVertex2fv(pos, textcurs[3]);
+ immEnd();
set_inverted_drawing(0);
ED_view3d_polygon_offset(rv3d, 0.0);
+ immUnbindProgram();
}
-static void draw_editfont(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base,
- const char dt, const short dflag, const unsigned char ob_wire_col[4])
+static void draw_editfont(
+ const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, View3D *v3d, RegionView3D *rv3d, Base *base,
+ const char dt, const short dflag, const unsigned char ob_wire_col[4])
{
Object *ob = base->object;
Curve *cu = ob->data;
@@ -6472,17 +7511,19 @@ static void draw_editfont(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *b
draw_editfont_textcurs(rv3d, ef->textcurs);
if (cu->flag & CU_FAST) {
- cpack(0xFFFFFF);
+ imm_cpack(0xFFFFFF);
set_inverted_drawing(1);
- drawDispList(scene, v3d, rv3d, base, OB_WIRE, dflag, ob_wire_col);
+ drawDispList(eval_ctx, scene, view_layer, v3d, rv3d, base, OB_WIRE, dflag, ob_wire_col);
set_inverted_drawing(0);
}
else {
- drawDispList(scene, v3d, rv3d, base, dt, dflag, ob_wire_col);
+ drawDispList(eval_ctx, scene, view_layer, v3d, rv3d, base, dt, dflag, ob_wire_col);
}
if (cu->linewidth != 0.0f) {
- UI_ThemeColor(TH_WIRE_EDIT);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformThemeColor(TH_WIRE_EDIT);
copy_v3_v3(vec1, ob->orig);
copy_v3_v3(vec2, ob->orig);
vec1[0] += cu->linewidth;
@@ -6490,31 +7531,35 @@ static void draw_editfont(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *b
vec1[1] += cu->linedist * cu->fsize;
vec2[1] -= cu->lines * cu->linedist * cu->fsize;
setlinestyle(3);
- glBegin(GL_LINES);
- glVertex2fv(vec1);
- glVertex2fv(vec2);
- glEnd();
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2fv(pos, vec1);
+ immVertex2fv(pos, vec2);
+ immEnd();
setlinestyle(0);
+ immUnbindProgram();
}
setlinestyle(3);
for (int i = 0; i < cu->totbox; i++) {
if (cu->tb[i].w != 0.0f) {
- UI_ThemeColor(i == (cu->actbox - 1) ? TH_ACTIVE : TH_WIRE);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformThemeColor(i == (cu->actbox - 1) ? TH_ACTIVE : TH_WIRE);
vec1[0] = cu->xof + cu->tb[i].x;
vec1[1] = cu->yof + cu->tb[i].y + cu->fsize;
vec1[2] = 0.001;
- glBegin(GL_LINE_STRIP);
- glVertex3fv(vec1);
+ immBegin(GWN_PRIM_LINE_STRIP, 5);
+ immVertex3fv(pos, vec1);
vec1[0] += cu->tb[i].w;
- glVertex3fv(vec1);
+ immVertex3fv(pos, vec1);
vec1[1] -= cu->tb[i].h;
- glVertex3fv(vec1);
+ immVertex3fv(pos, vec1);
vec1[0] -= cu->tb[i].w;
- glVertex3fv(vec1);
+ immVertex3fv(pos, vec1);
vec1[1] += cu->tb[i].h;
- glVertex3fv(vec1);
- glEnd();
+ immVertex3fv(pos, vec1);
+ immEnd();
+ immUnbindProgram();
}
}
setlinestyle(0);
@@ -6523,7 +7568,9 @@ static void draw_editfont(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *b
if (ef->selboxes && ef->selboxes_len) {
float selboxw;
- cpack(0xffffff);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ imm_cpack(0xffffff);
set_inverted_drawing(1);
for (int i = 0; i < ef->selboxes_len; i++) {
EditFontSelBox *sb = &ef->selboxes[i];
@@ -6542,20 +7589,20 @@ static void draw_editfont(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *b
/* fill in xy below */
tvec[2] = 0.001;
- glBegin(GL_QUADS);
+ immBegin(GWN_PRIM_TRI_FAN, 4);
if (sb->rot == 0.0f) {
copy_v2_fl2(tvec, sb->x, sb->y);
- glVertex3fv(tvec);
+ immVertex3fv(pos, tvec);
copy_v2_fl2(tvec, sb->x + selboxw, sb->y);
- glVertex3fv(tvec);
+ immVertex3fv(pos, tvec);
copy_v2_fl2(tvec, sb->x + selboxw, sb->y + sb->h);
- glVertex3fv(tvec);
+ immVertex3fv(pos, tvec);
copy_v2_fl2(tvec, sb->x, sb->y + sb->h);
- glVertex3fv(tvec);
+ immVertex3fv(pos, tvec);
}
else {
float mat[2][2];
@@ -6563,84 +7610,87 @@ static void draw_editfont(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *b
angle_to_mat2(mat, sb->rot);
copy_v2_fl2(tvec, sb->x, sb->y);
- glVertex3fv(tvec);
+ immVertex3fv(pos, tvec);
copy_v2_fl2(tvec, selboxw, 0.0f);
mul_m2v2(mat, tvec);
add_v2_v2(tvec, &sb->x);
- glVertex3fv(tvec);
+ immVertex3fv(pos, tvec);
copy_v2_fl2(tvec, selboxw, sb->h);
mul_m2v2(mat, tvec);
add_v2_v2(tvec, &sb->x);
- glVertex3fv(tvec);
+ immVertex3fv(pos, tvec);
copy_v2_fl2(tvec, 0.0f, sb->h);
mul_m2v2(mat, tvec);
add_v2_v2(tvec, &sb->x);
- glVertex3fv(tvec);
+ immVertex3fv(pos, tvec);
}
- glEnd();
+ immEnd();
}
set_inverted_drawing(0);
+ immUnbindProgram();
}
}
/* draw a sphere for use as an empty drawtype */
-static void draw_empty_sphere(float size)
-{
- static GLuint displist = 0;
-
- if (displist == 0) {
- GLUquadricObj *qobj;
-
- displist = glGenLists(1);
- glNewList(displist, GL_COMPILE);
-
- glPushMatrix();
-
- qobj = gluNewQuadric();
- gluQuadricDrawStyle(qobj, GLU_SILHOUETTE);
- gluDisk(qobj, 0.0, 1, 16, 1);
-
- glRotatef(90, 0, 1, 0);
- gluDisk(qobj, 0.0, 1, 16, 1);
-
- glRotatef(90, 1, 0, 0);
- gluDisk(qobj, 0.0, 1, 16, 1);
-
- gluDeleteQuadric(qobj);
-
- glPopMatrix();
- glEndList();
- }
-
- glScalef(size, size, size);
- glCallList(displist);
- glScalef(1.0f / size, 1.0f / size, 1.0f / size);
+static void draw_empty_sphere(float size, unsigned pos)
+{
+#define NSEGMENTS 16
+ /* a single ring of vertices */
+ float p[NSEGMENTS][2];
+ for (int i = 0; i < NSEGMENTS; ++i) {
+ float angle = 2 * M_PI * ((float)i / (float)NSEGMENTS);
+ p[i][0] = size * cosf(angle);
+ p[i][1] = size * sinf(angle);
+ }
+
+ immBegin(GWN_PRIM_LINE_LOOP, NSEGMENTS);
+ for (int i = 0; i < NSEGMENTS; ++i)
+ immVertex3f(pos, p[i][0], p[i][1], 0.0f);
+ immEnd();
+ immBegin(GWN_PRIM_LINE_LOOP, NSEGMENTS);
+ for (int i = 0; i < NSEGMENTS; ++i)
+ immVertex3f(pos, p[i][0], 0.0f, p[i][1]);
+ immEnd();
+ immBegin(GWN_PRIM_LINE_LOOP, NSEGMENTS);
+ for (int i = 0; i < NSEGMENTS; ++i)
+ immVertex3f(pos, 0.0f, p[i][0], p[i][1]);
+ immEnd();
+#undef NSEGMENTS
}
/* draw a cone for use as an empty drawtype */
-static void draw_empty_cone(float size)
+static void draw_empty_cone(float size, unsigned pos)
{
- const float radius = size;
+#define NSEGMENTS 8
+ /* a single ring of vertices */
+ float p[NSEGMENTS][2];
+ for (int i = 0; i < NSEGMENTS; ++i) {
+ float angle = 2 * M_PI * ((float)i / (float)NSEGMENTS);
+ p[i][0] = size * cosf(angle);
+ p[i][1] = size * sinf(angle);
+ }
- GLUquadricObj *qobj = gluNewQuadric();
- gluQuadricDrawStyle(qobj, GLU_SILHOUETTE);
-
- glPushMatrix();
-
- glScalef(radius, size * 2.0f, radius);
- glRotatef(-90.0, 1.0, 0.0, 0.0);
- gluCylinder(qobj, 1.0, 0.0, 1.0, 8, 1);
+ /* cone sides */
+ immBegin(GWN_PRIM_LINES, NSEGMENTS * 2);
+ for (int i = 0; i < NSEGMENTS; ++i) {
+ immVertex3f(pos, 0.0f, 2.0f * size, 0.0f);
+ immVertex3f(pos, p[i][0], 0.0f, p[i][1]);
+ }
+ immEnd();
- glPopMatrix();
-
- gluDeleteQuadric(qobj);
+ /* end ring */
+ immBegin(GWN_PRIM_LINE_LOOP, NSEGMENTS);
+ for (int i = 0; i < NSEGMENTS; ++i)
+ immVertex3f(pos, p[i][0], 0.0f, p[i][1]);
+ immEnd();
+#undef NSEGMENTS
}
-static void drawspiral(const float cent[3], float rad, float tmat[4][4], int start)
+static void drawspiral(unsigned int pos, const float cent[3], float rad, float tmat[4][4], int start)
{
float vec[3], vx[3], vy[3];
const float tot_inv = 1.0f / (float)CIRCLE_RESOL;
@@ -6656,11 +7706,11 @@ static void drawspiral(const float cent[3], float rad, float tmat[4][4], int sta
mul_v3_v3fl(vx, tmat[0], rad);
mul_v3_v3fl(vy, tmat[1], rad);
- glBegin(GL_LINE_STRIP);
+ immBegin(GWN_PRIM_LINE_STRIP, CIRCLE_RESOL + 1);
if (inverse == 0) {
copy_v3_v3(vec, cent);
- glVertex3fv(vec);
+ immVertex3fv(pos, vec);
for (a = 0; a < CIRCLE_RESOL; a++) {
if (a + start >= CIRCLE_RESOL)
@@ -6674,7 +7724,7 @@ static void drawspiral(const float cent[3], float rad, float tmat[4][4], int sta
vec[1] = cent[1] + (x * vx[1] + y * vy[1]);
vec[2] = cent[2] + (x * vx[2] + y * vy[2]);
- glVertex3fv(vec);
+ immVertex3fv(pos, vec);
}
}
else {
@@ -6686,7 +7736,7 @@ static void drawspiral(const float cent[3], float rad, float tmat[4][4], int sta
vec[1] = cent[1] + (x * vx[1] + y * vy[1]);
vec[2] = cent[2] + (x * vx[2] + y * vy[2]);
- glVertex3fv(vec);
+ immVertex3fv(pos, vec);
for (a = 0; a < CIRCLE_RESOL; a++) {
if (a + start >= CIRCLE_RESOL)
@@ -6699,79 +7749,79 @@ static void drawspiral(const float cent[3], float rad, float tmat[4][4], int sta
vec[0] = cent[0] + (x * vx[0] + y * vy[0]);
vec[1] = cent[1] + (x * vx[1] + y * vy[1]);
vec[2] = cent[2] + (x * vx[2] + y * vy[2]);
- glVertex3fv(vec);
+ immVertex3fv(pos, vec);
}
}
- glEnd();
+ immEnd();
}
/* draws a circle on x-z plane given the scaling of the circle, assuming that
* all required matrices have been set (used for drawing empties) */
-static void drawcircle_size(float size)
+static void drawcircle_size(float size, unsigned pos)
{
- glBegin(GL_LINE_LOOP);
+ immBegin(GWN_PRIM_LINE_LOOP, CIRCLE_RESOL);
/* coordinates are: cos(degrees * 11.25) = x, sin(degrees * 11.25) = y, 0.0f = z */
for (short degrees = 0; degrees < CIRCLE_RESOL; degrees++) {
float x = cosval[degrees];
float y = sinval[degrees];
-
- glVertex3f(x * size, 0.0f, y * size);
+
+ immVertex3f(pos, x * size, 0.0f, y * size);
}
-
- glEnd();
+ immEnd();
}
/* needs fixing if non-identity matrix used */
-static void drawtube(const float vec[3], float radius, float height, float tmat[4][4])
+static void imm_drawtube(const float vec[3], float radius, float height, float tmat[4][4], unsigned pos)
{
float cur[3];
- drawcircball(GL_LINE_LOOP, vec, radius, tmat);
+ imm_drawcircball(vec, radius, tmat, pos);
copy_v3_v3(cur, vec);
cur[2] += height;
- drawcircball(GL_LINE_LOOP, cur, radius, tmat);
+ imm_drawcircball(cur, radius, tmat, pos);
- glBegin(GL_LINES);
- glVertex3f(vec[0] + radius, vec[1], vec[2]);
- glVertex3f(cur[0] + radius, cur[1], cur[2]);
- glVertex3f(vec[0] - radius, vec[1], vec[2]);
- glVertex3f(cur[0] - radius, cur[1], cur[2]);
- glVertex3f(vec[0], vec[1] + radius, vec[2]);
- glVertex3f(cur[0], cur[1] + radius, cur[2]);
- glVertex3f(vec[0], vec[1] - radius, vec[2]);
- glVertex3f(cur[0], cur[1] - radius, cur[2]);
- glEnd();
+ immBegin(GWN_PRIM_LINES, 8);
+ immVertex3f(pos, vec[0] + radius, vec[1], vec[2]);
+ immVertex3f(pos, cur[0] + radius, cur[1], cur[2]);
+ immVertex3f(pos, vec[0] - radius, vec[1], vec[2]);
+ immVertex3f(pos, cur[0] - radius, cur[1], cur[2]);
+ immVertex3f(pos, vec[0], vec[1] + radius, vec[2]);
+ immVertex3f(pos, cur[0], cur[1] + radius, cur[2]);
+ immVertex3f(pos, vec[0], vec[1] - radius, vec[2]);
+ immVertex3f(pos, cur[0], cur[1] - radius, cur[2]);
+ immEnd();
}
/* needs fixing if non-identity matrix used */
-static void drawcone(const float vec[3], float radius, float height, float tmat[4][4])
+static void imm_drawcone(const float vec[3], float radius, float height, float tmat[4][4], unsigned pos)
{
float cur[3];
copy_v3_v3(cur, vec);
cur[2] += height;
- drawcircball(GL_LINE_LOOP, cur, radius, tmat);
+ imm_drawcircball(cur, radius, tmat, pos);
- glBegin(GL_LINES);
- glVertex3f(vec[0], vec[1], vec[2]);
- glVertex3f(cur[0] + radius, cur[1], cur[2]);
- glVertex3f(vec[0], vec[1], vec[2]);
- glVertex3f(cur[0] - radius, cur[1], cur[2]);
- glVertex3f(vec[0], vec[1], vec[2]);
- glVertex3f(cur[0], cur[1] + radius, cur[2]);
- glVertex3f(vec[0], vec[1], vec[2]);
- glVertex3f(cur[0], cur[1] - radius, cur[2]);
- glEnd();
+ immBegin(GWN_PRIM_LINES, 8);
+ immVertex3f(pos, vec[0], vec[1], vec[2]);
+ immVertex3f(pos, cur[0] + radius, cur[1], cur[2]);
+ immVertex3f(pos, vec[0], vec[1], vec[2]);
+ immVertex3f(pos, cur[0] - radius, cur[1], cur[2]);
+ immVertex3f(pos, vec[0], vec[1], vec[2]);
+ immVertex3f(pos, cur[0], cur[1] + radius, cur[2]);
+ immVertex3f(pos, vec[0], vec[1], vec[2]);
+ immVertex3f(pos, cur[0], cur[1] - radius, cur[2]);
+ immEnd();
}
/* return true if nothing was drawn */
-static bool drawmball(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base,
- const char dt, const short dflag, const unsigned char ob_wire_col[4])
+static bool drawmball(
+ const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, View3D *v3d, RegionView3D *rv3d, Base *base,
+ const char dt, const short dflag, const unsigned char ob_wire_col[4])
{
Object *ob = base->object;
MetaElem *ml;
@@ -6784,15 +7834,13 @@ static bool drawmball(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base,
if ((G.f & G_PICKSEL) == 0) {
unsigned char wire_col[4];
UI_GetThemeColor4ubv(TH_WIRE_EDIT, wire_col);
- glColor3ubv(wire_col);
-
- drawDispList(scene, v3d, rv3d, base, dt, dflag, wire_col);
+ drawDispList(eval_ctx, scene, view_layer, v3d, rv3d, base, dt, dflag, wire_col);
}
ml = mb->editelems->first;
}
else {
- if ((base->flag & OB_FROMDUPLI) == 0) {
- drawDispList(scene, v3d, rv3d, base, dt, dflag, ob_wire_col);
+ if ((base->flag_legacy & OB_FROMDUPLI) == 0) {
+ drawDispList(eval_ctx, scene, view_layer, v3d, rv3d, base, dt, dflag, ob_wire_col);
}
ml = mb->elems.first;
}
@@ -6809,20 +7857,25 @@ static bool drawmball(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base,
normalize_v3(imat[0]);
normalize_v3(imat[1]);
+#if 0 /* no purpose? */
if (mb->editelems == NULL) {
if ((dflag & DRAW_CONSTCOLOR) == 0) {
glColor3ubv(ob_wire_col);
}
}
-
+#endif
+
glLineWidth(1.0f);
+ const unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+
while (ml) {
/* draw radius */
if (mb->editelems) {
if ((dflag & DRAW_CONSTCOLOR) == 0) {
- if ((ml->flag & SELECT) && (ml->flag & MB_SCALE_RAD)) cpack(0xA0A0F0);
- else cpack(0x3030A0);
+ if ((ml->flag & SELECT) && (ml->flag & MB_SCALE_RAD)) imm_cpack(0xA0A0F0);
+ else imm_cpack(0x3030A0);
}
if (G.f & G_PICKSEL) {
@@ -6830,24 +7883,26 @@ static bool drawmball(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base,
GPU_select_load_id(code++);
}
}
- drawcircball(GL_LINE_LOOP, &(ml->x), ml->rad, imat);
+ imm_drawcircball(&(ml->x), ml->rad, imat, pos);
/* draw stiffness */
if (mb->editelems) {
if ((dflag & DRAW_CONSTCOLOR) == 0) {
- if ((ml->flag & SELECT) && !(ml->flag & MB_SCALE_RAD)) cpack(0xA0F0A0);
- else cpack(0x30A030);
+ if ((ml->flag & SELECT) && !(ml->flag & MB_SCALE_RAD)) imm_cpack(0xA0F0A0);
+ else imm_cpack(0x30A030);
}
if (G.f & G_PICKSEL) {
ml->selcol2 = code;
GPU_select_load_id(code++);
}
- drawcircball(GL_LINE_LOOP, &(ml->x), ml->rad * atanf(ml->s) / (float)M_PI_2, imat);
+ imm_drawcircball(&(ml->x), ml->rad * atanf(ml->s) / (float)M_PI_2, imat, pos);
}
ml = ml->next;
}
+
+ immUnbindProgram();
return false;
}
@@ -6857,6 +7912,7 @@ static void draw_forcefield(Object *ob, RegionView3D *rv3d,
PartDeflect *pd = ob->pd;
float imat[4][4], tmat[4][4];
float vec[3] = {0.0, 0.0, 0.0};
+ float draw_color[3] = {0.0f, 0.0f, 0.0f};
/* scale size of circle etc with the empty drawsize */
const float size = (ob->type == OB_EMPTY) ? ob->empty_drawsize : 1.0f;
@@ -6866,35 +7922,53 @@ static void draw_forcefield(Object *ob, RegionView3D *rv3d,
normalize_v3(imat[0]); /* we don't do this because field doesnt scale either... apart from wind! */
normalize_v3(imat[1]);
#endif
+
+ const unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformColor3fv(draw_color);
if (pd->forcefield == PFIELD_WIND) {
float force_val = pd->f_strength;
if ((dflag & DRAW_CONSTCOLOR) == 0) {
- ob_wire_color_blend_theme_id(ob_wire_col, TH_BACK, 0.5f);
+ ob_wire_color_blend_theme_id(ob_wire_col, TH_BACK, 0.5f, draw_color);
+ immUniformColor3fv(draw_color);
}
unit_m4(tmat);
force_val *= 0.1f;
- drawcircball(GL_LINE_LOOP, vec, size, tmat);
+ imm_drawcircball(vec, size, tmat, pos);
vec[2] = 0.5f * force_val;
- drawcircball(GL_LINE_LOOP, vec, size, tmat);
+ imm_drawcircball(vec, size, tmat, pos);
vec[2] = 1.0f * force_val;
- drawcircball(GL_LINE_LOOP, vec, size, tmat);
+ imm_drawcircball(vec, size, tmat, pos);
vec[2] = 1.5f * force_val;
- drawcircball(GL_LINE_LOOP, vec, size, tmat);
+ imm_drawcircball(vec, size, tmat, pos);
vec[2] = 0.0f; /* reset vec for max dist circle */
-
}
else if (pd->forcefield == PFIELD_FORCE) {
float ffall_val = pd->f_power;
- if ((dflag & DRAW_CONSTCOLOR) == 0) ob_wire_color_blend_theme_id(ob_wire_col, TH_BACK, 0.5f);
- drawcircball(GL_LINE_LOOP, vec, size, imat);
- if ((dflag & DRAW_CONSTCOLOR) == 0) ob_wire_color_blend_theme_id(ob_wire_col, TH_BACK, 0.9f - 0.4f / powf(1.5f, ffall_val));
- drawcircball(GL_LINE_LOOP, vec, size * 1.5f, imat);
- if ((dflag & DRAW_CONSTCOLOR) == 0) ob_wire_color_blend_theme_id(ob_wire_col, TH_BACK, 0.9f - 0.4f / powf(2.0f, ffall_val));
- drawcircball(GL_LINE_LOOP, vec, size * 2.0f, imat);
+ if ((dflag & DRAW_CONSTCOLOR) == 0) {
+ ob_wire_color_blend_theme_id(ob_wire_col, TH_BACK, 0.5f, draw_color);
+ immUniformColor3fv(draw_color);
+ }
+
+ imm_drawcircball(vec, size, imat, pos);
+
+ if ((dflag & DRAW_CONSTCOLOR) == 0) {
+ ob_wire_color_blend_theme_id(ob_wire_col, TH_BACK, 0.9f - 0.4f / powf(1.5f, ffall_val), draw_color);
+ immUniformColor3fv(draw_color);
+ }
+
+ imm_drawcircball(vec, size * 1.5f, imat, pos);
+
+ if ((dflag & DRAW_CONSTCOLOR) == 0) {
+ ob_wire_color_blend_theme_id(ob_wire_col, TH_BACK, 0.9f - 0.4f / powf(2.0f, ffall_val), draw_color);
+ immUniformColor3fv(draw_color);
+ }
+
+ imm_drawcircball(vec, size * 2.0f, imat, pos);
}
else if (pd->forcefield == PFIELD_VORTEX) {
float force_val = pd->f_strength;
@@ -6902,16 +7976,17 @@ static void draw_forcefield(Object *ob, RegionView3D *rv3d,
unit_m4(tmat);
if ((dflag & DRAW_CONSTCOLOR) == 0) {
- ob_wire_color_blend_theme_id(ob_wire_col, TH_BACK, 0.7f);
+ ob_wire_color_blend_theme_id(ob_wire_col, TH_BACK, 0.7f, draw_color);
+ immUniformColor3fv(draw_color);
}
if (force_val < 0) {
- drawspiral(vec, size, tmat, 1);
- drawspiral(vec, size, tmat, 16);
+ drawspiral(pos, vec, size, tmat, 1);
+ drawspiral(pos, vec, size, tmat, 16);
}
else {
- drawspiral(vec, size, tmat, -1);
- drawspiral(vec, size, tmat, -16);
+ drawspiral(pos, vec, size, tmat, -1);
+ drawspiral(pos, vec, size, tmat, -16);
}
}
else if (pd->forcefield == PFIELD_GUIDE && ob->type == OB_CURVE) {
@@ -6921,18 +7996,19 @@ static void draw_forcefield(Object *ob, RegionView3D *rv3d,
float mindist = pd->f_strength;
if ((dflag & DRAW_CONSTCOLOR) == 0) {
- ob_wire_color_blend_theme_id(ob_wire_col, TH_BACK, 0.5f);
+ ob_wire_color_blend_theme_id(ob_wire_col, TH_BACK, 0.5f, draw_color);
+ immUniformColor3fv(draw_color);
}
/* path end */
setlinestyle(3);
where_on_path(ob, 1.0f, guidevec1, guidevec2, NULL, NULL, NULL);
- drawcircball(GL_LINE_LOOP, guidevec1, mindist, imat);
+ imm_drawcircball(guidevec1, mindist, imat, pos);
/* path beginning */
setlinestyle(0);
where_on_path(ob, 0.0f, guidevec1, guidevec2, NULL, NULL, NULL);
- drawcircball(GL_LINE_LOOP, guidevec1, mindist, imat);
+ imm_drawcircball(guidevec1, mindist, imat, pos);
copy_v3_v3(vec, guidevec1); /* max center */
}
@@ -6941,16 +8017,19 @@ static void draw_forcefield(Object *ob, RegionView3D *rv3d,
setlinestyle(3);
if ((dflag & DRAW_CONSTCOLOR) == 0) {
- ob_wire_color_blend_theme_id(ob_wire_col, TH_BACK, 0.5f);
+ ob_wire_color_blend_theme_id(ob_wire_col, TH_BACK, 0.5f, draw_color);
+ immUniformColor3fv(draw_color);
}
if (pd->falloff == PFIELD_FALL_SPHERE) {
/* as last, guide curve alters it */
- if (pd->flag & PFIELD_USEMAX)
- drawcircball(GL_LINE_LOOP, vec, pd->maxdist, imat);
+ if ((pd->flag & PFIELD_USEMAX) != 0) {
+ imm_drawcircball(vec, pd->maxdist, imat, pos);
+ }
- if (pd->flag & PFIELD_USEMIN)
- drawcircball(GL_LINE_LOOP, vec, pd->mindist, imat);
+ if ((pd->flag & PFIELD_USEMIN) != 0) {
+ imm_drawcircball(vec, pd->mindist, imat, pos);
+ }
}
else if (pd->falloff == PFIELD_FALL_TUBE) {
float radius, distance;
@@ -6963,16 +8042,18 @@ static void draw_forcefield(Object *ob, RegionView3D *rv3d,
vec[2] = distance;
distance = (pd->flag & PFIELD_POSZ) ? -distance : -2.0f * distance;
- if (pd->flag & (PFIELD_USEMAX | PFIELD_USEMAXR))
- drawtube(vec, radius, distance, tmat);
+ if (pd->flag & (PFIELD_USEMAX | PFIELD_USEMAXR)) {
+ imm_drawtube(vec, radius, distance, tmat, pos);
+ }
radius = (pd->flag & PFIELD_USEMINR) ? pd->minrad : 1.0f;
distance = (pd->flag & PFIELD_USEMIN) ? pd->mindist : 0.0f;
vec[2] = distance;
distance = (pd->flag & PFIELD_POSZ) ? -distance : -2.0f * distance;
- if (pd->flag & (PFIELD_USEMIN | PFIELD_USEMINR))
- drawtube(vec, radius, distance, tmat);
+ if (pd->flag & (PFIELD_USEMIN | PFIELD_USEMINR)) {
+ imm_drawtube(vec, radius, distance, tmat, pos);
+ }
}
else if (pd->falloff == PFIELD_FALL_CONE) {
float radius, distance;
@@ -6983,46 +8064,55 @@ static void draw_forcefield(Object *ob, RegionView3D *rv3d,
distance = (pd->flag & PFIELD_USEMAX) ? pd->maxdist : 0.0f;
if (pd->flag & (PFIELD_USEMAX | PFIELD_USEMAXR)) {
- drawcone(vec, distance * sinf(radius), distance * cosf(radius), tmat);
+ imm_drawcone(vec, distance * sinf(radius), distance * cosf(radius), tmat, pos);
if ((pd->flag & PFIELD_POSZ) == 0)
- drawcone(vec, distance * sinf(radius), -distance * cosf(radius), tmat);
+ imm_drawcone(vec, distance * sinf(radius), -distance * cosf(radius), tmat, pos);
}
radius = DEG2RADF((pd->flag & PFIELD_USEMINR) ? pd->minrad : 1.0f);
distance = (pd->flag & PFIELD_USEMIN) ? pd->mindist : 0.0f;
if (pd->flag & (PFIELD_USEMIN | PFIELD_USEMINR)) {
- drawcone(vec, distance * sinf(radius), distance * cosf(radius), tmat);
+ imm_drawcone(vec, distance * sinf(radius), distance * cosf(radius), tmat, pos);
if ((pd->flag & PFIELD_POSZ) == 0)
- drawcone(vec, distance * sinf(radius), -distance * cosf(radius), tmat);
+ imm_drawcone(vec, distance * sinf(radius), -distance * cosf(radius), tmat, pos);
}
}
setlinestyle(0);
+
+ immUnbindProgram();
}
-static void draw_box(const float vec[8][3], bool solid)
+static void imm_draw_box(const float vec[8][3], bool solid, unsigned pos)
{
- glEnableClientState(GL_VERTEX_ARRAY);
- glVertexPointer(3, GL_FLOAT, 0, vec);
-
if (solid) {
- const GLubyte indices[24] = {0, 1, 2, 3, 7, 6, 5, 4, 4, 5, 1, 0, 3, 2, 6, 7, 3, 7, 4, 0, 1, 5, 6, 2};
- glDrawRangeElements(GL_QUADS, 0, 7, 24, GL_UNSIGNED_BYTE, indices);
+ /* Adpated from "Optimizing Triangle Strips for Fast Rendering" by F. Evans, S. Skiena and A. Varshney
+ * (http://www.cs.umd.edu/gvil/papers/av_ts.pdf). */
+ static const GLubyte tris_strip_indices[14] = {0, 1, 3, 2, 6, 1, 5, 0, 4, 3, 7, 6, 4, 5};
+ immBegin(GWN_PRIM_TRI_STRIP, 14);
+ for (int i = 0; i < 14; ++i) {
+ immVertex3fv(pos, vec[tris_strip_indices[i]]);
+ }
+ immEnd();
}
else {
- const GLubyte indices[24] = {0, 1, 1, 2, 2, 3, 3, 0, 0, 4, 4, 5, 5, 6, 6, 7, 7, 4, 1, 5, 2, 6, 3, 7};
- glDrawRangeElements(GL_LINES, 0, 7, 24, GL_UNSIGNED_BYTE, indices);
+ static const GLubyte line_indices[24] =
+ {0, 1, 1, 2, 2, 3, 3, 0, 0, 4, 4, 5, 5, 6, 6, 7, 7, 4, 1, 5, 2, 6, 3, 7};
+ immBegin(GWN_PRIM_LINES, 24);
+ for (int i = 0; i < 24; ++i) {
+ immVertex3fv(pos, vec[line_indices[i]]);
+ }
+ immEnd();
}
- glDisableClientState(GL_VERTEX_ARRAY);
}
-static void draw_bb_quadric(BoundBox *bb, char type, bool around_origin)
+static void imm_draw_bb(BoundBox *bb, char type, bool around_origin, const unsigned char ob_wire_col[4])
{
float size[3], cent[3];
- GLUquadricObj *qobj = gluNewQuadric();
-
- gluQuadricDrawStyle(qobj, GLU_SILHOUETTE);
+ Gwn_Batch *sphere = GPU_batch_preset_sphere_wire(0);
+ GWN_batch_program_set_builtin(sphere, GPU_SHADER_3D_UNIFORM_COLOR);
+ if (ob_wire_col) GWN_batch_uniform_4f(sphere, "color", ob_wire_col[0] / 255.0f, ob_wire_col[1] / 255.0f, ob_wire_col[2] / 255.0f, 1.0f);
BKE_boundbox_calc_size_aabb(bb, size);
@@ -7033,40 +8123,51 @@ static void draw_bb_quadric(BoundBox *bb, char type, bool around_origin)
BKE_boundbox_calc_center_aabb(bb, cent);
}
- glPushMatrix();
+ gpuPushMatrix();
+
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ if (ob_wire_col) immUniformColor3ubv(ob_wire_col);
+
if (type == OB_BOUND_SPHERE) {
float scale = MAX3(size[0], size[1], size[2]);
- glTranslate3fv(cent);
- glScalef(scale, scale, scale);
- gluSphere(qobj, 1.0, 8, 5);
+ gpuTranslate3fv(cent);
+ gpuRotateAxis(90, 'X');
+ gpuScaleUniform(scale);
+ GWN_batch_draw(sphere);
}
else if (type == OB_BOUND_CYLINDER) {
float radius = size[0] > size[1] ? size[0] : size[1];
- glTranslatef(cent[0], cent[1], cent[2] - size[2]);
- glScalef(radius, radius, 2.0f * size[2]);
- gluCylinder(qobj, 1.0, 1.0, 1.0, 8, 1);
+ gpuTranslate3f(cent[0], cent[1], cent[2] - size[2]);
+ gpuScale3f(radius, radius, 2.0f * size[2]);
+ imm_draw_cylinder_wire_3d(pos, 1.0f, 1.0f, 1.0f, 8, 1);
}
else if (type == OB_BOUND_CONE) {
float radius = size[0] > size[1] ? size[0] : size[1];
- glTranslatef(cent[0], cent[1], cent[2] - size[2]);
- glScalef(radius, radius, 2.0f * size[2]);
- gluCylinder(qobj, 1.0, 0.0, 1.0, 8, 1);
+ gpuTranslate3f(cent[0], cent[1], cent[2] - size[2]);
+ gpuScale3f(radius, radius, 2.0f * size[2]);
+ imm_draw_cylinder_wire_3d(pos, 1.0f, 0.0f, 1.0f, 8, 1);
+
}
else if (type == OB_BOUND_CAPSULE) {
float radius = size[0] > size[1] ? size[0] : size[1];
float length = size[2] > radius ? 2.0f * (size[2] - radius) : 0.0f;
- glTranslatef(cent[0], cent[1], cent[2] - length * 0.5f);
- gluCylinder(qobj, radius, radius, length, 8, 1);
- gluSphere(qobj, radius, 8, 4);
- glTranslatef(0.0, 0.0, length);
- gluSphere(qobj, radius, 8, 4);
+ gpuTranslate3f(cent[0], cent[1], cent[2] - length * 0.5f);
+ imm_draw_cylinder_wire_3d(pos, radius, radius, length, 8, 1);
+
+ gpuRotateAxis(90, 'X');
+ gpuScaleUniform(radius);
+ GWN_batch_draw(sphere);
+
+ gpuTranslate3f(0.0f, length / radius, 0.0f);
+ GWN_batch_draw(sphere);
}
- glPopMatrix();
-
- gluDeleteQuadric(qobj);
+
+ gpuPopMatrix();
+ immUnbindProgram();
}
-static void draw_bounding_volume(Object *ob, char type)
+void draw_bounding_volume(Object *ob, char type, const unsigned char ob_wire_col[4])
{
BoundBox bb_local;
BoundBox *bb = NULL;
@@ -7096,12 +8197,16 @@ static void draw_bounding_volume(Object *ob, char type)
if (bb == NULL)
return;
-
+
if (ob->gameflag & OB_BOUNDS) { /* bounds need to be drawn around origin for game engine */
if (type == OB_BOUND_BOX) {
float vec[8][3], size[3];
-
+
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ if (ob_wire_col) immUniformColor3ubv(ob_wire_col);
+
BKE_boundbox_calc_size_aabb(bb, size);
vec[0][0] = vec[1][0] = vec[2][0] = vec[3][0] = -size[0];
@@ -7111,21 +8216,31 @@ static void draw_bounding_volume(Object *ob, char type)
vec[0][2] = vec[3][2] = vec[4][2] = vec[7][2] = -size[2];
vec[1][2] = vec[2][2] = vec[5][2] = vec[6][2] = +size[2];
- draw_box(vec, false);
+ imm_draw_box(vec, false, pos);
+
+ immUnbindProgram();
}
else {
- draw_bb_quadric(bb, type, true);
+ imm_draw_bb(bb, type, true, ob_wire_col);
}
}
else {
- if (type == OB_BOUND_BOX)
- draw_box(bb->vec, false);
+ if (type == OB_BOUND_BOX) {
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ if (ob_wire_col) immUniformColor3ubv(ob_wire_col);
+
+ imm_draw_box(bb->vec, false, pos);
+
+ immUnbindProgram();
+ }
else
- draw_bb_quadric(bb, type, false);
+ imm_draw_bb(bb, type, false, ob_wire_col);
}
+
}
-static void drawtexspace(Object *ob)
+static void drawtexspace(Object *ob, const unsigned char ob_wire_col[3])
{
float vec[8][3], loc[3], size[3];
@@ -7155,26 +8270,38 @@ static void drawtexspace(Object *ob)
setlinestyle(2);
- draw_box(vec, false);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ if (ob_wire_col) {
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformColor3ubv(ob_wire_col);
+ }
+ else {
+ immBindBuiltinProgram(GPU_SHADER_3D_DEPTH_ONLY);
+ }
+
+ imm_draw_box(vec, false, pos);
+
+ immUnbindProgram();
setlinestyle(0);
}
/* draws wire outline */
static void draw_object_selected_outline(
- Scene *scene, View3D *v3d, ARegion *ar, Base *base,
+ const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, View3D *v3d, ARegion *ar, Base *base,
const unsigned char ob_wire_col[4])
{
RegionView3D *rv3d = ar->regiondata;
Object *ob = base->object;
- glDepthMask(0);
+ glDepthMask(GL_FALSE);
if (ELEM(ob->type, OB_FONT, OB_CURVE, OB_SURF)) {
bool has_faces = false;
#ifdef SEQUENCER_DAG_WORKAROUND
- ensure_curve_cache(scene, ob);
+ ensure_curve_cache(eval_ctx, scene, ob);
#endif
DerivedMesh *dm = ob->derivedFinal;
@@ -7192,46 +8319,41 @@ static void draw_object_selected_outline(
if (has_faces && ED_view3d_boundbox_clip(rv3d, ob->bb)) {
glLineWidth(UI_GetThemeValuef(TH_OUTLINE_WIDTH) * 2.0f);
if (dm) {
- draw_mesh_object_outline(v3d, ob, dm);
+ draw_mesh_object_outline(eval_ctx, v3d, ob, dm, ob_wire_col);
}
else {
/* only draw 'solid' parts of the display list as wire. */
- drawDispListwire_ex(&ob->curve_cache->disp, (DL_INDEX3 | DL_INDEX4 | DL_SURF));
+ drawDispListwire_ex(&ob->curve_cache->disp, (DL_INDEX3 | DL_INDEX4 | DL_SURF), ob_wire_col);
}
}
}
else if (ob->type == OB_MBALL) {
if (BKE_mball_is_basis(ob)) {
- if ((base->flag & OB_FROMDUPLI) == 0) {
+ if ((base->flag_legacy & OB_FROMDUPLI) == 0) {
glLineWidth(UI_GetThemeValuef(TH_OUTLINE_WIDTH) * 2.0f);
- drawDispListwire(&ob->curve_cache->disp, ob->type);
+ drawDispListwire(&ob->curve_cache->disp, ob->type, ob_wire_col);
}
}
}
else if (ob->type == OB_ARMATURE) {
- if (!(ob->mode & OB_MODE_POSE && base == scene->basact)) {
+ if (!(eval_ctx->object_mode & OB_MODE_POSE && base == view_layer->basact)) {
glLineWidth(UI_GetThemeValuef(TH_OUTLINE_WIDTH) * 2.0f);
- draw_armature(scene, v3d, ar, base, OB_WIRE, 0, ob_wire_col, true);
+ draw_armature(eval_ctx, scene, view_layer, v3d, ar, base, OB_WIRE, 0, ob_wire_col, true);
}
}
- glDepthMask(1);
+ glDepthMask(GL_TRUE);
}
static void draw_wire_extra(Scene *scene, RegionView3D *rv3d, Object *ob, const unsigned char ob_wire_col[4])
{
if (ELEM(ob->type, OB_FONT, OB_CURVE, OB_SURF, OB_MBALL)) {
-
- if (scene->obedit == ob) {
- UI_ThemeColor(TH_WIRE_EDIT);
- }
- else {
- glColor3ubv(ob_wire_col);
- }
+ unsigned char wire_edit_col[4];
+ UI_GetThemeColor4ubv(TH_WIRE_EDIT, wire_edit_col);
ED_view3d_polygon_offset(rv3d, 1.0);
- glDepthMask(0); /* disable write in zbuffer, selected edge wires show better */
- glLineWidth(1);
+ glDepthMask(GL_FALSE); /* disable write in zbuffer, selected edge wires show better */
+ glLineWidth(1.0f);
if (ELEM(ob->type, OB_FONT, OB_CURVE, OB_SURF)) {
if (ED_view3d_boundbox_clip(rv3d, ob->bb)) {
@@ -7240,23 +8362,23 @@ static void draw_wire_extra(Scene *scene, RegionView3D *rv3d, Object *ob, const
drawCurveDMWired(ob);
}
else {
- drawDispListwire(&ob->curve_cache->disp, ob->type);
+ drawDispListwire(&ob->curve_cache->disp, ob->type, (scene->obedit == ob) ? wire_edit_col : ob_wire_col);
}
}
}
else if (ob->type == OB_MBALL) {
if (BKE_mball_is_basis(ob)) {
- drawDispListwire(&ob->curve_cache->disp, ob->type);
+ drawDispListwire(&ob->curve_cache->disp, ob->type, (scene->obedit == ob) ? wire_edit_col : ob_wire_col);
}
}
- glDepthMask(1);
+ glDepthMask(GL_TRUE);
ED_view3d_polygon_offset(rv3d, 0.0);
}
}
/* should be called in view space */
-static void draw_hooks(Object *ob)
+static void draw_hooks(Object *ob, unsigned int pos)
{
for (ModifierData *md = ob->modifiers.first; md; md = md->next) {
if (md->type == eModifierType_Hook) {
@@ -7267,17 +8389,17 @@ static void draw_hooks(Object *ob)
if (hmd->object) {
setlinestyle(3);
- glBegin(GL_LINES);
- glVertex3fv(hmd->object->obmat[3]);
- glVertex3fv(vec);
- glEnd();
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex3fv(pos, hmd->object->obmat[3]);
+ immVertex3fv(pos, vec);
+ immEnd();
setlinestyle(0);
}
- glPointSize(3.0);
- glBegin(GL_POINTS);
- glVertex3fv(vec);
- glEnd();
+ glPointSize(3.0f);
+ immBegin(GWN_PRIM_POINTS, 1);
+ immVertex3fv(pos, vec);
+ immEnd();
}
}
}
@@ -7288,9 +8410,16 @@ static void draw_rigid_body_pivot(bRigidBodyJointConstraint *data,
const char *axis_str[3] = {"px", "py", "pz"};
float mat[4][4];
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+
+ if (ob_wire_col) immUniformColor3ubv(ob_wire_col);
+
eul_to_mat4(mat, &data->axX);
glLineWidth(4.0f);
setlinestyle(2);
+
+ immBegin(GWN_PRIM_LINES, 6);
for (int axis = 0; axis < 3; axis++) {
float dir[3] = {0, 0, 0};
float v[3];
@@ -7298,12 +8427,10 @@ static void draw_rigid_body_pivot(bRigidBodyJointConstraint *data,
copy_v3_v3(v, &data->pivX);
dir[axis] = 1.0f;
- glBegin(GL_LINES);
mul_m4_v3(mat, dir);
add_v3_v3(v, dir);
- glVertex3fv(&data->pivX);
- glVertex3fv(v);
- glEnd();
+ immVertex3fv(pos, &data->pivX);
+ immVertex3fv(pos, v);
/* when const color is set wirecolor is NULL - we could get the current color but
* with selection and group instancing its not needed to draw the text */
@@ -7311,15 +8438,21 @@ static void draw_rigid_body_pivot(bRigidBodyJointConstraint *data,
view3d_cached_text_draw_add(v, axis_str[axis], 2, 0, V3D_CACHE_TEXT_ASCII, ob_wire_col);
}
}
+ immEnd();
setlinestyle(0);
+ glLineWidth(1.0f);
+
+ immUnbindProgram();
}
-static void draw_object_wire_color(Scene *scene, Base *base, unsigned char r_ob_wire_col[4])
+void draw_object_wire_color(
+ const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer,
+ Base *base, unsigned char r_ob_wire_col[4])
{
Object *ob = base->object;
int colindex = 0;
- const bool is_edit = (ob->mode & OB_MODE_EDIT) != 0;
+ const bool is_edit = (eval_ctx->object_mode & OB_MODE_EDIT) != 0;
/* confusing logic here, there are 2 methods of setting the color
* 'colortab[colindex]' and 'theme_id', colindex overrides theme_id.
*
@@ -7329,23 +8462,23 @@ static void draw_object_wire_color(Scene *scene, Base *base, unsigned char r_ob_
if ((scene->obedit == NULL) &&
(G.moving & G_TRANSFORM_OBJ) &&
- (base->flag & (SELECT + BA_WAS_SEL)))
+ ((base->flag & BASE_SELECTED) || (base->flag_legacy & BA_WAS_SEL)))
{
theme_id = TH_TRANSFORM;
}
else {
/* Sets the 'colindex' */
if (ID_IS_LINKED(ob)) {
- colindex = (base->flag & (SELECT + BA_WAS_SEL)) ? 2 : 1;
+ colindex = ((base->flag & BASE_SELECTED) || (base->flag_legacy & BA_WAS_SEL)) ? 2 : 1;
}
/* Sets the 'theme_id' or fallback to wire */
else {
- if (ob->flag & OB_FROMGROUP) {
- if (base->flag & (SELECT + BA_WAS_SEL)) {
+ if ((ob->flag & OB_FROMGROUP) != 0) {
+ if ((base->flag & BASE_SELECTED) || (base->flag_legacy & BA_WAS_SEL)) {
/* uses darker active color for non-active + selected */
theme_id = TH_GROUP_ACTIVE;
- if (scene->basact != base) {
+ if (view_layer->basact != base) {
theme_shade = -32;
}
}
@@ -7354,8 +8487,8 @@ static void draw_object_wire_color(Scene *scene, Base *base, unsigned char r_ob_
}
}
else {
- if (base->flag & (SELECT + BA_WAS_SEL)) {
- theme_id = scene->basact == base ? TH_ACTIVE : TH_SELECT;
+ if ((base->flag & BASE_SELECTED) || (base->flag_legacy & BA_WAS_SEL)) {
+ theme_id = view_layer->basact == base ? TH_ACTIVE : TH_SELECT;
}
else {
if (ob->type == OB_LAMP) theme_id = TH_LAMP;
@@ -7381,10 +8514,12 @@ static void draw_object_wire_color(Scene *scene, Base *base, unsigned char r_ob_
r_ob_wire_col[3] = 255;
}
-static void draw_object_matcap_check(View3D *v3d, Object *ob)
+static void draw_object_matcap_check(
+ const EvaluationContext *eval_ctx, View3D *v3d, Object *ob)
{
/* fixed rule, active object draws as matcap */
- BLI_assert((ob->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT)) == 0);
+ BLI_assert((eval_ctx->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT)) == 0);
+ UNUSED_VARS_NDEBUG(eval_ctx);
(void)ob;
if (v3d->defmaterial == NULL) {
@@ -7409,10 +8544,11 @@ static void draw_object_matcap_check(View3D *v3d, Object *ob)
v3d->flag2 |= V3D_SHOW_SOLID_MATCAP;
}
-static void draw_rigidbody_shape(Object *ob)
+void draw_rigidbody_shape(Object *ob, const unsigned char ob_wire_col[4])
{
BoundBox *bb = NULL;
float size[3], vec[8][3];
+ unsigned int pos;
if (ob->type == OB_MESH) {
bb = BKE_mesh_boundbox_get(ob);
@@ -7425,6 +8561,10 @@ static void draw_rigidbody_shape(Object *ob)
case RB_SHAPE_BOX:
BKE_boundbox_calc_size_aabb(bb, size);
+ pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ if (ob_wire_col) immUniformColor3ubv(ob_wire_col);
+
vec[0][0] = vec[1][0] = vec[2][0] = vec[3][0] = -size[0];
vec[4][0] = vec[5][0] = vec[6][0] = vec[7][0] = +size[0];
vec[0][1] = vec[1][1] = vec[4][1] = vec[5][1] = -size[1];
@@ -7432,19 +8572,20 @@ static void draw_rigidbody_shape(Object *ob)
vec[0][2] = vec[3][2] = vec[4][2] = vec[7][2] = -size[2];
vec[1][2] = vec[2][2] = vec[5][2] = vec[6][2] = +size[2];
- draw_box(vec, false);
+ imm_draw_box(vec, false, pos);
+ immUnbindProgram();
break;
case RB_SHAPE_SPHERE:
- draw_bb_quadric(bb, OB_BOUND_SPHERE, true);
+ imm_draw_bb(bb, OB_BOUND_SPHERE, true, ob_wire_col);
break;
case RB_SHAPE_CONE:
- draw_bb_quadric(bb, OB_BOUND_CONE, true);
+ imm_draw_bb(bb, OB_BOUND_CONE, true, ob_wire_col);
break;
case RB_SHAPE_CYLINDER:
- draw_bb_quadric(bb, OB_BOUND_CYLINDER, true);
+ imm_draw_bb(bb, OB_BOUND_CYLINDER, true, ob_wire_col);
break;
case RB_SHAPE_CAPSULE:
- draw_bb_quadric(bb, OB_BOUND_CAPSULE, true);
+ imm_draw_bb(bb, OB_BOUND_CAPSULE, true, ob_wire_col);
break;
}
}
@@ -7453,17 +8594,18 @@ static void draw_rigidbody_shape(Object *ob)
* main object drawing function, draws in selection
* \param dflag (draw flag) can be DRAW_PICKING and/or DRAW_CONSTCOLOR, DRAW_SCENESET
*/
-void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short dflag)
+void draw_object(
+ const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, ARegion *ar, View3D *v3d,
+ Base *base, const short dflag)
{
ModifierData *md = NULL;
Object *ob = base->object;
Curve *cu;
RegionView3D *rv3d = ar->regiondata;
- unsigned int col = 0;
unsigned char _ob_wire_col[4]; /* dont initialize this */
const unsigned char *ob_wire_col = NULL; /* dont initialize this, use NULL crashes as a way to find invalid use */
bool zbufoff = false, is_paint = false, empty_object = false;
- const bool is_obact = (ob == OBACT);
+ const bool is_obact = (ob == OBACT(view_layer));
const bool render_override = (v3d->flag2 & V3D_RENDER_OVERRIDE) != 0;
const bool is_picking = (G.f & G_PICKSEL) != 0;
const bool has_particles = (ob->particlesystem.first != NULL);
@@ -7489,7 +8631,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
return;
}
- if (ob->mode == OB_MODE_OBJECT) {
+ if (eval_ctx->object_mode == OB_MODE_OBJECT) {
ParticleSystem *psys;
skip_object = render_override;
@@ -7503,7 +8645,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
}
}
- if (((base->flag & OB_FROMDUPLI) == 0) &&
+ if (((base->flag_legacy & OB_FROMDUPLI) == 0) &&
(md = modifiers_findByType(ob, eModifierType_Smoke)) &&
(modifier_isEnabled(scene, md, eModifierMode_Realtime)))
{
@@ -7527,9 +8669,9 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
/* xray delay? */
- if ((dflag & DRAW_PICKING) == 0 && (base->flag & OB_FROMDUPLI) == 0 && (v3d->flag2 & V3D_RENDER_SHADOW) == 0) {
+ if ((dflag & DRAW_PICKING) == 0 && (base->flag_legacy & OB_FROMDUPLI) == 0 && (v3d->flag2 & V3D_RENDER_SHADOW) == 0) {
/* don't do xray in particle mode, need the z-buffer */
- if (!(ob->mode & OB_MODE_PARTICLE_EDIT)) {
+ if (!(eval_ctx->object_mode & OB_MODE_PARTICLE_EDIT)) {
/* xray and transp are set when it is drawing the 2nd/3rd pass */
if (!v3d->xray && !v3d->transp && (ob->dtx & OB_DRAWXRAY) && !(ob->dtx & OB_DRAWTRANSP)) {
ED_view3d_after_add(&v3d->afterdraw_xray, base, dflag);
@@ -7580,10 +8722,10 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
ED_view3d_project_base(ar, base);
- draw_object_wire_color(scene, base, _ob_wire_col);
+ draw_object_wire_color(eval_ctx, scene, view_layer, base, _ob_wire_col);
ob_wire_col = _ob_wire_col;
- glColor3ubv(ob_wire_col);
+ //glColor3ubv(ob_wire_col);
}
/* maximum drawtype */
@@ -7596,14 +8738,14 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
/* faceselect exception: also draw solid when (dt == wire), except in editmode */
if (is_obact) {
- if (ob->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT)) {
+ if (eval_ctx->object_mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT)) {
if (ob->type == OB_MESH) {
if (dt < OB_SOLID) {
zbufoff = true;
dt = OB_SOLID;
}
- if (ob->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT)) {
+ if (eval_ctx->object_mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT)) {
dt = OB_PAINT;
}
@@ -7619,13 +8761,13 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
(is_paint == false && is_picking == false) &&
((v3d->flag2 & V3D_RENDER_SHADOW) == 0))
{
- draw_object_matcap_check(v3d, ob);
+ draw_object_matcap_check(eval_ctx, v3d, ob);
}
/* draw-extra supported for boundbox drawmode too */
if (dt >= OB_BOUNDBOX) {
dtx = ob->dtx;
- if (ob->mode & OB_MODE_EDIT) {
+ if (eval_ctx->object_mode & OB_MODE_EDIT) {
/* the only 2 extra drawtypes alowed in editmode */
dtx = dtx & (OB_DRAWWIRE | OB_TEXSPACE);
}
@@ -7634,16 +8776,23 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
if (!skip_object) {
/* draw outline for selected objects, mesh does itself */
if ((v3d->flag & V3D_SELECT_OUTLINE) && !render_override && ob->type != OB_MESH) {
- if (dt > OB_WIRE && (ob->mode & OB_MODE_EDIT) == 0 && (dflag & DRAW_SCENESET) == 0) {
- if (!(ob->dtx & OB_DRAWWIRE) && (ob->flag & SELECT) && !(dflag & (DRAW_PICKING | DRAW_CONSTCOLOR))) {
- draw_object_selected_outline(scene, v3d, ar, base, ob_wire_col);
+ if (dt > OB_WIRE && (eval_ctx->object_mode & OB_MODE_EDIT) == 0 && (dflag & DRAW_SCENESET) == 0) {
+ if (!(ob->dtx & OB_DRAWWIRE) && (base->flag & BASE_SELECTED) && !(dflag & (DRAW_PICKING | DRAW_CONSTCOLOR))) {
+ draw_object_selected_outline(eval_ctx, scene, view_layer, v3d, ar, base, ob_wire_col);
}
}
}
+ /* TODO Viewport: draw only for selection */
+ if ((dflag & DRAW_PICKING) == 0) {
+ if ((dt == OB_BOUNDBOX) || ELEM(ob->type, OB_EMPTY, OB_LAMP, OB_CAMERA, OB_SPEAKER)) {
+ goto afterdraw;
+ }
+ }
+
switch (ob->type) {
case OB_MESH:
- empty_object = draw_mesh_object(scene, ar, v3d, rv3d, base, dt, ob_wire_col, dflag);
+ empty_object = draw_mesh_object(eval_ctx, scene, view_layer, ar, v3d, rv3d, base, dt, ob_wire_col, dflag);
if ((dflag & DRAW_CONSTCOLOR) == 0) {
/* mesh draws wire itself */
dtx &= ~OB_DRAWWIRE;
@@ -7653,18 +8802,18 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
case OB_FONT:
cu = ob->data;
if (cu->editfont) {
- draw_editfont(scene, v3d, rv3d, base, dt, dflag, ob_wire_col);
+ draw_editfont(eval_ctx, scene, view_layer, v3d, rv3d, base, dt, dflag, ob_wire_col);
}
else if (dt == OB_BOUNDBOX) {
if ((render_override && v3d->drawtype >= OB_WIRE) == 0) {
#ifdef SEQUENCER_DAG_WORKAROUND
- ensure_curve_cache(scene, base->object);
+ ensure_curve_cache(eval_ctx, scene, base->object);
#endif
- draw_bounding_volume(ob, ob->boundtype);
+ draw_bounding_volume(ob, ob->boundtype, ob_wire_col);
}
}
else if (ED_view3d_boundbox_clip(rv3d, ob->bb)) {
- empty_object = drawDispList(scene, v3d, rv3d, base, dt, dflag, ob_wire_col);
+ empty_object = drawDispList(eval_ctx, scene, view_layer, v3d, rv3d, base, dt, dflag, ob_wire_col);
}
break;
@@ -7674,18 +8823,18 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
if (cu->editnurb) {
ListBase *nurbs = BKE_curve_editNurbs_get(cu);
- draw_editnurb(scene, v3d, rv3d, base, nurbs->first, dt, dflag, ob_wire_col);
+ draw_editnurb(eval_ctx, scene, view_layer, v3d, rv3d, base, nurbs->first, dt, dflag, ob_wire_col);
}
else if (dt == OB_BOUNDBOX) {
if ((render_override && (v3d->drawtype >= OB_WIRE)) == 0) {
#ifdef SEQUENCER_DAG_WORKAROUND
- ensure_curve_cache(scene, base->object);
+ ensure_curve_cache(eval_ctx, scene, base->object);
#endif
- draw_bounding_volume(ob, ob->boundtype);
+ draw_bounding_volume(ob, ob->boundtype, ob_wire_col);
}
}
else if (ED_view3d_boundbox_clip(rv3d, ob->bb)) {
- empty_object = drawDispList(scene, v3d, rv3d, base, dt, dflag, ob_wire_col);
+ empty_object = drawDispList(eval_ctx, scene, view_layer, v3d, rv3d, base, dt, dflag, ob_wire_col);
}
break;
case OB_MBALL:
@@ -7693,17 +8842,17 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
MetaBall *mb = ob->data;
if (mb->editelems)
- drawmball(scene, v3d, rv3d, base, dt, dflag, ob_wire_col);
+ drawmball(eval_ctx, scene, view_layer, v3d, rv3d, base, dt, dflag, ob_wire_col);
else if (dt == OB_BOUNDBOX) {
if ((render_override && (v3d->drawtype >= OB_WIRE)) == 0) {
#ifdef SEQUENCER_DAG_WORKAROUND
- ensure_curve_cache(scene, base->object);
+ ensure_curve_cache(eval_ctx, scene, base->object);
#endif
- draw_bounding_volume(ob, ob->boundtype);
+ draw_bounding_volume(ob, ob->boundtype, ob_wire_col);
}
}
else
- empty_object = drawmball(scene, v3d, rv3d, base, dt, dflag, ob_wire_col);
+ empty_object = drawmball(eval_ctx, scene, view_layer, v3d, rv3d, base, dt, dflag, ob_wire_col);
break;
}
case OB_EMPTY:
@@ -7712,7 +8861,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
draw_empty_image(ob, dflag, ob_wire_col, v3d->multiview_eye);
}
else {
- drawaxes(rv3d->viewmatob, ob->empty_drawsize, ob->empty_drawtype);
+ drawaxes(rv3d->viewmatob, ob->empty_drawsize, ob->empty_drawtype, ob_wire_col);
}
}
break;
@@ -7730,45 +8879,57 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
break;
case OB_SPEAKER:
if (!render_override)
- drawspeaker(scene, v3d, rv3d, ob, dflag);
+ drawspeaker(ob_wire_col);
break;
case OB_LATTICE:
if (!render_override) {
/* Do not allow boundbox in edit nor pose mode! */
- if ((dt == OB_BOUNDBOX) && (ob->mode & OB_MODE_EDIT))
+ if ((dt == OB_BOUNDBOX) && (eval_ctx->object_mode & OB_MODE_EDIT))
dt = OB_WIRE;
if (dt == OB_BOUNDBOX) {
- draw_bounding_volume(ob, ob->boundtype);
+ draw_bounding_volume(ob, ob->boundtype, ob_wire_col);
}
else {
#ifdef SEQUENCER_DAG_WORKAROUND
- ensure_curve_cache(scene, ob);
+ ensure_curve_cache(eval_ctx, scene, ob);
#endif
- drawlattice(v3d, ob);
+ drawlattice(v3d, ob, dflag, ob_wire_col);
}
}
break;
case OB_ARMATURE:
if (!render_override) {
/* Do not allow boundbox in edit nor pose mode! */
- if ((dt == OB_BOUNDBOX) && (ob->mode & (OB_MODE_EDIT | OB_MODE_POSE)))
+ if ((dt == OB_BOUNDBOX) && (eval_ctx->object_mode & (OB_MODE_EDIT | OB_MODE_POSE)))
dt = OB_WIRE;
if (dt == OB_BOUNDBOX) {
- draw_bounding_volume(ob, ob->boundtype);
+ draw_bounding_volume(ob, ob->boundtype, ob_wire_col);
}
else {
+ unsigned char arm_col[4];
glLineWidth(1.0f);
- empty_object = draw_armature(scene, v3d, ar, base, dt, dflag, ob_wire_col, false);
+
+ if (ob_wire_col == NULL) {
+ float fcol[4] = {0.0f, 0.0f, 0.0f, 1.0f};
+ rgba_float_to_uchar(arm_col, fcol);
+ }
+ else
+ copy_v4_v4_uchar(arm_col, ob_wire_col);
+
+ empty_object = draw_armature(eval_ctx, scene, view_layer, v3d, ar, base, dt, dflag, arm_col, false);
}
}
break;
default:
if (!render_override) {
- drawaxes(rv3d->viewmatob, 1.0, OB_ARROWS);
+ drawaxes(rv3d->viewmatob, 1.0, OB_ARROWS, ob_wire_col);
}
break;
}
+ /* TODO Viewport: some elements are being drawn for object selection only */
+afterdraw:
+
if (!render_override) {
if (ob->soft /*&& dflag & OB_SBMOTION*/) {
float mrt[3][3], msc[3][3], mtr[3][3];
@@ -7777,12 +8938,12 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
if ((sb = ob->soft)) {
if (sb->solverflags & SBSO_ESTIMATEIPO) {
- glLoadMatrixf(rv3d->viewmat);
+ gpuLoadMatrix(rv3d->viewmat);
copy_m3_m3(msc, sb->lscale);
copy_m3_m3(mrt, sb->lrot);
mul_m3_m3m3(mtr, mrt, msc);
ob_draw_RE_motion(sb->lcom, mtr, tipw, tiph, drawsize);
- glMultMatrixf(ob->obmat);
+ gpuMultMatrix(ob->obmat);
}
}
}
@@ -7799,35 +8960,28 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
{
ParticleSystem *psys;
- if ((dflag & DRAW_CONSTCOLOR) == 0) {
- /* for visibility, also while wpaint */
- if (col || (ob->flag & SELECT)) {
- cpack(0xFFFFFF);
- }
- }
//glDepthMask(GL_FALSE);
- glLoadMatrixf(rv3d->viewmat);
+ gpuLoadMatrix(rv3d->viewmat);
view3d_cached_text_draw_begin();
for (psys = ob->particlesystem.first; psys; psys = psys->next) {
/* run this so that possible child particles get cached */
- if (ob->mode & OB_MODE_PARTICLE_EDIT && is_obact) {
- PTCacheEdit *edit = PE_create_current(scene, ob);
+ if (eval_ctx->object_mode & OB_MODE_PARTICLE_EDIT && is_obact) {
+ PTCacheEdit *edit = PE_create_current(eval_ctx, scene, ob);
if (edit && edit->psys == psys)
- draw_update_ptcache_edit(scene, ob, edit);
+ draw_update_ptcache_edit(eval_ctx, scene, view_layer, ob, edit);
}
- draw_new_particle_system(scene, v3d, rv3d, base, psys, dt, dflag);
+ draw_new_particle_system(eval_ctx, scene, v3d, rv3d, base, psys, dt, dflag);
}
invert_m4_m4(ob->imat, ob->obmat);
view3d_cached_text_draw_end(v3d, ar, 0);
- glMultMatrixf(ob->obmat);
+ gpuMultMatrix(ob->obmat);
//glDepthMask(GL_TRUE);
- if (col) cpack(col);
}
/* draw edit particles last so that they can draw over child particles */
@@ -7835,13 +8989,13 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
(!scene->obedit))
{
- if (ob->mode & OB_MODE_PARTICLE_EDIT && is_obact) {
- PTCacheEdit *edit = PE_create_current(scene, ob);
+ if (eval_ctx->object_mode & OB_MODE_PARTICLE_EDIT && is_obact) {
+ PTCacheEdit *edit = PE_create_current(eval_ctx, scene, ob);
if (edit) {
- glLoadMatrixf(rv3d->viewmat);
- draw_update_ptcache_edit(scene, ob, edit);
+ gpuLoadMatrix(rv3d->viewmat);
+ draw_update_ptcache_edit(eval_ctx, scene, view_layer, ob, edit);
draw_ptcache_edit(scene, v3d, edit);
- glMultMatrixf(ob->obmat);
+ gpuMultMatrix(ob->obmat);
}
}
}
@@ -7849,21 +9003,25 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
/* draw code for smoke, only draw domains */
if (smd && smd->domain) {
SmokeDomainSettings *sds = smd->domain;
+ const bool show_smoke = (CFRA >= sds->point_cache[0]->startframe);
float viewnormal[3];
- glLoadMatrixf(rv3d->viewmat);
- glMultMatrixf(ob->obmat);
+ gpuLoadMatrix(rv3d->viewmat);
+ gpuMultMatrix(ob->obmat);
if (!render_override) {
BoundBox bb;
float p0[3], p1[3];
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ if (ob_wire_col) immUniformColor3ubv(ob_wire_col);
/* draw max domain bounds */
if ((sds->flags & MOD_SMOKE_ADAPTIVE_DOMAIN)) {
VECSUBFAC(p0, sds->p0, sds->cell_size, sds->adapt_res);
VECADDFAC(p1, sds->p1, sds->cell_size, sds->adapt_res);
BKE_boundbox_init_from_minmax(&bb, p0, p1);
- draw_box(bb.vec, false);
+ imm_draw_box(bb.vec, false, pos);
}
/* draw a single voxel to hint the user about the resolution of the fluid */
@@ -7877,11 +9035,13 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
}
BKE_boundbox_init_from_minmax(&bb, p0, p1);
- draw_box(bb.vec, false);
+ imm_draw_box(bb.vec, false, pos);
+
+ immUnbindProgram();
}
/* don't show smoke before simulation starts, this could be made an option in the future */
- if (sds->fluid && CFRA >= sds->point_cache[0]->startframe) {
+ if (sds->fluid && show_smoke) {
float p0[3], p1[3];
/* get view vector */
@@ -7930,32 +9090,40 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
}
}
- if ((ob->gameflag & OB_BOUNDS) && (ob->mode == OB_MODE_OBJECT)) {
+ if ((ob->gameflag & OB_BOUNDS) && (eval_ctx->object_mode == OB_MODE_OBJECT)) {
if (ob->boundtype != ob->collision_boundtype || (dtx & OB_DRAWBOUNDOX) == 0) {
setlinestyle(2);
- draw_bounding_volume(ob, ob->collision_boundtype);
+ draw_bounding_volume(ob, ob->collision_boundtype, ob_wire_col);
setlinestyle(0);
}
}
if (ob->rigidbody_object) {
- draw_rigidbody_shape(ob);
+ draw_rigidbody_shape(ob, ob_wire_col);
}
/* draw extra: after normal draw because of makeDispList */
if (dtx && (G.f & G_RENDER_OGL) == 0) {
if (dtx & OB_AXIS) {
- drawaxes(rv3d->viewmatob, 1.0f, OB_ARROWS);
+ if ((dflag & DRAW_CONSTCOLOR) == 0) {
+ /* prevent random colors being used */
+ drawaxes(rv3d->viewmatob, 1.0f, OB_ARROWS, ob_wire_col);
+ }
+ else {
+ drawaxes(rv3d->viewmatob, 1.0f, OB_ARROWS, NULL);
+ }
}
if (dtx & OB_DRAWBOUNDOX) {
- draw_bounding_volume(ob, ob->boundtype);
+ draw_bounding_volume(ob, ob->boundtype, ob_wire_col);
}
if (dtx & OB_TEXSPACE) {
if ((dflag & DRAW_CONSTCOLOR) == 0) {
/* prevent random colors being used */
- glColor3ubv(ob_wire_col);
+ drawtexspace(ob, ob_wire_col);
+ }
+ else {
+ drawtexspace(ob, NULL);
}
- drawtexspace(ob);
}
if (dtx & OB_DRAWNAME) {
/* patch for several 3d cards (IBM mostly) that crash on GL_SELECT with text drawing */
@@ -7982,16 +9150,21 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
{
float imat[4][4], vec[3] = {0.0f, 0.0f, 0.0f};
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+
invert_m4_m4(imat, rv3d->viewmatob);
if ((dflag & DRAW_CONSTCOLOR) == 0) {
/* prevent random colors being used */
- glColor3ubv(ob_wire_col);
+ immUniformColor3ubv(ob_wire_col);
}
setlinestyle(2);
- drawcircball(GL_LINE_LOOP, vec, ob->inertia, imat);
+ imm_drawcircball(vec, ob->inertia, imat, pos);
setlinestyle(0);
+
+ immUnbindProgram();
}
}
@@ -8001,19 +9174,19 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
/* return warning, clear temp flag */
v3d->flag2 &= ~V3D_SHOW_SOLID_MATCAP;
- glLoadMatrixf(rv3d->viewmat);
+ gpuLoadMatrix(rv3d->viewmat);
if (zbufoff) {
glDisable(GL_DEPTH_TEST);
}
- if ((base->flag & OB_FROMDUPLI) || render_override) {
+ if ((base->flag_legacy & OB_FROMDUPLI) || render_override) {
ED_view3d_clear_mats_rv3d(rv3d);
return;
}
/* object centers, need to be drawn in viewmat space for speed, but OK for picking select */
- if (!is_obact || !(ob->mode & OB_MODE_ALL_PAINT)) {
+ if (!is_obact || !(eval_ctx->object_mode & OB_MODE_ALL_PAINT)) {
int do_draw_center = -1; /* defines below are zero or positive... */
if (render_override) {
@@ -8021,7 +9194,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
}
else if (is_obact)
do_draw_center = ACTIVE;
- else if (base->flag & SELECT)
+ else if (base->flag & BASE_SELECTED)
do_draw_center = SELECT;
else if (empty_object || (v3d->flag & V3D_DRAW_CENTERS))
do_draw_center = DESELECT;
@@ -8032,10 +9205,15 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
if ((base->sx != IS_CLIPPED) &&
(U.obcenter_dia != 0.0))
{
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_POINT_FIXED_SIZE_UNIFORM_COLOR);
+ /* TODO: short term, use DEPTH_ONLY shader or set appropriate color */
+ /* TODO: long term, solve picking & selection problem better */
glPointSize(U.obcenter_dia);
- glBegin(GL_POINTS);
- glVertex3fv(ob->obmat[3]);
- glEnd();
+ immBegin(GWN_PRIM_POINTS, 1);
+ immVertex3fv(pos, ob->obmat[3]);
+ immEnd();
+ immUnbindProgram();
}
}
else if ((dflag & DRAW_CONSTCOLOR) == 0) {
@@ -8056,18 +9234,27 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
ListBase *list;
RigidBodyCon *rbc = ob->rigidbody_constraint;
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformColor3ubv(ob_wire_col);
+
/* draw hook center and offset line */
if (ob != scene->obedit)
- draw_hooks(ob);
+ draw_hooks(ob, pos);
/* help lines and so */
- if (ob != scene->obedit && ob->parent && (ob->parent->lay & v3d->lay)) {
- setlinestyle(3);
- glBegin(GL_LINES);
- glVertex3fv(ob->obmat[3]);
- glVertex3fv(ob->orig);
- glEnd();
- setlinestyle(0);
+ if (ob != scene->obedit && ob->parent) {
+ const eObjectVisibilityCheck mode = eval_ctx->mode != DAG_EVAL_VIEWPORT ?
+ OB_VISIBILITY_CHECK_FOR_RENDER :
+ OB_VISIBILITY_CHECK_FOR_VIEWPORT;
+ if (BKE_object_is_visible(ob->parent, mode)) {
+ setlinestyle(3);
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex3fv(pos, ob->obmat[3]);
+ immVertex3fv(pos, ob->orig);
+ immEnd();
+ setlinestyle(0);
+ }
}
/* Drawing the constraint lines */
@@ -8080,7 +9267,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
UI_GetThemeColor3ubv(TH_GRID, col1);
UI_make_axis_color(col1, col2, 'Z');
- glColor3ubv(col2);
+ immUniformColor3ubv(col2);
cob = BKE_constraints_make_evalob(scene, ob, NULL, CONSTRAINT_OBTYPE_OBJECT);
@@ -8105,10 +9292,10 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
if (camob) {
setlinestyle(3);
- glBegin(GL_LINES);
- glVertex3fv(camob->obmat[3]);
- glVertex3fv(ob->obmat[3]);
- glEnd();
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex3fv(pos, camob->obmat[3]);
+ immVertex3fv(pos, ob->obmat[3]);
+ immEnd();
setlinestyle(0);
}
}
@@ -8124,15 +9311,15 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
for (ct = targets.first; ct; ct = ct->next) {
/* calculate target's matrix */
if (cti->get_target_matrix)
- cti->get_target_matrix(curcon, cob, ct, BKE_scene_frame_get(scene));
+ cti->get_target_matrix(eval_ctx, curcon, cob, ct, BKE_scene_frame_get(scene));
else
unit_m4(ct->matrix);
setlinestyle(3);
- glBegin(GL_LINES);
- glVertex3fv(ct->matrix[3]);
- glVertex3fv(ob->obmat[3]);
- glEnd();
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex3fv(pos, ct->matrix[3]);
+ immVertex3fv(pos, ob->obmat[3]);
+ immEnd();
setlinestyle(0);
}
@@ -8145,21 +9332,24 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
BKE_constraints_clear_evalob(cob);
}
/* draw rigid body constraint lines */
- if (rbc) {
- UI_ThemeColor(TH_WIRE);
+ if (rbc && (rbc->ob1 || rbc->ob2)) {
+ immUniformThemeColor(TH_WIRE);
+
setlinestyle(3);
- glBegin(GL_LINES);
+ immBegin(GWN_PRIM_LINES, ((int)((bool)rbc->ob1) + (int)((bool)rbc->ob2)) * 2);
if (rbc->ob1) {
- glVertex3fv(ob->obmat[3]);
- glVertex3fv(rbc->ob1->obmat[3]);
+ immVertex3fv(pos, ob->obmat[3]);
+ immVertex3fv(pos, rbc->ob1->obmat[3]);
}
if (rbc->ob2) {
- glVertex3fv(ob->obmat[3]);
- glVertex3fv(rbc->ob2->obmat[3]);
+ immVertex3fv(pos, ob->obmat[3]);
+ immVertex3fv(pos, rbc->ob2->obmat[3]);
}
- glEnd();
+ immEnd();
setlinestyle(0);
}
+
+ immUnbindProgram();
}
ED_view3d_clear_mats_rv3d(rv3d);
@@ -8170,10 +9360,12 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
* Drawing for selection picking,
* caller must have called 'GPU_select_load_id(base->selcode)' first.
*/
-void draw_object_select(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short dflag)
+void draw_object_select(
+ const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, ARegion *ar, View3D *v3d,
+ Base *base, const short dflag)
{
BLI_assert(dflag & DRAW_PICKING && dflag & DRAW_CONSTCOLOR);
- draw_object(scene, ar, v3d, base, dflag);
+ draw_object(eval_ctx, scene, view_layer, ar, v3d, base, dflag);
/* we draw duplicators for selection too */
if ((base->object->transflag & OB_DUPLI)) {
@@ -8181,13 +9373,11 @@ void draw_object_select(Scene *scene, ARegion *ar, View3D *v3d, Base *base, cons
DupliObject *dob;
Base tbase;
- tbase.flag = OB_FROMDUPLI;
- lb = object_duplilist(G.main->eval_ctx, scene, base->object);
+ tbase.flag_legacy = OB_FROMDUPLI;
+ lb = object_duplilist(eval_ctx, scene, base->object);
for (dob = lb->first; dob; dob = dob->next) {
float omat[4][4];
- char dt;
- short dtx;
tbase.object = dob->ob;
copy_m4_m4(omat, dob->ob->obmat);
@@ -8195,10 +9385,10 @@ void draw_object_select(Scene *scene, ARegion *ar, View3D *v3d, Base *base, cons
/* extra service: draw the duplicator in drawtype of parent */
/* MIN2 for the drawtype to allow bounding box objects in groups for lods */
- dt = tbase.object->dt; tbase.object->dt = MIN2(tbase.object->dt, base->object->dt);
- dtx = tbase.object->dtx; tbase.object->dtx = base->object->dtx;
+ char dt = tbase.object->dt; tbase.object->dt = MIN2(tbase.object->dt, base->object->dt);
+ short dtx = tbase.object->dtx; tbase.object->dtx = base->object->dtx;
- draw_object(scene, ar, v3d, &tbase, dflag);
+ draw_object(eval_ctx, scene, view_layer, ar, v3d, &tbase, dflag);
tbase.object->dt = dt;
tbase.object->dtx = dtx;
@@ -8211,6 +9401,7 @@ void draw_object_select(Scene *scene, ARegion *ar, View3D *v3d, Base *base, cons
/* ***************** BACKBUF SEL (BBS) ********* */
+#ifdef USE_MESH_DM_SELECT
static void bbs_obmode_mesh_verts__mapFunc(void *userData, int index, const float co[3],
const float UNUSED(no_f[3]), const short UNUSED(no_s[3]))
{
@@ -8218,8 +9409,10 @@ static void bbs_obmode_mesh_verts__mapFunc(void *userData, int index, const floa
MVert *mv = &data->mvert[index];
if (!(mv->flag & ME_HIDE)) {
- GPU_select_index_set(data->offset + index);
- glVertex3fv(co);
+ int selcol;
+ GPU_select_index_get(data->offset + index, &selcol);
+ immAttrib1u(data->col, selcol);
+ immVertex3fv(data->pos, co);
}
}
@@ -8230,12 +9423,36 @@ static void bbs_obmode_mesh_verts(Object *ob, DerivedMesh *dm, int offset)
MVert *mvert = me->mvert;
data.mvert = mvert;
data.offset = offset;
+
+ const int imm_len = dm->getNumVerts(dm);
+
+ if (imm_len == 0) return;
+
+ Gwn_VertFormat *format = immVertexFormat();
+ data.pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ data.col = GWN_vertformat_attr_add(format, "color", GWN_COMP_U32, 1, GWN_FETCH_INT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_FLAT_COLOR_U32);
+
glPointSize(UI_GetThemeValuef(TH_VERTEX_SIZE));
- glBegin(GL_POINTS);
+
+ immBeginAtMost(GWN_PRIM_POINTS, imm_len);
dm->foreachMappedVert(dm, bbs_obmode_mesh_verts__mapFunc, &data, DM_FOREACH_NOP);
- glEnd();
+ immEnd();
+
+ immUnbindProgram();
}
+#else
+static void bbs_obmode_mesh_verts(Object *ob, DerivedMesh *UNUSED(dm), int offset)
+{
+ Mesh *me = ob->data;
+ Gwn_Batch *batch = DRW_mesh_batch_cache_get_verts_with_select_id(me, offset);
+ GWN_batch_program_set_builtin(batch, GPU_SHADER_3D_FLAT_COLOR_U32);
+ GWN_batch_draw(batch);
+}
+#endif
+#ifdef USE_MESH_DM_SELECT
static void bbs_mesh_verts__mapFunc(void *userData, int index, const float co[3],
const float UNUSED(no_f[3]), const short UNUSED(no_s[3]))
{
@@ -8243,98 +9460,225 @@ static void bbs_mesh_verts__mapFunc(void *userData, int index, const float co[3]
BMVert *eve = BM_vert_at_index(data->bm, index);
if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) {
- GPU_select_index_set(data->offset + index);
- glVertex3fv(co);
+ int selcol;
+ GPU_select_index_get(data->offset + index, &selcol);
+ immAttrib1u(data->col, selcol);
+ immVertex3fv(data->pos, co);
}
}
static void bbs_mesh_verts(BMEditMesh *em, DerivedMesh *dm, int offset)
{
- drawBMOffset_userData data = {em->bm, offset};
+ drawBMOffset_userData data;
+ data.bm = em->bm;
+ data.offset = offset;
+ Gwn_VertFormat *format = immVertexFormat();
+ data.pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ data.col = GWN_vertformat_attr_add(format, "color", GWN_COMP_U32, 1, GWN_FETCH_INT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_FLAT_COLOR_U32);
+
glPointSize(UI_GetThemeValuef(TH_VERTEX_SIZE));
- glBegin(GL_POINTS);
+
+ immBeginAtMost(GWN_PRIM_POINTS, em->bm->totvert);
dm->foreachMappedVert(dm, bbs_mesh_verts__mapFunc, &data, DM_FOREACH_NOP);
- glEnd();
+ immEnd();
+
+ immUnbindProgram();
}
+#else
+static void bbs_mesh_verts(BMEditMesh *em, DerivedMesh *UNUSED(dm), int offset)
+{
+ glPointSize(UI_GetThemeValuef(TH_VERTEX_SIZE));
-static DMDrawOption bbs_mesh_wire__setDrawOptions(void *userData, int index)
+ Mesh *me = em->ob->data;
+ Gwn_Batch *batch = DRW_mesh_batch_cache_get_verts_with_select_id(me, offset);
+ GWN_batch_program_set_builtin(batch, GPU_SHADER_3D_FLAT_COLOR_U32);
+ GWN_batch_draw(batch);
+}
+#endif
+
+#ifdef USE_MESH_DM_SELECT
+static void bbs_mesh_wire__mapFunc(void *userData, int index, const float v0co[3], const float v1co[3])
{
drawBMOffset_userData *data = userData;
BMEdge *eed = BM_edge_at_index(data->bm, index);
if (!BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) {
- GPU_select_index_set(data->offset + index);
- return DM_DRAW_OPTION_NORMAL;
- }
- else {
- return DM_DRAW_OPTION_SKIP;
+ int selcol;
+ GPU_select_index_get(data->offset + index, &selcol);
+ immAttrib1u(data->col, selcol);
+ immVertex3fv(data->pos, v0co);
+ immVertex3fv(data->pos, v1co);
}
}
+
static void bbs_mesh_wire(BMEditMesh *em, DerivedMesh *dm, int offset)
{
- drawBMOffset_userData data = {em->bm, offset};
- glLineWidth(1);
- dm->drawMappedEdges(dm, bbs_mesh_wire__setDrawOptions, &data);
+ drawBMOffset_userData data;
+ data.bm = em->bm;
+ data.offset = offset;
+
+ Gwn_VertFormat *format = immVertexFormat();
+
+ const int imm_len = dm->getNumEdges(dm) * 2;
+
+ if (imm_len == 0) return;
+
+ data.pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ data.col = GWN_vertformat_attr_add(format, "color", GWN_COMP_U32, 1, GWN_FETCH_INT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_FLAT_COLOR_U32);
+
+ glLineWidth(1.0f);
+
+ immBeginAtMost(GWN_PRIM_LINES, imm_len);
+ dm->foreachMappedEdge(dm, bbs_mesh_wire__mapFunc, &data);
+ immEnd();
+
+ immUnbindProgram();
+}
+#else
+static void bbs_mesh_wire(BMEditMesh *em, DerivedMesh *UNUSED(dm), int offset)
+{
+ glLineWidth(1.0f);
+
+ Mesh *me = em->ob->data;
+ Gwn_Batch *batch = DRW_mesh_batch_cache_get_edges_with_select_id(me, offset);
+ GWN_batch_program_set_builtin(batch, GPU_SHADER_3D_FLAT_COLOR_U32);
+ GWN_batch_draw(batch);
}
+#endif
-/**
- * dont set #GPU_framebuffer_index_set. just use to mask other
- */
-static DMDrawOption bbs_mesh_mask__setSolidDrawOptions(void *userData, int index)
+#ifdef USE_MESH_DM_SELECT
+static void bbs_mesh_face(BMEditMesh *em, DerivedMesh *dm, const bool use_select)
{
- BMFace *efa = BM_face_at_index(userData, index);
-
- if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) {
- return DM_DRAW_OPTION_NORMAL;
+ UNUSED_VARS(dm);
+
+ drawBMOffset_userData data;
+ data.bm = em->bm;
+
+ const int tri_len = em->tottri;
+ const int imm_len = tri_len * 3;
+ const char hflag_skip = use_select ? BM_ELEM_HIDDEN : (BM_ELEM_HIDDEN | BM_ELEM_SELECT);
+
+ if (imm_len == 0) return;
+
+ Gwn_VertFormat *format = immVertexFormat();
+ data.pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ data.col = GWN_vertformat_attr_add(format, "color", GWN_COMP_U32, 1, GWN_FETCH_INT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_FLAT_COLOR_U32);
+
+ immBeginAtMost(GWN_PRIM_TRIS, imm_len);
+
+ if (use_select == false) {
+ int selcol;
+ GPU_select_index_get(0, &selcol);
+ immAttrib1u(data.col, selcol);
}
- else {
- return DM_DRAW_OPTION_SKIP;
+
+ int index = 0;
+ while (index < tri_len) {
+ const BMFace *f = em->looptris[index][0]->f;
+ const int ntris = f->len - 2;
+ if (!BM_elem_flag_test(f, hflag_skip)) {
+ if (use_select) {
+ int selcol;
+ GPU_select_index_get(BM_elem_index_get(f) + 1, &selcol);
+ immAttrib1u(data.col, selcol);
+ }
+ for (int t = 0; t < ntris; t++) {
+ immVertex3fv(data.pos, em->looptris[index][0]->v->co);
+ immVertex3fv(data.pos, em->looptris[index][1]->v->co);
+ immVertex3fv(data.pos, em->looptris[index][2]->v->co);
+ index++;
+ }
+ }
+ else {
+ index += ntris;
+ }
}
-}
+ immEnd();
-static DMDrawOption bbs_mesh_solid__setSolidDrawOptions(void *userData, int index)
+ immUnbindProgram();
+}
+#else
+static void bbs_mesh_face(BMEditMesh *em, DerivedMesh *UNUSED(dm), const bool use_select)
{
- BMFace *efa = BM_face_at_index(userData, index);
+ Mesh *me = em->ob->data;
+ Gwn_Batch *batch;
- if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) {
- GPU_select_index_set(index + 1);
- return DM_DRAW_OPTION_NORMAL;
+ if (use_select) {
+ batch = DRW_mesh_batch_cache_get_triangles_with_select_id(me, true, 1);
+ GWN_batch_program_set_builtin(batch, GPU_SHADER_3D_FLAT_COLOR_U32);
+ GWN_batch_draw(batch);
}
else {
- return DM_DRAW_OPTION_SKIP;
+ int selcol;
+ GPU_select_index_get(0, &selcol);
+ batch = DRW_mesh_batch_cache_get_triangles_with_select_mask(me, true);
+ GWN_batch_program_set_builtin(batch, GPU_SHADER_3D_UNIFORM_COLOR_U32);
+ GWN_batch_uniform_1i(batch, "color", selcol);
+ GWN_batch_draw(batch);
}
}
+#endif
+#ifdef USE_MESH_DM_SELECT
static void bbs_mesh_solid__drawCenter(void *userData, int index, const float cent[3], const float UNUSED(no[3]))
{
+ drawBMOffset_userData *data = (drawBMOffset_userData *)userData;
BMFace *efa = BM_face_at_index(userData, index);
if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) {
- GPU_select_index_set(index + 1);
-
- glVertex3fv(cent);
+ int selcol;
+ GPU_select_index_get(index + 1, &selcol);
+ immAttrib1u(data->col, selcol);
+ immVertex3fv(data->pos, cent);
}
}
+static void bbs_mesh_face_dot(BMEditMesh *em, DerivedMesh *dm)
+{
+ drawBMOffset_userData data; /* don't use offset */
+ data.bm = em->bm;
+ Gwn_VertFormat *format = immVertexFormat();
+ data.pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ data.col = GWN_vertformat_attr_add(format, "color", GWN_COMP_U32, 1, GWN_FETCH_INT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_FLAT_COLOR_U32);
+
+ glPointSize(UI_GetThemeValuef(TH_FACEDOT_SIZE));
+
+ immBeginAtMost(GWN_PRIM_POINTS, em->bm->totface);
+ dm->foreachMappedFaceCenter(dm, bbs_mesh_solid__drawCenter, &data, DM_FOREACH_NOP);
+ immEnd();
+
+ immUnbindProgram();
+}
+#else
+static void bbs_mesh_face_dot(BMEditMesh *em, DerivedMesh *UNUSED(dm))
+{
+ Mesh *me = em->ob->data;
+ Gwn_Batch *batch = DRW_mesh_batch_cache_get_facedots_with_select_id(me, 1);
+ GWN_batch_program_set_builtin(batch, GPU_SHADER_3D_FLAT_COLOR_U32);
+ GWN_batch_draw(batch);
+}
+#endif
+
/* two options, facecolors or black */
static void bbs_mesh_solid_EM(BMEditMesh *em, Scene *scene, View3D *v3d,
Object *ob, DerivedMesh *dm, bool use_faceselect)
{
- cpack(0);
-
if (use_faceselect) {
- dm->drawMappedFaces(dm, bbs_mesh_solid__setSolidDrawOptions, NULL, NULL, em->bm, DM_DRAW_SKIP_HIDDEN | DM_DRAW_SELECT_USE_EDITMODE);
+ bbs_mesh_face(em, dm, true);
if (check_ob_drawface_dot(scene, v3d, ob->dt)) {
- glPointSize(UI_GetThemeValuef(TH_FACEDOT_SIZE));
-
- glBegin(GL_POINTS);
- dm->foreachMappedFaceCenter(dm, bbs_mesh_solid__drawCenter, em->bm, DM_FOREACH_NOP);
- glEnd();
+ bbs_mesh_face_dot(em, dm);
}
-
}
else {
- dm->drawMappedFaces(dm, bbs_mesh_mask__setSolidDrawOptions, NULL, NULL, em->bm, DM_DRAW_SKIP_SELECT | DM_DRAW_SKIP_HIDDEN | DM_DRAW_SELECT_USE_EDITMODE);
+ bbs_mesh_face(em, dm, false);
}
}
@@ -8349,7 +9693,6 @@ static DMDrawOption bbs_mesh_solid_hide__setDrawOpts(void *userData, int index)
Mesh *me = userData;
if (!(me->mpoly[index].flag & ME_HIDE)) {
- GPU_select_index_set(index + 1);
return DM_DRAW_OPTION_NORMAL;
}
else {
@@ -8357,6 +9700,7 @@ static DMDrawOption bbs_mesh_solid_hide__setDrawOpts(void *userData, int index)
}
}
+#ifdef USE_MESH_DM_SELECT
/* must have called GPU_framebuffer_index_set beforehand */
static DMDrawOption bbs_mesh_solid_hide2__setDrawOpts(void *userData, int index)
{
@@ -8370,11 +9714,10 @@ static DMDrawOption bbs_mesh_solid_hide2__setDrawOpts(void *userData, int index)
}
}
-static void bbs_mesh_solid_verts(Scene *scene, Object *ob)
+static void bbs_mesh_solid_verts(const EvaluationContext *eval_ctx, Scene *scene, Object *ob)
{
Mesh *me = ob->data;
- DerivedMesh *dm = mesh_get_derived_final(scene, ob, scene->customdata_mask);
- glColor3ub(0, 0, 0);
+ DerivedMesh *dm = mesh_get_derived_final(eval_ctx, scene, ob, scene->customdata_mask);
DM_update_materials(dm, ob);
@@ -8390,40 +9733,64 @@ static void bbs_mesh_solid_verts(Scene *scene, Object *ob)
bm_vertoffs = me->totvert + 1;
dm->release(dm);
}
-
-static void bbs_mesh_solid_faces(Scene *scene, Object *ob)
+#else
+static void bbs_mesh_solid_verts(const EvaluationContext *UNUSED(eval_ctx), Scene *UNUSED(scene), Object *ob)
{
- DerivedMesh *dm = mesh_get_derived_final(scene, ob, scene->customdata_mask);
Mesh *me = ob->data;
-
- glColor3ub(0, 0, 0);
- DM_update_materials(dm, ob);
+ /* Only draw faces to mask out verts, we don't want their selection ID's. */
+ const int G_f_orig = G.f;
+ G.f &= ~G_BACKBUFSEL;
- if ((me->editflag & ME_EDIT_PAINT_FACE_SEL))
- dm->drawMappedFaces(dm, bbs_mesh_solid_hide__setDrawOpts, NULL, NULL, me, DM_DRAW_SKIP_HIDDEN);
- else
- dm->drawMappedFaces(dm, bbs_mesh_solid__setDrawOpts, NULL, NULL, me, 0);
+ {
+ int selcol;
+ Gwn_Batch *batch;
+ GPU_select_index_get(0, &selcol);
+ batch = DRW_mesh_batch_cache_get_triangles_with_select_mask(me, true);
+ GWN_batch_program_set_builtin(batch, GPU_SHADER_3D_UNIFORM_COLOR_U32);
+ GWN_batch_uniform_1i(batch, "color", selcol);
+ GWN_batch_draw(batch);
+ }
- dm->release(dm);
+ G.f |= (G_f_orig & G_BACKBUFSEL);
+
+ bbs_obmode_mesh_verts(ob, NULL, 1);
+ bm_vertoffs = me->totvert + 1;
}
+#endif
-void draw_object_backbufsel(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob)
+static void bbs_mesh_solid_faces(Scene *scene, Object *ob)
+{
+ Mesh *me = ob->data;
+ UNUSED_VARS(scene, bbs_mesh_solid_hide__setDrawOpts, bbs_mesh_solid__setDrawOpts);
+ Gwn_Batch *batch;
+ if ((me->editflag & ME_EDIT_PAINT_FACE_SEL)) {
+ batch = DRW_mesh_batch_cache_get_triangles_with_select_id(me, true, 1);
+ }
+ else {
+ batch = DRW_mesh_batch_cache_get_triangles_with_select_id(me, false, 1);
+ }
+ GWN_batch_program_set_builtin(batch, GPU_SHADER_3D_FLAT_COLOR_U32);
+ GWN_batch_draw(batch);
+}
+
+void draw_object_backbufsel(
+ const EvaluationContext *eval_ctx, Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob)
{
ToolSettings *ts = scene->toolsettings;
- glMultMatrixf(ob->obmat);
+ gpuMultMatrix(ob->obmat);
glClearDepth(1.0); glClear(GL_DEPTH_BUFFER_BIT);
glEnable(GL_DEPTH_TEST);
switch (ob->type) {
case OB_MESH:
- if (ob->mode & OB_MODE_EDIT) {
+ if (eval_ctx->object_mode & OB_MODE_EDIT) {
Mesh *me = ob->data;
BMEditMesh *em = me->edit_btmesh;
- DerivedMesh *dm = editbmesh_get_derived_cage(scene, ob, em, CD_MASK_BAREMESH);
+ DerivedMesh *dm = editbmesh_get_derived_cage(eval_ctx, scene, ob, em, CD_MASK_BAREMESH);
BM_mesh_elem_table_ensure(em->bm, BM_VERT | BM_EDGE | BM_FACE);
@@ -8465,9 +9832,9 @@ void draw_object_backbufsel(Scene *scene, View3D *v3d, RegionView3D *rv3d, Objec
Mesh *me = ob->data;
if ((me->editflag & ME_EDIT_PAINT_VERT_SEL) &&
/* currently vertex select supports weight paint and vertex paint*/
- ((ob->mode & OB_MODE_WEIGHT_PAINT) || (ob->mode & OB_MODE_VERTEX_PAINT)))
+ ((eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT) || (eval_ctx->object_mode & OB_MODE_VERTEX_PAINT)))
{
- bbs_mesh_solid_verts(scene, ob);
+ bbs_mesh_solid_verts(eval_ctx, scene, ob);
}
else {
bbs_mesh_solid_faces(scene, ob);
@@ -8479,7 +9846,7 @@ void draw_object_backbufsel(Scene *scene, View3D *v3d, RegionView3D *rv3d, Objec
break;
}
- glLoadMatrixf(rv3d->viewmat);
+ gpuLoadMatrix(rv3d->viewmat);
}
@@ -8487,22 +9854,24 @@ void draw_object_backbufsel(Scene *scene, View3D *v3d, RegionView3D *rv3d, Objec
/* assumes all matrices/etc set OK */
/* helper function for drawing object instances - meshes */
-static void draw_object_mesh_instance(Scene *scene, View3D *v3d, RegionView3D *rv3d,
- Object *ob, const short dt, int outline)
+static void draw_object_mesh_instance(
+ const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, View3D *v3d, RegionView3D *rv3d,
+ Object *ob, const short dt, int outline, const unsigned char ob_wire_col[4])
{
Mesh *me = ob->data;
DerivedMesh *dm = NULL, *edm = NULL;
- if (ob->mode & OB_MODE_EDIT) {
+ if (eval_ctx->object_mode & OB_MODE_EDIT) {
edm = editbmesh_get_derived_base(ob, me->edit_btmesh, CD_MASK_BAREMESH);
DM_update_materials(edm, ob);
}
else {
- dm = mesh_get_derived_final(scene, ob, CD_MASK_BAREMESH);
+ dm = mesh_get_derived_final(eval_ctx, scene, ob, CD_MASK_BAREMESH);
DM_update_materials(dm, ob);
}
if (dt <= OB_WIRE) {
+ glColor4ubv(ob_wire_col);
if (dm)
dm->drawEdges(dm, 1, 0);
else if (edm)
@@ -8510,11 +9879,11 @@ static void draw_object_mesh_instance(Scene *scene, View3D *v3d, RegionView3D *r
}
else {
if (outline)
- draw_mesh_object_outline(v3d, ob, dm ? dm : edm);
+ draw_mesh_object_outline(eval_ctx, v3d, ob, dm ? dm : edm, ob_wire_col);
if (dm) {
- bool glsl = draw_glsl_material(scene, ob, v3d, dt);
- GPU_begin_object_materials(v3d, rv3d, scene, ob, glsl, NULL);
+ bool glsl = draw_glsl_material(eval_ctx, scene, view_layer, ob, v3d, dt);
+ GPU_begin_object_materials(v3d, rv3d, scene, view_layer, ob, glsl, eval_ctx->object_mode, NULL);
}
glFrontFace((ob->transflag & OB_NEG_SCALE) ? GL_CW : GL_CCW);
@@ -8533,23 +9902,153 @@ static void draw_object_mesh_instance(Scene *scene, View3D *v3d, RegionView3D *r
if (dm) dm->release(dm);
}
-void draw_object_instance(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob, const char dt, int outline)
+void draw_object_instance(const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, View3D *v3d, RegionView3D *rv3d, Object *ob, const char dt, int outline, const float wire_col[4])
{
if (ob == NULL)
return;
+ unsigned char bcol[4];
+ rgba_float_to_uchar(bcol, wire_col);
+
switch (ob->type) {
case OB_MESH:
- draw_object_mesh_instance(scene, v3d, rv3d, ob, dt, outline);
+ draw_object_mesh_instance(eval_ctx, scene, view_layer, v3d, rv3d, ob, dt, outline, bcol);
break;
case OB_EMPTY:
if (ob->empty_drawtype == OB_EMPTY_IMAGE) {
- /* CONSTCOLOR == no wire outline */
- draw_empty_image(ob, DRAW_CONSTCOLOR, NULL, v3d->multiview_eye);
+ draw_empty_image(ob, 0, bcol, v3d->multiview_eye);
}
else {
- drawaxes(rv3d->viewmatob, ob->empty_drawsize, ob->empty_drawtype);
+ drawaxes(rv3d->viewmatob, ob->empty_drawsize, ob->empty_drawtype, bcol);
}
break;
}
}
+
+void ED_draw_object_facemap(
+ const EvaluationContext *eval_ctx, Scene *scene, Object *ob, const float col[4], const int facemap)
+{
+ DerivedMesh *dm = NULL;
+
+ /* happens on undo */
+ if (ob->type != OB_MESH || !ob->data)
+ return;
+
+ /* Temporary, happens on undo, would resolve but will eventually move away from DM. */
+ if (ob->derivedFinal == NULL) {
+ return;
+ }
+
+ dm = mesh_get_derived_final(eval_ctx, scene, ob, CD_MASK_BAREMESH);
+ if (!dm || !CustomData_has_layer(&dm->polyData, CD_FACEMAP))
+ return;
+
+
+ glFrontFace((ob->transflag & OB_NEG_SCALE) ? GL_CW : GL_CCW);
+
+#if 0
+ DM_update_materials(dm, ob);
+
+ /* add polygon offset so we draw above the original surface */
+ glPolygonOffset(1.0, 1.0);
+
+ GPU_facemap_setup(dm);
+
+ glColor4fv(col);
+
+ gpuPushAttrib(GL_ENABLE_BIT);
+ glEnable(GL_BLEND);
+ glDisable(GL_LIGHTING);
+
+ /* always draw using backface culling */
+ glEnable(GL_CULL_FACE);
+ glCullFace(GL_BACK);
+
+ if (dm->drawObject->facemapindices) {
+ glDrawElements(GL_TRIANGLES, dm->drawObject->facemap_count[facemap] * 3, GL_UNSIGNED_INT,
+ (int *)NULL + dm->drawObject->facemap_start[facemap] * 3);
+ }
+ gpuPopAttrib();
+
+ GPU_buffers_unbind();
+
+ glPolygonOffset(0.0, 0.0);
+
+#else
+
+ /* Just to create the data to pass to immediate mode, grr! */
+ Mesh *me = ob->data;
+ const int *facemap_data = CustomData_get_layer(&me->pdata, CD_FACEMAP);
+ if (facemap_data) {
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformColor4fv(col);
+
+ /* XXX, alpha isn't working yet, not sure why. */
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ glEnable(GL_BLEND);
+
+ MVert *mvert;
+
+ MPoly *mpoly;
+ int mpoly_len;
+
+ MLoop *mloop;
+ int mloop_len;
+
+ if (dm && CustomData_has_layer(&dm->polyData, CD_FACEMAP)) {
+ mvert = dm->getVertArray(dm);
+ mpoly = dm->getPolyArray(dm);
+ mloop = dm->getLoopArray(dm);
+
+ mpoly_len = dm->getNumPolys(dm);
+ mloop_len = dm->getNumLoops(dm);
+
+ facemap_data = CustomData_get_layer(&dm->polyData, CD_FACEMAP);
+ }
+ else {
+ mvert = me->mvert;
+ mpoly = me->mpoly;
+ mloop = me->mloop;
+
+ mpoly_len = me->totpoly;
+ mloop_len = me->totloop;
+
+ facemap_data = CustomData_get_layer(&me->pdata, CD_FACEMAP);
+ }
+
+ /* use gawain immediate mode fore now */
+ const int looptris_len = poly_to_tri_count(mpoly_len, mloop_len);
+ immBeginAtMost(GWN_PRIM_TRIS, looptris_len * 3);
+
+ MPoly *mp;
+ int i;
+ for (mp = mpoly, i = 0; i < mpoly_len; i++, mp++) {
+ if (facemap_data[i] == facemap) {
+ /* Weak, fan-fill, use until we have derived-mesh replaced. */
+ const MLoop *ml_start = &mloop[mp->loopstart];
+ const MLoop *ml_a = ml_start + 1;
+ const MLoop *ml_b = ml_start + 2;
+ for (int j = 2; j < mp->totloop; j++) {
+ immVertex3fv(pos, mvert[ml_start->v].co);
+ immVertex3fv(pos, mvert[ml_a->v].co);
+ immVertex3fv(pos, mvert[ml_b->v].co);
+
+ ml_a++;
+ ml_b++;
+ }
+ }
+ }
+ immEnd();
+
+ immUnbindProgram();
+
+ glDisable(GL_BLEND);
+ }
+#endif
+
+ dm->release(dm);
+}
+
diff --git a/source/blender/editors/space_view3d/drawsimdebug.c b/source/blender/editors/space_view3d/drawsimdebug.c
index 3f23d4aa09a..14708ca67bc 100644
--- a/source/blender/editors/space_view3d/drawsimdebug.c
+++ b/source/blender/editors/space_view3d/drawsimdebug.c
@@ -40,102 +40,137 @@
#include "BKE_effect.h"
-#include "view3d_intern.h"
+#include "GPU_immediate.h"
+#include "GPU_matrix.h"
-#include "BIF_gl.h"
+#include "view3d_intern.h"
static void draw_sim_debug_elements(SimDebugData *debug_data, float imat[4][4])
{
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_FLAT_COLOR);
+
+ /* count element types */
GHashIterator iter;
+ int num_dots = 0;
+ int num_circles = 0;
+ int num_lines = 0;
+ int num_vectors = 0;
+ for (BLI_ghashIterator_init(&iter, debug_data->gh); !BLI_ghashIterator_done(&iter); BLI_ghashIterator_step(&iter)) {
+ SimDebugElement *elem = BLI_ghashIterator_getValue(&iter);
+ switch (elem->type) {
+ case SIM_DEBUG_ELEM_DOT: ++num_dots; break;
+ case SIM_DEBUG_ELEM_CIRCLE: ++num_circles; break;
+ case SIM_DEBUG_ELEM_LINE: ++num_lines; break;
+ case SIM_DEBUG_ELEM_VECTOR: ++num_vectors; break;
+ }
+ }
/**** dots ****/
glPointSize(3.0f);
- glBegin(GL_POINTS);
+ immBegin(GWN_PRIM_POINTS, num_dots);
for (BLI_ghashIterator_init(&iter, debug_data->gh); !BLI_ghashIterator_done(&iter); BLI_ghashIterator_step(&iter)) {
SimDebugElement *elem = BLI_ghashIterator_getValue(&iter);
if (elem->type != SIM_DEBUG_ELEM_DOT)
continue;
- glColor3f(elem->color[0], elem->color[1], elem->color[2]);
- glVertex3f(elem->v1[0], elem->v1[1], elem->v1[2]);
+ immAttrib3fv(color, elem->color);
+ immVertex3fv(pos, elem->v1);
}
- glEnd();
+ immEnd();
/**** circles ****/
{
- float circle[16][2] = {
+#define CIRCLERES 16
+ float circle[CIRCLERES][2] = {
{0.000000, 1.000000}, {0.382683, 0.923880}, {0.707107, 0.707107}, {0.923880, 0.382683},
{1.000000, -0.000000}, {0.923880, -0.382683}, {0.707107, -0.707107}, {0.382683, -0.923880},
{-0.000000, -1.000000}, {-0.382683, -0.923880}, {-0.707107, -0.707107}, {-0.923879, -0.382684},
{-1.000000, 0.000000}, {-0.923879, 0.382684}, {-0.707107, 0.707107}, {-0.382683, 0.923880} };
+
+ immBegin(GWN_PRIM_LINES, num_circles * CIRCLERES * 2);
+
for (BLI_ghashIterator_init(&iter, debug_data->gh); !BLI_ghashIterator_done(&iter); BLI_ghashIterator_step(&iter)) {
SimDebugElement *elem = BLI_ghashIterator_getValue(&iter);
float radius = elem->v2[0];
- float co[3];
+ float co[3], nco[3];
int i;
if (elem->type != SIM_DEBUG_ELEM_CIRCLE)
continue;
- glColor3f(elem->color[0], elem->color[1], elem->color[2]);
- glBegin(GL_LINE_LOOP);
- for (i = 0; i < 16; ++i) {
- co[0] = radius * circle[i][0];
- co[1] = radius * circle[i][1];
- co[2] = 0.0f;
- mul_mat3_m4_v3(imat, co);
- add_v3_v3(co, elem->v1);
+ immAttrib3fv(color, elem->color);
+ zero_v3(co);
+ for (i = 0; i <= CIRCLERES; ++i) {
+ int ni = i % CIRCLERES;
+ nco[0] = radius * circle[ni][0];
+ nco[1] = radius * circle[ni][1];
+ nco[2] = 0.0f;
+ mul_mat3_m4_v3(imat, nco);
+ add_v3_v3(nco, elem->v1);
- glVertex3f(co[0], co[1], co[2]);
+ if (i > 0) {
+ immVertex3fv(pos, co);
+ immVertex3fv(pos, nco);
+ }
+
+ copy_v3_v3(co, nco);
}
- glEnd();
}
+
+ immEnd();
+#undef CIRCLERES
}
/**** lines ****/
- glBegin(GL_LINES);
+ immBegin(GWN_PRIM_LINES, num_lines * 2);
for (BLI_ghashIterator_init(&iter, debug_data->gh); !BLI_ghashIterator_done(&iter); BLI_ghashIterator_step(&iter)) {
SimDebugElement *elem = BLI_ghashIterator_getValue(&iter);
if (elem->type != SIM_DEBUG_ELEM_LINE)
continue;
- glColor3f(elem->color[0], elem->color[1], elem->color[2]);
- glVertex3f(elem->v1[0], elem->v1[1], elem->v1[2]);
- glVertex3f(elem->v2[0], elem->v2[1], elem->v2[2]);
+ immAttrib3fv(color, elem->color);
+ immVertex3fv(pos, elem->v1);
+ immVertex3fv(pos, elem->v2);
}
- glEnd();
+ immEnd();
/**** vectors ****/
glPointSize(2.0f);
- glBegin(GL_POINTS);
+ immBegin(GWN_PRIM_POINTS, num_vectors);
for (BLI_ghashIterator_init(&iter, debug_data->gh); !BLI_ghashIterator_done(&iter); BLI_ghashIterator_step(&iter)) {
SimDebugElement *elem = BLI_ghashIterator_getValue(&iter);
if (elem->type != SIM_DEBUG_ELEM_VECTOR)
continue;
- glColor3f(elem->color[0], elem->color[1], elem->color[2]);
- glVertex3f(elem->v1[0], elem->v1[1], elem->v1[2]);
+ immAttrib3fv(color, elem->color);
+ immVertex3fv(pos, elem->v1);
}
- glEnd();
+ immEnd();
- glBegin(GL_LINES);
+ immBegin(GWN_PRIM_LINES, num_vectors * 2);
for (BLI_ghashIterator_init(&iter, debug_data->gh); !BLI_ghashIterator_done(&iter); BLI_ghashIterator_step(&iter)) {
SimDebugElement *elem = BLI_ghashIterator_getValue(&iter);
float t[3];
if (elem->type != SIM_DEBUG_ELEM_VECTOR)
continue;
- glColor3f(elem->color[0], elem->color[1], elem->color[2]);
- glVertex3f(elem->v1[0], elem->v1[1], elem->v1[2]);
+ immAttrib3fv(color, elem->color);
+ immVertex3fv(pos, elem->v1);
add_v3_v3v3(t, elem->v1, elem->v2);
- glVertex3f(t[0], t[1], t[2]);
+ immVertex3fv(pos, t);
}
- glEnd();
+ immEnd();
+
+ immUnbindProgram();
/**** strings ****/
@@ -163,18 +198,12 @@ void draw_sim_debug_data(Scene *UNUSED(scene), View3D *v3d, ARegion *ar)
invert_m4_m4(imat, rv3d->viewmatob);
-// glDepthMask(GL_FALSE);
-// glEnable(GL_BLEND);
-
- glPushMatrix();
- glLoadMatrixf(rv3d->viewmat);
+ gpuPushMatrix();
+ gpuLoadMatrix(rv3d->viewmat);
view3d_cached_text_draw_begin();
draw_sim_debug_elements(_sim_debug_data, imat);
view3d_cached_text_draw_end(v3d, ar, false);
- glPopMatrix();
-
-// glDepthMask(GL_TRUE);
-// glDisable(GL_BLEND);
+ gpuPopMatrix();
}
diff --git a/source/blender/editors/space_view3d/drawvolume.c b/source/blender/editors/space_view3d/drawvolume.c
index cf118404183..d39f3937a9d 100644
--- a/source/blender/editors/space_view3d/drawvolume.c
+++ b/source/blender/editors/space_view3d/drawvolume.c
@@ -48,7 +48,6 @@
#include "BIF_gl.h"
-#include "GPU_debug.h"
#include "GPU_shader.h"
#include "GPU_texture.h"
@@ -160,7 +159,7 @@ static GPUTexture *create_field_texture(SmokeDomainSettings *sds)
default: return NULL;
}
- return GPU_texture_create_3D(sds->res[0], sds->res[1], sds->res[2], 1, field);
+ return GPU_texture_create_3D_custom(sds->res[0], sds->res[1], sds->res[2], 1, GPU_R8, field, NULL);
}
typedef struct VolumeSlicer {
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index a36b698a04e..2f2e0db8c7a 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -43,25 +43,31 @@
#include "BLI_utildefines.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
+#include "BKE_curve.h"
#include "BKE_icons.h"
+#include "BKE_lattice.h"
#include "BKE_library.h"
#include "BKE_main.h"
+#include "BKE_mball.h"
+#include "BKE_mesh.h"
#include "BKE_object.h"
#include "BKE_scene.h"
#include "BKE_screen.h"
+#include "BKE_workspace.h"
#include "ED_space_api.h"
#include "ED_screen.h"
+#include "ED_transform.h"
#include "GPU_compositing.h"
#include "GPU_framebuffer.h"
#include "GPU_material.h"
-
-#include "BIF_gl.h"
+#include "GPU_viewport.h"
+#include "GPU_matrix.h"
#include "WM_api.h"
#include "WM_types.h"
+#include "WM_message.h"
#include "RE_engine.h"
#include "RE_pipeline.h"
@@ -250,7 +256,7 @@ void ED_view3d_init_mats_rv3d_gl(struct Object *ob, struct RegionView3D *rv3d)
/* we have to multiply instead of loading viewmatob to make
* it work with duplis using displists, otherwise it will
* override the dupli-matrix */
- glMultMatrixf(ob->obmat);
+ gpuMultMatrix(ob->obmat);
}
#ifdef DEBUG
@@ -336,9 +342,10 @@ static SpaceLink *view3d_new(const bContext *C)
v3d->near = 0.01f;
v3d->far = 1000.0f;
- v3d->twflag |= U.tw_flag & V3D_USE_MANIPULATOR;
+ v3d->twflag |= U.manipulator_flag & V3D_MANIPULATOR_DRAW;
v3d->twtype = V3D_MANIP_TRANSLATE;
v3d->around = V3D_AROUND_CENTER_MEAN;
+ v3d->custom_orientation_index = -1;
v3d->bundle_size = 0.2f;
v3d->bundle_drawtype = OB_PLAINAXES;
@@ -400,17 +407,6 @@ static SpaceLink *view3d_new(const bContext *C)
static void view3d_free(SpaceLink *sl)
{
View3D *vd = (View3D *) sl;
- BGpic *bgpic;
-
- for (bgpic = vd->bgpicbase.first; bgpic; bgpic = bgpic->next) {
- if (bgpic->source == V3D_BGPIC_IMAGE) {
- id_us_min((ID *)bgpic->ima);
- }
- else if (bgpic->source == V3D_BGPIC_MOVIE) {
- id_us_min((ID *)bgpic->clip);
- }
- }
- BLI_freelistN(&vd->bgpicbase);
if (vd->localvd) MEM_freeN(vd->localvd);
@@ -441,7 +437,6 @@ static SpaceLink *view3d_duplicate(SpaceLink *sl)
{
View3D *v3do = (View3D *)sl;
View3D *v3dn = MEM_dupallocN(sl);
- BGpic *bgpic;
/* clear or remove stuff from old */
@@ -458,16 +453,6 @@ static SpaceLink *view3d_duplicate(SpaceLink *sl)
v3dn->defmaterial = NULL;
- BLI_duplicatelist(&v3dn->bgpicbase, &v3do->bgpicbase);
- for (bgpic = v3dn->bgpicbase.first; bgpic; bgpic = bgpic->next) {
- if (bgpic->source == V3D_BGPIC_IMAGE) {
- id_us_plus((ID *)bgpic->ima);
- }
- else if (bgpic->source == V3D_BGPIC_MOVIE) {
- id_us_plus((ID *)bgpic->clip);
- }
- }
-
v3dn->properties_storage = NULL;
if (v3dn->fx_settings.dof)
v3dn->fx_settings.dof = MEM_dupallocN(v3do->fx_settings.dof);
@@ -483,6 +468,13 @@ static void view3d_main_region_init(wmWindowManager *wm, ARegion *ar)
ListBase *lb;
wmKeyMap *keymap;
+ if (ar->manipulator_map == NULL) {
+ ar->manipulator_map = WM_manipulatormap_new_from_type(
+ &(const struct wmManipulatorMapType_Params) {SPACE_VIEW3D, RGN_TYPE_WINDOW});
+ }
+
+ WM_manipulatormap_add_handlers(ar, ar->manipulator_map);
+
/* object ops. */
/* important to be before Pose keymap since they can both be enabled at once */
@@ -578,6 +570,12 @@ static void view3d_main_region_exit(wmWindowManager *wm, ARegion *ar)
GPU_fx_compositor_destroy(rv3d->compositor);
rv3d->compositor = NULL;
}
+
+ if (rv3d->viewport) {
+ GPU_viewport_free(rv3d->viewport);
+ MEM_freeN(rv3d->viewport);
+ rv3d->viewport = NULL;
+ }
}
static int view3d_ob_drop_poll(bContext *UNUSED(C), wmDrag *drag, const wmEvent *UNUSED(event))
@@ -708,6 +706,29 @@ static void view3d_dropboxes(void)
WM_dropbox_add(lb, "OBJECT_OT_group_instance_add", view3d_group_drop_poll, view3d_group_drop_copy);
}
+static void view3d_widgets(void)
+{
+ wmManipulatorMapType *mmap_type = WM_manipulatormaptype_ensure(
+ &(const struct wmManipulatorMapType_Params){SPACE_VIEW3D, RGN_TYPE_WINDOW});
+
+ WM_manipulatorgrouptype_append_and_link(mmap_type, TRANSFORM_WGT_manipulator);
+ WM_manipulatorgrouptype_append_and_link(mmap_type, VIEW3D_WGT_lamp_spot);
+ WM_manipulatorgrouptype_append_and_link(mmap_type, VIEW3D_WGT_lamp_area);
+ WM_manipulatorgrouptype_append_and_link(mmap_type, VIEW3D_WGT_lamp_target);
+ WM_manipulatorgrouptype_append_and_link(mmap_type, VIEW3D_WGT_force_field);
+ WM_manipulatorgrouptype_append_and_link(mmap_type, VIEW3D_WGT_camera);
+ WM_manipulatorgrouptype_append_and_link(mmap_type, VIEW3D_WGT_camera_view);
+ WM_manipulatorgrouptype_append_and_link(mmap_type, VIEW3D_WGT_empty_image);
+ WM_manipulatorgrouptype_append_and_link(mmap_type, VIEW3D_WGT_armature_spline);
+
+ WM_manipulatorgrouptype_append(VIEW3D_WGT_xform_cage);
+
+ WM_manipulatorgrouptype_append(VIEW3D_WGT_ruler);
+ WM_manipulatortype_append(VIEW3D_WT_ruler_item);
+
+ WM_manipulatorgrouptype_append_and_link(mmap_type, VIEW3D_WGT_navigate);
+ WM_manipulatortype_append(VIEW3D_WT_navigate_rotate);
+}
/* type callback, not region itself */
@@ -735,6 +756,10 @@ static void view3d_main_region_free(ARegion *ar)
if (rv3d->compositor) {
GPU_fx_compositor_destroy(rv3d->compositor);
}
+ if (rv3d->viewport) {
+ GPU_viewport_free(rv3d->viewport);
+ MEM_freeN(rv3d->viewport);
+ }
MEM_freeN(rv3d);
ar->regiondata = NULL;
@@ -759,32 +784,22 @@ static void *view3d_main_region_duplicate(void *poin)
new->sms = NULL;
new->smooth_timer = NULL;
new->compositor = NULL;
+ new->viewport = NULL;
return new;
}
return NULL;
}
-static void view3d_recalc_used_layers(ARegion *ar, wmNotifier *wmn, Scene *scene)
+static void view3d_recalc_used_layers(ARegion *ar, wmNotifier *wmn, const Scene *UNUSED(scene))
{
wmWindow *win = wmn->wm->winactive;
- ScrArea *sa;
unsigned int lay_used = 0;
- Base *base;
if (!win) return;
- base = scene->base.first;
- while (base) {
- lay_used |= base->lay & ((1 << 20) - 1); /* ignore localview */
-
- if (lay_used == (1 << 20) - 1)
- break;
-
- base = base->next;
- }
-
- for (sa = win->screen->areabase.first; sa; sa = sa->next) {
+ const bScreen *screen = WM_window_get_active_screen(win);
+ for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
if (sa->spacetype == SPACE_VIEW3D) {
if (BLI_findindex(&sa->regionbase, ar) != -1) {
View3D *v3d = sa->spacedata.first;
@@ -795,13 +810,21 @@ static void view3d_recalc_used_layers(ARegion *ar, wmNotifier *wmn, Scene *scene
}
}
-static void view3d_main_region_listener(bScreen *sc, ScrArea *sa, ARegion *ar, wmNotifier *wmn)
+static void view3d_main_region_listener(
+ bScreen *UNUSED(sc), ScrArea *sa, ARegion *ar,
+ wmNotifier *wmn, const Scene *scene)
{
- Scene *scene = sc->scene;
View3D *v3d = sa->spacedata.first;
-
+ RegionView3D *rv3d = ar->regiondata;
+ wmManipulatorMap *mmap = ar->manipulator_map;
+
/* context changes */
switch (wmn->category) {
+ case NC_WM:
+ if (ELEM(wmn->data, ND_UNDO)) {
+ WM_manipulatormap_tag_refresh(mmap);
+ }
+ break;
case NC_ANIMATION:
switch (wmn->data) {
case ND_KEYFRAME_PROP:
@@ -821,21 +844,32 @@ static void view3d_main_region_listener(bScreen *sc, ScrArea *sa, ARegion *ar, w
break;
case NC_SCENE:
switch (wmn->data) {
+ case ND_SCENEBROWSE:
case ND_LAYER_CONTENT:
if (wmn->reference)
view3d_recalc_used_layers(ar, wmn, wmn->reference);
ED_region_tag_redraw(ar);
+ WM_manipulatormap_tag_refresh(mmap);
+ break;
+ case ND_LAYER:
+ if (wmn->reference) {
+ BKE_screen_view3d_sync(v3d, wmn->reference);
+ }
+ ED_region_tag_redraw(ar);
+ WM_manipulatormap_tag_refresh(mmap);
break;
- case ND_FRAME:
- case ND_TRANSFORM:
case ND_OB_ACTIVE:
case ND_OB_SELECT:
+ DEG_id_tag_update((ID *)&scene->id, DEG_TAG_SELECT_UPDATE);
+ ATTR_FALLTHROUGH;
+ case ND_FRAME:
+ case ND_TRANSFORM:
case ND_OB_VISIBLE:
- case ND_LAYER:
case ND_RENDER_OPTIONS:
case ND_MARKERS:
case ND_MODE:
ED_region_tag_redraw(ar);
+ WM_manipulatormap_tag_refresh(mmap);
break;
case ND_WORLD:
/* handled by space_view3d_listener() for v3d access */
@@ -843,7 +877,6 @@ static void view3d_main_region_listener(bScreen *sc, ScrArea *sa, ARegion *ar, w
case ND_DRAW_RENDER_VIEWPORT:
{
if (v3d->camera && (scene == wmn->reference)) {
- RegionView3D *rv3d = ar->regiondata;
if (rv3d->persp == RV3D_CAMOB) {
ED_region_tag_redraw(ar);
}
@@ -868,6 +901,7 @@ static void view3d_main_region_listener(bScreen *sc, ScrArea *sa, ARegion *ar, w
case ND_POINTCACHE:
case ND_LOD:
ED_region_tag_redraw(ar);
+ WM_manipulatormap_tag_refresh(mmap);
break;
}
switch (wmn->action) {
@@ -878,9 +912,18 @@ static void view3d_main_region_listener(bScreen *sc, ScrArea *sa, ARegion *ar, w
break;
case NC_GEOM:
switch (wmn->data) {
+ case ND_SELECT:
+ {
+ WM_manipulatormap_tag_refresh(mmap);
+ if (scene->obedit) {
+ Object *ob = scene->obedit;
+ /* TODO(sergey): Notifiers shouldn't really be doing DEG tags. */
+ DEG_id_tag_update((ID *)ob->data, DEG_TAG_SELECT_UPDATE);
+ }
+ ATTR_FALLTHROUGH;
+ }
case ND_DATA:
case ND_VERTEX_GROUP:
- case ND_SELECT:
ED_region_tag_redraw(ar);
break;
}
@@ -895,7 +938,6 @@ static void view3d_main_region_listener(bScreen *sc, ScrArea *sa, ARegion *ar, w
case ND_DRAW_RENDER_VIEWPORT:
{
if (v3d->camera && (v3d->camera->data == wmn->reference)) {
- RegionView3D *rv3d = ar->regiondata;
if (rv3d->persp == RV3D_CAMOB) {
ED_region_tag_redraw(ar);
}
@@ -924,21 +966,13 @@ static void view3d_main_region_listener(bScreen *sc, ScrArea *sa, ARegion *ar, w
switch (wmn->data) {
case ND_SHADING:
case ND_NODES:
- {
-#ifdef WITH_LEGACY_DEPSGRAPH
- Object *ob = OBACT;
- if ((v3d->drawtype == OB_MATERIAL) ||
- (ob && (ob->mode == OB_MODE_TEXTURE_PAINT)) ||
- (v3d->drawtype == OB_TEXTURE &&
- (scene->gm.matmode == GAME_MAT_GLSL ||
- BKE_scene_use_new_shading_nodes(scene))) ||
- !DEG_depsgraph_use_legacy())
-#endif
- {
- ED_region_tag_redraw(ar);
- }
+ /* TODO(sergey) This is a bit too much updates, but needed to
+ * have proper material drivers update in the viewport.
+ *
+ * How to solve?
+ */
+ ED_region_tag_redraw(ar);
break;
- }
case ND_SHADING_DRAW:
case ND_SHADING_LINKS:
ED_region_tag_redraw(ar);
@@ -950,20 +984,23 @@ static void view3d_main_region_listener(bScreen *sc, ScrArea *sa, ARegion *ar, w
case ND_WORLD_DRAW:
/* handled by space_view3d_listener() for v3d access */
break;
+ case ND_WORLD:
+ /* Needed for updating world materials */
+ ED_region_tag_redraw(ar);
+ break;
}
break;
case NC_LAMP:
switch (wmn->data) {
case ND_LIGHTING:
- if ((v3d->drawtype == OB_MATERIAL) ||
- (v3d->drawtype == OB_TEXTURE && (scene->gm.matmode == GAME_MAT_GLSL)) ||
- !DEG_depsgraph_use_legacy())
- {
- ED_region_tag_redraw(ar);
- }
+ /* TODO(sergey): This is a bit too much, but needed to
+ * handle updates from new depsgraph.
+ */
+ ED_region_tag_redraw(ar);
break;
case ND_LIGHTING_DRAW:
ED_region_tag_redraw(ar);
+ WM_manipulatormap_tag_refresh(mmap);
break;
}
break;
@@ -983,10 +1020,10 @@ static void view3d_main_region_listener(bScreen *sc, ScrArea *sa, ARegion *ar, w
case NC_SPACE:
if (wmn->data == ND_SPACE_VIEW3D) {
if (wmn->subtype == NS_VIEW3D_GPU) {
- RegionView3D *rv3d = ar->regiondata;
rv3d->rflag |= RV3D_GPULIGHT_UPDATE;
}
ED_region_tag_redraw(ar);
+ WM_manipulatormap_tag_refresh(mmap);
}
break;
case NC_ID:
@@ -999,15 +1036,13 @@ static void view3d_main_region_listener(bScreen *sc, ScrArea *sa, ARegion *ar, w
case ND_SKETCH:
ED_region_tag_redraw(ar);
break;
- case ND_SCREENBROWSE:
- case ND_SCREENDELETE:
- case ND_SCREENSET:
- /* screen was changed, need to update used layers due to NC_SCENE|ND_LAYER_CONTENT */
- /* updates used layers only for View3D in active screen */
- if (wmn->reference) {
- bScreen *sc_ref = wmn->reference;
- view3d_recalc_used_layers(ar, wmn, sc_ref->scene);
- }
+ case ND_LAYOUTBROWSE:
+ case ND_LAYOUTDELETE:
+ case ND_LAYOUTSET:
+ WM_manipulatormap_tag_refresh(mmap);
+ ED_region_tag_redraw(ar);
+ break;
+ case ND_LAYER:
ED_region_tag_redraw(ar);
break;
}
@@ -1021,10 +1056,83 @@ static void view3d_main_region_listener(bScreen *sc, ScrArea *sa, ARegion *ar, w
}
}
+static void view3d_main_region_message_subscribe(
+ const struct bContext *UNUSED(C),
+ struct WorkSpace *workspace, struct Scene *scene,
+ struct bScreen *UNUSED(screen), struct ScrArea *UNUSED(sa), struct ARegion *ar,
+ struct wmMsgBus *mbus)
+{
+ /* Developer note: there are many properties that impact 3D view drawing,
+ * so instead of subscribing to individual properties, just subscribe to types
+ * accepting some redundant redraws.
+ *
+ * For other space types we might try avoid this, keep the 3D view as an exceptional case! */
+ ViewRender *view_render = BKE_viewrender_get(scene, workspace);
+ wmMsgParams_RNA msg_key_params = {0};
+
+ /* Only subscribe to types. */
+ StructRNA *type_array[] = {
+ &RNA_Window,
+
+ /* These object have properties that impact drawing. */
+ &RNA_AreaLamp,
+ &RNA_Camera,
+ &RNA_Lamp,
+ &RNA_Speaker,
+ &RNA_SunLamp,
+
+ /* General types the 3D view depends on. */
+ &RNA_Object,
+ &RNA_UnitSettings, /* grid-floor */
+
+ &RNA_ViewRenderSettings,
+ &RNA_World,
+ };
+
+ wmMsgSubscribeValue msg_sub_value_region_tag_redraw = {
+ .owner = ar,
+ .user_data = ar,
+ .notify = ED_region_do_msg_notify_tag_redraw,
+ };
+
+ for (int i = 0; i < ARRAY_SIZE(type_array); i++) {
+ msg_key_params.ptr.type = type_array[i];
+ WM_msg_subscribe_rna_params(
+ mbus,
+ &msg_key_params,
+ &msg_sub_value_region_tag_redraw,
+ __func__);
+ }
+
+ /* Subscribe to a handful of other properties. */
+ RegionView3D *rv3d = ar->regiondata;
+
+ WM_msg_subscribe_rna_anon_prop(mbus, RenderSettings, resolution_x, &msg_sub_value_region_tag_redraw);
+ WM_msg_subscribe_rna_anon_prop(mbus, RenderSettings, resolution_y, &msg_sub_value_region_tag_redraw);
+ WM_msg_subscribe_rna_anon_prop(mbus, RenderSettings, pixel_aspect_x, &msg_sub_value_region_tag_redraw);
+ WM_msg_subscribe_rna_anon_prop(mbus, RenderSettings, pixel_aspect_y, &msg_sub_value_region_tag_redraw);
+ if (rv3d->persp == RV3D_CAMOB) {
+ WM_msg_subscribe_rna_anon_prop(mbus, RenderSettings, use_border, &msg_sub_value_region_tag_redraw);
+ }
+
+ /* Each engine could be responsible for its own engine data types.
+ * For now this is simplest. */
+ if (STREQ(view_render->engine_id, RE_engine_id_BLENDER_EEVEE)) {
+ extern StructRNA RNA_ViewLayerEngineSettingsEevee;
+ WM_msg_subscribe_rna_anon_type(mbus, ViewLayerEngineSettingsEevee, &msg_sub_value_region_tag_redraw);
+ }
+#ifdef WITH_CLAY_ENGINE
+ else if (STREQ(view_render->engine_id, RE_engine_id_BLENDER_CLAY)) {
+ extern StructRNA RNA_ViewLayerEngineSettingsClay;
+ WM_msg_subscribe_rna_anon_type(mbus, ViewLayerEngineSettingsClay, &msg_sub_value_region_tag_redraw);
+ }
+#endif
+}
+
/* concept is to retrieve cursor type context-less */
static void view3d_main_region_cursor(wmWindow *win, ScrArea *UNUSED(sa), ARegion *UNUSED(ar))
{
- Scene *scene = win->screen->scene;
+ const Scene *scene = WM_window_get_active_scene(win);
if (scene->obedit) {
WM_cursor_set(win, CURSOR_EDIT);
@@ -1049,7 +1157,9 @@ static void view3d_header_region_draw(const bContext *C, ARegion *ar)
ED_region_header(C, ar);
}
-static void view3d_header_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+static void view3d_header_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar,
+ wmNotifier *wmn, const Scene *UNUSED(scene))
{
/* context changes */
switch (wmn->category) {
@@ -1095,7 +1205,9 @@ static void view3d_buttons_region_draw(const bContext *C, ARegion *ar)
ED_region_panels(C, ar, NULL, -1, true);
}
-static void view3d_buttons_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+static void view3d_buttons_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar,
+ wmNotifier *wmn, const Scene *UNUSED(scene))
{
/* context changes */
switch (wmn->category) {
@@ -1201,7 +1313,9 @@ static void view3d_tools_region_draw(const bContext *C, ARegion *ar)
ED_region_panels(C, ar, CTX_data_mode_string(C), -1, true);
}
-static void view3d_props_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+static void view3d_props_region_listener(
+ bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar,
+ wmNotifier *wmn, const Scene *UNUSED(scene))
{
/* context changes */
switch (wmn->category) {
@@ -1221,7 +1335,9 @@ static void view3d_props_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa
}
/* area (not region) level listener */
-static void space_view3d_listener(bScreen *UNUSED(sc), ScrArea *sa, struct wmNotifier *wmn)
+static void space_view3d_listener(
+ bScreen *UNUSED(sc), ScrArea *sa, struct wmNotifier *wmn, Scene *UNUSED(scene),
+ WorkSpace *UNUSED(workspace))
{
View3D *v3d = sa->spacedata.first;
@@ -1256,8 +1372,6 @@ static void space_view3d_listener(bScreen *UNUSED(sc), ScrArea *sa, struct wmNot
}
const char *view3d_context_dir[] = {
- "selected_objects", "selected_bases", "selected_editable_objects",
- "selected_editable_bases", "visible_objects", "visible_bases", "selectable_objects", "selectable_bases",
"active_base", "active_object", NULL
};
@@ -1268,109 +1382,28 @@ static int view3d_context(const bContext *C, const char *member, bContextDataRes
if (CTX_data_dir(member)) {
CTX_data_dir_set(result, view3d_context_dir);
}
- else if (CTX_data_equals(member, "selected_objects") || CTX_data_equals(member, "selected_bases")) {
- View3D *v3d = CTX_wm_view3d(C);
- Scene *scene = CTX_data_scene(C);
- const unsigned int lay = v3d ? v3d->lay : scene->lay;
- Base *base;
- const bool selected_objects = CTX_data_equals(member, "selected_objects");
-
- for (base = scene->base.first; base; base = base->next) {
- if ((base->flag & SELECT) && (base->lay & lay)) {
- if ((base->object->restrictflag & OB_RESTRICT_VIEW) == 0) {
- if (selected_objects)
- CTX_data_id_list_add(result, &base->object->id);
- else
- CTX_data_list_add(result, &scene->id, &RNA_ObjectBase, base);
- }
- }
- }
- CTX_data_type_set(result, CTX_DATA_TYPE_COLLECTION);
- return 1;
- }
- else if (CTX_data_equals(member, "selected_editable_objects") || CTX_data_equals(member, "selected_editable_bases")) {
- View3D *v3d = CTX_wm_view3d(C);
- Scene *scene = CTX_data_scene(C);
- const unsigned int lay = v3d ? v3d->lay : scene->lay;
- Base *base;
- const bool selected_editable_objects = CTX_data_equals(member, "selected_editable_objects");
-
- for (base = scene->base.first; base; base = base->next) {
- if ((base->flag & SELECT) && (base->lay & lay)) {
- if ((base->object->restrictflag & OB_RESTRICT_VIEW) == 0) {
- if (0 == BKE_object_is_libdata(base->object)) {
- if (selected_editable_objects)
- CTX_data_id_list_add(result, &base->object->id);
- else
- CTX_data_list_add(result, &scene->id, &RNA_ObjectBase, base);
- }
- }
- }
- }
- CTX_data_type_set(result, CTX_DATA_TYPE_COLLECTION);
- return 1;
- }
- else if (CTX_data_equals(member, "visible_objects") || CTX_data_equals(member, "visible_bases")) {
- View3D *v3d = CTX_wm_view3d(C);
- Scene *scene = CTX_data_scene(C);
- const unsigned int lay = v3d ? v3d->lay : scene->lay;
- Base *base;
- const bool visible_objects = CTX_data_equals(member, "visible_objects");
-
- for (base = scene->base.first; base; base = base->next) {
- if (base->lay & lay) {
- if ((base->object->restrictflag & OB_RESTRICT_VIEW) == 0) {
- if (visible_objects)
- CTX_data_id_list_add(result, &base->object->id);
- else
- CTX_data_list_add(result, &scene->id, &RNA_ObjectBase, base);
- }
- }
- }
- CTX_data_type_set(result, CTX_DATA_TYPE_COLLECTION);
- return 1;
- }
- else if (CTX_data_equals(member, "selectable_objects") || CTX_data_equals(member, "selectable_bases")) {
- View3D *v3d = CTX_wm_view3d(C);
- Scene *scene = CTX_data_scene(C);
- const unsigned int lay = v3d ? v3d->lay : scene->lay;
- Base *base;
- const bool selectable_objects = CTX_data_equals(member, "selectable_objects");
-
- for (base = scene->base.first; base; base = base->next) {
- if (base->lay & lay) {
- if ((base->object->restrictflag & OB_RESTRICT_VIEW) == 0 && (base->object->restrictflag & OB_RESTRICT_SELECT) == 0) {
- if (selectable_objects)
- CTX_data_id_list_add(result, &base->object->id);
- else
- CTX_data_list_add(result, &scene->id, &RNA_ObjectBase, base);
- }
- }
- }
- CTX_data_type_set(result, CTX_DATA_TYPE_COLLECTION);
- return 1;
- }
else if (CTX_data_equals(member, "active_base")) {
- View3D *v3d = CTX_wm_view3d(C);
Scene *scene = CTX_data_scene(C);
- const unsigned int lay = v3d ? v3d->lay : scene->lay;
- if (scene->basact && (scene->basact->lay & lay)) {
- Object *ob = scene->basact->object;
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ if (view_layer->basact) {
+ const WorkSpace *workspace = CTX_wm_workspace(C);
/* if hidden but in edit mode, we still display, can happen with animation */
- if ((ob->restrictflag & OB_RESTRICT_VIEW) == 0 || (ob->mode & OB_MODE_EDIT))
- CTX_data_pointer_set(result, &scene->id, &RNA_ObjectBase, scene->basact);
+ if ((view_layer->basact->flag & BASE_VISIBLED) != 0 || (workspace->object_mode & OB_MODE_EDIT)) {
+ CTX_data_pointer_set(result, &scene->id, &RNA_ObjectBase, view_layer->basact);
+ }
}
return 1;
}
else if (CTX_data_equals(member, "active_object")) {
- View3D *v3d = CTX_wm_view3d(C);
- Scene *scene = CTX_data_scene(C);
- const unsigned int lay = v3d ? v3d->lay : scene->lay;
- if (scene->basact && (scene->basact->lay & lay)) {
- Object *ob = scene->basact->object;
- if ((ob->restrictflag & OB_RESTRICT_VIEW) == 0 || (ob->mode & OB_MODE_EDIT))
- CTX_data_id_pointer_set(result, &scene->basact->object->id);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ if (view_layer->basact) {
+ const WorkSpace *workspace = CTX_wm_workspace(C);
+ Object *ob = view_layer->basact->object;
+ /* if hidden but in edit mode, we still display, can happen with animation */
+ if ((view_layer->basact->flag & BASE_VISIBLED) != 0 || (workspace->object_mode & OB_MODE_EDIT) != 0) {
+ CTX_data_id_pointer_set(result, &ob->id);
+ }
}
return 1;
@@ -1420,21 +1453,6 @@ static void view3d_id_remap(ScrArea *sa, SpaceLink *slink, ID *old_id, ID *new_i
v3d->ob_centre_bone[0] = '\0';
}
}
-
- if (ELEM(GS(old_id->name), ID_IM, ID_MC)) {
- for (BGpic *bgpic = v3d->bgpicbase.first; bgpic; bgpic = bgpic->next) {
- if ((ID *)bgpic->ima == old_id) {
- bgpic->ima = (Image *)new_id;
- id_us_min(old_id);
- id_us_plus(new_id);
- }
- if ((ID *)bgpic->clip == old_id) {
- bgpic->clip = (MovieClip *)new_id;
- id_us_min(old_id);
- id_us_plus(new_id);
- }
- }
- }
}
if (is_local) {
@@ -1460,6 +1478,7 @@ void ED_spacetype_view3d(void)
st->operatortypes = view3d_operatortypes;
st->keymap = view3d_keymap;
st->dropboxes = view3d_dropboxes;
+ st->manipulators = view3d_widgets;
st->context = view3d_context;
st->id_remap = view3d_id_remap;
@@ -1473,6 +1492,7 @@ void ED_spacetype_view3d(void)
art->free = view3d_main_region_free;
art->duplicate = view3d_main_region_duplicate;
art->listener = view3d_main_region_listener;
+ art->message_subscribe = view3d_main_region_message_subscribe;
art->cursor = view3d_main_region_cursor;
art->lock = 1; /* can become flag, see BKE_spacedata_draw_locks */
BLI_addhead(&st->regiontypes, art);
diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c
index 0c67776693d..bd62a4fc3bf 100644
--- a/source/blender/editors/space_view3d/view3d_buttons.c
+++ b/source/blender/editors/space_view3d/view3d_buttons.c
@@ -55,13 +55,14 @@
#include "BKE_context.h"
#include "BKE_curve.h"
#include "BKE_customdata.h"
-#include "BKE_depsgraph.h"
#include "BKE_screen.h"
#include "BKE_editmesh.h"
#include "BKE_deform.h"
#include "BKE_object.h"
#include "BKE_object_deform.h"
+#include "DEG_depsgraph.h"
+
#include "WM_api.h"
#include "WM_types.h"
@@ -776,20 +777,22 @@ static void do_view3d_vgroup_buttons(bContext *C, void *UNUSED(arg), int event)
return;
}
else {
- Scene *scene = CTX_data_scene(C);
- Object *ob = scene->basact->object;
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Object *ob = view_layer->basact->object;
ED_vgroup_vert_active_mirror(ob, event - B_VGRP_PNL_EDIT_SINGLE);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data);
}
}
static int view3d_panel_vgroup_poll(const bContext *C, PanelType *UNUSED(pt))
{
- Scene *scene = CTX_data_scene(C);
- Object *ob = OBACT;
+ const WorkSpace *workspace = CTX_wm_workspace(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Object *ob = OBACT(view_layer);
+
if (ob && (BKE_object_is_in_editmode_vgroup(ob) ||
- BKE_object_is_in_wpaint_select_vert(ob)))
+ BKE_object_is_in_wpaint_select_vert(ob, workspace->object_mode)))
{
MDeformVert *dvert_act = ED_mesh_active_dvert_get_only(ob);
if (dvert_act) {
@@ -805,7 +808,8 @@ static void view3d_panel_vgroup(const bContext *C, Panel *pa)
{
uiBlock *block = uiLayoutAbsoluteBlock(pa->layout);
Scene *scene = CTX_data_scene(C);
- Object *ob = scene->basact->object;
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Object *ob = view_layer->basact->object;
MDeformVert *dv;
@@ -1095,9 +1099,9 @@ static void v3d_editmetaball_buts(uiLayout *layout, Object *ob)
static void do_view3d_region_buttons(bContext *C, void *UNUSED(index), int event)
{
- Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
View3D *v3d = CTX_wm_view3d(C);
- Object *ob = OBACT;
+ Object *ob = OBACT(view_layer);
switch (event) {
@@ -1108,7 +1112,7 @@ static void do_view3d_region_buttons(bContext *C, void *UNUSED(index), int event
case B_OBJECTPANELMEDIAN:
if (ob) {
v3d_editvertex_buts(NULL, v3d, ob, 1.0);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
}
break;
}
@@ -1119,16 +1123,18 @@ static void do_view3d_region_buttons(bContext *C, void *UNUSED(index), int event
static int view3d_panel_transform_poll(const bContext *C, PanelType *UNUSED(pt))
{
- Scene *scene = CTX_data_scene(C);
- return (scene->basact != NULL);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ return (view_layer->basact != NULL);
}
static void view3d_panel_transform(const bContext *C, Panel *pa)
{
uiBlock *block;
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Object *obedit = CTX_data_edit_object(C);
- Object *ob = scene->basact->object;
+ Object *ob = view_layer->basact->object;
uiLayout *col;
block = uiLayoutGetBlock(pa->layout);
@@ -1149,7 +1155,7 @@ static void view3d_panel_transform(const bContext *C, Panel *pa)
v3d_editvertex_buts(col, v3d, ob, lim);
}
}
- else if (ob->mode & OB_MODE_POSE) {
+ else if (workspace->object_mode & OB_MODE_POSE) {
v3d_posearmature_buts(col, ob);
}
else {
diff --git a/source/blender/editors/space_view3d/view3d_camera_control.c b/source/blender/editors/space_view3d/view3d_camera_control.c
index f717f1c0a43..c39057431c2 100644
--- a/source/blender/editors/space_view3d/view3d_camera_control.c
+++ b/source/blender/editors/space_view3d/view3d_camera_control.c
@@ -54,8 +54,9 @@
#include "BLI_utildefines.h"
#include "BKE_object.h"
+#include "BKE_context.h"
-#include "BKE_depsgraph.h" /* for object updating */
+#include "DEG_depsgraph.h"
#include "ED_screen.h"
@@ -137,7 +138,7 @@ Object *ED_view3d_cameracontrol_object_get(View3DCameraControl *vctrl)
* the view for first-person style navigation.
*/
struct View3DCameraControl *ED_view3d_cameracontrol_acquire(
- Scene *scene, View3D *v3d, RegionView3D *rv3d,
+ const EvaluationContext *eval_ctx, Scene *scene, View3D *v3d, RegionView3D *rv3d,
const bool use_parent_root)
{
View3DCameraControl *vctrl;
@@ -177,7 +178,7 @@ struct View3DCameraControl *ED_view3d_cameracontrol_acquire(
/* store the original camera loc and rot */
vctrl->obtfm = BKE_object_tfm_backup(ob_back);
- BKE_object_where_is_calc(scene, v3d->camera);
+ BKE_object_where_is_calc(eval_ctx, scene, v3d->camera);
negate_v3_v3(rv3d->ofs, v3d->camera->obmat[3]);
rv3d->dist = 0.0;
@@ -242,7 +243,7 @@ void ED_view3d_cameracontrol_update(
ob_update = v3d->camera->parent;
while (ob_update) {
- DAG_id_tag_update(&ob_update->id, OB_RECALC_OB);
+ DEG_id_tag_update(&ob_update->id, OB_RECALC_OB);
ob_update = ob_update->parent;
}
@@ -264,7 +265,7 @@ void ED_view3d_cameracontrol_update(
BKE_object_apply_mat4(v3d->camera, view_mat, true, true);
- DAG_id_tag_update(&v3d->camera->id, OB_RECALC_OB);
+ DEG_id_tag_update(&v3d->camera->id, OB_RECALC_OB);
copy_v3_v3(v3d->camera->size, size_back);
@@ -299,7 +300,7 @@ void ED_view3d_cameracontrol_release(
/* store the original camera loc and rot */
BKE_object_tfm_restore(ob_back, vctrl->obtfm);
- DAG_id_tag_update(&ob_back->id, OB_RECALC_OB);
+ DEG_id_tag_update(&ob_back->id, OB_RECALC_OB);
}
else {
/* Non Camera we need to reset the view back to the original location bacause the user canceled*/
@@ -311,7 +312,7 @@ void ED_view3d_cameracontrol_release(
rv3d->dist = vctrl->dist_backup;
}
else if (vctrl->persp_backup == RV3D_CAMOB) { /* camera */
- DAG_id_tag_update((ID *)view3d_cameracontrol_object(vctrl), OB_RECALC_OB);
+ DEG_id_tag_update((ID *)view3d_cameracontrol_object(vctrl), OB_RECALC_OB);
/* always, is set to zero otherwise */
copy_v3_v3(rv3d->ofs, vctrl->ofs_backup);
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index 6d22f958a2f..7ce1978dca2 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -28,950 +28,294 @@
* \ingroup spview3d
*/
-#include <string.h>
-#include <stdio.h>
#include <math.h>
-#include "DNA_armature_types.h"
-#include "DNA_camera_types.h"
-#include "DNA_customdata_types.h"
-#include "DNA_object_types.h"
-#include "DNA_group_types.h"
-#include "DNA_mesh_types.h"
-#include "DNA_key_types.h"
-#include "DNA_lamp_types.h"
-#include "DNA_scene_types.h"
-#include "DNA_world_types.h"
-#include "DNA_brush_types.h"
-
-#include "MEM_guardedalloc.h"
-
-#include "BLI_blenlib.h"
+#include "BLI_listbase.h"
#include "BLI_math.h"
-#include "BLI_jitter.h"
-#include "BLI_utildefines.h"
-#include "BLI_endian_switch.h"
+#include "BLI_rect.h"
+#include "BLI_string.h"
#include "BLI_threads.h"
+#include "BLI_jitter.h"
+
+#include "BIF_gl.h"
+#include "BIF_glutil.h"
-#include "BKE_anim.h"
#include "BKE_camera.h"
#include "BKE_context.h"
-#include "BKE_customdata.h"
-#include "BKE_DerivedMesh.h"
-#include "BKE_image.h"
+#include "BKE_global.h"
#include "BKE_key.h"
-#include "BKE_main.h"
+#include "BKE_scene.h"
#include "BKE_object.h"
-#include "BKE_global.h"
#include "BKE_paint.h"
-#include "BKE_scene.h"
-#include "BKE_screen.h"
#include "BKE_unit.h"
-#include "BKE_movieclip.h"
-
-#include "RE_engine.h"
-#include "IMB_imbuf_types.h"
-#include "IMB_imbuf.h"
-#include "IMB_colormanagement.h"
+#include "BLF_api.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
+#include "BLT_translation.h"
-#include "WM_api.h"
+#include "DNA_armature_types.h"
+#include "DNA_brush_types.h"
+#include "DNA_camera_types.h"
+#include "DNA_key_types.h"
+#include "DNA_mesh_types.h"
+#include "DNA_object_types.h"
+#include "DNA_view3d_types.h"
+#include "DNA_windowmanager_types.h"
-#include "BLF_api.h"
-#include "BLT_translation.h"
+#include "DRW_engine.h"
#include "ED_armature.h"
#include "ED_keyframing.h"
#include "ED_gpencil.h"
#include "ED_screen.h"
-#include "ED_space_api.h"
-#include "ED_screen_types.h"
#include "ED_transform.h"
-#include "UI_interface.h"
-#include "UI_interface_icons.h"
-#include "UI_resources.h"
+#include "DEG_depsgraph_query.h"
#include "GPU_draw.h"
-#include "GPU_framebuffer.h"
+#include "GPU_matrix.h"
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
#include "GPU_material.h"
+#include "GPU_viewport.h"
#include "GPU_compositing.h"
-#include "GPU_extensions.h"
-#include "GPU_select.h"
-
-#include "view3d_intern.h" /* own include */
-
-/* prototypes */
-static bool view3d_stereo3d_active(wmWindow *win, Scene *scene, View3D *v3d, RegionView3D *rv3d);
-static void view3d_stereo3d_setup(Scene *scene, View3D *v3d, ARegion *ar, const rcti *rect);
-static void view3d_stereo3d_setup_offscreen(Scene *scene, View3D *v3d, ARegion *ar,
- float winmat[4][4], const char *viewname);
-
-/* handy utility for drawing shapes in the viewport for arbitrary code.
- * could add lines and points too */
-// #define DEBUG_DRAW
-#ifdef DEBUG_DRAW
-static void bl_debug_draw(void);
-/* add these locally when using these functions for testing */
-extern void bl_debug_draw_quad_clear(void);
-extern void bl_debug_draw_quad_add(const float v0[3], const float v1[3], const float v2[3], const float v3[3]);
-extern void bl_debug_draw_edge_add(const float v0[3], const float v1[3]);
-extern void bl_debug_color_set(const unsigned int col);
-#endif
-
-void circf(float x, float y, float rad)
-{
- GLUquadricObj *qobj = gluNewQuadric();
-
- gluQuadricDrawStyle(qobj, GLU_FILL);
-
- glPushMatrix();
-
- glTranslatef(x, y, 0.0);
-
- gluDisk(qobj, 0.0, rad, 32, 1);
-
- glPopMatrix();
-
- gluDeleteQuadric(qobj);
-}
-
-void circ(float x, float y, float rad)
-{
- GLUquadricObj *qobj = gluNewQuadric();
-
- gluQuadricDrawStyle(qobj, GLU_SILHOUETTE);
-
- glPushMatrix();
-
- glTranslatef(x, y, 0.0);
-
- gluDisk(qobj, 0.0, rad, 32, 1);
-
- glPopMatrix();
-
- gluDeleteQuadric(qobj);
-}
-
-/* ********* custom clipping *********** */
+#include "MEM_guardedalloc.h"
-static void view3d_draw_clipping(RegionView3D *rv3d)
-{
- BoundBox *bb = rv3d->clipbb;
-
- if (bb) {
- const unsigned int clipping_index[6][4] = {
- {0, 1, 2, 3},
- {0, 4, 5, 1},
- {4, 7, 6, 5},
- {7, 3, 2, 6},
- {1, 5, 6, 2},
- {7, 4, 0, 3}
- };
-
- /* fill in zero alpha for rendering & re-projection [#31530] */
- unsigned char col[4];
- UI_GetThemeColor4ubv(TH_V3D_CLIPPING_BORDER, col);
- glColor4ubv(col);
-
- glEnable(GL_BLEND);
- glEnableClientState(GL_VERTEX_ARRAY);
- glVertexPointer(3, GL_FLOAT, 0, bb->vec);
- glDrawElements(GL_QUADS, sizeof(clipping_index) / sizeof(unsigned int), GL_UNSIGNED_INT, clipping_index);
- glDisableClientState(GL_VERTEX_ARRAY);
- glDisable(GL_BLEND);
- }
-}
+#include "UI_interface.h"
+#include "UI_resources.h"
-void ED_view3d_clipping_set(RegionView3D *rv3d)
-{
- double plane[4];
- const unsigned int tot = (rv3d->viewlock & RV3D_BOXCLIP) ? 4 : 6;
- unsigned int a;
-
- for (a = 0; a < tot; a++) {
- copy_v4db_v4fl(plane, rv3d->clip[a]);
- glClipPlane(GL_CLIP_PLANE0 + a, plane);
- glEnable(GL_CLIP_PLANE0 + a);
- }
-}
+#include "RE_engine.h"
-/* use these to temp disable/enable clipping when 'rv3d->rflag & RV3D_CLIPPING' is set */
-void ED_view3d_clipping_disable(void)
-{
- unsigned int a;
+#include "WM_api.h"
+#include "WM_types.h"
- for (a = 0; a < 6; a++) {
- glDisable(GL_CLIP_PLANE0 + a);
- }
-}
-void ED_view3d_clipping_enable(void)
-{
- unsigned int a;
+#include "RNA_access.h"
- for (a = 0; a < 6; a++) {
- glEnable(GL_CLIP_PLANE0 + a);
- }
-}
+#include "IMB_imbuf.h"
+#include "IMB_imbuf_types.h"
-static bool view3d_clipping_test(const float co[3], const float clip[6][4])
-{
- if (plane_point_side_v3(clip[0], co) > 0.0f)
- if (plane_point_side_v3(clip[1], co) > 0.0f)
- if (plane_point_side_v3(clip[2], co) > 0.0f)
- if (plane_point_side_v3(clip[3], co) > 0.0f)
- return false;
+#include "view3d_intern.h" /* own include */
- return true;
-}
+/* ******************** general functions ***************** */
-/* for 'local' ED_view3d_clipping_local must run first
- * then all comparisons can be done in localspace */
-bool ED_view3d_clipping_test(const RegionView3D *rv3d, const float co[3], const bool is_local)
+static bool use_depth_doit(Scene *scene, View3D *v3d)
{
- return view3d_clipping_test(co, is_local ? rv3d->clip_local : rv3d->clip);
-}
-
-/* ********* end custom clipping *********** */
-
-
-static void drawgrid_draw(ARegion *ar, double wx, double wy, double x, double y, double dx)
-{
- double verts[2][2];
-
- x += (wx);
- y += (wy);
-
- /* set fixed 'Y' */
- verts[0][1] = 0.0f;
- verts[1][1] = (double)ar->winy;
-
- /* iter over 'X' */
- verts[0][0] = verts[1][0] = x - dx * floor(x / dx);
- glEnableClientState(GL_VERTEX_ARRAY);
- glVertexPointer(2, GL_DOUBLE, 0, verts);
+ if (v3d->drawtype > OB_WIRE)
+ return true;
- while (verts[0][0] < ar->winx) {
- glDrawArrays(GL_LINES, 0, 2);
- verts[0][0] = verts[1][0] = verts[0][0] + dx;
- }
-
- /* set fixed 'X' */
- verts[0][0] = 0.0f;
- verts[1][0] = (double)ar->winx;
-
- /* iter over 'Y' */
- verts[0][1] = verts[1][1] = y - dx * floor(y / dx);
- while (verts[0][1] < ar->winy) {
- glDrawArrays(GL_LINES, 0, 2);
- verts[0][1] = verts[1][1] = verts[0][1] + dx;
+ /* special case (depth for wire color) */
+ if (v3d->drawtype <= OB_WIRE) {
+ if (scene->obedit && scene->obedit->type == OB_MESH) {
+ Mesh *me = scene->obedit->data;
+ if (me->drawflag & ME_DRAWEIGHT) {
+ return true;
+ }
+ }
}
-
- glDisableClientState(GL_VERTEX_ARRAY);
+ return false;
}
-#define GRID_MIN_PX_D 6.0
-#define GRID_MIN_PX_F 6.0f
-
-static void drawgrid(UnitSettings *unit, ARegion *ar, View3D *v3d, const char **grid_unit)
+/**
+ * \note keep this synced with #ED_view3d_mats_rv3d_backup/#ED_view3d_mats_rv3d_restore
+ */
+void ED_view3d_update_viewmat(
+ const EvaluationContext *eval_ctx, Scene *scene, View3D *v3d, ARegion *ar,
+ float viewmat[4][4], float winmat[4][4], const rcti *rect)
{
- /* extern short bgpicmode; */
+ const Depsgraph *depsgraph = eval_ctx->depsgraph;
RegionView3D *rv3d = ar->regiondata;
- double wx, wy, x, y, fw, fx, fy, dx;
- double vec4[4];
- unsigned char col[3], col2[3];
-
- fx = rv3d->persmat[3][0];
- fy = rv3d->persmat[3][1];
- fw = rv3d->persmat[3][3];
-
- wx = (ar->winx / 2.0); /* because of rounding errors, grid at wrong location */
- wy = (ar->winy / 2.0);
-
- x = (wx) * fx / fw;
- y = (wy) * fy / fw;
-
- vec4[0] = vec4[1] = v3d->grid;
-
- vec4[2] = 0.0;
- vec4[3] = 1.0;
- mul_m4_v4d(rv3d->persmat, vec4);
- fx = vec4[0];
- fy = vec4[1];
- fw = vec4[3];
- dx = fabs(x - (wx) * fx / fw);
- if (dx == 0) dx = fabs(y - (wy) * fy / fw);
-
- glLineWidth(1.0f);
-
- glDepthMask(GL_FALSE); /* disable write in zbuffer */
-
- /* check zoom out */
- UI_ThemeColor(TH_GRID);
-
- if (unit->system) {
- /* Use GRID_MIN_PX * 2 for units because very very small grid
- * items are less useful when dealing with units */
- const void *usys;
- int len, i;
- double dx_scalar;
- float blend_fac;
-
- bUnit_GetSystem(unit->system, B_UNIT_LENGTH, &usys, &len);
-
- if (usys) {
- i = len;
- while (i--) {
- double scalar = bUnit_GetScaler(usys, i);
-
- dx_scalar = dx * scalar / (double)unit->scale_length;
- if (dx_scalar < (GRID_MIN_PX_D * 2.0))
- continue;
-
- /* Store the smallest drawn grid size units name so users know how big each grid cell is */
- if (*grid_unit == NULL) {
- *grid_unit = bUnit_GetNameDisplay(usys, i);
- rv3d->gridview = (float)((scalar * (double)v3d->grid) / (double)unit->scale_length);
- }
- blend_fac = 1.0f - ((GRID_MIN_PX_F * 2.0f) / (float)dx_scalar);
-
- /* tweak to have the fade a bit nicer */
- blend_fac = (blend_fac * blend_fac) * 2.0f;
- CLAMP(blend_fac, 0.3f, 1.0f);
-
-
- UI_ThemeColorBlend(TH_HIGH_GRAD, TH_GRID, blend_fac);
+ /* setup window matrices */
+ if (winmat)
+ copy_m4_m4(rv3d->winmat, winmat);
+ else
+ view3d_winmatrix_set(depsgraph, ar, v3d, rect);
- drawgrid_draw(ar, wx, wy, x, y, dx_scalar);
- }
- }
+ /* setup view matrix */
+ if (viewmat) {
+ copy_m4_m4(rv3d->viewmat, viewmat);
}
else {
- const double sublines = v3d->gridsubdiv;
- const float sublines_fl = v3d->gridsubdiv;
-
- if (dx < GRID_MIN_PX_D) {
- rv3d->gridview *= sublines_fl;
- dx *= sublines;
-
- if (dx < GRID_MIN_PX_D) {
- rv3d->gridview *= sublines_fl;
- dx *= sublines;
-
- if (dx < GRID_MIN_PX_D) {
- rv3d->gridview *= sublines_fl;
- dx *= sublines;
- if (dx < GRID_MIN_PX_D) {
- /* pass */
- }
- else {
- UI_ThemeColor(TH_GRID);
- drawgrid_draw(ar, wx, wy, x, y, dx);
- }
- }
- else { /* start blending out */
- UI_ThemeColorBlend(TH_HIGH_GRAD, TH_GRID, dx / (GRID_MIN_PX_D * 6.0));
- drawgrid_draw(ar, wx, wy, x, y, dx);
-
- UI_ThemeColor(TH_GRID);
- drawgrid_draw(ar, wx, wy, x, y, sublines * dx);
- }
- }
- else { /* start blending out (GRID_MIN_PX < dx < (GRID_MIN_PX * 10)) */
- UI_ThemeColorBlend(TH_HIGH_GRAD, TH_GRID, dx / (GRID_MIN_PX_D * 6.0));
- drawgrid_draw(ar, wx, wy, x, y, dx);
-
- UI_ThemeColor(TH_GRID);
- drawgrid_draw(ar, wx, wy, x, y, sublines * dx);
- }
- }
- else {
- if (dx > (GRID_MIN_PX_D * 10.0)) { /* start blending in */
- rv3d->gridview /= sublines_fl;
- dx /= sublines;
- if (dx > (GRID_MIN_PX_D * 10.0)) { /* start blending in */
- rv3d->gridview /= sublines_fl;
- dx /= sublines;
- if (dx > (GRID_MIN_PX_D * 10.0)) {
- UI_ThemeColor(TH_GRID);
- drawgrid_draw(ar, wx, wy, x, y, dx);
- }
- else {
- UI_ThemeColorBlend(TH_HIGH_GRAD, TH_GRID, dx / (GRID_MIN_PX_D * 6.0));
- drawgrid_draw(ar, wx, wy, x, y, dx);
- UI_ThemeColor(TH_GRID);
- drawgrid_draw(ar, wx, wy, x, y, dx * sublines);
- }
- }
- else {
- UI_ThemeColorBlend(TH_HIGH_GRAD, TH_GRID, dx / (GRID_MIN_PX_D * 6.0));
- drawgrid_draw(ar, wx, wy, x, y, dx);
- UI_ThemeColor(TH_GRID);
- drawgrid_draw(ar, wx, wy, x, y, dx * sublines);
- }
- }
- else {
- UI_ThemeColorBlend(TH_HIGH_GRAD, TH_GRID, dx / (GRID_MIN_PX_D * 6.0));
- drawgrid_draw(ar, wx, wy, x, y, dx);
- UI_ThemeColor(TH_GRID);
- drawgrid_draw(ar, wx, wy, x, y, dx * sublines);
- }
+ float rect_scale[2];
+ if (rect) {
+ rect_scale[0] = (float)BLI_rcti_size_x(rect) / (float)ar->winx;
+ rect_scale[1] = (float)BLI_rcti_size_y(rect) / (float)ar->winy;
}
+ /* note: calls BKE_object_where_is_calc for camera... */
+ view3d_viewmatrix_set(eval_ctx, scene, v3d, rv3d, rect ? rect_scale : NULL);
}
+ /* update utility matrices */
+ mul_m4_m4m4(rv3d->persmat, rv3d->winmat, rv3d->viewmat);
+ invert_m4_m4(rv3d->persinv, rv3d->persmat);
+ invert_m4_m4(rv3d->viewinv, rv3d->viewmat);
+ /* calculate GLSL view dependent values */
- x += (wx);
- y += (wy);
- UI_GetThemeColor3ubv(TH_GRID, col);
+ /* store window coordinates scaling/offset */
+ if (rv3d->persp == RV3D_CAMOB && v3d->camera) {
+ rctf cameraborder;
+ ED_view3d_calc_camera_border(scene, eval_ctx->depsgraph, ar, v3d, rv3d, &cameraborder, false);
+ rv3d->viewcamtexcofac[0] = (float)ar->winx / BLI_rctf_size_x(&cameraborder);
+ rv3d->viewcamtexcofac[1] = (float)ar->winy / BLI_rctf_size_y(&cameraborder);
- setlinestyle(0);
-
- /* center cross */
- /* horizontal line */
- if (ELEM(rv3d->view, RV3D_VIEW_RIGHT, RV3D_VIEW_LEFT))
- UI_make_axis_color(col, col2, 'Y');
- else UI_make_axis_color(col, col2, 'X');
- glColor3ubv(col2);
-
- fdrawline(0.0, y, (float)ar->winx, y);
-
- /* vertical line */
- if (ELEM(rv3d->view, RV3D_VIEW_TOP, RV3D_VIEW_BOTTOM))
- UI_make_axis_color(col, col2, 'Y');
- else UI_make_axis_color(col, col2, 'Z');
- glColor3ubv(col2);
+ rv3d->viewcamtexcofac[2] = -rv3d->viewcamtexcofac[0] * cameraborder.xmin / (float)ar->winx;
+ rv3d->viewcamtexcofac[3] = -rv3d->viewcamtexcofac[1] * cameraborder.ymin / (float)ar->winy;
+ }
+ else {
+ rv3d->viewcamtexcofac[0] = rv3d->viewcamtexcofac[1] = 1.0f;
+ rv3d->viewcamtexcofac[2] = rv3d->viewcamtexcofac[3] = 0.0f;
+ }
- fdrawline(x, 0.0, x, (float)ar->winy);
+ /* calculate pixelsize factor once, is used for lamps and obcenters */
+ {
+ /* note: '1.0f / len_v3(v1)' replaced 'len_v3(rv3d->viewmat[0])'
+ * because of float point precision problems at large values [#23908] */
+ float v1[3], v2[3];
+ float len_px, len_sc;
- glDepthMask(GL_TRUE); /* enable write in zbuffer */
-}
-#undef GRID_MIN_PX
+ v1[0] = rv3d->persmat[0][0];
+ v1[1] = rv3d->persmat[1][0];
+ v1[2] = rv3d->persmat[2][0];
-/** could move this elsewhere, but tied into #ED_view3d_grid_scale */
-float ED_scene_grid_scale(Scene *scene, const char **grid_unit)
-{
- /* apply units */
- if (scene->unit.system) {
- const void *usys;
- int len;
+ v2[0] = rv3d->persmat[0][1];
+ v2[1] = rv3d->persmat[1][1];
+ v2[2] = rv3d->persmat[2][1];
- bUnit_GetSystem(scene->unit.system, B_UNIT_LENGTH, &usys, &len);
+ len_px = 2.0f / sqrtf(min_ff(len_squared_v3(v1), len_squared_v3(v2)));
+ len_sc = (float)MAX2(ar->winx, ar->winy);
- if (usys) {
- int i = bUnit_GetBaseUnit(usys);
- if (grid_unit)
- *grid_unit = bUnit_GetNameDisplay(usys, i);
- return (float)bUnit_GetScaler(usys, i) / scene->unit.scale_length;
- }
+ rv3d->pixsize = len_px / len_sc;
}
-
- return 1.0f;
-}
-
-float ED_view3d_grid_scale(Scene *scene, View3D *v3d, const char **grid_unit)
-{
- return v3d->grid * ED_scene_grid_scale(scene, grid_unit);
}
-static void drawfloor(Scene *scene, View3D *v3d, const char **grid_unit, bool write_depth)
+static void view3d_main_region_setup_view(
+ const EvaluationContext *eval_ctx, Scene *scene,
+ View3D *v3d, ARegion *ar, float viewmat[4][4], float winmat[4][4], const rcti *rect)
{
- float grid, grid_scale;
- unsigned char col_grid[3];
- const int gridlines = v3d->gridlines / 2;
-
- if (v3d->gridlines < 3) return;
-
- /* use 'grid_scale' instead of 'v3d->grid' from now on */
- grid_scale = ED_view3d_grid_scale(scene, v3d, grid_unit);
- grid = gridlines * grid_scale;
-
- if (!write_depth)
- glDepthMask(GL_FALSE);
-
- UI_GetThemeColor3ubv(TH_GRID, col_grid);
-
- glLineWidth(1);
-
- /* draw the Y axis and/or grid lines */
- if (v3d->gridflag & V3D_SHOW_FLOOR) {
- const int sublines = v3d->gridsubdiv;
- float vert[4][3] = {{0.0f}};
- unsigned char col_bg[3];
- unsigned char col_grid_emphasise[3], col_grid_light[3];
- int a;
- int prev_emphasise = -1;
-
- UI_GetThemeColor3ubv(TH_BACK, col_bg);
-
- /* emphasise division lines lighter instead of darker, if background is darker than grid */
- UI_GetColorPtrShade3ubv(col_grid, col_grid_light, 10);
- UI_GetColorPtrShade3ubv(col_grid, col_grid_emphasise,
- (((col_grid[0] + col_grid[1] + col_grid[2]) + 30) >
- (col_bg[0] + col_bg[1] + col_bg[2])) ? 20 : -10);
-
- /* set fixed axis */
- vert[0][0] = vert[2][1] = grid;
- vert[1][0] = vert[3][1] = -grid;
-
- glEnableClientState(GL_VERTEX_ARRAY);
- glVertexPointer(3, GL_FLOAT, 0, vert);
-
- for (a = -gridlines; a <= gridlines; a++) {
- const float line = a * grid_scale;
- const int is_emphasise = (a % sublines) == 0;
-
- if (is_emphasise != prev_emphasise) {
- glColor3ubv(is_emphasise ? col_grid_emphasise : col_grid_light);
- prev_emphasise = is_emphasise;
- }
-
- /* set variable axis */
- vert[0][1] = vert[1][1] = vert[2][0] = vert[3][0] = line;
+ RegionView3D *rv3d = ar->regiondata;
- glDrawArrays(GL_LINES, 0, 4);
- }
+ ED_view3d_update_viewmat(eval_ctx, scene, v3d, ar, viewmat, winmat, rect);
- glDisableClientState(GL_VERTEX_ARRAY);
- }
-
- /* draw the Z axis line */
- /* check for the 'show Z axis' preference */
- if (v3d->gridflag & (V3D_SHOW_X | V3D_SHOW_Y | V3D_SHOW_Z)) {
- glBegin(GL_LINES);
- int axis;
- for (axis = 0; axis < 3; axis++) {
- if (v3d->gridflag & (V3D_SHOW_X << axis)) {
- float vert[3];
- unsigned char tcol[3];
-
- UI_make_axis_color(col_grid, tcol, 'X' + axis);
- glColor3ubv(tcol);
-
- zero_v3(vert);
- vert[axis] = grid;
- glVertex3fv(vert);
- vert[axis] = -grid;
- glVertex3fv(vert);
- }
- }
- glEnd();
- }
-
- glDepthMask(GL_TRUE);
+ /* set for opengl */
+ gpuLoadProjectionMatrix(rv3d->winmat);
+ gpuLoadMatrix(rv3d->viewmat);
}
-
-static void drawcursor(Scene *scene, ARegion *ar, View3D *v3d)
+static bool view3d_stereo3d_active(wmWindow *win, Scene *scene, View3D *v3d, RegionView3D *rv3d)
{
- int co[2];
-
- /* we don't want the clipping for cursor */
- if (ED_view3d_project_int_global(ar, ED_view3d_cursor3d_get(scene, v3d), co, V3D_PROJ_TEST_NOP) == V3D_PROJ_RET_OK) {
- const float f5 = 0.25f * U.widget_unit;
- const float f10 = 0.5f * U.widget_unit;
- const float f20 = U.widget_unit;
-
- glLineWidth(1);
- setlinestyle(0);
- cpack(0xFF);
- circ((float)co[0], (float)co[1], f10);
- setlinestyle(4);
- cpack(0xFFFFFF);
- circ((float)co[0], (float)co[1], f10);
- setlinestyle(0);
-
- UI_ThemeColor(TH_VIEW_OVERLAY);
- sdrawline(co[0] - f20, co[1], co[0] - f5, co[1]);
- sdrawline(co[0] + f5, co[1], co[0] + f20, co[1]);
- sdrawline(co[0], co[1] - f20, co[0], co[1] - f5);
- sdrawline(co[0], co[1] + f5, co[0], co[1] + f20);
+ if ((scene->r.scemode & R_MULTIVIEW) == 0) {
+ return false;
}
-}
-/* Draw a live substitute of the view icon, which is always shown
- * colors copied from transform_manipulator.c, we should keep these matching. */
-static void draw_view_axis(RegionView3D *rv3d, rcti *rect)
-{
- const float k = U.rvisize * U.pixelsize; /* axis size */
- const float toll = 0.5; /* used to see when view is quasi-orthogonal */
- float startx = k + 1.0f; /* axis center in screen coordinates, x=y */
- float starty = k + 1.0f;
- float ydisp = 0.0; /* vertical displacement to allow obj info text */
- int bright = - 20 * (10 - U.rvibright); /* axis alpha offset (rvibright has range 0-10) */
- float vec[3];
- float dx, dy;
-
- int axis_order[3] = {0, 1, 2};
- int axis_i;
-
- startx += rect->xmin;
- starty += rect->ymin;
-
- axis_sort_v3(rv3d->viewinv[2], axis_order);
-
- /* thickness of lines is proportional to k */
- glLineWidth(2);
-
- glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-
- for (axis_i = 0; axis_i < 3; axis_i++) {
- int i = axis_order[axis_i];
- const char axis_text[2] = {'x' + i, '\0'};
-
- zero_v3(vec);
- vec[i] = 1.0f;
- mul_qt_v3(rv3d->viewquat, vec);
- dx = vec[0] * k;
- dy = vec[1] * k;
-
- UI_ThemeColorShadeAlpha(TH_AXIS_X + i, 0, bright);
- glBegin(GL_LINES);
- glVertex2f(startx, starty + ydisp);
- glVertex2f(startx + dx, starty + dy + ydisp);
- glEnd();
-
- if (fabsf(dx) > toll || fabsf(dy) > toll) {
- BLF_draw_default_ascii(startx + dx + 2, starty + dy + ydisp + 2, 0.0f, axis_text, 1);
-
- /* BLF_draw_default disables blending */
- glEnable(GL_BLEND);
- }
+ if ((v3d->camera == NULL) || (v3d->camera->type != OB_CAMERA) || rv3d->persp != RV3D_CAMOB) {
+ return false;
}
- glDisable(GL_BLEND);
-}
-
-#ifdef WITH_INPUT_NDOF
-/* draw center and axis of rotation for ongoing 3D mouse navigation */
-static void draw_rotation_guide(RegionView3D *rv3d)
-{
- float o[3]; /* center of rotation */
- float end[3]; /* endpoints for drawing */
-
- float color[4] = {0.0f, 0.4235f, 1.0f, 1.0f}; /* bright blue so it matches device LEDs */
-
- negate_v3_v3(o, rv3d->ofs);
-
- glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glPointSize(5);
- glEnable(GL_POINT_SMOOTH);
- glDepthMask(0); /* don't overwrite zbuf */
-
- if (rv3d->rot_angle != 0.0f) {
- /* -- draw rotation axis -- */
- float scaled_axis[3];
- const float scale = rv3d->dist;
- mul_v3_v3fl(scaled_axis, rv3d->rot_axis, scale);
-
-
- glBegin(GL_LINE_STRIP);
- color[3] = 0.0f; /* more transparent toward the ends */
- glColor4fv(color);
- add_v3_v3v3(end, o, scaled_axis);
- glVertex3fv(end);
-
-#if 0
- color[3] = 0.2f + fabsf(rv3d->rot_angle); /* modulate opacity with angle */
- /* ^^ neat idea, but angle is frame-rate dependent, so it's usually close to 0.2 */
-#endif
-
- color[3] = 0.5f; /* more opaque toward the center */
- glColor4fv(color);
- glVertex3fv(o);
-
- color[3] = 0.0f;
- glColor4fv(color);
- sub_v3_v3v3(end, o, scaled_axis);
- glVertex3fv(end);
- glEnd();
-
- /* -- draw ring around rotation center -- */
- {
-#define ROT_AXIS_DETAIL 13
-
- const float s = 0.05f * scale;
- const float step = 2.0f * (float)(M_PI / ROT_AXIS_DETAIL);
- float angle;
- int i;
-
- float q[4]; /* rotate ring so it's perpendicular to axis */
- const int upright = fabsf(rv3d->rot_axis[2]) >= 0.95f;
- if (!upright) {
- const float up[3] = {0.0f, 0.0f, 1.0f};
- float vis_angle, vis_axis[3];
-
- cross_v3_v3v3(vis_axis, up, rv3d->rot_axis);
- vis_angle = acosf(dot_v3v3(up, rv3d->rot_axis));
- axis_angle_to_quat(q, vis_axis, vis_angle);
+ switch (v3d->stereo3d_camera) {
+ case STEREO_MONO_ID:
+ return false;
+ break;
+ case STEREO_3D_ID:
+ /* win will be NULL when calling this from the selection or draw loop. */
+ if ((win == NULL) || (WM_stereo3d_enabled(win, true) == false)) {
+ return false;
}
-
- color[3] = 0.25f; /* somewhat faint */
- glColor4fv(color);
- glBegin(GL_LINE_LOOP);
- for (i = 0, angle = 0.0f; i < ROT_AXIS_DETAIL; ++i, angle += step) {
- float p[3] = {s * cosf(angle), s * sinf(angle), 0.0f};
-
- if (!upright) {
- mul_qt_v3(q, p);
- }
-
- add_v3_v3(p, o);
- glVertex3fv(p);
+ if (((scene->r.views_format & SCE_VIEWS_FORMAT_MULTIVIEW) != 0) &&
+ !BKE_scene_multiview_is_stereo3d(&scene->r))
+ {
+ return false;
}
- glEnd();
-
-#undef ROT_AXIS_DETAIL
- }
-
- color[3] = 1.0f; /* solid dot */
- }
- else
- color[3] = 0.5f; /* see-through dot */
-
- /* -- draw rotation center -- */
- glColor4fv(color);
- glBegin(GL_POINTS);
- glVertex3fv(o);
- glEnd();
-
-#if 0
- /* find screen coordinates for rotation center, then draw pretty icon */
- mul_m4_v3(rv3d->persinv, rot_center);
- UI_icon_draw(rot_center[0], rot_center[1], ICON_NDOF_TURN);
- /* ^^ just playing around, does not work */
-#endif
-
- glDisable(GL_BLEND);
- glDisable(GL_POINT_SMOOTH);
- glDepthMask(1);
-}
-#endif /* WITH_INPUT_NDOF */
-
-static void draw_view_icon(RegionView3D *rv3d, rcti *rect)
-{
- BIFIconID icon;
-
- if (ELEM(rv3d->view, RV3D_VIEW_TOP, RV3D_VIEW_BOTTOM))
- icon = ICON_AXIS_TOP;
- else if (ELEM(rv3d->view, RV3D_VIEW_FRONT, RV3D_VIEW_BACK))
- icon = ICON_AXIS_FRONT;
- else if (ELEM(rv3d->view, RV3D_VIEW_RIGHT, RV3D_VIEW_LEFT))
- icon = ICON_AXIS_SIDE;
- else return;
-
- glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-
- UI_icon_draw(5.0 + rect->xmin, 5.0 + rect->ymin, icon);
-
- glDisable(GL_BLEND);
-}
-
-static const char *view3d_get_name(View3D *v3d, RegionView3D *rv3d)
-{
- const char *name = NULL;
-
- switch (rv3d->view) {
- case RV3D_VIEW_FRONT:
- if (rv3d->persp == RV3D_ORTHO) name = IFACE_("Front Ortho");
- else name = IFACE_("Front Persp");
- break;
- case RV3D_VIEW_BACK:
- if (rv3d->persp == RV3D_ORTHO) name = IFACE_("Back Ortho");
- else name = IFACE_("Back Persp");
- break;
- case RV3D_VIEW_TOP:
- if (rv3d->persp == RV3D_ORTHO) name = IFACE_("Top Ortho");
- else name = IFACE_("Top Persp");
- break;
- case RV3D_VIEW_BOTTOM:
- if (rv3d->persp == RV3D_ORTHO) name = IFACE_("Bottom Ortho");
- else name = IFACE_("Bottom Persp");
break;
- case RV3D_VIEW_RIGHT:
- if (rv3d->persp == RV3D_ORTHO) name = IFACE_("Right Ortho");
- else name = IFACE_("Right Persp");
- break;
- case RV3D_VIEW_LEFT:
- if (rv3d->persp == RV3D_ORTHO) name = IFACE_("Left Ortho");
- else name = IFACE_("Left Persp");
- break;
-
+ /* We always need the stereo calculation for left and right cameras. */
+ case STEREO_LEFT_ID:
+ case STEREO_RIGHT_ID:
default:
- if (rv3d->persp == RV3D_CAMOB) {
- if ((v3d->camera) && (v3d->camera->type == OB_CAMERA)) {
- Camera *cam;
- cam = v3d->camera->data;
- if (cam->type == CAM_PERSP) {
- name = IFACE_("Camera Persp");
- }
- else if (cam->type == CAM_ORTHO) {
- name = IFACE_("Camera Ortho");
- }
- else {
- BLI_assert(cam->type == CAM_PANO);
- name = IFACE_("Camera Pano");
- }
- }
- else {
- name = IFACE_("Object as Camera");
- }
- }
- else {
- name = (rv3d->persp == RV3D_ORTHO) ? IFACE_("User Ortho") : IFACE_("User Persp");
- }
break;
}
-
- return name;
+ return true;
}
-static void draw_viewport_name(ARegion *ar, View3D *v3d, rcti *rect)
-{
- RegionView3D *rv3d = ar->regiondata;
- const char *name = view3d_get_name(v3d, rv3d);
- /* increase size for unicode languages (Chinese in utf-8...) */
-#ifdef WITH_INTERNATIONAL
- char tmpstr[96];
-#else
- char tmpstr[32];
-#endif
- if (v3d->localvd) {
- BLI_snprintf(tmpstr, sizeof(tmpstr), IFACE_("%s (Local)"), name);
- name = tmpstr;
- }
+/* setup the view and win matrices for the multiview cameras
+ *
+ * unlike view3d_stereo3d_setup_offscreen, when view3d_stereo3d_setup is called
+ * we have no winmatrix (i.e., projection matrix) defined at that time.
+ * Since the camera and the camera shift are needed for the winmat calculation
+ * we do a small hack to replace it temporarily so we don't need to change the
+ * view3d)main_region_setup_view() code to account for that.
+ */
+static void view3d_stereo3d_setup(
+ const EvaluationContext *eval_ctx, Scene *scene, View3D *v3d, ARegion *ar, const rcti *rect)
+{
+ bool is_left;
+ const char *names[2] = { STEREO_LEFT_NAME, STEREO_RIGHT_NAME };
+ const char *viewname;
- UI_ThemeColor(TH_TEXT_HI);
-#ifdef WITH_INTERNATIONAL
- BLF_draw_default(U.widget_unit + rect->xmin, rect->ymax - U.widget_unit, 0.0f, name, sizeof(tmpstr));
-#else
- BLF_draw_default_ascii(U.widget_unit + rect->xmin, rect->ymax - U.widget_unit, 0.0f, name, sizeof(tmpstr));
-#endif
-}
+ /* show only left or right camera */
+ if (v3d->stereo3d_camera != STEREO_3D_ID)
+ v3d->multiview_eye = v3d->stereo3d_camera;
-/* draw info beside axes in bottom left-corner:
- * framenum, object name, bone name (if available), marker name (if available)
- */
+ is_left = v3d->multiview_eye == STEREO_LEFT_ID;
+ viewname = names[is_left ? STEREO_LEFT_ID : STEREO_RIGHT_ID];
-static void draw_selected_name(Scene *scene, Object *ob, rcti *rect)
-{
- const int cfra = CFRA;
- const char *msg_pin = " (Pinned)";
- const char *msg_sep = " : ";
+ /* update the viewport matrices with the new camera */
+ if (scene->r.views_format == SCE_VIEWS_FORMAT_STEREO_3D) {
+ Camera *data;
+ float viewmat[4][4];
+ float shiftx;
- char info[300];
- const char *markern;
- char *s = info;
- short offset = 1.5f * UI_UNIT_X + rect->xmin;
+ data = (Camera *)v3d->camera->data;
+ shiftx = data->shiftx;
- s += sprintf(s, "(%d)", cfra);
+ BLI_lock_thread(LOCK_VIEW3D);
+ data->shiftx = BKE_camera_multiview_shift_x(&scene->r, v3d->camera, viewname);
- /*
- * info can contain:
- * - a frame (7 + 2)
- * - 3 object names (MAX_NAME)
- * - 2 BREAD_CRUMB_SEPARATORs (6)
- * - a SHAPE_KEY_PINNED marker and a trailing '\0' (9+1) - translated, so give some room!
- * - a marker name (MAX_NAME + 3)
- */
+ BKE_camera_multiview_view_matrix(&scene->r, v3d->camera, is_left, viewmat);
+ view3d_main_region_setup_view(eval_ctx, scene, v3d, ar, viewmat, NULL, rect);
- /* get name of marker on current frame (if available) */
- markern = BKE_scene_find_marker_name(scene, cfra);
-
- /* check if there is an object */
- if (ob) {
- *s++ = ' ';
- s += BLI_strcpy_rlen(s, ob->id.name + 2);
+ data->shiftx = shiftx;
+ BLI_unlock_thread(LOCK_VIEW3D);
+ }
+ else { /* SCE_VIEWS_FORMAT_MULTIVIEW */
+ float viewmat[4][4];
+ Object *view_ob = v3d->camera;
+ Object *camera = BKE_camera_multiview_render(scene, v3d->camera, viewname);
- /* name(s) to display depends on type of object */
- if (ob->type == OB_ARMATURE) {
- bArmature *arm = ob->data;
-
- /* show name of active bone too (if possible) */
- if (arm->edbo) {
- if (arm->act_edbone) {
- s += BLI_strcpy_rlen(s, msg_sep);
- s += BLI_strcpy_rlen(s, arm->act_edbone->name);
- }
- }
- else if (ob->mode & OB_MODE_POSE) {
- if (arm->act_bone) {
+ BLI_lock_thread(LOCK_VIEW3D);
+ v3d->camera = camera;
- if (arm->act_bone->layer & arm->layer) {
- s += BLI_strcpy_rlen(s, msg_sep);
- s += BLI_strcpy_rlen(s, arm->act_bone->name);
- }
- }
- }
- }
- else if (ELEM(ob->type, OB_MESH, OB_LATTICE, OB_CURVE)) {
- Key *key = NULL;
- KeyBlock *kb = NULL;
+ BKE_camera_multiview_view_matrix(&scene->r, camera, false, viewmat);
+ view3d_main_region_setup_view(eval_ctx, scene, v3d, ar, viewmat, NULL, rect);
- /* try to display active bone and active shapekey too (if they exist) */
+ v3d->camera = view_ob;
+ BLI_unlock_thread(LOCK_VIEW3D);
+ }
+}
- if (ob->type == OB_MESH && ob->mode & OB_MODE_WEIGHT_PAINT) {
- Object *armobj = BKE_object_pose_armature_get(ob);
- if (armobj && armobj->mode & OB_MODE_POSE) {
- bArmature *arm = armobj->data;
- if (arm->act_bone) {
- if (arm->act_bone->layer & arm->layer) {
- s += BLI_strcpy_rlen(s, msg_sep);
- s += BLI_strcpy_rlen(s, arm->act_bone->name);
- }
- }
- }
- }
+/**
+ * Set the correct matrices
+ */
+void ED_view3d_draw_setup_view(
+ wmWindow *win, const EvaluationContext *eval_ctx, Scene *scene, ARegion *ar, View3D *v3d,
+ float viewmat[4][4], float winmat[4][4], const rcti *rect)
+{
+ RegionView3D *rv3d = ar->regiondata;
- key = BKE_key_from_object(ob);
- if (key) {
- kb = BLI_findlink(&key->block, ob->shapenr - 1);
- if (kb) {
- s += BLI_strcpy_rlen(s, msg_sep);
- s += BLI_strcpy_rlen(s, kb->name);
- if (ob->shapeflag & OB_SHAPE_LOCK) {
- s += BLI_strcpy_rlen(s, IFACE_(msg_pin));
- }
- }
- }
- }
-
- /* color depends on whether there is a keyframe */
- if (id_frame_has_keyframe((ID *)ob, /* BKE_scene_frame_get(scene) */ (float)cfra, ANIMFILTER_KEYS_LOCAL))
- UI_ThemeColor(TH_TIME_KEYFRAME);
- else if (ED_gpencil_has_keyframe_v3d(scene, ob, cfra))
- UI_ThemeColor(TH_TIME_GP_KEYFRAME);
- else
- UI_ThemeColor(TH_TEXT_HI);
+ /* Setup the view matrix. */
+ if (view3d_stereo3d_active(win, scene, v3d, rv3d)) {
+ view3d_stereo3d_setup(eval_ctx, scene, v3d, ar, rect);
}
else {
- /* no object */
- if (ED_gpencil_has_keyframe_v3d(scene, NULL, cfra))
- UI_ThemeColor(TH_TIME_GP_KEYFRAME);
- else
- UI_ThemeColor(TH_TEXT_HI);
- }
-
- if (markern) {
- s += sprintf(s, " <%s>", markern);
+ view3d_main_region_setup_view(eval_ctx, scene, v3d, ar, viewmat, winmat, rect);
}
-
- if (U.uiflag & USER_SHOW_ROTVIEWICON)
- offset = U.widget_unit + (U.rvisize * 2) + rect->xmin;
-
- BLF_draw_default(offset, 0.5f * U.widget_unit, 0.0f, info, sizeof(info));
}
+/* ******************** view border ***************** */
+
static void view3d_camera_border(
- const Scene *scene, const ARegion *ar, const View3D *v3d, const RegionView3D *rv3d,
+ const Scene *scene, const struct Depsgraph *depsgraph,
+ const ARegion *ar, const View3D *v3d, const RegionView3D *rv3d,
rctf *r_viewborder, const bool no_shift, const bool no_zoom)
{
CameraParams params;
@@ -979,7 +323,7 @@ static void view3d_camera_border(
/* get viewport viewplane */
BKE_camera_params_init(&params);
- BKE_camera_params_from_view3d(&params, v3d, rv3d);
+ BKE_camera_params_from_view3d(&params, depsgraph, v3d, rv3d);
if (no_zoom)
params.zoom = 1.0f;
BKE_camera_params_compute_viewplane(&params, ar->winx, ar->winy, 1.0f, 1.0f);
@@ -1006,24 +350,26 @@ static void view3d_camera_border(
}
void ED_view3d_calc_camera_border_size(
- const Scene *scene, const ARegion *ar, const View3D *v3d, const RegionView3D *rv3d,
+ const Scene *scene, const Depsgraph *depsgraph,
+ const ARegion *ar, const View3D *v3d, const RegionView3D *rv3d,
float r_size[2])
{
rctf viewborder;
- view3d_camera_border(scene, ar, v3d, rv3d, &viewborder, true, true);
+ view3d_camera_border(scene, depsgraph, ar, v3d, rv3d, &viewborder, true, true);
r_size[0] = BLI_rctf_size_x(&viewborder);
r_size[1] = BLI_rctf_size_y(&viewborder);
}
void ED_view3d_calc_camera_border(
- const Scene *scene, const ARegion *ar, const View3D *v3d, const RegionView3D *rv3d,
+ const Scene *scene, const Depsgraph *depsgraph,
+ const ARegion *ar, const View3D *v3d, const RegionView3D *rv3d,
rctf *r_viewborder, const bool no_shift)
{
- view3d_camera_border(scene, ar, v3d, rv3d, r_viewborder, no_shift, false);
+ view3d_camera_border(scene, depsgraph, ar, v3d, rv3d, r_viewborder, no_shift, false);
}
-static void drawviewborder_grid3(float x1, float x2, float y1, float y2, float fac)
+static void drawviewborder_grid3(uint shdr_pos, float x1, float x2, float y1, float y2, float fac)
{
float x3, y3, x4, y4;
@@ -1032,29 +378,33 @@ static void drawviewborder_grid3(float x1, float x2, float y1, float y2, float f
x4 = x1 + (1.0f - fac) * (x2 - x1);
y4 = y1 + (1.0f - fac) * (y2 - y1);
- glBegin(GL_LINES);
- glVertex2f(x1, y3);
- glVertex2f(x2, y3);
+ immBegin(GWN_PRIM_LINES, 8);
+
+ immVertex2f(shdr_pos, x1, y3);
+ immVertex2f(shdr_pos, x2, y3);
+
+ immVertex2f(shdr_pos, x1, y4);
+ immVertex2f(shdr_pos, x2, y4);
- glVertex2f(x1, y4);
- glVertex2f(x2, y4);
+ immVertex2f(shdr_pos, x3, y1);
+ immVertex2f(shdr_pos, x3, y2);
- glVertex2f(x3, y1);
- glVertex2f(x3, y2);
+ immVertex2f(shdr_pos, x4, y1);
+ immVertex2f(shdr_pos, x4, y2);
- glVertex2f(x4, y1);
- glVertex2f(x4, y2);
- glEnd();
+ immEnd();
}
/* harmonious triangle */
-static void drawviewborder_triangle(float x1, float x2, float y1, float y2, const char golden, const char dir)
+static void drawviewborder_triangle(
+ uint shdr_pos, float x1, float x2, float y1, float y2, const char golden, const char dir)
{
float ofs;
float w = x2 - x1;
float h = y2 - y1;
- glBegin(GL_LINES);
+ immBegin(GWN_PRIM_LINES, 6);
+
if (w > h) {
if (golden) {
ofs = w * (1.0f - (1.0f / 1.61803399f));
@@ -1064,14 +414,14 @@ static void drawviewborder_triangle(float x1, float x2, float y1, float y2, cons
}
if (dir == 'B') SWAP(float, y1, y2);
- glVertex2f(x1, y1);
- glVertex2f(x2, y2);
+ immVertex2f(shdr_pos, x1, y1);
+ immVertex2f(shdr_pos, x2, y2);
- glVertex2f(x2, y1);
- glVertex2f(x1 + (w - ofs), y2);
+ immVertex2f(shdr_pos, x2, y1);
+ immVertex2f(shdr_pos, x1 + (w - ofs), y2);
- glVertex2f(x1, y2);
- glVertex2f(x1 + ofs, y1);
+ immVertex2f(shdr_pos, x1, y2);
+ immVertex2f(shdr_pos, x1 + ofs, y1);
}
else {
if (golden) {
@@ -1082,19 +432,20 @@ static void drawviewborder_triangle(float x1, float x2, float y1, float y2, cons
}
if (dir == 'B') SWAP(float, x1, x2);
- glVertex2f(x1, y1);
- glVertex2f(x2, y2);
+ immVertex2f(shdr_pos, x1, y1);
+ immVertex2f(shdr_pos, x2, y2);
- glVertex2f(x2, y1);
- glVertex2f(x1, y1 + ofs);
+ immVertex2f(shdr_pos, x2, y1);
+ immVertex2f(shdr_pos, x1, y1 + ofs);
- glVertex2f(x1, y2);
- glVertex2f(x2, y1 + (h - ofs));
+ immVertex2f(shdr_pos, x1, y2);
+ immVertex2f(shdr_pos, x2, y1 + (h - ofs));
}
- glEnd();
+
+ immEnd();
}
-static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d)
+static void drawviewborder(Scene *scene, const Depsgraph *depsgraph, ARegion *ar, View3D *v3d)
{
float x1, x2, y1, y2;
float x1i, x2i, y1i, y2i;
@@ -1108,7 +459,7 @@ static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d)
if (v3d->camera->type == OB_CAMERA)
ca = v3d->camera->data;
- ED_view3d_calc_camera_border(scene, ar, v3d, rv3d, &viewborder, false);
+ ED_view3d_calc_camera_border(scene, depsgraph, ar, v3d, rv3d, &viewborder, false);
/* the offsets */
x1 = viewborder.xmin;
y1 = viewborder.ymin;
@@ -1128,58 +479,76 @@ static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d)
y1i = (int)(y1 - 1.0001f);
x2i = (int)(x2 + (1.0f - 0.0001f));
y2i = (int)(y2 + (1.0f - 0.0001f));
-
- /* passepartout, specified in camera edit buttons */
- if (ca && (ca->flag & CAM_SHOWPASSEPARTOUT) && ca->passepartalpha > 0.000001f) {
- const float winx = (ar->winx + 1);
- const float winy = (ar->winy + 1);
- if (ca->passepartalpha == 1.0f) {
- glColor3f(0, 0, 0);
+ uint shdr_pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ /* First, solid lines. */
+ {
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ /* passepartout, specified in camera edit buttons */
+ if (ca && (ca->flag & CAM_SHOWPASSEPARTOUT) && ca->passepartalpha > 0.000001f) {
+ const float winx = (ar->winx + 1);
+ const float winy = (ar->winy + 1);
+
+ float alpha = 1.0f;
+
+ if (ca->passepartalpha != 1.0f) {
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ glEnable(GL_BLEND);
+ alpha = ca->passepartalpha;
+ }
+
+ immUniformColor4f(0.0f, 0.0f, 0.0f, alpha);
+
+ if (x1i > 0.0f)
+ immRectf(shdr_pos, 0.0f, winy, x1i, 0.0f);
+ if (x2i < winx)
+ immRectf(shdr_pos, x2i, winy, winx, 0.0f);
+ if (y2i < winy)
+ immRectf(shdr_pos, x1i, winy, x2i, y2i);
+ if (y2i > 0.0f)
+ immRectf(shdr_pos, x1i, y1i, x2i, 0.0f);
+
+ glDisable(GL_BLEND);
}
- else {
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glEnable(GL_BLEND);
- glColor4f(0, 0, 0, ca->passepartalpha);
+
+ immUniformThemeColor(TH_BACK);
+ imm_draw_box_wire_2d(shdr_pos, x1i, y1i, x2i, y2i);
+
+#ifdef VIEW3D_CAMERA_BORDER_HACK
+ if (view3d_camera_border_hack_test == true) {
+ immUniformColor3ubv(view3d_camera_border_hack_col);
+ imm_draw_box_wire_2d(shdr_pos, x1i + 1, y1i + 1, x2i - 1, y2i - 1);
+ view3d_camera_border_hack_test = false;
}
+#endif
- if (x1i > 0.0f)
- glRectf(0.0, winy, x1i, 0.0);
- if (x2i < winx)
- glRectf(x2i, winy, winx, 0.0);
- if (y2i < winy)
- glRectf(x1i, winy, x2i, y2i);
- if (y2i > 0.0f)
- glRectf(x1i, y1i, x2i, 0.0);
-
- glDisable(GL_BLEND);
+ immUnbindProgram();
}
- setlinestyle(0);
+ /* And now, the dashed lines! */
+ immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR);
- UI_ThemeColor(TH_BACK);
-
- fdrawbox(x1i, y1i, x2i, y2i);
+ {
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2], viewport_size[3]);
-#ifdef VIEW3D_CAMERA_BORDER_HACK
- if (view3d_camera_border_hack_test == true) {
- glColor3ubv(view3d_camera_border_hack_col);
- fdrawbox(x1i + 1, y1i + 1, x2i - 1, y2i - 1);
- view3d_camera_border_hack_test = false;
- }
-#endif
+ immUniform1i("num_colors", 0); /* "simple" mode */
+ immUniform1f("dash_width", 6.0f);
+ immUniform1f("dash_factor", 0.5f);
- setlinestyle(3);
+ /* outer line not to confuse with object selection */
+ if (v3d->flag2 & V3D_LOCK_CAMERA) {
+ immUniformThemeColor(TH_REDALERT);
+ imm_draw_box_wire_2d(shdr_pos, x1i - 1, y1i - 1, x2i + 1, y2i + 1);
+ }
- /* outer line not to confuse with object selecton */
- if (v3d->flag2 & V3D_LOCK_CAMERA) {
- UI_ThemeColor(TH_REDALERT);
- fdrawbox(x1i - 1, y1i - 1, x2i + 1, y2i + 1);
+ immUniformThemeColor(TH_VIEW_OVERLAY);
+ imm_draw_box_wire_2d(shdr_pos, x1i, y1i, x2i, y2i);
}
- UI_ThemeColor(TH_VIEW_OVERLAY);
- fdrawbox(x1i, y1i, x2i, y2i);
-
/* border */
if (scene->r.mode & R_BORDER) {
float x3, y3, x4, y4;
@@ -1189,82 +558,76 @@ static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d)
x4 = floorf(x1 + (scene->r.border.xmax * (x2 - x1))) + (U.pixelsize - 1);
y4 = floorf(y1 + (scene->r.border.ymax * (y2 - y1))) + (U.pixelsize - 1);
- cpack(0x4040FF);
- sdrawbox(x3, y3, x4, y4);
+ immUniformColor3f(1.0f, 0.25f, 0.25f);
+ imm_draw_box_wire_2d(shdr_pos, x3, y3, x4, y4);
}
/* safety border */
if (ca) {
+ immUniformThemeColorBlend(TH_VIEW_OVERLAY, TH_BACK, 0.25f);
+
if (ca->dtx & CAM_DTX_CENTER) {
float x3, y3;
- UI_ThemeColorBlendShade(TH_VIEW_OVERLAY, TH_BACK, 0.25, 0);
-
x3 = x1 + 0.5f * (x2 - x1);
y3 = y1 + 0.5f * (y2 - y1);
- glBegin(GL_LINES);
- glVertex2f(x1, y3);
- glVertex2f(x2, y3);
+ immBegin(GWN_PRIM_LINES, 4);
- glVertex2f(x3, y1);
- glVertex2f(x3, y2);
- glEnd();
+ immVertex2f(shdr_pos, x1, y3);
+ immVertex2f(shdr_pos, x2, y3);
+
+ immVertex2f(shdr_pos, x3, y1);
+ immVertex2f(shdr_pos, x3, y2);
+
+ immEnd();
}
if (ca->dtx & CAM_DTX_CENTER_DIAG) {
- UI_ThemeColorBlendShade(TH_VIEW_OVERLAY, TH_BACK, 0.25, 0);
+ immBegin(GWN_PRIM_LINES, 4);
- glBegin(GL_LINES);
- glVertex2f(x1, y1);
- glVertex2f(x2, y2);
+ immVertex2f(shdr_pos, x1, y1);
+ immVertex2f(shdr_pos, x2, y2);
- glVertex2f(x1, y2);
- glVertex2f(x2, y1);
- glEnd();
+ immVertex2f(shdr_pos, x1, y2);
+ immVertex2f(shdr_pos, x2, y1);
+
+ immEnd();
}
if (ca->dtx & CAM_DTX_THIRDS) {
- UI_ThemeColorBlendShade(TH_VIEW_OVERLAY, TH_BACK, 0.25, 0);
- drawviewborder_grid3(x1, x2, y1, y2, 1.0f / 3.0f);
+ drawviewborder_grid3(shdr_pos, x1, x2, y1, y2, 1.0f / 3.0f);
}
if (ca->dtx & CAM_DTX_GOLDEN) {
- UI_ThemeColorBlendShade(TH_VIEW_OVERLAY, TH_BACK, 0.25, 0);
- drawviewborder_grid3(x1, x2, y1, y2, 1.0f - (1.0f / 1.61803399f));
+ drawviewborder_grid3(shdr_pos, x1, x2, y1, y2, 1.0f - (1.0f / 1.61803399f));
}
if (ca->dtx & CAM_DTX_GOLDEN_TRI_A) {
- UI_ThemeColorBlendShade(TH_VIEW_OVERLAY, TH_BACK, 0.25, 0);
- drawviewborder_triangle(x1, x2, y1, y2, 0, 'A');
+ drawviewborder_triangle(shdr_pos, x1, x2, y1, y2, 0, 'A');
}
if (ca->dtx & CAM_DTX_GOLDEN_TRI_B) {
- UI_ThemeColorBlendShade(TH_VIEW_OVERLAY, TH_BACK, 0.25, 0);
- drawviewborder_triangle(x1, x2, y1, y2, 0, 'B');
+ drawviewborder_triangle(shdr_pos, x1, x2, y1, y2, 0, 'B');
}
if (ca->dtx & CAM_DTX_HARMONY_TRI_A) {
- UI_ThemeColorBlendShade(TH_VIEW_OVERLAY, TH_BACK, 0.25, 0);
- drawviewborder_triangle(x1, x2, y1, y2, 1, 'A');
+ drawviewborder_triangle(shdr_pos, x1, x2, y1, y2, 1, 'A');
}
if (ca->dtx & CAM_DTX_HARMONY_TRI_B) {
- UI_ThemeColorBlendShade(TH_VIEW_OVERLAY, TH_BACK, 0.25, 0);
- drawviewborder_triangle(x1, x2, y1, y2, 1, 'B');
+ drawviewborder_triangle(shdr_pos, x1, x2, y1, y2, 1, 'B');
}
if (ca->flag & CAM_SHOW_SAFE_MARGINS) {
UI_draw_safe_areas(
- x1, x2, y1, y2,
- scene->safe_areas.title,
- scene->safe_areas.action);
+ shdr_pos, x1, x2, y1, y2,
+ scene->safe_areas.title, scene->safe_areas.action);
if (ca->flag & CAM_SHOW_SAFE_CENTER) {
UI_draw_safe_areas(
- x1, x2, y1, y2,
- scene->safe_areas.title_center,
- scene->safe_areas.action_center);
+ shdr_pos, x1, x2, y1, y2,
+ scene->safe_areas.title_center, scene->safe_areas.action_center);
}
}
@@ -1300,1783 +663,1300 @@ static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d)
}
/* draw */
- UI_ThemeColorShade(TH_VIEW_OVERLAY, 100);
- UI_draw_roundbox_gl_mode(GL_LINE_LOOP, rect.xmin, rect.ymin, rect.xmax, rect.ymax, 2.0f);
+ immUniformThemeColorShade(TH_VIEW_OVERLAY, 100);
+
+ /* TODO Was using UI_draw_roundbox_4fv(false, rect.xmin, rect.ymin, rect.xmax, rect.ymax, 2.0f, color).
+ * We'll probably need a new imm_draw_line_roundbox_dashed dor that - though in practice the
+ * 2.0f round corner effect was nearly not visible anyway... */
+ imm_draw_box_wire_2d(shdr_pos, rect.xmin, rect.ymin, rect.xmax, rect.ymax);
}
}
- setlinestyle(0);
+ immUnbindProgram();
+ /* end dashed lines */
/* camera name - draw in highlighted text color */
if (ca && (ca->flag & CAM_SHOWNAME)) {
- UI_ThemeColor(TH_TEXT_HI);
+ UI_FontThemeColor(BLF_default(), TH_TEXT_HI);
BLF_draw_default(
x1i, y1i - (0.7f * U.widget_unit), 0.0f,
v3d->camera->id.name + 2, sizeof(v3d->camera->id.name) - 2);
}
}
-/* *********************** backdraw for selection *************** */
+static void drawrenderborder(ARegion *ar, View3D *v3d)
+{
+ /* use the same program for everything */
+ uint shdr_pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ glLineWidth(1.0f);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR);
-static void backdrawview3d(Scene *scene, wmWindow *win, ARegion *ar, View3D *v3d)
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2], viewport_size[3]);
+
+ immUniform1i("num_colors", 0); /* "simple" mode */
+ immUniform4f("color", 1.0f, 0.25f, 0.25f, 1.0f);
+ immUniform1f("dash_width", 6.0f);
+ immUniform1f("dash_factor", 0.5f);
+
+ imm_draw_box_wire_2d(shdr_pos,
+ v3d->render_border.xmin * ar->winx, v3d->render_border.ymin * ar->winy,
+ v3d->render_border.xmax * ar->winx, v3d->render_border.ymax * ar->winy);
+
+ immUnbindProgram();
+}
+
+void ED_view3d_draw_depth(
+ const EvaluationContext *eval_ctx, struct Depsgraph *graph,
+ ARegion *ar, View3D *v3d, bool alphaoverride)
{
+ struct bThemeState theme_state;
+ Scene *scene = DEG_get_evaluated_scene(graph);
RegionView3D *rv3d = ar->regiondata;
- struct Base *base = scene->basact;
- int multisample_enabled;
- BLI_assert(ar->regiontype == RGN_TYPE_WINDOW);
+ short zbuf = v3d->zbuf;
+ short flag = v3d->flag;
+ float glalphaclip = U.glalphaclip;
+ int obcenter_dia = U.obcenter_dia;
+ /* temp set drawtype to solid */
+ /* Setting these temporarily is not nice */
+ v3d->flag &= ~V3D_SELECT_OUTLINE;
+ U.glalphaclip = alphaoverride ? 0.5f : glalphaclip; /* not that nice but means we wont zoom into billboards */
+ U.obcenter_dia = 0;
- if (base && (base->object->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT) ||
- BKE_paint_select_face_test(base->object)))
- {
- /* do nothing */
- }
- /* texture paint mode sampling */
- else if (base && (base->object->mode & OB_MODE_TEXTURE_PAINT) &&
- (v3d->drawtype > OB_WIRE))
- {
- /* do nothing */
- }
- else if ((base && (base->object->mode & OB_MODE_PARTICLE_EDIT)) &&
- V3D_IS_ZBUF(v3d))
- {
- /* do nothing */
- }
- else if (scene->obedit &&
- V3D_IS_ZBUF(v3d))
- {
- /* do nothing */
- }
- else {
- v3d->flag &= ~V3D_INVALID_BACKBUF;
- return;
- }
+ /* Tools may request depth outside of regular drawing code. */
+ UI_Theme_Store(&theme_state);
+ UI_SetTheme(SPACE_VIEW3D, RGN_TYPE_WINDOW);
- if (!(v3d->flag & V3D_INVALID_BACKBUF))
- return;
+ ED_view3d_draw_setup_view(NULL, eval_ctx, scene, ar, v3d, NULL, NULL, NULL);
-#if 0
- if (test) {
- if (qtest()) {
- addafterqueue(ar->win, BACKBUFDRAW, 1);
- return;
- }
- }
-#endif
+ glClear(GL_DEPTH_BUFFER_BIT);
- if (v3d->drawtype > OB_WIRE) v3d->zbuf = true;
-
- /* dithering and AA break color coding, so disable */
- glDisable(GL_DITHER);
-
- multisample_enabled = glIsEnabled(GL_MULTISAMPLE);
- if (multisample_enabled)
- glDisable(GL_MULTISAMPLE);
-
- if (win->multisamples != USER_MULTISAMPLE_NONE) {
- /* for multisample we use an offscreen FBO. multisample drawing can fail
- * with color coded selection drawing, and reading back depths from such
- * a buffer can also cause a few seconds freeze on OS X / NVidia. */
- int w = BLI_rcti_size_x(&ar->winrct);
- int h = BLI_rcti_size_y(&ar->winrct);
- char error[256];
-
- if (rv3d->gpuoffscreen) {
- if (GPU_offscreen_width(rv3d->gpuoffscreen) != w ||
- GPU_offscreen_height(rv3d->gpuoffscreen) != h)
- {
- GPU_offscreen_free(rv3d->gpuoffscreen);
- rv3d->gpuoffscreen = NULL;
- }
- }
+ if (rv3d->rflag & RV3D_CLIPPING) {
+ ED_view3d_clipping_set(rv3d);
+ }
+ /* get surface depth without bias */
+ rv3d->rflag |= RV3D_ZOFFSET_DISABLED;
- if (!rv3d->gpuoffscreen) {
- rv3d->gpuoffscreen = GPU_offscreen_create(w, h, 0, error);
+ v3d->zbuf = true;
+ glEnable(GL_DEPTH_TEST);
- if (!rv3d->gpuoffscreen)
- fprintf(stderr, "Failed to create offscreen selection buffer for multisample: %s\n", error);
- }
+#ifdef WITH_OPENGL_LEGACY
+ if (IS_VIEWPORT_LEGACY(vc->v3d)) {
+ /* temp, calls into view3d_draw_legacy.c */
+ ED_view3d_draw_depth_loop(scene, ar, v3d);
}
-
- if (rv3d->gpuoffscreen)
- GPU_offscreen_bind(rv3d->gpuoffscreen, true);
else
- glScissor(ar->winrct.xmin, ar->winrct.ymin, BLI_rcti_size_x(&ar->winrct), BLI_rcti_size_y(&ar->winrct));
-
- glClearColor(0.0, 0.0, 0.0, 0.0);
- if (v3d->zbuf) {
- glEnable(GL_DEPTH_TEST);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+#endif /* WITH_OPENGL_LEGACY */
+ {
+ DRW_draw_depth_loop(graph, ar, v3d, eval_ctx->object_mode);
}
- else {
- glClear(GL_COLOR_BUFFER_BIT);
- glDisable(GL_DEPTH_TEST);
+
+ if (rv3d->rflag & RV3D_CLIPPING) {
+ ED_view3d_clipping_disable();
}
-
- if (rv3d->rflag & RV3D_CLIPPING)
- ED_view3d_clipping_set(rv3d);
-
- G.f |= G_BACKBUFSEL;
-
- if (base && (base->lay & v3d->lay))
- draw_object_backbufsel(scene, v3d, rv3d, base->object);
-
- if (rv3d->gpuoffscreen)
- GPU_offscreen_unbind(rv3d->gpuoffscreen, true);
- else
- ar->swap = 0; /* mark invalid backbuf for wm draw */
+ rv3d->rflag &= ~RV3D_ZOFFSET_DISABLED;
- v3d->flag &= ~V3D_INVALID_BACKBUF;
+ v3d->zbuf = zbuf;
+ if (!v3d->zbuf) glDisable(GL_DEPTH_TEST);
- G.f &= ~G_BACKBUFSEL;
- v3d->zbuf = false;
- glDisable(GL_DEPTH_TEST);
- glEnable(GL_DITHER);
- if (multisample_enabled)
- glEnable(GL_MULTISAMPLE);
+ U.glalphaclip = glalphaclip;
+ v3d->flag = flag;
+ U.obcenter_dia = obcenter_dia;
- if (rv3d->rflag & RV3D_CLIPPING)
- ED_view3d_clipping_disable();
+ UI_Theme_Restore(&theme_state);
}
-void view3d_opengl_read_pixels(ARegion *ar, int x, int y, int w, int h, int format, int type, void *data)
+/* ******************** background plates ***************** */
+
+static void view3d_draw_background_gradient(void)
{
- RegionView3D *rv3d = ar->regiondata;
+ /* TODO: finish 2D API & draw background with that */
- if (rv3d->gpuoffscreen) {
- GPU_offscreen_bind(rv3d->gpuoffscreen, true);
- glReadBuffer(GL_COLOR_ATTACHMENT0_EXT);
- glReadPixels(x, y, w, h, format, type, data);
- GPU_offscreen_unbind(rv3d->gpuoffscreen, true);
- }
- else {
- glReadPixels(ar->winrct.xmin + x, ar->winrct.ymin + y, w, h, format, type, data);
- }
-}
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
+ unsigned char col_hi[3], col_lo[3];
-/* XXX depth reading exception, for code not using gpu offscreen */
-static void view3d_opengl_read_Z_pixels(ARegion *ar, int x, int y, int w, int h, int format, int type, void *data)
-{
+ immBindBuiltinProgram(GPU_SHADER_2D_SMOOTH_COLOR);
- glReadPixels(ar->winrct.xmin + x, ar->winrct.ymin + y, w, h, format, type, data);
-}
+ UI_GetThemeColor3ubv(TH_LOW_GRAD, col_lo);
+ UI_GetThemeColor3ubv(TH_HIGH_GRAD, col_hi);
-void ED_view3d_backbuf_validate(ViewContext *vc)
-{
- if (vc->v3d->flag & V3D_INVALID_BACKBUF)
- backdrawview3d(vc->scene, vc->win, vc->ar, vc->v3d);
+ immBegin(GWN_PRIM_TRI_FAN, 4);
+ immAttrib3ubv(color, col_lo);
+ immVertex2f(pos, -1.0f, -1.0f);
+ immVertex2f(pos, 1.0f, -1.0f);
+
+ immAttrib3ubv(color, col_hi);
+ immVertex2f(pos, 1.0f, 1.0f);
+ immVertex2f(pos, -1.0f, 1.0f);
+ immEnd();
+
+ immUnbindProgram();
}
-/**
- * allow for small values [0.5 - 2.5],
- * and large values, FLT_MAX by clamping by the area size
- */
-int ED_view3d_backbuf_sample_size_clamp(ARegion *ar, const float dist)
+static void view3d_draw_background_none(void)
{
- return (int)min_ff(ceilf(dist), (float)max_ii(ar->winx, ar->winx));
+ UI_ThemeClearColorAlpha(TH_HIGH_GRAD, 1.0f);
+ glClear(GL_COLOR_BUFFER_BIT);
}
-/* samples a single pixel (copied from vpaint) */
-unsigned int ED_view3d_backbuf_sample(ViewContext *vc, int x, int y)
+static void view3d_draw_background_world(Scene *scene, RegionView3D *rv3d)
{
- unsigned int col;
-
- if (x >= vc->ar->winx || y >= vc->ar->winy) {
- return 0;
- }
+ if (scene->world) {
+ GPUMaterial *gpumat = GPU_material_world(scene, scene->world);
- ED_view3d_backbuf_validate(vc);
+ /* calculate full shader for background */
+ GPU_material_bind(gpumat, 1, 1, 1.0f, false, rv3d->viewmat, rv3d->viewinv, rv3d->viewcamtexcofac);
+
+ if (GPU_material_bound(gpumat)) {
+ /* TODO viewport (dfelinto): GPU_material_bind relies on immediate mode,
+ * we can't get rid of the following code without a bigger refactor
+ * or we dropping this functionality. */
+
+ glBegin(GL_TRIANGLE_STRIP);
+ glVertex2f(-1.0f, -1.0f);
+ glVertex2f(1.0f, -1.0f);
+ glVertex2f(-1.0f, 1.0f);
+ glVertex2f(1.0f, 1.0f);
+ glEnd();
- view3d_opengl_read_pixels(vc->ar, x, y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, &col);
- glReadBuffer(GL_BACK);
-
- if (ENDIAN_ORDER == B_ENDIAN) {
- BLI_endian_switch_uint32(&col);
+ GPU_material_unbind(gpumat);
+ return;
+ }
}
-
- return GPU_select_to_index(col);
-}
-/* reads full rect, converts indices */
-ImBuf *ED_view3d_backbuf_read(ViewContext *vc, int xmin, int ymin, int xmax, int ymax)
-{
- struct ImBuf *ibuf_clip;
- /* clip */
- const rcti clip = {
- max_ii(xmin, 0), min_ii(xmax, vc->ar->winx - 1),
- max_ii(ymin, 0), min_ii(ymax, vc->ar->winy - 1)};
- const int size_clip[2] = {
- BLI_rcti_size_x(&clip) + 1,
- BLI_rcti_size_y(&clip) + 1};
-
- if (UNLIKELY((clip.xmin > clip.xmax) ||
- (clip.ymin > clip.ymax)))
- {
- return NULL;
- }
+ /* if any of the above fails */
+ view3d_draw_background_none();
+}
- ibuf_clip = IMB_allocImBuf(size_clip[0], size_clip[1], 32, IB_rect);
+/* ******************** other elements ***************** */
- ED_view3d_backbuf_validate(vc);
- view3d_opengl_read_pixels(vc->ar, clip.xmin, clip.ymin, size_clip[0], size_clip[1], GL_RGBA, GL_UNSIGNED_BYTE, ibuf_clip->rect);
+#define DEBUG_GRID 0
- glReadBuffer(GL_BACK);
+static void gridline_range(double x0, double dx, double max, int *r_first, int *r_count)
+{
+ /* determine range of gridlines that appear in this Area -- similar calc but separate ranges for x & y
+ * x0 is gridline 0, the axis in screen space
+ * Area covers [0 .. max) pixels */
- if (ENDIAN_ORDER == B_ENDIAN) {
- IMB_convert_rgba_to_abgr(ibuf_clip);
- }
+ int first = (int)ceil(-x0 / dx);
+ int last = (int)floor((max - x0) / dx);
- GPU_select_to_index_array(ibuf_clip->rect, size_clip[0] * size_clip[1]);
-
- if ((clip.xmin == xmin) &&
- (clip.xmax == xmax) &&
- (clip.ymin == ymin) &&
- (clip.ymax == ymax))
- {
- return ibuf_clip;
+ if (first <= last) {
+ *r_first = first;
+ *r_count = last - first + 1;
}
else {
- /* put clipped result into a non-clipped buffer */
- struct ImBuf *ibuf_full;
- const int size[2] = {
- (xmax - xmin + 1),
- (ymax - ymin + 1)};
-
- ibuf_full = IMB_allocImBuf(size[0], size[1], 32, IB_rect);
-
- IMB_rectcpy(
- ibuf_full, ibuf_clip,
- clip.xmin - xmin, clip.ymin - ymin,
- 0, 0,
- size_clip[0], size_clip[1]);
- IMB_freeImBuf(ibuf_clip);
- return ibuf_full;
+ *r_first = 0;
+ *r_count = 0;
}
+
+#if DEBUG_GRID
+ printf(" first %d * dx = %f\n", first, x0 + first * dx);
+ printf(" last %d * dx = %f\n", last, x0 + last * dx);
+ printf(" count = %d\n", *count_out);
+#endif
}
-/* smart function to sample a rect spiralling outside, nice for backbuf selection */
-unsigned int ED_view3d_backbuf_sample_rect(
- ViewContext *vc, const int mval[2], int size,
- unsigned int min, unsigned int max, float *r_dist)
+static int gridline_count(ARegion *ar, double x0, double y0, double dx)
{
- struct ImBuf *buf;
- const unsigned int *bufmin, *bufmax, *tbuf;
- int minx, miny;
- int a, b, rc, nr, amount, dirvec[4][2];
- unsigned int index = 0;
-
- amount = (size - 1) / 2;
+ /* x0 & y0 establish the "phase" of the grid within this 2D region
+ * dx is the frequency, shared by x & y directions
+ * pass in dx of smallest (highest precision) grid we want to draw */
- minx = mval[0] - (amount + 1);
- miny = mval[1] - (amount + 1);
- buf = ED_view3d_backbuf_read(vc, minx, miny, minx + size - 1, miny + size - 1);
- if (!buf) return 0;
-
- rc = 0;
-
- dirvec[0][0] = 1; dirvec[0][1] = 0;
- dirvec[1][0] = 0; dirvec[1][1] = -size;
- dirvec[2][0] = -1; dirvec[2][1] = 0;
- dirvec[3][0] = 0; dirvec[3][1] = size;
-
- bufmin = buf->rect;
- tbuf = buf->rect;
- bufmax = buf->rect + size * size;
- tbuf += amount * size + amount;
-
- for (nr = 1; nr <= size; nr++) {
-
- for (a = 0; a < 2; a++) {
- for (b = 0; b < nr; b++) {
- if (*tbuf && *tbuf >= min && *tbuf < max) {
- /* we got a hit */
-
- /* get x,y pixel coords from the offset
- * (manhatten distance in keeping with other screen-based selection) */
- *r_dist = (float)(
- abs(((int)(tbuf - buf->rect) % size) - (size / 2)) +
- abs(((int)(tbuf - buf->rect) / size) - (size / 2)));
-
- /* indices start at 1 here */
- index = (*tbuf - min) + 1;
- goto exit;
- }
-
- tbuf += (dirvec[rc][0] + dirvec[rc][1]);
-
- if (tbuf < bufmin || tbuf >= bufmax) {
- goto exit;
- }
- }
- rc++;
- rc &= 3;
- }
- }
-
-exit:
- IMB_freeImBuf(buf);
- return index;
-}
+#if DEBUG_GRID
+ printf(" %s(%f, %f, dx:%f)\n", __FUNCTION__, x0, y0, dx);
+#endif
+ int first, x_ct, y_ct;
-/* ************************************************************* */
+ gridline_range(x0, dx, ar->winx, &first, &x_ct);
+ gridline_range(y0, dx, ar->winy, &first, &y_ct);
-static void view3d_stereo_bgpic_setup(Scene *scene, View3D *v3d, Image *ima, ImageUser *iuser)
-{
- if (BKE_image_is_stereo(ima)) {
- iuser->flag |= IMA_SHOW_STEREO;
+ int total_ct = x_ct + y_ct;
- if ((scene->r.scemode & R_MULTIVIEW) == 0) {
- iuser->multiview_eye = STEREO_LEFT_ID;
- }
- else if (v3d->stereo3d_camera != STEREO_3D_ID) {
- /* show only left or right camera */
- iuser->multiview_eye = v3d->stereo3d_camera;
- }
+#if DEBUG_GRID
+ printf(" %d + %d = %d gridlines\n", x_ct, y_ct, total_ct);
+#endif
- BKE_image_multiview_index(ima, iuser);
- }
- else {
- iuser->flag &= ~IMA_SHOW_STEREO;
- }
+ return total_ct;
}
-static void view3d_draw_bgpic(Scene *scene, ARegion *ar, View3D *v3d,
- const bool do_foreground, const bool do_camera_frame)
+static bool drawgrid_draw(ARegion *ar, double x0, double y0, double dx, int skip_mod, unsigned pos, unsigned col, GLubyte col_value[3])
{
- RegionView3D *rv3d = ar->regiondata;
- BGpic *bgpic;
- int fg_flag = do_foreground ? V3D_BGPIC_FOREGROUND : 0;
-
- for (bgpic = v3d->bgpicbase.first; bgpic; bgpic = bgpic->next) {
- bgpic->iuser.scene = scene; /* Needed for render results. */
+ /* skip every skip_mod lines relative to each axis; they will be overlaid by another drawgrid_draw
+ * always skip exact x0 & y0 axes; they will be drawn later in color
+ *
+ * set grid color once, just before the first line is drawn
+ * it's harmless to set same color for every line, or every vertex
+ * but if no lines are drawn, color must not be set! */
- if ((bgpic->flag & V3D_BGPIC_FOREGROUND) != fg_flag)
- continue;
+#if DEBUG_GRID
+ printf(" %s(%f, %f, dx:%f, skip_mod:%d)\n", __FUNCTION__, x0, y0, dx, skip_mod);
+#endif
- if ((bgpic->view == 0) || /* zero for any */
- (bgpic->view & (1 << rv3d->view)) || /* check agaist flags */
- (rv3d->persp == RV3D_CAMOB && bgpic->view == (1 << RV3D_VIEW_CAMERA)))
- {
- float image_aspect[2];
- float fac, asp, zoomx, zoomy;
- float x1, y1, x2, y2, centx, centy;
-
- ImBuf *ibuf = NULL, *freeibuf, *releaseibuf;
- void *lock;
- rctf clip_rect;
-
- Image *ima = NULL;
- MovieClip *clip = NULL;
-
- /* disable individual images */
- if ((bgpic->flag & V3D_BGPIC_DISABLED))
- continue;
-
- freeibuf = NULL;
- releaseibuf = NULL;
- if (bgpic->source == V3D_BGPIC_IMAGE) {
- ima = bgpic->ima;
- if (ima == NULL)
- continue;
- BKE_image_user_frame_calc(&bgpic->iuser, CFRA, 0);
- if (ima->source == IMA_SRC_SEQUENCE && !(bgpic->iuser.flag & IMA_USER_FRAME_IN_RANGE)) {
- ibuf = NULL; /* frame is out of range, dont show */
- }
- else {
- view3d_stereo_bgpic_setup(scene, v3d, ima, &bgpic->iuser);
- ibuf = BKE_image_acquire_ibuf(ima, &bgpic->iuser, &lock);
- releaseibuf = ibuf;
- }
+ const float x_max = (float)ar->winx;
+ const float y_max = (float)ar->winy;
- image_aspect[0] = ima->aspx;
- image_aspect[1] = ima->aspy;
- }
- else if (bgpic->source == V3D_BGPIC_MOVIE) {
- /* TODO: skip drawing when out of frame range (as image sequences do above) */
+ int first, ct;
+ int x_ct = 0, y_ct = 0; /* count of lines actually drawn */
+ int lines_skipped_for_next_unit = 0;
- if (bgpic->flag & V3D_BGPIC_CAMERACLIP) {
- if (scene->camera)
- clip = BKE_object_movieclip_get(scene, scene->camera, true);
- }
- else {
- clip = bgpic->clip;
- }
+ /* draw vertical lines */
+ gridline_range(x0, dx, x_max, &first, &ct);
- if (clip == NULL)
- continue;
+ for (int i = first; i < first + ct; ++i) {
+ if (i == 0)
+ continue;
+ else if (skip_mod && (i % skip_mod) == 0) {
+ ++lines_skipped_for_next_unit;
+ continue;
+ }
- BKE_movieclip_user_set_frame(&bgpic->cuser, CFRA);
- ibuf = BKE_movieclip_get_ibuf(clip, &bgpic->cuser);
+ if (x_ct == 0)
+ immAttrib3ub(col, col_value[0], col_value[1], col_value[2]);
- image_aspect[0] = clip->aspx;
- image_aspect[1] = clip->aspy;
+ float x = (float)(x0 + i * dx);
+ immVertex2f(pos, x, 0.0f);
+ immVertex2f(pos, x, y_max);
+ ++x_ct;
+ }
- /* working with ibuf from image and clip has got different workflow now.
- * ibuf acquired from clip is referenced by cache system and should
- * be dereferenced after usage. */
- freeibuf = ibuf;
- }
- else {
- /* perhaps when loading future files... */
- BLI_assert(0);
- copy_v2_fl(image_aspect, 1.0f);
- }
+ /* draw horizontal lines */
+ gridline_range(y0, dx, y_max, &first, &ct);
- if (ibuf == NULL)
- continue;
+ for (int i = first; i < first + ct; ++i) {
+ if (i == 0)
+ continue;
+ else if (skip_mod && (i % skip_mod) == 0) {
+ ++lines_skipped_for_next_unit;
+ continue;
+ }
- if ((ibuf->rect == NULL && ibuf->rect_float == NULL) || ibuf->channels != 4) { /* invalid image format */
- if (freeibuf)
- IMB_freeImBuf(freeibuf);
- if (releaseibuf)
- BKE_image_release_ibuf(ima, releaseibuf, lock);
+ if (x_ct + y_ct == 0)
+ immAttrib3ub(col, col_value[0], col_value[1], col_value[2]);
- continue;
- }
+ float y = (float)(y0 + i * dx);
+ immVertex2f(pos, 0.0f, y);
+ immVertex2f(pos, x_max, y);
+ ++y_ct;
+ }
- if (ibuf->rect == NULL)
- IMB_rect_from_float(ibuf);
+#if DEBUG_GRID
+ int total_ct = x_ct + y_ct;
+ printf(" %d + %d = %d gridlines drawn, %d skipped for next unit\n", x_ct, y_ct, total_ct, lines_skipped_for_next_unit);
+#endif
- if (rv3d->persp == RV3D_CAMOB) {
+ return lines_skipped_for_next_unit > 0;
+}
- if (do_camera_frame) {
- rctf vb;
- ED_view3d_calc_camera_border(scene, ar, v3d, rv3d, &vb, false);
- x1 = vb.xmin;
- y1 = vb.ymin;
- x2 = vb.xmax;
- y2 = vb.ymax;
- }
- else {
- x1 = ar->winrct.xmin;
- y1 = ar->winrct.ymin;
- x2 = ar->winrct.xmax;
- y2 = ar->winrct.ymax;
- }
+#define GRID_MIN_PX_D 6.0
+#define GRID_MIN_PX_F 6.0f
- /* apply offset last - camera offset is different to offset in blender units */
- /* so this has some sane way of working - this matches camera's shift _exactly_ */
- {
- const float max_dim = max_ff(x2 - x1, y2 - y1);
- const float xof_scale = bgpic->xof * max_dim;
- const float yof_scale = bgpic->yof * max_dim;
-
- x1 += xof_scale;
- y1 += yof_scale;
- x2 += xof_scale;
- y2 += yof_scale;
- }
+static void drawgrid(UnitSettings *unit, ARegion *ar, View3D *v3d, const char **grid_unit)
+{
+ RegionView3D *rv3d = ar->regiondata;
- centx = (x1 + x2) / 2.0f;
- centy = (y1 + y2) / 2.0f;
+#if DEBUG_GRID
+ printf("%s width %d, height %d\n", __FUNCTION__, ar->winx, ar->winy);
+#endif
- /* aspect correction */
- if (bgpic->flag & V3D_BGPIC_CAMERA_ASPECT) {
- /* apply aspect from clip */
- const float w_src = ibuf->x * image_aspect[0];
- const float h_src = ibuf->y * image_aspect[1];
+ double fx = rv3d->persmat[3][0];
+ double fy = rv3d->persmat[3][1];
+ double fw = rv3d->persmat[3][3];
- /* destination aspect is already applied from the camera frame */
- const float w_dst = x1 - x2;
- const float h_dst = y1 - y2;
+ const double wx = 0.5 * ar->winx; /* use double precision to avoid rounding errors */
+ const double wy = 0.5 * ar->winy;
- const float asp_src = w_src / h_src;
- const float asp_dst = w_dst / h_dst;
+ double x = wx * fx / fw;
+ double y = wy * fy / fw;
- if (fabsf(asp_src - asp_dst) >= FLT_EPSILON) {
- if ((asp_src > asp_dst) == ((bgpic->flag & V3D_BGPIC_CAMERA_CROP) != 0)) {
- /* fit X */
- const float div = asp_src / asp_dst;
- x1 = ((x1 - centx) * div) + centx;
- x2 = ((x2 - centx) * div) + centx;
- }
- else {
- /* fit Y */
- const float div = asp_dst / asp_src;
- y1 = ((y1 - centy) * div) + centy;
- y2 = ((y2 - centy) * div) + centy;
- }
- }
- }
- }
- else {
- float tvec[3];
- float sco[2];
- const float mval_f[2] = {1.0f, 0.0f};
- const float co_zero[3] = {0};
- float zfac;
-
- /* calc window coord */
- zfac = ED_view3d_calc_zfac(rv3d, co_zero, NULL);
- ED_view3d_win_to_delta(ar, mval_f, tvec, zfac);
- fac = max_ff(fabsf(tvec[0]), max_ff(fabsf(tvec[1]), fabsf(tvec[2]))); /* largest abs axis */
- fac = 1.0f / fac;
-
- asp = (float)ibuf->y / (float)ibuf->x;
-
- zero_v3(tvec);
- ED_view3d_project_float_v2_m4(ar, tvec, sco, rv3d->persmat);
-
- x1 = sco[0] + fac * (bgpic->xof - bgpic->size);
- y1 = sco[1] + asp * fac * (bgpic->yof - bgpic->size);
- x2 = sco[0] + fac * (bgpic->xof + bgpic->size);
- y2 = sco[1] + asp * fac * (bgpic->yof + bgpic->size);
-
- centx = (x1 + x2) / 2.0f;
- centy = (y1 + y2) / 2.0f;
- }
+ double vec4[4] = { v3d->grid, v3d->grid, 0.0, 1.0 };
+ mul_m4_v4d(rv3d->persmat, vec4);
+ fx = vec4[0];
+ fy = vec4[1];
+ fw = vec4[3];
- /* complete clip? */
- BLI_rctf_init(&clip_rect, x1, x2, y1, y2);
- if (bgpic->rotation) {
- BLI_rctf_rotate_expand(&clip_rect, &clip_rect, bgpic->rotation);
- }
+ double dx = fabs(x - wx * fx / fw);
+ if (dx == 0) dx = fabs(y - wy * fy / fw);
- if (clip_rect.xmax < 0 || clip_rect.ymax < 0 || clip_rect.xmin > ar->winx || clip_rect.ymin > ar->winy) {
- if (freeibuf)
- IMB_freeImBuf(freeibuf);
- if (releaseibuf)
- BKE_image_release_ibuf(ima, releaseibuf, lock);
+ x += wx;
+ y += wy;
- continue;
- }
+ /* now x, y, and dx have their final values
+ * (x,y) is the world origin (0,0,0) mapped to Area-relative screen space
+ * dx is the distance in pixels between grid lines -- same for horiz or vert grid lines */
- zoomx = (x2 - x1) / ibuf->x;
- zoomy = (y2 - y1) / ibuf->y;
+ glLineWidth(1.0f);
- /* for some reason; zoomlevels down refuses to use GL_ALPHA_SCALE */
- if (zoomx < 1.0f || zoomy < 1.0f) {
- float tzoom = min_ff(zoomx, zoomy);
- int mip = 0;
+#if 0 /* TODO: write to UI/widget depth buffer, not scene depth */
+ glDepthMask(GL_FALSE); /* disable write in zbuffer */
+#endif
- if ((ibuf->userflags & IB_MIPMAP_INVALID) != 0) {
- IMB_remakemipmap(ibuf, 0);
- ibuf->userflags &= ~IB_MIPMAP_INVALID;
- }
- else if (ibuf->mipmap[0] == NULL)
- IMB_makemipmap(ibuf, 0);
-
- while (tzoom < 1.0f && mip < 8 && ibuf->mipmap[mip]) {
- tzoom *= 2.0f;
- zoomx *= 2.0f;
- zoomy *= 2.0f;
- mip++;
- }
- if (mip > 0)
- ibuf = ibuf->mipmap[mip - 1];
- }
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
- if (v3d->zbuf) glDisable(GL_DEPTH_TEST);
- glDepthMask(0);
+ immBindBuiltinProgram(GPU_SHADER_2D_FLAT_COLOR);
- glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ unsigned char col[3], col2[3];
+ UI_GetThemeColor3ubv(TH_GRID, col);
- glMatrixMode(GL_PROJECTION);
- glPushMatrix();
- glMatrixMode(GL_MODELVIEW);
- glPushMatrix();
- ED_region_pixelspace(ar);
+ if (unit->system) {
+ const void *usys;
+ int len;
- glTranslatef(centx, centy, 0.0);
- glRotatef(RAD2DEGF(-bgpic->rotation), 0.0f, 0.0f, 1.0f);
+ bUnit_GetSystem(unit->system, B_UNIT_LENGTH, &usys, &len);
- if (bgpic->flag & V3D_BGPIC_FLIP_X) {
- zoomx *= -1.0f;
- x1 = x2;
- }
- if (bgpic->flag & V3D_BGPIC_FLIP_Y) {
- zoomy *= -1.0f;
- y1 = y2;
- }
- glPixelZoom(zoomx, zoomy);
- glColor4f(1.0f, 1.0f, 1.0f, 1.0f - bgpic->blend);
+ bool first = true;
- /* could not use glaDrawPixelsAuto because it could fallback to
- * glaDrawPixelsSafe in some cases, which will end up in missing
- * alpha transparency for the background image (sergey)
- */
- glaDrawPixelsTex(x1 - centx, y1 - centy, ibuf->x, ibuf->y, GL_RGBA, GL_UNSIGNED_BYTE, GL_LINEAR, ibuf->rect);
+ if (usys) {
+ int i = len;
+ while (i--) {
+ double scalar = bUnit_GetScaler(usys, i);
- glPixelZoom(1.0, 1.0);
- glPixelTransferf(GL_ALPHA_SCALE, 1.0f);
+ double dx_scalar = dx * scalar / (double)unit->scale_length;
+ if (dx_scalar < (GRID_MIN_PX_D * 2.0)) {
+ /* very very small grid items are less useful when dealing with units */
+ continue;
+ }
- glMatrixMode(GL_PROJECTION);
- glPopMatrix();
- glMatrixMode(GL_MODELVIEW);
- glPopMatrix();
+ if (first) {
+ first = false;
- glDisable(GL_BLEND);
+ /* Store the smallest drawn grid size units name so users know how big each grid cell is */
+ *grid_unit = bUnit_GetNameDisplay(usys, i);
+ rv3d->gridview = (float)((scalar * (double)v3d->grid) / (double)unit->scale_length);
- glDepthMask(1);
- if (v3d->zbuf) glEnable(GL_DEPTH_TEST);
+ int gridline_ct = gridline_count(ar, x, y, dx_scalar);
+ if (gridline_ct == 0)
+ goto drawgrid_cleanup; /* nothing to draw */
- if (freeibuf)
- IMB_freeImBuf(freeibuf);
- if (releaseibuf)
- BKE_image_release_ibuf(ima, releaseibuf, lock);
- }
- }
-}
+ immBegin(GWN_PRIM_LINES, gridline_ct * 2);
+ }
-static void view3d_draw_bgpic_test(Scene *scene, ARegion *ar, View3D *v3d,
- const bool do_foreground, const bool do_camera_frame)
-{
- RegionView3D *rv3d = ar->regiondata;
+ float blend_fac = 1.0f - ((GRID_MIN_PX_F * 2.0f) / (float)dx_scalar);
+ /* tweak to have the fade a bit nicer */
+ blend_fac = (blend_fac * blend_fac) * 2.0f;
+ CLAMP(blend_fac, 0.3f, 1.0f);
- if ((v3d->flag & V3D_DISPBGPICS) == 0)
- return;
+ UI_GetThemeColorBlend3ubv(TH_HIGH_GRAD, TH_GRID, blend_fac, col2);
- /* disabled - mango request, since footage /w only render is quite useful
- * and this option is easy to disable all background images at once */
-#if 0
- if (v3d->flag2 & V3D_RENDER_OVERRIDE)
- return;
+ const int skip_mod = (i == 0) ? 0 : (int)round(bUnit_GetScaler(usys, i - 1) / scalar);
+#if DEBUG_GRID
+ printf("%s %f, ", bUnit_GetNameDisplay(usys, i), scalar);
+ if (i > 0)
+ printf("next unit is %d times larger\n", skip_mod);
+ else
+ printf("largest unit\n");
#endif
-
- if ((rv3d->view == RV3D_VIEW_USER) || (rv3d->persp != RV3D_ORTHO)) {
- if (rv3d->persp == RV3D_CAMOB) {
- view3d_draw_bgpic(scene, ar, v3d, do_foreground, do_camera_frame);
+ if (!drawgrid_draw(ar, x, y, dx_scalar, skip_mod, pos, color, col2))
+ break;
+ }
}
}
else {
- view3d_draw_bgpic(scene, ar, v3d, do_foreground, do_camera_frame);
- }
-}
-
-/* ****************** View3d afterdraw *************** */
+ const double sublines = v3d->gridsubdiv;
+ const float sublines_fl = v3d->gridsubdiv;
-typedef struct View3DAfter {
- struct View3DAfter *next, *prev;
- struct Base *base;
- short dflag;
-} View3DAfter;
+ int grids_to_draw = 2; /* first the faint fine grid, then the bold coarse grid */
-/* temp storage of Objects that need to be drawn as last */
-void ED_view3d_after_add(ListBase *lb, Base *base, const short dflag)
-{
- View3DAfter *v3da = MEM_callocN(sizeof(View3DAfter), "View 3d after");
- BLI_assert((base->flag & OB_FROMDUPLI) == 0);
- BLI_addtail(lb, v3da);
- v3da->base = base;
- v3da->dflag = dflag;
-}
+ if (dx < GRID_MIN_PX_D) {
+ rv3d->gridview *= sublines_fl;
+ dx *= sublines;
+ if (dx < GRID_MIN_PX_D) {
+ rv3d->gridview *= sublines_fl;
+ dx *= sublines;
+ if (dx < GRID_MIN_PX_D) {
+ rv3d->gridview *= sublines_fl;
+ dx *= sublines;
+ grids_to_draw = (dx < GRID_MIN_PX_D) ? 0 : 1;
+ }
+ }
+ }
+ else {
+ if (dx > (GRID_MIN_PX_D * 10.0)) { /* start blending in */
+ rv3d->gridview /= sublines_fl;
+ dx /= sublines;
+ if (dx > (GRID_MIN_PX_D * 10.0)) { /* start blending in */
+ rv3d->gridview /= sublines_fl;
+ dx /= sublines;
+ if (dx > (GRID_MIN_PX_D * 10.0)) {
+ grids_to_draw = 1;
+ }
+ }
+ }
+ }
-/* disables write in zbuffer and draws it over */
-static void view3d_draw_transp(Scene *scene, ARegion *ar, View3D *v3d)
-{
- View3DAfter *v3da;
-
- glDepthMask(GL_FALSE);
- v3d->transp = true;
-
- while ((v3da = BLI_pophead(&v3d->afterdraw_transp))) {
- draw_object(scene, ar, v3d, v3da->base, v3da->dflag);
- MEM_freeN(v3da);
- }
- v3d->transp = false;
-
- glDepthMask(GL_TRUE);
-
-}
+ int gridline_ct = gridline_count(ar, x, y, dx);
+ if (gridline_ct == 0)
+ goto drawgrid_cleanup; /* nothing to draw */
-/* clears zbuffer and draws it over */
-static void view3d_draw_xray(Scene *scene, ARegion *ar, View3D *v3d, bool *clear)
-{
- View3DAfter *v3da;
+ immBegin(GWN_PRIM_LINES, gridline_ct * 2);
- if (*clear && v3d->zbuf) {
- glClear(GL_DEPTH_BUFFER_BIT);
- *clear = false;
+ if (grids_to_draw == 2) {
+ UI_GetThemeColorBlend3ubv(TH_HIGH_GRAD, TH_GRID, dx / (GRID_MIN_PX_D * 6.0), col2);
+ if (drawgrid_draw(ar, x, y, dx, v3d->gridsubdiv, pos, color, col2))
+ drawgrid_draw(ar, x, y, dx * sublines, 0, pos, color, col);
+ }
+ else if (grids_to_draw == 1) {
+ drawgrid_draw(ar, x, y, dx, 0, pos, color, col);
+ }
}
- v3d->xray = true;
- while ((v3da = BLI_pophead(&v3d->afterdraw_xray))) {
- draw_object(scene, ar, v3d, v3da->base, v3da->dflag);
- MEM_freeN(v3da);
+ /* draw visible axes */
+ /* horizontal line */
+ if (0 <= y && y < ar->winy) {
+ UI_make_axis_color(col, col2, ELEM(rv3d->view, RV3D_VIEW_RIGHT, RV3D_VIEW_LEFT) ? 'Y' : 'X');
+ immAttrib3ub(color, col2[0], col2[1], col2[2]);
+ immVertex2f(pos, 0.0f, y);
+ immVertex2f(pos, (float)ar->winx, y);
}
- v3d->xray = false;
-}
-
-
-/* clears zbuffer and draws it over */
-static void view3d_draw_xraytransp(Scene *scene, ARegion *ar, View3D *v3d, const bool clear)
-{
- View3DAfter *v3da;
-
- if (clear && v3d->zbuf)
- glClear(GL_DEPTH_BUFFER_BIT);
- v3d->xray = true;
- v3d->transp = true;
-
- glDepthMask(GL_FALSE);
-
- while ((v3da = BLI_pophead(&v3d->afterdraw_xraytransp))) {
- draw_object(scene, ar, v3d, v3da->base, v3da->dflag);
- MEM_freeN(v3da);
+ /* vertical line */
+ if (0 <= x && x < ar->winx) {
+ UI_make_axis_color(col, col2, ELEM(rv3d->view, RV3D_VIEW_TOP, RV3D_VIEW_BOTTOM) ? 'Y' : 'Z');
+ immAttrib3ub(color, col2[0], col2[1], col2[2]);
+ immVertex2f(pos, x, 0.0f);
+ immVertex2f(pos, x, (float)ar->winy);
}
- v3d->transp = false;
- v3d->xray = false;
+ immEnd();
- glDepthMask(GL_TRUE);
+drawgrid_cleanup:
+ immUnbindProgram();
+
+#if 0 /* depth write is left enabled above */
+ glDepthMask(GL_TRUE); /* enable write in zbuffer */
+#endif
}
-/* clears zbuffer and draws it over,
- * note that in the select version we don't care about transparent flag as with regular drawing */
-static void view3d_draw_xray_select(Scene *scene, ARegion *ar, View3D *v3d, bool *clear)
+#undef DEBUG_GRID
+#undef GRID_MIN_PX_D
+#undef GRID_MIN_PX_F
+
+static void drawfloor(Scene *scene, View3D *v3d, const char **grid_unit, bool write_depth)
{
- /* Not ideal, but we need to read from the previous depths before clearing
- * otherwise we could have a function to load the depths after drawing.
- *
- * Clearing the depth buffer isn't all that common between drawing objects so accept this for now.
- */
- if (U.gpu_select_pick_deph) {
- GPU_select_load_id(-1);
- }
+ /* draw only if there is something to draw */
+ if (v3d->gridflag & (V3D_SHOW_FLOOR | V3D_SHOW_X | V3D_SHOW_Y | V3D_SHOW_Z)) {
+ /* draw how many lines?
+ * trunc(v3d->gridlines / 2) * 4
+ * + 2 for xy axes (possibly with special colors)
+ * + 1 for z axis (the only line not in xy plane)
+ * even v3d->gridlines are honored, odd rounded down */
+ const int gridlines = v3d->gridlines / 2;
+ const float grid_scale = ED_view3d_grid_scale(scene, v3d, grid_unit);
+ const float grid = gridlines * grid_scale;
- View3DAfter *v3da;
- if (*clear && v3d->zbuf) {
- glClear(GL_DEPTH_BUFFER_BIT);
- *clear = false;
- }
+ const bool show_floor = (v3d->gridflag & V3D_SHOW_FLOOR) && gridlines >= 1;
- v3d->xray = true;
- while ((v3da = BLI_pophead(&v3d->afterdraw_xray))) {
- if (GPU_select_load_id(v3da->base->selcol)) {
- draw_object_select(scene, ar, v3d, v3da->base, v3da->dflag);
- }
- MEM_freeN(v3da);
- }
- v3d->xray = false;
-}
+ bool show_axis_x = v3d->gridflag & V3D_SHOW_X;
+ bool show_axis_y = v3d->gridflag & V3D_SHOW_Y;
+ bool show_axis_z = v3d->gridflag & V3D_SHOW_Z;
-/* *********************** */
+ unsigned char col_grid[3], col_axis[3];
-/*
- * In most cases call draw_dupli_objects,
- * draw_dupli_objects_color was added because when drawing set dupli's
- * we need to force the color
- */
+ glLineWidth(1.0f);
-#if 0
-int dupli_ob_sort(void *arg1, void *arg2)
-{
- void *p1 = ((DupliObject *)arg1)->ob;
- void *p2 = ((DupliObject *)arg2)->ob;
- int val = 0;
- if (p1 < p2) val = -1;
- else if (p1 > p2) val = 1;
- return val;
-}
-#endif
+ UI_GetThemeColor3ubv(TH_GRID, col_grid);
+ if (!write_depth)
+ glDepthMask(GL_FALSE);
-static DupliObject *dupli_step(DupliObject *dob)
-{
- while (dob && dob->no_draw)
- dob = dob->next;
- return dob;
-}
+ if (show_floor) {
+ const unsigned vertex_ct = 2 * (gridlines * 4 + 2);
+ const int sublines = v3d->gridsubdiv;
-static void draw_dupli_objects_color(
- Scene *scene, ARegion *ar, View3D *v3d, Base *base,
- const short dflag, const int color)
-{
- RegionView3D *rv3d = ar->regiondata;
- ListBase *lb;
- LodLevel *savedlod;
- DupliObject *dob_prev = NULL, *dob, *dob_next = NULL;
- Base tbase = {NULL};
- BoundBox bb, *bb_tmp; /* use a copy because draw_object, calls clear_mesh_caches */
- GLuint displist = 0;
- unsigned char color_rgb[3];
- const short dflag_dupli = dflag | DRAW_CONSTCOLOR;
- short transflag;
- bool use_displist = false; /* -1 is initialize */
- char dt;
- short dtx;
- DupliApplyData *apply_data;
-
- if (base->object->restrictflag & OB_RESTRICT_VIEW) return;
- if ((base->object->restrictflag & OB_RESTRICT_RENDER) && (v3d->flag2 & V3D_RENDER_OVERRIDE)) return;
-
- if (dflag & DRAW_CONSTCOLOR) {
- BLI_assert(color == TH_UNDEFINED);
- }
- else {
- UI_GetThemeColorBlend3ubv(color, TH_BACK, 0.5f, color_rgb);
- }
+ unsigned char col_bg[3], col_grid_emphasise[3], col_grid_light[3];
- tbase.flag = OB_FROMDUPLI | base->flag;
- lb = object_duplilist(G.main->eval_ctx, scene, base->object);
- // BLI_listbase_sort(lb, dupli_ob_sort); /* might be nice to have if we have a dupli list with mixed objects. */
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
- apply_data = duplilist_apply(base->object, scene, lb);
+ immBindBuiltinProgram(GPU_SHADER_3D_FLAT_COLOR);
- dob = dupli_step(lb->first);
- if (dob) dob_next = dupli_step(dob->next);
+ immBegin(GWN_PRIM_LINES, vertex_ct);
- for (; dob; dob_prev = dob, dob = dob_next, dob_next = dob_next ? dupli_step(dob_next->next) : NULL) {
- bool testbb = false;
+ /* draw normal grid lines */
+ UI_GetColorPtrShade3ubv(col_grid, col_grid_light, 10);
- tbase.object = dob->ob;
+ for (int a = 1; a <= gridlines; a++) {
+ /* skip emphasised divider lines */
+ if (a % sublines != 0) {
+ const float line = a * grid_scale;
- /* Make sure lod is updated from dupli's position */
- savedlod = dob->ob->currentlod;
+ immAttrib3ubv(color, col_grid_light);
-#ifdef WITH_GAMEENGINE
- if (rv3d->rflag & RV3D_IS_GAME_ENGINE) {
- BKE_object_lod_update(dob->ob, rv3d->viewinv[3]);
- }
-#endif
+ immVertex2f(pos, -grid, -line);
+ immVertex2f(pos, +grid, -line);
+ immVertex2f(pos, -grid, +line);
+ immVertex2f(pos, +grid, +line);
- /* extra service: draw the duplicator in drawtype of parent, minimum taken
- * to allow e.g. boundbox box objects in groups for LOD */
- dt = tbase.object->dt;
- tbase.object->dt = MIN2(tbase.object->dt, base->object->dt);
+ immVertex2f(pos, -line, -grid);
+ immVertex2f(pos, -line, +grid);
+ immVertex2f(pos, +line, -grid);
+ immVertex2f(pos, +line, +grid);
+ }
+ }
- /* inherit draw extra, but not if a boundbox under the assumption that this
- * is intended to speed up drawing, and drawing extra (especially wire) can
- * slow it down too much */
- dtx = tbase.object->dtx;
- if (tbase.object->dt != OB_BOUNDBOX)
- tbase.object->dtx = base->object->dtx;
+ /* draw emphasised grid lines */
+ UI_GetThemeColor3ubv(TH_BACK, col_bg);
+ /* emphasise division lines lighter instead of darker, if background is darker than grid */
+ UI_GetColorPtrShade3ubv(col_grid, col_grid_emphasise,
+ (col_grid[0] + col_grid[1] + col_grid[2] + 30 >
+ col_bg[0] + col_bg[1] + col_bg[2]) ? 20 : -10);
- /* negative scale flag has to propagate */
- transflag = tbase.object->transflag;
+ if (sublines <= gridlines) {
+ immAttrib3ubv(color, col_grid_emphasise);
- if (is_negative_m4(dob->mat))
- tbase.object->transflag |= OB_NEG_SCALE;
- else
- tbase.object->transflag &= ~OB_NEG_SCALE;
-
- /* should move outside the loop but possible color is set in draw_object still */
- if ((dflag & DRAW_CONSTCOLOR) == 0) {
- glColor3ubv(color_rgb);
- }
-
- /* generate displist, test for new object */
- if (dob_prev && dob_prev->ob != dob->ob) {
- if (use_displist == true)
- glDeleteLists(displist, 1);
-
- use_displist = false;
- }
-
- if ((bb_tmp = BKE_object_boundbox_get(dob->ob))) {
- bb = *bb_tmp; /* must make a copy */
- testbb = true;
- }
+ for (int a = sublines; a <= gridlines; a += sublines) {
+ const float line = a * grid_scale;
+
+ immVertex2f(pos, -grid, -line);
+ immVertex2f(pos, +grid, -line);
+ immVertex2f(pos, -grid, +line);
+ immVertex2f(pos, +grid, +line);
- if (!testbb || ED_view3d_boundbox_clip_ex(rv3d, &bb, dob->mat)) {
- /* generate displist */
- if (use_displist == false) {
-
- /* note, since this was added, its checked (dob->type == OB_DUPLIGROUP)
- * however this is very slow, it was probably needed for the NLA
- * offset feature (used in group-duplicate.blend but no longer works in 2.5)
- * so for now it should be ok to - campbell */
-
- if ( /* if this is the last no need to make a displist */
- (dob_next == NULL || dob_next->ob != dob->ob) ||
- /* lamp drawing messes with matrices, could be handled smarter... but this works */
- (dob->ob->type == OB_LAMP) ||
- (dob->type == OB_DUPLIGROUP && dob->animated) ||
- !bb_tmp ||
- draw_glsl_material(scene, dob->ob, v3d, dt) ||
- check_object_draw_texture(scene, v3d, dt) ||
- (v3d->flag2 & V3D_SOLID_MATCAP) != 0)
- {
- // printf("draw_dupli_objects_color: skipping displist for %s\n", dob->ob->id.name + 2);
- use_displist = false;
+ immVertex2f(pos, -line, -grid);
+ immVertex2f(pos, -line, +grid);
+ immVertex2f(pos, +line, -grid);
+ immVertex2f(pos, +line, +grid);
}
- else {
- // printf("draw_dupli_objects_color: using displist for %s\n", dob->ob->id.name + 2);
-
- /* disable boundbox check for list creation */
- BKE_object_boundbox_flag(dob->ob, BOUNDBOX_DISABLED, 1);
- /* need this for next part of code */
- unit_m4(dob->ob->obmat); /* obmat gets restored */
-
- displist = glGenLists(1);
- glNewList(displist, GL_COMPILE);
- draw_object(scene, ar, v3d, &tbase, dflag_dupli);
- glEndList();
-
- use_displist = true;
- BKE_object_boundbox_flag(dob->ob, BOUNDBOX_DISABLED, 0);
- }
}
-
- if (use_displist) {
- glPushMatrix();
- glMultMatrixf(dob->mat);
- glCallList(displist);
- glPopMatrix();
- }
- else {
- copy_m4_m4(dob->ob->obmat, dob->mat);
- GPU_begin_dupli_object(dob);
- draw_object(scene, ar, v3d, &tbase, dflag_dupli);
- GPU_end_dupli_object();
+
+ /* draw X axis */
+ if (show_axis_x) {
+ show_axis_x = false; /* drawing now, won't need to draw later */
+ UI_make_axis_color(col_grid, col_axis, 'X');
+ immAttrib3ubv(color, col_axis);
}
- }
-
- tbase.object->dt = dt;
- tbase.object->dtx = dtx;
- tbase.object->transflag = transflag;
- tbase.object->currentlod = savedlod;
- }
+ else
+ immAttrib3ubv(color, col_grid_emphasise);
- if (apply_data) {
- duplilist_restore(lb, apply_data);
- duplilist_free_apply_data(apply_data);
- }
+ immVertex2f(pos, -grid, 0.0f);
+ immVertex2f(pos, +grid, 0.0f);
- free_object_duplilist(lb);
-
- if (use_displist)
- glDeleteLists(displist, 1);
-}
+ /* draw Y axis */
+ if (show_axis_y) {
+ show_axis_y = false; /* drawing now, won't need to draw later */
+ UI_make_axis_color(col_grid, col_axis, 'Y');
+ immAttrib3ubv(color, col_axis);
+ }
+ else
+ immAttrib3ubv(color, col_grid_emphasise);
-static void draw_dupli_objects(Scene *scene, ARegion *ar, View3D *v3d, Base *base)
-{
- /* define the color here so draw_dupli_objects_color can be called
- * from the set loop */
-
- int color = (base->flag & SELECT) ? TH_SELECT : TH_WIRE;
- /* debug */
- if (base->object->dup_group && base->object->dup_group->id.us < 1)
- color = TH_REDALERT;
-
- draw_dupli_objects_color(scene, ar, v3d, base, 0, color);
-}
+ immVertex2f(pos, 0.0f, -grid);
+ immVertex2f(pos, 0.0f, +grid);
-/* XXX warning, not using gpu offscreen here */
-void view3d_update_depths_rect(ARegion *ar, ViewDepths *d, rcti *rect)
-{
- int x, y, w, h;
- rcti r;
- /* clamp rect by region */
+ immEnd();
+ immUnbindProgram();
- r.xmin = 0;
- r.xmax = ar->winx - 1;
- r.ymin = 0;
- r.ymax = ar->winy - 1;
+ /* done with XY plane */
+ }
- /* Constrain rect to depth bounds */
- BLI_rcti_isect(&r, rect, rect);
+ if (show_axis_x || show_axis_y || show_axis_z) {
+ /* draw axis lines -- sometimes grid floor is off, other times we still need to draw the Z axis */
- /* assign values to compare with the ViewDepths */
- x = rect->xmin;
- y = rect->ymin;
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
- w = BLI_rcti_size_x(rect);
- h = BLI_rcti_size_y(rect);
+ immBindBuiltinProgram(GPU_SHADER_3D_FLAT_COLOR);
+ immBegin(GWN_PRIM_LINES, (show_axis_x + show_axis_y + show_axis_z) * 2);
- if (w <= 0 || h <= 0) {
- if (d->depths)
- MEM_freeN(d->depths);
- d->depths = NULL;
+ if (show_axis_x) {
+ UI_make_axis_color(col_grid, col_axis, 'X');
+ immAttrib3ubv(color, col_axis);
+ immVertex3f(pos, -grid, 0.0f, 0.0f);
+ immVertex3f(pos, +grid, 0.0f, 0.0f);
+ }
- d->damaged = false;
- }
- else if (d->w != w ||
- d->h != h ||
- d->x != x ||
- d->y != y ||
- d->depths == NULL
- )
- {
- d->x = x;
- d->y = y;
- d->w = w;
- d->h = h;
+ if (show_axis_y) {
+ UI_make_axis_color(col_grid, col_axis, 'Y');
+ immAttrib3ubv(color, col_axis);
+ immVertex3f(pos, 0.0f, -grid, 0.0f);
+ immVertex3f(pos, 0.0f, +grid, 0.0f);
+ }
- if (d->depths)
- MEM_freeN(d->depths);
+ if (show_axis_z) {
+ UI_make_axis_color(col_grid, col_axis, 'Z');
+ immAttrib3ubv(color, col_axis);
+ immVertex3f(pos, 0.0f, 0.0f, -grid);
+ immVertex3f(pos, 0.0f, 0.0f, +grid);
+ }
- d->depths = MEM_mallocN(sizeof(float) * d->w * d->h, "View depths Subset");
-
- d->damaged = true;
- }
+ immEnd();
+ immUnbindProgram();
+ }
- if (d->damaged) {
- /* XXX using special function here, it doesn't use the gpu offscreen system */
- view3d_opengl_read_Z_pixels(ar, d->x, d->y, d->w, d->h, GL_DEPTH_COMPONENT, GL_FLOAT, d->depths);
- glGetDoublev(GL_DEPTH_RANGE, d->depth_range);
- d->damaged = false;
+ if (!write_depth)
+ glDepthMask(GL_TRUE);
}
}
-/* note, with nouveau drivers the glReadPixels() is very slow. [#24339] */
-void ED_view3d_depth_update(ARegion *ar)
+/** could move this elsewhere, but tied into #ED_view3d_grid_scale */
+float ED_scene_grid_scale(Scene *scene, const char **grid_unit)
{
- RegionView3D *rv3d = ar->regiondata;
-
- /* Create storage for, and, if necessary, copy depth buffer */
- if (!rv3d->depths) rv3d->depths = MEM_callocN(sizeof(ViewDepths), "ViewDepths");
- if (rv3d->depths) {
- ViewDepths *d = rv3d->depths;
- if (d->w != ar->winx ||
- d->h != ar->winy ||
- !d->depths)
- {
- d->w = ar->winx;
- d->h = ar->winy;
- if (d->depths)
- MEM_freeN(d->depths);
- d->depths = MEM_mallocN(sizeof(float) * d->w * d->h, "View depths");
- d->damaged = true;
- }
-
- if (d->damaged) {
- view3d_opengl_read_pixels(ar, 0, 0, d->w, d->h, GL_DEPTH_COMPONENT, GL_FLOAT, d->depths);
- glGetDoublev(GL_DEPTH_RANGE, d->depth_range);
-
- d->damaged = false;
+ /* apply units */
+ if (scene->unit.system) {
+ const void *usys;
+ int len;
+
+ bUnit_GetSystem(scene->unit.system, B_UNIT_LENGTH, &usys, &len);
+
+ if (usys) {
+ int i = bUnit_GetBaseUnit(usys);
+ if (grid_unit)
+ *grid_unit = bUnit_GetNameDisplay(usys, i);
+ return (float)bUnit_GetScaler(usys, i) / scene->unit.scale_length;
}
}
+
+ return 1.0f;
}
-/* utility function to find the closest Z value, use for autodepth */
-float view3d_depth_near(ViewDepths *d)
+float ED_view3d_grid_scale(Scene *scene, View3D *v3d, const char **grid_unit)
{
- /* convert to float for comparisons */
- const float near = (float)d->depth_range[0];
- const float far_real = (float)d->depth_range[1];
- float far = far_real;
-
- const float *depths = d->depths;
- float depth = FLT_MAX;
- int i = (int)d->w * (int)d->h; /* cast to avoid short overflow */
-
- /* far is both the starting 'far' value
- * and the closest value found. */
- while (i--) {
- depth = *depths++;
- if ((depth < far) && (depth > near)) {
- far = depth;
- }
- }
-
- return far == far_real ? FLT_MAX : far;
+ return v3d->grid * ED_scene_grid_scale(scene, grid_unit);
}
-void ED_view3d_draw_depth_gpencil(Scene *scene, ARegion *ar, View3D *v3d)
+static bool is_cursor_visible(const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer)
{
- short zbuf = v3d->zbuf;
- RegionView3D *rv3d = ar->regiondata;
+ if (U.app_flag & USER_APP_VIEW3D_HIDE_CURSOR) {
+ return false;
+ }
- /* Setup view matrix. */
- ED_view3d_draw_setup_view(NULL, scene, ar, v3d, rv3d->viewmat, rv3d->winmat, NULL);
+ Object *ob = OBACT(view_layer);
- glClear(GL_DEPTH_BUFFER_BIT);
+ /* don't draw cursor in paint modes, but with a few exceptions */
+ if (ob && eval_ctx->object_mode & OB_MODE_ALL_PAINT) {
+ /* exception: object is in weight paint and has deforming armature in pose mode */
+ if (eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT) {
+ if (BKE_object_pose_armature_get(ob) != NULL) {
+ return true;
+ }
+ }
+ /* exception: object in texture paint mode, clone brush, use_clone_layer disabled */
+ else if (eval_ctx->object_mode & OB_MODE_TEXTURE_PAINT) {
+ const Paint *p = BKE_paint_get_active(scene, view_layer, eval_ctx->object_mode);
- v3d->zbuf = true;
- glEnable(GL_DEPTH_TEST);
+ if (p && p->brush && p->brush->imagepaint_tool == PAINT_TOOL_CLONE) {
+ if ((scene->toolsettings->imapaint.flag & IMAGEPAINT_PROJECT_LAYER_CLONE) == 0) {
+ return true;
+ }
+ }
+ }
- if (v3d->flag2 & V3D_SHOW_GPENCIL) {
- ED_gpencil_draw_view3d(NULL, scene, v3d, ar, true);
+ /* no exception met? then don't draw cursor! */
+ return false;
}
-
- v3d->zbuf = zbuf;
+
+ return true;
}
-static void view3d_draw_depth_loop(Scene *scene, ARegion *ar, View3D *v3d)
+static void drawcursor(Scene *scene, ARegion *ar, View3D *v3d)
{
- Base *base;
-
- /* no need for color when drawing depth buffer */
- const short dflag_depth = DRAW_CONSTCOLOR;
-
- /* draw set first */
- if (scene->set) {
- Scene *sce_iter;
- for (SETLOOPER(scene->set, sce_iter, base)) {
- if (v3d->lay & base->lay) {
- draw_object(scene, ar, v3d, base, 0);
- if (base->object->transflag & OB_DUPLI) {
- draw_dupli_objects_color(scene, ar, v3d, base, dflag_depth, TH_UNDEFINED);
- }
- }
- }
- }
-
- for (base = scene->base.first; base; base = base->next) {
- if (v3d->lay & base->lay) {
- /* dupli drawing */
- if (base->object->transflag & OB_DUPLI) {
- draw_dupli_objects_color(scene, ar, v3d, base, dflag_depth, TH_UNDEFINED);
- }
- draw_object(scene, ar, v3d, base, dflag_depth);
- }
- }
-
- /* this isn't that nice, draw xray objects as if they are normal */
- if (v3d->afterdraw_transp.first ||
- v3d->afterdraw_xray.first ||
- v3d->afterdraw_xraytransp.first)
- {
- View3DAfter *v3da;
- int mask_orig;
+ int co[2];
- v3d->xray = true;
+ /* we don't want the clipping for cursor */
+ if (ED_view3d_project_int_global(ar, ED_view3d_cursor3d_get(scene, v3d), co, V3D_PROJ_TEST_NOP) == V3D_PROJ_RET_OK) {
+ const float f5 = 0.25f * U.widget_unit;
+ const float f10 = 0.5f * U.widget_unit;
+ const float f20 = U.widget_unit;
- /* transp materials can change the depth mask, see #21388 */
- glGetIntegerv(GL_DEPTH_WRITEMASK, &mask_orig);
+ glLineWidth(1.0f);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
- if (v3d->afterdraw_xray.first || v3d->afterdraw_xraytransp.first) {
- glDepthFunc(GL_ALWAYS); /* always write into the depth bufer, overwriting front z values */
- for (v3da = v3d->afterdraw_xray.first; v3da; v3da = v3da->next) {
- draw_object(scene, ar, v3d, v3da->base, dflag_depth);
- }
- glDepthFunc(GL_LEQUAL); /* Now write the depth buffer normally */
- }
+ immBindBuiltinProgram(GPU_SHADER_2D_FLAT_COLOR);
- /* draw 3 passes, transp/xray/xraytransp */
- v3d->xray = false;
- v3d->transp = true;
- while ((v3da = BLI_pophead(&v3d->afterdraw_transp))) {
- draw_object(scene, ar, v3d, v3da->base, dflag_depth);
- MEM_freeN(v3da);
- }
+ const int segments = 16;
- v3d->xray = true;
- v3d->transp = false;
- while ((v3da = BLI_pophead(&v3d->afterdraw_xray))) {
- draw_object(scene, ar, v3d, v3da->base, dflag_depth);
- MEM_freeN(v3da);
- }
+ immBegin(GWN_PRIM_LINE_LOOP, segments);
+
+ for (int i = 0; i < segments; ++i) {
+ float angle = 2 * M_PI * ((float)i / (float)segments);
+ float x = co[0] + f10 * cosf(angle);
+ float y = co[1] + f10 * sinf(angle);
- v3d->xray = true;
- v3d->transp = true;
- while ((v3da = BLI_pophead(&v3d->afterdraw_xraytransp))) {
- draw_object(scene, ar, v3d, v3da->base, dflag_depth);
- MEM_freeN(v3da);
+ if (i % 2 == 0)
+ immAttrib3ub(color, 255, 0, 0);
+ else
+ immAttrib3ub(color, 255, 255, 255);
+
+ immVertex2f(pos, x, y);
}
+ immEnd();
-
- v3d->xray = false;
- v3d->transp = false;
+ immUnbindProgram();
+
+ GWN_vertformat_clear(format);
+ pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
- glDepthMask(mask_orig);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ unsigned char crosshair_color[3];
+ UI_GetThemeColor3ubv(TH_VIEW_OVERLAY, crosshair_color);
+ immUniformColor3ubv(crosshair_color);
+
+ immBegin(GWN_PRIM_LINES, 8);
+ immVertex2f(pos, co[0] - f20, co[1]);
+ immVertex2f(pos, co[0] - f5, co[1]);
+ immVertex2f(pos, co[0] + f5, co[1]);
+ immVertex2f(pos, co[0] + f20, co[1]);
+ immVertex2f(pos, co[0], co[1] - f20);
+ immVertex2f(pos, co[0], co[1] - f5);
+ immVertex2f(pos, co[0], co[1] + f5);
+ immVertex2f(pos, co[0], co[1] + f20);
+ immEnd();
+
+ immUnbindProgram();
}
}
-void ED_view3d_draw_depth(Scene *scene, ARegion *ar, View3D *v3d, bool alphaoverride)
+static void draw_view_axis(RegionView3D *rv3d, const rcti *rect)
{
- struct bThemeState theme_state;
- RegionView3D *rv3d = ar->regiondata;
- short zbuf = v3d->zbuf;
- short flag = v3d->flag;
- float glalphaclip = U.glalphaclip;
- int obcenter_dia = U.obcenter_dia;
- /* temp set drawtype to solid */
-
- /* Setting these temporarily is not nice */
- v3d->flag &= ~V3D_SELECT_OUTLINE;
- U.glalphaclip = alphaoverride ? 0.5f : glalphaclip; /* not that nice but means we wont zoom into billboards */
- U.obcenter_dia = 0;
-
- /* Tools may request depth outside of regular drawing code. */
- UI_Theme_Store(&theme_state);
- UI_SetTheme(SPACE_VIEW3D, RGN_TYPE_WINDOW);
+ const float k = U.rvisize * U.pixelsize; /* axis size */
+ const int bright = - 20 * (10 - U.rvibright); /* axis alpha offset (rvibright has range 0-10) */
- /* Setup view matrix. */
- ED_view3d_draw_setup_view(NULL, scene, ar, v3d, rv3d->viewmat, rv3d->winmat, NULL);
-
- glClear(GL_DEPTH_BUFFER_BIT);
-
- if (rv3d->rflag & RV3D_CLIPPING) {
- ED_view3d_clipping_set(rv3d);
+ const float startx = rect->xmin + k + 1.0f; /* axis center in screen coordinates, x=y */
+ const float starty = rect->ymin + k + 1.0f;
+
+ float axis_pos[3][2];
+ unsigned char axis_col[3][4];
+
+ int axis_order[3] = {0, 1, 2};
+ axis_sort_v3(rv3d->viewinv[2], axis_order);
+
+ for (int axis_i = 0; axis_i < 3; axis_i++) {
+ int i = axis_order[axis_i];
+
+ /* get position of each axis tip on screen */
+ float vec[3] = { 0.0f };
+ vec[i] = 1.0f;
+ mul_qt_v3(rv3d->viewquat, vec);
+ axis_pos[i][0] = startx + vec[0] * k;
+ axis_pos[i][1] = starty + vec[1] * k;
+
+ /* get color of each axis */
+ UI_GetThemeColorShade3ubv(TH_AXIS_X + i, bright, axis_col[i]); /* rgb */
+ axis_col[i][3] = 255 * hypotf(vec[0], vec[1]); /* alpha */
}
- /* get surface depth without bias */
- rv3d->rflag |= RV3D_ZOFFSET_DISABLED;
- v3d->zbuf = true;
- glEnable(GL_DEPTH_TEST);
+ /* draw axis lines */
+ glLineWidth(2.0f);
+ glEnable(GL_LINE_SMOOTH);
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- view3d_draw_depth_loop(scene, ar, v3d);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int col = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 4, GWN_FETCH_INT_TO_FLOAT_UNIT);
- if (rv3d->rflag & RV3D_CLIPPING) {
- ED_view3d_clipping_disable();
+ immBindBuiltinProgram(GPU_SHADER_2D_FLAT_COLOR);
+ immBegin(GWN_PRIM_LINES, 6);
+
+ for (int axis_i = 0; axis_i < 3; axis_i++) {
+ int i = axis_order[axis_i];
+
+ immAttrib4ubv(col, axis_col[i]);
+ immVertex2f(pos, startx, starty);
+ immVertex2fv(pos, axis_pos[i]);
}
- rv3d->rflag &= ~RV3D_ZOFFSET_DISABLED;
-
- v3d->zbuf = zbuf;
- if (!v3d->zbuf) glDisable(GL_DEPTH_TEST);
- U.glalphaclip = glalphaclip;
- v3d->flag = flag;
- U.obcenter_dia = obcenter_dia;
+ immEnd();
+ immUnbindProgram();
+ glDisable(GL_LINE_SMOOTH);
- UI_Theme_Restore(&theme_state);
+ /* draw axis names */
+ for (int axis_i = 0; axis_i < 3; axis_i++) {
+ int i = axis_order[axis_i];
+
+ const char axis_text[2] = {'x' + i, '\0'};
+ BLF_color4ubv(BLF_default(), axis_col[i]);
+ BLF_draw_default_ascii(axis_pos[i][0] + 2, axis_pos[i][1] + 2, 0.0f, axis_text, 1);
+ }
}
-void ED_view3d_draw_select_loop(
- ViewContext *vc, Scene *scene, View3D *v3d, ARegion *ar,
- bool use_obedit_skip, bool use_nearest)
+#ifdef WITH_INPUT_NDOF
+/* draw center and axis of rotation for ongoing 3D mouse navigation */
+static void UNUSED_FUNCTION(draw_rotation_guide)(RegionView3D *rv3d)
{
- short code = 1;
- const short dflag = DRAW_PICKING | DRAW_CONSTCOLOR;
+ float o[3]; /* center of rotation */
+ float end[3]; /* endpoints for drawing */
- if (vc->obedit && vc->obedit->type == OB_MBALL) {
- draw_object(scene, ar, v3d, BASACT, dflag);
- }
- else if ((vc->obedit && vc->obedit->type == OB_ARMATURE)) {
- /* if not drawing sketch, draw bones */
- if (!BDR_drawSketchNames(vc)) {
- draw_object(scene, ar, v3d, BASACT, dflag);
- }
- }
- else {
- Base *base;
+ GLubyte color[4] = {0, 108, 255, 255}; /* bright blue so it matches device LEDs */
- for (base = scene->base.first; base; base = base->next) {
- if (base->lay & v3d->lay) {
+ negate_v3_v3(o, rv3d->ofs);
- if ((base->object->restrictflag & OB_RESTRICT_SELECT) ||
- (use_obedit_skip && (scene->obedit->data == base->object->data)))
- {
- base->selcol = 0;
- }
- else {
- base->selcol = code;
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ glDepthMask(GL_FALSE); /* don't overwrite zbuf */
- if (use_nearest && (base->object->dtx & OB_DRAWXRAY)) {
- ED_view3d_after_add(&v3d->afterdraw_xray, base, dflag);
- }
- else {
- if (GPU_select_load_id(code)) {
- draw_object_select(scene, ar, v3d, base, dflag);
- }
- }
- code++;
- }
- }
- }
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ unsigned int col = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 4, GWN_FETCH_INT_TO_FLOAT_UNIT);
- if (use_nearest) {
- bool xrayclear = true;
- if (v3d->afterdraw_xray.first) {
- view3d_draw_xray_select(scene, ar, v3d, &xrayclear);
- }
- }
- }
-}
+ immBindBuiltinProgram(GPU_SHADER_3D_SMOOTH_COLOR);
-typedef struct View3DShadow {
- struct View3DShadow *next, *prev;
- GPULamp *lamp;
-} View3DShadow;
+ if (rv3d->rot_angle != 0.0f) {
+ /* -- draw rotation axis -- */
+ float scaled_axis[3];
+ const float scale = rv3d->dist;
+ mul_v3_v3fl(scaled_axis, rv3d->rot_axis, scale);
-static void gpu_render_lamp_update(Scene *scene, View3D *v3d,
- Object *ob, Object *par,
- float obmat[4][4], unsigned int lay,
- ListBase *shadows, SceneRenderLayer *srl)
-{
- GPULamp *lamp;
- Lamp *la = (Lamp *)ob->data;
- View3DShadow *shadow;
- unsigned int layers;
-
- lamp = GPU_lamp_from_blender(scene, ob, par);
-
- if (lamp) {
- GPU_lamp_update(lamp, lay, (ob->restrictflag & OB_RESTRICT_RENDER), obmat);
- GPU_lamp_update_colors(lamp, la->r, la->g, la->b, la->energy);
+
+ immBegin(GWN_PRIM_LINE_STRIP, 3);
+ color[3] = 0; /* more transparent toward the ends */
+ immAttrib4ubv(col, color);
+ add_v3_v3v3(end, o, scaled_axis);
+ immVertex3fv(pos, end);
+
+#if 0
+ color[3] = 0.2f + fabsf(rv3d->rot_angle); /* modulate opacity with angle */
+ /* ^^ neat idea, but angle is frame-rate dependent, so it's usually close to 0.2 */
+#endif
+
+ color[3] = 127; /* more opaque toward the center */
+ immAttrib4ubv(col, color);
+ immVertex3fv(pos, o);
+
+ color[3] = 0;
+ immAttrib4ubv(col, color);
+ sub_v3_v3v3(end, o, scaled_axis);
+ immVertex3fv(pos, end);
+ immEnd();
- layers = lay & v3d->lay;
- if (srl)
- layers &= srl->lay;
-
- if (layers &&
- GPU_lamp_has_shadow_buffer(lamp) &&
- /* keep last, may do string lookup */
- GPU_lamp_visible(lamp, srl, NULL))
+ /* -- draw ring around rotation center -- */
{
- shadow = MEM_callocN(sizeof(View3DShadow), "View3DShadow");
- shadow->lamp = lamp;
- BLI_addtail(shadows, shadow);
- }
- }
-}
+#define ROT_AXIS_DETAIL 13
-static void gpu_update_lamps_shadows_world(Scene *scene, View3D *v3d)
-{
- ListBase shadows;
- View3DShadow *shadow;
- Scene *sce_iter;
- Base *base;
- Object *ob;
- World *world = scene->world;
- SceneRenderLayer *srl = v3d->scenelock ? BLI_findlink(&scene->r.layers, scene->r.actlay) : NULL;
-
- BLI_listbase_clear(&shadows);
-
- /* update lamp transform and gather shadow lamps */
- for (SETLOOPER(scene, sce_iter, base)) {
- ob = base->object;
-
- if (ob->type == OB_LAMP)
- gpu_render_lamp_update(scene, v3d, ob, NULL, ob->obmat, ob->lay, &shadows, srl);
-
- if (ob->transflag & OB_DUPLI) {
- DupliObject *dob;
- ListBase *lb = object_duplilist(G.main->eval_ctx, scene, ob);
-
- for (dob = lb->first; dob; dob = dob->next)
- if (dob->ob->type == OB_LAMP)
- gpu_render_lamp_update(scene, v3d, dob->ob, ob, dob->mat, ob->lay, &shadows, srl);
-
- free_object_duplilist(lb);
- }
- }
-
- /* render shadows after updating all lamps, nested object_duplilist
- * don't work correct since it's replacing object matrices */
- for (shadow = shadows.first; shadow; shadow = shadow->next) {
- /* this needs to be done better .. */
- float viewmat[4][4], winmat[4][4];
- int drawtype, lay, winsize, flag2 = v3d->flag2;
- ARegion ar = {NULL};
- RegionView3D rv3d = {{{0}}};
-
- drawtype = v3d->drawtype;
- lay = v3d->lay;
-
- v3d->drawtype = OB_SOLID;
- v3d->lay &= GPU_lamp_shadow_layer(shadow->lamp);
- v3d->flag2 &= ~(V3D_SOLID_TEX | V3D_SHOW_SOLID_MATCAP);
- v3d->flag2 |= V3D_RENDER_OVERRIDE | V3D_RENDER_SHADOW;
-
- GPU_lamp_shadow_buffer_bind(shadow->lamp, viewmat, &winsize, winmat);
-
- ar.regiondata = &rv3d;
- ar.regiontype = RGN_TYPE_WINDOW;
- rv3d.persp = RV3D_CAMOB;
- copy_m4_m4(rv3d.winmat, winmat);
- copy_m4_m4(rv3d.viewmat, viewmat);
- invert_m4_m4(rv3d.viewinv, rv3d.viewmat);
- mul_m4_m4m4(rv3d.persmat, rv3d.winmat, rv3d.viewmat);
- invert_m4_m4(rv3d.persinv, rv3d.viewinv);
-
- /* no need to call ED_view3d_draw_offscreen_init since shadow buffers were already updated */
- ED_view3d_draw_offscreen(
- scene, v3d, &ar, winsize, winsize, viewmat, winmat,
- false, false, true,
- NULL, NULL, NULL, NULL);
- GPU_lamp_shadow_buffer_unbind(shadow->lamp);
-
- v3d->drawtype = drawtype;
- v3d->lay = lay;
- v3d->flag2 = flag2;
- }
-
- BLI_freelistN(&shadows);
-
- /* update world values */
- if (world) {
- GPU_mist_update_enable(world->mode & WO_MIST);
- GPU_mist_update_values(world->mistype, world->miststa, world->mistdist, world->misi, &world->horr);
- GPU_horizon_update_color(&world->horr);
- GPU_ambient_update_color(&world->ambr);
- GPU_zenith_update_color(&world->zenr);
- }
-}
+ const float s = 0.05f * scale;
+ const float step = 2.0f * (float)(M_PI / ROT_AXIS_DETAIL);
-/* *********************** customdata **************** */
+ float q[4]; /* rotate ring so it's perpendicular to axis */
+ const int upright = fabsf(rv3d->rot_axis[2]) >= 0.95f;
+ if (!upright) {
+ const float up[3] = {0.0f, 0.0f, 1.0f};
+ float vis_angle, vis_axis[3];
-CustomDataMask ED_view3d_datamask(const Scene *scene, const View3D *v3d)
-{
- CustomDataMask mask = 0;
- const int drawtype = view3d_effective_drawtype(v3d);
+ cross_v3_v3v3(vis_axis, up, rv3d->rot_axis);
+ vis_angle = acosf(dot_v3v3(up, rv3d->rot_axis));
+ axis_angle_to_quat(q, vis_axis, vis_angle);
+ }
- if (ELEM(drawtype, OB_TEXTURE, OB_MATERIAL) ||
- ((drawtype == OB_SOLID) && (v3d->flag2 & V3D_SOLID_TEX)))
- {
- mask |= CD_MASK_MTEXPOLY | CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL;
+ immBegin(GWN_PRIM_LINE_LOOP, ROT_AXIS_DETAIL);
+ color[3] = 63; /* somewhat faint */
+ immAttrib4ubv(col, color);
+ float angle = 0.0f;
+ for (int i = 0; i < ROT_AXIS_DETAIL; ++i, angle += step) {
+ float p[3] = {s * cosf(angle), s * sinf(angle), 0.0f};
- if (BKE_scene_use_new_shading_nodes(scene)) {
- if (drawtype == OB_MATERIAL)
- mask |= CD_MASK_ORCO;
- }
- else {
- if ((scene->gm.matmode == GAME_MAT_GLSL && drawtype == OB_TEXTURE) ||
- (drawtype == OB_MATERIAL))
- {
- mask |= CD_MASK_ORCO;
+ if (!upright) {
+ mul_qt_v3(q, p);
+ }
+
+ add_v3_v3(p, o);
+ immVertex3fv(pos, p);
}
+ immEnd();
+
+#undef ROT_AXIS_DETAIL
}
+
+ color[3] = 255; /* solid dot */
}
+ else
+ color[3] = 127; /* see-through dot */
- return mask;
-}
+ immUnbindProgram();
-/* goes over all modes and view3d settings */
-CustomDataMask ED_view3d_screen_datamask(const bScreen *screen)
-{
- const Scene *scene = screen->scene;
- CustomDataMask mask = CD_MASK_BAREMESH;
- const ScrArea *sa;
-
- /* check if we need tfaces & mcols due to view mode */
- for (sa = screen->areabase.first; sa; sa = sa->next) {
- if (sa->spacetype == SPACE_VIEW3D) {
- mask |= ED_view3d_datamask(scene, sa->spacedata.first);
- }
- }
+ /* -- draw rotation center -- */
+ immBindBuiltinProgram(GPU_SHADER_3D_POINT_FIXED_SIZE_VARYING_COLOR);
+ glPointSize(5.0f);
+ immBegin(GWN_PRIM_POINTS, 1);
+ immAttrib4ubv(col, color);
+ immVertex3fv(pos, o);
+ immEnd();
+ immUnbindProgram();
- return mask;
+#if 0
+ /* find screen coordinates for rotation center, then draw pretty icon */
+ mul_m4_v3(rv3d->persinv, rot_center);
+ UI_icon_draw(rot_center[0], rot_center[1], ICON_NDOF_TURN);
+ /* ^^ just playing around, does not work */
+#endif
+
+ glDisable(GL_BLEND);
+ glDepthMask(GL_TRUE);
}
+#endif /* WITH_INPUT_NDOF */
+
+/* ******************** info ***************** */
/**
- * \note keep this synced with #ED_view3d_mats_rv3d_backup/#ED_view3d_mats_rv3d_restore
- */
-void ED_view3d_update_viewmat(
- Scene *scene, View3D *v3d, ARegion *ar, float viewmat[4][4], float winmat[4][4], const rcti *rect)
+* Render and camera border
+*/
+static void view3d_draw_border(const bContext *C, ARegion *ar)
{
+ Scene *scene = CTX_data_scene(C);
+ Depsgraph *depsgraph = CTX_data_depsgraph(C);
RegionView3D *rv3d = ar->regiondata;
+ View3D *v3d = CTX_wm_view3d(C);
- /* setup window matrices */
- if (winmat)
- copy_m4_m4(rv3d->winmat, winmat);
- else
- view3d_winmatrix_set(ar, v3d, rect);
-
- /* setup view matrix */
- if (viewmat) {
- copy_m4_m4(rv3d->viewmat, viewmat);
+ if (rv3d->persp == RV3D_CAMOB) {
+ drawviewborder(scene, depsgraph, ar, v3d);
}
- else {
- float rect_scale[2];
- if (rect) {
- rect_scale[0] = (float)BLI_rcti_size_x(rect) / (float)ar->winx;
- rect_scale[1] = (float)BLI_rcti_size_y(rect) / (float)ar->winy;
- }
- view3d_viewmatrix_set(scene, v3d, rv3d, rect ? rect_scale : NULL); /* note: calls BKE_object_where_is_calc for camera... */
+ else if (v3d->flag2 & V3D_RENDER_BORDER) {
+ drawrenderborder(ar, v3d);
}
+}
- /* update utility matrices */
- mul_m4_m4m4(rv3d->persmat, rv3d->winmat, rv3d->viewmat);
- invert_m4_m4(rv3d->persinv, rv3d->persmat);
- invert_m4_m4(rv3d->viewinv, rv3d->viewmat);
-
- /* calculate GLSL view dependent values */
+/**
+* Grease Pencil
+*/
+static void view3d_draw_grease_pencil(const bContext *UNUSED(C))
+{
+ /* TODO viewport */
+}
- /* store window coordinates scaling/offset */
- if (rv3d->persp == RV3D_CAMOB && v3d->camera) {
- rctf cameraborder;
- ED_view3d_calc_camera_border(scene, ar, v3d, rv3d, &cameraborder, false);
- rv3d->viewcamtexcofac[0] = (float)ar->winx / BLI_rctf_size_x(&cameraborder);
- rv3d->viewcamtexcofac[1] = (float)ar->winy / BLI_rctf_size_y(&cameraborder);
-
- rv3d->viewcamtexcofac[2] = -rv3d->viewcamtexcofac[0] * cameraborder.xmin / (float)ar->winx;
- rv3d->viewcamtexcofac[3] = -rv3d->viewcamtexcofac[1] * cameraborder.ymin / (float)ar->winy;
- }
- else {
- rv3d->viewcamtexcofac[0] = rv3d->viewcamtexcofac[1] = 1.0f;
- rv3d->viewcamtexcofac[2] = rv3d->viewcamtexcofac[3] = 0.0f;
- }
+/**
+* Viewport Name
+*/
+static const char *view3d_get_name(View3D *v3d, RegionView3D *rv3d)
+{
+ const char *name = NULL;
- /**
- * Calculate pixel-size factor once, is used for lamps and object centers.
- * Used by #ED_view3d_pixel_size and typically not accessed directly.
- *
- * \note #BKE_camera_params_compute_viewplane' also calculates a pixel-size value,
- * passed to #RE_SetPixelSize, in ortho mode this is compatible with this value,
- * but in perspective mode its offset by the near-clip.
- *
- * 'RegionView3D.pixsize' is used for viewport drawing, not rendering.
- */
- {
- /* note: '1.0f / len_v3(v1)' replaced 'len_v3(rv3d->viewmat[0])'
- * because of float point precision problems at large values [#23908] */
- float v1[3], v2[3];
- float len_px, len_sc;
+ switch (rv3d->view) {
+ case RV3D_VIEW_FRONT:
+ if (rv3d->persp == RV3D_ORTHO) name = IFACE_("Front Ortho");
+ else name = IFACE_("Front Persp");
+ break;
+ case RV3D_VIEW_BACK:
+ if (rv3d->persp == RV3D_ORTHO) name = IFACE_("Back Ortho");
+ else name = IFACE_("Back Persp");
+ break;
+ case RV3D_VIEW_TOP:
+ if (rv3d->persp == RV3D_ORTHO) name = IFACE_("Top Ortho");
+ else name = IFACE_("Top Persp");
+ break;
+ case RV3D_VIEW_BOTTOM:
+ if (rv3d->persp == RV3D_ORTHO) name = IFACE_("Bottom Ortho");
+ else name = IFACE_("Bottom Persp");
+ break;
+ case RV3D_VIEW_RIGHT:
+ if (rv3d->persp == RV3D_ORTHO) name = IFACE_("Right Ortho");
+ else name = IFACE_("Right Persp");
+ break;
+ case RV3D_VIEW_LEFT:
+ if (rv3d->persp == RV3D_ORTHO) name = IFACE_("Left Ortho");
+ else name = IFACE_("Left Persp");
+ break;
- v1[0] = rv3d->persmat[0][0];
- v1[1] = rv3d->persmat[1][0];
- v1[2] = rv3d->persmat[2][0];
+ default:
+ if (rv3d->persp == RV3D_CAMOB) {
+ if ((v3d->camera) && (v3d->camera->type == OB_CAMERA)) {
+ Camera *cam;
+ cam = v3d->camera->data;
+ if (cam->type == CAM_PERSP) {
+ name = IFACE_("Camera Persp");
+ }
+ else if (cam->type == CAM_ORTHO) {
+ name = IFACE_("Camera Ortho");
+ }
+ else {
+ BLI_assert(cam->type == CAM_PANO);
+ name = IFACE_("Camera Pano");
+ }
+ }
+ else {
+ name = IFACE_("Object as Camera");
+ }
+ }
+ else {
+ name = (rv3d->persp == RV3D_ORTHO) ? IFACE_("User Ortho") : IFACE_("User Persp");
+ }
+ }
- v2[0] = rv3d->persmat[0][1];
- v2[1] = rv3d->persmat[1][1];
- v2[2] = rv3d->persmat[2][1];
+ return name;
+}
- len_px = 2.0f / sqrtf(min_ff(len_squared_v3(v1), len_squared_v3(v2)));
- len_sc = (float)MAX2(ar->winx, ar->winy);
+static void draw_viewport_name(ARegion *ar, View3D *v3d, const rcti *rect)
+{
+ RegionView3D *rv3d = ar->regiondata;
+ const char *name = view3d_get_name(v3d, rv3d);
+ /* increase size for unicode languages (Chinese in utf-8...) */
+#ifdef WITH_INTERNATIONAL
+ char tmpstr[96];
+#else
+ char tmpstr[32];
+#endif
- rv3d->pixsize = len_px / len_sc;
+ if (v3d->localvd) {
+ BLI_snprintf(tmpstr, sizeof(tmpstr), IFACE_("%s (Local)"), name);
+ name = tmpstr;
}
+
+ UI_FontThemeColor(BLF_default(), TH_TEXT_HI);
+#ifdef WITH_INTERNATIONAL
+ BLF_draw_default(U.widget_unit + rect->xmin, rect->ymax - U.widget_unit, 0.0f, name, sizeof(tmpstr));
+#else
+ BLF_draw_default_ascii(U.widget_unit + rect->xmin, rect->ymax - U.widget_unit, 0.0f, name, sizeof(tmpstr));
+#endif
}
/**
- * Shared by #ED_view3d_draw_offscreen and #view3d_main_region_draw_objects
- *
- * \note \a C and \a grid_unit will be NULL when \a draw_offscreen is set.
- * \note Drawing lamps and opengl render uses this, so dont do grease pencil or view widgets here.
+ * draw info beside axes in bottom left-corner:
+ * framenum, object name, bone name (if available), marker name (if available)
*/
-static void view3d_draw_objects(
- const bContext *C,
- Scene *scene, View3D *v3d, ARegion *ar,
- const char **grid_unit,
- const bool do_bgpic, const bool draw_offscreen, GPUFX *fx)
-{
- RegionView3D *rv3d = ar->regiondata;
- Base *base;
- const bool do_camera_frame = !draw_offscreen;
- const bool draw_grids = !draw_offscreen && (v3d->flag2 & V3D_RENDER_OVERRIDE) == 0;
- const bool draw_floor = (rv3d->view == RV3D_VIEW_USER) || (rv3d->persp != RV3D_ORTHO);
- /* only draw grids after in solid modes, else it hovers over mesh wires */
- const bool draw_grids_after = draw_grids && draw_floor && (v3d->drawtype > OB_WIRE) && fx;
- bool do_composite_xray = false;
- bool xrayclear = true;
-
- if (!draw_offscreen) {
- ED_region_draw_cb_draw(C, ar, REGION_DRAW_PRE_VIEW);
- }
- if (rv3d->rflag & RV3D_CLIPPING)
- view3d_draw_clipping(rv3d);
+static void draw_selected_name(
+ Scene *scene, Object *ob, const eObjectMode object_mode, const rcti *rect)
+{
+ const int cfra = CFRA;
+ const char *msg_pin = " (Pinned)";
+ const char *msg_sep = " : ";
- /* set zbuffer after we draw clipping region */
- if (v3d->drawtype > OB_WIRE) {
- v3d->zbuf = true;
- }
- else {
- v3d->zbuf = false;
- }
+ const int font_id = BLF_default();
- /* special case (depth for wire color) */
- if (v3d->drawtype <= OB_WIRE) {
- if (scene->obedit && scene->obedit->type == OB_MESH) {
- Mesh *me = scene->obedit->data;
- if (me->drawflag & ME_DRAWEIGHT) {
- v3d->zbuf = true;
- }
- }
- }
+ char info[300];
+ char *s = info;
+ short offset = 1.5f * UI_UNIT_X + rect->xmin;
- if (v3d->zbuf) {
- glEnable(GL_DEPTH_TEST);
- }
+ s += sprintf(s, "(%d)", cfra);
- /* ortho grid goes first, does not write to depth buffer and doesn't need depth test so it will override
- * objects if done last */
- if (draw_grids) {
- /* needs to be done always, gridview is adjusted in drawgrid() now, but only for ortho views. */
- rv3d->gridview = ED_view3d_grid_scale(scene, v3d, grid_unit);
+ /*
+ * info can contain:
+ * - a frame (7 + 2)
+ * - 3 object names (MAX_NAME)
+ * - 2 BREAD_CRUMB_SEPARATORs (6)
+ * - a SHAPE_KEY_PINNED marker and a trailing '\0' (9+1) - translated, so give some room!
+ * - a marker name (MAX_NAME + 3)
+ */
- if (!draw_floor) {
- ED_region_pixelspace(ar);
- *grid_unit = NULL; /* drawgrid need this to detect/affect smallest valid unit... */
- drawgrid(&scene->unit, ar, v3d, grid_unit);
- /* XXX make function? replaces persp(1) */
- glMatrixMode(GL_PROJECTION);
- glLoadMatrixf(rv3d->winmat);
- glMatrixMode(GL_MODELVIEW);
- glLoadMatrixf(rv3d->viewmat);
- }
- else if (!draw_grids_after) {
- drawfloor(scene, v3d, grid_unit, true);
- }
- }
+ /* get name of marker on current frame (if available) */
+ const char *markern = BKE_scene_find_marker_name(scene, cfra);
- /* important to do before clipping */
- if (do_bgpic) {
- view3d_draw_bgpic_test(scene, ar, v3d, false, do_camera_frame);
- }
+ /* check if there is an object */
+ if (ob) {
+ *s++ = ' ';
+ s += BLI_strcpy_rlen(s, ob->id.name + 2);
- if (rv3d->rflag & RV3D_CLIPPING) {
- ED_view3d_clipping_set(rv3d);
- }
+ /* name(s) to display depends on type of object */
+ if (ob->type == OB_ARMATURE) {
+ bArmature *arm = ob->data;
- /* draw set first */
- if (scene->set) {
- const short dflag = DRAW_CONSTCOLOR | DRAW_SCENESET;
- Scene *sce_iter;
- for (SETLOOPER(scene->set, sce_iter, base)) {
- if (v3d->lay & base->lay) {
- UI_ThemeColorBlend(TH_WIRE, TH_BACK, 0.6f);
- draw_object(scene, ar, v3d, base, dflag);
-
- if (base->object->transflag & OB_DUPLI) {
- draw_dupli_objects_color(scene, ar, v3d, base, dflag, TH_UNDEFINED);
+ /* show name of active bone too (if possible) */
+ if (arm->edbo) {
+ if (arm->act_edbone) {
+ s += BLI_strcpy_rlen(s, msg_sep);
+ s += BLI_strcpy_rlen(s, arm->act_edbone->name);
}
}
- }
-
- /* Transp and X-ray afterdraw stuff for sets is done later */
- }
-
-
- if (draw_offscreen) {
- for (base = scene->base.first; base; base = base->next) {
- if (v3d->lay & base->lay) {
- /* dupli drawing */
- if (base->object->transflag & OB_DUPLI)
- draw_dupli_objects(scene, ar, v3d, base);
+ else if (object_mode & OB_MODE_POSE) {
+ if (arm->act_bone) {
- draw_object(scene, ar, v3d, base, 0);
+ if (arm->act_bone->layer & arm->layer) {
+ s += BLI_strcpy_rlen(s, msg_sep);
+ s += BLI_strcpy_rlen(s, arm->act_bone->name);
+ }
+ }
}
}
- }
- else {
- unsigned int lay_used = 0;
-
- /* then draw not selected and the duplis, but skip editmode object */
- for (base = scene->base.first; base; base = base->next) {
- lay_used |= base->lay;
-
- if (v3d->lay & base->lay) {
+ else if (ELEM(ob->type, OB_MESH, OB_LATTICE, OB_CURVE)) {
+ /* try to display active bone and active shapekey too (if they exist) */
- /* dupli drawing */
- if (base->object->transflag & OB_DUPLI) {
- draw_dupli_objects(scene, ar, v3d, base);
- }
- if ((base->flag & SELECT) == 0) {
- if (base->object != scene->obedit)
- draw_object(scene, ar, v3d, base, 0);
+ if (ob->type == OB_MESH && object_mode & OB_MODE_WEIGHT_PAINT) {
+ Object *armobj = BKE_object_pose_armature_get(ob);
+ if (armobj) {
+ bArmature *arm = armobj->data;
+ if (arm->act_bone) {
+ if (arm->act_bone->layer & arm->layer) {
+ s += BLI_strcpy_rlen(s, msg_sep);
+ s += BLI_strcpy_rlen(s, arm->act_bone->name);
+ }
+ }
}
}
- }
- /* mask out localview */
- v3d->lay_used = lay_used & ((1 << 20) - 1);
-
- /* draw selected and editmode */
- for (base = scene->base.first; base; base = base->next) {
- if (v3d->lay & base->lay) {
- if (base->object == scene->obedit || (base->flag & SELECT)) {
- draw_object(scene, ar, v3d, base, 0);
+ Key *key = BKE_key_from_object(ob);
+ if (key) {
+ KeyBlock *kb = BLI_findlink(&key->block, ob->shapenr - 1);
+ if (kb) {
+ s += BLI_strcpy_rlen(s, msg_sep);
+ s += BLI_strcpy_rlen(s, kb->name);
+ if (ob->shapeflag & OB_SHAPE_LOCK) {
+ s += BLI_strcpy_rlen(s, IFACE_(msg_pin));
+ }
}
}
}
- }
- /* perspective floor goes last to use scene depth and avoid writing to depth buffer */
- if (draw_grids_after) {
- drawfloor(scene, v3d, grid_unit, false);
+ /* color depends on whether there is a keyframe */
+ if (id_frame_has_keyframe((ID *)ob, /* BKE_scene_frame_get(scene) */ (float)cfra, ANIMFILTER_KEYS_LOCAL))
+ UI_FontThemeColor(font_id, TH_TIME_KEYFRAME);
+ else if (ED_gpencil_has_keyframe_v3d(scene, ob, cfra))
+ UI_FontThemeColor(font_id, TH_TIME_GP_KEYFRAME);
+ else
+ UI_FontThemeColor(font_id, TH_TEXT_HI);
+ }
+ else {
+ /* no object */
+ if (ED_gpencil_has_keyframe_v3d(scene, NULL, cfra))
+ UI_FontThemeColor(font_id, TH_TIME_GP_KEYFRAME);
+ else
+ UI_FontThemeColor(font_id, TH_TEXT_HI);
}
- /* must be before xray draw which clears the depth buffer */
- if (v3d->flag2 & V3D_SHOW_GPENCIL) {
- wmWindowManager *wm = (C != NULL) ? CTX_wm_manager(C) : NULL;
-
- /* must be before xray draw which clears the depth buffer */
- if (v3d->zbuf) glDisable(GL_DEPTH_TEST);
- ED_gpencil_draw_view3d(wm, scene, v3d, ar, true);
- if (v3d->zbuf) glEnable(GL_DEPTH_TEST);
+ if (markern) {
+ s += sprintf(s, " <%s>", markern);
}
- /* transp and X-ray afterdraw stuff */
- if (v3d->afterdraw_transp.first) view3d_draw_transp(scene, ar, v3d);
+ if (U.uiflag & USER_SHOW_ROTVIEWICON)
+ offset = U.widget_unit + (U.rvisize * 2) + rect->xmin;
- /* always do that here to cleanup depth buffers if none needed */
- if (fx) {
- do_composite_xray = v3d->zbuf && (v3d->afterdraw_xray.first || v3d->afterdraw_xraytransp.first);
- GPU_fx_compositor_setup_XRay_pass(fx, do_composite_xray);
- }
+ BLF_draw_default(offset, 0.5f * U.widget_unit, 0.0f, info, sizeof(info));
+}
- if (v3d->afterdraw_xray.first) view3d_draw_xray(scene, ar, v3d, &xrayclear);
- if (v3d->afterdraw_xraytransp.first) view3d_draw_xraytransp(scene, ar, v3d, xrayclear);
+/* ******************** view loop ***************** */
- if (fx && do_composite_xray) {
- GPU_fx_compositor_XRay_resolve(fx);
- }
+/**
+* Information drawn on top of the solid plates and composed data
+*/
+void view3d_draw_region_info(const bContext *C, ARegion *ar, const int offset)
+{
+ RegionView3D *rv3d = ar->regiondata;
+ View3D *v3d = CTX_wm_view3d(C);
+ Scene *scene = CTX_data_scene(C);
+ wmWindowManager *wm = CTX_wm_manager(C);
- if (!draw_offscreen) {
- ED_region_draw_cb_draw(C, ar, REGION_DRAW_POST_VIEW);
- }
+ /* correct projection matrix */
+ ED_region_pixelspace(ar);
- if (rv3d->rflag & RV3D_CLIPPING)
- ED_view3d_clipping_disable();
+ /* local coordinate visible rect inside region, to accomodate overlapping ui */
+ rcti rect;
+ ED_region_visible_rect(ar, &rect);
+
+ /* Leave room for previously drawn info. */
+ rect.ymax -= offset;
+
+ view3d_draw_border(C, ar);
+ view3d_draw_grease_pencil(C);
- /* important to do after clipping */
- if (do_bgpic) {
- view3d_draw_bgpic_test(scene, ar, v3d, true, do_camera_frame);
+ if (U.uiflag & USER_SHOW_ROTVIEWICON) {
+ draw_view_axis(rv3d, &rect);
}
- if (!draw_offscreen) {
- BIF_draw_manipulator(C);
+ if ((U.uiflag & USER_SHOW_FPS) && ED_screen_animation_no_scrub(wm)) {
+ ED_scene_draw_fps(scene, &rect);
+ }
+ else if (U.uiflag & USER_SHOW_VIEWPORTNAME) {
+ draw_viewport_name(ar, v3d, &rect);
}
- /* cleanup */
- if (v3d->zbuf) {
- v3d->zbuf = false;
- glDisable(GL_DEPTH_TEST);
+ if (U.uiflag & USER_DRAWVIEWINFO) {
+ const WorkSpace *workspace = CTX_wm_workspace(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Object *ob = OBACT(view_layer);
+ draw_selected_name(scene, ob, workspace->object_mode, &rect);
}
+#if 0 /* TODO */
+ if (grid_unit) { /* draw below the viewport name */
+ char numstr[32] = "";
- if ((v3d->flag2 & V3D_RENDER_SHADOW) == 0) {
- GPU_free_images_old();
+ UI_FontThemeColor(BLF_default(), TH_TEXT_HI);
+ if (v3d->grid != 1.0f) {
+ BLI_snprintf(numstr, sizeof(numstr), "%s x %.4g", grid_unit, v3d->grid);
+ }
+
+ BLF_draw_default_ascii(rect.xmin + U.widget_unit,
+ rect.ymax - (USER_SHOW_VIEWPORTNAME ? 2 * U.widget_unit : U.widget_unit), 0.0f,
+ numstr[0] ? numstr : grid_unit, sizeof(numstr));
}
+#endif
}
-static void view3d_main_region_setup_view(
- Scene *scene, View3D *v3d, ARegion *ar, float viewmat[4][4], float winmat[4][4], const rcti *rect)
+static void view3d_draw_view(const bContext *C, ARegion *ar)
{
- RegionView3D *rv3d = ar->regiondata;
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
- ED_view3d_update_viewmat(scene, v3d, ar, viewmat, winmat, rect);
+ ED_view3d_draw_setup_view(CTX_wm_window(C), &eval_ctx, CTX_data_scene(C), ar, CTX_wm_view3d(C), NULL, NULL, NULL);
- /* set for opengl */
- glMatrixMode(GL_PROJECTION);
- glLoadMatrixf(rv3d->winmat);
- glMatrixMode(GL_MODELVIEW);
- glLoadMatrixf(rv3d->viewmat);
+ /* Only 100% compliant on new spec goes bellow */
+ DRW_draw_view(C);
}
-/**
- * Store values from #RegionView3D, set when drawing.
- * This is needed when we draw with to a viewport using a different matrix (offscreen drawing for example).
- *
- * Values set by #ED_view3d_update_viewmat should be handled here.
- */
-struct RV3DMatrixStore {
- float winmat[4][4];
- float viewmat[4][4];
- float viewinv[4][4];
- float persmat[4][4];
- float persinv[4][4];
- float viewcamtexcofac[4];
- float pixsize;
-};
-
-struct RV3DMatrixStore *ED_view3d_mats_rv3d_backup(struct RegionView3D *rv3d)
+void view3d_main_region_draw(const bContext *C, ARegion *ar)
{
- struct RV3DMatrixStore *rv3dmat = MEM_mallocN(sizeof(*rv3dmat), __func__);
- copy_m4_m4(rv3dmat->winmat, rv3d->winmat);
- copy_m4_m4(rv3dmat->viewmat, rv3d->viewmat);
- copy_m4_m4(rv3dmat->persmat, rv3d->persmat);
- copy_m4_m4(rv3dmat->persinv, rv3d->persinv);
- copy_m4_m4(rv3dmat->viewinv, rv3d->viewinv);
- copy_v4_v4(rv3dmat->viewcamtexcofac, rv3d->viewcamtexcofac);
- rv3dmat->pixsize = rv3d->pixsize;
- return (void *)rv3dmat;
+ Scene *scene = CTX_data_scene(C);
+ WorkSpace *workspace = CTX_wm_workspace(C);
+ View3D *v3d = CTX_wm_view3d(C);
+ RegionView3D *rv3d = ar->regiondata;
+ ViewRender *view_render = BKE_viewrender_get(scene, workspace);
+ RenderEngineType *type = RE_engines_find(view_render->engine_id);
+
+ /* Provisory Blender Internal drawing */
+ if (type->flag & RE_USE_LEGACY_PIPELINE) {
+ view3d_main_region_draw_legacy(C, ar);
+ return;
+ }
+
+ if (!rv3d->viewport) {
+ rv3d->viewport = GPU_viewport_create();
+ }
+
+ GPU_viewport_bind(rv3d->viewport, &ar->winrct);
+ view3d_draw_view(C, ar);
+ GPU_viewport_unbind(rv3d->viewport);
+
+ v3d->flag |= V3D_INVALID_BACKBUF;
}
-void ED_view3d_mats_rv3d_restore(struct RegionView3D *rv3d, struct RV3DMatrixStore *rv3dmat)
+
+/* -------------------------------------------------------------------- */
+
+/** \name Offscreen Drawing
+ * \{ */
+
+static void view3d_stereo3d_setup_offscreen(
+ const EvaluationContext *eval_ctx, Scene *scene, View3D *v3d, ARegion *ar,
+ float winmat[4][4], const char *viewname)
{
- copy_m4_m4(rv3d->winmat, rv3dmat->winmat);
- copy_m4_m4(rv3d->viewmat, rv3dmat->viewmat);
- copy_m4_m4(rv3d->persmat, rv3dmat->persmat);
- copy_m4_m4(rv3d->persinv, rv3dmat->persinv);
- copy_m4_m4(rv3d->viewinv, rv3dmat->viewinv);
- copy_v4_v4(rv3d->viewcamtexcofac, rv3dmat->viewcamtexcofac);
- rv3d->pixsize = rv3dmat->pixsize;
+ /* update the viewport matrices with the new camera */
+ if (scene->r.views_format == SCE_VIEWS_FORMAT_STEREO_3D) {
+ float viewmat[4][4];
+ const bool is_left = STREQ(viewname, STEREO_LEFT_NAME);
+
+ BKE_camera_multiview_view_matrix(&scene->r, v3d->camera, is_left, viewmat);
+ view3d_main_region_setup_view(eval_ctx, scene, v3d, ar, viewmat, winmat, NULL);
+ }
+ else { /* SCE_VIEWS_FORMAT_MULTIVIEW */
+ float viewmat[4][4];
+ Object *camera = BKE_camera_multiview_render(scene, v3d->camera, viewname);
+
+ BKE_camera_multiview_view_matrix(&scene->r, camera, false, viewmat);
+ view3d_main_region_setup_view(eval_ctx, scene, v3d, ar, viewmat, winmat, NULL);
+ }
}
-void ED_view3d_draw_offscreen_init(Scene *scene, View3D *v3d)
+void ED_view3d_draw_offscreen_init(const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, View3D *v3d)
{
- /* shadow buffers, before we setup matrices */
- if (draw_glsl_material(scene, NULL, v3d, v3d->drawtype))
- gpu_update_lamps_shadows_world(scene, v3d);
+ RenderEngineType *engine_type = eval_ctx->engine_type;
+ if (engine_type->flag & RE_USE_LEGACY_PIPELINE) {
+ /* shadow buffers, before we setup matrices */
+ if (draw_glsl_material(eval_ctx, scene, view_layer, NULL, v3d, v3d->drawtype)) {
+ VP_deprecated_gpu_update_lamps_shadows_world(eval_ctx, scene, v3d);
+ }
+ }
}
/*
@@ -3084,79 +1964,13 @@ void ED_view3d_draw_offscreen_init(Scene *scene, View3D *v3d)
*/
static void view3d_main_region_clear(Scene *scene, View3D *v3d, ARegion *ar)
{
- if (scene->world && (v3d->flag3 & V3D_SHOW_WORLD)) {
- RegionView3D *rv3d = ar->regiondata;
- GPUMaterial *gpumat = GPU_material_world(scene, scene->world);
-
- /* calculate full shader for background */
- GPU_material_bind(gpumat, 1, 1, 1.0, false, rv3d->viewmat, rv3d->viewinv, rv3d->viewcamtexcofac, (v3d->scenelock != 0));
-
- bool material_not_bound = !GPU_material_bound(gpumat);
-
- if (material_not_bound) {
- glMatrixMode(GL_PROJECTION);
- glPushMatrix();
- glLoadIdentity();
- glMatrixMode(GL_MODELVIEW);
- glPushMatrix();
- glLoadIdentity();
- glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
- }
-
- /* Draw world */
- glEnable(GL_DEPTH_TEST);
- glDepthFunc(GL_ALWAYS);
- glBegin(GL_TRIANGLE_STRIP);
- glVertex3f(-1.0, -1.0, 1.0);
- glVertex3f(1.0, -1.0, 1.0);
- glVertex3f(-1.0, 1.0, 1.0);
- glVertex3f(1.0, 1.0, 1.0);
- glEnd();
-
- if (material_not_bound) {
- glMatrixMode(GL_PROJECTION);
- glPopMatrix();
- glMatrixMode(GL_MODELVIEW);
- glPopMatrix();
- }
+ glClear(GL_DEPTH_BUFFER_BIT);
- GPU_material_unbind(gpumat);
-
- glDepthFunc(GL_LEQUAL);
- glDisable(GL_DEPTH_TEST);
+ if (scene->world && (v3d->flag3 & V3D_SHOW_WORLD)) {
+ VP_view3d_draw_background_world(scene, ar->regiondata);
}
else {
- if (UI_GetThemeValue(TH_SHOW_BACK_GRAD)) {
- glMatrixMode(GL_PROJECTION);
- glPushMatrix();
- glLoadIdentity();
- glMatrixMode(GL_MODELVIEW);
- glPushMatrix();
- glLoadIdentity();
-
- glEnable(GL_DEPTH_TEST);
- glDepthFunc(GL_ALWAYS);
- glBegin(GL_QUADS);
- UI_ThemeColor(TH_LOW_GRAD);
- glVertex3f(-1.0, -1.0, 1.0);
- glVertex3f(1.0, -1.0, 1.0);
- UI_ThemeColor(TH_HIGH_GRAD);
- glVertex3f(1.0, 1.0, 1.0);
- glVertex3f(-1.0, 1.0, 1.0);
- glEnd();
- glDepthFunc(GL_LEQUAL);
- glDisable(GL_DEPTH_TEST);
-
- glMatrixMode(GL_PROJECTION);
- glPopMatrix();
-
- glMatrixMode(GL_MODELVIEW);
- glPopMatrix();
- }
- else {
- UI_ThemeClearColorAlpha(TH_HIGH_GRAD, 1.0f);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- }
+ VP_view3d_draw_background_none();
}
}
@@ -3164,24 +1978,20 @@ static void view3d_main_region_clear(Scene *scene, View3D *v3d, ARegion *ar)
* stuff like shadow buffers
*/
void ED_view3d_draw_offscreen(
- Scene *scene, View3D *v3d, ARegion *ar, int winx, int winy,
+ const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer,
+ View3D *v3d, ARegion *ar, int winx, int winy,
float viewmat[4][4], float winmat[4][4],
bool do_bgpic, bool do_sky, bool is_persp, const char *viewname,
GPUFX *fx, GPUFXSettings *fx_settings,
- GPUOffScreen *ofs)
+ GPUOffScreen *ofs, GPUViewport *viewport)
{
- struct bThemeState theme_state;
- int bwinx, bwiny;
- rcti brect;
bool do_compositing = false;
RegionView3D *rv3d = ar->regiondata;
- glPushMatrix();
-
/* set temporary new size */
- bwinx = ar->winx;
- bwiny = ar->winy;
- brect = ar->winrct;
+ int bwinx = ar->winx;
+ int bwiny = ar->winy;
+ rcti brect = ar->winrct;
ar->winx = winx;
ar->winy = winy;
@@ -3190,6 +2000,7 @@ void ED_view3d_draw_offscreen(
ar->winrct.xmax = winx;
ar->winrct.ymax = winy;
+ struct bThemeState theme_state;
UI_Theme_Store(&theme_state);
UI_SetTheme(SPACE_VIEW3D, RGN_TYPE_WINDOW);
@@ -3202,26 +2013,10 @@ void ED_view3d_draw_offscreen(
GPU_free_images_anim();
}
- /* setup view matrices before fx or unbinding the offscreen buffers will cause issues */
- if ((viewname != NULL && viewname[0] != '\0') && (viewmat == NULL) && rv3d->persp == RV3D_CAMOB && v3d->camera)
- view3d_stereo3d_setup_offscreen(scene, v3d, ar, winmat, viewname);
- else
- view3d_main_region_setup_view(scene, v3d, ar, viewmat, winmat, NULL);
-
- /* framebuffer fx needed, we need to draw offscreen first */
- if (v3d->fx_settings.fx_flag && fx) {
- GPUSSAOSettings *ssao = NULL;
-
- if (v3d->drawtype < OB_SOLID) {
- ssao = v3d->fx_settings.ssao;
- v3d->fx_settings.ssao = NULL;
- }
-
- do_compositing = GPU_fx_compositor_initialize_passes(fx, &ar->winrct, NULL, fx_settings);
-
- if (ssao)
- v3d->fx_settings.ssao = ssao;
- }
+ gpuPushProjectionMatrix();
+ gpuLoadIdentity();
+ gpuPushMatrix();
+ gpuLoadIdentity();
/* clear opengl buffers */
if (do_sky) {
@@ -3232,28 +2027,60 @@ void ED_view3d_draw_offscreen(
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
+ if ((viewname != NULL && viewname[0] != '\0') && (viewmat == NULL) && rv3d->persp == RV3D_CAMOB && v3d->camera)
+ view3d_stereo3d_setup_offscreen(eval_ctx, scene, v3d, ar, winmat, viewname);
+ else
+ view3d_main_region_setup_view(eval_ctx, scene, v3d, ar, viewmat, winmat, NULL);
+
+ /* XXX, should take depsgraph as arg */
+ Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, view_layer, false);
+ BLI_assert(depsgraph != NULL);
+
/* main drawing call */
- view3d_draw_objects(NULL, scene, v3d, ar, NULL, do_bgpic, true, do_compositing ? fx : NULL);
+ RenderEngineType *engine_type = eval_ctx->engine_type;
+ if (engine_type->flag & RE_USE_LEGACY_PIPELINE) {
- /* post process */
- if (do_compositing) {
- if (!winmat)
- is_persp = rv3d->is_persp;
- GPU_fx_do_composite_pass(fx, winmat, is_persp, scene, ofs);
- }
+ /* framebuffer fx needed, we need to draw offscreen first */
+ if (v3d->fx_settings.fx_flag && fx) {
+ GPUSSAOSettings *ssao = NULL;
- if ((v3d->flag2 & V3D_RENDER_SHADOW) == 0) {
- /* draw grease-pencil stuff */
- ED_region_pixelspace(ar);
+ if (v3d->drawtype < OB_SOLID) {
+ ssao = v3d->fx_settings.ssao;
+ v3d->fx_settings.ssao = NULL;
+ }
+ do_compositing = GPU_fx_compositor_initialize_passes(fx, &ar->winrct, NULL, fx_settings);
- if (v3d->flag2 & V3D_SHOW_GPENCIL) {
- /* draw grease-pencil stuff - needed to get paint-buffer shown too (since it's 2D) */
- ED_gpencil_draw_view3d(NULL, scene, v3d, ar, false);
+ if (ssao)
+ v3d->fx_settings.ssao = ssao;
}
- /* freeing the images again here could be done after the operator runs, leaving for now */
- GPU_free_images_anim();
+ VP_deprecated_view3d_draw_objects(NULL, eval_ctx, scene, v3d, ar, NULL, do_bgpic, true, do_compositing ? fx : NULL);
+
+ /* post process */
+ if (do_compositing) {
+ if (!winmat)
+ is_persp = rv3d->is_persp;
+ GPU_fx_do_composite_pass(fx, winmat, is_persp, scene, ofs);
+ }
+
+ if ((v3d->flag2 & V3D_RENDER_SHADOW) == 0) {
+ /* draw grease-pencil stuff */
+ ED_region_pixelspace(ar);
+
+ if (v3d->flag2 & V3D_SHOW_GPENCIL) {
+ /* draw grease-pencil stuff - needed to get paint-buffer shown too (since it's 2D) */
+ ED_gpencil_draw_view3d(NULL, scene, view_layer, depsgraph, v3d, ar, false);
+ }
+
+ /* freeing the images again here could be done after the operator runs, leaving for now */
+ GPU_free_images_anim();
+ }
+ }
+ else {
+ DRW_draw_render_loop_offscreen(
+ eval_ctx->depsgraph, eval_ctx->engine_type, ar, v3d, eval_ctx->object_mode,
+ do_sky, ofs, viewport);
}
/* restore size */
@@ -3261,7 +2088,8 @@ void ED_view3d_draw_offscreen(
ar->winy = bwiny;
ar->winrct = brect;
- glPopMatrix();
+ gpuPopProjectionMatrix();
+ gpuPopMatrix();
UI_Theme_Restore(&theme_state);
@@ -3269,37 +2097,21 @@ void ED_view3d_draw_offscreen(
}
/**
- * Set the correct matrices
- */
-void ED_view3d_draw_setup_view(
- wmWindow *win, Scene *scene, ARegion *ar, View3D *v3d, float viewmat[4][4], float winmat[4][4], const rcti *rect)
-{
- RegionView3D *rv3d = ar->regiondata;
-
- /* Setup the view matrix. */
- if (view3d_stereo3d_active(win, scene, v3d, rv3d)) {
- view3d_stereo3d_setup(scene, v3d, ar, rect);
- }
- else {
- view3d_main_region_setup_view(scene, v3d, ar, viewmat, winmat, rect);
- }
-}
-
-/**
* Utility func for ED_view3d_draw_offscreen
*
* \param ofs: Optional off-screen buffer, can be NULL.
* (avoids re-creating when doing multiple GL renders).
*/
ImBuf *ED_view3d_draw_offscreen_imbuf(
- Scene *scene, View3D *v3d, ARegion *ar, int sizex, int sizey,
+ const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer,
+ View3D *v3d, ARegion *ar, int sizex, int sizey,
unsigned int flag, unsigned int draw_flags,
int alpha_mode, int samples, const char *viewname,
/* output vars */
GPUFX *fx, GPUOffScreen *ofs, char err_out[256])
{
+ const Depsgraph *depsgraph = eval_ctx->depsgraph;
RegionView3D *rv3d = ar->regiondata;
- ImBuf *ibuf;
const bool draw_sky = (alpha_mode == R_ADDSKY);
const bool draw_background = (draw_flags & V3D_OFSDRAW_USE_BACKGROUND);
const bool use_full_sample = (draw_flags & V3D_OFSDRAW_USE_FULL_SAMPLE);
@@ -3318,18 +2130,18 @@ ImBuf *ED_view3d_draw_offscreen_imbuf(
if (own_ofs) {
/* bind */
- ofs = GPU_offscreen_create(sizex, sizey, use_full_sample ? 0 : samples, err_out);
+ ofs = GPU_offscreen_create(sizex, sizey, use_full_sample ? 0 : samples, false, err_out);
if (ofs == NULL) {
return NULL;
}
}
- ED_view3d_draw_offscreen_init(scene, v3d);
+ ED_view3d_draw_offscreen_init(eval_ctx, scene, view_layer, v3d);
GPU_offscreen_bind(ofs, true);
/* read in pixels & stamp */
- ibuf = IMB_allocImBuf(sizex, sizey, 32, flag);
+ ImBuf *ibuf = IMB_allocImBuf(sizex, sizey, 32, flag);
/* render 3d view */
if (rv3d->persp == RV3D_CAMOB && v3d->camera) {
@@ -3354,7 +2166,7 @@ ImBuf *ED_view3d_draw_offscreen_imbuf(
rctf viewplane;
float clipsta, clipend;
- is_ortho = ED_view3d_viewplane_get(v3d, rv3d, sizex, sizey, &viewplane, &clipsta, &clipend, NULL);
+ is_ortho = ED_view3d_viewplane_get(depsgraph, v3d, rv3d, sizex, sizey, &viewplane, &clipsta, &clipend, NULL);
if (is_ortho) {
orthographic_m4(winmat, viewplane.xmin, viewplane.xmax, viewplane.ymin, viewplane.ymax, -clipend, clipend);
}
@@ -3366,9 +2178,9 @@ ImBuf *ED_view3d_draw_offscreen_imbuf(
if ((samples && use_full_sample) == 0) {
/* Single-pass render, common case */
ED_view3d_draw_offscreen(
- scene, v3d, ar, sizex, sizey, NULL, winmat,
+ eval_ctx, scene, view_layer, v3d, ar, sizex, sizey, NULL, winmat,
draw_background, draw_sky, !is_ortho, viewname,
- fx, &fx_settings, ofs);
+ fx, &fx_settings, ofs, NULL);
if (ibuf->rect_float) {
GPU_offscreen_read_pixels(ofs, GL_FLOAT, ibuf->rect_float);
@@ -3382,28 +2194,21 @@ ImBuf *ED_view3d_draw_offscreen_imbuf(
* Use because OpenGL may use a lower quality MSAA, and only over-sample edges. */
static float jit_ofs[32][2];
float winmat_jitter[4][4];
- /* use imbuf as temp storage, before writing into it from accumulation buffer */
- unsigned char *rect_temp = ibuf->rect ? (void *)ibuf->rect : (void *)ibuf->rect_float;
- unsigned int *accum_buffer = MEM_mallocN(sizex * sizey * sizeof(int[4]), "accum1");
- unsigned int i;
- int j;
+ float *rect_temp = (ibuf->rect_float) ? ibuf->rect_float : MEM_mallocN(sizex * sizey * sizeof(float[4]), "rect_temp");
+ float *accum_buffer = MEM_mallocN(sizex * sizey * sizeof(float[4]), "accum_buffer");
+ GPUViewport *viewport = GPU_viewport_create_from_offscreen(ofs);
BLI_jitter_init(jit_ofs, samples);
/* first sample buffer, also initializes 'rv3d->persmat' */
ED_view3d_draw_offscreen(
- scene, v3d, ar, sizex, sizey, NULL, winmat,
+ eval_ctx, scene, view_layer, v3d, ar, sizex, sizey, NULL, winmat,
draw_background, draw_sky, !is_ortho, viewname,
- fx, &fx_settings, ofs);
- GPU_offscreen_read_pixels(ofs, GL_UNSIGNED_BYTE, rect_temp);
-
- i = sizex * sizey * 4;
- while (i--) {
- accum_buffer[i] = rect_temp[i];
- }
+ fx, &fx_settings, ofs, viewport);
+ GPU_offscreen_read_pixels(ofs, GL_FLOAT, accum_buffer);
/* skip the first sample */
- for (j = 1; j < samples; j++) {
+ for (int j = 1; j < samples; j++) {
copy_m4_m4(winmat_jitter, winmat);
window_translate_m4(
winmat_jitter, rv3d->persmat,
@@ -3411,29 +2216,40 @@ ImBuf *ED_view3d_draw_offscreen_imbuf(
(jit_ofs[j][1] * 2.0f) / sizey);
ED_view3d_draw_offscreen(
- scene, v3d, ar, sizex, sizey, NULL, winmat_jitter,
+ eval_ctx, scene, view_layer, v3d, ar, sizex, sizey, NULL, winmat_jitter,
draw_background, draw_sky, !is_ortho, viewname,
- fx, &fx_settings, ofs);
- GPU_offscreen_read_pixels(ofs, GL_UNSIGNED_BYTE, rect_temp);
+ fx, &fx_settings, ofs, viewport);
+ GPU_offscreen_read_pixels(ofs, GL_FLOAT, rect_temp);
- i = sizex * sizey * 4;
+ unsigned int i = sizex * sizey * 4;
while (i--) {
accum_buffer[i] += rect_temp[i];
}
}
+ {
+ /* don't free data owned by 'ofs' */
+ GPU_viewport_clear_from_offscreen(viewport);
+ GPU_viewport_free(viewport);
+ MEM_freeN(viewport);
+ }
+
+ if (ibuf->rect_float == NULL) {
+ MEM_freeN(rect_temp);
+ }
+
if (ibuf->rect_float) {
float *rect_float = ibuf->rect_float;
- i = sizex * sizey * 4;
+ unsigned int i = sizex * sizey * 4;
while (i--) {
- rect_float[i] = (float)(accum_buffer[i] / samples) * (1.0f / 255.0f);
+ rect_float[i] = accum_buffer[i] / samples;
}
}
else {
unsigned char *rect_ub = (unsigned char *)ibuf->rect;
- i = sizex * sizey * 4;
+ unsigned int i = sizex * sizey * 4;
while (i--) {
- rect_ub[i] = accum_buffer[i] / samples;
+ rect_ub[i] = (unsigned char)(255.0f * accum_buffer[i] / samples);
}
}
@@ -3462,7 +2278,8 @@ ImBuf *ED_view3d_draw_offscreen_imbuf(
* \note used by the sequencer
*/
ImBuf *ED_view3d_draw_offscreen_imbuf_simple(
- Scene *scene, Object *camera, int width, int height,
+ const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer,
+ Object *camera, int width, int height,
unsigned int flag, unsigned int draw_flags, int drawtype,
int alpha_mode, int samples, const char *viewname,
GPUFX *fx, GPUOffScreen *ofs, char err_out[256])
@@ -3523,670 +2340,105 @@ ImBuf *ED_view3d_draw_offscreen_imbuf_simple(
invert_m4_m4(rv3d.persinv, rv3d.viewinv);
return ED_view3d_draw_offscreen_imbuf(
- scene, &v3d, &ar, width, height, flag, draw_flags,
- alpha_mode, samples, viewname, fx, ofs, err_out);
+ eval_ctx, scene, view_layer, &v3d, &ar, width, height, flag,
+ draw_flags, alpha_mode, samples, viewname, fx, ofs, err_out);
}
+/** \} */
-/**
- * \note The info that this uses is updated in #ED_refresh_viewport_fps,
- * which currently gets called during #SCREEN_OT_animation_step.
- */
-void ED_scene_draw_fps(Scene *scene, const rcti *rect)
-{
- ScreenFrameRateInfo *fpsi = scene->fps_info;
- float fps;
- char printable[16];
- int i, tot;
-
- if (!fpsi || !fpsi->lredrawtime || !fpsi->redrawtime)
- return;
-
- printable[0] = '\0';
-
-#if 0
- /* this is too simple, better do an average */
- fps = (float)(1.0 / (fpsi->lredrawtime - fpsi->redrawtime))
-#else
- fpsi->redrawtimes_fps[fpsi->redrawtime_index] = (float)(1.0 / (fpsi->lredrawtime - fpsi->redrawtime));
-
- for (i = 0, tot = 0, fps = 0.0f; i < REDRAW_FRAME_AVERAGE; i++) {
- if (fpsi->redrawtimes_fps[i]) {
- fps += fpsi->redrawtimes_fps[i];
- tot++;
- }
- }
- if (tot) {
- fpsi->redrawtime_index = (fpsi->redrawtime_index + 1) % REDRAW_FRAME_AVERAGE;
-
- //fpsi->redrawtime_index++;
- //if (fpsi->redrawtime >= REDRAW_FRAME_AVERAGE)
- // fpsi->redrawtime = 0;
-
- fps = fps / tot;
- }
-#endif
-
- /* is this more than half a frame behind? */
- if (fps + 0.5f < (float)(FPS)) {
- UI_ThemeColor(TH_REDALERT);
- BLI_snprintf(printable, sizeof(printable), IFACE_("fps: %.2f"), fps);
- }
- else {
- UI_ThemeColor(TH_TEXT_HI);
- BLI_snprintf(printable, sizeof(printable), IFACE_("fps: %i"), (int)(fps + 0.5f));
- }
-
-#ifdef WITH_INTERNATIONAL
- BLF_draw_default(rect->xmin + U.widget_unit, rect->ymax - U.widget_unit, 0.0f, printable, sizeof(printable));
-#else
- BLF_draw_default_ascii(rect->xmin + U.widget_unit, rect->ymax - U.widget_unit, 0.0f, printable, sizeof(printable));
-#endif
-}
-static bool view3d_main_region_do_render_draw(const Scene *scene)
-{
- RenderEngineType *type = RE_engines_find(scene->r.engine);
+/* -------------------------------------------------------------------- */
- return (type && type->view_update && type->view_draw);
-}
+/** \name Legacy Interface
+ *
+ * This will be removed once the viewport gets replaced
+ * meanwhile it should keep the old viewport working.
+ *
+ * \{ */
-bool ED_view3d_calc_render_border(
- const Scene *scene, const View3D *v3d, const ARegion *ar,
- rcti *rect)
+void VP_legacy_drawcursor(
+ const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, ARegion *ar, View3D *v3d)
{
- RegionView3D *rv3d = ar->regiondata;
- rctf viewborder;
- bool use_border;
-
- /* test if there is a 3d view rendering */
- if (v3d->drawtype != OB_RENDER || !view3d_main_region_do_render_draw(scene))
- return false;
-
- /* test if there is a border render */
- if (rv3d->persp == RV3D_CAMOB)
- use_border = (scene->r.mode & R_BORDER) != 0;
- else
- use_border = (v3d->flag2 & V3D_RENDER_BORDER) != 0;
-
- if (!use_border)
- return false;
-
- /* compute border */
- if (rv3d->persp == RV3D_CAMOB) {
- ED_view3d_calc_camera_border(scene, ar, v3d, rv3d, &viewborder, false);
-
- rect->xmin = viewborder.xmin + scene->r.border.xmin * BLI_rctf_size_x(&viewborder);
- rect->ymin = viewborder.ymin + scene->r.border.ymin * BLI_rctf_size_y(&viewborder);
- rect->xmax = viewborder.xmin + scene->r.border.xmax * BLI_rctf_size_x(&viewborder);
- rect->ymax = viewborder.ymin + scene->r.border.ymax * BLI_rctf_size_y(&viewborder);
+ if (is_cursor_visible(eval_ctx, scene, view_layer)) {
+ drawcursor(scene, ar, v3d);
}
- else {
- rect->xmin = v3d->render_border.xmin * ar->winx;
- rect->xmax = v3d->render_border.xmax * ar->winx;
- rect->ymin = v3d->render_border.ymin * ar->winy;
- rect->ymax = v3d->render_border.ymax * ar->winy;
- }
-
- BLI_rcti_translate(rect, ar->winrct.xmin, ar->winrct.ymin);
- BLI_rcti_isect(&ar->winrct, rect, rect);
-
- return true;
}
-static bool view3d_main_region_draw_engine(const bContext *C, Scene *scene,
- ARegion *ar, View3D *v3d,
- bool clip_border, const rcti *border_rect)
+void VP_legacy_draw_view_axis(RegionView3D *rv3d, const rcti *rect)
{
- RegionView3D *rv3d = ar->regiondata;
- RenderEngineType *type;
- GLint scissor[4];
-
- /* create render engine */
- if (!rv3d->render_engine) {
- RenderEngine *engine;
-
- type = RE_engines_find(scene->r.engine);
-
- if (!(type->view_update && type->view_draw))
- return false;
-
- engine = RE_engine_create_ex(type, true);
-
- engine->tile_x = scene->r.tilex;
- engine->tile_y = scene->r.tiley;
-
- type->view_update(engine, C);
-
- rv3d->render_engine = engine;
- }
-
- /* setup view matrices */
- view3d_main_region_setup_view(scene, v3d, ar, NULL, NULL, NULL);
-
- /* background draw */
- ED_region_pixelspace(ar);
-
- if (clip_border) {
- /* for border draw, we only need to clear a subset of the 3d view */
- if (border_rect->xmax > border_rect->xmin && border_rect->ymax > border_rect->ymin) {
- glGetIntegerv(GL_SCISSOR_BOX, scissor);
- glScissor(border_rect->xmin, border_rect->ymin,
- BLI_rcti_size_x(border_rect), BLI_rcti_size_y(border_rect));
- }
- else {
- return false;
- }
- }
-
- glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
- if (v3d->flag & V3D_DISPBGPICS)
- view3d_draw_bgpic_test(scene, ar, v3d, false, true);
- else
- fdrawcheckerboard(0, 0, ar->winx, ar->winy);
-
- /* render result draw */
- type = rv3d->render_engine->type;
- type->view_draw(rv3d->render_engine, C);
-
- if (v3d->flag & V3D_DISPBGPICS)
- view3d_draw_bgpic_test(scene, ar, v3d, true, true);
-
- if (clip_border) {
- /* restore scissor as it was before */
- glScissor(scissor[0], scissor[1], scissor[2], scissor[3]);
- }
-
- return true;
+ draw_view_axis(rv3d, rect);
}
-static void view3d_main_region_draw_engine_info(View3D *v3d, RegionView3D *rv3d, ARegion *ar, bool render_border)
+void VP_legacy_draw_viewport_name(ARegion *ar, View3D *v3d, const rcti *rect)
{
- float fill_color[4] = {0.0f, 0.0f, 0.0f, 0.25f};
-
- if (!rv3d->render_engine || !rv3d->render_engine->text[0])
- return;
-
- if (render_border) {
- /* draw darkened background color. no alpha because border render does
- * partial redraw and will not redraw the region behind this info bar */
- float alpha = 1.0f - fill_color[3];
- Camera *camera = ED_view3d_camera_data_get(v3d, rv3d);
-
- if (camera) {
- if (camera->flag & CAM_SHOWPASSEPARTOUT) {
- alpha *= (1.0f - camera->passepartalpha);
- }
- }
-
- UI_GetThemeColor3fv(TH_HIGH_GRAD, fill_color);
- mul_v3_fl(fill_color, alpha);
- fill_color[3] = 1.0f;
- }
-
- ED_region_info_draw(ar, rv3d->render_engine->text, fill_color, true);
+ draw_viewport_name(ar, v3d, rect);
}
-static bool view3d_stereo3d_active(wmWindow *win, Scene *scene, View3D *v3d, RegionView3D *rv3d)
+void VP_legacy_draw_selected_name(Scene *scene, Object *ob, eObjectMode object_mode, const rcti *rect)
{
- if ((scene->r.scemode & R_MULTIVIEW) == 0) {
- return false;
- }
-
- if ((v3d->camera == NULL) || (v3d->camera->type != OB_CAMERA) || rv3d->persp != RV3D_CAMOB) {
- return false;
- }
-
- switch (v3d->stereo3d_camera) {
- case STEREO_MONO_ID:
- return false;
- break;
- case STEREO_3D_ID:
- /* win will be NULL when calling this from the selection or draw loop. */
- if ((win == NULL) || (WM_stereo3d_enabled(win, true) == false)) {
- return false;
- }
- if (((scene->r.views_format & SCE_VIEWS_FORMAT_MULTIVIEW) != 0) &&
- !BKE_scene_multiview_is_stereo3d(&scene->r))
- {
- return false;
- }
- break;
- /* We always need the stereo calculation for left and right cameras. */
- case STEREO_LEFT_ID:
- case STEREO_RIGHT_ID:
- default:
- break;
- }
- return true;
+ draw_selected_name(scene, ob, object_mode, rect);
}
-/* setup the view and win matrices for the multiview cameras
- *
- * unlike view3d_stereo3d_setup_offscreen, when view3d_stereo3d_setup is called
- * we have no winmatrix (i.e., projection matrix) defined at that time.
- * Since the camera and the camera shift are needed for the winmat calculation
- * we do a small hack to replace it temporarily so we don't need to change the
- * view3d)main_region_setup_view() code to account for that.
- */
-static void view3d_stereo3d_setup(Scene *scene, View3D *v3d, ARegion *ar, const rcti *rect)
+void VP_legacy_drawgrid(UnitSettings *unit, ARegion *ar, View3D *v3d, const char **grid_unit)
{
- bool is_left;
- const char *names[2] = {STEREO_LEFT_NAME, STEREO_RIGHT_NAME};
- const char *viewname;
-
- /* show only left or right camera */
- if (v3d->stereo3d_camera != STEREO_3D_ID)
- v3d->multiview_eye = v3d->stereo3d_camera;
-
- is_left = v3d->multiview_eye == STEREO_LEFT_ID;
- viewname = names[is_left ? STEREO_LEFT_ID : STEREO_RIGHT_ID];
-
- /* update the viewport matrices with the new camera */
- if (scene->r.views_format == SCE_VIEWS_FORMAT_STEREO_3D) {
- Camera *data;
- float viewmat[4][4];
- float shiftx;
-
- data = (Camera *)v3d->camera->data;
- shiftx = data->shiftx;
-
- BLI_lock_thread(LOCK_VIEW3D);
- data->shiftx = BKE_camera_multiview_shift_x(&scene->r, v3d->camera, viewname);
-
- BKE_camera_multiview_view_matrix(&scene->r, v3d->camera, is_left, viewmat);
- view3d_main_region_setup_view(scene, v3d, ar, viewmat, NULL, rect);
-
- data->shiftx = shiftx;
- BLI_unlock_thread(LOCK_VIEW3D);
- }
- else { /* SCE_VIEWS_FORMAT_MULTIVIEW */
- float viewmat[4][4];
- Object *view_ob = v3d->camera;
- Object *camera = BKE_camera_multiview_render(scene, v3d->camera, viewname);
-
- BLI_lock_thread(LOCK_VIEW3D);
- v3d->camera = camera;
-
- BKE_camera_multiview_view_matrix(&scene->r, camera, false, viewmat);
- view3d_main_region_setup_view(scene, v3d, ar, viewmat, NULL, rect);
-
- v3d->camera = view_ob;
- BLI_unlock_thread(LOCK_VIEW3D);
- }
+ drawgrid(unit, ar, v3d, grid_unit);
}
-static void view3d_stereo3d_setup_offscreen(Scene *scene, View3D *v3d, ARegion *ar,
- float winmat[4][4], const char *viewname)
+void VP_legacy_drawfloor(Scene *scene, View3D *v3d, const char **grid_unit, bool write_depth)
{
- /* update the viewport matrices with the new camera */
- if (scene->r.views_format == SCE_VIEWS_FORMAT_STEREO_3D) {
- float viewmat[4][4];
- const bool is_left = STREQ(viewname, STEREO_LEFT_NAME);
-
- BKE_camera_multiview_view_matrix(&scene->r, v3d->camera, is_left, viewmat);
- view3d_main_region_setup_view(scene, v3d, ar, viewmat, winmat, NULL);
- }
- else { /* SCE_VIEWS_FORMAT_MULTIVIEW */
- float viewmat[4][4];
- Object *camera = BKE_camera_multiview_render(scene, v3d->camera, viewname);
-
- BKE_camera_multiview_view_matrix(&scene->r, camera, false, viewmat);
- view3d_main_region_setup_view(scene, v3d, ar, viewmat, winmat, NULL);
- }
+ drawfloor(scene, v3d, grid_unit, write_depth);
}
-#ifdef WITH_GAMEENGINE
-static void update_lods(Scene *scene, float camera_pos[3])
+void VP_legacy_view3d_main_region_setup_view(
+ const EvaluationContext *eval_ctx, Scene *scene, View3D *v3d,
+ ARegion *ar, float viewmat[4][4], float winmat[4][4])
{
- Scene *sce_iter;
- Base *base;
- Object *ob;
-
- for (SETLOOPER(scene, sce_iter, base)) {
- ob = base->object;
- BKE_object_lod_update(ob, camera_pos);
- }
+ view3d_main_region_setup_view(eval_ctx, scene, v3d, ar, viewmat, winmat, NULL);
}
-#endif
-static void view3d_main_region_draw_objects(const bContext *C, Scene *scene, View3D *v3d,
- ARegion *ar, const char **grid_unit)
+bool VP_legacy_view3d_stereo3d_active(wmWindow *win, Scene *scene, View3D *v3d, RegionView3D *rv3d)
{
- wmWindow *win = CTX_wm_window(C);
- RegionView3D *rv3d = ar->regiondata;
- unsigned int lay_used = v3d->lay_used;
-
- /* post processing */
- bool do_compositing = false;
-
- /* shadow buffers, before we setup matrices */
- if (draw_glsl_material(scene, NULL, v3d, v3d->drawtype))
- gpu_update_lamps_shadows_world(scene, v3d);
-
- /* reset default OpenGL lights if needed (i.e. after preferences have been altered) */
- if (rv3d->rflag & RV3D_GPULIGHT_UPDATE) {
- rv3d->rflag &= ~RV3D_GPULIGHT_UPDATE;
- GPU_default_lights();
- }
-
- /* Setup the view matrix. */
- ED_view3d_draw_setup_view(CTX_wm_window(C), scene, ar, v3d, NULL, NULL, NULL);
-
- rv3d->rflag &= ~RV3D_IS_GAME_ENGINE;
-#ifdef WITH_GAMEENGINE
- if (STREQ(scene->r.engine, RE_engine_id_BLENDER_GAME)) {
- rv3d->rflag |= RV3D_IS_GAME_ENGINE;
-
- /* Make sure LoDs are up to date */
- update_lods(scene, rv3d->viewinv[3]);
- }
-#endif
-
- /* framebuffer fx needed, we need to draw offscreen first */
- if (v3d->fx_settings.fx_flag && v3d->drawtype >= OB_SOLID) {
- GPUFXSettings fx_settings;
- BKE_screen_gpu_fx_validate(&v3d->fx_settings);
- fx_settings = v3d->fx_settings;
- if (!rv3d->compositor)
- rv3d->compositor = GPU_fx_compositor_create();
-
- if (rv3d->persp == RV3D_CAMOB && v3d->camera)
- BKE_camera_to_gpu_dof(v3d->camera, &fx_settings);
- else {
- fx_settings.dof = NULL;
- }
-
- do_compositing = GPU_fx_compositor_initialize_passes(rv3d->compositor, &ar->winrct, &ar->drawrct, &fx_settings);
- }
-
- /* clear the background */
- view3d_main_region_clear(scene, v3d, ar);
-
- /* enables anti-aliasing for 3D view drawing */
- if (win->multisamples != USER_MULTISAMPLE_NONE) {
- glEnable(GL_MULTISAMPLE);
- }
-
- /* main drawing call */
- view3d_draw_objects(C, scene, v3d, ar, grid_unit, true, false, do_compositing ? rv3d->compositor : NULL);
-
- /* post process */
- if (do_compositing) {
- GPU_fx_do_composite_pass(rv3d->compositor, rv3d->winmat, rv3d->is_persp, scene, NULL);
- }
-
- /* Disable back anti-aliasing */
- if (win->multisamples != USER_MULTISAMPLE_NONE) {
- glDisable(GL_MULTISAMPLE);
- }
-
- if (v3d->lay_used != lay_used) { /* happens when loading old files or loading with UI load */
- /* find header and force tag redraw */
- ScrArea *sa = CTX_wm_area(C);
- ARegion *ar_header = BKE_area_find_region_type(sa, RGN_TYPE_HEADER);
- ED_region_tag_redraw(ar_header); /* can be NULL */
- }
-
- if ((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) {
- BDR_drawSketch(C);
- }
-
-#ifdef WITH_INPUT_NDOF
- if ((U.ndof_flag & NDOF_SHOW_GUIDE) && ((rv3d->viewlock & RV3D_LOCKED) == 0) && (rv3d->persp != RV3D_CAMOB))
- /* TODO: draw something else (but not this) during fly mode */
- draw_rotation_guide(rv3d);
-#endif
+ return view3d_stereo3d_active(win, scene, v3d, rv3d);
}
-static bool is_cursor_visible(Scene *scene)
+void VP_legacy_view3d_stereo3d_setup(const EvaluationContext *eval_ctx, Scene *scene, View3D *v3d, ARegion *ar)
{
- if (U.app_flag & USER_APP_VIEW3D_HIDE_CURSOR) {
- return false;
- }
-
- Object *ob = OBACT;
-
- /* don't draw cursor in paint modes, but with a few exceptions */
- if (ob && ob->mode & OB_MODE_ALL_PAINT) {
- /* exception: object is in weight paint and has deforming armature in pose mode */
- if (ob->mode & OB_MODE_WEIGHT_PAINT) {
- if (BKE_object_pose_armature_get(ob) != NULL) {
- return true;
- }
- }
- /* exception: object in texture paint mode, clone brush, use_clone_layer disabled */
- else if (ob->mode & OB_MODE_TEXTURE_PAINT) {
- const Paint *p = BKE_paint_get_active(scene);
-
- if (p && p->brush && p->brush->imagepaint_tool == PAINT_TOOL_CLONE) {
- if ((scene->toolsettings->imapaint.flag & IMAGEPAINT_PROJECT_LAYER_CLONE) == 0) {
- return true;
- }
- }
- }
-
- /* no exception met? then don't draw cursor! */
- return false;
- }
-
- return true;
+ view3d_stereo3d_setup(eval_ctx, scene, v3d, ar, NULL);
}
-static void view3d_main_region_draw_info(const bContext *C, Scene *scene,
- ARegion *ar, View3D *v3d,
- const char *grid_unit, bool render_border)
+bool VP_legacy_use_depth(Scene *scene, View3D *v3d)
{
- wmWindowManager *wm = CTX_wm_manager(C);
- RegionView3D *rv3d = ar->regiondata;
- rcti rect;
-
- /* local coordinate visible rect inside region, to accomodate overlapping ui */
- ED_region_visible_rect(ar, &rect);
-
- if (rv3d->persp == RV3D_CAMOB) {
- drawviewborder(scene, ar, v3d);
- }
- else if (v3d->flag2 & V3D_RENDER_BORDER) {
- glLineWidth(1.0f);
- setlinestyle(3);
- cpack(0x4040FF);
-
- sdrawbox(v3d->render_border.xmin * ar->winx, v3d->render_border.ymin * ar->winy,
- v3d->render_border.xmax * ar->winx, v3d->render_border.ymax * ar->winy);
-
- setlinestyle(0);
- }
-
- if (v3d->flag2 & V3D_SHOW_GPENCIL) {
- /* draw grease-pencil stuff - needed to get paint-buffer shown too (since it's 2D) */
- ED_gpencil_draw_view3d(wm, scene, v3d, ar, false);
- }
-
- if ((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) {
- Object *ob;
-
- /* 3d cursor */
- if (is_cursor_visible(scene)) {
- drawcursor(scene, ar, v3d);
- }
-
- if (U.uiflag & USER_SHOW_ROTVIEWICON)
- draw_view_axis(rv3d, &rect);
- else
- draw_view_icon(rv3d, &rect);
-
- ob = OBACT;
- if (U.uiflag & USER_DRAWVIEWINFO)
- draw_selected_name(scene, ob, &rect);
- }
-
- if (rv3d->render_engine) {
- view3d_main_region_draw_engine_info(v3d, rv3d, ar, render_border);
- return;
- }
-
- if ((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) {
- if ((U.uiflag & USER_SHOW_FPS) && ED_screen_animation_no_scrub(wm)) {
- ED_scene_draw_fps(scene, &rect);
- }
- else if (U.uiflag & USER_SHOW_VIEWPORTNAME) {
- draw_viewport_name(ar, v3d, &rect);
- }
-
- if (grid_unit) { /* draw below the viewport name */
- char numstr[32] = "";
-
- UI_ThemeColor(TH_TEXT_HI);
- if (v3d->grid != 1.0f) {
- BLI_snprintf(numstr, sizeof(numstr), "%s x %.4g", grid_unit, v3d->grid);
- }
-
- BLF_draw_default_ascii(rect.xmin + U.widget_unit,
- rect.ymax - (USER_SHOW_VIEWPORTNAME ? 2 * U.widget_unit : U.widget_unit), 0.0f,
- numstr[0] ? numstr : grid_unit, sizeof(numstr));
- }
- }
+ return use_depth_doit(scene, v3d);
}
-void view3d_main_region_draw(const bContext *C, ARegion *ar)
+void VP_drawviewborder(Scene *scene, const struct Depsgraph *depsgraph, ARegion *ar, View3D *v3d)
{
- Scene *scene = CTX_data_scene(C);
- View3D *v3d = CTX_wm_view3d(C);
- const char *grid_unit = NULL;
- rcti border_rect;
- bool render_border, clip_border;
-
- /* if we only redraw render border area, skip opengl draw and also
- * don't do scissor because it's already set */
- render_border = ED_view3d_calc_render_border(scene, v3d, ar, &border_rect);
- clip_border = (render_border && !BLI_rcti_compare(&ar->drawrct, &border_rect));
-
- /* draw viewport using opengl */
- if (v3d->drawtype != OB_RENDER || !view3d_main_region_do_render_draw(scene) || clip_border) {
- view3d_main_region_draw_objects(C, scene, v3d, ar, &grid_unit);
-
-#ifdef DEBUG_DRAW
- bl_debug_draw();
-#endif
- if (G.debug & G_DEBUG_SIMDATA)
- draw_sim_debug_data(scene, v3d, ar);
-
- ED_region_pixelspace(ar);
- }
-
- /* draw viewport using external renderer */
- if (v3d->drawtype == OB_RENDER)
- view3d_main_region_draw_engine(C, scene, ar, v3d, clip_border, &border_rect);
-
- view3d_main_region_draw_info(C, scene, ar, v3d, grid_unit, render_border);
-
- v3d->flag |= V3D_INVALID_BACKBUF;
-
- BLI_assert(BLI_listbase_is_empty(&v3d->afterdraw_transp));
- BLI_assert(BLI_listbase_is_empty(&v3d->afterdraw_xray));
- BLI_assert(BLI_listbase_is_empty(&v3d->afterdraw_xraytransp));
+ drawviewborder(scene, depsgraph, ar, v3d);
}
-#ifdef DEBUG_DRAW
-/* debug drawing */
-#define _DEBUG_DRAW_QUAD_TOT 1024
-#define _DEBUG_DRAW_EDGE_TOT 1024
-static float _bl_debug_draw_quads[_DEBUG_DRAW_QUAD_TOT][4][3];
-static int _bl_debug_draw_quads_tot = 0;
-static float _bl_debug_draw_edges[_DEBUG_DRAW_QUAD_TOT][2][3];
-static int _bl_debug_draw_edges_tot = 0;
-static unsigned int _bl_debug_draw_quads_color[_DEBUG_DRAW_QUAD_TOT];
-static unsigned int _bl_debug_draw_edges_color[_DEBUG_DRAW_EDGE_TOT];
-static unsigned int _bl_debug_draw_color;
-
-void bl_debug_draw_quad_clear(void)
-{
- _bl_debug_draw_quads_tot = 0;
- _bl_debug_draw_edges_tot = 0;
- _bl_debug_draw_color = 0x00FF0000;
-}
-void bl_debug_color_set(const unsigned int color)
+void VP_drawrenderborder(ARegion *ar, View3D *v3d)
{
- _bl_debug_draw_color = color;
+ drawrenderborder(ar, v3d);
}
-void bl_debug_draw_quad_add(const float v0[3], const float v1[3], const float v2[3], const float v3[3])
+
+void VP_view3d_draw_background_none(void)
{
- if (_bl_debug_draw_quads_tot >= _DEBUG_DRAW_QUAD_TOT) {
- printf("%s: max quad count hit %d!", __func__, _bl_debug_draw_quads_tot);
+ if (UI_GetThemeValue(TH_SHOW_BACK_GRAD)) {
+ view3d_draw_background_gradient();
}
else {
- float *pt = &_bl_debug_draw_quads[_bl_debug_draw_quads_tot][0][0];
- copy_v3_v3(pt, v0); pt += 3;
- copy_v3_v3(pt, v1); pt += 3;
- copy_v3_v3(pt, v2); pt += 3;
- copy_v3_v3(pt, v3); pt += 3;
- _bl_debug_draw_quads_color[_bl_debug_draw_quads_tot] = _bl_debug_draw_color;
- _bl_debug_draw_quads_tot++;
+ view3d_draw_background_none();
}
}
-void bl_debug_draw_edge_add(const float v0[3], const float v1[3])
+
+void VP_view3d_draw_background_world(Scene *scene, RegionView3D *rv3d)
{
- if (_bl_debug_draw_quads_tot >= _DEBUG_DRAW_EDGE_TOT) {
- printf("%s: max edge count hit %d!", __func__, _bl_debug_draw_edges_tot);
- }
- else {
- float *pt = &_bl_debug_draw_edges[_bl_debug_draw_edges_tot][0][0];
- copy_v3_v3(pt, v0); pt += 3;
- copy_v3_v3(pt, v1); pt += 3;
- _bl_debug_draw_edges_color[_bl_debug_draw_edges_tot] = _bl_debug_draw_color;
- _bl_debug_draw_edges_tot++;
- }
+ view3d_draw_background_world(scene, rv3d);
}
-static void bl_debug_draw(void)
+
+void VP_view3d_main_region_clear(Scene *scene, View3D *v3d, ARegion *ar)
{
- unsigned int color;
- if (_bl_debug_draw_quads_tot) {
- int i;
- color = _bl_debug_draw_quads_color[0];
- cpack(color);
- for (i = 0; i < _bl_debug_draw_quads_tot; i ++) {
- if (_bl_debug_draw_quads_color[i] != color) {
- color = _bl_debug_draw_quads_color[i];
- cpack(color);
- }
- glBegin(GL_LINE_LOOP);
- glVertex3fv(_bl_debug_draw_quads[i][0]);
- glVertex3fv(_bl_debug_draw_quads[i][1]);
- glVertex3fv(_bl_debug_draw_quads[i][2]);
- glVertex3fv(_bl_debug_draw_quads[i][3]);
- glEnd();
- }
- }
- if (_bl_debug_draw_edges_tot) {
- int i;
- color = _bl_debug_draw_edges_color[0];
- cpack(color);
- glBegin(GL_LINES);
- for (i = 0; i < _bl_debug_draw_edges_tot; i ++) {
- if (_bl_debug_draw_edges_color[i] != color) {
- color = _bl_debug_draw_edges_color[i];
- cpack(color);
- }
- glVertex3fv(_bl_debug_draw_edges[i][0]);
- glVertex3fv(_bl_debug_draw_edges[i][1]);
- }
- glEnd();
- color = _bl_debug_draw_edges_color[0];
- cpack(color);
- glPointSize(4.0);
- glBegin(GL_POINTS);
- for (i = 0; i < _bl_debug_draw_edges_tot; i ++) {
- if (_bl_debug_draw_edges_color[i] != color) {
- color = _bl_debug_draw_edges_color[i];
- cpack(color);
- }
- glVertex3fv(_bl_debug_draw_edges[i][0]);
- glVertex3fv(_bl_debug_draw_edges[i][1]);
- }
- glEnd();
- }
+ view3d_main_region_clear(scene, v3d, ar);
}
-#endif
+
+/** \} */
diff --git a/source/blender/editors/space_view3d/view3d_draw_legacy.c b/source/blender/editors/space_view3d/view3d_draw_legacy.c
new file mode 100644
index 00000000000..0b85ac47781
--- /dev/null
+++ b/source/blender/editors/space_view3d/view3d_draw_legacy.c
@@ -0,0 +1,2195 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2008 Blender Foundation.
+ * All rights reserved.
+ *
+ *
+ * Contributor(s): Blender Foundation
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/editors/space_view3d/view3d_draw_legacy.c
+ * \ingroup spview3d
+ */
+
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+#include "DNA_armature_types.h"
+#include "DNA_camera_types.h"
+#include "DNA_customdata_types.h"
+#include "DNA_object_types.h"
+#include "DNA_group_types.h"
+#include "DNA_mesh_types.h"
+#include "DNA_key_types.h"
+#include "DNA_lamp_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_world_types.h"
+#include "DNA_brush_types.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_blenlib.h"
+#include "BLI_math.h"
+#include "BLI_jitter.h"
+#include "BLI_utildefines.h"
+#include "BLI_endian_switch.h"
+#include "BLI_threads.h"
+
+#include "BKE_anim.h"
+#include "BKE_camera.h"
+#include "BKE_context.h"
+#include "BKE_customdata.h"
+#include "BKE_DerivedMesh.h"
+#include "BKE_image.h"
+#include "BKE_key.h"
+#include "BKE_layer.h"
+#include "BKE_main.h"
+#include "BKE_object.h"
+#include "BKE_global.h"
+#include "BKE_paint.h"
+#include "BKE_scene.h"
+#include "BKE_screen.h"
+#include "BKE_unit.h"
+#include "BKE_movieclip.h"
+
+#include "DEG_depsgraph.h"
+
+#include "IMB_imbuf_types.h"
+#include "IMB_imbuf.h"
+#include "IMB_colormanagement.h"
+
+#include "BIF_glutil.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "BLF_api.h"
+#include "BLT_translation.h"
+
+#include "ED_armature.h"
+#include "ED_keyframing.h"
+#include "ED_gpencil.h"
+#include "ED_screen.h"
+#include "ED_space_api.h"
+#include "ED_screen_types.h"
+#include "ED_transform.h"
+
+#include "UI_interface.h"
+#include "UI_interface_icons.h"
+#include "UI_resources.h"
+
+#include "GPU_draw.h"
+#include "GPU_framebuffer.h"
+#include "GPU_lamp.h"
+#include "GPU_material.h"
+#include "GPU_compositing.h"
+#include "GPU_extensions.h"
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+#include "GPU_select.h"
+#include "GPU_matrix.h"
+
+#include "RE_engine.h"
+
+#include "DRW_engine.h"
+
+#include "view3d_intern.h" /* own include */
+
+/* ********* custom clipping *********** */
+
+static void view3d_draw_clipping(RegionView3D *rv3d)
+{
+ BoundBox *bb = rv3d->clipbb;
+
+ if (bb) {
+ const unsigned int clipping_index[6][4] = {
+ {0, 1, 2, 3},
+ {0, 4, 5, 1},
+ {4, 7, 6, 5},
+ {7, 3, 2, 6},
+ {1, 5, 6, 2},
+ {7, 4, 0, 3}
+ };
+
+ /* fill in zero alpha for rendering & re-projection [#31530] */
+ unsigned char col[4];
+ UI_GetThemeColor4ubv(TH_V3D_CLIPPING_BORDER, col);
+ glColor4ubv(col);
+
+ glEnable(GL_BLEND);
+ glEnableClientState(GL_VERTEX_ARRAY);
+ glVertexPointer(3, GL_FLOAT, 0, bb->vec);
+ glDrawElements(GL_QUADS, sizeof(clipping_index) / sizeof(unsigned int), GL_UNSIGNED_INT, clipping_index);
+ glDisableClientState(GL_VERTEX_ARRAY);
+ glDisable(GL_BLEND);
+ }
+}
+
+void ED_view3d_clipping_set(RegionView3D *rv3d)
+{
+ double plane[4];
+ const unsigned int tot = (rv3d->viewlock & RV3D_BOXCLIP) ? 4 : 6;
+
+ for (unsigned a = 0; a < tot; a++) {
+ copy_v4db_v4fl(plane, rv3d->clip[a]);
+ glClipPlane(GL_CLIP_PLANE0 + a, plane);
+ glEnable(GL_CLIP_PLANE0 + a);
+ }
+}
+
+/* use these to temp disable/enable clipping when 'rv3d->rflag & RV3D_CLIPPING' is set */
+void ED_view3d_clipping_disable(void)
+{
+ for (unsigned a = 0; a < 6; a++) {
+ glDisable(GL_CLIP_PLANE0 + a);
+ }
+}
+void ED_view3d_clipping_enable(void)
+{
+ for (unsigned a = 0; a < 6; a++) {
+ glEnable(GL_CLIP_PLANE0 + a);
+ }
+}
+
+static bool view3d_clipping_test(const float co[3], const float clip[6][4])
+{
+ if (plane_point_side_v3(clip[0], co) > 0.0f)
+ if (plane_point_side_v3(clip[1], co) > 0.0f)
+ if (plane_point_side_v3(clip[2], co) > 0.0f)
+ if (plane_point_side_v3(clip[3], co) > 0.0f)
+ return false;
+
+ return true;
+}
+
+/* for 'local' ED_view3d_clipping_local must run first
+ * then all comparisons can be done in localspace */
+bool ED_view3d_clipping_test(const RegionView3D *rv3d, const float co[3], const bool is_local)
+{
+ return view3d_clipping_test(co, is_local ? rv3d->clip_local : rv3d->clip);
+}
+
+/* ********* end custom clipping *********** */
+
+static void draw_view_icon(RegionView3D *rv3d, rcti *rect)
+{
+ BIFIconID icon;
+
+ if (ELEM(rv3d->view, RV3D_VIEW_TOP, RV3D_VIEW_BOTTOM))
+ icon = ICON_AXIS_TOP;
+ else if (ELEM(rv3d->view, RV3D_VIEW_FRONT, RV3D_VIEW_BACK))
+ icon = ICON_AXIS_FRONT;
+ else if (ELEM(rv3d->view, RV3D_VIEW_RIGHT, RV3D_VIEW_LEFT))
+ icon = ICON_AXIS_SIDE;
+ else return;
+
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
+ UI_icon_draw(5.0 + rect->xmin, 5.0 + rect->ymin, icon);
+
+ glDisable(GL_BLEND);
+}
+
+/* *********************** backdraw for selection *************** */
+
+static void backdrawview3d(
+ const struct EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer,
+ wmWindow *win, ARegion *ar, View3D *v3d)
+{
+ RegionView3D *rv3d = ar->regiondata;
+ struct Base *base = view_layer->basact;
+ int multisample_enabled;
+
+ BLI_assert(ar->regiontype == RGN_TYPE_WINDOW);
+
+ if (base && (eval_ctx->object_mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT) ||
+ BKE_paint_select_face_test(base->object, eval_ctx->object_mode)))
+ {
+ /* do nothing */
+ }
+ /* texture paint mode sampling */
+ else if (base && (eval_ctx->object_mode & OB_MODE_TEXTURE_PAINT) &&
+ (v3d->drawtype > OB_WIRE))
+ {
+ /* do nothing */
+ }
+ else if ((base && (eval_ctx->object_mode & OB_MODE_PARTICLE_EDIT)) &&
+ V3D_IS_ZBUF(v3d))
+ {
+ /* do nothing */
+ }
+ else if (scene->obedit &&
+ V3D_IS_ZBUF(v3d))
+ {
+ /* do nothing */
+ }
+ else {
+ v3d->flag &= ~V3D_INVALID_BACKBUF;
+ return;
+ }
+
+ if (!(v3d->flag & V3D_INVALID_BACKBUF))
+ return;
+
+#if 0
+ if (test) {
+ if (qtest()) {
+ addafterqueue(ar->win, BACKBUFDRAW, 1);
+ return;
+ }
+ }
+#endif
+
+ if (v3d->drawtype > OB_WIRE) v3d->zbuf = true;
+
+ /* dithering and AA break color coding, so disable */
+ glDisable(GL_DITHER);
+
+ multisample_enabled = glIsEnabled(GL_MULTISAMPLE);
+ if (multisample_enabled)
+ glDisable(GL_MULTISAMPLE);
+
+ if (win->multisamples != USER_MULTISAMPLE_NONE) {
+ /* for multisample we use an offscreen FBO. multisample drawing can fail
+ * with color coded selection drawing, and reading back depths from such
+ * a buffer can also cause a few seconds freeze on OS X / NVidia. */
+ int w = BLI_rcti_size_x(&ar->winrct);
+ int h = BLI_rcti_size_y(&ar->winrct);
+ char error[256];
+
+ if (rv3d->gpuoffscreen) {
+ if (GPU_offscreen_width(rv3d->gpuoffscreen) != w ||
+ GPU_offscreen_height(rv3d->gpuoffscreen) != h)
+ {
+ GPU_offscreen_free(rv3d->gpuoffscreen);
+ rv3d->gpuoffscreen = NULL;
+ }
+ }
+
+ if (!rv3d->gpuoffscreen) {
+ rv3d->gpuoffscreen = GPU_offscreen_create(w, h, 0, false, error);
+
+ if (!rv3d->gpuoffscreen)
+ fprintf(stderr, "Failed to create offscreen selection buffer for multisample: %s\n", error);
+ }
+ }
+
+ if (rv3d->gpuoffscreen)
+ GPU_offscreen_bind(rv3d->gpuoffscreen, true);
+ else
+ glScissor(ar->winrct.xmin, ar->winrct.ymin, BLI_rcti_size_x(&ar->winrct), BLI_rcti_size_y(&ar->winrct));
+
+ glClearColor(0.0, 0.0, 0.0, 0.0);
+ if (v3d->zbuf) {
+ glEnable(GL_DEPTH_TEST);
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+ }
+ else {
+ glClear(GL_COLOR_BUFFER_BIT);
+ glDisable(GL_DEPTH_TEST);
+ }
+
+ if (rv3d->rflag & RV3D_CLIPPING)
+ ED_view3d_clipping_set(rv3d);
+
+ G.f |= G_BACKBUFSEL;
+
+ if (base && ((base->flag & BASE_VISIBLED) != 0))
+ draw_object_backbufsel(eval_ctx, scene, v3d, rv3d, base->object);
+
+ if (rv3d->gpuoffscreen)
+ GPU_offscreen_unbind(rv3d->gpuoffscreen, true);
+ else
+ ar->swap = 0; /* mark invalid backbuf for wm draw */
+
+ v3d->flag &= ~V3D_INVALID_BACKBUF;
+
+ G.f &= ~G_BACKBUFSEL;
+ v3d->zbuf = false;
+ glDisable(GL_DEPTH_TEST);
+ glEnable(GL_DITHER);
+ if (multisample_enabled)
+ glEnable(GL_MULTISAMPLE);
+
+ if (rv3d->rflag & RV3D_CLIPPING)
+ ED_view3d_clipping_disable();
+}
+
+void view3d_opengl_read_pixels(ARegion *ar, int x, int y, int w, int h, int format, int type, void *data)
+{
+ RegionView3D *rv3d = ar->regiondata;
+
+ if (rv3d->gpuoffscreen) {
+ GPU_offscreen_bind(rv3d->gpuoffscreen, true);
+ glReadBuffer(GL_COLOR_ATTACHMENT0);
+ glReadPixels(x, y, w, h, format, type, data);
+ GPU_offscreen_unbind(rv3d->gpuoffscreen, true);
+ }
+ else {
+ glReadPixels(ar->winrct.xmin + x, ar->winrct.ymin + y, w, h, format, type, data);
+ }
+}
+
+/* XXX depth reading exception, for code not using gpu offscreen */
+static void view3d_opengl_read_Z_pixels(ARegion *ar, int x, int y, int w, int h, int format, int type, void *data)
+{
+ glReadPixels(ar->winrct.xmin + x, ar->winrct.ymin + y, w, h, format, type, data);
+}
+
+void ED_view3d_backbuf_validate(const struct EvaluationContext *eval_ctx, ViewContext *vc)
+{
+ if (vc->v3d->flag & V3D_INVALID_BACKBUF) {
+ backdrawview3d(eval_ctx, vc->scene, vc->view_layer, vc->win, vc->ar, vc->v3d);
+ }
+}
+
+/**
+ * allow for small values [0.5 - 2.5],
+ * and large values, FLT_MAX by clamping by the area size
+ */
+int ED_view3d_backbuf_sample_size_clamp(ARegion *ar, const float dist)
+{
+ return (int)min_ff(ceilf(dist), (float)max_ii(ar->winx, ar->winx));
+}
+
+/* samples a single pixel (copied from vpaint) */
+unsigned int ED_view3d_backbuf_sample(
+ const EvaluationContext *eval_ctx, ViewContext *vc, int x, int y)
+{
+ if (x >= vc->ar->winx || y >= vc->ar->winy) {
+ return 0;
+ }
+
+ ED_view3d_backbuf_validate(eval_ctx, vc);
+
+ unsigned int col;
+ view3d_opengl_read_pixels(vc->ar, x, y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, &col);
+ glReadBuffer(GL_BACK);
+
+ if (ENDIAN_ORDER == B_ENDIAN) {
+ BLI_endian_switch_uint32(&col);
+ }
+
+ return GPU_select_to_index(col);
+}
+
+/* reads full rect, converts indices */
+ImBuf *ED_view3d_backbuf_read(
+ const EvaluationContext *eval_ctx, ViewContext *vc, int xmin, int ymin, int xmax, int ymax)
+{
+ /* clip */
+ const rcti clip = {
+ max_ii(xmin, 0), min_ii(xmax, vc->ar->winx - 1),
+ max_ii(ymin, 0), min_ii(ymax, vc->ar->winy - 1)};
+ const int size_clip[2] = {
+ BLI_rcti_size_x(&clip) + 1,
+ BLI_rcti_size_y(&clip) + 1};
+
+ if (UNLIKELY((clip.xmin > clip.xmax) ||
+ (clip.ymin > clip.ymax)))
+ {
+ return NULL;
+ }
+
+ ImBuf *ibuf_clip = IMB_allocImBuf(size_clip[0], size_clip[1], 32, IB_rect);
+
+ ED_view3d_backbuf_validate(eval_ctx, vc);
+
+ view3d_opengl_read_pixels(vc->ar, clip.xmin, clip.ymin, size_clip[0], size_clip[1], GL_RGBA, GL_UNSIGNED_BYTE, ibuf_clip->rect);
+
+ glReadBuffer(GL_BACK);
+
+ if (ENDIAN_ORDER == B_ENDIAN) {
+ IMB_convert_rgba_to_abgr(ibuf_clip);
+ }
+
+ GPU_select_to_index_array(ibuf_clip->rect, size_clip[0] * size_clip[1]);
+
+ if ((clip.xmin == xmin) &&
+ (clip.xmax == xmax) &&
+ (clip.ymin == ymin) &&
+ (clip.ymax == ymax))
+ {
+ return ibuf_clip;
+ }
+ else {
+ /* put clipped result into a non-clipped buffer */
+ const int size[2] = {
+ (xmax - xmin + 1),
+ (ymax - ymin + 1)};
+
+ ImBuf *ibuf_full = IMB_allocImBuf(size[0], size[1], 32, IB_rect);
+
+ IMB_rectcpy(
+ ibuf_full, ibuf_clip,
+ clip.xmin - xmin, clip.ymin - ymin,
+ 0, 0,
+ size_clip[0], size_clip[1]);
+ IMB_freeImBuf(ibuf_clip);
+ return ibuf_full;
+ }
+}
+
+/* smart function to sample a rect spiralling outside, nice for backbuf selection */
+unsigned int ED_view3d_backbuf_sample_rect(
+ const EvaluationContext *eval_ctx, ViewContext *vc, const int mval[2], int size,
+ unsigned int min, unsigned int max, float *r_dist)
+{
+ int dirvec[4][2];
+
+ const int amount = (size - 1) / 2;
+
+ const int minx = mval[0] - (amount + 1);
+ const int miny = mval[1] - (amount + 1);
+ ImBuf *buf = ED_view3d_backbuf_read(eval_ctx, vc, minx, miny, minx + size - 1, miny + size - 1);
+ if (!buf) return 0;
+
+ unsigned index = 0;
+ int rc = 0;
+
+ dirvec[0][0] = 1; dirvec[0][1] = 0;
+ dirvec[1][0] = 0; dirvec[1][1] = -size;
+ dirvec[2][0] = -1; dirvec[2][1] = 0;
+ dirvec[3][0] = 0; dirvec[3][1] = size;
+
+ const unsigned *bufmin = buf->rect;
+ const unsigned *tbuf = buf->rect;
+ const unsigned *bufmax = buf->rect + size * size;
+ tbuf += amount * size + amount;
+
+ for (int nr = 1; nr <= size; nr++) {
+ for (int a = 0; a < 2; a++) {
+ for (int b = 0; b < nr; b++) {
+ if (*tbuf && *tbuf >= min && *tbuf < max) {
+ /* we got a hit */
+
+ /* get x,y pixel coords from the offset
+ * (manhatten distance in keeping with other screen-based selection) */
+ *r_dist = (float)(
+ abs(((int)(tbuf - buf->rect) % size) - (size / 2)) +
+ abs(((int)(tbuf - buf->rect) / size) - (size / 2)));
+
+ /* indices start at 1 here */
+ index = (*tbuf - min) + 1;
+ goto exit;
+ }
+
+ tbuf += (dirvec[rc][0] + dirvec[rc][1]);
+
+ if (tbuf < bufmin || tbuf >= bufmax) {
+ goto exit;
+ }
+ }
+ rc++;
+ rc &= 3;
+ }
+ }
+
+exit:
+ IMB_freeImBuf(buf);
+ return index;
+}
+
+
+/* ************************************************************* */
+
+static void view3d_stereo_bgpic_setup(Scene *scene, View3D *v3d, Image *ima, ImageUser *iuser)
+{
+ if (BKE_image_is_stereo(ima)) {
+ iuser->flag |= IMA_SHOW_STEREO;
+
+ if ((scene->r.scemode & R_MULTIVIEW) == 0) {
+ iuser->multiview_eye = STEREO_LEFT_ID;
+ }
+ else if (v3d->stereo3d_camera != STEREO_3D_ID) {
+ /* show only left or right camera */
+ iuser->multiview_eye = v3d->stereo3d_camera;
+ }
+
+ BKE_image_multiview_index(ima, iuser);
+ }
+ else {
+ iuser->flag &= ~IMA_SHOW_STEREO;
+ }
+}
+
+static void view3d_draw_bgpic(Scene *scene, const Depsgraph *depsgraph,
+ ARegion *ar, View3D *v3d,
+ const bool do_foreground, const bool do_camera_frame)
+{
+ RegionView3D *rv3d = ar->regiondata;
+ int fg_flag = do_foreground ? CAM_BGIMG_FLAG_FOREGROUND : 0;
+ if (v3d->camera == NULL || v3d->camera->type != OB_CAMERA) {
+ return;
+ }
+ Camera *cam = v3d->camera->data;
+
+ for (CameraBGImage *bgpic = cam->bg_images.first; bgpic; bgpic = bgpic->next) {
+ bgpic->iuser.scene = scene; /* Needed for render results. */
+
+ if ((bgpic->flag & CAM_BGIMG_FLAG_FOREGROUND) != fg_flag)
+ continue;
+
+ {
+ float image_aspect[2];
+ float x1, y1, x2, y2, centx, centy;
+
+ void *lock;
+
+ Image *ima = NULL;
+
+ /* disable individual images */
+ if ((bgpic->flag & CAM_BGIMG_FLAG_DISABLED))
+ continue;
+
+ ImBuf *ibuf = NULL;
+ ImBuf *freeibuf = NULL;
+ ImBuf *releaseibuf = NULL;
+ if (bgpic->source == CAM_BGIMG_SOURCE_IMAGE) {
+ ima = bgpic->ima;
+ if (ima == NULL)
+ continue;
+ BKE_image_user_frame_calc(&bgpic->iuser, CFRA, 0);
+ if (ima->source == IMA_SRC_SEQUENCE && !(bgpic->iuser.flag & IMA_USER_FRAME_IN_RANGE)) {
+ ibuf = NULL; /* frame is out of range, dont show */
+ }
+ else {
+ view3d_stereo_bgpic_setup(scene, v3d, ima, &bgpic->iuser);
+ ibuf = BKE_image_acquire_ibuf(ima, &bgpic->iuser, &lock);
+ releaseibuf = ibuf;
+ }
+
+ image_aspect[0] = ima->aspx;
+ image_aspect[1] = ima->aspy;
+ }
+ else if (bgpic->source == CAM_BGIMG_SOURCE_MOVIE) {
+ /* TODO: skip drawing when out of frame range (as image sequences do above) */
+ MovieClip *clip = NULL;
+
+ if (bgpic->flag & CAM_BGIMG_FLAG_CAMERACLIP) {
+ if (scene->camera)
+ clip = BKE_object_movieclip_get(scene, scene->camera, true);
+ }
+ else {
+ clip = bgpic->clip;
+ }
+
+ if (clip == NULL)
+ continue;
+
+ BKE_movieclip_user_set_frame(&bgpic->cuser, CFRA);
+ ibuf = BKE_movieclip_get_ibuf(clip, &bgpic->cuser);
+
+ image_aspect[0] = clip->aspx;
+ image_aspect[1] = clip->aspy;
+
+ /* working with ibuf from image and clip has got different workflow now.
+ * ibuf acquired from clip is referenced by cache system and should
+ * be dereferenced after usage. */
+ freeibuf = ibuf;
+ }
+ else {
+ /* perhaps when loading future files... */
+ BLI_assert(0);
+ copy_v2_fl(image_aspect, 1.0f);
+ }
+
+ if (ibuf == NULL)
+ continue;
+
+ if ((ibuf->rect == NULL && ibuf->rect_float == NULL) || ibuf->channels != 4) { /* invalid image format */
+ if (freeibuf)
+ IMB_freeImBuf(freeibuf);
+ if (releaseibuf)
+ BKE_image_release_ibuf(ima, releaseibuf, lock);
+
+ continue;
+ }
+
+ if (ibuf->rect == NULL)
+ IMB_rect_from_float(ibuf);
+
+ BLI_assert(rv3d->persp == RV3D_CAMOB);
+ {
+ if (do_camera_frame) {
+ rctf vb;
+ ED_view3d_calc_camera_border(scene, depsgraph, ar, v3d, rv3d, &vb, false);
+ x1 = vb.xmin;
+ y1 = vb.ymin;
+ x2 = vb.xmax;
+ y2 = vb.ymax;
+ }
+ else {
+ x1 = ar->winrct.xmin;
+ y1 = ar->winrct.ymin;
+ x2 = ar->winrct.xmax;
+ y2 = ar->winrct.ymax;
+ }
+
+ /* apply offset last - camera offset is different to offset in blender units */
+ /* so this has some sane way of working - this matches camera's shift _exactly_ */
+ {
+ const float max_dim = max_ff(x2 - x1, y2 - y1);
+ const float xof_scale = bgpic->offset[0] * max_dim;
+ const float yof_scale = bgpic->offset[1] * max_dim;
+
+ x1 += xof_scale;
+ y1 += yof_scale;
+ x2 += xof_scale;
+ y2 += yof_scale;
+ }
+
+ centx = (x1 + x2) * 0.5f;
+ centy = (y1 + y2) * 0.5f;
+
+ /* aspect correction */
+ if (bgpic->flag & CAM_BGIMG_FLAG_CAMERA_ASPECT) {
+ /* apply aspect from clip */
+ const float w_src = ibuf->x * image_aspect[0];
+ const float h_src = ibuf->y * image_aspect[1];
+
+ /* destination aspect is already applied from the camera frame */
+ const float w_dst = x1 - x2;
+ const float h_dst = y1 - y2;
+
+ const float asp_src = w_src / h_src;
+ const float asp_dst = w_dst / h_dst;
+
+ if (fabsf(asp_src - asp_dst) >= FLT_EPSILON) {
+ if ((asp_src > asp_dst) == ((bgpic->flag & CAM_BGIMG_FLAG_CAMERA_CROP) != 0)) {
+ /* fit X */
+ const float div = asp_src / asp_dst;
+ x1 = ((x1 - centx) * div) + centx;
+ x2 = ((x2 - centx) * div) + centx;
+ }
+ else {
+ /* fit Y */
+ const float div = asp_dst / asp_src;
+ y1 = ((y1 - centy) * div) + centy;
+ y2 = ((y2 - centy) * div) + centy;
+ }
+ }
+ }
+ }
+
+ /* complete clip? */
+ rctf clip_rect;
+ BLI_rctf_init(&clip_rect, x1, x2, y1, y2);
+ if (bgpic->rotation) {
+ BLI_rctf_rotate_expand(&clip_rect, &clip_rect, bgpic->rotation);
+ }
+
+ if (clip_rect.xmax < 0 || clip_rect.ymax < 0 || clip_rect.xmin > ar->winx || clip_rect.ymin > ar->winy) {
+ if (freeibuf)
+ IMB_freeImBuf(freeibuf);
+ if (releaseibuf)
+ BKE_image_release_ibuf(ima, releaseibuf, lock);
+
+ continue;
+ }
+
+ float zoomx = (x2 - x1) / ibuf->x;
+ float zoomy = (y2 - y1) / ibuf->y;
+
+ /* for some reason; zoomlevels down refuses to use GL_ALPHA_SCALE */
+ if (zoomx < 1.0f || zoomy < 1.0f) {
+ float tzoom = min_ff(zoomx, zoomy);
+ int mip = 0;
+
+ if ((ibuf->userflags & IB_MIPMAP_INVALID) != 0) {
+ IMB_remakemipmap(ibuf, 0);
+ ibuf->userflags &= ~IB_MIPMAP_INVALID;
+ }
+ else if (ibuf->mipmap[0] == NULL)
+ IMB_makemipmap(ibuf, 0);
+
+ while (tzoom < 1.0f && mip < 8 && ibuf->mipmap[mip]) {
+ tzoom *= 2.0f;
+ zoomx *= 2.0f;
+ zoomy *= 2.0f;
+ mip++;
+ }
+ if (mip > 0)
+ ibuf = ibuf->mipmap[mip - 1];
+ }
+
+ if (v3d->zbuf) glDisable(GL_DEPTH_TEST);
+ glDepthMask(GL_FALSE);
+
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
+ gpuPushProjectionMatrix();
+ gpuPushMatrix();
+ ED_region_pixelspace(ar);
+
+ gpuTranslate2f(centx, centy);
+ gpuScaleUniform(bgpic->scale);
+ gpuRotate2D(RAD2DEGF(-bgpic->rotation));
+
+ if (bgpic->flag & CAM_BGIMG_FLAG_FLIP_X) {
+ zoomx *= -1.0f;
+ x1 = x2;
+ }
+ if (bgpic->flag & CAM_BGIMG_FLAG_FLIP_Y) {
+ zoomy *= -1.0f;
+ y1 = y2;
+ }
+
+ float col[4] = {1.0f, 1.0f, 1.0f, bgpic->alpha};
+ IMMDrawPixelsTexState state = immDrawPixelsTexSetup(GPU_SHADER_2D_IMAGE_COLOR);
+ immDrawPixelsTex(&state, x1 - centx, y1 - centy, ibuf->x, ibuf->y, GL_RGBA, GL_UNSIGNED_BYTE, GL_LINEAR, ibuf->rect,
+ zoomx, zoomy, col);
+
+ gpuPopProjectionMatrix();
+ gpuPopMatrix();
+
+ glDisable(GL_BLEND);
+
+ glDepthMask(GL_TRUE);
+ if (v3d->zbuf) glEnable(GL_DEPTH_TEST);
+
+ if (freeibuf)
+ IMB_freeImBuf(freeibuf);
+ if (releaseibuf)
+ BKE_image_release_ibuf(ima, releaseibuf, lock);
+ }
+ }
+}
+
+void ED_view3d_draw_bgpic_test(
+ Scene *scene, const Depsgraph *depsgraph,
+ ARegion *ar, View3D *v3d,
+ const bool do_foreground, const bool do_camera_frame)
+{
+ RegionView3D *rv3d = ar->regiondata;
+
+ if ((rv3d->persp == RV3D_CAMOB) && v3d->camera && (v3d->camera->type == OB_CAMERA)) {
+ Camera *cam = v3d->camera->data;
+ if ((cam->flag & CAM_SHOW_BG_IMAGE) == 0) {
+ return;
+ }
+ }
+ else {
+ return;
+ }
+
+ /* disabled - mango request, since footage /w only render is quite useful
+ * and this option is easy to disable all background images at once */
+#if 0
+ if (v3d->flag2 & V3D_RENDER_OVERRIDE)
+ return;
+#endif
+
+ if ((rv3d->view == RV3D_VIEW_USER) || (rv3d->persp != RV3D_ORTHO)) {
+ if (rv3d->persp == RV3D_CAMOB) {
+ view3d_draw_bgpic(scene, depsgraph, ar, v3d, do_foreground, do_camera_frame);
+ }
+ }
+ else {
+ view3d_draw_bgpic(scene, depsgraph, ar, v3d, do_foreground, do_camera_frame);
+ }
+}
+
+/* ****************** View3d afterdraw *************** */
+
+typedef struct View3DAfter {
+ struct View3DAfter *next, *prev;
+ struct Base *base;
+ short dflag;
+} View3DAfter;
+
+/* temp storage of Objects that need to be drawn as last */
+void ED_view3d_after_add(ListBase *lb, Base *base, const short dflag)
+{
+ View3DAfter *v3da = MEM_callocN(sizeof(View3DAfter), "View 3d after");
+ BLI_assert((base->flag_legacy & OB_FROMDUPLI) == 0);
+ BLI_addtail(lb, v3da);
+ v3da->base = base;
+ v3da->dflag = dflag;
+}
+
+/* disables write in zbuffer and draws it over */
+static void view3d_draw_transp(
+ const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, ARegion *ar, View3D *v3d)
+{
+ View3DAfter *v3da;
+
+ glDepthMask(GL_FALSE);
+ v3d->transp = true;
+
+ while ((v3da = BLI_pophead(&v3d->afterdraw_transp))) {
+ draw_object(eval_ctx, scene, view_layer, ar, v3d, v3da->base, v3da->dflag);
+ MEM_freeN(v3da);
+ }
+ v3d->transp = false;
+
+ glDepthMask(GL_TRUE);
+
+}
+
+/* clears zbuffer and draws it over */
+static void view3d_draw_xray(
+ const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, ARegion *ar, View3D *v3d, bool *clear)
+{
+ if (*clear && v3d->zbuf) {
+ glClear(GL_DEPTH_BUFFER_BIT);
+ *clear = false;
+ }
+
+ v3d->xray = true;
+ View3DAfter *v3da;
+ while ((v3da = BLI_pophead(&v3d->afterdraw_xray))) {
+ draw_object(eval_ctx, scene, view_layer, ar, v3d, v3da->base, v3da->dflag);
+ MEM_freeN(v3da);
+ }
+ v3d->xray = false;
+}
+
+
+/* clears zbuffer and draws it over */
+static void view3d_draw_xraytransp(
+ const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, ARegion *ar, View3D *v3d, const bool clear)
+{
+ if (clear && v3d->zbuf)
+ glClear(GL_DEPTH_BUFFER_BIT);
+
+ v3d->xray = true;
+ v3d->transp = true;
+
+ glDepthMask(GL_FALSE);
+
+ View3DAfter *v3da;
+ while ((v3da = BLI_pophead(&v3d->afterdraw_xraytransp))) {
+ draw_object(eval_ctx, scene, view_layer, ar, v3d, v3da->base, v3da->dflag);
+ MEM_freeN(v3da);
+ }
+
+ v3d->transp = false;
+ v3d->xray = false;
+
+ glDepthMask(GL_TRUE);
+}
+
+/* clears zbuffer and draws it over,
+ * note that in the select version we don't care about transparent flag as with regular drawing */
+static void view3d_draw_xray_select(
+ const struct EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, ARegion *ar, View3D *v3d, bool *clear)
+{
+ /* Not ideal, but we need to read from the previous depths before clearing
+ * otherwise we could have a function to load the depths after drawing.
+ *
+ * Clearing the depth buffer isn't all that common between drawing objects so accept this for now.
+ */
+ if (U.gpu_select_pick_deph) {
+ GPU_select_load_id(-1);
+ }
+
+ View3DAfter *v3da;
+ if (*clear && v3d->zbuf) {
+ glClear(GL_DEPTH_BUFFER_BIT);
+ *clear = false;
+ }
+
+ v3d->xray = true;
+ while ((v3da = BLI_pophead(&v3d->afterdraw_xray))) {
+ if (GPU_select_load_id(v3da->base->object->select_color)) {
+ draw_object_select(eval_ctx, scene, view_layer, ar, v3d, v3da->base, v3da->dflag);
+ }
+ MEM_freeN(v3da);
+ }
+ v3d->xray = false;
+}
+
+/* *********************** */
+
+/*
+ * In most cases call draw_dupli_objects,
+ * draw_dupli_objects_color was added because when drawing set dupli's
+ * we need to force the color
+ */
+
+#if 0
+int dupli_ob_sort(void *arg1, void *arg2)
+{
+ void *p1 = ((DupliObject *)arg1)->ob;
+ void *p2 = ((DupliObject *)arg2)->ob;
+ int val = 0;
+ if (p1 < p2) val = -1;
+ else if (p1 > p2) val = 1;
+ return val;
+}
+#endif
+
+
+static DupliObject *dupli_step(DupliObject *dob)
+{
+ while (dob && dob->no_draw)
+ dob = dob->next;
+ return dob;
+}
+
+static void draw_dupli_objects_color(
+ const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, ARegion *ar, View3D *v3d, Base *base,
+ const short dflag, const int color)
+{
+ RegionView3D *rv3d = ar->regiondata;
+ ListBase *lb;
+ LodLevel *savedlod;
+ Base tbase = {NULL};
+ BoundBox bb, *bb_tmp; /* use a copy because draw_object, calls clear_mesh_caches */
+ unsigned char color_rgb[3];
+ const short dflag_dupli = dflag | DRAW_CONSTCOLOR;
+ short transflag;
+ char dt;
+ short dtx;
+ DupliApplyData *apply_data;
+
+ if ((base->flag & BASE_VISIBLED) == 0) return;
+ if ((base->object->restrictflag & OB_RESTRICT_RENDER) && (v3d->flag2 & V3D_RENDER_OVERRIDE)) return;
+
+ if (dflag & DRAW_CONSTCOLOR) {
+ BLI_assert(color == TH_UNDEFINED);
+ }
+ else {
+ UI_GetThemeColorBlend3ubv(color, TH_BACK, 0.5f, color_rgb);
+ }
+
+ tbase.flag_legacy = OB_FROMDUPLI | base->flag_legacy;
+ tbase.flag = base->flag;
+ lb = object_duplilist(eval_ctx, scene, base->object);
+ // BLI_listbase_sort(lb, dupli_ob_sort); /* might be nice to have if we have a dupli list with mixed objects. */
+
+ apply_data = duplilist_apply(eval_ctx, base->object, scene, lb);
+
+ DupliObject *dob_next = NULL;
+ DupliObject *dob = dupli_step(lb->first);
+ if (dob) dob_next = dupli_step(dob->next);
+
+ for (; dob; dob = dob_next, dob_next = dob_next ? dupli_step(dob_next->next) : NULL) {
+ bool testbb = false;
+
+ tbase.object = dob->ob;
+
+ /* Make sure lod is updated from dupli's position */
+ savedlod = dob->ob->currentlod;
+
+#ifdef WITH_GAMEENGINE
+ if (rv3d->rflag & RV3D_IS_GAME_ENGINE) {
+ BKE_object_lod_update(dob->ob, rv3d->viewinv[3]);
+ }
+#endif
+
+ /* extra service: draw the duplicator in drawtype of parent, minimum taken
+ * to allow e.g. boundbox box objects in groups for LOD */
+ dt = tbase.object->dt;
+ tbase.object->dt = MIN2(tbase.object->dt, base->object->dt);
+
+ /* inherit draw extra, but not if a boundbox under the assumption that this
+ * is intended to speed up drawing, and drawing extra (especially wire) can
+ * slow it down too much */
+ dtx = tbase.object->dtx;
+ if (tbase.object->dt != OB_BOUNDBOX)
+ tbase.object->dtx = base->object->dtx;
+
+ /* negative scale flag has to propagate */
+ transflag = tbase.object->transflag;
+
+ if (is_negative_m4(dob->mat))
+ tbase.object->transflag |= OB_NEG_SCALE;
+ else
+ tbase.object->transflag &= ~OB_NEG_SCALE;
+
+ /* should move outside the loop but possible color is set in draw_object still */
+ if ((dflag & DRAW_CONSTCOLOR) == 0) {
+ glColor3ubv(color_rgb);
+ }
+
+ if ((bb_tmp = BKE_object_boundbox_get(dob->ob))) {
+ bb = *bb_tmp; /* must make a copy */
+ testbb = true;
+ }
+
+ if (!testbb || ED_view3d_boundbox_clip_ex(rv3d, &bb, dob->mat)) {
+ copy_m4_m4(dob->ob->obmat, dob->mat);
+ GPU_begin_dupli_object(dob);
+ draw_object(eval_ctx, scene, view_layer, ar, v3d, &tbase, dflag_dupli);
+ GPU_end_dupli_object();
+ }
+
+ tbase.object->dt = dt;
+ tbase.object->dtx = dtx;
+ tbase.object->transflag = transflag;
+ tbase.object->currentlod = savedlod;
+ }
+
+ if (apply_data) {
+ duplilist_restore(lb, apply_data);
+ duplilist_free_apply_data(apply_data);
+ }
+
+ free_object_duplilist(lb);
+}
+
+void draw_dupli_objects(const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, ARegion *ar, View3D *v3d, Base *base)
+{
+ /* define the color here so draw_dupli_objects_color can be called
+ * from the set loop */
+
+ int color = (base->flag & BASE_SELECTED) ? TH_SELECT : TH_WIRE;
+ /* debug */
+ if (base->object->dup_group && base->object->dup_group->id.us < 1)
+ color = TH_REDALERT;
+
+ draw_dupli_objects_color(eval_ctx, scene, view_layer, ar, v3d, base, 0, color);
+}
+
+/* XXX warning, not using gpu offscreen here */
+void view3d_update_depths_rect(ARegion *ar, ViewDepths *d, rcti *rect)
+{
+ /* clamp rect by region */
+ rcti r = {
+ .xmin = 0,
+ .xmax = ar->winx - 1,
+ .ymin = 0,
+ .ymax = ar->winy - 1
+ };
+
+ /* Constrain rect to depth bounds */
+ BLI_rcti_isect(&r, rect, rect);
+
+ /* assign values to compare with the ViewDepths */
+ int x = rect->xmin;
+ int y = rect->ymin;
+
+ int w = BLI_rcti_size_x(rect);
+ int h = BLI_rcti_size_y(rect);
+
+ if (w <= 0 || h <= 0) {
+ if (d->depths)
+ MEM_freeN(d->depths);
+ d->depths = NULL;
+
+ d->damaged = false;
+ }
+ else if (d->w != w ||
+ d->h != h ||
+ d->x != x ||
+ d->y != y ||
+ d->depths == NULL
+ )
+ {
+ d->x = x;
+ d->y = y;
+ d->w = w;
+ d->h = h;
+
+ if (d->depths)
+ MEM_freeN(d->depths);
+
+ d->depths = MEM_mallocN(sizeof(float) * d->w * d->h, "View depths Subset");
+
+ d->damaged = true;
+ }
+
+ if (d->damaged) {
+ /* XXX using special function here, it doesn't use the gpu offscreen system */
+ view3d_opengl_read_Z_pixels(ar, d->x, d->y, d->w, d->h, GL_DEPTH_COMPONENT, GL_FLOAT, d->depths);
+ glGetDoublev(GL_DEPTH_RANGE, d->depth_range);
+ d->damaged = false;
+ }
+}
+
+/* note, with nouveau drivers the glReadPixels() is very slow. [#24339] */
+void ED_view3d_depth_update(ARegion *ar)
+{
+ RegionView3D *rv3d = ar->regiondata;
+
+ /* Create storage for, and, if necessary, copy depth buffer */
+ if (!rv3d->depths) rv3d->depths = MEM_callocN(sizeof(ViewDepths), "ViewDepths");
+ if (rv3d->depths) {
+ ViewDepths *d = rv3d->depths;
+ if (d->w != ar->winx ||
+ d->h != ar->winy ||
+ !d->depths)
+ {
+ d->w = ar->winx;
+ d->h = ar->winy;
+ if (d->depths)
+ MEM_freeN(d->depths);
+ d->depths = MEM_mallocN(sizeof(float) * d->w * d->h, "View depths");
+ d->damaged = true;
+ }
+
+ if (d->damaged) {
+ view3d_opengl_read_pixels(ar, 0, 0, d->w, d->h, GL_DEPTH_COMPONENT, GL_FLOAT, d->depths);
+ glGetDoublev(GL_DEPTH_RANGE, d->depth_range);
+
+ d->damaged = false;
+ }
+ }
+}
+
+/* utility function to find the closest Z value, use for autodepth */
+float view3d_depth_near(ViewDepths *d)
+{
+ /* convert to float for comparisons */
+ const float near = (float)d->depth_range[0];
+ const float far_real = (float)d->depth_range[1];
+ float far = far_real;
+
+ const float *depths = d->depths;
+ float depth = FLT_MAX;
+ int i = (int)d->w * (int)d->h; /* cast to avoid short overflow */
+
+ /* far is both the starting 'far' value
+ * and the closest value found. */
+ while (i--) {
+ depth = *depths++;
+ if ((depth < far) && (depth > near)) {
+ far = depth;
+ }
+ }
+
+ return far == far_real ? FLT_MAX : far;
+}
+
+void ED_view3d_draw_depth_gpencil(
+ const EvaluationContext *eval_ctx, Scene *scene, ARegion *ar, View3D *v3d)
+{
+ bool zbuf = v3d->zbuf;
+
+ /* Setup view matrix. */
+ ED_view3d_draw_setup_view(NULL, eval_ctx, scene, ar, v3d, NULL, NULL, NULL);
+
+ glClear(GL_DEPTH_BUFFER_BIT);
+
+ v3d->zbuf = true;
+ glEnable(GL_DEPTH_TEST);
+
+ if (v3d->flag2 & V3D_SHOW_GPENCIL) {
+ ED_gpencil_draw_view3d(NULL, scene, eval_ctx->view_layer, eval_ctx->depsgraph, v3d, ar, true);
+ }
+
+ v3d->zbuf = zbuf;
+ if (!zbuf) glDisable(GL_DEPTH_TEST);
+}
+
+void ED_view3d_draw_depth_loop(const EvaluationContext *eval_ctx, Scene *scene, ARegion *ar, View3D *v3d)
+{
+ Base *base;
+ ViewLayer *view_layer = eval_ctx->view_layer;
+ /* no need for color when drawing depth buffer */
+ const short dflag_depth = DRAW_CONSTCOLOR;
+
+ /* draw set first */
+ if (scene->set) {
+ Scene *sce_iter;
+ for (SETLOOPER(scene->set, sce_iter, base)) {
+ if ((base->flag & BASE_VISIBLED) != 0) {
+ draw_object(eval_ctx, scene, view_layer, ar, v3d, base, 0);
+ if (base->object->transflag & OB_DUPLI) {
+ draw_dupli_objects_color(eval_ctx, scene, view_layer, ar, v3d, base, dflag_depth, TH_UNDEFINED);
+ }
+ }
+ }
+ }
+
+ for (base = view_layer->object_bases.first; base; base = base->next) {
+ if ((base->flag & BASE_VISIBLED) != 0) {
+ /* dupli drawing */
+ if (base->object->transflag & OB_DUPLI) {
+ draw_dupli_objects_color(eval_ctx, scene, view_layer, ar, v3d, base, dflag_depth, TH_UNDEFINED);
+ }
+ draw_object(eval_ctx, scene, view_layer, ar, v3d, base, dflag_depth);
+ }
+ }
+
+ /* this isn't that nice, draw xray objects as if they are normal */
+ if (v3d->afterdraw_transp.first ||
+ v3d->afterdraw_xray.first ||
+ v3d->afterdraw_xraytransp.first)
+ {
+ View3DAfter *v3da;
+ int mask_orig;
+
+ v3d->xray = true;
+
+ /* transp materials can change the depth mask, see #21388 */
+ glGetIntegerv(GL_DEPTH_WRITEMASK, &mask_orig);
+
+
+ if (v3d->afterdraw_xray.first || v3d->afterdraw_xraytransp.first) {
+ glDepthFunc(GL_ALWAYS); /* always write into the depth bufer, overwriting front z values */
+ for (v3da = v3d->afterdraw_xray.first; v3da; v3da = v3da->next) {
+ draw_object(eval_ctx, scene, view_layer, ar, v3d, v3da->base, dflag_depth);
+ }
+ glDepthFunc(GL_LEQUAL); /* Now write the depth buffer normally */
+ }
+
+ /* draw 3 passes, transp/xray/xraytransp */
+ v3d->xray = false;
+ v3d->transp = true;
+ while ((v3da = BLI_pophead(&v3d->afterdraw_transp))) {
+ draw_object(eval_ctx, scene, view_layer, ar, v3d, v3da->base, dflag_depth);
+ MEM_freeN(v3da);
+ }
+
+ v3d->xray = true;
+ v3d->transp = false;
+ while ((v3da = BLI_pophead(&v3d->afterdraw_xray))) {
+ draw_object(eval_ctx, scene, view_layer, ar, v3d, v3da->base, dflag_depth);
+ MEM_freeN(v3da);
+ }
+
+ v3d->xray = true;
+ v3d->transp = true;
+ while ((v3da = BLI_pophead(&v3d->afterdraw_xraytransp))) {
+ draw_object(eval_ctx, scene, view_layer, ar, v3d, v3da->base, dflag_depth);
+ MEM_freeN(v3da);
+ }
+
+
+ v3d->xray = false;
+ v3d->transp = false;
+
+ glDepthMask(mask_orig);
+ }
+}
+
+void ED_view3d_draw_select_loop(
+ const struct EvaluationContext *eval_ctx, ViewContext *vc, Scene *scene, ViewLayer *view_layer,
+ View3D *v3d, ARegion *ar, bool use_obedit_skip, bool use_nearest)
+{
+ struct bThemeState theme_state;
+
+ short code = 1;
+ const short dflag = DRAW_PICKING | DRAW_CONSTCOLOR;
+
+ /* Tools may request depth outside of regular drawing code. */
+ UI_Theme_Store(&theme_state);
+ UI_SetTheme(SPACE_VIEW3D, RGN_TYPE_WINDOW);
+
+ if (vc->obedit && vc->obedit->type == OB_MBALL) {
+ draw_object(eval_ctx, scene, view_layer, ar, v3d, BASACT(view_layer), dflag);
+ }
+ else if ((vc->obedit && vc->obedit->type == OB_ARMATURE)) {
+ /* if not drawing sketch, draw bones */
+ if (!BDR_drawSketchNames(vc)) {
+ draw_object(eval_ctx, scene, view_layer, ar, v3d, BASACT(view_layer), dflag);
+ }
+ }
+ else {
+ Base *base;
+
+ for (base = view_layer->object_bases.first; base; base = base->next) {
+ if ((base->flag & BASE_VISIBLED) != 0) {
+ if (((base->flag & BASE_SELECTABLED) == 0) ||
+ (use_obedit_skip && (scene->obedit->data == base->object->data)))
+ {
+ base->object->select_color = 0;
+ }
+ else {
+ base->object->select_color = code;
+
+ if (use_nearest && (base->object->dtx & OB_DRAWXRAY)) {
+ ED_view3d_after_add(&v3d->afterdraw_xray, base, dflag);
+ }
+ else {
+ if (GPU_select_load_id(code)) {
+ draw_object(eval_ctx, scene, view_layer, ar, v3d, base, dflag);
+ }
+ }
+ code++;
+ }
+ }
+ }
+
+ if (use_nearest) {
+ bool xrayclear = true;
+ if (v3d->afterdraw_xray.first) {
+ view3d_draw_xray_select(eval_ctx, scene, view_layer, ar, v3d, &xrayclear);
+ }
+ }
+ }
+
+ UI_Theme_Restore(&theme_state);
+}
+
+typedef struct View3DShadow {
+ struct View3DShadow *next, *prev;
+ GPULamp *lamp;
+} View3DShadow;
+
+static void gpu_render_lamp_update(Scene *scene, View3D *v3d,
+ Object *ob, Object *par,
+ float obmat[4][4], unsigned int lay,
+ ListBase *shadows)
+{
+ GPULamp *lamp = GPU_lamp_from_blender(scene, ob, par);
+
+ if (lamp) {
+ Lamp *la = (Lamp *)ob->data;
+
+ GPU_lamp_update(lamp, lay, (ob->restrictflag & OB_RESTRICT_RENDER), obmat);
+ GPU_lamp_update_colors(lamp, la->r, la->g, la->b, la->energy);
+
+ unsigned int layers = lay & v3d->lay;
+
+ if (layers &&
+ GPU_lamp_has_shadow_buffer(lamp) &&
+ /* keep last, may do string lookup */
+ GPU_lamp_visible(lamp, NULL))
+ {
+ View3DShadow *shadow = MEM_callocN(sizeof(View3DShadow), "View3DShadow");
+ shadow->lamp = lamp;
+ BLI_addtail(shadows, shadow);
+ }
+ }
+}
+
+static void gpu_update_lamps_shadows_world(const EvaluationContext *eval_ctx, Scene *scene, View3D *v3d)
+{
+ ListBase shadows;
+ Scene *sce_iter;
+ Base *base;
+ World *world = scene->world;
+
+ BLI_listbase_clear(&shadows);
+
+ /* update lamp transform and gather shadow lamps */
+ for (SETLOOPER(scene, sce_iter, base)) {
+ Object *ob = base->object;
+
+ if (ob->type == OB_LAMP)
+ gpu_render_lamp_update(scene, v3d, ob, NULL, ob->obmat, ob->lay, &shadows);
+
+ if (ob->transflag & OB_DUPLI) {
+ DupliObject *dob;
+ ListBase *lb = object_duplilist(G.main->eval_ctx, scene, ob);
+
+ for (dob = lb->first; dob; dob = dob->next)
+ if (dob->ob->type == OB_LAMP)
+ gpu_render_lamp_update(scene, v3d, dob->ob, ob, dob->mat, ob->lay, &shadows);
+
+ free_object_duplilist(lb);
+ }
+ }
+
+ /* render shadows after updating all lamps, nested object_duplilist
+ * don't work correct since it's replacing object matrices */
+ for (View3DShadow *shadow = shadows.first; shadow; shadow = shadow->next) {
+ /* this needs to be done better .. */
+ float viewmat[4][4], winmat[4][4];
+ ARegion ar = {NULL};
+ RegionView3D rv3d = {{{0}}};
+
+ int drawtype = v3d->drawtype;
+ int lay = v3d->lay;
+ int flag2 = v3d->flag2;
+
+ v3d->drawtype = OB_SOLID;
+ v3d->lay &= GPU_lamp_shadow_layer(shadow->lamp);
+ v3d->flag2 &= ~(V3D_SOLID_TEX | V3D_SHOW_SOLID_MATCAP);
+ v3d->flag2 |= V3D_RENDER_OVERRIDE | V3D_RENDER_SHADOW;
+
+ int winsize;
+ GPU_lamp_shadow_buffer_bind(shadow->lamp, viewmat, &winsize, winmat);
+
+ ar.regiondata = &rv3d;
+ ar.regiontype = RGN_TYPE_WINDOW;
+ rv3d.persp = RV3D_CAMOB;
+ copy_m4_m4(rv3d.winmat, winmat);
+ copy_m4_m4(rv3d.viewmat, viewmat);
+ invert_m4_m4(rv3d.viewinv, rv3d.viewmat);
+ mul_m4_m4m4(rv3d.persmat, rv3d.winmat, rv3d.viewmat);
+ invert_m4_m4(rv3d.persinv, rv3d.viewinv);
+
+ /* no need to call ED_view3d_draw_offscreen_init since shadow buffers were already updated */
+ ED_view3d_draw_offscreen(
+ eval_ctx, scene, eval_ctx->view_layer, v3d, &ar, winsize, winsize, viewmat, winmat,
+ false, false, true,
+ NULL, NULL, NULL, NULL, NULL);
+ GPU_lamp_shadow_buffer_unbind(shadow->lamp);
+
+ v3d->drawtype = drawtype;
+ v3d->lay = lay;
+ v3d->flag2 = flag2;
+ }
+
+ BLI_freelistN(&shadows);
+
+ /* update world values */
+ if (world) {
+ GPU_mist_update_enable(world->mode & WO_MIST);
+ GPU_mist_update_values(world->mistype, world->miststa, world->mistdist, world->misi, &world->horr);
+ GPU_horizon_update_color(&world->horr);
+ GPU_ambient_update_color(&world->ambr);
+ GPU_zenith_update_color(&world->zenr);
+ }
+}
+
+/* *********************** customdata **************** */
+
+CustomDataMask ED_view3d_datamask(const Scene *scene, const View3D *v3d)
+{
+ CustomDataMask mask = 0;
+ const int drawtype = view3d_effective_drawtype(v3d);
+
+ if (ELEM(drawtype, OB_TEXTURE, OB_MATERIAL) ||
+ ((drawtype == OB_SOLID) && (v3d->flag2 & V3D_SOLID_TEX)))
+ {
+ mask |= CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL;
+
+ if (BKE_scene_use_new_shading_nodes(scene)) {
+ if (drawtype == OB_MATERIAL)
+ mask |= CD_MASK_ORCO;
+ }
+ else {
+ if ((scene->gm.matmode == GAME_MAT_GLSL && drawtype == OB_TEXTURE) ||
+ (drawtype == OB_MATERIAL))
+ {
+ mask |= CD_MASK_ORCO;
+ }
+ }
+ }
+
+ return mask;
+}
+
+/* goes over all modes and view3d settings */
+CustomDataMask ED_view3d_screen_datamask(const Scene *scene, const bScreen *screen)
+{
+ CustomDataMask mask = CD_MASK_BAREMESH;
+
+ /* check if we need tfaces & mcols due to view mode */
+ for (const ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
+ if (sa->spacetype == SPACE_VIEW3D) {
+ mask |= ED_view3d_datamask(scene, sa->spacedata.first);
+ }
+ }
+
+ return mask;
+}
+
+/**
+ * Shared by #ED_view3d_draw_offscreen and #view3d_main_region_draw_objects
+ *
+ * \note \a C and \a grid_unit will be NULL when \a draw_offscreen is set.
+ * \note Drawing lamps and opengl render uses this, so dont do grease pencil or view widgets here.
+ */
+static void view3d_draw_objects(
+ const bContext *C,
+ const EvaluationContext *eval_ctx,
+ Scene *scene, View3D *v3d, ARegion *ar,
+ const char **grid_unit,
+ const bool do_bgpic, const bool draw_offscreen, GPUFX *fx)
+{
+ ViewLayer *view_layer = C ? CTX_data_view_layer(C) : BKE_view_layer_from_scene_get(scene);
+ Depsgraph *depsgraph = CTX_data_depsgraph(C);
+ RegionView3D *rv3d = ar->regiondata;
+ Base *base;
+ const bool do_camera_frame = !draw_offscreen;
+ const bool draw_grids = !draw_offscreen && (v3d->flag2 & V3D_RENDER_OVERRIDE) == 0;
+ const bool draw_floor = (rv3d->view == RV3D_VIEW_USER) || (rv3d->persp != RV3D_ORTHO);
+ /* only draw grids after in solid modes, else it hovers over mesh wires */
+ const bool draw_grids_after = draw_grids && draw_floor && (v3d->drawtype > OB_WIRE) && fx;
+ bool do_composite_xray = false;
+ bool xrayclear = true;
+
+ if (!draw_offscreen) {
+ ED_region_draw_cb_draw(C, ar, REGION_DRAW_PRE_VIEW);
+ }
+
+ if (rv3d->rflag & RV3D_CLIPPING)
+ view3d_draw_clipping(rv3d);
+
+ /* set zbuffer after we draw clipping region */
+ v3d->zbuf = VP_legacy_use_depth(scene, v3d);
+
+ if (v3d->zbuf) {
+ glEnable(GL_DEPTH_TEST);
+ }
+
+ /* ortho grid goes first, does not write to depth buffer and doesn't need depth test so it will override
+ * objects if done last */
+ if (draw_grids) {
+ /* needs to be done always, gridview is adjusted in drawgrid() now, but only for ortho views. */
+ rv3d->gridview = ED_view3d_grid_scale(scene, v3d, grid_unit);
+
+ if (!draw_floor) {
+ ED_region_pixelspace(ar);
+ *grid_unit = NULL; /* drawgrid need this to detect/affect smallest valid unit... */
+ VP_legacy_drawgrid(&scene->unit, ar, v3d, grid_unit);
+ gpuLoadProjectionMatrix(rv3d->winmat);
+ gpuLoadMatrix(rv3d->viewmat);
+ }
+ else if (!draw_grids_after) {
+ VP_legacy_drawfloor(scene, v3d, grid_unit, true);
+ }
+ }
+
+ /* important to do before clipping */
+ if (do_bgpic) {
+ ED_view3d_draw_bgpic_test(scene, depsgraph, ar, v3d, false, do_camera_frame);
+ }
+
+ if (rv3d->rflag & RV3D_CLIPPING) {
+ ED_view3d_clipping_set(rv3d);
+ }
+
+ /* draw set first */
+ if (scene->set) {
+ const short dflag = DRAW_CONSTCOLOR | DRAW_SCENESET;
+ Scene *sce_iter;
+ for (SETLOOPER(scene->set, sce_iter, base)) {
+ if ((base->flag & BASE_VISIBLED) != 0) {
+ UI_ThemeColorBlend(TH_WIRE, TH_BACK, 0.6f);
+ draw_object(eval_ctx, scene, view_layer, ar, v3d, base, dflag);
+
+ if (base->object->transflag & OB_DUPLI) {
+ draw_dupli_objects_color(eval_ctx, scene, view_layer, ar, v3d, base, dflag, TH_UNDEFINED);
+ }
+ }
+ }
+
+ /* Transp and X-ray afterdraw stuff for sets is done later */
+ }
+
+ if (draw_offscreen) {
+ for (base = view_layer->object_bases.first; base; base = base->next) {
+ if ((base->flag & BASE_VISIBLED) != 0) {
+ /* dupli drawing */
+ if (base->object->transflag & OB_DUPLI) {
+ draw_dupli_objects(eval_ctx, scene, view_layer, ar, v3d, base);
+ }
+
+ draw_object(eval_ctx, scene, view_layer, ar, v3d, base, 0);
+ }
+ }
+ }
+ else {
+ unsigned int lay_used = 0;
+
+ /* then draw not selected and the duplis, but skip editmode object */
+ for (base = view_layer->object_bases.first; base; base = base->next) {
+ lay_used |= base->lay;
+
+ if ((base->flag & BASE_VISIBLED) != 0) {
+
+ /* dupli drawing */
+ if (base->object->transflag & OB_DUPLI) {
+ draw_dupli_objects(eval_ctx, scene, view_layer, ar, v3d, base);
+ }
+ if ((base->flag & BASE_SELECTED) == 0) {
+ if (base->object != scene->obedit)
+ draw_object(eval_ctx, scene, view_layer, ar, v3d, base, 0);
+ }
+ }
+ }
+
+ /* mask out localview */
+ v3d->lay_used = lay_used & ((1 << 20) - 1);
+
+ /* draw selected and editmode */
+ for (base = view_layer->object_bases.first; base; base = base->next) {
+ if ((base->flag & BASE_VISIBLED) != 0) {
+ if (base->object == scene->obedit || (base->flag & BASE_SELECTED)) {
+ draw_object(eval_ctx, scene, view_layer, ar, v3d, base, 0);
+ }
+ }
+ }
+ }
+
+ /* perspective floor goes last to use scene depth and avoid writing to depth buffer */
+ if (draw_grids_after) {
+ VP_legacy_drawfloor(scene, v3d, grid_unit, false);
+ }
+
+ /* must be before xray draw which clears the depth buffer */
+ if (v3d->flag2 & V3D_SHOW_GPENCIL) {
+ wmWindowManager *wm = (C != NULL) ? CTX_wm_manager(C) : NULL;
+
+ /* must be before xray draw which clears the depth buffer */
+ if (v3d->zbuf) glDisable(GL_DEPTH_TEST);
+ ED_gpencil_draw_view3d(wm, scene, view_layer, depsgraph, v3d, ar, true);
+ if (v3d->zbuf) glEnable(GL_DEPTH_TEST);
+ }
+
+ /* transp and X-ray afterdraw stuff */
+ if (v3d->afterdraw_transp.first) view3d_draw_transp(eval_ctx, scene, view_layer, ar, v3d);
+
+ /* always do that here to cleanup depth buffers if none needed */
+ if (fx) {
+ do_composite_xray = v3d->zbuf && (v3d->afterdraw_xray.first || v3d->afterdraw_xraytransp.first);
+ GPU_fx_compositor_setup_XRay_pass(fx, do_composite_xray);
+ }
+
+ if (v3d->afterdraw_xray.first) view3d_draw_xray(eval_ctx, scene, view_layer, ar, v3d, &xrayclear);
+ if (v3d->afterdraw_xraytransp.first) view3d_draw_xraytransp(eval_ctx, scene, view_layer, ar, v3d, xrayclear);
+
+ if (fx && do_composite_xray) {
+ GPU_fx_compositor_XRay_resolve(fx);
+ }
+
+ if (!draw_offscreen) {
+ ED_region_draw_cb_draw(C, ar, REGION_DRAW_POST_VIEW);
+ }
+
+ if (rv3d->rflag & RV3D_CLIPPING)
+ ED_view3d_clipping_disable();
+
+ /* important to do after clipping */
+ if (do_bgpic) {
+ ED_view3d_draw_bgpic_test(scene, depsgraph, ar, v3d, true, do_camera_frame);
+ }
+
+ /* cleanup */
+ if (v3d->zbuf) {
+ v3d->zbuf = false;
+ glDisable(GL_DEPTH_TEST);
+ }
+
+ if ((v3d->flag2 & V3D_RENDER_SHADOW) == 0) {
+ GPU_free_images_old();
+ }
+}
+
+/**
+ * Store values from #RegionView3D, set when drawing.
+ * This is needed when we draw with to a viewport using a different matrix (offscreen drawing for example).
+ *
+ * Values set by #ED_view3d_update_viewmat should be handled here.
+ */
+struct RV3DMatrixStore {
+ float winmat[4][4];
+ float viewmat[4][4];
+ float viewinv[4][4];
+ float persmat[4][4];
+ float persinv[4][4];
+ float viewcamtexcofac[4];
+ float pixsize;
+};
+
+struct RV3DMatrixStore *ED_view3d_mats_rv3d_backup(struct RegionView3D *rv3d)
+{
+ struct RV3DMatrixStore *rv3dmat = MEM_mallocN(sizeof(*rv3dmat), __func__);
+ copy_m4_m4(rv3dmat->winmat, rv3d->winmat);
+ copy_m4_m4(rv3dmat->viewmat, rv3d->viewmat);
+ copy_m4_m4(rv3dmat->persmat, rv3d->persmat);
+ copy_m4_m4(rv3dmat->persinv, rv3d->persinv);
+ copy_m4_m4(rv3dmat->viewinv, rv3d->viewinv);
+ copy_v4_v4(rv3dmat->viewcamtexcofac, rv3d->viewcamtexcofac);
+ rv3dmat->pixsize = rv3d->pixsize;
+ return (void *)rv3dmat;
+}
+
+void ED_view3d_mats_rv3d_restore(struct RegionView3D *rv3d, struct RV3DMatrixStore *rv3dmat_pt)
+{
+ struct RV3DMatrixStore *rv3dmat = rv3dmat_pt;
+ copy_m4_m4(rv3d->winmat, rv3dmat->winmat);
+ copy_m4_m4(rv3d->viewmat, rv3dmat->viewmat);
+ copy_m4_m4(rv3d->persmat, rv3dmat->persmat);
+ copy_m4_m4(rv3d->persinv, rv3dmat->persinv);
+ copy_m4_m4(rv3d->viewinv, rv3dmat->viewinv);
+ copy_v4_v4(rv3d->viewcamtexcofac, rv3dmat->viewcamtexcofac);
+ rv3d->pixsize = rv3dmat->pixsize;
+}
+
+/**
+ * \note The info that this uses is updated in #ED_refresh_viewport_fps,
+ * which currently gets called during #SCREEN_OT_animation_step.
+ */
+void ED_scene_draw_fps(Scene *scene, const rcti *rect)
+{
+ ScreenFrameRateInfo *fpsi = scene->fps_info;
+ char printable[16];
+
+ if (!fpsi || !fpsi->lredrawtime || !fpsi->redrawtime)
+ return;
+
+ printable[0] = '\0';
+
+#if 0
+ /* this is too simple, better do an average */
+ fps = (float)(1.0 / (fpsi->lredrawtime - fpsi->redrawtime))
+#else
+ fpsi->redrawtimes_fps[fpsi->redrawtime_index] = (float)(1.0 / (fpsi->lredrawtime - fpsi->redrawtime));
+
+ float fps = 0.0f;
+ int tot = 0;
+ for (int i = 0; i < REDRAW_FRAME_AVERAGE; i++) {
+ if (fpsi->redrawtimes_fps[i]) {
+ fps += fpsi->redrawtimes_fps[i];
+ tot++;
+ }
+ }
+ if (tot) {
+ fpsi->redrawtime_index = (fpsi->redrawtime_index + 1) % REDRAW_FRAME_AVERAGE;
+
+ //fpsi->redrawtime_index++;
+ //if (fpsi->redrawtime >= REDRAW_FRAME_AVERAGE)
+ // fpsi->redrawtime = 0;
+
+ fps = fps / tot;
+ }
+#endif
+
+ const int font_id = BLF_default();
+
+ /* is this more than half a frame behind? */
+ if (fps + 0.5f < (float)(FPS)) {
+ UI_FontThemeColor(font_id, TH_REDALERT);
+ BLI_snprintf(printable, sizeof(printable), IFACE_("fps: %.2f"), fps);
+ }
+ else {
+ UI_FontThemeColor(font_id, TH_TEXT_HI);
+ BLI_snprintf(printable, sizeof(printable), IFACE_("fps: %i"), (int)(fps + 0.5f));
+ }
+
+#ifdef WITH_INTERNATIONAL
+ BLF_draw_default(rect->xmin + U.widget_unit, rect->ymax - U.widget_unit, 0.0f, printable, sizeof(printable));
+#else
+ BLF_draw_default_ascii(rect->xmin + U.widget_unit, rect->ymax - U.widget_unit, 0.0f, printable, sizeof(printable));
+#endif
+}
+
+static bool view3d_main_region_do_render_draw(const Scene *scene)
+{
+ RenderEngineType *type = RE_engines_find(scene->view_render.engine_id);
+ return (type && type->view_update && type->render_to_view);
+}
+
+bool ED_view3d_calc_render_border(const Scene *scene, const Depsgraph *depsgraph, View3D *v3d, ARegion *ar, rcti *rect)
+{
+ RegionView3D *rv3d = ar->regiondata;
+ bool use_border;
+
+ /* test if there is a 3d view rendering */
+ if (v3d->drawtype != OB_RENDER || !view3d_main_region_do_render_draw(scene))
+ return false;
+
+ /* test if there is a border render */
+ if (rv3d->persp == RV3D_CAMOB)
+ use_border = (scene->r.mode & R_BORDER) != 0;
+ else
+ use_border = (v3d->flag2 & V3D_RENDER_BORDER) != 0;
+
+ if (!use_border)
+ return false;
+
+ /* compute border */
+ if (rv3d->persp == RV3D_CAMOB) {
+ rctf viewborder;
+ ED_view3d_calc_camera_border(scene, depsgraph, ar, v3d, rv3d, &viewborder, false);
+
+ rect->xmin = viewborder.xmin + scene->r.border.xmin * BLI_rctf_size_x(&viewborder);
+ rect->ymin = viewborder.ymin + scene->r.border.ymin * BLI_rctf_size_y(&viewborder);
+ rect->xmax = viewborder.xmin + scene->r.border.xmax * BLI_rctf_size_x(&viewborder);
+ rect->ymax = viewborder.ymin + scene->r.border.ymax * BLI_rctf_size_y(&viewborder);
+ }
+ else {
+ rect->xmin = v3d->render_border.xmin * ar->winx;
+ rect->xmax = v3d->render_border.xmax * ar->winx;
+ rect->ymin = v3d->render_border.ymin * ar->winy;
+ rect->ymax = v3d->render_border.ymax * ar->winy;
+ }
+
+ BLI_rcti_translate(rect, ar->winrct.xmin, ar->winrct.ymin);
+ BLI_rcti_isect(&ar->winrct, rect, rect);
+
+ return true;
+}
+
+/**
+ * IMPORTANT: this is deprecated, any changes made in this function should
+ * be mirrored in view3d_draw_render_draw() in view3d_draw.c
+ */
+static bool view3d_main_region_draw_engine(
+ const bContext *C, const EvaluationContext *eval_ctx, Scene *scene,
+ ARegion *ar, View3D *v3d,
+ bool clip_border, const rcti *border_rect)
+{
+ const Depsgraph *depsgraph = CTX_data_depsgraph(C);
+ RegionView3D *rv3d = ar->regiondata;
+ RenderEngineType *type;
+ GLint scissor[4];
+
+ /* create render engine */
+ if (!rv3d->render_engine) {
+ RenderEngine *engine;
+ type = RE_engines_find(scene->view_render.engine_id);
+
+ if (!(type->view_update && type->render_to_view))
+ return false;
+
+ engine = RE_engine_create_ex(type, true);
+
+ engine->tile_x = scene->r.tilex;
+ engine->tile_y = scene->r.tiley;
+
+ type->view_update(engine, C);
+
+ rv3d->render_engine = engine;
+ }
+
+ /* setup view matrices */
+ VP_legacy_view3d_main_region_setup_view(eval_ctx, scene, v3d, ar, NULL, NULL);
+
+ /* background draw */
+ ED_region_pixelspace(ar);
+
+ if (clip_border) {
+ /* for border draw, we only need to clear a subset of the 3d view */
+ if (border_rect->xmax > border_rect->xmin && border_rect->ymax > border_rect->ymin) {
+ glGetIntegerv(GL_SCISSOR_BOX, scissor);
+ glScissor(border_rect->xmin, border_rect->ymin,
+ BLI_rcti_size_x(border_rect), BLI_rcti_size_y(border_rect));
+ }
+ else {
+ return false;
+ }
+ }
+
+ glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ bool show_image = false;
+ {
+ Camera *cam = ED_view3d_camera_data_get(v3d, rv3d);
+ if (cam->flag & CAM_SHOW_BG_IMAGE) {
+ show_image = true;
+ ED_view3d_draw_bgpic_test(scene, depsgraph, ar, v3d, false, true);
+ }
+ else {
+ imm_draw_box_checker_2d(0, 0, ar->winx, ar->winy);
+ }
+ }
+
+ if (show_image) {
+ ED_view3d_draw_bgpic_test(scene, depsgraph, ar, v3d, false, true);
+ }
+ else {
+ imm_draw_box_checker_2d(0, 0, ar->winx, ar->winy);
+ }
+
+ /* render result draw */
+ type = rv3d->render_engine->type;
+ type->render_to_view(rv3d->render_engine, C);
+
+ if (show_image) {
+ ED_view3d_draw_bgpic_test(scene, depsgraph, ar, v3d, true, true);
+ }
+
+ if (clip_border) {
+ /* restore scissor as it was before */
+ glScissor(scissor[0], scissor[1], scissor[2], scissor[3]);
+ }
+
+ return true;
+}
+
+static void view3d_main_region_draw_engine_info(View3D *v3d, RegionView3D *rv3d, ARegion *ar, bool render_border)
+{
+ float fill_color[4] = {0.0f, 0.0f, 0.0f, 0.25f};
+
+ if (!rv3d->render_engine || !rv3d->render_engine->text[0])
+ return;
+
+ if (render_border) {
+ /* draw darkened background color. no alpha because border render does
+ * partial redraw and will not redraw the region behind this info bar */
+ float alpha = 1.0f - fill_color[3];
+ Camera *camera = ED_view3d_camera_data_get(v3d, rv3d);
+
+ if (camera) {
+ if (camera->flag & CAM_SHOWPASSEPARTOUT) {
+ alpha *= (1.0f - camera->passepartalpha);
+ }
+ }
+
+ UI_GetThemeColor3fv(TH_HIGH_GRAD, fill_color);
+ mul_v3_fl(fill_color, alpha);
+ fill_color[3] = 1.0f;
+ }
+
+ ED_region_info_draw(ar, rv3d->render_engine->text, fill_color, true);
+}
+
+#ifdef WITH_GAMEENGINE
+static void update_lods(Scene *scene, float camera_pos[3])
+{
+ Scene *sce_iter;
+ Base *base;
+
+ for (SETLOOPER(scene, sce_iter, base)) {
+ Object *ob = base->object;
+ BKE_object_lod_update(ob, camera_pos);
+ }
+}
+#endif
+
+static void view3d_main_region_draw_objects(
+ const bContext *C, Scene *scene, ViewLayer *view_layer, View3D *v3d,
+ ARegion *ar, const char **grid_unit)
+{
+ wmWindow *win = CTX_wm_window(C);
+ EvaluationContext eval_ctx;
+ RegionView3D *rv3d = ar->regiondata;
+ unsigned int lay_used = v3d->lay_used;
+
+ CTX_data_eval_ctx(C, &eval_ctx);
+
+ /* post processing */
+ bool do_compositing = false;
+
+ /* shadow buffers, before we setup matrices */
+ if (draw_glsl_material(&eval_ctx, scene, view_layer, NULL, v3d, v3d->drawtype))
+ gpu_update_lamps_shadows_world(&eval_ctx, scene, v3d);
+
+ /* reset default OpenGL lights if needed (i.e. after preferences have been altered) */
+ if (rv3d->rflag & RV3D_GPULIGHT_UPDATE) {
+ rv3d->rflag &= ~RV3D_GPULIGHT_UPDATE;
+ GPU_default_lights();
+ }
+
+ /* setup the view matrix */
+ if (VP_legacy_view3d_stereo3d_active(win, scene, v3d, rv3d)) {
+ VP_legacy_view3d_stereo3d_setup(&eval_ctx, scene, v3d, ar);
+ }
+ else {
+ VP_legacy_view3d_main_region_setup_view(&eval_ctx, scene, v3d, ar, NULL, NULL);
+ }
+
+ rv3d->rflag &= ~RV3D_IS_GAME_ENGINE;
+#ifdef WITH_GAMEENGINE
+ if (STREQ(scene->view_render.engine_id, RE_engine_id_BLENDER_GAME)) {
+ rv3d->rflag |= RV3D_IS_GAME_ENGINE;
+
+ /* Make sure LoDs are up to date */
+ update_lods(scene, rv3d->viewinv[3]);
+ }
+#endif
+
+ /* framebuffer fx needed, we need to draw offscreen first */
+ if (v3d->fx_settings.fx_flag && v3d->drawtype >= OB_SOLID) {
+ BKE_screen_gpu_fx_validate(&v3d->fx_settings);
+ GPUFXSettings fx_settings = v3d->fx_settings;
+ if (!rv3d->compositor)
+ rv3d->compositor = GPU_fx_compositor_create();
+
+ if (rv3d->persp == RV3D_CAMOB && v3d->camera)
+ BKE_camera_to_gpu_dof(v3d->camera, &fx_settings);
+ else {
+ fx_settings.dof = NULL;
+ }
+
+ do_compositing = GPU_fx_compositor_initialize_passes(rv3d->compositor, &ar->winrct, &ar->drawrct, &fx_settings);
+ }
+
+ /* enables anti-aliasing for 3D view drawing */
+ if (win->multisamples != USER_MULTISAMPLE_NONE) {
+ glEnable(GL_MULTISAMPLE);
+ }
+
+ /* main drawing call */
+ view3d_draw_objects(C, &eval_ctx, scene, v3d, ar, grid_unit, true, false, do_compositing ? rv3d->compositor : NULL);
+
+ /* post process */
+ if (do_compositing) {
+ GPU_fx_do_composite_pass(rv3d->compositor, rv3d->winmat, rv3d->is_persp, scene, NULL);
+ }
+
+ /* Disable back anti-aliasing */
+ if (win->multisamples != USER_MULTISAMPLE_NONE) {
+ glDisable(GL_MULTISAMPLE);
+ }
+
+ if (v3d->lay_used != lay_used) { /* happens when loading old files or loading with UI load */
+ /* find header and force tag redraw */
+ ScrArea *sa = CTX_wm_area(C);
+ ARegion *ar_header = BKE_area_find_region_type(sa, RGN_TYPE_HEADER);
+ ED_region_tag_redraw(ar_header); /* can be NULL */
+ }
+
+ if ((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) {
+ BDR_drawSketch(C);
+ }
+}
+
+static void view3d_main_region_draw_info(
+ const bContext *C, Scene *scene,
+ ARegion *ar, View3D *v3d,
+ const char *grid_unit, bool render_border)
+{
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
+ const Depsgraph *depsgraph = CTX_data_depsgraph(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ wmWindowManager *wm = CTX_wm_manager(C);
+ RegionView3D *rv3d = ar->regiondata;
+ rcti rect;
+
+ /* local coordinate visible rect inside region, to accomodate overlapping ui */
+ ED_region_visible_rect(ar, &rect);
+
+ if (rv3d->persp == RV3D_CAMOB) {
+ VP_drawviewborder(scene, CTX_data_depsgraph(C), ar, v3d);
+ }
+ else if (v3d->flag2 & V3D_RENDER_BORDER) {
+ VP_drawrenderborder(ar, v3d);
+ }
+
+ if (v3d->flag2 & V3D_SHOW_GPENCIL) {
+ /* draw grease-pencil stuff - needed to get paint-buffer shown too (since it's 2D) */
+ ED_gpencil_draw_view3d(wm, scene, view_layer, depsgraph, v3d, ar, false);
+ }
+
+ if ((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) {
+ VP_legacy_drawcursor(&eval_ctx, scene, view_layer, ar, v3d); /* 3D cursor */
+
+ if (U.uiflag & USER_SHOW_ROTVIEWICON)
+ VP_legacy_draw_view_axis(rv3d, &rect);
+ else
+ draw_view_icon(rv3d, &rect);
+
+ if (U.uiflag & USER_DRAWVIEWINFO) {
+ Object *ob = OBACT(view_layer);
+ VP_legacy_draw_selected_name(scene, ob, eval_ctx.object_mode, &rect);
+ }
+ }
+
+ if (rv3d->render_engine) {
+ view3d_main_region_draw_engine_info(v3d, rv3d, ar, render_border);
+ return;
+ }
+
+ if ((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) {
+ if ((U.uiflag & USER_SHOW_FPS) && ED_screen_animation_no_scrub(wm)) {
+ ED_scene_draw_fps(scene, &rect);
+ }
+ else if (U.uiflag & USER_SHOW_VIEWPORTNAME) {
+ VP_legacy_draw_viewport_name(ar, v3d, &rect);
+ }
+
+ if (grid_unit) { /* draw below the viewport name */
+ char numstr[32] = "";
+
+ UI_FontThemeColor(BLF_default(), TH_TEXT_HI);
+ if (v3d->grid != 1.0f) {
+ BLI_snprintf(numstr, sizeof(numstr), "%s x %.4g", grid_unit, v3d->grid);
+ }
+
+ BLF_draw_default_ascii(rect.xmin + U.widget_unit,
+ rect.ymax - (USER_SHOW_VIEWPORTNAME ? 2 * U.widget_unit : U.widget_unit), 0.0f,
+ numstr[0] ? numstr : grid_unit, sizeof(numstr));
+ }
+ }
+}
+
+void view3d_main_region_draw_legacy(const bContext *C, ARegion *ar)
+{
+ const Depsgraph *depsgraph = CTX_data_depsgraph(C);
+ EvaluationContext eval_ctx;
+ Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ View3D *v3d = CTX_wm_view3d(C);
+ const char *grid_unit = NULL;
+ rcti border_rect;
+
+ /* if we only redraw render border area, skip opengl draw and also
+ * don't do scissor because it's already set */
+ bool render_border = ED_view3d_calc_render_border(scene, depsgraph, v3d, ar, &border_rect);
+ bool clip_border = (render_border && !BLI_rcti_compare(&ar->drawrct, &border_rect));
+
+ gpuPushProjectionMatrix();
+ gpuLoadIdentityProjectionMatrix();
+ gpuPushMatrix();
+ gpuLoadIdentity();
+
+ CTX_data_eval_ctx(C, &eval_ctx);
+
+ /* draw viewport using opengl */
+ if (v3d->drawtype != OB_RENDER || !view3d_main_region_do_render_draw(scene) || clip_border) {
+ VP_view3d_main_region_clear(scene, v3d, ar); /* background */
+ view3d_main_region_draw_objects(C, scene, view_layer, v3d, ar, &grid_unit);
+
+ if (G.debug & G_DEBUG_SIMDATA)
+ draw_sim_debug_data(scene, v3d, ar);
+
+ glDisable(GL_DEPTH_TEST);
+ ED_region_pixelspace(ar);
+ }
+
+ /* draw viewport using external renderer */
+ if (v3d->drawtype == OB_RENDER) {
+ view3d_main_region_draw_engine(C, &eval_ctx, scene, ar, v3d, clip_border, &border_rect);
+ }
+
+ VP_legacy_view3d_main_region_setup_view(&eval_ctx, scene, v3d, ar, NULL, NULL);
+ glClear(GL_DEPTH_BUFFER_BIT);
+
+ WM_manipulatormap_draw(ar->manipulator_map, C, WM_MANIPULATORMAP_DRAWSTEP_3D);
+
+ ED_region_pixelspace(ar);
+
+ view3d_main_region_draw_info(C, scene, ar, v3d, grid_unit, render_border);
+
+ WM_manipulatormap_draw(ar->manipulator_map, C, WM_MANIPULATORMAP_DRAWSTEP_2D);
+
+ gpuPopProjectionMatrix();
+ gpuPopMatrix();
+
+ v3d->flag |= V3D_INVALID_BACKBUF;
+
+ BLI_assert(BLI_listbase_is_empty(&v3d->afterdraw_transp));
+ BLI_assert(BLI_listbase_is_empty(&v3d->afterdraw_xray));
+ BLI_assert(BLI_listbase_is_empty(&v3d->afterdraw_xraytransp));
+}
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Deprecated Interface
+ *
+ * New viewport sometimes has a check for new/old viewport code.
+ * Use these functions so new viewport can *optionally* call.
+ *
+ * \{ */
+
+
+void VP_deprecated_view3d_draw_objects(
+ const bContext *C,
+ const EvaluationContext *eval_ctx,
+ Scene *scene, View3D *v3d, ARegion *ar,
+ const char **grid_unit,
+ const bool do_bgpic, const bool draw_offscreen, GPUFX *fx)
+{
+ view3d_draw_objects(C, eval_ctx, scene, v3d, ar, grid_unit, do_bgpic, draw_offscreen, fx);
+}
+
+void VP_deprecated_gpu_update_lamps_shadows_world(const EvaluationContext *eval_ctx, Scene *scene, View3D *v3d)
+{
+ gpu_update_lamps_shadows_world(eval_ctx, scene, v3d);
+}
+
+/** \} */
diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c
index 2d002a38a19..47778623561 100644
--- a/source/blender/editors/space_view3d/view3d_edit.c
+++ b/source/blender/editors/space_view3d/view3d_edit.c
@@ -36,6 +36,7 @@
#include <float.h>
#include "DNA_armature_types.h"
+#include "DNA_camera_types.h"
#include "DNA_curve_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
@@ -48,8 +49,10 @@
#include "BLI_utildefines.h"
#include "BKE_armature.h"
+#include "BKE_camera.h"
#include "BKE_context.h"
#include "BKE_font.h"
+#include "BKE_layer.h"
#include "BKE_library.h"
#include "BKE_object.h"
#include "BKE_paint.h"
@@ -58,9 +61,8 @@
#include "BKE_screen.h"
#include "BKE_action.h"
+#include "DEG_depsgraph.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -131,6 +133,7 @@ typedef struct ViewOpsData {
ARegion *ar;
View3D *v3d;
RegionView3D *rv3d;
+ Depsgraph *depsgraph;
/** Needed for continuous zoom. */
wmTimer *timer;
@@ -215,6 +218,7 @@ static void viewops_data_alloc(bContext *C, wmOperator *op)
/* store data */
op->customdata = vod;
+ vod->depsgraph = CTX_data_depsgraph(C);
vod->scene = CTX_data_scene(C);
vod->sa = CTX_wm_area(C);
vod->ar = CTX_wm_region(C);
@@ -240,20 +244,22 @@ void view3d_orbit_apply_dyn_ofs(
static bool view3d_orbit_calc_center(bContext *C, float r_dyn_ofs[3])
{
static float lastofs[3] = {0, 0, 0};
+ const WorkSpace *workspace = CTX_wm_workspace(C);
bool is_set = false;
Scene *scene = CTX_data_scene(C);
- Object *ob_act = OBACT;
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Object *ob_act = OBACT(view_layer);
- if (ob_act && (ob_act->mode & OB_MODE_ALL_PAINT) &&
+ if (ob_act && (workspace->object_mode & OB_MODE_ALL_PAINT) &&
/* with weight-paint + pose-mode, fall through to using calculateTransformCenter */
- ((ob_act->mode & OB_MODE_WEIGHT_PAINT) && BKE_object_pose_armature_get(ob_act)) == 0)
+ ((workspace->object_mode & OB_MODE_WEIGHT_PAINT) && BKE_object_pose_armature_get(ob_act)) == 0)
{
/* in case of sculpting use last average stroke position as a rotation
* center, in other cases it's not clear what rotation center shall be
* so just rotate around object origin
*/
- if (ob_act->mode & (OB_MODE_SCULPT | OB_MODE_TEXTURE_PAINT | OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT)) {
+ if (workspace->object_mode & (OB_MODE_SCULPT | OB_MODE_TEXTURE_PAINT | OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT)) {
float stroke[3];
BKE_paint_stroke_get_average(scene, ob_act, stroke);
copy_v3_v3(lastofs, stroke);
@@ -263,7 +269,7 @@ static bool view3d_orbit_calc_center(bContext *C, float r_dyn_ofs[3])
}
is_set = true;
}
- else if (ob_act && (ob_act->mode & OB_MODE_EDIT) && (ob_act->type == OB_FONT)) {
+ else if (ob_act && (workspace->object_mode & OB_MODE_EDIT) && (ob_act->type == OB_FONT)) {
Curve *cu = ob_act->data;
EditFont *ef = cu->editfont;
int i;
@@ -278,16 +284,15 @@ static bool view3d_orbit_calc_center(bContext *C, float r_dyn_ofs[3])
is_set = true;
}
- else if (ob_act == NULL || ob_act->mode == OB_MODE_OBJECT) {
+ else if (ob_act == NULL || workspace->object_mode == OB_MODE_OBJECT) {
/* object mode use boundbox centers */
- View3D *v3d = CTX_wm_view3d(C);
Base *base;
unsigned int tot = 0;
float select_center[3];
zero_v3(select_center);
- for (base = FIRSTBASE; base; base = base->next) {
- if (TESTBASE(v3d, base)) {
+ for (base = FIRSTBASE(view_layer); base; base = base->next) {
+ if (TESTBASE(base)) {
/* use the boundbox if we can */
Object *ob = base->object;
@@ -373,14 +378,18 @@ static void viewops_data_create(
/* we need the depth info before changing any viewport options */
if (viewops_flag & VIEWOPS_FLAG_DEPTH_NAVIGATE) {
+ EvaluationContext eval_ctx;
+ struct Depsgraph *graph = CTX_data_depsgraph(C);
float fallback_depth_pt[3];
+ CTX_data_eval_ctx(C, &eval_ctx);
+
view3d_operator_needs_opengl(C); /* needed for zbuf drawing */
negate_v3_v3(fallback_depth_pt, rv3d->ofs);
vod->use_dyn_ofs = ED_view3d_autodist(
- vod->scene, vod->ar, vod->v3d,
+ &eval_ctx, graph, vod->ar, vod->v3d,
event->mval, vod->dyn_ofs, true, fallback_depth_pt);
}
else {
@@ -503,8 +512,9 @@ static void viewops_data_create(
static void viewops_data_free(bContext *C, wmOperator *op)
{
ARegion *ar;
+#if 0
Paint *p = BKE_paint_get_active_from_context(C);
-
+#endif
if (op->customdata) {
ViewOpsData *vod = op->customdata;
ar = vod->ar;
@@ -520,7 +530,9 @@ static void viewops_data_free(bContext *C, wmOperator *op)
ar = CTX_wm_region(C);
}
+#if 0
if (p && (p->flags & PAINT_FAST_NAVIGATE))
+#endif
ED_region_tag_redraw(ar);
}
@@ -1789,7 +1801,7 @@ void viewzoom_modal_keymap(wmKeyConfig *keyconf)
* \param zoom_xy: Optionally zoom to window location (coords compatible w/ #wmEvent.x, y). Use when not NULL.
*/
static void view_zoom_to_window_xy_camera(
- Scene *scene, View3D *v3d,
+ Scene *scene, const Depsgraph *depsgraph, View3D *v3d,
ARegion *ar, float dfac, const int zoom_xy[2])
{
RegionView3D *rv3d = ar->regiondata;
@@ -1807,13 +1819,13 @@ static void view_zoom_to_window_xy_camera(
float pt_dst[2];
float delta_px[2];
- ED_view3d_calc_camera_border(scene, ar, v3d, rv3d, &camera_frame_old, false);
+ ED_view3d_calc_camera_border(scene, depsgraph, ar, v3d, rv3d, &camera_frame_old, false);
BLI_rctf_translate(&camera_frame_old, ar->winrct.xmin, ar->winrct.ymin);
rv3d->camzoom = camzoom_new;
CLAMP(rv3d->camzoom, RV3D_CAMZOOM_MIN, RV3D_CAMZOOM_MAX);
- ED_view3d_calc_camera_border(scene, ar, v3d, rv3d, &camera_frame_new, false);
+ ED_view3d_calc_camera_border(scene, depsgraph, ar, v3d, rv3d, &camera_frame_new, false);
BLI_rctf_translate(&camera_frame_new, ar->winrct.xmin, ar->winrct.ymin);
BLI_rctf_transform_pt_v(&camera_frame_new, &camera_frame_old, pt_dst, pt_src);
@@ -1986,7 +1998,7 @@ static void viewzoom_apply_camera(
/* calculate inverted, then invert again (needed because of camera zoom scaling) */
zfac = 1.0f / zfac;
view_zoom_to_window_xy_camera(
- vod->scene, vod->v3d,
+ vod->scene, vod->depsgraph, vod->v3d,
vod->ar, zfac, zoom_to_pos ? vod->prev.event_xy : NULL);
}
@@ -2106,6 +2118,7 @@ static int viewzoom_modal(bContext *C, wmOperator *op, const wmEvent *event)
static int viewzoom_exec(bContext *C, wmOperator *op)
{
+ const Depsgraph *depsgraph = CTX_data_depsgraph(C);
Scene *scene = CTX_data_scene(C);
View3D *v3d;
RegionView3D *rv3d;
@@ -2148,7 +2161,7 @@ static int viewzoom_exec(bContext *C, wmOperator *op)
const float step = 1.2f;
/* this min and max is also in viewmove() */
if (use_cam_zoom) {
- view_zoom_to_window_xy_camera(scene, v3d, ar, step, zoom_xy);
+ view_zoom_to_window_xy_camera(scene, depsgraph, v3d, ar, step, zoom_xy);
}
else {
if (rv3d->dist < dist_range[1]) {
@@ -2159,7 +2172,7 @@ static int viewzoom_exec(bContext *C, wmOperator *op)
else {
const float step = 1.0f / 1.2f;
if (use_cam_zoom) {
- view_zoom_to_window_xy_camera(scene, v3d, ar, step, zoom_xy);
+ view_zoom_to_window_xy_camera(scene, depsgraph, v3d, ar, step, zoom_xy);
}
else {
if (rv3d->dist > dist_range[0]) {
@@ -2692,6 +2705,7 @@ static int view3d_all_exec(bContext *C, wmOperator *op)
ARegion *ar = CTX_wm_region(C);
View3D *v3d = CTX_wm_view3d(C);
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Base *base;
float *curs;
const bool use_all_regions = RNA_boolean_get(op->ptr, "use_all_regions");
@@ -2715,8 +2729,8 @@ static int view3d_all_exec(bContext *C, wmOperator *op)
INIT_MINMAX(min, max);
}
- for (base = scene->base.first; base; base = base->next) {
- if (BASE_VISIBLE(v3d, base)) {
+ for (base = view_layer->object_bases.first; base; base = base->next) {
+ if (BASE_VISIBLE(base)) {
changed = true;
if (skip_camera && base->object == v3d->camera) {
@@ -2779,12 +2793,16 @@ void VIEW3D_OT_view_all(wmOperatorType *ot)
/* like a localview without local!, was centerview() in 2.4x */
static int viewselected_exec(bContext *C, wmOperator *op)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
ARegion *ar = CTX_wm_region(C);
View3D *v3d = CTX_wm_view3d(C);
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
bGPdata *gpd = CTX_data_gpencil_data(C);
const bool is_gp_edit = ((gpd) && (gpd->flag & GP_DATA_STROKE_EDITMODE));
- Object *ob = OBACT;
+ const bool is_face_map = ((is_gp_edit == false) && ar->manipulator_map &&
+ WM_manipulatormap_is_any_selected(ar->manipulator_map));
+ Object *ob = OBACT(view_layer);
Object *obedit = CTX_data_edit_object(C);
float min[3], max[3];
bool ok = false, ok_dist = true;
@@ -2795,27 +2813,17 @@ static int viewselected_exec(bContext *C, wmOperator *op)
const int smooth_viewtx = WM_operator_smooth_viewtx_get(op);
INIT_MINMAX(min, max);
-
- if (is_gp_edit) {
+ if (is_gp_edit || is_face_map) {
ob = NULL;
}
- if (ob && (ob->mode & OB_MODE_WEIGHT_PAINT)) {
- /* hard-coded exception, we look for the one selected armature */
- /* this is weak code this way, we should make a generic active/selection callback interface once... */
- Base *base;
- for (base = scene->base.first; base; base = base->next) {
- if (TESTBASELIB(v3d, base)) {
- if (base->object->type == OB_ARMATURE)
- if (base->object->mode & OB_MODE_POSE)
- break;
- }
+ if (ob && (workspace->object_mode & OB_MODE_WEIGHT_PAINT)) {
+ Object *ob_armature = BKE_object_pose_armature_get_visible(ob, view_layer);
+ if (ob_armature) {
+ ob = ob_armature;
}
- if (base)
- ob = base->object;
}
-
if (is_gp_edit) {
CTX_DATA_BEGIN(C, bGPDstroke *, gps, editable_gpencil_strokes)
{
@@ -2828,20 +2836,23 @@ static int viewselected_exec(bContext *C, wmOperator *op)
}
CTX_DATA_END;
}
+ else if (is_face_map) {
+ ok = WM_manipulatormap_minmax(ar->manipulator_map, true, true, min, max);
+ }
else if (obedit) {
ok = ED_view3d_minmax_verts(obedit, min, max); /* only selected */
}
- else if (ob && (ob->mode & OB_MODE_POSE)) {
+ else if (ob && (workspace->object_mode & OB_MODE_POSE)) {
ok = BKE_pose_minmax(ob, min, max, true, true);
}
- else if (BKE_paint_select_face_test(ob)) {
+ else if (BKE_paint_select_face_test(ob, workspace->object_mode)) {
ok = paintface_minmax(ob, min, max);
}
- else if (ob && (ob->mode & OB_MODE_PARTICLE_EDIT)) {
- ok = PE_minmax(scene, min, max);
+ else if (ob && (workspace->object_mode & OB_MODE_PARTICLE_EDIT)) {
+ ok = PE_minmax(scene, view_layer, min, max);
}
else if (ob &&
- (ob->mode & (OB_MODE_SCULPT | OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT)))
+ (workspace->object_mode & (OB_MODE_SCULPT | OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT)))
{
BKE_paint_stroke_get_average(scene, ob, min);
copy_v3_v3(max, min);
@@ -2850,8 +2861,8 @@ static int viewselected_exec(bContext *C, wmOperator *op)
}
else {
Base *base;
- for (base = FIRSTBASE; base; base = base->next) {
- if (TESTBASE(v3d, base)) {
+ for (base = FIRSTBASE(view_layer); base; base = base->next) {
+ if (TESTBASE(base)) {
if (skip_camera && base->object == v3d->camera) {
continue;
@@ -2948,13 +2959,13 @@ static int view_lock_to_active_exec(bContext *C, wmOperator *UNUSED(op))
Object *obact = CTX_data_active_object(C);
if (v3d) {
-
ED_view3d_lock_clear(v3d);
v3d->ob_centre = obact; /* can be NULL */
if (obact && obact->type == OB_ARMATURE) {
- if (obact->mode & OB_MODE_POSE) {
+ const WorkSpace *workspace = CTX_wm_workspace(C);
+ if (workspace->object_mode & OB_MODE_POSE) {
bPoseChannel *pcham_act = BKE_pose_channel_active(obact);
if (pcham_act) {
BLI_strncpy(v3d->ob_centre_bone, pcham_act->name, sizeof(v3d->ob_centre_bone));
@@ -3049,18 +3060,21 @@ static int viewcenter_pick_invoke(bContext *C, wmOperator *op, const wmEvent *ev
{
View3D *v3d = CTX_wm_view3d(C);
RegionView3D *rv3d = CTX_wm_region_view3d(C);
- Scene *scene = CTX_data_scene(C);
ARegion *ar = CTX_wm_region(C);
if (rv3d) {
+ EvaluationContext eval_ctx;
+ struct Depsgraph *graph = CTX_data_depsgraph(C);
float new_ofs[3];
const int smooth_viewtx = WM_operator_smooth_viewtx_get(op);
+ CTX_data_eval_ctx(C, &eval_ctx);
+
ED_view3d_smooth_view_force_finish(C, v3d, ar);
view3d_operator_needs_opengl(C);
- if (ED_view3d_autodist(scene, ar, v3d, event->mval, new_ofs, false, NULL)) {
+ if (ED_view3d_autodist(&eval_ctx, graph, ar, v3d, event->mval, new_ofs, false, NULL)) {
/* pass */
}
else {
@@ -3100,6 +3114,7 @@ void VIEW3D_OT_view_center_pick(wmOperatorType *ot)
static int view3d_center_camera_exec(bContext *C, wmOperator *UNUSED(op)) /* was view3d_home() in 2.4x */
{
+ const Depsgraph *depsgraph = CTX_data_depsgraph(C);
Scene *scene = CTX_data_scene(C);
float xfac, yfac;
float size[2];
@@ -3114,7 +3129,7 @@ static int view3d_center_camera_exec(bContext *C, wmOperator *UNUSED(op)) /* was
rv3d->camdx = rv3d->camdy = 0.0f;
- ED_view3d_calc_camera_border_size(scene, ar, v3d, rv3d, size);
+ ED_view3d_calc_camera_border_size(scene, depsgraph, ar, v3d, rv3d, size);
/* 4px is just a little room from the edge of the area */
xfac = (float)ar->winx / (float)(size[0] + 4);
@@ -3183,6 +3198,7 @@ void VIEW3D_OT_view_center_lock(wmOperatorType *ot)
static int render_border_exec(bContext *C, wmOperator *op)
{
+ const Depsgraph *depsgraph = CTX_data_depsgraph(C);
View3D *v3d = CTX_wm_view3d(C);
ARegion *ar = CTX_wm_region(C);
RegionView3D *rv3d = ED_view3d_context_rv3d(C);
@@ -3203,7 +3219,7 @@ static int render_border_exec(bContext *C, wmOperator *op)
/* calculate range */
if (rv3d->persp == RV3D_CAMOB) {
- ED_view3d_calc_camera_border(scene, ar, v3d, rv3d, &vb, false);
+ ED_view3d_calc_camera_border(scene, depsgraph, ar, v3d, rv3d, &vb, false);
}
else {
vb.xmin = 0;
@@ -3337,10 +3353,10 @@ void VIEW3D_OT_clear_render_border(wmOperatorType *ot)
static int view3d_zoom_border_exec(bContext *C, wmOperator *op)
{
+ EvaluationContext eval_ctx;
ARegion *ar = CTX_wm_region(C);
View3D *v3d = CTX_wm_view3d(C);
RegionView3D *rv3d = CTX_wm_region_view3d(C);
- Scene *scene = CTX_data_scene(C);
const int smooth_viewtx = WM_operator_smooth_viewtx_get(op);
/* Zooms in on a border drawn by the user */
@@ -3353,13 +3369,14 @@ static int view3d_zoom_border_exec(bContext *C, wmOperator *op)
float new_ofs[3];
/* ZBuffer depth vars */
- bglMats mats;
float depth_close = FLT_MAX;
- double cent[2], p[3];
+ float cent[2], p[3];
/* note; otherwise opengl won't work */
view3d_operator_needs_opengl(C);
+ CTX_data_eval_ctx(C, &eval_ctx);
+
/* get border select values using rna */
WM_operator_properties_border_to_rcti(op, &rect);
@@ -3369,8 +3386,7 @@ static int view3d_zoom_border_exec(bContext *C, wmOperator *op)
ED_view3d_dist_range_get(v3d, dist_range);
/* Get Z Depths, needed for perspective, nice for ortho */
- bgl_get_mats(&mats);
- ED_view3d_draw_depth(scene, ar, v3d, true);
+ ED_view3d_draw_depth(&eval_ctx, CTX_data_depsgraph(C), ar, v3d, true);
{
/* avoid allocating the whole depth buffer */
@@ -3385,11 +3401,11 @@ static int view3d_zoom_border_exec(bContext *C, wmOperator *op)
MEM_SAFE_FREE(depth_temp.depths);
}
- cent[0] = (((double)rect.xmin) + ((double)rect.xmax)) / 2;
- cent[1] = (((double)rect.ymin) + ((double)rect.ymax)) / 2;
+ cent[0] = (((float)rect.xmin) + ((float)rect.xmax)) / 2;
+ cent[1] = (((float)rect.ymin) + ((float)rect.ymax)) / 2;
if (rv3d->is_persp) {
- double p_corner[3];
+ float p_corner[3];
/* no depths to use, we cant do anything! */
if (depth_close == FLT_MAX) {
@@ -3397,23 +3413,14 @@ static int view3d_zoom_border_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
/* convert border to 3d coordinates */
- if ((!gluUnProject(cent[0], cent[1], depth_close,
- mats.modelview, mats.projection, (GLint *)mats.viewport,
- &p[0], &p[1], &p[2])) ||
- (!gluUnProject((double)rect.xmin, (double)rect.ymin, depth_close,
- mats.modelview, mats.projection, (GLint *)mats.viewport,
- &p_corner[0], &p_corner[1], &p_corner[2])))
+ if ((!ED_view3d_unproject(ar, cent[0], cent[1], depth_close, p)) ||
+ (!ED_view3d_unproject(ar, rect.xmin, rect.ymin, depth_close, p_corner)))
{
return OPERATOR_CANCELLED;
}
- dvec[0] = p[0] - p_corner[0];
- dvec[1] = p[1] - p_corner[1];
- dvec[2] = p[2] - p_corner[2];
-
- new_ofs[0] = -p[0];
- new_ofs[1] = -p[1];
- new_ofs[2] = -p[2];
+ sub_v3_v3v3(dvec, p, p_corner);
+ negate_v3_v3(new_ofs, p);
new_dist = len_v3(dvec);
@@ -3428,13 +3435,8 @@ static int view3d_zoom_border_exec(bContext *C, wmOperator *op)
new_dist = rv3d->dist;
/* convert the drawn rectangle into 3d space */
- if (depth_close != FLT_MAX && gluUnProject(cent[0], cent[1], depth_close,
- mats.modelview, mats.projection, (GLint *)mats.viewport,
- &p[0], &p[1], &p[2]))
- {
- new_ofs[0] = -p[0];
- new_ofs[1] = -p[1];
- new_ofs[2] = -p[2];
+ if (depth_close != FLT_MAX && ED_view3d_unproject(ar, cent[0], cent[1], depth_close, p)) {
+ negate_v3_v3(new_ofs, p);
}
else {
float mval_f[2];
@@ -3524,13 +3526,13 @@ void VIEW3D_OT_zoom_border(wmOperatorType *ot)
* Sets the view to 1:1 camera/render-pixel.
* \{ */
-static void view3d_set_1_to_1_viewborder(Scene *scene, ARegion *ar, View3D *v3d)
+static void view3d_set_1_to_1_viewborder(Scene *scene, const Depsgraph *depsgraph, ARegion *ar, View3D *v3d)
{
RegionView3D *rv3d = ar->regiondata;
float size[2];
int im_width = (scene->r.size * scene->r.xsch) / 100;
- ED_view3d_calc_camera_border_size(scene, ar, v3d, rv3d, size);
+ ED_view3d_calc_camera_border_size(scene, depsgraph, ar, v3d, rv3d, size);
rv3d->camzoom = BKE_screen_view3d_zoom_from_fac((float)im_width / size[0]);
CLAMP(rv3d->camzoom, RV3D_CAMZOOM_MIN, RV3D_CAMZOOM_MAX);
@@ -3538,6 +3540,7 @@ static void view3d_set_1_to_1_viewborder(Scene *scene, ARegion *ar, View3D *v3d)
static int view3d_zoom_1_to_1_camera_exec(bContext *C, wmOperator *UNUSED(op))
{
+ const Depsgraph *depsgraph = CTX_data_depsgraph(C);
Scene *scene = CTX_data_scene(C);
View3D *v3d;
@@ -3546,7 +3549,7 @@ static int view3d_zoom_1_to_1_camera_exec(bContext *C, wmOperator *UNUSED(op))
/* no NULL check is needed, poll checks */
ED_view3d_context_user_region(C, &v3d, &ar);
- view3d_set_1_to_1_viewborder(scene, ar, v3d);
+ view3d_set_1_to_1_viewborder(scene, depsgraph, ar, v3d);
WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, v3d);
@@ -3684,6 +3687,7 @@ static int viewnumpad_exec(bContext *C, wmOperator *op)
ARegion *ar;
RegionView3D *rv3d;
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
static int perspo = RV3D_PERSP;
int viewnum, nextperspo;
bool align_active;
@@ -3718,7 +3722,7 @@ static int viewnumpad_exec(bContext *C, wmOperator *op)
/* lastview - */
if (rv3d->persp != RV3D_CAMOB) {
- Object *ob = OBACT;
+ Object *ob = OBACT(view_layer);
if (!rv3d->smooth_timer) {
/* store settings of current view before allowing overwriting with camera view
@@ -3753,7 +3757,7 @@ static int viewnumpad_exec(bContext *C, wmOperator *op)
v3d->camera = ob;
if (v3d->camera == NULL)
- v3d->camera = BKE_scene_camera_find(scene);
+ v3d->camera = BKE_view_layer_camera_find(view_layer);
/* couldnt find any useful camera, bail out */
if (v3d->camera == NULL)
@@ -4319,11 +4323,11 @@ void VIEW3D_OT_navigate(wmOperatorType *ot)
/** \name Background Image Add Operator
* \{ */
-static BGpic *background_image_add(bContext *C)
+static CameraBGImage *background_image_add(bContext *C)
{
- View3D *v3d = CTX_wm_view3d(C);
+ Camera *cam = CTX_data_pointer_get_type(C, "camera", &RNA_Camera).data;
- return ED_view3d_background_image_new(v3d);
+ return BKE_camera_background_image_new(cam);
}
static int background_image_add_exec(bContext *C, wmOperator *UNUSED(op))
@@ -4335,9 +4339,9 @@ static int background_image_add_exec(bContext *C, wmOperator *UNUSED(op))
static int background_image_add_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
{
- View3D *v3d = CTX_wm_view3d(C);
+ Camera *cam = CTX_data_pointer_get_type(C, "camera", &RNA_Camera).data;
Image *ima;
- BGpic *bgpic;
+ CameraBGImage *bgpic;
ima = (Image *)WM_operator_drop_load_path(C, op, ID_IM);
/* may be NULL, continue anyway */
@@ -4345,9 +4349,9 @@ static int background_image_add_invoke(bContext *C, wmOperator *op, const wmEven
bgpic = background_image_add(C);
bgpic->ima = ima;
- v3d->flag |= V3D_DISPBGPICS;
+ cam->flag |= CAM_SHOW_BG_IMAGE;
- WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, v3d);
+ WM_event_add_notifier(C, NC_CAMERA | ND_DRAW_RENDER_VIEWPORT, cam);
return OPERATOR_FINISHED;
}
@@ -4364,7 +4368,7 @@ void VIEW3D_OT_background_image_add(wmOperatorType *ot)
/* api callbacks */
ot->invoke = background_image_add_invoke;
ot->exec = background_image_add_exec;
- ot->poll = ED_operator_view3d_active;
+ ot->poll = ED_operator_camera;
/* flags */
ot->flag = OPTYPE_UNDO;
@@ -4384,21 +4388,21 @@ void VIEW3D_OT_background_image_add(wmOperatorType *ot)
static int background_image_remove_exec(bContext *C, wmOperator *op)
{
- View3D *v3d = CTX_wm_view3d(C);
+ Camera *cam = CTX_data_pointer_get_type(C, "camera", &RNA_Camera).data;
const int index = RNA_int_get(op->ptr, "index");
- BGpic *bgpic_rem = BLI_findlink(&v3d->bgpicbase, index);
+ CameraBGImage *bgpic_rem = BLI_findlink(&cam->bg_images, index);
if (bgpic_rem) {
- if (bgpic_rem->source == V3D_BGPIC_IMAGE) {
+ if (bgpic_rem->source == CAM_BGIMG_SOURCE_IMAGE) {
id_us_min((ID *)bgpic_rem->ima);
}
- else if (bgpic_rem->source == V3D_BGPIC_MOVIE) {
+ else if (bgpic_rem->source == CAM_BGIMG_SOURCE_MOVIE) {
id_us_min((ID *)bgpic_rem->clip);
}
- ED_view3d_background_image_remove(v3d, bgpic_rem);
+ BKE_camera_background_image_remove(cam, bgpic_rem);
- WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, v3d);
+ WM_event_add_notifier(C, NC_CAMERA | ND_DRAW_RENDER_VIEWPORT, cam);
return OPERATOR_FINISHED;
}
else {
@@ -4415,7 +4419,7 @@ void VIEW3D_OT_background_image_remove(wmOperatorType *ot)
/* api callbacks */
ot->exec = background_image_remove_exec;
- ot->poll = ED_operator_view3d_active;
+ ot->poll = ED_operator_camera;
/* flags */
ot->flag = 0;
@@ -4455,9 +4459,8 @@ void ED_view3d_clipping_local(RegionView3D *rv3d, float mat[4][4])
static int view3d_clipping_exec(bContext *C, wmOperator *op)
{
+ ARegion *ar = CTX_wm_region(C);
RegionView3D *rv3d = CTX_wm_region_view3d(C);
- ViewContext vc;
- bglMats mats;
rcti rect;
WM_operator_properties_border_to_rcti(op, &rect);
@@ -4465,12 +4468,8 @@ static int view3d_clipping_exec(bContext *C, wmOperator *op)
rv3d->rflag |= RV3D_CLIPPING;
rv3d->clipbb = MEM_callocN(sizeof(BoundBox), "clipbb");
- /* note; otherwise opengl won't work */
- view3d_operator_needs_opengl(C);
-
- view3d_set_viewcontext(C, &vc);
- view3d_get_transformation(vc.ar, vc.rv3d, NULL, &mats); /* NULL because we don't want it in object space */
- ED_view3d_clipping_calc(rv3d->clipbb, rv3d->clip, &mats, &rect);
+ /* NULL object because we don't want it in object space */
+ ED_view3d_clipping_calc(rv3d->clipbb, rv3d->clip, ar, NULL, &rect);
return OPERATOR_FINISHED;
}
@@ -4525,7 +4524,6 @@ void VIEW3D_OT_clip_border(wmOperatorType *ot)
/* note: cannot use event->mval here (called by object_add() */
void ED_view3d_cursor3d_position(bContext *C, float fp[3], const int mval[2])
{
- Scene *scene = CTX_data_scene(C);
ARegion *ar = CTX_wm_region(C);
View3D *v3d = CTX_wm_view3d(C);
RegionView3D *rv3d = ar->regiondata;
@@ -4547,9 +4545,15 @@ void ED_view3d_cursor3d_position(bContext *C, float fp[3], const int mval[2])
}
if (U.uiflag & USER_DEPTH_CURSOR) { /* maybe this should be accessed some other way */
+ EvaluationContext eval_ctx;
+ struct Depsgraph *graph = CTX_data_depsgraph(C);
+
+ CTX_data_eval_ctx(C, &eval_ctx);
+
view3d_operator_needs_opengl(C);
- if (ED_view3d_autodist(scene, ar, v3d, mval, fp, true, NULL))
+ if (ED_view3d_autodist(&eval_ctx, graph, ar, v3d, mval, fp, true, NULL)) {
depth_used = true;
+ }
}
if (depth_used == false) {
@@ -4626,50 +4630,6 @@ void VIEW3D_OT_cursor3d(wmOperatorType *ot)
/** \} */
/* -------------------------------------------------------------------- */
-/** \name Transform Manipulator Operator
- * \{ */
-
-static int manipulator_invoke(bContext *C, wmOperator *op, const wmEvent *event)
-{
- View3D *v3d = CTX_wm_view3d(C);
-
- if (!(v3d->twflag & V3D_USE_MANIPULATOR)) return OPERATOR_PASS_THROUGH;
- if (!(v3d->twflag & V3D_DRAW_MANIPULATOR)) return OPERATOR_PASS_THROUGH;
-
- /* note; otherwise opengl won't work */
- view3d_operator_needs_opengl(C);
-
- if (BIF_do_manipulator(C, event, op) == 0)
- return OPERATOR_PASS_THROUGH;
-
- return OPERATOR_FINISHED;
-}
-
-void VIEW3D_OT_manipulator(wmOperatorType *ot)
-{
- PropertyRNA *prop;
-
- /* identifiers */
- ot->name = "3D Manipulator";
- ot->description = "Manipulate selected item by axis";
- ot->idname = "VIEW3D_OT_manipulator";
-
- /* api callbacks */
- ot->invoke = manipulator_invoke;
-
- ot->poll = ED_operator_view3d_active;
-
- /* properties to pass to transform */
- Transform_Properties(ot, P_CONSTRAINT);
-
- prop = RNA_def_boolean(ot->srna, "use_planar_constraint", false, "Planar Constraint", "Limit the transformation to the "
- "two axes that have not been clicked (translate/scale only)");
- RNA_def_property_flag(prop, PROP_SKIP_SAVE | PROP_HIDDEN);
-}
-
-/** \} */
-
-/* -------------------------------------------------------------------- */
/** \name Enable Transform Manipulator Operator
* \{ */
diff --git a/source/blender/editors/space_view3d/view3d_fly.c b/source/blender/editors/space_view3d/view3d_fly.c
index eda780d01a7..d2aa19509d7 100644
--- a/source/blender/editors/space_view3d/view3d_fly.c
+++ b/source/blender/editors/space_view3d/view3d_fly.c
@@ -56,6 +56,10 @@
#include "UI_interface.h"
#include "UI_resources.h"
+#include "GPU_immediate.h"
+
+#include "DEG_depsgraph.h"
+
#include "view3d_intern.h" /* own include */
/* NOTE: these defines are saved in keymap files, do not change values but just add new ones */
@@ -191,6 +195,7 @@ typedef struct FlyInfo {
RegionView3D *rv3d;
View3D *v3d;
ARegion *ar;
+ const struct Depsgraph *depsgraph;
Scene *scene;
wmTimer *timer; /* needed for redraws */
@@ -240,7 +245,7 @@ static void drawFlyPixel(const struct bContext *UNUSED(C), ARegion *UNUSED(ar),
float x1, x2, y1, y2;
if (fly->scene->camera) {
- ED_view3d_calc_camera_border(fly->scene, fly->ar, fly->v3d, fly->rv3d, &viewborder, false);
+ ED_view3d_calc_camera_border(fly->scene, fly->depsgraph, fly->ar, fly->v3d, fly->rv3d, &viewborder, false);
xoff = viewborder.xmin;
yoff = viewborder.ymin;
}
@@ -257,36 +262,45 @@ static void drawFlyPixel(const struct bContext *UNUSED(C), ARegion *UNUSED(ar),
x2 = xoff + 0.55f * fly->width;
y2 = yoff + 0.55f * fly->height;
- UI_ThemeColor(TH_VIEW_OVERLAY);
- glBegin(GL_LINES);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ immUniformThemeColor(TH_VIEW_OVERLAY);
+
+ immBegin(GWN_PRIM_LINES, 16);
+
/* bottom left */
- glVertex2f(x1, y1);
- glVertex2f(x1, y1 + 5);
+ immVertex2f(pos, x1, y1);
+ immVertex2f(pos, x1, y1 + 5);
- glVertex2f(x1, y1);
- glVertex2f(x1 + 5, y1);
+ immVertex2f(pos, x1, y1);
+ immVertex2f(pos, x1 + 5, y1);
/* top right */
- glVertex2f(x2, y2);
- glVertex2f(x2, y2 - 5);
+ immVertex2f(pos, x2, y2);
+ immVertex2f(pos, x2, y2 - 5);
- glVertex2f(x2, y2);
- glVertex2f(x2 - 5, y2);
+ immVertex2f(pos, x2, y2);
+ immVertex2f(pos, x2 - 5, y2);
/* top left */
- glVertex2f(x1, y2);
- glVertex2f(x1, y2 - 5);
+ immVertex2f(pos, x1, y2);
+ immVertex2f(pos, x1, y2 - 5);
- glVertex2f(x1, y2);
- glVertex2f(x1 + 5, y2);
+ immVertex2f(pos, x1, y2);
+ immVertex2f(pos, x1 + 5, y2);
/* bottom right */
- glVertex2f(x2, y1);
- glVertex2f(x2, y1 + 5);
+ immVertex2f(pos, x2, y1);
+ immVertex2f(pos, x2, y1 + 5);
+
+ immVertex2f(pos, x2, y1);
+ immVertex2f(pos, x2 - 5, y1);
- glVertex2f(x2, y1);
- glVertex2f(x2 - 5, y1);
- glEnd();
+ immEnd();
+ immUnbindProgram();
}
static void fly_update_header(bContext *C, wmOperator *op, FlyInfo *fly)
@@ -332,6 +346,10 @@ enum {
static bool initFlyInfo(bContext *C, FlyInfo *fly, wmOperator *op, const wmEvent *event)
{
wmWindow *win = CTX_wm_window(C);
+ EvaluationContext eval_ctx;
+
+ CTX_data_eval_ctx(C, &eval_ctx);
+
rctf viewborder;
float upvec[3]; /* tmp */
@@ -340,6 +358,7 @@ static bool initFlyInfo(bContext *C, FlyInfo *fly, wmOperator *op, const wmEvent
fly->rv3d = CTX_wm_region_view3d(C);
fly->v3d = CTX_wm_view3d(C);
fly->ar = CTX_wm_region(C);
+ fly->depsgraph = CTX_data_depsgraph(C);
fly->scene = CTX_data_scene(C);
#ifdef NDOF_FLY_DEBUG
@@ -406,12 +425,12 @@ static bool initFlyInfo(bContext *C, FlyInfo *fly, wmOperator *op, const wmEvent
}
fly->v3d_camera_control = ED_view3d_cameracontrol_acquire(
- fly->scene, fly->v3d, fly->rv3d,
+ &eval_ctx, fly->scene, fly->v3d, fly->rv3d,
(U.uiflag & USER_CAM_LOCK_NO_PARENT) == 0);
/* calculate center */
if (fly->scene->camera) {
- ED_view3d_calc_camera_border(fly->scene, fly->ar, fly->v3d, fly->rv3d, &viewborder, false);
+ ED_view3d_calc_camera_border(fly->scene, fly->depsgraph, fly->ar, fly->v3d, fly->rv3d, &viewborder, false);
fly->width = BLI_rctf_size_x(&viewborder);
fly->height = BLI_rctf_size_y(&viewborder);
diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c
index 11dc4d10f2a..5f38cbddce0 100644
--- a/source/blender/editors/space_view3d/view3d_header.c
+++ b/source/blender/editors/space_view3d/view3d_header.c
@@ -41,11 +41,12 @@
#include "BLT_translation.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_main.h"
#include "BKE_screen.h"
#include "BKE_editmesh.h"
+#include "DEG_depsgraph.h"
+
#include "RNA_access.h"
#include "RNA_define.h"
#include "RNA_enum_types.h"
@@ -71,11 +72,10 @@ static void do_view3d_header_buttons(bContext *C, void *arg, int event);
/* XXX quickly ported across */
static void handle_view3d_lock(bContext *C)
{
- Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
ScrArea *sa = CTX_wm_area(C);
View3D *v3d = CTX_wm_view3d(C);
-
+
if (v3d != NULL && sa != NULL) {
if (v3d->localvd == NULL && v3d->scenelock && sa->spacetype == SPACE_VIEW3D) {
/* copy to scene */
@@ -83,10 +83,6 @@ static void handle_view3d_lock(bContext *C)
scene->layact = v3d->layact;
scene->camera = v3d->camera;
- /* not through notifier, listener don't have context
- * and non-open screens or spaces need to be updated too */
- BKE_screen_view3d_main_sync(&bmain->screen, scene);
-
/* notifiers for scene update */
WM_event_add_notifier(C, NC_SCENE | ND_LAYER, scene);
}
@@ -97,7 +93,7 @@ static void handle_view3d_lock(bContext *C)
* layer code is on three levels actually:
* - here for operator
* - uiTemplateLayers in interface/ code for buttons
- * - ED_view3d_scene_layer_set for RNA
+ * - ED_view3d_view_layer_set for RNA
*/
static void view3d_layers_editmode_ensure(Scene *scene, View3D *v3d)
{
@@ -172,7 +168,7 @@ static int view3d_layers_exec(bContext *C, wmOperator *op)
if (v3d->scenelock) handle_view3d_lock(C);
- DAG_on_visible_update(CTX_data_main(C), false);
+ DEG_on_visible_update(CTX_data_main(C), false);
ED_area_tag_redraw(sa);
@@ -280,19 +276,23 @@ void uiTemplateEditModeSelection(uiLayout *layout, struct bContext *C)
void uiTemplateHeader3D(uiLayout *layout, struct bContext *C)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
bScreen *screen = CTX_wm_screen(C);
ScrArea *sa = CTX_wm_area(C);
View3D *v3d = sa->spacedata.first;
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
ToolSettings *ts = CTX_data_tool_settings(C);
PointerRNA v3dptr, toolsptr, sceneptr;
- Object *ob = OBACT;
+ Object *ob = OBACT(view_layer);
Object *obedit = CTX_data_edit_object(C);
bGPdata *gpd = CTX_data_gpencil_data(C);
uiBlock *block;
uiLayout *row;
- bool is_paint = false;
- int modeselect;
+ bool is_paint = (
+ ob && !(gpd && (gpd->flag & GP_DATA_STROKE_EDITMODE)) &&
+ ELEM(workspace->object_mode,
+ OB_MODE_SCULPT, OB_MODE_VERTEX_PAINT, OB_MODE_WEIGHT_PAINT, OB_MODE_TEXTURE_PAINT));
RNA_pointer_create(&screen->id, &RNA_SpaceView3D, v3d, &v3dptr);
RNA_pointer_create(&scene->id, &RNA_ToolSettings, ts, &toolsptr);
@@ -303,54 +303,21 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C)
/* other buttons: */
UI_block_emboss_set(block, UI_EMBOSS);
-
- /* mode */
- if ((gpd) && (gpd->flag & GP_DATA_STROKE_EDITMODE)) {
- modeselect = OB_MODE_GPENCIL;
- }
- else if (ob) {
- modeselect = ob->mode;
- is_paint = ELEM(ob->mode, OB_MODE_SCULPT, OB_MODE_VERTEX_PAINT, OB_MODE_WEIGHT_PAINT, OB_MODE_TEXTURE_PAINT);
- }
- else {
- modeselect = OB_MODE_OBJECT;
- }
-
- row = uiLayoutRow(layout, false);
- {
- const EnumPropertyItem *item = rna_enum_object_mode_items;
- const char *name = "";
- int icon = ICON_OBJECT_DATAMODE;
-
- while (item->identifier) {
- if (item->value == modeselect && item->identifier[0]) {
- name = IFACE_(item->name);
- icon = item->icon;
- break;
- }
- item++;
- }
-
- uiItemMenuEnumO(row, C, "OBJECT_OT_mode_set", "mode", name, icon);
- }
-
- /* Draw type */
- uiItemR(layout, &v3dptr, "viewport_shade", UI_ITEM_R_ICON_ONLY, "", ICON_NONE);
row = uiLayoutRow(layout, true);
uiItemR(row, &v3dptr, "pivot_point", UI_ITEM_R_ICON_ONLY, "", ICON_NONE);
- if (!ob || ELEM(ob->mode, OB_MODE_OBJECT, OB_MODE_POSE, OB_MODE_WEIGHT_PAINT)) {
+ if (!ob || ELEM(workspace->object_mode, OB_MODE_OBJECT, OB_MODE_POSE, OB_MODE_WEIGHT_PAINT)) {
uiItemR(row, &v3dptr, "use_pivot_point_align", UI_ITEM_R_ICON_ONLY, "", ICON_NONE);
}
if (obedit == NULL && is_paint) {
/* Manipulators aren't used in paint modes */
- if (!ELEM(ob->mode, OB_MODE_SCULPT, OB_MODE_PARTICLE_EDIT)) {
+ if (!ELEM(workspace->object_mode, OB_MODE_SCULPT, OB_MODE_PARTICLE_EDIT)) {
/* masks aren't used for sculpt and particle painting */
PointerRNA meshptr;
RNA_pointer_create(ob->data, &RNA_Mesh, ob->data, &meshptr);
- if (ob->mode & (OB_MODE_TEXTURE_PAINT)) {
+ if (workspace->object_mode & (OB_MODE_TEXTURE_PAINT)) {
uiItemR(layout, &meshptr, "use_paint_mask", UI_ITEM_R_ICON_ONLY, "", ICON_NONE);
}
else {
@@ -364,18 +331,13 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C)
/* Transform widget / manipulators */
row = uiLayoutRow(layout, true);
uiItemR(row, &v3dptr, "show_manipulator", UI_ITEM_R_ICON_ONLY, "", ICON_NONE);
- if (v3d->twflag & V3D_USE_MANIPULATOR) {
+ if (v3d->twflag & V3D_MANIPULATOR_DRAW) {
uiItemR(row, &v3dptr, "transform_manipulators", UI_ITEM_R_ICON_ONLY, "", ICON_NONE);
}
uiItemR(row, &v3dptr, "transform_orientation", 0, "", ICON_NONE);
}
if (obedit == NULL && v3d->localvd == NULL) {
- unsigned int ob_lay = ob ? ob->lay : 0;
-
- /* Layers */
- uiTemplateLayers(layout, v3d->scenelock ? &sceneptr : &v3dptr, "layers", &v3dptr, "layers_used", ob_lay);
-
/* Scene lock */
uiItemR(layout, &v3dptr, "lock_camera_and_layers", UI_ITEM_R_ICON_ONLY, "", ICON_NONE);
}
diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h
index 6237bfe6693..0b913ad179d 100644
--- a/source/blender/editors/space_view3d/view3d_intern.h
+++ b/source/blender/editors/space_view3d/view3d_intern.h
@@ -37,7 +37,9 @@
struct ARegion;
struct ARegionType;
+struct Base;
struct BoundBox;
+struct Gwn_Batch;
struct DerivedMesh;
struct Object;
struct SmokeDomainSettings;
@@ -46,9 +48,13 @@ struct bContext;
struct bMotionPath;
struct bPoseChannel;
struct Mesh;
+struct ViewLayer;
struct wmOperatorType;
-struct wmWindowManager;
struct wmKeyConfig;
+struct wmManipulatorGroupType;
+struct wmManipulatorType;
+struct wmWindowManager;
+struct EvaluationContext;
/* drawing flags: */
enum {
@@ -99,7 +105,6 @@ void VIEW3D_OT_view_orbit(struct wmOperatorType *ot);
void VIEW3D_OT_view_roll(struct wmOperatorType *ot);
void VIEW3D_OT_clip_border(struct wmOperatorType *ot);
void VIEW3D_OT_cursor3d(struct wmOperatorType *ot);
-void VIEW3D_OT_manipulator(struct wmOperatorType *ot);
void VIEW3D_OT_enable_manipulator(struct wmOperatorType *ot);
void VIEW3D_OT_render_border(struct wmOperatorType *ot);
void VIEW3D_OT_clear_render_border(struct wmOperatorType *ot);
@@ -144,16 +149,34 @@ void draw_motion_paths_cleanup(View3D *v3d);
/* drawobject.c */
void draw_object(
- Scene *scene, struct ARegion *ar, View3D *v3d,
- Base *base, const short dflag);
+ const struct EvaluationContext *eval_ctx, Scene *scene, struct ViewLayer *view_layer, struct ARegion *ar, View3D *v3d,
+ struct Base *base, const short dflag);
void draw_object_select(
- Scene *scene, ARegion *ar, View3D *v3d,
+ const struct EvaluationContext *eval_ctx, Scene *scene, struct ViewLayer *view_layer, struct ARegion *ar, View3D *v3d,
Base *base, const short dflag);
-bool draw_glsl_material(Scene *scene, struct Object *ob, View3D *v3d, const char dt);
-void draw_object_instance(Scene *scene, View3D *v3d, RegionView3D *rv3d, struct Object *ob, const char dt, int outline);
-void draw_object_backbufsel(Scene *scene, View3D *v3d, RegionView3D *rv3d, struct Object *ob);
-void drawaxes(const float viewmat_local[4][4], float size, char drawtype);
+void draw_mesh_object_outline(
+ const struct EvaluationContext *eval_ctx, View3D *v3d,
+ struct Object *ob, struct DerivedMesh *dm, const unsigned char ob_wire_col[4]);
+
+bool draw_glsl_material(
+ const struct EvaluationContext *eval_ctx, Scene *scene, struct ViewLayer *view_layer,
+ struct Object *ob, View3D *v3d, const char dt);
+void draw_object_instance(const struct EvaluationContext *eval_ctx, Scene *scene, struct ViewLayer *view_layer, View3D *v3d, RegionView3D *rv3d, struct Object *ob, const char dt, int outline, const float wire_col[4]);
+void draw_object_backbufsel(const struct EvaluationContext *eval_ctx, Scene *scene, View3D *v3d, RegionView3D *rv3d, struct Object *ob);
+
+void draw_object_wire_color(
+ const struct EvaluationContext *eval_ctx, Scene *scene, struct ViewLayer *,
+ Base *base, unsigned char r_ob_wire_col[4]);
+void drawaxes(const float viewmat_local[4][4], float size, char drawtype, const unsigned char color[4]);
+void drawlamp(View3D *v3d, RegionView3D *rv3d, Base *base,
+ const char dt, const short dflag, const unsigned char ob_wire_col[4],
+ const bool is_obact);
+void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base,
+ const short dflag, const unsigned char ob_wire_col[4]);
+void drawspeaker(const unsigned char ob_wire_col[3]);
+void draw_bounding_volume(struct Object *ob, char type, const unsigned char ob_wire_col[4]);
+void draw_rigidbody_shape(struct Object *ob, const unsigned char ob_wire_col[4]);
void view3d_cached_text_draw_begin(void);
void view3d_cached_text_draw_add(const float co[3],
@@ -175,12 +198,12 @@ int view3d_effective_drawtype(const struct View3D *v3d);
/* drawarmature.c */
bool draw_armature(
- Scene *scene, View3D *v3d, ARegion *ar, Base *base,
+ const struct EvaluationContext *eval_ctx, Scene *scene, struct ViewLayer *view_layer, View3D *v3d, ARegion *ar, Base *base,
const short dt, const short dflag, const unsigned char ob_wire_col[4],
const bool is_outline);
/* drawmesh.c */
-void draw_mesh_textured(Scene *scene, View3D *v3d, RegionView3D *rv3d,
+void draw_mesh_textured(Scene *scene, struct ViewLayer *view_layer, View3D *v3d, RegionView3D *rv3d,
struct Object *ob, struct DerivedMesh *dm, const int draw_flags);
void draw_mesh_face_select(
struct RegionView3D *rv3d, struct Mesh *me, struct DerivedMesh *dm,
@@ -193,27 +216,35 @@ void draw_mesh_paint_vcolor_faces(struct DerivedMesh *dm, const bool use_light,
void draw_mesh_paint_weight_edges(RegionView3D *rv3d, struct DerivedMesh *dm,
const bool use_depth, const bool use_alpha,
void *edgemask_cb, void *user_data);
-void draw_mesh_paint(View3D *v3d, RegionView3D *rv3d,
- struct Object *ob, struct DerivedMesh *dm, const int draw_flags);
+void draw_mesh_paint(
+ const struct EvaluationContext *eval_ctx,
+ View3D *v3d, RegionView3D *rv3d,
+ struct Object *ob, struct DerivedMesh *dm, const int draw_flags);
/* drawsimdebug.c */
void draw_sim_debug_data(Scene *scene, View3D *v3d, ARegion *ar);
/* view3d_draw.c */
void view3d_main_region_draw(const struct bContext *C, struct ARegion *ar);
+void view3d_draw_region_info(const struct bContext *C, struct ARegion *ar, const int offset);
void ED_view3d_draw_depth(
- Scene *scene,
+ const struct EvaluationContext *eval_ctx, struct Depsgraph *graph,
struct ARegion *ar, View3D *v3d, bool alphaoverride);
-void ED_view3d_draw_depth_gpencil(Scene *scene, ARegion *ar, View3D *v3d);
+
+/* view3d_draw_legacy.c */
+void view3d_main_region_draw_legacy(const struct bContext *C, struct ARegion *ar);
+void ED_view3d_draw_depth_gpencil(const struct EvaluationContext *eval_ctx, Scene *scene, ARegion *ar, View3D *v3d);
+
void ED_view3d_draw_select_loop(
- ViewContext *vc, Scene *scene, View3D *v3d, ARegion *ar,
+ const struct EvaluationContext *eval_ctx, ViewContext *vc, Scene *scene, struct ViewLayer *view_layer, View3D *v3d, ARegion *ar,
bool use_obedit_skip, bool use_nearest);
-void ED_view3d_after_add(ListBase *lb, Base *base, const short dflag);\
+void ED_view3d_draw_depth_loop(
+ const struct EvaluationContext *eval_ctx, Scene *scene, ARegion *ar, View3D *v3d);
+
+void ED_view3d_after_add(ListBase *lb, Base *base, const short dflag);
-void circf(float x, float y, float rad);
-void circ(float x, float y, float rad);
void view3d_update_depths_rect(struct ARegion *ar, struct ViewDepths *d, struct rcti *rect);
float view3d_depth_near(struct ViewDepths *d);
@@ -228,7 +259,6 @@ void VIEW3D_OT_smoothview(struct wmOperatorType *ot);
void VIEW3D_OT_camera_to_view(struct wmOperatorType *ot);
void VIEW3D_OT_camera_to_view_selected(struct wmOperatorType *ot);
void VIEW3D_OT_object_as_camera(struct wmOperatorType *ot);
-void VIEW3D_OT_localview(struct wmOperatorType *ot);
void VIEW3D_OT_game_start(struct wmOperatorType *ot);
@@ -257,9 +287,10 @@ void ED_view3d_smooth_view_force_finish(
struct View3D *v3d, struct ARegion *ar);
void view3d_winmatrix_set(
+ const struct Depsgraph *depsgraph,
ARegion *ar, const View3D *v3d, const rcti *rect);
void view3d_viewmatrix_set(
- Scene *scene,
+ const struct EvaluationContext *eval_ctx, Scene *scene,
const View3D *v3d, RegionView3D *rv3d, const float rect_scale[2]);
void fly_modal_keymap(struct wmKeyConfig *keyconf);
@@ -275,7 +306,7 @@ void view3d_buttons_register(struct ARegionType *art);
/* view3d_camera_control.c */
struct View3DCameraControl *ED_view3d_cameracontrol_acquire(
- Scene *scene, View3D *v3d, RegionView3D *rv3d,
+ const struct EvaluationContext *eval_ctx, Scene *scene, View3D *v3d, RegionView3D *rv3d,
const bool use_parent_root);
void ED_view3d_cameracontrol_update(
struct View3DCameraControl *vctrl,
@@ -284,7 +315,7 @@ void ED_view3d_cameracontrol_update(
void ED_view3d_cameracontrol_release(
struct View3DCameraControl *vctrl,
const bool restore);
-Object *ED_view3d_cameracontrol_object_get(
+struct Object *ED_view3d_cameracontrol_object_get(
struct View3DCameraControl *vctrl);
/* view3d_toolbar.c */
@@ -309,6 +340,23 @@ ARegion *view3d_has_tools_region(ScrArea *sa);
extern const char *view3d_context_dir[]; /* doc access */
+/* view3d_widgets.c */
+void VIEW3D_WGT_lamp_spot(struct wmManipulatorGroupType *wgt);
+void VIEW3D_WGT_lamp_area(struct wmManipulatorGroupType *wgt);
+void VIEW3D_WGT_lamp_target(struct wmManipulatorGroupType *wgt);
+void VIEW3D_WGT_camera(struct wmManipulatorGroupType *wgt);
+void VIEW3D_WGT_camera_view(struct wmManipulatorGroupType *wgt);
+void VIEW3D_WGT_force_field(struct wmManipulatorGroupType *wgt);
+void VIEW3D_WGT_empty_image(struct wmManipulatorGroupType *wgt);
+void VIEW3D_WGT_armature_spline(struct wmManipulatorGroupType *wgt);
+void VIEW3D_WGT_navigate(struct wmManipulatorGroupType *wgt);
+
+void VIEW3D_WGT_ruler(struct wmManipulatorGroupType *wgt);
+void VIEW3D_WT_ruler_item(struct wmManipulatorType *wt);
+void VIEW3D_OT_ruler_add(struct wmOperatorType *ot);
+
+void VIEW3D_WT_navigate_rotate(struct wmManipulatorType *wt);
+
/* draw_volume.c */
void draw_smoke_volume(struct SmokeDomainSettings *sds, struct Object *ob,
const float min[3], const float max[3],
@@ -327,5 +375,33 @@ extern unsigned char view3d_camera_border_hack_col[3];
extern bool view3d_camera_border_hack_test;
#endif
-#endif /* __VIEW3D_INTERN_H__ */
+/* temporary for legacy viewport to work */
+void VP_legacy_drawcursor(
+ const struct EvaluationContext *eval_ctx, Scene *scene,
+ struct ViewLayer *view_layer, ARegion *ar, View3D *v3d);
+void VP_legacy_draw_view_axis(RegionView3D *rv3d, const rcti *rect);
+void VP_legacy_draw_viewport_name(ARegion *ar, View3D *v3d, const rcti *rect);
+void VP_legacy_draw_selected_name(Scene *scene, struct Object *ob, eObjectMode object_mode, const rcti *rect);
+void VP_legacy_drawgrid(UnitSettings *unit, ARegion *ar, View3D *v3d, const char **grid_unit);
+void VP_legacy_drawfloor(Scene *scene, View3D *v3d, const char **grid_unit, bool write_depth);
+void VP_legacy_view3d_main_region_setup_view(const struct EvaluationContext *eval_ctx, Scene *scene, View3D *v3d, ARegion *ar, float viewmat[4][4], float winmat[4][4]);
+bool VP_legacy_view3d_stereo3d_active(struct wmWindow *win, Scene *scene, View3D *v3d, RegionView3D *rv3d);
+void VP_legacy_view3d_stereo3d_setup(const struct EvaluationContext *eval_ctx, Scene *scene, View3D *v3d, ARegion *ar);
+void draw_dupli_objects(const struct EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, ARegion *ar, View3D *v3d, Base *base);
+bool VP_legacy_use_depth(Scene *scene, View3D *v3d);
+void VP_drawviewborder(Scene *scene, const struct Depsgraph *depsgraph, ARegion *ar, View3D *v3d);
+void VP_drawrenderborder(ARegion *ar, View3D *v3d);
+void VP_view3d_draw_background_none(void);
+void VP_view3d_draw_background_world(Scene *scene, RegionView3D *rv3d);
+void VP_view3d_main_region_clear(Scene *scene, View3D *v3d, ARegion *ar);
+
+/* temporary legacy calls, only when there is a switch between new/old draw calls */
+void VP_deprecated_gpu_update_lamps_shadows_world(const struct EvaluationContext *eval_ctx, Scene *scene, View3D *v3d);
+void VP_deprecated_view3d_draw_objects(
+ const struct bContext *C,
+ const struct EvaluationContext *eval_ctx,
+ Scene *scene, View3D *v3d, ARegion *ar,
+ const char **grid_unit,
+ const bool do_bgpic, const bool draw_offscreen, struct GPUFX *fx);
+#endif /* __VIEW3D_INTERN_H__ */
diff --git a/source/blender/editors/space_view3d/view3d_iterators.c b/source/blender/editors/space_view3d/view3d_iterators.c
index ef7b01f7a21..4f80270e1e7 100644
--- a/source/blender/editors/space_view3d/view3d_iterators.c
+++ b/source/blender/editors/space_view3d/view3d_iterators.c
@@ -40,6 +40,9 @@
#include "BKE_DerivedMesh.h"
#include "BKE_displist.h"
#include "BKE_editmesh.h"
+#include "BKE_context.h"
+
+#include "DEG_depsgraph.h"
#include "bmesh.h"
@@ -104,12 +107,14 @@ static void meshobject_foreachScreenVert__mapFunc(void *userData, int index, con
}
void meshobject_foreachScreenVert(
- ViewContext *vc,
+ const EvaluationContext *eval_ctx, ViewContext *vc,
void (*func)(void *userData, MVert *eve, const float screen_co[2], int index),
void *userData, eV3DProjTest clip_flag)
{
foreachScreenObjectVert_userData data;
- DerivedMesh *dm = mesh_get_derived_deform(vc->scene, vc->obact, CD_MASK_BAREMESH);
+ DerivedMesh *dm;
+
+ dm = mesh_get_derived_deform(eval_ctx, vc->scene, vc->obact, CD_MASK_BAREMESH);
ED_view3d_check_mats_rv3d(vc->rv3d);
@@ -145,12 +150,14 @@ static void mesh_foreachScreenVert__mapFunc(void *userData, int index, const flo
}
void mesh_foreachScreenVert(
- ViewContext *vc,
+ const EvaluationContext *eval_ctx, ViewContext *vc,
void (*func)(void *userData, BMVert *eve, const float screen_co[2], int index),
void *userData, eV3DProjTest clip_flag)
{
foreachScreenVert_userData data;
- DerivedMesh *dm = editbmesh_get_derived_cage(vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH);
+ DerivedMesh *dm;
+
+ dm = editbmesh_get_derived_cage(eval_ctx, vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH);
ED_view3d_check_mats_rv3d(vc->rv3d);
@@ -199,12 +206,14 @@ static void mesh_foreachScreenEdge__mapFunc(void *userData, int index, const flo
}
void mesh_foreachScreenEdge(
- ViewContext *vc,
+ const EvaluationContext *eval_ctx, ViewContext *vc,
void (*func)(void *userData, BMEdge *eed, const float screen_co_a[2], const float screen_co_b[2], int index),
void *userData, eV3DProjTest clip_flag)
{
foreachScreenEdge_userData data;
- DerivedMesh *dm = editbmesh_get_derived_cage(vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH);
+ DerivedMesh *dm;
+
+ dm = editbmesh_get_derived_cage(eval_ctx, vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH);
ED_view3d_check_mats_rv3d(vc->rv3d);
@@ -245,12 +254,14 @@ static void mesh_foreachScreenFace__mapFunc(void *userData, int index, const flo
}
void mesh_foreachScreenFace(
- ViewContext *vc,
+ const EvaluationContext *eval_ctx, ViewContext *vc,
void (*func)(void *userData, BMFace *efa, const float screen_co_b[2], int index),
void *userData, const eV3DProjTest clip_flag)
{
foreachScreenFace_userData data;
- DerivedMesh *dm = editbmesh_get_derived_cage(vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH);
+ DerivedMesh *dm;
+
+ dm = editbmesh_get_derived_cage(eval_ctx, vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH);
ED_view3d_check_mats_rv3d(vc->rv3d);
diff --git a/source/blender/editors/space_view3d/view3d_manipulator_armature.c b/source/blender/editors/space_view3d/view3d_manipulator_armature.c
new file mode 100644
index 00000000000..5d3d88ff2a2
--- /dev/null
+++ b/source/blender/editors/space_view3d/view3d_manipulator_armature.c
@@ -0,0 +1,220 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/editors/space_view3d/view3d_manipulator_armature.c
+ * \ingroup spview3d
+ */
+
+#include "BLI_blenlib.h"
+#include "BLI_math.h"
+#include "BLI_utildefines.h"
+
+#include "BKE_armature.h"
+#include "BKE_action.h"
+#include "BKE_context.h"
+#include "BKE_object.h"
+
+#include "DNA_object_types.h"
+#include "DNA_armature_types.h"
+
+#include "ED_armature.h"
+#include "ED_screen.h"
+#include "ED_manipulator_library.h"
+
+#include "UI_resources.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "RNA_access.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "view3d_intern.h" /* own include */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Armature Spline Manipulator
+ *
+ * \{ */
+
+/*
+ * TODO(campbell): Current conversion is a approximation (usable not correct),
+ * we'll need to take the next/previous bones into account to get the tangent directions.
+ * First last matrices from 'b_bone_spline_setup' are close but also not quite accurate
+ * since they're not at either end-points on the curve.
+ *
+ * Likely we'll need a function especially to get the first/last orientations.
+ */
+
+#define BBONE_SCALE_Y 3.0f
+
+struct BoneSplineHandle {
+ wmManipulator *manipulator;
+ bPoseChannel *pchan;
+ /* We could remove, keep since at the moment for checking the conversion. */
+ float co[3];
+ int index;
+};
+
+struct BoneSplineWidgetGroup {
+ struct BoneSplineHandle handles[2];
+};
+
+static void manipulator_bbone_offset_get(
+ const wmManipulator *UNUSED(mpr), wmManipulatorProperty *mpr_prop,
+ void *value_p)
+{
+ struct BoneSplineHandle *bh = mpr_prop->custom_func.user_data;
+ bPoseChannel *pchan = bh->pchan;
+
+ float *value = value_p;
+ BLI_assert(mpr_prop->type->array_length == 3);
+
+ if (bh->index == 0) {
+ bh->co[1] = pchan->bone->ease1 / BBONE_SCALE_Y;
+ bh->co[0] = pchan->curveInX;
+ bh->co[2] = pchan->curveInY;
+ }
+ else {
+ bh->co[1] = -pchan->bone->ease2 / BBONE_SCALE_Y;
+ bh->co[0] = pchan->curveOutX;
+ bh->co[2] = pchan->curveOutY;
+ }
+ copy_v3_v3(value, bh->co);
+}
+
+static void manipulator_bbone_offset_set(
+ const wmManipulator *UNUSED(mpr), wmManipulatorProperty *mpr_prop,
+ const void *value_p)
+{
+ struct BoneSplineHandle *bh = mpr_prop->custom_func.user_data;
+ bPoseChannel *pchan = bh->pchan;
+
+ const float *value = value_p;
+
+ BLI_assert(mpr_prop->type->array_length == 3);
+ copy_v3_v3(bh->co, value);
+
+ if (bh->index == 0) {
+ pchan->bone->ease1 = max_ff(0.0f, bh->co[1] * BBONE_SCALE_Y);
+ pchan->curveInX = bh->co[0];
+ pchan->curveInY = bh->co[2];
+ }
+ else {
+ pchan->bone->ease2 = max_ff(0.0f, -bh->co[1] * BBONE_SCALE_Y);
+ pchan->curveOutX = bh->co[0];
+ pchan->curveOutY = bh->co[2];
+ }
+
+}
+
+static bool WIDGETGROUP_armature_spline_poll(const bContext *C, wmManipulatorGroupType *UNUSED(wgt))
+{
+ Object *ob = BKE_object_pose_armature_get(CTX_data_active_object(C));
+ if (ob != NULL) {
+ const bArmature *arm = ob->data;
+ if (arm->drawtype == ARM_B_BONE) {
+ if (arm->act_bone && arm->act_bone->segments > 1) {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+
+static void WIDGETGROUP_armature_spline_setup(const bContext *C, wmManipulatorGroup *mgroup)
+{
+ Object *ob = BKE_object_pose_armature_get(CTX_data_active_object(C));
+ bPoseChannel *pchan = BKE_pose_channel_active(ob);
+
+ const wmManipulatorType *wt_grab = WM_manipulatortype_find("MANIPULATOR_WT_grab_3d", true);
+
+ struct BoneSplineWidgetGroup *bspline_group = MEM_callocN(sizeof(struct BoneSplineWidgetGroup), __func__);
+ mgroup->customdata = bspline_group;
+
+ /* Handles */
+ for (int i = 0; i < ARRAY_SIZE(bspline_group->handles); i++) {
+ wmManipulator *mpr;
+ mpr = bspline_group->handles[i].manipulator = WM_manipulator_new_ptr(wt_grab, mgroup, NULL);
+ RNA_enum_set(mpr->ptr, "draw_style", ED_MANIPULATOR_GRAB_STYLE_RING_2D);
+ RNA_enum_set(mpr->ptr, "draw_options",
+ ED_MANIPULATOR_GRAB_DRAW_FLAG_FILL | ED_MANIPULATOR_GRAB_DRAW_FLAG_ALIGN_VIEW);
+ WM_manipulator_set_flag(mpr, WM_MANIPULATOR_DRAW_VALUE, true);
+
+ UI_GetThemeColor3fv(TH_MANIPULATOR_PRIMARY, mpr->color);
+ UI_GetThemeColor3fv(TH_MANIPULATOR_HI, mpr->color_hi);
+
+ mpr->scale_basis = 0.06f;
+
+ if (i == 0) {
+ copy_v3_v3(mpr->matrix_basis[3], pchan->loc);
+ }
+ }
+}
+
+static void WIDGETGROUP_armature_spline_refresh(const bContext *C, wmManipulatorGroup *mgroup)
+{
+ Object *ob = BKE_object_pose_armature_get(CTX_data_active_object(C));
+
+ if (!mgroup->customdata)
+ return;
+
+ struct BoneSplineWidgetGroup *bspline_group = mgroup->customdata;
+ bPoseChannel *pchan = BKE_pose_channel_active(ob);
+
+ /* Handles */
+ for (int i = 0; i < ARRAY_SIZE(bspline_group->handles); i++) {
+ wmManipulator *mpr = bspline_group->handles[i].manipulator;
+ bspline_group->handles[i].pchan = pchan;
+ bspline_group->handles[i].index = i;
+
+ float mat[4][4];
+ mul_m4_m4m4(mat, ob->obmat, (i == 0) ? pchan->disp_mat : pchan->disp_tail_mat);
+ copy_m4_m4(mpr->matrix_space, mat);
+
+ /* need to set property here for undo. TODO would prefer to do this in _init */
+ WM_manipulator_target_property_def_func(
+ mpr, "offset",
+ &(const struct wmManipulatorPropertyFnParams) {
+ .value_get_fn = manipulator_bbone_offset_get,
+ .value_set_fn = manipulator_bbone_offset_set,
+ .range_get_fn = NULL,
+ .user_data = &bspline_group->handles[i],
+ });
+ }
+}
+
+void VIEW3D_WGT_armature_spline(wmManipulatorGroupType *wgt)
+{
+ wgt->name = "Armature Spline Widgets";
+ wgt->idname = "VIEW3D_WGT_armature_spline";
+
+ wgt->flag = (WM_MANIPULATORGROUPTYPE_PERSISTENT |
+ WM_MANIPULATORGROUPTYPE_3D);
+
+ wgt->poll = WIDGETGROUP_armature_spline_poll;
+ wgt->setup = WIDGETGROUP_armature_spline_setup;
+ wgt->refresh = WIDGETGROUP_armature_spline_refresh;
+}
+
+/** \} */
diff --git a/source/blender/editors/space_view3d/view3d_manipulator_camera.c b/source/blender/editors/space_view3d/view3d_manipulator_camera.c
new file mode 100644
index 00000000000..6a45ec5095f
--- /dev/null
+++ b/source/blender/editors/space_view3d/view3d_manipulator_camera.c
@@ -0,0 +1,449 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/editors/space_view3d/view3d_manipulator_camera.c
+ * \ingroup spview3d
+ */
+
+
+#include "BLI_blenlib.h"
+#include "BLI_math.h"
+#include "BLI_utildefines.h"
+
+#include "BKE_camera.h"
+#include "BKE_context.h"
+
+#include "DNA_object_types.h"
+#include "DNA_camera_types.h"
+
+#include "ED_armature.h"
+#include "ED_screen.h"
+#include "ED_manipulator_library.h"
+
+#include "UI_resources.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "RNA_access.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+#include "WM_message.h"
+
+#include "view3d_intern.h" /* own include */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Camera Manipulators
+ * \{ */
+
+struct CameraWidgetGroup {
+ wmManipulator *dop_dist;
+ wmManipulator *focal_len;
+ wmManipulator *ortho_scale;
+};
+
+static bool WIDGETGROUP_camera_poll(const bContext *C, wmManipulatorGroupType *UNUSED(wgt))
+{
+ Object *ob = CTX_data_active_object(C);
+
+ return (ob && ob->type == OB_CAMERA);
+}
+
+static void WIDGETGROUP_camera_setup(const bContext *C, wmManipulatorGroup *mgroup)
+{
+ Object *ob = CTX_data_active_object(C);
+ float dir[3];
+
+ const wmManipulatorType *wt_arrow = WM_manipulatortype_find("MANIPULATOR_WT_arrow_3d", true);
+
+ struct CameraWidgetGroup *camgroup = MEM_callocN(sizeof(struct CameraWidgetGroup), __func__);
+ mgroup->customdata = camgroup;
+
+ negate_v3_v3(dir, ob->obmat[2]);
+
+ /* dof distance */
+ {
+ wmManipulator *mpr;
+ mpr = camgroup->dop_dist = WM_manipulator_new_ptr(wt_arrow, mgroup, NULL);
+ RNA_enum_set(mpr->ptr, "draw_style", ED_MANIPULATOR_ARROW_STYLE_CROSS);
+ WM_manipulator_set_flag(mpr, WM_MANIPULATOR_DRAW_HOVER, true);
+
+ UI_GetThemeColor3fv(TH_MANIPULATOR_A, mpr->color);
+ UI_GetThemeColor3fv(TH_MANIPULATOR_HI, mpr->color_hi);
+ }
+
+ /* focal length
+ * - logic/calculations are similar to BKE_camera_view_frame_ex, better keep in sync */
+ {
+ wmManipulator *mpr;
+ mpr = camgroup->focal_len = WM_manipulator_new_ptr(wt_arrow, mgroup, NULL);
+ mpr->flag |= WM_MANIPULATOR_DRAW_NO_SCALE;
+ RNA_enum_set(mpr->ptr, "draw_style", ED_MANIPULATOR_ARROW_STYLE_CONE);
+ RNA_enum_set(mpr->ptr, "draw_options", ED_MANIPULATOR_ARROW_STYLE_CONSTRAINED);
+
+ UI_GetThemeColor3fv(TH_MANIPULATOR_PRIMARY, mpr->color);
+ UI_GetThemeColor3fv(TH_MANIPULATOR_HI, mpr->color_hi);
+
+ mpr = camgroup->ortho_scale = WM_manipulator_new_ptr(wt_arrow, mgroup, NULL);
+ mpr->flag |= WM_MANIPULATOR_DRAW_NO_SCALE;
+ RNA_enum_set(mpr->ptr, "draw_style", ED_MANIPULATOR_ARROW_STYLE_CONE);
+ RNA_enum_set(mpr->ptr, "draw_options", ED_MANIPULATOR_ARROW_STYLE_CONSTRAINED);
+
+ UI_GetThemeColor3fv(TH_MANIPULATOR_PRIMARY, mpr->color);
+ UI_GetThemeColor3fv(TH_MANIPULATOR_HI, mpr->color_hi);
+ }
+}
+
+static void WIDGETGROUP_camera_refresh(const bContext *C, wmManipulatorGroup *mgroup)
+{
+ if (!mgroup->customdata)
+ return;
+
+ struct CameraWidgetGroup *camgroup = mgroup->customdata;
+ Object *ob = CTX_data_active_object(C);
+ Camera *ca = ob->data;
+ PointerRNA camera_ptr;
+ float dir[3];
+
+ const float ob_scale_inv[3] = {
+ 1.0f / len_v3(ob->obmat[0]),
+ 1.0f / len_v3(ob->obmat[1]),
+ 1.0f / len_v3(ob->obmat[2]),
+ };
+ const float ob_scale_uniform_inv = (ob_scale_inv[0] + ob_scale_inv[1] + ob_scale_inv[2]) / 3.0f;
+
+ RNA_pointer_create(&ca->id, &RNA_Camera, ca, &camera_ptr);
+
+ negate_v3_v3(dir, ob->obmat[2]);
+
+ if (ca->flag & CAM_SHOWLIMITS) {
+ WM_manipulator_set_matrix_location(camgroup->dop_dist, ob->obmat[3]);
+ WM_manipulator_set_matrix_rotation_from_yz_axis(camgroup->dop_dist, ob->obmat[1], dir);
+ WM_manipulator_set_scale(camgroup->dop_dist, ca->drawsize);
+ WM_manipulator_set_flag(camgroup->dop_dist, WM_MANIPULATOR_HIDDEN, false);
+
+ /* need to set property here for undo. TODO would prefer to do this in _init */
+ WM_manipulator_target_property_def_rna(camgroup->dop_dist, "offset", &camera_ptr, "dof_distance", -1);
+ }
+ else {
+ WM_manipulator_set_flag(camgroup->dop_dist, WM_MANIPULATOR_HIDDEN, true);
+ }
+
+ /* TODO - make focal length/ortho ob_scale_inv widget optional */
+ const Scene *scene = CTX_data_scene(C);
+ const float aspx = (float)scene->r.xsch * scene->r.xasp;
+ const float aspy = (float)scene->r.ysch * scene->r.yasp;
+ const bool is_ortho = (ca->type == CAM_ORTHO);
+ const int sensor_fit = BKE_camera_sensor_fit(ca->sensor_fit, aspx, aspy);
+ wmManipulator *widget = is_ortho ? camgroup->ortho_scale : camgroup->focal_len;
+ float scale_matrix;
+ if (true) {
+ float offset[3];
+ float aspect[2];
+
+ WM_manipulator_set_flag(widget, WM_MANIPULATOR_HIDDEN, false);
+ WM_manipulator_set_flag(is_ortho ? camgroup->focal_len : camgroup->ortho_scale, WM_MANIPULATOR_HIDDEN, true);
+
+
+ /* account for lens shifting */
+ offset[0] = ((ob->size[0] > 0.0f) ? -2.0f : 2.0f) * ca->shiftx;
+ offset[1] = 2.0f * ca->shifty;
+ offset[2] = 0.0f;
+
+ /* get aspect */
+ aspect[0] = (sensor_fit == CAMERA_SENSOR_FIT_HOR) ? 1.0f : aspx / aspy;
+ aspect[1] = (sensor_fit == CAMERA_SENSOR_FIT_HOR) ? aspy / aspx : 1.0f;
+
+ unit_m4(widget->matrix_basis);
+ WM_manipulator_set_matrix_location(widget, ob->obmat[3]);
+ WM_manipulator_set_matrix_rotation_from_yz_axis(widget, ob->obmat[1], dir);
+
+ if (is_ortho) {
+ scale_matrix = ca->ortho_scale * 0.5f;
+ }
+ else {
+ scale_matrix = ca->drawsize / ob_scale_uniform_inv;
+ }
+ mul_v3_fl(widget->matrix_basis[0], scale_matrix);
+ mul_v3_fl(widget->matrix_basis[1], scale_matrix);
+
+ RNA_float_set_array(widget->ptr, "aspect", aspect);
+
+ WM_manipulator_set_matrix_offset_location(widget, offset);
+ }
+
+ /* define & update properties */
+ {
+ const char *propname = is_ortho ? "ortho_scale" : "lens";
+ PropertyRNA *prop = RNA_struct_find_property(&camera_ptr, propname);
+ const wmManipulatorPropertyType *mpr_prop_type = WM_manipulatortype_target_property_find(widget->type, "offset");
+
+ WM_manipulator_target_property_clear_rna_ptr(widget, mpr_prop_type);
+
+ float min, max, range;
+ float step, precision;
+
+ /* get property range */
+ RNA_property_float_ui_range(&camera_ptr, prop, &min, &max, &step, &precision);
+ range = max - min;
+
+ ED_manipulator_arrow3d_set_range_fac(
+ widget, is_ortho ?
+ (ca->drawsize * range) :
+ (scale_matrix * range /
+ /* Half sensor, intentionally use sensor from camera and not calculated above. */
+ (0.5f * ((ca->sensor_fit == CAMERA_SENSOR_FIT_HOR) ? ca->sensor_x : ca->sensor_x))));
+
+ WM_manipulator_target_property_def_rna_ptr(widget, mpr_prop_type, &camera_ptr, prop, -1);
+ }
+
+}
+
+static void WIDGETGROUP_camera_message_subscribe(
+ const bContext *C, wmManipulatorGroup *mgroup, struct wmMsgBus *mbus)
+{
+ ARegion *ar = CTX_wm_region(C);
+ Object *ob = CTX_data_active_object(C);
+ Camera *ca = ob->data;
+
+ wmMsgSubscribeValue msg_sub_value_mpr_tag_refresh = {
+ .owner = ar,
+ .user_data = mgroup->parent_mmap,
+ .notify = WM_manipulator_do_msg_notify_tag_refresh,
+ };
+
+ {
+ extern PropertyRNA rna_Camera_dof_distance;
+ extern PropertyRNA rna_Camera_draw_size;
+ extern PropertyRNA rna_Camera_ortho_scale;
+ extern PropertyRNA rna_Camera_sensor_fit;
+ extern PropertyRNA rna_Camera_sensor_width;
+ extern PropertyRNA rna_Camera_shift_x;
+ extern PropertyRNA rna_Camera_shift_y;
+ extern PropertyRNA rna_Camera_type;
+ const PropertyRNA *props[] = {
+ &rna_Camera_dof_distance,
+ &rna_Camera_draw_size,
+ &rna_Camera_ortho_scale,
+ &rna_Camera_sensor_fit,
+ &rna_Camera_sensor_width,
+ &rna_Camera_shift_x,
+ &rna_Camera_shift_y,
+ &rna_Camera_type,
+ };
+
+ PointerRNA idptr;
+ RNA_id_pointer_create(&ca->id, &idptr);
+
+ for (int i = 0; i < ARRAY_SIZE(props); i++) {
+ WM_msg_subscribe_rna(mbus, &idptr, props[i], &msg_sub_value_mpr_tag_refresh, __func__);
+ }
+ }
+
+ /* Subscribe to render settings */
+ {
+ WM_msg_subscribe_rna_anon_prop(mbus, RenderSettings, resolution_x, &msg_sub_value_mpr_tag_refresh);
+ WM_msg_subscribe_rna_anon_prop(mbus, RenderSettings, resolution_y, &msg_sub_value_mpr_tag_refresh);
+ WM_msg_subscribe_rna_anon_prop(mbus, RenderSettings, pixel_aspect_x, &msg_sub_value_mpr_tag_refresh);
+ WM_msg_subscribe_rna_anon_prop(mbus, RenderSettings, pixel_aspect_y, &msg_sub_value_mpr_tag_refresh);
+ }
+}
+
+void VIEW3D_WGT_camera(wmManipulatorGroupType *wgt)
+{
+ wgt->name = "Camera Widgets";
+ wgt->idname = "VIEW3D_WGT_camera";
+
+ wgt->flag = (WM_MANIPULATORGROUPTYPE_PERSISTENT |
+ WM_MANIPULATORGROUPTYPE_3D |
+ WM_MANIPULATORGROUPTYPE_DEPTH_3D);
+
+ wgt->poll = WIDGETGROUP_camera_poll;
+ wgt->setup = WIDGETGROUP_camera_setup;
+ wgt->refresh = WIDGETGROUP_camera_refresh;
+ wgt->message_subscribe = WIDGETGROUP_camera_message_subscribe;
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+
+/** \name CameraView Manipulators
+ * \{ */
+
+struct CameraViewWidgetGroup {
+ wmManipulator *border;
+
+ struct {
+ rctf *edit_border;
+ rctf view_border;
+ } state;
+};
+
+/* scale callbacks */
+static void manipulator_render_border_prop_matrix_get(
+ const wmManipulator *UNUSED(mpr), wmManipulatorProperty *mpr_prop,
+ void *value_p)
+{
+ float (*matrix)[4] = value_p;
+ BLI_assert(mpr_prop->type->array_length == 16);
+ struct CameraViewWidgetGroup *viewgroup = mpr_prop->custom_func.user_data;
+ const rctf *border = viewgroup->state.edit_border;
+
+ unit_m4(matrix);
+ matrix[0][0] = BLI_rctf_size_x(border);
+ matrix[1][1] = BLI_rctf_size_y(border);
+ matrix[3][0] = BLI_rctf_cent_x(border);
+ matrix[3][1] = BLI_rctf_cent_y(border);
+}
+
+static void manipulator_render_border_prop_matrix_set(
+ const wmManipulator *UNUSED(mpr), wmManipulatorProperty *mpr_prop,
+ const void *value_p)
+{
+ const float (*matrix)[4] = value_p;
+ struct CameraViewWidgetGroup *viewgroup = mpr_prop->custom_func.user_data;
+ rctf *border = viewgroup->state.edit_border;
+ BLI_assert(mpr_prop->type->array_length == 16);
+
+ BLI_rctf_resize(border, len_v3(matrix[0]), len_v3(matrix[1]));
+ BLI_rctf_recenter(border, matrix[3][0], matrix[3][1]);
+ BLI_rctf_isect(&(rctf){.xmin = 0, .ymin = 0, .xmax = 1, .ymax = 1}, border, border);
+}
+
+static bool WIDGETGROUP_camera_view_poll(const bContext *C, wmManipulatorGroupType *UNUSED(wgt))
+{
+ ARegion *ar = CTX_wm_region(C);
+ RegionView3D *rv3d = ar->regiondata;
+ Scene *scene = CTX_data_scene(C);
+ View3D *v3d = CTX_wm_view3d(C);
+
+ /* This is just so the border isn't always in the way,
+ * stealing mouse clicks from regular usage.
+ * We could change the rules for when to show. */
+ {
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ if (scene->camera != OBACT(view_layer)) {
+ return false;
+ }
+ }
+
+ if (rv3d->persp == RV3D_CAMOB) {
+ if (scene->r.mode & R_BORDER) {
+ return true;
+ }
+ }
+ else if (v3d->flag2 & V3D_RENDER_BORDER) {
+ return true;
+ }
+ return false;
+}
+
+static void WIDGETGROUP_camera_view_setup(const bContext *UNUSED(C), wmManipulatorGroup *mgroup)
+{
+ struct CameraViewWidgetGroup *viewgroup = MEM_mallocN(sizeof(struct CameraViewWidgetGroup), __func__);
+
+ viewgroup->border = WM_manipulator_new("MANIPULATOR_WT_cage_2d", mgroup, NULL);
+
+ RNA_enum_set(viewgroup->border->ptr, "transform",
+ ED_MANIPULATOR_CAGE2D_XFORM_FLAG_TRANSLATE | ED_MANIPULATOR_CAGE2D_XFORM_FLAG_SCALE);
+ /* Box style is more subtle in this case. */
+ RNA_enum_set(viewgroup->border->ptr, "draw_style", ED_MANIPULATOR_CAGE2D_STYLE_BOX);
+
+
+ mgroup->customdata = viewgroup;
+}
+
+static void WIDGETGROUP_camera_view_draw_prepare(const bContext *C, wmManipulatorGroup *mgroup)
+{
+ struct CameraViewWidgetGroup *viewgroup = mgroup->customdata;
+
+ ARegion *ar = CTX_wm_region(C);
+ struct Depsgraph *depsgraph = CTX_data_depsgraph(C);
+ RegionView3D *rv3d = ar->regiondata;
+ if (rv3d->persp == RV3D_CAMOB) {
+ Scene *scene = CTX_data_scene(C);
+ View3D *v3d = CTX_wm_view3d(C);
+ ED_view3d_calc_camera_border(scene, depsgraph, ar, v3d, rv3d, &viewgroup->state.view_border, false);
+ }
+ else {
+ viewgroup->state.view_border = (rctf){.xmin = 0, .ymin = 0, .xmax = ar->winx, .ymax = ar->winy};
+ }
+
+ wmManipulator *mpr = viewgroup->border;
+ unit_m4(mpr->matrix_space);
+ mul_v3_fl(mpr->matrix_space[0], BLI_rctf_size_x(&viewgroup->state.view_border));
+ mul_v3_fl(mpr->matrix_space[1], BLI_rctf_size_y(&viewgroup->state.view_border));
+ mpr->matrix_space[3][0] = viewgroup->state.view_border.xmin;
+ mpr->matrix_space[3][1] = viewgroup->state.view_border.ymin;
+}
+
+static void WIDGETGROUP_camera_view_refresh(const bContext *C, wmManipulatorGroup *mgroup)
+{
+ struct CameraViewWidgetGroup *viewgroup = mgroup->customdata;
+
+ View3D *v3d = CTX_wm_view3d(C);
+ ARegion *ar = CTX_wm_region(C);
+ RegionView3D *rv3d = ar->regiondata;
+ Scene *scene = CTX_data_scene(C);
+
+ {
+ wmManipulator *mpr = viewgroup->border;
+ WM_manipulator_set_flag(mpr, WM_MANIPULATOR_HIDDEN, false);
+
+ RNA_enum_set(viewgroup->border->ptr, "transform",
+ ED_MANIPULATOR_CAGE2D_XFORM_FLAG_TRANSLATE | ED_MANIPULATOR_CAGE2D_XFORM_FLAG_SCALE);
+
+ if (rv3d->persp == RV3D_CAMOB) {
+ viewgroup->state.edit_border = &scene->r.border;
+ }
+ else {
+ viewgroup->state.edit_border = &v3d->render_border;
+ }
+
+ WM_manipulator_target_property_def_func(
+ mpr, "matrix",
+ &(const struct wmManipulatorPropertyFnParams) {
+ .value_get_fn = manipulator_render_border_prop_matrix_get,
+ .value_set_fn = manipulator_render_border_prop_matrix_set,
+ .range_get_fn = NULL,
+ .user_data = viewgroup,
+ });
+ }
+
+}
+
+void VIEW3D_WGT_camera_view(wmManipulatorGroupType *wgt)
+{
+ wgt->name = "Camera View Widgets";
+ wgt->idname = "VIEW3D_WGT_camera_view";
+
+ wgt->flag = (WM_MANIPULATORGROUPTYPE_PERSISTENT |
+ WM_MANIPULATORGROUPTYPE_SCALE);
+
+ wgt->poll = WIDGETGROUP_camera_view_poll;
+ wgt->setup = WIDGETGROUP_camera_view_setup;
+ wgt->draw_prepare = WIDGETGROUP_camera_view_draw_prepare;
+ wgt->refresh = WIDGETGROUP_camera_view_refresh;
+}
+
+/** \} */
diff --git a/source/blender/editors/space_view3d/view3d_manipulator_empty.c b/source/blender/editors/space_view3d/view3d_manipulator_empty.c
new file mode 100644
index 00000000000..1d56c5ee7f4
--- /dev/null
+++ b/source/blender/editors/space_view3d/view3d_manipulator_empty.c
@@ -0,0 +1,196 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/editors/space_view3d/view3d_manipulator_empty.c
+ * \ingroup spview3d
+ */
+
+
+#include "BLI_blenlib.h"
+#include "BLI_math.h"
+#include "BLI_utildefines.h"
+
+#include "BKE_context.h"
+#include "BKE_object.h"
+#include "BKE_image.h"
+
+#include "DNA_object_types.h"
+#include "DNA_lamp_types.h"
+
+#include "ED_screen.h"
+#include "ED_manipulator_library.h"
+
+#include "UI_resources.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "RNA_access.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "view3d_intern.h" /* own include */
+
+/* -------------------------------------------------------------------- */
+
+/** \name Empty Image Manipulators
+ * \{ */
+
+struct EmptyImageWidgetGroup {
+ wmManipulator *manipulator;
+ struct {
+ Object *ob;
+ float dims[2];
+ } state;
+};
+
+/* translate callbacks */
+static void manipulator_empty_image_prop_matrix_get(
+ const wmManipulator *mpr, wmManipulatorProperty *mpr_prop,
+ void *value_p)
+{
+ float (*matrix)[4] = value_p;
+ BLI_assert(mpr_prop->type->array_length == 16);
+ struct EmptyImageWidgetGroup *imgroup = mpr_prop->custom_func.user_data;
+ const Object *ob = imgroup->state.ob;
+
+ unit_m4(matrix);
+ matrix[0][0] = ob->empty_drawsize;
+ matrix[1][1] = ob->empty_drawsize;
+
+ float dims[2] = {0.0f, 0.0f};
+ RNA_float_get_array(mpr->ptr, "dimensions", dims);
+ dims[0] *= ob->empty_drawsize;
+ dims[1] *= ob->empty_drawsize;
+
+ matrix[3][0] = (ob->ima_ofs[0] * dims[0]) + (0.5f * dims[0]);
+ matrix[3][1] = (ob->ima_ofs[1] * dims[1]) + (0.5f * dims[1]);
+}
+
+static void manipulator_empty_image_prop_matrix_set(
+ const wmManipulator *mpr, wmManipulatorProperty *mpr_prop,
+ const void *value_p)
+{
+ const float (*matrix)[4] = value_p;
+ BLI_assert(mpr_prop->type->array_length == 16);
+ struct EmptyImageWidgetGroup *imgroup = mpr_prop->custom_func.user_data;
+ Object *ob = imgroup->state.ob;
+
+ ob->empty_drawsize = matrix[0][0];
+
+ float dims[2];
+ RNA_float_get_array(mpr->ptr, "dimensions", dims);
+ dims[0] *= ob->empty_drawsize;
+ dims[1] *= ob->empty_drawsize;
+
+ ob->ima_ofs[0] = (matrix[3][0] - (0.5f * dims[0])) / dims[0];
+ ob->ima_ofs[1] = (matrix[3][1] - (0.5f * dims[1])) / dims[1];
+}
+
+static bool WIDGETGROUP_empty_image_poll(const bContext *C, wmManipulatorGroupType *UNUSED(wgt))
+{
+ Object *ob = CTX_data_active_object(C);
+
+ if (ob && ob->type == OB_EMPTY) {
+ return (ob->empty_drawtype == OB_EMPTY_IMAGE);
+ }
+ return false;
+}
+
+static void WIDGETGROUP_empty_image_setup(const bContext *UNUSED(C), wmManipulatorGroup *mgroup)
+{
+ struct EmptyImageWidgetGroup *imgroup = MEM_mallocN(sizeof(struct EmptyImageWidgetGroup), __func__);
+ imgroup->manipulator = WM_manipulator_new("MANIPULATOR_WT_cage_2d", mgroup, NULL);
+ wmManipulator *mpr = imgroup->manipulator;
+ RNA_enum_set(mpr->ptr, "transform",
+ ED_MANIPULATOR_CAGE2D_XFORM_FLAG_SCALE);
+
+ mgroup->customdata = imgroup;
+
+ WM_manipulator_set_flag(mpr, WM_MANIPULATOR_DRAW_HOVER, true);
+
+ UI_GetThemeColor3fv(TH_MANIPULATOR_PRIMARY, mpr->color);
+ UI_GetThemeColor3fv(TH_MANIPULATOR_HI, mpr->color_hi);
+}
+
+static void WIDGETGROUP_empty_image_refresh(const bContext *C, wmManipulatorGroup *mgroup)
+{
+ struct EmptyImageWidgetGroup *imgroup = mgroup->customdata;
+ Object *ob = CTX_data_active_object(C);
+ wmManipulator *mpr = imgroup->manipulator;
+
+ copy_m4_m4(mpr->matrix_basis, ob->obmat);
+
+ RNA_enum_set(mpr->ptr, "transform",
+ ED_MANIPULATOR_CAGE2D_XFORM_FLAG_TRANSLATE |
+ ED_MANIPULATOR_CAGE2D_XFORM_FLAG_SCALE |
+ ED_MANIPULATOR_CAGE2D_XFORM_FLAG_SCALE_UNIFORM);
+
+ imgroup->state.ob = ob;
+
+ /* Use dimensions for aspect. */
+ if (ob->data != NULL) {
+ const Image *image = ob->data;
+ ImageUser iuser = *ob->iuser;
+ float size[2];
+ BKE_image_get_size_fl(ob->data, &iuser, size);
+
+ /* Get the image aspect even if the buffer is invalid */
+ if (image->aspx > image->aspy) {
+ size[1] *= image->aspy / image->aspx;
+ }
+ else if (image->aspx < image->aspy) {
+ size[0] *= image->aspx / image->aspy;
+ }
+
+ const float dims_max = max_ff(size[0], size[1]);
+ imgroup->state.dims[0] = size[0] / dims_max;
+ imgroup->state.dims[1] = size[1] / dims_max;
+ }
+ else {
+ copy_v2_fl(imgroup->state.dims, 1.0f);
+ }
+ RNA_float_set_array(mpr->ptr, "dimensions", imgroup->state.dims);
+
+ WM_manipulator_target_property_def_func(
+ mpr, "matrix",
+ &(const struct wmManipulatorPropertyFnParams) {
+ .value_get_fn = manipulator_empty_image_prop_matrix_get,
+ .value_set_fn = manipulator_empty_image_prop_matrix_set,
+ .range_get_fn = NULL,
+ .user_data = imgroup,
+ });
+}
+
+void VIEW3D_WGT_empty_image(wmManipulatorGroupType *wgt)
+{
+ wgt->name = "Area Lamp Widgets";
+ wgt->idname = "VIEW3D_WGT_empty_image";
+
+ wgt->flag |= (WM_MANIPULATORGROUPTYPE_PERSISTENT |
+ WM_MANIPULATORGROUPTYPE_3D |
+ WM_MANIPULATORGROUPTYPE_DEPTH_3D);
+
+ wgt->poll = WIDGETGROUP_empty_image_poll;
+ wgt->setup = WIDGETGROUP_empty_image_setup;
+ wgt->refresh = WIDGETGROUP_empty_image_refresh;
+}
+
+/** \} */
diff --git a/source/blender/editors/space_view3d/view3d_manipulator_forcefield.c b/source/blender/editors/space_view3d/view3d_manipulator_forcefield.c
new file mode 100644
index 00000000000..e76be448be4
--- /dev/null
+++ b/source/blender/editors/space_view3d/view3d_manipulator_forcefield.c
@@ -0,0 +1,118 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/editors/space_view3d/view3d_manipulator_forcefield.c
+ * \ingroup spview3d
+ */
+
+
+#include "BLI_blenlib.h"
+#include "BLI_math.h"
+#include "BLI_utildefines.h"
+
+#include "BKE_context.h"
+#include "BKE_object.h"
+
+#include "DNA_object_types.h"
+#include "DNA_object_force_types.h"
+
+#include "ED_screen.h"
+#include "ED_manipulator_library.h"
+
+#include "UI_resources.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "RNA_access.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "view3d_intern.h" /* own include */
+
+/* -------------------------------------------------------------------- */
+
+/** \name Force Field Manipulators
+ * \{ */
+
+static bool WIDGETGROUP_forcefield_poll(const bContext *C, wmManipulatorGroupType *UNUSED(wgt))
+{
+ Object *ob = CTX_data_active_object(C);
+
+ return (ob && ob->pd && ob->pd->forcefield);
+}
+
+static void WIDGETGROUP_forcefield_setup(const bContext *UNUSED(C), wmManipulatorGroup *mgroup)
+{
+ /* only wind effector for now */
+ wmManipulatorWrapper *wwrapper = MEM_mallocN(sizeof(wmManipulatorWrapper), __func__);
+ mgroup->customdata = wwrapper;
+
+ wwrapper->manipulator = WM_manipulator_new("MANIPULATOR_WT_arrow_3d", mgroup, NULL);
+ wmManipulator *mpr = wwrapper->manipulator;
+ RNA_enum_set(mpr->ptr, "draw_options", ED_MANIPULATOR_ARROW_STYLE_CONSTRAINED);
+ ED_manipulator_arrow3d_set_ui_range(mpr, -200.0f, 200.0f);
+ ED_manipulator_arrow3d_set_range_fac(mpr, 6.0f);
+
+ UI_GetThemeColor3fv(TH_MANIPULATOR_PRIMARY, mpr->color);
+ UI_GetThemeColor3fv(TH_MANIPULATOR_HI, mpr->color_hi);
+}
+
+static void WIDGETGROUP_forcefield_refresh(const bContext *C, wmManipulatorGroup *mgroup)
+{
+ wmManipulatorWrapper *wwrapper = mgroup->customdata;
+ wmManipulator *mpr = wwrapper->manipulator;
+ Object *ob = CTX_data_active_object(C);
+ PartDeflect *pd = ob->pd;
+
+ if (pd->forcefield == PFIELD_WIND) {
+ const float size = (ob->type == OB_EMPTY) ? ob->empty_drawsize : 1.0f;
+ const float ofs[3] = {0.0f, -size, 0.0f};
+ PointerRNA field_ptr;
+
+ RNA_pointer_create(&ob->id, &RNA_FieldSettings, pd, &field_ptr);
+ WM_manipulator_set_matrix_location(mpr, ob->obmat[3]);
+ WM_manipulator_set_matrix_rotation_from_z_axis(mpr, ob->obmat[2]);
+ WM_manipulator_set_matrix_offset_location(mpr, ofs);
+ WM_manipulator_set_flag(mpr, WM_MANIPULATOR_HIDDEN, false);
+ WM_manipulator_target_property_def_rna(mpr, "offset", &field_ptr, "strength", -1);
+ }
+ else {
+ WM_manipulator_set_flag(mpr, WM_MANIPULATOR_HIDDEN, true);
+ }
+}
+
+void VIEW3D_WGT_force_field(wmManipulatorGroupType *wgt)
+{
+ wgt->name = "Force Field Widgets";
+ wgt->idname = "VIEW3D_WGT_force_field";
+
+ wgt->flag |= (WM_MANIPULATORGROUPTYPE_PERSISTENT |
+ WM_MANIPULATORGROUPTYPE_3D |
+ WM_MANIPULATORGROUPTYPE_SCALE |
+ WM_MANIPULATORGROUPTYPE_DEPTH_3D);
+
+ wgt->poll = WIDGETGROUP_forcefield_poll;
+ wgt->setup = WIDGETGROUP_forcefield_setup;
+ wgt->refresh = WIDGETGROUP_forcefield_refresh;
+}
+
+/** \} */
+
diff --git a/source/blender/editors/space_view3d/view3d_manipulator_lamp.c b/source/blender/editors/space_view3d/view3d_manipulator_lamp.c
new file mode 100644
index 00000000000..93b6b69a105
--- /dev/null
+++ b/source/blender/editors/space_view3d/view3d_manipulator_lamp.c
@@ -0,0 +1,289 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/editors/space_view3d/view3d_manipulator_lamp.c
+ * \ingroup spview3d
+ */
+
+
+#include "BLI_blenlib.h"
+#include "BLI_math.h"
+#include "BLI_utildefines.h"
+
+#include "BKE_context.h"
+#include "BKE_object.h"
+
+#include "DNA_object_types.h"
+#include "DNA_lamp_types.h"
+
+#include "ED_screen.h"
+#include "ED_manipulator_library.h"
+
+#include "UI_resources.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "RNA_access.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "view3d_intern.h" /* own include */
+
+/* -------------------------------------------------------------------- */
+
+/** \name Spot Lamp Manipulators
+ * \{ */
+
+static bool WIDGETGROUP_lamp_spot_poll(const bContext *C, wmManipulatorGroupType *UNUSED(wgt))
+{
+ Object *ob = CTX_data_active_object(C);
+
+ if (ob && ob->type == OB_LAMP) {
+ Lamp *la = ob->data;
+ return (la->type == LA_SPOT);
+ }
+ return false;
+}
+
+static void WIDGETGROUP_lamp_spot_setup(const bContext *UNUSED(C), wmManipulatorGroup *mgroup)
+{
+ wmManipulatorWrapper *wwrapper = MEM_mallocN(sizeof(wmManipulatorWrapper), __func__);
+
+ wwrapper->manipulator = WM_manipulator_new("MANIPULATOR_WT_arrow_3d", mgroup, NULL);
+ wmManipulator *mpr = wwrapper->manipulator;
+ RNA_enum_set(mpr->ptr, "draw_options", ED_MANIPULATOR_ARROW_STYLE_INVERTED);
+
+ mgroup->customdata = wwrapper;
+
+ ED_manipulator_arrow3d_set_range_fac(mpr, 4.0f);
+
+ UI_GetThemeColor3fv(TH_MANIPULATOR_SECONDARY, mpr->color);
+}
+
+static void WIDGETGROUP_lamp_spot_refresh(const bContext *C, wmManipulatorGroup *mgroup)
+{
+ wmManipulatorWrapper *wwrapper = mgroup->customdata;
+ wmManipulator *mpr = wwrapper->manipulator;
+ Object *ob = CTX_data_active_object(C);
+ Lamp *la = ob->data;
+ float dir[3];
+
+ negate_v3_v3(dir, ob->obmat[2]);
+
+ WM_manipulator_set_matrix_rotation_from_z_axis(mpr, dir);
+ WM_manipulator_set_matrix_location(mpr, ob->obmat[3]);
+
+ /* need to set property here for undo. TODO would prefer to do this in _init */
+ PointerRNA lamp_ptr;
+ const char *propname = "spot_size";
+ RNA_pointer_create(&la->id, &RNA_Lamp, la, &lamp_ptr);
+ WM_manipulator_target_property_def_rna(mpr, "offset", &lamp_ptr, propname, -1);
+}
+
+void VIEW3D_WGT_lamp_spot(wmManipulatorGroupType *wgt)
+{
+ wgt->name = "Spot Lamp Widgets";
+ wgt->idname = "VIEW3D_WGT_lamp_spot";
+
+ wgt->flag |= (WM_MANIPULATORGROUPTYPE_PERSISTENT |
+ WM_MANIPULATORGROUPTYPE_3D |
+ WM_MANIPULATORGROUPTYPE_DEPTH_3D);
+
+ wgt->poll = WIDGETGROUP_lamp_spot_poll;
+ wgt->setup = WIDGETGROUP_lamp_spot_setup;
+ wgt->refresh = WIDGETGROUP_lamp_spot_refresh;
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+
+/** \name Area Lamp Manipulators
+ * \{ */
+
+/* scale callbacks */
+static void manipulator_area_lamp_prop_matrix_get(
+ const wmManipulator *UNUSED(mpr), wmManipulatorProperty *mpr_prop,
+ void *value_p)
+{
+ BLI_assert(mpr_prop->type->array_length == 16);
+ float (*matrix)[4] = value_p;
+ const Lamp *la = mpr_prop->custom_func.user_data;
+
+ matrix[0][0] = la->area_size;
+ matrix[1][1] = (la->area_shape == LA_AREA_RECT) ? la->area_sizey : la->area_size;
+}
+
+static void manipulator_area_lamp_prop_matrix_set(
+ const wmManipulator *UNUSED(mpr), wmManipulatorProperty *mpr_prop,
+ const void *value_p)
+{
+ const float (*matrix)[4] = value_p;
+ BLI_assert(mpr_prop->type->array_length == 16);
+ Lamp *la = mpr_prop->custom_func.user_data;
+
+ if (la->area_shape == LA_AREA_RECT) {
+ la->area_size = len_v3(matrix[0]);
+ la->area_sizey = len_v3(matrix[1]);
+ }
+ else {
+ la->area_size = len_v3(matrix[0]);
+ }
+}
+
+static bool WIDGETGROUP_lamp_area_poll(const bContext *C, wmManipulatorGroupType *UNUSED(wgt))
+{
+ Object *ob = CTX_data_active_object(C);
+
+ if (ob && ob->type == OB_LAMP) {
+ Lamp *la = ob->data;
+ return (la->type == LA_AREA);
+ }
+ return false;
+}
+
+static void WIDGETGROUP_lamp_area_setup(const bContext *UNUSED(C), wmManipulatorGroup *mgroup)
+{
+ wmManipulatorWrapper *wwrapper = MEM_mallocN(sizeof(wmManipulatorWrapper), __func__);
+ wwrapper->manipulator = WM_manipulator_new("MANIPULATOR_WT_cage_2d", mgroup, NULL);
+ wmManipulator *mpr = wwrapper->manipulator;
+ RNA_enum_set(mpr->ptr, "transform",
+ ED_MANIPULATOR_CAGE2D_XFORM_FLAG_SCALE);
+
+ mgroup->customdata = wwrapper;
+
+ WM_manipulator_set_flag(mpr, WM_MANIPULATOR_DRAW_HOVER, true);
+
+ UI_GetThemeColor3fv(TH_MANIPULATOR_PRIMARY, mpr->color);
+ UI_GetThemeColor3fv(TH_MANIPULATOR_HI, mpr->color_hi);
+}
+
+static void WIDGETGROUP_lamp_area_refresh(const bContext *C, wmManipulatorGroup *mgroup)
+{
+ wmManipulatorWrapper *wwrapper = mgroup->customdata;
+ Object *ob = CTX_data_active_object(C);
+ Lamp *la = ob->data;
+ wmManipulator *mpr = wwrapper->manipulator;
+
+ copy_m4_m4(mpr->matrix_basis, ob->obmat);
+
+ RNA_enum_set(mpr->ptr, "transform",
+ ED_MANIPULATOR_CAGE2D_XFORM_FLAG_SCALE |
+ ((la->area_shape == LA_AREA_SQUARE) ? ED_MANIPULATOR_CAGE2D_XFORM_FLAG_SCALE_UNIFORM : 0));
+
+ /* need to set property here for undo. TODO would prefer to do this in _init */
+ WM_manipulator_target_property_def_func(
+ mpr, "matrix",
+ &(const struct wmManipulatorPropertyFnParams) {
+ .value_get_fn = manipulator_area_lamp_prop_matrix_get,
+ .value_set_fn = manipulator_area_lamp_prop_matrix_set,
+ .range_get_fn = NULL,
+ .user_data = la,
+ });
+}
+
+void VIEW3D_WGT_lamp_area(wmManipulatorGroupType *wgt)
+{
+ wgt->name = "Area Lamp Widgets";
+ wgt->idname = "VIEW3D_WGT_lamp_area";
+
+ wgt->flag |= (WM_MANIPULATORGROUPTYPE_PERSISTENT |
+ WM_MANIPULATORGROUPTYPE_3D |
+ WM_MANIPULATORGROUPTYPE_DEPTH_3D);
+
+ wgt->poll = WIDGETGROUP_lamp_area_poll;
+ wgt->setup = WIDGETGROUP_lamp_area_setup;
+ wgt->refresh = WIDGETGROUP_lamp_area_refresh;
+}
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Lamp Target Manipulator
+ * \{ */
+
+static bool WIDGETGROUP_lamp_target_poll(const bContext *C, wmManipulatorGroupType *UNUSED(wgt))
+{
+ Object *ob = CTX_data_active_object(C);
+
+ if (ob != NULL) {
+ if (ob->type == OB_LAMP) {
+ Lamp *la = ob->data;
+ return (ELEM(la->type, LA_SUN, LA_SPOT, LA_HEMI, LA_AREA));
+ }
+#if 0
+ else if (ob->type == OB_CAMERA) {
+ return true;
+ }
+#endif
+ }
+ return false;
+}
+
+static void WIDGETGROUP_lamp_target_setup(const bContext *UNUSED(C), wmManipulatorGroup *mgroup)
+{
+ wmManipulatorWrapper *wwrapper = MEM_mallocN(sizeof(wmManipulatorWrapper), __func__);
+ wwrapper->manipulator = WM_manipulator_new("MANIPULATOR_WT_grab_3d", mgroup, NULL);
+ wmManipulator *mpr = wwrapper->manipulator;
+
+ mgroup->customdata = wwrapper;
+
+ UI_GetThemeColor3fv(TH_MANIPULATOR_PRIMARY, mpr->color);
+ UI_GetThemeColor3fv(TH_MANIPULATOR_HI, mpr->color_hi);
+
+ mpr->scale_basis = 0.06f;
+
+ wmOperatorType *ot = WM_operatortype_find("OBJECT_OT_transform_axis_target", true);
+
+ RNA_enum_set(mpr->ptr, "draw_options",
+ ED_MANIPULATOR_GRAB_DRAW_FLAG_FILL | ED_MANIPULATOR_GRAB_DRAW_FLAG_ALIGN_VIEW);
+
+ WM_manipulator_operator_set(mpr, 0, ot, NULL);
+}
+
+static void WIDGETGROUP_lamp_target_draw_prepare(const bContext *C, wmManipulatorGroup *mgroup)
+{
+ wmManipulatorWrapper *wwrapper = mgroup->customdata;
+ Object *ob = CTX_data_active_object(C);
+ wmManipulator *mpr = wwrapper->manipulator;
+
+ copy_m4_m4(mpr->matrix_basis, ob->obmat);
+ unit_m4(mpr->matrix_offset);
+ mpr->matrix_offset[3][2] = -2.4f / mpr->scale_basis;
+ WM_manipulator_set_flag(mpr, WM_MANIPULATOR_DRAW_OFFSET_SCALE, true);
+}
+
+void VIEW3D_WGT_lamp_target(wmManipulatorGroupType *wgt)
+{
+ wgt->name = "Target Lamp Widgets";
+ wgt->idname = "VIEW3D_WGT_lamp_target";
+
+ wgt->flag |= (WM_MANIPULATORGROUPTYPE_PERSISTENT |
+ WM_MANIPULATORGROUPTYPE_3D);
+
+ wgt->poll = WIDGETGROUP_lamp_target_poll;
+ wgt->setup = WIDGETGROUP_lamp_target_setup;
+ wgt->draw_prepare = WIDGETGROUP_lamp_target_draw_prepare;
+}
+
+/** \} */
diff --git a/source/blender/editors/space_view3d/view3d_manipulator_navigate.c b/source/blender/editors/space_view3d/view3d_manipulator_navigate.c
new file mode 100644
index 00000000000..6a5d63b180f
--- /dev/null
+++ b/source/blender/editors/space_view3d/view3d_manipulator_navigate.c
@@ -0,0 +1,359 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/editors/space_view3d/view3d_manipulator_navigate.c
+ * \ingroup spview3d
+ */
+
+#include "BLI_blenlib.h"
+#include "BLI_math.h"
+#include "BLI_utildefines.h"
+
+#include "BKE_context.h"
+#include "BKE_object.h"
+
+#include "DNA_object_types.h"
+
+#include "ED_screen.h"
+#include "ED_manipulator_library.h"
+
+#include "UI_resources.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "RNA_access.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "view3d_intern.h" /* own include */
+
+/* -------------------------------------------------------------------- */
+/** \name View3D Navigation Manipulator Group
+ * \{ */
+
+/* Offset from screen edge. */
+#define MANIPULATOR_OFFSET_FAC 2.5
+/* Size of main icon. */
+#define MANIPULATOR_SIZE 64
+/* Factor for size of smaller button. */
+#define MANIPULATOR_MINI_FAC 0.5
+/* How much mini buttons offset from the primary. */
+#define MANIPULATOR_MINI_OFFSET_FAC 0.6666f
+
+
+enum {
+ MPR_MOVE = 0,
+ MPR_ROTATE = 1,
+ MPR_ZOOM = 2,
+
+ /* just buttons */
+ /* overlaps MPR_ORTHO (switch between) */
+ MPR_PERSP = 3,
+ MPR_ORTHO = 4,
+ MPR_CAMERA = 5,
+
+ MPR_TOTAL = 6,
+};
+
+/* Vector icons compatible with 'GPU_batch_from_poly_2d_encoded' */
+static const uchar shape_camera[] = {
+ 0xa3, 0x19, 0x78, 0x55, 0x4d, 0x19, 0x4f, 0x0a, 0x7f, 0x00, 0xb0, 0x0a, 0xa9, 0x19,
+ 0xa9, 0x19, 0x25, 0xda, 0x0a, 0xb0, 0x00, 0x7f, 0x0a, 0x4f, 0x25, 0x25, 0x4f, 0x0a,
+ 0x4d, 0x19, 0x47, 0x19, 0x65, 0x55, 0x41, 0x55, 0x41, 0x9e, 0x43, 0xa8, 0x38, 0xb3,
+ 0x34, 0xc3, 0x38, 0xd2, 0x43, 0xdd, 0x53, 0xe1, 0x62, 0xdd, 0x6d, 0xd2, 0x72, 0xc3,
+ 0x78, 0xc3, 0x7c, 0xd2, 0x87, 0xdd, 0x96, 0xe1, 0xa6, 0xdd, 0xb1, 0xd2, 0xb5, 0xc3,
+ 0xb1, 0xb3, 0xa6, 0xa8, 0xa9, 0x9e, 0xa9, 0x8c, 0xbb, 0x8c, 0xbb, 0x86, 0xc7, 0x86,
+ 0xe0, 0x9e, 0xe0, 0x55, 0xc7, 0x6d, 0xbb, 0x6d, 0xbb, 0x67, 0xa9, 0x67, 0xa9, 0x55,
+ 0x8a, 0x55, 0xa9, 0x19, 0xb0, 0x0a, 0xda, 0x25, 0xf5, 0x4f, 0xff, 0x80, 0xf5, 0xb0,
+ 0xda, 0xda, 0xb0, 0xf5, 0x80, 0xff, 0x4f, 0xf5, 0x4f, 0xf5, 0x7c, 0xb3, 0x78, 0xc3,
+ 0x72, 0xc3, 0x6d, 0xb3, 0x62, 0xa8, 0x53, 0xa4, 0x43, 0xa8, 0x41, 0x9e, 0xa9, 0x9e,
+ 0xa6, 0xa8, 0x96, 0xa4, 0x87, 0xa8, 0x87, 0xa8,
+};
+static const uchar shape_ortho[] = {
+ 0x85, 0x15, 0x85, 0x7c, 0xde, 0xb3, 0xde, 0xb8, 0xd9, 0xba, 0x80, 0x85, 0x27, 0xba,
+ 0x22, 0xb8, 0x22, 0xb3, 0x7b, 0x7c, 0x7b, 0x15, 0x80, 0x12, 0x80, 0x12, 0x1d, 0xba,
+ 0x80, 0xf2, 0x80, 0xff, 0x4f, 0xf5, 0x25, 0xda, 0x0a, 0xb0, 0x00, 0x7f, 0x0a, 0x4f,
+ 0x25, 0x25, 0x4f, 0x0a, 0x7f, 0x00, 0x80, 0x0d, 0x1d, 0x45, 0x1d, 0x45, 0xb0, 0x0a,
+ 0xda, 0x25, 0xf5, 0x4f, 0xff, 0x80, 0xf5, 0xb0, 0xda, 0xda, 0xb0, 0xf5, 0x80, 0xff,
+ 0x80, 0xf2, 0xe3, 0xba, 0xe3, 0x45, 0x80, 0x0d, 0x7f, 0x00, 0x7f, 0x00,
+};
+static const uchar shape_pan[] = {
+ 0xbf, 0x4c, 0xbf, 0x66, 0x99, 0x66, 0x99, 0x40, 0xb2, 0x40, 0x7f, 0x0d, 0x7f, 0x00,
+ 0xb0, 0x0a, 0xda, 0x25, 0xf5, 0x4f, 0xff, 0x80, 0xf5, 0xb0, 0xda, 0xda, 0xb0, 0xf5,
+ 0x80, 0xff, 0x80, 0xf2, 0xb3, 0xbf, 0x99, 0xbf, 0x99, 0x99, 0xbf, 0x99, 0xbf, 0xb2,
+ 0xf2, 0x7f, 0xf2, 0x7f, 0x40, 0xb3, 0x40, 0x99, 0x66, 0x99, 0x66, 0xbf, 0x4d, 0xbf,
+ 0x80, 0xf2, 0x80, 0xff, 0x4f, 0xf5, 0x25, 0xda, 0x0a, 0xb0, 0x00, 0x7f, 0x0a, 0x4f,
+ 0x25, 0x25, 0x4f, 0x0a, 0x7f, 0x00, 0x7f, 0x0d, 0x4c, 0x40, 0x66, 0x40, 0x66, 0x66,
+ 0x40, 0x66, 0x40, 0x4d, 0x0d, 0x80, 0x0d, 0x80,
+};
+static const uchar shape_persp[] = {
+ 0xda, 0xda, 0xb0, 0xf5, 0x80, 0xff, 0x4f, 0xf5, 0x25, 0xda, 0x0a, 0xb0, 0x00, 0x7f,
+ 0x0a, 0x4f, 0x25, 0x25, 0x4f, 0x0a, 0x7f, 0x00, 0x80, 0x07, 0x30, 0x50, 0x18, 0xbd,
+ 0x80, 0xdb, 0xe8, 0xbd, 0xf5, 0xb0, 0xf5, 0xb0, 0x83, 0x0f, 0x87, 0x7b, 0xe2, 0xb7,
+ 0xe3, 0xba, 0xe0, 0xbb, 0x80, 0x87, 0x20, 0xbb, 0x1d, 0xba, 0x1d, 0xb7, 0x78, 0x7b,
+ 0x7d, 0x0f, 0x80, 0x0c, 0x80, 0x0c, 0xd0, 0x50, 0x80, 0x07, 0x7f, 0x00, 0xb0, 0x0a,
+ 0xda, 0x25, 0xf5, 0x4f, 0xff, 0x80, 0xf5, 0xb0, 0xe8, 0xbd, 0xe8, 0xbd,
+};
+static const uchar shape_zoom[] = {
+ 0xad, 0x7f, 0xf1, 0x7f, 0xff, 0x80, 0xf5, 0xb0, 0xda, 0xda, 0xb0, 0xf5, 0x80, 0xff,
+ 0x4f, 0xf5, 0x25, 0xda, 0x0a, 0xb0, 0x00, 0x7f, 0x0d, 0x7f, 0x52, 0x7f, 0x69, 0xb7,
+ 0x48, 0xb7, 0x80, 0xd8, 0xb8, 0xb7, 0x96, 0xb7, 0x96, 0xb7, 0x7f, 0x2f, 0x0d, 0x7f,
+ 0x00, 0x7f, 0x0a, 0x4f, 0x25, 0x25, 0x4f, 0x0a, 0x7f, 0x00, 0xb0, 0x0a, 0xda, 0x25,
+ 0xf5, 0x4f, 0xff, 0x80, 0xf1, 0x7f, 0xf1, 0x7f,
+};
+
+
+struct NavigateManipulatorInfo {
+ const char *opname;
+ const char *manipulator;
+ const unsigned char *shape;
+ uint shape_size;
+};
+
+#define SHAPE_VARS(shape_id) shape = shape_id, .shape_size = ARRAY_SIZE(shape_id)
+
+struct NavigateManipulatorInfo g_navigate_params[MPR_TOTAL] = {
+ {
+ .opname = "VIEW3D_OT_move",
+ .manipulator = "MANIPULATOR_WT_button_2d",
+ .SHAPE_VARS(shape_pan),
+ }, {
+ .opname = "VIEW3D_OT_rotate",
+ .manipulator = "VIEW3D_WT_navigate_rotate",
+ .shape = NULL,
+ .shape_size = 0,
+ }, {
+ .opname = "VIEW3D_OT_zoom",
+ .manipulator = "MANIPULATOR_WT_button_2d",
+ .SHAPE_VARS(shape_zoom),
+ }, {
+ .opname = "VIEW3D_OT_view_persportho",
+ .manipulator = "MANIPULATOR_WT_button_2d",
+ .SHAPE_VARS(shape_persp),
+ }, {
+ .opname = "VIEW3D_OT_view_persportho",
+ .manipulator = "MANIPULATOR_WT_button_2d",
+ .SHAPE_VARS(shape_ortho),
+ }, {
+ .opname = "VIEW3D_OT_viewnumpad",
+ .manipulator = "MANIPULATOR_WT_button_2d",
+ .SHAPE_VARS(shape_camera),
+ },
+};
+
+#undef SHAPE_VARS
+
+struct NavigateWidgetGroup {
+ wmManipulator *mpr_array[MPR_TOTAL];
+ /* Store the view state to check for changes. */
+ struct {
+ struct {
+ short winx, winy;
+ } ar;
+ struct {
+ char is_persp;
+ char viewlock;
+ } rv3d;
+ } state;
+ int region_size[2];
+ bool is_persp;
+};
+
+static bool WIDGETGROUP_navigate_poll(const bContext *UNUSED(C), wmManipulatorGroupType *UNUSED(wgt))
+{
+ if (U.manipulator_flag & USER_MANIPULATOR_DRAW_NAVIGATE) {
+ return true;
+ }
+ return false;
+
+}
+
+static void WIDGETGROUP_navigate_setup(const bContext *UNUSED(C), wmManipulatorGroup *mgroup)
+{
+ struct NavigateWidgetGroup *navgroup = MEM_callocN(sizeof(struct NavigateWidgetGroup), __func__);
+
+ navgroup->region_size[0] = -1;
+ navgroup->region_size[1] = -1;
+
+ wmOperatorType *ot_viewnumpad = WM_operatortype_find("VIEW3D_OT_viewnumpad", true);
+
+ for (int i = 0; i < MPR_TOTAL; i++) {
+ const struct NavigateManipulatorInfo *info = &g_navigate_params[i];
+ navgroup->mpr_array[i] = WM_manipulator_new(info->manipulator, mgroup, NULL);
+ wmManipulator *mpr = navgroup->mpr_array[i];
+ mpr->flag |= WM_MANIPULATOR_GRAB_CURSOR | WM_MANIPULATOR_DRAW_MODAL;
+ mpr->color[3] = 0.2f;
+ mpr->color_hi[3] = 0.4f;
+
+ /* may be overwritten later */
+ mpr->scale_basis = (MANIPULATOR_SIZE * MANIPULATOR_MINI_FAC) / 2;
+ if (info->shape != NULL) {
+ PropertyRNA *prop = RNA_struct_find_property(mpr->ptr, "shape");
+ RNA_property_string_set_bytes(
+ mpr->ptr, prop,
+ (const char *)info->shape, info->shape_size);
+ }
+
+ wmOperatorType *ot = WM_operatortype_find(info->opname, true);
+ WM_manipulator_operator_set(mpr, 0, ot, NULL);
+ }
+
+ {
+ wmManipulator *mpr = navgroup->mpr_array[MPR_CAMERA];
+ PointerRNA *ptr = WM_manipulator_operator_set(mpr, 0, ot_viewnumpad, NULL);
+ RNA_enum_set(ptr, "type", RV3D_VIEW_CAMERA);
+ }
+
+ /* Click only buttons (not modal). */
+ {
+ int mpr_ids[] = {MPR_PERSP, MPR_ORTHO, MPR_CAMERA};
+ for (int i = 0; i < ARRAY_SIZE(mpr_ids); i++) {
+ wmManipulator *mpr = navgroup->mpr_array[mpr_ids[i]];
+ RNA_boolean_set(mpr->ptr, "show_drag", false);
+ }
+ }
+
+ /* Modal operators, don't use initial mouse location since we're clicking on a button. */
+ {
+ int mpr_ids[] = {MPR_MOVE, MPR_ROTATE, MPR_ZOOM};
+ for (int i = 0; i < ARRAY_SIZE(mpr_ids); i++) {
+ wmManipulator *mpr = navgroup->mpr_array[mpr_ids[i]];
+ wmManipulatorOpElem *mpop = WM_manipulator_operator_get(mpr, 0);
+ RNA_boolean_set(&mpop->ptr, "use_mouse_init", false);
+ }
+ }
+
+ {
+ wmManipulator *mpr = navgroup->mpr_array[MPR_ROTATE];
+ mpr->scale_basis = MANIPULATOR_SIZE / 2;
+ char mapping[6] = {
+ RV3D_VIEW_LEFT,
+ RV3D_VIEW_RIGHT,
+ RV3D_VIEW_FRONT,
+ RV3D_VIEW_BACK,
+ RV3D_VIEW_BOTTOM,
+ RV3D_VIEW_TOP,
+ };
+
+ for (int part_index = 0; part_index < 6; part_index += 1) {
+ PointerRNA *ptr = WM_manipulator_operator_set(mpr, part_index + 1, ot_viewnumpad, NULL);
+ RNA_enum_set(ptr, "type", mapping[part_index]);
+ }
+
+ /* When dragging an axis, use this instead. */
+ mpr->drag_part = 0;
+ }
+
+ mgroup->customdata = navgroup;
+}
+
+static void WIDGETGROUP_navigate_draw_prepare(const bContext *C, wmManipulatorGroup *mgroup)
+{
+ struct NavigateWidgetGroup *navgroup = mgroup->customdata;
+ ARegion *ar = CTX_wm_region(C);
+ const RegionView3D *rv3d = ar->regiondata;
+
+ for (int i = 0; i < 3; i++) {
+ copy_v3_v3(navgroup->mpr_array[MPR_ROTATE]->matrix_offset[i], rv3d->viewmat[i]);
+ }
+
+ if ((navgroup->state.ar.winx == ar->winx) &&
+ (navgroup->state.ar.winy == ar->winy) &&
+ (navgroup->state.rv3d.is_persp == rv3d->is_persp) &&
+ (navgroup->state.rv3d.viewlock == rv3d->viewlock))
+ {
+ return;
+ }
+
+
+ navgroup->state.ar.winx = ar->winx;
+ navgroup->state.ar.winy = ar->winy;
+ navgroup->state.rv3d.is_persp = rv3d->is_persp;
+ navgroup->state.rv3d.viewlock = rv3d->viewlock;
+
+
+ const float icon_size = MANIPULATOR_SIZE;
+ const float icon_offset = (icon_size / 2.0) * MANIPULATOR_OFFSET_FAC * U.ui_scale;
+ const float icon_offset_mini = icon_size * MANIPULATOR_MINI_OFFSET_FAC * U.ui_scale;
+ const float co[2] = {ar->winx - icon_offset, ar->winy - icon_offset};
+
+ wmManipulator *mpr;
+
+ for (uint i = 0; i < ARRAY_SIZE(navgroup->mpr_array); i++) {
+ mpr = navgroup->mpr_array[i];
+ WM_manipulator_set_flag(mpr, WM_MANIPULATOR_HIDDEN, true);
+ }
+
+ if ((rv3d->viewlock & RV3D_LOCKED) == 0) {
+ mpr = navgroup->mpr_array[MPR_ROTATE];
+ mpr->matrix_basis[3][0] = co[0];
+ mpr->matrix_basis[3][1] = co[1];
+ WM_manipulator_set_flag(mpr, WM_MANIPULATOR_HIDDEN, false);
+
+ mpr = navgroup->mpr_array[MPR_MOVE];
+ mpr->matrix_basis[3][0] = co[0] + icon_offset_mini;
+ mpr->matrix_basis[3][1] = co[1] - icon_offset_mini;
+ WM_manipulator_set_flag(mpr, WM_MANIPULATOR_HIDDEN, false);
+
+ mpr = navgroup->mpr_array[MPR_ZOOM];
+ mpr->matrix_basis[3][0] = co[0] - icon_offset_mini;
+ mpr->matrix_basis[3][1] = co[1] - icon_offset_mini;
+ WM_manipulator_set_flag(mpr, WM_MANIPULATOR_HIDDEN, false);
+
+ mpr = navgroup->mpr_array[rv3d->is_persp ? MPR_ORTHO : MPR_PERSP];
+ mpr->matrix_basis[3][0] = co[0] + icon_offset_mini;
+ mpr->matrix_basis[3][1] = co[1] + icon_offset_mini;
+ WM_manipulator_set_flag(mpr, WM_MANIPULATOR_HIDDEN, false);
+
+ mpr = navgroup->mpr_array[MPR_CAMERA];
+ mpr->matrix_basis[3][0] = co[0] - icon_offset_mini;
+ mpr->matrix_basis[3][1] = co[1] + icon_offset_mini;
+ WM_manipulator_set_flag(mpr, WM_MANIPULATOR_HIDDEN, false);
+ }
+ else {
+ /* RV3D_LOCKED: only show supported buttons. */
+ mpr = navgroup->mpr_array[MPR_MOVE];
+ mpr->matrix_basis[3][0] = co[0] + icon_offset_mini;
+ mpr->matrix_basis[3][1] = co[1] + icon_offset_mini;
+ WM_manipulator_set_flag(mpr, WM_MANIPULATOR_HIDDEN, false);
+
+ mpr = navgroup->mpr_array[MPR_ZOOM];
+ mpr->matrix_basis[3][0] = co[0];
+ mpr->matrix_basis[3][1] = co[1] + icon_offset_mini;
+ WM_manipulator_set_flag(mpr, WM_MANIPULATOR_HIDDEN, false);
+ }
+}
+
+void VIEW3D_WGT_navigate(wmManipulatorGroupType *wgt)
+{
+ wgt->name = "View3D Navigate";
+ wgt->idname = "VIEW3D_WGT_navigate";
+
+ wgt->flag |= (WM_MANIPULATORGROUPTYPE_PERSISTENT |
+ WM_MANIPULATORGROUPTYPE_SCALE |
+ WM_MANIPULATORGROUPTYPE_DRAW_MODAL_ALL);
+
+ wgt->poll = WIDGETGROUP_navigate_poll;
+ wgt->setup = WIDGETGROUP_navigate_setup;
+ wgt->draw_prepare = WIDGETGROUP_navigate_draw_prepare;
+}
+
+/** \} */
diff --git a/source/blender/editors/space_view3d/view3d_manipulator_navigate_type.c b/source/blender/editors/space_view3d/view3d_manipulator_navigate_type.c
new file mode 100644
index 00000000000..424b5dae402
--- /dev/null
+++ b/source/blender/editors/space_view3d/view3d_manipulator_navigate_type.c
@@ -0,0 +1,307 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file view3d_manipulator_navigate_type.c
+ * \ingroup wm
+ *
+ * \name Custom Orientation/Navigation Manipulator for the 3D View
+ *
+ * \brief Simple manipulator to axis and translate.
+ *
+ * - scale_basis: used for the size.
+ * - matrix_basis: used for the location.
+ * - matrix_offset: used to store the orientation.
+ */
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_math.h"
+#include "BLI_sort_utils.h"
+
+#include "BKE_context.h"
+
+#include "BIF_gl.h"
+#include "BIF_glutil.h"
+
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+#include "GPU_matrix.h"
+
+#include "RNA_access.h"
+#include "RNA_define.h"
+
+#include "UI_resources.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "ED_screen.h"
+
+#include "view3d_intern.h"
+
+#define DIAL_RESOLUTION 32
+
+#define HANDLE_SIZE 0.33
+
+static void axis_geom_draw(
+ const wmManipulator *mpr, const float color[4], const bool UNUSED(select))
+{
+ glLineWidth(mpr->line_width);
+
+ Gwn_VertFormat *format = immVertexFormat();
+ const uint pos_id = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+
+ /* flip z for reverse */
+ const float cone_coords[5][3] = {
+ {-1, -1, 4},
+ {-1, +1, 4},
+ {+1, +1, 4},
+ {+1, -1, 4},
+ {0, 0, 2},
+ };
+
+ struct {
+ float depth;
+ char index;
+ char axis;
+ char is_pos;
+ } axis_order[6] = {
+ {-mpr->matrix_offset[0][2], 0, 0, false},
+ {+mpr->matrix_offset[0][2], 1, 0, true},
+ {-mpr->matrix_offset[1][2], 2, 1, false},
+ {+mpr->matrix_offset[1][2], 3, 1, true},
+ {-mpr->matrix_offset[2][2], 4, 2, false},
+ {+mpr->matrix_offset[2][2], 5, 2, true},
+ };
+ qsort(&axis_order, ARRAY_SIZE(axis_order), sizeof(axis_order[0]), BLI_sortutil_cmp_float);
+
+ const float scale_axis = 0.25f;
+ static const float axis_highlight[4] = {1, 1, 1, 1};
+ static const float axis_nop[4] = {1, 1, 1, 0};
+ static const float axis_black[4] = {0, 0, 0, 1};
+ static float axis_color[3][4];
+ gpuPushMatrix();
+ gpuMultMatrix(mpr->matrix_offset);
+
+ bool draw_center_done = false;
+
+ for (int axis_index = 0; axis_index < ARRAY_SIZE(axis_order); axis_index++) {
+ const int index = axis_order[axis_index].index;
+ const int axis = axis_order[axis_index].axis;
+ const bool is_pos = axis_order[axis_index].is_pos;
+
+ /* Draw slightly before, so axis aligned arrows draw ontop. */
+ if ((draw_center_done == false) && (axis_order[axis_index].depth > -0.01f)) {
+
+ /* Circle defining active area (revert back to 2D space). */
+ {
+ gpuPopMatrix();
+ immUniformColor4fv(color);
+ imm_draw_circle_fill_3d(pos_id, 0, 0, 1.0f, DIAL_RESOLUTION);
+ gpuPushMatrix();
+ gpuMultMatrix(mpr->matrix_offset);
+ }
+
+ /* Center cube. */
+ {
+ float center[3], size[3];
+
+ zero_v3(center);
+ copy_v3_fl(size, HANDLE_SIZE);
+
+ glEnable(GL_DEPTH_TEST);
+ glDepthMask(GL_TRUE);
+ glDepthFunc(GL_LEQUAL);
+ glBlendFunc(GL_ONE, GL_ZERO);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
+ glEnable(GL_LINE_SMOOTH);
+ glEnable(GL_BLEND);
+ glLineWidth(1.0f);
+ /* Just draw depth values. */
+ immUniformColor4fv(axis_nop);
+ imm_draw_cube_fill_3d(pos_id, center, size);
+ immUniformColor4fv(axis_black);
+ madd_v3_v3fl(
+ center,
+ (float [3]){
+ mpr->matrix_offset[0][2],
+ mpr->matrix_offset[1][2],
+ mpr->matrix_offset[2][2]},
+ 0.08f);
+ imm_draw_cube_wire_3d(pos_id, center, size);
+ glDisable(GL_BLEND);
+ glDisable(GL_LINE_SMOOTH);
+ glDisable(GL_DEPTH_TEST);
+ }
+
+ draw_center_done = true;
+ }
+ UI_GetThemeColor3fv(TH_AXIS_X + axis, axis_color[axis]);
+ axis_color[axis][3] = 1.0f;
+
+ const int index_z = axis;
+ const int index_y = (axis + 1) % 3;
+ const int index_x = (axis + 2) % 3;
+
+#define ROTATED_VERT(v_orig) \
+ { \
+ float v[3]; \
+ copy_v3_v3(v, v_orig); \
+ if (is_pos == 0) { \
+ v[2] *= -1.0f; \
+ } \
+ immVertex3f(pos_id, v[index_x] * scale_axis, v[index_y] * scale_axis, v[index_z] * scale_axis); \
+ } ((void)0)
+
+ bool ok = true;
+
+ /* skip view align axis */
+ if (len_squared_v2(mpr->matrix_offset[axis]) < 1e-6f && (mpr->matrix_offset[axis][2] > 0.0f) == is_pos) {
+ ok = false;
+ }
+ if (ok) {
+ immUniformColor4fv(index + 1 == mpr->highlight_part ? axis_highlight : axis_color[axis]);
+ immBegin(GWN_PRIM_TRI_FAN, 6);
+ ROTATED_VERT(cone_coords[4]);
+ for (int j = 0; j <= 4; j++) {
+ ROTATED_VERT(cone_coords[j % 4]);
+ }
+ immEnd();
+ }
+
+#undef ROTATED_VERT
+ }
+
+ gpuPopMatrix();
+ immUnbindProgram();
+}
+
+static void axis3d_draw_intern(
+ const bContext *UNUSED(C), wmManipulator *mpr,
+ const bool select, const bool highlight)
+{
+ const float *color = highlight ? mpr->color_hi : mpr->color;
+ float matrix_final[4][4];
+ float matrix_unit[4][4];
+
+ unit_m4(matrix_unit);
+
+ WM_manipulator_calc_matrix_final_params(
+ mpr,
+ &((struct WM_ManipulatorMatrixParams) {
+ .matrix_offset = matrix_unit,
+ }), matrix_final);
+
+ gpuPushMatrix();
+ gpuMultMatrix(matrix_final);
+
+ glEnable(GL_BLEND);
+ axis_geom_draw(mpr, color, select);
+ glDisable(GL_BLEND);
+ gpuPopMatrix();
+}
+
+static void manipulator_axis_draw(const bContext *C, wmManipulator *mpr)
+{
+ const bool is_modal = mpr->state & WM_MANIPULATOR_STATE_MODAL;
+ const bool is_highlight = (mpr->state & WM_MANIPULATOR_STATE_HIGHLIGHT) != 0;
+
+ (void)is_modal;
+
+ glEnable(GL_BLEND);
+ axis3d_draw_intern(C, mpr, false, is_highlight);
+ glDisable(GL_BLEND);
+}
+
+static int manipulator_axis_test_select(
+ bContext *UNUSED(C), wmManipulator *mpr, const wmEvent *event)
+{
+ float point_local[2] = {UNPACK2(event->mval)};
+ sub_v2_v2(point_local, mpr->matrix_basis[3]);
+ mul_v2_fl(point_local, 1.0f / (mpr->scale_basis * U.ui_scale));
+
+ const float len_sq = len_squared_v2(point_local);
+ if (len_sq > 1.0) {
+ return -1;
+ }
+
+ int part_best = -1;
+ int part_index = 1;
+ /* Use 'SQUARE(HANDLE_SIZE)' if we want to be able to _not_ focus on one of the axis. */
+ float i_best_len_sq = FLT_MAX;
+ for (int i = 0; i < 3; i++) {
+ for (int is_pos = 0; is_pos < 2; is_pos++) {
+ float co[2] = {
+ mpr->matrix_offset[i][0] * (is_pos ? 1 : -1),
+ mpr->matrix_offset[i][1] * (is_pos ? 1 : -1),
+ };
+
+ bool ok = true;
+
+ /* Check if we're viewing on an axis, there is no point to clicking on the current axis so show the reverse. */
+ if (len_squared_v2(co) < 1e-6f && (mpr->matrix_offset[i][2] > 0.0f) == is_pos) {
+ ok = false;
+ }
+
+ if (ok) {
+ const float len_axis_sq = len_squared_v2v2(co, point_local);
+ if (len_axis_sq < i_best_len_sq) {
+ part_best = part_index;
+ i_best_len_sq = len_axis_sq;
+ }
+ }
+ part_index += 1;
+ }
+ }
+
+ if (part_best != -1) {
+ return part_best;
+ }
+
+ /* The 'mpr->scale_final' is already applied when projecting. */
+ if (len_sq < 1.0f) {
+ return 0;
+ }
+
+ return -1;
+}
+
+static int manipulator_axis_cursor_get(wmManipulator *mpr)
+{
+ if (mpr->highlight_part > 0) {
+ return CURSOR_EDIT;
+ }
+ return BC_NSEW_SCROLLCURSOR;
+}
+
+void VIEW3D_WT_navigate_rotate(wmManipulatorType *wt)
+{
+ /* identifiers */
+ wt->idname = "VIEW3D_WT_navigate_rotate";
+
+ /* api callbacks */
+ wt->draw = manipulator_axis_draw;
+ wt->test_select = manipulator_axis_test_select;
+ wt->cursor_get = manipulator_axis_cursor_get;
+
+ wt->struct_size = sizeof(wmManipulator);
+}
diff --git a/source/blender/editors/space_view3d/view3d_manipulator_ruler.c b/source/blender/editors/space_view3d/view3d_manipulator_ruler.c
new file mode 100644
index 00000000000..e8d540bcc9d
--- /dev/null
+++ b/source/blender/editors/space_view3d/view3d_manipulator_ruler.c
@@ -0,0 +1,1094 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/editors/space_view3d/view3d_manipulator_ruler.c
+ * \ingroup spview3d
+ */
+
+#include "BLI_listbase.h"
+#include "BLI_string.h"
+#include "BLI_rect.h"
+#include "BLI_math.h"
+#include "BLI_utildefines.h"
+
+#include "BLT_translation.h"
+
+#include "BKE_context.h"
+#include "BKE_object.h"
+#include "BKE_gpencil.h"
+#include "BKE_unit.h"
+
+#include "DNA_object_types.h"
+#include "DNA_gpencil_types.h"
+#include "DNA_view3d_types.h"
+
+#include "BIF_gl.h"
+
+#include "ED_screen.h"
+#include "ED_transform_snap_object_context.h"
+#include "ED_view3d.h"
+
+#include "UI_resources.h"
+#include "UI_interface.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "RNA_access.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "view3d_intern.h" /* own include */
+
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+#include "GPU_select.h"
+
+#include "BLF_api.h"
+
+
+static const char *view3d_wgt_ruler_id = "VIEW3D_WGT_ruler";
+
+
+#define MVAL_MAX_PX_DIST 12.0f
+
+/* -------------------------------------------------------------------- */
+/* Ruler Item (we can have many) */
+enum {
+ RULERITEM_USE_ANGLE = (1 << 0), /* use protractor */
+ RULERITEM_USE_RAYCAST = (1 << 1)
+};
+
+enum {
+ RULERITEM_DIRECTION_IN = 0,
+ RULERITEM_DIRECTION_OUT
+};
+
+/* keep smaller then selection, since we may want click elsewhere without selecting a ruler */
+#define RULER_PICK_DIST 12.0f
+#define RULER_PICK_DIST_SQ (RULER_PICK_DIST * RULER_PICK_DIST)
+
+/* not clicking on a point */
+#define PART_LINE 0xff
+
+/* -------------------------------------------------------------------- */
+/* Ruler Info (wmManipulatorGroup customdata) */
+
+enum {
+ RULER_STATE_NORMAL = 0,
+ RULER_STATE_DRAG
+};
+
+enum {
+ RULER_SNAP_OK = (1 << 0),
+};
+
+typedef struct RulerInfo {
+ // ListBase items;
+ int item_active;
+ int flag;
+ int snap_flag;
+ int state;
+
+ struct SnapObjectContext *snap_context;
+
+ /* wm state */
+ wmWindow *win;
+ ScrArea *sa;
+ ARegion *ar; /* re-assigned every modal update */
+} RulerInfo;
+
+/* -------------------------------------------------------------------- */
+/* Ruler Item (two or three points) */
+
+typedef struct RulerItem {
+ wmManipulator mpr;
+
+ /* worldspace coords, middle being optional */
+ float co[3][3];
+
+ int flag;
+ int raycast_dir; /* RULER_DIRECTION_* */
+} RulerItem;
+
+typedef struct RulerInteraction {
+ /* selected coord */
+ char co_index; /* 0 -> 2 */
+ float drag_start_co[3];
+ uint inside_region : 1;
+} RulerInteraction;
+
+/* -------------------------------------------------------------------- */
+/** \name Internal Ruler Utilities
+ * \{ */
+
+static RulerItem *ruler_item_add(wmManipulatorGroup *mgroup)
+{
+ /* could pass this as an arg */
+ const wmManipulatorType *wt_ruler = WM_manipulatortype_find("VIEW3D_WT_ruler_item", true);
+ RulerItem *ruler_item = (RulerItem *)WM_manipulator_new_ptr(wt_ruler, mgroup, NULL);
+ WM_manipulator_set_flag(&ruler_item->mpr, WM_MANIPULATOR_DRAW_MODAL, true);
+ return ruler_item;
+}
+
+static void ruler_item_remove(bContext *C, wmManipulatorGroup *mgroup, RulerItem *ruler_item)
+{
+ WM_manipulator_unlink(&mgroup->manipulators, mgroup->parent_mmap, &ruler_item->mpr, C);
+}
+
+static void ruler_item_as_string(RulerItem *ruler_item, UnitSettings *unit,
+ char *numstr, size_t numstr_size, int prec)
+{
+ const bool do_split = (unit->flag & USER_UNIT_OPT_SPLIT) != 0;
+
+ if (ruler_item->flag & RULERITEM_USE_ANGLE) {
+ const float ruler_angle = angle_v3v3v3(ruler_item->co[0],
+ ruler_item->co[1],
+ ruler_item->co[2]);
+
+ if (unit->system == USER_UNIT_NONE) {
+ BLI_snprintf(numstr, numstr_size, "%.*f°", prec, RAD2DEGF(ruler_angle));
+ }
+ else {
+ bUnit_AsString(numstr, numstr_size,
+ (double)ruler_angle,
+ prec, unit->system, B_UNIT_ROTATION, do_split, false);
+ }
+ }
+ else {
+ const float ruler_len = len_v3v3(ruler_item->co[0],
+ ruler_item->co[2]);
+
+ if (unit->system == USER_UNIT_NONE) {
+ BLI_snprintf(numstr, numstr_size, "%.*f", prec, ruler_len);
+ }
+ else {
+ bUnit_AsString(numstr, numstr_size,
+ (double)(ruler_len * unit->scale_length),
+ prec, unit->system, B_UNIT_LENGTH, do_split, false);
+ }
+ }
+}
+
+static bool view3d_ruler_pick(
+ wmManipulatorGroup *mgroup, RulerItem *ruler_item, const float mval[2],
+ int *r_co_index)
+{
+ RulerInfo *ruler_info = mgroup->customdata;
+ ARegion *ar = ruler_info->ar;
+ bool found = false;
+
+ float dist_best = RULER_PICK_DIST_SQ;
+ int co_index_best = -1;
+
+ {
+ float co_ss[3][2];
+ float dist;
+ int j;
+
+ /* should these be checked? - ok for now not to */
+ for (j = 0; j < 3; j++) {
+ ED_view3d_project_float_global(ar, ruler_item->co[j], co_ss[j], V3D_PROJ_TEST_NOP);
+ }
+
+ if (ruler_item->flag & RULERITEM_USE_ANGLE) {
+ dist = min_ff(dist_squared_to_line_segment_v2(mval, co_ss[0], co_ss[1]),
+ dist_squared_to_line_segment_v2(mval, co_ss[1], co_ss[2]));
+ if (dist < dist_best) {
+ dist_best = dist;
+ found = true;
+
+ {
+ const float dist_points[3] = {
+ len_squared_v2v2(co_ss[0], mval),
+ len_squared_v2v2(co_ss[1], mval),
+ len_squared_v2v2(co_ss[2], mval),
+ };
+ if (min_fff(UNPACK3(dist_points)) < RULER_PICK_DIST_SQ) {
+ co_index_best = min_axis_v3(dist_points);
+ }
+ else {
+ co_index_best = -1;
+ }
+ }
+ }
+ }
+ else {
+ dist = dist_squared_to_line_segment_v2(mval, co_ss[0], co_ss[2]);
+ if (dist < dist_best) {
+ dist_best = dist;
+ found = true;
+
+ {
+ const float dist_points[2] = {
+ len_squared_v2v2(co_ss[0], mval),
+ len_squared_v2v2(co_ss[2], mval),
+ };
+ if (min_ff(UNPACK2(dist_points)) < RULER_PICK_DIST_SQ) {
+ co_index_best = (dist_points[0] < dist_points[1]) ? 0 : 2;
+ }
+ else {
+ co_index_best = -1;
+ }
+ }
+ }
+ }
+ }
+
+ *r_co_index = co_index_best;
+ return found;
+}
+
+/**
+ * Ensure the 'snap_context' is only cached while dragging,
+ * needed since the user may toggle modes between tool use.
+ */
+static void ruler_state_set(bContext *C, RulerInfo *ruler_info, int state)
+{
+ if (state == ruler_info->state) {
+ return;
+ }
+
+ /* always remove */
+ if (ruler_info->snap_context) {
+ ED_transform_snap_object_context_destroy(ruler_info->snap_context);
+ ruler_info->snap_context = NULL;
+ }
+
+ if (state == RULER_STATE_NORMAL) {
+ /* pass */
+ }
+ else if (state == RULER_STATE_DRAG) {
+ ruler_info->snap_context = ED_transform_snap_object_context_create_view3d(
+ CTX_data_main(C), CTX_data_scene(C), CTX_data_view_layer(C), CTX_data_engine_type(C), 0,
+ ruler_info->ar, CTX_wm_view3d(C));
+ }
+ else {
+ BLI_assert(0);
+ }
+
+ ruler_info->state = state;
+}
+
+static void view3d_ruler_item_project(
+ RulerInfo *ruler_info, float r_co[3],
+ const int xy[2])
+{
+ ED_view3d_win_to_3d_int(ruler_info->sa->spacedata.first, ruler_info->ar, r_co, xy, r_co);
+}
+
+/* use for mousemove events */
+static bool view3d_ruler_item_mousemove(
+ RulerInfo *ruler_info, RulerItem *ruler_item, const int mval[2],
+ const bool do_thickness, const bool do_snap)
+{
+ RulerInteraction *inter = ruler_item->mpr.interaction_data;
+ const float eps_bias = 0.0002f;
+ float dist_px = MVAL_MAX_PX_DIST * U.pixelsize; /* snap dist */
+
+ ruler_info->snap_flag &= ~RULER_SNAP_OK;
+
+ if (ruler_item) {
+ float *co = ruler_item->co[inter->co_index];
+ /* restore the initial depth */
+ copy_v3_v3(co, inter->drag_start_co);
+ view3d_ruler_item_project(ruler_info, co, mval);
+ if (do_thickness && inter->co_index != 1) {
+ // Scene *scene = CTX_data_scene(C);
+ // View3D *v3d = ruler_info->sa->spacedata.first;
+ const float mval_fl[2] = {UNPACK2(mval)};
+ float ray_normal[3];
+ float ray_start[3];
+ float *co_other;
+
+ co_other = ruler_item->co[inter->co_index == 0 ? 2 : 0];
+
+ if (ED_transform_snap_object_project_view3d_mixed(
+ ruler_info->snap_context,
+ SCE_SELECT_FACE,
+ &(const struct SnapObjectParams){
+ .snap_select = SNAP_ALL,
+ .use_object_edit_cage = true,
+ },
+ mval_fl, &dist_px, true,
+ co, ray_normal))
+ {
+ negate_v3(ray_normal);
+ /* add some bias */
+ madd_v3_v3v3fl(ray_start, co, ray_normal, eps_bias);
+ ED_transform_snap_object_project_ray(
+ ruler_info->snap_context,
+ &(const struct SnapObjectParams){
+ .snap_select = SNAP_ALL,
+ .use_object_edit_cage = true,
+ },
+ ray_start, ray_normal, NULL,
+ co_other, NULL);
+ }
+ }
+ else if (do_snap) {
+ // Scene *scene = CTX_data_scene(C);
+ View3D *v3d = ruler_info->sa->spacedata.first;
+ const float mval_fl[2] = {UNPACK2(mval)};
+ bool use_depth = (v3d->drawtype >= OB_SOLID);
+
+ if (ED_transform_snap_object_project_view3d_mixed(
+ ruler_info->snap_context,
+ (SCE_SELECT_VERTEX | SCE_SELECT_EDGE) | (use_depth ? SCE_SELECT_FACE : 0),
+ &(const struct SnapObjectParams){
+ .snap_select = SNAP_ALL,
+ .use_object_edit_cage = true,
+ },
+ mval_fl, &dist_px, use_depth,
+ co, NULL))
+ {
+ ruler_info->snap_flag |= RULER_SNAP_OK;
+ }
+ }
+ return true;
+ }
+ else {
+ return false;
+ }
+}
+
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Ruler/Grease Pencil Conversion
+ * \{ */
+
+#define RULER_ID "RulerData3D"
+static bool view3d_ruler_to_gpencil(bContext *C, wmManipulatorGroup *mgroup)
+{
+ // RulerInfo *ruler_info = mgroup->customdata;
+ Scene *scene = CTX_data_scene(C);
+ bGPDlayer *gpl;
+ bGPDframe *gpf;
+ bGPDstroke *gps;
+ bGPDpalette *palette;
+ bGPDpalettecolor *palcolor;
+ RulerItem *ruler_item;
+ const char *ruler_name = RULER_ID;
+ bool changed = false;
+
+ if (scene->gpd == NULL) {
+ scene->gpd = BKE_gpencil_data_addnew("GPencil");
+ }
+
+ gpl = BLI_findstring(&scene->gpd->layers, ruler_name, offsetof(bGPDlayer, info));
+ if (gpl == NULL) {
+ gpl = BKE_gpencil_layer_addnew(scene->gpd, ruler_name, false);
+ gpl->thickness = 1;
+ gpl->flag |= GP_LAYER_HIDE;
+ }
+
+ /* try to get active palette or create a new one */
+ palette = BKE_gpencil_palette_getactive(scene->gpd);
+ if (palette == NULL) {
+ palette = BKE_gpencil_palette_addnew(scene->gpd, DATA_("GP_Palette"), true);
+ }
+ /* try to get color with the ruler name or create a new one */
+ palcolor = BKE_gpencil_palettecolor_getbyname(palette, (char *)ruler_name);
+ if (palcolor == NULL) {
+ palcolor = BKE_gpencil_palettecolor_addnew(palette, (char *)ruler_name, true);
+ }
+
+ gpf = BKE_gpencil_layer_getframe(gpl, CFRA, true);
+ BKE_gpencil_free_strokes(gpf);
+
+ for (ruler_item = mgroup->manipulators.first; ruler_item; ruler_item = (RulerItem *)ruler_item->mpr.next) {
+ bGPDspoint *pt;
+ int j;
+
+ /* allocate memory for a new stroke */
+ gps = MEM_callocN(sizeof(bGPDstroke), "gp_stroke");
+ if (ruler_item->flag & RULERITEM_USE_ANGLE) {
+ gps->totpoints = 3;
+ pt = gps->points = MEM_callocN(sizeof(bGPDspoint) * gps->totpoints, "gp_stroke_points");
+ for (j = 0; j < 3; j++) {
+ copy_v3_v3(&pt->x, ruler_item->co[j]);
+ pt->pressure = 1.0f;
+ pt->strength = 1.0f;
+ pt++;
+ }
+ }
+ else {
+ gps->totpoints = 2;
+ pt = gps->points = MEM_callocN(sizeof(bGPDspoint) * gps->totpoints, "gp_stroke_points");
+ for (j = 0; j < 3; j += 2) {
+ copy_v3_v3(&pt->x, ruler_item->co[j]);
+ pt->pressure = 1.0f;
+ pt->strength = 1.0f;
+ pt++;
+ }
+ }
+ gps->flag = GP_STROKE_3DSPACE;
+ gps->thickness = 3;
+ /* assign color to stroke */
+ BLI_strncpy(gps->colorname, palcolor->info, sizeof(gps->colorname));
+ gps->palcolor = palcolor;
+ BLI_addtail(&gpf->strokes, gps);
+ changed = true;
+ }
+
+ return changed;
+}
+
+static bool view3d_ruler_from_gpencil(const bContext *C, wmManipulatorGroup *mgroup)
+{
+ Scene *scene = CTX_data_scene(C);
+ bool changed = false;
+
+ if (scene->gpd) {
+ bGPDlayer *gpl;
+ const char *ruler_name = RULER_ID;
+ gpl = BLI_findstring(&scene->gpd->layers, ruler_name, offsetof(bGPDlayer, info));
+ if (gpl) {
+ bGPDframe *gpf;
+ gpf = BKE_gpencil_layer_getframe(gpl, CFRA, false);
+ if (gpf) {
+ bGPDstroke *gps;
+ for (gps = gpf->strokes.first; gps; gps = gps->next) {
+ bGPDspoint *pt = gps->points;
+ int j;
+ RulerItem *ruler_item = NULL;
+ if (gps->totpoints == 3) {
+ ruler_item = ruler_item_add(mgroup);
+ for (j = 0; j < 3; j++) {
+ copy_v3_v3(ruler_item->co[j], &pt->x);
+ pt++;
+ }
+ ruler_item->flag |= RULERITEM_USE_ANGLE;
+ changed = true;
+ }
+ else if (gps->totpoints == 2) {
+ ruler_item = ruler_item_add(mgroup);
+ for (j = 0; j < 3; j += 2) {
+ copy_v3_v3(ruler_item->co[j], &pt->x);
+ pt++;
+ }
+ changed = true;
+ }
+ }
+ }
+ }
+ }
+
+ return changed;
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Ruler Item Manipulator Type
+ * \{ */
+
+static void manipulator_ruler_draw(const bContext *C, wmManipulator *mpr)
+{
+ Scene *scene = CTX_data_scene(C);
+ UnitSettings *unit = &scene->unit;
+ RulerInfo *ruler_info = mpr->parent_mgroup->customdata;
+ RulerItem *ruler_item = (RulerItem *)mpr;
+ ARegion *ar = ruler_info->ar;
+ RegionView3D *rv3d = ar->regiondata;
+ const float cap_size = 4.0f;
+ const float bg_margin = 4.0f * U.pixelsize;
+ const float bg_radius = 4.0f * U.pixelsize;
+ const float arc_size = 64.0f * U.pixelsize;
+#define ARC_STEPS 24
+ const int arc_steps = ARC_STEPS;
+ const float color_act[4] = {1.0f, 1.0f, 1.0f, 1.0f};
+ const float color_base[4] = {0.0f, 0.0f, 0.0f, 1.0f};
+ unsigned char color_text[3];
+ unsigned char color_wire[3];
+ float color_back[4] = {1.0f, 1.0f, 1.0f, 0.5f};
+
+ /* anti-aliased lines for more consistent appearance */
+ glEnable(GL_LINE_SMOOTH);
+
+ BLF_enable(blf_mono_font, BLF_ROTATION);
+ BLF_size(blf_mono_font, 14 * U.pixelsize, U.dpi);
+ BLF_rotation(blf_mono_font, 0.0f);
+
+ UI_GetThemeColor3ubv(TH_TEXT, color_text);
+ UI_GetThemeColor3ubv(TH_WIRE, color_wire);
+
+ const bool is_act = (mpr->flag & WM_MANIPULATOR_DRAW_HOVER);
+ float dir_ruler[2];
+ float co_ss[3][2];
+ int j;
+
+ /* should these be checked? - ok for now not to */
+ for (j = 0; j < 3; j++) {
+ ED_view3d_project_float_global(ar, ruler_item->co[j], co_ss[j], V3D_PROJ_TEST_NOP);
+ }
+
+ glEnable(GL_BLEND);
+
+ const uint shdr_pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ if (ruler_item->flag & RULERITEM_USE_ANGLE) {
+ immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR);
+
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2], viewport_size[3]);
+
+ immUniform1i("num_colors", 2); /* "advanced" mode */
+ const float *col = is_act ? color_act : color_base;
+ immUniformArray4fv("colors", (float *)(float[][4]){{0.67f, 0.67f, 0.67f, 1.0f}, {col[0], col[1], col[2], col[3]}}, 2);
+ immUniform1f("dash_width", 6.0f);
+
+ immBegin(GWN_PRIM_LINE_STRIP, 3);
+
+ immVertex2fv(shdr_pos, co_ss[0]);
+ immVertex2fv(shdr_pos, co_ss[1]);
+ immVertex2fv(shdr_pos, co_ss[2]);
+
+ immEnd();
+
+ immUnbindProgram();
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ /* arc */
+ {
+ float dir_tmp[3];
+ float co_tmp[3];
+ float arc_ss_coord[2];
+
+ float dir_a[3];
+ float dir_b[3];
+ float quat[4];
+ float axis[3];
+ float angle;
+ const float px_scale = (ED_view3d_pixel_size(rv3d, ruler_item->co[1]) *
+ min_fff(arc_size,
+ len_v2v2(co_ss[0], co_ss[1]) / 2.0f,
+ len_v2v2(co_ss[2], co_ss[1]) / 2.0f));
+
+ sub_v3_v3v3(dir_a, ruler_item->co[0], ruler_item->co[1]);
+ sub_v3_v3v3(dir_b, ruler_item->co[2], ruler_item->co[1]);
+ normalize_v3(dir_a);
+ normalize_v3(dir_b);
+
+ cross_v3_v3v3(axis, dir_a, dir_b);
+ angle = angle_normalized_v3v3(dir_a, dir_b);
+
+ axis_angle_to_quat(quat, axis, angle / arc_steps);
+
+ copy_v3_v3(dir_tmp, dir_a);
+
+ immUniformColor3ubv(color_wire);
+
+ immBegin(GWN_PRIM_LINE_STRIP, arc_steps + 1);
+
+ for (j = 0; j <= arc_steps; j++) {
+ madd_v3_v3v3fl(co_tmp, ruler_item->co[1], dir_tmp, px_scale);
+ ED_view3d_project_float_global(ar, co_tmp, arc_ss_coord, V3D_PROJ_TEST_NOP);
+ mul_qt_v3(quat, dir_tmp);
+
+ immVertex2fv(shdr_pos, arc_ss_coord);
+ }
+
+ immEnd();
+ }
+
+ /* capping */
+ {
+ float rot_90_vec_a[2];
+ float rot_90_vec_b[2];
+ float cap[2];
+
+ sub_v2_v2v2(dir_ruler, co_ss[0], co_ss[1]);
+ rot_90_vec_a[0] = -dir_ruler[1];
+ rot_90_vec_a[1] = dir_ruler[0];
+ normalize_v2(rot_90_vec_a);
+
+ sub_v2_v2v2(dir_ruler, co_ss[1], co_ss[2]);
+ rot_90_vec_b[0] = -dir_ruler[1];
+ rot_90_vec_b[1] = dir_ruler[0];
+ normalize_v2(rot_90_vec_b);
+
+ glEnable(GL_BLEND);
+
+ immUniformColor3ubv(color_wire);
+
+ immBegin(GWN_PRIM_LINES, 8);
+
+ madd_v2_v2v2fl(cap, co_ss[0], rot_90_vec_a, cap_size);
+ immVertex2fv(shdr_pos, cap);
+ madd_v2_v2v2fl(cap, co_ss[0], rot_90_vec_a, -cap_size);
+ immVertex2fv(shdr_pos, cap);
+
+ madd_v2_v2v2fl(cap, co_ss[2], rot_90_vec_b, cap_size);
+ immVertex2fv(shdr_pos, cap);
+ madd_v2_v2v2fl(cap, co_ss[2], rot_90_vec_b, -cap_size);
+ immVertex2fv(shdr_pos, cap);
+
+ /* angle vertex */
+ immVertex2f(shdr_pos, co_ss[1][0] - cap_size, co_ss[1][1] - cap_size);
+ immVertex2f(shdr_pos, co_ss[1][0] + cap_size, co_ss[1][1] + cap_size);
+ immVertex2f(shdr_pos, co_ss[1][0] - cap_size, co_ss[1][1] + cap_size);
+ immVertex2f(shdr_pos, co_ss[1][0] + cap_size, co_ss[1][1] - cap_size);
+
+ immEnd();
+
+ glDisable(GL_BLEND);
+ }
+
+ immUnbindProgram();
+
+ /* text */
+ {
+ char numstr[256];
+ float numstr_size[2];
+ float posit[2];
+ const int prec = 2; /* XXX, todo, make optional */
+
+ ruler_item_as_string(ruler_item, unit, numstr, sizeof(numstr), prec);
+
+ BLF_width_and_height(blf_mono_font, numstr, sizeof(numstr), &numstr_size[0], &numstr_size[1]);
+
+ posit[0] = co_ss[1][0] + (cap_size * 2.0f);
+ posit[1] = co_ss[1][1] - (numstr_size[1] / 2.0f);
+
+ /* draw text (bg) */
+ UI_draw_roundbox_corner_set(UI_CNR_ALL);
+ UI_draw_roundbox_aa(
+ true,
+ posit[0] - bg_margin, posit[1] - bg_margin,
+ posit[0] + bg_margin + numstr_size[0], posit[1] + bg_margin + numstr_size[1],
+ bg_radius, color_back);
+ /* draw text */
+ BLF_color3ubv(blf_mono_font, color_text);
+ BLF_position(blf_mono_font, posit[0], posit[1], 0.0f);
+ BLF_rotation(blf_mono_font, 0.0f);
+ BLF_draw(blf_mono_font, numstr, sizeof(numstr));
+ }
+ }
+ else {
+ immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR);
+
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2], viewport_size[3]);
+
+ immUniform1i("num_colors", 2); /* "advanced" mode */
+ const float *col = is_act ? color_act : color_base;
+ immUniformArray4fv("colors", (float *)(float[][4]){{0.67f, 0.67f, 0.67f, 1.0f}, {col[0], col[1], col[2], col[3]}}, 2);
+ immUniform1f("dash_width", 6.0f);
+
+ immBegin(GWN_PRIM_LINES, 2);
+
+ immVertex2fv(shdr_pos, co_ss[0]);
+ immVertex2fv(shdr_pos, co_ss[2]);
+
+ immEnd();
+
+ immUnbindProgram();
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ sub_v2_v2v2(dir_ruler, co_ss[0], co_ss[2]);
+
+ /* capping */
+ {
+ float rot_90_vec[2] = {-dir_ruler[1], dir_ruler[0]};
+ float cap[2];
+
+ normalize_v2(rot_90_vec);
+
+ glEnable(GL_BLEND);
+
+ immUniformColor3ubv(color_wire);
+
+ immBegin(GWN_PRIM_LINES, 4);
+
+ madd_v2_v2v2fl(cap, co_ss[0], rot_90_vec, cap_size);
+ immVertex2fv(shdr_pos, cap);
+ madd_v2_v2v2fl(cap, co_ss[0], rot_90_vec, -cap_size);
+ immVertex2fv(shdr_pos, cap);
+
+ madd_v2_v2v2fl(cap, co_ss[2], rot_90_vec, cap_size);
+ immVertex2fv(shdr_pos, cap);
+ madd_v2_v2v2fl(cap, co_ss[2], rot_90_vec, -cap_size);
+ immVertex2fv(shdr_pos, cap);
+
+ immEnd();
+
+ glDisable(GL_BLEND);
+ }
+
+ immUnbindProgram();
+
+ /* text */
+ {
+ char numstr[256];
+ float numstr_size[2];
+ const int prec = 6; /* XXX, todo, make optional */
+ float posit[2];
+
+ ruler_item_as_string(ruler_item, unit, numstr, sizeof(numstr), prec);
+
+ BLF_width_and_height(blf_mono_font, numstr, sizeof(numstr), &numstr_size[0], &numstr_size[1]);
+
+ mid_v2_v2v2(posit, co_ss[0], co_ss[2]);
+
+ /* center text */
+ posit[0] -= numstr_size[0] / 2.0f;
+ posit[1] -= numstr_size[1] / 2.0f;
+
+ /* draw text (bg) */
+ UI_draw_roundbox_corner_set(UI_CNR_ALL);
+ UI_draw_roundbox_aa(
+ true,
+ posit[0] - bg_margin, posit[1] - bg_margin,
+ posit[0] + bg_margin + numstr_size[0], posit[1] + bg_margin + numstr_size[1],
+ bg_radius, color_back);
+ /* draw text */
+ BLF_color3ubv(blf_mono_font, color_text);
+ BLF_position(blf_mono_font, posit[0], posit[1], 0.0f);
+ BLF_draw(blf_mono_font, numstr, sizeof(numstr));
+ }
+ }
+
+ glDisable(GL_LINE_SMOOTH);
+
+ BLF_disable(blf_mono_font, BLF_ROTATION);
+
+#undef ARC_STEPS
+
+ /* draw snap */
+ if ((ruler_info->snap_flag & RULER_SNAP_OK) &&
+ (ruler_info->state == RULER_STATE_DRAG) &&
+ (ruler_item->mpr.interaction_data != NULL))
+ {
+ RulerInteraction *inter = ruler_item->mpr.interaction_data;
+ /* size from drawSnapping */
+ const float size = 2.5f * UI_GetThemeValuef(TH_VERTEX_SIZE);
+ float co_ss_snap[3];
+ ED_view3d_project_float_global(ar, ruler_item->co[inter->co_index], co_ss_snap, V3D_PROJ_TEST_NOP);
+
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor4fv(color_act);
+
+ imm_draw_circle_wire_2d(pos, co_ss_snap[0], co_ss_snap[1], size * U.pixelsize, 32);
+
+ immUnbindProgram();
+ }
+}
+
+static int manipulator_ruler_test_select(
+ bContext *UNUSED(C), wmManipulator *mpr, const wmEvent *event)
+{
+ RulerItem *ruler_item_pick = (RulerItem *)mpr;
+ float mval_fl[2] = {UNPACK2(event->mval)};
+ int co_index;
+
+ /* select and drag */
+ if (view3d_ruler_pick(mpr->parent_mgroup, ruler_item_pick, mval_fl, &co_index)) {
+ if (co_index == -1) {
+ if ((ruler_item_pick->flag & RULERITEM_USE_ANGLE) == 0) {
+ return PART_LINE;
+ }
+ }
+ else {
+ return co_index;
+ }
+ }
+ return -1;
+}
+
+static int manipulator_ruler_modal(
+ bContext *C, wmManipulator *mpr, const wmEvent *event,
+ eWM_ManipulatorTweak UNUSED(tweak_flag))
+{
+ bool do_draw = false;
+ int exit_code = OPERATOR_RUNNING_MODAL;
+ RulerInfo *ruler_info = mpr->parent_mgroup->customdata;
+ RulerItem *ruler_item = (RulerItem *)mpr;
+ RulerInteraction *inter = ruler_item->mpr.interaction_data;
+ ARegion *ar = CTX_wm_region(C);
+
+ ruler_info->ar = ar;
+
+ switch (event->type) {
+ case MOUSEMOVE:
+ {
+ if (ruler_info->state == RULER_STATE_DRAG) {
+ if (view3d_ruler_item_mousemove(
+ ruler_info, ruler_item, event->mval,
+ event->shift != 0, event->ctrl != 0))
+ {
+ do_draw = true;
+ }
+ inter->inside_region = BLI_rcti_isect_pt_v(&ar->winrct, &event->x);
+ }
+ break;
+ }
+ }
+ if (do_draw) {
+ ED_region_tag_redraw(ar);
+ }
+ return exit_code;
+}
+
+static int manipulator_ruler_invoke(
+ bContext *C, wmManipulator *mpr, const wmEvent *event)
+{
+ wmManipulatorGroup *mgroup = mpr->parent_mgroup;
+ RulerInfo *ruler_info = mgroup->customdata;
+ RulerItem *ruler_item_pick = (RulerItem *)mpr;
+ RulerInteraction *inter = MEM_callocN(sizeof(RulerInteraction), __func__);
+ mpr->interaction_data = inter;
+
+ ARegion *ar = ruler_info->ar;
+
+ const float mval_fl[2] = {UNPACK2(event->mval)};
+
+ /* select and drag */
+ if (mpr->highlight_part == PART_LINE) {
+ if ((ruler_item_pick->flag & RULERITEM_USE_ANGLE) == 0) {
+ /* Add Center Point */
+ ruler_item_pick->flag |= RULERITEM_USE_ANGLE;
+ inter->co_index = 1;
+ ruler_state_set(C, ruler_info, RULER_STATE_DRAG);
+
+ /* find the factor */
+ {
+ float co_ss[2][2];
+ float fac;
+
+ ED_view3d_project_float_global(ar, ruler_item_pick->co[0], co_ss[0], V3D_PROJ_TEST_NOP);
+ ED_view3d_project_float_global(ar, ruler_item_pick->co[2], co_ss[1], V3D_PROJ_TEST_NOP);
+
+ fac = line_point_factor_v2(mval_fl, co_ss[0], co_ss[1]);
+ CLAMP(fac, 0.0f, 1.0f);
+
+ interp_v3_v3v3(ruler_item_pick->co[1],
+ ruler_item_pick->co[0],
+ ruler_item_pick->co[2], fac);
+ }
+
+ /* update the new location */
+ view3d_ruler_item_mousemove(
+ ruler_info, ruler_item_pick, event->mval,
+ event->shift != 0, event->ctrl != 0);
+ }
+ }
+ else {
+ inter->co_index = mpr->highlight_part;
+ ruler_state_set(C, ruler_info, RULER_STATE_DRAG);
+
+ /* store the initial depth */
+ copy_v3_v3(inter->drag_start_co, ruler_item_pick->co[inter->co_index]);
+ }
+
+ return OPERATOR_RUNNING_MODAL;
+}
+
+static void manipulator_ruler_exit(bContext *C, wmManipulator *mpr, const bool cancel)
+{
+ wmManipulatorGroup *mgroup = mpr->parent_mgroup;
+ RulerInfo *ruler_info = mgroup->customdata;
+
+ if (!cancel) {
+ if (ruler_info->state == RULER_STATE_DRAG) {
+ RulerItem *ruler_item = (RulerItem *)mpr;
+ RulerInteraction *inter = mpr->interaction_data;
+ /* rubber-band angle removal */
+ if (!inter->inside_region) {
+ if ((inter->co_index == 1) && (ruler_item->flag & RULERITEM_USE_ANGLE)) {
+ ruler_item->flag &= ~RULERITEM_USE_ANGLE;
+ }
+ else {
+ /* Not ideal, since the ruler isn't a mode and we don't want to override delete key
+ * use dragging out of the view for removal. */
+ ruler_item_remove(C, mgroup, ruler_item);
+ ruler_item = NULL;
+ mpr = NULL;
+ inter = NULL;
+ }
+ }
+ if (ruler_info->snap_flag & RULER_SNAP_OK) {
+ ruler_info->snap_flag &= ~RULER_SNAP_OK;
+ }
+ ruler_state_set(C, ruler_info, RULER_STATE_NORMAL);
+ }
+ /* We could convert only the current manipulator, for now just re-generate. */
+ view3d_ruler_to_gpencil(C, mgroup);
+ }
+
+ if (mpr) {
+ MEM_SAFE_FREE(mpr->interaction_data);
+ }
+
+ ruler_state_set(C, ruler_info, RULER_STATE_NORMAL);
+}
+
+static int manipulator_ruler_cursor_get(wmManipulator *mpr)
+{
+ if (mpr->highlight_part == PART_LINE) {
+ return BC_CROSSCURSOR;
+ }
+ return BC_NSEW_SCROLLCURSOR;
+}
+
+void VIEW3D_WT_ruler_item(wmManipulatorType *wt)
+{
+ /* identifiers */
+ wt->idname = "VIEW3D_WT_ruler_item";
+
+ /* api callbacks */
+ wt->draw = manipulator_ruler_draw;
+ wt->test_select = manipulator_ruler_test_select;
+ wt->modal = manipulator_ruler_modal;
+ wt->invoke = manipulator_ruler_invoke;
+ wt->exit = manipulator_ruler_exit;
+ wt->cursor_get = manipulator_ruler_cursor_get;
+
+ wt->struct_size = sizeof(RulerItem);
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Ruler Manipulator Group
+ * \{ */
+
+static bool WIDGETGROUP_ruler_poll(const bContext *C, wmManipulatorGroupType *wgt)
+{
+ WorkSpace *workspace = CTX_wm_workspace(C);
+ if (!STREQ(wgt->idname, workspace->tool.manipulator_group)) {
+ WM_manipulator_group_type_unlink_delayed_ptr(wgt);
+ return false;
+ }
+ return true;
+}
+
+static void WIDGETGROUP_ruler_setup(const bContext *C, wmManipulatorGroup *mgroup)
+{
+ RulerInfo *ruler_info = MEM_callocN(sizeof(RulerInfo), __func__);
+
+ if (view3d_ruler_from_gpencil(C, mgroup)) {
+ /* nop */
+ }
+
+ wmWindow *win = CTX_wm_window(C);
+ ScrArea *sa = CTX_wm_area(C);
+ ARegion *ar = CTX_wm_region(C);
+ ruler_info->win = win;
+ ruler_info->sa = sa;
+ ruler_info->ar = ar;
+
+ mgroup->customdata = ruler_info;
+}
+
+void VIEW3D_WGT_ruler(wmManipulatorGroupType *wgt)
+{
+ wgt->name = "Ruler Widgets";
+ wgt->idname = view3d_wgt_ruler_id;
+
+ wgt->flag |= WM_MANIPULATORGROUPTYPE_SCALE | WM_MANIPULATORGROUPTYPE_DRAW_MODAL_ALL;
+
+ wgt->mmap_params.spaceid = SPACE_VIEW3D;
+ wgt->mmap_params.regionid = RGN_TYPE_WINDOW;
+
+ wgt->poll = WIDGETGROUP_ruler_poll;
+ wgt->setup = WIDGETGROUP_ruler_setup;
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Add Ruler Operator
+ * \{ */
+
+static int view3d_ruler_poll(bContext *C)
+{
+ WorkSpace *workspace = CTX_wm_workspace(C);
+ if (!STREQ(view3d_wgt_ruler_id, workspace->tool.manipulator_group) ||
+ CTX_wm_region_view3d(C) == NULL)
+ {
+ return false;
+ }
+ return true;
+}
+
+static int view3d_ruler_add_invoke(bContext *C, wmOperator *UNUSED(op), const wmEvent *event)
+{
+ ARegion *ar = CTX_wm_region(C);
+ View3D *v3d = CTX_wm_view3d(C);
+ RegionView3D *rv3d = ar->regiondata;
+
+ wmManipulatorMap *mmap = ar->manipulator_map;
+ wmManipulatorGroup *mgroup = WM_manipulatormap_group_find(mmap, view3d_wgt_ruler_id);
+ const bool use_depth = (v3d->drawtype >= OB_SOLID);
+
+ /* Create new line */
+ RulerItem *ruler_item;
+ ruler_item = ruler_item_add(mgroup);
+
+ /* This is a little weak, but there is no real good way to tweak directly. */
+ WM_manipulator_highlight_set(mmap, &ruler_item->mpr);
+ if (WM_operator_name_call(
+ C, "MANIPULATORGROUP_OT_manipulator_tweak",
+ WM_OP_INVOKE_REGION_WIN, NULL) == OPERATOR_RUNNING_MODAL)
+ {
+ RulerInfo *ruler_info = mgroup->customdata;
+ RulerInteraction *inter = ruler_item->mpr.interaction_data;
+ if (use_depth) {
+ /* snap the first point added, not essential but handy */
+ inter->co_index = 0;
+ view3d_ruler_item_mousemove(ruler_info, ruler_item, event->mval, false, true);
+ copy_v3_v3(inter->drag_start_co, ruler_item->co[inter->co_index]);
+ }
+ else {
+ negate_v3_v3(inter->drag_start_co, rv3d->ofs);
+ copy_v3_v3(ruler_item->co[0], inter->drag_start_co);
+ view3d_ruler_item_project(ruler_info, ruler_item->co[0], event->mval);
+ }
+
+ copy_v3_v3(ruler_item->co[2], ruler_item->co[0]);
+ ruler_item->mpr.highlight_part = inter->co_index = 2;
+ }
+ return OPERATOR_FINISHED;
+}
+
+void VIEW3D_OT_ruler_add(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Ruler Add";
+ ot->idname = "VIEW3D_OT_ruler_add";
+ ot->description = "";
+
+ ot->invoke = view3d_ruler_add_invoke;
+ ot->poll = view3d_ruler_poll;
+
+ /* flags */
+ ot->flag = OPTYPE_UNDO | OPTYPE_INTERNAL;
+}
+
+/** \} */
diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c
index d71639c35d2..79fa9e14dc1 100644
--- a/source/blender/editors/space_view3d/view3d_ops.c
+++ b/source/blender/editors/space_view3d/view3d_ops.c
@@ -46,6 +46,7 @@
#include "BKE_appdir.h"
#include "BKE_blender_copybuffer.h"
#include "BKE_context.h"
+#include "BKE_group.h"
#include "BKE_main.h"
#include "BKE_report.h"
@@ -81,14 +82,16 @@ static int view3d_copybuffer_exec(bContext *C, wmOperator *op)
CTX_DATA_END;
for (Group *group = bmain->group.first; group; group = group->id.next) {
- for (GroupObject *go = group->gobject.first; go; go = go->next) {
- if (go->ob && (go->ob->id.tag & LIB_TAG_DOIT)) {
+ FOREACH_GROUP_OBJECT(group, object)
+ {
+ if (object && (object->id.tag & LIB_TAG_DOIT)) {
BKE_copybuffer_tag_ID(&group->id);
/* don't expand out to all other objects */
group->id.tag &= ~LIB_TAG_NEED_EXPAND;
break;
}
}
+ FOREACH_GROUP_OBJECT_END
}
BLI_make_file_string("/", str, BKE_tempdir_base(), "copybuffer.blend");
@@ -119,8 +122,8 @@ static int view3d_pastebuffer_exec(bContext *C, wmOperator *op)
if (RNA_boolean_get(op->ptr, "autoselect"))
flag |= FILE_AUTOSELECT;
- if (RNA_boolean_get(op->ptr, "active_layer"))
- flag |= FILE_ACTIVELAY;
+ if (RNA_boolean_get(op->ptr, "active_collection"))
+ flag |= FILE_ACTIVE_COLLECTION;
BLI_make_file_string("/", str, BKE_tempdir_base(), "copybuffer.blend");
if (BKE_copybuffer_paste(C, str, flag, op->reports)) {
@@ -152,7 +155,7 @@ static void VIEW3D_OT_pastebuffer(wmOperatorType *ot)
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
RNA_def_boolean(ot->srna, "autoselect", true, "Select", "Select pasted objects");
- RNA_def_boolean(ot->srna, "active_layer", true, "Active Layer", "Put pasted objects on the active layer");
+ RNA_def_boolean(ot->srna, "active_collection", true, "Active Collection", "Put pasted objects on the active collection");
}
/* ************************** registration **********************************/
@@ -193,7 +196,6 @@ void view3d_operatortypes(void)
WM_operatortype_append(VIEW3D_OT_render_border);
WM_operatortype_append(VIEW3D_OT_clear_render_border);
WM_operatortype_append(VIEW3D_OT_zoom_border);
- WM_operatortype_append(VIEW3D_OT_manipulator);
WM_operatortype_append(VIEW3D_OT_enable_manipulator);
WM_operatortype_append(VIEW3D_OT_cursor3d);
WM_operatortype_append(VIEW3D_OT_select_lasso);
@@ -201,7 +203,6 @@ void view3d_operatortypes(void)
WM_operatortype_append(VIEW3D_OT_camera_to_view);
WM_operatortype_append(VIEW3D_OT_camera_to_view_selected);
WM_operatortype_append(VIEW3D_OT_object_as_camera);
- WM_operatortype_append(VIEW3D_OT_localview);
WM_operatortype_append(VIEW3D_OT_game_start);
WM_operatortype_append(VIEW3D_OT_fly);
WM_operatortype_append(VIEW3D_OT_walk);
@@ -224,6 +225,8 @@ void view3d_operatortypes(void)
WM_operatortype_append(VIEW3D_OT_toggle_render);
+ WM_operatortype_append(VIEW3D_OT_ruler_add);
+
transform_operatortypes();
}
@@ -240,24 +243,7 @@ void view3d_keymap(wmKeyConfig *keyconf)
/* only for region 3D window */
keymap = WM_keymap_find(keyconf, "3D View", SPACE_VIEW3D, 0);
- /* Shift+LMB behavior first, so it has priority over KM_ANY item below. */
- kmi = WM_keymap_add_item(keymap, "VIEW3D_OT_manipulator", LEFTMOUSE, KM_PRESS, KM_SHIFT, 0);
- RNA_boolean_set(kmi->ptr, "release_confirm", true);
- RNA_boolean_set(kmi->ptr, "use_planar_constraint", true);
- RNA_boolean_set(kmi->ptr, "use_accurate", false);
-
- kmi = WM_keymap_add_item(keymap, "VIEW3D_OT_manipulator", LEFTMOUSE, KM_PRESS, KM_SHIFT, 0);
- RNA_boolean_set(kmi->ptr, "release_confirm", true);
- RNA_boolean_set(kmi->ptr, "use_planar_constraint", false);
- RNA_boolean_set(kmi->ptr, "use_accurate", true);
-
- /* Using KM_ANY here to allow holding modifiers before starting to transform. */
- kmi = WM_keymap_add_item(keymap, "VIEW3D_OT_manipulator", LEFTMOUSE, KM_PRESS, KM_ANY, 0);
- RNA_boolean_set(kmi->ptr, "release_confirm", true);
- RNA_boolean_set(kmi->ptr, "use_planar_constraint", false);
- RNA_boolean_set(kmi->ptr, "use_accurate", false);
-
- WM_keymap_verify_item(keymap, "VIEW3D_OT_cursor3d", ACTIONMOUSE, KM_PRESS, 0, 0);
+ WM_keymap_verify_item(keymap, "VIEW3D_OT_cursor3d", ACTIONMOUSE, KM_CLICK, 0, 0);
WM_keymap_verify_item(keymap, "VIEW3D_OT_rotate", MIDDLEMOUSE, KM_PRESS, 0, 0);
WM_keymap_verify_item(keymap, "VIEW3D_OT_move", MIDDLEMOUSE, KM_PRESS, KM_SHIFT, 0);
@@ -372,8 +358,6 @@ void view3d_keymap(wmKeyConfig *keyconf)
kmi = WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", PAD7, KM_PRESS, KM_SHIFT | KM_CTRL, 0);
RNA_enum_set(kmi->ptr, "type", RV3D_VIEW_BOTTOM);
RNA_boolean_set(kmi->ptr, "align_active", true);
-
- WM_keymap_add_item(keymap, "VIEW3D_OT_localview", PADSLASHKEY, KM_PRESS, 0, 0);
#ifdef WITH_INPUT_NDOF
/* note: positioned here so keymaps show keyboard keys if assigned */
diff --git a/source/blender/editors/space_view3d/view3d_project.c b/source/blender/editors/space_view3d/view3d_project.c
index 2e876bc48b3..ba3e78b25b9 100644
--- a/source/blender/editors/space_view3d/view3d_project.c
+++ b/source/blender/editors/space_view3d/view3d_project.c
@@ -36,14 +36,13 @@
#include "BLI_sys_types.h" /* int64_t */
-#include "BIF_gl.h" /* bglMats */
-#include "BIF_glutil.h" /* bglMats */
-
#include "BLI_math_vector.h"
#include "BKE_camera.h"
#include "BKE_screen.h"
+#include "GPU_matrix.h"
+
#include "ED_view3d.h" /* own include */
#define BL_NEAR_CLIP 0.001
@@ -310,6 +309,7 @@ float ED_view3d_calc_zfac(const RegionView3D *rv3d, const float co[3], bool *r_f
}
static void view3d_win_to_ray_segment(
+ const struct Depsgraph *depsgraph,
const ARegion *ar, const View3D *v3d, const float mval[2],
float r_ray_co[3], float r_ray_dir[3], float r_ray_start[3], float r_ray_end[3])
{
@@ -327,7 +327,7 @@ static void view3d_win_to_ray_segment(
start_offset = -end_offset;
}
else {
- ED_view3d_clip_range_get(v3d, rv3d, &start_offset, &end_offset, false);
+ ED_view3d_clip_range_get(depsgraph, v3d, rv3d, &start_offset, &end_offset, false);
}
if (r_ray_start) {
@@ -366,12 +366,13 @@ bool ED_view3d_clip_segment(const RegionView3D *rv3d, float ray_start[3], float
* \return success, false if the ray is totally clipped.
*/
bool ED_view3d_win_to_ray_ex(
+ const struct Depsgraph *depsgraph,
const ARegion *ar, const View3D *v3d, const float mval[2],
float r_ray_co[3], float r_ray_normal[3], float r_ray_start[3], bool do_clip)
{
float ray_end[3];
- view3d_win_to_ray_segment(ar, v3d, mval, r_ray_co, r_ray_normal, r_ray_start, ray_end);
+ view3d_win_to_ray_segment(depsgraph, ar, v3d, mval, r_ray_co, r_ray_normal, r_ray_start, ray_end);
/* bounds clipping */
if (do_clip) {
@@ -395,10 +396,11 @@ bool ED_view3d_win_to_ray_ex(
* \return success, false if the ray is totally clipped.
*/
bool ED_view3d_win_to_ray(
+ const struct Depsgraph *depsgraph,
const ARegion *ar, const View3D *v3d, const float mval[2],
float r_ray_start[3], float r_ray_normal[3], const bool do_clip)
{
- return ED_view3d_win_to_ray_ex(ar, v3d, mval, NULL, r_ray_normal, r_ray_start, do_clip);
+ return ED_view3d_win_to_ray_ex(depsgraph,ar, v3d, mval, NULL, r_ray_normal, r_ray_start, do_clip);
}
/**
@@ -628,10 +630,11 @@ void ED_view3d_win_to_vector(const ARegion *ar, const float mval[2], float out[3
* \param do_clip Optionally clip the ray by the view clipping planes.
* \return success, false if the segment is totally clipped.
*/
-bool ED_view3d_win_to_segment(const ARegion *ar, View3D *v3d, const float mval[2],
+bool ED_view3d_win_to_segment(const struct Depsgraph *depsgraph,
+ const ARegion *ar, View3D *v3d, const float mval[2],
float r_ray_start[3], float r_ray_end[3], const bool do_clip)
{
- view3d_win_to_ray_segment(ar, v3d, mval, NULL, NULL, r_ray_start, r_ray_end);
+ view3d_win_to_ray_segment(depsgraph, ar, v3d, mval, NULL, NULL, r_ray_start, r_ray_end);
/* bounds clipping */
if (do_clip) {
@@ -661,16 +664,22 @@ void ED_view3d_ob_project_mat_get_from_obmat(const RegionView3D *rv3d, float obm
}
/**
- * Uses window coordinates (x,y) and depth component z to find a point in
- * modelspace */
-void ED_view3d_unproject(bglMats *mats, float out[3], const float x, const float y, const float z)
+ * Convert between region relative coordinates (x,y) and depth component z and
+ * a point in world space. */
+void ED_view3d_project(const struct ARegion *ar, const float world[3], float region[3])
{
- double ux, uy, uz;
+ // viewport is set up to make coordinates relative to the region, not window
+ RegionView3D *rv3d = ar->regiondata;
+ int viewport[4] = {0, 0, ar->winx, ar->winy};
- gluUnProject(x, y, z, mats->modelview, mats->projection,
- (GLint *)mats->viewport, &ux, &uy, &uz);
+ gpuProject(world, rv3d->viewmat, rv3d->winmat, viewport, region);
+}
+
+bool ED_view3d_unproject(const struct ARegion *ar, float regionx, float regiony, float regionz, float world[3])
+{
+ RegionView3D *rv3d = ar->regiondata;
+ int viewport[4] = {0, 0, ar->winx, ar->winy};
+ float region[3] = {regionx, regiony, regionz};
- out[0] = ux;
- out[1] = uy;
- out[2] = uz;
+ return gpuUnProject(region, rv3d->viewmat, rv3d->winmat, viewport, world);
}
diff --git a/source/blender/editors/space_view3d/view3d_ruler.c b/source/blender/editors/space_view3d/view3d_ruler.c
index f2c87953302..093425fc3bc 100644
--- a/source/blender/editors/space_view3d/view3d_ruler.c
+++ b/source/blender/editors/space_view3d/view3d_ruler.c
@@ -43,6 +43,9 @@
#include "BIF_gl.h"
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+
#include "WM_api.h"
#include "WM_types.h"
@@ -279,7 +282,7 @@ static void ruler_state_set(bContext *C, RulerInfo *ruler_info, int state)
}
else if (state == RULER_STATE_DRAG) {
ruler_info->snap_context = ED_transform_snap_object_context_create_view3d(
- CTX_data_main(C), CTX_data_scene(C), 0,
+ CTX_data_main(C), CTX_data_scene(C), CTX_data_view_layer(C), CTX_data_engine_type(C), 0,
ruler_info->ar, CTX_wm_view3d(C));
}
else {
@@ -425,12 +428,11 @@ static void ruler_info_draw_pixel(const struct bContext *C, ARegion *ar, void *a
#define ARC_STEPS 24
const int arc_steps = ARC_STEPS;
int i;
- //unsigned int color_act = 0x666600;
- unsigned int color_act = 0xffffff;
- unsigned int color_base = 0x0;
- unsigned char color_back[4] = {0xff, 0xff, 0xff, 0x80};
+ const float color_act[4] = {1.0f, 1.0f, 1.0f, 1.0f};
+ const float color_base[4] = {0.0f, 0.0f, 0.0f, 1.0f};
unsigned char color_text[3];
unsigned char color_wire[3];
+ float color_back[4] = {1.0f, 1.0f, 1.0f, 0.5f};
/* anti-aliased lines for more consistent appearance */
glEnable(GL_LINE_SMOOTH);
@@ -455,28 +457,37 @@ static void ruler_info_draw_pixel(const struct bContext *C, ARegion *ar, void *a
glEnable(GL_BLEND);
- cpack(is_act ? color_act : color_base);
+ const uint shdr_pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
if (ruler_item->flag & RULERITEM_USE_ANGLE) {
- glBegin(GL_LINE_STRIP);
- for (j = 0; j < 3; j++) {
- glVertex2fv(co_ss[j]);
- }
- glEnd();
- cpack(0xaaaaaa);
- setlinestyle(3);
- glBegin(GL_LINE_STRIP);
- for (j = 0; j < 3; j++) {
- glVertex2fv(co_ss[j]);
- }
- glEnd();
- setlinestyle(0);
+ immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR);
+
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2], viewport_size[3]);
+
+ immUniform1i("num_colors", 2); /* "advanced" mode */
+ const float *col = is_act ? color_act : color_base;
+ immUniformArray4fv("colors", (float *)(float[][4]){{0.67f, 0.67f, 0.67f, 1.0f}, {col[0], col[1], col[2], col[3]}}, 2);
+ immUniform1f("dash_width", 6.0f);
+
+ immBegin(GWN_PRIM_LINE_STRIP, 3);
+
+ immVertex2fv(shdr_pos, co_ss[0]);
+ immVertex2fv(shdr_pos, co_ss[1]);
+ immVertex2fv(shdr_pos, co_ss[2]);
+
+ immEnd();
+
+ immUnbindProgram();
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
/* arc */
{
float dir_tmp[3];
float co_tmp[3];
- float arc_ss_coords[ARC_STEPS + 1][2];
+ float arc_ss_coord[2];
float dir_a[3];
float dir_b[3];
@@ -500,46 +511,19 @@ static void ruler_info_draw_pixel(const struct bContext *C, ARegion *ar, void *a
copy_v3_v3(dir_tmp, dir_a);
- glColor3ubv(color_wire);
+ immUniformColor3ubv(color_wire);
+
+ immBegin(GWN_PRIM_LINE_STRIP, arc_steps + 1);
for (j = 0; j <= arc_steps; j++) {
madd_v3_v3v3fl(co_tmp, ruler_item->co[1], dir_tmp, px_scale);
- ED_view3d_project_float_global(ar, co_tmp, arc_ss_coords[j], V3D_PROJ_TEST_NOP);
+ ED_view3d_project_float_global(ar, co_tmp, arc_ss_coord, V3D_PROJ_TEST_NOP);
mul_qt_v3(quat, dir_tmp);
- }
-
- glEnableClientState(GL_VERTEX_ARRAY);
- glVertexPointer(2, GL_FLOAT, 0, arc_ss_coords);
- glDrawArrays(GL_LINE_STRIP, 0, arc_steps + 1);
- glDisableClientState(GL_VERTEX_ARRAY);
- }
- /* text */
- {
- char numstr[256];
- float numstr_size[2];
- float pos[2];
- const int prec = 2; /* XXX, todo, make optional */
-
- ruler_item_as_string(ruler_item, unit, numstr, sizeof(numstr), prec);
-
- BLF_width_and_height(blf_mono_font, numstr, sizeof(numstr), &numstr_size[0], &numstr_size[1]);
-
- pos[0] = co_ss[1][0] + (cap_size * 2.0f);
- pos[1] = co_ss[1][1] - (numstr_size[1] / 2.0f);
+ immVertex2fv(shdr_pos, arc_ss_coord);
+ }
- /* draw text (bg) */
- glColor4ubv(color_back);
- UI_draw_roundbox_corner_set(UI_CNR_ALL);
- UI_draw_roundbox(
- pos[0] - bg_margin, pos[1] - bg_margin,
- pos[0] + bg_margin + numstr_size[0], pos[1] + bg_margin + numstr_size[1],
- bg_radius);
- /* draw text */
- glColor3ubv(color_text);
- BLF_position(blf_mono_font, pos[0], pos[1], 0.0f);
- BLF_rotation(blf_mono_font, 0.0f);
- BLF_draw(blf_mono_font, numstr, sizeof(numstr));
+ immEnd();
}
/* capping */
@@ -560,75 +544,84 @@ static void ruler_info_draw_pixel(const struct bContext *C, ARegion *ar, void *a
glEnable(GL_BLEND);
- glColor3ubv(color_wire);
+ immUniformColor3ubv(color_wire);
- glBegin(GL_LINES);
+ immBegin(GWN_PRIM_LINES, 8);
madd_v2_v2v2fl(cap, co_ss[0], rot_90_vec_a, cap_size);
- glVertex2fv(cap);
+ immVertex2fv(shdr_pos, cap);
madd_v2_v2v2fl(cap, co_ss[0], rot_90_vec_a, -cap_size);
- glVertex2fv(cap);
+ immVertex2fv(shdr_pos, cap);
madd_v2_v2v2fl(cap, co_ss[2], rot_90_vec_b, cap_size);
- glVertex2fv(cap);
+ immVertex2fv(shdr_pos, cap);
madd_v2_v2v2fl(cap, co_ss[2], rot_90_vec_b, -cap_size);
- glVertex2fv(cap);
+ immVertex2fv(shdr_pos, cap);
/* angle vertex */
- glVertex2f(co_ss[1][0] - cap_size, co_ss[1][1] - cap_size);
- glVertex2f(co_ss[1][0] + cap_size, co_ss[1][1] + cap_size);
- glVertex2f(co_ss[1][0] - cap_size, co_ss[1][1] + cap_size);
- glVertex2f(co_ss[1][0] + cap_size, co_ss[1][1] - cap_size);
- glEnd();
+ immVertex2f(shdr_pos, co_ss[1][0] - cap_size, co_ss[1][1] - cap_size);
+ immVertex2f(shdr_pos, co_ss[1][0] + cap_size, co_ss[1][1] + cap_size);
+ immVertex2f(shdr_pos, co_ss[1][0] - cap_size, co_ss[1][1] + cap_size);
+ immVertex2f(shdr_pos, co_ss[1][0] + cap_size, co_ss[1][1] - cap_size);
+
+ immEnd();
glDisable(GL_BLEND);
}
- }
- else {
- glBegin(GL_LINE_STRIP);
- for (j = 0; j < 3; j += 2) {
- glVertex2fv(co_ss[j]);
- }
- glEnd();
- cpack(0xaaaaaa);
- setlinestyle(3);
- glBegin(GL_LINE_STRIP);
- for (j = 0; j < 3; j += 2) {
- glVertex2fv(co_ss[j]);
- }
- glEnd();
- setlinestyle(0);
- sub_v2_v2v2(dir_ruler, co_ss[0], co_ss[2]);
+ immUnbindProgram();
/* text */
{
char numstr[256];
float numstr_size[2];
- const int prec = 6; /* XXX, todo, make optional */
- float pos[2];
+ float posit[2];
+ const int prec = 2; /* XXX, todo, make optional */
ruler_item_as_string(ruler_item, unit, numstr, sizeof(numstr), prec);
BLF_width_and_height(blf_mono_font, numstr, sizeof(numstr), &numstr_size[0], &numstr_size[1]);
- mid_v2_v2v2(pos, co_ss[0], co_ss[2]);
-
- /* center text */
- pos[0] -= numstr_size[0] / 2.0f;
- pos[1] -= numstr_size[1] / 2.0f;
+ posit[0] = co_ss[1][0] + (cap_size * 2.0f);
+ posit[1] = co_ss[1][1] - (numstr_size[1] / 2.0f);
/* draw text (bg) */
- glColor4ubv(color_back);
UI_draw_roundbox_corner_set(UI_CNR_ALL);
- UI_draw_roundbox(pos[0] - bg_margin, pos[1] - bg_margin,
- pos[0] + bg_margin + numstr_size[0], pos[1] + bg_margin + numstr_size[1],
- bg_radius);
+ UI_draw_roundbox_aa(true,
+ posit[0] - bg_margin, posit[1] - bg_margin,
+ posit[0] + bg_margin + numstr_size[0], posit[1] + bg_margin + numstr_size[1],
+ bg_radius, color_back);
/* draw text */
- glColor3ubv(color_text);
- BLF_position(blf_mono_font, pos[0], pos[1], 0.0f);
+ BLF_color3ubv(blf_mono_font, color_text);
+ BLF_position(blf_mono_font, posit[0], posit[1], 0.0f);
+ BLF_rotation(blf_mono_font, 0.0f);
BLF_draw(blf_mono_font, numstr, sizeof(numstr));
}
+ }
+ else {
+ immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR);
+
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2], viewport_size[3]);
+
+ immUniform1i("num_colors", 2); /* "advanced" mode */
+ const float *col = is_act ? color_act : color_base;
+ immUniformArray4fv("colors", (float *)(float[][4]){{0.67f, 0.67f, 0.67f, 1.0f}, {col[0], col[1], col[2], col[3]}}, 2);
+ immUniform1f("dash_width", 6.0f);
+
+ immBegin(GWN_PRIM_LINES, 2);
+
+ immVertex2fv(shdr_pos, co_ss[0]);
+ immVertex2fv(shdr_pos, co_ss[2]);
+
+ immEnd();
+
+ immUnbindProgram();
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ sub_v2_v2v2(dir_ruler, co_ss[0], co_ss[2]);
/* capping */
{
@@ -638,22 +631,56 @@ static void ruler_info_draw_pixel(const struct bContext *C, ARegion *ar, void *a
normalize_v2(rot_90_vec);
glEnable(GL_BLEND);
- glColor3ubv(color_wire);
- glBegin(GL_LINES);
+ immUniformColor3ubv(color_wire);
+
+ immBegin(GWN_PRIM_LINES, 4);
+
madd_v2_v2v2fl(cap, co_ss[0], rot_90_vec, cap_size);
- glVertex2fv(cap);
+ immVertex2fv(shdr_pos, cap);
madd_v2_v2v2fl(cap, co_ss[0], rot_90_vec, -cap_size);
- glVertex2fv(cap);
+ immVertex2fv(shdr_pos, cap);
madd_v2_v2v2fl(cap, co_ss[2], rot_90_vec, cap_size);
- glVertex2fv(cap);
+ immVertex2fv(shdr_pos, cap);
madd_v2_v2v2fl(cap, co_ss[2], rot_90_vec, -cap_size);
- glVertex2fv(cap);
- glEnd();
+ immVertex2fv(shdr_pos, cap);
+
+ immEnd();
glDisable(GL_BLEND);
}
+
+ immUnbindProgram();
+
+ /* text */
+ {
+ char numstr[256];
+ float numstr_size[2];
+ const int prec = 6; /* XXX, todo, make optional */
+ float posit[2];
+
+ ruler_item_as_string(ruler_item, unit, numstr, sizeof(numstr), prec);
+
+ BLF_width_and_height(blf_mono_font, numstr, sizeof(numstr), &numstr_size[0], &numstr_size[1]);
+
+ mid_v2_v2v2(posit, co_ss[0], co_ss[2]);
+
+ /* center text */
+ posit[0] -= numstr_size[0] / 2.0f;
+ posit[1] -= numstr_size[1] / 2.0f;
+
+ /* draw text (bg) */
+ UI_draw_roundbox_corner_set(UI_CNR_ALL);
+ UI_draw_roundbox_aa(true,
+ posit[0] - bg_margin, posit[1] - bg_margin,
+ posit[0] + bg_margin + numstr_size[0], posit[1] + bg_margin + numstr_size[1],
+ bg_radius, color_back);
+ /* draw text */
+ BLF_color3ubv(blf_mono_font, color_text);
+ BLF_position(blf_mono_font, posit[0], posit[1], 0.0f);
+ BLF_draw(blf_mono_font, numstr, sizeof(numstr));
+ }
}
}
@@ -672,8 +699,14 @@ static void ruler_info_draw_pixel(const struct bContext *C, ARegion *ar, void *a
float co_ss[3];
ED_view3d_project_float_global(ar, ruler_item->co[ruler_item->co_index], co_ss, V3D_PROJ_TEST_NOP);
- cpack(color_act);
- circ(co_ss[0], co_ss[1], size * U.pixelsize);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor4fv(color_act);
+
+ imm_draw_circle_wire_2d(pos, co_ss[0], co_ss[1], size * U.pixelsize, 32);
+
+ immUnbindProgram();
}
}
diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c
index 05cf552e5cc..89a033236f1 100644
--- a/source/blender/editors/space_view3d/view3d_select.c
+++ b/source/blender/editors/space_view3d/view3d_select.c
@@ -63,16 +63,16 @@
#include "BKE_armature.h"
#include "BKE_context.h"
#include "BKE_curve.h"
-#include "BKE_depsgraph.h"
+#include "BKE_layer.h"
#include "BKE_mball.h"
#include "BKE_mesh.h"
#include "BKE_object.h"
#include "BKE_paint.h"
#include "BKE_editmesh.h"
+#include "BKE_scene.h"
#include "BKE_tracking.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
+#include "DEG_depsgraph.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -93,6 +93,8 @@
#include "UI_interface.h"
#include "GPU_draw.h"
+#include "GPU_glew.h"
+#include "GPU_matrix.h"
#include "view3d_intern.h" /* own include */
@@ -108,7 +110,10 @@ void view3d_set_viewcontext(bContext *C, ViewContext *vc)
{
memset(vc, 0, sizeof(ViewContext));
vc->ar = CTX_wm_region(C);
+ vc->depsgraph = CTX_data_depsgraph(C);
vc->scene = CTX_data_scene(C);
+ vc->view_layer = CTX_data_view_layer(C);
+ vc->engine_type = CTX_data_engine_type(C);
vc->v3d = CTX_wm_view3d(C);
vc->win = CTX_wm_window(C);
vc->rv3d = CTX_wm_region_view3d(C);
@@ -116,34 +121,6 @@ void view3d_set_viewcontext(bContext *C, ViewContext *vc)
vc->obedit = CTX_data_edit_object(C);
}
-/*
- * ob == NULL if you want global matrices
- * */
-void view3d_get_transformation(const ARegion *ar, RegionView3D *rv3d, Object *ob, bglMats *mats)
-{
- float cpy[4][4];
- int i, j;
-
- if (ob) {
- mul_m4_m4m4(cpy, rv3d->viewmat, ob->obmat);
- }
- else {
- copy_m4_m4(cpy, rv3d->viewmat);
- }
-
- for (i = 0; i < 4; ++i) {
- for (j = 0; j < 4; ++j) {
- mats->projection[i * 4 + j] = rv3d->winmat[i][j];
- mats->modelview[i * 4 + j] = cpy[i][j];
- }
- }
-
- mats->viewport[0] = ar->winrct.xmin;
- mats->viewport[1] = ar->winrct.ymin;
- mats->viewport[2] = ar->winx;
- mats->viewport[3] = ar->winy;
-}
-
/* ********************** view3d_select: selection manipulations ********************* */
/* local prototypes */
@@ -232,6 +209,7 @@ static void edbm_backbuf_check_and_select_tfaces(Mesh *me, const bool select)
/* *********************** GESTURE AND LASSO ******************* */
typedef struct LassoSelectUserData {
+ const EvaluationContext *eval_ctx;
ViewContext *vc;
const rcti *rect;
const rctf *rect_fl;
@@ -274,14 +252,15 @@ static int view3d_selectable_data(bContext *C)
return 0;
if (ob) {
- if (ob->mode & OB_MODE_EDIT) {
+ const WorkSpace *workspace = CTX_wm_workspace(C);
+ if (workspace->object_mode & OB_MODE_EDIT) {
if (ob->type == OB_FONT) {
return 0;
}
}
else {
- if ((ob->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT)) &&
- !BKE_paint_select_elem_test(ob))
+ if ((workspace->object_mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT)) &&
+ !BKE_paint_select_elem_test(ob, workspace->object_mode))
{
return 0;
}
@@ -394,40 +373,41 @@ static void do_lasso_select_pose(ViewContext *vc, Object *ob, const int mcords[]
bArmature *arm = ob->data;
if (arm->flag & ARM_HAS_VIZ_DEPS) {
/* mask modifier ('armature' mode), etc. */
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
}
}
}
-static void object_deselect_all_visible(Scene *scene, View3D *v3d)
+static void object_deselect_all_visible(ViewLayer *view_layer)
{
Base *base;
- for (base = scene->base.first; base; base = base->next) {
- if (BASE_SELECTABLE(v3d, base)) {
- ED_base_object_select(base, BA_DESELECT);
+ for (base = view_layer->object_bases.first; base; base = base->next) {
+ if (BASE_SELECTABLE(base)) {
+ ED_object_base_select(base, BA_DESELECT);
}
}
}
-static void do_lasso_select_objects(ViewContext *vc, const int mcords[][2], const short moves,
- const bool extend, const bool select)
+static void do_lasso_select_objects(
+ const EvaluationContext *eval_ctx,
+ ViewContext *vc, const int mcords[][2], const short moves,
+ const bool extend, const bool select)
{
Base *base;
if (extend == false && select)
- object_deselect_all_visible(vc->scene, vc->v3d);
+ object_deselect_all_visible(vc->view_layer);
- for (base = vc->scene->base.first; base; base = base->next) {
- if (BASE_SELECTABLE(vc->v3d, base)) { /* use this to avoid un-needed lasso lookups */
+ for (base = vc->view_layer->object_bases.first; base; base = base->next) {
+ if (BASE_SELECTABLE(base)) { /* use this to avoid un-needed lasso lookups */
if (ED_view3d_project_base(vc->ar, base) == V3D_PROJ_RET_OK) {
if (BLI_lasso_is_point_inside(mcords, moves, base->sx, base->sy, IS_CLIPPED)) {
- ED_base_object_select(base, select ? BA_SELECT : BA_DESELECT);
- base->object->flag = base->flag;
+ ED_object_base_select(base, select ? BA_SELECT : BA_DESELECT);
}
}
- if (vc->obact == base->object && (base->object->mode & OB_MODE_POSE)) {
+ if (vc->obact == base->object && (eval_ctx->object_mode & OB_MODE_POSE)) {
do_lasso_select_pose(vc, base->object, mcords, moves, select);
}
}
@@ -481,7 +461,9 @@ static void do_lasso_select_mesh__doSelectFace(void *userData, BMFace *efa, cons
}
}
-static void do_lasso_select_mesh(ViewContext *vc, const int mcords[][2], short moves, bool extend, bool select)
+static void do_lasso_select_mesh(
+ const struct EvaluationContext *eval_ctx, ViewContext *vc,
+ const int mcords[][2], short moves, bool extend, bool select)
{
LassoSelectUserData data;
ToolSettings *ts = vc->scene->toolsettings;
@@ -501,25 +483,25 @@ static void do_lasso_select_mesh(ViewContext *vc, const int mcords[][2], short m
/* for non zbuf projections, don't change the GL state */
ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
- glLoadMatrixf(vc->rv3d->viewmat);
- bbsel = EDBM_backbuf_border_mask_init(vc, mcords, moves, rect.xmin, rect.ymin, rect.xmax, rect.ymax);
+ gpuLoadMatrix(vc->rv3d->viewmat);
+ bbsel = EDBM_backbuf_border_mask_init(eval_ctx, vc, mcords, moves, rect.xmin, rect.ymin, rect.xmax, rect.ymax);
if (ts->selectmode & SCE_SELECT_VERTEX) {
if (bbsel) {
edbm_backbuf_check_and_select_verts(vc->em, select);
}
else {
- mesh_foreachScreenVert(vc, do_lasso_select_mesh__doSelectVert, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
+ mesh_foreachScreenVert(eval_ctx, vc, do_lasso_select_mesh__doSelectVert, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
}
}
if (ts->selectmode & SCE_SELECT_EDGE) {
/* Does both bbsel and non-bbsel versions (need screen cos for both) */
data.pass = 0;
- mesh_foreachScreenEdge(vc, do_lasso_select_mesh__doSelectEdge, &data, V3D_PROJ_TEST_CLIP_NEAR);
+ mesh_foreachScreenEdge(eval_ctx, vc, do_lasso_select_mesh__doSelectEdge, &data, V3D_PROJ_TEST_CLIP_NEAR);
if (data.is_done == false) {
data.pass = 1;
- mesh_foreachScreenEdge(vc, do_lasso_select_mesh__doSelectEdge, &data, V3D_PROJ_TEST_CLIP_NEAR);
+ mesh_foreachScreenEdge(eval_ctx, vc, do_lasso_select_mesh__doSelectEdge, &data, V3D_PROJ_TEST_CLIP_NEAR);
}
}
@@ -528,7 +510,7 @@ static void do_lasso_select_mesh(ViewContext *vc, const int mcords[][2], short m
edbm_backbuf_check_and_select_faces(vc->em, select);
}
else {
- mesh_foreachScreenFace(vc, do_lasso_select_mesh__doSelectFace, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
+ mesh_foreachScreenFace(eval_ctx, vc, do_lasso_select_mesh__doSelectFace, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
}
}
@@ -727,7 +709,7 @@ static void do_lasso_select_meshobject__doSelectVert(void *userData, MVert *mv,
SET_FLAG_FROM_TEST(mv->flag, data->select, SELECT);
}
}
-static void do_lasso_select_paintvert(ViewContext *vc, const int mcords[][2], short moves, bool extend, bool select)
+static void do_lasso_select_paintvert(const struct EvaluationContext *eval_ctx, ViewContext *vc, const int mcords[][2], short moves, bool extend, bool select)
{
const bool use_zbuf = (vc->v3d->flag & V3D_ZBUF_SELECT) != 0;
Object *ob = vc->obact;
@@ -745,7 +727,7 @@ static void do_lasso_select_paintvert(ViewContext *vc, const int mcords[][2], sh
if (use_zbuf) {
bm_vertoffs = me->totvert + 1; /* max index array */
- EDBM_backbuf_border_mask_init(vc, mcords, moves, rect.xmin, rect.ymin, rect.xmax, rect.ymax);
+ EDBM_backbuf_border_mask_init(eval_ctx, vc, mcords, moves, rect.xmin, rect.ymin, rect.xmax, rect.ymax);
edbm_backbuf_check_and_select_verts_obmode(me, select);
@@ -758,7 +740,7 @@ static void do_lasso_select_paintvert(ViewContext *vc, const int mcords[][2], sh
ED_view3d_init_mats_rv3d(vc->obact, vc->rv3d);
- meshobject_foreachScreenVert(vc, do_lasso_select_meshobject__doSelectVert, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
+ meshobject_foreachScreenVert(eval_ctx, vc, do_lasso_select_meshobject__doSelectVert, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
}
@@ -767,7 +749,7 @@ static void do_lasso_select_paintvert(ViewContext *vc, const int mcords[][2], sh
}
paintvert_flush_flags(ob);
}
-static void do_lasso_select_paintface(ViewContext *vc, const int mcords[][2], short moves, bool extend, bool select)
+static void do_lasso_select_paintface(const struct EvaluationContext *eval_ctx, ViewContext *vc, const int mcords[][2], short moves, bool extend, bool select)
{
Object *ob = vc->obact;
Mesh *me = ob->data;
@@ -782,7 +764,7 @@ static void do_lasso_select_paintface(ViewContext *vc, const int mcords[][2], sh
bm_vertoffs = me->totpoly + 1; /* max index array */
BLI_lasso_boundbox(&rect, mcords, moves);
- EDBM_backbuf_border_mask_init(vc, mcords, moves, rect.xmin, rect.ymin, rect.xmax, rect.ymax);
+ EDBM_backbuf_border_mask_init(eval_ctx, vc, mcords, moves, rect.xmin, rect.ymin, rect.xmax, rect.ymax);
edbm_backbuf_check_and_select_tfaces(me, select);
@@ -828,25 +810,31 @@ static void view3d_lasso_select(bContext *C, ViewContext *vc,
{
Object *ob = CTX_data_active_object(C);
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
if (vc->obedit == NULL) { /* Object Mode */
- if (BKE_paint_select_face_test(ob))
- do_lasso_select_paintface(vc, mcords, moves, extend, select);
- else if (BKE_paint_select_vert_test(ob))
- do_lasso_select_paintvert(vc, mcords, moves, extend, select);
- else if (ob && (ob->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT))) {
+ if (BKE_paint_select_face_test(ob, eval_ctx.object_mode)) {
+ do_lasso_select_paintface(&eval_ctx, vc, mcords, moves, extend, select);
+ }
+ else if (BKE_paint_select_vert_test(ob, eval_ctx.object_mode)) {
+ do_lasso_select_paintvert(&eval_ctx, vc, mcords, moves, extend, select);
+ }
+ else if (ob && (eval_ctx.object_mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT))) {
/* pass */
}
- else if (ob && (ob->mode & OB_MODE_PARTICLE_EDIT))
+ else if (ob && (eval_ctx.object_mode & OB_MODE_PARTICLE_EDIT)) {
PE_lasso_select(C, mcords, moves, extend, select);
+ }
else {
- do_lasso_select_objects(vc, mcords, moves, extend, select);
+ do_lasso_select_objects(&eval_ctx, vc, mcords, moves, extend, select);
WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, vc->scene);
}
}
else { /* Edit Mode */
switch (vc->obedit->type) {
case OB_MESH:
- do_lasso_select_mesh(vc, mcords, moves, extend, select);
+ do_lasso_select_mesh(&eval_ctx, vc, mcords, moves, extend, select);
break;
case OB_CURVE:
case OB_SURF:
@@ -930,7 +918,7 @@ static unsigned int samplerect(unsigned int *buf, int size, unsigned int dontdo)
base = LASTBASE;
if (base == 0) return 0;
- maxob = base->selcol;
+ maxob = base->object->select_color;
len = (size - 1) / 2;
rc = 0;
@@ -1016,8 +1004,8 @@ static int object_select_menu_exec(bContext *C, wmOperator *op)
if (!toggle) {
CTX_DATA_BEGIN (C, Base *, base, selectable_bases)
{
- if (base->flag & SELECT) {
- ED_base_object_select(base, BA_DESELECT);
+ if ((base->flag & BASE_SELECTED) != 0) {
+ ED_object_base_select(base, BA_DESELECT);
changed = true;
}
}
@@ -1028,8 +1016,8 @@ static int object_select_menu_exec(bContext *C, wmOperator *op)
{
/* this is a bit dodjy, there should only be ONE object with this name, but library objects can mess this up */
if (STREQ(name, base->object->id.name + 2)) {
- ED_base_object_activate(C, base);
- ED_base_object_select(base, BA_SELECT);
+ ED_object_base_activate(C, base);
+ ED_object_base_select(base, BA_SELECT);
changed = true;
}
}
@@ -1073,14 +1061,12 @@ void VIEW3D_OT_select_menu(wmOperatorType *ot)
RNA_def_boolean(ot->srna, "toggle", 0, "Toggle", "Toggle selection instead of deselecting everything first");
}
-static void deselectall_except(Scene *scene, Base *b) /* deselect all except b */
+static void deselectall_except(ViewLayer *view_layer, Base *b) /* deselect all except b */
{
- Base *base;
-
- for (base = FIRSTBASE; base; base = base->next) {
- if (base->flag & SELECT) {
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ if (base->flag & BASE_SELECTED) {
if (b != base) {
- ED_base_object_select(base, BA_DESELECT);
+ ED_object_base_select(base, BA_DESELECT);
}
}
}
@@ -1093,7 +1079,8 @@ static Base *object_mouse_select_menu(
short baseCount = 0;
bool ok;
LinkNode *linklist = NULL;
-
+
+ /* handle base->object->select_color */
CTX_DATA_BEGIN (C, Base *, base, selectable_bases)
{
ok = false;
@@ -1102,7 +1089,7 @@ static Base *object_mouse_select_menu(
if (buffer) {
for (int a = 0; a < hits; a++) {
/* index was converted */
- if (base->selcol == (buffer[(4 * a) + 3] & ~0xFFFF0000)) {
+ if (base->object->select_color == (buffer[(4 * a) + 3] & ~0xFFFF0000)) {
ok = true;
break;
}
@@ -1201,7 +1188,7 @@ static int selectbuffer_ret_hits_5(unsigned int *buffer, const int hits15, const
/* we want a select buffer with bones, if there are... */
/* so check three selection levels and compare */
static int mixed_bones_object_selectbuffer(
- ViewContext *vc, unsigned int *buffer, const int mval[2],
+ const EvaluationContext *eval_ctx, ViewContext *vc, unsigned int *buffer, const int mval[2],
bool use_cycle, bool enumerate,
bool *r_do_nearest)
{
@@ -1241,7 +1228,7 @@ static int mixed_bones_object_selectbuffer(
view3d_opengl_select_cache_begin();
BLI_rcti_init_pt_radius(&rect, mval, 14);
- hits15 = view3d_opengl_select(vc, buffer, MAXPICKBUF, &rect, select_mode);
+ hits15 = view3d_opengl_select(eval_ctx, vc, buffer, MAXPICKBUF, &rect, select_mode);
if (hits15 == 1) {
hits = selectbuffer_ret_hits_15(buffer, hits15);
goto finally;
@@ -1252,7 +1239,7 @@ static int mixed_bones_object_selectbuffer(
offs = 4 * hits15;
BLI_rcti_init_pt_radius(&rect, mval, 9);
- hits9 = view3d_opengl_select(vc, buffer + offs, MAXPICKBUF - offs, &rect, select_mode);
+ hits9 = view3d_opengl_select(eval_ctx, vc, buffer + offs, MAXPICKBUF - offs, &rect, select_mode);
if (hits9 == 1) {
hits = selectbuffer_ret_hits_9(buffer, hits15, hits9);
goto finally;
@@ -1262,7 +1249,7 @@ static int mixed_bones_object_selectbuffer(
offs += 4 * hits9;
BLI_rcti_init_pt_radius(&rect, mval, 5);
- hits5 = view3d_opengl_select(vc, buffer + offs, MAXPICKBUF - offs, &rect, select_mode);
+ hits5 = view3d_opengl_select(eval_ctx, vc, buffer + offs, MAXPICKBUF - offs, &rect, select_mode);
if (hits5 == 1) {
hits = selectbuffer_ret_hits_5(buffer, hits15, hits9, hits5);
goto finally;
@@ -1291,8 +1278,7 @@ finally:
static Base *mouse_select_eval_buffer(ViewContext *vc, unsigned int *buffer, int hits,
Base *startbase, bool has_bones, bool do_nearest)
{
- Scene *scene = vc->scene;
- View3D *v3d = vc->v3d;
+ ViewLayer *view_layer = vc->view_layer;
Base *base, *basact = NULL;
int a;
@@ -1312,7 +1298,9 @@ static Base *mouse_select_eval_buffer(ViewContext *vc, unsigned int *buffer, int
}
else {
/* only exclude active object when it is selected... */
- if (BASACT && (BASACT->flag & SELECT) && hits > 1) notcol = BASACT->selcol;
+ if (BASACT(view_layer) && (BASACT(view_layer)->flag & BASE_SELECTED) && hits > 1) {
+ notcol = BASACT(view_layer)->object->select_color;
+ }
for (a = 0; a < hits; a++) {
if (min > buffer[4 * a + 1] && notcol != (buffer[4 * a + 3] & 0xFFFF)) {
@@ -1322,10 +1310,10 @@ static Base *mouse_select_eval_buffer(ViewContext *vc, unsigned int *buffer, int
}
}
- base = FIRSTBASE;
+ base = FIRSTBASE(view_layer);
while (base) {
- if (BASE_SELECTABLE(v3d, base)) {
- if (base->selcol == selcol) break;
+ if (BASE_SELECTABLE(base)) {
+ if (base->object->select_color == selcol) break;
}
base = base->next;
}
@@ -1337,23 +1325,23 @@ static Base *mouse_select_eval_buffer(ViewContext *vc, unsigned int *buffer, int
while (base) {
/* skip objects with select restriction, to prevent prematurely ending this loop
* with an un-selectable choice */
- if (base->object->restrictflag & OB_RESTRICT_SELECT) {
+ if ((base->flag & BASE_SELECTABLED) == 0) {
base = base->next;
- if (base == NULL) base = FIRSTBASE;
+ if (base == NULL) base = FIRSTBASE(view_layer);
if (base == startbase) break;
}
- if (BASE_SELECTABLE(v3d, base)) {
+ if (BASE_SELECTABLE(base)) {
for (a = 0; a < hits; a++) {
if (has_bones) {
/* skip non-bone objects */
if ((buffer[4 * a + 3] & 0xFFFF0000)) {
- if (base->selcol == (buffer[(4 * a) + 3] & 0xFFFF))
+ if (base->object->select_color == (buffer[(4 * a) + 3] & 0xFFFF))
basact = base;
}
}
else {
- if (base->selcol == (buffer[(4 * a) + 3] & 0xFFFF))
+ if (base->object->select_color == (buffer[(4 * a) + 3] & 0xFFFF))
basact = base;
}
}
@@ -1362,7 +1350,7 @@ static Base *mouse_select_eval_buffer(ViewContext *vc, unsigned int *buffer, int
if (basact) break;
base = base->next;
- if (base == NULL) base = FIRSTBASE;
+ if (base == NULL) base = FIRSTBASE(view_layer);
if (base == startbase) break;
}
}
@@ -1373,6 +1361,7 @@ static Base *mouse_select_eval_buffer(ViewContext *vc, unsigned int *buffer, int
/* mval comes from event->mval, only use within region handlers */
Base *ED_view3d_give_base_under_cursor(bContext *C, const int mval[2])
{
+ EvaluationContext eval_ctx;
ViewContext vc;
Base *basact = NULL;
unsigned int buffer[MAXPICKBUF];
@@ -1381,13 +1370,15 @@ Base *ED_view3d_give_base_under_cursor(bContext *C, const int mval[2])
/* setup view context for argument to callbacks */
view3d_operator_needs_opengl(C);
+
+ CTX_data_eval_ctx(C, &eval_ctx);
view3d_set_viewcontext(C, &vc);
- hits = mixed_bones_object_selectbuffer(&vc, buffer, mval, false, false, &do_nearest);
+ hits = mixed_bones_object_selectbuffer(&eval_ctx, &vc, buffer, mval, false, false, &do_nearest);
if (hits > 0) {
const bool has_bones = selectbuffer_has_bones(buffer, hits);
- basact = mouse_select_eval_buffer(&vc, buffer, hits, vc.scene->base.first, has_bones, do_nearest);
+ basact = mouse_select_eval_buffer(&vc, buffer, hits, vc.view_layer->object_bases.first, has_bones, do_nearest);
}
return basact;
@@ -1417,10 +1408,11 @@ static bool ed_object_select_pick(
bContext *C, const int mval[2],
bool extend, bool deselect, bool toggle, bool obcenter, bool enumerate, bool object)
{
+ EvaluationContext eval_ctx;
ViewContext vc;
ARegion *ar = CTX_wm_region(C);
- View3D *v3d = CTX_wm_view3d(C);
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Base *base, *startbase = NULL, *basact = NULL, *oldbasact = NULL;
bool is_obedit;
float dist = ED_view3d_select_dist_px() * 1.3333f;
@@ -1430,6 +1422,7 @@ static bool ed_object_select_pick(
/* setup view context for argument to callbacks */
+ CTX_data_eval_ctx(C, &eval_ctx);
view3d_set_viewcontext(C, &vc);
is_obedit = (vc.obedit != NULL);
@@ -1439,8 +1432,8 @@ static bool ed_object_select_pick(
}
/* always start list from basact in wire mode */
- startbase = FIRSTBASE;
- if (BASACT && BASACT->next) startbase = BASACT->next;
+ startbase = FIRSTBASE(view_layer);
+ if (BASACT(view_layer) && BASACT(view_layer)->next) startbase = BASACT(view_layer)->next;
/* This block uses the control key to make the object selected by its center point rather than its contents */
/* in editmode do not activate */
@@ -1453,13 +1446,13 @@ static bool ed_object_select_pick(
else {
base = startbase;
while (base) {
- if (BASE_SELECTABLE(v3d, base)) {
+ if (BASE_SELECTABLE(base)) {
float screen_co[2];
if (ED_view3d_project_float_global(ar, base->object->obmat[3], screen_co,
V3D_PROJ_TEST_CLIP_BB | V3D_PROJ_TEST_CLIP_WIN | V3D_PROJ_TEST_CLIP_NEAR) == V3D_PROJ_RET_OK)
{
float dist_temp = len_manhattan_v2v2(mval_fl, screen_co);
- if (base == BASACT) dist_temp += 10.0f;
+ if (base == BASACT(view_layer)) dist_temp += 10.0f;
if (dist_temp < dist) {
dist = dist_temp;
basact = base;
@@ -1468,7 +1461,7 @@ static bool ed_object_select_pick(
}
base = base->next;
- if (base == NULL) base = FIRSTBASE;
+ if (base == NULL) base = FIRSTBASE(view_layer);
if (base == startbase) break;
}
}
@@ -1480,7 +1473,7 @@ static bool ed_object_select_pick(
// TIMEIT_START(select_time);
/* if objects have posemode set, the bones are in the same selection buffer */
- hits = mixed_bones_object_selectbuffer(&vc, buffer, mval, true, enumerate, &do_nearest);
+ hits = mixed_bones_object_selectbuffer(&eval_ctx, &vc, buffer, mval, true, enumerate, &do_nearest);
// TIMEIT_END(select_time);
@@ -1498,7 +1491,7 @@ static bool ed_object_select_pick(
if (has_bones && basact) {
if (basact->object->type == OB_CAMERA) {
- if (BASACT == basact) {
+ if (BASACT(view_layer) == basact) {
int i, hitresult;
bool changed = false;
@@ -1507,7 +1500,7 @@ static bool ed_object_select_pick(
/* if there's bundles in buffer select bundles first,
* so non-camera elements should be ignored in buffer */
- if (basact->selcol != (hitresult & 0xFFFF)) {
+ if (basact->object->select_color != (hitresult & 0xFFFF)) {
continue;
}
@@ -1536,8 +1529,8 @@ static bool ed_object_select_pick(
changed = true;
}
- basact->flag |= SELECT;
- basact->object->flag = basact->flag;
+ basact->flag |= BASE_SELECTED;
+ BKE_scene_object_base_flag_sync_from_base(basact);
retval = true;
@@ -1555,27 +1548,30 @@ static bool ed_object_select_pick(
}
}
}
- else if (ED_do_pose_selectbuffer(scene, basact, buffer, hits, extend, deselect, toggle, do_nearest)) {
+ else if (ED_do_pose_selectbuffer(
+ &eval_ctx, scene, view_layer,
+ basact, buffer, hits, extend, deselect, toggle, do_nearest))
+ {
/* then bone is found */
/* we make the armature selected:
* not-selected active object in posemode won't work well for tools */
- basact->flag |= SELECT;
- basact->object->flag = basact->flag;
+ basact->flag |= BASE_SELECTED;
+ BKE_scene_object_base_flag_sync_from_base(basact);
retval = true;
WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, basact->object);
WM_event_add_notifier(C, NC_OBJECT | ND_BONE_ACTIVE, basact->object);
/* in weightpaint, we use selected bone to select vertexgroup, so no switch to new active object */
- if (BASACT && (BASACT->object->mode & OB_MODE_WEIGHT_PAINT)) {
+ if (BASACT(view_layer) && (eval_ctx.object_mode & OB_MODE_WEIGHT_PAINT)) {
/* prevent activating */
basact = NULL;
}
}
/* prevent bone selecting to pass on to object selecting */
- if (basact == BASACT)
+ if (basact == BASACT(view_layer))
basact = NULL;
}
}
@@ -1587,37 +1583,37 @@ static bool ed_object_select_pick(
if (vc.obedit) {
/* only do select */
- deselectall_except(scene, basact);
- ED_base_object_select(basact, BA_SELECT);
+ deselectall_except(view_layer, basact);
+ ED_object_base_select(basact, BA_SELECT);
}
/* also prevent making it active on mouse selection */
- else if (BASE_SELECTABLE(v3d, basact)) {
+ else if (BASE_SELECTABLE(basact)) {
- oldbasact = BASACT;
+ oldbasact = BASACT(view_layer);
if (extend) {
- ED_base_object_select(basact, BA_SELECT);
+ ED_object_base_select(basact, BA_SELECT);
}
else if (deselect) {
- ED_base_object_select(basact, BA_DESELECT);
+ ED_object_base_select(basact, BA_DESELECT);
}
else if (toggle) {
- if (basact->flag & SELECT) {
+ if (basact->flag & BASE_SELECTED) {
if (basact == oldbasact) {
- ED_base_object_select(basact, BA_DESELECT);
+ ED_object_base_select(basact, BA_DESELECT);
}
}
else {
- ED_base_object_select(basact, BA_SELECT);
+ ED_object_base_select(basact, BA_SELECT);
}
}
else {
- deselectall_except(scene, basact);
- ED_base_object_select(basact, BA_SELECT);
+ deselectall_except(view_layer, basact);
+ ED_object_base_select(basact, BA_SELECT);
}
if ((oldbasact != basact) && (is_obedit == false)) {
- ED_base_object_activate(C, basact); /* adds notifier */
+ ED_object_base_activate(C, basact); /* adds notifier */
}
}
@@ -1673,7 +1669,8 @@ static void do_paintvert_box_select__doSelectVert(void *userData, MVert *mv, con
SET_FLAG_FROM_TEST(mv->flag, data->select, SELECT);
}
}
-static int do_paintvert_box_select(ViewContext *vc, rcti *rect, bool select, bool extend)
+static int do_paintvert_box_select(
+ const EvaluationContext *eval_ctx, ViewContext *vc, rcti *rect, bool select, bool extend)
{
const bool use_zbuf = (vc->v3d->flag & V3D_ZBUF_SELECT) != 0;
Mesh *me;
@@ -1697,7 +1694,7 @@ static int do_paintvert_box_select(ViewContext *vc, rcti *rect, bool select, boo
if (use_zbuf) {
selar = MEM_callocN(me->totvert + 1, "selar");
- ED_view3d_backbuf_validate(vc);
+ ED_view3d_backbuf_validate(eval_ctx, vc);
ibuf = IMB_allocImBuf(size[0], size[1], 32, IB_rect);
rt = ibuf->rect;
@@ -1745,7 +1742,7 @@ static int do_paintvert_box_select(ViewContext *vc, rcti *rect, bool select, boo
ED_view3d_init_mats_rv3d(vc->obact, vc->rv3d);
- meshobject_foreachScreenVert(vc, do_paintvert_box_select__doSelectVert, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
+ meshobject_foreachScreenVert(eval_ctx, vc, do_paintvert_box_select__doSelectVert, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
}
if (select == false) {
@@ -1860,7 +1857,8 @@ static void do_mesh_box_select__doSelectFace(void *userData, BMFace *efa, const
BM_face_select_set(data->vc->em->bm, efa, data->select);
}
}
-static int do_mesh_box_select(ViewContext *vc, rcti *rect, bool select, bool extend)
+static int do_mesh_box_select(
+ const struct EvaluationContext *eval_ctx, ViewContext *vc, rcti *rect, bool select, bool extend)
{
BoxSelectUserData data;
ToolSettings *ts = vc->scene->toolsettings;
@@ -1874,26 +1872,26 @@ static int do_mesh_box_select(ViewContext *vc, rcti *rect, bool select, bool ext
/* for non zbuf projections, don't change the GL state */
ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
- glLoadMatrixf(vc->rv3d->viewmat);
- bbsel = EDBM_backbuf_border_init(vc, rect->xmin, rect->ymin, rect->xmax, rect->ymax);
+ gpuLoadMatrix(vc->rv3d->viewmat);
+ bbsel = EDBM_backbuf_border_init(eval_ctx, vc, rect->xmin, rect->ymin, rect->xmax, rect->ymax);
if (ts->selectmode & SCE_SELECT_VERTEX) {
if (bbsel) {
edbm_backbuf_check_and_select_verts(vc->em, select);
}
else {
- mesh_foreachScreenVert(vc, do_mesh_box_select__doSelectVert, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
+ mesh_foreachScreenVert(eval_ctx, vc, do_mesh_box_select__doSelectVert, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
}
}
if (ts->selectmode & SCE_SELECT_EDGE) {
/* Does both bbsel and non-bbsel versions (need screen cos for both) */
data.pass = 0;
- mesh_foreachScreenEdge(vc, do_mesh_box_select__doSelectEdge, &data, V3D_PROJ_TEST_CLIP_NEAR);
+ mesh_foreachScreenEdge(eval_ctx, vc, do_mesh_box_select__doSelectEdge, &data, V3D_PROJ_TEST_CLIP_NEAR);
if (data.is_done == 0) {
data.pass = 1;
- mesh_foreachScreenEdge(vc, do_mesh_box_select__doSelectEdge, &data, V3D_PROJ_TEST_CLIP_NEAR);
+ mesh_foreachScreenEdge(eval_ctx, vc, do_mesh_box_select__doSelectEdge, &data, V3D_PROJ_TEST_CLIP_NEAR);
}
}
@@ -1902,7 +1900,7 @@ static int do_mesh_box_select(ViewContext *vc, rcti *rect, bool select, bool ext
edbm_backbuf_check_and_select_faces(vc->em, select);
}
else {
- mesh_foreachScreenFace(vc, do_mesh_box_select__doSelectFace, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
+ mesh_foreachScreenFace(eval_ctx, vc, do_mesh_box_select__doSelectFace, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
}
}
@@ -1913,7 +1911,9 @@ static int do_mesh_box_select(ViewContext *vc, rcti *rect, bool select, bool ext
return OPERATOR_FINISHED;
}
-static int do_meta_box_select(ViewContext *vc, rcti *rect, bool select, bool extend)
+static int do_meta_box_select(
+ const struct EvaluationContext *eval_ctx, ViewContext *vc,
+ const rcti *rect, bool select, bool extend)
{
MetaBall *mb = (MetaBall *)vc->obedit->data;
MetaElem *ml;
@@ -1922,7 +1922,7 @@ static int do_meta_box_select(ViewContext *vc, rcti *rect, bool select, bool ext
unsigned int buffer[MAXPICKBUF];
int hits;
- hits = view3d_opengl_select(vc, buffer, MAXPICKBUF, rect, VIEW3D_SELECT_ALL);
+ hits = view3d_opengl_select(eval_ctx, vc, buffer, MAXPICKBUF, rect, VIEW3D_SELECT_ALL);
if (extend == false && select)
BKE_mball_deselect_all(mb);
@@ -1947,7 +1947,9 @@ static int do_meta_box_select(ViewContext *vc, rcti *rect, bool select, bool ext
return OPERATOR_FINISHED;
}
-static int do_armature_box_select(ViewContext *vc, rcti *rect, bool select, bool extend)
+static int do_armature_box_select(
+ const struct EvaluationContext *eval_ctx, ViewContext *vc,
+ const rcti *rect, bool select, bool extend)
{
bArmature *arm = vc->obedit->data;
EditBone *ebone;
@@ -1956,7 +1958,7 @@ static int do_armature_box_select(ViewContext *vc, rcti *rect, bool select, bool
unsigned int buffer[MAXPICKBUF];
int hits;
- hits = view3d_opengl_select(vc, buffer, MAXPICKBUF, rect, VIEW3D_SELECT_ALL);
+ hits = view3d_opengl_select(eval_ctx, vc, buffer, MAXPICKBUF, rect, VIEW3D_SELECT_ALL);
/* clear flag we use to detect point was affected */
for (ebone = arm->edbo->first; ebone; ebone = ebone->next)
@@ -2020,8 +2022,30 @@ static int do_armature_box_select(ViewContext *vc, rcti *rect, bool select, bool
return hits > 0 ? OPERATOR_FINISHED : OPERATOR_CANCELLED;
}
+/**
+ * Compare result of 'GPU_select': 'uint[4]',
+ * needed for when we need to align with object draw-order.
+ */
+static int opengl_select_buffer_cmp(const void *sel_a_p, const void *sel_b_p)
+{
+ /* 4th element is select id */
+ const uint sel_a = ((uint *)sel_a_p)[3];
+ const uint sel_b = ((uint *)sel_b_p)[3];
+
+ if (sel_a < sel_b) {
+ return -1;
+ }
+ else if (sel_a > sel_b) {
+ return 1;
+ }
+ else {
+ return 0;
+ }
+}
+
static int do_object_pose_box_select(bContext *C, ViewContext *vc, rcti *rect, bool select, bool extend)
{
+ EvaluationContext eval_ctx;
Bone *bone;
Object *ob = vc->obact;
unsigned int *vbuffer = NULL; /* selection buffer */
@@ -2031,7 +2055,9 @@ static int do_object_pose_box_select(bContext *C, ViewContext *vc, rcti *rect, b
int totobj = MAXPICKBUF; /* XXX solve later */
int hits;
- if ((ob) && (ob->mode & OB_MODE_POSE))
+ CTX_data_eval_ctx(C, &eval_ctx);
+
+ if ((ob) && (eval_ctx.object_mode & OB_MODE_POSE))
bone_only = 1;
else
bone_only = 0;
@@ -2047,13 +2073,13 @@ static int do_object_pose_box_select(bContext *C, ViewContext *vc, rcti *rect, b
CTX_DATA_END;
}
else {
- object_deselect_all_visible(vc->scene, vc->v3d);
+ object_deselect_all_visible(vc->view_layer);
}
}
/* selection buffer now has bones potentially too, so we add MAXPICKBUF */
vbuffer = MEM_mallocN(4 * (totobj + MAXPICKELEMS) * sizeof(unsigned int), "selection buffer");
- hits = view3d_opengl_select(vc, vbuffer, 4 * (totobj + MAXPICKELEMS), rect, VIEW3D_SELECT_ALL);
+ hits = view3d_opengl_select(&eval_ctx, vc, vbuffer, 4 * (totobj + MAXPICKELEMS), rect, VIEW3D_SELECT_ALL);
/*
* LOGIC NOTES (theeth):
* The buffer and ListBase have the same relative order, which makes the selection
@@ -2061,18 +2087,22 @@ static int do_object_pose_box_select(bContext *C, ViewContext *vc, rcti *rect, b
* is the same as the object, we have a hit and can move to the next color
* and object pair, if not, just move to the next object,
* keeping the same color until we have a hit.
- *
- * The buffer order is defined by OGL standard, hopefully no stupid GFX card
- * does it incorrectly.
*/
if (hits > 0) { /* no need to loop if there's no hit */
Base *base;
col = vbuffer + 3;
-
- for (base = vc->scene->base.first; base && hits; base = base->next) {
- if (BASE_SELECTABLE(vc->v3d, base)) {
- while (base->selcol == (*col & 0xFFFF)) { /* we got an object */
+
+ /* The draw order doesn't always match the order we populate the engine, see: T51695. */
+ qsort(vbuffer, hits, sizeof(uint[4]), opengl_select_buffer_cmp);
+
+ /*
+ * Even though 'DRW_draw_select_loop' uses 'DEG_OBJECT_ITER',
+ * we can be sure the order remains the same between both.
+ */
+ for (base = vc->view_layer->object_bases.first; base && hits; base = base->next) {
+ if (BASE_SELECTABLE(base)) {
+ while (base->object->select_color == (*col & 0xFFFF)) { /* we got an object */
if (*col & 0xFFFF0000) { /* we got a bone */
bone = get_indexed_bone(base->object, *col & ~(BONESEL_ANY));
if (bone) {
@@ -2091,7 +2121,7 @@ static int do_object_pose_box_select(bContext *C, ViewContext *vc, rcti *rect, b
}
}
else if (!bone_only) {
- ED_base_object_select(base, select ? BA_SELECT : BA_DESELECT);
+ ED_object_base_select(base, select ? BA_SELECT : BA_DESELECT);
}
col += 4; /* next color */
@@ -2108,7 +2138,7 @@ static int do_object_pose_box_select(bContext *C, ViewContext *vc, rcti *rect, b
if (arm && (arm->flag & ARM_HAS_VIZ_DEPS)) {
/* mask modifier ('armature' mode), etc. */
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
}
}
}
@@ -2123,6 +2153,7 @@ static int do_object_pose_box_select(bContext *C, ViewContext *vc, rcti *rect, b
static int view3d_borderselect_exec(bContext *C, wmOperator *op)
{
+ EvaluationContext eval_ctx;
ViewContext vc;
rcti rect;
bool extend;
@@ -2133,6 +2164,7 @@ static int view3d_borderselect_exec(bContext *C, wmOperator *op)
view3d_operator_needs_opengl(C);
/* setup view context for argument to callbacks */
+ CTX_data_eval_ctx(C, &eval_ctx);
view3d_set_viewcontext(C, &vc);
select = !RNA_boolean_get(op->ptr, "deselect");
@@ -2143,7 +2175,7 @@ static int view3d_borderselect_exec(bContext *C, wmOperator *op)
switch (vc.obedit->type) {
case OB_MESH:
vc.em = BKE_editmesh_from_object(vc.obedit);
- ret = do_mesh_box_select(&vc, &rect, select, extend);
+ ret = do_mesh_box_select(&eval_ctx, &vc, &rect, select, extend);
// if (EM_texFaceCheck())
if (ret & OPERATOR_FINISHED) {
WM_event_add_notifier(C, NC_GEOM | ND_SELECT, vc.obedit->data);
@@ -2157,13 +2189,13 @@ static int view3d_borderselect_exec(bContext *C, wmOperator *op)
}
break;
case OB_MBALL:
- ret = do_meta_box_select(&vc, &rect, select, extend);
+ ret = do_meta_box_select(&eval_ctx, &vc, &rect, select, extend);
if (ret & OPERATOR_FINISHED) {
WM_event_add_notifier(C, NC_GEOM | ND_SELECT, vc.obedit->data);
}
break;
case OB_ARMATURE:
- ret = do_armature_box_select(&vc, &rect, select, extend);
+ ret = do_armature_box_select(&eval_ctx, &vc, &rect, select, extend);
if (ret & OPERATOR_FINISHED) {
WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, vc.obedit);
}
@@ -2180,16 +2212,16 @@ static int view3d_borderselect_exec(bContext *C, wmOperator *op)
}
}
else { /* no editmode, unified for bones and objects */
- if (vc.obact && vc.obact->mode & OB_MODE_SCULPT) {
+ if (vc.obact && eval_ctx.object_mode & OB_MODE_SCULPT) {
ret = ED_sculpt_mask_box_select(C, &vc, &rect, select, extend);
}
- else if (vc.obact && BKE_paint_select_face_test(vc.obact)) {
- ret = do_paintface_box_select(&vc, &rect, select, extend);
+ else if (vc.obact && BKE_paint_select_face_test(vc.obact, eval_ctx.object_mode)) {
+ ret = do_paintface_box_select(&eval_ctx, &vc, &rect, select, extend);
}
- else if (vc.obact && BKE_paint_select_vert_test(vc.obact)) {
- ret = do_paintvert_box_select(&vc, &rect, select, extend);
+ else if (vc.obact && BKE_paint_select_vert_test(vc.obact, eval_ctx.object_mode)) {
+ ret = do_paintvert_box_select(&eval_ctx, &vc, &rect, select, extend);
}
- else if (vc.obact && vc.obact->mode & OB_MODE_PARTICLE_EDIT) {
+ else if (vc.obact && eval_ctx.object_mode & OB_MODE_PARTICLE_EDIT) {
ret = PE_border_select(C, &rect, select, extend);
}
else { /* object mode with none active */
@@ -2275,6 +2307,7 @@ static bool ed_wpaint_vertex_select_pick(
static int view3d_select_exec(bContext *C, wmOperator *op)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Object *obedit = CTX_data_edit_object(C);
Object *obact = CTX_data_active_object(C);
bool extend = RNA_boolean_get(op->ptr, "extend");
@@ -2286,9 +2319,9 @@ static int view3d_select_exec(bContext *C, wmOperator *op)
* or paint-select to allow pose bone select with vert/face select */
bool object = (RNA_boolean_get(op->ptr, "object") &&
(obedit ||
- BKE_paint_select_elem_test(obact) ||
+ BKE_paint_select_elem_test(obact, workspace->object_mode) ||
/* so its possible to select bones in weightpaint mode (LMB select) */
- (obact && (obact->mode & OB_MODE_WEIGHT_PAINT) && BKE_object_pose_armature_get(obact))));
+ (obact && (workspace->object_mode & OB_MODE_WEIGHT_PAINT) && BKE_object_pose_armature_get(obact))));
bool retval = false;
int location[2];
@@ -2322,11 +2355,11 @@ static int view3d_select_exec(bContext *C, wmOperator *op)
retval = ED_curve_editfont_select_pick(C, location, extend, deselect, toggle);
}
- else if (obact && obact->mode & OB_MODE_PARTICLE_EDIT)
+ else if (obact && workspace->object_mode & OB_MODE_PARTICLE_EDIT)
return PE_mouse_particles(C, location, extend, deselect, toggle);
- else if (obact && BKE_paint_select_face_test(obact))
+ else if (obact && BKE_paint_select_face_test(obact, workspace->object_mode))
retval = paintface_mouse_select(C, obact, location, extend, deselect, toggle);
- else if (BKE_paint_select_vert_test(obact))
+ else if (BKE_paint_select_vert_test(obact, workspace->object_mode))
retval = ed_wpaint_vertex_select_pick(C, location, extend, deselect, toggle, obact);
else
retval = ed_object_select_pick(C, location, extend, deselect, toggle, center, enumerate, object);
@@ -2431,13 +2464,13 @@ static void mesh_circle_doSelectFace(void *userData, BMFace *efa, const float sc
}
}
-static void mesh_circle_select(ViewContext *vc, const bool select, const int mval[2], float rad)
+static void mesh_circle_select(const struct EvaluationContext *eval_ctx, ViewContext *vc, const bool select, const int mval[2], float rad)
{
ToolSettings *ts = vc->scene->toolsettings;
int bbsel;
CircleSelectUserData data;
- bbsel = EDBM_backbuf_circle_init(vc, mval[0], mval[1], (short)(rad + 1.0f));
+ bbsel = EDBM_backbuf_circle_init(eval_ctx, vc, mval[0], mval[1], (short)(rad + 1.0f));
ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */
vc->em = BKE_editmesh_from_object(vc->obedit);
@@ -2449,7 +2482,7 @@ static void mesh_circle_select(ViewContext *vc, const bool select, const int mva
edbm_backbuf_check_and_select_verts(vc->em, select);
}
else {
- mesh_foreachScreenVert(vc, mesh_circle_doSelectVert, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
+ mesh_foreachScreenVert(eval_ctx, vc, mesh_circle_doSelectVert, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
}
}
@@ -2458,7 +2491,7 @@ static void mesh_circle_select(ViewContext *vc, const bool select, const int mva
edbm_backbuf_check_and_select_edges(vc->em, select);
}
else {
- mesh_foreachScreenEdge(vc, mesh_circle_doSelectEdge, &data, V3D_PROJ_TEST_CLIP_NEAR);
+ mesh_foreachScreenEdge(eval_ctx, vc, mesh_circle_doSelectEdge, &data, V3D_PROJ_TEST_CLIP_NEAR);
}
}
@@ -2467,7 +2500,7 @@ static void mesh_circle_select(ViewContext *vc, const bool select, const int mva
edbm_backbuf_check_and_select_faces(vc->em, select);
}
else {
- mesh_foreachScreenFace(vc, mesh_circle_doSelectFace, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
+ mesh_foreachScreenFace(eval_ctx, vc, mesh_circle_doSelectFace, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
}
}
@@ -2475,7 +2508,7 @@ static void mesh_circle_select(ViewContext *vc, const bool select, const int mva
EDBM_selectmode_flush(vc->em);
}
-static void paint_facesel_circle_select(ViewContext *vc, const bool select, const int mval[2], float rad)
+static void paint_facesel_circle_select(const struct EvaluationContext *eval_ctx, ViewContext *vc, const bool select, const int mval[2], float rad)
{
Object *ob = vc->obact;
Mesh *me = ob->data;
@@ -2483,7 +2516,7 @@ static void paint_facesel_circle_select(ViewContext *vc, const bool select, cons
bm_vertoffs = me->totpoly + 1; /* max index array */
- bbsel = EDBM_backbuf_circle_init(vc, mval[0], mval[1], (short)(rad + 1.0f));
+ bbsel = EDBM_backbuf_circle_init(eval_ctx, vc, mval[0], mval[1], (short)(rad + 1.0f));
if (bbsel) {
edbm_backbuf_check_and_select_tfaces(me, select);
EDBM_backbuf_free();
@@ -2499,7 +2532,7 @@ static void paint_vertsel_circle_select_doSelectVert(void *userData, MVert *mv,
SET_FLAG_FROM_TEST(mv->flag, data->select, SELECT);
}
}
-static void paint_vertsel_circle_select(ViewContext *vc, const bool select, const int mval[2], float rad)
+static void paint_vertsel_circle_select(const struct EvaluationContext *eval_ctx, ViewContext *vc, const bool select, const int mval[2], float rad)
{
const bool use_zbuf = (vc->v3d->flag & V3D_ZBUF_SELECT) != 0;
Object *ob = vc->obact;
@@ -2510,7 +2543,7 @@ static void paint_vertsel_circle_select(ViewContext *vc, const bool select, cons
if (use_zbuf) {
bm_vertoffs = me->totvert + 1; /* max index array */
- bbsel = EDBM_backbuf_circle_init(vc, mval[0], mval[1], (short)(rad + 1.0f));
+ bbsel = EDBM_backbuf_circle_init(eval_ctx, vc, mval[0], mval[1], (short)(rad + 1.0f));
if (bbsel) {
edbm_backbuf_check_and_select_verts_obmode(me, select);
EDBM_backbuf_free();
@@ -2522,7 +2555,7 @@ static void paint_vertsel_circle_select(ViewContext *vc, const bool select, cons
ED_view3d_init_mats_rv3d(vc->obact, vc->rv3d); /* for foreach's screen/vert projection */
view3d_userdata_circleselect_init(&data, vc, select, mval, rad);
- meshobject_foreachScreenVert(vc, paint_vertsel_circle_select_doSelectVert, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
+ meshobject_foreachScreenVert(eval_ctx, vc, paint_vertsel_circle_select_doSelectVert, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
}
if (select != LEFTMOUSE) {
@@ -2666,7 +2699,7 @@ static void pose_circle_select(ViewContext *vc, const bool select, const int mva
if (arm->flag & ARM_HAS_VIZ_DEPS) {
/* mask modifier ('armature' mode), etc. */
- DAG_id_tag_update(&vc->obact->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&vc->obact->id, OB_RECALC_DATA);
}
}
}
@@ -2776,11 +2809,12 @@ static void mball_circle_select(ViewContext *vc, const bool select, const int mv
/** Callbacks for circle selection in Editmode */
-static void obedit_circle_select(ViewContext *vc, const bool select, const int mval[2], float rad)
+static void obedit_circle_select(
+ const struct EvaluationContext *eval_ctx, ViewContext *vc, const bool select, const int mval[2], float rad)
{
switch (vc->obedit->type) {
case OB_MESH:
- mesh_circle_select(vc, select, mval, rad);
+ mesh_circle_select(eval_ctx, vc, select, mval, rad);
break;
case OB_CURVE:
case OB_SURF:
@@ -2802,22 +2836,22 @@ static void obedit_circle_select(ViewContext *vc, const bool select, const int m
static bool object_circle_select(ViewContext *vc, const bool select, const int mval[2], float rad)
{
- Scene *scene = vc->scene;
+ ViewLayer *view_layer = vc->view_layer;
const float radius_squared = rad * rad;
const float mval_fl[2] = {mval[0], mval[1]};
bool changed = false;
- const int select_flag = select ? SELECT : 0;
+ const int select_flag = select ? BASE_SELECTED : 0;
Base *base;
- for (base = FIRSTBASE; base; base = base->next) {
- if (BASE_SELECTABLE(vc->v3d, base) && ((base->flag & SELECT) != select_flag)) {
+ for (base = FIRSTBASE(view_layer); base; base = base->next) {
+ if (BASE_SELECTABLE(base) && ((base->flag & BASE_SELECTED) != select_flag)) {
float screen_co[2];
if (ED_view3d_project_float_global(vc->ar, base->object->obmat[3], screen_co,
V3D_PROJ_TEST_CLIP_BB | V3D_PROJ_TEST_CLIP_WIN | V3D_PROJ_TEST_CLIP_NEAR) == V3D_PROJ_RET_OK)
{
if (len_squared_v2v2(mval_fl, screen_co) <= radius_squared) {
- ED_base_object_select(base, select ? BA_SELECT : BA_DESELECT);
+ ED_object_base_select(base, select ? BA_SELECT : BA_DESELECT);
changed = true;
}
}
@@ -2830,6 +2864,8 @@ static bool object_circle_select(ViewContext *vc, const bool select, const int m
/* not a real operator, only for circle test */
static int view3d_circle_select_exec(bContext *C, wmOperator *op)
{
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
Scene *scene = CTX_data_scene(C);
Object *obact = CTX_data_active_object(C);
const int radius = RNA_int_get(op->ptr, "radius");
@@ -2837,33 +2873,33 @@ static int view3d_circle_select_exec(bContext *C, wmOperator *op)
const int mval[2] = {RNA_int_get(op->ptr, "x"),
RNA_int_get(op->ptr, "y")};
- if (CTX_data_edit_object(C) || BKE_paint_select_elem_test(obact) ||
- (obact && (obact->mode & (OB_MODE_PARTICLE_EDIT | OB_MODE_POSE))) )
+ if (CTX_data_edit_object(C) || BKE_paint_select_elem_test(obact, eval_ctx.object_mode) ||
+ (obact && (eval_ctx.object_mode & (OB_MODE_PARTICLE_EDIT | OB_MODE_POSE))) )
{
ViewContext vc;
-
+
view3d_operator_needs_opengl(C);
-
+
view3d_set_viewcontext(C, &vc);
if (CTX_data_edit_object(C)) {
- obedit_circle_select(&vc, select, mval, (float)radius);
+ obedit_circle_select(&eval_ctx, &vc, select, mval, (float)radius);
WM_event_add_notifier(C, NC_GEOM | ND_SELECT, obact->data);
}
- else if (BKE_paint_select_face_test(obact)) {
- paint_facesel_circle_select(&vc, select, mval, (float)radius);
+ else if (BKE_paint_select_face_test(obact, eval_ctx.object_mode)) {
+ paint_facesel_circle_select(&eval_ctx, &vc, select, mval, (float)radius);
WM_event_add_notifier(C, NC_GEOM | ND_SELECT, obact->data);
}
- else if (BKE_paint_select_vert_test(obact)) {
- paint_vertsel_circle_select(&vc, select, mval, (float)radius);
+ else if (BKE_paint_select_vert_test(obact, eval_ctx.object_mode)) {
+ paint_vertsel_circle_select(&eval_ctx, &vc, select, mval, (float)radius);
WM_event_add_notifier(C, NC_GEOM | ND_SELECT, obact->data);
}
- else if (obact->mode & OB_MODE_POSE)
+ else if (eval_ctx.object_mode & OB_MODE_POSE)
pose_circle_select(&vc, select, mval, (float)radius);
else
return PE_circle_select(C, select, mval, (float)radius);
}
- else if (obact && obact->mode & OB_MODE_SCULPT) {
+ else if (obact && eval_ctx.object_mode & OB_MODE_SCULPT) {
return OPERATOR_CANCELLED;
}
else {
diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c
index 5dd69cc66eb..40dd2f0f428 100644
--- a/source/blender/editors/space_view3d/view3d_snap.c
+++ b/source/blender/editors/space_view3d/view3d_snap.c
@@ -40,13 +40,14 @@
#include "BKE_action.h"
#include "BKE_armature.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_main.h"
#include "BKE_mball.h"
#include "BKE_object.h"
#include "BKE_report.h"
#include "BKE_tracking.h"
+#include "DEG_depsgraph.h"
+
#include "WM_api.h"
#include "WM_types.h"
@@ -73,9 +74,12 @@ static int snap_sel_to_grid_exec(bContext *C, wmOperator *UNUSED(op))
RegionView3D *rv3d = CTX_wm_region_data(C);
TransVertStore tvs = {NULL};
TransVert *tv;
+ EvaluationContext eval_ctx;
float gridf, imat[3][3], bmat[3][3], vec[3];
int a;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
gridf = rv3d->gridview;
if (obedit) {
@@ -109,7 +113,7 @@ static int snap_sel_to_grid_exec(bContext *C, wmOperator *UNUSED(op))
CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects)
{
- if (ob->mode & OB_MODE_POSE) {
+ if (eval_ctx.object_mode & OB_MODE_POSE) {
bPoseChannel *pchan;
bArmature *arm = ob->data;
@@ -153,7 +157,7 @@ static int snap_sel_to_grid_exec(bContext *C, wmOperator *UNUSED(op))
}
ob->pose->flag |= (POSE_LOCKED | POSE_DO_UNLOCK);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
}
else {
vec[0] = -ob->obmat[3][0] + gridf * floorf(0.5f + ob->obmat[3][0] / gridf);
@@ -162,7 +166,7 @@ static int snap_sel_to_grid_exec(bContext *C, wmOperator *UNUSED(op))
if (ob->parent) {
float originmat[3][3];
- BKE_object_where_is_calc_ex(scene, NULL, ob, originmat);
+ BKE_object_where_is_calc_ex(&eval_ctx, scene, NULL, ob, originmat);
invert_m3_m3(imat, originmat);
mul_m3_v3(imat, vec);
@@ -177,7 +181,7 @@ static int snap_sel_to_grid_exec(bContext *C, wmOperator *UNUSED(op))
/* auto-keyframing */
ED_autokeyframe_object(C, scene, ob, ks);
- DAG_id_tag_update(&ob->id, OB_RECALC_OB);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB);
}
}
CTX_DATA_END;
@@ -213,11 +217,14 @@ static int snap_selected_to_location(bContext *C, const float snap_target_global
View3D *v3d = CTX_wm_view3d(C);
TransVertStore tvs = {NULL};
TransVert *tv;
+ EvaluationContext eval_ctx;
float imat[3][3], bmat[3][3];
float center_global[3];
float offset_global[3];
int a;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
if (use_offset) {
if ((v3d && v3d->around == V3D_AROUND_ACTIVE) &&
snap_calc_active_center(C, true, center_global))
@@ -265,7 +272,7 @@ static int snap_selected_to_location(bContext *C, const float snap_target_global
ED_transverts_update_obedit(&tvs, obedit);
ED_transverts_free(&tvs);
}
- else if (obact && (obact->mode & OB_MODE_POSE)) {
+ else if (obact && (eval_ctx.object_mode & OB_MODE_POSE)) {
struct KeyingSet *ks = ANIM_get_keyingset_for_autokeying(scene, ANIM_KS_LOCATION_ID);
bPoseChannel *pchan;
@@ -329,7 +336,7 @@ static int snap_selected_to_location(bContext *C, const float snap_target_global
obact->pose->flag |= (POSE_LOCKED | POSE_DO_UNLOCK);
- DAG_id_tag_update(&obact->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&obact->id, OB_RECALC_DATA);
}
else {
struct KeyingSet *ks = ANIM_get_keyingset_for_autokeying(scene, ANIM_KS_LOCATION_ID);
@@ -370,7 +377,7 @@ static int snap_selected_to_location(bContext *C, const float snap_target_global
if (ob->parent) {
float originmat[3][3];
- BKE_object_where_is_calc_ex(scene, NULL, ob, originmat);
+ BKE_object_where_is_calc_ex(&eval_ctx, scene, NULL, ob, originmat);
invert_m3_m3(imat, originmat);
mul_m3_v3(imat, cursor_parent);
@@ -385,7 +392,7 @@ static int snap_selected_to_location(bContext *C, const float snap_target_global
/* auto-keyframing */
ED_autokeyframe_object(C, scene, ob, ks);
- DAG_id_tag_update(&ob->id, OB_RECALC_OB);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB);
}
}
@@ -547,6 +554,8 @@ static void bundle_midpoint(Scene *scene, Object *ob, float vec[3])
static bool snap_curs_to_sel_ex(bContext *C, float cursor[3])
{
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
Object *obedit = CTX_data_edit_object(C);
Scene *scene = CTX_data_scene(C);
View3D *v3d = CTX_wm_view3d(C);
@@ -592,7 +601,7 @@ static bool snap_curs_to_sel_ex(bContext *C, float cursor[3])
else {
Object *obact = CTX_data_active_object(C);
- if (obact && (obact->mode & OB_MODE_POSE)) {
+ if (obact && (eval_ctx.object_mode & OB_MODE_POSE)) {
bArmature *arm = obact->data;
bPoseChannel *pchan;
for (pchan = obact->pose->chanbase.first; pchan; pchan = pchan->next) {
@@ -694,7 +703,8 @@ static bool snap_calc_active_center(bContext *C, const bool select_only, float r
Object *ob = CTX_data_active_object(C);
if (ob) {
- if (ob->mode & OB_MODE_POSE) {
+ const WorkSpace *workspace = CTX_wm_workspace(C);
+ if (workspace->object_mode & OB_MODE_POSE) {
bPoseChannel *pchan = BKE_pose_channel_active(ob);
if (pchan) {
if (!select_only || (pchan->bone->flag & BONE_SELECTED)) {
diff --git a/source/blender/editors/space_view3d/view3d_utils.c b/source/blender/editors/space_view3d/view3d_utils.c
index e06ae89fa89..7bb3f443ac6 100644
--- a/source/blender/editors/space_view3d/view3d_utils.c
+++ b/source/blender/editors/space_view3d/view3d_utils.c
@@ -48,11 +48,15 @@
#include "BKE_context.h"
#include "BKE_object.h"
#include "BKE_screen.h"
-#include "BKE_depsgraph.h" /* for ED_view3d_camera_lock_sync */
+
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_query.h"
#include "BIF_gl.h"
#include "BIF_glutil.h"
+#include "GPU_matrix.h"
+
#include "WM_api.h"
#include "WM_types.h"
@@ -96,6 +100,7 @@ void ED_view3d_dist_range_get(
* \note copies logic of #ED_view3d_viewplane_get(), keep in sync.
*/
bool ED_view3d_clip_range_get(
+ const Depsgraph *depsgraph,
const View3D *v3d, const RegionView3D *rv3d,
float *r_clipsta, float *r_clipend,
const bool use_ortho_factor)
@@ -103,7 +108,7 @@ bool ED_view3d_clip_range_get(
CameraParams params;
BKE_camera_params_init(&params);
- BKE_camera_params_from_view3d(&params, v3d, rv3d);
+ BKE_camera_params_from_view3d(&params, depsgraph, v3d, rv3d);
if (use_ortho_factor && params.is_ortho) {
const float fac = 2.0f / (params.clipend - params.clipsta);
@@ -118,13 +123,14 @@ bool ED_view3d_clip_range_get(
}
bool ED_view3d_viewplane_get(
+ const Depsgraph *depsgraph,
const View3D *v3d, const RegionView3D *rv3d, int winx, int winy,
rctf *r_viewplane, float *r_clipsta, float *r_clipend, float *r_pixsize)
{
CameraParams params;
BKE_camera_params_init(&params);
- BKE_camera_params_from_view3d(&params, v3d, rv3d);
+ BKE_camera_params_from_view3d(&params, depsgraph, v3d, rv3d);
BKE_camera_params_compute_viewplane(&params, winx, winy, 1.0f, 1.0f);
if (r_viewplane) *r_viewplane = params.viewplane;
@@ -165,10 +171,8 @@ void view3d_region_operator_needs_opengl(wmWindow *win, ARegion *ar)
RegionView3D *rv3d = ar->regiondata;
wmSubWindowSet(win, ar->swinid);
- glMatrixMode(GL_PROJECTION);
- glLoadMatrixf(rv3d->winmat);
- glMatrixMode(GL_MODELVIEW);
- glLoadMatrixf(rv3d->viewmat);
+ gpuLoadProjectionMatrix(rv3d->winmat);
+ gpuLoadMatrix(rv3d->viewmat);
}
}
@@ -230,6 +234,7 @@ bool ED_view3d_context_activate(bContext *C)
/** \name View Clipping Utilities
*
* \{ */
+
void ED_view3d_clipping_calc_from_boundbox(float clip[4][4], const BoundBox *bb, const bool is_flip)
{
int val;
@@ -244,40 +249,35 @@ void ED_view3d_clipping_calc_from_boundbox(float clip[4][4], const BoundBox *bb,
}
}
-void ED_view3d_clipping_calc(BoundBox *bb, float planes[4][4], bglMats *mats, const rcti *rect)
+void ED_view3d_clipping_calc(BoundBox *bb, float planes[4][4], const ARegion *ar, const Object *ob, const rcti *rect)
{
- float modelview[4][4];
- double xs, ys, p[3];
- int val, flip_sign, a;
-
- /* near zero floating point values can give issues with gluUnProject
- * in side view on some implementations */
- if (fabs(mats->modelview[0]) < 1e-6) mats->modelview[0] = 0.0;
- if (fabs(mats->modelview[5]) < 1e-6) mats->modelview[5] = 0.0;
-
- /* Set up viewport so that gluUnProject will give correct values */
- mats->viewport[0] = 0;
- mats->viewport[1] = 0;
+ /* init in case unproject fails */
+ memset(bb->vec, 0, sizeof(bb->vec));
/* four clipping planes and bounding volume */
/* first do the bounding volume */
- for (val = 0; val < 4; val++) {
- xs = (val == 0 || val == 3) ? rect->xmin : rect->xmax;
- ys = (val == 0 || val == 1) ? rect->ymin : rect->ymax;
+ for (int val = 0; val < 4; val++) {
+ float xs = (val == 0 || val == 3) ? rect->xmin : rect->xmax;
+ float ys = (val == 0 || val == 1) ? rect->ymin : rect->ymax;
- gluUnProject(xs, ys, 0.0, mats->modelview, mats->projection, mats->viewport, &p[0], &p[1], &p[2]);
- copy_v3fl_v3db(bb->vec[val], p);
+ ED_view3d_unproject(ar, xs, ys, 0.0, bb->vec[val]);
+ ED_view3d_unproject(ar, xs, ys, 1.0, bb->vec[4 + val]);
+ }
+
+ /* optionally transform to object space */
+ if (ob) {
+ float imat[4][4];
+ invert_m4_m4(imat, ob->obmat);
- gluUnProject(xs, ys, 1.0, mats->modelview, mats->projection, mats->viewport, &p[0], &p[1], &p[2]);
- copy_v3fl_v3db(bb->vec[4 + val], p);
+ for (int val = 0; val < 8; val++) {
+ mul_m4_v3(imat, bb->vec[val]);
+ }
}
/* verify if we have negative scale. doing the transform before cross
* product flips the sign of the vector compared to doing cross product
* before transform then, so we correct for that. */
- for (a = 0; a < 16; a++)
- ((float *)modelview)[a] = mats->modelview[a];
- flip_sign = is_negative_m4(modelview);
+ int flip_sign = (ob) ? is_negative_m4(ob->obmat) : false;
ED_view3d_clipping_calc_from_boundbox(planes, bb, flip_sign);
}
@@ -500,7 +500,7 @@ bool ED_view3d_camera_lock_sync(View3D *v3d, RegionView3D *rv3d)
ob_update = v3d->camera;
while (ob_update) {
- DAG_id_tag_update(&ob_update->id, OB_RECALC_OB);
+ DEG_id_tag_update(&ob_update->id, OB_RECALC_OB);
WM_main_add_notifier(NC_OBJECT | ND_TRANSFORM, ob_update);
ob_update = ob_update->parent;
}
@@ -512,7 +512,7 @@ bool ED_view3d_camera_lock_sync(View3D *v3d, RegionView3D *rv3d)
ED_view3d_to_object(v3d->camera, rv3d->ofs, rv3d->viewquat, rv3d->dist);
BKE_object_tfm_protected_restore(v3d->camera, &obtfm, v3d->camera->protectflag | protect_scale_all);
- DAG_id_tag_update(&v3d->camera->id, OB_RECALC_OB);
+ DEG_id_tag_update(&v3d->camera->id, OB_RECALC_OB);
WM_main_add_notifier(NC_OBJECT | ND_TRANSFORM, v3d->camera);
}
@@ -593,6 +593,7 @@ bool ED_view3d_camera_lock_autokey(
/** \} */
+
/* -------------------------------------------------------------------- */
/** \name Box View Support
*
@@ -877,22 +878,17 @@ static float view_autodist_depth_margin(ARegion *ar, const int mval[2], int marg
* \param fallback_depth_pt: Use this points depth when no depth can be found.
*/
bool ED_view3d_autodist(
- Scene *scene, ARegion *ar, View3D *v3d,
+ const EvaluationContext *eval_ctx, struct Depsgraph *graph, ARegion *ar, View3D *v3d,
const int mval[2], float mouse_worldloc[3],
const bool alphaoverride, const float fallback_depth_pt[3])
{
- bglMats mats; /* ZBuffer depth vars */
float depth_close;
- double cent[2], p[3];
int margin_arr[] = {0, 2, 4};
int i;
bool depth_ok = false;
/* Get Z Depths, needed for perspective, nice for ortho */
- ED_view3d_draw_depth(scene, ar, v3d, alphaoverride);
-
- /* call after in case settings have been modified since last drawing, see: T47089 */
- bgl_get_mats(&mats);
+ ED_view3d_draw_depth(eval_ctx, graph, ar, v3d, alphaoverride);
/* Attempt with low margin's first */
i = 0;
@@ -902,15 +898,10 @@ bool ED_view3d_autodist(
} while ((depth_ok == false) && (i < ARRAY_SIZE(margin_arr)));
if (depth_ok) {
- cent[0] = (double)mval[0] + 0.5;
- cent[1] = (double)mval[1] + 0.5;
+ float centx = (float)mval[0] + 0.5f;
+ float centy = (float)mval[1] + 0.5f;
- if (gluUnProject(cent[0], cent[1], depth_close,
- mats.modelview, mats.projection, (GLint *)mats.viewport, &p[0], &p[1], &p[2]))
- {
- mouse_worldloc[0] = (float)p[0];
- mouse_worldloc[1] = (float)p[1];
- mouse_worldloc[2] = (float)p[2];
+ if (ED_view3d_unproject(ar, centx, centy, depth_close, mouse_worldloc)) {
return true;
}
}
@@ -924,27 +915,29 @@ bool ED_view3d_autodist(
}
}
-void ED_view3d_autodist_init(Scene *scene, ARegion *ar, View3D *v3d, int mode)
+void ED_view3d_autodist_init(
+ const EvaluationContext *eval_ctx, struct Depsgraph *graph,
+ ARegion *ar, View3D *v3d, int mode)
{
/* Get Z Depths, needed for perspective, nice for ortho */
switch (mode) {
case 0:
- ED_view3d_draw_depth(scene, ar, v3d, true);
+ ED_view3d_draw_depth(eval_ctx, graph, ar, v3d, true);
break;
case 1:
- ED_view3d_draw_depth_gpencil(scene, ar, v3d);
+ {
+ Scene *scene = DEG_get_evaluated_scene(graph);
+ ED_view3d_draw_depth_gpencil(eval_ctx, scene, ar, v3d);
break;
+ }
}
}
/* no 4x4 sampling, run #ED_view3d_autodist_init first */
-bool ED_view3d_autodist_simple(
- ARegion *ar, const int mval[2], float mouse_worldloc[3],
- int margin, float *force_depth)
+bool ED_view3d_autodist_simple(ARegion *ar, const int mval[2], float mouse_worldloc[3],
+ int margin, float *force_depth)
{
- bglMats mats; /* ZBuffer depth vars, could cache? */
float depth;
- double cent[2], p[3];
/* Get Z Depths, needed for perspective, nice for ortho */
if (force_depth)
@@ -955,21 +948,9 @@ bool ED_view3d_autodist_simple(
if (depth == FLT_MAX)
return false;
- cent[0] = (double)mval[0] + 0.5;
- cent[1] = (double)mval[1] + 0.5;
-
- bgl_get_mats(&mats);
-
- if (!gluUnProject(cent[0], cent[1], depth,
- mats.modelview, mats.projection, (GLint *)mats.viewport, &p[0], &p[1], &p[2]))
- {
- return false;
- }
-
- mouse_worldloc[0] = (float)p[0];
- mouse_worldloc[1] = (float)p[1];
- mouse_worldloc[2] = (float)p[2];
- return true;
+ float centx = (float)mval[0] + 0.5f;
+ float centy = (float)mval[1] + 0.5f;
+ return ED_view3d_unproject(ar, centx, centy, depth, mouse_worldloc);
}
bool ED_view3d_autodist_depth(ARegion *ar, const int mval[2], int margin, float *depth)
@@ -1376,7 +1357,7 @@ float ED_view3d_depth_read_cached(const ViewContext *vc, const int mval[2])
}
bool ED_view3d_depth_read_cached_normal(
- const ViewContext *vc, const bglMats *mats, const int mval[2],
+ const ViewContext *vc, const int mval[2],
float r_normal[3])
{
/* Note: we could support passing in a radius.
@@ -1395,7 +1376,7 @@ bool ED_view3d_depth_read_cached_normal(
const double depth = (double)ED_view3d_depth_read_cached(vc, mval_ofs);
if ((depth > depths->depth_range[0]) && (depth < depths->depth_range[1])) {
- if (ED_view3d_depth_unproject(ar, mats, mval_ofs, depth, coords[i])) {
+ if (ED_view3d_depth_unproject(ar, mval_ofs, depth, coords[i])) {
depths_valid[i] = true;
}
}
@@ -1437,21 +1418,13 @@ bool ED_view3d_depth_read_cached_normal(
}
bool ED_view3d_depth_unproject(
- const ARegion *ar, const bglMats *mats,
+ const ARegion *ar,
const int mval[2], const double depth,
float r_location_world[3])
{
- double p[3];
- if (gluUnProject(
- (double)ar->winrct.xmin + mval[0] + 0.5,
- (double)ar->winrct.ymin + mval[1] + 0.5,
- depth, mats->modelview, mats->projection, (const GLint *)mats->viewport,
- &p[0], &p[1], &p[2]))
- {
- copy_v3fl_v3db(r_location_world, p);
- return true;
- }
- return false;
+ float centx = (float)mval[0] + 0.5f;
+ float centy = (float)mval[1] + 0.5f;
+ return ED_view3d_unproject(ar, centx, centy, depth, r_location_world);
}
void ED_view3d_depth_tag_update(RegionView3D *rv3d)
@@ -1461,46 +1434,3 @@ void ED_view3d_depth_tag_update(RegionView3D *rv3d)
}
/** \} */
-
-/* -------------------------------------------------------------------- */
-/** \name Background Image Utilities
- * \{ */
-
-BGpic *ED_view3d_background_image_new(View3D *v3d)
-{
- BGpic *bgpic = MEM_callocN(sizeof(BGpic), "Background Image");
-
- bgpic->rotation = 0.0f;
- bgpic->size = 5.0f;
- bgpic->blend = 0.5f;
- bgpic->iuser.fie_ima = 2;
- bgpic->iuser.ok = 1;
- bgpic->view = 0; /* 0 for all */
- bgpic->flag |= V3D_BGPIC_EXPANDED;
-
- BLI_addtail(&v3d->bgpicbase, bgpic);
-
- return bgpic;
-}
-
-void ED_view3d_background_image_remove(View3D *v3d, BGpic *bgpic)
-{
- BLI_remlink(&v3d->bgpicbase, bgpic);
-
- MEM_freeN(bgpic);
-}
-
-void ED_view3d_background_image_clear(View3D *v3d)
-{
- BGpic *bgpic = v3d->bgpicbase.first;
-
- while (bgpic) {
- BGpic *next_bgpic = bgpic->next;
-
- ED_view3d_background_image_remove(v3d, bgpic);
-
- bgpic = next_bgpic;
- }
-}
-
-/** \} */
diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c
index 56f0e39aca0..a0918066887 100644
--- a/source/blender/editors/space_view3d/view3d_view.c
+++ b/source/blender/editors/space_view3d/view3d_view.c
@@ -41,24 +41,29 @@
#include "BKE_action.h"
#include "BKE_camera.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_object.h"
#include "BKE_global.h"
#include "BKE_main.h"
#include "BKE_report.h"
#include "BKE_scene.h"
-#include "BIF_gl.h"
+#include "DEG_depsgraph.h"
#include "UI_resources.h"
+#include "GPU_glew.h"
#include "GPU_select.h"
+#include "GPU_matrix.h"
#include "WM_api.h"
#include "WM_types.h"
#include "ED_screen.h"
+#include "DRW_engine.h"
+
+#include "DEG_depsgraph_query.h"
+
#ifdef WITH_GAMEENGINE
# include "BLI_listbase.h"
# include "BLI_callbacks.h"
@@ -398,6 +403,9 @@ void ED_view3d_smooth_view_force_finish(
View3D *v3d, ARegion *ar)
{
RegionView3D *rv3d = ar->regiondata;
+ EvaluationContext eval_ctx;
+
+ CTX_data_eval_ctx(C, &eval_ctx);
if (rv3d && rv3d->sms) {
rv3d->sms->time_allowed = 0.0; /* force finishing */
@@ -406,7 +414,7 @@ void ED_view3d_smooth_view_force_finish(
/* force update of view matrix so tools that run immediately after
* can use them without redrawing first */
Scene *scene = CTX_data_scene(C);
- ED_view3d_update_viewmat(scene, v3d, ar, NULL, NULL, NULL);
+ ED_view3d_update_viewmat(&eval_ctx, scene, v3d, ar, NULL, NULL, NULL);
}
}
@@ -451,7 +459,7 @@ static int view3d_camera_to_view_exec(bContext *C, wmOperator *UNUSED(op))
BKE_object_tfm_protected_restore(v3d->camera, &obtfm, v3d->camera->protectflag);
- DAG_id_tag_update(&v3d->camera->id, OB_RECALC_OB);
+ DEG_id_tag_update(&v3d->camera->id, OB_RECALC_OB);
rv3d->persp = RV3D_CAMOB;
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, v3d->camera);
@@ -505,6 +513,7 @@ void VIEW3D_OT_camera_to_view(wmOperatorType *ot)
static int view3d_camera_to_view_selected_exec(bContext *C, wmOperator *op)
{
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
View3D *v3d = CTX_wm_view3d(C); /* can be NULL */
Object *camera_ob = v3d ? v3d->camera : scene->camera;
@@ -517,7 +526,7 @@ static int view3d_camera_to_view_selected_exec(bContext *C, wmOperator *op)
}
/* this function does all the important stuff */
- if (BKE_camera_view_frame_fit_to_scene(scene, v3d, camera_ob, r_co, &r_scale)) {
+ if (BKE_camera_view_frame_fit_to_scene(scene, view_layer, camera_ob, r_co, &r_scale)) {
ObjectTfmProtectedChannels obtfm;
float obmat_new[4][4];
@@ -534,7 +543,7 @@ static int view3d_camera_to_view_selected_exec(bContext *C, wmOperator *op)
BKE_object_tfm_protected_restore(camera_ob, &obtfm, OB_LOCK_SCALE | OB_LOCK_ROT4D);
/* notifiers */
- DAG_id_tag_update(&camera_ob->id, OB_RECALC_OB);
+ DEG_id_tag_update(&camera_ob->id, OB_RECALC_OB);
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, camera_ob);
return OPERATOR_FINISHED;
}
@@ -689,14 +698,14 @@ void VIEW3D_OT_object_as_camera(wmOperatorType *ot)
/**
* \param rect optional for picking (can be NULL).
*/
-void view3d_winmatrix_set(ARegion *ar, const View3D *v3d, const rcti *rect)
+void view3d_winmatrix_set(const Depsgraph *depsgraph, ARegion *ar, const View3D *v3d, const rcti *rect)
{
RegionView3D *rv3d = ar->regiondata;
rctf viewplane;
float clipsta, clipend;
bool is_ortho;
- is_ortho = ED_view3d_viewplane_get(v3d, rv3d, ar->winx, ar->winy, &viewplane, &clipsta, &clipend, NULL);
+ is_ortho = ED_view3d_viewplane_get(depsgraph, v3d, rv3d, ar->winx, ar->winy, &viewplane, &clipsta, &clipend, NULL);
rv3d->is_persp = !is_ortho;
#if 0
@@ -715,14 +724,14 @@ void view3d_winmatrix_set(ARegion *ar, const View3D *v3d, const rcti *rect)
}
if (is_ortho) {
- wmOrtho(viewplane.xmin, viewplane.xmax, viewplane.ymin, viewplane.ymax, clipsta, clipend);
+ gpuOrtho(viewplane.xmin, viewplane.xmax, viewplane.ymin, viewplane.ymax, clipsta, clipend);
}
else {
- wmFrustum(viewplane.xmin, viewplane.xmax, viewplane.ymin, viewplane.ymax, clipsta, clipend);
+ gpuFrustum(viewplane.xmin, viewplane.xmax, viewplane.ymin, viewplane.ymax, clipsta, clipend);
}
/* update matrix in 3d view region */
- glGetFloatv(GL_PROJECTION_MATRIX, (float *)rv3d->winmat);
+ gpuGetProjectionMatrix(rv3d->winmat);
}
static void obmat_to_viewmat(RegionView3D *rv3d, Object *ob)
@@ -741,6 +750,7 @@ static void obmat_to_viewmat(RegionView3D *rv3d, Object *ob)
/**
* Sets #RegionView3D.viewmat
*
+ * \param eval_ctx: Context.
* \param scene: Scene for camera and cursor location.
* \param v3d: View 3D space data.
* \param rv3d: 3D region which stores the final matrices.
@@ -750,13 +760,15 @@ static void obmat_to_viewmat(RegionView3D *rv3d, Object *ob)
* \note don't set windows active in here, is used by renderwin too.
*/
void view3d_viewmatrix_set(
- Scene *scene,
+ const EvaluationContext *eval_ctx, Scene *scene,
const View3D *v3d, RegionView3D *rv3d, const float rect_scale[2])
{
if (rv3d->persp == RV3D_CAMOB) { /* obs/camera */
if (v3d->camera) {
- BKE_object_where_is_calc(scene, v3d->camera);
- obmat_to_viewmat(rv3d, v3d->camera);
+ const Depsgraph *depsgraph = eval_ctx->depsgraph;
+ Object *camera_object = DEG_get_evaluated_object(depsgraph, v3d->camera);
+ BKE_object_where_is_calc(eval_ctx, scene, camera_object);
+ obmat_to_viewmat(rv3d, camera_object);
}
else {
quat_to_mat4(rv3d->viewmat, rv3d->viewquat);
@@ -857,10 +869,11 @@ void view3d_opengl_select_cache_end(void)
* \note (vc->obedit == NULL) can be set to explicitly skip edit-object selection.
*/
int view3d_opengl_select(
- ViewContext *vc, unsigned int *buffer, unsigned int bufsize, const rcti *input,
+ const EvaluationContext *eval_ctx, ViewContext *vc, unsigned int *buffer, unsigned int bufsize, const rcti *input,
eV3DSelectMode select_mode)
{
struct bThemeState theme_state;
+ Depsgraph *graph = vc->depsgraph;
Scene *scene = vc->scene;
View3D *v3d = vc->v3d;
ARegion *ar = vc->ar;
@@ -922,7 +935,7 @@ int view3d_opengl_select(
/* Important we use the 'viewmat' and don't re-calculate since
* the object & bone view locking takes 'rect' into account, see: T51629. */
- ED_view3d_draw_setup_view(vc->win, scene, ar, v3d, vc->rv3d->viewmat, NULL, &rect);
+ ED_view3d_draw_setup_view(vc->win, eval_ctx, scene, ar, v3d, vc->rv3d->viewmat, NULL, &rect);
if (v3d->drawtype > OB_WIRE) {
v3d->zbuf = true;
@@ -934,7 +947,18 @@ int view3d_opengl_select(
GPU_select_begin(buffer, bufsize, &rect, gpu_select_mode, 0);
- ED_view3d_draw_select_loop(vc, scene, v3d, ar, use_obedit_skip, use_nearest);
+#ifdef WITH_OPENGL_LEGACY
+ if (IS_VIEWPORT_LEGACY(vc->v3d)) {
+ ED_view3d_draw_select_loop(vc, scene, sl, v3d, ar, use_obedit_skip, use_nearest);
+ }
+ else
+#else
+ {
+ DRW_draw_select_loop(
+ graph, ar, v3d, eval_ctx->object_mode,
+ use_obedit_skip, use_nearest, &rect);
+ }
+#endif /* WITH_OPENGL_LEGACY */
hits = GPU_select_end();
@@ -942,13 +966,24 @@ int view3d_opengl_select(
if (do_passes && (hits > 0)) {
GPU_select_begin(buffer, bufsize, &rect, GPU_SELECT_NEAREST_SECOND_PASS, hits);
- ED_view3d_draw_select_loop(vc, scene, v3d, ar, use_obedit_skip, use_nearest);
+#ifdef WITH_OPENGL_LEGACY
+ if (IS_VIEWPORT_LEGACY(vc->v3d)) {
+ ED_view3d_draw_select_loop(vc, scene, sl, v3d, ar, use_obedit_skip, use_nearest);
+ }
+ else
+#else
+ {
+ DRW_draw_select_loop(
+ graph, ar, v3d, eval_ctx->object_mode,
+ use_obedit_skip, use_nearest, &rect);
+ }
+#endif /* WITH_OPENGL_LEGACY */
GPU_select_end();
}
G.f &= ~G_PICKSEL;
- ED_view3d_draw_setup_view(vc->win, scene, ar, v3d, vc->rv3d->viewmat, NULL, NULL);
+ ED_view3d_draw_setup_view(vc->win, eval_ctx, scene, ar, v3d, vc->rv3d->viewmat, NULL, NULL);
if (v3d->drawtype > OB_WIRE) {
v3d->zbuf = 0;
@@ -969,44 +1004,10 @@ finally:
/** \} */
/* -------------------------------------------------------------------- */
-/** \name Local View Operators
+/** \name View Layer Utilities
* \{ */
-static unsigned int free_localbit(Main *bmain)
-{
- unsigned int lay;
- ScrArea *sa;
- bScreen *sc;
-
- lay = 0;
-
- /* sometimes we loose a localview: when an area is closed */
- /* check all areas: which localviews are in use? */
- for (sc = bmain->screen.first; sc; sc = sc->id.next) {
- for (sa = sc->areabase.first; sa; sa = sa->next) {
- SpaceLink *sl = sa->spacedata.first;
- for (; sl; sl = sl->next) {
- if (sl->spacetype == SPACE_VIEW3D) {
- View3D *v3d = (View3D *) sl;
- lay |= v3d->lay;
- }
- }
- }
- }
-
- if ((lay & 0x01000000) == 0) return 0x01000000;
- if ((lay & 0x02000000) == 0) return 0x02000000;
- if ((lay & 0x04000000) == 0) return 0x04000000;
- if ((lay & 0x08000000) == 0) return 0x08000000;
- if ((lay & 0x10000000) == 0) return 0x10000000;
- if ((lay & 0x20000000) == 0) return 0x20000000;
- if ((lay & 0x40000000) == 0) return 0x40000000;
- if ((lay & 0x80000000) == 0) return 0x80000000;
-
- return 0;
-}
-
-int ED_view3d_scene_layer_set(int lay, const int *values, int *active)
+int ED_view3d_view_layer_set(int lay, const int *values, int *active)
{
int i, tot = 0;
@@ -1044,267 +1045,6 @@ int ED_view3d_scene_layer_set(int lay, const int *values, int *active)
return lay;
}
-static bool view3d_localview_init(
- wmWindowManager *wm, wmWindow *win,
- Main *bmain, Scene *scene, ScrArea *sa, const int smooth_viewtx,
- ReportList *reports)
-{
- View3D *v3d = sa->spacedata.first;
- Base *base;
- float min[3], max[3], box[3], mid[3];
- float size = 0.0f;
- unsigned int locallay;
- bool ok = false;
-
- if (v3d->localvd) {
- return ok;
- }
-
- INIT_MINMAX(min, max);
-
- locallay = free_localbit(bmain);
-
- if (locallay == 0) {
- BKE_report(reports, RPT_ERROR, "No more than 8 local views");
- ok = false;
- }
- else {
- if (scene->obedit) {
- BKE_object_minmax(scene->obedit, min, max, false);
-
- ok = true;
-
- BASACT->lay |= locallay;
- scene->obedit->lay = BASACT->lay;
- }
- else {
- for (base = FIRSTBASE; base; base = base->next) {
- if (TESTBASE(v3d, base)) {
- BKE_object_minmax(base->object, min, max, false);
- base->lay |= locallay;
- base->object->lay = base->lay;
- ok = true;
- }
- }
- }
-
- sub_v3_v3v3(box, max, min);
- size = max_fff(box[0], box[1], box[2]);
- }
-
- if (ok == true) {
- ARegion *ar;
-
- v3d->localvd = MEM_mallocN(sizeof(View3D), "localview");
-
- memcpy(v3d->localvd, v3d, sizeof(View3D));
-
- mid_v3_v3v3(mid, min, max);
-
- copy_v3_v3(v3d->cursor, mid);
-
- for (ar = sa->regionbase.first; ar; ar = ar->next) {
- if (ar->regiontype == RGN_TYPE_WINDOW) {
- RegionView3D *rv3d = ar->regiondata;
- bool ok_dist = true;
-
- /* new view values */
- Object *camera_old = NULL;
- float dist_new, ofs_new[3];
-
- rv3d->localvd = MEM_mallocN(sizeof(RegionView3D), "localview region");
- memcpy(rv3d->localvd, rv3d, sizeof(RegionView3D));
-
- negate_v3_v3(ofs_new, mid);
-
- if (rv3d->persp == RV3D_CAMOB) {
- rv3d->persp = RV3D_PERSP;
- camera_old = v3d->camera;
- }
-
- if (rv3d->persp == RV3D_ORTHO) {
- if (size < 0.0001f) {
- ok_dist = false;
- }
- }
-
- if (ok_dist) {
- dist_new = ED_view3d_radius_to_dist(v3d, ar, rv3d->persp, true, (size / 2) * VIEW3D_MARGIN);
- if (rv3d->persp == RV3D_PERSP) {
- /* don't zoom closer than the near clipping plane */
- dist_new = max_ff(dist_new, v3d->near * 1.5f);
- }
- }
-
- ED_view3d_smooth_view_ex(
- wm, win, sa, v3d, ar, smooth_viewtx,
- &(const V3D_SmoothParams) {
- .camera_old = camera_old,
- .ofs = ofs_new, .quat = rv3d->viewquat,
- .dist = ok_dist ? &dist_new : NULL, .lens = &v3d->lens});
- }
- }
-
- v3d->lay = locallay;
- }
- else {
- /* clear flags */
- for (base = FIRSTBASE; base; base = base->next) {
- if (base->lay & locallay) {
- base->lay -= locallay;
- if (base->lay == 0) base->lay = v3d->layact;
- if (base->object != scene->obedit) base->flag |= SELECT;
- base->object->lay = base->lay;
- }
- }
- }
-
- DAG_on_visible_update(bmain, false);
-
- return ok;
-}
-
-static void restore_localviewdata(wmWindowManager *wm, wmWindow *win, Main *bmain, ScrArea *sa, const int smooth_viewtx)
-{
- const bool free = true;
- ARegion *ar;
- View3D *v3d = sa->spacedata.first;
- Object *camera_old, *camera_new;
-
- if (v3d->localvd == NULL) return;
-
- camera_old = v3d->camera;
- camera_new = v3d->localvd->camera;
-
- v3d->lay = v3d->localvd->lay;
- v3d->layact = v3d->localvd->layact;
- v3d->drawtype = v3d->localvd->drawtype;
- v3d->camera = v3d->localvd->camera;
-
- if (free) {
- MEM_freeN(v3d->localvd);
- v3d->localvd = NULL;
- }
-
- for (ar = sa->regionbase.first; ar; ar = ar->next) {
- if (ar->regiontype == RGN_TYPE_WINDOW) {
- RegionView3D *rv3d = ar->regiondata;
-
- if (rv3d->localvd) {
- Object *camera_old_rv3d, *camera_new_rv3d;
-
- camera_old_rv3d = (rv3d->persp == RV3D_CAMOB) ? camera_old : NULL;
- camera_new_rv3d = (rv3d->localvd->persp == RV3D_CAMOB) ? camera_new : NULL;
-
- rv3d->view = rv3d->localvd->view;
- rv3d->persp = rv3d->localvd->persp;
- rv3d->camzoom = rv3d->localvd->camzoom;
-
- ED_view3d_smooth_view_ex(
- wm, win, sa,
- v3d, ar, smooth_viewtx,
- &(const V3D_SmoothParams) {
- .camera_old = camera_old_rv3d, .camera = camera_new_rv3d,
- .ofs = rv3d->localvd->ofs, .quat = rv3d->localvd->viewquat,
- .dist = &rv3d->localvd->dist});
-
- if (free) {
- MEM_freeN(rv3d->localvd);
- rv3d->localvd = NULL;
- }
- }
-
- ED_view3d_shade_update(bmain, v3d, sa);
- }
- }
-}
-
-static bool view3d_localview_exit(
- wmWindowManager *wm, wmWindow *win,
- Main *bmain, Scene *scene, ScrArea *sa, const int smooth_viewtx)
-{
- View3D *v3d = sa->spacedata.first;
- struct Base *base;
- unsigned int locallay;
-
- if (v3d->localvd) {
-
- locallay = v3d->lay & 0xFF000000;
-
- restore_localviewdata(wm, win, bmain, sa, smooth_viewtx);
-
- /* for when in other window the layers have changed */
- if (v3d->scenelock) v3d->lay = scene->lay;
-
- for (base = FIRSTBASE; base; base = base->next) {
- if (base->lay & locallay) {
- base->lay -= locallay;
- if (base->lay == 0) base->lay = v3d->layact;
- if (base->object != scene->obedit) {
- base->flag |= SELECT;
- base->object->flag |= SELECT;
- }
- base->object->lay = base->lay;
- }
- }
-
- DAG_on_visible_update(bmain, false);
-
- return true;
- }
- else {
- return false;
- }
-}
-
-static int localview_exec(bContext *C, wmOperator *op)
-{
- const int smooth_viewtx = WM_operator_smooth_viewtx_get(op);
- wmWindowManager *wm = CTX_wm_manager(C);
- wmWindow *win = CTX_wm_window(C);
- Main *bmain = CTX_data_main(C);
- Scene *scene = CTX_data_scene(C);
- ScrArea *sa = CTX_wm_area(C);
- View3D *v3d = CTX_wm_view3d(C);
- bool changed;
-
- if (v3d->localvd) {
- changed = view3d_localview_exit(wm, win, bmain, scene, sa, smooth_viewtx);
- }
- else {
- changed = view3d_localview_init(wm, win, bmain, scene, sa, smooth_viewtx, op->reports);
- }
-
- if (changed) {
- DAG_id_type_tag(bmain, ID_OB);
- ED_area_tag_redraw(sa);
-
- /* unselected objects become selected when exiting */
- if (v3d->localvd == NULL) {
- WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
- }
-
- return OPERATOR_FINISHED;
- }
- else {
- return OPERATOR_CANCELLED;
- }
-}
-
-void VIEW3D_OT_localview(wmOperatorType *ot)
-{
- /* identifiers */
- ot->name = "Local View";
- ot->description = "Toggle display of selected object(s) separately and centered in view";
- ot->idname = "VIEW3D_OT_localview";
-
- /* api callbacks */
- ot->exec = localview_exec;
- ot->flag = OPTYPE_UNDO; /* localview changes object layer bitflags */
-
- ot->poll = ED_operator_view3d_active;
-}
-
/** \} */
/* -------------------------------------------------------------------- */
@@ -1318,12 +1058,15 @@ void VIEW3D_OT_localview(wmOperatorType *ot)
static ListBase queue_back;
static void game_engine_save_state(bContext *C, wmWindow *win)
{
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
Object *obact = CTX_data_active_object(C);
glPushAttrib(GL_ALL_ATTRIB_BITS);
- if (obact && obact->mode & OB_MODE_TEXTURE_PAINT)
+ if (obact && eval_ctx.object_mode & OB_MODE_TEXTURE_PAINT) {
GPU_paint_set_mipmap(1);
+ }
queue_back = win->queue;
@@ -1332,18 +1075,19 @@ static void game_engine_save_state(bContext *C, wmWindow *win)
static void game_engine_restore_state(bContext *C, wmWindow *win)
{
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
Object *obact = CTX_data_active_object(C);
- if (obact && obact->mode & OB_MODE_TEXTURE_PAINT)
+ if (obact && eval_ctx.object_mode & OB_MODE_TEXTURE_PAINT) {
GPU_paint_set_mipmap(0);
-
+ }
/* check because closing win can set to NULL */
if (win) {
win->queue = queue_back;
}
GPU_state_init();
- GPU_set_tpage(NULL, 0, 0);
glPopAttrib();
}
@@ -1386,10 +1130,6 @@ static void game_set_commmandline_options(GameData *gm)
SYS_WriteCommandLineInt(syshandle, "blender_material", test);
test = (gm->matmode == GAME_MAT_GLSL);
SYS_WriteCommandLineInt(syshandle, "blender_glsl_material", test);
- test = (gm->flag & GAME_DISPLAY_LISTS);
- SYS_WriteCommandLineInt(syshandle, "displaylists", test);
-
-
}
}
@@ -1397,19 +1137,21 @@ static void game_set_commmandline_options(GameData *gm)
static int game_engine_poll(bContext *C)
{
- bScreen *screen;
+ const wmWindow *win = CTX_wm_window(C);
+ const Scene *scene = WM_window_get_active_scene(win);
+
/* we need a context and area to launch BGE
* it's a temporary solution to avoid crash at load time
* if we try to auto run the BGE. Ideally we want the
* context to be set as soon as we load the file. */
- if (CTX_wm_window(C) == NULL) return 0;
- if ((screen = CTX_wm_screen(C)) == NULL) return 0;
+ if (win == NULL) return 0;
+ if (CTX_wm_screen(C) == NULL) return 0;
if (CTX_data_mode_enum(C) != CTX_MODE_OBJECT)
return 0;
- if (!BKE_scene_uses_blender_game(screen->scene))
+ if (!BKE_scene_uses_blender_game(scene))
return 0;
return 1;
@@ -1450,9 +1192,10 @@ static int game_engine_exec(bContext *C, wmOperator *op)
(startscene->gm.framing.type == SCE_GAMEFRAMING_BARS) &&
(startscene->gm.stereoflag != STEREO_DOME))
{
+ const Depsgraph *depsgraph = CTX_data_depsgraph(C);
/* Letterbox */
rctf cam_framef;
- ED_view3d_calc_camera_border(startscene, ar, CTX_wm_view3d(C), rv3d, &cam_framef, false);
+ ED_view3d_calc_camera_border(startscene, depsgraph, ar, CTX_wm_view3d(C), rv3d, &cam_framef, false);
cam_frame.xmin = cam_framef.xmin + ar->winrct.xmin;
cam_frame.xmax = cam_framef.xmax + ar->winrct.xmin;
cam_frame.ymin = cam_framef.ymin + ar->winrct.ymin;
@@ -1491,7 +1234,7 @@ static int game_engine_exec(bContext *C, wmOperator *op)
//XXX restore_all_scene_cfra(scene_cfra_store);
BKE_scene_set_background(CTX_data_main(C), startscene);
- //XXX BKE_scene_update_for_newframe(bmain->eval_ctx, bmain, scene, scene->lay);
+ //XXX BKE_scene_graph_update_for_newframe(bmain->eval_ctx, bmain, scene, depsgraph);
BLI_callback_exec(bmain, &startscene->id, BLI_CB_EVT_GAME_POST);
diff --git a/source/blender/editors/space_view3d/view3d_walk.c b/source/blender/editors/space_view3d/view3d_walk.c
index f780ca35f30..e65f9abae27 100644
--- a/source/blender/editors/space_view3d/view3d_walk.c
+++ b/source/blender/editors/space_view3d/view3d_walk.c
@@ -56,6 +56,12 @@
#include "UI_interface.h"
#include "UI_resources.h"
+#include "GPU_immediate.h"
+
+#include "RE_engine.h"
+
+#include "DEG_depsgraph.h"
+
#include "view3d_intern.h" /* own include */
#ifdef WITH_INPUT_NDOF
@@ -245,7 +251,10 @@ typedef struct WalkInfo {
RegionView3D *rv3d;
View3D *v3d;
ARegion *ar;
+ const struct Depsgraph *depsgraph;
Scene *scene;
+ ViewLayer *view_layer;
+ RenderEngineType *engine_type;
wmTimer *timer; /* needed for redraws */
@@ -328,7 +337,7 @@ static void drawWalkPixel(const struct bContext *UNUSED(C), ARegion *ar, void *a
rctf viewborder;
if (walk->scene->camera) {
- ED_view3d_calc_camera_border(walk->scene, ar, walk->v3d, walk->rv3d, &viewborder, false);
+ ED_view3d_calc_camera_border(walk->scene, walk->depsgraph, ar, walk->v3d, walk->rv3d, &viewborder, false);
xoff = viewborder.xmin + BLI_rctf_size_x(&viewborder) * 0.5f;
yoff = viewborder.ymin + BLI_rctf_size_y(&viewborder) * 0.5f;
}
@@ -337,24 +346,33 @@ static void drawWalkPixel(const struct bContext *UNUSED(C), ARegion *ar, void *a
yoff = walk->ar->winy / 2;
}
- UI_ThemeColor(TH_VIEW_OVERLAY);
- glBegin(GL_LINES);
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ immUniformThemeColor(TH_VIEW_OVERLAY);
+
+ immBegin(GWN_PRIM_LINES, 8);
+
/* North */
- glVertex2i(xoff, yoff + inner_length);
- glVertex2i(xoff, yoff + outter_length);
+ immVertex2i(pos, xoff, yoff + inner_length);
+ immVertex2i(pos, xoff, yoff + outter_length);
/* East */
- glVertex2i(xoff + inner_length, yoff);
- glVertex2i(xoff + outter_length, yoff);
+ immVertex2i(pos, xoff + inner_length, yoff);
+ immVertex2i(pos, xoff + outter_length, yoff);
/* South */
- glVertex2i(xoff, yoff - inner_length);
- glVertex2i(xoff, yoff - outter_length);
+ immVertex2i(pos, xoff, yoff - inner_length);
+ immVertex2i(pos, xoff, yoff - outter_length);
/* West */
- glVertex2i(xoff - inner_length, yoff);
- glVertex2i(xoff - outter_length, yoff);
- glEnd();
+ immVertex2i(pos, xoff - inner_length, yoff);
+ immVertex2i(pos, xoff - outter_length, yoff);
+
+ immEnd();
+ immUnbindProgram();
}
static void walk_update_header(bContext *C, wmOperator *op, WalkInfo *walk)
@@ -494,11 +512,17 @@ static float userdef_speed = -1.f;
static bool initWalkInfo(bContext *C, WalkInfo *walk, wmOperator *op)
{
wmWindow *win = CTX_wm_window(C);
+ EvaluationContext eval_ctx;
+
+ CTX_data_eval_ctx(C, &eval_ctx);
walk->rv3d = CTX_wm_region_view3d(C);
walk->v3d = CTX_wm_view3d(C);
walk->ar = CTX_wm_region(C);
+ walk->depsgraph = CTX_data_depsgraph(C);
walk->scene = CTX_data_scene(C);
+ walk->view_layer = CTX_data_view_layer(C);
+ walk->engine_type = CTX_data_engine_type(C);
#ifdef NDOF_WALK_DEBUG
puts("\n-- walk begin --");
@@ -587,11 +611,11 @@ static bool initWalkInfo(bContext *C, WalkInfo *walk, wmOperator *op)
walk->rv3d->rflag |= RV3D_NAVIGATING;
walk->snap_context = ED_transform_snap_object_context_create_view3d(
- CTX_data_main(C), walk->scene, 0,
+ CTX_data_main(C), walk->scene, walk->view_layer, walk->engine_type, 0,
walk->ar, walk->v3d);
walk->v3d_camera_control = ED_view3d_cameracontrol_acquire(
- walk->scene, walk->v3d, walk->rv3d,
+ &eval_ctx, walk->scene, walk->v3d, walk->rv3d,
(U.uiflag & USER_CAM_LOCK_NO_PARENT) == 0);
/* center the mouse */
diff --git a/source/blender/editors/transform/CMakeLists.txt b/source/blender/editors/transform/CMakeLists.txt
index b7de49d8158..f38f6c064b8 100644
--- a/source/blender/editors/transform/CMakeLists.txt
+++ b/source/blender/editors/transform/CMakeLists.txt
@@ -29,6 +29,7 @@ set(INC
../../ikplugin
../../makesdna
../../makesrna
+ ../../render/extern/include
../../windowmanager
../../depsgraph
../../../../intern/guardedalloc
@@ -46,6 +47,7 @@ set(SRC
transform_generics.c
transform_input.c
transform_manipulator.c
+ transform_manipulator2d.c
transform_ops.c
transform_orientations.c
transform_snap.c
@@ -58,10 +60,6 @@ if(WITH_INTERNATIONAL)
add_definitions(-DWITH_INTERNATIONAL)
endif()
-if(WITH_LEGACY_DEPSGRAPH)
- add_definitions(-DWITH_LEGACY_DEPSGRAPH)
-endif()
-
add_definitions(${GL_DEFINITIONS})
blender_add_lib(bf_editor_transform "${SRC}" "${INC}" "${INC_SYS}")
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index 6ca9485599c..67e912ad15b 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -43,6 +43,7 @@
#include "DNA_mask_types.h"
#include "DNA_movieclip_types.h"
#include "DNA_scene_types.h" /* PET modes */
+#include "DNA_workspace_types.h"
#include "BLI_alloca.h"
#include "BLI_utildefines.h"
@@ -63,10 +64,16 @@
#include "BKE_unit.h"
#include "BKE_mask.h"
#include "BKE_report.h"
+#include "BKE_workspace.h"
+
+#include "DEG_depsgraph.h"
-#include "BIF_gl.h"
#include "BIF_glutil.h"
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+#include "GPU_matrix.h"
+
#include "ED_image.h"
#include "ED_keyframing.h"
#include "ED_screen.h"
@@ -1598,8 +1605,16 @@ typedef enum {
LEFT,
RIGHT
} ArrowDirection;
+
+#define POS_INDEX 0
+/* NOTE: this --^ is a bit hackish, but simplifies Gwn_VertFormat usage among functions
+ * private to this file - merwin
+ */
+
static void drawArrow(ArrowDirection d, short offset, short length, short size)
{
+ immBegin(GWN_PRIM_LINES, 6);
+
switch (d) {
case LEFT:
offset = -offset;
@@ -1607,14 +1622,12 @@ static void drawArrow(ArrowDirection d, short offset, short length, short size)
size = -size;
ATTR_FALLTHROUGH;
case RIGHT:
- glBegin(GL_LINES);
- glVertex2s(offset, 0);
- glVertex2s(offset + length, 0);
- glVertex2s(offset + length, 0);
- glVertex2s(offset + length - size, -size);
- glVertex2s(offset + length, 0);
- glVertex2s(offset + length - size, size);
- glEnd();
+ immVertex2f(POS_INDEX, offset, 0);
+ immVertex2f(POS_INDEX, offset + length, 0);
+ immVertex2f(POS_INDEX, offset + length, 0);
+ immVertex2f(POS_INDEX, offset + length - size, -size);
+ immVertex2f(POS_INDEX, offset + length, 0);
+ immVertex2f(POS_INDEX, offset + length - size, size);
break;
case DOWN:
@@ -1623,45 +1636,45 @@ static void drawArrow(ArrowDirection d, short offset, short length, short size)
size = -size;
ATTR_FALLTHROUGH;
case UP:
- glBegin(GL_LINES);
- glVertex2s(0, offset);
- glVertex2s(0, offset + length);
- glVertex2s(0, offset + length);
- glVertex2s(-size, offset + length - size);
- glVertex2s(0, offset + length);
- glVertex2s(size, offset + length - size);
- glEnd();
+ immVertex2f(POS_INDEX, 0, offset);
+ immVertex2f(POS_INDEX, 0, offset + length);
+ immVertex2f(POS_INDEX, 0, offset + length);
+ immVertex2f(POS_INDEX, -size, offset + length - size);
+ immVertex2f(POS_INDEX, 0, offset + length);
+ immVertex2f(POS_INDEX, size, offset + length - size);
break;
}
+
+ immEnd();
}
static void drawArrowHead(ArrowDirection d, short size)
{
+ immBegin(GWN_PRIM_LINES, 4);
+
switch (d) {
case LEFT:
size = -size;
ATTR_FALLTHROUGH;
case RIGHT:
- glBegin(GL_LINES);
- glVertex2s(0, 0);
- glVertex2s(-size, -size);
- glVertex2s(0, 0);
- glVertex2s(-size, size);
- glEnd();
+ immVertex2f(POS_INDEX, 0, 0);
+ immVertex2f(POS_INDEX, -size, -size);
+ immVertex2f(POS_INDEX, 0, 0);
+ immVertex2f(POS_INDEX, -size, size);
break;
case DOWN:
size = -size;
ATTR_FALLTHROUGH;
case UP:
- glBegin(GL_LINES);
- glVertex2s(0, 0);
- glVertex2s(-size, -size);
- glVertex2s(0, 0);
- glVertex2s(size, -size);
- glEnd();
+ immVertex2f(POS_INDEX, 0, 0);
+ immVertex2f(POS_INDEX, -size, -size);
+ immVertex2f(POS_INDEX, 0, 0);
+ immVertex2f(POS_INDEX, size, -size);
break;
}
+
+ immEnd();
}
static void drawArc(float size, float angle_start, float angle_end, int segments)
@@ -1670,14 +1683,14 @@ static void drawArc(float size, float angle_start, float angle_end, int segments
float angle;
int a;
- glBegin(GL_LINE_STRIP);
+ immBegin(GWN_PRIM_LINE_STRIP, segments + 1);
for (angle = angle_start, a = 0; a < segments; angle += delta, a++) {
- glVertex2f(cosf(angle) * size, sinf(angle) * size);
+ immVertex2f(POS_INDEX, cosf(angle) * size, sinf(angle) * size);
}
- glVertex2f(cosf(angle_end) * size, sinf(angle_end) * size);
+ immVertex2f(POS_INDEX, cosf(angle_end) * size, sinf(angle_end) * size);
- glEnd();
+ immEnd();
}
static int helpline_poll(bContext *C)
@@ -1693,12 +1706,9 @@ static void drawHelpline(bContext *UNUSED(C), int x, int y, void *customdata)
{
TransInfo *t = (TransInfo *)customdata;
- if (t->helpline != HLP_NONE && !(t->flag & T_USES_MANIPULATOR)) {
+ if (t->helpline != HLP_NONE) {
float vecrot[3], cent[2];
- int mval[2];
-
- mval[0] = x;
- mval[1] = y;
+ float mval[3] = { x, y, 0.0f };
copy_v3_v3(vecrot, t->center);
if (t->flag & T_EDIT) {
@@ -1712,42 +1722,67 @@ static void drawHelpline(bContext *UNUSED(C), int x, int y, void *customdata)
projectFloatViewEx(t, vecrot, cent, V3D_PROJ_TEST_CLIP_ZERO);
- glPushMatrix();
+ gpuPushMatrix();
+
+ /* Dashed lines first. */
+ if (ELEM(t->helpline, HLP_SPRING, HLP_ANGLE)) {
+ const uint shdr_pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ UNUSED_VARS_NDEBUG(shdr_pos); /* silence warning */
+ BLI_assert(shdr_pos == POS_INDEX);
+
+ glLineWidth(1.0f);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR);
+
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2], viewport_size[3]);
+
+ immUniform1i("num_colors", 0); /* "simple" mode */
+ immUniformThemeColor(TH_VIEW_OVERLAY);
+ immUniform1f("dash_width", 6.0f);
+ immUniform1f("dash_factor", 0.5f);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2fv(POS_INDEX, cent);
+ immVertex2f(POS_INDEX, (float)t->mval[0], (float)t->mval[1]);
+ immEnd();
+
+ immUnbindProgram();
+ }
+
+ /* And now, solid lines. */
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ UNUSED_VARS_NDEBUG(pos); /* silence warning */
+ BLI_assert(pos == POS_INDEX);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
switch (t->helpline) {
case HLP_SPRING:
- UI_ThemeColor(TH_VIEW_OVERLAY);
-
- setlinestyle(3);
- glLineWidth(1);
- glBegin(GL_LINES);
- glVertex2iv(t->mval);
- glVertex2fv(cent);
- glEnd();
+ immUniformThemeColor(TH_VIEW_OVERLAY);
- glTranslate2iv(mval);
- glRotatef(-RAD2DEGF(atan2f(cent[0] - t->mval[0], cent[1] - t->mval[1])), 0, 0, 1);
+ gpuTranslate3fv(mval);
+ gpuRotateAxis(-RAD2DEGF(atan2f(cent[0] - t->mval[0], cent[1] - t->mval[1])), 'Z');
- setlinestyle(0);
- glLineWidth(3.0);
+ glLineWidth(3.0f);
drawArrow(UP, 5, 10, 5);
drawArrow(DOWN, 5, 10, 5);
break;
case HLP_HARROW:
- UI_ThemeColor(TH_VIEW_OVERLAY);
+ immUniformThemeColor(TH_VIEW_OVERLAY);
+ gpuTranslate3fv(mval);
- glTranslate2iv(mval);
-
- glLineWidth(3.0);
+ glLineWidth(3.0f);
drawArrow(RIGHT, 5, 10, 5);
drawArrow(LEFT, 5, 10, 5);
break;
case HLP_VARROW:
- UI_ThemeColor(TH_VIEW_OVERLAY);
+ immUniformThemeColor(TH_VIEW_OVERLAY);
- glTranslate2iv(mval);
+ gpuTranslate3fv(mval);
- glLineWidth(3.0);
+ glLineWidth(3.0f);
drawArrow(UP, 5, 10, 5);
drawArrow(DOWN, 5, 10, 5);
break;
@@ -1758,33 +1793,26 @@ static void drawHelpline(bContext *UNUSED(C), int x, int y, void *customdata)
float dist = hypotf(dx, dy);
float delta_angle = min_ff(15.0f / dist, (float)M_PI / 4.0f);
float spacing_angle = min_ff(5.0f / dist, (float)M_PI / 12.0f);
- UI_ThemeColor(TH_VIEW_OVERLAY);
- setlinestyle(3);
- glLineWidth(1);
- glBegin(GL_LINES);
- glVertex2iv(t->mval);
- glVertex2fv(cent);
- glEnd();
+ immUniformThemeColor(TH_VIEW_OVERLAY);
- glTranslatef(cent[0] - t->mval[0] + mval[0], cent[1] - t->mval[1] + mval[1], 0);
+ gpuTranslate3f(cent[0] - t->mval[0] + mval[0], cent[1] - t->mval[1] + mval[1], 0);
- setlinestyle(0);
- glLineWidth(3.0);
+ glLineWidth(3.0f);
drawArc(dist, angle - delta_angle, angle - spacing_angle, 10);
drawArc(dist, angle + spacing_angle, angle + delta_angle, 10);
- glPushMatrix();
+ gpuPushMatrix();
- glTranslatef(cosf(angle - delta_angle) * dist, sinf(angle - delta_angle) * dist, 0);
- glRotatef(RAD2DEGF(angle - delta_angle), 0, 0, 1);
+ gpuTranslate3f(cosf(angle - delta_angle) * dist, sinf(angle - delta_angle) * dist, 0);
+ gpuRotateAxis(RAD2DEGF(angle - delta_angle), 'Z');
drawArrowHead(DOWN, 5);
- glPopMatrix();
+ gpuPopMatrix();
- glTranslatef(cosf(angle + delta_angle) * dist, sinf(angle + delta_angle) * dist, 0);
- glRotatef(RAD2DEGF(angle + delta_angle), 0, 0, 1);
+ gpuTranslate3f(cosf(angle + delta_angle) * dist, sinf(angle + delta_angle) * dist, 0);
+ gpuRotateAxis(RAD2DEGF(angle + delta_angle), 'Z');
drawArrowHead(UP, 5);
break;
@@ -1794,18 +1822,18 @@ static void drawHelpline(bContext *UNUSED(C), int x, int y, void *customdata)
unsigned char col[3], col2[3];
UI_GetThemeColor3ubv(TH_GRID, col);
- glTranslate2iv(mval);
+ gpuTranslate3fv(mval);
- glLineWidth(3.0);
+ glLineWidth(3.0f);
UI_make_axis_color(col, col2, 'X');
- glColor3ubv((GLubyte *)col2);
+ immUniformColor3ubv((GLubyte *)col2);
drawArrow(RIGHT, 5, 10, 5);
drawArrow(LEFT, 5, 10, 5);
UI_make_axis_color(col, col2, 'Y');
- glColor3ubv((GLubyte *)col2);
+ immUniformColor3ubv((GLubyte *)col2);
drawArrow(UP, 5, 10, 5);
drawArrow(DOWN, 5, 10, 5);
@@ -1813,7 +1841,8 @@ static void drawHelpline(bContext *UNUSED(C), int x, int y, void *customdata)
}
}
- glPopMatrix();
+ immUnbindProgram();
+ gpuPopMatrix();
}
}
@@ -1821,7 +1850,7 @@ static void drawTransformView(const struct bContext *C, ARegion *UNUSED(ar), voi
{
TransInfo *t = arg;
- glLineWidth(1.0);
+ glLineWidth(1.0f);
drawConstraint(t);
drawPropCircle(C, t);
@@ -1841,8 +1870,9 @@ static void drawAutoKeyWarning(TransInfo *UNUSED(t), ARegion *ar)
int xco, yco;
ED_region_visible_rect(ar, &rect);
-
- BLF_width_and_height_default(printable, BLF_DRAW_STR_DUMMY_MAX, &printable_size[0], &printable_size[1]);
+
+ const int font_id = BLF_default();
+ BLF_width_and_height(font_id, printable, BLF_DRAW_STR_DUMMY_MAX, &printable_size[0], &printable_size[1]);
xco = (rect.xmax - U.widget_unit) - (int)printable_size[0];
yco = (rect.ymax - U.widget_unit);
@@ -1850,7 +1880,9 @@ static void drawAutoKeyWarning(TransInfo *UNUSED(t), ARegion *ar)
/* warning text (to clarify meaning of overlays)
* - original color was red to match the icon, but that clashes badly with a less nasty border
*/
- UI_ThemeColorShade(TH_TEXT_HI, -50);
+ unsigned char color[3];
+ UI_GetThemeColorShade3ubv(TH_TEXT_HI, -50, color);
+ BLF_color3ubv(font_id, color);
#ifdef WITH_INTERNATIONAL
BLF_draw_default(xco, yco, 0.0f, printable, BLF_DRAW_STR_DUMMY_MAX);
#else
@@ -1873,7 +1905,8 @@ static void drawTransformPixel(const struct bContext *UNUSED(C), ARegion *ar, vo
{
TransInfo *t = arg;
Scene *scene = t->scene;
- Object *ob = OBACT;
+ ViewLayer *view_layer = t->view_layer;
+ Object *ob = OBACT(view_layer);
/* draw autokeyframing hint in the corner
* - only draw if enabled (advanced users may be distracted/annoyed),
@@ -1983,6 +2016,10 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op)
View3D *v3d = t->view;
v3d->twmode = t->current_orientation;
+
+ BLI_assert(((v3d->custom_orientation_index == -1) && (t->custom_orientation == NULL)) ||
+ (BKE_workspace_transform_orientation_get_index(
+ CTX_wm_workspace(C), t->custom_orientation) == v3d->custom_orientation_index));
}
}
}
@@ -2002,15 +2039,20 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op)
}
if ((prop = RNA_struct_find_property(op->ptr, "constraint_axis"))) {
- /* constraint orientation can be global, event if user selects something else
- * so use the orientation in the constraint if set
- * */
- if (t->con.mode & CON_APPLY) {
- RNA_enum_set(op->ptr, "constraint_orientation", t->con.orientation);
- }
- else {
- RNA_enum_set(op->ptr, "constraint_orientation", t->current_orientation);
+ /* constraint orientation can be global, even if user selects something else
+ * so use the orientation in the constraint if set */
+ short orientation = (t->con.mode & CON_APPLY) ? t->con.orientation : t->current_orientation;
+
+ if (orientation == V3D_MANIP_CUSTOM) {
+ WorkSpace *workspace = CTX_wm_workspace(C);
+ const int custom_orientation_index = BKE_workspace_transform_orientation_get_index(
+ workspace, t->custom_orientation);
+
+ /* Maybe we need a t->con.custom_orientation? Seems like it would always match t->custom_orientation. */
+ orientation = V3D_MANIP_CUSTOM + custom_orientation_index;
+ BLI_assert(orientation >= V3D_MANIP_CUSTOM);
}
+ RNA_enum_set(op->ptr, "constraint_orientation", orientation);
if (t->con.mode & CON_APPLY) {
if (t->con.mode & CON_AXIS0) {
@@ -2582,7 +2624,7 @@ static void constraintTransLim(TransInfo *t, TransData *td)
if (td->con) {
const bConstraintTypeInfo *ctiLoc = BKE_constraint_typeinfo_from_type(CONSTRAINT_TYPE_LOCLIMIT);
const bConstraintTypeInfo *ctiDist = BKE_constraint_typeinfo_from_type(CONSTRAINT_TYPE_DISTLIMIT);
-
+
bConstraintOb cob = {NULL};
bConstraint *con;
float ctime = (float)(t->scene->r.cfra);
@@ -2631,7 +2673,7 @@ static void constraintTransLim(TransInfo *t, TransData *td)
}
/* get constraint targets if needed */
- BKE_constraint_targets_for_solving_get(con, &cob, &targets, ctime);
+ BKE_constraint_targets_for_solving_get(&t->eval_ctx, con, &cob, &targets, ctime);
/* do constraint */
cti->evaluate_constraint(con, &cob, &targets);
@@ -3401,7 +3443,7 @@ static void ElementResize(TransInfo *t, TransData *td, float mat[3][3])
constraintTransLim(t, td);
}
-static void applyResize(TransInfo *t, const int mval[2])
+static void applyResize(TransInfo *t, const int UNUSED(mval[2]))
{
TransData *td;
float mat[3][3];
@@ -3412,15 +3454,7 @@ static void applyResize(TransInfo *t, const int mval[2])
copy_v3_v3(t->values, t->auto_values);
}
else {
- float ratio;
-
- /* for manipulator, center handle, the scaling can't be done relative to center */
- if ((t->flag & T_USES_MANIPULATOR) && t->con.mode == 0) {
- ratio = 1.0f - ((t->mouse.imval[0] - mval[0]) + (t->mouse.imval[1] - mval[1])) / 100.0f;
- }
- else {
- ratio = t->values[0];
- }
+ float ratio = t->values[0];
copy_v3_fl(t->values, ratio);
@@ -5247,23 +5281,14 @@ static void ElementBoneSize(TransInfo *t, TransData *td, float mat[3][3])
td->loc[1] = oldy;
}
-static void applyBoneSize(TransInfo *t, const int mval[2])
+static void applyBoneSize(TransInfo *t, const int UNUSED(mval[2]))
{
TransData *td = t->data;
float size[3], mat[3][3];
- float ratio;
+ float ratio = t->values[0];
int i;
char str[UI_MAX_DRAW_STR];
-
- // TRANSFORM_FIX_ME MOVE TO MOUSE INPUT
- /* for manipulator, center handle, the scaling can't be done relative to center */
- if ((t->flag & T_USES_MANIPULATOR) && t->con.mode == 0) {
- ratio = 1.0f - ((t->mouse.imval[0] - mval[0]) + (t->mouse.imval[1] - mval[1])) / 100.0f;
- }
- else {
- ratio = t->values[0];
- }
-
+
copy_v3_fl(size, ratio);
snapGridIncrement(t, size);
@@ -6005,7 +6030,9 @@ static void calcEdgeSlide_mval_range(
continue;
/* This test is only relevant if object is not wire-drawn! See [#32068]. */
- if (use_occlude_geometry && !BMBVH_EdgeVisible(bmbvh, e_other, ar, v3d, t->obedit)) {
+ if (use_occlude_geometry &&
+ !BMBVH_EdgeVisible(bmbvh, e_other, t->depsgraph, ar, v3d, t->obedit))
+ {
continue;
}
@@ -6855,10 +6882,12 @@ static void drawEdgeSlide(TransInfo *t)
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glPushAttrib(GL_CURRENT_BIT | GL_LINE_BIT | GL_POINT_BIT);
- glPushMatrix();
+ gpuPushMatrix();
+ gpuMultMatrix(t->obedit->obmat);
- glMultMatrixf(t->obedit->obmat);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
if (sld->use_even == true) {
float co_a[3], co_b[3], co_mark[3];
@@ -6872,39 +6901,35 @@ static void drawEdgeSlide(TransInfo *t)
add_v3_v3v3(co_b, curr_sv->v_co_orig, curr_sv->dir_side[1]);
glLineWidth(line_size);
- UI_ThemeColorShadeAlpha(TH_EDGE_SELECT, 80, alpha_shade);
- glBegin(GL_LINES);
+ immUniformThemeColorShadeAlpha(TH_EDGE_SELECT, 80, alpha_shade);
+ immBeginAtMost(GWN_PRIM_LINES, 4);
if (curr_sv->v_side[0]) {
- glVertex3fv(curr_sv->v_side[0]->co);
- glVertex3fv(curr_sv->v_co_orig);
+ immVertex3fv(pos, curr_sv->v_side[0]->co);
+ immVertex3fv(pos, curr_sv->v_co_orig);
}
if (curr_sv->v_side[1]) {
- glVertex3fv(curr_sv->v_side[1]->co);
- glVertex3fv(curr_sv->v_co_orig);
+ immVertex3fv(pos, curr_sv->v_side[1]->co);
+ immVertex3fv(pos, curr_sv->v_co_orig);
}
- glEnd();
+ immEnd();
- UI_ThemeColorShadeAlpha(TH_SELECT, -30, alpha_shade);
+ immUniformThemeColorShadeAlpha(TH_SELECT, -30, alpha_shade);
glPointSize(ctrl_size);
- glBegin(GL_POINTS);
+ immBegin(GWN_PRIM_POINTS, 1);
if (sld->flipped) {
- if (curr_sv->v_side[1]) glVertex3fv(curr_sv->v_side[1]->co);
+ if (curr_sv->v_side[1]) immVertex3fv(pos, curr_sv->v_side[1]->co);
}
else {
- if (curr_sv->v_side[0]) glVertex3fv(curr_sv->v_side[0]->co);
+ if (curr_sv->v_side[0]) immVertex3fv(pos, curr_sv->v_side[0]->co);
}
- glEnd();
+ immEnd();
- UI_ThemeColorShadeAlpha(TH_SELECT, 255, alpha_shade);
+ immUniformThemeColorShadeAlpha(TH_SELECT, 255, alpha_shade);
glPointSize(guide_size);
- glBegin(GL_POINTS);
-#if 0
- interp_v3_v3v3(co_mark, co_b, co_a, fac);
- glVertex3fv(co_mark);
-#endif
+ immBegin(GWN_PRIM_POINTS, 1);
interp_line_v3_v3v3v3(co_mark, co_b, curr_sv->v_co_orig, co_a, fac);
- glVertex3fv(co_mark);
- glEnd();
+ immVertex3fv(pos, co_mark);
+ immEnd();
}
else {
if (is_clamp == false) {
@@ -6914,8 +6939,8 @@ static void drawEdgeSlide(TransInfo *t)
const int alpha_shade = -160;
glLineWidth(line_size);
- UI_ThemeColorShadeAlpha(TH_EDGE_SELECT, 80, alpha_shade);
- glBegin(GL_LINES);
+ immUniformThemeColorShadeAlpha(TH_EDGE_SELECT, 80, alpha_shade);
+ immBegin(GWN_PRIM_LINES, sld->totsv * 2);
sv = sld->sv;
for (i = 0; i < sld->totsv; i++, sv++) {
@@ -6933,18 +6958,19 @@ static void drawEdgeSlide(TransInfo *t)
add_v3_v3(a, sv->v_co_orig);
add_v3_v3(b, sv->v_co_orig);
- glVertex3fv(a);
- glVertex3fv(b);
+ immVertex3fv(pos, a);
+ immVertex3fv(pos, b);
}
- glEnd();
+ immEnd();
}
else {
BLI_assert(0);
}
}
- glPopMatrix();
- glPopAttrib();
+ immUnbindProgram();
+
+ gpuPopMatrix();
glDisable(GL_BLEND);
@@ -7468,19 +7494,22 @@ static void drawVertSlide(TransInfo *t)
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glPushAttrib(GL_CURRENT_BIT | GL_LINE_BIT | GL_POINT_BIT);
- glPushMatrix();
-
- glMultMatrixf(t->obedit->obmat);
+ gpuPushMatrix();
+ gpuMultMatrix(t->obedit->obmat);
glLineWidth(line_size);
- UI_ThemeColorShadeAlpha(TH_EDGE_SELECT, 80, alpha_shade);
- glBegin(GL_LINES);
+
+ const uint shdr_pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformThemeColorShadeAlpha(TH_EDGE_SELECT, 80, alpha_shade);
+
+ immBegin(GWN_PRIM_LINES, sld->totsv * 2);
if (is_clamp) {
sv = sld->sv;
for (i = 0; i < sld->totsv; i++, sv++) {
- glVertex3fv(sv->co_orig_3d);
- glVertex3fv(sv->co_link_orig_3d[sv->co_link_curr]);
+ immVertex3fv(shdr_pos, sv->co_orig_3d);
+ immVertex3fv(shdr_pos, sv->co_link_orig_3d[sv->co_link_curr]);
}
}
else {
@@ -7493,21 +7522,21 @@ static void drawVertSlide(TransInfo *t)
add_v3_v3(a, sv->co_orig_3d);
add_v3_v3(b, sv->co_orig_3d);
- glVertex3fv(a);
- glVertex3fv(b);
+ immVertex3fv(shdr_pos, a);
+ immVertex3fv(shdr_pos, b);
}
}
- glEnd();
+ immEnd();
glPointSize(ctrl_size);
- glBegin(GL_POINTS);
- glVertex3fv((sld->flipped && sld->use_even) ?
+ immBegin(GWN_PRIM_POINTS, 1);
+ immVertex3fv(shdr_pos, (sld->flipped && sld->use_even) ?
curr_sv->co_link_orig_3d[curr_sv->co_link_curr] :
curr_sv->co_orig_3d);
- glEnd();
+ immEnd();
- glDisable(GL_BLEND);
+ immUnbindProgram();
/* direction from active vertex! */
if ((t->mval[0] != t->mouse.imval[0]) ||
@@ -7531,19 +7560,28 @@ static void drawVertSlide(TransInfo *t)
add_v3_v3(co_dest_3d, curr_sv->co_orig_3d);
- glLineWidth(1);
- setlinestyle(1);
+ glLineWidth(1.0f);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_LINE_DASHED_UNIFORM_COLOR);
+
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2], viewport_size[3]);
+
+ immUniform1i("num_colors", 0); /* "simple" mode */
+ immUniformColor4f(1.0f, 1.0f, 1.0f, 1.0f);
+ immUniform1f("dash_width", 6.0f);
+ immUniform1f("dash_factor", 0.5f);
- cpack(0xffffff);
- glBegin(GL_LINES);
- glVertex3fv(curr_sv->co_orig_3d);
- glVertex3fv(co_dest_3d);
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex3fv(shdr_pos, curr_sv->co_orig_3d);
+ immVertex3fv(shdr_pos, co_dest_3d);
+ immEnd();
- glEnd();
+ immUnbindProgram();
}
- glPopMatrix();
- glPopAttrib();
+ gpuPopMatrix();
if (v3d && v3d->zbuf)
glEnable(GL_DEPTH_TEST);
diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h
index 06a60456cdb..b198918b698 100644
--- a/source/blender/editors/transform/transform.h
+++ b/source/blender/editors/transform/transform.h
@@ -37,10 +37,15 @@
#include "ED_numinput.h"
#include "ED_view3d.h"
+#include "RE_engine.h"
+
#include "DNA_listBase.h"
+#include "DEG_depsgraph.h"
+
/* ************************** Types ***************************** */
+struct Depsgraph;
struct TransInfo;
struct TransData;
struct TransformOrientation;
@@ -50,6 +55,7 @@ struct Object;
struct View3D;
struct ScrArea;
struct Scene;
+struct ViewLayer;
struct bConstraint;
struct wmKeyMap;
struct wmKeyConfig;
@@ -59,8 +65,11 @@ struct wmTimer;
struct ARegion;
struct ReportList;
struct EditBone;
+struct RenderEngineType;
struct SnapObjectContext;
+#include "DNA_object_enums.h"
+
/* transinfo->redraw */
typedef enum {
TREDRAW_NOTHING = 0,
@@ -446,6 +455,7 @@ typedef struct TransInfo {
short launch_event; /* event type used to launch transform */
short current_orientation;
+ TransformOrientation *custom_orientation; /* this gets used when current_orientation is V3D_MANIP_CUSTOM */
short twtype; /* backup from view3d, to restore on end */
short prop_mode;
@@ -459,11 +469,15 @@ typedef struct TransInfo {
bool remove_on_cancel; /* remove elements if operator is canceled */
+ EvaluationContext eval_ctx;
void *view;
struct bContext *context; /* Only valid (non null) during an operator called function. */
struct ScrArea *sa;
struct ARegion *ar;
+ struct Depsgraph *depsgraph;
struct Scene *scene;
+ struct ViewLayer *view_layer;
+ struct RenderEngineType *engine_type;
struct ToolSettings *settings;
struct wmTimer *animtimer;
struct wmKeyMap *keymap; /* so we can do lookups for header text */
@@ -496,8 +510,7 @@ typedef struct TransInfo {
#define T_CAMERA (1 << 4)
// trans on points, having no rotation/scale
#define T_POINTS (1 << 6)
- // for manipulator exceptions, like scaling using center point, drawing help lines
-#define T_USES_MANIPULATOR (1 << 7)
+/* empty slot - (1 << 7) */
/* restrictions flags */
#define T_ALL_RESTRICTIONS ((1 << 8)|(1 << 9)|(1 << 10))
@@ -637,8 +650,12 @@ void flushTransMasking(TransInfo *t);
void flushTransPaintCurve(TransInfo *t);
void restoreBones(TransInfo *t);
-/*********************** exported from transform_manipulator.c ********** */
-bool gimbal_axis(struct Object *ob, float gmat[3][3]); /* return 0 when no gimbal for selection */
+/*********************** transform_manipulator.c ********** */
+
+#define MANIPULATOR_AXIS_LINE_WIDTH 2.0f
+
+/* return 0 when no gimbal for selection */
+bool gimbal_axis(struct Object *ob, float gmat[3][3], const eObjectMode object_mode);
/*********************** TransData Creation and General Handling *********** */
void createTransData(struct bContext *C, TransInfo *t);
@@ -652,7 +669,7 @@ bool transdata_check_local_islands(TransInfo *t, short around);
int count_set_pose_transflags(int *out_mode, short around, struct Object *ob);
/* auto-keying stuff used by special_aftertrans_update */
-void autokeyframe_ob_cb_func(struct bContext *C, struct Scene *scene, struct View3D *v3d, struct Object *ob, int tmode);
+void autokeyframe_ob_cb_func(struct bContext *C, struct Scene *scene, struct ViewLayer *view_layer, struct View3D *v3d, struct Object *ob, int tmode);
void autokeyframe_pose_cb_func(struct bContext *C, struct Scene *scene, struct View3D *v3d, struct Object *ob, int tmode, short targetless_ik);
/*********************** Constraints *****************************/
@@ -787,7 +804,7 @@ bool createSpaceNormalTangent(float mat[3][3], const float normal[3], const floa
struct TransformOrientation *addMatrixSpace(struct bContext *C, float mat[3][3],
const char *name, const bool overwrite);
-bool applyTransformOrientation(const struct bContext *C, float mat[3][3], char r_name[64], int index);
+bool applyTransformOrientation(const struct TransformOrientation *ts, float r_mat[3][3], char r_name[64]);
#define ORIENTATION_NONE 0
#define ORIENTATION_NORMAL 1
diff --git a/source/blender/editors/transform/transform_constraints.c b/source/blender/editors/transform/transform_constraints.c
index 5621eede543..4e409e7f77f 100644
--- a/source/blender/editors/transform/transform_constraints.c
+++ b/source/blender/editors/transform/transform_constraints.c
@@ -40,9 +40,11 @@
#include "DNA_space_types.h"
#include "DNA_view3d_types.h"
-#include "BIF_gl.h"
#include "BIF_glutil.h"
+#include "GPU_immediate.h"
+#include "GPU_matrix.h"
+
#include "BLI_math.h"
#include "BLI_utildefines.h"
#include "BLI_string.h"
@@ -651,7 +653,7 @@ void setLocalConstraint(TransInfo *t, int mode, const char text[])
*/
void setUserConstraint(TransInfo *t, short orientation, int mode, const char ftext[])
{
- char text[40];
+ char text[256];
switch (orientation) {
case V3D_MANIP_GLOBAL:
@@ -683,10 +685,15 @@ void setUserConstraint(TransInfo *t, short orientation, int mode, const char fte
BLI_snprintf(text, sizeof(text), ftext, IFACE_("gimbal"));
setConstraint(t, t->spacemtx, mode, text);
break;
- default: /* V3D_MANIP_CUSTOM */
- BLI_snprintf(text, sizeof(text), ftext, t->spacename);
+ case V3D_MANIP_CUSTOM:
+ {
+ char orientation_str[128];
+ BLI_snprintf(orientation_str, sizeof(orientation_str), "%s \"%s\"",
+ IFACE_("custom orientation"), t->custom_orientation->name);
+ BLI_snprintf(text, sizeof(text), ftext, orientation_str);
setConstraint(t, t->spacemtx, mode, text);
break;
+ }
}
t->con.orientation = orientation;
@@ -704,8 +711,6 @@ void drawConstraint(TransInfo *t)
return;
if (!(tc->mode & CON_APPLY))
return;
- if (t->flag & T_USES_MANIPULATOR)
- return;
if (t->flag & T_NO_CONSTRAINT)
return;
@@ -715,7 +720,6 @@ void drawConstraint(TransInfo *t)
else {
if (tc->mode & CON_SELECT) {
float vec[3];
- char col2[3] = {255, 255, 255};
int depth_test_enabled;
convertViewVec(t, vec, (t->mval[0] - t->con.imval[0]), (t->mval[1] - t->con.imval[1]));
@@ -725,18 +729,29 @@ void drawConstraint(TransInfo *t)
drawLine(t, t->center_global, tc->mtx[1], 'Y', 0);
drawLine(t, t->center_global, tc->mtx[2], 'Z', 0);
- glColor3ubv((GLubyte *)col2);
-
depth_test_enabled = glIsEnabled(GL_DEPTH_TEST);
if (depth_test_enabled)
glDisable(GL_DEPTH_TEST);
- setlinestyle(1);
- glBegin(GL_LINES);
- glVertex3fv(t->center_global);
- glVertex3fv(vec);
- glEnd();
- setlinestyle(0);
+ const uint shdr_pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_LINE_DASHED_UNIFORM_COLOR);
+
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2], viewport_size[3]);
+
+ immUniform1i("num_colors", 0); /* "simple" mode */
+ immUniformColor4f(1.0f, 1.0f, 1.0f, 1.0f);
+ immUniform1f("dash_width", 2.0f);
+ immUniform1f("dash_factor", 0.5f);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex3fv(shdr_pos, t->center_global);
+ immVertex3fv(shdr_pos, vec);
+ immEnd();
+
+ immUnbindProgram();
if (depth_test_enabled)
glEnable(GL_DEPTH_TEST);
@@ -762,8 +777,6 @@ void drawPropCircle(const struct bContext *C, TransInfo *t)
float tmat[4][4], imat[4][4];
int depth_test_enabled;
- UI_ThemeColor(TH_GRID);
-
if (t->spacetype == SPACE_VIEW3D && rv3d != NULL) {
copy_m4_m4(tmat, rv3d->viewmat);
invert_m4_m4(imat, tmat);
@@ -773,13 +786,13 @@ void drawPropCircle(const struct bContext *C, TransInfo *t)
unit_m4(imat);
}
- glPushMatrix();
+ gpuPushMatrix();
if (t->spacetype == SPACE_VIEW3D) {
/* pass */
}
else if (t->spacetype == SPACE_IMAGE) {
- glScalef(1.0f / t->aspect[0], 1.0f / t->aspect[1], 1.0f);
+ gpuScale2f(1.0f / t->aspect[0], 1.0f / t->aspect[1]);
}
else if (ELEM(t->spacetype, SPACE_IPO, SPACE_ACTION)) {
/* only scale y */
@@ -789,21 +802,28 @@ void drawPropCircle(const struct bContext *C, TransInfo *t)
float ysize = BLI_rctf_size_y(datamask);
float xmask = BLI_rcti_size_x(mask);
float ymask = BLI_rcti_size_y(mask);
- glScalef(1.0f, (ysize / xsize) * (xmask / ymask), 1.0f);
+ gpuScale2f(1.0f, (ysize / xsize) * (xmask / ymask));
}
depth_test_enabled = glIsEnabled(GL_DEPTH_TEST);
if (depth_test_enabled)
glDisable(GL_DEPTH_TEST);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformThemeColor(TH_GRID);
+
set_inverted_drawing(1);
- drawcircball(GL_LINE_LOOP, t->center_global, t->prop_size, imat);
+ imm_drawcircball(t->center_global, t->prop_size, imat, pos);
set_inverted_drawing(0);
+ immUnbindProgram();
+
if (depth_test_enabled)
glEnable(GL_DEPTH_TEST);
- glPopMatrix();
+ gpuPopMatrix();
}
}
diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c
index 34cc143f3a9..63df39c7d6e 100644
--- a/source/blender/editors/transform/transform_conversions.c
+++ b/source/blender/editors/transform/transform_conversions.c
@@ -68,10 +68,10 @@
#include "BKE_context.h"
#include "BKE_crazyspace.h"
#include "BKE_curve.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
#include "BKE_global.h"
#include "BKE_gpencil.h"
+#include "BKE_layer.h"
#include "BKE_key.h"
#include "BKE_main.h"
#include "BKE_mesh.h"
@@ -118,6 +118,8 @@
#include "RNA_access.h"
#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+#include "DEG_depsgraph_query.h"
#include "transform.h"
#include "bmesh.h"
@@ -285,13 +287,13 @@ static void set_prop_dist(TransInfo *t, const bool with_dist)
static void createTransTexspace(TransInfo *t)
{
- Scene *scene = t->scene;
+ ViewLayer *view_layer = t->view_layer;
TransData *td;
Object *ob;
ID *id;
short *texflag;
- ob = OBACT;
+ ob = OBACT(view_layer);
if (ob == NULL) { // Shouldn't logically happen, but still...
t->total = 0;
@@ -836,14 +838,9 @@ void transform_autoik_update(TransInfo *t, short mode)
changed |= pchan_autoik_adjust(pchan, *chainlen);
}
-#ifdef WITH_LEGACY_DEPSGRAPH
- if (!DEG_depsgraph_use_legacy())
-#endif
- {
- if (changed) {
- /* TODO(sergey): Consider doing partial update only. */
- DAG_relations_tag_update(G.main);
- }
+ if (changed) {
+ /* TODO(sergey): Consider doing partial update only. */
+ DEG_relations_tag_update(G.main);
}
}
@@ -853,9 +850,7 @@ static void pose_grab_with_ik_clear(Object *ob)
bKinematicConstraint *data;
bPoseChannel *pchan;
bConstraint *con, *next;
-#ifdef WITH_LEGACY_DEPSGRAPH
- bool need_dependency_update = false;
-#endif
+ bool relations_changed = false;
for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) {
/* clear all temporary lock flags */
@@ -869,10 +864,9 @@ static void pose_grab_with_ik_clear(Object *ob)
if (con->type == CONSTRAINT_TYPE_KINEMATIC) {
data = con->data;
if (data->flag & CONSTRAINT_IK_TEMP) {
+ relations_changed = true;
+
/* iTaSC needs clear for removed constraints */
-#ifdef WITH_LEGACY_DEPSGRAPH
- need_dependency_update = true;
-#endif
BIK_clear_data(ob->pose);
BLI_remlink(&pchan->constraints, con);
@@ -887,12 +881,9 @@ static void pose_grab_with_ik_clear(Object *ob)
}
}
-#ifdef WITH_LEGACY_DEPSGRAPH
- if (!DEG_depsgraph_use_legacy() && need_dependency_update)
-#endif
- {
+ if (relations_changed) {
/* TODO(sergey): Consider doing partial update only. */
- DAG_relations_tag_update(G.main);
+ DEG_relations_tag_update(G.main);
}
}
@@ -1007,7 +998,7 @@ static short pose_grab_with_ik(Object *ob)
Bone *bonec;
short tot_ik = 0;
- if ((ob == NULL) || (ob->pose == NULL) || (ob->mode & OB_MODE_POSE) == 0)
+ if ((ob == NULL) || (ob->pose == NULL))
return 0;
arm = ob->data;
@@ -1046,13 +1037,8 @@ static short pose_grab_with_ik(Object *ob)
/* iTaSC needs clear for new IK constraints */
if (tot_ik) {
BIK_clear_data(ob->pose);
-#ifdef WITH_LEGACY_DEPSGRAPH
- if (!DEG_depsgraph_use_legacy())
-#endif
- {
- /* TODO(sergey): Consuder doing partial update only. */
- DAG_relations_tag_update(G.main);
- }
+ /* TODO(sergey): Consuder doing partial update only. */
+ DEG_relations_tag_update(G.main);
}
return (tot_ik) ? 1 : 0;
@@ -1907,7 +1893,7 @@ static void createTransParticleVerts(bContext *C, TransInfo *t)
TransDataExtension *tx;
Object *ob = CTX_data_active_object(C);
ParticleEditSettings *pset = PE_settings(t->scene);
- PTCacheEdit *edit = PE_get_current(t->scene, ob);
+ PTCacheEdit *edit = PE_get_current(t->scene, t->view_layer, ob);
ParticleSystem *psys = NULL;
ParticleSystemModifierData *psmd = NULL;
PTCacheEditPoint *point;
@@ -2022,8 +2008,9 @@ static void createTransParticleVerts(bContext *C, TransInfo *t)
void flushTransParticles(TransInfo *t)
{
Scene *scene = t->scene;
- Object *ob = OBACT;
- PTCacheEdit *edit = PE_get_current(scene, ob);
+ ViewLayer *view_layer = t->view_layer;
+ Object *ob = OBACT(view_layer);
+ PTCacheEdit *edit = PE_get_current(scene, view_layer, ob);
ParticleSystem *psys = edit->psys;
ParticleSystemModifierData *psmd = NULL;
PTCacheEditPoint *point;
@@ -2062,7 +2049,7 @@ void flushTransParticles(TransInfo *t)
point->flag |= PEP_EDIT_RECALC;
}
- PE_update_object(scene, OBACT, 1);
+ PE_update_object(&t->eval_ctx, scene, view_layer, OBACT(view_layer), 1);
}
/* ********************* mesh ****************** */
@@ -2572,10 +2559,10 @@ static void createTransEditVerts(TransInfo *t)
/* detect CrazySpace [tm] */
if (modifiers_getCageIndex(t->scene, t->obedit, NULL, 1) != -1) {
int totleft = -1;
- if (modifiers_isCorrectableDeformed(t->scene, t->obedit)) {
+ if (modifiers_isCorrectableDeformed(&t->eval_ctx, t->scene, t->obedit)) {
/* check if we can use deform matrices for modifier from the
* start up to stack, they are more accurate than quats */
- totleft = BKE_crazyspace_get_first_deform_matrices_editbmesh(t->scene, t->obedit, em, &defmats, &defcos);
+ totleft = BKE_crazyspace_get_first_deform_matrices_editbmesh(&t->eval_ctx, t->scene, t->obedit, em, &defmats, &defcos);
}
/* if we still have more modifiers, also do crazyspace
@@ -2588,7 +2575,7 @@ static void createTransEditVerts(TransInfo *t)
if (totleft > 0)
#endif
{
- mappedcos = BKE_crazyspace_get_mapped_editverts(t->scene, t->obedit);
+ mappedcos = BKE_crazyspace_get_mapped_editverts(&t->eval_ctx, t->scene, t->obedit);
quats = MEM_mallocN(em->bm->totvert * sizeof(*quats), "crazy quats");
BKE_crazyspace_set_quats_editmesh(em, defcos, mappedcos, quats, !prop_mode);
if (mappedcos)
@@ -2957,7 +2944,6 @@ static void createTransUVs(bContext *C, TransInfo *t)
const bool is_prop_connected = (t->flag & T_PROP_CONNECTED) != 0;
const bool is_island_center = (t->around == V3D_AROUND_LOCAL_ORIGINS);
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
- const int cd_poly_tex_offset = CustomData_get_offset(&em->bm->pdata, CD_MTEXPOLY);
if (!ED_space_image_show_uvedit(sima, t->obedit))
return;
@@ -2981,10 +2967,9 @@ static void createTransUVs(bContext *C, TransInfo *t)
}
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
- MTexPoly *tf = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
BMLoop *l;
- if (!uvedit_face_visible_test(scene, ima, efa, tf)) {
+ if (!uvedit_face_visible_test(scene, ima, efa)) {
BM_elem_flag_disable(efa, BM_ELEM_TAG);
continue;
}
@@ -5463,11 +5448,11 @@ static void ObjectToTransData(TransInfo *t, TransData *td, Object *ob)
if (skip_invert == false && constinv == false) {
ob->transflag |= OB_NO_CONSTRAINTS; /* BKE_object_where_is_calc_time checks this */
- BKE_object_where_is_calc(t->scene, ob);
+ BKE_object_where_is_calc(&t->eval_ctx, t->scene, ob);
ob->transflag &= ~OB_NO_CONSTRAINTS;
}
else
- BKE_object_where_is_calc(t->scene, ob);
+ BKE_object_where_is_calc(&t->eval_ctx, t->scene, ob);
td->ob = ob;
@@ -5534,84 +5519,97 @@ static void ObjectToTransData(TransInfo *t, TransData *td, Object *ob)
}
}
+static void trans_object_base_deps_flag_prepare(ViewLayer *view_layer)
+{
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ base->object->id.tag &= ~LIB_TAG_DOIT;
+ }
+}
+
+static void set_trans_object_base_deps_flag_cb(ID *id, void *UNUSED(user_data))
+{
+ /* Here we only handle object IDs. */
+ if (GS(id->name) != ID_OB) {
+ return;
+ }
+ id->tag |= LIB_TAG_DOIT;
+}
+
+static void flush_trans_object_base_deps_flag(Depsgraph *depsgraph, Object *object)
+{
+ object->id.tag |= LIB_TAG_DOIT;
+ DEG_foreach_dependent_ID(depsgraph, &object->id,
+ set_trans_object_base_deps_flag_cb, NULL);
+}
+
+static void trans_object_base_deps_flag_finish(ViewLayer *view_layer)
+{
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ if (base->object->id.tag & LIB_TAG_DOIT) {
+ base->flag_legacy |= BA_SNAP_FIX_DEPS_FIASCO;
+ }
+ }
+}
/* sets flags in Bases to define whether they take part in transform */
/* it deselects Bases, so we have to call the clear function always after */
static void set_trans_object_base_flags(TransInfo *t)
{
+ /* TODO(sergey): Get rid of global, use explicit main. */
+ Main *bmain = G.main;
+ ViewLayer *view_layer = t->view_layer;
Scene *scene = t->scene;
- View3D *v3d = t->view;
-
- /*
- * if Base selected and has parent selected:
- * base->flag = BA_WAS_SEL
+ Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true);
+ /* NOTE: if Base selected and has parent selected:
+ * base->flag_legacy = BA_WAS_SEL
*/
- Base *base;
-
- /* don't do it if we're not actually going to recalculate anything */
- if (t->mode == TFM_DUMMY)
+ /* Don't do it if we're not actually going to recalculate anything. */
+ if (t->mode == TFM_DUMMY) {
return;
-
- /* makes sure base flags and object flags are identical */
- BKE_scene_base_flag_to_objects(t->scene);
-
- /* Make sure depsgraph is here. */
- DAG_scene_relations_update(G.main, t->scene);
-
- /* handle pending update events, otherwise they got copied below */
- for (base = scene->base.first; base; base = base->next) {
- if (base->object->recalc & OB_RECALC_ALL) {
- /* TODO(sergey): Ideally, it's not needed. */
- BKE_object_handle_update(G.main->eval_ctx, t->scene, base->object);
- }
}
-
- for (base = scene->base.first; base; base = base->next) {
- base->flag &= ~BA_WAS_SEL;
-
- if (TESTBASELIB_BGMODE(v3d, scene, base)) {
+ /* Makes sure base flags and object flags are identical. */
+ BKE_scene_base_flag_to_objects(t->view_layer);
+ /* Make sure depsgraph is here. */
+ DEG_graph_relations_update(depsgraph, bmain, scene, view_layer);
+ /* Clear all flags we need. It will be used to detect dependencies. */
+ trans_object_base_deps_flag_prepare(view_layer);
+ /* Traverse all bases and set all possible flags. */
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ base->flag_legacy &= ~BA_WAS_SEL;
+ if (TESTBASELIB_BGMODE(base)) {
Object *ob = base->object;
Object *parsel = ob->parent;
-
- /* if parent selected, deselect */
- while (parsel) {
- if (parsel->flag & SELECT) {
- Base *parbase = BKE_scene_base_find(scene, parsel);
- if (parbase) { /* in rare cases this can fail */
- if (TESTBASELIB_BGMODE(v3d, scene, parbase)) {
+ /* If parent selected, deselect. */
+ while (parsel != NULL) {
+ if (parsel->base_flag & BASE_SELECTED) {
+ Base *parbase = BKE_view_layer_base_find(view_layer, parsel);
+ if (parbase != NULL) { /* in rare cases this can fail */
+ if (TESTBASELIB_BGMODE(parbase)) {
break;
}
}
}
parsel = parsel->parent;
}
-
- if (parsel) {
- /* rotation around local centers are allowed to propagate */
+ if (parsel != NULL) {
+ /* Rotation around local centers are allowed to propagate. */
if ((t->around == V3D_AROUND_LOCAL_ORIGINS) &&
(t->mode == TFM_ROTATION || t->mode == TFM_TRACKBALL))
{
- base->flag |= BA_TRANSFORM_CHILD;
+ base->flag_legacy |= BA_TRANSFORM_CHILD;
}
else {
- base->flag &= ~SELECT;
- base->flag |= BA_WAS_SEL;
+ base->flag &= ~BASE_SELECTED;
+ base->flag_legacy |= BA_WAS_SEL;
}
}
- DAG_id_tag_update(&ob->id, OB_RECALC_OB);
- }
- }
-
- /* all recalc flags get flushed to all layers, so a layer flip later on works fine */
- DAG_scene_flush_update(G.main, t->scene, -1, 0);
-
- /* and we store them temporal in base (only used for transform code) */
- /* this because after doing updates, the object->recalc is cleared */
- for (base = scene->base.first; base; base = base->next) {
- if (base->object->recalc & (OB_RECALC_OB | OB_RECALC_DATA)) {
- base->flag |= BA_SNAP_FIX_DEPS_FIASCO;
+ flush_trans_object_base_deps_flag(depsgraph, ob);
}
}
+ /* Store temporary bits in base indicating that base is being modified
+ * (directly or indirectly) by transforming objects.
+ */
+ trans_object_base_deps_flag_finish(view_layer);
}
static bool mark_children(Object *ob)
@@ -5632,78 +5630,69 @@ static bool mark_children(Object *ob)
static int count_proportional_objects(TransInfo *t)
{
int total = 0;
+ ViewLayer *view_layer = t->view_layer;
Scene *scene = t->scene;
- View3D *v3d = t->view;
- Base *base;
-
- /* rotations around local centers are allowed to propagate, so we take all objects */
+ Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true);
+ /* Clear all flags we need. It will be used to detect dependencies. */
+ trans_object_base_deps_flag_prepare(view_layer);
+ /* Rotations around local centers are allowed to propagate, so we take all objects. */
if (!((t->around == V3D_AROUND_LOCAL_ORIGINS) &&
(t->mode == TFM_ROTATION || t->mode == TFM_TRACKBALL)))
{
- /* mark all parents */
- for (base = scene->base.first; base; base = base->next) {
- if (TESTBASELIB_BGMODE(v3d, scene, base)) {
+ /* Mark all parents. */
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ if (TESTBASELIB_BGMODE(base)) {
Object *parent = base->object->parent;
-
/* flag all parents */
- while (parent) {
+ while (parent != NULL) {
parent->flag |= BA_TRANSFORM_PARENT;
parent = parent->parent;
}
}
}
-
- /* mark all children */
- for (base = scene->base.first; base; base = base->next) {
+ /* Mark all children. */
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
/* all base not already selected or marked that is editable */
- if ((base->object->flag & (SELECT | BA_TRANSFORM_CHILD | BA_TRANSFORM_PARENT)) == 0 &&
- (BASE_EDITABLE_BGMODE(v3d, scene, base)))
+ if ((base->object->flag & (BA_TRANSFORM_CHILD | BA_TRANSFORM_PARENT)) == 0 &&
+ (base->flag & BASE_SELECTED) == 0 &&
+ (BASE_EDITABLE_BGMODE(base)))
{
mark_children(base->object);
}
}
}
-
- for (base = scene->base.first; base; base = base->next) {
+ /* Flush changed flags to all dependencies. */
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
Object *ob = base->object;
-
- /* if base is not selected, not a parent of selection or not a child of selection and it is editable */
- if ((ob->flag & (SELECT | BA_TRANSFORM_CHILD | BA_TRANSFORM_PARENT)) == 0 &&
- (BASE_EDITABLE_BGMODE(v3d, scene, base)))
+ /* If base is not selected, not a parent of selection or not a child of
+ * selection and it is editable.
+ */
+ if ((ob->flag & (BA_TRANSFORM_CHILD | BA_TRANSFORM_PARENT)) == 0 &&
+ (base->flag & BASE_SELECTED) == 0 &&
+ (BASE_EDITABLE_BGMODE(base)))
{
-
- DAG_id_tag_update(&ob->id, OB_RECALC_OB);
-
+ flush_trans_object_base_deps_flag(depsgraph, ob);
total += 1;
}
}
-
-
- /* all recalc flags get flushed to all layers, so a layer flip later on works fine */
- DAG_scene_relations_update(G.main, t->scene);
- DAG_scene_flush_update(G.main, t->scene, -1, 0);
-
- /* and we store them temporal in base (only used for transform code) */
- /* this because after doing updates, the object->recalc is cleared */
- for (base = scene->base.first; base; base = base->next) {
- if (base->object->recalc & (OB_RECALC_OB | OB_RECALC_DATA)) {
- base->flag |= BA_SNAP_FIX_DEPS_FIASCO;
- }
- }
-
+ /* Store temporary bits in base indicating that base is being modified
+ * (directly or indirectly) by transforming objects.
+ */
+ trans_object_base_deps_flag_finish(view_layer);
return total;
}
static void clear_trans_object_base_flags(TransInfo *t)
{
- Scene *sce = t->scene;
+ ViewLayer *view_layer = t->view_layer;
Base *base;
- for (base = sce->base.first; base; base = base->next) {
- if (base->flag & BA_WAS_SEL)
- base->flag |= SELECT;
+ for (base = view_layer->object_bases.first; base; base = base->next) {
+ if (base->flag_legacy & BA_WAS_SEL) {
+ base->flag |= BASE_SELECTED;
+ }
- base->flag &= ~(BA_WAS_SEL | BA_SNAP_FIX_DEPS_FIASCO | BA_TEMP_TAG | BA_TRANSFORM_CHILD | BA_TRANSFORM_PARENT);
+ base->flag_legacy &= ~(BA_WAS_SEL | BA_SNAP_FIX_DEPS_FIASCO | BA_TEMP_TAG | BA_TRANSFORM_CHILD | BA_TRANSFORM_PARENT);
}
}
@@ -5711,7 +5700,7 @@ static void clear_trans_object_base_flags(TransInfo *t)
* tmode: should be a transform mode
*/
// NOTE: context may not always be available, so must check before using it as it's a luxury for a few cases
-void autokeyframe_ob_cb_func(bContext *C, Scene *scene, View3D *v3d, Object *ob, int tmode)
+void autokeyframe_ob_cb_func(bContext *C, Scene *scene, ViewLayer *view_layer, View3D *v3d, Object *ob, int tmode)
{
ID *id = &ob->id;
FCurve *fcu;
@@ -5760,7 +5749,7 @@ void autokeyframe_ob_cb_func(bContext *C, Scene *scene, View3D *v3d, Object *ob,
}
else if (ELEM(tmode, TFM_ROTATION, TFM_TRACKBALL)) {
if (v3d->around == V3D_AROUND_ACTIVE) {
- if (ob != OBACT)
+ if (ob != OBACT(view_layer))
do_loc = true;
}
else if (v3d->around == V3D_AROUND_CURSOR)
@@ -5771,7 +5760,7 @@ void autokeyframe_ob_cb_func(bContext *C, Scene *scene, View3D *v3d, Object *ob,
}
else if (tmode == TFM_RESIZE) {
if (v3d->around == V3D_AROUND_ACTIVE) {
- if (ob != OBACT)
+ if (ob != OBACT(view_layer))
do_loc = true;
}
else if (v3d->around == V3D_AROUND_CURSOR)
@@ -5949,7 +5938,7 @@ void autokeyframe_pose_cb_func(bContext *C, Scene *scene, View3D *v3d, Object *o
*/
if (C && (ob->pose->avs.path_bakeflag & MOTIONPATH_BAKE_HAS_PATHS)) {
//ED_pose_clear_paths(C, ob); // XXX for now, don't need to clear
- ED_pose_recalculate_paths(scene, ob);
+ ED_pose_recalculate_paths(C, scene, ob);
}
}
else {
@@ -6108,7 +6097,7 @@ void special_aftertrans_update(bContext *C, TransInfo *t)
// short redrawipo=0, resetslowpar=1;
const bool canceled = (t->state == TRANS_CANCEL);
const bool duplicate = (t->mode == TFM_TIME_DUPLICATE);
-
+
/* early out when nothing happened */
if (t->total == 0 || t->mode == TFM_DUMMY)
return;
@@ -6259,9 +6248,9 @@ void special_aftertrans_update(bContext *C, TransInfo *t)
// fixme... some of this stuff is not good
if (ob) {
if (ob->pose || BKE_key_from_object(ob))
- DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
else
- DAG_id_tag_update(&ob->id, OB_RECALC_OB);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB);
}
/* 3 cases here for curve cleanups:
@@ -6447,7 +6436,7 @@ void special_aftertrans_update(bContext *C, TransInfo *t)
* we need to update the pose otherwise no updates get called during
* transform and the auto-ik is not applied. see [#26164] */
struct Object *pose_ob = t->poseobj;
- BKE_pose_where_is(t->scene, pose_ob);
+ BKE_pose_where_is(&t->eval_ctx, t->scene, pose_ob);
}
/* set BONE_TRANSFORM flags for autokey, manipulator draw might have changed them */
@@ -6471,24 +6460,28 @@ void special_aftertrans_update(bContext *C, TransInfo *t)
/* automatic inserting of keys and unkeyed tagging - only if transform wasn't canceled (or TFM_DUMMY) */
if (!canceled && (t->mode != TFM_DUMMY)) {
autokeyframe_pose_cb_func(C, t->scene, (View3D *)t->view, ob, t->mode, targetless_ik);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
}
else if (arm->flag & ARM_DELAYDEFORM) {
- /* old optimize trick... this enforces to bypass the depgraph */
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
- ob->recalc = 0; // is set on OK position already by recalcData()
+ /* TODO(sergey): Armature is already updated by recalcData(), so we
+ * might save some time by skipping re-evaluating it. But this isn't
+ * possible yet within new dependency graph, and also other contexts
+ * might need to update their CoW copies.
+ */
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ }
+ else {
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
}
- else
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
}
else if (t->options & CTX_PAINT_CURVE) {
/* pass */
}
- else if ((t->scene->basact) &&
- (ob = t->scene->basact->object) &&
- (ob->mode & OB_MODE_PARTICLE_EDIT) &&
- PE_get_current(t->scene, ob))
+ else if ((t->view_layer->basact) &&
+ (ob = t->view_layer->basact->object) &&
+ (t->eval_ctx.object_mode & OB_MODE_PARTICLE_EDIT) &&
+ PE_get_current(t->scene, t->view_layer, ob))
{
/* do nothing */
}
@@ -6519,17 +6512,17 @@ void special_aftertrans_update(bContext *C, TransInfo *t)
/* pointcache refresh */
if (BKE_ptcache_object_reset(t->scene, ob, PTCACHE_RESET_OUTDATED))
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
/* Needed for proper updating of "quick cached" dynamics. */
/* Creates troubles for moving animated objects without */
/* autokey though, probably needed is an anim sys override? */
/* Please remove if some other solution is found. -jahka */
- DAG_id_tag_update(&ob->id, OB_RECALC_OB);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB);
/* Set autokey if necessary */
if (!canceled) {
- autokeyframe_ob_cb_func(C, t->scene, (View3D *)t->view, ob, t->mode);
+ autokeyframe_ob_cb_func(C, t->scene, t->view_layer, (View3D *)t->view, ob, t->mode);
}
/* restore rigid body transform */
@@ -6564,8 +6557,6 @@ int special_transform_moving(TransInfo *t)
static void createTransObject(bContext *C, TransInfo *t)
{
- Scene *scene = t->scene;
-
TransData *td = NULL;
TransDataExtension *tx;
const bool is_prop_edit = (t->flag & T_PROP_EDIT) != 0;
@@ -6615,15 +6606,16 @@ static void createTransObject(bContext *C, TransInfo *t)
CTX_DATA_END;
if (is_prop_edit) {
- View3D *v3d = t->view;
+ ViewLayer *view_layer = t->view_layer;
Base *base;
- for (base = scene->base.first; base; base = base->next) {
+ for (base = view_layer->object_bases.first; base; base = base->next) {
Object *ob = base->object;
/* if base is not selected, not a parent of selection or not a child of selection and it is editable */
- if ((ob->flag & (SELECT | BA_TRANSFORM_CHILD | BA_TRANSFORM_PARENT)) == 0 &&
- BASE_EDITABLE_BGMODE(v3d, scene, base))
+ if ((ob->flag & (BA_TRANSFORM_CHILD | BA_TRANSFORM_PARENT)) == 0 &&
+ (base->flag & BASE_SELECTED) == 0 &&
+ BASE_EDITABLE_BGMODE(base))
{
td->protectflag = ob->protectflag;
td->ext = tx;
@@ -8070,7 +8062,8 @@ static void createTransGPencil(bContext *C, TransInfo *t)
void createTransData(bContext *C, TransInfo *t)
{
Scene *scene = t->scene;
- Object *ob = OBACT;
+ ViewLayer *view_layer = t->view_layer;
+ Object *ob = OBACT(view_layer);
/* if tests must match recalcData for correct updates */
if (t->options & CTX_TEXTURE) {
@@ -8225,27 +8218,28 @@ void createTransData(bContext *C, TransInfo *t)
t->poseobj = ob; /* <- tsk tsk, this is going to give issues one day */
}
}
- else if (ob && (ob->mode & OB_MODE_POSE)) {
+ else if (ob && (t->eval_ctx.object_mode & OB_MODE_POSE)) {
// XXX this is currently limited to active armature only...
// XXX active-layer checking isn't done as that should probably be checked through context instead
createTransPose(t, ob);
}
- else if (ob && (ob->mode & OB_MODE_WEIGHT_PAINT) && !(t->options & CTX_PAINT_CURVE)) {
+ else if (ob && (t->eval_ctx.object_mode & OB_MODE_WEIGHT_PAINT) && !(t->options & CTX_PAINT_CURVE)) {
/* important that ob_armature can be set even when its not selected [#23412]
* lines below just check is also visible */
Object *ob_armature = modifiers_isDeformedByArmature(ob);
- if (ob_armature && ob_armature->mode & OB_MODE_POSE) {
- Base *base_arm = BKE_scene_base_find(t->scene, ob_armature);
+ if (ob_armature) {
+// const bArmature *arm = ob_armature->data;
+ Base *base_arm = BKE_view_layer_base_find(t->view_layer, ob_armature);
if (base_arm) {
- View3D *v3d = t->view;
- if (BASE_VISIBLE(v3d, base_arm)) {
+ if (BASE_VISIBLE(base_arm)) {
createTransPose(t, ob_armature);
}
}
-
}
}
- else if (ob && (ob->mode & OB_MODE_PARTICLE_EDIT) && PE_start_edit(PE_get_current(scene, ob))) {
+ else if (ob && (t->eval_ctx.object_mode & OB_MODE_PARTICLE_EDIT) &&
+ PE_start_edit(PE_get_current(scene, view_layer, ob)))
+ {
createTransParticleVerts(C, t);
t->flag |= T_POINTS;
@@ -8255,7 +8249,7 @@ void createTransData(bContext *C, TransInfo *t)
sort_trans_data_dist(t);
}
}
- else if (ob && (ob->mode & OB_MODE_ALL_PAINT)) {
+ else if (ob && (t->eval_ctx.object_mode & OB_MODE_ALL_PAINT)) {
if ((t->options & CTX_PAINT_CURVE) && !ELEM(t->mode, TFM_SHEAR, TFM_SHRINKFATTEN)) {
t->flag |= T_POINTS | T_2D_EDIT;
createTransPaintCurveVerts(C, t);
@@ -8277,7 +8271,7 @@ void createTransData(bContext *C, TransInfo *t)
RegionView3D *rv3d = t->ar->regiondata;
if ((rv3d->persp == RV3D_CAMOB) && v3d->camera) {
/* we could have a flag to easily check an object is being transformed */
- if (v3d->camera->recalc) {
+ if (v3d->camera->id.tag & LIB_TAG_DOIT) {
t->flag |= T_CAMERA;
}
}
diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c
index 277e01d1e2b..fdf5665b6d4 100644
--- a/source/blender/editors/transform/transform_generics.c
+++ b/source/blender/editors/transform/transform_generics.c
@@ -62,8 +62,8 @@
#include "RNA_access.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
+#include "GPU_immediate.h"
+#include "GPU_matrix.h"
#include "BIK_api.h"
@@ -71,7 +71,6 @@
#include "BKE_action.h"
#include "BKE_armature.h"
#include "BKE_curve.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
#include "BKE_lattice.h"
#include "BKE_library.h"
@@ -82,6 +81,9 @@
#include "BKE_editmesh.h"
#include "BKE_tracking.h"
#include "BKE_mask.h"
+#include "BKE_workspace.h"
+
+#include "DEG_depsgraph.h"
#include "ED_anim_api.h"
#include "ED_armature.h"
@@ -102,6 +104,8 @@
#include "WM_types.h"
#include "WM_api.h"
+#include "RE_engine.h"
+
#include "UI_resources.h"
#include "UI_view2d.h"
@@ -314,7 +318,7 @@ static bool fcu_test_selected(FCurve *fcu)
/* helper for recalcData() - for Action Editor transforms */
static void recalcData_actedit(TransInfo *t)
{
- Scene *scene = t->scene;
+ ViewLayer *view_layer = t->view_layer;
SpaceAction *saction = (SpaceAction *)t->sa->spacedata.first;
bAnimContext ac = {NULL};
@@ -325,7 +329,8 @@ static void recalcData_actedit(TransInfo *t)
/* initialize relevant anim-context 'context' data from TransInfo data */
/* NOTE: sync this with the code in ANIM_animdata_get_context() */
ac.scene = t->scene;
- ac.obact = OBACT;
+ ac.view_layer = t->view_layer;
+ ac.obact = OBACT(view_layer);
ac.sa = t->sa;
ac.ar = t->ar;
ac.sl = (t->sa) ? t->sa->spacedata.first : NULL;
@@ -362,7 +367,7 @@ static void recalcData_actedit(TransInfo *t)
static void recalcData_graphedit(TransInfo *t)
{
SpaceIpo *sipo = (SpaceIpo *)t->sa->spacedata.first;
- Scene *scene;
+ ViewLayer *view_layer = t->view_layer;
ListBase anim_data = {NULL, NULL};
bAnimContext ac = {NULL};
@@ -373,8 +378,9 @@ static void recalcData_graphedit(TransInfo *t)
/* initialize relevant anim-context 'context' data from TransInfo data */
/* NOTE: sync this with the code in ANIM_animdata_get_context() */
- scene = ac.scene = t->scene;
- ac.obact = OBACT;
+ ac.scene = t->scene;
+ ac.view_layer = t->view_layer;
+ ac.obact = OBACT(view_layer);
ac.sa = t->sa;
ac.ar = t->ar;
ac.sl = (t->sa) ? t->sa->spacedata.first : NULL;
@@ -636,7 +642,7 @@ static void recalcData_mask_common(TransInfo *t)
flushTransMasking(t);
- DAG_id_tag_update(&mask->id, 0);
+ DEG_id_tag_update(&mask->id, 0);
}
/* helper for recalcData() - for Image Editor transforms */
@@ -655,7 +661,7 @@ static void recalcData_image(TransInfo *t)
if (sima->flag & SI_LIVE_UNWRAP)
ED_uvedit_live_unwrap_re_solve();
- DAG_id_tag_update(t->obedit->data, 0);
+ DEG_id_tag_update(t->obedit->data, 0);
}
}
@@ -698,7 +704,7 @@ static void recalcData_spaceclip(TransInfo *t)
track = track->next;
}
- DAG_id_tag_update(&clip->id, 0);
+ DEG_id_tag_update(&clip->id, 0);
}
else if (t->options & CTX_MASK) {
recalcData_mask_common(t);
@@ -708,7 +714,7 @@ static void recalcData_spaceclip(TransInfo *t)
/* helper for recalcData() - for object transforms, typically in the 3D view */
static void recalcData_objects(TransInfo *t)
{
- Base *base = t->scene->basact;
+ Base *base = t->view_layer->basact;
if (t->obedit) {
if (ELEM(t->obedit->type, OB_CURVE, OB_SURF)) {
@@ -721,7 +727,7 @@ static void recalcData_objects(TransInfo *t)
applyProject(t);
}
- DAG_id_tag_update(t->obedit->data, 0); /* sets recalc flags */
+ DEG_id_tag_update(t->obedit->data, 0); /* sets recalc flags */
if (t->state == TRANS_CANCEL) {
while (nu) {
@@ -745,7 +751,7 @@ static void recalcData_objects(TransInfo *t)
applyProject(t);
}
- DAG_id_tag_update(t->obedit->data, 0); /* sets recalc flags */
+ DEG_id_tag_update(t->obedit->data, 0); /* sets recalc flags */
if (la->editlatt->latt->flag & LT_OUTSIDE) outside_lattice(la->editlatt->latt);
}
@@ -767,7 +773,7 @@ static void recalcData_objects(TransInfo *t)
projectVertSlideData(t, false);
}
- DAG_id_tag_update(t->obedit->data, 0); /* sets recalc flags */
+ DEG_id_tag_update(t->obedit->data, 0); /* sets recalc flags */
EDBM_mesh_normals_update(em);
BKE_editmesh_tessface_calc(em);
@@ -865,7 +871,7 @@ static void recalcData_objects(TransInfo *t)
if (t->state != TRANS_CANCEL) {
applyProject(t);
}
- DAG_id_tag_update(t->obedit->data, 0); /* sets recalc flags */
+ DEG_id_tag_update(t->obedit->data, 0); /* sets recalc flags */
}
}
else if ((t->flag & T_POSE) && t->poseobj) {
@@ -888,14 +894,16 @@ static void recalcData_objects(TransInfo *t)
/* old optimize trick... this enforces to bypass the depgraph */
if (!(arm->flag & ARM_DELAYDEFORM)) {
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA); /* sets recalc flags */
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA); /* sets recalc flags */
/* transformation of pose may affect IK tree, make sure it is rebuilt */
BIK_clear_data(ob->pose);
}
else
- BKE_pose_where_is(t->scene, ob);
+ BKE_pose_where_is(&t->eval_ctx, t->scene, ob);
}
- else if (base && (base->object->mode & OB_MODE_PARTICLE_EDIT) && PE_get_current(t->scene, base->object)) {
+ else if (base && (t->eval_ctx.object_mode & OB_MODE_PARTICLE_EDIT) &&
+ PE_get_current(t->scene, t->view_layer, base->object))
+ {
if (t->state != TRANS_CANCEL) {
applyProject(t);
}
@@ -925,16 +933,16 @@ static void recalcData_objects(TransInfo *t)
// TODO: autokeyframe calls need some setting to specify to add samples (FPoints) instead of keyframes?
if ((t->animtimer) && IS_AUTOKEY_ON(t->scene)) {
animrecord_check_state(t->scene, &ob->id, t->animtimer);
- autokeyframe_ob_cb_func(t->context, t->scene, (View3D *)t->view, ob, t->mode);
+ autokeyframe_ob_cb_func(t->context, t->scene, t->view_layer, (View3D *)t->view, ob, t->mode);
}
/* sets recalc flags fully, instead of flushing existing ones
* otherwise proxies don't function correctly
*/
- DAG_id_tag_update(&ob->id, OB_RECALC_OB);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB);
if (t->flag & T_TEXTURE)
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
}
}
}
@@ -1031,11 +1039,10 @@ void drawLine(TransInfo *t, const float center[3], const float dir[3], char axis
if (t->spacetype == SPACE_VIEW3D) {
View3D *v3d = t->view;
- glPushMatrix();
-
- //if (t->obedit) glLoadMatrixf(t->obedit->obmat); // sets opengl viewing
-
-
+ gpuPushMatrix();
+
+ // if (t->obedit) gpuLoadMatrix(t->obedit->obmat); // sets opengl viewing
+
copy_v3_v3(v3, dir);
mul_v3_fl(v3, v3d->far);
@@ -1049,15 +1056,20 @@ void drawLine(TransInfo *t, const float center[3], const float dir[3], char axis
UI_GetThemeColor3ubv(TH_GRID, col);
}
UI_make_axis_color(col, col2, axis);
- glColor3ubv(col2);
-
- setlinestyle(0);
- glBegin(GL_LINES);
- glVertex3fv(v1);
- glVertex3fv(v2);
- glEnd();
-
- glPopMatrix();
+
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformColor3ubv(col2);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex3fv(pos, v1);
+ immVertex3fv(pos, v2);
+ immEnd();
+
+ immUnbindProgram();
+
+ gpuPopMatrix();
}
}
@@ -1102,16 +1114,23 @@ static int initTransInfo_edit_pet_to_flag(const int proportional)
*/
void initTransInfo(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *event)
{
+ CTX_data_eval_ctx(C, &t->eval_ctx);
+ Depsgraph *depsgraph = CTX_data_depsgraph(C);
Scene *sce = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
ToolSettings *ts = CTX_data_tool_settings(C);
ARegion *ar = CTX_wm_region(C);
ScrArea *sa = CTX_wm_area(C);
Object *obedit = CTX_data_edit_object(C);
Object *ob = CTX_data_active_object(C);
bGPdata *gpd = CTX_data_gpencil_data(C);
+ RenderEngineType *engine_type = CTX_data_engine_type(C);
PropertyRNA *prop;
-
+
+ t->depsgraph = depsgraph;
t->scene = sce;
+ t->view_layer = view_layer;
+ t->engine_type = engine_type;
t->sa = sa;
t->ar = ar;
t->obedit = obedit;
@@ -1219,7 +1238,6 @@ void initTransInfo(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve
t->animtimer = (animscreen) ? animscreen->animtimer : NULL;
/* turn manipulator off during transform */
- // FIXME: but don't do this when USING the manipulator...
if (t->flag & T_MODAL) {
t->twtype = v3d->twtype;
v3d->twtype = 0;
@@ -1234,6 +1252,8 @@ void initTransInfo(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve
}
t->current_orientation = v3d->twmode;
+ t->custom_orientation = BKE_workspace_transform_orientation_find(
+ CTX_wm_workspace(C), v3d->custom_orientation_index);
/* exceptional case */
if (t->around == V3D_AROUND_LOCAL_ORIGINS) {
@@ -1246,7 +1266,7 @@ void initTransInfo(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve
}
}
- if (ob && ob->mode & OB_MODE_ALL_PAINT) {
+ if (ob && t->eval_ctx.object_mode & OB_MODE_ALL_PAINT) {
Paint *p = BKE_paint_get_active_from_context(C);
if (p && p->brush && (p->brush->flag & BRUSH_CURVE)) {
t->options |= CTX_PAINT_CURVE;
@@ -1324,11 +1344,22 @@ void initTransInfo(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve
if (op && ((prop = RNA_struct_find_property(op->ptr, "constraint_orientation")) &&
RNA_property_is_set(op->ptr, prop)))
{
- t->current_orientation = RNA_property_enum_get(op->ptr, prop);
+ short orientation = RNA_property_enum_get(op->ptr, prop);
+ TransformOrientation *custom_orientation = NULL;
- if (t->current_orientation >= V3D_MANIP_CUSTOM + BIF_countTransformOrientation(C)) {
- t->current_orientation = V3D_MANIP_GLOBAL;
+ if (orientation >= V3D_MANIP_CUSTOM) {
+ if (orientation >= V3D_MANIP_CUSTOM + BIF_countTransformOrientation(C)) {
+ orientation = V3D_MANIP_GLOBAL;
+ }
+ else {
+ custom_orientation = BKE_workspace_transform_orientation_find(
+ CTX_wm_workspace(C), orientation - V3D_MANIP_CUSTOM);
+ orientation = V3D_MANIP_CUSTOM;
+ }
}
+
+ t->current_orientation = orientation;
+ t->custom_orientation = custom_orientation;
}
if (op && ((prop = RNA_struct_find_property(op->ptr, "release_confirm")) &&
@@ -1773,8 +1804,8 @@ bool calculateCenterActive(TransInfo *t, bool select_only, float r_center[3])
}
}
else if (t->flag & T_POSE) {
- Scene *scene = t->scene;
- Object *ob = OBACT;
+ ViewLayer *view_layer = t->view_layer;
+ Object *ob = OBACT(view_layer);
if (ob) {
bPoseChannel *pchan = BKE_pose_channel_active(ob);
if (pchan && (!select_only || (pchan->bone->flag & BONE_SELECTED))) {
@@ -1784,7 +1815,7 @@ bool calculateCenterActive(TransInfo *t, bool select_only, float r_center[3])
}
}
else if (t->options & CTX_PAINT_CURVE) {
- Paint *p = BKE_paint_get_active(t->scene);
+ Paint *p = BKE_paint_get_active(t->scene, t->view_layer, t->eval_ctx.object_mode);
Brush *br = p->brush;
PaintCurve *pc = br->paint_curve;
copy_v3_v3(r_center, pc->points[pc->add_index - 1].bez.vec[1]);
@@ -1793,9 +1824,10 @@ bool calculateCenterActive(TransInfo *t, bool select_only, float r_center[3])
}
else {
/* object mode */
- Scene *scene = t->scene;
- Object *ob = OBACT;
- if (ob && (!select_only || (ob->flag & SELECT))) {
+ ViewLayer *view_layer = t->view_layer;
+ Object *ob = OBACT(view_layer);
+ Base *base = BASACT(view_layer);
+ if (ob && ((!select_only) || ((base->flag & BASE_SELECTED) != 0))) {
copy_v3_v3(r_center, ob->obmat[3]);
ok = true;
}
diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c
index 5fd29971fa5..459727ad531 100644
--- a/source/blender/editors/transform/transform_manipulator.c
+++ b/source/blender/editors/transform/transform_manipulator.c
@@ -59,24 +59,37 @@
#include "BKE_editmesh.h"
#include "BKE_lattice.h"
#include "BKE_gpencil.h"
+#include "BKE_workspace.h"
#include "BIF_gl.h"
+#include "DEG_depsgraph.h"
+
#include "WM_api.h"
#include "WM_types.h"
+#include "WM_message.h"
#include "ED_armature.h"
#include "ED_curve.h"
+#include "ED_object.h"
#include "ED_particle.h"
#include "ED_view3d.h"
#include "ED_gpencil.h"
+#include "ED_screen.h"
+#include "ED_manipulator_library.h"
#include "UI_resources.h"
/* local module include */
#include "transform.h"
+#include "MEM_guardedalloc.h"
+
#include "GPU_select.h"
+#include "GPU_immediate.h"
+#include "GPU_matrix.h"
+
+#define USE_AXIS_BOUNDS
/* return codes for select, and drawing flags */
@@ -88,35 +101,348 @@
#define MAN_ROT_X (1 << 3)
#define MAN_ROT_Y (1 << 4)
#define MAN_ROT_Z (1 << 5)
-#define MAN_ROT_V (1 << 6)
-#define MAN_ROT_T (1 << 7)
-#define MAN_ROT_C (MAN_ROT_X | MAN_ROT_Y | MAN_ROT_Z | MAN_ROT_V | MAN_ROT_T)
+#define MAN_ROT_C (MAN_ROT_X | MAN_ROT_Y | MAN_ROT_Z)
#define MAN_SCALE_X (1 << 8)
#define MAN_SCALE_Y (1 << 9)
#define MAN_SCALE_Z (1 << 10)
#define MAN_SCALE_C (MAN_SCALE_X | MAN_SCALE_Y | MAN_SCALE_Z)
-/* color codes */
-
-#define MAN_RGB 0
-#define MAN_GHOST 1
-#define MAN_MOVECOL 2
-
/* threshold for testing view aligned manipulator axis */
#define TW_AXIS_DOT_MIN 0.02f
#define TW_AXIS_DOT_MAX 0.1f
+/* axes as index */
+enum {
+ MAN_AXIS_TRANS_X = 0,
+ MAN_AXIS_TRANS_Y,
+ MAN_AXIS_TRANS_Z,
+ MAN_AXIS_TRANS_C,
+
+ MAN_AXIS_TRANS_XY,
+ MAN_AXIS_TRANS_YZ,
+ MAN_AXIS_TRANS_ZX,
+#define MAN_AXIS_RANGE_TRANS_START MAN_AXIS_TRANS_X
+#define MAN_AXIS_RANGE_TRANS_END (MAN_AXIS_TRANS_ZX + 1)
+
+ MAN_AXIS_ROT_X,
+ MAN_AXIS_ROT_Y,
+ MAN_AXIS_ROT_Z,
+ MAN_AXIS_ROT_C,
+ MAN_AXIS_ROT_T, /* trackball rotation */
+#define MAN_AXIS_RANGE_ROT_START MAN_AXIS_ROT_X
+#define MAN_AXIS_RANGE_ROT_END (MAN_AXIS_ROT_T + 1)
+
+ MAN_AXIS_SCALE_X,
+ MAN_AXIS_SCALE_Y,
+ MAN_AXIS_SCALE_Z,
+ MAN_AXIS_SCALE_C,
+ MAN_AXIS_SCALE_XY,
+ MAN_AXIS_SCALE_YZ,
+ MAN_AXIS_SCALE_ZX,
+#define MAN_AXIS_RANGE_SCALE_START MAN_AXIS_SCALE_X
+#define MAN_AXIS_RANGE_SCALE_END (MAN_AXIS_SCALE_ZX + 1)
+
+ MAN_AXIS_LAST = MAN_AXIS_RANGE_SCALE_END,
+};
+
+/* axis types */
+enum {
+ MAN_AXES_ALL = 0,
+ MAN_AXES_TRANSLATE,
+ MAN_AXES_ROTATE,
+ MAN_AXES_SCALE,
+};
+
+typedef struct ManipulatorGroup {
+ bool all_hidden;
+
+ struct wmManipulator *manipulators[MAN_AXIS_LAST];
+} ManipulatorGroup;
+
struct TransformBounds {
float center[3]; /* Center for transform widget. */
float min[3], max[3]; /* Boundbox of selection for transform widget. */
+
+#ifdef USE_AXIS_BOUNDS
+ /* Normalized axis */
+ float axis[3][3];
+ float axis_min[3], axis_max[3];
+#endif
};
+/* -------------------------------------------------------------------- */
+/** \name Utilities
+ * \{ */
+
+/* loop over axes */
+#define MAN_ITER_AXES_BEGIN(axis, axis_idx) \
+ { \
+ wmManipulator *axis; \
+ int axis_idx; \
+ for (axis_idx = 0; axis_idx < MAN_AXIS_LAST; axis_idx++) { \
+ axis = manipulator_get_axis_from_index(man, axis_idx);
+
+#define MAN_ITER_AXES_END \
+ } \
+ } ((void)0)
+
+static wmManipulator *manipulator_get_axis_from_index(const ManipulatorGroup *man, const short axis_idx)
+{
+ BLI_assert(IN_RANGE_INCL(axis_idx, (float)MAN_AXIS_TRANS_X, (float)MAN_AXIS_LAST));
+ return man->manipulators[axis_idx];
+}
+
+static short manipulator_get_axis_type(const int axis_idx)
+{
+ if (axis_idx >= MAN_AXIS_RANGE_TRANS_START && axis_idx < MAN_AXIS_RANGE_TRANS_END) {
+ return MAN_AXES_TRANSLATE;
+ }
+ if (axis_idx >= MAN_AXIS_RANGE_ROT_START && axis_idx < MAN_AXIS_RANGE_ROT_END) {
+ return MAN_AXES_ROTATE;
+ }
+ if (axis_idx >= MAN_AXIS_RANGE_SCALE_START && axis_idx < MAN_AXIS_RANGE_SCALE_END) {
+ return MAN_AXES_SCALE;
+ }
+ BLI_assert(0);
+ return -1;
+}
+
+static uint manipulator_orientation_axis(const int axis_idx, bool *r_is_plane)
+{
+ switch (axis_idx) {
+ case MAN_AXIS_TRANS_YZ:
+ case MAN_AXIS_SCALE_YZ:
+ if (r_is_plane) {
+ *r_is_plane = true;
+ }
+ ATTR_FALLTHROUGH;
+ case MAN_AXIS_TRANS_X:
+ case MAN_AXIS_ROT_X:
+ case MAN_AXIS_SCALE_X:
+ return 0;
+
+ case MAN_AXIS_TRANS_ZX:
+ case MAN_AXIS_SCALE_ZX:
+ if (r_is_plane) {
+ *r_is_plane = true;
+ }
+ ATTR_FALLTHROUGH;
+ case MAN_AXIS_TRANS_Y:
+ case MAN_AXIS_ROT_Y:
+ case MAN_AXIS_SCALE_Y:
+ return 1;
+
+ case MAN_AXIS_TRANS_XY:
+ case MAN_AXIS_SCALE_XY:
+ if (r_is_plane) {
+ *r_is_plane = true;
+ }
+ ATTR_FALLTHROUGH;
+ case MAN_AXIS_TRANS_Z:
+ case MAN_AXIS_ROT_Z:
+ case MAN_AXIS_SCALE_Z:
+ return 2;
+ }
+ return 3;
+}
+
+static bool manipulator_is_axis_visible(
+ const View3D *v3d, const RegionView3D *rv3d,
+ const float idot[3], const int axis_type, const int axis_idx)
+{
+ bool is_plane = false;
+ const uint aidx_norm = manipulator_orientation_axis(axis_idx, &is_plane);
+ /* don't draw axis perpendicular to the view */
+ if (aidx_norm < 3) {
+ float idot_axis = idot[aidx_norm];
+ if (is_plane) {
+ idot_axis = 1.0f - idot_axis;
+ }
+ if (idot_axis < TW_AXIS_DOT_MIN) {
+ return false;
+ }
+ }
+
+ if ((axis_type == MAN_AXES_TRANSLATE && !(v3d->twtype & V3D_MANIP_TRANSLATE)) ||
+ (axis_type == MAN_AXES_ROTATE && !(v3d->twtype & V3D_MANIP_ROTATE)) ||
+ (axis_type == MAN_AXES_SCALE && !(v3d->twtype & V3D_MANIP_SCALE)))
+ {
+ return false;
+ }
+
+ switch (axis_idx) {
+ case MAN_AXIS_TRANS_X:
+ return (rv3d->twdrawflag & MAN_TRANS_X);
+ case MAN_AXIS_TRANS_Y:
+ return (rv3d->twdrawflag & MAN_TRANS_Y);
+ case MAN_AXIS_TRANS_Z:
+ return (rv3d->twdrawflag & MAN_TRANS_Z);
+ case MAN_AXIS_TRANS_C:
+ return (rv3d->twdrawflag & MAN_TRANS_C);
+ case MAN_AXIS_ROT_X:
+ return (rv3d->twdrawflag & MAN_ROT_X);
+ case MAN_AXIS_ROT_Y:
+ return (rv3d->twdrawflag & MAN_ROT_Y);
+ case MAN_AXIS_ROT_Z:
+ return (rv3d->twdrawflag & MAN_ROT_Z);
+ case MAN_AXIS_ROT_C:
+ case MAN_AXIS_ROT_T:
+ return (rv3d->twdrawflag & MAN_ROT_C);
+ case MAN_AXIS_SCALE_X:
+ return (rv3d->twdrawflag & MAN_SCALE_X);
+ case MAN_AXIS_SCALE_Y:
+ return (rv3d->twdrawflag & MAN_SCALE_Y);
+ case MAN_AXIS_SCALE_Z:
+ return (rv3d->twdrawflag & MAN_SCALE_Z);
+ case MAN_AXIS_SCALE_C:
+ return (rv3d->twdrawflag & MAN_SCALE_C && (v3d->twtype & V3D_MANIP_TRANSLATE) == 0);
+ case MAN_AXIS_TRANS_XY:
+ return (rv3d->twdrawflag & MAN_TRANS_X &&
+ rv3d->twdrawflag & MAN_TRANS_Y &&
+ (v3d->twtype & V3D_MANIP_ROTATE) == 0);
+ case MAN_AXIS_TRANS_YZ:
+ return (rv3d->twdrawflag & MAN_TRANS_Y &&
+ rv3d->twdrawflag & MAN_TRANS_Z &&
+ (v3d->twtype & V3D_MANIP_ROTATE) == 0);
+ case MAN_AXIS_TRANS_ZX:
+ return (rv3d->twdrawflag & MAN_TRANS_Z &&
+ rv3d->twdrawflag & MAN_TRANS_X &&
+ (v3d->twtype & V3D_MANIP_ROTATE) == 0);
+ case MAN_AXIS_SCALE_XY:
+ return (rv3d->twdrawflag & MAN_SCALE_X &&
+ rv3d->twdrawflag & MAN_SCALE_Y &&
+ (v3d->twtype & V3D_MANIP_TRANSLATE) == 0 &&
+ (v3d->twtype & V3D_MANIP_ROTATE) == 0);
+ case MAN_AXIS_SCALE_YZ:
+ return (rv3d->twdrawflag & MAN_SCALE_Y &&
+ rv3d->twdrawflag & MAN_SCALE_Z &&
+ (v3d->twtype & V3D_MANIP_TRANSLATE) == 0 &&
+ (v3d->twtype & V3D_MANIP_ROTATE) == 0);
+ case MAN_AXIS_SCALE_ZX:
+ return (rv3d->twdrawflag & MAN_SCALE_Z &&
+ rv3d->twdrawflag & MAN_SCALE_X &&
+ (v3d->twtype & V3D_MANIP_TRANSLATE) == 0 &&
+ (v3d->twtype & V3D_MANIP_ROTATE) == 0);
+ }
+ return false;
+}
+
+static void manipulator_get_axis_color(
+ const int axis_idx, const float idot[3],
+ float r_col[4], float r_col_hi[4])
+{
+ /* alpha values for normal/highlighted states */
+ const float alpha = 0.6f;
+ const float alpha_hi = 1.0f;
+ float alpha_fac;
+
+ bool is_plane = false;
+ const int axis_idx_norm = manipulator_orientation_axis(axis_idx, &is_plane);
+ /* get alpha fac based on axis angle, to fade axis out when hiding it because it points towards view */
+ if (axis_idx_norm < 3) {
+ float idot_axis = idot[axis_idx_norm];
+ if (is_plane) {
+ idot_axis = 1.0f - idot_axis;
+ }
+ alpha_fac = (idot_axis > TW_AXIS_DOT_MAX) ?
+ 1.0f : (idot_axis < TW_AXIS_DOT_MIN) ?
+ 0.0f : ((idot_axis - TW_AXIS_DOT_MIN) / (TW_AXIS_DOT_MAX - TW_AXIS_DOT_MIN));
+ }
+ else {
+ /* trackball rotation axis is a special case, we only draw a slight overlay */
+ alpha_fac = (axis_idx == MAN_AXIS_ROT_T) ? 0.1f : 1.0f;
+ }
+
+ switch (axis_idx) {
+ case MAN_AXIS_TRANS_X:
+ case MAN_AXIS_ROT_X:
+ case MAN_AXIS_SCALE_X:
+ case MAN_AXIS_TRANS_YZ:
+ case MAN_AXIS_SCALE_YZ:
+ UI_GetThemeColor4fv(TH_AXIS_X, r_col);
+ break;
+ case MAN_AXIS_TRANS_Y:
+ case MAN_AXIS_ROT_Y:
+ case MAN_AXIS_SCALE_Y:
+ case MAN_AXIS_TRANS_ZX:
+ case MAN_AXIS_SCALE_ZX:
+ UI_GetThemeColor4fv(TH_AXIS_Y, r_col);
+ break;
+ case MAN_AXIS_TRANS_Z:
+ case MAN_AXIS_ROT_Z:
+ case MAN_AXIS_SCALE_Z:
+ case MAN_AXIS_TRANS_XY:
+ case MAN_AXIS_SCALE_XY:
+ UI_GetThemeColor4fv(TH_AXIS_Z, r_col);
+ break;
+ case MAN_AXIS_TRANS_C:
+ case MAN_AXIS_ROT_C:
+ case MAN_AXIS_SCALE_C:
+ case MAN_AXIS_ROT_T:
+ copy_v4_fl(r_col, 1.0f);
+ break;
+ }
+
+ copy_v4_v4(r_col_hi, r_col);
+
+ r_col[3] = alpha * alpha_fac;
+ r_col_hi[3] = alpha_hi * alpha_fac;
+}
+
+static void manipulator_get_axis_constraint(const int axis_idx, int r_axis[3])
+{
+ zero_v3_int(r_axis);
+
+ switch (axis_idx) {
+ case MAN_AXIS_TRANS_X:
+ case MAN_AXIS_ROT_X:
+ case MAN_AXIS_SCALE_X:
+ r_axis[0] = 1;
+ break;
+ case MAN_AXIS_TRANS_Y:
+ case MAN_AXIS_ROT_Y:
+ case MAN_AXIS_SCALE_Y:
+ r_axis[1] = 1;
+ break;
+ case MAN_AXIS_TRANS_Z:
+ case MAN_AXIS_ROT_Z:
+ case MAN_AXIS_SCALE_Z:
+ r_axis[2] = 1;
+ break;
+ case MAN_AXIS_TRANS_XY:
+ case MAN_AXIS_SCALE_XY:
+ r_axis[0] = r_axis[1] = 1;
+ break;
+ case MAN_AXIS_TRANS_YZ:
+ case MAN_AXIS_SCALE_YZ:
+ r_axis[1] = r_axis[2] = 1;
+ break;
+ case MAN_AXIS_TRANS_ZX:
+ case MAN_AXIS_SCALE_ZX:
+ r_axis[2] = r_axis[0] = 1;
+ break;
+ default:
+ break;
+ }
+}
+
+
+/* **************** Preparation Stuff **************** */
+
/* transform widget center calc helper for below */
static void calc_tw_center(struct TransformBounds *tbounds, const float co[3])
{
minmax_v3v3_v3(tbounds->min, tbounds->max, co);
add_v3_v3(tbounds->center, co);
+
+#ifdef USE_AXIS_BOUNDS
+ for (int i = 0; i < 3; i++) {
+ const float d = dot_v3v3(tbounds->axis[i], co);
+ tbounds->axis_min[i] = min_ff(d, tbounds->axis_min[i]);
+ tbounds->axis_max[i] = max_ff(d, tbounds->axis_max[i]);
+ }
+#endif
}
static void protectflag_to_drawflags(short protectflag, short *drawflags)
@@ -194,9 +520,9 @@ static bool test_rotmode_euler(short rotmode)
return (ELEM(rotmode, ROT_MODE_AXISANGLE, ROT_MODE_QUAT)) ? 0 : 1;
}
-bool gimbal_axis(Object *ob, float gmat[3][3])
+bool gimbal_axis(Object *ob, float gmat[3][3], const eObjectMode object_mode)
{
- if (ob->mode & OB_MODE_POSE) {
+ if (object_mode & OB_MODE_POSE) {
bPoseChannel *pchan = BKE_pose_channel_active(ob);
if (pchan) {
@@ -261,16 +587,20 @@ bool gimbal_axis(Object *ob, float gmat[3][3])
/* centroid, boundbox, of selection */
/* returns total items selected */
-static int calc_manipulator_stats(const bContext *C, struct TransformBounds *tbounds)
+static int calc_manipulator_stats(
+ const bContext *C, bool use_only_center,
+ struct TransformBounds *tbounds)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
ScrArea *sa = CTX_wm_area(C);
ARegion *ar = CTX_wm_region(C);
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Object *obedit = CTX_data_edit_object(C);
View3D *v3d = sa->spacedata.first;
RegionView3D *rv3d = ar->regiondata;
Base *base;
- Object *ob = OBACT;
+ Object *ob = OBACT(view_layer);
bGPdata *gpd = CTX_data_gpencil_data(C);
const bool is_gp_edit = ((gpd) && (gpd->flag & GP_DATA_STROKE_EDITMODE));
int a, totsel = 0;
@@ -278,12 +608,104 @@ static int calc_manipulator_stats(const bContext *C, struct TransformBounds *tbo
/* transform widget matrix */
unit_m4(rv3d->twmat);
+#ifdef USE_AXIS_BOUNDS
+ unit_m3(rv3d->tw_axis_matrix);
+ zero_v3(rv3d->tw_axis_min);
+ zero_v3(rv3d->tw_axis_max);
+#endif
+
rv3d->twdrawflag = 0xFFFF;
+ /* global, local or normal orientation?
+ * if we could check 'totsel' now, this should be skipped with no selection. */
+ if (ob && !is_gp_edit) {
+
+ switch (v3d->twmode) {
+
+ case V3D_MANIP_GLOBAL:
+ {
+ break; /* nothing to do */
+ }
+ case V3D_MANIP_GIMBAL:
+ {
+ float mat[3][3];
+ if (gimbal_axis(ob, mat, workspace->object_mode)) {
+ copy_m4_m3(rv3d->twmat, mat);
+ break;
+ }
+ /* if not gimbal, fall through to normal */
+ ATTR_FALLTHROUGH;
+ }
+ case V3D_MANIP_NORMAL:
+ {
+ if (obedit || workspace->object_mode & OB_MODE_POSE) {
+ float mat[3][3];
+ ED_getTransformOrientationMatrix(C, mat, v3d->around);
+ copy_m4_m3(rv3d->twmat, mat);
+ break;
+ }
+ /* no break we define 'normal' as 'local' in Object mode */
+ ATTR_FALLTHROUGH;
+ }
+ case V3D_MANIP_LOCAL:
+ {
+ if (workspace->object_mode & OB_MODE_POSE) {
+ /* each bone moves on its own local axis, but to avoid confusion,
+ * use the active pones axis for display [#33575], this works as expected on a single bone
+ * and users who select many bones will understand whats going on and what local means
+ * when they start transforming */
+ float mat[3][3];
+ ED_getTransformOrientationMatrix(C, mat, v3d->around);
+ copy_m4_m3(rv3d->twmat, mat);
+ break;
+ }
+ copy_m4_m4(rv3d->twmat, ob->obmat);
+ normalize_m4(rv3d->twmat);
+ break;
+ }
+ case V3D_MANIP_VIEW:
+ {
+ float mat[3][3];
+ copy_m3_m4(mat, rv3d->viewinv);
+ normalize_m3(mat);
+ copy_m4_m3(rv3d->twmat, mat);
+ break;
+ }
+ case V3D_MANIP_CUSTOM:
+ {
+ TransformOrientation *custom_orientation = BKE_workspace_transform_orientation_find(
+ CTX_wm_workspace(C), v3d->custom_orientation_index);
+ float mat[3][3];
+
+ if (applyTransformOrientation(custom_orientation, mat, NULL)) {
+ copy_m4_m3(rv3d->twmat, mat);
+ }
+ break;
+ }
+ }
+ }
+
/* transform widget centroid/center */
INIT_MINMAX(tbounds->min, tbounds->max);
zero_v3(tbounds->center);
+#ifdef USE_AXIS_BOUNDS
+ copy_m3_m4(tbounds->axis, rv3d->twmat);
+ if (ob && workspace->object_mode & OB_MODE_EDIT) {
+ float diff_mat[3][3];
+ copy_m3_m4(diff_mat, ob->obmat);
+ normalize_m3(diff_mat);
+ invert_m3(diff_mat);
+ mul_m3_m3m3(tbounds->axis, tbounds->axis, diff_mat);
+ normalize_m3(tbounds->axis);
+ }
+
+ for (int i = 0; i < 3; i++) {
+ tbounds->axis_min[i] = +FLT_MAX;
+ tbounds->axis_max[i] = -FLT_MAX;
+ }
+#endif
+
if (is_gp_edit) {
float diff_mat[4][4];
float fpt[3];
@@ -330,13 +752,11 @@ static int calc_manipulator_stats(const bContext *C, struct TransformBounds *tbo
/* selection center */
if (totsel) {
- mul_v3_fl(tbounds->center, 1.0f / (float)totsel);
+ mul_v3_fl(tbounds->center, 1.0f / (float)totsel); /* centroid! */
}
}
else if (obedit) {
ob = obedit;
- if ((ob->lay & v3d->lay) == 0) return 0;
-
if (obedit->type == OB_MESH) {
BMEditMesh *em = BKE_editmesh_from_object(obedit);
BMEditSelection ese;
@@ -442,15 +862,11 @@ static int calc_manipulator_stats(const bContext *C, struct TransformBounds *tbo
}
else {
if (bezt->f1 & SELECT) {
- calc_tw_center(
- tbounds,
- bezt->vec[(v3d->around == V3D_AROUND_LOCAL_ORIGINS) ? 1 : 0]);
+ calc_tw_center(tbounds, bezt->vec[(v3d->around == V3D_AROUND_LOCAL_ORIGINS) ? 1 : 0]);
totsel++;
}
if (bezt->f3 & SELECT) {
- calc_tw_center(
- tbounds,
- bezt->vec[(v3d->around == V3D_AROUND_LOCAL_ORIGINS) ? 1 : 2]);
+ calc_tw_center(tbounds, bezt->vec[(v3d->around == V3D_AROUND_LOCAL_ORIGINS) ? 1 : 2]);
totsel++;
}
}
@@ -512,19 +928,17 @@ static int calc_manipulator_stats(const bContext *C, struct TransformBounds *tbo
/* selection center */
if (totsel) {
- mul_v3_fl(tbounds->center, 1.0f / (float)totsel);
+ mul_v3_fl(tbounds->center, 1.0f / (float)totsel); // centroid!
mul_m4_v3(obedit->obmat, tbounds->center);
mul_m4_v3(obedit->obmat, tbounds->min);
mul_m4_v3(obedit->obmat, tbounds->max);
}
}
- else if (ob && (ob->mode & OB_MODE_POSE)) {
+ else if (ob && (workspace->object_mode & OB_MODE_POSE)) {
bPoseChannel *pchan;
int mode = TFM_ROTATION; // mislead counting bones... bah. We don't know the manipulator mode, could be mixed
bool ok = false;
- if ((ob->lay & v3d->lay) == 0) return 0;
-
if ((v3d->around == V3D_AROUND_ACTIVE) && (pchan = BKE_pose_channel_active(ob))) {
/* doesn't check selection or visibility intentionally */
Bone *bone = pchan->bone;
@@ -552,17 +966,17 @@ static int calc_manipulator_stats(const bContext *C, struct TransformBounds *tbo
}
if (ok) {
- mul_v3_fl(tbounds->center, 1.0f / (float)totsel);
+ mul_v3_fl(tbounds->center, 1.0f / (float)totsel); // centroid!
mul_m4_v3(ob->obmat, tbounds->center);
mul_m4_v3(ob->obmat, tbounds->min);
mul_m4_v3(ob->obmat, tbounds->max);
}
}
- else if (ob && (ob->mode & OB_MODE_ALL_PAINT)) {
+ else if (ob && (workspace->object_mode & OB_MODE_ALL_PAINT)) {
/* pass */
}
- else if (ob && ob->mode & OB_MODE_PARTICLE_EDIT) {
- PTCacheEdit *edit = PE_get_current(scene, ob);
+ else if (ob && workspace->object_mode & OB_MODE_PARTICLE_EDIT) {
+ PTCacheEdit *edit = PE_get_current(scene, view_layer, ob);
PTCacheEditPoint *point;
PTCacheEditKey *ek;
int k;
@@ -582,20 +996,30 @@ static int calc_manipulator_stats(const bContext *C, struct TransformBounds *tbo
/* selection center */
if (totsel)
- mul_v3_fl(tbounds->center, 1.0f / (float)totsel);
+ mul_v3_fl(tbounds->center, 1.0f / (float)totsel); // centroid!
}
}
else {
/* we need the one selected object, if its not active */
- ob = OBACT;
- if (ob && !(ob->flag & SELECT)) ob = NULL;
+ base = BASACT(view_layer);
+ ob = OBACT(view_layer);
+ if (base && ((base->flag & BASE_SELECTED) == 0)) ob = NULL;
- for (base = scene->base.first; base; base = base->next) {
- if (TESTBASELIB(v3d, base)) {
+ for (base = view_layer->object_bases.first; base; base = base->next) {
+ if (TESTBASELIB(base)) {
if (ob == NULL)
ob = base->object;
- calc_tw_center(tbounds, base->object->obmat[3]);
+ if (use_only_center || base->object->bb == NULL) {
+ calc_tw_center(tbounds, base->object->obmat[3]);
+ }
+ else {
+ for (uint j = 0; j < 8; j++) {
+ float co[3];
+ mul_v3_m4v3(co, base->object->obmat, base->object->bb->vec[j]);
+ calc_tw_center(tbounds, co);
+ }
+ }
protectflag_to_drawflags(base->object->protectflag, &rv3d->twdrawflag);
totsel++;
}
@@ -603,1379 +1027,665 @@ static int calc_manipulator_stats(const bContext *C, struct TransformBounds *tbo
/* selection center */
if (totsel) {
- mul_v3_fl(tbounds->center, 1.0f / (float)totsel);
+ mul_v3_fl(tbounds->center, 1.0f / (float)totsel); // centroid!
}
}
- /* global, local or normal orientation? */
- if (ob && totsel && !is_gp_edit) {
-
- switch (v3d->twmode) {
-
- case V3D_MANIP_GLOBAL:
- {
- break; /* nothing to do */
- }
- case V3D_MANIP_GIMBAL:
- {
- float mat[3][3];
- if (gimbal_axis(ob, mat)) {
- copy_m4_m3(rv3d->twmat, mat);
- break;
- }
- /* if not gimbal, fall through to normal */
- ATTR_FALLTHROUGH;
- }
- case V3D_MANIP_NORMAL:
- {
- if (obedit || ob->mode & OB_MODE_POSE) {
- float mat[3][3];
- ED_getTransformOrientationMatrix(C, mat, v3d->around);
- copy_m4_m3(rv3d->twmat, mat);
- break;
- }
- /* no break we define 'normal' as 'local' in Object mode */
- ATTR_FALLTHROUGH;
- }
- case V3D_MANIP_LOCAL:
- {
- if (ob->mode & OB_MODE_POSE) {
- /* each bone moves on its own local axis, but to avoid confusion,
- * use the active pones axis for display [#33575], this works as expected on a single bone
- * and users who select many bones will understand whats going on and what local means
- * when they start transforming */
- float mat[3][3];
- ED_getTransformOrientationMatrix(C, mat, v3d->around);
- copy_m4_m3(rv3d->twmat, mat);
- break;
- }
- copy_m4_m4(rv3d->twmat, ob->obmat);
- normalize_m4(rv3d->twmat);
- break;
- }
- case V3D_MANIP_VIEW:
- {
- float mat[3][3];
- copy_m3_m4(mat, rv3d->viewinv);
- normalize_m3(mat);
- copy_m4_m3(rv3d->twmat, mat);
- break;
- }
- default: /* V3D_MANIP_CUSTOM */
- {
- float mat[3][3];
- if (applyTransformOrientation(C, mat, NULL, v3d->twmode - V3D_MANIP_CUSTOM)) {
- copy_m4_m3(rv3d->twmat, mat);
- }
- break;
- }
- }
-
+ if (totsel == 0) {
+ unit_m4(rv3d->twmat);
+ }
+ else {
+#ifdef USE_AXIS_BOUNDS
+ copy_v3_v3(rv3d->tw_axis_min, tbounds->axis_min);
+ copy_v3_v3(rv3d->tw_axis_max, tbounds->axis_max);
+ copy_m3_m3(rv3d->tw_axis_matrix, tbounds->axis);
+#endif
}
return totsel;
}
-/* don't draw axis perpendicular to the view */
-static void test_manipulator_axis(const bContext *C)
+static void manipulator_get_idot(RegionView3D *rv3d, float r_idot[3])
{
- RegionView3D *rv3d = CTX_wm_region_view3d(C);
float view_vec[3], axis_vec[3];
- float idot;
- int i;
-
- const int twdrawflag_axis[3] = {
- (MAN_TRANS_X | MAN_SCALE_X),
- (MAN_TRANS_Y | MAN_SCALE_Y),
- (MAN_TRANS_Z | MAN_SCALE_Z)};
-
ED_view3d_global_to_vector(rv3d, rv3d->twmat[3], view_vec);
-
- for (i = 0; i < 3; i++) {
+ for (int i = 0; i < 3; i++) {
normalize_v3_v3(axis_vec, rv3d->twmat[i]);
- rv3d->tw_idot[i] = idot = 1.0f - fabsf(dot_v3v3(view_vec, axis_vec));
- if (idot < TW_AXIS_DOT_MIN) {
- rv3d->twdrawflag &= ~twdrawflag_axis[i];
- }
+ r_idot[i] = 1.0f - fabsf(dot_v3v3(view_vec, axis_vec));
}
}
-
-/* ******************** DRAWING STUFFIES *********** */
-
-static float screen_aligned(RegionView3D *rv3d, float mat[4][4])
-{
- glTranslate3fv(mat[3]);
-
- /* sets view screen aligned */
- glRotatef(-360.0f * saacos(rv3d->viewquat[0]) / (float)M_PI, rv3d->viewquat[1], rv3d->viewquat[2], rv3d->viewquat[3]);
-
- return len_v3(mat[0]); /* draw scale */
-}
-
-
-/**
- * \param radring: Radius of doughnut rings.
- * \param radhole: Radius hole.
- * \param start: Starting segment (based on \a nrings).
- * \param end: End segment.
- * \param nsides: Number of points in ring.
- * \param nrigns: Number of rings.
- */
-static void partial_doughnut(float radring, float radhole, int start, int end, int nsides, int nrings)
+static void manipulator_prepare_mat(
+ const bContext *C, View3D *v3d, RegionView3D *rv3d, const struct TransformBounds *tbounds)
{
- float theta, phi, theta1;
- float cos_theta, sin_theta;
- float cos_theta1, sin_theta1;
- float ring_delta, side_delta;
- int i, j, do_caps = true;
-
- if (start == 0 && end == nrings) do_caps = false;
-
- ring_delta = 2.0f * (float)M_PI / (float)nrings;
- side_delta = 2.0f * (float)M_PI / (float)nsides;
-
- theta = (float)M_PI + 0.5f * ring_delta;
- cos_theta = cosf(theta);
- sin_theta = sinf(theta);
-
- for (i = nrings - 1; i >= 0; i--) {
- theta1 = theta + ring_delta;
- cos_theta1 = cosf(theta1);
- sin_theta1 = sinf(theta1);
-
- if (do_caps && i == start) { // cap
- glBegin(GL_POLYGON);
- phi = 0.0;
- for (j = nsides; j >= 0; j--) {
- float cos_phi, sin_phi, dist;
-
- phi += side_delta;
- cos_phi = cosf(phi);
- sin_phi = sinf(phi);
- dist = radhole + radring * cos_phi;
-
- glVertex3f(cos_theta1 * dist, -sin_theta1 * dist, radring * sin_phi);
- }
- glEnd();
- }
- if (i >= start && i <= end) {
- glBegin(GL_QUAD_STRIP);
- phi = 0.0;
- for (j = nsides; j >= 0; j--) {
- float cos_phi, sin_phi, dist;
-
- phi += side_delta;
- cos_phi = cosf(phi);
- sin_phi = sinf(phi);
- dist = radhole + radring * cos_phi;
-
- glVertex3f(cos_theta1 * dist, -sin_theta1 * dist, radring * sin_phi);
- glVertex3f(cos_theta * dist, -sin_theta * dist, radring * sin_phi);
+ Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+
+ switch (v3d->around) {
+ case V3D_AROUND_CENTER_BOUNDS:
+ case V3D_AROUND_ACTIVE:
+ {
+ const WorkSpace *workspace = CTX_wm_workspace(C);
+ bGPdata *gpd = CTX_data_gpencil_data(C);
+ Object *ob = OBACT(view_layer);
+
+ if (((v3d->around == V3D_AROUND_ACTIVE) && (scene->obedit == NULL)) &&
+ ((gpd == NULL) || !(gpd->flag & GP_DATA_STROKE_EDITMODE)) &&
+ (!(workspace->object_mode & OB_MODE_POSE)))
+ {
+ copy_v3_v3(rv3d->twmat[3], ob->obmat[3]);
}
- glEnd();
- }
-
- if (do_caps && i == end) { // cap
- glBegin(GL_POLYGON);
- phi = 0.0;
- for (j = nsides; j >= 0; j--) {
- float cos_phi, sin_phi, dist;
-
- phi -= side_delta;
- cos_phi = cosf(phi);
- sin_phi = sinf(phi);
- dist = radhole + radring * cos_phi;
-
- glVertex3f(cos_theta * dist, -sin_theta * dist, radring * sin_phi);
+ else {
+ mid_v3_v3v3(rv3d->twmat[3], tbounds->min, tbounds->max);
}
- glEnd();
+ break;
}
-
-
- theta = theta1;
- cos_theta = cos_theta1;
- sin_theta = sin_theta1;
- }
-}
-
-static char axisBlendAngle(float idot)
-{
- if (idot > TW_AXIS_DOT_MAX) {
- return 255;
- }
- else if (idot < TW_AXIS_DOT_MIN) {
- return 0;
- }
- else {
- return (char)(255.0f * (idot - TW_AXIS_DOT_MIN) / (TW_AXIS_DOT_MAX - TW_AXIS_DOT_MIN));
+ case V3D_AROUND_LOCAL_ORIGINS:
+ case V3D_AROUND_CENTER_MEAN:
+ copy_v3_v3(rv3d->twmat[3], tbounds->center);
+ break;
+ case V3D_AROUND_CURSOR:
+ copy_v3_v3(rv3d->twmat[3], ED_view3d_cursor3d_get(scene, v3d));
+ break;
}
}
-/* three colors can be set:
- * gray for ghosting
- * moving: in transform theme color
- * else the red/green/blue
+/**
+ * Sets up \a r_start and \a r_len to define arrow line range.
+ * Needed to adjust line drawing for combined manipulator axis types.
*/
-static void manipulator_setcolor(View3D *v3d, char axis, int colcode, unsigned char alpha)
+static void manipulator_line_range(const View3D *v3d, const short axis_type, float *r_start, float *r_len)
{
- unsigned char col[4] = {0};
- col[3] = alpha;
+ const float ofs = 0.2f;
- if (colcode == MAN_GHOST) {
- col[3] = 70;
- }
- else if (colcode == MAN_MOVECOL) {
- UI_GetThemeColor3ubv(TH_TRANSFORM, col);
- }
- else {
- switch (axis) {
- case 'C':
- UI_GetThemeColor3ubv(TH_TRANSFORM, col);
- if (v3d->twmode == V3D_MANIP_LOCAL) {
- col[0] = col[0] > 200 ? 255 : col[0] + 55;
- col[1] = col[1] > 200 ? 255 : col[1] + 55;
- col[2] = col[2] > 200 ? 255 : col[2] + 55;
- }
- else if (v3d->twmode == V3D_MANIP_NORMAL) {
- col[0] = col[0] < 55 ? 0 : col[0] - 55;
- col[1] = col[1] < 55 ? 0 : col[1] - 55;
- col[2] = col[2] < 55 ? 0 : col[2] - 55;
- }
- break;
- case 'X':
- UI_GetThemeColor3ubv(TH_AXIS_X, col);
- break;
- case 'Y':
- UI_GetThemeColor3ubv(TH_AXIS_Y, col);
- break;
- case 'Z':
- UI_GetThemeColor3ubv(TH_AXIS_Z, col);
- break;
- default:
- BLI_assert(0);
- break;
- }
- }
-
- glColor4ubv(col);
-}
-
-static void manipulator_axis_order(RegionView3D *rv3d, int r_axis_order[3])
-{
- float axis_values[3];
- float vec[3];
+ *r_start = 0.2f;
+ *r_len = 1.0f;
- ED_view3d_global_to_vector(rv3d, rv3d->twmat[3], vec);
-
- axis_values[0] = -dot_v3v3(rv3d->twmat[0], vec);
- axis_values[1] = -dot_v3v3(rv3d->twmat[1], vec);
- axis_values[2] = -dot_v3v3(rv3d->twmat[2], vec);
-
- axis_sort_v3(axis_values, r_axis_order);
-}
-
-/* viewmatrix should have been set OK, also no shademode! */
-static void draw_manipulator_axes_single(View3D *v3d, RegionView3D *rv3d, int colcode,
- int flagx, int flagy, int flagz, int axis,
- const bool is_picksel)
-{
- switch (axis) {
- case 0:
- /* axes */
- if (flagx) {
- if (is_picksel) {
- if (flagx & MAN_SCALE_X) GPU_select_load_id(MAN_SCALE_X);
- else if (flagx & MAN_TRANS_X) GPU_select_load_id(MAN_TRANS_X);
- }
- else {
- manipulator_setcolor(v3d, 'X', colcode, axisBlendAngle(rv3d->tw_idot[0]));
- }
- glBegin(GL_LINES);
- glVertex3f(0.2f, 0.0f, 0.0f);
- glVertex3f(1.0f, 0.0f, 0.0f);
- glEnd();
+ switch (axis_type) {
+ case MAN_AXES_TRANSLATE:
+ if (v3d->twtype & V3D_MANIP_SCALE) {
+ *r_start = *r_len - ofs + 0.075f;
}
- break;
- case 1:
- if (flagy) {
- if (is_picksel) {
- if (flagy & MAN_SCALE_Y) GPU_select_load_id(MAN_SCALE_Y);
- else if (flagy & MAN_TRANS_Y) GPU_select_load_id(MAN_TRANS_Y);
- }
- else {
- manipulator_setcolor(v3d, 'Y', colcode, axisBlendAngle(rv3d->tw_idot[1]));
- }
- glBegin(GL_LINES);
- glVertex3f(0.0f, 0.2f, 0.0f);
- glVertex3f(0.0f, 1.0f, 0.0f);
- glEnd();
+ if (v3d->twtype & V3D_MANIP_ROTATE) {
+ *r_len += ofs;
}
break;
- case 2:
- if (flagz) {
- if (is_picksel) {
- if (flagz & MAN_SCALE_Z) GPU_select_load_id(MAN_SCALE_Z);
- else if (flagz & MAN_TRANS_Z) GPU_select_load_id(MAN_TRANS_Z);
- }
- else {
- manipulator_setcolor(v3d, 'Z', colcode, axisBlendAngle(rv3d->tw_idot[2]));
- }
- glBegin(GL_LINES);
- glVertex3f(0.0f, 0.0f, 0.2f);
- glVertex3f(0.0f, 0.0f, 1.0f);
- glEnd();
+ case MAN_AXES_SCALE:
+ if (v3d->twtype & (V3D_MANIP_TRANSLATE | V3D_MANIP_ROTATE)) {
+ *r_len -= ofs + 0.025f;
}
break;
}
-}
-static void draw_manipulator_axes(View3D *v3d, RegionView3D *rv3d, int colcode,
- int flagx, int flagy, int flagz,
- const int axis_order[3], const bool is_picksel)
-{
- int i;
- for (i = 0; i < 3; i++) {
- draw_manipulator_axes_single(v3d, rv3d, colcode, flagx, flagy, flagz, axis_order[i], is_picksel);
- }
-}
-static void preOrthoFront(const bool ortho, float twmat[4][4], int axis)
-{
- if (ortho == false) {
- float omat[4][4];
- copy_m4_m4(omat, twmat);
- orthogonalize_m4(omat, axis);
- glPushMatrix();
- glMultMatrixf(omat);
- glFrontFace(is_negative_m4(omat) ? GL_CW : GL_CCW);
- }
+ *r_len -= *r_start;
}
-static void postOrtho(const bool ortho)
+static void manipulator_xform_message_subscribe(
+ wmManipulatorGroup *mgroup, struct wmMsgBus *mbus,
+ bScreen *screen, ScrArea *sa, ARegion *ar, const void *type_fn)
{
- if (ortho == false) {
- glPopMatrix();
- }
-}
+ /* Subscribe to view properties */
+ wmMsgSubscribeValue msg_sub_value_mpr_tag_refresh = {
+ .owner = ar,
+ .user_data = mgroup->parent_mmap,
+ .notify = WM_manipulator_do_msg_notify_tag_refresh,
+ };
-BLI_INLINE bool manipulator_rotate_is_visible(const int drawflags)
-{
- return (drawflags & (MAN_ROT_X | MAN_ROT_Y | MAN_ROT_Z));
-}
+ PointerRNA space_ptr;
+ RNA_pointer_create(&screen->id, &RNA_SpaceView3D, sa->spacedata.first, &space_ptr);
-static void draw_manipulator_rotate(
- View3D *v3d, RegionView3D *rv3d, const int drawflags, const int combo,
- const bool is_moving, const bool is_picksel)
-{
- double plane[4];
- float matt[4][4];
- float size, unitmat[4][4];
- float cywid = 0.33f * 0.01f * (float)U.tw_handlesize;
- float cusize = cywid * 0.65f;
- int arcs = (G.debug_value != 2);
- const int colcode = (is_moving) ? MAN_MOVECOL : MAN_RGB;
- bool ortho;
-
- /* skip drawing if all axes are locked */
- if (manipulator_rotate_is_visible(drawflags) == false) return;
-
- /* Init stuff */
- glDisable(GL_DEPTH_TEST);
- unit_m4(unitmat);
-
- /* prepare for screen aligned draw */
- size = len_v3(rv3d->twmat[0]);
- glPushMatrix();
- glTranslate3fv(rv3d->twmat[3]);
-
- if (arcs) {
- /* clipplane makes nice handles, calc here because of multmatrix but with translate! */
- copy_v3db_v3fl(plane, rv3d->viewinv[2]);
- plane[3] = -0.02f * size; // clip just a bit more
- glClipPlane(GL_CLIP_PLANE0, plane);
- }
- /* sets view screen aligned */
- glRotatef(-360.0f * saacos(rv3d->viewquat[0]) / (float)M_PI, rv3d->viewquat[1], rv3d->viewquat[2], rv3d->viewquat[3]);
-
- /* Screen aligned help circle */
- if (arcs) {
- if (is_picksel == false) {
- UI_ThemeColorShade(TH_BACK, -30);
- drawcircball(GL_LINE_LOOP, unitmat[3], size, unitmat);
+ {
+ extern PropertyRNA rna_SpaceView3D_transform_orientation;
+ const PropertyRNA *props[] = {
+ &rna_SpaceView3D_transform_orientation,
+ };
+ for (int i = 0; i < ARRAY_SIZE(props); i++) {
+ WM_msg_subscribe_rna(mbus, &space_ptr, props[i], &msg_sub_value_mpr_tag_refresh, __func__);
}
}
- /* Screen aligned trackball rot circle */
- if (drawflags & MAN_ROT_T) {
- if (is_picksel) GPU_select_load_id(MAN_ROT_T);
- else UI_ThemeColor(TH_TRANSFORM);
-
- drawcircball(GL_LINE_LOOP, unitmat[3], 0.2f * size, unitmat);
- }
-
- /* Screen aligned view rot circle */
- if (drawflags & MAN_ROT_V) {
- if (is_picksel) GPU_select_load_id(MAN_ROT_V);
- else UI_ThemeColor(TH_TRANSFORM);
- drawcircball(GL_LINE_LOOP, unitmat[3], 1.2f * size, unitmat);
-
- if (is_moving) {
- float vec[3];
- vec[0] = 0; // XXX (float)(t->mouse.imval[0] - t->center2d[0]);
- vec[1] = 0; // XXX (float)(t->mouse.imval[1] - t->center2d[1]);
- vec[2] = 0.0f;
- normalize_v3_length(vec, 1.2f * size);
- glBegin(GL_LINES);
- glVertex3f(0.0f, 0.0f, 0.0f);
- glVertex3fv(vec);
- glEnd();
+ if (type_fn == TRANSFORM_WGT_manipulator) {
+ extern PropertyRNA rna_SpaceView3D_pivot_point;
+ const PropertyRNA *props[] = {
+ &rna_SpaceView3D_pivot_point
+ };
+ for (int i = 0; i < ARRAY_SIZE(props); i++) {
+ WM_msg_subscribe_rna(mbus, &space_ptr, props[i], &msg_sub_value_mpr_tag_refresh, __func__);
}
}
- glPopMatrix();
-
-
- ortho = is_orthogonal_m4(rv3d->twmat);
-
- /* apply the transform delta */
- if (is_moving) {
- copy_m4_m4(matt, rv3d->twmat); // to copy the parts outside of [3][3]
- // XXX mul_m4_m3m4(matt, t->mat, rv3d->twmat);
- if (ortho) {
- glMultMatrixf(matt);
- glFrontFace(is_negative_m4(matt) ? GL_CW : GL_CCW);
- }
+ else if (type_fn == VIEW3D_WGT_xform_cage) {
+ /* pass */
}
else {
- if (ortho) {
- glFrontFace(is_negative_m4(rv3d->twmat) ? GL_CW : GL_CCW);
- glMultMatrixf(rv3d->twmat);
- }
+ BLI_assert(0);
}
- /* axes */
- if (arcs == 0) {
- if (!is_picksel) {
- if ((combo & V3D_MANIP_SCALE) == 0) {
- /* axis */
- if ((drawflags & MAN_ROT_X) || (is_moving && (drawflags & MAN_ROT_Z))) {
- preOrthoFront(ortho, rv3d->twmat, 2);
- manipulator_setcolor(v3d, 'X', colcode, 255);
- glBegin(GL_LINES);
- glVertex3f(0.2f, 0.0f, 0.0f);
- glVertex3f(1.0f, 0.0f, 0.0f);
- glEnd();
- postOrtho(ortho);
- }
- if ((drawflags & MAN_ROT_Y) || (is_moving && (drawflags & MAN_ROT_X))) {
- preOrthoFront(ortho, rv3d->twmat, 0);
- manipulator_setcolor(v3d, 'Y', colcode, 255);
- glBegin(GL_LINES);
- glVertex3f(0.0f, 0.2f, 0.0f);
- glVertex3f(0.0f, 1.0f, 0.0f);
- glEnd();
- postOrtho(ortho);
- }
- if ((drawflags & MAN_ROT_Z) || (is_moving && (drawflags & MAN_ROT_Y))) {
- preOrthoFront(ortho, rv3d->twmat, 1);
- manipulator_setcolor(v3d, 'Z', colcode, 255);
- glBegin(GL_LINES);
- glVertex3f(0.0f, 0.0f, 0.2f);
- glVertex3f(0.0f, 0.0f, 1.0f);
- glEnd();
- postOrtho(ortho);
- }
- }
- }
- }
+ WM_msg_subscribe_rna_anon_prop(mbus, Window, view_layer, &msg_sub_value_mpr_tag_refresh);
+}
- if (arcs == 0 && is_moving) {
+/** \} */
- /* Z circle */
- if (drawflags & MAN_ROT_Z) {
- preOrthoFront(ortho, matt, 2);
- if (is_picksel) GPU_select_load_id(MAN_ROT_Z);
- else manipulator_setcolor(v3d, 'Z', colcode, 255);
- drawcircball(GL_LINE_LOOP, unitmat[3], 1.0, unitmat);
- postOrtho(ortho);
- }
- /* X circle */
- if (drawflags & MAN_ROT_X) {
- preOrthoFront(ortho, matt, 0);
- if (is_picksel) GPU_select_load_id(MAN_ROT_X);
- else manipulator_setcolor(v3d, 'X', colcode, 255);
- glRotatef(90.0, 0.0, 1.0, 0.0);
- drawcircball(GL_LINE_LOOP, unitmat[3], 1.0, unitmat);
- glRotatef(-90.0, 0.0, 1.0, 0.0);
- postOrtho(ortho);
- }
- /* Y circle */
- if (drawflags & MAN_ROT_Y) {
- preOrthoFront(ortho, matt, 1);
- if (is_picksel) GPU_select_load_id(MAN_ROT_Y);
- else manipulator_setcolor(v3d, 'Y', colcode, 255);
- glRotatef(-90.0, 1.0, 0.0, 0.0);
- drawcircball(GL_LINE_LOOP, unitmat[3], 1.0, unitmat);
- glRotatef(90.0, 1.0, 0.0, 0.0);
- postOrtho(ortho);
- }
- }
- // donut arcs
- if (arcs) {
- glEnable(GL_CLIP_PLANE0);
-
- /* Z circle */
- if (drawflags & MAN_ROT_Z) {
- preOrthoFront(ortho, rv3d->twmat, 2);
- if (is_picksel) GPU_select_load_id(MAN_ROT_Z);
- else manipulator_setcolor(v3d, 'Z', colcode, 255);
- partial_doughnut(cusize / 4.0f, 1.0f, 0, 48, 8, 48);
- postOrtho(ortho);
- }
- /* X circle */
- if (drawflags & MAN_ROT_X) {
- preOrthoFront(ortho, rv3d->twmat, 0);
- if (is_picksel) GPU_select_load_id(MAN_ROT_X);
- else manipulator_setcolor(v3d, 'X', colcode, 255);
- glRotatef(90.0, 0.0, 1.0, 0.0);
- partial_doughnut(cusize / 4.0f, 1.0f, 0, 48, 8, 48);
- glRotatef(-90.0, 0.0, 1.0, 0.0);
- postOrtho(ortho);
- }
- /* Y circle */
- if (drawflags & MAN_ROT_Y) {
- preOrthoFront(ortho, rv3d->twmat, 1);
- if (is_picksel) GPU_select_load_id(MAN_ROT_Y);
- else manipulator_setcolor(v3d, 'Y', colcode, 255);
- glRotatef(-90.0, 1.0, 0.0, 0.0);
- partial_doughnut(cusize / 4.0f, 1.0f, 0, 48, 8, 48);
- glRotatef(90.0, 1.0, 0.0, 0.0);
- postOrtho(ortho);
- }
- glDisable(GL_CLIP_PLANE0);
- }
+/* -------------------------------------------------------------------- */
+/** \name Transform Manipulator
+ * \{ */
- if (arcs == 0) {
+static ManipulatorGroup *manipulatorgroup_init(wmManipulatorGroup *mgroup)
+{
+ ManipulatorGroup *man;
- /* Z handle on X axis */
- if (drawflags & MAN_ROT_Z) {
- preOrthoFront(ortho, rv3d->twmat, 2);
- glPushMatrix();
- if (is_picksel) GPU_select_load_id(MAN_ROT_Z);
- else manipulator_setcolor(v3d, 'Z', colcode, 255);
+ man = MEM_callocN(sizeof(ManipulatorGroup), "manipulator_data");
- partial_doughnut(0.7f * cusize, 1.0f, 31, 33, 8, 64);
+ const wmManipulatorType *wt_arrow = WM_manipulatortype_find("MANIPULATOR_WT_arrow_3d", true);
+ const wmManipulatorType *wt_dial = WM_manipulatortype_find("MANIPULATOR_WT_dial_3d", true);
+ const wmManipulatorType *wt_prim = WM_manipulatortype_find("MANIPULATOR_WT_primitive_3d", true);
- glPopMatrix();
- postOrtho(ortho);
- }
+#define MANIPULATOR_NEW_ARROW(v, draw_style) { \
+ man->manipulators[v] = WM_manipulator_new_ptr(wt_arrow, mgroup, NULL); \
+ RNA_enum_set(man->manipulators[v]->ptr, "draw_style", draw_style); \
+ WM_manipulator_set_flag(man->manipulators[v], WM_MANIPULATOR_GRAB_CURSOR, true); \
+} ((void)0)
+#define MANIPULATOR_NEW_DIAL(v, draw_options) { \
+ man->manipulators[v] = WM_manipulator_new_ptr(wt_dial, mgroup, NULL); \
+ RNA_enum_set(man->manipulators[v]->ptr, "draw_options", draw_options); \
+ WM_manipulator_set_flag(man->manipulators[v], WM_MANIPULATOR_GRAB_CURSOR, true); \
+} ((void)0)
+#define MANIPULATOR_NEW_PRIM(v, draw_style) { \
+ man->manipulators[v] = WM_manipulator_new_ptr(wt_prim, mgroup, NULL); \
+ RNA_enum_set(man->manipulators[v]->ptr, "draw_style", draw_style); \
+ WM_manipulator_set_flag(man->manipulators[v], WM_MANIPULATOR_GRAB_CURSOR, true); \
+} ((void)0)
- /* Y handle on X axis */
- if (drawflags & MAN_ROT_Y) {
- preOrthoFront(ortho, rv3d->twmat, 1);
- glPushMatrix();
- if (is_picksel) GPU_select_load_id(MAN_ROT_Y);
- else manipulator_setcolor(v3d, 'Y', colcode, 255);
+ /* add/init widgets - order matters! */
+ MANIPULATOR_NEW_DIAL(MAN_AXIS_ROT_T, ED_MANIPULATOR_DIAL_DRAW_FLAG_FILL);
- glRotatef(90.0, 1.0, 0.0, 0.0);
- glRotatef(90.0, 0.0, 0.0, 1.0);
- partial_doughnut(0.7f * cusize, 1.0f, 31, 33, 8, 64);
+ MANIPULATOR_NEW_DIAL(MAN_AXIS_SCALE_C, ED_MANIPULATOR_DIAL_DRAW_FLAG_NOP);
- glPopMatrix();
- postOrtho(ortho);
- }
+ MANIPULATOR_NEW_ARROW(MAN_AXIS_SCALE_X, ED_MANIPULATOR_ARROW_STYLE_BOX);
+ MANIPULATOR_NEW_ARROW(MAN_AXIS_SCALE_Y, ED_MANIPULATOR_ARROW_STYLE_BOX);
+ MANIPULATOR_NEW_ARROW(MAN_AXIS_SCALE_Z, ED_MANIPULATOR_ARROW_STYLE_BOX);
- /* X handle on Z axis */
- if (drawflags & MAN_ROT_X) {
- preOrthoFront(ortho, rv3d->twmat, 0);
- glPushMatrix();
- if (is_picksel) GPU_select_load_id(MAN_ROT_X);
- else manipulator_setcolor(v3d, 'X', colcode, 255);
+ MANIPULATOR_NEW_PRIM(MAN_AXIS_SCALE_XY, ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE);
+ MANIPULATOR_NEW_PRIM(MAN_AXIS_SCALE_YZ, ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE);
+ MANIPULATOR_NEW_PRIM(MAN_AXIS_SCALE_ZX, ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE);
- glRotatef(-90.0, 0.0, 1.0, 0.0);
- glRotatef(90.0, 0.0, 0.0, 1.0);
- partial_doughnut(0.7f * cusize, 1.0f, 31, 33, 8, 64);
+ MANIPULATOR_NEW_DIAL(MAN_AXIS_ROT_X, ED_MANIPULATOR_DIAL_DRAW_FLAG_CLIP);
+ MANIPULATOR_NEW_DIAL(MAN_AXIS_ROT_Y, ED_MANIPULATOR_DIAL_DRAW_FLAG_CLIP);
+ MANIPULATOR_NEW_DIAL(MAN_AXIS_ROT_Z, ED_MANIPULATOR_DIAL_DRAW_FLAG_CLIP);
- glPopMatrix();
- postOrtho(ortho);
- }
+ /* init screen aligned widget last here, looks better, behaves better */
+ MANIPULATOR_NEW_DIAL(MAN_AXIS_ROT_C, ED_MANIPULATOR_DIAL_DRAW_FLAG_NOP);
- }
+ MANIPULATOR_NEW_DIAL(MAN_AXIS_TRANS_C, ED_MANIPULATOR_DIAL_DRAW_FLAG_NOP);
- /* restore */
- glLoadMatrixf(rv3d->viewmat);
- if (v3d->zbuf) glEnable(GL_DEPTH_TEST);
+ MANIPULATOR_NEW_ARROW(MAN_AXIS_TRANS_X, ED_MANIPULATOR_ARROW_STYLE_NORMAL);
+ MANIPULATOR_NEW_ARROW(MAN_AXIS_TRANS_Y, ED_MANIPULATOR_ARROW_STYLE_NORMAL);
+ MANIPULATOR_NEW_ARROW(MAN_AXIS_TRANS_Z, ED_MANIPULATOR_ARROW_STYLE_NORMAL);
-}
+ MANIPULATOR_NEW_PRIM(MAN_AXIS_TRANS_XY, ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE);
+ MANIPULATOR_NEW_PRIM(MAN_AXIS_TRANS_YZ, ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE);
+ MANIPULATOR_NEW_PRIM(MAN_AXIS_TRANS_ZX, ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE);
-static void drawsolidcube(float size)
-{
- const float cube[8][3] = {
- {-1.0, -1.0, -1.0},
- {-1.0, -1.0, 1.0},
- {-1.0, 1.0, 1.0},
- {-1.0, 1.0, -1.0},
- { 1.0, -1.0, -1.0},
- { 1.0, -1.0, 1.0},
- { 1.0, 1.0, 1.0},
- { 1.0, 1.0, -1.0},
- };
- float n[3] = {0.0f};
-
- glPushMatrix();
- glScalef(size, size, size);
-
- glBegin(GL_QUADS);
- n[0] = -1.0;
- glNormal3fv(n);
- glVertex3fv(cube[0]); glVertex3fv(cube[1]); glVertex3fv(cube[2]); glVertex3fv(cube[3]);
- n[0] = 0;
- glEnd();
-
- glBegin(GL_QUADS);
- n[1] = -1.0;
- glNormal3fv(n);
- glVertex3fv(cube[0]); glVertex3fv(cube[4]); glVertex3fv(cube[5]); glVertex3fv(cube[1]);
- n[1] = 0;
- glEnd();
-
- glBegin(GL_QUADS);
- n[0] = 1.0;
- glNormal3fv(n);
- glVertex3fv(cube[4]); glVertex3fv(cube[7]); glVertex3fv(cube[6]); glVertex3fv(cube[5]);
- n[0] = 0;
- glEnd();
-
- glBegin(GL_QUADS);
- n[1] = 1.0;
- glNormal3fv(n);
- glVertex3fv(cube[7]); glVertex3fv(cube[3]); glVertex3fv(cube[2]); glVertex3fv(cube[6]);
- n[1] = 0;
- glEnd();
-
- glBegin(GL_QUADS);
- n[2] = 1.0;
- glNormal3fv(n);
- glVertex3fv(cube[1]); glVertex3fv(cube[5]); glVertex3fv(cube[6]); glVertex3fv(cube[2]);
- n[2] = 0;
- glEnd();
-
- glBegin(GL_QUADS);
- n[2] = -1.0;
- glNormal3fv(n);
- glVertex3fv(cube[7]); glVertex3fv(cube[4]); glVertex3fv(cube[0]); glVertex3fv(cube[3]);
- glEnd();
-
- glPopMatrix();
+ return man;
}
-
-static void draw_manipulator_scale(
- View3D *v3d, RegionView3D *rv3d, const int drawflags, const int combo, const int colcode,
- const bool is_moving, const bool is_picksel)
+/**
+ * Custom handler for manipulator widgets
+ */
+static int manipulator_modal(
+ bContext *C, wmManipulator *widget, const wmEvent *UNUSED(event),
+ eWM_ManipulatorTweak UNUSED(tweak_flag))
{
- float cywid = 0.25f * 0.01f * (float)U.tw_handlesize;
- float cusize = cywid * 0.75f, dz;
- int axis_order[3] = {2, 0, 1};
- int i;
-
- /* when called while moving in mixed mode, do not draw when... */
- if ((drawflags & MAN_SCALE_C) == 0) return;
-
- manipulator_axis_order(rv3d, axis_order);
-
- glDisable(GL_DEPTH_TEST);
-
- /* not in combo mode */
- if ((combo & (V3D_MANIP_TRANSLATE | V3D_MANIP_ROTATE)) == 0) {
- float size, unitmat[4][4];
- int shift = 0; // XXX
-
- /* center circle, do not add to selection when shift is pressed (planar constraint) */
- if (is_picksel && shift == 0) GPU_select_load_id(MAN_SCALE_C);
- else manipulator_setcolor(v3d, 'C', colcode, 255);
+ const ScrArea *sa = CTX_wm_area(C);
+ ARegion *ar = CTX_wm_region(C);
+ View3D *v3d = sa->spacedata.first;
+ RegionView3D *rv3d = ar->regiondata;
+ struct TransformBounds tbounds;
- glPushMatrix();
- size = screen_aligned(rv3d, rv3d->twmat);
- unit_m4(unitmat);
- drawcircball(GL_LINE_LOOP, unitmat[3], 0.2f * size, unitmat);
- glPopMatrix();
- dz = 1.0;
- }
- else {
- dz = 1.0f - 4.0f * cusize;
+ if (calc_manipulator_stats(C, true, &tbounds)) {
+ manipulator_prepare_mat(C, v3d, rv3d, &tbounds);
+ WM_manipulator_set_matrix_location(widget, rv3d->twmat[3]);
}
- if (is_moving) {
- float matt[4][4];
+ ED_region_tag_redraw(ar);
- copy_m4_m4(matt, rv3d->twmat); // to copy the parts outside of [3][3]
- // XXX mul_m4_m3m4(matt, t->mat, rv3d->twmat);
- glMultMatrixf(matt);
- glFrontFace(is_negative_m4(matt) ? GL_CW : GL_CCW);
- }
- else {
- glMultMatrixf(rv3d->twmat);
- glFrontFace(is_negative_m4(rv3d->twmat) ? GL_CW : GL_CCW);
- }
+ return OPERATOR_RUNNING_MODAL;
+}
- /* axis */
+static void WIDGETGROUP_manipulator_setup(const bContext *UNUSED(C), wmManipulatorGroup *mgroup)
+{
+ ManipulatorGroup *man = manipulatorgroup_init(mgroup);
+ struct {
+ wmOperatorType *translate, *rotate, *trackball, *resize;
+ } ot_store = {NULL};
- /* in combo mode, this is always drawn as first type */
- draw_manipulator_axes(v3d, rv3d, colcode,
- drawflags & MAN_SCALE_X, drawflags & MAN_SCALE_Y, drawflags & MAN_SCALE_Z,
- axis_order, is_picksel);
+ mgroup->customdata = man;
+ /* *** set properties for axes *** */
- for (i = 0; i < 3; i++) {
- switch (axis_order[i]) {
- case 0: /* X cube */
- if (drawflags & MAN_SCALE_X) {
- glTranslatef(dz, 0.0, 0.0);
- if (is_picksel) GPU_select_load_id(MAN_SCALE_X);
- else manipulator_setcolor(v3d, 'X', colcode, axisBlendAngle(rv3d->tw_idot[0]));
- drawsolidcube(cusize);
- glTranslatef(-dz, 0.0, 0.0);
- }
+ MAN_ITER_AXES_BEGIN(axis, axis_idx)
+ {
+ const short axis_type = manipulator_get_axis_type(axis_idx);
+ int constraint_axis[3] = {1, 0, 0};
+ PointerRNA *ptr;
+
+ manipulator_get_axis_constraint(axis_idx, constraint_axis);
+
+ /* custom handler! */
+ WM_manipulator_set_fn_custom_modal(axis, manipulator_modal);
+
+ switch (axis_idx) {
+ case MAN_AXIS_TRANS_X:
+ case MAN_AXIS_TRANS_Y:
+ case MAN_AXIS_TRANS_Z:
+ case MAN_AXIS_SCALE_X:
+ case MAN_AXIS_SCALE_Y:
+ case MAN_AXIS_SCALE_Z:
+ WM_manipulator_set_line_width(axis, MANIPULATOR_AXIS_LINE_WIDTH);
break;
- case 1: /* Y cube */
- if (drawflags & MAN_SCALE_Y) {
- glTranslatef(0.0, dz, 0.0);
- if (is_picksel) GPU_select_load_id(MAN_SCALE_Y);
- else manipulator_setcolor(v3d, 'Y', colcode, axisBlendAngle(rv3d->tw_idot[1]));
- drawsolidcube(cusize);
- glTranslatef(0.0, -dz, 0.0);
- }
+ case MAN_AXIS_ROT_X:
+ case MAN_AXIS_ROT_Y:
+ case MAN_AXIS_ROT_Z:
+ /* increased line width for better display */
+ WM_manipulator_set_line_width(axis, MANIPULATOR_AXIS_LINE_WIDTH + 1.0f);
+ WM_manipulator_set_flag(axis, WM_MANIPULATOR_DRAW_VALUE, true);
break;
- case 2: /* Z cube */
- if (drawflags & MAN_SCALE_Z) {
- glTranslatef(0.0, 0.0, dz);
- if (is_picksel) GPU_select_load_id(MAN_SCALE_Z);
- else manipulator_setcolor(v3d, 'Z', colcode, axisBlendAngle(rv3d->tw_idot[2]));
- drawsolidcube(cusize);
- glTranslatef(0.0, 0.0, -dz);
- }
+ case MAN_AXIS_TRANS_XY:
+ case MAN_AXIS_TRANS_YZ:
+ case MAN_AXIS_TRANS_ZX:
+ case MAN_AXIS_SCALE_XY:
+ case MAN_AXIS_SCALE_YZ:
+ case MAN_AXIS_SCALE_ZX:
+ {
+ const float ofs_ax = 11.0f;
+ const float ofs[3] = {ofs_ax, ofs_ax, 0.0f};
+ WM_manipulator_set_scale(axis, 0.07f);
+ WM_manipulator_set_matrix_offset_location(axis, ofs);
+ WM_manipulator_set_flag(axis, WM_MANIPULATOR_DRAW_OFFSET_SCALE, true);
break;
- }
- }
-
-#if 0 // XXX
- /* if shiftkey, center point as last, for selectbuffer order */
- if (is_picksel) {
- int shift = 0; // XXX
-
- if (shift) {
- glTranslatef(0.0, -dz, 0.0);
- GPU_select_load_id(MAN_SCALE_C);
- /* TODO: set glPointSize before drawing center point */
- glBegin(GL_POINTS);
- glVertex3f(0.0, 0.0, 0.0);
- glEnd();
- }
- }
-#endif
-
- /* restore */
- glLoadMatrixf(rv3d->viewmat);
-
- if (v3d->zbuf) glEnable(GL_DEPTH_TEST);
- glFrontFace(GL_CCW);
-}
-
-
-static void draw_cone(GLUquadricObj *qobj, float len, float width)
-{
- glTranslatef(0.0, 0.0, -0.5f * len);
- gluCylinder(qobj, width, 0.0, len, 8, 1);
- gluQuadricOrientation(qobj, GLU_INSIDE);
- gluDisk(qobj, 0.0, width, 8, 1);
- gluQuadricOrientation(qobj, GLU_OUTSIDE);
- glTranslatef(0.0, 0.0, 0.5f * len);
-}
-
-static void draw_cylinder(GLUquadricObj *qobj, float len, float width)
-{
-
- width *= 0.8f; // just for beauty
-
- glTranslatef(0.0, 0.0, -0.5f * len);
- gluCylinder(qobj, width, width, len, 8, 1);
- gluQuadricOrientation(qobj, GLU_INSIDE);
- gluDisk(qobj, 0.0, width, 8, 1);
- gluQuadricOrientation(qobj, GLU_OUTSIDE);
- glTranslatef(0.0, 0.0, len);
- gluDisk(qobj, 0.0, width, 8, 1);
- glTranslatef(0.0, 0.0, -0.5f * len);
-}
-
-
-static void draw_manipulator_translate(
- View3D *v3d, RegionView3D *rv3d, int drawflags, int combo, int colcode,
- const bool UNUSED(is_moving), const bool is_picksel)
-{
- GLUquadricObj *qobj;
- float cylen = 0.01f * (float)U.tw_handlesize;
- float cywid = 0.25f * cylen, dz, size;
- float unitmat[4][4];
- int shift = 0; // XXX
- int axis_order[3] = {0, 1, 2};
- int i;
-
- /* when called while moving in mixed mode, do not draw when... */
- if ((drawflags & MAN_TRANS_C) == 0) return;
-
- manipulator_axis_order(rv3d, axis_order);
-
- // XXX if (moving) glTranslate3fv(t->vec);
- glDisable(GL_DEPTH_TEST);
-
- /* center circle, do not add to selection when shift is pressed (planar constraint) */
- if (is_picksel && shift == 0) GPU_select_load_id(MAN_TRANS_C);
- else manipulator_setcolor(v3d, 'C', colcode, 255);
-
- glPushMatrix();
- size = screen_aligned(rv3d, rv3d->twmat);
- unit_m4(unitmat);
- drawcircball(GL_LINE_LOOP, unitmat[3], 0.2f * size, unitmat);
- glPopMatrix();
-
- /* and now apply matrix, we move to local matrix drawing */
- glMultMatrixf(rv3d->twmat);
-
- /* axis */
- GPU_select_load_id(-1);
-
- // translate drawn as last, only axis when no combo with scale, or for ghosting
- if ((combo & V3D_MANIP_SCALE) == 0 || colcode == MAN_GHOST) {
- draw_manipulator_axes(v3d, rv3d, colcode,
- drawflags & MAN_TRANS_X, drawflags & MAN_TRANS_Y, drawflags & MAN_TRANS_Z,
- axis_order, is_picksel);
- }
-
-
- /* offset in combo mode, for rotate a bit more */
- if (combo & (V3D_MANIP_ROTATE)) dz = 1.0f + 2.0f * cylen;
- else if (combo & (V3D_MANIP_SCALE)) dz = 1.0f + 0.5f * cylen;
- else dz = 1.0f;
-
- qobj = gluNewQuadric();
- gluQuadricDrawStyle(qobj, GLU_FILL);
-
- for (i = 0; i < 3; i++) {
- switch (axis_order[i]) {
- case 0: /* Z Cone */
- if (drawflags & MAN_TRANS_Z) {
- glTranslatef(0.0, 0.0, dz);
- if (is_picksel) GPU_select_load_id(MAN_TRANS_Z);
- else manipulator_setcolor(v3d, 'Z', colcode, axisBlendAngle(rv3d->tw_idot[2]));
- draw_cone(qobj, cylen, cywid);
- glTranslatef(0.0, 0.0, -dz);
+ }
+ case MAN_AXIS_TRANS_C:
+ case MAN_AXIS_ROT_C:
+ case MAN_AXIS_SCALE_C:
+ case MAN_AXIS_ROT_T:
+ WM_manipulator_set_line_width(axis, MANIPULATOR_AXIS_LINE_WIDTH);
+ if (axis_idx == MAN_AXIS_ROT_T) {
+ WM_manipulator_set_flag(axis, WM_MANIPULATOR_DRAW_HOVER, true);
}
- break;
- case 1: /* X Cone */
- if (drawflags & MAN_TRANS_X) {
- glTranslatef(dz, 0.0, 0.0);
- if (is_picksel) GPU_select_load_id(MAN_TRANS_X);
- else manipulator_setcolor(v3d, 'X', colcode, axisBlendAngle(rv3d->tw_idot[0]));
- glRotatef(90.0, 0.0, 1.0, 0.0);
- draw_cone(qobj, cylen, cywid);
- glRotatef(-90.0, 0.0, 1.0, 0.0);
- glTranslatef(-dz, 0.0, 0.0);
+ else if (axis_idx == MAN_AXIS_ROT_C) {
+ WM_manipulator_set_flag(axis, WM_MANIPULATOR_DRAW_VALUE, true);
}
- break;
- case 2: /* Y Cone */
- if (drawflags & MAN_TRANS_Y) {
- glTranslatef(0.0, dz, 0.0);
- if (is_picksel) GPU_select_load_id(MAN_TRANS_Y);
- else manipulator_setcolor(v3d, 'Y', colcode, axisBlendAngle(rv3d->tw_idot[1]));
- glRotatef(-90.0, 1.0, 0.0, 0.0);
- draw_cone(qobj, cylen, cywid);
- glRotatef(90.0, 1.0, 0.0, 0.0);
- glTranslatef(0.0, -dz, 0.0);
+ else {
+ WM_manipulator_set_scale(axis, 0.2f);
}
break;
}
- }
-
- gluDeleteQuadric(qobj);
- glLoadMatrixf(rv3d->viewmat);
-
- if (v3d->zbuf) glEnable(GL_DEPTH_TEST);
-
-}
-
-static void draw_manipulator_rotate_cyl(
- View3D *v3d, RegionView3D *rv3d, int drawflags, const int combo, const int colcode,
- const bool is_moving, const bool is_picksel)
-{
- GLUquadricObj *qobj;
- float size;
- float cylen = 0.01f * (float)U.tw_handlesize;
- float cywid = 0.25f * cylen;
- int axis_order[3] = {2, 0, 1};
- int i;
-
- /* skip drawing if all axes are locked */
- if (manipulator_rotate_is_visible(drawflags) == false) return;
-
- manipulator_axis_order(rv3d, axis_order);
-
- /* prepare for screen aligned draw */
- glPushMatrix();
- size = screen_aligned(rv3d, rv3d->twmat);
-
- glDisable(GL_DEPTH_TEST);
-
- qobj = gluNewQuadric();
-
- /* Screen aligned view rot circle */
- if (drawflags & MAN_ROT_V) {
- float unitmat[4][4];
-
- unit_m4(unitmat);
-
- if (is_picksel) GPU_select_load_id(MAN_ROT_V);
- UI_ThemeColor(TH_TRANSFORM);
- drawcircball(GL_LINE_LOOP, unitmat[3], 1.2f * size, unitmat);
-
- if (is_moving) {
- float vec[3];
- vec[0] = 0; // XXX (float)(t->mouse.imval[0] - t->center2d[0]);
- vec[1] = 0; // XXX (float)(t->mouse.imval[1] - t->center2d[1]);
- vec[2] = 0.0f;
- normalize_v3_length(vec, 1.2f * size);
- glBegin(GL_LINES);
- glVertex3f(0.0, 0.0, 0.0);
- glVertex3fv(vec);
- glEnd();
- }
- }
- glPopMatrix();
-
- /* apply the transform delta */
- if (is_moving) {
- float matt[4][4];
- copy_m4_m4(matt, rv3d->twmat); // to copy the parts outside of [3][3]
- // XXX if (t->flag & T_USES_MANIPULATOR) {
- // XXX mul_m4_m3m4(matt, t->mat, rv3d->twmat);
- // XXX }
- glMultMatrixf(matt);
- }
- else {
- glMultMatrixf(rv3d->twmat);
- }
-
- glFrontFace(is_negative_m4(rv3d->twmat) ? GL_CW : GL_CCW);
-
- /* axis */
- if (is_picksel == false) {
-
- // only draw axis when combo didn't draw scale axes
- if ((combo & V3D_MANIP_SCALE) == 0) {
- draw_manipulator_axes(v3d, rv3d, colcode,
- drawflags & MAN_ROT_X, drawflags & MAN_ROT_Y, drawflags & MAN_ROT_Z,
- axis_order, is_picksel);
- }
- /* only has to be set when not in picking */
- gluQuadricDrawStyle(qobj, GLU_FILL);
- }
-
- for (i = 0; i < 3; i++) {
- switch (axis_order[i]) {
- case 0: /* X cylinder */
- if (drawflags & MAN_ROT_X) {
- glTranslatef(1.0, 0.0, 0.0);
- if (is_picksel) GPU_select_load_id(MAN_ROT_X);
- glRotatef(90.0, 0.0, 1.0, 0.0);
- manipulator_setcolor(v3d, 'X', colcode, 255);
- draw_cylinder(qobj, cylen, cywid);
- glRotatef(-90.0, 0.0, 1.0, 0.0);
- glTranslatef(-1.0, 0.0, 0.0);
+ switch (axis_type) {
+ case MAN_AXES_TRANSLATE:
+ if (ot_store.translate == NULL) {
+ ot_store.translate = WM_operatortype_find("TRANSFORM_OT_translate", true);
}
+ ptr = WM_manipulator_operator_set(axis, 0, ot_store.translate, NULL);
break;
- case 1: /* Y cylinder */
- if (drawflags & MAN_ROT_Y) {
- glTranslatef(0.0, 1.0, 0.0);
- if (is_picksel) GPU_select_load_id(MAN_ROT_Y);
- glRotatef(-90.0, 1.0, 0.0, 0.0);
- manipulator_setcolor(v3d, 'Y', colcode, 255);
- draw_cylinder(qobj, cylen, cywid);
- glRotatef(90.0, 1.0, 0.0, 0.0);
- glTranslatef(0.0, -1.0, 0.0);
+ case MAN_AXES_ROTATE:
+ {
+ wmOperatorType *ot_rotate;
+ if (axis_idx == MAN_AXIS_ROT_T) {
+ if (ot_store.trackball == NULL) {
+ ot_store.trackball = WM_operatortype_find("TRANSFORM_OT_trackball", true);
+ }
+ ot_rotate = ot_store.trackball;
}
+ else {
+ if (ot_store.rotate == NULL) {
+ ot_store.rotate = WM_operatortype_find("TRANSFORM_OT_rotate", true);
+ }
+ ot_rotate = ot_store.rotate;
+ }
+ ptr = WM_manipulator_operator_set(axis, 0, ot_rotate, NULL);
break;
- case 2: /* Z cylinder */
- if (drawflags & MAN_ROT_Z) {
- glTranslatef(0.0, 0.0, 1.0);
- if (is_picksel) GPU_select_load_id(MAN_ROT_Z);
- manipulator_setcolor(v3d, 'Z', colcode, 255);
- draw_cylinder(qobj, cylen, cywid);
- glTranslatef(0.0, 0.0, -1.0);
+ }
+ case MAN_AXES_SCALE:
+ {
+ if (ot_store.resize == NULL) {
+ ot_store.resize = WM_operatortype_find("TRANSFORM_OT_resize", true);
}
+ ptr = WM_manipulator_operator_set(axis, 0, ot_store.resize, NULL);
break;
+ }
}
- }
-
- /* restore */
-
- gluDeleteQuadric(qobj);
- glLoadMatrixf(rv3d->viewmat);
- if (v3d->zbuf) glEnable(GL_DEPTH_TEST);
+ {
+ PropertyRNA *prop;
+ if ((prop = RNA_struct_find_property(ptr, "constraint_axis"))) {
+ RNA_property_boolean_set_array(ptr, prop, constraint_axis);
+ }
+ }
+ RNA_boolean_set(ptr, "release_confirm", 1);
+ }
+ MAN_ITER_AXES_END;
}
-
-/* ********************************************* */
-
-/* main call, does calc centers & orientation too */
-static int drawflags = 0xFFFF; // only for the calls below, belongs in scene...?
-
-void BIF_draw_manipulator(const bContext *C)
+static void WIDGETGROUP_manipulator_refresh(const bContext *C, wmManipulatorGroup *mgroup)
{
+ ManipulatorGroup *man = mgroup->customdata;
ScrArea *sa = CTX_wm_area(C);
ARegion *ar = CTX_wm_region(C);
- Scene *scene = CTX_data_scene(C);
View3D *v3d = sa->spacedata.first;
RegionView3D *rv3d = ar->regiondata;
- int totsel;
+ struct TransformBounds tbounds;
- const bool is_picksel = false;
+ /* skip, we don't draw anything anyway */
+ if ((man->all_hidden = (calc_manipulator_stats(C, true, &tbounds) == 0)))
+ return;
- if (!(v3d->twflag & V3D_USE_MANIPULATOR)) return;
+ manipulator_prepare_mat(C, v3d, rv3d, &tbounds);
- if ((v3d->twtype & (V3D_MANIP_TRANSLATE | V3D_MANIP_ROTATE | V3D_MANIP_SCALE)) == 0) return;
+ /* *** set properties for axes *** */
+ MAN_ITER_AXES_BEGIN(axis, axis_idx)
{
- struct TransformBounds tbounds;
- v3d->twflag &= ~V3D_DRAW_MANIPULATOR;
-
- totsel = calc_manipulator_stats(C, &tbounds);
- if (totsel == 0) return;
-
- v3d->twflag |= V3D_DRAW_MANIPULATOR;
-
- /* now we can define center */
- switch (v3d->around) {
- case V3D_AROUND_CENTER_BOUNDS:
- case V3D_AROUND_ACTIVE:
+ const short axis_type = manipulator_get_axis_type(axis_idx);
+ const int aidx_norm = manipulator_orientation_axis(axis_idx, NULL);
+
+ WM_manipulator_set_matrix_location(axis, rv3d->twmat[3]);
+
+ switch (axis_idx) {
+ case MAN_AXIS_TRANS_X:
+ case MAN_AXIS_TRANS_Y:
+ case MAN_AXIS_TRANS_Z:
+ case MAN_AXIS_SCALE_X:
+ case MAN_AXIS_SCALE_Y:
+ case MAN_AXIS_SCALE_Z:
{
- bGPdata *gpd = CTX_data_gpencil_data(C);
- Object *ob = OBACT;
+ float start_co[3] = {0.0f, 0.0f, 0.0f};
+ float len;
- if (((v3d->around == V3D_AROUND_ACTIVE) && (scene->obedit == NULL)) &&
- ((gpd == NULL) || !(gpd->flag & GP_DATA_STROKE_EDITMODE)) &&
- (ob && !(ob->mode & OB_MODE_POSE)))
- {
- copy_v3_v3(rv3d->twmat[3], ob->obmat[3]);
- }
- else {
- mid_v3_v3v3(rv3d->twmat[3], tbounds.min, tbounds.max);
- }
+ manipulator_line_range(v3d, axis_type, &start_co[2], &len);
+
+ WM_manipulator_set_matrix_rotation_from_z_axis(axis, rv3d->twmat[aidx_norm]);
+ RNA_float_set(axis->ptr, "length", len);
+ WM_manipulator_set_matrix_offset_location(axis, start_co);
+ WM_manipulator_set_flag(axis, WM_MANIPULATOR_DRAW_OFFSET_SCALE, true);
break;
}
- case V3D_AROUND_LOCAL_ORIGINS:
- case V3D_AROUND_CENTER_MEAN:
- copy_v3_v3(rv3d->twmat[3], tbounds.center);
+ case MAN_AXIS_ROT_X:
+ case MAN_AXIS_ROT_Y:
+ case MAN_AXIS_ROT_Z:
+ WM_manipulator_set_matrix_rotation_from_z_axis(axis, rv3d->twmat[aidx_norm]);
break;
- case V3D_AROUND_CURSOR:
- copy_v3_v3(rv3d->twmat[3], ED_view3d_cursor3d_get(scene, v3d));
+ case MAN_AXIS_TRANS_XY:
+ case MAN_AXIS_TRANS_YZ:
+ case MAN_AXIS_TRANS_ZX:
+ case MAN_AXIS_SCALE_XY:
+ case MAN_AXIS_SCALE_YZ:
+ case MAN_AXIS_SCALE_ZX:
+ {
+ const float *y_axis = rv3d->twmat[aidx_norm - 1 < 0 ? 2 : aidx_norm - 1];
+ const float *z_axis = rv3d->twmat[aidx_norm];
+ WM_manipulator_set_matrix_rotation_from_yz_axis(axis, y_axis, z_axis);
break;
+ }
}
-
- mul_mat3_m4_fl(rv3d->twmat, ED_view3d_pixel_size(rv3d, rv3d->twmat[3]) * U.tw_size);
}
+ MAN_ITER_AXES_END;
+}
+
+static void WIDGETGROUP_manipulator_message_subscribe(
+ const bContext *C, wmManipulatorGroup *mgroup, struct wmMsgBus *mbus)
+{
+ bScreen *screen = CTX_wm_screen(C);
+ ScrArea *sa = CTX_wm_area(C);
+ ARegion *ar = CTX_wm_region(C);
+ manipulator_xform_message_subscribe(mgroup, mbus, screen, sa, ar, TRANSFORM_WGT_manipulator);
+}
+
+static void WIDGETGROUP_manipulator_draw_prepare(const bContext *C, wmManipulatorGroup *mgroup)
+{
+ ManipulatorGroup *man = mgroup->customdata;
+ ScrArea *sa = CTX_wm_area(C);
+ ARegion *ar = CTX_wm_region(C);
+ View3D *v3d = sa->spacedata.first;
+ RegionView3D *rv3d = ar->regiondata;
+ float idot[3];
/* when looking through a selected camera, the manipulator can be at the
* exact same position as the view, skip so we don't break selection */
- if (fabsf(mat4_to_scale(rv3d->twmat)) < 1e-7f)
+ if (man->all_hidden || fabsf(ED_view3d_pixel_size(rv3d, rv3d->twmat[3])) < 1e-6f) {
+ MAN_ITER_AXES_BEGIN(axis, axis_idx)
+ {
+ WM_manipulator_set_flag(axis, WM_MANIPULATOR_HIDDEN, true);
+ }
+ MAN_ITER_AXES_END;
return;
+ }
+ manipulator_get_idot(rv3d, idot);
- test_manipulator_axis(C);
- drawflags = rv3d->twdrawflag; /* set in calc_manipulator_stats */
-
- if (v3d->twflag & V3D_DRAW_MANIPULATOR) {
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glEnable(GL_BLEND);
- glLineWidth(1.0f);
+ /* *** set properties for axes *** */
- if (v3d->twtype & V3D_MANIP_ROTATE) {
- if (G.debug_value == 3) {
- if (G.moving & (G_TRANSFORM_OBJ | G_TRANSFORM_EDIT))
- draw_manipulator_rotate_cyl(v3d, rv3d, drawflags, v3d->twtype, MAN_MOVECOL, true, is_picksel);
- else
- draw_manipulator_rotate_cyl(v3d, rv3d, drawflags, v3d->twtype, MAN_RGB, false, is_picksel);
- }
- else {
- draw_manipulator_rotate(v3d, rv3d, drawflags, v3d->twtype, false, is_picksel);
- }
- }
- if (v3d->twtype & V3D_MANIP_SCALE) {
- draw_manipulator_scale(v3d, rv3d, drawflags, v3d->twtype, MAN_RGB, false, is_picksel);
+ MAN_ITER_AXES_BEGIN(axis, axis_idx)
+ {
+ const short axis_type = manipulator_get_axis_type(axis_idx);
+ /* XXX maybe unset _HIDDEN flag on redraw? */
+ if (manipulator_is_axis_visible(v3d, rv3d, idot, axis_type, axis_idx)) {
+ WM_manipulator_set_flag(axis, WM_MANIPULATOR_HIDDEN, false);
}
- if (v3d->twtype & V3D_MANIP_TRANSLATE) {
- draw_manipulator_translate(v3d, rv3d, drawflags, v3d->twtype, MAN_RGB, false, is_picksel);
+ else {
+ WM_manipulator_set_flag(axis, WM_MANIPULATOR_HIDDEN, true);
+ continue;
}
- glDisable(GL_BLEND);
+ float color[4], color_hi[4];
+ manipulator_get_axis_color(axis_idx, idot, color, color_hi);
+ WM_manipulator_set_color(axis, color);
+ WM_manipulator_set_color_highlight(axis, color_hi);
+
+ switch (axis_idx) {
+ case MAN_AXIS_TRANS_C:
+ case MAN_AXIS_ROT_C:
+ case MAN_AXIS_SCALE_C:
+ case MAN_AXIS_ROT_T:
+ WM_manipulator_set_matrix_rotation_from_z_axis(axis, rv3d->viewinv[2]);
+ break;
+ }
}
+ MAN_ITER_AXES_END;
}
-static int manipulator_selectbuf(Scene *scene, ScrArea *sa, ARegion *ar, const int mval[2], float hotspot)
+static bool WIDGETGROUP_manipulator_poll(const struct bContext *C, struct wmManipulatorGroupType *UNUSED(wgt))
{
- View3D *v3d = sa->spacedata.first;
- RegionView3D *rv3d = ar->regiondata;
- rcti rect;
- GLuint buffer[64]; // max 4 items per select, so large enuf
- short hits;
- const bool is_picksel = true;
- const bool do_passes = GPU_select_query_check_active();
+ /* it's a given we only use this in 3D view */
+ const ScrArea *sa = CTX_wm_area(C);
+ const View3D *v3d = sa->spacedata.first;
- /* when looking through a selected camera, the manipulator can be at the
- * exact same position as the view, skip so we don't break selection */
- if (fabsf(mat4_to_scale(rv3d->twmat)) < 1e-7f)
- return 0;
+ if (((v3d->twflag & V3D_MANIPULATOR_DRAW) != 0) &&
+ ((v3d->twtype & (V3D_MANIP_TRANSLATE | V3D_MANIP_ROTATE | V3D_MANIP_SCALE)) != 0))
+ {
+ /* Don't show when tools have a manipulator. */
+ WorkSpace *workspace = CTX_wm_workspace(C);
+ if (workspace->tool.manipulator_group[0] == '\0') {
+ return true;
+ }
+ }
+ return false;
+}
- rect.xmin = mval[0] - hotspot;
- rect.xmax = mval[0] + hotspot;
- rect.ymin = mval[1] - hotspot;
- rect.ymax = mval[1] + hotspot;
+void TRANSFORM_WGT_manipulator(wmManipulatorGroupType *wgt)
+{
+ wgt->name = "Transform Manipulator";
+ wgt->idname = "TRANSFORM_WGT_manipulator";
- ED_view3d_draw_setup_view(NULL, scene, ar, v3d, NULL, NULL, &rect);
+ wgt->flag |= (WM_MANIPULATORGROUPTYPE_PERSISTENT |
+ WM_MANIPULATORGROUPTYPE_3D);
- if (do_passes)
- GPU_select_begin(buffer, 64, &rect, GPU_SELECT_NEAREST_FIRST_PASS, 0);
- else
- GPU_select_begin(buffer, 64, &rect, GPU_SELECT_ALL, 0);
+ wgt->poll = WIDGETGROUP_manipulator_poll;
+ wgt->setup = WIDGETGROUP_manipulator_setup;
+ wgt->refresh = WIDGETGROUP_manipulator_refresh;
+ wgt->message_subscribe = WIDGETGROUP_manipulator_message_subscribe;
+ wgt->draw_prepare = WIDGETGROUP_manipulator_draw_prepare;
+}
- /* do the drawing */
- if (v3d->twtype & V3D_MANIP_ROTATE) {
- if (G.debug_value == 3) draw_manipulator_rotate_cyl(v3d, rv3d, MAN_ROT_C & rv3d->twdrawflag, v3d->twtype, MAN_RGB, false, is_picksel);
- else draw_manipulator_rotate(v3d, rv3d, MAN_ROT_C & rv3d->twdrawflag, v3d->twtype, false, is_picksel);
- }
- if (v3d->twtype & V3D_MANIP_SCALE)
- draw_manipulator_scale(v3d, rv3d, MAN_SCALE_C & rv3d->twdrawflag, v3d->twtype, MAN_RGB, false, is_picksel);
- if (v3d->twtype & V3D_MANIP_TRANSLATE)
- draw_manipulator_translate(v3d, rv3d, MAN_TRANS_C & rv3d->twdrawflag, v3d->twtype, MAN_RGB, false, is_picksel);
+/** \} */
- hits = GPU_select_end();
- if (do_passes && (hits > 0)) {
- GPU_select_begin(buffer, 64, &rect, GPU_SELECT_NEAREST_SECOND_PASS, hits);
+/* -------------------------------------------------------------------- */
+/** \name Scale Cage Manipulator
+ * \{ */
- /* do the drawing */
- if (v3d->twtype & V3D_MANIP_ROTATE) {
- if (G.debug_value == 3) draw_manipulator_rotate_cyl(v3d, rv3d, MAN_ROT_C & rv3d->twdrawflag, v3d->twtype, MAN_RGB, false, is_picksel);
- else draw_manipulator_rotate(v3d, rv3d, MAN_ROT_C & rv3d->twdrawflag, v3d->twtype, false, is_picksel);
- }
- if (v3d->twtype & V3D_MANIP_SCALE)
- draw_manipulator_scale(v3d, rv3d, MAN_SCALE_C & rv3d->twdrawflag, v3d->twtype, MAN_RGB, false, is_picksel);
- if (v3d->twtype & V3D_MANIP_TRANSLATE)
- draw_manipulator_translate(v3d, rv3d, MAN_TRANS_C & rv3d->twdrawflag, v3d->twtype, MAN_RGB, false, is_picksel);
+struct XFormCageWidgetGroup {
+ wmManipulator *manipulator;
+};
- GPU_select_end();
+static bool WIDGETGROUP_xform_cage_poll(const bContext *C, wmManipulatorGroupType *wgt)
+{
+ WorkSpace *workspace = CTX_wm_workspace(C);
+ if (!STREQ(wgt->idname, workspace->tool.manipulator_group)) {
+ WM_manipulator_group_type_unlink_delayed_ptr(wgt);
+ return false;
}
+ return true;
+}
- ED_view3d_draw_setup_view(NULL, scene, ar, v3d, NULL, NULL, NULL);
+static void WIDGETGROUP_xform_cage_setup(const bContext *UNUSED(C), wmManipulatorGroup *mgroup)
+{
+ struct XFormCageWidgetGroup *xmgroup = MEM_mallocN(sizeof(struct XFormCageWidgetGroup), __func__);
+ const wmManipulatorType *wt_cage = WM_manipulatortype_find("MANIPULATOR_WT_cage_3d", true);
+ xmgroup->manipulator = WM_manipulator_new_ptr(wt_cage, mgroup, NULL);
+ wmManipulator *mpr = xmgroup->manipulator;
- if (hits == 1) return buffer[3];
- else if (hits > 1) {
- GLuint val, dep, mindep = 0, mindeprot = 0, minval = 0, minvalrot = 0;
- int a;
+ RNA_enum_set(mpr->ptr, "transform",
+ ED_MANIPULATOR_CAGE2D_XFORM_FLAG_SCALE |
+ ED_MANIPULATOR_CAGE2D_XFORM_FLAG_TRANSLATE);
- /* we compare the hits in buffer, but value centers highest */
- /* we also store the rotation hits separate (because of arcs) and return hits on other widgets if there are */
+ mpr->color[0] = 1;
+ mpr->color_hi[0] =1;
- for (a = 0; a < hits; a++) {
- dep = buffer[4 * a + 1];
- val = buffer[4 * a + 3];
+ mgroup->customdata = xmgroup;
- if (val == MAN_TRANS_C) {
- return MAN_TRANS_C;
- }
- else if (val == MAN_SCALE_C) {
- return MAN_SCALE_C;
- }
- else {
- if (val & MAN_ROT_C) {
- if (minvalrot == 0 || dep < mindeprot) {
- mindeprot = dep;
- minvalrot = val;
- }
- }
- else {
- if (minval == 0 || dep < mindep) {
- mindep = dep;
- minval = val;
+ {
+ wmOperatorType *ot_resize = WM_operatortype_find("TRANSFORM_OT_resize", true);
+ PointerRNA *ptr;
+
+ /* assign operator */
+ PropertyRNA *prop_release_confirm = NULL;
+ PropertyRNA *prop_constraint_axis = NULL;
+
+ int i = ED_MANIPULATOR_CAGE3D_PART_SCALE_MIN_X_MIN_Y_MIN_Z;
+ for (int x = 0; x < 3; x++) {
+ for (int y = 0; y < 3; y++) {
+ for (int z = 0; z < 3; z++) {
+ int constraint[3] = {x != 1, y != 1, z != 1};
+ ptr = WM_manipulator_operator_set(mpr, i, ot_resize, NULL);
+ if (prop_release_confirm == NULL) {
+ prop_release_confirm = RNA_struct_find_property(ptr, "release_confirm");
+ prop_constraint_axis = RNA_struct_find_property(ptr, "constraint_axis");
}
+ RNA_property_boolean_set(ptr, prop_release_confirm, true);
+ RNA_property_boolean_set_array(ptr, prop_constraint_axis, constraint);
+ i++;
}
}
}
-
- if (minval)
- return minval;
- else
- return minvalrot;
}
- return 0;
}
-static const char *manipulator_get_operator_name(int man_val)
+static void WIDGETGROUP_xform_cage_refresh(const bContext *C, wmManipulatorGroup *mgroup)
{
- if (man_val & MAN_TRANS_C) {
- return "TRANSFORM_OT_translate";
- }
- else if (man_val == MAN_ROT_T) {
- return "TRANSFORM_OT_trackball";
- }
- else if (man_val & MAN_ROT_C) {
- return "TRANSFORM_OT_rotate";
- }
- else if (man_val & MAN_SCALE_C) {
- return "TRANSFORM_OT_resize";
- }
-
- return NULL;
-}
-
-/* return 0; nothing happened */
-int BIF_do_manipulator(bContext *C, const struct wmEvent *event, wmOperator *op)
-{
- Scene *scene = CTX_data_scene(C);
ScrArea *sa = CTX_wm_area(C);
View3D *v3d = sa->spacedata.first;
ARegion *ar = CTX_wm_region(C);
- int constraint_axis[3] = {0, 0, 0};
- int val;
- const bool use_planar = RNA_boolean_get(op->ptr, "use_planar_constraint");
-
- if (!(v3d->twflag & V3D_USE_MANIPULATOR)) return 0;
- if (!(v3d->twflag & V3D_DRAW_MANIPULATOR)) return 0;
-
- /* Force orientation */
- RNA_enum_set(op->ptr, "constraint_orientation", v3d->twmode);
-
- // find the hotspots first test narrow hotspot
- val = manipulator_selectbuf(scene, sa, ar, event->mval, 0.5f * (float)U.tw_hotspot);
- if (val) {
- wmOperatorType *ot;
- PointerRNA props_ptr;
- PropertyRNA *prop;
- const char *opname;
-
- // drawflags still global, for drawing call above
- drawflags = manipulator_selectbuf(scene, sa, ar, event->mval, 0.2f * (float)U.tw_hotspot);
- if (drawflags == 0) drawflags = val;
-
- /* Planar constraint doesn't make sense for rotation, give other keymaps a chance */
- if ((drawflags & MAN_ROT_C) && use_planar) {
- return 0;
- }
+ RegionView3D *rv3d = ar->regiondata;
- opname = manipulator_get_operator_name(drawflags);
- ot = WM_operatortype_find(opname, true);
- WM_operator_properties_create_ptr(&props_ptr, ot);
+ struct XFormCageWidgetGroup *xmgroup = mgroup->customdata;
+ wmManipulator *mpr = xmgroup->manipulator;
- if (drawflags & MAN_TRANS_C) {
- switch (drawflags) {
- case MAN_TRANS_C:
- break;
- case MAN_TRANS_X:
- if (use_planar) {
- constraint_axis[1] = 1;
- constraint_axis[2] = 1;
- }
- else
- constraint_axis[0] = 1;
- break;
- case MAN_TRANS_Y:
- if (use_planar) {
- constraint_axis[0] = 1;
- constraint_axis[2] = 1;
- }
- else
- constraint_axis[1] = 1;
- break;
- case MAN_TRANS_Z:
- if (use_planar) {
- constraint_axis[0] = 1;
- constraint_axis[1] = 1;
- }
- else
- constraint_axis[2] = 1;
- break;
- }
- RNA_boolean_set_array(&props_ptr, "constraint_axis", constraint_axis);
- }
- else if (drawflags & MAN_SCALE_C) {
- switch (drawflags) {
- case MAN_SCALE_X:
- if (use_planar) {
- constraint_axis[1] = 1;
- constraint_axis[2] = 1;
- }
- else
- constraint_axis[0] = 1;
- break;
- case MAN_SCALE_Y:
- if (use_planar) {
- constraint_axis[0] = 1;
- constraint_axis[2] = 1;
- }
- else
- constraint_axis[1] = 1;
- break;
- case MAN_SCALE_Z:
- if (use_planar) {
- constraint_axis[0] = 1;
- constraint_axis[1] = 1;
+ struct TransformBounds tbounds;
+
+ if ((calc_manipulator_stats(C, false, &tbounds) == 0) ||
+ equals_v3v3(rv3d->tw_axis_min, rv3d->tw_axis_max))
+ {
+ WM_manipulator_set_flag(mpr, WM_MANIPULATOR_HIDDEN, true);
+ }
+ else {
+ manipulator_prepare_mat(C, v3d, rv3d, &tbounds);
+
+ WM_manipulator_set_flag(mpr, WM_MANIPULATOR_HIDDEN, false);
+ WM_manipulator_set_flag(mpr, WM_MANIPULATOR_GRAB_CURSOR, true);
+
+ float dims[3];
+ sub_v3_v3v3(dims, rv3d->tw_axis_max, rv3d->tw_axis_min);
+ RNA_float_set_array(mpr->ptr, "dimensions", dims);
+ mul_v3_fl(dims, 0.5f);
+
+ copy_m4_m3(mpr->matrix_offset, rv3d->tw_axis_matrix);
+ mid_v3_v3v3(mpr->matrix_offset[3], rv3d->tw_axis_max, rv3d->tw_axis_min);
+ mul_m3_v3(rv3d->tw_axis_matrix, mpr->matrix_offset[3]);
+
+ PropertyRNA *prop_center_override = NULL;
+ float center[3];
+ float center_global[3];
+ int i = ED_MANIPULATOR_CAGE3D_PART_SCALE_MIN_X_MIN_Y_MIN_Z;
+ for (int x = 0; x < 3; x++) {
+ center[0] = (float)(1 - x) * dims[0];
+ for (int y = 0; y < 3; y++) {
+ center[1] = (float)(1 - y) * dims[1];
+ for (int z = 0; z < 3; z++) {
+ center[2] = (float)(1 - z) * dims[2];
+ struct wmManipulatorOpElem *mpop = WM_manipulator_operator_get(mpr, i);
+ if (prop_center_override == NULL) {
+ prop_center_override = RNA_struct_find_property(&mpop->ptr, "center_override");
}
- else
- constraint_axis[2] = 1;
- break;
- }
- RNA_boolean_set_array(&props_ptr, "constraint_axis", constraint_axis);
- }
- else if (drawflags == MAN_ROT_T) {
- /* pass */
- }
- else if (drawflags & MAN_ROT_C) {
- switch (drawflags) {
- case MAN_ROT_X:
- constraint_axis[0] = 1;
- break;
- case MAN_ROT_Y:
- constraint_axis[1] = 1;
- break;
- case MAN_ROT_Z:
- constraint_axis[2] = 1;
- break;
+ mul_v3_m4v3(center_global, mpr->matrix_offset, center);
+ RNA_property_float_set_array(&mpop->ptr, prop_center_override, center_global);
+ i++;
+ }
}
- RNA_boolean_set_array(&props_ptr, "constraint_axis", constraint_axis);
}
+ }
+}
- /* pass operator properties on to transform operators */
- prop = RNA_struct_find_property(op->ptr, "use_accurate");
- if (RNA_property_is_set(op->ptr, prop)) {
- RNA_property_boolean_set(&props_ptr, prop, RNA_property_boolean_get(op->ptr, prop));
- }
- prop = RNA_struct_find_property(op->ptr, "release_confirm");
- if (RNA_property_is_set(op->ptr, prop)) {
- RNA_property_boolean_set(&props_ptr, prop, RNA_property_boolean_get(op->ptr, prop));
- }
- prop = RNA_struct_find_property(op->ptr, "constraint_orientation");
- if (RNA_property_is_set(op->ptr, prop)) {
- RNA_property_enum_set(&props_ptr, prop, RNA_property_enum_get(op->ptr, prop));
- }
+static void WIDGETGROUP_xform_cage_message_subscribe(
+ const bContext *C, wmManipulatorGroup *mgroup, struct wmMsgBus *mbus)
+{
+ bScreen *screen = CTX_wm_screen(C);
+ ScrArea *sa = CTX_wm_area(C);
+ ARegion *ar = CTX_wm_region(C);
+ manipulator_xform_message_subscribe(mgroup, mbus, screen, sa, ar, VIEW3D_WGT_xform_cage);
+}
- WM_operator_name_call_ptr(C, ot, WM_OP_INVOKE_DEFAULT, &props_ptr);
- WM_operator_properties_free(&props_ptr);
+static void WIDGETGROUP_xform_cage_draw_prepare(const bContext *C, wmManipulatorGroup *mgroup)
+{
+ struct XFormCageWidgetGroup *xmgroup = mgroup->customdata;
+ wmManipulator *mpr = xmgroup->manipulator;
+ const WorkSpace *workspace = CTX_wm_workspace(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Object *ob = OBACT(view_layer);
+ if (ob && workspace->object_mode & OB_MODE_EDIT) {
+ copy_m4_m4(mpr->matrix_space, ob->obmat);
+ }
+ else {
+ unit_m4(mpr->matrix_space);
}
- /* after transform, restore drawflags */
- drawflags = 0xFFFF;
+}
+
+void VIEW3D_WGT_xform_cage(wmManipulatorGroupType *wgt)
+{
+ wgt->name = "Transform Cage";
+ wgt->idname = "VIEW3D_WGT_xform_cage";
+
+ wgt->flag |= WM_MANIPULATORGROUPTYPE_3D;
+
+ wgt->mmap_params.spaceid = SPACE_VIEW3D;
+ wgt->mmap_params.regionid = RGN_TYPE_WINDOW;
- return val;
+ wgt->poll = WIDGETGROUP_xform_cage_poll;
+ wgt->setup = WIDGETGROUP_xform_cage_setup;
+ wgt->refresh = WIDGETGROUP_xform_cage_refresh;
+ wgt->message_subscribe = WIDGETGROUP_xform_cage_message_subscribe;
+ wgt->draw_prepare = WIDGETGROUP_xform_cage_draw_prepare;
}
+/** \} */
diff --git a/source/blender/editors/transform/transform_manipulator2d.c b/source/blender/editors/transform/transform_manipulator2d.c
new file mode 100644
index 00000000000..6e2d0d8c5c0
--- /dev/null
+++ b/source/blender/editors/transform/transform_manipulator2d.c
@@ -0,0 +1,383 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2016 Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/editors/transform/transform_manipulator2d.c
+ * \ingroup edtransform
+ *
+ * \name 2D Transform Manipulator
+ *
+ * Used for UV/Image Editor
+ */
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_listbase.h"
+#include "BLI_math.h"
+
+#include "DNA_meshdata_types.h"
+#include "DNA_object_types.h"
+#include "DNA_screen_types.h"
+#include "DNA_space_types.h"
+#include "DNA_view3d_types.h"
+
+#include "BKE_context.h"
+#include "BKE_editmesh.h"
+
+#include "RNA_access.h"
+
+#include "UI_resources.h"
+#include "UI_view2d.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+#include "wm.h" /* XXX */
+
+#include "ED_image.h"
+#include "ED_screen.h"
+#include "ED_uvedit.h"
+#include "ED_manipulator_library.h"
+
+#include "transform.h" /* own include */
+
+/* axes as index */
+enum {
+ MAN2D_AXIS_TRANS_X = 0,
+ MAN2D_AXIS_TRANS_Y,
+
+ MAN2D_AXIS_LAST,
+};
+
+typedef struct ManipulatorGroup2D {
+ wmManipulator *translate_x,
+ *translate_y;
+
+ wmManipulator *cage;
+
+ /* Current origin in view space, used to update widget origin for possible view changes */
+ float origin[2];
+ float min[2];
+ float max[2];
+
+} ManipulatorGroup2D;
+
+
+/* **************** Utilities **************** */
+
+/* loop over axes */
+#define MAN2D_ITER_AXES_BEGIN(axis, axis_idx) \
+ { \
+ wmManipulator *axis; \
+ int axis_idx; \
+ for (axis_idx = 0; axis_idx < MAN2D_AXIS_LAST; axis_idx++) { \
+ axis = manipulator2d_get_axis_from_index(man, axis_idx);
+
+#define MAN2D_ITER_AXES_END \
+ } \
+ } ((void)0)
+
+static wmManipulator *manipulator2d_get_axis_from_index(const ManipulatorGroup2D *man, const short axis_idx)
+{
+ BLI_assert(IN_RANGE_INCL(axis_idx, (float)MAN2D_AXIS_TRANS_X, (float)MAN2D_AXIS_TRANS_Y));
+
+ switch (axis_idx) {
+ case MAN2D_AXIS_TRANS_X:
+ return man->translate_x;
+ case MAN2D_AXIS_TRANS_Y:
+ return man->translate_y;
+ }
+
+ return NULL;
+}
+
+static void manipulator2d_get_axis_color(const int axis_idx, float *r_col, float *r_col_hi)
+{
+ const float alpha = 0.6f;
+ const float alpha_hi = 1.0f;
+ int col_id;
+
+ switch (axis_idx) {
+ case MAN2D_AXIS_TRANS_X:
+ col_id = TH_AXIS_X;
+ break;
+ case MAN2D_AXIS_TRANS_Y:
+ col_id = TH_AXIS_Y;
+ break;
+ }
+
+ UI_GetThemeColor4fv(col_id, r_col);
+
+ copy_v4_v4(r_col_hi, r_col);
+ r_col[3] *= alpha;
+ r_col_hi[3] *= alpha_hi;
+}
+
+static ManipulatorGroup2D *manipulatorgroup2d_init(wmManipulatorGroup *mgroup)
+{
+ const wmManipulatorType *wt_arrow = WM_manipulatortype_find("MANIPULATOR_WT_arrow_2d", true);
+ const wmManipulatorType *wt_cage = WM_manipulatortype_find("MANIPULATOR_WT_cage_2d", true);
+
+ ManipulatorGroup2D *man = MEM_callocN(sizeof(ManipulatorGroup2D), __func__);
+
+ man->translate_x = WM_manipulator_new_ptr(wt_arrow, mgroup, NULL);
+ man->translate_y = WM_manipulator_new_ptr(wt_arrow, mgroup, NULL);
+ man->cage = WM_manipulator_new_ptr(wt_cage, mgroup, NULL);
+
+ RNA_enum_set(man->cage->ptr, "transform",
+ ED_MANIPULATOR_CAGE2D_XFORM_FLAG_TRANSLATE |
+ ED_MANIPULATOR_CAGE2D_XFORM_FLAG_SCALE |
+ ED_MANIPULATOR_CAGE2D_XFORM_FLAG_ROTATE);
+
+ return man;
+}
+
+/**
+ * Calculates origin in view space, use with #manipulator2d_origin_to_region.
+ */
+static void manipulator2d_calc_bounds(const bContext *C, float *r_center, float *r_min, float *r_max)
+{
+ SpaceImage *sima = CTX_wm_space_image(C);
+ Image *ima = ED_space_image(sima);
+
+ float min_buf[2], max_buf[2];
+ if (r_min == NULL) {
+ r_min = min_buf;
+ }
+ if (r_max == NULL) {
+ r_max = max_buf;
+ }
+
+ if (!ED_uvedit_minmax(CTX_data_scene(C), ima, CTX_data_edit_object(C), r_min, r_max)) {
+ zero_v2(r_min);
+ zero_v2(r_max);
+ }
+ mid_v2_v2v2(r_center, r_min, r_max);
+}
+
+/**
+ * Convert origin (or any other point) from view to region space.
+ */
+BLI_INLINE void manipulator2d_origin_to_region(ARegion *ar, float *r_origin)
+{
+ UI_view2d_view_to_region_fl(&ar->v2d, r_origin[0], r_origin[1], &r_origin[0], &r_origin[1]);
+}
+
+/**
+ * Custom handler for manipulator widgets
+ */
+static int manipulator2d_modal(
+ bContext *C, wmManipulator *widget, const wmEvent *UNUSED(event),
+ eWM_ManipulatorTweak UNUSED(tweak_flag))
+{
+ ARegion *ar = CTX_wm_region(C);
+ float origin[3];
+
+ manipulator2d_calc_bounds(C, origin, NULL, NULL);
+ manipulator2d_origin_to_region(ar, origin);
+ WM_manipulator_set_matrix_location(widget, origin);
+
+ ED_region_tag_redraw(ar);
+
+ return OPERATOR_RUNNING_MODAL;
+}
+
+void ED_widgetgroup_manipulator2d_setup(const bContext *UNUSED(C), wmManipulatorGroup *mgroup)
+{
+ wmOperatorType *ot_translate = WM_operatortype_find("TRANSFORM_OT_translate", true);
+ ManipulatorGroup2D *man = manipulatorgroup2d_init(mgroup);
+ mgroup->customdata = man;
+
+ MAN2D_ITER_AXES_BEGIN(axis, axis_idx)
+ {
+ const float offset[3] = {0.0f, 0.2f};
+
+ float color[4], color_hi[4];
+ manipulator2d_get_axis_color(axis_idx, color, color_hi);
+
+ /* custom handler! */
+ WM_manipulator_set_fn_custom_modal(axis, manipulator2d_modal);
+ /* set up widget data */
+ RNA_float_set(axis->ptr, "angle", -M_PI_2 * axis_idx);
+ RNA_float_set(axis->ptr, "length", 0.8f);
+ WM_manipulator_set_matrix_offset_location(axis, offset);
+ WM_manipulator_set_line_width(axis, MANIPULATOR_AXIS_LINE_WIDTH);
+ WM_manipulator_set_scale(axis, U.manipulator_size);
+ WM_manipulator_set_color(axis, color);
+ WM_manipulator_set_color_highlight(axis, color_hi);
+
+ /* assign operator */
+ PointerRNA *ptr = WM_manipulator_operator_set(axis, 0, ot_translate, NULL);
+ int constraint[3] = {0};
+ constraint[(axis_idx + 1) % 2] = 1;
+ if (RNA_struct_find_property(ptr, "constraint_axis"))
+ RNA_boolean_set_array(ptr, "constraint_axis", constraint);
+ RNA_boolean_set(ptr, "release_confirm", 1);
+ }
+ MAN2D_ITER_AXES_END;
+
+ {
+ wmOperatorType *ot_resize = WM_operatortype_find("TRANSFORM_OT_resize", true);
+ wmOperatorType *ot_rotate = WM_operatortype_find("TRANSFORM_OT_rotate", true);
+ PointerRNA *ptr;
+
+ /* assign operator */
+ ptr = WM_manipulator_operator_set(man->cage, 0, ot_translate, NULL);
+ RNA_boolean_set(ptr, "release_confirm", 1);
+
+ int constraint_x[3] = {1, 0, 0};
+ int constraint_y[3] = {0, 1, 0};
+
+ ptr = WM_manipulator_operator_set(man->cage, ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_X, ot_resize, NULL);
+ PropertyRNA *prop_release_confirm = RNA_struct_find_property(ptr, "release_confirm");
+ PropertyRNA *prop_constraint_axis = RNA_struct_find_property(ptr, "constraint_axis");
+ RNA_property_boolean_set_array(ptr, prop_constraint_axis, constraint_x);
+ RNA_property_boolean_set(ptr, prop_release_confirm, true);
+ ptr = WM_manipulator_operator_set(man->cage, ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_X, ot_resize, NULL);
+ RNA_property_boolean_set_array(ptr, prop_constraint_axis, constraint_x);
+ RNA_property_boolean_set(ptr, prop_release_confirm, true);
+ ptr = WM_manipulator_operator_set(man->cage, ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_Y, ot_resize, NULL);
+ RNA_property_boolean_set_array(ptr, prop_constraint_axis, constraint_y);
+ RNA_property_boolean_set(ptr, prop_release_confirm, true);
+ ptr = WM_manipulator_operator_set(man->cage, ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_Y, ot_resize, NULL);
+ RNA_property_boolean_set_array(ptr, prop_constraint_axis, constraint_y);
+ RNA_property_boolean_set(ptr, prop_release_confirm, true);
+
+ ptr = WM_manipulator_operator_set(man->cage, ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_X_MIN_Y, ot_resize, NULL);
+ RNA_property_boolean_set(ptr, prop_release_confirm, true);
+ ptr = WM_manipulator_operator_set(man->cage, ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_X_MAX_Y, ot_resize, NULL);
+ RNA_property_boolean_set(ptr, prop_release_confirm, true);
+ ptr = WM_manipulator_operator_set(man->cage, ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_X_MIN_Y, ot_resize, NULL);
+ RNA_property_boolean_set(ptr, prop_release_confirm, true);
+ ptr = WM_manipulator_operator_set(man->cage, ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_X_MAX_Y, ot_resize, NULL);
+ RNA_property_boolean_set(ptr, prop_release_confirm, true);
+ ptr = WM_manipulator_operator_set(man->cage, ED_MANIPULATOR_CAGE2D_PART_ROTATE, ot_rotate, NULL);
+ RNA_property_boolean_set(ptr, prop_release_confirm, true);
+ }
+}
+
+void ED_widgetgroup_manipulator2d_refresh(const bContext *C, wmManipulatorGroup *mgroup)
+{
+ ManipulatorGroup2D *man = mgroup->customdata;
+ float origin[3];
+ manipulator2d_calc_bounds(C, origin, man->min, man->max);
+ copy_v2_v2(man->origin, origin);
+ bool show_cage = !equals_v2v2(man->min, man->max);
+
+ if (show_cage) {
+ man->cage->flag &= ~WM_MANIPULATOR_HIDDEN;
+ man->translate_x->flag |= WM_MANIPULATOR_HIDDEN;
+ man->translate_y->flag |= WM_MANIPULATOR_HIDDEN;
+ }
+ else {
+ man->cage->flag |= WM_MANIPULATOR_HIDDEN;
+ man->translate_x->flag &= ~WM_MANIPULATOR_HIDDEN;
+ man->translate_y->flag &= ~WM_MANIPULATOR_HIDDEN;
+ }
+
+ if (show_cage) {
+ wmManipulatorOpElem *mpop;
+ float mid[2];
+ const float *min = man->min;
+ const float *max = man->max;
+ mid_v2_v2v2(mid, min, max);
+
+ mpop = WM_manipulator_operator_get(man->cage, ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_X);
+ PropertyRNA *prop_center_override = RNA_struct_find_property(&mpop->ptr, "center_override");
+ RNA_property_float_set_array(&mpop->ptr, prop_center_override, (float[3]){max[0], mid[1], 0.0f});
+ mpop = WM_manipulator_operator_get(man->cage, ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_X);
+ RNA_property_float_set_array(&mpop->ptr, prop_center_override, (float[3]){min[0], mid[1], 0.0f});
+ mpop = WM_manipulator_operator_get(man->cage, ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_Y);
+ RNA_property_float_set_array(&mpop->ptr, prop_center_override, (float[3]){mid[0], max[1], 0.0f});
+ mpop = WM_manipulator_operator_get(man->cage, ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_Y);
+ RNA_property_float_set_array(&mpop->ptr, prop_center_override, (float[3]){mid[0], min[1], 0.0f});
+
+ mpop = WM_manipulator_operator_get(man->cage, ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_X_MIN_Y);
+ RNA_property_float_set_array(&mpop->ptr, prop_center_override, (float[3]){max[0], max[1], 0.0f});
+ mpop = WM_manipulator_operator_get(man->cage, ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_X_MAX_Y);
+ RNA_property_float_set_array(&mpop->ptr, prop_center_override, (float[3]){max[0], min[1], 0.0f});
+ mpop = WM_manipulator_operator_get(man->cage, ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_X_MIN_Y);
+ RNA_property_float_set_array(&mpop->ptr, prop_center_override, (float[3]){min[0], max[1], 0.0f});
+ mpop = WM_manipulator_operator_get(man->cage, ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_X_MAX_Y);
+ RNA_property_float_set_array(&mpop->ptr, prop_center_override, (float[3]){min[0], min[1], 0.0f});
+
+ mpop = WM_manipulator_operator_get(man->cage, ED_MANIPULATOR_CAGE2D_PART_ROTATE);
+ RNA_property_float_set_array(&mpop->ptr, prop_center_override, (float[3]){mid[0], mid[1], 0.0f});
+ }
+}
+
+void ED_widgetgroup_manipulator2d_draw_prepare(const bContext *C, wmManipulatorGroup *mgroup)
+{
+ ARegion *ar = CTX_wm_region(C);
+ ManipulatorGroup2D *man = mgroup->customdata;
+ float origin[3] = {UNPACK2(man->origin), 0.0f};
+ float origin_aa[3] = {UNPACK2(man->origin), 0.0f};
+
+ manipulator2d_origin_to_region(ar, origin);
+
+ MAN2D_ITER_AXES_BEGIN(axis, axis_idx)
+ {
+ WM_manipulator_set_matrix_location(axis, origin);
+ }
+ MAN2D_ITER_AXES_END;
+
+ UI_view2d_view_to_region_m4(&ar->v2d, man->cage->matrix_space);
+ WM_manipulator_set_matrix_offset_location(man->cage, origin_aa);
+ man->cage->matrix_offset[0][0] = (man->max[0] - man->min[0]);
+ man->cage->matrix_offset[1][1] = (man->max[1] - man->min[1]);
+}
+
+/* TODO (Julian)
+ * - Called on every redraw, better to do a more simple poll and check for selection in _refresh
+ * - UV editing only, could be expanded for other things.
+ */
+bool ED_widgetgroup_manipulator2d_poll(const bContext *C, wmManipulatorGroupType *UNUSED(wgt))
+{
+ SpaceImage *sima = CTX_wm_space_image(C);
+ Object *obedit = CTX_data_edit_object(C);
+
+ if (ED_space_image_show_uvedit(sima, obedit)) {
+ Image *ima = ED_space_image(sima);
+ Scene *scene = CTX_data_scene(C);
+ BMEditMesh *em = BKE_editmesh_from_object(obedit);
+ BMFace *efa;
+ BMLoop *l;
+ BMIter iter, liter;
+
+ const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
+
+ /* check if there's a selected poly */
+ BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
+ if (!uvedit_face_visible_test(scene, ima, efa))
+ continue;
+
+ BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
+ if (uvedit_uv_select_test(scene, l, cd_loop_uv_offset)) {
+ return true;
+ }
+ }
+ }
+ }
+
+ return false;
+}
diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c
index 46bd83b5d35..ab0e24671eb 100644
--- a/source/blender/editors/transform/transform_ops.c
+++ b/source/blender/editors/transform/transform_ops.c
@@ -160,11 +160,12 @@ const EnumPropertyItem rna_enum_transform_mode_types[] =
static int select_orientation_exec(bContext *C, wmOperator *op)
{
+ View3D *v3d = CTX_wm_view3d(C);
int orientation = RNA_enum_get(op->ptr, "orientation");
- BIF_selectTransformOrientationValue(C, orientation);
+ BIF_selectTransformOrientationValue(v3d, orientation);
- WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, CTX_wm_view3d(C));
+ WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, v3d);
return OPERATOR_FINISHED;
}
@@ -206,10 +207,9 @@ static void TRANSFORM_OT_select_orientation(struct wmOperatorType *ot)
static int delete_orientation_exec(bContext *C, wmOperator *UNUSED(op))
{
View3D *v3d = CTX_wm_view3d(C);
- int selected_index = (v3d->twmode - V3D_MANIP_CUSTOM);
- BIF_removeTransformOrientationIndex(C, selected_index);
-
+ BIF_removeTransformOrientationIndex(C, v3d->custom_orientation_index);
+
WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, v3d);
WM_event_add_notifier(C, NC_SCENE | NA_EDITED, CTX_data_scene(C));
@@ -223,18 +223,12 @@ static int delete_orientation_invoke(bContext *C, wmOperator *op, const wmEvent
static int delete_orientation_poll(bContext *C)
{
- int selected_index = -1;
View3D *v3d = CTX_wm_view3d(C);
-
+
if (ED_operator_areaactive(C) == 0)
return 0;
-
-
- if (v3d) {
- selected_index = (v3d->twmode - V3D_MANIP_CUSTOM);
- }
-
- return selected_index >= 0;
+
+ return (v3d->twmode >= V3D_MANIP_CUSTOM) && (v3d->custom_orientation_index != -1);
}
static void TRANSFORM_OT_delete_orientation(struct wmOperatorType *ot)
@@ -289,6 +283,9 @@ static void TRANSFORM_OT_create_orientation(struct wmOperatorType *ot)
RNA_def_string(ot->srna, "name", NULL, MAX_NAME, "Name", "Name of the new custom orientation");
RNA_def_boolean(ot->srna, "use_view", false, "Use View",
"Use the current view instead of the active object to create the new orientation");
+
+ WM_operatortype_props_advanced_begin(ot);
+
RNA_def_boolean(ot->srna, "use", false, "Use after creation", "Select orientation after its creation");
RNA_def_boolean(ot->srna, "overwrite", false, "Overwrite previous",
"Overwrite previously created orientation with same name");
@@ -599,6 +596,8 @@ static void TRANSFORM_OT_translate(struct wmOperatorType *ot)
RNA_def_float_vector_xyz(ot->srna, "value", 3, NULL, -FLT_MAX, FLT_MAX, "Vector", "", -FLT_MAX, FLT_MAX);
+ WM_operatortype_props_advanced_begin(ot);
+
Transform_Properties(ot, P_CONSTRAINT | P_PROPORTIONAL | P_MIRROR | P_ALIGN_SNAP | P_OPTIONS | P_GPENCIL_EDIT);
}
@@ -619,6 +618,8 @@ static void TRANSFORM_OT_resize(struct wmOperatorType *ot)
RNA_def_float_vector(ot->srna, "value", 3, VecOne, -FLT_MAX, FLT_MAX, "Vector", "", -FLT_MAX, FLT_MAX);
+ WM_operatortype_props_advanced_begin(ot);
+
Transform_Properties(
ot, P_CONSTRAINT | P_PROPORTIONAL | P_MIRROR | P_GEO_SNAP | P_OPTIONS | P_GPENCIL_EDIT | P_CENTER);
}
@@ -650,6 +651,8 @@ static void TRANSFORM_OT_skin_resize(struct wmOperatorType *ot)
RNA_def_float_vector(ot->srna, "value", 3, VecOne, -FLT_MAX, FLT_MAX, "Vector", "", -FLT_MAX, FLT_MAX);
+ WM_operatortype_props_advanced_begin(ot);
+
Transform_Properties(ot, P_CONSTRAINT | P_PROPORTIONAL | P_MIRROR | P_GEO_SNAP | P_OPTIONS | P_NO_TEXSPACE);
}
@@ -671,6 +674,8 @@ static void TRANSFORM_OT_trackball(struct wmOperatorType *ot)
/* Maybe we could use float_vector_xyz here too? */
RNA_def_float_rotation(ot->srna, "value", 2, NULL, -FLT_MAX, FLT_MAX, "Angle", "", -FLT_MAX, FLT_MAX);
+ WM_operatortype_props_advanced_begin(ot);
+
Transform_Properties(ot, P_PROPORTIONAL | P_MIRROR | P_SNAP | P_GPENCIL_EDIT | P_CENTER);
}
@@ -691,6 +696,8 @@ static void TRANSFORM_OT_rotate(struct wmOperatorType *ot)
RNA_def_float_rotation(ot->srna, "value", 0, NULL, -FLT_MAX, FLT_MAX, "Angle", "", -M_PI * 2, M_PI * 2);
+ WM_operatortype_props_advanced_begin(ot);
+
Transform_Properties(
ot, P_AXIS | P_CONSTRAINT | P_PROPORTIONAL | P_MIRROR | P_GEO_SNAP | P_GPENCIL_EDIT | P_CENTER);
}
@@ -715,6 +722,8 @@ static void TRANSFORM_OT_tilt(struct wmOperatorType *ot)
RNA_def_float_rotation(ot->srna, "value", 0, NULL, -FLT_MAX, FLT_MAX, "Angle", "", -M_PI * 2, M_PI * 2);
+ WM_operatortype_props_advanced_begin(ot);
+
Transform_Properties(ot, P_PROPORTIONAL | P_MIRROR | P_SNAP);
}
@@ -735,6 +744,8 @@ static void TRANSFORM_OT_bend(struct wmOperatorType *ot)
RNA_def_float_rotation(ot->srna, "value", 1, NULL, -FLT_MAX, FLT_MAX, "Angle", "", -M_PI * 2, M_PI * 2);
+ WM_operatortype_props_advanced_begin(ot);
+
Transform_Properties(ot, P_PROPORTIONAL | P_MIRROR | P_SNAP | P_GPENCIL_EDIT | P_CENTER);
}
@@ -755,6 +766,8 @@ static void TRANSFORM_OT_shear(struct wmOperatorType *ot)
RNA_def_float(ot->srna, "value", 0, -FLT_MAX, FLT_MAX, "Offset", "", -FLT_MAX, FLT_MAX);
+ WM_operatortype_props_advanced_begin(ot);
+
Transform_Properties(ot, P_PROPORTIONAL | P_MIRROR | P_SNAP | P_GPENCIL_EDIT);
// XXX Shear axis?
}
@@ -776,6 +789,8 @@ static void TRANSFORM_OT_push_pull(struct wmOperatorType *ot)
RNA_def_float(ot->srna, "value", 0, -FLT_MAX, FLT_MAX, "Distance", "", -FLT_MAX, FLT_MAX);
+ WM_operatortype_props_advanced_begin(ot);
+
Transform_Properties(ot, P_PROPORTIONAL | P_MIRROR | P_SNAP | P_CENTER);
}
@@ -798,6 +813,8 @@ static void TRANSFORM_OT_shrink_fatten(struct wmOperatorType *ot)
RNA_def_boolean(ot->srna, "use_even_offset", true, "Offset Even", "Scale the offset to give more even thickness");
+ WM_operatortype_props_advanced_begin(ot);
+
Transform_Properties(ot, P_PROPORTIONAL | P_MIRROR | P_SNAP);
}
@@ -819,6 +836,8 @@ static void TRANSFORM_OT_tosphere(struct wmOperatorType *ot)
RNA_def_float_factor(ot->srna, "value", 0, 0, 1, "Factor", "", 0, 1);
+ WM_operatortype_props_advanced_begin(ot);
+
Transform_Properties(ot, P_PROPORTIONAL | P_MIRROR | P_SNAP | P_GPENCIL_EDIT | P_CENTER);
}
@@ -863,6 +882,9 @@ static void TRANSFORM_OT_edge_slide(struct wmOperatorType *ot)
RNA_def_property_flag(prop, PROP_HIDDEN | PROP_SKIP_SAVE);
RNA_def_boolean(ot->srna, "use_even", false, "Even",
"Make the edge loop match the shape of the adjacent edge loop");
+
+ WM_operatortype_props_advanced_begin(ot);
+
RNA_def_boolean(ot->srna, "flipped", false, "Flipped",
"When Even mode is active, flips between the two adjacent edge loops");
RNA_def_boolean(ot->srna, "use_clamp", true, "Clamp",
@@ -889,6 +911,9 @@ static void TRANSFORM_OT_vert_slide(struct wmOperatorType *ot)
RNA_def_float_factor(ot->srna, "value", 0, -10.0f, 10.0f, "Factor", "", -1.0f, 1.0f);
RNA_def_boolean(ot->srna, "use_even", false, "Even",
"Make the edge loop match the shape of the adjacent edge loop");
+
+ WM_operatortype_props_advanced_begin(ot);
+
RNA_def_boolean(ot->srna, "flipped", false, "Flipped",
"When Even mode is active, flips between the two adjacent edge loops");
RNA_def_boolean(ot->srna, "use_clamp", true, "Clamp",
@@ -914,6 +939,8 @@ static void TRANSFORM_OT_edge_crease(struct wmOperatorType *ot)
RNA_def_float_factor(ot->srna, "value", 0, -1.0f, 1.0f, "Factor", "", -1.0f, 1.0f);
+ WM_operatortype_props_advanced_begin(ot);
+
Transform_Properties(ot, P_SNAP);
}
@@ -955,6 +982,8 @@ static void TRANSFORM_OT_edge_bevelweight(struct wmOperatorType *ot)
RNA_def_float_factor(ot->srna, "value", 0, -1.0f, 1.0f, "Factor", "", -1.0f, 1.0f);
+ WM_operatortype_props_advanced_begin(ot);
+
Transform_Properties(ot, P_SNAP);
}
@@ -975,6 +1004,8 @@ static void TRANSFORM_OT_seq_slide(struct wmOperatorType *ot)
RNA_def_float_vector_xyz(ot->srna, "value", 2, NULL, -FLT_MAX, FLT_MAX, "Vector", "", -FLT_MAX, FLT_MAX);
+ WM_operatortype_props_advanced_begin(ot);
+
Transform_Properties(ot, P_SNAP);
}
@@ -1000,6 +1031,8 @@ static void TRANSFORM_OT_transform(struct wmOperatorType *ot)
RNA_def_float_vector(ot->srna, "value", 4, NULL, -FLT_MAX, FLT_MAX, "Values", "", -FLT_MAX, FLT_MAX);
+ WM_operatortype_props_advanced_begin(ot);
+
Transform_Properties(
ot, P_AXIS | P_CONSTRAINT | P_PROPORTIONAL | P_MIRROR | P_ALIGN_SNAP | P_GPENCIL_EDIT | P_CENTER);
}
@@ -1066,6 +1099,8 @@ void transform_keymap_for_space(wmKeyConfig *keyconf, wmKeyMap *keymap, int spac
kmi = WM_keymap_add_item(keymap, "WM_OT_context_menu_enum", TABKEY, KM_PRESS, KM_SHIFT | KM_CTRL, 0);
RNA_string_set(kmi->ptr, "data_path", "tool_settings.snap_element");
+ /* Will fall-through to texture-space transform. */
+ kmi = WM_keymap_add_item(keymap, "OBJECT_OT_transform_axis_target", TKEY, KM_PRESS, KM_SHIFT, 0);
kmi = WM_keymap_add_item(keymap, OP_TRANSLATION, TKEY, KM_PRESS, KM_SHIFT, 0);
RNA_boolean_set(kmi->ptr, "texture_space", true);
diff --git a/source/blender/editors/transform/transform_orientations.c b/source/blender/editors/transform/transform_orientations.c
index f3078eb7824..63eea11212c 100644
--- a/source/blender/editors/transform/transform_orientations.c
+++ b/source/blender/editors/transform/transform_orientations.c
@@ -38,6 +38,7 @@
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
#include "DNA_view3d_types.h"
+#include "DNA_workspace_types.h"
#include "BLI_math.h"
#include "BLI_listbase.h"
@@ -52,6 +53,9 @@
#include "BKE_report.h"
#include "BKE_main.h"
#include "BKE_screen.h"
+#include "BKE_workspace.h"
+
+#include "DEG_depsgraph.h"
#include "BLT_translation.h"
@@ -63,14 +67,16 @@
void BIF_clearTransformOrientation(bContext *C)
{
+ WorkSpace *workspace = CTX_wm_workspace(C);
+ ListBase *transform_orientations = BKE_workspace_transform_orientations_get(workspace);
View3D *v3d = CTX_wm_view3d(C);
- ListBase *transform_spaces = &CTX_data_scene(C)->transform_spaces;
- BLI_freelistN(transform_spaces);
+ BLI_freelistN(transform_orientations);
// Need to loop over all view3d
- if (v3d && v3d->twmode >= V3D_MANIP_CUSTOM) {
- v3d->twmode = V3D_MANIP_GLOBAL; /* fallback to global */
+ if (v3d && v3d->twmode == V3D_MANIP_CUSTOM) {
+ v3d->twmode = V3D_MANIP_GLOBAL; /* fallback to global */
+ v3d->custom_orientation_index = -1;
}
}
@@ -292,6 +298,7 @@ void BIF_createTransformOrientation(bContext *C, ReportList *reports,
ts = createViewSpace(C, reports, name, overwrite);
}
else {
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Object *obedit = CTX_data_edit_object(C);
Object *ob = CTX_data_active_object(C);
if (obedit) {
@@ -302,7 +309,7 @@ void BIF_createTransformOrientation(bContext *C, ReportList *reports,
else if (obedit->type == OB_CURVE)
ts = createCurveSpace(C, reports, name, overwrite);
}
- else if (ob && (ob->mode & OB_MODE_POSE)) {
+ else if (ob && (workspace->object_mode & OB_MODE_POSE)) {
ts = createBoneSpace(C, reports, name, overwrite);
}
else {
@@ -318,23 +325,24 @@ void BIF_createTransformOrientation(bContext *C, ReportList *reports,
TransformOrientation *addMatrixSpace(bContext *C, float mat[3][3],
const char *name, const bool overwrite)
{
- ListBase *transform_spaces = &CTX_data_scene(C)->transform_spaces;
TransformOrientation *ts = NULL;
+ WorkSpace *workspace = CTX_wm_workspace(C);
+ ListBase *transform_orientations = BKE_workspace_transform_orientations_get(workspace);
char name_unique[sizeof(ts->name)];
if (overwrite) {
- ts = findOrientationName(transform_spaces, name);
+ ts = findOrientationName(transform_orientations, name);
}
else {
BLI_strncpy(name_unique, name, sizeof(name_unique));
- uniqueOrientationName(transform_spaces, name_unique);
+ uniqueOrientationName(transform_orientations, name_unique);
name = name_unique;
}
/* if not, create a new one */
if (ts == NULL) {
ts = MEM_callocN(sizeof(TransformOrientation), "UserTransSpace from matrix");
- BLI_addtail(transform_spaces, ts);
+ BLI_addtail(transform_orientations, ts);
BLI_strncpy(ts->name, name, sizeof(ts->name));
}
@@ -346,70 +354,55 @@ TransformOrientation *addMatrixSpace(bContext *C, float mat[3][3],
void BIF_removeTransformOrientation(bContext *C, TransformOrientation *target)
{
- Scene *scene = CTX_data_scene(C);
- ListBase *transform_spaces = &scene->transform_spaces;
- const int i = BLI_findindex(transform_spaces, target);
-
- if (i != -1) {
- Main *bmain = CTX_data_main(C);
- BKE_screen_view3d_main_twmode_remove(&bmain->screen, scene, i);
- BLI_freelinkN(transform_spaces, target);
- }
+ BKE_workspace_transform_orientation_remove(CTX_wm_workspace(C), target);
}
void BIF_removeTransformOrientationIndex(bContext *C, int index)
{
- ListBase *transform_spaces = &CTX_data_scene(C)->transform_spaces;
- TransformOrientation *ts = BLI_findlink(transform_spaces, index);
-
- if (ts) {
- BIF_removeTransformOrientation(C, ts);
- }
+ TransformOrientation *target = BKE_workspace_transform_orientation_find(CTX_wm_workspace(C), index);
+ BIF_removeTransformOrientation(C, target);
}
void BIF_selectTransformOrientation(bContext *C, TransformOrientation *target)
{
- ListBase *transform_spaces = &CTX_data_scene(C)->transform_spaces;
- const int i = BLI_findindex(transform_spaces, target);
+ int index = BKE_workspace_transform_orientation_get_index(CTX_wm_workspace(C), target);
+ View3D *v3d = CTX_wm_view3d(C);
- if (i != -1) {
- View3D *v3d = CTX_wm_view3d(C);
- v3d->twmode = V3D_MANIP_CUSTOM + i;
- }
+ BLI_assert(index != -1);
+
+ v3d->twmode = V3D_MANIP_CUSTOM;
+ v3d->custom_orientation_index = index;
}
-void BIF_selectTransformOrientationValue(bContext *C, int orientation)
+/**
+ * Activate a transform orientation in a 3D view based on an enum value.
+ *
+ * \param orientation: If this is #V3D_MANIP_CUSTOM or greater, the custom transform orientation
+ * with index \a orientation - #V3D_MANIP_CUSTOM gets activated.
+ */
+void BIF_selectTransformOrientationValue(View3D *v3d, int orientation)
{
- View3D *v3d = CTX_wm_view3d(C);
- if (v3d) /* currently using generic poll */
- v3d->twmode = orientation;
+ const bool is_custom = orientation >= V3D_MANIP_CUSTOM;
+
+ v3d->twmode = is_custom ? V3D_MANIP_CUSTOM : orientation;
+ v3d->custom_orientation_index = is_custom ? (orientation - V3D_MANIP_CUSTOM) : -1;
}
int BIF_countTransformOrientation(const bContext *C)
{
- ListBase *transform_spaces = &CTX_data_scene(C)->transform_spaces;
- return BLI_listbase_count(transform_spaces);
+ WorkSpace *workspace = CTX_wm_workspace(C);
+ ListBase *transform_orientations = BKE_workspace_transform_orientations_get(workspace);
+ return BLI_listbase_count(transform_orientations);
}
-bool applyTransformOrientation(const bContext *C, float mat[3][3], char *r_name, int index)
+bool applyTransformOrientation(const TransformOrientation *ts, float r_mat[3][3], char *r_name)
{
- ListBase *transform_spaces = &CTX_data_scene(C)->transform_spaces;
- TransformOrientation *ts = BLI_findlink(transform_spaces, index);
-
- BLI_assert(index >= 0);
-
- if (ts) {
- if (r_name) {
- BLI_strncpy(r_name, ts->name, MAX_NAME);
- }
-
- copy_m3_m3(mat, ts->mat);
- return true;
- }
- else {
- /* invalid index, can happen sometimes */
- return false;
+ if (r_name) {
+ BLI_strncpy(r_name, ts->name, MAX_NAME);
}
+ copy_m3_m3(r_mat, ts->mat);
+
+ return true;
}
static int count_bone_select(bArmature *arm, ListBase *lb, const bool do_it)
@@ -451,13 +444,13 @@ void initTransformOrientation(bContext *C, TransInfo *t)
case V3D_MANIP_GIMBAL:
unit_m3(t->spacemtx);
- if (ob && gimbal_axis(ob, t->spacemtx)) {
+ if (ob && gimbal_axis(ob, t->spacemtx, t->eval_ctx.object_mode)) {
BLI_strncpy(t->spacename, IFACE_("gimbal"), sizeof(t->spacename));
break;
}
ATTR_FALLTHROUGH; /* no gimbal fallthrough to normal */
case V3D_MANIP_NORMAL:
- if (obedit || (ob && ob->mode & OB_MODE_POSE)) {
+ if (obedit || (ob && t->eval_ctx.object_mode & OB_MODE_POSE)) {
BLI_strncpy(t->spacename, IFACE_("normal"), sizeof(t->spacename));
ED_getTransformOrientationMatrix(C, t->spacemtx, t->around);
break;
@@ -492,8 +485,10 @@ void initTransformOrientation(bContext *C, TransInfo *t)
unit_m3(t->spacemtx);
}
break;
- default: /* V3D_MANIP_CUSTOM */
- if (applyTransformOrientation(C, t->spacemtx, t->spacename, t->current_orientation - V3D_MANIP_CUSTOM)) {
+ case V3D_MANIP_CUSTOM:
+ BLI_strncpy(t->spacename, t->custom_orientation->name, sizeof(t->spacename));
+
+ if (applyTransformOrientation(t->custom_orientation, t->spacemtx, t->spacename)) {
/* pass */
}
else {
@@ -586,10 +581,11 @@ static unsigned int bm_mesh_faces_select_get_n(BMesh *bm, BMVert **elems, const
int getTransformOrientation_ex(const bContext *C, float normal[3], float plane[3], const short around)
{
- Scene *scene = CTX_data_scene(C);
+ const WorkSpace *workspace = CTX_wm_workspace(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Object *obedit = CTX_data_edit_object(C);
Base *base;
- Object *ob = OBACT;
+ Object *ob = OBACT(view_layer);
int result = ORIENTATION_NONE;
const bool activeOnly = (around == V3D_AROUND_ACTIVE);
@@ -1016,7 +1012,7 @@ int getTransformOrientation_ex(const bContext *C, float normal[3], float plane[3
mul_m3_v3(mat, plane);
}
}
- else if (ob && (ob->mode & OB_MODE_POSE)) {
+ else if (ob && (workspace->object_mode & OB_MODE_POSE)) {
bArmature *arm = ob->data;
bPoseChannel *pchan;
float imat[3][3], mat[3][3];
@@ -1056,21 +1052,21 @@ int getTransformOrientation_ex(const bContext *C, float normal[3], float plane[3
result = ORIENTATION_EDGE;
}
}
- else if (ob && (ob->mode & (OB_MODE_ALL_PAINT | OB_MODE_PARTICLE_EDIT))) {
+ else if (ob && (workspace->object_mode & (OB_MODE_ALL_PAINT | OB_MODE_PARTICLE_EDIT))) {
/* pass */
}
else {
/* we need the one selected object, if its not active */
- View3D *v3d = CTX_wm_view3d(C);
- ob = OBACT;
- if (ob && (ob->flag & SELECT)) {
+ base = BASACT(view_layer);
+ ob = OBACT(view_layer);
+ if (base && ((base->flag & BASE_SELECTED) != 0)) {
/* pass */
}
else {
/* first selected */
ob = NULL;
- for (base = scene->base.first; base; base = base->next) {
- if (TESTBASELIB(v3d, base)) {
+ for (base = view_layer->object_bases.first; base; base = base->next) {
+ if (TESTBASELIB(base)) {
ob = base->object;
break;
}
diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c
index 5750224de3d..9946f1ad546 100644
--- a/source/blender/editors/transform/transform_snap.c
+++ b/source/blender/editors/transform/transform_snap.c
@@ -49,7 +49,7 @@
#include "BLI_blenlib.h"
#include "BLI_utildefines.h"
-#include "BIF_gl.h"
+#include "GPU_immediate.h"
#include "BKE_DerivedMesh.h"
#include "BKE_global.h"
@@ -70,6 +70,8 @@
#include "ED_view3d.h"
#include "ED_transform_snap_object_context.h"
+#include "DEG_depsgraph.h"
+
#include "UI_resources.h"
#include "UI_view2d.h"
@@ -163,36 +165,42 @@ void drawSnapping(const struct bContext *C, TransInfo *t)
size = 2.5f * UI_GetThemeValuef(TH_VERTEX_SIZE);
invert_m4_m4(imat, rv3d->viewmat);
-
+
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+
for (p = t->tsnap.points.first; p; p = p->next) {
if (p == t->tsnap.selectedPoint) {
- glColor4ubv(selectedCol);
+ immUniformColor4ubv(selectedCol);
}
else {
- glColor4ubv(col);
+ immUniformColor4ubv(col);
}
- drawcircball(GL_LINE_LOOP, p->co, ED_view3d_pixel_size(rv3d, p->co) * size * 0.75f, imat);
+ imm_drawcircball(p->co, ED_view3d_pixel_size(rv3d, p->co) * size * 0.75f, imat, pos);
}
if (t->tsnap.status & POINT_INIT) {
- glColor4ubv(activeCol);
+ immUniformColor4ubv(activeCol);
- drawcircball(GL_LINE_LOOP, t->tsnap.snapPoint, ED_view3d_pixel_size(rv3d, t->tsnap.snapPoint) * size, imat);
+ imm_drawcircball(t->tsnap.snapPoint, ED_view3d_pixel_size(rv3d, t->tsnap.snapPoint) * size, imat, pos);
}
/* draw normal if needed */
if (usingSnappingNormal(t) && validSnappingNormal(t)) {
- glColor4ubv(activeCol);
+ immUniformColor4ubv(activeCol);
- glBegin(GL_LINES);
- glVertex3f(t->tsnap.snapPoint[0], t->tsnap.snapPoint[1], t->tsnap.snapPoint[2]);
- glVertex3f(t->tsnap.snapPoint[0] + t->tsnap.snapNormal[0],
- t->tsnap.snapPoint[1] + t->tsnap.snapNormal[1],
- t->tsnap.snapPoint[2] + t->tsnap.snapNormal[2]);
- glEnd();
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex3f(pos, t->tsnap.snapPoint[0], t->tsnap.snapPoint[1], t->tsnap.snapPoint[2]);
+ immVertex3f(pos, t->tsnap.snapPoint[0] + t->tsnap.snapNormal[0],
+ t->tsnap.snapPoint[1] + t->tsnap.snapNormal[1],
+ t->tsnap.snapPoint[2] + t->tsnap.snapNormal[2]);
+ immEnd();
}
-
+
+ immUnbindProgram();
+
if (v3d->zbuf)
glEnable(GL_DEPTH_TEST);
}
@@ -200,35 +208,7 @@ void drawSnapping(const struct bContext *C, TransInfo *t)
else if (t->spacetype == SPACE_IMAGE) {
if (validSnap(t)) {
/* This will not draw, and Im nor sure why - campbell */
-#if 0
- float xuser_asp, yuser_asp;
- int wi, hi;
- float w, h;
-
- calc_image_view(G.sima, 'f'); // float
- myortho2(G.v2d->cur.xmin, G.v2d->cur.xmax, G.v2d->cur.ymin, G.v2d->cur.ymax);
- glLoadIdentity();
-
- ED_space_image_get_aspect(t->sa->spacedata.first, &xuser_aspx, &yuser_asp);
- ED_space_image_width(t->sa->spacedata.first, &wi, &hi);
- w = (((float)wi) / IMG_SIZE_FALLBACK) * G.sima->zoom * xuser_asp;
- h = (((float)hi) / IMG_SIZE_FALLBACK) * G.sima->zoom * yuser_asp;
-
- cpack(0xFFFFFF);
- glTranslate2fv(t->tsnap.snapPoint);
-
- //glRectf(0, 0, 1, 1);
-
- setlinestyle(0);
- cpack(0x0);
- fdrawline(-0.020 / w, 0, -0.1 / w, 0);
- fdrawline(0.1 / w, 0, 0.020 / w, 0);
- fdrawline(0, -0.020 / h, 0, -0.1 / h);
- fdrawline(0, 0.1 / h, 0, 0.020 / h);
-
- glTranslatef(-t->tsnap.snapPoint[0], -t->tsnap.snapPoint[1], 0.0f);
- setlinestyle(0);
-#endif
+ /* TODO: see 2.7x for non-working code */
}
}
else if (t->spacetype == SPACE_NODE) {
@@ -241,23 +221,29 @@ void drawSnapping(const struct bContext *C, TransInfo *t)
glEnable(GL_BLEND);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
for (p = t->tsnap.points.first; p; p = p->next) {
if (p == t->tsnap.selectedPoint) {
- glColor4ubv(selectedCol);
+ immUniformColor4ubv(selectedCol);
}
else {
- glColor4ubv(col);
+ immUniformColor4ubv(col);
}
- ED_node_draw_snap(&ar->v2d, p->co, size, 0);
+ ED_node_draw_snap(&ar->v2d, p->co, size, 0, pos);
}
if (t->tsnap.status & POINT_INIT) {
- glColor4ubv(activeCol);
+ immUniformColor4ubv(activeCol);
- ED_node_draw_snap(&ar->v2d, t->tsnap.snapPoint, size, t->tsnap.snapNodeBorder);
+ ED_node_draw_snap(&ar->v2d, t->tsnap.snapPoint, size, t->tsnap.snapNodeBorder, pos);
}
-
+
+ immUnbindProgram();
+
glDisable(GL_BLEND);
}
}
@@ -516,8 +502,8 @@ static void initSnappingMode(TransInfo *t)
{
ToolSettings *ts = t->settings;
Object *obedit = t->obedit;
- Scene *scene = t->scene;
- Base *base_act = scene->basact;
+ ViewLayer *view_layer = t->view_layer;
+ Base *base_act = view_layer->basact;
if (t->spacetype == SPACE_NODE) {
/* force project off when not supported */
@@ -558,7 +544,7 @@ static void initSnappingMode(TransInfo *t)
}
/* Particles edit mode*/
else if (t->tsnap.applySnap != NULL && // A snapping function actually exist
- (obedit == NULL && base_act && base_act->object && base_act->object->mode & OB_MODE_PARTICLE_EDIT))
+ (obedit == NULL && base_act && base_act->object && t->eval_ctx.object_mode & OB_MODE_PARTICLE_EDIT))
{
t->tsnap.modeSelect = SNAP_ALL;
}
@@ -598,7 +584,7 @@ static void initSnappingMode(TransInfo *t)
if (t->spacetype == SPACE_VIEW3D) {
if (t->tsnap.object_context == NULL) {
t->tsnap.object_context = ED_transform_snap_object_context_create_view3d(
- G.main, t->scene, 0,
+ G.main, t->scene, t->view_layer, t->engine_type, 0,
t->ar, t->view);
ED_transform_snap_object_context_set_editmesh_callbacks(
diff --git a/source/blender/editors/transform/transform_snap_object.c b/source/blender/editors/transform/transform_snap_object.c
index eafb3650d36..82da9991dda 100644
--- a/source/blender/editors/transform/transform_snap_object.c
+++ b/source/blender/editors/transform/transform_snap_object.c
@@ -51,6 +51,9 @@
#include "BKE_editmesh.h"
#include "BKE_main.h"
#include "BKE_tracking.h"
+#include "BKE_context.h"
+
+#include "DEG_depsgraph.h"
#include "ED_transform.h"
#include "ED_transform_snap_object_context.h"
@@ -101,6 +104,8 @@ typedef struct SnapObjectData_EditMesh {
struct SnapObjectContext {
Main *bmain;
Scene *scene;
+ EvaluationContext eval_ctx;
+
int flag;
/* Optional: when performing screen-space projection.
@@ -155,18 +160,17 @@ static void iter_snap_objects(
IterSnapObjsCallback sob_callback,
void *data)
{
- Base *base_act = sctx->scene->basact;
- for (Base *base = sctx->scene->base.first; base != NULL; base = base->next) {
- if ((BASE_VISIBLE_BGMODE(sctx->v3d_data.v3d, sctx->scene, base)) &&
- (base->flag & BA_SNAP_FIX_DEPS_FIASCO) == 0 &&
- !((snap_select == SNAP_NOT_SELECTED && (base->flag & (SELECT | BA_WAS_SEL))) ||
+ Base *base_act = sctx->eval_ctx.view_layer->basact;
+ for (Base *base = sctx->eval_ctx.view_layer->object_bases.first; base != NULL; base = base->next) {
+ if ((BASE_VISIBLE(base)) && (base->flag_legacy & BA_SNAP_FIX_DEPS_FIASCO) == 0 &&
+ !((snap_select == SNAP_NOT_SELECTED && ((base->flag & BASE_SELECTED) || (base->flag_legacy & BA_WAS_SEL))) ||
(snap_select == SNAP_NOT_ACTIVE && base == base_act)))
{
bool use_obedit;
Object *obj = base->object;
if (obj->transflag & OB_DUPLI) {
DupliObject *dupli_ob;
- ListBase *lb = object_duplilist(sctx->bmain->eval_ctx, sctx->scene, obj);
+ ListBase *lb = object_duplilist(&sctx->eval_ctx, sctx->scene, obj);
for (dupli_ob = lb->first; dupli_ob; dupli_ob = dupli_ob->next) {
use_obedit = obedit && dupli_ob->ob->data == obedit->data;
sob_callback(sctx, use_obedit, use_obedit ? obedit : dupli_ob->ob, dupli_ob->mat, data);
@@ -725,10 +729,10 @@ static bool raycastObj(
DerivedMesh *dm;
em = BKE_editmesh_from_object(ob);
if (em) {
- editbmesh_get_derived_cage_and_final(sctx->scene, ob, em, CD_MASK_BAREMESH, &dm);
+ editbmesh_get_derived_cage_and_final(&sctx->eval_ctx, sctx->scene, ob, em, CD_MASK_BAREMESH, &dm);
}
else {
- dm = mesh_get_derived_final(sctx->scene, ob, CD_MASK_BAREMESH);
+ dm = mesh_get_derived_final(&sctx->eval_ctx, sctx->scene, ob, CD_MASK_BAREMESH);
}
retval = raycastDerivedMesh(
sctx,
@@ -1354,7 +1358,7 @@ static bool snapArmature(
static bool snapCurve(
SnapData *snapdata,
- Object *ob, Curve *cu, float obmat[4][4],
+ Curve *cu, float obmat[4][4], bool use_obedit,
/* read/write args */
float *ray_depth, float *dist_px,
/* return args */
@@ -1372,12 +1376,12 @@ static bool snapCurve(
mul_m4_m4m4(lpmat, snapdata->pmat, obmat);
dist_px_sq = SQUARE(*dist_px);
- for (Nurb *nu = (ob->mode == OB_MODE_EDIT ? cu->editnurb->nurbs.first : cu->nurb.first); nu; nu = nu->next) {
+ for (Nurb *nu = (use_obedit ? cu->editnurb->nurbs.first : cu->nurb.first); nu; nu = nu->next) {
for (int u = 0; u < nu->pntsu; u++) {
switch (snapdata->snap_to) {
case SCE_SNAP_MODE_VERTEX:
{
- if (ob->mode == OB_MODE_EDIT) {
+ if (use_obedit) {
if (nu->bezt) {
/* don't snap to selected (moving) or hidden */
if (nu->bezt[u].f2 & SELECT || nu->bezt[u].hide != 0) {
@@ -1938,10 +1942,10 @@ static bool snapObject(
DerivedMesh *dm;
em = BKE_editmesh_from_object(ob);
if (em) {
- editbmesh_get_derived_cage_and_final(sctx->scene, ob, em, CD_MASK_BAREMESH, &dm);
+ editbmesh_get_derived_cage_and_final(&sctx->eval_ctx, sctx->scene, ob, em, CD_MASK_BAREMESH, &dm);
}
else {
- dm = mesh_get_derived_final(sctx->scene, ob, CD_MASK_BAREMESH);
+ dm = mesh_get_derived_final(&sctx->eval_ctx, sctx->scene, ob, CD_MASK_BAREMESH);
}
retval = snapDerivedMesh(
sctx, snapdata, ob, dm, obmat,
@@ -1962,7 +1966,7 @@ static bool snapObject(
else if (ob->type == OB_CURVE) {
retval = snapCurve(
snapdata,
- ob, ob->data, obmat,
+ ob->data, obmat, use_obedit,
ray_depth, dist_px,
r_loc, r_no);
}
@@ -2083,7 +2087,7 @@ static bool snapObjectsRay(
* \{ */
SnapObjectContext *ED_transform_snap_object_context_create(
- Main *bmain, Scene *scene, int flag)
+ Main *bmain, Scene *scene, ViewLayer *view_layer, RenderEngineType *engine_type, int flag)
{
SnapObjectContext *sctx = MEM_callocN(sizeof(*sctx), __func__);
@@ -2092,6 +2096,9 @@ SnapObjectContext *ED_transform_snap_object_context_create(
sctx->bmain = bmain;
sctx->scene = scene;
+ DEG_evaluation_context_init_from_scene(
+ &sctx->eval_ctx, scene, view_layer, engine_type, OB_MODE_OBJECT, DAG_EVAL_VIEWPORT);
+
sctx->cache.object_map = BLI_ghash_ptr_new(__func__);
sctx->cache.mem_arena = BLI_memarena_new(BLI_MEMARENA_STD_BUFSIZE, __func__);
@@ -2099,11 +2106,11 @@ SnapObjectContext *ED_transform_snap_object_context_create(
}
SnapObjectContext *ED_transform_snap_object_context_create_view3d(
- Main *bmain, Scene *scene, int flag,
+ Main *bmain, Scene *scene, ViewLayer *view_layer, RenderEngineType *engine_type, int flag,
/* extra args for view3d */
const ARegion *ar, const View3D *v3d)
{
- SnapObjectContext *sctx = ED_transform_snap_object_context_create(bmain, scene, flag);
+ SnapObjectContext *sctx = ED_transform_snap_object_context_create(bmain, scene, view_layer, engine_type, flag);
sctx->use_v3d = true;
sctx->v3d_data.ar = ar;
@@ -2366,6 +2373,7 @@ bool ED_transform_snap_object_project_view3d_ex(
ED_view3d_win_to_vector(ar, mval, ray_normal);
ED_view3d_clip_range_get(
+ sctx->eval_ctx.depsgraph,
sctx->v3d_data.v3d, sctx->v3d_data.ar->regiondata,
&depth_range[0], &depth_range[1], false);
@@ -2432,6 +2440,7 @@ bool ED_transform_snap_object_project_all_view3d_ex(
float ray_start[3], ray_normal[3];
if (!ED_view3d_win_to_ray_ex(
+ sctx->eval_ctx.depsgraph,
sctx->v3d_data.ar, sctx->v3d_data.v3d,
mval, NULL, ray_normal, ray_start, true))
{
diff --git a/source/blender/editors/util/CMakeLists.txt b/source/blender/editors/util/CMakeLists.txt
index c0b30f93939..71a3322cb50 100644
--- a/source/blender/editors/util/CMakeLists.txt
+++ b/source/blender/editors/util/CMakeLists.txt
@@ -24,6 +24,7 @@ set(INC
../../blenlib
../../blentranslation
../../bmesh
+ ../../depsgraph
../../imbuf
../../gpu
../../makesdna
@@ -64,6 +65,7 @@ set(SRC
../include/ED_lattice.h
../include/ED_logic.h
../include/ED_markers.h
+ ../include/ED_manipulator_library.h
../include/ED_mask.h
../include/ED_mball.h
../include/ED_mesh.h
@@ -75,6 +77,7 @@ set(SRC
../include/ED_particle.h
../include/ED_physics.h
../include/ED_render.h
+ ../include/ED_scene.h
../include/ED_screen.h
../include/ED_screen_types.h
../include/ED_sculpt.h
diff --git a/source/blender/editors/util/ed_transverts.c b/source/blender/editors/util/ed_transverts.c
index b0970cdfd48..872810c5cf2 100644
--- a/source/blender/editors/util/ed_transverts.c
+++ b/source/blender/editors/util/ed_transverts.c
@@ -39,12 +39,13 @@
#include "BLI_math.h"
#include "BKE_curve.h"
-#include "BKE_depsgraph.h"
#include "BKE_lattice.h"
#include "BKE_editmesh.h"
#include "BKE_DerivedMesh.h"
#include "BKE_context.h"
+#include "DEG_depsgraph.h"
+
#include "ED_armature.h"
#include "ED_transverts.h" /* own include */
@@ -56,7 +57,7 @@ void ED_transverts_update_obedit(TransVertStore *tvs, Object *obedit)
const int mode = tvs->mode;
BLI_assert(ED_transverts_check_obedit(obedit) == true);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
if (obedit->type == OB_MESH) {
BMEditMesh *em = BKE_editmesh_from_object(obedit);
diff --git a/source/blender/editors/util/ed_util.c b/source/blender/editors/util/ed_util.c
index b34605f6af3..02443af0bfc 100644
--- a/source/blender/editors/util/ed_util.c
+++ b/source/blender/editors/util/ed_util.c
@@ -41,6 +41,7 @@
#include "DNA_space_types.h"
#include "DNA_scene_types.h"
#include "DNA_packedFile_types.h"
+#include "DNA_workspace_types.h"
#include "BLI_utildefines.h"
#include "BLI_string.h"
@@ -70,6 +71,10 @@
#include "ED_space_api.h"
#include "ED_util.h"
+#include "DEG_depsgraph.h"
+
+#include "GPU_immediate.h"
+
#include "UI_interface.h"
#include "UI_resources.h"
@@ -84,10 +89,7 @@
void ED_editors_init(bContext *C)
{
wmWindowManager *wm = CTX_wm_manager(C);
- Main *bmain = CTX_data_main(C);
Scene *sce = CTX_data_scene(C);
- Object *ob, *obact = (sce && sce->basact) ? sce->basact->object : NULL;
- ID *data;
/* This is called during initialization, so we don't want to store any reports */
ReportList *reports = CTX_wm_reports(C);
@@ -95,21 +97,6 @@ void ED_editors_init(bContext *C)
SWAP(int, reports->flag, reports_flag_prev);
- /* toggle on modes for objects that were saved with these enabled. for
- * e.g. linked objects we have to ensure that they are actually the
- * active object in this scene. */
- for (ob = bmain->object.first; ob; ob = ob->id.next) {
- int mode = ob->mode;
-
- if (!ELEM(mode, OB_MODE_OBJECT, OB_MODE_POSE)) {
- ob->mode = OB_MODE_OBJECT;
- data = ob->data;
-
- if (ob == obact && !ID_IS_LINKED(ob) && !(data && ID_IS_LINKED(data)))
- ED_object_toggle_modes(C, mode);
- }
- }
-
/* image editor paint mode */
if (sce) {
ED_space_image_paint_update(wm, sce);
@@ -164,11 +151,16 @@ bool ED_editors_flush_edits(const bContext *C, bool for_render)
Object *ob;
Main *bmain = CTX_data_main(C);
+ eObjectMode object_mode = WM_windows_object_mode_get(bmain->wm.first);
+ if ((object_mode & (OB_MODE_SCULPT | OB_MODE_EDIT)) == 0) {
+ return has_edited;
+ }
+
/* loop through all data to find edit mode or object mode, because during
* exiting we might not have a context for edit object and multiple sculpt
* objects can exist at the same time */
for (ob = bmain->object.first; ob; ob = ob->id.next) {
- if (ob->mode & OB_MODE_SCULPT) {
+ if (object_mode & OB_MODE_SCULPT) {
/* Don't allow flushing while in the middle of a stroke (frees data in use).
* Auto-save prevents this from happening but scripts may cause a flush on saving: T53986. */
if ((ob->sculpt && ob->sculpt->cache) == 0) {
@@ -187,7 +179,7 @@ bool ED_editors_flush_edits(const bContext *C, bool for_render)
}
}
}
- else if (ob->mode & OB_MODE_EDIT) {
+ else if (object_mode & OB_MODE_EDIT) {
/* get editmode results */
has_edited = true;
ED_object_editmode_load(ob);
@@ -317,16 +309,28 @@ void ED_region_draw_mouse_line_cb(const bContext *C, ARegion *ar, void *arg_info
{
wmWindow *win = CTX_wm_window(C);
const float *mval_src = (float *)arg_info;
- const int mval_dst[2] = {win->eventstate->x - ar->winrct.xmin,
- win->eventstate->y - ar->winrct.ymin};
-
- UI_ThemeColor(TH_VIEW_OVERLAY);
- setlinestyle(3);
- glBegin(GL_LINES);
- glVertex2iv(mval_dst);
- glVertex2fv(mval_src);
- glEnd();
- setlinestyle(0);
+ const float mval_dst[2] = {win->eventstate->x - ar->winrct.xmin,
+ win->eventstate->y - ar->winrct.ymin};
+
+ const uint shdr_pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR);
+
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2] / UI_DPI_FAC, viewport_size[3] / UI_DPI_FAC);
+
+ immUniform1i("num_colors", 0); /* "simple" mode */
+ immUniformThemeColor(TH_VIEW_OVERLAY);
+ immUniform1f("dash_width", 6.0f);
+ immUniform1f("dash_factor", 0.5f);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2fv(shdr_pos, mval_src);
+ immVertex2fv(shdr_pos, mval_dst);
+ immEnd();
+
+ immUnbindProgram();
}
/**
diff --git a/source/blender/editors/util/editmode_undo.c b/source/blender/editors/util/editmode_undo.c
index 441fd446cd6..d9f777771a8 100644
--- a/source/blender/editors/util/editmode_undo.c
+++ b/source/blender/editors/util/editmode_undo.c
@@ -42,9 +42,10 @@
#include "BKE_blender_undo.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_global.h"
+#include "DEG_depsgraph.h"
+
#include "ED_util.h"
#include "ED_mesh.h"
@@ -269,7 +270,7 @@ void undo_editmode_step(bContext *C, int step)
EDBM_selectmode_to_scene(C);
}
- DAG_id_tag_update(&obedit->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&obedit->id, OB_RECALC_DATA);
/* XXX notifiers */
}
diff --git a/source/blender/editors/util/undo.c b/source/blender/editors/util/undo.c
index 95b5c2c1e48..64055b46431 100644
--- a/source/blender/editors/util/undo.c
+++ b/source/blender/editors/util/undo.c
@@ -45,9 +45,12 @@
#include "BKE_blender_undo.h"
#include "BKE_context.h"
#include "BKE_global.h"
+#include "BKE_library_override.h"
#include "BKE_main.h"
#include "BKE_screen.h"
+#include "DEG_depsgraph.h"
+
#include "ED_armature.h"
#include "ED_particle.h"
#include "ED_curve.h"
@@ -76,12 +79,16 @@
void ED_undo_push(bContext *C, const char *str)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Object *obedit = CTX_data_edit_object(C);
Object *obact = CTX_data_active_object(C);
if (G.debug & G_DEBUG)
printf("%s: %s\n", __func__, str);
+ /* Always do it for now, this might need to be refined... */
+ BKE_main_override_static_operations_create(CTX_data_main(C));
+
if (obedit) {
if (U.undosteps == 0) return;
@@ -98,12 +105,12 @@ void ED_undo_push(bContext *C, const char *str)
else if (obedit->type == OB_ARMATURE)
undo_push_armature(C, str);
}
- else if (obact && obact->mode & OB_MODE_PARTICLE_EDIT) {
+ else if (obact && workspace->object_mode & OB_MODE_PARTICLE_EDIT) {
if (U.undosteps == 0) return;
- PE_undo_push(CTX_data_scene(C), str);
+ PE_undo_push(CTX_data_scene(C), CTX_data_view_layer(C), str);
}
- else if (obact && obact->mode & OB_MODE_SCULPT) {
+ else if (obact && workspace->object_mode & OB_MODE_SCULPT) {
/* do nothing for now */
}
else {
@@ -116,10 +123,12 @@ void ED_undo_push(bContext *C, const char *str)
/* note: also check undo_history_exec() in bottom if you change notifiers */
static int ed_undo_step(bContext *C, int step, const char *undoname)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
wmWindowManager *wm = CTX_wm_manager(C);
wmWindow *win = CTX_wm_window(C);
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Object *obedit = CTX_data_edit_object(C);
Object *obact = CTX_data_active_object(C);
ScrArea *sa = CTX_wm_area(C);
@@ -138,7 +147,7 @@ static int ed_undo_step(bContext *C, int step, const char *undoname)
if (sa && (sa->spacetype == SPACE_IMAGE)) {
SpaceImage *sima = (SpaceImage *)sa->spacedata.first;
- if ((obact && (obact->mode & OB_MODE_TEXTURE_PAINT)) || (sima->mode == SI_MODE_PAINT)) {
+ if ((obact && (workspace->object_mode & OB_MODE_TEXTURE_PAINT)) || (sima->mode == SI_MODE_PAINT)) {
if (!ED_undo_paint_step(C, UNDO_PAINT_IMAGE, step, undoname) && undoname) {
if (U.uiflag & USER_GLOBALUNDO) {
ED_viewport_render_kill_jobs(wm, bmain, true);
@@ -172,17 +181,17 @@ static int ed_undo_step(bContext *C, int step, const char *undoname)
* That was inconsistent with editmode, and also makes for
* unecessarily tricky interaction with the other undo
* systems. */
- if (obact && obact->mode & OB_MODE_TEXTURE_PAINT) {
+ if (obact && workspace->object_mode & OB_MODE_TEXTURE_PAINT) {
ED_undo_paint_step(C, UNDO_PAINT_IMAGE, step, undoname);
}
- else if (obact && obact->mode & OB_MODE_SCULPT) {
+ else if (obact && workspace->object_mode & OB_MODE_SCULPT) {
ED_undo_paint_step(C, UNDO_PAINT_MESH, step, undoname);
}
- else if (obact && obact->mode & OB_MODE_PARTICLE_EDIT) {
+ else if (obact && workspace->object_mode & OB_MODE_PARTICLE_EDIT) {
if (step == 1)
- PE_undo(scene);
+ PE_undo(scene, view_layer);
else
- PE_redo(scene);
+ PE_redo(scene, view_layer);
}
else if (U.uiflag & USER_GLOBALUNDO) {
// note python defines not valid here anymore.
@@ -264,6 +273,7 @@ void ED_undo_pop_op(bContext *C, wmOperator *op)
/* name optionally, function used to check for operator redo panel */
bool ED_undo_is_valid(const bContext *C, const char *undoname)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Object *obedit = CTX_data_edit_object(C);
Object *obact = CTX_data_active_object(C);
ScrArea *sa = CTX_wm_area(C);
@@ -271,7 +281,7 @@ bool ED_undo_is_valid(const bContext *C, const char *undoname)
if (sa && sa->spacetype == SPACE_IMAGE) {
SpaceImage *sima = (SpaceImage *)sa->spacedata.first;
- if ((obact && (obact->mode & OB_MODE_TEXTURE_PAINT)) || (sima->mode == SI_MODE_PAINT)) {
+ if ((obact && (workspace->object_mode & OB_MODE_TEXTURE_PAINT)) || (sima->mode == SI_MODE_PAINT)) {
return 1;
}
}
@@ -288,16 +298,16 @@ bool ED_undo_is_valid(const bContext *C, const char *undoname)
/* if below tests fail, global undo gets executed */
- if (obact && obact->mode & OB_MODE_TEXTURE_PAINT) {
+ if (obact && workspace->object_mode & OB_MODE_TEXTURE_PAINT) {
if (ED_undo_paint_is_valid(UNDO_PAINT_IMAGE, undoname))
return 1;
}
- else if (obact && obact->mode & OB_MODE_SCULPT) {
+ else if (obact && workspace->object_mode & OB_MODE_SCULPT) {
if (ED_undo_paint_is_valid(UNDO_PAINT_MESH, undoname))
return 1;
}
- else if (obact && obact->mode & OB_MODE_PARTICLE_EDIT) {
- return PE_undo_is_valid(CTX_data_scene(C));
+ else if (obact && workspace->object_mode & OB_MODE_PARTICLE_EDIT) {
+ return PE_undo_is_valid(CTX_data_scene(C), CTX_data_view_layer(C));
}
if (U.uiflag & USER_GLOBALUNDO) {
@@ -492,6 +502,7 @@ enum {
static int get_undo_system(bContext *C)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
Object *obact = CTX_data_active_object(C);
Object *obedit = CTX_data_edit_object(C);
ScrArea *sa = CTX_wm_area(C);
@@ -500,7 +511,7 @@ static int get_undo_system(bContext *C)
if (sa && (sa->spacetype == SPACE_IMAGE)) {
SpaceImage *sima = (SpaceImage *)sa->spacedata.first;
- if ((obact && (obact->mode & OB_MODE_TEXTURE_PAINT)) || (sima->mode == SI_MODE_PAINT)) {
+ if ((obact && (workspace->object_mode & OB_MODE_TEXTURE_PAINT)) || (sima->mode == SI_MODE_PAINT)) {
if (!ED_undo_paint_empty(UNDO_PAINT_IMAGE))
return UNDOSYSTEM_IMAPAINT;
}
@@ -513,13 +524,13 @@ static int get_undo_system(bContext *C)
}
else {
if (obact) {
- if (obact->mode & OB_MODE_PARTICLE_EDIT)
+ if (workspace->object_mode & OB_MODE_PARTICLE_EDIT)
return UNDOSYSTEM_PARTICLE;
- else if (obact->mode & OB_MODE_TEXTURE_PAINT) {
+ else if (workspace->object_mode & OB_MODE_TEXTURE_PAINT) {
if (!ED_undo_paint_empty(UNDO_PAINT_IMAGE))
return UNDOSYSTEM_IMAPAINT;
}
- else if (obact->mode & OB_MODE_SCULPT) {
+ else if (workspace->object_mode & OB_MODE_SCULPT) {
if (!ED_undo_paint_empty(UNDO_PAINT_MESH))
return UNDOSYSTEM_SCULPT;
}
@@ -542,7 +553,7 @@ static const EnumPropertyItem *rna_undo_itemf(bContext *C, int undosys, int *tot
const char *name = NULL;
if (undosys == UNDOSYSTEM_PARTICLE) {
- name = PE_undo_get_name(CTX_data_scene(C), i, &active);
+ name = PE_undo_get_name(CTX_data_scene(C), CTX_data_view_layer(C), i, &active);
}
else if (undosys == UNDOSYSTEM_EDITMODE) {
name = undo_editmode_get_name(C, i, &active);
@@ -625,7 +636,7 @@ static int undo_history_exec(bContext *C, wmOperator *op)
int item = RNA_int_get(op->ptr, "item");
if (undosys == UNDOSYSTEM_PARTICLE) {
- PE_undo_number(CTX_data_scene(C), item);
+ PE_undo_number(CTX_data_scene(C), CTX_data_view_layer(C), item);
}
else if (undosys == UNDOSYSTEM_EDITMODE) {
undo_editmode_number(C, item + 1);
diff --git a/source/blender/editors/uvedit/CMakeLists.txt b/source/blender/editors/uvedit/CMakeLists.txt
index 543ef0e0663..a933717fe98 100644
--- a/source/blender/editors/uvedit/CMakeLists.txt
+++ b/source/blender/editors/uvedit/CMakeLists.txt
@@ -24,6 +24,7 @@ set(INC
../../blenlib
../../blentranslation
../../bmesh
+ ../../depsgraph
../../gpu
../../makesdna
../../makesrna
diff --git a/source/blender/editors/uvedit/uvedit_buttons.c b/source/blender/editors/uvedit/uvedit_buttons.c
index ab415c0cb83..6b4dd0f0210 100644
--- a/source/blender/editors/uvedit/uvedit_buttons.c
+++ b/source/blender/editors/uvedit/uvedit_buttons.c
@@ -66,17 +66,14 @@ static int uvedit_center(Scene *scene, BMEditMesh *em, Image *ima, float center[
BMFace *f;
BMLoop *l;
BMIter iter, liter;
- MTexPoly *tf;
MLoopUV *luv;
int tot = 0;
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
- const int cd_poly_tex_offset = CustomData_get_offset(&em->bm->pdata, CD_MTEXPOLY);
zero_v2(center);
BM_ITER_MESH (f, &iter, em->bm, BM_FACES_OF_MESH) {
- tf = BM_ELEM_CD_GET_VOID_P(f, cd_poly_tex_offset);
- if (!uvedit_face_visible_test(scene, ima, f, tf))
+ if (!uvedit_face_visible_test(scene, ima, f))
continue;
BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) {
@@ -102,14 +99,11 @@ static void uvedit_translate(Scene *scene, BMEditMesh *em, Image *ima, float del
BMLoop *l;
BMIter iter, liter;
MLoopUV *luv;
- MTexPoly *tf;
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
- const int cd_poly_tex_offset = CustomData_get_offset(&em->bm->pdata, CD_MTEXPOLY);
BM_ITER_MESH (f, &iter, em->bm, BM_FACES_OF_MESH) {
- tf = BM_ELEM_CD_GET_VOID_P(f, cd_poly_tex_offset);
- if (!uvedit_face_visible_test(scene, ima, f, tf))
+ if (!uvedit_face_visible_test(scene, ima, f))
continue;
BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) {
diff --git a/source/blender/editors/uvedit/uvedit_draw.c b/source/blender/editors/uvedit/uvedit_draw.c
index fecacd07997..6a8d13574f3 100644
--- a/source/blender/editors/uvedit/uvedit_draw.c
+++ b/source/blender/editors/uvedit/uvedit_draw.c
@@ -33,6 +33,8 @@
#include <stdlib.h>
#include <string.h>
+#include "MEM_guardedalloc.h"
+
#include "DNA_material_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
@@ -52,9 +54,15 @@
#include "BKE_scene.h"
-#include "BIF_gl.h"
#include "BIF_glutil.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_query.h"
+
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+#include "GPU_matrix.h"
+
#include "ED_image.h"
#include "ED_mesh.h"
#include "ED_uvedit.h"
@@ -65,12 +73,7 @@
#include "uvedit_intern.h"
-#include "GPU_basic_shader.h"
-
-/* use editmesh tessface */
-#define USE_EDBM_LOOPTRIS
-
-static void draw_uvs_lineloop_bmface(BMFace *efa, const int cd_loop_uv_offset);
+static void draw_uvs_lineloop_bmface(BMFace *efa, const int cd_loop_uv_offset, const uint shdr_pos);
void ED_image_draw_cursor(ARegion *ar, const float cursor[2])
{
@@ -81,38 +84,59 @@ void ED_image_draw_cursor(ARegion *ar, const float cursor[2])
mul_v2_fl(zoom, 256.0f * UI_DPI_FAC);
x_fac = zoom[0];
y_fac = zoom[1];
-
- cpack(0xFFFFFF);
- glTranslate2fv(cursor);
- fdrawline(-0.05f * x_fac, 0, 0, 0.05f * y_fac);
- fdrawline(0, 0.05f * y_fac, 0.05f * x_fac, 0.0f);
- fdrawline(0.05f * x_fac, 0.0f, 0.0f, -0.05f * y_fac);
- fdrawline(0.0f, -0.05f * y_fac, -0.05f * x_fac, 0.0f);
-
- setlinestyle(4);
- cpack(0xFF);
- fdrawline(-0.05f * x_fac, 0.0f, 0.0f, 0.05f * y_fac);
- fdrawline(0.0f, 0.05f * y_fac, 0.05f * x_fac, 0.0f);
- fdrawline(0.05f * x_fac, 0.0f, 0.0f, -0.05f * y_fac);
- fdrawline(0.0f, -0.05f * y_fac, -0.05f * x_fac, 0.0f);
-
-
- setlinestyle(0.0f);
- cpack(0x0);
- fdrawline(-0.020f * x_fac, 0.0f, -0.1f * x_fac, 0.0f);
- fdrawline(0.1f * x_fac, 0.0f, 0.020f * x_fac, 0.0f);
- fdrawline(0.0f, -0.020f * y_fac, 0.0f, -0.1f * y_fac);
- fdrawline(0.0f, 0.1f * y_fac, 0.0f, 0.020f * y_fac);
-
- setlinestyle(1);
- cpack(0xFFFFFF);
- fdrawline(-0.020f * x_fac, 0.0f, -0.1f * x_fac, 0.0f);
- fdrawline(0.1f * x_fac, 0.0f, 0.020f * x_fac, 0.0f);
- fdrawline(0.0f, -0.020f * y_fac, 0.0f, -0.1f * y_fac);
- fdrawline(0.0f, 0.1f * y_fac, 0.0f, 0.020f * y_fac);
-
- glTranslatef(-cursor[0], -cursor[1], 0.0);
- setlinestyle(0);
+
+ gpuTranslate2fv(cursor);
+
+ const uint shdr_pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR);
+
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2] / UI_DPI_FAC, viewport_size[3] / UI_DPI_FAC);
+
+ immUniform1i("num_colors", 2); /* "advanced" mode */
+ immUniformArray4fv("colors", (float *)(float[][4]){{1.0f, 0.0f, 0.0f, 1.0f}, {1.0f, 1.0f, 1.0f, 1.0f}}, 2);
+ immUniform1f("dash_width", 8.0f);
+
+ immBegin(GWN_PRIM_LINES, 8);
+
+ immVertex2f(shdr_pos, -0.05f * x_fac, 0.0f);
+ immVertex2f(shdr_pos, 0.0f, 0.05f * y_fac);
+
+ immVertex2f(shdr_pos, 0.0f, 0.05f * y_fac);
+ immVertex2f(shdr_pos, 0.05f * x_fac, 0.0f);
+
+ immVertex2f(shdr_pos, 0.05f * x_fac, 0.0f);
+ immVertex2f(shdr_pos, 0.0f, -0.05f * y_fac);
+
+ immVertex2f(shdr_pos, 0.0f, -0.05f * y_fac);
+ immVertex2f(shdr_pos, -0.05f * x_fac, 0.0f);
+
+ immEnd();
+
+ immUniformArray4fv("colors", (float *)(float[][4]){{1.0f, 1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f, 1.0f}}, 2);
+ immUniform1f("dash_width", 2.0f);
+
+ immBegin(GWN_PRIM_LINES, 8);
+
+ immVertex2f(shdr_pos, -0.020f * x_fac, 0.0f);
+ immVertex2f(shdr_pos, -0.1f * x_fac, 0.0f);
+
+ immVertex2f(shdr_pos, 0.1f * x_fac, 0.0f);
+ immVertex2f(shdr_pos, 0.020f * x_fac, 0.0f);
+
+ immVertex2f(shdr_pos, 0.0f, -0.020f * y_fac);
+ immVertex2f(shdr_pos, 0.0f, -0.1f * y_fac);
+
+ immVertex2f(shdr_pos, 0.0f, 0.1f * y_fac);
+ immVertex2f(shdr_pos, 0.0f, 0.020f * y_fac);
+
+ immEnd();
+
+ immUnbindProgram();
+
+ gpuTranslate2f(-cursor[0], -cursor[1]);
}
static int draw_uvs_face_check(Scene *scene)
@@ -141,41 +165,32 @@ static void draw_uvs_shadow(Object *obedit)
const int cd_loop_uv_offset = CustomData_get_offset(&bm->ldata, CD_MLOOPUV);
- /* draws the mesh when painting */
- UI_ThemeColor(TH_UV_SHADOW);
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
- BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
- draw_uvs_lineloop_bmface(efa, cd_loop_uv_offset);
- }
-}
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
-static int draw_uvs_dm_shadow(DerivedMesh *dm)
-{
- /* draw shadow mesh - this is the mesh with the modifier applied */
+ /* draws the mesh when painting */
+ immUniformThemeColor(TH_UV_SHADOW);
- if (dm && dm->drawUVEdges && CustomData_has_layer(&dm->loopData, CD_MLOOPUV)) {
- UI_ThemeColor(TH_UV_SHADOW);
- dm->drawUVEdges(dm);
- return 1;
+ BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
+ draw_uvs_lineloop_bmface(efa, cd_loop_uv_offset, pos);
}
- return 0;
+ immUnbindProgram();
}
-static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTexPoly *activetf)
+static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, const BMFace *efa_act)
{
BMesh *bm = em->bm;
BMFace *efa;
BMLoop *l;
BMIter iter, liter;
- MTexPoly *tf;
MLoopUV *luv;
Image *ima = sima->image;
float aspx, aspy, col[4];
int i;
const int cd_loop_uv_offset = CustomData_get_offset(&bm->ldata, CD_MLOOPUV);
- const int cd_poly_tex_offset = CustomData_get_offset(&bm->pdata, CD_MTEXPOLY);
BLI_buffer_declare_static(vec2f, tf_uv_buf, BLI_BUFFER_NOP, BM_DEFAULT_NGON_STACK_SIZE);
BLI_buffer_declare_static(vec2f, tf_uvorig_buf, BLI_BUFFER_NOP, BM_DEFAULT_NGON_STACK_SIZE);
@@ -191,7 +206,6 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe
const int efa_len = efa->len;
float (*tf_uv)[2] = (float (*)[2])BLI_buffer_reinit_data(&tf_uv_buf, vec2f, efa_len);
float (*tf_uvorig)[2] = (float (*)[2])BLI_buffer_reinit_data(&tf_uvorig_buf, vec2f, efa_len);
- tf = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
BM_ITER_ELEM_INDEX (l, &liter, efa, BM_LOOPS_OF_FACE, i) {
luv = BM_ELEM_CD_GET_VOID_P(l, cd_loop_uv_offset);
@@ -203,28 +217,37 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe
totarea += BM_face_calc_area(efa);
totuvarea += area_poly_v2(tf_uv, efa->len);
- if (uvedit_face_visible_test(scene, ima, efa, tf)) {
+ if (uvedit_face_visible_test(scene, ima, efa)) {
BM_elem_flag_enable(efa, BM_ELEM_TAG);
}
else {
- if (tf == activetf)
- activetf = NULL;
+ if (efa == efa_act) {
+ efa_act = NULL;
+ }
BM_elem_flag_disable(efa, BM_ELEM_TAG);
}
}
-
+
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
if (totarea < FLT_EPSILON || totuvarea < FLT_EPSILON) {
col[0] = 1.0;
col[1] = col[2] = 0.0;
- glColor3fv(col);
+
+ immUniformColor3fv(col);
+
BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
if (BM_elem_flag_test(efa, BM_ELEM_TAG)) {
- glBegin(GL_POLYGON);
+ immBegin(GWN_PRIM_TRI_FAN, efa->len);
+
BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
luv = BM_ELEM_CD_GET_VOID_P(l, cd_loop_uv_offset);
- glVertex2fv(luv->uv);
+ immVertex2fv(pos, luv->uv);
}
- glEnd();
+
+ immEnd();
}
}
}
@@ -254,18 +277,23 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe
areadiff = 1.0f - (area / uvarea);
weight_to_rgb(col, areadiff);
- glColor3fv(col);
+ immUniformColor3fv(col);
- /* TODO: USE_EDBM_LOOPTRIS */
- glBegin(GL_POLYGON);
+ /* TODO: use editmesh tessface */
+ immBegin(GWN_PRIM_TRI_FAN, efa->len);
+
BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
luv = BM_ELEM_CD_GET_VOID_P(l, cd_loop_uv_offset);
- glVertex2fv(luv->uv);
+ immVertex2fv(pos, luv->uv);
}
- glEnd();
+
+ immEnd();
}
}
}
+
+ immUnbindProgram();
+
break;
}
case SI_UVDT_STRETCH_ANGLE:
@@ -278,11 +306,15 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe
BLI_buffer_declare_static(vec2f, auv_buf, BLI_BUFFER_NOP, BM_DEFAULT_NGON_STACK_SIZE);
col[3] = 0.5f; /* hard coded alpha, not that nice */
-
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int color = GWN_vertformat_attr_add(format, "color", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_SMOOTH_COLOR);
+
BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
- tf = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
-
- if (uvedit_face_visible_test(scene, ima, efa, tf)) {
+ if (uvedit_face_visible_test(scene, ima, efa)) {
const int efa_len = efa->len;
float (*tf_uv)[2] = (float (*)[2])BLI_buffer_reinit_data(&tf_uv_buf, vec2f, efa_len);
float (*tf_uvorig)[2] = (float (*)[2])BLI_buffer_reinit_data(&tf_uvorig_buf, vec2f, efa_len);
@@ -319,24 +351,26 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe
ang[i] = angle_normalized_v3v3(av[i], av[(i + 1) % efa_len]);
}
- /* TODO: USE_EDBM_LOOPTRIS */
- glBegin(GL_POLYGON);
+ /* TODO: use editmesh tessface */
+ immBegin(GWN_PRIM_TRI_FAN, efa->len);
BM_ITER_ELEM_INDEX (l, &liter, efa, BM_LOOPS_OF_FACE, i) {
luv = BM_ELEM_CD_GET_VOID_P(l, cd_loop_uv_offset);
a = fabsf(uvang[i] - ang[i]) / (float)M_PI;
weight_to_rgb(col, 1.0f - pow2f(1.0f - a));
- glColor3fv(col);
- glVertex2fv(luv->uv);
+ immAttrib3fv(color, col);
+ immVertex2fv(pos, luv->uv);
}
- glEnd();
+ immEnd();
}
else {
- if (tf == activetf)
- activetf = NULL;
+ if (efa == efa_act)
+ efa_act = NULL;
BM_elem_flag_disable(efa, BM_ELEM_TAG);
}
}
+ immUnbindProgram();
+
BLI_buffer_free(&uvang_buf);
BLI_buffer_free(&ang_buf);
BLI_buffer_free(&av_buf);
@@ -350,58 +384,74 @@ static void draw_uvs_stretch(SpaceImage *sima, Scene *scene, BMEditMesh *em, MTe
BLI_buffer_free(&tf_uvorig_buf);
}
-static void draw_uvs_lineloop_bmface(BMFace *efa, const int cd_loop_uv_offset)
+static void draw_uvs_lineloop_bmface(BMFace *efa, const int cd_loop_uv_offset, const uint shdr_pos)
{
BMIter liter;
BMLoop *l;
MLoopUV *luv;
- glBegin(GL_LINE_LOOP);
+ immBegin(GWN_PRIM_LINE_LOOP, efa->len);
+
BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
luv = BM_ELEM_CD_GET_VOID_P(l, cd_loop_uv_offset);
- glVertex2fv(luv->uv);
+ immVertex2fv(shdr_pos, luv->uv);
}
- glEnd();
+
+ immEnd();
}
-static void draw_uvs_lineloop_mpoly(Mesh *me, MPoly *mpoly)
+static void draw_uvs_lineloop_mpoly(Mesh *me, MPoly *mpoly, unsigned int pos)
{
MLoopUV *mloopuv;
int i;
- glBegin(GL_LINE_LOOP);
+ immBegin(GWN_PRIM_LINE_LOOP, mpoly->totloop);
+
mloopuv = &me->mloopuv[mpoly->loopstart];
for (i = mpoly->totloop; i != 0; i--, mloopuv++) {
- glVertex2fv(mloopuv->uv);
+ immVertex2fv(pos, mloopuv->uv);
}
- glEnd();
+
+ immEnd();
}
-static void draw_uvs_other_mesh_texface(Object *ob, const Image *curimage, const int other_uv_filter)
+static void draw_uvs_other_mesh_texface(Object *ob, const Image *curimage, const int other_uv_filter, unsigned int pos)
{
Mesh *me = ob->data;
MPoly *mpoly = me->mpoly;
- MTexPoly *mtpoly = me->mtpoly;
int a;
if (me->mloopuv == NULL) {
return;
}
- for (a = me->totpoly; a != 0; a--, mpoly++, mtpoly++) {
+ Image **image_array = NULL;
+
+ if (other_uv_filter == SI_FILTER_SAME_IMAGE) {
+ image_array = BKE_object_material_edit_image_get_array(ob);
+ }
+
+ for (a = me->totpoly; a != 0; a--, mpoly++) {
if (other_uv_filter == SI_FILTER_ALL) {
/* Nothing to compare, all UV faces are visible. */
}
else if (other_uv_filter == SI_FILTER_SAME_IMAGE) {
- if (mtpoly->tpage != curimage) {
+ if (mpoly[a].mat_nr >= ob->totcol) {
+ continue;
+ }
+ if (image_array[mpoly[a].mat_nr] != curimage) {
continue;
}
}
- draw_uvs_lineloop_mpoly(me, mpoly);
+ draw_uvs_lineloop_mpoly(me, mpoly, pos);
+ }
+
+ if (image_array) {
+ MEM_freeN(image_array);
}
}
-static void draw_uvs_other_mesh_new_shading(Object *ob, const Image *curimage, const int other_uv_filter)
+static void draw_uvs_other_mesh_new_shading(Object *ob, const Image *curimage, const int other_uv_filter, unsigned int pos)
{
Mesh *me = ob->data;
MPoly *mpoly = me->mpoly;
@@ -453,41 +503,43 @@ static void draw_uvs_other_mesh_new_shading(Object *ob, const Image *curimage, c
}
}
- draw_uvs_lineloop_mpoly(me, mpoly);
+ draw_uvs_lineloop_mpoly(me, mpoly, pos);
}
}
static void draw_uvs_other_mesh(Object *ob, const Image *curimage, const bool new_shading_nodes,
- const int other_uv_filter)
+ const int other_uv_filter, unsigned int pos)
{
if (new_shading_nodes) {
- draw_uvs_other_mesh_new_shading(ob, curimage, other_uv_filter);
+ draw_uvs_other_mesh_new_shading(ob, curimage, other_uv_filter, pos);
}
else {
- draw_uvs_other_mesh_texface(ob, curimage, other_uv_filter);
+ draw_uvs_other_mesh_texface(ob, curimage, other_uv_filter, pos);
}
}
-static void draw_uvs_other(Scene *scene, Object *obedit, const Image *curimage, const bool new_shading_nodes,
+static void draw_uvs_other(ViewLayer *view_layer, Object *obedit, const Image *curimage, const bool new_shading_nodes,
const int other_uv_filter)
{
- Base *base;
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
- UI_ThemeColor(TH_UV_OTHERS);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
- for (base = scene->base.first; base; base = base->next) {
- Object *ob = base->object;
+ immUniformThemeColor(TH_UV_OTHERS);
- if (!(base->flag & SELECT)) continue;
- if (!(base->lay & scene->lay)) continue;
- if (ob->restrictflag & OB_RESTRICT_VIEW) continue;
-
- if ((ob->type == OB_MESH) && (ob != obedit) && ((Mesh *)ob->data)->mloopuv) {
- draw_uvs_other_mesh(ob, curimage, new_shading_nodes, other_uv_filter);
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ if (((base->flag & BASE_SELECTED) != 0) &&
+ ((base->flag & BASE_VISIBLED) != 0))
+ {
+ Object *ob = base->object;
+ if ((ob->type == OB_MESH) && (ob != obedit) && ((Mesh *)ob->data)->mloopuv) {
+ draw_uvs_other_mesh(ob, curimage, new_shading_nodes, other_uv_filter, pos);
+ }
}
}
+ immUnbindProgram();
}
-static void draw_uvs_texpaint(SpaceImage *sima, Scene *scene, Object *ob)
+static void draw_uvs_texpaint(SpaceImage *sima, Scene *scene, ViewLayer *view_layer, Object *ob)
{
const bool new_shading_nodes = BKE_scene_use_new_shading_nodes(scene);
Image *curimage = ED_space_image(sima);
@@ -495,11 +547,9 @@ static void draw_uvs_texpaint(SpaceImage *sima, Scene *scene, Object *ob)
Material *ma;
if (sima->flag & SI_DRAW_OTHER) {
- draw_uvs_other(scene, ob, curimage, new_shading_nodes, sima->other_uv_filter);
+ draw_uvs_other(view_layer, ob, curimage, new_shading_nodes, sima->other_uv_filter);
}
- UI_ThemeColor(TH_UV_SHADOW);
-
ma = give_current_material(ob, ob->actcol);
if (me->mloopuv) {
@@ -512,24 +562,33 @@ static void draw_uvs_texpaint(SpaceImage *sima, Scene *scene, Object *ob)
mloopuv = me->mloopuv;
}
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ immUniformThemeColor(TH_UV_SHADOW);
+
mloopuv_base = mloopuv;
for (a = me->totpoly; a > 0; a--, mpoly++) {
if ((scene->toolsettings->uv_flag & UV_SHOW_SAME_IMAGE) && mpoly->mat_nr != ob->actcol - 1)
continue;
- glBegin(GL_LINE_LOOP);
+
+ immBegin(GWN_PRIM_LINE_LOOP, mpoly->totloop);
mloopuv = mloopuv_base + mpoly->loopstart;
for (b = 0; b < mpoly->totloop; b++, mloopuv++) {
- glVertex2fv(mloopuv->uv);
+ immVertex2fv(pos, mloopuv->uv);
}
- glEnd();
+
+ immEnd();
}
+
+ immUnbindProgram();
}
}
-#ifdef USE_EDBM_LOOPTRIS
-static void draw_uvs_looptri(BMEditMesh *em, unsigned int *r_loop_index, const int cd_loop_uv_offset)
+static void draw_uvs_looptri(BMEditMesh *em, unsigned int *r_loop_index, const int cd_loop_uv_offset, unsigned int pos)
{
unsigned int i = *r_loop_index;
BMFace *f = em->looptris[i][0]->f;
@@ -537,16 +596,15 @@ static void draw_uvs_looptri(BMEditMesh *em, unsigned int *r_loop_index, const i
unsigned int j;
for (j = 0; j < 3; j++) {
MLoopUV *luv = BM_ELEM_CD_GET_VOID_P(em->looptris[i][j], cd_loop_uv_offset);
- glVertex2fv(luv->uv);
+ immVertex2fv(pos, luv->uv);
}
i++;
} while (i != em->tottri && (f == em->looptris[i][0]->f));
*r_loop_index = i - 1;
}
-#endif
/* draws uv's in the image space */
-static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit)
+static void draw_uvs(SpaceImage *sima, Scene *scene, ViewLayer *view_layer, Object *obedit, Depsgraph *depsgraph)
{
const bool new_shading_nodes = BKE_scene_use_new_shading_nodes(scene);
ToolSettings *ts;
@@ -554,26 +612,19 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit)
BMEditMesh *em = me->edit_btmesh;
BMesh *bm = em->bm;
BMFace *efa, *efa_act;
-#ifndef USE_EDBM_LOOPTRIS
- BMFace *activef;
-#endif
BMLoop *l;
BMIter iter, liter;
- MTexPoly *tf, *activetf = NULL;
MLoopUV *luv;
- DerivedMesh *finaldm, *cagedm;
unsigned char col1[4], col2[4];
float pointsize;
int drawfaces, interpedges;
Image *ima = sima->image;
const int cd_loop_uv_offset = CustomData_get_offset(&bm->ldata, CD_MLOOPUV);
- const int cd_poly_tex_offset = CustomData_get_offset(&bm->pdata, CD_MTEXPOLY);
- activetf = EDBM_mtexpoly_active_get(em, &efa_act, false, false); /* will be set to NULL if hidden */
-#ifndef USE_EDBM_LOOPTRIS
- activef = BM_mesh_active_face_get(bm, false, false);
-#endif
+ unsigned int pos, color;
+
+ efa_act = EDBM_uv_active_face_get(em, false, false); /* will be set to NULL if hidden */
ts = scene->toolsettings;
drawfaces = draw_uvs_face_check(scene);
@@ -595,150 +646,91 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit)
}
}
else {
- curimage = (activetf) ? activetf->tpage : ima;
+ curimage = (efa_act) ? BKE_object_material_edit_image_get(obedit, efa_act->mat_nr) : ima;
}
- draw_uvs_other(scene, obedit, curimage, new_shading_nodes, sima->other_uv_filter);
+ draw_uvs_other(view_layer, obedit, curimage, new_shading_nodes, sima->other_uv_filter);
}
/* 1. draw shadow mesh */
if (sima->flag & SI_DRAWSHADOW) {
- DM_update_materials(em->derivedFinal, obedit);
- /* first try existing derivedmesh */
- if (!draw_uvs_dm_shadow(em->derivedFinal)) {
- /* create one if it does not exist */
- cagedm = editbmesh_get_derived_cage_and_final(
- scene, obedit, me->edit_btmesh, CD_MASK_BAREMESH | CD_MASK_MTFACE,
- &finaldm);
-
- /* when sync selection is enabled, all faces are drawn (except for hidden)
- * so if cage is the same as the final, theres no point in drawing this */
- if (!((ts->uv_flag & UV_SYNC_SELECTION) && (cagedm == finaldm)))
- draw_uvs_dm_shadow(finaldm);
-
- /* release derivedmesh again */
- if (cagedm != finaldm) cagedm->release(cagedm);
- finaldm->release(finaldm);
+ Object *ob_cage = DEG_get_evaluated_object(depsgraph, obedit);
+ /* XXX TODO: Need to check if shadow mesh is different than original mesh. */
+ bool is_cage_like_final_meshes = (ob_cage == obedit);
+
+ /* When sync selection is enabled, all faces are drawn (except for hidden)
+ * so if cage is the same as the final, there is no point in drawing this. */
+ if (((ts->uv_flag & UV_SYNC_SELECTION) == 0) || is_cage_like_final_meshes) {
+ draw_uvs_shadow(ob_cage);
}
}
-
+
/* 2. draw colored faces */
if (sima->flag & SI_DRAW_STRETCH) {
- draw_uvs_stretch(sima, scene, em, activetf);
+ draw_uvs_stretch(sima, scene, em, efa_act);
}
- else if (!(sima->flag & SI_NO_DRAWFACES)) {
- /* draw transparent faces */
- UI_GetThemeColor4ubv(TH_FACE, col1);
- UI_GetThemeColor4ubv(TH_FACE_SELECT, col2);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glEnable(GL_BLEND);
-
-#ifdef USE_EDBM_LOOPTRIS
- {
- unsigned int i;
- for (i = 0; i < em->tottri; i++) {
+ else {
+ unsigned int tri_count = 0;
+ BM_ITER_MESH(efa, &iter, bm, BM_FACES_OF_MESH) {
+ if (uvedit_face_visible_test(scene, ima, efa)) {
+ BM_elem_flag_enable(efa, BM_ELEM_TAG);
+ tri_count += efa->len - 2;
+ }
+ else {
+ BM_elem_flag_disable(efa, BM_ELEM_TAG);
+ }
+ }
+
+ if (tri_count && !(sima->flag & SI_NO_DRAWFACES)) {
+ /* draw transparent faces */
+ UI_GetThemeColor4ubv(TH_FACE, col1);
+ UI_GetThemeColor4ubv(TH_FACE_SELECT, col2);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ glEnable(GL_BLEND);
+
+ Gwn_VertFormat *format = immVertexFormat();
+ pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ color = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 4, GWN_FETCH_INT_TO_FLOAT_UNIT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_FLAT_COLOR);
+
+ immBegin(GWN_PRIM_TRIS, tri_count * 3);
+ for (unsigned int i = 0; i < em->tottri; i++) {
efa = em->looptris[i][0]->f;
- tf = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
- if (uvedit_face_visible_test(scene, ima, efa, tf)) {
+ if (BM_elem_flag_test(efa, BM_ELEM_TAG)) {
const bool is_select = uvedit_face_select_test(scene, efa, cd_loop_uv_offset);
- BM_elem_flag_enable(efa, BM_ELEM_TAG);
- if (tf == activetf) {
+ if (efa == efa_act) {
/* only once */
- GPU_basic_shader_bind(GPU_SHADER_STIPPLE | GPU_SHADER_USE_COLOR);
- GPU_basic_shader_stipple(GPU_SHADER_STIPPLE_QUARTTONE);
- UI_ThemeColor4(TH_EDITMESH_ACTIVE);
+ unsigned char tmp_col[4];
+ UI_GetThemeColor4ubv(TH_EDITMESH_ACTIVE, tmp_col);
+ immAttrib4ubv(color, tmp_col);
}
else {
- glColor4ubv((GLubyte *)(is_select ? col2 : col1));
+ immAttrib4ubv(color, is_select ? col2 : col1);
}
- glBegin(GL_TRIANGLES);
- draw_uvs_looptri(em, &i, cd_loop_uv_offset);
- glEnd();
-
- if (tf == activetf) {
- GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
- }
- }
- else {
- BM_elem_flag_disable(efa, BM_ELEM_TAG);
+ draw_uvs_looptri(em, &i, cd_loop_uv_offset, pos);
}
}
- }
-#else
- BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
- tf = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
- if (uvedit_face_visible_test(scene, ima, efa, tf)) {
- BM_elem_flag_enable(efa, BM_ELEM_TAG);
- if (tf == activetf) continue; /* important the temp boolean is set above */
+ immEnd();
- if (uvedit_face_select_test(scene, efa, cd_loop_uv_offset))
- glColor4ubv((GLubyte *)col2);
- else
- glColor4ubv((GLubyte *)col1);
-
- glBegin(GL_POLYGON);
- BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
- luv = BM_ELEM_CD_GET_VOID_P(l, cd_loop_uv_offset);
- glVertex2fv(luv->uv);
- }
- glEnd();
- }
- else {
- if (tf == activetf)
- activetf = NULL;
- BM_elem_flag_disable(efa, BM_ELEM_TAG);
- }
- }
-#endif
- glDisable(GL_BLEND);
- }
- else {
- /* would be nice to do this within a draw loop but most below are optional, so it would involve too many checks */
-
- BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
- tf = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
+ immUnbindProgram();
- if (uvedit_face_visible_test(scene, ima, efa, tf)) {
- BM_elem_flag_enable(efa, BM_ELEM_TAG);
- }
- else {
- if (tf == activetf)
- activetf = NULL;
- BM_elem_flag_disable(efa, BM_ELEM_TAG);
+ glDisable(GL_BLEND);
+ }
+ else {
+ if (efa_act && !uvedit_face_visible_test(scene, ima, efa_act)) {
+ efa_act = NULL;
}
}
-
}
/* 3. draw active face stippled */
-#ifndef USE_EDBM_LOOPTRIS
- if (activef) {
- tf = BM_ELEM_CD_GET_VOID_P(activef, cd_poly_tex_offset);
- if (uvedit_face_visible_test(scene, ima, activef, tf)) {
- glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- UI_ThemeColor4(TH_EDITMESH_ACTIVE);
+ /* (removed during OpenGL upgrade, reimplement if needed) */
- GPU_basic_shader_bind(GPU_SHADER_STIPPLE | GPU_SHADER_USE_COLOR);
- GPU_basic_shader_stipple(GPU_SHADER_STIPPLE_QUARTTONE);
-
- glBegin(GL_POLYGON);
- BM_ITER_ELEM (l, &liter, activef, BM_LOOPS_OF_FACE) {
- luv = BM_ELEM_CD_GET_VOID_P(l, cd_loop_uv_offset);
- glVertex2fv(luv->uv);
- }
- glEnd();
-
- GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
- glDisable(GL_BLEND);
- }
- }
-#endif
-
/* 4. draw edges */
if (sima->flag & SI_SMOOTH_UV) {
@@ -751,104 +743,150 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit)
switch (sima->dt_uv) {
case SI_UVDT_DASH:
+ {
+ const uint shdr_pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR);
+
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2] / UI_DPI_FAC, viewport_size[3] / UI_DPI_FAC);
+
+ immUniform1i("num_colors", 2); /* "advanced" mode */
+ immUniformArray4fv("colors", (float *)(float[][4]){{0.56f, 0.56f, 0.56f, 1.0f}, {0.07f, 0.07f, 0.07f, 1.0f}}, 2);
+ immUniform1f("dash_width", 4.0f);
+
BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
if (!BM_elem_flag_test(efa, BM_ELEM_TAG))
continue;
- tf = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
- if (tf) {
- cpack(0x111111);
+ draw_uvs_lineloop_bmface(efa, cd_loop_uv_offset, shdr_pos);
+ }
- draw_uvs_lineloop_bmface(efa, cd_loop_uv_offset);
+ immUnbindProgram();
- setlinestyle(2);
- cpack(0x909090);
+ break;
+ }
+ case SI_UVDT_BLACK: /* black/white */
+ case SI_UVDT_WHITE:
+ pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
- draw_uvs_lineloop_bmface(efa, cd_loop_uv_offset);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
- setlinestyle(0);
- }
+ if (sima->dt_uv == SI_UVDT_WHITE) {
+ immUniformColor3f(1.0f, 1.0f, 1.0f);
+ }
+ else {
+ immUniformColor3f(0.0f, 0.0f, 0.0f);
}
- break;
- case SI_UVDT_BLACK: /* black/white */
- case SI_UVDT_WHITE:
- if (sima->dt_uv == SI_UVDT_WHITE) glColor3f(1.0f, 1.0f, 1.0f);
- else glColor3f(0.0f, 0.0f, 0.0f);
BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
if (!BM_elem_flag_test(efa, BM_ELEM_TAG))
continue;
- draw_uvs_lineloop_bmface(efa, cd_loop_uv_offset);
+ draw_uvs_lineloop_bmface(efa, cd_loop_uv_offset, pos);
}
+
+ immUnbindProgram();
+
break;
case SI_UVDT_OUTLINE:
+ pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
glLineWidth(3);
- cpack(0x0);
-
+ imm_cpack(0x0);
+
BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
if (!BM_elem_flag_test(efa, BM_ELEM_TAG))
continue;
- draw_uvs_lineloop_bmface(efa, cd_loop_uv_offset);
+ draw_uvs_lineloop_bmface(efa, cd_loop_uv_offset, pos);
}
-
+
+ immUnbindProgram();
+
glLineWidth(1);
UI_GetThemeColor4ubv(TH_WIRE_EDIT, col2);
- glColor4ubv((unsigned char *)col2);
if (me->drawflag & ME_DRAWEDGES) {
- int sel, lastsel = -1;
+ int sel;
UI_GetThemeColor4ubv(TH_EDGE_SELECT, col1);
+ Gwn_VertFormat *format = immVertexFormat();
+ pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ color = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 4, GWN_FETCH_INT_TO_FLOAT_UNIT);
+
if (interpedges) {
- GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
+ immBindBuiltinProgram(GPU_SHADER_2D_SMOOTH_COLOR);
+
BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
if (!BM_elem_flag_test(efa, BM_ELEM_TAG))
continue;
- glBegin(GL_LINE_LOOP);
+ immBegin(GWN_PRIM_LINE_LOOP, efa->len);
+
BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
sel = uvedit_uv_select_test(scene, l, cd_loop_uv_offset);
- glColor4ubv(sel ? (GLubyte *)col1 : (GLubyte *)col2);
+ immAttrib4ubv(color, sel ? (GLubyte *)col1 : (GLubyte *)col2);
luv = BM_ELEM_CD_GET_VOID_P(l, cd_loop_uv_offset);
- glVertex2fv(luv->uv);
+ immVertex2fv(pos, luv->uv);
}
- glEnd();
+
+ immEnd();
}
+
+ immUnbindProgram();
}
else {
+ immBindBuiltinProgram(GPU_SHADER_2D_FLAT_COLOR);
+
BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
+ int lastsel = -1;
+
if (!BM_elem_flag_test(efa, BM_ELEM_TAG))
continue;
- glBegin(GL_LINES);
+ immBegin(GWN_PRIM_LINES, efa->len * 2);
+
BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
sel = uvedit_edge_select_test(scene, l, cd_loop_uv_offset);
if (sel != lastsel) {
- glColor4ubv(sel ? (GLubyte *)col1 : (GLubyte *)col2);
+ immAttrib4ubv(color, sel ? (GLubyte *)col1 : (GLubyte *)col2);
lastsel = sel;
}
+
luv = BM_ELEM_CD_GET_VOID_P(l, cd_loop_uv_offset);
- glVertex2fv(luv->uv);
+ immVertex2fv(pos, luv->uv);
luv = BM_ELEM_CD_GET_VOID_P(l->next, cd_loop_uv_offset);
- glVertex2fv(luv->uv);
+ immVertex2fv(pos, luv->uv);
}
- glEnd();
+
+ immEnd();
}
+
+ immUnbindProgram();
}
}
else {
+ pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor4ubv(col2);
+
/* no nice edges */
BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
if (!BM_elem_flag_test(efa, BM_ELEM_TAG))
continue;
- draw_uvs_lineloop_bmface(efa, cd_loop_uv_offset);
+ draw_uvs_lineloop_bmface(efa, cd_loop_uv_offset, pos);
}
+
+ immUnbindProgram();
}
-
+
break;
}
@@ -861,50 +899,80 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit)
if (drawfaces) {
float cent[2];
-
+ bool col_set = false;
+
+ Gwn_VertFormat *format = immVertexFormat();
+ pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ color = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_FLAT_COLOR);
+
pointsize = UI_GetThemeValuef(TH_FACEDOT_SIZE);
glPointSize(pointsize);
- glBegin(GL_POINTS);
+ immBeginAtMost(GWN_PRIM_POINTS, bm->totface);
/* unselected faces */
- UI_ThemeColor(TH_WIRE);
BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
if (!BM_elem_flag_test(efa, BM_ELEM_TAG))
continue;
if (!uvedit_face_select_test(scene, efa, cd_loop_uv_offset)) {
+ /* Only set color for the first face */
+ if (!col_set) {
+ UI_GetThemeColor3ubv(TH_WIRE, col1);
+ immAttrib3ubv(color, col1);
+
+ col_set = true;
+ }
+
uv_poly_center(efa, cent, cd_loop_uv_offset);
- glVertex2fv(cent);
+ immVertex2fv(pos, cent);
}
}
+ col_set = false;
+
/* selected faces */
- UI_ThemeColor(TH_FACE_DOT);
BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
if (!BM_elem_flag_test(efa, BM_ELEM_TAG))
continue;
if (uvedit_face_select_test(scene, efa, cd_loop_uv_offset)) {
+ /* Only set color for the first face */
+ if (!col_set) {
+ UI_GetThemeColor3ubv(TH_FACE_DOT, col1);
+ immAttrib3ubv(color, col1);
+
+ col_set = true;
+ }
+
uv_poly_center(efa, cent, cd_loop_uv_offset);
- glVertex2fv(cent);
+ immVertex2fv(pos, cent);
}
}
- glEnd();
+ immEnd();
+
+ immUnbindProgram();
}
/* 6. draw uv vertices */
if (drawfaces != 2) { /* 2 means Mesh Face Mode */
+ pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
/* unselected uvs */
- UI_ThemeColor(TH_VERTEX);
+ immUniformThemeColor(TH_VERTEX);
pointsize = UI_GetThemeValuef(TH_VERTEX_SIZE);
glPointSize(pointsize);
-
- glBegin(GL_POINTS);
+
+ immBeginAtMost(GWN_PRIM_POINTS, bm->totloop);
+
BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
if (!BM_elem_flag_test(efa, BM_ELEM_TAG))
continue;
@@ -912,17 +980,19 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit)
BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
luv = BM_ELEM_CD_GET_VOID_P(l, cd_loop_uv_offset);
if (!uvedit_uv_select_test(scene, l, cd_loop_uv_offset))
- glVertex2fv(luv->uv);
+ immVertex2fv(pos, luv->uv);
}
}
- glEnd();
+
+ immEnd();
/* pinned uvs */
/* give odd pointsizes odd pin pointsizes */
glPointSize(pointsize * 2 + (((int)pointsize % 2) ? (-1) : 0));
- cpack(0xFF);
+ imm_cpack(0xFF);
- glBegin(GL_POINTS);
+ immBeginAtMost(GWN_PRIM_POINTS, bm->totloop);
+
BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
if (!BM_elem_flag_test(efa, BM_ELEM_TAG))
continue;
@@ -931,16 +1001,18 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit)
luv = BM_ELEM_CD_GET_VOID_P(l, cd_loop_uv_offset);
if (luv->flag & MLOOPUV_PINNED)
- glVertex2fv(luv->uv);
+ immVertex2fv(pos, luv->uv);
}
}
- glEnd();
+
+ immEnd();
/* selected uvs */
- UI_ThemeColor(TH_VERTEX_SELECT);
+ immUniformThemeColor(TH_VERTEX_SELECT);
glPointSize(pointsize);
- glBegin(GL_POINTS);
+ immBeginAtMost(GWN_PRIM_POINTS, bm->totloop);
+
BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
if (!BM_elem_flag_test(efa, BM_ELEM_TAG))
continue;
@@ -949,15 +1021,20 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit)
luv = BM_ELEM_CD_GET_VOID_P(l, cd_loop_uv_offset);
if (uvedit_uv_select_test(scene, l, cd_loop_uv_offset))
- glVertex2fv(luv->uv);
+ immVertex2fv(pos, luv->uv);
}
}
- glEnd();
+
+ immEnd();
+
+ immUnbindProgram();
}
}
-static void draw_uv_shadows_get(SpaceImage *sima, Object *ob, Object *obedit, bool *show_shadow, bool *show_texpaint)
+static void draw_uv_shadows_get(
+ SpaceImage *sima, const EvaluationContext *eval_ctx, Object *ob, Object *obedit,
+ bool *show_shadow, bool *show_texpaint)
{
*show_shadow = *show_texpaint = false;
@@ -967,27 +1044,29 @@ static void draw_uv_shadows_get(SpaceImage *sima, Object *ob, Object *obedit, bo
if ((sima->mode == SI_MODE_PAINT) && obedit && obedit->type == OB_MESH) {
struct BMEditMesh *em = BKE_editmesh_from_object(obedit);
- *show_shadow = EDBM_mtexpoly_check(em);
+ *show_shadow = EDBM_uv_check(em);
}
- *show_texpaint = (ob && ob->type == OB_MESH && ob->mode == OB_MODE_TEXTURE_PAINT);
+ *show_texpaint = (ob && ob->type == OB_MESH && eval_ctx->object_mode == OB_MODE_TEXTURE_PAINT);
}
-void ED_uvedit_draw_main(SpaceImage *sima, ARegion *ar, Scene *scene, Object *obedit, Object *obact)
+void ED_uvedit_draw_main(
+ SpaceImage *sima, const EvaluationContext *eval_ctx,
+ ARegion *ar, Scene *scene, ViewLayer *view_layer, Object *obedit, Object *obact, Depsgraph *depsgraph)
{
ToolSettings *toolsettings = scene->toolsettings;
bool show_uvedit, show_uvshadow, show_texpaint_uvshadow;
show_uvedit = ED_space_image_show_uvedit(sima, obedit);
- draw_uv_shadows_get(sima, obact, obedit, &show_uvshadow, &show_texpaint_uvshadow);
+ draw_uv_shadows_get(sima, eval_ctx, obact, obedit, &show_uvshadow, &show_texpaint_uvshadow);
if (show_uvedit || show_uvshadow || show_texpaint_uvshadow) {
if (show_uvshadow)
draw_uvs_shadow(obedit);
else if (show_uvedit)
- draw_uvs(sima, scene, obedit);
+ draw_uvs(sima, scene, view_layer, obedit, depsgraph);
else
- draw_uvs_texpaint(sima, scene, obact);
+ draw_uvs_texpaint(sima, scene, view_layer, obact);
if (show_uvedit && !(toolsettings->use_uv_sculpt))
ED_image_draw_cursor(ar, sima->cursor);
diff --git a/source/blender/editors/uvedit/uvedit_intern.h b/source/blender/editors/uvedit/uvedit_intern.h
index e028c08091c..6ca46941404 100644
--- a/source/blender/editors/uvedit/uvedit_intern.h
+++ b/source/blender/editors/uvedit/uvedit_intern.h
@@ -32,7 +32,6 @@
#ifndef __UVEDIT_INTERN_H__
#define __UVEDIT_INTERN_H__
-struct MTexPoly;
struct Image;
struct Object;
struct Scene;
@@ -53,7 +52,6 @@ void uv_poly_center(struct BMFace *f, float r_cent[2], const int cd_loop_uv_off
typedef struct NearestHit {
struct BMFace *efa;
- struct MTexPoly *tf;
struct BMLoop *l;
struct MLoopUV *luv, *luv_next;
int lindex; /* index of loop within face */
diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c
index 522640e4bda..479b43d50f0 100644
--- a/source/blender/editors/uvedit/uvedit_ops.c
+++ b/source/blender/editors/uvedit/uvedit_ops.c
@@ -57,7 +57,6 @@
#include "BKE_context.h"
#include "BKE_customdata.h"
-#include "BKE_depsgraph.h"
#include "BKE_image.h"
#include "BKE_library.h"
#include "BKE_main.h"
@@ -68,6 +67,8 @@
#include "BKE_scene.h"
#include "BKE_editmesh.h"
+#include "DEG_depsgraph.h"
+
#include "ED_image.h"
#include "ED_mesh.h"
#include "ED_node.h"
@@ -106,7 +107,7 @@ bool ED_uvedit_test(Object *obedit)
return 0;
em = BKE_editmesh_from_object(obedit);
- ret = EDBM_mtexpoly_check(em);
+ ret = EDBM_uv_check(em);
return ret;
}
@@ -182,7 +183,6 @@ void ED_uvedit_assign_image(Main *UNUSED(bmain), Scene *scene, Object *obedit, I
{
BMEditMesh *em;
BMIter iter;
- MTexPoly *tf;
bool update = false;
const bool selected = !(scene->toolsettings->uv_flag & UV_SYNC_SELECTION);
@@ -206,8 +206,6 @@ void ED_uvedit_assign_image(Main *UNUSED(bmain), Scene *scene, Object *obedit, I
BMFace *efa;
int cd_loop_uv_offset;
- int cd_poly_tex_offset;
-
/* old shading system, assign image to selected faces */
#ifdef USE_SWITCH_ASPECT
float prev_aspect[2], fprev_aspect;
@@ -221,31 +219,22 @@ void ED_uvedit_assign_image(Main *UNUSED(bmain), Scene *scene, Object *obedit, I
#endif
/* ensure we have a uv map */
- if (!CustomData_has_layer(&em->bm->pdata, CD_MTEXPOLY)) {
- BM_data_layer_add(em->bm, &em->bm->pdata, CD_MTEXPOLY);
+ if (!CustomData_has_layer(&em->bm->ldata, CD_MLOOPUV)) {
BM_data_layer_add(em->bm, &em->bm->ldata, CD_MLOOPUV);
/* make UVs all nice 0-1 */
- ED_mesh_uv_loop_reset_ex(obedit->data, CustomData_get_active_layer(&em->bm->pdata, CD_MTEXPOLY));
+ ED_mesh_uv_loop_reset_ex(obedit->data, CustomData_get_active_layer(&em->bm->ldata, CD_MLOOPUV));
update = true;
}
cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
- cd_poly_tex_offset = CustomData_get_offset(&em->bm->pdata, CD_MTEXPOLY);
/* now assign to all visible faces */
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
- tf = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
-
- if (uvedit_face_visible_test(scene, previma, efa, tf) &&
+ if (uvedit_face_visible_test(scene, previma, efa) &&
(selected == true || uvedit_face_select_test(scene, efa, cd_loop_uv_offset)))
{
- if (ima) {
- tf->tpage = ima;
-
- if (ima->id.us == 0) id_us_plus(&ima->id);
- else id_lib_extern(&ima->id);
-
#ifdef USE_SWITCH_ASPECT
+ if (ima) {
/* we also need to correct the aspect of uvs */
if (scene->toolsettings->uvcalc_flag & UVCALC_NO_ASPECT_CORRECT) {
/* do nothing */
@@ -261,11 +250,9 @@ void ED_uvedit_assign_image(Main *UNUSED(bmain), Scene *scene, Object *obedit, I
luv->uv[0] /= faspect;
}
}
-#endif
- }
- else {
- tf->tpage = NULL;
}
+#endif
+ BKE_object_material_edit_image_set(obedit, efa->mat_nr, ima);
update = true;
}
@@ -273,49 +260,12 @@ void ED_uvedit_assign_image(Main *UNUSED(bmain), Scene *scene, Object *obedit, I
/* and update depdency graph */
if (update) {
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
}
}
}
-/* dotile - 1, set the tile flag (from the space image)
- * 2, set the tile index for the faces. */
-static bool uvedit_set_tile(Object *obedit, Image *ima, int curtile)
-{
- BMEditMesh *em;
- BMFace *efa;
- BMIter iter;
- MTexPoly *tf;
- int cd_poly_tex_offset;
-
- /* verify if we have something to do */
- if (!ima || !ED_uvedit_test(obedit))
- return false;
-
- if ((ima->tpageflag & IMA_TILES) == 0)
- return false;
-
- /* skip assigning these procedural images... */
- if (ima->type == IMA_TYPE_R_RESULT || ima->type == IMA_TYPE_COMPOSITE)
- return false;
-
- em = BKE_editmesh_from_object(obedit);
-
- cd_poly_tex_offset = CustomData_get_offset(&em->bm->pdata, CD_MTEXPOLY);
-
- BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
- tf = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
-
- if (BM_elem_flag_test(efa, BM_ELEM_SELECT))
- tf->tile = curtile; /* set tile index */
- }
-
- DAG_id_tag_update(obedit->data, 0);
-
- return true;
-}
-
/*********************** space conversion *********************/
static void uvedit_pixel_to_float(SpaceImage *sima, float *dist, float pixeldist)
@@ -346,14 +296,17 @@ bool uvedit_face_visible_nolocal(Scene *scene, BMFace *efa)
return (BM_elem_flag_test(efa, BM_ELEM_HIDDEN) == 0 && BM_elem_flag_test(efa, BM_ELEM_SELECT));
}
-bool uvedit_face_visible_test(Scene *scene, Image *ima, BMFace *efa, MTexPoly *tf)
+bool uvedit_face_visible_test(Scene *scene, Image *ima, BMFace *efa)
{
ToolSettings *ts = scene->toolsettings;
- if (ts->uv_flag & UV_SHOW_SAME_IMAGE)
- return (tf->tpage == ima) ? uvedit_face_visible_nolocal(scene, efa) : false;
- else
+ if (ts->uv_flag & UV_SHOW_SAME_IMAGE) {
+ const Image *face_image = BKE_object_material_edit_image_get(scene->obedit, efa->mat_nr);
+ return (face_image == ima) ? uvedit_face_visible_nolocal(scene, efa) : false;
+ }
+ else {
return uvedit_face_visible_nolocal(scene, efa);
+ }
}
bool uvedit_face_select_test(Scene *scene, BMFace *efa,
@@ -646,18 +599,15 @@ bool ED_uvedit_minmax(Scene *scene, Image *ima, Object *obedit, float r_min[2],
BMFace *efa;
BMLoop *l;
BMIter iter, liter;
- MTexPoly *tf;
MLoopUV *luv;
bool changed = false;
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
- const int cd_poly_tex_offset = CustomData_get_offset(&em->bm->pdata, CD_MTEXPOLY);
INIT_MINMAX2(r_min, r_max);
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
- tf = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
- if (!uvedit_face_visible_test(scene, ima, efa, tf))
+ if (!uvedit_face_visible_test(scene, ima, efa))
continue;
BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
@@ -696,17 +646,14 @@ static bool ED_uvedit_median(Scene *scene, Image *ima, Object *obedit, float co[
BMFace *efa;
BMLoop *l;
BMIter iter, liter;
- MTexPoly *tf;
MLoopUV *luv;
unsigned int sel = 0;
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
- const int cd_poly_tex_offset = CustomData_get_offset(&em->bm->pdata, CD_MTEXPOLY);
zero_v2(co);
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
- tf = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
- if (!uvedit_face_visible_test(scene, ima, efa, tf))
+ if (!uvedit_face_visible_test(scene, ima, efa))
continue;
BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
@@ -723,7 +670,7 @@ static bool ED_uvedit_median(Scene *scene, Image *ima, Object *obedit, float co[
return (sel != 0);
}
-static bool uvedit_center(Scene *scene, Image *ima, Object *obedit, float cent[2], char mode)
+bool ED_uvedit_center(Scene *scene, Image *ima, Object *obedit, float cent[2], char mode)
{
bool changed = false;
@@ -747,7 +694,6 @@ static bool uvedit_center(Scene *scene, Image *ima, Object *obedit, float cent[2
void uv_find_nearest_edge(Scene *scene, Image *ima, BMEditMesh *em, const float co[2], NearestHit *hit)
{
- MTexPoly *tf;
BMFace *efa;
BMLoop *l;
BMIter iter, liter;
@@ -756,7 +702,6 @@ void uv_find_nearest_edge(Scene *scene, Image *ima, BMEditMesh *em, const float
int i;
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
- const int cd_poly_tex_offset = CustomData_get_offset(&em->bm->pdata, CD_MTEXPOLY);
mindist_squared = 1e10f;
memset(hit, 0, sizeof(*hit));
@@ -764,8 +709,7 @@ void uv_find_nearest_edge(Scene *scene, Image *ima, BMEditMesh *em, const float
BM_mesh_elem_index_ensure(em->bm, BM_VERT);
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
- tf = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
- if (!uvedit_face_visible_test(scene, ima, efa, tf))
+ if (!uvedit_face_visible_test(scene, ima, efa))
continue;
BM_ITER_ELEM_INDEX (l, &liter, efa, BM_LOOPS_OF_FACE, i) {
@@ -775,7 +719,6 @@ void uv_find_nearest_edge(Scene *scene, Image *ima, BMEditMesh *em, const float
dist_squared = dist_squared_to_line_segment_v2(co, luv->uv, luv_next->uv);
if (dist_squared < mindist_squared) {
- hit->tf = tf;
hit->efa = efa;
hit->l = l;
@@ -791,13 +734,11 @@ void uv_find_nearest_edge(Scene *scene, Image *ima, BMEditMesh *em, const float
static void uv_find_nearest_face(Scene *scene, Image *ima, BMEditMesh *em, const float co[2], NearestHit *hit)
{
- MTexPoly *tf;
BMFace *efa;
BMIter iter;
float mindist, dist, cent[2];
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
- const int cd_poly_tex_offset = CustomData_get_offset(&em->bm->pdata, CD_MTEXPOLY);
mindist = 1e10f;
memset(hit, 0, sizeof(*hit));
@@ -808,8 +749,7 @@ static void uv_find_nearest_face(Scene *scene, Image *ima, BMEditMesh *em, const
hit->luv = hit->luv_next = NULL;
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
- tf = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
- if (!uvedit_face_visible_test(scene, ima, efa, tf))
+ if (!uvedit_face_visible_test(scene, ima, efa))
continue;
uv_poly_center(efa, cent, cd_loop_uv_offset);
@@ -817,7 +757,6 @@ static void uv_find_nearest_face(Scene *scene, Image *ima, BMEditMesh *em, const
dist = len_manhattan_v2v2(co, cent);
if (dist < mindist) {
- hit->tf = tf;
hit->efa = efa;
mindist = dist;
}
@@ -841,13 +780,11 @@ void uv_find_nearest_vert(Scene *scene, Image *ima, BMEditMesh *em,
BMFace *efa;
BMLoop *l;
BMIter iter, liter;
- MTexPoly *tf;
MLoopUV *luv;
float mindist, dist;
int i;
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
- const int cd_poly_tex_offset = CustomData_get_offset(&em->bm->pdata, CD_MTEXPOLY);
/*this will fill in hit.vert1 and hit.vert2*/
uv_find_nearest_edge(scene, ima, em, co, hit);
@@ -860,8 +797,7 @@ void uv_find_nearest_vert(Scene *scene, Image *ima, BMEditMesh *em,
BM_mesh_elem_index_ensure(em->bm, BM_VERT);
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
- tf = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
- if (!uvedit_face_visible_test(scene, ima, efa, tf))
+ if (!uvedit_face_visible_test(scene, ima, efa))
continue;
BM_ITER_ELEM_INDEX (l, &liter, efa, BM_LOOPS_OF_FACE, i) {
@@ -883,7 +819,6 @@ void uv_find_nearest_vert(Scene *scene, Image *ima, BMEditMesh *em,
hit->l = l;
hit->luv = luv;
hit->luv_next = BM_ELEM_CD_GET_VOID_P(l->next, cd_loop_uv_offset);
- hit->tf = tf;
hit->efa = efa;
hit->lindex = i;
}
@@ -897,20 +832,17 @@ bool ED_uvedit_nearest_uv(Scene *scene, Object *obedit, Image *ima, const float
BMFace *efa;
BMLoop *l;
BMIter iter, liter;
- MTexPoly *tf;
MLoopUV *luv;
float mindist, dist;
bool found = false;
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
- const int cd_poly_tex_offset = CustomData_get_offset(&em->bm->pdata, CD_MTEXPOLY);
mindist = 1e10f;
copy_v2_v2(r_uv, co);
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
- tf = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
- if (!uvedit_face_visible_test(scene, ima, efa, tf))
+ if (!uvedit_face_visible_test(scene, ima, efa))
continue;
BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
@@ -1020,7 +952,6 @@ static int uv_select_edgeloop(Scene *scene, Image *ima, BMEditMesh *em, NearestH
BMFace *efa;
BMIter iter, liter;
BMLoop *l;
- MTexPoly *tf;
UvVertMap *vmap;
UvMapVert *iterv_curr;
UvMapVert *iterv_next;
@@ -1028,7 +959,6 @@ static int uv_select_edgeloop(Scene *scene, Image *ima, BMEditMesh *em, NearestH
bool looking, select;
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
- const int cd_poly_tex_offset = CustomData_get_offset(&em->bm->pdata, CD_MTEXPOLY);
/* setup */
BM_mesh_elem_table_ensure(em->bm, BM_FACE);
@@ -1061,9 +991,7 @@ static int uv_select_edgeloop(Scene *scene, Image *ima, BMEditMesh *em, NearestH
/* find correct valence edges which are not tagged yet, but connect to tagged one */
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
- tf = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
-
- if (!BM_elem_flag_test(efa, BM_ELEM_TAG) && uvedit_face_visible_test(scene, ima, efa, tf)) {
+ if (!BM_elem_flag_test(efa, BM_ELEM_TAG) && uvedit_face_visible_test(scene, ima, efa)) {
BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
/* check face not hidden and not tagged */
if (!(iterv_curr = uv_select_edgeloop_vertex_map_get(vmap, efa, l)))
@@ -1123,7 +1051,6 @@ static void uv_select_linked(Scene *scene, Image *ima, BMEditMesh *em, const flo
BMFace *efa;
BMLoop *l;
BMIter iter, liter;
- MTexPoly *tf;
MLoopUV *luv;
UvVertMap *vmap;
UvMapVert *vlist, *iterv, *startv;
@@ -1132,7 +1059,6 @@ static void uv_select_linked(Scene *scene, Image *ima, BMEditMesh *em, const flo
char *flag;
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
- const int cd_poly_tex_offset = CustomData_get_offset(&em->bm->pdata, CD_MTEXPOLY);
BM_mesh_elem_table_ensure(em->bm, BM_FACE); /* we can use this too */
@@ -1152,9 +1078,7 @@ static void uv_select_linked(Scene *scene, Image *ima, BMEditMesh *em, const flo
if (!hit) {
BM_ITER_MESH_INDEX (efa, &iter, em->bm, BM_FACES_OF_MESH, a) {
- tf = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
-
- if (uvedit_face_visible_test(scene, ima, efa, tf)) {
+ if (uvedit_face_visible_test(scene, ima, efa)) {
if (select_faces) {
if (BM_elem_flag_test(efa, BM_ELEM_SELECT)) {
stack[stacksize] = a;
@@ -1318,12 +1242,9 @@ static float *uv_sel_co_from_eve(Scene *scene, Image *ima, BMEditMesh *em, BMVer
BMLoop *l;
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
- const int cd_poly_tex_offset = CustomData_get_offset(&em->bm->pdata, CD_MTEXPOLY);
BM_ITER_ELEM (l, &liter, eve, BM_LOOPS_OF_VERT) {
- MTexPoly *tf = BM_ELEM_CD_GET_VOID_P(l->f, cd_poly_tex_offset);
-
- if (!uvedit_face_visible_test(scene, ima, l->f, tf))
+ if (!uvedit_face_visible_test(scene, ima, l->f))
continue;
if (uvedit_uv_select_test(scene, l, cd_loop_uv_offset)) {
@@ -1349,7 +1270,6 @@ static int uv_select_more_less(bContext *C, const bool select)
ToolSettings *ts = scene->toolsettings;
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
- const int cd_poly_tex_offset = CustomData_get_offset(&em->bm->pdata, CD_MTEXPOLY);
if (ts->uv_flag & UV_SYNC_SELECTION) {
if (select) {
@@ -1372,9 +1292,7 @@ static int uv_select_more_less(bContext *C, const bool select)
/* mark loops to be selected */
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
- MTexPoly *tf = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
-
- if (uvedit_face_visible_test(scene, ima, efa, tf)) {
+ if (uvedit_face_visible_test(scene, ima, efa)) {
#define IS_SEL 1
#define IS_UNSEL 2
@@ -1417,9 +1335,7 @@ static int uv_select_more_less(bContext *C, const bool select)
/* mark loops to be selected */
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
- MTexPoly *tf = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
-
- if (uvedit_face_visible_test(scene, ima, efa, tf)) {
+ if (uvedit_face_visible_test(scene, ima, efa)) {
BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
MLoopUV *luv = BM_ELEM_CD_GET_VOID_P(l, cd_loop_uv_offset);
@@ -1486,11 +1402,9 @@ static void uv_weld_align(bContext *C, int tool)
SpaceImage *sima;
Scene *scene;
Image *ima;
- MTexPoly *tf;
float cent[2], min[2], max[2];
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
- const int cd_poly_tex_offset = CustomData_get_offset(&em->bm->pdata, CD_MTEXPOLY);
scene = CTX_data_scene(C);
ima = CTX_data_edit_image(C);
@@ -1504,9 +1418,7 @@ static void uv_weld_align(bContext *C, int tool)
BMLoop *l;
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
- tf = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
-
- if (!uvedit_face_visible_test(scene, ima, efa, tf))
+ if (!uvedit_face_visible_test(scene, ima, efa))
continue;
BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
@@ -1520,7 +1432,7 @@ static void uv_weld_align(bContext *C, int tool)
tool = (max[0] - min[0] >= max[1] - min[1]) ? 'y' : 'x';
}
- uvedit_center(scene, ima, obedit, cent, 0);
+ ED_uvedit_center(scene, ima, obedit, cent, 0);
if (tool == 'x' || tool == 'w') {
BMIter iter, liter;
@@ -1528,8 +1440,7 @@ static void uv_weld_align(bContext *C, int tool)
BMLoop *l;
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
- tf = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
- if (!uvedit_face_visible_test(scene, ima, efa, tf))
+ if (!uvedit_face_visible_test(scene, ima, efa))
continue;
BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
@@ -1548,8 +1459,7 @@ static void uv_weld_align(bContext *C, int tool)
BMLoop *l;
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
- tf = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
- if (!uvedit_face_visible_test(scene, ima, efa, tf))
+ if (!uvedit_face_visible_test(scene, ima, efa))
continue;
BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
@@ -1577,9 +1487,7 @@ static void uv_weld_align(bContext *C, int tool)
/* tag verts with a selected UV */
BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) {
BM_ITER_ELEM (l, &liter, eve, BM_LOOPS_OF_VERT) {
- tf = BM_ELEM_CD_GET_VOID_P(l->f, cd_poly_tex_offset);
-
- if (!uvedit_face_visible_test(scene, ima, l->f, tf))
+ if (!uvedit_face_visible_test(scene, ima, l->f))
continue;
if (uvedit_uv_select_test(scene, l, cd_loop_uv_offset)) {
@@ -1667,9 +1575,7 @@ static void uv_weld_align(bContext *C, int tool)
/* go over all verts except for endpoints */
for (i = 0; i < BLI_array_count(eve_line); i++) {
BM_ITER_ELEM (l, &liter, eve_line[i], BM_LOOPS_OF_VERT) {
- tf = BM_ELEM_CD_GET_VOID_P(l->f, cd_poly_tex_offset);
-
- if (!uvedit_face_visible_test(scene, ima, l->f, tf))
+ if (!uvedit_face_visible_test(scene, ima, l->f))
continue;
if (uvedit_uv_select_test(scene, l, cd_loop_uv_offset)) {
@@ -1703,7 +1609,7 @@ static void uv_weld_align(bContext *C, int tool)
uvedit_live_unwrap_update(sima, scene, obedit);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
}
@@ -1755,7 +1661,6 @@ static int uv_remove_doubles_exec(bContext *C, wmOperator *op)
Object *obedit = CTX_data_edit_object(C);
BMEditMesh *em = BKE_editmesh_from_object(obedit);
Image *ima;
- MTexPoly *tf;
int uv_a_index;
int uv_b_index;
float *uv_a;
@@ -1766,7 +1671,6 @@ static int uv_remove_doubles_exec(bContext *C, wmOperator *op)
BMLoop *l;
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
- const int cd_poly_tex_offset = CustomData_get_offset(&em->bm->pdata, CD_MTEXPOLY);
sima = CTX_wm_space_image(C);
scene = CTX_data_scene(C);
@@ -1780,8 +1684,7 @@ static int uv_remove_doubles_exec(bContext *C, wmOperator *op)
/* TODO, use qsort as with MESH_OT_remove_doubles, this isn't optimal */
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
- tf = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
- if (!uvedit_face_visible_test(scene, ima, efa, tf))
+ if (!uvedit_face_visible_test(scene, ima, efa))
continue;
BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
@@ -1843,8 +1746,7 @@ static int uv_remove_doubles_exec(bContext *C, wmOperator *op)
BLI_array_declare(loop_arr_unselected);
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
- tf = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
- if (!uvedit_face_visible_test(scene, ima, efa, tf))
+ if (!uvedit_face_visible_test(scene, ima, efa))
continue;
BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
@@ -1881,7 +1783,7 @@ static int uv_remove_doubles_exec(bContext *C, wmOperator *op)
}
uvedit_live_unwrap_update(sima, scene, obedit);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
return OPERATOR_FINISHED;
@@ -1934,11 +1836,9 @@ static void uv_select_all_perform(Scene *scene, Image *ima, BMEditMesh *em, int
BMFace *efa;
BMLoop *l;
BMIter iter, liter;
- MTexPoly *tf;
MLoopUV *luv;
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
- const int cd_poly_tex_offset = CustomData_get_offset(&em->bm->pdata, CD_MTEXPOLY);
if (ts->uv_flag & UV_SYNC_SELECTION) {
@@ -1962,9 +1862,7 @@ static void uv_select_all_perform(Scene *scene, Image *ima, BMEditMesh *em, int
if (action == SEL_TOGGLE) {
action = SEL_SELECT;
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
- tf = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
-
- if (!uvedit_face_visible_test(scene, ima, efa, tf))
+ if (!uvedit_face_visible_test(scene, ima, efa))
continue;
BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
@@ -1980,9 +1878,7 @@ static void uv_select_all_perform(Scene *scene, Image *ima, BMEditMesh *em, int
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
- tf = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
-
- if (!uvedit_face_visible_test(scene, ima, efa, tf))
+ if (!uvedit_face_visible_test(scene, ima, efa))
continue;
BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
@@ -2071,7 +1967,6 @@ static int uv_mouse_select(bContext *C, const float co[2], bool extend, bool loo
BMFace *efa;
BMLoop *l;
BMIter iter, liter;
- MTexPoly *tf;
MLoopUV *luv;
NearestHit hit;
int i, selectmode, sticky, sync, *hitv = NULL;
@@ -2081,7 +1976,6 @@ static int uv_mouse_select(bContext *C, const float co[2], bool extend, bool loo
float penalty[2];
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
- const int cd_poly_tex_offset = CustomData_get_offset(&em->bm->pdata, CD_MTEXPOLY);
/* notice 'limit' is the same no matter the zoom level, since this is like
* remove doubles and could annoying if it joined points when zoomed out.
@@ -2233,8 +2127,7 @@ static int uv_mouse_select(bContext *C, const float co[2], bool extend, bool loo
BM_mesh_elem_index_ensure(em->bm, BM_VERT);
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
- tf = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
- if (!uvedit_face_visible_test(scene, ima, efa, tf))
+ if (!uvedit_face_visible_test(scene, ima, efa))
continue;
BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
@@ -2269,8 +2162,7 @@ static int uv_mouse_select(bContext *C, const float co[2], bool extend, bool loo
/* select sticky uvs */
if (sticky != SI_STICKY_DISABLE) {
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
- tf = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
- if (!uvedit_face_visible_test(scene, ima, efa, tf))
+ if (!uvedit_face_visible_test(scene, ima, efa))
continue;
BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
@@ -2313,7 +2205,7 @@ static int uv_mouse_select(bContext *C, const float co[2], bool extend, bool loo
#endif
}
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
WM_event_add_notifier(C, NC_GEOM | ND_SELECT, obedit->data);
return OPERATOR_PASS_THROUGH | OPERATOR_FINISHED;
@@ -2452,7 +2344,7 @@ static int uv_select_linked_internal(bContext *C, wmOperator *op, const wmEvent
uv_select_linked(scene, ima, em, limit, hit_p, extend, select_faces);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
WM_event_add_notifier(C, NC_GEOM | ND_SELECT, obedit->data);
return OPERATOR_FINISHED;
@@ -2526,12 +2418,10 @@ static int uv_select_split_exec(bContext *C, wmOperator *op)
BMFace *efa;
BMLoop *l;
BMIter iter, liter;
- MTexPoly *tf;
MLoopUV *luv;
bool changed = false;
const int cd_loop_uv_offset = CustomData_get_offset(&bm->ldata, CD_MLOOPUV);
- const int cd_poly_tex_offset = CustomData_get_offset(&bm->pdata, CD_MTEXPOLY);
if (ts->uv_flag & UV_SYNC_SELECTION) {
BKE_report(op->reports, RPT_ERROR, "Cannot split selection when sync selection is enabled");
@@ -2543,9 +2433,8 @@ static int uv_select_split_exec(bContext *C, wmOperator *op)
BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
bool is_sel = false;
bool is_unsel = false;
- tf = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
- if (!uvedit_face_visible_test(scene, ima, efa, tf))
+ if (!uvedit_face_visible_test(scene, ima, efa))
continue;
/* are we all selected? */
@@ -2686,7 +2575,6 @@ static void uv_select_flush_from_tag_face(SpaceImage *sima, Scene *scene, Object
BMFace *efa;
BMLoop *l;
BMIter iter, liter;
- /* MTexPoly *tf; */
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
if ((ts->uv_flag & UV_SYNC_SELECTION) == 0 && sima->sticky == SI_STICKY_VERTEX) {
@@ -2775,7 +2663,6 @@ static void uv_select_flush_from_tag_loop(SpaceImage *sima, Scene *scene, Object
BMFace *efa;
BMLoop *l;
BMIter iter, liter;
- /* MTexPoly *tf; */
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
@@ -2859,7 +2746,6 @@ static int uv_border_select_exec(bContext *C, wmOperator *op)
BMFace *efa;
BMLoop *l;
BMIter iter, liter;
- MTexPoly *tf;
MLoopUV *luv;
rctf rectf;
bool changed, pinned, select, extend;
@@ -2868,7 +2754,6 @@ static int uv_border_select_exec(bContext *C, wmOperator *op)
(ts->uv_selectmode == UV_SELECT_FACE);
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
- const int cd_poly_tex_offset = CustomData_get_offset(&em->bm->pdata, CD_MTEXPOLY);
/* get rectangle from operator */
WM_operator_properties_border_to_rctf(op, &rectf);
@@ -2893,8 +2778,7 @@ static int uv_border_select_exec(bContext *C, wmOperator *op)
/* assume not touched */
BM_elem_flag_disable(efa, BM_ELEM_TAG);
- tf = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
- if (uvedit_face_visible_test(scene, ima, efa, tf)) {
+ if (uvedit_face_visible_test(scene, ima, efa)) {
uv_poly_center(efa, cent, cd_loop_uv_offset);
if (BLI_rctf_isect_pt_v(&rectf, cent)) {
BM_elem_flag_enable(efa, BM_ELEM_TAG);
@@ -2913,8 +2797,7 @@ static int uv_border_select_exec(bContext *C, wmOperator *op)
changed = true;
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
- tf = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
- if (!uvedit_face_visible_test(scene, ima, efa, tf))
+ if (!uvedit_face_visible_test(scene, ima, efa))
continue;
BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
luv = BM_ELEM_CD_GET_VOID_P(l, cd_loop_uv_offset);
@@ -3111,13 +2994,11 @@ static bool do_lasso_select_mesh_uv(bContext *C, const int mcords[][2], short mo
(ts->uv_selectmode == UV_SELECT_FACE));
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
- const int cd_poly_tex_offset = CustomData_get_offset(&em->bm->pdata, CD_MTEXPOLY);
BMIter iter, liter;
BMFace *efa;
BMLoop *l;
- MTexPoly *tf;
int screen_uv[2];
bool changed = false;
rcti rect;
@@ -3153,8 +3034,7 @@ static bool do_lasso_select_mesh_uv(bContext *C, const int mcords[][2], short mo
}
else { /* Vert Sel */
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
- tf = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
- if (uvedit_face_visible_test(scene, ima, efa, tf)) {
+ if (uvedit_face_visible_test(scene, ima, efa)) {
BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
if ((select) != (uvedit_uv_select_test(scene, l, cd_loop_uv_offset))) {
MLoopUV *luv = BM_ELEM_CD_GET_VOID_P(l, cd_loop_uv_offset);
@@ -3244,7 +3124,7 @@ static void uv_snap_cursor_to_pixels(SpaceImage *sima)
static bool uv_snap_cursor_to_selection(Scene *scene, Image *ima, Object *obedit, SpaceImage *sima)
{
- return uvedit_center(scene, ima, obedit, sima->cursor, sima->around);
+ return ED_uvedit_center(scene, ima, obedit, sima->cursor, sima->around);
}
static int uv_snap_cursor_exec(bContext *C, wmOperator *op)
@@ -3302,16 +3182,13 @@ static bool uv_snap_uvs_to_cursor(Scene *scene, Image *ima, Object *obedit, cons
BMFace *efa;
BMLoop *l;
BMIter iter, liter;
- MTexPoly *tface;
MLoopUV *luv;
bool changed = false;
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
- const int cd_poly_tex_offset = CustomData_get_offset(&em->bm->pdata, CD_MTEXPOLY);
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
- tface = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
- if (!uvedit_face_visible_test(scene, ima, efa, tface))
+ if (!uvedit_face_visible_test(scene, ima, efa))
continue;
BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
@@ -3332,16 +3209,13 @@ static bool uv_snap_uvs_offset(Scene *scene, Image *ima, Object *obedit, const f
BMFace *efa;
BMLoop *l;
BMIter iter, liter;
- MTexPoly *mtexpoly;
MLoopUV *luv;
bool changed = false;
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
- const int cd_poly_tex_offset = CustomData_get_offset(&em->bm->pdata, CD_MTEXPOLY);
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
- mtexpoly = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
- if (!uvedit_face_visible_test(scene, ima, efa, mtexpoly))
+ if (!uvedit_face_visible_test(scene, ima, efa))
continue;
BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
@@ -3363,17 +3237,14 @@ static bool uv_snap_uvs_to_adjacent_unselected(Scene *scene, Image *ima, Object
BMFace *f;
BMLoop *l, *lsub;
BMIter iter, liter, lsubiter;
- MTexPoly *tface;
MLoopUV *luv;
bool changed = false;
const int cd_loop_uv_offset = CustomData_get_offset(&bm->ldata, CD_MLOOPUV);
- const int cd_poly_tex_offset = CustomData_get_offset(&bm->pdata, CD_MTEXPOLY);
/* index every vert that has a selected UV using it, but only once so as to
* get unique indices and to count how much to malloc */
BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) {
- tface = BM_ELEM_CD_GET_VOID_P(f, cd_poly_tex_offset);
- if (uvedit_face_visible_test(scene, ima, f, tface)) {
+ if (uvedit_face_visible_test(scene, ima, f)) {
BM_elem_flag_enable(f, BM_ELEM_TAG);
BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) {
BM_elem_flag_set(l, BM_ELEM_TAG, uvedit_uv_select_test(scene, l, cd_loop_uv_offset));
@@ -3421,22 +3292,19 @@ static bool uv_snap_uvs_to_pixels(SpaceImage *sima, Scene *scene, Object *obedit
BMFace *efa;
BMLoop *l;
BMIter iter, liter;
- MTexPoly *tface;
MLoopUV *luv;
int width = 0, height = 0;
float w, h;
bool changed = false;
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
- const int cd_poly_tex_offset = CustomData_get_offset(&em->bm->pdata, CD_MTEXPOLY);
ED_space_image_get_size(sima, &width, &height);
w = (float)width;
h = (float)height;
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
- tface = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
- if (!uvedit_face_visible_test(scene, ima, efa, tface))
+ if (!uvedit_face_visible_test(scene, ima, efa))
continue;
BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
@@ -3470,7 +3338,7 @@ static int uv_snap_selection_exec(bContext *C, wmOperator *op)
case 2:
{
float center[2];
- if (uvedit_center(scene, ima, obedit, center, sima->around)) {
+ if (ED_uvedit_center(scene, ima, obedit, center, sima->around)) {
float offset[2];
sub_v2_v2v2(offset, sima->cursor, center);
changed = uv_snap_uvs_offset(scene, ima, obedit, offset);
@@ -3486,7 +3354,7 @@ static int uv_snap_selection_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
uvedit_live_unwrap_update(sima, scene, obedit);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
return OPERATOR_FINISHED;
@@ -3526,16 +3394,13 @@ static int uv_pin_exec(bContext *C, wmOperator *op)
BMFace *efa;
BMLoop *l;
BMIter iter, liter;
- MTexPoly *tface;
MLoopUV *luv;
const bool clear = RNA_boolean_get(op->ptr, "clear");
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
- const int cd_poly_tex_offset = CustomData_get_offset(&em->bm->pdata, CD_MTEXPOLY);
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
- tface = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
- if (!uvedit_face_visible_test(scene, ima, efa, tface))
+ if (!uvedit_face_visible_test(scene, ima, efa))
continue;
BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
@@ -3584,15 +3449,12 @@ static int uv_select_pinned_exec(bContext *C, wmOperator *UNUSED(op))
BMFace *efa;
BMLoop *l;
BMIter iter, liter;
- MTexPoly *tface;
MLoopUV *luv;
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
- const int cd_poly_tex_offset = CustomData_get_offset(&em->bm->pdata, CD_MTEXPOLY);
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
- tface = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
- if (!uvedit_face_visible_test(scene, ima, efa, tface))
+ if (!uvedit_face_visible_test(scene, ima, efa))
continue;
BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
@@ -3656,13 +3518,11 @@ static int uv_hide_exec(bContext *C, wmOperator *op)
BMLoop *l;
BMIter iter, liter;
MLoopUV *luv;
- MTexPoly *tf;
const bool swap = RNA_boolean_get(op->ptr, "unselected");
Image *ima = sima ? sima->image : NULL;
const int use_face_center = (ts->uv_selectmode == UV_SELECT_FACE);
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
- const int cd_poly_tex_offset = CustomData_get_offset(&em->bm->pdata, CD_MTEXPOLY);
if (ts->uv_flag & UV_SYNC_SELECTION) {
EDBM_mesh_hide(em, swap);
@@ -3674,9 +3534,7 @@ static int uv_hide_exec(bContext *C, wmOperator *op)
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
int hide = 0;
- tf = BM_ELEM_CD_GET_VOID_P(efa, cd_poly_tex_offset);
-
- if (!uvedit_face_visible_test(scene, ima, efa, tf)) {
+ if (!uvedit_face_visible_test(scene, ima, efa)) {
continue;
}
@@ -3957,73 +3815,6 @@ static void UV_OT_cursor_set(wmOperatorType *ot)
"Cursor location in normalized (0.0-1.0) coordinates", -10.0f, 10.0f);
}
-/********************** set tile operator **********************/
-
-static int set_tile_exec(bContext *C, wmOperator *op)
-{
- Image *ima = CTX_data_edit_image(C);
- int tile[2];
- Object *obedit = CTX_data_edit_object(C);
-
- RNA_int_get_array(op->ptr, "tile", tile);
-
- if (uvedit_set_tile(obedit, ima, tile[0] + ima->xrep * tile[1])) {
- WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
- WM_event_add_notifier(C, NC_SPACE | ND_SPACE_IMAGE, NULL);
-
- return OPERATOR_FINISHED;
- }
-
- return OPERATOR_CANCELLED;
-}
-
-static int set_tile_invoke(bContext *C, wmOperator *op, const wmEvent *event)
-{
- SpaceImage *sima = CTX_wm_space_image(C);
- Image *ima = CTX_data_edit_image(C);
- ARegion *ar = CTX_wm_region(C);
- float fx, fy;
- int tile[2];
-
- if (!ima || !(ima->tpageflag & IMA_TILES))
- return OPERATOR_CANCELLED;
-
- UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &fx, &fy);
-
- if (fx >= 0.0f && fy >= 0.0f && fx < 1.0f && fy < 1.0f) {
- fx = fx * ima->xrep;
- fy = fy * ima->yrep;
-
- tile[0] = fx;
- tile[1] = fy;
-
- sima->curtile = tile[1] * ima->xrep + tile[0];
- RNA_int_set_array(op->ptr, "tile", tile);
- }
-
- return set_tile_exec(C, op);
-}
-
-static void UV_OT_tile_set(wmOperatorType *ot)
-{
- /* identifiers */
- ot->name = "Set Tile";
- ot->description = "Set UV image tile coordinates";
- ot->idname = "UV_OT_tile_set";
-
- /* api callbacks */
- ot->exec = set_tile_exec;
- ot->invoke = set_tile_invoke;
- ot->poll = ED_operator_image_active;
-
- /* flags */
- ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-
- /* properties */
- RNA_def_int_vector(ot->srna, "tile", 2, NULL, 0, INT_MAX, "Tile", "Tile coordinate", 0, 10);
-}
-
-
static int uv_seams_from_islands_exec(bContext *C, wmOperator *op)
{
UvVertMap *vmap;
@@ -4041,7 +3832,7 @@ static int uv_seams_from_islands_exec(bContext *C, wmOperator *op)
em = me->edit_btmesh;
bm = em->bm;
- if (!EDBM_mtexpoly_check(em)) {
+ if (!EDBM_uv_check(em)) {
return OPERATOR_CANCELLED;
}
@@ -4133,7 +3924,7 @@ static int uv_seams_from_islands_exec(bContext *C, wmOperator *op)
BM_uv_vert_map_free(vmap);
- DAG_id_tag_update(&me->id, 0);
+ DEG_id_tag_update(&me->id, 0);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, me);
return OPERATOR_FINISHED;
@@ -4188,7 +3979,7 @@ static int uv_mark_seam_exec(bContext *C, wmOperator *op)
if (scene->toolsettings->edge_mode_live_unwrap)
ED_unwrap_lscm(scene, ob, false);
- DAG_id_tag_update(&me->id, 0);
+ DEG_id_tag_update(&me->id, 0);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, me);
return OPERATOR_FINISHED;
@@ -4278,7 +4069,6 @@ void ED_operatortypes_uvedit(void)
WM_operatortype_append(UV_OT_hide);
WM_operatortype_append(UV_OT_cursor_set);
- WM_operatortype_append(UV_OT_tile_set);
}
void ED_keymap_uvedit(wmKeyConfig *keyconf)
@@ -4358,7 +4148,6 @@ void ED_keymap_uvedit(wmKeyConfig *keyconf)
/* cursor */
WM_keymap_add_item(keymap, "UV_OT_cursor_set", ACTIONMOUSE, KM_PRESS, 0, 0);
- WM_keymap_add_item(keymap, "UV_OT_tile_set", ACTIONMOUSE, KM_PRESS, KM_SHIFT, 0);
/* menus */
WM_keymap_add_menu(keymap, "IMAGE_MT_uvs_snap", SKEY, KM_PRESS, KM_SHIFT, 0);
diff --git a/source/blender/editors/uvedit/uvedit_smart_stitch.c b/source/blender/editors/uvedit/uvedit_smart_stitch.c
index c2a38a90621..fa936e998fa 100644
--- a/source/blender/editors/uvedit/uvedit_smart_stitch.c
+++ b/source/blender/editors/uvedit/uvedit_smart_stitch.c
@@ -52,10 +52,11 @@
#include "BKE_context.h"
#include "BKE_customdata.h"
-#include "BKE_depsgraph.h"
#include "BKE_mesh_mapping.h"
#include "BKE_editmesh.h"
+#include "DEG_depsgraph.h"
+
#include "UI_interface.h"
#include "ED_mesh.h"
@@ -63,6 +64,8 @@
#include "ED_screen.h"
#include "ED_space_api.h"
+#include "GPU_batch.h"
+
#include "RNA_access.h"
#include "RNA_define.h"
@@ -1538,63 +1541,126 @@ static void stitch_calculate_edge_normal(BMEditMesh *em, UvEdge *edge, float *no
normalize_v2(normal);
}
+/**
+ */
+static void stitch_draw_vbo(Gwn_VertBuf *vbo, Gwn_PrimType prim_type, const float col[4])
+{
+ Gwn_Batch *batch = GWN_batch_create_ex(prim_type, vbo, NULL, GWN_BATCH_OWNS_VBO);
+ GWN_batch_program_set_builtin(batch, GPU_SHADER_2D_UNIFORM_COLOR);
+ GWN_batch_uniform_4fv(batch, "color", col);
+ GWN_batch_draw(batch);
+ GWN_batch_discard(batch);
+}
+
+/* TODO make things pretier : store batches inside StitchPreviewer instead of the bare verts pos */
static void stitch_draw(const bContext *UNUSED(C), ARegion *UNUSED(ar), void *arg)
{
- int i, index = 0;
+ int j, index = 0;
+ unsigned int num_line = 0, num_tri, tri_idx = 0, line_idx = 0;
StitchState *state = (StitchState *)arg;
StitchPreviewer *stitch_preview = state->stitch_preview;
+ Gwn_VertBuf *vbo, *vbo_line;
+ float col[4];
- glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT);
- glEnableClientState(GL_VERTEX_ARRAY);
+ static Gwn_VertFormat format = { 0 };
+ static unsigned int pos_id;
+ if (format.attrib_ct == 0) {
+ pos_id = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ }
glEnable(GL_BLEND);
- UI_ThemeColor4(TH_STITCH_PREVIEW_ACTIVE);
- glVertexPointer(2, GL_FLOAT, 0, stitch_preview->static_tris);
- glDrawArrays(GL_TRIANGLES, 0, stitch_preview->num_static_tris * 3);
-
- glVertexPointer(2, GL_FLOAT, 0, stitch_preview->preview_polys);
- for (i = 0; i < stitch_preview->num_polys; i++) {
- glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
- UI_ThemeColor4(TH_STITCH_PREVIEW_FACE);
- glDrawArrays(GL_POLYGON, index, stitch_preview->uvs_per_polygon[i]);
- glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
- UI_ThemeColor4(TH_STITCH_PREVIEW_EDGE);
- glDrawArrays(GL_POLYGON, index, stitch_preview->uvs_per_polygon[i]);
-#if 0
- glPolygonMode(GL_FRONT_AND_BACK, GL_POINT);
- UI_ThemeColor4(TH_STITCH_PREVIEW_VERT);
- glDrawArrays(GL_POLYGON, index, stitch_preview->uvs_per_polygon[i]);
-#endif
-
- index += stitch_preview->uvs_per_polygon[i];
+ /* Static Tris */
+ UI_GetThemeColor4fv(TH_STITCH_PREVIEW_ACTIVE, col);
+ vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, stitch_preview->num_static_tris * 3);
+ for (int i = 0; i < stitch_preview->num_static_tris * 3; i++) {
+ GWN_vertbuf_attr_set(vbo, pos_id, i, &stitch_preview->static_tris[i * 2]);
+ }
+ stitch_draw_vbo(vbo, GWN_PRIM_TRIS, col);
+
+
+ /* Preview Polys */
+ for (int i = 0; i < stitch_preview->num_polys; i++)
+ num_line += stitch_preview->uvs_per_polygon[i];
+
+ num_tri = num_line - 2 * stitch_preview->num_polys;
+
+ /* we need to convert the polys into triangles / lines */
+ vbo = GWN_vertbuf_create_with_format(&format);
+ vbo_line = GWN_vertbuf_create_with_format(&format);
+
+ GWN_vertbuf_data_alloc(vbo, num_tri * 3);
+ GWN_vertbuf_data_alloc(vbo_line, num_line * 2);
+
+ for (int i = 0; i < stitch_preview->num_polys; i++) {
+ BLI_assert(stitch_preview->uvs_per_polygon[i] >= 3);
+
+ /* Start line */
+ GWN_vertbuf_attr_set(vbo_line, pos_id, line_idx++, &stitch_preview->preview_polys[index]);
+ GWN_vertbuf_attr_set(vbo_line, pos_id, line_idx++, &stitch_preview->preview_polys[index + 2]);
+
+ for (j = 1; j < stitch_preview->uvs_per_polygon[i] - 1; ++j) {
+ GWN_vertbuf_attr_set(vbo, pos_id, tri_idx++, &stitch_preview->preview_polys[index]);
+ GWN_vertbuf_attr_set(vbo, pos_id, tri_idx++, &stitch_preview->preview_polys[index + (j + 0) * 2]);
+ GWN_vertbuf_attr_set(vbo, pos_id, tri_idx++, &stitch_preview->preview_polys[index + (j + 1) * 2]);
+
+ GWN_vertbuf_attr_set(vbo_line, pos_id, line_idx++, &stitch_preview->preview_polys[index + (j + 0) * 2]);
+ GWN_vertbuf_attr_set(vbo_line, pos_id, line_idx++, &stitch_preview->preview_polys[index + (j + 1) * 2]);
+ }
+
+ /* Closing line */
+ GWN_vertbuf_attr_set(vbo_line, pos_id, line_idx++, &stitch_preview->preview_polys[index]);
+ /* j = uvs_per_polygon[i] - 1*/
+ GWN_vertbuf_attr_set(vbo_line, pos_id, line_idx++, &stitch_preview->preview_polys[index + j * 2]);
+
+ index += stitch_preview->uvs_per_polygon[i] * 2;
}
+ UI_GetThemeColor4fv(TH_STITCH_PREVIEW_FACE, col);
+ stitch_draw_vbo(vbo, GWN_PRIM_TRIS, col);
+ UI_GetThemeColor4fv(TH_STITCH_PREVIEW_EDGE, col);
+ stitch_draw_vbo(vbo_line, GWN_PRIM_LINES, col);
+
glDisable(GL_BLEND);
- /* draw vert preview */
+
+ /* draw stitch vert/lines preview */
if (state->mode == STITCH_VERT) {
glPointSize(UI_GetThemeValuef(TH_VERTEX_SIZE) * 2.0f);
- UI_ThemeColor4(TH_STITCH_PREVIEW_STITCHABLE);
- glVertexPointer(2, GL_FLOAT, 0, stitch_preview->preview_stitchable);
- glDrawArrays(GL_POINTS, 0, stitch_preview->num_stitchable);
+ UI_GetThemeColor4fv(TH_STITCH_PREVIEW_STITCHABLE, col);
+ vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, stitch_preview->num_stitchable);
+ for (int i = 0; i < stitch_preview->num_stitchable; i++) {
+ GWN_vertbuf_attr_set(vbo, pos_id, i, &stitch_preview->preview_stitchable[i * 2]);
+ }
+ stitch_draw_vbo(vbo, GWN_PRIM_POINTS, col);
- UI_ThemeColor4(TH_STITCH_PREVIEW_UNSTITCHABLE);
- glVertexPointer(2, GL_FLOAT, 0, stitch_preview->preview_unstitchable);
- glDrawArrays(GL_POINTS, 0, stitch_preview->num_unstitchable);
+ UI_GetThemeColor4fv(TH_STITCH_PREVIEW_UNSTITCHABLE, col);
+ vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, stitch_preview->num_unstitchable);
+ for (int i = 0; i < stitch_preview->num_unstitchable; i++) {
+ GWN_vertbuf_attr_set(vbo, pos_id, i, &stitch_preview->preview_unstitchable[i * 2]);
+ }
+ stitch_draw_vbo(vbo, GWN_PRIM_POINTS, col);
}
else {
- UI_ThemeColor4(TH_STITCH_PREVIEW_STITCHABLE);
- glVertexPointer(2, GL_FLOAT, 0, stitch_preview->preview_stitchable);
- glDrawArrays(GL_LINES, 0, 2 * stitch_preview->num_stitchable);
+ UI_GetThemeColor4fv(TH_STITCH_PREVIEW_STITCHABLE, col);
+ vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, stitch_preview->num_stitchable * 2);
+ for (int i = 0; i < stitch_preview->num_stitchable * 2; i++) {
+ GWN_vertbuf_attr_set(vbo, pos_id, i, &stitch_preview->preview_stitchable[i * 2]);
+ }
+ stitch_draw_vbo(vbo, GWN_PRIM_LINES, col);
- UI_ThemeColor4(TH_STITCH_PREVIEW_UNSTITCHABLE);
- glVertexPointer(2, GL_FLOAT, 0, stitch_preview->preview_unstitchable);
- glDrawArrays(GL_LINES, 0, 2 * stitch_preview->num_unstitchable);
+ UI_GetThemeColor4fv(TH_STITCH_PREVIEW_UNSTITCHABLE, col);
+ vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, stitch_preview->num_unstitchable * 2);
+ for (int i = 0; i < stitch_preview->num_unstitchable * 2; i++) {
+ GWN_vertbuf_attr_set(vbo, pos_id, i, &stitch_preview->preview_unstitchable[i * 2]);
+ }
+ stitch_draw_vbo(vbo, GWN_PRIM_LINES, col);
}
-
- glPopClientAttrib();
- glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
}
static UvEdge *uv_edge_get(BMLoop *l, StitchState *state)
@@ -2024,7 +2090,7 @@ static void stitch_exit(bContext *C, wmOperator *op, int finished)
ED_region_draw_cb_exit(CTX_wm_region(C)->type, state->draw_handle);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
state_delete(state);
diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.c b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
index bc38a1cd3bb..4f28d1f9eea 100644
--- a/source/blender/editors/uvedit/uvedit_unwrap_ops.c
+++ b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
@@ -55,13 +55,15 @@
#include "BKE_subsurf.h"
#include "BKE_context.h"
#include "BKE_customdata.h"
-#include "BKE_depsgraph.h"
#include "BKE_image.h"
#include "BKE_main.h"
+#include "BKE_material.h"
#include "BKE_report.h"
#include "BKE_scene.h"
#include "BKE_editmesh.h"
+#include "DEG_depsgraph.h"
+
#include "PIL_time.h"
#include "UI_interface.h"
@@ -116,7 +118,7 @@ static bool ED_uvedit_ensure_uvs(bContext *C, Scene *scene, Object *obedit)
if (ED_uvedit_test(obedit))
return 1;
- if (em && em->bm->totface && !CustomData_has_layer(&em->bm->pdata, CD_MTEXPOLY))
+ if (em && em->bm->totface && !CustomData_has_layer(&em->bm->ldata, CD_MLOOPUV))
ED_mesh_uv_texture_add(obedit->data, NULL, true);
if (!ED_uvedit_test(obedit))
@@ -214,8 +216,7 @@ void ED_uvedit_get_aspect(Scene *scene, Object *ob, BMesh *bm, float *aspx, floa
ED_object_get_active_image(ob, efa->mat_nr + 1, &ima, NULL, NULL, NULL);
}
else {
- MTexPoly *tf = CustomData_bmesh_get(&bm->pdata, efa->head.data, CD_MTEXPOLY);
- ima = tf->tpage;
+ ima = BKE_object_material_edit_image_get(ob, efa->mat_nr);
}
ED_image_get_uv_aspect(ima, NULL, aspx, aspy);
@@ -570,7 +571,7 @@ static void minimize_stretch_iteration(bContext *C, wmOperator *op, bool interac
ms->lasttime = PIL_check_seconds_timer();
- DAG_id_tag_update(ms->obedit->data, 0);
+ DEG_id_tag_update(ms->obedit->data, 0);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, ms->obedit->data);
}
}
@@ -593,7 +594,7 @@ static void minimize_stretch_exit(bContext *C, wmOperator *op, bool cancel)
param_stretch_end(ms->handle);
param_delete(ms->handle);
- DAG_id_tag_update(ms->obedit->data, 0);
+ DEG_id_tag_update(ms->obedit->data, 0);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, ms->obedit->data);
MEM_freeN(ms);
@@ -741,7 +742,7 @@ static int pack_islands_exec(bContext *C, wmOperator *op)
ED_uvedit_pack_islands(scene, obedit, em->bm, true, true, do_rotate);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
return OPERATOR_FINISHED;
@@ -784,7 +785,7 @@ static int average_islands_scale_exec(bContext *C, wmOperator *UNUSED(op))
param_flush(handle);
param_delete(handle);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
return OPERATOR_FINISHED;
@@ -1265,7 +1266,7 @@ static int unwrap_exec(bContext *C, wmOperator *op)
/* execute unwrap */
ED_unwrap_lscm(scene, obedit, true);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
return OPERATOR_FINISHED;
@@ -1392,7 +1393,7 @@ static int uv_from_view_exec(bContext *C, wmOperator *op)
uv_map_clip_correct(scene, obedit, em, op);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
return OPERATOR_FINISHED;
@@ -1445,7 +1446,7 @@ static int reset_exec(bContext *C, wmOperator *UNUSED(op))
ED_mesh_uv_loop_reset(C, me);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
return OPERATOR_FINISHED;
@@ -1481,7 +1482,7 @@ static void uv_sphere_project(float target[2], float source[3], float center[3],
target[0] -= 1.0f;
}
-static void uv_map_mirror(BMEditMesh *em, BMFace *efa, MTexPoly *UNUSED(tf))
+static void uv_map_mirror(BMEditMesh *em, BMFace *efa)
{
BMLoop *l;
BMIter liter;
@@ -1519,7 +1520,6 @@ static int sphere_project_exec(bContext *C, wmOperator *op)
BMFace *efa;
BMLoop *l;
BMIter iter, liter;
- MTexPoly *tf;
MLoopUV *luv;
float center[3], rotmat[4][4];
@@ -1545,13 +1545,12 @@ static int sphere_project_exec(bContext *C, wmOperator *op)
uv_sphere_project(luv->uv, l->v->co, center, rotmat);
}
- tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY);
- uv_map_mirror(em, efa, tf);
+ uv_map_mirror(em, efa);
}
uv_map_clip_correct(scene, obedit, em, op);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
return OPERATOR_FINISHED;
@@ -1600,7 +1599,6 @@ static int cylinder_project_exec(bContext *C, wmOperator *op)
BMFace *efa;
BMLoop *l;
BMIter iter, liter;
- MTexPoly *tf;
MLoopUV *luv;
float center[3], rotmat[4][4];
@@ -1626,13 +1624,12 @@ static int cylinder_project_exec(bContext *C, wmOperator *op)
uv_cylinder_project(luv->uv, l->v->co, center, rotmat);
}
- tf = CustomData_bmesh_get(&em->bm->pdata, efa->head.data, CD_MTEXPOLY);
- uv_map_mirror(em, efa, tf);
+ uv_map_mirror(em, efa);
}
uv_map_clip_correct(scene, obedit, em, op);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
return OPERATOR_FINISHED;
@@ -1663,7 +1660,6 @@ void ED_uvedit_unwrap_cube_project(BMesh *bm, float cube_size, bool use_select,
BMFace *efa;
BMLoop *l;
BMIter iter, liter;
- /* MTexPoly *tf; */ /* UNUSED */
MLoopUV *luv;
float loc[3];
int cox, coy;
@@ -1733,7 +1729,7 @@ static int cube_project_exec(bContext *C, wmOperator *op)
uv_map_clip_correct(scene, obedit, em, op);
- DAG_id_tag_update(obedit->data, 0);
+ DEG_id_tag_update(obedit->data, 0);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
return OPERATOR_FINISHED;
diff --git a/source/blender/freestyle/CMakeLists.txt b/source/blender/freestyle/CMakeLists.txt
index f6b7efe978c..183eaf595ed 100644
--- a/source/blender/freestyle/CMakeLists.txt
+++ b/source/blender/freestyle/CMakeLists.txt
@@ -392,8 +392,8 @@ set(SRC
intern/scene_graph/NodeGroup.h
intern/scene_graph/NodeLight.cpp
intern/scene_graph/NodeLight.h
- intern/scene_graph/NodeSceneRenderLayer.cpp
- intern/scene_graph/NodeSceneRenderLayer.h
+ intern/scene_graph/NodeViewLayer.cpp
+ intern/scene_graph/NodeViewLayer.h
intern/scene_graph/NodeShape.cpp
intern/scene_graph/NodeShape.h
intern/scene_graph/NodeTransform.cpp
@@ -557,6 +557,7 @@ set(INC
../blenkernel
../blenlib
../blentranslation
+ ../depsgraph
../imbuf
../makesdna
../makesrna
diff --git a/source/blender/freestyle/FRS_freestyle.h b/source/blender/freestyle/FRS_freestyle.h
index a6382010ca7..58f1c343235 100644
--- a/source/blender/freestyle/FRS_freestyle.h
+++ b/source/blender/freestyle/FRS_freestyle.h
@@ -30,6 +30,7 @@ extern "C" {
#endif
struct Render;
+struct RenderLayer;
struct Material;
struct FreestyleConfig;
struct FreestyleLineStyle;
@@ -50,13 +51,13 @@ extern struct FreestyleGlobals g_freestyle;
void FRS_initialize(void);
void FRS_set_context(struct bContext *C);
void FRS_read_file(struct bContext *C);
-int FRS_is_freestyle_enabled(struct SceneRenderLayer *srl);
+int FRS_is_freestyle_enabled(struct ViewLayer *view_layer);
void FRS_init_stroke_renderer(struct Render *re);
void FRS_begin_stroke_rendering(struct Render *re);
-struct Render *FRS_do_stroke_rendering(struct Render *re, struct SceneRenderLayer *srl, int render);
+struct Render *FRS_do_stroke_rendering(struct Render *re, struct ViewLayer *view_layer, int render);
void FRS_end_stroke_rendering(struct Render *re);
void FRS_free_view_map_cache(void);
-void FRS_composite_result(struct Render *re, struct SceneRenderLayer *srl, struct Render *freestyle_render);
+void FRS_composite_result(struct Render *re, struct ViewLayer *view_layer, struct Render *freestyle_render);
void FRS_exit(void);
/* FreestyleConfig.linesets */
diff --git a/source/blender/freestyle/intern/application/Controller.cpp b/source/blender/freestyle/intern/application/Controller.cpp
index beb85798223..759f6456759 100644
--- a/source/blender/freestyle/intern/application/Controller.cpp
+++ b/source/blender/freestyle/intern/application/Controller.cpp
@@ -40,7 +40,7 @@ extern "C" {
#include "../scene_graph/NodeDrawingStyle.h"
#include "../scene_graph/NodeShape.h"
#include "../scene_graph/NodeTransform.h"
-#include "../scene_graph/NodeSceneRenderLayer.h"
+#include "../scene_graph/NodeViewLayer.h"
#include "../scene_graph/ScenePrettyPrinter.h"
#include "../scene_graph/VertexRep.h"
@@ -232,9 +232,9 @@ bool Controller::hitViewMapCache()
return false;
}
-int Controller::LoadMesh(Render *re, SceneRenderLayer *srl)
+int Controller::LoadMesh(Render *re, ViewLayer *view_layer)
{
- BlenderFileLoader loader(re, srl);
+ BlenderFileLoader loader(re, view_layer);
loader.setRenderMonitor(_pRenderMonitor);
@@ -301,7 +301,7 @@ int Controller::LoadMesh(Render *re, SceneRenderLayer *srl)
}
cam->setProjectionMatrix(proj);
_RootNode->AddChild(cam);
- _RootNode->AddChild(new NodeSceneRenderLayer(*re->scene, *srl));
+ _RootNode->AddChild(new NodeViewLayer(*re->scene, *view_layer));
sceneHashFunc.reset();
//blenderScene->accept(sceneHashFunc);
diff --git a/source/blender/freestyle/intern/application/Controller.h b/source/blender/freestyle/intern/application/Controller.h
index 154edaf1e53..0304c18b8a6 100644
--- a/source/blender/freestyle/intern/application/Controller.h
+++ b/source/blender/freestyle/intern/application/Controller.h
@@ -68,7 +68,7 @@ public:
//soc
void init_options();
- int LoadMesh(Render *re, SceneRenderLayer *srl);
+ int LoadMesh(Render *re, ViewLayer *view_layer);
int Load3DSFile(const char *iFileName);
void CloseFile();
void ComputeViewMap();
diff --git a/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp b/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp
index 1f5e2b63bfa..a0da68849f7 100644
--- a/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp
+++ b/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp
@@ -32,16 +32,16 @@
namespace Freestyle {
-BlenderFileLoader::BlenderFileLoader(Render *re, SceneRenderLayer *srl)
+BlenderFileLoader::BlenderFileLoader(Render *re, ViewLayer *view_layer)
{
_re = re;
- _srl = srl;
+ _view_layer = view_layer;
_Scene = NULL;
_numFacesRead = 0;
#if 0
_minEdgeSize = DBL_MAX;
#endif
- _smooth = (srl->freestyleConfig.flags & FREESTYLE_FACE_SMOOTHNESS_FLAG) != 0;
+ _smooth = (view_layer->freestyle_config.flags & FREESTYLE_FACE_SMOOTHNESS_FLAG) != 0;
_pRenderMonitor = NULL;
}
@@ -105,8 +105,6 @@ NodeGroup *BlenderFileLoader::Load()
cnt++;
}
- if (!(obi->lay & _srl->lay))
- continue;
char *name = obi->ob->id.name;
//printf("%c%c:%s\n", name[0], name[1], name+2);
//print_m4("obi->mat", obi->mat);
diff --git a/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.h b/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.h
index 894f8eeeb4e..ad92416801d 100644
--- a/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.h
+++ b/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.h
@@ -78,7 +78,7 @@ class BlenderFileLoader
{
public:
/*! Builds a MaxFileLoader */
- BlenderFileLoader(Render *re, SceneRenderLayer *srl);
+ BlenderFileLoader(Render *re, ViewLayer *view_layer);
virtual ~BlenderFileLoader();
/*! Loads the 3D scene and returns a pointer to the scene root node */
@@ -114,7 +114,7 @@ protected:
unsigned n;
};
Render *_re;
- SceneRenderLayer *_srl;
+ ViewLayer *_view_layer;
NodeGroup *_Scene;
unsigned _numFacesRead;
#if 0
diff --git a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
index 9c478c203e7..977bca66731 100644
--- a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
+++ b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
@@ -43,8 +43,9 @@ extern "C" {
#include "DNA_screen_types.h"
#include "DNA_scene_types.h"
+#include "BKE_collection.h"
#include "BKE_customdata.h"
-#include "BKE_depsgraph.h"
+#include "BKE_idprop.h"
#include "BKE_global.h"
#include "BKE_library.h" /* free_libblock */
#include "BKE_material.h"
@@ -59,6 +60,9 @@ extern "C" {
#include "BLI_math_vector.h"
#include "BLI_utildefines.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#include "RE_pipeline.h"
#include "render_types.h"
@@ -73,6 +77,7 @@ const char *BlenderStrokeRenderer::uvNames[] = {"along_stroke", "along_stroke_ti
BlenderStrokeRenderer::BlenderStrokeRenderer(Render *re, int render_count) : StrokeRenderer()
{
freestyle_bmain = re->freestyle_bmain;
+ freestyle_depsgraph = DEG_graph_new();
// for stroke mesh generation
_width = re->winx;
@@ -112,23 +117,40 @@ BlenderStrokeRenderer::BlenderStrokeRenderer(Render *re, int render_count) : Str
freestyle_scene->r.filtertype = old_scene->r.filtertype;
freestyle_scene->r.gauss = old_scene->r.gauss;
freestyle_scene->r.dither_intensity = old_scene->r.dither_intensity;
- BLI_strncpy(freestyle_scene->r.engine, old_scene->r.engine, sizeof(freestyle_scene->r.engine));
- freestyle_scene->r.im_format.planes = R_IMF_PLANES_RGBA;
+ BKE_viewrender_copy(&freestyle_scene->view_render, &old_scene->view_render);
+ if (G.debug & G_DEBUG_FREESTYLE) {
+ cout << "Stroke rendering engine : " << freestyle_scene->view_render.engine_id << endl;
+ }
+ freestyle_scene->r.im_format.planes = R_IMF_PLANES_RGBA;
freestyle_scene->r.im_format.imtype = R_IMF_IMTYPE_PNG;
+ // Copy ID properties, including Cycles render properties
+ if (old_scene->id.properties) {
+ freestyle_scene->id.properties = IDP_CopyProperty_ex(old_scene->id.properties, 0);
+ }
+
+ if (STREQ(freestyle_scene->view_render.engine_id, RE_engine_id_CYCLES)) {
+ /* Render with transparent background. */
+ PointerRNA freestyle_scene_ptr;
+ RNA_id_pointer_create(&freestyle_scene->id, &freestyle_scene_ptr);
+ PointerRNA freestyle_cycles_ptr = RNA_pointer_get(&freestyle_scene_ptr, "cycles");
+ RNA_boolean_set(&freestyle_cycles_ptr, "film_transparent", 1);
+ }
+
if (G.debug & G_DEBUG_FREESTYLE) {
printf("%s: %d thread(s)\n", __func__, BKE_render_num_threads(&freestyle_scene->r));
}
- // Render layer
- SceneRenderLayer *srl = (SceneRenderLayer *)freestyle_scene->r.layers.first;
- srl->layflag = SCE_LAY_SOLID | SCE_LAY_ZTRA;
-
BKE_scene_set_background(freestyle_bmain, freestyle_scene);
+ DEG_graph_id_tag_update(freestyle_bmain, freestyle_depsgraph, &freestyle_scene->id, 0);
+
+ // Scene layer.
+ ViewLayer *view_layer = (ViewLayer *)freestyle_scene->view_layers.first;
+ view_layer->layflag = SCE_LAY_SOLID | SCE_LAY_ZTRA;
// Camera
- Object *object_camera = BKE_object_add(freestyle_bmain, freestyle_scene, OB_CAMERA, NULL);
- DAG_relations_tag_update(freestyle_bmain);
+ Object *object_camera = BKE_object_add(freestyle_bmain, freestyle_scene, view_layer, OB_CAMERA, NULL);
+ DEG_graph_id_tag_update(freestyle_bmain, freestyle_depsgraph, &object_camera->id, 0);
Camera *camera = (Camera *)object_camera->data;
camera->type = CAM_ORTHO;
@@ -156,6 +178,9 @@ BlenderStrokeRenderer::BlenderStrokeRenderer(Render *re, int render_count) : Str
_nodetree_hash = BLI_ghash_ptr_new("BlenderStrokeRenderer::_nodetree_hash");
else
_nodetree_hash = NULL;
+
+ // New IDs were added, tag relations for update.
+ DEG_graph_tag_relations_update(freestyle_depsgraph);
}
BlenderStrokeRenderer::~BlenderStrokeRenderer()
@@ -166,7 +191,8 @@ BlenderStrokeRenderer::~BlenderStrokeRenderer()
// compositor has finished.
// release objects and data blocks
- for (Base *b = (Base *)freestyle_scene->base.first; b; b = b->next) {
+ ViewLayer *view_layer = (ViewLayer *)freestyle_scene->view_layers.first;
+ for (Base *b = (Base *)view_layer->object_bases.first; b; b = b->next) {
Object *ob = b->object;
void *data = ob->data;
char *name = ob->id.name;
@@ -189,7 +215,14 @@ BlenderStrokeRenderer::~BlenderStrokeRenderer()
cerr << "Warning: unexpected object in the scene: " << name[0] << name[1] << ":" << (name + 2) << endl;
}
}
- BLI_freelistN(&freestyle_scene->base);
+
+ // Make sure we don't have any bases which might reference freed objects.
+ FOREACH_SCENE_COLLECTION(freestyle_scene, sc)
+ {
+ BLI_freelistN(&sc->objects);
+ }
+ FOREACH_SCENE_COLLECTION_END
+ BLI_freelistN(&view_layer->object_bases);
// release materials
Link *lnk = (Link *)freestyle_bmain->mat.first;
@@ -213,6 +246,8 @@ BlenderStrokeRenderer::~BlenderStrokeRenderer()
if (_use_shading_nodes)
BLI_ghash_free(_nodetree_hash, NULL, NULL);
+ DEG_graph_free(freestyle_depsgraph);
+
FreeStrokeGroups();
}
@@ -460,28 +495,6 @@ void BlenderStrokeRenderer::RenderStrokeRepBasic(StrokeRep *iStrokeRep) const
ma = BlenderStrokeRenderer::GetStrokeShader(freestyle_bmain, nt, false);
BLI_ghash_insert(_nodetree_hash, nt, ma);
}
-
- if (STREQ(freestyle_scene->r.engine, RE_engine_id_CYCLES)) {
- PointerRNA scene_ptr, freestyle_scene_ptr;
- RNA_pointer_create(NULL, &RNA_Scene, old_scene, &scene_ptr);
- RNA_pointer_create(NULL, &RNA_Scene, freestyle_scene, &freestyle_scene_ptr);
-
- PointerRNA cycles_ptr = RNA_pointer_get(&scene_ptr, "cycles");
- PointerRNA freestyle_cycles_ptr = RNA_pointer_get(&freestyle_scene_ptr, "cycles");
-
- int flag;
- RNA_STRUCT_BEGIN(&freestyle_cycles_ptr, prop)
- {
- flag = RNA_property_flag(prop);
- if (flag & PROP_HIDDEN)
- continue;
- RNA_property_copy(&freestyle_cycles_ptr, &cycles_ptr, prop, -1);
- }
- RNA_STRUCT_END;
-
- RNA_boolean_set(&freestyle_cycles_ptr, "film_transparent", 1);
- }
-
iStrokeRep->setMaterial(ma);
}
else {
@@ -510,7 +523,7 @@ void BlenderStrokeRenderer::RenderStrokeRepBasic(StrokeRep *iStrokeRep) const
// If still no material, create one
if (!has_mat) {
Material *ma = BKE_material_add(freestyle_bmain, "stroke_material");
- DAG_relations_tag_update(freestyle_bmain);
+ DEG_relations_tag_update(freestyle_bmain);
ma->mode |= MA_VERTEXCOLP;
ma->mode |= MA_TRANSP;
ma->mode |= MA_SHLESS;
@@ -674,8 +687,8 @@ int BlenderStrokeRenderer::get_stroke_count() const
void BlenderStrokeRenderer::GenerateStrokeMesh(StrokeGroup *group, bool hasTex)
{
#if 0
- Object *object_mesh = BKE_object_add(freestyle_bmain, freestyle_scene, OB_MESH);
- DAG_relations_tag_update(freestyle_bmain);
+ Object *object_mesh = BKE_object_add(freestyle_bmain, freestyle_scene, (ViewLayer *)freestyle_scene->view_layers.first, OB_MESH);
+ DEG_relations_tag_update(freestyle_bmain);
#else
Object *object_mesh = NewMesh();
#endif
@@ -700,17 +713,13 @@ void BlenderStrokeRenderer::GenerateStrokeMesh(StrokeGroup *group, bool hasTex)
if (hasTex) {
// First UV layer
- CustomData_add_layer_named(&mesh->pdata, CD_MTEXPOLY, CD_CALLOC, NULL, mesh->totpoly, uvNames[0]);
CustomData_add_layer_named(&mesh->ldata, CD_MLOOPUV, CD_CALLOC, NULL, mesh->totloop, uvNames[0]);
- CustomData_set_layer_active(&mesh->pdata, CD_MTEXPOLY, 0);
CustomData_set_layer_active(&mesh->ldata, CD_MLOOPUV, 0);
BKE_mesh_update_customdata_pointers(mesh, true);
loopsuv[0] = mesh->mloopuv;
// Second UV layer
- CustomData_add_layer_named(&mesh->pdata, CD_MTEXPOLY, CD_CALLOC, NULL, mesh->totpoly, uvNames[1]);
CustomData_add_layer_named(&mesh->ldata, CD_MLOOPUV, CD_CALLOC, NULL, mesh->totloop, uvNames[1]);
- CustomData_set_layer_active(&mesh->pdata, CD_MTEXPOLY, 1);
CustomData_set_layer_active(&mesh->ldata, CD_MLOOPUV, 1);
BKE_mesh_update_customdata_pointers(mesh, true);
loopsuv[1] = mesh->mloopuv;
@@ -922,7 +931,6 @@ void BlenderStrokeRenderer::GenerateStrokeMesh(StrokeGroup *group, bool hasTex)
Object *BlenderStrokeRenderer::NewMesh() const
{
Object *ob;
- Base *base;
char name[MAX_ID_NAME];
unsigned int mesh_id = get_stroke_mesh_id();
@@ -932,16 +940,14 @@ Object *BlenderStrokeRenderer::NewMesh() const
ob->data = BKE_mesh_add(freestyle_bmain, name);
ob->lay = 1;
- base = BKE_scene_base_add(freestyle_scene, ob);
- DAG_relations_tag_update(freestyle_bmain);
-#if 0
- BKE_scene_base_deselect_all(scene);
- BKE_scene_base_select(scene, base);
-#else
- (void)base;
-#endif
+ SceneCollection *sc_master = BKE_collection_master(&freestyle_scene->id);
+ BKE_collection_object_add(&freestyle_scene->id, sc_master, ob);
+ DEG_graph_tag_relations_update(freestyle_depsgraph);
- DAG_id_tag_update_ex(freestyle_bmain, &ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+ DEG_graph_id_tag_update(freestyle_bmain,
+ freestyle_depsgraph,
+ &ob->id,
+ OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
return ob;
}
@@ -958,6 +964,9 @@ Render *BlenderStrokeRenderer::RenderScene(Render * /*re*/, bool render)
#endif
Render *freestyle_render = RE_NewSceneRender(freestyle_scene);
+ ViewLayer *view_layer = (ViewLayer *)freestyle_scene->view_layers.first;
+ DEG_graph_relations_update(freestyle_depsgraph, freestyle_bmain, freestyle_scene, view_layer);
+ freestyle_render->depsgraph = freestyle_depsgraph;
RE_RenderFreestyleStrokes(freestyle_render, freestyle_bmain, freestyle_scene,
render && get_stroke_count() > 0);
diff --git a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h
index ec53efa14cd..c7204293839 100644
--- a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h
+++ b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h
@@ -29,6 +29,7 @@
#include "../system/FreestyleConfig.h"
extern "C" {
+struct Depsgraph;
struct GHash;
struct Main;
struct Material;
@@ -76,6 +77,7 @@ protected:
Main *freestyle_bmain;
Scene *old_scene;
Scene *freestyle_scene;
+ Depsgraph *freestyle_depsgraph;
bContext *_context;
float _width, _height;
float _z, _z_delta;
diff --git a/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp b/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
index ea22633c50e..e2560a33443 100644
--- a/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
+++ b/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
@@ -283,19 +283,19 @@ static bool test_edge_type_conditions(struct edge_type_condition *conditions,
return true;
}
-static void prepare(Render *re, SceneRenderLayer *srl)
+static void prepare(Render *re, ViewLayer *view_layer)
{
// load mesh
re->i.infostr = IFACE_("Freestyle: Mesh loading");
re->stats_draw(re->sdh, &re->i);
re->i.infostr = NULL;
- if (controller->LoadMesh(re, srl)) // returns if scene cannot be loaded or if empty
+ if (controller->LoadMesh(re, view_layer)) // returns if scene cannot be loaded or if empty
return;
if (re->test_break(re->tbh))
return;
// add style modules
- FreestyleConfig *config = &srl->freestyleConfig;
+ FreestyleConfig *config = &view_layer->freestyle_config;
if (G.debug & G_DEBUG_FREESTYLE) {
cout << "\n=== Rendering options ===" << endl;
@@ -359,7 +359,7 @@ static void prepare(Render *re, SceneRenderLayer *srl)
cout << " " << layer_count+1 << ": " << lineset->name << " - " <<
(lineset->linestyle ? (lineset->linestyle->id.name + 2) : "<NULL>") << endl;
}
- char *buffer = create_lineset_handler(srl->name, lineset->name);
+ char *buffer = create_lineset_handler(view_layer->name, lineset->name);
controller->InsertStyleModule(layer_count, lineset->name, buffer);
controller->toggleLayer(layer_count, true);
MEM_freeN(buffer);
@@ -445,7 +445,7 @@ static void prepare(Render *re, SceneRenderLayer *srl)
}
// set diffuse and z depth passes
- RenderLayer *rl = RE_GetRenderLayer(re->result, srl->name);
+ RenderLayer *rl = RE_GetRenderLayer(re->result, view_layer->name);
bool diffuse = false, z = false;
for (RenderPass *rpass = (RenderPass *)rl->passes.first; rpass; rpass = rpass->next) {
if (STREQ(rpass->name, RE_PASSNAME_DIFFUSE)) {
@@ -473,7 +473,7 @@ static void prepare(Render *re, SceneRenderLayer *srl)
controller->ComputeViewMap();
}
-void FRS_composite_result(Render *re, SceneRenderLayer *srl, Render *freestyle_render)
+void FRS_composite_result(Render *re, ViewLayer *view_layer, Render *freestyle_render)
{
RenderLayer *rl;
float *src, *dest, *pixSrc, *pixDest;
@@ -503,7 +503,7 @@ void FRS_composite_result(Render *re, SceneRenderLayer *srl, Render *freestyle_r
}
#endif
- rl = RE_GetRenderLayer(re->result, srl->name);
+ rl = RE_GetRenderLayer(re->result, view_layer->name);
if (!rl) {
if (G.debug & G_DEBUG_FREESTYLE) {
cout << "No destination render layer to composite to" << endl;
@@ -536,13 +536,13 @@ void FRS_composite_result(Render *re, SceneRenderLayer *srl, Render *freestyle_r
}
}
-static int displayed_layer_count(SceneRenderLayer *srl)
+static int displayed_layer_count(ViewLayer *view_layer)
{
int count = 0;
- switch (srl->freestyleConfig.mode) {
+ switch (view_layer->freestyle_config.mode) {
case FREESTYLE_CONTROL_SCRIPT_MODE:
- for (FreestyleModuleConfig *module = (FreestyleModuleConfig *)srl->freestyleConfig.modules.first;
+ for (FreestyleModuleConfig *module = (FreestyleModuleConfig *)view_layer->freestyle_config.modules.first;
module;
module = module->next)
{
@@ -551,7 +551,7 @@ static int displayed_layer_count(SceneRenderLayer *srl)
}
break;
case FREESTYLE_CONTROL_EDITOR_MODE:
- for (FreestyleLineSet *lineset = (FreestyleLineSet *)srl->freestyleConfig.linesets.first;
+ for (FreestyleLineSet *lineset = (FreestyleLineSet *)view_layer->freestyle_config.linesets.first;
lineset;
lineset = lineset->next)
{
@@ -563,9 +563,11 @@ static int displayed_layer_count(SceneRenderLayer *srl)
return count;
}
-int FRS_is_freestyle_enabled(SceneRenderLayer *srl)
+int FRS_is_freestyle_enabled(ViewLayer *view_layer)
{
- return (!(srl->layflag & SCE_LAY_DISABLE) && srl->layflag & SCE_LAY_FRS && displayed_layer_count(srl) > 0);
+ return ((view_layer->flag & VIEW_LAYER_RENDER) &&
+ (view_layer->flag & VIEW_LAYER_FREESTYLE) &&
+ displayed_layer_count(view_layer) > 0);
}
void FRS_init_stroke_renderer(Render *re)
@@ -587,7 +589,7 @@ void FRS_begin_stroke_rendering(Render *re)
init_camera(re);
}
-Render *FRS_do_stroke_rendering(Render *re, SceneRenderLayer *srl, int render)
+Render *FRS_do_stroke_rendering(Render *re, ViewLayer *view_layer, int render)
{
Render *freestyle_render = NULL;
@@ -596,12 +598,12 @@ Render *FRS_do_stroke_rendering(Render *re, SceneRenderLayer *srl, int render)
RenderMonitor monitor(re);
controller->setRenderMonitor(&monitor);
- controller->setViewMapCache((srl->freestyleConfig.flags & FREESTYLE_VIEW_MAP_CACHE) ? true : false);
+ controller->setViewMapCache((view_layer->freestyle_config.flags & FREESTYLE_VIEW_MAP_CACHE) ? true : false);
if (G.debug & G_DEBUG_FREESTYLE) {
cout << endl;
cout << "----------------------------------------------------------" << endl;
- cout << "| " << (re->scene->id.name + 2) << "|" << srl->name << endl;
+ cout << "| " << (re->scene->id.name + 2) << "|" << view_layer->name << endl;
cout << "----------------------------------------------------------" << endl;
}
@@ -610,7 +612,7 @@ Render *FRS_do_stroke_rendering(Render *re, SceneRenderLayer *srl, int render)
// - add style modules
// - set parameters
// - compute view map
- prepare(re, srl);
+ prepare(re, view_layer);
if (re->test_break(re->tbh)) {
controller->CloseFile();
@@ -635,7 +637,7 @@ Render *FRS_do_stroke_rendering(Render *re, SceneRenderLayer *srl, int render)
// composite result
if (freestyle_render) {
- FRS_composite_result(re, srl, freestyle_render);
+ FRS_composite_result(re, view_layer, freestyle_render);
RE_FreeRenderResult(freestyle_render->result);
freestyle_render->result = NULL;
}
diff --git a/source/blender/freestyle/intern/scene_graph/IndexedFaceSet.cpp b/source/blender/freestyle/intern/scene_graph/IndexedFaceSet.cpp
index 9c462bb6b2b..6f5491fc8ef 100644
--- a/source/blender/freestyle/intern/scene_graph/IndexedFaceSet.cpp
+++ b/source/blender/freestyle/intern/scene_graph/IndexedFaceSet.cpp
@@ -51,7 +51,6 @@ IndexedFaceSet::IndexedFaceSet() : Rep()
_MISize = 0;
_TIndices = NULL;
_TISize = 0;
- _displayList = 0;
}
IndexedFaceSet::IndexedFaceSet(float *iVertices, unsigned iVSize, float *iNormals, unsigned iNSize,
@@ -150,8 +149,6 @@ IndexedFaceSet::IndexedFaceSet(float *iVertices, unsigned iVSize, float *iNormal
_TISize = iTISize;
_TIndices = iTIndices;
}
-
- _displayList = 0;
}
IndexedFaceSet::IndexedFaceSet(const IndexedFaceSet& iBrother) : Rep(iBrother)
@@ -215,8 +212,6 @@ IndexedFaceSet::IndexedFaceSet(const IndexedFaceSet& iBrother) : Rep(iBrother)
_TIndices = new unsigned[_TISize];
memcpy(_TIndices, iBrother.tindices(), _TISize * sizeof(unsigned));
}
-
- _displayList = 0;
}
IndexedFaceSet::~IndexedFaceSet()
@@ -276,10 +271,6 @@ IndexedFaceSet::~IndexedFaceSet()
delete[] _TIndices;
_TIndices = NULL;
}
-
- // should find a way to deallocates the displayList
- // glDeleteLists(GLuint list, GLSizei range)
- _displayList = 0;
}
void IndexedFaceSet::accept(SceneVisitor& v)
diff --git a/source/blender/freestyle/intern/scene_graph/IndexedFaceSet.h b/source/blender/freestyle/intern/scene_graph/IndexedFaceSet.h
index 8d7bf986bde..16dea6f907e 100644
--- a/source/blender/freestyle/intern/scene_graph/IndexedFaceSet.h
+++ b/source/blender/freestyle/intern/scene_graph/IndexedFaceSet.h
@@ -150,8 +150,6 @@ public:
std::swap(_MISize, ioOther._MISize);
std::swap(_TISize, ioOther._TISize);
- std::swap(_displayList, ioOther._displayList);
-
Rep::swap(ioOther);
}
@@ -173,12 +171,6 @@ public:
/*! Compute the Bounding Box */
virtual void ComputeBBox();
- /*! modifiers */
- inline void setDisplayList(unsigned int index)
- {
- _displayList = index;
- }
-
/*! Accessors */
virtual const float *vertices() const
{
@@ -280,11 +272,6 @@ public:
return _TISize;
}
- inline unsigned int displayList() const
- {
- return _displayList;
- }
-
protected:
float *_Vertices;
float *_Normals;
@@ -311,8 +298,6 @@ protected:
unsigned _MISize;
unsigned _TISize;
- unsigned int _displayList;
-
#ifdef WITH_CXX_GUARDEDALLOC
MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:IndexedFaceSet")
#endif
diff --git a/source/blender/freestyle/intern/scene_graph/NodeSceneRenderLayer.cpp b/source/blender/freestyle/intern/scene_graph/NodeSceneRenderLayer.cpp
deleted file mode 100644
index 24c56ff4e28..00000000000
--- a/source/blender/freestyle/intern/scene_graph/NodeSceneRenderLayer.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file blender/freestyle/intern/scene_graph/NodeSceneRenderLayer.cpp
- * \ingroup freestyle
- * \brief Class to represent a scene render layer in Blender.
- */
-
-#include "NodeSceneRenderLayer.h"
-
-namespace Freestyle {
-
-void NodeSceneRenderLayer::accept(SceneVisitor& v)
-{
- v.visitNodeSceneRenderLayer(*this);
-}
-
-} /* namespace Freestyle */
diff --git a/source/blender/freestyle/intern/scene_graph/NodeSceneRenderLayer.h b/source/blender/freestyle/intern/scene_graph/NodeSceneRenderLayer.h
deleted file mode 100644
index 8dc93d84201..00000000000
--- a/source/blender/freestyle/intern/scene_graph/NodeSceneRenderLayer.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-#ifndef __FREESTYLE_NODE_SCENE_RENDER_LAYER_H__
-#define __FREESTYLE_NODE_SCENE_RENDER_LAYER_H__
-
-/** \file blender/freestyle/intern/scene_graph/NodeSceneRenderLayer.h
- * \ingroup freestyle
- * \brief Class to represent a scene render layer in Blender.
- */
-
-#include "Node.h"
-
-extern "C" {
-#include "DNA_scene_types.h" /* for Scene and SceneRenderLayer */
-}
-
-using namespace std;
-
-namespace Freestyle {
-
-class NodeSceneRenderLayer : public Node
-{
-public:
- inline NodeSceneRenderLayer(Scene& scene, SceneRenderLayer& srl) : Node(), _Scene(scene), _SceneRenderLayer(srl) {}
- virtual ~NodeSceneRenderLayer() {}
-
- inline struct Scene& scene() const
- {
- return _Scene;
- }
-
- inline struct SceneRenderLayer& sceneRenderLayer() const
- {
- return _SceneRenderLayer;
- }
-
- /*! Accept the corresponding visitor */
- virtual void accept(SceneVisitor& v);
-
-protected:
-
- Scene& _Scene;
- SceneRenderLayer& _SceneRenderLayer;
-};
-
-} /* namespace Freestyle */
-
-#endif // __FREESTYLE_NODE_SCENE_RENDER_LAYER_H__
diff --git a/source/blender/freestyle/intern/scene_graph/NodeViewLayer.cpp b/source/blender/freestyle/intern/scene_graph/NodeViewLayer.cpp
new file mode 100644
index 00000000000..701c5caa91d
--- /dev/null
+++ b/source/blender/freestyle/intern/scene_graph/NodeViewLayer.cpp
@@ -0,0 +1,35 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/freestyle/intern/scene_graph/NodeViewLayer.cpp
+ * \ingroup freestyle
+ * \brief Class to represent a scene render layer in Blender.
+ */
+
+#include "NodeViewLayer.h"
+
+namespace Freestyle {
+
+void NodeViewLayer::accept(SceneVisitor& v)
+{
+ v.visitNodeViewLayer(*this);
+}
+
+} /* namespace Freestyle */
diff --git a/source/blender/freestyle/intern/scene_graph/NodeViewLayer.h b/source/blender/freestyle/intern/scene_graph/NodeViewLayer.h
new file mode 100644
index 00000000000..cc64fda60b6
--- /dev/null
+++ b/source/blender/freestyle/intern/scene_graph/NodeViewLayer.h
@@ -0,0 +1,66 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef __FREESTYLE_NODE_VIEW_LAYER_H__
+#define __FREESTYLE_NODE_VIEW_LAYER_H__
+
+/** \file blender/freestyle/intern/scene_graph/NodeViewLayer.h
+ * \ingroup freestyle
+ * \brief Class to represent a view layer in Blender.
+ */
+
+#include "Node.h"
+
+extern "C" {
+#include "DNA_scene_types.h" /* for Scene and ViewLayer */
+}
+
+using namespace std;
+
+namespace Freestyle {
+
+class NodeViewLayer : public Node
+{
+public:
+ inline NodeViewLayer(Scene& scene, ViewLayer& view_layer) : Node(), _Scene(scene), _ViewLayer(view_layer) {}
+ virtual ~NodeViewLayer() {}
+
+ inline struct Scene& scene() const
+ {
+ return _Scene;
+ }
+
+ inline struct ViewLayer& sceneLayer() const
+ {
+ return _ViewLayer;
+ }
+
+ /*! Accept the corresponding visitor */
+ virtual void accept(SceneVisitor& v);
+
+protected:
+
+ Scene& _Scene;
+ ViewLayer& _ViewLayer;
+};
+
+} /* namespace Freestyle */
+
+#endif // __FREESTYLE_NODE_VIEW_LAYER_H__
diff --git a/source/blender/freestyle/intern/scene_graph/SceneHash.cpp b/source/blender/freestyle/intern/scene_graph/SceneHash.cpp
index 2af02ab5764..16c353678c1 100644
--- a/source/blender/freestyle/intern/scene_graph/SceneHash.cpp
+++ b/source/blender/freestyle/intern/scene_graph/SceneHash.cpp
@@ -35,14 +35,14 @@ string SceneHash::toString()
return ss.str();
}
-void SceneHash::visitNodeSceneRenderLayer(NodeSceneRenderLayer& node)
+void SceneHash::visitNodeViewLayer(NodeViewLayer& node)
{
struct RenderData *r = &node.scene().r;
adler32((unsigned char *)&r->xsch, sizeof(r->xsch)); // resolution_x
adler32((unsigned char *)&r->ysch, sizeof(r->ysch)); // resolution_y
adler32((unsigned char *)&r->size, sizeof(r->size)); // resolution_percentage
- struct FreestyleConfig *config = &node.sceneRenderLayer().freestyleConfig;
+ struct FreestyleConfig *config = &node.sceneLayer().freestyle_config;
adler32((unsigned char *)&config->flags, sizeof(config->flags));
adler32((unsigned char *)&config->crease_angle, sizeof(config->crease_angle));
adler32((unsigned char *)&config->sphere_radius, sizeof(config->sphere_radius));
diff --git a/source/blender/freestyle/intern/scene_graph/SceneHash.h b/source/blender/freestyle/intern/scene_graph/SceneHash.h
index 9da711673f0..662b4bba8f1 100644
--- a/source/blender/freestyle/intern/scene_graph/SceneHash.h
+++ b/source/blender/freestyle/intern/scene_graph/SceneHash.h
@@ -26,7 +26,7 @@
*/
#include "IndexedFaceSet.h"
-#include "NodeSceneRenderLayer.h"
+#include "NodeViewLayer.h"
#include "NodeCamera.h"
#include "SceneVisitor.h"
@@ -49,7 +49,7 @@ public:
virtual ~SceneHash() {}
VISIT_DECL(NodeCamera)
- VISIT_DECL(NodeSceneRenderLayer)
+ VISIT_DECL(NodeViewLayer)
VISIT_DECL(IndexedFaceSet)
string toString();
diff --git a/source/blender/freestyle/intern/scene_graph/SceneVisitor.h b/source/blender/freestyle/intern/scene_graph/SceneVisitor.h
index 712585c4064..d76e48980bf 100644
--- a/source/blender/freestyle/intern/scene_graph/SceneVisitor.h
+++ b/source/blender/freestyle/intern/scene_graph/SceneVisitor.h
@@ -56,7 +56,7 @@ class NodeLight;
class NodeCamera;
class NodeDrawingStyle;
class NodeTransform;
-class NodeSceneRenderLayer;
+class NodeViewLayer;
class Rep;
class LineRep;
@@ -88,7 +88,7 @@ public:
VISIT_COMPLETE_DEF(NodeCamera)
VISIT_COMPLETE_DEF(NodeDrawingStyle)
VISIT_COMPLETE_DEF(NodeTransform)
- VISIT_COMPLETE_DEF(NodeSceneRenderLayer)
+ VISIT_COMPLETE_DEF(NodeViewLayer)
VISIT_COMPLETE_DEF(Rep)
VISIT_COMPLETE_DEF(LineRep)
diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt
index 885ff2ff159..0ac842d90a0 100644
--- a/source/blender/gpu/CMakeLists.txt
+++ b/source/blender/gpu/CMakeLists.txt
@@ -31,6 +31,9 @@ set(INC
../imbuf
../makesdna
../makesrna
+ ../draw
+
+ ../editors/include
# For node muting stuff...
../nodes
@@ -39,6 +42,7 @@ set(INC
../../../intern/glew-mx
../../../intern/guardedalloc
../../../intern/smoke/extern
+ ../../../intern/gawain
)
set(INC_SYS
@@ -47,6 +51,8 @@ set(INC_SYS
set(SRC
intern/gpu_basic_shader.c
+ intern/gpu_batch.c
+ intern/gpu_batch_presets.c
intern/gpu_buffers.c
intern/gpu_codegen.c
intern/gpu_compositing.c
@@ -54,13 +60,19 @@ set(SRC
intern/gpu_draw.c
intern/gpu_extensions.c
intern/gpu_framebuffer.c
+ intern/gpu_immediate.c
+ intern/gpu_immediate_util.c
intern/gpu_init_exit.c
+ intern/gpu_lamp.c
intern/gpu_material.c
+ intern/gpu_matrix.c
intern/gpu_select.c
intern/gpu_select_pick.c
intern/gpu_select_sample_query.c
intern/gpu_shader.c
intern/gpu_texture.c
+ intern/gpu_uniformbuffer.c
+ intern/gpu_viewport.c
shaders/gpu_shader_fx_lib.glsl
shaders/gpu_shader_fx_ssao_frag.glsl
@@ -69,7 +81,7 @@ set(SRC
shaders/gpu_shader_fx_dof_hq_frag.glsl
shaders/gpu_shader_fx_dof_hq_vert.glsl
shaders/gpu_shader_fx_dof_hq_geo.glsl
- shaders/gpu_shader_fx_vert.glsl
+ shaders/gpu_shader_fullscreen_vert.glsl
shaders/gpu_shader_material.glsl
shaders/gpu_shader_sep_gaussian_blur_frag.glsl
shaders/gpu_shader_sep_gaussian_blur_vert.glsl
@@ -85,6 +97,7 @@ set(SRC
shaders/gpu_shader_smoke_vert.glsl
GPU_basic_shader.h
+ GPU_batch.h
GPU_buffers.h
GPU_compositing.h
GPU_debug.h
@@ -92,16 +105,108 @@ set(SRC
GPU_extensions.h
GPU_framebuffer.h
GPU_glew.h
+ GPU_immediate.h
+ GPU_immediate_util.h
GPU_init_exit.h
+ GPU_lamp.h
+ GPU_legacy_stubs.h
GPU_material.h
+ GPU_matrix.h
GPU_select.h
GPU_shader.h
GPU_texture.h
+ GPU_uniformbuffer.h
+ GPU_viewport.h
+
intern/gpu_codegen.h
intern/gpu_private.h
+ intern/gpu_lamp_private.h
intern/gpu_select_private.h
+ intern/gpu_shader_private.h
)
+data_to_c_simple(shaders/gpu_shader_depth_only_frag.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_uniform_color_frag.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_checker_frag.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_diag_stripes_frag.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_simple_lighting_frag.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_simple_lighting_smooth_color_frag.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_simple_lighting_smooth_color_alpha_frag.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_flat_color_frag.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_flat_color_alpha_test_0_frag.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_2D_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_2D_flat_color_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_2D_line_dashed_uniform_color_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_2D_line_dashed_frag.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_2D_line_dashed_geom.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_2D_smooth_color_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_2D_smooth_color_frag.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_2D_image_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_image_linear_frag.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_image_shuffle_color_frag.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_image_mask_uniform_color_frag.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_image_modulate_alpha_frag.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_image_alpha_color_frag.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_image_color_frag.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_image_rect_modulate_alpha_frag.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_image_depth_linear_frag.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_image_interlace_frag.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_3D_image_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_3D_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_3D_normal_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_3D_flat_color_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_3D_line_dashed_uniform_color_legacy_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_3D_line_dashed_uniform_color_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_3D_smooth_color_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_3D_normal_smooth_color_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_3D_smooth_color_frag.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_3D_passthrough_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_3D_clipped_uniform_color_vert.glsl SRC)
+
+data_to_c_simple(shaders/gpu_shader_instance_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_instance_variying_size_variying_color_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_instance_objectspace_variying_color_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_instance_screenspace_variying_color_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_instance_screen_aligned_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_instance_camera_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_instance_distance_line_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_instance_edges_variying_color_geom.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_instance_edges_variying_color_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_instance_bone_envelope_solid_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_instance_bone_envelope_wire_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_instance_mball_helpers_vert.glsl SRC)
+
+data_to_c_simple(shaders/gpu_shader_3D_groundline_geom.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_3D_groundpoint_vert.glsl SRC)
+
+data_to_c_simple(shaders/gpu_shader_point_uniform_color_frag.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_point_uniform_color_aa_frag.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_point_uniform_color_outline_aa_frag.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_point_varying_color_outline_aa_frag.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_point_varying_color_frag.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_3D_point_fixed_size_varying_color_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_3D_point_varying_size_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_3D_point_varying_size_varying_color_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_3D_point_uniform_size_aa_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_3D_point_uniform_size_outline_aa_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_2D_point_varying_size_varying_color_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_2D_point_uniform_size_aa_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_2D_point_uniform_size_outline_aa_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_2D_point_uniform_size_varying_color_outline_aa_vert.glsl SRC)
+
+data_to_c_simple(shaders/gpu_shader_edges_front_back_persp_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_edges_front_back_persp_geom.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_edges_front_back_persp_legacy_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_edges_front_back_ortho_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_edges_overlay_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_edges_overlay_geom.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_edges_overlay_simple_geom.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_edges_overlay_frag.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_text_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_text_frag.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_keyframe_diamond_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_keyframe_diamond_frag.glsl SRC)
+
data_to_c_simple(shaders/gpu_shader_geometry.glsl SRC)
data_to_c_simple(shaders/gpu_shader_fire_frag.glsl SRC)
data_to_c_simple(shaders/gpu_shader_smoke_frag.glsl SRC)
@@ -116,7 +221,7 @@ data_to_c_simple(shaders/gpu_shader_vertex.glsl SRC)
data_to_c_simple(shaders/gpu_shader_vertex_world.glsl SRC)
data_to_c_simple(shaders/gpu_shader_vsm_store_frag.glsl SRC)
data_to_c_simple(shaders/gpu_shader_vsm_store_vert.glsl SRC)
-data_to_c_simple(shaders/gpu_shader_fx_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_fullscreen_vert.glsl SRC)
data_to_c_simple(shaders/gpu_shader_fx_ssao_frag.glsl SRC)
data_to_c_simple(shaders/gpu_shader_fx_dof_frag.glsl SRC)
data_to_c_simple(shaders/gpu_shader_fx_dof_vert.glsl SRC)
diff --git a/source/blender/gpu/GPU_basic_shader.h b/source/blender/gpu/GPU_basic_shader.h
index d9bf3d1ced3..dc378927e79 100644
--- a/source/blender/gpu/GPU_basic_shader.h
+++ b/source/blender/gpu/GPU_basic_shader.h
@@ -64,12 +64,6 @@ typedef enum GPUBasicShaderStipple {
GPU_SHADER_STIPPLE_HEXAGON = 3,
GPU_SHADER_STIPPLE_DIAG_STRIPES = 4,
GPU_SHADER_STIPPLE_DIAG_STRIPES_SWAP = 5,
- GPU_SHADER_STIPPLE_S3D_INTERLACE_ROW = 6,
- GPU_SHADER_STIPPLE_S3D_INTERLACE_ROW_SWAP = 7,
- GPU_SHADER_STIPPLE_S3D_INTERLACE_COLUMN = 8,
- GPU_SHADER_STIPPLE_S3D_INTERLACE_COLUMN_SWAP = 9,
- GPU_SHADER_STIPPLE_S3D_INTERLACE_CHECKER = 10,
- GPU_SHADER_STIPPLE_S3D_INTERLACE_CHECKER_SWAP = 11
} GPUBasicShaderStipple;
void GPU_basic_shaders_init(void);
@@ -132,9 +126,6 @@ void GPU_basic_shader_stipple(GPUBasicShaderStipple stipple_id);
void GPU_basic_shader_line_stipple(GLint stipple_factor, GLushort stipple_pattern);
void GPU_basic_shader_line_width(float line_width);
-bool GPU_basic_shader_use_glsl_get(void);
-void GPU_basic_shader_use_glsl_set(bool enabled);
-
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/gpu/GPU_batch.h b/source/blender/gpu/GPU_batch.h
new file mode 100644
index 00000000000..d2f3409dc07
--- /dev/null
+++ b/source/blender/gpu/GPU_batch.h
@@ -0,0 +1,68 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2016 Blender Foundation.
+ * All rights reserved.
+ *
+ *
+ * Contributor(s): Mike Erwin
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/* Batched geometry rendering is powered by the Gawain library.
+ * This file contains any additions or modifications specific to Blender.
+ */
+
+#ifndef __GPU_BATCH_H__
+#define __GPU_BATCH_H__
+
+#include "../../../intern/gawain/gawain/gwn_batch.h"
+
+struct rctf;
+
+// TODO: CMake magic to do this:
+// #include "gawain/batch.h"
+
+#include "BLI_compiler_attrs.h"
+
+#include "GPU_shader.h"
+
+/* Extend GWN_batch_program_set to use Blender’s library of built-in shader programs. */
+
+/* gpu_batch.c */
+void GWN_batch_program_set_builtin(Gwn_Batch *batch, GPUBuiltinShader shader_id) ATTR_NONNULL(1);
+
+Gwn_Batch *GPU_batch_tris_from_poly_2d_encoded(
+ const uchar *polys_flat, uint polys_flat_len, const struct rctf *rect
+ ) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1);
+Gwn_Batch *GPU_batch_wire_from_poly_2d_encoded(
+ const uchar *polys_flat, uint polys_flat_len, const struct rctf *rect
+ ) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1);
+
+void gpu_batch_init(void);
+void gpu_batch_exit(void);
+
+/* gpu_batch_presets.c */
+/* Replacement for gluSphere */
+Gwn_Batch *GPU_batch_preset_sphere(int lod) ATTR_WARN_UNUSED_RESULT;
+Gwn_Batch *GPU_batch_preset_sphere_wire(int lod) ATTR_WARN_UNUSED_RESULT;
+
+void gpu_batch_presets_init(void);
+void gpu_batch_presets_exit(void);
+
+#endif /* __GPU_BATCH_H__ */
diff --git a/source/blender/gpu/GPU_buffers.h b/source/blender/gpu/GPU_buffers.h
index 6ffaa29ead6..0d8a7a45ee9 100644
--- a/source/blender/gpu/GPU_buffers.h
+++ b/source/blender/gpu/GPU_buffers.h
@@ -51,6 +51,7 @@ struct GPUVertPointLink;
struct GPUDrawObject;
struct GridCommonGPUBuffer;
struct PBVH;
+struct Gwn_Batch;
struct MVert;
typedef struct GPUBuffer {
@@ -266,11 +267,10 @@ void GPU_pbvh_grid_buffers_update(
void GPU_pbvh_buffers_draw(
GPU_PBVH_Buffers *buffers, DMSetMaterial setMaterial,
bool wireframe, bool fast);
+struct Gwn_Batch *GPU_pbvh_buffers_batch_get(GPU_PBVH_Buffers *buffers, bool fast);
-/* debug PBVH draw*/
-void GPU_pbvh_BB_draw(float min[3], float max[3], bool leaf);
-void GPU_pbvh_BB_draw_init(void);
-void GPU_pbvh_BB_draw_end(void);
+/* debug PBVH draw */
+void GPU_pbvh_BB_draw(float min[3], float max[3], bool leaf, unsigned int pos);
bool GPU_pbvh_buffers_diffuse_changed(GPU_PBVH_Buffers *buffers, struct GSet *bm_faces, bool show_diffuse_color);
bool GPU_pbvh_buffers_mask_changed(GPU_PBVH_Buffers *buffers, bool show_mask);
diff --git a/source/blender/gpu/GPU_debug.h b/source/blender/gpu/GPU_debug.h
index 61b2bc591ce..c7a99d33654 100644
--- a/source/blender/gpu/GPU_debug.h
+++ b/source/blender/gpu/GPU_debug.h
@@ -41,24 +41,6 @@ extern "C" {
/* prints something if debug mode is active only */
void GPU_print_error_debug(const char *str);
-/* replacement for gluErrorString */
-const char *gpuErrorString(GLenum err);
-
-/* prints current OpenGL state */
-void GPU_state_print(void);
-
-void GPU_assert_no_gl_errors(const char *file, int line, const char *str);
-
-# define GPU_ASSERT_NO_GL_ERRORS(str) GPU_assert_no_gl_errors(__FILE__, __LINE__, (str))
-
-# define GPU_CHECK_ERRORS_AROUND(glProcCall) \
- ( \
- GPU_ASSERT_NO_GL_ERRORS("Pre: " #glProcCall), \
- (glProcCall), \
- GPU_ASSERT_NO_GL_ERRORS("Post: " #glProcCall) \
- )
-
-
/* inserts a debug marker message for the debug context messaging system */
void GPU_string_marker(const char *str);
diff --git a/source/blender/gpu/GPU_draw.h b/source/blender/gpu/GPU_draw.h
index 90b65af87c8..e437b4e4f58 100644
--- a/source/blender/gpu/GPU_draw.h
+++ b/source/blender/gpu/GPU_draw.h
@@ -39,13 +39,16 @@ extern "C" {
struct ImBuf;
struct Image;
struct ImageUser;
-struct MTexPoly;
struct Object;
struct Scene;
+struct ViewLayer;
struct View3D;
struct RegionView3D;
struct SmokeModifierData;
struct DupliObject;
+struct EvaluationContext;
+
+#include "DNA_object_enums.h"
/* OpenGL drawing functions related to shading. These are also
* shared with the game engine, where there were previously
@@ -59,6 +62,13 @@ struct DupliObject;
void GPU_state_init(void);
+/* Programmable point size
+ * - shaders set their own point size when enabled
+ * - use glPointSize when disabled */
+
+void GPU_enable_program_point_size(void);
+void GPU_disable_program_point_size(void);
+
/* Material drawing
* - first the state is initialized by a particular object and
* it's materials
@@ -66,8 +76,10 @@ void GPU_state_init(void);
* GPU_object_material_bind returns 0 if drawing should be skipped
* - after drawing, the material must be disabled again */
-void GPU_begin_object_materials(struct View3D *v3d, struct RegionView3D *rv3d,
- struct Scene *scene, struct Object *ob, bool glsl, bool *do_alpha_after);
+void GPU_begin_object_materials(
+ struct View3D *v3d, struct RegionView3D *rv3d,
+ struct Scene *scene, struct ViewLayer *view_layer,
+ struct Object *ob, bool glsl, const eObjectMode object_mode, bool *do_alpha_after);
void GPU_end_object_materials(void);
bool GPU_object_materials_check(void);
@@ -84,29 +96,19 @@ bool GPU_material_use_matcaps_get(void);
void GPU_set_material_alpha_blend(int alphablend);
int GPU_get_material_alpha_blend(void);
-/* TexFace drawing
- * - this is mutually exclusive with material drawing, a mesh should
- * be drawn using one or the other
- * - passing NULL clears the state again */
-
-int GPU_set_tpage(struct MTexPoly *mtexpoly, int mipmap, int transp);
-void GPU_clear_tpage(bool force);
-
/* Lights
* - returns how many lights were enabled
* - this affects fixed functions materials and texface, not glsl */
int GPU_default_lights(void);
int GPU_scene_object_lights(
- struct Scene *scene, struct Object *ob,
- int lay, float viewmat[4][4], int ortho);
+ struct ViewLayer *view_layer, float viewmat[4][4], int ortho);
/* Text render
* - based on moving uv coordinates */
void GPU_render_text(
- struct MTexPoly *mtexpoly, int mode,
- const char *textstr, int textlen, unsigned int *col,
+ int mode, const char *textstr, int textlen, unsigned int *col,
const float *v_quad[4], const float *uv_quad[4],
int glattrib);
@@ -166,6 +168,17 @@ void GPU_select_index_get(int index, int *r_col);
int GPU_select_to_index(unsigned int col);
void GPU_select_to_index_array(unsigned int *col, const unsigned int size);
+typedef enum eGPUAttribMask {
+ GPU_DEPTH_BUFFER_BIT = (1 << 0),
+ GPU_ENABLE_BIT = (1 << 1),
+ GPU_SCISSOR_BIT = (1 << 2),
+ GPU_VIEWPORT_BIT = (1 << 3),
+ GPU_BLEND_BIT = (1 << 4),
+} eGPUAttribMask;
+
+void gpuPushAttrib(eGPUAttribMask mask);
+void gpuPopAttrib(void);
+
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/gpu/GPU_extensions.h b/source/blender/gpu/GPU_extensions.h
index 31ad8243c4b..d36b0ea15be 100644
--- a/source/blender/gpu/GPU_extensions.h
+++ b/source/blender/gpu/GPU_extensions.h
@@ -38,21 +38,16 @@ extern "C" {
/* GPU extensions support */
-void GPU_extensions_disable(void);
-
-bool GPU_legacy_support(void);
bool GPU_full_non_power_of_two_support(void);
-bool GPU_display_list_support(void);
bool GPU_bicubic_bump_support(void);
-bool GPU_geometry_shader_support(void);
-bool GPU_geometry_shader_support_via_extension(void);
-bool GPU_instanced_drawing_support(void);
int GPU_max_texture_size(void);
int GPU_max_textures(void);
float GPU_max_texture_anisotropy(void);
int GPU_max_color_texture_samples(void);
int GPU_max_cube_map_size(void);
+int GPU_max_ubo_binds(void);
+int GPU_max_ubo_size(void);
int GPU_color_depth(void);
void GPU_get_dfdy_factors(float fac[2]);
diff --git a/source/blender/gpu/GPU_framebuffer.h b/source/blender/gpu/GPU_framebuffer.h
index 2719b8fa6a8..c58d98c201e 100644
--- a/source/blender/gpu/GPU_framebuffer.h
+++ b/source/blender/gpu/GPU_framebuffer.h
@@ -50,8 +50,13 @@ struct GPUTexture;
void GPU_texture_bind_as_framebuffer(struct GPUTexture *tex);
GPUFrameBuffer *GPU_framebuffer_create(void);
-int GPU_framebuffer_texture_attach(GPUFrameBuffer *fb, struct GPUTexture *tex, int slot, char err_out[256]);
+bool GPU_framebuffer_texture_attach(GPUFrameBuffer *fb, struct GPUTexture *tex, int slot, int mip);
+bool GPU_framebuffer_texture_layer_attach(
+ GPUFrameBuffer *fb, struct GPUTexture *tex, int slot, int layer, int mip);
+bool GPU_framebuffer_texture_cubeface_attach(
+ GPUFrameBuffer *fb, struct GPUTexture *tex, int slot, int face, int mip);
void GPU_framebuffer_texture_detach(struct GPUTexture *tex);
+void GPU_framebuffer_bind(GPUFrameBuffer *fb);
void GPU_framebuffer_slots_bind(GPUFrameBuffer *fb, int slot);
void GPU_framebuffer_texture_unbind(GPUFrameBuffer *fb, struct GPUTexture *tex);
void GPU_framebuffer_free(GPUFrameBuffer *fb);
@@ -66,11 +71,19 @@ void GPU_framebuffer_blur(
GPUFrameBuffer *fb, struct GPUTexture *tex,
GPUFrameBuffer *blurfb, struct GPUTexture *blurtex);
+void GPU_framebuffer_blit(
+ GPUFrameBuffer *fb_read, int read_slot,
+ GPUFrameBuffer *fb_write, int write_slot, bool use_depth, bool use_stencil);
+
+void GPU_framebuffer_recursive_downsample(
+ GPUFrameBuffer *fb, struct GPUTexture *tex, int num_iter,
+ void (*callback)(void *userData, int level), void *userData);
+
/* GPU OffScreen
* - wrapper around framebuffer and texture for simple offscreen drawing
* - changes size if graphics card can't support it */
-GPUOffScreen *GPU_offscreen_create(int width, int height, int samples, char err_out[256]);
+GPUOffScreen *GPU_offscreen_create(int width, int height, int samples, bool high_bitdepth, char err_out[256]);
void GPU_offscreen_free(GPUOffScreen *ofs);
void GPU_offscreen_bind(GPUOffScreen *ofs, bool save);
void GPU_offscreen_unbind(GPUOffScreen *ofs, bool restore);
@@ -79,6 +92,10 @@ int GPU_offscreen_width(const GPUOffScreen *ofs);
int GPU_offscreen_height(const GPUOffScreen *ofs);
int GPU_offscreen_color_texture(const GPUOffScreen *ofs);
+void GPU_offscreen_viewport_data_get(
+ GPUOffScreen *ofs,
+ GPUFrameBuffer **r_fb, struct GPUTexture **r_color, struct GPUTexture **r_depth);
+
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/gpu/GPU_glew.h b/source/blender/gpu/GPU_glew.h
index 94217863fd6..afe1c9763ad 100644
--- a/source/blender/gpu/GPU_glew.h
+++ b/source/blender/gpu/GPU_glew.h
@@ -34,4 +34,8 @@
#include "glew-mx.h"
+#ifndef WITH_LEGACY_OPENGL
+#include "GPU_legacy_stubs.h"
+#endif
+
#endif /* __GPU_GLEW_H__ */
diff --git a/source/blender/gpu/GPU_immediate.h b/source/blender/gpu/GPU_immediate.h
new file mode 100644
index 00000000000..6206e973908
--- /dev/null
+++ b/source/blender/gpu/GPU_immediate.h
@@ -0,0 +1,58 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2016 Blender Foundation.
+ * All rights reserved.
+ *
+ *
+ * Contributor(s): Mike Erwin
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/* Immediate mode rendering is powered by the Gawain library.
+ * This file contains any additions or modifications specific to Blender.
+ */
+
+#ifndef __GPU_IMMEDIATE_H__
+#define __GPU_IMMEDIATE_H__
+
+#include "../../../intern/gawain/gawain/gwn_immediate.h"
+#include "../../../intern/gawain/gawain/gwn_imm_util.h"
+
+// TODO: CMake magic to do this:
+// #include "gawain/gwn_immediate.h"
+// #include "gawain/gwn_imm_util.h"
+
+#include "GPU_shader.h"
+
+/* Extend immBindProgram to use Blender’s library of built-in shader programs.
+ * Use immUnbindProgram() when done. */
+void immBindBuiltinProgram(GPUBuiltinShader shader_id);
+
+/*
+ * Extend immUniformColor to take Blender's themes
+ */
+void immUniformThemeColor(int color_id);
+void immUniformThemeColor3(int color_id);
+void immUniformThemeColorShade(int color_id, int offset);
+void immUniformThemeColorShadeAlpha(int color_id, int color_offset, int alpha_offset);
+void immUniformThemeColorBlendShade(int color_id1, int color_id2, float fac, int offset);
+void immUniformThemeColorBlend(int color_id1, int color_id2, float fac);
+void immThemeColorShadeAlpha(int colorid, int coloffset, int alphaoffset);
+
+#endif /* __GPU_IMMEDIATE_H__ */
diff --git a/source/blender/gpu/GPU_immediate_util.h b/source/blender/gpu/GPU_immediate_util.h
new file mode 100644
index 00000000000..c31d477ff5b
--- /dev/null
+++ b/source/blender/gpu/GPU_immediate_util.h
@@ -0,0 +1,64 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file GPU_immediate_util.h
+ * \ingroup gpu
+ *
+ * Utility drawing functions (rough equivalent to OpenGL's GLU)
+ */
+
+#ifndef __GPU_IMMEDIATE_UTIL_H__
+#define __GPU_IMMEDIATE_UTIL_H__
+
+void imm_cpack(uint x);
+
+void imm_draw_circle_wire_2d(uint shdr_pos, float x, float y, float radius, int nsegments);
+void imm_draw_circle_fill_2d(uint shdr_pos, float x, float y, float radius, int nsegments);
+
+void imm_draw_circle_wire_aspect_2d(uint shdr_pos, float x, float y, float radius_x, float radius_y, int nsegments);
+void imm_draw_circle_fill_aspect_2d(uint shdr_pos, float x, float y, float radius_x, float radius_y, int nsegments);
+
+/* use this version when Gwn_VertFormat has a vec3 position */
+void imm_draw_circle_wire_3d(uint pos, float x, float y, float radius, int nsegments);
+void imm_draw_circle_fill_3d(uint pos, float x, float y, float radius, int nsegments);
+
+void imm_draw_disk_partial_fill_2d(
+ uint pos, float x, float y,
+ float radius_inner, float radius_outer, int nsegments, float start, float sweep);
+
+void imm_draw_box_wire_2d(uint pos, float x1, float y1, float x2, float y2);
+void imm_draw_box_wire_3d(uint pos, float x1, float y1, float x2, float y2);
+
+void imm_draw_box_checker_2d(float x1, float y1, float x2, float y2);
+
+void imm_draw_cube_fill_3d(uint pos, const float co[3], const float aspect[3]);
+void imm_draw_cube_wire_3d(uint pos, const float co[3], const float aspect[3]);
+
+void imm_draw_cylinder_fill_normal_3d(
+ uint pos, uint nor, float base, float top, float height,
+ int slices, int stacks);
+void imm_draw_cylinder_wire_3d(
+ uint pos, float base, float top, float height,
+ int slices, int stacks);
+void imm_draw_cylinder_fill_3d(
+ uint pos, float base, float top, float height,
+ int slices, int stacks);
+
+#endif /* __GPU_IMMEDIATE_UTIL_H__ */
diff --git a/source/blender/gpu/GPU_lamp.h b/source/blender/gpu/GPU_lamp.h
new file mode 100644
index 00000000000..87350f1ceb4
--- /dev/null
+++ b/source/blender/gpu/GPU_lamp.h
@@ -0,0 +1,77 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2005 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Brecht Van Lommel, Clément Foucault.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file GPU_lamp.h
+ * \ingroup gpu
+ */
+
+#ifndef __GPU_LAMP_H__
+#define __GPU_LAMP_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct Scene;
+struct Object;
+struct RenderEngineType;
+
+typedef struct GPULamp GPULamp;
+
+#define MAX_LAMP_DATA 2
+
+typedef struct LampEngineData {
+ void *storage[MAX_LAMP_DATA];
+} LampEngineData;
+
+LampEngineData *GPU_lamp_engine_data_get(struct Scene *scene, struct Object *ob, struct Object *par, struct RenderEngineType *re);
+
+GPULamp *GPU_lamp_from_blender(struct Scene *scene, struct Object *ob, struct Object *par);
+void GPU_lamp_free(struct Object *ob);
+void GPU_lamp_engine_data_free(LampEngineData *led);
+
+bool GPU_lamp_visible(GPULamp *lamp, struct Material *ma);
+bool GPU_lamp_has_shadow_buffer(GPULamp *lamp);
+void GPU_lamp_update_buffer_mats(GPULamp *lamp);
+void GPU_lamp_shadow_buffer_bind(GPULamp *lamp, float viewmat[4][4], int *winsize, float winmat[4][4]);
+void GPU_lamp_shadow_buffer_unbind(GPULamp *lamp);
+int GPU_lamp_shadow_buffer_type(GPULamp *lamp);
+int GPU_lamp_shadow_bind_code(GPULamp *lamp);
+float *GPU_lamp_dynpersmat(GPULamp *lamp);
+
+void GPU_lamp_update(GPULamp *lamp, int lay, int hide, float obmat[4][4]);
+void GPU_lamp_update_colors(GPULamp *lamp, float r, float g, float b, float energy);
+void GPU_lamp_update_distance(GPULamp *lamp, float distance, float att1, float att2,
+ float coeff_const, float coeff_lin, float coeff_quad);
+void GPU_lamp_update_spot(GPULamp *lamp, float spotsize, float spotblend);
+int GPU_lamp_shadow_layer(GPULamp *lamp);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __GPU_LAMP_H__ */
diff --git a/source/blender/gpu/GPU_legacy_stubs.h b/source/blender/gpu/GPU_legacy_stubs.h
new file mode 100644
index 00000000000..a195eac9eec
--- /dev/null
+++ b/source/blender/gpu/GPU_legacy_stubs.h
@@ -0,0 +1,457 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2017 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Blender Foundation, Dalai Felinto.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file GPU_legacy_stubs.h
+ * \ingroup gpu
+ *
+ * This is to mark the transition to OpenGL core profile
+ * The idea is to allow Blender 2.8 to be built with OpenGL 3.3 even if it means breaking things
+ *
+ * This file should be removed in the future
+ */
+
+#ifndef __GPU_LEGACY_STUBS_H__
+#define __GPU_LEGACY_STUBS_H__
+
+#if defined(__GNUC__)
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wunused-parameter"
+# pragma GCC diagnostic ignored "-Wunused-function"
+#endif
+
+#include <stdlib.h> /* for abort(). */
+
+#include "BLI_utildefines.h"
+
+/**
+ * Empty function, use for breakpoint when a depreacated
+ * OpenGL function is called.
+ */
+static void gl_deprecated(void)
+{
+ BLI_assert(true);
+}
+
+#define _GL_BOOL BLI_INLINE GLboolean
+#define _GL_BOOL_RET { \
+ gl_deprecated(); \
+ return false; \
+}
+
+#define _GL_ENUM BLI_INLINE GLenum
+#define _GL_ENUM_RET { \
+ gl_deprecated(); \
+ return 0; \
+}
+
+#define _GL_INT BLI_INLINE GLint
+#define _GL_INT_RET { \
+ gl_deprecated(); \
+ return 0; \
+}
+
+
+#define _GL_UINT BLI_INLINE GLuint
+#define _GL_UINT_RET { \
+ gl_deprecated(); \
+ return 0; \
+}
+
+#define _GL_VOID BLI_INLINE void
+#define _GL_VOID_RET { \
+ gl_deprecated(); \
+}
+
+static bool disable_enable_check(GLenum cap)
+{
+ const bool is_deprecated = \
+ ELEM(
+ cap,
+ GL_ALPHA_TEST,
+ GL_LINE_STIPPLE,
+ GL_POINT_SPRITE,
+ GL_TEXTURE_1D,
+ GL_TEXTURE_2D,
+ GL_TEXTURE_GEN_S,
+ GL_TEXTURE_GEN_T,
+ -1
+ );
+
+ if (is_deprecated) {
+ gl_deprecated();
+ }
+
+ return is_deprecated;
+}
+
+_GL_VOID USE_CAREFULLY_glDisable (GLenum cap)
+{
+ if (!disable_enable_check(cap)) {
+ glDisable(cap);
+ }
+}
+#define glDisable USE_CAREFULLY_glDisable
+
+_GL_VOID USE_CAREFULLY_glEnable (GLenum cap)
+{
+ if (!disable_enable_check(cap)) {
+ glEnable(cap);
+ }
+}
+#define glEnable USE_CAREFULLY_glEnable
+
+/**
+ * Hand written cases
+ */
+
+_GL_VOID DO_NOT_USE_glClientActiveTexture (GLenum texture) _GL_VOID_RET
+
+
+/**
+ * List automatically generated from `gl-deprecated.h` and `glew.h`
+ */
+
+/**
+ * ENUM values
+ */
+#define DO_NOT_USE_GL_CURRENT_FOG_COORDINATE 0
+#define DO_NOT_USE_GL_FOG_COORDINATE 0
+#define DO_NOT_USE_GL_FOG_COORDINATE_ARRAY 0
+#define DO_NOT_USE_GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0
+#define DO_NOT_USE_GL_FOG_COORDINATE_ARRAY_POINTER 0
+#define DO_NOT_USE_GL_FOG_COORDINATE_ARRAY_STRIDE 0
+#define DO_NOT_USE_GL_FOG_COORDINATE_ARRAY_TYPE 0
+#define DO_NOT_USE_GL_FOG_COORDINATE_SOURCE 0
+#define DO_NOT_USE_GL_POINT_SIZE_GRANULARITY 0
+#define DO_NOT_USE_GL_POINT_SIZE_RANGE 0
+#define DO_NOT_USE_GL_SOURCE0_ALPHA 0
+#define DO_NOT_USE_GL_SOURCE0_RGB 0
+#define DO_NOT_USE_GL_SOURCE1_ALPHA 0
+#define DO_NOT_USE_GL_SOURCE1_RGB 0
+#define DO_NOT_USE_GL_SOURCE2_ALPHA 0
+#define DO_NOT_USE_GL_SOURCE2_RGB 0
+
+/**
+ * Functions
+ */
+_GL_VOID DO_NOT_USE_glAccum (GLenum op, GLfloat value) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glAlphaFunc (GLenum func, GLclampf ref) _GL_VOID_RET
+_GL_BOOL DO_NOT_USE_glAreTexturesResident (GLsizei n, const GLuint *textures, GLboolean *residences) _GL_BOOL_RET
+_GL_VOID DO_NOT_USE_glArrayElement (GLint i) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glBegin (GLenum mode) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glBitmap (GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glCallList (GLuint list) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glCallLists (GLsizei n, GLenum type, const void *lists) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glClearAccum (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glClearIndex (GLfloat c) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glClipPlane (GLenum plane, const GLdouble *equation) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glColor3b (GLbyte red, GLbyte green, GLbyte blue) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glColor3bv (const GLbyte *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glColor3d (GLdouble red, GLdouble green, GLdouble blue) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glColor3dv (const GLdouble *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glColor3f (GLfloat red, GLfloat green, GLfloat blue) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glColor3fv (const GLfloat *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glColor3i (GLint red, GLint green, GLint blue) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glColor3iv (const GLint *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glColor3s (GLshort red, GLshort green, GLshort blue) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glColor3sv (const GLshort *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glColor3ub (GLubyte red, GLubyte green, GLubyte blue) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glColor3ubv (const GLubyte *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glColor3ui (GLuint red, GLuint green, GLuint blue) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glColor3uiv (const GLuint *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glColor3us (GLushort red, GLushort green, GLushort blue) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glColor3usv (const GLushort *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glColor4b (GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glColor4bv (const GLbyte *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glColor4d (GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glColor4dv (const GLdouble *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glColor4f (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glColor4fv (const GLfloat *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glColor4i (GLint red, GLint green, GLint blue, GLint alpha) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glColor4iv (const GLint *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glColor4s (GLshort red, GLshort green, GLshort blue, GLshort alpha) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glColor4sv (const GLshort *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glColor4ub (GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glColor4ubv (const GLubyte *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glColor4ui (GLuint red, GLuint green, GLuint blue, GLuint alpha) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glColor4uiv (const GLuint *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glColor4us (GLushort red, GLushort green, GLushort blue, GLushort alpha) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glColor4usv (const GLushort *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glColorMaterial (GLenum face, GLenum mode) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glColorPointer (GLint size, GLenum type, GLsizei stride, const void *pointer) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glCopyPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum type) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glDeleteLists (GLuint list, GLsizei range) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glDisableClientState (GLenum array) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glDrawPixels (GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glEdgeFlag (GLboolean flag) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glEdgeFlagPointer (GLsizei stride, const void *pointer) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glEdgeFlagv (const GLboolean *flag) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glEnableClientState (GLenum array) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glEnd (void) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glEndList (void) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glEvalCoord1d (GLdouble u) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glEvalCoord1dv (const GLdouble *u) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glEvalCoord1f (GLfloat u) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glEvalCoord1fv (const GLfloat *u) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glEvalCoord2d (GLdouble u, GLdouble v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glEvalCoord2dv (const GLdouble *u) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glEvalCoord2f (GLfloat u, GLfloat v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glEvalCoord2fv (const GLfloat *u) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glEvalMesh1 (GLenum mode, GLint i1, GLint i2) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glEvalMesh2 (GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glEvalPoint1 (GLint i) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glEvalPoint2 (GLint i, GLint j) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glFeedbackBuffer (GLsizei size, GLenum type, GLfloat *buffer) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glFogf (GLenum pname, GLfloat param) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glFogfv (GLenum pname, const GLfloat *params) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glFogi (GLenum pname, GLint param) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glFogiv (GLenum pname, const GLint *params) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glFrustum (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) _GL_VOID_RET
+_GL_UINT DO_NOT_USE_glGenLists (GLsizei range) _GL_UINT_RET
+_GL_VOID DO_NOT_USE_glGetClipPlane (GLenum plane, GLdouble *equation) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glGetLightfv (GLenum light, GLenum pname, GLfloat *params) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glGetLightiv (GLenum light, GLenum pname, GLint *params) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glGetMapdv (GLenum target, GLenum query, GLdouble *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glGetMapfv (GLenum target, GLenum query, GLfloat *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glGetMapiv (GLenum target, GLenum query, GLint *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glGetMaterialfv (GLenum face, GLenum pname, GLfloat *params) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glGetMaterialiv (GLenum face, GLenum pname, GLint *params) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glGetPixelMapfv (GLenum map, GLfloat *values) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glGetPixelMapuiv (GLenum map, GLuint *values) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glGetPixelMapusv (GLenum map, GLushort *values) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glGetPolygonStipple (GLubyte *mask) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glGetTexEnvfv (GLenum target, GLenum pname, GLfloat *params) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glGetTexEnviv (GLenum target, GLenum pname, GLint *params) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glGetTexGendv (GLenum coord, GLenum pname, GLdouble *params) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glGetTexGenfv (GLenum coord, GLenum pname, GLfloat *params) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glGetTexGeniv (GLenum coord, GLenum pname, GLint *params) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glIndexMask (GLuint mask) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glIndexPointer (GLenum type, GLsizei stride, const void *pointer) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glIndexd (GLdouble c) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glIndexdv (const GLdouble *c) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glIndexf (GLfloat c) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glIndexfv (const GLfloat *c) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glIndexi (GLint c) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glIndexiv (const GLint *c) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glIndexs (GLshort c) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glIndexsv (const GLshort *c) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glIndexub (GLubyte c) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glIndexubv (const GLubyte *c) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glInitNames (void) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glInterleavedArrays (GLenum format, GLsizei stride, const void *pointer) _GL_VOID_RET
+_GL_BOOL DO_NOT_USE_glIsList (GLuint list) _GL_BOOL_RET
+_GL_VOID DO_NOT_USE_glLightModelf (GLenum pname, GLfloat param) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glLightModelfv (GLenum pname, const GLfloat *params) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glLightModeli (GLenum pname, GLint param) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glLightModeliv (GLenum pname, const GLint *params) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glLightf (GLenum light, GLenum pname, GLfloat param) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glLightfv (GLenum light, GLenum pname, const GLfloat *params) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glLighti (GLenum light, GLenum pname, GLint param) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glLightiv (GLenum light, GLenum pname, const GLint *params) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glLineStipple (GLint factor, GLushort pattern) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glListBase (GLuint base) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glLoadIdentity (void) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glLoadMatrixd (const GLdouble *m) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glLoadMatrixf (const GLfloat *m) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glLoadName (GLuint name) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glMap1d (GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glMap1f (GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glMap2d (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glMap2f (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glMapGrid1d (GLint un, GLdouble u1, GLdouble u2) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glMapGrid1f (GLint un, GLfloat u1, GLfloat u2) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glMapGrid2d (GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glMapGrid2f (GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glMaterialf (GLenum face, GLenum pname, GLfloat param) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glMaterialfv (GLenum face, GLenum pname, const GLfloat *params) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glMateriali (GLenum face, GLenum pname, GLint param) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glMaterialiv (GLenum face, GLenum pname, const GLint *params) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glMatrixMode (GLenum mode) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glMultMatrixd (const GLdouble *m) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glMultMatrixf (const GLfloat *m) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glNewList (GLuint list, GLenum mode) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glNormal3b (GLbyte nx, GLbyte ny, GLbyte nz) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glNormal3bv (const GLbyte *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glNormal3d (GLdouble nx, GLdouble ny, GLdouble nz) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glNormal3dv (const GLdouble *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glNormal3f (GLfloat nx, GLfloat ny, GLfloat nz) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glNormal3fv (const GLfloat *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glNormal3i (GLint nx, GLint ny, GLint nz) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glNormal3iv (const GLint *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glNormal3s (GLshort nx, GLshort ny, GLshort nz) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glNormal3sv (const GLshort *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glNormalPointer (GLenum type, GLsizei stride, const void *pointer) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glOrtho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glPassThrough (GLfloat token) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glPixelMapfv (GLenum map, GLsizei mapsize, const GLfloat *values) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glPixelMapuiv (GLenum map, GLsizei mapsize, const GLuint *values) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glPixelMapusv (GLenum map, GLsizei mapsize, const GLushort *values) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glPixelTransferf (GLenum pname, GLfloat param) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glPixelTransferi (GLenum pname, GLint param) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glPixelZoom (GLfloat xfactor, GLfloat yfactor) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glPolygonStipple (const GLubyte *mask) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glPopAttrib (void) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glPopClientAttrib (void) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glPopMatrix (void) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glPopName (void) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glPrioritizeTextures (GLsizei n, const GLuint *textures, const GLclampf *priorities) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glPushAttrib (GLbitfield mask) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glPushClientAttrib (GLbitfield mask) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glPushMatrix (void) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glPushName (GLuint name) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glRasterPos2d (GLdouble x, GLdouble y) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glRasterPos2dv (const GLdouble *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glRasterPos2f (GLfloat x, GLfloat y) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glRasterPos2fv (const GLfloat *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glRasterPos2i (GLint x, GLint y) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glRasterPos2iv (const GLint *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glRasterPos2s (GLshort x, GLshort y) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glRasterPos2sv (const GLshort *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glRasterPos3d (GLdouble x, GLdouble y, GLdouble z) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glRasterPos3dv (const GLdouble *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glRasterPos3f (GLfloat x, GLfloat y, GLfloat z) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glRasterPos3fv (const GLfloat *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glRasterPos3i (GLint x, GLint y, GLint z) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glRasterPos3iv (const GLint *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glRasterPos3s (GLshort x, GLshort y, GLshort z) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glRasterPos3sv (const GLshort *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glRasterPos4d (GLdouble x, GLdouble y, GLdouble z, GLdouble w) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glRasterPos4dv (const GLdouble *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glRasterPos4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glRasterPos4fv (const GLfloat *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glRasterPos4i (GLint x, GLint y, GLint z, GLint w) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glRasterPos4iv (const GLint *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glRasterPos4s (GLshort x, GLshort y, GLshort z, GLshort w) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glRasterPos4sv (const GLshort *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glRectd (GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glRectdv (const GLdouble *v1, const GLdouble *v2) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glRectf (GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glRectfv (const GLfloat *v1, const GLfloat *v2) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glRecti (GLint x1, GLint y1, GLint x2, GLint y2) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glRectiv (const GLint *v1, const GLint *v2) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glRects (GLshort x1, GLshort y1, GLshort x2, GLshort y2) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glRectsv (const GLshort *v1, const GLshort *v2) _GL_VOID_RET
+_GL_INT DO_NOT_USE_glRenderMode (GLenum mode) _GL_INT_RET
+_GL_VOID DO_NOT_USE_glRotated (GLdouble angle, GLdouble x, GLdouble y, GLdouble z) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glRotatef (GLfloat angle, GLfloat x, GLfloat y, GLfloat z) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glScaled (GLdouble x, GLdouble y, GLdouble z) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glScalef (GLfloat x, GLfloat y, GLfloat z) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glSelectBuffer (GLsizei size, GLuint *buffer) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glShadeModel (GLenum mode) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexCoord1d (GLdouble s) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexCoord1dv (const GLdouble *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexCoord1f (GLfloat s) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexCoord1fv (const GLfloat *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexCoord1i (GLint s) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexCoord1iv (const GLint *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexCoord1s (GLshort s) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexCoord1sv (const GLshort *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexCoord2d (GLdouble s, GLdouble t) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexCoord2dv (const GLdouble *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexCoord2f (GLfloat s, GLfloat t) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexCoord2fv (const GLfloat *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexCoord2i (GLint s, GLint t) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexCoord2iv (const GLint *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexCoord2s (GLshort s, GLshort t) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexCoord2sv (const GLshort *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexCoord3d (GLdouble s, GLdouble t, GLdouble r) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexCoord3dv (const GLdouble *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexCoord3f (GLfloat s, GLfloat t, GLfloat r) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexCoord3fv (const GLfloat *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexCoord3i (GLint s, GLint t, GLint r) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexCoord3iv (const GLint *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexCoord3s (GLshort s, GLshort t, GLshort r) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexCoord3sv (const GLshort *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexCoord4d (GLdouble s, GLdouble t, GLdouble r, GLdouble q) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexCoord4dv (const GLdouble *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexCoord4f (GLfloat s, GLfloat t, GLfloat r, GLfloat q) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexCoord4fv (const GLfloat *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexCoord4i (GLint s, GLint t, GLint r, GLint q) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexCoord4iv (const GLint *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexCoord4s (GLshort s, GLshort t, GLshort r, GLshort q) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexCoord4sv (const GLshort *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexCoordPointer (GLint size, GLenum type, GLsizei stride, const void *pointer) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexEnvf (GLenum target, GLenum pname, GLfloat param) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexEnvfv (GLenum target, GLenum pname, const GLfloat *params) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexEnvi (GLenum target, GLenum pname, GLint param) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexEnviv (GLenum target, GLenum pname, const GLint *params) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexGend (GLenum coord, GLenum pname, GLdouble param) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexGendv (GLenum coord, GLenum pname, const GLdouble *params) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexGenf (GLenum coord, GLenum pname, GLfloat param) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexGenfv (GLenum coord, GLenum pname, const GLfloat *params) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexGeni (GLenum coord, GLenum pname, GLint param) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTexGeniv (GLenum coord, GLenum pname, const GLint *params) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTranslated (GLdouble x, GLdouble y, GLdouble z) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glTranslatef (GLfloat x, GLfloat y, GLfloat z) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glVertex2d (GLdouble x, GLdouble y) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glVertex2dv (const GLdouble *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glVertex2f (GLfloat x, GLfloat y) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glVertex2fv (const GLfloat *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glVertex2i (GLint x, GLint y) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glVertex2iv (const GLint *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glVertex2s (GLshort x, GLshort y) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glVertex2sv (const GLshort *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glVertex3d (GLdouble x, GLdouble y, GLdouble z) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glVertex3dv (const GLdouble *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glVertex3f (GLfloat x, GLfloat y, GLfloat z) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glVertex3fv (const GLfloat *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glVertex3i (GLint x, GLint y, GLint z) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glVertex3iv (const GLint *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glVertex3s (GLshort x, GLshort y, GLshort z) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glVertex3sv (const GLshort *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glVertex4d (GLdouble x, GLdouble y, GLdouble z, GLdouble w) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glVertex4dv (const GLdouble *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glVertex4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glVertex4fv (const GLfloat *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glVertex4i (GLint x, GLint y, GLint z, GLint w) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glVertex4iv (const GLint *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glVertex4s (GLshort x, GLshort y, GLshort z, GLshort w) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glVertex4sv (const GLshort *v) _GL_VOID_RET
+_GL_VOID DO_NOT_USE_glVertexPointer (GLint size, GLenum type, GLsizei stride, const void *pointer) _GL_VOID_RET
+
+/**
+ * End of automatically generated list
+ */
+
+
+
+#undef _GL_BOOL
+#undef _GL_BOOL_RET
+#undef _GL_ENUM
+#undef _GL_ENUM_RET
+#undef _GL_INT
+#undef _GL_INT_RET
+#undef _GL_UINT
+#undef _GL_UINT_RET
+#undef _GL_VOID
+#undef _GL_VOID_RET
+
+#if defined(__GNUC__)
+# pragma GCC diagnostic pop
+#endif
+
+#endif /* __GPU_LEGACY_STUBS_H__ */
diff --git a/source/blender/gpu/GPU_material.h b/source/blender/gpu/GPU_material.h
index dbfcd4d1ea4..698f3ada2a3 100644
--- a/source/blender/gpu/GPU_material.h
+++ b/source/blender/gpu/GPU_material.h
@@ -43,30 +43,33 @@ extern "C" {
struct Image;
struct ImageUser;
+struct ListBase;
struct Material;
struct Object;
-struct Image;
struct Scene;
-struct SceneRenderLayer;
struct GPUVertexAttribs;
struct GPUNode;
struct GPUNodeLink;
struct GPUNodeStack;
struct GPUMaterial;
struct GPUTexture;
+struct GPUUniformBuffer;
struct GPULamp;
struct PreviewImage;
struct World;
+struct bNode;
+struct bNodeTree;
typedef struct GPUNode GPUNode;
typedef struct GPUNodeLink GPUNodeLink;
typedef struct GPUMaterial GPUMaterial;
-typedef struct GPULamp GPULamp;
+
typedef struct GPUParticleInfo GPUParticleInfo;
/* Functions to create GPU Materials nodes */
typedef enum GPUType {
+ /* Keep in sync with GPU_DATATYPE_STR */
/* The value indicates the number of elements in each type */
GPU_NONE = 0,
GPU_FLOAT = 1,
@@ -76,9 +79,16 @@ typedef enum GPUType {
GPU_MAT3 = 9,
GPU_MAT4 = 16,
+ /* Values not in GPU_DATATYPE_STR */
GPU_TEX2D = 1002,
- GPU_SHADOW2D = 1003,
- GPU_TEXCUBE = 1004,
+ GPU_TEX3D = 1003,
+ GPU_SHADOW2D = 1004,
+ GPU_TEXCUBE = 1005,
+
+ /* GLSL Struct types */
+ GPU_CLOSURE = 1006,
+
+ /* Opengl Attributes */
GPU_ATTRIB = 3001
} GPUType;
@@ -98,7 +108,9 @@ typedef enum GPUBuiltin {
GPU_PARTICLE_ANG_VELOCITY = (1 << 12),
GPU_LOC_TO_VIEW_MATRIX = (1 << 13),
GPU_INVERSE_LOC_TO_VIEW_MATRIX = (1 << 14),
- GPU_OBJECT_INFO = (1 << 15)
+ GPU_OBJECT_INFO = (1 << 15),
+ GPU_VOLUME_DENSITY = (1 << 16),
+ GPU_VOLUME_FLAME = (1 << 17)
} GPUBuiltin;
typedef enum GPUOpenGLBuiltin {
@@ -141,6 +153,7 @@ typedef struct GPUNodeStack {
#define GPU_DYNAMIC_GROUP_MIST 0x00050000
#define GPU_DYNAMIC_GROUP_WORLD 0x00060000
#define GPU_DYNAMIC_GROUP_MAT 0x00070000
+#define GPU_DYNAMIC_UBO 0x00080000
typedef enum GPUDynamicType {
@@ -200,6 +213,7 @@ typedef enum GPUDynamicType {
GPUNodeLink *GPU_attribute(CustomDataType type, const char *name);
GPUNodeLink *GPU_uniform(float *num);
GPUNodeLink *GPU_dynamic_uniform(float *num, GPUDynamicType dynamictype, void *data);
+GPUNodeLink *GPU_uniform_buffer(float *num, GPUType gputype);
GPUNodeLink *GPU_image(struct Image *ima, struct ImageUser *iuser, bool is_data);
GPUNodeLink *GPU_cube_map(struct Image *ima, struct ImageUser *iuser, bool is_data);
GPUNodeLink *GPU_image_preview(struct PreviewImage *prv);
@@ -210,26 +224,36 @@ GPUNodeLink *GPU_opengl_builtin(GPUOpenGLBuiltin builtin);
void GPU_node_link_set_type(GPUNodeLink *link, GPUType type);
bool GPU_link(GPUMaterial *mat, const char *name, ...);
-bool GPU_stack_link(GPUMaterial *mat, const char *name, GPUNodeStack *in, GPUNodeStack *out, ...);
+bool GPU_stack_link(GPUMaterial *mat, struct bNode *node, const char *name, GPUNodeStack *in, GPUNodeStack *out, ...);
+GPUNodeLink *GPU_uniformbuffer_link_out(
+ struct GPUMaterial *mat, struct bNode *node,
+ struct GPUNodeStack *stack, const int index);
void GPU_material_output_link(GPUMaterial *material, GPUNodeLink *link);
void GPU_material_enable_alpha(GPUMaterial *material);
GPUBuiltin GPU_get_material_builtins(GPUMaterial *material);
GPUBlendMode GPU_material_alpha_blend(GPUMaterial *material, float obcol[4]);
+void GPU_material_sss_profile_create(GPUMaterial *material, float *radii, short *falloff_type, float *sharpness);
+struct GPUUniformBuffer *GPU_material_sss_profile_get(
+ GPUMaterial *material, int sample_ct, struct GPUTexture **tex_profile);
+
/* High level functions to create and use GPU materials */
GPUMaterial *GPU_material_world(struct Scene *scene, struct World *wo);
-
+GPUMaterial *GPU_material_from_nodetree_find(
+ struct ListBase *gpumaterials, const void *engine_type, int options);
+GPUMaterial *GPU_material_from_nodetree(
+ struct Scene *scene, struct bNodeTree *ntree, struct ListBase *gpumaterials, const void *engine_type, int options,
+ const char *vert_code, const char *geom_code, const char *frag_lib, const char *defines);
GPUMaterial *GPU_material_from_blender(struct Scene *scene, struct Material *ma, bool use_opensubdiv);
GPUMaterial *GPU_material_matcap(struct Scene *scene, struct Material *ma, bool use_opensubdiv);
void GPU_material_free(struct ListBase *gpumaterial);
void GPU_materials_free(void);
-bool GPU_lamp_visible(GPULamp *lamp, struct SceneRenderLayer *srl, struct Material *ma);
void GPU_material_bind(
GPUMaterial *material, int oblay, int viewlay, double time, int mipmap,
- float viewmat[4][4], float viewinv[4][4], float cameraborder[4], bool scenelock);
+ float viewmat[4][4], float viewinv[4][4], float cameraborder[4]);
void GPU_material_bind_uniforms(
GPUMaterial *material, float obmat[4][4], float viewmat[4][4], float obcol[4],
float autobumpscale, GPUParticleInfo *pi, float object_info[3]);
@@ -237,6 +261,11 @@ void GPU_material_unbind(GPUMaterial *material);
bool GPU_material_bound(GPUMaterial *material);
struct Scene *GPU_material_scene(GPUMaterial *material);
GPUMatType GPU_Material_get_type(GPUMaterial *material);
+struct GPUPass *GPU_material_get_pass(GPUMaterial *material);
+
+struct GPUUniformBuffer *GPU_material_get_uniform_buffer(GPUMaterial *material);
+void GPU_material_create_uniform_buffer(GPUMaterial *material, struct ListBase *inputs);
+void GPU_material_uniform_buffer_tag_dirty(struct ListBase *gpumaterials);
void GPU_material_vertex_attributes(GPUMaterial *material,
struct GPUVertexAttribs *attrib);
@@ -244,6 +273,8 @@ void GPU_material_vertex_attributes(GPUMaterial *material,
bool GPU_material_do_color_management(GPUMaterial *mat);
bool GPU_material_use_new_shading_nodes(GPUMaterial *mat);
bool GPU_material_use_world_space_shading(GPUMaterial *mat);
+bool GPU_material_use_domain_surface(GPUMaterial *mat);
+bool GPU_material_use_domain_volume(GPUMaterial *mat);
/* Exported shading */
@@ -312,26 +343,8 @@ GPUShaderExport *GPU_shader_export(struct Scene *scene, struct Material *ma);
void GPU_free_shader_export(GPUShaderExport *shader);
/* Lamps */
-
-GPULamp *GPU_lamp_from_blender(struct Scene *scene, struct Object *ob, struct Object *par);
-void GPU_lamp_free(struct Object *ob);
-
-bool GPU_lamp_has_shadow_buffer(GPULamp *lamp);
-void GPU_lamp_update_buffer_mats(GPULamp *lamp);
-void GPU_lamp_shadow_buffer_bind(GPULamp *lamp, float viewmat[4][4], int *winsize, float winmat[4][4]);
-void GPU_lamp_shadow_buffer_unbind(GPULamp *lamp);
-int GPU_lamp_shadow_buffer_type(GPULamp *lamp);
-int GPU_lamp_shadow_bind_code(GPULamp *lamp);
-float *GPU_lamp_dynpersmat(GPULamp *lamp);
-
-void GPU_lamp_update(GPULamp *lamp, int lay, int hide, float obmat[4][4]);
-void GPU_lamp_update_colors(GPULamp *lamp, float r, float g, float b, float energy);
-void GPU_lamp_update_distance(GPULamp *lamp, float distance, float att1, float att2,
- float coeff_const, float coeff_lin, float coeff_quad);
-void GPU_lamp_update_spot(GPULamp *lamp, float spotsize, float spotblend);
-int GPU_lamp_shadow_layer(GPULamp *lamp);
GPUNodeLink *GPU_lamp_get_data(
- GPUMaterial *mat, GPULamp *lamp,
+ GPUMaterial *mat, struct GPULamp *lamp,
GPUNodeLink **r_col, GPUNodeLink **r_lv, GPUNodeLink **r_dist, GPUNodeLink **r_shadow, GPUNodeLink **r_energy);
/* World */
diff --git a/source/blender/gpu/GPU_matrix.h b/source/blender/gpu/GPU_matrix.h
new file mode 100644
index 00000000000..f22c0cd5c4d
--- /dev/null
+++ b/source/blender/gpu/GPU_matrix.h
@@ -0,0 +1,190 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2012 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Alexandr Kuznetsov, Jason Wilkins, Mike Erwin
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file source/blender/gpu/GPU_matrix.h
+ * \ingroup gpu
+ */
+
+#ifndef __GPU_MATRIX_H__
+#define __GPU_MATRIX_H__
+
+#include "BLI_sys_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct Gwn_ShaderInterface;
+
+void gpuMatrixReset(void); /* to Identity transform & empty stack */
+
+/* ModelView Matrix (2D or 3D) */
+
+void gpuPushMatrix(void); /* TODO: PushCopy vs PushIdentity? */
+void gpuPopMatrix(void);
+
+void gpuLoadIdentity(void);
+
+void gpuScaleUniform(float factor);
+
+
+/* 3D ModelView Matrix */
+
+void gpuLoadMatrix(const float m[4][4]);
+void gpuMultMatrix(const float m[4][4]);
+
+void gpuTranslate3f(float x, float y, float z);
+void gpuTranslate3fv(const float vec[3]);
+void gpuScale3f(float x, float y, float z);
+void gpuScale3fv(const float vec[3]);
+void gpuRotate3f(float deg, float x, float y, float z); /* axis of rotation should be a unit vector */
+void gpuRotate3fv(float deg, const float axis[3]); /* axis of rotation should be a unit vector */
+void gpuRotateAxis(float deg, char axis); /* TODO: enum for axis? */
+
+void gpuLookAt(float eyeX, float eyeY, float eyeZ, float centerX, float centerY, float centerZ, float upX, float upY, float upZ);
+/* TODO: variant that takes eye[3], center[3], up[3] */
+
+
+/* 2D ModelView Matrix */
+
+void gpuTranslate2f(float x, float y);
+void gpuTranslate2fv(const float vec[2]);
+void gpuScale2f(float x, float y);
+void gpuScale2fv(const float vec[2]);
+void gpuRotate2D(float deg);
+
+/* Projection Matrix (2D or 3D) */
+
+void gpuPushProjectionMatrix(void);
+void gpuPopProjectionMatrix(void);
+
+/* 3D Projection Matrix */
+
+void gpuLoadIdentityProjectionMatrix(void);
+void gpuLoadProjectionMatrix(const float m[4][4]);
+
+void gpuOrtho(float left, float right, float bottom, float top, float near, float far);
+void gpuFrustum(float left, float right, float bottom, float top, float near, float far);
+void gpuPerspective(float fovy, float aspect, float near, float far);
+
+/* 3D Projection between Window and World Space */
+
+void gpuProject(const float world[3], const float model[4][4], const float proj[4][4], const int view[4], float win[3]);
+bool gpuUnProject(const float win[3], const float model[4][4], const float proj[4][4], const int view[4], float world[3]);
+
+/* 2D Projection Matrix */
+
+void gpuOrtho2D(float left, float right, float bottom, float top);
+
+
+/* functions to get matrix values */
+const float (*gpuGetModelViewMatrix(float m[4][4]))[4];
+const float (*gpuGetProjectionMatrix(float m[4][4]))[4];
+const float (*gpuGetModelViewProjectionMatrix(float m[4][4]))[4];
+
+const float (*gpuGetNormalMatrix(float m[3][3]))[3];
+const float (*gpuGetNormalMatrixInverse(float m[3][3]))[3];
+
+
+/* set uniform values for currently bound shader */
+void gpuBindMatrices(const struct Gwn_ShaderInterface *);
+bool gpuMatricesDirty(void); /* since last bind */
+
+
+/* Python API needs to be able to inspect the stack so errors raise exceptions instead of crashing. */
+#ifdef USE_GPU_PY_MATRIX_API
+int GPU_matrix_stack_level_get_model_view(void);
+int GPU_matrix_stack_level_get_projection(void);
+/* static assert ensures this doesn't change! */
+#define GPU_PY_MATRIX_STACK_LEN 31
+#endif /* USE_GPU_PY_MATRIX_API */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#ifndef SUPPRESS_GENERIC_MATRIX_API
+
+#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)
+#define _GPU_MAT3_CONST_CAST(x) (_Generic((x), \
+ void *: (const float (*)[3])(x), \
+ float *: (const float (*)[3])(x), \
+ float [9]: (const float (*)[3])(x), \
+ float (*)[4]: (const float (*)[3])(x), \
+ float [4][4]: (const float (*)[3])(x), \
+ const void *: (const float (*)[3])(x), \
+ const float *: (const float (*)[3])(x), \
+ const float [9]: (const float (*)[3])(x), \
+ const float (*)[3]: (const float (*)[3])(x), \
+ const float [3][3]: (const float (*)[3])(x)) \
+)
+#define _GPU_MAT3_CAST(x) (_Generic((x), \
+ void *: (float (*)[3])(x), \
+ float *: (float (*)[3])(x), \
+ float [9]: (float (*)[3])(x), \
+ float (*)[3]: (float (*)[3])(x), \
+ float [3][3]: (float (*)[3])(x)) \
+)
+#define _GPU_MAT4_CONST_CAST(x) (_Generic((x), \
+ void *: (const float (*)[4])(x), \
+ float *: (const float (*)[4])(x), \
+ float [16]: (const float (*)[4])(x), \
+ float (*)[4]: (const float (*)[4])(x), \
+ float [4][4]: (const float (*)[4])(x), \
+ const void *: (const float (*)[4])(x), \
+ const float *: (const float (*)[4])(x), \
+ const float [16]: (const float (*)[4])(x), \
+ const float (*)[4]: (const float (*)[4])(x), \
+ const float [4][4]: (const float (*)[4])(x)) \
+)
+#define _GPU_MAT4_CAST(x) (_Generic((x), \
+ void *: (float (*)[4])(x), \
+ float *: (float (*)[4])(x), \
+ float [16]: (float (*)[4])(x), \
+ float (*)[4]: (float (*)[4])(x), \
+ float [4][4]: (float (*)[4])(x)) \
+)
+#else
+# define _GPU_MAT3_CONST_CAST(x) (const float (*)[3])(x)
+# define _GPU_MAT3_CAST(x) (float (*)[3])(x)
+# define _GPU_MAT4_CONST_CAST(x) (const float (*)[4])(x)
+# define _GPU_MAT4_CAST(x) (float (*)[4])(x)
+#endif /* C11 */
+
+/* make matrix inputs generic, to avoid warnings */
+# define gpuMultMatrix(x) gpuMultMatrix(_GPU_MAT4_CONST_CAST(x))
+# define gpuLoadMatrix(x) gpuLoadMatrix(_GPU_MAT4_CONST_CAST(x))
+# define gpuLoadProjectionMatrix(x) gpuLoadProjectionMatrix(_GPU_MAT4_CONST_CAST(x))
+# define gpuGetModelViewMatrix(x) gpuGetModelViewMatrix(_GPU_MAT4_CAST(x))
+# define gpuGetProjectionMatrix(x) gpuGetProjectionMatrix(_GPU_MAT4_CAST(x))
+# define gpuGetModelViewProjectionMatrix(x) gpuGetModelViewProjectionMatrix(_GPU_MAT4_CAST(x))
+# define gpuGetNormalMatrix(x) gpuGetNormalMatrix(_GPU_MAT3_CAST(x))
+# define gpuGetNormalMatrixInverse(x) gpuGetNormalMatrixInverse(_GPU_MAT3_CAST(x))
+#endif /* SUPPRESS_GENERIC_MATRIX_API */
+
+#endif /* __GPU_MATRIX_H__ */
diff --git a/source/blender/gpu/GPU_select.h b/source/blender/gpu/GPU_select.h
index cf5b8bf7d8f..0617d58f3b6 100644
--- a/source/blender/gpu/GPU_select.h
+++ b/source/blender/gpu/GPU_select.h
@@ -56,4 +56,7 @@ void GPU_select_cache_begin(void);
void GPU_select_cache_load_id(void);
void GPU_select_cache_end(void);
+/* utilities */
+const uint *GPU_select_buffer_near(const uint *buffer, int hits);
+
#endif
diff --git a/source/blender/gpu/GPU_shader.h b/source/blender/gpu/GPU_shader.h
index 5b94db6e120..f2119a117e5 100644
--- a/source/blender/gpu/GPU_shader.h
+++ b/source/blender/gpu/GPU_shader.h
@@ -38,6 +38,7 @@ extern "C" {
typedef struct GPUShader GPUShader;
struct GPUTexture;
+struct GPUUniformBuffer;
/* GPU Shader
* - only for fragment shaders now
@@ -54,29 +55,35 @@ GPUShader *GPU_shader_create(
const char *fragcode,
const char *geocode,
const char *libcode,
- const char *defines,
- int input, int output, int number);
+ const char *defines);
GPUShader *GPU_shader_create_ex(
const char *vertexcode,
const char *fragcode,
const char *geocode,
const char *libcode,
const char *defines,
- int input, int output, int number,
const int flags);
void GPU_shader_free(GPUShader *shader);
void GPU_shader_bind(GPUShader *shader);
void GPU_shader_unbind(void);
+int GPU_shader_get_program(GPUShader *shader);
+
void *GPU_shader_get_interface(GPUShader *shader);
-void GPU_shader_set_interface(GPUShader *shader, void *interface);
+
+void *GPU_fx_shader_get_interface(GPUShader *shader);
+void GPU_fx_shader_set_interface(GPUShader *shader, void *interface);
+
int GPU_shader_get_uniform(GPUShader *shader, const char *name);
+int GPU_shader_get_builtin_uniform(GPUShader *shader, int builtin);
+int GPU_shader_get_uniform_block(GPUShader *shader, const char *name);
void GPU_shader_uniform_vector(GPUShader *shader, int location, int length,
int arraysize, const float *value);
void GPU_shader_uniform_vector_int(GPUShader *shader, int location, int length,
int arraysize, const int *value);
+void GPU_shader_uniform_buffer(GPUShader *shader, int location, struct GPUUniformBuffer *ubo);
void GPU_shader_uniform_texture(GPUShader *shader, int location, struct GPUTexture *tex);
void GPU_shader_uniform_int(GPUShader *shader, int location, int value);
void GPU_shader_geometry_stage_primitive_io(GPUShader *shader, int input, int output, int number);
@@ -85,13 +92,102 @@ int GPU_shader_get_attribute(GPUShader *shader, const char *name);
/* Builtin/Non-generated shaders */
typedef enum GPUBuiltinShader {
- GPU_SHADER_VSM_STORE = 0,
- GPU_SHADER_SEP_GAUSSIAN_BLUR = 1,
- GPU_SHADER_SMOKE = 2,
- GPU_SHADER_SMOKE_FIRE = 3,
- GPU_SHADER_SMOKE_COBA = 4,
+ GPU_SHADER_VSM_STORE,
+ GPU_SHADER_SEP_GAUSSIAN_BLUR,
+ GPU_SHADER_SMOKE,
+ GPU_SHADER_SMOKE_FIRE,
+ GPU_SHADER_SMOKE_COBA,
+
+ /* specialized drawing */
+ GPU_SHADER_TEXT,
+ GPU_SHADER_EDGES_FRONT_BACK_PERSP,
+ GPU_SHADER_EDGES_FRONT_BACK_ORTHO,
+ GPU_SHADER_EDGES_OVERLAY_SIMPLE,
+ GPU_SHADER_EDGES_OVERLAY,
+ GPU_SHADER_KEYFRAME_DIAMOND,
+ GPU_SHADER_SIMPLE_LIGHTING,
+ GPU_SHADER_SIMPLE_LIGHTING_FLAT_COLOR,
+ GPU_SHADER_SIMPLE_LIGHTING_SMOOTH_COLOR,
+ GPU_SHADER_SIMPLE_LIGHTING_SMOOTH_COLOR_ALPHA,
+ /* for simple 2D drawing */
+ GPU_SHADER_2D_UNIFORM_COLOR,
+ GPU_SHADER_2D_FLAT_COLOR,
+ GPU_SHADER_2D_SMOOTH_COLOR,
+ GPU_SHADER_2D_IMAGE_COLOR,
+ GPU_SHADER_2D_IMAGE_ALPHA_COLOR,
+ GPU_SHADER_2D_CHECKER,
+ GPU_SHADER_2D_DIAG_STRIPES,
+ /* for simple 3D drawing */
+ GPU_SHADER_3D_UNIFORM_COLOR,
+ GPU_SHADER_3D_UNIFORM_COLOR_U32,
+ GPU_SHADER_3D_UNIFORM_COLOR_INSTANCE,
+ GPU_SHADER_3D_FLAT_COLOR,
+ GPU_SHADER_3D_FLAT_COLOR_U32, /* use for select-id's */
+ GPU_SHADER_3D_SMOOTH_COLOR,
+ GPU_SHADER_3D_DEPTH_ONLY,
+ GPU_SHADER_3D_CLIPPED_UNIFORM_COLOR,
+ /* basic image drawing */
+ GPU_SHADER_2D_IMAGE_LINEAR_TO_SRGB,
+ GPU_SHADER_2D_IMAGE_SHUFFLE_COLOR,
+ GPU_SHADER_2D_IMAGE_MASK_UNIFORM_COLOR,
+ GPU_SHADER_3D_IMAGE_MODULATE_ALPHA,
+ GPU_SHADER_3D_IMAGE_RECT_MODULATE_ALPHA,
+ GPU_SHADER_3D_IMAGE_DEPTH,
+ /* stereo 3d */
+ GPU_SHADER_2D_IMAGE_INTERLACE,
+ /* points */
+ GPU_SHADER_2D_POINT_FIXED_SIZE_UNIFORM_COLOR,
+ GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA,
+ GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_OUTLINE_AA,
+ GPU_SHADER_2D_POINT_UNIFORM_SIZE_VARYING_COLOR_OUTLINE_AA,
+ GPU_SHADER_2D_POINT_VARYING_SIZE_VARYING_COLOR,
+ GPU_SHADER_3D_POINT_FIXED_SIZE_UNIFORM_COLOR,
+ GPU_SHADER_3D_POINT_FIXED_SIZE_VARYING_COLOR,
+ GPU_SHADER_3D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA,
+ GPU_SHADER_3D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_OUTLINE_AA,
+ GPU_SHADER_3D_POINT_VARYING_SIZE_UNIFORM_COLOR,
+ GPU_SHADER_3D_POINT_VARYING_SIZE_VARYING_COLOR,
+ /* lines */
+ GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR,
+ GPU_SHADER_3D_LINE_DASHED_UNIFORM_COLOR,
+ /* lamp drawing */
+ GPU_SHADER_3D_GROUNDPOINT,
+ GPU_SHADER_3D_GROUNDLINE,
+ GPU_SHADER_3D_SCREENSPACE_VARIYING_COLOR,
+ /* bone drawing */
+ GPU_SHADER_3D_OBJECTSPACE_VARIYING_COLOR,
+ GPU_SHADER_3D_OBJECTSPACE_SIMPLE_LIGHTING_VARIYING_COLOR,
+ /* camera drawing */
+ GPU_SHADER_CAMERA,
+ /* distance in front of objects */
+ GPU_SHADER_DISTANCE_LINES,
+ /* axis name */
+ GPU_SHADER_3D_INSTANCE_SCREEN_ALIGNED_AXIS,
+ GPU_SHADER_3D_INSTANCE_SCREEN_ALIGNED,
+ /* instance */
+ GPU_SHADER_INSTANCE_UNIFORM_COLOR,
+ GPU_SHADER_INSTANCE_VARIYING_COLOR_VARIYING_SIZE, /* Uniformly scaled */
+ GPU_SHADER_INSTANCE_VARIYING_COLOR_VARIYING_SCALE,
+ GPU_SHADER_INSTANCE_EDGES_VARIYING_COLOR,
+
+ GPU_SHADER_3D_INSTANCE_BONE_ENVELOPE_SOLID,
+ GPU_SHADER_3D_INSTANCE_BONE_ENVELOPE_WIRE,
+
+ GPU_SHADER_3D_INSTANCE_MBALL_HELPERS,
+
+ GPU_NUM_BUILTIN_SHADERS /* (not an actual shader) */
} GPUBuiltinShader;
+/* Keep these in sync with:
+ * gpu_shader_image_interlace_frag.glsl
+ * gpu_shader_image_rect_interlace_frag.glsl
+ **/
+typedef enum GPUInterlaceShader {
+ GPU_SHADER_INTERLACE_ROW = 0,
+ GPU_SHADER_INTERLACE_COLUMN = 1,
+ GPU_SHADER_INTERLACE_CHECKER = 2,
+} GPUInterlaceShader;
+
GPUShader *GPU_shader_get_builtin_shader(GPUBuiltinShader shader);
GPUShader *GPU_shader_get_builtin_fx_shader(int effects, bool persp);
diff --git a/source/blender/gpu/GPU_texture.h b/source/blender/gpu/GPU_texture.h
index 756fe79151b..1b64d66469b 100644
--- a/source/blender/gpu/GPU_texture.h
+++ b/source/blender/gpu/GPU_texture.h
@@ -55,25 +55,123 @@ typedef struct GPUTexture GPUTexture;
* - if created with from_blender, will not free the texture
*/
-typedef enum GPUHDRType {
- GPU_HDR_NONE = 0,
- GPU_HDR_HALF_FLOAT = 1,
- GPU_HDR_FULL_FLOAT = (1 << 1),
-} GPUHDRType;
+/* Wrapper to supported OpenGL/Vulkan texture internal storage
+ * If you need a type just uncomment it. Be aware that some formats
+ * are not supported by renderbuffers. All of the following formats
+ * are part of the OpenGL 3.3 core
+ * specification. */
+typedef enum GPUTextureFormat {
+ /* Formats texture & renderbuffer */
+ GPU_RGBA32F,
+ GPU_RGBA16F,
+ GPU_RGBA8,
+ GPU_RG32F,
+ GPU_RG16F,
+ GPU_RG16I,
+ GPU_R32F,
+ GPU_R16F,
+ GPU_RG8,
+ GPU_R8,
+#if 0
+ GPU_RGBA32I,
+ GPU_RGBA32UI,
+ GPU_RGBA16,
+ GPU_RGBA16I,
+ GPU_RGBA16UI,
+ GPU_RGBA8I,
+ GPU_RGBA8UI,
+ GPU_RG32I,
+ GPU_RG32UI,
+ GPU_RG16,
+ GPU_RG16UI,
+ GPU_RG8I,
+ GPU_RG8UI,
+ GPU_R32I,
+ GPU_R32UI,
+ GPU_R16I,
+ GPU_R16UI,
+ GPU_R16,
+ GPU_R8I,
+ GPU_R8UI,
+#endif
+
+ /* Special formats texture & renderbuffer */
+#if 0
+ GPU_RGB10_A2,
+ GPU_RGB10_A2UI,
+ GPU_DEPTH32F_STENCIL8,
+#endif
+ GPU_R11F_G11F_B10F,
+ GPU_DEPTH24_STENCIL8,
+
+ /* Texture only format */
+ GPU_RGB16F,
+#if 0
+ GPU_RGBA16_SNORM,
+ GPU_RGBA8_SNORM,
+ GPU_RGB32F,
+ GPU_RGB32I,
+ GPU_RGB32UI,
+ GPU_RGB16_SNORM,
+ GPU_RGB16I,
+ GPU_RGB16UI,
+ GPU_RGB16,
+ GPU_RGB8_SNORM,
+ GPU_RGB8,
+ GPU_RGB8I,
+ GPU_RGB8UI,
+ GPU_RG16_SNORM,
+ GPU_RG8_SNORM,
+ GPU_R16_SNORM,
+ GPU_R8_SNORM,
+#endif
+
+ /* Special formats texture only */
+#if 0
+ GPU_SRGB8_A8,
+ GPU_SRGB8,
+ GPU_RGB9_E5,
+ GPU_COMPRESSED_RG_RGTC2,
+ GPU_COMPRESSED_SIGNED_RG_RGTC2,
+ GPU_COMPRESSED_RED_RGTC1,
+ GPU_COMPRESSED_SIGNED_RED_RGTC1,
+#endif
+
+ /* Depth Formats */
+ GPU_DEPTH_COMPONENT32F,
+ GPU_DEPTH_COMPONENT24,
+ GPU_DEPTH_COMPONENT16,
+} GPUTextureFormat;
+
+unsigned int GPU_texture_memory_usage_get(void);
GPUTexture *GPU_texture_create_1D(int w, const float *pixels, char err_out[256]);
-GPUTexture *GPU_texture_create_2D(int w, int h, const float *pixels, GPUHDRType hdr, char err_out[256]);
-GPUTexture *GPU_texture_create_3D(int w, int h, int depth, int channels, const float *fpixels);
+GPUTexture *GPU_texture_create_1D_custom(
+ int w, int channels, GPUTextureFormat data_type, const float *pixels, char err_out[256]);
+GPUTexture *GPU_texture_create_2D(int w, int h, const float *pixels, char err_out[256]);
+GPUTexture *GPU_texture_create_2D_custom(
+ int w, int h, int channels, GPUTextureFormat data_type, const float *pixels, char err_out[256]);
+GPUTexture *GPU_texture_create_2D_multisample(int w, int h, const float *pixels, int samples, char err_out[256]);
+GPUTexture *GPU_texture_create_2D_custom_multisample(
+ int w, int h, int channels, GPUTextureFormat data_type, const float *pixels, int samples, char err_out[256]);
+GPUTexture *GPU_texture_create_2D_array_custom(
+ int w, int h, int d, int channels, GPUTextureFormat data_type, const float *pixels, char err_out[256]);
+GPUTexture *GPU_texture_create_3D(int w, int h, int d, const float *pixels, char err_out[256]);
+GPUTexture *GPU_texture_create_3D_custom(
+ int w, int h, int d, int channels, GPUTextureFormat data_type, const float *pixels, char err_out[256]);
+GPUTexture *GPU_texture_create_cube_custom(
+ int w, int channels, GPUTextureFormat data_type, const float *pixels, char err_out[256]);
GPUTexture *GPU_texture_create_depth(int w, int h, char err_out[256]);
-GPUTexture *GPU_texture_create_vsm_shadow_map(int size, char err_out[256]);
-GPUTexture *GPU_texture_create_2D_procedural(int w, int h, const float *pixels, bool repeat, char err_out[256]);
-GPUTexture *GPU_texture_create_1D_procedural(int w, const float *pixels, char err_out[256]);
-GPUTexture *GPU_texture_create_2D_multisample(
- int w, int h, const float *pixels, GPUHDRType hdr, int samples, char err_out[256]);
+GPUTexture *GPU_texture_create_depth_with_stencil(int w, int h, char err_out[256]);
GPUTexture *GPU_texture_create_depth_multisample(int w, int h, int samples, char err_out[256]);
+GPUTexture *GPU_texture_create_depth_with_stencil_multisample(int w, int h, int samples, char err_out[256]);
+
GPUTexture *GPU_texture_from_blender(
struct Image *ima, struct ImageUser *iuser, int textarget, bool is_data, double time, int mipmap);
GPUTexture *GPU_texture_from_preview(struct PreviewImage *prv, int mipmap);
+
+void GPU_texture_update(GPUTexture *tex, const float *pixels);
+
void GPU_invalid_tex_init(void);
void GPU_invalid_tex_bind(int mode);
void GPU_invalid_tex_free(void);
@@ -81,12 +179,15 @@ void GPU_invalid_tex_free(void);
void GPU_texture_free(GPUTexture *tex);
void GPU_texture_ref(GPUTexture *tex);
-
void GPU_texture_bind(GPUTexture *tex, int number);
void GPU_texture_unbind(GPUTexture *tex);
int GPU_texture_bound_number(GPUTexture *tex);
-void GPU_texture_filter_mode(GPUTexture *tex, bool compare, bool use_filter);
+void GPU_texture_generate_mipmap(GPUTexture *tex);
+void GPU_texture_compare_mode(GPUTexture *tex, bool use_compare);
+void GPU_texture_filter_mode(GPUTexture *tex, bool use_filter);
+void GPU_texture_mipmap_mode(GPUTexture *tex, bool use_mipmap, bool use_filter);
+void GPU_texture_wrap_mode(GPUTexture *tex, bool use_repeat);
struct GPUFrameBuffer *GPU_texture_framebuffer(GPUTexture *tex);
int GPU_texture_framebuffer_attachment(GPUTexture *tex);
@@ -95,7 +196,9 @@ void GPU_texture_framebuffer_set(GPUTexture *tex, struct GPUFrameBuffer *fb, int
int GPU_texture_target(const GPUTexture *tex);
int GPU_texture_width(const GPUTexture *tex);
int GPU_texture_height(const GPUTexture *tex);
-int GPU_texture_depth(const GPUTexture *tex);
+int GPU_texture_format(const GPUTexture *tex);
+bool GPU_texture_depth(const GPUTexture *tex);
+bool GPU_texture_stencil(const GPUTexture *tex);
int GPU_texture_opengl_bindcode(const GPUTexture *tex);
#ifdef __cplusplus
diff --git a/source/blender/gpu/GPU_uniformbuffer.h b/source/blender/gpu/GPU_uniformbuffer.h
new file mode 100644
index 00000000000..c2480f8ba03
--- /dev/null
+++ b/source/blender/gpu/GPU_uniformbuffer.h
@@ -0,0 +1,59 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2005 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Clement Foucault.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file GPU_uniformbuffer.h
+ * \ingroup gpu
+ */
+
+#ifndef __GPU_UNIFORMBUFFER_H__
+#define __GPU_UNIFORMBUFFER_H__
+
+struct ListBase;
+
+typedef struct GPUUniformBuffer GPUUniformBuffer;
+typedef struct GPUUniformBufferDynamicItem GPUUniformBufferDynamicItem;
+
+GPUUniformBuffer *GPU_uniformbuffer_create(int size, const void *data, char err_out[256]);
+GPUUniformBuffer *GPU_uniformbuffer_dynamic_create(struct ListBase *inputs, char err_out[256]);
+
+void GPU_uniformbuffer_free(GPUUniformBuffer *ubo);
+
+void GPU_uniformbuffer_update(GPUUniformBuffer *ubo, const void *data);
+void GPU_uniformbuffer_dynamic_update(GPUUniformBuffer *ubo_);
+
+void GPU_uniformbuffer_bind(GPUUniformBuffer *ubo, int number);
+void GPU_uniformbuffer_unbind(GPUUniformBuffer *ubo);
+
+int GPU_uniformbuffer_bindpoint(GPUUniformBuffer *ubo);
+
+bool GPU_uniformbuffer_is_empty(GPUUniformBuffer *ubo);
+bool GPU_uniformbuffer_is_dirty(GPUUniformBuffer *ubo);
+void GPU_uniformbuffer_tag_dirty(GPUUniformBuffer *ubo);
+
+#define GPU_UBO_BLOCK_NAME "nodeTree"
+
+#endif /* __GPU_UNIFORMBUFFER_H__ */
diff --git a/source/blender/gpu/GPU_viewport.h b/source/blender/gpu/GPU_viewport.h
new file mode 100644
index 00000000000..580ff64befb
--- /dev/null
+++ b/source/blender/gpu/GPU_viewport.h
@@ -0,0 +1,134 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2005 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s):
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file GPU_viewport.h
+ * \ingroup gpu
+ */
+
+#ifndef __GPU_VIEWPORT_H__
+#define __GPU_VIEWPORT_H__
+
+#include <stdbool.h>
+
+#include "DNA_vec_types.h"
+
+#include "GPU_framebuffer.h"
+#include "GPU_texture.h"
+
+#define GPU_INFO_SIZE 512 /* IMA_MAX_RENDER_TEXT */
+
+typedef struct GPUViewport GPUViewport;
+
+/* Contains memory pools informations */
+typedef struct ViewportMemoryPool {
+ struct BLI_mempool *calls;
+ struct BLI_mempool *calls_generate;
+ struct BLI_mempool *shgroups;
+ struct BLI_mempool *uniforms;
+ struct BLI_mempool *passes;
+} ViewportMemoryPool;
+
+/* All FramebufferLists are just the same pointers with different names */
+typedef struct FramebufferList {
+ struct GPUFrameBuffer *framebuffers[0];
+} FramebufferList;
+
+typedef struct TextureList {
+ struct GPUTexture *textures[0];
+} TextureList;
+
+typedef struct PassList {
+ struct DRWPass *passes[0];
+} PassList;
+
+typedef struct StorageList {
+ void *storage[0]; /* custom structs from the engine */
+} StorageList;
+
+typedef struct ViewportEngineData {
+ void *engine_type;
+
+ FramebufferList *fbl;
+ TextureList *txl;
+ PassList *psl;
+ StorageList *stl;
+ char info[GPU_INFO_SIZE];
+
+ /* we may want to put this elsewhere */
+ struct DRWTextStore *text_draw_cache;
+
+ /* Profiling data */
+ double init_time;
+ double cache_time;
+ double render_time;
+ double background_time;
+} ViewportEngineData;
+
+typedef struct ViewportEngineData_Info {
+ int fbl_len;
+ int txl_len;
+ int psl_len;
+ int stl_len;
+} ViewportEngineData_Info;
+
+GPUViewport *GPU_viewport_create(void);
+void GPU_viewport_bind(GPUViewport *viewport, const rcti *rect);
+void GPU_viewport_unbind(GPUViewport *viewport);
+void GPU_viewport_free(GPUViewport *viewport);
+
+GPUViewport *GPU_viewport_create_from_offscreen(struct GPUOffScreen *ofs);
+void GPU_viewport_clear_from_offscreen(GPUViewport *viewport);
+
+ViewportMemoryPool *GPU_viewport_mempool_get(GPUViewport *viewport);
+struct DRWInstanceDataList *GPU_viewport_instance_data_list_get(GPUViewport *viewport);
+
+void *GPU_viewport_engine_data_create(GPUViewport *viewport, void *engine_type);
+void *GPU_viewport_engine_data_get(GPUViewport *viewport, void *engine_type);
+void *GPU_viewport_framebuffer_list_get(GPUViewport *viewport);
+void *GPU_viewport_texture_list_get(GPUViewport *viewport);
+void GPU_viewport_size_get(const GPUViewport *viewport, int size[2]);
+void GPU_viewport_size_set(GPUViewport *viewport, const int size[2]);
+
+void GPU_viewport_tag_update(GPUViewport *viewport);
+bool GPU_viewport_do_update(GPUViewport *viewport);
+
+/* Texture pool */
+GPUTexture *GPU_viewport_texture_pool_query(GPUViewport *viewport, void *engine, int width, int height, int channels, int format);
+
+bool GPU_viewport_engines_data_validate(GPUViewport *viewport, unsigned int hash);
+void GPU_viewport_cache_release(GPUViewport *viewport);
+
+/* debug */
+bool GPU_viewport_debug_depth_create(GPUViewport *viewport, int width, int height, char err_out[256]);
+void GPU_viewport_debug_depth_free(GPUViewport *viewport);
+void GPU_viewport_debug_depth_store(GPUViewport *viewport, const int x, const int y);
+void GPU_viewport_debug_depth_draw(GPUViewport *viewport, const float znear, const float zfar);
+bool GPU_viewport_debug_depth_is_valid(GPUViewport *viewport);
+int GPU_viewport_debug_depth_width(const GPUViewport *viewport);
+int GPU_viewport_debug_depth_height(const GPUViewport *viewport);
+
+#endif // __GPU_VIEWPORT_H__
diff --git a/source/blender/gpu/intern/gpu_basic_shader.c b/source/blender/gpu/intern/gpu_basic_shader.c
index 8505bd847a0..620a06ae606 100644
--- a/source/blender/gpu/intern/gpu_basic_shader.c
+++ b/source/blender/gpu/intern/gpu_basic_shader.c
@@ -140,114 +140,6 @@ const GLubyte stipple_checker_8px[128] = {
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255,
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255};
-const GLubyte stipple_interlace_row[128] = {
- 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00};
-
-const GLubyte stipple_interlace_row_swap[128] = {
- 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff};
-
-const GLubyte stipple_interlace_column[128] = {
- 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
- 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
- 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
- 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
- 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
- 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
- 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
- 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
- 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
- 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
- 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
- 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
- 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
- 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
- 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
- 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55};
-
-const GLubyte stipple_interlace_column_swap[128] = {
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa};
-
-const GLubyte stipple_interlace_checker[128] = {
- 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa,
- 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa,
- 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa,
- 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa,
- 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa,
- 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa,
- 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa,
- 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa,
- 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa,
- 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa,
- 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa,
- 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa,
- 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa,
- 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa,
- 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa,
- 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa};
-
-const GLubyte stipple_interlace_checker_swap[128] = {
- 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
- 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
- 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
- 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
- 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
- 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
- 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
- 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
- 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
- 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
- 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
- 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
- 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
- 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
- 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
- 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55};
-
const GLubyte stipple_hexagon[128] = {
0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
@@ -267,24 +159,6 @@ const GLubyte stipple_hexagon[128] = {
0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22};
/* ********************************************* */
-/* GLSL State */
-
-static bool USE_GLSL = false;
-
-/**
- * \note this isn't part of the basic shader API,
- * only set from the command line once on startup.
- */
-void GPU_basic_shader_use_glsl_set(bool enabled)
-{
- USE_GLSL = enabled;
-}
-
-bool GPU_basic_shader_use_glsl_get(void)
-{
- return USE_GLSL;
-}
-
/* Init / exit */
void GPU_basic_shaders_init(void)
@@ -316,31 +190,6 @@ static bool solid_compatible_lighting(void)
return ((directional & enabled) == enabled);
}
-#if 0
-static int detect_options()
-{
- GLint two_sided;
- int options = 0;
-
- if (glIsEnabled(GL_TEXTURE_2D))
- options |= GPU_SHADER_TEXTURE_2D;
- if (glIsEnabled(GL_TEXTURE_RECTANGLE))
- options |= GPU_SHADER_TEXTURE_RECT;
- GPU_SHADER_TEXTURE_RECT
- if (glIsEnabled(GL_COLOR_MATERIAL))
- options |= GPU_SHADER_USE_COLOR;
-
- if (glIsEnabled(GL_LIGHTING))
- options |= GPU_SHADER_LIGHTING;
-
- glGetIntegerv(GL_LIGHT_MODEL_TWO_SIDE, &two_sided);
- if (two_sided == GL_TRUE)
- options |= GPU_SHADER_TWO_SIDED;
-
- return options;
-}
-#endif
-
static GPUShader *gpu_basic_shader(int options)
{
/* glsl code */
@@ -388,7 +237,7 @@ static GPUShader *gpu_basic_shader(int options)
datatoc_gpu_shader_basic_frag_glsl,
geom_glsl,
NULL,
- defines, 0, 0, 0);
+ defines);
if (shader) {
/* set texture map to first texture unit */
@@ -420,102 +269,16 @@ static void gpu_basic_shader_uniform_autoset(GPUShader *shader, int options)
void GPU_basic_shader_bind(int options)
{
- if (USE_GLSL) {
- if (options) {
- const int bound_options = GPU_MATERIAL_STATE.bound_options;
-
- /* texture options need to be set for basic shader too */
- if (options & GPU_SHADER_TEXTURE_2D) {
- glEnable(GL_TEXTURE_2D);
- }
- else if (bound_options & GPU_SHADER_TEXTURE_2D) {
- glDisable(GL_TEXTURE_2D);
- }
-
- if (options & GPU_SHADER_TEXTURE_RECT) {
- glEnable(GL_TEXTURE_RECTANGLE);
- }
- else if (bound_options & GPU_SHADER_TEXTURE_RECT) {
- glDisable(GL_TEXTURE_RECTANGLE);
- }
-
- GPUShader *shader = gpu_basic_shader(options);
+ if (options) {
+ GPUShader *shader = gpu_basic_shader(options);
- if (shader) {
- GPU_shader_bind(shader);
- gpu_basic_shader_uniform_autoset(shader, options);
- }
- }
- else {
- GPU_shader_unbind();
+ if (shader) {
+ GPU_shader_bind(shader);
+ gpu_basic_shader_uniform_autoset(shader, options);
}
}
else {
- const int bound_options = GPU_MATERIAL_STATE.bound_options;
-
- if (options & GPU_SHADER_LIGHTING) {
- glEnable(GL_LIGHTING);
-
- if (options & GPU_SHADER_USE_COLOR)
- glEnable(GL_COLOR_MATERIAL);
- else
- glDisable(GL_COLOR_MATERIAL);
-
- if (options & GPU_SHADER_TWO_SIDED)
- glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
- else
- glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE);
- }
- else if (bound_options & GPU_SHADER_LIGHTING) {
- glDisable(GL_LIGHTING);
- glDisable(GL_COLOR_MATERIAL);
- glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE);
- }
-
- if (options & GPU_SHADER_TEXTURE_2D) {
- GLint env_mode = (options & (GPU_SHADER_USE_COLOR | GPU_SHADER_LIGHTING)) ? GL_MODULATE : GL_REPLACE;
- glEnable(GL_TEXTURE_2D);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, env_mode);
- }
- else if (bound_options & GPU_SHADER_TEXTURE_2D) {
- if ((options & GPU_SHADER_TEXTURE_RECT) == 0) {
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
- }
- glDisable(GL_TEXTURE_2D);
- }
-
- if (options & GPU_SHADER_TEXTURE_RECT) {
- GLint env_mode = (options & (GPU_SHADER_USE_COLOR | GPU_SHADER_LIGHTING)) ? GL_MODULATE : GL_REPLACE;
- glEnable(GL_TEXTURE_RECTANGLE);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, env_mode);
- }
- else if (bound_options & GPU_SHADER_TEXTURE_RECT) {
- if ((options & GPU_SHADER_TEXTURE_2D) == 0) {
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
- }
- glDisable(GL_TEXTURE_RECTANGLE);
- }
-
- if ((options & GPU_SHADER_LINE) && (options & GPU_SHADER_STIPPLE)) {
- glEnable(GL_LINE_STIPPLE);
- }
- else if ((bound_options & GPU_SHADER_LINE) && (bound_options & GPU_SHADER_STIPPLE)) {
- glDisable(GL_LINE_STIPPLE);
- }
-
- if (((options & GPU_SHADER_LINE) == 0) && (options & GPU_SHADER_STIPPLE)) {
- glEnable(GL_POLYGON_STIPPLE);
- }
- else if (((bound_options & GPU_SHADER_LINE) == 0) && (bound_options & GPU_SHADER_STIPPLE)) {
- glDisable(GL_POLYGON_STIPPLE);
- }
-
- if (options & GPU_SHADER_FLAT_NORMAL) {
- glShadeModel(GL_FLAT);
- }
- else if (bound_options & GPU_SHADER_FLAT_NORMAL) {
- glShadeModel(GL_SMOOTH);
- }
+ GPU_shader_unbind();
}
GPU_MATERIAL_STATE.bound_options = options;
@@ -544,175 +307,37 @@ void GPU_basic_shader_colors(
const float diffuse[3], const float specular[3],
int shininess, float alpha)
{
- float gl_diffuse[4], gl_specular[4];
-
- if (diffuse)
- copy_v3_v3(gl_diffuse, diffuse);
- else
- zero_v3(gl_diffuse);
- gl_diffuse[3] = alpha;
-
- if (specular)
- copy_v3_v3(gl_specular, specular);
- else
- zero_v3(gl_specular);
- gl_specular[3] = 1.0f;
-
- glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, gl_diffuse);
- glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, gl_specular);
- glMateriali(GL_FRONT_AND_BACK, GL_SHININESS, CLAMPIS(shininess, 1, 128));
+ UNUSED_VARS(diffuse, specular, shininess, alpha);
+ return;
}
void GPU_basic_shader_light_set(int light_num, GPULightData *light)
{
- int light_bit = (1 << light_num);
-
- /* note that light position is affected by the current modelview matrix! */
-
- GPU_MATERIAL_STATE.lights_enabled &= ~light_bit;
- GPU_MATERIAL_STATE.lights_directional &= ~light_bit;
-
- if (light) {
- float position[4], diffuse[4], specular[4];
-
- glEnable(GL_LIGHT0 + light_num);
-
- /* position */
- if (light->type == GPU_LIGHT_SUN) {
- copy_v3_v3(position, light->direction);
- position[3] = 0.0f;
- }
- else {
- copy_v3_v3(position, light->position);
- position[3] = 1.0f;
- }
- glLightfv(GL_LIGHT0 + light_num, GL_POSITION, position);
-
- /* energy */
- copy_v3_v3(diffuse, light->diffuse);
- copy_v3_v3(specular, light->specular);
- diffuse[3] = 1.0f;
- specular[3] = 1.0f;
- glLightfv(GL_LIGHT0 + light_num, GL_DIFFUSE, diffuse);
- glLightfv(GL_LIGHT0 + light_num, GL_SPECULAR, specular);
-
- /* attenuation */
- if (light->type == GPU_LIGHT_SUN) {
- glLightf(GL_LIGHT0 + light_num, GL_CONSTANT_ATTENUATION, 1.0f);
- glLightf(GL_LIGHT0 + light_num, GL_LINEAR_ATTENUATION, 0.0f);
- glLightf(GL_LIGHT0 + light_num, GL_QUADRATIC_ATTENUATION, 0.0f);
- }
- else {
- glLightf(GL_LIGHT0 + light_num, GL_CONSTANT_ATTENUATION, light->constant_attenuation);
- glLightf(GL_LIGHT0 + light_num, GL_LINEAR_ATTENUATION, light->linear_attenuation);
- glLightf(GL_LIGHT0 + light_num, GL_QUADRATIC_ATTENUATION, light->quadratic_attenuation);
- }
-
- /* spot */
- glLightfv(GL_LIGHT0 + light_num, GL_SPOT_DIRECTION, light->direction);
- if (light->type == GPU_LIGHT_SPOT) {
- glLightf(GL_LIGHT0 + light_num, GL_SPOT_CUTOFF, light->spot_cutoff);
- glLightf(GL_LIGHT0 + light_num, GL_SPOT_EXPONENT, light->spot_exponent);
- }
- else {
- glLightf(GL_LIGHT0 + light_num, GL_SPOT_CUTOFF, 180.0f);
- glLightf(GL_LIGHT0 + light_num, GL_SPOT_EXPONENT, 0.0f);
- }
-
- GPU_MATERIAL_STATE.lights_enabled |= light_bit;
- if (position[3] == 0.0f)
- GPU_MATERIAL_STATE.lights_directional |= light_bit;
- }
- else {
- /* TODO(sergey): Needs revisit. */
- if (USE_GLSL || true) {
- /* glsl shader needs these zero to skip them */
- const float zero[4] = {0.0f, 0.0f, 0.0f, 0.0f};
-
- glLightfv(GL_LIGHT0 + light_num, GL_POSITION, zero);
- glLightfv(GL_LIGHT0 + light_num, GL_DIFFUSE, zero);
- glLightfv(GL_LIGHT0 + light_num, GL_SPECULAR, zero);
- }
-
- glDisable(GL_LIGHT0 + light_num);
- }
+ UNUSED_VARS(light_num, light);
+ return;
}
void GPU_basic_shader_light_set_viewer(bool local)
{
- glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, (local) ? GL_TRUE: GL_FALSE);
+ UNUSED_VARS(local);
+ return;
}
void GPU_basic_shader_stipple(GPUBasicShaderStipple stipple_id)
{
- if (USE_GLSL) {
- glUniform1i(GPU_shader_get_uniform(gpu_basic_shader(GPU_MATERIAL_STATE.bound_options), "stipple_id"), stipple_id);
- }
- else {
- switch (stipple_id) {
- case GPU_SHADER_STIPPLE_HALFTONE:
- glPolygonStipple(stipple_halftone);
- return;
- case GPU_SHADER_STIPPLE_QUARTTONE:
- glPolygonStipple(stipple_quarttone);
- return;
- case GPU_SHADER_STIPPLE_CHECKER_8PX:
- glPolygonStipple(stipple_checker_8px);
- return;
- case GPU_SHADER_STIPPLE_HEXAGON:
- glPolygonStipple(stipple_hexagon);
- return;
- case GPU_SHADER_STIPPLE_DIAG_STRIPES_SWAP:
- glPolygonStipple(stipple_diag_stripes_neg);
- return;
- case GPU_SHADER_STIPPLE_DIAG_STRIPES:
- glPolygonStipple(stipple_diag_stripes_pos);
- return;
- case GPU_SHADER_STIPPLE_S3D_INTERLACE_ROW:
- glPolygonStipple(stipple_interlace_row);
- return;
- case GPU_SHADER_STIPPLE_S3D_INTERLACE_ROW_SWAP:
- glPolygonStipple(stipple_interlace_row_swap);
- return;
- case GPU_SHADER_STIPPLE_S3D_INTERLACE_COLUMN:
- glPolygonStipple(stipple_interlace_column);
- return;
- case GPU_SHADER_STIPPLE_S3D_INTERLACE_COLUMN_SWAP:
- glPolygonStipple(stipple_interlace_column_swap);
- return;
- case GPU_SHADER_STIPPLE_S3D_INTERLACE_CHECKER:
- glPolygonStipple(stipple_interlace_checker);
- return;
- case GPU_SHADER_STIPPLE_S3D_INTERLACE_CHECKER_SWAP:
- glPolygonStipple(stipple_interlace_checker_swap);
- return;
- default:
- glPolygonStipple(stipple_hexagon);
- return;
- }
- }
+ glUniform1i(GPU_shader_get_uniform(gpu_basic_shader(GPU_MATERIAL_STATE.bound_options), "stipple_id"), stipple_id);
}
void GPU_basic_shader_line_width(float line_width)
{
- if (USE_GLSL) {
- GPU_MATERIAL_STATE.line_width = line_width;
- if (GPU_MATERIAL_STATE.bound_options & GPU_SHADER_LINE) {
- glUniform1f(GPU_shader_get_uniform(gpu_basic_shader(GPU_MATERIAL_STATE.bound_options), "line_width"), line_width);
- }
- }
- else {
- glLineWidth(line_width);
+ GPU_MATERIAL_STATE.line_width = line_width;
+ if (GPU_MATERIAL_STATE.bound_options & GPU_SHADER_LINE) {
+ glUniform1f(GPU_shader_get_uniform(gpu_basic_shader(GPU_MATERIAL_STATE.bound_options), "line_width"), line_width);
}
}
void GPU_basic_shader_line_stipple(GLint stipple_factor, GLushort stipple_pattern)
{
- if (USE_GLSL) {
- glUniform1i(GPU_shader_get_uniform(gpu_basic_shader(GPU_MATERIAL_STATE.bound_options), "stipple_factor"), stipple_factor);
- glUniform1i(GPU_shader_get_uniform(gpu_basic_shader(GPU_MATERIAL_STATE.bound_options), "stipple_pattern"), stipple_pattern);
- }
- else {
- glLineStipple(stipple_factor, stipple_pattern);
- }
+ glUniform1i(GPU_shader_get_uniform(gpu_basic_shader(GPU_MATERIAL_STATE.bound_options), "stipple_factor"), stipple_factor);
+ glUniform1i(GPU_shader_get_uniform(gpu_basic_shader(GPU_MATERIAL_STATE.bound_options), "stipple_pattern"), stipple_pattern);
}
diff --git a/source/blender/gpu/intern/gpu_batch.c b/source/blender/gpu/intern/gpu_batch.c
new file mode 100644
index 00000000000..0400fc1025b
--- /dev/null
+++ b/source/blender/gpu/intern/gpu_batch.c
@@ -0,0 +1,281 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2016 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Mike Erwin
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/gpu/intern/gpu_basic_shader.c
+ * \ingroup gpu
+ */
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_utildefines.h"
+#include "BLI_rect.h"
+#include "BLI_math.h"
+#include "BLI_polyfill2d.h"
+#include "BLI_sort_utils.h"
+
+
+#include "GPU_batch.h" /* own include */
+#include "gpu_shader_private.h"
+
+/* -------------------------------------------------------------------- */
+/** \name Utilities
+ * \{ */
+
+void GWN_batch_program_set_builtin(Gwn_Batch *batch, GPUBuiltinShader shader_id)
+{
+ GPUShader *shader = GPU_shader_get_builtin_shader(shader_id);
+ GWN_batch_program_set(batch, shader->program, shader->interface);
+}
+
+/** \} */
+
+
+
+/* -------------------------------------------------------------------- */
+/** \name Batch Creation
+ * \{ */
+
+/**
+ * Creates triangles from a byte-array of polygons.
+ *
+ * See 'make_shape_2d_from_blend.py' utility to create data to pass to this function.
+ *
+ * \param polys_flat: Pairs of X, Y coordinates (repeating to signify closing the polygon).
+ * \param polys_flat_len: Length of the array (must be an even number).
+ * \param rect: Optional region to map the byte 0..255 coords to. When not set use -1..1.
+ */
+Gwn_Batch *GPU_batch_tris_from_poly_2d_encoded(
+ const uchar *polys_flat, uint polys_flat_len, const rctf *rect)
+{
+ const uchar (*polys)[2] = (const void *)polys_flat;
+ const uint polys_len = polys_flat_len / 2;
+ BLI_assert(polys_flat_len == polys_len * 2);
+
+ /* Over alloc in both cases */
+ float (*verts)[2] = MEM_mallocN(sizeof(*verts) * polys_len, __func__);
+ float (*verts_step)[2] = verts;
+ uint (*tris)[3] = MEM_mallocN(sizeof(*tris) * polys_len, __func__);
+ uint (*tris_step)[3] = tris;
+
+ const float range_uchar[2] = {
+ (rect ? (rect->xmax - rect->xmin) : 2.0f) / 255.0f,
+ (rect ? (rect->ymax - rect->ymin) : 2.0f) / 255.0f,
+ };
+ const float min_uchar[2] = {
+ (rect ? rect->xmin : -1.0f),
+ (rect ? rect->ymin : -1.0f),
+ };
+
+ uint i_poly = 0;
+ uint i_vert = 0;
+ while (i_poly != polys_len) {
+ for (uint j = 0; j < 2; j++) {
+ verts[i_vert][j] = min_uchar[j] + ((float)polys[i_poly][j] * range_uchar[j]);
+ }
+ i_vert++;
+ i_poly++;
+ if (polys[i_poly - 1][0] == polys[i_poly][0] &&
+ polys[i_poly - 1][1] == polys[i_poly][1])
+ {
+ const uint verts_step_len = (&verts[i_vert]) - verts_step;
+ BLI_assert(verts_step_len >= 3);
+ const uint tris_len = (verts_step_len - 2);
+ BLI_polyfill_calc(verts_step, verts_step_len, -1, tris_step);
+ /* offset indices */
+ if (verts_step != verts) {
+ uint *t = tris_step[0];
+ const uint offset = (verts_step - verts);
+ uint tot = tris_len * 3;
+ while (tot--) {
+ *t += offset;
+ t++;
+ }
+ BLI_assert(t == tris_step[tris_len]);
+ }
+ verts_step += verts_step_len;
+ tris_step += tris_len;
+ i_poly++;
+ /* ignore the duplicate point */
+ }
+ }
+
+ /* We have vertices and tris, make a batch from this. */
+ static Gwn_VertFormat format = {0};
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ }
+
+ const uint verts_len = (verts_step - verts);
+ const uint tris_len = (tris_step - tris);
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, verts_len);
+
+ Gwn_VertBufRaw pos_step;
+ GWN_vertbuf_attr_get_raw_data(vbo, attr_id.pos, &pos_step);
+
+ for (uint i = 0; i < verts_len; i++) {
+ copy_v2_v2(GWN_vertbuf_raw_step(&pos_step), verts[i]);
+ }
+
+ Gwn_IndexBufBuilder elb;
+ GWN_indexbuf_init(&elb, GWN_PRIM_TRIS, tris_len, verts_len);
+ for (uint i = 0; i < tris_len; i++) {
+ GWN_indexbuf_add_tri_verts(&elb, UNPACK3(tris[i]));
+ }
+ Gwn_IndexBuf *indexbuf = GWN_indexbuf_build(&elb);
+
+ MEM_freeN(tris);
+ MEM_freeN(verts);
+
+ return GWN_batch_create_ex(
+ GWN_PRIM_TRIS, vbo,
+ indexbuf,
+ GWN_BATCH_OWNS_VBO | GWN_BATCH_OWNS_INDEX);
+}
+
+Gwn_Batch *GPU_batch_wire_from_poly_2d_encoded(
+ const uchar *polys_flat, uint polys_flat_len, const rctf *rect)
+{
+ const uchar (*polys)[2] = (const void *)polys_flat;
+ const uint polys_len = polys_flat_len / 2;
+ BLI_assert(polys_flat_len == polys_len * 2);
+
+ /* Over alloc */
+ /* Lines are pairs of (x, y) byte locations packed into an int32_t. */
+ int32_t *lines = MEM_mallocN(sizeof(*lines) * polys_len, __func__);
+ int32_t *lines_step = lines;
+
+ const float range_uchar[2] = {
+ (rect ? (rect->xmax - rect->xmin) : 2.0f) / 255.0f,
+ (rect ? (rect->ymax - rect->ymin) : 2.0f) / 255.0f,
+ };
+ const float min_uchar[2] = {
+ (rect ? rect->xmin : -1.0f),
+ (rect ? rect->ymin : -1.0f),
+ };
+
+ uint i_poly_prev = 0;
+ uint i_poly = 0;
+ while (i_poly != polys_len) {
+ i_poly++;
+ if (polys[i_poly - 1][0] == polys[i_poly][0] &&
+ polys[i_poly - 1][1] == polys[i_poly][1])
+ {
+ const uchar (*polys_step)[2] = polys + i_poly_prev;
+ const uint polys_step_len = i_poly - i_poly_prev;
+ BLI_assert(polys_step_len >= 2);
+ for (uint i_prev = polys_step_len - 1, i = 0; i < polys_step_len; i_prev = i++) {
+ union {
+ uint8_t as_u8[4];
+ uint16_t as_u16[2];
+ uint32_t as_u32;
+ } data;
+ data.as_u16[0] = *((const uint16_t *)polys_step[i_prev]);
+ data.as_u16[1] = *((const uint16_t *)polys_step[i]);
+ if (data.as_u16[0] > data.as_u16[1]) {
+ SWAP(uint16_t, data.as_u16[0], data.as_u16[1]);
+ }
+ *lines_step = data.as_u32;
+ lines_step++;
+ }
+ i_poly++;
+ i_poly_prev = i_poly;
+ /* ignore the duplicate point */
+ }
+ }
+
+ uint lines_len = lines_step - lines;
+
+ /* Hide Lines (we could make optional) */
+ {
+ qsort(lines, lines_len, sizeof(int32_t), BLI_sortutil_cmp_int);
+ lines_step = lines;
+
+ if (lines[0] != lines[1]) {
+ *lines_step++ = lines[0];
+ }
+ for (uint i_prev = 0, i = 1; i < lines_len; i_prev = i++) {
+ if (lines[i] != lines[i_prev]) {
+ *lines_step++ = lines[i];
+ }
+ }
+ lines_len = lines_step - lines;
+ }
+
+ /* We have vertices and tris, make a batch from this. */
+ static Gwn_VertFormat format = {0};
+ static struct { uint pos; } attr_id;
+ if (format.attrib_ct == 0) {
+ attr_id.pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ }
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ const uint vbo_len_capacity = lines_len * 2;
+ GWN_vertbuf_data_alloc(vbo, vbo_len_capacity);
+
+ Gwn_VertBufRaw pos_step;
+ GWN_vertbuf_attr_get_raw_data(vbo, attr_id.pos, &pos_step);
+
+ for (uint i = 0; i < lines_len; i++) {
+ union {
+ uint8_t as_u8_pair[2][2];
+ uint32_t as_u32;
+ } data;
+ data.as_u32 = lines[i];
+ for (uint k = 0; k < 2; k++) {
+ float *pos_v2 = GWN_vertbuf_raw_step(&pos_step);
+ for (uint j = 0; j < 2; j++) {
+ pos_v2[j] = min_uchar[j] + ((float)data.as_u8_pair[k][j] * range_uchar[j]);
+ }
+ }
+ }
+ BLI_assert(vbo_len_capacity == GWN_vertbuf_raw_used(&pos_step));
+ MEM_freeN(lines);
+ return GWN_batch_create_ex(
+ GWN_PRIM_LINES, vbo,
+ NULL,
+ GWN_BATCH_OWNS_VBO);
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Init/Exit
+ * \{ */
+
+void gpu_batch_init(void)
+{
+ gpu_batch_presets_init();
+}
+
+void gpu_batch_exit(void)
+{
+ gpu_batch_presets_exit();
+}
+
+/** \} */
diff --git a/source/blender/gpu/intern/gpu_batch_presets.c b/source/blender/gpu/intern/gpu_batch_presets.c
new file mode 100644
index 00000000000..9db04832a51
--- /dev/null
+++ b/source/blender/gpu/intern/gpu_batch_presets.c
@@ -0,0 +1,200 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2016 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Mike Erwin
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/gpu/intern/gpu_batch_presets.c
+ * \ingroup gpu
+ */
+
+#include "BLI_utildefines.h"
+#include "BLI_math.h"
+
+#include "GPU_batch.h"
+#include "gpu_shader_private.h"
+
+/* Struct to store 3D Batches and their format */
+static struct {
+ struct {
+ Gwn_Batch *sphere_high;
+ Gwn_Batch *sphere_med;
+ Gwn_Batch *sphere_low;
+ Gwn_Batch *sphere_wire_low;
+ Gwn_Batch *sphere_wire_med;
+ } batch;
+
+ Gwn_VertFormat format;
+
+ struct {
+ uint pos, nor;
+ } attr_id;
+} g_presets_3d = {0};
+
+/* We may want 2D presets later. */
+
+/* -------------------------------------------------------------------- */
+/** \name 3D Primitives
+ * \{ */
+
+static void batch_sphere_lat_lon_vert(
+ Gwn_VertBufRaw *pos_step, Gwn_VertBufRaw *nor_step,
+ float lat, float lon)
+{
+ float pos[3];
+ pos[0] = sinf(lat) * cosf(lon);
+ pos[1] = cosf(lat);
+ pos[2] = sinf(lat) * sinf(lon);
+ copy_v3_v3(GWN_vertbuf_raw_step(pos_step), pos);
+ copy_v3_v3(GWN_vertbuf_raw_step(nor_step), pos);
+}
+
+/* Replacement for gluSphere */
+static Gwn_Batch *batch_sphere(int lat_res, int lon_res)
+{
+ const float lon_inc = 2 * M_PI / lon_res;
+ const float lat_inc = M_PI / lat_res;
+ float lon, lat;
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&g_presets_3d.format);
+ const uint vbo_len = (lat_res - 1) * lon_res * 6;
+ GWN_vertbuf_data_alloc(vbo, vbo_len);
+
+ Gwn_VertBufRaw pos_step, nor_step;
+ GWN_vertbuf_attr_get_raw_data(vbo, g_presets_3d.attr_id.pos, &pos_step);
+ GWN_vertbuf_attr_get_raw_data(vbo, g_presets_3d.attr_id.nor, &nor_step);
+
+ lon = 0.0f;
+ for (int i = 0; i < lon_res; i++, lon += lon_inc) {
+ lat = 0.0f;
+ for (int j = 0; j < lat_res; j++, lat += lat_inc) {
+ if (j != lat_res - 1) { /* Pole */
+ batch_sphere_lat_lon_vert(&pos_step, &nor_step, lat + lat_inc, lon + lon_inc);
+ batch_sphere_lat_lon_vert(&pos_step, &nor_step, lat + lat_inc, lon);
+ batch_sphere_lat_lon_vert(&pos_step, &nor_step, lat, lon);
+ }
+
+ if (j != 0) { /* Pole */
+ batch_sphere_lat_lon_vert(&pos_step, &nor_step, lat, lon + lon_inc);
+ batch_sphere_lat_lon_vert(&pos_step, &nor_step, lat + lat_inc, lon + lon_inc);
+ batch_sphere_lat_lon_vert(&pos_step, &nor_step, lat, lon);
+ }
+ }
+ }
+
+ BLI_assert(vbo_len == GWN_vertbuf_raw_used(&pos_step));
+ BLI_assert(vbo_len == GWN_vertbuf_raw_used(&nor_step));
+
+ return GWN_batch_create_ex(GWN_PRIM_TRIS, vbo, NULL, GWN_BATCH_OWNS_VBO);
+}
+
+static Gwn_Batch *batch_sphere_wire(int lat_res, int lon_res)
+{
+ const float lon_inc = 2 * M_PI / lon_res;
+ const float lat_inc = M_PI / lat_res;
+ float lon, lat;
+
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&g_presets_3d.format);
+ const uint vbo_len = (lat_res * lon_res * 2) + ((lat_res - 1) * lon_res * 2);
+ GWN_vertbuf_data_alloc(vbo, vbo_len);
+
+ Gwn_VertBufRaw pos_step, nor_step;
+ GWN_vertbuf_attr_get_raw_data(vbo, g_presets_3d.attr_id.pos, &pos_step);
+ GWN_vertbuf_attr_get_raw_data(vbo, g_presets_3d.attr_id.nor, &nor_step);
+
+ lon = 0.0f;
+ for (int i = 0; i < lon_res; i++, lon += lon_inc) {
+ lat = 0.0f;
+ for (int j = 0; j < lat_res; j++, lat += lat_inc) {
+ batch_sphere_lat_lon_vert(&pos_step, &nor_step, lat + lat_inc, lon);
+ batch_sphere_lat_lon_vert(&pos_step, &nor_step, lat, lon);
+
+ if (j != lat_res - 1) { /* Pole */
+ batch_sphere_lat_lon_vert(&pos_step, &nor_step, lat + lat_inc, lon + lon_inc);
+ batch_sphere_lat_lon_vert(&pos_step, &nor_step, lat + lat_inc, lon);
+ }
+ }
+ }
+
+ BLI_assert(vbo_len == GWN_vertbuf_raw_used(&pos_step));
+ BLI_assert(vbo_len == GWN_vertbuf_raw_used(&nor_step));
+
+ return GWN_batch_create_ex(GWN_PRIM_LINES, vbo, NULL, GWN_BATCH_OWNS_VBO);
+}
+
+Gwn_Batch *GPU_batch_preset_sphere(int lod)
+{
+ BLI_assert(lod >= 0 && lod <= 2);
+
+ if (lod == 0) {
+ return g_presets_3d.batch.sphere_low;
+ }
+ else if (lod == 1) {
+ return g_presets_3d.batch.sphere_med;
+ }
+ else {
+ return g_presets_3d.batch.sphere_high;
+ }
+}
+
+Gwn_Batch *GPU_batch_preset_sphere_wire(int lod)
+{
+ BLI_assert(lod >= 0 && lod <= 1);
+
+ if (lod == 0) {
+ return g_presets_3d.batch.sphere_wire_low;
+ }
+ else {
+ return g_presets_3d.batch.sphere_wire_med;
+ }
+}
+
+/** \} */
+
+
+void gpu_batch_presets_init(void)
+{
+ if (g_presets_3d.format.attrib_ct == 0) {
+ Gwn_VertFormat *format = &g_presets_3d.format;
+ g_presets_3d.attr_id.pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ g_presets_3d.attr_id.nor = GWN_vertformat_attr_add(format, "nor", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ }
+
+ /* Hard coded resolution */
+ g_presets_3d.batch.sphere_low = batch_sphere(8, 16);
+ g_presets_3d.batch.sphere_med = batch_sphere(16, 10);
+ g_presets_3d.batch.sphere_high = batch_sphere(32, 24);
+
+ g_presets_3d.batch.sphere_wire_low = batch_sphere_wire(6, 8);
+ g_presets_3d.batch.sphere_wire_med = batch_sphere_wire(8, 16);
+}
+
+void gpu_batch_presets_exit(void)
+{
+ GWN_batch_discard(g_presets_3d.batch.sphere_low);
+ GWN_batch_discard(g_presets_3d.batch.sphere_med);
+ GWN_batch_discard(g_presets_3d.batch.sphere_high);
+ GWN_batch_discard(g_presets_3d.batch.sphere_wire_low);
+ GWN_batch_discard(g_presets_3d.batch.sphere_wire_med);
+}
diff --git a/source/blender/gpu/intern/gpu_buffers.c b/source/blender/gpu/intern/gpu_buffers.c
index d6e01b6765a..d0efee79ab0 100644
--- a/source/blender/gpu/intern/gpu_buffers.c
+++ b/source/blender/gpu/intern/gpu_buffers.c
@@ -35,8 +35,6 @@
#include <stddef.h>
#include <string.h>
-#include "GPU_glew.h"
-
#include "MEM_guardedalloc.h"
#include "BLI_bitmap.h"
@@ -55,10 +53,14 @@
#include "GPU_buffers.h"
#include "GPU_draw.h"
-#include "GPU_basic_shader.h"
+#include "GPU_immediate.h"
+#include "GPU_batch.h"
#include "bmesh.h"
+/* TODO: gawain support for baseelemarray */
+// #define USE_BASE_ELEM
+
typedef enum {
GPU_BUFFER_VERTEX_STATE = (1 << 0),
GPU_BUFFER_NORMAL_STATE = (1 << 1),
@@ -106,9 +108,8 @@ static ThreadMutex buffer_mutex = BLI_MUTEX_INITIALIZER;
/* multires global buffer, can be used for many grids having the same grid size */
typedef struct GridCommonGPUBuffer {
- GPUBuffer *mres_buffer;
+ Gwn_IndexBuf *mres_buffer;
int mres_prev_gridsize;
- GLenum mres_prev_index_type;
unsigned mres_prev_totquad;
} GridCommonGPUBuffer;
@@ -943,26 +944,12 @@ void GPU_buffer_draw_elements(GPUBuffer *UNUSED(elements), unsigned int mode, in
/* XXX: the rest of the code in this file is used for optimized PBVH
* drawing and doesn't interact at all with the buffer code above */
-/* Convenience struct for building the VBO. */
-typedef struct {
- float co[3];
- short no[3];
-
- /* inserting this to align the 'color' field to a four-byte
- * boundary; drastically increases viewport performance on my
- * drivers (Gallium/Radeon) --nicholasbishop */
- char pad[2];
-
- unsigned char color[3];
-} VertexBufferFormat;
-
struct GPU_PBVH_Buffers {
- /* opengl buffer handles */
- GPUBuffer *vert_buf, *index_buf, *index_buf_fast;
- GLenum index_type;
+ Gwn_IndexBuf *index_buf, *index_buf_fast;
+ Gwn_VertBuf *vert_buf;
- int *baseelemarray;
- void **baseindex;
+ Gwn_Batch *triangles;
+ Gwn_Batch *triangles_fast;
/* mesh pointers in case buffer allocation fails */
const MPoly *mpoly;
@@ -999,6 +986,39 @@ struct GPU_PBVH_Buffers {
float diffuse_color[4];
};
+typedef struct {
+ uint pos, nor, col;
+} VertexBufferAttrID;
+
+static void gpu_pbvh_vert_format_init__gwn(Gwn_VertFormat *format, VertexBufferAttrID *vbo_id)
+{
+ vbo_id->pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
+ vbo_id->nor = GWN_vertformat_attr_add(format, "nor", GWN_COMP_I16, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
+ vbo_id->col = GWN_vertformat_attr_add(format, "color", GWN_COMP_U8, 3, GWN_FETCH_INT_TO_FLOAT_UNIT);
+}
+
+static void gpu_pbvh_batch_init(GPU_PBVH_Buffers *buffers)
+{
+ /* force flushing to the GPU */
+ if (buffers->vert_buf->data) {
+ GWN_vertbuf_use(buffers->vert_buf);
+ }
+
+ GWN_BATCH_DISCARD_SAFE(buffers->triangles);
+ buffers->triangles = GWN_batch_create(
+ GWN_PRIM_TRIS, buffers->vert_buf,
+ /* can be NULL */
+ buffers->index_buf);
+
+ GWN_BATCH_DISCARD_SAFE(buffers->triangles_fast);
+ if (buffers->index_buf_fast) {
+ buffers->triangles_fast = GWN_batch_create(
+ GWN_PRIM_TRIS, buffers->vert_buf,
+ /* can be NULL */
+ buffers->index_buf_fast);
+ }
+}
+
static float gpu_color_from_mask(float mask)
{
return 1.0f - mask * 0.75f;
@@ -1040,8 +1060,6 @@ void GPU_pbvh_mesh_buffers_update(
{
const bool show_diffuse_color = (update_flags & GPU_PBVH_BUFFERS_SHOW_DIFFUSE_COLOR) != 0;
const bool show_mask = (update_flags & GPU_PBVH_BUFFERS_SHOW_MASK) != 0;
- VertexBufferFormat *vert_data;
- int i;
buffers->vmask = vmask;
buffers->show_diffuse_color = show_diffuse_color;
@@ -1067,35 +1085,39 @@ void GPU_pbvh_mesh_buffers_update(
rgba_float_to_uchar(diffuse_color_ub, diffuse_color);
/* Build VBO */
- if (buffers->vert_buf)
- GPU_buffer_free(buffers->vert_buf);
- buffers->vert_buf = GPU_buffer_alloc(sizeof(VertexBufferFormat) * totelem);
- vert_data = GPU_buffer_lock(buffers->vert_buf, GPU_BINDING_ARRAY);
+ GWN_VERTBUF_DISCARD_SAFE(buffers->vert_buf);
+
+ /* match 'VertexBufferFormat' */
+ Gwn_VertFormat format = {0};
+ VertexBufferAttrID vbo_id;
+ gpu_pbvh_vert_format_init__gwn(&format, &vbo_id);
+
+ buffers->vert_buf = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(buffers->vert_buf, totelem);
- if (vert_data) {
+ if (buffers->vert_buf->data) {
/* Vertex data is shared if smooth-shaded, but separate
* copies are made for flat shading because normals
* shouldn't be shared. */
if (buffers->smooth) {
- for (i = 0; i < totvert; ++i) {
+ for (uint i = 0; i < totvert; ++i) {
const MVert *v = &mvert[vert_indices[i]];
- VertexBufferFormat *out = vert_data + i;
-
- copy_v3_v3(out->co, v->co);
- memcpy(out->no, v->no, sizeof(short) * 3);
+ GWN_vertbuf_attr_set(buffers->vert_buf, vbo_id.pos, i, v->co);
+ GWN_vertbuf_attr_set(buffers->vert_buf, vbo_id.nor, i, v->no);
}
- for (i = 0; i < buffers->face_indices_len; i++) {
+ for (uint i = 0; i < buffers->face_indices_len; i++) {
const MLoopTri *lt = &buffers->looptri[buffers->face_indices[i]];
for (uint j = 0; j < 3; j++) {
- VertexBufferFormat *out = vert_data + face_vert_indices[i][j];
-
+ int vidx = face_vert_indices[i][j];
if (vmask && show_mask) {
- uint v_index = buffers->mloop[lt->tri[j]].v;
- gpu_color_from_mask_copy(vmask[v_index], diffuse_color, out->color);
+ int v_index = buffers->mloop[lt->tri[j]].v;
+ uchar color_ub[3];
+ gpu_color_from_mask_copy(vmask[v_index], diffuse_color, color_ub);
+ GWN_vertbuf_attr_set(buffers->vert_buf, vbo_id.col, vidx, color_ub);
}
else {
- copy_v3_v3_uchar(out->color, diffuse_color_ub);
+ GWN_vertbuf_attr_set(buffers->vert_buf, vbo_id.col, vidx, diffuse_color_ub);
}
}
}
@@ -1104,8 +1126,9 @@ void GPU_pbvh_mesh_buffers_update(
/* calculate normal for each polygon only once */
unsigned int mpoly_prev = UINT_MAX;
short no[3];
+ int vbo_index = 0;
- for (i = 0; i < buffers->face_indices_len; ++i) {
+ for (uint i = 0; i < buffers->face_indices_len; i++) {
const MLoopTri *lt = &buffers->looptri[buffers->face_indices[i]];
const unsigned int vtri[3] = {
buffers->mloop[lt->tri[0]].v,
@@ -1136,22 +1159,20 @@ void GPU_pbvh_mesh_buffers_update(
for (uint j = 0; j < 3; j++) {
const MVert *v = &mvert[vtri[j]];
- VertexBufferFormat *out = vert_data;
- copy_v3_v3(out->co, v->co);
- copy_v3_v3_short(out->no, no);
- copy_v3_v3_uchar(out->color, color_ub);
+ GWN_vertbuf_attr_set(buffers->vert_buf, vbo_id.pos, vbo_index, v->co);
+ GWN_vertbuf_attr_set(buffers->vert_buf, vbo_id.nor, vbo_index, no);
+ GWN_vertbuf_attr_set(buffers->vert_buf, vbo_id.col, vbo_index, color_ub);
- vert_data++;
+ vbo_index++;
}
}
}
- GPU_buffer_unlock(buffers->vert_buf, GPU_BINDING_ARRAY);
+ gpu_pbvh_batch_init(buffers);
}
else {
- GPU_buffer_free(buffers->vert_buf);
- buffers->vert_buf = NULL;
+ GWN_VERTBUF_DISCARD_SAFE(buffers->vert_buf);
}
}
@@ -1166,12 +1187,17 @@ GPU_PBVH_Buffers *GPU_pbvh_mesh_buffers_build(
const int face_indices_len)
{
GPU_PBVH_Buffers *buffers;
- unsigned short *tri_data;
- int i, j, tottri;
+ int i, tottri;
buffers = MEM_callocN(sizeof(GPU_PBVH_Buffers), "GPU_Buffers");
- buffers->index_type = GL_UNSIGNED_SHORT;
+
+ /* smooth or flat for all */
+#if 0
buffers->smooth = mpoly[looptri[face_indices[0]].poly].flag & ME_SMOOTH;
+#else
+ /* for DrawManager we dont support mixed smooth/flat */
+ buffers->smooth = (mpoly[0].flag & ME_SMOOTH) != 0;
+#endif
buffers->show_diffuse_color = false;
buffers->show_mask = true;
@@ -1200,35 +1226,28 @@ GPU_PBVH_Buffers *GPU_pbvh_mesh_buffers_build(
* shading requires separate vertex normals so an index buffer is
* can't be used there. */
if (buffers->smooth) {
- buffers->index_buf = GPU_buffer_alloc(sizeof(unsigned short) * tottri * 3);
- buffers->is_index_buf_global = false;
- }
-
- if (buffers->index_buf) {
/* Fill the triangle buffer */
- tri_data = GPU_buffer_lock(buffers->index_buf, GPU_BINDING_INDEX);
- if (tri_data) {
- for (i = 0; i < face_indices_len; ++i) {
- const MLoopTri *lt = &looptri[face_indices[i]];
-
- /* Skip hidden faces */
- if (paint_is_face_hidden(lt, mvert, mloop))
- continue;
-
- for (j = 0; j < 3; ++j) {
- *tri_data = face_vert_indices[i][j];
- tri_data++;
- }
- }
- GPU_buffer_unlock(buffers->index_buf, GPU_BINDING_INDEX);
+ buffers->index_buf = NULL;
+ Gwn_IndexBufBuilder elb;
+ GWN_indexbuf_init(&elb, GWN_PRIM_TRIS, tottri, INT_MAX);
+
+ for (i = 0; i < face_indices_len; ++i) {
+ const MLoopTri *lt = &looptri[face_indices[i]];
+
+ /* Skip hidden faces */
+ if (paint_is_face_hidden(lt, mvert, mloop))
+ continue;
+
+ GWN_indexbuf_add_tri_verts(&elb, UNPACK3(face_vert_indices[i]));
}
- else {
- if (!buffers->is_index_buf_global) {
- GPU_buffer_free(buffers->index_buf);
- }
- buffers->index_buf = NULL;
- buffers->is_index_buf_global = false;
+ buffers->index_buf = GWN_indexbuf_build(&elb);
+ }
+ else {
+ if (!buffers->is_index_buf_global) {
+ GWN_INDEXBUF_DISCARD_SAFE(buffers->index_buf);
}
+ buffers->index_buf = NULL;
+ buffers->is_index_buf_global = false;
}
buffers->tot_tri = tottri;
@@ -1251,7 +1270,6 @@ void GPU_pbvh_grid_buffers_update(
{
const bool show_diffuse_color = (update_flags & GPU_PBVH_BUFFERS_SHOW_DIFFUSE_COLOR) != 0;
const bool show_mask = (update_flags & GPU_PBVH_BUFFERS_SHOW_MASK) != 0;
- VertexBufferFormat *vert_data;
int i, j, k, x, y;
buffers->show_diffuse_color = show_diffuse_color;
@@ -1260,12 +1278,13 @@ void GPU_pbvh_grid_buffers_update(
buffers->smooth = grid_flag_mats[grid_indices[0]].flag & ME_SMOOTH;
/* Build VBO */
- if (buffers->vert_buf) {
+ if (buffers->index_buf) {
const int has_mask = key->has_mask;
float diffuse_color[4] = {0.8f, 0.8f, 0.8f, 1.0f};
- if (buffers->use_matcaps)
+ if (buffers->use_matcaps) {
diffuse_color[0] = diffuse_color[1] = diffuse_color[2] = 1.0;
+ }
else if (show_diffuse_color) {
const DMFlagMat *flags = &grid_flag_mats[grid_indices[0]];
@@ -1274,38 +1293,48 @@ void GPU_pbvh_grid_buffers_update(
copy_v4_v4(buffers->diffuse_color, diffuse_color);
- vert_data = GPU_buffer_lock_stream(buffers->vert_buf, GPU_BINDING_ARRAY);
- if (vert_data) {
+ Gwn_VertFormat format = {0};
+ VertexBufferAttrID vbo_id;
+ gpu_pbvh_vert_format_init__gwn(&format, &vbo_id);
+
+ /* Build coord/normal VBO */
+ GWN_VERTBUF_DISCARD_SAFE(buffers->vert_buf);
+ buffers->vert_buf = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(buffers->vert_buf, totgrid * key->grid_area);
+
+ uint vbo_index_offset = 0;
+ if (buffers->vert_buf->data) {
for (i = 0; i < totgrid; ++i) {
- VertexBufferFormat *vd = vert_data;
CCGElem *grid = grids[grid_indices[i]];
+ int vbo_index = vbo_index_offset;
for (y = 0; y < key->grid_size; y++) {
for (x = 0; x < key->grid_size; x++) {
CCGElem *elem = CCG_grid_elem(key, grid, x, y);
-
- copy_v3_v3(vd->co, CCG_elem_co(key, elem));
+ GWN_vertbuf_attr_set(buffers->vert_buf, vbo_id.pos, vbo_index, CCG_elem_co(key, elem));
+
if (buffers->smooth) {
- normal_float_to_short_v3(vd->no, CCG_elem_no(key, elem));
+ short no_short[3];
+ normal_float_to_short_v3(no_short, CCG_elem_no(key, elem));
+ GWN_vertbuf_attr_set(buffers->vert_buf, vbo_id.nor, vbo_index, no_short);
if (has_mask) {
+ uchar color_ub[3];
if (show_mask) {
gpu_color_from_mask_copy(*CCG_elem_mask(key, elem),
- diffuse_color, vd->color);
+ diffuse_color, color_ub);
}
else {
- F3TOCHAR3(diffuse_color, vd->color);
+ F3TOCHAR3(diffuse_color, color_ub);
}
+ GWN_vertbuf_attr_set(buffers->vert_buf, vbo_id.col, vbo_index, color_ub);
}
}
- vd++;
+ vbo_index += 1;
}
}
if (!buffers->smooth) {
- /* for flat shading, recalc normals and set the last vertex of
- * each triangle in the index buffer to have the flat normal as
- * that is what opengl will use */
for (j = 0; j < key->grid_size - 1; j++) {
for (k = 0; k < key->grid_size - 1; k++) {
CCGElem *elems[4] = {
@@ -1322,10 +1351,13 @@ void GPU_pbvh_grid_buffers_update(
CCG_elem_co(key, elems[2]),
CCG_elem_co(key, elems[3]));
- vd = vert_data + (j + 1) * key->grid_size + k;
- normal_float_to_short_v3(vd->no, fno);
+ vbo_index = vbo_index_offset + ((j + 1) * key->grid_size + k);
+ short no_short[3];
+ normal_float_to_short_v3(no_short, fno);
+ GWN_vertbuf_attr_set(buffers->vert_buf, vbo_id.nor, vbo_index, no_short);
if (has_mask) {
+ uchar color_ub[3];
if (show_mask) {
gpu_color_from_mask_quad_copy(key,
elems[0],
@@ -1333,24 +1365,24 @@ void GPU_pbvh_grid_buffers_update(
elems[2],
elems[3],
diffuse_color,
- vd->color);
+ color_ub);
}
else {
- F3TOCHAR3(diffuse_color, vd->color);
+ F3TOCHAR3(diffuse_color, color_ub);
}
+ GWN_vertbuf_attr_set(buffers->vert_buf, vbo_id.col, vbo_index, color_ub);
}
}
}
}
- vert_data += key->grid_area;
+ vbo_index_offset += key->grid_area;
}
- GPU_buffer_unlock(buffers->vert_buf, GPU_BINDING_ARRAY);
+ gpu_pbvh_batch_init(buffers);
}
else {
- GPU_buffer_free(buffers->vert_buf);
- buffers->vert_buf = NULL;
+ GWN_VERTBUF_DISCARD_SAFE(buffers->vert_buf);
}
}
@@ -1365,57 +1397,54 @@ void GPU_pbvh_grid_buffers_update(
/* Build the element array buffer of grid indices using either
* unsigned shorts or unsigned ints. */
-#define FILL_QUAD_BUFFER(type_, tot_quad_, buffer_) \
+#define FILL_QUAD_BUFFER(max_vert_, tot_quad_, buffer_) \
{ \
- type_ *tri_data; \
int offset = 0; \
int i, j, k; \
- buffer_ = GPU_buffer_alloc(sizeof(type_) * (tot_quad_) * 6); \
+ \
+ Gwn_IndexBufBuilder elb; \
+ GWN_indexbuf_init( \
+ &elb, GWN_PRIM_TRIS, tot_quad_ * 2, max_vert_); \
\
/* Fill the buffer */ \
- tri_data = GPU_buffer_lock(buffer_, GPU_BINDING_INDEX); \
- if (tri_data) { \
- for (i = 0; i < totgrid; ++i) { \
- BLI_bitmap *gh = NULL; \
- if (grid_hidden) \
- gh = grid_hidden[(grid_indices)[i]]; \
+ for (i = 0; i < totgrid; ++i) { \
+ BLI_bitmap *gh = NULL; \
+ if (grid_hidden) \
+ gh = grid_hidden[(grid_indices)[i]]; \
\
- for (j = 0; j < gridsize - 1; ++j) { \
- for (k = 0; k < gridsize - 1; ++k) { \
- /* Skip hidden grid face */ \
- if (gh && \
- paint_is_grid_face_hidden(gh, \
- gridsize, k, j)) \
- continue; \
- \
- *(tri_data++) = offset + j * gridsize + k + 1; \
- *(tri_data++) = offset + j * gridsize + k; \
- *(tri_data++) = offset + (j + 1) * gridsize + k; \
- \
- *(tri_data++) = offset + (j + 1) * gridsize + k + 1; \
- *(tri_data++) = offset + j * gridsize + k + 1; \
- *(tri_data++) = offset + (j + 1) * gridsize + k; \
- } \
- } \
- \
- offset += gridsize * gridsize; \
+ for (j = 0; j < gridsize - 1; ++j) { \
+ for (k = 0; k < gridsize - 1; ++k) { \
+ /* Skip hidden grid face */ \
+ if (gh && paint_is_grid_face_hidden( \
+ gh, gridsize, k, j)) \
+ { \
+ continue; \
+ } \
+ GWN_indexbuf_add_generic_vert(&elb, offset + j * gridsize + k + 1); \
+ GWN_indexbuf_add_generic_vert(&elb, offset + j * gridsize + k); \
+ GWN_indexbuf_add_generic_vert(&elb, offset + (j + 1) * gridsize + k); \
+ \
+ GWN_indexbuf_add_generic_vert(&elb, offset + (j + 1) * gridsize + k + 1); \
+ GWN_indexbuf_add_generic_vert(&elb, offset + j * gridsize + k + 1); \
+ GWN_indexbuf_add_generic_vert(&elb, offset + (j + 1) * gridsize + k); \
+ } \
} \
- GPU_buffer_unlock(buffer_, GPU_BINDING_INDEX); \
- } \
- else { \
- GPU_buffer_free(buffer_); \
- (buffer_) = NULL; \
+ \
+ offset += gridsize * gridsize; \
} \
+ buffer_ = GWN_indexbuf_build(&elb); \
} (void)0
/* end FILL_QUAD_BUFFER */
-static GPUBuffer *gpu_get_grid_buffer(
- int gridsize, GLenum *index_type, unsigned *totquad, GridCommonGPUBuffer **grid_common_gpu_buffer)
+static Gwn_IndexBuf *gpu_get_grid_buffer(
+ int gridsize, unsigned *totquad, GridCommonGPUBuffer **grid_common_gpu_buffer,
+ /* remove this arg when gawain gets base-vertex support! */
+ int totgrid)
{
/* used in the FILL_QUAD_BUFFER macro */
BLI_bitmap * const *grid_hidden = NULL;
const int *grid_indices = NULL;
- int totgrid = 1;
+ // int totgrid = 1;
GridCommonGPUBuffer *gridbuff = *grid_common_gpu_buffer;
@@ -1423,65 +1452,48 @@ static GPUBuffer *gpu_get_grid_buffer(
*grid_common_gpu_buffer = gridbuff = MEM_mallocN(sizeof(GridCommonGPUBuffer), __func__);
gridbuff->mres_buffer = NULL;
gridbuff->mres_prev_gridsize = -1;
- gridbuff->mres_prev_index_type = 0;
gridbuff->mres_prev_totquad = 0;
}
/* VBO is already built */
if (gridbuff->mres_buffer && gridbuff->mres_prev_gridsize == gridsize) {
- *index_type = gridbuff->mres_prev_index_type;
*totquad = gridbuff->mres_prev_totquad;
return gridbuff->mres_buffer;
}
/* we can't reuse old, delete the existing buffer */
else if (gridbuff->mres_buffer) {
- GPU_buffer_free(gridbuff->mres_buffer);
+ GWN_indexbuf_discard(gridbuff->mres_buffer);
+ gridbuff->mres_buffer = NULL;
}
/* Build new VBO */
- *totquad = (gridsize - 1) * (gridsize - 1);
+ *totquad = (gridsize - 1) * (gridsize - 1) * totgrid;
+ int max_vert = gridsize * gridsize * totgrid;
- if (gridsize * gridsize < USHRT_MAX) {
- *index_type = GL_UNSIGNED_SHORT;
- FILL_QUAD_BUFFER(unsigned short, *totquad, gridbuff->mres_buffer);
- }
- else {
- *index_type = GL_UNSIGNED_INT;
- FILL_QUAD_BUFFER(unsigned int, *totquad, gridbuff->mres_buffer);
- }
+ FILL_QUAD_BUFFER(max_vert, *totquad, gridbuff->mres_buffer);
gridbuff->mres_prev_gridsize = gridsize;
- gridbuff->mres_prev_index_type = *index_type;
gridbuff->mres_prev_totquad = *totquad;
return gridbuff->mres_buffer;
}
-#define FILL_FAST_BUFFER(type_) \
+#define FILL_FAST_BUFFER() \
{ \
- type_ *buffer; \
- buffers->index_buf_fast = GPU_buffer_alloc(sizeof(type_) * 6 * totgrid); \
- buffer = GPU_buffer_lock(buffers->index_buf_fast, GPU_BINDING_INDEX); \
- if (buffer) { \
- int i; \
- for (i = 0; i < totgrid; i++) { \
- int currentquad = i * 6; \
- buffer[currentquad] = i * gridsize * gridsize + gridsize - 1; \
- buffer[currentquad + 1] = i * gridsize * gridsize; \
- buffer[currentquad + 2] = (i + 1) * gridsize * gridsize - gridsize; \
- buffer[currentquad + 3] = (i + 1) * gridsize * gridsize - 1; \
- buffer[currentquad + 4] = i * gridsize * gridsize + gridsize - 1; \
- buffer[currentquad + 5] = (i + 1) * gridsize * gridsize - gridsize; \
- } \
- GPU_buffer_unlock(buffers->index_buf_fast, GPU_BINDING_INDEX); \
- } \
- else { \
- GPU_buffer_free(buffers->index_buf_fast); \
- buffers->index_buf_fast = NULL; \
+ Gwn_IndexBufBuilder elb; \
+ GWN_indexbuf_init(&elb, GWN_PRIM_TRIS, 6 * totgrid, INT_MAX); \
+ for (int i = 0; i < totgrid; i++) { \
+ GWN_indexbuf_add_generic_vert(&elb, i * gridsize * gridsize + gridsize - 1); \
+ GWN_indexbuf_add_generic_vert(&elb, i * gridsize * gridsize); \
+ GWN_indexbuf_add_generic_vert(&elb, (i + 1) * gridsize * gridsize - gridsize); \
+ GWN_indexbuf_add_generic_vert(&elb, (i + 1) * gridsize * gridsize - 1); \
+ GWN_indexbuf_add_generic_vert(&elb, i * gridsize * gridsize + gridsize - 1); \
+ GWN_indexbuf_add_generic_vert(&elb, (i + 1) * gridsize * gridsize - gridsize); \
} \
+ buffers->index_buf_fast = GWN_indexbuf_build(&elb); \
} (void)0
GPU_PBVH_Buffers *GPU_pbvh_grid_buffers_build(
- int *grid_indices, int totgrid, BLI_bitmap **grid_hidden, int gridsize, const CCGKey *key,
+ int *grid_indices, int totgrid, BLI_bitmap **grid_hidden, int gridsize, const CCGKey *UNUSED(key),
GridCommonGPUBuffer **grid_common_gpu_buffer)
{
GPU_PBVH_Buffers *buffers;
@@ -1504,39 +1516,26 @@ GPU_PBVH_Buffers *GPU_pbvh_grid_buffers_build(
return buffers;
/* create and fill indices of the fast buffer too */
- if (totgrid * gridsize * gridsize < USHRT_MAX) {
- FILL_FAST_BUFFER(unsigned short);
- }
- else {
- FILL_FAST_BUFFER(unsigned int);
- }
+ FILL_FAST_BUFFER();
if (totquad == fully_visible_totquad) {
buffers->index_buf = gpu_get_grid_buffer(
- gridsize, &buffers->index_type, &buffers->tot_quad, grid_common_gpu_buffer);
+ gridsize, &buffers->tot_quad, grid_common_gpu_buffer, totgrid);
buffers->has_hidden = false;
buffers->is_index_buf_global = true;
}
else {
+ uint max_vert = totgrid * gridsize * gridsize;
buffers->tot_quad = totquad;
- if (totgrid * gridsize * gridsize < USHRT_MAX) {
- buffers->index_type = GL_UNSIGNED_SHORT;
- FILL_QUAD_BUFFER(unsigned short, totquad, buffers->index_buf);
- }
- else {
- buffers->index_type = GL_UNSIGNED_INT;
- FILL_QUAD_BUFFER(unsigned int, totquad, buffers->index_buf);
- }
+ FILL_QUAD_BUFFER(max_vert, totquad, buffers->index_buf);
- buffers->has_hidden = true;
+ buffers->has_hidden = false;
buffers->is_index_buf_global = false;
}
+#ifdef USE_BASE_ELEM
/* Build coord/normal VBO */
- if (buffers->index_buf)
- buffers->vert_buf = GPU_buffer_alloc(sizeof(VertexBufferFormat) * totgrid * key->grid_area);
-
if (GLEW_ARB_draw_elements_base_vertex /* 3.2 */) {
int i;
buffers->baseelemarray = MEM_mallocN(sizeof(int) * totgrid * 2, "GPU_PBVH_Buffers.baseelemarray");
@@ -1547,6 +1546,7 @@ GPU_PBVH_Buffers *GPU_pbvh_grid_buffers_build(
buffers->baseindex[i] = NULL;
}
}
+#endif
return buffers;
}
@@ -1559,32 +1559,45 @@ GPU_PBVH_Buffers *GPU_pbvh_grid_buffers_build(
* index '*v_index' in the 'vert_data' array and '*v_index' is
* incremented.
*/
-static void gpu_bmesh_vert_to_buffer_copy(BMVert *v,
- VertexBufferFormat *vert_data,
- int *v_index,
- const float fno[3],
- const float *fmask,
- const int cd_vert_mask_offset,
- const float diffuse_color[4],
- const bool show_mask)
+static void gpu_bmesh_vert_to_buffer_copy__gwn(
+ BMVert *v,
+ Gwn_VertBuf *vert_buf,
+ const VertexBufferAttrID *vbo_id,
+ int *v_index,
+ const float fno[3],
+ const float *fmask,
+ const int cd_vert_mask_offset,
+ const float diffuse_color[4],
+ const bool show_mask)
{
if (!BM_elem_flag_test(v, BM_ELEM_HIDDEN)) {
- VertexBufferFormat *vd = &vert_data[*v_index];
/* Set coord, normal, and mask */
- copy_v3_v3(vd->co, v->co);
- normal_float_to_short_v3(vd->no, fno ? fno : v->no);
+ GWN_vertbuf_attr_set(vert_buf, vbo_id->pos, *v_index, v->co);
- float effective_mask;
- if (show_mask) {
- effective_mask = fmask ? *fmask
- : BM_ELEM_CD_GET_FLOAT(v, cd_vert_mask_offset);
- }
- else {
- effective_mask = 0.0f;
+ {
+ short no_short[3];
+ normal_float_to_short_v3(no_short, fno ? fno : v->no);
+ GWN_vertbuf_attr_set(vert_buf, vbo_id->nor, *v_index, no_short);
}
- gpu_color_from_mask_copy(effective_mask, diffuse_color, vd->color);
+ {
+ uchar color_ub[3];
+ float effective_mask;
+ if (show_mask) {
+ effective_mask = fmask ? *fmask
+ : BM_ELEM_CD_GET_FLOAT(v, cd_vert_mask_offset);
+ }
+ else {
+ effective_mask = 0.0f;
+ }
+
+ gpu_color_from_mask_copy(
+ effective_mask,
+ diffuse_color,
+ color_ub);
+ GWN_vertbuf_attr_set(vert_buf, vbo_id->col, *v_index, color_ub);
+ }
/* Assign index for use in the triangle index buffer */
/* note: caller must set: bm->elem_index_dirty |= BM_VERT; */
@@ -1643,8 +1656,6 @@ void GPU_pbvh_bmesh_buffers_update(
{
const bool show_diffuse_color = (update_flags & GPU_PBVH_BUFFERS_SHOW_DIFFUSE_COLOR) != 0;
const bool show_mask = (update_flags & GPU_PBVH_BUFFERS_SHOW_MASK) != 0;
- VertexBufferFormat *vert_data;
- void *tri_data;
int tottri, totvert, maxvert = 0;
float diffuse_color[4] = {0.8f, 0.8f, 0.8f, 1.0f};
@@ -1684,13 +1695,17 @@ void GPU_pbvh_bmesh_buffers_update(
copy_v4_v4(buffers->diffuse_color, diffuse_color);
/* Initialize vertex buffer */
- if (buffers->vert_buf)
- GPU_buffer_free(buffers->vert_buf);
- buffers->vert_buf = GPU_buffer_alloc(sizeof(VertexBufferFormat) * totvert);
+ GWN_VERTBUF_DISCARD_SAFE(buffers->vert_buf);
+ /* match 'VertexBufferFormat' */
+ Gwn_VertFormat format = {0};
+ VertexBufferAttrID vbo_id;
+ gpu_pbvh_vert_format_init__gwn(&format, &vbo_id);
+
+ buffers->vert_buf = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(buffers->vert_buf, totvert);
/* Fill vertex buffer */
- vert_data = GPU_buffer_lock(buffers->vert_buf, GPU_BINDING_ARRAY);
- if (vert_data) {
+ if (buffers->vert_buf->data) {
int v_index = 0;
if (buffers->smooth) {
@@ -1701,17 +1716,19 @@ void GPU_pbvh_bmesh_buffers_update(
bm->elem_index_dirty |= BM_VERT;
GSET_ITER (gs_iter, bm_unique_verts) {
- gpu_bmesh_vert_to_buffer_copy(BLI_gsetIterator_getKey(&gs_iter),
- vert_data, &v_index, NULL, NULL,
- cd_vert_mask_offset, diffuse_color,
- show_mask);
+ gpu_bmesh_vert_to_buffer_copy__gwn(
+ BLI_gsetIterator_getKey(&gs_iter),
+ buffers->vert_buf, &vbo_id, &v_index, NULL, NULL,
+ cd_vert_mask_offset, diffuse_color,
+ show_mask);
}
GSET_ITER (gs_iter, bm_other_verts) {
- gpu_bmesh_vert_to_buffer_copy(BLI_gsetIterator_getKey(&gs_iter),
- vert_data, &v_index, NULL, NULL,
- cd_vert_mask_offset, diffuse_color,
- show_mask);
+ gpu_bmesh_vert_to_buffer_copy__gwn(
+ BLI_gsetIterator_getKey(&gs_iter),
+ buffers->vert_buf, &vbo_id, &v_index, NULL, NULL,
+ cd_vert_mask_offset, diffuse_color,
+ show_mask);
}
maxvert = v_index;
@@ -1741,10 +1758,11 @@ void GPU_pbvh_bmesh_buffers_update(
fmask /= 3.0f;
for (i = 0; i < 3; i++) {
- gpu_bmesh_vert_to_buffer_copy(v[i], vert_data,
- &v_index, f->no, &fmask,
- cd_vert_mask_offset, diffuse_color,
- show_mask);
+ gpu_bmesh_vert_to_buffer_copy__gwn(
+ v[i], buffers->vert_buf, &vbo_id,
+ &v_index, f->no, &fmask,
+ cd_vert_mask_offset, diffuse_color,
+ show_mask);
}
}
}
@@ -1752,32 +1770,30 @@ void GPU_pbvh_bmesh_buffers_update(
buffers->tot_tri = tottri;
}
- GPU_buffer_unlock(buffers->vert_buf, GPU_BINDING_ARRAY);
-
/* gpu_bmesh_vert_to_buffer_copy sets dirty index values */
bm->elem_index_dirty |= BM_VERT;
}
else {
+ GWN_VERTBUF_DISCARD_SAFE(buffers->vert_buf);
/* Memory map failed */
- GPU_buffer_free(buffers->vert_buf);
- buffers->vert_buf = NULL;
return;
}
if (buffers->smooth) {
- const int use_short = (maxvert < USHRT_MAX);
+ /* Fill the triangle buffer */
+ buffers->index_buf = NULL;
+ Gwn_IndexBufBuilder elb;
+ GWN_indexbuf_init(&elb, GWN_PRIM_TRIS, tottri, maxvert);
/* Initialize triangle index buffer */
- if (buffers->index_buf && !buffers->is_index_buf_global)
- GPU_buffer_free(buffers->index_buf);
+ if (buffers->triangles && !buffers->is_index_buf_global) {
+ GWN_BATCH_DISCARD_SAFE(buffers->triangles);
+ }
buffers->is_index_buf_global = false;
- buffers->index_buf = GPU_buffer_alloc((use_short ?
- sizeof(unsigned short) :
- sizeof(unsigned int)) * 3 * tottri);
/* Fill triangle index buffer */
- tri_data = GPU_buffer_lock(buffers->index_buf, GPU_BINDING_INDEX);
- if (tri_data) {
+
+ {
GSetIterator gs_iter;
GSET_ITER (gs_iter, bm_faces) {
@@ -1789,46 +1805,25 @@ void GPU_pbvh_bmesh_buffers_update(
l_iter = l_first = BM_FACE_FIRST_LOOP(f);
do {
- BMVert *v = l_iter->v;
- if (use_short) {
- unsigned short *elem = tri_data;
- (*elem) = BM_elem_index_get(v);
- elem++;
- tri_data = elem;
- }
- else {
- unsigned int *elem = tri_data;
- (*elem) = BM_elem_index_get(v);
- elem++;
- tri_data = elem;
- }
+ GWN_indexbuf_add_generic_vert(&elb, BM_elem_index_get(l_iter->v));
} while ((l_iter = l_iter->next) != l_first);
}
}
- GPU_buffer_unlock(buffers->index_buf, GPU_BINDING_INDEX);
-
buffers->tot_tri = tottri;
- buffers->index_type = (use_short ?
- GL_UNSIGNED_SHORT :
- GL_UNSIGNED_INT);
- }
- else {
- /* Memory map failed */
- if (!buffers->is_index_buf_global) {
- GPU_buffer_free(buffers->index_buf);
- }
- buffers->index_buf = NULL;
- buffers->is_index_buf_global = false;
+
+ buffers->index_buf = GWN_indexbuf_build(&elb);
}
}
else if (buffers->index_buf) {
if (!buffers->is_index_buf_global) {
- GPU_buffer_free(buffers->index_buf);
+ GWN_INDEXBUF_DISCARD_SAFE(buffers->index_buf);
}
buffers->index_buf = NULL;
buffers->is_index_buf_global = false;
}
+
+ gpu_pbvh_batch_init(buffers);
}
GPU_PBVH_Buffers *GPU_pbvh_bmesh_buffers_build(bool smooth_shading)
@@ -1849,145 +1844,42 @@ void GPU_pbvh_buffers_draw(
GPU_PBVH_Buffers *buffers, DMSetMaterial setMaterial,
bool wireframe, bool fast)
{
- bool do_fast = fast && buffers->index_buf_fast;
- /* sets material from the first face, to solve properly face would need to
- * be sorted in buckets by materials */
- if (setMaterial) {
- if (buffers->face_indices_len) {
- const MLoopTri *lt = &buffers->looptri[buffers->face_indices[0]];
- const MPoly *mp = &buffers->mpoly[lt->poly];
- if (!setMaterial(mp->mat_nr + 1, NULL))
- return;
- }
- else if (buffers->totgrid) {
- const DMFlagMat *f = &buffers->grid_flag_mats[buffers->grid_indices[0]];
- if (!setMaterial(f->mat_nr + 1, NULL))
- return;
- }
- else {
- if (!setMaterial(1, NULL))
- return;
- }
- }
-
- if (buffers->vert_buf) {
- char *base = NULL;
- char *index_base = NULL;
- /* weak inspection of bound options, should not be necessary ideally */
- const int bound_options_old = GPU_basic_shader_bound_options();
- int bound_options_new = 0;
- glEnableClientState(GL_VERTEX_ARRAY);
- if (!wireframe) {
- glEnableClientState(GL_NORMAL_ARRAY);
- glEnableClientState(GL_COLOR_ARRAY);
-
- bound_options_new |= GPU_SHADER_USE_COLOR;
- }
-
- GPU_buffer_bind(buffers->vert_buf, GPU_BINDING_ARRAY);
-
- if (do_fast) {
- GPU_buffer_bind(buffers->index_buf_fast, GPU_BINDING_INDEX);
- }
- else if (buffers->index_buf) {
- GPU_buffer_bind(buffers->index_buf, GPU_BINDING_INDEX);
- }
-
- if (wireframe) {
- glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
- }
- else {
- if ((buffers->smooth == false) && (buffers->face_indices_len == 0)) {
- bound_options_new |= GPU_SHADER_FLAT_NORMAL;
- }
- }
-
- if (bound_options_new & ~bound_options_old) {
- GPU_basic_shader_bind(bound_options_old | bound_options_new);
- }
-
- if (buffers->tot_quad) {
- const char *offset = base;
- const bool drawall = !(buffers->has_hidden || do_fast);
-
- if (GLEW_ARB_draw_elements_base_vertex && drawall) {
-
- glVertexPointer(3, GL_FLOAT, sizeof(VertexBufferFormat),
- offset + offsetof(VertexBufferFormat, co));
- if (!wireframe) {
- glNormalPointer(GL_SHORT, sizeof(VertexBufferFormat),
- offset + offsetof(VertexBufferFormat, no));
- glColorPointer(3, GL_UNSIGNED_BYTE, sizeof(VertexBufferFormat),
- offset + offsetof(VertexBufferFormat, color));
- }
-
- glMultiDrawElementsBaseVertex(GL_TRIANGLES, buffers->baseelemarray, buffers->index_type,
- (const void * const *)buffers->baseindex,
- buffers->totgrid, &buffers->baseelemarray[buffers->totgrid]);
- }
- else {
- int i, last = drawall ? buffers->totgrid : 1;
-
- /* we could optimize this to one draw call, but it would need more memory */
- for (i = 0; i < last; i++) {
- glVertexPointer(3, GL_FLOAT, sizeof(VertexBufferFormat),
- offset + offsetof(VertexBufferFormat, co));
- if (!wireframe) {
- glNormalPointer(GL_SHORT, sizeof(VertexBufferFormat),
- offset + offsetof(VertexBufferFormat, no));
- glColorPointer(3, GL_UNSIGNED_BYTE, sizeof(VertexBufferFormat),
- offset + offsetof(VertexBufferFormat, color));
- }
+ UNUSED_VARS(wireframe, fast, setMaterial);
+ bool do_fast = fast && buffers->triangles_fast;
+ Gwn_Batch *triangles = do_fast ? buffers->triangles_fast : buffers->triangles;
- if (do_fast)
- glDrawElements(GL_TRIANGLES, buffers->totgrid * 6, buffers->index_type, index_base);
- else
- glDrawElements(GL_TRIANGLES, buffers->tot_quad * 6, buffers->index_type, index_base);
+ if (triangles) {
- offset += buffers->gridkey.grid_area * sizeof(VertexBufferFormat);
- }
- }
- }
- else if (buffers->tot_tri) {
- int totelem = buffers->tot_tri * 3;
-
- glVertexPointer(3, GL_FLOAT, sizeof(VertexBufferFormat),
- (void *)(base + offsetof(VertexBufferFormat, co)));
-
- if (!wireframe) {
- glNormalPointer(GL_SHORT, sizeof(VertexBufferFormat),
- (void *)(base + offsetof(VertexBufferFormat, no)));
- glColorPointer(3, GL_UNSIGNED_BYTE, sizeof(VertexBufferFormat),
- (void *)(base + offsetof(VertexBufferFormat, color)));
- }
-
- if (buffers->index_buf)
- glDrawElements(GL_TRIANGLES, totelem, buffers->index_type, index_base);
- else
- glDrawArrays(GL_TRIANGLES, 0, totelem);
- }
+ /* Simple Shader: use when drawing without the draw-manager (old 2.7x viewport) */
+ if (triangles->interface == NULL) {
+ GPUBuiltinShader shader_id =
+ buffers->smooth ? GPU_SHADER_SIMPLE_LIGHTING_SMOOTH_COLOR : GPU_SHADER_SIMPLE_LIGHTING_FLAT_COLOR;
+ GPUShader *shader = GPU_shader_get_builtin_shader(shader_id);
- if (wireframe)
- glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
+ GWN_batch_program_set(
+ triangles,
+ GPU_shader_get_program(shader), GPU_shader_get_interface(shader));
- GPU_buffer_unbind(buffers->vert_buf, GPU_BINDING_ARRAY);
- if (buffers->index_buf || do_fast)
- GPU_buffer_unbind(do_fast ? buffers->index_buf_fast : buffers->index_buf, GPU_BINDING_INDEX);
+ static float light[3] = {-0.3f, 0.5f, 1.0f};
+ static float alpha = 1.0f;
+ static float world_light = 1.0f;
- glDisableClientState(GL_VERTEX_ARRAY);
- if (!wireframe) {
- glDisableClientState(GL_NORMAL_ARRAY);
- glDisableClientState(GL_COLOR_ARRAY);
- }
+ GPU_shader_uniform_vector(shader, GPU_shader_get_uniform(shader, "light"), 3, 1, light);
+ GPU_shader_uniform_vector(shader, GPU_shader_get_uniform(shader, "alpha"), 1, 1, &alpha);
+ GPU_shader_uniform_vector(shader, GPU_shader_get_uniform(shader, "global"), 1, 1, &world_light);
- if (bound_options_new & ~bound_options_old) {
- GPU_basic_shader_bind(bound_options_old);
}
+ GWN_batch_draw(triangles);
}
}
-bool GPU_pbvh_buffers_diffuse_changed(
- GPU_PBVH_Buffers *buffers, GSet *bm_faces, bool show_diffuse_color)
+Gwn_Batch *GPU_pbvh_buffers_batch_get(GPU_PBVH_Buffers *buffers, bool fast)
+{
+ return (fast && buffers->triangles_fast) ?
+ buffers->triangles_fast : buffers->triangles;
+}
+
+bool GPU_pbvh_buffers_diffuse_changed(GPU_PBVH_Buffers *buffers, GSet *bm_faces, bool show_diffuse_color)
{
float diffuse_color[4];
bool use_matcaps = GPU_material_use_matcaps_get();
@@ -2038,16 +1930,20 @@ bool GPU_pbvh_buffers_mask_changed(GPU_PBVH_Buffers *buffers, bool show_mask)
void GPU_pbvh_buffers_free(GPU_PBVH_Buffers *buffers)
{
if (buffers) {
- if (buffers->vert_buf)
- GPU_buffer_free(buffers->vert_buf);
- if (buffers->index_buf && !buffers->is_index_buf_global)
- GPU_buffer_free(buffers->index_buf);
- if (buffers->index_buf_fast)
- GPU_buffer_free(buffers->index_buf_fast);
+ GWN_BATCH_DISCARD_SAFE(buffers->triangles);
+ GWN_BATCH_DISCARD_SAFE(buffers->triangles_fast);
+ if (!buffers->is_index_buf_global) {
+ GWN_INDEXBUF_DISCARD_SAFE(buffers->index_buf);
+ }
+ GWN_INDEXBUF_DISCARD_SAFE(buffers->index_buf_fast);
+ GWN_VERTBUF_DISCARD_SAFE(buffers->vert_buf);
+
+#ifdef USE_BASE_ELEM
if (buffers->baseelemarray)
MEM_freeN(buffers->baseelemarray);
if (buffers->baseindex)
MEM_freeN(buffers->baseindex);
+#endif
MEM_freeN(buffers);
}
@@ -2060,7 +1956,7 @@ void GPU_pbvh_multires_buffers_free(GridCommonGPUBuffer **grid_common_gpu_buffer
if (gridbuff) {
if (gridbuff->mres_buffer) {
BLI_mutex_lock(&buffer_mutex);
- gpu_buffer_free_intern(gridbuff->mres_buffer);
+ GWN_INDEXBUF_DISCARD_SAFE(gridbuff->mres_buffer);
BLI_mutex_unlock(&buffer_mutex);
}
MEM_freeN(gridbuff);
@@ -2069,59 +1965,57 @@ void GPU_pbvh_multires_buffers_free(GridCommonGPUBuffer **grid_common_gpu_buffer
}
/* debug function, draws the pbvh BB */
-void GPU_pbvh_BB_draw(float min[3], float max[3], bool leaf)
+void GPU_pbvh_BB_draw(float min[3], float max[3], bool leaf, unsigned int pos)
{
- const float quads[4][4][3] = {
- {
- {min[0], min[1], min[2]},
- {max[0], min[1], min[2]},
- {max[0], min[1], max[2]},
- {min[0], min[1], max[2]}
- },
+ if (leaf)
+ immUniformColor4f(0.0, 1.0, 0.0, 0.5);
+ else
+ immUniformColor4f(1.0, 0.0, 0.0, 0.5);
- {
- {min[0], min[1], min[2]},
- {min[0], max[1], min[2]},
- {min[0], max[1], max[2]},
- {min[0], min[1], max[2]}
- },
+ /* TODO(merwin): revisit this after we have mutable VertexBuffers
+ * could keep a static batch & index buffer, change the VBO contents per draw
+ */
- {
- {max[0], max[1], min[2]},
- {max[0], min[1], min[2]},
- {max[0], min[1], max[2]},
- {max[0], max[1], max[2]}
- },
+ immBegin(GWN_PRIM_LINES, 24);
- {
- {max[0], max[1], min[2]},
- {min[0], max[1], min[2]},
- {min[0], max[1], max[2]},
- {max[0], max[1], max[2]}
- },
- };
+ /* top */
+ immVertex3f(pos, min[0], min[1], max[2]);
+ immVertex3f(pos, min[0], max[1], max[2]);
- if (leaf)
- glColor4f(0.0, 1.0, 0.0, 0.5);
- else
- glColor4f(1.0, 0.0, 0.0, 0.5);
+ immVertex3f(pos, min[0], max[1], max[2]);
+ immVertex3f(pos, max[0], max[1], max[2]);
- glVertexPointer(3, GL_FLOAT, 0, &quads[0][0][0]);
- glDrawArrays(GL_QUADS, 0, 16);
-}
+ immVertex3f(pos, max[0], max[1], max[2]);
+ immVertex3f(pos, max[0], min[1], max[2]);
-void GPU_pbvh_BB_draw_init(void)
-{
- glPushAttrib(GL_ENABLE_BIT);
- glDisable(GL_CULL_FACE);
- glEnableClientState(GL_VERTEX_ARRAY);
- glDisableClientState(GL_COLOR_ARRAY);
- glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
- glEnable(GL_BLEND);
-}
+ immVertex3f(pos, max[0], min[1], max[2]);
+ immVertex3f(pos, min[0], min[1], max[2]);
-void GPU_pbvh_BB_draw_end(void)
-{
- glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
- glPopAttrib();
+ /* bottom */
+ immVertex3f(pos, min[0], min[1], min[2]);
+ immVertex3f(pos, min[0], max[1], min[2]);
+
+ immVertex3f(pos, min[0], max[1], min[2]);
+ immVertex3f(pos, max[0], max[1], min[2]);
+
+ immVertex3f(pos, max[0], max[1], min[2]);
+ immVertex3f(pos, max[0], min[1], min[2]);
+
+ immVertex3f(pos, max[0], min[1], min[2]);
+ immVertex3f(pos, min[0], min[1], min[2]);
+
+ /* sides */
+ immVertex3f(pos, min[0], min[1], min[2]);
+ immVertex3f(pos, min[0], min[1], max[2]);
+
+ immVertex3f(pos, min[0], max[1], min[2]);
+ immVertex3f(pos, min[0], max[1], max[2]);
+
+ immVertex3f(pos, max[0], max[1], min[2]);
+ immVertex3f(pos, max[0], max[1], max[2]);
+
+ immVertex3f(pos, max[0], min[1], min[2]);
+ immVertex3f(pos, max[0], min[1], max[2]);
+
+ immEnd();
}
diff --git a/source/blender/gpu/intern/gpu_codegen.c b/source/blender/gpu/intern/gpu_codegen.c
index b5512aa108d..9e4daa2a036 100644
--- a/source/blender/gpu/intern/gpu_codegen.c
+++ b/source/blender/gpu/intern/gpu_codegen.c
@@ -36,6 +36,7 @@
#include "DNA_customdata_types.h"
#include "DNA_image_types.h"
#include "DNA_material_types.h"
+#include "DNA_node_types.h"
#include "BLI_blenlib.h"
#include "BLI_utildefines.h"
@@ -47,6 +48,7 @@
#include "GPU_material.h"
#include "GPU_shader.h"
#include "GPU_texture.h"
+#include "GPU_uniformbuffer.h"
#include "BLI_sys_types.h" /* for intptr_t support */
@@ -88,7 +90,7 @@ typedef struct GPUFunction {
/* Indices match the GPUType enum */
static const char *GPU_DATATYPE_STR[17] = {
"", "float", "vec2", "vec3", "vec4",
- NULL, NULL, NULL, NULL, "mat3", NULL, NULL, NULL, NULL, NULL, NULL, "mat4",
+ NULL, NULL, NULL, NULL, "mat3", NULL, NULL, NULL, NULL, NULL, NULL, "mat4"
};
/* GLSL code parsing for finding function definitions.
@@ -172,7 +174,7 @@ static void gpu_parse_functions_string(GHash *hash, char *code)
/* test for type */
type = GPU_NONE;
- for (i = 1; i <= 16; i++) {
+ for (i = 1; i < ARRAY_SIZE(GPU_DATATYPE_STR); i++) {
if (GPU_DATATYPE_STR[i] && gpu_str_prefix(code, GPU_DATATYPE_STR[i])) {
type = i;
break;
@@ -188,6 +190,13 @@ static void gpu_parse_functions_string(GHash *hash, char *code)
if (!type && gpu_str_prefix(code, "sampler2D")) {
type = GPU_TEX2D;
}
+ if (!type && gpu_str_prefix(code, "sampler3D")) {
+ type = GPU_TEX3D;
+ }
+
+ if (!type && gpu_str_prefix(code, "Closure")) {
+ type = GPU_CLOSURE;
+ }
if (type) {
/* add parameter */
@@ -350,6 +359,8 @@ static void codegen_convert_datatype(DynStr *ds, int from, int to, const char *t
BLI_dynstr_appendf(ds, "vec4(%s.r, %s.r, %s.r, %s.g)", name, name, name, name);
else if (from == GPU_FLOAT)
BLI_dynstr_appendf(ds, "vec4(%s, %s, %s, 1.0)", name, name, name);
+ else /* can happen with closure */
+ BLI_dynstr_append(ds, name);
}
}
@@ -412,6 +423,10 @@ const char *GPU_builtin_name(GPUBuiltin builtin)
return "unfparticleangvel";
else if (builtin == GPU_OBJECT_INFO)
return "unfobjectinfo";
+ else if (builtin == GPU_VOLUME_DENSITY)
+ return "sampdensity";
+ else if (builtin == GPU_VOLUME_FLAME)
+ return "sampflame";
else
return "";
}
@@ -500,12 +515,16 @@ static void codegen_set_unique_ids(ListBase *nodes)
BLI_ghash_free(definehash, NULL, NULL);
}
-static int codegen_print_uniforms_functions(DynStr *ds, ListBase *nodes)
+/**
+ * It will create an UBO for GPUMaterial if there is any GPU_DYNAMIC_UBO.
+ */
+static int codegen_process_uniforms_functions(GPUMaterial *material, DynStr *ds, ListBase *nodes)
{
GPUNode *node;
GPUInput *input;
const char *name;
int builtins = 0;
+ ListBase ubo_inputs = {NULL, NULL};
/* print uniforms */
for (node = nodes->first; node; node = node->next) {
@@ -525,7 +544,14 @@ static int codegen_print_uniforms_functions(DynStr *ds, ListBase *nodes)
builtins |= input->builtin;
name = GPU_builtin_name(input->builtin);
- if (gpu_str_prefix(name, "unf")) {
+ if (gpu_str_prefix(name, "samp")) {
+ if ((input->builtin == GPU_VOLUME_DENSITY) ||
+ (input->builtin == GPU_VOLUME_FLAME))
+ {
+ BLI_dynstr_appendf(ds, "uniform sampler3D %s;\n", name);
+ }
+ }
+ else if (gpu_str_prefix(name, "unf")) {
BLI_dynstr_appendf(ds, "uniform %s %s;\n",
GPU_DATATYPE_STR[input->type], name);
}
@@ -536,14 +562,23 @@ static int codegen_print_uniforms_functions(DynStr *ds, ListBase *nodes)
}
}
}
+ else if (input->source == GPU_SOURCE_STRUCT) {
+ /* Add other struct here if needed. */
+ BLI_dynstr_appendf(ds, "Closure strct%d = CLOSURE_DEFAULT;\n", input->id);
+ }
else if (input->source == GPU_SOURCE_VEC_UNIFORM) {
- if (input->dynamicvec) {
+ if (input->dynamictype == GPU_DYNAMIC_UBO) {
+ if (!input->link) {
+ /* We handle the UBOuniforms separately. */
+ BLI_addtail(&ubo_inputs, BLI_genericNodeN(input));
+ }
+ }
+ else if (input->dynamicvec) {
/* only create uniforms for dynamic vectors */
BLI_dynstr_appendf(ds, "uniform %s unf%d;\n",
GPU_DATATYPE_STR[input->type], input->id);
}
else {
- /* for others use const so the compiler can do folding */
BLI_dynstr_appendf(ds, "const %s cons%d = ",
GPU_DATATYPE_STR[input->type], input->id);
codegen_print_datatype(ds, input->type, input->vec);
@@ -569,6 +604,22 @@ static int codegen_print_uniforms_functions(DynStr *ds, ListBase *nodes)
}
}
+ /* Handle the UBO block separately. */
+ if ((material != NULL) && !BLI_listbase_is_empty(&ubo_inputs)) {
+ GPU_material_create_uniform_buffer(material, &ubo_inputs);
+
+ /* Inputs are sorted */
+ BLI_dynstr_appendf(ds, "\nlayout (std140) uniform %s {\n", GPU_UBO_BLOCK_NAME);
+
+ for (LinkData *link = ubo_inputs.first; link; link = link->next) {
+ input = link->data;
+ BLI_dynstr_appendf(ds, "\t%s unf%d;\n",
+ GPU_DATATYPE_STR[input->type], input->id);
+ }
+ BLI_dynstr_append(ds, "};\n");
+ BLI_freelistN(&ubo_inputs);
+ }
+
BLI_dynstr_append(ds, "\n");
return builtins;
@@ -594,8 +645,13 @@ static void codegen_declare_tmps(DynStr *ds, ListBase *nodes)
/* declare temporary variables for node output storage */
for (output = node->outputs.first; output; output = output->next) {
- BLI_dynstr_appendf(ds, "\t%s tmp%d;\n",
- GPU_DATATYPE_STR[output->type], output->id);
+ if (output->type == GPU_CLOSURE) {
+ BLI_dynstr_appendf(ds, "\tClosure tmp%d;\n", output->id);
+ }
+ else {
+ BLI_dynstr_appendf(ds, "\t%s tmp%d;\n",
+ GPU_DATATYPE_STR[output->type], output->id);
+ }
}
}
@@ -622,11 +678,26 @@ static void codegen_call_functions(DynStr *ds, ListBase *nodes, GPUOutput *final
"tmp", input->link->output->id);
}
else if (input->source == GPU_SOURCE_BUILTIN) {
- if (input->builtin == GPU_VIEW_NORMAL)
+ if (input->builtin == GPU_INVERSE_VIEW_MATRIX)
+ BLI_dynstr_append(ds, "viewinv");
+ else if (input->builtin == GPU_VIEW_MATRIX)
+ BLI_dynstr_append(ds, "viewmat");
+ else if (input->builtin == GPU_CAMERA_TEXCO_FACTORS)
+ BLI_dynstr_append(ds, "camtexfac");
+ else if (input->builtin == GPU_OBJECT_MATRIX)
+ BLI_dynstr_append(ds, "objmat");
+ else if (input->builtin == GPU_INVERSE_OBJECT_MATRIX)
+ BLI_dynstr_append(ds, "objinv");
+ else if (input->builtin == GPU_VIEW_POSITION)
+ BLI_dynstr_append(ds, "viewposition");
+ else if (input->builtin == GPU_VIEW_NORMAL)
BLI_dynstr_append(ds, "facingnormal");
else
BLI_dynstr_append(ds, GPU_builtin_name(input->builtin));
}
+ else if (input->source == GPU_SOURCE_STRUCT) {
+ BLI_dynstr_appendf(ds, "strct%d", input->id);
+ }
else if (input->source == GPU_SOURCE_VEC_UNIFORM) {
if (input->dynamicvec)
BLI_dynstr_appendf(ds, "unf%d", input->id);
@@ -655,12 +726,11 @@ static void codegen_call_functions(DynStr *ds, ListBase *nodes, GPUOutput *final
BLI_dynstr_append(ds, ");\n");
}
- BLI_dynstr_append(ds, "\n\tgl_FragColor = ");
- codegen_convert_datatype(ds, finaloutput->type, GPU_VEC4, "tmp", finaloutput->id);
+ BLI_dynstr_appendf(ds, "\n\treturn tmp%d", finaloutput->id);
BLI_dynstr_append(ds, ";\n");
}
-static char *code_generate_fragment(ListBase *nodes, GPUOutput *output)
+static char *code_generate_fragment(GPUMaterial *material, ListBase *nodes, GPUOutput *output, bool use_new_shading)
{
DynStr *ds = BLI_dynstr_new();
char *code;
@@ -677,17 +747,47 @@ static char *code_generate_fragment(ListBase *nodes, GPUOutput *output)
#endif
codegen_set_unique_ids(nodes);
- builtins = codegen_print_uniforms_functions(ds, nodes);
+ builtins = codegen_process_uniforms_functions(material, ds, nodes);
#if 0
if (G.debug & G_DEBUG)
BLI_dynstr_appendf(ds, "/* %s */\n", name);
#endif
- BLI_dynstr_append(ds, "void main()\n{\n");
+ BLI_dynstr_append(ds, "Closure nodetree_exec(void)\n{\n");
- if (builtins & GPU_VIEW_NORMAL)
- BLI_dynstr_append(ds, "\tvec3 facingnormal = gl_FrontFacing? varnormal: -varnormal;\n");
+ if (use_new_shading) {
+ if (builtins & GPU_VIEW_MATRIX)
+ BLI_dynstr_append(ds, "\tmat4 viewmat = ViewMatrix;\n");
+ if (builtins & GPU_CAMERA_TEXCO_FACTORS)
+ BLI_dynstr_append(ds, "\tvec4 camtexfac = CameraTexCoFactors;\n");
+ if (builtins & GPU_OBJECT_MATRIX)
+ BLI_dynstr_append(ds, "\tmat4 objmat = ModelMatrix;\n");
+ if (builtins & GPU_INVERSE_OBJECT_MATRIX)
+ BLI_dynstr_append(ds, "\tmat4 objinv = ModelMatrixInverse;\n");
+ if (builtins & GPU_INVERSE_VIEW_MATRIX)
+ BLI_dynstr_append(ds, "\tmat4 viewinv = ViewMatrixInverse;\n");
+ if (builtins & GPU_VIEW_NORMAL)
+ BLI_dynstr_append(ds, "\tvec3 facingnormal = gl_FrontFacing? viewNormal: -viewNormal;\n");
+ if (builtins & GPU_VIEW_POSITION)
+ BLI_dynstr_append(ds, "\tvec3 viewposition = viewPosition;\n");
+ }
+ else {
+ if (builtins & GPU_VIEW_MATRIX)
+ BLI_dynstr_append(ds, "\tmat4 viewmat = unfviewmat;\n");
+ if (builtins & GPU_CAMERA_TEXCO_FACTORS)
+ BLI_dynstr_append(ds, "\tvec4 camtexfac = unfcameratexfactors;\n");
+ if (builtins & GPU_OBJECT_MATRIX)
+ BLI_dynstr_append(ds, "\tmat4 objmat = unfobmat;\n");
+ if (builtins & GPU_INVERSE_OBJECT_MATRIX)
+ BLI_dynstr_append(ds, "\tmat4 objinv = unfinvobmat;\n");
+ if (builtins & GPU_INVERSE_VIEW_MATRIX)
+ BLI_dynstr_append(ds, "\tmat4 viewinv = unfinvviewmat;\n");
+ if (builtins & GPU_VIEW_NORMAL)
+ BLI_dynstr_append(ds, "\tvec3 facingnormal = gl_FrontFacing? varnormal: -varnormal;\n");
+ if (builtins & GPU_VIEW_POSITION)
+ BLI_dynstr_append(ds, "\tvec3 viewposition = varposition;\n");
+ }
/* Calculate tangent space. */
#ifdef WITH_OPENSUBDIV
@@ -722,6 +822,17 @@ static char *code_generate_fragment(ListBase *nodes, GPUOutput *output)
BLI_dynstr_append(ds, "}\n");
+ /* XXX This cannot go into gpu_shader_material.glsl because main() would be parsed and generate error */
+ /* Old glsl mode compat. */
+ BLI_dynstr_append(ds, "#ifndef NODETREE_EXEC\n");
+ BLI_dynstr_append(ds, "out vec4 fragColor;\n");
+ BLI_dynstr_append(ds, "void main()\n");
+ BLI_dynstr_append(ds, "{\n");
+ BLI_dynstr_append(ds, "\tClosure cl = nodetree_exec();\n");
+ BLI_dynstr_append(ds, "\tfragColor = vec4(cl.radiance, cl.opacity);\n");
+ BLI_dynstr_append(ds, "}\n");
+ BLI_dynstr_append(ds, "#endif\n\n");
+
/* create shader */
code = BLI_dynstr_get_cstring(ds);
BLI_dynstr_free(ds);
@@ -733,6 +844,95 @@ static char *code_generate_fragment(ListBase *nodes, GPUOutput *output)
return code;
}
+static const char *attrib_prefix_get(CustomDataType type)
+{
+ switch (type) {
+ case CD_ORCO: return "orco";
+ case CD_MTFACE: return "u";
+ case CD_TANGENT: return "t";
+ case CD_MCOL: return "c";
+ case CD_AUTO_FROM_NAME: return "a";
+ default: BLI_assert(false && "Gwn_VertAttr Prefix type not found : This should not happen!"); return "";
+ }
+}
+
+static char *code_generate_vertex_new(ListBase *nodes, const char *vert_code, bool use_geom)
+{
+ DynStr *ds = BLI_dynstr_new();
+ GPUNode *node;
+ GPUInput *input;
+ char *code;
+
+ for (node = nodes->first; node; node = node->next) {
+ for (input = node->inputs.first; input; input = input->next) {
+ if (input->source == GPU_SOURCE_ATTRIB && input->attribfirst) {
+ /* XXX FIXME : see notes in mesh_render_data_create() */
+ /* NOTE : Replicate changes to mesh_render_data_create() in draw_cache_impl_mesh.c */
+ if (input->attribtype == CD_ORCO) {
+ /* orco is computed from local positions, see bellow */
+ BLI_dynstr_appendf(ds, "uniform vec3 OrcoTexCoFactors[2];\n");
+ }
+ else if (input->attribname[0] == '\0') {
+ BLI_dynstr_appendf(ds, "in %s %s;\n", GPU_DATATYPE_STR[input->type], attrib_prefix_get(input->attribtype));
+ BLI_dynstr_appendf(ds, "#define att%d %s\n", input->attribid, attrib_prefix_get(input->attribtype));
+ }
+ else {
+ unsigned int hash = BLI_ghashutil_strhash_p(input->attribname);
+ BLI_dynstr_appendf(ds, "in %s %s%u;\n",
+ GPU_DATATYPE_STR[input->type], attrib_prefix_get(input->attribtype), hash);
+ BLI_dynstr_appendf(ds, "#define att%d %s%u\n",
+ input->attribid, attrib_prefix_get(input->attribtype), hash);
+ }
+ BLI_dynstr_appendf(ds, "out %s var%d%s;\n",
+ GPU_DATATYPE_STR[input->type], input->attribid, use_geom ? "g" : "");
+ }
+ }
+ }
+
+ BLI_dynstr_append(ds, "\n");
+
+ BLI_dynstr_append(ds, "#define ATTRIB\n");
+ BLI_dynstr_append(ds, "uniform mat3 NormalMatrix;\n");
+ BLI_dynstr_append(ds, "void pass_attrib(in vec3 position) {\n");
+
+ for (node = nodes->first; node; node = node->next) {
+ for (input = node->inputs.first; input; input = input->next) {
+ if (input->source == GPU_SOURCE_ATTRIB && input->attribfirst) {
+ if (input->attribtype == CD_TANGENT) { /* silly exception */
+ BLI_dynstr_appendf(
+ ds, "\tvar%d%s.xyz = normalize(NormalMatrix * att%d.xyz);\n",
+ input->attribid, use_geom ? "g" : "", input->attribid);
+ BLI_dynstr_appendf(
+ ds, "\tvar%d%s.w = att%d.w;\n",
+ input->attribid, use_geom ? "g" : "", input->attribid);
+ }
+ else if (input->attribtype == CD_ORCO) {
+ BLI_dynstr_appendf(ds, "\tvar%d%s = OrcoTexCoFactors[0] + position * OrcoTexCoFactors[1];\n",
+ input->attribid, use_geom ? "g" : "");
+ }
+ else {
+ BLI_dynstr_appendf(ds, "\tvar%d%s = att%d;\n",
+ input->attribid, use_geom ? "g" : "", input->attribid);
+ }
+ }
+ }
+ }
+
+ BLI_dynstr_append(ds, "}\n");
+
+ BLI_dynstr_append(ds, vert_code);
+
+ code = BLI_dynstr_get_cstring(ds);
+
+ BLI_dynstr_free(ds);
+
+#if 0
+ if (G.debug & G_DEBUG) printf("%s\n", code);
+#endif
+
+ return code;
+}
+
static char *code_generate_vertex(ListBase *nodes, const GPUMatType type)
{
DynStr *ds = BLI_dynstr_new();
@@ -790,7 +990,7 @@ static char *code_generate_vertex(ListBase *nodes, const GPUMatType type)
BLI_dynstr_appendf(ds, "#ifndef USE_OPENSUBDIV\n");
#endif
BLI_dynstr_appendf(
- ds, "\tvar%d.xyz = normalize(gl_NormalMatrix * att%d.xyz);\n",
+ ds, "\tvar%d.xyz = normalize(NormalMatrix * att%d.xyz);\n",
input->attribid, input->attribid);
BLI_dynstr_appendf(
ds, "\tvar%d.w = att%d.w;\n",
@@ -841,6 +1041,51 @@ static char *code_generate_vertex(ListBase *nodes, const GPUMatType type)
return code;
}
+static char *code_generate_geometry_new(ListBase *nodes, const char *geom_code)
+{
+ DynStr *ds = BLI_dynstr_new();
+ GPUNode *node;
+ GPUInput *input;
+ char *code;
+
+ /* Create prototype because attributes cannot be declared before layout. */
+ BLI_dynstr_appendf(ds, "void pass_attrib(in int vert);\n");
+ BLI_dynstr_append(ds, "#define ATTRIB\n");
+
+ BLI_dynstr_append(ds, geom_code);
+
+ /* Generate varying declarations. */
+ for (node = nodes->first; node; node = node->next) {
+ for (input = node->inputs.first; input; input = input->next) {
+ if (input->source == GPU_SOURCE_ATTRIB && input->attribfirst) {
+ BLI_dynstr_appendf(ds, "in %s var%dg[];\n",
+ GPU_DATATYPE_STR[input->type],
+ input->attribid);
+ BLI_dynstr_appendf(ds, "out %s var%d;\n",
+ GPU_DATATYPE_STR[input->type],
+ input->attribid);
+ }
+ }
+ }
+
+ /* Generate varying assignments. */
+ BLI_dynstr_appendf(ds, "void pass_attrib(in int vert) {\n");
+ for (node = nodes->first; node; node = node->next) {
+ for (input = node->inputs.first; input; input = input->next) {
+ if (input->source == GPU_SOURCE_ATTRIB && input->attribfirst) {
+ /* TODO let shader choose what to do depending on what the attrib is. */
+ BLI_dynstr_appendf(ds, "\tvar%d = var%dg[vert];\n", input->attribid, input->attribid);
+ }
+ }
+ }
+ BLI_dynstr_append(ds, "}\n");
+
+ code = BLI_dynstr_get_cstring(ds);
+ BLI_dynstr_free(ds);
+
+ return code;
+}
+
static char *code_generate_geometry(ListBase *nodes, bool use_opensubdiv)
{
#ifdef WITH_OPENSUBDIV
@@ -928,6 +1173,67 @@ GPUShader *GPU_pass_shader(GPUPass *pass)
return pass->shader;
}
+static void gpu_nodes_extract_dynamic_inputs_new(GPUPass *pass, ListBase *nodes)
+{
+ GPUShader *shader = pass->shader;
+ GPUNode *node;
+ GPUInput *next, *input;
+ ListBase *inputs = &pass->inputs;
+ int extract, z;
+
+ memset(inputs, 0, sizeof(*inputs));
+
+ if (!shader)
+ return;
+
+ GPU_shader_bind(shader);
+
+ for (node = nodes->first; node; node = node->next) {
+ z = 0;
+ for (input = node->inputs.first; input; input = next, z++) {
+ next = input->next;
+
+ /* attributes don't need to be bound, they already have
+ * an id that the drawing functions will use */
+ if (input->source == GPU_SOURCE_ATTRIB) {
+ continue;
+ }
+
+ if (input->source == GPU_SOURCE_BUILTIN ||
+ input->source == GPU_SOURCE_OPENGL_BUILTIN)
+ {
+ continue;
+ }
+
+ if (input->ima || input->tex || input->prv)
+ BLI_snprintf(input->shadername, sizeof(input->shadername), "samp%d", input->texid);
+ else
+ BLI_snprintf(input->shadername, sizeof(input->shadername), "unf%d", input->id);
+
+ /* pass non-dynamic uniforms to opengl */
+ extract = 0;
+
+ if (input->ima || input->tex || input->prv) {
+ if (input->bindtex)
+ extract = 1;
+ }
+ else if (input->dynamicvec)
+ extract = 1;
+
+ if (extract)
+ input->shaderloc = GPU_shader_get_uniform(shader, input->shadername);
+
+ /* extract nodes */
+ if (extract) {
+ BLI_remlink(&node->inputs, input);
+ BLI_addtail(inputs, input);
+ }
+ }
+ }
+
+ GPU_shader_unbind();
+}
+
static void gpu_nodes_extract_dynamic_inputs(GPUPass *pass, ListBase *nodes)
{
GPUShader *shader = pass->shader;
@@ -1135,7 +1441,7 @@ static void gpu_node_input_link(GPUNode *node, GPUNodeLink *link, const GPUType
name = outnode->name;
input = outnode->inputs.first;
- if ((STREQ(name, "set_value") || STREQ(name, "set_rgb")) &&
+ if ((STREQ(name, "set_value") || STREQ(name, "set_rgb") || STREQ(name, "set_rgba")) &&
(input->type == type))
{
input = MEM_dupallocN(outnode->inputs.first);
@@ -1194,7 +1500,7 @@ static void gpu_node_input_link(GPUNode *node, GPUNodeLink *link, const GPUType
#if 0
input->tex = GPU_texture_create_2D(link->texturesize, link->texturesize, link->ptr2, NULL);
#endif
- input->tex = GPU_texture_create_2D(link->texturesize, 1, link->ptr1, GPU_HDR_NONE, NULL);
+ input->tex = GPU_texture_create_2D(link->texturesize, 1, link->ptr1, NULL);
input->textarget = GL_TEXTURE_2D;
MEM_freeN(link->ptr1);
@@ -1235,6 +1541,12 @@ static void gpu_node_input_link(GPUNode *node, GPUNodeLink *link, const GPUType
BLI_strncpy(input->attribname, link->attribname, sizeof(input->attribname));
MEM_freeN(link);
}
+ else if (type == GPU_CLOSURE) {
+ input->type = type;
+ input->source = GPU_SOURCE_STRUCT;
+
+ MEM_freeN(link);
+ }
else {
/* uniform vector */
input->type = type;
@@ -1246,21 +1558,100 @@ static void gpu_node_input_link(GPUNode *node, GPUNodeLink *link, const GPUType
input->dynamictype = link->dynamictype;
input->dynamicdata = link->ptr2;
}
+
MEM_freeN(link);
}
BLI_addtail(&node->inputs, input);
}
-static void gpu_node_input_socket(GPUNode *node, GPUNodeStack *sock)
+
+static const char *gpu_uniform_set_function_from_type(eNodeSocketDatatype type)
+{
+ switch (type) {
+ case SOCK_FLOAT:
+ return "set_value";
+ case SOCK_VECTOR:
+ return "set_rgb";
+ case SOCK_RGBA:
+ return "set_rgba";
+ default:
+ BLI_assert(!"No gpu function for non-supported eNodeSocketDatatype");
+ return NULL;
+ }
+}
+
+/**
+ * Link stack uniform buffer.
+ * This is called for the input/output sockets that are note connected.
+ */
+static GPUNodeLink *gpu_uniformbuffer_link(
+ GPUMaterial *mat, bNode *node, GPUNodeStack *stack, const int index, const eNodeSocketInOut in_out)
{
- GPUNodeLink *link;
+ bNodeSocket *socket;
+
+ /* Some nodes can have been create on the fly and does
+ * not have an original to point to. (i.e. the bump from
+ * ntree_shader_relink_displacement). In this case just
+ * revert to static constant folding. */
+ if (node->original == NULL) {
+ return NULL;
+ }
+
+ if (in_out == SOCK_IN) {
+ socket = BLI_findlink(&node->original->inputs, index);
+ }
+ else {
+ socket = BLI_findlink(&node->original->outputs, index);
+ }
+
+ BLI_assert(socket != NULL);
+ BLI_assert(socket->in_out == in_out);
+
+ if ((socket->flag & SOCK_HIDE_VALUE) == 0) {
+ GPUNodeLink *link;
+ switch (socket->type) {
+ case SOCK_FLOAT:
+ {
+ bNodeSocketValueFloat *socket_data = socket->default_value;
+ link = GPU_uniform_buffer(&socket_data->value, GPU_FLOAT);
+ break;
+ }
+ case SOCK_VECTOR:
+ {
+ bNodeSocketValueRGBA *socket_data = socket->default_value;
+ link = GPU_uniform_buffer(socket_data->value, GPU_VEC3);
+ break;
+ }
+ case SOCK_RGBA:
+ {
+ bNodeSocketValueRGBA *socket_data = socket->default_value;
+ link = GPU_uniform_buffer(socket_data->value, GPU_VEC4);
+ break;
+ }
+ default:
+ return NULL;
+ break;
+ }
+
+ if (in_out == SOCK_IN) {
+ GPU_link(mat, gpu_uniform_set_function_from_type(socket->type), link, &stack->link);
+ }
+ return link;
+ }
+ return NULL;
+}
+static void gpu_node_input_socket(GPUMaterial *material, bNode *bnode, GPUNode *node, GPUNodeStack *sock, const int index)
+{
if (sock->link) {
gpu_node_input_link(node, sock->link, sock->type);
}
+ else if ((material != NULL) && (gpu_uniformbuffer_link(material, bnode, sock, index, SOCK_IN) != NULL)) {
+ gpu_node_input_link(node, sock->link, sock->type);
+ }
else {
- link = GPU_node_link_create();
+ GPUNodeLink *link = GPU_node_link_create();
link->ptr1 = sock->vec;
gpu_node_input_link(node, link, sock->type);
}
@@ -1387,7 +1778,14 @@ GPUNodeLink *GPU_attribute(const CustomDataType type, const char *name)
{
GPUNodeLink *link = GPU_node_link_create();
- link->attribtype = type;
+ /* Fall back to the UV layer, which matches old behavior. */
+ if (type == CD_AUTO_FROM_NAME && name[0] == '\0') {
+ link->attribtype = CD_MTFACE;
+ }
+ else {
+ link->attribtype = type;
+ }
+
link->attribname = name;
return link;
@@ -1416,6 +1814,21 @@ GPUNodeLink *GPU_dynamic_uniform(float *num, GPUDynamicType dynamictype, void *d
return link;
}
+/**
+ * Add uniform to UBO struct of GPUMaterial.
+ */
+GPUNodeLink *GPU_uniform_buffer(float *num, GPUType gputype)
+{
+ GPUNodeLink *link = GPU_node_link_create();
+ link->ptr1 = num;
+ link->ptr2 = NULL;
+ link->dynamic = true;
+ link->dynamictype = GPU_DYNAMIC_UBO;
+ link->type = gputype;
+
+ return link;
+}
+
GPUNodeLink *GPU_image(Image *ima, ImageUser *iuser, bool is_data)
{
GPUNodeLink *link = GPU_node_link_create();
@@ -1526,7 +1939,7 @@ bool GPU_link(GPUMaterial *mat, const char *name, ...)
return true;
}
-bool GPU_stack_link(GPUMaterial *mat, const char *name, GPUNodeStack *in, GPUNodeStack *out, ...)
+bool GPU_stack_link(GPUMaterial *material, bNode *bnode, const char *name, GPUNodeStack *in, GPUNodeStack *out, ...)
{
GPUNode *node;
GPUFunction *function;
@@ -1546,11 +1959,11 @@ bool GPU_stack_link(GPUMaterial *mat, const char *name, GPUNodeStack *in, GPUNod
if (in) {
for (i = 0; in[i].type != GPU_NONE; i++) {
- gpu_node_input_socket(node, &in[i]);
+ gpu_node_input_socket(material, bnode, node, &in[i], i);
totin++;
}
}
-
+
if (out) {
for (i = 0; out[i].type != GPU_NONE; i++) {
gpu_node_output(node, out[i].type, &out[i].link);
@@ -1572,7 +1985,7 @@ bool GPU_stack_link(GPUMaterial *mat, const char *name, GPUNodeStack *in, GPUNod
if (totin == 0) {
link = va_arg(params, GPUNodeLink *);
if (link->socket)
- gpu_node_input_socket(node, link->socket);
+ gpu_node_input_socket(NULL, NULL, node, link->socket, -1);
else
gpu_node_input_link(node, link, function->paramtype[i]);
}
@@ -1582,8 +1995,8 @@ bool GPU_stack_link(GPUMaterial *mat, const char *name, GPUNodeStack *in, GPUNod
}
va_end(params);
- gpu_material_add_node(mat, node);
-
+ gpu_material_add_node(material, node);
+
return true;
}
@@ -1608,6 +2021,11 @@ int GPU_link_changed(GPUNodeLink *link)
return 0;
}
+GPUNodeLink *GPU_uniformbuffer_link_out(GPUMaterial *mat, bNode *node, GPUNodeStack *stack, const int index)
+{
+ return gpu_uniformbuffer_link(mat, node, stack, index, SOCK_OUT);
+}
+
/* Pass create/free */
static void gpu_nodes_tag(GPUNodeLink *link)
@@ -1647,6 +2065,78 @@ static void gpu_nodes_prune(ListBase *nodes, GPUNodeLink *outlink)
}
}
+GPUPass *GPU_generate_pass_new(
+ struct GPUMaterial *material,
+ ListBase *nodes, struct GPUNodeLink *frag_outlink,
+ GPUVertexAttribs *attribs,
+ const char *vert_code, const char *geom_code,
+ const char *frag_lib, const char *defines)
+{
+ GPUShader *shader;
+ GPUPass *pass;
+ char *vertexgen, *fragmentgen, *tmp;
+ char *vertexcode, *geometrycode, *fragmentcode;
+
+ /* prune unused nodes */
+ gpu_nodes_prune(nodes, frag_outlink);
+
+ gpu_nodes_get_vertex_attributes(nodes, attribs);
+
+ /* generate code and compile with opengl */
+ fragmentgen = code_generate_fragment(material, nodes, frag_outlink->output, true);
+ vertexgen = code_generate_vertex_new(nodes, vert_code, (geom_code != NULL));
+
+ tmp = BLI_strdupcat(frag_lib, glsl_material_library);
+ fragmentcode = BLI_strdupcat(tmp, fragmentgen);
+ vertexcode = BLI_strdup(vertexgen);
+
+ if (geom_code) {
+ geometrycode = code_generate_geometry_new(nodes, geom_code);
+ }
+ else {
+ geometrycode = NULL;
+ }
+
+ shader = GPU_shader_create(vertexcode,
+ fragmentcode,
+ geometrycode,
+ NULL,
+ defines);
+
+ MEM_freeN(tmp);
+
+ /* failed? */
+ if (!shader) {
+ if (fragmentcode)
+ MEM_freeN(fragmentcode);
+ if (vertexcode)
+ MEM_freeN(vertexcode);
+ if (geometrycode)
+ MEM_freeN(geometrycode);
+ MEM_freeN(fragmentgen);
+ MEM_freeN(vertexgen);
+ gpu_nodes_free(nodes);
+ return NULL;
+ }
+
+ /* create pass */
+ pass = MEM_callocN(sizeof(GPUPass), "GPUPass");
+ pass->shader = shader;
+ pass->fragmentcode = fragmentcode;
+ pass->geometrycode = geometrycode;
+ pass->vertexcode = vertexcode;
+ pass->libcode = glsl_material_library;
+
+ /* extract dynamic inputs and throw away nodes */
+ gpu_nodes_extract_dynamic_inputs_new(pass, nodes);
+ gpu_nodes_free(nodes);
+
+ MEM_freeN(fragmentgen);
+ MEM_freeN(vertexgen);
+
+ return pass;
+}
+
GPUPass *GPU_generate_pass(
ListBase *nodes, GPUNodeLink *outlink,
GPUVertexAttribs *attribs, int *builtins,
@@ -1672,7 +2162,7 @@ GPUPass *GPU_generate_pass(
gpu_nodes_get_builtin_flag(nodes, builtins);
/* generate code and compile with opengl */
- fragmentcode = code_generate_fragment(nodes, outlink->output);
+ fragmentcode = code_generate_fragment(NULL, nodes, outlink->output, false);
vertexcode = code_generate_vertex(nodes, type);
geometrycode = code_generate_geometry(nodes, use_opensubdiv);
@@ -1688,9 +2178,6 @@ GPUPass *GPU_generate_pass(
geometrycode,
glsl_material_library,
NULL,
- 0,
- 0,
- 0,
flags);
/* failed? */
@@ -1708,7 +2195,6 @@ GPUPass *GPU_generate_pass(
/* create pass */
pass = MEM_callocN(sizeof(GPUPass), "GPUPass");
- pass->output = outlink->output;
pass->shader = shader;
pass->fragmentcode = fragmentcode;
pass->geometrycode = geometrycode;
diff --git a/source/blender/gpu/intern/gpu_codegen.h b/source/blender/gpu/intern/gpu_codegen.h
index 7af17f9122d..14e07a6e012 100644
--- a/source/blender/gpu/intern/gpu_codegen.h
+++ b/source/blender/gpu/intern/gpu_codegen.h
@@ -57,7 +57,8 @@ typedef enum GPUDataSource {
GPU_SOURCE_OPENGL_BUILTIN,
GPU_SOURCE_TEX_PIXEL,
GPU_SOURCE_TEX,
- GPU_SOURCE_ATTRIB
+ GPU_SOURCE_ATTRIB,
+ GPU_SOURCE_STRUCT
} GPUDataSource;
typedef enum {
@@ -156,10 +157,7 @@ typedef struct GPUInput {
} GPUInput;
struct GPUPass {
- struct GPUPass *next, *prev;
-
ListBase inputs;
- struct GPUOutput *output;
struct GPUShader *shader;
char *fragmentcode;
char *geometrycode;
@@ -170,11 +168,18 @@ struct GPUPass {
typedef struct GPUPass GPUPass;
-GPUPass *GPU_generate_pass(ListBase *nodes, struct GPUNodeLink *outlink,
- struct GPUVertexAttribs *attribs, int *builtin,
- const GPUMatType type, const char *name,
- const bool use_opensubdiv,
- const bool use_new_shading);
+GPUPass *GPU_generate_pass_new(
+ struct GPUMaterial *material,
+ ListBase *nodes, struct GPUNodeLink *frag_outlink,
+ struct GPUVertexAttribs *attribs,
+ const char *vert_code, const char *geom_code,
+ const char *frag_lib, const char *defines);
+GPUPass *GPU_generate_pass(
+ ListBase *nodes, struct GPUNodeLink *outlink,
+ struct GPUVertexAttribs *attribs, int *builtin,
+ const GPUMatType type, const char *name,
+ const bool use_opensubdiv,
+ const bool use_new_shading);
struct GPUShader *GPU_pass_shader(GPUPass *pass);
diff --git a/source/blender/gpu/intern/gpu_compositing.c b/source/blender/gpu/intern/gpu_compositing.c
index 2f2a16f9e1d..3de363cc76e 100644
--- a/source/blender/gpu/intern/gpu_compositing.c
+++ b/source/blender/gpu/intern/gpu_compositing.c
@@ -42,11 +42,13 @@
#include "DNA_gpu_types.h"
#include "GPU_compositing.h"
+#include "GPU_draw.h"
#include "GPU_extensions.h"
#include "GPU_framebuffer.h"
#include "GPU_glew.h"
#include "GPU_shader.h"
#include "GPU_texture.h"
+#include "GPU_batch.h"
#include "MEM_guardedalloc.h"
@@ -193,7 +195,8 @@ struct GPUFX {
/* we have a stencil, restore the previous state */
bool restore_stencil;
- unsigned int vbuffer;
+ Gwn_Batch *quad_batch;
+ Gwn_Batch *point_batch;
};
#if 0
@@ -225,7 +228,13 @@ static GPUTexture * create_concentric_sample_texture(int side)
}
}
- tex = GPU_texture_create_1D_procedural(side * side, texels, NULL);
+ tex = GPU_texture_create_1D_custom(side * side, 2, GPU_RG16F, (float *)texels, NULL);
+
+ /* Set parameters */
+ GPU_texture_bind(tex, 0);
+ GPU_texture_filter_mode(tex, false);
+ GPU_texture_unbind(tex);
+
MEM_freeN(texels);
return tex;
}
@@ -247,7 +256,13 @@ static GPUTexture *create_spiral_sample_texture(int numsaples)
texels[i][1] = r * sinf(phi);
}
- tex = GPU_texture_create_1D_procedural(numsaples, (float *)texels, NULL);
+ tex = GPU_texture_create_1D_custom(numsaples, 2, GPU_RG16F, (float *)texels, NULL);
+
+ /* Set parameters */
+ GPU_texture_bind(tex, 0);
+ GPU_texture_filter_mode(tex, false);
+ GPU_texture_unbind(tex);
+
MEM_freeN(texels);
return tex;
}
@@ -257,12 +272,32 @@ GPUFX *GPU_fx_compositor_create(void)
{
GPUFX *fx = MEM_callocN(sizeof(GPUFX), "GPUFX compositor");
- glGenBuffers(1, &fx->vbuffer);
- glBindBuffer(GL_ARRAY_BUFFER, fx->vbuffer);
- glBufferData(GL_ARRAY_BUFFER, 16 * sizeof(float), NULL, GL_STATIC_DRAW);
- glBufferSubData(GL_ARRAY_BUFFER, 0, 8 * sizeof(float), fullscreencos);
- glBufferSubData(GL_ARRAY_BUFFER, 8 * sizeof(float), 8 * sizeof(float), fullscreenuvs);
- glBindBuffer(GL_ARRAY_BUFFER, 0);
+ /* Quad buffer */
+ static Gwn_VertFormat format = {0};
+ static unsigned int pos, uvs;
+ if (format.attrib_ct == 0) {
+ pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ uvs = GWN_vertformat_attr_add(&format, "uvs", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ }
+ Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
+ GWN_vertbuf_data_alloc(vbo, 4);
+ for (int i = 0; i < 4; ++i) {
+ GWN_vertbuf_attr_set(vbo, pos, i, fullscreencos[i]);
+ GWN_vertbuf_attr_set(vbo, uvs, i, fullscreenuvs[i]);
+ }
+ fx->quad_batch = GWN_batch_create_ex(GWN_PRIM_TRI_STRIP, vbo, NULL, GWN_BATCH_OWNS_VBO);
+
+ /* Point Buffer */
+ static Gwn_VertFormat format_point = {0};
+ static unsigned int dummy_attrib;
+ if (format_point.attrib_ct == 0) {
+ dummy_attrib = GWN_vertformat_attr_add(&format_point, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ }
+ float dummy[2] = {0.0f, 0.0f};
+ Gwn_VertBuf *vbo_point = GWN_vertbuf_create_with_format(&format_point);
+ GWN_vertbuf_data_alloc(vbo_point, 1);
+ GWN_vertbuf_attr_set(vbo_point, dummy_attrib, 0, &dummy);
+ fx->point_batch = GWN_batch_create_ex(GWN_PRIM_POINTS, vbo_point, NULL, GWN_BATCH_OWNS_VBO);
return fx;
}
@@ -352,12 +387,14 @@ static void cleanup_fx_gl_data(GPUFX *fx, bool do_fbo)
void GPU_fx_compositor_destroy(GPUFX *fx)
{
cleanup_fx_gl_data(fx, true);
- glDeleteBuffers(1, &fx->vbuffer);
+ GWN_batch_discard(fx->quad_batch);
+ GWN_batch_discard(fx->point_batch);
MEM_freeN(fx);
}
static GPUTexture * create_jitter_texture(void)
{
+ GPUTexture *tex;
float jitter[64 * 64][2];
int i;
@@ -367,7 +404,15 @@ static GPUTexture * create_jitter_texture(void)
normalize_v2(jitter[i]);
}
- return GPU_texture_create_2D_procedural(64, 64, &jitter[0][0], true, NULL);
+ tex = GPU_texture_create_2D_custom(64, 64, 2, GPU_RG16F, &jitter[0][0], NULL);
+
+ /* Set parameters */
+ GPU_texture_bind(tex, 0);
+ GPU_texture_filter_mode(tex, false);
+ GPU_texture_wrap_mode(tex, true);
+ GPU_texture_unbind(tex);
+
+ return tex;
}
@@ -382,9 +427,6 @@ bool GPU_fx_compositor_initialize_passes(
fx->effects = 0;
- if (!GLEW_EXT_framebuffer_object)
- return false;
-
if (!fx_settings) {
cleanup_fx_gl_data(fx, true);
return false;
@@ -436,7 +478,7 @@ bool GPU_fx_compositor_initialize_passes(
if (!fx->color_buffer || !fx->depth_buffer || w != fx->gbuffer_dim[0] || h != fx->gbuffer_dim[1]) {
cleanup_fx_gl_data(fx, false);
- if (!(fx->color_buffer = GPU_texture_create_2D(w, h, NULL, GPU_HDR_NONE, err_out))) {
+ if (!(fx->color_buffer = GPU_texture_create_2D(w, h, NULL, err_out))) {
printf(".256%s\n", err_out);
cleanup_fx_gl_data(fx, true);
return false;
@@ -472,8 +514,7 @@ bool GPU_fx_compositor_initialize_passes(
/* create textures for dof effect */
if (fx_flag & GPU_FX_FLAG_DOF) {
- bool dof_high_quality = (fx_settings->dof->high_quality != 0) &&
- GPU_geometry_shader_support() && GPU_instanced_drawing_support();
+ bool dof_high_quality = (fx_settings->dof->high_quality != 0);
/* cleanup buffers if quality setting has changed (no need to keep more buffers around than necessary ) */
if (dof_high_quality != fx->dof_high_quality)
@@ -488,38 +529,42 @@ bool GPU_fx_compositor_initialize_passes(
{
if (!(fx->dof_half_downsampled_near = GPU_texture_create_2D(
- fx->dof_downsampled_w, fx->dof_downsampled_h, NULL, GPU_HDR_NONE, err_out)))
+ fx->dof_downsampled_w, fx->dof_downsampled_h, NULL, err_out)))
{
printf("%.256s\n", err_out);
cleanup_fx_gl_data(fx, true);
return false;
}
if (!(fx->dof_half_downsampled_far = GPU_texture_create_2D(
- fx->dof_downsampled_w, fx->dof_downsampled_h, NULL, GPU_HDR_NONE, err_out)))
+ fx->dof_downsampled_w, fx->dof_downsampled_h, NULL, err_out)))
{
printf("%.256s\n", err_out);
cleanup_fx_gl_data(fx, true);
return false;
}
- if (!(fx->dof_nearfar_coc = GPU_texture_create_2D_procedural(
- fx->dof_downsampled_w, fx->dof_downsampled_h, NULL, false, err_out)))
+
+ if (!(fx->dof_nearfar_coc = GPU_texture_create_2D_custom(
+ fx->dof_downsampled_w, fx->dof_downsampled_h, 2, GPU_RG16F, NULL, err_out)))
{
printf("%.256s\n", err_out);
cleanup_fx_gl_data(fx, true);
return false;
}
+ GPU_texture_bind(fx->dof_nearfar_coc, 0);
+ GPU_texture_filter_mode(fx->dof_nearfar_coc, false);
+ GPU_texture_wrap_mode(fx->dof_nearfar_coc, false);
+ GPU_texture_unbind(fx->dof_nearfar_coc);
-
- if (!(fx->dof_near_blur = GPU_texture_create_2D(
- fx->dof_downsampled_w, fx->dof_downsampled_h, NULL, GPU_HDR_HALF_FLOAT, err_out)))
+ if (!(fx->dof_near_blur = GPU_texture_create_2D_custom(
+ fx->dof_downsampled_w, fx->dof_downsampled_h, 4, GPU_RGBA16F, NULL, err_out)))
{
printf("%.256s\n", err_out);
cleanup_fx_gl_data(fx, true);
return false;
}
- if (!(fx->dof_far_blur = GPU_texture_create_2D(
- fx->dof_downsampled_w, fx->dof_downsampled_h, NULL, GPU_HDR_HALF_FLOAT, err_out)))
+ if (!(fx->dof_far_blur = GPU_texture_create_2D_custom(
+ fx->dof_downsampled_w, fx->dof_downsampled_h, 4, GPU_RGBA16F, NULL, err_out)))
{
printf("%.256s\n", err_out);
cleanup_fx_gl_data(fx, true);
@@ -534,21 +579,21 @@ bool GPU_fx_compositor_initialize_passes(
if (!fx->dof_near_coc_buffer || !fx->dof_near_coc_blurred_buffer || !fx->dof_near_coc_final_buffer) {
if (!(fx->dof_near_coc_buffer = GPU_texture_create_2D(
- fx->dof_downsampled_w, fx->dof_downsampled_h, NULL, GPU_HDR_NONE, err_out)))
+ fx->dof_downsampled_w, fx->dof_downsampled_h, NULL, err_out)))
{
printf("%.256s\n", err_out);
cleanup_fx_gl_data(fx, true);
return false;
}
if (!(fx->dof_near_coc_blurred_buffer = GPU_texture_create_2D(
- fx->dof_downsampled_w, fx->dof_downsampled_h, NULL, GPU_HDR_NONE, err_out)))
+ fx->dof_downsampled_w, fx->dof_downsampled_h, NULL, err_out)))
{
printf("%.256s\n", err_out);
cleanup_fx_gl_data(fx, true);
return false;
}
if (!(fx->dof_near_coc_final_buffer = GPU_texture_create_2D(
- fx->dof_downsampled_w, fx->dof_downsampled_h, NULL, GPU_HDR_NONE, err_out)))
+ fx->dof_downsampled_w, fx->dof_downsampled_h, NULL, err_out)))
{
printf("%.256s\n", err_out);
cleanup_fx_gl_data(fx, true);
@@ -567,7 +612,7 @@ bool GPU_fx_compositor_initialize_passes(
/* we need to pass data between shader stages, allocate an extra color buffer */
if (num_passes > 1) {
if (!fx->color_buffer_sec) {
- if (!(fx->color_buffer_sec = GPU_texture_create_2D(w, h, NULL, GPU_HDR_NONE, err_out))) {
+ if (!(fx->color_buffer_sec = GPU_texture_create_2D(w, h, NULL, err_out))) {
printf(".256%s\n", err_out);
cleanup_fx_gl_data(fx, true);
return false;
@@ -585,11 +630,8 @@ bool GPU_fx_compositor_initialize_passes(
/* bind the buffers */
/* first depth buffer, because system assumes read/write buffers */
- if (!GPU_framebuffer_texture_attach(fx->gbuffer, fx->depth_buffer, 0, err_out))
- printf("%.256s\n", err_out);
-
- if (!GPU_framebuffer_texture_attach(fx->gbuffer, fx->color_buffer, 0, err_out))
- printf("%.256s\n", err_out);
+ GPU_framebuffer_texture_attach(fx->gbuffer, fx->depth_buffer, 0, 0);
+ GPU_framebuffer_texture_attach(fx->gbuffer, fx->color_buffer, 0, 0);
if (!GPU_framebuffer_check_valid(fx->gbuffer, err_out))
printf("%.256s\n", err_out);
@@ -600,7 +642,7 @@ bool GPU_fx_compositor_initialize_passes(
if (scissor_rect) {
int w_sc = BLI_rcti_size_x(scissor_rect) + 1;
int h_sc = BLI_rcti_size_y(scissor_rect) + 1;
- glPushAttrib(GL_SCISSOR_BIT);
+ gpuPushAttrib(GPU_SCISSOR_BIT);
glEnable(GL_SCISSOR_TEST);
glScissor(scissor_rect->xmin - rect->xmin, scissor_rect->ymin - rect->ymin,
w_sc, h_sc);
@@ -634,7 +676,7 @@ static void gpu_fx_bind_render_target(int *passes_left, GPUFX *fx, struct GPUOff
}
else {
/* bind the ping buffer to the color buffer */
- GPU_framebuffer_texture_attach(fx->gbuffer, target, 0, NULL);
+ GPU_framebuffer_texture_attach(fx->gbuffer, target, 0, 0);
}
}
@@ -663,8 +705,7 @@ void GPU_fx_compositor_setup_XRay_pass(GPUFX *fx, bool do_xray)
GPU_framebuffer_texture_detach(fx->depth_buffer);
/* first depth buffer, because system assumes read/write buffers */
- if (!GPU_framebuffer_texture_attach(fx->gbuffer, fx->depth_buffer_xray, 0, err_out))
- printf("%.256s\n", err_out);
+ GPU_framebuffer_texture_attach(fx->gbuffer, fx->depth_buffer_xray, 0, 0);
}
@@ -674,39 +715,35 @@ void GPU_fx_compositor_XRay_resolve(GPUFX *fx)
GPU_framebuffer_texture_detach(fx->depth_buffer_xray);
/* attach regular framebuffer */
- GPU_framebuffer_texture_attach(fx->gbuffer, fx->depth_buffer, 0, NULL);
+ GPU_framebuffer_texture_attach(fx->gbuffer, fx->depth_buffer, 0, 0);
/* full screen quad where we will always write to depth buffer */
- glPushAttrib(GL_DEPTH_BUFFER_BIT | GL_SCISSOR_BIT);
+ gpuPushAttrib(GPU_DEPTH_BUFFER_BIT | GPU_SCISSOR_BIT);
glDepthFunc(GL_ALWAYS);
/* disable scissor from sculpt if any */
glDisable(GL_SCISSOR_TEST);
/* disable writing to color buffer, it's depth only pass */
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
- /* set up quad buffer */
- glBindBuffer(GL_ARRAY_BUFFER, fx->vbuffer);
- glVertexPointer(2, GL_FLOAT, 0, NULL);
- glTexCoordPointer(2, GL_FLOAT, 0, ((GLubyte *)NULL + 8 * sizeof(float)));
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_TEXTURE_COORD_ARRAY);
-
depth_resolve_shader = GPU_shader_get_builtin_fx_shader(GPU_SHADER_FX_DEPTH_RESOLVE, false);
if (depth_resolve_shader) {
- GPUDepthResolveInterface *interface = GPU_shader_get_interface(depth_resolve_shader);
+ GPUDepthResolveInterface *interface = GPU_fx_shader_get_interface(depth_resolve_shader);
- GPU_shader_bind(depth_resolve_shader);
+ /* set up quad buffer */
+ GWN_batch_program_set(fx->quad_batch, GPU_shader_get_program(depth_resolve_shader), GPU_shader_get_interface(depth_resolve_shader));
GPU_texture_bind(fx->depth_buffer_xray, 0);
- GPU_texture_filter_mode(fx->depth_buffer_xray, false, true);
+ GPU_texture_compare_mode(fx->depth_buffer_xray, false);
+ GPU_texture_filter_mode(fx->depth_buffer_xray, true);
GPU_shader_uniform_texture(depth_resolve_shader, interface->depth_uniform, fx->depth_buffer_xray);
/* draw */
- glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
+ GWN_batch_draw(fx->quad_batch);
/* disable bindings */
- GPU_texture_filter_mode(fx->depth_buffer_xray, true, false);
+ GPU_texture_compare_mode(fx->depth_buffer_xray, true);
+ GPU_texture_filter_mode(fx->depth_buffer_xray, false);
GPU_texture_unbind(fx->depth_buffer_xray);
GPU_shader_unbind();
@@ -714,11 +751,7 @@ void GPU_fx_compositor_XRay_resolve(GPUFX *fx)
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
- glBindBuffer(GL_ARRAY_BUFFER, 0);
- glDisableClientState(GL_VERTEX_ARRAY);
- glDisableClientState(GL_TEXTURE_COORD_ARRAY);
-
- glPopAttrib();
+ gpuPopAttrib();
}
@@ -748,19 +781,13 @@ bool GPU_fx_do_composite_pass(
GPU_framebuffer_texture_detach(fx->color_buffer);
GPU_framebuffer_texture_detach(fx->depth_buffer);
- if (fx->restore_stencil)
- glPopAttrib();
+ if (fx->restore_stencil) {
+ gpuPopAttrib();
+ }
src = fx->color_buffer;
target = fx->color_buffer_sec;
- /* set up quad buffer */
- glBindBuffer(GL_ARRAY_BUFFER, fx->vbuffer);
- glVertexPointer(2, GL_FLOAT, 0, NULL);
- glTexCoordPointer(2, GL_FLOAT, 0, ((GLubyte *)NULL + 8 * sizeof(float)));
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_TEXTURE_COORD_ARRAY);
-
/* full screen FX pass */
/* invert the view matrix */
@@ -788,8 +815,6 @@ bool GPU_fx_do_composite_pass(
viewvecs[1][2] = vec_far[2] - viewvecs[0][2];
}
- /* set invalid color in case shader fails */
- glColor3f(1.0, 0.0, 1.0);
glDisable(GL_DEPTH_TEST);
/* ssao pass */
@@ -810,9 +835,9 @@ bool GPU_fx_do_composite_pass(
ssao_params[3] = (passes_left == 1 && !ofs) ? dfdyfac[0] : dfdyfac[1];
- GPUSSAOShaderInterface *interface = GPU_shader_get_interface(ssao_shader);
+ GPUSSAOShaderInterface *interface = GPU_fx_shader_get_interface(ssao_shader);
- GPU_shader_bind(ssao_shader);
+ GWN_batch_program_set(fx->quad_batch, GPU_shader_get_program(ssao_shader), GPU_shader_get_interface(ssao_shader));
GPU_shader_uniform_vector(ssao_shader, interface->ssao_uniform, 4, 1, ssao_params);
GPU_shader_uniform_vector(ssao_shader, interface->ssao_color_uniform, 4, 1, fx_ssao->color);
@@ -823,7 +848,8 @@ bool GPU_fx_do_composite_pass(
GPU_shader_uniform_texture(ssao_shader, interface->color_uniform, src);
GPU_texture_bind(fx->depth_buffer, numslots++);
- GPU_texture_filter_mode(fx->depth_buffer, false, true);
+ GPU_texture_compare_mode(fx->depth_buffer, false);
+ GPU_texture_filter_mode(fx->depth_buffer, true);
GPU_shader_uniform_texture(ssao_shader, interface->depth_uniform, fx->depth_buffer);
GPU_texture_bind(fx->jitter_buffer, numslots++);
@@ -835,11 +861,12 @@ bool GPU_fx_do_composite_pass(
/* draw */
gpu_fx_bind_render_target(&passes_left, fx, ofs, target);
- glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
+ GWN_batch_draw(fx->quad_batch);
/* disable bindings */
GPU_texture_unbind(src);
- GPU_texture_filter_mode(fx->depth_buffer, true, false);
+ GPU_texture_compare_mode(fx->depth_buffer, true);
+ GPU_texture_filter_mode(fx->depth_buffer, false);
GPU_texture_unbind(fx->depth_buffer);
GPU_texture_unbind(fx->jitter_buffer);
GPU_texture_unbind(fx->ssao_spiral_samples_tex);
@@ -892,11 +919,8 @@ bool GPU_fx_do_composite_pass(
if (!(dof_shader_pass1 && dof_shader_pass2 && dof_shader_pass3)) {
GPU_framebuffer_texture_unbind(fx->gbuffer, NULL);
GPU_framebuffer_restore();
- glDisableClientState(GL_VERTEX_ARRAY);
- glDisableClientState(GL_TEXTURE_COORD_ARRAY);
GPU_shader_unbind();
- glBindBuffer(GL_ARRAY_BUFFER, 0);
return false;
}
@@ -904,9 +928,9 @@ bool GPU_fx_do_composite_pass(
{
float invrendertargetdim[2] = {1.0f / fx->dof_downsampled_w, 1.0f / fx->dof_downsampled_h};
- GPUDOFHQPassOneInterface *interface = GPU_shader_get_interface(dof_shader_pass1);
+ GPUDOFHQPassOneInterface *interface = GPU_fx_shader_get_interface(dof_shader_pass1);
- GPU_shader_bind(dof_shader_pass1);
+ GWN_batch_program_set(fx->quad_batch, GPU_shader_get_program(dof_shader_pass1), GPU_shader_get_interface(dof_shader_pass1));
GPU_shader_uniform_vector(dof_shader_pass1, interface->dof_uniform, 4, 1, dof_params);
GPU_shader_uniform_vector(dof_shader_pass1, interface->invrendertargetdim_uniform, 2, 1, invrendertargetdim);
@@ -915,28 +939,31 @@ bool GPU_fx_do_composite_pass(
GPU_shader_uniform_vector(dof_shader_pass1, interface->invrendertargetdim_uniform, 2, 1, invrendertargetdim);
GPU_texture_bind(fx->depth_buffer, numslots++);
- GPU_texture_filter_mode(fx->depth_buffer, false, false);
+ GPU_texture_compare_mode(fx->depth_buffer, false);
+ GPU_texture_filter_mode(fx->depth_buffer, false);
GPU_shader_uniform_texture(dof_shader_pass1, interface->depth_uniform, fx->depth_buffer);
GPU_texture_bind(src, numslots++);
/* disable filtering for the texture so custom downsample can do the right thing */
- GPU_texture_filter_mode(src, false, false);
+ GPU_texture_filter_mode(src, false);
GPU_shader_uniform_texture(dof_shader_pass2, interface->color_uniform, src);
/* target is the downsampled coc buffer */
- GPU_framebuffer_texture_attach(fx->gbuffer, fx->dof_half_downsampled_near, 0, NULL);
- GPU_framebuffer_texture_attach(fx->gbuffer, fx->dof_half_downsampled_far, 1, NULL);
- GPU_framebuffer_texture_attach(fx->gbuffer, fx->dof_nearfar_coc, 2, NULL);
+ GPU_framebuffer_texture_attach(fx->gbuffer, fx->dof_half_downsampled_near, 0, 0);
+ GPU_framebuffer_texture_attach(fx->gbuffer, fx->dof_half_downsampled_far, 1, 0);
+ GPU_framebuffer_texture_attach(fx->gbuffer, fx->dof_nearfar_coc, 2, 0);
/* binding takes care of setting the viewport to the downsampled size */
GPU_framebuffer_slots_bind(fx->gbuffer, 0);
GPU_framebuffer_check_valid(fx->gbuffer, NULL);
- glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
+ GWN_batch_draw(fx->quad_batch);
+
/* disable bindings */
- GPU_texture_filter_mode(src, false, true);
+ GPU_texture_filter_mode(src, true);
GPU_texture_unbind(src);
- GPU_texture_filter_mode(fx->depth_buffer, true, false);
+ GPU_texture_compare_mode(fx->depth_buffer, true);
+ GPU_texture_filter_mode(fx->depth_buffer, false);
GPU_texture_unbind(fx->depth_buffer);
GPU_framebuffer_texture_detach(fx->dof_half_downsampled_near);
@@ -953,24 +980,23 @@ bool GPU_fx_do_composite_pass(
int rendertargetdim[2] = {fx->dof_downsampled_w, fx->dof_downsampled_h};
float selection[2] = {0.0f, 1.0f};
- GPUDOFHQPassTwoInterface *interface = GPU_shader_get_interface(dof_shader_pass2);
+ GPUDOFHQPassTwoInterface *interface = GPU_fx_shader_get_interface(dof_shader_pass2);
- GPU_shader_bind(dof_shader_pass2);
+ GWN_batch_program_set(fx->point_batch, GPU_shader_get_program(dof_shader_pass2), GPU_shader_get_interface(dof_shader_pass2));
+
+ GPU_texture_bind(fx->dof_nearfar_coc, numslots++);
+ GPU_texture_bind(fx->dof_half_downsampled_far, numslots++);
+ GPU_texture_bind(fx->dof_half_downsampled_near, numslots++);
GPU_shader_uniform_vector(dof_shader_pass2, interface->dof_uniform, 4, 1, dof_params);
GPU_shader_uniform_vector_int(dof_shader_pass2, interface->rendertargetdim_uniform, 2, 1, rendertargetdim);
GPU_shader_uniform_vector(dof_shader_pass2, interface->select_uniform, 2, 1, selection);
-
- GPU_texture_bind(fx->dof_nearfar_coc, numslots++);
GPU_shader_uniform_texture(dof_shader_pass2, interface->coc_uniform, fx->dof_nearfar_coc);
-
- GPU_texture_bind(fx->dof_half_downsampled_far, numslots++);
- GPU_texture_bind(fx->dof_half_downsampled_near, numslots++);
GPU_shader_uniform_texture(dof_shader_pass2, interface->color_uniform, fx->dof_half_downsampled_far);
- GPU_texture_filter_mode(fx->dof_half_downsampled_far, false, false);
+ GPU_texture_filter_mode(fx->dof_half_downsampled_far, false);
/* target is the downsampled coc buffer */
- GPU_framebuffer_texture_attach(fx->gbuffer, fx->dof_far_blur, 0, NULL);
+ GPU_framebuffer_texture_attach(fx->gbuffer, fx->dof_far_blur, 0, 0);
GPU_texture_bind_as_framebuffer(fx->dof_far_blur);
glDisable(GL_DEPTH_TEST);
@@ -981,24 +1007,24 @@ bool GPU_fx_do_composite_pass(
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
/* the draw call we all waited for, draw a point per pixel, scaled per circle of confusion */
- glDrawArraysInstancedARB(GL_POINTS, 0, 1, fx->dof_downsampled_w * fx->dof_downsampled_h);
+ GWN_batch_draw_stupid_instanced(fx->point_batch, 0, fx->dof_downsampled_w * fx->dof_downsampled_h, 0, 0, 0, NULL, NULL);
GPU_texture_unbind(fx->dof_half_downsampled_far);
GPU_framebuffer_texture_detach(fx->dof_far_blur);
- GPU_shader_uniform_texture(dof_shader_pass2, interface->color_uniform, fx->dof_half_downsampled_near);
- GPU_texture_filter_mode(fx->dof_half_downsampled_near, false, false);
-
selection[0] = 1.0f;
selection[1] = 0.0f;
GPU_shader_uniform_vector(dof_shader_pass2, interface->select_uniform, 2, 1, selection);
+ GPU_shader_uniform_texture(dof_shader_pass2, interface->color_uniform, fx->dof_half_downsampled_near);
+ GPU_texture_filter_mode(fx->dof_half_downsampled_near, false);
- GPU_framebuffer_texture_attach(fx->gbuffer, fx->dof_near_blur, 0, NULL);
+ GPU_framebuffer_texture_attach(fx->gbuffer, fx->dof_near_blur, 0, 0);
/* have to clear the buffer unfortunately */
glClear(GL_COLOR_BUFFER_BIT);
/* the draw call we all waited for, draw a point per pixel, scaled per circle of confusion */
- glDrawArraysInstancedARB(GL_POINTS, 0, 1, fx->dof_downsampled_w * fx->dof_downsampled_h);
+ GWN_batch_draw_stupid_instanced(fx->point_batch, 0, fx->dof_downsampled_w * fx->dof_downsampled_h, 0, 0, 0, NULL, NULL);
+ GWN_batch_program_use_end(fx->point_batch);
/* disable bindings */
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
@@ -1010,15 +1036,16 @@ bool GPU_fx_do_composite_pass(
GPU_texture_unbind(fx->dof_nearfar_coc);
GPU_framebuffer_texture_unbind(fx->gbuffer, fx->dof_far_blur);
+ numslots = 0;
}
/* third pass, accumulate the near/far blur fields */
{
float invrendertargetdim[2] = {1.0f / fx->dof_downsampled_w, 1.0f / fx->dof_downsampled_h};
- GPUDOFHQPassThreeInterface *interface = GPU_shader_get_interface(dof_shader_pass3);
+ GPUDOFHQPassThreeInterface *interface = GPU_fx_shader_get_interface(dof_shader_pass3);
- GPU_shader_bind(dof_shader_pass3);
+ GWN_batch_program_set(fx->quad_batch, GPU_shader_get_program(dof_shader_pass3), GPU_shader_get_interface(dof_shader_pass3));
GPU_shader_uniform_vector(dof_shader_pass3, interface->dof_uniform, 4, 1, dof_params);
@@ -1027,14 +1054,15 @@ bool GPU_fx_do_composite_pass(
GPU_texture_bind(fx->dof_near_blur, numslots++);
GPU_shader_uniform_texture(dof_shader_pass3, interface->near_uniform, fx->dof_near_blur);
- GPU_texture_filter_mode(fx->dof_near_blur, false, true);
+ GPU_texture_filter_mode(fx->dof_near_blur, true);
GPU_texture_bind(fx->dof_far_blur, numslots++);
GPU_shader_uniform_texture(dof_shader_pass3, interface->far_uniform, fx->dof_far_blur);
- GPU_texture_filter_mode(fx->dof_far_blur, false, true);
+ GPU_texture_filter_mode(fx->dof_far_blur, true);
GPU_texture_bind(fx->depth_buffer, numslots++);
- GPU_texture_filter_mode(fx->depth_buffer, false, false);
+ GPU_texture_compare_mode(fx->depth_buffer, false);
+ GPU_texture_filter_mode(fx->depth_buffer, false);
GPU_shader_uniform_texture(dof_shader_pass3, interface->depth_uniform, fx->depth_buffer);
GPU_texture_bind(src, numslots++);
@@ -1043,13 +1071,13 @@ bool GPU_fx_do_composite_pass(
/* if this is the last pass, prepare for rendering on the frambuffer */
gpu_fx_bind_render_target(&passes_left, fx, ofs, target);
- glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
+ GWN_batch_draw(fx->quad_batch);
/* disable bindings */
GPU_texture_unbind(fx->dof_near_blur);
GPU_texture_unbind(fx->dof_far_blur);
GPU_texture_unbind(src);
- GPU_texture_filter_mode(fx->depth_buffer, true, false);
+ GPU_texture_compare_mode(fx->depth_buffer, true);
GPU_texture_unbind(fx->depth_buffer);
/* may not be attached, in that case this just returns */
@@ -1085,11 +1113,8 @@ bool GPU_fx_do_composite_pass(
if (!(dof_shader_pass1 && dof_shader_pass2 && dof_shader_pass3 && dof_shader_pass4 && dof_shader_pass5)) {
GPU_framebuffer_texture_unbind(fx->gbuffer, NULL);
GPU_framebuffer_restore();
- glDisableClientState(GL_VERTEX_ARRAY);
- glDisableClientState(GL_TEXTURE_COORD_ARRAY);
GPU_shader_unbind();
- glBindBuffer(GL_ARRAY_BUFFER, 0);
return false;
}
@@ -1097,9 +1122,9 @@ bool GPU_fx_do_composite_pass(
{
float invrendertargetdim[2] = {1.0f / fx->gbuffer_dim[0], 1.0f / fx->gbuffer_dim[1]};
- GPUDOFPassOneInterface *interface = GPU_shader_get_interface(dof_shader_pass1);
+ GPUDOFPassOneInterface *interface = GPU_fx_shader_get_interface(dof_shader_pass1);
- GPU_shader_bind(dof_shader_pass1);
+ GWN_batch_program_set(fx->quad_batch, GPU_shader_get_program(dof_shader_pass1), GPU_shader_get_interface(dof_shader_pass1));
GPU_shader_uniform_vector(dof_shader_pass1, interface->dof_uniform, 4, 1, dof_params);
GPU_shader_uniform_vector(dof_shader_pass1, interface->invrendertargetdim_uniform, 2, 1, invrendertargetdim);
@@ -1109,18 +1134,20 @@ bool GPU_fx_do_composite_pass(
GPU_shader_uniform_texture(dof_shader_pass1, interface->color_uniform, src);
GPU_texture_bind(fx->depth_buffer, numslots++);
- GPU_texture_filter_mode(fx->depth_buffer, false, true);
+ GPU_texture_compare_mode(fx->depth_buffer, false);
+ GPU_texture_filter_mode(fx->depth_buffer, true);
GPU_shader_uniform_texture(dof_shader_pass1, interface->depth_uniform, fx->depth_buffer);
/* target is the downsampled coc buffer */
- GPU_framebuffer_texture_attach(fx->gbuffer, fx->dof_near_coc_buffer, 0, NULL);
+ GPU_framebuffer_texture_attach(fx->gbuffer, fx->dof_near_coc_buffer, 0, 0);
/* binding takes care of setting the viewport to the downsampled size */
GPU_texture_bind_as_framebuffer(fx->dof_near_coc_buffer);
- glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
+ GWN_batch_draw(fx->quad_batch);
/* disable bindings */
GPU_texture_unbind(src);
- GPU_texture_filter_mode(fx->depth_buffer, true, false);
+ GPU_texture_compare_mode(fx->depth_buffer, true);
+ GPU_texture_filter_mode(fx->depth_buffer, false);
GPU_texture_unbind(fx->depth_buffer);
GPU_framebuffer_texture_detach(fx->dof_near_coc_buffer);
@@ -1134,32 +1161,37 @@ bool GPU_fx_do_composite_pass(
float tmp = invrendertargetdim[0];
invrendertargetdim[0] = 0.0f;
- GPUDOFPassTwoInterface *interface = GPU_shader_get_interface(dof_shader_pass2);
+ GPUDOFPassTwoInterface *interface = GPU_fx_shader_get_interface(dof_shader_pass2);
dof_params[2] = GPU_texture_width(fx->dof_near_coc_blurred_buffer) / (scale_camera * fx_dof->sensor);
/* Blurring vertically */
- GPU_shader_bind(dof_shader_pass2);
+ GWN_batch_program_set(fx->quad_batch, GPU_shader_get_program(dof_shader_pass2), GPU_shader_get_interface(dof_shader_pass2));
GPU_shader_uniform_vector(dof_shader_pass2, interface->dof_uniform, 4, 1, dof_params);
GPU_shader_uniform_vector(dof_shader_pass2, interface->invrendertargetdim_uniform, 2, 1, invrendertargetdim);
GPU_shader_uniform_vector(dof_shader_pass2, interface->viewvecs_uniform, 4, 3, viewvecs[0]);
GPU_texture_bind(fx->depth_buffer, numslots++);
- GPU_texture_filter_mode(fx->depth_buffer, false, true);
+ GPU_texture_compare_mode(fx->depth_buffer, false);
+ GPU_texture_filter_mode(fx->depth_buffer, true);
GPU_shader_uniform_texture(dof_shader_pass2, interface->depth_uniform, fx->depth_buffer);
GPU_texture_bind(fx->dof_near_coc_buffer, numslots++);
GPU_shader_uniform_texture(dof_shader_pass2, interface->color_uniform, fx->dof_near_coc_buffer);
/* use final buffer as a temp here */
- GPU_framebuffer_texture_attach(fx->gbuffer, fx->dof_near_coc_final_buffer, 0, NULL);
+ GPU_framebuffer_texture_attach(fx->gbuffer, fx->dof_near_coc_final_buffer, 0, 0);
/* Drawing quad */
- glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
+ GWN_batch_draw(fx->quad_batch);
+
+ /* Rebind Shader */
+ GWN_batch_program_set(fx->quad_batch, GPU_shader_get_program(dof_shader_pass2), GPU_shader_get_interface(dof_shader_pass2));
/* *unbind/detach */
GPU_texture_unbind(fx->dof_near_coc_buffer);
+
GPU_framebuffer_texture_detach(fx->dof_near_coc_final_buffer);
/* Blurring horizontally */
@@ -1170,11 +1202,13 @@ bool GPU_fx_do_composite_pass(
GPU_texture_bind(fx->dof_near_coc_final_buffer, numslots++);
GPU_shader_uniform_texture(dof_shader_pass2, interface->color_uniform, fx->dof_near_coc_final_buffer);
- GPU_framebuffer_texture_attach(fx->gbuffer, fx->dof_near_coc_blurred_buffer, 0, NULL);
- glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
+ GPU_framebuffer_texture_attach(fx->gbuffer, fx->dof_near_coc_blurred_buffer, 0, 0);
+
+ GWN_batch_draw(fx->quad_batch);
/* *unbind/detach */
- GPU_texture_filter_mode(fx->depth_buffer, true, false);
+ GPU_texture_compare_mode(fx->depth_buffer, true);
+ GPU_texture_filter_mode(fx->depth_buffer, false);
GPU_texture_unbind(fx->depth_buffer);
GPU_texture_unbind(fx->dof_near_coc_final_buffer);
@@ -1187,9 +1221,9 @@ bool GPU_fx_do_composite_pass(
/* third pass, calculate near coc */
{
- GPUDOFPassThreeInterface *interface = GPU_shader_get_interface(dof_shader_pass3);
+ GPUDOFPassThreeInterface *interface = GPU_fx_shader_get_interface(dof_shader_pass3);
- GPU_shader_bind(dof_shader_pass3);
+ GWN_batch_program_set(fx->quad_batch, GPU_shader_get_program(dof_shader_pass3), GPU_shader_get_interface(dof_shader_pass3));
GPU_texture_bind(fx->dof_near_coc_buffer, numslots++);
GPU_shader_uniform_texture(dof_shader_pass3, interface->near_coc_downsampled, fx->dof_near_coc_buffer);
@@ -1197,9 +1231,9 @@ bool GPU_fx_do_composite_pass(
GPU_texture_bind(fx->dof_near_coc_blurred_buffer, numslots++);
GPU_shader_uniform_texture(dof_shader_pass3, interface->near_coc_blurred, fx->dof_near_coc_blurred_buffer);
- GPU_framebuffer_texture_attach(fx->gbuffer, fx->dof_near_coc_final_buffer, 0, NULL);
+ GPU_framebuffer_texture_attach(fx->gbuffer, fx->dof_near_coc_final_buffer, 0, 0);
- glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
+ GWN_batch_draw(fx->quad_batch);
/* disable bindings */
GPU_texture_unbind(fx->dof_near_coc_buffer);
GPU_texture_unbind(fx->dof_near_coc_blurred_buffer);
@@ -1215,17 +1249,17 @@ bool GPU_fx_do_composite_pass(
float invrendertargetdim[2] = {1.0f / GPU_texture_width(fx->dof_near_coc_blurred_buffer),
1.0f / GPU_texture_height(fx->dof_near_coc_blurred_buffer)};
- GPUDOFPassFourInterface *interface = GPU_shader_get_interface(dof_shader_pass4);
+ GPUDOFPassFourInterface *interface = GPU_fx_shader_get_interface(dof_shader_pass4);
- GPU_shader_bind(dof_shader_pass4);
+ GWN_batch_program_set(fx->quad_batch, GPU_shader_get_program(dof_shader_pass4), GPU_shader_get_interface(dof_shader_pass4));
GPU_texture_bind(fx->dof_near_coc_final_buffer, numslots++);
GPU_shader_uniform_texture(dof_shader_pass4, interface->near_coc_downsampled, fx->dof_near_coc_final_buffer);
GPU_shader_uniform_vector(dof_shader_pass4, interface->invrendertargetdim_uniform, 2, 1, invrendertargetdim);
- GPU_framebuffer_texture_attach(fx->gbuffer, fx->dof_near_coc_buffer, 0, NULL);
+ GPU_framebuffer_texture_attach(fx->gbuffer, fx->dof_near_coc_buffer, 0, 0);
- glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
+ GWN_batch_draw(fx->quad_batch);
/* disable bindings */
GPU_texture_unbind(fx->dof_near_coc_final_buffer);
@@ -1240,9 +1274,9 @@ bool GPU_fx_do_composite_pass(
{
float invrendertargetdim[2] = {1.0f / fx->gbuffer_dim[0], 1.0f / fx->gbuffer_dim[1]};
- GPUDOFPassFiveInterface *interface = GPU_shader_get_interface(dof_shader_pass5);
+ GPUDOFPassFiveInterface *interface = GPU_fx_shader_get_interface(dof_shader_pass5);
- GPU_shader_bind(dof_shader_pass5);
+ GWN_batch_program_set(fx->quad_batch, GPU_shader_get_program(dof_shader_pass5), GPU_shader_get_interface(dof_shader_pass5));
GPU_shader_uniform_vector(dof_shader_pass5, interface->dof_uniform, 4, 1, dof_params);
GPU_shader_uniform_vector(dof_shader_pass5, interface->invrendertargetdim_uniform, 2, 1, invrendertargetdim);
@@ -1258,18 +1292,20 @@ bool GPU_fx_do_composite_pass(
GPU_shader_uniform_texture(dof_shader_pass5, interface->medium_blurred_uniform, fx->dof_near_coc_buffer);
GPU_texture_bind(fx->depth_buffer, numslots++);
- GPU_texture_filter_mode(fx->depth_buffer, false, true);
+ GPU_texture_compare_mode(fx->depth_buffer, false);
+ GPU_texture_filter_mode(fx->depth_buffer, true);
GPU_shader_uniform_texture(dof_shader_pass5, interface->depth_uniform, fx->depth_buffer);
/* if this is the last pass, prepare for rendering on the frambuffer */
gpu_fx_bind_render_target(&passes_left, fx, ofs, target);
- glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
+ GWN_batch_draw(fx->quad_batch);
/* disable bindings */
GPU_texture_unbind(fx->dof_near_coc_buffer);
GPU_texture_unbind(fx->dof_near_coc_blurred_buffer);
GPU_texture_unbind(src);
- GPU_texture_filter_mode(fx->depth_buffer, true, false);
+ GPU_texture_compare_mode(fx->depth_buffer, true);
+ GPU_texture_filter_mode(fx->depth_buffer, false);
GPU_texture_unbind(fx->depth_buffer);
/* may not be attached, in that case this just returns */
@@ -1289,10 +1325,6 @@ bool GPU_fx_do_composite_pass(
}
}
- glDisableClientState(GL_VERTEX_ARRAY);
- glDisableClientState(GL_TEXTURE_COORD_ARRAY);
- glBindBuffer(GL_ARRAY_BUFFER, 0);
-
GPU_shader_unbind();
return true;
@@ -1305,6 +1337,7 @@ void GPU_fx_compositor_init_dof_settings(GPUDOFSettings *fx_dof)
fx_dof->focus_distance = 1.0f;
fx_dof->sensor = 1.0f;
fx_dof->num_blades = 6;
+ fx_dof->ratio = 1.0f;
}
void GPU_fx_compositor_init_ssao_settings(GPUSSAOSettings *fx_ssao)
@@ -1315,7 +1348,7 @@ void GPU_fx_compositor_init_ssao_settings(GPUSSAOSettings *fx_ssao)
fx_ssao->samples = 20;
}
-void GPU_fx_shader_init_interface(struct GPUShader *shader, GPUFXShaderEffect effect)
+void GPU_fx_shader_init_interface(GPUShader *shader, GPUFXShaderEffect effect)
{
if (!shader)
return;
@@ -1334,7 +1367,7 @@ void GPU_fx_shader_init_interface(struct GPUShader *shader, GPUFXShaderEffect ef
interface->ssao_concentric_tex = GPU_shader_get_uniform(shader, "ssao_concentric_tex");
interface->ssao_jitter_uniform = GPU_shader_get_uniform(shader, "jitter_tex");
- GPU_shader_set_interface(shader, interface);
+ GPU_fx_shader_set_interface(shader, interface);
break;
}
@@ -1348,7 +1381,7 @@ void GPU_fx_shader_init_interface(struct GPUShader *shader, GPUFXShaderEffect ef
interface->depth_uniform = GPU_shader_get_uniform(shader, "depthbuffer");
interface->viewvecs_uniform = GPU_shader_get_uniform(shader, "viewvecs");
- GPU_shader_set_interface(shader, interface);
+ GPU_fx_shader_set_interface(shader, interface);
break;
}
@@ -1362,7 +1395,7 @@ void GPU_fx_shader_init_interface(struct GPUShader *shader, GPUFXShaderEffect ef
interface->select_uniform = GPU_shader_get_uniform(shader, "layerselection");
interface->dof_uniform = GPU_shader_get_uniform(shader, "dof_params");
- GPU_shader_set_interface(shader, interface);
+ GPU_fx_shader_set_interface(shader, interface);
break;
}
@@ -1378,7 +1411,7 @@ void GPU_fx_shader_init_interface(struct GPUShader *shader, GPUFXShaderEffect ef
interface->viewvecs_uniform = GPU_shader_get_uniform(shader, "viewvecs");
interface->depth_uniform = GPU_shader_get_uniform(shader, "depthbuffer");
- GPU_shader_set_interface(shader, interface);
+ GPU_fx_shader_set_interface(shader, interface);
break;
}
@@ -1392,7 +1425,7 @@ void GPU_fx_shader_init_interface(struct GPUShader *shader, GPUFXShaderEffect ef
interface->depth_uniform = GPU_shader_get_uniform(shader, "depthbuffer");
interface->viewvecs_uniform = GPU_shader_get_uniform(shader, "viewvecs");
- GPU_shader_set_interface(shader, interface);
+ GPU_fx_shader_set_interface(shader, interface);
break;
}
case GPU_SHADER_FX_DEPTH_OF_FIELD_PASS_TWO:
@@ -1405,7 +1438,7 @@ void GPU_fx_shader_init_interface(struct GPUShader *shader, GPUFXShaderEffect ef
interface->depth_uniform = GPU_shader_get_uniform(shader, "depthbuffer");
interface->viewvecs_uniform = GPU_shader_get_uniform(shader, "viewvecs");
- GPU_shader_set_interface(shader, interface);
+ GPU_fx_shader_set_interface(shader, interface);
break;
}
case GPU_SHADER_FX_DEPTH_OF_FIELD_PASS_THREE:
@@ -1415,7 +1448,7 @@ void GPU_fx_shader_init_interface(struct GPUShader *shader, GPUFXShaderEffect ef
interface->near_coc_downsampled = GPU_shader_get_uniform(shader, "colorbuffer");
interface->near_coc_blurred = GPU_shader_get_uniform(shader, "blurredcolorbuffer");
- GPU_shader_set_interface(shader, interface);
+ GPU_fx_shader_set_interface(shader, interface);
break;
}
case GPU_SHADER_FX_DEPTH_OF_FIELD_PASS_FOUR:
@@ -1425,7 +1458,7 @@ void GPU_fx_shader_init_interface(struct GPUShader *shader, GPUFXShaderEffect ef
interface->near_coc_downsampled = GPU_shader_get_uniform(shader, "colorbuffer");
interface->invrendertargetdim_uniform = GPU_shader_get_uniform(shader, "invrendertargetdim");
- GPU_shader_set_interface(shader, interface);
+ GPU_fx_shader_set_interface(shader, interface);
break;
}
case GPU_SHADER_FX_DEPTH_OF_FIELD_PASS_FIVE:
@@ -1440,7 +1473,7 @@ void GPU_fx_shader_init_interface(struct GPUShader *shader, GPUFXShaderEffect ef
interface->depth_uniform = GPU_shader_get_uniform(shader, "depthbuffer");
interface->viewvecs_uniform = GPU_shader_get_uniform(shader, "viewvecs");
- GPU_shader_set_interface(shader, interface);
+ GPU_fx_shader_set_interface(shader, interface);
break;
}
@@ -1450,7 +1483,7 @@ void GPU_fx_shader_init_interface(struct GPUShader *shader, GPUFXShaderEffect ef
interface->depth_uniform = GPU_shader_get_uniform(shader, "depthbuffer");
- GPU_shader_set_interface(shader, interface);
+ GPU_fx_shader_set_interface(shader, interface);
break;
}
diff --git a/source/blender/gpu/intern/gpu_debug.c b/source/blender/gpu/intern/gpu_debug.c
index 859aab9565f..8aea87ef659 100644
--- a/source/blender/gpu/intern/gpu_debug.c
+++ b/source/blender/gpu/intern/gpu_debug.c
@@ -20,7 +20,7 @@
*
* The Original Code is: all of this file.
*
- * Contributor(s): Brecht Van Lommel, Jason Wilkins.
+ * Contributor(s): Brecht Van Lommel, Jason Wilkins, Mike Erwin.
*
* ***** END GPL LICENSE BLOCK *****
*/
@@ -44,122 +44,18 @@
#include <stdlib.h>
#include <string.h>
-#define CASE_CODE_RETURN_STR(code) case code: return #code;
+#ifndef __APPLE__ /* only non-Apple systems implement OpenGL debug callbacks */
-static const char *gpu_gl_error_symbol(GLenum err)
-{
- switch (err) {
- CASE_CODE_RETURN_STR(GL_NO_ERROR)
- CASE_CODE_RETURN_STR(GL_INVALID_ENUM)
- CASE_CODE_RETURN_STR(GL_INVALID_VALUE)
- CASE_CODE_RETURN_STR(GL_INVALID_OPERATION)
- CASE_CODE_RETURN_STR(GL_STACK_OVERFLOW)
- CASE_CODE_RETURN_STR(GL_STACK_UNDERFLOW)
- CASE_CODE_RETURN_STR(GL_OUT_OF_MEMORY)
-
-#if GL_ARB_imaging
- CASE_CODE_RETURN_STR(GL_TABLE_TOO_LARGE)
-#endif
-
-#if defined(WITH_GLU)
- CASE_CODE_RETURN_STR(GLU_INVALID_ENUM)
- CASE_CODE_RETURN_STR(GLU_INVALID_VALUE)
- CASE_CODE_RETURN_STR(GLU_OUT_OF_MEMORY)
-#endif
+/* control whether we use older AMD_debug_output extension
+ * some supported GPU + OS combos do not have the newer extensions */
+# define LEGACY_DEBUG 1
- default:
- return "<unknown error>";
- }
-}
-
-#undef CASE_CODE_RETURN_STR
-
-
-static bool gpu_report_gl_errors(const char *file, int line, const char *str)
-{
- GLenum gl_error = glGetError();
-
- if (gl_error == GL_NO_ERROR) {
- return true;
- }
- else {
- /* glGetError should have cleared the error flag, so if we get the
- * same flag twice that means glGetError itself probably triggered
- * the error. This happens on Windows if the GL context is invalid.
- */
- {
- GLenum new_error = glGetError();
- if (gl_error == new_error) {
- fprintf(stderr, "GL: Possible context invalidation issue\n");
- return false;
- }
- }
-
- fprintf(stderr,
- "%s:%d: ``%s'' -> GL Error (0x%04X - %s): %s\n",
- file, line, str, gl_error,
- gpu_gl_error_symbol(gl_error),
- gpuErrorString(gl_error));
-
- return false;
- }
-}
-
-
-const char *gpuErrorString(GLenum err)
-{
- switch (err) {
- case GL_NO_ERROR:
- return "No Error";
-
- case GL_INVALID_ENUM:
- return "Invalid Enumeration";
-
- case GL_INVALID_VALUE:
- return "Invalid Value";
-
- case GL_INVALID_OPERATION:
- return "Invalid Operation";
-
- case GL_STACK_OVERFLOW:
- return "Stack Overflow";
-
- case GL_STACK_UNDERFLOW:
- return "Stack Underflow";
-
- case GL_OUT_OF_MEMORY:
- return "Out of Memory";
-
-#if GL_ARB_imaging
- case GL_TABLE_TOO_LARGE:
- return "Table Too Large";
-#endif
-
-#if defined(WITH_GLU)
- case GLU_INVALID_ENUM:
- return "Invalid Enum (GLU)";
-
- case GLU_INVALID_VALUE:
- return "Invalid Value (GLU)";
-
- case GLU_OUT_OF_MEMORY:
- return "Out of Memory (GLU)";
-#endif
-
- default:
- return "<unknown error>";
- }
-}
-
-
-/* Debug callbacks need the same calling convention as OpenGL functions.
- */
-#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__)
- /* Win32 but not WinCE */
-# define APIENTRY __stdcall
-#else
-# define APIENTRY
-#endif
+/* Debug callbacks need the same calling convention as OpenGL functions. */
+# if defined(_WIN32)
+# define APIENTRY __stdcall
+# else
+# define APIENTRY
+# endif
static const char *source_name(GLenum source)
@@ -189,32 +85,11 @@ static const char *message_type_name(GLenum message)
}
}
-static const char *category_name_amd(GLenum category)
-{
- switch (category) {
- case GL_DEBUG_CATEGORY_API_ERROR_AMD: return "API error";
- case GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD: return "window system";
- case GL_DEBUG_CATEGORY_DEPRECATION_AMD: return "deprecated behavior";
- case GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD: return "undefined behavior";
- case GL_DEBUG_CATEGORY_PERFORMANCE_AMD: return "performance";
- case GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD: return "shader compiler";
- case GL_DEBUG_CATEGORY_APPLICATION_AMD: return "application";
- case GL_DEBUG_CATEGORY_OTHER_AMD: return "other";
- default: return "???";
- }
-}
-
-
static void APIENTRY gpu_debug_proc(
GLenum source, GLenum type, GLuint UNUSED(id),
GLenum severity, GLsizei UNUSED(length),
const GLchar *message, const GLvoid *UNUSED(userParm))
{
- if (type == GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR) {
- /* Blender 2.7x uses OpenGL 2.1, we don't care if features are deprecated */
- return;
- }
-
bool backtrace = false;
switch (severity) {
@@ -233,18 +108,28 @@ static void APIENTRY gpu_debug_proc(
}
}
+# if LEGACY_DEBUG
+
+static const char *category_name_amd(GLenum category)
+{
+ switch (category) {
+ case GL_DEBUG_CATEGORY_API_ERROR_AMD: return "API error";
+ case GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD: return "window system";
+ case GL_DEBUG_CATEGORY_DEPRECATION_AMD: return "deprecated behavior";
+ case GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD: return "undefined behavior";
+ case GL_DEBUG_CATEGORY_PERFORMANCE_AMD: return "performance";
+ case GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD: return "shader compiler";
+ case GL_DEBUG_CATEGORY_APPLICATION_AMD: return "application";
+ case GL_DEBUG_CATEGORY_OTHER_AMD: return "other";
+ default: return "???";
+ }
+}
-#ifndef GLEW_ES_ONLY
static void APIENTRY gpu_debug_proc_amd(
GLuint UNUSED(id), GLenum category,
GLenum severity, GLsizei UNUSED(length),
const GLchar *message, GLvoid *UNUSED(userParm))
{
- if (category == GL_DEBUG_CATEGORY_DEPRECATION_AMD) {
- /* Blender 2.7x uses OpenGL 2.1, we don't care if features are deprecated */
- return;
- }
-
bool backtrace = false;
switch (severity) {
@@ -261,148 +146,88 @@ static void APIENTRY gpu_debug_proc_amd(
fflush(stderr);
}
}
-#endif
+# endif /* LEGACY_DEBUG */
-
-#undef APIENTRY
+# undef APIENTRY
+#endif /* not Apple */
void gpu_debug_init(void)
{
+#ifdef __APPLE__
+ fprintf(stderr, "OpenGL debug callback is not available on Apple.\n");
+#else /* not Apple */
const char success[] = "Successfully hooked OpenGL debug callback.";
-#if !defined(WITH_GLEW_ES) && !defined(GLEW_ES_ONLY)
- if (GLEW_VERSION_4_3) {
- fprintf(stderr, "Using OpenGL 4.3 debug facilities\n");
- glEnable(GL_DEBUG_OUTPUT);
- glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
- glDebugMessageCallback((GLDEBUGPROC)gpu_debug_proc, mxGetCurrentContext());
- glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, NULL, GL_TRUE);
- GPU_string_marker(success);
- return;
- }
-#endif
-
- if (GLEW_KHR_debug) {
-#ifndef GLEW_ES_ONLY
- fprintf(stderr, "Using KHR_debug extension\n");
+ if (GLEW_VERSION_4_3 || GLEW_KHR_debug) {
+ fprintf(stderr, "Using %s\n", GLEW_VERSION_4_3 ? "OpenGL 4.3 debug facilities" : "KHR_debug extension");
glEnable(GL_DEBUG_OUTPUT);
glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
- glDebugMessageCallback((GLDEBUGPROC)gpu_debug_proc, mxGetCurrentContext());
+ glDebugMessageCallback((GLDEBUGPROC)gpu_debug_proc, NULL);
glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, NULL, GL_TRUE);
GPU_string_marker(success);
-#endif
- return;
}
-
-#ifndef GLEW_ES_ONLY
- if (GLEW_ARB_debug_output) {
+ else if (GLEW_ARB_debug_output) {
fprintf(stderr, "Using ARB_debug_output extension\n");
glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
- glDebugMessageCallbackARB((GLDEBUGPROCARB)gpu_debug_proc, mxGetCurrentContext());
+ glDebugMessageCallbackARB((GLDEBUGPROCARB)gpu_debug_proc, NULL);
glDebugMessageControlARB(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, NULL, GL_TRUE);
GPU_string_marker(success);
-
- return;
}
-
- if (GLEW_AMD_debug_output) {
+# if LEGACY_DEBUG
+ else if (GLEW_AMD_debug_output) {
fprintf(stderr, "Using AMD_debug_output extension\n");
- glDebugMessageCallbackAMD(gpu_debug_proc_amd, mxGetCurrentContext());
+ glDebugMessageCallbackAMD(gpu_debug_proc_amd, NULL);
glDebugMessageEnableAMD(GL_DONT_CARE, GL_DONT_CARE, 0, NULL, GL_TRUE);
GPU_string_marker(success);
-
- return;
}
-#endif
-
- fprintf(stderr, "Failed to hook OpenGL debug callback.\n");
-
- return;
+# endif
+ else {
+ fprintf(stderr, "Failed to hook OpenGL debug callback.\n");
+ }
+#endif /* not Apple */
}
void gpu_debug_exit(void)
{
-#ifndef WITH_GLEW_ES
-#ifndef GLEW_ES_ONLY
- if (GLEW_VERSION_4_3) {
- glDebugMessageCallback(NULL, NULL);
-
- return;
- }
-#endif
-#endif
-
- if (GLEW_KHR_debug) {
-#ifndef GLEW_ES_ONLY
+#ifndef __APPLE__
+ if (GLEW_VERSION_4_3 || GLEW_KHR_debug) {
glDebugMessageCallback(NULL, NULL);
-#endif
- return;
}
-
-#ifndef GLEW_ES_ONLY
- if (GLEW_ARB_debug_output) {
+ else if (GLEW_ARB_debug_output) {
glDebugMessageCallbackARB(NULL, NULL);
-
- return;
}
-
- if (GLEW_AMD_debug_output) {
+# if LEGACY_DEBUG
+ else if (GLEW_AMD_debug_output) {
glDebugMessageCallbackAMD(NULL, NULL);
-
- return;
}
+# endif
#endif
-
- return;
}
void GPU_string_marker(const char *buf)
{
-#ifndef WITH_GLEW_ES
-#ifndef GLEW_ES_ONLY
- if (GLEW_VERSION_4_3) {
- glDebugMessageInsert(
- GL_DEBUG_SOURCE_APPLICATION, GL_DEBUG_TYPE_MARKER, 0,
- GL_DEBUG_SEVERITY_NOTIFICATION, -1, buf);
-
- return;
- }
-#endif
-#endif
-
- if (GLEW_KHR_debug) {
-#ifndef GLEW_ES_ONLY
+#ifdef __APPLE__
+ UNUSED_VARS(buf);
+#else /* not Apple */
+ if (GLEW_VERSION_4_3 || GLEW_KHR_debug) {
glDebugMessageInsert(
GL_DEBUG_SOURCE_APPLICATION, GL_DEBUG_TYPE_MARKER, 0,
GL_DEBUG_SEVERITY_NOTIFICATION, -1, buf);
-#endif
- return;
}
-
-#ifndef GLEW_ES_ONLY
- if (GLEW_ARB_debug_output) {
+ else if (GLEW_ARB_debug_output) {
glDebugMessageInsertARB(
GL_DEBUG_SOURCE_APPLICATION_ARB, GL_DEBUG_TYPE_OTHER_ARB, 0,
GL_DEBUG_SEVERITY_LOW_ARB, -1, buf);
-
- return;
}
-
- if (GLEW_AMD_debug_output) {
+# if LEGACY_DEBUG
+ else if (GLEW_AMD_debug_output) {
glDebugMessageInsertAMD(
GL_DEBUG_CATEGORY_APPLICATION_AMD, GL_DEBUG_SEVERITY_LOW_AMD, 0,
0, buf);
-
- return;
}
-
- if (GLEW_GREMEDY_string_marker) {
- glStringMarkerGREMEDY(0, buf);
-
- return;
- }
-#endif
+# endif
+#endif /* not Apple */
}
void GPU_print_error_debug(const char *str)
@@ -410,406 +235,3 @@ void GPU_print_error_debug(const char *str)
if (G.debug & G_DEBUG)
fprintf(stderr, "GPU: %s\n", str);
}
-
-
-void GPU_assert_no_gl_errors(const char *file, int line, const char *str)
-{
- if (G.debug) {
- GLboolean gl_ok = gpu_report_gl_errors(file, line, str);
-
- BLI_assert(gl_ok);
- (void) gl_ok;
- }
-}
-
-
-static void gpu_state_print_fl_ex(const char *name, GLenum type)
-{
-#define MAX_ARRAY_SIZE 64
-
- const unsigned char err_mark[4] = {0xff, 0xff, 0xff, 0xff};
-
- float value[MAX_ARRAY_SIZE];
- int a;
-
- memset(value, 0xff, sizeof(value));
- glGetFloatv(type, value);
-
- if (glGetError() == GL_NO_ERROR) {
- printf("%s: ", name);
- for (a = 0; a < MAX_ARRAY_SIZE; a++) {
- if (memcmp(&value[a], err_mark, sizeof(value[a])) == 0) {
- break;
- }
- printf("%.2f ", value[a]);
- }
- printf("\n");
- }
-
-#undef MAX_ARRAY_SIZE
-}
-
-#define gpu_state_print_fl(val) gpu_state_print_fl_ex(#val, val)
-
-void GPU_state_print(void)
-{
- GPU_ASSERT_NO_GL_ERRORS("GPU_state_print"); /* clear any errors */
-
- gpu_state_print_fl(GL_ACCUM_ALPHA_BITS);
- gpu_state_print_fl(GL_ACCUM_BLUE_BITS);
- gpu_state_print_fl(GL_ACCUM_CLEAR_VALUE);
- gpu_state_print_fl(GL_ACCUM_GREEN_BITS);
- gpu_state_print_fl(GL_ACCUM_RED_BITS);
- gpu_state_print_fl(GL_ACTIVE_TEXTURE);
- gpu_state_print_fl(GL_ALIASED_LINE_WIDTH_RANGE);
- gpu_state_print_fl(GL_ALIASED_POINT_SIZE_RANGE);
- gpu_state_print_fl(GL_ALPHA_BIAS);
- gpu_state_print_fl(GL_ALPHA_BITS);
- gpu_state_print_fl(GL_ALPHA_SCALE);
- gpu_state_print_fl(GL_ALPHA_TEST);
- gpu_state_print_fl(GL_ALPHA_TEST_FUNC);
- gpu_state_print_fl(GL_ALPHA_TEST_REF);
- gpu_state_print_fl(GL_ARRAY_BUFFER_BINDING);
- gpu_state_print_fl(GL_ATTRIB_STACK_DEPTH);
- gpu_state_print_fl(GL_AUTO_NORMAL);
- gpu_state_print_fl(GL_AUX_BUFFERS);
- gpu_state_print_fl(GL_BLEND);
- gpu_state_print_fl(GL_BLEND_COLOR);
- gpu_state_print_fl(GL_BLEND_DST_ALPHA);
- gpu_state_print_fl(GL_BLEND_DST_RGB);
- gpu_state_print_fl(GL_BLEND_EQUATION_ALPHA);
- gpu_state_print_fl(GL_BLEND_EQUATION_RGB);
- gpu_state_print_fl(GL_BLEND_SRC_ALPHA);
- gpu_state_print_fl(GL_BLEND_SRC_RGB);
- gpu_state_print_fl(GL_BLUE_BIAS);
- gpu_state_print_fl(GL_BLUE_BITS);
- gpu_state_print_fl(GL_BLUE_SCALE);
- gpu_state_print_fl(GL_CLIENT_ACTIVE_TEXTURE);
- gpu_state_print_fl(GL_CLIENT_ATTRIB_STACK_DEPTH);
- gpu_state_print_fl(GL_CLIP_PLANE0);
- gpu_state_print_fl(GL_COLOR_ARRAY);
- gpu_state_print_fl(GL_COLOR_ARRAY_BUFFER_BINDING);
- gpu_state_print_fl(GL_COLOR_ARRAY_SIZE);
- gpu_state_print_fl(GL_COLOR_ARRAY_STRIDE);
- gpu_state_print_fl(GL_COLOR_ARRAY_TYPE);
- gpu_state_print_fl(GL_COLOR_CLEAR_VALUE);
- gpu_state_print_fl(GL_COLOR_LOGIC_OP);
- gpu_state_print_fl(GL_COLOR_MATERIAL);
- gpu_state_print_fl(GL_COLOR_MATERIAL_FACE);
- gpu_state_print_fl(GL_COLOR_MATERIAL_PARAMETER);
- gpu_state_print_fl(GL_COLOR_MATRIX);
- gpu_state_print_fl(GL_COLOR_MATRIX_STACK_DEPTH);
- gpu_state_print_fl(GL_COLOR_SUM);
- gpu_state_print_fl(GL_COLOR_TABLE);
- gpu_state_print_fl(GL_COLOR_WRITEMASK);
- gpu_state_print_fl(GL_NUM_COMPRESSED_TEXTURE_FORMATS);
- gpu_state_print_fl(GL_COMPRESSED_TEXTURE_FORMATS);
- gpu_state_print_fl(GL_CONVOLUTION_1D);
- gpu_state_print_fl(GL_CONVOLUTION_2D);
- gpu_state_print_fl(GL_CULL_FACE);
- gpu_state_print_fl(GL_CULL_FACE_MODE);
- gpu_state_print_fl(GL_CURRENT_COLOR);
- gpu_state_print_fl(GL_CURRENT_FOG_COORD);
- gpu_state_print_fl(GL_CURRENT_INDEX);
- gpu_state_print_fl(GL_CURRENT_NORMAL);
- gpu_state_print_fl(GL_CURRENT_PROGRAM);
- gpu_state_print_fl(GL_CURRENT_RASTER_COLOR);
- gpu_state_print_fl(GL_CURRENT_RASTER_DISTANCE);
- gpu_state_print_fl(GL_CURRENT_RASTER_INDEX);
- gpu_state_print_fl(GL_CURRENT_RASTER_POSITION);
- gpu_state_print_fl(GL_CURRENT_RASTER_POSITION_VALID);
- gpu_state_print_fl(GL_CURRENT_RASTER_SECONDARY_COLOR);
- gpu_state_print_fl(GL_CURRENT_RASTER_TEXTURE_COORDS);
- gpu_state_print_fl(GL_CURRENT_SECONDARY_COLOR);
- gpu_state_print_fl(GL_CURRENT_TEXTURE_COORDS);
- gpu_state_print_fl(GL_DEPTH_BIAS);
- gpu_state_print_fl(GL_DEPTH_BITS);
- gpu_state_print_fl(GL_DEPTH_CLEAR_VALUE);
- gpu_state_print_fl(GL_DEPTH_FUNC);
- gpu_state_print_fl(GL_DEPTH_RANGE);
- gpu_state_print_fl(GL_DEPTH_SCALE);
- gpu_state_print_fl(GL_DEPTH_TEST);
- gpu_state_print_fl(GL_DEPTH_WRITEMASK);
- gpu_state_print_fl(GL_DITHER);
- gpu_state_print_fl(GL_DOUBLEBUFFER);
- gpu_state_print_fl(GL_DRAW_BUFFER);
- gpu_state_print_fl(GL_DRAW_BUFFER0);
- gpu_state_print_fl(GL_EDGE_FLAG);
- gpu_state_print_fl(GL_EDGE_FLAG_ARRAY);
- gpu_state_print_fl(GL_EDGE_FLAG_ARRAY_BUFFER_BINDING);
- gpu_state_print_fl(GL_EDGE_FLAG_ARRAY_STRIDE);
- gpu_state_print_fl(GL_ELEMENT_ARRAY_BUFFER_BINDING);
- gpu_state_print_fl(GL_FEEDBACK_BUFFER_SIZE);
- gpu_state_print_fl(GL_FEEDBACK_BUFFER_TYPE);
- gpu_state_print_fl(GL_FOG);
- gpu_state_print_fl(GL_FOG_COLOR);
- gpu_state_print_fl(GL_FOG_COORD_ARRAY);
- gpu_state_print_fl(GL_FOG_COORD_ARRAY_BUFFER_BINDING);
- gpu_state_print_fl(GL_FOG_COORD_ARRAY_STRIDE);
- gpu_state_print_fl(GL_FOG_COORD_ARRAY_TYPE);
- gpu_state_print_fl(GL_FOG_COORD_SRC);
- gpu_state_print_fl(GL_FOG_DENSITY);
- gpu_state_print_fl(GL_FOG_END);
- gpu_state_print_fl(GL_FOG_HINT);
- gpu_state_print_fl(GL_FOG_INDEX);
- gpu_state_print_fl(GL_FOG_MODE);
- gpu_state_print_fl(GL_FOG_START);
- gpu_state_print_fl(GL_FRAGMENT_PROGRAM_ARB); /* TODO: remove ARB program support */
- gpu_state_print_fl(GL_FRAGMENT_SHADER_DERIVATIVE_HINT);
- gpu_state_print_fl(GL_FRONT_FACE);
- gpu_state_print_fl(GL_GENERATE_MIPMAP_HINT);
- gpu_state_print_fl(GL_GREEN_BIAS);
- gpu_state_print_fl(GL_GREEN_BITS);
- gpu_state_print_fl(GL_GREEN_SCALE);
- gpu_state_print_fl(GL_HISTOGRAM);
- gpu_state_print_fl(GL_INDEX_ARRAY);
- gpu_state_print_fl(GL_INDEX_ARRAY_BUFFER_BINDING);
- gpu_state_print_fl(GL_INDEX_ARRAY_STRIDE);
- gpu_state_print_fl(GL_INDEX_ARRAY_TYPE);
- gpu_state_print_fl(GL_INDEX_BITS);
- gpu_state_print_fl(GL_INDEX_CLEAR_VALUE);
- gpu_state_print_fl(GL_INDEX_LOGIC_OP);
- gpu_state_print_fl(GL_INDEX_MODE);
- gpu_state_print_fl(GL_INDEX_OFFSET);
- gpu_state_print_fl(GL_INDEX_SHIFT);
- gpu_state_print_fl(GL_INDEX_WRITEMASK);
- gpu_state_print_fl(GL_LIGHT0);
- gpu_state_print_fl(GL_LIGHT1);
- gpu_state_print_fl(GL_LIGHT2);
- gpu_state_print_fl(GL_LIGHT3);
- gpu_state_print_fl(GL_LIGHT4);
- gpu_state_print_fl(GL_LIGHT5);
- gpu_state_print_fl(GL_LIGHT6);
- gpu_state_print_fl(GL_LIGHT7);
- gpu_state_print_fl(GL_LIGHTING);
- gpu_state_print_fl(GL_LIGHT_MODEL_AMBIENT);
- gpu_state_print_fl(GL_LIGHT_MODEL_COLOR_CONTROL);
- gpu_state_print_fl(GL_LIGHT_MODEL_LOCAL_VIEWER);
- gpu_state_print_fl(GL_LIGHT_MODEL_TWO_SIDE);
- gpu_state_print_fl(GL_LINE_SMOOTH);
- gpu_state_print_fl(GL_LINE_SMOOTH_HINT);
- gpu_state_print_fl(GL_LINE_STIPPLE);
- gpu_state_print_fl(GL_LINE_STIPPLE_PATTERN);
- gpu_state_print_fl(GL_LINE_STIPPLE_REPEAT);
- gpu_state_print_fl(GL_LINE_WIDTH);
- gpu_state_print_fl(GL_LINE_WIDTH_GRANULARITY);
- gpu_state_print_fl(GL_LINE_WIDTH_RANGE);
- gpu_state_print_fl(GL_LIST_BASE);
- gpu_state_print_fl(GL_LIST_INDEX);
- gpu_state_print_fl(GL_LIST_MODE);
- gpu_state_print_fl(GL_LOGIC_OP);
- gpu_state_print_fl(GL_LOGIC_OP_MODE);
- gpu_state_print_fl(GL_MAP1_COLOR_4);
- gpu_state_print_fl(GL_MAP1_GRID_DOMAIN);
- gpu_state_print_fl(GL_MAP1_GRID_SEGMENTS);
- gpu_state_print_fl(GL_MAP1_INDEX);
- gpu_state_print_fl(GL_MAP1_NORMAL);
- gpu_state_print_fl(GL_MAP1_TEXTURE_COORD_1);
- gpu_state_print_fl(GL_MAP1_TEXTURE_COORD_2);
- gpu_state_print_fl(GL_MAP1_TEXTURE_COORD_3);
- gpu_state_print_fl(GL_MAP1_TEXTURE_COORD_4);
- gpu_state_print_fl(GL_MAP1_VERTEX_3);
- gpu_state_print_fl(GL_MAP1_VERTEX_4);
- gpu_state_print_fl(GL_MAP2_COLOR_4);
- gpu_state_print_fl(GL_MAP2_GRID_DOMAIN);
- gpu_state_print_fl(GL_MAP2_GRID_SEGMENTS);
- gpu_state_print_fl(GL_MAP2_INDEX);
- gpu_state_print_fl(GL_MAP2_NORMAL);
- gpu_state_print_fl(GL_MAP2_TEXTURE_COORD_1);
- gpu_state_print_fl(GL_MAP2_TEXTURE_COORD_2);
- gpu_state_print_fl(GL_MAP2_TEXTURE_COORD_3);
- gpu_state_print_fl(GL_MAP2_TEXTURE_COORD_4);
- gpu_state_print_fl(GL_MAP2_VERTEX_3);
- gpu_state_print_fl(GL_MAP2_VERTEX_4);
- gpu_state_print_fl(GL_MAP_COLOR);
- gpu_state_print_fl(GL_MAP_STENCIL);
- gpu_state_print_fl(GL_MATRIX_MODE);
- gpu_state_print_fl(GL_MAX_3D_TEXTURE_SIZE);
- gpu_state_print_fl(GL_MAX_ATTRIB_STACK_DEPTH);
- gpu_state_print_fl(GL_MAX_CLIENT_ATTRIB_STACK_DEPTH);
- gpu_state_print_fl(GL_MAX_CLIP_PLANES);
- gpu_state_print_fl(GL_MAX_COLOR_MATRIX_STACK_DEPTH);
- gpu_state_print_fl(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS);
- gpu_state_print_fl(GL_MAX_CUBE_MAP_TEXTURE_SIZE);
- gpu_state_print_fl(GL_MAX_DRAW_BUFFERS);
- gpu_state_print_fl(GL_MAX_ELEMENTS_INDICES);
- gpu_state_print_fl(GL_MAX_ELEMENTS_VERTICES);
- gpu_state_print_fl(GL_MAX_EVAL_ORDER);
- gpu_state_print_fl(GL_MAX_FRAGMENT_UNIFORM_COMPONENTS);
- gpu_state_print_fl(GL_MAX_LIGHTS);
- gpu_state_print_fl(GL_MAX_LIST_NESTING);
- gpu_state_print_fl(GL_MAX_MODELVIEW_STACK_DEPTH);
- gpu_state_print_fl(GL_MAX_NAME_STACK_DEPTH);
- gpu_state_print_fl(GL_MAX_PIXEL_MAP_TABLE);
- gpu_state_print_fl(GL_MAX_PROJECTION_STACK_DEPTH);
- gpu_state_print_fl(GL_MAX_TEXTURE_COORDS);
- gpu_state_print_fl(GL_MAX_TEXTURE_IMAGE_UNITS);
- gpu_state_print_fl(GL_MAX_TEXTURE_LOD_BIAS);
- gpu_state_print_fl(GL_MAX_TEXTURE_SIZE);
- gpu_state_print_fl(GL_MAX_TEXTURE_STACK_DEPTH);
- gpu_state_print_fl(GL_MAX_TEXTURE_UNITS);
- gpu_state_print_fl(GL_MAX_VARYING_FLOATS);
- gpu_state_print_fl(GL_MAX_VERTEX_ATTRIBS);
- gpu_state_print_fl(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS);
- gpu_state_print_fl(GL_MAX_VERTEX_UNIFORM_COMPONENTS);
- gpu_state_print_fl(GL_MAX_VIEWPORT_DIMS);
- gpu_state_print_fl(GL_MINMAX);
- gpu_state_print_fl(GL_MODELVIEW_MATRIX);
- gpu_state_print_fl(GL_MODELVIEW_STACK_DEPTH);
- gpu_state_print_fl(GL_MULTISAMPLE);
- gpu_state_print_fl(GL_NAME_STACK_DEPTH);
- gpu_state_print_fl(GL_NORMALIZE);
- gpu_state_print_fl(GL_NORMAL_ARRAY);
- gpu_state_print_fl(GL_NORMAL_ARRAY_BUFFER_BINDING);
- gpu_state_print_fl(GL_NORMAL_ARRAY_STRIDE);
- gpu_state_print_fl(GL_NORMAL_ARRAY_TYPE);
- gpu_state_print_fl(GL_NUM_COMPRESSED_TEXTURE_FORMATS);
- gpu_state_print_fl(GL_PACK_ALIGNMENT);
- gpu_state_print_fl(GL_PACK_IMAGE_HEIGHT);
- gpu_state_print_fl(GL_PACK_LSB_FIRST);
- gpu_state_print_fl(GL_PACK_ROW_LENGTH);
- gpu_state_print_fl(GL_PACK_SKIP_IMAGES);
- gpu_state_print_fl(GL_PACK_SKIP_PIXELS);
- gpu_state_print_fl(GL_PACK_SKIP_ROWS);
- gpu_state_print_fl(GL_PACK_SWAP_BYTES);
- gpu_state_print_fl(GL_PERSPECTIVE_CORRECTION_HINT);
- gpu_state_print_fl(GL_PIXEL_MAP_A_TO_A_SIZE);
- gpu_state_print_fl(GL_PIXEL_MAP_B_TO_B_SIZE);
- gpu_state_print_fl(GL_PIXEL_MAP_G_TO_G_SIZE);
- gpu_state_print_fl(GL_PIXEL_MAP_I_TO_A_SIZE);
- gpu_state_print_fl(GL_PIXEL_MAP_I_TO_B_SIZE);
- gpu_state_print_fl(GL_PIXEL_MAP_I_TO_G_SIZE);
- gpu_state_print_fl(GL_PIXEL_MAP_I_TO_I_SIZE);
- gpu_state_print_fl(GL_PIXEL_MAP_I_TO_R_SIZE);
- gpu_state_print_fl(GL_PIXEL_MAP_R_TO_R_SIZE);
- gpu_state_print_fl(GL_PIXEL_MAP_S_TO_S_SIZE);
- gpu_state_print_fl(GL_PIXEL_PACK_BUFFER_BINDING);
- gpu_state_print_fl(GL_PIXEL_UNPACK_BUFFER_BINDING);
- gpu_state_print_fl(GL_POINT_DISTANCE_ATTENUATION);
- gpu_state_print_fl(GL_POINT_FADE_THRESHOLD_SIZE);
- gpu_state_print_fl(GL_POINT_SIZE);
- gpu_state_print_fl(GL_POINT_SIZE_GRANULARITY);
- gpu_state_print_fl(GL_POINT_SIZE_MAX);
- gpu_state_print_fl(GL_POINT_SIZE_MIN);
- gpu_state_print_fl(GL_POINT_SIZE_RANGE);
- gpu_state_print_fl(GL_POINT_SMOOTH);
- gpu_state_print_fl(GL_POINT_SMOOTH_HINT);
- gpu_state_print_fl(GL_POINT_SPRITE);
- gpu_state_print_fl(GL_POLYGON_MODE);
- gpu_state_print_fl(GL_POLYGON_OFFSET_FACTOR);
- gpu_state_print_fl(GL_POLYGON_OFFSET_FILL);
- gpu_state_print_fl(GL_POLYGON_OFFSET_LINE);
- gpu_state_print_fl(GL_POLYGON_OFFSET_POINT);
- gpu_state_print_fl(GL_POLYGON_OFFSET_UNITS);
- gpu_state_print_fl(GL_POLYGON_SMOOTH);
- gpu_state_print_fl(GL_POLYGON_SMOOTH_HINT);
- gpu_state_print_fl(GL_POLYGON_STIPPLE);
- gpu_state_print_fl(GL_POST_COLOR_MATRIX_ALPHA_BIAS);
- gpu_state_print_fl(GL_POST_COLOR_MATRIX_ALPHA_SCALE);
- gpu_state_print_fl(GL_POST_COLOR_MATRIX_BLUE_BIAS);
- gpu_state_print_fl(GL_POST_COLOR_MATRIX_BLUE_SCALE);
- gpu_state_print_fl(GL_POST_COLOR_MATRIX_COLOR_TABLE);
- gpu_state_print_fl(GL_POST_COLOR_MATRIX_GREEN_BIAS);
- gpu_state_print_fl(GL_POST_COLOR_MATRIX_GREEN_SCALE);
- gpu_state_print_fl(GL_POST_COLOR_MATRIX_RED_BIAS);
- gpu_state_print_fl(GL_POST_COLOR_MATRIX_RED_SCALE);
- gpu_state_print_fl(GL_POST_CONVOLUTION_ALPHA_BIAS);
- gpu_state_print_fl(GL_POST_CONVOLUTION_ALPHA_SCALE);
- gpu_state_print_fl(GL_POST_CONVOLUTION_BLUE_BIAS);
- gpu_state_print_fl(GL_POST_CONVOLUTION_BLUE_SCALE);
- gpu_state_print_fl(GL_POST_CONVOLUTION_COLOR_TABLE);
- gpu_state_print_fl(GL_POST_CONVOLUTION_GREEN_BIAS);
- gpu_state_print_fl(GL_POST_CONVOLUTION_GREEN_SCALE);
- gpu_state_print_fl(GL_POST_CONVOLUTION_RED_BIAS);
- gpu_state_print_fl(GL_POST_CONVOLUTION_RED_SCALE);
- gpu_state_print_fl(GL_PROJECTION_MATRIX);
- gpu_state_print_fl(GL_PROJECTION_STACK_DEPTH);
- gpu_state_print_fl(GL_READ_BUFFER);
- gpu_state_print_fl(GL_RED_BIAS);
- gpu_state_print_fl(GL_RED_BITS);
- gpu_state_print_fl(GL_RED_SCALE);
- gpu_state_print_fl(GL_RENDER_MODE);
- gpu_state_print_fl(GL_RESCALE_NORMAL);
- gpu_state_print_fl(GL_RGBA_MODE);
- gpu_state_print_fl(GL_SAMPLES);
- gpu_state_print_fl(GL_SAMPLE_BUFFERS);
- gpu_state_print_fl(GL_SAMPLE_COVERAGE_INVERT);
- gpu_state_print_fl(GL_SAMPLE_COVERAGE_VALUE);
- gpu_state_print_fl(GL_SCISSOR_BOX);
- gpu_state_print_fl(GL_SCISSOR_TEST);
- gpu_state_print_fl(GL_SECONDARY_COLOR_ARRAY);
- gpu_state_print_fl(GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING);
- gpu_state_print_fl(GL_SECONDARY_COLOR_ARRAY_SIZE);
- gpu_state_print_fl(GL_SECONDARY_COLOR_ARRAY_STRIDE);
- gpu_state_print_fl(GL_SECONDARY_COLOR_ARRAY_TYPE);
- gpu_state_print_fl(GL_SELECTION_BUFFER_SIZE);
- gpu_state_print_fl(GL_SEPARABLE_2D);
- gpu_state_print_fl(GL_SHADE_MODEL);
- gpu_state_print_fl(GL_SMOOTH_LINE_WIDTH_GRANULARITY);
- gpu_state_print_fl(GL_SMOOTH_LINE_WIDTH_RANGE);
- gpu_state_print_fl(GL_SMOOTH_POINT_SIZE_GRANULARITY);
- gpu_state_print_fl(GL_SMOOTH_POINT_SIZE_RANGE);
- gpu_state_print_fl(GL_STENCIL_BACK_FAIL);
- gpu_state_print_fl(GL_STENCIL_BACK_FUNC);
- gpu_state_print_fl(GL_STENCIL_BACK_PASS_DEPTH_FAIL);
- gpu_state_print_fl(GL_STENCIL_BACK_PASS_DEPTH_PASS);
- gpu_state_print_fl(GL_STENCIL_BACK_REF);
- gpu_state_print_fl(GL_STENCIL_BACK_VALUE_MASK);
- gpu_state_print_fl(GL_STENCIL_BACK_WRITEMASK);
- gpu_state_print_fl(GL_STENCIL_BITS);
- gpu_state_print_fl(GL_STENCIL_CLEAR_VALUE);
- gpu_state_print_fl(GL_STENCIL_FAIL);
- gpu_state_print_fl(GL_STENCIL_FUNC);
- gpu_state_print_fl(GL_STENCIL_PASS_DEPTH_FAIL);
- gpu_state_print_fl(GL_STENCIL_PASS_DEPTH_PASS);
- gpu_state_print_fl(GL_STENCIL_REF);
- gpu_state_print_fl(GL_STENCIL_TEST);
- gpu_state_print_fl(GL_STENCIL_VALUE_MASK);
- gpu_state_print_fl(GL_STENCIL_WRITEMASK);
- gpu_state_print_fl(GL_STEREO);
- gpu_state_print_fl(GL_SUBPIXEL_BITS);
- gpu_state_print_fl(GL_TEXTURE_1D);
- gpu_state_print_fl(GL_TEXTURE_2D);
- gpu_state_print_fl(GL_TEXTURE_3D);
- gpu_state_print_fl(GL_TEXTURE_BINDING_1D);
- gpu_state_print_fl(GL_TEXTURE_BINDING_2D);
- gpu_state_print_fl(GL_TEXTURE_BINDING_3D);
- gpu_state_print_fl(GL_TEXTURE_BINDING_CUBE_MAP);
- gpu_state_print_fl(GL_TEXTURE_COMPRESSION_HINT);
- gpu_state_print_fl(GL_TEXTURE_COORD_ARRAY);
- gpu_state_print_fl(GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING);
- gpu_state_print_fl(GL_TEXTURE_COORD_ARRAY_SIZE);
- gpu_state_print_fl(GL_TEXTURE_COORD_ARRAY_STRIDE);
- gpu_state_print_fl(GL_TEXTURE_COORD_ARRAY_TYPE);
- gpu_state_print_fl(GL_TEXTURE_CUBE_MAP);
- gpu_state_print_fl(GL_TEXTURE_GEN_Q);
- gpu_state_print_fl(GL_TEXTURE_GEN_R);
- gpu_state_print_fl(GL_TEXTURE_GEN_S);
- gpu_state_print_fl(GL_TEXTURE_GEN_T);
- gpu_state_print_fl(GL_TEXTURE_MATRIX);
- gpu_state_print_fl(GL_TEXTURE_STACK_DEPTH);
- gpu_state_print_fl(GL_TRANSPOSE_COLOR_MATRIX);
- gpu_state_print_fl(GL_TRANSPOSE_MODELVIEW_MATRIX);
- gpu_state_print_fl(GL_TRANSPOSE_PROJECTION_MATRIX);
- gpu_state_print_fl(GL_TRANSPOSE_TEXTURE_MATRIX);
- gpu_state_print_fl(GL_UNPACK_ALIGNMENT);
- gpu_state_print_fl(GL_UNPACK_IMAGE_HEIGHT);
- gpu_state_print_fl(GL_UNPACK_LSB_FIRST);
- gpu_state_print_fl(GL_UNPACK_ROW_LENGTH);
- gpu_state_print_fl(GL_UNPACK_SKIP_IMAGES);
- gpu_state_print_fl(GL_UNPACK_SKIP_PIXELS);
- gpu_state_print_fl(GL_UNPACK_SKIP_ROWS);
- gpu_state_print_fl(GL_UNPACK_SWAP_BYTES);
- gpu_state_print_fl(GL_VERTEX_ARRAY);
- gpu_state_print_fl(GL_VERTEX_ARRAY_BUFFER_BINDING);
- gpu_state_print_fl(GL_VERTEX_ARRAY_SIZE);
- gpu_state_print_fl(GL_VERTEX_ARRAY_STRIDE);
- gpu_state_print_fl(GL_VERTEX_ARRAY_TYPE);
- gpu_state_print_fl(GL_VERTEX_PROGRAM_POINT_SIZE);
- gpu_state_print_fl(GL_VERTEX_PROGRAM_TWO_SIDE);
- gpu_state_print_fl(GL_VIEWPORT);
- gpu_state_print_fl(GL_ZOOM_X);
- gpu_state_print_fl(GL_ZOOM_Y);
-}
-
-#undef gpu_state_print_fl
diff --git a/source/blender/gpu/intern/gpu_draw.c b/source/blender/gpu/intern/gpu_draw.c
index 427e179f29a..fae181138ce 100644
--- a/source/blender/gpu/intern/gpu_draw.c
+++ b/source/blender/gpu/intern/gpu_draw.c
@@ -38,8 +38,6 @@
#include <string.h>
-#include "GPU_glew.h"
-
#include "BLI_blenlib.h"
#include "BLI_linklist.h"
#include "BLI_math.h"
@@ -81,6 +79,7 @@
#include "GPU_draw.h"
#include "GPU_extensions.h"
#include "GPU_material.h"
+#include "GPU_matrix.h"
#include "GPU_shader.h"
#include "GPU_texture.h"
@@ -109,23 +108,27 @@ static void gpu_mcol(unsigned int ucol)
}
void GPU_render_text(
- MTexPoly *mtexpoly, int mode,
- const char *textstr, int textlen, unsigned int *col,
+ int mode, const char *textstr, int textlen, unsigned int *col,
const float *v_quad[4], const float *uv_quad[4],
int glattrib)
{
- if ((mode & GEMAT_TEXT) && (textlen > 0) && mtexpoly->tpage) {
+ /* XXX, 2.8 removes texface */
+#if 0
+ Image *ima = mtexpoly->tpage;
+#else
+ Image *ima = NULL;
+#endif
+ if ((mode & GEMAT_TEXT) && (textlen > 0) && ima) {
const float *v1 = v_quad[0];
const float *v2 = v_quad[1];
const float *v3 = v_quad[2];
const float *v4 = v_quad[3];
- Image *ima = (Image *)mtexpoly->tpage;
const size_t textlen_st = textlen;
float centerx, centery, sizex, sizey, transx, transy, movex, movey, advance;
-
+
/* multiline */
float line_start = 0.0f, line_height;
-
+
if (v4)
line_height = max_ffff(v1[1], v2[1], v3[1], v4[2]) - min_ffff(v1[1], v2[1], v3[1], v4[2]);
else
@@ -133,50 +136,48 @@ void GPU_render_text(
line_height *= 1.2f; /* could be an option? */
/* end multiline */
-
+
/* color has been set */
- if (mtexpoly->mode & TF_OBCOL)
- col = NULL;
- else if (!col)
+ if (!col)
glColor3f(1.0f, 1.0f, 1.0f);
- glPushMatrix();
-
+ gpuPushMatrix();
+
/* get the tab width */
ImBuf *first_ibuf = BKE_image_get_first_ibuf(ima);
matrixGlyph(first_ibuf, ' ', &centerx, &centery,
- &sizex, &sizey, &transx, &transy, &movex, &movey, &advance);
-
+ &sizex, &sizey, &transx, &transy, &movex, &movey, &advance);
+
float advance_tab = advance * 4; /* tab width could also be an option */
-
-
+
+
for (size_t index = 0; index < textlen_st; ) {
unsigned int character;
float uv[4][2];
/* lets calculate offset stuff */
character = BLI_str_utf8_as_unicode_and_size_safe(textstr + index, &index);
-
+
if (character == '\n') {
- glTranslatef(line_start, -line_height, 0.0f);
+ gpuTranslate2f(line_start, -line_height);
line_start = 0.0f;
continue;
}
else if (character == '\t') {
- glTranslatef(advance_tab, 0.0f, 0.0f);
+ gpuTranslate2f(advance_tab, 0.0f);
line_start -= advance_tab; /* so we can go back to the start of the line */
continue;
-
+
}
else if (character > USHRT_MAX) {
/* not much we can do here bmfonts take ushort */
character = '?';
}
-
+
/* space starts at offset 1 */
/* character = character - ' ' + 1; */
matrixGlyph(first_ibuf, character, & centerx, &centery,
- &sizex, &sizey, &transx, &transy, &movex, &movey, &advance);
+ &sizex, &sizey, &transx, &transy, &movex, &movey, &advance);
uv[0][0] = (uv_quad[0][0] - centerx) * sizex + transx;
uv[0][1] = (uv_quad[0][1] - centery) * sizey + transy;
@@ -184,13 +185,13 @@ void GPU_render_text(
uv[1][1] = (uv_quad[1][1] - centery) * sizey + transy;
uv[2][0] = (uv_quad[2][0] - centerx) * sizex + transx;
uv[2][1] = (uv_quad[2][1] - centery) * sizey + transy;
-
+
glBegin(GL_POLYGON);
if (glattrib >= 0) glVertexAttrib2fv(glattrib, uv[0]);
else glTexCoord2fv(uv[0]);
if (col) gpu_mcol(col[0]);
glVertex3f(sizex * v1[0] + movex, sizey * v1[1] + movey, v1[2]);
-
+
if (glattrib >= 0) glVertexAttrib2fv(glattrib, uv[1]);
else glTexCoord2fv(uv[1]);
if (col) gpu_mcol(col[1]);
@@ -212,28 +213,29 @@ void GPU_render_text(
}
glEnd();
- glTranslatef(advance, 0.0f, 0.0f);
+ gpuTranslate2f(advance, 0.0f);
line_start -= advance; /* so we can go back to the start of the line */
}
- glPopMatrix();
+ gpuPopMatrix();
BKE_image_release_ibuf(ima, first_ibuf, NULL);
}
}
/* Checking powers of two for images since OpenGL ES requires it */
-
+#ifdef WITH_DDS
static bool is_power_of_2_resolution(int w, int h)
{
return is_power_of_2_i(w) && is_power_of_2_i(h);
}
+#endif
static bool is_over_resolution_limit(GLenum textarget, int w, int h)
{
int size = (textarget == GL_TEXTURE_2D) ?
GPU_max_texture_size() : GPU_max_cube_map_size();
int reslimit = (U.glreslimit != 0) ?
- min_ii(U.glreslimit, size) : size;
+ min_ii(U.glreslimit, size) : size;
return (w > reslimit || h > reslimit);
}
@@ -269,8 +271,7 @@ static struct GPUTextureState {
int alphablend;
float anisotropic;
int gpu_mipmap;
- MTexPoly *lasttface;
-} GTS = {0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 1, 0, 0, -1, 1.0f, 0, NULL};
+} GTS = {0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 1, 0, 0, -1, 1.0f, 0};
/* Mipmap settings */
@@ -279,36 +280,13 @@ void GPU_set_gpu_mipmapping(int gpu_mipmap)
int old_value = GTS.gpu_mipmap;
/* only actually enable if it's supported */
- GTS.gpu_mipmap = gpu_mipmap && GLEW_EXT_framebuffer_object;
+ GTS.gpu_mipmap = gpu_mipmap;
if (old_value != GTS.gpu_mipmap) {
GPU_free_images();
}
}
-static void gpu_generate_mipmap(GLenum target)
-{
- const bool is_ati = GPU_type_matches(GPU_DEVICE_ATI, GPU_OS_ANY, GPU_DRIVER_ANY);
- int target_enabled = 0;
-
- /* work around bug in ATI driver, need to have GL_TEXTURE_2D enabled
- * http://www.opengl.org/wiki/Common_Mistakes#Automatic_mipmap_generation */
- if (is_ati) {
- target_enabled = glIsEnabled(target);
- if (!target_enabled)
- glEnable(target);
- }
-
- /* TODO: simplify when we transition to GL >= 3 */
- if (GLEW_VERSION_3_0 || GLEW_ARB_framebuffer_object)
- glGenerateMipmap(target);
- else if (GLEW_EXT_framebuffer_object)
- glGenerateMipmapEXT(target);
-
- if (is_ati && !target_enabled)
- glDisable(target);
-}
-
void GPU_set_mipmap(bool mipmap)
{
if (GTS.domipmap != mipmap) {
@@ -415,43 +393,16 @@ static unsigned int *gpu_get_image_bindcode(Image *ima, GLenum textarget)
return bind;
}
-void GPU_clear_tpage(bool force)
-{
- if (GTS.lasttface == NULL && !force)
- return;
-
- GTS.lasttface = NULL;
- GTS.curtile = 0;
- GTS.curima = NULL;
- if (GTS.curtilemode != 0) {
- glMatrixMode(GL_TEXTURE);
- glLoadIdentity();
- glMatrixMode(GL_MODELVIEW);
- }
- GTS.curtilemode = 0;
- GTS.curtileXRep = 0;
- GTS.curtileYRep = 0;
- GTS.alphablend = -1;
-
- glDisable(GL_BLEND);
- glDisable(GL_TEXTURE_2D);
- glDisable(GL_TEXTURE_GEN_S);
- glDisable(GL_TEXTURE_GEN_T);
- glDisable(GL_ALPHA_TEST);
-}
-
static void gpu_set_alpha_blend(GPUBlendMode alphablend)
{
if (alphablend == GPU_BLEND_SOLID) {
glDisable(GL_BLEND);
- glDisable(GL_ALPHA_TEST);
glDisable(GL_SAMPLE_ALPHA_TO_COVERAGE);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}
else if (alphablend == GPU_BLEND_ADD) {
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE);
- glDisable(GL_ALPHA_TEST);
glDisable(GL_SAMPLE_ALPHA_TO_COVERAGE);
}
else if (ELEM(alphablend, GPU_BLEND_ALPHA, GPU_BLEND_ALPHA_SORT)) {
@@ -460,59 +411,20 @@ static void gpu_set_alpha_blend(GPUBlendMode alphablend)
/* for OpenGL render we use the alpha channel, this makes alpha blend correct */
glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
-
+
/* if U.glalphaclip == 1.0, some cards go bonkers...
* turn off alpha test in this case */
- /* added after 2.45 to clip alpha */
- if (U.glalphaclip == 1.0f) {
- glDisable(GL_ALPHA_TEST);
- }
- else {
- glEnable(GL_ALPHA_TEST);
- glAlphaFunc(GL_GREATER, U.glalphaclip);
- }
}
else if (alphablend == GPU_BLEND_CLIP) {
glDisable(GL_BLEND);
glDisable(GL_SAMPLE_ALPHA_TO_COVERAGE);
- glEnable(GL_ALPHA_TEST);
- glAlphaFunc(GL_GREATER, 0.5f);
}
else if (alphablend == GPU_BLEND_ALPHA_TO_COVERAGE) {
- glEnable(GL_ALPHA_TEST);
- glAlphaFunc(GL_GREATER, U.glalphaclip);
glEnable(GL_SAMPLE_ALPHA_TO_COVERAGE);
}
}
-static void gpu_verify_alpha_blend(int alphablend)
-{
- /* verify alpha blending modes */
- if (GTS.alphablend == alphablend)
- return;
-
- gpu_set_alpha_blend(alphablend);
- GTS.alphablend = alphablend;
-}
-
-static void gpu_verify_reflection(Image *ima)
-{
- if (ima && (ima->flag & IMA_REFLECT)) {
- /* enable reflection mapping */
- glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
- glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
-
- glEnable(GL_TEXTURE_GEN_S);
- glEnable(GL_TEXTURE_GEN_T);
- }
- else {
- /* disable reflection mapping */
- glDisable(GL_TEXTURE_GEN_S);
- glDisable(GL_TEXTURE_GEN_T);
- }
-}
-
typedef struct VerifyThreadData {
ImBuf *ibuf;
float *srgb_frect;
@@ -534,8 +446,6 @@ static void gpu_verify_high_bit_srgb_buffer_slice(float *srgb_frect,
ibuf->x, height,
ibuf->x, ibuf->x);
IMB_buffer_float_unpremultiply(current_srgb_frect, ibuf->x, height);
- /* Clamp buffer colors to 1.0 to avoid artifacts due to glu for hdr images. */
- IMB_buffer_float_clamp(current_srgb_frect, ibuf->x, height);
}
static void verify_thread_do(void *data_v,
@@ -604,19 +514,6 @@ int GPU_verify_image(
return (ima != NULL);
}
- /* if tiling mode or repeat changed, change texture matrix to fit */
- if (GTS.tilemode != GTS.curtilemode || GTS.curtileXRep != GTS.tileXRep ||
- GTS.curtileYRep != GTS.tileYRep)
- {
- glMatrixMode(GL_TEXTURE);
- glLoadIdentity();
-
- if (ima && (ima->tpageflag & IMA_TILES))
- glScalef(ima->xrep, ima->yrep, 1.0f);
-
- glMatrixMode(GL_MODELVIEW);
- }
-
/* check if we have a valid image */
if (ima == NULL || ima->ok == 0)
return 0;
@@ -652,29 +549,29 @@ int GPU_verify_image(
GPU_free_image(ima);
ima->tpageflag &= ~IMA_TPAGE_REFRESH;
}
-
+
if (GTS.tilemode) {
/* tiled mode */
if (ima->repbind == NULL) gpu_make_repbind(ima);
if (GTS.tile >= ima->totbind) GTS.tile = 0;
-
+
/* this happens when you change repeat buttons */
if (ima->repbind && textarget == GL_TEXTURE_2D) bind = &ima->repbind[GTS.tile];
else bind = gpu_get_image_bindcode(ima, textarget);
-
+
if (*bind == 0) {
short texwindx = ibuf->x / ima->xrep;
short texwindy = ibuf->y / ima->yrep;
-
+
if (GTS.tile >= ima->xrep * ima->yrep)
GTS.tile = ima->xrep * ima->yrep - 1;
-
+
short texwinsy = GTS.tile / ima->xrep;
short texwinsx = GTS.tile - texwinsy * ima->xrep;
-
+
texwinsx *= texwindx;
texwinsy *= texwindy;
-
+
tpx = texwindx;
tpy = texwindy;
@@ -748,7 +645,7 @@ int GPU_verify_image(
memcpy(tilerectrow, rectrow, tpx * sizeof(*rectrow));
}
-
+
rect = tilerect;
}
}
@@ -759,13 +656,13 @@ int GPU_verify_image(
else
#endif
GPU_create_gl_tex(bind, rect, frect, rectw, recth, textarget, mipmap, use_high_bit_depth, ima);
-
+
/* mark as non-color data texture */
if (*bind) {
if (is_data)
- ima->tpageflag |= IMA_GLBIND_IS_DATA;
+ ima->tpageflag |= IMA_GLBIND_IS_DATA;
else
- ima->tpageflag &= ~IMA_GLBIND_IS_DATA;
+ ima->tpageflag &= ~IMA_GLBIND_IS_DATA;
}
/* clean up */
@@ -858,30 +755,6 @@ void GPU_create_gl_tex(
int tpx = rectw;
int tpy = recth;
- /* scale if not a power of two. this is not strictly necessary for newer
- * GPUs (OpenGL version >= 2.0) since they support non-power-of-two-textures
- * Then don't bother scaling for hardware that supports NPOT textures! */
- if (textarget == GL_TEXTURE_2D &&
- ((!GPU_full_non_power_of_two_support() && !is_power_of_2_resolution(rectw, recth)) ||
- is_over_resolution_limit(textarget, rectw, recth)))
- {
- rectw = smaller_power_of_2_limit(rectw);
- recth = smaller_power_of_2_limit(recth);
-
- if (use_high_bit_depth) {
- ibuf = IMB_allocFromBuffer(NULL, frect, tpx, tpy);
- IMB_scaleImBuf(ibuf, rectw, recth);
-
- frect = ibuf->rect_float;
- }
- else {
- ibuf = IMB_allocFromBuffer(rect, NULL, tpx, tpy);
- IMB_scaleImBuf(ibuf, rectw, recth);
-
- rect = ibuf->rect;
- }
- }
-
/* create image */
glGenTextures(1, (GLuint *)bind);
glBindTexture(textarget, *bind);
@@ -900,7 +773,7 @@ void GPU_create_gl_tex(
if (GPU_get_mipmap() && mipmap) {
if (GTS.gpu_mipmap) {
- gpu_generate_mipmap(GL_TEXTURE_2D);
+ glGenerateMipmap(GL_TEXTURE_2D);
}
else {
int i;
@@ -951,7 +824,7 @@ void GPU_create_gl_tex(
if (GPU_get_mipmap() && mipmap) {
if (GTS.gpu_mipmap) {
- gpu_generate_mipmap(GL_TEXTURE_CUBE_MAP);
+ glGenerateMipmap(GL_TEXTURE_CUBE_MAP);
}
else {
if (!ibuf) {
@@ -975,7 +848,7 @@ void GPU_create_gl_tex(
if (mip_cube_map) {
for (int j = 0; j < 6; j++) {
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + j, i,
- informat, mipw, miph, 0, GL_RGBA, type, mip_cube_map[j]);
+ informat, mipw, miph, 0, GL_RGBA, type, mip_cube_map[j]);
}
}
gpu_del_cube_map(mip_cube_map);
@@ -1056,7 +929,7 @@ bool GPU_upload_dxt_texture(ImBuf *ibuf)
size = ((width + 3) / 4) * ((height + 3) / 4) * blocksize;
glCompressedTexImage2D(GL_TEXTURE_2D, i, format, width, height,
- 0, size, ibuf->dds_data.data + offset);
+ 0, size, ibuf->dds_data.data + offset);
offset += size;
width >>= 1;
@@ -1091,62 +964,6 @@ void GPU_create_gl_tex_compressed(
}
#endif
}
-static void gpu_verify_repeat(Image *ima)
-{
- /* set either clamp or repeat in X/Y */
- if (ima->tpageflag & IMA_CLAMP_U)
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- else
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
-
- if (ima->tpageflag & IMA_CLAMP_V)
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- else
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
-}
-
-int GPU_set_tpage(MTexPoly *mtexpoly, int mipmap, int alphablend)
-{
- /* check if we need to clear the state */
- if (mtexpoly == NULL) {
- GPU_clear_tpage(false);
- return 0;
- }
-
- Image *ima = mtexpoly->tpage;
- GTS.lasttface = mtexpoly;
-
- gpu_verify_alpha_blend(alphablend);
- gpu_verify_reflection(ima);
-
- if (GPU_verify_image(ima, NULL, GL_TEXTURE_2D, mtexpoly->tile, 1, mipmap, false)) {
- GTS.curtile = GTS.tile;
- GTS.curima = GTS.ima;
- GTS.curtilemode = GTS.tilemode;
- GTS.curtileXRep = GTS.tileXRep;
- GTS.curtileYRep = GTS.tileYRep;
-
- glEnable(GL_TEXTURE_2D);
- }
- else {
- glDisable(GL_TEXTURE_2D);
-
- GTS.curtile = 0;
- GTS.curima = NULL;
- GTS.curtilemode = 0;
- GTS.curtileXRep = 0;
- GTS.curtileYRep = 0;
-
- return 0;
- }
-
- gpu_verify_repeat(ima);
-
- /* Did this get lost in the image recode? */
- /* BKE_image_tag_time(ima);*/
-
- return 1;
-}
/* these two functions are called on entering and exiting texture paint mode,
* temporary disabling/enabling mipmapping on all images for quick texture
@@ -1206,9 +1023,7 @@ void GPU_paint_set_mipmap(bool mipmap)
/* check if image has been downscaled and do scaled partial update */
static bool gpu_check_scaled_image(ImBuf *ibuf, Image *ima, float *frect, int x, int y, int w, int h)
{
- if ((!GPU_full_non_power_of_two_support() && !is_power_of_2_resolution(ibuf->x, ibuf->y)) ||
- is_over_resolution_limit(GL_TEXTURE_2D, ibuf->x, ibuf->y))
- {
+ if (is_over_resolution_limit(GL_TEXTURE_2D, ibuf->x, ibuf->y)) {
int x_limit = smaller_power_of_2_limit(ibuf->x);
int y_limit = smaller_power_of_2_limit(ibuf->y);
@@ -1261,7 +1076,7 @@ static bool gpu_check_scaled_image(ImBuf *ibuf, Image *ima, float *frect, int x,
}
if (GPU_get_mipmap()) {
- gpu_generate_mipmap(GL_TEXTURE_2D);
+ glGenerateMipmap(GL_TEXTURE_2D);
}
else {
ima->tpageflag &= ~IMA_MIPMAP_COMPLETE;
@@ -1296,7 +1111,7 @@ void GPU_paint_update_image(Image *ima, ImageUser *iuser, int x, int y, int w, i
float *buffer = MEM_mallocN(w * h * sizeof(float) * 4, "temp_texpaint_float_buf");
bool is_data = (ima->tpageflag & IMA_GLBIND_IS_DATA) != 0;
IMB_partial_rect_from_float(ibuf, buffer, x, y, w, h, is_data);
-
+
if (gpu_check_scaled_image(ibuf, ima, buffer, x, y, w, h)) {
MEM_freeN(buffer);
BKE_image_release_ibuf(ima, ibuf, NULL);
@@ -1311,7 +1126,7 @@ void GPU_paint_update_image(Image *ima, ImageUser *iuser, int x, int y, int w, i
/* we have already accounted for the case where GTS.gpu_mipmap is false
* so we will be using GPU mipmap generation here */
if (GPU_get_mipmap()) {
- gpu_generate_mipmap(GL_TEXTURE_2D);
+ glGenerateMipmap(GL_TEXTURE_2D);
}
else {
ima->tpageflag &= ~IMA_MIPMAP_COMPLETE;
@@ -1337,7 +1152,7 @@ void GPU_paint_update_image(Image *ima, ImageUser *iuser, int x, int y, int w, i
glPixelStorei(GL_UNPACK_SKIP_ROWS, y);
glTexSubImage2D(GL_TEXTURE_2D, 0, x, y, w, h, GL_RGBA,
- GL_UNSIGNED_BYTE, ibuf->rect);
+ GL_UNSIGNED_BYTE, ibuf->rect);
glPixelStorei(GL_UNPACK_ROW_LENGTH, row_length);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, skip_pixels);
@@ -1345,7 +1160,7 @@ void GPU_paint_update_image(Image *ima, ImageUser *iuser, int x, int y, int w, i
/* see comment above as to why we are using gpu mipmap generation here */
if (GPU_get_mipmap()) {
- gpu_generate_mipmap(GL_TEXTURE_2D);
+ glGenerateMipmap(GL_TEXTURE_2D);
}
else {
ima->tpageflag &= ~IMA_MIPMAP_COMPLETE;
@@ -1361,9 +1176,9 @@ void GPU_update_images_framechange(void)
if (ima->tpageflag & IMA_TWINANIM) {
if (ima->twend >= ima->xrep * ima->yrep)
ima->twend = ima->xrep * ima->yrep - 1;
-
+
/* check: is bindcode not in the array? free. (to do) */
-
+
ima->lastframe++;
if (ima->lastframe > ima->twend)
ima->lastframe = ima->twsta;
@@ -1386,9 +1201,9 @@ int GPU_update_image_time(Image *ima, double time)
if (ima->tpageflag & IMA_TWINANIM) {
if (ima->twend >= ima->xrep * ima->yrep) ima->twend = ima->xrep * ima->yrep - 1;
-
+
/* check: is the bindcode not in the array? Then free. (still to do) */
-
+
float diff = (float)((float)time - ima->lastupdate);
inc = (int)(diff * (float)ima->animspeed);
@@ -1437,31 +1252,60 @@ void GPU_create_smoke(SmokeModifierData *smd, int highres)
if (smoke_has_colors(sds->fluid)) {
float *data = MEM_callocN(sizeof(float) * sds->total_cells * 4, "smokeColorTexture");
smoke_get_rgba(sds->fluid, data, 0);
- sds->tex = GPU_texture_create_3D(sds->res[0], sds->res[1], sds->res[2], 4, data);
+ sds->tex = GPU_texture_create_3D(sds->res[0], sds->res[1], sds->res[2], data, NULL);
MEM_freeN(data);
}
/* density only */
else {
- sds->tex = GPU_texture_create_3D(sds->res[0], sds->res[1], sds->res[2], 1, smoke_get_density(sds->fluid));
+ sds->tex = GPU_texture_create_3D_custom(sds->res[0], sds->res[1], sds->res[2], 1,
+ GPU_R8, smoke_get_density(sds->fluid), NULL);
+
+ /* Swizzle the RGBA components to read the Red channel so
+ * that the shader stay the same for colored and non color
+ * density textures. */
+ GPU_texture_bind(sds->tex, 0);
+ glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_SWIZZLE_R, GL_RED);
+ glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_SWIZZLE_G, GL_RED);
+ glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_SWIZZLE_B, GL_RED);
+ glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_SWIZZLE_A, GL_RED);
+ GPU_texture_unbind(sds->tex);
}
- sds->tex_flame = (smoke_has_fuel(sds->fluid)) ? GPU_texture_create_3D(sds->res[0], sds->res[1], sds->res[2], 1, smoke_get_flame(sds->fluid)) : NULL;
+ sds->tex_flame = (smoke_has_fuel(sds->fluid)) ?
+ GPU_texture_create_3D_custom(sds->res[0], sds->res[1], sds->res[2], 1,
+ GPU_R8, smoke_get_flame(sds->fluid), NULL) :
+ NULL;
}
else if (!sds->tex && highres) {
/* rgba texture for color + density */
if (smoke_turbulence_has_colors(sds->wt)) {
float *data = MEM_callocN(sizeof(float) * smoke_turbulence_get_cells(sds->wt) * 4, "smokeColorTexture");
smoke_turbulence_get_rgba(sds->wt, data, 0);
- sds->tex = GPU_texture_create_3D(sds->res_wt[0], sds->res_wt[1], sds->res_wt[2], 4, data);
+ sds->tex = GPU_texture_create_3D(sds->res_wt[0], sds->res_wt[1], sds->res_wt[2], data, NULL);
MEM_freeN(data);
}
/* density only */
else {
- sds->tex = GPU_texture_create_3D(sds->res_wt[0], sds->res_wt[1], sds->res_wt[2], 1, smoke_turbulence_get_density(sds->wt));
+ sds->tex = GPU_texture_create_3D_custom(sds->res_wt[0], sds->res_wt[1], sds->res_wt[2], 1,
+ GPU_R8, smoke_turbulence_get_density(sds->wt), NULL);
+
+ /* Swizzle the RGBA components to read the Red channel so
+ * that the shader stay the same for colored and non color
+ * density textures. */
+ GPU_texture_bind(sds->tex, 0);
+ glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_SWIZZLE_R, GL_RED);
+ glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_SWIZZLE_G, GL_RED);
+ glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_SWIZZLE_B, GL_RED);
+ glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_SWIZZLE_A, GL_RED);
+ GPU_texture_unbind(sds->tex);
}
- sds->tex_flame = (smoke_turbulence_has_fuel(sds->wt)) ? GPU_texture_create_3D(sds->res_wt[0], sds->res_wt[1], sds->res_wt[2], 1, smoke_turbulence_get_flame(sds->wt)) : NULL;
+ sds->tex_flame = (smoke_turbulence_has_fuel(sds->wt)) ?
+ GPU_texture_create_3D_custom(sds->res_wt[0], sds->res_wt[1], sds->res_wt[2], 1,
+ GPU_R8, smoke_turbulence_get_flame(sds->wt), NULL) :
+ NULL;
}
- sds->tex_shadow = GPU_texture_create_3D(sds->res[0], sds->res[1], sds->res[2], 1, sds->shadow);
+ sds->tex_shadow = GPU_texture_create_3D_custom(sds->res[0], sds->res[1], sds->res[2], 1,
+ GPU_R8, sds->shadow, NULL);
}
#else // WITH_SMOKE
(void)highres;
@@ -1528,7 +1372,7 @@ void GPU_free_image(Image *ima)
/* free repeated image binding */
if (ima->repbind) {
glDeleteTextures(ima->totbind, (GLuint *)ima->repbind);
-
+
MEM_freeN(ima->repbind);
ima->repbind = NULL;
}
@@ -1601,7 +1445,7 @@ typedef struct GPUMaterialFixed {
float spec[3];
int hard;
float alpha;
-} GPUMaterialFixed;
+} GPUMaterialFixed;
static struct GPUMaterialState {
GPUMaterialFixed (*matbuf);
@@ -1616,10 +1460,10 @@ static struct GPUMaterialState {
Material *gmatbuf_fixed[FIXEDMAT];
Material *gboundmat;
Object *gob;
+ eObjectMode gob_object_mode;
DupliObject *dob;
Scene *gscene;
int glay;
- bool gscenelock;
float (*gviewmat)[4];
float (*gviewinv)[4];
float (*gviewcamtexcofac);
@@ -1657,12 +1501,12 @@ static void gpu_material_to_fixed(
copy_v3_v3(smat->spec, &bmat->specr);
smat->alpha = 1.0f;
smat->hard = CLAMPIS(bmat->har, 0, 128);
-
+
if (dimdown) {
mul_v3_fl(smat->diff, 0.8f);
mul_v3_fl(smat->spec, 0.5f);
}
-
+
if (gamma) {
linearrgb_to_srgb_v3_v3(smat->diff, smat->diff);
linearrgb_to_srgb_v3_v3(smat->spec, smat->spec);
@@ -1673,7 +1517,7 @@ static void gpu_material_to_fixed(
if (bmat->shade_flag & MA_OBCOLOR)
mul_v3_v3(smat->diff, ob->col);
-
+
mul_v3_v3fl(smat->spec, &bmat->specr, bmat->spec);
smat->hard = CLAMPIS(bmat->har, 1, 128);
smat->alpha = 1.0f;
@@ -1710,8 +1554,8 @@ void GPU_end_dupli_object(void)
}
void GPU_begin_object_materials(
- View3D *v3d, RegionView3D *rv3d, Scene *scene, Object *ob,
- bool glsl, bool *do_alpha_after)
+ View3D *v3d, RegionView3D *rv3d, Scene *scene, ViewLayer *view_layer, Object *ob,
+ bool glsl, const eObjectMode object_mode, bool *do_alpha_after)
{
Material *ma;
GPUMaterial *gpumat;
@@ -1749,8 +1593,10 @@ void GPU_begin_object_materials(
#ifdef WITH_GAMEENGINE
if (rv3d->rflag & RV3D_IS_GAME_ENGINE) {
- ob = BKE_object_lod_matob_get(ob, scene);
+ ob = BKE_object_lod_matob_get(ob, view_layer, object_mode);
}
+#else
+ UNUSED_VARS(view_layer);
#endif
/* initialize state */
@@ -1771,11 +1617,11 @@ void GPU_begin_object_materials(
GMS.two_sided_lighting = (((Mesh *)ob->data)->flag & ME_TWOSIDED) != 0;
GMS.gob = ob;
+ GMS.gob_object_mode = object_mode;
GMS.gscene = scene;
GMS.is_opensubdiv = use_opensubdiv;
GMS.totmat = use_matcap ? 1 : ob->totcol + 1; /* materials start from 1, default material is 0 */
GMS.glay = (v3d->localvd) ? v3d->localvd->lay : v3d->lay; /* keep lamps visible in local view */
- GMS.gscenelock = (v3d->scenelock != 0);
GMS.gviewmat = rv3d->viewmat;
GMS.gviewinv = rv3d->viewinv;
GMS.gviewcamtexcofac = rv3d->viewcamtexcofac;
@@ -1789,7 +1635,7 @@ void GPU_begin_object_materials(
GMS.is_alpha_pass = (v3d->transp != false);
if (GMS.use_alpha_pass)
*do_alpha_after = false;
-
+
if (GMS.totmat > FIXEDMAT) {
GMS.matbuf = MEM_callocN(sizeof(GPUMaterialFixed) * GMS.totmat, "GMS.matbuf");
GMS.gmatbuf = MEM_callocN(sizeof(*GMS.gmatbuf) * GMS.totmat, "GMS.matbuf");
@@ -1808,11 +1654,11 @@ void GPU_begin_object_materials(
/* do material 1 too, for displists! */
memcpy(&GMS.matbuf[1], &GMS.matbuf[0], sizeof(GPUMaterialFixed));
-
+
GMS.alphablend[0] = GPU_BLEND_SOLID;
}
else {
-
+
/* no materials assigned? */
if (ob->totcol == 0) {
gpu_material_to_fixed(&GMS.matbuf[0], &defmaterial, 0, ob, new_shading_nodes, true);
@@ -1827,7 +1673,7 @@ void GPU_begin_object_materials(
GMS.alphablend[0] = GPU_BLEND_SOLID;
}
-
+
/* setup materials */
for (a = 1; a <= ob->totcol; a++) {
/* find a suitable material */
@@ -1985,13 +1831,13 @@ int GPU_object_material_bind(int nr, void *attribs)
gpu_get_particle_info(&partile_info);
}
- if (GPU_get_material_builtins(gpumat) & GPU_OBJECT_INFO) {
+ if ((GPU_get_material_builtins(gpumat) & GPU_OBJECT_INFO) != 0) {
GPU_get_object_info(object_info, mat);
}
GPU_material_bind(
- gpumat, GMS.gob->lay, GMS.glay, 1.0, !(GMS.gob->mode & OB_MODE_TEXTURE_PAINT),
- GMS.gviewmat, GMS.gviewinv, GMS.gviewcamtexcofac, GMS.gscenelock);
+ gpumat, GMS.gob->lay, GMS.glay, 1.0, !(GMS.gob_object_mode & OB_MODE_TEXTURE_PAINT),
+ GMS.gviewmat, GMS.gviewinv, GMS.gviewcamtexcofac);
auto_bump_scale = GMS.gob->derivedFinal != NULL ? GMS.gob->derivedFinal->auto_bump_scale : 1.0f;
GPU_material_bind_uniforms(gpumat, GMS.gob->obmat, GMS.gviewmat, GMS.gob->col, auto_bump_scale, &partile_info, object_info);
@@ -2062,7 +1908,7 @@ void GPU_set_material_alpha_blend(int alphablend)
{
if (GMS.lastalphablend == alphablend)
return;
-
+
gpu_set_alpha_blend(alphablend);
GMS.lastalphablend = alphablend;
}
@@ -2133,13 +1979,6 @@ void GPU_end_object_materials(void)
GMS.gmatbuf = NULL;
GMS.alphablend = NULL;
GMS.two_sided_lighting = false;
-
- /* resetting the texture matrix after the scaling needed for tiled textures */
- if (GTS.tilemode) {
- glMatrixMode(GL_TEXTURE);
- glLoadIdentity();
- glMatrixMode(GL_MODELVIEW);
- }
}
/* Lights */
@@ -2153,13 +1992,13 @@ int GPU_default_lights(void)
U.light[0].col[0] = 0.8; U.light[0].col[1] = 0.8; U.light[0].col[2] = 0.8;
U.light[0].spec[0] = 0.5; U.light[0].spec[1] = 0.5; U.light[0].spec[2] = 0.5;
U.light[0].spec[3] = 1.0;
-
+
U.light[1].flag = 0;
U.light[1].vec[0] = 0.5; U.light[1].vec[1] = 0.5; U.light[1].vec[2] = 0.1;
U.light[1].col[0] = 0.4; U.light[1].col[1] = 0.4; U.light[1].col[2] = 0.8;
U.light[1].spec[0] = 0.3; U.light[1].spec[1] = 0.3; U.light[1].spec[2] = 0.5;
U.light[1].spec[3] = 1.0;
-
+
U.light[2].flag = 0;
U.light[2].vec[0] = 0.3; U.light[2].vec[1] = -0.3; U.light[2].vec[2] = -0.2;
U.light[2].col[0] = 0.8; U.light[2].col[1] = 0.5; U.light[2].col[2] = 0.4;
@@ -2192,31 +2031,28 @@ int GPU_default_lights(void)
return count;
}
-int GPU_scene_object_lights(Scene *scene, Object *ob, int lay, float viewmat[4][4], int ortho)
+int GPU_scene_object_lights(ViewLayer *view_layer, float viewmat[4][4], int ortho)
{
/* disable all lights */
for (int count = 0; count < 8; count++)
GPU_basic_shader_light_set(count, NULL);
-
+
/* view direction for specular is not computed correct by default in
* opengl, so we set the settings ourselves */
GPU_basic_shader_light_set_viewer(!ortho);
int count = 0;
- for (Base *base = scene->base.first; base; base = base->next) {
+ for (Base *base = FIRSTBASE(view_layer); base; base = base->next) {
if (base->object->type != OB_LAMP)
continue;
- if (!(base->lay & lay) || !(base->lay & ob->lay))
- continue;
-
Lamp *la = base->object->data;
-
+
/* setup lamp transform */
- glPushMatrix();
- glLoadMatrixf((float *)viewmat);
-
+ gpuPushMatrix();
+ gpuLoadMatrix(viewmat);
+
/* setup light */
GPULightData light = {0};
@@ -2235,7 +2071,7 @@ int GPU_scene_object_lights(Scene *scene, Object *ob, int lay, float viewmat[4][
light.constant_attenuation = 1.0f;
light.linear_attenuation = la->att1 / la->dist;
light.quadratic_attenuation = la->att2 / (la->dist * la->dist);
-
+
if (la->type == LA_SPOT) {
light.type = GPU_LIGHT_SPOT;
negate_v3_v3(light.direction, base->object->obmat[2]);
@@ -2246,11 +2082,11 @@ int GPU_scene_object_lights(Scene *scene, Object *ob, int lay, float viewmat[4][
else
light.type = GPU_LIGHT_POINT;
}
-
+
GPU_basic_shader_light_set(count, &light);
-
- glPopMatrix();
-
+
+ gpuPopMatrix();
+
count++;
if (count == 8)
break;
@@ -2297,64 +2133,36 @@ static void gpu_multisample(bool enable)
void GPU_state_init(void)
{
- float mat_ambient[] = { 0.0, 0.0, 0.0, 0.0 };
- float mat_specular[] = { 0.5, 0.5, 0.5, 1.0 };
-
- glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, mat_ambient);
- glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mat_specular);
- glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat_specular);
- glMateriali(GL_FRONT_AND_BACK, GL_SHININESS, 35);
- glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
-
GPU_default_lights();
-
+
+ GPU_disable_program_point_size();
+
+ glEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS);
+
glDepthFunc(GL_LEQUAL);
- /* scaling matrices */
- glEnable(GL_NORMALIZE);
- glDisable(GL_ALPHA_TEST);
glDisable(GL_BLEND);
glDisable(GL_DEPTH_TEST);
- glDisable(GL_FOG);
- glDisable(GL_LIGHTING);
- glDisable(GL_COLOR_MATERIAL);
- glDisable(GL_LOGIC_OP);
+ glDisable(GL_COLOR_LOGIC_OP);
glDisable(GL_STENCIL_TEST);
- glDisable(GL_TEXTURE_1D);
- glDisable(GL_TEXTURE_2D);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
-
- /* default disabled, enable should be local per function */
- glDisableClientState(GL_VERTEX_ARRAY);
- glDisableClientState(GL_NORMAL_ARRAY);
- glDisableClientState(GL_COLOR_ARRAY);
- glDisableClientState(GL_TEXTURE_COORD_ARRAY);
-
- glPixelTransferi(GL_MAP_COLOR, GL_FALSE);
- glPixelTransferi(GL_RED_SCALE, 1);
- glPixelTransferi(GL_RED_BIAS, 0);
- glPixelTransferi(GL_GREEN_SCALE, 1);
- glPixelTransferi(GL_GREEN_BIAS, 0);
- glPixelTransferi(GL_BLUE_SCALE, 1);
- glPixelTransferi(GL_BLUE_BIAS, 0);
- glPixelTransferi(GL_ALPHA_SCALE, 1);
- glPixelTransferi(GL_ALPHA_BIAS, 0);
-
- glPixelTransferi(GL_DEPTH_BIAS, 0);
- glPixelTransferi(GL_DEPTH_SCALE, 1);
- glDepthRange(0.0, 1.0);
- glMatrixMode(GL_TEXTURE);
- glLoadIdentity();
- glMatrixMode(GL_MODELVIEW);
+ glDepthRange(0.0, 1.0);
glFrontFace(GL_CCW);
glCullFace(GL_BACK);
glDisable(GL_CULL_FACE);
gpu_multisample(false);
+}
+
+void GPU_enable_program_point_size(void)
+{
+ glEnable(GL_PROGRAM_POINT_SIZE);
+}
- GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
+void GPU_disable_program_point_size(void)
+{
+ glDisable(GL_PROGRAM_POINT_SIZE);
}
#ifdef WITH_OPENSUBDIV
@@ -2500,10 +2308,10 @@ void GPU_select_to_index_array(unsigned int *col, const unsigned int size)
{
#define INDEX_BUF_ARRAY(INDEX_FROM_BUF_BITS) \
for (i = size; i--; col++) { \
- if ((c = *col)) { \
- *col = INDEX_FROM_BUF_BITS(c); \
- } \
- } ((void)0)
+ if ((c = *col)) { \
+ *col = INDEX_FROM_BUF_BITS(c); \
+ } \
+ } ((void)0)
if (size > 0) {
unsigned int i, c;
@@ -2531,4 +2339,173 @@ void GPU_select_to_index_array(unsigned int *col, const unsigned int size)
#undef INDEX_BUF_ARRAY
}
+#define STATE_STACK_DEPTH 16
+
+typedef struct {
+ eGPUAttribMask mask;
+
+ /* GL_ENABLE_BIT */
+ unsigned int is_blend : 1;
+ unsigned int is_cull_face : 1;
+ unsigned int is_depth_test : 1;
+ unsigned int is_dither : 1;
+ unsigned int is_lighting : 1;
+ unsigned int is_line_smooth : 1;
+ unsigned int is_color_logic_op : 1;
+ unsigned int is_multisample : 1;
+ unsigned int is_polygon_offset_line : 1;
+ unsigned int is_polygon_offset_fill : 1;
+ unsigned int is_polygon_smooth : 1;
+ unsigned int is_sample_alpha_to_coverage : 1;
+ unsigned int is_scissor_test : 1;
+ unsigned int is_stencil_test : 1;
+
+ bool is_clip_plane[6];
+
+ /* GL_DEPTH_BUFFER_BIT */
+ /* unsigned int is_depth_test : 1; */
+ int depth_func;
+ double depth_clear_value;
+ bool depth_write_mask;
+
+ /* GL_SCISSOR_BIT */
+ int scissor_box[4];
+ /* unsigned int is_scissor_test : 1; */
+
+ /* GL_VIEWPORT_BIT */
+ int viewport[4];
+ double near_far[2];
+} GPUAttribValues;
+
+typedef struct {
+ GPUAttribValues attrib_stack[STATE_STACK_DEPTH];
+ unsigned int top;
+} GPUAttribStack;
+
+static GPUAttribStack state = {
+ .top = 0
+};
+
+#define AttribStack state
+#define Gwn_VertAttr state.attrib_stack[state.top]
+
+/**
+ * Replacement for glPush/PopAttributes
+ *
+ * We don't need to cover all the options of legacy OpenGL
+ * but simply the ones used by Blender.
+ */
+void gpuPushAttrib(eGPUAttribMask mask)
+{
+ Gwn_VertAttr.mask = mask;
+
+ if ((mask & GPU_DEPTH_BUFFER_BIT) != 0) {
+ Gwn_VertAttr.is_depth_test = glIsEnabled(GL_DEPTH_TEST);
+ glGetIntegerv(GL_DEPTH_FUNC, &Gwn_VertAttr.depth_func);
+ glGetDoublev(GL_DEPTH_CLEAR_VALUE, &Gwn_VertAttr.depth_clear_value);
+ glGetBooleanv(GL_DEPTH_WRITEMASK, (GLboolean *)&Gwn_VertAttr.depth_write_mask);
+ }
+
+ if ((mask & GPU_ENABLE_BIT) != 0) {
+ Gwn_VertAttr.is_blend = glIsEnabled(GL_BLEND);
+
+ for (int i = 0; i < 6; i++) {
+ Gwn_VertAttr.is_clip_plane[i] = glIsEnabled(GL_CLIP_PLANE0 + i);
+ }
+
+ Gwn_VertAttr.is_cull_face = glIsEnabled(GL_CULL_FACE);
+ Gwn_VertAttr.is_depth_test = glIsEnabled(GL_DEPTH_TEST);
+ Gwn_VertAttr.is_dither = glIsEnabled(GL_DITHER);
+ Gwn_VertAttr.is_line_smooth = glIsEnabled(GL_LINE_SMOOTH);
+ Gwn_VertAttr.is_color_logic_op = glIsEnabled(GL_COLOR_LOGIC_OP);
+ Gwn_VertAttr.is_multisample = glIsEnabled(GL_MULTISAMPLE);
+ Gwn_VertAttr.is_polygon_offset_line = glIsEnabled(GL_POLYGON_OFFSET_LINE);
+ Gwn_VertAttr.is_polygon_offset_fill = glIsEnabled(GL_POLYGON_OFFSET_FILL);
+ Gwn_VertAttr.is_polygon_smooth = glIsEnabled(GL_POLYGON_SMOOTH);
+ Gwn_VertAttr.is_sample_alpha_to_coverage = glIsEnabled(GL_SAMPLE_ALPHA_TO_COVERAGE);
+ Gwn_VertAttr.is_scissor_test = glIsEnabled(GL_SCISSOR_TEST);
+ Gwn_VertAttr.is_stencil_test = glIsEnabled(GL_STENCIL_TEST);
+ }
+
+ if ((mask & GPU_SCISSOR_BIT) != 0) {
+ Gwn_VertAttr.is_scissor_test = glIsEnabled(GL_SCISSOR_TEST);
+ glGetIntegerv(GL_SCISSOR_BOX, (GLint *)&Gwn_VertAttr.scissor_box);
+ }
+
+ if ((mask & GPU_VIEWPORT_BIT) != 0) {
+ glGetDoublev(GL_DEPTH_RANGE, (GLdouble *)&Gwn_VertAttr.near_far);
+ glGetIntegerv(GL_VIEWPORT, (GLint *)&Gwn_VertAttr.viewport);
+ }
+
+ if ((mask & GPU_BLEND_BIT) != 0) {
+ Gwn_VertAttr.is_blend = glIsEnabled(GL_BLEND);
+ }
+
+ BLI_assert(AttribStack.top < STATE_STACK_DEPTH);
+ AttribStack.top++;
+}
+
+static void restore_mask(GLenum cap, const bool value)
+{
+ if (value) {
+ glEnable(cap);
+ }
+ else {
+ glDisable(cap);
+ }
+}
+
+void gpuPopAttrib(void)
+{
+ BLI_assert(AttribStack.top > 0);
+ AttribStack.top--;
+
+ GLint mask = Gwn_VertAttr.mask;
+
+ if ((mask & GPU_DEPTH_BUFFER_BIT) != 0) {
+ restore_mask(GL_DEPTH_TEST, Gwn_VertAttr.is_depth_test);
+ glDepthFunc(Gwn_VertAttr.depth_func);
+ glClearDepth(Gwn_VertAttr.depth_clear_value);
+ glDepthMask(Gwn_VertAttr.depth_write_mask);
+ }
+
+ if ((mask & GPU_ENABLE_BIT) != 0) {
+ restore_mask(GL_BLEND, Gwn_VertAttr.is_blend);
+
+ for (int i = 0; i < 6; i++) {
+ restore_mask(GL_CLIP_PLANE0 + i, Gwn_VertAttr.is_clip_plane[i]);
+ }
+
+ restore_mask(GL_CULL_FACE, Gwn_VertAttr.is_cull_face);
+ restore_mask(GL_DEPTH_TEST, Gwn_VertAttr.is_depth_test);
+ restore_mask(GL_DITHER, Gwn_VertAttr.is_dither);
+ restore_mask(GL_LINE_SMOOTH, Gwn_VertAttr.is_line_smooth);
+ restore_mask(GL_COLOR_LOGIC_OP, Gwn_VertAttr.is_color_logic_op);
+ restore_mask(GL_MULTISAMPLE, Gwn_VertAttr.is_multisample);
+ restore_mask(GL_POLYGON_OFFSET_LINE, Gwn_VertAttr.is_polygon_offset_line);
+ restore_mask(GL_POLYGON_OFFSET_FILL, Gwn_VertAttr.is_polygon_offset_fill);
+ restore_mask(GL_POLYGON_SMOOTH, Gwn_VertAttr.is_polygon_smooth);
+ restore_mask(GL_SAMPLE_ALPHA_TO_COVERAGE, Gwn_VertAttr.is_sample_alpha_to_coverage);
+ restore_mask(GL_SCISSOR_TEST, Gwn_VertAttr.is_scissor_test);
+ restore_mask(GL_STENCIL_TEST, Gwn_VertAttr.is_stencil_test);
+ }
+
+ if ((mask & GPU_VIEWPORT_BIT) != 0) {
+ glViewport(Gwn_VertAttr.viewport[0], Gwn_VertAttr.viewport[1], Gwn_VertAttr.viewport[2], Gwn_VertAttr.viewport[3]);
+ glDepthRange(Gwn_VertAttr.near_far[0], Gwn_VertAttr.near_far[1]);
+ }
+
+ if ((mask & GPU_SCISSOR_BIT) != 0) {
+ restore_mask(GL_SCISSOR_TEST, Gwn_VertAttr.is_scissor_test);
+ glScissor(Gwn_VertAttr.scissor_box[0], Gwn_VertAttr.scissor_box[1], Gwn_VertAttr.scissor_box[2], Gwn_VertAttr.scissor_box[3]);
+ }
+
+ if ((mask & GPU_BLEND_BIT) != 0) {
+ restore_mask(GL_BLEND, Gwn_VertAttr.is_blend);
+ }
+}
+
+#undef Gwn_VertAttr
+#undef AttribStack
+
/** \} */
diff --git a/source/blender/gpu/intern/gpu_extensions.c b/source/blender/gpu/intern/gpu_extensions.c
index e0ce87d0e68..6bf330179d3 100644
--- a/source/blender/gpu/intern/gpu_extensions.c
+++ b/source/blender/gpu/intern/gpu_extensions.c
@@ -56,14 +56,11 @@
/* Extensions support */
/* -- extension: version of GL that absorbs it
+ * EXT_gpu_shader4: 3.0
* ARB_framebuffer object: 3.0
- * EXT_framebuffer_object: 3.0
- * EXT_framebuffer_blit: 3.0
- * EXT_framebuffer_multisample: 3.0
* EXT_framebuffer_multisample_blit_scaled: ???
* ARB_draw_instanced: 3.1
* ARB_texture_multisample: 3.2
- * EXT_geometry_shader4: 3.2
* ARB_texture_query_lod: 4.0
*/
@@ -71,7 +68,8 @@ static struct GPUGlobal {
GLint maxtexsize;
GLint maxcubemapsize;
GLint maxtextures;
- bool extdisabled;
+ GLint maxubosize;
+ GLint maxubobinds;
int colordepth;
int samples_color_texture_max;
GPUDeviceType device;
@@ -93,11 +91,6 @@ bool GPU_type_matches(GPUDeviceType device, GPUOSType os, GPUDriverType driver)
/* GPU Extensions */
-void GPU_extensions_disable(void)
-{
- GG.extdisabled = true;
-}
-
int GPU_max_texture_size(void)
{
return GG.maxtexsize;
@@ -123,6 +116,16 @@ int GPU_max_cube_map_size(void)
return GG.maxcubemapsize;
}
+int GPU_max_ubo_binds(void)
+{
+ return GG.maxubobinds;
+}
+
+int GPU_max_ubo_size(void)
+{
+ return GG.maxubosize;
+}
+
void GPU_get_dfdy_factors(float fac[2])
{
copy_v2_v2(fac, GG.dfdyfactors);
@@ -130,8 +133,11 @@ void GPU_get_dfdy_factors(float fac[2])
void gpu_extensions_init(void)
{
- /* BLI_assert(GLEW_VERSION_2_1); */
- /* ^-- maybe a bit extreme? */
+ /* during 2.8 development each platform has its own OpenGL minimum requirements
+ * final 2.8 release will be unified on OpenGL 3.3 core profile, no required extensions
+ * see developer.blender.org/T49012 for details
+ */
+ BLI_assert(GLEW_VERSION_3_3);
glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &GG.maxtextures);
@@ -143,11 +149,22 @@ void gpu_extensions_init(void)
else
GG.max_anisotropy = 1.0f;
+ glGetIntegerv(GL_MAX_UNIFORM_BUFFER_BINDINGS, &GG.maxubobinds);
+ glGetIntegerv(GL_MAX_UNIFORM_BLOCK_SIZE, &GG.maxubosize);
+
+#ifndef NDEBUG
+ GLint ret;
+ glBindFramebuffer(GL_FRAMEBUFFER, 0);
+ glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_FRONT_LEFT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &ret);
+ /* We expect FRONT_LEFT to be the default buffer. */
+ BLI_assert(ret == GL_FRAMEBUFFER_DEFAULT);
+#endif
+
GLint r, g, b;
- glGetIntegerv(GL_RED_BITS, &r);
- glGetIntegerv(GL_GREEN_BITS, &g);
- glGetIntegerv(GL_BLUE_BITS, &b);
- GG.colordepth = r + g + b; /* assumes same depth for RGB */
+ glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_FRONT_LEFT, GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE, &r);
+ glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_FRONT_LEFT, GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE, &g);
+ glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_FRONT_LEFT, GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE, &b);
+ GG.colordepth = r + g + b; /* Assumes same depth for RGB. */
if (GLEW_VERSION_3_2 || GLEW_ARB_texture_multisample) {
glGetIntegerv(GL_MAX_COLOR_TEXTURE_SAMPLES, &GG.samples_color_texture_max);
@@ -201,10 +218,6 @@ void gpu_extensions_init(void)
GG.driver = GPU_DRIVER_ANY;
}
- /* make sure double side isn't used by default and only getting enabled in places where it's
- * really needed to prevent different unexpected behaviors like with intel gme965 card (sergey) */
- glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE);
-
#ifdef _WIN32
GG.os = GPU_OS_WIN;
#elif defined(__APPLE__)
@@ -246,43 +259,6 @@ void gpu_extensions_exit(void)
GPU_invalid_tex_free();
}
-bool GPU_legacy_support(void)
-{
- /* return whether or not current GL context is compatible with legacy OpenGL */
- static bool checked = false;
- static bool support = true;
-
- if (!checked) {
- if (GLEW_VERSION_3_2) {
- GLint profile;
- glGetIntegerv(GL_CONTEXT_PROFILE_MASK, &profile);
-
- if (G.debug & G_DEBUG_GPU) {
- printf("GL_CONTEXT_PROFILE_MASK = %#x (%s profile)\n", (unsigned int)profile,
- (profile & GL_CONTEXT_COMPATIBILITY_PROFILE_BIT) ? "compatibility" :
- (profile & GL_CONTEXT_CORE_PROFILE_BIT) ? "core" : "unknown");
- }
-
- if (profile == 0) {
- /* workaround for nVidia's Linux driver */
- support = GLEW_ARB_compatibility;
- }
- else {
- support = profile & GL_CONTEXT_COMPATIBILITY_PROFILE_BIT;
- }
- }
- else if (GLEW_VERSION_3_1) {
- support = GLEW_ARB_compatibility;
- }
-
- /* any OpenGL version <= 3.0 is legacy, so support remains true */
-
- checked = true;
- }
-
- return support;
-}
-
bool GPU_full_non_power_of_two_support(void)
{
/* always supported on full GL but still relevant for OpenGL ES 2.0 where
@@ -290,39 +266,11 @@ bool GPU_full_non_power_of_two_support(void)
return true;
}
-bool GPU_display_list_support(void)
-{
- /* deprecated in GL 3
- * supported on older GL and compatibility profile
- * still queried by game engine
- */
- return true;
-}
-
bool GPU_bicubic_bump_support(void)
{
return GLEW_VERSION_4_0 || (GLEW_ARB_texture_query_lod && GLEW_VERSION_3_0);
}
-bool GPU_geometry_shader_support(void)
-{
- /* in GL 3.2 geometry shaders are fully supported
- * core profile clashes with our other shaders so accept compatibility only
- * other GL versions can use EXT_geometry_shader4 if available
- */
- return (GLEW_VERSION_3_2 && GPU_legacy_support()) || GLEW_EXT_geometry_shader4;
-}
-
-bool GPU_geometry_shader_support_via_extension(void)
-{
- return GLEW_EXT_geometry_shader4 && !(GLEW_VERSION_3_2 && GPU_legacy_support());
-}
-
-bool GPU_instanced_drawing_support(void)
-{
- return GLEW_VERSION_3_1 || GLEW_ARB_draw_instanced;
-}
-
int GPU_color_depth(void)
{
return GG.colordepth;
@@ -330,12 +278,14 @@ int GPU_color_depth(void)
bool GPU_mem_stats_supported(void)
{
- return (GLEW_NVX_gpu_memory_info || (GLEW_ATI_meminfo)) && (G.debug & G_DEBUG_GPU_MEM);
+ return (GLEW_NVX_gpu_memory_info || GLEW_ATI_meminfo) && (G.debug & G_DEBUG_GPU_MEM);
}
void GPU_mem_stats_get(int *totalmem, int *freemem)
{
+ /* TODO(merwin): use Apple's platform API to get this info */
+
if (GLEW_NVX_gpu_memory_info) {
/* returned value in Kb */
glGetIntegerv(GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX, totalmem);
diff --git a/source/blender/gpu/intern/gpu_framebuffer.c b/source/blender/gpu/intern/gpu_framebuffer.c
index e7a8beae5cc..7b1f5c80246 100644
--- a/source/blender/gpu/intern/gpu_framebuffer.c
+++ b/source/blender/gpu/intern/gpu_framebuffer.c
@@ -32,9 +32,11 @@
#include "BKE_global.h"
-#include "GPU_debug.h"
-#include "GPU_glew.h"
+#include "GPU_batch.h"
+#include "GPU_draw.h"
+#include "GPU_extensions.h"
#include "GPU_framebuffer.h"
+#include "GPU_matrix.h"
#include "GPU_shader.h"
#include "GPU_texture.h"
@@ -43,8 +45,8 @@ static struct GPUFrameBufferGlobal {
} GG = {0};
/* Number of maximum output slots.
- * We support 4 outputs for now (usually we wouldn't need more to preserve fill rate) */
-#define GPU_FB_MAX_SLOTS 4
+ * We support 5 outputs for now (usually we wouldn't need more to preserve fill rate) */
+#define GPU_FB_MAX_SLOTS 5
struct GPUFrameBuffer {
GLuint object;
@@ -54,44 +56,37 @@ struct GPUFrameBuffer {
static void gpu_print_framebuffer_error(GLenum status, char err_out[256])
{
+ const char *format = "GPUFrameBuffer: framebuffer status %s\n";
const char *err = "unknown";
+#define format_status(X) \
+ case GL_FRAMEBUFFER_##X: err = "GL_FRAMEBUFFER_"#X; \
+ break;
+
switch (status) {
- case GL_FRAMEBUFFER_COMPLETE_EXT:
- break;
- case GL_INVALID_OPERATION:
- err = "Invalid operation";
- break;
- case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT:
- err = "Incomplete attachment";
- break;
- case GL_FRAMEBUFFER_UNSUPPORTED_EXT:
- err = "Unsupported framebuffer format";
- break;
- case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT:
- err = "Missing attachment";
- break;
- case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT:
- err = "Attached images must have same dimensions";
- break;
- case GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT:
- err = "Attached images must have same format";
- break;
- case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT:
- err = "Missing draw buffer";
- break;
- case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT:
- err = "Missing read buffer";
- break;
+ /* success */
+ format_status(COMPLETE)
+ /* errors shared by OpenGL desktop & ES */
+ format_status(INCOMPLETE_ATTACHMENT)
+ format_status(INCOMPLETE_MISSING_ATTACHMENT)
+ format_status(UNSUPPORTED)
+#if 0 /* for OpenGL ES only */
+ format_status(INCOMPLETE_DIMENSIONS)
+#else /* for desktop GL only */
+ format_status(INCOMPLETE_DRAW_BUFFER)
+ format_status(INCOMPLETE_READ_BUFFER)
+ format_status(INCOMPLETE_MULTISAMPLE)
+ format_status(UNDEFINED)
+#endif
}
+#undef format_status
+
if (err_out) {
- BLI_snprintf(err_out, 256, "GPUFrameBuffer: framebuffer incomplete error %d '%s'",
- (int)status, err);
+ BLI_snprintf(err_out, 256, format, err);
}
else {
- fprintf(stderr, "GPUFrameBuffer: framebuffer incomplete error %d '%s'\n",
- (int)status, err);
+ fprintf(stderr, format, err);
}
}
@@ -101,41 +96,33 @@ GPUFrameBuffer *GPU_framebuffer_create(void)
{
GPUFrameBuffer *fb;
- if (!(GLEW_VERSION_3_0 || GLEW_ARB_framebuffer_object ||
- (GLEW_EXT_framebuffer_object && GLEW_EXT_framebuffer_blit)))
- {
- return NULL;
- }
-
fb = MEM_callocN(sizeof(GPUFrameBuffer), "GPUFrameBuffer");
- glGenFramebuffersEXT(1, &fb->object);
+ glGenFramebuffers(1, &fb->object);
if (!fb->object) {
- fprintf(stderr, "GPUFFrameBuffer: framebuffer gen failed. %d\n",
- (int)glGetError());
+ fprintf(stderr, "GPUFFrameBuffer: framebuffer gen failed.\n");
GPU_framebuffer_free(fb);
return NULL;
}
/* make sure no read buffer is enabled, so completeness check will not fail. We set those at binding time */
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb->object);
+ glBindFramebuffer(GL_FRAMEBUFFER, fb->object);
glReadBuffer(GL_NONE);
glDrawBuffer(GL_NONE);
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
+ glBindFramebuffer(GL_FRAMEBUFFER, 0);
return fb;
}
-int GPU_framebuffer_texture_attach(GPUFrameBuffer *fb, GPUTexture *tex, int slot, char err_out[256])
+bool GPU_framebuffer_texture_attach(GPUFrameBuffer *fb, GPUTexture *tex, int slot, int mip)
{
GLenum attachment;
- GLenum error;
if (slot >= GPU_FB_MAX_SLOTS) {
fprintf(stderr,
"Attaching to index %d framebuffer slot unsupported. "
"Use at most %d\n", slot, GPU_FB_MAX_SLOTS);
- return 0;
+ return false;
}
if ((G.debug & G_DEBUG)) {
@@ -146,26 +133,64 @@ int GPU_framebuffer_texture_attach(GPUFrameBuffer *fb, GPUTexture *tex, int slot
}
}
+ glBindFramebuffer(GL_FRAMEBUFFER, fb->object);
+ GG.currentfb = fb->object;
+
+ if (GPU_texture_stencil(tex) && GPU_texture_depth(tex))
+ attachment = GL_DEPTH_STENCIL_ATTACHMENT;
+ else if (GPU_texture_depth(tex))
+ attachment = GL_DEPTH_ATTACHMENT;
+ else
+ attachment = GL_COLOR_ATTACHMENT0 + slot;
+
+ glFramebufferTexture(GL_FRAMEBUFFER, attachment, GPU_texture_opengl_bindcode(tex), mip);
+
if (GPU_texture_depth(tex))
- attachment = GL_DEPTH_ATTACHMENT_EXT;
+ fb->depthtex = tex;
else
- attachment = GL_COLOR_ATTACHMENT0_EXT + slot;
+ fb->colortex[slot] = tex;
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb->object);
- GG.currentfb = fb->object;
+ GPU_texture_framebuffer_set(tex, fb, slot);
- /* Clean glError buffer. */
- while (glGetError() != GL_NO_ERROR) {}
+ return true;
+}
- glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, attachment,
- GPU_texture_target(tex), GPU_texture_opengl_bindcode(tex), 0);
+static bool gpu_framebuffer_texture_layer_attach_ex(GPUFrameBuffer *fb, GPUTexture *tex, int slot, int layer, int mip, bool cubemap)
+{
+ GLenum attachment;
+ GLenum facetarget;
- error = glGetError();
+ if (slot >= GPU_FB_MAX_SLOTS) {
+ fprintf(stderr,
+ "Attaching to index %d framebuffer slot unsupported. "
+ "Use at most %d\n", slot, GPU_FB_MAX_SLOTS);
+ return false;
+ }
- if (error == GL_INVALID_OPERATION) {
- GPU_framebuffer_restore();
- gpu_print_framebuffer_error(error, err_out);
- return 0;
+ if ((G.debug & G_DEBUG)) {
+ if (GPU_texture_bound_number(tex) != -1) {
+ fprintf(stderr,
+ "Feedback loop warning!: "
+ "Attempting to attach texture to framebuffer while still bound to texture unit for drawing!\n");
+ }
+ }
+
+ glBindFramebuffer(GL_FRAMEBUFFER, fb->object);
+ GG.currentfb = fb->object;
+
+ if (GPU_texture_stencil(tex) && GPU_texture_depth(tex))
+ attachment = GL_DEPTH_STENCIL_ATTACHMENT;
+ else if (GPU_texture_depth(tex))
+ attachment = GL_DEPTH_ATTACHMENT;
+ else
+ attachment = GL_COLOR_ATTACHMENT0 + slot;
+
+ if (cubemap) {
+ facetarget = GL_TEXTURE_CUBE_MAP_POSITIVE_X + layer;
+ glFramebufferTexture2D(GL_FRAMEBUFFER, attachment, facetarget, GPU_texture_opengl_bindcode(tex), mip);
+ }
+ else {
+ glFramebufferTextureLayer(GL_FRAMEBUFFER, attachment, GPU_texture_opengl_bindcode(tex), mip, layer);
}
if (GPU_texture_depth(tex))
@@ -175,7 +200,18 @@ int GPU_framebuffer_texture_attach(GPUFrameBuffer *fb, GPUTexture *tex, int slot
GPU_texture_framebuffer_set(tex, fb, slot);
- return 1;
+ return true;
+}
+
+bool GPU_framebuffer_texture_layer_attach(GPUFrameBuffer *fb, GPUTexture *tex, int slot, int layer, int mip)
+{
+ return gpu_framebuffer_texture_layer_attach_ex(fb, tex, slot, layer, mip, false);
+}
+
+bool GPU_framebuffer_texture_cubeface_attach(GPUFrameBuffer *fb, GPUTexture *tex, int slot, int face, int mip)
+{
+ BLI_assert(GPU_texture_target(tex) == GL_TEXTURE_CUBE_MAP);
+ return gpu_framebuffer_texture_layer_attach_ex(fb, tex, slot, face, mip, true);
}
void GPU_framebuffer_texture_detach(GPUTexture *tex)
@@ -188,21 +224,25 @@ void GPU_framebuffer_texture_detach(GPUTexture *tex)
return;
if (GG.currentfb != fb->object) {
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb->object);
+ glBindFramebuffer(GL_FRAMEBUFFER, fb->object);
GG.currentfb = fb->object;
}
- if (GPU_texture_depth(tex)) {
+ if (GPU_texture_stencil(tex) && GPU_texture_depth(tex)) {
+ fb->depthtex = NULL;
+ attachment = GL_DEPTH_STENCIL_ATTACHMENT;
+ }
+ else if (GPU_texture_depth(tex)) {
fb->depthtex = NULL;
- attachment = GL_DEPTH_ATTACHMENT_EXT;
+ attachment = GL_DEPTH_ATTACHMENT;
}
else {
BLI_assert(fb->colortex[fb_attachment] == tex);
fb->colortex[fb_attachment] = NULL;
- attachment = GL_COLOR_ATTACHMENT0_EXT + fb_attachment;
+ attachment = GL_COLOR_ATTACHMENT0 + fb_attachment;
}
- glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, attachment, GPU_texture_target(tex), 0, 0);
+ glFramebufferTexture(GL_FRAMEBUFFER, attachment, 0, 0);
GPU_texture_framebuffer_set(tex, NULL, -1);
}
@@ -218,11 +258,11 @@ void GPU_texture_bind_as_framebuffer(GPUTexture *tex)
}
/* push attributes */
- glPushAttrib(GL_ENABLE_BIT | GL_VIEWPORT_BIT);
+ gpuPushAttrib(GPU_ENABLE_BIT | GPU_VIEWPORT_BIT);
glDisable(GL_SCISSOR_TEST);
/* bind framebuffer */
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb->object);
+ glBindFramebuffer(GL_FRAMEBUFFER, fb->object);
if (GPU_texture_depth(tex)) {
glDrawBuffer(GL_NONE);
@@ -230,86 +270,109 @@ void GPU_texture_bind_as_framebuffer(GPUTexture *tex)
}
else {
/* last bound prevails here, better allow explicit control here too */
- glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT + fb_attachment);
- glReadBuffer(GL_COLOR_ATTACHMENT0_EXT + fb_attachment);
+ glDrawBuffer(GL_COLOR_ATTACHMENT0 + fb_attachment);
+ glReadBuffer(GL_COLOR_ATTACHMENT0 + fb_attachment);
}
if (GPU_texture_target(tex) == GL_TEXTURE_2D_MULTISAMPLE) {
glEnable(GL_MULTISAMPLE);
}
- /* push matrices and set default viewport and matrix */
+ /* set default viewport */
glViewport(0, 0, GPU_texture_width(tex), GPU_texture_height(tex));
GG.currentfb = fb->object;
-
- glMatrixMode(GL_PROJECTION);
- glPushMatrix();
- glMatrixMode(GL_MODELVIEW);
- glPushMatrix();
}
void GPU_framebuffer_slots_bind(GPUFrameBuffer *fb, int slot)
{
int numslots = 0, i;
- GLenum attachments[4];
+ GLenum attachments[GPU_FB_MAX_SLOTS];
if (!fb->colortex[slot]) {
fprintf(stderr, "Error, framebuffer slot empty!\n");
return;
}
- for (i = 0; i < 4; i++) {
+ for (i = 0; i < GPU_FB_MAX_SLOTS; i++) {
if (fb->colortex[i]) {
- attachments[numslots] = GL_COLOR_ATTACHMENT0_EXT + i;
+ attachments[numslots] = GL_COLOR_ATTACHMENT0 + i;
numslots++;
}
}
/* push attributes */
- glPushAttrib(GL_ENABLE_BIT | GL_VIEWPORT_BIT);
+ gpuPushAttrib(GPU_ENABLE_BIT | GPU_VIEWPORT_BIT);
glDisable(GL_SCISSOR_TEST);
/* bind framebuffer */
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb->object);
+ glBindFramebuffer(GL_FRAMEBUFFER, fb->object);
/* last bound prevails here, better allow explicit control here too */
glDrawBuffers(numslots, attachments);
- glReadBuffer(GL_COLOR_ATTACHMENT0_EXT + slot);
+ glReadBuffer(GL_COLOR_ATTACHMENT0 + slot);
- /* push matrices and set default viewport and matrix */
+ /* set default viewport */
glViewport(0, 0, GPU_texture_width(fb->colortex[slot]), GPU_texture_height(fb->colortex[slot]));
GG.currentfb = fb->object;
-
- glMatrixMode(GL_PROJECTION);
- glPushMatrix();
- glMatrixMode(GL_MODELVIEW);
- glPushMatrix();
}
+void GPU_framebuffer_bind(GPUFrameBuffer *fb)
+{
+ int numslots = 0, i;
+ GLenum attachments[GPU_FB_MAX_SLOTS];
+ GLenum readattachement = 0;
+ GPUTexture *tex;
+
+ for (i = 0; i < GPU_FB_MAX_SLOTS; i++) {
+ if (fb->colortex[i]) {
+ attachments[numslots] = GL_COLOR_ATTACHMENT0 + i;
+ tex = fb->colortex[i];
+
+ if (!readattachement)
+ readattachement = GL_COLOR_ATTACHMENT0 + i;
+
+ numslots++;
+ }
+ }
+
+ /* bind framebuffer */
+ glBindFramebuffer(GL_FRAMEBUFFER, fb->object);
+
+ if (numslots == 0) {
+ glDrawBuffer(GL_NONE);
+ glReadBuffer(GL_NONE);
+ tex = fb->depthtex;
+ }
+ else {
+ /* last bound prevails here, better allow explicit control here too */
+ glDrawBuffers(numslots, attachments);
+ glReadBuffer(readattachement);
+ }
+
+ if (GPU_texture_target(tex) == GL_TEXTURE_2D_MULTISAMPLE) {
+ glEnable(GL_MULTISAMPLE);
+ }
+
+ glViewport(0, 0, GPU_texture_width(tex), GPU_texture_height(tex));
+ GG.currentfb = fb->object;
+}
void GPU_framebuffer_texture_unbind(GPUFrameBuffer *UNUSED(fb), GPUTexture *UNUSED(tex))
{
- /* restore matrix */
- glMatrixMode(GL_PROJECTION);
- glPopMatrix();
- glMatrixMode(GL_MODELVIEW);
- glPopMatrix();
-
- /* restore attributes */
- glPopAttrib();
+ /* Restore attributes. */
+ gpuPopAttrib();
}
void GPU_framebuffer_bind_no_save(GPUFrameBuffer *fb, int slot)
{
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb->object);
+ glBindFramebuffer(GL_FRAMEBUFFER, fb->object);
/* last bound prevails here, better allow explicit control here too */
- glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT + slot);
- glReadBuffer(GL_COLOR_ATTACHMENT0_EXT + slot);
+ glDrawBuffer(GL_COLOR_ATTACHMENT0 + slot);
+ glReadBuffer(GL_COLOR_ATTACHMENT0 + slot);
/* push matrices and set default viewport and matrix */
glViewport(0, 0, GPU_texture_width(fb->colortex[slot]), GPU_texture_height(fb->colortex[slot]));
GG.currentfb = fb->object;
- GG.currentfb = fb->object;
}
bool GPU_framebuffer_bound(GPUFrameBuffer *fb)
@@ -319,22 +382,17 @@ bool GPU_framebuffer_bound(GPUFrameBuffer *fb)
bool GPU_framebuffer_check_valid(GPUFrameBuffer *fb, char err_out[256])
{
- GLenum status;
-
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb->object);
+ glBindFramebuffer(GL_FRAMEBUFFER, fb->object);
GG.currentfb = fb->object;
-
- /* Clean glError buffer. */
- while (glGetError() != GL_NO_ERROR) {}
-
- status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
-
- if (status != GL_FRAMEBUFFER_COMPLETE_EXT) {
+
+ GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
+
+ if (status != GL_FRAMEBUFFER_COMPLETE) {
GPU_framebuffer_restore();
gpu_print_framebuffer_error(status, err_out);
return false;
}
-
+
return true;
}
@@ -351,10 +409,10 @@ void GPU_framebuffer_free(GPUFrameBuffer *fb)
}
if (fb->object) {
- glDeleteFramebuffersEXT(1, &fb->object);
+ glDeleteFramebuffers(1, &fb->object);
if (GG.currentfb == fb->object) {
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
+ glBindFramebuffer(GL_FRAMEBUFFER, 0);
GG.currentfb = 0;
}
}
@@ -365,7 +423,7 @@ void GPU_framebuffer_free(GPUFrameBuffer *fb)
void GPU_framebuffer_restore(void)
{
if (GG.currentfb != 0) {
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
+ glBindFramebuffer(GL_FRAMEBUFFER, 0);
GG.currentfb = 0;
}
}
@@ -374,73 +432,205 @@ void GPU_framebuffer_blur(
GPUFrameBuffer *fb, GPUTexture *tex,
GPUFrameBuffer *blurfb, GPUTexture *blurtex)
{
+ const float fullscreencos[4][2] = {{-1.0f, -1.0f}, {1.0f, -1.0f}, {-1.0f, 1.0f}, {1.0f, 1.0f}};
+ const float fullscreenuvs[4][2] = {{0.0f, 0.0f}, {1.0f, 0.0f}, {0.0f, 1.0f}, {1.0f, 1.0f}};
+
+ static Gwn_VertFormat format = {0};
+ static Gwn_VertBuf vbo = {{0}};
+ static Gwn_Batch batch = {{0}};
+
const float scaleh[2] = {1.0f / GPU_texture_width(blurtex), 0.0f};
const float scalev[2] = {0.0f, 1.0f / GPU_texture_height(tex)};
GPUShader *blur_shader = GPU_shader_get_builtin_shader(GPU_SHADER_SEP_GAUSSIAN_BLUR);
- int scale_uniform, texture_source_uniform;
if (!blur_shader)
return;
- scale_uniform = GPU_shader_get_uniform(blur_shader, "ScaleU");
- texture_source_uniform = GPU_shader_get_uniform(blur_shader, "textureSource");
+ /* Preparing to draw quad */
+ if (format.attrib_ct == 0) {
+ unsigned int i = 0;
+ /* Vertex format */
+ unsigned int pos = GWN_vertformat_attr_add(&format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int uvs = GWN_vertformat_attr_add(&format, "uvs", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ /* Vertices */
+ GWN_vertbuf_init_with_format(&vbo, &format);
+ GWN_vertbuf_data_alloc(&vbo, 36);
+
+ for (int j = 0; j < 3; ++j) {
+ GWN_vertbuf_attr_set(&vbo, uvs, i, fullscreenuvs[j]);
+ GWN_vertbuf_attr_set(&vbo, pos, i++, fullscreencos[j]);
+ }
+ for (int j = 1; j < 4; ++j) {
+ GWN_vertbuf_attr_set(&vbo, uvs, i, fullscreenuvs[j]);
+ GWN_vertbuf_attr_set(&vbo, pos, i++, fullscreencos[j]);
+ }
+
+ GWN_batch_init(&batch, GL_TRIANGLES, &vbo, NULL);
+ }
+ glDisable(GL_DEPTH_TEST);
+
/* Blurring horizontally */
-
/* We do the bind ourselves rather than using GPU_framebuffer_texture_bind() to avoid
* pushing unnecessary matrices onto the OpenGL stack. */
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, blurfb->object);
- glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
+ glBindFramebuffer(GL_FRAMEBUFFER, blurfb->object);
+ glDrawBuffer(GL_COLOR_ATTACHMENT0);
/* avoid warnings from texture binding */
GG.currentfb = blurfb->object;
- GPU_shader_bind(blur_shader);
- GPU_shader_uniform_vector(blur_shader, scale_uniform, 2, 1, scaleh);
- GPU_shader_uniform_texture(blur_shader, texture_source_uniform, tex);
glViewport(0, 0, GPU_texture_width(blurtex), GPU_texture_height(blurtex));
- /* Preparing to draw quad */
- glMatrixMode(GL_TEXTURE);
- glLoadIdentity();
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
-
- glDisable(GL_DEPTH_TEST);
-
GPU_texture_bind(tex, 0);
- /* Drawing quad */
- glBegin(GL_QUADS);
- glTexCoord2d(0, 0); glVertex2f(1, 1);
- glTexCoord2d(1, 0); glVertex2f(-1, 1);
- glTexCoord2d(1, 1); glVertex2f(-1, -1);
- glTexCoord2d(0, 1); glVertex2f(1, -1);
- glEnd();
+ GWN_batch_program_set_builtin(&batch, GPU_SHADER_SEP_GAUSSIAN_BLUR);
+ GWN_batch_uniform_2f(&batch, "ScaleU", scaleh[0], scaleh[1]);
+ GWN_batch_uniform_1i(&batch, "textureSource", GL_TEXTURE0);
+ GWN_batch_draw(&batch);
/* Blurring vertically */
-
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb->object);
- glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
+ glBindFramebuffer(GL_FRAMEBUFFER, fb->object);
+ glDrawBuffer(GL_COLOR_ATTACHMENT0);
GG.currentfb = fb->object;
glViewport(0, 0, GPU_texture_width(tex), GPU_texture_height(tex));
- GPU_shader_uniform_vector(blur_shader, scale_uniform, 2, 1, scalev);
- GPU_shader_uniform_texture(blur_shader, texture_source_uniform, blurtex);
+
GPU_texture_bind(blurtex, 0);
- glBegin(GL_QUADS);
- glTexCoord2d(0, 0); glVertex2f(1, 1);
- glTexCoord2d(1, 0); glVertex2f(-1, 1);
- glTexCoord2d(1, 1); glVertex2f(-1, -1);
- glTexCoord2d(0, 1); glVertex2f(1, -1);
- glEnd();
+ /* Hack to make the following uniform stick */
+ GWN_batch_program_set_builtin(&batch, GPU_SHADER_SEP_GAUSSIAN_BLUR);
+ GWN_batch_uniform_2f(&batch, "ScaleU", scalev[0], scalev[1]);
+ GWN_batch_uniform_1i(&batch, "textureSource", GL_TEXTURE0);
+ GWN_batch_draw(&batch);
+}
- GPU_shader_unbind();
+void GPU_framebuffer_blit(
+ GPUFrameBuffer *fb_read, int read_slot, GPUFrameBuffer *fb_write,
+ int write_slot, bool use_depth, bool use_stencil)
+{
+ GPUTexture *read_tex = (use_depth || use_stencil) ? fb_read->depthtex : fb_read->colortex[read_slot];
+ GPUTexture *write_tex = (use_depth || use_stencil) ? fb_write->depthtex : fb_write->colortex[write_slot];
+ int read_attach = (use_depth) ? GL_DEPTH_ATTACHMENT :
+ (use_stencil) ? GL_DEPTH_STENCIL_ATTACHMENT :
+ GL_COLOR_ATTACHMENT0 + GPU_texture_framebuffer_attachment(read_tex);
+ int write_attach = (use_depth) ? GL_DEPTH_ATTACHMENT :
+ (use_stencil) ? GL_DEPTH_STENCIL_ATTACHMENT :
+ GL_COLOR_ATTACHMENT0 + GPU_texture_framebuffer_attachment(write_tex);
+ int read_bind = GPU_texture_opengl_bindcode(read_tex);
+ int write_bind = GPU_texture_opengl_bindcode(write_tex);
+ const int read_w = GPU_texture_width(read_tex);
+ const int read_h = GPU_texture_height(read_tex);
+ const int write_w = GPU_texture_width(write_tex);
+ const int write_h = GPU_texture_height(write_tex);
+
+
+ /* Never both! */
+ BLI_assert(!(use_depth && use_stencil));
+
+ if (use_depth) {
+ BLI_assert(GPU_texture_depth(read_tex) && GPU_texture_depth(write_tex));
+ BLI_assert(GPU_texture_format(read_tex) == GPU_texture_format(write_tex));
+ }
+ else if (use_stencil) {
+ BLI_assert(GPU_texture_stencil(read_tex) && GPU_texture_stencil(write_tex));
+ BLI_assert(GPU_texture_format(read_tex) == GPU_texture_format(write_tex));
+ }
+
+ /* read from multi-sample buffer */
+ glBindFramebuffer(GL_READ_FRAMEBUFFER, fb_read->object);
+ glFramebufferTexture2D(
+ GL_READ_FRAMEBUFFER, read_attach,
+ GPU_texture_target(read_tex), read_bind, 0);
+ BLI_assert(glCheckFramebufferStatus(GL_READ_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE);
+
+ /* write into new single-sample buffer */
+ glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fb_write->object);
+ glFramebufferTexture2D(
+ GL_DRAW_FRAMEBUFFER, write_attach,
+ GPU_texture_target(write_tex), write_bind, 0);
+ BLI_assert(glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE);
+
+ glDrawBuffer((use_depth || use_stencil) ? GL_COLOR_ATTACHMENT0 : read_attach);
+ glBlitFramebuffer(0, 0, read_w, read_h, 0, 0, write_w, write_h,
+ (use_depth) ? GL_DEPTH_BUFFER_BIT :
+ (use_stencil) ? GL_STENCIL_BUFFER_BIT :
+ GL_COLOR_BUFFER_BIT, GL_NEAREST);
+
+ /* Restore previous framebuffer */
+ glBindFramebuffer(GL_FRAMEBUFFER, GG.currentfb);
+ glDrawBuffer(GL_COLOR_ATTACHMENT0);
+}
+
+/**
+ * Use this if you need to custom downsample your texture and use the previous mip level as input.
+ * This function only takes care of the correct texture handling. It execute the callback for each texture level.
+ **/
+void GPU_framebuffer_recursive_downsample(
+ GPUFrameBuffer *fb, GPUTexture *tex, int num_iter, void (*callback)(void *userData, int level), void *userData)
+{
+ int i;
+ int current_dim[2] = {GPU_texture_width(tex), GPU_texture_height(tex)};
+ GLenum attachment;
+
+ /* Manually setup framebuffer to not use GPU_texture_framebuffer_set() */
+ glBindFramebuffer(GL_FRAMEBUFFER, fb->object);
+ GG.currentfb = fb->object;
+
+ if (GPU_texture_stencil(tex) && GPU_texture_depth(tex))
+ attachment = GL_DEPTH_STENCIL_ATTACHMENT;
+ else if (GPU_texture_depth(tex))
+ attachment = GL_DEPTH_ATTACHMENT;
+ else
+ attachment = GL_COLOR_ATTACHMENT0;
+
+ /* last bound prevails here, better allow explicit control here too */
+ if (GPU_texture_depth(tex)) {
+ glDrawBuffer(GL_NONE);
+ glReadBuffer(GL_NONE);
+ }
+ else {
+ glDrawBuffer(GL_COLOR_ATTACHMENT0);
+ glReadBuffer(GL_COLOR_ATTACHMENT0);
+ }
+
+ for (i = 1; i < num_iter + 1; i++) {
+
+ /* calculate next viewport size */
+ current_dim[0] /= 2;
+ current_dim[1] /= 2;
+
+ if (current_dim[0] <= 2 && current_dim[1] <= 2) {
+ /* Cannot reduce further. */
+ break;
+ }
+
+ /* ensure that the viewport size is always at least 1x1 */
+ CLAMP_MIN(current_dim[0], 1);
+ CLAMP_MIN(current_dim[1], 1);
+
+ glViewport(0, 0, current_dim[0], current_dim[1]);
+
+ /* bind next level for rendering but first restrict fetches only to previous level */
+ GPU_texture_bind(tex, 0);
+ glTexParameteri(GPU_texture_target(tex), GL_TEXTURE_BASE_LEVEL, i - 1);
+ glTexParameteri(GPU_texture_target(tex), GL_TEXTURE_MAX_LEVEL, i - 1);
+ GPU_texture_unbind(tex);
+
+ glFramebufferTexture(GL_FRAMEBUFFER, attachment, GPU_texture_opengl_bindcode(tex), i);
+
+ callback(userData, i);
+ }
+
+ glFramebufferTexture(GL_FRAMEBUFFER, attachment, 0, 0);
+
+ /* reset mipmap level range for the depth image */
+ GPU_texture_bind(tex, 0);
+ glTexParameteri(GPU_texture_target(tex), GL_TEXTURE_BASE_LEVEL, 0);
+ glTexParameteri(GPU_texture_target(tex), GL_TEXTURE_MAX_LEVEL, i - 1);
+ GPU_texture_unbind(tex);
}
/* GPUOffScreen */
@@ -451,7 +641,7 @@ struct GPUOffScreen {
GPUTexture *depth;
};
-GPUOffScreen *GPU_offscreen_create(int width, int height, int samples, char err_out[256])
+GPUOffScreen *GPU_offscreen_create(int width, int height, int samples, bool high_bitdepth, char err_out[256])
{
GPUOffScreen *ofs;
@@ -464,12 +654,7 @@ GPUOffScreen *GPU_offscreen_create(int width, int height, int samples, char err_
}
if (samples) {
- if (!GLEW_EXT_framebuffer_multisample ||
- !GLEW_ARB_texture_multisample ||
- /* Only needed for GPU_offscreen_read_pixels.
- * We could add an arg if we intend to use multi-sample
- * offscreen buffers w/o reading their pixels */
- !GLEW_EXT_framebuffer_blit ||
+ if (!GLEW_ARB_texture_multisample ||
/* This is required when blitting from a multi-sampled buffers,
* even though we're not scaling. */
!GLEW_EXT_framebuffer_multisample_blit_scaled)
@@ -478,24 +663,29 @@ GPUOffScreen *GPU_offscreen_create(int width, int height, int samples, char err_
}
}
- ofs->depth = GPU_texture_create_depth_multisample(width, height, samples, err_out);
+ ofs->depth = GPU_texture_create_depth_with_stencil_multisample(width, height, samples, err_out);
if (!ofs->depth) {
GPU_offscreen_free(ofs);
return NULL;
}
- if (!GPU_framebuffer_texture_attach(ofs->fb, ofs->depth, 0, err_out)) {
+ if (!GPU_framebuffer_texture_attach(ofs->fb, ofs->depth, 0, 0)) {
GPU_offscreen_free(ofs);
return NULL;
}
- ofs->color = GPU_texture_create_2D_multisample(width, height, NULL, GPU_HDR_NONE, samples, err_out);
+ if (high_bitdepth) {
+ ofs->color = GPU_texture_create_2D_custom_multisample(width, height, 4, GPU_RGBA16F, NULL, samples, err_out);
+ }
+ else {
+ ofs->color = GPU_texture_create_2D_multisample(width, height, NULL, samples, err_out);
+ }
if (!ofs->color) {
GPU_offscreen_free(ofs);
return NULL;
}
- if (!GPU_framebuffer_texture_attach(ofs->fb, ofs->color, 0, err_out)) {
+ if (!GPU_framebuffer_texture_attach(ofs->fb, ofs->color, 0, 0)) {
GPU_offscreen_free(ofs);
return NULL;
}
@@ -569,37 +759,37 @@ void GPU_offscreen_read_pixels(GPUOffScreen *ofs, int type, void *pixels)
#ifdef USE_FBO_CTX_SWITCH
/* read from multi-sample buffer */
- glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, ofs->color->fb->object);
- glFramebufferTexture2DEXT(
- GL_READ_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT + ofs->color->fb_attachment,
+ glBindFramebuffer(GL_READ_FRAMEBUFFER, ofs->color->fb->object);
+ glFramebufferTexture2D(
+ GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + ofs->color->fb_attachment,
GL_TEXTURE_2D_MULTISAMPLE, ofs->color->bindcode, 0);
- status = glCheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER_EXT);
- if (status != GL_FRAMEBUFFER_COMPLETE_EXT) {
+ status = glCheckFramebufferStatus(GL_READ_FRAMEBUFFER);
+ if (status != GL_FRAMEBUFFER_COMPLETE) {
goto finally;
}
#endif
/* write into new single-sample buffer */
- glGenFramebuffersEXT(1, &fbo_blit);
- glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, fbo_blit);
- glFramebufferTexture2DEXT(
- GL_DRAW_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
+ glGenFramebuffers(1, &fbo_blit);
+ glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo_blit);
+ glFramebufferTexture2D(
+ GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D, tex_blit, 0);
- status = glCheckFramebufferStatusEXT(GL_DRAW_FRAMEBUFFER_EXT);
- if (status != GL_FRAMEBUFFER_COMPLETE_EXT) {
+ status = glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER);
+ if (status != GL_FRAMEBUFFER_COMPLETE) {
goto finally;
}
/* perform the copy */
- glBlitFramebufferEXT(0, 0, w, h, 0, 0, w, h, GL_COLOR_BUFFER_BIT, GL_NEAREST);
+ glBlitFramebuffer(0, 0, w, h, 0, 0, w, h, GL_COLOR_BUFFER_BIT, GL_NEAREST);
/* read the results */
- glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, fbo_blit);
+ glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo_blit);
glReadPixels(0, 0, w, h, GL_RGBA, type, pixels);
#ifdef USE_FBO_CTX_SWITCH
/* restore the original frame-bufer */
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, ofs->color->fb->object);
+ glBindFramebuffer(GL_FRAMEBUFFER, ofs->color->fb->object);
#undef USE_FBO_CTX_SWITCH
#endif
@@ -610,10 +800,8 @@ finally:
glDeleteTextures(1, &tex_blit);
}
if (fbo_blit) {
- glDeleteFramebuffersEXT(1, &fbo_blit);
+ glDeleteFramebuffers(1, &fbo_blit);
}
-
- GPU_ASSERT_NO_GL_ERRORS("Read Multi-Sample Pixels");
}
else {
glReadPixels(0, 0, w, h, GL_RGBA, type, pixels);
@@ -635,3 +823,12 @@ int GPU_offscreen_color_texture(const GPUOffScreen *ofs)
return GPU_texture_opengl_bindcode(ofs->color);
}
+/* only to be used by viewport code! */
+void GPU_offscreen_viewport_data_get(
+ GPUOffScreen *ofs,
+ GPUFrameBuffer **r_fb, GPUTexture **r_color, GPUTexture **r_depth)
+{
+ *r_fb = ofs->fb;
+ *r_color = ofs->color;
+ *r_depth = ofs->depth;
+}
diff --git a/source/blender/gpu/intern/gpu_immediate.c b/source/blender/gpu/intern/gpu_immediate.c
new file mode 100644
index 00000000000..5f22b7f9279
--- /dev/null
+++ b/source/blender/gpu/intern/gpu_immediate.c
@@ -0,0 +1,88 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2016 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Mike Erwin
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "GPU_immediate.h"
+#include "GPU_matrix.h"
+#include "UI_resources.h"
+#include "BLI_utildefines.h"
+
+#include "gpu_shader_private.h"
+
+void immBindBuiltinProgram(GPUBuiltinShader shader_id)
+{
+ GPUShader *shader = GPU_shader_get_builtin_shader(shader_id);
+ immBindProgram(shader->program, shader->interface);
+}
+
+void immUniformThemeColor(int color_id)
+{
+ float color[4];
+ UI_GetThemeColor4fv(color_id, color);
+ immUniformColor4fv(color);
+}
+
+void immUniformThemeColor3(int color_id)
+{
+ float color[3];
+ UI_GetThemeColor3fv(color_id, color);
+ immUniformColor3fv(color);
+}
+
+void immUniformThemeColorShade(int color_id, int offset)
+{
+ float color[4];
+ UI_GetThemeColorShade4fv(color_id, offset, color);
+ immUniformColor4fv(color);
+}
+
+void immUniformThemeColorShadeAlpha(int color_id, int color_offset, int alpha_offset)
+{
+ float color[4];
+ UI_GetThemeColorShadeAlpha4fv(color_id, color_offset, alpha_offset, color);
+ immUniformColor4fv(color);
+}
+
+void immUniformThemeColorBlendShade(int color_id1, int color_id2, float fac, int offset)
+{
+ float color[4];
+ UI_GetThemeColorBlendShade4fv(color_id1, color_id2, fac, offset, color);
+ immUniformColor4fv(color);
+}
+
+void immUniformThemeColorBlend(int color_id1, int color_id2, float fac)
+{
+ uint8_t color[3];
+ UI_GetThemeColorBlend3ubv(color_id1, color_id2, fac, color);
+ immUniformColor3ubv(color);
+}
+
+void immThemeColorShadeAlpha(int colorid, int coloffset, int alphaoffset)
+{
+ unsigned char col[4];
+ UI_GetThemeColorShadeAlpha4ubv(colorid, coloffset, alphaoffset, col);
+ immUniformColor4ub(col[0], col[1], col[2], col[3]);
+}
diff --git a/source/blender/gpu/intern/gpu_immediate_util.c b/source/blender/gpu/intern/gpu_immediate_util.c
new file mode 100644
index 00000000000..bad878ef4bf
--- /dev/null
+++ b/source/blender/gpu/intern/gpu_immediate_util.c
@@ -0,0 +1,424 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file source/blender/gpu/intern/gpu_immediate_util.c
+ * \ingroup gpu
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include "BLI_utildefines.h"
+#include "BLI_math.h"
+
+#include "GPU_basic_shader.h"
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+#include "GPU_matrix.h"
+
+static const float cube_coords[8][3] = {
+ {-1, -1, -1},
+ {-1, -1, +1},
+ {-1, +1, -1},
+ {-1, +1, +1},
+ {+1, -1, -1},
+ {+1, -1, +1},
+ {+1, +1, -1},
+ {+1, +1, +1},
+};
+static const int cube_quad_index[6][4] = {
+ {0, 1, 3, 2},
+ {0, 2, 6, 4},
+ {0, 4, 5, 1},
+ {1, 5, 7, 3},
+ {2, 3, 7, 6},
+ {4, 6, 7, 5},
+};
+static const int cube_line_index[12][2] = {
+ {0, 1},
+ {0, 2},
+ {0, 4},
+ {1, 3},
+ {1, 5},
+ {2, 3},
+ {2, 6},
+ {3, 7},
+ {4, 5},
+ {4, 6},
+ {5, 7},
+ {6, 7},
+};
+
+/**
+ * Pack color into 3 bytes
+ *
+ * This define converts a numerical value to the equivalent 24-bit
+ * color, while not being endian-sensitive. On little-endians, this
+ * is the same as doing a 'naive' indexing, on big-endian, it is not!
+ *
+ * \note BGR format (i.e. 0xBBGGRR)...
+ *
+ * \param x color.
+ */
+void imm_cpack(unsigned int x)
+{
+ immUniformColor3ub(((x) & 0xFF),
+ (((x) >> 8) & 0xFF),
+ (((x) >> 16) & 0xFF));
+}
+
+static void imm_draw_circle(
+ Gwn_PrimType prim_type, const uint shdr_pos, float x, float y, float rad_x, float rad_y, int nsegments)
+{
+ immBegin(prim_type, nsegments);
+ for (int i = 0; i < nsegments; ++i) {
+ const float angle = (float)(2 * M_PI) * ((float)i / (float)nsegments);
+ immVertex2f(shdr_pos, x + (rad_x * cosf(angle)), y + (rad_y * sinf(angle)));
+ }
+ immEnd();
+}
+
+/**
+ * Draw a circle outline with the given \a radius.
+ * The circle is centered at \a x, \a y and drawn in the XY plane.
+ *
+ * \param shdr_pos The vertex attribute number for position.
+ * \param x Horizontal center.
+ * \param y Vertical center.
+ * \param radius The circle's radius.
+ * \param nsegments The number of segments to use in drawing (more = smoother).
+ */
+void imm_draw_circle_wire_2d(uint shdr_pos, float x, float y, float rad, int nsegments)
+{
+ imm_draw_circle(GWN_PRIM_LINE_LOOP, shdr_pos, x, y, rad, rad, nsegments);
+}
+
+/**
+ * Draw a filled circle with the given \a radius.
+ * The circle is centered at \a x, \a y and drawn in the XY plane.
+ *
+ * \param shdr_pos The vertex attribute number for position.
+ * \param x Horizontal center.
+ * \param y Vertical center.
+ * \param radius The circle's radius.
+ * \param nsegments The number of segments to use in drawing (more = smoother).
+ */
+void imm_draw_circle_fill_2d(uint shdr_pos, float x, float y, float rad, int nsegments)
+{
+ imm_draw_circle(GWN_PRIM_TRI_FAN, shdr_pos, x, y, rad, rad, nsegments);
+}
+
+void imm_draw_circle_wire_aspect_2d(uint shdr_pos, float x, float y, float rad_x, float rad_y, int nsegments)
+{
+ imm_draw_circle(GWN_PRIM_LINE_LOOP, shdr_pos, x, y, rad_x, rad_y, nsegments);
+}
+void imm_draw_circle_fill_aspect_2d(uint shdr_pos, float x, float y, float rad_x, float rad_y, int nsegments)
+{
+ imm_draw_circle(GWN_PRIM_TRI_FAN, shdr_pos, x, y, rad_x, rad_y, nsegments);
+}
+
+/**
+ * \note We could have `imm_draw_lined_disk_partial` but currently there is no need.
+ */
+static void imm_draw_disk_partial(
+ Gwn_PrimType prim_type, unsigned pos, float x, float y,
+ float rad_inner, float rad_outer, int nsegments, float start, float sweep)
+{
+ /* shift & reverse angle, increase 'nsegments' to match gluPartialDisk */
+ const float angle_start = -(DEG2RADF(start)) + (float)(M_PI / 2);
+ const float angle_end = -(DEG2RADF(sweep) - angle_start);
+ nsegments += 1;
+ immBegin(prim_type, nsegments * 2);
+ for (int i = 0; i < nsegments; ++i) {
+ const float angle = interpf(angle_start, angle_end, ((float)i / (float)(nsegments - 1)));
+ const float angle_sin = sinf(angle);
+ const float angle_cos = cosf(angle);
+ immVertex2f(pos, x + rad_inner * angle_cos, y + rad_inner * angle_sin);
+ immVertex2f(pos, x + rad_outer * angle_cos, y + rad_outer * angle_sin);
+ }
+ immEnd();
+}
+
+/**
+ * Draw a filled arc with the given inner and outer radius.
+ * The circle is centered at \a x, \a y and drawn in the XY plane.
+ *
+ * \note Arguments are `gluPartialDisk` compatible.
+ *
+ * \param pos: The vertex attribute number for position.
+ * \param x: Horizontal center.
+ * \param y: Vertical center.
+ * \param radius_inner: The inner circle's radius.
+ * \param radius_outer: The outer circle's radius (can be zero).
+ * \param nsegments: The number of segments to use in drawing (more = smoother).
+ * \param start: Specifies the starting angle, in degrees, of the disk portion.
+ * \param sweep: Specifies the sweep angle, in degrees, of the disk portion.
+ */
+void imm_draw_disk_partial_fill_2d(
+ unsigned pos, float x, float y,
+ float rad_inner, float rad_outer, int nsegments, float start, float sweep)
+{
+ imm_draw_disk_partial(GWN_PRIM_TRI_STRIP, pos, x, y, rad_inner, rad_outer, nsegments, start, sweep);
+}
+
+static void imm_draw_circle_3D(
+ Gwn_PrimType prim_type, unsigned pos, float x, float y,
+ float rad, int nsegments)
+{
+ immBegin(prim_type, nsegments);
+ for (int i = 0; i < nsegments; ++i) {
+ float angle = (float)(2 * M_PI) * ((float)i / (float)nsegments);
+ immVertex3f(pos, x + rad * cosf(angle), y + rad * sinf(angle), 0.0f);
+ }
+ immEnd();
+}
+
+void imm_draw_circle_wire_3d(unsigned pos, float x, float y, float rad, int nsegments)
+{
+ imm_draw_circle_3D(GWN_PRIM_LINE_LOOP, pos, x, y, rad, nsegments);
+}
+
+void imm_draw_circle_fill_3d(unsigned pos, float x, float y, float rad, int nsegments)
+{
+ imm_draw_circle_3D(GWN_PRIM_TRI_FAN, pos, x, y, rad, nsegments);
+}
+
+/**
+* Draw a lined box.
+*
+* \param pos The vertex attribute number for position.
+* \param x1 left.
+* \param y1 bottom.
+* \param x2 right.
+* \param y2 top.
+*/
+void imm_draw_box_wire_2d(unsigned pos, float x1, float y1, float x2, float y2)
+{
+ immBegin(GWN_PRIM_LINE_LOOP, 4);
+ immVertex2f(pos, x1, y1);
+ immVertex2f(pos, x1, y2);
+ immVertex2f(pos, x2, y2);
+ immVertex2f(pos, x2, y1);
+ immEnd();
+}
+
+void imm_draw_box_wire_3d(unsigned pos, float x1, float y1, float x2, float y2)
+{
+ /* use this version when Gwn_VertFormat has a vec3 position */
+ immBegin(GWN_PRIM_LINE_LOOP, 4);
+ immVertex3f(pos, x1, y1, 0.0f);
+ immVertex3f(pos, x1, y2, 0.0f);
+ immVertex3f(pos, x2, y2, 0.0f);
+ immVertex3f(pos, x2, y1, 0.0f);
+ immEnd();
+}
+
+/**
+ * Draw a standard checkerboard to indicate transparent backgrounds.
+ */
+void imm_draw_box_checker_2d(float x1, float y1, float x2, float y2)
+{
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_CHECKER);
+
+ immUniform4f("color1", 0.15f, 0.15f, 0.15f, 1.0f);
+ immUniform4f("color2", 0.2f, 0.2f, 0.2f, 1.0f);
+ immUniform1i("size", 8);
+
+ immRectf(pos, x1, y1, x2, y2);
+
+ immUnbindProgram();
+}
+
+void imm_draw_cube_fill_3d(uint pos, const float co[3], const float aspect[3])
+{
+ float coords[ARRAY_SIZE(cube_coords)][3];
+
+ for (int i = 0; i < ARRAY_SIZE(cube_coords); i++) {
+ madd_v3_v3v3v3(coords[i], co, cube_coords[i], aspect);
+ }
+
+ immBegin(GWN_PRIM_TRIS, ARRAY_SIZE(cube_quad_index) * 3 * 2);
+ for (int i = 0; i < ARRAY_SIZE(cube_quad_index); i++) {
+ immVertex3fv(pos, coords[cube_quad_index[i][0]]);
+ immVertex3fv(pos, coords[cube_quad_index[i][1]]);
+ immVertex3fv(pos, coords[cube_quad_index[i][2]]);
+
+ immVertex3fv(pos, coords[cube_quad_index[i][0]]);
+ immVertex3fv(pos, coords[cube_quad_index[i][2]]);
+ immVertex3fv(pos, coords[cube_quad_index[i][3]]);
+ }
+ immEnd();
+}
+
+void imm_draw_cube_wire_3d(uint pos, const float co[3], const float aspect[3])
+{
+ float coords[ARRAY_SIZE(cube_coords)][3];
+
+ for (int i = 0; i < ARRAY_SIZE(cube_coords); i++) {
+ madd_v3_v3v3v3(coords[i], co, cube_coords[i], aspect);
+ }
+
+ immBegin(GWN_PRIM_LINES, ARRAY_SIZE(cube_line_index) * 2);
+ for (int i = 0; i < ARRAY_SIZE(cube_line_index); i++) {
+ immVertex3fv(pos, coords[cube_line_index[i][0]]);
+ immVertex3fv(pos, coords[cube_line_index[i][1]]);
+ }
+ immEnd();
+}
+
+/**
+* Draw a cylinder. Replacement for gluCylinder.
+* _warning_ : Slow, better use it only if you no other choices.
+*
+* \param pos The vertex attribute number for position.
+* \param nor The vertex attribute number for normal.
+* \param base Specifies the radius of the cylinder at z = 0.
+* \param top Specifies the radius of the cylinder at z = height.
+* \param height Specifies the height of the cylinder.
+* \param slices Specifies the number of subdivisions around the z axis.
+* \param stacks Specifies the number of subdivisions along the z axis.
+*/
+void imm_draw_cylinder_fill_normal_3d(
+ unsigned int pos, unsigned int nor, float base, float top, float height, int slices, int stacks)
+{
+ immBegin(GWN_PRIM_TRIS, 6 * slices * stacks);
+ for (int i = 0; i < slices; ++i) {
+ const float angle1 = (float)(2 * M_PI) * ((float)i / (float)slices);
+ const float angle2 = (float)(2 * M_PI) * ((float)(i + 1) / (float)slices);
+ const float cos1 = cosf(angle1);
+ const float sin1 = sinf(angle1);
+ const float cos2 = cosf(angle2);
+ const float sin2 = sinf(angle2);
+
+ for (int j = 0; j < stacks; ++j) {
+ float fac1 = (float)j / (float)stacks;
+ float fac2 = (float)(j + 1) / (float)stacks;
+ float r1 = base * (1.f - fac1) + top * fac1;
+ float r2 = base * (1.f - fac2) + top * fac2;
+ float h1 = height * ((float)j / (float)stacks);
+ float h2 = height * ((float)(j + 1) / (float)stacks);
+
+ float v1[3] = {r1 *cos2, r1 * sin2, h1};
+ float v2[3] = {r2 *cos2, r2 * sin2, h2};
+ float v3[3] = {r2 *cos1, r2 * sin1, h2};
+ float v4[3] = {r1 *cos1, r1 * sin1, h1};
+ float n1[3], n2[3];
+
+ /* calc normals */
+ sub_v3_v3v3(n1, v2, v1);
+ normalize_v3(n1);
+ n1[0] = cos1; n1[1] = sin1; n1[2] = 1 - n1[2];
+
+ sub_v3_v3v3(n2, v3, v4);
+ normalize_v3(n2);
+ n2[0] = cos2; n2[1] = sin2; n2[2] = 1 - n2[2];
+
+ /* first tri */
+ immAttrib3fv(nor, n2);
+ immVertex3fv(pos, v1);
+ immVertex3fv(pos, v2);
+ immAttrib3fv(nor, n1);
+ immVertex3fv(pos, v3);
+
+ /* second tri */
+ immVertex3fv(pos, v3);
+ immVertex3fv(pos, v4);
+ immAttrib3fv(nor, n2);
+ immVertex3fv(pos, v1);
+ }
+ }
+ immEnd();
+}
+
+void imm_draw_cylinder_wire_3d(unsigned int pos, float base, float top, float height, int slices, int stacks)
+{
+ immBegin(GWN_PRIM_LINES, 6 * slices * stacks);
+ for (int i = 0; i < slices; ++i) {
+ const float angle1 = (float)(2 * M_PI) * ((float)i / (float)slices);
+ const float angle2 = (float)(2 * M_PI) * ((float)(i + 1) / (float)slices);
+ const float cos1 = cosf(angle1);
+ const float sin1 = sinf(angle1);
+ const float cos2 = cosf(angle2);
+ const float sin2 = sinf(angle2);
+
+ for (int j = 0; j < stacks; ++j) {
+ float fac1 = (float)j / (float)stacks;
+ float fac2 = (float)(j + 1) / (float)stacks;
+ float r1 = base * (1.f - fac1) + top * fac1;
+ float r2 = base * (1.f - fac2) + top * fac2;
+ float h1 = height * ((float)j / (float)stacks);
+ float h2 = height * ((float)(j + 1) / (float)stacks);
+
+ float v1[3] = {r1 * cos2, r1 * sin2, h1};
+ float v2[3] = {r2 * cos2, r2 * sin2, h2};
+ float v3[3] = {r2 * cos1, r2 * sin1, h2};
+ float v4[3] = {r1 * cos1, r1 * sin1, h1};
+
+ immVertex3fv(pos, v1);
+ immVertex3fv(pos, v2);
+
+ immVertex3fv(pos, v2);
+ immVertex3fv(pos, v3);
+
+ immVertex3fv(pos, v1);
+ immVertex3fv(pos, v4);
+ }
+ }
+ immEnd();
+}
+
+void imm_draw_cylinder_fill_3d(unsigned int pos, float base, float top, float height, int slices, int stacks)
+{
+ immBegin(GWN_PRIM_TRIS, 6 * slices * stacks);
+ for (int i = 0; i < slices; ++i) {
+ const float angle1 = (float)(2 * M_PI) * ((float)i / (float)slices);
+ const float angle2 = (float)(2 * M_PI) * ((float)(i + 1) / (float)slices);
+ const float cos1 = cosf(angle1);
+ const float sin1 = sinf(angle1);
+ const float cos2 = cosf(angle2);
+ const float sin2 = sinf(angle2);
+
+ for (int j = 0; j < stacks; ++j) {
+ float fac1 = (float)j / (float)stacks;
+ float fac2 = (float)(j + 1) / (float)stacks;
+ float r1 = base * (1.f - fac1) + top * fac1;
+ float r2 = base * (1.f - fac2) + top * fac2;
+ float h1 = height * ((float)j / (float)stacks);
+ float h2 = height * ((float)(j + 1) / (float)stacks);
+
+ float v1[3] = {r1 * cos2, r1 * sin2, h1};
+ float v2[3] = {r2 * cos2, r2 * sin2, h2};
+ float v3[3] = {r2 * cos1, r2 * sin1, h2};
+ float v4[3] = {r1 * cos1, r1 * sin1, h1};
+
+ /* first tri */
+ immVertex3fv(pos, v1);
+ immVertex3fv(pos, v2);
+ immVertex3fv(pos, v3);
+
+ /* second tri */
+ immVertex3fv(pos, v3);
+ immVertex3fv(pos, v4);
+ immVertex3fv(pos, v1);
+ }
+ }
+ immEnd();
+}
diff --git a/source/blender/gpu/intern/gpu_init_exit.c b/source/blender/gpu/intern/gpu_init_exit.c
index c72c83b6b07..7a6b1ff6c70 100644
--- a/source/blender/gpu/intern/gpu_init_exit.c
+++ b/source/blender/gpu/intern/gpu_init_exit.c
@@ -31,7 +31,8 @@
#include "BLI_sys_types.h"
#include "GPU_init_exit.h" /* interface */
-
+#include "GPU_immediate.h"
+#include "GPU_batch.h"
#include "BKE_global.h"
#include "intern/gpu_codegen.h"
@@ -59,14 +60,22 @@ void GPU_init(void)
if (G.debug & G_DEBUG_GPU)
gpu_debug_init();
+ gpu_batch_init();
+
+ immInit();
}
void GPU_exit(void)
{
+ immDestroy();
+
+ gpu_batch_exit();
+
if (G.debug & G_DEBUG_GPU)
gpu_debug_exit();
+
gpu_codegen_exit();
gpu_extensions_exit(); /* must come last */
diff --git a/source/blender/gpu/intern/gpu_lamp.c b/source/blender/gpu/intern/gpu_lamp.c
new file mode 100644
index 00000000000..3c49c057b49
--- /dev/null
+++ b/source/blender/gpu/intern/gpu_lamp.c
@@ -0,0 +1,483 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2006 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Brecht Van Lommel, Clément Foucault.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/gpu/intern/gpu_lamp.c
+ * \ingroup gpu
+ *
+ * Manages Opengl lights.
+ */
+
+#include "MEM_guardedalloc.h"
+
+#include "DNA_lamp_types.h"
+#include "DNA_object_types.h"
+#include "DNA_scene_types.h"
+
+#include "BLI_listbase.h"
+#include "BLI_math.h"
+#include "BLI_utildefines.h"
+
+#include "BKE_group.h"
+
+#include "GPU_framebuffer.h"
+#include "GPU_glew.h"
+#include "GPU_lamp.h"
+#include "GPU_material.h"
+#include "GPU_shader.h"
+#include "GPU_texture.h"
+
+#include "gpu_lamp_private.h"
+
+bool GPU_lamp_visible(GPULamp *lamp, Material *ma)
+{
+ if (lamp->hide)
+ return false;
+ else if (ma && ma->group)
+ return BKE_group_object_exists(ma->group, lamp->ob);
+ else
+ return true;
+}
+
+static void gpu_lamp_calc_winmat(GPULamp *lamp)
+{
+ float temp, angle, pixsize, wsize;
+
+ if (lamp->type == LA_SUN) {
+ wsize = lamp->la->shadow_frustum_size;
+ orthographic_m4(lamp->winmat, -wsize, wsize, -wsize, wsize, lamp->d, lamp->clipend);
+ }
+ else if (lamp->type == LA_SPOT) {
+ angle = saacos(lamp->spotsi);
+ temp = 0.5f * lamp->size * cosf(angle) / sinf(angle);
+ pixsize = lamp->d / temp;
+ wsize = pixsize * 0.5f * lamp->size;
+ /* compute shadows according to X and Y scaling factors */
+ perspective_m4(
+ lamp->winmat,
+ -wsize * lamp->spotvec[0], wsize * lamp->spotvec[0],
+ -wsize * lamp->spotvec[1], wsize * lamp->spotvec[1],
+ lamp->d, lamp->clipend);
+ }
+}
+
+void GPU_lamp_update(GPULamp *lamp, int lay, int hide, float obmat[4][4])
+{
+ float mat[4][4];
+ float obmat_scale[3];
+
+ lamp->lay = lay;
+ lamp->hide = hide;
+
+ normalize_m4_m4_ex(mat, obmat, obmat_scale);
+
+ copy_v3_v3(lamp->vec, mat[2]);
+ copy_v3_v3(lamp->co, mat[3]);
+ copy_m4_m4(lamp->obmat, mat);
+ invert_m4_m4(lamp->imat, mat);
+
+ if (lamp->type == LA_SPOT) {
+ /* update spotlamp scale on X and Y axis */
+ lamp->spotvec[0] = obmat_scale[0] / obmat_scale[2];
+ lamp->spotvec[1] = obmat_scale[1] / obmat_scale[2];
+ }
+
+ if (GPU_lamp_has_shadow_buffer(lamp)) {
+ /* makeshadowbuf */
+ gpu_lamp_calc_winmat(lamp);
+ }
+}
+
+void GPU_lamp_update_colors(GPULamp *lamp, float r, float g, float b, float energy)
+{
+ lamp->energy = energy;
+ if (lamp->mode & LA_NEG) lamp->energy = -lamp->energy;
+
+ lamp->col[0] = r;
+ lamp->col[1] = g;
+ lamp->col[2] = b;
+}
+
+void GPU_lamp_update_distance(GPULamp *lamp, float distance, float att1, float att2,
+ float coeff_const, float coeff_lin, float coeff_quad)
+{
+ lamp->dist = distance;
+ lamp->att1 = att1;
+ lamp->att2 = att2;
+ lamp->coeff_const = coeff_const;
+ lamp->coeff_lin = coeff_lin;
+ lamp->coeff_quad = coeff_quad;
+}
+
+void GPU_lamp_update_spot(GPULamp *lamp, float spotsize, float spotblend)
+{
+ lamp->spotsi = cosf(spotsize * 0.5f);
+ lamp->spotbl = (1.0f - lamp->spotsi) * spotblend;
+}
+
+static void gpu_lamp_from_blender(Scene *scene, Object *ob, Object *par, Lamp *la, GPULamp *lamp)
+{
+ lamp->scene = scene;
+ lamp->ob = ob;
+ lamp->par = par;
+ lamp->la = la;
+
+ /* add_render_lamp */
+ lamp->mode = la->mode;
+ lamp->type = la->type;
+
+ lamp->energy = la->energy;
+ if (lamp->mode & LA_NEG) lamp->energy = -lamp->energy;
+
+ lamp->col[0] = la->r;
+ lamp->col[1] = la->g;
+ lamp->col[2] = la->b;
+
+ GPU_lamp_update(lamp, ob->lay, (ob->restrictflag & OB_RESTRICT_RENDER), ob->obmat);
+
+ lamp->spotsi = la->spotsize;
+ if (lamp->mode & LA_HALO)
+ if (lamp->spotsi > DEG2RADF(170.0f))
+ lamp->spotsi = DEG2RADF(170.0f);
+ lamp->spotsi = cosf(lamp->spotsi * 0.5f);
+ lamp->spotbl = (1.0f - lamp->spotsi) * la->spotblend;
+ lamp->k = la->k;
+
+ lamp->dist = la->dist;
+ lamp->falloff_type = la->falloff_type;
+ lamp->att1 = la->att1;
+ lamp->att2 = la->att2;
+ lamp->coeff_const = la->coeff_const;
+ lamp->coeff_lin = la->coeff_lin;
+ lamp->coeff_quad = la->coeff_quad;
+ lamp->curfalloff = la->curfalloff;
+
+ /* initshadowbuf */
+ lamp->bias = 0.02f * la->bias;
+ lamp->size = la->bufsize;
+ lamp->d = la->clipsta;
+ lamp->clipend = la->clipend;
+
+ /* arbitrary correction for the fact we do no soft transition */
+ lamp->bias *= 0.25f;
+}
+
+static void gpu_lamp_shadow_free(GPULamp *lamp)
+{
+ if (lamp->tex) {
+ GPU_texture_free(lamp->tex);
+ lamp->tex = NULL;
+ }
+ if (lamp->depthtex) {
+ GPU_texture_free(lamp->depthtex);
+ lamp->depthtex = NULL;
+ }
+ if (lamp->fb) {
+ GPU_framebuffer_free(lamp->fb);
+ lamp->fb = NULL;
+ }
+ if (lamp->blurtex) {
+ GPU_texture_free(lamp->blurtex);
+ lamp->blurtex = NULL;
+ }
+ if (lamp->blurfb) {
+ GPU_framebuffer_free(lamp->blurfb);
+ lamp->blurfb = NULL;
+ }
+}
+
+static GPUTexture *gpu_lamp_create_vsm_shadow_map(int size)
+{
+ return GPU_texture_create_2D_custom(size, size, 2, GPU_RG32F, NULL, NULL);
+}
+
+LampEngineData *GPU_lamp_engine_data_get(Scene *scene, Object *ob, Object *par, struct RenderEngineType *re)
+{
+ GPULamp *lamp;
+ LinkData *link;
+
+ for (link = ob->gpulamp.first; link; link = link->next) {
+ lamp = (GPULamp *)link->data;
+
+ if ((lamp->par == par) && (lamp->scene == scene) && (lamp->re == re))
+ return &lamp->data;
+ }
+
+ lamp = MEM_callocN(sizeof(GPULamp), "GPULamp");
+
+ link = MEM_callocN(sizeof(LinkData), "GPULampLink");
+ link->data = lamp;
+ BLI_addtail(&ob->gpulamp, link);
+
+ lamp->scene = scene;
+ lamp->ob = ob;
+ lamp->par = par;
+ lamp->la = ob->data;
+ lamp->re = re;
+
+ return &lamp->data;
+}
+
+GPULamp *GPU_lamp_from_blender(Scene *scene, Object *ob, Object *par)
+{
+ Lamp *la;
+ GPULamp *lamp;
+ LinkData *link;
+
+ for (link = ob->gpulamp.first; link; link = link->next) {
+ lamp = (GPULamp *)link->data;
+
+ if (lamp->par == par && lamp->scene == scene)
+ return link->data;
+ }
+
+ lamp = MEM_callocN(sizeof(GPULamp), "GPULamp");
+
+ link = MEM_callocN(sizeof(LinkData), "GPULampLink");
+ link->data = lamp;
+ BLI_addtail(&ob->gpulamp, link);
+
+ la = ob->data;
+ gpu_lamp_from_blender(scene, ob, par, la, lamp);
+
+ if ((la->type == LA_SPOT && (la->mode & (LA_SHAD_BUF | LA_SHAD_RAY))) ||
+ (la->type == LA_SUN && (la->mode & LA_SHAD_RAY)))
+ {
+ /* opengl */
+ lamp->fb = GPU_framebuffer_create();
+ if (!lamp->fb) {
+ gpu_lamp_shadow_free(lamp);
+ return lamp;
+ }
+
+ if (lamp->la->shadowmap_type == LA_SHADMAP_VARIANCE) {
+ /* Shadow depth map */
+ lamp->depthtex = GPU_texture_create_depth(lamp->size, lamp->size, NULL);
+ if (!lamp->depthtex) {
+ gpu_lamp_shadow_free(lamp);
+ return lamp;
+ }
+
+ GPU_texture_bind(lamp->depthtex, 0);
+ GPU_texture_compare_mode(lamp->depthtex, true);
+ GPU_texture_unbind(lamp->depthtex);
+
+ if (!GPU_framebuffer_texture_attach(lamp->fb, lamp->depthtex, 0, 0)) {
+ gpu_lamp_shadow_free(lamp);
+ return lamp;
+ }
+
+ /* Shadow color map */
+ lamp->tex = gpu_lamp_create_vsm_shadow_map(lamp->size);
+ if (!lamp->tex) {
+ gpu_lamp_shadow_free(lamp);
+ return lamp;
+ }
+
+ if (!GPU_framebuffer_texture_attach(lamp->fb, lamp->tex, 0, 0)) {
+ gpu_lamp_shadow_free(lamp);
+ return lamp;
+ }
+
+ if (!GPU_framebuffer_check_valid(lamp->fb, NULL)) {
+ gpu_lamp_shadow_free(lamp);
+ return lamp;
+ }
+
+ /* FBO and texture for blurring */
+ lamp->blurfb = GPU_framebuffer_create();
+ if (!lamp->blurfb) {
+ gpu_lamp_shadow_free(lamp);
+ return lamp;
+ }
+
+ lamp->blurtex = gpu_lamp_create_vsm_shadow_map(lamp->size * 0.5);
+ if (!lamp->blurtex) {
+ gpu_lamp_shadow_free(lamp);
+ return lamp;
+ }
+
+ if (!GPU_framebuffer_texture_attach(lamp->blurfb, lamp->blurtex, 0, 0)) {
+ gpu_lamp_shadow_free(lamp);
+ return lamp;
+ }
+
+ /* we need to properly bind to test for completeness */
+ GPU_texture_bind_as_framebuffer(lamp->blurtex);
+
+ if (!GPU_framebuffer_check_valid(lamp->blurfb, NULL)) {
+ gpu_lamp_shadow_free(lamp);
+ return lamp;
+ }
+
+ GPU_framebuffer_texture_unbind(lamp->blurfb, lamp->blurtex);
+ }
+ else {
+ lamp->tex = GPU_texture_create_depth(lamp->size, lamp->size, NULL);
+ if (!lamp->tex) {
+ gpu_lamp_shadow_free(lamp);
+ return lamp;
+ }
+
+ GPU_texture_bind(lamp->tex, 0);
+ GPU_texture_compare_mode(lamp->tex, true);
+ GPU_texture_unbind(lamp->tex);
+
+ if (!GPU_framebuffer_texture_attach(lamp->fb, lamp->tex, 0, 0)) {
+ gpu_lamp_shadow_free(lamp);
+ return lamp;
+ }
+
+ if (!GPU_framebuffer_check_valid(lamp->fb, NULL)) {
+ gpu_lamp_shadow_free(lamp);
+ return lamp;
+ }
+ }
+
+ GPU_framebuffer_restore();
+
+ lamp->shadow_color[0] = la->shdwr;
+ lamp->shadow_color[1] = la->shdwg;
+ lamp->shadow_color[2] = la->shdwb;
+ }
+ else {
+ lamp->shadow_color[0] = 1.0;
+ lamp->shadow_color[1] = 1.0;
+ lamp->shadow_color[2] = 1.0;
+ }
+
+ return lamp;
+}
+
+void GPU_lamp_engine_data_free(LampEngineData *led)
+{
+ for (int i = 0; i < MAX_LAMP_DATA; ++i) {
+ if (led->storage[i]) {
+ MEM_freeN(led->storage[i]);
+ led->storage[i] = NULL;
+ }
+ }
+}
+
+void GPU_lamp_free(Object *ob)
+{
+ GPULamp *lamp;
+ LinkData *link;
+
+ for (link = ob->gpulamp.first; link; link = link->next) {
+ lamp = link->data;
+
+ gpu_lamp_shadow_free(lamp);
+ GPU_lamp_engine_data_free(&lamp->data);
+
+ MEM_freeN(lamp);
+ }
+
+ BLI_freelistN(&ob->gpulamp);
+}
+
+bool GPU_lamp_has_shadow_buffer(GPULamp *lamp)
+{
+ return (!(lamp->scene->gm.flag & GAME_GLSL_NO_SHADOWS) &&
+ !(lamp->scene->gm.flag & GAME_GLSL_NO_LIGHTS) &&
+ lamp->tex && lamp->fb);
+}
+
+void GPU_lamp_update_buffer_mats(GPULamp *lamp)
+{
+ float rangemat[4][4], persmat[4][4];
+
+ /* initshadowbuf */
+ invert_m4_m4(lamp->viewmat, lamp->obmat);
+ normalize_v3(lamp->viewmat[0]);
+ normalize_v3(lamp->viewmat[1]);
+ normalize_v3(lamp->viewmat[2]);
+
+ /* makeshadowbuf */
+ mul_m4_m4m4(persmat, lamp->winmat, lamp->viewmat);
+
+ /* opengl depth buffer is range 0.0..1.0 instead of -1.0..1.0 in blender */
+ unit_m4(rangemat);
+ rangemat[0][0] = 0.5f;
+ rangemat[1][1] = 0.5f;
+ rangemat[2][2] = 0.5f;
+ rangemat[3][0] = 0.5f;
+ rangemat[3][1] = 0.5f;
+ rangemat[3][2] = 0.5f;
+
+ mul_m4_m4m4(lamp->persmat, rangemat, persmat);
+}
+
+void GPU_lamp_shadow_buffer_bind(GPULamp *lamp, float viewmat[4][4], int *winsize, float winmat[4][4])
+{
+ GPU_lamp_update_buffer_mats(lamp);
+
+ /* opengl */
+ glDisable(GL_SCISSOR_TEST);
+ GPU_texture_bind_as_framebuffer(lamp->tex);
+ if (lamp->la->shadowmap_type == LA_SHADMAP_VARIANCE)
+ GPU_shader_bind(GPU_shader_get_builtin_shader(GPU_SHADER_VSM_STORE));
+
+ /* set matrices */
+ copy_m4_m4(viewmat, lamp->viewmat);
+ copy_m4_m4(winmat, lamp->winmat);
+ *winsize = lamp->size;
+}
+
+void GPU_lamp_shadow_buffer_unbind(GPULamp *lamp)
+{
+ if (lamp->la->shadowmap_type == LA_SHADMAP_VARIANCE) {
+ GPU_shader_unbind();
+ GPU_framebuffer_blur(lamp->fb, lamp->tex, lamp->blurfb, lamp->blurtex);
+ }
+
+ GPU_framebuffer_texture_unbind(lamp->fb, lamp->tex);
+ GPU_framebuffer_restore();
+ glEnable(GL_SCISSOR_TEST);
+}
+
+int GPU_lamp_shadow_buffer_type(GPULamp *lamp)
+{
+ return lamp->la->shadowmap_type;
+}
+
+int GPU_lamp_shadow_bind_code(GPULamp *lamp)
+{
+ return lamp->tex ? GPU_texture_opengl_bindcode(lamp->tex) : -1;
+}
+
+float *GPU_lamp_dynpersmat(GPULamp *lamp)
+{
+ return &lamp->dynpersmat[0][0];
+}
+
+int GPU_lamp_shadow_layer(GPULamp *lamp)
+{
+ if (lamp->fb && lamp->tex && (lamp->mode & (LA_LAYER | LA_LAYER_SHADOW)))
+ return lamp->lay;
+ else
+ return -1;
+}
diff --git a/source/blender/gpu/intern/gpu_lamp_private.h b/source/blender/gpu/intern/gpu_lamp_private.h
new file mode 100644
index 00000000000..f227ce74e7e
--- /dev/null
+++ b/source/blender/gpu/intern/gpu_lamp_private.h
@@ -0,0 +1,84 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2005 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Brecht Van Lommel, Clément Foucault.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file gpu_lamp_private.h
+ * \ingroup gpu
+ */
+
+#ifndef __GPU_LAMP_PRIVATE_H__
+#define __GPU_LAMP_PRIVATE_H__
+
+#include "BLI_sys_types.h" /* for bool */
+
+struct GPULamp {
+ Scene *scene;
+ Object *ob;
+ Object *par;
+ Lamp *la;
+ struct RenderEngineType *re;
+
+ /* Old Viewport (pre-2.8) */
+ int type, mode, lay, hide;
+
+ float dynenergy, dyncol[3];
+ float energy, col[3];
+
+ float co[3], vec[3];
+ float dynco[3], dynvec[3];
+ float obmat[4][4];
+ float imat[4][4];
+ float dynimat[4][4];
+
+ float spotsi, spotbl, k;
+ float spotvec[2];
+ float dyndist, dynatt1, dynatt2;
+ float dist, att1, att2;
+ float coeff_const, coeff_lin, coeff_quad;
+ float shadow_color[3];
+
+ float bias, d, clipend;
+ int size;
+
+ int falloff_type;
+ struct CurveMapping *curfalloff;
+
+ float winmat[4][4];
+ float viewmat[4][4];
+ float persmat[4][4];
+ float dynpersmat[4][4];
+
+ GPUFrameBuffer *fb;
+ GPUFrameBuffer *blurfb;
+ GPUTexture *tex;
+ GPUTexture *depthtex;
+ GPUTexture *blurtex;
+
+ /* New viewport */
+ struct LampEngineData data;
+};
+
+#endif /* __GPU_LAMP_PRIVATE_H__ */
diff --git a/source/blender/gpu/intern/gpu_material.c b/source/blender/gpu/intern/gpu_material.c
index 33eac16dadf..2e6c1cbf9df 100644
--- a/source/blender/gpu/intern/gpu_material.c
+++ b/source/blender/gpu/intern/gpu_material.c
@@ -45,12 +45,14 @@
#include "BLI_math.h"
#include "BLI_blenlib.h"
#include "BLI_utildefines.h"
+#include "BLI_rand.h"
#include "BKE_anim.h"
#include "BKE_colorband.h"
#include "BKE_colortools.h"
#include "BKE_global.h"
#include "BKE_image.h"
+#include "BKE_layer.h"
#include "BKE_main.h"
#include "BKE_node.h"
#include "BKE_scene.h"
@@ -60,11 +62,14 @@
#include "GPU_extensions.h"
#include "GPU_framebuffer.h"
+#include "GPU_lamp.h"
#include "GPU_material.h"
#include "GPU_shader.h"
#include "GPU_texture.h"
+#include "GPU_uniformbuffer.h"
#include "gpu_codegen.h"
+#include "gpu_lamp_private.h"
#ifdef WITH_OPENSUBDIV
# include "BKE_DerivedMesh.h"
@@ -92,12 +97,15 @@ static struct GPUWorld {
} GPUWorld;
struct GPUMaterial {
- Scene *scene;
+ Scene *scene; /* DEPRECATED was only usefull for lamps */
Material *ma;
/* material for mesh surface, worlds or something else.
* some code generation is done differently depending on the use case */
- int type;
+ int type; /* DEPRECATED */
+
+ const void *engine_type; /* attached engine type */
+ int options; /* to identify shader variations (shadow, probe, world background...) */
/* for creating the material */
ListBase nodes;
@@ -128,50 +136,26 @@ struct GPUMaterial {
bool bound;
bool is_opensubdiv;
-};
-
-struct GPULamp {
- Scene *scene;
- Object *ob;
- Object *par;
- Lamp *la;
-
- int type, mode, lay, hide;
-
- float dynenergy, dyncol[3];
- float energy, col[3];
-
- float co[3], vec[3];
- float dynco[3], dynvec[3];
- float obmat[4][4];
- float imat[4][4];
- float dynimat[4][4];
-
- float spotsi, spotbl, k;
- float spotvec[2];
- float dyndist, dynatt1, dynatt2;
- float dist, att1, att2;
- float coeff_const, coeff_lin, coeff_quad;
- float shadow_color[3];
-
- float bias, d, clipend;
- int size;
-
- int falloff_type;
- struct CurveMapping *curfalloff;
- float winmat[4][4];
- float viewmat[4][4];
- float persmat[4][4];
- float dynpersmat[4][4];
-
- GPUFrameBuffer *fb;
- GPUFrameBuffer *blurfb;
- GPUTexture *tex;
- GPUTexture *depthtex;
- GPUTexture *blurtex;
+ /* XXX: Should be in Material. But it depends on the output node
+ * used and since the output selection is difference for GPUMaterial...
+ */
+ int domain;
+
+ GPUUniformBuffer *ubo; /* UBOs for shader uniforms. */
+ GPUUniformBuffer *sss_profile; /* UBO containing SSS profile. */
+ GPUTexture *sss_tex_profile; /* Texture containing SSS profile. */
+ float *sss_radii; /* UBO containing SSS profile. */
+ int sss_samples;
+ short int *sss_falloff;
+ float *sss_sharpness;
+ bool sss_dirty;
+};
- ListBase materials;
+enum {
+ GPU_DOMAIN_SURFACE = (1 << 0),
+ GPU_DOMAIN_VOLUME = (1 << 1),
+ GPU_DOMAIN_SSS = (1 << 2)
};
/* Forward declaration so shade_light_textures() can use this, while still keeping the code somewhat organized */
@@ -289,21 +273,18 @@ void GPU_material_free(ListBase *gpumaterial)
if (material->pass)
GPU_pass_free(material->pass);
- for (LinkData *nlink = material->lamps.first; nlink; nlink = nlink->next) {
- GPULamp *lamp = nlink->data;
+ if (material->ubo != NULL) {
+ GPU_uniformbuffer_free(material->ubo);
+ }
- if (material->ma) {
- Material *ma = material->ma;
-
- LinkData *next = NULL;
- for (LinkData *mlink = lamp->materials.first; mlink; mlink = next) {
- next = mlink->next;
- if (mlink->data == ma)
- BLI_freelinkN(&lamp->materials, mlink);
- }
- }
+ if (material->sss_tex_profile != NULL) {
+ GPU_texture_free(material->sss_tex_profile);
}
-
+
+ if (material->sss_profile != NULL) {
+ GPU_uniformbuffer_free(material->sss_profile);
+ }
+
BLI_freelistN(&material->lamps);
MEM_freeN(material);
@@ -312,28 +293,12 @@ void GPU_material_free(ListBase *gpumaterial)
BLI_freelistN(gpumaterial);
}
-bool GPU_lamp_visible(GPULamp *lamp, SceneRenderLayer *srl, Material *ma)
-{
- if (lamp->hide)
- return false;
- else if (srl && srl->light_override)
- return BKE_group_object_exists(srl->light_override, lamp->ob);
- else if (ma && ma->group)
- return BKE_group_object_exists(ma->group, lamp->ob);
- else
- return true;
-}
-
void GPU_material_bind(
GPUMaterial *material, int oblay, int viewlay, double time, int mipmap,
- float viewmat[4][4], float viewinv[4][4], float camerafactors[4], bool scenelock)
+ float viewmat[4][4], float viewinv[4][4], float camerafactors[4])
{
if (material->pass) {
GPUShader *shader = GPU_pass_shader(material->pass);
- SceneRenderLayer *srl = scenelock ? BLI_findlink(&material->scene->r.layers, material->scene->r.actlay) : NULL;
-
- if (srl)
- viewlay &= srl->lay;
/* handle layer lamps */
if (material->type == GPU_MATERIAL_TYPE_MESH) {
@@ -341,7 +306,7 @@ void GPU_material_bind(
GPULamp *lamp = nlink->data;
if ((lamp->lay & viewlay) && (!(lamp->mode & LA_LAYER) || (lamp->lay & oblay)) &&
- GPU_lamp_visible(lamp, srl, material->ma))
+ GPU_lamp_visible(lamp, material->ma))
{
lamp->dynenergy = lamp->energy;
copy_v3_v3(lamp->dyncol, lamp->col);
@@ -490,6 +455,346 @@ GPUMatType GPU_Material_get_type(GPUMaterial *material)
return material->type;
}
+GPUPass *GPU_material_get_pass(GPUMaterial *material)
+{
+ return material->pass;
+}
+
+GPUUniformBuffer *GPU_material_get_uniform_buffer(GPUMaterial *material)
+{
+ return material->ubo;
+}
+
+/**
+ * Create dynamic UBO from parameters
+ * \param ListBase of BLI_genericNodeN(GPUInput)
+ */
+void GPU_material_create_uniform_buffer(GPUMaterial *material, ListBase *inputs)
+{
+ material->ubo = GPU_uniformbuffer_dynamic_create(inputs, NULL);
+}
+
+void GPU_material_uniform_buffer_tag_dirty(ListBase *gpumaterials)
+{
+ for (LinkData *link = gpumaterials->first; link; link = link->next) {
+ GPUMaterial *material = link->data;
+ if (material->ubo != NULL) {
+ GPU_uniformbuffer_tag_dirty(material->ubo);
+ }
+ if (material->sss_profile != NULL) {
+ material->sss_dirty = true;
+ }
+ }
+}
+
+/* Eevee Subsurface scattering. */
+/* Based on Separable SSS. by Jorge Jimenez and Diego Gutierrez */
+
+#define SSS_SAMPLES 65
+#define SSS_EXPONENT 2.0f /* Importance sampling exponent */
+
+typedef struct GPUSssKernelData {
+ float kernel[SSS_SAMPLES][4];
+ float param[3], max_radius;
+ int samples;
+} GPUSssKernelData;
+
+static void sss_calculate_offsets(GPUSssKernelData *kd, int count, float exponent)
+{
+ float step = 2.0f / (float)(count - 1);
+ for (int i = 0; i < count; i++) {
+ float o = ((float)i) * step - 1.0f;
+ float sign = (o < 0.0f) ? -1.0f : 1.0f;
+ float ofs = sign * fabsf(powf(o, exponent));
+ kd->kernel[i][3] = ofs;
+ }
+}
+
+#define GAUSS_TRUNCATE 12.46f
+static float gaussian_profile(float r, float radius)
+{
+ const float v = radius * radius * (0.25f * 0.25f);
+ const float Rm = sqrtf(v * GAUSS_TRUNCATE);
+
+ if (r >= Rm) {
+ return 0.0f;
+ }
+ return expf(-r * r / (2.0f * v)) / (2.0f * M_PI * v);
+}
+
+#define BURLEY_TRUNCATE 16.0f
+#define BURLEY_TRUNCATE_CDF 0.9963790093708328f // cdf(BURLEY_TRUNCATE)
+static float burley_profile(float r, float d)
+{
+ float exp_r_3_d = expf(-r / (3.0f * d));
+ float exp_r_d = exp_r_3_d * exp_r_3_d * exp_r_3_d;
+ return (exp_r_d + exp_r_3_d) / (4.0f * d);
+}
+
+static float cubic_profile(float r, float radius, float sharpness)
+{
+ float Rm = radius * (1.0f + sharpness);
+
+ if (r >= Rm) {
+ return 0.0f;
+ }
+ /* custom variation with extra sharpness, to match the previous code */
+ const float y = 1.0f / (1.0f + sharpness);
+ float Rmy, ry, ryinv;
+
+ Rmy = powf(Rm, y);
+ ry = powf(r, y);
+ ryinv = (r > 0.0f) ? powf(r, y - 1.0f) : 0.0f;
+
+ const float Rmy5 = (Rmy * Rmy) * (Rmy * Rmy) * Rmy;
+ const float f = Rmy - ry;
+ const float num = f * (f * f) * (y * ryinv);
+
+ return (10.0f * num) / (Rmy5 * M_PI);
+}
+
+static float eval_profile(float r, short falloff_type, float sharpness, float param)
+{
+ r = fabsf(r);
+
+ if (falloff_type == SHD_SUBSURFACE_BURLEY) {
+ return burley_profile(r, param) / BURLEY_TRUNCATE_CDF;
+ }
+ else if (falloff_type == SHD_SUBSURFACE_CUBIC) {
+ return cubic_profile(r, param, sharpness);
+ }
+ else {
+ return gaussian_profile(r, param);
+ }
+}
+
+/* Resolution for each sample of the precomputed kernel profile */
+#define INTEGRAL_RESOLUTION 32
+static float eval_integral(float x0, float x1, short falloff_type, float sharpness, float param)
+{
+ const float range = x1 - x0;
+ const float step = range / INTEGRAL_RESOLUTION;
+ float integral = 0.0f;
+
+ for (int i = 0; i < INTEGRAL_RESOLUTION; ++i) {
+ float x = x0 + range * ((float)i + 0.5f) / (float)INTEGRAL_RESOLUTION;
+ float y = eval_profile(x, falloff_type, sharpness, param);
+ integral += y * step;
+ }
+
+ return integral;
+}
+#undef INTEGRAL_RESOLUTION
+
+static void compute_sss_kernel(
+ GPUSssKernelData *kd, float *radii, int sample_ct, int falloff_type, float sharpness)
+{
+ float rad[3];
+ /* Minimum radius */
+ rad[0] = MAX2(radii[0], 1e-15f);
+ rad[1] = MAX2(radii[1], 1e-15f);
+ rad[2] = MAX2(radii[2], 1e-15f);
+
+ /* Christensen-Burley fitting */
+ float l[3], d[3];
+
+ if (falloff_type == SHD_SUBSURFACE_BURLEY) {
+ mul_v3_v3fl(l, rad, 0.25f * M_1_PI);
+ const float A = 1.0f;
+ const float s = 1.9f - A + 3.5f * (A - 0.8f) * (A - 0.8f);
+ /* XXX 0.6f Out of nowhere to match cycles! Empirical! Can be tweak better. */
+ mul_v3_v3fl(d, l, 0.6f / s);
+ mul_v3_v3fl(rad, d, BURLEY_TRUNCATE);
+ kd->max_radius = MAX3(rad[0], rad[1], rad[2]);
+
+ copy_v3_v3(kd->param, d);
+ }
+ else if (falloff_type == SHD_SUBSURFACE_CUBIC) {
+ copy_v3_v3(kd->param, rad);
+ mul_v3_fl(rad, 1.0f + sharpness);
+ kd->max_radius = MAX3(rad[0], rad[1], rad[2]);
+ }
+ else {
+ kd->max_radius = MAX3(rad[0], rad[1], rad[2]);
+
+ copy_v3_v3(kd->param, rad);
+ }
+
+ /* Compute samples locations on the 1d kernel [-1..1] */
+ sss_calculate_offsets(kd, sample_ct, SSS_EXPONENT);
+
+ /* Weights sum for normalization */
+ float sum[3] = {0.0f, 0.0f, 0.0f};
+
+ /* Compute integral of each sample footprint */
+ for (int i = 0; i < sample_ct; i++) {
+ float x0, x1;
+
+ if (i == 0) {
+ x0 = kd->kernel[0][3] - fabsf(kd->kernel[0][3] - kd->kernel[1][3]) / 2.0f;
+ }
+ else {
+ x0 = (kd->kernel[i - 1][3] + kd->kernel[i][3]) / 2.0f;
+ }
+
+ if (i == sample_ct - 1) {
+ x1 = kd->kernel[sample_ct - 1][3] + fabsf(kd->kernel[sample_ct - 2][3] - kd->kernel[sample_ct - 1][3]) / 2.0f;
+ }
+ else {
+ x1 = (kd->kernel[i][3] + kd->kernel[i + 1][3]) / 2.0f;
+ }
+
+ x0 *= kd->max_radius;
+ x1 *= kd->max_radius;
+
+ kd->kernel[i][0] = eval_integral(x0, x1, falloff_type, sharpness, kd->param[0]);
+ kd->kernel[i][1] = eval_integral(x0, x1, falloff_type, sharpness, kd->param[1]);
+ kd->kernel[i][2] = eval_integral(x0, x1, falloff_type, sharpness, kd->param[2]);
+
+ sum[0] += kd->kernel[i][0];
+ sum[1] += kd->kernel[i][1];
+ sum[2] += kd->kernel[i][2];
+ }
+
+ for (int i = 0; i < 3; ++i) {
+ if (sum[i] > 0.0f) {
+ /* Normalize */
+ for (int j = 0; j < sample_ct; j++) {
+ kd->kernel[j][i] /= sum[i];
+ }
+ }
+ else {
+ /* Avoid 0 kernel sum. */
+ kd->kernel[sample_ct / 2][i] = 1.0f;
+ }
+ }
+
+ /* Put center sample at the start of the array (to sample first) */
+ float tmpv[4];
+ copy_v4_v4(tmpv, kd->kernel[sample_ct / 2]);
+ for (int i = sample_ct / 2; i > 0; i--) {
+ copy_v4_v4(kd->kernel[i], kd->kernel[i - 1]);
+ }
+ copy_v4_v4(kd->kernel[0], tmpv);
+
+ kd->samples = sample_ct;
+}
+
+#define INTEGRAL_RESOLUTION 512
+static void compute_sss_translucence_kernel(
+ const GPUSssKernelData *kd, int resolution, short falloff_type, float sharpness, float **output)
+{
+ float (*texels)[4];
+ texels = MEM_callocN(sizeof(float) * 4 * resolution, "compute_sss_translucence_kernel");
+ *output = (float *)texels;
+
+ /* Last texel should be black, hence the - 1. */
+ for (int i = 0; i < resolution - 1; ++i) {
+ /* Distance from surface. */
+ float d = kd->max_radius * ((float)i + 0.00001f) / ((float)resolution);
+
+ /* For each distance d we compute the radiance incomming from an hypothetic parallel plane. */
+ /* Compute radius of the footprint on the hypothetic plane */
+ float r_fp = sqrtf(kd->max_radius * kd->max_radius - d * d);
+ float r_step = r_fp / INTEGRAL_RESOLUTION;
+ float area_accum = 0.0f;
+ for (float r = 0.0f; r < r_fp; r += r_step) {
+ /* Compute distance to the "shading" point through the medium. */
+ /* r_step * 0.5f to put sample between the area borders */
+ float dist = hypotf(r + r_step * 0.5f, d);
+
+ float profile[3];
+ profile[0] = eval_profile(dist, falloff_type, sharpness, kd->param[0]);
+ profile[1] = eval_profile(dist, falloff_type, sharpness, kd->param[1]);
+ profile[2] = eval_profile(dist, falloff_type, sharpness, kd->param[2]);
+
+ /* Since the profile and configuration are radially symetrical we
+ * can just evaluate it once and weight it accordingly */
+ float r_next = r + r_step;
+ float disk_area = (M_PI * r_next * r_next) - (M_PI * r * r);
+
+ mul_v3_fl(profile, disk_area);
+ add_v3_v3(texels[i], profile);
+ area_accum += disk_area;
+ }
+ /* Normalize over the disk. */
+ mul_v3_fl(texels[i], 1.0f / (area_accum));
+ }
+
+ /* Normalize */
+ for (int j = resolution - 2; j > 0; j--) {
+ texels[j][0] /= (texels[0][0] > 0.0f) ? texels[0][0] : 1.0f;
+ texels[j][1] /= (texels[0][1] > 0.0f) ? texels[0][1] : 1.0f;
+ texels[j][2] /= (texels[0][2] > 0.0f) ? texels[0][2] : 1.0f;
+ }
+
+ /* First texel should be white */
+ texels[0][0] = (texels[0][0] > 0.0f) ? 1.0f : 0.0f;
+ texels[0][1] = (texels[0][1] > 0.0f) ? 1.0f : 0.0f;
+ texels[0][2] = (texels[0][2] > 0.0f) ? 1.0f : 0.0f;
+
+ /* dim the last few texels for smoother transition */
+ mul_v3_fl(texels[resolution - 2], 0.25f);
+ mul_v3_fl(texels[resolution - 3], 0.5f);
+ mul_v3_fl(texels[resolution - 4], 0.75f);
+}
+#undef INTEGRAL_RESOLUTION
+
+void GPU_material_sss_profile_create(GPUMaterial *material, float *radii, short *falloff_type, float *sharpness)
+{
+ material->sss_radii = radii;
+ material->sss_falloff = falloff_type;
+ material->sss_sharpness = sharpness;
+ material->sss_dirty = true;
+
+ /* Update / Create UBO */
+ if (material->sss_profile == NULL) {
+ material->sss_profile = GPU_uniformbuffer_create(sizeof(GPUSssKernelData), NULL, NULL);
+ }
+}
+
+struct GPUUniformBuffer *GPU_material_sss_profile_get(GPUMaterial *material, int sample_ct, GPUTexture **tex_profile)
+{
+ if (material->sss_radii == NULL)
+ return NULL;
+
+ if (material->sss_dirty || (material->sss_samples != sample_ct)) {
+ GPUSssKernelData kd;
+
+ float sharpness = (material->sss_sharpness != NULL) ? *material->sss_sharpness : 0.0f;
+
+ /* XXX Black magic but it seems to fit. Maybe because we integrate -1..1 */
+ sharpness *= 0.5f;
+
+ compute_sss_kernel(&kd, material->sss_radii, sample_ct, *material->sss_falloff, sharpness);
+
+ /* Update / Create UBO */
+ GPU_uniformbuffer_update(material->sss_profile, &kd);
+
+ /* Update / Create Tex */
+ float *translucence_profile;
+ compute_sss_translucence_kernel(&kd, 64, *material->sss_falloff, sharpness, &translucence_profile);
+
+ if (material->sss_tex_profile != NULL) {
+ GPU_texture_free(material->sss_tex_profile);
+ }
+
+ material->sss_tex_profile = GPU_texture_create_1D_custom(64, 4, GPU_RGBA16F, translucence_profile, NULL);
+
+ MEM_freeN(translucence_profile);
+
+ material->sss_samples = sample_ct;
+ material->sss_dirty = false;
+ }
+
+ if (tex_profile != NULL) {
+ *tex_profile = material->sss_tex_profile;
+ }
+ return material->sss_profile;
+}
+
+#undef SSS_EXPONENT
+#undef SSS_SAMPLES
void GPU_material_vertex_attributes(GPUMaterial *material, GPUVertexAttribs *attribs)
{
@@ -540,6 +845,16 @@ bool GPU_material_use_world_space_shading(GPUMaterial *mat)
return BKE_scene_use_world_space_shading(mat->scene);
}
+bool GPU_material_use_domain_surface(GPUMaterial *mat)
+{
+ return (mat->domain & GPU_DOMAIN_SURFACE);
+}
+
+bool GPU_material_use_domain_volume(GPUMaterial *mat)
+{
+ return (mat->domain & GPU_DOMAIN_VOLUME);
+}
+
static GPUNodeLink *lamp_get_visibility(GPUMaterial *mat, GPULamp *lamp, GPUNodeLink **lv, GPUNodeLink **dist)
{
GPUNodeLink *visifac;
@@ -951,14 +1266,12 @@ static void shade_one_light(GPUShadeInput *shi, GPUShadeResult *shr, GPULamp *la
}
add_user_list(&mat->lamps, lamp);
- add_user_list(&lamp->materials, shi->gpumat->ma);
return;
}
}
}
else if ((mat->scene->gm.flag & GAME_GLSL_NO_SHADOWS) && (lamp->mode & LA_ONLYSHADOW)) {
add_user_list(&mat->lamps, lamp);
- add_user_list(&lamp->materials, shi->gpumat->ma);
return;
}
else
@@ -1025,7 +1338,6 @@ static void shade_one_light(GPUShadeInput *shi, GPUShadeResult *shr, GPULamp *la
}
add_user_list(&mat->lamps, lamp);
- add_user_list(&lamp->materials, shi->gpumat->ma);
}
static void material_lights(GPUShadeInput *shi, GPUShadeResult *shr)
@@ -2150,6 +2462,73 @@ GPUMaterial *GPU_material_world(struct Scene *scene, struct World *wo)
return mat;
}
+GPUMaterial *GPU_material_from_nodetree_find(
+ ListBase *gpumaterials, const void *engine_type, int options)
+{
+ for (LinkData *link = gpumaterials->first; link; link = link->next) {
+ GPUMaterial *current_material = (GPUMaterial *)link->data;
+ if (current_material->engine_type == engine_type &&
+ current_material->options == options)
+ {
+ return current_material;
+ }
+ }
+
+ return NULL;
+}
+
+/**
+ * TODO: This is supposed to replace GPU_material_from_blender/_world in the future
+ *
+ * \note Caller must use #GPU_material_from_nodetree_find to re-use existing materials,
+ * This is enforced since constructing other arguments to this function may be expensive
+ * so only do this when they are needed.
+ */
+GPUMaterial *GPU_material_from_nodetree(
+ Scene *scene, struct bNodeTree *ntree, ListBase *gpumaterials, const void *engine_type, int options,
+ const char *vert_code, const char *geom_code, const char *frag_lib, const char *defines)
+{
+ GPUMaterial *mat;
+ GPUNodeLink *outlink;
+ LinkData *link;
+ bool has_volume_output, has_surface_output;
+
+ /* Caller must re-use materials. */
+ BLI_assert(GPU_material_from_nodetree_find(gpumaterials, engine_type, options) == NULL);
+
+ /* allocate material */
+ mat = GPU_material_construct_begin(NULL); /* TODO remove GPU_material_construct_begin */
+ mat->scene = scene;
+ mat->engine_type = engine_type;
+ mat->options = options;
+
+ ntreeGPUMaterialNodes(ntree, mat, NODE_NEW_SHADING | NODE_NEWER_SHADING);
+ ntreeGPUMaterialDomain(ntree, &has_surface_output, &has_volume_output);
+
+ if (has_surface_output) {
+ mat->domain |= GPU_DOMAIN_SURFACE;
+ }
+ if (has_volume_output) {
+ mat->domain |= GPU_DOMAIN_VOLUME;
+ }
+
+ /* Let Draw manager finish the construction. */
+ if (mat->outlink) {
+ outlink = mat->outlink;
+ mat->pass = GPU_generate_pass_new(
+ mat, &mat->nodes, outlink, &mat->attribs, vert_code, geom_code, frag_lib, defines);
+ }
+
+ /* note that even if building the shader fails in some way, we still keep
+ * it to avoid trying to compile again and again, and simple do not use
+ * the actual shader on drawing */
+
+ link = MEM_callocN(sizeof(LinkData), "GPUMaterialLink");
+ link->data = mat;
+ BLI_addtail(gpumaterials, link);
+
+ return mat;
+}
GPUMaterial *GPU_material_from_blender(Scene *scene, Material *ma, bool use_opensubdiv)
{
@@ -2237,386 +2616,6 @@ void GPU_materials_free(void)
/* Lamps and shadow buffers */
-static void gpu_lamp_calc_winmat(GPULamp *lamp)
-{
- float temp, angle, pixsize, wsize;
-
- if (lamp->type == LA_SUN) {
- wsize = lamp->la->shadow_frustum_size;
- orthographic_m4(lamp->winmat, -wsize, wsize, -wsize, wsize, lamp->d, lamp->clipend);
- }
- else if (lamp->type == LA_SPOT) {
- angle = saacos(lamp->spotsi);
- temp = 0.5f * lamp->size * cosf(angle) / sinf(angle);
- pixsize = lamp->d / temp;
- wsize = pixsize * 0.5f * lamp->size;
- /* compute shadows according to X and Y scaling factors */
- perspective_m4(
- lamp->winmat,
- -wsize * lamp->spotvec[0], wsize * lamp->spotvec[0],
- -wsize * lamp->spotvec[1], wsize * lamp->spotvec[1],
- lamp->d, lamp->clipend);
- }
-}
-
-void GPU_lamp_update(GPULamp *lamp, int lay, int hide, float obmat[4][4])
-{
- float mat[4][4];
- float obmat_scale[3];
-
- lamp->lay = lay;
- lamp->hide = hide;
-
- normalize_m4_m4_ex(mat, obmat, obmat_scale);
-
- copy_v3_v3(lamp->vec, mat[2]);
- copy_v3_v3(lamp->co, mat[3]);
- copy_m4_m4(lamp->obmat, mat);
- invert_m4_m4(lamp->imat, mat);
-
- if (lamp->type == LA_SPOT) {
- /* update spotlamp scale on X and Y axis */
- lamp->spotvec[0] = obmat_scale[0] / obmat_scale[2];
- lamp->spotvec[1] = obmat_scale[1] / obmat_scale[2];
- }
-
- if (GPU_lamp_has_shadow_buffer(lamp)) {
- /* makeshadowbuf */
- gpu_lamp_calc_winmat(lamp);
- }
-}
-
-void GPU_lamp_update_colors(GPULamp *lamp, float r, float g, float b, float energy)
-{
- lamp->energy = energy;
- if (lamp->mode & LA_NEG) lamp->energy = -lamp->energy;
-
- lamp->col[0] = r;
- lamp->col[1] = g;
- lamp->col[2] = b;
-}
-
-void GPU_lamp_update_distance(GPULamp *lamp, float distance, float att1, float att2,
- float coeff_const, float coeff_lin, float coeff_quad)
-{
- lamp->dist = distance;
- lamp->att1 = att1;
- lamp->att2 = att2;
- lamp->coeff_const = coeff_const;
- lamp->coeff_lin = coeff_lin;
- lamp->coeff_quad = coeff_quad;
-}
-
-void GPU_lamp_update_spot(GPULamp *lamp, float spotsize, float spotblend)
-{
- lamp->spotsi = cosf(spotsize * 0.5f);
- lamp->spotbl = (1.0f - lamp->spotsi) * spotblend;
-}
-
-static void gpu_lamp_from_blender(Scene *scene, Object *ob, Object *par, Lamp *la, GPULamp *lamp)
-{
- lamp->scene = scene;
- lamp->ob = ob;
- lamp->par = par;
- lamp->la = la;
-
- /* add_render_lamp */
- lamp->mode = la->mode;
- lamp->type = la->type;
-
- lamp->energy = la->energy;
- if (lamp->mode & LA_NEG) lamp->energy = -lamp->energy;
-
- lamp->col[0] = la->r;
- lamp->col[1] = la->g;
- lamp->col[2] = la->b;
-
- GPU_lamp_update(lamp, ob->lay, (ob->restrictflag & OB_RESTRICT_RENDER), ob->obmat);
-
- lamp->spotsi = la->spotsize;
- if (lamp->mode & LA_HALO)
- if (lamp->spotsi > DEG2RADF(170.0f))
- lamp->spotsi = DEG2RADF(170.0f);
- lamp->spotsi = cosf(lamp->spotsi * 0.5f);
- lamp->spotbl = (1.0f - lamp->spotsi) * la->spotblend;
- lamp->k = la->k;
-
- lamp->dist = la->dist;
- lamp->falloff_type = la->falloff_type;
- lamp->att1 = la->att1;
- lamp->att2 = la->att2;
- lamp->coeff_const = la->coeff_const;
- lamp->coeff_lin = la->coeff_lin;
- lamp->coeff_quad = la->coeff_quad;
- lamp->curfalloff = la->curfalloff;
-
- /* initshadowbuf */
- lamp->bias = 0.02f * la->bias;
- lamp->size = la->bufsize;
- lamp->d = la->clipsta;
- lamp->clipend = la->clipend;
-
- /* arbitrary correction for the fact we do no soft transition */
- lamp->bias *= 0.25f;
-}
-
-static void gpu_lamp_shadow_free(GPULamp *lamp)
-{
- if (lamp->tex) {
- GPU_texture_free(lamp->tex);
- lamp->tex = NULL;
- }
- if (lamp->depthtex) {
- GPU_texture_free(lamp->depthtex);
- lamp->depthtex = NULL;
- }
- if (lamp->fb) {
- GPU_framebuffer_free(lamp->fb);
- lamp->fb = NULL;
- }
- if (lamp->blurtex) {
- GPU_texture_free(lamp->blurtex);
- lamp->blurtex = NULL;
- }
- if (lamp->blurfb) {
- GPU_framebuffer_free(lamp->blurfb);
- lamp->blurfb = NULL;
- }
-}
-
-GPULamp *GPU_lamp_from_blender(Scene *scene, Object *ob, Object *par)
-{
- Lamp *la;
- GPULamp *lamp;
- LinkData *link;
-
- for (link = ob->gpulamp.first; link; link = link->next) {
- lamp = (GPULamp *)link->data;
-
- if (lamp->par == par && lamp->scene == scene)
- return link->data;
- }
-
- lamp = MEM_callocN(sizeof(GPULamp), "GPULamp");
-
- link = MEM_callocN(sizeof(LinkData), "GPULampLink");
- link->data = lamp;
- BLI_addtail(&ob->gpulamp, link);
-
- la = ob->data;
- gpu_lamp_from_blender(scene, ob, par, la, lamp);
-
- if ((la->type == LA_SPOT && (la->mode & (LA_SHAD_BUF | LA_SHAD_RAY))) ||
- (la->type == LA_SUN && (la->mode & LA_SHAD_RAY)))
- {
- /* opengl */
- lamp->fb = GPU_framebuffer_create();
- if (!lamp->fb) {
- gpu_lamp_shadow_free(lamp);
- return lamp;
- }
-
- if (lamp->la->shadowmap_type == LA_SHADMAP_VARIANCE) {
- /* Shadow depth map */
- lamp->depthtex = GPU_texture_create_depth(lamp->size, lamp->size, NULL);
- if (!lamp->depthtex) {
- gpu_lamp_shadow_free(lamp);
- return lamp;
- }
-
- if (!GPU_framebuffer_texture_attach(lamp->fb, lamp->depthtex, 0, NULL)) {
- gpu_lamp_shadow_free(lamp);
- return lamp;
- }
-
- /* Shadow color map */
- lamp->tex = GPU_texture_create_vsm_shadow_map(lamp->size, NULL);
- if (!lamp->tex) {
- gpu_lamp_shadow_free(lamp);
- return lamp;
- }
-
- if (!GPU_framebuffer_texture_attach(lamp->fb, lamp->tex, 0, NULL)) {
- gpu_lamp_shadow_free(lamp);
- return lamp;
- }
-
- if (!GPU_framebuffer_check_valid(lamp->fb, NULL)) {
- gpu_lamp_shadow_free(lamp);
- return lamp;
- }
-
- /* FBO and texture for blurring */
- lamp->blurfb = GPU_framebuffer_create();
- if (!lamp->blurfb) {
- gpu_lamp_shadow_free(lamp);
- return lamp;
- }
-
- lamp->blurtex = GPU_texture_create_vsm_shadow_map(lamp->size * 0.5, NULL);
- if (!lamp->blurtex) {
- gpu_lamp_shadow_free(lamp);
- return lamp;
- }
-
- if (!GPU_framebuffer_texture_attach(lamp->blurfb, lamp->blurtex, 0, NULL)) {
- gpu_lamp_shadow_free(lamp);
- return lamp;
- }
-
- /* we need to properly bind to test for completeness */
- GPU_texture_bind_as_framebuffer(lamp->blurtex);
-
- if (!GPU_framebuffer_check_valid(lamp->blurfb, NULL)) {
- gpu_lamp_shadow_free(lamp);
- return lamp;
- }
-
- GPU_framebuffer_texture_unbind(lamp->blurfb, lamp->blurtex);
- }
- else {
- lamp->tex = GPU_texture_create_depth(lamp->size, lamp->size, NULL);
- if (!lamp->tex) {
- gpu_lamp_shadow_free(lamp);
- return lamp;
- }
-
- if (!GPU_framebuffer_texture_attach(lamp->fb, lamp->tex, 0, NULL)) {
- gpu_lamp_shadow_free(lamp);
- return lamp;
- }
-
- if (!GPU_framebuffer_check_valid(lamp->fb, NULL)) {
- gpu_lamp_shadow_free(lamp);
- return lamp;
- }
- }
-
- GPU_framebuffer_restore();
-
- lamp->shadow_color[0] = la->shdwr;
- lamp->shadow_color[1] = la->shdwg;
- lamp->shadow_color[2] = la->shdwb;
- }
- else {
- lamp->shadow_color[0] = 1.0;
- lamp->shadow_color[1] = 1.0;
- lamp->shadow_color[2] = 1.0;
- }
-
- return lamp;
-}
-
-void GPU_lamp_free(Object *ob)
-{
- GPULamp *lamp;
- LinkData *link;
- LinkData *nlink;
- Material *ma;
-
- for (link = ob->gpulamp.first; link; link = link->next) {
- lamp = link->data;
-
- while (lamp->materials.first) {
- nlink = lamp->materials.first;
- ma = nlink->data;
- BLI_freelinkN(&lamp->materials, nlink);
-
- if (ma->gpumaterial.first)
- GPU_material_free(&ma->gpumaterial);
- }
-
- gpu_lamp_shadow_free(lamp);
-
- MEM_freeN(lamp);
- }
-
- BLI_freelistN(&ob->gpulamp);
-}
-
-bool GPU_lamp_has_shadow_buffer(GPULamp *lamp)
-{
- return (!(lamp->scene->gm.flag & GAME_GLSL_NO_SHADOWS) &&
- !(lamp->scene->gm.flag & GAME_GLSL_NO_LIGHTS) &&
- lamp->tex && lamp->fb);
-}
-
-void GPU_lamp_update_buffer_mats(GPULamp *lamp)
-{
- float rangemat[4][4], persmat[4][4];
-
- /* initshadowbuf */
- invert_m4_m4(lamp->viewmat, lamp->obmat);
- normalize_v3(lamp->viewmat[0]);
- normalize_v3(lamp->viewmat[1]);
- normalize_v3(lamp->viewmat[2]);
-
- /* makeshadowbuf */
- mul_m4_m4m4(persmat, lamp->winmat, lamp->viewmat);
-
- /* opengl depth buffer is range 0.0..1.0 instead of -1.0..1.0 in blender */
- unit_m4(rangemat);
- rangemat[0][0] = 0.5f;
- rangemat[1][1] = 0.5f;
- rangemat[2][2] = 0.5f;
- rangemat[3][0] = 0.5f;
- rangemat[3][1] = 0.5f;
- rangemat[3][2] = 0.5f;
-
- mul_m4_m4m4(lamp->persmat, rangemat, persmat);
-}
-
-void GPU_lamp_shadow_buffer_bind(GPULamp *lamp, float viewmat[4][4], int *winsize, float winmat[4][4])
-{
- GPU_lamp_update_buffer_mats(lamp);
-
- /* opengl */
- glDisable(GL_SCISSOR_TEST);
- GPU_texture_bind_as_framebuffer(lamp->tex);
- if (lamp->la->shadowmap_type == LA_SHADMAP_VARIANCE)
- GPU_shader_bind(GPU_shader_get_builtin_shader(GPU_SHADER_VSM_STORE));
-
- /* set matrices */
- copy_m4_m4(viewmat, lamp->viewmat);
- copy_m4_m4(winmat, lamp->winmat);
- *winsize = lamp->size;
-}
-
-void GPU_lamp_shadow_buffer_unbind(GPULamp *lamp)
-{
- if (lamp->la->shadowmap_type == LA_SHADMAP_VARIANCE) {
- GPU_shader_unbind();
- GPU_framebuffer_blur(lamp->fb, lamp->tex, lamp->blurfb, lamp->blurtex);
- }
-
- GPU_framebuffer_texture_unbind(lamp->fb, lamp->tex);
- GPU_framebuffer_restore();
- glEnable(GL_SCISSOR_TEST);
-}
-
-int GPU_lamp_shadow_buffer_type(GPULamp *lamp)
-{
- return lamp->la->shadowmap_type;
-}
-
-int GPU_lamp_shadow_bind_code(GPULamp *lamp)
-{
- return lamp->tex ? GPU_texture_opengl_bindcode(lamp->tex) : -1;
-}
-
-float *GPU_lamp_dynpersmat(GPULamp *lamp)
-{
- return &lamp->dynpersmat[0][0];
-}
-
-int GPU_lamp_shadow_layer(GPULamp *lamp)
-{
- if (lamp->fb && lamp->tex && (lamp->mode & (LA_LAYER | LA_LAYER_SHADOW)))
- return lamp->lay;
- else
- return -1;
-}
-
GPUNodeLink *GPU_lamp_get_data(
GPUMaterial *mat, GPULamp *lamp,
GPUNodeLink **r_col, GPUNodeLink **r_lv, GPUNodeLink **r_dist, GPUNodeLink **r_shadow, GPUNodeLink **r_energy)
@@ -2658,7 +2657,6 @@ GPUNodeLink *GPU_lamp_get_data(
/* ensure shadow buffer and lamp textures will be updated */
add_user_list(&mat->lamps, lamp);
- add_user_list(&lamp->materials, mat->ma);
return visifac;
}
@@ -2728,6 +2726,7 @@ GPUShaderExport *GPU_shader_export(struct Scene *scene, struct Material *ma)
break;
case GPU_NONE:
+ case GPU_TEX3D:
case GPU_TEXCUBE:
case GPU_FLOAT:
case GPU_VEC2:
@@ -2735,6 +2734,7 @@ GPUShaderExport *GPU_shader_export(struct Scene *scene, struct Material *ma)
case GPU_VEC4:
case GPU_MAT3:
case GPU_MAT4:
+ case GPU_CLOSURE:
case GPU_ATTRIB:
break;
}
@@ -2763,7 +2763,9 @@ GPUShaderExport *GPU_shader_export(struct Scene *scene, struct Material *ma)
break;
case GPU_NONE:
+ case GPU_CLOSURE:
case GPU_TEX2D:
+ case GPU_TEX3D:
case GPU_TEXCUBE:
case GPU_SHADOW2D:
case GPU_ATTRIB:
diff --git a/source/blender/gpu/intern/gpu_matrix.c b/source/blender/gpu/intern/gpu_matrix.c
new file mode 100644
index 00000000000..b6214f2778b
--- /dev/null
+++ b/source/blender/gpu/intern/gpu_matrix.c
@@ -0,0 +1,649 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the ipmlied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2012 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Alexandr Kuznetsov, Jason Wilkins, Mike Erwin
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file source/blender/gpu/intern/gpu_matrix.c
+ * \ingroup gpu
+ */
+
+#include "../../../intern/gawain/gawain/gwn_shader_interface.h"
+
+#define SUPPRESS_GENERIC_MATRIX_API
+#define USE_GPU_PY_MATRIX_API /* only so values are declared */
+#include "GPU_matrix.h"
+#undef USE_GPU_PY_MATRIX_API
+
+#include "BLI_math_matrix.h"
+#include "BLI_math_rotation.h"
+#include "BLI_math_vector.h"
+
+
+#define DEBUG_MATRIX_BIND 0
+
+#define MATRIX_STACK_DEPTH 32
+
+typedef float Mat4[4][4];
+typedef float Mat3[3][3];
+
+typedef struct MatrixStack {
+ Mat4 stack[MATRIX_STACK_DEPTH];
+ unsigned int top;
+} MatrixStack;
+
+typedef struct {
+ MatrixStack model_view_stack;
+ MatrixStack projection_stack;
+
+ bool dirty;
+
+ /* TODO: cache of derived matrices (Normal, MVP, inverse MVP, etc)
+ * generate as needed for shaders, invalidate when original matrices change
+ *
+ * TODO: separate Model from View transform? Batches/objects have model,
+ * camera/eye has view & projection
+ */
+} MatrixState;
+
+#define MATRIX_4X4_IDENTITY {{1.0f, 0.0f, 0.0f, 0.0f}, \
+ {0.0f, 1.0f, 0.0f, 0.0f}, \
+ {0.0f, 0.0f, 1.0f, 0.0f}, \
+ {0.0f, 0.0f, 0.0f, 1.0f}}
+
+static MatrixState state = {
+ .model_view_stack = {{MATRIX_4X4_IDENTITY}, 0},
+ .projection_stack = {{MATRIX_4X4_IDENTITY}, 0},
+ .dirty = true
+};
+
+#undef MATRIX_4X4_IDENTITY
+
+#define ModelViewStack state.model_view_stack
+#define ModelView ModelViewStack.stack[ModelViewStack.top]
+
+#define ProjectionStack state.projection_stack
+#define Projection ProjectionStack.stack[ProjectionStack.top]
+
+void gpuMatrixReset(void)
+{
+ state.model_view_stack.top = 0;
+ state.projection_stack.top = 0;
+ unit_m4(ModelView);
+ unit_m4(Projection);
+ state.dirty = true;
+}
+
+#ifdef WITH_GPU_SAFETY
+
+/* Check if matrix is numerically good */
+static void checkmat(cosnt float *m)
+{
+ const int n = 16;
+ for (int i = 0; i < n; i++) {
+#if _MSC_VER
+ BLI_assert(_finite(m[i]));
+#else
+ BLI_assert(!isinf(m[i]));
+#endif
+ }
+}
+
+#define CHECKMAT(m) checkmat((const float*)m)
+
+#else
+
+#define CHECKMAT(m)
+
+#endif
+
+
+void gpuPushMatrix(void)
+{
+ BLI_assert(ModelViewStack.top + 1 < MATRIX_STACK_DEPTH);
+ ModelViewStack.top++;
+ copy_m4_m4(ModelView, ModelViewStack.stack[ModelViewStack.top - 1]);
+}
+
+void gpuPopMatrix(void)
+{
+ BLI_assert(ModelViewStack.top > 0);
+ ModelViewStack.top--;
+ state.dirty = true;
+}
+
+void gpuPushProjectionMatrix(void)
+{
+ BLI_assert(ProjectionStack.top + 1 < MATRIX_STACK_DEPTH);
+ ProjectionStack.top++;
+ copy_m4_m4(Projection, ProjectionStack.stack[ProjectionStack.top - 1]);
+}
+
+void gpuPopProjectionMatrix(void)
+{
+ BLI_assert(ProjectionStack.top > 0);
+ ProjectionStack.top--;
+ state.dirty = true;
+}
+
+void gpuLoadMatrix(const float m[4][4])
+{
+ copy_m4_m4(ModelView, m);
+ CHECKMAT(ModelView3D);
+ state.dirty = true;
+}
+
+void gpuLoadIdentityProjectionMatrix(void)
+{
+ unit_m4(Projection);
+ CHECKMAT(Projection3D);
+ state.dirty = true;
+}
+
+void gpuLoadProjectionMatrix(const float m[4][4])
+{
+ copy_m4_m4(Projection, m);
+ CHECKMAT(Projection3D);
+ state.dirty = true;
+}
+
+void gpuLoadIdentity(void)
+{
+ unit_m4(ModelView);
+ state.dirty = true;
+}
+
+void gpuTranslate2f(float x, float y)
+{
+ Mat4 m;
+ unit_m4(m);
+ m[3][0] = x;
+ m[3][1] = y;
+ gpuMultMatrix(m);
+}
+
+void gpuTranslate2fv(const float vec[2])
+{
+ gpuTranslate2f(vec[0], vec[1]);
+}
+
+void gpuTranslate3f(float x, float y, float z)
+{
+#if 1
+ translate_m4(ModelView, x, y, z);
+ CHECKMAT(ModelView);
+#else /* above works well in early testing, below is generic version */
+ Mat4 m;
+ unit_m4(m);
+ m[3][0] = x;
+ m[3][1] = y;
+ m[3][2] = z;
+ gpuMultMatrix(m);
+#endif
+ state.dirty = true;
+}
+
+void gpuTranslate3fv(const float vec[3])
+{
+ gpuTranslate3f(vec[0], vec[1], vec[2]);
+}
+
+void gpuScaleUniform(float factor)
+{
+ Mat4 m;
+ scale_m4_fl(m, factor);
+ gpuMultMatrix(m);
+}
+
+void gpuScale2f(float x, float y)
+{
+ Mat4 m = {{0.0f}};
+ m[0][0] = x;
+ m[1][1] = y;
+ m[2][2] = 1.0f;
+ m[3][3] = 1.0f;
+ gpuMultMatrix(m);
+}
+
+void gpuScale2fv(const float vec[2])
+{
+ gpuScale2f(vec[0], vec[1]);
+}
+
+void gpuScale3f(float x, float y, float z)
+{
+ Mat4 m = {{0.0f}};
+ m[0][0] = x;
+ m[1][1] = y;
+ m[2][2] = z;
+ m[3][3] = 1.0f;
+ gpuMultMatrix(m);
+}
+
+void gpuScale3fv(const float vec[3])
+{
+ gpuScale3f(vec[0], vec[1], vec[2]);
+}
+
+void gpuMultMatrix(const float m[4][4])
+{
+ mul_m4_m4_post(ModelView, m);
+ CHECKMAT(ModelView);
+ state.dirty = true;
+}
+
+void gpuRotate2D(float deg)
+{
+ /* essentially RotateAxis('Z')
+ * TODO: simpler math for 2D case
+ */
+ rotate_m4(ModelView, 'Z', DEG2RADF(deg));
+}
+
+void gpuRotate3f(float deg, float x, float y, float z)
+{
+ const float axis[3] = {x, y, z};
+ gpuRotate3fv(deg, axis);
+}
+
+void gpuRotate3fv(float deg, const float axis[3])
+{
+ Mat4 m;
+ axis_angle_to_mat4(m, axis, DEG2RADF(deg));
+ gpuMultMatrix(m);
+}
+
+void gpuRotateAxis(float deg, char axis)
+{
+ /* rotate_m4 works in place */
+ rotate_m4(ModelView, axis, DEG2RADF(deg));
+ CHECKMAT(ModelView);
+ state.dirty = true;
+}
+
+static void mat4_ortho_set(float m[4][4], float left, float right, float bottom, float top, float near, float far)
+{
+ m[0][0] = 2.0f / (right - left);
+ m[1][0] = 0.0f;
+ m[2][0] = 0.0f;
+ m[3][0] = -(right + left) / (right - left);
+
+ m[0][1] = 0.0f;
+ m[1][1] = 2.0f / (top - bottom);
+ m[2][1] = 0.0f;
+ m[3][1] = -(top + bottom) / (top - bottom);
+
+ m[0][2] = 0.0f;
+ m[1][2] = 0.0f;
+ m[2][2] = -2.0f / (far - near);
+ m[3][2] = -(far + near) / (far - near);
+
+ m[0][3] = 0.0f;
+ m[1][3] = 0.0f;
+ m[2][3] = 0.0f;
+ m[3][3] = 1.0f;
+
+ state.dirty = true;
+}
+
+static void mat4_frustum_set(float m[4][4], float left, float right, float bottom, float top, float near, float far)
+{
+ m[0][0] = 2.0f * near / (right - left);
+ m[1][0] = 0.0f;
+ m[2][0] = (right + left) / (right - left);
+ m[3][0] = 0.0f;
+
+ m[0][1] = 0.0f;
+ m[1][1] = 2.0f * near / (top - bottom);
+ m[2][1] = (top + bottom) / (top - bottom);
+ m[3][1] = 0.0f;
+
+ m[0][2] = 0.0f;
+ m[1][2] = 0.0f;
+ m[2][2] = -(far + near) / (far - near);
+ m[3][2] = -2.0f * far * near / (far - near);
+
+ m[0][3] = 0.0f;
+ m[1][3] = 0.0f;
+ m[2][3] = -1.0f;
+ m[3][3] = 0.0f;
+
+ state.dirty = true;
+}
+
+static void mat4_look_from_origin(float m[4][4], float lookdir[3], float camup[3])
+{
+/* This function is loosely based on Mesa implementation.
+ *
+ * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+ * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice including the dates of first publication and
+ * either this permission notice or a reference to
+ * http://oss.sgi.com/projects/FreeB/
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Silicon Graphics, Inc.
+ * shall not be used in advertising or otherwise to promote the sale, use or
+ * other dealings in this Software without prior written authorization from
+ * Silicon Graphics, Inc.
+ */
+
+ float side[3];
+
+ normalize_v3(lookdir);
+
+ cross_v3_v3v3(side, lookdir, camup);
+
+ normalize_v3(side);
+
+ cross_v3_v3v3(camup, side, lookdir);
+
+ m[0][0] = side[0];
+ m[1][0] = side[1];
+ m[2][0] = side[2];
+ m[3][0] = 0.0f;
+
+ m[0][1] = camup[0];
+ m[1][1] = camup[1];
+ m[2][1] = camup[2];
+ m[3][1] = 0.0f;
+
+ m[0][2] = -lookdir[0];
+ m[1][2] = -lookdir[1];
+ m[2][2] = -lookdir[2];
+ m[3][2] = 0.0f;
+
+ m[0][3] = 0.0f;
+ m[1][3] = 0.0f;
+ m[2][3] = 0.0f;
+ m[3][3] = 1.0f;
+
+ state.dirty = true;
+}
+
+void gpuOrtho(float left, float right, float bottom, float top, float near, float far)
+{
+ mat4_ortho_set(Projection, left, right, bottom, top, near, far);
+ CHECKMAT(Projection);
+ state.dirty = true;
+}
+
+void gpuOrtho2D(float left, float right, float bottom, float top)
+{
+ Mat4 m;
+ mat4_ortho_set(m, left, right, bottom, top, -1.0f, 1.0f);
+ CHECKMAT(Projection2D);
+ state.dirty = true;
+}
+
+void gpuFrustum(float left, float right, float bottom, float top, float near, float far)
+{
+ mat4_frustum_set(Projection, left, right, bottom, top, near, far);
+ CHECKMAT(Projection);
+ state.dirty = true;
+}
+
+void gpuPerspective(float fovy, float aspect, float near, float far)
+{
+ float half_height = tanf(fovy * (float)(M_PI / 360.0)) * near;
+ float half_width = half_height * aspect;
+ gpuFrustum(-half_width, +half_width, -half_height, +half_height, near, far);
+}
+
+void gpuLookAt(float eyeX, float eyeY, float eyeZ, float centerX, float centerY, float centerZ, float upX, float upY, float upZ)
+{
+ Mat4 cm;
+ float lookdir[3];
+ float camup[3] = {upX, upY, upZ};
+
+ lookdir[0] = centerX - eyeX;
+ lookdir[1] = centerY - eyeY;
+ lookdir[2] = centerZ - eyeZ;
+
+ mat4_look_from_origin(cm, lookdir, camup);
+
+ gpuMultMatrix(cm);
+ gpuTranslate3f(-eyeX, -eyeY, -eyeZ);
+}
+
+void gpuProject(const float world[3], const float model[4][4], const float proj[4][4], const int view[4], float win[3])
+{
+ float v[4];
+
+ mul_v4_m4v3(v, model, world);
+ mul_m4_v4(proj, v);
+
+ if (v[3] != 0.0f) {
+ mul_v3_fl(v, 1.0f / v[3]);
+ }
+
+ win[0] = view[0] + (view[2] * (v[0] + 1)) * 0.5f;
+ win[1] = view[1] + (view[3] * (v[1] + 1)) * 0.5f;
+ win[2] = (v[2] + 1) * 0.5f;
+}
+
+bool gpuUnProject(const float win[3], const float model[4][4], const float proj[4][4], const int view[4], float world[3])
+{
+ float pm[4][4];
+ float in[4];
+ float out[4];
+
+ mul_m4_m4m4(pm, proj, model);
+
+ if (!invert_m4(pm)) {
+ zero_v3(world);
+ return false;
+ }
+
+ in[0] = win[0];
+ in[1] = win[1];
+ in[2] = win[2];
+ in[3] = 1;
+
+ /* Map x and y from window coordinates */
+ in[0] = (in[0] - view[0]) / view[2];
+ in[1] = (in[1] - view[1]) / view[3];
+
+ /* Map to range -1 to +1 */
+ in[0] = 2 * in[0] - 1;
+ in[1] = 2 * in[1] - 1;
+ in[2] = 2 * in[2] - 1;
+
+ mul_v4_m4v3(out, pm, in);
+
+ if (out[3] == 0.0f) {
+ copy_v3_v3(world, out);
+ return false;
+ }
+
+ mul_v3_v3fl(world, out, 1.0f / out[3]);
+ return true;
+}
+
+const float (*gpuGetModelViewMatrix(float m[4][4]))[4]
+{
+ if (m) {
+ copy_m4_m4(m, ModelView);
+ return m;
+ }
+ else {
+ return ModelView;
+ }
+}
+
+const float (*gpuGetProjectionMatrix(float m[4][4]))[4]
+{
+ if (m) {
+ copy_m4_m4(m, Projection);
+ return m;
+ }
+ else {
+ return Projection;
+ }
+}
+
+const float (*gpuGetModelViewProjectionMatrix(float m[4][4]))[4]
+{
+ if (m == NULL) {
+ static Mat4 temp;
+ m = temp;
+ }
+
+ mul_m4_m4m4(m, Projection, ModelView);
+ return m;
+}
+
+const float (*gpuGetNormalMatrix(float m[3][3]))[3]
+{
+ if (m == NULL) {
+ static Mat3 temp3;
+ m = temp3;
+ }
+
+ copy_m3_m4(m, (const float (*)[4])gpuGetModelViewMatrix(NULL));
+
+ invert_m3(m);
+ transpose_m3(m);
+
+ return m;
+}
+
+const float (*gpuGetNormalMatrixInverse(float m[3][3]))[3]
+{
+ if (m == NULL) {
+ static Mat3 temp3;
+ m = temp3;
+ }
+
+ gpuGetNormalMatrix(m);
+ invert_m3(m);
+
+ return m;
+}
+
+void gpuBindMatrices(const Gwn_ShaderInterface *shaderface)
+{
+ /* set uniform values to matrix stack values
+ * call this before a draw call if desired matrices are dirty
+ * call glUseProgram before this, as glUniform expects program to be bound
+ */
+
+ const Gwn_ShaderInput *MV = GWN_shaderinterface_uniform_builtin(shaderface, GWN_UNIFORM_MODELVIEW);
+ const Gwn_ShaderInput *P = GWN_shaderinterface_uniform_builtin(shaderface, GWN_UNIFORM_PROJECTION);
+ const Gwn_ShaderInput *MVP = GWN_shaderinterface_uniform_builtin(shaderface, GWN_UNIFORM_MVP);
+
+ const Gwn_ShaderInput *N = GWN_shaderinterface_uniform_builtin(shaderface, GWN_UNIFORM_NORMAL);
+ const Gwn_ShaderInput *MV_inv = GWN_shaderinterface_uniform_builtin(shaderface, GWN_UNIFORM_MODELVIEW_INV);
+ const Gwn_ShaderInput *P_inv = GWN_shaderinterface_uniform_builtin(shaderface, GWN_UNIFORM_PROJECTION_INV);
+
+ if (MV) {
+#if DEBUG_MATRIX_BIND
+ puts("setting MV matrix");
+#endif
+
+ glUniformMatrix4fv(MV->location, 1, GL_FALSE, (const float *)gpuGetModelViewMatrix(NULL));
+ }
+
+ if (P) {
+#if DEBUG_MATRIX_BIND
+ puts("setting P matrix");
+#endif
+
+ glUniformMatrix4fv(P->location, 1, GL_FALSE, (const float *)gpuGetProjectionMatrix(NULL));
+ }
+
+ if (MVP) {
+#if DEBUG_MATRIX_BIND
+ puts("setting MVP matrix");
+#endif
+
+ glUniformMatrix4fv(MVP->location, 1, GL_FALSE, (const float *)gpuGetModelViewProjectionMatrix(NULL));
+ }
+
+ if (N) {
+#if DEBUG_MATRIX_BIND
+ puts("setting normal matrix");
+#endif
+
+ glUniformMatrix3fv(N->location, 1, GL_FALSE, (const float *)gpuGetNormalMatrix(NULL));
+ }
+
+ if (MV_inv) {
+ Mat4 m;
+ gpuGetModelViewMatrix(m);
+ invert_m4(m);
+ glUniformMatrix4fv(MV_inv->location, 1, GL_FALSE, (const float *)m);
+ }
+
+ if (P_inv) {
+ Mat4 m;
+ gpuGetProjectionMatrix(m);
+ invert_m4(m);
+ glUniformMatrix4fv(P_inv->location, 1, GL_FALSE, (const float *)m);
+ }
+
+ state.dirty = false;
+}
+
+bool gpuMatricesDirty(void)
+{
+ return state.dirty;
+}
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Python API Helpers
+ * \{ */
+BLI_STATIC_ASSERT(GPU_PY_MATRIX_STACK_LEN + 1 == MATRIX_STACK_DEPTH, "define mismatch");
+
+/* Return int since caller is may subtract. */
+
+int GPU_matrix_stack_level_get_model_view(void)
+{
+ return (int)state.model_view_stack.top;
+}
+
+int GPU_matrix_stack_level_get_projection(void)
+{
+ return (int)state.projection_stack.top;
+}
+
+/** \} */
diff --git a/source/blender/gpu/intern/gpu_select.c b/source/blender/gpu/intern/gpu_select.c
index 632b0cfee1b..153cf5f1e97 100644
--- a/source/blender/gpu/intern/gpu_select.c
+++ b/source/blender/gpu/intern/gpu_select.c
@@ -187,12 +187,7 @@ unsigned int GPU_select_end(void)
*/
bool GPU_select_query_check_active(void)
{
- return ((U.gpu_select_method == USER_SELECT_USE_OCCLUSION_QUERY) ||
- ((U.gpu_select_method == USER_SELECT_AUTO) &&
- (GPU_type_matches(GPU_DEVICE_ATI, GPU_OS_ANY, GPU_DRIVER_ANY) ||
- /* unsupported by nouveau, gallium 0.4, see: T47940 */
- GPU_type_matches(GPU_DEVICE_NVIDIA, GPU_OS_UNIX, GPU_DRIVER_OPENSOURCE))));
-
+ return ELEM(U.gpu_select_method, USER_SELECT_USE_OCCLUSION_QUERY, USER_SELECT_AUTO);
}
/* ----------------------------------------------------------------------------
@@ -232,3 +227,29 @@ bool GPU_select_is_cached(void)
{
return g_select_state.use_cache && gpu_select_pick_is_cached();
}
+
+
+/* ----------------------------------------------------------------------------
+ * Utilities
+ */
+
+/**
+ * Helper function, nothing special but avoids doing inline since hit's aren't sorted by depth
+ * and purpose of 4x buffer indices isn't so clear.
+ *
+ * Note that comparing depth as uint is fine.
+ */
+const uint *GPU_select_buffer_near(const uint *buffer, int hits)
+{
+ const uint *buffer_near = NULL;
+ uint depth_min = (uint)-1;
+ for (int i = 0; i < hits; i++) {
+ if (buffer[1] < depth_min) {
+ BLI_assert(buffer[3] != -1);
+ depth_min = buffer[1];
+ buffer_near = buffer;
+ }
+ buffer += 4;
+ }
+ return buffer_near;
+}
diff --git a/source/blender/gpu/intern/gpu_select_pick.c b/source/blender/gpu/intern/gpu_select_pick.c
index 0a77420fa25..f1d311890e6 100644
--- a/source/blender/gpu/intern/gpu_select_pick.c
+++ b/source/blender/gpu/intern/gpu_select_pick.c
@@ -31,6 +31,8 @@
#include <stdlib.h>
#include <float.h>
+#include "GPU_immediate.h"
+#include "GPU_draw.h"
#include "GPU_select.h"
#include "GPU_extensions.h"
#include "GPU_glew.h"
@@ -316,8 +318,8 @@ void gpu_select_pick_begin(
/* Restrict OpenGL operations for when we don't have cache */
if (ps->is_cached == false) {
+ gpuPushAttrib(GPU_DEPTH_BUFFER_BIT | GPU_VIEWPORT_BIT);
- glPushAttrib(GL_DEPTH_BUFFER_BIT | GL_VIEWPORT_BIT);
/* disable writing to the framebuffer */
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
@@ -331,10 +333,6 @@ void gpu_select_pick_begin(
glDepthFunc(GL_LEQUAL);
}
- /* set just in case */
- glPixelTransferf(GL_DEPTH_BIAS, 0.0);
- glPixelTransferf(GL_DEPTH_SCALE, 1.0);
-
float viewport[4];
glGetFloatv(GL_SCISSOR_BOX, viewport);
@@ -540,7 +538,7 @@ unsigned int gpu_select_pick_end(void)
gpu_select_pick_load_id(ps->gl.prev_id);
}
- glPopAttrib();
+ gpuPopAttrib();
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
}
diff --git a/source/blender/gpu/intern/gpu_select_sample_query.c b/source/blender/gpu/intern/gpu_select_sample_query.c
index 3d589986281..e3bd20f3776 100644
--- a/source/blender/gpu/intern/gpu_select_sample_query.c
+++ b/source/blender/gpu/intern/gpu_select_sample_query.c
@@ -32,6 +32,8 @@
#include <stdlib.h>
+#include "GPU_immediate.h"
+#include "GPU_draw.h"
#include "GPU_select.h"
#include "GPU_extensions.h"
#include "GPU_glew.h"
@@ -94,7 +96,7 @@ void gpu_select_query_begin(
g_query_state.id = MEM_mallocN(g_query_state.num_of_queries * sizeof(*g_query_state.id), "gpu selection ids");
glGenQueries(g_query_state.num_of_queries, g_query_state.queries);
- glPushAttrib(GL_DEPTH_BUFFER_BIT | GL_VIEWPORT_BIT);
+ gpuPushAttrib(GPU_DEPTH_BUFFER_BIT | GPU_VIEWPORT_BIT);
/* disable writing to the framebuffer */
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
@@ -206,7 +208,7 @@ unsigned int gpu_select_query_end(void)
glDeleteQueries(g_query_state.num_of_queries, g_query_state.queries);
MEM_freeN(g_query_state.queries);
MEM_freeN(g_query_state.id);
- glPopAttrib();
+ gpuPopAttrib();
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
return hits;
diff --git a/source/blender/gpu/intern/gpu_shader.c b/source/blender/gpu/intern/gpu_shader.c
index b579f87698c..598722d372b 100644
--- a/source/blender/gpu/intern/gpu_shader.c
+++ b/source/blender/gpu/intern/gpu_shader.c
@@ -30,22 +30,113 @@
#include "BLI_utildefines.h"
#include "BLI_math_base.h"
#include "BLI_math_vector.h"
+#include "BLI_path_util.h"
+#include "BKE_appdir.h"
#include "BKE_global.h"
+#include "DNA_space_types.h"
+
#include "GPU_compositing.h"
-#include "GPU_debug.h"
#include "GPU_extensions.h"
-#include "GPU_glew.h"
+#include "GPU_matrix.h"
#include "GPU_shader.h"
#include "GPU_texture.h"
-#include "GPU_material.h"
+#include "GPU_uniformbuffer.h"
+
+#include "gpu_shader_private.h"
-/* TODO(sergey): Find better default values for this constants. */
-#define MAX_DEFINE_LENGTH 1024
-#define MAX_EXT_DEFINE_LENGTH 1024
+/* Adjust these constants as needed. */
+#define MAX_DEFINE_LENGTH 256
+#define MAX_EXT_DEFINE_LENGTH 256
/* Non-generated shaders */
+extern char datatoc_gpu_shader_depth_only_frag_glsl[];
+extern char datatoc_gpu_shader_uniform_color_frag_glsl[];
+extern char datatoc_gpu_shader_checker_frag_glsl[];
+extern char datatoc_gpu_shader_diag_stripes_frag_glsl[];
+extern char datatoc_gpu_shader_simple_lighting_frag_glsl[];
+extern char datatoc_gpu_shader_simple_lighting_flat_color_frag_glsl[];
+extern char datatoc_gpu_shader_simple_lighting_smooth_color_frag_glsl[];
+extern char datatoc_gpu_shader_simple_lighting_smooth_color_alpha_frag_glsl[];
+extern char datatoc_gpu_shader_flat_color_frag_glsl[];
+extern char datatoc_gpu_shader_flat_color_alpha_test_0_frag_glsl[];
+extern char datatoc_gpu_shader_2D_vert_glsl[];
+extern char datatoc_gpu_shader_2D_flat_color_vert_glsl[];
+extern char datatoc_gpu_shader_2D_smooth_color_vert_glsl[];
+extern char datatoc_gpu_shader_2D_smooth_color_frag_glsl[];
+extern char datatoc_gpu_shader_2D_image_vert_glsl[];
+
+extern char datatoc_gpu_shader_3D_image_vert_glsl[];
+extern char datatoc_gpu_shader_image_linear_frag_glsl[];
+extern char datatoc_gpu_shader_image_color_frag_glsl[];
+extern char datatoc_gpu_shader_image_alpha_color_frag_glsl[];
+extern char datatoc_gpu_shader_image_shuffle_color_frag_glsl[];
+extern char datatoc_gpu_shader_image_interlace_frag_glsl[];
+extern char datatoc_gpu_shader_image_mask_uniform_color_frag_glsl[];
+extern char datatoc_gpu_shader_image_modulate_alpha_frag_glsl[];
+extern char datatoc_gpu_shader_image_rect_modulate_alpha_frag_glsl[];
+extern char datatoc_gpu_shader_image_depth_linear_frag_glsl[];
+extern char datatoc_gpu_shader_3D_vert_glsl[];
+extern char datatoc_gpu_shader_3D_normal_vert_glsl[];
+extern char datatoc_gpu_shader_3D_flat_color_vert_glsl[];
+extern char datatoc_gpu_shader_3D_smooth_color_vert_glsl[];
+extern char datatoc_gpu_shader_3D_normal_flat_color_vert_glsl[];
+extern char datatoc_gpu_shader_3D_normal_smooth_color_vert_glsl[];
+extern char datatoc_gpu_shader_3D_smooth_color_frag_glsl[];
+extern char datatoc_gpu_shader_3D_passthrough_vert_glsl[];
+extern char datatoc_gpu_shader_3D_clipped_uniform_color_vert_glsl[];
+
+extern char datatoc_gpu_shader_instance_vert_glsl[];
+extern char datatoc_gpu_shader_instance_variying_size_variying_color_vert_glsl[];
+extern char datatoc_gpu_shader_instance_objectspace_variying_color_vert_glsl[];
+extern char datatoc_gpu_shader_instance_screenspace_variying_color_vert_glsl[];
+extern char datatoc_gpu_shader_instance_screen_aligned_vert_glsl[];
+extern char datatoc_gpu_shader_instance_camera_vert_glsl[];
+extern char datatoc_gpu_shader_instance_distance_line_vert_glsl[];
+extern char datatoc_gpu_shader_instance_edges_variying_color_geom_glsl[];
+extern char datatoc_gpu_shader_instance_edges_variying_color_vert_glsl[];
+extern char datatoc_gpu_shader_instance_bone_envelope_solid_vert_glsl[];
+extern char datatoc_gpu_shader_instance_bone_envelope_wire_vert_glsl[];
+extern char datatoc_gpu_shader_instance_mball_helpers_vert_glsl[];
+
+extern char datatoc_gpu_shader_3D_groundpoint_vert_glsl[];
+extern char datatoc_gpu_shader_3D_groundline_geom_glsl[];
+
+extern char datatoc_gpu_shader_point_uniform_color_frag_glsl[];
+extern char datatoc_gpu_shader_point_uniform_color_aa_frag_glsl[];
+extern char datatoc_gpu_shader_point_uniform_color_outline_aa_frag_glsl[];
+extern char datatoc_gpu_shader_point_varying_color_outline_aa_frag_glsl[];
+extern char datatoc_gpu_shader_point_varying_color_frag_glsl[];
+extern char datatoc_gpu_shader_3D_point_fixed_size_varying_color_vert_glsl[];
+extern char datatoc_gpu_shader_3D_point_varying_size_vert_glsl[];
+extern char datatoc_gpu_shader_3D_point_varying_size_varying_color_vert_glsl[];
+extern char datatoc_gpu_shader_3D_point_uniform_size_aa_vert_glsl[];
+extern char datatoc_gpu_shader_3D_point_uniform_size_outline_aa_vert_glsl[];
+extern char datatoc_gpu_shader_2D_point_varying_size_varying_color_vert_glsl[];
+extern char datatoc_gpu_shader_2D_point_uniform_size_aa_vert_glsl[];
+extern char datatoc_gpu_shader_2D_point_uniform_size_outline_aa_vert_glsl[];
+extern char datatoc_gpu_shader_2D_point_uniform_size_varying_color_outline_aa_vert_glsl[];
+
+extern char datatoc_gpu_shader_2D_line_dashed_uniform_color_vert_glsl[];
+extern char datatoc_gpu_shader_2D_line_dashed_frag_glsl[];
+extern char datatoc_gpu_shader_2D_line_dashed_geom_glsl[];
+extern char datatoc_gpu_shader_3D_line_dashed_uniform_color_legacy_vert_glsl[];
+extern char datatoc_gpu_shader_3D_line_dashed_uniform_color_vert_glsl[];
+
+extern char datatoc_gpu_shader_edges_front_back_persp_vert_glsl[];
+extern char datatoc_gpu_shader_edges_front_back_persp_geom_glsl[];
+extern char datatoc_gpu_shader_edges_front_back_persp_legacy_vert_glsl[];
+extern char datatoc_gpu_shader_edges_front_back_ortho_vert_glsl[];
+extern char datatoc_gpu_shader_edges_overlay_vert_glsl[];
+extern char datatoc_gpu_shader_edges_overlay_geom_glsl[];
+extern char datatoc_gpu_shader_edges_overlay_simple_geom_glsl[];
+extern char datatoc_gpu_shader_edges_overlay_frag_glsl[];
+extern char datatoc_gpu_shader_text_vert_glsl[];
+extern char datatoc_gpu_shader_text_frag_glsl[];
+extern char datatoc_gpu_shader_keyframe_diamond_vert_glsl[];
+extern char datatoc_gpu_shader_keyframe_diamond_frag_glsl[];
+
extern char datatoc_gpu_shader_fire_frag_glsl[];
extern char datatoc_gpu_shader_smoke_vert_glsl[];
extern char datatoc_gpu_shader_smoke_frag_glsl[];
@@ -53,7 +144,7 @@ extern char datatoc_gpu_shader_vsm_store_vert_glsl[];
extern char datatoc_gpu_shader_vsm_store_frag_glsl[];
extern char datatoc_gpu_shader_sep_gaussian_blur_vert_glsl[];
extern char datatoc_gpu_shader_sep_gaussian_blur_frag_glsl[];
-extern char datatoc_gpu_shader_fx_vert_glsl[];
+extern char datatoc_gpu_shader_fullscreen_vert_glsl[];
extern char datatoc_gpu_shader_fx_ssao_frag_glsl[];
extern char datatoc_gpu_shader_fx_dof_frag_glsl[];
extern char datatoc_gpu_shader_fx_dof_vert_glsl[];
@@ -63,41 +154,25 @@ extern char datatoc_gpu_shader_fx_dof_hq_geo_glsl[];
extern char datatoc_gpu_shader_fx_depth_resolve_glsl[];
extern char datatoc_gpu_shader_fx_lib_glsl[];
-static struct GPUShadersGlobal {
- struct {
- GPUShader *vsm_store;
- GPUShader *sep_gaussian_blur;
- GPUShader *smoke;
- GPUShader *smoke_fire;
- GPUShader *smoke_coba;
- /* cache for shader fx. Those can exist in combinations so store them here */
- GPUShader *fx_shaders[MAX_FX_SHADERS * 2];
- } shaders;
-} GG = {{NULL}};
-
-/* GPUShader */
+/* cache of built-in shaders (each is created on first use) */
+static GPUShader *builtin_shaders[GPU_NUM_BUILTIN_SHADERS] = { NULL };
-struct GPUShader {
- GLuint program; /* handle for full program (links shader stages below) */
+/* cache for shader fx. Those can exist in combinations so store them here */
+static GPUShader *fx_shaders[MAX_FX_SHADERS * 2] = { NULL };
- GLuint vertex; /* handle for vertex shader */
- GLuint geometry; /* handle for geometry shader */
- GLuint fragment; /* handle for fragment shader */
-
- int totattrib; /* total number of attributes */
- int uniforms; /* required uniforms */
-
- void *uniform_interface; /* cached uniform interface for shader. Data depends on shader */
-};
+typedef struct {
+ const char *vert;
+ const char *frag;
+ const char *geom; /* geometry stage runs between vert & frag, but is less common, so it goes last */
+} GPUShaderStages;
static void shader_print_errors(const char *task, const char *log, const char **code, int totcode)
{
- int i;
int line = 1;
fprintf(stderr, "GPUShader: %s error:\n", task);
- for (i = 0; i < totcode; i++) {
+ for (int i = 0; i < totcode; i++) {
const char *c, *pos, *end = code[i] + strlen(code[i]);
if (G.debug & G_DEBUG) {
@@ -120,71 +195,19 @@ static void shader_print_errors(const char *task, const char *log, const char **
static const char *gpu_shader_version(void)
{
- if (GLEW_VERSION_3_2) {
- if (GLEW_ARB_compatibility) {
- return "#version 150 compatibility\n";
- /* highest version that is widely supported
- * gives us native geometry shaders!
- * use compatibility profile so we can continue using builtin shader input/output names
- */
- }
- else {
- return "#version 130\n";
- /* latest version that is compatible with existing shaders */
- }
- }
- else if (GLEW_VERSION_3_1) {
- if (GLEW_ARB_compatibility) {
- return "#version 140\n";
- /* also need the ARB_compatibility extension, handled below */
- }
- else {
- return "#version 130\n";
- /* latest version that is compatible with existing shaders */
- }
- }
- else if (GLEW_VERSION_3_0) {
- return "#version 130\n";
- /* GLSL 1.3 has modern syntax/keywords/datatypes so use if available
- * older features are deprecated but still available without compatibility extension or profile
- */
- }
- else {
- return "#version 120\n";
- /* minimum supported */
- }
+ return "#version 330\n";
}
-
-static void gpu_shader_standard_extensions(char defines[MAX_EXT_DEFINE_LENGTH], bool use_geometry_shader)
+static void gpu_shader_standard_extensions(char defines[MAX_EXT_DEFINE_LENGTH])
{
/* enable extensions for features that are not part of our base GLSL version
* don't use an extension for something already available!
*/
if (GLEW_ARB_texture_query_lod) {
- /* a #version 400 feature, but we use #version 150 maximum so use extension */
+ /* a #version 400 feature, but we use #version 330 maximum so use extension */
strcat(defines, "#extension GL_ARB_texture_query_lod: enable\n");
}
-
- if (use_geometry_shader && GPU_geometry_shader_support_via_extension()) {
- strcat(defines, "#extension GL_EXT_geometry_shader4: enable\n");
- }
-
- if (GLEW_VERSION_3_1 && !GLEW_VERSION_3_2 && GLEW_ARB_compatibility) {
- strcat(defines, "#extension GL_ARB_compatibility: enable\n");
- }
-
- if (!GLEW_VERSION_3_1) {
- if (GLEW_ARB_draw_instanced) {
- strcat(defines, "#extension GL_ARB_draw_instanced: enable\n");
- }
-
- if (!GLEW_VERSION_3_0 && GLEW_EXT_gpu_shader4) {
- strcat(defines, "#extension GL_EXT_gpu_shader4: enable\n");
- /* TODO: maybe require this? shaders become so much nicer */
- }
- }
}
static void gpu_shader_standard_defines(char defines[MAX_DEFINE_LENGTH],
@@ -207,10 +230,6 @@ static void gpu_shader_standard_defines(char defines[MAX_DEFINE_LENGTH],
if (GPU_bicubic_bump_support())
strcat(defines, "#define BUMP_BICUBIC\n");
- if (GLEW_VERSION_3_0) {
- strcat(defines, "#define BIT_OPERATIONS\n");
- }
-
#ifdef WITH_OPENSUBDIV
/* TODO(sergey): Check whether we actually compiling shader for
* the OpenSubdiv mesh.
@@ -243,37 +262,71 @@ GPUShader *GPU_shader_create(const char *vertexcode,
const char *fragcode,
const char *geocode,
const char *libcode,
- const char *defines,
- int input,
- int output,
- int number)
+ const char *defines)
{
return GPU_shader_create_ex(vertexcode,
fragcode,
geocode,
libcode,
defines,
- input,
- output,
- number,
GPU_SHADER_FLAGS_NONE);
}
+#define DEBUG_SHADER_NONE ""
+#define DEBUG_SHADER_VERTEX "vert"
+#define DEBUG_SHADER_FRAGMENT "frag"
+#define DEBUG_SHADER_GEOMETRY "geom"
+
+/**
+ * Dump GLSL shaders to disk
+ *
+ * This is used for profiling shader performance externally and debug if shader code is correct.
+ * If called with no code, it simply bumps the shader index, so different shaders for the same
+ * program share the same index.
+ */
+static void gpu_dump_shaders(const char **code, const int num_shaders, const char *extension)
+{
+ if ((G.debug & G_DEBUG_GPU_SHADERS) == 0) {
+ return;
+ }
+
+ /* We use the same shader index for shaders in the same program.
+ * So we call this function once before calling for the invidual shaders. */
+ static int shader_index = 0;
+ if (code == NULL) {
+ shader_index++;
+ BLI_assert(STREQ(DEBUG_SHADER_NONE, extension));
+ return;
+ }
+
+ /* Determine the full path of the new shader. */
+ char shader_path[FILE_MAX];
+
+ char file_name[512] = {'\0'};
+ sprintf(file_name, "%04d.%s", shader_index, extension);
+
+ BLI_join_dirfile(shader_path, sizeof(shader_path), BKE_tempdir_session(), file_name);
+
+ /* Write shader to disk. */
+ FILE *f = fopen(shader_path, "w");
+ if (f == NULL) {
+ printf("Error writing to file: %s\n", shader_path);
+ }
+ for (int j = 0; j < num_shaders; j++) {
+ fprintf(f, "%s", code[j]);
+ }
+ fclose(f);
+ printf("Shader file written to disk: %s\n", shader_path);
+}
+
GPUShader *GPU_shader_create_ex(const char *vertexcode,
const char *fragcode,
const char *geocode,
const char *libcode,
const char *defines,
- int input,
- int output,
- int number,
const int flags)
{
#ifdef WITH_OPENSUBDIV
- /* TODO(sergey): used to add #version 150 to the geometry shader.
- * Could safely be renamed to "use_geometry_code" since it's very
- * likely any of geometry code will want to use GLSL 1.5.
- */
bool use_opensubdiv = (flags & GPU_SHADER_FLAGS_SPECIAL_OPENSUBDIV) != 0;
#else
UNUSED_VARS(flags);
@@ -286,10 +339,8 @@ GPUShader *GPU_shader_create_ex(const char *vertexcode,
char standard_defines[MAX_DEFINE_LENGTH] = "";
char standard_extensions[MAX_EXT_DEFINE_LENGTH] = "";
- if (geocode && !GPU_geometry_shader_support())
- return NULL;
-
shader = MEM_callocN(sizeof(GPUShader), "GPUShader");
+ gpu_dump_shaders(NULL, 0, DEBUG_SHADER_NONE);
if (vertexcode)
shader->vertex = glCreateShader(GL_VERTEX_SHADER);
@@ -313,7 +364,7 @@ GPUShader *GPU_shader_create_ex(const char *vertexcode,
gpu_shader_standard_defines(standard_defines,
use_opensubdiv,
(flags & GPU_SHADER_FLAGS_NEW_SHADING) != 0);
- gpu_shader_standard_extensions(standard_extensions, geocode != NULL);
+ gpu_shader_standard_extensions(standard_extensions);
if (vertexcode) {
const char *source[5];
@@ -327,6 +378,8 @@ GPUShader *GPU_shader_create_ex(const char *vertexcode,
if (defines) source[num_source++] = defines;
source[num_source++] = vertexcode;
+ gpu_dump_shaders(source, num_source, DEBUG_SHADER_VERTEX);
+
glAttachShader(shader->program, shader->vertex);
glShaderSource(shader->vertex, num_source, source, NULL);
@@ -366,6 +419,8 @@ GPUShader *GPU_shader_create_ex(const char *vertexcode,
if (libcode) source[num_source++] = libcode;
source[num_source++] = fragcode;
+ gpu_dump_shaders(source, num_source, DEBUG_SHADER_FRAGMENT);
+
glAttachShader(shader->program, shader->fragment);
glShaderSource(shader->fragment, num_source, source, NULL);
@@ -392,6 +447,8 @@ GPUShader *GPU_shader_create_ex(const char *vertexcode,
if (defines) source[num_source++] = defines;
source[num_source++] = geocode;
+ gpu_dump_shaders(source, num_source, DEBUG_SHADER_GEOMETRY);
+
glAttachShader(shader->program, shader->geometry);
glShaderSource(shader->geometry, num_source, source, NULL);
@@ -405,20 +462,12 @@ GPUShader *GPU_shader_create_ex(const char *vertexcode,
GPU_shader_free(shader);
return NULL;
}
-
- if (!use_opensubdiv) {
- GPU_shader_geometry_stage_primitive_io(shader, input, output, number);
- }
}
#ifdef WITH_OPENSUBDIV
if (use_opensubdiv) {
glBindAttribLocation(shader->program, 0, "position");
glBindAttribLocation(shader->program, 1, "normal");
- GPU_shader_geometry_stage_primitive_io(shader,
- GL_LINES_ADJACENCY_EXT,
- GL_TRIANGLE_STRIP,
- 4);
}
#endif
@@ -436,38 +485,54 @@ GPUShader *GPU_shader_create_ex(const char *vertexcode,
return NULL;
}
+ shader->interface = GWN_shaderinterface_create(shader->program);
+
#ifdef WITH_OPENSUBDIV
/* TODO(sergey): Find a better place for this. */
- if (use_opensubdiv && GLEW_VERSION_4_1) {
- glProgramUniform1i(shader->program,
- glGetUniformLocation(shader->program, "FVarDataOffsetBuffer"),
- 30); /* GL_TEXTURE30 */
-
- glProgramUniform1i(shader->program,
- glGetUniformLocation(shader->program, "FVarDataBuffer"),
- 31); /* GL_TEXTURE31 */
+ if (use_opensubdiv) {
+ if (GLEW_VERSION_4_1) {
+ glProgramUniform1i(shader->program,
+ GWN_shaderinterface_uniform(shader->interface, "FVarDataOffsetBuffer")->location,
+ 30); /* GL_TEXTURE30 */
+
+ glProgramUniform1i(shader->program,
+ GWN_shaderinterface_uniform(shader->interface, "FVarDataBuffer")->location,
+ 31); /* GL_TEXTURE31 */
+ }
+ else {
+ glUseProgram(shader->program);
+ glUniform1i(GWN_shaderinterface_uniform(shader->interface, "FVarDataOffsetBuffer")->location, 30);
+ glUniform1i(GWN_shaderinterface_uniform(shader->interface, "FVarDataBuffer")->location, 31);
+ glUseProgram(0);
+ }
}
#endif
return shader;
}
+#undef DEBUG_SHADER_GEOMETRY
+#undef DEBUG_SHADER_FRAGMENT
+#undef DEBUG_SHADER_VERTEX
+#undef DEBUG_SHADER_NONE
+
void GPU_shader_bind(GPUShader *shader)
{
- GPU_ASSERT_NO_GL_ERRORS("Pre Shader Bind");
+ BLI_assert(shader && shader->program);
+
glUseProgram(shader->program);
- GPU_ASSERT_NO_GL_ERRORS("Post Shader Bind");
+ gpuBindMatrices(shader->interface);
}
void GPU_shader_unbind(void)
{
- GPU_ASSERT_NO_GL_ERRORS("Pre Shader Unbind");
glUseProgram(0);
- GPU_ASSERT_NO_GL_ERRORS("Post Shader Unbind");
}
void GPU_shader_free(GPUShader *shader)
{
+ BLI_assert(shader);
+
if (shader->vertex)
glDeleteShader(shader->vertex);
if (shader->geometry)
@@ -480,20 +545,51 @@ void GPU_shader_free(GPUShader *shader)
if (shader->uniform_interface)
MEM_freeN(shader->uniform_interface);
+ if (shader->interface)
+ GWN_shaderinterface_discard(shader->interface);
+
MEM_freeN(shader);
}
int GPU_shader_get_uniform(GPUShader *shader, const char *name)
{
- return glGetUniformLocation(shader->program, name);
+ BLI_assert(shader && shader->program);
+ const Gwn_ShaderInput *uniform = GWN_shaderinterface_uniform(shader->interface, name);
+ return uniform ? uniform->location : -1;
}
-void *GPU_shader_get_interface(GPUShader *shader)
+int GPU_shader_get_builtin_uniform(GPUShader *shader, int builtin)
+{
+ BLI_assert(shader && shader->program);
+ const Gwn_ShaderInput *uniform = GWN_shaderinterface_uniform_builtin(shader->interface, builtin);
+ return uniform ? uniform->location : -1;
+}
+
+int GPU_shader_get_uniform_block(GPUShader *shader, const char *name)
+{
+ BLI_assert(shader && shader->program);
+
+ const Gwn_ShaderInput *ubo = GWN_shaderinterface_ubo(shader->interface, name);
+ return ubo ? ubo->location : -1;
+}
+
+void *GPU_fx_shader_get_interface(GPUShader *shader)
{
return shader->uniform_interface;
}
-void GPU_shader_set_interface(GPUShader *shader, void *interface)
+void *GPU_shader_get_interface(GPUShader *shader)
+{
+ return shader->interface;
+}
+
+/* Clement : Temp */
+int GPU_shader_get_program(GPUShader *shader)
+{
+ return (int)shader->program;
+}
+
+void GPU_fx_shader_set_interface(GPUShader *shader, void *interface)
{
shader->uniform_interface = interface;
}
@@ -503,16 +599,12 @@ void GPU_shader_uniform_vector(GPUShader *UNUSED(shader), int location, int leng
if (location == -1 || value == NULL)
return;
- GPU_ASSERT_NO_GL_ERRORS("Pre Uniform Vector");
-
if (length == 1) glUniform1fv(location, arraysize, value);
else if (length == 2) glUniform2fv(location, arraysize, value);
else if (length == 3) glUniform3fv(location, arraysize, value);
else if (length == 4) glUniform4fv(location, arraysize, value);
else if (length == 9) glUniformMatrix3fv(location, arraysize, 0, value);
else if (length == 16) glUniformMatrix4fv(location, arraysize, 0, value);
-
- GPU_ASSERT_NO_GL_ERRORS("Post Uniform Vector");
}
void GPU_shader_uniform_vector_int(GPUShader *UNUSED(shader), int location, int length, int arraysize, const int *value)
@@ -520,14 +612,10 @@ void GPU_shader_uniform_vector_int(GPUShader *UNUSED(shader), int location, int
if (location == -1)
return;
- GPU_ASSERT_NO_GL_ERRORS("Pre Uniform Vector");
-
if (length == 1) glUniform1iv(location, arraysize, value);
else if (length == 2) glUniform2iv(location, arraysize, value);
else if (length == 3) glUniform3iv(location, arraysize, value);
else if (length == 4) glUniform4iv(location, arraysize, value);
-
- GPU_ASSERT_NO_GL_ERRORS("Post Uniform Vector");
}
void GPU_shader_uniform_int(GPUShader *UNUSED(shader), int location, int value)
@@ -535,22 +623,22 @@ void GPU_shader_uniform_int(GPUShader *UNUSED(shader), int location, int value)
if (location == -1)
return;
- GPU_CHECK_ERRORS_AROUND(glUniform1i(location, value));
+ glUniform1i(location, value);
}
-void GPU_shader_geometry_stage_primitive_io(GPUShader *shader, int input, int output, int number)
+void GPU_shader_uniform_buffer(GPUShader *shader, int location, GPUUniformBuffer *ubo)
{
- if (GPU_geometry_shader_support_via_extension()) {
- /* geometry shaders must provide this info themselves for #version 150 and up */
- glProgramParameteriEXT(shader->program, GL_GEOMETRY_INPUT_TYPE_EXT, input);
- glProgramParameteriEXT(shader->program, GL_GEOMETRY_OUTPUT_TYPE_EXT, output);
- glProgramParameteriEXT(shader->program, GL_GEOMETRY_VERTICES_OUT_EXT, number);
+ int bindpoint = GPU_uniformbuffer_bindpoint(ubo);
+
+ if (location == -1) {
+ return;
}
+
+ glUniformBlockBinding(shader->program, location, bindpoint);
}
void GPU_shader_uniform_texture(GPUShader *UNUSED(shader), int location, GPUTexture *tex)
{
- GLenum arbnumber;
int number = GPU_texture_bound_number(tex);
int bindcode = GPU_texture_opengl_bindcode(tex);
int target = GPU_texture_target(tex);
@@ -566,78 +654,228 @@ void GPU_shader_uniform_texture(GPUShader *UNUSED(shader), int location, GPUText
if (location == -1)
return;
- GPU_ASSERT_NO_GL_ERRORS("Pre Uniform Texture");
-
- arbnumber = (GLenum)((GLuint)GL_TEXTURE0 + number);
+ if (number != 0)
+ glActiveTexture(GL_TEXTURE0 + number);
- if (number != 0) glActiveTexture(arbnumber);
if (bindcode != 0)
glBindTexture(target, bindcode);
else
GPU_invalid_tex_bind(target);
+
glUniform1i(location, number);
- glEnable(target);
- if (number != 0) glActiveTexture(GL_TEXTURE0);
- GPU_ASSERT_NO_GL_ERRORS("Post Uniform Texture");
+ if (number != 0)
+ glActiveTexture(GL_TEXTURE0);
}
int GPU_shader_get_attribute(GPUShader *shader, const char *name)
{
- int index;
-
- GPU_CHECK_ERRORS_AROUND(index = glGetAttribLocation(shader->program, name));
-
- return index;
+ BLI_assert(shader && shader->program);
+ const Gwn_ShaderInput *attrib = GWN_shaderinterface_attr(shader->interface, name);
+ return attrib ? attrib->location : -1;
}
GPUShader *GPU_shader_get_builtin_shader(GPUBuiltinShader shader)
{
- GPUShader *retval = NULL;
-
- switch (shader) {
- case GPU_SHADER_VSM_STORE:
- if (!GG.shaders.vsm_store)
- GG.shaders.vsm_store = GPU_shader_create(
- datatoc_gpu_shader_vsm_store_vert_glsl, datatoc_gpu_shader_vsm_store_frag_glsl,
- NULL, NULL, NULL, 0, 0, 0);
- retval = GG.shaders.vsm_store;
- break;
- case GPU_SHADER_SEP_GAUSSIAN_BLUR:
- if (!GG.shaders.sep_gaussian_blur)
- GG.shaders.sep_gaussian_blur = GPU_shader_create(
- datatoc_gpu_shader_sep_gaussian_blur_vert_glsl,
- datatoc_gpu_shader_sep_gaussian_blur_frag_glsl,
- NULL, NULL, NULL, 0, 0, 0);
- retval = GG.shaders.sep_gaussian_blur;
- break;
- case GPU_SHADER_SMOKE:
- if (!GG.shaders.smoke)
- GG.shaders.smoke = GPU_shader_create(
- datatoc_gpu_shader_smoke_vert_glsl, datatoc_gpu_shader_smoke_frag_glsl,
- NULL, NULL, NULL, 0, 0, 0);
- retval = GG.shaders.smoke;
- break;
- case GPU_SHADER_SMOKE_FIRE:
- if (!GG.shaders.smoke_fire)
- GG.shaders.smoke_fire = GPU_shader_create(
- datatoc_gpu_shader_smoke_vert_glsl, datatoc_gpu_shader_fire_frag_glsl,
- NULL, NULL, NULL, 0, 0, 0);
- retval = GG.shaders.smoke_fire;
- break;
- case GPU_SHADER_SMOKE_COBA:
- if (!GG.shaders.smoke_coba)
- GG.shaders.smoke_coba = GPU_shader_create(
- datatoc_gpu_shader_smoke_vert_glsl, datatoc_gpu_shader_smoke_frag_glsl,
- NULL, NULL, "#define USE_COBA;\n", 0, 0, 0);
- retval = GG.shaders.smoke_coba;
- break;
- }
+ BLI_assert(shader != GPU_NUM_BUILTIN_SHADERS); /* don't be a troll */
+
+ static const GPUShaderStages builtin_shader_stages[GPU_NUM_BUILTIN_SHADERS] = {
+ [GPU_SHADER_VSM_STORE] = { datatoc_gpu_shader_vsm_store_vert_glsl, datatoc_gpu_shader_vsm_store_frag_glsl },
+ [GPU_SHADER_SEP_GAUSSIAN_BLUR] = { datatoc_gpu_shader_sep_gaussian_blur_vert_glsl,
+ datatoc_gpu_shader_sep_gaussian_blur_frag_glsl },
+ [GPU_SHADER_SMOKE] = { datatoc_gpu_shader_smoke_vert_glsl, datatoc_gpu_shader_smoke_frag_glsl },
+ [GPU_SHADER_SMOKE_FIRE] = { datatoc_gpu_shader_smoke_vert_glsl, datatoc_gpu_shader_smoke_frag_glsl },
+ [GPU_SHADER_SMOKE_COBA] = { datatoc_gpu_shader_smoke_vert_glsl, datatoc_gpu_shader_smoke_frag_glsl },
+
+ [GPU_SHADER_TEXT] = { datatoc_gpu_shader_text_vert_glsl, datatoc_gpu_shader_text_frag_glsl },
+ [GPU_SHADER_KEYFRAME_DIAMOND] = { datatoc_gpu_shader_keyframe_diamond_vert_glsl,
+ datatoc_gpu_shader_keyframe_diamond_frag_glsl },
+ [GPU_SHADER_EDGES_FRONT_BACK_PERSP] = { datatoc_gpu_shader_edges_front_back_persp_vert_glsl,
+ /* this version is */ datatoc_gpu_shader_flat_color_frag_glsl,
+ /* magical but slooow */ datatoc_gpu_shader_edges_front_back_persp_geom_glsl },
+ [GPU_SHADER_EDGES_FRONT_BACK_ORTHO] = { datatoc_gpu_shader_edges_front_back_ortho_vert_glsl,
+ datatoc_gpu_shader_flat_color_frag_glsl },
+ [GPU_SHADER_EDGES_OVERLAY_SIMPLE] = { datatoc_gpu_shader_3D_vert_glsl, datatoc_gpu_shader_edges_overlay_frag_glsl,
+ datatoc_gpu_shader_edges_overlay_simple_geom_glsl },
+ [GPU_SHADER_EDGES_OVERLAY] = { datatoc_gpu_shader_edges_overlay_vert_glsl,
+ datatoc_gpu_shader_edges_overlay_frag_glsl,
+ datatoc_gpu_shader_edges_overlay_geom_glsl },
+ [GPU_SHADER_SIMPLE_LIGHTING] = { datatoc_gpu_shader_3D_normal_vert_glsl, datatoc_gpu_shader_simple_lighting_frag_glsl },
+ /* Use 'USE_FLAT_NORMAL' to make flat shader from smooth */
+ [GPU_SHADER_SIMPLE_LIGHTING_FLAT_COLOR] = { datatoc_gpu_shader_3D_normal_smooth_color_vert_glsl, datatoc_gpu_shader_simple_lighting_smooth_color_frag_glsl },
+ [GPU_SHADER_SIMPLE_LIGHTING_SMOOTH_COLOR] = { datatoc_gpu_shader_3D_normal_smooth_color_vert_glsl, datatoc_gpu_shader_simple_lighting_smooth_color_frag_glsl },
+ [GPU_SHADER_SIMPLE_LIGHTING_SMOOTH_COLOR_ALPHA] = { datatoc_gpu_shader_3D_normal_smooth_color_vert_glsl, datatoc_gpu_shader_simple_lighting_smooth_color_alpha_frag_glsl },
+
+ [GPU_SHADER_2D_IMAGE_MASK_UNIFORM_COLOR] = { datatoc_gpu_shader_3D_image_vert_glsl,
+ datatoc_gpu_shader_image_mask_uniform_color_frag_glsl },
+ [GPU_SHADER_3D_IMAGE_MODULATE_ALPHA] = { datatoc_gpu_shader_3D_image_vert_glsl,
+ datatoc_gpu_shader_image_modulate_alpha_frag_glsl },
+ [GPU_SHADER_3D_IMAGE_RECT_MODULATE_ALPHA] = { datatoc_gpu_shader_3D_image_vert_glsl,
+ datatoc_gpu_shader_image_rect_modulate_alpha_frag_glsl },
+ [GPU_SHADER_3D_IMAGE_DEPTH] = { datatoc_gpu_shader_3D_image_vert_glsl,
+ datatoc_gpu_shader_image_depth_linear_frag_glsl },
+
+ [GPU_SHADER_2D_IMAGE_INTERLACE] = { datatoc_gpu_shader_2D_image_vert_glsl,
+ datatoc_gpu_shader_image_interlace_frag_glsl },
+ [GPU_SHADER_2D_CHECKER] = { datatoc_gpu_shader_2D_vert_glsl, datatoc_gpu_shader_checker_frag_glsl },
+
+ [GPU_SHADER_2D_DIAG_STRIPES] = { datatoc_gpu_shader_2D_vert_glsl, datatoc_gpu_shader_diag_stripes_frag_glsl },
+
+ [GPU_SHADER_2D_UNIFORM_COLOR] = { datatoc_gpu_shader_2D_vert_glsl, datatoc_gpu_shader_uniform_color_frag_glsl },
+ [GPU_SHADER_2D_FLAT_COLOR] = { datatoc_gpu_shader_2D_flat_color_vert_glsl,
+ datatoc_gpu_shader_flat_color_frag_glsl },
+ [GPU_SHADER_2D_SMOOTH_COLOR] = { datatoc_gpu_shader_2D_smooth_color_vert_glsl,
+ datatoc_gpu_shader_2D_smooth_color_frag_glsl },
+ [GPU_SHADER_2D_IMAGE_LINEAR_TO_SRGB] = { datatoc_gpu_shader_2D_image_vert_glsl,
+ datatoc_gpu_shader_image_linear_frag_glsl },
+ [GPU_SHADER_2D_IMAGE_COLOR] = { datatoc_gpu_shader_2D_image_vert_glsl,
+ datatoc_gpu_shader_image_color_frag_glsl },
+ [GPU_SHADER_2D_IMAGE_ALPHA_COLOR] = { datatoc_gpu_shader_2D_image_vert_glsl,
+ datatoc_gpu_shader_image_alpha_color_frag_glsl },
+ [GPU_SHADER_2D_IMAGE_SHUFFLE_COLOR] = { datatoc_gpu_shader_2D_image_vert_glsl,
+ datatoc_gpu_shader_image_shuffle_color_frag_glsl },
+ [GPU_SHADER_3D_UNIFORM_COLOR] = { datatoc_gpu_shader_3D_vert_glsl, datatoc_gpu_shader_uniform_color_frag_glsl },
+ [GPU_SHADER_3D_UNIFORM_COLOR_U32] = { datatoc_gpu_shader_3D_vert_glsl, datatoc_gpu_shader_uniform_color_frag_glsl },
+ [GPU_SHADER_3D_FLAT_COLOR] = { datatoc_gpu_shader_3D_flat_color_vert_glsl,
+ datatoc_gpu_shader_flat_color_frag_glsl },
+ [GPU_SHADER_3D_FLAT_COLOR_U32] = { datatoc_gpu_shader_3D_flat_color_vert_glsl,
+ datatoc_gpu_shader_flat_color_frag_glsl },
+ [GPU_SHADER_3D_SMOOTH_COLOR] = { datatoc_gpu_shader_3D_smooth_color_vert_glsl,
+ datatoc_gpu_shader_3D_smooth_color_frag_glsl },
+ [GPU_SHADER_3D_DEPTH_ONLY] = { datatoc_gpu_shader_3D_vert_glsl, datatoc_gpu_shader_depth_only_frag_glsl },
+ [GPU_SHADER_3D_CLIPPED_UNIFORM_COLOR] = { datatoc_gpu_shader_3D_clipped_uniform_color_vert_glsl,
+ datatoc_gpu_shader_uniform_color_frag_glsl },
+
+ [GPU_SHADER_3D_GROUNDPOINT] = { datatoc_gpu_shader_3D_groundpoint_vert_glsl, datatoc_gpu_shader_point_uniform_color_frag_glsl },
+ [GPU_SHADER_3D_GROUNDLINE] = { datatoc_gpu_shader_3D_passthrough_vert_glsl,
+ datatoc_gpu_shader_uniform_color_frag_glsl,
+ datatoc_gpu_shader_3D_groundline_geom_glsl },
+
+ [GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR] = { datatoc_gpu_shader_2D_line_dashed_uniform_color_vert_glsl,
+ datatoc_gpu_shader_2D_line_dashed_frag_glsl,
+ datatoc_gpu_shader_2D_line_dashed_geom_glsl },
+ [GPU_SHADER_3D_LINE_DASHED_UNIFORM_COLOR] = { datatoc_gpu_shader_3D_line_dashed_uniform_color_vert_glsl,
+ datatoc_gpu_shader_2D_line_dashed_frag_glsl,
+ datatoc_gpu_shader_2D_line_dashed_geom_glsl },
+
+ [GPU_SHADER_3D_OBJECTSPACE_SIMPLE_LIGHTING_VARIYING_COLOR] =
+ { datatoc_gpu_shader_instance_objectspace_variying_color_vert_glsl,
+ datatoc_gpu_shader_simple_lighting_frag_glsl},
+ [GPU_SHADER_3D_OBJECTSPACE_VARIYING_COLOR] = { datatoc_gpu_shader_instance_objectspace_variying_color_vert_glsl,
+ datatoc_gpu_shader_flat_color_frag_glsl},
+ [GPU_SHADER_3D_SCREENSPACE_VARIYING_COLOR] = { datatoc_gpu_shader_instance_screenspace_variying_color_vert_glsl,
+ datatoc_gpu_shader_flat_color_frag_glsl},
+ [GPU_SHADER_3D_INSTANCE_SCREEN_ALIGNED_AXIS] = { datatoc_gpu_shader_instance_screen_aligned_vert_glsl,
+ datatoc_gpu_shader_flat_color_frag_glsl},
+ [GPU_SHADER_3D_INSTANCE_SCREEN_ALIGNED] = { datatoc_gpu_shader_instance_screen_aligned_vert_glsl,
+ datatoc_gpu_shader_flat_color_frag_glsl},
+
+ [GPU_SHADER_CAMERA] = { datatoc_gpu_shader_instance_camera_vert_glsl,
+ datatoc_gpu_shader_flat_color_frag_glsl},
+ [GPU_SHADER_DISTANCE_LINES] = { datatoc_gpu_shader_instance_distance_line_vert_glsl,
+ datatoc_gpu_shader_flat_color_frag_glsl},
+
+ [GPU_SHADER_2D_POINT_FIXED_SIZE_UNIFORM_COLOR] =
+ { datatoc_gpu_shader_2D_vert_glsl, datatoc_gpu_shader_point_uniform_color_frag_glsl },
+ [GPU_SHADER_2D_POINT_VARYING_SIZE_VARYING_COLOR] =
+ { datatoc_gpu_shader_2D_point_varying_size_varying_color_vert_glsl,
+ datatoc_gpu_shader_point_varying_color_frag_glsl },
+ [GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA] =
+ { datatoc_gpu_shader_2D_point_uniform_size_aa_vert_glsl,
+ datatoc_gpu_shader_point_uniform_color_aa_frag_glsl },
+ [GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_OUTLINE_AA] =
+ { datatoc_gpu_shader_2D_point_uniform_size_outline_aa_vert_glsl,
+ datatoc_gpu_shader_point_uniform_color_outline_aa_frag_glsl },
+ [GPU_SHADER_2D_POINT_UNIFORM_SIZE_VARYING_COLOR_OUTLINE_AA] =
+ { datatoc_gpu_shader_2D_point_uniform_size_varying_color_outline_aa_vert_glsl,
+ datatoc_gpu_shader_point_varying_color_outline_aa_frag_glsl },
+ [GPU_SHADER_3D_POINT_FIXED_SIZE_UNIFORM_COLOR] = { datatoc_gpu_shader_3D_vert_glsl,
+ datatoc_gpu_shader_point_uniform_color_frag_glsl },
+ [GPU_SHADER_3D_POINT_FIXED_SIZE_VARYING_COLOR] = { datatoc_gpu_shader_3D_point_fixed_size_varying_color_vert_glsl,
+ datatoc_gpu_shader_point_varying_color_frag_glsl },
+ [GPU_SHADER_3D_POINT_VARYING_SIZE_UNIFORM_COLOR] = { datatoc_gpu_shader_3D_point_varying_size_vert_glsl,
+ datatoc_gpu_shader_point_uniform_color_frag_glsl },
+ [GPU_SHADER_3D_POINT_VARYING_SIZE_VARYING_COLOR] =
+ { datatoc_gpu_shader_3D_point_varying_size_varying_color_vert_glsl,
+ datatoc_gpu_shader_point_varying_color_frag_glsl },
+ [GPU_SHADER_3D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA] =
+ { datatoc_gpu_shader_3D_point_uniform_size_aa_vert_glsl,
+ datatoc_gpu_shader_point_uniform_color_aa_frag_glsl },
+ [GPU_SHADER_3D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_OUTLINE_AA] =
+ { datatoc_gpu_shader_3D_point_uniform_size_outline_aa_vert_glsl,
+ datatoc_gpu_shader_point_uniform_color_outline_aa_frag_glsl },
+
+ [GPU_SHADER_INSTANCE_UNIFORM_COLOR] = { datatoc_gpu_shader_instance_vert_glsl, datatoc_gpu_shader_uniform_color_frag_glsl },
+ [GPU_SHADER_INSTANCE_VARIYING_COLOR_VARIYING_SIZE] =
+ { datatoc_gpu_shader_instance_variying_size_variying_color_vert_glsl,
+ datatoc_gpu_shader_flat_color_frag_glsl },
+ [GPU_SHADER_INSTANCE_VARIYING_COLOR_VARIYING_SCALE] =
+ { datatoc_gpu_shader_instance_variying_size_variying_color_vert_glsl,
+ datatoc_gpu_shader_flat_color_frag_glsl },
+ [GPU_SHADER_INSTANCE_EDGES_VARIYING_COLOR] = { datatoc_gpu_shader_instance_edges_variying_color_vert_glsl,
+ datatoc_gpu_shader_flat_color_frag_glsl,
+ datatoc_gpu_shader_instance_edges_variying_color_geom_glsl},
+
+ [GPU_SHADER_3D_INSTANCE_BONE_ENVELOPE_SOLID] = { datatoc_gpu_shader_instance_bone_envelope_solid_vert_glsl,
+ datatoc_gpu_shader_simple_lighting_frag_glsl },
+ [GPU_SHADER_3D_INSTANCE_BONE_ENVELOPE_WIRE] = { datatoc_gpu_shader_instance_bone_envelope_wire_vert_glsl,
+ datatoc_gpu_shader_flat_color_frag_glsl },
+
+ [GPU_SHADER_3D_INSTANCE_MBALL_HELPERS] = { datatoc_gpu_shader_instance_mball_helpers_vert_glsl,
+ datatoc_gpu_shader_flat_color_frag_glsl },
+ };
+
+ if (builtin_shaders[shader] == NULL) {
+ /* just a few special cases */
+ const char *defines = NULL;
+ switch (shader) {
+ case GPU_SHADER_SMOKE_COBA:
+ defines = "#define USE_COBA;\n";
+ break;
+ case GPU_SHADER_INSTANCE_VARIYING_COLOR_VARIYING_SIZE:
+ defines = "#define UNIFORM_SCALE;\n";
+ break;
+ case GPU_SHADER_3D_INSTANCE_SCREEN_ALIGNED_AXIS:
+ defines = "#define AXIS_NAME;\n";
+ break;
+ case GPU_SHADER_3D_OBJECTSPACE_SIMPLE_LIGHTING_VARIYING_COLOR:
+ case GPU_SHADER_3D_INSTANCE_BONE_ENVELOPE_SOLID:
+ defines = "#define USE_INSTANCE_COLOR;\n";
+ break;
+ case GPU_SHADER_3D_FLAT_COLOR_U32:
+ case GPU_SHADER_3D_UNIFORM_COLOR_U32:
+ defines = "#define USE_COLOR_U32;\n";
+ break;
+ case GPU_SHADER_SIMPLE_LIGHTING_FLAT_COLOR:
+ defines = "#define USE_FLAT_NORMAL;\n";
+ break;
+ default:
+ break;
+ }
+
+ const GPUShaderStages *stages = builtin_shader_stages + shader;
- if (retval == NULL)
- printf("Unable to create a GPUShader for builtin shader: %u\n", shader);
+ if (shader == GPU_SHADER_EDGES_FRONT_BACK_PERSP && !GLEW_VERSION_3_2) {
+ /* TODO: remove after switch to core profile (maybe) */
+ static const GPUShaderStages legacy_fancy_edges =
+ { datatoc_gpu_shader_edges_front_back_persp_legacy_vert_glsl,
+ datatoc_gpu_shader_flat_color_alpha_test_0_frag_glsl };
+ stages = &legacy_fancy_edges;
+ }
+
+ if (shader == GPU_SHADER_3D_LINE_DASHED_UNIFORM_COLOR && !GLEW_VERSION_3_2) {
+ /* Dashed need geometry shader, which are not supported by legacy OpenGL, fallback to solid lines. */
+ /* TODO: remove after switch to core profile (maybe) */
+ static const GPUShaderStages legacy_dashed_lines = { datatoc_gpu_shader_3D_line_dashed_uniform_color_legacy_vert_glsl,
+ datatoc_gpu_shader_2D_line_dashed_frag_glsl };
+ stages = &legacy_dashed_lines;
+ }
- return retval;
+ /* common case */
+ builtin_shaders[shader] = GPU_shader_create(stages->vert, stages->frag, stages->geom, NULL, defines);
+ }
+
+ return builtin_shaders[shader];
}
#define MAX_DEFINES 100
@@ -657,103 +895,80 @@ GPUShader *GPU_shader_get_builtin_fx_shader(int effect, bool persp)
strcat(defines, "#define PERSP_MATRIX\n");
}
- if (!GG.shaders.fx_shaders[offset]) {
+ if (!fx_shaders[offset]) {
GPUShader *shader = NULL;
switch (effect) {
case GPU_SHADER_FX_SSAO:
- shader = GPU_shader_create(datatoc_gpu_shader_fx_vert_glsl, datatoc_gpu_shader_fx_ssao_frag_glsl, NULL, datatoc_gpu_shader_fx_lib_glsl, defines, 0, 0, 0);
+ shader = GPU_shader_create(datatoc_gpu_shader_fullscreen_vert_glsl, datatoc_gpu_shader_fx_ssao_frag_glsl, NULL, datatoc_gpu_shader_fx_lib_glsl, defines);
break;
case GPU_SHADER_FX_DEPTH_OF_FIELD_PASS_ONE:
strcat(defines, "#define FIRST_PASS\n");
- shader = GPU_shader_create(datatoc_gpu_shader_fx_dof_vert_glsl, datatoc_gpu_shader_fx_dof_frag_glsl, NULL, datatoc_gpu_shader_fx_lib_glsl, defines, 0, 0, 0);
+ shader = GPU_shader_create(datatoc_gpu_shader_fx_dof_vert_glsl, datatoc_gpu_shader_fx_dof_frag_glsl, NULL, datatoc_gpu_shader_fx_lib_glsl, defines);
break;
case GPU_SHADER_FX_DEPTH_OF_FIELD_PASS_TWO:
strcat(defines, "#define SECOND_PASS\n");
- shader = GPU_shader_create(datatoc_gpu_shader_fx_dof_vert_glsl, datatoc_gpu_shader_fx_dof_frag_glsl, NULL, datatoc_gpu_shader_fx_lib_glsl, defines, 0, 0, 0);
+ shader = GPU_shader_create(datatoc_gpu_shader_fx_dof_vert_glsl, datatoc_gpu_shader_fx_dof_frag_glsl, NULL, datatoc_gpu_shader_fx_lib_glsl, defines);
break;
case GPU_SHADER_FX_DEPTH_OF_FIELD_PASS_THREE:
strcat(defines, "#define THIRD_PASS\n");
- shader = GPU_shader_create(datatoc_gpu_shader_fx_dof_vert_glsl, datatoc_gpu_shader_fx_dof_frag_glsl, NULL, datatoc_gpu_shader_fx_lib_glsl, defines, 0, 0, 0);
+ shader = GPU_shader_create(datatoc_gpu_shader_fx_dof_vert_glsl, datatoc_gpu_shader_fx_dof_frag_glsl, NULL, datatoc_gpu_shader_fx_lib_glsl, defines);
break;
case GPU_SHADER_FX_DEPTH_OF_FIELD_PASS_FOUR:
strcat(defines, "#define FOURTH_PASS\n");
- shader = GPU_shader_create(datatoc_gpu_shader_fx_dof_vert_glsl, datatoc_gpu_shader_fx_dof_frag_glsl, NULL, datatoc_gpu_shader_fx_lib_glsl, defines, 0, 0, 0);
+ shader = GPU_shader_create(datatoc_gpu_shader_fx_dof_vert_glsl, datatoc_gpu_shader_fx_dof_frag_glsl, NULL, datatoc_gpu_shader_fx_lib_glsl, defines);
break;
case GPU_SHADER_FX_DEPTH_OF_FIELD_PASS_FIVE:
strcat(defines, "#define FIFTH_PASS\n");
- shader = GPU_shader_create(datatoc_gpu_shader_fx_dof_vert_glsl, datatoc_gpu_shader_fx_dof_frag_glsl, NULL, datatoc_gpu_shader_fx_lib_glsl, defines, 0, 0, 0);
+ shader = GPU_shader_create(datatoc_gpu_shader_fx_dof_vert_glsl, datatoc_gpu_shader_fx_dof_frag_glsl, NULL, datatoc_gpu_shader_fx_lib_glsl, defines);
break;
case GPU_SHADER_FX_DEPTH_OF_FIELD_HQ_PASS_ONE:
strcat(defines, "#define FIRST_PASS\n");
- shader = GPU_shader_create(datatoc_gpu_shader_fx_dof_hq_vert_glsl, datatoc_gpu_shader_fx_dof_hq_frag_glsl, NULL, datatoc_gpu_shader_fx_lib_glsl, defines, 0, 0, 0);
+ shader = GPU_shader_create(datatoc_gpu_shader_fx_dof_hq_vert_glsl, datatoc_gpu_shader_fx_dof_hq_frag_glsl, NULL, datatoc_gpu_shader_fx_lib_glsl, defines);
break;
case GPU_SHADER_FX_DEPTH_OF_FIELD_HQ_PASS_TWO:
strcat(defines, "#define SECOND_PASS\n");
- shader = GPU_shader_create(datatoc_gpu_shader_fx_dof_hq_vert_glsl, datatoc_gpu_shader_fx_dof_hq_frag_glsl, datatoc_gpu_shader_fx_dof_hq_geo_glsl, datatoc_gpu_shader_fx_lib_glsl,
- defines, GL_POINTS, GL_TRIANGLE_STRIP, 4);
+ shader = GPU_shader_create(datatoc_gpu_shader_fx_dof_hq_vert_glsl, datatoc_gpu_shader_fx_dof_hq_frag_glsl, datatoc_gpu_shader_fx_dof_hq_geo_glsl, datatoc_gpu_shader_fx_lib_glsl, defines);
break;
case GPU_SHADER_FX_DEPTH_OF_FIELD_HQ_PASS_THREE:
strcat(defines, "#define THIRD_PASS\n");
- shader = GPU_shader_create(datatoc_gpu_shader_fx_dof_hq_vert_glsl, datatoc_gpu_shader_fx_dof_hq_frag_glsl, NULL, datatoc_gpu_shader_fx_lib_glsl, defines, 0, 0, 0);
+ shader = GPU_shader_create(datatoc_gpu_shader_fx_dof_hq_vert_glsl, datatoc_gpu_shader_fx_dof_hq_frag_glsl, NULL, datatoc_gpu_shader_fx_lib_glsl, defines);
break;
case GPU_SHADER_FX_DEPTH_RESOLVE:
- shader = GPU_shader_create(datatoc_gpu_shader_fx_vert_glsl, datatoc_gpu_shader_fx_depth_resolve_glsl, NULL, NULL, defines, 0, 0, 0);
+ shader = GPU_shader_create(datatoc_gpu_shader_fullscreen_vert_glsl, datatoc_gpu_shader_fx_depth_resolve_glsl, NULL, NULL, defines);
break;
}
- GG.shaders.fx_shaders[offset] = shader;
+ fx_shaders[offset] = shader;
GPU_fx_shader_init_interface(shader, effect);
}
- return GG.shaders.fx_shaders[offset];
+ return fx_shaders[offset];
}
void GPU_shader_free_builtin_shaders(void)
{
- int i;
-
- if (GG.shaders.vsm_store) {
- GPU_shader_free(GG.shaders.vsm_store);
- GG.shaders.vsm_store = NULL;
- }
-
- if (GG.shaders.sep_gaussian_blur) {
- GPU_shader_free(GG.shaders.sep_gaussian_blur);
- GG.shaders.sep_gaussian_blur = NULL;
- }
-
- if (GG.shaders.smoke) {
- GPU_shader_free(GG.shaders.smoke);
- GG.shaders.smoke = NULL;
- }
-
- if (GG.shaders.smoke_fire) {
- GPU_shader_free(GG.shaders.smoke_fire);
- GG.shaders.smoke_fire = NULL;
- }
-
- if (GG.shaders.smoke_coba) {
- GPU_shader_free(GG.shaders.smoke_coba);
- GG.shaders.smoke_coba = NULL;
+ for (int i = 0; i < GPU_NUM_BUILTIN_SHADERS; ++i) {
+ if (builtin_shaders[i]) {
+ GPU_shader_free(builtin_shaders[i]);
+ builtin_shaders[i] = NULL;
+ }
}
- for (i = 0; i < 2 * MAX_FX_SHADERS; ++i) {
- if (GG.shaders.fx_shaders[i]) {
- GPU_shader_free(GG.shaders.fx_shaders[i]);
- GG.shaders.fx_shaders[i] = NULL;
+ for (int i = 0; i < 2 * MAX_FX_SHADERS; ++i) {
+ if (fx_shaders[i]) {
+ GPU_shader_free(fx_shaders[i]);
+ fx_shaders[i] = NULL;
}
}
}
-
-
diff --git a/source/blender/gpu/intern/gpu_shader_private.h b/source/blender/gpu/intern/gpu_shader_private.h
new file mode 100644
index 00000000000..f883773df17
--- /dev/null
+++ b/source/blender/gpu/intern/gpu_shader_private.h
@@ -0,0 +1,45 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file gpu_shader_private.h
+ * \ingroup gpu
+ */
+
+#ifndef __GPU_SHADER_PRIVATE_H__
+#define __GPU_SHADER_PRIVATE_H__
+
+#include "GPU_glew.h"
+#include "gawain/gwn_shader_interface.h"
+
+struct GPUShader {
+ GLuint program; /* handle for full program (links shader stages below) */
+
+ GLuint vertex; /* handle for vertex shader */
+ GLuint geometry; /* handle for geometry shader */
+ GLuint fragment; /* handle for fragment shader */
+
+ void *uniform_interface; /* cached uniform interface for shader. Data depends on shader */
+ /* NOTE: ^-- only FX compositing shaders use this */
+
+ Gwn_ShaderInterface *interface; /* cached uniform & attrib interface for shader */
+};
+
+#endif /* __GPU_SHADER_PRIVATE_H__ */
+
diff --git a/source/blender/gpu/intern/gpu_texture.c b/source/blender/gpu/intern/gpu_texture.c
index 1c97c2ce811..d6b641af225 100644
--- a/source/blender/gpu/intern/gpu_texture.c
+++ b/source/blender/gpu/intern/gpu_texture.c
@@ -49,9 +49,8 @@ static struct GPUTextureGlobal {
} GG = {NULL, NULL, NULL};
/* GPUTexture */
-
struct GPUTexture {
- int w, h; /* width/height */
+ int w, h, d; /* width/height/depth */
int number; /* number for multitexture binding */
int refcount; /* reference count */
GLenum target; /* GL_TEXTURE_* */
@@ -62,43 +61,277 @@ struct GPUTexture {
GPUFrameBuffer *fb; /* GPUFramebuffer this texture is attached to */
int fb_attachment; /* slot the texture is attached to */
- int depth; /* is a depth texture? if 3D how deep? */
+ bool depth; /* is a depth texture? */
+ bool stencil; /* is a stencil texture? */
+
+ unsigned int bytesize; /* number of byte for one pixel */
+ int format; /* GPUTextureFormat */
+ int components; /* number of color/alpha channels */
};
-static unsigned char *GPU_texture_convert_pixels(int length, const float *fpixels)
+/* ------ Memory Management ------- */
+/* Records every texture allocation / free
+ * to estimate the Texture Pool Memory consumption */
+static unsigned int memory_usage;
+
+static unsigned int gpu_texture_memory_footprint_compute(GPUTexture *tex)
{
- unsigned char *pixels, *p;
- const float *fp = fpixels;
- const int len = 4 * length;
+ switch (tex->target) {
+ case GL_TEXTURE_1D:
+ return tex->bytesize * tex->w;
+ case GL_TEXTURE_1D_ARRAY:
+ case GL_TEXTURE_2D:
+ return tex->bytesize * tex->w * tex->h;
+ case GL_TEXTURE_2D_ARRAY:
+ case GL_TEXTURE_3D:
+ return tex->bytesize * tex->w * tex->h * tex->d;
+ case GL_TEXTURE_CUBE_MAP:
+ return tex->bytesize * 6 * tex->w * tex->h;
+ case GL_TEXTURE_CUBE_MAP_ARRAY:
+ return tex->bytesize * 6 * tex->w * tex->h * tex->d;
+ default:
+ return 0;
+ }
+}
- p = pixels = MEM_callocN(sizeof(unsigned char) * len, "GPUTexturePixels");
+static void gpu_texture_memory_footprint_add(GPUTexture *tex)
+{
+ memory_usage += gpu_texture_memory_footprint_compute(tex);
+}
- for (int a = 0; a < len; a++, p++, fp++)
- *p = FTOCHAR((*fp));
+static void gpu_texture_memory_footprint_remove(GPUTexture *tex)
+{
+ memory_usage -= gpu_texture_memory_footprint_compute(tex);
+}
- return pixels;
+unsigned int GPU_texture_memory_usage_get(void)
+{
+ return memory_usage;
}
-static void gpu_glTexSubImageEmpty(GLenum target, GLenum format, int x, int y, int w, int h)
+/* -------------------------------- */
+
+static GLenum gpu_texture_get_format(
+ int components, GPUTextureFormat data_type,
+ GLenum *format, GLenum *data_format, bool *is_depth, bool *is_stencil, unsigned int *bytesize)
{
- void *pixels = MEM_callocN(sizeof(char) * 4 * w * h, "GPUTextureEmptyPixels");
+ if (ELEM(data_type, GPU_DEPTH_COMPONENT24,
+ GPU_DEPTH_COMPONENT16,
+ GPU_DEPTH_COMPONENT32F))
+ {
+ *is_depth = true;
+ *is_stencil = false;
+ *data_format = GL_FLOAT;
+ *format = GL_DEPTH_COMPONENT;
+ }
+ else if (data_type == GPU_DEPTH24_STENCIL8) {
+ *is_depth = true;
+ *is_stencil = true;
+ *data_format = GL_UNSIGNED_INT_24_8;
+ *format = GL_DEPTH_STENCIL;
+ }
+ else {
+ *is_depth = false;
+ *is_stencil = false;
+
+ /* Integer formats */
+ if (ELEM(data_type, GPU_RG16I)) {
+ *data_format = GL_INT;
+
+ switch (components) {
+ case 1: *format = GL_RED_INTEGER; break;
+ case 2: *format = GL_RG_INTEGER; break;
+ case 3: *format = GL_RGB_INTEGER; break;
+ case 4: *format = GL_RGBA_INTEGER; break;
+ default: break;
+ }
+ }
+ else {
+ *data_format = GL_FLOAT;
+
+ switch (components) {
+ case 1: *format = GL_RED; break;
+ case 2: *format = GL_RG; break;
+ case 3: *format = GL_RGB; break;
+ case 4: *format = GL_RGBA; break;
+ default: break;
+ }
+ }
+ }
- if (target == GL_TEXTURE_1D)
- glTexSubImage1D(target, 0, x, w, format, GL_UNSIGNED_BYTE, pixels);
- else
- glTexSubImage2D(target, 0, x, y, w, h, format, GL_UNSIGNED_BYTE, pixels);
-
- MEM_freeN(pixels);
+ switch (data_type) {
+ case GPU_RGBA32F:
+ *bytesize = 32;
+ break;
+ case GPU_RG32F:
+ case GPU_RGBA16F:
+ *bytesize = 16;
+ break;
+ case GPU_RGB16F:
+ *bytesize = 12;
+ break;
+ case GPU_RG16F:
+ case GPU_RG16I:
+ case GPU_DEPTH24_STENCIL8:
+ case GPU_DEPTH_COMPONENT32F:
+ case GPU_RGBA8:
+ case GPU_R11F_G11F_B10F:
+ case GPU_R32F:
+ *bytesize = 4;
+ break;
+ case GPU_DEPTH_COMPONENT24:
+ *bytesize = 3;
+ break;
+ case GPU_DEPTH_COMPONENT16:
+ case GPU_R16F:
+ case GPU_RG8:
+ *bytesize = 2;
+ break;
+ case GPU_R8:
+ *bytesize = 1;
+ break;
+ default:
+ *bytesize = 0;
+ break;
+ }
+
+ /* You can add any of the available type to this list
+ * For available types see GPU_texture.h */
+ switch (data_type) {
+ /* Formats texture & renderbuffer */
+ case GPU_RGBA32F: return GL_RGBA32F;
+ case GPU_RGBA16F: return GL_RGBA16F;
+ case GPU_RG32F: return GL_RG32F;
+ case GPU_RGB16F: return GL_RGB16F;
+ case GPU_RG16F: return GL_RG16F;
+ case GPU_RG16I: return GL_RG16I;
+ case GPU_RGBA8: return GL_RGBA8;
+ case GPU_R32F: return GL_R32F;
+ case GPU_R16F: return GL_R16F;
+ case GPU_RG8: return GL_RG8;
+ case GPU_R8: return GL_R8;
+ /* Special formats texture & renderbuffer */
+ case GPU_R11F_G11F_B10F: return GL_R11F_G11F_B10F;
+ case GPU_DEPTH24_STENCIL8: return GL_DEPTH24_STENCIL8;
+ /* Texture only format */
+ /* ** Add Format here **/
+ /* Special formats texture only */
+ /* ** Add Format here **/
+ /* Depth Formats */
+ case GPU_DEPTH_COMPONENT32F: return GL_DEPTH_COMPONENT32F;
+ case GPU_DEPTH_COMPONENT24: return GL_DEPTH_COMPONENT24;
+ case GPU_DEPTH_COMPONENT16: return GL_DEPTH_COMPONENT16;
+ default:
+ fprintf(stderr, "Texture format incorrect or unsupported\n");
+ return 0;
+ }
}
-static GPUTexture *GPU_texture_create_nD(
- int w, int h, int n, const float *fpixels, int depth,
- GPUHDRType hdr_type, int components, int samples,
- char err_out[256])
+static float *GPU_texture_3D_rescale(GPUTexture *tex, int w, int h, int d, int channels, const float *fpixels)
{
- GLenum type, format, internalformat;
- void *pixels = NULL;
+ const unsigned int xf = w / tex->w, yf = h / tex->h, zf = d / tex->d;
+ float *nfpixels = MEM_mallocN(channels * sizeof(float) * tex->w * tex->h * tex->d, "GPUTexture Rescaled 3Dtex");
+
+ if (nfpixels) {
+ GPU_print_error_debug("You need to scale a 3D texture, feel the pain!");
+
+ for (unsigned k = 0; k < tex->d; k++) {
+ for (unsigned j = 0; j < tex->h; j++) {
+ for (unsigned i = 0; i < tex->w; i++) {
+ /* obviously doing nearest filtering here,
+ * it's going to be slow in any case, let's not make it worse */
+ float xb = i * xf;
+ float yb = j * yf;
+ float zb = k * zf;
+ unsigned int offset = k * (tex->w * tex->h) + i * tex->h + j;
+ unsigned int offset_orig = (zb) * (w * h) + (xb) * h + (yb);
+
+ if (channels == 4) {
+ nfpixels[offset * 4] = fpixels[offset_orig * 4];
+ nfpixels[offset * 4 + 1] = fpixels[offset_orig * 4 + 1];
+ nfpixels[offset * 4 + 2] = fpixels[offset_orig * 4 + 2];
+ nfpixels[offset * 4 + 3] = fpixels[offset_orig * 4 + 3];
+ }
+ else
+ nfpixels[offset] = fpixels[offset_orig];
+ }
+ }
+ }
+ }
+
+ return nfpixels;
+}
+
+/* This tries to allocate video memory for a given texture
+ * If alloc fails, lower the resolution until it fits. */
+static bool gpu_texture_try_alloc(
+ GPUTexture *tex, GLenum proxy, GLenum internalformat, GLenum format, GLenum data_format,
+ int channels, bool try_rescale, const float *fpixels, float **rescaled_fpixels)
+{
+ int r_width;
+
+ switch (proxy) {
+ case GL_PROXY_TEXTURE_1D:
+ glTexImage1D(proxy, 0, internalformat, tex->w, 0, format, data_format, NULL);
+ break;
+ case GL_PROXY_TEXTURE_1D_ARRAY:
+ case GL_PROXY_TEXTURE_2D:
+ glTexImage2D(proxy, 0, internalformat, tex->w, tex->h, 0, format, data_format, NULL);
+ break;
+ case GL_PROXY_TEXTURE_2D_ARRAY:
+ case GL_PROXY_TEXTURE_3D:
+ glTexImage3D(proxy, 0, internalformat, tex->w, tex->h, tex->d, 0, format, data_format, NULL);
+ break;
+ }
+
+ glGetTexLevelParameteriv(proxy, 0, GL_TEXTURE_WIDTH, &r_width);
+
+ if (r_width == 0 && try_rescale) {
+ const int w = tex->w, h = tex->h, d = tex->d;
+
+ /* Find largest texture possible */
+ while (r_width == 0) {
+ tex->w /= 2;
+ tex->h /= 2;
+ tex->d /= 2;
+
+ /* really unlikely to happen but keep this just in case */
+ if (tex->w == 0) break;
+ if (tex->h == 0 && proxy != GL_PROXY_TEXTURE_1D) break;
+ if (tex->d == 0 && proxy == GL_PROXY_TEXTURE_3D) break;
+
+ if (proxy == GL_PROXY_TEXTURE_1D)
+ glTexImage1D(proxy, 0, internalformat, tex->w, 0, format, data_format, NULL);
+ else if (proxy == GL_PROXY_TEXTURE_2D)
+ glTexImage2D(proxy, 0, internalformat, tex->w, tex->h, 0, format, data_format, NULL);
+ else if (proxy == GL_PROXY_TEXTURE_3D)
+ glTexImage3D(proxy, 0, internalformat, tex->w, tex->h, tex->d, 0, format, data_format, NULL);
+
+ glGetTexLevelParameteriv(GL_PROXY_TEXTURE_3D, 0, GL_TEXTURE_WIDTH, &r_width);
+ }
+
+ /* Rescale */
+ if (r_width > 0) {
+ switch (proxy) {
+ case GL_PROXY_TEXTURE_1D:
+ case GL_PROXY_TEXTURE_2D:
+ /* Do nothing for now */
+ return false;
+ case GL_PROXY_TEXTURE_3D:
+ *rescaled_fpixels = GPU_texture_3D_rescale(tex, w, h, d, channels, fpixels);
+ return (bool)*rescaled_fpixels;
+ }
+ }
+ }
+ return (r_width > 0);
+}
+
+static GPUTexture *GPU_texture_create_nD(
+ int w, int h, int d, int n, const float *fpixels,
+ GPUTextureFormat data_type, int components, int samples,
+ const bool can_rescale, char err_out[256])
+{
if (samples) {
CLAMP_MAX(samples, GPU_max_color_texture_samples());
}
@@ -106,264 +339,206 @@ static GPUTexture *GPU_texture_create_nD(
GPUTexture *tex = MEM_callocN(sizeof(GPUTexture), "GPUTexture");
tex->w = w;
tex->h = h;
+ tex->d = d;
tex->number = -1;
tex->refcount = 1;
- tex->target = (n == 1) ? GL_TEXTURE_1D : (samples ? GL_TEXTURE_2D_MULTISAMPLE : GL_TEXTURE_2D);
- tex->target_base = (n == 1) ? GL_TEXTURE_1D : GL_TEXTURE_2D;
- tex->depth = depth;
tex->fb_attachment = -1;
+ tex->format = data_type;
+ tex->components = components;
+
+ if (n == 2) {
+ if (d == 0)
+ tex->target_base = tex->target = GL_TEXTURE_2D;
+ else
+ tex->target_base = tex->target = GL_TEXTURE_2D_ARRAY;
+ }
+ else if (n == 1) {
+ if (h == 0)
+ tex->target_base = tex->target = GL_TEXTURE_1D;
+ else
+ tex->target_base = tex->target = GL_TEXTURE_1D_ARRAY;
+ }
+ else if (n == 3) {
+ tex->target_base = tex->target = GL_TEXTURE_3D;
+ }
+ else {
+ /* should never happen */
+ MEM_freeN(tex);
+ return NULL;
+ }
+
+ if (samples && n == 2 && d == 0)
+ tex->target = GL_TEXTURE_2D_MULTISAMPLE;
+ GLenum format, internalformat, data_format;
+ internalformat = gpu_texture_get_format(components, data_type, &format, &data_format, &tex->depth, &tex->stencil, &tex->bytesize);
+
+ gpu_texture_memory_footprint_add(tex);
+
+ /* Generate Texture object */
glGenTextures(1, &tex->bindcode);
if (!tex->bindcode) {
- if (err_out) {
- BLI_snprintf(err_out, 256, "GPUTexture: texture create failed: %d",
- (int)glGetError());
- }
- else {
- fprintf(stderr, "GPUTexture: texture create failed: %d\n",
- (int)glGetError());
- }
+ if (err_out)
+ BLI_snprintf(err_out, 256, "GPUTexture: texture create failed");
+ else
+ fprintf(stderr, "GPUTexture: texture create failed");
GPU_texture_free(tex);
return NULL;
}
- if (!GPU_full_non_power_of_two_support()) {
- tex->w = power_of_2_max_i(tex->w);
- tex->h = power_of_2_max_i(tex->h);
- }
-
tex->number = 0;
glBindTexture(tex->target, tex->bindcode);
- if (depth) {
- type = GL_UNSIGNED_BYTE;
- format = GL_DEPTH_COMPONENT;
- internalformat = GL_DEPTH_COMPONENT;
- }
- else {
- type = GL_FLOAT;
-
- if (components == 4) {
- format = GL_RGBA;
- switch (hdr_type) {
- case GPU_HDR_NONE:
- internalformat = GL_RGBA8;
- break;
- /* the following formats rely on ARB_texture_float or OpenGL 3.0 */
- case GPU_HDR_HALF_FLOAT:
- internalformat = GL_RGBA16F_ARB;
- break;
- case GPU_HDR_FULL_FLOAT:
- internalformat = GL_RGBA32F_ARB;
- break;
- default:
- break;
- }
- }
- else if (components == 2) {
- /* these formats rely on ARB_texture_rg or OpenGL 3.0 */
- format = GL_RG;
- switch (hdr_type) {
- case GPU_HDR_NONE:
- internalformat = GL_RG8;
- break;
- case GPU_HDR_HALF_FLOAT:
- internalformat = GL_RG16F;
- break;
- case GPU_HDR_FULL_FLOAT:
- internalformat = GL_RG32F;
- break;
- default:
- break;
- }
- }
+ /* Check if texture fit in VRAM */
+ GLenum proxy = GL_PROXY_TEXTURE_2D;
- if (fpixels && hdr_type == GPU_HDR_NONE) {
- type = GL_UNSIGNED_BYTE;
- pixels = GPU_texture_convert_pixels(w * h, fpixels);
- }
+ if (n == 2) {
+ if (d > 0)
+ proxy = GL_PROXY_TEXTURE_2D_ARRAY;
+ }
+ else if (n == 1) {
+ if (h == 0)
+ proxy = GL_PROXY_TEXTURE_1D;
+ else
+ proxy = GL_PROXY_TEXTURE_1D_ARRAY;
+ }
+ else if (n == 3) {
+ proxy = GL_PROXY_TEXTURE_3D;
}
- if (tex->target == GL_TEXTURE_1D) {
- glTexImage1D(tex->target, 0, internalformat, tex->w, 0, format, type, NULL);
+ float *rescaled_fpixels = NULL;
+ bool valid = gpu_texture_try_alloc(tex, proxy, internalformat, format, data_format, components, can_rescale,
+ fpixels, &rescaled_fpixels);
+ if (!valid) {
+ if (err_out)
+ BLI_snprintf(err_out, 256, "GPUTexture: texture alloc failed");
+ else
+ fprintf(stderr, "GPUTexture: texture alloc failed. Not enough Video Memory.");
+ GPU_texture_free(tex);
+ return NULL;
+ }
- if (fpixels) {
- glTexSubImage1D(tex->target, 0, 0, w, format, type,
- pixels ? pixels : fpixels);
+ /* Upload Texture */
+ const float *pix = (rescaled_fpixels) ? rescaled_fpixels : fpixels;
- if (tex->w > w) {
- gpu_glTexSubImageEmpty(tex->target, format, w, 0, tex->w - w, 1);
- }
- }
- }
- else {
+ if (tex->target == GL_TEXTURE_2D ||
+ tex->target == GL_TEXTURE_2D_MULTISAMPLE ||
+ tex->target == GL_TEXTURE_1D_ARRAY)
+ {
if (samples) {
glTexImage2DMultisample(tex->target, samples, internalformat, tex->w, tex->h, true);
+ if (pix)
+ glTexSubImage2D(tex->target, 0, 0, 0, tex->w, tex->h, format, data_format, pix);
}
else {
- glTexImage2D(tex->target, 0, internalformat, tex->w, tex->h, 0,
- format, type, NULL);
- }
-
- if (fpixels) {
- glTexSubImage2D(tex->target, 0, 0, 0, w, h,
- format, type, pixels ? pixels : fpixels);
-
- if (tex->w > w) {
- gpu_glTexSubImageEmpty(tex->target, format, w, 0, tex->w - w, tex->h);
- }
- if (tex->h > h) {
- gpu_glTexSubImageEmpty(tex->target, format, 0, h, w, tex->h - h);
- }
+ glTexImage2D(tex->target, 0, internalformat, tex->w, tex->h, 0, format, data_format, pix);
}
}
+ else if (tex->target == GL_TEXTURE_1D) {
+ glTexImage1D(tex->target, 0, internalformat, tex->w, 0, format, data_format, pix);
+ }
+ else {
+ glTexImage3D(tex->target, 0, internalformat, tex->w, tex->h, tex->d, 0, format, data_format, pix);
+ }
- if (pixels)
- MEM_freeN(pixels);
+ if (rescaled_fpixels)
+ MEM_freeN(rescaled_fpixels);
- if (depth) {
+ /* Texture Parameters */
+ if (tex->depth) {
glTexParameteri(tex->target_base, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(tex->target_base, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameteri(tex->target_base, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE);
+ glTexParameteri(tex->target_base, GL_TEXTURE_COMPARE_MODE, GL_NONE);
glTexParameteri(tex->target_base, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);
- glTexParameteri(tex->target_base, GL_DEPTH_TEXTURE_MODE, GL_INTENSITY);
}
else {
glTexParameteri(tex->target_base, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(tex->target_base, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
}
- if (tex->target_base != GL_TEXTURE_1D) {
- glTexParameteri(tex->target_base, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameteri(tex->target_base, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ if (n > 1) {
glTexParameteri(tex->target_base, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
}
- else
- glTexParameteri(tex->target_base, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ if (n > 2) {
+ glTexParameteri(tex->target_base, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
+ }
+
+ GPU_texture_unbind(tex);
return tex;
}
-
-GPUTexture *GPU_texture_create_3D(int w, int h, int depth, int channels, const float *fpixels)
+static GPUTexture *GPU_texture_cube_create(
+ int w, int d,
+ const float *fpixels_px, const float *fpixels_py, const float *fpixels_pz,
+ const float *fpixels_nx, const float *fpixels_ny, const float *fpixels_nz,
+ GPUTextureFormat data_type, int components,
+ char err_out[256])
{
- GLenum type, format, internalformat;
- void *pixels = NULL;
+ GLenum format, internalformat, data_format;
GPUTexture *tex = MEM_callocN(sizeof(GPUTexture), "GPUTexture");
tex->w = w;
- tex->h = h;
- tex->depth = depth;
+ tex->h = w;
+ tex->d = d;
tex->number = -1;
tex->refcount = 1;
- tex->target = GL_TEXTURE_3D;
- tex->target_base = GL_TEXTURE_3D;
-
- glGenTextures(1, &tex->bindcode);
-
- if (!tex->bindcode) {
- fprintf(stderr, "GPUTexture: texture create failed: %d\n",
- (int)glGetError());
- GPU_texture_free(tex);
- return NULL;
- }
-
- tex->number = 0;
- glBindTexture(tex->target, tex->bindcode);
-
- GPU_ASSERT_NO_GL_ERRORS("3D glBindTexture");
+ tex->fb_attachment = -1;
+ tex->format = data_type;
+ tex->components = components;
- type = GL_FLOAT;
- if (channels == 4) {
- format = GL_RGBA;
- internalformat = GL_RGBA8;
+ if (d == 0) {
+ tex->target_base = tex->target = GL_TEXTURE_CUBE_MAP;
}
else {
- format = GL_RED;
- internalformat = GL_INTENSITY8;
+ BLI_assert(false && "Cubemap array Not implemented yet");
+ // tex->target_base = tex->target = GL_TEXTURE_CUBE_MAP_ARRAY;
}
- /* 3D textures are quite heavy, test if it's possible to create them first */
- glTexImage3D(GL_PROXY_TEXTURE_3D, 0, internalformat, tex->w, tex->h, tex->depth, 0, format, type, NULL);
+ internalformat = gpu_texture_get_format(components, data_type, &format, &data_format, &tex->depth, &tex->stencil, &tex->bytesize);
- bool rescale = false;
- int r_width;
+ gpu_texture_memory_footprint_add(tex);
- glGetTexLevelParameteriv(GL_PROXY_TEXTURE_3D, 0, GL_TEXTURE_WIDTH, &r_width);
+ /* Generate Texture object */
+ glGenTextures(1, &tex->bindcode);
- while (r_width == 0) {
- rescale = true;
- tex->w /= 2;
- tex->h /= 2;
- tex->depth /= 2;
- glTexImage3D(GL_PROXY_TEXTURE_3D, 0, internalformat, tex->w, tex->h, tex->depth, 0, format, type, NULL);
- glGetTexLevelParameteriv(GL_PROXY_TEXTURE_3D, 0, GL_TEXTURE_WIDTH, &r_width);
+ if (!tex->bindcode) {
+ if (err_out)
+ BLI_snprintf(err_out, 256, "GPUTexture: texture create failed");
+ else
+ fprintf(stderr, "GPUTexture: texture create failed");
+ GPU_texture_free(tex);
+ return NULL;
}
- /* really unlikely to happen but keep this just in case */
- tex->w = max_ii(tex->w, 1);
- tex->h = max_ii(tex->h, 1);
- tex->depth = max_ii(tex->depth, 1);
-
-#if 0
- if (fpixels)
- pixels = GPU_texture_convert_pixels(w*h*depth, fpixels);
-#endif
-
- GPU_ASSERT_NO_GL_ERRORS("3D glTexImage3D");
-
- /* hardcore stuff, 3D texture rescaling - warning, this is gonna hurt your performance a lot, but we need it
- * for gooseberry */
- if (rescale && fpixels) {
- /* FIXME: should these be floating point? */
- const unsigned int xf = w / tex->w, yf = h / tex->h, zf = depth / tex->depth;
- float *tex3d = MEM_mallocN(channels * sizeof(float) * tex->w * tex->h * tex->depth, "tex3d");
-
- GPU_print_error_debug("You need to scale a 3D texture, feel the pain!");
-
- for (unsigned k = 0; k < tex->depth; k++) {
- for (unsigned j = 0; j < tex->h; j++) {
- for (unsigned i = 0; i < tex->w; i++) {
- /* obviously doing nearest filtering here,
- * it's going to be slow in any case, let's not make it worse */
- float xb = i * xf;
- float yb = j * yf;
- float zb = k * zf;
- unsigned int offset = k * (tex->w * tex->h) + i * tex->h + j;
- unsigned int offset_orig = (zb) * (w * h) + (xb) * h + (yb);
-
- if (channels == 4) {
- tex3d[offset * 4] = fpixels[offset_orig * 4];
- tex3d[offset * 4 + 1] = fpixels[offset_orig * 4 + 1];
- tex3d[offset * 4 + 2] = fpixels[offset_orig * 4 + 2];
- tex3d[offset * 4 + 3] = fpixels[offset_orig * 4 + 3];
- }
- else
- tex3d[offset] = fpixels[offset_orig];
- }
- }
- }
+ tex->number = 0;
+ glBindTexture(tex->target, tex->bindcode);
- glTexImage3D(tex->target, 0, internalformat, tex->w, tex->h, tex->depth, 0, format, type, tex3d);
+ /* Upload Texture */
+ glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, internalformat, tex->w, tex->h, 0, format, data_format, fpixels_px);
+ glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, internalformat, tex->w, tex->h, 0, format, data_format, fpixels_py);
+ glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, internalformat, tex->w, tex->h, 0, format, data_format, fpixels_pz);
+ glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, internalformat, tex->w, tex->h, 0, format, data_format, fpixels_nx);
+ glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, internalformat, tex->w, tex->h, 0, format, data_format, fpixels_ny);
+ glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, internalformat, tex->w, tex->h, 0, format, data_format, fpixels_nz);
- MEM_freeN(tex3d);
+ /* Texture Parameters */
+ if (tex->depth) {
+ glTexParameteri(tex->target_base, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glTexParameteri(tex->target_base, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameteri(tex->target_base, GL_TEXTURE_COMPARE_MODE, GL_NONE);
+ glTexParameteri(tex->target_base, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);
}
else {
- if (fpixels) {
- glTexImage3D(tex->target, 0, internalformat, tex->w, tex->h, tex->depth, 0, format, type, fpixels);
- GPU_ASSERT_NO_GL_ERRORS("3D glTexSubImage3D");
- }
+ glTexParameteri(tex->target_base, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri(tex->target_base, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
}
-
- glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
-
- if (pixels)
- MEM_freeN(pixels);
+ glTexParameteri(tex->target_base, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameteri(tex->target_base, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ glTexParameteri(tex->target_base, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
GPU_texture_unbind(tex);
@@ -380,6 +555,7 @@ GPUTexture *GPU_texture_from_blender(Image *ima, ImageUser *iuser, int textarget
/* see GPUInput::textarget: it can take two values - GL_TEXTURE_2D and GL_TEXTURE_CUBE_MAP
* these values are correct for glDisable, so textarget can be safely used in
* GPU_texture_bind/GPU_texture_unbind through tex->target_base */
+ /* (is any of this obsolete now that we don't glEnable/Disable textures?) */
if (textarget == GL_TEXTURE_2D)
gputt = TEXTARGET_TEXTURE_2D;
else
@@ -398,14 +574,16 @@ GPUTexture *GPU_texture_from_blender(Image *ima, ImageUser *iuser, int textarget
tex->target = textarget;
tex->target_base = textarget;
tex->fromblender = 1;
+ tex->format = -1;
+ tex->components = -1;
ima->gputexture[gputt] = tex;
if (!glIsTexture(tex->bindcode)) {
- GPU_ASSERT_NO_GL_ERRORS("Blender Texture Not Loaded");
+ GPU_print_error_debug("Blender Texture Not Loaded");
}
else {
- GLint w, h, border;
+ GLint w, h;
GLenum gettarget;
@@ -417,10 +595,8 @@ GPUTexture *GPU_texture_from_blender(Image *ima, ImageUser *iuser, int textarget
glBindTexture(textarget, tex->bindcode);
glGetTexLevelParameteriv(gettarget, 0, GL_TEXTURE_WIDTH, &w);
glGetTexLevelParameteriv(gettarget, 0, GL_TEXTURE_HEIGHT, &h);
- glGetTexLevelParameteriv(gettarget, 0, GL_TEXTURE_BORDER, &border);
-
- tex->w = w - border;
- tex->h = h - border;
+ tex->w = w;
+ tex->h = h;
}
glBindTexture(textarget, 0);
@@ -452,11 +628,13 @@ GPUTexture *GPU_texture_from_preview(PreviewImage *prv, int mipmap)
tex->refcount = 1;
tex->target = GL_TEXTURE_2D;
tex->target_base = GL_TEXTURE_2D;
+ tex->format = -1;
+ tex->components = -1;
prv->gputexture[0] = tex;
if (!glIsTexture(tex->bindcode)) {
- GPU_ASSERT_NO_GL_ERRORS("Blender Texture Not Loaded");
+ GPU_print_error_debug("Blender Texture Not Loaded");
}
else {
GLint w, h;
@@ -475,114 +653,129 @@ GPUTexture *GPU_texture_from_preview(PreviewImage *prv, int mipmap)
}
-GPUTexture *GPU_texture_create_1D(int w, const float *fpixels, char err_out[256])
+GPUTexture *GPU_texture_create_1D(int w, const float *pixels, char err_out[256])
{
- GPUTexture *tex = GPU_texture_create_nD(w, 1, 1, fpixels, 0, GPU_HDR_NONE, 4, 0, err_out);
-
- if (tex)
- GPU_texture_unbind(tex);
-
- return tex;
+ return GPU_texture_create_nD(w, 0, 0, 1, pixels, GPU_RGBA8, 4, 0, false, err_out);
}
-GPUTexture *GPU_texture_create_2D(int w, int h, const float *fpixels, GPUHDRType hdr, char err_out[256])
+GPUTexture *GPU_texture_create_1D_custom(
+ int w, int channels, GPUTextureFormat data_type, const float *pixels, char err_out[256])
{
- GPUTexture *tex = GPU_texture_create_nD(w, h, 2, fpixels, 0, hdr, 4, 0, err_out);
-
- if (tex)
- GPU_texture_unbind(tex);
-
- return tex;
+ return GPU_texture_create_nD(w, 0, 0, 1, pixels, data_type, channels, 0, false, err_out);
}
-GPUTexture *GPU_texture_create_2D_multisample(
- int w, int h, const float *fpixels, GPUHDRType hdr, int samples, char err_out[256])
-{
- GPUTexture *tex = GPU_texture_create_nD(w, h, 2, fpixels, 0, hdr, 4, samples, err_out);
-
- if (tex)
- GPU_texture_unbind(tex);
- return tex;
+GPUTexture *GPU_texture_create_2D(int w, int h, const float *pixels, char err_out[256])
+{
+ return GPU_texture_create_nD(w, h, 0, 2, pixels, GPU_RGBA8, 4, 0, false, err_out);
}
-GPUTexture *GPU_texture_create_depth(int w, int h, char err_out[256])
+GPUTexture *GPU_texture_create_2D_custom(
+ int w, int h, int channels, GPUTextureFormat data_type, const float *pixels, char err_out[256])
{
- GPUTexture *tex = GPU_texture_create_nD(w, h, 2, NULL, 1, GPU_HDR_NONE, 1, 0, err_out);
-
- if (tex)
- GPU_texture_unbind(tex);
-
- return tex;
+ return GPU_texture_create_nD(w, h, 0, 2, pixels, data_type, channels, 0, false, err_out);
}
-GPUTexture *GPU_texture_create_depth_multisample(int w, int h, int samples, char err_out[256])
-{
- GPUTexture *tex = GPU_texture_create_nD(w, h, 2, NULL, 1, GPU_HDR_NONE, 1, samples, err_out);
- if (tex)
- GPU_texture_unbind(tex);
+GPUTexture *GPU_texture_create_2D_multisample(int w, int h, const float *pixels, int samples, char err_out[256])
+{
+ return GPU_texture_create_nD(w, h, 0, 2, pixels, GPU_RGBA8, 4, samples, false, err_out);
+}
- return tex;
+GPUTexture *GPU_texture_create_2D_custom_multisample(
+ int w, int h, int channels, GPUTextureFormat data_type, const float *pixels, int samples, char err_out[256])
+{
+ return GPU_texture_create_nD(w, h, 0, 2, pixels, data_type, channels, samples, false, err_out);
}
-/**
- * A shadow map for VSM needs two components (depth and depth^2)
- */
-GPUTexture *GPU_texture_create_vsm_shadow_map(int size, char err_out[256])
+GPUTexture *GPU_texture_create_2D_array_custom(int w, int h, int d, int channels, GPUTextureFormat data_type, const float *pixels, char err_out[256])
{
- GPUTexture *tex = GPU_texture_create_nD(size, size, 2, NULL, 0, GPU_HDR_FULL_FLOAT, 2, 0, err_out);
+ return GPU_texture_create_nD(w, h, d, 2, pixels, data_type, channels, 0, false, err_out);
+}
- if (tex) {
- /* Now we tweak some of the settings */
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+GPUTexture *GPU_texture_create_3D(int w, int h, int d, const float *pixels, char err_out[256])
+{
+ return GPU_texture_create_nD(w, h, d, 3, pixels, GPU_RGBA8, 4, 0, true, err_out);
+}
- GPU_texture_unbind(tex);
+GPUTexture *GPU_texture_create_3D_custom(int w, int h, int d, int channels, GPUTextureFormat data_type, const float *pixels, char err_out[256])
+{
+ return GPU_texture_create_nD(w, h, d, 3, pixels, data_type, channels, 0, true, err_out);
+}
+GPUTexture *GPU_texture_create_cube_custom(int w, int channels, GPUTextureFormat data_type, const float *fpixels, char err_out[256])
+{
+ const float *fpixels_px, *fpixels_py, *fpixels_pz, *fpixels_nx, *fpixels_ny, *fpixels_nz;
+
+ if (fpixels) {
+ fpixels_px = fpixels + 0 * w * w * channels;
+ fpixels_nx = fpixels + 1 * w * w * channels;
+ fpixels_py = fpixels + 2 * w * w * channels;
+ fpixels_ny = fpixels + 3 * w * w * channels;
+ fpixels_pz = fpixels + 4 * w * w * channels;
+ fpixels_nz = fpixels + 5 * w * w * channels;
+ }
+ else {
+ fpixels_px = fpixels_py = fpixels_pz = fpixels_nx = fpixels_ny = fpixels_nz = NULL;
}
- return tex;
+ return GPU_texture_cube_create(w, 0, fpixels_px, fpixels_py, fpixels_pz, fpixels_nx, fpixels_ny, fpixels_nz, data_type, channels, err_out);
}
-GPUTexture *GPU_texture_create_2D_procedural(int w, int h, const float *pixels, bool repeat, char err_out[256])
+GPUTexture *GPU_texture_create_depth(int w, int h, char err_out[256])
{
- GPUTexture *tex = GPU_texture_create_nD(w, h, 2, pixels, 0, GPU_HDR_HALF_FLOAT, 2, 0, err_out);
+ return GPU_texture_create_nD(w, h, 0, 2, NULL, GPU_DEPTH_COMPONENT24, 1, 0, false, err_out);
+}
- if (tex) {
- /* Now we tweak some of the settings */
- if (repeat) {
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
- }
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+GPUTexture *GPU_texture_create_depth_with_stencil(int w, int h, char err_out[256])
+{
+ return GPU_texture_create_nD(w, h, 0, 2, NULL, GPU_DEPTH24_STENCIL8, 1, 0, false, err_out);
+}
- GPU_texture_unbind(tex);
- }
+GPUTexture *GPU_texture_create_depth_multisample(int w, int h, int samples, char err_out[256])
+{
+ return GPU_texture_create_nD(w, h, 0, 2, NULL, GPU_DEPTH_COMPONENT24, 1, samples, false, err_out);
+}
- return tex;
+GPUTexture *GPU_texture_create_depth_with_stencil_multisample(int w, int h, int samples, char err_out[256])
+{
+ return GPU_texture_create_nD(w, h, 0, 2, NULL, GPU_DEPTH24_STENCIL8, 1, samples, false, err_out);
}
-GPUTexture *GPU_texture_create_1D_procedural(int w, const float *pixels, char err_out[256])
+void GPU_texture_update(GPUTexture *tex, const float *pixels)
{
- GPUTexture *tex = GPU_texture_create_nD(w, 0, 1, pixels, 0, GPU_HDR_HALF_FLOAT, 2, 0, err_out);
+ BLI_assert(tex->format > -1);
+ BLI_assert(tex->components > -1);
- if (tex) {
- /* Now we tweak some of the settings */
- glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_REPEAT);
- glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ GLenum format, data_format;
+ gpu_texture_get_format(tex->components, tex->format, &format, &data_format, &tex->depth, &tex->stencil, &tex->bytesize);
+
+ glBindTexture(tex->target, tex->bindcode);
- GPU_texture_unbind(tex);
+ switch (tex->target) {
+ case GL_TEXTURE_2D:
+ case GL_TEXTURE_2D_MULTISAMPLE:
+ case GL_TEXTURE_1D_ARRAY:
+ glTexSubImage2D(tex->target, 0, 0, 0, tex->w, tex->h, format, data_format, pixels);
+ break;
+ case GL_TEXTURE_1D:
+ glTexSubImage1D(tex->target, 0, 0, tex->w, format, data_format, pixels);
+ break;
+ case GL_TEXTURE_3D:
+ case GL_TEXTURE_2D_ARRAY:
+ glTexSubImage3D(tex->target, 0, 0, 0, 0, tex->w, tex->h, tex->d, format, data_format, pixels);
+ break;
+ default:
+ BLI_assert(!"tex->target mode not supported");
}
- return tex;
+ glBindTexture(tex->target, 0);
}
void GPU_invalid_tex_init(void)
{
+ memory_usage = 0;
const float color[4] = {1.0f, 0.0f, 1.0f, 1.0f};
GG.invalid_tex_1D = GPU_texture_create_1D(1, color, NULL);
- GG.invalid_tex_2D = GPU_texture_create_2D(1, 1, color, GPU_HDR_NONE, NULL);
- GG.invalid_tex_3D = GPU_texture_create_3D(1, 1, 1, 4, color);
+ GG.invalid_tex_2D = GPU_texture_create_2D(1, 1, color, NULL);
+ GG.invalid_tex_3D = GPU_texture_create_3D(1, 1, 1, color, NULL);
}
void GPU_invalid_tex_bind(int mode)
@@ -627,21 +820,18 @@ void GPU_texture_bind(GPUTexture *tex, int number)
if (number < 0)
return;
- GPU_ASSERT_NO_GL_ERRORS("Pre Texture Bind");
+ if (number != 0)
+ glActiveTexture(GL_TEXTURE0 + number);
- GLenum arbnumber = (GLenum)((GLuint)GL_TEXTURE0 + number);
- if (number != 0) glActiveTexture(arbnumber);
- if (tex->bindcode != 0) {
- glBindTexture(tex->target_base, tex->bindcode);
- }
+ if (tex->bindcode != 0)
+ glBindTexture(tex->target, tex->bindcode);
else
GPU_invalid_tex_bind(tex->target_base);
- glEnable(tex->target_base);
- if (number != 0) glActiveTexture(GL_TEXTURE0);
- tex->number = number;
+ if (number != 0)
+ glActiveTexture(GL_TEXTURE0);
- GPU_ASSERT_NO_GL_ERRORS("Post Texture Bind");
+ tex->number = number;
}
void GPU_texture_unbind(GPUTexture *tex)
@@ -653,18 +843,16 @@ void GPU_texture_unbind(GPUTexture *tex)
if (tex->number == -1)
return;
-
- GPU_ASSERT_NO_GL_ERRORS("Pre Texture Unbind");
- GLenum arbnumber = (GLenum)((GLuint)GL_TEXTURE0 + tex->number);
- if (tex->number != 0) glActiveTexture(arbnumber);
- glBindTexture(tex->target_base, 0);
- glDisable(tex->target_base);
- if (tex->number != 0) glActiveTexture(GL_TEXTURE0);
+ if (tex->number != 0)
+ glActiveTexture(GL_TEXTURE0 + tex->number);
- tex->number = -1;
+ glBindTexture(tex->target, 0);
- GPU_ASSERT_NO_GL_ERRORS("Post Texture Unbind");
+ if (tex->number != 0)
+ glActiveTexture(GL_TEXTURE0);
+
+ tex->number = -1;
}
int GPU_texture_bound_number(GPUTexture *tex)
@@ -672,7 +860,7 @@ int GPU_texture_bound_number(GPUTexture *tex)
return tex->number;
}
-void GPU_texture_filter_mode(GPUTexture *tex, bool compare, bool use_filter)
+void GPU_texture_generate_mipmap(GPUTexture *tex)
{
if (tex->number >= GPU_max_textures()) {
fprintf(stderr, "Not enough texture slots.\n");
@@ -682,29 +870,104 @@ void GPU_texture_filter_mode(GPUTexture *tex, bool compare, bool use_filter)
if (tex->number == -1)
return;
- GPU_ASSERT_NO_GL_ERRORS("Pre Texture Unbind");
+ if (tex->number != 0)
+ glActiveTexture(GL_TEXTURE0 + tex->number);
- GLenum arbnumber = (GLenum)((GLuint)GL_TEXTURE0 + tex->number);
- if (tex->number != 0) glActiveTexture(arbnumber);
+ glGenerateMipmap(tex->target_base);
- if (tex->depth) {
- if (compare)
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE);
- else
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_NONE);
+ if (tex->number != 0)
+ glActiveTexture(GL_TEXTURE0);
+}
+
+void GPU_texture_compare_mode(GPUTexture *tex, bool use_compare)
+{
+ if (tex->number >= GPU_max_textures()) {
+ fprintf(stderr, "Not enough texture slots.\n");
+ return;
+ }
+
+ if (tex->number == -1)
+ return;
+
+ if (tex->number != 0)
+ glActiveTexture(GL_TEXTURE0 + tex->number);
+
+ /* TODO viewport: use GL_COMPARE_REF_TO_TEXTURE after we switch to core profile */
+ if (tex->depth)
+ glTexParameteri(tex->target_base, GL_TEXTURE_COMPARE_MODE, use_compare ? GL_COMPARE_R_TO_TEXTURE : GL_NONE);
+
+ if (tex->number != 0)
+ glActiveTexture(GL_TEXTURE0);
+}
+
+void GPU_texture_filter_mode(GPUTexture *tex, bool use_filter)
+{
+ if (tex->number >= GPU_max_textures()) {
+ fprintf(stderr, "Not enough texture slots.\n");
+ return;
}
- if (use_filter) {
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ if (tex->number == -1)
+ return;
+
+ if (tex->number != 0)
+ glActiveTexture(GL_TEXTURE0 + tex->number);
+
+ GLenum filter = use_filter ? GL_LINEAR : GL_NEAREST;
+ glTexParameteri(tex->target_base, GL_TEXTURE_MAG_FILTER, filter);
+ glTexParameteri(tex->target_base, GL_TEXTURE_MIN_FILTER, filter);
+
+ if (tex->number != 0)
+ glActiveTexture(GL_TEXTURE0);
+}
+
+void GPU_texture_mipmap_mode(GPUTexture *tex, bool use_mipmap, bool use_filter)
+{
+ if (tex->number >= GPU_max_textures()) {
+ fprintf(stderr, "Not enough texture slots.\n");
+ return;
}
- else {
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+
+ if (tex->number == -1)
+ return;
+
+ if (tex->number != 0)
+ glActiveTexture(GL_TEXTURE0 + tex->number);
+
+ GLenum mipmap = (use_filter)
+ ? use_mipmap ? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR
+ : use_mipmap ? GL_NEAREST_MIPMAP_LINEAR : GL_NEAREST;
+ glTexParameteri(tex->target_base, GL_TEXTURE_MIN_FILTER, mipmap);
+
+ GLenum filter = use_filter ? GL_LINEAR : GL_NEAREST;
+ glTexParameteri(tex->target_base, GL_TEXTURE_MAG_FILTER, filter);
+
+ if (tex->number != 0)
+ glActiveTexture(GL_TEXTURE0);
+}
+
+void GPU_texture_wrap_mode(GPUTexture *tex, bool use_repeat)
+{
+ if (tex->number >= GPU_max_textures()) {
+ fprintf(stderr, "Not enough texture slots.\n");
+ return;
}
- if (tex->number != 0) glActiveTexture(GL_TEXTURE0);
- GPU_ASSERT_NO_GL_ERRORS("Post Texture Unbind");
+ if (tex->number == -1)
+ return;
+
+ if (tex->number != 0)
+ glActiveTexture(GL_TEXTURE0 + tex->number);
+
+ GLenum repeat = use_repeat ? GL_REPEAT : GL_CLAMP_TO_EDGE;
+ glTexParameteri(tex->target_base, GL_TEXTURE_WRAP_S, repeat);
+ if (tex->target_base != GL_TEXTURE_1D)
+ glTexParameteri(tex->target_base, GL_TEXTURE_WRAP_T, repeat);
+ if (tex->target_base == GL_TEXTURE_3D)
+ glTexParameteri(tex->target_base, GL_TEXTURE_WRAP_R, repeat);
+
+ if (tex->number != 0)
+ glActiveTexture(GL_TEXTURE0);
}
void GPU_texture_free(GPUTexture *tex)
@@ -720,6 +983,8 @@ void GPU_texture_free(GPUTexture *tex)
if (tex->bindcode && !tex->fromblender)
glDeleteTextures(1, &tex->bindcode);
+ gpu_texture_memory_footprint_remove(tex);
+
MEM_freeN(tex);
}
}
@@ -744,11 +1009,21 @@ int GPU_texture_height(const GPUTexture *tex)
return tex->h;
}
-int GPU_texture_depth(const GPUTexture *tex)
+int GPU_texture_format(const GPUTexture *tex)
+{
+ return tex->format;
+}
+
+bool GPU_texture_depth(const GPUTexture *tex)
{
return tex->depth;
}
+bool GPU_texture_stencil(const GPUTexture *tex)
+{
+ return tex->stencil;
+}
+
int GPU_texture_opengl_bindcode(const GPUTexture *tex)
{
return tex->bindcode;
diff --git a/source/blender/gpu/intern/gpu_uniformbuffer.c b/source/blender/gpu/intern/gpu_uniformbuffer.c
new file mode 100644
index 00000000000..6d52dab5a1f
--- /dev/null
+++ b/source/blender/gpu/intern/gpu_uniformbuffer.c
@@ -0,0 +1,378 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2005 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Clement Foucault.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file gpu_uniformbuffer.c
+ * \ingroup gpu
+ */
+
+#include <string.h>
+#include "MEM_guardedalloc.h"
+
+#include "BLI_blenlib.h"
+
+#include "gpu_codegen.h"
+
+#include "GPU_extensions.h"
+#include "GPU_glew.h"
+#include "GPU_material.h"
+#include "GPU_uniformbuffer.h"
+
+typedef enum GPUUniformBufferFlag {
+ GPU_UBO_FLAG_INITIALIZED = (1 << 0),
+ GPU_UBO_FLAG_DIRTY = (1 << 1),
+} GPUUniformBufferFlag;
+
+typedef enum GPUUniformBufferType {
+ GPU_UBO_STATIC = 0,
+ GPU_UBO_DYNAMIC = 1,
+} GPUUniformBufferType;
+
+struct GPUUniformBuffer {
+ int size; /* in bytes */
+ GLuint bindcode; /* opengl identifier for UBO */
+ int bindpoint; /* current binding point */
+ GPUUniformBufferType type;
+};
+
+#define GPUUniformBufferStatic GPUUniformBuffer
+
+typedef struct GPUUniformBufferDynamic {
+ GPUUniformBuffer buffer;
+ ListBase items; /* GPUUniformBufferDynamicItem */
+ void *data;
+ char flag;
+} GPUUniformBufferDynamic;
+
+struct GPUUniformBufferDynamicItem {
+ struct GPUUniformBufferDynamicItem *next, *prev;
+ GPUType gputype;
+ float *data;
+ int size;
+};
+
+
+/* Prototypes */
+static GPUType get_padded_gpu_type(struct LinkData *link);
+static void gpu_uniformbuffer_inputs_sort(struct ListBase *inputs);
+
+static GPUUniformBufferDynamicItem *gpu_uniformbuffer_populate(
+ GPUUniformBufferDynamic *ubo, const GPUType gputype, float *num);
+
+/* Only support up to this type, if you want to extend it, make sure the
+ * padding logic is correct for the new types. */
+#define MAX_UBO_GPU_TYPE GPU_VEC4
+
+static void gpu_uniformbuffer_initialize(GPUUniformBuffer *ubo, const void *data)
+{
+ glBindBuffer(GL_UNIFORM_BUFFER, ubo->bindcode);
+ glBufferData(GL_UNIFORM_BUFFER, ubo->size, data, GL_DYNAMIC_DRAW);
+ glBindBuffer(GL_UNIFORM_BUFFER, 0);
+}
+
+GPUUniformBuffer *GPU_uniformbuffer_create(int size, const void *data, char err_out[256])
+{
+ GPUUniformBuffer *ubo = MEM_callocN(sizeof(GPUUniformBufferStatic), "GPUUniformBufferStatic");
+ ubo->size = size;
+ ubo->bindpoint = -1;
+
+ /* Generate Buffer object */
+ glGenBuffers(1, &ubo->bindcode);
+
+ if (!ubo->bindcode) {
+ if (err_out)
+ BLI_snprintf(err_out, 256, "GPUUniformBuffer: UBO create failed");
+ GPU_uniformbuffer_free(ubo);
+ return NULL;
+ }
+
+ if (ubo->size > GPU_max_ubo_size()) {
+ if (err_out)
+ BLI_snprintf(err_out, 256, "GPUUniformBuffer: UBO too big");
+ GPU_uniformbuffer_free(ubo);
+ return NULL;
+ }
+
+ gpu_uniformbuffer_initialize(ubo, data);
+ return ubo;
+}
+
+/**
+ * Create dynamic UBO from parameters
+ * Return NULL if failed to create or if \param inputs is empty.
+ *
+ * \param inputs ListBase of BLI_genericNodeN(GPUInput)
+ */
+GPUUniformBuffer *GPU_uniformbuffer_dynamic_create(ListBase *inputs, char err_out[256])
+{
+ /* There is no point on creating an UBO if there is no arguments. */
+ if (BLI_listbase_is_empty(inputs)) {
+ return NULL;
+ }
+
+ GPUUniformBufferDynamic *ubo = MEM_callocN(sizeof(GPUUniformBufferDynamic), "GPUUniformBufferDynamic");
+ ubo->buffer.type = GPU_UBO_DYNAMIC;
+ ubo->buffer.bindpoint = -1;
+ ubo->flag = GPU_UBO_FLAG_DIRTY;
+
+ /* Generate Buffer object. */
+ glGenBuffers(1, &ubo->buffer.bindcode);
+
+ if (!ubo->buffer.bindcode) {
+ if (err_out)
+ BLI_snprintf(err_out, 256, "GPUUniformBuffer: UBO create failed");
+ GPU_uniformbuffer_free(&ubo->buffer);
+ return NULL;
+ }
+
+ if (ubo->buffer.size > GPU_max_ubo_size()) {
+ if (err_out)
+ BLI_snprintf(err_out, 256, "GPUUniformBuffer: UBO too big");
+ GPU_uniformbuffer_free(&ubo->buffer);
+ return NULL;
+ }
+
+ /* Make sure we comply to the ubo alignment requirements. */
+ gpu_uniformbuffer_inputs_sort(inputs);
+
+ for (LinkData *link = inputs->first; link; link = link->next) {
+ GPUInput *input = link->data;
+ GPUType gputype = get_padded_gpu_type(link);
+ gpu_uniformbuffer_populate(ubo, gputype, input->dynamicvec);
+ }
+
+ ubo->data = MEM_mallocN(ubo->buffer.size, __func__);
+
+ /* Initialize buffer data. */
+ GPU_uniformbuffer_dynamic_update(&ubo->buffer);
+ return &ubo->buffer;
+}
+
+/**
+ * Free the data, and clean the items list.
+ */
+static void gpu_uniformbuffer_dynamic_reset(GPUUniformBufferDynamic *ubo)
+{
+ ubo->buffer.size = 0;
+ if (ubo->data) {
+ MEM_freeN(ubo->data);
+ }
+ BLI_freelistN(&ubo->items);
+}
+
+void GPU_uniformbuffer_free(GPUUniformBuffer *ubo)
+{
+ if (ubo->type == GPU_UBO_DYNAMIC) {
+ gpu_uniformbuffer_dynamic_reset((GPUUniformBufferDynamic *)ubo);
+ }
+
+ glDeleteBuffers(1, &ubo->bindcode);
+ MEM_freeN(ubo);
+}
+
+static void gpu_uniformbuffer_update(GPUUniformBuffer *ubo, const void *data)
+{
+ glBindBuffer(GL_UNIFORM_BUFFER, ubo->bindcode);
+ glBufferSubData(GL_UNIFORM_BUFFER, 0, ubo->size, data);
+ glBindBuffer(GL_UNIFORM_BUFFER, 0);
+}
+
+void GPU_uniformbuffer_update(GPUUniformBuffer *ubo, const void *data)
+{
+ BLI_assert(ubo->type == GPU_UBO_STATIC);
+ gpu_uniformbuffer_update(ubo, data);
+}
+
+/**
+ * We need to recalculate the internal data, and re-generate it
+ * from its populated items.
+ */
+void GPU_uniformbuffer_dynamic_update(GPUUniformBuffer *ubo_)
+{
+ BLI_assert(ubo_->type == GPU_UBO_DYNAMIC);
+ GPUUniformBufferDynamic *ubo = (GPUUniformBufferDynamic *)ubo_;
+
+ float *offset = ubo->data;
+ for (GPUUniformBufferDynamicItem *item = ubo->items.first; item; item = item->next) {
+ memcpy(offset, item->data, item->size);
+ offset += item->gputype;
+ }
+
+ if (ubo->flag & GPU_UBO_FLAG_INITIALIZED) {
+ gpu_uniformbuffer_update(ubo_, ubo->data);
+ }
+ else {
+ ubo->flag |= GPU_UBO_FLAG_INITIALIZED;
+ gpu_uniformbuffer_initialize(ubo_, ubo->data);
+ }
+
+ ubo->flag &= ~GPU_UBO_FLAG_DIRTY;
+}
+
+/**
+ * We need to pad some data types (vec3) on the C side
+ * To match the GPU expected memory block alignment.
+ */
+static GPUType get_padded_gpu_type(LinkData *link)
+{
+ GPUInput *input = link->data;
+ GPUType gputype = input->type;
+
+ /* Unless the vec3 is followed by a float we need to treat it as a vec4. */
+ if (gputype == GPU_VEC3 &&
+ (link->next != NULL) &&
+ (((GPUInput *)link->next->data)->type != GPU_FLOAT))
+ {
+ gputype = GPU_VEC4;
+ }
+
+ return gputype;
+}
+
+/**
+ * Returns 1 if the first item shold be after second item.
+ * We make sure the vec4 uniforms come first.
+ */
+static int inputs_cmp(const void *a, const void *b)
+{
+ const LinkData *link_a = a, *link_b = b;
+ const GPUInput *input_a = link_a->data, *input_b = link_b->data;
+ return input_a->type < input_b->type ? 1 : 0;
+}
+
+/**
+ * Make sure we respect the expected alignment of UBOs.
+ * vec4, pad vec3 as vec4, then vec2, then floats.
+ */
+static void gpu_uniformbuffer_inputs_sort(ListBase *inputs)
+{
+ /* Order them as vec4, vec3, vec2, float. */
+ BLI_listbase_sort(inputs, inputs_cmp);
+
+ /* Creates a lookup table for the different types; */
+ LinkData *inputs_lookup[MAX_UBO_GPU_TYPE + 1] = {NULL};
+ GPUType cur_type = MAX_UBO_GPU_TYPE + 1;
+
+ for (LinkData *link = inputs->first; link; link = link->next) {
+ GPUInput *input = link->data;
+ if (input->type == cur_type) {
+ continue;
+ }
+ else {
+ inputs_lookup[input->type] = link;
+ cur_type = input->type;
+ }
+ }
+
+ /* If there is no GPU_VEC3 there is no need for alignment. */
+ if (inputs_lookup[GPU_VEC3] == NULL) {
+ return;
+ }
+
+ LinkData *link = inputs_lookup[GPU_VEC3];
+ while (link != NULL && ((GPUInput *)link->data)->type == GPU_VEC3) {
+ LinkData *link_next = link->next;
+
+ /* If GPU_VEC3 is followed by nothing or a GPU_FLOAT, no need for aligment. */
+ if ((link_next == NULL) ||
+ ((GPUInput *)link_next->data)->type == GPU_FLOAT)
+ {
+ break;
+ }
+
+ /* If there is a float, move it next to current vec3. */
+ if (inputs_lookup[GPU_FLOAT] != NULL) {
+ LinkData *float_input = inputs_lookup[GPU_FLOAT];
+ inputs_lookup[GPU_FLOAT] = float_input->next;
+
+ BLI_remlink(inputs, float_input);
+ BLI_insertlinkafter(inputs, link, float_input);
+ }
+
+ link = link_next;
+ }
+}
+
+/**
+ * This may now happen from the main thread, so we can't update the UBO
+ * We simply flag it as dirty
+ */
+static GPUUniformBufferDynamicItem *gpu_uniformbuffer_populate(
+ GPUUniformBufferDynamic *ubo, const GPUType gputype, float *num)
+{
+ BLI_assert(gputype <= MAX_UBO_GPU_TYPE);
+ GPUUniformBufferDynamicItem *item = MEM_callocN(sizeof(GPUUniformBufferDynamicItem), __func__);
+
+ item->gputype = gputype;
+ item->data = num;
+ item->size = gputype * sizeof(float);
+ ubo->buffer.size += item->size;
+
+ ubo->flag |= GPU_UBO_FLAG_DIRTY;
+ BLI_addtail(&ubo->items, item);
+
+ return item;
+}
+
+void GPU_uniformbuffer_bind(GPUUniformBuffer *ubo, int number)
+{
+ if (number >= GPU_max_ubo_binds()) {
+ fprintf(stderr, "Not enough UBO slots.\n");
+ return;
+ }
+
+ if (ubo->type == GPU_UBO_DYNAMIC) {
+ GPUUniformBufferDynamic *ubo_dynamic = (GPUUniformBufferDynamic *)ubo;
+ if (ubo_dynamic->flag & GPU_UBO_FLAG_DIRTY) {
+ GPU_uniformbuffer_dynamic_update(ubo);
+ }
+ }
+
+ if (ubo->bindcode != 0) {
+ glBindBufferBase(GL_UNIFORM_BUFFER, number, ubo->bindcode);
+ }
+
+ ubo->bindpoint = number;
+}
+
+void GPU_uniformbuffer_unbind(GPUUniformBuffer *ubo)
+{
+ ubo->bindpoint = -1;
+}
+
+int GPU_uniformbuffer_bindpoint(GPUUniformBuffer *ubo)
+{
+ return ubo->bindpoint;
+}
+
+void GPU_uniformbuffer_tag_dirty(GPUUniformBuffer *ubo_)
+{
+ BLI_assert(ubo_->type == GPU_UBO_DYNAMIC);
+ GPUUniformBufferDynamic *ubo = (GPUUniformBufferDynamic *)ubo_;
+ ubo->flag |= GPU_UBO_FLAG_DIRTY;
+}
+
+#undef MAX_UBO_GPU_TYPE
diff --git a/source/blender/gpu/intern/gpu_viewport.c b/source/blender/gpu/intern/gpu_viewport.c
new file mode 100644
index 00000000000..3ef53b3a6c3
--- /dev/null
+++ b/source/blender/gpu/intern/gpu_viewport.c
@@ -0,0 +1,686 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2006 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s):
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/gpu/intern/gpu_viewport.c
+ * \ingroup gpu
+ *
+ * System that manages viewport drawing.
+ */
+
+#include <string.h>
+
+#include "BLI_listbase.h"
+#include "BLI_rect.h"
+#include "BLI_string.h"
+#include "BLI_mempool.h"
+
+#include "DNA_vec_types.h"
+#include "DNA_userdef_types.h"
+
+#include "BKE_global.h"
+
+#include "GPU_framebuffer.h"
+#include "GPU_glew.h"
+#include "GPU_immediate.h"
+#include "GPU_texture.h"
+#include "GPU_viewport.h"
+
+#include "DRW_engine.h"
+
+#include "MEM_guardedalloc.h"
+
+static const int default_fbl_len = (sizeof(DefaultFramebufferList)) / sizeof(void *);
+static const int default_txl_len = (sizeof(DefaultTextureList)) / sizeof(void *);
+
+/* Maximum number of simultaneous engine enabled at the same time.
+ * Setting it lower than the real number will do lead to
+ * higher VRAM usage due to sub-efficient buffer reuse. */
+#define MAX_ENGINE_BUFFER_SHARING 5
+
+typedef struct ViewportTempTexture {
+ struct ViewportTempTexture *next, *prev;
+ void *user[MAX_ENGINE_BUFFER_SHARING];
+ GPUTexture *texture;
+} ViewportTempTexture;
+
+struct GPUViewport {
+ float pad[4];
+
+ /* debug */
+ GPUTexture *debug_depth;
+ int size[2];
+
+ int samples;
+ int flag;
+
+ ListBase data; /* ViewportEngineData wrapped in LinkData */
+ unsigned int data_hash; /* If hash mismatch we free all ViewportEngineData in this viewport */
+
+ DefaultFramebufferList *fbl;
+ DefaultTextureList *txl;
+
+ ViewportMemoryPool vmempool; /* Used for rendering data structure. */
+ struct DRWInstanceDataList *idatalist; /* Used for rendering data structure. */
+
+ ListBase tex_pool; /* ViewportTempTexture list : Temporary textures shared across draw engines */
+};
+
+enum {
+ DO_UPDATE = (1 << 0),
+};
+
+static void gpu_viewport_buffers_free(FramebufferList *fbl, int fbl_len, TextureList *txl, int txl_len);
+static void gpu_viewport_storage_free(StorageList *stl, int stl_len);
+static void gpu_viewport_passes_free(PassList *psl, int psl_len);
+static void gpu_viewport_texture_pool_free(GPUViewport *viewport);
+
+void GPU_viewport_tag_update(GPUViewport *viewport)
+{
+ viewport->flag |= DO_UPDATE;
+}
+
+bool GPU_viewport_do_update(GPUViewport *viewport)
+{
+ bool ret = (viewport->flag & DO_UPDATE);
+ viewport->flag &= ~DO_UPDATE;
+ return ret;
+}
+
+GPUViewport *GPU_viewport_create(void)
+{
+ GPUViewport *viewport = MEM_callocN(sizeof(GPUViewport), "GPUViewport");
+ viewport->fbl = MEM_callocN(sizeof(DefaultFramebufferList), "FramebufferList");
+ viewport->txl = MEM_callocN(sizeof(DefaultTextureList), "TextureList");
+ viewport->idatalist = DRW_instance_data_list_create();
+
+ viewport->size[0] = viewport->size[1] = -1;
+
+ return viewport;
+}
+
+GPUViewport *GPU_viewport_create_from_offscreen(struct GPUOffScreen *ofs)
+{
+ GPUViewport *viewport = GPU_viewport_create();
+ GPU_offscreen_viewport_data_get(ofs, &viewport->fbl->default_fb, &viewport->txl->color, &viewport->txl->depth);
+ viewport->size[0] = GPU_offscreen_width(ofs);
+ viewport->size[1] = GPU_offscreen_height(ofs);
+ return viewport;
+}
+/**
+ * Clear vars assigned from offscreen, so we don't free data owned by `GPUOffScreen`.
+ */
+void GPU_viewport_clear_from_offscreen(GPUViewport *viewport)
+{
+ viewport->fbl->default_fb = NULL;
+ viewport->txl->color = NULL;
+ viewport->txl->depth = NULL;
+}
+
+void *GPU_viewport_engine_data_create(GPUViewport *viewport, void *engine_type)
+{
+ LinkData *ld = MEM_callocN(sizeof(LinkData), "LinkData");
+ ViewportEngineData *data = MEM_callocN(sizeof(ViewportEngineData), "ViewportEngineData");
+ int fbl_len, txl_len, psl_len, stl_len;
+
+ DRW_engine_viewport_data_size_get(engine_type, &fbl_len, &txl_len, &psl_len, &stl_len);
+
+ data->engine_type = engine_type;
+
+ data->fbl = MEM_callocN((sizeof(void *) * fbl_len) + sizeof(FramebufferList), "FramebufferList");
+ data->txl = MEM_callocN((sizeof(void *) * txl_len) + sizeof(TextureList), "TextureList");
+ data->psl = MEM_callocN((sizeof(void *) * psl_len) + sizeof(PassList), "PassList");
+ data->stl = MEM_callocN((sizeof(void *) * stl_len) + sizeof(StorageList), "StorageList");
+
+ ld->data = data;
+ BLI_addtail(&viewport->data, ld);
+
+ return data;
+}
+
+static void gpu_viewport_engines_data_free(GPUViewport *viewport)
+{
+ int fbl_len, txl_len, psl_len, stl_len;
+
+ LinkData *next;
+ for (LinkData *link = viewport->data.first; link; link = next) {
+ next = link->next;
+ ViewportEngineData *data = link->data;
+ DRW_engine_viewport_data_size_get(data->engine_type, &fbl_len, &txl_len, &psl_len, &stl_len);
+
+ gpu_viewport_buffers_free(data->fbl, fbl_len, data->txl, txl_len);
+ gpu_viewport_passes_free(data->psl, psl_len);
+ gpu_viewport_storage_free(data->stl, stl_len);
+
+ MEM_freeN(data->fbl);
+ MEM_freeN(data->txl);
+ MEM_freeN(data->psl);
+ MEM_freeN(data->stl);
+
+ /* We could handle this in the DRW module */
+ if (data->text_draw_cache) {
+ extern void DRW_text_cache_destroy(struct DRWTextStore *dt);
+ DRW_text_cache_destroy(data->text_draw_cache);
+ data->text_draw_cache = NULL;
+ }
+
+ MEM_freeN(data);
+
+ BLI_remlink(&viewport->data, link);
+ MEM_freeN(link);
+ }
+
+ gpu_viewport_texture_pool_free(viewport);
+}
+
+void *GPU_viewport_engine_data_get(GPUViewport *viewport, void *engine_type)
+{
+ for (LinkData *link = viewport->data.first; link; link = link->next) {
+ ViewportEngineData *vdata = link->data;
+ if (vdata->engine_type == engine_type) {
+ return vdata;
+ }
+ }
+ return NULL;
+}
+
+ViewportMemoryPool *GPU_viewport_mempool_get(GPUViewport *viewport)
+{
+ return &viewport->vmempool;
+}
+
+struct DRWInstanceDataList *GPU_viewport_instance_data_list_get(GPUViewport *viewport)
+{
+ return viewport->idatalist;
+}
+
+void *GPU_viewport_framebuffer_list_get(GPUViewport *viewport)
+{
+ return viewport->fbl;
+}
+
+void *GPU_viewport_texture_list_get(GPUViewport *viewport)
+{
+ return viewport->txl;
+}
+
+void GPU_viewport_size_get(const GPUViewport *viewport, int size[2])
+{
+ size[0] = viewport->size[0];
+ size[1] = viewport->size[1];
+}
+
+/**
+ * Special case, this is needed for when we have a viewport without a frame-buffer output
+ * (occlusion queries for eg) but still need to set the size since it may be used for other calculations.
+ */
+void GPU_viewport_size_set(GPUViewport *viewport, const int size[2])
+{
+ viewport->size[0] = size[0];
+ viewport->size[1] = size[1];
+}
+
+/**
+ * Try to find a texture coresponding to params into the texture pool.
+ * If no texture was found, create one and add it to the pool.
+ */
+GPUTexture *GPU_viewport_texture_pool_query(GPUViewport *viewport, void *engine, int width, int height, int channels, int format)
+{
+ GPUTexture *tex;
+
+ for (ViewportTempTexture *tmp_tex = viewport->tex_pool.first; tmp_tex; tmp_tex = tmp_tex->next) {
+ if ((GPU_texture_width(tmp_tex->texture) == width) &&
+ (GPU_texture_height(tmp_tex->texture) == height) &&
+ (GPU_texture_format(tmp_tex->texture) == format))
+ {
+ /* Search if the engine is not already using this texture */
+ for (int i = 0; i < MAX_ENGINE_BUFFER_SHARING; ++i) {
+ if (tmp_tex->user[i] == engine) {
+ break;
+ }
+
+ if (tmp_tex->user[i] == NULL) {
+ tmp_tex->user[i] = engine;
+ return tmp_tex->texture;
+ }
+ }
+ }
+ }
+
+ tex = GPU_texture_create_2D_custom(width, height, channels, format, NULL, NULL);
+
+ ViewportTempTexture *tmp_tex = MEM_callocN(sizeof(ViewportTempTexture), "ViewportTempTexture");
+ tmp_tex->texture = tex;
+ tmp_tex->user[0] = engine;
+
+ BLI_addtail(&viewport->tex_pool, tmp_tex);
+
+ return tex;
+}
+
+static void gpu_viewport_texture_pool_clear_users(GPUViewport *viewport)
+{
+ ViewportTempTexture *tmp_tex_next;
+
+ for (ViewportTempTexture *tmp_tex = viewport->tex_pool.first; tmp_tex; tmp_tex = tmp_tex_next) {
+ tmp_tex_next = tmp_tex->next;
+ bool no_user = true;
+ for (int i = 0; i < MAX_ENGINE_BUFFER_SHARING; ++i) {
+ if (tmp_tex->user[i] != NULL) {
+ tmp_tex->user[i] = NULL;
+ no_user = false;
+ }
+ }
+
+ if (no_user) {
+ GPU_texture_free(tmp_tex->texture);
+ BLI_freelinkN(&viewport->tex_pool, tmp_tex);
+ }
+ }
+}
+
+static void gpu_viewport_texture_pool_free(GPUViewport *viewport)
+{
+ for (ViewportTempTexture *tmp_tex = viewport->tex_pool.first; tmp_tex; tmp_tex = tmp_tex->next) {
+ GPU_texture_free(tmp_tex->texture);
+ }
+
+ BLI_freelistN(&viewport->tex_pool);
+}
+
+bool GPU_viewport_engines_data_validate(GPUViewport *viewport, unsigned int hash)
+{
+ bool dirty = false;
+
+ if (viewport->data_hash != hash) {
+ gpu_viewport_engines_data_free(viewport);
+ dirty = true;
+ }
+
+ viewport->data_hash = hash;
+
+ return dirty;
+}
+
+void GPU_viewport_cache_release(GPUViewport *viewport)
+{
+ for (LinkData *link = viewport->data.first; link; link = link->next) {
+ ViewportEngineData *data = link->data;
+ int psl_len;
+ DRW_engine_viewport_data_size_get(data->engine_type, NULL, NULL, &psl_len, NULL);
+ gpu_viewport_passes_free(data->psl, psl_len);
+ }
+}
+
+void GPU_viewport_bind(GPUViewport *viewport, const rcti *rect)
+{
+ DefaultFramebufferList *dfbl = viewport->fbl;
+ DefaultTextureList *dtxl = viewport->txl;
+ int fbl_len, txl_len;
+
+ /* add one pixel because of scissor test */
+ int rect_w = BLI_rcti_size_x(rect) + 1;
+ int rect_h = BLI_rcti_size_y(rect) + 1;
+
+ if (dfbl->default_fb) {
+ if (rect_w != viewport->size[0] || rect_h != viewport->size[1] || U.ogl_multisamples != viewport->samples) {
+ gpu_viewport_buffers_free(
+ (FramebufferList *)viewport->fbl, default_fbl_len,
+ (TextureList *)viewport->txl, default_txl_len);
+
+ for (LinkData *link = viewport->data.first; link; link = link->next) {
+ ViewportEngineData *data = link->data;
+ DRW_engine_viewport_data_size_get(data->engine_type, &fbl_len, &txl_len, NULL, NULL);
+ gpu_viewport_buffers_free(data->fbl, fbl_len, data->txl, txl_len);
+ }
+
+ gpu_viewport_texture_pool_free(viewport);
+ }
+ }
+
+ gpu_viewport_texture_pool_clear_users(viewport);
+
+ /* Multisample Buffer */
+ if (U.ogl_multisamples > 0) {
+ if (!dfbl->default_fb) {
+ bool ok = true;
+ viewport->samples = U.ogl_multisamples;
+
+ dfbl->multisample_fb = GPU_framebuffer_create();
+ if (!dfbl->multisample_fb) {
+ ok = false;
+ goto cleanup_multisample;
+ }
+
+ /* Color */
+ dtxl->multisample_color = GPU_texture_create_2D_multisample(rect_w, rect_h, NULL, U.ogl_multisamples, NULL);
+ if (!dtxl->multisample_color) {
+ ok = false;
+ goto cleanup_multisample;
+ }
+
+ if (!GPU_framebuffer_texture_attach(dfbl->multisample_fb, dtxl->multisample_color, 0, 0)) {
+ ok = false;
+ goto cleanup_multisample;
+ }
+
+ /* Depth */
+ dtxl->multisample_depth = GPU_texture_create_depth_with_stencil_multisample(rect_w, rect_h,
+ U.ogl_multisamples, NULL);
+
+ if (!dtxl->multisample_depth) {
+ ok = false;
+ goto cleanup_multisample;
+ }
+
+ if (!GPU_framebuffer_texture_attach(dfbl->multisample_fb, dtxl->multisample_depth, 0, 0)) {
+ ok = false;
+ goto cleanup_multisample;
+ }
+ else if (!GPU_framebuffer_check_valid(dfbl->multisample_fb, NULL)) {
+ ok = false;
+ goto cleanup_multisample;
+ }
+
+cleanup_multisample:
+ if (!ok) {
+ GPU_viewport_free(viewport);
+ MEM_freeN(viewport);
+ return;
+ }
+ }
+ }
+
+ if (!dfbl->default_fb) {
+ bool ok = true;
+ viewport->size[0] = rect_w;
+ viewport->size[1] = rect_h;
+
+ dfbl->default_fb = GPU_framebuffer_create();
+ if (!dfbl->default_fb) {
+ ok = false;
+ goto cleanup;
+ }
+
+ /* Color */
+ dtxl->color = GPU_texture_create_2D(rect_w, rect_h, NULL, NULL);
+ if (!dtxl->color) {
+ ok = false;
+ goto cleanup;
+ }
+
+ if (!GPU_framebuffer_texture_attach(dfbl->default_fb, dtxl->color, 0, 0)) {
+ ok = false;
+ goto cleanup;
+ }
+
+ /* Depth */
+ dtxl->depth = GPU_texture_create_depth_with_stencil(rect_w, rect_h, NULL);
+
+ if (dtxl->depth) {
+ /* Define texture parameters */
+ GPU_texture_bind(dtxl->depth, 0);
+ GPU_texture_compare_mode(dtxl->depth, false);
+ GPU_texture_filter_mode(dtxl->depth, true);
+ GPU_texture_unbind(dtxl->depth);
+ }
+ else {
+ ok = false;
+ goto cleanup;
+ }
+
+ if (!GPU_framebuffer_texture_attach(dfbl->default_fb, dtxl->depth, 0, 0)) {
+ ok = false;
+ goto cleanup;
+ }
+ else if (!GPU_framebuffer_check_valid(dfbl->default_fb, NULL)) {
+ ok = false;
+ goto cleanup;
+ }
+
+cleanup:
+ if (!ok) {
+ GPU_viewport_free(viewport);
+ MEM_freeN(viewport);
+ return;
+ }
+
+ GPU_framebuffer_restore();
+ }
+
+ GPU_framebuffer_slots_bind(dfbl->default_fb, 0);
+}
+
+static void draw_ofs_to_screen(GPUViewport *viewport)
+{
+ DefaultTextureList *dtxl = viewport->txl;
+
+ GPUTexture *color = dtxl->color;
+
+ const float w = (float)GPU_texture_width(color);
+ const float h = (float)GPU_texture_height(color);
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int texcoord = GWN_vertformat_attr_add(format, "texCoord", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_IMAGE_MODULATE_ALPHA);
+ GPU_texture_bind(color, 0);
+
+ immUniform1i("image", 0); /* default GL_TEXTURE0 unit */
+
+ immBegin(GWN_PRIM_TRI_STRIP, 4);
+
+ immAttrib2f(texcoord, 0.0f, 0.0f);
+ immVertex2f(pos, 0.0f, 0.0f);
+
+ immAttrib2f(texcoord, 1.0f, 0.0f);
+ immVertex2f(pos, w, 0.0f);
+
+ immAttrib2f(texcoord, 0.0f, 1.0f);
+ immVertex2f(pos, 0.0f, h);
+
+ immAttrib2f(texcoord, 1.0f, 1.0f);
+ immVertex2f(pos, w, h);
+
+ immEnd();
+
+ GPU_texture_unbind(color);
+
+ immUnbindProgram();
+}
+
+void GPU_viewport_unbind(GPUViewport *viewport)
+{
+ DefaultFramebufferList *dfbl = viewport->fbl;
+
+ if (dfbl->default_fb) {
+ GPU_framebuffer_texture_unbind(NULL, NULL);
+ GPU_framebuffer_restore();
+
+ glEnable(GL_SCISSOR_TEST);
+ glDisable(GL_DEPTH_TEST);
+
+ /* This might be bandwidth limiting */
+ draw_ofs_to_screen(viewport);
+ }
+}
+
+static void gpu_viewport_buffers_free(
+ FramebufferList *fbl, int fbl_len,
+ TextureList *txl, int txl_len)
+{
+ for (int i = 0; i < fbl_len; i++) {
+ GPUFrameBuffer *fb = fbl->framebuffers[i];
+ if (fb) {
+ GPU_framebuffer_free(fb);
+ fbl->framebuffers[i] = NULL;
+ }
+ }
+ for (int i = 0; i < txl_len; i++) {
+ GPUTexture *tex = txl->textures[i];
+ if (tex) {
+ GPU_texture_free(tex);
+ txl->textures[i] = NULL;
+ }
+ }
+}
+
+static void gpu_viewport_storage_free(StorageList *stl, int stl_len)
+{
+ for (int i = 0; i < stl_len; i++) {
+ void *storage = stl->storage[i];
+ if (storage) {
+ MEM_freeN(storage);
+ stl->storage[i] = NULL;
+ }
+ }
+}
+
+static void gpu_viewport_passes_free(PassList *psl, int psl_len)
+{
+ for (int i = 0; i < psl_len; i++) {
+ struct DRWPass *pass = psl->passes[i];
+ if (pass) {
+ DRW_pass_free(pass);
+ psl->passes[i] = NULL;
+ }
+ }
+}
+
+void GPU_viewport_free(GPUViewport *viewport)
+{
+ gpu_viewport_engines_data_free(viewport);
+
+ gpu_viewport_buffers_free(
+ (FramebufferList *)viewport->fbl, default_fbl_len,
+ (TextureList *)viewport->txl, default_txl_len);
+
+ gpu_viewport_texture_pool_free(viewport);
+
+ MEM_freeN(viewport->fbl);
+ MEM_freeN(viewport->txl);
+
+ if (viewport->vmempool.calls != NULL) {
+ BLI_mempool_destroy(viewport->vmempool.calls);
+ }
+ if (viewport->vmempool.calls_generate != NULL) {
+ BLI_mempool_destroy(viewport->vmempool.calls_generate);
+ }
+ if (viewport->vmempool.shgroups != NULL) {
+ BLI_mempool_destroy(viewport->vmempool.shgroups);
+ }
+ if (viewport->vmempool.uniforms != NULL) {
+ BLI_mempool_destroy(viewport->vmempool.uniforms);
+ }
+ if (viewport->vmempool.passes != NULL) {
+ BLI_mempool_destroy(viewport->vmempool.passes);
+ }
+
+ DRW_instance_data_list_free(viewport->idatalist);
+ MEM_freeN(viewport->idatalist);
+
+ GPU_viewport_debug_depth_free(viewport);
+}
+
+/****************** debug ********************/
+
+bool GPU_viewport_debug_depth_create(GPUViewport *viewport, int width, int height, char err_out[256])
+{
+ viewport->debug_depth = GPU_texture_create_2D_custom(width, height, 4, GPU_RGBA16F, NULL, err_out);
+ return (viewport->debug_depth != NULL);
+}
+
+void GPU_viewport_debug_depth_free(GPUViewport *viewport)
+{
+ if (viewport->debug_depth != NULL) {
+ MEM_freeN(viewport->debug_depth);
+ viewport->debug_depth = NULL;
+ }
+}
+
+void GPU_viewport_debug_depth_store(GPUViewport *viewport, const int x, const int y)
+{
+ const int w = GPU_texture_width(viewport->debug_depth);
+ const int h = GPU_texture_height(viewport->debug_depth);
+
+ GPU_texture_bind(viewport->debug_depth, 0);
+ glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, x, y, w, h, 0);
+ GPU_texture_unbind(viewport->debug_depth);
+}
+
+void GPU_viewport_debug_depth_draw(GPUViewport *viewport, const float znear, const float zfar)
+{
+ const float w = (float)GPU_texture_width(viewport->debug_depth);
+ const float h = (float)GPU_texture_height(viewport->debug_depth);
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int texcoord = GWN_vertformat_attr_add(format, "texCoord", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_IMAGE_DEPTH);
+
+ GPU_texture_bind(viewport->debug_depth, 0);
+
+ immUniform1f("znear", znear);
+ immUniform1f("zfar", zfar);
+ immUniform1i("image", 0); /* default GL_TEXTURE0 unit */
+
+ immBegin(GWN_PRIM_TRI_STRIP, 4);
+
+ immAttrib2f(texcoord, 0.0f, 0.0f);
+ immVertex2f(pos, 0.0f, 0.0f);
+
+ immAttrib2f(texcoord, 1.0f, 0.0f);
+ immVertex2f(pos, w, 0.0f);
+
+ immAttrib2f(texcoord, 0.0f, 1.0f);
+ immVertex2f(pos, 0.0f, h);
+
+ immAttrib2f(texcoord, 1.0f, 1.0f);
+ immVertex2f(pos, w, h);
+
+ immEnd();
+
+ GPU_texture_unbind(viewport->debug_depth);
+
+ immUnbindProgram();
+}
+
+int GPU_viewport_debug_depth_width(const GPUViewport *viewport)
+{
+ return GPU_texture_width(viewport->debug_depth);
+}
+
+int GPU_viewport_debug_depth_height(const GPUViewport *viewport)
+{
+ return GPU_texture_height(viewport->debug_depth);
+}
+
+bool GPU_viewport_debug_depth_is_valid(GPUViewport *viewport)
+{
+ return viewport->debug_depth != NULL;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_2D_flat_color_vert.glsl b/source/blender/gpu/shaders/gpu_shader_2D_flat_color_vert.glsl
new file mode 100644
index 00000000000..769e2b0e37c
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_2D_flat_color_vert.glsl
@@ -0,0 +1,13 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+
+in vec2 pos;
+in vec4 color;
+
+flat out vec4 finalColor;
+
+void main()
+{
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 0.0, 1.0);
+ finalColor = color;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_2D_image_vert.glsl b/source/blender/gpu/shaders/gpu_shader_2D_image_vert.glsl
new file mode 100644
index 00000000000..228f3f1da19
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_2D_image_vert.glsl
@@ -0,0 +1,13 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+
+/* Keep in sync with intern/opencolorio/gpu_shader_display_transform_vertex.glsl */
+in vec2 texCoord;
+in vec2 pos;
+out vec2 texCoord_interp;
+
+void main()
+{
+ gl_Position = ModelViewProjectionMatrix * vec4(pos.xy, 0.0f, 1.0f);
+ texCoord_interp = texCoord;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_2D_line_dashed_frag.glsl b/source/blender/gpu/shaders/gpu_shader_2D_line_dashed_frag.glsl
new file mode 100644
index 00000000000..7caf00f58fd
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_2D_line_dashed_frag.glsl
@@ -0,0 +1,54 @@
+
+/*
+ * Fragment Shader for dashed lines, with uniform multi-color(s), or any single-color, and any thickness.
+ *
+ * Dashed is performed in screen space.
+ */
+
+uniform float dash_width;
+
+/* Simple mode, discarding non-dash parts (so no need for blending at all). */
+uniform float dash_factor; /* if > 1.0, solid line. */
+
+/* More advanced mode, allowing for complex, multi-colored patterns. Enabled when num_colors > 0. */
+/* Note: max number of steps/colors in pattern is 32! */
+uniform int num_colors; /* Enabled if > 0, 1 for solid line. */
+uniform vec4 colors[32];
+
+noperspective in float distance_along_line;
+noperspective in vec4 color_geom;
+
+out vec4 fragColor;
+
+void main()
+{
+ /* Multi-color option. */
+ if (num_colors > 0) {
+ /* Solid line case, simple. */
+ if (num_colors == 1) {
+ fragColor = colors[0];
+ }
+ /* Actually dashed line... */
+ else {
+ float normalized_distance = fract(distance_along_line / dash_width);
+ fragColor = colors[int(normalized_distance * num_colors)];
+ }
+ }
+ /* Single color option. */
+ else {
+ /* Solid line case, simple. */
+ if (dash_factor >= 1.0f) {
+ fragColor = color_geom;
+ }
+ /* Actually dashed line... */
+ else {
+ float normalized_distance = fract(distance_along_line / dash_width);
+ if (normalized_distance <= dash_factor) {
+ fragColor = color_geom;
+ }
+ else {
+ discard;
+ }
+ }
+ }
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_2D_line_dashed_geom.glsl b/source/blender/gpu/shaders/gpu_shader_2D_line_dashed_geom.glsl
new file mode 100644
index 00000000000..db4bdf0a9f0
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_2D_line_dashed_geom.glsl
@@ -0,0 +1,56 @@
+
+/*
+ * Geometry Shader for dashed lines, with uniform multi-color(s), or any single-color, and unary thickness.
+ *
+ * Dashed is performed in screen space.
+ */
+
+
+/* Make to be used with dynamic batching so no Model Matrix needed */
+uniform mat4 ModelViewProjectionMatrix;
+uniform vec2 viewport_size;
+
+/* Uniforms from fragment shader, used here to optimize out useless computation in case of solid line. */
+uniform float dash_factor; /* if > 1.0, solid line. */
+uniform int num_colors; /* Enabled if > 0, 1 for solid line. */
+
+layout(lines) in;
+
+in vec4 color_vert[];
+
+layout(line_strip, max_vertices = 2) out;
+noperspective out float distance_along_line;
+noperspective out vec4 color_geom;
+
+void main()
+{
+ vec4 v1 = gl_in[0].gl_Position;
+ vec4 v2 = gl_in[1].gl_Position;
+
+ gl_Position = v1;
+ color_geom = color_vert[0];
+ distance_along_line = 0.0f;
+ EmitVertex();
+
+ gl_Position = v2;
+ color_geom = color_vert[1];
+ if ((num_colors == 1) || (dash_factor >= 1.0f)) {
+ /* Solid line, optimize out distance computation! */
+ distance_along_line = 0.0f;
+ }
+ else {
+ vec2 p1 = (v1.xy / v1.w) * 0.5 + 0.5; // <- device coordinates in [0..1] range.
+ p1 = p1 * viewport_size; // <- 'virtual' screen coordinates.
+
+ vec2 p2 = (v2.xy / v2.w) * 0.5 + 0.5; // <- device coordinates in [0..1] range.
+ p2 = p2 * viewport_size; // <- 'virtual' screen coordinates.
+
+ distance_along_line = distance(p1, p2);
+ }
+ EmitVertex();
+
+ EndPrimitive();
+
+ /* Note: we could also use similar approach as diag_stripes_frag, but this would give us dashed 'anchored'
+ * to the screen, and not to one end of the line... */
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_2D_line_dashed_uniform_color_vert.glsl b/source/blender/gpu/shaders/gpu_shader_2D_line_dashed_uniform_color_vert.glsl
new file mode 100644
index 00000000000..f5c611586aa
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_2D_line_dashed_uniform_color_vert.glsl
@@ -0,0 +1,21 @@
+
+/*
+ * Vertex Shader for dashed lines with 2D coordinates, with uniform multi-colors or uniform single-color,
+ * and unary thickness.
+ *
+ * Dashed is performed in screen space.
+ */
+
+uniform mat4 ModelViewProjectionMatrix;
+
+uniform vec4 color;
+
+in vec2 pos;
+
+out vec4 color_vert;
+
+void main()
+{
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 0.0, 1.0);
+ color_vert = color;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_2D_line_dashed_width_geom.glsl b/source/blender/gpu/shaders/gpu_shader_2D_line_dashed_width_geom.glsl
new file mode 100644
index 00000000000..20c72f4407d
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_2D_line_dashed_width_geom.glsl
@@ -0,0 +1,59 @@
+
+// Draw dashed lines, perforated in screen space, with non-unary width.
+
+/* Make to be used with dynamic batching so no Model Matrix needed */
+uniform mat4 ModelViewProjectionMatrix;
+uniform vec2 viewport_size;
+
+/* Width of the generated 'line'. */
+uniform float width; /* in pixels, screen space. */
+
+/* Uniforms from fragment shader, used here to optimize out useless computation in case of solid line. */
+uniform float dash_factor; /* if > 1.0, solid line. */
+uniform int num_colors; /* Enabled if > 0, 1 for solid line. */
+
+layout(lines) in;
+
+layout(triangle_strip, max_vertices = 4) out;
+noperspective out float distance_along_line;
+
+void main()
+{
+ vec4 v1 = gl_in[0].gl_Position;
+ vec4 v2 = gl_in[1].gl_Position;
+
+ /* Width, from 2D screen space in pixels, to ModelViewProjection space of each input vertices. */
+ float w1 = (width / viewport_size) * v1.w * 2.0;
+ float w2 = (width / viewport_size) * v2.w * 2.0;
+
+ /* Normalized vector parallel to screen and orthogonal to line. */
+ vec4 wdir = normalize(vec4(v1.y - v2.y, v2.x - v1.x, 0.0, 0.0))
+
+ distance_along_line = 0.0f;
+ gl_Position = v1 + (wdir * w1);
+ EmitVertex();
+
+ gl_Position = v1 - (wdir * w1);
+ EmitVertex();
+
+ if ((num_colors == 1) || (dash_factor >= 1.0f)) {
+ /* Solid line, optimize out distance computation! */
+ distance_along_line = 0.0f;
+ }
+ else {
+ vec2 p1 = (v1.xy / v1.w) * 0.5 + 0.5; // <- device coordinates in [0..1] range.
+ p1 = p1 * viewport_size; // <- 'virtual' screen coordinates.
+
+ vec2 p2 = (v2.xy / v2.w) * 0.5 + 0.5; // <- device coordinates in [0..1] range.
+ p2 = p2 * viewport_size; // <- 'virtual' screen coordinates.
+
+ distance_along_line = distance(p1, p2);
+ }
+ gl_Position = v2 + (wdir * w2);
+ EmitVertex();
+
+ gl_Position = v2 - (wdir * w2);
+ EmitVertex();
+
+ EndPrimitive();
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_2D_point_uniform_size_aa_vert.glsl b/source/blender/gpu/shaders/gpu_shader_2D_point_uniform_size_aa_vert.glsl
new file mode 100644
index 00000000000..1f833cfb7be
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_2D_point_uniform_size_aa_vert.glsl
@@ -0,0 +1,21 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+uniform float size;
+
+in vec2 pos;
+out vec2 radii;
+
+void main() {
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 0.0, 1.0);
+ gl_PointSize = size;
+
+ // calculate concentric radii in pixels
+ float radius = 0.5 * size;
+
+ // start at the outside and progress toward the center
+ radii[0] = radius;
+ radii[1] = radius - 1.0;
+
+ // convert to PointCoord units
+ radii /= size;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_2D_point_uniform_size_outline_aa_vert.glsl b/source/blender/gpu/shaders/gpu_shader_2D_point_uniform_size_outline_aa_vert.glsl
new file mode 100644
index 00000000000..99bdeb22904
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_2D_point_uniform_size_outline_aa_vert.glsl
@@ -0,0 +1,24 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+uniform float size;
+uniform float outlineWidth;
+
+in vec2 pos;
+out vec4 radii;
+
+void main() {
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 0.0, 1.0);
+ gl_PointSize = size;
+
+ // calculate concentric radii in pixels
+ float radius = 0.5 * size;
+
+ // start at the outside and progress toward the center
+ radii[0] = radius;
+ radii[1] = radius - 1.0;
+ radii[2] = radius - outlineWidth;
+ radii[3] = radius - outlineWidth - 1.0;
+
+ // convert to PointCoord units
+ radii /= size;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_2D_point_uniform_size_varying_color_outline_aa_vert.glsl b/source/blender/gpu/shaders/gpu_shader_2D_point_uniform_size_varying_color_outline_aa_vert.glsl
new file mode 100644
index 00000000000..5fad95236df
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_2D_point_uniform_size_varying_color_outline_aa_vert.glsl
@@ -0,0 +1,27 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+uniform float size;
+uniform float outlineWidth;
+
+in vec2 pos;
+in vec4 color;
+out vec4 radii;
+out vec4 fillColor;
+
+void main() {
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 0.0, 1.0);
+ gl_PointSize = size;
+ fillColor = color;
+
+ // calculate concentric radii in pixels
+ float radius = 0.5 * size;
+
+ // start at the outside and progress toward the center
+ radii[0] = radius;
+ radii[1] = radius - 1.0;
+ radii[2] = radius - outlineWidth;
+ radii[3] = radius - outlineWidth - 1.0;
+
+ // convert to PointCoord units
+ radii /= size;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_2D_point_varying_size_varying_color_vert.glsl b/source/blender/gpu/shaders/gpu_shader_2D_point_varying_size_varying_color_vert.glsl
new file mode 100644
index 00000000000..d6aacf0cdc5
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_2D_point_varying_size_varying_color_vert.glsl
@@ -0,0 +1,14 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+
+in vec2 pos;
+in float size;
+in vec4 color;
+out vec4 finalColor;
+
+void main()
+{
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 0.0, 1.0);
+ gl_PointSize = size;
+ finalColor = color;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_2D_smooth_color_frag.glsl b/source/blender/gpu/shaders/gpu_shader_2D_smooth_color_frag.glsl
new file mode 100644
index 00000000000..4a4bfb6a616
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_2D_smooth_color_frag.glsl
@@ -0,0 +1,8 @@
+
+noperspective in vec4 finalColor;
+out vec4 fragColor;
+
+void main()
+{
+ fragColor = finalColor;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_2D_smooth_color_vert.glsl b/source/blender/gpu/shaders/gpu_shader_2D_smooth_color_vert.glsl
new file mode 100644
index 00000000000..fe91f4d0902
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_2D_smooth_color_vert.glsl
@@ -0,0 +1,13 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+
+in vec2 pos;
+in vec4 color;
+
+noperspective out vec4 finalColor;
+
+void main()
+{
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 0.0, 1.0);
+ finalColor = color;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_2D_vert.glsl b/source/blender/gpu/shaders/gpu_shader_2D_vert.glsl
new file mode 100644
index 00000000000..89e3c52f9f8
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_2D_vert.glsl
@@ -0,0 +1,9 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+
+in vec2 pos;
+
+void main()
+{
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 0.0, 1.0);
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_3D_clipped_uniform_color_vert.glsl b/source/blender/gpu/shaders/gpu_shader_3D_clipped_uniform_color_vert.glsl
new file mode 100644
index 00000000000..84e44837264
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_3D_clipped_uniform_color_vert.glsl
@@ -0,0 +1,12 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+uniform mat4 ModelMatrix;
+uniform vec4 ClipPlane;
+
+in vec3 pos;
+
+void main()
+{
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
+ gl_ClipDistance[0] = dot(ModelMatrix * vec4(pos, 1.0), ClipPlane);
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_3D_flat_color_vert.glsl b/source/blender/gpu/shaders/gpu_shader_3D_flat_color_vert.glsl
new file mode 100644
index 00000000000..7db7e28d8e6
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_3D_flat_color_vert.glsl
@@ -0,0 +1,26 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+
+in vec3 pos;
+#if defined(USE_COLOR_U32)
+in uint color;
+#else
+in vec4 color;
+#endif
+
+flat out vec4 finalColor;
+
+void main()
+{
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
+
+#if defined(USE_COLOR_U32)
+ finalColor = vec4(
+ ((color ) & uint(0xFF)) * (1.0f / 255.0f),
+ ((color >> 8) & uint(0xFF)) * (1.0f / 255.0f),
+ ((color >> 16) & uint(0xFF)) * (1.0f / 255.0f),
+ ((color >> 24) ) * (1.0f / 255.0f));
+#else
+ finalColor = color;
+#endif
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_3D_groundline_geom.glsl b/source/blender/gpu/shaders/gpu_shader_3D_groundline_geom.glsl
new file mode 100644
index 00000000000..f16fa21b342
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_3D_groundline_geom.glsl
@@ -0,0 +1,16 @@
+
+/* Make to be used with dynamic batching so no Model Matrix needed */
+uniform mat4 ViewProjectionMatrix;
+
+layout(points) in;
+layout(line_strip, max_vertices = 2) out;
+
+void main()
+{
+ vec3 vert = gl_in[0].gl_Position.xyz;
+ gl_Position = ViewProjectionMatrix * vec4(vert.xyz, 1.0);
+ EmitVertex();
+ gl_Position = ViewProjectionMatrix * vec4(vert.xy, 0.0, 1.0);
+ EmitVertex();
+ EndPrimitive();
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_3D_groundpoint_vert.glsl b/source/blender/gpu/shaders/gpu_shader_3D_groundpoint_vert.glsl
new file mode 100644
index 00000000000..55f410eb25d
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_3D_groundpoint_vert.glsl
@@ -0,0 +1,11 @@
+
+/* Made to be used with dynamic batching so no Model Matrix needed */
+uniform mat4 ViewProjectionMatrix;
+
+in vec3 pos;
+
+void main()
+{
+ gl_Position = ViewProjectionMatrix * vec4(pos.xy, 0.0, 1.0);
+ gl_PointSize = 2.0;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_3D_image_vert.glsl b/source/blender/gpu/shaders/gpu_shader_3D_image_vert.glsl
new file mode 100644
index 00000000000..eb877ab20b6
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_3D_image_vert.glsl
@@ -0,0 +1,12 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+
+in vec2 texCoord;
+in vec3 pos;
+out vec2 texCoord_interp;
+
+void main()
+{
+ gl_Position = ModelViewProjectionMatrix * vec4(pos.xyz, 1.0f);
+ texCoord_interp = texCoord;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_3D_line_dashed_uniform_color_legacy_vert.glsl b/source/blender/gpu/shaders/gpu_shader_3D_line_dashed_uniform_color_legacy_vert.glsl
new file mode 100644
index 00000000000..84fbf977846
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_3D_line_dashed_uniform_color_legacy_vert.glsl
@@ -0,0 +1,26 @@
+
+/*
+ * Vertex Shader for dashed lines with 3D coordinates, with uniform multi-colors or uniform single-color,
+ * and unary thickness.
+ *
+ * Legacy version, without geometry shader support, always produce solid lines!
+ */
+
+uniform mat4 ModelViewProjectionMatrix;
+uniform vec2 viewport_size;
+
+uniform vec4 color;
+
+in vec3 pos;
+noperspective out float distance_along_line;
+noperspective out vec4 color_geom;
+
+void main()
+{
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
+
+ /* Hack - prevent stupid GLSL compiler to optimize out unused viewport_size uniform, which gives crash! */
+ distance_along_line = viewport_size.x * 0.000001f - viewport_size.x * 0.0000009f;
+
+ color_geom = color;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_3D_line_dashed_uniform_color_vert.glsl b/source/blender/gpu/shaders/gpu_shader_3D_line_dashed_uniform_color_vert.glsl
new file mode 100644
index 00000000000..2fe08896585
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_3D_line_dashed_uniform_color_vert.glsl
@@ -0,0 +1,21 @@
+
+/*
+ * Vertex Shader for dashed lines with 3D coordinates, with uniform multi-colors or uniform single-color,
+ * and unary thickness.
+ *
+ * Dashed is performed in screen space.
+ */
+
+uniform mat4 ModelViewProjectionMatrix;
+
+uniform vec4 color;
+
+in vec3 pos;
+
+out vec4 color_vert;
+
+void main()
+{
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
+ color_vert = color;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_3D_normal_smooth_color_vert.glsl b/source/blender/gpu/shaders/gpu_shader_3D_normal_smooth_color_vert.glsl
new file mode 100644
index 00000000000..e6b8fed7265
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_3D_normal_smooth_color_vert.glsl
@@ -0,0 +1,22 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+uniform mat3 NormalMatrix;
+
+in vec3 pos;
+in vec3 nor;
+in vec4 color;
+
+#ifdef USE_FLAT_NORMAL
+flat out vec3 normal;
+flat out vec4 finalColor;
+#else
+out vec3 normal;
+out vec4 finalColor;
+#endif
+
+void main()
+{
+ normal = normalize(NormalMatrix * nor);
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
+ finalColor = color;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_3D_normal_vert.glsl b/source/blender/gpu/shaders/gpu_shader_3D_normal_vert.glsl
new file mode 100644
index 00000000000..a3f447a85f9
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_3D_normal_vert.glsl
@@ -0,0 +1,13 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+uniform mat3 NormalMatrix;
+
+in vec3 pos;
+in vec3 nor;
+out vec3 normal;
+
+void main()
+{
+ normal = normalize(NormalMatrix * nor);
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_3D_passthrough_vert.glsl b/source/blender/gpu/shaders/gpu_shader_3D_passthrough_vert.glsl
new file mode 100644
index 00000000000..60793bf56b6
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_3D_passthrough_vert.glsl
@@ -0,0 +1,8 @@
+
+/* Does Nothing */
+in vec3 pos;
+
+void main()
+{
+ gl_Position = vec4(pos, 1.0);
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_3D_point_fixed_size_varying_color_vert.glsl b/source/blender/gpu/shaders/gpu_shader_3D_point_fixed_size_varying_color_vert.glsl
new file mode 100644
index 00000000000..2fe9c0623fa
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_3D_point_fixed_size_varying_color_vert.glsl
@@ -0,0 +1,12 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+
+in vec3 pos;
+in vec4 color;
+out vec4 finalColor;
+
+void main()
+{
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
+ finalColor = color;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_3D_point_uniform_size_aa_vert.glsl b/source/blender/gpu/shaders/gpu_shader_3D_point_uniform_size_aa_vert.glsl
new file mode 100644
index 00000000000..ebc945fcf35
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_3D_point_uniform_size_aa_vert.glsl
@@ -0,0 +1,21 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+uniform float size;
+
+in vec3 pos;
+out vec2 radii;
+
+void main() {
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
+ gl_PointSize = size;
+
+ // calculate concentric radii in pixels
+ float radius = 0.5 * size;
+
+ // start at the outside and progress toward the center
+ radii[0] = radius;
+ radii[1] = radius - 1.0;
+
+ // convert to PointCoord units
+ radii /= size;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_3D_point_uniform_size_outline_aa_vert.glsl b/source/blender/gpu/shaders/gpu_shader_3D_point_uniform_size_outline_aa_vert.glsl
new file mode 100644
index 00000000000..0d6b90cfba4
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_3D_point_uniform_size_outline_aa_vert.glsl
@@ -0,0 +1,24 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+uniform float size;
+uniform float outlineWidth;
+
+in vec3 pos;
+out vec4 radii;
+
+void main() {
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
+ gl_PointSize = size;
+
+ // calculate concentric radii in pixels
+ float radius = 0.5 * size;
+
+ // start at the outside and progress toward the center
+ radii[0] = radius;
+ radii[1] = radius - 1.0;
+ radii[2] = radius - outlineWidth;
+ radii[3] = radius - outlineWidth - 1.0;
+
+ // convert to PointCoord units
+ radii /= size;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_3D_point_varying_size_varying_color_vert.glsl b/source/blender/gpu/shaders/gpu_shader_3D_point_varying_size_varying_color_vert.glsl
new file mode 100644
index 00000000000..e14b9535c89
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_3D_point_varying_size_varying_color_vert.glsl
@@ -0,0 +1,14 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+
+in vec3 pos;
+in float size;
+in vec4 color;
+out vec4 finalColor;
+
+void main()
+{
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
+ gl_PointSize = size;
+ finalColor = color;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_3D_point_varying_size_vert.glsl b/source/blender/gpu/shaders/gpu_shader_3D_point_varying_size_vert.glsl
new file mode 100644
index 00000000000..e4f173ab617
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_3D_point_varying_size_vert.glsl
@@ -0,0 +1,11 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+
+in vec3 pos;
+in float size;
+
+void main()
+{
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
+ gl_PointSize = size;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_3D_smooth_color_frag.glsl b/source/blender/gpu/shaders/gpu_shader_3D_smooth_color_frag.glsl
new file mode 100644
index 00000000000..41fdefd22e8
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_3D_smooth_color_frag.glsl
@@ -0,0 +1,8 @@
+
+in vec4 finalColor;
+out vec4 fragColor;
+
+void main()
+{
+ fragColor = finalColor;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_3D_smooth_color_vert.glsl b/source/blender/gpu/shaders/gpu_shader_3D_smooth_color_vert.glsl
new file mode 100644
index 00000000000..a1feb2f75b7
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_3D_smooth_color_vert.glsl
@@ -0,0 +1,13 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+
+in vec3 pos;
+in vec4 color;
+
+out vec4 finalColor;
+
+void main()
+{
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
+ finalColor = color;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_3D_vert.glsl b/source/blender/gpu/shaders/gpu_shader_3D_vert.glsl
new file mode 100644
index 00000000000..059473ebb74
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_3D_vert.glsl
@@ -0,0 +1,9 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+
+in vec3 pos;
+
+void main()
+{
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_basic_frag.glsl b/source/blender/gpu/shaders/gpu_shader_basic_frag.glsl
index 01a335af048..5f7455582cd 100644
--- a/source/blender/gpu/shaders/gpu_shader_basic_frag.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_basic_frag.glsl
@@ -20,12 +20,10 @@
#define STIPPLE_HEXAGON 3
#define STIPPLE_DIAG_STRIPES 4
#define STIPPLE_DIAG_STRIPES_SWAP 5
-#define STIPPLE_S3D_INTERLACE_ROW 6
-#define STIPPLE_S3D_INTERLACE_ROW_SWAP 7
-#define STIPPLE_S3D_INTERLACE_COLUMN 8
-#define STIPPLE_S3D_INTERLACE_COLUMN_SWAP 9
-#define STIPPLE_S3D_INTERLACE_CHECKERBOARD 10
-#define STIPPLE_S3D_INTERLACE_CHECKERBOARD_SWAP 11
+
+#ifndef NO_SPECULAR
+uniform mat4 ProjectionMatrix;
+#endif
#if defined(USE_SOLID_LIGHTING) || defined(USE_SCENE_LIGHTING)
#if defined(USE_FLAT_NORMAL)
@@ -58,7 +56,7 @@ uniform sampler2D_default texture_map;
#ifdef USE_STIPPLE
uniform int stipple_id;
#if defined(DRAW_LINE)
-varying in float t;
+varying float t;
uniform int stipple_pattern;
#endif
#endif
@@ -74,14 +72,9 @@ void main()
/* We have to use mod function and integer casting.
* This can be optimized further with the bitwise operations
* when GLSL 1.3 is supported. */
- if (stipple_id == STIPPLE_HALFTONE ||
- stipple_id == STIPPLE_S3D_INTERLACE_CHECKERBOARD ||
- stipple_id == STIPPLE_S3D_INTERLACE_CHECKERBOARD_SWAP)
- {
+ if (stipple_id == STIPPLE_HALFTONE) {
int result = int(mod(gl_FragCoord.x + gl_FragCoord.y, 2));
bool dis = result == 0;
- if (stipple_id == STIPPLE_S3D_INTERLACE_CHECKERBOARD_SWAP)
- dis = !dis;
if (dis)
discard;
}
@@ -116,22 +109,6 @@ void main()
if (!((16 - modx > mody && mody > 8 - modx) || mody > 24 - modx))
discard;
}
- else if (stipple_id == STIPPLE_S3D_INTERLACE_ROW || stipple_id == STIPPLE_S3D_INTERLACE_ROW_SWAP) {
- int result = int(mod(gl_FragCoord.y, 2));
- bool dis = result == 0;
- if (stipple_id == STIPPLE_S3D_INTERLACE_ROW_SWAP)
- dis = !dis;
- if (dis)
- discard;
- }
- else if (stipple_id == STIPPLE_S3D_INTERLACE_COLUMN || stipple_id == STIPPLE_S3D_INTERLACE_COLUMN_SWAP) {
- int result = int(mod(gl_FragCoord.x, 2));
- bool dis = result != 0;
- if (stipple_id == STIPPLE_S3D_INTERLACE_COLUMN_SWAP)
- dis = !dis;
- if (dis)
- discard;
- }
else if (stipple_id == STIPPLE_HEXAGON) {
int mody = int(mod(gl_FragCoord.y, 2));
int modx = int(mod(gl_FragCoord.x, 4));
@@ -190,7 +167,7 @@ void main()
#ifndef NO_SPECULAR
/* view vector computation, depends on orthographics or perspective */
- vec3 V = (gl_ProjectionMatrix[3][3] == 0.0) ? normalize(varying_position) : vec3(0.0, 0.0, -1.0);
+ vec3 V = (ProjectionMatrix[3][3] == 0.0) ? normalize(varying_position) : vec3(0.0, 0.0, -1.0);
#endif
for (int i = 0; i < NUM_SCENE_LIGHTS; i++) {
diff --git a/source/blender/gpu/shaders/gpu_shader_basic_geom.glsl b/source/blender/gpu/shaders/gpu_shader_basic_geom.glsl
index a88681a5fd3..13f05b340bf 100644
--- a/source/blender/gpu/shaders/gpu_shader_basic_geom.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_basic_geom.glsl
@@ -14,9 +14,9 @@ layout(line_strip, max_vertices = 10) out;
layout(triangle_strip, max_vertices = 6) out;
#endif
-varying out float t;
-varying in vec4 varying_vertex_color_line[];
-varying out vec4 varying_vertex_color;
+out float t;
+in vec4 varying_vertex_color_line[];
+out vec4 varying_vertex_color;
uniform ivec4 viewport;
uniform float line_width;
diff --git a/source/blender/gpu/shaders/gpu_shader_basic_vert.glsl b/source/blender/gpu/shaders/gpu_shader_basic_vert.glsl
index 42fbdadf1d1..dbf6c267f14 100644
--- a/source/blender/gpu/shaders/gpu_shader_basic_vert.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_basic_vert.glsl
@@ -1,4 +1,8 @@
+uniform mat4 ModelViewMatrix;
+uniform mat4 ProjectionMatrix;
+uniform mat3 NormalMatrix;
+
#if defined(USE_SOLID_LIGHTING) || defined(USE_SCENE_LIGHTING)
#if defined(USE_FLAT_NORMAL)
varying vec3 eyespace_vert_pos;
@@ -29,15 +33,15 @@ varying float gl_ClipDistance[6];
void main()
{
- vec4 co = gl_ModelViewMatrix * gl_Vertex;
+ vec4 co = ModelViewMatrix * gl_Vertex;
#if defined(USE_SOLID_LIGHTING) || defined(USE_SCENE_LIGHTING)
#if !defined(USE_FLAT_NORMAL)
- varying_normal = normalize(gl_NormalMatrix * gl_Normal);
+ varying_normal = normalize(NormalMatrix * gl_Normal);
#endif
#if defined(USE_FLAT_NORMAL)
/* transform vertex into eyespace */
- eyespace_vert_pos = (gl_ModelViewMatrix * gl_Vertex).xyz;
+ eyespace_vert_pos = (ModelViewMatrix * gl_Vertex).xyz;
#endif
#ifndef USE_SOLID_LIGHTING
@@ -45,7 +49,7 @@ void main()
#endif
#endif
- gl_Position = gl_ProjectionMatrix * co;
+ gl_Position = ProjectionMatrix * co;
#ifdef CLIP_WORKAROUND
int i;
diff --git a/source/blender/gpu/shaders/gpu_shader_checker_frag.glsl b/source/blender/gpu/shaders/gpu_shader_checker_frag.glsl
new file mode 100644
index 00000000000..545f6d19e21
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_checker_frag.glsl
@@ -0,0 +1,20 @@
+
+uniform vec4 color1;
+uniform vec4 color2;
+uniform int size;
+
+out vec4 fragColor;
+
+void main()
+{
+ vec2 phase = mod(gl_FragCoord.xy, (size*2));
+
+ if ((phase.x > size && phase.y < size) ||
+ (phase.x < size && phase.y > size))
+ {
+ fragColor = color1;
+ }
+ else {
+ fragColor = color2;
+ }
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_depth_only_frag.glsl b/source/blender/gpu/shaders/gpu_shader_depth_only_frag.glsl
new file mode 100644
index 00000000000..60e71e19004
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_depth_only_frag.glsl
@@ -0,0 +1,6 @@
+
+void main()
+{
+ // no color output, only depth (line below is implicit)
+ // gl_FragDepth = gl_FragCoord.z;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_diag_stripes_frag.glsl b/source/blender/gpu/shaders/gpu_shader_diag_stripes_frag.glsl
new file mode 100644
index 00000000000..beb71c58100
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_diag_stripes_frag.glsl
@@ -0,0 +1,20 @@
+
+uniform vec4 color1;
+uniform vec4 color2;
+uniform int size1;
+uniform int size2;
+
+out vec4 fragColor;
+
+void main()
+{
+ float phase = mod((gl_FragCoord.x + gl_FragCoord.y), (size1 + size2));
+
+ if (phase < size1)
+ {
+ fragColor = color1;
+ }
+ else {
+ fragColor = color2;
+ }
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_edges_front_back_ortho_vert.glsl b/source/blender/gpu/shaders/gpu_shader_edges_front_back_ortho_vert.glsl
new file mode 100644
index 00000000000..4ed7ed56c11
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_edges_front_back_ortho_vert.glsl
@@ -0,0 +1,54 @@
+
+// Draw "fancy" wireframe, displaying front-facing, back-facing and
+// silhouette lines differently.
+// Mike Erwin, April 2015
+
+uniform bool drawFront = true;
+uniform bool drawBack = true;
+uniform bool drawSilhouette = true;
+
+uniform vec4 frontColor;
+uniform vec4 backColor;
+uniform vec4 silhouetteColor;
+
+uniform vec3 eye; // direction we are looking
+
+uniform mat4 ModelViewProjectionMatrix;
+
+in vec3 pos;
+
+// normals of faces this edge joins (object coords)
+in vec3 N1;
+in vec3 N2;
+
+flat out vec4 finalColor;
+
+// TODO: in float angle; // [-pi .. +pi], + peak, 0 flat, - valley
+
+// to discard an entire line, set both endpoints to nowhere
+// and it won't produce any fragments
+const vec4 nowhere = vec4(vec3(0.0), 1.0);
+
+void main()
+{
+ bool face_1_front = dot(N1, eye) > 0.0;
+ bool face_2_front = dot(N2, eye) > 0.0;
+
+ vec4 position = ModelViewProjectionMatrix * vec4(pos, 1.0);
+
+ if (face_1_front && face_2_front) {
+ // front-facing edge
+ gl_Position = drawFront ? position : nowhere;
+ finalColor = frontColor;
+ }
+ else if (face_1_front || face_2_front) {
+ // exactly one face is front-facing, silhouette edge
+ gl_Position = drawSilhouette ? position : nowhere;
+ finalColor = silhouetteColor;
+ }
+ else {
+ // back-facing edge
+ gl_Position = drawBack ? position : nowhere;
+ finalColor = backColor;
+ }
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_edges_front_back_persp_geom.glsl b/source/blender/gpu/shaders/gpu_shader_edges_front_back_persp_geom.glsl
new file mode 100644
index 00000000000..10b5fad7972
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_edges_front_back_persp_geom.glsl
@@ -0,0 +1,60 @@
+
+// Draw "fancy" wireframe, displaying front-facing, back-facing and
+// silhouette lines differently.
+// Mike Erwin, April 2015
+
+// After working with this shader a while, convinced we should make
+// separate shaders for perpective & ortho. (Oct 2016)
+
+// Due to perspective, the line segment's endpoints might disagree on
+// whether the adjacent faces are front facing. This geometry shader
+// decides which edge type to use if endpoints disagree.
+
+uniform mat4 ProjectionMatrix;
+
+uniform bool drawFront = true;
+uniform bool drawBack = true;
+uniform bool drawSilhouette = true;
+
+uniform vec4 frontColor;
+uniform vec4 backColor;
+uniform vec4 silhouetteColor;
+
+layout(lines) in;
+layout(line_strip, max_vertices = 2) out;
+
+in vec4 MV_pos[];
+in float edgeClass[];
+
+flat out vec4 finalColor;
+
+void emitLine(vec4 color)
+{
+ gl_Position = ProjectionMatrix * MV_pos[0];
+ EmitVertex();
+ gl_Position = ProjectionMatrix * MV_pos[1];
+ finalColor = color;
+ EmitVertex();
+ EndPrimitive();
+}
+
+void main()
+{
+ float finalEdgeClass = max(edgeClass[0], edgeClass[1]);
+
+ if (finalEdgeClass > 0.0f) {
+ // front-facing edge
+ if (drawFront)
+ emitLine(frontColor);
+ }
+ else if (finalEdgeClass < 0.0f) {
+ // back-facing edge
+ if (drawBack)
+ emitLine(backColor);
+ }
+ else {
+ // exactly one face is front-facing, silhouette edge
+ if (drawSilhouette)
+ emitLine(silhouetteColor);
+ }
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_edges_front_back_persp_legacy_vert.glsl b/source/blender/gpu/shaders/gpu_shader_edges_front_back_persp_legacy_vert.glsl
new file mode 100644
index 00000000000..30b3bdb890d
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_edges_front_back_persp_legacy_vert.glsl
@@ -0,0 +1,68 @@
+
+// Draw "fancy" wireframe, displaying front-facing, back-facing and
+// silhouette lines differently.
+// Mike Erwin, April 2015
+
+// After working with this shader a while, convinced we should make
+// separate shaders for perpective & ortho. (Oct 2016)
+
+// This shader is an imperfect stepping stone until all platforms are
+// ready for geometry shaders.
+
+// Due to perspective, the line segment's endpoints might disagree on
+// whether the adjacent faces are front facing. Need to use a geometry
+// shader or pass in an extra position attribute (the other endpoint)
+// to do this properly.
+
+uniform bool drawFront = true;
+uniform bool drawBack = true;
+uniform bool drawSilhouette = true;
+
+uniform vec4 frontColor;
+uniform vec4 backColor;
+uniform vec4 silhouetteColor;
+
+uniform mat4 ModelViewMatrix;
+uniform mat4 ModelViewProjectionMatrix;
+uniform mat3 NormalMatrix;
+
+in vec3 pos;
+
+// normals of faces this edge joins (object coords)
+in vec3 N1;
+in vec3 N2;
+
+flat out vec4 finalColor;
+
+// TODO: in float angle; // [-pi .. +pi], + peak, 0 flat, - valley
+
+// to discard an entire line, set its color to invisible
+// (must have GL_BLEND enabled, or discard in fragment shader)
+const vec4 invisible = vec4(0.0);
+
+bool front(vec3 N)
+{
+ vec4 xformed = ModelViewMatrix * vec4(pos, 1.0);
+ return dot(NormalMatrix * N, normalize(-xformed.xyz)) > 0.0;
+}
+
+void main()
+{
+ bool face_1_front = front(N1);
+ bool face_2_front = front(N2);
+
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
+
+ if (face_1_front && face_2_front) {
+ // front-facing edge
+ finalColor = drawFront ? frontColor : invisible;
+ }
+ else if (face_1_front || face_2_front) {
+ // exactly one face is front-facing, silhouette edge
+ finalColor = drawSilhouette ? silhouetteColor : invisible;
+ }
+ else {
+ // back-facing edge
+ finalColor = drawBack ? backColor : invisible;
+ }
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_edges_front_back_persp_vert.glsl b/source/blender/gpu/shaders/gpu_shader_edges_front_back_persp_vert.glsl
new file mode 100644
index 00000000000..e1fb78dd1a9
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_edges_front_back_persp_vert.glsl
@@ -0,0 +1,44 @@
+
+// Draw "fancy" wireframe, displaying front-facing, back-facing and
+// silhouette lines differently.
+// Mike Erwin, April 2015
+
+// After working with this shader a while, convinced we should make
+// separate shaders for perpective & ortho. (Oct 2016)
+
+// Due to perspective, the line segment's endpoints might disagree on
+// whether the adjacent faces are front facing. We use a geometry
+// shader to resolve this properly.
+
+uniform mat4 ModelViewMatrix;
+uniform mat3 NormalMatrix;
+
+in vec3 pos;
+in vec3 N1, N2; // normals of faces this edge joins (object coords)
+
+out vec4 MV_pos;
+out float edgeClass;
+
+// TODO: in float angle; // [-pi .. +pi], + peak, 0 flat, - valley
+
+bool front(vec3 N, vec3 eye)
+{
+ return dot(NormalMatrix * N, eye) > 0.0;
+}
+
+void main()
+{
+ MV_pos = ModelViewMatrix * vec4(pos, 1.0);
+
+ vec3 eye = normalize(-MV_pos.xyz);
+
+ bool face_1_front = front(N1, eye);
+ bool face_2_front = front(N2, eye);
+
+ if (face_1_front && face_2_front)
+ edgeClass = 1.0; // front-facing edge
+ else if (face_1_front || face_2_front)
+ edgeClass = 0.0; // exactly one face is front-facing, silhouette edge
+ else
+ edgeClass = -1.0; // back-facing edge
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_edges_overlay_frag.glsl b/source/blender/gpu/shaders/gpu_shader_edges_overlay_frag.glsl
new file mode 100644
index 00000000000..0538c037dcf
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_edges_overlay_frag.glsl
@@ -0,0 +1,20 @@
+
+#define SMOOTH 1
+
+const float transitionWidth = 1.0;
+
+uniform vec4 fillColor = vec4(0);
+uniform vec4 outlineColor = vec4(0,0,0,1);
+
+noperspective in vec3 distanceToOutline;
+
+out vec4 FragColor;
+
+void main() {
+ float edgeness = min(min(distanceToOutline.x, distanceToOutline.y), distanceToOutline.z);
+#if SMOOTH
+ FragColor = mix(outlineColor, fillColor, smoothstep(0, transitionWidth, edgeness));
+#else
+ FragColor = (edgeness <= 0) ? outlineColor : fillColor;
+#endif
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_edges_overlay_geom.glsl b/source/blender/gpu/shaders/gpu_shader_edges_overlay_geom.glsl
new file mode 100644
index 00000000000..ad0dccb6c81
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_edges_overlay_geom.glsl
@@ -0,0 +1,67 @@
+layout(triangles) in;
+layout(triangle_strip, max_vertices=3) out;
+
+uniform float outlineWidth = 1.0;
+uniform vec2 viewportSize;
+
+in vec4 pos_xformed[];
+in float widthModulator[];
+
+noperspective out vec3 distanceToOutline;
+
+// project to screen space
+vec2 proj(int axis) {
+ vec4 pos = pos_xformed[axis];
+ return (0.5 * (pos.xy / pos.w) + 0.5) * viewportSize;
+}
+
+float dist(vec2 pos[3], int v) {
+ // current vertex position
+ vec2 vpos = pos[v];
+ // endpoints of opposite edge
+ vec2 e1 = pos[(v + 1) % 3];
+ vec2 e2 = pos[(v + 2) % 3];
+
+ float abs_det = length(cross(vec3(vpos - e1, 0), vec3(vpos - e2, 0))); // could simplify
+ return abs_det / distance(e2, e1);
+}
+
+vec3 distance[3];
+
+void clearEdge(int v) {
+ float distant = 10 * outlineWidth;
+ for (int i = 0; i < 3; ++i)
+ distance[i][v] += distant;
+}
+
+void modulateEdge(int v) {
+ float offset = min(widthModulator[v],1) * outlineWidth;
+ for (int i = 0; i < 3; ++i)
+ distance[i][v] -= offset;
+}
+
+void main() {
+ vec2 pos[3] = vec2[3](proj(0), proj(1), proj(2));
+
+ for (int v = 0; v < 3; ++v)
+ distance[v] = vec3(0);
+
+ for (int v = 0; v < 3; ++v) {
+ if (widthModulator[v] > 0) {
+ distance[v][v] = dist(pos, v);
+ modulateEdge(v);
+ }
+ }
+
+ for (int v = 0; v < 3; ++v)
+ if (widthModulator[v] <= 0)
+ clearEdge(v);
+
+ for (int v = 0; v < 3; ++v) {
+ gl_Position = pos_xformed[v];
+ distanceToOutline = distance[v];
+ EmitVertex();
+ }
+
+ EndPrimitive();
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_edges_overlay_simple_geom.glsl b/source/blender/gpu/shaders/gpu_shader_edges_overlay_simple_geom.glsl
new file mode 100644
index 00000000000..ec692e210c2
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_edges_overlay_simple_geom.glsl
@@ -0,0 +1,52 @@
+layout(triangles) in;
+layout(triangle_strip, max_vertices=3) out;
+
+uniform float outlineWidth = 1.0;
+uniform vec2 viewportSize;
+
+noperspective out vec3 distanceToOutline;
+
+// project to screen space
+vec2 proj(int axis) {
+ vec4 pos = gl_in[axis].gl_Position;
+ return (0.5 * (pos.xy / pos.w) + 0.5) * viewportSize;
+}
+
+float dist(vec2 pos[3], int v) {
+ // current vertex position
+ vec2 vpos = pos[v];
+ // endpoints of opposite edge
+ vec2 e1 = pos[(v + 1) % 3];
+ vec2 e2 = pos[(v + 2) % 3];
+
+ float abs_det = length(cross(vec3(vpos - e1, 0), vec3(vpos - e2, 0))); // could simplify
+ return abs_det / distance(e2, e1);
+}
+
+vec3 distance[3];
+
+void modulateEdge(int v) {
+ float offset = 0.5 * outlineWidth;
+ for (int i = 0; i < 3; ++i)
+ distance[i][v] -= offset;
+}
+
+void main() {
+ vec2 pos[3] = vec2[3](proj(0), proj(1), proj(2));
+
+ for (int v = 0; v < 3; ++v)
+ distance[v] = vec3(0);
+
+ for (int v = 0; v < 3; ++v) {
+ distance[v][v] = dist(pos, v);
+ modulateEdge(v);
+ }
+
+ for (int v = 0; v < 3; ++v) {
+ gl_Position = gl_in[v].gl_Position;
+ distanceToOutline = distance[v];
+ EmitVertex();
+ }
+
+ EndPrimitive();
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_edges_overlay_vert.glsl b/source/blender/gpu/shaders/gpu_shader_edges_overlay_vert.glsl
new file mode 100644
index 00000000000..fb1d0aafe05
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_edges_overlay_vert.glsl
@@ -0,0 +1,13 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+
+in vec3 pos;
+in float edgeWidthModulator;
+
+out vec4 pos_xformed;
+out float widthModulator;
+
+void main() {
+ pos_xformed = ModelViewProjectionMatrix * vec4(pos, 1.0);
+ widthModulator = edgeWidthModulator;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_fire_frag.glsl b/source/blender/gpu/shaders/gpu_shader_fire_frag.glsl
index 3819203bcd9..fc9cafb6b02 100644
--- a/source/blender/gpu/shaders/gpu_shader_fire_frag.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_fire_frag.glsl
@@ -1,17 +1,15 @@
-varying vec3 coords;
+in vec3 coords;
+out vec4 fragColor;
uniform sampler3D flame_texture;
uniform sampler1D spectrum_texture;
void main()
{
- float flame = texture3D(flame_texture, coords).r;
- vec4 emission = texture1D(spectrum_texture, flame);
+ float flame = texture(flame_texture, coords).r;
+ vec4 emission = texture(spectrum_texture, flame);
- vec4 color;
- color.rgb = emission.a * emission.rgb;
- color.a = emission.a;
-
- gl_FragColor = color;
+ fragColor.rgb = emission.a * emission.rgb;
+ fragColor.a = emission.a;
}
diff --git a/source/blender/gpu/shaders/gpu_shader_flat_color_alpha_test_0_frag.glsl b/source/blender/gpu/shaders/gpu_shader_flat_color_alpha_test_0_frag.glsl
new file mode 100644
index 00000000000..cefae1021d2
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_flat_color_alpha_test_0_frag.glsl
@@ -0,0 +1,11 @@
+
+flat in vec4 finalColor;
+out vec4 fragColor;
+
+void main()
+{
+ if (finalColor.a > 0.0)
+ fragColor = finalColor;
+ else
+ discard;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_flat_color_frag.glsl b/source/blender/gpu/shaders/gpu_shader_flat_color_frag.glsl
new file mode 100644
index 00000000000..d738ed5ddb2
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_flat_color_frag.glsl
@@ -0,0 +1,8 @@
+
+flat in vec4 finalColor;
+out vec4 fragColor;
+
+void main()
+{
+ fragColor = finalColor;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_fullscreen_vert.glsl b/source/blender/gpu/shaders/gpu_shader_fullscreen_vert.glsl
new file mode 100644
index 00000000000..fc5cc1cdcc3
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_fullscreen_vert.glsl
@@ -0,0 +1,10 @@
+
+in vec2 pos;
+in vec2 uvs;
+out vec4 uvcoordsvar;
+
+void main()
+{
+ uvcoordsvar = vec4(uvs, 0.0, 0.0);
+ gl_Position = vec4(pos, 0.0, 1.0);
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_fx_depth_resolve.glsl b/source/blender/gpu/shaders/gpu_shader_fx_depth_resolve.glsl
index e04cd7d3306..c4e7cff2b0b 100644
--- a/source/blender/gpu/shaders/gpu_shader_fx_depth_resolve.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_fx_depth_resolve.glsl
@@ -1,9 +1,10 @@
uniform sampler2D depthbuffer;
-varying vec4 uvcoordsvar;
+
+in vec4 uvcoordsvar;
void main(void)
{
- float depth = texture2D(depthbuffer, uvcoordsvar.xy).r;
+ float depth = texture(depthbuffer, uvcoordsvar.xy).r;
/* XRay background, discard */
if (depth >= 1.0) {
diff --git a/source/blender/gpu/shaders/gpu_shader_fx_dof_frag.glsl b/source/blender/gpu/shaders/gpu_shader_fx_dof_frag.glsl
index 338ef6d51a7..15d30e75969 100644
--- a/source/blender/gpu/shaders/gpu_shader_fx_dof_frag.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_fx_dof_frag.glsl
@@ -17,17 +17,18 @@ uniform vec4 dof_params;
uniform vec4 viewvecs[3];
// coordinates on framebuffer in normalized (0.0-1.0) uv space
-varying vec4 uvcoordsvar;
+in vec4 uvcoordsvar;
/* color texture coordinates, offset by a small amount */
-varying vec2 color_uv1;
-varying vec2 color_uv2;
+in vec2 color_uv1;
+in vec2 color_uv2;
-varying vec2 depth_uv1;
-varying vec2 depth_uv2;
-varying vec2 depth_uv3;
-varying vec2 depth_uv4;
+in vec2 depth_uv1;
+in vec2 depth_uv2;
+in vec2 depth_uv3;
+in vec2 depth_uv4;
+out vec4 FragColor;
float calculate_far_coc(in float zdepth)
{
@@ -63,85 +64,85 @@ void first_pass()
offset_row[2] = 3.0 * offset_row[0];
/* heavily blur the image */
- vec4 color = texture2D(colorbuffer, color_uv1);
- color += texture2D(colorbuffer, color_uv1 + offset_row[1]);
- color += texture2D(colorbuffer, color_uv2);
- color += texture2D(colorbuffer, color_uv2 + offset_row[1]);
+ vec4 color = texture(colorbuffer, color_uv1);
+ color += texture(colorbuffer, color_uv1 + offset_row[1]);
+ color += texture(colorbuffer, color_uv2);
+ color += texture(colorbuffer, color_uv2 + offset_row[1]);
color /= 4.0;
- depth.r = texture2D(depthbuffer, depth_uv1).r;
- depth.g = texture2D(depthbuffer, depth_uv2).r;
- depth.b = texture2D(depthbuffer, depth_uv3).r;
- depth.a = texture2D(depthbuffer, depth_uv4).r;
+ depth.r = texture(depthbuffer, depth_uv1).r;
+ depth.g = texture(depthbuffer, depth_uv2).r;
+ depth.b = texture(depthbuffer, depth_uv3).r;
+ depth.a = texture(depthbuffer, depth_uv4).r;
zdepth = get_view_space_z_from_depth(vec4(viewvecs[0].z), vec4(viewvecs[1].z), depth);
coc = calculate_near_coc(zdepth);
- depth.r = texture2D(depthbuffer, depth_uv1 + offset_row[0]).r;
- depth.g = texture2D(depthbuffer, depth_uv2 + offset_row[0]).r;
- depth.b = texture2D(depthbuffer, depth_uv3 + offset_row[0]).r;
- depth.a = texture2D(depthbuffer, depth_uv4 + offset_row[0]).r;
+ depth.r = texture(depthbuffer, depth_uv1 + offset_row[0]).r;
+ depth.g = texture(depthbuffer, depth_uv2 + offset_row[0]).r;
+ depth.b = texture(depthbuffer, depth_uv3 + offset_row[0]).r;
+ depth.a = texture(depthbuffer, depth_uv4 + offset_row[0]).r;
zdepth = get_view_space_z_from_depth(vec4(viewvecs[0].z), vec4(viewvecs[1].z), depth);
coc = max(calculate_near_coc(zdepth), coc);
- depth.r = texture2D(depthbuffer, depth_uv1 + offset_row[1]).r;
- depth.g = texture2D(depthbuffer, depth_uv2 + offset_row[1]).r;
- depth.b = texture2D(depthbuffer, depth_uv3 + offset_row[1]).r;
- depth.a = texture2D(depthbuffer, depth_uv4 + offset_row[1]).r;
+ depth.r = texture(depthbuffer, depth_uv1 + offset_row[1]).r;
+ depth.g = texture(depthbuffer, depth_uv2 + offset_row[1]).r;
+ depth.b = texture(depthbuffer, depth_uv3 + offset_row[1]).r;
+ depth.a = texture(depthbuffer, depth_uv4 + offset_row[1]).r;
zdepth = get_view_space_z_from_depth(vec4(viewvecs[0].z), vec4(viewvecs[1].z), depth);
coc = max(calculate_near_coc(zdepth), coc);
- depth.r = texture2D(depthbuffer, depth_uv1 + offset_row[2]).r;
- depth.g = texture2D(depthbuffer, depth_uv2 + offset_row[2]).r;
- depth.b = texture2D(depthbuffer, depth_uv3 + offset_row[2]).r;
- depth.a = texture2D(depthbuffer, depth_uv4 + offset_row[2]).r;
+ depth.r = texture(depthbuffer, depth_uv1 + offset_row[2]).r;
+ depth.g = texture(depthbuffer, depth_uv2 + offset_row[2]).r;
+ depth.b = texture(depthbuffer, depth_uv3 + offset_row[2]).r;
+ depth.a = texture(depthbuffer, depth_uv4 + offset_row[2]).r;
zdepth = get_view_space_z_from_depth(vec4(viewvecs[0].z), vec4(viewvecs[1].z), depth);
coc = max(calculate_near_coc(zdepth), coc);
final_coc = max(max(coc.x, coc.y), max(coc.z, coc.w));
- gl_FragColor = vec4(color.rgb, final_coc);
+ FragColor = vec4(color.rgb, final_coc);
}
/* second pass, gaussian blur the downsampled image */
void second_pass()
{
- vec4 depth = vec4(texture2D(depthbuffer, uvcoordsvar.xy).r);
+ vec4 depth = vec4(texture(depthbuffer, uvcoordsvar.xy).r);
/* clever sampling to sample 2 pixels at once. Of course it's not real gaussian sampling this way */
- vec4 color = texture2D(colorbuffer, uvcoordsvar.xy) * 0.3125;
- color += texture2D(colorbuffer, uvcoordsvar.xy + invrendertargetdim) * 0.234375;
- color += texture2D(colorbuffer, uvcoordsvar.xy + 2.5 * invrendertargetdim) * 0.09375;
- color += texture2D(colorbuffer, uvcoordsvar.xy + 4.5 * invrendertargetdim) * 0.015625;
- color += texture2D(colorbuffer, uvcoordsvar.xy - invrendertargetdim) * 0.234375;
- color += texture2D(colorbuffer, uvcoordsvar.xy - 2.5 * invrendertargetdim) * 0.09375;
- color += texture2D(colorbuffer, uvcoordsvar.xy - 4.5 * invrendertargetdim) * 0.015625;
-
- gl_FragColor = color;
+ vec4 color = texture(colorbuffer, uvcoordsvar.xy) * 0.3125;
+ color += texture(colorbuffer, uvcoordsvar.xy + invrendertargetdim) * 0.234375;
+ color += texture(colorbuffer, uvcoordsvar.xy + 2.5 * invrendertargetdim) * 0.09375;
+ color += texture(colorbuffer, uvcoordsvar.xy + 4.5 * invrendertargetdim) * 0.015625;
+ color += texture(colorbuffer, uvcoordsvar.xy - invrendertargetdim) * 0.234375;
+ color += texture(colorbuffer, uvcoordsvar.xy - 2.5 * invrendertargetdim) * 0.09375;
+ color += texture(colorbuffer, uvcoordsvar.xy - 4.5 * invrendertargetdim) * 0.015625;
+
+ FragColor = color;
}
/* third pass, calculate the final coc from blurred and unblurred images */
void third_pass()
{
- vec4 color = texture2D(colorbuffer, uvcoordsvar.xy);
- vec4 color_blurred = texture2D(blurredcolorbuffer, uvcoordsvar.xy);
+ vec4 color = texture(colorbuffer, uvcoordsvar.xy);
+ vec4 color_blurred = texture(blurredcolorbuffer, uvcoordsvar.xy);
float coc = 2.0 * max(color_blurred.a, color.a); -color.a;
- gl_FragColor = vec4(color.rgb, coc);
+ FragColor = vec4(color.rgb, coc);
}
/* fourth pass, blur the final coc once to get rid of discontinuities */
void fourth_pass()
{
- vec4 color = texture2D(colorbuffer, uvcoordsvar.xz);
- color += texture2D(colorbuffer, uvcoordsvar.yz);
- color += texture2D(colorbuffer, uvcoordsvar.xw);
- color += texture2D(colorbuffer, uvcoordsvar.yw);
+ vec4 color = texture(colorbuffer, uvcoordsvar.xz);
+ color += texture(colorbuffer, uvcoordsvar.yz);
+ color += texture(colorbuffer, uvcoordsvar.xw);
+ color += texture(colorbuffer, uvcoordsvar.yw);
- gl_FragColor = color / 4.0;
+ FragColor = color / 4.0;
}
vec4 small_sample_blur(in sampler2D colorbuffer, in vec2 uv, in vec4 color)
@@ -150,10 +151,10 @@ vec4 small_sample_blur(in sampler2D colorbuffer, in vec2 uv, in vec4 color)
vec4 result = weight * color;
weight *= 4.0;
- result += weight * texture2D(colorbuffer, uv + color_uv1.xy);
- result += weight * texture2D(colorbuffer, uv - color_uv1.xy);
- result += weight * texture2D(colorbuffer, uv + color_uv1.yx);
- result += weight * texture2D(colorbuffer, uv - color_uv1.yx);
+ result += weight * texture(colorbuffer, uv + color_uv1.xy);
+ result += weight * texture(colorbuffer, uv - color_uv1.xy);
+ result += weight * texture(colorbuffer, uv + color_uv1.yx);
+ result += weight * texture(colorbuffer, uv - color_uv1.yx);
return result;
}
@@ -163,11 +164,11 @@ vec4 small_sample_blur(in sampler2D colorbuffer, in vec2 uv, in vec4 color)
void fifth_pass()
{
vec4 factors;
- vec4 color_orig = texture2D(colorbuffer, uvcoordsvar.xy);
- vec4 highblurred = texture2D(blurredcolorbuffer, uvcoordsvar.xy);
- vec4 mediumblurred = texture2D(mblurredcolorbuffer, uvcoordsvar.xy);
+ vec4 color_orig = texture(colorbuffer, uvcoordsvar.xy);
+ vec4 highblurred = texture(blurredcolorbuffer, uvcoordsvar.xy);
+ vec4 mediumblurred = texture(mblurredcolorbuffer, uvcoordsvar.xy);
vec4 smallblurred = small_sample_blur(colorbuffer, uvcoordsvar.xy, color_orig);
- float depth = texture2D(depthbuffer, uvcoordsvar.xy).r;
+ float depth = texture(depthbuffer, uvcoordsvar.xy).r;
float zdepth = get_view_space_z_from_depth(vec4(viewvecs[0].z), vec4(viewvecs[1].z), vec4(depth)).r;
float coc_far = clamp(calculate_far_coc(zdepth), 0.0, 1.0);
@@ -188,7 +189,7 @@ void fifth_pass()
color /= dot(factors, vec4(1.0));
/* using original color is not correct, but use that for now because alpha of
* blurred buffers uses CoC instead */
- gl_FragColor = vec4(color.rgb, color_orig.a);
+ FragColor = vec4(color.rgb, color_orig.a);
}
diff --git a/source/blender/gpu/shaders/gpu_shader_fx_dof_hq_frag.glsl b/source/blender/gpu/shaders/gpu_shader_fx_dof_hq_frag.glsl
index 182113367d3..c41c1d0820b 100644
--- a/source/blender/gpu/shaders/gpu_shader_fx_dof_hq_frag.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_fx_dof_hq_frag.glsl
@@ -14,24 +14,28 @@ uniform sampler2D depthbuffer;
uniform sampler2D cocbuffer;
-/* this includes focal distance in x and aperture size in y */
+/* this includes aperture size in x and focal distance in y */
uniform vec4 dof_params;
/* viewvectors for reconstruction of world space */
uniform vec4 viewvecs[3];
/* initial uv coordinate */
-varying vec2 uvcoord;
+in vec2 uvcoord;
/* coordinate used for calculating radius et al set in geometry shader */
-varying vec2 particlecoord;
-varying vec4 color;
+in vec2 particlecoord;
+flat in vec4 color;
/* downsampling coordinates */
-varying vec2 downsample1;
-varying vec2 downsample2;
-varying vec2 downsample3;
-varying vec2 downsample4;
+in vec2 downsample1;
+in vec2 downsample2;
+in vec2 downsample3;
+in vec2 downsample4;
+
+layout(location = 0) out vec4 fragData0;
+layout(location = 1) out vec4 fragData1;
+layout(location = 2) out vec4 fragData2;
#define M_PI 3.1415926535897932384626433832795
@@ -55,15 +59,15 @@ void downsample_pass()
float far_coc, near_coc;
/* custom downsampling. We need to be careful to sample nearest here to avoid leaks */
- vec4 color1 = texture2D(colorbuffer, downsample1);
- vec4 color2 = texture2D(colorbuffer, downsample2);
- vec4 color3 = texture2D(colorbuffer, downsample3);
- vec4 color4 = texture2D(colorbuffer, downsample4);
+ vec4 color1 = texture(colorbuffer, downsample1);
+ vec4 color2 = texture(colorbuffer, downsample2);
+ vec4 color3 = texture(colorbuffer, downsample3);
+ vec4 color4 = texture(colorbuffer, downsample4);
- depth.r = texture2D(depthbuffer, downsample1).r;
- depth.g = texture2D(depthbuffer, downsample2).r;
- depth.b = texture2D(depthbuffer, downsample3).r;
- depth.a = texture2D(depthbuffer, downsample4).r;
+ depth.r = texture(depthbuffer, downsample1).r;
+ depth.g = texture(depthbuffer, downsample2).r;
+ depth.b = texture(depthbuffer, downsample3).r;
+ depth.a = texture(depthbuffer, downsample4).r;
zdepth = get_view_space_z_from_depth(vec4(viewvecs[0].z), vec4(viewvecs[1].z), depth);
coc = calculate_coc(zdepth);
@@ -82,16 +86,16 @@ void downsample_pass()
float norm_far = dot(far_weights, vec4(1.0));
/* now write output to weighted buffers. */
- gl_FragData[0] = color1 * near_weights.x + color2 * near_weights.y + color3 * near_weights.z +
+ fragData0 = color1 * near_weights.x + color2 * near_weights.y + color3 * near_weights.z +
color4 * near_weights.w;
- gl_FragData[1] = color1 * far_weights.x + color2 * far_weights.y + color3 * far_weights.z +
+ fragData1 = color1 * far_weights.x + color2 * far_weights.y + color3 * far_weights.z +
color4 * far_weights.w;
if (norm_near > 0.0)
- gl_FragData[0] /= norm_near;
+ fragData0 /= norm_near;
if (norm_far > 0.0)
- gl_FragData[1] /= norm_far;
- gl_FragData[2] = vec4(near_coc, far_coc, 0.0, 1.0);
+ fragData1 /= norm_far;
+ fragData2 = vec4(near_coc, far_coc, 0.0, 1.0);
}
/* accumulate color in the near/far blur buffers */
@@ -102,36 +106,36 @@ void accumulate_pass(void) {
if (dof_params.w == 0.0)
r = 1.0;
else
- r = cos(M_PI / dof_params.w) /
- (cos(theta - (2.0 * M_PI / dof_params.w) * floor((dof_params.w * theta + M_PI) / (2.0 * M_PI))));
+ r = cos(M_PI / dof_params.w) /
+ (cos(theta - (2.0 * M_PI / dof_params.w) * floor((dof_params.w * theta + M_PI) / (2.0 * M_PI))));
if (dot(particlecoord, particlecoord) > r * r)
discard;
- gl_FragData[0] = color;
+ fragData0 = color;
}
-#define MERGE_THRESHOLD 4.0
+#define MERGE_THRESHOLD 4.0
/* combine the passes, */
void final_pass(void) {
vec4 finalcolor;
float totalweight;
- float depth = texture2D(depthbuffer, uvcoord).r;
+ float depth = texture(depthbuffer, uvcoord).r;
vec4 zdepth = get_view_space_z_from_depth(vec4(viewvecs[0].z), vec4(viewvecs[1].z), vec4(depth));
float coc_near = calculate_coc(zdepth).r;
float coc_far = max(-coc_near, 0.0);
coc_near = max(coc_near, 0.0);
- vec4 farcolor = texture2D(farbuffer, uvcoord);
+ vec4 farcolor = texture(farbuffer, uvcoord);
float farweight = farcolor.a;
if (farweight > 0.0)
farcolor /= farweight;
- vec4 nearcolor = texture2D(nearbuffer, uvcoord);
+ vec4 nearcolor = texture(nearbuffer, uvcoord);
- vec4 srccolor = texture2D(colorbuffer, uvcoord);
+ vec4 srccolor = texture(colorbuffer, uvcoord);
- vec4 coc = texture2D(cocbuffer, uvcoord);
+ vec4 coc = texture(cocbuffer, uvcoord);
float mixfac = smoothstep(1.0, MERGE_THRESHOLD, coc_far);
finalcolor = mix(srccolor, farcolor, mixfac);
@@ -152,7 +156,9 @@ void final_pass(void) {
finalcolor = mix(finalcolor, nearcolor, nearweight / totalweight);
}
- gl_FragData[0] = finalcolor;
+ fragData0 = finalcolor;
+ // fragData0 = vec4(nearweight, farweight, 0.0, 1.0);
+ // fragData0 = vec4(nearcolor.rgb, 1.0);
}
void main()
diff --git a/source/blender/gpu/shaders/gpu_shader_fx_dof_hq_geo.glsl b/source/blender/gpu/shaders/gpu_shader_fx_dof_hq_geo.glsl
index 4c650e7695f..52d0a9be499 100644
--- a/source/blender/gpu/shaders/gpu_shader_fx_dof_hq_geo.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_fx_dof_hq_geo.glsl
@@ -5,27 +5,14 @@ uniform vec2 layerselection;
uniform sampler2D cocbuffer;
-#if __VERSION__ >= 150
- layout(points) in;
- layout(triangle_strip, max_vertices = 4) out;
-
- #define POS gl_in[0].gl_Position
-#else
- /* use the EXT_geometry_shader4 way */
- #define POS gl_PositionIn[0]
-#endif
-
-/* initial uv coordinate */
-#if __VERSION__ < 130
- varying in vec2 uvcoord[];
- varying out vec2 particlecoord;
- varying out vec4 color;
- #define textureLod texture2DLod
-#else
- in vec2 uvcoord[];
- out vec2 particlecoord;
- out vec4 color;
-#endif
+layout(points) in;
+layout(triangle_strip, max_vertices = 4) out;
+
+#define POS gl_in[0].gl_Position
+
+in vec2 uvcoord[];
+out vec2 particlecoord;
+flat out vec4 color;
#define M_PI 3.1415926535897932384626433832795
@@ -46,21 +33,23 @@ void main()
vec2 offset_far = vec2(offset_val * 0.5) / vec2(rendertargetdim.x, rendertargetdim.y);
- gl_Position = POS + vec4(-offset_far.x, -offset_far.y, 0.0, 0.0);
color = colortex;
+
+ gl_Position = POS + vec4(-offset_far.x, -offset_far.y, 0.0, 0.0);
particlecoord = vec2(-1.0, -1.0);
EmitVertex();
+
gl_Position = POS + vec4(-offset_far.x, offset_far.y, 0.0, 0.0);
particlecoord = vec2(-1.0, 1.0);
- color = colortex;
EmitVertex();
+
gl_Position = POS + vec4(offset_far.x, -offset_far.y, 0.0, 0.0);
particlecoord = vec2(1.0, -1.0);
- color = colortex;
EmitVertex();
+
gl_Position = POS + vec4(offset_far.x, offset_far.y, 0.0, 0.0);
particlecoord = vec2(1.0, 1.0);
- color = colortex;
EmitVertex();
+
EndPrimitive();
}
diff --git a/source/blender/gpu/shaders/gpu_shader_fx_dof_hq_vert.glsl b/source/blender/gpu/shaders/gpu_shader_fx_dof_hq_vert.glsl
index 09a0c75facc..1dd5bf42b25 100644
--- a/source/blender/gpu/shaders/gpu_shader_fx_dof_hq_vert.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_fx_dof_hq_vert.glsl
@@ -1,27 +1,31 @@
-uniform vec2 invrendertargetdim;
-uniform ivec2 rendertargetdim;
+
+in vec2 pos;
+in vec2 uvs;
/* initial uv coordinate */
-varying vec2 uvcoord;
+out vec2 uvcoord;
/* coordinate used for calculating radius et al set in geometry shader */
-varying vec2 particlecoord;
+out vec2 particlecoord;
/* downsampling coordinates */
-varying vec2 downsample1;
-varying vec2 downsample2;
-varying vec2 downsample3;
-varying vec2 downsample4;
+out vec2 downsample1;
+out vec2 downsample2;
+out vec2 downsample3;
+out vec2 downsample4;
+
+uniform vec2 invrendertargetdim;
+uniform ivec2 rendertargetdim;
void vert_dof_downsample()
{
/* gather pixels from neighbors. half dimensions means we offset half a pixel to
* get this right though it's possible we may lose a pixel at some point */
- downsample1 = gl_MultiTexCoord0.xy + vec2(-0.5, -0.5) * invrendertargetdim;
- downsample2 = gl_MultiTexCoord0.xy + vec2(-0.5, 0.5) * invrendertargetdim;
- downsample3 = gl_MultiTexCoord0.xy + vec2(0.5, 0.5) * invrendertargetdim;
- downsample4 = gl_MultiTexCoord0.xy + vec2(0.5, -0.5) * invrendertargetdim;
+ downsample1 = uvs.xy + vec2(-0.5, -0.5) * invrendertargetdim;
+ downsample2 = uvs.xy + vec2(-0.5, 0.5) * invrendertargetdim;
+ downsample3 = uvs.xy + vec2(0.5, 0.5) * invrendertargetdim;
+ downsample4 = uvs.xy + vec2(0.5, -0.5) * invrendertargetdim;
- gl_Position = gl_Vertex;
+ gl_Position = vec4(pos, 0.0, 1.0);
}
/* geometry shading pass, calculate a texture coordinate based on the indexed id */
@@ -42,8 +46,8 @@ void vert_dof_coc_scatter_pass()
void vert_dof_final()
{
- uvcoord = gl_MultiTexCoord0.xy;
- gl_Position = gl_Vertex;
+ uvcoord = uvs;
+ gl_Position = vec4(pos, 0.0, 1.0);
}
void main()
diff --git a/source/blender/gpu/shaders/gpu_shader_fx_dof_vert.glsl b/source/blender/gpu/shaders/gpu_shader_fx_dof_vert.glsl
index 63b57d5775c..0fcab6302e4 100644
--- a/source/blender/gpu/shaders/gpu_shader_fx_dof_vert.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_fx_dof_vert.glsl
@@ -1,51 +1,54 @@
uniform vec2 invrendertargetdim;
-//texture coordinates for framebuffer read
-varying vec4 uvcoordsvar;
+in vec2 pos;
+in vec2 uvs;
+
+/* texture coordinates for framebuffer read */
+out vec4 uvcoordsvar;
/* color texture coordinates, offset by a small amount */
-varying vec2 color_uv1;
-varying vec2 color_uv2;
+out vec2 color_uv1;
+out vec2 color_uv2;
-varying vec2 depth_uv1;
-varying vec2 depth_uv2;
-varying vec2 depth_uv3;
-varying vec2 depth_uv4;
+out vec2 depth_uv1;
+out vec2 depth_uv2;
+out vec2 depth_uv3;
+out vec2 depth_uv4;
//very simple shader for gull screen FX, just pass values on
void vert_generic()
{
- uvcoordsvar = gl_MultiTexCoord0;
- gl_Position = gl_Vertex;
+ uvcoordsvar = vec4(uvs, 0.0, 0.0);
+ gl_Position = vec4(pos, 0.0, 1.0);
}
void vert_dof_first_pass()
{
/* we offset the texture coordinates by 1.5 pixel,
* then we reuse that to sample the surrounding pixels */
- color_uv1 = gl_MultiTexCoord0.xy + vec2(-1.5, -1.5) * invrendertargetdim;
- color_uv2 = gl_MultiTexCoord0.xy + vec2(0.5, -1.5) * invrendertargetdim;
+ color_uv1 = uvs.xy + vec2(-1.5, -1.5) * invrendertargetdim;
+ color_uv2 = uvs.xy + vec2(0.5, -1.5) * invrendertargetdim;
- depth_uv1 = gl_MultiTexCoord0.xy + vec2(-1.5, -1.5) * invrendertargetdim;
- depth_uv2 = gl_MultiTexCoord0.xy + vec2(-0.5, -1.5) * invrendertargetdim;
- depth_uv3 = gl_MultiTexCoord0.xy + vec2(0.5, -1.5) * invrendertargetdim;
- depth_uv4 = gl_MultiTexCoord0.xy + vec2(1.5, -1.5) * invrendertargetdim;
+ depth_uv1 = uvs.xy + vec2(-1.5, -1.5) * invrendertargetdim;
+ depth_uv2 = uvs.xy + vec2(-0.5, -1.5) * invrendertargetdim;
+ depth_uv3 = uvs.xy + vec2(0.5, -1.5) * invrendertargetdim;
+ depth_uv4 = uvs.xy + vec2(1.5, -1.5) * invrendertargetdim;
- gl_Position = gl_Vertex;
+ gl_Position = vec4(pos, 0.0, 1.0);
}
void vert_dof_fourth_pass()
{
vec4 halfpixel = vec4(-0.5, 0.5, -0.5, 0.5);
- uvcoordsvar = gl_MultiTexCoord0.xxyy +
+ uvcoordsvar = uvs.xxyy +
halfpixel *
vec4(invrendertargetdim.x,
invrendertargetdim.x,
invrendertargetdim.y,
invrendertargetdim.y);
- gl_Position = gl_Vertex;
+ gl_Position = vec4(pos, 0.0, 1.0);
}
void vert_dof_fifth_pass()
@@ -53,8 +56,8 @@ void vert_dof_fifth_pass()
vec4 halfpixel = vec4(-0.5, 0.5, -0.5, 0.5);
color_uv1 = vec2(0.5, 1.5) * invrendertargetdim;
- uvcoordsvar = gl_MultiTexCoord0;
- gl_Position = gl_Vertex;
+ uvcoordsvar = vec4(uvs, 0.0, 0.0);
+ gl_Position = vec4(pos, 0.0, 1.0);
}
void main()
diff --git a/source/blender/gpu/shaders/gpu_shader_fx_lib.glsl b/source/blender/gpu/shaders/gpu_shader_fx_lib.glsl
index 1dc49b52be1..7aa6786d292 100644
--- a/source/blender/gpu/shaders/gpu_shader_fx_lib.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_fx_lib.glsl
@@ -1,14 +1,17 @@
+uniform mat4 ProjectionMatrix;
+
/* simple depth reconstruction, see http://www.derschmale.com/2014/01/26/reconstructing-positions-from-the-depth-buffer
* we change the factors from the article to fit the OpennGL model. */
#ifdef PERSP_MATRIX
+
/* perspective camera code */
vec3 get_view_space_from_depth(in vec2 uvcoords, in vec3 viewvec_origin, in vec3 viewvec_diff, in float depth)
{
float d = 2.0 * depth - 1.0;
- float zview = -gl_ProjectionMatrix[3][2] / (d + gl_ProjectionMatrix[2][2]);
+ float zview = -ProjectionMatrix[3][2] / (d + ProjectionMatrix[2][2]);
return zview * (viewvec_origin + vec3(uvcoords, 0.0) * viewvec_diff);
}
@@ -18,7 +21,7 @@ vec4 get_view_space_z_from_depth(in vec4 near, in vec4 range, in vec4 depth)
vec4 d = 2.0 * depth - vec4(1.0);
/* return positive value, so sign differs! */
- return vec4(gl_ProjectionMatrix[3][2]) / (d + vec4(gl_ProjectionMatrix[2][2]));
+ return vec4(ProjectionMatrix[3][2]) / (d + vec4(ProjectionMatrix[2][2]));
}
#else
diff --git a/source/blender/gpu/shaders/gpu_shader_fx_ssao_frag.glsl b/source/blender/gpu/shaders/gpu_shader_fx_ssao_frag.glsl
index f19ff4ec65a..4904010c841 100644
--- a/source/blender/gpu/shaders/gpu_shader_fx_ssao_frag.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_fx_ssao_frag.glsl
@@ -1,3 +1,4 @@
+
// color buffer
uniform sampler2D colorbuffer;
@@ -9,8 +10,10 @@ uniform sampler1D ssao_concentric_tex;
// depth buffer
uniform sampler2D depthbuffer;
+
// coordinates on framebuffer in normalized (0.0-1.0) uv space
-varying vec4 uvcoordsvar;
+in vec4 uvcoordsvar;
+out vec4 FragColor;
/* ssao_params.x : pixel scale for the ssao radious */
/* ssao_params.y : factor for the ssao darkening */
@@ -33,7 +36,7 @@ vec3 calculate_view_space_normal(in vec3 viewposition)
float calculate_ssao_factor(float depth)
{
/* take the normalized ray direction here */
- vec2 rotX = texture2D(jitter_tex, uvcoordsvar.xy * ssao_sample_params.yz).rg;
+ vec2 rotX = texture(jitter_tex, uvcoordsvar.xy * ssao_sample_params.yz).rg;
vec2 rotY = vec2(-rotX.y, rotX.x);
/* occlusion is zero in full depth */
@@ -46,9 +49,9 @@ float calculate_ssao_factor(float depth)
/* find the offset in screen space by multiplying a point
* in camera space at the depth of the point by the projection matrix. */
vec2 offset;
- float homcoord = gl_ProjectionMatrix[2][3] * position.z + gl_ProjectionMatrix[3][3];
- offset.x = gl_ProjectionMatrix[0][0] * ssao_params.x / homcoord;
- offset.y = gl_ProjectionMatrix[1][1] * ssao_params.x / homcoord;
+ float homcoord = ProjectionMatrix[2][3] * position.z + ProjectionMatrix[3][3];
+ offset.x = ProjectionMatrix[0][0] * ssao_params.x / homcoord;
+ offset.y = ProjectionMatrix[1][1] * ssao_params.x / homcoord;
/* convert from -1.0...1.0 range to 0.0..1.0 for easy use with texture coordinates */
offset *= 0.5;
@@ -57,7 +60,7 @@ float calculate_ssao_factor(float depth)
int num_samples = int(ssao_sample_params.x);
for (x = 0; x < num_samples; x++) {
- vec2 dir_sample = texture1D(ssao_concentric_tex, (float(x) + 0.5) / ssao_sample_params.x).rg;
+ vec2 dir_sample = texture(ssao_concentric_tex, (float(x) + 0.5) / ssao_sample_params.x).rg;
/* rotate with random direction to get jittered result */
vec2 dir_jittered = vec2(dot(dir_sample, rotX), dot(dir_sample, rotY));
@@ -67,7 +70,7 @@ float calculate_ssao_factor(float depth)
if (uvcoords.x > 1.0 || uvcoords.x < 0.0 || uvcoords.y > 1.0 || uvcoords.y < 0.0)
continue;
- float depth_new = texture2D(depthbuffer, uvcoords).r;
+ float depth_new = texture(depthbuffer, uvcoords).r;
if (depth_new != 1.0) {
vec3 pos_new = get_view_space_from_depth(uvcoords, viewvecs[0].xyz, viewvecs[1].xyz, depth_new);
vec3 dir = pos_new - position;
@@ -87,8 +90,8 @@ float calculate_ssao_factor(float depth)
void main()
{
- float depth = texture2D(depthbuffer, uvcoordsvar.xy).r;
- vec4 scene_col = texture2D(colorbuffer, uvcoordsvar.xy);
+ float depth = texture(depthbuffer, uvcoordsvar.xy).r;
+ vec4 scene_col = texture(colorbuffer, uvcoordsvar.xy);
vec3 final_color = mix(scene_col.rgb, ssao_color.rgb, calculate_ssao_factor(depth));
- gl_FragColor = vec4(final_color.rgb, scene_col.a);
+ FragColor = vec4(final_color.rgb, scene_col.a);
}
diff --git a/source/blender/gpu/shaders/gpu_shader_fx_vert.glsl b/source/blender/gpu/shaders/gpu_shader_fx_vert.glsl
deleted file mode 100644
index 5194e414520..00000000000
--- a/source/blender/gpu/shaders/gpu_shader_fx_vert.glsl
+++ /dev/null
@@ -1,9 +0,0 @@
-varying vec4 uvcoordsvar;
-
-//very simple shader for full screen FX, just pass values on
-
-void main()
-{
- uvcoordsvar = gl_MultiTexCoord0;
- gl_Position = gl_Vertex;
-}
diff --git a/source/blender/gpu/shaders/gpu_shader_geometry.glsl b/source/blender/gpu/shaders/gpu_shader_geometry.glsl
index fe630dbeddb..7586050b258 100644
--- a/source/blender/gpu/shaders/gpu_shader_geometry.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_geometry.glsl
@@ -1,10 +1,11 @@
+
+uniform mat4 ProjectionMatrix;
+
uniform int PrimitiveIdBase;
uniform int osd_active_uv_offset;
-#if __VERSION__ >= 150
- layout(lines_adjacency) in;
- layout(triangle_strip, max_vertices = 4) out;
-#endif
+layout(lines_adjacency) in;
+layout(triangle_strip, max_vertices = 4) out;
in block {
VertexData v;
@@ -69,7 +70,7 @@ void emit_flat(int index, vec3 normal)
set_mtface_vertex_attrs(st);
- gl_Position = gl_ProjectionMatrix * inpt[index].v.position;
+ gl_Position = ProjectionMatrix * inpt[index].v.position;
EmitVertex();
}
@@ -90,7 +91,7 @@ void emit_smooth(int index)
set_mtface_vertex_attrs(st);
- gl_Position = gl_ProjectionMatrix * inpt[index].v.position;
+ gl_Position = ProjectionMatrix * inpt[index].v.position;
EmitVertex();
}
diff --git a/source/blender/gpu/shaders/gpu_shader_image_alpha_color_frag.glsl b/source/blender/gpu/shaders/gpu_shader_image_alpha_color_frag.glsl
new file mode 100644
index 00000000000..727c3c0a832
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_image_alpha_color_frag.glsl
@@ -0,0 +1,11 @@
+
+in vec2 texCoord_interp;
+out vec4 fragColor;
+
+uniform vec4 color;
+uniform sampler2D image;
+
+void main()
+{
+ fragColor = texture(image, texCoord_interp).r * color;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_image_color_frag.glsl b/source/blender/gpu/shaders/gpu_shader_image_color_frag.glsl
new file mode 100644
index 00000000000..ef8935cc7ba
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_image_color_frag.glsl
@@ -0,0 +1,11 @@
+
+in vec2 texCoord_interp;
+out vec4 fragColor;
+
+uniform vec4 color;
+uniform sampler2D image;
+
+void main()
+{
+ fragColor = texture(image, texCoord_interp) * color;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_image_depth_linear_frag.glsl b/source/blender/gpu/shaders/gpu_shader_image_depth_linear_frag.glsl
new file mode 100644
index 00000000000..bcbe1f577fd
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_image_depth_linear_frag.glsl
@@ -0,0 +1,16 @@
+
+in vec2 texCoord_interp;
+out vec4 fragColor;
+
+uniform float znear;
+uniform float zfar;
+uniform sampler2D image;
+
+void main()
+{
+ float depth = texture(image, texCoord_interp).r;
+
+ /* normalize */
+ fragColor.rgb = vec3((2.0f * znear) / (zfar + znear - (depth * (zfar - znear))));
+ fragColor.a = 1.0f;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_image_interlace_frag.glsl b/source/blender/gpu/shaders/gpu_shader_image_interlace_frag.glsl
new file mode 100644
index 00000000000..7f3e7df40ac
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_image_interlace_frag.glsl
@@ -0,0 +1,34 @@
+
+/* Keep these in sync with GPU_shader.h */
+#define INTERLACE_ROW 0
+#define INTERLACE_COLUMN 1
+#define INTERLACE_CHECKERBOARD 2
+
+in vec2 texCoord_interp;
+out vec4 fragColor;
+
+uniform int interlace_id;
+uniform sampler2DRect image_a;
+uniform sampler2DRect image_b;
+
+bool interlace()
+{
+ if (interlace_id == INTERLACE_CHECKERBOARD) {
+ return (int(gl_FragCoord.x + gl_FragCoord.y) & 1) != 0;
+ }
+ else if (interlace_id == INTERLACE_ROW) {
+ return (int(gl_FragCoord.y) & 1) != 0;
+ }
+ else if (interlace_id == INTERLACE_COLUMN) {
+ return (int(gl_FragCoord.x) & 1) != 0;
+ }
+}
+
+void main()
+{
+ if (interlace()) {
+ fragColor = texture(image_a, texCoord_interp);
+ } else {
+ fragColor = texture(image_b, texCoord_interp);
+ }
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_image_linear_frag.glsl b/source/blender/gpu/shaders/gpu_shader_image_linear_frag.glsl
new file mode 100644
index 00000000000..c2b25cc8011
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_image_linear_frag.glsl
@@ -0,0 +1,30 @@
+
+/* Display a linear image texture into sRGB space */
+
+uniform sampler2D image;
+
+in vec2 texCoord_interp;
+
+out vec4 fragColor;
+
+float linearrgb_to_srgb(float c)
+{
+ if (c < 0.0031308)
+ return (c < 0.0) ? 0.0 : c * 12.92;
+ else
+ return 1.055 * pow(c, 1.0 / 2.4) - 0.055;
+}
+
+void linearrgb_to_srgb(vec4 col_from, out vec4 col_to)
+{
+ col_to.r = linearrgb_to_srgb(col_from.r);
+ col_to.g = linearrgb_to_srgb(col_from.g);
+ col_to.b = linearrgb_to_srgb(col_from.b);
+ col_to.a = col_from.a;
+}
+
+void main() {
+ fragColor = texture(image, texCoord_interp.st);
+
+ linearrgb_to_srgb(fragColor, fragColor);
+} \ No newline at end of file
diff --git a/source/blender/gpu/shaders/gpu_shader_image_mask_uniform_color_frag.glsl b/source/blender/gpu/shaders/gpu_shader_image_mask_uniform_color_frag.glsl
new file mode 100644
index 00000000000..4a45d03175e
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_image_mask_uniform_color_frag.glsl
@@ -0,0 +1,12 @@
+
+in vec2 texCoord_interp;
+out vec4 fragColor;
+
+uniform sampler2D image;
+uniform vec4 color;
+
+void main()
+{
+ fragColor.a = texture(image, texCoord_interp).a * color.a;
+ fragColor.rgb = color.rgb;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_image_modulate_alpha_frag.glsl b/source/blender/gpu/shaders/gpu_shader_image_modulate_alpha_frag.glsl
new file mode 100644
index 00000000000..51092d56e5e
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_image_modulate_alpha_frag.glsl
@@ -0,0 +1,12 @@
+
+in vec2 texCoord_interp;
+out vec4 fragColor;
+
+uniform float alpha;
+uniform sampler2D image;
+
+void main()
+{
+ fragColor = texture(image, texCoord_interp);
+ fragColor.a *= alpha;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_image_rect_modulate_alpha_frag.glsl b/source/blender/gpu/shaders/gpu_shader_image_rect_modulate_alpha_frag.glsl
new file mode 100644
index 00000000000..7d9ce9d2003
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_image_rect_modulate_alpha_frag.glsl
@@ -0,0 +1,12 @@
+
+in vec2 texCoord_interp;
+out vec4 fragColor;
+
+uniform float alpha;
+uniform sampler2DRect image;
+
+void main()
+{
+ fragColor = texture(image, texCoord_interp);
+ fragColor.a *= alpha;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_image_shuffle_color_frag.glsl b/source/blender/gpu/shaders/gpu_shader_image_shuffle_color_frag.glsl
new file mode 100644
index 00000000000..64662247d69
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_image_shuffle_color_frag.glsl
@@ -0,0 +1,16 @@
+
+in vec2 texCoord_interp;
+out vec4 fragColor;
+
+uniform sampler2D image;
+uniform vec4 color;
+uniform vec4 shuffle;
+
+void main()
+{
+ vec4 sample = texture(image, texCoord_interp);
+ fragColor = vec4(sample.r * shuffle.r +
+ sample.g * shuffle.g +
+ sample.b * shuffle.b +
+ sample.a * shuffle.a) * color;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_instance_bone_envelope_solid_vert.glsl b/source/blender/gpu/shaders/gpu_shader_instance_bone_envelope_solid_vert.glsl
new file mode 100644
index 00000000000..d0f2a8dcd51
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_instance_bone_envelope_solid_vert.glsl
@@ -0,0 +1,121 @@
+
+
+/* This shader essentially operates in Object space, where it aligns given geometry with bone, scales it accordingly
+ * to given radii, and then does usual basic solid operations.
+ * Note that if one of head/tail radius is negative, it assumes it only works on the other end of the bone
+ * (used to draw head/tail spheres). */
+
+
+uniform mat4 ViewMatrix;
+uniform mat4 ViewProjectionMatrix;
+
+
+/* ---- Instanciated Attribs ---- */
+in vec4 pos; /* w encodes head (== 0.0f), tail (== 1.0f) or in-between. */
+
+/* ---- Per instance Attribs ---- */
+in mat4 InstanceModelMatrix;
+in vec4 color;
+
+in float radius_head;
+in float radius_tail;
+
+
+out vec3 normal;
+flat out vec4 finalColor;
+
+
+void main()
+{
+ /* We get head/tail in object space. */
+ vec4 head = InstanceModelMatrix * vec4(0.0f, 0.0f, 0.0f, 1.0f);
+ vec4 tail = InstanceModelMatrix * vec4(0.0f, 1.0f, 0.0f, 1.0f);
+
+ /* We need rotation from bone mat, but not scaling. */
+ mat3 bone_mat = mat3(InstanceModelMatrix);
+ bone_mat[0] = normalize(bone_mat[0]);
+ bone_mat[1] = normalize(bone_mat[1]);
+ bone_mat[2] = normalize(bone_mat[2]);
+
+ mat3 nor_mat = transpose(inverse(mat3(ViewMatrix) * bone_mat));
+
+ /* Where does this comes from???? Don't know why, but is mandatory anyway... :/ */
+ const float size = 2.0f;
+
+ head.xyz *= size;
+ tail.xyz *= size;
+
+ bool head_only = (radius_tail < 0.0f);
+ bool tail_only = (radius_head < 0.0f);
+ /* == 0: head; == 1: tail; in-between: along bone. */
+ float head_fac = head_only ? 0.0f : (tail_only ? 1.0f : pos.w);
+
+ vec4 ob_pos;
+ vec4 ob_bone_origin;
+ float radius;
+
+ /* head */
+ if (head_fac <= 0.0f) {
+ if (!head_only) {
+ /* We are drawing the body itself, need to adjust start/end positions and radius! */
+ vec3 bone_vec = tail.xyz - head.xyz;
+ float len = length(bone_vec);
+
+ if (len > (radius_head + radius_tail)) {
+ float fac = (len - radius_head) / len;
+ radius = fac * radius_head + (1.0f - fac) * radius_tail;
+ bone_vec /= len;
+ ob_bone_origin = vec4(head.xyz + bone_vec * radius_head * size, 1.0f);
+ }
+ else {
+ radius = (radius_head + radius_tail) / 2.0f;
+ ob_bone_origin = (head + tail) / 2.0f;
+ }
+ }
+ else {
+ radius = radius_head;
+ ob_bone_origin = head;
+ }
+ }
+ /* tail */
+ else if (head_fac >= 1.0f) {
+ if (!tail_only) {
+ /* We are drawing the body itself, need to adjust start/end positions and radius! */
+ vec3 bone_vec = tail.xyz - head.xyz;
+ float len = length(bone_vec);
+
+ if (len > (radius_head + radius_tail)) {
+ float fac = (len - radius_tail) / len;
+ radius = fac * radius_tail + (1.0f - fac) * radius_head;
+ bone_vec /= len;
+ ob_bone_origin = vec4(tail.xyz - bone_vec * radius_tail * size, 1.0f);
+ }
+ else {
+ radius = (radius_head + radius_tail) / 2.0f;
+ ob_bone_origin = (head + tail) / 2.0f;
+ }
+ }
+ else {
+ radius = radius_tail;
+ ob_bone_origin = tail;
+ }
+ }
+ /* Body of the bone */
+#if 0 /* Note: not used currently! */
+ else {
+ float tail_fac = 1.0f - head_fac;
+ radius = radius_head * head_fac + radius_tail * tail_fac;
+ ob_bone_origin = head * head_fac + tail * tail_fac;
+ }
+#endif
+
+ /* Yep, since input pos is unit sphere coordinates, it's also our normal. */
+ vec3 nor = pos.xyz;
+ ob_pos = pos * radius * size;
+ ob_pos.xyz = bone_mat * ob_pos.xyz;
+ ob_pos.w = 1.0f;
+
+ gl_Position = ViewProjectionMatrix * (ob_pos + ob_bone_origin);
+ normal = normalize(nor_mat * nor);
+ finalColor = color;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_instance_bone_envelope_wire_vert.glsl b/source/blender/gpu/shaders/gpu_shader_instance_bone_envelope_wire_vert.glsl
new file mode 100644
index 00000000000..1bdad924bd2
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_instance_bone_envelope_wire_vert.glsl
@@ -0,0 +1,100 @@
+
+
+/* This shader takes a 2D shape, puts it in 3D Object space such that is stays aligned with view and bone,
+ * and scales head/tail/distance according to per-instance attributes
+ * (and 'role' of current vertex, encoded in zw input, head or tail, and inner or outer for distance outline).
+ * It is used for both the distance outline drawing, and the wire version of envelope bone.
+ * Note that if one of head/tail radius is negative, it assumes it only works on the other end of the bone
+ * (used to draw head/tail spheres). */
+
+uniform mat4 ViewMatrix;
+uniform mat4 ProjectionMatrix;
+
+/* ---- Instanciated Attribs ---- */
+in vec4 pos; /* z encodes head (== 0.0f), tail (== 1.0f) or in-between; w encodes inner (0.0f) or outer border. */
+
+/* ---- Per instance Attribs ---- */
+in mat4 InstanceModelMatrix;
+in vec4 color;
+
+in float radius_head;
+in float radius_tail;
+in float distance;
+
+
+flat out vec4 finalColor;
+
+
+void main()
+{
+ /* We get head/tail in object space. */
+ mat4 bone_mat = InstanceModelMatrix;
+ vec4 head = bone_mat * vec4(0.0f, 0.0f, 0.0f, 1.0f);
+ vec4 tail = bone_mat * vec4(0.0f, 1.0f, 0.0f, 1.0f);
+
+ /* We generate our XY axes in object space, Y axis being aligned with bone in view space. */
+ mat4 obview_mat = ViewMatrix;
+ mat4 iobview_mat = inverse(obview_mat);
+
+ vec4 view_bone_vec = obview_mat * normalize(tail - head);
+ view_bone_vec.z = 0.0f;
+ if (length(view_bone_vec.xy) <= 1e-5f) {
+ /* A bit weak, but will do the job for now.
+ * Ideally we could compute head/tail radius in view space, and take larger one... */
+ if (view_bone_vec.x > view_bone_vec.y) {
+ view_bone_vec.x = 1e-5f;
+ }
+ else {
+ view_bone_vec.y = 1e-5f;
+ }
+ }
+ vec3 bone_axis_y = normalize((iobview_mat * view_bone_vec).xyz);
+ vec3 bone_axis_x = normalize(cross(bone_axis_y, iobview_mat[2].xyz));
+
+ /* Where does this comes from???? Don't know why, but is mandatory anyway... :/ */
+ float size = 2.0f;
+
+ head.xyz *= size;
+ tail.xyz *= size;
+
+ bool head_only = (radius_tail < 0.0f);
+ bool tail_only = (radius_head < 0.0f);
+ /* == 0: head; == 1: tail; in-between: along bone. */
+ float head_fac = head_only ? 0.0f : (tail_only ? 1.0f : pos.z);
+ bool do_distance_offset = (pos.w != 0.0f) && (distance >= 0.0f);
+
+ vec2 xy_pos = pos.xy;
+ vec4 ob_pos;
+
+ vec4 ob_bone_origin;
+ float radius;
+
+ /* head */
+ if (head_fac <= 0.0f) {
+ radius = radius_head;
+ ob_bone_origin = head;
+ }
+ /* tail */
+ else if (head_fac >= 1.0f) {
+ radius = radius_tail;
+ ob_bone_origin = tail;
+ }
+ /* Body of the bone */
+#if 0 /* Note: not used currently! */
+ else {
+ float tail_fac = 1.0f - head_fac;
+ radius = radius_head * head_fac + radius_tail * tail_fac;
+ ob_bone_origin = head * head_fac + tail * tail_fac;
+ }
+#endif
+
+ if (do_distance_offset) {
+ radius += distance;
+ }
+
+ xy_pos = xy_pos * radius * size;
+
+ ob_pos = ob_bone_origin + vec4(bone_axis_x * xy_pos.x + bone_axis_y * xy_pos.y, 1.0f);
+ gl_Position = ProjectionMatrix * obview_mat * ob_pos;
+ finalColor = color;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_instance_camera_vert.glsl b/source/blender/gpu/shaders/gpu_shader_instance_camera_vert.glsl
new file mode 100644
index 00000000000..aec8fd9b0a1
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_instance_camera_vert.glsl
@@ -0,0 +1,50 @@
+
+uniform mat4 ViewProjectionMatrix;
+
+/* ---- Instanciated Attribs ---- */
+in float pos;
+
+/* ---- Per instance Attribs ---- */
+in vec3 color;
+in vec4 corners[2]; /* trouble fetching vec2 */
+in float depth;
+in vec4 tria;
+in mat4 InstanceModelMatrix;
+
+flat out vec4 finalColor;
+
+void main()
+{
+ vec3 pPos;
+
+ if (pos == 1.0) {
+ pPos = vec3(corners[0].xy, depth);
+ }
+ else if (pos == 2.0) {
+ pPos = vec3(corners[0].zw, depth);
+ }
+ else if (pos == 3.0) {
+ pPos = vec3(corners[1].xy, depth);
+ }
+ else if (pos == 4.0) {
+ pPos = vec3(corners[1].zw, depth);
+ }
+ else if (pos == 5.0) {
+ pPos = vec3(tria.xy, depth);
+ }
+ else if (pos == 6.0) {
+ vec2 ofs = tria.xy - corners[0].xy;
+ ofs.x = -ofs.x;
+ pPos = vec3(corners[1].zw + ofs, depth);
+ }
+ else if (pos == 7.0) {
+ pPos = vec3(tria.zw, depth);
+ }
+ else {
+ pPos = vec3(0.0);
+ }
+
+ gl_Position = ViewProjectionMatrix * InstanceModelMatrix * vec4(pPos, 1.0);
+
+ finalColor = vec4(color, 1.0);
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_instance_distance_line_vert.glsl b/source/blender/gpu/shaders/gpu_shader_instance_distance_line_vert.glsl
new file mode 100644
index 00000000000..142df70e68a
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_instance_distance_line_vert.glsl
@@ -0,0 +1,25 @@
+
+uniform mat4 ViewProjectionMatrix;
+
+/* ---- Instanciated Attribs ---- */
+in vec3 pos;
+
+/* ---- Per instance Attribs ---- */
+in vec3 color;
+in float start;
+in float end;
+in mat4 InstanceModelMatrix;
+
+uniform float size;
+
+flat out vec4 finalColor;
+
+void main()
+{
+ float len = end - start;
+ vec3 sta = vec3(0.0, 0.0, -start);
+
+ gl_Position = ViewProjectionMatrix * InstanceModelMatrix * vec4(pos * -len + sta, 1.0);
+ gl_PointSize = size;
+ finalColor = vec4(color, 1.0);
+} \ No newline at end of file
diff --git a/source/blender/gpu/shaders/gpu_shader_instance_edges_variying_color_geom.glsl b/source/blender/gpu/shaders/gpu_shader_instance_edges_variying_color_geom.glsl
new file mode 100644
index 00000000000..6f580ef3ff6
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_instance_edges_variying_color_geom.glsl
@@ -0,0 +1,57 @@
+
+// Draw "fancy" wireframe, displaying front-facing, back-facing and
+// silhouette lines differently.
+// Mike Erwin, April 2015
+
+// After working with this shader a while, convinced we should make
+// separate shaders for perpective & ortho. (Oct 2016)
+
+// Due to perspective, the line segment's endpoints might disagree on
+// whether the adjacent faces are front facing. This geometry shader
+// decides which edge type to use if endpoints disagree.
+
+uniform mat4 ProjectionMatrix;
+
+uniform bool drawFront = true;
+uniform bool drawBack = true;
+uniform bool drawSilhouette = true;
+
+layout(lines) in;
+layout(line_strip, max_vertices = 2) out;
+
+in vec4 MV_pos[];
+in float edgeClass[];
+in vec3 fCol[];
+
+flat out vec4 finalColor;
+
+void emitLine(vec4 color)
+{
+ gl_Position = ProjectionMatrix * MV_pos[0];
+ EmitVertex();
+ gl_Position = ProjectionMatrix * MV_pos[1];
+ finalColor = color;
+ EmitVertex();
+ EndPrimitive();
+}
+
+void main()
+{
+ float finalEdgeClass = max(edgeClass[0], edgeClass[1]);
+
+ if (finalEdgeClass > 0.0f) {
+ // front-facing edge
+ if (drawFront)
+ emitLine(vec4(fCol[0], 0.75));
+ }
+ else if (finalEdgeClass < 0.0f) {
+ // back-facing edge
+ if (drawBack)
+ emitLine(vec4(fCol[0], 0.5));
+ }
+ else {
+ // exactly one face is front-facing, silhouette edge
+ if (drawSilhouette)
+ emitLine(vec4(fCol[0], 1.0));
+ }
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_instance_edges_variying_color_vert.glsl b/source/blender/gpu/shaders/gpu_shader_instance_edges_variying_color_vert.glsl
new file mode 100644
index 00000000000..fa30c9fb1ed
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_instance_edges_variying_color_vert.glsl
@@ -0,0 +1,63 @@
+
+// Draw "fancy" wireframe, displaying front-facing, back-facing and
+// silhouette lines differently.
+// Mike Erwin, April 2015
+
+// After working with this shader a while, convinced we should make
+// separate shaders for perpective & ortho. (Oct 2016)
+
+// Due to perspective, the line segment's endpoints might disagree on
+// whether the adjacent faces are front facing. We use a geometry
+// shader to resolve this properly.
+
+uniform mat4 ViewMatrix;
+uniform mat4 ProjectionMatrix;
+
+in vec3 pos;
+in vec3 N1, N2; // normals of faces this edge joins (object coords)
+
+/* instance attrib */
+in vec3 color;
+in mat4 InstanceModelMatrix;
+
+out vec4 MV_pos;
+out float edgeClass;
+out vec3 fCol;
+
+// TODO: in float angle; // [-pi .. +pi], + peak, 0 flat, - valley
+
+bool front(mat3 NormalMatrix, vec3 N, vec3 eye)
+{
+ return dot(NormalMatrix * N, eye) > 0.0;
+}
+
+void main()
+{
+ vec3 eye;
+
+ mat4 ModelViewMatrix = ViewMatrix * InstanceModelMatrix;
+
+ MV_pos = ModelViewMatrix * vec4(pos, 1.0);
+
+ mat3 NormalMatrix = transpose(inverse(mat3(ModelViewMatrix)));
+
+ /* if persp */
+ if (ProjectionMatrix[3][3] == 0.0) {
+ eye = normalize(-MV_pos.xyz);
+ }
+ else {
+ eye = vec3(0.0, 0.0, 1.0);
+ }
+
+ bool face_1_front = front(NormalMatrix, N1, eye);
+ bool face_2_front = front(NormalMatrix, N2, eye);
+
+ if (face_1_front && face_2_front)
+ edgeClass = 1.0; // front-facing edge
+ else if (face_1_front || face_2_front)
+ edgeClass = 0.0; // exactly one face is front-facing, silhouette edge
+ else
+ edgeClass = -1.0; // back-facing edge
+
+ fCol = color;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_instance_mball_helpers_vert.glsl b/source/blender/gpu/shaders/gpu_shader_instance_mball_helpers_vert.glsl
new file mode 100644
index 00000000000..819199c26c7
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_instance_mball_helpers_vert.glsl
@@ -0,0 +1,36 @@
+
+/* This shader takes a 2D shape, puts it in 3D Object space such that is stays aligned with view,
+ * and scales the shape according to per-instance attributes
+ * Note that if the stiffness is zero, it assumes the scale is directly multiplied by the radius */
+
+
+ #define M_PI_2 1.570796f // pi/2
+
+uniform mat4 ViewProjectionMatrix;
+uniform vec3 screen_vecs[2];
+
+/* ---- Instanciated Attribs ---- */
+in vec2 pos;
+
+/* ---- Per instance Attribs ---- */
+in mat3x4 ScaleTranslationMatrix;
+in float radius;
+in vec3 color;
+
+flat out vec4 finalColor;
+
+void main()
+{
+ mat3 Scamat = mat3(ScaleTranslationMatrix);
+ vec4 world_pos = vec4(
+ ScaleTranslationMatrix[0][3],
+ ScaleTranslationMatrix[1][3],
+ ScaleTranslationMatrix[2][3],
+ 1.0);
+
+ vec3 screen_pos = screen_vecs[0].xyz * pos.x + screen_vecs[1].xyz * pos.y;
+ world_pos.xyz += Scamat * (screen_pos * radius);
+
+ gl_Position = ViewProjectionMatrix * world_pos;
+ finalColor = vec4(color, 1.0);
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_instance_objectspace_variying_color_vert.glsl b/source/blender/gpu/shaders/gpu_shader_instance_objectspace_variying_color_vert.glsl
new file mode 100644
index 00000000000..9876717b297
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_instance_objectspace_variying_color_vert.glsl
@@ -0,0 +1,27 @@
+
+uniform mat4 ViewMatrix;
+uniform mat4 ViewProjectionMatrix;
+
+/* ---- Instanciated Attribs ---- */
+in vec3 pos;
+in vec3 nor;
+
+/* ---- Per instance Attribs ---- */
+in mat4 InstanceModelMatrix;
+in vec4 color;
+
+out vec3 normal;
+flat out vec4 finalColor;
+
+void main()
+{
+ mat4 ModelViewProjectionMatrix = ViewProjectionMatrix * InstanceModelMatrix;
+ /* This is slow and run per vertex, but it's still faster than
+ * doing it per instance on CPU and sending it on via instance attrib */
+ mat3 NormalMatrix = transpose(inverse(mat3(ViewMatrix * InstanceModelMatrix)));
+
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
+ normal = NormalMatrix * nor;
+
+ finalColor = color;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_instance_screen_aligned_vert.glsl b/source/blender/gpu/shaders/gpu_shader_instance_screen_aligned_vert.glsl
new file mode 100644
index 00000000000..2ee74b3eae0
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_instance_screen_aligned_vert.glsl
@@ -0,0 +1,32 @@
+
+uniform mat4 ViewProjectionMatrix;
+uniform vec3 screen_vecs[2];
+
+/* ---- Instanciated Attribs ---- */
+in vec3 pos; /* using Z as axis id */
+
+/* ---- Per instance Attribs ---- */
+in mat4 InstanceModelMatrix;
+in vec3 color;
+in float size;
+
+flat out vec4 finalColor;
+
+void main()
+{
+ vec3 offset = vec3(0.0);
+
+#ifdef AXIS_NAME
+ if (pos.z == 0.0)
+ offset = vec3(1.125, 0.0, 0.0);
+ else if (pos.z == 1.0)
+ offset = vec3(0.0, 1.125, 0.0);
+ else
+ offset = vec3(0.0, 0.0, 1.125);
+ offset *= size;
+#endif
+
+ vec3 screen_pos = screen_vecs[0].xyz * pos.x + screen_vecs[1].xyz * pos.y;
+ gl_Position = ViewProjectionMatrix * (InstanceModelMatrix * vec4(offset, 1.0) + vec4(screen_pos * size, 0.0));
+ finalColor = vec4(color, 1.0);
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_instance_screenspace_variying_color_vert.glsl b/source/blender/gpu/shaders/gpu_shader_instance_screenspace_variying_color_vert.glsl
new file mode 100644
index 00000000000..ba0ac29fb79
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_instance_screenspace_variying_color_vert.glsl
@@ -0,0 +1,29 @@
+
+uniform mat4 ViewProjectionMatrix;
+uniform vec3 screen_vecs[2];
+uniform float size;
+uniform float pixel_size;
+
+/* ---- Instanciated Attribs ---- */
+in vec2 pos;
+
+/* ---- Per instance Attribs ---- */
+in vec3 world_pos;
+in vec3 color;
+
+flat out vec4 finalColor;
+
+float mul_project_m4_v3_zfac(in vec3 co)
+{
+ return (ViewProjectionMatrix[0][3] * co.x) +
+ (ViewProjectionMatrix[1][3] * co.y) +
+ (ViewProjectionMatrix[2][3] * co.z) + ViewProjectionMatrix[3][3];
+}
+
+void main()
+{
+ float pix_size = mul_project_m4_v3_zfac(world_pos) * pixel_size;
+ vec3 screen_pos = screen_vecs[0].xyz * pos.x + screen_vecs[1].xyz * pos.y;
+ gl_Position = ViewProjectionMatrix * vec4(world_pos + screen_pos * size * pix_size, 1.0);
+ finalColor = vec4(color, 1.0);
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_instance_variying_size_variying_color_vert.glsl b/source/blender/gpu/shaders/gpu_shader_instance_variying_size_variying_color_vert.glsl
new file mode 100644
index 00000000000..10a2ba61a2c
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_instance_variying_size_variying_color_vert.glsl
@@ -0,0 +1,22 @@
+
+uniform mat4 ViewProjectionMatrix;
+
+/* ---- Instanciated Attribs ---- */
+in vec3 pos;
+
+/* ---- Per instance Attribs ---- */
+in mat4 InstanceModelMatrix;
+in vec3 color;
+#ifdef UNIFORM_SCALE
+in float size;
+#else
+in vec3 size;
+#endif
+
+flat out vec4 finalColor;
+
+void main()
+{
+ gl_Position = ViewProjectionMatrix * InstanceModelMatrix * vec4(pos * size, 1.0);
+ finalColor = vec4(color, 1.0);
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_instance_vert.glsl b/source/blender/gpu/shaders/gpu_shader_instance_vert.glsl
new file mode 100644
index 00000000000..eac167e8045
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_instance_vert.glsl
@@ -0,0 +1,13 @@
+
+uniform mat4 ViewProjectionMatrix;
+
+/* ---- Instanciated Attribs ---- */
+in vec3 pos;
+
+/* ---- Per instance Attribs ---- */
+in mat4 InstanceModelMatrix;
+
+void main()
+{
+ gl_Position = ViewProjectionMatrix * InstanceModelMatrix * vec4(pos, 1.0);
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_keyframe_diamond_frag.glsl b/source/blender/gpu/shaders/gpu_shader_keyframe_diamond_frag.glsl
new file mode 100644
index 00000000000..7f445369833
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_keyframe_diamond_frag.glsl
@@ -0,0 +1,31 @@
+
+in vec4 radii;
+in vec4 finalColor;
+in vec4 finalOutlineColor;
+out vec4 fragColor;
+
+void main() {
+ vec2 quad = abs(gl_PointCoord - vec2(0.5));
+ float dist = quad.x + quad.y;
+
+// transparent outside of point
+// --- 0 ---
+// smooth transition
+// --- 1 ---
+// pure outline color
+// --- 2 ---
+// smooth transition
+// --- 3 ---
+// pure point color
+// ...
+// dist = 0 at center of point
+
+ float mid_stroke = 0.5 * (radii[1] + radii[2]);
+
+ vec4 backgroundColor = vec4(finalOutlineColor.rgb, 0.0);
+
+ if (dist > mid_stroke)
+ fragColor = mix(finalOutlineColor, backgroundColor, smoothstep(radii[1], radii[0], dist));
+ else
+ fragColor = mix(finalColor, finalOutlineColor, smoothstep(radii[3], radii[2], dist));
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_keyframe_diamond_vert.glsl b/source/blender/gpu/shaders/gpu_shader_keyframe_diamond_vert.glsl
new file mode 100644
index 00000000000..c49832bf9b4
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_keyframe_diamond_vert.glsl
@@ -0,0 +1,34 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+
+const float pixel_fudge = sqrt(2.0);
+const float outline_width = 1.15 * pixel_fudge;
+
+in vec2 pos;
+in float size;
+in vec4 color;
+in vec4 outlineColor;
+out vec4 finalColor;
+out vec4 finalOutlineColor;
+out vec4 radii;
+
+void main() {
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 0.0, 1.0);
+
+ // pass through unchanged
+ gl_PointSize = size + pixel_fudge; // 0.5 pixel_fudge on either side
+ finalColor = color;
+ finalOutlineColor = outlineColor;
+
+ // calculate concentric radii in pixels
+ float radius = 0.5 * gl_PointSize;
+
+ // start at the outside and progress toward the center
+ radii[0] = radius;
+ radii[1] = radius - pixel_fudge;
+ radii[2] = radius - outline_width;
+ radii[3] = radius - outline_width - pixel_fudge;
+
+ // convert to PointCoord units
+ radii /= size;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl
index d589c8765e6..667972fc429 100644
--- a/source/blender/gpu/shaders/gpu_shader_material.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_material.glsl
@@ -1,11 +1,57 @@
+
+uniform mat4 ModelViewMatrix;
+#ifndef EEVEE_ENGINE
+uniform mat4 ProjectionMatrix;
+uniform mat4 ViewMatrixInverse;
+uniform mat4 ViewMatrix;
+#endif
+uniform mat4 ModelMatrix;
+uniform mat4 ModelMatrixInverse;
+uniform mat4 ModelViewMatrixInverse;
+uniform mat4 ProjectionMatrixInverse;
+uniform mat3 NormalMatrix;
+uniform vec4 CameraTexCoFactors;
+
+/* Old glsl mode compat. */
+
+#ifndef CLOSURE_DEFAULT
+
+struct Closure {
+ vec3 radiance;
+ float opacity;
+};
+
+#define CLOSURE_DEFAULT Closure(vec3(0.0), 1.0)
+
+Closure closure_mix(Closure cl1, Closure cl2, float fac)
+{
+ Closure cl;
+ cl.radiance = mix(cl1.radiance, cl2.radiance, fac);
+ cl.opacity = mix(cl1.opacity, cl2.opacity, fac);
+ return cl;
+}
+
+Closure closure_add(Closure cl1, Closure cl2)
+{
+ Closure cl;
+ cl.radiance = cl1.radiance + cl2.radiance;
+ cl.opacity = cl1.opacity + cl2.opacity;
+ return cl;
+}
+
+Closure nodetree_exec(void); /* Prototype */
+
+#endif /* CLOSURE_DEFAULT */
+
+
/* Converters */
float convert_rgba_to_float(vec4 color)
{
#ifdef USE_NEW_SHADING
- return color.r * 0.2126 + color.g * 0.7152 + color.b * 0.0722;
+ return dot(color.rgb, vec3(0.2126, 0.7152, 0.0722));
#else
- return (color.r + color.g + color.b) / 3.0;
+ return (color.r + color.g + color.b) * 0.333333;
#endif
}
@@ -53,7 +99,7 @@ void rgb_to_hsv(vec4 rgb, out vec4 outcol)
h = 0.0;
}
else {
- c = (vec3(cmax, cmax, cmax) - rgb.xyz) / cdelta;
+ c = (vec3(cmax) - rgb.xyz) / cdelta;
if (rgb.x == cmax) h = c[2] - c[1];
else if (rgb.y == cmax) h = 2.0 + c[0] - c[2];
@@ -155,15 +201,18 @@ void color_to_blender_normal_new_shading(vec3 color, out vec3 normal)
normal.y = -2.0 * ((color.g) - 0.5);
normal.z = -2.0 * ((color.b) - 0.5);
}
-
+#ifndef M_PI
#define M_PI 3.14159265358979323846
-#define M_1_PI 0.31830988618379069
+#endif
+#ifndef M_1_PI
+#define M_1_PI 0.318309886183790671538
+#endif
/*********** SHADER NODES ***************/
void vcol_attribute(vec4 attvcol, out vec4 vcol)
{
- vcol = vec4(attvcol.x, attvcol.y, attvcol.z, 1.0);
+ vcol = vec4(attvcol.xyz, 1.0);
}
void uv_attribute(vec2 attuv, out vec3 uv)
@@ -177,7 +226,7 @@ void geom(
out vec3 normal, out vec4 vcol, out float vcol_alpha, out float frontback)
{
local = co;
- view = (gl_ProjectionMatrix[3][3] == 0.0) ? normalize(local) : vec3(0.0, 0.0, -1.0);
+ view = (ProjectionMatrix[3][3] == 0.0) ? normalize(local) : vec3(0.0, 0.0, -1.0);
global = (viewinvmat * vec4(local, 1.0)).xyz;
orco = attorco;
uv_attribute(attuv, uv);
@@ -419,13 +468,13 @@ void squeeze(float val, float width, float center, out float outval)
void vec_math_add(vec3 v1, vec3 v2, out vec3 outvec, out float outval)
{
outvec = v1 + v2;
- outval = (abs(outvec[0]) + abs(outvec[1]) + abs(outvec[2])) / 3.0;
+ outval = (abs(outvec[0]) + abs(outvec[1]) + abs(outvec[2])) * 0.333333;
}
void vec_math_sub(vec3 v1, vec3 v2, out vec3 outvec, out float outval)
{
outvec = v1 - v2;
- outval = (abs(outvec[0]) + abs(outvec[1]) + abs(outvec[2])) / 3.0;
+ outval = (abs(outvec[0]) + abs(outvec[1]) + abs(outvec[2])) * 0.333333;
}
void vec_math_average(vec3 v1, vec3 v2, out vec3 outvec, out float outval)
@@ -441,7 +490,7 @@ void vec_math_mix(float strength, vec3 v1, vec3 v2, out vec3 outvec)
void vec_math_dot(vec3 v1, vec3 v2, out vec3 outvec, out float outval)
{
- outvec = vec3(0, 0, 0);
+ outvec = vec3(0);
outval = dot(v1, v2);
}
@@ -483,9 +532,9 @@ void normal_new_shading(vec3 dir, vec3 nor, out vec3 outnor, out float outdot)
void curves_vec(float fac, vec3 vec, sampler2D curvemap, out vec3 outvec)
{
- outvec.x = texture2D(curvemap, vec2((vec.x + 1.0) * 0.5, 0.0)).x;
- outvec.y = texture2D(curvemap, vec2((vec.y + 1.0) * 0.5, 0.0)).y;
- outvec.z = texture2D(curvemap, vec2((vec.z + 1.0) * 0.5, 0.0)).z;
+ outvec.x = texture(curvemap, vec2((vec.x + 1.0) * 0.5, 0.0)).x;
+ outvec.y = texture(curvemap, vec2((vec.y + 1.0) * 0.5, 0.0)).y;
+ outvec.z = texture(curvemap, vec2((vec.z + 1.0) * 0.5, 0.0)).z;
if (fac != 1.0)
outvec = (outvec * fac) + (vec * (1.0 - fac));
@@ -494,9 +543,9 @@ void curves_vec(float fac, vec3 vec, sampler2D curvemap, out vec3 outvec)
void curves_rgb(float fac, vec4 col, sampler2D curvemap, out vec4 outcol)
{
- outcol.r = texture2D(curvemap, vec2(texture2D(curvemap, vec2(col.r, 0.0)).a, 0.0)).r;
- outcol.g = texture2D(curvemap, vec2(texture2D(curvemap, vec2(col.g, 0.0)).a, 0.0)).g;
- outcol.b = texture2D(curvemap, vec2(texture2D(curvemap, vec2(col.b, 0.0)).a, 0.0)).b;
+ outcol.r = texture(curvemap, vec2(texture(curvemap, vec2(col.r, 0.0)).a, 0.0)).r;
+ outcol.g = texture(curvemap, vec2(texture(curvemap, vec2(col.g, 0.0)).a, 0.0)).g;
+ outcol.b = texture(curvemap, vec2(texture(curvemap, vec2(col.b, 0.0)).a, 0.0)).b;
if (fac != 1.0)
outcol = (outcol * fac) + (col * (1.0 - fac));
@@ -816,22 +865,23 @@ void mix_linear(float fac, vec4 col1, vec4 col2, out vec4 outcol)
void valtorgb(float fac, sampler2D colormap, out vec4 outcol, out float outalpha)
{
- outcol = texture2D(colormap, vec2(fac, 0.0));
+ outcol = texture(colormap, vec2(fac, 0.0));
outalpha = outcol.a;
}
void rgbtobw(vec4 color, out float outval)
{
#ifdef USE_NEW_SHADING
- outval = color.r * 0.2126 + color.g * 0.7152 + color.b * 0.0722;
+ vec3 factors = vec3(0.2126, 0.7152, 0.0722);
#else
- outval = color.r * 0.35 + color.g * 0.45 + color.b * 0.2; /* keep these factors in sync with texture.h:RGBTOBW */
+ vec3 factors = vec3(0.35, 0.45, 0.2); /* keep these factors in sync with texture.h:RGBTOBW */
#endif
+ outval = dot(color.rgb, factors);
}
void invert(float fac, vec4 col, out vec4 outcol)
{
- outcol.xyz = mix(col.xyz, vec3(1.0, 1.0, 1.0) - col.xyz, fac);
+ outcol.xyz = mix(col.xyz, vec3(1.0) - col.xyz, fac);
outcol.w = col.w;
}
@@ -916,12 +966,12 @@ void texture_flip_blend(vec3 vec, out vec3 outvec)
void texture_blend_lin(vec3 vec, out float outval)
{
- outval = (1.0 + vec.x) / 2.0;
+ outval = (1.0 + vec.x) * 0.5;
}
void texture_blend_quad(vec3 vec, out float outval)
{
- outval = max((1.0 + vec.x) / 2.0, 0.0);
+ outval = max((1.0 + vec.x) * 0.5, 0.0);
outval *= outval;
}
@@ -932,12 +982,12 @@ void texture_wood_sin(vec3 vec, out float value, out vec4 color, out vec3 normal
value = wi;
color = vec4(wi, wi, wi, 1.0);
- normal = vec3(0.0, 0.0, 0.0);
+ normal = vec3(0.0);
}
void texture_image(vec3 vec, sampler2D ima, out float value, out vec4 color, out vec3 normal)
{
- color = texture2D(ima, (vec.xy + vec2(1.0, 1.0)) * 0.5);
+ color = texture(ima, (vec.xy + vec2(1.0)) * 0.5);
value = color.a;
normal.x = 2.0 * (color.r - 0.5);
@@ -1277,11 +1327,7 @@ void mtex_har_divide(float har, out float outhar)
void mtex_har_multiply_clamp(float har, out float outhar)
{
- har *= 128.0;
-
- if (har < 1.0) outhar = 1.0;
- else if (har > 511.0) outhar = 511.0;
- else outhar = har;
+ outhar = clamp(har * 128.0, 1.0, 511.0);
}
void mtex_alpha_from_col(vec4 col, out float alpha)
@@ -1350,14 +1396,14 @@ vec3 mtex_2d_mapping(vec3 vec)
void mtex_cube_map(vec3 co, samplerCube ima, out float value, out vec4 color)
{
- color = textureCube(ima, co);
+ color = texture(ima, co);
value = 1.0;
}
void mtex_cube_map_refl_from_refldir(
samplerCube ima, vec3 reflecteddirection, out float value, out vec4 color)
{
- color = textureCube(ima, reflecteddirection);
+ color = texture(ima, reflecteddirection);
value = color.a;
}
@@ -1368,13 +1414,13 @@ void mtex_cube_map_refl(
vec3 viewdirection = vec3(viewmatrixinverse * vec4(vp, 0.0));
vec3 normaldirection = normalize(vec3(vec4(vn, 0.0) * viewmatrix));
vec3 reflecteddirection = reflect(viewdirection, normaldirection);
- color = textureCube(ima, reflecteddirection);
+ color = texture(ima, reflecteddirection);
value = 1.0;
}
void mtex_image(vec3 texco, sampler2D ima, out float value, out vec4 color)
{
- color = texture2D(ima, texco.xy);
+ color = texture(ima, texco.xy);
value = 1.0;
}
@@ -1385,7 +1431,7 @@ void mtex_normal(vec3 texco, sampler2D ima, out vec3 normal)
// It needs to be done because in Blender
// the normal used points inward.
// Should this ever change this negate must be removed.
- vec4 color = texture2D(ima, texco.xy);
+ vec4 color = texture(ima, texco.xy);
normal = 2.0 * (vec3(-color.r, color.g, color.b) - vec3(-0.5, 0.5, 0.5));
}
@@ -1413,8 +1459,8 @@ void mtex_bump_init_objspace(
out float fPrevMagnitude_out, out vec3 vNacc_out,
out vec3 vR1, out vec3 vR2, out float fDet)
{
- mat3 obj2view = to_mat3(gl_ModelViewMatrix);
- mat3 view2obj = to_mat3(gl_ModelViewMatrixInverse);
+ mat3 obj2view = to_mat3(ModelViewMatrix);
+ mat3 view2obj = to_mat3(ModelViewMatrixInverse);
vec3 vSigmaS = view2obj * dFdx(surf_pos);
vec3 vSigmaT = view2obj * dFdy(surf_pos);
@@ -1481,9 +1527,9 @@ void mtex_bump_tap3(
vec2 STul = texco.xy + dFdy(texco.xy);
float Hll, Hlr, Hul;
- rgbtobw(texture2D(ima, STll), Hll);
- rgbtobw(texture2D(ima, STlr), Hlr);
- rgbtobw(texture2D(ima, STul), Hul);
+ rgbtobw(texture(ima, STll), Hll);
+ rgbtobw(texture(ima, STlr), Hlr);
+ rgbtobw(texture(ima, STul), Hul);
dBs = hScale * (Hlr - Hll);
dBt = hScale * (Hul - Hll);
@@ -1508,10 +1554,10 @@ void mtex_bump_bicubic(
vec2 STd = texco.xy - 0.5 * TexDy;
vec2 STu = texco.xy + 0.5 * TexDy;
- rgbtobw(texture2D(ima, STl), Hl);
- rgbtobw(texture2D(ima, STr), Hr);
- rgbtobw(texture2D(ima, STd), Hd);
- rgbtobw(texture2D(ima, STu), Hu);
+ rgbtobw(texture(ima, STl), Hl);
+ rgbtobw(texture(ima, STr), Hr);
+ rgbtobw(texture(ima, STd), Hd);
+ rgbtobw(texture(ima, STu), Hu);
vec2 dHdxy = vec2(Hr - Hl, Hu - Hd);
float fBlend = clamp(1.0 - textureQueryLOD(ima, texco.xy).x, 0.0, 1.0);
@@ -1597,11 +1643,11 @@ void mtex_bump_tap5(
vec2 STu = texco.xy + 0.5 * TexDy;
float Hc, Hl, Hr, Hd, Hu;
- rgbtobw(texture2D(ima, STc), Hc);
- rgbtobw(texture2D(ima, STl), Hl);
- rgbtobw(texture2D(ima, STr), Hr);
- rgbtobw(texture2D(ima, STd), Hd);
- rgbtobw(texture2D(ima, STu), Hu);
+ rgbtobw(texture(ima, STc), Hc);
+ rgbtobw(texture(ima, STl), Hl);
+ rgbtobw(texture(ima, STr), Hr);
+ rgbtobw(texture(ima, STd), Hd);
+ rgbtobw(texture(ima, STu), Hu);
dBs = hScale * (Hr - Hl);
dBt = hScale * (Hu - Hd);
@@ -1618,7 +1664,7 @@ void mtex_bump_deriv(
// this variant using a derivative map is described here
// http://mmikkelsen3d.blogspot.com/2011/07/derivative-maps.html
vec2 dim = vec2(ima_x, ima_y);
- vec2 dBduv = hScale * dim * (2.0 * texture2D(ima, texco.xy).xy - 1.0);
+ vec2 dBduv = hScale * dim * (2.0 * texture(ima, texco.xy).xy - 1.0);
dBs = dBduv.x * TexDx.x + s * dBduv.y * TexDx.y;
dBt = dBduv.x * TexDy.x + s * dBduv.y * TexDy.y;
@@ -1670,7 +1716,7 @@ void mtex_nspace_world(mat4 viewmat, vec3 texnormal, out vec3 outnormal)
void mtex_nspace_object(vec3 texnormal, out vec3 outnormal)
{
- outnormal = normalize(gl_NormalMatrix * texnormal);
+ outnormal = normalize(NormalMatrix * texnormal);
}
void mtex_blend_normal(float norfac, vec3 normal, vec3 newnormal, out vec3 outnormal)
@@ -1727,7 +1773,7 @@ void lamp_falloff_invcoefficients(float coeff_const, float coeff_lin, float coef
void lamp_falloff_curve(float lampdist, sampler2D curvemap, float dist, out float visifac)
{
- visifac = texture2D(curvemap, vec2(dist / lampdist, 0.0)).x;
+ visifac = texture(curvemap, vec2(dist / lampdist, 0.0)).x;
}
void lamp_visibility_sphere(float lampdist, float dist, float visifac, out float outvisifac)
@@ -1794,7 +1840,7 @@ void lamp_visibility_clamp(float visifac, out float outvisifac)
void world_paper_view(vec3 vec, out vec3 outvec)
{
vec3 nvec = normalize(vec);
- outvec = (gl_ProjectionMatrix[3][3] == 0.0) ? vec3(nvec.x, 0.0, nvec.y) : vec3(0.0, 0.0, -1.0);
+ outvec = (ProjectionMatrix[3][3] == 0.0) ? vec3(nvec.x, 0.0, nvec.y) : vec3(0.0, 0.0, -1.0);
}
void world_zen_mapping(vec3 view, float zenup, float zendown, out float zenfac)
@@ -1828,7 +1874,7 @@ void world_blend(vec3 vec, out float blend)
void shade_view(vec3 co, out vec3 view)
{
/* handle perspective/orthographic */
- view = (gl_ProjectionMatrix[3][3] == 0.0) ? normalize(co) : vec3(0.0, 0.0, -1.0);
+ view = (ProjectionMatrix[3][3] == 0.0) ? normalize(co) : vec3(0.0, 0.0, -1.0);
}
void shade_tangent_v(vec3 lv, vec3 tang, out vec3 vn)
@@ -2020,7 +2066,7 @@ void shade_add_to_diffuse(float i, vec3 lampcol, vec3 col, out vec3 outcol)
if (i > 0.0)
outcol = i * lampcol * col;
else
- outcol = vec3(0.0, 0.0, 0.0);
+ outcol = vec3(0.0);
}
void shade_hemi_spec(vec3 vn, vec3 lv, vec3 view, float spec, float hard, float visifac, out float t)
@@ -2177,12 +2223,12 @@ void shade_madd(vec4 col, vec4 col1, vec4 col2, out vec4 outcol)
void shade_add_clamped(vec4 col1, vec4 col2, out vec4 outcol)
{
- outcol = col1 + max(col2, vec4(0.0, 0.0, 0.0, 0.0));
+ outcol = col1 + max(col2, vec4(0.0));
}
void shade_madd_clamped(vec4 col, vec4 col1, vec4 col2, out vec4 outcol)
{
- outcol = col + max(col1 * col2, vec4(0.0, 0.0, 0.0, 0.0));
+ outcol = col + max(col1 * col2, vec4(0.0));
}
void env_apply(vec4 col, vec3 hor, vec3 zen, vec4 f, mat4 vm, vec3 vn, out vec4 outcol)
@@ -2219,7 +2265,7 @@ void shade_obcolor(vec4 col, vec4 obcol, out vec4 outcol)
void ramp_rgbtobw(vec3 color, out float outval)
{
- outval = color.r * 0.3 + color.g * 0.58 + color.b * 0.12;
+ outval = dot(color, vec3(0.3, 0.58, 0.12));
}
void shade_only_shadow(float i, float shadfac, float energy, vec3 shadcol, out vec3 outshadrgb)
@@ -2255,10 +2301,12 @@ void test_shadowbuf(
//float bias = (1.5 - inp*inp)*shadowbias;
co.z -= shadowbias * co.w;
- if (co.w > 0.0 && co.x > 0.0 && co.x / co.w < 1.0 && co.y > 0.0 && co.y / co.w < 1.0)
- result = shadow2DProj(shadowmap, co).x;
- else
+ if (co.w > 0.0 && co.x > 0.0 && co.x / co.w < 1.0 && co.y > 0.0 && co.y / co.w < 1.0) {
+ result = textureProj(shadowmap, co);
+ }
+ else {
result = 1.0;
+ }
}
}
@@ -2272,7 +2320,7 @@ void test_shadowbuf_vsm(
else {
vec4 co = shadowpersmat * vec4(rco, 1.0);
if (co.w > 0.0 && co.x > 0.0 && co.x / co.w < 1.0 && co.y > 0.0 && co.y / co.w < 1.0) {
- vec2 moments = texture2DProj(shadowmap, co).rg;
+ vec2 moments = textureProj(shadowmap, co).rg;
float dist = co.z / co.w;
float p = 0.0;
@@ -2331,7 +2379,7 @@ void shade_light_texture(vec3 rco, sampler2D cookie, mat4 shadowpersmat, out vec
vec4 co = shadowpersmat * vec4(rco, 1.0);
- result = texture2DProj(cookie, co);
+ result = textureProj(cookie, co);
}
void shade_exposure_correct(vec3 col, float linfac, float logfac, out vec3 outcol)
@@ -2346,7 +2394,7 @@ void shade_mist_factor(
if (enable == 1.0) {
float fac, zcor;
- zcor = (gl_ProjectionMatrix[3][3] == 0.0) ? length(co) : -co[2];
+ zcor = (ProjectionMatrix[3][3] == 0.0) ? length(co) : -co[2];
fac = clamp((zcor - miststa) / mistdist, 0.0, 1.0);
if (misttype == 0.0) fac *= fac;
@@ -2421,7 +2469,15 @@ float hypot(float x, float y)
void generated_from_orco(vec3 orco, out vec3 generated)
{
- generated = orco * 0.5 + vec3(0.5);
+#ifdef VOLUMETRICS
+#ifdef MESH_SHADER
+ generated = volumeObjectLocalCoord;
+#else
+ generated = worldPosition;
+#endif
+#else
+ generated = orco;
+#endif
}
int floor_to_int(float x)
@@ -2434,7 +2490,6 @@ int quick_floor(float x)
return int(x) - ((x < 0) ? 1 : 0);
}
-#ifdef BIT_OPERATIONS
float integer_noise(int n)
{
int nn;
@@ -2498,7 +2553,6 @@ vec3 cellnoise_color(vec3 p)
return vec3(r, g, b);
}
-#endif // BIT_OPERATIONS
float floorfrac(float x, out int i)
{
@@ -2560,41 +2614,107 @@ vec3 rotate_vector(vec3 p, vec3 n, float theta) {
);
}
+void prepare_tangent(
+ float anisotropic, float anisotropic_rotation, float roughness, vec3 N, vec3 T,
+ out vec3 X, out vec3 Y, out float ax, out float ay)
+{
+ /* rotate tangent */
+ if (anisotropic_rotation != 0.0) {
+ T = rotate_vector(T, N, anisotropic_rotation * 2.0 * M_PI);
+ }
+
+ Y = normalize(cross(T, N));
+
+ float aspect = sqrt(1.0 - anisotropic * 0.9);
+ float a = sqr(roughness);
+ ax = max(0.001, a / aspect);
+ ay = max(0.001, a * aspect);
+}
+
+void convert_metallic_to_specular(vec3 basecol, float metallic, float specular_fac, out vec3 diffuse, out vec3 f0)
+{
+ vec3 dielectric = vec3(0.034) * specular_fac * 2.0;
+ diffuse = mix(basecol, vec3(0.0), metallic);
+ f0 = mix(dielectric, basecol, metallic);
+}
+
+void convert_metallic_to_specular_tinted(
+ vec3 basecol, float metallic, float specular_fac, float specular_tint,
+ out vec3 diffuse, out vec3 f0)
+{
+ vec3 dielectric = vec3(0.034) * specular_fac * 2.0;
+ float lum = dot(basecol, vec3(0.3, 0.6, 0.1)); /* luminance approx. */
+ vec3 tint = lum > 0 ? basecol / lum : vec3(1.0); /* normalize lum. to isolate hue+sat */
+ f0 = mix(dielectric * mix(vec3(1.0), tint, specular_tint), basecol, metallic);
+ diffuse = mix(basecol, vec3(0.0), metallic);
+}
/*********** NEW SHADER NODES ***************/
#define NUM_LIGHTS 3
-/* bsdfs */
+struct glLight {
+ vec4 position;
+ vec4 diffuse;
+ vec4 specular;
+ vec4 halfVector;
+};
-void node_bsdf_diffuse(vec4 color, float roughness, vec3 N, out vec4 result)
-{
+layout(std140) uniform lightSource {
+ glLight glLightSource[NUM_LIGHTS];
+};
+
+#ifndef VOLUMETRICS
+/* bsdfs */
+void node_bsdf_diffuse(vec4 color, float roughness, vec3 N, out Closure result)
+{
+#ifdef EEVEE_ENGINE
+ vec3 vN = normalize(mat3(ViewMatrix) * N);
+ result = CLOSURE_DEFAULT;
+ result.ssr_normal = normal_encode(vN, viewCameraVec);
+ eevee_closure_diffuse(N, color.rgb, 1.0, result.radiance);
+ result.radiance *= color.rgb;
+#else
/* ambient light */
vec3 L = vec3(0.2);
/* directional lights */
for (int i = 0; i < NUM_LIGHTS; i++) {
- vec3 light_position = gl_LightSource[i].position.xyz;
- vec3 light_diffuse = gl_LightSource[i].diffuse.rgb;
+ vec3 light_position = glLightSource[i].position.xyz;
+ vec3 light_diffuse = glLightSource[i].diffuse.rgb;
float bsdf = max(dot(N, light_position), 0.0);
L += light_diffuse * bsdf;
}
- result = vec4(L * color.rgb, 1.0);
+ result = Closure(L * color.rgb, 1.0);
+#endif
}
-void node_bsdf_glossy(vec4 color, float roughness, vec3 N, out vec4 result)
+void node_bsdf_glossy(vec4 color, float roughness, vec3 N, float ssr_id, out Closure result)
{
+#ifdef EEVEE_ENGINE
+ vec3 out_spec, ssr_spec;
+ roughness = sqrt(roughness);
+ eevee_closure_glossy(N, vec3(1.0), int(ssr_id), roughness, 1.0, out_spec, ssr_spec);
+ vec3 vN = normalize(mat3(ViewMatrix) * N);
+ result = CLOSURE_DEFAULT;
+ result.radiance = out_spec * color.rgb;
+ result.ssr_data = vec4(ssr_spec * color.rgb, roughness);
+ result.ssr_normal = normal_encode(vN, viewCameraVec);
+ result.ssr_id = int(ssr_id);
+#else
/* ambient light */
vec3 L = vec3(0.2);
+ direction_transform_m4v3(N, ViewMatrix, N);
+
/* directional lights */
for (int i = 0; i < NUM_LIGHTS; i++) {
- vec3 light_position = gl_LightSource[i].position.xyz;
- vec3 H = gl_LightSource[i].halfVector.xyz;
- vec3 light_diffuse = gl_LightSource[i].diffuse.rgb;
- vec3 light_specular = gl_LightSource[i].specular.rgb;
+ vec3 light_position = glLightSource[i].position.xyz;
+ vec3 H = glLightSource[i].halfVector.xyz;
+ vec3 light_diffuse = glLightSource[i].diffuse.rgb;
+ vec3 light_specular = glLightSource[i].specular.rgb;
/* we mix in some diffuse so low roughness still shows up */
float bsdf = 0.5 * pow(max(dot(N, H), 0.0), 1.0 / roughness);
@@ -2602,30 +2722,52 @@ void node_bsdf_glossy(vec4 color, float roughness, vec3 N, out vec4 result)
L += light_specular * bsdf;
}
- result = vec4(L * color.rgb, 1.0);
+ result = Closure(L * color.rgb, 1.0);
+#endif
}
void node_bsdf_anisotropic(
vec4 color, float roughness, float anisotropy, float rotation, vec3 N, vec3 T,
- out vec4 result)
+ out Closure result)
{
node_bsdf_diffuse(color, 0.0, N, result);
}
-void node_bsdf_glass(vec4 color, float roughness, float ior, vec3 N, out vec4 result)
-{
+void node_bsdf_glass(vec4 color, float roughness, float ior, vec3 N, float ssr_id, out Closure result)
+{
+#ifdef EEVEE_ENGINE
+ vec3 out_spec, out_refr, ssr_spec;
+ roughness = sqrt(roughness);
+ vec3 refr_color = (refractionDepth > 0.0) ? color.rgb * color.rgb : color.rgb; /* Simulate 2 transmission event */
+ eevee_closure_glass(N, vec3(1.0), int(ssr_id), roughness, 1.0, ior, out_spec, out_refr, ssr_spec);
+ out_refr *= refr_color;
+ out_spec *= color.rgb;
+ float fresnel = F_eta(ior, dot(N, cameraVec));
+ vec3 vN = normalize(mat3(ViewMatrix) * N);
+ result = CLOSURE_DEFAULT;
+ result.radiance = mix(out_refr, out_spec, fresnel);
+ result.ssr_data = vec4(ssr_spec * color.rgb * fresnel, roughness);
+ result.ssr_normal = normal_encode(vN, viewCameraVec);
+ result.ssr_id = int(ssr_id);
+#else
node_bsdf_diffuse(color, 0.0, N, result);
+#endif
}
-void node_bsdf_toon(vec4 color, float size, float tsmooth, vec3 N, out vec4 result)
+void node_bsdf_toon(vec4 color, float size, float tsmooth, vec3 N, out Closure result)
{
node_bsdf_diffuse(color, 0.0, N, result);
}
+#ifndef EEVEE_ENGINE
void node_bsdf_principled(vec4 base_color, float subsurface, vec3 subsurface_radius, vec4 subsurface_color, float metallic, float specular,
float specular_tint, float roughness, float anisotropic, float anisotropic_rotation, float sheen, float sheen_tint, float clearcoat,
- float clearcoat_roughness, float ior, float transmission, float transmission_roughness, vec3 N, vec3 CN, vec3 T, vec3 I, out vec4 result)
+ float clearcoat_roughness, float ior, float transmission, float transmission_roughness, vec3 N, vec3 CN, vec3 T, vec3 I, out Closure result)
{
+ vec3 X, Y;
+ float ax, ay;
+ prepare_tangent(anisotropic, anisotropic_rotation, roughness, N, T, X, Y, ax, ay);
+
/* ambient light */
// TODO: set ambient light to an appropriate value
vec3 L = mix(0.1, 0.03, metallic) * mix(base_color.rgb, subsurface_color.rgb, subsurface * (1.0 - metallic));
@@ -2633,28 +2775,7 @@ void node_bsdf_principled(vec4 base_color, float subsurface, vec3 subsurface_rad
float eta = (2.0 / (1.0 - sqrt(0.08 * specular))) - 1.0;
/* set the viewing vector */
- vec3 V = (gl_ProjectionMatrix[3][3] == 0.0) ? -normalize(I) : vec3(0.0, 0.0, 1.0);
-
- /* get the tangent */
- vec3 Tangent = T;
- if (T == vec3(0.0)) {
- // if no tangent is set, use a default tangent
- if(N.x != N.y || N.x != N.z) {
- Tangent = vec3(N.z-N.y, N.x-N.z, N.y-N.x); // (1,1,1) x N
- }
- else {
- Tangent = vec3(N.z-N.y, N.x+N.z, -N.y-N.x); // (-1,1,1) x N
- }
- }
-
- /* rotate tangent */
- if (anisotropic_rotation != 0.0) {
- Tangent = rotate_vector(Tangent, N, anisotropic_rotation * 2.0 * M_PI);
- }
-
- /* calculate the tangent and bitangent */
- vec3 Y = normalize(cross(N, Tangent));
- vec3 X = cross(Y, N);
+ vec3 V = (ProjectionMatrix[3][3] == 0.0) ? -normalize(I) : vec3(0.0, 0.0, 1.0);
/* fresnel normalization parameters */
float F0 = fresnel_dielectric_0(eta);
@@ -2662,13 +2783,13 @@ void node_bsdf_principled(vec4 base_color, float subsurface, vec3 subsurface_rad
/* directional lights */
for (int i = 0; i < NUM_LIGHTS; i++) {
- vec3 light_position_world = gl_LightSource[i].position.xyz;
+ vec3 light_position_world = glLightSource[i].position.xyz;
vec3 light_position = normalize(light_position_world);
vec3 H = normalize(light_position + V);
- vec3 light_diffuse = gl_LightSource[i].diffuse.rgb;
- vec3 light_specular = gl_LightSource[i].specular.rgb;
+ vec3 light_diffuse = glLightSource[i].diffuse.rgb;
+ vec3 light_specular = glLightSource[i].specular.rgb;
float NdotL = dot(N, light_position);
float NdotV = dot(N, V);
@@ -2678,7 +2799,7 @@ void node_bsdf_principled(vec4 base_color, float subsurface, vec3 subsurface_rad
if (NdotL >= 0.0 && NdotV >= 0.0) {
float NdotH = dot(N, H);
- float Cdlum = 0.3 * base_color.r + 0.6 * base_color.g + 0.1 * base_color.b; // luminance approx.
+ float Cdlum = dot(base_color.rgb, vec3(0.3, 0.6, 0.1)); // luminance approx.
vec3 Ctint = Cdlum > 0 ? base_color.rgb / Cdlum : vec3(1.0); // normalize lum. to isolate hue+sat
vec3 Cspec0 = mix(specular * 0.08 * mix(vec3(1.0), Ctint, specular_tint), base_color.rgb, metallic);
@@ -2699,10 +2820,6 @@ void node_bsdf_principled(vec4 base_color, float subsurface, vec3 subsurface_rad
float ss = 1.25 * (Fss * (1.0 / (NdotL + NdotV) - 0.5) + 0.5);
// specular
- float aspect = sqrt(1.0 - anisotropic * 0.9);
- float a = sqr(roughness);
- float ax = max(0.001, a / aspect);
- float ay = max(0.001, a * aspect);
float Ds = GTR2_aniso(NdotH, dot(H, X), dot(H, Y), ax, ay); //GTR2(NdotH, a);
float FH = (fresnel_dielectric_cos(LdotH, eta) - F0) * F0_norm;
vec3 Fs = mix(Cspec0, vec3(1.0), FH);
@@ -2738,83 +2855,234 @@ void node_bsdf_principled(vec4 base_color, float subsurface, vec3 subsurface_rad
L += diffuse_and_specular_bsdf + clearcoat_bsdf;
}
- result = vec4(L, 1.0);
+ result = Closure(L, 1.0);
}
+#endif
-void node_bsdf_translucent(vec4 color, vec3 N, out vec4 result)
+void node_bsdf_principled_clearcoat(vec4 base_color, float subsurface, vec3 subsurface_radius, vec4 subsurface_color, float metallic, float specular,
+ float specular_tint, float roughness, float anisotropic, float anisotropic_rotation, float sheen, float sheen_tint, float clearcoat,
+ float clearcoat_roughness, float ior, float transmission, float transmission_roughness, vec3 N, vec3 CN, vec3 T, vec3 I, float ssr_id,
+ float sss_id, vec3 sss_scale, out Closure result)
{
- node_bsdf_diffuse(color, 0.0, N, result);
+#ifdef EEVEE_ENGINE
+ metallic = saturate(metallic);
+ transmission = saturate(transmission);
+
+ vec3 diffuse, f0, out_diff, out_spec, out_trans, out_refr, ssr_spec;
+ convert_metallic_to_specular_tinted(base_color.rgb, metallic, specular, specular_tint, diffuse, f0);
+
+ transmission *= 1.0 - metallic;
+ subsurface *= 1.0 - metallic;
+
+ clearcoat *= 0.25;
+ clearcoat *= 1.0 - transmission;
+
+#ifdef USE_SSS
+ diffuse = mix(diffuse, vec3(0.0), subsurface);
+#else
+ diffuse = mix(diffuse, subsurface_color.rgb, subsurface);
+#endif
+ f0 = mix(f0, vec3(1.0), transmission);
+
+ float sss_scalef = dot(sss_scale, vec3(1.0 / 3.0));
+ eevee_closure_principled(N, diffuse, f0, int(ssr_id), roughness,
+ CN, clearcoat, clearcoat_roughness, 1.0, sss_scalef, ior,
+ out_diff, out_trans, out_spec, out_refr, ssr_spec);
+
+ vec3 refr_color = base_color.rgb;
+ refr_color *= (refractionDepth > 0.0) ? refr_color : vec3(1.0); /* Simulate 2 transmission event */
+
+ float fresnel = F_eta(ior, dot(N, cameraVec));
+ vec3 refr_spec_color = base_color.rgb * fresnel;
+ /* This bit maybe innacurate. */
+ out_refr = out_refr * refr_color * (1.0 - fresnel) + out_spec * refr_spec_color;
+
+ ssr_spec = mix(ssr_spec, refr_spec_color, transmission);
+
+ vec3 vN = normalize(mat3(ViewMatrix) * N);
+ result = CLOSURE_DEFAULT;
+ result.radiance = out_spec + out_diff * diffuse;
+ result.radiance = mix(result.radiance, out_refr, transmission);
+ result.ssr_data = vec4(ssr_spec, roughness);
+ result.ssr_normal = normal_encode(vN, viewCameraVec);
+ result.ssr_id = int(ssr_id);
+#ifdef USE_SSS
+ result.sss_data.a = sss_scalef;
+ result.sss_data.rgb = out_diff + out_trans;
+#ifdef USE_SSS_ALBEDO
+ result.sss_albedo.rgb = mix(vec3(0.0), subsurface_color.rgb, subsurface);
+#else
+ result.sss_data.rgb *= mix(vec3(0.0), subsurface_color.rgb, subsurface);
+#endif
+ result.sss_data.rgb *= (1.0 - transmission);
+#endif
+
+#else
+ node_bsdf_principled(base_color, subsurface, subsurface_radius, subsurface_color, metallic, specular,
+ specular_tint, roughness, anisotropic, anisotropic_rotation, sheen, sheen_tint, clearcoat,
+ clearcoat_roughness, ior, transmission, transmission_roughness, N, CN, T, I, result);
+#endif
+}
+
+void node_bsdf_translucent(vec4 color, vec3 N, out Closure result)
+{
+ node_bsdf_diffuse(color, 0.0, -N, result);
}
-void node_bsdf_transparent(vec4 color, out vec4 result)
+void node_bsdf_transparent(vec4 color, out Closure result)
{
/* this isn't right */
- result.r = color.r;
- result.g = color.g;
- result.b = color.b;
- result.a = 0.0;
+ result = CLOSURE_DEFAULT;
+ result.radiance = vec3(0.0);
+ result.opacity = 0.0;
+#ifdef EEVEE_ENGINE
+ result.ssr_id = TRANSPARENT_CLOSURE_FLAG;
+#endif
}
-void node_bsdf_velvet(vec4 color, float sigma, vec3 N, out vec4 result)
+void node_bsdf_velvet(vec4 color, float sigma, vec3 N, out Closure result)
{
node_bsdf_diffuse(color, 0.0, N, result);
}
void node_subsurface_scattering(
- vec4 color, float scale, vec3 radius, float sharpen, float texture_blur, vec3 N,
- out vec4 result)
-{
+ vec4 color, float scale, vec3 radius, float sharpen, float texture_blur, vec3 N, float sss_id,
+ out Closure result)
+{
+#if defined(EEVEE_ENGINE) && defined(USE_SSS)
+ vec3 out_diff, out_trans;
+ vec3 vN = normalize(mat3(ViewMatrix) * N);
+ result = CLOSURE_DEFAULT;
+ result.ssr_data = vec4(0.0);
+ result.ssr_normal = normal_encode(vN, viewCameraVec);
+ result.ssr_id = -1;
+ result.sss_data.a = scale;
+ eevee_closure_subsurface(N, color.rgb, 1.0, scale, out_diff, out_trans);
+ result.sss_data.rgb = out_diff + out_trans;
+#ifdef USE_SSS_ALBEDO
+ /* Not perfect for texture_blur not exaclty equal to 0.0 or 1.0. */
+ result.sss_albedo.rgb = mix(color.rgb, vec3(1.0), texture_blur);
+ result.sss_data.rgb *= mix(vec3(1.0), color.rgb, texture_blur);
+#else
+ result.sss_data.rgb *= color.rgb;
+#endif
+#else
node_bsdf_diffuse(color, 0.0, N, result);
+#endif
}
-void node_bsdf_hair(vec4 color, float offset, float roughnessu, float roughnessv, vec3 tangent, out vec4 result)
+void node_bsdf_refraction(vec4 color, float roughness, float ior, vec3 N, out Closure result)
{
- result = color;
+#ifdef EEVEE_ENGINE
+ vec3 out_refr;
+ color.rgb *= (refractionDepth > 0.0) ? color.rgb : vec3(1.0); /* Simulate 2 absorption event. */
+ roughness = sqrt(roughness);
+ eevee_closure_refraction(N, roughness, ior, out_refr);
+ vec3 vN = normalize(mat3(ViewMatrix) * N);
+ result = CLOSURE_DEFAULT;
+ result.ssr_normal = normal_encode(vN, viewCameraVec);
+ result.radiance = out_refr * color.rgb;
+ result.ssr_id = REFRACT_CLOSURE_FLAG;
+#else
+ node_bsdf_diffuse(color, 0.0, N, result);
+#endif /* EEVEE_ENGINE */
}
-void node_bsdf_refraction(vec4 color, float roughness, float ior, vec3 N, out vec4 result)
+/* Unsupported for now */
+#ifndef EEVEE_ENGINE
+void node_bsdf_hair(vec4 color, float offset, float roughnessu, float roughnessv, vec3 tangent, out Closure result)
{
- node_bsdf_diffuse(color, 0.0, N, result);
+ result = Closure(color.rgb, color.a);
}
-void node_ambient_occlusion(vec4 color, out vec4 result)
+void node_ambient_occlusion(vec4 color, out Closure result)
{
- result = color;
+ result = Closure(color.rgb, color.a);
}
+#endif /* EEVEE_ENGINE */
+
+#endif /* VOLUMETRICS */
/* emission */
-void node_emission(vec4 color, float strength, vec3 N, out vec4 result)
+void node_emission(vec4 color, float strength, vec3 vN, out Closure result)
{
- result = color * strength;
+#ifndef VOLUMETRICS
+ color *= strength;
+#ifdef EEVEE_ENGINE
+ result = CLOSURE_DEFAULT;
+ result.radiance = color.rgb;
+ result.opacity = color.a;
+ result.ssr_normal = normal_encode(vN, viewCameraVec);
+#else
+ result = Closure(color.rgb, color.a);
+#endif
+#else
+ result = Closure(vec3(0.0), vec3(0.0), color.rgb * strength, 0.0);
+#endif
}
/* background */
void background_transform_to_world(vec3 viewvec, out vec3 worldvec)
{
- vec4 v = (gl_ProjectionMatrix[3][3] == 0.0) ? vec4(viewvec, 1.0) : vec4(0.0, 0.0, 1.0, 1.0);
- vec4 co_homogenous = (gl_ProjectionMatrixInverse * v);
+ vec4 v = (ProjectionMatrix[3][3] == 0.0) ? vec4(viewvec, 1.0) : vec4(0.0, 0.0, 1.0, 1.0);
+ vec4 co_homogenous = (ProjectionMatrixInverse * v);
vec4 co = vec4(co_homogenous.xyz / co_homogenous.w, 0.0);
- worldvec = (gl_ModelViewMatrixInverse * co).xyz;
+#if defined(WORLD_BACKGROUND) || defined(PROBE_CAPTURE)
+ worldvec = (ViewMatrixInverse * co).xyz;
+#else
+ worldvec = (ModelViewMatrixInverse * co).xyz;
+#endif
+}
+
+void node_background(vec4 color, float strength, out Closure result)
+{
+#ifndef VOLUMETRICS
+ color *= strength;
+#ifdef EEVEE_ENGINE
+ result = CLOSURE_DEFAULT;
+ result.radiance = color.rgb;
+ result.opacity = color.a;
+#else
+ result = Closure(color.rgb, color.a);
+#endif
+#else
+ result = CLOSURE_DEFAULT;
+#endif
+}
+
+/* volumes */
+
+void node_volume_scatter(vec4 color, float density, float anisotropy, out Closure result)
+{
+#ifdef VOLUMETRICS
+ result = Closure(vec3(0.0), color.rgb * density, vec3(0.0), anisotropy);
+#else
+ result = CLOSURE_DEFAULT;
+#endif
}
-void node_background(vec4 color, float strength, vec3 N, out vec4 result)
+void node_volume_absorption(vec4 color, float density, out Closure result)
{
- result = color * strength;
+#ifdef VOLUMETRICS
+ result = Closure((1.0 - color.rgb) * density, vec3(0.0), vec3(0.0), 0.0);
+#else
+ result = CLOSURE_DEFAULT;
+#endif
}
/* closures */
-void node_mix_shader(float fac, vec4 shader1, vec4 shader2, out vec4 shader)
+void node_mix_shader(float fac, Closure shader1, Closure shader2, out Closure shader)
{
- shader = mix(shader1, shader2, fac);
+ shader = closure_mix(shader1, shader2, fac);
}
-void node_add_shader(vec4 shader1, vec4 shader2, out vec4 shader)
+void node_add_shader(Closure shader1, Closure shader2, out Closure shader)
{
- shader = shader1 + shader2;
+ shader = closure_add(shader1, shader2);
}
/* fresnel */
@@ -2822,7 +3090,7 @@ void node_add_shader(vec4 shader1, vec4 shader2, out vec4 shader)
void node_fresnel(float ior, vec3 N, vec3 I, out float result)
{
/* handle perspective/orthographic */
- vec3 I_view = (gl_ProjectionMatrix[3][3] == 0.0) ? normalize(I) : vec3(0.0, 0.0, -1.0);
+ vec3 I_view = (ProjectionMatrix[3][3] == 0.0) ? normalize(I) : vec3(0.0, 0.0, -1.0);
float eta = max(ior, 0.00001);
result = fresnel_dielectric(I_view, N, (gl_FrontFacing) ? eta : 1.0 / eta);
@@ -2834,7 +3102,7 @@ void node_layer_weight(float blend, vec3 N, vec3 I, out float fresnel, out float
{
/* fresnel */
float eta = max(1.0 - blend, 0.00001);
- vec3 I_view = (gl_ProjectionMatrix[3][3] == 0.0) ? normalize(I) : vec3(0.0, 0.0, -1.0);
+ vec3 I_view = (ProjectionMatrix[3][3] == 0.0) ? normalize(I) : vec3(0.0, 0.0, -1.0);
fresnel = fresnel_dielectric(I_view, N, (gl_FrontFacing) ? 1.0 / eta : eta);
@@ -2864,11 +3132,47 @@ void node_gamma(vec4 col, float gamma, out vec4 outcol)
/* geometry */
+void node_attribute_volume_density(sampler3D tex, out vec4 outcol, out vec3 outvec, out float outf)
+{
+#if defined(EEVEE_ENGINE) && defined(MESH_SHADER) && defined(VOLUMETRICS)
+ vec3 cos = volumeObjectLocalCoord;
+#else
+ vec3 cos = vec3(0.0);
+#endif
+ outvec = texture(tex, cos).aaa;
+ outcol = vec4(outvec, 1.0);
+ outf = dot(vec3(1.0 / 3.0), outvec);
+}
+
+void node_attribute_volume_color(sampler3D tex, out vec4 outcol, out vec3 outvec, out float outf)
+{
+#if defined(EEVEE_ENGINE) && defined(MESH_SHADER) && defined(VOLUMETRICS)
+ vec3 cos = volumeObjectLocalCoord;
+#else
+ vec3 cos = vec3(0.0);
+#endif
+ outvec = texture(tex, cos).rgb;
+ outcol = vec4(outvec, 1.0);
+ outf = dot(vec3(1.0 / 3.0), outvec);
+}
+
+void node_attribute_volume_flame(sampler3D tex, out vec4 outcol, out vec3 outvec, out float outf)
+{
+#if defined(EEVEE_ENGINE) && defined(MESH_SHADER) && defined(VOLUMETRICS)
+ vec3 cos = volumeObjectLocalCoord;
+#else
+ vec3 cos = vec3(0.0);
+#endif
+ outvec = texture(tex, cos).rrr;
+ outcol = vec4(outvec, 1.0);
+ outf = dot(vec3(1.0 / 3.0), outvec);
+}
+
void node_attribute(vec3 attr, out vec4 outcol, out vec3 outvec, out float outf)
{
outcol = vec4(attr, 1.0);
outvec = attr;
- outf = (attr.x + attr.y + attr.z) / 3.0;
+ outf = dot(vec3(1.0 / 3.0), attr);
}
void node_uvmap(vec3 attr_uv, out vec3 outvec)
@@ -2876,19 +3180,51 @@ void node_uvmap(vec3 attr_uv, out vec3 outvec)
outvec = attr_uv;
}
+void tangent_orco_x(vec3 orco_in, out vec3 orco_out)
+{
+ orco_out = vec3(0.0, (orco_in.z - 0.5) * -0.5, (orco_in.y - 0.5) * 0.5);
+}
+
+void tangent_orco_y(vec3 orco_in, out vec3 orco_out)
+{
+ orco_out = vec3((orco_in.z - 0.5) * -0.5, 0.0, (orco_in.x - 0.5) * 0.5);
+}
+
+void tangent_orco_z(vec3 orco_in, out vec3 orco_out)
+{
+ orco_out = vec3((orco_in.y - 0.5) * -0.5, (orco_in.x - 0.5) * 0.5, 0.0);
+}
+
+void node_tangentmap(vec4 attr_tangent, mat4 toworld, out vec3 tangent)
+{
+ tangent = (toworld * vec4(attr_tangent.xyz, 0.0)).xyz;
+}
+
+void node_tangent(vec3 N, vec3 orco, mat4 objmat, mat4 toworld, out vec3 T)
+{
+ N = (toworld * vec4(N, 0.0)).xyz;
+ T = (objmat * vec4(orco, 0.0)).xyz;
+ T = cross(N, normalize(cross(T, N)));
+}
+
void node_geometry(
- vec3 I, vec3 N, mat4 toworld,
+ vec3 I, vec3 N, vec3 orco, mat4 objmat, mat4 toworld,
out vec3 position, out vec3 normal, out vec3 tangent,
out vec3 true_normal, out vec3 incoming, out vec3 parametric,
out float backfacing, out float pointiness)
{
+#ifdef EEVEE_ENGINE
+ position = worldPosition;
+#else
position = (toworld * vec4(I, 1.0)).xyz;
+#endif
normal = (toworld * vec4(N, 0.0)).xyz;
- tangent = vec3(0.0);
+ tangent_orco_z(orco, orco);
+ node_tangent(N, orco, objmat, toworld, tangent);
true_normal = normal;
/* handle perspective/orthographic */
- vec3 I_view = (gl_ProjectionMatrix[3][3] == 0.0) ? normalize(I) : vec3(0.0, 0.0, -1.0);
+ vec3 I_view = (ProjectionMatrix[3][3] == 0.0) ? normalize(I) : vec3(0.0, 0.0, -1.0);
incoming = -(toworld * vec4(I_view, 0.0)).xyz;
parametric = vec3(0.0);
@@ -2902,12 +3238,12 @@ void node_tex_coord(
out vec3 generated, out vec3 normal, out vec3 uv, out vec3 object,
out vec3 camera, out vec3 window, out vec3 reflection)
{
- generated = attr_orco * 0.5 + vec3(0.5);
+ generated = attr_orco;
normal = normalize((obinvmat * (viewinvmat * vec4(N, 0.0))).xyz);
uv = attr_uv;
object = (obinvmat * (viewinvmat * vec4(I, 1.0))).xyz;
camera = vec3(I.xy, -I.z);
- vec4 projvec = gl_ProjectionMatrix * vec4(I, 1.0);
+ vec4 projvec = ProjectionMatrix * vec4(I, 1.0);
window = vec3(mtex_2d_mapping(projvec.xyz / projvec.w).xy * camerafac.xy + camerafac.zw, 0.0);
vec3 shade_I;
@@ -2922,13 +3258,18 @@ void node_tex_coord_background(
out vec3 generated, out vec3 normal, out vec3 uv, out vec3 object,
out vec3 camera, out vec3 window, out vec3 reflection)
{
- vec4 v = (gl_ProjectionMatrix[3][3] == 0.0) ? vec4(I, 1.0) : vec4(0.0, 0.0, 1.0, 1.0);
- vec4 co_homogenous = (gl_ProjectionMatrixInverse * v);
+ vec4 v = (ProjectionMatrix[3][3] == 0.0) ? vec4(I, 1.0) : vec4(0.0, 0.0, 1.0, 1.0);
+ vec4 co_homogenous = (ProjectionMatrixInverse * v);
vec4 co = vec4(co_homogenous.xyz / co_homogenous.w, 0.0);
co = normalize(co);
- vec3 coords = (gl_ModelViewMatrixInverse * co).xyz;
+
+#if defined(WORLD_BACKGROUND) || defined(PROBE_CAPTURE)
+ vec3 coords = (ViewMatrixInverse * co).xyz;
+#else
+ vec3 coords = (ModelViewMatrixInverse * co).xyz;
+#endif
generated = coords;
normal = -coords;
@@ -2936,13 +3277,17 @@ void node_tex_coord_background(
object = coords;
camera = vec3(co.xy, -co.z);
- window = (gl_ProjectionMatrix[3][3] == 0.0) ?
+ window = (ProjectionMatrix[3][3] == 0.0) ?
vec3(mtex_2d_mapping(I).xy * camerafac.xy + camerafac.zw, 0.0) :
vec3(vec2(0.5) * camerafac.xy + camerafac.zw, 0.0);
reflection = -coords;
}
+#if defined(WORLD_BACKGROUND) || (defined(PROBE_CAPTURE) && !defined(MESH_SHADER))
+#define node_tex_coord node_tex_coord_background
+#endif
+
/* textures */
float calc_gradient(vec3 p, int gradient_type)
@@ -3012,7 +3357,6 @@ void node_tex_checker(vec3 co, vec4 color1, vec4 color2, float scale, out vec4 c
fac = check ? 1.0 : 0.0;
}
-#ifdef BIT_OPERATIONS
vec2 calc_brick_texture(vec3 p, float mortar_size, float mortar_smooth, float bias,
float brick_width, float row_height,
float offset_amount, int offset_frequency,
@@ -3048,7 +3392,6 @@ vec2 calc_brick_texture(vec3 p, float mortar_size, float mortar_smooth, float bi
return vec2(tint, smoothstep(0.0, mortar_smooth, min_dist));
}
}
-#endif
void node_tex_brick(vec3 co,
vec4 color1, vec4 color2,
@@ -3059,7 +3402,6 @@ void node_tex_brick(vec3 co,
float squash_amount, float squash_frequency,
out vec4 color, out float fac)
{
-#ifdef BIT_OPERATIONS
vec2 f2 = calc_brick_texture(co * scale,
mortar_size, mortar_smooth, bias,
brick_width, row_height,
@@ -3073,10 +3415,6 @@ void node_tex_brick(vec3 co,
}
color = mix(color1, mortar, f);
fac = f;
-#else
- color = vec4(1.0);
- fac = 1.0;
-#endif
}
void node_tex_clouds(vec3 co, float size, out vec4 color, out float fac)
@@ -3091,7 +3429,15 @@ void node_tex_environment_equirectangular(vec3 co, sampler2D ima, out vec4 color
float u = -atan(nco.y, nco.x) / (2.0 * M_PI) + 0.5;
float v = atan(nco.z, hypot(nco.x, nco.y)) / M_PI + 0.5;
- color = texture2D(ima, vec2(u, v));
+ /* Fix pole bleeding */
+ float half_width = 0.5 / float(textureSize(ima, 0).x);
+ v = clamp(v, half_width, 1.0 - half_width);
+
+ /* Fix u = 0 seam */
+ /* This is caused by texture filtering, since uv don't have smooth derivatives
+ * at u = 0 or 2PI, hardware filtering is using the smallest mipmap for certain
+ * texels. So we force the highest mipmap and don't do anisotropic filtering. */
+ color = textureLod(ima, vec2(u, v), 0.0);
}
void node_tex_environment_mirror_ball(vec3 co, sampler2D ima, out vec4 color)
@@ -3107,7 +3453,7 @@ void node_tex_environment_mirror_ball(vec3 co, sampler2D ima, out vec4 color)
float u = 0.5 * (nco.x + 1.0);
float v = 0.5 * (nco.z + 1.0);
- color = texture2D(ima, vec2(u, v));
+ color = texture(ima, vec2(u, v));
}
void node_tex_environment_empty(vec3 co, out vec4 color)
@@ -3117,7 +3463,7 @@ void node_tex_environment_empty(vec3 co, out vec4 color)
void node_tex_image(vec3 co, sampler2D ima, out vec4 color, out float alpha)
{
- color = texture2D(ima, co.xy);
+ color = texture(ima, co.xy);
alpha = color.a;
}
@@ -3191,21 +3537,21 @@ void node_tex_image_box(vec3 texco,
if(signed_N.x < 0.0) {
uv.x = 1.0 - uv.x;
}
- color += weight.x * texture2D(ima, uv);
+ color += weight.x * texture(ima, uv);
}
if (weight.y > 0.0) {
vec2 uv = texco.xz;
if(signed_N.y > 0.0) {
uv.x = 1.0 - uv.x;
}
- color += weight.y * texture2D(ima, uv);
+ color += weight.y * texture(ima, uv);
}
if (weight.z > 0.0) {
vec2 uv = texco.yx;
if(signed_N.z > 0.0) {
uv.x = 1.0 - uv.x;
}
- color += weight.z * texture2D(ima, uv);
+ color += weight.z * texture(ima, uv);
}
alpha = color.a;
@@ -3278,7 +3624,6 @@ void node_tex_magic(vec3 co, float scale, float distortion, float depth, out vec
fac = (color.x + color.y + color.z) / 3.0;
}
-#ifdef BIT_OPERATIONS
float noise_fade(float t)
{
return t * t * t * (t * (t * 6.0 - 15.0) + 10.0);
@@ -3353,10 +3698,9 @@ float noise_turbulence(vec3 p, float octaves, int hard)
float fscale = 1.0;
float amp = 1.0;
float sum = 0.0;
- int i, n;
octaves = clamp(octaves, 0.0, 16.0);
- n = int(octaves);
- for (i = 0; i <= n; i++) {
+ int n = int(octaves);
+ for (int i = 0; i <= n; i++) {
float t = noise(fscale * p);
if (hard != 0) {
t = abs(2.0 * t - 1.0);
@@ -3366,7 +3710,7 @@ float noise_turbulence(vec3 p, float octaves, int hard)
fscale *= 2.0;
}
float rmd = octaves - floor(octaves);
- if (rmd != 0.0) {
+ if (rmd != 0.0) {
float t = noise(fscale * p);
if (hard != 0) {
t = abs(2.0 * t - 1.0);
@@ -3381,11 +3725,9 @@ float noise_turbulence(vec3 p, float octaves, int hard)
return sum;
}
}
-#endif // BIT_OPERATIONS
void node_tex_noise(vec3 co, float scale, float detail, float distortion, out vec4 color, out float fac)
{
-#ifdef BIT_OPERATIONS
vec3 p = co * scale;
int hard = 0;
if (distortion != 0.0) {
@@ -3401,15 +3743,8 @@ void node_tex_noise(vec3 co, float scale, float detail, float distortion, out ve
noise_turbulence(vec3(p.y, p.x, p.z), detail, hard),
noise_turbulence(vec3(p.y, p.z, p.x), detail, hard),
1);
-#else // BIT_OPERATIONS
- color = vec4(1.0);
- fac = 1.0;
-#endif // BIT_OPERATIONS
}
-
-#ifdef BIT_OPERATIONS
-
/* Musgrave fBm
*
* H: fractal increment parameter
@@ -3425,9 +3760,8 @@ float noise_musgrave_fBm(vec3 p, float H, float lacunarity, float octaves)
float value = 0.0;
float pwr = 1.0;
float pwHL = pow(lacunarity, -H);
- int i;
- for (i = 0; i < int(octaves); i++) {
+ for (int i = 0; i < int(octaves); i++) {
value += snoise(p) * pwr;
pwr *= pwHL;
p *= lacunarity;
@@ -3453,9 +3787,8 @@ float noise_musgrave_multi_fractal(vec3 p, float H, float lacunarity, float octa
float value = 1.0;
float pwr = 1.0;
float pwHL = pow(lacunarity, -H);
- int i;
- for (i = 0; i < int(octaves); i++) {
+ for (int i = 0; i < int(octaves); i++) {
value *= (pwr * snoise(p) + 1.0);
pwr *= pwHL;
p *= lacunarity;
@@ -3481,13 +3814,12 @@ float noise_musgrave_hetero_terrain(vec3 p, float H, float lacunarity, float oct
float value, increment, rmd;
float pwHL = pow(lacunarity, -H);
float pwr = pwHL;
- int i;
/* first unscaled octave of function; later octaves are scaled */
value = offset + snoise(p);
p *= lacunarity;
- for (i = 1; i < int(octaves); i++) {
+ for (int i = 1; i < int(octaves); i++) {
increment = (snoise(p) + offset) * pwr * value;
value += increment;
pwr *= pwHL;
@@ -3516,13 +3848,12 @@ float noise_musgrave_hybrid_multi_fractal(vec3 p, float H, float lacunarity, flo
float result, signal, weight, rmd;
float pwHL = pow(lacunarity, -H);
float pwr = pwHL;
- int i;
result = snoise(p) + offset;
weight = gain * result;
p *= lacunarity;
- for (i = 1; (weight > 0.001f) && (i < int(octaves)); i++) {
+ for (int i = 1; (weight > 0.001f) && (i < int(octaves)); i++) {
if (weight > 1.0)
weight = 1.0;
@@ -3553,14 +3884,13 @@ float noise_musgrave_ridged_multi_fractal(vec3 p, float H, float lacunarity, flo
float result, signal, weight;
float pwHL = pow(lacunarity, -H);
float pwr = pwHL;
- int i;
signal = offset - abs(snoise(p));
signal *= signal;
result = signal;
weight = 1.0;
- for (i = 1; i < int(octaves); i++) {
+ for (int i = 1; i < int(octaves); i++) {
p *= lacunarity;
weight = clamp(signal * gain, 0.0, 1.0);
signal = offset - abs(snoise(p));
@@ -3582,19 +3912,18 @@ float svm_musgrave(int type,
float gain,
vec3 p)
{
- if (type == 0 /*NODE_MUSGRAVE_MULTIFRACTAL*/)
+ if (type == 0 /* NODE_MUSGRAVE_MULTIFRACTAL */)
return intensity * noise_musgrave_multi_fractal(p, dimension, lacunarity, octaves);
- else if (type == 1 /*NODE_MUSGRAVE_FBM*/)
+ else if (type == 1 /* NODE_MUSGRAVE_FBM */)
return intensity * noise_musgrave_fBm(p, dimension, lacunarity, octaves);
- else if (type == 2 /*NODE_MUSGRAVE_HYBRID_MULTIFRACTAL*/)
+ else if (type == 2 /* NODE_MUSGRAVE_HYBRID_MULTIFRACTAL */)
return intensity * noise_musgrave_hybrid_multi_fractal(p, dimension, lacunarity, octaves, offset, gain);
- else if (type == 3 /*NODE_MUSGRAVE_RIDGED_MULTIFRACTAL*/)
+ else if (type == 3 /* NODE_MUSGRAVE_RIDGED_MULTIFRACTAL */)
return intensity * noise_musgrave_ridged_multi_fractal(p, dimension, lacunarity, octaves, offset, gain);
- else if (type == 4 /*NODE_MUSGRAVE_HETERO_TERRAIN*/)
+ else if (type == 4 /* NODE_MUSGRAVE_HETERO_TERRAIN */)
return intensity * noise_musgrave_hetero_terrain(p, dimension, lacunarity, octaves, offset);
return 0.0;
}
-#endif // #ifdef BIT_OPERATIONS
void node_tex_musgrave(vec3 co,
float scale,
@@ -3607,7 +3936,6 @@ void node_tex_musgrave(vec3 co,
out vec4 color,
out float fac)
{
-#ifdef BIT_OPERATIONS
fac = svm_musgrave(int(type),
dimension,
lacunarity,
@@ -3616,9 +3944,6 @@ void node_tex_musgrave(vec3 co,
1.0,
gain,
co * scale);
-#else
- fac = 1.0;
-#endif
color = vec4(fac, fac, fac, 1.0);
}
@@ -3630,7 +3955,6 @@ void node_tex_sky(vec3 co, out vec4 color)
void node_tex_voronoi(vec3 co, float scale, float coloring, out vec4 color, out float fac)
{
-#ifdef BIT_OPERATIONS
vec3 p = co * scale;
int xx, yy, zz, xi, yi, zi;
float da[4];
@@ -3695,13 +4019,8 @@ void node_tex_voronoi(vec3 co, float scale, float coloring, out vec4 color, out
color = vec4(cellnoise_color(pa[0]), 1);
fac = (color.x + color.y + color.z) * (1.0 / 3.0);
}
-#else // BIT_OPERATIONS
- color = vec4(1.0);
- fac = 1.0;
-#endif // BIT_OPERATIONS
}
-#ifdef BIT_OPERATIONS
float calc_wave(vec3 p, float distortion, float detail, float detail_scale, int wave_type, int wave_profile)
{
float n;
@@ -3723,22 +4042,16 @@ float calc_wave(vec3 p, float distortion, float detail, float detail_scale, int
return (n < 0.0) ? n + 1.0 : n;
}
}
-#endif // BIT_OPERATIONS
void node_tex_wave(
vec3 co, float scale, float distortion, float detail, float detail_scale, float wave_type, float wave_profile,
out vec4 color, out float fac)
{
-#ifdef BIT_OPERATIONS
float f;
f = calc_wave(co * scale, distortion, detail, detail_scale, int(wave_type), int(wave_profile));
color = vec4(f, f, f, 1.0);
fac = f;
-#else // BIT_OPERATIONS
- color = vec4(1.0);
- fac = 1;
-#endif // BIT_OPERATIONS
}
/* light path */
@@ -3758,13 +4071,21 @@ void node_light_path(
out float transparent_depth,
out float transmission_depth)
{
+#ifndef PROBE_CAPTURE
is_camera_ray = 1.0;
- is_shadow_ray = 0.0;
- is_diffuse_ray = 0.0;
is_glossy_ray = 0.0;
- is_singular_ray = 0.0;
+ is_diffuse_ray = 0.0;
is_reflection_ray = 0.0;
is_transmission_ray = 0.0;
+#else
+ is_camera_ray = 0.0;
+ is_glossy_ray = 1.0;
+ is_diffuse_ray = 1.0;
+ is_reflection_ray = 1.0;
+ is_transmission_ray = 1.0;
+#endif
+ is_shadow_ray = 0.0;
+ is_singular_ray = 0.0;
ray_length = 1.0;
ray_depth = 1.0;
diffuse_depth = 1.0;
@@ -3863,37 +4184,79 @@ void node_vector_displacement_world(vec4 vector, float midlevel, float scale, ou
/* output */
-void node_output_material(vec4 surface, vec4 volume, vec3 displacement, out vec4 result)
+void node_output_material(Closure surface, Closure volume, vec3 displacement, out Closure result)
{
+#ifdef VOLUMETRICS
+ result = volume;
+#else
result = surface;
+#endif
}
-void node_output_world(vec4 surface, vec4 volume, out vec4 result)
+uniform float backgroundAlpha;
+
+void node_output_world(Closure surface, Closure volume, out Closure result)
{
- result = surface;
+#ifndef VOLUMETRICS
+#ifdef EEVEE_ENGINE
+ result.radiance = surface.radiance;
+ result.opacity = backgroundAlpha;
+#else
+ result = Closure(surface.radiance, backgroundAlpha);
+#endif
+#else
+ result = volume;
+#endif /* VOLUMETRICS */
+}
+
+#ifndef VOLUMETRICS
+/* TODO : clean this ifdef mess */
+/* EEVEE output */
+#ifdef EEVEE_ENGINE
+void world_normals_get(out vec3 N)
+{
+ N = gl_FrontFacing ? worldNormal : -worldNormal;
+}
+
+void node_eevee_specular(
+ vec4 diffuse, vec4 specular, float roughness, vec4 emissive, float transp, vec3 normal,
+ float clearcoat, float clearcoat_roughness, vec3 clearcoat_normal,
+ float occlusion, float ssr_id, out Closure result)
+{
+ vec3 out_diff, out_spec, ssr_spec;
+ eevee_closure_default(normal, diffuse.rgb, specular.rgb, int(ssr_id), roughness, occlusion,
+ out_diff, out_spec, ssr_spec);
+
+ vec3 vN = normalize(mat3(ViewMatrix) * normal);
+ result = CLOSURE_DEFAULT;
+ result.radiance = out_diff * diffuse.rgb + out_spec + emissive.rgb;
+ result.opacity = 1.0 - transp;
+ result.ssr_data = vec4(ssr_spec, roughness);
+ result.ssr_normal = normal_encode(vN, viewCameraVec);
+ result.ssr_id = int(ssr_id);
}
+#endif /* EEVEE_ENGINE */
+#endif /* VOLUMETRICS */
+
/* ********************** matcap style render ******************** */
void material_preview_matcap(vec4 color, sampler2D ima, vec4 N, vec4 mask, out vec4 result)
{
vec3 normal;
- vec2 tex;
#ifndef USE_OPENSUBDIV
/* remap to 0.0 - 1.0 range. This is done because OpenGL 2.0 clamps colors
* between shader stages and we want the full range of the normal */
- normal = vec3(2.0, 2.0, 2.0) * vec3(N.x, N.y, N.z) - vec3(1.0, 1.0, 1.0);
- if (normal.z < 0.0) {
- normal.z = 0.0;
- }
+ normal = 2.0 * N.xyz - vec3(1.0);
+ normal.z = max(normal.z, 0.0);
normal = normalize(normal);
#else
normal = inpt.v.normal;
- mask = vec4(1.0, 1.0, 1.0, 1.0);
+ mask = vec4(1.0);
#endif
- tex.x = 0.5 + 0.49 * normal.x;
- tex.y = 0.5 + 0.49 * normal.y;
- result = texture2D(ima, tex) * mask;
+ vec2 tex = 0.49 * normal.xy + vec2(0.5);
+
+ result = texture(ima, tex) * mask;
}
diff --git a/source/blender/gpu/shaders/gpu_shader_point_uniform_color_aa_frag.glsl b/source/blender/gpu/shaders/gpu_shader_point_uniform_color_aa_frag.glsl
new file mode 100644
index 00000000000..fef81cf58fe
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_point_uniform_color_aa_frag.glsl
@@ -0,0 +1,24 @@
+
+uniform vec4 color;
+
+in vec2 radii;
+out vec4 fragColor;
+
+void main() {
+ float dist = length(gl_PointCoord - vec2(0.5));
+
+// transparent outside of point
+// --- 0 ---
+// smooth transition
+// --- 1 ---
+// pure point color
+// ...
+// dist = 0 at center of point
+
+ fragColor.rgb = color.rgb;
+ fragColor.a = mix(color.a, 0.0, smoothstep(radii[1], radii[0], dist));
+
+ if (fragColor.a == 0.0) {
+ discard;
+ }
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_point_uniform_color_frag.glsl b/source/blender/gpu/shaders/gpu_shader_point_uniform_color_frag.glsl
new file mode 100644
index 00000000000..852c76fcb26
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_point_uniform_color_frag.glsl
@@ -0,0 +1,17 @@
+
+uniform vec4 color;
+
+out vec4 fragColor;
+
+void main()
+{
+ vec2 centered = gl_PointCoord - vec2(0.5);
+ float dist_squared = dot(centered, centered);
+ const float rad_squared = 0.25;
+
+ // round point with jaggy edges
+ if (dist_squared > rad_squared)
+ discard;
+
+ fragColor = color;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_point_uniform_color_outline_aa_frag.glsl b/source/blender/gpu/shaders/gpu_shader_point_uniform_color_outline_aa_frag.glsl
new file mode 100644
index 00000000000..eae5ee633ae
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_point_uniform_color_outline_aa_frag.glsl
@@ -0,0 +1,36 @@
+
+uniform vec4 color;
+uniform vec4 outlineColor;
+
+in vec4 radii;
+out vec4 fragColor;
+
+void main() {
+ float dist = length(gl_PointCoord - vec2(0.5));
+
+// transparent outside of point
+// --- 0 ---
+// smooth transition
+// --- 1 ---
+// pure outline color
+// --- 2 ---
+// smooth transition
+// --- 3 ---
+// pure point color
+// ...
+// dist = 0 at center of point
+
+ float midStroke = 0.5 * (radii[1] + radii[2]);
+
+ if (dist > midStroke) {
+ fragColor.rgb = outlineColor.rgb;
+ fragColor.a = mix(outlineColor.a, 0.0, smoothstep(radii[1], radii[0], dist));
+ }
+ else {
+ fragColor = mix(color, outlineColor, smoothstep(radii[3], radii[2], dist));
+ }
+
+ if (fragColor.a == 0.0) {
+ discard;
+ }
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_point_varying_color_frag.glsl b/source/blender/gpu/shaders/gpu_shader_point_varying_color_frag.glsl
new file mode 100644
index 00000000000..2d2724bb686
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_point_varying_color_frag.glsl
@@ -0,0 +1,16 @@
+
+in vec4 finalColor;
+out vec4 fragColor;
+
+void main()
+{
+ vec2 centered = gl_PointCoord - vec2(0.5);
+ float dist_squared = dot(centered, centered);
+ const float rad_squared = 0.25;
+
+ // round point with jaggy edges
+ if (dist_squared > rad_squared)
+ discard;
+
+ fragColor = finalColor;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_point_varying_color_outline_aa_frag.glsl b/source/blender/gpu/shaders/gpu_shader_point_varying_color_outline_aa_frag.glsl
new file mode 100644
index 00000000000..9b7d4bfc6d6
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_point_varying_color_outline_aa_frag.glsl
@@ -0,0 +1,31 @@
+
+uniform vec4 outlineColor;
+
+in vec4 radii;
+in vec4 fillColor;
+out vec4 fragColor;
+
+void main() {
+ float dist = length(gl_PointCoord - vec2(0.5));
+
+// transparent outside of point
+// --- 0 ---
+// smooth transition
+// --- 1 ---
+// pure outline color
+// --- 2 ---
+// smooth transition
+// --- 3 ---
+// pure fill color
+// ...
+// dist = 0 at center of point
+
+ float midStroke = 0.5 * (radii[1] + radii[2]);
+
+ if (dist > midStroke) {
+ fragColor.rgb = outlineColor.rgb;
+ fragColor.a = mix(outlineColor.a, 0.0, smoothstep(radii[1], radii[0], dist));
+ }
+ else
+ fragColor = mix(fillColor, outlineColor, smoothstep(radii[3], radii[2], dist));
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_sep_gaussian_blur_frag.glsl b/source/blender/gpu/shaders/gpu_shader_sep_gaussian_blur_frag.glsl
index b485d2cce86..78241a798a2 100644
--- a/source/blender/gpu/shaders/gpu_shader_sep_gaussian_blur_frag.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_sep_gaussian_blur_frag.glsl
@@ -1,16 +1,19 @@
uniform vec2 ScaleU;
uniform sampler2D textureSource;
+in vec2 texCoord_interp;
+out vec4 fragColor;
+
void main()
{
vec4 color = vec4(0.0);
- color += texture2D(textureSource, gl_TexCoord[0].st + vec2(-3.0 * ScaleU.x, -3.0 * ScaleU.y)) * 0.015625;
- color += texture2D(textureSource, gl_TexCoord[0].st + vec2(-2.0 * ScaleU.x, -2.0 * ScaleU.y)) * 0.09375;
- color += texture2D(textureSource, gl_TexCoord[0].st + vec2(-1.0 * ScaleU.x, -1.0 * ScaleU.y)) * 0.234375;
- color += texture2D(textureSource, gl_TexCoord[0].st + vec2(0.0, 0.0)) * 0.3125;
- color += texture2D(textureSource, gl_TexCoord[0].st + vec2(1.0 * ScaleU.x, 1.0 * ScaleU.y)) * 0.234375;
- color += texture2D(textureSource, gl_TexCoord[0].st + vec2(2.0 * ScaleU.x, 2.0 * ScaleU.y)) * 0.09375;
- color += texture2D(textureSource, gl_TexCoord[0].st + vec2(3.0 * ScaleU.x, 3.0 * ScaleU.y)) * 0.015625;
+ color += texture(textureSource, texCoord_interp.st + vec2(-3.0 * ScaleU.x, -3.0 * ScaleU.y)) * 0.015625;
+ color += texture(textureSource, texCoord_interp.st + vec2(-2.0 * ScaleU.x, -2.0 * ScaleU.y)) * 0.09375;
+ color += texture(textureSource, texCoord_interp.st + vec2(-1.0 * ScaleU.x, -1.0 * ScaleU.y)) * 0.234375;
+ color += texture(textureSource, texCoord_interp.st + vec2(0.0, 0.0)) * 0.3125;
+ color += texture(textureSource, texCoord_interp.st + vec2(1.0 * ScaleU.x, 1.0 * ScaleU.y)) * 0.234375;
+ color += texture(textureSource, texCoord_interp.st + vec2(2.0 * ScaleU.x, 2.0 * ScaleU.y)) * 0.09375;
+ color += texture(textureSource, texCoord_interp.st + vec2(3.0 * ScaleU.x, 3.0 * ScaleU.y)) * 0.015625;
- gl_FragColor = color;
+ fragColor = color;
}
diff --git a/source/blender/gpu/shaders/gpu_shader_sep_gaussian_blur_vert.glsl b/source/blender/gpu/shaders/gpu_shader_sep_gaussian_blur_vert.glsl
index 5d00108b052..1319e386c65 100644
--- a/source/blender/gpu/shaders/gpu_shader_sep_gaussian_blur_vert.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_sep_gaussian_blur_vert.glsl
@@ -1,6 +1,12 @@
+uniform mat4 ModelViewProjectionMatrix;
+
+in vec2 pos;
+in vec2 uvs;
+out vec2 texCoord_interp;
+
void main()
{
- gl_Position = ftransform();
- gl_TexCoord[0] = gl_MultiTexCoord0;
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 0.0, 1.0);
+ texCoord_interp = uvs;
}
diff --git a/source/blender/gpu/shaders/gpu_shader_simple_lighting_frag.glsl b/source/blender/gpu/shaders/gpu_shader_simple_lighting_frag.glsl
new file mode 100644
index 00000000000..4d7131c4eb1
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_simple_lighting_frag.glsl
@@ -0,0 +1,17 @@
+
+#ifndef USE_INSTANCE_COLOR
+uniform vec4 color;
+#endif
+uniform vec3 light;
+
+in vec3 normal;
+#ifdef USE_INSTANCE_COLOR
+flat in vec4 finalColor;
+# define color finalColor
+#endif
+out vec4 fragColor;
+
+void main()
+{
+ fragColor = color * max(0.0, dot(normalize(normal), light));
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_simple_lighting_smooth_color_alpha_frag.glsl b/source/blender/gpu/shaders/gpu_shader_simple_lighting_smooth_color_alpha_frag.glsl
new file mode 100644
index 00000000000..6b13f408c84
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_simple_lighting_smooth_color_alpha_frag.glsl
@@ -0,0 +1,14 @@
+
+uniform vec3 light;
+uniform float alpha;
+uniform float global;
+
+in vec3 normal;
+in vec4 finalColor;
+out vec4 fragColor;
+
+void main()
+{
+ fragColor = finalColor * (global + (1.0 - global) * max(0.0, dot(normalize(normal), light)));
+ fragColor.a = alpha;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_simple_lighting_smooth_color_frag.glsl b/source/blender/gpu/shaders/gpu_shader_simple_lighting_smooth_color_frag.glsl
new file mode 100644
index 00000000000..58c5f292647
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_simple_lighting_smooth_color_frag.glsl
@@ -0,0 +1,16 @@
+
+uniform vec3 light;
+
+#ifdef USE_FLAT_NORMAL
+flat in vec3 normal;
+flat in vec4 finalColor;
+#else
+in vec3 normal;
+in vec4 finalColor;
+#endif
+out vec4 fragColor;
+
+void main()
+{
+ fragColor = finalColor * max(0.0, dot(normalize(normal), light));
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_smoke_frag.glsl b/source/blender/gpu/shaders/gpu_shader_smoke_frag.glsl
index 6ded453225e..b57bd5b6a37 100644
--- a/source/blender/gpu/shaders/gpu_shader_smoke_frag.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_smoke_frag.glsl
@@ -1,5 +1,6 @@
-varying vec3 coords;
+in vec3 coords;
+out vec4 fragColor;
uniform vec3 active_color;
uniform float step_size;
@@ -16,7 +17,7 @@ uniform sampler3D color_band_texture;
void main()
{
/* compute color and density from volume texture */
- vec4 soot = texture3D(soot_texture, coords);
+ vec4 soot = texture(soot_texture, coords);
#ifndef USE_COBA
vec3 soot_color;
@@ -24,7 +25,7 @@ void main()
soot_color = active_color * soot.rgb / soot.a;
}
else {
- soot_color = vec3(0, 0, 0);
+ soot_color = vec3(0);
}
float soot_density = density_scale * soot.a;
@@ -33,16 +34,14 @@ void main()
float soot_alpha = 1.0 - soot_transmittance;
/* shade */
- float shadow = texture3D(shadow_texture, coords).r;
+ float shadow = texture(shadow_texture, coords).r;
soot_color *= soot_transmittance * shadow;
/* premultiply alpha */
- vec4 color = vec4(soot_alpha * soot_color, soot_alpha);
+ fragColor = vec4(soot_alpha * soot_color, soot_alpha);
#else
- float color_band = texture3D(color_band_texture, coords).r;
- vec4 transfer_function = texture1D(transfer_texture, color_band);
- vec4 color = transfer_function * density_scale;
+ float color_band = texture(color_band_texture, coords).r;
+ vec4 transfer_function = texture(transfer_texture, color_band);
+ fragColor = transfer_function * density_scale;
#endif
-
- gl_FragColor = color;
}
diff --git a/source/blender/gpu/shaders/gpu_shader_smoke_vert.glsl b/source/blender/gpu/shaders/gpu_shader_smoke_vert.glsl
index 297486ae26a..8c30e9baf9e 100644
--- a/source/blender/gpu/shaders/gpu_shader_smoke_vert.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_smoke_vert.glsl
@@ -1,5 +1,7 @@
-varying vec3 coords;
+uniform mat4 ModelViewProjectionMatrix;
+
+out vec3 coords;
uniform vec3 min_location;
uniform vec3 invsize;
@@ -7,6 +9,7 @@ uniform vec3 ob_sizei;
void main()
{
- gl_Position = gl_ModelViewProjectionMatrix * vec4(gl_Vertex.xyz * ob_sizei, 1.0);
+ // TODO: swap gl_Vertex for vec3 pos, update smoke setup code
+ gl_Position = ModelViewProjectionMatrix * vec4(gl_Vertex.xyz * ob_sizei, 1.0);
coords = (gl_Vertex.xyz - min_location) * invsize;
}
diff --git a/source/blender/gpu/shaders/gpu_shader_text_frag.glsl b/source/blender/gpu/shaders/gpu_shader_text_frag.glsl
new file mode 100644
index 00000000000..7ff90ad4f21
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_text_frag.glsl
@@ -0,0 +1,15 @@
+
+flat in vec4 color_flat;
+noperspective in vec2 texCoord_interp;
+out vec4 fragColor;
+
+uniform sampler2D glyph;
+
+void main()
+{
+ // input color replaces texture color
+ fragColor.rgb = color_flat.rgb;
+
+ // modulate input alpha & texture alpha
+ fragColor.a = color_flat.a * texture(glyph, texCoord_interp).r;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_text_vert.glsl b/source/blender/gpu/shaders/gpu_shader_text_vert.glsl
new file mode 100644
index 00000000000..6129f49ce22
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_text_vert.glsl
@@ -0,0 +1,16 @@
+
+uniform mat4 ModelViewProjectionMatrix;
+
+in vec2 pos;
+in vec2 texCoord;
+in vec4 color;
+flat out vec4 color_flat;
+noperspective out vec2 texCoord_interp;
+
+void main()
+{
+ gl_Position = ModelViewProjectionMatrix * vec4(pos, 0.0, 1.0);
+
+ color_flat = color;
+ texCoord_interp = texCoord;
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_uniform_color_frag.glsl b/source/blender/gpu/shaders/gpu_shader_uniform_color_frag.glsl
new file mode 100644
index 00000000000..118a661863d
--- /dev/null
+++ b/source/blender/gpu/shaders/gpu_shader_uniform_color_frag.glsl
@@ -0,0 +1,21 @@
+
+#if defined(USE_COLOR_U32)
+uniform uint color;
+#else
+uniform vec4 color;
+#endif
+
+out vec4 fragColor;
+
+void main()
+{
+#if defined(USE_COLOR_U32)
+ fragColor = vec4(
+ ((color ) & uint(0xFF)) * (1.0f / 255.0f),
+ ((color >> 8) & uint(0xFF)) * (1.0f / 255.0f),
+ ((color >> 16) & uint(0xFF)) * (1.0f / 255.0f),
+ ((color >> 24) ) * (1.0f / 255.0f));
+#else
+ fragColor = color;
+#endif
+}
diff --git a/source/blender/gpu/shaders/gpu_shader_vertex.glsl b/source/blender/gpu/shaders/gpu_shader_vertex.glsl
index db0068d2f3d..4ebd10d514f 100644
--- a/source/blender/gpu/shaders/gpu_shader_vertex.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_vertex.glsl
@@ -1,3 +1,8 @@
+
+uniform mat4 ModelViewMatrix;
+uniform mat4 ProjectionMatrix;
+uniform mat3 NormalMatrix;
+
#ifdef USE_OPENSUBDIV
in vec3 normal;
in vec4 position;
@@ -7,8 +12,8 @@ out block {
} outpt;
#endif
-varying vec3 varposition;
-varying vec3 varnormal;
+out vec3 varposition;
+out vec3 varnormal;
#ifdef CLIP_WORKAROUND
varying float gl_ClipDistance[6];
@@ -89,11 +94,11 @@ void main()
vec3 normal = gl_Normal;
#endif
- vec4 co = gl_ModelViewMatrix * position;
+ vec4 co = ModelViewMatrix * position;
varposition = co.xyz;
- varnormal = normalize(gl_NormalMatrix * normal);
- gl_Position = gl_ProjectionMatrix * co;
+ varnormal = normalize(NormalMatrix * normal);
+ gl_Position = ProjectionMatrix * co;
#ifdef CLIP_WORKAROUND
int i;
diff --git a/source/blender/gpu/shaders/gpu_shader_vertex_world.glsl b/source/blender/gpu/shaders/gpu_shader_vertex_world.glsl
index d45a4b316a8..89a2f391a12 100644
--- a/source/blender/gpu/shaders/gpu_shader_vertex_world.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_vertex_world.glsl
@@ -1,7 +1,6 @@
-varying vec3 varposition;
-varying vec3 varnormal;
-
+out vec3 varposition;
+out vec3 varnormal;
/* Color, keep in sync with: gpu_shader_vertex.glsl */
diff --git a/source/blender/gpu/shaders/gpu_shader_vsm_store_frag.glsl b/source/blender/gpu/shaders/gpu_shader_vsm_store_frag.glsl
index 3761bf350eb..6aad94bbf59 100644
--- a/source/blender/gpu/shaders/gpu_shader_vsm_store_frag.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_vsm_store_frag.glsl
@@ -2,7 +2,8 @@
* This fragment shader was initially found at http://fabiensanglard.net/shadowmappingVSM/index.php
*/
-varying vec4 v_position;
+in vec4 v_position;
+out vec4 fragColor;
void main()
{
@@ -17,5 +18,6 @@ void main()
float dy = dFdy(depth);
moment2 += 0.25 * (dx * dx + dy * dy);
- gl_FragColor = vec4(moment1, moment2, 0.0, 0.0);
+ fragColor = vec4(moment1, moment2, 0.0, 0.0);
+ // TODO: write to a 2-component target --^
}
diff --git a/source/blender/gpu/shaders/gpu_shader_vsm_store_vert.glsl b/source/blender/gpu/shaders/gpu_shader_vsm_store_vert.glsl
index 224c3e78adc..def835156f7 100644
--- a/source/blender/gpu/shaders/gpu_shader_vsm_store_vert.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_vsm_store_vert.glsl
@@ -1,7 +1,10 @@
-varying vec4 v_position;
+
+uniform mat4 ModelViewProjectionMatrix;
+
+out vec4 v_position;
void main()
{
- gl_Position = ftransform();
+ gl_Position = ModelViewProjectionMatrix * gl_Vertex;
v_position = gl_Position;
}
diff --git a/source/blender/ikplugin/BIK_api.h b/source/blender/ikplugin/BIK_api.h
index 177be074897..ad842029941 100644
--- a/source/blender/ikplugin/BIK_api.h
+++ b/source/blender/ikplugin/BIK_api.h
@@ -43,6 +43,7 @@ struct bPoseChannel;
struct bPose;
struct Scene;
struct bConstraint;
+struct EvaluationContext;
enum BIK_ParamType {
BIK_PARAM_TYPE_FLOAT = 0,
@@ -61,8 +62,8 @@ struct BIK_ParamValue {
};
typedef struct BIK_ParamValue BIK_ParamValue;
-void BIK_initialize_tree(struct Scene *scene, struct Object *ob, float ctime);
-void BIK_execute_tree(struct Scene *scene, struct Object *ob, struct bPoseChannel *pchan, float ctime);
+void BIK_initialize_tree(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob, float ctime);
+void BIK_execute_tree(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob, struct bPoseChannel *pchan, float ctime);
void BIK_release_tree(struct Scene *scene, struct Object *ob, float ctime);
void BIK_clear_data(struct bPose *pose);
void BIK_clear_cache(struct bPose *pose);
diff --git a/source/blender/ikplugin/intern/ikplugin_api.c b/source/blender/ikplugin/intern/ikplugin_api.c
index 0f81fb34a63..0ee26ff45f1 100644
--- a/source/blender/ikplugin/intern/ikplugin_api.c
+++ b/source/blender/ikplugin/intern/ikplugin_api.c
@@ -89,20 +89,20 @@ static IKPlugin *get_plugin(bPose *pose)
/*----------------------------------------*/
/* Plugin API */
-void BIK_initialize_tree(Scene *scene, Object *ob, float ctime)
+void BIK_initialize_tree(const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, float ctime)
{
IKPlugin *plugin = get_plugin(ob->pose);
if (plugin && plugin->initialize_tree_func)
- plugin->initialize_tree_func(scene, ob, ctime);
+ plugin->initialize_tree_func(eval_ctx, scene, ob, ctime);
}
-void BIK_execute_tree(struct Scene *scene, Object *ob, bPoseChannel *pchan, float ctime)
+void BIK_execute_tree(const struct EvaluationContext *eval_ctx, struct Scene *scene, Object *ob, bPoseChannel *pchan, float ctime)
{
IKPlugin *plugin = get_plugin(ob->pose);
if (plugin && plugin->execute_tree_func)
- plugin->execute_tree_func(scene, ob, pchan, ctime);
+ plugin->execute_tree_func(eval_ctx, scene, ob, pchan, ctime);
}
void BIK_release_tree(struct Scene *scene, Object *ob, float ctime)
diff --git a/source/blender/ikplugin/intern/ikplugin_api.h b/source/blender/ikplugin/intern/ikplugin_api.h
index cd32bf26242..9a71463ede4 100644
--- a/source/blender/ikplugin/intern/ikplugin_api.h
+++ b/source/blender/ikplugin/intern/ikplugin_api.h
@@ -41,11 +41,12 @@ extern "C" {
struct Object;
struct bPoseChannel;
struct Scene;
+struct EvaluationContext;
struct IKPlugin {
- void (*initialize_tree_func)(struct Scene *scene, struct Object *ob, float ctime);
- void (*execute_tree_func)(struct Scene *scene, struct Object *ob, struct bPoseChannel *pchan, float ctime);
+ void (*initialize_tree_func)(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob, float ctime);
+ void (*execute_tree_func)(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob, struct bPoseChannel *pchan, float ctime);
void (*release_tree_func)(struct Scene *scene, struct Object *ob, float ctime);
void (*remove_armature_func)(struct bPose *pose);
void (*clear_cache)(struct bPose *pose);
diff --git a/source/blender/ikplugin/intern/iksolver_plugin.c b/source/blender/ikplugin/intern/iksolver_plugin.c
index f837789914e..5169b72590c 100644
--- a/source/blender/ikplugin/intern/iksolver_plugin.c
+++ b/source/blender/ikplugin/intern/iksolver_plugin.c
@@ -252,7 +252,7 @@ static void where_is_ik_bone(bPoseChannel *pchan, float ik_mat[3][3]) // nr =
/* called from within the core BKE_pose_where_is loop, all animsystems and constraints
* were executed & assigned. Now as last we do an IK pass */
-static void execute_posetree(struct Scene *scene, Object *ob, PoseTree *tree)
+static void execute_posetree(const struct EvaluationContext *eval_ctx, struct Scene *scene, Object *ob, PoseTree *tree)
{
float R_parmat[3][3], identity[3][3];
float iR_parmat[3][3];
@@ -394,7 +394,7 @@ static void execute_posetree(struct Scene *scene, Object *ob, PoseTree *tree)
/* 1.0=ctime, we pass on object for auto-ik (owner-type here is object, even though
* strictly speaking, it is a posechannel)
*/
- BKE_constraint_target_matrix_get(scene, target->con, 0, CONSTRAINT_OBTYPE_OBJECT, ob, rootmat, 1.0);
+ BKE_constraint_target_matrix_get(eval_ctx, scene, target->con, 0, CONSTRAINT_OBTYPE_OBJECT, ob, rootmat, 1.0);
/* and set and transform goal */
mul_m4_m4m4(goal, goalinv, rootmat);
@@ -405,7 +405,7 @@ static void execute_posetree(struct Scene *scene, Object *ob, PoseTree *tree)
/* same for pole vector target */
if (data->poletar) {
- BKE_constraint_target_matrix_get(scene, target->con, 1, CONSTRAINT_OBTYPE_OBJECT, ob, rootmat, 1.0);
+ BKE_constraint_target_matrix_get(eval_ctx, scene, target->con, 1, CONSTRAINT_OBTYPE_OBJECT, ob, rootmat, 1.0);
if (data->flag & CONSTRAINT_IK_SETANGLE) {
/* don't solve IK when we are setting the pole angle */
@@ -534,7 +534,7 @@ static void free_posetree(PoseTree *tree)
///----------------------------------------
/// Plugin API for legacy iksolver
-void iksolver_initialize_tree(struct Scene *UNUSED(scene), struct Object *ob, float UNUSED(ctime))
+void iksolver_initialize_tree(const struct EvaluationContext *UNUSED(eval_ctx), struct Scene *UNUSED(scene), struct Object *ob, float UNUSED(ctime))
{
bPoseChannel *pchan;
@@ -545,7 +545,7 @@ void iksolver_initialize_tree(struct Scene *UNUSED(scene), struct Object *ob, fl
ob->pose->flag &= ~POSE_WAS_REBUILT;
}
-void iksolver_execute_tree(struct Scene *scene, Object *ob, bPoseChannel *pchan_root, float ctime)
+void iksolver_execute_tree(const struct EvaluationContext *eval_ctx, struct Scene *scene, Object *ob, bPoseChannel *pchan_root, float ctime)
{
while (pchan_root->iktree.first) {
PoseTree *tree = pchan_root->iktree.first;
@@ -558,13 +558,13 @@ void iksolver_execute_tree(struct Scene *scene, Object *ob, bPoseChannel *pchan
/* 4. walk over the tree for regular solving */
for (a = 0; a < tree->totchannel; a++) {
if (!(tree->pchan[a]->flag & POSE_DONE)) // successive trees can set the flag
- BKE_pose_where_is_bone(scene, ob, tree->pchan[a], ctime, 1);
+ BKE_pose_where_is_bone(eval_ctx, scene, ob, tree->pchan[a], ctime, 1);
/* tell blender that this channel was controlled by IK, it's cleared on each BKE_pose_where_is() */
tree->pchan[a]->flag |= POSE_CHAIN;
}
/* 5. execute the IK solver */
- execute_posetree(scene, ob, tree);
+ execute_posetree(eval_ctx, scene, ob, tree);
/* 6. apply the differences to the channels,
* we need to calculate the original differences first */
diff --git a/source/blender/ikplugin/intern/iksolver_plugin.h b/source/blender/ikplugin/intern/iksolver_plugin.h
index 07264280a25..f1ca91ebb49 100644
--- a/source/blender/ikplugin/intern/iksolver_plugin.h
+++ b/source/blender/ikplugin/intern/iksolver_plugin.h
@@ -40,8 +40,11 @@
extern "C" {
#endif
-void iksolver_initialize_tree(struct Scene *scene, struct Object *ob, float ctime);
-void iksolver_execute_tree(struct Scene *scene, struct Object *ob, struct bPoseChannel *pchan_root, float ctime);
+void iksolver_initialize_tree(
+ const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob, float ctime);
+void iksolver_execute_tree(
+ const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob,
+ struct bPoseChannel *pchan_root, float ctime);
#ifdef __cplusplus
}
diff --git a/source/blender/ikplugin/intern/itasc_plugin.cpp b/source/blender/ikplugin/intern/itasc_plugin.cpp
index d58340965a7..93460559067 100644
--- a/source/blender/ikplugin/intern/itasc_plugin.cpp
+++ b/source/blender/ikplugin/intern/itasc_plugin.cpp
@@ -542,7 +542,7 @@ static void GetJointRotation(KDL::Rotation& boneRot, int type, double *rot)
}
}
-static bool target_callback(const iTaSC::Timestamp& timestamp, const iTaSC::Frame& current, iTaSC::Frame& next, void *param)
+static bool target_callback(const struct EvaluationContext *eval_ctx, const iTaSC::Timestamp& timestamp, const iTaSC::Frame& current, iTaSC::Frame& next, void *param)
{
IK_Target *target = (IK_Target *)param;
// compute next target position
@@ -550,7 +550,7 @@ static bool target_callback(const iTaSC::Timestamp& timestamp, const iTaSC::Fram
bConstraint *constraint = (bConstraint *)target->blenderConstraint;
float tarmat[4][4];
- BKE_constraint_target_matrix_get(target->blscene, constraint, 0, CONSTRAINT_OBTYPE_OBJECT, target->owner, tarmat, 1.0);
+ BKE_constraint_target_matrix_get(eval_ctx, target->blscene, constraint, 0, CONSTRAINT_OBTYPE_OBJECT, target->owner, tarmat, 1.0);
// rootmat contains the target pose in world coordinate
// if enforce is != 1.0, blend the target position with the end effector position
@@ -577,7 +577,7 @@ static bool target_callback(const iTaSC::Timestamp& timestamp, const iTaSC::Fram
return true;
}
-static bool base_callback(const iTaSC::Timestamp& timestamp, const iTaSC::Frame& current, iTaSC::Frame& next, void *param)
+static bool base_callback(const struct EvaluationContext *eval_ctx, const iTaSC::Timestamp& timestamp, const iTaSC::Frame& current, iTaSC::Frame& next, void *param)
{
IK_Scene *ikscene = (IK_Scene *)param;
// compute next armature base pose
@@ -619,7 +619,7 @@ static bool base_callback(const iTaSC::Timestamp& timestamp, const iTaSC::Frame&
IK_Channel &rootchan = ikscene->channels[0];
// get polar target matrix in world space
- BKE_constraint_target_matrix_get(ikscene->blscene, ikscene->polarConstraint, 1, CONSTRAINT_OBTYPE_OBJECT, ikscene->blArmature, mat, 1.0);
+ BKE_constraint_target_matrix_get(eval_ctx, ikscene->blscene, ikscene->polarConstraint, 1, CONSTRAINT_OBTYPE_OBJECT, ikscene->blArmature, mat, 1.0);
// convert to armature space
mul_m4_m4m4(polemat, imat, mat);
// get the target in world space (was computed before as target object are defined before base object)
@@ -863,7 +863,7 @@ static bool joint_callback(const iTaSC::Timestamp& timestamp, iTaSC::ConstraintV
}
// build array of joint corresponding to IK chain
-static int convert_channels(IK_Scene *ikscene, PoseTree *tree, float ctime)
+static int convert_channels(const struct EvaluationContext *eval_ctx, IK_Scene *ikscene, PoseTree *tree, float ctime)
{
IK_Channel *ikchan;
bPoseChannel *pchan;
@@ -880,7 +880,7 @@ static int convert_channels(IK_Scene *ikscene, PoseTree *tree, float ctime)
// this is because some of the pose data (e.g. pose head) don't have corresponding
// joint angles and can't be applied to the iTaSC armature dynamically
if (!(pchan->flag & POSE_DONE))
- BKE_pose_where_is_bone(ikscene->blscene, ikscene->blArmature, pchan, ctime, 1);
+ BKE_pose_where_is_bone(eval_ctx, ikscene->blscene, ikscene->blArmature, pchan, ctime, 1);
// tell blender that this channel was controlled by IK, it's cleared on each BKE_pose_where_is()
pchan->flag |= (POSE_DONE | POSE_CHAIN);
@@ -1056,7 +1056,7 @@ static void BKE_pose_rest(IK_Scene *ikscene)
}
}
-static IK_Scene *convert_tree(Scene *blscene, Object *ob, bPoseChannel *pchan, float ctime)
+static IK_Scene *convert_tree(const struct EvaluationContext *eval_ctx, Scene *blscene, Object *ob, bPoseChannel *pchan, float ctime)
{
PoseTree *tree = (PoseTree *)pchan->iktree.first;
PoseTarget *target;
@@ -1134,7 +1134,7 @@ static IK_Scene *convert_tree(Scene *blscene, Object *ob, bPoseChannel *pchan, f
std::vector<double> weights;
double weight[3];
// build the array of joints corresponding to the IK chain
- convert_channels(ikscene, tree, ctime);
+ convert_channels(eval_ctx, ikscene, tree, ctime);
if (ingame) {
// in the GE, set the initial joint angle to match the current pose
// this will update the jointArray in ikscene
@@ -1397,7 +1397,7 @@ static IK_Scene *convert_tree(Scene *blscene, Object *ob, bPoseChannel *pchan, f
// we can now add the armature
// the armature is based on a moving frame.
// initialize with the correct position in case there is no cache
- base_callback(iTaSC::Timestamp(), iTaSC::F_identity, initPose, ikscene);
+ base_callback(eval_ctx, iTaSC::Timestamp(), iTaSC::F_identity, initPose, ikscene);
ikscene->base = new iTaSC::MovingFrame(initPose);
ikscene->base->setCallback(base_callback, ikscene);
std::string armname;
@@ -1458,7 +1458,7 @@ static IK_Scene *convert_tree(Scene *blscene, Object *ob, bPoseChannel *pchan, f
mul_m4_m4m4(iktarget->eeRest, invBaseFrame, mat);
iktarget->eeBlend = (!ikscene->polarConstraint && condata->type == CONSTRAINT_IK_COPYPOSE) ? true : false;
// use target_callback to make sure the initPose includes enforce coefficient
- target_callback(iTaSC::Timestamp(), iTaSC::F_identity, initPose, iktarget);
+ target_callback(eval_ctx, iTaSC::Timestamp(), iTaSC::F_identity, initPose, iktarget);
iktarget->target = new iTaSC::MovingFrame(initPose);
iktarget->target->setCallback(target_callback, iktarget);
ret = scene->addObject(iktarget->targetName, iktarget->target);
@@ -1526,7 +1526,7 @@ static IK_Scene *convert_tree(Scene *blscene, Object *ob, bPoseChannel *pchan, f
return ikscene;
}
-static void create_scene(Scene *scene, Object *ob, float ctime)
+static void create_scene(const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, float ctime)
{
bPoseChannel *pchan;
@@ -1537,7 +1537,7 @@ static void create_scene(Scene *scene, Object *ob, float ctime)
if (tree) {
IK_Data *ikdata = get_ikdata(ob->pose);
// convert tree in iTaSC::Scene
- IK_Scene *ikscene = convert_tree(scene, ob, pchan, ctime);
+ IK_Scene *ikscene = convert_tree(eval_ctx, scene, ob, pchan, ctime);
if (ikscene) {
ikscene->next = ikdata->first;
ikdata->first = ikscene;
@@ -1576,7 +1576,7 @@ static int init_scene(Object *ob)
return 0;
}
-static void execute_scene(Scene *blscene, IK_Scene *ikscene, bItasc *ikparam, float ctime, float frtime)
+static void execute_scene(const struct EvaluationContext *eval_ctx, Scene *blscene, IK_Scene *ikscene, bItasc *ikparam, float ctime, float frtime)
{
int i;
IK_Channel *ikchan;
@@ -1592,7 +1592,7 @@ static void execute_scene(Scene *blscene, IK_Scene *ikscene, bItasc *ikparam, fl
// in animation mode, we must get the bone position from action and constraints
for (i = 0, ikchan = ikscene->channels; i < ikscene->numchan; i++, ++ikchan) {
if (!(ikchan->pchan->flag & POSE_DONE))
- BKE_pose_where_is_bone(blscene, ikscene->blArmature, ikchan->pchan, ctime, 1);
+ BKE_pose_where_is_bone(eval_ctx, blscene, ikscene->blArmature, ikchan->pchan, ctime, 1);
// tell blender that this channel was controlled by IK, it's cleared on each BKE_pose_where_is()
ikchan->pchan->flag |= (POSE_DONE | POSE_CHAIN);
ikchan->jointValid = 0;
@@ -1647,7 +1647,7 @@ static void execute_scene(Scene *blscene, IK_Scene *ikscene, bItasc *ikparam, fl
}
}
// don't cache if we are reiterating because we don't want to destroy the cache unnecessarily
- ikscene->scene->update(timestamp, timestep, numstep, false, !reiterate, simulation);
+ ikscene->scene->update(eval_ctx, timestamp, timestep, numstep, false, !reiterate, simulation);
if (reiterate) {
// how many times do we reiterate?
for (i = 0; i < ikparam->numiter; i++) {
@@ -1656,11 +1656,11 @@ static void execute_scene(Scene *blscene, IK_Scene *ikscene, bItasc *ikparam, fl
{
break;
}
- ikscene->scene->update(timestamp, timestep, numstep, true, false, simulation);
+ ikscene->scene->update(eval_ctx, timestamp, timestep, numstep, true, false, simulation);
}
if (simulation) {
// one more fake iteration to cache
- ikscene->scene->update(timestamp, 0.0, 1, true, true, true);
+ ikscene->scene->update(eval_ctx, timestamp, 0.0, 1, true, true, true);
}
}
// compute constraint error
@@ -1744,7 +1744,7 @@ static void execute_scene(Scene *blscene, IK_Scene *ikscene, bItasc *ikparam, fl
//---------------------------------------------------
// plugin interface
//
-void itasc_initialize_tree(struct Scene *scene, Object *ob, float ctime)
+void itasc_initialize_tree(const struct EvaluationContext *eval_ctx, struct Scene *scene, Object *ob, float ctime)
{
bPoseChannel *pchan;
int count = 0;
@@ -1764,13 +1764,13 @@ void itasc_initialize_tree(struct Scene *scene, Object *ob, float ctime)
// if at least one tree, create the scenes from the PoseTree stored in the channels
// postpone until execute_tree: this way the pose constraint are included
if (count)
- create_scene(scene, ob, ctime);
+ create_scene(eval_ctx, scene, ob, ctime);
itasc_update_param(ob->pose);
// make sure we don't rebuilt until the user changes something important
ob->pose->flag &= ~POSE_WAS_REBUILT;
}
-void itasc_execute_tree(struct Scene *scene, Object *ob, bPoseChannel *pchan_root, float ctime)
+void itasc_execute_tree(const struct EvaluationContext *eval_ctx, struct Scene *scene, Object *ob, bPoseChannel *pchan_root, float ctime)
{
if (ob->pose->ikdata) {
IK_Data *ikdata = (IK_Data *)ob->pose->ikdata;
@@ -1787,7 +1787,7 @@ void itasc_execute_tree(struct Scene *scene, Object *ob, bPoseChannel *pchan_ro
if (timestep > 0.2f)
timestep = 0.2f;
}
- execute_scene(scene, ikscene, ikparam, ctime, timestep);
+ execute_scene(eval_ctx, scene, ikscene, ikparam, ctime, timestep);
break;
}
}
diff --git a/source/blender/ikplugin/intern/itasc_plugin.h b/source/blender/ikplugin/intern/itasc_plugin.h
index bcd95bc31ca..2f4e4036d76 100644
--- a/source/blender/ikplugin/intern/itasc_plugin.h
+++ b/source/blender/ikplugin/intern/itasc_plugin.h
@@ -40,8 +40,8 @@
extern "C" {
#endif
-void itasc_initialize_tree(struct Scene *scene, struct Object *ob, float ctime);
-void itasc_execute_tree(struct Scene *scene, struct Object *ob, struct bPoseChannel *pchan_root, float ctime);
+void itasc_initialize_tree(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob, float ctime);
+void itasc_execute_tree(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob, struct bPoseChannel *pchan_root, float ctime);
void itasc_release_tree(struct Scene *scene, struct Object *ob, float ctime);
void itasc_clear_data(struct bPose *pose);
void itasc_clear_cache(struct bPose *pose);
diff --git a/source/blender/imbuf/intern/thumbs.c b/source/blender/imbuf/intern/thumbs.c
index 3629332a4ac..8c427dff4a3 100644
--- a/source/blender/imbuf/intern/thumbs.c
+++ b/source/blender/imbuf/intern/thumbs.c
@@ -44,10 +44,10 @@
#include "BLI_threads.h"
#include BLI_SYSTEM_PID_H
-#include "BLO_readfile.h"
-
#include "DNA_space_types.h" /* For FILE_MAX_LIBEXTRA */
+#include "BLO_readfile.h"
+
#include "IMB_imbuf_types.h"
#include "IMB_imbuf.h"
#include "IMB_thumbs.h"
diff --git a/source/blender/imbuf/intern/thumbs_blend.c b/source/blender/imbuf/intern/thumbs_blend.c
index b5c6deb6b01..00fb1a44dff 100644
--- a/source/blender/imbuf/intern/thumbs_blend.c
+++ b/source/blender/imbuf/intern/thumbs_blend.c
@@ -32,6 +32,7 @@
#include "BLI_endian_switch.h"
#include "BLI_fileops.h"
#include "BLI_linklist.h"
+#include "BLI_listbase.h" /* Needed due to import of BLO_readfile.h */
#include "BLO_blend_defs.h"
#include "BLO_readfile.h"
diff --git a/source/blender/makesdna/DNA_ID.h b/source/blender/makesdna/DNA_ID.h
index 80640d8dffe..fd8cd8b2855 100644
--- a/source/blender/makesdna/DNA_ID.h
+++ b/source/blender/makesdna/DNA_ID.h
@@ -96,6 +96,17 @@ enum {
IDP_STRING_SUB_BYTE = 1, /* arbitrary byte array, _not_ null terminated */
};
+/* IDP_GROUP */
+enum {
+ IDP_GROUP_SUB_NONE = 0, /* default */
+ IDP_GROUP_SUB_MODE_OBJECT = 1, /* object mode settings */
+ IDP_GROUP_SUB_MODE_EDIT = 2, /* mesh edit mode settings */
+ IDP_GROUP_SUB_ENGINE_RENDER = 3, /* render engine settings */
+ IDP_GROUP_SUB_OVERRIDE = 4, /* data override */
+ IDP_GROUP_SUB_MODE_PAINT_WEIGHT = 5, /* weight paint mode settings */
+ IDP_GROUP_SUB_MODE_PAINT_VERTEX = 6, /* vertex paint mode settings */
+};
+
/*->flag*/
enum {
IDP_FLAG_GHOST = 1 << 7, /* this means the property is set but RNA will return false when checking
@@ -104,6 +115,76 @@ enum {
/* add any future new id property types here.*/
+
+/* Static ID override structs. */
+
+typedef struct IDOverrideStaticPropertyOperation {
+ struct IDOverrideStaticPropertyOperation *next, *prev;
+
+ /* Type of override. */
+ short operation;
+ short flag;
+ short pad_s1[2];
+
+ /* Sub-item references, if needed (for arrays or collections only).
+ * We need both reference and local values to allow e.g. insertion into collections (constraints, modifiers...).
+ * In collection case, if names are defined, they are used in priority.
+ * Names are pointers (instead of char[64]) to save some space, NULL when unset.
+ * Indices are -1 when unset. */
+ char *subitem_reference_name;
+ char *subitem_local_name;
+ int subitem_reference_index;
+ int subitem_local_index;
+} IDOverrideStaticPropertyOperation;
+
+/* IDOverridePropertyOperation->operation. */
+enum {
+ /* Basic operations. */
+ IDOVERRIDESTATIC_OP_NOOP = 0, /* Special value, forbids any overriding. */
+
+ IDOVERRIDESTATIC_OP_REPLACE = 1, /* Fully replace local value by reference one. */
+
+ /* Numeric-only operations. */
+ IDOVERRIDESTATIC_OP_ADD = 101, /* Add local value to reference one. */
+ /* Subtract local value from reference one (needed due to unsigned values etc.). */
+ IDOVERRIDESTATIC_OP_SUBTRACT = 102,
+ /* Multiply reference value by local one (more useful than diff for scales and the like). */
+ IDOVERRIDESTATIC_OP_MULTIPLY = 103,
+
+ /* Collection-only operations. */
+ IDOVERRIDESTATIC_OP_INSERT_AFTER = 201, /* Insert after given reference's subitem. */
+ IDOVERRIDESTATIC_OP_INSERT_BEFORE = 202, /* Insert before given reference's subitem. */
+ /* We can add more if needed (move, delete, ...). */
+};
+
+/* IDOverridePropertyOperation->flag. */
+enum {
+ IDOVERRIDESTATIC_FLAG_MANDATORY = 1 << 0, /* User cannot remove that override operation. */
+ IDOVERRIDESTATIC_FLAG_LOCKED = 1 << 1, /* User cannot change that override operation. */
+};
+
+/* A single overriden property, contain all operations on this one. */
+typedef struct IDOverrideStaticProperty {
+ struct IDOverrideStaticProperty *next, *prev;
+
+ /* Path from ID to overridden property. *Does not* include indices/names for final arrays/collections items. */
+ char *rna_path;
+
+ ListBase operations; /* List of overriding operations (IDOverridePropertyOperation) applied to this property. */
+} IDOverrideStaticProperty;
+
+/* Main container for all overriding data info of a data-block. */
+typedef struct IDOverrideStatic {
+ struct ID *reference; /* Reference linked ID which this one overrides. */
+ ListBase properties; /* List of IDOverrideProperty structs. */
+
+ /* Read/write data. */
+ /* Temp ID storing extra override data (used for differential operations only currently).
+ * Always NULL outside of read/write context. */
+ struct ID *storage;
+} IDOverrideStatic;
+
+
/* watch it: Sequence has identical beginning. */
/**
* ID is the first thing included in all serializable types. It
@@ -134,6 +215,13 @@ typedef struct ID {
int pad;
IDProperty *properties;
+ IDOverrideStatic *override_static; /* Reference linked ID which this one overrides. */
+
+ /* Only set for datablocks which are coming from copy-on-write, points to
+ * the original version of it.
+ */
+ void *orig_id;
+
void *py_instance;
} ID;
@@ -257,6 +345,8 @@ typedef enum ID_Type {
ID_PAL = MAKE_ID2('P', 'L'), /* Palette */
ID_PC = MAKE_ID2('P', 'C'), /* PaintCurve */
ID_CF = MAKE_ID2('C', 'F'), /* CacheFile */
+ ID_WS = MAKE_ID2('W', 'S'), /* WorkSpace */
+ ID_LP = MAKE_ID2('L', 'P'), /* LightProbe */
} ID_Type;
/* Only used as 'placeholder' in .blend files for directly linked datablocks. */
@@ -280,7 +370,7 @@ typedef enum ID_Type {
#define ID_REAL_USERS(id) (((ID *)id)->us - ID_FAKE_USERS(id))
#define ID_EXTRA_USERS(id) (((ID *)id)->tag & LIB_TAG_EXTRAUSER ? 1 : 0)
-#define ID_CHECK_UNDO(id) ((GS((id)->name) != ID_SCR) && (GS((id)->name) != ID_WM))
+#define ID_CHECK_UNDO(id) ((GS((id)->name) != ID_SCR) && (GS((id)->name) != ID_WM) && (GS((id)->name) != ID_WS))
#define ID_BLEND_PATH(_bmain, _id) ((_id)->lib ? (_id)->lib->filepath : (_bmain)->name)
@@ -288,6 +378,12 @@ typedef enum ID_Type {
#define ID_IS_LINKED(_id) (((ID *)(_id))->lib != NULL)
+#define ID_IS_STATIC_OVERRIDE(_id) (((ID *)(_id))->override_static != NULL && \
+ ((ID *)(_id))->override_static->reference != NULL)
+
+#define ID_IS_STATIC_OVERRIDE_TEMPLATE(_id) (((ID *)(_id))->override_static != NULL && \
+ ((ID *)(_id))->override_static->reference == NULL)
+
#ifdef GS
# undef GS
#endif
@@ -299,7 +395,8 @@ typedef enum ID_Type {
/* id->flag (persitent). */
enum {
- LIB_FAKEUSER = 1 << 9,
+ LIB_OVERRIDE_STATIC_AUTO = 1 << 0, /* Allow automatic generation of overriding rules. */
+ LIB_FAKEUSER = 1 << 9,
};
/**
@@ -334,6 +431,9 @@ enum {
/* RESET_NEVER tag datablock as a place-holder (because the real one could not be linked from its library e.g.). */
LIB_TAG_MISSING = 1 << 6,
+ /* RESET_NEVER tag datablock as being up-to-date regarding its reference. */
+ LIB_TAG_OVERRIDESTATIC_OK = 1 << 9,
+
/* tag datablock has having an extra user. */
LIB_TAG_EXTRAUSER = 1 << 2,
/* tag datablock has having actually increased usercount for the extra virtual user. */
@@ -348,21 +448,32 @@ enum {
/* RESET_AFTER_USE tag existing data before linking so we know what is new. */
LIB_TAG_PRE_EXISTING = 1 << 11,
+ /* The datablock is a copy-on-write version. */
+ LIB_TAG_COPY_ON_WRITE = 1 << 12,
+ LIB_TAG_COPY_ON_WRITE_EVAL = 1 << 13,
+
/* RESET_NEVER tag datablock for freeing etc. behavior (usually set when copying real one into temp/runtime one). */
- LIB_TAG_NO_MAIN = 1 << 12, /* Datablock is not listed in Main database. */
- LIB_TAG_NO_USER_REFCOUNT = 1 << 13, /* Datablock does not refcount usages of other IDs. */
+ LIB_TAG_NO_MAIN = 1 << 14, /* Datablock is not listed in Main database. */
+ LIB_TAG_NO_USER_REFCOUNT = 1 << 15, /* Datablock does not refcount usages of other IDs. */
/* Datablock was not allocated by standard system (BKE_libblock_alloc), do not free its memory
* (usual type-specific freeing is called though). */
- LIB_TAG_NOT_ALLOCATED = 1 << 14,
+ LIB_TAG_NOT_ALLOCATED = 1 << 16,
};
enum {
/* RESET_AFTER_USE, used by update code (depsgraph). */
ID_RECALC_NONE = 0,
+ /* Generic recalc flag, when nothing else matches. */
ID_RECALC = 1 << 0,
- ID_RECALC_DATA = 1 << 1,
- ID_RECALC_SKIP_ANIM_TAG = 1 << 2,
- ID_RECALC_ALL = (ID_RECALC | ID_RECALC_DATA),
+ /* Per-component update flags. */
+ ID_RECALC_ANIMATION = 1 << 1,
+ ID_RECALC_DRAW = 1 << 2,
+ ID_RECALC_DRAW_CACHE = 1 << 3,
+ ID_RECALC_GEOMETRY = 1 << 4,
+ ID_RECALC_TRANSFORM = 1 << 5,
+ ID_RECALC_COLLECTIONS = 1 << 6,
+ /* Special flag to check if SOMETHING was changed. */
+ ID_RECALC_ALL = (~(int)0),
};
/* To filter ID types (filter_id) */
@@ -400,9 +511,11 @@ enum {
FILTER_ID_WO = (1 << 26),
FILTER_ID_PA = (1 << 27),
FILTER_ID_CF = (1 << 28),
+ FILTER_ID_WS = (1 << 29),
+ FILTER_ID_LP = (1u << 31),
};
-/* IMPORTANT: this enum matches the order currently use in set_lisbasepointers,
+/* IMPORTANT: this enum matches the order currently use in set_listbasepointers,
* keep them in sync! */
enum {
INDEX_ID_LI = 0,
@@ -431,12 +544,14 @@ enum {
INDEX_ID_BR,
INDEX_ID_PA,
INDEX_ID_SPK,
+ INDEX_ID_LP,
INDEX_ID_WO,
INDEX_ID_MC,
INDEX_ID_SCR,
INDEX_ID_OB,
INDEX_ID_LS,
INDEX_ID_SCE,
+ INDEX_ID_WS,
INDEX_ID_WM,
INDEX_ID_MSK,
INDEX_ID_NULL,
diff --git a/source/blender/makesdna/DNA_action_types.h b/source/blender/makesdna/DNA_action_types.h
index a7f3d27e9d2..c8780c6b4b8 100644
--- a/source/blender/makesdna/DNA_action_types.h
+++ b/source/blender/makesdna/DNA_action_types.h
@@ -180,6 +180,18 @@ typedef enum eMotionPaths_BakeFlag {
MOTIONPATH_BAKE_HAS_PATHS = (1 << 2)
} eMotionPath_BakeFlag;
+/* runtime */
+#
+#
+typedef struct bPoseChannelDrawData {
+ float solid_color[4];
+ float wire_color[4];
+
+ int bbone_matrix_len;
+ /* keep last */
+ float bbone_matrix[0][4][4];
+} bPoseChannelDrawData;
+
/* ************************************************ */
/* Poses */
@@ -238,6 +250,8 @@ typedef struct bPoseChannel {
float chan_mat[4][4]; /* matrix result of loc/quat/size, and where we put deform in, see next line */
float pose_mat[4][4]; /* constraints accumulate here. in the end, pose_mat = bone->arm_mat * chan_mat
* this matrix is object space */
+ float disp_mat[4][4]; /* for display, pose_mat with bone length applied */
+ float disp_tail_mat[4][4]; /* for display, pose_mat with bone length applied and translated to tail*/
float constinv[4][4]; /* inverse result of constraints.
* doesn't include effect of restposition, parent, and local transform*/
@@ -259,8 +273,10 @@ typedef struct bPoseChannel {
struct bPoseChannel *bbone_prev; /* next/prev bones to use as handle references when calculating bbones (optional) */
struct bPoseChannel *bbone_next;
-
+
void *temp; /* use for outliner */
+ /* Runtime data for color and bbone segment matrix. */
+ bPoseChannelDrawData *draw_data;
} bPoseChannel;
diff --git a/source/blender/makesdna/DNA_camera_types.h b/source/blender/makesdna/DNA_camera_types.h
index 52e40cbc098..c90599bb5cc 100644
--- a/source/blender/makesdna/DNA_camera_types.h
+++ b/source/blender/makesdna/DNA_camera_types.h
@@ -34,6 +34,8 @@
#include "DNA_defs.h"
#include "DNA_gpu_types.h"
+#include "DNA_movieclip_types.h"
+#include "DNA_image_types.h"
#include "DNA_ID.h"
#ifdef __cplusplus
@@ -59,6 +61,20 @@ typedef struct CameraStereoSettings {
float pole_merge_angle_to;
} CameraStereoSettings;
+/* Background Picture */
+typedef struct CameraBGImage {
+ struct CameraBGImage *next, *prev;
+
+ struct Image *ima;
+ struct ImageUser iuser;
+ struct MovieClip *clip;
+ struct MovieClipUser cuser;
+ float offset[2], scale, rotation;
+ float alpha;
+ short flag;
+ short source;
+} CameraBGImage;
+
typedef struct Camera {
ID id;
struct AnimData *adt; /* animation data (must be immediately after id for utilities to use it) */
@@ -82,9 +98,19 @@ typedef struct Camera {
struct Object *dof_ob;
struct GPUDOFSettings gpu_dof;
+ /* CameraBGImage reference images */
+ struct ListBase bg_images;
+
char sensor_fit;
char pad[7];
+ /* runtime only, used for drawing */
+ float drwcorners[4][2];
+ float drwtria[2][2];
+ float drwdepth, pad1;
+ float drwfocusmat[4][4];
+ float drwnormalmat[4][4];
+
/* Stereo settings */
struct CameraStereoSettings stereo;
} Camera;
@@ -124,6 +150,7 @@ enum {
#endif
CAM_SHOWSENSOR = (1 << 8),
CAM_SHOW_SAFE_CENTER = (1 << 9),
+ CAM_SHOW_BG_IMAGE = (1 << 10),
};
/* yafray: dof sampling switch */
@@ -159,6 +186,32 @@ enum {
CAM_S3D_POLE_MERGE = (1 << 1),
};
+/* CameraBGImage->flag */
+/* may want to use 1 for select ? */
+enum {
+ CAM_BGIMG_FLAG_EXPANDED = (1 << 1),
+ CAM_BGIMG_FLAG_CAMERACLIP = (1 << 2),
+ CAM_BGIMG_FLAG_DISABLED = (1 << 3),
+ CAM_BGIMG_FLAG_FOREGROUND = (1 << 4),
+
+ /* Camera framing options */
+ CAM_BGIMG_FLAG_CAMERA_ASPECT = (1 << 5), /* don't stretch to fit the camera view */
+ CAM_BGIMG_FLAG_CAMERA_CROP = (1 << 6), /* crop out the image */
+
+ /* Axis flip options */
+ CAM_BGIMG_FLAG_FLIP_X = (1 << 7),
+ CAM_BGIMG_FLAG_FLIP_Y = (1 << 8),
+};
+
+#define CAM_BGIMG_FLAG_EXPANDED (CAM_BGIMG_FLAG_EXPANDED | CAM_BGIMG_FLAG_CAMERACLIP)
+
+/* CameraBGImage->source */
+/* may want to use 1 for select ?*/
+enum {
+ CAM_BGIMG_SOURCE_IMAGE = 0,
+ CAM_BGIMG_SOURCE_MOVIE = 1,
+};
+
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/makesdna/DNA_curve_types.h b/source/blender/makesdna/DNA_curve_types.h
index 6a95865c11f..48fe82b3e1a 100644
--- a/source/blender/makesdna/DNA_curve_types.h
+++ b/source/blender/makesdna/DNA_curve_types.h
@@ -265,6 +265,7 @@ typedef struct Curve {
char pad2[2];
+ void *batch_cache;
} Curve;
#define CURVE_VFONT_ANY(cu) \
diff --git a/source/blender/makesdna/DNA_customdata_types.h b/source/blender/makesdna/DNA_customdata_types.h
index 2d1ffaa53eb..0e0b1d669d9 100644
--- a/source/blender/makesdna/DNA_customdata_types.h
+++ b/source/blender/makesdna/DNA_customdata_types.h
@@ -92,13 +92,13 @@ typedef enum CustomDataType {
CD_MCOL = 6,
CD_ORIGINDEX = 7,
CD_NORMAL = 8,
-/* CD_POLYINDEX = 9, */
+ CD_FACEMAP = 9, /* exclusive face group, each face can only be part of one */
CD_PROP_FLT = 10,
CD_PROP_INT = 11,
CD_PROP_STR = 12,
CD_ORIGSPACE = 13, /* for modifier stack face location mapping */
CD_ORCO = 14,
- CD_MTEXPOLY = 15,
+/* CD_MTEXPOLY = 15, */ /* deprecated */
CD_MLOOPUV = 16,
CD_MLOOPCOL = 17,
CD_TANGENT = 18,
@@ -143,13 +143,13 @@ typedef enum CustomDataType {
#define CD_MASK_MCOL (1 << CD_MCOL)
#define CD_MASK_ORIGINDEX (1 << CD_ORIGINDEX)
#define CD_MASK_NORMAL (1 << CD_NORMAL)
-// #define CD_MASK_POLYINDEX (1 << CD_POLYINDEX)
+#define CD_MASK_FACEMAP (1 << CD_FACEMAP)
#define CD_MASK_PROP_FLT (1 << CD_PROP_FLT)
#define CD_MASK_PROP_INT (1 << CD_PROP_INT)
#define CD_MASK_PROP_STR (1 << CD_PROP_STR)
#define CD_MASK_ORIGSPACE (1 << CD_ORIGSPACE)
#define CD_MASK_ORCO (1 << CD_ORCO)
-#define CD_MASK_MTEXPOLY (1 << CD_MTEXPOLY)
+// #define CD_MASK_MTEXPOLY (1 << CD_MTEXPOLY) /* DEPRECATED */
#define CD_MASK_MLOOPUV (1 << CD_MLOOPUV)
#define CD_MASK_MLOOPCOL (1 << CD_MLOOPCOL)
#define CD_MASK_TANGENT (1 << CD_TANGENT)
diff --git a/source/blender/makesdna/DNA_defs.h b/source/blender/makesdna/DNA_defs.h
index fc9dd8f06a9..bfa8da02707 100644
--- a/source/blender/makesdna/DNA_defs.h
+++ b/source/blender/makesdna/DNA_defs.h
@@ -44,6 +44,12 @@
# endif
#endif
+#ifdef __GNUC__
+# define DNA_PRIVATE_ATTR __attribute__ ((deprecated))
+#else
+# define DNA_PRIVATE_ATTR
+#endif
+
/* poison pragma */
#ifdef DNA_DEPRECATED_ALLOW
diff --git a/source/blender/makesdna/DNA_fileglobal_types.h b/source/blender/makesdna/DNA_fileglobal_types.h
index b2ab0d2a08d..ed9640c365f 100644
--- a/source/blender/makesdna/DNA_fileglobal_types.h
+++ b/source/blender/makesdna/DNA_fileglobal_types.h
@@ -32,9 +32,6 @@
#ifndef __DNA_FILEGLOBAL_TYPES_H__
#define __DNA_FILEGLOBAL_TYPES_H__
-struct bScreen;
-struct Scene;
-
/**
* FileGlobal stores a part of the current user-interface settings at
* the moment of saving, and the file-specific settings.
@@ -46,6 +43,9 @@ typedef struct FileGlobal {
char pad[6];
struct bScreen *curscreen;
struct Scene *curscene;
+ struct ViewLayer *cur_view_layer;
+ void *pad1;
+
int fileflags;
int globalf;
uint64_t build_commit_timestamp; /* commit timestamp from buildinfo */
diff --git a/source/blender/makesdna/DNA_gpencil_types.h b/source/blender/makesdna/DNA_gpencil_types.h
index a62538d1032..d5a5a1d5d4a 100644
--- a/source/blender/makesdna/DNA_gpencil_types.h
+++ b/source/blender/makesdna/DNA_gpencil_types.h
@@ -128,7 +128,7 @@ typedef enum eGPDpalettecolor_Flag {
PC_COLOR_LOCKED = (1 << 2),
/* do onion skinning */
PC_COLOR_ONIONSKIN = (1 << 3),
- /* "volumetric" strokes (i.e. GLU Quadric discs in 3D) */
+ /* "volumetric" strokes */
PC_COLOR_VOLUMETRIC = (1 << 4),
/* Use High quality fill */
PC_COLOR_HQ_FILL = (1 << 5)
@@ -273,7 +273,7 @@ typedef enum eGPDlayer_Flag {
GP_LAYER_GHOST_PREVCOL = (1 << 8),
/* use custom color for ghosts after current frame */
GP_LAYER_GHOST_NEXTCOL = (1 << 9),
- /* "volumetric" strokes (i.e. GLU Quadric discs in 3D) */
+ /* "volumetric" strokes */
GP_LAYER_VOLUMETRIC = (1 << 10),
/* Use high quality fill (instead of buggy legacy OpenGL Fill) */
GP_LAYER_HQ_FILL = (1 << 11),
@@ -300,6 +300,7 @@ typedef struct bGPdata {
short sbuffer_sflag; /* flags for stroke that cache represents */
void *sbuffer; /* stroke buffer (can hold GP_STROKE_BUFFER_MAX) */
float scolor[4]; /* buffer color using palettes */
+ float sfill[4]; /* buffer fill color */
char pad[6]; /* padding for compiler alignment error */
short sflag; /* settings for palette color */
diff --git a/source/blender/makesdna/DNA_gpu_types.h b/source/blender/makesdna/DNA_gpu_types.h
index 967cb7284dc..be34309572f 100644
--- a/source/blender/makesdna/DNA_gpu_types.h
+++ b/source/blender/makesdna/DNA_gpu_types.h
@@ -38,6 +38,8 @@ typedef struct GPUDOFSettings {
float fstop;
float focal_length;
float sensor;
+ float rotation;
+ float ratio;
int num_blades;
int high_quality;
} GPUDOFSettings;
diff --git a/source/blender/makesdna/DNA_group_types.h b/source/blender/makesdna/DNA_group_types.h
index 45dd0cb9ff2..8f15aa85e97 100644
--- a/source/blender/makesdna/DNA_group_types.h
+++ b/source/blender/makesdna/DNA_group_types.h
@@ -60,6 +60,13 @@ typedef struct Group {
* on the last used scene */
unsigned int layer;
float dupli_ofs[3];
+
+ struct SceneCollection *collection;
+ struct ViewLayer *view_layer;
} Group;
+
+#define GROUP_MASTER_COLLECTION(_group) \
+ (((LayerCollection *)(_group)->view_layer->layer_collections.first)->scene_collection)
+
#endif /* __DNA_GROUP_TYPES_H__ */
diff --git a/source/blender/makesdna/DNA_lamp_types.h b/source/blender/makesdna/DNA_lamp_types.h
index a2e39f93875..92703fa2d3b 100644
--- a/source/blender/makesdna/DNA_lamp_types.h
+++ b/source/blender/makesdna/DNA_lamp_types.h
@@ -67,7 +67,7 @@ typedef struct Lamp {
short pad2;
float clipsta, clipend;
- float bias, soft, compressthresh, bleedbias, pad5;
+ float bias, soft, compressthresh, bleedbias, bleedexp;
short bufsize, samp, buffers, filtertype;
char bufflag, buftype;
@@ -106,6 +106,14 @@ typedef struct Lamp {
short pr_texture, use_nodes;
char pad6[4];
+ /* Eevee */
+ float cascade_max_dist;
+ float cascade_exponent;
+ float cascade_fade;
+ int cascade_count;
+
+ float contact_dist, contact_bias, contact_spread, contact_thickness;
+
/* preview */
struct PreviewImage *preview;
@@ -151,6 +159,7 @@ typedef struct Lamp {
#define LA_SHAD_TEX (1 << 16)
#define LA_SHOW_CONE (1 << 17)
#define LA_SHOW_SHADOW_BOX (1 << 18)
+#define LA_SHAD_CONTACT (1 << 19)
/* layer_shadow */
#define LA_LAYER_SHADOW_BOTH 0
diff --git a/source/blender/makesdna/DNA_lattice_types.h b/source/blender/makesdna/DNA_lattice_types.h
index 242d6f0feeb..28a401676fc 100644
--- a/source/blender/makesdna/DNA_lattice_types.h
+++ b/source/blender/makesdna/DNA_lattice_types.h
@@ -69,6 +69,7 @@ typedef struct Lattice {
char vgroup[64]; /* multiply the influence, MAX_VGROUP_NAME */
struct EditLatt *editlatt;
+ void *batch_cache;
} Lattice;
/* ***************** LATTICE ********************* */
diff --git a/source/blender/makesdna/DNA_layer_types.h b/source/blender/makesdna/DNA_layer_types.h
new file mode 100644
index 00000000000..806c1ca76fc
--- /dev/null
+++ b/source/blender/makesdna/DNA_layer_types.h
@@ -0,0 +1,163 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Dalai Felinto
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file DNA_layer_types.h
+ * \ingroup DNA
+ */
+
+#ifndef __DNA_LAYER_TYPES_H__
+#define __DNA_LAYER_TYPES_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "DNA_freestyle_types.h"
+#include "DNA_listBase.h"
+
+typedef struct Base {
+ struct Base *next, *prev;
+ short flag;
+ short refcount;
+ short sx, sy;
+ struct Object *object;
+ unsigned int lay;
+ int flag_legacy;
+ struct IDProperty *collection_properties; /* used by depsgraph, flushed from collection-tree */
+} Base;
+
+typedef struct CollectionOverride {
+ struct CollectionOverride *next, *prev;
+ char name[64]; /* MAX_NAME */
+ /* TODO proper data */
+} CollectionOverride;
+
+typedef struct ViewLayerEngineData {
+ struct ViewLayerEngineData *next, *prev;
+ struct DrawEngineType *engine_type;
+ void *storage;
+ void (*free)(void *storage);
+} ViewLayerEngineData;
+
+typedef struct LayerCollection {
+ struct LayerCollection *next, *prev;
+ struct SceneCollection *scene_collection;
+ short flag;
+ /* TODO(sergey): Get rid of this once we've got CoW in DEG, */
+ short flag_evaluated;
+ short pad[2];
+ ListBase object_bases; /* (ObjectBase *)LinkData->data - synced with collection->objects */
+ ListBase overrides;
+ ListBase layer_collections; /* synced with collection->collections */
+ struct IDProperty *properties; /* overrides */
+ struct IDProperty *properties_evaluated;
+} LayerCollection;
+
+typedef struct ViewLayer {
+ struct ViewLayer *next, *prev;
+ char name[64]; /* MAX_NAME */
+ short active_collection;
+ short flag;
+ short pad[2];
+ ListBase object_bases; /* ObjectBase */
+ struct SceneStats *stats; /* default allocated now */
+ struct Base *basact;
+ ListBase layer_collections; /* LayerCollection */
+ struct IDProperty *properties; /* overrides */
+ struct IDProperty *properties_evaluated;
+
+ /* Old SceneRenderLayer data. */
+ int layflag;
+ int passflag; /* pass_xor has to be after passflag */
+ int pass_xor;
+ float pass_alpha_threshold;
+
+ struct IDProperty *id_properties; /* Equivalent to datablocks ID properties. */
+
+ struct FreestyleConfig freestyle_config;
+
+ /* Runtime data */
+ ListBase drawdata; /* ViewLayerEngineData */
+} ViewLayer;
+
+typedef struct SceneCollection {
+ struct SceneCollection *next, *prev;
+ char name[64]; /* MAX_NAME */
+ int active_object_index; /* for UI */
+ char type;
+ char pad[3];
+ ListBase objects; /* (Object *)LinkData->data */
+ ListBase scene_collections; /* nested collections */
+} SceneCollection;
+
+/* Base->flag */
+enum {
+ BASE_SELECTED = (1 << 0),
+ BASE_VISIBLED = (1 << 1),
+ BASE_SELECTABLED = (1 << 2),
+ BASE_FROMDUPLI = (1 << 3),
+ BASE_DIRTY_ENGINE_SETTINGS = (1 << 4),
+ BASE_FROM_SET = (1 << 5), /* To be set only by the depsgraph */
+};
+
+/* LayerCollection->flag */
+enum {
+ COLLECTION_VIEWPORT = (1 << 0), /* Only used for group collections. */
+ COLLECTION_SELECTABLE = (1 << 1),
+ COLLECTION_DISABLED = (1 << 2),
+ COLLECTION_RENDER = (1 << 3), /* Only used for group collections. */
+};
+
+/* ViewLayer->flag */
+enum {
+ VIEW_LAYER_RENDER = (1 << 0),
+ VIEW_LAYER_ENGINE_DIRTY = (1 << 1),
+ VIEW_LAYER_FREESTYLE = (1 << 2),
+};
+
+/* SceneCollection->type */
+enum {
+ COLLECTION_TYPE_NONE = 0,
+ COLLECTION_TYPE_GROUP_INTERNAL = 1,
+};
+
+/* *************************************************************** */
+/* Engine Settings */
+
+/* CollectionEngineSettings->type */
+typedef enum CollectionEngineSettingsType {
+ COLLECTION_MODE_NONE = 0,
+ COLLECTION_MODE_OBJECT = 1,
+ COLLECTION_MODE_EDIT = 2,
+ COLLECTION_MODE_PAINT_WEIGHT = 5,
+ COLLECTION_MODE_PAINT_VERTEX = 6,
+} CollectionModeSettingsType;
+
+/* *************************************************************** */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __DNA_LAYER_TYPES_H__ */
+
diff --git a/source/blender/makesdna/DNA_lightprobe_types.h b/source/blender/makesdna/DNA_lightprobe_types.h
new file mode 100644
index 00000000000..649df714457
--- /dev/null
+++ b/source/blender/makesdna/DNA_lightprobe_types.h
@@ -0,0 +1,111 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Foundation
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ *
+ */
+
+/** \file DNA_lightprobe_types.h
+ * \ingroup DNA
+ */
+
+#ifndef __DNA_LIGHTPROBE_TYPES_H__
+#define __DNA_LIGHTPROBE_TYPES_H__
+
+#include "DNA_defs.h"
+#include "DNA_listBase.h"
+#include "DNA_ID.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct Object;
+struct AnimData;
+
+typedef struct LightProbe {
+ ID id;
+ struct AnimData *adt; /* animation data (must be immediately after id for utilities to use it) */
+
+ char type; /* For realtime probe objects */
+ char flag; /* General purpose flags for probes */
+ char attenuation_type; /* Attenuation type */
+ char parallax_type; /* Parallax type */
+
+ float distinf; /* Influence Radius */
+ float distpar; /* Parallax Radius */
+ float falloff; /* Influence falloff */
+
+ float clipsta, clipend;
+
+ float vis_bias, vis_bleedbias; /* VSM visibility biases */
+ float vis_blur;
+
+ float intensity; /* Intensity multiplier */
+
+ int grid_resolution_x; /* Irradiance grid resolution */
+ int grid_resolution_y;
+ int grid_resolution_z;
+ int pad1;
+
+ struct Object *parallax_ob; /* Object to use as a parallax origin */
+ struct Image *image; /* Image to use on as lighting data */
+
+ float data_draw_size;
+
+ /* Runtime display data */
+ float distfalloff, distgridinf;
+ float pad;
+} LightProbe;
+
+/* Probe->type */
+enum {
+ LIGHTPROBE_TYPE_CUBE = 0,
+ LIGHTPROBE_TYPE_PLANAR = 1,
+ LIGHTPROBE_TYPE_GRID = 2,
+};
+
+/* Probe->flag */
+enum {
+ LIGHTPROBE_FLAG_CUSTOM_PARALLAX = (1 << 0),
+ LIGHTPROBE_FLAG_SHOW_INFLUENCE = (1 << 1),
+ LIGHTPROBE_FLAG_SHOW_PARALLAX = (1 << 2),
+ LIGHTPROBE_FLAG_SHOW_CLIP_DIST = (1 << 3),
+ LIGHTPROBE_FLAG_SHOW_DATA = (1 << 4),
+};
+
+/* Probe->display */
+enum {
+ LIGHTPROBE_DISP_WIRE = 0,
+ LIGHTPROBE_DISP_SHADED = 1,
+ LIGHTPROBE_DISP_DIFFUSE = 2,
+ LIGHTPROBE_DISP_REFLECTIVE = 3,
+};
+
+/* Probe->parallax && Probe->attenuation_type*/
+enum {
+ LIGHTPROBE_SHAPE_ELIPSOID = 0,
+ LIGHTPROBE_SHAPE_BOX = 1,
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __DNA_LIGHTPROBE_TYPES_H__ */
diff --git a/source/blender/makesdna/DNA_material_types.h b/source/blender/makesdna/DNA_material_types.h
index 0c500e366a7..bc33b7ba6e2 100644
--- a/source/blender/makesdna/DNA_material_types.h
+++ b/source/blender/makesdna/DNA_material_types.h
@@ -90,6 +90,16 @@ typedef struct TexPaintSlot {
int pad;
} TexPaintSlot;
+/* Clay engine */
+
+/* MaterialRuntimeClay.flag */
+#define CLAY_OUTDATED 1
+
+/* MaterialEngineSettingsClay.type */
+#define CLAY_MATCAP_NONE 0
+#define CLAY_MATCAP_SIMPLE 1
+#define CLAY_MATCAP_COMPLETE 2
+
typedef struct Material {
ID id;
struct AnimData *adt; /* animation data (must be immediately after id for utilities to use it) */
@@ -201,6 +211,18 @@ typedef struct Material {
char nmap_tangent_names[9][64]; /* [MAX_MTFACE+1][MAX_NAME]; +1 for empty name */
int nmap_tangent_names_count, pad5;
+ /* Transparency */
+ float alpha_threshold;
+ float refract_depth;
+ char blend_method;
+ char blend_shadow;
+ char blend_flag;
+ char pad6[5];
+
+ /* image to use for image/uv space, also bake target
+ * (not to be used shading/rendering pipeline, this is editor featyure only!). */
+ struct Image *edit_image;
+
struct TexPaintSlot *texpaintslot; /* cached slot for painting. Make sure to recalculate before use
* with refresh_texpaint_image_cache */
ListBase gpumaterial; /* runtime */
@@ -275,7 +297,7 @@ typedef struct Material {
#define MA_ONLYSHADOW 1024
#define MA_HALO_XALPHA 1024
#define MA_STAR 0x800
-#define MA_FACETEXTURE 0x800
+// #define MA_FACETEXTURE 0x800 /* deprecated */
#define MA_HALOTEX 0x1000
#define MA_HALOPUNO 0x2000
#define MA_ONLYCAST 0x2000
@@ -297,7 +319,7 @@ typedef struct Material {
/* qdn: a bit clumsy this, tangents needed for normal maps separated from shading */
#define MA_NORMAP_TANG 0x8000000
#define MA_GROUP_NOLAY 0x10000000
-#define MA_FACETEXTURE_ALPHA 0x20000000
+// #define MA_FACETEXTURE_ALPHA 0x20000000 /* deprecated */
#define MA_STR_B_UNITS 0x40000000
#define MA_STR_SURFDIFF 0x80000000
@@ -477,5 +499,31 @@ typedef struct Material {
#define MA_VOL_SHADE_MULTIPLE 3
#define MA_VOL_SHADE_SHADEDPLUSMULTIPLE 4
+/* blend_method */
+enum {
+ MA_BM_SOLID,
+ MA_BM_ADD,
+ MA_BM_MULTIPLY,
+ MA_BM_CLIP,
+ MA_BM_HASHED,
+ MA_BM_BLEND,
+};
+
+/* blend_flag */
+enum {
+ MA_BL_HIDE_BACKSIDE = (1 << 0),
+ MA_BL_SS_REFRACTION = (1 << 1),
+ MA_BL_SS_SUBSURFACE = (1 << 2),
+ MA_BL_TRANSLUCENCY = (1 << 3),
+};
+
+/* blend_shadow */
+enum {
+ MA_BS_NONE = 0,
+ MA_BS_SOLID,
+ MA_BS_CLIP,
+ MA_BS_HASHED,
+};
+
#endif
diff --git a/source/blender/makesdna/DNA_mesh_types.h b/source/blender/makesdna/DNA_mesh_types.h
index 39e56925903..505b1f7157b 100644
--- a/source/blender/makesdna/DNA_mesh_types.h
+++ b/source/blender/makesdna/DNA_mesh_types.h
@@ -66,7 +66,6 @@ typedef struct Mesh {
/* BMESH ONLY */
/*new face structures*/
struct MPoly *mpoly;
- struct MTexPoly *mtpoly;
struct MLoop *mloop;
struct MLoopUV *mloopuv;
struct MLoopCol *mloopcol;
@@ -127,6 +126,7 @@ typedef struct Mesh {
short totcol;
struct Multires *mr DNA_DEPRECATED; /* deprecated multiresolution modeling data, only keep for loading old files */
+ void *batch_cache;
} Mesh;
/* deprecated by MTFace, only here for file reading */
diff --git a/source/blender/makesdna/DNA_meshdata_types.h b/source/blender/makesdna/DNA_meshdata_types.h
index 8bb711339f7..6d38fe22ea1 100644
--- a/source/blender/makesdna/DNA_meshdata_types.h
+++ b/source/blender/makesdna/DNA_meshdata_types.h
@@ -186,22 +186,9 @@ typedef struct MVertTri {
unsigned int tri[3];
} MVertTri;
-
-typedef struct MTexPoly {
- struct Image *tpage;
- char flag, transp;
- short mode, tile, pad;
-} MTexPoly;
-
-/* can copy from/to MTexPoly/MTFace */
-#define ME_MTEXFACE_CPY(dst, src) \
-{ \
- (dst)->tpage = (src)->tpage; \
- (dst)->flag = (src)->flag; \
- (dst)->transp = (src)->transp; \
- (dst)->mode = (src)->mode; \
- (dst)->tile = (src)->tile; \
-} (void)0
+//typedef struct MTexPoly {
+// void *pad;
+//} MTexPoly;
typedef struct MLoopUV {
float uv[2];
@@ -256,9 +243,6 @@ typedef struct MSelect {
/*tessellation uv face data*/
typedef struct MTFace {
float uv[4][2];
- struct Image *tpage;
- char flag, transp;
- short mode, tile, unwrap;
} MTFace;
/*Custom Data Properties*/
@@ -463,58 +447,4 @@ enum {
ME_FSEL = 2,
};
-/* mtface->flag */
-enum {
- // TF_SELECT = (1 << 0), /* use MFace hide flag (after 2.43), should be able to reuse after 2.44 */
- // TF_ACTIVE = (1 << 1), /* deprecated! */
- TF_SEL1 = (1 << 2),
- TF_SEL2 = (1 << 3),
- TF_SEL3 = (1 << 4),
- TF_SEL4 = (1 << 5),
-};
-
-/* mtface->mode */
-enum {
- TF_DYNAMIC = (1 << 0),
- TF_ALPHASORT = (1 << 1),
- TF_TEX = (1 << 2),
- TF_SHAREDVERT = (1 << 3),
- TF_LIGHT = (1 << 4),
-
- TF_CONVERTED = (1 << 5), /* tface converted to material */
-
- TF_SHAREDCOL = (1 << 6),
- // TF_TILES = (1 << 7), /* deprecated */
- TF_BILLBOARD = (1 << 8),
- TF_TWOSIDE = (1 << 9),
- TF_INVISIBLE = (1 << 10),
-
- TF_OBCOL = (1 << 11),
- TF_BILLBOARD2 = (1 << 12), /* with Z axis constraint */
- TF_SHADOW = (1 << 13),
- TF_BMFONT = (1 << 14),
-};
-
-/* mtface->transp, values 1-4 are used as flags in the GL, WARNING, TF_SUB cant work with this */
-enum {
- TF_SOLID = 0,
- TF_ADD = (1 << 0),
- TF_ALPHA = (1 << 1),
- TF_CLIP = (1 << 2), /* clipmap alpha/binary alpha all or nothing! */
-
- TF_SUB = 3, /* sub is not available in the user interface anymore */
-};
-
-/* mtface->unwrap */
-enum {
- TF_DEPRECATED1 = (1 << 0),
- TF_DEPRECATED2 = (1 << 1),
- TF_DEPRECATED3 = (1 << 2),
- TF_DEPRECATED4 = (1 << 3),
- TF_PIN1 = (1 << 4),
- TF_PIN2 = (1 << 5),
- TF_PIN3 = (1 << 6),
- TF_PIN4 = (1 << 7),
-};
-
#endif /* __DNA_MESHDATA_TYPES_H__ */
diff --git a/source/blender/makesdna/DNA_meta_types.h b/source/blender/makesdna/DNA_meta_types.h
index 68d16700a73..f9ba45efef8 100644
--- a/source/blender/makesdna/DNA_meta_types.h
+++ b/source/blender/makesdna/DNA_meta_types.h
@@ -59,7 +59,11 @@ typedef struct MetaElem {
float len; /* old, only used for backwards compat. use dimensions now */
float *mat, *imat; /* matrix and inverted matrix */
-
+
+ /* Draw_Data: stores pointers used for shader attributes */
+ float draw_scale_xform[3][4]; /* Matrix of Scale and Translation */
+ float draw_stiffness_radius; /* stiffness circle radius (only in edit mode) */
+ float pad;
} MetaElem;
typedef struct MetaBall {
@@ -93,6 +97,8 @@ typedef struct MetaBall {
/* used in editmode */
/*ListBase edit_elems;*/
MetaElem *lastelem;
+
+ void *batch_cache;
} MetaBall;
/* **************** METABALL ********************* */
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index 766dd196562..283e801ea7a 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -420,7 +420,7 @@ typedef struct UVProjectModifierData {
/* the objects which do the projecting */
struct Object *projectors[10]; /* MOD_UVPROJECT_MAXPROJECTORS */
struct Image *image; /* the image to project */
- int flags;
+ int pad2;
int num_projectors;
float aspectx, aspecty;
float scalex, scaley;
diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h
index 4dbf3a354ce..bddbf63d8b1 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -221,8 +221,11 @@ typedef struct bNode {
* and replacing all uses with per-instance data.
*/
short preview_xsize, preview_ysize; /* reserved size of the preview rect */
- int pad2;
+ short pad2[2];
struct uiBlock *block; /* runtime during drawing */
+
+ float ssr_id; /* XXX: eevee only, id of screen space reflection layer, needs to be a float to feed GPU_uniform. */
+ float sss_id; /* XXX: eevee only, id of screen subsurface scatter layer, needs to be a float to feed GPU_uniform. */
} bNode;
/* node->flag */
diff --git a/source/blender/makesdna/DNA_object_force_types.h b/source/blender/makesdna/DNA_object_force_types.h
index 47467917315..e7ebd3b72d7 100644
--- a/source/blender/makesdna/DNA_object_force_types.h
+++ b/source/blender/makesdna/DNA_object_force_types.h
@@ -112,6 +112,12 @@ typedef struct PartDeflect {
float f_noise; /* noise of force */
int seed; /* noise random seed */
+ /* Display Size */
+ float drawvec1[4]; /* Runtime only : start of the curve or draw scale */
+ float drawvec2[4]; /* Runtime only : end of the curve */
+ float drawvec_falloff_min[3], pad1; /* Runtime only */
+ float drawvec_falloff_max[3], pad2; /* Runtime only */
+
struct Object *f_source; /* force source object */
} PartDeflect;
diff --git a/source/blender/makesdna/DNA_object_types.h b/source/blender/makesdna/DNA_object_types.h
index e0b4d117bd1..0b7dccee9ab 100644
--- a/source/blender/makesdna/DNA_object_types.h
+++ b/source/blender/makesdna/DNA_object_types.h
@@ -67,6 +67,31 @@ typedef struct bDeformGroup {
/* need this flag for locking weights */
char flag, pad[7];
} bDeformGroup;
+
+/* Face Maps*/
+typedef struct bFaceMap {
+ struct bFaceMap *next, *prev;
+ char name[64]; /* MAX_VGROUP_NAME */
+ char flag;
+ char pad[7];
+} bFaceMap;
+
+/* Object Runtime display data */
+struct ObjectEngineData;
+typedef void (*ObjectEngineDataInitCb)(struct ObjectEngineData *engine_data);
+typedef void (*ObjectEngineDataFreeCb)(struct ObjectEngineData *engine_data);
+
+#
+#
+typedef struct ObjectEngineData {
+ struct ObjectEngineData *next, *prev;
+ struct DrawEngineType *engine_type;
+ /* Only nested data, NOT the engine data itself. */
+ ObjectEngineDataFreeCb free;
+ /* Accumulated recalc flags, which corresponds to ID->recalc flags. */
+ int recalc;
+} ObjectEngineData;
+
#define MAX_VGROUP_NAME 64
/* bDeformGroup->flag */
@@ -145,9 +170,7 @@ typedef struct Object {
ListBase effect DNA_DEPRECATED; // XXX deprecated... keep for readfile
ListBase defbase; /* list of bDeformGroup (vertex groups) names and flag only */
ListBase modifiers; /* list of ModifierData structures */
-
- int mode; /* Local object mode */
- int restore_mode; /* Keep track of what mode to return to after toggling a mode */
+ ListBase fmaps; /* list of facemaps */
/* materials */
struct Material **mat; /* material slots */
@@ -188,11 +211,11 @@ typedef struct Object {
short nlaflag; /* used for DopeSheet filtering settings (expanded/collapsed) */
short scaflag; /* ui state for game logic */
char scavisflag; /* more display settings for game logic */
- char depsflag;
+ char pad;
/* did last modifier stack generation need mapping support? */
char lastNeedMapping; /* bool */
- char pad;
+ char duplicator_visibility_flag;
/* dupli-frame settings */
int dupon, dupoff, dupsta, dupend;
@@ -226,7 +249,10 @@ typedef struct Object {
float jump_speed;
float fall_speed;
unsigned char max_jumps;
- char pad2[3];
+ char pad2;
+
+ /* Depsgraph */
+ short base_flag; /* used by depsgraph, flushed from base */
/** Collision mask settings */
unsigned short col_group, col_mask;
@@ -251,13 +277,15 @@ typedef struct Object {
short index; /* custom index, for renderpasses */
unsigned short actdef; /* current deformation group, note: index starts at 1 */
+ unsigned short actfmap; /* current face map, note: index starts at 1 */
+ unsigned char pad5[6];
float col[4]; /* object color */
int gameflag;
int gameflag2;
char restrictflag; /* for restricting view, select, render etc. accessible in outliner */
- char recalc; /* dependency flag */
+ char pad3;
short softflag; /* softbody settings */
float anisotropicFriction[3];
@@ -278,15 +306,16 @@ typedef struct Object {
struct FluidsimSettings *fluidsimSettings; /* if fluidsim enabled, store additional settings */
- /* Runtime valuated curve-specific data, not stored in the file */
- struct CurveCache *curve_cache;
-
struct DerivedMesh *derivedDeform, *derivedFinal;
+ void *pad7;
uint64_t lastDataMask; /* the custom data layer mask that was last used to calculate derivedDeform and derivedFinal */
uint64_t customdata_mask; /* (extra) custom data layer mask to use for creating derivedmesh, set by depsgraph */
unsigned int state; /* bit masks of game controllers that are active */
unsigned int init_state; /* bit masks of initial state as recorded by the users */
+ /* Runtime valuated curve-specific data, not stored in the file */
+ struct CurveCache *curve_cache;
+
ListBase gpulamp; /* runtime, for glsl lamp display only */
ListBase pc_ids;
ListBase *duplilist; /* for temporary dupli list storage, only for use by RNA API */
@@ -296,12 +325,23 @@ typedef struct Object {
float ima_ofs[2]; /* offset for image empties */
ImageUser *iuser; /* must be non-null when oject is an empty image */
- void *pad3;
+ void *pad4;
ListBase lodlevels; /* contains data for levels of detail */
LodLevel *currentlod;
struct PreviewImage *preview;
+
+ struct IDProperty *base_collection_properties; /* used by depsgraph, flushed from base */
+
+ ListBase drawdata; /* runtime, ObjectEngineData */
+ int pad6;
+ int select_color;
+
+ /* Mesh structure createrd during object evaluaiton.
+ * It has all modifiers applied.
+ */
+ struct Mesh *mesh_evaluated;
} Object;
/* Warning, this is not used anymore because hooks are now modifiers */
@@ -340,6 +380,7 @@ typedef struct DupliObject {
struct ParticleSystem *particle_system;
unsigned int random_id;
unsigned int pad;
+ struct IDProperty *collection_properties;
} DupliObject;
/* **************** OBJECT ********************* */
@@ -360,6 +401,7 @@ enum {
OB_CAMERA = 11,
OB_SPEAKER = 12,
+ OB_LIGHTPROBE = 13,
/* OB_WAVE = 21, */
OB_LATTICE = 22,
@@ -380,10 +422,10 @@ enum {
/* is this ID type used as object data */
#define OB_DATA_SUPPORT_ID(_id_type) \
- (ELEM(_id_type, ID_ME, ID_CU, ID_MB, ID_LA, ID_SPK, ID_CA, ID_LT, ID_AR))
+ (ELEM(_id_type, ID_ME, ID_CU, ID_MB, ID_LA, ID_SPK, ID_LP, ID_CA, ID_LT, ID_AR))
#define OB_DATA_SUPPORT_ID_CASE \
- ID_ME: case ID_CU: case ID_MB: case ID_LA: case ID_SPK: case ID_CA: case ID_LT: case ID_AR
+ ID_ME: case ID_CU: case ID_MB: case ID_LA: case ID_SPK: case ID_LP: case ID_CA: case ID_LT: case ID_AR
/* partype: first 4 bits: type */
enum {
@@ -515,12 +557,6 @@ enum {
#define BA_TRANSFORM_CHILD (1 << 8) /* child of a transformed object */
#define BA_TRANSFORM_PARENT (1 << 13) /* parent of a transformed object */
-
-/* an initial attempt as making selection more specific! */
-#define BA_DESELECT 0
-#define BA_SELECT 1
-
-
#define OB_FROMDUPLI (1 << 9)
#define OB_DONE (1 << 10) /* unknown state, clear before use */
/* #define OB_RADIO (1 << 11) */ /* deprecated */
@@ -600,12 +636,6 @@ enum {
OB_BODY_TYPE_CHARACTER = 8,
};
-/* ob->depsflag */
-enum {
- OB_DEPS_EXTRA_OB_RECALC = 1 << 0,
- OB_DEPS_EXTRA_DATA_RECALC = 1 << 1,
-};
-
/* ob->scavisflag */
enum {
OB_VIS_SENS = 1 << 0,
@@ -673,7 +703,13 @@ enum {
OB_LOCK_ROTW = 1 << 9,
OB_LOCK_ROT4D = 1 << 10,
};
-
+
+/* ob->duplicator_visibility_flag */
+enum {
+ OB_DUPLI_FLAG_VIEWPORT = 1 << 0,
+ OB_DUPLI_FLAG_RENDER = 1 << 1,
+};
+
#define MAX_DUPLI_RECUR 8
#ifdef __cplusplus
diff --git a/source/blender/makesdna/DNA_outliner_types.h b/source/blender/makesdna/DNA_outliner_types.h
index 984e3334414..8e48bbdde1a 100644
--- a/source/blender/makesdna/DNA_outliner_types.h
+++ b/source/blender/makesdna/DNA_outliner_types.h
@@ -38,6 +38,9 @@ struct ID;
typedef struct TreeStoreElem {
short type, nr, flag, used;
+
+ /* XXX We actually also store non-ID data in this pointer for identifying
+ * the TreeStoreElem for a TreeElement when rebuilding the tree. Ugly! */
struct ID *id;
} TreeStoreElem;
@@ -50,11 +53,14 @@ typedef struct TreeStore {
} TreeStore;
/* TreeStoreElem->flag */
-#define TSE_CLOSED 1
-#define TSE_SELECTED 2
-#define TSE_TEXTBUT 4
-#define TSE_CHILDSEARCH 8
-#define TSE_SEARCHMATCH 16
+enum {
+ TSE_CLOSED = (1 << 0),
+ TSE_SELECTED = (1 << 1),
+ TSE_TEXTBUT = (1 << 2),
+ TSE_CHILDSEARCH = (1 << 3),
+ TSE_SEARCHMATCH = (1 << 4),
+ TSE_HIGHLIGHTED = (1 << 5),
+};
/* TreeStoreElem->types */
#define TSE_NLA 1 /* NO ID */
@@ -96,6 +102,9 @@ typedef struct TreeStore {
#define TSE_KEYMAP_ITEM 35 /* NO ID */
#define TSE_ID_BASE 36 /* NO ID */
#define TSE_GP_LAYER 37 /* NO ID */
+#define TSE_LAYER_COLLECTION 38
+#define TSE_SCENE_COLLECTION 39
+#define TSE_LAYER_COLLECTION_BASE 40
/* Check whether given TreeStoreElem should have a real ID in its ->id member. */
diff --git a/source/blender/makesdna/DNA_particle_types.h b/source/blender/makesdna/DNA_particle_types.h
index f6bed37dfa2..ea7905eb2ad 100644
--- a/source/blender/makesdna/DNA_particle_types.h
+++ b/source/blender/makesdna/DNA_particle_types.h
@@ -166,8 +166,9 @@ typedef struct ParticleSettings {
short type, from, distr, texact;
/* physics modes */
short phystype, rotmode, avemode, reactevent;
- int draw, pad1;
- short draw_as, draw_size, childtype, pad2;
+ int draw;
+ float draw_size;
+ short draw_as, pad1, childtype, pad2;
short ren_as, subframes, draw_col;
/* number of path segments, power of 2 except */
short draw_step, ren_step;
@@ -259,8 +260,9 @@ typedef struct ParticleSettings {
/* modified dm support */
short use_modifier_stack;
- short pad5[3];
+ short pad5;
+ int recalc;
} ParticleSettings;
typedef struct ParticleSystem {
@@ -324,6 +326,8 @@ typedef struct ParticleSystem {
float dt_frac; /* current time step, as a fraction of a frame */
float lattice_strength; /* influence of the lattice modifier */
+
+ void *batch_cache;
} ParticleSystem;
typedef enum eParticleDrawFlag {
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index 1cc5cbf8c42..671ad1bc954 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -47,6 +47,8 @@ extern "C" {
#include "DNA_ID.h"
#include "DNA_freestyle_types.h"
#include "DNA_gpu_types.h"
+#include "DNA_layer_types.h"
+#include "DNA_material_types.h"
#include "DNA_userdef_types.h"
struct CurveMapping;
@@ -65,19 +67,11 @@ struct bGPdata;
struct bGPDbrush;
struct MovieClip;
struct ColorSpace;
+struct SceneCollection;
/* ************************************************************* */
/* Scene Data */
-/* Base - Wrapper for referencing Objects in a Scene */
-typedef struct Base {
- struct Base *next, *prev;
- unsigned int lay, selcol;
- int flag;
- short sx, sy;
- struct Object *object;
-} Base;
-
/* ************************************************************* */
/* Output Format Data */
@@ -178,27 +172,25 @@ typedef struct AudioData {
typedef struct SceneRenderLayer {
struct SceneRenderLayer *next, *prev;
- char name[64]; /* MAX_NAME */
+ char name[64] DNA_DEPRECATED; /* MAX_NAME */
- struct Material *mat_override;
- struct Group *light_override;
+ struct Material *mat_override DNA_DEPRECATED; /* Converted to ViewLayer override. */
- unsigned int lay; /* Scene.lay itself has priority over this */
- unsigned int lay_zmask; /* has to be after lay, this is for Z-masking */
- unsigned int lay_exclude; /* not used by internal, exclude */
- int layflag;
+ unsigned int lay DNA_DEPRECATED; /* Converted to LayerCollection cycles camera visibility override. */
+ unsigned int lay_zmask DNA_DEPRECATED; /* Converted to LayerCollection cycles holdout override. */
+ unsigned int lay_exclude DNA_DEPRECATED;
+ int layflag DNA_DEPRECATED; /* Converted to ViewLayer layflag and flag. */
/* pass_xor has to be after passflag */
- /* note, this is treestore element 'nr' in outliner, short still... */
- int passflag;
- int pass_xor;
+ int passflag DNA_DEPRECATED; /* pass_xor has to be after passflag */
+ int pass_xor DNA_DEPRECATED; /* Converted to ViewLayer passflag and flag. */
- int samples;
- float pass_alpha_threshold;
+ int samples DNA_DEPRECATED; /* Converted to ViewLayer override. */
+ float pass_alpha_threshold DNA_DEPRECATED; /* Converted to ViewLayer pass_alpha_threshold. */
- IDProperty *prop;
+ IDProperty *prop DNA_DEPRECATED; /* Converted to ViewLayer id_properties. */
- struct FreestyleConfig freestyleConfig;
+ struct FreestyleConfig freestyleConfig DNA_DEPRECATED; /* Converted to ViewLayer freestyleConfig. */
} SceneRenderLayer;
/* SceneRenderLayer.layflag */
@@ -543,6 +535,12 @@ typedef enum eBakePassFilter {
#define R_BAKE_PASS_FILTER_ALL (~0)
+/* RenderEngineSettingsClay.options */
+typedef enum ClayFlagSettings {
+ CLAY_USE_AO = (1 << 0),
+ CLAY_USE_HSV = (1 << 1),
+} ClayFlagSettings;
+
/* *************************************************************** */
/* Render Data */
@@ -664,8 +662,8 @@ typedef struct RenderData {
rcti disprect;
/* information on different layers to be rendered */
- ListBase layers;
- short actlay;
+ ListBase layers DNA_DEPRECATED; /* Converted to Scene->view_layers. */
+ short actlay DNA_DEPRECATED; /* Converted to Scene->active_layer. */
/* number of mblur samples */
short mblur_samples;
@@ -747,7 +745,7 @@ typedef struct RenderData {
float unit_line_thickness; /* in pixels */
/* render engine */
- char engine[32];
+ char engine[32] DNA_DEPRECATED; // XXX deprecated since 2.8
/* Cycles baking */
struct BakeData bake;
@@ -771,6 +769,12 @@ typedef struct RenderData {
} RenderData;
/* *************************************************************** */
+/* Settings related to viewport drawing/render, only settings used by WorkSpace and Scene. */
+typedef struct ViewRender {
+ char engine_id[32];
+} ViewRender;
+
+/* *************************************************************** */
/* Render Conversion/Simplfication Settings */
/* control render convert and shading engine */
@@ -929,7 +933,7 @@ typedef struct GameData {
#define GAME_SHOW_DEBUG_PROPS (1 << 2)
#define GAME_SHOW_FRAMERATE (1 << 3)
#define GAME_SHOW_PHYSICS (1 << 4)
-#define GAME_DISPLAY_LISTS (1 << 5)
+// #define GAME_DISPLAY_LISTS (1 << 5) /* deprecated */
#define GAME_GLSL_NO_LIGHTS (1 << 6)
#define GAME_GLSL_NO_SHADERS (1 << 7)
#define GAME_GLSL_NO_SHADOWS (1 << 8)
@@ -1081,6 +1085,7 @@ typedef struct ParticleEditSettings {
int draw_step, fade_frames;
struct Scene *scene;
+ struct ViewLayer *view_layer;
struct Object *object;
struct Object *shape_object;
} ParticleEditSettings;
@@ -1256,17 +1261,6 @@ typedef enum eGP_Interpolate_Type {
GP_IPO_SINE = 12,
} eGP_Interpolate_Type;
-
-/* *************************************************************** */
-/* Transform Orientations */
-
-typedef struct TransformOrientation {
- struct TransformOrientation *next, *prev;
- char name[64]; /* MAX_NAME */
- float mat[3][3];
- int pad;
-} TransformOrientation;
-
/* *************************************************************** */
/* Unified Paint Settings
*/
@@ -1627,8 +1621,8 @@ typedef struct Scene {
struct Scene *set;
- ListBase base;
- struct Base *basact; /* active base */
+ ListBase base DNA_DEPRECATED;
+ struct Base *basact DNA_DEPRECATED; /* active base */
struct Object *obedit; /* name replaces old G.obedit */
float cursor[3]; /* 3d cursor location */
@@ -1648,17 +1642,17 @@ typedef struct Scene {
struct Editing *ed; /* sequence editor data is allocated here */
struct ToolSettings *toolsettings; /* default allocated now */
- struct SceneStats *stats; /* default allocated now */
+ void *pad2;
struct DisplaySafeAreas safe_areas;
/* migrate or replace? depends on some internal things... */
/* no, is on the right place (ton) */
struct RenderData r;
struct AudioData audio;
-
+
ListBase markers;
- ListBase transform_spaces;
-
+ ListBase transform_spaces DNA_DEPRECATED;
+
void *sound_scene;
void *playback_handle;
void *sound_scrub_handle;
@@ -1667,11 +1661,8 @@ typedef struct Scene {
void *fps_info; /* (runtime) info/cache used for presenting playback framerate info to the user */
/* none of the dependency graph vars is mean to be saved */
- struct Depsgraph *depsgraph;
- void *pad1;
- struct DagForest *theDag;
- short dagflags;
- short pad3;
+ struct GHash *depsgraph_hash;
+ int pad7;
/* User-Defined KeyingSets */
int active_keyingset; /* index of the active KeyingSet. first KeyingSet has index 1, 'none' active is 0, 'add new' is -1 */
@@ -1705,6 +1696,18 @@ typedef struct Scene {
struct RigidBodyWorld *rigidbody_world;
struct PreviewImage *preview;
+
+ ListBase view_layers;
+ struct SceneCollection *collection;
+ int active_view_layer;
+ int pad4;
+
+ IDProperty *collection_properties; /* settings to be overriden by layer collections */
+ IDProperty *layer_properties; /* settings to be override by workspaces */
+
+ int pad5[2];
+
+ ViewRender view_render;
} Scene;
/* **************** RENDERDATA ********************* */
@@ -1896,6 +1899,8 @@ enum {
/* RenderData.engine (scene.c) */
extern const char *RE_engine_id_BLENDER_RENDER;
extern const char *RE_engine_id_BLENDER_GAME;
+extern const char *RE_engine_id_BLENDER_CLAY;
+extern const char *RE_engine_id_BLENDER_EEVEE;
extern const char *RE_engine_id_CYCLES;
/* **************** SCENE ********************* */
@@ -1914,39 +1919,30 @@ extern const char *RE_engine_id_CYCLES;
#define MINAFRAME -1048574
#define MINAFRAMEF -1048574.0f
-/* depricate this! */
-#define TESTBASE(v3d, base) ( \
- ((base)->flag & SELECT) && \
- ((base)->lay & v3d->lay) && \
- (((base)->object->restrictflag & OB_RESTRICT_VIEW) == 0))
-#define TESTBASELIB(v3d, base) ( \
- ((base)->flag & SELECT) && \
- ((base)->lay & v3d->lay) && \
+/* deprecate this! */
+#define TESTBASE(base) ( \
+ (((base)->flag & BASE_SELECTED) != 0) && \
+ (((base)->flag & BASE_VISIBLED) != 0))
+#define TESTBASELIB(base) ( \
+ (((base)->flag & BASE_SELECTED) != 0) && \
((base)->object->id.lib == NULL) && \
- (((base)->object->restrictflag & OB_RESTRICT_VIEW) == 0))
-#define TESTBASELIB_BGMODE(v3d, scene, base) ( \
- ((base)->flag & SELECT) && \
- ((base)->lay & (v3d ? v3d->lay : scene->lay)) && \
+ (((base)->flag & BASE_VISIBLED) != 0))
+#define TESTBASELIB_BGMODE(base) ( \
+ (((base)->flag & BASE_SELECTED) != 0) && \
((base)->object->id.lib == NULL) && \
- (((base)->object->restrictflag & OB_RESTRICT_VIEW) == 0))
-#define BASE_EDITABLE_BGMODE(v3d, scene, base) ( \
- ((base)->lay & (v3d ? v3d->lay : scene->lay)) && \
+ (((base)->flag & BASE_VISIBLED) != 0))
+#define BASE_EDITABLE_BGMODE(base) ( \
((base)->object->id.lib == NULL) && \
- (((base)->object->restrictflag & OB_RESTRICT_VIEW) == 0))
-#define BASE_SELECTABLE(v3d, base) ( \
- (base->lay & v3d->lay) && \
- (base->object->restrictflag & (OB_RESTRICT_SELECT | OB_RESTRICT_VIEW)) == 0)
-#define BASE_VISIBLE(v3d, base) ( \
- (base->lay & v3d->lay) && \
- (base->object->restrictflag & OB_RESTRICT_VIEW) == 0)
-#define BASE_VISIBLE_BGMODE(v3d, scene, base) ( \
- (base->lay & (v3d ? v3d->lay : scene->lay)) && \
- (base->object->restrictflag & OB_RESTRICT_VIEW) == 0)
-
-#define FIRSTBASE scene->base.first
-#define LASTBASE scene->base.last
-#define BASACT (scene->basact)
-#define OBACT (BASACT ? BASACT->object: NULL)
+ (((base)->flag & BASE_VISIBLED) != 0))
+#define BASE_SELECTABLE(base) \
+ (((base)->flag & BASE_SELECTABLED) != 0)
+#define BASE_VISIBLE(base) ( \
+ ((base)->flag & BASE_VISIBLED) != 0)
+
+#define FIRSTBASE(_view_layer) ((_view_layer)->object_bases.first)
+#define LASTBASE(_view_layer) ((_view_layer)->object_bases.last)
+#define BASACT(_view_layer) ((_view_layer)->basact)
+#define OBACT(_view_layer) (BASACT(_view_layer) ? BASACT(_view_layer)->object: NULL)
#define V3D_CAMERA_LOCAL(v3d) ((!(v3d)->scenelock && (v3d)->camera) ? (v3d)->camera : NULL)
#define V3D_CAMERA_SCENE(scene, v3d) ((!(v3d)->scenelock && (v3d)->camera) ? (v3d)->camera : (scene)->camera)
diff --git a/source/blender/makesdna/DNA_screen_types.h b/source/blender/makesdna/DNA_screen_types.h
index a7718883438..375641d1115 100644
--- a/source/blender/makesdna/DNA_screen_types.h
+++ b/source/blender/makesdna/DNA_screen_types.h
@@ -30,6 +30,7 @@
#ifndef __DNA_SCREEN_TYPES_H__
#define __DNA_SCREEN_TYPES_H__
+#include "DNA_defs.h"
#include "DNA_listBase.h"
#include "DNA_view2d_types.h"
#include "DNA_vec_types.h"
@@ -46,6 +47,7 @@ struct uiLayout;
struct wmTimer;
struct wmTooltipState;
+
typedef struct bScreen {
ID id;
@@ -53,10 +55,9 @@ typedef struct bScreen {
ListBase edgebase;
ListBase areabase;
ListBase regionbase; /* screen level regions (menus), runtime only */
-
- struct Scene *scene;
- struct Scene *newscene; /* temporary when switching */
-
+
+ struct Scene *scene DNA_DEPRECATED;
+
short winid; /* winid from WM, starts with 1 */
short redraws_flag; /* user-setting for which editors get redrawn during anim playback (used to be time->redraws) */
@@ -79,6 +80,8 @@ typedef struct bScreen {
void *context; /* context callback */
struct wmTooltipState *tool_tip; /* runtime */
+
+ PreviewImage *preview;
} bScreen;
typedef struct ScrVert {
@@ -194,6 +197,13 @@ typedef struct uiList { /* some list UI data need to be saved in file
uiListDyn *dyn_data;
} uiList;
+typedef struct TransformOrientation {
+ struct TransformOrientation *next, *prev;
+ char name[64]; /* MAX_NAME */
+ float mat[3][3];
+ int pad;
+} TransformOrientation;
+
typedef struct uiPreview { /* some preview UI data need to be saved in file */
struct uiPreview *next, *prev;
@@ -268,9 +278,10 @@ typedef struct ARegion {
ListBase ui_previews; /* uiPreview */
ListBase handlers; /* wmEventHandler */
ListBase panels_category; /* Panel categories runtime */
-
+
+ struct wmManipulatorMap *manipulator_map; /* manipulator-map of this region */
struct wmTimer *regiontimer; /* blend in/out */
-
+
char *headerstr; /* use this string to draw info */
void *regiondata; /* XXX 2.50, need spacedata equivalent? */
} ARegion;
diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h
index 693917939ef..077ac4f7aa3 100644
--- a/source/blender/makesdna/DNA_space_types.h
+++ b/source/blender/makesdna/DNA_space_types.h
@@ -126,7 +126,9 @@ typedef struct SpaceButs {
short preview; /* preview is signal to refresh */
/* texture context selector (material, lamp, particles, world, other) */
short texture_context, texture_context_prev;
- char flag, pad[7];
+ char flag;
+ char collection_context;
+ char pad[6];
void *path; /* runtime */
int pathflag, dataicon; /* runtime */
@@ -180,8 +182,10 @@ typedef enum eSpaceButtons_Context {
BCONTEXT_MODIFIER = 10,
BCONTEXT_CONSTRAINT = 11,
BCONTEXT_BONE_CONSTRAINT = 12,
- BCONTEXT_RENDER_LAYER = 13,
-
+ BCONTEXT_VIEW_LAYER = 13,
+ BCONTEXT_COLLECTION = 14,
+ BCONTEXT_WORKSPACE = 15,
+
/* always as last... */
BCONTEXT_TOT
} eSpaceButtons_Context;
@@ -206,6 +210,12 @@ typedef enum eSpaceButtons_Texture_Context {
SB_TEXC_LINESTYLE = 5,
} eSpaceButtons_Texture_Context;
+/* sbuts->collection_context */
+typedef enum eSpaceButtons_Collection_Context {
+ SB_COLLECTION_CTX_VIEW_LAYER = 0,
+ SB_COLLECTION_CTX_GROUP = 1,
+} eSpaceButtons_Collection_Context;
+
/* sbuts->align */
typedef enum eSpaceButtons_Align {
BUT_FREE = 0,
@@ -256,6 +266,9 @@ typedef struct SpaceOops {
struct TreeStoreElem search_tse;
short flag, outlinevis, storeflag, search_flags;
+ int filter;
+ char filter_state;
+ char pad[3];
/* pointers to treestore elements, grouped by (id, type, nr) in hashtable for faster searching */
void *treehash;
@@ -271,23 +284,69 @@ typedef enum eSpaceOutliner_Flag {
SO_SKIP_SORT_ALPHA = (1 << 4),
} eSpaceOutliner_Flag;
+/* SpaceOops->filter */
+typedef enum eSpaceOutliner_Filter {
+ SO_FILTER_SEARCH = (1 << 0),
+ SO_FILTER_ENABLE = (1 << 1),
+ SO_FILTER_NO_OBJECT = (1 << 2),
+ SO_FILTER_NO_OB_CONTENT = (1 << 3), /* Not only mesh, but modifiers, constraints, ... */
+ SO_FILTER_NO_CHILDREN = (1 << 4),
+
+ SO_FILTER_OB_TYPE = (1 << 5),
+ SO_FILTER_NO_OB_MESH = (1 << 6),
+ SO_FILTER_NO_OB_ARMATURE = (1 << 7),
+ SO_FILTER_NO_OB_EMPTY = (1 << 8),
+ SO_FILTER_NO_OB_LAMP = (1 << 9),
+ SO_FILTER_NO_OB_CAMERA = (1 << 10),
+ SO_FILTER_NO_OB_OTHERS = (1 << 11),
+
+ SO_FILTER_OB_STATE = (1 << 12),
+ SO_FILTER_OB_STATE_VISIBLE = (1 << 13), /* Not set via DNA. */
+ SO_FILTER_OB_STATE_SELECTED= (1 << 14), /* Not set via DNA. */
+ SO_FILTER_OB_STATE_ACTIVE = (1 << 15), /* Not set via DNA. */
+ SO_FILTER_NO_COLLECTION = (1 << 16),
+} eSpaceOutliner_Filter;
+
+#define SO_FILTER_NO_OB_ALL (SO_FILTER_NO_OB_MESH | \
+ SO_FILTER_NO_OB_ARMATURE | \
+ SO_FILTER_NO_OB_EMPTY | \
+ SO_FILTER_NO_OB_LAMP | \
+ SO_FILTER_NO_OB_CAMERA | \
+ SO_FILTER_NO_OB_OTHERS)
+
+#define SO_FILTER_ANY (SO_FILTER_NO_OBJECT | \
+ SO_FILTER_NO_OB_CONTENT | \
+ SO_FILTER_NO_CHILDREN | \
+ SO_FILTER_OB_TYPE | \
+ SO_FILTER_OB_STATE | \
+ SO_FILTER_NO_COLLECTION)
+
+/* SpaceOops->filter_state */
+typedef enum eSpaceOutliner_StateFilter {
+ SO_FILTER_OB_VISIBLE = 0,
+ SO_FILTER_OB_SELECTED = 1,
+ SO_FILTER_OB_ACTIVE = 2,
+} eSpaceOutliner_StateFilter;
+
/* SpaceOops->outlinevis */
typedef enum eSpaceOutliner_Mode {
- SO_ALL_SCENES = 0,
- SO_CUR_SCENE = 1,
- SO_VISIBLE = 2,
- SO_SELECTED = 3,
- SO_ACTIVE = 4,
- SO_SAME_TYPE = 5,
- SO_GROUPS = 6,
- SO_LIBRARIES = 7,
- /* SO_VERSE_SESSION = 8, */ /* deprecated! */
- /* SO_VERSE_MS = 9, */ /* deprecated! */
- SO_SEQUENCE = 10,
- SO_DATABLOCKS = 11,
- SO_USERDEF = 12,
- /* SO_KEYMAP = 13, */ /* deprecated! */
- SO_ID_ORPHANS = 14,
+ SO_SCENES = 0,
+ /* SO_CUR_SCENE = 1, */ /* deprecated! */
+ /* SO_VISIBLE = 2, */ /* deprecated! */
+ /* SO_SELECTED = 3, */ /* deprecated! */
+ /* SO_ACTIVE = 4, */ /* deprecated! */
+ /* SO_SAME_TYPE = 5, */ /* deprecated! */
+ SO_GROUPS = 6,
+ SO_LIBRARIES = 7,
+ /* SO_VERSE_SESSION = 8, */ /* deprecated! */
+ /* SO_VERSE_MS = 9, */ /* deprecated! */
+ SO_SEQUENCE = 10,
+ SO_DATABLOCKS = 11,
+ /* SO_USERDEF = 12, */ /* deprecated! */
+ /* SO_KEYMAP = 13, */ /* deprecated! */
+ SO_ID_ORPHANS = 14,
+ SO_VIEW_LAYER = 15,
+ SO_COLLECTIONS = 16,
} eSpaceOutliner_Mode;
/* SpaceOops->storeflag */
@@ -715,7 +774,7 @@ typedef enum eFileSel_Params_Flag {
FILE_LINK = (1 << 2),
FILE_HIDE_DOT = (1 << 3),
FILE_AUTOSELECT = (1 << 4),
- FILE_ACTIVELAY = (1 << 5),
+ FILE_ACTIVE_COLLECTION = (1 << 5),
/* FILE_ATCURSOR = (1 << 6), */ /* deprecated */
FILE_DIRSEL_ONLY = (1 << 7),
FILE_FILTER = (1 << 8),
@@ -944,7 +1003,7 @@ typedef enum eSpaceImage_Sticky {
/* SpaceImage->flag */
typedef enum eSpaceImage_Flag {
/* SI_BE_SQUARE = (1 << 0), */ /* deprecated */
- SI_EDITTILE = (1 << 1), /* XXX - not used but should be? */
+/* SI_EDITTILE = (1 << 1), */ /* deprecated */
SI_CLIP_UV = (1 << 2),
/* SI_DRAWTOOL = (1 << 3), */ /* deprecated */
SI_NO_DRAWFACES = (1 << 4),
diff --git a/source/blender/makesdna/DNA_text_types.h b/source/blender/makesdna/DNA_text_types.h
index 17ef098a3bb..0a9b8c320b5 100644
--- a/source/blender/makesdna/DNA_text_types.h
+++ b/source/blender/makesdna/DNA_text_types.h
@@ -62,7 +62,7 @@ typedef struct Text {
char *undo_buf;
void *pad;
int undo_pos, undo_len;
-
+
double mtime;
} Text;
diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h
index a7759a1d143..3da0bdb6ca2 100644
--- a/source/blender/makesdna/DNA_userdef_types.h
+++ b/source/blender/makesdna/DNA_userdef_types.h
@@ -140,6 +140,8 @@ typedef struct uiWidgetStateColors {
char inner_key_sel[4];
char inner_driven[4];
char inner_driven_sel[4];
+ char inner_overridden[4];
+ char inner_overridden_sel[4];
float blend, pad;
} uiWidgetStateColors;
@@ -162,7 +164,7 @@ typedef struct ThemeUI {
/* Interface Elements (buttons, menus, icons) */
uiWidgetColors wcol_regular, wcol_tool, wcol_text;
uiWidgetColors wcol_radio, wcol_option, wcol_toggle;
- uiWidgetColors wcol_num, wcol_numslider;
+ uiWidgetColors wcol_num, wcol_numslider, wcol_tab;
uiWidgetColors wcol_menu, wcol_pulldown, wcol_menu_back, wcol_menu_item, wcol_tooltip;
uiWidgetColors wcol_box, wcol_scroll, wcol_progress, wcol_list_item, wcol_pie_menu;
@@ -183,6 +185,14 @@ typedef struct ThemeUI {
/* Axis Colors */
char xaxis[4], yaxis[4], zaxis[4];
+
+ /* Manipulator Colors. */
+ char manipulator_hi[4];
+ char manipulator_primary[4];
+ char manipulator_secondary[4];
+ char manipulator_a[4];
+ char manipulator_b[4];
+ char pad2[4];
} ThemeUI;
/* try to put them all in one, if needed a special struct can be created as well
@@ -501,7 +511,8 @@ typedef struct UserDef {
short gp_settings; /* eGP_UserdefSettings */
short tb_leftmouse, tb_rightmouse;
struct SolidLight light[3];
- short tw_hotspot, tw_flag, tw_handlesize, tw_size;
+ short manipulator_flag, manipulator_size;
+ int pad6;
short textimeout, texcollectrate;
short wmdrawmethod; /* eWM_DrawMethod */
short dragthreshold;
@@ -607,7 +618,7 @@ typedef enum eUserPref_Flag {
USER_FLAG_DEPRECATED_1 = (1 << 1), /* cleared */
USER_FLAG_DEPRECATED_2 = (1 << 2), /* cleared */
USER_FLAG_DEPRECATED_3 = (1 << 3), /* cleared */
- USER_SCENEGLOBAL = (1 << 4),
+/* USER_SCENEGLOBAL = (1 << 4), deprecated */
USER_TRACKBALL = (1 << 5),
USER_FLAG_DEPRECATED_6 = (1 << 6), /* cleared */
USER_FLAG_DEPRECATED_7 = (1 << 7), /* cleared */
@@ -817,6 +828,12 @@ typedef enum eGP_UserdefSettings {
GP_PAINT_DOSIMPLIFY = (1 << 1),
} eGP_UserdefSettings;
+enum {
+ USER_MANIPULATOR_DRAW = (1 << 0),
+ USER_MANIPULATOR_DRAW_NAVIGATE = (1 << 1),
+ USER_MANIPULATOR_SHADED = (1 << 8),
+};
+
/* Color Picker Types.
* UserDef.color_picker_type */
typedef enum eColorPicker_Types {
diff --git a/source/blender/makesdna/DNA_view3d_types.h b/source/blender/makesdna/DNA_view3d_types.h
index b9894d46b5b..619f9fd4f6e 100644
--- a/source/blender/makesdna/DNA_view3d_types.h
+++ b/source/blender/makesdna/DNA_view3d_types.h
@@ -45,6 +45,7 @@ struct SmoothView3DStore;
struct wmTimer;
struct Material;
struct GPUFX;
+struct GPUViewport;
/* This is needed to not let VC choke on near and far... old
* proprietary MS extensions... */
@@ -65,21 +66,12 @@ struct GPUFX;
/* The near/far thing is a Win EXCEPTION. Thus, leave near/far in the
* code, and patch for windows. */
-
-/* Background Picture in 3D-View */
-typedef struct BGpic {
- struct BGpic *next, *prev;
-
- struct Image *ima;
- struct ImageUser iuser;
- struct MovieClip *clip;
- struct MovieClipUser cuser;
- float xof, yof, size, blend, rotation;
- short view;
- short flag;
- short source;
- char pad[6];
-} BGpic;
+
+typedef struct View3DDebug {
+ float znear, zfar;
+ char background;
+ char pad[7];
+} View3DDebug;
/* ********************************* */
@@ -111,8 +103,12 @@ typedef struct RegionView3D {
struct wmTimer *smooth_timer;
- /* transform widget matrix */
+ /* transform manipulator matrix */
float twmat[4][4];
+ /* min/max dot product on twmat xyz axis. */
+ float tw_axis_min[3], tw_axis_max[3];
+ float tw_axis_matrix[3][3];
+ char _pad[4];
float viewquat[4]; /* view rotation, must be kept normalized */
float dist; /* distance from 'ofs' along -viewinv[2] vector, where result is negative as is 'ofs' */
@@ -130,7 +126,7 @@ typedef struct RegionView3D {
char pad[3];
float ofs_lock[2]; /* normalized offset for locked view: (-1, -1) bottom left, (1, 1) upper right */
- short twdrawflag;
+ short twdrawflag; /* XXX can easily get rid of this (Julian) */
short rflag;
@@ -147,6 +143,7 @@ typedef struct RegionView3D {
float rot_axis[3];
struct GPUFX *compositor;
+ struct GPUViewport *viewport;
} RegionView3D;
/* 3D ViewPort Struct */
@@ -173,9 +170,6 @@ typedef struct View3D {
struct Object *camera, *ob_centre;
rctf render_border;
- struct ListBase bgpicbase;
- struct BGpic *bgpic DNA_DEPRECATED; /* deprecated, use bgpicbase, only kept for do_versions(...) */
-
struct View3D *localvd; /* allocated backup of its self while in localview */
char ob_centre_bone[64]; /* optional string for armature bone to define center, MAXBONENAME */
@@ -202,7 +196,7 @@ typedef struct View3D {
short gridsubdiv; /* Number of subdivisions in the grid between each highlighted grid line */
char gridflag;
- /* transform widget info */
+ /* transform manipulator info */
char twtype, twmode, twflag;
short flag3;
@@ -217,8 +211,9 @@ typedef struct View3D {
char multiview_eye; /* multiview current eye - for internal use */
- /* built-in shader effects (eGPUFXFlags) */
- char pad3[4];
+ /* The active custom transform orientation of this 3D view. */
+ short custom_orientation_index;
+ char pad3[2];
/* note, 'fx_settings.dof' is currently _not_ allocated,
* instead set (temporarily) from camera */
@@ -245,6 +240,7 @@ typedef struct View3D {
short prev_drawtype;
short pad1;
float pad2;
+ View3DDebug debug;
} View3D;
@@ -255,7 +251,7 @@ typedef struct View3D {
/* View3D->flag (short) */
/*#define V3D_DISPIMAGE 1*/ /*UNUSED*/
-#define V3D_DISPBGPICS 2
+/*#define V3D_DISPBGPICS 2*/ /* UNUSED */
#define V3D_HIDE_HELPLINES 4
#define V3D_INVALID_BACKBUF 8
@@ -315,12 +311,19 @@ typedef struct View3D {
#define V3D_SOLID_MATCAP (1 << 12) /* user flag */
#define V3D_SHOW_SOLID_MATCAP (1 << 13) /* runtime flag */
#define V3D_OCCLUDE_WIRE (1 << 14)
-#define V3D_SHADELESS_TEX (1 << 15)
+#define V3D_SHOW_MODE_SHADE_OVERRIDE (1 << 15)
/* View3d->flag3 (short) */
#define V3D_SHOW_WORLD (1 << 0)
+/* View3d->debug.background */
+enum {
+ V3D_DEBUG_BACKGROUND_NONE = (1 << 0),
+ V3D_DEBUG_BACKGROUND_GRADIENT = (1 << 1),
+ V3D_DEBUG_BACKGROUND_WORLD = (1 << 2),
+};
+
/* View3D->around */
enum {
/* center of the bounding box */
@@ -362,38 +365,13 @@ enum {
#define V3D_MANIP_NORMAL 2
#define V3D_MANIP_VIEW 3
#define V3D_MANIP_GIMBAL 4
-#define V3D_MANIP_CUSTOM 5 /* anything of value 5 or higher is custom */
-
-/* View3d->twflag */
- /* USE = user setting, DRAW = based on selection */
-#define V3D_USE_MANIPULATOR 1
-#define V3D_DRAW_MANIPULATOR 2
-/* #define V3D_CALC_MANIPULATOR 4 */ /*UNUSED*/
+#define V3D_MANIP_CUSTOM 5
-/* BGPic->flag */
-/* may want to use 1 for select ? */
+/* View3d->twflag (also) */
enum {
- V3D_BGPIC_EXPANDED = (1 << 1),
- V3D_BGPIC_CAMERACLIP = (1 << 2),
- V3D_BGPIC_DISABLED = (1 << 3),
- V3D_BGPIC_FOREGROUND = (1 << 4),
-
- /* Camera framing options */
- V3D_BGPIC_CAMERA_ASPECT = (1 << 5), /* don't stretch to fit the camera view */
- V3D_BGPIC_CAMERA_CROP = (1 << 6), /* crop out the image */
-
- /* Axis flip options */
- V3D_BGPIC_FLIP_X = (1 << 7),
- V3D_BGPIC_FLIP_Y = (1 << 8),
+ V3D_MANIPULATOR_DRAW = (1 << 0),
};
-#define V3D_BGPIC_EXPANDED (V3D_BGPIC_EXPANDED | V3D_BGPIC_CAMERACLIP)
-
-/* BGPic->source */
-/* may want to use 1 for select ?*/
-#define V3D_BGPIC_IMAGE 0
-#define V3D_BGPIC_MOVIE 1
-
#define RV3D_CAMZOOM_MIN -30
#define RV3D_CAMZOOM_MAX 600
diff --git a/source/blender/makesdna/DNA_windowmanager_types.h b/source/blender/makesdna/DNA_windowmanager_types.h
index cf8dbdd8c63..9ec34ac3823 100644
--- a/source/blender/makesdna/DNA_windowmanager_types.h
+++ b/source/blender/makesdna/DNA_windowmanager_types.h
@@ -41,6 +41,7 @@
struct wmWindowManager;
struct wmWindow;
+struct wmMsgBus;
struct wmEvent;
struct wmGesture;
struct wmOperatorType;
@@ -156,12 +157,15 @@ typedef struct wmWindowManager {
char is_interface_locked; /* indicates whether interface is locked for user interaction */
char par[7];
+
+ struct wmMsgBus *message_bus;
+
} wmWindowManager;
/* wmWindowManager.initialized */
enum {
- WM_INIT_WINDOW = (1<<0),
- WM_INIT_KEYMAP = (1<<1),
+ WM_WINDOW_IS_INITIALIZED = (1<<0),
+ WM_KEYMAP_IS_INITIALIZED = (1<<1),
};
/* IME is win32 only! */
@@ -177,9 +181,12 @@ typedef struct wmWindow {
void *ghostwin; /* don't want to include ghost.h stuff */
- struct bScreen *screen; /* active screen */
- struct bScreen *newscreen; /* temporary when switching */
- char screenname[64]; /* MAX_ID_NAME for matching window with active screen after file read */
+ struct Scene *scene; /* The scene displayed in this window. */
+ struct Scene *new_scene; /* temporary when switching */
+
+ struct WorkSpaceInstanceHook *workspace_hook;
+
+ struct bScreen *screen DNA_DEPRECATED;
short posx, posy, sizex, sizey; /* window coords */
short windowstate; /* borderless, full */
diff --git a/source/blender/makesdna/DNA_workspace_types.h b/source/blender/makesdna/DNA_workspace_types.h
new file mode 100644
index 00000000000..dbcc278ea15
--- /dev/null
+++ b/source/blender/makesdna/DNA_workspace_types.h
@@ -0,0 +1,159 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file DNA_workspace_types.h
+ * \ingroup DNA
+ *
+ * Use API in BKE_workspace.h!
+ * Struct members marked with DNA_PRIVATE_WORKSPACE will throw a
+ * warning saying it's deprecated when used outside of workspace.c.
+ */
+
+#ifndef __DNA_WORKSPACE_TYPES_H__
+#define __DNA_WORKSPACE_TYPES_H__
+
+#include "DNA_scene_types.h"
+
+/* Same logic as DNA_DEPRECATED_ALLOW, but throws 'deprecated'
+ * warnings if DNA_PRIVATE_WORKSPACE_ALLOW is not defined */
+#ifdef DNA_PRIVATE_WORKSPACE_ALLOW
+ /* allow use of private items */
+# define DNA_PRIVATE_WORKSPACE
+#else
+# ifndef DNA_PRIVATE_WORKSPACE
+# define DNA_PRIVATE_WORKSPACE DNA_PRIVATE_ATTR
+# endif
+#endif
+
+#ifdef DNA_PRIVATE_READ_WRITE_ALLOW
+# define DNA_PRIVATE_WORKSPACE_READ_WRITE
+#else
+# ifndef DNA_PRIVATE_WORKSPACE_READ_WRITE
+# define DNA_PRIVATE_WORKSPACE_READ_WRITE DNA_PRIVATE_WORKSPACE
+# endif
+#endif
+
+/* Currently testing, allow to disable. */
+#define USE_WORKSPACE_TOOL
+
+typedef struct bToolDef {
+ /* either the keymap AND/OR manipulator_group must be defined. */
+ char keymap[64];
+ char manipulator_group[64];
+ int spacetype;
+ /* index when a tool is a member of a group */
+ int index;
+} bToolDef;
+
+/**
+ * \brief Wrapper for bScreen.
+ *
+ * bScreens are IDs and thus stored in a main list-base. We also want to store a list-base of them within the
+ * workspace (so each workspace can have its own set of screen-layouts) which would mess with the next/prev pointers.
+ * So we use this struct to wrap a bScreen pointer with another pair of next/prev pointers.
+ */
+typedef struct WorkSpaceLayout {
+ struct WorkSpaceLayout *next, *prev;
+
+ struct bScreen *screen DNA_PRIVATE_WORKSPACE;
+ /* The name of this layout, we override the RNA name of the screen with this (but not ID name itself) */
+ char name[64] DNA_PRIVATE_WORKSPACE; /* MAX_NAME */
+} WorkSpaceLayout;
+
+typedef struct WorkSpace {
+ ID id;
+
+ ListBase layouts DNA_PRIVATE_WORKSPACE; /* WorkSpaceLayout */
+ /* Store for each hook (so for each window) which layout has
+ * been activated the last time this workspace was visible. */
+ ListBase hook_layout_relations DNA_PRIVATE_WORKSPACE_READ_WRITE; /* WorkSpaceDataRelation */
+ ListBase scene_viewlayer_relations DNA_PRIVATE_WORKSPACE_READ_WRITE; /* WorkSpaceDataRelation */
+
+ /* Custom transform orientations */
+ ListBase transform_orientations DNA_PRIVATE_WORKSPACE;
+
+ int pad;
+ int flags DNA_PRIVATE_WORKSPACE; /* enum eWorkSpaceFlags */
+
+ short object_mode, object_mode_restore;
+ char _pad[4];
+
+ /* should be: '#ifdef USE_WORKSPACE_TOOL'. */
+ bToolDef tool;
+
+ struct ViewLayer *view_layer DNA_DEPRECATED;
+ struct ViewRender view_render;
+} WorkSpace;
+
+/* internal struct, but exported for read/write */
+#if defined(DNA_PRIVATE_READ_WRITE_ALLOW) || defined(DNA_PRIVATE_WORKSPACE_ALLOW)
+
+/**
+ * Generic (and simple/primitive) struct for storing a history of assignments/relations
+ * of workspace data to non-workspace data in a listbase inside the workspace.
+ *
+ * Using this we can restore the old state of a workspace if the user switches back to it.
+ *
+ * Usage
+ * =====
+ * When activating a workspace, it should activate the screen-layout that was active in that
+ * workspace before *in this window*.
+ * More concretely:
+ * * There are two windows, win1 and win2.
+ * * Both show workspace ws1, but both also had workspace ws2 activated at some point before.
+ * * Last time ws2 was active in win1, screen-layout sl1 was activated.
+ * * Last time ws2 was active in win2, screen-layout sl2 was activated.
+ * * When changing from ws1 to ws2 in win1, screen-layout sl1 should be activated again.
+ * * When changing from ws1 to ws2 in win2, screen-layout sl2 should be activated again.
+ * So that means we have to store the active screen-layout in a per workspace, per window
+ * relation. This struct is used to store an active screen-layout for each window within the
+ * workspace.
+ * To find the screen-layout to activate for this window-workspace combination, simply lookup
+ * the WorkSpaceDataRelation with the workspace-hook of the window set as parent.
+ */
+typedef struct WorkSpaceDataRelation {
+ struct WorkSpaceDataRelation *next, *prev;
+
+ /* the data used to identify the relation (e.g. to find screen-layout (= value) from/for a hook) */
+ void *parent;
+ /* The value for this parent-data/workspace relation */
+ void *value;
+} WorkSpaceDataRelation;
+
+#endif /* DNA_PRIVATE_WORKSPACE_READ_WRITE */
+
+/**
+ * Little wrapper to store data that is going to be per window, but comming from the workspace.
+ * It allows us to keep workspace and window data completely separate.
+ */
+typedef struct WorkSpaceInstanceHook {
+ WorkSpace *active DNA_PRIVATE_WORKSPACE;
+ struct WorkSpaceLayout *act_layout DNA_PRIVATE_WORKSPACE;
+
+ /* Needed because we can't change workspaces/layouts in running handler loop, it would break context. */
+ WorkSpace *temp_workspace_store;
+ struct WorkSpaceLayout *temp_layout_store;
+} WorkSpaceInstanceHook;
+
+typedef enum eWorkSpaceFlags {
+ WORKSPACE_USE_SCENE_SETTINGS = (1 << 0),
+} eWorkSpaceFlags;
+
+#endif /* __DNA_WORKSPACE_TYPES_H__ */
diff --git a/source/blender/makesdna/DNA_world_types.h b/source/blender/makesdna/DNA_world_types.h
index 5fd4c9fd407..3361e50e257 100644
--- a/source/blender/makesdna/DNA_world_types.h
+++ b/source/blender/makesdna/DNA_world_types.h
@@ -120,7 +120,8 @@ typedef struct World {
struct Ipo *ipo DNA_DEPRECATED; /* old animation system, deprecated for 2.5 */
struct MTex *mtex[18]; /* MAX_MTEX */
- short pr_texture, use_nodes, pad[2];
+ short pr_texture, use_nodes, pad;
+ short update_flag; /* XXX temporary flag waiting for depsgraph proper tagging */
/* previews */
struct PreviewImage *preview;
@@ -128,6 +129,7 @@ typedef struct World {
/* nodes */
struct bNodeTree *nodetree;
+ float mistend, pad1; /* runtime : miststa + mistdist, used for drawing camera */
ListBase gpumaterial; /* runtime */
} World;
@@ -161,6 +163,12 @@ enum {
WO_AOMUL = 3,
};
+enum {
+ WO_MIST_QUADRATIC = 0,
+ WO_MIST_LINEAR = 1,
+ WO_MIST_INVERSE_QUADRATIC = 2,
+};
+
/* ao_samp_method - methods for sampling the AO hemi */
#define WO_AOSAMP_CONSTANT 0
#define WO_AOSAMP_HALTON 1
diff --git a/source/blender/makesdna/intern/dna_genfile.c b/source/blender/makesdna/intern/dna_genfile.c
index dec93f97c6c..199bb75d099 100644
--- a/source/blender/makesdna/intern/dna_genfile.c
+++ b/source/blender/makesdna/intern/dna_genfile.c
@@ -313,10 +313,52 @@ BLI_INLINE const char *pad_up_4(const char *ptr)
}
/**
+ * Temporary DNA doversion for files that were created with Blender 2.80
+ * between October 2016, and November 2017 (>=280.0 and < 280.2).
+ *
+ * /note This would be way more efficient if we can get the version from SDNA
+ * So we could return true if version == 280 && subversion < 2.
+ *
+ * Returns true if we need to do the DNA renaming.
+ */
+static bool need_doversion_280(SDNA *sdna, int *data, const bool data_alloc)
+{
+ if (data_alloc == false) {
+ return false;
+ }
+
+ bool active_layer = false, render_layers = false;
+
+ const char *cp = (char *)data;
+ for (int nr = 0; nr < sdna->nr_names; nr++) {
+ if (strcmp(cp, "active_layer") == 0) {
+ active_layer = true;
+ if (active_layer && render_layers) {
+ return true;
+ }
+ }
+ else if (strcmp(cp, "render_layers") == 0) {
+ render_layers = true;
+ if (active_layer && render_layers) {
+ return true;
+ }
+ }
+
+ while (*cp) cp++;
+ cp++;
+ }
+
+ /* If someone adds only one of them to the DNA, don't! */
+ BLI_assert(!(active_layer || render_layers));
+ return false;
+}
+
+/**
* In sdna->data the data, now we convert that to something understandable
*/
static bool init_structDNA(
SDNA *sdna, bool do_endian_swap,
+ bool data_alloc,
const char **r_error_message)
{
int *data, *verg, gravity_fix = -1;
@@ -361,6 +403,10 @@ static bool init_structDNA(
*r_error_message = "NAME error in SDNA file";
return false;
}
+
+ /* Temporary DNA doversion for files that were created with Blender 2.80
+ * between 280.0 and 280.2. */
+ const bool doversion_280 = need_doversion_280(sdna, data, data_alloc);
cp = (char *)data;
for (int nr = 0; nr < sdna->nr_names; nr++) {
@@ -375,6 +421,28 @@ static bool init_structDNA(
gravity_fix = nr;
}
}
+ else if (doversion_280) {
+ if (strcmp(cp, "*render_layer") == 0) {
+ /* WorkSpace. */
+ sdna->names[nr] = "*view_layer";
+ }
+ else if (strcmp(cp, "*scene_layer") == 0) {
+ /* ParticleEditSettings. */
+ sdna->names[nr] = "*view_layer";
+ }
+ else if (strcmp(cp, "render_layers") == 0) {
+ /* Scene. */
+ sdna->names[nr] = "view_layers";
+ }
+ else if (strcmp(cp, "active_layer") == 0) {
+ /* Scene. */
+ sdna->names[nr] = "active_view_layer";
+ }
+ else if (strcmp(cp, "*cur_render_layer") == 0) {
+ /* FileGlobal. */
+ sdna->names[nr] = "*cur_view_layer";
+ }
+ }
while (*cp) cp++;
cp++;
@@ -412,6 +480,14 @@ static bool init_structDNA(
/* struct Screen was already used by X, 'bScreen' replaces the old IrisGL 'Screen' struct */
if (strcmp("bScreen", cp) == 0) sdna->types[nr] = cp + 1;
}
+ else if (doversion_280) {
+ if (strcmp(cp, "SceneLayer") == 0) {
+ sdna->types[nr] = "ViewLayer";
+ }
+ else if (strcmp(cp, "SceneLayerEngineData") == 0) {
+ sdna->types[nr] = "ViewLayerEngineData";
+ }
+ }
while (*cp) cp++;
cp++;
@@ -554,7 +630,7 @@ SDNA *DNA_sdna_from_data(
sdna->data_alloc = data_alloc;
- if (init_structDNA(sdna, do_endian_swap, &error_message)) {
+ if (init_structDNA(sdna, do_endian_swap, data_alloc, &error_message)) {
return sdna;
}
else {
diff --git a/source/blender/makesdna/intern/makesdna.c b/source/blender/makesdna/intern/makesdna.c
index 92d54e25829..f0f1c2210f0 100644
--- a/source/blender/makesdna/intern/makesdna.c
+++ b/source/blender/makesdna/intern/makesdna.c
@@ -130,6 +130,10 @@ static const char *includefiles[] = {
"DNA_freestyle_types.h",
"DNA_linestyle_types.h",
"DNA_cachefile_types.h",
+ "DNA_layer_types.h",
+ "DNA_workspace_types.h",
+ "DNA_lightprobe_types.h",
+
/* see comment above before editing! */
/* empty string to indicate end of includefiles */
@@ -504,6 +508,17 @@ static int preprocess_include(char *maindata, int len)
a -= 13;
cp += 13;
}
+ else if (strncmp("DNA_PRIVATE_WORKSPACE", cp, 21) == 0) {
+ /* Check for DNA_PRIVATE_WORKSPACE_READ_WRITE */
+ if (strncmp("_READ_WRITE", cp + 21, 11) == 0) {
+ a -= 31;
+ cp += 31;
+ }
+ else {
+ a -= 20;
+ cp += 20;
+ }
+ }
else {
md[0] = cp[0];
md++;
@@ -1342,4 +1357,8 @@ int main(int argc, char **argv)
#include "DNA_freestyle_types.h"
#include "DNA_linestyle_types.h"
#include "DNA_cachefile_types.h"
+#include "DNA_layer_types.h"
+#include "DNA_workspace_types.h"
+#include "DNA_lightprobe_types.h"
+
/* end of list */
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h
index e512aebfa71..816a472559f 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -39,6 +39,9 @@ extern "C" {
struct bContext;
struct ID;
+struct IDOverrideStatic;
+struct IDOverrideStaticProperty;
+struct IDOverrideStaticPropertyOperation;
struct ListBase;
struct Main;
struct ReportList;
@@ -106,6 +109,7 @@ extern StructRNA RNA_ClothCollisionSettings;
extern StructRNA RNA_ClothModifier;
extern StructRNA RNA_ClothSettings;
extern StructRNA RNA_CloudsTexture;
+extern StructRNA RNA_CollectionEngineSettings;
extern StructRNA RNA_CollectionProperty;
extern StructRNA RNA_CollisionModifier;
extern StructRNA RNA_CollisionSensor;
@@ -204,6 +208,8 @@ extern StructRNA RNA_CurveMapPoint;
extern StructRNA RNA_CurveMapping;
extern StructRNA RNA_CurveModifier;
extern StructRNA RNA_CurvePoint;
+extern StructRNA RNA_Depsgraph;
+extern StructRNA RNA_DepsgraphIter;
extern StructRNA RNA_DampedTrackConstraint;
extern StructRNA RNA_DataTransferModifier;
extern StructRNA RNA_DecimateModifier;
@@ -233,6 +239,7 @@ extern StructRNA RNA_EnvironmentMapTexture;
extern StructRNA RNA_Event;
extern StructRNA RNA_ExplodeModifier;
extern StructRNA RNA_ExpressionController;
+extern StructRNA RNA_FaceMap;
extern StructRNA RNA_FCurve;
extern StructRNA RNA_FCurveSample;
extern StructRNA RNA_FFmpegSettings;
@@ -320,6 +327,8 @@ extern StructRNA RNA_LaplacianSmoothModifier;
extern StructRNA RNA_Lattice;
extern StructRNA RNA_LatticeModifier;
extern StructRNA RNA_LatticePoint;
+extern StructRNA RNA_LayerCollection;
+extern StructRNA RNA_LayerCollectionOverride;
extern StructRNA RNA_Library;
extern StructRNA RNA_LimitDistanceConstraint;
extern StructRNA RNA_LimitLocationConstraint;
@@ -373,6 +382,8 @@ extern StructRNA RNA_LineStyleThicknessModifier_Tangent;
extern StructRNA RNA_LockedTrackConstraint;
extern StructRNA RNA_Macro;
extern StructRNA RNA_MagicTexture;
+extern StructRNA RNA_Manipulator;
+extern StructRNA RNA_ManipulatorProperties;
extern StructRNA RNA_MarbleTexture;
extern StructRNA RNA_MaskModifier;
extern StructRNA RNA_MaskSequence;
@@ -485,6 +496,7 @@ extern StructRNA RNA_PointLamp;
extern StructRNA RNA_PointerProperty;
extern StructRNA RNA_Pose;
extern StructRNA RNA_PoseBone;
+extern StructRNA RNA_LightProbe;
extern StructRNA RNA_Property;
extern StructRNA RNA_PropertyGroup;
extern StructRNA RNA_PropertyGroupItem;
@@ -500,6 +512,8 @@ extern StructRNA RNA_RenderLayer;
extern StructRNA RNA_RenderPass;
extern StructRNA RNA_RenderResult;
extern StructRNA RNA_RenderSettings;
+extern StructRNA RNA_RenderEngineSettings;
+extern StructRNA RNA_RenderEngineSettingsClay;
extern StructRNA RNA_RigidBodyWorld;
extern StructRNA RNA_RigidBodyObject;
extern StructRNA RNA_RigidBodyJointConstraint;
@@ -697,11 +711,14 @@ extern StructRNA RNA_WaveModifier;
extern StructRNA RNA_VertexWeightEditModifier;
extern StructRNA RNA_VertexWeightMixModifier;
extern StructRNA RNA_VertexWeightProximityModifier;
+extern StructRNA RNA_ViewLayer;
+extern StructRNA RNA_ViewRenderSettings;
extern StructRNA RNA_Window;
extern StructRNA RNA_WindowManager;
extern StructRNA RNA_WipeSequence;
extern StructRNA RNA_WireframeModifier;
extern StructRNA RNA_WoodTexture;
+extern StructRNA RNA_WorkSpace;
extern StructRNA RNA_World;
extern StructRNA RNA_WorldAmbientOcclusion;
extern StructRNA RNA_WorldLighting;
@@ -1031,7 +1048,7 @@ char *RNA_path_property_py(struct PointerRNA *ptr, struct PropertyRNA *prop, int
* call RNA_struct_find_property. The names have to exist as RNA properties
* for the type in the pointer, if they do not exist an error will be printed.
*
- * There is no support for pointers and collections here yet, these can be
+ * There is no support for pointers and collections here yet, these can be
* added when ID properties support them. */
int RNA_boolean_get(PointerRNA *ptr, const char *name);
@@ -1223,17 +1240,68 @@ StructRNA *ID_code_to_RNA_type(short idcode);
void _RNA_warning(const char *format, ...) ATTR_PRINTF_FORMAT(1, 2);
-/* Equals test (skips pointers and collections)
- * is_strict false assumes uninitialized properties are equal */
-
-typedef enum eRNAEqualsMode {
- RNA_EQ_STRICT, /* set/unset ignored */
- RNA_EQ_UNSET_MATCH_ANY, /* unset property matches anything */
- RNA_EQ_UNSET_MATCH_NONE /* unset property never matches set property */
-} eRNAEqualsMode;
-
-bool RNA_property_equals(struct PointerRNA *a, struct PointerRNA *b, struct PropertyRNA *prop, eRNAEqualsMode mode);
-bool RNA_struct_equals(struct PointerRNA *a, struct PointerRNA *b, eRNAEqualsMode mode);
+/* Equals test. */
+
+/* Note: In practice, EQ_STRICT and EQ_COMPARE have same behavior currently, and will yield same result. */
+typedef enum eRNACompareMode {
+ /* Only care about equality, not full comparison. */
+ RNA_EQ_STRICT, /* set/unset ignored */
+ RNA_EQ_UNSET_MATCH_ANY, /* unset property matches anything */
+ RNA_EQ_UNSET_MATCH_NONE, /* unset property never matches set property */
+ /* Full comparison. */
+ RNA_EQ_COMPARE,
+} eRNACompareMode;
+
+bool RNA_property_equals(struct PointerRNA *ptr_a, struct PointerRNA *ptr_b, struct PropertyRNA *prop, eRNACompareMode mode);
+bool RNA_struct_equals(struct PointerRNA *ptr_a, struct PointerRNA *ptr_b, eRNACompareMode mode);
+
+/* Override. */
+
+/* flags for RNA_struct_override_matches. */
+typedef enum eRNAOverrideMatch {
+ /* Do not compare properties that are not overridable. */
+ RNA_OVERRIDE_COMPARE_IGNORE_NON_OVERRIDABLE = 1 << 0,
+ /* Do not compare properties that are already overridden. */
+ RNA_OVERRIDE_COMPARE_IGNORE_OVERRIDDEN = 1 << 1,
+
+ /* Create new property override if needed and possible. */
+ RNA_OVERRIDE_COMPARE_CREATE = 1 << 16,
+ /* Restore property's value(s) to reference ones if needed and possible. */
+ RNA_OVERRIDE_COMPARE_RESTORE = 1 << 17,
+} eRNAOverrideMatch;
+
+typedef enum eRNAOverrideMatchResult {
+ /* Some new property overrides were created to take into account differences between local and reference. */
+ RNA_OVERRIDE_MATCH_RESULT_CREATED = 1 << 0,
+ /* Some properties were reset to reference values. */
+ RNA_OVERRIDE_MATCH_RESULT_RESTORED = 1 << 1,
+} eRNAOverrideMatchResult;
+
+bool RNA_struct_override_matches(
+ struct PointerRNA *ptr_local, struct PointerRNA *ptr_reference, const char *root_path,
+ struct IDOverrideStatic *override, const eRNAOverrideMatch flags,
+ eRNAOverrideMatchResult *r_report_flags);
+
+bool RNA_struct_override_store(
+ struct PointerRNA *ptr_local, struct PointerRNA *ptr_reference, PointerRNA *ptr_storage,
+ struct IDOverrideStatic *override);
+
+void RNA_struct_override_apply(
+ struct PointerRNA *ptr_local, struct PointerRNA *ptr_reference, struct PointerRNA *ptr_storage,
+ struct IDOverrideStatic *override);
+
+struct IDOverrideStaticProperty *RNA_property_override_property_find(PointerRNA *ptr, PropertyRNA *prop);
+struct IDOverrideStaticProperty *RNA_property_override_property_get(PointerRNA *ptr, PropertyRNA *prop, bool *r_created);
+
+struct IDOverrideStaticPropertyOperation *RNA_property_override_property_operation_find(
+ PointerRNA *ptr, PropertyRNA *prop, const int index, const bool strict, bool *r_strict);
+struct IDOverrideStaticPropertyOperation *RNA_property_override_property_operation_get(
+ PointerRNA *ptr, PropertyRNA *prop, const short operation, const int index,
+ const bool strict, bool *r_strict, bool *r_created);
+
+void RNA_property_override_status(
+ PointerRNA *ptr, PropertyRNA *prop, const int index,
+ bool *r_overridable, bool *r_overridden, bool *r_mandatory, bool *r_locked);
#ifdef __cplusplus
}
diff --git a/source/blender/makesrna/RNA_define.h b/source/blender/makesrna/RNA_define.h
index 5f71f2ccdcf..4e32651d356 100644
--- a/source/blender/makesrna/RNA_define.h
+++ b/source/blender/makesrna/RNA_define.h
@@ -37,6 +37,14 @@
extern "C" {
#endif
+#ifdef UNIT_TEST
+#define RNA_MAX_ARRAY_LENGTH 64
+#else
+#define RNA_MAX_ARRAY_LENGTH 32
+#endif
+
+#define RNA_MAX_ARRAY_DIMENSION 3
+
/* Blender RNA */
BlenderRNA *RNA_create(void);
@@ -169,6 +177,8 @@ void RNA_def_property_update(PropertyRNA *prop, int noteflag, const char *update
void RNA_def_property_editable_func(PropertyRNA *prop, const char *editable);
void RNA_def_property_editable_array_func(PropertyRNA *prop, const char *editable);
+void RNA_def_property_override_funcs(PropertyRNA *prop, const char *diff, const char *store, const char *apply);
+
void RNA_def_property_update_runtime(PropertyRNA *prop, const void *func);
void RNA_def_property_poll_runtime(PropertyRNA *prop, const void *func);
diff --git a/source/blender/makesrna/RNA_enum_types.h b/source/blender/makesrna/RNA_enum_types.h
index 0f4e20a02ab..345c47ae1bf 100644
--- a/source/blender/makesrna/RNA_enum_types.h
+++ b/source/blender/makesrna/RNA_enum_types.h
@@ -62,6 +62,9 @@ extern const EnumPropertyItem rna_enum_constraint_type_items[];
extern const EnumPropertyItem rna_enum_boidrule_type_items[];
extern const EnumPropertyItem rna_enum_sequence_modifier_type_items[];
+extern const EnumPropertyItem rna_enum_collection_type_items[];
+extern const EnumPropertyItem rna_enum_layer_collection_mode_settings_type_items[];
+
extern const EnumPropertyItem rna_enum_modifier_triangulate_quad_method_items[];
extern const EnumPropertyItem rna_enum_modifier_triangulate_ngon_method_items[];
@@ -107,6 +110,7 @@ extern const EnumPropertyItem rna_enum_motionpath_bake_location_items[];
extern const EnumPropertyItem rna_enum_event_value_items[];
extern const EnumPropertyItem rna_enum_event_type_items[];
extern const EnumPropertyItem rna_enum_operator_return_items[];
+extern const EnumPropertyItem rna_enum_operator_property_tags[];
extern const EnumPropertyItem rna_enum_brush_sculpt_tool_items[];
extern const EnumPropertyItem rna_enum_brush_vertex_tool_items[];
diff --git a/source/blender/makesrna/RNA_types.h b/source/blender/makesrna/RNA_types.h
index 705d3914a52..2a9b9ebe376 100644
--- a/source/blender/makesrna/RNA_types.h
+++ b/source/blender/makesrna/RNA_types.h
@@ -108,6 +108,8 @@ typedef enum PropertyUnit {
#define RNA_TRANSLATION_PREC_DEFAULT 5
+#define RNA_STACK_ARRAY 32
+
/* also update enums in bpy_props.c when adding items here
* watch it: these values are written to files as part of
* node socket button subtypes!
@@ -156,7 +158,7 @@ typedef enum PropertySubType {
/* Make sure enums are updated with these */
/* HIGHEST FLAG IN USE: 1 << 31
- * FREE FLAGS: 2, 3, 7, 9, 11, 13, 14, 15, 30 */
+ * FREE FLAGS: 3, 9, 11, 13, 14, 15, 30 */
typedef enum PropertyFlag {
/* editable means the property is editable in the user
* interface, properties are editable by default except
@@ -174,6 +176,9 @@ typedef enum PropertyFlag {
* and collections */
PROP_ANIMATABLE = (1 << 1),
+ /* Means the property can be overriden by a local 'proxy' of some linked datablock. */
+ PROP_OVERRIDABLE_STATIC = (1 << 2),
+
/* This flag means when the property's widget is in 'textedit' mode, it will be updated
* after every typed char, instead of waiting final validation. Used e.g. for text searchbox.
* It will also cause UI_BUT_VALUE_CLEAR to be set for text buttons. We could add an own flag
@@ -208,6 +213,13 @@ typedef enum PropertyFlag {
* but setting NULL on a mesh object is not possible. So, if its not NULL, setting NULL cant be done! */
PROP_NEVER_UNLINK = (1 << 25),
+ /* Pointers to data that is not owned by the struct.
+ * Typical example: Bone.parent, Bone.child, etc., and nearly all ID pointers.
+ * This is crucial information for processes that walk the whole data of an ID e.g. (like static override).
+ * Note that all ID pointers are enforced to this by default, this probably will need to be rechecked
+ * (see ugly infamous NodeTrees of mat/tex/scene/etc.). */
+ PROP_PTR_NO_OWNERSHIP = (1 << 7),
+
/* flag contains multiple enums.
* note: not to be confused with prop->enumbitflags
* this exposes the flag as multiple options in python and the UI.
@@ -232,7 +244,7 @@ typedef enum PropertyFlag {
PROP_IDPROPERTY = (1 << 10), /* This is an IDProperty, not a DNA one. */
PROP_DYNAMIC = (1 << 17), /* for dynamic arrays, and retvals of type string */
PROP_ENUM_NO_CONTEXT = (1 << 24), /* for enum that shouldn't be contextual */
- PROP_ENUM_NO_TRANSLATE = (1 << 29), /* for enums not to be translated (e.g. renderlayers' names in nodes) */
+ PROP_ENUM_NO_TRANSLATE = (1 << 29), /* for enums not to be translated (e.g. viewlayers' names in nodes) */
} PropertyFlag;
/* Function parameters flags.
@@ -282,6 +294,7 @@ typedef struct CollectionPropertyIterator {
union {
ArrayIterator array;
ListBaseIterator listbase;
+ void *custom;
} internal;
int idprop;
int level;
diff --git a/source/blender/makesrna/intern/CMakeLists.txt b/source/blender/makesrna/intern/CMakeLists.txt
index 743d192f0c5..74c36c456b0 100644
--- a/source/blender/makesrna/intern/CMakeLists.txt
+++ b/source/blender/makesrna/intern/CMakeLists.txt
@@ -56,6 +56,7 @@ set(DEFSRC
rna_key.c
rna_lamp.c
rna_lattice.c
+ rna_layer.c
rna_linestyle.c
rna_main.c
rna_mask.c
@@ -72,6 +73,7 @@ set(DEFSRC
rna_palette.c
rna_particle.c
rna_pose.c
+ rna_lightprobe.c
rna_property.c
rna_render.c
rna_rigidbody.c
@@ -94,6 +96,8 @@ set(DEFSRC
rna_userdef.c
rna_vfont.c
rna_wm.c
+ rna_wm_manipulator.c
+ rna_workspace.c
rna_world.c
)
@@ -124,6 +128,7 @@ set(APISRC
rna_ui_api.c
rna_vfont_api.c
rna_wm_api.c
+ rna_wm_manipulator_api.c
)
string(REGEX REPLACE "rna_([a-zA-Z0-9_-]*).c" "${CMAKE_CURRENT_BINARY_DIR}/rna_\\1_gen.c" GENSRC "${DEFSRC}")
@@ -192,6 +197,10 @@ if(WITH_GAMEENGINE)
add_definitions(-DWITH_GAMEENGINE)
endif()
+if(WITH_CLAY_ENGINE)
+ add_definitions(-DWITH_CLAY_ENGINE)
+endif()
+
if(WITH_IMAGE_OPENEXR)
add_definitions(-DWITH_OPENEXR)
endif()
@@ -225,7 +234,7 @@ if(WITH_IMAGE_FRAMESERVER)
endif()
if(WITH_AUDASPACE)
- add_definitions(${AUDASPACE_DEFINITIONS})
+ add_definitions(-DWITH_AUDASPACE)
list(APPEND INC_SYS
${AUDASPACE_C_INCLUDE_DIRS}
@@ -334,6 +343,7 @@ blender_include_dirs(
../../bmesh
../../blentranslation
../../depsgraph
+ ../../draw
../../gpu
../../imbuf
../../ikplugin
diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c
index e1d4e8fb8ad..9745ca39872 100644
--- a/source/blender/makesrna/intern/makesrna.c
+++ b/source/blender/makesrna/intern/makesrna.c
@@ -2995,6 +2995,28 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr
}
break;
}
+ case PROP_POINTER:
+ {
+ PointerPropertyRNA *pprop = (PointerPropertyRNA *)prop;
+
+ /* XXX This systematically enforces that flag on ID pointers... we'll probably have to revisit. :/ */
+ StructRNA *type = rna_find_struct((const char *)pprop->type);
+ if (type && (type->flag & STRUCT_ID)) {
+ prop->flag |= PROP_PTR_NO_OWNERSHIP;
+ }
+ break;
+ }
+ case PROP_COLLECTION:
+ {
+ CollectionPropertyRNA *cprop = (CollectionPropertyRNA *)prop;
+
+ /* XXX This systematically enforces that flag on ID pointers... we'll probably have to revisit. :/ */
+ StructRNA *type = rna_find_struct((const char *)cprop->item_type);
+ if (type && (type->flag & STRUCT_ID)) {
+ prop->flag |= PROP_PTR_NO_OWNERSHIP;
+ }
+ break;
+ }
default:
break;
}
@@ -3025,12 +3047,15 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr
prop->arraylength[1],
prop->arraylength[2],
prop->totarraylength);
- fprintf(f, "\t%s%s, %d, %s, %s,\n",
+ fprintf(f, "\t%s%s, %d, %s, %s, %s, %s, %s,\n",
(prop->flag & PROP_CONTEXT_UPDATE) ? "(UpdateFunc)" : "",
rna_function_string(prop->update),
prop->noteflag,
rna_function_string(prop->editable),
- rna_function_string(prop->itemeditable));
+ rna_function_string(prop->itemeditable),
+ rna_function_string(prop->override_diff),
+ rna_function_string(prop->override_store),
+ rna_function_string(prop->override_apply));
if (prop->flag_internal & PROP_INTERN_RAW_ACCESS) rna_set_raw_offset(f, srna, prop);
else fprintf(f, "\t0, -1");
@@ -3337,7 +3362,6 @@ static RNAProcessItem PROCESS_ITEMS[] = {
{"rna_context.c", NULL, RNA_def_context},
{"rna_controller.c", "rna_controller_api.c", RNA_def_controller},
{"rna_curve.c", "rna_curve_api.c", RNA_def_curve},
- {"rna_depsgraph.c", NULL, RNA_def_depsgraph},
{"rna_dynamicpaint.c", NULL, RNA_def_dynamic_paint},
{"rna_fcurve.c", "rna_fcurve_api.c", RNA_def_fcurve},
{"rna_fluidsim.c", NULL, RNA_def_fluidsim},
@@ -3347,6 +3371,7 @@ static RNAProcessItem PROCESS_ITEMS[] = {
{"rna_key.c", NULL, RNA_def_key},
{"rna_lamp.c", NULL, RNA_def_lamp},
{"rna_lattice.c", "rna_lattice_api.c", RNA_def_lattice},
+ {"rna_layer.c", NULL, RNA_def_view_layer},
{"rna_linestyle.c", NULL, RNA_def_linestyle},
{"rna_main.c", "rna_main_api.c", RNA_def_main},
{"rna_material.c", "rna_material_api.c", RNA_def_material},
@@ -3357,10 +3382,12 @@ static RNAProcessItem PROCESS_ITEMS[] = {
{"rna_nodetree.c", NULL, RNA_def_nodetree},
{"rna_object.c", "rna_object_api.c", RNA_def_object},
{"rna_object_force.c", NULL, RNA_def_object_force},
+ {"rna_depsgraph.c", NULL, RNA_def_depsgraph},
{"rna_packedfile.c", NULL, RNA_def_packedfile},
{"rna_palette.c", NULL, RNA_def_palette},
{"rna_particle.c", NULL, RNA_def_particle},
{"rna_pose.c", "rna_pose_api.c", RNA_def_pose},
+ {"rna_lightprobe.c", NULL, RNA_def_lightprobe},
{"rna_property.c", NULL, RNA_def_gameproperty},
{"rna_render.c", NULL, RNA_def_render},
{"rna_rigidbody.c", NULL, RNA_def_rigidbody},
@@ -3380,6 +3407,8 @@ static RNAProcessItem PROCESS_ITEMS[] = {
{"rna_userdef.c", NULL, RNA_def_userdef},
{"rna_vfont.c", "rna_vfont_api.c", RNA_def_vfont},
{"rna_wm.c", "rna_wm_api.c", RNA_def_wm},
+ {"rna_wm_manipulator.c", "rna_wm_manipulator_api.c", RNA_def_wm_manipulator},
+ {"rna_workspace.c", NULL, RNA_def_workspace},
{"rna_world.c", NULL, RNA_def_world},
{"rna_movieclip.c", NULL, RNA_def_movieclip},
{"rna_tracking.c", NULL, RNA_def_tracking},
@@ -3710,6 +3739,9 @@ static const char *cpp_classes = ""
" operator void*() { return ptr.data; }\n"
" operator bool() { return ptr.data != NULL; }\n"
"\n"
+" bool operator==(const Pointer &other) { return ptr.data == other.ptr.data; }\n"
+" bool operator!=(const Pointer &other) { return ptr.data != other.ptr.data; }\n"
+"\n"
" PointerRNA ptr;\n"
"};\n"
"\n"
diff --git a/source/blender/makesrna/intern/rna_ID.c b/source/blender/makesrna/intern/rna_ID.c
index a9e34247cbd..549c1a8b30d 100644
--- a/source/blender/makesrna/intern/rna_ID.c
+++ b/source/blender/makesrna/intern/rna_ID.c
@@ -74,6 +74,7 @@ const EnumPropertyItem rna_enum_id_type_items[] = {
{ID_PC, "PAINTCURVE", ICON_CURVE_BEZCURVE, "Paint Curve", ""},
{ID_PAL, "PALETTE", ICON_COLOR, "Palette", ""},
{ID_PA, "PARTICLE", ICON_PARTICLE_DATA, "Particle", ""},
+ {ID_LT, "LIGHT_PROBE", ICON_RADIO, "Light Probe", ""},
{ID_SCE, "SCENE", ICON_SCENE_DATA, "Scene", ""},
{ID_SCR, "SCREEN", ICON_SPLITSCREEN, "Screen", ""},
{ID_SO, "SOUND", ICON_PLAY_AUDIO, "Sound", ""},
@@ -82,6 +83,7 @@ const EnumPropertyItem rna_enum_id_type_items[] = {
{ID_TE, "TEXTURE", ICON_TEXTURE_DATA, "Texture", ""},
{ID_WM, "WINDOWMANAGER", ICON_FULLSCREEN, "Window Manager", ""},
{ID_WO, "WORLD", ICON_WORLD_DATA, "World", ""},
+ {ID_WS, "WORKSPACE", ICON_NONE, "Workspace", ""},
{0, NULL, 0, NULL, NULL}
};
@@ -95,12 +97,15 @@ const EnumPropertyItem rna_enum_id_type_items[] = {
#include "BKE_idprop.h"
#include "BKE_library.h"
#include "BKE_library_query.h"
+#include "BKE_library_override.h"
#include "BKE_library_remap.h"
#include "BKE_animsys.h"
#include "BKE_material.h"
-#include "BKE_depsgraph.h"
#include "BKE_global.h" /* XXX, remove me */
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#include "WM_api.h"
/* name functions that ignore the first two ID characters */
@@ -166,6 +171,7 @@ short RNA_type_to_ID_code(const StructRNA *type)
if (base_type == &RNA_ParticleSettings) return ID_PA;
if (base_type == &RNA_Palette) return ID_PAL;
if (base_type == &RNA_PaintCurve) return ID_PC;
+ if (base_type == &RNA_LightProbe) return ID_LP;
if (base_type == &RNA_Scene) return ID_SCE;
if (base_type == &RNA_Screen) return ID_SCR;
if (base_type == &RNA_Sound) return ID_SO;
@@ -173,6 +179,7 @@ short RNA_type_to_ID_code(const StructRNA *type)
if (base_type == &RNA_Texture) return ID_TE;
if (base_type == &RNA_Text) return ID_TXT;
if (base_type == &RNA_VectorFont) return ID_VF;
+ if (base_type == &RNA_WorkSpace) return ID_WS;
if (base_type == &RNA_World) return ID_WO;
if (base_type == &RNA_WindowManager) return ID_WM;
@@ -208,6 +215,7 @@ StructRNA *ID_code_to_RNA_type(short idcode)
case ID_PA: return &RNA_ParticleSettings;
case ID_PAL: return &RNA_Palette;
case ID_PC: return &RNA_PaintCurve;
+ case ID_LP: return &RNA_LightProbe;
case ID_SCE: return &RNA_Scene;
case ID_SCR: return &RNA_Screen;
case ID_SO: return &RNA_Sound;
@@ -217,6 +225,7 @@ StructRNA *ID_code_to_RNA_type(short idcode)
case ID_VF: return &RNA_VectorFont;
case ID_WM: return &RNA_WindowManager;
case ID_WO: return &RNA_World;
+ case ID_WS: return &RNA_WorkSpace;
/* deprecated */
case ID_IP: break;
@@ -303,6 +312,15 @@ static ID *rna_ID_copy(ID *id, Main *bmain)
return NULL;
}
+static ID *rna_ID_override_create(ID *id, Main *bmain)
+{
+ if (id->lib == NULL) {
+ return NULL;
+ }
+
+ return BKE_override_static_create_from_id(bmain, id);
+}
+
static void rna_ID_update_tag(ID *id, ReportList *reports, int flag)
{
/* XXX, new function for this! */
@@ -341,7 +359,7 @@ static void rna_ID_update_tag(ID *id, ReportList *reports, int flag)
}
}
- DAG_id_tag_update(id, flag);
+ DEG_id_tag_update(id, flag);
}
static void rna_ID_user_clear(ID *id)
@@ -377,14 +395,14 @@ static struct ID *rna_ID_make_local(struct ID *self, Main *bmain, int clear_prox
static AnimData * rna_ID_animation_data_create(ID *id, Main *bmain)
{
AnimData *adt = BKE_animdata_add_id(id);
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
return adt;
}
static void rna_ID_animation_data_free(ID *id, Main *bmain)
{
BKE_animdata_free(id, true);
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
}
#ifdef WITH_PYTHON
@@ -450,7 +468,7 @@ static Material *rna_IDMaterials_pop_id(ID *id, Main *bmain, ReportList *reports
return NULL;
}
- DAG_id_tag_update(id, OB_RECALC_DATA);
+ DEG_id_tag_update(id, OB_RECALC_DATA);
WM_main_add_notifier(NC_OBJECT | ND_DRAW, id);
WM_main_add_notifier(NC_OBJECT | ND_OB_SHADING, id);
@@ -461,7 +479,7 @@ static void rna_IDMaterials_clear_id(ID *id, int remove_material_slot)
{
BKE_material_clear_id(G.main, id, remove_material_slot);
- DAG_id_tag_update(id, OB_RECALC_DATA);
+ DEG_id_tag_update(id, OB_RECALC_DATA);
WM_main_add_notifier(NC_OBJECT | ND_DRAW, id);
WM_main_add_notifier(NC_OBJECT | ND_OB_SHADING, id);
}
@@ -754,6 +772,35 @@ static PointerRNA rna_IDPreview_get(PointerRNA *ptr)
return rna_pointer_inherit_refine(ptr, &RNA_ImagePreview, prv_img);
}
+static int rna_ID_is_updated_get(PointerRNA *ptr)
+{
+ ID *id = (ID *)ptr->data;
+ /* TODO(sergey): Do we need to limit some of flags here? */
+ return ((id->recalc & ID_RECALC_ALL) != 0);
+}
+
+static int rna_ID_is_updated_data_get(PointerRNA *ptr)
+{
+ ID *id = (ID *)ptr->data;
+ if (GS(id->name) != ID_OB) {
+ return 0;
+ }
+ Object *object = (Object *)id;
+ ID *data = object->data;
+ if (data == NULL) {
+ return 0;
+ }
+ return ((data->recalc & ID_RECALC_ALL) != 0);
+}
+
+static PointerRNA rna_ID_override_reference_get(PointerRNA *ptr)
+{
+ ID *id = (ID *)ptr->data;
+ ID *reference = (id && id->override_static) ? id->override_static->reference : NULL;
+
+ return reference ? rna_pointer_inherit_refine(ptr, ID_code_to_RNA_type(GS(reference->name)), reference) : PointerRNA_NULL;
+}
+
#else
static void rna_def_ID_properties(BlenderRNA *brna)
@@ -997,13 +1044,13 @@ static void rna_def_ID(BlenderRNA *brna)
"(initial state is undefined)");
prop = RNA_def_property(srna, "is_updated", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "recalc", ID_RECALC);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_boolean_funcs(prop, "rna_ID_is_updated_get", NULL);
RNA_def_property_ui_text(prop, "Is Updated", "Data-block is tagged for recalculation");
prop = RNA_def_property(srna, "is_updated_data", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "recalc", ID_RECALC_DATA);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_boolean_funcs(prop, "rna_ID_is_updated_data_get", NULL);
RNA_def_property_ui_text(prop, "Is Updated Data", "Data-block data is tagged for recalculation");
prop = RNA_def_property(srna, "is_library_indirect", PROP_BOOLEAN, PROP_NONE);
@@ -1016,6 +1063,12 @@ static void rna_def_ID(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Library", "Library file the data-block is linked from");
+ prop = RNA_def_pointer(srna, "override_static_reference", "ID",
+ "Override Reference", "Reference linked data-block overridden by this one");
+ RNA_def_property_pointer_sdna(prop, NULL, "override_static->reference");
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_pointer_funcs(prop, "rna_ID_override_reference_get", NULL, NULL, NULL);
+
prop = RNA_def_pointer(srna, "preview", "ImagePreview", "Preview",
"Preview image and icon of this data-block (None if not supported for this type of data)");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
@@ -1028,6 +1081,12 @@ static void rna_def_ID(BlenderRNA *brna)
parm = RNA_def_pointer(func, "id", "ID", "", "New copy of the ID");
RNA_def_function_return(func, parm);
+ func = RNA_def_function(srna, "override_create", "rna_ID_override_create");
+ RNA_def_function_ui_description(func, "Create an overridden local copy of this linked data-block (not supported for all data-blocks)");
+ RNA_def_function_flag(func, FUNC_USE_MAIN);
+ parm = RNA_def_pointer(func, "id", "ID", "", "New overridden local copy of the ID");
+ RNA_def_function_return(func, parm);
+
func = RNA_def_function(srna, "user_clear", "rna_ID_user_clear");
RNA_def_function_ui_description(func, "Clear the user count of a data-block so its not saved, "
"on reload the data will be removed");
diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c
index 18e42488829..1750c50b9da 100644
--- a/source/blender/makesrna/intern/rna_access.c
+++ b/source/blender/makesrna/intern/rna_access.c
@@ -42,6 +42,10 @@
#include "BLI_ghash.h"
#include "BLI_math.h"
+#ifdef DEBUG_OVERRIDE_TIMEIT
+# include "PIL_time_utildefines.h"
+#endif
+
#include "BLF_api.h"
#include "BLT_translation.h"
@@ -51,18 +55,21 @@
#include "BKE_idprop.h"
#include "BKE_fcurve.h"
#include "BKE_library.h"
+#include "BKE_library_override.h"
#include "BKE_main.h"
#include "BKE_report.h"
+#include "DEG_depsgraph.h"
+
#include "RNA_access.h"
#include "RNA_define.h"
#include "RNA_enum_types.h"
#include "WM_api.h"
+#include "WM_message.h"
/* flush updates */
#include "DNA_object_types.h"
-#include "BKE_depsgraph.h"
#include "WM_types.h"
#include "rna_internal.h"
@@ -422,7 +429,7 @@ static PropertyRNA *arraytypemap[IDP_NUMTYPES] = {
(PropertyRNA *)&rna_PropertyGroupItem_double_array
};
-IDProperty *rna_idproperty_check(PropertyRNA **prop, PointerRNA *ptr)
+static void *rna_idproperty_check_ex(PropertyRNA **prop, PointerRNA *ptr, const bool return_rnaprop)
{
/* This is quite a hack, but avoids some complexity in the API. we
* pass IDProperty structs as PropertyRNA pointers to the outside.
@@ -445,7 +452,7 @@ IDProperty *rna_idproperty_check(PropertyRNA **prop, PointerRNA *ptr)
return idprop;
}
else
- return NULL;
+ return return_rnaprop ? *prop : NULL;
}
{
@@ -460,6 +467,19 @@ IDProperty *rna_idproperty_check(PropertyRNA **prop, PointerRNA *ptr)
}
}
+/* This function only returns an IDProperty,
+ * or NULL (in case IDProp could not be found, or prop is a real RNA property). */
+IDProperty *rna_idproperty_check(PropertyRNA **prop, PointerRNA *ptr)
+{
+ return rna_idproperty_check_ex(prop, ptr, false);
+}
+
+/* This function always return the valid, real data pointer, be it a regular RNA property one, or an IDProperty one. */
+PropertyRNA *rna_ensure_property_realdata(PropertyRNA **prop, PointerRNA *ptr)
+{
+ return rna_idproperty_check_ex(prop, ptr, true);
+}
+
static PropertyRNA *rna_ensure_property(PropertyRNA *prop)
{
/* the quick version if we don't need the idproperty */
@@ -1821,7 +1841,8 @@ bool RNA_property_editable(PointerRNA *ptr, PropertyRNA *prop)
return ((flag & PROP_EDITABLE) &&
(flag & PROP_REGISTER) == 0 &&
- (!id || !ID_IS_LINKED(id) || (prop->flag & PROP_LIB_EXCEPTION)));
+ (!id || ((!ID_IS_LINKED(id) || (prop->flag & PROP_LIB_EXCEPTION)) &&
+ (!id->override_static || (prop->flag & PROP_OVERRIDABLE_STATIC)))));
}
/**
@@ -1847,11 +1868,19 @@ bool RNA_property_editable_info(PointerRNA *ptr, PropertyRNA *prop, const char *
}
/* property from linked data-block */
- if (id && ID_IS_LINKED(id) && (prop->flag & PROP_LIB_EXCEPTION) == 0) {
- if (!(*r_info)[0]) {
- *r_info = "Can't edit this property from a linked data-block.";
+ if (id) {
+ if (ID_IS_LINKED(id) && (prop->flag & PROP_LIB_EXCEPTION) == 0) {
+ if (!(*r_info)[0]) {
+ *r_info = "Can't edit this property from a linked data-block.";
+ }
+ return false;
+ }
+ if (id->override_static != NULL && (prop->flag & PROP_OVERRIDABLE_STATIC) == 0) {
+ if (!(*r_info)[0]) {
+ *r_info = "Can't edit this property from an override data-block.";
+ }
+ return false;
}
- return false;
}
return ((flag & PROP_EDITABLE) && (flag & PROP_REGISTER) == 0);
@@ -1959,7 +1988,7 @@ static void rna_property_update(bContext *C, Main *bmain, Scene *scene, PointerR
* parts of the code that need it still, so we have this exception */
if (prop->flag & PROP_CONTEXT_UPDATE) {
if (C) {
- if (prop->flag & PROP_CONTEXT_PROPERTY_UPDATE) {
+ if ((prop->flag & PROP_CONTEXT_PROPERTY_UPDATE) == PROP_CONTEXT_PROPERTY_UPDATE) {
((ContextPropUpdateFunc)prop->update)(C, ptr, prop);
}
else {
@@ -1970,14 +1999,24 @@ static void rna_property_update(bContext *C, Main *bmain, Scene *scene, PointerR
else
prop->update(bmain, scene, ptr);
}
+#if 0
if (prop->noteflag)
WM_main_add_notifier(prop->noteflag, ptr->id.data);
+#else
+ /* if C is NULL, we're updating from animation.
+ * avoid slow-down from f-curves by not publishing (for now). */
+ if (C != NULL) {
+ struct wmMsgBus *mbus = CTX_wm_message_bus(C);
+ /* we could add NULL check, for now don't */
+ WM_msg_publish_rna(mbus, ptr, prop);
+ }
+#endif
}
if (!is_rna || (prop->flag & PROP_IDPROPERTY)) {
/* WARNING! This is so property drivers update the display!
* not especially nice */
- DAG_id_tag_update(ptr->id.data, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+ DEG_id_tag_update(ptr->id.data, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
WM_main_add_notifier(NC_WINDOW, NULL);
/* Not nice as well, but the only way to make sure material preview
* is updated with custom nodes.
@@ -6996,120 +7035,47 @@ bool RNA_property_reset(PointerRNA *ptr, PropertyRNA *prop, int index)
}
}
+static bool rna_property_override_operation_apply(
+ PointerRNA *ptr_local, PointerRNA *ptr_reference, PointerRNA *ptr_storage,
+ PropertyRNA *prop_local, PropertyRNA *prop_reference, PropertyRNA *prop_storage,
+ IDOverrideStaticPropertyOperation *opop);
+
bool RNA_property_copy(PointerRNA *ptr, PointerRNA *fromptr, PropertyRNA *prop, int index)
{
- int len, fromlen;
- PropertyRNA *fromprop = prop;
+ if (!RNA_property_editable(ptr, prop)) {
+ return false;
+ }
- if (prop->magic != RNA_MAGIC) {
- /* In case of IDProperty, we have to find the *real* idprop of ptr,
- * since prop in this case is just a fake wrapper around actual IDProp data, and not a 'real' PropertyRNA. */
- prop = (PropertyRNA *)rna_idproperty_find(ptr, ((IDProperty *)fromprop)->name);
+ PropertyRNA *prop_dst = prop;
+ PropertyRNA *prop_src = prop;
- /* its possible the custom-prop doesn't exist on this data-block */
- if (prop == NULL) {
- return false;
- }
+ /* Ensure we get real property data, be it an actual RNA property, or an IDProperty in disguise. */
+ prop_dst = rna_ensure_property_realdata(&prop_dst, ptr);
+ prop_src = rna_ensure_property_realdata(&prop_src, fromptr);
- /* Even though currently we now prop will always be the 'fromprop', this might not be the case in the future. */
- if (prop == fromprop) {
- fromprop = (PropertyRNA *)rna_idproperty_find(fromptr, ((IDProperty *)prop)->name);
- }
+ /* IDprops: destination may not exist, if source does and is set, try to create it. */
+ /* Note: this is sort of quick hack/bandage to fix the issue, we need to rethink how IDProps are handled
+ * in 'diff' RNA code completely, imho... */
+ if (prop_src != NULL && prop_dst == NULL && RNA_property_is_set(fromptr, prop)) {
+ BLI_assert(prop_src->magic != RNA_MAGIC);
+ IDProperty *idp_dst = RNA_struct_idprops(ptr, true);
+ IDProperty *prop_idp_dst = IDP_CopyProperty((IDProperty *)prop_src);
+ IDP_AddToGroup(idp_dst, prop_idp_dst);
+ rna_idproperty_touch(prop_idp_dst);
+ /* Nothing else to do here... */
+ return true;
}
- /* get the length of the array to work with */
- len = RNA_property_array_length(ptr, prop);
- fromlen = RNA_property_array_length(fromptr, fromprop);
-
- if (len != fromlen)
+ if (ELEM(NULL, prop_dst, prop_src)) {
return false;
-
- /* get and set the default values as appropriate for the various types */
- switch (RNA_property_type(prop)) {
- case PROP_BOOLEAN:
- if (len) {
- if (index == -1) {
- int *tmparray = MEM_callocN(sizeof(int) * len, "copy - boolean");
-
- RNA_property_boolean_get_array(fromptr, fromprop, tmparray);
- RNA_property_boolean_set_array(ptr, prop, tmparray);
-
- MEM_freeN(tmparray);
- }
- else {
- int value = RNA_property_boolean_get_index(fromptr, fromprop, index);
- RNA_property_boolean_set_index(ptr, prop, index, value);
- }
- }
- else {
- int value = RNA_property_boolean_get(fromptr, fromprop);
- RNA_property_boolean_set(ptr, prop, value);
- }
- return true;
- case PROP_INT:
- if (len) {
- if (index == -1) {
- int *tmparray = MEM_callocN(sizeof(int) * len, "copy - int");
-
- RNA_property_int_get_array(fromptr, fromprop, tmparray);
- RNA_property_int_set_array(ptr, prop, tmparray);
-
- MEM_freeN(tmparray);
- }
- else {
- int value = RNA_property_int_get_index(fromptr, fromprop, index);
- RNA_property_int_set_index(ptr, prop, index, value);
- }
- }
- else {
- int value = RNA_property_int_get(fromptr, fromprop);
- RNA_property_int_set(ptr, prop, value);
- }
- return true;
- case PROP_FLOAT:
- if (len) {
- if (index == -1) {
- float *tmparray = MEM_callocN(sizeof(float) * len, "copy - float");
-
- RNA_property_float_get_array(fromptr, fromprop, tmparray);
- RNA_property_float_set_array(ptr, prop, tmparray);
-
- MEM_freeN(tmparray);
- }
- else {
- float value = RNA_property_float_get_index(fromptr, fromprop, index);
- RNA_property_float_set_index(ptr, prop, index, value);
- }
- }
- else {
- float value = RNA_property_float_get(fromptr, fromprop);
- RNA_property_float_set(ptr, prop, value);
- }
- return true;
- case PROP_ENUM:
- {
- int value = RNA_property_enum_get(fromptr, fromprop);
- RNA_property_enum_set(ptr, prop, value);
- return true;
- }
- case PROP_POINTER:
- {
- PointerRNA value = RNA_property_pointer_get(fromptr, fromprop);
- RNA_property_pointer_set(ptr, prop, value);
- return true;
- }
- case PROP_STRING:
- {
- char *value = RNA_property_string_get_alloc(fromptr, fromprop, NULL, 0, NULL);
- RNA_property_string_set(ptr, prop, value);
- MEM_freeN(value);
- return true;
- }
- default:
- return false;
}
- return false;
+ IDOverrideStaticPropertyOperation opop = {
+ .operation = IDOVERRIDESTATIC_OP_REPLACE,
+ .subitem_reference_index = index,
+ .subitem_local_index = index
+ };
+ return rna_property_override_operation_apply(ptr, fromptr, NULL, prop_dst, prop_src, NULL, &opop);
}
/* use RNA_warning macro which includes __func__ suffix */
@@ -7134,176 +7100,610 @@ void _RNA_warning(const char *format, ...)
#endif
}
-bool RNA_property_equals(PointerRNA *a, PointerRNA *b, PropertyRNA *prop, eRNAEqualsMode mode)
+static int rna_property_override_diff(
+ PointerRNA *ptr_a, PointerRNA *ptr_b, PropertyRNA *prop, PropertyRNA *prop_a, PropertyRNA *prop_b, const char *rna_path,
+ eRNACompareMode mode, IDOverrideStatic *override, const int flags, eRNAOverrideMatchResult *r_report_flags);
+
+bool RNA_property_equals(PointerRNA *ptr_a, PointerRNA *ptr_b, PropertyRNA *prop, eRNACompareMode mode)
+{
+ BLI_assert(ELEM(mode, RNA_EQ_STRICT, RNA_EQ_UNSET_MATCH_ANY, RNA_EQ_UNSET_MATCH_NONE));
+
+ return (rna_property_override_diff(ptr_a, ptr_b, prop, NULL, NULL, NULL, mode, NULL, 0, NULL) == 0);
+}
+
+bool RNA_struct_equals(PointerRNA *ptr_a, PointerRNA *ptr_b, eRNACompareMode mode)
+{
+ CollectionPropertyIterator iter;
+ PropertyRNA *iterprop;
+ bool equals = true;
+
+ if (ptr_a == NULL && ptr_b == NULL)
+ return true;
+ else if (ptr_a == NULL || ptr_b == NULL)
+ return false;
+ else if (ptr_a->type != ptr_b->type)
+ return false;
+
+ iterprop = RNA_struct_iterator_property(ptr_a->type);
+
+ RNA_property_collection_begin(ptr_a, iterprop, &iter);
+ for (; iter.valid; RNA_property_collection_next(&iter)) {
+ PropertyRNA *prop = iter.ptr.data;
+
+ if (!RNA_property_equals(ptr_a, ptr_b, prop, mode)) {
+ equals = false;
+ break;
+ }
+ }
+ RNA_property_collection_end(&iter);
+
+ return equals;
+}
+
+/* Low-level functions, also used by non-override RNA API like copy or equality check. */
+
+/** Generic RNA property diff function.
+ *
+ * \note about \a prop and \a prop_a/prop_b parameters: the former is exptected to be an 'un-resolved' one,
+ * while the two laters are expected to be fully resolved ones (i.e. to be the IDProps when they should be, etc.).
+ * When \a prop is given, \a prop_a and \a prop_b should always be NULL, and vice-versa.
+ * This is necessary, because we cannot perform 'set/unset' checks on resolved properties
+ * (unset IDProps would merely be NULL then).
+ */
+static int rna_property_override_diff(
+ PointerRNA *ptr_a, PointerRNA *ptr_b, PropertyRNA *prop, PropertyRNA *prop_a, PropertyRNA *prop_b, const char *rna_path,
+ eRNACompareMode mode, IDOverrideStatic *override, const int flags, eRNAOverrideMatchResult *r_report_flags)
{
- int len, fromlen;
+ if (prop != NULL) {
+ BLI_assert(prop_a == NULL && prop_b == NULL);
+ prop_a = prop;
+ prop_b = prop;
+ }
+
+ if (ELEM(NULL, prop_a, prop_b)) {
+ return (prop_a == prop_b) ? 0 : 1;
+ }
if (mode == RNA_EQ_UNSET_MATCH_ANY) {
/* uninitialized properties are assumed to match anything */
- if (!RNA_property_is_set(a, prop) || !RNA_property_is_set(b, prop))
- return true;
+ if (!RNA_property_is_set(ptr_a, prop_a) || !RNA_property_is_set(ptr_b, prop_b)) {
+ return 0;
+ }
}
else if (mode == RNA_EQ_UNSET_MATCH_NONE) {
/* unset properties never match set properties */
- if (RNA_property_is_set(a, prop) != RNA_property_is_set(b, prop))
- return false;
+ if (RNA_property_is_set(ptr_a, prop_a) != RNA_property_is_set(ptr_b, prop_b)) {
+ return 1;
+ }
+ }
+
+ if (prop != NULL) {
+ /* Ensure we get real property data, be it an actual RNA property, or an IDProperty in disguise. */
+ prop_a = rna_ensure_property_realdata(&prop_a, ptr_a);
+ prop_b = rna_ensure_property_realdata(&prop_b, ptr_b);
+
+ if (ELEM(NULL, prop_a, prop_b)) {
+ return (prop_a == prop_b) ? 0 : 1;
+ }
+ }
+
+ /* Check if we are working with arrays. */
+ const bool is_array_a = RNA_property_array_check(prop_a);
+ const bool is_array_b = RNA_property_array_check(prop_b);
+
+ if (is_array_a != is_array_b) {
+ /* Should probably never happen actually... */
+ BLI_assert(0);
+ return is_array_a ? 1 : -1;
+ }
+
+ /* Get the length of the array to work with. */
+ const int len_a = RNA_property_array_length(ptr_a, prop_a);
+ const int len_b = RNA_property_array_length(ptr_b, prop_b);
+
+ if (len_a != len_b) {
+ /* Do not handle override in that case, we do not support insertion/deletion from arrays for now. */
+ return len_a > len_b ? 1 : -1;
+ }
+
+ if (is_array_a && len_a == 0) {
+ /* Empty arrays, will happen in some case with dynamic ones. */
+ return 0;
+ }
+
+ RNAPropOverrideDiff override_diff = NULL;
+ /* Special case for IDProps, we use default callback then. */
+ if (prop_a->magic != RNA_MAGIC) {
+ override_diff = rna_property_override_diff_default;
+ if (prop_b->magic == RNA_MAGIC && prop_b->override_diff != override_diff) {
+ override_diff = NULL;
+ }
+ }
+ else if (prop_b->magic != RNA_MAGIC) {
+ override_diff = rna_property_override_diff_default;
+ if (prop_a->override_diff != override_diff) {
+ override_diff = NULL;
+ }
+ }
+ else if (prop_a->override_diff == prop_b->override_diff) {
+ override_diff = prop_a->override_diff;
+ }
+
+ if (override_diff == NULL) {
+#ifndef NDEBUG
+ printf("'%s' gives unmatching or NULL RNA diff callbacks, should not happen (%d vs. %d).\n",
+ rna_path ? rna_path : (prop_a->magic != RNA_MAGIC ? ((IDProperty *)prop_a)->name : prop_a->identifier),
+ prop_a->magic == RNA_MAGIC, prop_b->magic == RNA_MAGIC);
+#endif
+ BLI_assert(0);
+ return 1;
+ }
+
+ bool override_changed = false;
+ int diff_flags = flags;
+ if ((RNA_property_flag(prop_a) & PROP_OVERRIDABLE_STATIC) == 0) {
+ diff_flags &= ~RNA_OVERRIDE_COMPARE_CREATE;
+ }
+ const int diff = override_diff(
+ ptr_a, ptr_b, prop_a, prop_b, len_a, len_b,
+ mode, override, rna_path, diff_flags, &override_changed);
+ if (override_changed && r_report_flags) {
+ *r_report_flags |= RNA_OVERRIDE_MATCH_RESULT_CREATED;
+ }
+
+ return diff;
+}
+
+/* Modify local data-block to make it ready for override application (only needed for diff operations, where we use
+ * the local data-block's data as second operand). */
+static bool rna_property_override_operation_store(
+ PointerRNA *ptr_local, PointerRNA *ptr_reference, PointerRNA *ptr_storage,
+ PropertyRNA *prop_local, PropertyRNA *prop_reference, PropertyRNA *prop_storage,
+ IDOverrideStaticProperty *op)
+{
+ int len_local, len_reference, len_storage = 0;
+ bool changed = false;
+
+ if (ptr_storage == NULL) {
+ return changed;
}
/* get the length of the array to work with */
- len = RNA_property_array_length(a, prop);
- fromlen = RNA_property_array_length(b, prop);
+ len_local = RNA_property_array_length(ptr_local, prop_local);
+ len_reference = RNA_property_array_length(ptr_reference, prop_reference);
+ if (prop_storage) {
+ len_storage = RNA_property_array_length(ptr_storage, prop_storage);
+ }
- if (len != fromlen)
- return false;
+ if (len_local != len_reference || len_local != len_storage) {
+ /* Do not handle override in that case, we do not support insertion/deletion from arrays for now. */
+ return changed;
+ }
- /* get and set the default values as appropriate for the various types */
- switch (RNA_property_type(prop)) {
- case PROP_BOOLEAN:
+ BLI_assert(prop_local->override_store == prop_reference->override_store &&
+ (!ptr_storage || prop_local->override_store == prop_storage->override_store) &&
+ prop_local->override_store != NULL);
+
+ for (IDOverrideStaticPropertyOperation *opop = op->operations.first; opop; opop = opop->next) {
+ /* Only needed for diff operations. */
+ if (!ELEM(opop->operation, IDOVERRIDESTATIC_OP_ADD, IDOVERRIDESTATIC_OP_SUBTRACT, IDOVERRIDESTATIC_OP_MULTIPLY)) {
+ continue;
+ }
+
+ if (prop_local->override_store(
+ ptr_local, ptr_reference, ptr_storage, prop_local, prop_reference, prop_storage,
+ len_local, len_reference, len_storage, opop))
{
- if (len) {
- int fixed_a[16], fixed_b[16];
- int *array_a, *array_b;
- bool equals;
+ changed = true;
+ }
+ }
- array_a = (len > 16) ? MEM_mallocN(sizeof(int) * len, "RNA equals") : fixed_a;
- array_b = (len > 16) ? MEM_mallocN(sizeof(int) * len, "RNA equals") : fixed_b;
+ return changed;
+}
- RNA_property_boolean_get_array(a, prop, array_a);
- RNA_property_boolean_get_array(b, prop, array_b);
+static bool rna_property_override_operation_apply(
+ PointerRNA *ptr_local, PointerRNA *ptr_reference, PointerRNA *ptr_storage,
+ PropertyRNA *prop_local, PropertyRNA *prop_reference, PropertyRNA *prop_storage,
+ IDOverrideStaticPropertyOperation *opop)
+{
+ int len_local, len_reference, len_storage = 0;
- equals = memcmp(array_a, array_b, sizeof(int) * len) == 0;
+ const short override_op = opop->operation;
- if (array_a != fixed_a) MEM_freeN(array_a);
- if (array_b != fixed_b) MEM_freeN(array_b);
+ if (override_op == IDOVERRIDESTATIC_OP_NOOP) {
+ return true;
+ }
- return equals;
- }
- else {
- int value = RNA_property_boolean_get(a, prop);
- return value == RNA_property_boolean_get(b, prop);
- }
+ if (ELEM(override_op, IDOVERRIDESTATIC_OP_ADD, IDOVERRIDESTATIC_OP_SUBTRACT, IDOVERRIDESTATIC_OP_MULTIPLY) && !ptr_storage) {
+ /* We cannot apply 'diff' override operations without some refference storage.
+ * This should typically only happen at read time of .blend file... */
+ return false;
+ }
+
+ if (ELEM(override_op, IDOVERRIDESTATIC_OP_ADD, IDOVERRIDESTATIC_OP_SUBTRACT, IDOVERRIDESTATIC_OP_MULTIPLY) && !prop_storage) {
+ /* We cannot apply 'diff' override operations without some refference storage.
+ * This should typically only happen at read time of .blend file... */
+ return false;
+ }
+
+ RNAPropOverrideApply override_apply = NULL;
+ /* Special case for IDProps, we use default callback then. */
+ if (prop_local->magic != RNA_MAGIC) {
+ override_apply = rna_property_override_apply_default;
+ if (prop_reference->magic == RNA_MAGIC && prop_reference->override_apply != override_apply) {
+ override_apply = NULL;
+ }
+ }
+ else if (prop_reference->magic != RNA_MAGIC) {
+ override_apply = rna_property_override_apply_default;
+ if (prop_local->override_apply != override_apply) {
+ override_apply = NULL;
}
+ }
+ else if (prop_local->override_apply == prop_reference->override_apply) {
+ override_apply = prop_local->override_apply;
+ }
- case PROP_INT:
- {
- if (len) {
- int fixed_a[16], fixed_b[16];
- int *array_a, *array_b;
- bool equals;
+ if (ptr_storage && prop_storage->magic == RNA_MAGIC && prop_storage->override_apply != override_apply) {
+ override_apply = NULL;
+ }
+
+ if (override_apply == NULL) {
+#ifndef NDEBUG
+ printf("'%s' gives unmatching or NULL RNA copy callbacks, should not happen (%d vs. %d).\n",
+ prop_local->magic != RNA_MAGIC ? ((IDProperty *)prop_local)->name : prop_local->identifier,
+ prop_local->magic == RNA_MAGIC, prop_reference->magic == RNA_MAGIC);
+#endif
+ BLI_assert(0);
+ return false;
+ }
+
+ /* get the length of the array to work with */
+ len_local = RNA_property_array_length(ptr_local, prop_local);
+ len_reference = RNA_property_array_length(ptr_reference, prop_reference);
+ if (ptr_storage) {
+ len_storage = RNA_property_array_length(ptr_storage, prop_storage);
+ }
+
+ if (len_local != len_reference || (ptr_storage && len_local != len_storage)) {
+ /* Do not handle override in that case, we do not support insertion/deletion from arrays for now. */
+ return false;
+ }
+
+ /* get and set the default values as appropriate for the various types */
+ return override_apply(
+ ptr_local, ptr_reference, ptr_storage,
+ prop_local, prop_reference, prop_storage,
+ len_local, len_reference, len_storage,
+ opop);
+}
+
+/**
+ * Check whether reference and local overriden data match (are the same),
+ * with respect to given restrictive sets of properties.
+ * If requested, will generate needed new property overrides, and/or restore values from reference.
+ *
+ * \param r_report_flags If given, will be set with flags matching actions taken by the function on \a ptr_local.
+ *
+ * \return True if _resulting_ \a ptr_local does match \a ptr_reference.
+ */
+bool RNA_struct_override_matches(
+ PointerRNA *ptr_local, PointerRNA *ptr_reference, const char *root_path,
+ IDOverrideStatic *override, const eRNAOverrideMatch flags,
+ eRNAOverrideMatchResult *r_report_flags)
+{
+ CollectionPropertyIterator iter;
+ PropertyRNA *iterprop;
+ bool matching = true;
+
+ BLI_assert(ptr_local->type == ptr_reference->type);
+ BLI_assert(ptr_local->id.data && ptr_reference->id.data);
+
+ const bool ignore_non_overridable = (flags & RNA_OVERRIDE_COMPARE_IGNORE_NON_OVERRIDABLE) != 0;
+ const bool ignore_overridden = (flags & RNA_OVERRIDE_COMPARE_IGNORE_OVERRIDDEN) != 0;
+ const bool do_create = (flags & RNA_OVERRIDE_COMPARE_CREATE) != 0;
+ const bool do_restore = (flags & RNA_OVERRIDE_COMPARE_RESTORE) != 0;
+
+#ifdef DEBUG_OVERRIDE_TIMEIT
+ static float _sum_time = 0.0f;
+ static float _num_time = 0.0f;
+ double _timeit_time;
+ if (!root_path) {
+ _timeit_time = PIL_check_seconds_timer();
+ }
+#endif
- array_a = (len > 16) ? MEM_mallocN(sizeof(int) * len, "RNA equals") : fixed_a;
- array_b = (len > 16) ? MEM_mallocN(sizeof(int) * len, "RNA equals") : fixed_b;
+ iterprop = RNA_struct_iterator_property(ptr_local->type);
- RNA_property_int_get_array(a, prop, array_a);
- RNA_property_int_get_array(b, prop, array_b);
+ for (RNA_property_collection_begin(ptr_local, iterprop, &iter); iter.valid; RNA_property_collection_next(&iter)) {
+ PropertyRNA *prop_local = iter.ptr.data;
+ PropertyRNA *prop_reference = iter.ptr.data;
- equals = memcmp(array_a, array_b, sizeof(int) * len) == 0;
+ /* Ensure we get real property data, be it an actual RNA property, or an IDProperty in disguise. */
+ prop_local = rna_ensure_property_realdata(&prop_local, ptr_local);
+ prop_reference = rna_ensure_property_realdata(&prop_reference, ptr_reference);
+
+ if (ELEM(NULL, prop_local, prop_reference)) {
+ continue;
+ }
+
+ if (ignore_non_overridable && !(prop_local->flag & PROP_OVERRIDABLE_STATIC)) {
+ continue;
+ }
- if (array_a != fixed_a) MEM_freeN(array_a);
- if (array_b != fixed_b) MEM_freeN(array_b);
+ if (RNA_property_animated(ptr_local, prop_local)) {
+ /* We cannot do anything here really, animation is some kind of dynamic overrides that has
+ * precedence over static one... */
+ continue;
+ }
- return equals;
+ /* XXX TODO this will have to be refined to handle collections insertions, and array items */
+ char *rna_path;
+ if (root_path) {
+ /* Inlined building, much much more efficient. */
+ if (prop_local->magic == RNA_MAGIC) {
+ rna_path = BLI_sprintfN("%s.%s", root_path, RNA_property_identifier(prop_local));
}
else {
- int value = RNA_property_int_get(a, prop);
- return value == RNA_property_int_get(b, prop);
+ rna_path = BLI_sprintfN("%s[\"%s\"]", root_path, RNA_property_identifier(prop_local));
}
}
+ else {
+ rna_path = RNA_path_from_ID_to_property(ptr_local, prop_local);
+ }
+ if (rna_path == NULL) {
+ continue;
+ }
- case PROP_FLOAT:
- {
- if (len) {
- float fixed_a[16], fixed_b[16];
- float *array_a, *array_b;
- bool equals;
+ if (ignore_overridden && BKE_override_static_property_find(override, rna_path) != NULL) {
+ MEM_SAFE_FREE(rna_path);
+ continue;
+ }
- array_a = (len > 16) ? MEM_mallocN(sizeof(float) * len, "RNA equals") : fixed_a;
- array_b = (len > 16) ? MEM_mallocN(sizeof(float) * len, "RNA equals") : fixed_b;
+ eRNAOverrideMatchResult report_flags = 0;
+ const int diff = rna_property_override_diff(
+ ptr_local, ptr_reference, NULL, prop_local, prop_reference, rna_path,
+ RNA_EQ_STRICT, override, flags, &report_flags);
+
+ matching = matching && diff == 0;
+ if (r_report_flags) {
+ *r_report_flags |= report_flags;
+ }
+
+ if (diff != 0) {
+ /* XXX TODO: refine this for per-item overriding of arrays... */
+ IDOverrideStaticProperty *op = BKE_override_static_property_find(override, rna_path);
+ IDOverrideStaticPropertyOperation *opop = op ? op->operations.first : NULL;
+
+ if (do_restore && (report_flags & RNA_OVERRIDE_MATCH_RESULT_CREATED) == 0) {
+ /* We are allowed to restore to reference's values. */
+ if (ELEM(NULL, op, opop) || opop->operation == IDOVERRIDESTATIC_OP_NOOP) {
+ /* We should restore that property to its reference value */
+ if (RNA_property_editable(ptr_local, prop_local)) {
+ IDOverrideStaticPropertyOperation opop_tmp = {
+ .operation = IDOVERRIDESTATIC_OP_REPLACE,
+ .subitem_reference_index = -1,
+ .subitem_local_index = -1
+ };
+ rna_property_override_operation_apply(ptr_local, ptr_reference, NULL,
+ prop_local, prop_reference, NULL, &opop_tmp);
+ if (r_report_flags) {
+ *r_report_flags |= RNA_OVERRIDE_MATCH_RESULT_RESTORED;
+ }
+ }
+ else {
+ /* Too noisy for now, this triggers on runtime props like transform matrices etc. */
+ /* BLI_assert(!"We have differences between reference and overriding data on non-editable property."); */
+ matching = false;
+ }
+ }
+ }
+ else if ((report_flags & RNA_OVERRIDE_MATCH_RESULT_CREATED) == 0 && ELEM(NULL, op, opop)) {
+ /* This property is not overridden, and differs from reference, so we have no match. */
+ matching = false;
+ if (!(do_create || do_restore)) {
+ /* Since we have no 'changing' action allowed, we can break here. */
+ MEM_SAFE_FREE(rna_path);
+ break;
+ }
+ }
+ }
- RNA_property_float_get_array(a, prop, array_a);
- RNA_property_float_get_array(b, prop, array_b);
+ MEM_SAFE_FREE(rna_path);
+ }
+ RNA_property_collection_end(&iter);
+
+#ifdef DEBUG_OVERRIDE_TIMEIT
+ if (!root_path) {
+ const float _delta_time = (float)(PIL_check_seconds_timer() - _timeit_time);
+ _sum_time += _delta_time;
+ _num_time++;
+ printf("ID: %s\n", ((ID *)ptr_local->id.data)->name);
+ printf("time end (%s): %.6f\n", __func__, _delta_time);
+ printf("time averaged (%s): %.6f (total: %.6f, in %d runs)\n", __func__, (_sum_time / _num_time), _sum_time, (int)_num_time);
+ }
+#endif
- equals = memcmp(array_a, array_b, sizeof(float) * len) == 0;
+ return matching;
+}
+
+
+/** Store needed second operands into \a storage data-block for differential override operations. */
+bool RNA_struct_override_store(
+ PointerRNA *ptr_local, PointerRNA *ptr_reference, PointerRNA *ptr_storage, IDOverrideStatic *override)
+{
+ bool changed = false;
+
+#ifdef DEBUG_OVERRIDE_TIMEIT
+ TIMEIT_START_AVERAGED(RNA_struct_override_store);
+#endif
+ for (IDOverrideStaticProperty *op = override->properties.first; op; op = op->next) {
+ /* Simplified for now! */
+ PointerRNA data_reference, data_local;
+ PropertyRNA *prop_reference, *prop_local;
- if (array_a != fixed_a) MEM_freeN(array_a);
- if (array_b != fixed_b) MEM_freeN(array_b);
+ if (RNA_path_resolve_property(ptr_local, op->rna_path, &data_local, &prop_local) &&
+ RNA_path_resolve_property(ptr_reference, op->rna_path, &data_reference, &prop_reference))
+ {
+ PointerRNA data_storage;
+ PropertyRNA *prop_storage = NULL;
- return equals;
+ /* It is totally OK if this does not success, only a subset of override operations actually need storage. */
+ if (ptr_storage && (ptr_storage->id.data != NULL)) {
+ RNA_path_resolve_property(ptr_storage, op->rna_path, &data_storage, &prop_storage);
}
- else {
- float value = RNA_property_float_get(a, prop);
- return value == RNA_property_float_get(b, prop);
+
+ if (rna_property_override_operation_store(&data_local, &data_reference, &data_storage,
+ prop_reference, prop_local, prop_storage, op))
+ {
+ changed = true;
}
}
+ }
+#ifdef DEBUG_OVERRIDE_TIMEIT
+ TIMEIT_END_AVERAGED(RNA_struct_override_store);
+#endif
- case PROP_ENUM:
+ return changed;
+}
+
+static void rna_property_override_apply_ex(
+ PointerRNA *ptr_local, PointerRNA *ptr_reference, PointerRNA *ptr_storage,
+ PropertyRNA *prop_local, PropertyRNA *prop_reference, PropertyRNA *prop_storage, IDOverrideStaticProperty *op)
+{
+ for (IDOverrideStaticPropertyOperation *opop = op->operations.first; opop; opop = opop->next) {
+ if (!rna_property_override_operation_apply(ptr_local, ptr_reference, ptr_storage,
+ prop_local, prop_reference, prop_storage, opop))
{
- int value = RNA_property_enum_get(a, prop);
- return value == RNA_property_enum_get(b, prop);
+ BLI_assert(0);
}
+ }
+}
- case PROP_STRING:
+/** Apply given \a override operations on \a dst, using \a src as source. */
+void RNA_struct_override_apply(
+ PointerRNA *ptr_local, PointerRNA *ptr_reference, PointerRNA *ptr_storage, IDOverrideStatic *override)
+{
+#ifdef DEBUG_OVERRIDE_TIMEIT
+ TIMEIT_START_AVERAGED(RNA_struct_override_apply);
+#endif
+ for (IDOverrideStaticProperty *op = override->properties.first; op; op = op->next) {
+ /* Simplified for now! */
+ PointerRNA data_reference, data_local;
+ PropertyRNA *prop_reference, *prop_local;
+
+ if (RNA_path_resolve_property(ptr_local, op->rna_path, &data_local, &prop_local) &&
+ RNA_path_resolve_property(ptr_reference, op->rna_path, &data_reference, &prop_reference))
{
- char fixed_a[128], fixed_b[128];
- int len_a, len_b;
- char *value_a = RNA_property_string_get_alloc(a, prop, fixed_a, sizeof(fixed_a), &len_a);
- char *value_b = RNA_property_string_get_alloc(b, prop, fixed_b, sizeof(fixed_b), &len_b);
- bool equals = STREQ(value_a, value_b);
+ PointerRNA data_storage;
+ PropertyRNA *prop_storage = NULL;
- if (value_a != fixed_a) MEM_freeN(value_a);
- if (value_b != fixed_b) MEM_freeN(value_b);
+ /* It is totally OK if this does not success, only a subset of override operations actually need storage. */
+ if (ptr_storage && (ptr_storage->id.data != NULL)) {
+ RNA_path_resolve_property(ptr_storage, op->rna_path, &data_storage, &prop_storage);
+ }
- return equals;
+ rna_property_override_apply_ex(
+ &data_local, &data_reference, prop_storage ? &data_storage : NULL,
+ prop_local, prop_reference, prop_storage, op);
}
-
- case PROP_POINTER:
- {
- if (!STREQ(RNA_property_identifier(prop), "rna_type")) {
- PointerRNA propptr_a = RNA_property_pointer_get(a, prop);
- PointerRNA propptr_b = RNA_property_pointer_get(b, prop);
- return RNA_struct_equals(&propptr_a, &propptr_b, mode);
- }
- break;
+#ifndef NDEBUG
+ else {
+ printf("Failed to apply static override operation to '%s.%s' (could not resolve some properties)\n",
+ ((ID *)ptr_reference->id.data)->name, op->rna_path);
}
+#endif
+ }
+#ifdef DEBUG_OVERRIDE_TIMEIT
+ TIMEIT_END_AVERAGED(RNA_struct_override_apply);
+#endif
+}
- default:
- break;
+IDOverrideStaticProperty *RNA_property_override_property_find(PointerRNA *ptr, PropertyRNA *prop)
+{
+ ID *id = ptr->id.data;
+
+ if (!id || !id->override_static) {
+ return NULL;
}
- return true;
+ char *rna_path = RNA_path_from_ID_to_property(ptr, prop);
+ if (rna_path) {
+ IDOverrideStaticProperty *op = BKE_override_static_property_find(id->override_static, rna_path);
+ MEM_freeN(rna_path);
+ return op;
+ }
+ return NULL;
}
-bool RNA_struct_equals(PointerRNA *a, PointerRNA *b, eRNAEqualsMode mode)
+IDOverrideStaticProperty *RNA_property_override_property_get(PointerRNA *ptr, PropertyRNA *prop, bool *r_created)
{
- CollectionPropertyIterator iter;
-// CollectionPropertyRNA *citerprop; /* UNUSED */
- PropertyRNA *iterprop;
- bool equals = true;
+ ID *id = ptr->id.data;
- if (a == NULL && b == NULL)
- return true;
- else if (a == NULL || b == NULL)
- return false;
- else if (a->type != b->type)
- return false;
+ if (!id || !id->override_static) {
+ return NULL;
+ }
- iterprop = RNA_struct_iterator_property(a->type);
-// citerprop = (CollectionPropertyRNA *)rna_ensure_property(iterprop); /* UNUSED */
+ char *rna_path = RNA_path_from_ID_to_property(ptr, prop);
+ if (rna_path) {
+ IDOverrideStaticProperty *op = BKE_override_static_property_get(id->override_static, rna_path, r_created);
+ MEM_freeN(rna_path);
+ return op;
+ }
+ return NULL;
+}
- RNA_property_collection_begin(a, iterprop, &iter);
- for (; iter.valid; RNA_property_collection_next(&iter)) {
- PropertyRNA *prop = iter.ptr.data;
+IDOverrideStaticPropertyOperation *RNA_property_override_property_operation_find(
+ PointerRNA *ptr, PropertyRNA *prop, const int index, const bool strict, bool *r_strict)
+{
+ IDOverrideStaticProperty *op = RNA_property_override_property_find(ptr, prop);
- if (!RNA_property_equals(a, b, prop, mode)) {
- equals = false;
- break;
- }
+ if (!op) {
+ return NULL;
}
- RNA_property_collection_end(&iter);
- return equals;
+ return BKE_override_static_property_operation_find(op, NULL, NULL, index, index, strict, r_strict);
}
+IDOverrideStaticPropertyOperation *RNA_property_override_property_operation_get(
+ PointerRNA *ptr, PropertyRNA *prop, const short operation, const int index,
+ const bool strict, bool *r_strict, bool *r_created)
+{
+ IDOverrideStaticProperty *op = RNA_property_override_property_get(ptr, prop, NULL);
+
+ if (!op) {
+ return NULL;
+ }
+
+ return BKE_override_static_property_operation_get(op, operation, NULL, NULL, index, index, strict, r_strict, r_created);
+}
+
+void RNA_property_override_status(
+ PointerRNA *ptr, PropertyRNA *prop, const int index,
+ bool *r_overridable, bool *r_overridden, bool *r_mandatory, bool *r_locked)
+{
+#define SET_RET(_name, _val) if (_name != NULL) *_name = (_val)
+
+ SET_RET(r_overridable, false);
+ SET_RET(r_overridden, false);
+ SET_RET(r_mandatory, false);
+ SET_RET(r_locked, false);
+
+ if (!ptr || !prop || !ptr->id.data || !((ID *)ptr->id.data)->override_static) {
+ return;
+ }
+
+ SET_RET(r_overridable, (prop->flag & PROP_OVERRIDABLE_STATIC) && (prop->flag & PROP_EDITABLE));
+
+ if (r_overridden || r_mandatory || r_locked) {
+ IDOverrideStaticPropertyOperation *opop = RNA_property_override_property_operation_find(ptr, prop, index, false, NULL);
+ SET_RET(r_overridden, opop != NULL);
+ SET_RET(r_mandatory, (opop->flag & IDOVERRIDESTATIC_FLAG_MANDATORY) != 0);
+ SET_RET(r_locked, (opop->flag & IDOVERRIDESTATIC_FLAG_LOCKED) != 0);
+ }
+}
+
+
bool RNA_path_resolved_create(
PointerRNA *ptr, struct PropertyRNA *prop,
diff --git a/source/blender/makesrna/intern/rna_animation.c b/source/blender/makesrna/intern/rna_animation.c
index c9c8a791545..3d11e7bb723 100644
--- a/source/blender/makesrna/intern/rna_animation.c
+++ b/source/blender/makesrna/intern/rna_animation.c
@@ -73,10 +73,11 @@ const EnumPropertyItem rna_enum_keying_flag_items[] = {
#include "BLI_math_base.h"
#include "BKE_animsys.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
#include "BKE_nla.h"
+#include "DEG_depsgraph.h"
+
#include "DNA_object_types.h"
#include "WM_api.h"
@@ -88,7 +89,7 @@ static void rna_AnimData_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Point
/* tag for refresh so that scheduled updates (e.g. action changed) will
* get computed and reflected in the scene [#34869]
*/
- DAG_id_tag_update(id, OB_RECALC_OB | OB_RECALC_DATA);
+ DEG_id_tag_update(id, OB_RECALC_OB | OB_RECALC_DATA);
}
static int rna_AnimData_action_editable(PointerRNA *ptr, const char **UNUSED(r_info))
@@ -114,7 +115,7 @@ static void rna_AnimData_action_set(PointerRNA *ptr, PointerRNA value)
adt = BKE_animdata_from_id(ownerId);
if (adt) {
adt->recalc |= ADT_RECALC_ANIM;
- DAG_id_tag_update(ownerId, OB_RECALC_TIME);
+ DEG_id_tag_update(ownerId, OB_RECALC_TIME);
}
}
@@ -584,6 +585,34 @@ static FCurve *rna_Driver_find(AnimData *adt, ReportList *reports, const char *d
return list_find_fcurve(&adt->drivers, data_path, index);
}
+bool rna_AnimaData_override_apply(
+ PointerRNA *ptr_dst, PointerRNA *ptr_src, PointerRNA *ptr_storage,
+ PropertyRNA *prop_dst, PropertyRNA *prop_src, PropertyRNA *UNUSED(prop_storage),
+ const int len_dst, const int len_src, const int len_storage,
+ IDOverrideStaticPropertyOperation *opop)
+{
+ BLI_assert(len_dst == len_src && (!ptr_storage || len_dst == len_storage) && len_dst == 0);
+ BLI_assert(opop->operation == IDOVERRIDESTATIC_OP_REPLACE && "Unsupported RNA override operation on animdata pointer");
+ UNUSED_VARS_NDEBUG(ptr_storage, len_dst, len_src, len_storage, opop);
+
+ /* AnimData is a special case, since you cannot edit/replace it, it's either existent or not. */
+ AnimData *adt_dst = RNA_property_pointer_get(ptr_dst, prop_dst).data;
+ AnimData *adt_src = RNA_property_pointer_get(ptr_src, prop_src).data;
+
+ if (adt_dst == NULL && adt_src != NULL) {
+ /* Copy anim data from reference into final local ID. */
+ BKE_animdata_copy_id(NULL, ptr_dst->id.data, ptr_src->id.data, false);
+ return true;
+ }
+ else if (adt_dst != NULL && adt_src == NULL) {
+ /* Override has cleared/removed anim data from its reference. */
+ BKE_animdata_free(ptr_dst->id.data, true);
+ return true;
+ }
+
+ return false;
+}
+
#else
/* helper function for Keying Set -> keying settings */
@@ -998,6 +1027,8 @@ void rna_def_animdata_common(StructRNA *srna)
prop = RNA_def_property(srna, "animation_data", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "adt");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
+ RNA_def_property_override_funcs(prop, NULL, NULL, "rna_AnimaData_override_apply");
RNA_def_property_ui_text(prop, "Animation Data", "Animation data for this data-block");
}
@@ -1021,7 +1052,7 @@ static void rna_def_animdata(BlenderRNA *brna)
/* Active Action */
prop = RNA_def_property(srna, "action", PROP_POINTER, PROP_NONE);
/* this flag as well as the dynamic test must be defined for this to be editable... */
- RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_REFCOUNT);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_REFCOUNT | PROP_OVERRIDABLE_STATIC);
RNA_def_property_pointer_funcs(prop, NULL, "rna_AnimData_action_set", NULL, "rna_Action_id_poll");
RNA_def_property_editable_func(prop, "rna_AnimData_action_editable");
RNA_def_property_ui_text(prop, "Action", "Active Action for this data-block");
diff --git a/source/blender/makesrna/intern/rna_armature.c b/source/blender/makesrna/intern/rna_armature.c
index a707bef8845..bbcb583ab39 100644
--- a/source/blender/makesrna/intern/rna_armature.c
+++ b/source/blender/makesrna/intern/rna_armature.c
@@ -44,18 +44,19 @@
#ifdef RNA_RUNTIME
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_idprop.h"
#include "BKE_main.h"
#include "ED_armature.h"
#include "BKE_armature.h"
+#include "DEG_depsgraph.h"
+
static void rna_Armature_update_data(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
ID *id = ptr->id.data;
- DAG_id_tag_update(id, 0);
+ DEG_id_tag_update(id, 0);
WM_main_add_notifier(NC_GEOM | ND_DATA, id);
/*WM_main_add_notifier(NC_OBJECT|ND_POSE, NULL); */
}
@@ -173,7 +174,7 @@ static void rna_Bone_select_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Po
bArmature *arm = (bArmature *)id;
if (arm->flag & ARM_HAS_VIZ_DEPS) {
- DAG_id_tag_update(id, OB_RECALC_DATA);
+ DEG_id_tag_update(id, OB_RECALC_DATA);
}
}
else if (GS(id->name) == ID_OB) {
@@ -181,7 +182,7 @@ static void rna_Bone_select_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Po
bArmature *arm = (bArmature *)ob->data;
if (arm->flag & ARM_HAS_VIZ_DEPS) {
- DAG_id_tag_update(id, OB_RECALC_DATA);
+ DEG_id_tag_update(id, OB_RECALC_DATA);
}
}
}
@@ -725,6 +726,7 @@ static void rna_def_bone(BlenderRNA *brna)
prop = RNA_def_property(srna, "parent", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "Bone");
RNA_def_property_pointer_sdna(prop, NULL, "parent");
+ RNA_def_property_flag(prop, PROP_PTR_NO_OWNERSHIP);
RNA_def_property_ui_text(prop, "Parent", "Parent bone (in same Armature)");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
@@ -732,6 +734,7 @@ static void rna_def_bone(BlenderRNA *brna)
prop = RNA_def_property(srna, "children", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "childbase", NULL);
RNA_def_property_struct_type(prop, "Bone");
+ RNA_def_property_flag(prop, PROP_PTR_NO_OWNERSHIP);
RNA_def_property_ui_text(prop, "Children", "Bones which are children of this bone");
rna_def_bone_common(srna, 0);
diff --git a/source/blender/makesrna/intern/rna_boid.c b/source/blender/makesrna/intern/rna_boid.c
index fd3694e7c45..98ca58e0edd 100644
--- a/source/blender/makesrna/intern/rna_boid.c
+++ b/source/blender/makesrna/intern/rna_boid.c
@@ -87,9 +87,11 @@ static const EnumPropertyItem boidruleset_type_items[] = {
#include "BLI_math_base.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_particle.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
static void rna_Boids_reset(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
if (ptr->type == &RNA_ParticleSystem) {
@@ -97,10 +99,10 @@ static void rna_Boids_reset(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRN
psys->recalc = PSYS_RECALC_RESET;
- DAG_id_tag_update(ptr->id.data, OB_RECALC_DATA);
+ DEG_id_tag_update(ptr->id.data, OB_RECALC_DATA);
}
else
- DAG_id_tag_update(ptr->id.data, OB_RECALC_DATA | PSYS_RECALC_RESET);
+ DEG_id_tag_update(ptr->id.data, OB_RECALC_DATA | PSYS_RECALC_RESET);
WM_main_add_notifier(NC_OBJECT | ND_PARTICLE | NA_EDITED, NULL);
}
@@ -111,12 +113,12 @@ static void rna_Boids_reset_deps(Main *bmain, Scene *UNUSED(scene), PointerRNA *
psys->recalc = PSYS_RECALC_RESET;
- DAG_id_tag_update(ptr->id.data, OB_RECALC_DATA);
+ DEG_id_tag_update(ptr->id.data, OB_RECALC_DATA);
}
else
- DAG_id_tag_update(ptr->id.data, OB_RECALC_DATA | PSYS_RECALC_RESET);
+ DEG_id_tag_update(ptr->id.data, OB_RECALC_DATA | PSYS_RECALC_RESET);
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
WM_main_add_notifier(NC_OBJECT | ND_PARTICLE | NA_EDITED, NULL);
}
diff --git a/source/blender/makesrna/intern/rna_brush.c b/source/blender/makesrna/intern/rna_brush.c
index 6a67e036c5d..aa37c9ffa88 100644
--- a/source/blender/makesrna/intern/rna_brush.c
+++ b/source/blender/makesrna/intern/rna_brush.c
@@ -31,6 +31,7 @@
#include "DNA_texture_types.h"
#include "DNA_scene_types.h"
#include "DNA_object_types.h"
+#include "DNA_workspace_types.h"
#include "BLI_math.h"
@@ -43,6 +44,8 @@
#include "WM_types.h"
+#include "DEG_depsgraph.h"
+
static const EnumPropertyItem prop_direction_items[] = {
{0, "ADD", 0, "Add", "Add effect of brush"},
{BRUSH_DIR_IN, "SUBTRACT", 0, "Subtract", "Subtract effect of brush"},
@@ -371,17 +374,25 @@ static void rna_Brush_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerR
/*WM_main_add_notifier(NC_SPACE|ND_SPACE_VIEW3D, NULL); */
}
-static void rna_Brush_main_tex_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+static void rna_Brush_main_tex_update(bContext *C, PointerRNA *ptr)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
+ Main *bmain = CTX_data_main(C);
+ Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Brush *br = (Brush *)ptr->data;
- BKE_paint_invalidate_overlay_tex(scene, br->mtex.tex);
+ BKE_paint_invalidate_overlay_tex(scene, view_layer, br->mtex.tex, workspace->object_mode);
rna_Brush_update(bmain, scene, ptr);
}
-static void rna_Brush_secondary_tex_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+static void rna_Brush_secondary_tex_update(bContext *C, PointerRNA *ptr)
{
+ Main *bmain = CTX_data_main(C);
+ const WorkSpace *workspace = CTX_wm_workspace(C);
+ Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Brush *br = (Brush *)ptr->data;
- BKE_paint_invalidate_overlay_tex(scene, br->mask_mtex.tex);
+ BKE_paint_invalidate_overlay_tex(scene, view_layer, br->mask_mtex.tex, workspace->object_mode);
rna_Brush_update(bmain, scene, ptr);
}
@@ -437,14 +448,18 @@ static void rna_Brush_icon_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Poi
WM_main_add_notifier(NC_BRUSH | NA_EDITED, br);
}
-static void rna_TextureSlot_brush_angle_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+static void rna_TextureSlot_brush_angle_update(bContext *C, PointerRNA *ptr)
{
+ Scene *scene = CTX_data_scene(C);
MTex *mtex = ptr->data;
/* skip invalidation of overlay for stencil mode */
- if (mtex->mapping != MTEX_MAP_MODE_STENCIL)
- BKE_paint_invalidate_overlay_tex(scene, mtex->tex);
+ if (mtex->mapping != MTEX_MAP_MODE_STENCIL) {
+ const WorkSpace *workspace = CTX_wm_workspace(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ BKE_paint_invalidate_overlay_tex(scene, view_layer, mtex->tex, workspace->object_mode);
+ }
- rna_TextureSlot_update(bmain, scene, ptr);
+ rna_TextureSlot_update(C, ptr);
}
static void rna_Brush_set_size(PointerRNA *ptr, int value)
@@ -658,39 +673,46 @@ static void rna_def_brush_texture_slot(BlenderRNA *brna)
RNA_def_property_float_sdna(prop, NULL, "rot");
RNA_def_property_range(prop, 0, M_PI * 2);
RNA_def_property_ui_text(prop, "Angle", "Brush texture rotation");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(prop, 0, "rna_TextureSlot_brush_angle_update");
prop = RNA_def_property(srna, "map_mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "brush_map_mode");
RNA_def_property_enum_items(prop, prop_map_mode_items);
RNA_def_property_ui_text(prop, "Mode", "");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(prop, 0, "rna_TextureSlot_update");
prop = RNA_def_property(srna, "tex_paint_map_mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "brush_map_mode");
RNA_def_property_enum_items(prop, prop_tex_paint_map_mode_items);
RNA_def_property_ui_text(prop, "Mode", "");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(prop, 0, "rna_TextureSlot_update");
prop = RNA_def_property(srna, "mask_map_mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "brush_map_mode");
RNA_def_property_enum_items(prop, prop_mask_paint_map_mode_items);
RNA_def_property_ui_text(prop, "Mode", "");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(prop, 0, "rna_TextureSlot_update");
prop = RNA_def_property(srna, "use_rake", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "brush_angle_mode", MTEX_ANGLE_RAKE);
RNA_def_property_ui_text(prop, "Rake", "");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(prop, 0, "rna_TextureSlot_update");
prop = RNA_def_property(srna, "use_random", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "brush_angle_mode", MTEX_ANGLE_RANDOM);
RNA_def_property_ui_text(prop, "Random", "");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(prop, 0, "rna_TextureSlot_update");
prop = RNA_def_property(srna, "random_angle", PROP_FLOAT, PROP_ANGLE);
RNA_def_property_range(prop, 0, M_PI * 2);
RNA_def_property_ui_text(prop, "Random Angle", "Brush texture random angle");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(prop, 0, "rna_TextureSlot_update");
TEXTURE_CAPABILITY(has_texture_angle_source, "Has Texture Angle Source");
@@ -1367,7 +1389,7 @@ static void rna_def_brush(BlenderRNA *brna)
prop = RNA_def_property(srna, "texture", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "mtex.tex");
- RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_CONTEXT_UPDATE);
RNA_def_property_ui_text(prop, "Texture", "");
RNA_def_property_update(prop, NC_TEXTURE, "rna_Brush_main_tex_update");
@@ -1379,7 +1401,7 @@ static void rna_def_brush(BlenderRNA *brna)
prop = RNA_def_property(srna, "mask_texture", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "mask_mtex.tex");
- RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_CONTEXT_UPDATE);
RNA_def_property_ui_text(prop, "Mask Texture", "");
RNA_def_property_update(prop, NC_TEXTURE, "rna_Brush_secondary_tex_update");
diff --git a/source/blender/makesrna/intern/rna_cachefile.c b/source/blender/makesrna/intern/rna_cachefile.c
index 73928d377f1..c0aa1f2a9f4 100644
--- a/source/blender/makesrna/intern/rna_cachefile.c
+++ b/source/blender/makesrna/intern/rna_cachefile.c
@@ -37,7 +37,6 @@
#include "BLI_string.h"
#include "BKE_cachefile.h"
-#include "BKE_depsgraph.h"
#include "DEG_depsgraph.h"
@@ -52,7 +51,7 @@ static void rna_CacheFile_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
CacheFile *cache_file = (CacheFile *)ptr->data;
- DAG_id_tag_update(&cache_file->id, 0);
+ DEG_id_tag_update(&cache_file->id, 0);
WM_main_add_notifier(NC_OBJECT | ND_DRAW, NULL);
UNUSED_VARS(bmain, scene);
@@ -63,7 +62,7 @@ static void rna_CacheFile_update_handle(Main *bmain, Scene *scene, PointerRNA *p
CacheFile *cache_file = ptr->data;
if ((cache_file->flag & CACHEFILE_DIRTY) != 0) {
- BKE_cachefile_clean(scene, cache_file);
+ BKE_cachefile_clean(bmain, cache_file);
BLI_freelistN(&cache_file->object_paths);
cache_file->flag &= ~CACHEFILE_DIRTY;
}
diff --git a/source/blender/makesrna/intern/rna_camera.c b/source/blender/makesrna/intern/rna_camera.c
index 981ae75e7c5..146a8e2738d 100644
--- a/source/blender/makesrna/intern/rna_camera.c
+++ b/source/blender/makesrna/intern/rna_camera.c
@@ -30,20 +30,22 @@
#include "BLI_math.h"
+#include "RNA_access.h"
#include "RNA_define.h"
#include "rna_internal.h"
+#include "WM_api.h"
#include "WM_types.h"
#ifdef RNA_RUNTIME
#include "BKE_camera.h"
-#include "BKE_depsgraph.h"
#include "BKE_object.h"
#include "BKE_sequencer.h"
-#include "WM_api.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
static float rna_Camera_angle_get(PointerRNA *ptr)
{
@@ -87,14 +89,43 @@ static void rna_Camera_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Pointer
{
Camera *camera = (Camera *)ptr->id.data;
- DAG_id_tag_update(&camera->id, 0);
+ DEG_id_tag_update(&camera->id, 0);
}
static void rna_Camera_dependency_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
Camera *camera = (Camera *)ptr->id.data;
- DAG_relations_tag_update(bmain);
- DAG_id_tag_update(&camera->id, 0);
+ DEG_relations_tag_update(bmain);
+ DEG_id_tag_update(&camera->id, 0);
+}
+
+static CameraBGImage *rna_Camera_background_images_new(Camera *cam)
+{
+ CameraBGImage *bgpic = BKE_camera_background_image_new(cam);
+
+ WM_main_add_notifier(NC_CAMERA | ND_DRAW_RENDER_VIEWPORT, cam);
+
+ return bgpic;
+}
+
+static void rna_Camera_background_images_remove(Camera *cam, ReportList *reports, PointerRNA *bgpic_ptr)
+{
+ CameraBGImage *bgpic = bgpic_ptr->data;
+ if (BLI_findindex(&cam->bg_images, bgpic) == -1) {
+ BKE_report(reports, RPT_ERROR, "Background image cannot be removed");
+ }
+
+ BKE_camera_background_image_remove(cam, bgpic);
+ RNA_POINTER_INVALIDATE(bgpic_ptr);
+
+ WM_main_add_notifier(NC_CAMERA | ND_DRAW_RENDER_VIEWPORT, cam);
+}
+
+static void rna_Camera_background_images_clear(Camera *cam)
+{
+ BKE_camera_background_image_clear(cam);
+
+ WM_main_add_notifier(NC_CAMERA | ND_DRAW_RENDER_VIEWPORT, cam);
}
static void rna_Camera_dof_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *UNUSED(ptr))
@@ -107,6 +138,161 @@ static void rna_Camera_dof_update(Main *UNUSED(bmain), Scene *scene, PointerRNA
#else
+static void rna_def_camera_background_image(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ static const EnumPropertyItem bgpic_source_items[] = {
+ {CAM_BGIMG_SOURCE_IMAGE, "IMAGE", 0, "Image", ""},
+ {CAM_BGIMG_SOURCE_MOVIE, "MOVIE_CLIP", 0, "Movie Clip", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
+
+ static const EnumPropertyItem bgpic_camera_frame_items[] = {
+ {0, "STRETCH", 0, "Stretch", ""},
+ {CAM_BGIMG_FLAG_CAMERA_ASPECT, "FIT", 0, "Fit", ""},
+ {CAM_BGIMG_FLAG_CAMERA_ASPECT | CAM_BGIMG_FLAG_CAMERA_CROP, "CROP", 0, "Crop", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
+
+ static const EnumPropertyItem bgpic_draw_depth_items[] = {
+ {0, "BACK", 0, "Back", ""},
+ {CAM_BGIMG_FLAG_FOREGROUND, "FRONT", 0, "Front", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
+
+ srna = RNA_def_struct(brna, "CameraBackgroundImage", NULL);
+ RNA_def_struct_sdna(srna, "CameraBGImage");
+ RNA_def_struct_ui_text(srna, "Background Image", "Image and settings for display in the 3D View background");
+
+ prop = RNA_def_property(srna, "source", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "source");
+ RNA_def_property_enum_items(prop, bgpic_source_items);
+ RNA_def_property_ui_text(prop, "Background Source", "Data source used for background");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+
+ prop = RNA_def_property(srna, "image", PROP_POINTER, PROP_NONE);
+ RNA_def_property_pointer_sdna(prop, NULL, "ima");
+ RNA_def_property_ui_text(prop, "Image", "Image displayed and edited in this space");
+ RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+
+ prop = RNA_def_property(srna, "clip", PROP_POINTER, PROP_NONE);
+ RNA_def_property_pointer_sdna(prop, NULL, "clip");
+ RNA_def_property_ui_text(prop, "MovieClip", "Movie clip displayed and edited in this space");
+ RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+
+ prop = RNA_def_property(srna, "image_user", PROP_POINTER, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_NEVER_NULL);
+ RNA_def_property_pointer_sdna(prop, NULL, "iuser");
+ RNA_def_property_ui_text(prop, "Image User",
+ "Parameters defining which layer, pass and frame of the image is displayed");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+
+ prop = RNA_def_property(srna, "clip_user", PROP_POINTER, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_NEVER_NULL);
+ RNA_def_property_struct_type(prop, "MovieClipUser");
+ RNA_def_property_pointer_sdna(prop, NULL, "cuser");
+ RNA_def_property_ui_text(prop, "Clip User", "Parameters defining which frame of the movie clip is displayed");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+
+ prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_XYZ);
+ RNA_def_property_float_sdna(prop, NULL, "offset");
+ RNA_def_property_ui_text(prop, "Offset", "");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+
+ prop = RNA_def_property(srna, "scale", PROP_FLOAT, PROP_FACTOR);
+ RNA_def_property_float_sdna(prop, NULL, "scale");
+ RNA_def_property_ui_text(prop, "Scale", "Scale the background image");
+ RNA_def_property_range(prop, 0.0, FLT_MAX);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+
+ prop = RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_ANGLE);
+ RNA_def_property_float_sdna(prop, NULL, "rotation");
+ RNA_def_property_ui_text(prop, "Rotation", "Rotation for the background image (ortho view only)");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+
+ prop = RNA_def_property(srna, "use_flip_x", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", CAM_BGIMG_FLAG_FLIP_X);
+ RNA_def_property_ui_text(prop, "Flip Horizontally", "Flip the background image horizontally");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+
+ prop = RNA_def_property(srna, "use_flip_y", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", CAM_BGIMG_FLAG_FLIP_Y);
+ RNA_def_property_ui_text(prop, "Flip Vertically", "Flip the background image vertically");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+
+ prop = RNA_def_property(srna, "alpha", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "alpha");
+ RNA_def_property_ui_text(prop, "Alpha", "Image opacity to blend the image against the background color");
+ RNA_def_property_range(prop, 0.0, 1.0);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+
+ prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", CAM_BGIMG_FLAG_EXPANDED);
+ RNA_def_property_ui_text(prop, "Show Expanded", "Show the expanded in the user interface");
+ RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
+
+ prop = RNA_def_property(srna, "use_camera_clip", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", CAM_BGIMG_FLAG_CAMERACLIP);
+ RNA_def_property_ui_text(prop, "Camera Clip", "Use movie clip from active scene camera");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+
+ prop = RNA_def_property(srna, "show_background_image", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CAM_BGIMG_FLAG_DISABLED);
+ RNA_def_property_ui_text(prop, "Show Background Image", "Show this image as background");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+
+ prop = RNA_def_property(srna, "show_on_foreground", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", CAM_BGIMG_FLAG_FOREGROUND);
+ RNA_def_property_ui_text(prop, "Show On Foreground", "Show this image in front of objects in viewport");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+
+ /* expose 1 flag as a enum of 2 items */
+ prop = RNA_def_property(srna, "draw_depth", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
+ RNA_def_property_enum_items(prop, bgpic_draw_depth_items);
+ RNA_def_property_ui_text(prop, "Depth", "Draw under or over everything");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+
+ /* expose 2 flags as a enum of 3 items */
+ prop = RNA_def_property(srna, "frame_method", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
+ RNA_def_property_enum_items(prop, bgpic_camera_frame_items);
+ RNA_def_property_ui_text(prop, "Frame Method", "How the image fits in the camera frame");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+}
+
+
+static void rna_def_camera_background_images(BlenderRNA *brna, PropertyRNA *cprop)
+{
+ StructRNA *srna;
+ FunctionRNA *func;
+ PropertyRNA *parm;
+
+ RNA_def_property_srna(cprop, "CameraBackgroundImages");
+ srna = RNA_def_struct(brna, "CameraBackgroundImages", NULL);
+ RNA_def_struct_sdna(srna, "Camera");
+ RNA_def_struct_ui_text(srna, "Background Images", "Collection of background images");
+
+ func = RNA_def_function(srna, "new", "rna_Camera_background_images_new");
+ RNA_def_function_ui_description(func, "Add new background image");
+ parm = RNA_def_pointer(func, "image", "CameraBackgroundImage", "", "Image displayed as viewport background");
+ RNA_def_function_return(func, parm);
+
+ func = RNA_def_function(srna, "remove", "rna_Camera_background_images_remove");
+ RNA_def_function_ui_description(func, "Remove background image");
+ RNA_def_function_flag(func, FUNC_USE_REPORTS);
+ parm = RNA_def_pointer(func, "image", "CameraBackgroundImage", "", "Image displayed as viewport background");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
+ RNA_def_parameter_clear_flags(parm, PROP_THICK_WRAP, 0);
+
+ func = RNA_def_function(srna, "clear", "rna_Camera_background_images_clear");
+ RNA_def_function_ui_description(func, "Remove all background images");
+}
+
static void rna_def_camera_stereo_data(BlenderRNA *brna)
{
StructRNA *srna;
@@ -381,6 +567,12 @@ void RNA_def_camera(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Show Sensor Size", "Show sensor size (film gate) in Camera view");
RNA_def_property_update(prop, NC_CAMERA | ND_DRAW_RENDER_VIEWPORT, NULL);
+ prop = RNA_def_property(srna, "show_background_images", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", CAM_SHOW_BG_IMAGE);
+ RNA_def_property_ui_text(prop, "Display Background Images",
+ "Display reference images behind objects in the 3D View");
+ RNA_def_property_update(prop, NC_CAMERA | ND_DRAW_RENDER_VIEWPORT, NULL);
+
prop = RNA_def_property(srna, "lens_unit", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
RNA_def_property_enum_items(prop, prop_lens_unit_items);
@@ -399,8 +591,17 @@ void RNA_def_camera(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "GPU Depth Of Field", "");
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
+ prop = RNA_def_property(srna, "background_images", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_collection_sdna(prop, NULL, "bg_images", NULL);
+ RNA_def_property_struct_type(prop, "CameraBackgroundImage");
+ RNA_def_property_ui_text(prop, "Background Images", "List of background images");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+
rna_def_animdata_common(srna);
+ rna_def_camera_background_image(brna);
+ rna_def_camera_background_images(brna, prop);
+
/* Nested Data */
RNA_define_animate_sdna(true);
diff --git a/source/blender/makesrna/intern/rna_cloth.c b/source/blender/makesrna/intern/rna_cloth.c
index 0ac5bf899a3..3d1a1458102 100644
--- a/source/blender/makesrna/intern/rna_cloth.c
+++ b/source/blender/makesrna/intern/rna_cloth.c
@@ -46,19 +46,20 @@
#ifdef RNA_RUNTIME
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
static void rna_cloth_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
Object *ob = (Object *)ptr->id.data;
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ob);
}
static void rna_cloth_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
rna_cloth_update(bmain, scene, ptr);
}
@@ -70,7 +71,7 @@ static void rna_cloth_pinning_changed(Main *UNUSED(bmain), Scene *UNUSED(scene),
cloth_free_modifier(clmd);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ob);
}
diff --git a/source/blender/makesrna/intern/rna_color.c b/source/blender/makesrna/intern/rna_color.c
index d51436df563..d9b7a58de04 100644
--- a/source/blender/makesrna/intern/rna_color.c
+++ b/source/blender/makesrna/intern/rna_color.c
@@ -54,13 +54,14 @@
#include "BKE_colorband.h"
#include "BKE_colortools.h"
-#include "BKE_depsgraph.h"
#include "BKE_image.h"
#include "BKE_movieclip.h"
#include "BKE_node.h"
#include "BKE_sequencer.h"
#include "BKE_linestyle.h"
+#include "DEG_depsgraph.h"
+
#include "ED_node.h"
#include "IMB_colormanagement.h"
@@ -315,7 +316,7 @@ static void rna_ColorRamp_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *
{
Material *ma = ptr->id.data;
- DAG_id_tag_update(&ma->id, 0);
+ DEG_id_tag_update(&ma->id, 0);
WM_main_add_notifier(NC_MATERIAL | ND_SHADING_DRAW, ma);
break;
}
@@ -335,7 +336,7 @@ static void rna_ColorRamp_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *
{
Tex *tex = ptr->id.data;
- DAG_id_tag_update(&tex->id, 0);
+ DEG_id_tag_update(&tex->id, 0);
WM_main_add_notifier(NC_TEXTURE, tex);
break;
}
@@ -350,7 +351,7 @@ static void rna_ColorRamp_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *
{
ParticleSettings *part = ptr->id.data;
- DAG_id_tag_update(&part->id, OB_RECALC_DATA | PSYS_RECALC_REDO);
+ DEG_id_tag_update(&part->id, OB_RECALC_DATA | PSYS_RECALC_REDO);
WM_main_add_notifier(NC_OBJECT | ND_PARTICLE | NA_EDITED, part);
}
default:
@@ -446,7 +447,7 @@ static void rna_ColorManagedDisplaySettings_display_device_update(Main *UNUSED(b
IMB_colormanagement_validate_settings(&scene->display_settings, &scene->view_settings);
- DAG_id_tag_update(id, 0);
+ DEG_id_tag_update(id, 0);
WM_main_add_notifier(NC_SCENE | ND_SEQUENCER, NULL);
}
}
@@ -581,7 +582,7 @@ static void rna_ColorManagedColorspaceSettings_reload_update(Main *UNUSED(bmain)
if (GS(id->name) == ID_IM) {
Image *ima = (Image *) id;
- DAG_id_tag_update(&ima->id, 0);
+ DEG_id_tag_update(&ima->id, 0);
BKE_image_signal(ima, NULL, IMA_SIGNAL_COLORMANAGE);
@@ -664,7 +665,7 @@ static void rna_ColorManagement_update(Main *UNUSED(bmain), Scene *UNUSED(scene)
return;
if (GS(id->name) == ID_SCE) {
- DAG_id_tag_update(id, 0);
+ DEG_id_tag_update(id, 0);
WM_main_add_notifier(NC_SCENE | ND_SEQUENCER, NULL);
}
}
diff --git a/source/blender/makesrna/intern/rna_constraint.c b/source/blender/makesrna/intern/rna_constraint.c
index bef121cd535..8eb6bc1261e 100644
--- a/source/blender/makesrna/intern/rna_constraint.c
+++ b/source/blender/makesrna/intern/rna_constraint.c
@@ -154,7 +154,6 @@ static const EnumPropertyItem space_object_items[] = {
#include "BKE_action.h"
#include "BKE_constraint.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#ifdef WITH_ALEMBIC
# include "ABC_alembic.h"
diff --git a/source/blender/makesrna/intern/rna_context.c b/source/blender/makesrna/intern/rna_context.c
index 4bbf31d6500..bcd805b0f3a 100644
--- a/source/blender/makesrna/intern/rna_context.c
+++ b/source/blender/makesrna/intern/rna_context.c
@@ -39,6 +39,8 @@
#ifdef RNA_RUNTIME
+#include "RE_engine.h"
+
static PointerRNA rna_Context_manager_get(PointerRNA *ptr)
{
bContext *C = (bContext *)ptr->data;
@@ -51,6 +53,12 @@ static PointerRNA rna_Context_window_get(PointerRNA *ptr)
return rna_pointer_inherit_refine(ptr, &RNA_Window, CTX_wm_window(C));
}
+static PointerRNA rna_Context_workspace_get(PointerRNA *ptr)
+{
+ bContext *C = (bContext *)ptr->data;
+ return rna_pointer_inherit_refine(ptr, &RNA_WorkSpace, CTX_wm_workspace(C));
+}
+
static PointerRNA rna_Context_screen_get(PointerRNA *ptr)
{
bContext *C = (bContext *)ptr->data;
@@ -95,18 +103,76 @@ static PointerRNA rna_Context_region_data_get(PointerRNA *ptr)
return PointerRNA_NULL;
}
+static PointerRNA rna_Context_manipulator_group_get(PointerRNA *ptr)
+{
+ bContext *C = (bContext *)ptr->data;
+ PointerRNA newptr;
+ RNA_pointer_create(NULL, &RNA_ManipulatorGroup, CTX_wm_manipulator_group(C), &newptr);
+ return newptr;
+}
+
static PointerRNA rna_Context_main_get(PointerRNA *ptr)
{
bContext *C = (bContext *)ptr->data;
return rna_pointer_inherit_refine(ptr, &RNA_BlendData, CTX_data_main(C));
}
+static PointerRNA rna_Context_depsgraph_get(PointerRNA *ptr)
+{
+ bContext *C = (bContext *)ptr->data;
+ return rna_pointer_inherit_refine(ptr, &RNA_Depsgraph, CTX_data_depsgraph(C));
+}
+
static PointerRNA rna_Context_scene_get(PointerRNA *ptr)
{
bContext *C = (bContext *)ptr->data;
return rna_pointer_inherit_refine(ptr, &RNA_Scene, CTX_data_scene(C));
}
+static PointerRNA rna_Context_view_layer_get(PointerRNA *ptr)
+{
+ bContext *C = (bContext *)ptr->data;
+ Scene *scene = CTX_data_scene(C);
+ PointerRNA scene_ptr;
+
+ RNA_id_pointer_create(&scene->id, &scene_ptr);
+ return rna_pointer_inherit_refine(&scene_ptr, &RNA_ViewLayer, CTX_data_view_layer(C));
+}
+
+static PointerRNA rna_Context_view_render_get(PointerRNA *ptr)
+{
+ bContext *C = (bContext *)ptr->data;
+ return rna_pointer_inherit_refine(ptr, &RNA_ViewRenderSettings, CTX_data_view_render(C));
+}
+
+static void rna_Context_engine_get(PointerRNA *ptr, char *value)
+ {
+ bContext *C = (bContext *)ptr->data;
+ RenderEngineType *engine_type = CTX_data_engine_type(C);
+ strcpy(value, engine_type->idname);
+}
+
+static int rna_Context_engine_length(PointerRNA *ptr)
+{
+ bContext *C = (bContext *)ptr->data;
+ RenderEngineType *engine_type = CTX_data_engine_type(C);
+ return strlen(engine_type->idname);
+}
+
+static PointerRNA rna_Context_scene_collection_get(PointerRNA *ptr)
+{
+ bContext *C = (bContext *)ptr->data;
+ ptr->id.data = CTX_data_scene(C);
+ return rna_pointer_inherit_refine(ptr, &RNA_SceneCollection, CTX_data_scene_collection(C));
+}
+
+static PointerRNA rna_Context_layer_collection_get(PointerRNA *ptr)
+{
+ bContext *C = (bContext *)ptr->data;
+ ptr->id.data = CTX_data_scene(C);
+ return rna_pointer_inherit_refine(ptr, &RNA_LayerCollection, CTX_data_layer_collection(C));
+}
+
static PointerRNA rna_Context_tool_settings_get(PointerRNA *ptr)
{
bContext *C = (bContext *)ptr->data;
@@ -167,6 +233,11 @@ void RNA_def_context(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "Window");
RNA_def_property_pointer_funcs(prop, "rna_Context_window_get", NULL, NULL, NULL);
+ prop = RNA_def_property(srna, "workspace", PROP_POINTER, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_struct_type(prop, "WorkSpace");
+ RNA_def_property_pointer_funcs(prop, "rna_Context_workspace_get", NULL, NULL, NULL);
+
prop = RNA_def_property(srna, "screen", PROP_POINTER, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_struct_type(prop, "Screen");
@@ -192,17 +263,51 @@ void RNA_def_context(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "RegionView3D");
RNA_def_property_pointer_funcs(prop, "rna_Context_region_data_get", NULL, NULL, NULL);
+ prop = RNA_def_property(srna, "manipulator_group", PROP_POINTER, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_struct_type(prop, "ManipulatorGroup");
+ RNA_def_property_pointer_funcs(prop, "rna_Context_manipulator_group_get", NULL, NULL, NULL);
+
/* Data */
prop = RNA_def_property(srna, "blend_data", PROP_POINTER, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_struct_type(prop, "BlendData");
RNA_def_property_pointer_funcs(prop, "rna_Context_main_get", NULL, NULL, NULL);
+ prop = RNA_def_property(srna, "depsgraph", PROP_POINTER, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_struct_type(prop, "Depsgraph");
+ RNA_def_property_pointer_funcs(prop, "rna_Context_depsgraph_get", NULL, NULL, NULL);
+
prop = RNA_def_property(srna, "scene", PROP_POINTER, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_struct_type(prop, "Scene");
RNA_def_property_pointer_funcs(prop, "rna_Context_scene_get", NULL, NULL, NULL);
+ prop = RNA_def_property(srna, "view_layer", PROP_POINTER, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_struct_type(prop, "ViewLayer");
+ RNA_def_property_pointer_funcs(prop, "rna_Context_view_layer_get", NULL, NULL, NULL);
+
+ prop = RNA_def_property(srna, "view_render", PROP_POINTER, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_struct_type(prop, "ViewRenderSettings");
+ RNA_def_property_pointer_funcs(prop, "rna_Context_view_render_get", NULL, NULL, NULL);
+
+ prop = RNA_def_property(srna, "engine", PROP_STRING, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_string_funcs(prop, "rna_Context_engine_get", "rna_Context_engine_length", NULL);
+
+ prop = RNA_def_property(srna, "scene_collection", PROP_POINTER, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_struct_type(prop, "SceneCollection");
+ RNA_def_property_pointer_funcs(prop, "rna_Context_scene_collection_get", NULL, NULL, NULL);
+
+ prop = RNA_def_property(srna, "layer_collection", PROP_POINTER, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_struct_type(prop, "LayerCollection");
+ RNA_def_property_pointer_funcs(prop, "rna_Context_layer_collection_get", NULL, NULL, NULL);
+
prop = RNA_def_property(srna, "tool_settings", PROP_POINTER, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_struct_type(prop, "ToolSettings");
diff --git a/source/blender/makesrna/intern/rna_curve.c b/source/blender/makesrna/intern/rna_curve.c
index 45b312a742d..894af338c12 100644
--- a/source/blender/makesrna/intern/rna_curve.c
+++ b/source/blender/makesrna/intern/rna_curve.c
@@ -124,9 +124,11 @@ static const EnumPropertyItem curve2d_fill_mode_items[] = {
#include "DNA_object_types.h"
#include "BKE_curve.h"
-#include "BKE_depsgraph.h"
#include "BKE_main.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#include "WM_api.h"
#include "MEM_guardedalloc.h"
@@ -338,7 +340,7 @@ static void rna_BPoint_array_begin(CollectionPropertyIterator *iter, PointerRNA
static void rna_Curve_update_data_id(Main *UNUSED(bmain), Scene *UNUSED(scene), ID *id)
{
- DAG_id_tag_update(id, 0);
+ DEG_id_tag_update(id, 0);
WM_main_add_notifier(NC_GEOM | ND_DATA, id);
}
@@ -349,7 +351,7 @@ static void rna_Curve_update_data(Main *bmain, Scene *scene, PointerRNA *ptr)
static void rna_Curve_update_deps(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
rna_Curve_update_data(bmain, scene, ptr);
}
@@ -638,7 +640,7 @@ static void rna_Curve_spline_remove(Curve *cu, ReportList *reports, PointerRNA *
BKE_nurb_free(nu);
RNA_POINTER_INVALIDATE(nu_ptr);
- DAG_id_tag_update(&cu->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&cu->id, OB_RECALC_DATA);
WM_main_add_notifier(NC_GEOM | ND_DATA, NULL);
}
@@ -648,7 +650,7 @@ static void rna_Curve_spline_clear(Curve *cu)
BKE_nurbList_free(nurbs);
- DAG_id_tag_update(&cu->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&cu->id, OB_RECALC_DATA);
WM_main_add_notifier(NC_GEOM | ND_DATA, NULL);
}
diff --git a/source/blender/makesrna/intern/rna_curve_api.c b/source/blender/makesrna/intern/rna_curve_api.c
index be6808567bb..b518b0cb5b0 100644
--- a/source/blender/makesrna/intern/rna_curve_api.c
+++ b/source/blender/makesrna/intern/rna_curve_api.c
@@ -47,8 +47,14 @@ static void rna_Curve_transform(Curve *cu, float *mat, int shape_keys)
{
BKE_curve_transform(cu, (float (*)[4])mat, shape_keys, true);
- DAG_id_tag_update(&cu->id, 0);
+ DEG_id_tag_update(&cu->id, 0);
}
+
+static void rna_Curve_update_gpu_tag(Curve *cu)
+{
+ BKE_curve_batch_cache_dirty(cu, BKE_CURVE_BATCH_DIRTY_ALL);
+}
+
#else
void RNA_api_curve(StructRNA *srna)
@@ -67,6 +73,8 @@ void RNA_api_curve(StructRNA *srna)
"has had invalid indices corrected (to default 0)");
parm = RNA_def_boolean(func, "result", 0, "Result", "");
RNA_def_function_return(func, parm);
+
+ RNA_def_function(srna, "update_gpu_tag", "rna_Curve_update_gpu_tag");
}
#endif
diff --git a/source/blender/makesrna/intern/rna_define.c b/source/blender/makesrna/intern/rna_define.c
index c8a6a503fd9..03e58f8f78e 100644
--- a/source/blender/makesrna/intern/rna_define.c
+++ b/source/blender/makesrna/intern/rna_define.c
@@ -1270,6 +1270,14 @@ PropertyRNA *RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier
#endif
}
+ /* Override handling. */
+ if (DefRNA.preprocess) {
+ prop->override_diff = (RNAPropOverrideDiff)"rna_property_override_diff_default";
+ prop->override_store = (RNAPropOverrideStore)"rna_property_override_store_default";
+ prop->override_apply = (RNAPropOverrideApply)"rna_property_override_apply_default";
+ }
+ /* TODO: do we want that for runtime-defined stuff too? I’d say no, but... maybe yes :/ */
+
rna_addtail(&cont->properties, prop);
return prop;
@@ -2222,6 +2230,29 @@ void RNA_def_property_editable_array_func(PropertyRNA *prop, const char *editabl
if (editable) prop->itemeditable = (ItemEditableFunc)editable;
}
+/**
+ * Set custom callbacks for override operations handling.
+ *
+ * \note \a diff callback will also be used by RNA comparison/equality functions.
+ */
+void RNA_def_property_override_funcs(PropertyRNA *prop, const char *diff, const char *store, const char *apply)
+{
+ if (!DefRNA.preprocess) {
+ fprintf(stderr, "%s: only during preprocessing.\n", __func__);
+ return;
+ }
+
+ if (diff) {
+ prop->override_diff = (RNAPropOverrideDiff)diff;
+ }
+ if (store) {
+ prop->override_store = (RNAPropOverrideStore)store;
+ }
+ if (apply) {
+ prop->override_apply = (RNAPropOverrideApply)apply;
+ }
+}
+
void RNA_def_property_update(PropertyRNA *prop, int noteflag, const char *func)
{
if (!DefRNA.preprocess) {
diff --git a/source/blender/makesrna/intern/rna_depsgraph.c b/source/blender/makesrna/intern/rna_depsgraph.c
index c6b18d8d387..e6e1c714008 100644
--- a/source/blender/makesrna/intern/rna_depsgraph.c
+++ b/source/blender/makesrna/intern/rna_depsgraph.c
@@ -36,14 +36,89 @@
#include "DEG_depsgraph.h"
-#include "BKE_depsgraph.h"
+#include "DNA_object_types.h"
#define STATS_MAX_SIZE 16384
#ifdef RNA_RUNTIME
+#include "BLI_iterator.h"
+
#include "DEG_depsgraph_build.h"
#include "DEG_depsgraph_debug.h"
+#include "DEG_depsgraph_query.h"
+
+#include "MEM_guardedalloc.h"
+
+/* **************** Depsgraph **************** */
+
+static PointerRNA rna_DepsgraphIter_object_get(PointerRNA *ptr)
+{
+ BLI_Iterator *iterator = ptr->data;
+ return rna_pointer_inherit_refine(ptr, &RNA_Object, iterator->current);
+}
+
+static PointerRNA rna_DepsgraphIter_instance_object_get(PointerRNA *ptr)
+{
+ BLI_Iterator *iterator = ptr->data;
+ DEGObjectIterData *deg_iter = (DEGObjectIterData *)iterator->data;
+ Object *instance_object = NULL;
+ if (deg_iter->dupli_object_current != NULL) {
+ instance_object = deg_iter->dupli_object_current->ob;
+ }
+ return rna_pointer_inherit_refine(ptr, &RNA_Object, instance_object);
+}
+
+static PointerRNA rna_DepsgraphIter_parent_get(PointerRNA *ptr)
+{
+ BLI_Iterator *iterator = ptr->data;
+ DEGObjectIterData *deg_iter = (DEGObjectIterData *)iterator->data;
+ Object *dupli_parent = NULL;
+ if (deg_iter->dupli_object_current != NULL) {
+ dupli_parent = deg_iter->dupli_parent;
+ }
+ return rna_pointer_inherit_refine(ptr, &RNA_Object, dupli_parent);
+}
+
+static void rna_DepsgraphIter_persistent_id_get(PointerRNA *ptr, int *persistent_id)
+{
+ BLI_Iterator *iterator = ptr->data;
+ DEGObjectIterData *deg_iter = (DEGObjectIterData *)iterator->data;
+ memcpy(persistent_id, deg_iter->dupli_object_current->persistent_id,
+ sizeof(deg_iter->dupli_object_current->persistent_id));
+}
+
+static void rna_DepsgraphIter_orco_get(PointerRNA *ptr, float *orco)
+{
+ BLI_Iterator *iterator = ptr->data;
+ DEGObjectIterData *deg_iter = (DEGObjectIterData *)iterator->data;
+ memcpy(orco, deg_iter->dupli_object_current->orco,
+ sizeof(deg_iter->dupli_object_current->orco));
+}
+
+static unsigned int rna_DepsgraphIter_random_id_get(PointerRNA *ptr)
+{
+ BLI_Iterator *iterator = ptr->data;
+ DEGObjectIterData *deg_iter = (DEGObjectIterData *)iterator->data;
+ return deg_iter->dupli_object_current->random_id;
+}
+
+static void rna_DepsgraphIter_uv_get(PointerRNA *ptr, float *uv)
+{
+ BLI_Iterator *iterator = ptr->data;
+ DEGObjectIterData *deg_iter = (DEGObjectIterData *)iterator->data;
+ memcpy(uv, deg_iter->dupli_object_current->uv,
+ sizeof(deg_iter->dupli_object_current->uv));
+}
+
+static int rna_DepsgraphIter_is_instance_get(PointerRNA *ptr)
+{
+ BLI_Iterator *iterator = ptr->data;
+ DEGObjectIterData *deg_iter = (DEGObjectIterData *)iterator->data;
+ return (deg_iter->dupli_object_current != NULL);
+}
+
+/* **************** Depsgraph **************** */
static void rna_Depsgraph_debug_relations_graphviz(Depsgraph *depsgraph,
const char *filename)
@@ -79,16 +154,160 @@ static void rna_Depsgraph_debug_stats(Depsgraph *depsgraph, char *result)
DEG_stats_simple(depsgraph, &outer, &ops, &rels);
BLI_snprintf(result, STATS_MAX_SIZE,
"Approx %lu Operations, %lu Relations, %lu Outer Nodes",
- ops, rels, outer);
+ ops, rels, outer);
+}
+
+/* Iteration over objects, simple version */
+
+static void rna_Depsgraph_objects_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
+{
+ iter->internal.custom = MEM_callocN(sizeof(BLI_Iterator), __func__);
+ DEGObjectIterData *data = MEM_callocN(sizeof(DEGObjectIterData), __func__);
+
+ data->graph = (Depsgraph *)ptr->data;
+ data->flag = DEG_ITER_OBJECT_FLAG_LINKED_DIRECTLY |
+ DEG_ITER_OBJECT_FLAG_VISIBLE |
+ DEG_ITER_OBJECT_FLAG_LINKED_VIA_SET;
+ data->mode = DEG_ITER_OBJECT_MODE_RENDER;
+
+ ((BLI_Iterator *)iter->internal.custom)->valid = true;
+ DEG_iterator_objects_begin(iter->internal.custom, data);
+ iter->valid = ((BLI_Iterator *)iter->internal.custom)->valid;
+}
+
+static void rna_Depsgraph_objects_next(CollectionPropertyIterator *iter)
+{
+ DEG_iterator_objects_next(iter->internal.custom);
+ iter->valid = ((BLI_Iterator *)iter->internal.custom)->valid;
+}
+
+static void rna_Depsgraph_objects_end(CollectionPropertyIterator *iter)
+{
+ DEG_iterator_objects_end(iter->internal.custom);
+ MEM_freeN(((BLI_Iterator *)iter->internal.custom)->data);
+ MEM_freeN(iter->internal.custom);
+}
+
+static PointerRNA rna_Depsgraph_objects_get(CollectionPropertyIterator *iter)
+{
+ Object *ob = ((BLI_Iterator *)iter->internal.custom)->current;
+ return rna_pointer_inherit_refine(&iter->parent, &RNA_Object, ob);
+}
+
+/* Iteration over objects, extended version
+ *
+ * Contains extra information about duplicator and persistent ID.
+ */
+
+static void rna_Depsgraph_duplis_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
+{
+ iter->internal.custom = MEM_callocN(sizeof(BLI_Iterator), __func__);
+ DEGObjectIterData *data = MEM_callocN(sizeof(DEGObjectIterData), __func__);
+
+ data->graph = (Depsgraph *)ptr->data;
+ data->flag = DEG_ITER_OBJECT_FLAG_LINKED_DIRECTLY |
+ DEG_ITER_OBJECT_FLAG_LINKED_VIA_SET |
+ DEG_ITER_OBJECT_FLAG_VISIBLE |
+ DEG_ITER_OBJECT_FLAG_DUPLI;
+ data->mode = DEG_ITER_OBJECT_MODE_RENDER;
+
+ ((BLI_Iterator *)iter->internal.custom)->valid = true;
+ DEG_iterator_objects_begin(iter->internal.custom, data);
+ iter->valid = ((BLI_Iterator *)iter->internal.custom)->valid;
+}
+
+static void rna_Depsgraph_duplis_next(CollectionPropertyIterator *iter)
+{
+ DEG_iterator_objects_next(iter->internal.custom);
+ iter->valid = ((BLI_Iterator *)iter->internal.custom)->valid;
+}
+
+static void rna_Depsgraph_duplis_end(CollectionPropertyIterator *iter)
+{
+ DEG_iterator_objects_end(iter->internal.custom);
+ MEM_freeN(((BLI_Iterator *)iter->internal.custom)->data);
+ MEM_freeN(iter->internal.custom);
+}
+
+static PointerRNA rna_Depsgraph_duplis_get(CollectionPropertyIterator *iter)
+{
+ BLI_Iterator *iterator = (BLI_Iterator *)iter->internal.custom;
+ return rna_pointer_inherit_refine(&iter->parent, &RNA_DepsgraphIter, iterator);
+}
+
+static ID *rna_Depsgraph_evaluated_id_get(Depsgraph *depsgraph, ID *id_orig)
+{
+ return DEG_get_evaluated_id(depsgraph, id_orig);
}
#else
+static void rna_def_depsgraph_iter(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ srna = RNA_def_struct(brna, "DepsgraphIter", NULL);
+ RNA_def_struct_ui_text(srna, "Dependency Graph Iterator",
+ "Extended information about dependency graph object iterator");
+
+ prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
+ RNA_def_property_struct_type(prop, "Object");
+ RNA_def_property_ui_text(prop, "Object", "Object the iterator points to");
+ RNA_def_property_clear_flag(prop, PROP_ANIMATABLE | PROP_EDITABLE);
+ RNA_def_property_pointer_funcs(prop, "rna_DepsgraphIter_object_get", NULL, NULL, NULL);
+
+ prop = RNA_def_property(srna, "instance_object", PROP_POINTER, PROP_NONE);
+ RNA_def_property_struct_type(prop, "Object");
+ RNA_def_property_ui_text(prop, "Instance Object", "Object which is being instanced by this iterator");
+ RNA_def_property_clear_flag(prop, PROP_ANIMATABLE | PROP_EDITABLE);
+ RNA_def_property_pointer_funcs(prop, "rna_DepsgraphIter_instance_object_get", NULL, NULL, NULL);
+
+ prop = RNA_def_property(srna, "parent", PROP_POINTER, PROP_NONE);
+ RNA_def_property_struct_type(prop, "Object");
+ RNA_def_property_ui_text(prop, "Parent", "Parent of the duplication list");
+ RNA_def_property_clear_flag(prop, PROP_ANIMATABLE | PROP_EDITABLE);
+ RNA_def_property_pointer_funcs(prop, "rna_DepsgraphIter_parent_get", NULL, NULL, NULL);
+
+ prop = RNA_def_property(srna, "persistent_id", PROP_INT, PROP_NONE);
+ RNA_def_property_ui_text(prop, "Persistent ID",
+ "Persistent identifier for inter-frame matching of objects with motion blur");
+ RNA_def_property_array(prop, 2 * MAX_DUPLI_RECUR);
+ RNA_def_property_clear_flag(prop, PROP_ANIMATABLE | PROP_EDITABLE);
+ RNA_def_property_int_funcs(prop, "rna_DepsgraphIter_persistent_id_get", NULL, NULL);
+
+ prop = RNA_def_property(srna, "orco", PROP_FLOAT, PROP_TRANSLATION);
+ RNA_def_property_clear_flag(prop, PROP_ANIMATABLE | PROP_EDITABLE);
+ /* Seems system is not smart enough to figure that getter function should return
+ * array for PROP_TRANSLATION.
+ */
+ RNA_def_property_array(prop, 3);
+ RNA_def_property_ui_text(prop, "Generated Coordinates", "Generated coordinates in parent object space");
+ RNA_def_property_float_funcs(prop, "rna_DepsgraphIter_orco_get", NULL, NULL);
+
+ prop = RNA_def_property(srna, "random_id", PROP_INT, PROP_UNSIGNED);
+ RNA_def_property_clear_flag(prop, PROP_ANIMATABLE | PROP_EDITABLE);
+ RNA_def_property_ui_text(prop, "Dupli random id", "Random id for this dupli object");
+ RNA_def_property_int_funcs(prop, "rna_DepsgraphIter_random_id_get", NULL, NULL);
+
+ prop = RNA_def_property(srna, "uv", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_ui_text(prop, "UV Coordinates", "UV coordinates in parent object space");
+ RNA_def_property_array(prop, 2);
+ RNA_def_property_clear_flag(prop, PROP_ANIMATABLE | PROP_EDITABLE);
+ RNA_def_property_float_funcs(prop, "rna_DepsgraphIter_uv_get", NULL, NULL);
+
+ prop = RNA_def_property(srna, "is_instance", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_ANIMATABLE | PROP_EDITABLE);
+ RNA_def_property_ui_text(prop, "Is Instance", "Denotes whether the object is ocming from dupli-list");
+ RNA_def_property_boolean_funcs(prop, "rna_DepsgraphIter_is_instance_get", NULL);
+}
+
static void rna_def_depsgraph(BlenderRNA *brna)
{
StructRNA *srna;
FunctionRNA *func;
PropertyRNA *parm;
+ PropertyRNA *prop;
srna = RNA_def_struct(brna, "Depsgraph", NULL);
RNA_def_struct_ui_text(srna, "Dependency Graph", "");
@@ -114,10 +333,36 @@ static void rna_def_depsgraph(BlenderRNA *brna)
parm = RNA_def_string(func, "result", NULL, STATS_MAX_SIZE, "result", "");
RNA_def_parameter_flags(parm, PROP_THICK_WRAP, 0); /* needed for string return value */
RNA_def_function_output(func, parm);
+
+ prop = RNA_def_property(srna, "objects", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_struct_type(prop, "Object");
+ RNA_def_property_collection_funcs(prop,
+ "rna_Depsgraph_objects_begin",
+ "rna_Depsgraph_objects_next",
+ "rna_Depsgraph_objects_end",
+ "rna_Depsgraph_objects_get",
+ NULL, NULL, NULL, NULL);
+
+ func = RNA_def_function(srna, "evaluated_id_get", "rna_Depsgraph_evaluated_id_get");
+ parm = RNA_def_pointer(func, "id", "ID", "", "Original ID to get evaluated complementary part for");
+ RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+ parm = RNA_def_pointer(func, "evaluated_id", "ID", "", "Evaluated ID for the given original one");
+ RNA_def_function_return(func, parm);
+
+ /* TODO(sergey): Find a better name. */
+ prop = RNA_def_property(srna, "duplis", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_struct_type(prop, "DepsgraphIter");
+ RNA_def_property_collection_funcs(prop,
+ "rna_Depsgraph_duplis_begin",
+ "rna_Depsgraph_duplis_next",
+ "rna_Depsgraph_duplis_end",
+ "rna_Depsgraph_duplis_get",
+ NULL, NULL, NULL, NULL);
}
void RNA_def_depsgraph(BlenderRNA *brna)
{
+ rna_def_depsgraph_iter(brna);
rna_def_depsgraph(brna);
}
diff --git a/source/blender/makesrna/intern/rna_dynamicpaint.c b/source/blender/makesrna/intern/rna_dynamicpaint.c
index 6d93c56885e..b973e0f27ee 100644
--- a/source/blender/makesrna/intern/rna_dynamicpaint.c
+++ b/source/blender/makesrna/intern/rna_dynamicpaint.c
@@ -55,9 +55,10 @@ const EnumPropertyItem rna_enum_prop_dynamicpaint_type_items[] = {
#ifdef RNA_RUNTIME
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_particle.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
static char *rna_DynamicPaintCanvasSettings_path(PointerRNA *ptr)
{
@@ -98,7 +99,7 @@ static char *rna_DynamicPaintSurface_path(PointerRNA *ptr)
static void rna_DynamicPaint_redoModifier(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- DAG_id_tag_update(ptr->id.data, OB_RECALC_DATA);
+ DEG_id_tag_update(ptr->id.data, OB_RECALC_DATA);
}
static void rna_DynamicPaintSurfaces_updateFrames(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
@@ -160,7 +161,7 @@ static void rna_DynamicPaintSurfaces_changeFormat(Main *bmain, Scene *scene, Poi
static void rna_DynamicPaint_reset_dependency(Main *bmain, Scene *scene, PointerRNA *ptr)
{
rna_DynamicPaintSurface_reset(bmain, scene, ptr);
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
}
static PointerRNA rna_PaintSurface_active_get(PointerRNA *ptr)
diff --git a/source/blender/makesrna/intern/rna_fcurve.c b/source/blender/makesrna/intern/rna_fcurve.c
index c8ee6e15689..969424cd989 100644
--- a/source/blender/makesrna/intern/rna_fcurve.c
+++ b/source/blender/makesrna/intern/rna_fcurve.c
@@ -127,9 +127,11 @@ static StructRNA *rna_FModifierType_refine(struct PointerRNA *ptr)
/* ****************************** */
#include "BKE_fcurve.h"
-#include "BKE_depsgraph.h"
#include "BKE_animsys.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
static void rna_ChannelDriver_update_data(Main *bmain, Scene *scene, PointerRNA *ptr)
{
ID *id = ptr->id.data;
@@ -138,8 +140,8 @@ static void rna_ChannelDriver_update_data(Main *bmain, Scene *scene, PointerRNA
driver->flag &= ~DRIVER_FLAG_INVALID;
/* TODO: this really needs an update guard... */
- DAG_relations_tag_update(bmain);
- DAG_id_tag_update(id, OB_RECALC_OB | OB_RECALC_DATA);
+ DEG_relations_tag_update(bmain);
+ DEG_id_tag_update(id, OB_RECALC_OB | OB_RECALC_DATA);
WM_main_add_notifier(NC_SCENE | ND_FRAME, scene);
}
@@ -588,7 +590,7 @@ static void rna_FModifier_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Poin
ID *id = ptr->id.data;
FModifier *fcm = (FModifier *)ptr->data;
AnimData *adt = BKE_animdata_from_id(id);
- DAG_id_tag_update(id, (GS(id->name) == ID_OB) ? OB_RECALC_OB : OB_RECALC_DATA);
+ DEG_id_tag_update(id, (GS(id->name) == ID_OB) ? OB_RECALC_OB : OB_RECALC_DATA);
if (adt != NULL) {
adt->recalc |= ADT_RECALC_ANIM;
}
diff --git a/source/blender/makesrna/intern/rna_fluidsim.c b/source/blender/makesrna/intern/rna_fluidsim.c
index c7cfde18723..a75aceb6f7e 100644
--- a/source/blender/makesrna/intern/rna_fluidsim.c
+++ b/source/blender/makesrna/intern/rna_fluidsim.c
@@ -46,7 +46,6 @@
#include "DNA_scene_types.h"
#include "DNA_particle_types.h"
-#include "BKE_depsgraph.h"
#include "BKE_fluidsim.h"
#include "BKE_global.h"
#include "BKE_main.h"
@@ -54,6 +53,8 @@
#include "BKE_particle.h"
#include "BKE_pointcache.h"
+#include "DEG_depsgraph.h"
+
static StructRNA *rna_FluidSettings_refine(struct PointerRNA *ptr)
{
FluidsimSettings *fss = (FluidsimSettings *)ptr->data;
@@ -82,7 +83,7 @@ static void rna_fluid_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerR
{
Object *ob = ptr->id.data;
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ob);
}
diff --git a/source/blender/makesrna/intern/rna_group.c b/source/blender/makesrna/intern/rna_group.c
index aa02a3c159d..bf64bb1181f 100644
--- a/source/blender/makesrna/intern/rna_group.c
+++ b/source/blender/makesrna/intern/rna_group.c
@@ -49,13 +49,14 @@ static PointerRNA rna_Group_objects_get(CollectionPropertyIterator *iter)
{
ListBaseIterator *internal = &iter->internal.listbase;
- /* we are actually iterating a GroupObject list, so override get */
- return rna_pointer_inherit_refine(&iter->parent, &RNA_Object, ((GroupObject *)internal->link)->ob);
+ /* we are actually iterating a ObjectBase list, so override get */
+ Base *base = (Base *)internal->link;
+ return rna_pointer_inherit_refine(&iter->parent, &RNA_Object, base->object);
}
-static void rna_Group_objects_link(Group *group, bContext *C, ReportList *reports, Object *object)
+static void rna_Group_objects_link(Group *group, ReportList *reports, Object *object)
{
- if (!BKE_group_object_add(group, object, CTX_data_scene(C), NULL)) {
+ if (!BKE_group_object_add(group, object)) {
BKE_reportf(reports, RPT_ERROR, "Object '%s' already in group '%s'", object->id.name + 2, group->id.name + 2);
return;
}
@@ -63,9 +64,9 @@ static void rna_Group_objects_link(Group *group, bContext *C, ReportList *report
WM_main_add_notifier(NC_OBJECT | ND_DRAW, &object->id);
}
-static void rna_Group_objects_unlink(Group *group, bContext *C, ReportList *reports, Object *object)
+static void rna_Group_objects_unlink(Group *group, ReportList *reports, Object *object)
{
- if (!BKE_group_object_unlink(group, object, CTX_data_scene(C), NULL)) {
+ if (!BKE_group_object_unlink(group, object)) {
BKE_reportf(reports, RPT_ERROR, "Object '%s' not in group '%s'", object->id.name + 2, group->id.name + 2);
return;
}
@@ -91,7 +92,7 @@ static void rna_def_group_objects(BlenderRNA *brna, PropertyRNA *cprop)
/* add object */
func = RNA_def_function(srna, "link", "rna_Group_objects_link");
- RNA_def_function_flag(func, FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
+ RNA_def_function_flag(func, FUNC_USE_REPORTS);
RNA_def_function_ui_description(func, "Add this object to a group");
/* object to add */
parm = RNA_def_pointer(func, "object", "Object", "", "Object to add");
@@ -100,7 +101,7 @@ static void rna_def_group_objects(BlenderRNA *brna, PropertyRNA *cprop)
/* remove object */
func = RNA_def_function(srna, "unlink", "rna_Group_objects_unlink");
RNA_def_function_ui_description(func, "Remove this object to a group");
- RNA_def_function_flag(func, FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
+ RNA_def_function_flag(func, FUNC_USE_REPORTS);
/* object to remove */
parm = RNA_def_pointer(func, "object", "Object", "", "Object to remove");
RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
@@ -124,20 +125,18 @@ void RNA_def_group(BlenderRNA *brna)
RNA_def_property_ui_range(prop, -10000.0, 10000.0, 10, RNA_TRANSLATION_PREC_DEFAULT);
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
- prop = RNA_def_property(srna, "layers", PROP_BOOLEAN, PROP_LAYER);
- RNA_def_property_boolean_sdna(prop, NULL, "layer", 1);
- RNA_def_property_array(prop, 20);
- RNA_def_property_ui_text(prop, "Dupli Layers", "Layers visible when this group is instanced as a dupli");
- RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
-
prop = RNA_def_property(srna, "objects", PROP_COLLECTION, PROP_NONE);
- RNA_def_property_collection_sdna(prop, NULL, "gobject", NULL);
+ RNA_def_property_collection_sdna(prop, NULL, "view_layer->object_bases", NULL);
RNA_def_property_struct_type(prop, "Object");
RNA_def_property_ui_text(prop, "Objects", "A collection of this groups objects");
RNA_def_property_collection_funcs(prop, NULL, NULL, NULL, "rna_Group_objects_get", NULL, NULL, NULL, NULL);
-
rna_def_group_objects(brna, prop);
+ prop = RNA_def_property(srna, "view_layer", PROP_POINTER, PROP_NONE);
+ RNA_def_property_struct_type(prop, "ViewLayer");
+ RNA_def_property_flag(prop, PROP_NEVER_NULL);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_ui_text(prop, "View Layer", "Group internal view layer");
}
#endif
diff --git a/source/blender/makesrna/intern/rna_image.c b/source/blender/makesrna/intern/rna_image.c
index cb71cf756ec..212a8bb8e20 100644
--- a/source/blender/makesrna/intern/rna_image.c
+++ b/source/blender/makesrna/intern/rna_image.c
@@ -32,9 +32,10 @@
#include "BLI_utildefines.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_image.h"
+#include "DEG_depsgraph.h"
+
#include "RNA_access.h"
#include "RNA_define.h"
#include "RNA_enum_types.h"
@@ -104,7 +105,7 @@ static void rna_Image_source_set(PointerRNA *ptr, int value)
if (value != ima->source) {
ima->source = value;
BKE_image_signal(ima, NULL, IMA_SIGNAL_SRC_CHANGE);
- DAG_id_tag_update(&ima->id, 0);
+ DEG_id_tag_update(&ima->id, 0);
}
}
@@ -134,7 +135,7 @@ static void rna_Image_reload_update(Main *UNUSED(bmain), Scene *UNUSED(scene), P
Image *ima = ptr->id.data;
BKE_image_signal(ima, NULL, IMA_SIGNAL_RELOAD);
WM_main_add_notifier(NC_IMAGE | NA_EDITED, &ima->id);
- DAG_id_tag_update(&ima->id, 0);
+ DEG_id_tag_update(&ima->id, 0);
}
static void rna_Image_generated_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
@@ -147,7 +148,7 @@ static void rna_Image_colormanage_update(Main *UNUSED(bmain), Scene *UNUSED(scen
{
Image *ima = ptr->id.data;
BKE_image_signal(ima, NULL, IMA_SIGNAL_COLORMANAGE);
- DAG_id_tag_update(&ima->id, 0);
+ DEG_id_tag_update(&ima->id, 0);
WM_main_add_notifier(NC_IMAGE | ND_DISPLAY, &ima->id);
WM_main_add_notifier(NC_IMAGE | NA_EDITED, &ima->id);
}
@@ -177,7 +178,7 @@ static void rna_ImageUser_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *
if (ptr->id.data) {
/* Update material or texture for render preview. */
- DAG_id_tag_update(ptr->id.data, 0);
+ DEG_id_tag_update(ptr->id.data, 0);
}
}
@@ -668,6 +669,7 @@ static void rna_def_image(BlenderRNA *brna)
RNA_def_struct_ui_icon(srna, ICON_IMAGE_DATA);
prop = RNA_def_property(srna, "filepath", PROP_STRING, PROP_FILEPATH);
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
RNA_def_property_string_sdna(prop, NULL, "name");
RNA_def_property_ui_text(prop, "File Name", "Image/Movie file name");
RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Image_reload_update");
@@ -707,6 +709,7 @@ static void rna_def_image(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Packed Files", "Collection of packed images");
prop = RNA_def_property(srna, "field_order", PROP_ENUM, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
RNA_def_property_enum_items(prop, prop_field_order_items);
RNA_def_property_ui_text(prop, "Field Order", "Order of video fields (select which lines are displayed first)");
@@ -714,6 +717,7 @@ static void rna_def_image(BlenderRNA *brna)
/* booleans */
prop = RNA_def_property(srna, "use_fields", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
RNA_def_property_boolean_sdna(prop, NULL, "flag", IMA_FIELDS);
RNA_def_property_ui_text(prop, "Fields", "Use fields of the image");
RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Image_fields_update");
@@ -721,36 +725,43 @@ static void rna_def_image(BlenderRNA *brna)
prop = RNA_def_property(srna, "use_view_as_render", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
RNA_def_property_boolean_sdna(prop, NULL, "flag", IMA_VIEW_AS_RENDER);
RNA_def_property_ui_text(prop, "View as Render", "Apply render part of display transformation when displaying this image on the screen");
RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, NULL);
prop = RNA_def_property(srna, "use_alpha", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", IMA_IGNORE_ALPHA);
RNA_def_property_ui_text(prop, "Use Alpha", "Use the alpha channel information from the image or make image fully opaque");
RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Image_colormanage_update");
prop = RNA_def_property(srna, "use_deinterlace", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
RNA_def_property_boolean_sdna(prop, NULL, "flag", IMA_DEINTERLACE);
RNA_def_property_ui_text(prop, "Deinterlace", "Deinterlace movie file on load");
RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Image_reload_update");
prop = RNA_def_property(srna, "use_multiview", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
RNA_def_property_boolean_sdna(prop, NULL, "flag", IMA_USE_VIEWS);
RNA_def_property_ui_text(prop, "Use Multi-View", "Use Multiple Views (when available)");
RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Image_views_format_update");
prop = RNA_def_property(srna, "is_stereo_3d", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
RNA_def_property_boolean_funcs(prop, "rna_Image_is_stereo_3d_get", NULL);
RNA_def_property_ui_text(prop, "Stereo 3D", "Image has left and right views");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "is_multiview", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
RNA_def_property_boolean_funcs(prop, "rna_Image_is_multiview_get", NULL);
RNA_def_property_ui_text(prop, "Multiple Views", "Image has more than one view");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "is_dirty", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
RNA_def_property_boolean_funcs(prop, "rna_Image_dirty_get", NULL);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Dirty", "Image has changed and is not saved");
@@ -794,12 +805,14 @@ static void rna_def_image(BlenderRNA *brna)
/* realtime properties */
prop = RNA_def_property(srna, "mapping", PROP_ENUM, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
RNA_def_property_enum_items(prop, prop_mapping_items);
RNA_def_property_ui_text(prop, "Mapping", "Mapping type to use for this image in the game engine");
RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, NULL);
prop = RNA_def_property(srna, "display_aspect", PROP_FLOAT, PROP_XYZ);
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
RNA_def_property_float_sdna(prop, NULL, "aspx");
RNA_def_property_array(prop, 2);
RNA_def_property_range(prop, 0.1f, FLT_MAX);
@@ -808,52 +821,61 @@ static void rna_def_image(BlenderRNA *brna)
RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, NULL);
prop = RNA_def_property(srna, "use_animation", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
RNA_def_property_boolean_sdna(prop, NULL, "tpageflag", IMA_TWINANIM);
RNA_def_property_ui_text(prop, "Animated", "Use as animated texture in the game engine");
RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Image_animated_update");
prop = RNA_def_property(srna, "frame_start", PROP_INT, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
RNA_def_property_int_sdna(prop, NULL, "twsta");
RNA_def_property_range(prop, 0, 255);
RNA_def_property_ui_text(prop, "Animation Start", "Start frame of an animated texture");
RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Image_animated_update");
prop = RNA_def_property(srna, "frame_end", PROP_INT, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
RNA_def_property_int_sdna(prop, NULL, "twend");
RNA_def_property_range(prop, 0, 255);
RNA_def_property_ui_text(prop, "Animation End", "End frame of an animated texture");
RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Image_animated_update");
prop = RNA_def_property(srna, "fps", PROP_INT, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
RNA_def_property_int_sdna(prop, NULL, "animspeed");
RNA_def_property_range(prop, 1, 100);
RNA_def_property_ui_text(prop, "Animation Speed", "Speed of the animation in frames per second");
RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, NULL);
prop = RNA_def_property(srna, "use_tiles", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
RNA_def_property_boolean_sdna(prop, NULL, "tpageflag", IMA_TILES);
RNA_def_property_ui_text(prop, "Tiles",
"Use of tilemode for faces (default shift-LMB to pick the tile for selected faces)");
RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, NULL);
prop = RNA_def_property(srna, "tiles_x", PROP_INT, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
RNA_def_property_int_sdna(prop, NULL, "xrep");
RNA_def_property_range(prop, 1, 16);
RNA_def_property_ui_text(prop, "Tiles X", "Degree of repetition in the X direction");
RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, NULL);
prop = RNA_def_property(srna, "tiles_y", PROP_INT, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
RNA_def_property_int_sdna(prop, NULL, "yrep");
RNA_def_property_range(prop, 1, 16);
RNA_def_property_ui_text(prop, "Tiles Y", "Degree of repetition in the Y direction");
RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, NULL);
prop = RNA_def_property(srna, "use_clamp_x", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
RNA_def_property_boolean_sdna(prop, NULL, "tpageflag", IMA_CLAMP_U);
RNA_def_property_ui_text(prop, "Clamp X", "Disable texture repeating horizontally");
RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, NULL);
prop = RNA_def_property(srna, "use_clamp_y", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
RNA_def_property_boolean_sdna(prop, NULL, "tpageflag", IMA_CLAMP_V);
RNA_def_property_ui_text(prop, "Clamp Y", "Disable texture repeating vertically");
RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, NULL);
@@ -892,6 +914,7 @@ static void rna_def_image(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_float_vector(srna, "resolution", 2, NULL, 0, 0, "Resolution", "X/Y pixels per meter", 0, 0);
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
RNA_def_property_float_funcs(prop, "rna_Image_resolution_get", "rna_Image_resolution_set", NULL);
prop = RNA_def_property(srna, "frame_duration", PROP_INT, PROP_UNSIGNED);
@@ -926,12 +949,14 @@ static void rna_def_image(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Color Space Settings", "Input color space settings");
prop = RNA_def_property(srna, "alpha_mode", PROP_ENUM, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
RNA_def_property_enum_items(prop, alpha_mode_items);
RNA_def_property_ui_text(prop, "Alpha Mode", "Representation of alpha information in the RGBA pixels");
RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Image_colormanage_update");
/* multiview */
prop = RNA_def_property(srna, "views_format", PROP_ENUM, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
RNA_def_property_enum_sdna(prop, NULL, "views_format");
RNA_def_property_enum_items(prop, rna_enum_views_format_items);
RNA_def_property_ui_text(prop, "Views Format", "Mode to load image views");
diff --git a/source/blender/makesrna/intern/rna_image_api.c b/source/blender/makesrna/intern/rna_image_api.c
index 61f1edc0af5..7f0ddf04724 100644
--- a/source/blender/makesrna/intern/rna_image_api.c
+++ b/source/blender/makesrna/intern/rna_image_api.c
@@ -56,9 +56,6 @@
#include "IMB_imbuf.h"
#include "IMB_colormanagement.h"
-#include "GPU_draw.h"
-#include "GPU_debug.h"
-
#include "DNA_image_types.h"
#include "DNA_scene_types.h"
@@ -251,6 +248,8 @@ static int rna_Image_gl_load(Image *image, ReportList *reports, int frame, int f
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (GLint)filter);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, (GLint)mag);
+ /* TODO(merwin): validate input (dimensions, filter, mag) before calling OpenGL
+ * instead of trusting input & testing for error after */
error = glGetError();
if (error) {
diff --git a/source/blender/makesrna/intern/rna_internal.h b/source/blender/makesrna/intern/rna_internal.h
index 2d513bd60b4..e987c01134f 100644
--- a/source/blender/makesrna/intern/rna_internal.h
+++ b/source/blender/makesrna/intern/rna_internal.h
@@ -35,13 +35,18 @@
#define RNA_MAGIC ((int)~0)
+struct FreestyleSettings;
struct ID;
+struct IDOverrideStatic;
+struct IDOverrideStaticProperty;
+struct IDOverrideStaticPropertyOperation;
struct IDProperty;
struct Main;
struct Mesh;
struct Object;
struct ReportList;
struct SDNA;
+struct ViewLayer;
/* Data structures used during define */
@@ -166,10 +171,12 @@ void RNA_def_packedfile(struct BlenderRNA *brna);
void RNA_def_palette(struct BlenderRNA *brna);
void RNA_def_particle(struct BlenderRNA *brna);
void RNA_def_pose(struct BlenderRNA *brna);
+void RNA_def_lightprobe(struct BlenderRNA *brna);
void RNA_def_render(struct BlenderRNA *brna);
void RNA_def_rigidbody(struct BlenderRNA *brna);
void RNA_def_rna(struct BlenderRNA *brna);
void RNA_def_scene(struct BlenderRNA *brna);
+void RNA_def_view_layer(struct BlenderRNA *brna);
void RNA_def_screen(struct BlenderRNA *brna);
void RNA_def_sculpt_paint(struct BlenderRNA *brna);
void RNA_def_sensor(struct BlenderRNA *brna);
@@ -186,6 +193,8 @@ void RNA_def_ui(struct BlenderRNA *brna);
void RNA_def_userdef(struct BlenderRNA *brna);
void RNA_def_vfont(struct BlenderRNA *brna);
void RNA_def_wm(struct BlenderRNA *brna);
+void RNA_def_wm_manipulator(struct BlenderRNA *brna);
+void RNA_def_workspace(struct BlenderRNA *brna);
void RNA_def_world(struct BlenderRNA *brna);
void RNA_def_movieclip(struct BlenderRNA *brna);
void RNA_def_tracking(struct BlenderRNA *brna);
@@ -195,6 +204,12 @@ void RNA_def_mask(struct BlenderRNA *brna);
void rna_def_animdata_common(struct StructRNA *srna);
+bool rna_AnimaData_override_apply(
+ struct PointerRNA *ptr_local, struct PointerRNA *ptr_reference, struct PointerRNA *ptr_storage,
+ struct PropertyRNA *prop_local, struct PropertyRNA *prop_reference, struct PropertyRNA *prop_storage,
+ const int len_local, const int len_reference, const int len_storage,
+ struct IDOverrideStaticPropertyOperation *opop);
+
void rna_def_animviz_common(struct StructRNA *srna);
void rna_def_motionpath_common(struct StructRNA *srna);
@@ -205,7 +220,7 @@ void rna_def_mtex_common(struct BlenderRNA *brna, struct StructRNA *srna, const
const char *activeset, const char *activeeditable, const char *structname,
const char *structname_slots, const char *update, const char *update_index);
void rna_def_texpaint_slots(struct BlenderRNA *brna, struct StructRNA *srna);
-void rna_def_render_layer_common(struct StructRNA *srna, int scene);
+void rna_def_view_layer_common(struct StructRNA *srna, int scene);
void rna_def_actionbone_group_common(struct StructRNA *srna, int update_flag, const char *update_cb);
void rna_ActionGroup_colorset_set(struct PointerRNA *ptr, int value);
@@ -234,10 +249,33 @@ void rna_object_vcollayer_name_set(struct PointerRNA *ptr, const char *value, ch
PointerRNA rna_object_shapekey_index_get(struct ID *id, int value);
int rna_object_shapekey_index_set(struct ID *id, PointerRNA value, int current);
+/* ViewLayer related functions defined in rna_scene.c but required in rna_layer.c */
+void rna_def_freestyle_settings(struct BlenderRNA *brna);
+struct PointerRNA rna_FreestyleLineSet_linestyle_get(struct PointerRNA *ptr);
+void rna_FreestyleLineSet_linestyle_set(struct PointerRNA *ptr, struct PointerRNA value);
+struct FreestyleLineSet *rna_FreestyleSettings_lineset_add(
+ struct ID *id, struct FreestyleSettings *config, struct Main *bmain, const char *name);
+void rna_FreestyleSettings_lineset_remove(
+ struct ID *id, struct FreestyleSettings *config, struct ReportList *reports, struct PointerRNA *lineset_ptr);
+struct PointerRNA rna_FreestyleSettings_active_lineset_get(struct PointerRNA *ptr);
+void rna_FreestyleSettings_active_lineset_index_range(
+ struct PointerRNA *ptr, int *min, int *max, int *softmin, int *softmax);
+int rna_FreestyleSettings_active_lineset_index_get(struct PointerRNA *ptr);
+void rna_FreestyleSettings_active_lineset_index_set(struct PointerRNA *ptr, int value);
+struct FreestyleModuleConfig *rna_FreestyleSettings_module_add(struct ID *id, struct FreestyleSettings *config);
+void rna_FreestyleSettings_module_remove(
+ struct ID *id, struct FreestyleSettings *config, struct ReportList *reports, struct PointerRNA *module_ptr);
+
+void rna_Scene_use_view_map_cache_update(struct Main *bmain, struct Scene *scene, struct PointerRNA *ptr);
+void rna_Scene_glsl_update(struct Main *bmain, struct Scene *scene, struct PointerRNA *ptr);
+void rna_Scene_freestyle_update(struct Main *bmain, struct Scene *scene, struct PointerRNA *ptr);
+void rna_ViewLayer_name_set(struct PointerRNA *ptr, const char *value);
+void rna_ViewLayer_pass_update(struct Main *bmain, struct Scene *activescene, struct PointerRNA *ptr);
+
/* named internal so as not to conflict with obj.update() rna func */
void rna_Object_internal_update_data(struct Main *bmain, struct Scene *scene, struct PointerRNA *ptr);
void rna_Mesh_update_draw(struct Main *bmain, struct Scene *scene, struct PointerRNA *ptr);
-void rna_TextureSlot_update(struct Main *bmain, struct Scene *scene, struct PointerRNA *ptr);
+void rna_TextureSlot_update(struct bContext *C, struct PointerRNA *ptr);
/* basic poll functions for object types */
int rna_Armature_object_poll(struct PointerRNA *ptr, struct PointerRNA value);
@@ -268,6 +306,8 @@ void RNA_api_image(struct StructRNA *srna);
void RNA_api_lattice(struct StructRNA *srna);
void RNA_api_operator(struct StructRNA *srna);
void RNA_api_macro(struct StructRNA *srna);
+void RNA_api_manipulator(struct StructRNA *srna);
+void RNA_api_manipulatorgroup(struct StructRNA *srna);
void RNA_api_keyconfig(struct StructRNA *srna);
void RNA_api_keyconfigs(struct StructRNA *srna);
void RNA_api_keyingset(struct StructRNA *srna);
@@ -280,7 +320,7 @@ void RNA_api_material(StructRNA *srna);
void RNA_api_mesh(struct StructRNA *srna);
void RNA_api_meta(struct StructRNA *srna);
void RNA_api_object(struct StructRNA *srna);
-void RNA_api_object_base(struct StructRNA *srna);
+void RNA_api_object_base_legacy(struct StructRNA *srna);
void RNA_api_pose(struct StructRNA *srna);
void RNA_api_pose_channel(struct StructRNA *srna);
void RNA_api_scene(struct StructRNA *srna);
@@ -336,6 +376,8 @@ void RNA_def_main_masks(BlenderRNA *brna, PropertyRNA *cprop);
void RNA_def_main_linestyles(BlenderRNA *brna, PropertyRNA *cprop);
void RNA_def_main_cachefiles(BlenderRNA *brna, PropertyRNA *cprop);
void RNA_def_main_paintcurves(BlenderRNA *brna, PropertyRNA *cprop);
+void RNA_def_main_workspaces(BlenderRNA *brna, PropertyRNA *cprop);
+void RNA_def_main_lightprobes(BlenderRNA *brna, PropertyRNA *cprop);
/* ID Properties */
@@ -357,6 +399,34 @@ extern StructRNA RNA_PropertyGroup;
#endif
struct IDProperty *rna_idproperty_check(struct PropertyRNA **prop, struct PointerRNA *ptr);
+struct PropertyRNA *rna_ensure_property_realdata(struct PropertyRNA **prop, struct PointerRNA *ptr);
+
+/* Override default callbacks. */
+/* Default override callbacks for all types. */
+/* TODO: Maybe at some point we'll want to write that in direct RNA-generated code instead
+ * (like we do for default get/set/etc.)?
+ * Not obvious though, those are fairly more complicated than basic SDNA access.
+ */
+int rna_property_override_diff_default(
+ struct PointerRNA *ptr_a, struct PointerRNA *ptr_b,
+ struct PropertyRNA *prop_a, struct PropertyRNA *prop_b,
+ const int len_a, const int len_b,
+ const int mode,
+ struct IDOverrideStatic *override, const char *rna_path,
+ const int flags, bool *r_override_changed);
+
+bool rna_property_override_store_default(
+ struct PointerRNA *ptr_local, struct PointerRNA *ptr_reference, struct PointerRNA *ptr_storage,
+ struct PropertyRNA *prop_local, struct PropertyRNA *prop_reference, struct PropertyRNA *prop_storage,
+ const int len_local, const int len_reference, const int len_storage,
+ struct IDOverrideStaticPropertyOperation *opop);
+
+bool rna_property_override_apply_default(
+ struct PointerRNA *ptr_dst, struct PointerRNA *ptr_src, struct PointerRNA *ptr_storage,
+ struct PropertyRNA *prop_dst, struct PropertyRNA *prop_src, struct PropertyRNA *prop_storage,
+ const int len_dst, const int len_src, const int len_storage,
+ struct IDOverrideStaticPropertyOperation *opop);
+
/* Builtin Property Callbacks */
@@ -403,7 +473,7 @@ PointerRNA rna_pointer_inherit_refine(struct PointerRNA *ptr, struct StructRNA *
int rna_parameter_size(struct PropertyRNA *parm);
struct Mesh *rna_Main_meshes_new_from_object(
- struct Main *bmain, struct ReportList *reports, struct Scene *sce,
+ struct Main *bmain, struct ReportList *reports, struct Scene *sce, struct ViewLayer *view_layer,
struct Object *ob, int apply_modifiers, int settings, int calc_tessface, int calc_undeformed);
/* XXX, these should not need to be defined here~! */
diff --git a/source/blender/makesrna/intern/rna_internal_types.h b/source/blender/makesrna/intern/rna_internal_types.h
index d93f3308b2a..88efff30481 100644
--- a/source/blender/makesrna/intern/rna_internal_types.h
+++ b/source/blender/makesrna/intern/rna_internal_types.h
@@ -40,20 +40,14 @@ struct PointerRNA;
struct FunctionRNA;
struct CollectionPropertyIterator;
struct bContext;
+struct IDOverrideStatic;
+struct IDOverrideStaticProperty;
+struct IDOverrideStaticPropertyOperation;
struct IDProperty;
struct GHash;
struct Main;
struct Scene;
-#ifdef UNIT_TEST
-#define RNA_MAX_ARRAY_LENGTH 64
-#else
-#define RNA_MAX_ARRAY_LENGTH 32
-#endif
-
-#define RNA_MAX_ARRAY_DIMENSION 3
-
-
/* store local properties here */
#define RNA_IDP_UI "_RNA_UI"
@@ -126,6 +120,54 @@ typedef void (*PropStringSetFuncEx)(struct PointerRNA *ptr, struct PropertyRNA *
typedef int (*PropEnumGetFuncEx)(struct PointerRNA *ptr, struct PropertyRNA *prop);
typedef void (*PropEnumSetFuncEx)(struct PointerRNA *ptr, struct PropertyRNA *prop, int value);
+/* Handling override operations, and also comparison. */
+
+/**
+ * If \a override is NULL, merely do comparison between prop_a from ptr_a and prop_b from ptr_b,
+ * following comparison mode given.
+ * If \a override and \a rna_path are not NULL, it will add a new override operation for overridable properties
+ * that differ and have not yet been overridden (and set accordingly \a r_override_changed if given).
+ *
+ * \note Given PropertyRNA are final (in case of IDProps...).
+ * \note In non-array cases, \a len values are 0.
+ * \note \a override, \a rna_path and \a r_override_changed may be NULL pointers.
+ */
+typedef int (*RNAPropOverrideDiff)(
+ struct PointerRNA *ptr_a, struct PointerRNA *ptr_b,
+ struct PropertyRNA *prop_a, struct PropertyRNA *prop_b,
+ const int len_a, const int len_b,
+ const int mode,
+ struct IDOverrideStatic *override, const char *rna_path,
+ const int flags, bool *r_override_changed);
+
+/**
+ * Only used for differential override (add, sub, etc.).
+ * Store into storage the value needed to transform reference's value into local's value.
+ *
+ * \note Given PropertyRNA are final (in case of IDProps...).
+ * \note In non-array cases, \a len values are 0.
+ * \note Might change given override operation (e.g. change 'add' one into 'sub'), in case computed storage value
+ * is out of range (or even change it to basic 'set' operation if nothing else works).
+ */
+typedef bool (*RNAPropOverrideStore)(
+ struct PointerRNA *ptr_local, struct PointerRNA *ptr_reference, struct PointerRNA *ptr_storage,
+ struct PropertyRNA *prop_local, struct PropertyRNA *prop_reference, struct PropertyRNA *prop_storage,
+ const int len_local, const int len_reference, const int len_storage,
+ struct IDOverrideStaticPropertyOperation *opop);
+
+/**
+ * Apply given override operation from src to dst (using value from storage as second operand
+ * for differential operations).
+ *
+ * \note Given PropertyRNA are final (in case of IDProps...).
+ * \note In non-array cases, \a len values are 0.
+ */
+typedef bool (*RNAPropOverrideApply)(
+ struct PointerRNA *ptr_dst, struct PointerRNA *ptr_src, struct PointerRNA *ptr_storage,
+ struct PropertyRNA *prop_dst, struct PropertyRNA *prop_src, struct PropertyRNA *prop_storage,
+ const int len_dst, const int len_src, const int len_storage,
+ struct IDOverrideStaticPropertyOperation *opop);
+
/* Container - generic abstracted container of RNA properties */
typedef struct ContainerRNA {
void *next, *prev;
@@ -203,6 +245,11 @@ struct PropertyRNA {
/* callback for testing if array-item editable (if applicable) */
ItemEditableFunc itemeditable;
+ /* Override handling callbacks (diff is also used for comparison). */
+ RNAPropOverrideDiff override_diff;
+ RNAPropOverrideStore override_store;
+ RNAPropOverrideApply override_apply;
+
/* raw access */
int rawoffset;
RawPropertyType rawtype;
diff --git a/source/blender/makesrna/intern/rna_key.c b/source/blender/makesrna/intern/rna_key.c
index e65011d34d7..a47a5c604b4 100644
--- a/source/blender/makesrna/intern/rna_key.c
+++ b/source/blender/makesrna/intern/rna_key.c
@@ -51,10 +51,11 @@
#include "DNA_object_types.h"
#include "BKE_animsys.h"
-#include "BKE_depsgraph.h"
#include "BKE_key.h"
#include "BKE_main.h"
+#include "DEG_depsgraph.h"
+
#include "WM_api.h"
#include "WM_types.h"
@@ -486,7 +487,7 @@ static void rna_Key_update_data(Main *bmain, Scene *UNUSED(scene), PointerRNA *p
for (ob = bmain->object.first; ob; ob = ob->id.next) {
if (BKE_key_from_object(ob) == key) {
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ob);
}
}
diff --git a/source/blender/makesrna/intern/rna_lamp.c b/source/blender/makesrna/intern/rna_lamp.c
index f29fa44d306..9e28e31057d 100644
--- a/source/blender/makesrna/intern/rna_lamp.c
+++ b/source/blender/makesrna/intern/rna_lamp.c
@@ -45,10 +45,11 @@
#include "MEM_guardedalloc.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_main.h"
#include "BKE_texture.h"
+#include "DEG_depsgraph.h"
+
#include "ED_node.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -134,7 +135,7 @@ static void rna_Lamp_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRN
{
Lamp *la = ptr->id.data;
- DAG_id_tag_update(&la->id, 0);
+ DEG_id_tag_update(&la->id, 0);
WM_main_add_notifier(NC_LAMP | ND_LIGHTING, la);
}
@@ -142,7 +143,7 @@ static void rna_Lamp_draw_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Poin
{
Lamp *la = ptr->id.data;
- DAG_id_tag_update(&la->id, 0);
+ DEG_id_tag_update(&la->id, 0);
WM_main_add_notifier(NC_LAMP | ND_LIGHTING_DRAW, la);
}
@@ -150,7 +151,7 @@ static void rna_Lamp_sky_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Point
{
Lamp *la = ptr->id.data;
- DAG_id_tag_update(&la->id, 0);
+ DEG_id_tag_update(&la->id, 0);
WM_main_add_notifier(NC_LAMP | ND_SKY, la);
}
@@ -475,7 +476,7 @@ static void rna_def_lamp_falloff(StructRNA *srna)
RNA_def_property_update(prop, 0, "rna_Lamp_draw_update");
}
-static void rna_def_lamp_shadow(StructRNA *srna, int spot, int area)
+static void rna_def_lamp_shadow(StructRNA *srna, int spot, int area, int sun)
{
PropertyRNA *prop;
@@ -586,8 +587,9 @@ static void rna_def_lamp_shadow(StructRNA *srna, int spot, int area)
prop = RNA_def_property(srna, "shadow_buffer_bias", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "bias");
- RNA_def_property_range(prop, 0.001f, 5.0f);
- RNA_def_property_ui_text(prop, "Shadow Buffer Bias", "Shadow buffer sampling bias");
+ RNA_def_property_range(prop, 0.001f, 9999.0f);
+ RNA_def_property_ui_range(prop, 0.001f, 5.0f, 1.0, 3);
+ RNA_def_property_ui_text(prop, "Shadow Buffer Bias", "Bias for reducing self shadowing");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
prop = RNA_def_property(srna, "shadow_buffer_bleed_bias", PROP_FLOAT, PROP_NONE);
@@ -596,6 +598,12 @@ static void rna_def_lamp_shadow(StructRNA *srna, int spot, int area)
RNA_def_property_ui_text(prop, "Shadow Buffer Bleed Bias", "Bias for reducing light-bleed on variance shadow maps");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
+ prop = RNA_def_property(srna, "shadow_buffer_exp", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "bleedexp");
+ RNA_def_property_range(prop, 1.0f, 9999.0f);
+ RNA_def_property_ui_text(prop, "Shadow Buffer Exponent", "Bias for reducing light-bleed on exponential shadow maps");
+ RNA_def_property_update(prop, 0, "rna_Lamp_update");
+
prop = RNA_def_property(srna, "shadow_buffer_soft", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "soft");
RNA_def_property_range(prop, 0.0f, 100.0f);
@@ -690,6 +698,67 @@ static void rna_def_lamp_shadow(StructRNA *srna, int spot, int area)
RNA_def_property_boolean_sdna(prop, NULL, "mode", LA_LAYER_SHADOW);
RNA_def_property_ui_text(prop, "Shadow Layer", "Objects on the same layers only cast shadows");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
+
+ /* Eevee */
+ prop = RNA_def_property(srna, "use_contact_shadow", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "mode", LA_SHAD_CONTACT);
+ RNA_def_property_ui_text(prop, "Contact Shadow", "Use screen space raytracing to have correct shadowing "
+ "near occluder, or for small features that does not appear "
+ "in shadow maps");
+ RNA_def_property_update(prop, 0, "rna_Lamp_update");
+
+ prop = RNA_def_property(srna, "contact_shadow_distance", PROP_FLOAT, PROP_DISTANCE);
+ RNA_def_property_float_sdna(prop, NULL, "contact_dist");
+ RNA_def_property_range(prop, 0.0f, 9999.0f);
+ RNA_def_property_ui_text(prop, "Contact Shadow Distance", "World space distance in which to search for "
+ "screen space occluder");
+ RNA_def_property_update(prop, 0, "rna_Lamp_update");
+
+ prop = RNA_def_property(srna, "contact_shadow_bias", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "contact_bias");
+ RNA_def_property_range(prop, 0.001f, 9999.0f);
+ RNA_def_property_ui_range(prop, 0.001f, 5.0f, 1.0, 3);
+ RNA_def_property_ui_text(prop, "Contact Shadow Bias", "Bias to avoid self shadowing");
+ RNA_def_property_update(prop, 0, "rna_Lamp_update");
+
+ prop = RNA_def_property(srna, "contact_shadow_soft_size", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "contact_spread");
+ RNA_def_property_range(prop, 0.0f, 9999.0f);
+ RNA_def_property_ui_text(prop, "Contact Shadow Soft", "Control how soft the contact shadows will be");
+ RNA_def_property_update(prop, 0, "rna_Lamp_update");
+
+ prop = RNA_def_property(srna, "contact_shadow_thickness", PROP_FLOAT, PROP_DISTANCE);
+ RNA_def_property_float_sdna(prop, NULL, "contact_thickness");
+ RNA_def_property_range(prop, 0.0f, 9999.0f);
+ RNA_def_property_ui_range(prop, 0, 100, 0.1, 3);
+ RNA_def_property_ui_text(prop, "Contact Shadow Thickness", "Pixel thickness used to detect occlusion");
+ RNA_def_property_update(prop, 0, "rna_Lamp_update");
+
+ if (sun) {
+ prop = RNA_def_property(srna, "shadow_cascade_max_distance", PROP_FLOAT, PROP_DISTANCE);
+ RNA_def_property_float_sdna(prop, NULL, "cascade_max_dist");
+ RNA_def_property_range(prop, 0.0f, 9999.0f);
+ RNA_def_property_ui_text(prop, "Cascade Max Distance", "End distance of the cascaded shadow map (only in perspective view)");
+ RNA_def_property_update(prop, 0, "rna_Lamp_update");
+
+ prop = RNA_def_property(srna, "shadow_cascade_count", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "cascade_count");
+ RNA_def_property_range(prop, 1, 4);
+ RNA_def_property_ui_text(prop, "Cascade Count", "Number of texture used by the cascaded shadow map");
+ RNA_def_property_update(prop, 0, "rna_Lamp_update");
+
+ prop = RNA_def_property(srna, "shadow_cascade_exponent", PROP_FLOAT, PROP_FACTOR);
+ RNA_def_property_float_sdna(prop, NULL, "cascade_exponent");
+ RNA_def_property_range(prop, 0.0f, 1.0f);
+ RNA_def_property_ui_text(prop, "Exponential Distribution", "Higher value increase resolution towards the viewpoint");
+ RNA_def_property_update(prop, 0, "rna_Lamp_update");
+
+ prop = RNA_def_property(srna, "shadow_cascade_fade", PROP_FLOAT, PROP_FACTOR);
+ RNA_def_property_float_sdna(prop, NULL, "cascade_fade");
+ RNA_def_property_range(prop, 0.0f, 1.0f);
+ RNA_def_property_ui_text(prop, "Cascade Fade", "How smooth is the transition between each cascade");
+ RNA_def_property_update(prop, 0, "rna_Lamp_update");
+ }
}
static void rna_def_point_lamp(BlenderRNA *brna)
@@ -702,7 +771,7 @@ static void rna_def_point_lamp(BlenderRNA *brna)
RNA_def_struct_ui_icon(srna, ICON_LAMP_POINT);
rna_def_lamp_falloff(srna);
- rna_def_lamp_shadow(srna, 0, 0);
+ rna_def_lamp_shadow(srna, 0, 0, 0);
}
static void rna_def_area_lamp(BlenderRNA *brna)
@@ -721,7 +790,8 @@ static void rna_def_area_lamp(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Area Lamp", "Directional area lamp");
RNA_def_struct_ui_icon(srna, ICON_LAMP_AREA);
- rna_def_lamp_shadow(srna, 0, 1);
+ rna_def_lamp_shadow(srna, 0, 1, 0);
+ rna_def_lamp_falloff(srna);
prop = RNA_def_property(srna, "use_umbra", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "ray_samp_type", LA_SAMP_UMBRA);
@@ -777,7 +847,7 @@ static void rna_def_spot_lamp(BlenderRNA *brna)
RNA_def_struct_ui_icon(srna, ICON_LAMP_SPOT);
rna_def_lamp_falloff(srna);
- rna_def_lamp_shadow(srna, 1, 0);
+ rna_def_lamp_shadow(srna, 1, 0, 0);
prop = RNA_def_property(srna, "use_square", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", LA_SQUARE);
@@ -830,7 +900,7 @@ static void rna_def_sun_lamp(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Sun Lamp", "Constant direction parallel ray lamp");
RNA_def_struct_ui_icon(srna, ICON_LAMP_SUN);
- rna_def_lamp_shadow(srna, 0, 0);
+ rna_def_lamp_shadow(srna, 0, 0, 1);
/* sky */
prop = RNA_def_property(srna, "sky", PROP_POINTER, PROP_NONE);
diff --git a/source/blender/makesrna/intern/rna_lattice.c b/source/blender/makesrna/intern/rna_lattice.c
index 9424ddf7d0e..904a6289fc1 100644
--- a/source/blender/makesrna/intern/rna_lattice.c
+++ b/source/blender/makesrna/intern/rna_lattice.c
@@ -43,11 +43,12 @@
#include "DNA_scene_types.h"
#include "BLI_string.h"
-#include "BKE_depsgraph.h"
#include "BKE_lattice.h"
#include "BKE_main.h"
#include "BKE_deform.h"
+#include "DEG_depsgraph.h"
+
#include "WM_api.h"
#include "WM_types.h"
#include "ED_lattice.h"
@@ -97,7 +98,7 @@ static void rna_Lattice_update_data(Main *UNUSED(bmain), Scene *UNUSED(scene), P
{
ID *id = ptr->id.data;
- DAG_id_tag_update(id, 0);
+ DEG_id_tag_update(id, 0);
WM_main_add_notifier(NC_GEOM | ND_DATA, id);
}
@@ -119,7 +120,7 @@ static void rna_Lattice_update_data_editlatt(Main *UNUSED(bmain), Scene *UNUSED(
BLI_strncpy(lt_em->vgroup, lt->vgroup, sizeof(lt_em->vgroup));
}
- DAG_id_tag_update(id, 0);
+ DEG_id_tag_update(id, 0);
WM_main_add_notifier(NC_GEOM | ND_DATA, id);
}
diff --git a/source/blender/makesrna/intern/rna_lattice_api.c b/source/blender/makesrna/intern/rna_lattice_api.c
index 2ea59d31262..5637f8d9248 100644
--- a/source/blender/makesrna/intern/rna_lattice_api.c
+++ b/source/blender/makesrna/intern/rna_lattice_api.c
@@ -45,8 +45,14 @@ static void rna_Lattice_transform(Lattice *lt, float *mat, int shape_keys)
{
BKE_lattice_transform(lt, (float (*)[4])mat, shape_keys);
- DAG_id_tag_update(&lt->id, 0);
+ DEG_id_tag_update(&lt->id, 0);
}
+
+static void rna_Lattice_update_gpu_tag(Lattice *lt)
+{
+ BKE_lattice_batch_cache_dirty(lt, BKE_LATTICE_BATCH_DIRTY_ALL);
+}
+
#else
void RNA_api_lattice(StructRNA *srna)
@@ -59,6 +65,8 @@ void RNA_api_lattice(StructRNA *srna)
parm = RNA_def_float_matrix(func, "matrix", 4, 4, NULL, 0.0f, 0.0f, "", "Matrix", 0.0f, 0.0f);
RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
RNA_def_boolean(func, "shape_keys", 0, "", "Transform Shape Keys");
+
+ RNA_def_function(srna, "update_gpu_tag", "rna_Lattice_update_gpu_tag");
}
#endif
diff --git a/source/blender/makesrna/intern/rna_layer.c b/source/blender/makesrna/intern/rna_layer.c
new file mode 100644
index 00000000000..a3d570df40a
--- /dev/null
+++ b/source/blender/makesrna/intern/rna_layer.c
@@ -0,0 +1,2313 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Foundation.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/makesrna/intern/rna_layer.c
+ * \ingroup RNA
+ */
+
+#include "DNA_scene_types.h"
+#include "DNA_layer_types.h"
+
+#include "BLI_math.h"
+#include "BLI_string_utils.h"
+
+#include "BLT_translation.h"
+
+#include "ED_object.h"
+#include "ED_render.h"
+
+#include "RE_engine.h"
+
+#include "DRW_engine.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "RNA_define.h"
+
+#include "rna_internal.h"
+
+const EnumPropertyItem rna_enum_layer_collection_mode_settings_type_items[] = {
+ {COLLECTION_MODE_OBJECT, "OBJECT", 0, "Object", ""},
+ {COLLECTION_MODE_EDIT, "EDIT", 0, "Edit", ""},
+ {COLLECTION_MODE_PAINT_WEIGHT, "PAINT_WEIGHT", 0, "Weight Paint", ""},
+ {COLLECTION_MODE_PAINT_WEIGHT, "PAINT_VERTEX", 0, "Vertex Paint", ""},
+ {0, NULL, 0, NULL, NULL}
+};
+
+const EnumPropertyItem rna_enum_collection_type_items[] = {
+ {COLLECTION_TYPE_NONE, "NONE", 0, "Normal", ""},
+ {COLLECTION_TYPE_GROUP_INTERNAL, "GROUP_INTERNAL", 0, "Group Internal", ""},
+ {0, NULL, 0, NULL, NULL}
+};
+
+#ifdef RNA_RUNTIME
+
+#include "DNA_group_types.h"
+#include "DNA_object_types.h"
+#include "DNA_workspace_types.h"
+
+#include "RNA_access.h"
+
+#include "BKE_idprop.h"
+#include "BKE_layer.h"
+#include "BKE_node.h"
+#include "BKE_scene.h"
+#include "BKE_mesh.h"
+#include "BKE_workspace.h"
+
+#include "DEG_depsgraph_build.h"
+#include "DEG_depsgraph_query.h"
+
+static StructRNA *rna_SceneCollection_refine(PointerRNA *ptr)
+{
+ SceneCollection *scene_collection = (SceneCollection *)ptr->data;
+ switch (scene_collection->type) {
+ case COLLECTION_TYPE_GROUP_INTERNAL:
+ case COLLECTION_TYPE_NONE:
+ return &RNA_SceneCollection;
+ default:
+ BLI_assert(!"Collection type not fully implemented");
+ break;
+ }
+ return &RNA_SceneCollection;
+}
+
+static void rna_SceneCollection_name_set(PointerRNA *ptr, const char *value)
+{
+ Scene *scene = (Scene *)ptr->id.data;
+ SceneCollection *sc = (SceneCollection *)ptr->data;
+ BKE_collection_rename(scene, sc, value);
+}
+
+static PointerRNA rna_SceneCollection_objects_get(CollectionPropertyIterator *iter)
+{
+ ListBaseIterator *internal = &iter->internal.listbase;
+
+ /* we are actually iterating a LinkData list, so override get */
+ return rna_pointer_inherit_refine(&iter->parent, &RNA_Object, ((LinkData *)internal->link)->data);
+}
+
+static int rna_SceneCollection_move_above(ID *id, SceneCollection *sc_src, Main *bmain, SceneCollection *sc_dst)
+{
+ if (!BKE_collection_move_above(id, sc_dst, sc_src)) {
+ return 0;
+ }
+
+ DEG_relations_tag_update(bmain);
+ WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
+
+ return 1;
+}
+
+static int rna_SceneCollection_move_below(ID *id, SceneCollection *sc_src, Main *bmain, SceneCollection *sc_dst)
+{
+ if (!BKE_collection_move_below(id, sc_dst, sc_src)) {
+ return 0;
+ }
+
+ DEG_relations_tag_update(bmain);
+ WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
+
+ return 1;
+}
+
+static int rna_SceneCollection_move_into(ID *id, SceneCollection *sc_src, Main *bmain, SceneCollection *sc_dst)
+{
+ if (!BKE_collection_move_into(id, sc_dst, sc_src)) {
+ return 0;
+ }
+
+ DEG_relations_tag_update(bmain);
+ WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
+
+ return 1;
+}
+
+static SceneCollection *rna_SceneCollection_duplicate(
+ ID *id, SceneCollection *scene_collection, Main *bmain, bContext *C, ReportList *reports)
+{
+ if (scene_collection == BKE_collection_master(id)) {
+ BKE_report(reports, RPT_ERROR, "The master collection can't be duplicated");
+ return NULL;
+ }
+
+ SceneCollection *scene_collection_new = BKE_collection_duplicate(id, scene_collection);
+
+ DEG_relations_tag_update(bmain);
+ /* Don't use id here, since the layer collection may come from a group. */
+ WM_event_add_notifier(C, NC_SCENE | ND_LAYER, CTX_data_scene(C));
+
+ return scene_collection_new;
+}
+
+static SceneCollection *rna_SceneCollection_new(
+ ID *id, SceneCollection *sc_parent, Main *bmain, const char *name)
+{
+ SceneCollection *sc = BKE_collection_add(id, sc_parent, COLLECTION_TYPE_NONE, name);
+
+ DEG_relations_tag_update(bmain);
+ WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
+
+ return sc;
+}
+
+static void rna_SceneCollection_remove(
+ ID *id, SceneCollection *sc_parent, Main *bmain, ReportList *reports, PointerRNA *sc_ptr)
+{
+ SceneCollection *sc = sc_ptr->data;
+
+ const int index = BLI_findindex(&sc_parent->scene_collections, sc);
+ if (index == -1) {
+ BKE_reportf(reports, RPT_ERROR, "Collection '%s' is not a sub-collection of '%s'",
+ sc->name, sc_parent->name);
+ return;
+ }
+
+ if (!BKE_collection_remove(id, sc)) {
+ BKE_reportf(reports, RPT_ERROR, "Collection '%s' could not be removed from collection '%s'",
+ sc->name, sc_parent->name);
+ return;
+ }
+
+ RNA_POINTER_INVALIDATE(sc_ptr);
+
+ DEG_relations_tag_update(bmain);
+ WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
+}
+
+static int rna_SceneCollection_objects_active_index_get(PointerRNA *ptr)
+{
+ SceneCollection *sc = (SceneCollection *)ptr->data;
+ return sc->active_object_index;
+}
+
+static void rna_SceneCollection_objects_active_index_set(PointerRNA *ptr, int value)
+{
+ SceneCollection *sc = (SceneCollection *)ptr->data;
+ sc->active_object_index = value;
+}
+
+static void rna_SceneCollection_objects_active_index_range(
+ PointerRNA *ptr, int *min, int *max, int *UNUSED(softmin), int *UNUSED(softmax))
+{
+ SceneCollection *sc = (SceneCollection *)ptr->data;
+ *min = 0;
+ *max = max_ii(0, BLI_listbase_count(&sc->objects) - 1);
+}
+
+void rna_SceneCollection_object_link(
+ ID *id, SceneCollection *sc, Main *bmain, ReportList *reports, Object *ob)
+{
+ Scene *scene = (Scene *)id;
+
+ if (BLI_findptr(&sc->objects, ob, offsetof(LinkData, data))) {
+ BKE_reportf(reports, RPT_ERROR, "Object '%s' is already in collection '%s'", ob->id.name + 2, sc->name);
+ return;
+ }
+
+ BKE_collection_object_add(&scene->id, sc, ob);
+
+ /* TODO(sergey): Only update relations for the current scene. */
+ DEG_relations_tag_update(bmain);
+
+ /* TODO(sergey): Use proper flag for tagging here. */
+ DEG_id_tag_update(&scene->id, 0);
+
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+
+ WM_main_add_notifier(NC_SCENE | ND_LAYER | ND_OB_ACTIVE, scene);
+}
+
+static void rna_SceneCollection_object_unlink(
+ ID *id, SceneCollection *sc, Main *bmain, ReportList *reports, Object *ob)
+{
+ Scene *scene = (Scene *)id;
+
+ if (!BLI_findptr(&sc->objects, ob, offsetof(LinkData, data))) {
+ BKE_reportf(reports, RPT_ERROR, "Object '%s' is not in collection '%s'", ob->id.name + 2, sc->name);
+ return;
+ }
+
+ BKE_collection_object_remove(bmain, &scene->id, sc, ob, false);
+
+ /* needed otherwise the depgraph will contain freed objects which can crash, see [#20958] */
+ DEG_relations_tag_update(bmain);
+
+ WM_main_add_notifier(NC_SCENE | ND_LAYER | ND_OB_ACTIVE, scene);
+}
+
+/****** layer collection engine settings *******/
+
+#define RNA_LAYER_ENGINE_GET_SET(_TYPE_, _ENGINE_, _MODE_, _NAME_) \
+static _TYPE_ rna_LayerEngineSettings_##_ENGINE_##_##_NAME_##_get(PointerRNA *ptr) \
+{ \
+ IDProperty *props = (IDProperty *)ptr->data; \
+ return BKE_collection_engine_property_value_get_##_TYPE_(props, #_NAME_); \
+} \
+ \
+static void rna_LayerEngineSettings_##_ENGINE_##_##_NAME_##_set(PointerRNA *ptr, _TYPE_ value) \
+{ \
+ IDProperty *props = (IDProperty *)ptr->data; \
+ BKE_collection_engine_property_value_set_##_TYPE_(props, #_NAME_, value); \
+}
+
+#define RNA_LAYER_ENGINE_GET_SET_ARRAY(_TYPE_, _ENGINE_, _MODE_, _NAME_, _LEN_) \
+static void rna_LayerEngineSettings_##_ENGINE_##_##_NAME_##_get(PointerRNA *ptr, _TYPE_ *values) \
+{ \
+ IDProperty *props = (IDProperty *)ptr->data; \
+ IDProperty *idprop = IDP_GetPropertyFromGroup(props, #_NAME_); \
+ if (idprop != NULL) { \
+ memcpy(values, IDP_Array(idprop), sizeof(_TYPE_) * idprop->len); \
+ } \
+} \
+ \
+static void rna_LayerEngineSettings_##_ENGINE_##_##_NAME_##_set(PointerRNA *ptr, const _TYPE_ *values) \
+{ \
+ IDProperty *props = (IDProperty *)ptr->data; \
+ BKE_collection_engine_property_value_set_##_TYPE_##_array(props, #_NAME_, values); \
+}
+
+#define RNA_LAYER_ENGINE_CLAY_GET_SET_FLOAT(_NAME_) \
+ RNA_LAYER_ENGINE_GET_SET(float, Clay, COLLECTION_MODE_NONE, _NAME_)
+
+#define RNA_LAYER_ENGINE_CLAY_GET_SET_FLOAT_ARRAY(_NAME_, _LEN_) \
+ RNA_LAYER_ENGINE_GET_SET_ARRAY(float, Clay, COLLECTION_MODE_NONE, _NAME_, _LEN_)
+
+#define RNA_LAYER_ENGINE_CLAY_GET_SET_INT(_NAME_) \
+ RNA_LAYER_ENGINE_GET_SET(int, Clay, COLLECTION_MODE_NONE, _NAME_)
+
+#define RNA_LAYER_ENGINE_CLAY_GET_SET_BOOL(_NAME_) \
+ RNA_LAYER_ENGINE_GET_SET(bool, Clay, COLLECTION_MODE_NONE, _NAME_)
+
+#define RNA_LAYER_ENGINE_EEVEE_GET_SET_FLOAT(_NAME_) \
+ RNA_LAYER_ENGINE_GET_SET(float, Eevee, COLLECTION_MODE_NONE, _NAME_)
+
+#define RNA_LAYER_ENGINE_EEVEE_GET_SET_FLOAT_ARRAY(_NAME_, _LEN_) \
+ RNA_LAYER_ENGINE_GET_SET_ARRAY(float, Eevee, COLLECTION_MODE_NONE, _NAME_, _LEN_)
+
+#define RNA_LAYER_ENGINE_EEVEE_GET_SET_INT(_NAME_) \
+ RNA_LAYER_ENGINE_GET_SET(int, Eevee, COLLECTION_MODE_NONE, _NAME_)
+
+#define RNA_LAYER_ENGINE_EEVEE_GET_SET_BOOL(_NAME_) \
+ RNA_LAYER_ENGINE_GET_SET(bool, Eevee, COLLECTION_MODE_NONE, _NAME_)
+
+/* mode engines */
+
+#define RNA_LAYER_MODE_OBJECT_GET_SET_FLOAT(_NAME_) \
+ RNA_LAYER_ENGINE_GET_SET(float, ObjectMode, COLLECTION_MODE_OBJECT, _NAME_)
+
+#define RNA_LAYER_MODE_OBJECT_GET_SET_INT(_NAME_) \
+ RNA_LAYER_ENGINE_GET_SET(int, ObjectMode, COLLECTION_MODE_OBJECT, _NAME_)
+
+#define RNA_LAYER_MODE_OBJECT_GET_SET_BOOL(_NAME_) \
+ RNA_LAYER_ENGINE_GET_SET(bool, ObjectMode, COLLECTION_MODE_OBJECT, _NAME_)
+
+#define RNA_LAYER_MODE_EDIT_GET_SET_FLOAT(_NAME_) \
+ RNA_LAYER_ENGINE_GET_SET(float, EditMode, COLLECTION_MODE_EDIT, _NAME_)
+
+#define RNA_LAYER_MODE_EDIT_GET_SET_INT(_NAME_) \
+ RNA_LAYER_ENGINE_GET_SET(int, EditMode, COLLECTION_MODE_EDIT, _NAME_)
+
+#define RNA_LAYER_MODE_EDIT_GET_SET_BOOL(_NAME_) \
+ RNA_LAYER_ENGINE_GET_SET(bool, EditMode, COLLECTION_MODE_EDIT, _NAME_)
+
+#define RNA_LAYER_MODE_PAINT_WEIGHT_GET_SET_BOOL(_NAME_) \
+ RNA_LAYER_ENGINE_GET_SET(bool, PaintWeightMode, COLLECTION_MODE_PAINT_WEIGHT, _NAME_)
+
+#define RNA_LAYER_MODE_PAINT_VERTEX_GET_SET_BOOL(_NAME_) \
+ RNA_LAYER_ENGINE_GET_SET(bool, PaintVertexMode, COLLECTION_MODE_PAINT_VERTEX, _NAME_)
+
+/* clay engine */
+#ifdef WITH_CLAY_ENGINE
+/* ViewLayer settings. */
+RNA_LAYER_ENGINE_CLAY_GET_SET_INT(ssao_samples)
+
+/* LayerCollection settings. */
+RNA_LAYER_ENGINE_CLAY_GET_SET_INT(matcap_icon)
+RNA_LAYER_ENGINE_CLAY_GET_SET_FLOAT(matcap_rotation)
+RNA_LAYER_ENGINE_CLAY_GET_SET_FLOAT(matcap_hue)
+RNA_LAYER_ENGINE_CLAY_GET_SET_FLOAT(matcap_saturation)
+RNA_LAYER_ENGINE_CLAY_GET_SET_FLOAT(matcap_value)
+RNA_LAYER_ENGINE_CLAY_GET_SET_FLOAT(ssao_factor_cavity)
+RNA_LAYER_ENGINE_CLAY_GET_SET_FLOAT(ssao_factor_edge)
+RNA_LAYER_ENGINE_CLAY_GET_SET_FLOAT(ssao_distance)
+RNA_LAYER_ENGINE_CLAY_GET_SET_FLOAT(ssao_attenuation)
+RNA_LAYER_ENGINE_CLAY_GET_SET_FLOAT(hair_brightness_randomness)
+#endif /* WITH_CLAY_ENGINE */
+
+/* eevee engine */
+/* ViewLayer settings. */
+RNA_LAYER_ENGINE_EEVEE_GET_SET_BOOL(gtao_enable)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_BOOL(gtao_use_bent_normals)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_BOOL(gtao_bounce)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_FLOAT(gtao_factor)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_FLOAT(gtao_quality)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_FLOAT(gtao_distance)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_BOOL(dof_enable)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_FLOAT(bokeh_max_size)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_FLOAT(bokeh_threshold)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_BOOL(bloom_enable)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_FLOAT(bloom_threshold)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_FLOAT_ARRAY(bloom_color, 3)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_FLOAT(bloom_knee)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_FLOAT(bloom_radius)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_FLOAT(bloom_clamp)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_FLOAT(bloom_intensity)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_BOOL(motion_blur_enable)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_INT(motion_blur_samples)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_FLOAT(motion_blur_shutter)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_BOOL(volumetric_enable)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_FLOAT(volumetric_start)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_FLOAT(volumetric_end)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_INT(volumetric_tile_size)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_INT(volumetric_samples)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_FLOAT(volumetric_sample_distribution)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_BOOL(volumetric_lights)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_FLOAT(volumetric_light_clamp)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_BOOL(volumetric_shadows)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_INT(volumetric_shadow_samples)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_BOOL(volumetric_colored_transmittance)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_BOOL(sss_enable)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_INT(sss_samples)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_FLOAT(sss_jitter_threshold)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_BOOL(sss_separate_albedo)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_BOOL(ssr_refraction)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_BOOL(ssr_enable)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_BOOL(ssr_halfres)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_FLOAT(ssr_quality)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_FLOAT(ssr_max_roughness)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_FLOAT(ssr_thickness)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_FLOAT(ssr_border_fade)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_FLOAT(ssr_firefly_fac)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_INT(shadow_method)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_INT(shadow_size)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_BOOL(shadow_high_bitdepth)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_INT(taa_samples)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_INT(taa_render_samples)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_INT(gi_diffuse_bounces)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_INT(gi_cubemap_resolution)
+RNA_LAYER_ENGINE_EEVEE_GET_SET_INT(gi_visibility_resolution)
+
+/* object engine */
+RNA_LAYER_MODE_OBJECT_GET_SET_BOOL(show_wire)
+RNA_LAYER_MODE_OBJECT_GET_SET_BOOL(show_backface_culling)
+
+/* mesh engine */
+RNA_LAYER_MODE_EDIT_GET_SET_BOOL(show_occlude_wire)
+RNA_LAYER_MODE_EDIT_GET_SET_BOOL(show_weight)
+RNA_LAYER_MODE_EDIT_GET_SET_BOOL(face_normals_show)
+RNA_LAYER_MODE_EDIT_GET_SET_BOOL(vert_normals_show)
+RNA_LAYER_MODE_EDIT_GET_SET_BOOL(loop_normals_show)
+RNA_LAYER_MODE_EDIT_GET_SET_FLOAT(normals_length)
+RNA_LAYER_MODE_EDIT_GET_SET_FLOAT(backwire_opacity)
+
+/* weight paint engine */
+RNA_LAYER_MODE_PAINT_WEIGHT_GET_SET_BOOL(use_shading)
+RNA_LAYER_MODE_PAINT_WEIGHT_GET_SET_BOOL(use_wire)
+
+/* vertex paint engine */
+RNA_LAYER_MODE_PAINT_VERTEX_GET_SET_BOOL(use_shading)
+RNA_LAYER_MODE_PAINT_VERTEX_GET_SET_BOOL(use_wire)
+
+#undef RNA_LAYER_ENGINE_GET_SET
+
+static void rna_ViewLayerEngineSettings_update(bContext *C, PointerRNA *UNUSED(ptr))
+{
+ Scene *scene = CTX_data_scene(C);
+ /* TODO(sergey): Use proper flag for tagging here. */
+ DEG_id_tag_update(&scene->id, 0);
+}
+
+static void rna_LayerCollectionEngineSettings_update(bContext *UNUSED(C), PointerRNA *ptr)
+{
+ ID *id = ptr->id.data;
+ /* TODO(sergey): Use proper flag for tagging here. */
+ DEG_id_tag_update(id, 0);
+
+ /* Instead of passing 'noteflag' to the rna update function, we handle the notifier ourselves.
+ * We need to do this because the LayerCollection may be coming from different ID types (Scene or Group)
+ * and when using NC_SCENE the id most match the active scene for the listener to receive the notification.*/
+
+ WM_main_add_notifier(NC_SCENE | ND_LAYER_CONTENT, NULL);
+}
+
+static void rna_LayerCollectionEngineSettings_wire_update(bContext *C, PointerRNA *UNUSED(ptr))
+{
+ Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Object *ob = OBACT(view_layer);
+
+ if (ob != NULL && ob->type == OB_MESH) {
+ BKE_mesh_batch_cache_dirty(ob->data, BKE_MESH_BATCH_DIRTY_ALL);
+ }
+
+ /* TODO(sergey): Use proper flag for tagging here. */
+ DEG_id_tag_update(&scene->id, 0);
+}
+
+/***********************************/
+
+static void engine_settings_use(IDProperty *root, IDProperty *props, PointerRNA *props_ptr, const char *identifier)
+{
+ PropertyRNA *prop = RNA_struct_find_property(props_ptr, identifier);
+
+ switch (RNA_property_type(prop)) {
+ case PROP_FLOAT:
+ {
+ float value = BKE_collection_engine_property_value_get_float(props, identifier);
+ BKE_collection_engine_property_add_float(root, identifier, value);
+ break;
+ }
+ case PROP_ENUM:
+ {
+ int value = BKE_collection_engine_property_value_get_int(props, identifier);
+ BKE_collection_engine_property_add_int(root, identifier, value);
+ break;
+ }
+ case PROP_INT:
+ {
+ int value = BKE_collection_engine_property_value_get_int(props, identifier);
+ BKE_collection_engine_property_add_int(root, identifier, value);
+ break;
+ }
+ case PROP_BOOLEAN:
+ {
+ int value = BKE_collection_engine_property_value_get_int(props, identifier);
+ BKE_collection_engine_property_add_bool(root, identifier, value);
+ break;
+ }
+ case PROP_STRING:
+ case PROP_POINTER:
+ case PROP_COLLECTION:
+ default:
+ break;
+ }
+}
+
+static StructRNA *rna_ViewLayerSettings_refine(PointerRNA *ptr)
+{
+ IDProperty *props = (IDProperty *)ptr->data;
+ BLI_assert(props && props->type == IDP_GROUP);
+
+ switch (props->subtype) {
+ case IDP_GROUP_SUB_ENGINE_RENDER:
+#ifdef WITH_CLAY_ENGINE
+ if (STREQ(props->name, RE_engine_id_BLENDER_CLAY)) {
+ return &RNA_ViewLayerEngineSettingsClay;
+ }
+#endif
+ if (STREQ(props->name, RE_engine_id_BLENDER_EEVEE)) {
+ return &RNA_ViewLayerEngineSettingsEevee;
+ }
+ break;
+ case IDP_GROUP_SUB_MODE_OBJECT:
+ case IDP_GROUP_SUB_MODE_EDIT:
+ case IDP_GROUP_SUB_MODE_PAINT_WEIGHT:
+ case IDP_GROUP_SUB_MODE_PAINT_VERTEX:
+ default:
+ BLI_assert(!"Mode not fully implemented");
+ break;
+ }
+
+ return &RNA_ViewLayerSettings;
+}
+
+static void rna_ViewLayerSettings_name_get(PointerRNA *ptr, char *value)
+{
+ IDProperty *props = (IDProperty *)ptr->data;
+ strcpy(value, props->name);
+}
+
+static int rna_ViewLayerSettings_name_length(PointerRNA *ptr)
+{
+ IDProperty *props = (IDProperty *)ptr->data;
+ return strnlen(props->name, sizeof(props->name));
+}
+
+static void rna_ViewLayerSettings_use(ID *id, IDProperty *props, const char *identifier)
+{
+ Scene *scene = (Scene *)id;
+ PointerRNA scene_props_ptr;
+ IDProperty *scene_props;
+
+ scene_props = BKE_view_layer_engine_scene_get(scene, COLLECTION_MODE_NONE, props->name);
+ RNA_pointer_create(id, &RNA_ViewLayerSettings, scene_props, &scene_props_ptr);
+
+ engine_settings_use(props, scene_props, &scene_props_ptr, identifier);
+
+ /* TODO(sergey): Use proper flag for tagging here. */
+ DEG_id_tag_update(id, 0);
+}
+
+static void rna_ViewLayerSettings_unuse(ID *id, IDProperty *props, const char *identifier)
+{
+ IDProperty *prop_to_remove = IDP_GetPropertyFromGroup(props, identifier);
+ IDP_FreeFromGroup(props, prop_to_remove);
+
+ /* TODO(sergey): Use proper flag for tagging here. */
+ DEG_id_tag_update(id, 0);
+}
+
+static StructRNA *rna_LayerCollectionSettings_refine(PointerRNA *ptr)
+{
+ IDProperty *props = (IDProperty *)ptr->data;
+ BLI_assert(props && props->type == IDP_GROUP);
+
+ switch (props->subtype) {
+ case IDP_GROUP_SUB_ENGINE_RENDER:
+#ifdef WITH_CLAY_ENGINE
+ if (STREQ(props->name, RE_engine_id_BLENDER_CLAY)) {
+ return &RNA_LayerCollectionEngineSettingsClay;
+ }
+#endif
+ if (STREQ(props->name, RE_engine_id_BLENDER_EEVEE)) {
+ /* printf("Mode not fully implemented\n"); */
+ return &RNA_LayerCollectionSettings;
+ }
+ break;
+ case IDP_GROUP_SUB_MODE_OBJECT:
+ return &RNA_LayerCollectionModeSettingsObject;
+ break;
+ case IDP_GROUP_SUB_MODE_EDIT:
+ return &RNA_LayerCollectionModeSettingsEdit;
+ break;
+ case IDP_GROUP_SUB_MODE_PAINT_WEIGHT:
+ return &RNA_LayerCollectionModeSettingsPaintWeight;
+ break;
+ case IDP_GROUP_SUB_MODE_PAINT_VERTEX:
+ return &RNA_LayerCollectionModeSettingsPaintVertex;
+ break;
+ default:
+ BLI_assert(!"Mode not fully implemented");
+ break;
+ }
+
+ return &RNA_LayerCollectionSettings;
+}
+
+static void rna_LayerCollectionSettings_name_get(PointerRNA *ptr, char *value)
+{
+ IDProperty *props = (IDProperty *)ptr->data;
+ strcpy(value, props->name);
+}
+
+static int rna_LayerCollectionSettings_name_length(PointerRNA *ptr)
+{
+ IDProperty *props = (IDProperty *)ptr->data;
+ return strnlen(props->name, sizeof(props->name));
+}
+
+static void rna_LayerCollectionSettings_use(ID *id, IDProperty *props, const char *identifier)
+{
+ Scene *scene = (Scene *)id;
+ PointerRNA scene_props_ptr;
+ IDProperty *scene_props;
+
+ scene_props = BKE_layer_collection_engine_scene_get(scene, COLLECTION_MODE_NONE, props->name);
+ RNA_pointer_create(id, &RNA_LayerCollectionSettings, scene_props, &scene_props_ptr);
+ engine_settings_use(props, scene_props, &scene_props_ptr, identifier);
+
+ /* TODO(sergey): Use proper flag for tagging here. */
+ DEG_id_tag_update(id, 0);
+}
+
+static void rna_LayerCollectionSettings_unuse(ID *id, IDProperty *props, const char *identifier)
+{
+ IDProperty *prop_to_remove = IDP_GetPropertyFromGroup(props, identifier);
+ IDP_FreeFromGroup(props, prop_to_remove);
+
+ /* TODO(sergey): Use proper flag for tagging here. */
+ DEG_id_tag_update(id, 0);
+}
+
+static void rna_LayerCollection_name_get(PointerRNA *ptr, char *value)
+{
+ SceneCollection *sc = ((LayerCollection *)ptr->data)->scene_collection;
+ strcpy(value, sc->name);
+}
+
+static int rna_LayerCollection_name_length(PointerRNA *ptr)
+{
+ SceneCollection *sc = ((LayerCollection *)ptr->data)->scene_collection;
+ return strnlen(sc->name, sizeof(sc->name));
+}
+
+static void rna_LayerCollection_name_set(PointerRNA *ptr, const char *value)
+{
+ Scene *scene = (Scene *)ptr->id.data;
+ SceneCollection *sc = ((LayerCollection *)ptr->data)->scene_collection;
+ BKE_collection_rename(scene, sc, value);
+}
+
+static PointerRNA rna_LayerCollection_objects_get(CollectionPropertyIterator *iter)
+{
+ ListBaseIterator *internal = &iter->internal.listbase;
+ Base *base = ((LinkData *)internal->link)->data;
+ return rna_pointer_inherit_refine(&iter->parent, &RNA_Object, base->object);
+}
+
+static int rna_LayerCollection_move_above(ID *id, LayerCollection *lc_src, Main *bmain, LayerCollection *lc_dst)
+{
+ if (!BKE_layer_collection_move_above(id, lc_dst, lc_src)) {
+ return 0;
+ }
+
+ DEG_relations_tag_update(bmain);
+ WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
+
+ return 1;
+}
+
+static int rna_LayerCollection_move_below(ID *id, LayerCollection *lc_src, Main *bmain, LayerCollection *lc_dst)
+{
+ if (!BKE_layer_collection_move_below(id, lc_dst, lc_src)) {
+ return 0;
+ }
+
+ DEG_relations_tag_update(bmain);
+ WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
+
+ return 1;
+}
+
+static int rna_LayerCollection_move_into(ID *id, LayerCollection *lc_src, Main *bmain, LayerCollection *lc_dst)
+{
+ if (!BKE_layer_collection_move_into(id, lc_dst, lc_src)) {
+ return 0;
+ }
+
+ DEG_relations_tag_update(bmain);
+ WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
+
+ return 1;
+}
+
+static void rna_LayerCollection_flag_update(bContext *C, PointerRNA *ptr)
+{
+ ID *id = ptr->id.data;
+ /* TODO(sergey): Use proper flag for tagging here. */
+ DEG_id_tag_update(id, 0);
+ WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, CTX_data_scene(C));
+}
+
+static Group *rna_LayerCollection_create_group(
+ ID *id, LayerCollection *layer_collection, Main *bmain, bContext *C, ReportList *reports)
+{
+ Group *group;
+ Scene *scene = (Scene *)id;
+ SceneCollection *scene_collection = layer_collection->scene_collection;
+
+ /* The master collection can't be converted. */
+ if (scene_collection == BKE_collection_master(&scene->id)) {
+ BKE_report(reports, RPT_ERROR, "The master collection can't be converted to group");
+ return NULL;
+ }
+
+ group = BKE_collection_group_create(bmain, scene, layer_collection);
+ if (group == NULL) {
+ BKE_reportf(reports, RPT_ERROR, "Failed to convert collection %s", scene_collection->name);
+ return NULL;
+ }
+
+ DEG_relations_tag_update(bmain);
+ /* TODO(sergey): Use proper flag for tagging here. */
+ DEG_id_tag_update(&scene->id, 0);
+ WM_event_add_notifier(C, NC_SCENE | ND_LAYER, scene);
+ return group;
+}
+
+static LayerCollection *rna_LayerCollection_duplicate(
+ ID *id, LayerCollection *layer_collection, Main *bmain, bContext *C, ReportList *reports)
+{
+ if (layer_collection->scene_collection == BKE_collection_master(id)) {
+ BKE_report(reports, RPT_ERROR, "The master collection can't be duplicated");
+ return NULL;
+ }
+
+ LayerCollection *layer_collection_new = BKE_layer_collection_duplicate(id, layer_collection);
+
+ DEG_relations_tag_update(bmain);
+ /* Don't use id here, since the layer collection may come from a group. */
+ WM_event_add_notifier(C, NC_SCENE | ND_LAYER, CTX_data_scene(C));
+
+ return layer_collection_new;
+}
+
+static int rna_LayerCollections_active_collection_index_get(PointerRNA *ptr)
+{
+ ViewLayer *view_layer = (ViewLayer *)ptr->data;
+ return view_layer->active_collection;
+}
+
+static void rna_LayerCollections_active_collection_index_set(PointerRNA *ptr, int value)
+{
+ ViewLayer *view_layer = (ViewLayer *)ptr->data;
+ int num_collections = BKE_layer_collection_count(view_layer);
+ view_layer->active_collection = min_ff(value, num_collections - 1);
+}
+
+static void rna_LayerCollections_active_collection_index_range(
+ PointerRNA *ptr, int *min, int *max, int *UNUSED(softmin), int *UNUSED(softmax))
+{
+ ViewLayer *view_layer = (ViewLayer *)ptr->data;
+ *min = 0;
+ *max = max_ii(0, BKE_layer_collection_count(view_layer) - 1);
+}
+
+static PointerRNA rna_LayerCollections_active_collection_get(PointerRNA *ptr)
+{
+ ViewLayer *view_layer = (ViewLayer *)ptr->data;
+ LayerCollection *lc = BKE_layer_collection_get_active(view_layer);
+ return rna_pointer_inherit_refine(ptr, &RNA_LayerCollection, lc);
+}
+
+static void rna_LayerCollections_active_collection_set(PointerRNA *ptr, PointerRNA value)
+{
+ ViewLayer *view_layer = (ViewLayer *)ptr->data;
+ LayerCollection *lc = (LayerCollection *)value.data;
+ const int index = BKE_layer_collection_findindex(view_layer, lc);
+ if (index != -1) view_layer->active_collection = index;
+}
+
+LayerCollection * rna_ViewLayer_collection_link(
+ ID *id, ViewLayer *view_layer, Main *bmain, SceneCollection *sc)
+{
+ Scene *scene = (Scene *)id;
+ LayerCollection *lc = BKE_collection_link(view_layer, sc);
+
+ DEG_relations_tag_update(bmain);
+ /* TODO(sergey): Use proper flag for tagging here. */
+ DEG_id_tag_update(id, 0);
+ WM_main_add_notifier(NC_SCENE | ND_LAYER, scene);
+
+ return lc;
+}
+
+static void rna_ViewLayer_collection_unlink(
+ ID *id, ViewLayer *view_layer, Main *bmain, ReportList *reports, LayerCollection *lc)
+{
+ Scene *scene = (Scene *)id;
+
+ if (BLI_findindex(&view_layer->layer_collections, lc) == -1) {
+ BKE_reportf(reports, RPT_ERROR, "Layer collection '%s' is not in '%s'",
+ lc->scene_collection->name, view_layer->name);
+ return;
+ }
+
+ BKE_collection_unlink(view_layer, lc);
+
+ DEG_relations_tag_update(bmain);
+ /* TODO(sergey): Use proper flag for tagging here. */
+ DEG_id_tag_update(id, 0);
+ WM_main_add_notifier(NC_SCENE | ND_LAYER | ND_OB_ACTIVE, scene);
+}
+
+static PointerRNA rna_LayerObjects_active_object_get(PointerRNA *ptr)
+{
+ ViewLayer *view_layer = (ViewLayer *)ptr->data;
+ return rna_pointer_inherit_refine(ptr, &RNA_Object, view_layer->basact ? view_layer->basact->object : NULL);
+}
+
+static void rna_LayerObjects_active_object_set(PointerRNA *ptr, PointerRNA value)
+{
+ ViewLayer *view_layer = (ViewLayer *)ptr->data;
+ if (value.data)
+ view_layer->basact = BKE_view_layer_base_find(view_layer, (Object *)value.data);
+ else
+ view_layer->basact = NULL;
+}
+
+static void rna_LayerObjects_active_object_update(struct bContext *C, PointerRNA *ptr)
+{
+ wmWindow *win = CTX_wm_window(C);
+ Scene *scene = WM_window_get_active_scene(win);
+
+ if (scene != ptr->id.data) {
+ return;
+ }
+
+ WorkSpace *workspace = WM_window_get_active_workspace(win);
+ ViewLayer *view_layer = BKE_workspace_view_layer_get(workspace, scene);
+ if (scene->obedit) {
+ ED_object_editmode_exit(C, EM_FREEDATA);
+ }
+ ED_object_base_activate(C, view_layer->basact);
+}
+
+static IDProperty *rna_ViewLayer_idprops(PointerRNA *ptr, bool create)
+{
+ ViewLayer *view_layer = (ViewLayer *)ptr->data;
+
+ if (create && !view_layer->id_properties) {
+ IDPropertyTemplate val = {0};
+ view_layer->id_properties = IDP_New(IDP_GROUP, &val, "ViewLayer ID properties");
+ }
+
+ return view_layer->id_properties;
+}
+
+static void rna_ViewLayer_update_render_passes(ID *id)
+{
+ Scene *scene = (Scene *)id;
+ if (scene->nodetree)
+ ntreeCompositUpdateRLayers(scene->nodetree);
+}
+
+static PointerRNA rna_ViewLayer_objects_get(CollectionPropertyIterator *iter)
+{
+ ListBaseIterator *internal = &iter->internal.listbase;
+
+ /* we are actually iterating a ObjectBase list, so override get */
+ Base *base = (Base *)internal->link;
+ return rna_pointer_inherit_refine(&iter->parent, &RNA_Object, base->object);
+}
+
+static int rna_ViewLayer_objects_selected_skip(CollectionPropertyIterator *iter, void *UNUSED(data))
+{
+ ListBaseIterator *internal = &iter->internal.listbase;
+ Base *base = (Base *)internal->link;
+
+ if ((base->flag & BASE_SELECTED) != 0) {
+ return 0;
+ }
+
+ return 1;
+};
+
+static PointerRNA rna_ViewLayer_depsgraph_get(PointerRNA *ptr)
+{
+ ID *id = ptr->id.data;
+ if (GS(id->name) == ID_SCE) {
+ Scene *scene = (Scene *)id;
+ ViewLayer *view_layer = (ViewLayer *)ptr->data;
+ Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, view_layer, false);
+ return rna_pointer_inherit_refine(ptr, &RNA_Depsgraph, depsgraph);
+ }
+ return PointerRNA_NULL;
+}
+
+static void rna_LayerObjects_selected_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
+{
+ ViewLayer *view_layer = (ViewLayer *)ptr->data;
+ rna_iterator_listbase_begin(iter, &view_layer->object_bases, rna_ViewLayer_objects_selected_skip);
+}
+
+static void rna_ViewLayer_update_tagged(ViewLayer *UNUSED(view_layer), bContext *C)
+{
+ Depsgraph *graph = CTX_data_depsgraph(C);
+ DEG_OBJECT_ITER(graph, ob, DEG_ITER_OBJECT_MODE_VIEWPORT,
+ DEG_ITER_OBJECT_FLAG_LINKED_DIRECTLY |
+ DEG_ITER_OBJECT_FLAG_LINKED_VIA_SET |
+ DEG_ITER_OBJECT_FLAG_LINKED_INDIRECTLY |
+ DEG_ITER_OBJECT_FLAG_VISIBLE |
+ DEG_ITER_OBJECT_FLAG_DUPLI)
+ {
+ /* Don't do anything, we just need to run the iterator to flush
+ * the base info to the objects. */
+ UNUSED_VARS(ob);
+ }
+ DEG_OBJECT_ITER_END
+}
+
+static void rna_ObjectBase_select_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
+{
+ Base *base = (Base *)ptr->data;
+ short mode = (base->flag & BASE_SELECTED) ? BA_SELECT : BA_DESELECT;
+ ED_object_base_select(base, mode);
+}
+
+static char *rna_ViewRenderSettings_path(PointerRNA *UNUSED(ptr))
+{
+ return BLI_sprintfN("viewport_render");
+}
+
+static void rna_ViewRenderSettings_engine_set(PointerRNA *ptr, int value)
+{
+ ViewRender *view_render = (ViewRender *)ptr->data;
+ RenderEngineType *type = BLI_findlink(&R_engines, value);
+
+ if (type) {
+ BLI_strncpy_utf8(view_render->engine_id, type->idname, sizeof(view_render->engine_id));
+ DEG_id_tag_update(ptr->id.data, DEG_TAG_COPY_ON_WRITE);
+ }
+}
+
+static const EnumPropertyItem *rna_ViewRenderSettings_engine_itemf(
+ bContext *UNUSED(C), PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop), bool *r_free)
+{
+ RenderEngineType *type;
+ EnumPropertyItem *item = NULL;
+ EnumPropertyItem tmp = {0, "", 0, "", ""};
+ int a = 0, totitem = 0;
+
+ for (type = R_engines.first; type; type = type->next, a++) {
+ tmp.value = a;
+ tmp.identifier = type->idname;
+ tmp.name = type->name;
+ RNA_enum_item_add(&item, &totitem, &tmp);
+ }
+
+ RNA_enum_item_end(&item, &totitem);
+ *r_free = true;
+
+ return item;
+}
+
+static int rna_ViewRenderSettings_engine_get(PointerRNA *ptr)
+{
+ ViewRender *view_render = (ViewRender *)ptr->data;
+ RenderEngineType *type;
+ int a = 0;
+
+ for (type = R_engines.first; type; type = type->next, a++)
+ if (STREQ(type->idname, view_render->engine_id))
+ return a;
+
+ return 0;
+}
+
+static void rna_ViewRenderSettings_engine_update(Main *bmain, Scene *UNUSED(unused), PointerRNA *UNUSED(ptr))
+{
+ ED_render_engine_changed(bmain);
+}
+
+static int rna_ViewRenderSettings_multiple_engines_get(PointerRNA *UNUSED(ptr))
+{
+ return (BLI_listbase_count(&R_engines) > 1);
+}
+
+static int rna_ViewRenderSettings_use_shading_nodes_get(PointerRNA *ptr)
+{
+ ViewRender *view_render = (ViewRender *)ptr->data;
+ return BKE_viewrender_use_new_shading_nodes(view_render);
+}
+
+static int rna_ViewRenderSettings_use_spherical_stereo_get(PointerRNA *ptr)
+{
+ ViewRender *view_render = (ViewRender *)ptr->data;
+ return BKE_viewrender_use_spherical_stereo(view_render);
+}
+
+static int rna_ViewRenderSettings_use_game_engine_get(PointerRNA *ptr)
+{
+ ViewRender *view_render = (ViewRender *)ptr->data;
+ RenderEngineType *type;
+
+ for (type = R_engines.first; type; type = type->next)
+ if (STREQ(type->idname, view_render->engine_id))
+ return (type->flag & RE_GAME) != 0;
+
+ return 0;
+}
+
+#else
+
+static void rna_def_scene_collections(BlenderRNA *brna, PropertyRNA *cprop)
+{
+ StructRNA *srna;
+ FunctionRNA *func;
+ PropertyRNA *parm;
+
+ RNA_def_property_srna(cprop, "SceneCollections");
+ srna = RNA_def_struct(brna, "SceneCollections", NULL);
+ RNA_def_struct_sdna(srna, "SceneCollection");
+ RNA_def_struct_ui_text(srna, "Scene Collection", "Collection of scene collections");
+
+ func = RNA_def_function(srna, "new", "rna_SceneCollection_new");
+ RNA_def_function_ui_description(func, "Add a collection to scene");
+ RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_USE_MAIN);
+ parm = RNA_def_string(func, "name", NULL, 0, "", "New name for the collection (not unique)");
+ parm = RNA_def_pointer(func, "result", "SceneCollection", "", "Newly created collection");
+ RNA_def_function_return(func, parm);
+
+ func = RNA_def_function(srna, "remove", "rna_SceneCollection_remove");
+ RNA_def_function_ui_description(func, "Remove a collection and move its objects to the master collection");
+ RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_USE_MAIN | FUNC_USE_REPORTS);
+ parm = RNA_def_pointer(func, "collection", "SceneCollection", "", "Collection to remove");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
+ RNA_def_parameter_clear_flags(parm, PROP_THICK_WRAP, 0);
+}
+
+static void rna_def_collection_objects(BlenderRNA *brna, PropertyRNA *cprop)
+{
+ StructRNA *srna;
+ FunctionRNA *func;
+ PropertyRNA *parm;
+ PropertyRNA *prop;
+
+ RNA_def_property_srna(cprop, "CollectionObjects");
+ srna = RNA_def_struct(brna, "CollectionObjects", NULL);
+ RNA_def_struct_sdna(srna, "SceneCollection");
+ RNA_def_struct_ui_text(srna, "Collection Objects", "Objects of a collection");
+
+ prop = RNA_def_property(srna, "active_index", PROP_INT, PROP_UNSIGNED);
+ RNA_def_property_int_funcs(prop, "rna_SceneCollection_objects_active_index_get",
+ "rna_SceneCollection_objects_active_index_set",
+ "rna_SceneCollection_objects_active_index_range");
+ RNA_def_property_ui_text(prop, "Active Object Index", "Active index in collection objects array");
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, NULL);
+
+ func = RNA_def_function(srna, "link", "rna_SceneCollection_object_link");
+ RNA_def_function_ui_description(func, "Link an object to collection");
+ RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_USE_MAIN | FUNC_USE_REPORTS);
+ parm = RNA_def_pointer(func, "object", "Object", "", "Object to add to collection");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
+
+ func = RNA_def_function(srna, "unlink", "rna_SceneCollection_object_unlink");
+ RNA_def_function_ui_description(func, "Unlink object from collection");
+ RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_USE_MAIN | FUNC_USE_REPORTS);
+ parm = RNA_def_pointer(func, "object", "Object", "", "Object to remove from collection");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
+}
+
+static void rna_def_scene_collection(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ FunctionRNA *func;
+ PropertyRNA *parm;
+
+ srna = RNA_def_struct(brna, "SceneCollection", NULL);
+ RNA_def_struct_ui_text(srna, "Scene Collection", "Collection");
+ RNA_def_struct_refine_func(srna, "rna_SceneCollection_refine");
+
+ prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_funcs(prop, NULL, NULL, "rna_SceneCollection_name_set");
+ RNA_def_property_ui_text(prop, "Name", "Collection name");
+ RNA_def_struct_name_property(srna, prop);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, NULL);
+
+ prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_items(prop, rna_enum_collection_type_items);
+ RNA_def_property_ui_text(prop, "Type", "Type of collection");
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+
+ prop = RNA_def_property(srna, "collections", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_collection_sdna(prop, NULL, "scene_collections", NULL);
+ RNA_def_property_struct_type(prop, "SceneCollection");
+ RNA_def_property_ui_text(prop, "SceneCollections", "");
+ rna_def_scene_collections(brna, prop);
+
+ prop = RNA_def_property(srna, "objects", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_collection_sdna(prop, NULL, "objects", NULL);
+ RNA_def_property_struct_type(prop, "Object");
+ RNA_def_property_collection_funcs(prop, NULL, NULL, NULL, "rna_SceneCollection_objects_get", NULL, NULL, NULL, NULL);
+ RNA_def_property_ui_text(prop, "Objects", "All the objects directly added to this collection (not including sub-collection objects)");
+ rna_def_collection_objects(brna, prop);
+
+ /* Functions */
+ func = RNA_def_function(srna, "move_above", "rna_SceneCollection_move_above");
+ RNA_def_function_ui_description(func, "Move collection after another");
+ RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_USE_MAIN);
+ parm = RNA_def_pointer(func, "sc_dst", "SceneCollection", "Collection", "Reference collection above which the collection will move");
+ parm = RNA_def_boolean(func, "result", false, "Result", "Whether the operation succeded");
+ RNA_def_function_return(func, parm);
+
+ func = RNA_def_function(srna, "move_below", "rna_SceneCollection_move_below");
+ RNA_def_function_ui_description(func, "Move collection before another");
+ RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_USE_MAIN);
+ parm = RNA_def_pointer(func, "sc_dst", "SceneCollection", "Collection", "Reference collection below which the collection will move");
+ parm = RNA_def_boolean(func, "result", false, "Result", "Whether the operation succeded");
+ RNA_def_function_return(func, parm);
+
+ func = RNA_def_function(srna, "move_into", "rna_SceneCollection_move_into");
+ RNA_def_function_ui_description(func, "Move collection into another");
+ RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_USE_MAIN);
+ parm = RNA_def_pointer(func, "sc_dst", "SceneCollection", "Collection", "Collection to insert into");
+ parm = RNA_def_boolean(func, "result", false, "Result", "Whether the operation succeded");
+ RNA_def_function_return(func, parm);
+
+ func = RNA_def_function(srna, "duplicate", "rna_SceneCollection_duplicate");
+ RNA_def_function_ui_description(func, "Create a copy of the collection");
+ RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_USE_MAIN | FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
+ parm = RNA_def_pointer(func, "result", "SceneCollection", "", "Newly created collection");
+ RNA_def_function_return(func, parm);
+}
+
+static void rna_def_layer_collection_override(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ srna = RNA_def_struct(brna, "LayerCollectionOverride", NULL);
+ RNA_def_struct_sdna(srna, "CollectionOverride");
+ RNA_def_struct_ui_text(srna, "Collection Override", "Collection Override");
+
+ prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
+ RNA_def_property_ui_text(prop, "Name", "Collection name");
+ RNA_def_struct_name_property(srna, prop);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, NULL);
+}
+
+
+#ifdef WITH_CLAY_ENGINE
+static void rna_def_view_layer_engine_settings_clay(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ srna = RNA_def_struct(brna, "ViewLayerEngineSettingsClay", "ViewLayerSettings");
+ RNA_def_struct_ui_text(srna, "Clay Scene Layer Settings", "Clay Engine settings");
+
+ RNA_define_verify_sdna(0); /* not in sdna */
+
+ /* see RNA_LAYER_ENGINE_GET_SET macro */
+ prop = RNA_def_property(srna, "ssao_samples", PROP_INT, PROP_NONE);
+ RNA_def_property_int_funcs(prop, "rna_LayerEngineSettings_Clay_ssao_samples_get",
+ "rna_LayerEngineSettings_Clay_ssao_samples_set", NULL);
+ RNA_def_property_ui_text(prop, "Samples", "Number of samples");
+ RNA_def_property_range(prop, 1, 500);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ RNA_define_verify_sdna(1); /* not in sdna */
+}
+#endif /* WITH_CLAY_ENGINE */
+
+static void rna_def_view_layer_engine_settings_eevee(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ /* Keep in sync with eevee_private.h */
+ static const EnumPropertyItem eevee_shadow_method_items[] = {
+ {1, "ESM", 0, "ESM", "Exponential Shadow Mapping"},
+ {2, "VSM", 0, "VSM", "Variance Shadow Mapping"},
+ {0, NULL, 0, NULL, NULL}
+ };
+
+ static const EnumPropertyItem eevee_shadow_size_items[] = {
+ {64, "64", 0, "64px", ""},
+ {128, "128", 0, "128px", ""},
+ {256, "256", 0, "256px", ""},
+ {512, "512", 0, "512px", ""},
+ {1024, "1024", 0, "1024px", ""},
+ {2048, "2048", 0, "2048px", ""},
+ {4096, "4096", 0, "4096px", ""},
+ {8192, "8192", 0, "8192px", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
+
+ static const EnumPropertyItem eevee_gi_visibility_size_items[] = {
+ {8, "8", 0, "8px", ""},
+ {16, "16", 0, "16px", ""},
+ {32, "32", 0, "32px", ""},
+ {64, "64", 0, "64px", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
+
+ static const EnumPropertyItem eevee_volumetric_tile_size_items[] = {
+ {2, "2", 0, "2px", ""},
+ {4, "4", 0, "4px", ""},
+ {8, "8", 0, "8px", ""},
+ {16, "16", 0, "16px", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
+
+ srna = RNA_def_struct(brna, "ViewLayerEngineSettingsEevee", "ViewLayerSettings");
+ RNA_def_struct_ui_text(srna, "Eevee Scene Layer Settings", "Eevee Engine settings");
+
+ RNA_define_verify_sdna(0); /* not in sdna */
+
+ /* see RNA_LAYER_ENGINE_GET_SET macro */
+
+ /* Indirect Lighting */
+ prop = RNA_def_property(srna, "gi_diffuse_bounces", PROP_INT, PROP_NONE);
+ RNA_def_property_int_funcs(prop, "rna_LayerEngineSettings_Eevee_gi_diffuse_bounces_get",
+ "rna_LayerEngineSettings_Eevee_gi_diffuse_bounces_set", NULL);
+ RNA_def_property_ui_text(prop, "Diffuse Bounces", "Number of time the light is reinjected inside light grids, "
+ "0 disable indirect diffuse light");
+ RNA_def_property_range(prop, 0, INT_MAX);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "gi_cubemap_resolution", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_funcs(prop, "rna_LayerEngineSettings_Eevee_gi_cubemap_resolution_get",
+ "rna_LayerEngineSettings_Eevee_gi_cubemap_resolution_set", NULL);
+ RNA_def_property_enum_items(prop, eevee_shadow_size_items);
+ RNA_def_property_ui_text(prop, "Cubemap Size", "Size of every cubemaps");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "gi_visibility_resolution", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_funcs(prop, "rna_LayerEngineSettings_Eevee_gi_visibility_resolution_get",
+ "rna_LayerEngineSettings_Eevee_gi_visibility_resolution_set", NULL);
+ RNA_def_property_enum_items(prop, eevee_gi_visibility_size_items);
+ RNA_def_property_ui_text(prop, "Irradiance Visibility Size",
+ "Size of the shadow map applied to each irradiance sample");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ /* Temporal Anti-Aliasing (super sampling) */
+ prop = RNA_def_property(srna, "taa_samples", PROP_INT, PROP_NONE);
+ RNA_def_property_int_funcs(prop, "rna_LayerEngineSettings_Eevee_taa_samples_get",
+ "rna_LayerEngineSettings_Eevee_taa_samples_set", NULL);
+ RNA_def_property_ui_text(prop, "Viewport Samples", "Number of samples, unlimited if 0");
+ RNA_def_property_range(prop, 0, INT_MAX);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "taa_render_samples", PROP_INT, PROP_NONE);
+ RNA_def_property_int_funcs(prop, "rna_LayerEngineSettings_Eevee_taa_render_samples_get",
+ "rna_LayerEngineSettings_Eevee_taa_render_samples_set", NULL);
+ RNA_def_property_ui_text(prop, "Render Samples", "Number of samples per pixels for rendering");
+ RNA_def_property_range(prop, 1, INT_MAX);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ /* Screen Space Subsurface Scattering */
+ prop = RNA_def_property(srna, "sss_enable", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(prop, "rna_LayerEngineSettings_Eevee_sss_enable_get",
+ "rna_LayerEngineSettings_Eevee_sss_enable_set");
+ RNA_def_property_ui_text(prop, "Subsurface Scattering", "Enable screen space subsurface scattering");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "sss_samples", PROP_INT, PROP_NONE);
+ RNA_def_property_int_funcs(prop, "rna_LayerEngineSettings_Eevee_sss_samples_get",
+ "rna_LayerEngineSettings_Eevee_sss_samples_set", NULL);
+ RNA_def_property_ui_text(prop, "Samples", "Number of samples to compute the scattering effect");
+ RNA_def_property_range(prop, 1, 32);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "sss_jitter_threshold", PROP_FLOAT, PROP_FACTOR);
+ RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Eevee_sss_jitter_threshold_get",
+ "rna_LayerEngineSettings_Eevee_sss_jitter_threshold_set", NULL);
+ RNA_def_property_ui_text(prop, "Jitter Threshold", "Rotate samples that are below this threshold");
+ RNA_def_property_range(prop, 0.0f, 1.0f);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "sss_separate_albedo", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(prop, "rna_LayerEngineSettings_Eevee_sss_separate_albedo_get",
+ "rna_LayerEngineSettings_Eevee_sss_separate_albedo_set");
+ RNA_def_property_ui_text(prop, "Separate Albedo", "Avoid albedo being blured by the subsurface scattering "
+ "but uses more video memory");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ /* Screen Space Reflection */
+ prop = RNA_def_property(srna, "ssr_enable", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(prop, "rna_LayerEngineSettings_Eevee_ssr_enable_get",
+ "rna_LayerEngineSettings_Eevee_ssr_enable_set");
+ RNA_def_property_ui_text(prop, "Screen Space Reflections", "Enable screen space reflection");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "ssr_refraction", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(prop, "rna_LayerEngineSettings_Eevee_ssr_refraction_get",
+ "rna_LayerEngineSettings_Eevee_ssr_refraction_set");
+ RNA_def_property_ui_text(prop, "Screen Space Refractions", "Enable screen space Refractions");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "ssr_halfres", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(prop, "rna_LayerEngineSettings_Eevee_ssr_halfres_get",
+ "rna_LayerEngineSettings_Eevee_ssr_halfres_set");
+ RNA_def_property_ui_text(prop, "Half Res Trace", "Raytrace at a lower resolution");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "ssr_quality", PROP_FLOAT, PROP_FACTOR);
+ RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Eevee_ssr_quality_get",
+ "rna_LayerEngineSettings_Eevee_ssr_quality_set", NULL);
+ RNA_def_property_ui_text(prop, "Trace Quality", "Quality of the screen space raytracing");
+ RNA_def_property_range(prop, 0.0f, 1.0f);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "ssr_max_roughness", PROP_FLOAT, PROP_FACTOR);
+ RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Eevee_ssr_max_roughness_get",
+ "rna_LayerEngineSettings_Eevee_ssr_max_roughness_set", NULL);
+ RNA_def_property_ui_text(prop, "Max Roughness", "Do not raytrace reflections for roughness above this value");
+ RNA_def_property_range(prop, 0.0f, 1.0f);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "ssr_thickness", PROP_FLOAT, PROP_DISTANCE);
+ RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Eevee_ssr_thickness_get",
+ "rna_LayerEngineSettings_Eevee_ssr_thickness_set", NULL);
+ RNA_def_property_ui_text(prop, "Thickness", "Pixel thickness used to detect intersection");
+ RNA_def_property_range(prop, 1e-6f, FLT_MAX);
+ RNA_def_property_ui_range(prop, 0.001f, FLT_MAX, 5, 3);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "ssr_border_fade", PROP_FLOAT, PROP_FACTOR);
+ RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Eevee_ssr_border_fade_get",
+ "rna_LayerEngineSettings_Eevee_ssr_border_fade_set", NULL);
+ RNA_def_property_ui_text(prop, "Edge Fading", "Screen percentage used to fade the SSR");
+ RNA_def_property_range(prop, 0.0f, 0.5f);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "ssr_firefly_fac", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Eevee_ssr_firefly_fac_get",
+ "rna_LayerEngineSettings_Eevee_ssr_firefly_fac_set", NULL);
+ RNA_def_property_ui_text(prop, "Clamp", "Clamp pixel intensity to remove noise (0 to disabled)");
+ RNA_def_property_range(prop, 0.0f, FLT_MAX);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ /* Volumetrics */
+ prop = RNA_def_property(srna, "volumetric_enable", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(prop, "rna_LayerEngineSettings_Eevee_volumetric_enable_get",
+ "rna_LayerEngineSettings_Eevee_volumetric_enable_set");
+ RNA_def_property_ui_text(prop, "Volumetrics", "Enable scattering and absorbance of volumetric material");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "volumetric_start", PROP_FLOAT, PROP_DISTANCE);
+ RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Eevee_volumetric_start_get",
+ "rna_LayerEngineSettings_Eevee_volumetric_start_set", NULL);
+ RNA_def_property_ui_text(prop, "Start", "Start distance of the volumetric effect");
+ RNA_def_property_range(prop, 1e-6f, FLT_MAX);
+ RNA_def_property_ui_range(prop, 0.001f, FLT_MAX, 10, 3);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "volumetric_end", PROP_FLOAT, PROP_DISTANCE);
+ RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Eevee_volumetric_end_get",
+ "rna_LayerEngineSettings_Eevee_volumetric_end_set", NULL);
+ RNA_def_property_ui_text(prop, "End", "End distance of the volumetric effect");
+ RNA_def_property_range(prop, 1e-6f, FLT_MAX);
+ RNA_def_property_ui_range(prop, 0.001f, FLT_MAX, 10, 3);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "volumetric_tile_size", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_funcs(prop, "rna_LayerEngineSettings_Eevee_volumetric_tile_size_get",
+ "rna_LayerEngineSettings_Eevee_volumetric_tile_size_set", NULL);
+ RNA_def_property_enum_items(prop, eevee_volumetric_tile_size_items);
+ RNA_def_property_ui_text(prop, "Tile Size", "Control the quality of the volumetric effects "
+ "(lower size increase vram usage and quality)");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "volumetric_samples", PROP_INT, PROP_NONE);
+ RNA_def_property_int_funcs(prop, "rna_LayerEngineSettings_Eevee_volumetric_samples_get",
+ "rna_LayerEngineSettings_Eevee_volumetric_samples_set", NULL);
+ RNA_def_property_ui_text(prop, "Samples", "Number of samples to compute volumetric effects");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_range(prop, 1, 256);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "volumetric_sample_distribution", PROP_FLOAT, PROP_FACTOR);
+ RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Eevee_volumetric_sample_distribution_get",
+ "rna_LayerEngineSettings_Eevee_volumetric_sample_distribution_set", NULL);
+ RNA_def_property_ui_text(prop, "Exponential Sampling", "Distribute more samples closer to the camera");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "volumetric_lights", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(prop, "rna_LayerEngineSettings_Eevee_volumetric_lights_get",
+ "rna_LayerEngineSettings_Eevee_volumetric_lights_set");
+ RNA_def_property_ui_text(prop, "Volumetric Lighting", "Enable scene lamps interactions with volumetrics");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "volumetric_light_clamp", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Eevee_volumetric_light_clamp_get",
+ "rna_LayerEngineSettings_Eevee_volumetric_light_clamp_set", NULL);
+ RNA_def_property_range(prop, 0.0f, FLT_MAX);
+ RNA_def_property_ui_text(prop, "Clamp", "Maximum light contribution, reducing noise");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "volumetric_shadows", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(prop, "rna_LayerEngineSettings_Eevee_volumetric_shadows_get",
+ "rna_LayerEngineSettings_Eevee_volumetric_shadows_set");
+ RNA_def_property_ui_text(prop, "Volumetric Shadows", "Generate shadows from volumetric material (Very expensive)");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "volumetric_shadow_samples", PROP_INT, PROP_NONE);
+ RNA_def_property_int_funcs(prop, "rna_LayerEngineSettings_Eevee_volumetric_shadow_samples_get",
+ "rna_LayerEngineSettings_Eevee_volumetric_shadow_samples_set", NULL);
+ RNA_def_property_range(prop, 1, 128);
+ RNA_def_property_ui_text(prop, "Volumetric Shadow Samples", "Number of samples to compute volumetric shadowing");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "volumetric_colored_transmittance", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(prop, "rna_LayerEngineSettings_Eevee_volumetric_colored_transmittance_get",
+ "rna_LayerEngineSettings_Eevee_volumetric_colored_transmittance_set");
+ RNA_def_property_ui_text(prop, "Colored Transmittance", "Enable wavelength dependent volumetric transmittance");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ /* Ambient Occlusion */
+ prop = RNA_def_property(srna, "gtao_enable", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(prop, "rna_LayerEngineSettings_Eevee_gtao_enable_get",
+ "rna_LayerEngineSettings_Eevee_gtao_enable_set");
+ RNA_def_property_ui_text(prop, "Ambient Occlusion", "Enable ambient occlusion to simulate medium scale indirect shadowing");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "gtao_use_bent_normals", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(prop, "rna_LayerEngineSettings_Eevee_gtao_use_bent_normals_get",
+ "rna_LayerEngineSettings_Eevee_gtao_use_bent_normals_set");
+ RNA_def_property_ui_text(prop, "Bent Normals", "Compute main non occluded direction to sample the environment");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "gtao_bounce", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(prop, "rna_LayerEngineSettings_Eevee_gtao_bounce_get",
+ "rna_LayerEngineSettings_Eevee_gtao_bounce_set");
+ RNA_def_property_ui_text(prop, "Bounces Approximation", "An approximation to simulate light bounces "
+ "giving less occlusion on brighter objects");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "gtao_factor", PROP_FLOAT, PROP_FACTOR);
+ RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Eevee_gtao_factor_get", "rna_LayerEngineSettings_Eevee_gtao_factor_set", NULL);
+ RNA_def_property_ui_text(prop, "Factor", "Factor for ambient occlusion blending");
+ RNA_def_property_range(prop, 0.0f, FLT_MAX);
+ RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1f, 2);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, 0, "rna_LayerCollectionEngineSettings_update");
+
+ prop = RNA_def_property(srna, "gtao_quality", PROP_FLOAT, PROP_FACTOR);
+ RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Eevee_gtao_quality_get", "rna_LayerEngineSettings_Eevee_gtao_quality_set", NULL);
+ RNA_def_property_ui_text(prop, "Trace Quality", "Quality of the horizon search");
+ RNA_def_property_range(prop, 0.0f, 1.0f);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, 0, "rna_LayerCollectionEngineSettings_update");
+
+ prop = RNA_def_property(srna, "gtao_distance", PROP_FLOAT, PROP_DISTANCE);
+ RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Eevee_gtao_distance_get", "rna_LayerEngineSettings_Eevee_gtao_distance_set", NULL);
+ RNA_def_property_ui_text(prop, "Distance", "Distance of object that contribute to the ambient occlusion effect");
+ RNA_def_property_range(prop, 0.0f, 100000.0f);
+ RNA_def_property_ui_range(prop, 0.0f, 100.0f, 1, 3);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, 0, "rna_LayerCollectionEngineSettings_update");
+
+ /* Depth of Field */
+ prop = RNA_def_property(srna, "dof_enable", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(prop, "rna_LayerEngineSettings_Eevee_dof_enable_get",
+ "rna_LayerEngineSettings_Eevee_dof_enable_set");
+ RNA_def_property_ui_text(prop, "Depth of Field", "Enable depth of field using the values from the active camera");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "bokeh_max_size", PROP_FLOAT, PROP_FACTOR);
+ RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Eevee_bokeh_max_size_get",
+ "rna_LayerEngineSettings_Eevee_bokeh_max_size_set", NULL);
+ RNA_def_property_ui_text(prop, "Max Size", "Max size of the bokeh shape for the depth of field (lower is faster)");
+ RNA_def_property_range(prop, 0.0f, 2000.0f);
+ RNA_def_property_ui_range(prop, 2.0f, 200.0f, 1, 3);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "bokeh_threshold", PROP_FLOAT, PROP_FACTOR);
+ RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Eevee_bokeh_threshold_get",
+ "rna_LayerEngineSettings_Eevee_bokeh_threshold_set", NULL);
+ RNA_def_property_ui_text(prop, "Sprite Threshold", "Brightness threshold for using sprite base depth of field");
+ RNA_def_property_range(prop, 0.0f, 100000.0f);
+ RNA_def_property_ui_range(prop, 0.0f, 10.0f, 1, 3);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ /* Bloom */
+ prop = RNA_def_property(srna, "bloom_enable", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(prop, "rna_LayerEngineSettings_Eevee_bloom_enable_get",
+ "rna_LayerEngineSettings_Eevee_bloom_enable_set");
+ RNA_def_property_ui_text(prop, "Bloom", "High brighness pixels generate a glowing effect");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "bloom_threshold", PROP_FLOAT, PROP_FACTOR);
+ RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Eevee_bloom_threshold_get",
+ "rna_LayerEngineSettings_Eevee_bloom_threshold_set", NULL);
+ RNA_def_property_ui_text(prop, "Threshold", "Filters out pixels under this level of brightness");
+ RNA_def_property_range(prop, 0.0f, 100000.0f);
+ RNA_def_property_ui_range(prop, 0.0f, 10.0f, 1, 3);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "bloom_color", PROP_FLOAT, PROP_COLOR);
+ RNA_def_property_array(prop, 3);
+ RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Eevee_bloom_color_get",
+ "rna_LayerEngineSettings_Eevee_bloom_color_set", NULL);
+ RNA_def_property_ui_text(prop, "Color", "Color applied to the bloom effect");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "bloom_knee", PROP_FLOAT, PROP_FACTOR);
+ RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Eevee_bloom_knee_get",
+ "rna_LayerEngineSettings_Eevee_bloom_knee_set", NULL);
+ RNA_def_property_ui_text(prop, "Knee", "Makes transition between under/over-threshold gradual");
+ RNA_def_property_range(prop, 0.0f, 1.0f);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "bloom_radius", PROP_FLOAT, PROP_FACTOR);
+ RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Eevee_bloom_radius_get",
+ "rna_LayerEngineSettings_Eevee_bloom_radius_set", NULL);
+ RNA_def_property_ui_text(prop, "Radius", "Bloom spread distance");
+ RNA_def_property_range(prop, 0.0f, 100.0f);
+ RNA_def_property_ui_range(prop, 0.0f, 10.0f, 1, 3);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "bloom_clamp", PROP_FLOAT, PROP_FACTOR);
+ RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Eevee_bloom_clamp_get",
+ "rna_LayerEngineSettings_Eevee_bloom_clamp_set", NULL);
+ RNA_def_property_ui_text(prop, "Clamp", "Maximum intensity a bloom pixel can have");
+ RNA_def_property_range(prop, 0.0f, 1000.0f);
+ RNA_def_property_ui_range(prop, 0.0f, 10.0f, 1, 3);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "bloom_intensity", PROP_FLOAT, PROP_UNSIGNED);
+ RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Eevee_bloom_intensity_get",
+ "rna_LayerEngineSettings_Eevee_bloom_intensity_set", NULL);
+ RNA_def_property_ui_text(prop, "Intensity", "Blend factor");
+ RNA_def_property_range(prop, 0.0f, 10000.0f);
+ RNA_def_property_ui_range(prop, 0.0f, 10.0f, 1, 3);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ /* Motion blur */
+ prop = RNA_def_property(srna, "motion_blur_enable", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(prop, "rna_LayerEngineSettings_Eevee_motion_blur_enable_get",
+ "rna_LayerEngineSettings_Eevee_motion_blur_enable_set");
+ RNA_def_property_ui_text(prop, "Motion Blur", "Enable motion blur effect (only in camera view)");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "motion_blur_samples", PROP_INT, PROP_UNSIGNED);
+ RNA_def_property_int_funcs(prop, "rna_LayerEngineSettings_Eevee_motion_blur_samples_get",
+ "rna_LayerEngineSettings_Eevee_motion_blur_samples_set", NULL);
+ RNA_def_property_ui_text(prop, "Samples", "Number of samples to take with motion blur");
+ RNA_def_property_range(prop, 1, 64);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "motion_blur_shutter", PROP_FLOAT, PROP_UNSIGNED);
+ RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Eevee_motion_blur_shutter_get",
+ "rna_LayerEngineSettings_Eevee_motion_blur_shutter_set", NULL);
+ RNA_def_property_ui_text(prop, "Shutter", "Time taken in frames between shutter open and close");
+ RNA_def_property_ui_range(prop, 0.01f, 2.0f, 1, 2);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ /* Shadows */
+ prop = RNA_def_property(srna, "shadow_method", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_funcs(prop, "rna_LayerEngineSettings_Eevee_shadow_method_get", "rna_LayerEngineSettings_Eevee_shadow_method_set", NULL);
+ RNA_def_property_enum_items(prop, eevee_shadow_method_items);
+ RNA_def_property_ui_text(prop, "Method", "Technique use to compute the shadows");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "shadow_size", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_funcs(prop, "rna_LayerEngineSettings_Eevee_shadow_size_get", "rna_LayerEngineSettings_Eevee_shadow_size_set", NULL);
+ RNA_def_property_enum_items(prop, eevee_shadow_size_items);
+ RNA_def_property_ui_text(prop, "Size", "Size of every shadow maps");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ prop = RNA_def_property(srna, "shadow_high_bitdepth", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(prop, "rna_LayerEngineSettings_Eevee_shadow_high_bitdepth_get", "rna_LayerEngineSettings_Eevee_shadow_high_bitdepth_set");
+ RNA_def_property_ui_text(prop, "High Bitdepth", "Use 32bit shadows");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_ViewLayerEngineSettings_update");
+
+ RNA_define_verify_sdna(1); /* not in sdna */
+}
+
+#ifdef WITH_CLAY_ENGINE
+static void rna_def_layer_collection_engine_settings_clay(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ static const EnumPropertyItem clay_matcap_items[] = {
+ {ICON_MATCAP_01, "01", ICON_MATCAP_01, "", ""},
+ {ICON_MATCAP_02, "02", ICON_MATCAP_02, "", ""},
+ {ICON_MATCAP_03, "03", ICON_MATCAP_03, "", ""},
+ {ICON_MATCAP_04, "04", ICON_MATCAP_04, "", ""},
+ {ICON_MATCAP_05, "05", ICON_MATCAP_05, "", ""},
+ {ICON_MATCAP_06, "06", ICON_MATCAP_06, "", ""},
+ {ICON_MATCAP_07, "07", ICON_MATCAP_07, "", ""},
+ {ICON_MATCAP_08, "08", ICON_MATCAP_08, "", ""},
+ {ICON_MATCAP_09, "09", ICON_MATCAP_09, "", ""},
+ {ICON_MATCAP_10, "10", ICON_MATCAP_10, "", ""},
+ {ICON_MATCAP_11, "11", ICON_MATCAP_11, "", ""},
+ {ICON_MATCAP_12, "12", ICON_MATCAP_12, "", ""},
+ {ICON_MATCAP_13, "13", ICON_MATCAP_13, "", ""},
+ {ICON_MATCAP_14, "14", ICON_MATCAP_14, "", ""},
+ {ICON_MATCAP_15, "15", ICON_MATCAP_15, "", ""},
+ {ICON_MATCAP_16, "16", ICON_MATCAP_16, "", ""},
+ {ICON_MATCAP_17, "17", ICON_MATCAP_17, "", ""},
+ {ICON_MATCAP_18, "18", ICON_MATCAP_18, "", ""},
+ {ICON_MATCAP_19, "19", ICON_MATCAP_19, "", ""},
+ {ICON_MATCAP_20, "20", ICON_MATCAP_20, "", ""},
+ {ICON_MATCAP_21, "21", ICON_MATCAP_21, "", ""},
+ {ICON_MATCAP_22, "22", ICON_MATCAP_22, "", ""},
+ {ICON_MATCAP_23, "23", ICON_MATCAP_23, "", ""},
+ {ICON_MATCAP_24, "24", ICON_MATCAP_24, "", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
+
+ srna = RNA_def_struct(brna, "LayerCollectionEngineSettingsClay", "LayerCollectionSettings");
+ RNA_def_struct_ui_text(srna, "Collections Clay Engine Settings", "Engine specific settings for this collection");
+
+ RNA_define_verify_sdna(0); /* not in sdna */
+
+ /* see RNA_LAYER_ENGINE_GET_SET macro */
+ prop = RNA_def_property(srna, "matcap_icon", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_funcs(prop, "rna_LayerEngineSettings_Clay_matcap_icon_get", "rna_LayerEngineSettings_Clay_matcap_icon_set", NULL);
+ RNA_def_property_enum_items(prop, clay_matcap_items);
+ RNA_def_property_ui_text(prop, "Matcap", "Image to use for Material Capture by this material");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, 0, "rna_LayerCollectionEngineSettings_update");
+
+ prop = RNA_def_property(srna, "matcap_rotation", PROP_FLOAT, PROP_FACTOR);
+ RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Clay_matcap_rotation_get", "rna_LayerEngineSettings_Clay_matcap_rotation_set", NULL);
+ RNA_def_property_range(prop, 0.0f, 1.0f);
+ RNA_def_property_ui_text(prop, "Matcap Rotation", "Orientation of the matcap on the model");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, 0, "rna_LayerCollectionEngineSettings_update");
+
+ prop = RNA_def_property(srna, "matcap_hue", PROP_FLOAT, PROP_FACTOR);
+ RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Clay_matcap_hue_get", "rna_LayerEngineSettings_Clay_matcap_hue_set", NULL);
+ RNA_def_property_range(prop, 0.0f, 1.0f);
+ RNA_def_property_ui_text(prop, "Matcap Hue Shift", "Hue correction of the matcap");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, 0, "rna_LayerCollectionEngineSettings_update");
+
+ prop = RNA_def_property(srna, "matcap_saturation", PROP_FLOAT, PROP_FACTOR);
+ RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Clay_matcap_saturation_get", "rna_LayerEngineSettings_Clay_matcap_saturation_set", NULL);
+ RNA_def_property_range(prop, 0.0f, 1.0f);
+ RNA_def_property_ui_text(prop, "Matcap Saturation", "Saturation correction of the matcap");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, 0, "rna_LayerCollectionEngineSettings_update");
+
+ prop = RNA_def_property(srna, "matcap_value", PROP_FLOAT, PROP_FACTOR);
+ RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Clay_matcap_value_get", "rna_LayerEngineSettings_Clay_matcap_value_set", NULL);
+ RNA_def_property_range(prop, 0.0f, 1.0f);
+ RNA_def_property_ui_text(prop, "Matcap Value", "Value correction of the matcap");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, 0, "rna_LayerCollectionEngineSettings_update");
+
+ prop = RNA_def_property(srna, "ssao_factor_cavity", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Clay_ssao_factor_cavity_get", "rna_LayerEngineSettings_Clay_ssao_factor_cavity_set", NULL);
+ RNA_def_property_ui_text(prop, "Cavity Strength", "Strength of the Cavity effect");
+ RNA_def_property_range(prop, 0.0f, 250.0f);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, 0, "rna_LayerCollectionEngineSettings_update");
+
+ prop = RNA_def_property(srna, "ssao_factor_edge", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Clay_ssao_factor_edge_get", "rna_LayerEngineSettings_Clay_ssao_factor_edge_set", NULL);
+ RNA_def_property_ui_text(prop, "Edge Strength", "Strength of the Edge effect");
+ RNA_def_property_range(prop, 0.0f, 250.0f);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, 0, "rna_LayerCollectionEngineSettings_update");
+
+ prop = RNA_def_property(srna, "ssao_distance", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Clay_ssao_distance_get", "rna_LayerEngineSettings_Clay_ssao_distance_set", NULL);
+ RNA_def_property_ui_text(prop, "Distance", "Distance of object that contribute to the Cavity/Edge effect");
+ RNA_def_property_range(prop, 0.0f, 100000.0f);
+ RNA_def_property_ui_range(prop, 0.0f, 100.0f, 1, 3);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, 0, "rna_LayerCollectionEngineSettings_update");
+
+ prop = RNA_def_property(srna, "ssao_attenuation", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Clay_ssao_attenuation_get", "rna_LayerEngineSettings_Clay_ssao_attenuation_set", NULL);
+ RNA_def_property_ui_text(prop, "Attenuation", "Attenuation constant");
+ RNA_def_property_range(prop, 1.0f, 100000.0f);
+ RNA_def_property_ui_range(prop, 1.0f, 100.0f, 1, 3);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, 0, "rna_LayerCollectionEngineSettings_update");
+
+ prop = RNA_def_property(srna, "hair_brightness_randomness", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Clay_hair_brightness_randomness_get", "rna_LayerEngineSettings_Clay_hair_brightness_randomness_set", NULL);
+ RNA_def_property_ui_text(prop, "Hair Brightness Randomness", "Brightness randomness for hair");
+ RNA_def_property_range(prop, 0.0f, 1.0f);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, 0, "rna_LayerCollectionEngineSettings_update");
+
+ RNA_define_verify_sdna(1); /* not in sdna */
+}
+#endif /* WITH_CLAY_ENGINE */
+
+static void rna_def_layer_collection_mode_settings_object(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ srna = RNA_def_struct(brna, "LayerCollectionModeSettingsObject", "LayerCollectionSettings");
+ RNA_def_struct_ui_text(srna, "Collections Object Mode Settings", "Object Mode specific settings for this collection");
+ RNA_define_verify_sdna(0); /* not in sdna */
+
+ /* see RNA_LAYER_ENGINE_GET_SET macro */
+
+ prop = RNA_def_property(srna, "show_wire", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_ui_text(prop, "Wire", "Add the object's wireframe over solid drawing");
+ RNA_def_property_boolean_funcs(prop, "rna_LayerEngineSettings_ObjectMode_show_wire_get", "rna_LayerEngineSettings_ObjectMode_show_wire_set");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, 0, "rna_LayerCollectionEngineSettings_update");
+
+ prop = RNA_def_property(srna, "show_backface_culling", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_ui_text(prop, "Backface Culling", "");
+ RNA_def_property_boolean_funcs(prop, "rna_LayerEngineSettings_ObjectMode_show_backface_culling_get", "rna_LayerEngineSettings_ObjectMode_show_backface_culling_set");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, 0, "rna_LayerCollectionEngineSettings_update");
+
+ RNA_define_verify_sdna(1); /* not in sdna */
+}
+
+static void rna_def_layer_collection_mode_settings_edit(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ srna = RNA_def_struct(brna, "LayerCollectionModeSettingsEdit", "LayerCollectionSettings");
+ RNA_def_struct_ui_text(srna, "Collections Edit Mode Settings", "Edit Mode specific settings to be overridden per collection");
+ RNA_define_verify_sdna(0); /* not in sdna */
+
+ /* see RNA_LAYER_ENGINE_GET_SET macro */
+
+ prop = RNA_def_property(srna, "show_occlude_wire", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_ui_text(prop, "Hidden Wire", "Use hidden wireframe display");
+ RNA_def_property_boolean_funcs(prop, "rna_LayerEngineSettings_EditMode_show_occlude_wire_get", "rna_LayerEngineSettings_EditMode_show_occlude_wire_set");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, 0, "rna_LayerCollectionEngineSettings_update");
+
+ prop = RNA_def_property(srna, "show_weight", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_ui_text(prop, "Show Weights", "Draw weights in editmode");
+ RNA_def_property_boolean_funcs(prop, "rna_LayerEngineSettings_EditMode_show_weight_get", "rna_LayerEngineSettings_EditMode_show_weight_set");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, 0, "rna_LayerCollectionEngineSettings_update");
+
+ prop = RNA_def_property(srna, "face_normals_show", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_ui_text(prop, "Draw Normals", "Display face normals as lines");
+ RNA_def_property_boolean_funcs(prop, "rna_LayerEngineSettings_EditMode_face_normals_show_get", "rna_LayerEngineSettings_EditMode_face_normals_show_set");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, 0, "rna_LayerCollectionEngineSettings_update");
+
+ prop = RNA_def_property(srna, "vert_normals_show", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_ui_text(prop, "Draw Vertex Normals", "Display vertex normals as lines");
+ RNA_def_property_boolean_funcs(prop, "rna_LayerEngineSettings_EditMode_vert_normals_show_get", "rna_LayerEngineSettings_EditMode_vert_normals_show_set");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, 0, "rna_LayerCollectionEngineSettings_update");
+
+ prop = RNA_def_property(srna, "loop_normals_show", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_ui_text(prop, "Draw Split Normals", "Display vertex-per-face normals as lines");
+ RNA_def_property_boolean_funcs(prop, "rna_LayerEngineSettings_EditMode_loop_normals_show_get", "rna_LayerEngineSettings_EditMode_loop_normals_show_set");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, 0, "rna_LayerCollectionEngineSettings_update");
+
+ prop = RNA_def_property(srna, "normals_length", PROP_FLOAT, PROP_FACTOR);
+ RNA_def_property_ui_text(prop, "Normal Size", "Display size for normals in the 3D view");
+ RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_EditMode_normals_length_get", "rna_LayerEngineSettings_EditMode_normals_length_set", NULL);
+ RNA_def_property_range(prop, 0.00001, 1000.0);
+ RNA_def_property_ui_range(prop, 0.01, 10.0, 10.0, 2);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, 0, "rna_LayerCollectionEngineSettings_update");
+
+ prop = RNA_def_property(srna, "backwire_opacity", PROP_FLOAT, PROP_FACTOR);
+ RNA_def_property_ui_text(prop, "Backwire Opacity", "Opacity when rendering transparent wires");
+ RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_EditMode_backwire_opacity_get", "rna_LayerEngineSettings_EditMode_backwire_opacity_set", NULL);
+ RNA_def_property_range(prop, 0.0f, 1.0f);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, 0, "rna_LayerCollectionEngineSettings_update");
+
+ RNA_define_verify_sdna(1); /* not in sdna */
+}
+
+static void rna_def_layer_collection_mode_settings_paint_weight(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ srna = RNA_def_struct(brna, "LayerCollectionModeSettingsPaintWeight", "LayerCollectionSettings");
+ RNA_def_struct_ui_text(srna, "Collections Weight Paint Mode Settings", "Weight Paint Mode specific settings to be overridden per collection");
+ RNA_define_verify_sdna(0); /* not in sdna */
+
+ /* see RNA_LAYER_ENGINE_GET_SET macro */
+
+ prop = RNA_def_property(srna, "use_shading", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_ui_text(prop, "Use Shading", "Whether to use shaded or shadeless drawing");
+ RNA_def_property_boolean_funcs(prop, "rna_LayerEngineSettings_PaintWeightMode_use_shading_get", "rna_LayerEngineSettings_PaintWeightMode_use_shading_set");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, 0, "rna_LayerCollectionEngineSettings_update");
+
+ prop = RNA_def_property(srna, "use_wire", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_ui_text(prop, "Show Wire", "Whether to overlay wireframe onto the mesh");
+ RNA_def_property_boolean_funcs(prop, "rna_LayerEngineSettings_PaintWeightMode_use_wire_get", "rna_LayerEngineSettings_PaintWeightMode_use_wire_set");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_LayerCollectionEngineSettings_wire_update");
+
+ RNA_define_verify_sdna(1); /* not in sdna */
+}
+
+static void rna_def_layer_collection_mode_settings_paint_vertex(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ srna = RNA_def_struct(brna, "LayerCollectionModeSettingsPaintVertex", "LayerCollectionSettings");
+ RNA_def_struct_ui_text(srna, "Collections Vertex Paint Mode Settings", "Vertex Paint Mode specific settings to be overridden per collection");
+ RNA_define_verify_sdna(0); /* not in sdna */
+
+ /* see RNA_LAYER_ENGINE_GET_SET macro */
+
+ prop = RNA_def_property(srna, "use_shading", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_ui_text(prop, "Use Shading", "Whether to use shaded or shadeless drawing");
+ RNA_def_property_boolean_funcs(prop, "rna_LayerEngineSettings_PaintVertexMode_use_shading_get", "rna_LayerEngineSettings_PaintVertexMode_use_shading_set");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, 0, "rna_LayerCollectionEngineSettings_update");
+
+ prop = RNA_def_property(srna, "use_wire", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_ui_text(prop, "Show Wire", "Whether to overlay wireframe onto the mesh");
+ RNA_def_property_boolean_funcs(prop, "rna_LayerEngineSettings_PaintVertexMode_use_wire_get", "rna_LayerEngineSettings_PaintVertexMode_use_wire_set");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_LayerCollectionEngineSettings_wire_update");
+
+ RNA_define_verify_sdna(1); /* not in sdna */
+}
+
+static void rna_def_view_layer_settings(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+ FunctionRNA *func;
+ PropertyRNA *parm;
+
+ srna = RNA_def_struct(brna, "ViewLayerSettings", NULL);
+ RNA_def_struct_sdna(srna, "IDProperty");
+ RNA_def_struct_ui_text(srna, "Scene Layer Settings",
+ "Engine specific settings that can be overriden by ViewLayer");
+ RNA_def_struct_refine_func(srna, "rna_ViewLayerSettings_refine");
+
+ RNA_define_verify_sdna(0);
+
+ prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_funcs(prop, "rna_ViewLayerSettings_name_get", "rna_ViewLayerSettings_name_length", NULL);
+ RNA_def_property_ui_text(prop, "Name", "Engine Name");
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_struct_name_property(srna, prop);
+
+ func = RNA_def_function(srna, "use", "rna_ViewLayerSettings_use");
+ RNA_def_function_flag(func, FUNC_USE_SELF_ID);
+ RNA_def_function_ui_description(func, "Initialize this property to use");
+ parm = RNA_def_string(func, "identifier", NULL, 0, "Property Name", "Name of the property to set");
+ RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+
+ func = RNA_def_function(srna, "unuse", "rna_ViewLayerSettings_unuse");
+ RNA_def_function_flag(func, FUNC_USE_SELF_ID);
+ RNA_def_function_ui_description(func, "Remove the property");
+ parm = RNA_def_string(func, "identifier", NULL, 0, "Property Name", "Name of the property to unset");
+ RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+
+#ifdef WITH_CLAY_ENGINE
+ rna_def_view_layer_engine_settings_clay(brna);
+#endif
+ rna_def_view_layer_engine_settings_eevee(brna);
+
+#if 0
+ rna_def_view_layer_mode_settings_object(brna);
+ rna_def_view_layer_mode_settings_edit(brna);
+ rna_def_view_layer_mode_settings_paint_weight(brna);
+ rna_def_view_layer_mode_settings_paint_vertex(brna);
+#endif
+
+ RNA_define_verify_sdna(1);
+}
+
+static void rna_def_layer_collection_settings(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+ FunctionRNA *func;
+ PropertyRNA *parm;
+
+ srna = RNA_def_struct(brna, "LayerCollectionSettings", NULL);
+ RNA_def_struct_sdna(srna, "IDProperty");
+ RNA_def_struct_ui_text(srna, "Layer Collection Settings",
+ "Engine specific settings that can be overriden by LayerCollection");
+ RNA_def_struct_refine_func(srna, "rna_LayerCollectionSettings_refine");
+
+ RNA_define_verify_sdna(0);
+
+ prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_funcs(prop, "rna_LayerCollectionSettings_name_get", "rna_LayerCollectionSettings_name_length", NULL);
+ RNA_def_property_ui_text(prop, "Name", "Engine Name");
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_struct_name_property(srna, prop);
+
+ func = RNA_def_function(srna, "use", "rna_LayerCollectionSettings_use");
+ RNA_def_function_flag(func, FUNC_USE_SELF_ID);
+ RNA_def_function_ui_description(func, "Initialize this property to use");
+ parm = RNA_def_string(func, "identifier", NULL, 0, "Property Name", "Name of the property to set");
+ RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+
+ func = RNA_def_function(srna, "unuse", "rna_LayerCollectionSettings_unuse");
+ RNA_def_function_flag(func, FUNC_USE_SELF_ID);
+ RNA_def_function_ui_description(func, "Remove the property");
+ parm = RNA_def_string(func, "identifier", NULL, 0, "Property Name", "Name of the property to unset");
+ RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+
+#ifdef WITH_CLAY_ENGINE
+ rna_def_layer_collection_engine_settings_clay(brna);
+#endif
+
+ rna_def_layer_collection_mode_settings_object(brna);
+ rna_def_layer_collection_mode_settings_edit(brna);
+ rna_def_layer_collection_mode_settings_paint_weight(brna);
+ rna_def_layer_collection_mode_settings_paint_vertex(brna);
+
+ RNA_define_verify_sdna(1);
+}
+
+static void rna_def_layer_collection(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ FunctionRNA *func;
+ PropertyRNA *parm;
+
+ srna = RNA_def_struct(brna, "LayerCollection", NULL);
+ RNA_def_struct_ui_text(srna, "Layer Collection", "Layer collection");
+
+ prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_funcs(prop, "rna_LayerCollection_name_get", "rna_LayerCollection_name_length", "rna_LayerCollection_name_set");
+ RNA_def_property_ui_text(prop, "Name", "Collection name");
+ RNA_def_struct_name_property(srna, prop);
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, NULL);
+
+ prop = RNA_def_property(srna, "collection", PROP_POINTER, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_NEVER_NULL);
+ RNA_def_property_pointer_sdna(prop, NULL, "scene_collection");
+ RNA_def_property_struct_type(prop, "SceneCollection");
+ RNA_def_property_ui_text(prop, "Collection", "Collection this layer collection is wrapping");
+
+ prop = RNA_def_property(srna, "collections", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_collection_sdna(prop, NULL, "layer_collections", NULL);
+ RNA_def_property_struct_type(prop, "LayerCollection");
+ RNA_def_property_ui_text(prop, "Layer Collections", "");
+
+ prop = RNA_def_property(srna, "objects", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_collection_sdna(prop, NULL, "object_bases", NULL);
+ RNA_def_property_struct_type(prop, "Object");
+ RNA_def_property_collection_funcs(prop, NULL, NULL, NULL, "rna_LayerCollection_objects_get", NULL, NULL, NULL, NULL);
+ RNA_def_property_ui_text(prop, "Objects", "All the objects directly or indirectly added to this collection (not including sub-collection objects)");
+
+ prop = RNA_def_property(srna, "overrides", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_collection_sdna(prop, NULL, "overrides", NULL);
+ RNA_def_property_struct_type(prop, "LayerCollectionOverride");
+ RNA_def_property_ui_text(prop, "Collection Overrides", "");
+
+ /* Override settings */
+ prop = RNA_def_property(srna, "engine_overrides", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_collection_sdna(prop, NULL, "properties->data.group", NULL);
+ RNA_def_property_struct_type(prop, "LayerCollectionSettings");
+ RNA_def_property_ui_text(prop, "Collection Settings", "Override of engine specific render settings");
+
+ /* Functions */
+ func = RNA_def_function(srna, "move_above", "rna_LayerCollection_move_above");
+ RNA_def_function_ui_description(func, "Move collection after another");
+ RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_USE_MAIN);
+ parm = RNA_def_pointer(func, "lc_dst", "LayerCollection", "Collection", "Reference collection above which the collection will move");
+ parm = RNA_def_boolean(func, "result", false, "Result", "Whether the operation succeded");
+ RNA_def_function_return(func, parm);
+
+ func = RNA_def_function(srna, "move_below", "rna_LayerCollection_move_below");
+ RNA_def_function_ui_description(func, "Move collection before another");
+ RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_USE_MAIN);
+ parm = RNA_def_pointer(func, "lc_dst", "LayerCollection", "Collection", "Reference collection below which the collection will move");
+ parm = RNA_def_boolean(func, "result", false, "Result", "Whether the operation succeded");
+ RNA_def_function_return(func, parm);
+
+ func = RNA_def_function(srna, "move_into", "rna_LayerCollection_move_into");
+ RNA_def_function_ui_description(func, "Move collection into another");
+ RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_USE_MAIN);
+ parm = RNA_def_pointer(func, "lc_dst", "LayerCollection", "Collection", "Collection to insert into");
+ parm = RNA_def_boolean(func, "result", false, "Result", "Whether the operation succeded");
+ RNA_def_function_return(func, parm);
+
+ func = RNA_def_function(srna, "create_group", "rna_LayerCollection_create_group");
+ RNA_def_function_ui_description(func, "Enable or disable a collection");
+ RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_USE_MAIN | FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
+ parm = RNA_def_pointer(func, "result", "Group", "", "Newly created Group");
+ RNA_def_function_return(func, parm);
+
+ func = RNA_def_function(srna, "duplicate", "rna_LayerCollection_duplicate");
+ RNA_def_function_ui_description(func, "Create a copy of the collection");
+ RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_USE_MAIN | FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
+ parm = RNA_def_pointer(func, "result", "LayerCollection", "", "Newly created collection");
+ RNA_def_function_return(func, parm);
+
+ /* Flags */
+ prop = RNA_def_property(srna, "selectable", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", COLLECTION_SELECTABLE);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_ui_icon(prop, ICON_RESTRICT_SELECT_OFF, 1);
+ RNA_def_property_ui_text(prop, "Selectable", "Restrict selection");
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_LayerCollection_flag_update");
+
+ prop = RNA_def_property(srna, "visible_viewport", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", COLLECTION_VIEWPORT);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_ui_icon(prop, ICON_RESTRICT_VIEW_OFF, 1);
+ RNA_def_property_ui_text(prop, "Viewport Visibility", "");
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_LayerCollection_flag_update");
+
+ prop = RNA_def_property(srna, "visible_render", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", COLLECTION_RENDER);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_OFF, 1);
+ RNA_def_property_ui_text(prop, "Render Visibility", "Control");
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_LayerCollection_flag_update");
+
+ prop = RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", COLLECTION_DISABLED);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_ui_text(prop, "Enabled", "Enable or disable collection");
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_LayerCollection_flag_update");
+}
+
+static void rna_def_layer_collections(BlenderRNA *brna, PropertyRNA *cprop)
+{
+ StructRNA *srna;
+ FunctionRNA *func;
+ PropertyRNA *prop;
+ PropertyRNA *parm;
+
+ RNA_def_property_srna(cprop, "LayerCollections");
+ srna = RNA_def_struct(brna, "LayerCollections", NULL);
+ RNA_def_struct_sdna(srna, "ViewLayer");
+ RNA_def_struct_ui_text(srna, "Layer Collections", "Collections of render layer");
+
+ prop = RNA_def_property(srna, "active_index", PROP_INT, PROP_UNSIGNED);
+ RNA_def_property_int_sdna(prop, NULL, "active_collection");
+ RNA_def_property_int_funcs(prop, "rna_LayerCollections_active_collection_index_get",
+ "rna_LayerCollections_active_collection_index_set",
+ "rna_LayerCollections_active_collection_index_range");
+ RNA_def_property_ui_text(prop, "Active Collection Index", "Active index in layer collection array");
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER, NULL);
+
+ prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
+ RNA_def_property_struct_type(prop, "LayerCollection");
+ RNA_def_property_pointer_funcs(prop, "rna_LayerCollections_active_collection_get",
+ "rna_LayerCollections_active_collection_set", NULL, NULL);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_NEVER_NULL);
+ RNA_def_property_ui_text(prop, "Active Layer Collection", "Active Layer Collection");
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER, NULL);
+
+ func = RNA_def_function(srna, "link", "rna_ViewLayer_collection_link");
+ RNA_def_function_ui_description(func, "Link a collection to render layer");
+ RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_USE_MAIN);
+ parm = RNA_def_pointer(func, "scene_collection", "SceneCollection", "", "Collection to add to render layer");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
+ parm = RNA_def_pointer(func, "result", "LayerCollection", "", "Newly created layer collection");
+ RNA_def_function_return(func, parm);
+
+ func = RNA_def_function(srna, "unlink", "rna_ViewLayer_collection_unlink");
+ RNA_def_function_ui_description(func, "Unlink a collection from render layer");
+ RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_USE_MAIN | FUNC_USE_REPORTS);
+ parm = RNA_def_pointer(func, "layer_collection", "LayerCollection", "", "Layer collection to remove from render layer");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
+}
+
+static void rna_def_layer_objects(BlenderRNA *brna, PropertyRNA *cprop)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ RNA_def_property_srna(cprop, "LayerObjects");
+ srna = RNA_def_struct(brna, "LayerObjects", NULL);
+ RNA_def_struct_sdna(srna, "ViewLayer");
+ RNA_def_struct_ui_text(srna, "Layer Objects", "Collections of objects");
+
+ prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
+ RNA_def_property_struct_type(prop, "Object");
+ RNA_def_property_pointer_funcs(prop, "rna_LayerObjects_active_object_get", "rna_LayerObjects_active_object_set", NULL, NULL);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_NEVER_UNLINK | PROP_CONTEXT_UPDATE);
+ RNA_def_property_ui_text(prop, "Active Object", "Active object for this layer");
+ /* Could call: ED_object_base_activate(C, rl->basact);
+ * but would be a bad level call and it seems the notifier is enough */
+ RNA_def_property_update(prop, NC_SCENE | ND_OB_ACTIVE, "rna_LayerObjects_active_object_update");
+
+ prop = RNA_def_property(srna, "selected", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_collection_sdna(prop, NULL, "object_bases", NULL);
+ RNA_def_property_struct_type(prop, "Object");
+ RNA_def_property_collection_funcs(prop, "rna_LayerObjects_selected_begin", "rna_iterator_listbase_next",
+ "rna_iterator_listbase_end", "rna_ViewLayer_objects_get",
+ NULL, NULL, NULL, NULL);
+ RNA_def_property_ui_text(prop, "Selected Objects", "All the selected objects of this layer");
+}
+
+static void rna_def_object_base(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ srna = RNA_def_struct(brna, "ObjectBase", NULL);
+ RNA_def_struct_sdna(srna, "Base");
+ RNA_def_struct_ui_text(srna, "Object Base", "An object instance in a render layer");
+ RNA_def_struct_ui_icon(srna, ICON_OBJECT_DATA);
+
+ prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
+ RNA_def_property_pointer_sdna(prop, NULL, "object");
+ RNA_def_property_ui_text(prop, "Object", "Object this base links to");
+
+ prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", BASE_SELECTED);
+ RNA_def_property_ui_text(prop, "Select", "Object base selection state");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_ObjectBase_select_update");
+}
+
+static void rna_def_scene_view_render(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ static const EnumPropertyItem engine_items[] = {
+ {0, "BLENDER_RENDER", 0, "Blender Render", "Use the Blender internal rendering engine for rendering"},
+ {0, NULL, 0, NULL, NULL}
+ };
+
+ srna = RNA_def_struct(brna, "ViewRenderSettings", NULL);
+ RNA_def_struct_sdna(srna, "ViewRender");
+ RNA_def_struct_path_func(srna, "rna_ViewRenderSettings_path");
+ RNA_def_struct_ui_text(srna, "View Render", "Rendering settings related to viewport drawing/rendering");
+
+ /* engine */
+ prop = RNA_def_property(srna, "engine", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_items(prop, engine_items);
+ RNA_def_property_enum_funcs(prop, "rna_ViewRenderSettings_engine_get", "rna_ViewRenderSettings_engine_set",
+ "rna_ViewRenderSettings_engine_itemf");
+ RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
+ RNA_def_property_ui_text(prop, "Engine", "Engine to use for rendering");
+ RNA_def_property_update(prop, NC_WINDOW, "rna_ViewRenderSettings_engine_update");
+
+ prop = RNA_def_property(srna, "has_multiple_engines", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(prop, "rna_ViewRenderSettings_multiple_engines_get", NULL);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_ui_text(prop, "Multiple Engines", "More than one rendering engine is available");
+
+ prop = RNA_def_property(srna, "use_shading_nodes", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(prop, "rna_ViewRenderSettings_use_shading_nodes_get", NULL);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_ui_text(prop, "Use Shading Nodes", "Active render engine uses new shading nodes system");
+
+ prop = RNA_def_property(srna, "use_spherical_stereo", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(prop, "rna_ViewRenderSettings_use_spherical_stereo_get", NULL);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_ui_text(prop, "Use Spherical Stereo", "Active render engine supports spherical stereo rendering");
+
+ prop = RNA_def_property(srna, "use_game_engine", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(prop, "rna_ViewRenderSettings_use_game_engine_get", NULL);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_ui_text(prop, "Use Game Engine", "Current rendering engine is a game engine");
+}
+
+void RNA_def_view_layer(BlenderRNA *brna)
+{
+ FunctionRNA *func;
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ srna = RNA_def_struct(brna, "ViewLayer", NULL);
+ RNA_def_struct_ui_text(srna, "Render Layer", "Render layer");
+ RNA_def_struct_ui_icon(srna, ICON_RENDERLAYERS);
+ RNA_def_struct_idprops_func(srna, "rna_ViewLayer_idprops");
+
+ rna_def_view_layer_common(srna, 1);
+
+ func = RNA_def_function(srna, "update_render_passes", "rna_ViewLayer_update_render_passes");
+ RNA_def_function_ui_description(func, "Requery the enabled render passes from the render engine");
+ RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_NO_SELF);
+
+ prop = RNA_def_property(srna, "collections", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_collection_sdna(prop, NULL, "layer_collections", NULL);
+ RNA_def_property_struct_type(prop, "LayerCollection");
+ RNA_def_property_ui_text(prop, "Layer Collections", "");
+ rna_def_layer_collections(brna, prop);
+
+ prop = RNA_def_property(srna, "objects", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_collection_sdna(prop, NULL, "object_bases", NULL);
+ RNA_def_property_struct_type(prop, "Object");
+ RNA_def_property_collection_funcs(prop, NULL, NULL, NULL, "rna_ViewLayer_objects_get", NULL, NULL, NULL, NULL);
+ RNA_def_property_ui_text(prop, "Objects", "All the objects in this layer");
+ rna_def_layer_objects(brna, prop);
+
+ /* layer options */
+ prop = RNA_def_property(srna, "use", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", VIEW_LAYER_RENDER);
+ RNA_def_property_ui_text(prop, "Enabled", "Disable or enable the render layer");
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER, NULL);
+
+ prop = RNA_def_property(srna, "use_freestyle", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", VIEW_LAYER_FREESTYLE);
+ RNA_def_property_ui_text(prop, "Freestyle", "Render stylized strokes in this Layer");
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER, NULL);
+
+ /* Freestyle */
+ rna_def_freestyle_settings(brna);
+
+ prop = RNA_def_property(srna, "freestyle_settings", PROP_POINTER, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_NEVER_NULL);
+ RNA_def_property_pointer_sdna(prop, NULL, "freestyle_config");
+ RNA_def_property_struct_type(prop, "FreestyleSettings");
+ RNA_def_property_ui_text(prop, "Freestyle Settings", "");
+
+ /* Override settings */
+ prop = RNA_def_property(srna, "engine_overrides", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_collection_sdna(prop, NULL, "properties->data.group", NULL);
+ RNA_def_property_struct_type(prop, "ViewLayerSettings");
+ RNA_def_property_ui_text(prop, "Layer Settings", "Override of engine specific render settings");
+
+ /* debug update routine */
+ func = RNA_def_function(srna, "update", "rna_ViewLayer_update_tagged");
+ RNA_def_function_flag(func, FUNC_USE_CONTEXT);
+ RNA_def_function_ui_description(func,
+ "Update data tagged to be updated from previous access to data or operators");
+
+ /* Dependency Graph */
+ prop = RNA_def_property(srna, "depsgraph", PROP_POINTER, PROP_NONE);
+ RNA_def_property_struct_type(prop, "Depsgraph");
+ RNA_def_property_ui_text(prop, "Dependency Graph", "Dependencies in the scene data");
+ RNA_def_property_pointer_funcs(prop, "rna_ViewLayer_depsgraph_get", NULL, NULL, NULL);
+
+ /* Nested Data */
+ /* *** Non-Animated *** */
+ RNA_define_animate_sdna(false);
+ rna_def_scene_collection(brna);
+ rna_def_layer_collection(brna);
+ rna_def_layer_collection_override(brna);
+ rna_def_object_base(brna);
+ RNA_define_animate_sdna(true);
+ /* *** Animated *** */
+ rna_def_view_layer_settings(brna);
+ rna_def_layer_collection_settings(brna);
+ rna_def_scene_view_render(brna);
+}
+
+#endif
diff --git a/source/blender/makesrna/intern/rna_lightprobe.c b/source/blender/makesrna/intern/rna_lightprobe.c
new file mode 100644
index 00000000000..6586b456960
--- /dev/null
+++ b/source/blender/makesrna/intern/rna_lightprobe.c
@@ -0,0 +1,211 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Foundation.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/makesrna/intern/rna_lightprobe.c
+ * \ingroup RNA
+ */
+
+#include <stdlib.h>
+
+#include "RNA_define.h"
+#include "RNA_enum_types.h"
+
+#include "rna_internal.h"
+
+#include "DNA_lightprobe_types.h"
+
+#include "WM_types.h"
+
+#ifdef RNA_RUNTIME
+
+#include "MEM_guardedalloc.h"
+
+#include "BKE_main.h"
+#include "DEG_depsgraph.h"
+
+#include "DNA_object_types.h"
+
+#include "WM_api.h"
+
+static void rna_LightProbe_recalc(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
+{
+ DEG_id_tag_update(ptr->id.data, OB_RECALC_DATA);
+}
+
+#else
+
+static EnumPropertyItem parallax_type_items[] = {
+ {LIGHTPROBE_SHAPE_ELIPSOID, "ELIPSOID", ICON_NONE, "Sphere", ""},
+ {LIGHTPROBE_SHAPE_BOX, "BOX", ICON_NONE, "Box", ""},
+ {0, NULL, 0, NULL, NULL}
+};
+
+static EnumPropertyItem lightprobe_type_items[] = {
+ {LIGHTPROBE_TYPE_CUBE, "CUBEMAP", ICON_NONE, "Reflection Cubemap", "Capture reflections"},
+ {LIGHTPROBE_TYPE_PLANAR, "PLANAR", ICON_NONE, "Reflection Plane", ""},
+ {LIGHTPROBE_TYPE_GRID, "GRID", ICON_NONE, "Irradiance Volume", "Volume used for precomputing indirect lighting"},
+ {0, NULL, 0, NULL, NULL}
+};
+
+static void rna_def_lightprobe(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ srna = RNA_def_struct(brna, "LightProbe", "ID");
+ RNA_def_struct_ui_text(srna, "LightProbe", "Light Probe data-block for lighting capture objects");
+ RNA_def_struct_ui_icon(srna, ICON_RADIO);
+
+ prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_items(prop, lightprobe_type_items);
+ RNA_def_property_ui_text(prop, "Type", "Type of light probe");
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+
+ prop = RNA_def_property(srna, "clip_start", PROP_FLOAT, PROP_DISTANCE);
+ RNA_def_property_float_sdna(prop, NULL, "clipsta");
+ RNA_def_property_range(prop, 1e-6f, FLT_MAX);
+ RNA_def_property_ui_range(prop, 0.001f, FLT_MAX, 10, 3);
+ RNA_def_property_ui_text(prop, "Clip Start",
+ "Probe clip start, below which objects will not appear in reflections");
+ RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc");
+
+ prop = RNA_def_property(srna, "clip_end", PROP_FLOAT, PROP_DISTANCE);
+ RNA_def_property_float_sdna(prop, NULL, "clipend");
+ RNA_def_property_range(prop, 1e-6f, FLT_MAX);
+ RNA_def_property_ui_range(prop, 0.001f, FLT_MAX, 10, 3);
+ RNA_def_property_ui_text(prop, "Clip End",
+ "Probe clip end, beyond which objects will not appear in reflections");
+ RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc");
+
+ prop = RNA_def_property(srna, "show_clip", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", LIGHTPROBE_FLAG_SHOW_CLIP_DIST);
+ RNA_def_property_ui_text(prop, "Clipping", "Show the clipping distances in the 3D view");
+ RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, NULL);
+
+ prop = RNA_def_property(srna, "influence_type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "attenuation_type");
+ RNA_def_property_enum_items(prop, parallax_type_items);
+ RNA_def_property_ui_text(prop, "Type", "Type of parallax volume");
+ RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, NULL);
+
+ prop = RNA_def_property(srna, "show_influence", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", LIGHTPROBE_FLAG_SHOW_INFLUENCE);
+ RNA_def_property_ui_text(prop, "Influence", "Show the influence volume in the 3D view");
+ RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, NULL);
+
+ prop = RNA_def_property(srna, "influence_distance", PROP_FLOAT, PROP_DISTANCE);
+ RNA_def_property_float_sdna(prop, NULL, "distinf");
+ RNA_def_property_range(prop, 0.0f, FLT_MAX);
+ RNA_def_property_ui_text(prop, "Influence Distance", "Influence distance of the probe");
+ RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, NULL);
+
+ prop = RNA_def_property(srna, "falloff", PROP_FLOAT, PROP_FACTOR);
+ RNA_def_property_range(prop, 0.0f, 1.0f);
+ RNA_def_property_ui_text(prop, "Falloff", "Control how fast the probe influence decreases");
+ RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, NULL);
+
+ prop = RNA_def_property(srna, "use_custom_parallax", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", LIGHTPROBE_FLAG_CUSTOM_PARALLAX);
+ RNA_def_property_ui_text(prop, "Use Custom Parallax", "Enable custom settings for the parallax correction volume");
+ RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, NULL);
+
+ prop = RNA_def_property(srna, "show_parallax", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", LIGHTPROBE_FLAG_SHOW_PARALLAX);
+ RNA_def_property_ui_text(prop, "Parallax", "Show the parallax correction volume in the 3D view");
+ RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, NULL);
+
+ prop = RNA_def_property(srna, "parallax_type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_items(prop, parallax_type_items);
+ RNA_def_property_ui_text(prop, "Type", "Type of parallax volume");
+ RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, NULL);
+
+ prop = RNA_def_property(srna, "parallax_distance", PROP_FLOAT, PROP_DISTANCE);
+ RNA_def_property_float_sdna(prop, NULL, "distpar");
+ RNA_def_property_range(prop, 0.0f, FLT_MAX);
+ RNA_def_property_ui_text(prop, "Parallax Radius", "Lowest corner of the parallax bounding box");
+ RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, NULL);
+
+ /* irradiance grid */
+ prop = RNA_def_property(srna, "grid_resolution_x", PROP_INT, PROP_NONE);
+ RNA_def_property_range(prop, 1, 256);
+ RNA_def_property_ui_text(prop, "Resolution X", "Number of sample along the x axis of the volume");
+ RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc");
+
+ prop = RNA_def_property(srna, "grid_resolution_y", PROP_INT, PROP_NONE);
+ RNA_def_property_range(prop, 1, 256);
+ RNA_def_property_ui_text(prop, "Resolution Y", "Number of sample along the y axis of the volume");
+ RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc");
+
+ prop = RNA_def_property(srna, "grid_resolution_z", PROP_INT, PROP_NONE);
+ RNA_def_property_range(prop, 1, 256);
+ RNA_def_property_ui_text(prop, "Resolution Z", "Number of sample along the z axis of the volume");
+ RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc");
+
+ prop = RNA_def_property(srna, "visibility_buffer_bias", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "vis_bias");
+ RNA_def_property_range(prop, 0.001f, 9999.0f);
+ RNA_def_property_ui_range(prop, 0.001f, 5.0f, 1.0, 3);
+ RNA_def_property_ui_text(prop, "Visibility Bias", "Bias for reducing self shadowing");
+ RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, NULL);
+
+ prop = RNA_def_property(srna, "visibility_bleed_bias", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "vis_bleedbias");
+ RNA_def_property_range(prop, 0.0f, 1.0f);
+ RNA_def_property_ui_text(prop, "Visibility Bleed Bias", "Bias for reducing light-bleed on variance shadow maps");
+ RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, NULL);
+
+ prop = RNA_def_property(srna, "visibility_blur", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "vis_blur");
+ RNA_def_property_range(prop, 0.0f, 1.0f);
+ RNA_def_property_ui_text(prop, "Visibility Blur", "Filter size of the visibilty blur");
+ RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc");
+
+ prop = RNA_def_property(srna, "intensity", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "intensity");
+ RNA_def_property_range(prop, 0.0f, FLT_MAX);
+ RNA_def_property_ui_range(prop, 0.0f, 3.0f, 1.0, 3);
+ RNA_def_property_ui_text(prop, "Intensity", "Modify the intensity of the lighting captured by this probe");
+ RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc");
+
+ /* Data preview */
+ prop = RNA_def_property(srna, "show_data", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", LIGHTPROBE_FLAG_SHOW_DATA);
+ RNA_def_property_ui_text(prop, "Show Data", "Show captured lighting data into the 3D view for debuging purpose");
+ RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, NULL);
+
+ prop = RNA_def_property(srna, "data_draw_size", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_range(prop, 0.05f, 10.0f);
+ RNA_def_property_ui_text(prop, "Data Draw Size", "Size of the spheres to debug captured light");
+ RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, NULL);
+
+ /* common */
+ rna_def_animdata_common(srna);
+}
+
+
+void RNA_def_lightprobe(BlenderRNA *brna)
+{
+ rna_def_lightprobe(brna);
+}
+
+#endif
+
diff --git a/source/blender/makesrna/intern/rna_linestyle.c b/source/blender/makesrna/intern/rna_linestyle.c
index bcd8ab054ae..e138d0d98d8 100644
--- a/source/blender/makesrna/intern/rna_linestyle.c
+++ b/source/blender/makesrna/intern/rna_linestyle.c
@@ -101,7 +101,8 @@ const EnumPropertyItem rna_enum_linestyle_geometry_modifier_type_items[] = {
#include "BKE_linestyle.h"
#include "BKE_texture.h"
-#include "BKE_depsgraph.h"
+
+#include "DEG_depsgraph.h"
#include "ED_node.h"
@@ -323,7 +324,7 @@ static void rna_LineStyle_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Poin
{
FreestyleLineStyle *linestyle = ptr->id.data;
- DAG_id_tag_update(&linestyle->id, 0);
+ DEG_id_tag_update(&linestyle->id, 0);
WM_main_add_notifier(NC_LINESTYLE, linestyle);
}
@@ -347,7 +348,7 @@ static LineStyleModifier *rna_LineStyle_color_modifier_add(FreestyleLineStyle *l
return NULL;
}
- DAG_id_tag_update(&linestyle->id, 0);
+ DEG_id_tag_update(&linestyle->id, 0);
WM_main_add_notifier(NC_LINESTYLE, linestyle);
return modifier;
@@ -365,7 +366,7 @@ static void rna_LineStyle_color_modifier_remove(FreestyleLineStyle *linestyle, R
RNA_POINTER_INVALIDATE(modifier_ptr);
- DAG_id_tag_update(&linestyle->id, 0);
+ DEG_id_tag_update(&linestyle->id, 0);
WM_main_add_notifier(NC_LINESTYLE, linestyle);
}
@@ -379,7 +380,7 @@ static LineStyleModifier *rna_LineStyle_alpha_modifier_add(FreestyleLineStyle *l
return NULL;
}
- DAG_id_tag_update(&linestyle->id, 0);
+ DEG_id_tag_update(&linestyle->id, 0);
WM_main_add_notifier(NC_LINESTYLE, linestyle);
return modifier;
@@ -397,7 +398,7 @@ static void rna_LineStyle_alpha_modifier_remove(FreestyleLineStyle *linestyle, R
RNA_POINTER_INVALIDATE(modifier_ptr);
- DAG_id_tag_update(&linestyle->id, 0);
+ DEG_id_tag_update(&linestyle->id, 0);
WM_main_add_notifier(NC_LINESTYLE, linestyle);
}
@@ -411,7 +412,7 @@ static LineStyleModifier *rna_LineStyle_thickness_modifier_add(FreestyleLineStyl
return NULL;
}
- DAG_id_tag_update(&linestyle->id, 0);
+ DEG_id_tag_update(&linestyle->id, 0);
WM_main_add_notifier(NC_LINESTYLE, linestyle);
return modifier;
@@ -429,7 +430,7 @@ static void rna_LineStyle_thickness_modifier_remove(FreestyleLineStyle *linestyl
RNA_POINTER_INVALIDATE(modifier_ptr);
- DAG_id_tag_update(&linestyle->id, 0);
+ DEG_id_tag_update(&linestyle->id, 0);
WM_main_add_notifier(NC_LINESTYLE, linestyle);
}
@@ -443,7 +444,7 @@ static LineStyleModifier *rna_LineStyle_geometry_modifier_add(FreestyleLineStyle
return NULL;
}
- DAG_id_tag_update(&linestyle->id, 0);
+ DEG_id_tag_update(&linestyle->id, 0);
WM_main_add_notifier(NC_LINESTYLE, linestyle);
return modifier;
@@ -461,7 +462,7 @@ static void rna_LineStyle_geometry_modifier_remove(FreestyleLineStyle *linestyle
RNA_POINTER_INVALIDATE(modifier_ptr);
- DAG_id_tag_update(&linestyle->id, 0);
+ DEG_id_tag_update(&linestyle->id, 0);
WM_main_add_notifier(NC_LINESTYLE, linestyle);
}
diff --git a/source/blender/makesrna/intern/rna_main.c b/source/blender/makesrna/intern/rna_main.c
index 94687b6fd46..6479826b7b3 100644
--- a/source/blender/makesrna/intern/rna_main.c
+++ b/source/blender/makesrna/intern/rna_main.c
@@ -293,6 +293,18 @@ static void rna_Main_paintcurves_begin(CollectionPropertyIterator *iter, Pointer
rna_iterator_listbase_begin(iter, &bmain->paintcurves, NULL);
}
+static void rna_Main_workspaces_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
+{
+ Main *bmain = (Main *)ptr->data;
+ rna_iterator_listbase_begin(iter, &bmain->workspaces, NULL);
+}
+
+static void rna_Main_lightprobes_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
+{
+ Main *bmain = (Main *)ptr->data;
+ rna_iterator_listbase_begin(iter, &bmain->lightprobe, NULL);
+}
+
static void rna_Main_version_get(PointerRNA *ptr, int *value)
{
Main *bmain = (Main *)ptr->data;
@@ -368,6 +380,8 @@ void RNA_def_main(BlenderRNA *brna)
{"linestyles", "FreestyleLineStyle", "rna_Main_linestyle_begin", "Line Styles", "Line Style data-blocks", RNA_def_main_linestyles},
{"cache_files", "CacheFile", "rna_Main_cachefiles_begin", "Cache Files", "Cache Files data-blocks", RNA_def_main_cachefiles},
{"paint_curves", "PaintCurve", "rna_Main_paintcurves_begin", "Paint Curves", "Paint Curves data-blocks", RNA_def_main_paintcurves},
+ {"workspaces", "WorkSpace", "rna_Main_workspaces_begin", "Workspaces", "Workspace data-blocks", RNA_def_main_workspaces},
+ {"lightprobes", "LightProbe", "rna_Main_lightprobes_begin", "LightProbes", "LightProbe data-blocks", RNA_def_main_lightprobes},
{NULL, NULL, NULL, NULL, NULL, NULL}
};
diff --git a/source/blender/makesrna/intern/rna_main_api.c b/source/blender/makesrna/intern/rna_main_api.c
index 4aa4eddaddb..57292b7adc3 100644
--- a/source/blender/makesrna/intern/rna_main_api.c
+++ b/source/blender/makesrna/intern/rna_main_api.c
@@ -78,12 +78,16 @@
#include "BKE_paint.h"
#include "BKE_font.h"
#include "BKE_node.h"
-#include "BKE_depsgraph.h"
#include "BKE_speaker.h"
+#include "BKE_lightprobe.h"
#include "BKE_movieclip.h"
#include "BKE_mask.h"
#include "BKE_gpencil.h"
#include "BKE_linestyle.h"
+#include "BKE_workspace.h"
+
+#include "DEG_depsgraph_build.h"
+#include "DEG_depsgraph_query.h"
#include "DNA_armature_types.h"
#include "DNA_camera_types.h"
@@ -93,6 +97,7 @@
#include "DNA_mesh_types.h"
#include "DNA_speaker_types.h"
#include "DNA_sound_types.h"
+#include "DNA_lightprobe_types.h"
#include "DNA_text_types.h"
#include "DNA_texture_types.h"
#include "DNA_group_types.h"
@@ -115,6 +120,8 @@
# include "BPY_extern.h"
#endif
+#include "WM_api.h"
+
static void rna_idname_validate(const char *name, char *r_name)
{
@@ -170,14 +177,15 @@ static void rna_Main_scenes_remove(Main *bmain, bContext *C, ReportList *reports
(scene_new = scene->id.next))
{
if (do_unlink) {
- bScreen *sc = CTX_wm_screen(C);
- if (sc->scene == scene) {
+ wmWindow *win = CTX_wm_window(C);
+
+ if (WM_window_get_active_scene(win) == scene) {
#ifdef WITH_PYTHON
BPy_BEGIN_ALLOW_THREADS;
#endif
- ED_screen_set_scene(C, sc, scene_new);
+ WM_window_change_active_scene(bmain, C, win, scene_new);
#ifdef WITH_PYTHON
BPy_END_ALLOW_THREADS;
@@ -241,7 +249,6 @@ static Object *rna_Main_objects_new(Main *bmain, ReportList *reports, const char
}
ob = BKE_object_add_only_object(bmain, type, safe_name);
- id_us_min(&ob->id);
ob->data = data;
test_object_materials(ob, ob->data);
@@ -293,9 +300,26 @@ static Mesh *rna_Main_meshes_new(Main *bmain, const char *name)
/* copied from Mesh_getFromObject and adapted to RNA interface */
/* settings: 1 - preview, 2 - render */
Mesh *rna_Main_meshes_new_from_object(
- Main *bmain, ReportList *reports, Scene *sce,
+ Main *bmain, ReportList *reports, Scene *sce, ViewLayer *view_layer,
Object *ob, int apply_modifiers, int settings, int calc_tessface, int calc_undeformed)
{
+ EvaluationContext eval_ctx;
+
+ /* XXX: This should never happen, but render pipeline is not ready to give
+ * proper view_layer, and will always pass NULL here. For until we port
+ * pipeline form SceneRenderLayer to ViewLayer we have this stub to prevent
+ * some obvious crashes.
+ * - sergey -
+ */
+ if (view_layer == NULL) {
+ view_layer = sce->view_layers.first;
+ }
+
+ DEG_evaluation_context_init(&eval_ctx, settings);
+ eval_ctx.ctime = (float)sce->r.cfra + sce->r.subframe;
+ eval_ctx.view_layer = view_layer;
+ eval_ctx.depsgraph = BKE_scene_get_depsgraph(sce, view_layer, false);
+
switch (ob->type) {
case OB_FONT:
case OB_CURVE:
@@ -308,7 +332,7 @@ Mesh *rna_Main_meshes_new_from_object(
return NULL;
}
- return BKE_mesh_new_from_object(bmain, sce, ob, apply_modifiers, settings, calc_tessface, calc_undeformed);
+ return BKE_mesh_new_from_object(&eval_ctx, bmain, sce, ob, apply_modifiers, settings, calc_tessface, calc_undeformed);
}
static Lamp *rna_Main_lamps_new(Main *bmain, const char *name, int type)
@@ -544,7 +568,7 @@ static MovieClip *rna_Main_movieclip_load(Main *bmain, ReportList *reports, cons
}
if (clip != NULL) {
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
}
else {
BKE_reportf(reports, RPT_ERROR, "Cannot read '%s': %s", filepath,
@@ -573,13 +597,23 @@ static FreestyleLineStyle *rna_Main_linestyles_new(Main *bmain, const char *name
return linestyle;
}
+static LightProbe *rna_Main_lightprobe_new(Main *bmain, const char *name)
+{
+ char safe_name[MAX_ID_NAME - 2];
+ rna_idname_validate(name, safe_name);
+
+ LightProbe *probe = BKE_lightprobe_add(bmain, safe_name);
+ id_us_min(&probe->id);
+ return probe;
+}
+
/* tag and is_updated functions, all the same */
#define RNA_MAIN_ID_TAG_FUNCS_DEF(_func_name, _listbase_name, _id_type) \
static void rna_Main_##_func_name##_tag(Main *bmain, int value) { \
BKE_main_id_tag_listbase(&bmain->_listbase_name, LIB_TAG_DOIT, value); \
} \
static int rna_Main_##_func_name##_is_updated_get(PointerRNA *ptr) { \
- return DAG_id_type_tagged(ptr->data, _id_type) != 0; \
+ return DEG_id_type_tagged(ptr->data, _id_type) != 0; \
}
RNA_MAIN_ID_TAG_FUNCS_DEF(cameras, camera, ID_CA)
@@ -615,6 +649,8 @@ RNA_MAIN_ID_TAG_FUNCS_DEF(masks, mask, ID_MSK)
RNA_MAIN_ID_TAG_FUNCS_DEF(linestyle, linestyle, ID_LS)
RNA_MAIN_ID_TAG_FUNCS_DEF(cachefiles, cachefiles, ID_CF)
RNA_MAIN_ID_TAG_FUNCS_DEF(paintcurves, paintcurves, ID_PC)
+RNA_MAIN_ID_TAG_FUNCS_DEF(workspaces, workspaces, ID_WS)
+RNA_MAIN_ID_TAG_FUNCS_DEF(lightprobes, lightprobe, ID_LP)
#undef RNA_MAIN_ID_TAG_FUNCS_DEF
@@ -881,6 +917,8 @@ void RNA_def_main_meshes(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_flag(func, FUNC_USE_REPORTS);
parm = RNA_def_pointer(func, "scene", "Scene", "", "Scene within which to evaluate modifiers");
RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
+ parm = RNA_def_pointer(func, "view_layer", "ViewLayer", "", "Scene layer within which to evaluate modifiers");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
parm = RNA_def_pointer(func, "object", "Object", "", "Object to create mesh from");
RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
parm = RNA_def_boolean(func, "apply_modifiers", 0, "", "Apply modifiers");
@@ -1676,6 +1714,7 @@ void RNA_def_main_particles(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_boolean_funcs(prop, "rna_Main_particles_is_updated_get", NULL);
}
+
void RNA_def_main_palettes(BlenderRNA *brna, PropertyRNA *cprop)
{
StructRNA *srna;
@@ -1927,4 +1966,68 @@ void RNA_def_main_linestyles(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_property_boolean_funcs(prop, "rna_Main_linestyle_is_updated_get", NULL);
}
+void RNA_def_main_workspaces(BlenderRNA *brna, PropertyRNA *cprop)
+{
+ StructRNA *srna;
+ FunctionRNA *func;
+ PropertyRNA *parm;
+ PropertyRNA *prop;
+
+ RNA_def_property_srna(cprop, "BlendDataWorkSpaces");
+ srna = RNA_def_struct(brna, "BlendDataWorkSpaces", NULL);
+ RNA_def_struct_sdna(srna, "Main");
+ RNA_def_struct_ui_text(srna, "Main Workspaces", "Collection of workspaces");
+
+ func = RNA_def_function(srna, "tag", "rna_Main_workspaces_tag");
+ parm = RNA_def_boolean(func, "value", 0, "Value", "");
+ RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+
+ prop = RNA_def_property(srna, "is_updated", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_boolean_funcs(prop, "rna_Main_workspaces_is_updated_get", NULL);
+}
+
+void RNA_def_main_lightprobes(BlenderRNA *brna, PropertyRNA *cprop)
+{
+ StructRNA *srna;
+ FunctionRNA *func;
+ PropertyRNA *parm;
+ PropertyRNA *prop;
+
+ RNA_def_property_srna(cprop, "BlendDataProbes");
+ srna = RNA_def_struct(brna, "BlendDataProbes", NULL);
+ RNA_def_struct_sdna(srna, "Main");
+ RNA_def_struct_ui_text(srna, "Main Light Probes", "Collection of light probes");
+
+ func = RNA_def_function(srna, "new", "rna_Main_lightprobe_new");
+ RNA_def_function_ui_description(func, "Add a new probe to the main database");
+ parm = RNA_def_string(func, "name", "Probe", 0, "", "New name for the data-block");
+ RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+ /* return type */
+ parm = RNA_def_pointer(func, "lightprobe", "LightProbe", "", "New light probe data-block");
+ RNA_def_function_return(func, parm);
+
+ func = RNA_def_function(srna, "remove", "rna_Main_ID_remove");
+ RNA_def_function_flag(func, FUNC_USE_REPORTS);
+ RNA_def_function_ui_description(func, "Remove a probe from the current blendfile");
+ parm = RNA_def_pointer(func, "lightprobe", "LightProbe", "", "Probe to remove");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
+ RNA_def_parameter_clear_flags(parm, PROP_THICK_WRAP, 0);
+ RNA_def_boolean(func, "do_unlink", true, "",
+ "Unlink all usages of this probe before deleting it "
+ "(WARNING: will also delete objects instancing that light probe data)");
+ RNA_def_boolean(func, "do_id_user", true, "",
+ "Decrement user counter of all datablocks used by this light probe");
+ RNA_def_boolean(func, "do_ui_user", true, "",
+ "Make sure interface does not reference this light probe");
+
+ func = RNA_def_function(srna, "tag", "rna_Main_lightprobes_tag");
+ parm = RNA_def_boolean(func, "value", 0, "Value", "");
+ RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+
+ prop = RNA_def_property(srna, "is_updated", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_boolean_funcs(prop, "rna_Main_lightprobes_is_updated_get", NULL);
+}
+
#endif
diff --git a/source/blender/makesrna/intern/rna_mask.c b/source/blender/makesrna/intern/rna_mask.c
index c266e0e7f31..564232c3dd4 100644
--- a/source/blender/makesrna/intern/rna_mask.c
+++ b/source/blender/makesrna/intern/rna_mask.c
@@ -56,9 +56,10 @@
#include "DNA_movieclip_types.h"
-#include "BKE_depsgraph.h"
#include "BKE_mask.h"
+#include "DEG_depsgraph.h"
+
#include "RNA_access.h"
#include "WM_api.h"
@@ -68,7 +69,7 @@ static void rna_Mask_update_data(Main *UNUSED(bmain), Scene *UNUSED(scene), Poin
Mask *mask = ptr->id.data;
WM_main_add_notifier(NC_MASK | ND_DATA, mask);
- DAG_id_tag_update( &mask->id, 0);
+ DEG_id_tag_update( &mask->id, 0);
}
static void rna_Mask_update_parent(Main *bmain, Scene *scene, PointerRNA *ptr)
@@ -448,7 +449,7 @@ static void rna_MaskLayer_spline_remove(ID *id, MaskLayer *mask_layer, ReportLis
RNA_POINTER_INVALIDATE(spline_ptr);
- DAG_id_tag_update(&mask->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&mask->id, OB_RECALC_DATA);
}
static void rna_Mask_start_frame_set(PointerRNA *ptr, int value)
@@ -522,7 +523,7 @@ static void rna_MaskSpline_points_add(ID *id, MaskSpline *spline, int count)
}
WM_main_add_notifier(NC_MASK | ND_DATA, mask);
- DAG_id_tag_update(&mask->id, 0);
+ DEG_id_tag_update(&mask->id, 0);
}
static void rna_MaskSpline_point_remove(ID *id, MaskSpline *spline, ReportList *reports, PointerRNA *point_ptr)
@@ -582,7 +583,7 @@ static void rna_MaskSpline_point_remove(ID *id, MaskSpline *spline, ReportList *
BKE_mask_layer_shape_changed_remove(layer, BKE_mask_layer_shape_spline_to_index(layer, spline) + point_index, 1);
WM_main_add_notifier(NC_MASK | ND_DATA, mask);
- DAG_id_tag_update(&mask->id, 0);
+ DEG_id_tag_update(&mask->id, 0);
RNA_POINTER_INVALIDATE(point_ptr);
}
diff --git a/source/blender/makesrna/intern/rna_material.c b/source/blender/makesrna/intern/rna_material.c
index 1965361b81b..440af0d0e8e 100644
--- a/source/blender/makesrna/intern/rna_material.c
+++ b/source/blender/makesrna/intern/rna_material.c
@@ -87,13 +87,15 @@ const EnumPropertyItem rna_enum_ramp_blend_items[] = {
#include "BKE_colorband.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_main.h"
#include "BKE_material.h"
#include "BKE_texture.h"
#include "BKE_node.h"
#include "BKE_paint.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#include "ED_node.h"
#include "ED_image.h"
#include "BKE_scene.h"
@@ -102,7 +104,7 @@ static void rna_Material_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Point
{
Material *ma = ptr->id.data;
- DAG_id_tag_update(&ma->id, 0);
+ DEG_id_tag_update(&ma->id, 0);
WM_main_add_notifier(NC_MATERIAL | ND_SHADING, ma);
}
@@ -120,7 +122,7 @@ static void rna_Material_draw_update(Main *UNUSED(bmain), Scene *UNUSED(scene),
{
Material *ma = ptr->id.data;
- DAG_id_tag_update(&ma->id, 0);
+ DEG_id_tag_update(&ma->id, 0);
WM_main_add_notifier(NC_MATERIAL | ND_SHADING_DRAW, ma);
}
@@ -214,7 +216,7 @@ static void rna_Material_active_paint_texture_index_update(Main *bmain, Scene *s
}
}
- DAG_id_tag_update(&ma->id, 0);
+ DEG_id_tag_update(&ma->id, 0);
WM_main_add_notifier(NC_MATERIAL | ND_SHADING, ma);
}
@@ -339,11 +341,13 @@ static void rna_Material_use_specular_ramp_set(PointerRNA *ptr, int value)
static void rna_Material_use_nodes_update(bContext *C, PointerRNA *ptr)
{
Material *ma = (Material *)ptr->data;
+ Main *bmain = CTX_data_main(C);
if (ma->use_nodes && ma->nodetree == NULL)
ED_node_shader_default(C, &ma->id);
-
- rna_Material_draw_update(CTX_data_main(C), CTX_data_scene(C), ptr);
+
+ DEG_relations_tag_update(bmain);
+ rna_Material_draw_update(bmain, CTX_data_scene(C), ptr);
}
static const EnumPropertyItem *rna_Material_texture_coordinates_itemf(bContext *UNUSED(C), PointerRNA *ptr,
@@ -428,7 +432,7 @@ void rna_mtex_texture_slots_clear(ID *self_id, struct bContext *C, ReportList *r
id_us_min((ID *)mtex_ar[index]->tex);
MEM_freeN(mtex_ar[index]);
mtex_ar[index] = NULL;
- DAG_id_tag_update(self_id, 0);
+ DEG_id_tag_update(self_id, 0);
}
/* for redraw only */
@@ -1805,6 +1809,24 @@ void RNA_def_material(BlenderRNA *brna)
{0, NULL, 0, NULL, NULL}
};
+ static EnumPropertyItem prop_eevee_blend_items[] = {
+ {MA_BM_SOLID, "OPAQUE", 0, "Opaque", "Render surface without transparency"},
+ {MA_BM_ADD, "ADD", 0, "Additive", "Render surface and blend the result with additive blending"},
+ {MA_BM_MULTIPLY, "MULTIPLY", 0, "Multiply", "Render surface and blend the result with multiplicative blending"},
+ {MA_BM_CLIP, "CLIP", 0, "Alpha Clip", "Use the alpha threshold to clip the visibility (binary visibility)"},
+ {MA_BM_HASHED, "HASHED", 0, "Alpha Hashed", "Use noise to dither the binary visibility (works well with multi-samples)"},
+ {MA_BM_BLEND, "BLEND", 0, "Alpha Blend", "Render polygon transparent, depending on alpha channel of the texture"},
+ {0, NULL, 0, NULL, NULL}
+ };
+
+ static EnumPropertyItem prop_eevee_blend_shadow_items[] = {
+ {MA_BS_NONE, "NONE", 0, "None", "Material will cast no shadow"},
+ {MA_BS_SOLID, "OPAQUE", 0, "Opaque", "Material will cast shadows without transparency"},
+ {MA_BS_CLIP, "CLIP", 0, "Clip", "Use the alpha threshold to clip the visibility (binary visibility)"},
+ {MA_BS_HASHED, "HASHED", 0, "Hashed", "Use noise to dither the binary visibility and use filtering to reduce the noise"},
+ {0, NULL, 0, NULL, NULL}
+ };
+
srna = RNA_def_struct(brna, "Material", "ID");
RNA_def_struct_ui_text(srna, "Material",
"Material data-block to define the appearance of geometric objects for rendering");
@@ -1827,7 +1849,52 @@ void RNA_def_material(BlenderRNA *brna)
RNA_def_property_enum_items(prop, transparency_items);
RNA_def_property_ui_text(prop, "Transparency Method", "Method to use for rendering transparency");
RNA_def_property_update(prop, 0, "rna_Material_update");
-
+
+ /* Blending (only Eevee for now) */
+ prop = RNA_def_property(srna, "blend_method", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_items(prop, prop_eevee_blend_items);
+ RNA_def_property_ui_text(prop, "Blend Mode", "Blend Mode for Transparent Faces");
+ RNA_def_property_update(prop, 0, "rna_Material_draw_update");
+
+ prop = RNA_def_property(srna, "transparent_shadow_method", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "blend_shadow");
+ RNA_def_property_enum_items(prop, prop_eevee_blend_shadow_items);
+ RNA_def_property_ui_text(prop, "Transparent Shadow", "Shadow method for transparent material");
+ RNA_def_property_update(prop, 0, "rna_Material_draw_update");
+
+ prop = RNA_def_property(srna, "alpha_threshold", PROP_FLOAT, PROP_FACTOR);
+ RNA_def_property_range(prop, 0, 1);
+ RNA_def_property_ui_text(prop, "Clip Threshold", "A pixel is rendered only if its alpha value is above this threshold");
+ RNA_def_property_update(prop, 0, "rna_Material_draw_update");
+
+ prop = RNA_def_property(srna, "transparent_hide_backside", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "blend_flag", MA_BL_HIDE_BACKSIDE);
+ RNA_def_property_ui_text(prop, "Hide Backside", "Limit transparency to a single layer "
+ "(avoids transparency sorting problems)");
+ RNA_def_property_update(prop, 0, "rna_Material_draw_update");
+
+ prop = RNA_def_property(srna, "use_screen_refraction", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "blend_flag", MA_BL_SS_REFRACTION);
+ RNA_def_property_ui_text(prop, "Screen Space Refraction", "Use raytraced screen space refractions");
+ RNA_def_property_update(prop, 0, "rna_Material_draw_update");
+
+ prop = RNA_def_property(srna, "use_screen_subsurface", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "blend_flag", MA_BL_SS_SUBSURFACE);
+ RNA_def_property_ui_text(prop, "Screen Space Subsurface Scattering", "Use post process subsurface scattering");
+ RNA_def_property_update(prop, 0, "rna_Material_draw_update");
+
+ prop = RNA_def_property(srna, "use_sss_translucency", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "blend_flag", MA_BL_TRANSLUCENCY);
+ RNA_def_property_ui_text(prop, "Subsurface Translucency", "Add translucency effect to subsurface");
+ RNA_def_property_update(prop, 0, "rna_Material_draw_update");
+
+ prop = RNA_def_property(srna, "refraction_depth", PROP_FLOAT, PROP_DISTANCE);
+ RNA_def_property_float_sdna(prop, NULL, "refract_depth");
+ RNA_def_property_range(prop, 0.0f, FLT_MAX);
+ RNA_def_property_ui_text(prop, "Refraction Depth", "Approximate the thickness of the object to compute two refraction "
+ "event (0 is disabled)");
+ RNA_def_property_update(prop, 0, "rna_Material_draw_update");
+
/* For Preview Render */
prop = RNA_def_property(srna, "preview_render_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "pr_type");
@@ -1888,6 +1955,12 @@ void RNA_def_material(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Light Group", "Limit lighting to lamps in this Group");
RNA_def_property_update(prop, 0, "rna_Material_update");
+ prop = RNA_def_property(srna, "edit_image", PROP_POINTER, PROP_NONE);
+ RNA_def_property_pointer_sdna(prop, NULL, "edit_image");
+ RNA_def_property_struct_type(prop, "Image");
+ RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_ui_text(prop, "Edit Image", "Image to use for UV-mapping");
+
prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_UNSIGNED);
RNA_def_property_int_sdna(prop, NULL, "index");
RNA_def_property_ui_text(prop, "Pass Index", "Index number for the \"Material Index\" render pass");
@@ -1965,18 +2038,6 @@ void RNA_def_material(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Shadow Type", "How to draw shadows");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop = RNA_def_property(srna, "use_face_texture", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_FACETEXTURE);
- RNA_def_property_ui_text(prop, "Face Textures",
- "Replace the object's base color with color from UV map image textures");
- RNA_def_property_update(prop, 0, "rna_Material_update");
-
- prop = RNA_def_property(srna, "use_face_texture_alpha", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_FACETEXTURE_ALPHA);
- RNA_def_property_ui_text(prop, "Face Textures Alpha",
- "Replace the object's base alpha value with alpha from UV map image textures");
- RNA_def_property_update(prop, 0, "rna_Material_update");
-
prop = RNA_def_property(srna, "use_cast_shadows", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode2", MA_CASTSHADOW);
RNA_def_property_ui_text(prop, "Cast Shadows",
diff --git a/source/blender/makesrna/intern/rna_mesh.c b/source/blender/makesrna/intern/rna_mesh.c
index e115485b192..79a9d072ad2 100644
--- a/source/blender/makesrna/intern/rna_mesh.c
+++ b/source/blender/makesrna/intern/rna_mesh.c
@@ -68,11 +68,12 @@ const EnumPropertyItem rna_enum_mesh_delimit_mode_items[] = {
#include "BLI_math.h"
#include "BKE_customdata.h"
-#include "BKE_depsgraph.h"
#include "BKE_main.h"
#include "BKE_mesh.h"
#include "BKE_report.h"
+#include "DEG_depsgraph.h"
+
#include "ED_mesh.h" /* XXX Bad level call */
#include "WM_api.h"
@@ -186,12 +187,10 @@ static void rna_MeshEdgeLayer_name_set(PointerRNA *ptr, const char *value)
rna_cd_layer_name_set(rna_mesh_edata(ptr), (CustomDataLayer *)ptr->data, value);
}
#endif
-#if 0
static void rna_MeshPolyLayer_name_set(PointerRNA *ptr, const char *value)
{
rna_cd_layer_name_set(rna_mesh_pdata(ptr), (CustomDataLayer *)ptr->data, value);
}
-#endif
static void rna_MeshLoopLayer_name_set(PointerRNA *ptr, const char *value)
{
rna_cd_layer_name_set(rna_mesh_ldata(ptr), (CustomDataLayer *)ptr->data, value);
@@ -224,7 +223,7 @@ static void rna_Mesh_update_data(Main *UNUSED(bmain), Scene *UNUSED(scene), Poin
/* cheating way for importers to avoid slow updates */
if (id->us > 0) {
- DAG_id_tag_update(id, 0);
+ DEG_id_tag_update(id, 0);
WM_main_add_notifier(NC_GEOM | ND_DATA, id);
}
}
@@ -238,6 +237,20 @@ static void rna_Mesh_update_data_edit_color(Main *bmain, Scene *scene, PointerRN
}
}
+static void rna_Mesh_update_data_edit_weight(Main *bmain, Scene *scene, PointerRNA *ptr)
+{
+ BKE_mesh_batch_cache_dirty(rna_mesh(ptr), BKE_MESH_BATCH_DIRTY_ALL);
+
+ rna_Mesh_update_data(bmain, scene, ptr);
+}
+
+
+static void rna_Mesh_update_data_edit_active_color(Main *bmain, Scene *scene, PointerRNA *ptr)
+{
+ BKE_mesh_batch_cache_dirty(rna_mesh(ptr), BKE_MESH_BATCH_DIRTY_ALL);
+
+ rna_Mesh_update_data(bmain, scene, ptr);
+}
static void rna_Mesh_update_select(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
ID *id = ptr->id.data;
@@ -263,6 +276,9 @@ static void rna_Mesh_update_vertmask(Main *bmain, Scene *scene, PointerRNA *ptr)
if ((me->editflag & ME_EDIT_PAINT_VERT_SEL) && (me->editflag & ME_EDIT_PAINT_FACE_SEL)) {
me->editflag &= ~ME_EDIT_PAINT_FACE_SEL;
}
+
+ BKE_mesh_batch_cache_dirty(me, BKE_MESH_BATCH_DIRTY_ALL);
+
rna_Mesh_update_draw(bmain, scene, ptr);
}
@@ -272,6 +288,9 @@ static void rna_Mesh_update_facemask(Main *bmain, Scene *scene, PointerRNA *ptr)
if ((me->editflag & ME_EDIT_PAINT_VERT_SEL) && (me->editflag & ME_EDIT_PAINT_FACE_SEL)) {
me->editflag &= ~ME_EDIT_PAINT_VERT_SEL;
}
+
+ BKE_mesh_batch_cache_dirty(me, BKE_MESH_BATCH_DIRTY_ALL);
+
rna_Mesh_update_draw(bmain, scene, ptr);
}
@@ -758,13 +777,6 @@ static void rna_CustomDataLayer_active_set(PointerRNA *ptr, CustomData *data, in
if (render) CustomData_set_layer_render(data, type, n);
else CustomData_set_layer_active(data, type, n);
- /* sync loop layer */
- if (type == CD_MTEXPOLY) {
- CustomData *ldata = rna_mesh_ldata(ptr);
- if (render) CustomData_set_layer_render(ldata, CD_MLOOPUV, n);
- else CustomData_set_layer_active(ldata, CD_MLOOPUV, n);
- }
-
BKE_mesh_update_customdata_pointers(me, true);
}
@@ -869,6 +881,36 @@ static int rna_MeshUVLoopLayer_data_length(PointerRNA *ptr)
return (me->edit_btmesh) ? 0 : me->totloop;
}
+static int rna_MeshUVLoopLayer_active_render_get(PointerRNA *ptr)
+{
+ return rna_CustomDataLayer_active_get(ptr, rna_mesh_ldata(ptr), CD_MLOOPUV, 1);
+}
+
+static int rna_MeshUVLoopLayer_active_get(PointerRNA *ptr)
+{
+ return rna_CustomDataLayer_active_get(ptr, rna_mesh_ldata(ptr), CD_MLOOPUV, 0);
+}
+
+static int rna_MeshUVLoopLayer_clone_get(PointerRNA *ptr)
+{
+ return rna_CustomDataLayer_clone_get(ptr, rna_mesh_ldata(ptr), CD_MLOOPUV);
+}
+
+static void rna_MeshUVLoopLayer_active_render_set(PointerRNA *ptr, int value)
+{
+ rna_CustomDataLayer_active_set(ptr, rna_mesh_ldata(ptr), value, CD_MLOOPUV, 1);
+}
+
+static void rna_MeshUVLoopLayer_active_set(PointerRNA *ptr, int value)
+{
+ rna_CustomDataLayer_active_set(ptr, rna_mesh_ldata(ptr), value, CD_MLOOPUV, 0);
+}
+
+static void rna_MeshUVLoopLayer_clone_set(PointerRNA *ptr, int value)
+{
+ rna_CustomDataLayer_clone_set(ptr, rna_mesh_ldata(ptr), value, CD_MLOOPUV);
+}
+
/* face uv_textures */
DEFINE_CUSTOMDATA_LAYER_COLLECTION(tessface_uv_texture, fdata, CD_MTFACE)
@@ -920,57 +962,6 @@ static void rna_MeshTextureFaceLayer_clone_set(PointerRNA *ptr, int value)
rna_CustomDataLayer_clone_set(ptr, rna_mesh_fdata(ptr), value, CD_MTFACE);
}
-/* poly uv_textures */
-
-DEFINE_CUSTOMDATA_LAYER_COLLECTION(uv_texture, pdata, CD_MTEXPOLY)
-DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(uv_texture, pdata, CD_MTEXPOLY, active, MeshTexturePolyLayer)
-DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(uv_texture, pdata, CD_MTEXPOLY, clone, MeshTexturePolyLayer)
-DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(uv_texture, pdata, CD_MTEXPOLY, stencil, MeshTexturePolyLayer)
-DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(uv_texture, pdata, CD_MTEXPOLY, render, MeshTexturePolyLayer)
-
-static void rna_MeshTexturePolyLayer_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
-{
- Mesh *me = rna_mesh(ptr);
- CustomDataLayer *layer = (CustomDataLayer *)ptr->data;
- rna_iterator_array_begin(iter, layer->data, sizeof(MTexPoly), (me->edit_btmesh) ? 0 : me->totpoly, 0, NULL);
-}
-
-static int rna_MeshTexturePolyLayer_data_length(PointerRNA *ptr)
-{
- Mesh *me = rna_mesh(ptr);
- return (me->edit_btmesh) ? 0 : me->totpoly;
-}
-
-static int rna_MeshTexturePolyLayer_active_render_get(PointerRNA *ptr)
-{
- return rna_CustomDataLayer_active_get(ptr, rna_mesh_pdata(ptr), CD_MTEXPOLY, 1);
-}
-
-static int rna_MeshTexturePolyLayer_active_get(PointerRNA *ptr)
-{
- return rna_CustomDataLayer_active_get(ptr, rna_mesh_pdata(ptr), CD_MTEXPOLY, 0);
-}
-
-static int rna_MeshTexturePolyLayer_clone_get(PointerRNA *ptr)
-{
- return rna_CustomDataLayer_clone_get(ptr, rna_mesh_pdata(ptr), CD_MTEXPOLY);
-}
-
-static void rna_MeshTexturePolyLayer_active_render_set(PointerRNA *ptr, int value)
-{
- rna_CustomDataLayer_active_set(ptr, rna_mesh_pdata(ptr), value, CD_MTEXPOLY, 1);
-}
-
-static void rna_MeshTexturePolyLayer_active_set(PointerRNA *ptr, int value)
-{
- rna_CustomDataLayer_active_set(ptr, rna_mesh_pdata(ptr), value, CD_MTEXPOLY, 0);
-}
-
-static void rna_MeshTexturePolyLayer_clone_set(PointerRNA *ptr, int value)
-{
- rna_CustomDataLayer_clone_set(ptr, rna_mesh_pdata(ptr), value, CD_MTEXPOLY);
-}
-
/* vertex_color_layers */
DEFINE_CUSTOMDATA_LAYER_COLLECTION(tessface_vertex_color, fdata, CD_MCOL)
@@ -1194,42 +1185,75 @@ static int rna_MeshPaintMaskLayer_data_length(PointerRNA *ptr)
/* End paint mask */
-static void rna_TexturePoly_image_set(PointerRNA *ptr, PointerRNA value)
+/* Face maps */
+
+DEFINE_CUSTOMDATA_LAYER_COLLECTION(face_map, pdata, CD_FACEMAP)
+DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(face_map, pdata, CD_FACEMAP, active, MeshFaceMapLayer)
+
+static char *rna_MeshFaceMapLayer_path(PointerRNA *ptr)
{
- MTexPoly *tf = (MTexPoly *)ptr->data;
- ID *id = value.data;
+ CustomDataLayer *cdl = ptr->data;
+ char name_esc[sizeof(cdl->name) * 2];
+ BLI_strescape(name_esc, cdl->name, sizeof(name_esc));
+ return BLI_sprintfN("face_maps[\"%s\"]", name_esc);
+}
+
+static void rna_MeshFaceMapLayer_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
+{
+ Mesh *me = rna_mesh(ptr);
+ CustomDataLayer *layer = (CustomDataLayer *)ptr->data;
+ rna_iterator_array_begin(iter, layer->data, sizeof(int), me->totpoly, 0, NULL);
+}
+
+static int rna_MeshFaceMapLayer_data_length(PointerRNA *ptr)
+{
+ Mesh *me = rna_mesh(ptr);
+ return me->totpoly;
+}
- if (id) {
- /* special exception here, individual faces don't count
- * as reference, but we do ensure the refcount is not zero */
- if (id->us == 0)
- id_us_plus(id);
- else
- id_lib_extern(id);
+static PointerRNA rna_Mesh_face_map_new(struct Mesh *me, ReportList *reports, const char *name)
+{
+ if (BKE_mesh_ensure_facemap_customdata(me) == false) {
+ BKE_report(reports, RPT_ERROR, "Currently only single face-map layers are supported");
+ return PointerRNA_NULL;
}
- tf->tpage = (struct Image *)id;
+ CustomData *pdata = rna_mesh_pdata_helper(me);
+
+ int index = CustomData_get_layer_index(pdata, CD_FACEMAP);
+ BLI_assert(index != -1);
+ CustomDataLayer *cdl = &pdata->layers[index];
+ rna_cd_layer_name_set(pdata, cdl, name);
+
+ PointerRNA ptr;
+ RNA_pointer_create(&me->id, &RNA_MeshFaceMapLayer, cdl, &ptr);
+ return ptr;
}
-/* while this is supposed to be readonly,
- * keep it to support importers that only make tessfaces */
-static void rna_TextureFace_image_set(PointerRNA *ptr, PointerRNA value)
-{
- MTFace *tf = (MTFace *)ptr->data;
- ID *id = value.data;
-
- if (id) {
- /* special exception here, individual faces don't count
- * as reference, but we do ensure the refcount is not zero */
- if (id->us == 0)
- id_us_plus(id);
- else
- id_lib_extern(id);
+static void rna_Mesh_face_map_remove(struct Mesh *me, ReportList *reports, struct CustomDataLayer *layer)
+{
+ /* just for sanity check */
+ {
+ CustomData *pdata = rna_mesh_pdata_helper(me);
+ int index = CustomData_get_layer_index(pdata, CD_FACEMAP);
+ if (index != -1) {
+ CustomDataLayer *layer_test = &pdata->layers[index];
+ if (layer != layer_test) {
+ /* don't show name, its likely freed memory */
+ BKE_report(reports, RPT_ERROR, "FaceMap not in mesh");
+ return;
+ }
+ }
}
- tf->tpage = (struct Image *)id;
+ if (BKE_mesh_clear_facemap_customdata(me) == false) {
+ BKE_reportf(reports, RPT_ERROR, "Error removing face-map");
+ }
}
+/* End face maps */
+
+
static int rna_MeshTessFace_verts_get_length(PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION])
{
MFace *face = (MFace *)ptr->data;
@@ -1380,14 +1404,6 @@ static char *rna_MeshTextureFaceLayer_path(PointerRNA *ptr)
return BLI_sprintfN("tessface_uv_textures[\"%s\"]", name_esc);
}
-static char *rna_MeshTexturePolyLayer_path(PointerRNA *ptr)
-{
- CustomDataLayer *cdl = ptr->data;
- char name_esc[sizeof(cdl->name) * 2];
- BLI_strescape(name_esc, cdl->name, sizeof(name_esc));
- return BLI_sprintfN("uv_textures[\"%s\"]", name_esc);
-}
-
static char *rna_VertCustomData_data_path(PointerRNA *ptr, const char *collection, int type)
{
CustomDataLayer *cdl;
@@ -1483,11 +1499,6 @@ static char *rna_MeshTextureFace_path(PointerRNA *ptr)
return rna_FaceCustomData_data_path(ptr, "tessface_uv_textures", CD_MTFACE);
}
-static char *rna_MeshTexturePoly_path(PointerRNA *ptr)
-{
- return rna_PolyCustomData_data_path(ptr, "uv_textures", CD_MTEXPOLY);
-}
-
static char *rna_MeshColorLayer_path(PointerRNA *ptr)
{
CustomDataLayer *cdl = ptr->data;
@@ -1675,6 +1686,12 @@ void rna_MeshStringProperty_s_set(PointerRNA *ptr, const char *value)
MStringProperty *ms = (MStringProperty *)ptr->data;
BLI_strncpy(ms->s, value, sizeof(ms->s));
}
+
+static char *rna_MeshFaceMap_path(PointerRNA *ptr)
+{
+ return rna_PolyCustomData_data_path(ptr, "face_maps", CD_FACEMAP);
+}
+
/***************************************/
static int rna_Mesh_tot_vert_get(PointerRNA *ptr)
@@ -1768,23 +1785,23 @@ DEFINE_CUSTOMDATA_PROPERTY_API(polygon, int, CD_PROP_INT, pdata, totpoly, MeshPo
DEFINE_CUSTOMDATA_PROPERTY_API(polygon, string, CD_PROP_STR, pdata, totpoly, MeshPolygonStringPropertyLayer)
#undef DEFINE_CUSTOMDATA_PROPERTY_API
-static PointerRNA rna_Mesh_uv_texture_new(struct Mesh *me, const char *name)
+static PointerRNA rna_Mesh_uv_layers_new(struct Mesh *me, const char *name)
{
PointerRNA ptr;
- CustomData *pdata;
+ CustomData *ldata;
CustomDataLayer *cdl = NULL;
int index = ED_mesh_uv_texture_add(me, name, false);
if (index != -1) {
- pdata = rna_mesh_pdata_helper(me);
- cdl = &pdata->layers[CustomData_get_layer_index_n(pdata, CD_MTEXPOLY, index)];
+ ldata = rna_mesh_ldata_helper(me);
+ cdl = &ldata->layers[CustomData_get_layer_index_n(ldata, CD_MLOOPUV, index)];
}
- RNA_pointer_create(&me->id, &RNA_MeshTexturePolyLayer, cdl, &ptr);
+ RNA_pointer_create(&me->id, &RNA_MeshUVLoopLayer, cdl, &ptr);
return ptr;
}
-static void rna_Mesh_uv_texture_layers_remove(struct Mesh *me, ReportList *reports, CustomDataLayer *layer)
+static void rna_Mesh_uv_layers_remove(struct Mesh *me, ReportList *reports, CustomDataLayer *layer)
{
if (ED_mesh_uv_texture_remove_named(me, layer->name) == false) {
BKE_reportf(reports, RPT_ERROR, "Texture layer '%s' not found", layer->name);
@@ -1859,14 +1876,14 @@ static void UNUSED_FUNCTION(rna_mesh_unused)(void)
(void)rna_Mesh_uv_layer_render_index_get;
(void)rna_Mesh_uv_layer_render_index_set;
(void)rna_Mesh_uv_layer_render_set;
- (void)rna_Mesh_uv_texture_render_get;
- (void)rna_Mesh_uv_texture_render_index_get;
- (void)rna_Mesh_uv_texture_render_index_set;
- (void)rna_Mesh_uv_texture_render_set;
(void)rna_Mesh_vertex_color_render_get;
(void)rna_Mesh_vertex_color_render_index_get;
(void)rna_Mesh_vertex_color_render_index_set;
(void)rna_Mesh_vertex_color_render_set;
+ (void)rna_Mesh_face_map_index_range;
+ (void)rna_Mesh_face_map_active_index_set;
+ (void)rna_Mesh_face_map_active_index_get;
+ (void)rna_Mesh_face_map_active_set;
/* end unused function block */
}
@@ -1894,7 +1911,7 @@ static void rna_def_mvert_group(BlenderRNA *brna)
prop = RNA_def_property(srna, "weight", PROP_FLOAT, PROP_NONE);
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Weight", "Vertex Weight");
- RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
+ RNA_def_property_update(prop, 0, "rna_Mesh_update_data_edit_weight");
}
static void rna_def_mvert(BlenderRNA *brna)
@@ -2264,6 +2281,24 @@ static void rna_def_mloopuv(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Name", "Name of UV map");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
+ prop = RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(prop, "rna_MeshUVLoopLayer_active_get", "rna_MeshUVLoopLayer_active_set");
+ RNA_def_property_ui_text(prop, "Active", "Set the map as active for display and editing");
+ RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
+
+ prop = RNA_def_property(srna, "active_render", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "active_rnd", 0);
+ RNA_def_property_boolean_funcs(prop, "rna_MeshUVLoopLayer_active_render_get",
+ "rna_MeshUVLoopLayer_active_render_set");
+ RNA_def_property_ui_text(prop, "Active Render", "Set the map as active for rendering");
+ RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
+
+ prop = RNA_def_property(srna, "active_clone", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "active_clone", 0);
+ RNA_def_property_boolean_funcs(prop, "rna_MeshUVLoopLayer_clone_get", "rna_MeshUVLoopLayer_clone_set");
+ RNA_def_property_ui_text(prop, "Active Clone", "Set the map as active for cloning");
+ RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
+
srna = RNA_def_struct(brna, "MeshUVLoop", NULL);
RNA_def_struct_sdna(srna, "MLoopUV");
RNA_def_struct_path_func(srna, "rna_MeshUVLoop_path");
@@ -2333,13 +2368,6 @@ static void rna_def_mtface(BlenderRNA *brna)
RNA_def_struct_path_func(srna, "rna_MeshTextureFace_path");
RNA_def_struct_ui_icon(srna, ICON_FACESEL_HLT);
- prop = RNA_def_property(srna, "image", PROP_POINTER, PROP_NONE);
- RNA_def_property_pointer_sdna(prop, NULL, "tpage");
- RNA_def_property_pointer_funcs(prop, NULL, "rna_TextureFace_image_set", NULL, NULL);
- RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_ui_text(prop, "Image", "");
- RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
-
/* these are for editing only, access at loops now */
#if 0
prop = RNA_def_property(srna, "select_uv", PROP_BOOLEAN, PROP_NONE);
@@ -2394,84 +2422,6 @@ static void rna_def_mtface(BlenderRNA *brna)
}
-static void rna_def_mtexpoly(BlenderRNA *brna)
-{
- StructRNA *srna;
- PropertyRNA *prop;
-#if 0 /* BMESH_TODO: needed later when do another todo */
- int uv_dim[] = {4, 2};
-#endif
-
- srna = RNA_def_struct(brna, "MeshTexturePolyLayer", NULL);
- RNA_def_struct_ui_text(srna, "Mesh UV Map", "UV map with assigned image textures in a Mesh data-block");
- RNA_def_struct_sdna(srna, "CustomDataLayer");
- RNA_def_struct_path_func(srna, "rna_MeshTexturePolyLayer_path");
- RNA_def_struct_ui_icon(srna, ICON_GROUP_UVS);
-
- prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
- RNA_def_struct_name_property(srna, prop);
- RNA_def_property_string_funcs(prop, NULL, NULL, "rna_MeshUVLayer_name_set");
- RNA_def_property_ui_text(prop, "Name", "Name of UV map");
- RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
-
- prop = RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_funcs(prop, "rna_MeshTexturePolyLayer_active_get", "rna_MeshTexturePolyLayer_active_set");
- RNA_def_property_ui_text(prop, "Active", "Set the map as active for display and editing");
- RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
-
- prop = RNA_def_property(srna, "active_render", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "active_rnd", 0);
- RNA_def_property_boolean_funcs(prop, "rna_MeshTexturePolyLayer_active_render_get",
- "rna_MeshTexturePolyLayer_active_render_set");
- RNA_def_property_ui_text(prop, "Active Render", "Set the map as active for rendering");
- RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
-
- prop = RNA_def_property(srna, "active_clone", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "active_clone", 0);
- RNA_def_property_boolean_funcs(prop, "rna_MeshTexturePolyLayer_clone_get", "rna_MeshTexturePolyLayer_clone_set");
- RNA_def_property_ui_text(prop, "Active Clone", "Set the map as active for cloning");
- RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
-
- prop = RNA_def_property(srna, "data", PROP_COLLECTION, PROP_NONE);
- RNA_def_property_struct_type(prop, "MeshTexturePoly");
- RNA_def_property_ui_text(prop, "Data", "");
- RNA_def_property_collection_funcs(prop, "rna_MeshTexturePolyLayer_data_begin", "rna_iterator_array_next",
- "rna_iterator_array_end", "rna_iterator_array_get",
- "rna_MeshTexturePolyLayer_data_length", NULL, NULL, NULL);
-
- srna = RNA_def_struct(brna, "MeshTexturePoly", NULL);
- RNA_def_struct_sdna(srna, "MTexPoly");
- RNA_def_struct_ui_text(srna, "Mesh UV Map Face", "UV map and image texture for a face");
- RNA_def_struct_path_func(srna, "rna_MeshTexturePoly_path");
- RNA_def_struct_ui_icon(srna, ICON_FACESEL_HLT);
-
- prop = RNA_def_property(srna, "image", PROP_POINTER, PROP_NONE);
- RNA_def_property_pointer_sdna(prop, NULL, "tpage");
- RNA_def_property_pointer_funcs(prop, NULL, "rna_TexturePoly_image_set", NULL, NULL);
- RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_ui_text(prop, "Image", "");
- RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
-
-#if 0 /* moved to MeshUVLoopLayer */
- prop = RNA_def_property(srna, "select_uv", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", TF_SEL1);
- RNA_def_property_array(prop, 4);
- RNA_def_property_ui_text(prop, "UV Selected", "");
- RNA_def_property_update(prop, 0, "rna_Mesh_update_select");
-
- prop = RNA_def_property(srna, "pin_uv", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "unwrap", TF_PIN1);
- RNA_def_property_array(prop, 4);
- RNA_def_property_ui_text(prop, "UV Pinned", "");
- RNA_def_property_update(prop, 0, "rna_Mesh_update_select");
-
- prop = RNA_def_property(srna, "uv_raw", PROP_FLOAT, PROP_NONE);
- RNA_def_property_multi_array(prop, 2, uv_dim);
- RNA_def_property_float_sdna(prop, NULL, "uv");
- RNA_def_property_ui_text(prop, "UV", "Fixed size UV coordinates array");
-#endif
-}
-
static void rna_def_mcol(BlenderRNA *brna)
{
StructRNA *srna;
@@ -2938,13 +2888,13 @@ static void rna_def_loop_colors(BlenderRNA *brna, PropertyRNA *cprop)
"rna_Mesh_vertex_color_active_set", NULL, NULL);
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_NEVER_UNLINK);
RNA_def_property_ui_text(prop, "Active Vertex Color Layer", "Active vertex color layer");
- RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
+ RNA_def_property_update(prop, 0, "rna_Mesh_update_data_edit_active_color");
prop = RNA_def_property(srna, "active_index", PROP_INT, PROP_UNSIGNED);
RNA_def_property_int_funcs(prop, "rna_Mesh_vertex_color_active_index_get",
"rna_Mesh_vertex_color_active_index_set", "rna_Mesh_vertex_color_index_range");
RNA_def_property_ui_text(prop, "Active Vertex Color Index", "Active vertex color index");
- RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
+ RNA_def_property_update(prop, 0, "rna_Mesh_update_data_edit_active_color");
}
static void rna_def_uv_layers(BlenderRNA *brna, PropertyRNA *cprop)
@@ -2952,14 +2902,27 @@ static void rna_def_uv_layers(BlenderRNA *brna, PropertyRNA *cprop)
StructRNA *srna;
PropertyRNA *prop;
- /* FunctionRNA *func; */
- /* PropertyRNA *parm; */
+ FunctionRNA *func;
+ PropertyRNA *parm;
RNA_def_property_srna(cprop, "UVLoopLayers");
srna = RNA_def_struct(brna, "UVLoopLayers", NULL);
RNA_def_struct_sdna(srna, "Mesh");
RNA_def_struct_ui_text(srna, "UV Loop Layers", "Collection of uv loop layers");
+ func = RNA_def_function(srna, "new", "rna_Mesh_uv_layers_new");
+ RNA_def_function_ui_description(func, "Add a UV map layer to Mesh");
+ RNA_def_string(func, "name", "UVMap", 0, "", "UV map name");
+ parm = RNA_def_pointer(func, "layer", "MeshUVLoopLayer", "", "The newly created layer");
+ RNA_def_parameter_flags(parm, 0, PARM_RNAPTR);
+ RNA_def_function_return(func, parm);
+
+ func = RNA_def_function(srna, "remove", "rna_Mesh_uv_layers_remove");
+ RNA_def_function_ui_description(func, "Remove a vertex color layer");
+ RNA_def_function_flag(func, FUNC_USE_REPORTS);
+ parm = RNA_def_pointer(func, "layer", "MeshUVLoopLayer", "", "The layer to remove");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
+
prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "MeshUVLoopLayer");
RNA_def_property_pointer_funcs(prop, "rna_Mesh_uv_layer_active_get",
@@ -3124,7 +3087,6 @@ static void rna_def_tessface_uv_textures(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_parameter_flags(parm, 0, PARM_RNAPTR);
RNA_def_function_return(func, parm);
-
prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "MeshTextureFaceLayer");
RNA_def_property_pointer_funcs(prop, "rna_Mesh_tessface_uv_texture_active_get",
@@ -3134,49 +3096,7 @@ static void rna_def_tessface_uv_textures(BlenderRNA *brna, PropertyRNA *cprop)
prop = RNA_def_property(srna, "active_index", PROP_INT, PROP_UNSIGNED);
RNA_def_property_int_funcs(prop, "rna_Mesh_tessface_uv_texture_active_index_get",
- "rna_Mesh_tessface_uv_texture_active_index_set", "rna_Mesh_uv_texture_index_range");
- RNA_def_property_ui_text(prop, "Active UV Map Index", "Active UV Map index");
- RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
-}
-
-
-static void rna_def_uv_textures(BlenderRNA *brna, PropertyRNA *cprop)
-{
- StructRNA *srna;
- PropertyRNA *prop;
-
- FunctionRNA *func;
- PropertyRNA *parm;
-
- RNA_def_property_srna(cprop, "UVTextures");
- srna = RNA_def_struct(brna, "UVTextures", NULL);
- RNA_def_struct_sdna(srna, "Mesh");
- RNA_def_struct_ui_text(srna, "UV Maps", "Collection of UV maps");
-
- func = RNA_def_function(srna, "new", "rna_Mesh_uv_texture_new");
- RNA_def_function_ui_description(func, "Add a UV map layer to Mesh");
- RNA_def_string(func, "name", "UVMap", 0, "", "UV map name");
- parm = RNA_def_pointer(func, "layer", "MeshTexturePolyLayer", "", "The newly created layer");
- RNA_def_parameter_flags(parm, 0, PARM_RNAPTR);
- RNA_def_function_return(func, parm);
-
- func = RNA_def_function(srna, "remove", "rna_Mesh_uv_texture_layers_remove");
- RNA_def_function_ui_description(func, "Remove a vertex color layer");
- RNA_def_function_flag(func, FUNC_USE_REPORTS);
- parm = RNA_def_pointer(func, "layer", "MeshTexturePolyLayer", "", "The layer to remove");
- RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
-
- prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
- RNA_def_property_struct_type(prop, "MeshTexturePolyLayer");
- RNA_def_property_pointer_funcs(prop, "rna_Mesh_uv_texture_active_get",
- "rna_Mesh_uv_texture_active_set", NULL, NULL);
- RNA_def_property_flag(prop, PROP_EDITABLE | PROP_NEVER_UNLINK);
- RNA_def_property_ui_text(prop, "Active UV Map", "Active UV Map");
- RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
-
- prop = RNA_def_property(srna, "active_index", PROP_INT, PROP_UNSIGNED);
- RNA_def_property_int_funcs(prop, "rna_Mesh_uv_texture_active_index_get",
- "rna_Mesh_uv_texture_active_index_set", "rna_Mesh_uv_texture_index_range");
+ "rna_Mesh_tessface_uv_texture_active_index_set", "rna_Mesh_uv_layer_index_range");
RNA_def_property_ui_text(prop, "Active UV Map Index", "Active UV Map index");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
}
@@ -3259,6 +3179,79 @@ static void rna_def_paint_mask(BlenderRNA *brna, PropertyRNA *UNUSED(cprop))
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
}
+static void rna_def_face_map(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ srna = RNA_def_struct(brna, "MeshFaceMapLayer", NULL);
+ RNA_def_struct_ui_text(srna, "Mesh Face Map Layer", "Per-face map index");
+ RNA_def_struct_sdna(srna, "CustomDataLayer");
+ RNA_def_struct_path_func(srna, "rna_MeshFaceMapLayer_path");
+
+ prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
+ RNA_def_struct_name_property(srna, prop);
+ RNA_def_property_string_funcs(prop, NULL, NULL, "rna_MeshPolyLayer_name_set");
+ RNA_def_property_ui_text(prop, "Name", "Name of face-map layer");
+ RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
+
+ prop = RNA_def_property(srna, "data", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_struct_type(prop, "MeshFaceMap");
+ RNA_def_property_ui_text(prop, "Data", "");
+ RNA_def_property_collection_funcs(prop, "rna_MeshFaceMapLayer_data_begin", "rna_iterator_array_next",
+ "rna_iterator_array_end", "rna_iterator_array_get",
+ "rna_MeshFaceMapLayer_data_length", NULL, NULL, NULL);
+
+ /* FaceMap struct */
+ srna = RNA_def_struct(brna, "MeshFaceMap", NULL);
+ RNA_def_struct_sdna(srna, "MIntProperty");
+ RNA_def_struct_ui_text(srna, "Int Property", "");
+ RNA_def_struct_path_func(srna, "rna_MeshFaceMap_path");
+
+ prop = RNA_def_property(srna, "value", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "i");
+ RNA_def_property_ui_text(prop, "Value", "");
+ RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
+}
+
+static void rna_def_face_maps(BlenderRNA *brna, PropertyRNA *cprop)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ RNA_def_property_srna(cprop, "MeshFaceMapLayers");
+ srna = RNA_def_struct(brna, "MeshFaceMapLayers", NULL);
+ RNA_def_struct_ui_text(srna, "Mesh Face Map Layer", "Per-face map index");
+ RNA_def_struct_sdna(srna, "Mesh");
+ RNA_def_struct_ui_text(srna, "Mesh FaceMaps", "Collection of mesh face-maps");
+
+ /* add this since we only ever have one layer anyway, don't bother with active_index */
+ prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
+ RNA_def_property_struct_type(prop, "MeshFaceMapLayer");
+ RNA_def_property_pointer_funcs(prop, "rna_Mesh_face_map_active_get",
+ NULL, NULL, NULL);
+ RNA_def_property_ui_text(prop, "Active FaceMap Layer", "");
+ RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
+
+ FunctionRNA *func;
+ PropertyRNA *parm;
+
+ func = RNA_def_function(srna, "new", "rna_Mesh_face_map_new");
+ RNA_def_function_flag(func, FUNC_USE_REPORTS);
+ RNA_def_function_ui_description(func, "Add a float property layer to Mesh");
+ RNA_def_string(func, "name", "Face Map", 0, "", "Face map name");
+ parm = RNA_def_pointer(func, "layer", "MeshFaceMapLayer", "", "The newly created layer");
+ RNA_def_parameter_flags(parm, 0, PARM_RNAPTR);
+ RNA_def_function_return(func, parm);
+
+ func = RNA_def_function(srna, "remove", "rna_Mesh_face_map_remove");
+ RNA_def_function_ui_description(func, "Remove a face map layer");
+ RNA_def_function_flag(func, FUNC_USE_REPORTS);
+ parm = RNA_def_pointer(func, "layer", "MeshFaceMapLayer", "", "The layer to remove");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
+ RNA_def_property_clear_flag(parm, PROP_THICK_WRAP);
+}
+
static void rna_def_mesh(BlenderRNA *brna)
{
StructRNA *srna;
@@ -3348,41 +3341,6 @@ static void rna_def_mesh(BlenderRNA *brna)
"All UV maps for tessellated faces (read-only, for use by renderers)");
rna_def_tessface_uv_textures(brna, prop);
- /* UV maps */
- prop = RNA_def_property(srna, "uv_textures", PROP_COLLECTION, PROP_NONE);
- RNA_def_property_collection_sdna(prop, NULL, "pdata.layers", "pdata.totlayer");
- RNA_def_property_collection_funcs(prop, "rna_Mesh_uv_textures_begin", NULL, NULL, NULL,
- "rna_Mesh_uv_textures_length", NULL, NULL, NULL);
- RNA_def_property_struct_type(prop, "MeshTexturePolyLayer");
- RNA_def_property_ui_text(prop, "UV Maps", "All UV maps");
- rna_def_uv_textures(brna, prop);
-
- prop = RNA_def_property(srna, "uv_texture_clone", PROP_POINTER, PROP_NONE);
- RNA_def_property_struct_type(prop, "MeshTexturePolyLayer");
- RNA_def_property_pointer_funcs(prop, "rna_Mesh_uv_texture_clone_get",
- "rna_Mesh_uv_texture_clone_set", NULL, NULL);
- RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_ui_text(prop, "Clone UV Map", "UV map to be used as cloning source");
-
- prop = RNA_def_property(srna, "uv_texture_clone_index", PROP_INT, PROP_UNSIGNED);
- RNA_def_property_int_funcs(prop, "rna_Mesh_uv_texture_clone_index_get",
- "rna_Mesh_uv_texture_clone_index_set", "rna_Mesh_uv_texture_index_range");
- RNA_def_property_ui_text(prop, "Clone UV Map Index", "Clone UV map index");
-
- prop = RNA_def_property(srna, "uv_texture_stencil", PROP_POINTER, PROP_NONE);
- RNA_def_property_struct_type(prop, "MeshTexturePolyLayer");
- RNA_def_property_pointer_funcs(prop, "rna_Mesh_uv_texture_stencil_get",
- "rna_Mesh_uv_texture_stencil_set", NULL, NULL);
- RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_ui_text(prop, "Mask UV Map", "UV map to mask the painted area");
- RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
-
- prop = RNA_def_property(srna, "uv_texture_stencil_index", PROP_INT, PROP_UNSIGNED);
- RNA_def_property_int_funcs(prop, "rna_Mesh_uv_texture_stencil_index_get",
- "rna_Mesh_uv_texture_stencil_index_set", "rna_Mesh_uv_texture_index_range");
- RNA_def_property_ui_text(prop, "Mask UV Map Index", "Mask UV map index");
- RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
-
/* Tessellated face colors - used by renderers */
prop = RNA_def_property(srna, "tessface_vertex_colors", PROP_COLLECTION, PROP_NONE);
@@ -3453,6 +3411,15 @@ static void rna_def_mesh(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "String Property Layers", "");
rna_def_polygon_string_layers(brna, prop);
+ /* face-maps */
+ prop = RNA_def_property(srna, "face_maps", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_collection_sdna(prop, NULL, "pdata.layers", "pdata.totlayer");
+ RNA_def_property_collection_funcs(prop, "rna_Mesh_face_maps_begin", NULL, NULL, NULL,
+ "rna_Mesh_face_maps_length", NULL, NULL, NULL);
+ RNA_def_property_struct_type(prop, "MeshFaceMapLayer");
+ RNA_def_property_ui_text(prop, "FaceMap", "");
+ rna_def_face_maps(brna, prop);
+
/* Skin vertices */
prop = RNA_def_property(srna, "skin_vertices", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "vdata.layers", "vdata.totlayer");
@@ -3723,10 +3690,10 @@ void RNA_def_mesh(BlenderRNA *brna)
rna_def_mpolygon(brna);
rna_def_mloopuv(brna);
rna_def_mtface(brna);
- rna_def_mtexpoly(brna);
rna_def_mcol(brna);
rna_def_mloopcol(brna);
rna_def_mproperties(brna);
+ rna_def_face_map(brna);
}
#endif
diff --git a/source/blender/makesrna/intern/rna_mesh_api.c b/source/blender/makesrna/intern/rna_mesh_api.c
index 9b0a25560f9..f1f7c9a3b99 100644
--- a/source/blender/makesrna/intern/rna_mesh_api.c
+++ b/source/blender/makesrna/intern/rna_mesh_api.c
@@ -48,6 +48,7 @@
#include "DNA_mesh_types.h"
#include "BKE_mesh.h"
+#include "BKE_mesh_tangent.h"
#include "BKE_mesh_mapping.h"
#include "ED_mesh.h"
@@ -92,7 +93,7 @@ static void rna_Mesh_calc_tangents(Mesh *mesh, ReportList *reports, const char *
BKE_mesh_calc_normals_split(mesh);
}
- BKE_mesh_loop_tangents(mesh, uvmap, r_looptangents, reports);
+ BKE_mesh_calc_loop_tangent_single(mesh, uvmap, r_looptangents, reports);
}
static void rna_Mesh_free_tangents(Mesh *mesh)
@@ -172,7 +173,7 @@ static void rna_Mesh_normals_split_custom_set(Mesh *mesh, ReportList *reports, i
rna_Mesh_normals_split_custom_do(mesh, loopnors, false);
- DAG_id_tag_update(&mesh->id, 0);
+ DEG_id_tag_update(&mesh->id, 0);
}
static void rna_Mesh_normals_split_custom_set_from_vertices(
@@ -190,14 +191,14 @@ static void rna_Mesh_normals_split_custom_set_from_vertices(
rna_Mesh_normals_split_custom_do(mesh, vertnors, true);
- DAG_id_tag_update(&mesh->id, 0);
+ DEG_id_tag_update(&mesh->id, 0);
}
static void rna_Mesh_transform(Mesh *mesh, float *mat, int shape_keys)
{
BKE_mesh_transform(mesh, (float (*)[4])mat, shape_keys);
- DAG_id_tag_update(&mesh->id, 0);
+ DEG_id_tag_update(&mesh->id, 0);
}
static void rna_Mesh_flip_normals(Mesh *mesh)
@@ -206,7 +207,7 @@ static void rna_Mesh_flip_normals(Mesh *mesh)
BKE_mesh_tessface_clear(mesh);
BKE_mesh_calc_normals(mesh);
- DAG_id_tag_update(&mesh->id, 0);
+ DEG_id_tag_update(&mesh->id, 0);
}
static void rna_Mesh_split_faces(Mesh *mesh, int free_loop_normals)
@@ -214,6 +215,12 @@ static void rna_Mesh_split_faces(Mesh *mesh, int free_loop_normals)
BKE_mesh_split_faces(mesh, free_loop_normals != 0);
}
+static void rna_Mesh_update_gpu_tag(Mesh *mesh)
+{
+ BKE_mesh_batch_cache_dirty(mesh, BKE_MESH_BATCH_DIRTY_ALL);
+}
+
+
#else
void RNA_api_mesh(StructRNA *srna)
@@ -304,6 +311,8 @@ void RNA_api_mesh(StructRNA *srna)
RNA_def_boolean(func, "calc_tessface", 0, "Calculate Tessellation", "Force recalculation of tessellation faces");
RNA_def_function_flag(func, FUNC_USE_CONTEXT);
+ RNA_def_function(srna, "update_gpu_tag", "rna_Mesh_update_gpu_tag");
+
func = RNA_def_function(srna, "unit_test_compare", "rna_Mesh_unit_test_compare");
RNA_def_pointer(func, "mesh", "Mesh", "", "Mesh to compare to");
/* return value */
diff --git a/source/blender/makesrna/intern/rna_mesh_utils.h b/source/blender/makesrna/intern/rna_mesh_utils.h
index 0f42596ff13..05274e13e1e 100644
--- a/source/blender/makesrna/intern/rna_mesh_utils.h
+++ b/source/blender/makesrna/intern/rna_mesh_utils.h
@@ -101,12 +101,6 @@
for (layer = data->layers + layer_index, a = 0; layer_index + a < data->totlayer; layer++, a++) { \
if (value.data == layer) { \
CustomData_set_layer_##active_type(data, layer_type, a); \
- \
- /* keep loops in sync */ \
- if (layer_type == CD_MTEXPOLY) { \
- CustomData *ldata = rna_mesh_ldata_helper(me); \
- CustomData_set_layer_##active_type(ldata, CD_MLOOPUV, a); \
- } \
BKE_mesh_update_customdata_pointers(me, true); \
return; \
} \
@@ -131,11 +125,6 @@
CustomData *data = rna_mesh_##customdata_type(ptr); \
if (data) { \
CustomData_set_layer_##active_type(data, layer_type, value); \
- /* keep loops in sync */ \
- if (layer_type == CD_MTEXPOLY) { \
- CustomData *ldata = rna_mesh_ldata_helper(me); \
- CustomData_set_layer_##active_type(ldata, CD_MLOOPUV, value); \
- } \
BKE_mesh_update_customdata_pointers(me, true); \
} \
}
diff --git a/source/blender/makesrna/intern/rna_meta.c b/source/blender/makesrna/intern/rna_meta.c
index 1a45db1e45f..8589d819360 100644
--- a/source/blender/makesrna/intern/rna_meta.c
+++ b/source/blender/makesrna/intern/rna_meta.c
@@ -47,9 +47,10 @@
#include "DNA_object_types.h"
#include "BKE_mball.h"
-#include "BKE_depsgraph.h"
#include "BKE_main.h"
+#include "DEG_depsgraph.h"
+
#include "WM_types.h"
#include "WM_api.h"
@@ -103,7 +104,7 @@ static void rna_MetaBall_update_data(Main *bmain, Scene *scene, PointerRNA *ptr)
if (ob->data == mb)
BKE_mball_properties_copy(scene, ob);
- DAG_id_tag_update(&mb->id, 0);
+ DEG_id_tag_update(&mb->id, 0);
WM_main_add_notifier(NC_GEOM | ND_DATA, mb);
}
}
@@ -121,7 +122,7 @@ static MetaElem *rna_MetaBall_elements_new(MetaBall *mb, int type)
/* cheating way for importers to avoid slow updates */
if (mb->id.us > 0) {
- DAG_id_tag_update(&mb->id, 0);
+ DEG_id_tag_update(&mb->id, 0);
WM_main_add_notifier(NC_GEOM | ND_DATA, &mb->id);
}
@@ -142,7 +143,7 @@ static void rna_MetaBall_elements_remove(MetaBall *mb, ReportList *reports, Poin
/* cheating way for importers to avoid slow updates */
if (mb->id.us > 0) {
- DAG_id_tag_update(&mb->id, 0);
+ DEG_id_tag_update(&mb->id, 0);
WM_main_add_notifier(NC_GEOM | ND_DATA, &mb->id);
}
}
@@ -153,7 +154,7 @@ static void rna_MetaBall_elements_clear(MetaBall *mb)
/* cheating way for importers to avoid slow updates */
if (mb->id.us > 0) {
- DAG_id_tag_update(&mb->id, 0);
+ DEG_id_tag_update(&mb->id, 0);
WM_main_add_notifier(NC_GEOM | ND_DATA, &mb->id);
}
}
diff --git a/source/blender/makesrna/intern/rna_meta_api.c b/source/blender/makesrna/intern/rna_meta_api.c
index 4c3fa787b94..53bb3ef2334 100644
--- a/source/blender/makesrna/intern/rna_meta_api.c
+++ b/source/blender/makesrna/intern/rna_meta_api.c
@@ -47,7 +47,12 @@ static void rna_Meta_transform(struct MetaBall *mb, float *mat)
{
BKE_mball_transform(mb, (float (*)[4])mat, true);
- DAG_id_tag_update(&mb->id, 0);
+ DEG_id_tag_update(&mb->id, 0);
+}
+
+static void rna_Mball_update_gpu_tag(MetaBall *mb)
+{
+ BKE_mball_batch_cache_dirty(mb, BKE_MBALL_BATCH_DIRTY_ALL);
}
#else
@@ -60,6 +65,8 @@ void RNA_api_meta(StructRNA *srna)
RNA_def_function_ui_description(func, "Transform meta elements by a matrix");
parm = RNA_def_float_matrix(func, "matrix", 4, 4, NULL, 0.0f, 0.0f, "", "Matrix", 0.0f, 0.0f);
RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+
+ RNA_def_function(srna, "update_gpu_tag", "rna_Mball_update_gpu_tag");
}
#endif
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index 2f92c47eed9..99417ee7b1b 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -286,12 +286,14 @@ const EnumPropertyItem rna_enum_axis_flag_xyz_items[] = {
#include "BKE_cachefile.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_library.h"
#include "BKE_modifier.h"
#include "BKE_object.h"
#include "BKE_particle.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#ifdef WITH_ALEMBIC
# include "ABC_alembic.h"
#endif
@@ -453,14 +455,14 @@ static char *rna_Modifier_path(PointerRNA *ptr)
static void rna_Modifier_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- DAG_id_tag_update(ptr->id.data, OB_RECALC_DATA);
+ DEG_id_tag_update(ptr->id.data, OB_RECALC_DATA);
WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ptr->id.data);
}
static void rna_Modifier_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
rna_Modifier_update(bmain, scene, ptr);
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
}
/* Vertex Groups */
@@ -793,11 +795,11 @@ static void rna_CurveModifier_dependency_update(Main *bmain, Scene *scene, Point
{
CurveModifierData *cmd = (CurveModifierData *)ptr->data;
rna_Modifier_update(bmain, scene, ptr);
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
if (cmd->object != NULL) {
Curve *curve = cmd->object->data;
if ((curve->flag & CU_PATH) == 0) {
- DAG_id_tag_update(&curve->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&curve->id, OB_RECALC_DATA);
}
}
}
@@ -806,11 +808,11 @@ static void rna_ArrayModifier_dependency_update(Main *bmain, Scene *scene, Point
{
ArrayModifierData *amd = (ArrayModifierData *)ptr->data;
rna_Modifier_update(bmain, scene, ptr);
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
if (amd->curve_ob != NULL) {
Curve *curve = amd->curve_ob->data;
if ((curve->flag & CU_PATH) == 0) {
- DAG_id_tag_update(&curve->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&curve->id, OB_RECALC_DATA);
}
}
}
@@ -933,19 +935,19 @@ static const EnumPropertyItem *rna_DataTransferModifier_layers_select_src_itemf(
if (ob_src) {
DerivedMesh *dm_src;
- CustomData *pdata;
+ CustomData *ldata;
int num_data, i;
dm_src = object_get_derived_final(ob_src, false);
if (dm_src != NULL) {
- pdata = dm_src->getPolyDataLayout(dm_src);
- num_data = CustomData_number_of_layers(pdata, CD_MTEXPOLY);
+ ldata = dm_src->getLoopDataLayout(dm_src);
+ num_data = CustomData_number_of_layers(ldata, CD_MLOOPUV);
RNA_enum_item_add_separator(&item, &totitem);
for (i = 0; i < num_data; i++) {
tmp_item.value = i;
- tmp_item.identifier = tmp_item.name = CustomData_get_layer_name(pdata, CD_MTEXPOLY, i);
+ tmp_item.identifier = tmp_item.name = CustomData_get_layer_name(ldata, CD_MLOOPUV, i);
RNA_enum_item_add(&item, &totitem, &tmp_item);
}
}
@@ -1024,18 +1026,18 @@ static const EnumPropertyItem *rna_DataTransferModifier_layers_select_dst_itemf(
if (ob_dst && ob_dst->data) {
Mesh *me_dst;
- CustomData *pdata;
+ CustomData *ldata;
int num_data, i;
me_dst = ob_dst->data;
- pdata = &me_dst->pdata;
- num_data = CustomData_number_of_layers(pdata, CD_MTEXPOLY);
+ ldata = &me_dst->ldata;
+ num_data = CustomData_number_of_layers(ldata, CD_MLOOPUV);
RNA_enum_item_add_separator(&item, &totitem);
for (i = 0; i < num_data; i++) {
tmp_item.value = i;
- tmp_item.identifier = tmp_item.name = CustomData_get_layer_name(pdata, CD_MTEXPOLY, i);
+ tmp_item.identifier = tmp_item.name = CustomData_get_layer_name(ldata, CD_MLOOPUV, i);
RNA_enum_item_add(&item, &totitem, &tmp_item);
}
}
@@ -1815,7 +1817,7 @@ static void rna_def_modifier_armature(BlenderRNA *brna)
prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
RNA_def_property_ui_text(prop, "Object", "Armature object to deform with");
RNA_def_property_pointer_funcs(prop, NULL, "rna_ArmatureModifier_object_set", NULL, "rna_Armature_object_poll");
- RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK | PROP_OVERRIDABLE_STATIC);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "use_bone_envelopes", PROP_BOOLEAN, PROP_NONE);
@@ -2282,11 +2284,6 @@ static void rna_def_modifier_uvproject(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Vertical Scale", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop = RNA_def_property(srna, "use_image_override", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_UVPROJECT_OVERRIDEIMAGE);
- RNA_def_property_ui_text(prop, "Override Image", "Override faces' current images with the given image");
- RNA_def_property_update(prop, 0, "rna_Modifier_update");
-
srna = RNA_def_struct(brna, "UVProjector", NULL);
RNA_def_struct_ui_text(srna, "UVProjector", "UV projector used by the UV project modifier");
diff --git a/source/blender/makesrna/intern/rna_movieclip.c b/source/blender/makesrna/intern/rna_movieclip.c
index fb743f5236d..850b1cd706b 100644
--- a/source/blender/makesrna/intern/rna_movieclip.c
+++ b/source/blender/makesrna/intern/rna_movieclip.c
@@ -47,7 +47,7 @@
#ifdef RNA_RUNTIME
-#include "BKE_depsgraph.h"
+#include "DEG_depsgraph.h"
#include "ED_clip.h"
@@ -59,7 +59,7 @@ static void rna_MovieClip_reload_update(Main *UNUSED(bmain), Scene *UNUSED(scene
MovieClip *clip = (MovieClip *)ptr->id.data;
BKE_movieclip_reload(clip);
- DAG_id_tag_update(&clip->id, 0);
+ DEG_id_tag_update(&clip->id, 0);
}
static void rna_MovieClip_size_get(PointerRNA *ptr, int *values)
diff --git a/source/blender/makesrna/intern/rna_nla.c b/source/blender/makesrna/intern/rna_nla.c
index 20d5e1e959c..a14508ecb18 100644
--- a/source/blender/makesrna/intern/rna_nla.c
+++ b/source/blender/makesrna/intern/rna_nla.c
@@ -50,7 +50,6 @@
/* needed for some of the validation stuff... */
#include "BKE_animsys.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
#include "BKE_nla.h"
diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c
index 4225aa38d57..59570c10ebd 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -66,6 +66,8 @@
#include "NOD_composite.h"
+#include "DEG_depsgraph.h"
+
const EnumPropertyItem rna_enum_node_socket_in_out_items[] = {
{ SOCK_IN, "IN", 0, "Input", "" },
{ SOCK_OUT, "OUT", 0, "Output", "" },
@@ -187,6 +189,8 @@ static const EnumPropertyItem node_sampler_type_items[] = {
#include "ED_node.h"
#include "ED_render.h"
+#include "GPU_material.h"
+
#include "NOD_common.h"
#include "NOD_socket.h"
@@ -2299,13 +2303,25 @@ static void rna_NodeSocketStandard_vector_range(PointerRNA *ptr, float *min, flo
*softmax = dval->max;
}
+static void rna_NodeSocket_value_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+{
+ bNodeTree *ntree = (bNodeTree *)ptr->id.data;
+ if (ntree->type == NTREE_SHADER) {
+ DEG_id_tag_update_ex(bmain, ptr->id.data, DEG_TAG_SHADING_UPDATE);
+ WM_main_add_notifier(NC_MATERIAL | ND_SHADING, NULL);
+ }
+ else {
+ rna_NodeSocket_update(bmain, scene, ptr);
+ }
+}
+
/* using a context update function here, to avoid searching the node if possible */
static void rna_NodeSocketStandard_value_update(struct bContext *C, PointerRNA *ptr)
{
bNode *node;
/* default update */
- rna_NodeSocket_update(CTX_data_main(C), CTX_data_scene(C), ptr);
+ rna_NodeSocket_value_update(CTX_data_main(C), CTX_data_scene(C), ptr);
/* try to use node from context, faster */
node = CTX_data_pointer_get(C, "node").data;
@@ -2751,7 +2767,7 @@ static const EnumPropertyItem *rna_Node_image_view_itemf(bContext *UNUSED(C), Po
return item;
}
-static const EnumPropertyItem *rna_Node_scene_layer_itemf(bContext *UNUSED(C), PointerRNA *ptr,
+static const EnumPropertyItem *rna_Node_view_layer_itemf(bContext *UNUSED(C), PointerRNA *ptr,
PropertyRNA *UNUSED(prop), bool *r_free)
{
bNode *node = (bNode *)ptr->data;
@@ -2764,7 +2780,7 @@ static const EnumPropertyItem *rna_Node_scene_layer_itemf(bContext *UNUSED(C), P
return DummyRNA_NULL_items;
}
- rl = sce->r.layers.first;
+ rl = sce->view_layers.first;
item = renderresult_layers_add_enum(rl);
*r_free = true;
@@ -2772,7 +2788,7 @@ static const EnumPropertyItem *rna_Node_scene_layer_itemf(bContext *UNUSED(C), P
return item;
}
-static void rna_Node_scene_layer_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+static void rna_Node_view_layer_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
rna_Node_update(bmain, scene, ptr);
if (scene->nodetree != NULL) {
@@ -3012,7 +3028,7 @@ static void rna_ShaderNodeScript_update(Main *bmain, Scene *scene, PointerRNA *p
{
bNodeTree *ntree = (bNodeTree *)ptr->id.data;
bNode *node = (bNode *)ptr->data;
- RenderEngineType *engine_type = RE_engines_find(scene->r.engine);
+ RenderEngineType *engine_type = RE_engines_find(scene->view_render.engine_id);
if (engine_type && engine_type->update_script_node) {
/* auto update node */
@@ -3113,6 +3129,7 @@ static int point_density_vertex_color_source_from_shader(NodeShaderTexPointDensi
void rna_ShaderNodePointDensity_density_cache(bNode *self,
Scene *scene,
+ ViewLayer *view_layer,
int settings)
{
NodeShaderTexPointDensity *shader_point_density = self->storage;
@@ -3150,12 +3167,13 @@ void rna_ShaderNodePointDensity_density_cache(bNode *self,
/* Single-threaded sampling of the voxel domain. */
RE_point_density_cache(scene,
- pd,
+ view_layer, pd,
settings == 1);
}
void rna_ShaderNodePointDensity_density_calc(bNode *self,
Scene *scene,
+ ViewLayer *view_layer,
int settings,
int *length,
float **values)
@@ -3177,7 +3195,7 @@ void rna_ShaderNodePointDensity_density_calc(bNode *self,
}
/* Single-threaded sampling of the voxel domain. */
- RE_point_density_sample(scene, pd,
+ RE_point_density_sample(scene, view_layer, pd,
resolution,
settings == 1,
*values);
@@ -3190,6 +3208,7 @@ void rna_ShaderNodePointDensity_density_calc(bNode *self,
void rna_ShaderNodePointDensity_density_minmax(bNode *self,
Scene *scene,
+ ViewLayer *view_layer,
int settings,
float r_min[3],
float r_max[3])
@@ -3201,7 +3220,7 @@ void rna_ShaderNodePointDensity_density_minmax(bNode *self,
zero_v3(r_max);
return;
}
- RE_point_density_minmax(scene, pd, settings == 1, r_min, r_max);
+ RE_point_density_minmax(scene, view_layer, pd, settings == 1, r_min, r_max);
}
#else
@@ -3216,7 +3235,7 @@ static const EnumPropertyItem prop_image_view_items[] = {
{0, NULL, 0, NULL, NULL}
};
-static const EnumPropertyItem prop_scene_layer_items[] = {
+static const EnumPropertyItem prop_view_layer_items[] = {
{ 0, "PLACEHOLDER", 0, "Placeholder", ""},
{0, NULL, 0, NULL, NULL}
};
@@ -4185,11 +4204,13 @@ static void def_sh_tex_pointdensity(StructRNA *srna)
func = RNA_def_function(srna, "cache_point_density", "rna_ShaderNodePointDensity_density_cache");
RNA_def_function_ui_description(func, "Cache point density data for later calculation");
RNA_def_pointer(func, "scene", "Scene", "", "");
+ RNA_def_pointer(func, "view_layer", "ViewLayer", "", "");
RNA_def_enum(func, "settings", calc_mode_items, 1, "", "Calculate density for rendering");
func = RNA_def_function(srna, "calc_point_density", "rna_ShaderNodePointDensity_density_calc");
RNA_def_function_ui_description(func, "Calculate point density");
RNA_def_pointer(func, "scene", "Scene", "", "");
+ RNA_def_pointer(func, "view_layer", "ViewLayer", "", "");
RNA_def_enum(func, "settings", calc_mode_items, 1, "", "Calculate density for rendering");
/* TODO, See how array size of 0 works, this shouldnt be used. */
parm = RNA_def_float_array(func, "rgba_values", 1, NULL, 0, 0, "", "RGBA Values", 0, 0);
@@ -4199,6 +4220,7 @@ static void def_sh_tex_pointdensity(StructRNA *srna)
func = RNA_def_function(srna, "calc_point_density_minmax", "rna_ShaderNodePointDensity_density_minmax");
RNA_def_function_ui_description(func, "Calculate point density");
RNA_def_pointer(func, "scene", "Scene", "", "");
+ RNA_def_pointer(func, "view_layer", "ViewLayer", "", "");
RNA_def_enum(func, "settings", calc_mode_items, 1, "", "Calculate density for rendering");
parm = RNA_def_property(func, "min", PROP_FLOAT, PROP_COORDS);
RNA_def_property_array(parm, 3);
@@ -4874,15 +4896,15 @@ static void def_cmp_render_layers(StructRNA *srna)
RNA_def_property_struct_type(prop, "Scene");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_REFCOUNT);
RNA_def_property_ui_text(prop, "Scene", "");
- RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_scene_layer_update");
+ RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_view_layer_update");
prop = RNA_def_property(srna, "layer", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "custom1");
- RNA_def_property_enum_items(prop, prop_scene_layer_items);
- RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Node_scene_layer_itemf");
+ RNA_def_property_enum_items(prop, prop_view_layer_items);
+ RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Node_view_layer_itemf");
RNA_def_property_flag(prop, PROP_ENUM_NO_TRANSLATE);
RNA_def_property_ui_text(prop, "Layer", "");
- RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_scene_layer_update");
+ RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_view_layer_update");
}
static void rna_def_cmp_output_file_slot_file(BlenderRNA *brna)
diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c
index 7800edc3086..270d9fe14ca 100644
--- a/source/blender/makesrna/intern/rna_object.c
+++ b/source/blender/makesrna/intern/rna_object.c
@@ -38,6 +38,7 @@
#include "DNA_property_types.h"
#include "DNA_scene_types.h"
#include "DNA_meta_types.h"
+#include "DNA_workspace_types.h"
#include "BLI_utildefines.h"
#include "BLI_listbase.h"
@@ -47,6 +48,7 @@
#include "BKE_editmesh.h"
#include "BKE_group.h" /* needed for BKE_group_object_exists() */
#include "BKE_object_deform.h"
+#include "BKE_object_facemap.h"
#include "RNA_access.h"
#include "RNA_define.h"
@@ -96,16 +98,27 @@ static const EnumPropertyItem parent_type_items[] = {
{0, NULL, 0, NULL, NULL}
};
-#ifndef RNA_RUNTIME
+#define DUPLI_ITEMS_SHARED \
+ {0, "NONE", 0, "None", ""}, \
+ {OB_DUPLIFRAMES, "FRAMES", 0, "Frames", "Make copy of object for every frame"}, \
+ {OB_DUPLIVERTS, "VERTS", 0, "Verts", "Duplicate child objects on all vertices"}, \
+ {OB_DUPLIFACES, "FACES", 0, "Faces", "Duplicate child objects on all faces"}
+
+#define DUPLI_ITEM_GROUP \
+ {OB_DUPLIGROUP, "GROUP", 0, "Group", "Enable group instancing"}
static const EnumPropertyItem dupli_items[] = {
- {0, "NONE", 0, "None", ""},
- {OB_DUPLIFRAMES, "FRAMES", 0, "Frames", "Make copy of object for every frame"},
- {OB_DUPLIVERTS, "VERTS", 0, "Verts", "Duplicate child objects on all vertices"},
- {OB_DUPLIFACES, "FACES", 0, "Faces", "Duplicate child objects on all faces"},
- {OB_DUPLIGROUP, "GROUP", 0, "Group", "Enable group instancing"},
+ DUPLI_ITEMS_SHARED,
+ DUPLI_ITEM_GROUP,
+ {0, NULL, 0, NULL, NULL}
+};
+#ifdef RNA_RUNTIME
+static EnumPropertyItem dupli_items_nogroup[] = {
+ DUPLI_ITEMS_SHARED,
{0, NULL, 0, NULL, NULL}
};
#endif
+#undef DUPLI_ITEMS_SHARED
+#undef DUPLI_ITEM_GROUP
static const EnumPropertyItem collision_bounds_items[] = {
{OB_BOUND_BOX, "BOX", ICON_MESH_CUBE, "Box", ""},
@@ -147,6 +160,7 @@ const EnumPropertyItem rna_enum_object_type_items[] = {
{OB_CAMERA, "CAMERA", 0, "Camera", ""},
{OB_LAMP, "LAMP", 0, "Lamp", ""},
{OB_SPEAKER, "SPEAKER", 0, "Speaker", ""},
+ {OB_LIGHTPROBE, "LIGHT_PROBE", 0, "Probe", ""},
{0, NULL, 0, NULL, NULL}
};
@@ -181,7 +195,6 @@ const EnumPropertyItem rna_enum_object_axis_items[] = {
#include "BKE_constraint.h"
#include "BKE_context.h"
#include "BKE_curve.h"
-#include "BKE_depsgraph.h"
#include "BKE_effect.h"
#include "BKE_global.h"
#include "BKE_key.h"
@@ -192,6 +205,9 @@ const EnumPropertyItem rna_enum_object_axis_items[] = {
#include "BKE_scene.h"
#include "BKE_deform.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#include "ED_object.h"
#include "ED_particle.h"
#include "ED_curve.h"
@@ -199,7 +215,7 @@ const EnumPropertyItem rna_enum_object_axis_items[] = {
static void rna_Object_internal_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- DAG_id_tag_update(ptr->id.data, OB_RECALC_OB);
+ DEG_id_tag_update(ptr->id.data, OB_RECALC_OB);
}
static void rna_Object_matrix_world_update(Main *bmain, Scene *scene, PointerRNA *ptr)
@@ -211,7 +227,28 @@ static void rna_Object_matrix_world_update(Main *bmain, Scene *scene, PointerRNA
static void rna_Object_hide_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *UNUSED(ptr))
{
- DAG_id_type_tag(bmain, ID_OB);
+ DEG_id_type_tag(bmain, ID_OB);
+}
+
+static int rna_Object_is_visible_get(PointerRNA *ptr)
+{
+ Object *ob = ptr->id.data;
+ /* The duplicators final visibility is not evaluated by depsgraph, so it's
+ * in ob->base_flag & VISIBLED. Instead we need to take into account whether
+ * we are rendering or not, and the ob->duplicator_visibility_flag.
+ * However for this assessor we don't know if we are rendering, so we just
+ * ignore the duplicator visibility
+ */
+ return BKE_object_is_visible(ob, OB_VISIBILITY_CHECK_UNKNOWN_RENDER_MODE);
+}
+
+static void rna_Object_collection_properties_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
+{
+ Object *ob = ptr->data;
+
+ if (ob->base_collection_properties != NULL) {
+ rna_iterator_listbase_begin(iter, &ob->base_collection_properties->data.group, NULL);
+ }
}
static void rna_Object_matrix_local_get(PointerRNA *ptr, float values[16])
@@ -254,7 +291,7 @@ static void rna_Object_matrix_basis_set(PointerRNA *ptr, const float values[16])
void rna_Object_internal_update_data(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- DAG_id_tag_update(ptr->id.data, OB_RECALC_DATA);
+ DEG_id_tag_update(ptr->id.data, OB_RECALC_DATA);
WM_main_add_notifier(NC_OBJECT | ND_DRAW, ptr->id.data);
}
@@ -269,7 +306,7 @@ static void rna_Object_active_shape_update(Main *bmain, Scene *scene, PointerRNA
EDBM_mesh_load(ob);
EDBM_mesh_make(scene->toolsettings, ob, true);
- DAG_id_tag_update(ob->data, 0);
+ DEG_id_tag_update(ob->data, 0);
EDBM_mesh_normals_update(((Mesh *)ob->data)->edit_btmesh);
BKE_editmesh_tessface_calc(((Mesh *)ob->data)->edit_btmesh);
@@ -291,81 +328,17 @@ static void rna_Object_active_shape_update(Main *bmain, Scene *scene, PointerRNA
static void rna_Object_dependency_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- DAG_id_tag_update(ptr->id.data, OB_RECALC_OB);
- DAG_relations_tag_update(bmain);
+ DEG_id_tag_update(ptr->id.data, OB_RECALC_OB);
+ DEG_relations_tag_update(bmain);
WM_main_add_notifier(NC_OBJECT | ND_PARENT, ptr->id.data);
}
-/* when changing the selection flag the scene needs updating */
-static void rna_Object_select_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *ptr)
-{
- if (scene) {
- Object *ob = (Object *)ptr->id.data;
- short mode = (ob->flag & SELECT) ? BA_SELECT : BA_DESELECT;
- ED_base_object_select(BKE_scene_base_find(scene, ob), mode);
- }
-}
-
-static void rna_Base_select_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
-{
- Base *base = (Base *)ptr->data;
- short mode = (base->flag & BA_SELECT) ? BA_SELECT : BA_DESELECT;
- ED_base_object_select(base, mode);
-}
-
-static void rna_Object_layer_update__internal(Main *bmain, Scene *scene, Base *base, Object *ob)
-{
- /* try to avoid scene sort */
- if (scene == NULL) {
- /* pass - unlikely but when running scripts on startup it happens */
- }
- else if ((ob->lay & scene->lay) && (base->lay & scene->lay)) {
- /* pass */
- }
- else if ((ob->lay & scene->lay) == 0 && (base->lay & scene->lay) == 0) {
- /* pass */
- }
- else {
- DAG_relations_tag_update(bmain);
- }
-
- DAG_id_type_tag(bmain, ID_OB);
-}
-
-static void rna_Object_layer_update(Main *bmain, Scene *scene, PointerRNA *ptr)
-{
- Object *ob = (Object *)ptr->id.data;
- Base *base;
-
- base = scene ? BKE_scene_base_find(scene, ob) : NULL;
- if (!base)
- return;
-
- SWAP(unsigned int, base->lay, ob->lay);
-
- rna_Object_layer_update__internal(bmain, scene, base, ob);
- ob->lay = base->lay;
-
- WM_main_add_notifier(NC_SCENE | ND_LAYER_CONTENT, scene);
-}
-
-static void rna_Base_layer_update(Main *bmain, Scene *scene, PointerRNA *ptr)
-{
- Base *base = (Base *)ptr->data;
- Object *ob = (Object *)base->object;
-
- rna_Object_layer_update__internal(bmain, scene, base, ob);
- ob->lay = base->lay;
-
- WM_main_add_notifier(NC_SCENE | ND_LAYER_CONTENT, scene);
-}
-
static void rna_Object_data_set(PointerRNA *ptr, PointerRNA value)
{
Object *ob = (Object *)ptr->data;
ID *id = value.data;
- if (ob->mode & OB_MODE_EDIT) {
+ if (BKE_object_is_in_editmode(ob)) {
return;
}
@@ -424,6 +397,7 @@ static StructRNA *rna_Object_data_typef(PointerRNA *ptr)
case OB_LATTICE: return &RNA_Lattice;
case OB_ARMATURE: return &RNA_Armature;
case OB_SPEAKER: return &RNA_Speaker;
+ case OB_LIGHTPROBE: return &RNA_LightProbe;
default: return &RNA_ID;
}
}
@@ -519,6 +493,23 @@ static void rna_Object_parent_bone_set(PointerRNA *ptr, const char *value)
ED_object_parent(ob, ob->parent, ob->partype, value);
}
+static const EnumPropertyItem *rna_Object_dupli_type_itemf(
+ bContext *UNUSED(C), PointerRNA *ptr,
+ PropertyRNA *UNUSED(prop), bool *UNUSED(r_free))
+{
+ Object *ob = (Object *)ptr->data;
+ const EnumPropertyItem *item;
+
+ if (ob->type == OB_EMPTY) {
+ item = dupli_items;
+ }
+ else {
+ item = dupli_items_nogroup;
+ }
+
+ return item;
+}
+
static void rna_Object_dup_group_set(PointerRNA *ptr, PointerRNA value)
{
Object *ob = (Object *)ptr->data;
@@ -528,9 +519,15 @@ static void rna_Object_dup_group_set(PointerRNA *ptr, PointerRNA value)
* thus causing a cycle/infinite-recursion leading to crashes on load [#25298]
*/
if (BKE_group_object_exists(grp, ob) == 0) {
- id_us_min(&ob->dup_group->id);
- ob->dup_group = grp;
- id_us_plus(&ob->dup_group->id);
+ if (ob->type == OB_EMPTY) {
+ id_us_min(&ob->dup_group->id);
+ ob->dup_group = grp;
+ id_us_plus(&ob->dup_group->id);
+ }
+ else {
+ BKE_report(NULL, RPT_ERROR,
+ "Only empty objects support group instances");
+ }
}
else {
BKE_report(NULL, RPT_ERROR,
@@ -618,6 +615,87 @@ void rna_object_vgroup_name_set(PointerRNA *ptr, const char *value, char *result
result[0] = '\0';
}
+static void rna_FaceMap_name_set(PointerRNA *ptr, const char *value)
+{
+ Object *ob = (Object *)ptr->id.data;
+ bFaceMap *fmap = (bFaceMap *)ptr->data;
+ BLI_strncpy_utf8(fmap->name, value, sizeof(fmap->name));
+ BKE_object_facemap_unique_name(ob, fmap);
+}
+
+static int rna_FaceMap_index_get(PointerRNA *ptr)
+{
+ Object *ob = (Object *)ptr->id.data;
+
+ return BLI_findindex(&ob->fmaps, ptr->data);
+}
+
+static PointerRNA rna_Object_active_face_map_get(PointerRNA *ptr)
+{
+ Object *ob = (Object *)ptr->id.data;
+ return rna_pointer_inherit_refine(ptr, &RNA_FaceMap, BLI_findlink(&ob->fmaps, ob->actfmap - 1));
+}
+
+static int rna_Object_active_face_map_index_get(PointerRNA *ptr)
+{
+ Object *ob = (Object *)ptr->id.data;
+ return ob->actfmap - 1;
+}
+
+static void rna_Object_active_face_map_index_set(PointerRNA *ptr, int value)
+{
+ Object *ob = (Object *)ptr->id.data;
+ ob->actfmap = value + 1;
+}
+
+static void rna_Object_active_face_map_index_range(PointerRNA *ptr, int *min, int *max,
+ int *UNUSED(softmin), int *UNUSED(softmax))
+{
+ Object *ob = (Object *)ptr->id.data;
+
+ *min = 0;
+ *max = max_ii(0, BLI_listbase_count(&ob->fmaps) - 1);
+}
+
+void rna_object_BKE_object_facemap_name_index_get(PointerRNA *ptr, char *value, int index)
+{
+ Object *ob = (Object *)ptr->id.data;
+ bFaceMap *fmap;
+
+ fmap = BLI_findlink(&ob->fmaps, index - 1);
+
+ if (fmap) BLI_strncpy(value, fmap->name, sizeof(fmap->name));
+ else value[0] = '\0';
+}
+
+int rna_object_BKE_object_facemap_name_index_length(PointerRNA *ptr, int index)
+{
+ Object *ob = (Object *)ptr->id.data;
+ bFaceMap *fmap;
+
+ fmap = BLI_findlink(&ob->fmaps, index - 1);
+ return (fmap) ? strlen(fmap->name) : 0;
+}
+
+void rna_object_BKE_object_facemap_name_index_set(PointerRNA *ptr, const char *value, short *index)
+{
+ Object *ob = (Object *)ptr->id.data;
+ *index = BKE_object_facemap_name_index(ob, value) + 1;
+}
+
+void rna_object_fmap_name_set(PointerRNA *ptr, const char *value, char *result, int maxlen)
+{
+ Object *ob = (Object *)ptr->id.data;
+ bFaceMap *fmap = BKE_object_facemap_find_name(ob, value);
+ if (fmap) {
+ BLI_strncpy(result, value, maxlen); /* no need for BLI_strncpy_utf8, since this matches an existing group */
+ return;
+ }
+
+ result[0] = '\0';
+}
+
+
void rna_object_uvlayer_name_set(PointerRNA *ptr, const char *value, char *result, int maxlen)
{
Object *ob = (Object *)ptr->id.data;
@@ -628,10 +706,10 @@ void rna_object_uvlayer_name_set(PointerRNA *ptr, const char *value, char *resul
if (ob->type == OB_MESH && ob->data) {
me = (Mesh *)ob->data;
- for (a = 0; a < me->pdata.totlayer; a++) {
- layer = &me->pdata.layers[a];
+ for (a = 0; a < me->ldata.totlayer; a++) {
+ layer = &me->ldata.layers[a];
- if (layer->type == CD_MTEXPOLY && STREQ(layer->name, value)) {
+ if (layer->type == CD_MLOOPUV && STREQ(layer->name, value)) {
BLI_strncpy(result, value, maxlen);
return;
}
@@ -705,7 +783,7 @@ static void rna_Object_active_material_set(PointerRNA *ptr, PointerRNA value)
{
Object *ob = (Object *)ptr->id.data;
- DAG_id_tag_update(value.data, 0);
+ DEG_id_tag_update(value.data, 0);
assign_material(ob, value.data, ob->actcol, BKE_MAT_ASSIGN_EXISTING);
}
@@ -747,9 +825,14 @@ static void rna_Object_active_particle_system_index_set(PointerRNA *ptr, int val
static void rna_Object_particle_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *ptr)
{
+ /* TODO: Disabled for now, because bContext is not available. */
+#if 0
Object *ob = (Object *)ptr->id.data;
-
- PE_current_changed(scene, ob);
+ PE_current_changed(NULL, scene, ob);
+#else
+ (void) scene;
+ (void) ptr;
+#endif
}
/* rotation - axis-angle */
@@ -938,7 +1021,7 @@ static void rna_MaterialSlot_update(Main *bmain, Scene *scene, PointerRNA *ptr)
WM_main_add_notifier(NC_OBJECT | ND_OB_SHADING, ptr->id.data);
WM_main_add_notifier(NC_MATERIAL | ND_SHADING_LINKS, NULL);
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
}
static char *rna_MaterialSlot_path(PointerRNA *ptr)
@@ -1065,7 +1148,7 @@ static void rna_GameObjectSettings_physics_type_set(PointerRNA *ptr, int value)
if ((gameflag_prev & OB_NAVMESH) != (ob->gameflag & OB_NAVMESH)) {
if (ob->type == OB_MESH) {
/* this is needed to refresh the derived meshes draw func */
- DAG_id_tag_update(ptr->id.data, OB_RECALC_DATA);
+ DEG_id_tag_update(ptr->id.data, OB_RECALC_DATA);
}
}
@@ -1084,49 +1167,6 @@ static PointerRNA rna_Object_game_settings_get(PointerRNA *ptr)
return rna_pointer_inherit_refine(ptr, &RNA_GameObjectSettings, ptr->id.data);
}
-
-static unsigned int rna_Object_layer_validate__internal(const int *values, unsigned int lay)
-{
- int i, tot = 0;
-
- /* ensure we always have some layer selected */
- for (i = 0; i < 20; i++)
- if (values[i])
- tot++;
-
- if (tot == 0)
- return 0;
-
- for (i = 0; i < 20; i++) {
- if (values[i]) lay |= (1 << i);
- else lay &= ~(1 << i);
- }
-
- return lay;
-}
-
-static void rna_Object_layer_set(PointerRNA *ptr, const int *values)
-{
- Object *ob = (Object *)ptr->data;
- unsigned int lay;
-
- lay = rna_Object_layer_validate__internal(values, ob->lay);
- if (lay)
- ob->lay = lay;
-}
-
-static void rna_Base_layer_set(PointerRNA *ptr, const int *values)
-{
- Base *base = (Base *)ptr->data;
-
- unsigned int lay;
- lay = rna_Object_layer_validate__internal(values, base->lay);
- if (lay)
- base->lay = lay;
-
- /* rna_Base_layer_update updates the objects layer */
-}
-
static void rna_GameObjectSettings_state_get(PointerRNA *ptr, int *values)
{
Object *ob = (Object *)ptr->data;
@@ -1355,7 +1395,9 @@ static void rna_Object_constraints_clear(Object *object)
static ModifierData *rna_Object_modifier_new(Object *object, bContext *C, ReportList *reports,
const char *name, int type)
{
- return ED_object_modifier_add(reports, CTX_data_main(C), CTX_data_scene(C), object, name, type);
+ Main *bmain = CTX_data_main(C);
+ const WorkSpace *workspace = CTX_wm_workspace(C);
+ return ED_object_modifier_add(reports, bmain, CTX_data_scene(C), object, workspace->object_mode, name, type);
}
static void rna_Object_modifier_remove(Object *object, bContext *C, ReportList *reports, PointerRNA *md_ptr)
@@ -1462,6 +1504,69 @@ static float rna_VertexGroup_weight(ID *id, bDeformGroup *dg, ReportList *report
return weight;
}
+static bFaceMap *rna_Object_fmap_new(Object *ob, const char *name)
+{
+ bFaceMap *fmap = BKE_object_facemap_add_name(ob, name);
+
+ WM_main_add_notifier(NC_OBJECT | ND_DRAW, ob);
+
+ return fmap;
+}
+
+static void rna_Object_fmap_remove(Object *ob, ReportList *reports, PointerRNA *fmap_ptr)
+{
+ bFaceMap *fmap = fmap_ptr->data;
+ if (BLI_findindex(&ob->fmaps, fmap) == -1) {
+ BKE_reportf(reports, RPT_ERROR, "FaceMap '%s' not in object '%s'", fmap->name, ob->id.name + 2);
+ return;
+ }
+
+ BKE_object_facemap_remove(ob, fmap);
+ RNA_POINTER_INVALIDATE(fmap_ptr);
+
+ WM_main_add_notifier(NC_OBJECT | ND_DRAW, ob);
+}
+
+
+static void rna_Object_fmap_clear(Object *ob)
+{
+ BKE_object_facemap_clear(ob);
+
+ WM_main_add_notifier(NC_OBJECT | ND_DRAW, ob);
+}
+
+
+static void rna_FaceMap_face_add(ID *id, bFaceMap *fmap, ReportList *reports, int index_len,
+ int *index)
+{
+ Object *ob = (Object *)id;
+
+ if (BKE_object_is_in_editmode(ob)) {
+ BKE_report(reports, RPT_ERROR, "FaceMap.add(): cannot be called while object is in edit mode");
+ return;
+ }
+
+ while (index_len--)
+ ED_object_facemap_face_add(ob, fmap, *index++);
+
+ WM_main_add_notifier(NC_GEOM | ND_DATA, (ID *)ob->data);
+}
+
+static void rna_FaceMap_face_remove(ID *id, bFaceMap *fmap, ReportList *reports, int index_len, int *index)
+{
+ Object *ob = (Object *)id;
+
+ if (BKE_object_is_in_editmode(ob)) {
+ BKE_report(reports, RPT_ERROR, "FaceMap.add(): cannot be called while object is in edit mode");
+ return;
+ }
+
+ while (index_len--)
+ ED_object_facemap_face_remove(ob, fmap, *index++);
+
+ WM_main_add_notifier(NC_GEOM | ND_DATA, (ID *)ob->data);
+}
+
/* generic poll functions */
int rna_Lattice_object_poll(PointerRNA *UNUSED(ptr), PointerRNA value)
{
@@ -1581,6 +1686,49 @@ static void rna_def_vertex_group(BlenderRNA *brna)
RNA_def_function_return(func, parm);
}
+static void rna_def_face_map(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+ FunctionRNA *func;
+
+ srna = RNA_def_struct(brna, "FaceMap", NULL);
+ RNA_def_struct_sdna(srna, "bFaceMap");
+ RNA_def_struct_ui_text(srna, "Face Map", "Group of faces, each face can only be part of one map");
+ RNA_def_struct_ui_icon(srna, ICON_MOD_TRIANGULATE);
+
+ prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
+ RNA_def_property_ui_text(prop, "Name", "Face map name");
+ RNA_def_struct_name_property(srna, prop);
+ RNA_def_property_string_funcs(prop, NULL, NULL, "rna_FaceMap_name_set");
+ /* update data because modifiers may use [#24761] */
+ RNA_def_property_update(prop, NC_GEOM | ND_DATA | NA_RENAME, "rna_Object_internal_update_data");
+
+ prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", SELECT);
+ RNA_def_property_ui_text(prop, "Select", "Face-map selection state (for tools to use)");
+ /* important not to use a notifier here, creates a feedback loop! */
+
+ prop = RNA_def_property(srna, "index", PROP_INT, PROP_UNSIGNED);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_int_funcs(prop, "rna_FaceMap_index_get", NULL, NULL);
+ RNA_def_property_ui_text(prop, "Index", "Index number of the face map");
+
+ func = RNA_def_function(srna, "add", "rna_FaceMap_face_add");
+ RNA_def_function_ui_description(func, "Add vertices to the group");
+ RNA_def_function_flag(func, FUNC_USE_REPORTS | FUNC_USE_SELF_ID);
+ /* TODO, see how array size of 0 works, this shouldnt be used */
+ prop = RNA_def_int_array(func, "index", 1, NULL, 0, 0, "", "Index List", 0, 0);
+ RNA_def_parameter_flags(prop, PROP_DYNAMIC, PARM_REQUIRED);
+
+ func = RNA_def_function(srna, "remove", "rna_FaceMap_face_remove");
+ RNA_def_function_ui_description(func, "Remove a vertex from the group");
+ RNA_def_function_flag(func, FUNC_USE_REPORTS | FUNC_USE_SELF_ID);
+ /* TODO, see how array size of 0 works, this shouldnt be used */
+ prop = RNA_def_int_array(func, "index", 1, NULL, 0, 0, "", "Index List", 0, 0);
+ RNA_def_parameter_flags(prop, PROP_DYNAMIC, PARM_REQUIRED);
+}
+
static void rna_def_material_slot(BlenderRNA *brna)
{
StructRNA *srna;
@@ -2108,6 +2256,54 @@ static void rna_def_object_vertex_groups(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_ui_description(func, "Delete all vertex groups from object");
}
+/* object.face_maps */
+static void rna_def_object_face_maps(BlenderRNA *brna, PropertyRNA *cprop)
+{
+ StructRNA *srna;
+
+ PropertyRNA *prop;
+
+ FunctionRNA *func;
+ PropertyRNA *parm;
+
+ RNA_def_property_srna(cprop, "FaceMaps");
+ srna = RNA_def_struct(brna, "FaceMaps", NULL);
+ RNA_def_struct_sdna(srna, "Object");
+ RNA_def_struct_ui_text(srna, "Face Maps", "Collection of face maps");
+
+ prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
+ RNA_def_property_struct_type(prop, "FaceMap");
+ RNA_def_property_pointer_funcs(prop, "rna_Object_active_face_map_get",
+ "rna_Object_active_face_map_set", NULL, NULL);
+ RNA_def_property_ui_text(prop, "Active Face Map", "Face maps of the object");
+ RNA_def_property_update(prop, NC_GEOM | ND_DATA, "rna_Object_internal_update_data");
+
+ prop = RNA_def_property(srna, "active_index", PROP_INT, PROP_UNSIGNED);
+ RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
+ RNA_def_property_int_sdna(prop, NULL, "actfmap");
+ RNA_def_property_int_funcs(prop, "rna_Object_active_face_map_index_get",
+ "rna_Object_active_face_map_index_set",
+ "rna_Object_active_face_map_index_range");
+ RNA_def_property_ui_text(prop, "Active Face Map Index", "Active index in face map array");
+ RNA_def_property_update(prop, NC_GEOM | ND_DATA, "rna_Object_internal_update_data");
+
+ /* face maps */ /* add_face_map */
+ func = RNA_def_function(srna, "new", "rna_Object_fmap_new");
+ RNA_def_function_ui_description(func, "Add face map to object");
+ RNA_def_string(func, "name", "Map", 0, "", "face map name"); /* optional */
+ parm = RNA_def_pointer(func, "fmap", "FaceMap", "", "New face map");
+ RNA_def_function_return(func, parm);
+
+ func = RNA_def_function(srna, "remove", "rna_Object_fmap_remove");
+ RNA_def_function_flag(func, FUNC_USE_REPORTS);
+ RNA_def_function_ui_description(func, "Delete vertex group from object");
+ parm = RNA_def_pointer(func, "group", "FaceMap", "", "Face map to remove");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
+ RNA_def_property_clear_flag(parm, PROP_THICK_WRAP);
+
+ func = RNA_def_function(srna, "clear", "rna_Object_fmap_clear");
+ RNA_def_function_ui_description(func, "Delete all vertex groups from object");
+}
static void rna_def_object_lodlevel(BlenderRNA *brna)
{
@@ -2226,32 +2422,12 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Type", "Type of Object");
- prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
- RNA_def_property_enum_sdna(prop, NULL, "mode");
- RNA_def_property_enum_items(prop, rna_enum_object_mode_items);
- RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- RNA_def_property_ui_text(prop, "Mode", "Object interaction mode");
-
- prop = RNA_def_property(srna, "layers", PROP_BOOLEAN, PROP_LAYER_MEMBER);
- RNA_def_property_boolean_sdna(prop, NULL, "lay", 1);
- RNA_def_property_array(prop, 20);
- RNA_def_property_ui_text(prop, "Layers", "Layers the object is on");
- RNA_def_property_boolean_funcs(prop, NULL, "rna_Object_layer_set");
- RNA_def_property_flag(prop, PROP_LIB_EXCEPTION);
- RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_layer_update");
- RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
-
prop = RNA_def_property(srna, "layers_local_view", PROP_BOOLEAN, PROP_LAYER_MEMBER);
RNA_def_property_boolean_sdna(prop, NULL, "lay", 0x01000000);
RNA_def_property_array(prop, 8);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Local View Layers", "3D local view layers the object is on");
- prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", SELECT);
- RNA_def_property_ui_text(prop, "Select", "Object selection state");
- RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_select_update");
-
/* for data access */
prop = RNA_def_property(srna, "bound_box", PROP_FLOAT, PROP_NONE);
RNA_def_property_multi_array(prop, 2, boundbox_dimsize);
@@ -2264,7 +2440,7 @@ static void rna_def_object(BlenderRNA *brna)
/* parent */
prop = RNA_def_property(srna, "parent", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_funcs(prop, NULL, "rna_Object_parent_set", NULL, NULL);
- RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK | PROP_OVERRIDABLE_STATIC);
RNA_def_property_ui_text(prop, "Parent", "Parent Object");
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_dependency_update");
@@ -2342,6 +2518,7 @@ static void rna_def_object(BlenderRNA *brna)
prop = RNA_def_property(srna, "location", PROP_FLOAT, PROP_TRANSLATION);
RNA_def_property_float_sdna(prop, NULL, "loc");
RNA_def_property_editable_array_func(prop, "rna_Object_location_editable");
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
RNA_def_property_ui_text(prop, "Location", "Location of the object");
RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, "rna_Object_internal_update");
@@ -2349,6 +2526,7 @@ static void rna_def_object(BlenderRNA *brna)
prop = RNA_def_property(srna, "rotation_quaternion", PROP_FLOAT, PROP_QUATERNION);
RNA_def_property_float_sdna(prop, NULL, "quat");
RNA_def_property_editable_array_func(prop, "rna_Object_rotation_4d_editable");
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
RNA_def_property_float_array_default(prop, default_quat);
RNA_def_property_ui_text(prop, "Quaternion Rotation", "Rotation in Quaternions");
RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, "rna_Object_internal_update");
@@ -2362,12 +2540,14 @@ static void rna_def_object(BlenderRNA *brna)
"rna_Object_rotation_axis_angle_set", NULL);
RNA_def_property_editable_array_func(prop, "rna_Object_rotation_4d_editable");
RNA_def_property_float_array_default(prop, default_axisAngle);
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
RNA_def_property_ui_text(prop, "Axis-Angle Rotation", "Angle of Rotation for Axis-Angle rotation representation");
RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, "rna_Object_internal_update");
prop = RNA_def_property(srna, "rotation_euler", PROP_FLOAT, PROP_EULER);
RNA_def_property_float_sdna(prop, NULL, "rot");
RNA_def_property_editable_array_func(prop, "rna_Object_rotation_euler_editable");
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
RNA_def_property_ui_text(prop, "Euler Rotation", "Rotation in Eulers");
RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, "rna_Object_internal_update");
@@ -2380,7 +2560,7 @@ static void rna_def_object(BlenderRNA *brna)
prop = RNA_def_property(srna, "scale", PROP_FLOAT, PROP_XYZ);
RNA_def_property_float_sdna(prop, NULL, "size");
- RNA_def_property_flag(prop, PROP_PROPORTIONAL);
+ RNA_def_property_flag(prop, PROP_PROPORTIONAL | PROP_OVERRIDABLE_STATIC);
RNA_def_property_editable_array_func(prop, "rna_Object_scale_editable");
RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, 3);
RNA_def_property_float_array_default(prop, default_scale);
@@ -2507,6 +2687,7 @@ static void rna_def_object(BlenderRNA *brna)
prop = RNA_def_property(srna, "modifiers", PROP_COLLECTION, PROP_NONE);
RNA_def_property_struct_type(prop, "Modifier");
RNA_def_property_ui_text(prop, "Modifiers", "Modifiers affecting the geometric data of the object");
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
rna_def_object_modifiers(brna, prop);
/* constraints */
@@ -2530,6 +2711,14 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Vertex Groups", "Vertex groups of the object");
rna_def_object_vertex_groups(brna, prop);
+
+ /* face maps */
+ prop = RNA_def_property(srna, "face_maps", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_collection_sdna(prop, NULL, "fmaps", NULL);
+ RNA_def_property_struct_type(prop, "FaceMap");
+ RNA_def_property_ui_text(prop, "Face Maps", "Maps of faces of the object");
+ rna_def_object_face_maps(brna, prop);
+
/* empty */
prop = RNA_def_property(srna, "empty_draw_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "empty_drawtype");
@@ -2606,24 +2795,40 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Rigid Body Constraint", "Constraint constraining rigid bodies");
/* restrict */
- prop = RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "restrictflag", OB_RESTRICT_VIEW);
- RNA_def_property_ui_text(prop, "Restrict View", "Restrict visibility in the viewport");
- RNA_def_property_ui_icon(prop, ICON_RESTRICT_VIEW_OFF, 1);
- RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_hide_update");
-
- prop = RNA_def_property(srna, "hide_select", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "restrictflag", OB_RESTRICT_SELECT);
- RNA_def_property_ui_text(prop, "Restrict Select", "Restrict selection in the viewport");
- RNA_def_property_ui_icon(prop, ICON_RESTRICT_SELECT_OFF, 1);
- RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
-
prop = RNA_def_property(srna, "hide_render", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "restrictflag", OB_RESTRICT_RENDER);
RNA_def_property_ui_text(prop, "Restrict Render", "Restrict renderability");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_OFF, 1);
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_hide_update");
+ prop = RNA_def_property(srna, "show_duplicator_for_render", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "duplicator_visibility_flag", OB_DUPLI_FLAG_RENDER);
+ RNA_def_property_ui_text(prop, "Render Duplicator", "Make duplicator visible when rendering");
+
+ prop = RNA_def_property(srna, "show_duplicator_for_viewport", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "duplicator_visibility_flag", OB_DUPLI_FLAG_VIEWPORT);
+ RNA_def_property_ui_text(prop, "Show Duplicator", "Make duplicator visible in the viewport");
+
+ prop = RNA_def_property(srna, "is_visible", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(prop, "rna_Object_is_visible_get", NULL);
+ RNA_def_property_ui_text(prop, "Visible", "Visible to camera rays, set only on objects evaluated by depsgraph");
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+
+ prop = RNA_def_property(srna, "collection_properties", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_collection_sdna(prop, NULL, "base_collection_properties->data.group", NULL);
+ RNA_def_property_collection_funcs(prop,
+ "rna_Object_collection_properties_begin",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ RNA_def_property_struct_type(prop, "LayerCollectionSettings");
+ RNA_def_property_ui_text(prop, "Collection Settings",
+ "Engine specific render settings to be overridden by collections");
+
/* anim */
rna_def_animdata_common(srna);
@@ -2644,20 +2849,12 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_range(prop, MINAFRAMEF, MAXFRAMEF);
RNA_def_property_ui_text(prop, "Slow Parent Offset", "Delay in the parent relationship");
RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, "rna_Object_internal_update");
-
- /* depsgraph hack */
- prop = RNA_def_property(srna, "use_extra_recalc_object", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "depsflag", OB_DEPS_EXTRA_OB_RECALC);
- RNA_def_property_ui_text(prop, "Extra Object Update", "Refresh this object again on frame changes, dependency graph hack");
-
- prop = RNA_def_property(srna, "use_extra_recalc_data", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "depsflag", OB_DEPS_EXTRA_DATA_RECALC);
- RNA_def_property_ui_text(prop, "Extra Data Update", "Refresh this object's data again on frame changes, dependency graph hack");
-
+
/* duplicates */
prop = RNA_def_property(srna, "dupli_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "transflag");
RNA_def_property_enum_items(prop, dupli_items);
+ RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Object_dupli_type_itemf");
RNA_def_property_ui_text(prop, "Dupli Type", "If not None, object duplication method to use");
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_dependency_update");
@@ -2798,6 +2995,7 @@ static void rna_def_object(BlenderRNA *brna)
prop = RNA_def_property(srna, "pose", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "pose");
RNA_def_property_struct_type(prop, "Pose");
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
RNA_def_property_ui_text(prop, "Pose", "Current pose for armatures");
/* shape keys */
@@ -2839,6 +3037,17 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Level of Detail Levels", "A collection of detail levels to automatically switch between");
RNA_def_property_update(prop, NC_OBJECT | ND_LOD, NULL);
+ /* Base Settings */
+ prop = RNA_def_property(srna, "is_from_duplicator", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "base_flag", BASE_FROMDUPLI);
+ RNA_def_property_ui_text(prop, "Base from Duplicator", "Object comes from a duplicator");
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+
+ prop = RNA_def_property(srna, "is_from_set", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "base_flag", BASE_FROM_SET);
+ RNA_def_property_ui_text(prop, "Base from Set", "Object comes from a background set");
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+
RNA_api_object(srna);
}
@@ -2900,50 +3109,14 @@ static void rna_def_dupli_object(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Dupli random id", "Random id for this dupli object");
}
-static void rna_def_object_base(BlenderRNA *brna)
-{
- StructRNA *srna;
- PropertyRNA *prop;
-
- srna = RNA_def_struct(brna, "ObjectBase", NULL);
- RNA_def_struct_sdna(srna, "Base");
- RNA_def_struct_ui_text(srna, "Object Base", "An object instance in a scene");
- RNA_def_struct_ui_icon(srna, ICON_OBJECT_DATA);
-
- prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
- RNA_def_property_pointer_sdna(prop, NULL, "object");
- RNA_def_property_ui_text(prop, "Object", "Object this base links to");
-
- /* same as object layer */
- prop = RNA_def_property(srna, "layers", PROP_BOOLEAN, PROP_LAYER_MEMBER);
- RNA_def_property_boolean_sdna(prop, NULL, "lay", 1);
- RNA_def_property_array(prop, 20);
- RNA_def_property_ui_text(prop, "Layers", "Layers the object base is on");
- RNA_def_property_boolean_funcs(prop, NULL, "rna_Base_layer_set");
- RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Base_layer_update");
-
- prop = RNA_def_property(srna, "layers_local_view", PROP_BOOLEAN, PROP_LAYER_MEMBER);
- RNA_def_property_boolean_sdna(prop, NULL, "lay", 0x01000000);
- RNA_def_property_array(prop, 8);
- RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- RNA_def_property_ui_text(prop, "Local View Layers", "3D local view layers the object base is on");
-
- prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", BA_SELECT);
- RNA_def_property_ui_text(prop, "Select", "Object base selection state");
- RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Base_select_update");
-
- RNA_api_object_base(srna);
-}
-
void RNA_def_object(BlenderRNA *brna)
{
rna_def_object(brna);
RNA_define_animate_sdna(false);
rna_def_object_game_settings(brna);
- rna_def_object_base(brna);
rna_def_vertex_group(brna);
+ rna_def_face_map(brna);
rna_def_material_slot(brna);
rna_def_dupli_object(brna);
RNA_define_animate_sdna(true);
diff --git a/source/blender/makesrna/intern/rna_object_api.c b/source/blender/makesrna/intern/rna_object_api.c
index 836c077aaf3..17f19bfc38c 100644
--- a/source/blender/makesrna/intern/rna_object_api.c
+++ b/source/blender/makesrna/intern/rna_object_api.c
@@ -40,10 +40,13 @@
#include "RNA_define.h"
#include "DNA_constraint_types.h"
+#include "DNA_layer_types.h"
#include "DNA_modifier_types.h"
#include "DNA_object_types.h"
-#include "BKE_depsgraph.h"
+#include "BKE_layer.h"
+
+#include "DEG_depsgraph.h"
#include "rna_internal.h" /* own include */
@@ -88,7 +91,61 @@ static const EnumPropertyItem space_items[] = {
#include "MEM_guardedalloc.h"
-#include "DEG_depsgraph.h"
+static void rna_Object_select_set(Object *ob, bContext *C, ReportList *reports, int action)
+{
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Base *base = BKE_view_layer_base_find(view_layer, ob);
+
+ if (!base) {
+ BKE_reportf(reports, RPT_ERROR, "Object '%s' not in Render Layer '%s'!", ob->id.name + 2, view_layer->name);
+ return;
+ }
+
+ if (action == 2) { /* TOGGLE */
+ if ((base->flag & BASE_SELECTED) != 0) {
+ action = 1; /* DESELECT */
+ }
+ else {
+ action = 0; /* SELECT */
+ }
+ }
+
+ switch (action) {
+ case 1: /* DESELECT */
+ base->flag &= ~BASE_SELECTED;
+ break;
+ case 0: /* SELECT */
+ default:
+ BKE_view_layer_base_select(view_layer, base);
+ break;
+ }
+}
+
+static int rna_Object_select_get(Object *ob, bContext *C, ReportList *reports)
+{
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Base *base = BKE_view_layer_base_find(view_layer, ob);
+
+ if (!base) {
+ BKE_reportf(reports, RPT_ERROR, "Object '%s' not in Render Layer '%s'!", ob->id.name + 2, view_layer->name);
+ return -1;
+ }
+
+ return ((base->flag & BASE_SELECTED) != 0) ? 1 : 0;
+}
+
+static int rna_Object_visible_get(Object *ob, bContext *C, ReportList *reports)
+{
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Base *base = BKE_view_layer_base_find(view_layer, ob);
+
+ if (!base) {
+ BKE_reportf(reports, RPT_ERROR, "Object '%s' not in Render Layer '%s'!", ob->id.name + 2, view_layer->name);
+ return -1;
+ }
+
+ return ((base->flag & BASE_VISIBLED) != 0) ? 1 : 0;
+}
/* Convert a given matrix from a space to another (using the object and/or a bone as reference). */
static void rna_Scene_mat_convert_space(Object *ob, ReportList *reports, bPoseChannel *pchan,
@@ -140,14 +197,16 @@ static void rna_Object_camera_fit_coords(
/* copied from Mesh_getFromObject and adapted to RNA interface */
/* settings: 0 - preview, 1 - render */
static Mesh *rna_Object_to_mesh(
- Object *ob, ReportList *reports, Scene *sce,
+ Object *ob, bContext *C, ReportList *reports, Scene *sce, ViewLayer *view_layer,
int apply_modifiers, int settings, int calc_tessface, int calc_undeformed)
{
- return rna_Main_meshes_new_from_object(G.main, reports, sce, ob, apply_modifiers, settings, calc_tessface, calc_undeformed);
+ Main *bmain = CTX_data_main(C);
+
+ return rna_Main_meshes_new_from_object(bmain, reports, sce, view_layer, ob, apply_modifiers, settings, calc_tessface, calc_undeformed);
}
/* mostly a copy from convertblender.c */
-static void dupli_render_particle_set(Scene *scene, Object *ob, int level, int enable)
+static void dupli_render_particle_set(EvaluationContext *eval_ctx, Scene *scene, Object *ob, int level, int enable)
{
/* ugly function, but we need to set particle systems to their render
* settings before calling object_duplilist, to get render level duplis */
@@ -176,7 +235,7 @@ static void dupli_render_particle_set(Scene *scene, Object *ob, int level, int e
/* this is to make sure we get render level duplis in groups:
* the derivedmesh must be created before init_render_mesh,
* since object_duplilist does dupliparticles before that */
- dm = mesh_create_derived_render(scene, ob, CD_MASK_BAREMESH | CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL);
+ dm = mesh_create_derived_render(eval_ctx, scene, ob, CD_MASK_BAREMESH | CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL);
dm->release(dm);
for (psys = ob->particlesystem.first; psys; psys = psys->next)
@@ -188,14 +247,17 @@ static void dupli_render_particle_set(Scene *scene, Object *ob, int level, int e
group = ob->dup_group;
for (go = group->gobject.first; go; go = go->next)
- dupli_render_particle_set(scene, go->ob, level + 1, enable);
+ dupli_render_particle_set(eval_ctx, scene, go->ob, level + 1, enable);
}
/* When no longer needed, duplilist should be freed with Object.free_duplilist */
-static void rna_Object_create_duplilist(Object *ob, ReportList *reports, Scene *sce, int settings)
+static void rna_Object_create_duplilist(Object *ob, bContext *C, ReportList *reports, Scene *sce, int settings)
{
bool for_render = (settings == DAG_EVAL_RENDER);
EvaluationContext eval_ctx;
- DEG_evaluation_context_init(&eval_ctx, settings);
+
+ CTX_data_eval_ctx(C, &eval_ctx);
+
+ eval_ctx.mode = settings;
if (!(ob->transflag & OB_DUPLI)) {
BKE_report(reports, RPT_ERROR, "Object does not have duplis");
@@ -210,10 +272,10 @@ static void rna_Object_create_duplilist(Object *ob, ReportList *reports, Scene *
ob->duplilist = NULL;
}
if (for_render)
- dupli_render_particle_set(sce, ob, 0, 1);
+ dupli_render_particle_set(&eval_ctx, sce, ob, 0, 1);
ob->duplilist = object_duplilist(&eval_ctx, sce, ob);
if (for_render)
- dupli_render_particle_set(sce, ob, 0, 0);
+ dupli_render_particle_set(&eval_ctx, sce, ob, 0, 0);
/* ob->duplilist should now be freed with Object.free_duplilist */
}
@@ -261,17 +323,12 @@ static void rna_Object_shape_key_remove(
return;
}
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_main_add_notifier(NC_OBJECT | ND_DRAW, ob);
RNA_POINTER_INVALIDATE(kb_ptr);
}
-static int rna_Object_is_visible(Object *ob, Scene *sce)
-{
- return !(ob->restrictflag & OB_RESTRICT_VIEW) && (ob->lay & sce->lay);
-}
-
#if 0
static void rna_Mesh_assign_verts_to_group(Object *ob, bDeformGroup *group, int *indices, int totindex,
float weight, int assignmode)
@@ -419,13 +476,6 @@ finally:
free_bvhtree_from_mesh(&treeData);
}
-/* ObjectBase */
-
-static void rna_ObjectBase_layers_from_view(Base *base, View3D *v3d)
-{
- base->lay = base->object->lay = v3d->lay;
-}
-
static int rna_Object_is_modified(Object *ob, Scene *scene, int settings)
{
return BKE_object_is_modified(scene, ob) & settings;
@@ -476,6 +526,7 @@ void rna_Object_dm_info(struct Object *ob, int type, char *result)
static int rna_Object_update_from_editmode(Object *ob)
{
+ /* fail gracefully if we aren't in edit-mode. */
return ED_object_editmode_load(ob);
}
#else /* RNA_RUNTIME */
@@ -507,6 +558,32 @@ void RNA_api_object(StructRNA *srna)
};
#endif
+ static EnumPropertyItem object_select_items[] = {
+ {0, "SELECT", 0, "Select", "Select object from the active render layer"},
+ {1, "DESELECT", 0, "Deselect", "Deselect object from the active render layer"},
+ {2, "TOGGLE", 0, "Toggle", "Toggle object selection from the active render layer"},
+ {0, NULL, 0, NULL, NULL}
+ };
+
+ /* Special wrapper to access the base selection value */
+ func = RNA_def_function(srna, "select_set", "rna_Object_select_set");
+ RNA_def_function_ui_description(func, "Select the object (for the active render layer)");
+ RNA_def_function_flag(func, FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
+ parm = RNA_def_enum(func, "action", object_select_items, 0, "Action", "Select mode");
+ RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+
+ func = RNA_def_function(srna, "select_get", "rna_Object_select_get");
+ RNA_def_function_ui_description(func, "Get the object selection for the active render layer");
+ RNA_def_function_flag(func, FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
+ parm = RNA_def_boolean(func, "result", 0, "", "Object selected");
+ RNA_def_function_return(func, parm);
+
+ func = RNA_def_function(srna, "visible_get", "rna_Object_visible_get");
+ RNA_def_function_ui_description(func, "Get the object visibility for the active render layer");
+ RNA_def_function_flag(func, FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
+ parm = RNA_def_boolean(func, "result", 0, "", "Object visible");
+ RNA_def_function_return(func, parm);
+
/* Matrix space conversion */
func = RNA_def_function(srna, "convert_space", "rna_Scene_mat_convert_space");
RNA_def_function_ui_description(func, "Convert (transform) the given matrix from one space to another");
@@ -558,9 +635,11 @@ void RNA_api_object(StructRNA *srna)
/* mesh */
func = RNA_def_function(srna, "to_mesh", "rna_Object_to_mesh");
RNA_def_function_ui_description(func, "Create a Mesh data-block with modifiers applied");
- RNA_def_function_flag(func, FUNC_USE_REPORTS);
+ RNA_def_function_flag(func, FUNC_USE_REPORTS | FUNC_USE_CONTEXT);
parm = RNA_def_pointer(func, "scene", "Scene", "", "Scene within which to evaluate modifiers");
RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
+ parm = RNA_def_pointer(func, "view_layer", "ViewLayer", "", "Scene layer within which to evaluate modifiers");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
parm = RNA_def_boolean(func, "apply_modifiers", 0, "", "Apply modifiers");
RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
parm = RNA_def_enum(func, "settings", mesh_type_items, 0, "", "Modifier settings to apply");
@@ -579,7 +658,7 @@ void RNA_api_object(StructRNA *srna)
parm = RNA_def_pointer(func, "scene", "Scene", "", "Scene within which to evaluate duplis");
RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
RNA_def_enum(func, "settings", dupli_eval_mode_items, 0, "", "Generate texture coordinates for rendering");
- RNA_def_function_flag(func, FUNC_USE_REPORTS);
+ RNA_def_function_flag(func, FUNC_USE_REPORTS | FUNC_USE_CONTEXT);
func = RNA_def_function(srna, "dupli_list_clear", "rna_Object_free_duplilist");
RNA_def_function_ui_description(func, "Free the list of dupli objects");
@@ -661,12 +740,6 @@ void RNA_api_object(StructRNA *srna)
RNA_def_function_output(func, parm);
/* View */
- func = RNA_def_function(srna, "is_visible", "rna_Object_is_visible");
- RNA_def_function_ui_description(func, "Determine if object is visible in a given scene");
- parm = RNA_def_pointer(func, "scene", "Scene", "", "");
- RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
- parm = RNA_def_boolean(func, "result", 0, "", "Object visibility");
- RNA_def_function_return(func, parm);
/* utility function for checking if the object is modified */
func = RNA_def_function(srna, "is_modified", "rna_Object_is_modified");
@@ -709,17 +782,4 @@ void RNA_api_object(StructRNA *srna)
RNA_def_function_ui_description(func, "Release memory used by caches associated with this object. Intended to be used by render engines only");
}
-
-void RNA_api_object_base(StructRNA *srna)
-{
- FunctionRNA *func;
- PropertyRNA *parm;
-
- func = RNA_def_function(srna, "layers_from_view", "rna_ObjectBase_layers_from_view");
- RNA_def_function_ui_description(func,
- "Sets the object layers from a 3D View (use when adding an object in local view)");
- parm = RNA_def_pointer(func, "view", "SpaceView3D", "", "");
- RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
-}
-
#endif /* RNA_RUNTIME */
diff --git a/source/blender/makesrna/intern/rna_object_force.c b/source/blender/makesrna/intern/rna_object_force.c
index b3808e4dde0..32edabe37d9 100644
--- a/source/blender/makesrna/intern/rna_object_force.c
+++ b/source/blender/makesrna/intern/rna_object_force.c
@@ -53,6 +53,7 @@ static const EnumPropertyItem effector_shape_items[] = {
#include "BLI_math_base.h"
+#include "BKE_main.h"
/* type specific return values only used from functions */
static const EnumPropertyItem curve_shape_items[] = {
@@ -94,10 +95,13 @@ static const EnumPropertyItem empty_vortex_shape_items[] = {
#include "DNA_modifier_types.h"
#include "DNA_texture_types.h"
+#include "BKE_collection.h"
#include "BKE_context.h"
#include "BKE_modifier.h"
#include "BKE_pointcache.h"
-#include "BKE_depsgraph.h"
+
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
#include "ED_object.h"
@@ -115,7 +119,7 @@ static void rna_Cache_change(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerR
BKE_ptcache_ids_from_object(&pidlist, ob, NULL, 0);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
for (pid = pidlist.first; pid; pid = pid->next) {
if (pid->cache == cache)
@@ -184,7 +188,7 @@ static void rna_Cache_idname_change(Main *UNUSED(bmain), Scene *UNUSED(scene), P
BKE_ptcache_load_external(pid);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_main_add_notifier(NC_OBJECT | ND_POINTCACHE, ob);
}
else {
@@ -499,7 +503,7 @@ static void rna_FieldSettings_update(Main *UNUSED(bmain), Scene *UNUSED(scene),
part->pd2->tex = NULL;
}
- DAG_id_tag_update(&part->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME | PSYS_RECALC_RESET);
+ DEG_id_tag_update(&part->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME | PSYS_RECALC_RESET);
WM_main_add_notifier(NC_OBJECT | ND_DRAW, NULL);
}
@@ -511,7 +515,7 @@ static void rna_FieldSettings_update(Main *UNUSED(bmain), Scene *UNUSED(scene),
ob->pd->tex = NULL;
}
- DAG_id_tag_update(&ob->id, OB_RECALC_OB);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB);
WM_main_add_notifier(NC_OBJECT | ND_DRAW, ob);
}
}
@@ -520,7 +524,7 @@ static void rna_FieldSettings_shape_update(Main *bmain, Scene *scene, PointerRNA
{
if (!particle_id_check(ptr)) {
Object *ob = (Object *)ptr->id.data;
- ED_object_check_force_modifiers(bmain, scene, ob);
+ ED_object_check_force_modifiers(bmain, scene, ob, bmain->eval_ctx->object_mode);
WM_main_add_notifier(NC_OBJECT | ND_DRAW, ob);
WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ob);
}
@@ -547,7 +551,7 @@ static void rna_FieldSettings_type_set(PointerRNA *ptr, int value)
static void rna_FieldSettings_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
if (particle_id_check(ptr)) {
- DAG_id_tag_update((ID *)ptr->id.data, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME | PSYS_RECALC_RESET);
+ DEG_id_tag_update((ID *)ptr->id.data, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME | PSYS_RECALC_RESET);
}
else {
Object *ob = (Object *)ptr->id.data;
@@ -563,12 +567,12 @@ static void rna_FieldSettings_dependency_update(Main *bmain, Scene *scene, Point
rna_FieldSettings_shape_update(bmain, scene, ptr);
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
if (ob->type == OB_CURVE && ob->pd->forcefield == PFIELD_GUIDE)
- DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
else
- DAG_id_tag_update(&ob->id, OB_RECALC_OB);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB);
WM_main_add_notifier(NC_OBJECT | ND_DRAW, ob);
}
@@ -605,23 +609,23 @@ static void rna_EffectorWeight_update(Main *UNUSED(bmain), Scene *UNUSED(scene),
if (id && GS(id->name) == ID_SCE) {
Scene *scene = (Scene *)id;
- Base *base;
-
- for (base = scene->base.first; base; base = base->next) {
- BKE_ptcache_object_reset(scene, base->object, PTCACHE_RESET_DEPSGRAPH);
+ FOREACH_SCENE_OBJECT(scene, ob)
+ {
+ BKE_ptcache_object_reset(scene, ob, PTCACHE_RESET_DEPSGRAPH);
}
+ FOREACH_SCENE_OBJECT_END
}
else {
- DAG_id_tag_update(id, OB_RECALC_DATA | PSYS_RECALC_RESET);
+ DEG_id_tag_update(id, OB_RECALC_DATA | PSYS_RECALC_RESET);
WM_main_add_notifier(NC_OBJECT | ND_DRAW, NULL);
}
}
static void rna_EffectorWeight_dependency_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
- DAG_id_tag_update((ID *)ptr->id.data, OB_RECALC_DATA | PSYS_RECALC_RESET);
+ DEG_id_tag_update((ID *)ptr->id.data, OB_RECALC_DATA | PSYS_RECALC_RESET);
WM_main_add_notifier(NC_OBJECT | ND_DRAW, NULL);
}
@@ -707,7 +711,7 @@ static void rna_CollisionSettings_dependency_update(Main *bmain, Scene *scene, P
/* add/remove modifier as needed */
if (ob->pd->deflect && !md)
- ED_object_modifier_add(NULL, bmain, scene, ob, NULL, eModifierType_Collision);
+ ED_object_modifier_add(NULL, bmain, scene, ob, bmain->eval_ctx->object_mode , NULL, eModifierType_Collision);
else if (!ob->pd->deflect && md)
ED_object_modifier_remove(NULL, bmain, ob, md);
@@ -718,7 +722,7 @@ static void rna_CollisionSettings_update(Main *UNUSED(bmain), Scene *UNUSED(scen
{
Object *ob = (Object *)ptr->id.data;
- DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
+ DEG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
WM_main_add_notifier(NC_OBJECT | ND_DRAW, ob);
}
@@ -726,13 +730,13 @@ static void rna_softbody_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Point
{
Object *ob = (Object *)ptr->id.data;
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ob);
}
static void rna_softbody_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
rna_softbody_update(bmain, scene, ptr);
}
@@ -1685,7 +1689,7 @@ static void rna_def_softbody(BlenderRNA *brna)
prop = RNA_def_property(srna, "spring_length", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "springpreload");
RNA_def_property_range(prop, 0.0f, 200.0f);
- RNA_def_property_ui_text(prop, "SL", "Alter spring length to shrink/blow up (unit %) 0 to disable");
+ RNA_def_property_ui_text(prop, "view_layer", "Alter spring length to shrink/blow up (unit %) 0 to disable");
RNA_def_property_update(prop, 0, "rna_softbody_update");
prop = RNA_def_property(srna, "aero", PROP_INT, PROP_NONE);
diff --git a/source/blender/makesrna/intern/rna_particle.c b/source/blender/makesrna/intern/rna_particle.c
index 9e52457d32a..1064b9f00f0 100644
--- a/source/blender/makesrna/intern/rna_particle.c
+++ b/source/blender/makesrna/intern/rna_particle.c
@@ -135,7 +135,6 @@ static const EnumPropertyItem part_hair_ren_as_items[] = {
#include "BKE_cloth.h"
#include "BKE_colortools.h"
#include "BKE_deform.h"
-#include "BKE_depsgraph.h"
#include "BKE_DerivedMesh.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_effect.h"
@@ -145,6 +144,9 @@ static const EnumPropertyItem part_hair_ren_as_items[] = {
#include "BKE_pointcache.h"
#include "BKE_texture.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
/* use for object space hair get/set */
static void rna_ParticleHairKey_location_object_info(PointerRNA *ptr, ParticleSystemModifierData **psmd_pt,
ParticleData **pa_pt)
@@ -612,8 +614,14 @@ static void rna_ParticleSystem_mcol_on_emitter(ParticleSystem *particlesystem, R
}
}
-static void rna_ParticleSystem_set_resolution(ParticleSystem *particlesystem, Scene *scene, Object *object, int resolution)
+static void rna_ParticleSystem_set_resolution(ParticleSystem *particlesystem, Scene *scene, ViewLayer *view_layer, Object *object, int resolution)
{
+ EvaluationContext eval_ctx;
+
+ DEG_evaluation_context_init(&eval_ctx, resolution);
+ eval_ctx.ctime = (float)scene->r.cfra + scene->r.subframe;
+ eval_ctx.view_layer = view_layer;
+
if (resolution == eModifierMode_Render) {
ParticleSystemModifierData *psmd = psys_get_modifier(object, particlesystem);
float mat[4][4];
@@ -622,7 +630,7 @@ static void rna_ParticleSystem_set_resolution(ParticleSystem *particlesystem, Sc
psys_render_set(object, particlesystem, mat, mat, 1, 1, 0.f);
psmd->flag &= ~eParticleSystemFlag_psys_updated;
- particle_system_update(scene, object, particlesystem, true);
+ particle_system_update(&eval_ctx, scene, object, particlesystem, true);
}
else {
ParticleSystemModifierData *psmd = psys_get_modifier(object, particlesystem);
@@ -632,7 +640,7 @@ static void rna_ParticleSystem_set_resolution(ParticleSystem *particlesystem, Sc
}
psmd->flag &= ~eParticleSystemFlag_psys_updated;
- particle_system_update(scene, object, particlesystem, false);
+ particle_system_update(&eval_ctx, scene, object, particlesystem, false);
}
}
@@ -643,10 +651,10 @@ static void particle_recalc(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRN
psys->recalc = flag;
- DAG_id_tag_update(ptr->id.data, OB_RECALC_DATA);
+ DEG_id_tag_update(ptr->id.data, OB_RECALC_DATA);
}
else
- DAG_id_tag_update(ptr->id.data, OB_RECALC_DATA | flag);
+ DEG_id_tag_update(ptr->id.data, OB_RECALC_DATA | flag);
WM_main_add_notifier(NC_OBJECT | ND_PARTICLE | NA_EDITED, NULL);
}
@@ -657,7 +665,7 @@ static void rna_Particle_redo(Main *bmain, Scene *scene, PointerRNA *ptr)
static void rna_Particle_redo_dependency(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
rna_Particle_redo(bmain, scene, ptr);
}
@@ -668,14 +676,14 @@ static void rna_Particle_reset(Main *bmain, Scene *scene, PointerRNA *ptr)
static void rna_Particle_reset_dependency(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
rna_Particle_reset(bmain, scene, ptr);
}
static void rna_Particle_change_type(Main *bmain, Scene *scene, PointerRNA *ptr)
{
particle_recalc(bmain, scene, ptr, PSYS_RECALC_RESET | PSYS_RECALC_TYPE);
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
}
static void rna_Particle_change_physics(Main *bmain, Scene *scene, PointerRNA *ptr)
@@ -692,7 +700,7 @@ static void rna_Particle_cloth_update(Main *UNUSED(bmain), Scene *UNUSED(scene),
{
Object *ob = (Object *)ptr->id.data;
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ob);
}
@@ -737,8 +745,8 @@ static void rna_Particle_target_reset(Main *bmain, Scene *UNUSED(scene), Pointer
psys->recalc = PSYS_RECALC_RESET;
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
- DAG_relations_tag_update(bmain);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_relations_tag_update(bmain);
}
WM_main_add_notifier(NC_OBJECT | ND_PARTICLE | NA_EDITED, NULL);
@@ -753,7 +761,7 @@ static void rna_Particle_target_redo(Main *UNUSED(bmain), Scene *UNUSED(scene),
psys->recalc = PSYS_RECALC_REDO;
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_main_add_notifier(NC_OBJECT | ND_PARTICLE | NA_EDITED, NULL);
}
}
@@ -774,9 +782,10 @@ static void rna_Particle_hair_dynamics_update(Main *bmain, Scene *scene, Pointer
WM_main_add_notifier(NC_OBJECT | ND_PARTICLE | NA_EDITED, NULL);
}
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
- DAG_relations_tag_update(bmain);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_relations_tag_update(bmain);
}
+
static PointerRNA rna_particle_settings_get(PointerRNA *ptr)
{
ParticleSystem *psys = (ParticleSystem *)ptr->data;
@@ -2283,11 +2292,6 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Size", "Show particle size");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop = RNA_def_property(srna, "use_render_emitter", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_EMITTER);
- RNA_def_property_ui_text(prop, "Emitter", "Render emitter Object also");
- RNA_def_property_update(prop, 0, "rna_Particle_redo");
-
prop = RNA_def_property(srna, "show_health", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_HEALTH);
RNA_def_property_ui_text(prop, "Health", "Draw boid health");
@@ -2375,10 +2379,10 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Draw Color", "Draw additional particle data as a color");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop = RNA_def_property(srna, "draw_size", PROP_INT, PROP_PIXEL);
+ prop = RNA_def_property(srna, "draw_size", PROP_FLOAT, PROP_NONE);
RNA_def_property_range(prop, 0, 1000);
RNA_def_property_ui_range(prop, 0, 100, 1, -1);
- RNA_def_property_ui_text(prop, "Draw Size", "Size of particles on viewport in pixels (0=default)");
+ RNA_def_property_ui_text(prop, "Draw Size", "Size of particles on viewport in BU (0.1 = default)");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
prop = RNA_def_property(srna, "child_type", PROP_ENUM, PROP_NONE);
@@ -3548,6 +3552,7 @@ static void rna_def_particle_system(BlenderRNA *brna)
func = RNA_def_function(srna, "set_resolution", "rna_ParticleSystem_set_resolution");
RNA_def_function_ui_description(func, "Set the resolution to use for the number of particles");
RNA_def_pointer(func, "scene", "Scene", "", "Scene");
+ RNA_def_pointer(func, "view_layer", "ViewLayer", "", "ViewLayer");
RNA_def_pointer(func, "object", "Object", "", "Object");
RNA_def_enum(func, "resolution", resolution_items, 0, "", "Resolution settings to apply");
diff --git a/source/blender/makesrna/intern/rna_pose.c b/source/blender/makesrna/intern/rna_pose.c
index ac27a6c21a5..f50be85c446 100644
--- a/source/blender/makesrna/intern/rna_pose.c
+++ b/source/blender/makesrna/intern/rna_pose.c
@@ -106,9 +106,11 @@ const EnumPropertyItem rna_enum_color_sets_items[] = {
#include "BKE_context.h"
#include "BKE_constraint.h"
-#include "BKE_depsgraph.h"
#include "BKE_idprop.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#include "ED_object.h"
#include "ED_armature.h"
@@ -120,7 +122,7 @@ static void rna_Pose_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRN
{
/* XXX when to use this? ob->pose->flag |= (POSE_LOCKED|POSE_DO_UNLOCK); */
- DAG_id_tag_update(ptr->id.data, OB_RECALC_DATA);
+ DEG_id_tag_update(ptr->id.data, OB_RECALC_DATA);
}
static void rna_Pose_IK_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
@@ -128,7 +130,7 @@ static void rna_Pose_IK_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Pointe
/* XXX when to use this? ob->pose->flag |= (POSE_LOCKED|POSE_DO_UNLOCK); */
Object *ob = ptr->id.data;
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
BIK_clear_data(ob->pose);
}
@@ -233,13 +235,13 @@ static void rna_Pose_ik_solver_update(Main *bmain, Scene *UNUSED(scene), Pointer
bPose *pose = ptr->data;
BKE_pose_tag_recalc(bmain, pose); /* checks & sorts pose channels */
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
BKE_pose_update_constraint_flags(pose);
object_test_constraints(ob);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA | OB_RECALC_OB);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA | OB_RECALC_OB);
}
/* rotation - axis-angle */
@@ -349,7 +351,7 @@ static void rna_Itasc_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerR
itasc->maxvel = 100.f;
BIK_update_param(ob->pose);
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
}
static void rna_Itasc_update_rebuild(Main *bmain, Scene *scene, PointerRNA *ptr)
@@ -671,7 +673,7 @@ static void rna_PoseChannel_matrix_set(PointerRNA *ptr, const float *values)
Object *ob = (Object *)ptr->id.data;
float tmat[4][4];
- BKE_armature_mat_pose_to_bone_ex(ob, pchan, (float (*)[4])values, tmat);
+ BKE_armature_mat_pose_to_bone_ex(NULL, ob, pchan, (float (*)[4])values, tmat);
BKE_pchan_apply_mat4(pchan, tmat, false); /* no compat for predictable result */
}
@@ -821,22 +823,26 @@ static void rna_def_pose_channel(BlenderRNA *brna)
prop = RNA_def_property(srna, "bone", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_struct_type(prop, "Bone");
+ RNA_def_property_flag(prop, PROP_PTR_NO_OWNERSHIP);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Bone", "Bone associated with this PoseBone");
prop = RNA_def_property(srna, "parent", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "PoseBone");
+ RNA_def_property_flag(prop, PROP_PTR_NO_OWNERSHIP);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Parent", "Parent of this pose bone");
prop = RNA_def_property(srna, "child", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "PoseBone");
+ RNA_def_property_flag(prop, PROP_PTR_NO_OWNERSHIP);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Child", "Child of this pose bone");
/* Transformation settings */
prop = RNA_def_property(srna, "location", PROP_FLOAT, PROP_TRANSLATION);
RNA_def_property_float_sdna(prop, NULL, "loc");
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
RNA_def_property_editable_array_func(prop, "rna_PoseChannel_location_editable");
RNA_def_property_ui_text(prop, "Location", "");
RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
@@ -844,7 +850,7 @@ static void rna_def_pose_channel(BlenderRNA *brna)
prop = RNA_def_property(srna, "scale", PROP_FLOAT, PROP_XYZ);
RNA_def_property_float_sdna(prop, NULL, "size");
- RNA_def_property_flag(prop, PROP_PROPORTIONAL);
+ RNA_def_property_flag(prop, PROP_PROPORTIONAL | PROP_OVERRIDABLE_STATIC);
RNA_def_property_editable_array_func(prop, "rna_PoseChannel_scale_editable");
RNA_def_property_float_array_default(prop, default_scale);
RNA_def_property_ui_text(prop, "Scale", "");
@@ -852,6 +858,7 @@ static void rna_def_pose_channel(BlenderRNA *brna)
prop = RNA_def_property(srna, "rotation_quaternion", PROP_FLOAT, PROP_QUATERNION);
RNA_def_property_float_sdna(prop, NULL, "quat");
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
RNA_def_property_editable_array_func(prop, "rna_PoseChannel_rotation_4d_editable");
RNA_def_property_float_array_default(prop, default_quat);
RNA_def_property_ui_text(prop, "Quaternion Rotation", "Rotation in Quaternions");
@@ -861,6 +868,7 @@ static void rna_def_pose_channel(BlenderRNA *brna)
* having a single one is better for Keyframing and other property-management situations...
*/
prop = RNA_def_property(srna, "rotation_axis_angle", PROP_FLOAT, PROP_AXISANGLE);
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
RNA_def_property_array(prop, 4);
RNA_def_property_float_funcs(prop, "rna_PoseChannel_rotation_axis_angle_get",
"rna_PoseChannel_rotation_axis_angle_set", NULL);
@@ -871,6 +879,7 @@ static void rna_def_pose_channel(BlenderRNA *brna)
prop = RNA_def_property(srna, "rotation_euler", PROP_FLOAT, PROP_EULER);
RNA_def_property_float_sdna(prop, NULL, "eul");
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
RNA_def_property_editable_array_func(prop, "rna_PoseChannel_rotation_euler_editable");
RNA_def_property_ui_text(prop, "Euler Rotation", "Rotation in Eulers");
RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_update");
@@ -1397,6 +1406,7 @@ static void rna_def_pose(BlenderRNA *brna)
prop = RNA_def_property(srna, "bones", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "chanbase", NULL);
RNA_def_property_struct_type(prop, "PoseBone");
+ RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
RNA_def_property_ui_text(prop, "Pose Bones", "Individual pose bones for the armature");
/* can be removed, only for fast lookup */
RNA_def_property_collection_funcs(prop, NULL, NULL, NULL, NULL, NULL, NULL, "rna_PoseBones_lookup_string", NULL);
diff --git a/source/blender/makesrna/intern/rna_render.c b/source/blender/makesrna/intern/rna_render.c
index d3b3ed51981..15487082217 100644
--- a/source/blender/makesrna/intern/rna_render.c
+++ b/source/blender/makesrna/intern/rna_render.c
@@ -33,6 +33,8 @@
#include "BLI_utildefines.h"
#include "BLI_path_util.h"
+#include "DEG_depsgraph.h"
+
#include "BKE_scene.h"
#include "BKE_image.h"
@@ -145,7 +147,7 @@ static void engine_unbind_display_space_shader(RenderEngine *UNUSED(engine))
IMB_colormanagement_finish_glsl_draw();
}
-static void engine_update(RenderEngine *engine, Main *bmain, Scene *scene)
+static void engine_update(RenderEngine *engine, Main *bmain, Depsgraph *graph, Scene *scene)
{
extern FunctionRNA rna_RenderEngine_update_func;
PointerRNA ptr;
@@ -157,24 +159,25 @@ static void engine_update(RenderEngine *engine, Main *bmain, Scene *scene)
RNA_parameter_list_create(&list, &ptr, func);
RNA_parameter_set_lookup(&list, "data", &bmain);
+ RNA_parameter_set_lookup(&list, "depsgraph", &graph);
RNA_parameter_set_lookup(&list, "scene", &scene);
engine->type->ext.call(NULL, &ptr, func, &list);
RNA_parameter_list_free(&list);
}
-static void engine_render(RenderEngine *engine, struct Scene *scene)
+static void engine_render_to_image(RenderEngine *engine, struct Depsgraph *depsgraph)
{
- extern FunctionRNA rna_RenderEngine_render_func;
+ extern FunctionRNA rna_RenderEngine_render_to_image_func;
PointerRNA ptr;
ParameterList list;
FunctionRNA *func;
RNA_pointer_create(NULL, engine->type->ext.srna, engine, &ptr);
- func = &rna_RenderEngine_render_func;
+ func = &rna_RenderEngine_render_to_image_func;
RNA_parameter_list_create(&list, &ptr, func);
- RNA_parameter_set_lookup(&list, "scene", &scene);
+ RNA_parameter_set_lookup(&list, "depsgraph", &depsgraph);
engine->type->ext.call(NULL, &ptr, func, &list);
RNA_parameter_list_free(&list);
@@ -225,15 +228,15 @@ static void engine_view_update(RenderEngine *engine, const struct bContext *cont
RNA_parameter_list_free(&list);
}
-static void engine_view_draw(RenderEngine *engine, const struct bContext *context)
+static void engine_render_to_view(RenderEngine *engine, const struct bContext *context)
{
- extern FunctionRNA rna_RenderEngine_view_draw_func;
+ extern FunctionRNA rna_RenderEngine_render_to_view_func;
PointerRNA ptr;
ParameterList list;
FunctionRNA *func;
RNA_pointer_create(NULL, engine->type->ext.srna, engine, &ptr);
- func = &rna_RenderEngine_view_draw_func;
+ func = &rna_RenderEngine_render_to_view_func;
RNA_parameter_list_create(&list, &ptr, func);
RNA_parameter_set_lookup(&list, "context", &context);
@@ -260,7 +263,24 @@ static void engine_update_script_node(RenderEngine *engine, struct bNodeTree *nt
RNA_parameter_list_free(&list);
}
-static void engine_update_render_passes(RenderEngine *engine, struct Scene *scene, struct SceneRenderLayer *srl)
+static void engine_collection_settings_create(RenderEngine *engine, struct IDProperty *props)
+{
+ extern FunctionRNA rna_RenderEngine_collection_settings_create_func;
+ PointerRNA ptr;
+ ParameterList list;
+ FunctionRNA *func;
+
+ RNA_pointer_create(NULL, engine->type->ext.srna, engine, &ptr);
+ func = &rna_RenderEngine_collection_settings_create_func;
+
+ RNA_parameter_list_create(&list, &ptr, func);
+ RNA_parameter_set_lookup(&list, "props", &props);
+ engine->type->ext.call(NULL, &ptr, func, &list);
+
+ RNA_parameter_list_free(&list);
+}
+
+static void engine_update_render_passes(RenderEngine *engine, struct Scene *scene, struct ViewLayer *view_layer)
{
extern FunctionRNA rna_RenderEngine_update_render_passes_func;
PointerRNA ptr;
@@ -272,7 +292,7 @@ static void engine_update_render_passes(RenderEngine *engine, struct Scene *scen
RNA_parameter_list_create(&list, &ptr, func);
RNA_parameter_set_lookup(&list, "scene", &scene);
- RNA_parameter_set_lookup(&list, "renderlayer", &srl);
+ RNA_parameter_set_lookup(&list, "renderlayer", &view_layer);
engine->type->ext.call(NULL, &ptr, func, &list);
RNA_parameter_list_free(&list);
@@ -302,7 +322,7 @@ static StructRNA *rna_RenderEngine_register(
RenderEngineType *et, dummyet = {NULL};
RenderEngine dummyengine = {NULL};
PointerRNA dummyptr;
- int have_function[7];
+ int have_function[8];
/* setup dummy engine & engine type to store static properties in */
dummyengine.type = &dummyet;
@@ -339,14 +359,15 @@ static StructRNA *rna_RenderEngine_register(
RNA_struct_blender_type_set(et->ext.srna, et);
et->update = (have_function[0]) ? engine_update : NULL;
- et->render = (have_function[1]) ? engine_render : NULL;
+ et->render_to_image = (have_function[1]) ? engine_render_to_image : NULL;
et->bake = (have_function[2]) ? engine_bake : NULL;
et->view_update = (have_function[3]) ? engine_view_update : NULL;
- et->view_draw = (have_function[4]) ? engine_view_draw : NULL;
+ et->render_to_view = (have_function[4]) ? engine_render_to_view : NULL;
et->update_script_node = (have_function[5]) ? engine_update_script_node : NULL;
et->update_render_passes = (have_function[6]) ? engine_update_render_passes : NULL;
+ et->collection_settings_create = (have_function[7]) ? engine_collection_settings_create : NULL;
- BLI_addtail(&R_engines, et);
+ RE_engines_register(bmain, et);
return et->ext.srna;
}
@@ -377,6 +398,16 @@ static PointerRNA rna_RenderEngine_render_get(PointerRNA *ptr)
}
}
+static PointerRNA rna_RenderEngine_view_layer_get(PointerRNA *ptr)
+{
+ RenderEngine *engine = (RenderEngine *)ptr->data;
+ if (engine->re != NULL) {
+ ViewLayer *view_layer = RE_engine_get_view_layer(engine->re);
+ return rna_pointer_inherit_refine(ptr, &RNA_ViewLayer, view_layer);
+ }
+ return rna_pointer_inherit_refine(ptr, &RNA_ViewLayer, NULL);
+}
+
static PointerRNA rna_RenderEngine_camera_override_get(PointerRNA *ptr)
{
RenderEngine *engine = (RenderEngine *)ptr->data;
@@ -481,12 +512,13 @@ static void rna_def_render_engine(BlenderRNA *brna)
RNA_def_function_ui_description(func, "Export scene data for render");
RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL | FUNC_ALLOW_WRITE);
RNA_def_pointer(func, "data", "BlendData", "", "");
+ RNA_def_pointer(func, "depsgraph", "Depsgraph", "", "");
RNA_def_pointer(func, "scene", "Scene", "", "");
- func = RNA_def_function(srna, "render", NULL);
+ func = RNA_def_function(srna, "render_to_image", NULL);
RNA_def_function_ui_description(func, "Render scene into an image");
RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL | FUNC_ALLOW_WRITE);
- RNA_def_pointer(func, "scene", "Scene", "", "");
+ RNA_def_pointer(func, "desgraph", "Depsgraph", "", "");
func = RNA_def_function(srna, "bake", NULL);
RNA_def_function_ui_description(func, "Bake passes");
@@ -517,7 +549,7 @@ static void rna_def_render_engine(BlenderRNA *brna)
RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL | FUNC_ALLOW_WRITE);
RNA_def_pointer(func, "context", "Context", "", "");
- func = RNA_def_function(srna, "view_draw", NULL);
+ func = RNA_def_function(srna, "render_to_view", NULL);
RNA_def_function_ui_description(func, "Draw viewport render");
RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
RNA_def_pointer(func, "context", "Context", "", "");
@@ -529,6 +561,19 @@ static void rna_def_render_engine(BlenderRNA *brna)
parm = RNA_def_pointer(func, "node", "Node", "", "");
RNA_def_parameter_flags(parm, 0, PARM_RNAPTR);
+ func = RNA_def_function(srna, "update_render_passes", NULL);
+ RNA_def_function_ui_description(func, "Update the render passes that will be generated");
+ RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL | FUNC_ALLOW_WRITE);
+ parm = RNA_def_pointer(func, "scene", "Scene", "", "");
+ parm = RNA_def_pointer(func, "renderlayer", "ViewLayer", "", "");
+
+ /* per-collection engine settings initialization */
+ func = RNA_def_function(srna, "collection_settings_create", NULL);
+ RNA_def_function_ui_description(func, "Create the per collection settings for the engine");
+ RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL | FUNC_ALLOW_WRITE);
+ parm = RNA_def_pointer(func, "collection_settings", "LayerCollectionSettings", "", "");
+ RNA_def_parameter_flags(parm, 0, PARM_RNAPTR);
+
/* tag for redraw */
func = RNA_def_function(srna, "tag_redraw", "engine_tag_redraw");
RNA_def_function_ui_description(func, "Request redraw for viewport rendering");
@@ -537,12 +582,6 @@ static void rna_def_render_engine(BlenderRNA *brna)
func = RNA_def_function(srna, "tag_update", "engine_tag_update");
RNA_def_function_ui_description(func, "Request update call for viewport rendering");
- func = RNA_def_function(srna, "update_render_passes", NULL);
- RNA_def_function_ui_description(func, "Update the render passes that will be generated");
- RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL | FUNC_ALLOW_WRITE);
- parm = RNA_def_pointer(func, "scene", "Scene", "", "");
- parm = RNA_def_pointer(func, "renderlayer", "SceneRenderLayer", "", "");
-
func = RNA_def_function(srna, "begin_result", "RE_engine_begin_result");
RNA_def_function_ui_description(func, "Create render result to write linear floating point render layers and passes");
parm = RNA_def_int(func, "x", 0, 0, INT_MAX, "X", "", 0, INT_MAX);
@@ -719,7 +758,7 @@ static void rna_def_render_engine(BlenderRNA *brna)
RNA_def_function_ui_description(func, "Register a render pass that will be part of the render with the current settings");
prop = RNA_def_pointer(func, "scene", "Scene", "", "");
RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
- prop = RNA_def_pointer(func, "srl", "SceneRenderLayer", "", "");
+ prop = RNA_def_pointer(func, "view_layer", "ViewLayer", "", "");
RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
prop = RNA_def_string(func, "name", NULL, MAX_NAME, "Name", "");
RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
@@ -730,6 +769,11 @@ static void rna_def_render_engine(BlenderRNA *brna)
prop = RNA_def_enum(func, "type", render_pass_type_items, SOCK_FLOAT, "Type", "");
RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+ prop = RNA_def_property(srna, "view_layer", PROP_POINTER, PROP_NONE);
+ RNA_def_property_struct_type(prop, "ViewLayer");
+ RNA_def_property_pointer_funcs(prop, "rna_RenderEngine_view_layer_get", NULL, NULL, NULL);
+ RNA_def_property_ui_text(prop, "Scene layer", "");
+
/* registration */
prop = RNA_def_property(srna, "bl_idname", PROP_STRING, PROP_NONE);
@@ -900,7 +944,7 @@ static void rna_def_render_layer(BlenderRNA *brna)
RNA_define_verify_sdna(0);
- rna_def_render_layer_common(srna, 0);
+ rna_def_view_layer_common(srna, 0);
prop = RNA_def_property(srna, "passes", PROP_COLLECTION, PROP_NONE);
RNA_def_property_struct_type(prop, "RenderPass");
diff --git a/source/blender/makesrna/intern/rna_rigidbody.c b/source/blender/makesrna/intern/rna_rigidbody.c
index 335b7d31acf..bc85e9c6503 100644
--- a/source/blender/makesrna/intern/rna_rigidbody.c
+++ b/source/blender/makesrna/intern/rna_rigidbody.c
@@ -91,7 +91,6 @@ static const EnumPropertyItem rigidbody_mesh_source_items[] = {
# include "RBI_api.h"
#endif
-#include "BKE_depsgraph.h"
#include "BKE_rigidbody.h"
#include "WM_api.h"
diff --git a/source/blender/makesrna/intern/rna_rna.c b/source/blender/makesrna/intern/rna_rna.c
index 6cd748c0026..8cf9bc7d39c 100644
--- a/source/blender/makesrna/intern/rna_rna.c
+++ b/source/blender/makesrna/intern/rna_rna.c
@@ -107,6 +107,8 @@ const EnumPropertyItem rna_enum_property_unit_items[] = {
#include "MEM_guardedalloc.h"
#include "BLI_ghash.h"
+#include "BKE_library_override.h"
+
/* Struct */
static void rna_Struct_identifier_get(PointerRNA *ptr, char *value)
@@ -564,6 +566,13 @@ static int rna_Property_animatable_get(PointerRNA *ptr)
return (prop->flag & PROP_ANIMATABLE) != 0;
}
+static int rna_Property_overridable_get(PointerRNA *ptr)
+{
+ PropertyRNA *prop = (PropertyRNA *)ptr->data;
+
+ return (prop->flag & PROP_OVERRIDABLE_STATIC) != 0;
+}
+
static int rna_Property_use_output_get(PointerRNA *ptr)
{
PropertyRNA *prop = (PropertyRNA *)ptr->data;
@@ -1082,6 +1091,1009 @@ static int rna_BlenderRNA_structs_lookup_string(PointerRNA *ptr, const char *key
return false;
}
+/* Default override (and compare) callbacks. */
+
+/* Used for both Pointer and Collection properties. */
+static int rna_property_override_diff_propptr(
+ PointerRNA *propptr_a, PointerRNA *propptr_b, eRNACompareMode mode, const bool no_ownership,
+ IDOverrideStatic *override, const char *rna_path, const int flags, bool *r_override_changed)
+{
+ const bool do_create = override != NULL && (flags & RNA_OVERRIDE_COMPARE_CREATE) != 0 && rna_path != NULL;
+
+ bool is_id = false;
+ bool is_type_null = false;
+
+ /* Beware, PointerRNA_NULL has no type and is considered a 'blank page'! */
+ if (propptr_a->type == NULL) {
+ if (propptr_b->type == NULL) {
+ if (r_override_changed) {
+ *r_override_changed = false;
+ }
+ return 0;
+ }
+ is_id = RNA_struct_is_ID(propptr_b->type);
+ is_type_null = true;
+ }
+ else {
+ is_id = RNA_struct_is_ID(propptr_a->type);
+ is_type_null = (propptr_b->type == NULL);
+ }
+
+ if (is_id) {
+ BLI_assert(propptr_a->data == propptr_a->id.data && propptr_b->data == propptr_b->id.data);
+ BLI_assert(no_ownership); /* For now, once we deal with nodetrees we'll want to get rid of that one. */
+ }
+
+ if (override) {
+ if (no_ownership /* || is_id */ || is_type_null) {
+ /* In case this pointer prop does not own its data (or one is NULL), do not compare structs!
+ * This is a quite safe path to infinite loop, among other nasty issues.
+ * Instead, just compare pointers themselves. */
+ const int comp = (propptr_a->data != propptr_b->data);
+
+ if (do_create && comp != 0) {
+ bool created = false;
+ IDOverrideStaticProperty *op = BKE_override_static_property_get(override, rna_path, &created);
+
+ if (op != NULL && created) { /* If not yet overridden... */
+ BKE_override_static_property_operation_get(
+ op, IDOVERRIDESTATIC_OP_REPLACE, NULL, NULL, -1, -1, true, NULL, NULL);
+ if (r_override_changed) {
+ *r_override_changed = created;
+ }
+ }
+ }
+
+ return comp;
+ }
+ else {
+ eRNAOverrideMatchResult report_flags = 0;
+ const bool match = RNA_struct_override_matches(propptr_a, propptr_b, rna_path, override, flags, &report_flags);
+ if (r_override_changed && (report_flags & RNA_OVERRIDE_MATCH_RESULT_CREATED) != 0) {
+ *r_override_changed = true;
+ }
+ return !match;
+ }
+ }
+ else {
+ return !RNA_struct_equals(propptr_a, propptr_b, mode);
+ }
+}
+
+static char *rna_path_collection_prop_item_extend(const char *rna_path_prop, const char *item_name)
+{
+ const size_t esc_item_name_len = strlen(item_name) * 2;
+ char *esc_item_name = alloca(sizeof(*esc_item_name) * esc_item_name_len);
+ BLI_strescape(esc_item_name, item_name, esc_item_name_len);
+ return BLI_sprintfN("%s[\"%s\"]", rna_path_prop, esc_item_name);
+}
+
+int rna_property_override_diff_default(PointerRNA *ptr_a, PointerRNA *ptr_b,
+ PropertyRNA *prop_a, PropertyRNA *prop_b,
+ const int len_a, const int len_b,
+ const int mode,
+ IDOverrideStatic *override, const char *rna_path,
+ const int flags, bool *r_override_changed)
+{
+ BLI_assert(len_a == len_b);
+
+ /* Note: at this point, we are sure that when len_a is zero, we are not handling an (empty) array. */
+
+ const bool do_create = override != NULL && (flags & RNA_OVERRIDE_COMPARE_CREATE) != 0 && rna_path != NULL;
+
+ switch (RNA_property_type(prop_a)) {
+ case PROP_BOOLEAN:
+ {
+ if (len_a) {
+ int array_stack_a[RNA_STACK_ARRAY], array_stack_b[RNA_STACK_ARRAY];
+ int *array_a, *array_b;
+
+ array_a = (len_a > RNA_STACK_ARRAY) ? MEM_mallocN(sizeof(int) * len_a, "RNA equals") : array_stack_a;
+ array_b = (len_b > RNA_STACK_ARRAY) ? MEM_mallocN(sizeof(int) * len_b, "RNA equals") : array_stack_b;
+
+ RNA_property_boolean_get_array(ptr_a, prop_a, array_a);
+ RNA_property_boolean_get_array(ptr_b, prop_b, array_b);
+
+ const int comp = memcmp(array_a, array_b, sizeof(int) * len_a);
+
+ if (do_create && comp != 0) {
+ /* XXX TODO this will have to be refined to handle array items */
+ bool created = false;
+ IDOverrideStaticProperty *op = BKE_override_static_property_get(override, rna_path, &created);
+
+ if (op != NULL && created) {
+ BKE_override_static_property_operation_get(
+ op, IDOVERRIDESTATIC_OP_REPLACE, NULL, NULL, -1, -1, true, NULL, NULL);
+ if (r_override_changed) {
+ *r_override_changed = created;
+ }
+ }
+ else {
+ /* Already overriden prop, we'll have to check arrays items etc. */
+ }
+ }
+
+ if (array_a != array_stack_a) MEM_freeN(array_a);
+ if (array_b != array_stack_b) MEM_freeN(array_b);
+
+ return comp;
+ }
+ else {
+ const int value_a = RNA_property_boolean_get(ptr_a, prop_a);
+ const int value_b = RNA_property_boolean_get(ptr_b, prop_b);
+ const int comp = (value_a < value_b) ? -1 : (value_a > value_b) ? 1 : 0;
+
+ if (do_create && comp != 0) {
+ bool created = false;
+ IDOverrideStaticProperty *op = BKE_override_static_property_get(override, rna_path, &created);
+
+ if (op != NULL && created) { /* If not yet overridden... */
+ BKE_override_static_property_operation_get(
+ op, IDOVERRIDESTATIC_OP_REPLACE, NULL, NULL, -1, -1, true, NULL, NULL);
+ if (r_override_changed) {
+ *r_override_changed = created;
+ }
+ }
+ }
+
+ return comp;
+ }
+ }
+
+ case PROP_INT:
+ {
+ if (len_a) {
+ int array_stack_a[RNA_STACK_ARRAY], array_stack_b[RNA_STACK_ARRAY];
+ int *array_a, *array_b;
+
+ array_a = (len_a > RNA_STACK_ARRAY) ? MEM_mallocN(sizeof(int) * len_a, "RNA equals") : array_stack_a;
+ array_b = (len_b > RNA_STACK_ARRAY) ? MEM_mallocN(sizeof(int) * len_b, "RNA equals") : array_stack_b;
+
+ RNA_property_int_get_array(ptr_a, prop_a, array_a);
+ RNA_property_int_get_array(ptr_b, prop_b, array_b);
+
+ const int comp = memcmp(array_a, array_b, sizeof(int) * len_a);
+
+ if (do_create && comp != 0) {
+ /* XXX TODO this will have to be refined to handle array items */
+ bool created = false;
+ IDOverrideStaticProperty *op = BKE_override_static_property_get(override, rna_path, &created);
+
+ if (op != NULL && created) {
+ BKE_override_static_property_operation_get(
+ op, IDOVERRIDESTATIC_OP_REPLACE, NULL, NULL, -1, -1, true, NULL, NULL);
+ if (r_override_changed) {
+ *r_override_changed = created;
+ }
+ }
+ else {
+ /* Already overriden prop, we'll have to check arrays items etc. */
+ }
+ }
+
+ if (array_a != array_stack_a) MEM_freeN(array_a);
+ if (array_b != array_stack_b) MEM_freeN(array_b);
+
+ return comp;
+ }
+ else {
+ const int value_a = RNA_property_int_get(ptr_a, prop_a);
+ const int value_b = RNA_property_int_get(ptr_b, prop_b);
+ const int comp = (value_a < value_b) ? -1 : (value_a > value_b) ? 1 : 0;
+
+ if (do_create && comp != 0) {
+ bool created = false;
+ IDOverrideStaticProperty *op = BKE_override_static_property_get(override, rna_path, &created);
+
+ if (op != NULL && created) { /* If not yet overridden... */
+ BKE_override_static_property_operation_get(
+ op, IDOVERRIDESTATIC_OP_REPLACE, NULL, NULL, -1, -1, true, NULL, NULL);
+ if (r_override_changed) {
+ *r_override_changed = created;
+ }
+ }
+ }
+
+ return comp;
+ }
+ }
+
+ case PROP_FLOAT:
+ {
+ const bool is_proportional = (prop_a->flag & PROP_PROPORTIONAL) != 0;
+ if (len_a) {
+ float array_stack_a[RNA_STACK_ARRAY], array_stack_b[RNA_STACK_ARRAY];
+ float *array_a, *array_b;
+
+ array_a = (len_a > RNA_STACK_ARRAY) ? MEM_mallocN(sizeof(float) * len_a, "RNA equals") : array_stack_a;
+ array_b = (len_b > RNA_STACK_ARRAY) ? MEM_mallocN(sizeof(float) * len_b, "RNA equals") : array_stack_b;
+
+ RNA_property_float_get_array(ptr_a, prop_a, array_a);
+ RNA_property_float_get_array(ptr_b, prop_b, array_b);
+
+ const int comp = memcmp(array_a, array_b, sizeof(float) * len_a);
+
+ if (do_create && comp != 0) {
+ /* XXX TODO this will have to be refined to handle array items */
+ bool created = false;
+ IDOverrideStaticProperty *op = BKE_override_static_property_get(override, rna_path, &created);
+
+ if (op != NULL && created) {
+ BKE_override_static_property_operation_get(
+ op, is_proportional ? IDOVERRIDESTATIC_OP_MULTIPLY : IDOVERRIDESTATIC_OP_REPLACE,
+ NULL, NULL, -1, -1, true, NULL, NULL);
+ if (r_override_changed) {
+ *r_override_changed = created;
+ }
+ }
+ else {
+ /* Already overriden prop, we'll have to check arrays items etc. */
+ }
+ }
+
+ if (array_a != array_stack_a) MEM_freeN(array_a);
+ if (array_b != array_stack_b) MEM_freeN(array_b);
+
+ return comp;
+ }
+ else {
+ const float value_a = RNA_property_float_get(ptr_a, prop_a);
+ const float value_b = RNA_property_float_get(ptr_b, prop_b);
+ const int comp = (value_a < value_b) ? -1 : (value_a > value_b) ? 1 : 0;
+
+ if (do_create && comp != 0) {
+ bool created = false;
+ IDOverrideStaticProperty *op = BKE_override_static_property_get(override, rna_path, &created);
+
+ if (op != NULL && created) { /* If not yet overridden... */
+ BKE_override_static_property_operation_get(
+ op, is_proportional ? IDOVERRIDESTATIC_OP_MULTIPLY : IDOVERRIDESTATIC_OP_REPLACE,
+ NULL, NULL, -1, -1, true, NULL, NULL);
+ if (r_override_changed) {
+ *r_override_changed = created;
+ }
+ }
+ }
+
+ return comp ;
+ }
+ }
+
+ case PROP_ENUM:
+ {
+ const int value_a = RNA_property_enum_get(ptr_a, prop_a);
+ const int value_b = RNA_property_enum_get(ptr_b, prop_b);
+ const int comp = value_a != value_b;
+
+ if (do_create && comp != 0) {
+ bool created = false;
+ IDOverrideStaticProperty *op = BKE_override_static_property_get(override, rna_path, &created);
+
+ if (op != NULL && created) { /* If not yet overridden... */
+ BKE_override_static_property_operation_get(
+ op, IDOVERRIDESTATIC_OP_REPLACE, NULL, NULL, -1, -1, true, NULL, NULL);
+ if (r_override_changed) {
+ *r_override_changed = created;
+ }
+ }
+ }
+
+ return comp;
+ }
+
+ case PROP_STRING:
+ {
+ char fixed_a[128], fixed_b[128];
+ int len_str_a, len_str_b;
+ char *value_a = RNA_property_string_get_alloc(ptr_a, prop_a, fixed_a, sizeof(fixed_a), &len_str_a);
+ char *value_b = RNA_property_string_get_alloc(ptr_b, prop_b, fixed_b, sizeof(fixed_b), &len_str_b);
+ const int comp = strcmp(value_a, value_b);
+
+ if (do_create && comp != 0) {
+ bool created = false;
+ IDOverrideStaticProperty *op = BKE_override_static_property_get(override, rna_path, &created);
+
+ if (op != NULL && created) { /* If not yet overridden... */
+ BKE_override_static_property_operation_get(
+ op, IDOVERRIDESTATIC_OP_REPLACE, NULL, NULL, -1, -1, true, NULL, NULL);
+ if (r_override_changed) {
+ *r_override_changed = created;
+ }
+ }
+ }
+
+ if (value_a != fixed_a) MEM_freeN(value_a);
+ if (value_b != fixed_b) MEM_freeN(value_b);
+
+ return comp;
+ }
+
+ case PROP_POINTER:
+ {
+ if (STREQ(RNA_property_identifier(prop_a), "rna_type")) {
+ /* Dummy 'pass' answer, this is a meta-data and must be ignored... */
+ return 0;
+ }
+ else {
+ PointerRNA propptr_a = RNA_property_pointer_get(ptr_a, prop_a);
+ PointerRNA propptr_b = RNA_property_pointer_get(ptr_b, prop_b);
+ const bool no_ownership = (RNA_property_flag(prop_a) & PROP_PTR_NO_OWNERSHIP) != 0;
+ return rna_property_override_diff_propptr(
+ &propptr_a, &propptr_b, mode, no_ownership,
+ override, rna_path, flags, r_override_changed);
+ }
+ break;
+ }
+
+ case PROP_COLLECTION:
+ {
+ bool equals = true;
+ int idx = 0;
+
+ CollectionPropertyIterator iter_a, iter_b;
+ RNA_property_collection_begin(ptr_a, prop_a, &iter_a);
+ RNA_property_collection_begin(ptr_b, prop_b, &iter_b);
+
+ for (; iter_a.valid && iter_b.valid;
+ RNA_property_collection_next(&iter_a), RNA_property_collection_next(&iter_b), idx++)
+ {
+ char *extended_rna_path = NULL;
+
+ if (iter_a.ptr.type != iter_b.ptr.type) {
+ /* nothing we can do (for until we support adding/removing from collections), skip it. */
+ equals = false;
+ continue;
+ }
+ else if (iter_a.ptr.type == NULL) {
+ /* NULL RNA pointer... */
+ BLI_assert(iter_a.ptr.data == NULL);
+ BLI_assert(iter_b.ptr.data == NULL);
+ continue;
+ }
+
+ PropertyRNA *propname = RNA_struct_name_property(iter_a.ptr.type);
+ char propname_buff_a[256], propname_buff_b[256];
+ char *propname_a = NULL, *propname_b = NULL;
+
+ if (propname != NULL) {
+ propname_a = RNA_property_string_get_alloc(&iter_a.ptr, propname, propname_buff_a, sizeof(propname_buff_a), NULL);
+ propname_b = RNA_property_string_get_alloc(&iter_b.ptr, propname, propname_buff_b, sizeof(propname_buff_b), NULL);
+ if (!STREQ(propname_a, propname_b)) {
+ /* Same as above, not same structs. */
+ equals = false;
+ }
+ else if (rna_path) {
+ extended_rna_path = rna_path_collection_prop_item_extend(rna_path, propname_a);
+ }
+ }
+ else { /* Based on index... */
+ if (rna_path) {
+ extended_rna_path = BLI_sprintfN("%s[%d]", rna_path, idx);
+ }
+ }
+
+ if (equals) {
+ const bool no_ownership = (RNA_property_flag(prop_a) & PROP_PTR_NO_OWNERSHIP) != 0;
+ const int eq = rna_property_override_diff_propptr(
+ &iter_a.ptr, &iter_b.ptr, mode, no_ownership,
+ override, extended_rna_path, flags, r_override_changed);
+ equals = equals && eq;
+ }
+
+ if (propname_a != propname_buff_a) {
+ MEM_SAFE_FREE(propname_a);
+ }
+ if (propname_b != propname_buff_b) {
+ MEM_SAFE_FREE(propname_b);
+ }
+ MEM_SAFE_FREE(extended_rna_path);
+
+ if (!rna_path && !equals) {
+ break; /* Early out in case we do not want to loop over whole collection. */
+ }
+ }
+
+ equals = equals && !(iter_a.valid || iter_b.valid); /* Not same number of items in both collections... */
+ RNA_property_collection_end(&iter_a);
+ RNA_property_collection_end(&iter_b);
+
+ return (equals == false);
+ }
+
+ default:
+ break;
+ }
+
+ return 0;
+}
+
+bool rna_property_override_store_default(
+ PointerRNA *ptr_local, PointerRNA *ptr_reference, PointerRNA *ptr_storage,
+ PropertyRNA *prop_local, PropertyRNA *prop_reference, PropertyRNA *prop_storage,
+ const int len_local, const int len_reference, const int len_storage,
+ IDOverrideStaticPropertyOperation *opop)
+{
+ BLI_assert(len_local == len_reference && (!ptr_storage || len_local == len_storage));
+ UNUSED_VARS_NDEBUG(len_reference, len_storage);
+
+ bool changed = false;
+ const int index = opop->subitem_reference_index;
+
+ if (!ELEM(opop->operation, IDOVERRIDESTATIC_OP_ADD, IDOVERRIDESTATIC_OP_SUBTRACT, IDOVERRIDESTATIC_OP_MULTIPLY)) {
+ return changed;
+ }
+
+ /* XXX TODO About range limits.
+ * Ideally, it woudl be great to get rid of RNA range in that specific case.
+ * However, this won't be that easy and will add yet another layer of complexity in generated code,
+ * not to mention that we could most likely *not* bypass custom setters anyway.
+ * So for now, if needed second operand value is not in valid range, we simply fall back
+ * to a mere REPLACE operation.
+ * Time will say whether this is acceptable limitation or not. */
+ switch (RNA_property_type(prop_local)) {
+ case PROP_BOOLEAN:
+ /* TODO support boolean ops? Really doubt this would ever be useful though... */
+ BLI_assert(0 && "Boolean properties support no override diff operation");
+ break;
+ case PROP_INT:
+ {
+ int prop_min, prop_max;
+ RNA_property_int_range(ptr_local, prop_local, &prop_min, &prop_max);
+
+ if (len_local) {
+ if (index == -1) {
+ int array_stack_a[RNA_STACK_ARRAY], array_stack_b[RNA_STACK_ARRAY];
+ int *array_a, *array_b;
+
+ array_a = (len_local > RNA_STACK_ARRAY) ? MEM_mallocN(sizeof(*array_a) * len_local, __func__) : array_stack_a;
+ RNA_property_int_get_array(ptr_reference, prop_reference, array_a);
+
+ switch (opop->operation) {
+ case IDOVERRIDESTATIC_OP_ADD:
+ case IDOVERRIDESTATIC_OP_SUBTRACT:
+ {
+ const int fac = opop->operation == IDOVERRIDESTATIC_OP_ADD ? 1 : -1;
+ const int other_op = opop->operation == IDOVERRIDESTATIC_OP_ADD ? IDOVERRIDESTATIC_OP_SUBTRACT : IDOVERRIDESTATIC_OP_ADD;
+ bool do_set = true;
+ array_b = (len_local > RNA_STACK_ARRAY) ? MEM_mallocN(sizeof(*array_b) * len_local, __func__) : array_stack_b;
+ RNA_property_int_get_array(ptr_local, prop_local, array_b);
+ for (int i = len_local; i--;) {
+ array_b[i] = fac * (array_b[i] - array_a[i]);
+ if (array_b[i] < prop_min || array_b[i] > prop_max) {
+ opop->operation = other_op;
+ for (int j = len_local; j--;) {
+ array_b[j] = j >= i ? -array_b[j] : fac * (array_a[j] - array_b[j]);
+ if (array_b[j] < prop_min || array_b[j] > prop_max) {
+ /* We failed to find a suitable diff op,
+ * fall back to plain REPLACE one. */
+ opop->operation = IDOVERRIDESTATIC_OP_REPLACE;
+ do_set = false;
+ break;
+ }
+ }
+ break;
+ }
+ }
+ if (do_set) {
+ changed = true;
+ RNA_property_int_set_array(ptr_storage, prop_storage, array_b);
+ }
+ if (array_b != array_stack_b) MEM_freeN(array_b);
+ break;
+ }
+ default:
+ BLI_assert(0 && "Unsupported RNA override diff operation on integer");
+ break;
+ }
+
+ if (array_a != array_stack_a) MEM_freeN(array_a);
+ }
+ else {
+ const int value = RNA_property_int_get_index(ptr_reference, prop_reference, index);
+
+ switch (opop->operation) {
+ case IDOVERRIDESTATIC_OP_ADD:
+ case IDOVERRIDESTATIC_OP_SUBTRACT:
+ {
+ const int fac = opop->operation == IDOVERRIDESTATIC_OP_ADD ? 1 : -1;
+ const int other_op = opop->operation == IDOVERRIDESTATIC_OP_ADD ? IDOVERRIDESTATIC_OP_SUBTRACT : IDOVERRIDESTATIC_OP_ADD;
+ int b = fac * (RNA_property_int_get_index(ptr_local, prop_local, index) - value);
+ if (b < prop_min || b > prop_max) {
+ opop->operation = other_op;
+ b = -b;
+ if (b < prop_min || b > prop_max) {
+ opop->operation = IDOVERRIDESTATIC_OP_REPLACE;
+ break;
+ }
+ }
+ changed = true;
+ RNA_property_int_set_index(ptr_storage, prop_storage, index, b);
+ break;
+ }
+ default:
+ BLI_assert(0 && "Unsupported RNA override diff operation on integer");
+ break;
+ }
+ }
+ }
+ else {
+ const int value = RNA_property_int_get(ptr_reference, prop_reference);
+
+ switch (opop->operation) {
+ case IDOVERRIDESTATIC_OP_ADD:
+ case IDOVERRIDESTATIC_OP_SUBTRACT:
+ {
+ const int fac = opop->operation == IDOVERRIDESTATIC_OP_ADD ? 1 : -1;
+ const int other_op = opop->operation == IDOVERRIDESTATIC_OP_ADD ? IDOVERRIDESTATIC_OP_SUBTRACT : IDOVERRIDESTATIC_OP_ADD;
+ int b = fac * (RNA_property_int_get(ptr_local, prop_local) - value);
+ if (b < prop_min || b > prop_max) {
+ opop->operation = other_op;
+ b = -b;
+ if (b < prop_min || b > prop_max) {
+ opop->operation = IDOVERRIDESTATIC_OP_REPLACE;
+ break;
+ }
+ }
+ changed = true;
+ RNA_property_int_set(ptr_storage, prop_storage, b);
+ break;
+ }
+ default:
+ BLI_assert(0 && "Unsupported RNA override diff operation on integer");
+ break;
+ }
+ }
+ break;
+ }
+ case PROP_FLOAT:
+ {
+ float prop_min, prop_max;
+ RNA_property_float_range(ptr_local, prop_local, &prop_min, &prop_max);
+
+ if (len_local) {
+ if (index == -1) {
+ float array_stack_a[RNA_STACK_ARRAY], array_stack_b[RNA_STACK_ARRAY];
+ float *array_a, *array_b;
+
+ array_a = (len_local > RNA_STACK_ARRAY) ? MEM_mallocN(sizeof(*array_a) * len_local, __func__) : array_stack_a;
+
+ RNA_property_float_get_array(ptr_reference, prop_reference, array_a);
+ switch (opop->operation) {
+ case IDOVERRIDESTATIC_OP_ADD:
+ case IDOVERRIDESTATIC_OP_SUBTRACT:
+ {
+ const float fac = opop->operation == IDOVERRIDESTATIC_OP_ADD ? 1.0 : -1.0;
+ const int other_op = opop->operation == IDOVERRIDESTATIC_OP_ADD ? IDOVERRIDESTATIC_OP_SUBTRACT : IDOVERRIDESTATIC_OP_ADD;
+ bool do_set = true;
+ array_b = (len_local > RNA_STACK_ARRAY) ? MEM_mallocN(sizeof(*array_b) * len_local, __func__) : array_stack_b;
+ RNA_property_float_get_array(ptr_local, prop_local, array_b);
+ for (int i = len_local; i--;) {
+ array_b[i] = fac * (array_b[i] - array_a[i]);
+ if (array_b[i] < prop_min || array_b[i] > prop_max) {
+ opop->operation = other_op;
+ for (int j = len_local; j--;) {
+ array_b[j] = j >= i ? -array_b[j] : fac * (array_a[j] - array_b[j]);
+ if (array_b[j] < prop_min || array_b[j] > prop_max) {
+ /* We failed to find a suitable diff op,
+ * fall back to plain REPLACE one. */
+ opop->operation = IDOVERRIDESTATIC_OP_REPLACE;
+ do_set = false;
+ break;
+ }
+ }
+ break;
+ }
+ }
+ if (do_set) {
+ changed = true;
+ RNA_property_float_set_array(ptr_storage, prop_storage, array_b);
+ }
+ if (array_b != array_stack_b) MEM_freeN(array_b);
+ break;
+ }
+ case IDOVERRIDESTATIC_OP_MULTIPLY:
+ {
+ bool do_set = true;
+ array_b = (len_local > RNA_STACK_ARRAY) ? MEM_mallocN(sizeof(*array_b) * len_local, __func__) : array_stack_b;
+ RNA_property_float_get_array(ptr_local, prop_local, array_b);
+ for (int i = len_local; i--;) {
+ array_b[i] = array_a[i] == 0.0f ? array_b[i] : array_b[i] / array_a[i];
+ if (array_b[i] < prop_min || array_b[i] > prop_max) {
+ opop->operation = IDOVERRIDESTATIC_OP_REPLACE;
+ do_set = false;
+ break;
+ }
+ }
+ if (do_set) {
+ changed = true;
+ RNA_property_float_set_array(ptr_storage, prop_storage, array_b);
+ }
+ if (array_b != array_stack_b) MEM_freeN(array_b);
+ break;
+ }
+ default:
+ BLI_assert(0 && "Unsupported RNA override diff operation on float");
+ break;
+ }
+
+ if (array_a != array_stack_a) MEM_freeN(array_a);
+ }
+ else {
+ const float value = RNA_property_float_get_index(ptr_reference, prop_reference, index);
+
+ switch (opop->operation) {
+ case IDOVERRIDESTATIC_OP_ADD:
+ case IDOVERRIDESTATIC_OP_SUBTRACT:
+ {
+ const float fac = opop->operation == IDOVERRIDESTATIC_OP_ADD ? 1.0f : -1.0f;
+ const int other_op = opop->operation == IDOVERRIDESTATIC_OP_ADD ? IDOVERRIDESTATIC_OP_SUBTRACT : IDOVERRIDESTATIC_OP_ADD;
+ float b = fac * (RNA_property_float_get_index(ptr_local, prop_local, index) - value);
+ if (b < prop_min || b > prop_max) {
+ opop->operation = other_op;
+ b = -b;
+ if (b < prop_min || b > prop_max) {
+ opop->operation = IDOVERRIDESTATIC_OP_REPLACE;
+ break;
+ }
+ }
+ changed = true;
+ RNA_property_float_set_index(ptr_storage, prop_storage, index, b);
+ break;
+ }
+ case IDOVERRIDESTATIC_OP_MULTIPLY:
+ {
+ const float b = RNA_property_float_get_index(ptr_local, prop_local, index) / (value == 0.0f ? 1.0f : value);
+ if (b < prop_min || b > prop_max) {
+ opop->operation = IDOVERRIDESTATIC_OP_REPLACE;
+ break;
+ }
+ changed = true;
+ RNA_property_float_set_index(ptr_storage, prop_storage, index, b);
+ break;
+ }
+ default:
+ BLI_assert(0 && "Unsupported RNA override diff operation on float");
+ break;
+ }
+ }
+ }
+ else {
+ const float value = RNA_property_float_get(ptr_reference, prop_reference);
+
+ switch (opop->operation) {
+ case IDOVERRIDESTATIC_OP_ADD:
+ case IDOVERRIDESTATIC_OP_SUBTRACT:
+ {
+ const float fac = opop->operation == IDOVERRIDESTATIC_OP_ADD ? 1.0f : -1.0f;
+ const int other_op = opop->operation == IDOVERRIDESTATIC_OP_ADD ? IDOVERRIDESTATIC_OP_SUBTRACT : IDOVERRIDESTATIC_OP_ADD;
+ float b = fac * (RNA_property_float_get(ptr_local, prop_local) - value);
+ if (b < prop_min || b > prop_max) {
+ opop->operation = other_op;
+ b = -b;
+ if (b < prop_min || b > prop_max) {
+ opop->operation = IDOVERRIDESTATIC_OP_REPLACE;
+ break;
+ }
+ }
+ changed = true;
+ RNA_property_float_set(ptr_storage, prop_storage, b);
+ break;
+ }
+ case IDOVERRIDESTATIC_OP_MULTIPLY:
+ {
+ const float b = RNA_property_float_get(ptr_local, prop_local) / (value == 0.0f ? 1.0f : value);
+ if (b < prop_min || b > prop_max) {
+ opop->operation = IDOVERRIDESTATIC_OP_REPLACE;
+ break;
+ }
+ changed = true;
+ RNA_property_float_set(ptr_storage, prop_storage, b);
+ break;
+ }
+ default:
+ BLI_assert(0 && "Unsupported RNA override diff operation on float");
+ break;
+ }
+ }
+ return true;
+ }
+ case PROP_ENUM:
+ /* TODO support add/sub, for bitflags? */
+ BLI_assert(0 && "Enum properties support no override diff operation");
+ break;
+ case PROP_POINTER:
+ BLI_assert(0 && "Pointer properties support no override diff operation");
+ break;
+ case PROP_STRING:
+ BLI_assert(0 && "String properties support no override diff operation");
+ break;
+ case PROP_COLLECTION:
+ /* XXX TODO support this of course... */
+ BLI_assert(0 && "Collection properties support no override diff operation");
+ break;
+ default:
+ break;
+ }
+
+ return changed;
+}
+
+bool rna_property_override_apply_default(
+ PointerRNA *ptr_dst, PointerRNA *ptr_src, PointerRNA *ptr_storage,
+ PropertyRNA *prop_dst, PropertyRNA *prop_src, PropertyRNA *prop_storage,
+ const int len_dst, const int len_src, const int len_storage,
+ IDOverrideStaticPropertyOperation *opop)
+{
+ BLI_assert(len_dst == len_src && (!ptr_storage || len_dst == len_storage));
+ UNUSED_VARS_NDEBUG(len_src, len_storage);
+
+ const int index = opop->subitem_reference_index;
+ const short override_op = opop->operation;
+
+ switch (RNA_property_type(prop_dst)) {
+ case PROP_BOOLEAN:
+ if (len_dst) {
+ if (index == -1) {
+ int array_stack_a[RNA_STACK_ARRAY];
+ int *array_a;
+
+ array_a = (len_dst > RNA_STACK_ARRAY) ? MEM_mallocN(sizeof(*array_a) * len_dst, __func__) : array_stack_a;
+
+ RNA_property_boolean_get_array(ptr_src, prop_src, array_a);
+
+ switch (override_op) {
+ case IDOVERRIDESTATIC_OP_REPLACE:
+ RNA_property_boolean_set_array(ptr_dst, prop_dst, array_a);
+ break;
+ default:
+ BLI_assert(0 && "Unsupported RNA override operation on boolean");
+ return false;
+ }
+
+ if (array_a != array_stack_a) MEM_freeN(array_a);
+ }
+ else {
+ const int value = RNA_property_boolean_get_index(ptr_src, prop_src, index);
+
+ switch (override_op) {
+ case IDOVERRIDESTATIC_OP_REPLACE:
+ RNA_property_boolean_set_index(ptr_dst, prop_dst, index, value);
+ break;
+ default:
+ BLI_assert(0 && "Unsupported RNA override operation on boolean");
+ return false;
+ }
+ }
+ }
+ else {
+ const int value = RNA_property_boolean_get(ptr_src, prop_src);
+
+ switch (override_op) {
+ case IDOVERRIDESTATIC_OP_REPLACE:
+ RNA_property_boolean_set(ptr_dst, prop_dst, value);
+ break;
+ default:
+ BLI_assert(0 && "Unsupported RNA override operation on boolean");
+ return false;
+ }
+ }
+ return true;
+ case PROP_INT:
+ if (len_dst) {
+ if (index == -1) {
+ int array_stack_a[RNA_STACK_ARRAY], array_stack_b[RNA_STACK_ARRAY];
+ int *array_a, *array_b;
+
+ array_a = (len_dst > RNA_STACK_ARRAY) ? MEM_mallocN(sizeof(*array_a) * len_dst, __func__) : array_stack_a;
+
+ switch (override_op) {
+ case IDOVERRIDESTATIC_OP_REPLACE:
+ RNA_property_int_get_array(ptr_src, prop_src, array_a);
+ RNA_property_int_set_array(ptr_dst, prop_dst, array_a);
+ break;
+ case IDOVERRIDESTATIC_OP_ADD:
+ case IDOVERRIDESTATIC_OP_SUBTRACT:
+ RNA_property_int_get_array(ptr_dst, prop_dst, array_a);
+ array_b = (len_dst > RNA_STACK_ARRAY) ? MEM_mallocN(sizeof(*array_b) * len_dst, __func__) : array_stack_b;
+ RNA_property_int_get_array(ptr_storage, prop_storage, array_b);
+ if (override_op == IDOVERRIDESTATIC_OP_ADD) {
+ for (int i = len_dst; i--;) array_a[i] += array_b[i];
+ }
+ else {
+ for (int i = len_dst; i--;) array_a[i] -= array_b[i];
+ }
+ RNA_property_int_set_array(ptr_dst, prop_dst, array_a);
+ if (array_b != array_stack_b) MEM_freeN(array_b);
+ break;
+ default:
+ BLI_assert(0 && "Unsupported RNA override operation on integer");
+ return false;
+ }
+
+ if (array_a != array_stack_a) MEM_freeN(array_a);
+ }
+ else {
+ const int storage_value = ptr_storage ? RNA_property_int_get_index(ptr_storage, prop_storage, index) : 0;
+
+ switch (override_op) {
+ case IDOVERRIDESTATIC_OP_REPLACE:
+ RNA_property_int_set_index(ptr_dst, prop_dst, index,
+ RNA_property_int_get_index(ptr_src, prop_src, index));
+ break;
+ case IDOVERRIDESTATIC_OP_ADD:
+ RNA_property_int_set_index(ptr_dst, prop_dst, index,
+ RNA_property_int_get_index(ptr_dst, prop_dst, index) - storage_value);
+ break;
+ case IDOVERRIDESTATIC_OP_SUBTRACT:
+ RNA_property_int_set_index(ptr_dst, prop_dst, index,
+ RNA_property_int_get_index(ptr_dst, prop_dst, index) - storage_value);
+ break;
+ default:
+ BLI_assert(0 && "Unsupported RNA override operation on integer");
+ return false;
+ }
+ }
+ }
+ else {
+ const int storage_value = ptr_storage ? RNA_property_int_get(ptr_storage, prop_storage) : 0;
+
+ switch (override_op) {
+ case IDOVERRIDESTATIC_OP_REPLACE:
+ RNA_property_int_set(ptr_dst, prop_dst, RNA_property_int_get(ptr_src, prop_src));
+ break;
+ case IDOVERRIDESTATIC_OP_ADD:
+ RNA_property_int_set(ptr_dst, prop_dst, RNA_property_int_get(ptr_dst, prop_dst) + storage_value);
+ break;
+ case IDOVERRIDESTATIC_OP_SUBTRACT:
+ RNA_property_int_set(ptr_dst, prop_dst, RNA_property_int_get(ptr_dst, prop_dst) - storage_value);
+ break;
+ default:
+ BLI_assert(0 && "Unsupported RNA override operation on integer");
+ return false;
+ }
+ }
+ return true;
+ case PROP_FLOAT:
+ if (len_dst) {
+ if (index == -1) {
+ float array_stack_a[RNA_STACK_ARRAY], array_stack_b[RNA_STACK_ARRAY];
+ float *array_a, *array_b;
+
+ array_a = (len_dst > RNA_STACK_ARRAY) ? MEM_mallocN(sizeof(*array_a) * len_dst, __func__) : array_stack_a;
+
+ switch (override_op) {
+ case IDOVERRIDESTATIC_OP_REPLACE:
+ RNA_property_float_get_array(ptr_src, prop_src, array_a);
+ RNA_property_float_set_array(ptr_dst, prop_dst, array_a);
+ break;
+ case IDOVERRIDESTATIC_OP_ADD:
+ case IDOVERRIDESTATIC_OP_SUBTRACT:
+ case IDOVERRIDESTATIC_OP_MULTIPLY:
+ RNA_property_float_get_array(ptr_dst, prop_dst, array_a);
+ array_b = (len_dst > RNA_STACK_ARRAY) ? MEM_mallocN(sizeof(*array_b) * len_dst, __func__) : array_stack_b;
+ RNA_property_float_get_array(ptr_storage, prop_storage, array_b);
+ if (override_op == IDOVERRIDESTATIC_OP_ADD) {
+ for (int i = len_dst; i--;) array_a[i] += array_b[i];
+ }
+ else if (override_op == IDOVERRIDESTATIC_OP_SUBTRACT) {
+ for (int i = len_dst; i--;) array_a[i] -= array_b[i];
+ }
+ else {
+ for (int i = len_dst; i--;) array_a[i] *= array_b[i];
+ }
+ RNA_property_float_set_array(ptr_dst, prop_dst, array_a);
+ if (array_b != array_stack_b) MEM_freeN(array_b);
+ break;
+ default:
+ BLI_assert(0 && "Unsupported RNA override operation on float");
+ return false;
+ }
+
+ if (array_a != array_stack_a) MEM_freeN(array_a);
+ }
+ else {
+ const float storage_value = ptr_storage ? RNA_property_float_get_index(ptr_storage, prop_storage, index) : 0.0f;
+
+ switch (override_op) {
+ case IDOVERRIDESTATIC_OP_REPLACE:
+ RNA_property_float_set_index(ptr_dst, prop_dst, index,
+ RNA_property_float_get_index(ptr_src, prop_src, index));
+ break;
+ case IDOVERRIDESTATIC_OP_ADD:
+ RNA_property_float_set_index(ptr_dst, prop_dst, index,
+ RNA_property_float_get_index(ptr_dst, prop_dst, index) + storage_value);
+ break;
+ case IDOVERRIDESTATIC_OP_SUBTRACT:
+ RNA_property_float_set_index(ptr_dst, prop_dst, index,
+ RNA_property_float_get_index(ptr_dst, prop_dst, index) - storage_value);
+ break;
+ case IDOVERRIDESTATIC_OP_MULTIPLY:
+ RNA_property_float_set_index(ptr_dst, prop_dst, index,
+ RNA_property_float_get_index(ptr_dst, prop_dst, index) * storage_value);
+ break;
+ default:
+ BLI_assert(0 && "Unsupported RNA override operation on float");
+ return false;
+ }
+ }
+ }
+ else {
+ const float storage_value = ptr_storage ? RNA_property_float_get(ptr_storage, prop_storage) : 0.0f;
+
+ switch (override_op) {
+ case IDOVERRIDESTATIC_OP_REPLACE:
+ RNA_property_float_set(ptr_dst, prop_dst, RNA_property_float_get(ptr_src, prop_src));
+ break;
+ case IDOVERRIDESTATIC_OP_ADD:
+ RNA_property_float_set(ptr_dst, prop_dst, RNA_property_float_get(ptr_dst, prop_dst) + storage_value);
+ break;
+ case IDOVERRIDESTATIC_OP_SUBTRACT:
+ RNA_property_float_set(ptr_dst, prop_dst, RNA_property_float_get(ptr_dst, prop_dst) - storage_value);
+ break;
+ case IDOVERRIDESTATIC_OP_MULTIPLY:
+ RNA_property_float_set(ptr_dst, prop_dst, RNA_property_float_get(ptr_dst, prop_dst) * storage_value);
+ break;
+ default:
+ BLI_assert(0 && "Unsupported RNA override operation on float");
+ return false;
+ }
+ }
+ return true;
+ case PROP_ENUM:
+ {
+ const int value = RNA_property_enum_get(ptr_src, prop_src);
+
+ switch (override_op) {
+ case IDOVERRIDESTATIC_OP_REPLACE:
+ RNA_property_enum_set(ptr_dst, prop_dst, value);
+ break;
+ /* TODO support add/sub, for bitflags? */
+ default:
+ BLI_assert(0 && "Unsupported RNA override operation on enum");
+ return false;
+ }
+ return true;
+ }
+ case PROP_POINTER:
+ {
+ PointerRNA value = RNA_property_pointer_get(ptr_src, prop_src);
+
+ switch (override_op) {
+ case IDOVERRIDESTATIC_OP_REPLACE:
+ RNA_property_pointer_set(ptr_dst, prop_dst, value);
+ break;
+ default:
+ BLI_assert(0 && "Unsupported RNA override operation on pointer");
+ return false;
+ }
+ return true;
+ }
+ case PROP_STRING:
+ {
+ char buff[256];
+ char *value = RNA_property_string_get_alloc(ptr_src, prop_src, buff, sizeof(buff), NULL);
+
+ switch (override_op) {
+ case IDOVERRIDESTATIC_OP_REPLACE:
+ RNA_property_string_set(ptr_dst, prop_dst, value);
+ break;
+ default:
+ BLI_assert(0 && "Unsupported RNA override operation on string");
+ return false;
+ }
+
+ if (value != buff) MEM_freeN(value);
+ return true;
+ }
+ default:
+ /* TODO PROP_COLLECTION of course! */
+ return false;
+ }
+
+ return false;
+}
+
+
#else
@@ -1259,6 +2271,11 @@ static void rna_def_property(BlenderRNA *brna)
RNA_def_property_boolean_funcs(prop, "rna_Property_animatable_get", NULL);
RNA_def_property_ui_text(prop, "Animatable", "Property is animatable through RNA");
+ prop = RNA_def_property(srna, "is_overridable", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_boolean_funcs(prop, "rna_Property_overridable_get", NULL);
+ RNA_def_property_ui_text(prop, "Overridable", "Property is overridable through RNA");
+
prop = RNA_def_property(srna, "is_required", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_boolean_funcs(prop, "rna_Property_is_required_get", NULL);
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index e6ba459a406..2c3f90d718b 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -32,6 +32,7 @@
#include "DNA_particle_types.h"
#include "DNA_rigidbody_types.h"
#include "DNA_scene_types.h"
+#include "DNA_layer_types.h"
#include "DNA_linestyle_types.h"
#include "DNA_userdef_types.h"
#include "DNA_world_types.h"
@@ -47,8 +48,12 @@
#include "BKE_editmesh.h"
#include "BKE_paint.h"
+#include "ED_object.h"
+
#include "GPU_extensions.h"
+#include "DRW_engine.h"
+
#include "RNA_define.h"
#include "RNA_enum_types.h"
@@ -430,6 +435,7 @@ static const EnumPropertyItem rna_enum_gpencil_interpolation_mode_items[] = {
{0, NULL, 0, NULL, NULL}
};
+
#endif
#ifdef RNA_RUNTIME
@@ -440,22 +446,24 @@ static const EnumPropertyItem rna_enum_gpencil_interpolation_mode_items[] = {
#include "DNA_object_types.h"
#include "DNA_mesh_types.h"
#include "DNA_text_types.h"
+#include "DNA_workspace_types.h"
#include "RNA_access.h"
#include "MEM_guardedalloc.h"
#include "BKE_brush.h"
+#include "BKE_collection.h"
#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_idprop.h"
#include "BKE_image.h"
+#include "BKE_layer.h"
#include "BKE_main.h"
#include "BKE_node.h"
#include "BKE_pointcache.h"
#include "BKE_scene.h"
-#include "BKE_depsgraph.h"
#include "BKE_mesh.h"
#include "BKE_sound.h"
#include "BKE_screen.h"
@@ -470,6 +478,11 @@ static const EnumPropertyItem rna_enum_gpencil_interpolation_mode_items[] = {
#include "ED_mesh.h"
#include "ED_keyframing.h"
#include "ED_image.h"
+#include "ED_scene.h"
+
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+#include "DEG_depsgraph_query.h"
#ifdef WITH_FREESTYLE
#include "FRS_freestyle.h"
@@ -605,87 +618,39 @@ static void rna_SpaceImageEditor_uv_sculpt_update(Main *bmain, Scene *scene, Poi
ED_space_image_uv_sculpt_update(bmain->wm.first, scene);
}
-static int rna_Scene_object_bases_lookup_string(PointerRNA *ptr, const char *key, PointerRNA *r_ptr)
+
+/* Read-only Iterator of all the scene objects. */
+
+static void rna_Scene_objects_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
Scene *scene = (Scene *)ptr->data;
- Base *base;
-
- for (base = scene->base.first; base; base = base->next) {
- if (STREQLEN(base->object->id.name + 2, key, sizeof(base->object->id.name) - 2)) {
- *r_ptr = rna_pointer_inherit_refine(ptr, &RNA_ObjectBase, base);
- return true;
- }
- }
+ iter->internal.custom = MEM_callocN(sizeof(BLI_Iterator), __func__);
- return false;
+ ((BLI_Iterator *)iter->internal.custom)->valid = true;
+ BKE_scene_objects_iterator_begin(iter->internal.custom, (void *)scene);
+ iter->valid = ((BLI_Iterator *)iter->internal.custom)->valid;
}
-static PointerRNA rna_Scene_objects_get(CollectionPropertyIterator *iter)
+static void rna_Scene_objects_next(CollectionPropertyIterator *iter)
{
- ListBaseIterator *internal = &iter->internal.listbase;
-
- /* we are actually iterating a Base list, so override get */
- return rna_pointer_inherit_refine(&iter->parent, &RNA_Object, ((Base *)internal->link)->object);
+ BKE_scene_objects_iterator_next(iter->internal.custom);
+ iter->valid = ((BLI_Iterator *)iter->internal.custom)->valid;
}
-static Base *rna_Scene_object_link(Scene *scene, bContext *C, ReportList *reports, Object *ob)
+static void rna_Scene_objects_end(CollectionPropertyIterator *iter)
{
- Scene *scene_act = CTX_data_scene(C);
- Base *base;
-
- if (BKE_scene_base_find(scene, ob)) {
- BKE_reportf(reports, RPT_ERROR, "Object '%s' is already in scene '%s'", ob->id.name + 2, scene->id.name + 2);
- return NULL;
- }
-
- base = BKE_scene_base_add(scene, ob);
- id_us_plus(&ob->id);
-
- /* this is similar to what object_add_type and BKE_object_add do */
- base->lay = scene->lay;
-
- /* when linking to an inactive scene don't touch the layer */
- if (scene == scene_act)
- ob->lay = base->lay;
-
- /* TODO(sergey): Only update relations for the current scene. */
- DAG_relations_tag_update(CTX_data_main(C));
- DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
-
- /* slows down importers too much, run scene.update() */
- /* DAG_srelations_tag_update(G.main); */
-
- WM_main_add_notifier(NC_SCENE | ND_OB_ACTIVE, scene);
-
- return base;
+ BKE_scene_objects_iterator_end(iter->internal.custom);
+ MEM_freeN(iter->internal.custom);
}
-static void rna_Scene_object_unlink(Scene *scene, ReportList *reports, Object *ob)
+static PointerRNA rna_Scene_objects_get(CollectionPropertyIterator *iter)
{
- Base *base = BKE_scene_base_find(scene, ob);
- if (!base) {
- BKE_reportf(reports, RPT_ERROR, "Object '%s' is not in this scene '%s'", ob->id.name + 2, scene->id.name + 2);
- return;
- }
- if (base == scene->basact && ob->mode != OB_MODE_OBJECT) {
- BKE_reportf(reports, RPT_ERROR, "Object '%s' must be in object mode to unlink", ob->id.name + 2);
- return;
- }
- if (scene->basact == base) {
- scene->basact = NULL;
- }
-
- BKE_scene_base_unlink(scene, base);
- MEM_freeN(base);
-
- id_us_min(&ob->id);
-
- /* needed otherwise the depgraph will contain freed objects which can crash, see [#20958] */
- DAG_relations_tag_update(G.main);
-
- WM_main_add_notifier(NC_SCENE | ND_OB_ACTIVE, scene);
+ Object *ob = ((BLI_Iterator *)iter->internal.custom)->current;
+ return rna_pointer_inherit_refine(&iter->parent, &RNA_Object, ob);
}
+/* End of read-only Iterator of all the scene objects. */
+
static void rna_Scene_skgen_etch_template_set(PointerRNA *ptr, PointerRNA value)
{
ToolSettings *ts = (ToolSettings *)ptr->data;
@@ -695,21 +660,6 @@ static void rna_Scene_skgen_etch_template_set(PointerRNA *ptr, PointerRNA value)
ts->skgen_template = NULL;
}
-static PointerRNA rna_Scene_active_object_get(PointerRNA *ptr)
-{
- Scene *scene = (Scene *)ptr->data;
- return rna_pointer_inherit_refine(ptr, &RNA_Object, scene->basact ? scene->basact->object : NULL);
-}
-
-static void rna_Scene_active_object_set(PointerRNA *ptr, PointerRNA value)
-{
- Scene *scene = (Scene *)ptr->data;
- if (value.data)
- scene->basact = BKE_scene_base_find(scene, (Object *)value.data);
- else
- scene->basact = NULL;
-}
-
static void rna_Scene_set_set(PointerRNA *ptr, PointerRNA value)
{
Scene *scene = (Scene *)ptr->data;
@@ -728,11 +678,25 @@ static void rna_Scene_set_set(PointerRNA *ptr, PointerRNA value)
scene->set = set;
}
+void rna_Scene_set_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
+{
+ Scene *scene = (Scene *)ptr->id.data;
+
+ DEG_relations_tag_update(bmain);
+ DEG_id_tag_update_ex(bmain, &scene->id, 0);
+ if (scene->set != NULL) {
+ /* Objects which are pulled into main scene's depsgraph needs to have
+ * their base flags updated.
+ */
+ DEG_id_tag_update_ex(bmain, &scene->set->id, 0);
+ }
+}
+
static void rna_Scene_layer_set(PointerRNA *ptr, const int *values)
{
Scene *scene = (Scene *)ptr->data;
- scene->lay = ED_view3d_scene_layer_set(scene->lay, values, &scene->layact);
+ scene->lay = ED_view3d_view_layer_set(scene->lay, values, &scene->layact);
}
static int rna_Scene_active_layer_get(PointerRNA *ptr)
@@ -744,19 +708,21 @@ static int rna_Scene_active_layer_get(PointerRNA *ptr)
static void rna_Scene_view3d_update(Main *bmain, Scene *UNUSED(scene_unused), PointerRNA *ptr)
{
+ wmWindowManager *wm = bmain->wm.first;
Scene *scene = (Scene *)ptr->data;
- BKE_screen_view3d_main_sync(&bmain->screen, scene);
+ WM_windows_scene_data_sync(&wm->windows, scene);
}
-static void rna_Scene_layer_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+static void rna_Scene_layer_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *UNUSED(ptr))
{
- rna_Scene_view3d_update(bmain, scene, ptr);
/* XXX We would need do_time=true here, else we can have update issues like [#36289]...
* However, this has too much drawbacks (like slower layer switch, undesired updates...).
* That's TODO for future DAG updates.
*/
- DAG_on_visible_update(bmain, false);
+ DEG_on_visible_update(bmain, false);
+
+ /* No need to sync scene data here (WM_windows_scene_data_sync), handled through notifier. */
}
static void rna_Scene_fps_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *UNUSED(ptr))
@@ -1334,73 +1300,6 @@ static void rna_FFmpegSettings_codec_settings_update(Main *UNUSED(bmain), Scene
}
#endif
-static int rna_RenderSettings_active_layer_index_get(PointerRNA *ptr)
-{
- RenderData *rd = (RenderData *)ptr->data;
- return rd->actlay;
-}
-
-static void rna_RenderSettings_active_layer_index_set(PointerRNA *ptr, int value)
-{
- RenderData *rd = (RenderData *)ptr->data;
- int num_layers = BLI_listbase_count(&rd->layers);
- rd->actlay = min_ff(value, num_layers - 1);
-}
-
-static void rna_RenderSettings_active_layer_index_range(
- PointerRNA *ptr, int *min, int *max, int *UNUSED(softmin), int *UNUSED(softmax))
-{
- RenderData *rd = (RenderData *)ptr->data;
-
- *min = 0;
- *max = max_ii(0, BLI_listbase_count(&rd->layers) - 1);
-}
-
-static PointerRNA rna_RenderSettings_active_layer_get(PointerRNA *ptr)
-{
- RenderData *rd = (RenderData *)ptr->data;
- SceneRenderLayer *srl = BLI_findlink(&rd->layers, rd->actlay);
-
- return rna_pointer_inherit_refine(ptr, &RNA_SceneRenderLayer, srl);
-}
-
-static void rna_RenderSettings_active_layer_set(PointerRNA *ptr, PointerRNA value)
-{
- RenderData *rd = (RenderData *)ptr->data;
- SceneRenderLayer *srl = (SceneRenderLayer *)value.data;
- const int index = BLI_findindex(&rd->layers, srl);
- if (index != -1) rd->actlay = index;
-}
-
-static SceneRenderLayer *rna_RenderLayer_new(ID *id, RenderData *UNUSED(rd), const char *name)
-{
- Scene *scene = (Scene *)id;
- SceneRenderLayer *srl = BKE_scene_add_render_layer(scene, name);
-
- DAG_id_tag_update(&scene->id, 0);
- WM_main_add_notifier(NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
- return srl;
-}
-
-static void rna_RenderLayer_remove(
- ID *id, RenderData *UNUSED(rd), Main *bmain, ReportList *reports, PointerRNA *srl_ptr)
-{
- SceneRenderLayer *srl = srl_ptr->data;
- Scene *scene = (Scene *)id;
-
- if (!BKE_scene_remove_render_layer(bmain, scene, srl)) {
- BKE_reportf(reports, RPT_ERROR, "Render layer '%s' could not be removed from scene '%s'",
- srl->name, scene->id.name + 2);
- return;
- }
-
- RNA_POINTER_INVALIDATE(srl_ptr);
-
- DAG_id_tag_update(&scene->id, 0);
- WM_main_add_notifier(NC_SCENE | ND_RENDER_OPTIONS, NULL);
-}
-
static int rna_RenderSettings_active_view_index_get(PointerRNA *ptr)
{
RenderData *rd = (RenderData *)ptr->data;
@@ -1465,121 +1364,74 @@ static void rna_RenderView_remove(
WM_main_add_notifier(NC_SCENE | ND_RENDER_OPTIONS, NULL);
}
-static void rna_RenderSettings_engine_set(PointerRNA *ptr, int value)
+static void rna_RenderSettings_views_format_set(PointerRNA *ptr, int value)
{
RenderData *rd = (RenderData *)ptr->data;
- RenderEngineType *type = BLI_findlink(&R_engines, value);
-
- if (type)
- BLI_strncpy_utf8(rd->engine, type->idname, sizeof(rd->engine));
-}
-static const EnumPropertyItem *rna_RenderSettings_engine_itemf(
- bContext *UNUSED(C), PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop), bool *r_free)
-{
- RenderEngineType *type;
- EnumPropertyItem *item = NULL;
- EnumPropertyItem tmp = {0, "", 0, "", ""};
- int a = 0, totitem = 0;
-
- for (type = R_engines.first; type; type = type->next, a++) {
- tmp.value = a;
- tmp.identifier = type->idname;
- tmp.name = type->name;
- RNA_enum_item_add(&item, &totitem, &tmp);
+ if (rd->views_format == SCE_VIEWS_FORMAT_MULTIVIEW &&
+ value == SCE_VIEWS_FORMAT_STEREO_3D)
+ {
+ /* make sure the actview is visible */
+ if (rd->actview > 1) rd->actview = 1;
}
-
- RNA_enum_item_end(&item, &totitem);
- *r_free = true;
- return item;
+ rd->views_format = value;
}
-static int rna_RenderSettings_engine_get(PointerRNA *ptr)
+void rna_Scene_glsl_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- RenderData *rd = (RenderData *)ptr->data;
- RenderEngineType *type;
- int a = 0;
-
- for (type = R_engines.first; type; type = type->next, a++)
- if (STREQ(type->idname, rd->engine))
- return a;
-
- return 0;
-}
+ Scene *scene = (Scene *)ptr->id.data;
-static void rna_RenderSettings_engine_update(Main *bmain, Scene *UNUSED(unused), PointerRNA *UNUSED(ptr))
-{
- ED_render_engine_changed(bmain);
+ DEG_id_tag_update(&scene->id, 0);
}
-static void rna_Scene_glsl_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
+static void rna_Scene_world_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *sc = (Scene *)ptr->id.data;
- DAG_id_tag_update(&scene->id, 0);
+ rna_Scene_glsl_update(bmain, scene, ptr);
+ WM_main_add_notifier(NC_WORLD | ND_WORLD, &sc->id);
}
-static void rna_Scene_freestyle_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
+void rna_Scene_freestyle_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
Scene *scene = (Scene *)ptr->id.data;
- DAG_id_tag_update(&scene->id, 0);
+ DEG_id_tag_update(&scene->id, 0);
}
-static void rna_Scene_use_view_map_cache_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *UNUSED(ptr))
+void rna_Scene_use_view_map_cache_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *UNUSED(ptr))
{
#ifdef WITH_FREESTYLE
FRS_free_view_map_cache();
#endif
}
-static IDProperty *rna_SceneRenderLayer_idprops(PointerRNA *ptr, bool create)
-{
- SceneRenderLayer *srl = (SceneRenderLayer *)ptr->data;
-
- if (create && !srl->prop) {
- IDPropertyTemplate val = {0};
- srl->prop = IDP_New(IDP_GROUP, &val, "SceneRenderLayer ID properties");
- }
-
- return srl->prop;
-}
-
-static void rna_SceneRenderLayer_name_set(PointerRNA *ptr, const char *value)
+void rna_ViewLayer_name_set(PointerRNA *ptr, const char *value)
{
Scene *scene = (Scene *)ptr->id.data;
- SceneRenderLayer *rl = (SceneRenderLayer *)ptr->data;
- char oldname[sizeof(rl->name)];
+ ViewLayer *view_layer = (ViewLayer *)ptr->data;
+ char oldname[sizeof(view_layer->name)];
- BLI_strncpy(oldname, rl->name, sizeof(rl->name));
+ BLI_strncpy(oldname, view_layer->name, sizeof(view_layer->name));
- BLI_strncpy_utf8(rl->name, value, sizeof(rl->name));
- BLI_uniquename(&scene->r.layers, rl, DATA_("RenderLayer"), '.', offsetof(SceneRenderLayer, name), sizeof(rl->name));
+ BLI_strncpy_utf8(view_layer->name, value, sizeof(view_layer->name));
+ BLI_uniquename(&scene->view_layers, view_layer, DATA_("ViewLayer"), '.', offsetof(ViewLayer, name), sizeof(view_layer->name));
if (scene->nodetree) {
bNode *node;
- int index = BLI_findindex(&scene->r.layers, rl);
+ int index = BLI_findindex(&scene->view_layers, view_layer);
for (node = scene->nodetree->nodes.first; node; node = node->next) {
if (node->type == CMP_NODE_R_LAYERS && node->id == NULL) {
if (node->custom1 == index)
- BLI_strncpy(node->name, rl->name, NODE_MAXSTR);
+ BLI_strncpy(node->name, view_layer->name, NODE_MAXSTR);
}
}
}
/* fix all the animation data which may link to this */
- BKE_animdata_fix_paths_rename_all(NULL, "render.layers", oldname, rl->name);
-}
-
-static char *rna_SceneRenderLayer_path(PointerRNA *ptr)
-{
- SceneRenderLayer *srl = (SceneRenderLayer *)ptr->data;
- char name_esc[sizeof(srl->name) * 2];
-
- BLI_strescape(name_esc, srl->name, sizeof(name_esc));
- return BLI_sprintfN("render.layers[\"%s\"]", name_esc);
+ BKE_animdata_fix_paths_rename_all(NULL, "view_layers", oldname, view_layer->name);
}
static void rna_SceneRenderView_name_set(PointerRNA *ptr, const char *value)
@@ -1590,62 +1442,7 @@ static void rna_SceneRenderView_name_set(PointerRNA *ptr, const char *value)
BLI_uniquename(&scene->r.views, rv, DATA_("RenderView"), '.', offsetof(SceneRenderView, name), sizeof(rv->name));
}
-static char *rna_SceneRenderView_path(PointerRNA *ptr)
-{
- SceneRenderView *srv = (SceneRenderView *)ptr->data;
- return BLI_sprintfN("render.views[\"%s\"]", srv->name);
-}
-
-static void rna_RenderSettings_views_format_set(PointerRNA *ptr, int value)
-{
- RenderData *rd = (RenderData *)ptr->data;
-
- if (rd->views_format == SCE_VIEWS_FORMAT_MULTIVIEW &&
- value == SCE_VIEWS_FORMAT_STEREO_3D)
- {
- /* make sure the actview is visible */
- if (rd->actview > 1) rd->actview = 1;
- }
-
- rd->views_format = value;
-}
-
-static int rna_RenderSettings_multiple_engines_get(PointerRNA *UNUSED(ptr))
-{
- return (BLI_listbase_count(&R_engines) > 1);
-}
-
-static int rna_RenderSettings_use_shading_nodes_get(PointerRNA *ptr)
-{
- Scene *scene = (Scene *)ptr->id.data;
- return BKE_scene_use_new_shading_nodes(scene);
-}
-
-static int rna_RenderSettings_use_spherical_stereo_get(PointerRNA *ptr)
-{
- Scene *scene = (Scene *)ptr->id.data;
- return BKE_scene_use_spherical_stereo(scene);
-}
-
-static int rna_RenderSettings_use_game_engine_get(PointerRNA *ptr)
-{
- RenderData *rd = (RenderData *)ptr->data;
- RenderEngineType *type;
-
- for (type = R_engines.first; type; type = type->next)
- if (STREQ(type->idname, rd->engine))
- return (type->flag & RE_GAME) != 0;
-
- return 0;
-}
-
-static void rna_SceneRenderLayer_layer_set(PointerRNA *ptr, const int *values)
-{
- SceneRenderLayer *rl = (SceneRenderLayer *)ptr->data;
- rl->lay = ED_view3d_scene_layer_set(rl->lay, values, NULL);
-}
-
-static void rna_SceneRenderLayer_pass_update(Main *bmain, Scene *activescene, PointerRNA *ptr)
+void rna_ViewLayer_pass_update(Main *bmain, Scene *activescene, PointerRNA *ptr)
{
Scene *scene = (Scene *)ptr->id.data;
@@ -1655,11 +1452,10 @@ static void rna_SceneRenderLayer_pass_update(Main *bmain, Scene *activescene, Po
rna_Scene_glsl_update(bmain, activescene, ptr);
}
-static void rna_SceneRenderLayer_update_render_passes(ID *id)
+static char *rna_SceneRenderView_path(PointerRNA *ptr)
{
- Scene *scene = (Scene *)id;
- if (scene->nodetree)
- ntreeCompositUpdateRLayers(scene->nodetree);
+ SceneRenderView *srv = (SceneRenderView *)ptr->data;
+ return BLI_sprintfN("render.views[\"%s\"]", srv->name);
}
static void rna_Scene_use_nodes_update(bContext *C, PointerRNA *ptr)
@@ -1673,23 +1469,25 @@ static void rna_Scene_use_nodes_update(bContext *C, PointerRNA *ptr)
static void rna_Physics_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
Scene *scene = (Scene *)ptr->id.data;
- Base *base;
-
- for (base = scene->base.first; base; base = base->next)
- BKE_ptcache_object_reset(scene, base->object, PTCACHE_RESET_DEPSGRAPH);
+ FOREACH_SCENE_OBJECT(scene, ob)
+ {
+ BKE_ptcache_object_reset(scene, ob, PTCACHE_RESET_DEPSGRAPH);
+ }
+ FOREACH_SCENE_OBJECT_END
}
static void rna_Scene_editmesh_select_mode_set(PointerRNA *ptr, const int *value)
{
Scene *scene = (Scene *)ptr->id.data;
+ ViewLayer *view_layer = BKE_view_layer_context_active_PLACEHOLDER(scene);
ToolSettings *ts = (ToolSettings *)ptr->data;
int flag = (value[0] ? SCE_SELECT_VERTEX : 0) | (value[1] ? SCE_SELECT_EDGE : 0) | (value[2] ? SCE_SELECT_FACE : 0);
if (flag) {
ts->selectmode = flag;
- if (scene->basact) {
- Mesh *me = BKE_mesh_from_object(scene->basact->object);
+ if (view_layer->basact) {
+ Mesh *me = BKE_mesh_from_object(view_layer->basact->object);
if (me && me->edit_btmesh && me->edit_btmesh->selectmode != flag) {
me->edit_btmesh->selectmode = flag;
EDBM_selectmode_set(me->edit_btmesh);
@@ -1698,12 +1496,13 @@ static void rna_Scene_editmesh_select_mode_set(PointerRNA *ptr, const int *value
}
}
-static void rna_Scene_editmesh_select_mode_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *UNUSED(ptr))
+static void rna_Scene_editmesh_select_mode_update(bContext *C, PointerRNA *UNUSED(ptr))
{
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Mesh *me = NULL;
- if (scene->basact) {
- me = BKE_mesh_from_object(scene->basact->object);
+ if (view_layer->basact) {
+ me = BKE_mesh_from_object(view_layer->basact->object);
if (me && me->edit_btmesh == NULL)
me = NULL;
}
@@ -1725,7 +1524,7 @@ static void object_simplify_update(Object *ob)
for (md = ob->modifiers.first; md; md = md->next) {
if (ELEM(md->type, eModifierType_Subsurf, eModifierType_Multires, eModifierType_ParticleSystem)) {
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
}
}
@@ -1740,33 +1539,39 @@ static void object_simplify_update(Object *ob)
}
}
-static void rna_Scene_use_simplify_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+static void rna_Scene_use_simplify_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
Scene *sce = ptr->id.data;
Scene *sce_iter;
Base *base;
- BKE_main_id_tag_listbase(&bmain->object, LIB_TAG_DOIT, true);
- for (SETLOOPER(sce, sce_iter, base))
+ FOREACH_SCENE_OBJECT(sce, ob)
+ {
+ object_simplify_update(ob);
+ }
+ FOREACH_SCENE_OBJECT_END
+
+ for (SETLOOPER_SET_ONLY(sce, sce_iter, base)) {
object_simplify_update(base->object);
+ }
WM_main_add_notifier(NC_GEOM | ND_DATA, NULL);
- DAG_id_tag_update(&scene->id, 0);
+ DEG_id_tag_update(&sce->id, 0);
}
-static void rna_Scene_simplify_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
+static void rna_Scene_simplify_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
Scene *sce = ptr->id.data;
if (sce->r.mode & R_SIMPLIFY)
- rna_Scene_use_simplify_update(bmain, sce, ptr);
+ rna_Scene_use_simplify_update(bmain, scene, ptr);
}
static void rna_SceneRenderData_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
Scene *sce = ptr->id.data;
- DAG_id_tag_update(&sce->id, 0);
+ DEG_id_tag_update(&sce->id, 0);
}
static void rna_Scene_use_persistent_data_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
@@ -1896,9 +1701,12 @@ static KeyingSet *rna_Scene_keying_set_new(Scene *sce, ReportList *reports, cons
}
}
-static void rna_UnifiedPaintSettings_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *UNUSED(ptr))
+static void rna_UnifiedPaintSettings_update(bContext *C, PointerRNA *UNUSED(ptr))
{
- Brush *br = BKE_paint_brush(BKE_paint_get_active(scene));
+ const WorkSpace *workspace = CTX_wm_workspace(C);
+ Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Brush *br = BKE_paint_brush(BKE_paint_get_active(scene, view_layer, workspace->object_mode));
WM_main_add_notifier(NC_BRUSH | NA_EDITED, br);
}
@@ -1921,11 +1729,11 @@ static void rna_UnifiedPaintSettings_unprojected_radius_set(PointerRNA *ptr, flo
ups->unprojected_radius = value;
}
-static void rna_UnifiedPaintSettings_radius_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+static void rna_UnifiedPaintSettings_radius_update(bContext *C, PointerRNA *ptr)
{
/* changing the unified size should invalidate the overlay but also update the brush */
BKE_paint_invalidate_overlay_all();
- rna_UnifiedPaintSettings_update(bmain, scene, ptr);
+ rna_UnifiedPaintSettings_update(C, ptr);
}
static char *rna_UnifiedPaintSettings_path(PointerRNA *UNUSED(ptr))
@@ -1939,18 +1747,19 @@ static char *rna_CurvePaintSettings_path(PointerRNA *UNUSED(ptr))
}
/* generic function to recalc geometry */
-static void rna_EditMesh_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *UNUSED(ptr))
+static void rna_EditMesh_update(bContext *C, PointerRNA *UNUSED(ptr))
{
+ ViewLayer *view_layer = CTX_data_view_layer(C);
Mesh *me = NULL;
- if (scene->basact) {
- me = BKE_mesh_from_object(scene->basact->object);
+ if (view_layer->basact) {
+ me = BKE_mesh_from_object(view_layer->basact->object);
if (me && me->edit_btmesh == NULL)
me = NULL;
}
if (me) {
- DAG_id_tag_update(&me->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&me->id, OB_RECALC_DATA);
WM_main_add_notifier(NC_GEOM | ND_DATA, me);
}
}
@@ -1965,11 +1774,13 @@ static char *rna_MeshStatVis_path(PointerRNA *UNUSED(ptr))
* is not for general use and only for the few cases where changing scene
* settings and NOT for general purpose updates, possibly this should be
* given its own notifier. */
-static void rna_Scene_update_active_object_data(Main *UNUSED(bmain), Scene *scene, PointerRNA *UNUSED(ptr))
+static void rna_Scene_update_active_object_data(bContext *C, PointerRNA *UNUSED(ptr))
{
- Object *ob = OBACT;
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Object *ob = OBACT(view_layer);
+
if (ob) {
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_main_add_notifier(NC_OBJECT | ND_DRAW, &ob->id);
}
}
@@ -1980,7 +1791,7 @@ static void rna_SceneCamera_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Po
Object *camera = scene->camera;
if (camera)
- DAG_id_tag_update(&camera->id, 0);
+ DEG_id_tag_update(&camera->id, 0);
}
static void rna_SceneSequencer_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *UNUSED(ptr))
@@ -1994,14 +1805,14 @@ static char *rna_ToolSettings_path(PointerRNA *UNUSED(ptr))
return BLI_strdup("tool_settings");
}
-static PointerRNA rna_FreestyleLineSet_linestyle_get(PointerRNA *ptr)
+PointerRNA rna_FreestyleLineSet_linestyle_get(PointerRNA *ptr)
{
FreestyleLineSet *lineset = (FreestyleLineSet *)ptr->data;
return rna_pointer_inherit_refine(ptr, &RNA_FreestyleLineStyle, lineset->linestyle);
}
-static void rna_FreestyleLineSet_linestyle_set(PointerRNA *ptr, PointerRNA value)
+void rna_FreestyleLineSet_linestyle_set(PointerRNA *ptr, PointerRNA value)
{
FreestyleLineSet *lineset = (FreestyleLineSet *)ptr->data;
@@ -2011,19 +1822,19 @@ static void rna_FreestyleLineSet_linestyle_set(PointerRNA *ptr, PointerRNA value
id_us_plus(&lineset->linestyle->id);
}
-static FreestyleLineSet *rna_FreestyleSettings_lineset_add(
+FreestyleLineSet *rna_FreestyleSettings_lineset_add(
ID *id, FreestyleSettings *config, Main *bmain, const char *name)
{
Scene *scene = (Scene *)id;
FreestyleLineSet *lineset = BKE_freestyle_lineset_add(bmain, (FreestyleConfig *)config, name);
- DAG_id_tag_update(&scene->id, 0);
+ DEG_id_tag_update(&scene->id, 0);
WM_main_add_notifier(NC_SCENE | ND_RENDER_OPTIONS, NULL);
return lineset;
}
-static void rna_FreestyleSettings_lineset_remove(
+void rna_FreestyleSettings_lineset_remove(
ID *id, FreestyleSettings *config, ReportList *reports, PointerRNA *lineset_ptr)
{
FreestyleLineSet *lineset = lineset_ptr->data;
@@ -2036,18 +1847,18 @@ static void rna_FreestyleSettings_lineset_remove(
RNA_POINTER_INVALIDATE(lineset_ptr);
- DAG_id_tag_update(&scene->id, 0);
+ DEG_id_tag_update(&scene->id, 0);
WM_main_add_notifier(NC_SCENE | ND_RENDER_OPTIONS, NULL);
}
-static PointerRNA rna_FreestyleSettings_active_lineset_get(PointerRNA *ptr)
+PointerRNA rna_FreestyleSettings_active_lineset_get(PointerRNA *ptr)
{
FreestyleConfig *config = (FreestyleConfig *)ptr->data;
FreestyleLineSet *lineset = BKE_freestyle_lineset_get_active(config);
return rna_pointer_inherit_refine(ptr, &RNA_FreestyleLineSet, lineset);
}
-static void rna_FreestyleSettings_active_lineset_index_range(
+void rna_FreestyleSettings_active_lineset_index_range(
PointerRNA *ptr, int *min, int *max, int *UNUSED(softmin), int *UNUSED(softmax))
{
FreestyleConfig *config = (FreestyleConfig *)ptr->data;
@@ -2056,30 +1867,30 @@ static void rna_FreestyleSettings_active_lineset_index_range(
*max = max_ii(0, BLI_listbase_count(&config->linesets) - 1);
}
-static int rna_FreestyleSettings_active_lineset_index_get(PointerRNA *ptr)
+int rna_FreestyleSettings_active_lineset_index_get(PointerRNA *ptr)
{
FreestyleConfig *config = (FreestyleConfig *)ptr->data;
return BKE_freestyle_lineset_get_active_index(config);
}
-static void rna_FreestyleSettings_active_lineset_index_set(PointerRNA *ptr, int value)
+void rna_FreestyleSettings_active_lineset_index_set(PointerRNA *ptr, int value)
{
FreestyleConfig *config = (FreestyleConfig *)ptr->data;
BKE_freestyle_lineset_set_active_index(config, value);
}
-static FreestyleModuleConfig *rna_FreestyleSettings_module_add(ID *id, FreestyleSettings *config)
+FreestyleModuleConfig *rna_FreestyleSettings_module_add(ID *id, FreestyleSettings *config)
{
Scene *scene = (Scene *)id;
FreestyleModuleConfig *module = BKE_freestyle_module_add((FreestyleConfig *)config);
- DAG_id_tag_update(&scene->id, 0);
+ DEG_id_tag_update(&scene->id, 0);
WM_main_add_notifier(NC_SCENE | ND_RENDER_OPTIONS, NULL);
return module;
}
-static void rna_FreestyleSettings_module_remove(
+void rna_FreestyleSettings_module_remove(
ID *id, FreestyleSettings *config, ReportList *reports, PointerRNA *module_ptr)
{
Scene *scene = (Scene *)id;
@@ -2095,7 +1906,7 @@ static void rna_FreestyleSettings_module_remove(
RNA_POINTER_INVALIDATE(module_ptr);
- DAG_id_tag_update(&scene->id, 0);
+ DEG_id_tag_update(&scene->id, 0);
WM_main_add_notifier(NC_SCENE | ND_RENDER_OPTIONS, NULL);
}
@@ -2164,7 +1975,69 @@ static void rna_Stereo3dFormat_update(Main *UNUSED(bmain), Scene *UNUSED(scene),
static int rna_gpu_is_hq_supported_get(PointerRNA *UNUSED(ptr))
{
- return GPU_instanced_drawing_support() && GPU_geometry_shader_support();
+ return true;
+}
+
+static int rna_ViewLayer_active_view_layer_index_get(PointerRNA *ptr)
+{
+ Scene *scene = (Scene *)ptr->data;
+ return scene->active_view_layer;
+}
+
+static void rna_ViewLayer_active_view_layer_index_set(PointerRNA *ptr, int value)
+{
+ Scene *scene = (Scene *)ptr->data;
+ int num_layers = BLI_listbase_count(&scene->view_layers);
+ scene->active_view_layer = min_ff(value, num_layers - 1);
+}
+
+static void rna_ViewLayer_active_view_layer_index_range(
+ PointerRNA *ptr, int *min, int *max, int *UNUSED(softmin), int *UNUSED(softmax))
+{
+ Scene *scene = (Scene *)ptr->data;
+
+ *min = 0;
+ *max = max_ii(0, BLI_listbase_count(&scene->view_layers) - 1);
+}
+
+static PointerRNA rna_ViewLayer_active_view_layer_get(PointerRNA *ptr)
+{
+ Scene *scene = (Scene *)ptr->data;
+ ViewLayer *view_layer = BLI_findlink(&scene->view_layers, scene->active_view_layer);
+
+ return rna_pointer_inherit_refine(ptr, &RNA_ViewLayer, view_layer);
+}
+
+static void rna_ViewLayer_active_view_layer_set(PointerRNA *ptr, PointerRNA value)
+{
+ Scene *scene = (Scene *)ptr->data;
+ ViewLayer *view_layer = (ViewLayer *)value.data;
+ const int index = BLI_findindex(&scene->view_layers, view_layer);
+ if (index != -1) scene->active_view_layer = index;
+}
+
+static ViewLayer *rna_ViewLayer_new(
+ ID *id, Scene *UNUSED(sce), Main *bmain, const char *name)
+{
+ Scene *scene = (Scene *)id;
+ ViewLayer *view_layer = BKE_view_layer_add(scene, name);
+
+ DEG_id_tag_update(&scene->id, 0);
+ DEG_relations_tag_update(bmain);
+ WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
+
+ return view_layer;
+}
+
+static void rna_ViewLayer_remove(
+ ID *id, Scene *UNUSED(sce), Main *bmain, ReportList *reports, PointerRNA *sl_ptr)
+{
+ Scene *scene = (Scene *)id;
+ ViewLayer *view_layer = sl_ptr->data;
+
+ if (ED_scene_view_layer_delete(bmain, scene, view_layer, reports)) {
+ RNA_POINTER_INVALIDATE(sl_ptr);
+ }
}
#else
@@ -2435,24 +2308,6 @@ static void rna_def_gpencil_brushes(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_property_ui_text(prop, "Active Brush Index", "Index of active brush");
}
-static void rna_def_transform_orientation(BlenderRNA *brna)
-{
- StructRNA *srna;
- PropertyRNA *prop;
-
- srna = RNA_def_struct(brna, "TransformOrientation", NULL);
-
- prop = RNA_def_property(srna, "matrix", PROP_FLOAT, PROP_MATRIX);
- RNA_def_property_float_sdna(prop, NULL, "mat");
- RNA_def_property_multi_array(prop, 2, rna_matrix_dimsize_3x3);
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
-
- prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
- RNA_def_struct_name_property(srna, prop);
- RNA_def_property_ui_text(prop, "Name", "Name of the custom transform orientation");
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
-}
-
static void rna_def_tool_settings(BlenderRNA *brna)
{
StructRNA *srna;
@@ -2544,6 +2399,7 @@ static void rna_def_tool_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Sculpt", "");
prop = RNA_def_property(srna, "use_auto_normalize", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_boolean_sdna(prop, NULL, "auto_normalize", 1);
RNA_def_property_ui_text(prop, "WPaint Auto-Normalize",
"Ensure all bone-deforming vertex groups add up "
@@ -2551,6 +2407,7 @@ static void rna_def_tool_settings(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Scene_update_active_object_data");
prop = RNA_def_property(srna, "use_multipaint", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_boolean_sdna(prop, NULL, "multipaint", 1);
RNA_def_property_ui_text(prop, "WPaint Multi-Paint",
"Paint across the weights of all selected bones, "
@@ -2558,12 +2415,14 @@ static void rna_def_tool_settings(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Scene_update_active_object_data");
prop = RNA_def_property(srna, "vertex_group_user", PROP_ENUM, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_enum_sdna(prop, NULL, "weightuser");
RNA_def_property_enum_items(prop, draw_groupuser_items);
RNA_def_property_ui_text(prop, "Mask Non-Group Vertices", "Display unweighted vertices");
RNA_def_property_update(prop, 0, "rna_Scene_update_active_object_data");
prop = RNA_def_property(srna, "vertex_group_subset", PROP_ENUM, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_enum_sdna(prop, NULL, "vgroupsubset");
RNA_def_property_enum_items(prop, vertex_group_select_items);
RNA_def_property_ui_text(prop, "Subset", "Filter Vertex groups for Display");
@@ -2874,6 +2733,7 @@ static void rna_def_tool_settings(BlenderRNA *brna)
RNA_def_property_array(prop, 3);
RNA_def_property_boolean_funcs(prop, NULL, "rna_Scene_editmesh_select_mode_set");
RNA_def_property_ui_text(prop, "Mesh Selection Mode", "Which mesh elements selection works on");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(prop, 0, "rna_Scene_editmesh_select_mode_update");
prop = RNA_def_property(srna, "vertex_group_weight", PROP_FLOAT, PROP_FACTOR);
@@ -3009,6 +2869,7 @@ static void rna_def_unified_paint_settings(BlenderRNA *brna)
* from the active brush */
prop = RNA_def_property(srna, "size", PROP_INT, PROP_PIXEL);
RNA_def_property_int_funcs(prop, NULL, "rna_UnifiedPaintSettings_size_set", NULL);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_range(prop, 1, MAX_BRUSH_PIXEL_RADIUS * 10);
RNA_def_property_ui_range(prop, 1, MAX_BRUSH_PIXEL_RADIUS, 1, -1);
RNA_def_property_ui_text(prop, "Radius", "Radius of the brush");
@@ -3016,6 +2877,7 @@ static void rna_def_unified_paint_settings(BlenderRNA *brna)
prop = RNA_def_property(srna, "unprojected_radius", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_funcs(prop, NULL, "rna_UnifiedPaintSettings_unprojected_radius_set", NULL);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_range(prop, 0.001, FLT_MAX);
RNA_def_property_ui_range(prop, 0.001, 1, 0, -1);
RNA_def_property_ui_text(prop, "Unprojected Radius", "Radius of brush in Blender units");
@@ -3023,6 +2885,7 @@ static void rna_def_unified_paint_settings(BlenderRNA *brna)
prop = RNA_def_property(srna, "strength", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_float_sdna(prop, NULL, "alpha");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_float_default(prop, 0.5f);
RNA_def_property_range(prop, 0.0f, 10.0f);
RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.001, 3);
@@ -3031,6 +2894,7 @@ static void rna_def_unified_paint_settings(BlenderRNA *brna)
prop = RNA_def_property(srna, "weight", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_float_sdna(prop, NULL, "weight");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_float_default(prop, 0.5f);
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.001, 3);
@@ -3038,12 +2902,14 @@ static void rna_def_unified_paint_settings(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_UnifiedPaintSettings_update");
prop = RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR_GAMMA);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_range(prop, 0.0, 1.0);
RNA_def_property_float_sdna(prop, NULL, "rgb");
RNA_def_property_ui_text(prop, "Color", "");
RNA_def_property_update(prop, 0, "rna_UnifiedPaintSettings_update");
prop = RNA_def_property(srna, "secondary_color", PROP_FLOAT, PROP_COLOR_GAMMA);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_range(prop, 0.0, 1.0);
RNA_def_property_float_sdna(prop, NULL, "secondary_rgb");
RNA_def_property_ui_text(prop, "Secondary Color", "");
@@ -3185,6 +3051,7 @@ static void rna_def_statvis(BlenderRNA *brna)
prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, stat_type);
RNA_def_property_ui_text(prop, "Type", "Type of data to visualize/check");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(prop, 0, "rna_EditMesh_update");
@@ -3195,6 +3062,7 @@ static void rna_def_statvis(BlenderRNA *brna)
RNA_def_property_range(prop, 0.0f, DEG2RADF(180.0f));
RNA_def_property_ui_range(prop, 0.0f, DEG2RADF(180.0f), 0.001, 3);
RNA_def_property_ui_text(prop, "Overhang Min", "Minimum angle to display");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(prop, 0, "rna_EditMesh_update");
prop = RNA_def_property(srna, "overhang_max", PROP_FLOAT, PROP_ANGLE);
@@ -3203,12 +3071,14 @@ static void rna_def_statvis(BlenderRNA *brna)
RNA_def_property_range(prop, 0.0f, DEG2RADF(180.0f));
RNA_def_property_ui_range(prop, 0.0f, DEG2RADF(180.0f), 10, 3);
RNA_def_property_ui_text(prop, "Overhang Max", "Maximum angle to display");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(prop, 0, "rna_EditMesh_update");
prop = RNA_def_property(srna, "overhang_axis", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "overhang_axis");
RNA_def_property_enum_items(prop, rna_enum_object_axis_items);
RNA_def_property_ui_text(prop, "Axis", "");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(prop, 0, "rna_EditMesh_update");
@@ -3219,6 +3089,7 @@ static void rna_def_statvis(BlenderRNA *brna)
RNA_def_property_range(prop, 0.0f, 1000.0);
RNA_def_property_ui_range(prop, 0.0f, 100.0, 0.001, 3);
RNA_def_property_ui_text(prop, "Thickness Min", "Minimum for measuring thickness");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(prop, 0, "rna_EditMesh_update");
prop = RNA_def_property(srna, "thickness_max", PROP_FLOAT, PROP_DISTANCE);
@@ -3227,12 +3098,14 @@ static void rna_def_statvis(BlenderRNA *brna)
RNA_def_property_range(prop, 0.0f, 1000.0);
RNA_def_property_ui_range(prop, 0.0f, 100.0, 0.001, 3);
RNA_def_property_ui_text(prop, "Thickness Max", "Maximum for measuring thickness");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(prop, 0, "rna_EditMesh_update");
prop = RNA_def_property(srna, "thickness_samples", PROP_INT, PROP_UNSIGNED);
RNA_def_property_int_sdna(prop, NULL, "thickness_samples");
RNA_def_property_range(prop, 1, 32);
RNA_def_property_ui_text(prop, "Samples", "Number of samples to test per face");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(prop, 0, "rna_EditMesh_update");
/* distort */
@@ -3242,6 +3115,7 @@ static void rna_def_statvis(BlenderRNA *brna)
RNA_def_property_range(prop, 0.0f, DEG2RADF(180.0f));
RNA_def_property_ui_range(prop, 0.0f, DEG2RADF(180.0f), 10, 3);
RNA_def_property_ui_text(prop, "Distort Min", "Minimum angle to display");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(prop, 0, "rna_EditMesh_update");
prop = RNA_def_property(srna, "distort_max", PROP_FLOAT, PROP_ANGLE);
@@ -3250,6 +3124,7 @@ static void rna_def_statvis(BlenderRNA *brna)
RNA_def_property_range(prop, 0.0f, DEG2RADF(180.0f));
RNA_def_property_ui_range(prop, 0.0f, DEG2RADF(180.0f), 10, 3);
RNA_def_property_ui_text(prop, "Distort Max", "Maximum angle to display");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(prop, 0, "rna_EditMesh_update");
/* sharp */
@@ -3259,6 +3134,7 @@ static void rna_def_statvis(BlenderRNA *brna)
RNA_def_property_range(prop, -DEG2RADF(180.0f), DEG2RADF(180.0f));
RNA_def_property_ui_range(prop, -DEG2RADF(180.0f), DEG2RADF(180.0f), 10, 3);
RNA_def_property_ui_text(prop, "Distort Min", "Minimum angle to display");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(prop, 0, "rna_EditMesh_update");
prop = RNA_def_property(srna, "sharp_max", PROP_FLOAT, PROP_ANGLE);
@@ -3267,6 +3143,7 @@ static void rna_def_statvis(BlenderRNA *brna)
RNA_def_property_range(prop, -DEG2RADF(180.0f), DEG2RADF(180.0f));
RNA_def_property_ui_range(prop, -DEG2RADF(180.0f), DEG2RADF(180.0f), 10, 3);
RNA_def_property_ui_text(prop, "Distort Max", "Maximum angle to display");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(prop, 0, "rna_EditMesh_update");
}
@@ -3314,67 +3191,19 @@ static void rna_def_unit_settings(BlenderRNA *brna)
RNA_def_property_update(prop, NC_WINDOW, NULL);
}
-void rna_def_render_layer_common(StructRNA *srna, int scene)
+void rna_def_view_layer_common(StructRNA *srna, int scene)
{
PropertyRNA *prop;
prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
- if (scene) RNA_def_property_string_funcs(prop, NULL, NULL, "rna_SceneRenderLayer_name_set");
+ if (scene) RNA_def_property_string_funcs(prop, NULL, NULL, "rna_ViewLayer_name_set");
else RNA_def_property_string_sdna(prop, NULL, "name");
RNA_def_property_ui_text(prop, "Name", "Render layer name");
RNA_def_struct_name_property(srna, prop);
if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop = RNA_def_property(srna, "material_override", PROP_POINTER, PROP_NONE);
- RNA_def_property_pointer_sdna(prop, NULL, "mat_override");
- RNA_def_property_struct_type(prop, "Material");
- RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_ui_text(prop, "Material Override",
- "Material to override all other materials in this render layer");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
- else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
-
- prop = RNA_def_property(srna, "light_override", PROP_POINTER, PROP_NONE);
- RNA_def_property_pointer_sdna(prop, NULL, "light_override");
- RNA_def_property_struct_type(prop, "Group");
- RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_ui_text(prop, "Light Override", "Group to override all other lights in this render layer");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
- else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
-
- /* layers */
- prop = RNA_def_property(srna, "layers", PROP_BOOLEAN, PROP_LAYER_MEMBER);
- RNA_def_property_boolean_sdna(prop, NULL, "lay", 1);
- RNA_def_property_array(prop, 20);
- RNA_def_property_ui_text(prop, "Visible Layers", "Scene layers included in this render layer");
- if (scene) RNA_def_property_boolean_funcs(prop, NULL, "rna_SceneRenderLayer_layer_set");
- else RNA_def_property_boolean_funcs(prop, NULL, "rna_RenderLayer_layer_set");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_Scene_glsl_update");
- else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- /* this seems to be too much trouble with depsgraph updates/etc. currently (20140423) */
- RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
-
- prop = RNA_def_property(srna, "layers_zmask", PROP_BOOLEAN, PROP_LAYER);
- RNA_def_property_boolean_sdna(prop, NULL, "lay_zmask", 1);
- RNA_def_property_array(prop, 20);
- RNA_def_property_ui_text(prop, "Zmask Layers", "Zmask scene layers for solid faces");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_Scene_glsl_update");
- else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
-
- prop = RNA_def_property(srna, "layers_exclude", PROP_BOOLEAN, PROP_LAYER);
- RNA_def_property_boolean_sdna(prop, NULL, "lay_exclude", 1);
- RNA_def_property_array(prop, 20);
- RNA_def_property_ui_text(prop, "Exclude Layers", "Exclude scene layers from having any influence");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_Scene_glsl_update");
- else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
-
if (scene) {
- prop = RNA_def_property(srna, "samples", PROP_INT, PROP_UNSIGNED);
- RNA_def_property_ui_text(prop, "Samples", "Override number of render samples for this render layer, "
- "0 will use the scene setting");
- RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
-
prop = RNA_def_property(srna, "pass_alpha_threshold", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_ui_text(prop, "Alpha Threshold",
"Z, Index, normal, UV and vector passes are only affected by surfaces with "
@@ -3383,12 +3212,6 @@ void rna_def_render_layer_common(StructRNA *srna, int scene)
}
/* layer options */
- prop = RNA_def_property(srna, "use", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_negative_sdna(prop, NULL, "layflag", SCE_LAY_DISABLE);
- RNA_def_property_ui_text(prop, "Enabled", "Disable or enable the render layer");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_Scene_glsl_update");
- else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
-
prop = RNA_def_property(srna, "use_zmask", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_ZMASK);
RNA_def_property_ui_text(prop, "Zmask", "Only render what's in front of the solid z values");
@@ -3450,247 +3273,241 @@ void rna_def_render_layer_common(StructRNA *srna, int scene)
if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop = RNA_def_property(srna, "use_freestyle", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_FRS);
- RNA_def_property_ui_text(prop, "Freestyle", "Render stylized strokes in this Layer");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_Scene_freestyle_update");
- else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
-
/* passes */
prop = RNA_def_property(srna, "use_pass_combined", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_COMBINED);
RNA_def_property_ui_text(prop, "Combined", "Deliver full combined RGBA buffer");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "use_pass_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_Z);
RNA_def_property_ui_text(prop, "Z", "Deliver Z values pass");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "use_pass_vector", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_VECTOR);
RNA_def_property_ui_text(prop, "Vector", "Deliver speed vector pass");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "use_pass_normal", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_NORMAL);
RNA_def_property_ui_text(prop, "Normal", "Deliver normal pass");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "use_pass_uv", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_UV);
RNA_def_property_ui_text(prop, "UV", "Deliver texture UV pass");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "use_pass_mist", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_MIST);
RNA_def_property_ui_text(prop, "Mist", "Deliver mist factor pass (0.0-1.0)");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "use_pass_object_index", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_INDEXOB);
RNA_def_property_ui_text(prop, "Object Index", "Deliver object index pass");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "use_pass_material_index", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_INDEXMA);
RNA_def_property_ui_text(prop, "Material Index", "Deliver material index pass");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "use_pass_color", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_RGBA);
RNA_def_property_ui_text(prop, "Color", "Deliver shade-less color pass");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "use_pass_diffuse", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_DIFFUSE);
RNA_def_property_ui_text(prop, "Diffuse", "Deliver diffuse pass");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "use_pass_specular", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_SPEC);
RNA_def_property_ui_text(prop, "Specular", "Deliver specular pass");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "use_pass_shadow", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_SHADOW);
RNA_def_property_ui_text(prop, "Shadow", "Deliver shadow pass");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "use_pass_ambient_occlusion", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_AO);
RNA_def_property_ui_text(prop, "AO", "Deliver AO pass");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "use_pass_reflection", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_REFLECT);
RNA_def_property_ui_text(prop, "Reflection", "Deliver raytraced reflection pass");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "use_pass_refraction", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_REFRACT);
RNA_def_property_ui_text(prop, "Refraction", "Deliver raytraced refraction pass");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "use_pass_emit", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_EMIT);
RNA_def_property_ui_text(prop, "Emit", "Deliver emission pass");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "use_pass_environment", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_ENVIRONMENT);
RNA_def_property_ui_text(prop, "Environment", "Deliver environment lighting pass");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "use_pass_indirect", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_INDIRECT);
RNA_def_property_ui_text(prop, "Indirect", "Deliver indirect lighting pass");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "exclude_specular", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_SPEC);
RNA_def_property_ui_text(prop, "Specular Exclude", "Exclude specular pass from combined");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_OFF, 1);
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "exclude_shadow", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_SHADOW);
RNA_def_property_ui_text(prop, "Shadow Exclude", "Exclude shadow pass from combined");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_OFF, 1);
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "exclude_ambient_occlusion", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_AO);
RNA_def_property_ui_text(prop, "AO Exclude", "Exclude AO pass from combined");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_OFF, 1);
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "exclude_reflection", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_REFLECT);
RNA_def_property_ui_text(prop, "Reflection Exclude", "Exclude raytraced reflection pass from combined");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_OFF, 1);
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "exclude_refraction", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_REFRACT);
RNA_def_property_ui_text(prop, "Refraction Exclude", "Exclude raytraced refraction pass from combined");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_OFF, 1);
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "exclude_emit", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_EMIT);
RNA_def_property_ui_text(prop, "Emit Exclude", "Exclude emission pass from combined");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_OFF, 1);
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "exclude_environment", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_ENVIRONMENT);
RNA_def_property_ui_text(prop, "Environment Exclude", "Exclude environment pass from combined");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_OFF, 1);
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "exclude_indirect", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_INDIRECT);
RNA_def_property_ui_text(prop, "Indirect Exclude", "Exclude indirect pass from combined");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_OFF, 1);
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "use_pass_diffuse_direct", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_DIFFUSE_DIRECT);
RNA_def_property_ui_text(prop, "Diffuse Direct", "Deliver diffuse direct pass");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "use_pass_diffuse_indirect", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_DIFFUSE_INDIRECT);
RNA_def_property_ui_text(prop, "Diffuse Indirect", "Deliver diffuse indirect pass");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "use_pass_diffuse_color", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_DIFFUSE_COLOR);
RNA_def_property_ui_text(prop, "Diffuse Color", "Deliver diffuse color pass");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "use_pass_glossy_direct", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_GLOSSY_DIRECT);
RNA_def_property_ui_text(prop, "Glossy Direct", "Deliver glossy direct pass");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "use_pass_glossy_indirect", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_GLOSSY_INDIRECT);
RNA_def_property_ui_text(prop, "Glossy Indirect", "Deliver glossy indirect pass");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "use_pass_glossy_color", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_GLOSSY_COLOR);
RNA_def_property_ui_text(prop, "Glossy Color", "Deliver glossy color pass");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "use_pass_transmission_direct", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_TRANSM_DIRECT);
RNA_def_property_ui_text(prop, "Transmission Direct", "Deliver transmission direct pass");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "use_pass_transmission_indirect", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_TRANSM_INDIRECT);
RNA_def_property_ui_text(prop, "Transmission Indirect", "Deliver transmission indirect pass");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "use_pass_transmission_color", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_TRANSM_COLOR);
RNA_def_property_ui_text(prop, "Transmission Color", "Deliver transmission color pass");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "use_pass_subsurface_direct", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_SUBSURFACE_DIRECT);
RNA_def_property_ui_text(prop, "Subsurface Direct", "Deliver subsurface direct pass");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "use_pass_subsurface_indirect", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_SUBSURFACE_INDIRECT);
RNA_def_property_ui_text(prop, "Subsurface Indirect", "Deliver subsurface indirect pass");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "use_pass_subsurface_color", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_SUBSURFACE_COLOR);
RNA_def_property_ui_text(prop, "Subsurface Color", "Deliver subsurface color pass");
- if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+ if (scene) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
}
@@ -3760,7 +3577,7 @@ static void rna_def_freestyle_linesets(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_parameter_clear_flags(parm, PROP_THICK_WRAP, 0);
}
-static void rna_def_freestyle_settings(BlenderRNA *brna)
+void rna_def_freestyle_settings(BlenderRNA *brna)
{
StructRNA *srna;
PropertyRNA *prop;
@@ -4053,8 +3870,8 @@ static void rna_def_freestyle_settings(BlenderRNA *brna)
srna = RNA_def_struct(brna, "FreestyleSettings", NULL);
RNA_def_struct_sdna(srna, "FreestyleConfig");
- RNA_def_struct_nested(brna, srna, "SceneRenderLayer");
- RNA_def_struct_ui_text(srna, "Freestyle Settings", "Freestyle settings for a SceneRenderLayer data-block");
+ RNA_def_struct_nested(brna, srna, "ViewLayer");
+ RNA_def_struct_ui_text(srna, "Freestyle Settings", "Freestyle settings for a ViewLayer data-block");
prop = RNA_def_property(srna, "modules", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "modules", NULL);
@@ -4780,11 +4597,6 @@ static void rna_def_scene_game_data(BlenderRNA *brna)
"Respect the frame rate from the Physics panel in the world properties "
"rather than rendering as many frames as possible");
- prop = RNA_def_property(srna, "use_display_lists", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", GAME_DISPLAY_LISTS);
- RNA_def_property_ui_text(prop, "Display Lists",
- "Use display lists to speed up rendering by keeping geometry on the GPU");
-
prop = RNA_def_property(srna, "use_deprecation_warnings", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", GAME_IGNORE_DEPRECATION_WARNINGS);
RNA_def_property_ui_text(prop, "Deprecation Warnings",
@@ -4944,11 +4756,23 @@ static void rna_def_gpu_dof_fx(BlenderRNA *brna)
RNA_def_property_int_funcs(prop, NULL, "rna_GPUDOFSettings_blades_set", NULL);
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_GPUDOFSettings_update");
+ prop = RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_ANGLE);
+ RNA_def_property_ui_text(prop, "Rotation", "Rotation of blades in apperture");
+ RNA_def_property_range(prop, -M_PI, M_PI);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+
+ prop = RNA_def_property(srna, "ratio", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_ui_text(prop, "Ratio", "Distortion to simulate anamorphic lens bokeh");
+ RNA_def_property_range(prop, 0.0000001f, FLT_MAX);
+ RNA_def_property_ui_range(prop, 1.0f, 2.0f, 0.1, 3);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+
prop = RNA_def_property(srna, "use_high_quality", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "high_quality", 1);
RNA_def_property_ui_text(prop, "High Quality", "Use high quality depth of field");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_GPUDOFSettings_update");
+ /* NOTE: high quality is always supported */
prop = RNA_def_property(srna, "is_hq_supported", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_gpu_is_hq_supported_get", NULL);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
@@ -5029,77 +4853,46 @@ static void rna_def_gpu_fx(BlenderRNA *brna)
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_GPUFXSettings_fx_update");
}
-
-static void rna_def_scene_render_layer(BlenderRNA *brna)
+static void rna_def_view_layers(BlenderRNA *brna, PropertyRNA *cprop)
{
StructRNA *srna;
- PropertyRNA *prop;
- FunctionRNA *func;
-
- srna = RNA_def_struct(brna, "SceneRenderLayer", NULL);
- RNA_def_struct_ui_text(srna, "Scene Render Layer", "Render layer");
- RNA_def_struct_ui_icon(srna, ICON_RENDERLAYERS);
- RNA_def_struct_path_func(srna, "rna_SceneRenderLayer_path");
- RNA_def_struct_idprops_func(srna, "rna_SceneRenderLayer_idprops");
-
- rna_def_render_layer_common(srna, 1);
-
- func = RNA_def_function(srna, "update_render_passes", "rna_SceneRenderLayer_update_render_passes");
- RNA_def_function_ui_description(func, "Requery the enabled render passes from the render engine");
- RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_NO_SELF);
-
- /* Freestyle */
- rna_def_freestyle_settings(brna);
-
- prop = RNA_def_property(srna, "freestyle_settings", PROP_POINTER, PROP_NONE);
- RNA_def_property_flag(prop, PROP_NEVER_NULL);
- RNA_def_property_pointer_sdna(prop, NULL, "freestyleConfig");
- RNA_def_property_struct_type(prop, "FreestyleSettings");
- RNA_def_property_ui_text(prop, "Freestyle Settings", "");
-}
-
-/* Render Layers */
-static void rna_def_render_layers(BlenderRNA *brna, PropertyRNA *cprop)
-{
- StructRNA *srna;
- PropertyRNA *prop;
-
FunctionRNA *func;
PropertyRNA *parm;
+ PropertyRNA *prop;
- RNA_def_property_srna(cprop, "RenderLayers");
- srna = RNA_def_struct(brna, "RenderLayers", NULL);
- RNA_def_struct_sdna(srna, "RenderData");
+ RNA_def_property_srna(cprop, "ViewLayers");
+ srna = RNA_def_struct(brna, "ViewLayers", NULL);
+ RNA_def_struct_sdna(srna, "Scene");
RNA_def_struct_ui_text(srna, "Render Layers", "Collection of render layers");
prop = RNA_def_property(srna, "active_index", PROP_INT, PROP_UNSIGNED);
- RNA_def_property_int_sdna(prop, NULL, "actlay");
- RNA_def_property_int_funcs(prop, "rna_RenderSettings_active_layer_index_get",
- "rna_RenderSettings_active_layer_index_set",
- "rna_RenderSettings_active_layer_index_range");
- RNA_def_property_ui_text(prop, "Active Layer Index", "Active index in render layer array");
- RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_Scene_glsl_update");
-
+ RNA_def_property_int_sdna(prop, NULL, "active_view_layer");
+ RNA_def_property_int_funcs(prop, "rna_ViewLayer_active_view_layer_index_get",
+ "rna_ViewLayer_active_view_layer_index_set",
+ "rna_ViewLayer_active_view_layer_index_range");
+ RNA_def_property_ui_text(prop, "Active View Layer Index", "Active index in view layer array");
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER, NULL);
+
prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
- RNA_def_property_struct_type(prop, "SceneRenderLayer");
- RNA_def_property_pointer_funcs(prop, "rna_RenderSettings_active_layer_get",
- "rna_RenderSettings_active_layer_set", NULL, NULL);
+ RNA_def_property_struct_type(prop, "ViewLayer");
+ RNA_def_property_pointer_funcs(prop, "rna_ViewLayer_active_view_layer_get",
+ "rna_ViewLayer_active_view_layer_set", NULL, NULL);
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_NEVER_NULL);
- RNA_def_property_ui_text(prop, "Active Render Layer", "Active Render Layer");
- RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_Scene_glsl_update");
+ RNA_def_property_ui_text(prop, "Active View Layer", "Active View Layer");
+ RNA_def_property_update(prop, NC_SCENE | ND_LAYER, NULL);
- func = RNA_def_function(srna, "new", "rna_RenderLayer_new");
- RNA_def_function_ui_description(func, "Add a render layer to scene");
- RNA_def_function_flag(func, FUNC_USE_SELF_ID);
- parm = RNA_def_string(func, "name", "RenderLayer", 0, "", "New name for the render layer (not unique)");
+ func = RNA_def_function(srna, "new", "rna_ViewLayer_new");
+ RNA_def_function_ui_description(func, "Add a view layer to scene");
+ RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_USE_MAIN);
+ parm = RNA_def_string(func, "name", "ViewLayer", 0, "", "New name for the view layer (not unique)");
RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
- parm = RNA_def_pointer(func, "result", "SceneRenderLayer", "", "Newly created render layer");
+ parm = RNA_def_pointer(func, "result", "ViewLayer", "", "Newly created view layer");
RNA_def_function_return(func, parm);
- func = RNA_def_function(srna, "remove", "rna_RenderLayer_remove");
- RNA_def_function_ui_description(func, "Remove a render layer");
- RNA_def_function_flag(func, FUNC_USE_MAIN | FUNC_USE_REPORTS | FUNC_USE_SELF_ID);
- parm = RNA_def_pointer(func, "layer", "SceneRenderLayer", "", "Render layer to remove");
+ func = RNA_def_function(srna, "remove", "rna_ViewLayer_remove");
+ RNA_def_function_ui_description(func, "Remove a view layer");
+ RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_USE_MAIN | FUNC_USE_REPORTS);
+ parm = RNA_def_pointer(func, "layer", "ViewLayer", "", "View layer to remove");
RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
RNA_def_parameter_clear_flags(parm, PROP_THICK_WRAP, 0);
}
@@ -5773,11 +5566,6 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
{0, NULL, 0, NULL, NULL}
};
- static const EnumPropertyItem engine_items[] = {
- {0, "BLENDER_RENDER", 0, "Blender Render", "Use the Blender internal rendering engine for rendering"},
- {0, NULL, 0, NULL, NULL}
- };
-
static const EnumPropertyItem freestyle_thickness_items[] = {
{R_LINE_THICKNESS_ABSOLUTE, "ABSOLUTE", 0, "Absolute", "Specify unit line thickness in pixels"},
{R_LINE_THICKNESS_RELATIVE, "RELATIVE", 0, "Relative",
@@ -5933,7 +5721,8 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
prop = RNA_def_property(srna, "filter_size", PROP_FLOAT, PROP_PIXEL);
RNA_def_property_float_sdna(prop, NULL, "gauss");
- RNA_def_property_range(prop, 0.5f, 1.5f);
+ RNA_def_property_range(prop, 0.0f, 500.0f);
+ RNA_def_property_ui_range(prop, 0.01f, 10.0f, 1, 2);
RNA_def_property_ui_text(prop, "Filter Size", "Width over which the reconstruction filter combines samples");
RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
@@ -6481,14 +6270,6 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Depth of Field", "Use depth of field using the values from scene strip active camera");
RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_SceneSequencer_update");
- /* layers */
- prop = RNA_def_property(srna, "layers", PROP_COLLECTION, PROP_NONE);
- RNA_def_property_collection_sdna(prop, NULL, "layers", NULL);
- RNA_def_property_struct_type(prop, "SceneRenderLayer");
- RNA_def_property_ui_text(prop, "Render Layers", "");
- rna_def_render_layers(brna, prop);
-
-
prop = RNA_def_property(srna, "use_single_layer", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scemode", R_SINGLE_LAYER);
RNA_def_property_ui_text(prop, "Single Layer", "Only render the active layer");
@@ -6521,35 +6302,6 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_enum_funcs(prop, NULL, "rna_RenderSettings_views_format_set", NULL);
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
- /* engine */
- prop = RNA_def_property(srna, "engine", PROP_ENUM, PROP_NONE);
- RNA_def_property_enum_items(prop, engine_items);
- RNA_def_property_enum_funcs(prop, "rna_RenderSettings_engine_get", "rna_RenderSettings_engine_set",
- "rna_RenderSettings_engine_itemf");
- RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
- RNA_def_property_ui_text(prop, "Engine", "Engine to use for rendering");
- RNA_def_property_update(prop, NC_WINDOW, "rna_RenderSettings_engine_update");
-
- prop = RNA_def_property(srna, "has_multiple_engines", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_funcs(prop, "rna_RenderSettings_multiple_engines_get", NULL);
- RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- RNA_def_property_ui_text(prop, "Multiple Engines", "More than one rendering engine is available");
-
- prop = RNA_def_property(srna, "use_shading_nodes", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_funcs(prop, "rna_RenderSettings_use_shading_nodes_get", NULL);
- RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- RNA_def_property_ui_text(prop, "Use Shading Nodes", "Active render engine uses new shading nodes system");
-
- prop = RNA_def_property(srna, "use_spherical_stereo", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_funcs(prop, "rna_RenderSettings_use_spherical_stereo_get", NULL);
- RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- RNA_def_property_ui_text(prop, "Use Spherical Stereo", "Active render engine supports spherical stereo rendering");
-
- prop = RNA_def_property(srna, "use_game_engine", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_funcs(prop, "rna_RenderSettings_use_game_engine_get", NULL);
- RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- RNA_def_property_ui_text(prop, "Use Game Engine", "Current rendering engine is a game engine");
-
/* simplify */
prop = RNA_def_property(srna, "use_simplify", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", R_SIMPLIFY);
@@ -6635,61 +6387,11 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
static void rna_def_scene_objects(BlenderRNA *brna, PropertyRNA *cprop)
{
StructRNA *srna;
- PropertyRNA *prop;
- FunctionRNA *func;
- PropertyRNA *parm;
-
RNA_def_property_srna(cprop, "SceneObjects");
srna = RNA_def_struct(brna, "SceneObjects", NULL);
RNA_def_struct_sdna(srna, "Scene");
- RNA_def_struct_ui_text(srna, "Scene Objects", "Collection of scene objects");
-
- func = RNA_def_function(srna, "link", "rna_Scene_object_link");
- RNA_def_function_ui_description(func, "Link object to scene, run scene.update() after");
- RNA_def_function_flag(func, FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
- parm = RNA_def_pointer(func, "object", "Object", "", "Object to add to scene");
- RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
- parm = RNA_def_pointer(func, "base", "ObjectBase", "", "The newly created base");
- RNA_def_function_return(func, parm);
-
- func = RNA_def_function(srna, "unlink", "rna_Scene_object_unlink");
- RNA_def_function_ui_description(func, "Unlink object from scene");
- RNA_def_function_flag(func, FUNC_USE_REPORTS);
- parm = RNA_def_pointer(func, "object", "Object", "", "Object to remove from scene");
- RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
-
- prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
- RNA_def_property_struct_type(prop, "Object");
- RNA_def_property_pointer_funcs(prop, "rna_Scene_active_object_get", "rna_Scene_active_object_set", NULL, NULL);
- RNA_def_property_flag(prop, PROP_EDITABLE | PROP_NEVER_UNLINK);
- RNA_def_property_ui_text(prop, "Active Object", "Active object for this scene");
- /* Could call: ED_base_object_activate(C, scene->basact);
- * but would be a bad level call and it seems the notifier is enough */
- RNA_def_property_update(prop, NC_SCENE | ND_OB_ACTIVE, NULL);
-}
-
-
-/* scene.bases.* */
-static void rna_def_scene_bases(BlenderRNA *brna, PropertyRNA *cprop)
-{
- StructRNA *srna;
- PropertyRNA *prop;
-
-/* FunctionRNA *func; */
-/* PropertyRNA *parm; */
-
- RNA_def_property_srna(cprop, "SceneBases");
- srna = RNA_def_struct(brna, "SceneBases", NULL);
- RNA_def_struct_sdna(srna, "Scene");
- RNA_def_struct_ui_text(srna, "Scene Bases", "Collection of scene bases");
-
- prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
- RNA_def_property_struct_type(prop, "ObjectBase");
- RNA_def_property_pointer_sdna(prop, NULL, "basact");
- RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_ui_text(prop, "Active Base", "Active object base in the scene");
- RNA_def_property_update(prop, NC_SCENE | ND_OB_ACTIVE, NULL);
+ RNA_def_struct_ui_text(srna, "Scene Objects", "All the of scene objects");
}
/* scene.timeline_markers */
@@ -6912,33 +6614,28 @@ void RNA_def_scene(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
RNA_def_property_pointer_funcs(prop, NULL, "rna_Scene_set_set", NULL, NULL);
RNA_def_property_ui_text(prop, "Background Scene", "Background set scene");
- RNA_def_property_update(prop, NC_SCENE | NA_EDITED, "rna_Scene_glsl_update");
+ RNA_def_property_update(prop, NC_SCENE | NA_EDITED, "rna_Scene_set_update");
prop = RNA_def_property(srna, "world", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "World", "World used for rendering the scene");
- RNA_def_property_update(prop, NC_SCENE | ND_WORLD, "rna_Scene_glsl_update");
+ RNA_def_property_update(prop, NC_SCENE | ND_WORLD, "rna_Scene_world_update");
prop = RNA_def_property(srna, "cursor_location", PROP_FLOAT, PROP_XYZ_LENGTH);
RNA_def_property_float_sdna(prop, NULL, "cursor");
RNA_def_property_ui_text(prop, "Cursor Location", "3D cursor location");
RNA_def_property_ui_range(prop, -10000.0, 10000.0, 10, 4);
RNA_def_property_update(prop, NC_WINDOW, NULL);
-
- /* Bases/Objects */
- prop = RNA_def_property(srna, "object_bases", PROP_COLLECTION, PROP_NONE);
- RNA_def_property_collection_sdna(prop, NULL, "base", NULL);
- RNA_def_property_struct_type(prop, "ObjectBase");
- RNA_def_property_ui_text(prop, "Bases", "");
- RNA_def_property_collection_funcs(prop, NULL, NULL, NULL, NULL, NULL, NULL,
- "rna_Scene_object_bases_lookup_string", NULL);
- rna_def_scene_bases(brna, prop);
prop = RNA_def_property(srna, "objects", PROP_COLLECTION, PROP_NONE);
- RNA_def_property_collection_sdna(prop, NULL, "base", NULL);
RNA_def_property_struct_type(prop, "Object");
RNA_def_property_ui_text(prop, "Objects", "");
- RNA_def_property_collection_funcs(prop, NULL, NULL, NULL, "rna_Scene_objects_get", NULL, NULL, NULL, NULL);
+ RNA_def_property_collection_funcs(prop,
+ "rna_Scene_objects_begin",
+ "rna_Scene_objects_next",
+ "rna_Scene_objects_end",
+ "rna_Scene_objects_get",
+ NULL, NULL, NULL, NULL);
rna_def_scene_objects(brna, prop);
/* Layers */
@@ -7177,7 +6874,26 @@ void RNA_def_scene(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "r");
RNA_def_property_struct_type(prop, "RenderSettings");
RNA_def_property_ui_text(prop, "Render Data", "");
-
+
+ /* View Render */
+ prop = RNA_def_property(srna, "view_render", PROP_POINTER, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_NEVER_NULL);
+ RNA_def_property_struct_type(prop, "ViewRenderSettings");
+ RNA_def_property_ui_text(prop, "View Render", "");
+
+ /* Render Engine Data */
+ prop = RNA_def_property(srna, "layer_properties", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_collection_sdna(prop, NULL, "layer_properties->data.group", NULL);
+ RNA_def_property_struct_type(prop, "ViewLayerSettings");
+ RNA_def_property_ui_text(prop, "Layer Settings",
+ "Engine specific render settings to be overridden by layers");
+
+ prop = RNA_def_property(srna, "collection_properties", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_collection_sdna(prop, NULL, "collection_properties->data.group", NULL);
+ RNA_def_property_struct_type(prop, "LayerCollectionSettings");
+ RNA_def_property_ui_text(prop, "Collection Settings",
+ "Engine specific render settings to be overridden by collections");
+
/* Safe Areas */
prop = RNA_def_property(srna, "safe_areas", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "safe_areas");
@@ -7247,6 +6963,9 @@ void RNA_def_scene(BlenderRNA *brna)
/* Statistics */
func = RNA_def_function(srna, "statistics", "ED_info_stats_string");
+ parm = RNA_def_pointer(func, "workspace", "WorkSpace", "", "Active workspace");
+ parm = RNA_def_pointer(func, "view_layer", "ViewLayer", "", "Active layer");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
parm = RNA_def_string(func, "statistics", NULL, 0, "Statistics", "");
RNA_def_function_return(func, parm);
@@ -7257,12 +6976,6 @@ void RNA_def_scene(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_REFCOUNT);
RNA_def_property_ui_text(prop, "Grease Pencil Data", "Grease Pencil data-block");
RNA_def_property_update(prop, NC_GPENCIL | ND_DATA | NA_EDITED, NULL);
-
- /* Transform Orientations */
- prop = RNA_def_property(srna, "orientations", PROP_COLLECTION, PROP_NONE);
- RNA_def_property_collection_sdna(prop, NULL, "transform_spaces", NULL);
- RNA_def_property_struct_type(prop, "TransformOrientation");
- RNA_def_property_ui_text(prop, "Transform Orientations", "");
/* active MovieClip */
prop = RNA_def_property(srna, "active_clip", PROP_POINTER, PROP_NONE);
@@ -7288,10 +7001,18 @@ void RNA_def_scene(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "ColorManagedSequencerColorspaceSettings");
RNA_def_property_ui_text(prop, "Sequencer Color Space Settings", "Settings of color space sequencer is working in");
- /* Dependency Graph */
- prop = RNA_def_property(srna, "depsgraph", PROP_POINTER, PROP_NONE);
- RNA_def_property_struct_type(prop, "Depsgraph");
- RNA_def_property_ui_text(prop, "Dependency Graph", "Dependencies in the scene data");
+ /* Layer and Collections */
+ prop = RNA_def_property(srna, "view_layers", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_collection_sdna(prop, NULL, "view_layers", NULL);
+ RNA_def_property_struct_type(prop, "ViewLayer");
+ RNA_def_property_ui_text(prop, "View Layers", "");
+ rna_def_view_layers(brna, prop);
+
+ prop = RNA_def_property(srna, "master_collection", PROP_POINTER, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_NEVER_NULL);
+ RNA_def_property_pointer_sdna(prop, NULL, "collection");
+ RNA_def_property_struct_type(prop, "SceneCollection");
+ RNA_def_property_ui_text(prop, "Master Collection", "Collection that contains all other collections");
/* Nestled Data */
/* *** Non-Animated *** */
@@ -7305,13 +7026,11 @@ void RNA_def_scene(BlenderRNA *brna)
rna_def_unit_settings(brna);
rna_def_scene_image_format_data(brna);
rna_def_scene_game_data(brna);
- rna_def_transform_orientation(brna);
rna_def_selected_uv_element(brna);
rna_def_display_safe_areas(brna);
RNA_define_animate_sdna(true);
/* *** Animated *** */
rna_def_scene_render_data(brna);
- rna_def_scene_render_layer(brna);
rna_def_gpu_fx(brna);
rna_def_scene_render_view(brna);
diff --git a/source/blender/makesrna/intern/rna_scene_api.c b/source/blender/makesrna/intern/rna_scene_api.c
index 0f22f8d3b0f..f99803a1d99 100644
--- a/source/blender/makesrna/intern/rna_scene_api.c
+++ b/source/blender/makesrna/intern/rna_scene_api.c
@@ -60,7 +60,6 @@ const EnumPropertyItem rna_enum_abc_compression_items[] = {
#ifdef RNA_RUNTIME
#include "BKE_animsys.h"
-#include "BKE_depsgraph.h"
#include "BKE_editmesh.h"
#include "BKE_global.h"
#include "BKE_image.h"
@@ -86,8 +85,17 @@ static void rna_Scene_frame_set(Scene *scene, Main *bmain, int frame, float subf
BPy_BEGIN_ALLOW_THREADS;
#endif
- /* It's possible that here we're including layers which were never visible before. */
- BKE_scene_update_for_newframe_ex(bmain->eval_ctx, bmain, scene, (1 << 20) - 1, true);
+ for (ViewLayer *view_layer = scene->view_layers.first;
+ view_layer != NULL;
+ view_layer = view_layer->next)
+ {
+ Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true);
+ BKE_scene_graph_update_for_newframe(bmain->eval_ctx,
+ depsgraph,
+ bmain,
+ scene,
+ view_layer);
+ }
#ifdef WITH_PYTHON
BPy_END_ALLOW_THREADS;
@@ -99,7 +107,7 @@ static void rna_Scene_frame_set(Scene *scene, Main *bmain, int frame, float subf
* redrawing while the data is being modified for render */
if (!G.is_rendering) {
/* cant use NC_SCENE|ND_FRAME because this causes wm_event_do_notifiers to call
- * BKE_scene_update_for_newframe which will loose any un-keyed changes [#24690] */
+ * BKE_scene_graph_update_for_newframe which will loose any un-keyed changes [#24690] */
/* WM_main_add_notifier(NC_SCENE|ND_FRAME, scene); */
/* instead just redraw the views */
@@ -109,10 +117,10 @@ static void rna_Scene_frame_set(Scene *scene, Main *bmain, int frame, float subf
static void rna_Scene_uvedit_aspect(Scene *scene, Object *ob, float *aspect)
{
- if ((ob->type == OB_MESH) && (ob->mode == OB_MODE_EDIT)) {
- BMEditMesh *em;
- em = BKE_editmesh_from_object(ob);
- if (EDBM_mtexpoly_check(em)) {
+ if (ob->type == OB_MESH) {
+ /* Will be NULL when not in editmode */
+ BMEditMesh *em = BKE_editmesh_from_object(ob);
+ if (EDBM_uv_check(em)) {
ED_uvedit_get_aspect(scene, ob, em->bm, aspect, aspect + 1);
return;
}
@@ -127,7 +135,17 @@ static void rna_Scene_update_tagged(Scene *scene, Main *bmain)
BPy_BEGIN_ALLOW_THREADS;
#endif
- BKE_scene_update_tagged(bmain->eval_ctx, bmain, scene);
+ for (ViewLayer *view_layer = scene->view_layers.first;
+ view_layer != NULL;
+ view_layer = view_layer->next)
+ {
+ Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true);
+ BKE_scene_graph_update_tagged(bmain->eval_ctx,
+ depsgraph,
+ bmain,
+ scene,
+ view_layer);
+ }
#ifdef WITH_PYTHON
BPy_END_ALLOW_THREADS;
@@ -153,14 +171,24 @@ static void rna_SceneRender_get_frame_path(RenderData *rd, int frame, int previe
}
static void rna_Scene_ray_cast(
- Scene *scene, float origin[3], float direction[3], float ray_dist,
+ Scene *scene, ViewLayer *view_layer, const char *engine_id,
+ float origin[3], float direction[3], float ray_dist,
int *r_success, float r_location[3], float r_normal[3], int *r_index,
Object **r_ob, float r_obmat[16])
{
+ RenderEngineType *engine_type;
+
+ if (engine_id == NULL || engine_id[0] == '\0') {
+ engine_type = RE_engines_find(scene->view_render.engine_id);
+ }
+ else {
+ engine_type = RE_engines_find(engine_id);
+ }
+
normalize_v3(direction);
SnapObjectContext *sctx = ED_transform_snap_object_context_create(
- G.main, scene, 0);
+ G.main, scene, view_layer, engine_type, 0);
bool ret = ED_transform_snap_object_project_ray_ex(
sctx,
@@ -269,6 +297,7 @@ static void rna_Scene_alembic_export(
/* Note: This definition must match to the generated function call */
static void rna_Scene_collada_export(
Scene *scene,
+ bContext *C,
const char *filepath,
int apply_modifiers,
@@ -279,7 +308,7 @@ static void rna_Scene_collada_export(
int include_shapekeys,
int deform_bones_only,
int active_uv_only,
- int export_texture_type,
+ int include_material_textures,
int use_texture_copies,
int triangulate,
int use_object_instantiation,
@@ -290,7 +319,13 @@ static void rna_Scene_collada_export(
int limit_precision,
int keep_bind_info)
{
- collada_export(scene,
+ EvaluationContext eval_ctx;
+
+ CTX_data_eval_ctx(C, &eval_ctx);
+
+ collada_export(&eval_ctx,
+ scene,
+ CTX_data_view_layer(C),
filepath,
apply_modifiers,
@@ -303,7 +338,7 @@ static void rna_Scene_collada_export(
deform_bones_only,
active_uv_only,
- export_texture_type,
+ include_material_textures,
use_texture_copies,
triangulate,
@@ -349,6 +384,9 @@ void RNA_api_scene(StructRNA *srna)
/* Ray Cast */
func = RNA_def_function(srna, "ray_cast", "rna_Scene_ray_cast");
RNA_def_function_ui_description(func, "Cast a ray onto in object space");
+ parm = RNA_def_pointer(func, "view_layer", "ViewLayer", "", "Scene Layer");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
+ parm = RNA_def_string(func, "engine", NULL, MAX_NAME, "Engine", "Render engine, use scene one by default");
/* ray start and end */
parm = RNA_def_float_vector(func, "origin", 3, NULL, -FLT_MAX, FLT_MAX, "", "", -1e4, 1e4);
RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
@@ -402,8 +440,8 @@ void RNA_api_scene(StructRNA *srna)
RNA_def_boolean(func, "active_uv_only", false, "Only Selected UV Map", "Export only the selected UV Map");
- RNA_def_int(func, "export_texture_type", 0, INT_MIN, INT_MAX,
- "Texture Type", "Type for exported Textures (UV or MAT)", INT_MIN, INT_MAX);
+ RNA_def_boolean(func, "include_material_textures", false,
+ "Include Material Textures", "Export textures assigned to the object Materials");
RNA_def_boolean(func, "use_texture_copies", true,
"Copy", "Copy textures to same folder where the .dae file is exported");
@@ -432,6 +470,8 @@ void RNA_api_scene(StructRNA *srna)
"Keep Bind Info",
"Store bind pose information in custom bone properties for later use during Collada export");
+ RNA_def_function_flag(func, FUNC_USE_CONTEXT);
+
#endif
#ifdef WITH_ALEMBIC
diff --git a/source/blender/makesrna/intern/rna_screen.c b/source/blender/makesrna/intern/rna_screen.c
index ce6d60a4ae7..0221a40cb5d 100644
--- a/source/blender/makesrna/intern/rna_screen.c
+++ b/source/blender/makesrna/intern/rna_screen.c
@@ -35,6 +35,7 @@
#include "DNA_screen_types.h"
#include "DNA_scene_types.h"
+#include "DNA_workspace_types.h"
const EnumPropertyItem rna_enum_region_type_items[] = {
{RGN_TYPE_WINDOW, "WINDOW", 0, "Window", ""},
@@ -56,7 +57,9 @@ const EnumPropertyItem rna_enum_region_type_items[] = {
#ifdef RNA_RUNTIME
#include "BKE_global.h"
-#include "BKE_depsgraph.h"
+#include "BKE_workspace.h"
+
+#include "DEG_depsgraph.h"
#include "UI_view2d.h"
@@ -64,55 +67,58 @@ const EnumPropertyItem rna_enum_region_type_items[] = {
# include "BPY_extern.h"
#endif
-static void rna_Screen_scene_set(PointerRNA *ptr, PointerRNA value)
-{
- bScreen *sc = (bScreen *)ptr->data;
- if (value.data == NULL)
- return;
+static void rna_Screen_redraw_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
+{
+ bScreen *screen = (bScreen *)ptr->data;
- sc->newscene = value.data;
+ /* the settings for this are currently only available from a menu in the TimeLine, hence refresh=SPACE_TIME */
+ ED_screen_animation_timer_update(screen, screen->redraws_flag, SPACE_TIME);
}
-static void rna_Screen_scene_update(bContext *C, PointerRNA *ptr)
+static int rna_Screen_is_animation_playing_get(PointerRNA *UNUSED(ptr))
{
- bScreen *sc = (bScreen *)ptr->data;
-
- /* exception: must use context so notifier gets to the right window */
- if (sc->newscene) {
-#ifdef WITH_PYTHON
- BPy_BEGIN_ALLOW_THREADS;
-#endif
-
- ED_screen_set_scene(C, sc, sc->newscene);
-
-#ifdef WITH_PYTHON
- BPy_END_ALLOW_THREADS;
-#endif
-
- WM_event_add_notifier(C, NC_SCENE | ND_SCENEBROWSE, sc->newscene);
+ /* can be NULL on file load, T42619 */
+ wmWindowManager *wm = G.main->wm.first;
+ return wm ? (ED_screen_animation_playing(wm) != NULL) : 0;
+}
- if (G.debug & G_DEBUG)
- printf("scene set %p\n", sc->newscene);
+static void rna_Screen_layout_name_get(PointerRNA *ptr, char *value)
+{
+ const bScreen *screen = ptr->data;
+ const WorkSpaceLayout *layout = BKE_workspace_layout_find_global(G.main, screen, NULL);
- sc->newscene = NULL;
+ if (layout) {
+ const char *name = BKE_workspace_layout_name_get(layout);
+ strcpy(value, name);
+ }
+ else {
+ value[0] = '\0';
}
}
-static void rna_Screen_redraw_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
+static int rna_Screen_layout_name_length(PointerRNA *ptr)
{
- bScreen *screen = (bScreen *)ptr->data;
+ const bScreen *screen = ptr->data;
+ const WorkSpaceLayout *layout = BKE_workspace_layout_find_global(G.main, screen, NULL);
- /* the settings for this are currently only available from a menu in the TimeLine, hence refresh=SPACE_TIME */
- ED_screen_animation_timer_update(screen, screen->redraws_flag, SPACE_TIME);
-}
+ if (layout) {
+ const char *name = BKE_workspace_layout_name_get(layout);
+ return strlen(name);
+ }
+ return 0;
+}
-static int rna_Screen_is_animation_playing_get(PointerRNA *UNUSED(ptr))
+static void rna_Screen_layout_name_set(PointerRNA *ptr, const char *value)
{
- /* can be NULL on file load, T42619 */
- wmWindowManager *wm = G.main->wm.first;
- return wm ? (ED_screen_animation_playing(wm) != NULL) : 0;
+ bScreen *screen = ptr->data;
+ WorkSpace *workspace;
+ WorkSpaceLayout *layout = BKE_workspace_layout_find_global(G.main, screen, &workspace);
+
+ if (layout) {
+ BKE_workspace_layout_name_set(workspace, layout, value);
+ }
}
static int rna_Screen_fullscreen_get(PointerRNA *ptr)
@@ -152,7 +158,7 @@ static void rna_Area_type_update(bContext *C, PointerRNA *ptr)
/* XXX this call still use context, so we trick it to work in the right context */
for (win = wm->windows.first; win; win = win->next) {
- if (sc == win->screen) {
+ if (sc == WM_window_get_active_screen(win)) {
wmWindow *prevwin = CTX_wm_window(C);
ScrArea *prevsa = CTX_wm_area(C);
ARegion *prevar = CTX_wm_region(C);
@@ -166,7 +172,7 @@ static void rna_Area_type_update(bContext *C, PointerRNA *ptr)
/* It is possible that new layers becomes visible. */
if (sa->spacetype == SPACE_VIEW3D) {
- DAG_on_visible_update(CTX_data_main(C), false);
+ DEG_on_visible_update(CTX_data_main(C), false);
}
CTX_wm_window_set(C, prevwin);
@@ -377,13 +383,11 @@ static void rna_def_screen(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Screen", "Screen data-block, defining the layout of areas in a window");
RNA_def_struct_ui_icon(srna, ICON_SPLITSCREEN);
- /* pointers */
- prop = RNA_def_property(srna, "scene", PROP_POINTER, PROP_NONE);
- RNA_def_property_flag(prop, PROP_EDITABLE | PROP_NEVER_NULL);
- RNA_def_property_pointer_funcs(prop, NULL, "rna_Screen_scene_set", NULL, NULL);
- RNA_def_property_ui_text(prop, "Scene", "Active scene to be edited in the screen");
- RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
- RNA_def_property_update(prop, 0, "rna_Screen_scene_update");
+ prop = RNA_def_property(srna, "layout_name", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_funcs(prop, "rna_Screen_layout_name_get", "rna_Screen_layout_name_length",
+ "rna_Screen_layout_name_set");
+ RNA_def_property_ui_text(prop, "Layout Name", "The name of the layout that refers to the screen");
+ RNA_def_struct_name_property(srna, prop);
/* collections */
prop = RNA_def_property(srna, "areas", PROP_COLLECTION, PROP_NONE);
diff --git a/source/blender/makesrna/intern/rna_sculpt_paint.c b/source/blender/makesrna/intern/rna_sculpt_paint.c
index 6dbfc3634b2..cc447f2a028 100644
--- a/source/blender/makesrna/intern/rna_sculpt_paint.c
+++ b/source/blender/makesrna/intern/rna_sculpt_paint.c
@@ -106,9 +106,10 @@ const EnumPropertyItem rna_enum_symmetrize_direction_items[] = {
#include "BKE_DerivedMesh.h"
#include "BKE_pointcache.h"
#include "BKE_particle.h"
-#include "BKE_depsgraph.h"
#include "BKE_pbvh.h"
+#include "DEG_depsgraph.h"
+
#include "GPU_buffers.h"
#include "ED_particle.h"
@@ -152,10 +153,12 @@ static PointerRNA rna_ParticleBrush_curve_get(PointerRNA *ptr)
return rna_pointer_inherit_refine(ptr, &RNA_CurveMapping, NULL);
}
-static void rna_ParticleEdit_redo(Main *UNUSED(bmain), Scene *scene, PointerRNA *UNUSED(ptr))
+static void rna_ParticleEdit_redo(bContext *C, PointerRNA *UNUSED(ptr))
{
- Object *ob = (scene->basact) ? scene->basact->object : NULL;
- PTCacheEdit *edit = PE_get_current(scene, ob);
+ Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Object *ob = OBACT(view_layer);
+ PTCacheEdit *edit = PE_get_current(scene, view_layer, ob);
if (!edit)
return;
@@ -163,21 +166,23 @@ static void rna_ParticleEdit_redo(Main *UNUSED(bmain), Scene *scene, PointerRNA
psys_free_path_cache(edit->psys, edit);
}
-static void rna_ParticleEdit_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *UNUSED(ptr))
+static void rna_ParticleEdit_update(bContext *C, PointerRNA *UNUSED(ptr))
{
- Object *ob = (scene->basact) ? scene->basact->object : NULL;
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Object *ob = OBACT(view_layer);
- if (ob) DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ if (ob) DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
}
+
static void rna_ParticleEdit_tool_set(PointerRNA *ptr, int value)
{
ParticleEditSettings *pset = (ParticleEditSettings *)ptr->data;
/* redraw hair completely if weight brush is/was used */
- if ((pset->brushtype == PE_BRUSH_WEIGHT || value == PE_BRUSH_WEIGHT) && pset->scene) {
- Object *ob = (pset->scene->basact) ? pset->scene->basact->object : NULL;
+ if ((pset->brushtype == PE_BRUSH_WEIGHT || value == PE_BRUSH_WEIGHT) && pset->view_layer) {
+ Object *ob = (pset->view_layer->basact) ? pset->view_layer->basact->object : NULL;
if (ob) {
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_main_add_notifier(NC_OBJECT | ND_PARTICLE | NA_EDITED, NULL);
}
}
@@ -187,9 +192,10 @@ static void rna_ParticleEdit_tool_set(PointerRNA *ptr, int value)
static const EnumPropertyItem *rna_ParticleEdit_tool_itemf(bContext *C, PointerRNA *UNUSED(ptr),
PropertyRNA *UNUSED(prop), bool *UNUSED(r_free))
{
- Scene *scene = CTX_data_scene(C);
- Object *ob = (scene->basact) ? scene->basact->object : NULL;
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Object *ob = OBACT(view_layer);
#if 0
+ Scene *scene = CTX_data_scene(C);
PTCacheEdit *edit = PE_get_current(scene, ob);
ParticleSystem *psys = edit ? edit->psys : NULL;
#else
@@ -215,14 +221,14 @@ static int rna_ParticleEdit_editable_get(PointerRNA *ptr)
{
ParticleEditSettings *pset = (ParticleEditSettings *)ptr->data;
- return (pset->object && pset->scene && PE_get_current(pset->scene, pset->object));
+ return (pset->object && pset->scene && PE_get_current(pset->scene, pset->view_layer, pset->object));
}
static int rna_ParticleEdit_hair_get(PointerRNA *ptr)
{
ParticleEditSettings *pset = (ParticleEditSettings *)ptr->data;
if (pset->scene) {
- PTCacheEdit *edit = PE_get_current(pset->scene, pset->object);
+ PTCacheEdit *edit = PE_get_current(pset->scene, pset->view_layer, pset->object);
return (edit && edit->psys);
}
@@ -257,12 +263,14 @@ static int rna_Brush_mode_poll(PointerRNA *ptr, PointerRNA value)
return brush->ob_mode & mode;
}
-static void rna_Sculpt_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *UNUSED(ptr))
+static void rna_Sculpt_update(bContext *C, PointerRNA *UNUSED(ptr))
{
- Object *ob = (scene->basact) ? scene->basact->object : NULL;
+ Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Object *ob = OBACT(view_layer);
if (ob) {
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ob);
if (ob->sculpt) {
@@ -272,11 +280,13 @@ static void rna_Sculpt_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *UNU
}
}
-static void rna_Sculpt_ShowDiffuseColor_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *UNUSED(ptr))
+static void rna_Sculpt_ShowDiffuseColor_update(bContext *C, PointerRNA *UNUSED(ptr))
{
- Object *ob = (scene->basact) ? scene->basact->object : NULL;
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Object *ob = OBACT(view_layer);
if (ob && ob->sculpt) {
+ Scene *scene = CTX_data_scene(C);
Sculpt *sd = scene->toolsettings->sculpt;
ob->sculpt->show_diffuse_color = ((sd->flags & SCULPT_SHOW_DIFFUSE) != 0);
@@ -287,12 +297,14 @@ static void rna_Sculpt_ShowDiffuseColor_update(Main *UNUSED(bmain), Scene *scene
}
}
-static void rna_Sculpt_ShowMask_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *UNUSED(ptr))
+static void rna_Sculpt_ShowMask_update(bContext *C, PointerRNA *UNUSED(ptr))
{
- Object *object = (scene->basact) ? scene->basact->object : NULL;
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Object *object = OBACT(view_layer);
if (object == NULL || object->sculpt == NULL) {
return;
}
+ Scene *scene = CTX_data_scene(C);
Sculpt *sd = scene->toolsettings->sculpt;
object->sculpt->show_mask = ((sd->flags & SCULPT_HIDE_MASK) == 0);
if (object->sculpt->pbvh != NULL) {
@@ -347,9 +359,11 @@ static void rna_ImaPaint_viewport_update(Main *UNUSED(bmain), Scene *UNUSED(scen
WM_main_add_notifier(NC_OBJECT | ND_DRAW, NULL);
}
-static void rna_ImaPaint_mode_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *UNUSED(ptr))
+static void rna_ImaPaint_mode_update(bContext *C, PointerRNA *UNUSED(ptr))
{
- Object *ob = OBACT;
+ Scene *scene = CTX_data_scene(C);\
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Object *ob = OBACT(view_layer);
if (ob && ob->type == OB_MESH) {
/* of course we need to invalidate here */
@@ -362,9 +376,11 @@ static void rna_ImaPaint_mode_update(Main *UNUSED(bmain), Scene *scene, PointerR
}
}
-static void rna_ImaPaint_stencil_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *UNUSED(ptr))
+static void rna_ImaPaint_stencil_update(bContext *C, PointerRNA *UNUSED(ptr))
{
- Object *ob = OBACT;
+ Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Object *ob = OBACT(view_layer);
if (ob && ob->type == OB_MESH) {
GPU_drawobject_free(ob->derivedFinal);
@@ -373,19 +389,22 @@ static void rna_ImaPaint_stencil_update(Main *UNUSED(bmain), Scene *scene, Point
}
}
-static void rna_ImaPaint_canvas_update(Main *bmain, Scene *scene, PointerRNA *UNUSED(ptr))
+static void rna_ImaPaint_canvas_update(bContext *C, PointerRNA *UNUSED(ptr))
{
- Object *ob = OBACT;
+ Main *bmain = CTX_data_main(C);
+ Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Object *ob = OBACT(view_layer);
bScreen *sc;
Image *ima = scene->toolsettings->imapaint.canvas;
for (sc = bmain->screen.first; sc; sc = sc->id.next) {
ScrArea *sa;
for (sa = sc->areabase.first; sa; sa = sa->next) {
- SpaceLink *sl;
- for (sl = sa->spacedata.first; sl; sl = sl->next) {
- if (sl->spacetype == SPACE_IMAGE) {
- SpaceImage *sima = (SpaceImage *)sl;
+ SpaceLink *slink;
+ for (slink = sa->spacedata.first; slink; slink = slink->next) {
+ if (slink->spacetype == SPACE_IMAGE) {
+ SpaceImage *sima = (SpaceImage *)slink;
if (!sima->pin)
ED_space_image_set(sima, scene, scene->obedit, ima);
@@ -600,17 +619,20 @@ static void rna_def_sculpt(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Use Deform Only",
"Use only deformation modifiers (temporary disable all "
"constructive modifiers except multi-resolution)");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Sculpt_update");
prop = RNA_def_property(srna, "show_diffuse_color", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_SHOW_DIFFUSE);
RNA_def_property_ui_text(prop, "Show Diffuse Color",
"Show diffuse color of object and overlay sculpt mask on top of it");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Sculpt_ShowDiffuseColor_update");
prop = RNA_def_property(srna, "show_mask", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flags", SCULPT_HIDE_MASK);
RNA_def_property_ui_text(prop, "Show Mask", "Show mask as overlay on object");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Sculpt_ShowMask_update");
prop = RNA_def_property(srna, "detail_size", PROP_FLOAT, PROP_PIXEL);
@@ -636,6 +658,7 @@ static void rna_def_sculpt(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Smooth Shading",
"Show faces in dynamic-topology mode with smooth "
"shading rather than flat shaded");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Sculpt_update");
prop = RNA_def_property(srna, "symmetrize_direction", PROP_ENUM, PROP_NONE);
@@ -761,12 +784,12 @@ static void rna_def_image_paint(BlenderRNA *brna)
prop = RNA_def_property(srna, "stencil_image", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "stencil");
- RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_CONTEXT_UPDATE);
RNA_def_property_ui_text(prop, "Stencil Image", "Image used as stencil");
RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, "rna_ImaPaint_stencil_update");
prop = RNA_def_property(srna, "canvas", PROP_POINTER, PROP_NONE);
- RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_CONTEXT_UPDATE);
RNA_def_property_ui_text(prop, "Canvas", "Image used as canvas");
RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, "rna_ImaPaint_canvas_update");
@@ -808,6 +831,7 @@ static void rna_def_image_paint(BlenderRNA *brna)
RNA_def_property_range(prop, 512, 16384);
prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_enum_items(prop, paint_type_items);
RNA_def_property_ui_text(prop, "Mode", "Mode of operation for projection painting");
RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, "rna_ImaPaint_mode_update");
@@ -887,6 +911,7 @@ static void rna_def_particle_edit(BlenderRNA *brna)
RNA_def_property_enum_bitflag_sdna(prop, NULL, "selectmode");
RNA_def_property_enum_items(prop, select_mode_items);
RNA_def_property_ui_text(prop, "Selection Mode", "Particle select and display mode");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_ParticleEdit_update");
prop = RNA_def_property(srna, "use_preserve_length", PROP_BOOLEAN, PROP_NONE);
@@ -909,6 +934,7 @@ static void rna_def_particle_edit(BlenderRNA *brna)
prop = RNA_def_property(srna, "use_fade_time", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PE_FADE_TIME);
RNA_def_property_ui_text(prop, "Fade Time", "Fade paths and keys further away from current frame");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_ParticleEdit_update");
prop = RNA_def_property(srna, "use_auto_velocity", PROP_BOOLEAN, PROP_NONE);
@@ -916,6 +942,7 @@ static void rna_def_particle_edit(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Auto Velocity", "Calculate point velocities automatically");
prop = RNA_def_property(srna, "show_particles", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PE_DRAW_PART);
RNA_def_property_ui_text(prop, "Draw Particles", "Draw actual particles");
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_ParticleEdit_redo");
@@ -936,6 +963,7 @@ static void rna_def_particle_edit(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Brush", "");
prop = RNA_def_property(srna, "draw_step", PROP_INT, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_range(prop, 1, 10);
RNA_def_property_ui_text(prop, "Steps", "How many steps to draw the path with");
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_ParticleEdit_redo");
@@ -943,9 +971,11 @@ static void rna_def_particle_edit(BlenderRNA *brna)
prop = RNA_def_property(srna, "fade_frames", PROP_INT, PROP_NONE);
RNA_def_property_range(prop, 1, 100);
RNA_def_property_ui_text(prop, "Frames", "How many frames to fade");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_ParticleEdit_update");
prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_enum_sdna(prop, NULL, "edittype");
RNA_def_property_enum_items(prop, edit_type_items);
RNA_def_property_ui_text(prop, "Type", "");
@@ -966,7 +996,7 @@ static void rna_def_particle_edit(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Object", "The edited object");
prop = RNA_def_property(srna, "shape_object", PROP_POINTER, PROP_NONE);
- RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_CONTEXT_UPDATE);
RNA_def_property_ui_text(prop, "Shape Object", "Outer shape to use for tools");
RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, "rna_Mesh_object_poll");
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_ParticleEdit_redo");
diff --git a/source/blender/makesrna/intern/rna_smoke.c b/source/blender/makesrna/intern/rna_smoke.c
index 08665f3007a..4c5c584b16b 100644
--- a/source/blender/makesrna/intern/rna_smoke.c
+++ b/source/blender/makesrna/intern/rna_smoke.c
@@ -54,21 +54,23 @@
#include "BKE_colorband.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_particle.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#include "smoke_API.h"
static void rna_Smoke_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- DAG_id_tag_update(ptr->id.data, OB_RECALC_DATA);
+ DEG_id_tag_update(ptr->id.data, OB_RECALC_DATA);
}
static void rna_Smoke_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
rna_Smoke_update(bmain, scene, ptr);
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
}
static void rna_Smoke_resetCache(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
@@ -76,7 +78,7 @@ static void rna_Smoke_resetCache(Main *UNUSED(bmain), Scene *UNUSED(scene), Poin
SmokeDomainSettings *settings = (SmokeDomainSettings *)ptr->data;
if (settings->smd && settings->smd->domain)
settings->point_cache[0]->flag |= PTCACHE_OUTDATED;
- DAG_id_tag_update(ptr->id.data, OB_RECALC_DATA);
+ DEG_id_tag_update(ptr->id.data, OB_RECALC_DATA);
}
static void rna_Smoke_cachetype_set(struct PointerRNA *ptr, int value)
diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c
index ca24cdd27ec..b4a42b3a909 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -45,6 +45,7 @@
#include "DNA_sequence_types.h"
#include "DNA_mask_types.h"
#include "DNA_view3d_types.h"
+#include "DNA_workspace_types.h"
#include "RNA_access.h"
#include "RNA_define.h"
@@ -196,7 +197,7 @@ const EnumPropertyItem rna_enum_clip_editor_mode_items[] = {
static const EnumPropertyItem buttons_context_items[] = {
{BCONTEXT_SCENE, "SCENE", ICON_SCENE_DATA, "Scene", "Scene"},
{BCONTEXT_RENDER, "RENDER", ICON_SCENE, "Render", "Render"},
- {BCONTEXT_RENDER_LAYER, "RENDER_LAYER", ICON_RENDERLAYERS, "Render Layers", "Render layers"},
+ {BCONTEXT_VIEW_LAYER, "VIEW_LAYER", ICON_RENDERLAYERS, "View Layers", "View layers"},
{BCONTEXT_WORLD, "WORLD", ICON_WORLD, "World", "World"},
{BCONTEXT_OBJECT, "OBJECT", ICON_OBJECT_DATA, "Object", "Object"},
{BCONTEXT_CONSTRAINT, "CONSTRAINT", ICON_CONSTRAINT, "Constraints", "Object constraints"},
@@ -208,6 +209,8 @@ static const EnumPropertyItem buttons_context_items[] = {
{BCONTEXT_TEXTURE, "TEXTURE", ICON_TEXTURE, "Texture", "Texture"},
{BCONTEXT_PARTICLE, "PARTICLES", ICON_PARTICLES, "Particles", "Particle"},
{BCONTEXT_PHYSICS, "PHYSICS", ICON_PHYSICS, "Physics", "Physics"},
+ {BCONTEXT_COLLECTION, "COLLECTION", ICON_COLLAPSEMENU, "Collection", "Collection"},
+ {BCONTEXT_WORKSPACE, "WORKSPACE", ICON_RENDER_RESULT, "Workspace", "Workspace"},
{0, NULL, 0, NULL, NULL}
};
@@ -222,6 +225,11 @@ static const EnumPropertyItem buttons_texture_context_items[] = {
{0, NULL, 0, NULL, NULL}
};
+static const EnumPropertyItem buttons_collection_context_items[] = {
+ {SB_COLLECTION_CTX_VIEW_LAYER, "VIEW_LAYER", ICON_RENDERLAYERS, "", "Show material textures"},
+ {SB_COLLECTION_CTX_GROUP, "GROUP", ICON_GROUP, "", "Show world textures"},
+ {0, NULL, 0, NULL, NULL}
+};
static const EnumPropertyItem fileselectparams_recursion_level_items[] = {
{0, "NONE", 0, "None", "Only list current directory's content, with no recursion"},
@@ -253,17 +261,23 @@ const EnumPropertyItem rna_enum_file_sort_items[] = {
#include "BKE_brush.h"
#include "BKE_colortools.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
+#include "BKE_layer.h"
+#include "BKE_global.h"
#include "BKE_nla.h"
#include "BKE_paint.h"
#include "BKE_scene.h"
#include "BKE_screen.h"
#include "BKE_icons.h"
+#include "BKE_workspace.h"
+
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
#include "ED_buttons.h"
#include "ED_fileselect.h"
#include "ED_image.h"
#include "ED_node.h"
+#include "ED_transform.h"
#include "ED_screen.h"
#include "ED_view3d.h"
#include "ED_sequencer.h"
@@ -403,44 +417,64 @@ static void rna_Space_view2d_sync_update(Main *UNUSED(bmain), Scene *UNUSED(scen
}
}
-static PointerRNA rna_CurrentOrientation_get(PointerRNA *ptr)
+static int rna_View3D_transform_orientation_get(PointerRNA *ptr)
+{
+ const View3D *v3d = (View3D *)ptr->data;
+ /* convert to enum value */
+ return (v3d->twmode == V3D_MANIP_CUSTOM) ? (v3d->twmode + v3d->custom_orientation_index) : v3d->twmode;
+}
+
+void rna_View3D_transform_orientation_set(PointerRNA *ptr, int value)
{
- Scene *scene = ((bScreen *)ptr->id.data)->scene;
View3D *v3d = (View3D *)ptr->data;
+ BIF_selectTransformOrientationValue(v3d, value);
+}
- if (v3d->twmode < V3D_MANIP_CUSTOM)
- return rna_pointer_inherit_refine(ptr, &RNA_TransformOrientation, NULL);
- else
- return rna_pointer_inherit_refine(ptr, &RNA_TransformOrientation,
- BLI_findlink(&scene->transform_spaces, v3d->twmode - V3D_MANIP_CUSTOM));
+static PointerRNA rna_View3D_current_orientation_get(PointerRNA *ptr)
+{
+ View3D *v3d = (View3D *)ptr->data;
+ TransformOrientation *orientation;
+
+ if (v3d->twmode < V3D_MANIP_CUSTOM) {
+ orientation = NULL;
+ }
+ else {
+ WorkSpace *workspace;
+ bScreen *screen = ptr->id.data;
+
+ BKE_workspace_layout_find_global(G.main, screen, &workspace);
+ orientation = BKE_workspace_transform_orientation_find(workspace, v3d->custom_orientation_index);
+ }
+
+ return rna_pointer_inherit_refine(ptr, &RNA_TransformOrientation, orientation);
}
const EnumPropertyItem *rna_TransformOrientation_itemf(
bContext *C, PointerRNA *ptr, PropertyRNA *UNUSED(prop), bool *r_free)
{
- Scene *scene = NULL;
- ListBase *transform_spaces;
- TransformOrientation *ts = NULL;
+ WorkSpace *workspace;
+ ListBase *transform_orientations;
EnumPropertyItem tmp = {0, "", 0, "", ""};
EnumPropertyItem *item = NULL;
int i = V3D_MANIP_CUSTOM, totitem = 0;
RNA_enum_items_add(&item, &totitem, transform_orientation_items);
- if (ptr->type == &RNA_SpaceView3D)
- scene = ((bScreen *)ptr->id.data)->scene;
- else
- scene = CTX_data_scene(C); /* can't use scene from ptr->id.data because that enum is also used by operators */
-
- if (scene) {
- transform_spaces = &scene->transform_spaces;
- ts = transform_spaces->first;
+ if (ptr->type == &RNA_SpaceView3D) {
+ bScreen *screen = ptr->id.data;
+ BKE_workspace_layout_find_global(G.main, screen, &workspace);
+ }
+ else {
+ /* can't use scene from ptr->id.data because that enum is also used by operators */
+ workspace = C ? CTX_wm_workspace(C) : NULL;
}
- if (ts) {
+ transform_orientations = workspace ? BKE_workspace_transform_orientations_get(workspace) : NULL;
+
+ if (transform_orientations && (BLI_listbase_is_empty(transform_orientations) == false)) {
RNA_enum_item_add_separator(&item, &totitem);
- for (; ts; ts = ts->next) {
+ for (TransformOrientation *ts = transform_orientations->first; ts; ts = ts->next) {
tmp.identifier = ts->name;
tmp.name = ts->name;
tmp.value = i++;
@@ -459,8 +493,10 @@ static void rna_SpaceView3D_camera_update(Main *bmain, Scene *scene, PointerRNA
{
View3D *v3d = (View3D *)(ptr->data);
if (v3d->scenelock) {
+ wmWindowManager *wm = bmain->wm.first;
+
scene->camera = v3d->camera;
- BKE_screen_view3d_main_sync(&bmain->screen, scene);
+ WM_windows_scene_data_sync(&wm->windows, scene);
}
}
@@ -472,8 +508,10 @@ static void rna_SpaceView3D_lock_camera_and_layers_set(PointerRNA *ptr, int valu
v3d->scenelock = value;
if (value) {
+ Scene *scene = ED_screen_scene_find(sc, G.main->wm.first);
int bit;
- v3d->lay = sc->scene->lay;
+
+ v3d->lay = scene->lay;
/* seek for layact */
bit = 0;
while (bit < 32) {
@@ -483,15 +521,15 @@ static void rna_SpaceView3D_lock_camera_and_layers_set(PointerRNA *ptr, int valu
}
bit++;
}
- v3d->camera = sc->scene->camera;
+ v3d->camera = scene->camera;
}
}
static void rna_View3D_CursorLocation_get(PointerRNA *ptr, float *values)
{
View3D *v3d = (View3D *)(ptr->data);
- bScreen *sc = (bScreen *)ptr->id.data;
- Scene *scene = (Scene *)sc->scene;
+ bScreen *screen = ptr->id.data;
+ Scene *scene = ED_screen_scene_find(screen, G.main->wm.first);
const float *loc = ED_view3d_cursor3d_get(scene, v3d);
copy_v3_v3(values, loc);
@@ -500,8 +538,8 @@ static void rna_View3D_CursorLocation_get(PointerRNA *ptr, float *values)
static void rna_View3D_CursorLocation_set(PointerRNA *ptr, const float *values)
{
View3D *v3d = (View3D *)(ptr->data);
- bScreen *sc = (bScreen *)ptr->id.data;
- Scene *scene = (Scene *)sc->scene;
+ bScreen *screen = ptr->id.data;
+ Scene *scene = ED_screen_scene_find(screen, G.main->wm.first);
float *cursor = ED_view3d_cursor3d_get(scene, v3d);
copy_v3_v3(cursor, values);
@@ -510,8 +548,8 @@ static void rna_View3D_CursorLocation_set(PointerRNA *ptr, const float *values)
static float rna_View3D_GridScaleUnit_get(PointerRNA *ptr)
{
View3D *v3d = (View3D *)(ptr->data);
- bScreen *sc = (bScreen *)ptr->id.data;
- Scene *scene = (Scene *)sc->scene;
+ bScreen *screen = ptr->id.data;
+ Scene *scene = ED_screen_scene_find(screen, G.main->wm.first);
return ED_view3d_grid_scale(scene, v3d, NULL);
}
@@ -520,7 +558,7 @@ static void rna_SpaceView3D_layer_set(PointerRNA *ptr, const int *values)
{
View3D *v3d = (View3D *)(ptr->data);
- v3d->lay = ED_view3d_scene_layer_set(v3d->lay, values, &v3d->layact);
+ v3d->lay = ED_view3d_view_layer_set(v3d->lay, values, &v3d->layact);
}
static int rna_SpaceView3D_active_layer_get(PointerRNA *ptr)
@@ -532,7 +570,7 @@ static int rna_SpaceView3D_active_layer_get(PointerRNA *ptr)
static void rna_SpaceView3D_layer_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *UNUSED(ptr))
{
- DAG_on_visible_update(bmain, false);
+ DEG_on_visible_update(bmain, false);
}
static void rna_SpaceView3D_viewport_shade_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
@@ -695,12 +733,18 @@ static void rna_RegionView3D_view_matrix_set(PointerRNA *ptr, const float *value
static int rna_SpaceView3D_viewport_shade_get(PointerRNA *ptr)
{
- Scene *scene = ((bScreen *)ptr->id.data)->scene;
- RenderEngineType *type = RE_engines_find(scene->r.engine);
+ bScreen *screen = ptr->id.data;
+
+ Scene *scene = WM_windows_scene_get_from_screen(G.main->wm.first, screen);
+ WorkSpace *workspace = WM_windows_workspace_get_from_screen(G.main->wm.first, screen);
+
+ ViewRender *view_render = BKE_viewrender_get(scene, workspace);
+ RenderEngineType *type = RE_engines_find(view_render->engine_id);
+
View3D *v3d = (View3D *)ptr->data;
int drawtype = v3d->drawtype;
- if (drawtype == OB_RENDER && !(type && type->view_draw))
+ if (drawtype == OB_RENDER && !(type && type->render_to_view))
return OB_SOLID;
return drawtype;
@@ -715,11 +759,14 @@ static void rna_SpaceView3D_viewport_shade_set(PointerRNA *ptr, int value)
v3d->drawtype = value;
}
-static const EnumPropertyItem *rna_SpaceView3D_viewport_shade_itemf(bContext *UNUSED(C), PointerRNA *ptr,
+static const EnumPropertyItem *rna_SpaceView3D_viewport_shade_itemf(bContext *C, PointerRNA *UNUSED(ptr),
PropertyRNA *UNUSED(prop), bool *r_free)
{
- Scene *scene = ((bScreen *)ptr->id.data)->scene;
- RenderEngineType *type = RE_engines_find(scene->r.engine);
+ wmWindow *win = CTX_wm_window(C);
+ Scene *scene = WM_window_get_active_scene(win);
+ WorkSpace *workspace = WM_window_get_active_workspace(win);
+ ViewRender *view_render = BKE_viewrender_get(scene, workspace);
+ RenderEngineType *type = RE_engines_find(view_render->engine_id);
EnumPropertyItem *item = NULL;
int totitem = 0;
@@ -730,7 +777,7 @@ static const EnumPropertyItem *rna_SpaceView3D_viewport_shade_itemf(bContext *UN
RNA_enum_items_add_value(&item, &totitem, rna_enum_viewport_shade_items, OB_TEXTURE);
RNA_enum_items_add_value(&item, &totitem, rna_enum_viewport_shade_items, OB_MATERIAL);
- if (type && type->view_draw)
+ if (type && type->render_to_view)
RNA_enum_items_add_value(&item, &totitem, rna_enum_viewport_shade_items, OB_RENDER);
RNA_enum_item_end(&item, &totitem);
@@ -739,10 +786,10 @@ static const EnumPropertyItem *rna_SpaceView3D_viewport_shade_itemf(bContext *UN
return item;
}
-static const EnumPropertyItem *rna_SpaceView3D_stereo3d_camera_itemf(bContext *UNUSED(C), PointerRNA *ptr,
+static const EnumPropertyItem *rna_SpaceView3D_stereo3d_camera_itemf(bContext *C, PointerRNA *UNUSED(ptr),
PropertyRNA *UNUSED(prop), bool *UNUSED(r_free))
{
- Scene *scene = ((bScreen *)ptr->id.data)->scene;
+ Scene *scene = CTX_data_scene(C);
if (scene->r.views_format == SCE_VIEWS_FORMAT_MULTIVIEW)
return multiview_camera_items;
@@ -810,22 +857,29 @@ static int rna_SpaceImageEditor_show_uvedit_get(PointerRNA *ptr)
{
SpaceImage *sima = (SpaceImage *)(ptr->data);
bScreen *sc = (bScreen *)ptr->id.data;
- return ED_space_image_show_uvedit(sima, sc->scene->obedit);
+ Scene *scene = ED_screen_scene_find(sc, G.main->wm.first);
+
+ return ED_space_image_show_uvedit(sima, scene->obedit);
}
static int rna_SpaceImageEditor_show_maskedit_get(PointerRNA *ptr)
{
SpaceImage *sima = (SpaceImage *)(ptr->data);
bScreen *sc = (bScreen *)ptr->id.data;
- return ED_space_image_check_show_maskedit(sc->scene, sima);
+ wmWindow *window = NULL;
+ Scene *scene = ED_screen_scene_find_with_window(sc, G.main->wm.first, &window);
+ ViewLayer *view_layer = BKE_view_layer_context_active_PLACEHOLDER(scene);
+ const WorkSpace *workspace = WM_window_get_active_workspace(window);
+ return ED_space_image_check_show_maskedit(sima, workspace, view_layer);
}
static void rna_SpaceImageEditor_image_set(PointerRNA *ptr, PointerRNA value)
{
SpaceImage *sima = (SpaceImage *)(ptr->data);
bScreen *sc = (bScreen *)ptr->id.data;
+ Scene *scene = ED_screen_scene_find(sc, G.main->wm.first);
- ED_space_image_set(sima, sc->scene, sc->scene->obedit, (Image *)value.data);
+ ED_space_image_set(sima, scene, scene->obedit, (Image *)value.data);
}
static void rna_SpaceImageEditor_mask_set(PointerRNA *ptr, PointerRNA value)
@@ -1071,8 +1125,8 @@ static const EnumPropertyItem *rna_SpaceProperties_context_itemf(bContext *UNUSE
RNA_enum_items_add_value(&item, &totitem, buttons_context_items, BCONTEXT_RENDER);
}
- if (sbuts->pathflag & (1 << BCONTEXT_RENDER_LAYER)) {
- RNA_enum_items_add_value(&item, &totitem, buttons_context_items, BCONTEXT_RENDER_LAYER);
+ if (sbuts->pathflag & (1 << BCONTEXT_VIEW_LAYER)) {
+ RNA_enum_items_add_value(&item, &totitem, buttons_context_items, BCONTEXT_VIEW_LAYER);
}
if (sbuts->pathflag & (1 << BCONTEXT_SCENE)) {
@@ -1083,6 +1137,14 @@ static const EnumPropertyItem *rna_SpaceProperties_context_itemf(bContext *UNUSE
RNA_enum_items_add_value(&item, &totitem, buttons_context_items, BCONTEXT_WORLD);
}
+ if (sbuts->pathflag & (1 << BCONTEXT_WORKSPACE)) {
+ RNA_enum_items_add_value(&item, &totitem, buttons_context_items, BCONTEXT_WORKSPACE);
+ }
+
+ if (sbuts->pathflag & (1 << BCONTEXT_COLLECTION)) {
+ RNA_enum_items_add_value(&item, &totitem, buttons_context_items, BCONTEXT_COLLECTION);
+ }
+
if (sbuts->pathflag & (1 << BCONTEXT_OBJECT)) {
RNA_enum_items_add_value(&item, &totitem, buttons_context_items, BCONTEXT_OBJECT);
}
@@ -1264,10 +1326,12 @@ static void rna_SpaceDopeSheetEditor_action_set(PointerRNA *ptr, PointerRNA valu
}
}
-static void rna_SpaceDopeSheetEditor_action_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+static void rna_SpaceDopeSheetEditor_action_update(bContext *C, PointerRNA *ptr)
{
SpaceAction *saction = (SpaceAction *)(ptr->data);
- Object *obact = (scene->basact) ? scene->basact->object : NULL;
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Main *bmain = CTX_data_main(C);
+ Object *obact = OBACT(view_layer);
/* we must set this action to be the one used by active object (if not pinned) */
if (obact /* && saction->pin == 0*/) {
@@ -1333,16 +1397,17 @@ static void rna_SpaceDopeSheetEditor_action_update(Main *bmain, Scene *scene, Po
}
/* force depsgraph flush too */
- DAG_id_tag_update(&obact->id, OB_RECALC_OB | OB_RECALC_DATA);
+ DEG_id_tag_update(&obact->id, OB_RECALC_OB | OB_RECALC_DATA);
/* Update relations as well, so new time source dependency is added. */
- DAG_relations_tag_update(bmain);
+ DEG_relations_tag_update(bmain);
}
}
-static void rna_SpaceDopeSheetEditor_mode_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *ptr)
+static void rna_SpaceDopeSheetEditor_mode_update(bContext *C, PointerRNA *ptr)
{
SpaceAction *saction = (SpaceAction *)(ptr->data);
- Object *obact = (scene->basact) ? scene->basact->object : NULL;
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Object *obact = OBACT(view_layer);
/* special exceptions for ShapeKey Editor mode */
if (saction->mode == SACTCONT_SHAPEKEY) {
@@ -1404,59 +1469,6 @@ static void rna_Sequencer_view_type_update(Main *UNUSED(bmain), Scene *UNUSED(sc
ED_area_tag_refresh(sa);
}
-static float rna_BackgroundImage_opacity_get(PointerRNA *ptr)
-{
- BGpic *bgpic = (BGpic *)ptr->data;
- return 1.0f - bgpic->blend;
-}
-
-static void rna_BackgroundImage_opacity_set(PointerRNA *ptr, float value)
-{
- BGpic *bgpic = (BGpic *)ptr->data;
- bgpic->blend = 1.0f - value;
-}
-
-/* radius internally (expose as a distance value) */
-static float rna_BackgroundImage_size_get(PointerRNA *ptr)
-{
- BGpic *bgpic = ptr->data;
- return bgpic->size * 2.0f;
-}
-
-static void rna_BackgroundImage_size_set(PointerRNA *ptr, float value)
-{
- BGpic *bgpic = ptr->data;
- bgpic->size = value * 0.5f;
-}
-
-static BGpic *rna_BackgroundImage_new(View3D *v3d)
-{
- BGpic *bgpic = ED_view3d_background_image_new(v3d);
-
- WM_main_add_notifier(NC_SPACE | ND_SPACE_VIEW3D, v3d);
-
- return bgpic;
-}
-
-static void rna_BackgroundImage_remove(View3D *v3d, ReportList *reports, PointerRNA *bgpic_ptr)
-{
- BGpic *bgpic = bgpic_ptr->data;
- if (BLI_findindex(&v3d->bgpicbase, bgpic) == -1) {
- BKE_report(reports, RPT_ERROR, "Background image cannot be removed");
- }
-
- ED_view3d_background_image_remove(v3d, bgpic);
- RNA_POINTER_INVALIDATE(bgpic_ptr);
-
- WM_main_add_notifier(NC_SPACE | ND_SPACE_VIEW3D, v3d);
-}
-
-static void rna_BackgroundImage_clear(View3D *v3d)
-{
- ED_view3d_background_image_clear(v3d);
- WM_main_add_notifier(NC_SPACE | ND_SPACE_VIEW3D, v3d);
-}
-
/* Space Node Editor */
static void rna_SpaceNodeEditor_node_tree_set(PointerRNA *ptr, const PointerRNA value)
@@ -2090,23 +2102,26 @@ static void rna_def_space_outliner(BlenderRNA *brna)
PropertyRNA *prop;
static const EnumPropertyItem display_mode_items[] = {
- {SO_ALL_SCENES, "ALL_SCENES", 0, "All Scenes", "Display data-blocks in all scenes"},
- {SO_CUR_SCENE, "CURRENT_SCENE", 0, "Current Scene", "Display data-blocks in current scene"},
- {SO_VISIBLE, "VISIBLE_LAYERS", 0, "Visible Layers", "Display data-blocks in visible layers"},
- {SO_SELECTED, "SELECTED", 0, "Selected", "Display data-blocks of selected, visible objects"},
- {SO_ACTIVE, "ACTIVE", 0, "Active", "Display data-blocks of active object"},
- {SO_SAME_TYPE, "SAME_TYPES", 0, "Same Types",
- "Display data-blocks of all objects of same type as selected object"},
+ {SO_VIEW_LAYER, "VIEW_LAYER", 0, "View Layer", "Display the collections of the active view layer"},
+ {SO_COLLECTIONS, "COLLECTIONS", 0, "Collections", "Display all collections based on the "
+ "master collection hierarchy"},
+ {SO_SCENES, "SCENES", 0, "Scenes", "Display composition related data in all scenes"},
{SO_GROUPS, "GROUPS", 0, "Groups", "Display groups and their data-blocks"},
{SO_SEQUENCE, "SEQUENCE", 0, "Sequence", "Display sequence data-blocks"},
{SO_LIBRARIES, "LIBRARIES", 0, "Blender File", "Display data of current file and linked libraries"},
{SO_DATABLOCKS, "DATABLOCKS", 0, "Data-Blocks", "Display all raw data-blocks"},
- {SO_USERDEF, "USER_PREFERENCES", 0, "User Preferences", "Display user preference data"},
{SO_ID_ORPHANS, "ORPHAN_DATA", 0, "Orphan Data",
"Display data-blocks which are unused and/or will be lost when the file is reloaded"},
{0, NULL, 0, NULL, NULL}
};
+ static const EnumPropertyItem filter_state_items[] = {
+ {SO_FILTER_OB_VISIBLE, "VISIBLE", ICON_RESTRICT_VIEW_OFF, "Visible", "Show visible objects"},
+ {SO_FILTER_OB_SELECTED, "SELECTED", ICON_RESTRICT_SELECT_OFF, "Selected", "Show selected objects"},
+ {SO_FILTER_OB_ACTIVE, "ACTIVE", ICON_LAYER_ACTIVE, "Active", "Show only the active object"},
+ {0, NULL, 0, NULL, NULL}
+ };
+
srna = RNA_def_struct(brna, "SpaceOutliner", "Space");
RNA_def_struct_sdna(srna, "SpaceOops");
RNA_def_struct_ui_text(srna, "Space Outliner", "Outliner space data");
@@ -2126,212 +2141,121 @@ static void rna_def_space_outliner(BlenderRNA *brna)
prop = RNA_def_property(srna, "use_filter_case_sensitive", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "search_flags", SO_FIND_CASE_SENSITIVE);
RNA_def_property_ui_text(prop, "Case Sensitive Matches Only", "Only use case sensitive matches of search string");
+ RNA_def_property_ui_icon(prop, ICON_SYNTAX_OFF, 0);
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_OUTLINER, NULL);
prop = RNA_def_property(srna, "use_filter_complete", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "search_flags", SO_FIND_COMPLETE);
RNA_def_property_ui_text(prop, "Complete Matches Only", "Only use complete matches of search string");
+ RNA_def_property_ui_icon(prop, ICON_OUTLINER_DATA_FONT, 0);
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_OUTLINER, NULL);
prop = RNA_def_property(srna, "use_sort_alpha", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SO_SKIP_SORT_ALPHA);
RNA_def_property_ui_text(prop, "Sort Alphabetically", "");
+ RNA_def_property_ui_icon(prop, ICON_SORTALPHA, 0);
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_OUTLINER, NULL);
prop = RNA_def_property(srna, "show_restrict_columns", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SO_HIDE_RESTRICTCOLS);
RNA_def_property_ui_text(prop, "Show Restriction Columns", "Show column");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_OUTLINER, NULL);
-}
-
-static void rna_def_background_image(BlenderRNA *brna)
-{
- StructRNA *srna;
- PropertyRNA *prop;
-
- /* note: combinations work but don't flip so arnt that useful */
- static const EnumPropertyItem bgpic_axis_items[] = {
- {0, "", 0, N_("X Axis"), ""},
- {(1 << RV3D_VIEW_LEFT), "LEFT", 0, "Left", "Show background image while looking to the left"},
- {(1 << RV3D_VIEW_RIGHT), "RIGHT", 0, "Right", "Show background image while looking to the right"},
- /*{(1<<RV3D_VIEW_LEFT)|(1<<RV3D_VIEW_RIGHT), "LEFT_RIGHT", 0, "Left/Right", ""},*/
- {0, "", 0, N_("Y Axis"), ""},
- {(1 << RV3D_VIEW_BACK), "BACK", 0, "Back", "Show background image in back view"},
- {(1 << RV3D_VIEW_FRONT), "FRONT", 0, "Front", "Show background image in front view"},
- /*{(1<<RV3D_VIEW_BACK)|(1<<RV3D_VIEW_FRONT), "BACK_FRONT", 0, "Back/Front", ""},*/
- {0, "", 0, N_("Z Axis"), ""},
- {(1 << RV3D_VIEW_BOTTOM), "BOTTOM", 0, "Bottom", "Show background image in bottom view"},
- {(1 << RV3D_VIEW_TOP), "TOP", 0, "Top", "Show background image in top view"},
- /*{(1<<RV3D_VIEW_BOTTOM)|(1<<RV3D_VIEW_TOP), "BOTTOM_TOP", 0, "Top/Bottom", ""},*/
- {0, "", 0, N_("Other"), ""},
- {0, "ALL", 0, "All Views", "Show background image in all views"},
- {(1 << RV3D_VIEW_CAMERA), "CAMERA", 0, "Camera", "Show background image in camera view"},
- {0, NULL, 0, NULL, NULL}
- };
-
- static const EnumPropertyItem bgpic_source_items[] = {
- {V3D_BGPIC_IMAGE, "IMAGE", 0, "Image", ""},
- {V3D_BGPIC_MOVIE, "MOVIE_CLIP", 0, "Movie Clip", ""},
- {0, NULL, 0, NULL, NULL}
- };
-
- static const EnumPropertyItem bgpic_camera_frame_items[] = {
- {0, "STRETCH", 0, "Stretch", ""},
- {V3D_BGPIC_CAMERA_ASPECT, "FIT", 0, "Fit", ""},
- {V3D_BGPIC_CAMERA_ASPECT | V3D_BGPIC_CAMERA_CROP, "CROP", 0, "Crop", ""},
- {0, NULL, 0, NULL, NULL}
- };
-
- static const EnumPropertyItem bgpic_draw_depth_items[] = {
- {0, "BACK", 0, "Back", ""},
- {V3D_BGPIC_FOREGROUND, "FRONT", 0, "Front", ""},
- {0, NULL, 0, NULL, NULL}
- };
- srna = RNA_def_struct(brna, "BackgroundImage", NULL);
- RNA_def_struct_sdna(srna, "BGpic");
- RNA_def_struct_ui_text(srna, "Background Image", "Image and settings for display in the 3D View background");
-
- prop = RNA_def_property(srna, "source", PROP_ENUM, PROP_NONE);
- RNA_def_property_enum_sdna(prop, NULL, "source");
- RNA_def_property_enum_items(prop, bgpic_source_items);
- RNA_def_property_ui_text(prop, "Background Source", "Data source used for background");
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
-
- prop = RNA_def_property(srna, "image", PROP_POINTER, PROP_NONE);
- RNA_def_property_pointer_sdna(prop, NULL, "ima");
- RNA_def_property_ui_text(prop, "Image", "Image displayed and edited in this space");
- RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
-
- prop = RNA_def_property(srna, "clip", PROP_POINTER, PROP_NONE);
- RNA_def_property_pointer_sdna(prop, NULL, "clip");
- RNA_def_property_ui_text(prop, "MovieClip", "Movie clip displayed and edited in this space");
- RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
-
- prop = RNA_def_property(srna, "image_user", PROP_POINTER, PROP_NONE);
- RNA_def_property_flag(prop, PROP_NEVER_NULL);
- RNA_def_property_pointer_sdna(prop, NULL, "iuser");
- RNA_def_property_ui_text(prop, "Image User",
- "Parameters defining which layer, pass and frame of the image is displayed");
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
-
- prop = RNA_def_property(srna, "clip_user", PROP_POINTER, PROP_NONE);
- RNA_def_property_flag(prop, PROP_NEVER_NULL);
- RNA_def_property_struct_type(prop, "MovieClipUser");
- RNA_def_property_pointer_sdna(prop, NULL, "cuser");
- RNA_def_property_ui_text(prop, "Clip User", "Parameters defining which frame of the movie clip is displayed");
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
-
- prop = RNA_def_property(srna, "offset_x", PROP_FLOAT, PROP_NONE);
- RNA_def_property_float_sdna(prop, NULL, "xof");
- RNA_def_property_ui_text(prop, "X Offset", "Offset image horizontally from the world origin");
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
-
- prop = RNA_def_property(srna, "offset_y", PROP_FLOAT, PROP_NONE);
- RNA_def_property_float_sdna(prop, NULL, "yof");
- RNA_def_property_ui_text(prop, "Y Offset", "Offset image vertically from the world origin");
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
-
- prop = RNA_def_property(srna, "size", PROP_FLOAT, PROP_DISTANCE);
- RNA_def_property_float_sdna(prop, NULL, "size");
- RNA_def_property_float_funcs(prop, "rna_BackgroundImage_size_get", "rna_BackgroundImage_size_set", NULL);
- RNA_def_property_ui_text(prop, "Size", "Size of the background image (ortho view only)");
- RNA_def_property_range(prop, 0.0, FLT_MAX);
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
-
- prop = RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_EULER);
- RNA_def_property_float_sdna(prop, NULL, "rotation");
- RNA_def_property_ui_text(prop, "Rotation", "Rotation for the background image (ortho view only)");
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
-
- prop = RNA_def_property(srna, "use_flip_x", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_BGPIC_FLIP_X);
- RNA_def_property_ui_text(prop, "Flip Horizontally", "Flip the background image horizontally");
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+ /* Filters. */
+ prop = RNA_def_property(srna, "use_filter_search", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "filter", SO_FILTER_SEARCH);
+ RNA_def_property_ui_text(prop, "Search Name", "Filter searched elements");
+ RNA_def_property_ui_icon(prop, ICON_VIEWZOOM, 0);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_OUTLINER, NULL);
- prop = RNA_def_property(srna, "use_flip_y", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_BGPIC_FLIP_Y);
- RNA_def_property_ui_text(prop, "Flip Vertically", "Flip the background image vertically");
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+ prop = RNA_def_property(srna, "use_filters", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "filter", SO_FILTER_ENABLE);
+ RNA_def_property_ui_text(prop, "Use Filters", "Use filters");
+ RNA_def_property_ui_icon(prop, ICON_FILTER, 0);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_OUTLINER, NULL);
- prop = RNA_def_property(srna, "opacity", PROP_FLOAT, PROP_NONE);
- RNA_def_property_float_sdna(prop, NULL, "blend");
- RNA_def_property_float_funcs(prop, "rna_BackgroundImage_opacity_get", "rna_BackgroundImage_opacity_set", NULL);
- RNA_def_property_ui_text(prop, "Opacity", "Image opacity to blend the image against the background color");
- RNA_def_property_range(prop, 0.0, 1.0);
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+ prop = RNA_def_property(srna, "use_filter_object", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "filter", SO_FILTER_NO_OBJECT);
+ RNA_def_property_ui_text(prop, "Filter Objects", "Show objects");
+ RNA_def_property_ui_icon(prop, ICON_OBJECT_DATA, 0);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_OUTLINER, NULL);
- prop = RNA_def_property(srna, "view_axis", PROP_ENUM, PROP_NONE);
- RNA_def_property_enum_sdna(prop, NULL, "view");
- RNA_def_property_enum_items(prop, bgpic_axis_items);
- RNA_def_property_ui_text(prop, "Image Axis", "The axis to display the image on");
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+ prop = RNA_def_property(srna, "use_filter_object_content", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "filter", SO_FILTER_NO_OB_CONTENT);
+ RNA_def_property_ui_text(prop, "Filter Objects Contents", "Show what is inside the objects elements");
+ RNA_def_property_ui_icon(prop, ICON_MODIFIER, 0);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_OUTLINER, NULL);
- prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_BGPIC_EXPANDED);
- RNA_def_property_ui_text(prop, "Show Expanded", "Show the expanded in the user interface");
- RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
+ prop = RNA_def_property(srna, "use_filter_children", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "filter", SO_FILTER_NO_CHILDREN);
+ RNA_def_property_ui_text(prop, "Filter Objects Children", "Show children");
+ RNA_def_property_ui_icon(prop, ICON_PLUS, 0);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_OUTLINER, NULL);
- prop = RNA_def_property(srna, "use_camera_clip", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_BGPIC_CAMERACLIP);
- RNA_def_property_ui_text(prop, "Camera Clip", "Use movie clip from active scene camera");
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+ prop = RNA_def_property(srna, "use_filter_collection", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "filter", SO_FILTER_NO_COLLECTION);
+ RNA_def_property_ui_text(prop, "Filter Collections", "Show collections");
+ RNA_def_property_ui_icon(prop, ICON_COLLAPSEMENU, 0);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_OUTLINER, NULL);
- prop = RNA_def_property(srna, "show_background_image", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", V3D_BGPIC_DISABLED);
- RNA_def_property_ui_text(prop, "Show Background Image", "Show this image as background");
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+ /* Filters object state. */
+ prop = RNA_def_property(srna, "use_filter_object_state", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "filter", SO_FILTER_OB_STATE);
+ RNA_def_property_ui_text(prop, "Filter Object State", "Filter objects based on their state (visible, ...)."
+ "This can be slow");
+ RNA_def_property_ui_icon(prop, ICON_LAYER_USED, 0);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_OUTLINER, NULL);
- prop = RNA_def_property(srna, "show_on_foreground", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_BGPIC_FOREGROUND);
- RNA_def_property_ui_text(prop, "Show On Foreground", "Show this image in front of objects in viewport");
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+ prop = RNA_def_property(srna, "filter_state", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "filter_state");
+ RNA_def_property_enum_items(prop, filter_state_items);
+ RNA_def_property_ui_text(prop, "State Filter", "");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_OUTLINER, NULL);
- /* expose 1 flag as a enum of 2 items */
- prop = RNA_def_property(srna, "draw_depth", PROP_ENUM, PROP_NONE);
- RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
- RNA_def_property_enum_items(prop, bgpic_draw_depth_items);
- RNA_def_property_ui_text(prop, "Depth", "Draw under or over everything");
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+ /* Filters object type. */
+ prop = RNA_def_property(srna, "use_filter_object_type", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "filter", SO_FILTER_OB_TYPE);
+ RNA_def_property_ui_text(prop, "Filter Object Type", "Show specific objects types");
+ RNA_def_property_ui_icon(prop, ICON_MESH_CUBE, 0);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_OUTLINER, NULL);
- /* expose 2 flags as a enum of 3 items */
- prop = RNA_def_property(srna, "frame_method", PROP_ENUM, PROP_NONE);
- RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
- RNA_def_property_enum_items(prop, bgpic_camera_frame_items);
- RNA_def_property_ui_text(prop, "Frame Method", "How the image fits in the camera frame");
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
-}
+ prop = RNA_def_property(srna, "use_filter_object_mesh", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "filter", SO_FILTER_NO_OB_MESH);
+ RNA_def_property_ui_text(prop, "Show Meshes", "Show mesh objects");
+ RNA_def_property_ui_icon(prop, ICON_OUTLINER_OB_MESH, 0);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_OUTLINER, NULL);
-static void rna_def_backgroundImages(BlenderRNA *brna, PropertyRNA *cprop)
-{
- StructRNA *srna;
- FunctionRNA *func;
- PropertyRNA *parm;
+ prop = RNA_def_property(srna, "use_filter_object_armature", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "filter", SO_FILTER_NO_OB_ARMATURE);
+ RNA_def_property_ui_text(prop, "Show Armatures", "Show armature objects");
+ RNA_def_property_ui_icon(prop, ICON_OUTLINER_OB_ARMATURE, 0);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_OUTLINER, NULL);
- RNA_def_property_srna(cprop, "BackgroundImages");
- srna = RNA_def_struct(brna, "BackgroundImages", NULL);
- RNA_def_struct_sdna(srna, "View3D");
- RNA_def_struct_ui_text(srna, "Background Images", "Collection of background images");
+ prop = RNA_def_property(srna, "use_filter_object_empty", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "filter", SO_FILTER_NO_OB_EMPTY);
+ RNA_def_property_ui_text(prop, "Show Empties", "Show empty objects");
+ RNA_def_property_ui_icon(prop, ICON_OUTLINER_OB_EMPTY, 0);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_OUTLINER, NULL);
- func = RNA_def_function(srna, "new", "rna_BackgroundImage_new");
- RNA_def_function_ui_description(func, "Add new background image");
- parm = RNA_def_pointer(func, "image", "BackgroundImage", "", "Image displayed as viewport background");
- RNA_def_function_return(func, parm);
+ prop = RNA_def_property(srna, "use_filter_object_lamp", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "filter", SO_FILTER_NO_OB_LAMP);
+ RNA_def_property_ui_text(prop, "Show Lamps", "Show lamps objects");
+ RNA_def_property_ui_icon(prop, ICON_OUTLINER_OB_LAMP, 0);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_OUTLINER, NULL);
- func = RNA_def_function(srna, "remove", "rna_BackgroundImage_remove");
- RNA_def_function_ui_description(func, "Remove background image");
- RNA_def_function_flag(func, FUNC_USE_REPORTS);
- parm = RNA_def_pointer(func, "image", "BackgroundImage", "", "Image displayed as viewport background");
- RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
- RNA_def_parameter_clear_flags(parm, PROP_THICK_WRAP, 0);
+ prop = RNA_def_property(srna, "use_filter_object_camera", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "filter", SO_FILTER_NO_OB_CAMERA);
+ RNA_def_property_ui_text(prop, "Show Cameras", "Show camera objects");
+ RNA_def_property_ui_icon(prop, ICON_OUTLINER_OB_CAMERA, 0);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_OUTLINER, NULL);
- func = RNA_def_function(srna, "clear", "rna_BackgroundImage_clear");
- RNA_def_function_ui_description(func, "Remove all background images");
+ prop = RNA_def_property(srna, "use_filter_object_others", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "filter", SO_FILTER_NO_OB_OTHERS);
+ RNA_def_property_ui_text(prop, "Show Other Objects", "Show curves, lattices, light probes, fonts, ...");
+ RNA_def_property_ui_icon(prop, ICON_ZOOMIN, 0);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_OUTLINER, NULL);
}
-
static void rna_def_space_view3d(BlenderRNA *brna)
{
StructRNA *srna;
@@ -2576,9 +2500,9 @@ static void rna_def_space_view3d(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Backface Culling", "Use back face culling to hide the back side of faces");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
- prop = RNA_def_property(srna, "show_textured_shadeless", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag2", V3D_SHADELESS_TEX);
- RNA_def_property_ui_text(prop, "Shadeless", "Show shadeless texture without lighting in textured draw mode");
+ prop = RNA_def_property(srna, "show_mode_shade_override", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag2", V3D_SHOW_MODE_SHADE_OVERRIDE);
+ RNA_def_property_ui_text(prop, "Full Shading", "Use full shading for mode drawing (to view final result)");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "show_occlude_wire", PROP_BOOLEAN, PROP_NONE);
@@ -2607,19 +2531,6 @@ static void rna_def_space_view3d(BlenderRNA *brna)
RNA_def_property_ui_icon(prop, ICON_ORTHO, 0);
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
- prop = RNA_def_property(srna, "background_images", PROP_COLLECTION, PROP_NONE);
- RNA_def_property_collection_sdna(prop, NULL, "bgpicbase", NULL);
- RNA_def_property_struct_type(prop, "BackgroundImage");
- RNA_def_property_ui_text(prop, "Background Images", "List of background images");
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
- rna_def_backgroundImages(brna, prop);
-
- prop = RNA_def_property(srna, "show_background_images", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_DISPBGPICS);
- RNA_def_property_ui_text(prop, "Display Background Images",
- "Display reference images behind objects in the 3D View");
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
-
prop = RNA_def_property(srna, "pivot_point", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "around");
RNA_def_property_enum_items(prop, pivot_items_full);
@@ -2633,7 +2544,7 @@ static void rna_def_space_view3d(BlenderRNA *brna)
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_SpaceView3D_pivot_update");
prop = RNA_def_property(srna, "show_manipulator", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "twflag", V3D_USE_MANIPULATOR);
+ RNA_def_property_boolean_sdna(prop, NULL, "twflag", V3D_MANIPULATOR_DRAW);
RNA_def_property_ui_text(prop, "Manipulator", "Use a 3D manipulator widget for controlling transforms");
RNA_def_property_ui_icon(prop, ICON_MANIPUL, 0);
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
@@ -2648,13 +2559,14 @@ static void rna_def_space_view3d(BlenderRNA *brna)
prop = RNA_def_property(srna, "transform_orientation", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "twmode");
RNA_def_property_enum_items(prop, transform_orientation_items);
- RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_TransformOrientation_itemf");
+ RNA_def_property_enum_funcs(prop, "rna_View3D_transform_orientation_get", "rna_View3D_transform_orientation_set",
+ "rna_TransformOrientation_itemf");
RNA_def_property_ui_text(prop, "Transform Orientation", "Transformation orientation");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "current_orientation", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "TransformOrientation");
- RNA_def_property_pointer_funcs(prop, "rna_CurrentOrientation_get", NULL, NULL, NULL);
+ RNA_def_property_pointer_funcs(prop, "rna_View3D_current_orientation_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Current Transform Orientation", "Current transformation orientation");
prop = RNA_def_property(srna, "lock_camera_and_layers", PROP_BOOLEAN, PROP_NONE);
@@ -2934,6 +2846,11 @@ static void rna_def_space_buttons(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Limited Texture Context",
"Use the limited version of texture user (for 'old shading' mode)");
+ prop = RNA_def_property(srna, "collection_context", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_items(prop, buttons_collection_context_items);
+ RNA_def_property_ui_text(prop, "Collection Context", "Which collection we want to show");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_PROPERTIES, NULL);
+
/* pinned data */
prop = RNA_def_property(srna, "pin_id", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "pinid");
@@ -3398,7 +3315,7 @@ static void rna_def_space_dopesheet(BlenderRNA *brna)
PropertyRNA *prop;
/* XXX: action-editor is currently for object-level only actions, so show that using object-icon hint */
- static const EnumPropertyItem mode_items[] = {
+ static EnumPropertyItem mode_items[] = {
{SACTCONT_DOPESHEET, "DOPESHEET", ICON_OOPS, "Dope Sheet", "Edit all keyframes in scene"},
{SACTCONT_ACTION, "ACTION", ICON_OBJECT_DATA, "Action Editor", "Edit keyframes in active object's Object-level action"},
{SACTCONT_SHAPEKEY, "SHAPEKEY", ICON_SHAPEKEY_DATA, "Shape Key Editor", "Edit keyframes in active object's Shape Keys action"},
@@ -3419,6 +3336,7 @@ static void rna_def_space_dopesheet(BlenderRNA *brna)
RNA_def_property_pointer_funcs(prop, NULL, "rna_SpaceDopeSheetEditor_action_set", NULL,
"rna_Action_actedit_assign_poll");
RNA_def_property_ui_text(prop, "Action", "Action displayed and edited in this space");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, "rna_SpaceDopeSheetEditor_action_update");
/* mode */
@@ -3426,6 +3344,7 @@ static void rna_def_space_dopesheet(BlenderRNA *brna)
RNA_def_property_enum_sdna(prop, NULL, "mode");
RNA_def_property_enum_items(prop, mode_items);
RNA_def_property_ui_text(prop, "Mode", "Editing context being displayed");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_DOPESHEET, "rna_SpaceDopeSheetEditor_mode_update");
/* display */
@@ -3869,6 +3788,7 @@ static void rna_def_fileselect_params(BlenderRNA *brna)
"Particles Settings", "Show/hide Particle Settings data-blocks"},
{FILTER_ID_PAL, "PALETTE", ICON_COLOR, "Palettes", "Show/hide Palette data-blocks"},
{FILTER_ID_PC, "PAINT_CURVE", ICON_CURVE_BEZCURVE, "Paint Curves", "Show/hide Paint Curve data-blocks"},
+ {FILTER_ID_LP, "LIGHT_PROBE", ICON_RADIO, "Light Probes", "Show/hide Light Probe data-blocks"},
{FILTER_ID_SCE, "SCENE", ICON_SCENE_DATA, "Scenes", "Show/hide Scene data-blocks"},
{FILTER_ID_SPK, "SPEAKER", ICON_SPEAKER, "Speakers", "Show/hide Speaker data-blocks"},
{FILTER_ID_SO, "SOUND", ICON_SOUND, "Sounds", "Show/hide Sound data-blocks"},
@@ -3876,6 +3796,7 @@ static void rna_def_fileselect_params(BlenderRNA *brna)
{FILTER_ID_TXT, "TEXT", ICON_TEXT, "Texts", "Show/hide Text data-blocks"},
{FILTER_ID_VF, "FONT", ICON_FONT_DATA, "Fonts", "Show/hide Font data-blocks"},
{FILTER_ID_WO, "WORLD", ICON_WORLD_DATA, "Worlds", "Show/hide World data-blocks"},
+ {FILTER_ID_WS, "WORK_SPACE", ICON_NONE, "Workspaces", "Show/hide workspace data-blocks"},
{0, NULL, 0, NULL, NULL}
};
@@ -3893,7 +3814,7 @@ static void rna_def_fileselect_params(BlenderRNA *brna)
"Show/hide materials, nodetrees, textures and Freestyle's linestyles"},
{FILTER_ID_IM | FILTER_ID_MC | FILTER_ID_MSK | FILTER_ID_SO,
"IMAGE", ICON_IMAGE_DATA, "Images & Sounds", "Show/hide images, movie clips, sounds and masks"},
- {FILTER_ID_CA | FILTER_ID_LA | FILTER_ID_SPK | FILTER_ID_WO,
+ {FILTER_ID_CA | FILTER_ID_LA | FILTER_ID_SPK | FILTER_ID_WO | FILTER_ID_WS,
"ENVIRONMENT", ICON_WORLD_DATA, "Environment", "Show/hide worlds, lamps, cameras and speakers"},
{FILTER_ID_BR | FILTER_ID_GD | FILTER_ID_PA | FILTER_ID_PAL | FILTER_ID_PC | FILTER_ID_TXT | FILTER_ID_VF | FILTER_ID_CF,
"MISC", ICON_GREASEPENCIL, "Miscellaneous", "Show/hide other data types"},
@@ -4408,14 +4329,10 @@ static void rna_def_space_node(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Backdrop Zoom", "Backdrop zoom factor");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_NODE_VIEW, NULL);
- prop = RNA_def_property(srna, "backdrop_x", PROP_FLOAT, PROP_NONE);
+ prop = RNA_def_property(srna, "backdrop_offset", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "xof");
- RNA_def_property_ui_text(prop, "Backdrop X", "Backdrop X offset");
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_NODE_VIEW, NULL);
-
- prop = RNA_def_property(srna, "backdrop_y", PROP_FLOAT, PROP_NONE);
- RNA_def_property_float_sdna(prop, NULL, "yof");
- RNA_def_property_ui_text(prop, "Backdrop Y", "Backdrop Y offset");
+ RNA_def_property_array(prop, 2);
+ RNA_def_property_ui_text(prop, "Backdrop Offset", "Backdrop offset");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_NODE_VIEW, NULL);
prop = RNA_def_property(srna, "backdrop_channels", PROP_ENUM, PROP_NONE);
@@ -4789,7 +4706,6 @@ void RNA_def_space(BlenderRNA *brna)
rna_def_filemenu_entry(brna);
rna_def_space_filebrowser(brna);
rna_def_space_outliner(brna);
- rna_def_background_image(brna);
rna_def_space_view3d(brna);
rna_def_space_buttons(brna);
rna_def_space_dopesheet(brna);
diff --git a/source/blender/makesrna/intern/rna_space_api.c b/source/blender/makesrna/intern/rna_space_api.c
index 8f771eda99d..822f5cbb4b6 100644
--- a/source/blender/makesrna/intern/rna_space_api.c
+++ b/source/blender/makesrna/intern/rna_space_api.c
@@ -31,23 +31,28 @@
#ifdef RNA_RUNTIME
+#include "BKE_global.h"
+
+#include "ED_screen.h"
#include "ED_text.h"
-static void rna_RegionView3D_update(ID *id, RegionView3D *rv3d)
+static void rna_RegionView3D_update(ID *id, RegionView3D *rv3d, bContext *C)
{
bScreen *sc = (bScreen *)id;
+ EvaluationContext eval_ctx;
ScrArea *sa;
ARegion *ar;
+ CTX_data_eval_ctx(C, &eval_ctx);
+
area_region_from_regiondata(sc, rv3d, &sa, &ar);
if (sa && ar && sa->spacetype == SPACE_VIEW3D) {
- View3D *v3d;
+ View3D *v3d = sa->spacedata.first;
+ Scene *scene = ED_screen_scene_find(sc, G.main->wm.first);
- v3d = (View3D *)sa->spacedata.first;
-
- ED_view3d_update_viewmat(sc->scene, v3d, ar, NULL, NULL, NULL);
+ ED_view3d_update_viewmat(&eval_ctx, scene, v3d, ar, NULL, NULL, NULL);
}
}
@@ -71,7 +76,7 @@ void RNA_api_region_view3d(StructRNA *srna)
FunctionRNA *func;
func = RNA_def_function(srna, "update", "rna_RegionView3D_update");
- RNA_def_function_flag(func, FUNC_USE_SELF_ID);
+ RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_USE_CONTEXT);
RNA_def_function_ui_description(func, "Recalculate the view matrices");
}
diff --git a/source/blender/makesrna/intern/rna_speaker.c b/source/blender/makesrna/intern/rna_speaker.c
index f47b54c2d95..f37b75b3db2 100644
--- a/source/blender/makesrna/intern/rna_speaker.c
+++ b/source/blender/makesrna/intern/rna_speaker.c
@@ -41,7 +41,6 @@
#include "MEM_guardedalloc.h"
-#include "BKE_depsgraph.h"
#include "BKE_main.h"
#include "WM_api.h"
diff --git a/source/blender/makesrna/intern/rna_texture.c b/source/blender/makesrna/intern/rna_texture.c
index 39674724889..e2e44a8ac5c 100644
--- a/source/blender/makesrna/intern/rna_texture.c
+++ b/source/blender/makesrna/intern/rna_texture.c
@@ -37,6 +37,7 @@
#include "DNA_node_types.h"
#include "DNA_particle_types.h"
#include "DNA_scene_types.h" /* MAXFRAME only */
+#include "DNA_workspace_types.h"
#include "BLI_utildefines.h"
@@ -114,11 +115,12 @@ static const EnumPropertyItem blend_type_items[] = {
#include "BKE_colorband.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_image.h"
#include "BKE_texture.h"
#include "BKE_main.h"
+#include "DEG_depsgraph.h"
+
#include "ED_node.h"
#include "ED_render.h"
@@ -169,7 +171,7 @@ static void rna_Texture_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *pt
if (GS(id->name) == ID_TE) {
Tex *tex = ptr->id.data;
- DAG_id_tag_update(&tex->id, 0);
+ DEG_id_tag_update(&tex->id, 0);
WM_main_add_notifier(NC_TEXTURE, tex);
WM_main_add_notifier(NC_MATERIAL | ND_SHADING_DRAW, NULL);
}
@@ -215,7 +217,7 @@ static void rna_Texture_nodes_update(Main *UNUSED(bmain), Scene *UNUSED(scene),
{
Tex *tex = ptr->id.data;
- DAG_id_tag_update(&tex->id, 0);
+ DEG_id_tag_update(&tex->id, 0);
WM_main_add_notifier(NC_TEXTURE | ND_NODES, tex);
}
@@ -226,11 +228,11 @@ static void rna_Texture_type_set(PointerRNA *ptr, int value)
BKE_texture_type_set(tex, value);
}
-void rna_TextureSlot_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *ptr)
+void rna_TextureSlot_update(bContext *C, PointerRNA *ptr)
{
ID *id = ptr->id.data;
- DAG_id_tag_update(id, 0);
+ DEG_id_tag_update(id, 0);
switch (GS(id->name)) {
case ID_MA:
@@ -246,8 +248,11 @@ void rna_TextureSlot_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *ptr)
break;
case ID_BR:
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
+ Scene *scene = CTX_data_scene(C);
MTex *mtex = ptr->data;
- BKE_paint_invalidate_overlay_tex(scene, mtex->tex);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ BKE_paint_invalidate_overlay_tex(scene, view_layer, mtex->tex, workspace->object_mode);
WM_main_add_notifier(NC_BRUSH, id);
break;
}
@@ -264,7 +269,7 @@ void rna_TextureSlot_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *ptr)
if (mtex->mapto & PAMAP_CHILD)
recalc |= PSYS_RECALC_CHILD;
- DAG_id_tag_update(id, recalc);
+ DEG_id_tag_update(id, recalc);
WM_main_add_notifier(NC_OBJECT | ND_PARTICLE | NA_EDITED, NULL);
break;
}
@@ -649,7 +654,7 @@ static void rna_def_mtex(BlenderRNA *brna)
prop = RNA_def_property(srna, "texture", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "tex");
RNA_def_property_struct_type(prop, "Texture");
- RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_CONTEXT_UPDATE);
RNA_def_property_ui_text(prop, "Texture", "Texture data-block used by this texture slot");
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING_LINKS, "rna_TextureSlot_update");
@@ -657,6 +662,7 @@ static void rna_def_mtex(BlenderRNA *brna)
RNA_def_property_string_funcs(prop, "rna_TextureSlot_name_get", "rna_TextureSlot_name_length", NULL);
RNA_def_property_ui_text(prop, "Name", "Texture slot name");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_struct_name_property(srna, prop);
RNA_def_property_update(prop, 0, "rna_TextureSlot_update");
@@ -664,12 +670,13 @@ static void rna_def_mtex(BlenderRNA *brna)
prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_TRANSLATION);
RNA_def_property_float_sdna(prop, NULL, "ofs");
RNA_def_property_ui_range(prop, -10, 10, 10, RNA_TRANSLATION_PREC_DEFAULT);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_ui_text(prop, "Offset", "Fine tune of the texture mapping X, Y and Z locations");
RNA_def_property_update(prop, 0, "rna_TextureSlot_update");
prop = RNA_def_property(srna, "scale", PROP_FLOAT, PROP_XYZ);
RNA_def_property_float_sdna(prop, NULL, "size");
- RNA_def_property_flag(prop, PROP_PROPORTIONAL);
+ RNA_def_property_flag(prop, PROP_PROPORTIONAL | PROP_CONTEXT_UPDATE);
RNA_def_property_ui_range(prop, -100, 100, 10, 2);
RNA_def_property_ui_text(prop, "Size", "Set scaling for the texture's X, Y and Z sizes");
RNA_def_property_update(prop, 0, "rna_TextureSlot_update");
@@ -677,6 +684,7 @@ static void rna_def_mtex(BlenderRNA *brna)
prop = RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "r");
RNA_def_property_array(prop, 3);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_ui_text(prop, "Color",
"Default color for textures that don't return RGB or when RGB to intensity is enabled");
RNA_def_property_update(prop, 0, "rna_TextureSlot_update");
@@ -684,26 +692,31 @@ static void rna_def_mtex(BlenderRNA *brna)
prop = RNA_def_property(srna, "blend_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "blendtype");
RNA_def_property_enum_items(prop, blend_type_items);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_ui_text(prop, "Blend Type", "Mode used to apply the texture");
RNA_def_property_update(prop, 0, "rna_TextureSlot_update");
prop = RNA_def_property(srna, "use_stencil", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "texflag", MTEX_STENCIL);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_ui_text(prop, "Stencil", "Use this texture as a blending value on the next texture");
RNA_def_property_update(prop, 0, "rna_TextureSlot_update");
prop = RNA_def_property(srna, "invert", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "texflag", MTEX_NEGATIVE);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_ui_text(prop, "Negate", "Invert the values of the texture to reverse its effect");
RNA_def_property_update(prop, 0, "rna_TextureSlot_update");
prop = RNA_def_property(srna, "use_rgb_to_intensity", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "texflag", MTEX_RGBTOINT);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_ui_text(prop, "RGB to Intensity", "Convert texture RGB values to intensity (gray) values");
RNA_def_property_update(prop, 0, "rna_TextureSlot_update");
prop = RNA_def_property(srna, "default_value", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "def_var");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_ui_range(prop, 0, 1, 10, 3);
RNA_def_property_ui_text(prop, "Default Value",
"Value to use for Ref, Spec, Amb, Emit, Alpha, RayMir, TransLu and Hard");
@@ -712,6 +725,7 @@ static void rna_def_mtex(BlenderRNA *brna)
prop = RNA_def_property(srna, "output_node", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "which_output");
RNA_def_property_enum_items(prop, output_node_items);
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_enum_funcs(prop, "rna_TextureSlot_output_node_get", NULL, "rna_TextureSlot_output_node_itemf");
RNA_def_property_ui_text(prop, "Output Node", "Which output node to use, for node-based textures");
RNA_def_property_update(prop, 0, "rna_TextureSlot_update");
@@ -738,7 +752,7 @@ static void rna_def_filter_common(StructRNA *srna)
RNA_def_property_ui_text(prop, "Filter", "Texture filter to use for sampling image");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop = RNA_def_property(srna, "filter_probes", PROP_INT, PROP_NONE);
+ prop = RNA_def_property(srna, "filter_lightprobes", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "afmax");
RNA_def_property_range(prop, 1, 256);
RNA_def_property_ui_text(prop, "Filter Probes",
diff --git a/source/blender/makesrna/intern/rna_tracking.c b/source/blender/makesrna/intern/rna_tracking.c
index f44f7336cdf..ccc118edfb6 100644
--- a/source/blender/makesrna/intern/rna_tracking.c
+++ b/source/blender/makesrna/intern/rna_tracking.c
@@ -51,9 +51,10 @@
#include "DNA_anim_types.h"
#include "BKE_animsys.h"
-#include "BKE_depsgraph.h"
#include "BKE_node.h"
+#include "DEG_depsgraph.h"
+
#include "IMB_imbuf.h"
#include "WM_api.h"
@@ -426,7 +427,7 @@ static void rna_tracking_flushUpdate(Main *UNUSED(bmain), Scene *scene, PointerR
WM_main_add_notifier(NC_SCENE | ND_NODES, NULL);
WM_main_add_notifier(NC_SCENE, NULL);
- DAG_id_tag_update(&clip->id, 0);
+ DEG_id_tag_update(&clip->id, 0);
}
static void rna_tracking_resetIntrinsics(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
@@ -515,7 +516,7 @@ static void rna_trackingObject_flushUpdate(Main *UNUSED(bmain), Scene *UNUSED(sc
MovieClip *clip = (MovieClip *)ptr->id.data;
WM_main_add_notifier(NC_OBJECT | ND_TRANSFORM, NULL);
- DAG_id_tag_update(&clip->id, 0);
+ DEG_id_tag_update(&clip->id, 0);
}
static void rna_trackingMarker_frame_set(PointerRNA *ptr, int value)
diff --git a/source/blender/makesrna/intern/rna_ui_api.c b/source/blender/makesrna/intern/rna_ui_api.c
index dd3a2bf6fe2..5fc263ae171 100644
--- a/source/blender/makesrna/intern/rna_ui_api.c
+++ b/source/blender/makesrna/intern/rna_ui_api.c
@@ -714,7 +714,31 @@ void RNA_api_ui_layout(StructRNA *srna)
"Identifier of property in data giving the type of the ID-blocks to use");
RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
api_ui_item_common_text(func);
-
+
+ func = RNA_def_function(srna, "template_search", "uiTemplateSearch");
+ RNA_def_function_flag(func, FUNC_USE_CONTEXT);
+ api_ui_item_rna_common(func);
+ parm = RNA_def_pointer(func, "search_data", "AnyType", "", "Data from which to take collection to search in");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
+ parm = RNA_def_string(func, "search_property", NULL, 0, "", "Identifier of search collection property");
+ RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+ RNA_def_string(func, "new", NULL, 0, "", "Operator identifier to create a new item for the collection");
+ RNA_def_string(func, "unlink", NULL, 0, "", "Operator identifier to unlink or delete the active "
+ "item from the collection");
+
+ func = RNA_def_function(srna, "template_search_preview", "uiTemplateSearchPreview");
+ RNA_def_function_flag(func, FUNC_USE_CONTEXT);
+ api_ui_item_rna_common(func);
+ parm = RNA_def_pointer(func, "search_data", "AnyType", "", "Data from which to take collection to search in");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
+ parm = RNA_def_string(func, "search_property", NULL, 0, "", "Identifier of search collection property");
+ RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+ RNA_def_string(func, "new", NULL, 0, "", "Operator identifier to create a new item for the collection");
+ RNA_def_string(func, "unlink", NULL, 0, "", "Operator identifier to unlink or delete the active "
+ "item from the collection");
+ RNA_def_int(func, "rows", 0, 0, INT_MAX, "Number of thumbnail preview rows to display", "", 0, INT_MAX);
+ RNA_def_int(func, "cols", 0, 0, INT_MAX, "Number of thumbnail preview columns to display", "", 0, INT_MAX);
+
func = RNA_def_function(srna, "template_path_builder", "rna_uiTemplatePathBuilder");
parm = RNA_def_pointer(func, "data", "AnyType", "", "Data from which to take property");
RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
@@ -931,6 +955,16 @@ void RNA_api_ui_layout(StructRNA *srna)
parm = RNA_def_pointer(func, "item", "KeyMapItem", "", "");
RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
+ func = RNA_def_function(srna, "template_override_property", "uiTemplateOverrideProperty");
+ parm = RNA_def_pointer(func, "collection_render_overrides", "AnyType", "", "");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
+ parm = RNA_def_pointer(func, "scene_collection_properties", "AnyType", "", "");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
+ parm = RNA_def_string(func, "property", NULL, 0, "", "Identifier of property in collection_properties");
+ RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+ api_ui_item_common(func);
+ parm = RNA_def_string(func, "custom_template", NULL, 0, "", "Optional template to use for property");
+
func = RNA_def_function(srna, "template_component_menu", "uiTemplateComponentMenu");
RNA_def_function_ui_description(func, "Item. Display expanded property in a popup menu");
parm = RNA_def_pointer(func, "data", "AnyType", "", "Data from which to take property");
diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c
index 489a841fb0b..69997883c42 100644
--- a/source/blender/makesrna/intern/rna_userdef.c
+++ b/source/blender/makesrna/intern/rna_userdef.c
@@ -68,16 +68,7 @@ static const EnumPropertyItem opensubdiv_compute_type_items[] = {
#endif
static const EnumPropertyItem audio_device_items[] = {
- {0, "NONE", 0, "None", "Null device - there will be no audio output"},
-#ifdef WITH_SDL
- {1, "SDL", 0, "SDL", "SDL device - simple direct media layer, recommended for sequencer usage"},
-#endif
-#ifdef WITH_OPENAL
- {2, "OPENAL", 0, "OpenAL", "OpenAL device - supports 3D audio, recommended for game engine usage"},
-#endif
-#ifdef WITH_JACK
- {3, "JACK", 0, "JACK", "JACK Audio Connection Kit, recommended for pro audio users"},
-#endif
+ {0, "Null", 0, "None", "Null device - there will be no audio output"},
{0, NULL, 0, NULL, NULL}
};
@@ -100,13 +91,14 @@ static const EnumPropertyItem rna_enum_language_default_items[] = {
#include "DNA_screen_types.h"
#include "BKE_blender.h"
-#include "BKE_depsgraph.h"
#include "BKE_global.h"
#include "BKE_main.h"
#include "BKE_idprop.h"
#include "BKE_pbvh.h"
#include "BKE_paint.h"
+#include "DEG_depsgraph.h"
+
#include "GPU_draw.h"
#include "GPU_select.h"
@@ -183,10 +175,12 @@ static void rna_userdef_show_manipulator_update(Main *bmain, Scene *scene, Point
for (sl = sa->spacedata.first; sl; sl = sl->next) {
if (sl->spacetype == SPACE_VIEW3D) {
View3D *v3d = (View3D *)sl;
- if (userdef->tw_flag & V3D_USE_MANIPULATOR)
- v3d->twflag |= V3D_USE_MANIPULATOR;
- else
- v3d->twflag &= ~V3D_USE_MANIPULATOR;
+ if (userdef->manipulator_flag & USER_MANIPULATOR_DRAW) {
+ v3d->twflag |= V3D_MANIPULATOR_DRAW;
+ }
+ else {
+ v3d->twflag &= ~V3D_MANIPULATOR_DRAW;
+ }
}
}
}
@@ -370,8 +364,11 @@ static void rna_UserDef_weight_color_update(Main *bmain, Scene *scene, PointerRN
vDM_ColorBand_store((U.flag & USER_CUSTOM_RANGE) ? (&U.coba_weight) : NULL, btheme->tv3d.vertex_unreferenced);
for (ob = bmain->object.first; ob; ob = ob->id.next) {
- if (ob->mode & OB_MODE_WEIGHT_PAINT)
- DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ /* TODO/OBMODE (not urgent) */
+ // if (ob->mode & OB_MODE_WEIGHT_PAINT)
+ {
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
+ }
}
rna_userdef_update(bmain, scene, ptr);
@@ -512,7 +509,7 @@ static void rna_userdef_opensubdiv_update(Main *bmain, Scene *UNUSED(scene), Poi
if (object->derivedFinal != NULL &&
object->derivedFinal->type == DM_TYPE_CCGDM)
{
- DAG_id_tag_update(&object->id, OB_RECALC_OB);
+ DEG_id_tag_update(&object->id, OB_RECALC_OB);
}
}
}
@@ -526,7 +523,6 @@ static const EnumPropertyItem *rna_userdef_audio_device_itemf(bContext *UNUSED(C
int totitem = 0;
EnumPropertyItem *item = NULL;
-#ifdef WITH_SYSTEM_AUDASPACE
int i;
char **names = BKE_sound_get_device_names();
@@ -535,31 +531,6 @@ static const EnumPropertyItem *rna_userdef_audio_device_itemf(bContext *UNUSED(C
EnumPropertyItem new_item = {i, names[i], 0, names[i], names[i]};
RNA_enum_item_add(&item, &totitem, &new_item);
}
-#else
- /* NONE */
- RNA_enum_item_add(&item, &totitem, &audio_device_items[index++]);
-
-#ifdef WITH_SDL
-# ifdef WITH_SDL_DYNLOAD
- if (sdlewInit() == SDLEW_SUCCESS)
-# endif
- {
- RNA_enum_item_add(&item, &totitem, &audio_device_items[index]);
- }
- index++;
-#endif
-
-#ifdef WITH_OPENAL
- RNA_enum_item_add(&item, &totitem, &audio_device_items[index++]);
-#endif
-
-#ifdef WITH_JACK
- if (BKE_sound_is_jack_supported()) {
- RNA_enum_item_add(&item, &totitem, &audio_device_items[index]);
- }
- index++;
-#endif
-#endif
/* may be unused */
UNUSED_VARS(index, audio_device_items);
@@ -890,6 +861,16 @@ static void rna_def_userdef_theme_ui_wcol_state(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Driven Selected", "");
RNA_def_property_update(prop, 0, "rna_userdef_update");
+ prop = RNA_def_property(srna, "inner_overridden", PROP_FLOAT, PROP_COLOR_GAMMA);
+ RNA_def_property_array(prop, 3);
+ RNA_def_property_ui_text(prop, "Overridden", "");
+ RNA_def_property_update(prop, 0, "rna_userdef_update");
+
+ prop = RNA_def_property(srna, "inner_overridden_sel", PROP_FLOAT, PROP_COLOR_GAMMA);
+ RNA_def_property_array(prop, 3);
+ RNA_def_property_ui_text(prop, "Overridden Selected", "");
+ RNA_def_property_update(prop, 0, "rna_userdef_update");
+
prop = RNA_def_property(srna, "blend", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_ui_text(prop, "Blend", "");
RNA_def_property_update(prop, 0, "rna_userdef_update");
@@ -1101,6 +1082,37 @@ static void rna_def_userdef_theme_ui(BlenderRNA *brna)
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Z Axis", "");
RNA_def_property_update(prop, 0, "rna_userdef_update");
+
+ /* Generic manipulator colors. */
+ prop = RNA_def_property(srna, "manipulator_hi", PROP_FLOAT, PROP_COLOR_GAMMA);
+ RNA_def_property_float_sdna(prop, NULL, "manipulator_hi");
+ RNA_def_property_array(prop, 3);
+ RNA_def_property_ui_text(prop, "Manipulator Highlight", "");
+ RNA_def_property_update(prop, 0, "rna_userdef_update");
+
+ prop = RNA_def_property(srna, "manipulator_primary", PROP_FLOAT, PROP_COLOR_GAMMA);
+ RNA_def_property_float_sdna(prop, NULL, "manipulator_primary");
+ RNA_def_property_array(prop, 3);
+ RNA_def_property_ui_text(prop, "Manipulator Primary", "");
+ RNA_def_property_update(prop, 0, "rna_userdef_update");
+
+ prop = RNA_def_property(srna, "manipulator_secondary", PROP_FLOAT, PROP_COLOR_GAMMA);
+ RNA_def_property_float_sdna(prop, NULL, "manipulator_secondary");
+ RNA_def_property_array(prop, 3);
+ RNA_def_property_ui_text(prop, "Manipulator Secondary", "");
+ RNA_def_property_update(prop, 0, "rna_userdef_update");
+
+ prop = RNA_def_property(srna, "manipulator_a", PROP_FLOAT, PROP_COLOR_GAMMA);
+ RNA_def_property_float_sdna(prop, NULL, "manipulator_a");
+ RNA_def_property_array(prop, 3);
+ RNA_def_property_ui_text(prop, "Manipulator A", "");
+ RNA_def_property_update(prop, 0, "rna_userdef_update");
+
+ prop = RNA_def_property(srna, "manipulator_b", PROP_FLOAT, PROP_COLOR_GAMMA);
+ RNA_def_property_float_sdna(prop, NULL, "manipulator_b");
+ RNA_def_property_array(prop, 3);
+ RNA_def_property_ui_text(prop, "Manipulator B", "");
+ RNA_def_property_update(prop, 0, "rna_userdef_update");
}
static void rna_def_userdef_theme_space_common(StructRNA *srna)
@@ -1304,7 +1316,7 @@ static void rna_def_userdef_theme_spaces_vertex(StructRNA *srna)
RNA_def_property_update(prop, 0, "rna_userdef_update");
prop = RNA_def_property(srna, "vertex_size", PROP_INT, PROP_NONE);
- RNA_def_property_range(prop, 1, 10);
+ RNA_def_property_range(prop, 1, 32);
RNA_def_property_ui_text(prop, "Vertex Size", "");
RNA_def_property_update(prop, 0, "rna_userdef_update");
@@ -1526,7 +1538,7 @@ static void rna_def_userdef_theme_spaces_curves(StructRNA *srna, bool incl_nurbs
RNA_def_property_update(prop, 0, "rna_userdef_update");
prop = RNA_def_property(srna, "handle_vertex_size", PROP_INT, PROP_NONE);
- RNA_def_property_range(prop, 0, 255);
+ RNA_def_property_range(prop, 1, 100);
RNA_def_property_ui_text(prop, "Handle Vertex Size", "");
RNA_def_property_update(prop, 0, "rna_userdef_update");
}
@@ -3378,11 +3390,6 @@ static void rna_def_userdef_view(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Display Object Info", "Display objects name and frame number in 3D view");
RNA_def_property_update(prop, 0, "rna_userdef_update");
- prop = RNA_def_property(srna, "use_global_scene", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_SCENEGLOBAL);
- RNA_def_property_ui_text(prop, "Global Scene", "Force the current Scene to be displayed in all Screens");
- RNA_def_property_update(prop, 0, "rna_userdef_update");
-
prop = RNA_def_property(srna, "show_large_cursors", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "curssize", 0);
RNA_def_property_ui_text(prop, "Large Cursors", "Use large mouse cursors when available");
@@ -3560,30 +3567,30 @@ static void rna_def_userdef_view(BlenderRNA *brna)
/* 3D transform widget */
prop = RNA_def_property(srna, "show_manipulator", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "tw_flag", V3D_USE_MANIPULATOR);
+ RNA_def_property_boolean_sdna(prop, NULL, "manipulator_flag", USER_MANIPULATOR_DRAW);
RNA_def_property_ui_text(prop, "Manipulator", "Use 3D transform manipulator");
RNA_def_property_update(prop, 0, "rna_userdef_show_manipulator_update");
+ prop = RNA_def_property(srna, "show_manipulator_navigate", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "manipulator_flag", USER_MANIPULATOR_DRAW_NAVIGATE);
+ RNA_def_property_ui_text(prop, "Navigate Manipulator", "Use 3D navigation manipulator");
+ RNA_def_property_update(prop, 0, "rna_userdef_show_manipulator_update");
+
+ /* TODO, expose once it's working. */
+#if 0
+ prop = RNA_def_property(srna, "show_manipulator_shaded", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "manipulator_flag", USER_MANIPULATOR_SHADED);
+ RNA_def_property_ui_text(prop, "Manipulator Shaded", "Use 3D transform manipulator");
+ RNA_def_property_update(prop, 0, "rna_userdef_update");
+#endif
+
prop = RNA_def_property(srna, "manipulator_size", PROP_INT, PROP_PIXEL);
- RNA_def_property_int_sdna(prop, NULL, "tw_size");
+ RNA_def_property_int_sdna(prop, NULL, "manipulator_size");
RNA_def_property_range(prop, 10, 200);
RNA_def_property_int_default(prop, 75);
RNA_def_property_ui_text(prop, "Manipulator Size", "Diameter of the manipulator");
RNA_def_property_update(prop, 0, "rna_userdef_update");
- prop = RNA_def_property(srna, "manipulator_handle_size", PROP_INT, PROP_PERCENTAGE);
- RNA_def_property_int_sdna(prop, NULL, "tw_handlesize");
- RNA_def_property_range(prop, 2, 40);
- RNA_def_property_int_default(prop, 25);
- RNA_def_property_ui_text(prop, "Manipulator Handle Size", "Size of manipulator handles as percentage of the radius");
- RNA_def_property_update(prop, 0, "rna_userdef_update");
-
- prop = RNA_def_property(srna, "manipulator_hotspot", PROP_INT, PROP_PIXEL);
- RNA_def_property_int_sdna(prop, NULL, "tw_hotspot");
- RNA_def_property_range(prop, 4, 40);
- RNA_def_property_int_default(prop, 14);
- RNA_def_property_ui_text(prop, "Manipulator Hotspot", "Distance around the handles to accept mouse clicks");
-
prop = RNA_def_property(srna, "object_origin_size", PROP_INT, PROP_PIXEL);
RNA_def_property_int_sdna(prop, NULL, "obcenter_dia");
RNA_def_property_range(prop, 4, 10);
@@ -4232,6 +4239,7 @@ static void rna_def_userdef_system(BlenderRNA *brna)
RNA_def_property_enum_items(prop, multi_sample_levels);
RNA_def_property_ui_text(prop, "MultiSample",
"Enable OpenGL multi-sampling, only for systems that support it, requires restart");
+ RNA_def_property_update(prop, 0, "rna_userdef_dpi_update");
prop = RNA_def_property(srna, "use_region_overlap", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uiflag2", USER_REGION_OVERLAP);
diff --git a/source/blender/makesrna/intern/rna_vfont.c b/source/blender/makesrna/intern/rna_vfont.c
index c743751649c..78d46d35246 100644
--- a/source/blender/makesrna/intern/rna_vfont.c
+++ b/source/blender/makesrna/intern/rna_vfont.c
@@ -38,9 +38,10 @@
#ifdef RNA_RUNTIME
#include "BKE_font.h"
-#include "BKE_depsgraph.h"
#include "DNA_object_types.h"
+#include "DEG_depsgraph.h"
+
#include "WM_api.h"
/* matching fnction in rna_ID.c */
@@ -60,7 +61,7 @@ static void rna_VectorFont_reload_update(Main *UNUSED(bmain), Scene *UNUSED(scen
/* update */
WM_main_add_notifier(NC_GEOM | ND_DATA, NULL);
- DAG_id_tag_update(&vf->id, OB_RECALC_OB | OB_RECALC_DATA);
+ DEG_id_tag_update(&vf->id, OB_RECALC_OB | OB_RECALC_DATA);
}
#else
diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c
index 265758eb5c3..f3cf2bb0d64 100644
--- a/source/blender/makesrna/intern/rna_wm.c
+++ b/source/blender/makesrna/intern/rna_wm.c
@@ -36,6 +36,8 @@
#include "BLT_translation.h"
+#include "BKE_workspace.h"
+
#include "RNA_access.h"
#include "RNA_define.h"
#include "RNA_enum_types.h"
@@ -442,6 +444,11 @@ const EnumPropertyItem rna_enum_operator_return_items[] = {
{0, NULL, 0, NULL, NULL}
};
+const EnumPropertyItem rna_enum_operator_property_tags[] = {
+ {OP_PROP_TAG_ADVANCED, "ADVANCED", 0, "Advanced", "The property is advanced so UI is suggested to hide it"},
+ {0, NULL, 0, NULL, NULL}
+};
+
/* flag/enum */
const EnumPropertyItem rna_enum_wm_report_items[] = {
{RPT_DEBUG, "DEBUG", 0, "Debug", ""},
@@ -462,12 +469,24 @@ const EnumPropertyItem rna_enum_wm_report_items[] = {
#include "WM_api.h"
+#include "DNA_object_types.h"
+#include "DNA_workspace_types.h"
+
+#include "ED_screen.h"
+#include "ED_object.h"
+
#include "UI_interface.h"
+#include "BKE_global.h"
#include "BKE_idprop.h"
#include "MEM_guardedalloc.h"
+#ifdef WITH_PYTHON
+# include "BPY_extern.h"
+#endif
+
+
static wmOperator *rna_OperatorProperties_find_operator(PointerRNA *ptr)
{
wmWindowManager *wm = ptr->id.data;
@@ -622,42 +641,159 @@ static PointerRNA rna_PieMenu_layout_get(PointerRNA *ptr)
return rptr;
}
-static void rna_Window_screen_set(PointerRNA *ptr, PointerRNA value)
+static void rna_Window_scene_set(PointerRNA *ptr, PointerRNA value)
+{
+ wmWindow *win = ptr->data;
+
+ if (value.data == NULL) {
+ return;
+ }
+
+ win->new_scene = value.data;
+}
+
+static void rna_Window_scene_update(bContext *C, PointerRNA *ptr)
+{
+ Main *bmain = CTX_data_main(C);
+ wmWindow *win = ptr->data;
+
+ /* exception: must use context so notifier gets to the right window */
+ if (win->new_scene) {
+#ifdef WITH_PYTHON
+ BPy_BEGIN_ALLOW_THREADS;
+#endif
+
+ WM_window_change_active_scene(bmain, C, win, win->new_scene);
+
+#ifdef WITH_PYTHON
+ BPy_END_ALLOW_THREADS;
+#endif
+
+ WM_event_add_notifier(C, NC_SCENE | ND_SCENEBROWSE, win->new_scene);
+
+ if (G.debug & G_DEBUG)
+ printf("scene set %p\n", win->new_scene);
+
+ win->new_scene = NULL;
+ }
+}
+
+static PointerRNA rna_Window_workspace_get(PointerRNA *ptr)
+{
+ wmWindow *win = ptr->data;
+ return rna_pointer_inherit_refine(ptr, &RNA_WorkSpace, BKE_workspace_active_get(win->workspace_hook));
+}
+
+static void rna_Window_workspace_set(PointerRNA *ptr, PointerRNA value)
{
wmWindow *win = (wmWindow *)ptr->data;
/* disallow ID-browsing away from temp screens */
- if (win->screen->temp) {
+ if (WM_window_is_temp_screen(win)) {
+ return;
+ }
+ if (value.data == NULL) {
return;
}
- if (value.data == NULL)
+ /* exception: can't set workspaces inside of area/region handlers */
+ win->workspace_hook->temp_workspace_store = value.data;
+}
+
+static void rna_Window_workspace_update(bContext *C, PointerRNA *ptr)
+{
+ wmWindow *win = ptr->data;
+ WorkSpace *new_workspace = win->workspace_hook->temp_workspace_store;
+
+ /* exception: can't set screens inside of area/region handlers,
+ * and must use context so notifier gets to the right window */
+ if (new_workspace) {
+ WM_event_add_notifier(C, NC_SCREEN | ND_WORKSPACE_SET, new_workspace);
+ win->workspace_hook->temp_workspace_store = NULL;
+ }
+}
+
+PointerRNA rna_Window_screen_get(PointerRNA *ptr)
+{
+ wmWindow *win = ptr->data;
+ return rna_pointer_inherit_refine(ptr, &RNA_Screen, BKE_workspace_active_screen_get(win->workspace_hook));
+}
+
+static void rna_Window_screen_set(PointerRNA *ptr, PointerRNA value)
+{
+ wmWindow *win = ptr->data;
+ WorkSpace *workspace = BKE_workspace_active_get(win->workspace_hook);
+ WorkSpaceLayout *layout_new;
+ const bScreen *screen = BKE_workspace_active_screen_get(win->workspace_hook);
+
+ /* disallow ID-browsing away from temp screens */
+ if (screen->temp) {
+ return;
+ }
+ if (value.data == NULL) {
return;
+ }
/* exception: can't set screens inside of area/region handlers */
- win->newscreen = value.data;
+ layout_new = BKE_workspace_layout_find(workspace, value.data);
+ win->workspace_hook->temp_layout_store = layout_new;
}
static int rna_Window_screen_assign_poll(PointerRNA *UNUSED(ptr), PointerRNA value)
{
- bScreen *screen = (bScreen *)value.id.data;
-
+ bScreen *screen = value.id.data;
return !screen->temp;
}
-
-static void rna_Window_screen_update(bContext *C, PointerRNA *ptr)
+static void rna_workspace_screen_update(bContext *C, PointerRNA *ptr)
{
- wmWindow *win = (wmWindow *)ptr->data;
+ wmWindow *win = ptr->data;
+ WorkSpaceLayout *layout_new = win->workspace_hook->temp_layout_store;
/* exception: can't set screens inside of area/region handlers,
* and must use context so notifier gets to the right window */
- if (win->newscreen) {
- WM_event_add_notifier(C, NC_SCREEN | ND_SCREENBROWSE, win->newscreen);
- win->newscreen = NULL;
+ if (layout_new) {
+ WM_event_add_notifier(C, NC_SCREEN | ND_LAYOUTBROWSE, layout_new);
+ win->workspace_hook->temp_layout_store = NULL;
}
}
+static PointerRNA rna_Window_view_layer_get(PointerRNA *ptr)
+{
+ wmWindow *win = ptr->data;
+ Scene *scene = WM_window_get_active_scene(win);
+ WorkSpace *workspace = WM_window_get_active_workspace(win);
+ ViewLayer *view_layer = BKE_workspace_view_layer_get(workspace, scene);
+ PointerRNA scene_ptr;
+
+ RNA_id_pointer_create(&scene->id, &scene_ptr);
+ return rna_pointer_inherit_refine(&scene_ptr, &RNA_ViewLayer, view_layer);
+}
+
+static void rna_Window_view_layer_set(PointerRNA *ptr, PointerRNA value)
+{
+ wmWindow *win = ptr->data;
+ Scene *scene = WM_window_get_active_scene(win);
+ WorkSpace *workspace = WM_window_get_active_workspace(win);
+
+ BKE_workspace_view_layer_set(workspace, value.data, scene);
+}
+
+static void rna_Window_view_layer_update(struct bContext *C, PointerRNA *ptr)
+{
+ wmWindow *win = ptr->data;
+ Scene *scene = WM_window_get_active_scene(win);
+ WorkSpace *workspace = WM_window_get_active_workspace(win);
+ ViewLayer *view_layer = BKE_workspace_view_layer_get(workspace, scene);
+
+ eObjectMode object_mode = workspace->object_mode;
+ if (scene->obedit) {
+ ED_object_editmode_exit(C, EM_FREEDATA);
+ }
+ workspace->object_mode = object_mode;
+ ED_object_base_activate(C, view_layer->basact);
+}
+
static PointerRNA rna_KeyMapItem_properties_get(PointerRNA *ptr)
{
wmKeyMapItem *kmi = ptr->data;
@@ -1193,6 +1329,7 @@ static StructRNA *rna_Operator_register(
/* create a new operator type */
dummyot.ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, dummyot.idname, &RNA_Operator);
RNA_def_struct_flag(dummyot.ext.srna, STRUCT_NO_IDPROPERTIES); /* operator properties are registered separately */
+ RNA_def_struct_property_tags(dummyot.ext.srna, rna_enum_operator_property_tags);
RNA_def_struct_translation_context(dummyot.ext.srna, dummyot.translation_context);
dummyot.ext.data = data;
dummyot.ext.call = call;
@@ -1552,6 +1689,7 @@ static void rna_def_operator(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Operator Properties", "Input properties of an Operator");
RNA_def_struct_refine_func(srna, "rna_OperatorProperties_refine");
RNA_def_struct_idprops_func(srna, "rna_OperatorProperties_idprops");
+ RNA_def_struct_property_tags(srna, rna_enum_operator_property_tags);
RNA_def_struct_flag(srna, STRUCT_NO_DATABLOCK_IDPROPERTIES);
}
@@ -1912,14 +2050,35 @@ static void rna_def_window(BlenderRNA *brna)
rna_def_window_stereo3d(brna);
- prop = RNA_def_property(srna, "screen", PROP_POINTER, PROP_NONE);
+ prop = RNA_def_property(srna, "scene", PROP_POINTER, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_NEVER_NULL);
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_Window_scene_set", NULL, NULL);
+ RNA_def_property_ui_text(prop, "Scene", "Active scene to be edited in the window");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, 0, "rna_Window_scene_update");
+
+ prop = RNA_def_property(srna, "workspace", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
+ RNA_def_property_struct_type(prop, "WorkSpace");
+ RNA_def_property_ui_text(prop, "Workspace", "Active workspace showing in the window");
+ RNA_def_property_pointer_funcs(prop, "rna_Window_workspace_get", "rna_Window_workspace_set", NULL, NULL);
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, 0, "rna_Window_workspace_update");
+
+ prop = RNA_def_property(srna, "screen", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "Screen");
- RNA_def_property_ui_text(prop, "Screen", "Active screen showing in the window");
- RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_pointer_funcs(prop, NULL, "rna_Window_screen_set", NULL, "rna_Window_screen_assign_poll");
- RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
- RNA_def_property_update(prop, 0, "rna_Window_screen_update");
+ RNA_def_property_ui_text(prop, "Screen", "Active workspace screen showing in the window");
+ RNA_def_property_pointer_funcs(prop, "rna_Window_screen_get", "rna_Window_screen_set", NULL,
+ "rna_Window_screen_assign_poll");
+ RNA_def_property_flag(prop, PROP_NEVER_NULL | PROP_EDITABLE | PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, 0, "rna_workspace_screen_update");
+
+ prop = RNA_def_property(srna, "view_layer", PROP_POINTER, PROP_NONE);
+ RNA_def_property_struct_type(prop, "ViewLayer");
+ RNA_def_property_pointer_funcs(prop, "rna_Window_view_layer_get", "rna_Window_view_layer_set", NULL, NULL);
+ RNA_def_property_ui_text(prop, "Active View Layer", "The active workspace view layer showing in the window");
+ RNA_def_property_flag(prop, PROP_EDITABLE | PROP_NEVER_NULL | PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(prop, NC_SCREEN | ND_LAYER, "rna_Window_view_layer_update");
prop = RNA_def_property(srna, "x", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "posx");
diff --git a/source/blender/makesrna/intern/rna_wm_api.c b/source/blender/makesrna/intern/rna_wm_api.c
index cbbe50ccf03..82077051c18 100644
--- a/source/blender/makesrna/intern/rna_wm_api.c
+++ b/source/blender/makesrna/intern/rna_wm_api.c
@@ -71,6 +71,8 @@ const EnumPropertyItem rna_enum_window_cursor_items[] = {
#include "UI_interface.h"
#include "BKE_context.h"
+#include "WM_types.h"
+
static wmKeyMap *rna_keymap_active(wmKeyMap *km, bContext *C)
{
wmWindowManager *wm = CTX_wm_manager(C);
@@ -115,6 +117,37 @@ static void rna_event_timer_remove(struct wmWindowManager *wm, wmTimer *timer)
WM_event_remove_timer(wm, timer->win, timer);
}
+
+static wmManipulatorGroupType *wm_manipulatorgrouptype_find_for_add_remove(ReportList *reports, const char *idname)
+{
+ wmManipulatorGroupType *wgt = WM_manipulatorgrouptype_find(idname, true);
+ if (wgt == NULL) {
+ BKE_reportf(reports, RPT_ERROR, "Manipulator group type '%s' not found!", idname);
+ return NULL;
+ }
+ if (wgt->flag & WM_MANIPULATORGROUPTYPE_PERSISTENT) {
+ BKE_reportf(reports, RPT_ERROR, "Manipulator group '%s' has 'PERSISTENT' option set!", idname);
+ return NULL;
+ }
+ return wgt;
+}
+
+static void rna_manipulator_group_type_add(ReportList *reports, const char *idname)
+{
+ wmManipulatorGroupType *wgt = wm_manipulatorgrouptype_find_for_add_remove(reports, idname);
+ if (wgt != NULL) {
+ WM_manipulator_group_type_add_ptr(wgt);
+ }
+}
+
+static void rna_manipulator_group_type_remove(Main *bmain, ReportList *reports, const char *idname)
+{
+ wmManipulatorGroupType *wgt = wm_manipulatorgrouptype_find_for_add_remove(reports, idname);
+ if (wgt != NULL) {
+ WM_manipulator_group_type_remove_ptr(bmain, wgt);
+ }
+}
+
/* placeholder data for final implementation of a true progressbar */
static struct wmStaticProgress {
float min;
@@ -426,6 +459,18 @@ void RNA_api_wm(StructRNA *srna)
parm = RNA_def_pointer(func, "timer", "Timer", "", "");
RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
+ func = RNA_def_function(srna, "manipulator_group_type_add", "rna_manipulator_group_type_add");
+ RNA_def_function_ui_description(func, "Activate an existing widget group (when the persistent option isn't set)");
+ RNA_def_function_flag(func, FUNC_NO_SELF | FUNC_USE_REPORTS);
+ parm = RNA_def_string(func, "identifier", NULL, 0, "", "Manipulator group type name");
+ RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+
+ func = RNA_def_function(srna, "manipulator_group_type_remove", "rna_manipulator_group_type_remove");
+ RNA_def_function_ui_description(func, "De-activate a widget group (when the persistent option isn't set)");
+ RNA_def_function_flag(func, FUNC_NO_SELF | FUNC_USE_MAIN | FUNC_USE_REPORTS);
+ parm = RNA_def_string(func, "identifier", NULL, 0, "", "Manipulator group type name");
+ RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+
/* Progress bar interface */
func = RNA_def_function(srna, "progress_begin", "rna_progress_begin");
RNA_def_function_ui_description(func, "Start progress report");
diff --git a/source/blender/makesrna/intern/rna_wm_manipulator.c b/source/blender/makesrna/intern/rna_wm_manipulator.c
new file mode 100644
index 00000000000..d6de12407b0
--- /dev/null
+++ b/source/blender/makesrna/intern/rna_wm_manipulator.c
@@ -0,0 +1,1314 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/makesrna/intern/rna_wm_manipulator.c
+ * \ingroup RNA
+ */
+
+#include <stdlib.h>
+
+#include "DNA_screen_types.h"
+#include "DNA_space_types.h"
+#include "DNA_userdef_types.h"
+#include "DNA_view3d_types.h"
+#include "DNA_windowmanager_types.h"
+
+#include "BLI_utildefines.h"
+#include "BLI_string_utils.h"
+
+#include "BLT_translation.h"
+
+#include "RNA_access.h"
+#include "RNA_define.h"
+#include "RNA_enum_types.h"
+
+#include "rna_internal.h"
+
+#include "WM_types.h"
+
+#ifdef RNA_RUNTIME
+/* enum definitions */
+#endif /* RNA_RUNTIME */
+
+#ifdef RNA_RUNTIME
+
+#include <assert.h>
+
+#include "WM_api.h"
+
+#include "DNA_workspace_types.h"
+
+#include "ED_screen.h"
+
+#include "UI_interface.h"
+
+#include "BKE_global.h"
+#include "BKE_idprop.h"
+#include "BKE_workspace.h"
+
+#include "MEM_guardedalloc.h"
+
+#ifdef WITH_PYTHON
+# include "BPY_extern.h"
+#endif
+
+/* -------------------------------------------------------------------- */
+
+/** \name Manipulator API
+ * \{ */
+
+static void rna_manipulator_draw_cb(
+ const struct bContext *C, struct wmManipulator *mpr)
+{
+ extern FunctionRNA rna_Manipulator_draw_func;
+ wmManipulatorGroup *mgroup = mpr->parent_mgroup;
+ PointerRNA mpr_ptr;
+ ParameterList list;
+ FunctionRNA *func;
+ RNA_pointer_create(NULL, mpr->type->ext.srna, mpr, &mpr_ptr);
+ /* RNA_struct_find_function(&mpr_ptr, "draw"); */
+ func = &rna_Manipulator_draw_func;
+ RNA_parameter_list_create(&list, &mpr_ptr, func);
+ RNA_parameter_set_lookup(&list, "context", &C);
+ mgroup->type->ext.call((bContext *)C, &mpr_ptr, func, &list);
+ RNA_parameter_list_free(&list);
+}
+
+static void rna_manipulator_draw_select_cb(
+ const struct bContext *C, struct wmManipulator *mpr, int select_id)
+{
+ extern FunctionRNA rna_Manipulator_draw_select_func;
+ wmManipulatorGroup *mgroup = mpr->parent_mgroup;
+ PointerRNA mpr_ptr;
+ ParameterList list;
+ FunctionRNA *func;
+ RNA_pointer_create(NULL, mpr->type->ext.srna, mpr, &mpr_ptr);
+ /* RNA_struct_find_function(&mpr_ptr, "draw_select"); */
+ func = &rna_Manipulator_draw_select_func;
+ RNA_parameter_list_create(&list, &mpr_ptr, func);
+ RNA_parameter_set_lookup(&list, "context", &C);
+ RNA_parameter_set_lookup(&list, "select_id", &select_id);
+ mgroup->type->ext.call((bContext *)C, &mpr_ptr, func, &list);
+ RNA_parameter_list_free(&list);
+}
+
+static int rna_manipulator_test_select_cb(
+ struct bContext *C, struct wmManipulator *mpr, const struct wmEvent *event)
+{
+ extern FunctionRNA rna_Manipulator_test_select_func;
+ wmManipulatorGroup *mgroup = mpr->parent_mgroup;
+ PointerRNA mpr_ptr;
+ ParameterList list;
+ FunctionRNA *func;
+ RNA_pointer_create(NULL, mpr->type->ext.srna, mpr, &mpr_ptr);
+ /* RNA_struct_find_function(&mpr_ptr, "test_select"); */
+ func = &rna_Manipulator_test_select_func;
+ RNA_parameter_list_create(&list, &mpr_ptr, func);
+ RNA_parameter_set_lookup(&list, "context", &C);
+ RNA_parameter_set_lookup(&list, "event", &event);
+ mgroup->type->ext.call((bContext *)C, &mpr_ptr, func, &list);
+
+ void *ret;
+ RNA_parameter_get_lookup(&list, "intersect_id", &ret);
+ int intersect_id = *(int *)ret;
+
+ RNA_parameter_list_free(&list);
+ return intersect_id;
+}
+
+static int rna_manipulator_modal_cb(
+ struct bContext *C, struct wmManipulator *mpr, const struct wmEvent *event,
+ eWM_ManipulatorTweak tweak_flag)
+{
+ extern FunctionRNA rna_Manipulator_modal_func;
+ wmManipulatorGroup *mgroup = mpr->parent_mgroup;
+ PointerRNA mpr_ptr;
+ ParameterList list;
+ FunctionRNA *func;
+ const int tweak_flag_int = tweak_flag;
+ RNA_pointer_create(NULL, mpr->type->ext.srna, mpr, &mpr_ptr);
+ /* RNA_struct_find_function(&mpr_ptr, "modal"); */
+ func = &rna_Manipulator_modal_func;
+ RNA_parameter_list_create(&list, &mpr_ptr, func);
+ RNA_parameter_set_lookup(&list, "context", &C);
+ RNA_parameter_set_lookup(&list, "event", &event);
+ RNA_parameter_set_lookup(&list, "tweak", &tweak_flag_int);
+ mgroup->type->ext.call((bContext *)C, &mpr_ptr, func, &list);
+
+ void *ret;
+ RNA_parameter_get_lookup(&list, "result", &ret);
+ int ret_enum = *(int *)ret;
+
+ RNA_parameter_list_free(&list);
+ return ret_enum;
+}
+
+static void rna_manipulator_setup_cb(
+ struct wmManipulator *mpr)
+{
+ extern FunctionRNA rna_Manipulator_setup_func;
+ wmManipulatorGroup *mgroup = mpr->parent_mgroup;
+ PointerRNA mpr_ptr;
+ ParameterList list;
+ FunctionRNA *func;
+ RNA_pointer_create(NULL, mpr->type->ext.srna, mpr, &mpr_ptr);
+ /* RNA_struct_find_function(&mpr_ptr, "setup"); */
+ func = &rna_Manipulator_setup_func;
+ RNA_parameter_list_create(&list, &mpr_ptr, func);
+ mgroup->type->ext.call((bContext *)NULL, &mpr_ptr, func, &list);
+ RNA_parameter_list_free(&list);
+}
+
+
+static int rna_manipulator_invoke_cb(
+ struct bContext *C, struct wmManipulator *mpr, const struct wmEvent *event)
+{
+ extern FunctionRNA rna_Manipulator_invoke_func;
+ wmManipulatorGroup *mgroup = mpr->parent_mgroup;
+ PointerRNA mpr_ptr;
+ ParameterList list;
+ FunctionRNA *func;
+ RNA_pointer_create(NULL, mpr->type->ext.srna, mpr, &mpr_ptr);
+ /* RNA_struct_find_function(&mpr_ptr, "invoke"); */
+ func = &rna_Manipulator_invoke_func;
+ RNA_parameter_list_create(&list, &mpr_ptr, func);
+ RNA_parameter_set_lookup(&list, "context", &C);
+ RNA_parameter_set_lookup(&list, "event", &event);
+ mgroup->type->ext.call((bContext *)C, &mpr_ptr, func, &list);
+
+ void *ret;
+ RNA_parameter_get_lookup(&list, "result", &ret);
+ int ret_enum = *(int *)ret;
+
+ RNA_parameter_list_free(&list);
+ return ret_enum;
+}
+
+static void rna_manipulator_exit_cb(
+ struct bContext *C, struct wmManipulator *mpr, bool cancel)
+{
+ extern FunctionRNA rna_Manipulator_exit_func;
+ wmManipulatorGroup *mgroup = mpr->parent_mgroup;
+ PointerRNA mpr_ptr;
+ ParameterList list;
+ FunctionRNA *func;
+ RNA_pointer_create(NULL, mpr->type->ext.srna, mpr, &mpr_ptr);
+ /* RNA_struct_find_function(&mpr_ptr, "exit"); */
+ func = &rna_Manipulator_exit_func;
+ RNA_parameter_list_create(&list, &mpr_ptr, func);
+ RNA_parameter_set_lookup(&list, "context", &C);
+ {
+ int cancel_i = cancel;
+ RNA_parameter_set_lookup(&list, "cancel", &cancel_i);
+ }
+ mgroup->type->ext.call((bContext *)C, &mpr_ptr, func, &list);
+ RNA_parameter_list_free(&list);
+}
+
+static void rna_manipulator_select_refresh_cb(
+ struct wmManipulator *mpr)
+{
+ extern FunctionRNA rna_Manipulator_select_refresh_func;
+ wmManipulatorGroup *mgroup = mpr->parent_mgroup;
+ PointerRNA mpr_ptr;
+ ParameterList list;
+ FunctionRNA *func;
+ RNA_pointer_create(NULL, mpr->type->ext.srna, mpr, &mpr_ptr);
+ /* RNA_struct_find_function(&mpr_ptr, "select_refresh"); */
+ func = &rna_Manipulator_select_refresh_func;
+ RNA_parameter_list_create(&list, &mpr_ptr, func);
+ mgroup->type->ext.call((bContext *)NULL, &mpr_ptr, func, &list);
+ RNA_parameter_list_free(&list);
+}
+
+/* just to work around 'const char *' warning and to ensure this is a python op */
+static void rna_Manipulator_bl_idname_set(PointerRNA *ptr, const char *value)
+{
+ wmManipulator *data = ptr->data;
+ char *str = (char *)data->type->idname;
+ if (!str[0]) {
+ BLI_strncpy(str, value, MAX_NAME); /* utf8 already ensured */
+ }
+ else {
+ assert(!"setting the bl_idname on a non-builtin operator");
+ }
+}
+
+static wmManipulator *rna_ManipulatorProperties_find_operator(PointerRNA *ptr)
+{
+#if 0
+ wmWindowManager *wm = ptr->id.data;
+#endif
+
+ /* We could try workaruond this lookup, but not trivial. */
+ for (bScreen *screen = G.main->screen.first; screen; screen = screen->id.next) {
+ IDProperty *properties = ptr->data;
+ for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
+ for (ARegion *ar = sa->regionbase.first; ar; ar = ar->next) {
+ if (ar->manipulator_map) {
+ wmManipulatorMap *mmap = ar->manipulator_map;
+ for (wmManipulatorGroup *mgroup = WM_manipulatormap_group_list(mmap)->first;
+ mgroup;
+ mgroup = mgroup->next)
+ {
+ for (wmManipulator *mpr = mgroup->manipulators.first; mpr; mpr = mpr->next) {
+ if (mpr->properties == properties) {
+ return mpr;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return NULL;
+}
+
+static StructRNA *rna_ManipulatorProperties_refine(PointerRNA *ptr)
+{
+ wmManipulator *mpr = rna_ManipulatorProperties_find_operator(ptr);
+
+ if (mpr)
+ return mpr->type->srna;
+ else
+ return ptr->type;
+}
+
+static IDProperty *rna_ManipulatorProperties_idprops(PointerRNA *ptr, bool create)
+{
+ if (create && !ptr->data) {
+ IDPropertyTemplate val = {0};
+ ptr->data = IDP_New(IDP_GROUP, &val, "RNA_ManipulatorProperties group");
+ }
+
+ return ptr->data;
+}
+
+static PointerRNA rna_Manipulator_properties_get(PointerRNA *ptr)
+{
+ wmManipulator *mpr = ptr->data;
+ return rna_pointer_inherit_refine(ptr, mpr->type->srna, mpr->properties);
+}
+
+/* wmManipulator.float */
+#define RNA_MANIPULATOR_GENERIC_FLOAT_RW_DEF(func_id, member_id) \
+static float rna_Manipulator_##func_id##_get(PointerRNA *ptr) \
+{ \
+ wmManipulator *mpr = ptr->data; \
+ return mpr->member_id; \
+} \
+static void rna_Manipulator_##func_id##_set(PointerRNA *ptr, float value) \
+{ \
+ wmManipulator *mpr = ptr->data; \
+ mpr->member_id = value; \
+}
+#define RNA_MANIPULATOR_GENERIC_FLOAT_ARRAY_INDEX_RW_DEF(func_id, member_id, index) \
+static float rna_Manipulator_##func_id##_get(PointerRNA *ptr) \
+{ \
+ wmManipulator *mpr = ptr->data; \
+ return mpr->member_id[index]; \
+} \
+static void rna_Manipulator_##func_id##_set(PointerRNA *ptr, float value) \
+{ \
+ wmManipulator *mpr = ptr->data; \
+ mpr->member_id[index] = value; \
+}
+/* wmManipulator.float[len] */
+#define RNA_MANIPULATOR_GENERIC_FLOAT_ARRAY_RW_DEF(func_id, member_id, len) \
+static void rna_Manipulator_##func_id##_get(PointerRNA *ptr, float value[len]) \
+{ \
+ wmManipulator *mpr = ptr->data; \
+ memcpy(value, mpr->member_id, sizeof(float[len])); \
+} \
+static void rna_Manipulator_##func_id##_set(PointerRNA *ptr, const float value[len]) \
+{ \
+ wmManipulator *mpr = ptr->data; \
+ memcpy(mpr->member_id, value, sizeof(float[len])); \
+}
+
+/* wmManipulator.flag */
+#define RNA_MANIPULATOR_GENERIC_FLAG_RW_DEF(func_id, member_id, flag_value) \
+static int rna_Manipulator_##func_id##_get(PointerRNA *ptr) \
+{ \
+ wmManipulator *mpr = ptr->data; \
+ return (mpr->member_id & flag_value) != 0; \
+} \
+static void rna_Manipulator_##func_id##_set(PointerRNA *ptr, int value) \
+{ \
+ wmManipulator *mpr = ptr->data; \
+ SET_FLAG_FROM_TEST(mpr->member_id, value, flag_value); \
+}
+
+/* wmManipulator.flag (negative) */
+#define RNA_MANIPULATOR_GENERIC_FLAG_NEG_RW_DEF(func_id, member_id, flag_value) \
+static int rna_Manipulator_##func_id##_get(PointerRNA *ptr) \
+{ \
+ wmManipulator *mpr = ptr->data; \
+ return (mpr->member_id & flag_value) == 0; \
+} \
+static void rna_Manipulator_##func_id##_set(PointerRNA *ptr, int value) \
+{ \
+ wmManipulator *mpr = ptr->data; \
+ SET_FLAG_FROM_TEST(mpr->member_id, !value, flag_value); \
+}
+
+#define RNA_MANIPULATOR_FLAG_RO_DEF(func_id, member_id, flag_value) \
+static int rna_Manipulator_##func_id##_get(PointerRNA *ptr) \
+{ \
+ wmManipulator *mpr = ptr->data; \
+ return (mpr->member_id & flag_value) != 0; \
+}
+
+RNA_MANIPULATOR_GENERIC_FLOAT_ARRAY_RW_DEF(color, color, 3);
+RNA_MANIPULATOR_GENERIC_FLOAT_ARRAY_RW_DEF(color_hi, color_hi, 3);
+
+RNA_MANIPULATOR_GENERIC_FLOAT_ARRAY_INDEX_RW_DEF(alpha, color, 3);
+RNA_MANIPULATOR_GENERIC_FLOAT_ARRAY_INDEX_RW_DEF(alpha_hi, color_hi, 3);
+
+RNA_MANIPULATOR_GENERIC_FLOAT_ARRAY_RW_DEF(matrix_space, matrix_space, 16);
+RNA_MANIPULATOR_GENERIC_FLOAT_ARRAY_RW_DEF(matrix_basis, matrix_basis, 16);
+RNA_MANIPULATOR_GENERIC_FLOAT_ARRAY_RW_DEF(matrix_offset, matrix_offset, 16);
+
+static void rna_Manipulator_matrix_world_get(PointerRNA *ptr, float value[16])
+{
+ wmManipulator *mpr = ptr->data;
+ WM_manipulator_calc_matrix_final(mpr, (float (*)[4])value);
+}
+
+RNA_MANIPULATOR_GENERIC_FLOAT_RW_DEF(scale_basis, scale_basis);
+RNA_MANIPULATOR_GENERIC_FLOAT_RW_DEF(line_width, line_width);
+
+RNA_MANIPULATOR_GENERIC_FLAG_RW_DEF(flag_use_draw_hover, flag, WM_MANIPULATOR_DRAW_HOVER);
+RNA_MANIPULATOR_GENERIC_FLAG_RW_DEF(flag_use_draw_modal, flag, WM_MANIPULATOR_DRAW_MODAL);
+RNA_MANIPULATOR_GENERIC_FLAG_RW_DEF(flag_use_draw_value, flag, WM_MANIPULATOR_DRAW_VALUE);
+RNA_MANIPULATOR_GENERIC_FLAG_RW_DEF(flag_use_draw_offset_scale, flag, WM_MANIPULATOR_DRAW_OFFSET_SCALE);
+RNA_MANIPULATOR_GENERIC_FLAG_NEG_RW_DEF(flag_use_draw_scale, flag, WM_MANIPULATOR_DRAW_OFFSET_SCALE);
+RNA_MANIPULATOR_GENERIC_FLAG_RW_DEF(flag_hide, flag, WM_MANIPULATOR_HIDDEN);
+RNA_MANIPULATOR_GENERIC_FLAG_RW_DEF(flag_use_grab_cursor, flag, WM_MANIPULATOR_GRAB_CURSOR);
+
+/* wmManipulator.state */
+RNA_MANIPULATOR_FLAG_RO_DEF(state_is_highlight, state, WM_MANIPULATOR_STATE_HIGHLIGHT);
+RNA_MANIPULATOR_FLAG_RO_DEF(state_is_modal, state, WM_MANIPULATOR_STATE_MODAL);
+RNA_MANIPULATOR_FLAG_RO_DEF(state_select, state, WM_MANIPULATOR_STATE_SELECT);
+
+static void rna_Manipulator_state_select_set(struct PointerRNA *ptr, int value)
+{
+ wmManipulator *mpr = ptr->data;
+ wmManipulatorGroup *mgroup = mpr->parent_mgroup;
+ WM_manipulator_select_set(mgroup->parent_mmap, mpr, value);
+}
+
+static PointerRNA rna_Manipulator_group_get(PointerRNA *ptr)
+{
+ wmManipulator *mpr = ptr->data;
+ return rna_pointer_inherit_refine(ptr, &RNA_ManipulatorGroup, mpr->parent_mgroup);
+}
+
+#ifdef WITH_PYTHON
+
+static void rna_Manipulator_unregister(struct Main *bmain, StructRNA *type);
+void BPY_RNA_manipulator_wrapper(wmManipulatorType *wgt, void *userdata);
+
+static StructRNA *rna_Manipulator_register(
+ Main *bmain, ReportList *reports, void *data, const char *identifier,
+ StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free)
+{
+ struct {
+ char idname[MAX_NAME];
+ } temp_buffers;
+
+ wmManipulatorType dummywt = {NULL};
+ wmManipulator dummymnp = {NULL};
+ PointerRNA mnp_ptr;
+
+ /* Two sets of functions. */
+ int have_function[8];
+
+ /* setup dummy manipulator & manipulator type to store static properties in */
+ dummymnp.type = &dummywt;
+ dummywt.idname = temp_buffers.idname;
+ RNA_pointer_create(NULL, &RNA_Manipulator, &dummymnp, &mnp_ptr);
+
+ /* Clear so we can detect if it's left unset. */
+ temp_buffers.idname[0] = '\0';
+
+ /* validate the python class */
+ if (validate(&mnp_ptr, data, have_function) != 0)
+ return NULL;
+
+ if (strlen(identifier) >= sizeof(temp_buffers.idname)) {
+ BKE_reportf(reports, RPT_ERROR, "Registering manipulator class: '%s' is too long, maximum length is %d",
+ identifier, (int)sizeof(temp_buffers.idname));
+ return NULL;
+ }
+
+ /* check if we have registered this manipulator type before, and remove it */
+ {
+ const wmManipulatorType *wt = WM_manipulatortype_find(dummywt.idname, true);
+ if (wt && wt->ext.srna) {
+ rna_Manipulator_unregister(bmain, wt->ext.srna);
+ }
+ }
+ if (!RNA_struct_available_or_report(reports, dummywt.idname)) {
+ return NULL;
+ }
+
+ { /* allocate the idname */
+ /* For multiple strings see ManipulatorGroup. */
+ dummywt.idname = BLI_strdup(temp_buffers.idname);
+ }
+
+ /* create a new manipulator type */
+ dummywt.ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, dummywt.idname, &RNA_Manipulator);
+ /* manipulator properties are registered separately */
+ RNA_def_struct_flag(dummywt.ext.srna, STRUCT_NO_IDPROPERTIES);
+ dummywt.ext.data = data;
+ dummywt.ext.call = call;
+ dummywt.ext.free = free;
+
+ {
+ int i = 0;
+ dummywt.draw = (have_function[i++]) ? rna_manipulator_draw_cb : NULL;
+ dummywt.draw_select = (have_function[i++]) ? rna_manipulator_draw_select_cb : NULL;
+ dummywt.test_select = (have_function[i++]) ? rna_manipulator_test_select_cb : NULL;
+ dummywt.modal = (have_function[i++]) ? rna_manipulator_modal_cb : NULL;
+// dummywt.property_update = (have_function[i++]) ? rna_manipulator_property_update : NULL;
+// dummywt.position_get = (have_function[i++]) ? rna_manipulator_position_get : NULL;
+ dummywt.setup = (have_function[i++]) ? rna_manipulator_setup_cb : NULL;
+ dummywt.invoke = (have_function[i++]) ? rna_manipulator_invoke_cb : NULL;
+ dummywt.exit = (have_function[i++]) ? rna_manipulator_exit_cb : NULL;
+ dummywt.select_refresh = (have_function[i++]) ? rna_manipulator_select_refresh_cb : NULL;
+
+ BLI_assert(i == ARRAY_SIZE(have_function));
+ }
+
+ WM_manipulatortype_append_ptr(BPY_RNA_manipulator_wrapper, (void *)&dummywt);
+
+ /* update while blender is running */
+ WM_main_add_notifier(NC_SCREEN | NA_EDITED, NULL);
+
+ return dummywt.ext.srna;
+}
+
+static void rna_Manipulator_unregister(struct Main *bmain, StructRNA *type)
+{
+ wmManipulatorType *wt = RNA_struct_blender_type_get(type);
+
+ if (!wt)
+ return;
+
+ RNA_struct_free_extension(type, &wt->ext);
+ RNA_struct_free(&BLENDER_RNA, type);
+
+ WM_main_add_notifier(NC_SCREEN | NA_EDITED, NULL);
+
+ WM_manipulatortype_remove_ptr(NULL, bmain, wt);
+}
+
+static void **rna_Manipulator_instance(PointerRNA *ptr)
+{
+ wmManipulator *mpr = ptr->data;
+ return &mpr->py_instance;
+}
+
+#endif /* WITH_PYTHON */
+
+
+static StructRNA *rna_Manipulator_refine(PointerRNA *mnp_ptr)
+{
+ wmManipulator *mpr = mnp_ptr->data;
+ return (mpr->type && mpr->type->ext.srna) ? mpr->type->ext.srna : &RNA_Manipulator;
+}
+
+/** \} */
+
+/** \name Manipulator Group API
+ * \{ */
+
+static wmManipulator *rna_ManipulatorGroup_manipulator_new(
+ wmManipulatorGroup *mgroup, ReportList *reports, const char *idname)
+{
+ const wmManipulatorType *wt = WM_manipulatortype_find(idname, true);
+ if (wt == NULL) {
+ BKE_reportf(reports, RPT_ERROR, "ManipulatorType '%s' not known", idname);
+ return NULL;
+ }
+ wmManipulator *mpr = WM_manipulator_new_ptr(wt, mgroup, NULL);
+ return mpr;
+}
+
+static void rna_ManipulatorGroup_manipulator_remove(
+ wmManipulatorGroup *mgroup, bContext *C, wmManipulator *mpr)
+{
+ WM_manipulator_unlink(&mgroup->manipulators, mgroup->parent_mmap, mpr, C);
+}
+
+static void rna_ManipulatorGroup_manipulator_clear(
+ wmManipulatorGroup *mgroup, bContext *C)
+{
+ while (mgroup->manipulators.first) {
+ WM_manipulator_unlink(&mgroup->manipulators, mgroup->parent_mmap, mgroup->manipulators.first, C);
+ }
+}
+
+static void rna_ManipulatorGroup_name_get(PointerRNA *ptr, char *value)
+{
+ wmManipulatorGroup *mgroup = ptr->data;
+ strcpy(value, mgroup->type->name);
+}
+
+static int rna_ManipulatorGroup_name_length(PointerRNA *ptr)
+{
+ wmManipulatorGroup *mgroup = ptr->data;
+ return strlen(mgroup->type->name);
+}
+
+/* just to work around 'const char *' warning and to ensure this is a python op */
+static void rna_ManipulatorGroup_bl_idname_set(PointerRNA *ptr, const char *value)
+{
+ wmManipulatorGroup *data = ptr->data;
+ char *str = (char *)data->type->idname;
+ if (!str[0])
+ BLI_strncpy(str, value, MAX_NAME); /* utf8 already ensured */
+ else
+ assert(!"setting the bl_idname on a non-builtin operator");
+}
+
+static void rna_ManipulatorGroup_bl_label_set(PointerRNA *ptr, const char *value)
+{
+ wmManipulatorGroup *data = ptr->data;
+ char *str = (char *)data->type->name;
+ if (!str[0])
+ BLI_strncpy(str, value, MAX_NAME); /* utf8 already ensured */
+ else
+ assert(!"setting the bl_label on a non-builtin operator");
+}
+
+static int rna_ManipulatorGroup_has_reports_get(PointerRNA *ptr)
+{
+ wmManipulatorGroup *mgroup = ptr->data;
+ return (mgroup->reports && mgroup->reports->list.first);
+}
+
+#ifdef WITH_PYTHON
+
+static bool rna_manipulatorgroup_poll_cb(const bContext *C, wmManipulatorGroupType *wgt)
+{
+
+ extern FunctionRNA rna_ManipulatorGroup_poll_func;
+
+ PointerRNA ptr;
+ ParameterList list;
+ FunctionRNA *func;
+ void *ret;
+ int visible;
+
+ RNA_pointer_create(NULL, wgt->ext.srna, NULL, &ptr); /* dummy */
+ func = &rna_ManipulatorGroup_poll_func; /* RNA_struct_find_function(&ptr, "poll"); */
+
+ RNA_parameter_list_create(&list, &ptr, func);
+ RNA_parameter_set_lookup(&list, "context", &C);
+ wgt->ext.call((bContext *)C, &ptr, func, &list);
+
+ RNA_parameter_get_lookup(&list, "visible", &ret);
+ visible = *(int *)ret;
+
+ RNA_parameter_list_free(&list);
+
+ return visible;
+}
+
+static void rna_manipulatorgroup_setup_cb(const bContext *C, wmManipulatorGroup *mgroup)
+{
+ extern FunctionRNA rna_ManipulatorGroup_setup_func;
+
+ PointerRNA mgroup_ptr;
+ ParameterList list;
+ FunctionRNA *func;
+
+ RNA_pointer_create(NULL, mgroup->type->ext.srna, mgroup, &mgroup_ptr);
+ func = &rna_ManipulatorGroup_setup_func; /* RNA_struct_find_function(&wgroupr, "setup"); */
+
+ RNA_parameter_list_create(&list, &mgroup_ptr, func);
+ RNA_parameter_set_lookup(&list, "context", &C);
+ mgroup->type->ext.call((bContext *)C, &mgroup_ptr, func, &list);
+
+ RNA_parameter_list_free(&list);
+}
+
+static wmKeyMap *rna_manipulatorgroup_setup_keymap_cb(const wmManipulatorGroupType *wgt, wmKeyConfig *config)
+{
+ extern FunctionRNA rna_ManipulatorGroup_setup_keymap_func;
+ void *ret;
+
+ PointerRNA ptr;
+ ParameterList list;
+ FunctionRNA *func;
+
+ RNA_pointer_create(NULL, wgt->ext.srna, NULL, &ptr); /* dummy */
+ func = &rna_ManipulatorGroup_setup_keymap_func; /* RNA_struct_find_function(&wgroupr, "setup_keymap"); */
+
+ RNA_parameter_list_create(&list, &ptr, func);
+ RNA_parameter_set_lookup(&list, "keyconfig", &config);
+ wgt->ext.call(NULL, &ptr, func, &list);
+
+ RNA_parameter_get_lookup(&list, "keymap", &ret);
+ wmKeyMap *keymap = *(wmKeyMap **)ret;
+
+ RNA_parameter_list_free(&list);
+
+ return keymap;
+}
+
+static void rna_manipulatorgroup_refresh_cb(const bContext *C, wmManipulatorGroup *mgroup)
+{
+ extern FunctionRNA rna_ManipulatorGroup_refresh_func;
+
+ PointerRNA mgroup_ptr;
+ ParameterList list;
+ FunctionRNA *func;
+
+ RNA_pointer_create(NULL, mgroup->type->ext.srna, mgroup, &mgroup_ptr);
+ func = &rna_ManipulatorGroup_refresh_func; /* RNA_struct_find_function(&wgroupr, "refresh"); */
+
+ RNA_parameter_list_create(&list, &mgroup_ptr, func);
+ RNA_parameter_set_lookup(&list, "context", &C);
+ mgroup->type->ext.call((bContext *)C, &mgroup_ptr, func, &list);
+
+ RNA_parameter_list_free(&list);
+}
+
+static void rna_manipulatorgroup_draw_prepare_cb(const bContext *C, wmManipulatorGroup *mgroup)
+{
+ extern FunctionRNA rna_ManipulatorGroup_draw_prepare_func;
+
+ PointerRNA mgroup_ptr;
+ ParameterList list;
+ FunctionRNA *func;
+
+ RNA_pointer_create(NULL, mgroup->type->ext.srna, mgroup, &mgroup_ptr);
+ func = &rna_ManipulatorGroup_draw_prepare_func; /* RNA_struct_find_function(&wgroupr, "draw_prepare"); */
+
+ RNA_parameter_list_create(&list, &mgroup_ptr, func);
+ RNA_parameter_set_lookup(&list, "context", &C);
+ mgroup->type->ext.call((bContext *)C, &mgroup_ptr, func, &list);
+
+ RNA_parameter_list_free(&list);
+}
+
+void BPY_RNA_manipulatorgroup_wrapper(wmManipulatorGroupType *wgt, void *userdata);
+static void rna_ManipulatorGroup_unregister(struct Main *bmain, StructRNA *type);
+
+static StructRNA *rna_ManipulatorGroup_register(
+ Main *bmain, ReportList *reports, void *data, const char *identifier,
+ StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free)
+{
+ struct {
+ char name[MAX_NAME];
+ char idname[MAX_NAME];
+ } temp_buffers;
+
+ wmManipulatorGroupType dummywgt = {NULL};
+ wmManipulatorGroup dummywg = {NULL};
+ PointerRNA wgptr;
+
+ /* Two sets of functions. */
+ int have_function[5];
+
+ /* setup dummy manipulatorgroup & manipulatorgroup type to store static properties in */
+ dummywg.type = &dummywgt;
+ dummywgt.name = temp_buffers.name;
+ dummywgt.idname = temp_buffers.idname;
+
+ RNA_pointer_create(NULL, &RNA_ManipulatorGroup, &dummywg, &wgptr);
+
+ /* Clear so we can detect if it's left unset. */
+ temp_buffers.idname[0] = temp_buffers.name[0] = '\0';
+
+ /* validate the python class */
+ if (validate(&wgptr, data, have_function) != 0)
+ return NULL;
+
+ if (strlen(identifier) >= sizeof(temp_buffers.idname)) {
+ BKE_reportf(reports, RPT_ERROR, "Registering manipulatorgroup class: '%s' is too long, maximum length is %d",
+ identifier, (int)sizeof(temp_buffers.idname));
+ return NULL;
+ }
+
+ /* check if the area supports widgets */
+ const struct wmManipulatorMapType_Params wmap_params = {
+ .spaceid = dummywgt.mmap_params.spaceid,
+ .regionid = dummywgt.mmap_params.regionid,
+ };
+
+ wmManipulatorMapType *mmap_type = WM_manipulatormaptype_ensure(&wmap_params);
+ if (mmap_type == NULL) {
+ BKE_reportf(reports, RPT_ERROR, "Area type does not support manipulators");
+ return NULL;
+ }
+
+ /* check if we have registered this manipulatorgroup type before, and remove it */
+ {
+ wmManipulatorGroupType *wgt = WM_manipulatorgrouptype_find(dummywgt.idname, true);
+ if (wgt && wgt->ext.srna) {
+ rna_ManipulatorGroup_unregister(bmain, wgt->ext.srna);
+ }
+ }
+ if (!RNA_struct_available_or_report(reports, dummywgt.idname)) {
+ return NULL;
+ }
+
+ { /* allocate the idname */
+ const char *strings[] = {
+ temp_buffers.idname,
+ temp_buffers.name,
+ };
+ char *strings_table[ARRAY_SIZE(strings)];
+ BLI_string_join_array_by_sep_char_with_tableN('\0', strings_table, strings, ARRAY_SIZE(strings));
+
+ dummywgt.idname = strings_table[0]; /* allocated string stored here */
+ dummywgt.name = strings_table[1];
+ BLI_assert(ARRAY_SIZE(strings) == 2);
+ }
+
+ /* create a new manipulatorgroup type */
+ dummywgt.ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, dummywgt.idname, &RNA_ManipulatorGroup);
+ RNA_def_struct_flag(dummywgt.ext.srna, STRUCT_NO_IDPROPERTIES); /* manipulatorgroup properties are registered separately */
+ dummywgt.ext.data = data;
+ dummywgt.ext.call = call;
+ dummywgt.ext.free = free;
+
+ /* We used to register widget group types like this, now we do it similar to
+ * operator types. Thus we should be able to do the same as operator types now. */
+ dummywgt.poll = (have_function[0]) ? rna_manipulatorgroup_poll_cb : NULL;
+ dummywgt.setup_keymap = (have_function[1]) ? rna_manipulatorgroup_setup_keymap_cb : NULL;
+ dummywgt.setup = (have_function[2]) ? rna_manipulatorgroup_setup_cb : NULL;
+ dummywgt.refresh = (have_function[3]) ? rna_manipulatorgroup_refresh_cb : NULL;
+ dummywgt.draw_prepare = (have_function[4]) ? rna_manipulatorgroup_draw_prepare_cb : NULL;
+
+ wmManipulatorGroupType *wgt = WM_manipulatorgrouptype_append_ptr(
+ BPY_RNA_manipulatorgroup_wrapper, (void *)&dummywgt);
+
+ if (wgt->flag & WM_MANIPULATORGROUPTYPE_PERSISTENT) {
+ WM_manipulator_group_type_add_ptr_ex(wgt, mmap_type);
+
+ /* update while blender is running */
+ WM_main_add_notifier(NC_SCREEN | NA_EDITED, NULL);
+ }
+
+ return dummywgt.ext.srna;
+}
+
+static void rna_ManipulatorGroup_unregister(struct Main *bmain, StructRNA *type)
+{
+ wmManipulatorGroupType *wgt = RNA_struct_blender_type_get(type);
+
+ if (!wgt)
+ return;
+
+ RNA_struct_free_extension(type, &wgt->ext);
+ RNA_struct_free(&BLENDER_RNA, type);
+
+ WM_main_add_notifier(NC_SCREEN | NA_EDITED, NULL);
+
+ WM_manipulator_group_type_remove_ptr(bmain, wgt);
+}
+
+static void **rna_ManipulatorGroup_instance(PointerRNA *ptr)
+{
+ wmManipulatorGroup *mgroup = ptr->data;
+ return &mgroup->py_instance;
+}
+
+#endif /* WITH_PYTHON */
+
+static StructRNA *rna_ManipulatorGroup_refine(PointerRNA *mgroup_ptr)
+{
+ wmManipulatorGroup *mgroup = mgroup_ptr->data;
+ return (mgroup->type && mgroup->type->ext.srna) ? mgroup->type->ext.srna : &RNA_ManipulatorGroup;
+}
+
+static void rna_ManipulatorGroup_manipulators_begin(CollectionPropertyIterator *iter, PointerRNA *mgroup_ptr)
+{
+ wmManipulatorGroup *mgroup = mgroup_ptr->data;
+ rna_iterator_listbase_begin(iter, &mgroup->manipulators, NULL);
+}
+
+/** \} */
+
+
+#else /* RNA_RUNTIME */
+
+
+/* ManipulatorGroup.manipulators */
+static void rna_def_manipulators(BlenderRNA *brna, PropertyRNA *cprop)
+{
+ StructRNA *srna;
+
+ FunctionRNA *func;
+ PropertyRNA *parm;
+
+ RNA_def_property_srna(cprop, "Manipulators");
+ srna = RNA_def_struct(brna, "Manipulators", NULL);
+ RNA_def_struct_sdna(srna, "wmManipulatorGroup");
+ RNA_def_struct_ui_text(srna, "Manipulators", "Collection of manipulators");
+
+ func = RNA_def_function(srna, "new", "rna_ManipulatorGroup_manipulator_new");
+ RNA_def_function_ui_description(func, "Add manipulator");
+ RNA_def_function_flag(func, FUNC_USE_REPORTS);
+ RNA_def_string(func, "type", "Type", 0, "", "Manipulator identifier"); /* optional */
+ parm = RNA_def_pointer(func, "manipulator", "Manipulator", "", "New manipulator");
+ RNA_def_function_return(func, parm);
+
+ func = RNA_def_function(srna, "remove", "rna_ManipulatorGroup_manipulator_remove");
+ RNA_def_function_flag(func, FUNC_USE_CONTEXT);
+ RNA_def_function_ui_description(func, "Delete manipulator");
+ parm = RNA_def_pointer(func, "manipulator", "Manipulator", "", "New manipulator");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
+ RNA_def_parameter_clear_flags(parm, PROP_THICK_WRAP, 0);
+
+ func = RNA_def_function(srna, "clear", "rna_ManipulatorGroup_manipulator_clear");
+ RNA_def_function_flag(func, FUNC_USE_CONTEXT);
+ RNA_def_function_ui_description(func, "Delete all manipulators");
+}
+
+
+static void rna_def_manipulator(BlenderRNA *brna, PropertyRNA *cprop)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ FunctionRNA *func;
+ PropertyRNA *parm;
+
+ RNA_def_property_srna(cprop, "Manipulator");
+ srna = RNA_def_struct(brna, "Manipulator", NULL);
+ RNA_def_struct_sdna(srna, "wmManipulator");
+ RNA_def_struct_ui_text(srna, "Manipulator", "Collection of manipulators");
+ RNA_def_struct_refine_func(srna, "rna_Manipulator_refine");
+
+#ifdef WITH_PYTHON
+ RNA_def_struct_register_funcs(
+ srna,
+ "rna_Manipulator_register",
+ "rna_Manipulator_unregister",
+ "rna_Manipulator_instance");
+#endif
+ RNA_def_struct_translation_context(srna, BLT_I18NCONTEXT_OPERATOR_DEFAULT);
+
+ prop = RNA_def_property(srna, "properties", PROP_POINTER, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_NEVER_NULL);
+ RNA_def_property_struct_type(prop, "ManipulatorProperties");
+ RNA_def_property_ui_text(prop, "Properties", "");
+ RNA_def_property_pointer_funcs(prop, "rna_Manipulator_properties_get", NULL, NULL, NULL);
+
+ /* -------------------------------------------------------------------- */
+ /* Registerable Variables */
+
+ RNA_define_verify_sdna(0); /* not in sdna */
+
+ prop = RNA_def_property(srna, "bl_idname", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_sdna(prop, NULL, "type->idname");
+ RNA_def_property_string_maxlength(prop, MAX_NAME);
+ RNA_def_property_string_funcs(prop, NULL, NULL, "rna_Manipulator_bl_idname_set");
+ /* RNA_def_property_clear_flag(prop, PROP_EDITABLE); */
+ RNA_def_property_flag(prop, PROP_REGISTER);
+
+ RNA_define_verify_sdna(1); /* not in sdna */
+
+ /* wmManipulator.draw */
+ func = RNA_def_function(srna, "draw", NULL);
+ RNA_def_function_ui_description(func, "");
+ RNA_def_function_flag(func, FUNC_REGISTER);
+ parm = RNA_def_pointer(func, "context", "Context", "", "");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
+
+ /* wmManipulator.draw_select */
+ func = RNA_def_function(srna, "draw_select", NULL);
+ RNA_def_function_ui_description(func, "");
+ RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
+ parm = RNA_def_pointer(func, "context", "Context", "", "");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
+ parm = RNA_def_int(func, "select_id", 0, 0, INT_MAX, "", "", 0, INT_MAX);
+
+ /* wmManipulator.test_select */
+ func = RNA_def_function(srna, "test_select", NULL);
+ RNA_def_function_ui_description(func, "");
+ RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
+ parm = RNA_def_pointer(func, "context", "Context", "", "");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
+ parm = RNA_def_pointer(func, "event", "Event", "", "");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
+ parm = RNA_def_int(func, "intersect_id", 0, 0, INT_MAX, "", "", 0, INT_MAX);
+ RNA_def_function_return(func, parm);
+
+ /* wmManipulator.handler */
+ static EnumPropertyItem tweak_actions[] = {
+ {WM_MANIPULATOR_TWEAK_PRECISE, "PRECISE", 0, "Precise", ""},
+ {WM_MANIPULATOR_TWEAK_SNAP, "SNAP", 0, "Snap", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
+ func = RNA_def_function(srna, "modal", NULL);
+ RNA_def_function_ui_description(func, "");
+ RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL | FUNC_ALLOW_WRITE);
+ parm = RNA_def_pointer(func, "context", "Context", "", "");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
+ parm = RNA_def_pointer(func, "event", "Event", "", "");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
+ /* TODO, shuold be a enum-flag */
+ parm = RNA_def_enum_flag(func, "tweak", tweak_actions, 0, "Tweak", "");
+ RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+ parm = RNA_def_enum_flag(func, "result", rna_enum_operator_return_items, OPERATOR_CANCELLED, "result", "");
+ RNA_def_function_return(func, parm);
+ /* wmManipulator.property_update */
+ /* TODO */
+
+ /* wmManipulator.setup */
+ func = RNA_def_function(srna, "setup", NULL);
+ RNA_def_function_ui_description(func, "");
+ RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL | FUNC_ALLOW_WRITE);
+
+ /* wmManipulator.invoke */
+ func = RNA_def_function(srna, "invoke", NULL);
+ RNA_def_function_ui_description(func, "");
+ RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL | FUNC_ALLOW_WRITE);
+ parm = RNA_def_pointer(func, "context", "Context", "", "");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
+ parm = RNA_def_pointer(func, "event", "Event", "", "");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
+ parm = RNA_def_enum_flag(func, "result", rna_enum_operator_return_items, OPERATOR_CANCELLED, "result", "");
+ RNA_def_function_return(func, parm);
+
+ /* wmManipulator.exit */
+ func = RNA_def_function(srna, "exit", NULL);
+ RNA_def_function_ui_description(func, "");
+ RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL | FUNC_ALLOW_WRITE);
+ parm = RNA_def_pointer(func, "context", "Context", "", "");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
+ parm = RNA_def_boolean(func, "cancel", 0, "Cancel, otherwise confirm", "");
+ RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+
+ /* wmManipulator.cursor_get */
+ /* TODO */
+
+ /* wmManipulator.select_refresh */
+ func = RNA_def_function(srna, "select_refresh", NULL);
+ RNA_def_function_ui_description(func, "");
+ RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL | FUNC_ALLOW_WRITE);
+
+
+ /* -------------------------------------------------------------------- */
+ /* Instance Variables */
+
+ prop = RNA_def_property(srna, "group", PROP_POINTER, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_struct_type(prop, "ManipulatorGroup");
+ RNA_def_property_pointer_funcs(prop, "rna_Manipulator_group_get", NULL, NULL, NULL);
+ RNA_def_property_ui_text(prop, "", "Manipulator group this manipulator is a member of");
+
+ /* Color & Alpha */
+ prop = RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR);
+ RNA_def_property_array(prop, 3);
+ RNA_def_property_float_funcs(prop, "rna_Manipulator_color_get", "rna_Manipulator_color_set", NULL);
+
+ prop = RNA_def_property(srna, "alpha", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_ui_text(prop, "Alpha", "");
+ RNA_def_property_float_funcs(prop, "rna_Manipulator_alpha_get", "rna_Manipulator_alpha_set", NULL);
+ RNA_def_property_range(prop, 0.0f, 1.0f);
+ RNA_def_property_update(prop, NC_SCREEN | NA_EDITED, NULL);
+
+ /* Color & Alpha (highlight) */
+ prop = RNA_def_property(srna, "color_highlight", PROP_FLOAT, PROP_COLOR);
+ RNA_def_property_array(prop, 3);
+ RNA_def_property_float_funcs(prop, "rna_Manipulator_color_hi_get", "rna_Manipulator_color_hi_set", NULL);
+
+ prop = RNA_def_property(srna, "alpha_highlight", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_ui_text(prop, "Alpha", "");
+ RNA_def_property_float_funcs(prop, "rna_Manipulator_alpha_hi_get", "rna_Manipulator_alpha_hi_set", NULL);
+ RNA_def_property_range(prop, 0.0f, 1.0f);
+ RNA_def_property_update(prop, NC_SCREEN | NA_EDITED, NULL);
+
+ prop = RNA_def_property(srna, "matrix_space", PROP_FLOAT, PROP_MATRIX);
+ RNA_def_property_multi_array(prop, 2, rna_matrix_dimsize_4x4);
+ RNA_def_property_ui_text(prop, "Space Matrix", "");
+ RNA_def_property_float_funcs(prop, "rna_Manipulator_matrix_space_get", "rna_Manipulator_matrix_space_set", NULL);
+ RNA_def_property_update(prop, NC_SCREEN | NA_EDITED, NULL);
+
+ prop = RNA_def_property(srna, "matrix_basis", PROP_FLOAT, PROP_MATRIX);
+ RNA_def_property_multi_array(prop, 2, rna_matrix_dimsize_4x4);
+ RNA_def_property_ui_text(prop, "Basis Matrix", "");
+ RNA_def_property_float_funcs(prop, "rna_Manipulator_matrix_basis_get", "rna_Manipulator_matrix_basis_set", NULL);
+ RNA_def_property_update(prop, NC_SCREEN | NA_EDITED, NULL);
+
+ prop = RNA_def_property(srna, "matrix_offset", PROP_FLOAT, PROP_MATRIX);
+ RNA_def_property_multi_array(prop, 2, rna_matrix_dimsize_4x4);
+ RNA_def_property_ui_text(prop, "Offset Matrix", "");
+ RNA_def_property_float_funcs(prop, "rna_Manipulator_matrix_offset_get", "rna_Manipulator_matrix_offset_set", NULL);
+ RNA_def_property_update(prop, NC_SCREEN | NA_EDITED, NULL);
+
+ prop = RNA_def_property(srna, "matrix_world", PROP_FLOAT, PROP_MATRIX);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_multi_array(prop, 2, rna_matrix_dimsize_4x4);
+ RNA_def_property_ui_text(prop, "Final World Matrix", "");
+ RNA_def_property_float_funcs(prop, "rna_Manipulator_matrix_world_get", NULL, NULL);
+
+ prop = RNA_def_property(srna, "scale_basis", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_ui_text(prop, "Scale Basis", "");
+ RNA_def_property_float_funcs(prop, "rna_Manipulator_scale_basis_get", "rna_Manipulator_scale_basis_set", NULL);
+ RNA_def_property_range(prop, 0.0f, FLT_MAX);
+ RNA_def_property_update(prop, NC_SCREEN | NA_EDITED, NULL);
+
+ prop = RNA_def_property(srna, "line_width", PROP_FLOAT, PROP_PIXEL);
+ RNA_def_property_ui_text(prop, "Line Width", "");
+ RNA_def_property_float_funcs(prop, "rna_Manipulator_line_width_get", "rna_Manipulator_line_width_set", NULL);
+ RNA_def_property_range(prop, 0.0f, FLT_MAX);
+ RNA_def_property_update(prop, NC_SCREEN | NA_EDITED, NULL);
+
+ /* wmManipulator.flag */
+ /* WM_MANIPULATOR_HIDDEN */
+ prop = RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(
+ prop, "rna_Manipulator_flag_hide_get", "rna_Manipulator_flag_hide_set");
+ RNA_def_property_ui_text(prop, "Hide", "");
+ RNA_def_property_update(prop, NC_SCREEN | NA_EDITED, NULL);
+ /* WM_MANIPULATOR_GRAB_CURSOR */
+ prop = RNA_def_property(srna, "use_grab_cursor", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(
+ prop, "rna_Manipulator_flag_use_grab_cursor_get", "rna_Manipulator_flag_use_grab_cursor_set");
+ RNA_def_property_ui_text(prop, "Grab Cursor", "");
+ RNA_def_property_update(prop, NC_SCREEN | NA_EDITED, NULL);
+
+ /* WM_MANIPULATOR_DRAW_HOVER */
+ prop = RNA_def_property(srna, "use_draw_hover", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(
+ prop, "rna_Manipulator_flag_use_draw_hover_get", "rna_Manipulator_flag_use_draw_hover_set");
+ RNA_def_property_ui_text(prop, "Draw Hover", "");
+ RNA_def_property_update(prop, NC_SCREEN | NA_EDITED, NULL);
+ /* WM_MANIPULATOR_DRAW_MODAL */
+ prop = RNA_def_property(srna, "use_draw_modal", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(
+ prop, "rna_Manipulator_flag_use_draw_modal_get", "rna_Manipulator_flag_use_draw_modal_set");
+ RNA_def_property_ui_text(prop, "Draw Active", "Draw while dragging");
+ RNA_def_property_update(prop, NC_SCREEN | NA_EDITED, NULL);
+ /* WM_MANIPULATOR_DRAW_VALUE */
+ prop = RNA_def_property(srna, "use_draw_value", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(
+ prop, "rna_Manipulator_flag_use_draw_value_get", "rna_Manipulator_flag_use_draw_value_set");
+ RNA_def_property_ui_text(prop, "Draw Value", "Show an indicator for the current value while dragging");
+ RNA_def_property_update(prop, NC_SCREEN | NA_EDITED, NULL);
+ /* WM_MANIPULATOR_DRAW_OFFSET_SCALE */
+ prop = RNA_def_property(srna, "use_draw_offset_scale", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(
+ prop, "rna_Manipulator_flag_use_draw_offset_scale_get", "rna_Manipulator_flag_use_draw_offset_scale_set");
+ RNA_def_property_ui_text(prop, "Scale Offset", "Scale the offset matrix (use to apply screen-space offset)");
+ RNA_def_property_update(prop, NC_SCREEN | NA_EDITED, NULL);
+ /* WM_MANIPULATOR_DRAW_NO_SCALE (negated) */
+ prop = RNA_def_property(srna, "use_draw_scale", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(
+ prop, "rna_Manipulator_flag_use_draw_scale_get", "rna_Manipulator_flag_use_draw_scale_set");
+ RNA_def_property_ui_text(prop, "Scale", "Use scale when calculating the matrix");
+ RNA_def_property_update(prop, NC_SCREEN | NA_EDITED, NULL);
+
+ /* wmManipulator.state (readonly) */
+ /* WM_MANIPULATOR_STATE_HIGHLIGHT */
+ prop = RNA_def_property(srna, "is_highlight", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(prop, "rna_Manipulator_state_is_highlight_get", NULL);
+ RNA_def_property_ui_text(prop, "Highlight", "");
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ /* WM_MANIPULATOR_STATE_MODAL */
+ prop = RNA_def_property(srna, "is_modal", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(prop, "rna_Manipulator_state_is_modal_get", NULL);
+ RNA_def_property_ui_text(prop, "Highlight", "");
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ /* WM_MANIPULATOR_STATE_SELECT */
+ /* (note that setting is involved, needs to handle array) */
+ prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(prop, "rna_Manipulator_state_select_get", "rna_Manipulator_state_select_set");
+ RNA_def_property_ui_text(prop, "Select", "");
+
+ RNA_api_manipulator(srna);
+
+ srna = RNA_def_struct(brna, "ManipulatorProperties", NULL);
+ RNA_def_struct_ui_text(srna, "Manipulator Properties", "Input properties of an Manipulator");
+ RNA_def_struct_refine_func(srna, "rna_ManipulatorProperties_refine");
+ RNA_def_struct_idprops_func(srna, "rna_ManipulatorProperties_idprops");
+ RNA_def_struct_flag(srna, STRUCT_NO_DATABLOCK_IDPROPERTIES);
+}
+
+static void rna_def_manipulatorgroup(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ FunctionRNA *func;
+ PropertyRNA *parm;
+
+ srna = RNA_def_struct(brna, "ManipulatorGroup", NULL);
+ RNA_def_struct_ui_text(srna, "ManipulatorGroup", "Storage of an operator being executed, or registered after execution");
+ RNA_def_struct_sdna(srna, "wmManipulatorGroup");
+ RNA_def_struct_refine_func(srna, "rna_ManipulatorGroup_refine");
+#ifdef WITH_PYTHON
+ RNA_def_struct_register_funcs(
+ srna,
+ "rna_ManipulatorGroup_register",
+ "rna_ManipulatorGroup_unregister",
+ "rna_ManipulatorGroup_instance");
+#endif
+ RNA_def_struct_translation_context(srna, BLT_I18NCONTEXT_OPERATOR_DEFAULT);
+
+ /* -------------------------------------------------------------------- */
+ /* Registration */
+
+ RNA_define_verify_sdna(0); /* not in sdna */
+
+ prop = RNA_def_property(srna, "bl_idname", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_sdna(prop, NULL, "type->idname");
+ RNA_def_property_string_maxlength(prop, MAX_NAME);
+ RNA_def_property_string_funcs(prop, NULL, NULL, "rna_ManipulatorGroup_bl_idname_set");
+ RNA_def_property_flag(prop, PROP_REGISTER);
+ RNA_def_struct_name_property(srna, prop);
+
+ prop = RNA_def_property(srna, "bl_label", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_sdna(prop, NULL, "type->name");
+ RNA_def_property_string_maxlength(prop, MAX_NAME); /* else it uses the pointer size! */
+ RNA_def_property_string_funcs(prop, NULL, NULL, "rna_ManipulatorGroup_bl_label_set");
+ /* RNA_def_property_clear_flag(prop, PROP_EDITABLE); */
+ RNA_def_property_flag(prop, PROP_REGISTER);
+
+ prop = RNA_def_property(srna, "bl_space_type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "type->mmap_params.spaceid");
+ RNA_def_property_enum_items(prop, rna_enum_space_type_items);
+ RNA_def_property_flag(prop, PROP_REGISTER);
+ RNA_def_property_ui_text(prop, "Space type", "The space where the panel is going to be used in");
+
+ prop = RNA_def_property(srna, "bl_region_type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "type->mmap_params.regionid");
+ RNA_def_property_enum_items(prop, rna_enum_region_type_items);
+ RNA_def_property_flag(prop, PROP_REGISTER);
+ RNA_def_property_ui_text(prop, "Region Type", "The region where the panel is going to be used in");
+
+ /* bl_options */
+ static EnumPropertyItem manipulatorgroup_flag_items[] = {
+ {WM_MANIPULATORGROUPTYPE_3D, "3D", 0, "3D",
+ "Use in 3D viewport"},
+ {WM_MANIPULATORGROUPTYPE_SCALE, "SCALE", 0, "Scale",
+ "Scale to respect zoom (otherwise zoom independent draw size)"},
+ {WM_MANIPULATORGROUPTYPE_DEPTH_3D, "DEPTH_3D", 0, "Depth 3D",
+ "Supports culled depth by other objects in the view"},
+ {WM_MANIPULATORGROUPTYPE_SELECT, "SELECT", 0, "Select",
+ "Supports selection"},
+ {WM_MANIPULATORGROUPTYPE_PERSISTENT, "PERSISTENT", 0, "Persistent",
+ ""},
+ {WM_MANIPULATORGROUPTYPE_DRAW_MODAL_ALL, "SHOW_MODAL_ALL", 0, "Show Modal All",
+ "Show all while interacting"},
+ {0, NULL, 0, NULL, NULL}
+ };
+ prop = RNA_def_property(srna, "bl_options", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "type->flag");
+ RNA_def_property_enum_items(prop, manipulatorgroup_flag_items);
+ RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL | PROP_ENUM_FLAG);
+ RNA_def_property_ui_text(prop, "Options", "Options for this operator type");
+
+ RNA_define_verify_sdna(1); /* not in sdna */
+
+
+ /* Functions */
+
+ /* poll */
+ func = RNA_def_function(srna, "poll", NULL);
+ RNA_def_function_ui_description(func, "Test if the manipulator group can be called or not");
+ RNA_def_function_flag(func, FUNC_NO_SELF | FUNC_REGISTER_OPTIONAL);
+ RNA_def_function_return(func, RNA_def_boolean(func, "visible", 1, "", ""));
+ parm = RNA_def_pointer(func, "context", "Context", "", "");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
+
+ /* setup_keymap */
+ func = RNA_def_function(srna, "setup_keymap", NULL);
+ RNA_def_function_ui_description(
+ func,
+ "Initialize keymaps for this manipulator group, use fallback keymap when not present");
+ RNA_def_function_flag(func, FUNC_NO_SELF | FUNC_REGISTER_OPTIONAL);
+ parm = RNA_def_pointer(func, "keyconfig", "KeyConfig", "", "");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
+ /* return */
+ parm = RNA_def_pointer(func, "keymap", "KeyMap", "", "");
+ RNA_def_property_flag(parm, PROP_NEVER_NULL);
+ RNA_def_function_return(func, parm);
+
+ /* setup */
+ func = RNA_def_function(srna, "setup", NULL);
+ RNA_def_function_ui_description(func, "Create manipulators function for the manipulator group");
+ RNA_def_function_flag(func, FUNC_REGISTER);
+ parm = RNA_def_pointer(func, "context", "Context", "", "");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
+
+ /* refresh */
+ func = RNA_def_function(srna, "refresh", NULL);
+ RNA_def_function_ui_description(func, "Refresh data (called on common state changes such as selection)");
+ RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
+ parm = RNA_def_pointer(func, "context", "Context", "", "");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
+
+ func = RNA_def_function(srna, "draw_prepare", NULL);
+ RNA_def_function_ui_description(func, "Run before each redraw");
+ RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
+ parm = RNA_def_pointer(func, "context", "Context", "", "");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
+
+ /* -------------------------------------------------------------------- */
+ /* Instance Variables */
+
+ prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_string_funcs(prop, "rna_ManipulatorGroup_name_get", "rna_ManipulatorGroup_name_length", NULL);
+ RNA_def_property_ui_text(prop, "Name", "");
+
+ prop = RNA_def_property(srna, "has_reports", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE); /* this is 'virtual' property */
+ RNA_def_property_boolean_funcs(prop, "rna_ManipulatorGroup_has_reports_get", NULL);
+ RNA_def_property_ui_text(prop, "Has Reports",
+ "ManipulatorGroup has a set of reports (warnings and errors) from last execution");
+
+
+ RNA_define_verify_sdna(0); /* not in sdna */
+
+ prop = RNA_def_property(srna, "manipulators", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_collection_sdna(prop, NULL, "manipulators", NULL);
+ RNA_def_property_struct_type(prop, "Manipulator");
+ RNA_def_property_collection_funcs(
+ prop, "rna_ManipulatorGroup_manipulators_begin", "rna_iterator_listbase_next",
+ "rna_iterator_listbase_end", "rna_iterator_listbase_get",
+ NULL, NULL, NULL, NULL);
+
+ RNA_def_property_ui_text(prop, "Manipulators", "List of manipulators in the Manipulator Map");
+ rna_def_manipulator(brna, prop);
+ rna_def_manipulators(brna, prop);
+
+ RNA_define_verify_sdna(1); /* not in sdna */
+
+ RNA_api_manipulatorgroup(srna);
+}
+
+void RNA_def_wm_manipulator(BlenderRNA *brna)
+{
+ rna_def_manipulatorgroup(brna);
+}
+
+#endif /* RNA_RUNTIME */
diff --git a/source/blender/makesrna/intern/rna_wm_manipulator_api.c b/source/blender/makesrna/intern/rna_wm_manipulator_api.c
new file mode 100644
index 00000000000..c948f84e087
--- /dev/null
+++ b/source/blender/makesrna/intern/rna_wm_manipulator_api.c
@@ -0,0 +1,290 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/makesrna/intern/rna_wm_manipulator_api.c
+ * \ingroup RNA
+ */
+
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "BLI_utildefines.h"
+
+#include "BKE_report.h"
+
+#include "RNA_define.h"
+#include "RNA_enum_types.h"
+
+#include "DNA_windowmanager_types.h"
+
+#include "WM_api.h"
+
+#include "rna_internal.h" /* own include */
+
+#ifdef RNA_RUNTIME
+
+#include "UI_interface.h"
+#include "BKE_context.h"
+
+#include "ED_manipulator_library.h"
+
+static void rna_manipulator_draw_preset_box(
+ wmManipulator *mpr, float matrix[16], int select_id)
+{
+ ED_manipulator_draw_preset_box(mpr, (float (*)[4])matrix, select_id);
+}
+
+static void rna_manipulator_draw_preset_arrow(
+ wmManipulator *mpr, float matrix[16], int axis, int select_id)
+{
+ ED_manipulator_draw_preset_arrow(mpr, (float (*)[4])matrix, axis, select_id);
+}
+
+static void rna_manipulator_draw_preset_circle(
+ wmManipulator *mpr, float matrix[16], int axis, int select_id)
+{
+ ED_manipulator_draw_preset_circle(mpr, (float (*)[4])matrix, axis, select_id);
+}
+
+static void rna_manipulator_draw_preset_facemap(
+ wmManipulator *mpr, struct bContext *C, struct Object *ob, int facemap, int select_id)
+{
+ struct Scene *scene = CTX_data_scene(C);
+ ED_manipulator_draw_preset_facemap(C, mpr, scene, ob, facemap, select_id);
+}
+
+/* -------------------------------------------------------------------- */
+/** \name Manipulator Property Define
+ * \{ */
+
+static void rna_manipulator_target_set_prop(
+ wmManipulator *mpr, ReportList *reports, const char *target_propname,
+ PointerRNA *ptr, const char *propname, int index)
+{
+ const wmManipulatorPropertyType *mpr_prop_type =
+ WM_manipulatortype_target_property_find(mpr->type, target_propname);
+ if (mpr_prop_type == NULL) {
+ BKE_reportf(reports, RPT_ERROR, "Manipulator target property '%s.%s' not found",
+ mpr->type->idname, target_propname);
+ return;
+ }
+
+ PropertyRNA *prop = RNA_struct_find_property(ptr, propname);
+ if (prop == NULL) {
+ BKE_reportf(reports, RPT_ERROR, "Property '%s.%s' not found",
+ RNA_struct_identifier(ptr->type), target_propname);
+ return;
+ }
+
+ if (mpr_prop_type->data_type != RNA_property_type(prop)) {
+ const int manipulator_type_index = RNA_enum_from_value(rna_enum_property_type_items, mpr_prop_type->data_type);
+ const int prop_type_index = RNA_enum_from_value(rna_enum_property_type_items, RNA_property_type(prop));
+ BLI_assert((manipulator_type_index != -1) && (prop_type_index == -1));
+
+ BKE_reportf(reports, RPT_ERROR, "Manipulator target '%s.%s' expects '%s', '%s.%s' is '%s'",
+ mpr->type->idname, target_propname,
+ rna_enum_property_type_items[manipulator_type_index].identifier,
+ RNA_struct_identifier(ptr->type), propname,
+ rna_enum_property_type_items[prop_type_index].identifier);
+ return;
+ }
+
+ if (RNA_property_array_check(prop)) {
+ if (index == -1) {
+ const int prop_array_length = RNA_property_array_length(ptr, prop);
+ if (mpr_prop_type->array_length != prop_array_length) {
+ BKE_reportf(reports, RPT_ERROR,
+ "Manipulator target property '%s.%s' expects an array of length %d, found %d",
+ mpr->type->idname, target_propname,
+ mpr_prop_type->array_length,
+ prop_array_length);
+ return;
+ }
+ }
+ }
+ else {
+ if (mpr_prop_type->array_length != 1) {
+ BKE_reportf(reports, RPT_ERROR,
+ "Manipulator target property '%s.%s' expects an array of length %d",
+ mpr->type->idname, target_propname,
+ mpr_prop_type->array_length);
+ return;
+ }
+ }
+
+ if (index >= mpr_prop_type->array_length) {
+ BKE_reportf(reports, RPT_ERROR, "Manipulator target property '%s.%s', index %d must be below %d",
+ mpr->type->idname, target_propname, index, mpr_prop_type->array_length);
+ return;
+ }
+
+ WM_manipulator_target_property_def_rna_ptr(mpr, mpr_prop_type, ptr, prop, index);
+}
+
+static PointerRNA rna_manipulator_target_set_operator(
+ wmManipulator *mpr, ReportList *reports, const char *opname, int part_index)
+{
+ wmOperatorType *ot;
+
+ ot = WM_operatortype_find(opname, 0); /* print error next */
+ if (!ot || !ot->srna) {
+ BKE_reportf(reports, RPT_ERROR, "%s '%s'", ot ? "unknown operator" : "operator missing srna", opname);
+ return PointerRNA_NULL;
+ }
+
+ /* For the return value to be usable, we need 'PointerRNA.data' to be set. */
+ IDProperty *properties;
+ {
+ IDPropertyTemplate val = {0};
+ properties = IDP_New(IDP_GROUP, &val, "wmManipulatorProperties");
+ }
+
+ return *WM_manipulator_operator_set(mpr, part_index, ot, properties);
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Manipulator Property Access
+ * \{ */
+
+static int rna_manipulator_target_is_valid(
+ wmManipulator *mpr, ReportList *reports, const char *target_propname)
+{
+ wmManipulatorProperty *mpr_prop =
+ WM_manipulator_target_property_find(mpr, target_propname);
+ if (mpr_prop == NULL) {
+ BKE_reportf(reports, RPT_ERROR, "Manipulator target property '%s.%s' not found",
+ mpr->type->idname, target_propname);
+ return false;
+ }
+ return WM_manipulator_target_property_is_valid(mpr_prop);
+}
+
+/** \} */
+
+#else
+
+void RNA_api_manipulator(StructRNA *srna)
+{
+ /* Utility draw functions, since we don't expose new OpenGL drawing wrappers via Python yet.
+ * exactly how these should be exposed isn't totally clear.
+ * However it's probably good to have some high level API's for this anyway.
+ * Just note that this could be re-worked once tests are done.
+ */
+
+ FunctionRNA *func;
+ PropertyRNA *parm;
+
+ /* -------------------------------------------------------------------- */
+ /* Primitive Shapes */
+
+ /* draw_preset_box */
+ func = RNA_def_function(srna, "draw_preset_box", "rna_manipulator_draw_preset_box");
+ RNA_def_function_ui_description(func, "Draw a box");
+ parm = RNA_def_property(func, "matrix", PROP_FLOAT, PROP_MATRIX);
+ RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+ RNA_def_property_multi_array(parm, 2, rna_matrix_dimsize_4x4);
+ RNA_def_property_ui_text(parm, "", "The matrix to transform");
+ RNA_def_int(func, "select_id", -1, -1, INT_MAX, "Zero when not selecting", "", -1, INT_MAX);
+
+ /* draw_preset_box */
+ func = RNA_def_function(srna, "draw_preset_arrow", "rna_manipulator_draw_preset_arrow");
+ RNA_def_function_ui_description(func, "Draw a box");
+ parm = RNA_def_property(func, "matrix", PROP_FLOAT, PROP_MATRIX);
+ RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+ RNA_def_property_multi_array(parm, 2, rna_matrix_dimsize_4x4);
+ RNA_def_property_ui_text(parm, "", "The matrix to transform");
+ RNA_def_enum(func, "axis", rna_enum_object_axis_items, 2, "", "Arrow Orientation");
+ RNA_def_int(func, "select_id", -1, -1, INT_MAX, "Zero when not selecting", "", -1, INT_MAX);
+
+ func = RNA_def_function(srna, "draw_preset_circle", "rna_manipulator_draw_preset_circle");
+ RNA_def_function_ui_description(func, "Draw a box");
+ parm = RNA_def_property(func, "matrix", PROP_FLOAT, PROP_MATRIX);
+ RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+ RNA_def_property_multi_array(parm, 2, rna_matrix_dimsize_4x4);
+ RNA_def_property_ui_text(parm, "", "The matrix to transform");
+ RNA_def_enum(func, "axis", rna_enum_object_axis_items, 2, "", "Arrow Orientation");
+ RNA_def_int(func, "select_id", -1, -1, INT_MAX, "Zero when not selecting", "", -1, INT_MAX);
+
+ /* -------------------------------------------------------------------- */
+ /* Other Shapes */
+
+ /* draw_preset_facemap */
+ func = RNA_def_function(srna, "draw_preset_facemap", "rna_manipulator_draw_preset_facemap");
+ RNA_def_function_ui_description(func, "Draw the face-map of a mesh object");
+ RNA_def_function_flag(func, FUNC_USE_CONTEXT);
+ parm = RNA_def_pointer(func, "object", "Object", "", "Object");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
+ RNA_def_int(func, "facemap", 0, 0, INT_MAX, "Face map index", "", 0, INT_MAX);
+ RNA_def_int(func, "select_id", -1, -1, INT_MAX, "Zero when not selecting", "", -1, INT_MAX);
+
+
+ /* -------------------------------------------------------------------- */
+ /* Property API */
+
+ /* Define Properties */
+ /* note, 'target_set_handler' is defined in 'bpy_rna_manipulator.c' */
+ func = RNA_def_function(srna, "target_set_prop", "rna_manipulator_target_set_prop");
+ RNA_def_function_flag(func, FUNC_USE_REPORTS);
+ RNA_def_function_ui_description(func, "");
+ parm = RNA_def_string(func, "target", NULL, 0, "", "Target property");
+ RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+ /* similar to UILayout.prop */
+ parm = RNA_def_pointer(func, "data", "AnyType", "", "Data from which to take property");
+ RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
+ parm = RNA_def_string(func, "property", NULL, 0, "", "Identifier of property in data");
+ RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+ RNA_def_int(func, "index", -1, -1, INT_MAX, "", "", -1, INT_MAX); /* RNA_NO_INDEX == -1 */
+
+ func = RNA_def_function(srna, "target_set_operator", "rna_manipulator_target_set_operator");
+ RNA_def_function_flag(func, FUNC_USE_REPORTS);
+ RNA_def_function_ui_description(
+ func, "Operator to run when activating the manipulator "
+ "(overrides property targets)");
+ parm = RNA_def_string(func, "operator", NULL, 0, "", "Target operator");
+ RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+ RNA_def_int(func, "index", 0, 0, 255, "Part index", "", 0, 255);
+
+ /* similar to UILayout.operator */
+ parm = RNA_def_pointer(func, "properties", "OperatorProperties", "", "Operator properties to fill in");
+ RNA_def_parameter_flags(parm, 0, PARM_REQUIRED | PARM_RNAPTR);
+ RNA_def_function_return(func, parm);
+
+ /* Access Properties */
+ /* note, 'target_get', 'target_set' is defined in 'bpy_rna_manipulator.c' */
+ func = RNA_def_function(srna, "target_is_valid", "rna_manipulator_target_is_valid");
+ RNA_def_function_flag(func, FUNC_USE_REPORTS);
+ parm = RNA_def_string(func, "property", NULL, 0, "", "Property identifier");
+ RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+ RNA_def_function_ui_description(func, "");
+ parm = RNA_def_boolean(func, "result", 0, "", "");
+ RNA_def_function_return(func, parm);
+
+}
+
+
+void RNA_api_manipulatorgroup(StructRNA *UNUSED(srna))
+{
+ /* nothing yet */
+}
+
+#endif
diff --git a/source/blender/makesrna/intern/rna_workspace.c b/source/blender/makesrna/intern/rna_workspace.c
new file mode 100644
index 00000000000..5e0a4b97981
--- /dev/null
+++ b/source/blender/makesrna/intern/rna_workspace.c
@@ -0,0 +1,167 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/makesrna/intern/rna_workspace.c
+ * \ingroup RNA
+ */
+
+#include "RNA_define.h"
+#include "RNA_enum_types.h"
+#include "RNA_types.h"
+
+#include "BKE_workspace.h"
+
+#include "ED_render.h"
+
+#include "RE_engine.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "rna_internal.h"
+
+/* Allow accessing private members of DNA_workspace_types.h */
+#define DNA_PRIVATE_WORKSPACE_ALLOW
+#include "DNA_workspace_types.h"
+
+#ifdef RNA_RUNTIME
+
+#include "BLI_listbase.h"
+
+#include "BKE_global.h"
+
+#include "DNA_object_types.h"
+#include "DNA_screen_types.h"
+
+#include "RNA_access.h"
+
+
+void rna_workspace_screens_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
+{
+ WorkSpace *workspace = ptr->id.data;
+ rna_iterator_listbase_begin(iter, BKE_workspace_layouts_get(workspace), NULL);
+}
+
+static PointerRNA rna_workspace_screens_item_get(CollectionPropertyIterator *iter)
+{
+ WorkSpaceLayout *layout = rna_iterator_listbase_get(iter);
+ bScreen *screen = BKE_workspace_layout_screen_get(layout);
+
+ return rna_pointer_inherit_refine(&iter->parent, &RNA_Screen, screen);
+}
+
+void rna_workspace_transform_orientations_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
+{
+ WorkSpace *workspace = ptr->id.data;
+ rna_iterator_listbase_begin(iter, BKE_workspace_transform_orientations_get(workspace), NULL);
+}
+
+static PointerRNA rna_workspace_transform_orientations_item_get(CollectionPropertyIterator *iter)
+{
+ TransformOrientation *transform_orientation = rna_iterator_listbase_get(iter);
+ return rna_pointer_inherit_refine(&iter->parent, &RNA_TransformOrientation, transform_orientation);
+}
+
+#else /* RNA_RUNTIME */
+
+static void rna_def_workspace(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ srna = RNA_def_struct(brna, "WorkSpace", "ID");
+ RNA_def_struct_sdna(srna, "WorkSpace");
+ RNA_def_struct_ui_text(srna, "Workspace", "Workspace data-block, defining the working environment for the user");
+ /* TODO: real icon, just to show something */
+ RNA_def_struct_ui_icon(srna, ICON_RENDER_RESULT);
+
+ prop = RNA_def_property(srna, "screens", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_collection_sdna(prop, NULL, "layouts", NULL);
+ RNA_def_property_struct_type(prop, "Screen");
+ RNA_def_property_collection_funcs(prop, "rna_workspace_screens_begin", NULL, NULL,
+ "rna_workspace_screens_item_get", NULL, NULL, NULL, NULL);
+ RNA_def_property_ui_text(prop, "Screens", "Screen layouts of a workspace");
+
+ prop = RNA_def_property(srna, "tool_keymap", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_sdna(prop, NULL, "tool.keymap");
+ RNA_def_property_ui_text(prop, "Active Tool", "Currently active tool keymap");
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+
+ prop = RNA_def_property(srna, "tool_manipulator_group", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_sdna(prop, NULL, "tool.manipulator_group");
+ RNA_def_property_ui_text(prop, "Active Tool", "Currently active tool manipulator");
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+
+ prop = RNA_def_property(srna, "tool_index", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "tool.index");
+ RNA_def_property_ui_text(prop, "Active Tool Index", "Tool group index");
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+
+ prop = RNA_def_property(srna, "orientations", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_collection_sdna(prop, NULL, "transform_orientations", NULL);
+ RNA_def_property_struct_type(prop, "TransformOrientation");
+ RNA_def_property_collection_funcs(prop, "rna_workspace_transform_orientations_begin", NULL, NULL,
+ "rna_workspace_transform_orientations_item_get", NULL, NULL, NULL, NULL);
+ RNA_def_property_ui_text(prop, "Transform Orientations", "");
+
+ prop = RNA_def_property(srna, "object_mode", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_items(prop, rna_enum_object_mode_items);
+ RNA_def_property_ui_text(prop, "Mode", "Object interaction mode used in this window");
+
+ /* View Render */
+ prop = RNA_def_property(srna, "view_render", PROP_POINTER, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_NEVER_NULL);
+ RNA_def_property_struct_type(prop, "ViewRenderSettings");
+ RNA_def_property_ui_text(prop, "View Render", "");
+
+ /* Flags */
+ prop = RNA_def_property(srna, "use_scene_settings", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flags", WORKSPACE_USE_SCENE_SETTINGS);
+ RNA_def_property_ui_text(prop, "Scene Settings",
+ "Use scene settings instead of workspace settings");
+ RNA_def_property_update(prop, NC_SCREEN | ND_LAYER, NULL);
+}
+
+static void rna_def_transform_orientation(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ srna = RNA_def_struct(brna, "TransformOrientation", NULL);
+
+ prop = RNA_def_property(srna, "matrix", PROP_FLOAT, PROP_MATRIX);
+ RNA_def_property_float_sdna(prop, NULL, "mat");
+ RNA_def_property_multi_array(prop, 2, rna_matrix_dimsize_3x3);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+
+ prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
+ RNA_def_struct_name_property(srna, prop);
+ RNA_def_property_ui_text(prop, "Name", "Name of the custom transform orientation");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
+}
+
+void RNA_def_workspace(BlenderRNA *brna)
+{
+ rna_def_workspace(brna);
+ rna_def_transform_orientation(brna);
+}
+
+#endif /* RNA_RUNTIME */
diff --git a/source/blender/makesrna/intern/rna_world.c b/source/blender/makesrna/intern/rna_world.c
index 925bc52d06f..e78355ee426 100644
--- a/source/blender/makesrna/intern/rna_world.c
+++ b/source/blender/makesrna/intern/rna_world.c
@@ -43,10 +43,12 @@
#include "MEM_guardedalloc.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_main.h"
#include "BKE_texture.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
#include "ED_node.h"
#include "WM_api.h"
@@ -88,7 +90,7 @@ static void rna_World_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerR
{
World *wo = ptr->id.data;
- DAG_id_tag_update(&wo->id, 0);
+ DEG_id_tag_update(&wo->id, 0);
WM_main_add_notifier(NC_WORLD | ND_WORLD, wo);
}
@@ -97,7 +99,7 @@ static void rna_World_draw_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Poi
{
World *wo = ptr->id.data;
- DAG_id_tag_update(&wo->id, 0);
+ DEG_id_tag_update(&wo->id, 0);
WM_main_add_notifier(NC_WORLD | ND_WORLD_DRAW, wo);
}
#endif
@@ -106,7 +108,7 @@ static void rna_World_draw_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Poi
{
World *wo = ptr->id.data;
- DAG_id_tag_update(&wo->id, 0);
+ DEG_id_tag_update(&wo->id, 0);
WM_main_add_notifier(NC_WORLD | ND_WORLD_DRAW, wo);
WM_main_add_notifier(NC_OBJECT | ND_DRAW, NULL);
}
@@ -114,11 +116,15 @@ static void rna_World_draw_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Poi
static void rna_World_use_nodes_update(bContext *C, PointerRNA *ptr)
{
World *wrld = (World *)ptr->data;
+ Main *bmain = CTX_data_main(C);
+ Scene *scene = CTX_data_scene(C);
if (wrld->use_nodes && wrld->nodetree == NULL)
ED_node_shader_default(C, &wrld->id);
-
- rna_World_update(CTX_data_main(C), CTX_data_scene(C), ptr);
+
+ DEG_relations_tag_update(bmain);
+ rna_World_update(bmain, scene, ptr);
+ rna_World_draw_update(bmain, scene, ptr);
}
#else
@@ -390,9 +396,9 @@ static void rna_def_world_mist(BlenderRNA *brna)
PropertyRNA *prop;
static const EnumPropertyItem falloff_items[] = {
- {0, "QUADRATIC", 0, "Quadratic", "Use quadratic progression"},
- {1, "LINEAR", 0, "Linear", "Use linear progression"},
- {2, "INVERSE_QUADRATIC", 0, "Inverse Quadratic", "Use inverse quadratic progression"},
+ {WO_MIST_QUADRATIC, "QUADRATIC", 0, "Quadratic", "Use quadratic progression"},
+ {WO_MIST_LINEAR, "LINEAR", 0, "Linear", "Use linear progression"},
+ {WO_MIST_INVERSE_QUADRATIC, "INVERSE_QUADRATIC", 0, "Inverse Quadratic", "Use inverse quadratic progression"},
{0, NULL, 0, NULL, NULL}
};
diff --git a/source/blender/modifiers/CMakeLists.txt b/source/blender/modifiers/CMakeLists.txt
index a70612447d3..397a3263e22 100644
--- a/source/blender/modifiers/CMakeLists.txt
+++ b/source/blender/modifiers/CMakeLists.txt
@@ -113,10 +113,6 @@ set(SRC
intern/MOD_weightvg_util.h
)
-if(WITH_LEGACY_DEPSGRAPH)
- add_definitions(-DWITH_LEGACY_DEPSGRAPH)
-endif()
-
if(WITH_ALEMBIC)
add_definitions(-DWITH_ALEMBIC)
list(APPEND INC
@@ -151,4 +147,7 @@ if(WITH_OPENSUBDIV)
add_definitions(-DWITH_OPENSUBDIV)
endif()
+# So we can have special tricks in modifier system.
+add_definitions(${GL_DEFINITIONS})
+
blender_add_lib(bf_modifiers "${SRC}" "${INC}" "${INC_SYS}")
diff --git a/source/blender/modifiers/intern/MOD_armature.c b/source/blender/modifiers/intern/MOD_armature.c
index f2f76f13883..60c7998853e 100644
--- a/source/blender/modifiers/intern/MOD_armature.c
+++ b/source/blender/modifiers/intern/MOD_armature.c
@@ -50,8 +50,6 @@
#include "MEM_guardedalloc.h"
-#include "depsgraph_private.h"
-
#include "MOD_util.h"
@@ -99,22 +97,6 @@ static void foreachObjectLink(
walk(userData, ob, &amd->object, IDWALK_CB_NOP);
}
-static void updateDepgraph(ModifierData *md, DagForest *forest,
- struct Main *UNUSED(bmain),
- struct Scene *UNUSED(scene),
- Object *UNUSED(ob),
- DagNode *obNode)
-{
- ArmatureModifierData *amd = (ArmatureModifierData *) md;
-
- if (amd->object) {
- DagNode *curNode = dag_get_node(forest, amd->object);
-
- dag_add_relation(forest, curNode, obNode,
- DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "Armature Modifier");
- }
-}
-
static void updateDepsgraph(ModifierData *md,
struct Main *UNUSED(bmain),
struct Scene *UNUSED(scene),
@@ -128,8 +110,8 @@ static void updateDepsgraph(ModifierData *md,
}
}
-static void deformVerts(ModifierData *md, Object *ob,
- DerivedMesh *derivedData,
+static void deformVerts(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx),
+ Object *ob, DerivedMesh *derivedData,
float (*vertexCos)[3],
int numVerts,
ModifierApplyFlag UNUSED(flag))
@@ -149,7 +131,7 @@ static void deformVerts(ModifierData *md, Object *ob,
}
static void deformVertsEM(
- ModifierData *md, Object *ob, struct BMEditMesh *em,
+ ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx), Object *ob, struct BMEditMesh *em,
DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
{
ArmatureModifierData *amd = (ArmatureModifierData *) md;
@@ -172,7 +154,7 @@ static void deformVertsEM(
}
static void deformMatricesEM(
- ModifierData *md, Object *ob, struct BMEditMesh *em,
+ ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx), Object *ob, struct BMEditMesh *em,
DerivedMesh *derivedData, float (*vertexCos)[3],
float (*defMats)[3][3], int numVerts)
{
@@ -187,7 +169,7 @@ static void deformMatricesEM(
if (!derivedData) dm->release(dm);
}
-static void deformMatrices(ModifierData *md, Object *ob, DerivedMesh *derivedData,
+static void deformMatrices(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx), Object *ob, DerivedMesh *derivedData,
float (*vertexCos)[3], float (*defMats)[3][3], int numVerts)
{
ArmatureModifierData *amd = (ArmatureModifierData *) md;
@@ -221,7 +203,6 @@ ModifierTypeInfo modifierType_Armature = {
/* requiredDataMask */ requiredDataMask,
/* freeData */ NULL,
/* isDisabled */ isDisabled,
- /* updateDepgraph */ updateDepgraph,
/* updateDepsgraph */ updateDepsgraph,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_array.c b/source/blender/modifiers/intern/MOD_array.c
index 8eda1653956..91501e539c0 100644
--- a/source/blender/modifiers/intern/MOD_array.c
+++ b/source/blender/modifiers/intern/MOD_array.c
@@ -54,13 +54,7 @@
#include "MOD_util.h"
-#include "depsgraph_private.h"
-
-/* Due to cyclic dependencies it's possible that curve used for
- * deformation here is not evaluated at the time of evaluating
- * this modifier.
- */
-#define CYCLIC_DEPENDENCY_WORKAROUND
+#include "DEG_depsgraph.h"
static void initData(ModifierData *md)
{
@@ -102,40 +96,6 @@ static void foreachObjectLink(
walk(userData, ob, &amd->offset_ob, IDWALK_CB_NOP);
}
-static void updateDepgraph(ModifierData *md, DagForest *forest,
- struct Main *UNUSED(bmain),
- struct Scene *UNUSED(scene),
- Object *UNUSED(ob), DagNode *obNode)
-{
- ArrayModifierData *amd = (ArrayModifierData *) md;
-
- if (amd->start_cap) {
- DagNode *curNode = dag_get_node(forest, amd->start_cap);
-
- dag_add_relation(forest, curNode, obNode,
- DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "Array Modifier");
- }
- if (amd->end_cap) {
- DagNode *curNode = dag_get_node(forest, amd->end_cap);
-
- dag_add_relation(forest, curNode, obNode,
- DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "Array Modifier");
- }
- if (amd->curve_ob) {
- DagNode *curNode = dag_get_node(forest, amd->curve_ob);
- curNode->eval_flags |= DAG_EVAL_NEED_CURVE_PATH;
-
- dag_add_relation(forest, curNode, obNode,
- DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "Array Modifier");
- }
- if (amd->offset_ob) {
- DagNode *curNode = dag_get_node(forest, amd->offset_ob);
-
- dag_add_relation(forest, curNode, obNode,
- DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "Array Modifier");
- }
-}
-
static void updateDepsgraph(ModifierData *md,
struct Main *UNUSED(bmain),
struct Scene *UNUSED(scene),
@@ -390,8 +350,7 @@ static void dm_merge_transform(
}
static DerivedMesh *arrayModifier_doArray(
- ArrayModifierData *amd,
- Scene *scene, Object *ob, DerivedMesh *dm,
+ ArrayModifierData *amd, Object *ob, DerivedMesh *dm,
ModifierApplyFlag flag)
{
const float eps = 1e-6f;
@@ -494,12 +453,6 @@ static DerivedMesh *arrayModifier_doArray(
if (amd->fit_type == MOD_ARR_FITCURVE && amd->curve_ob) {
Curve *cu = amd->curve_ob->data;
if (cu) {
-#ifdef CYCLIC_DEPENDENCY_WORKAROUND
- if (amd->curve_ob->curve_cache == NULL) {
- BKE_displist_make_curveTypes(scene, amd->curve_ob, false);
- }
-#endif
-
if (amd->curve_ob->curve_cache && amd->curve_ob->curve_cache->path) {
float scale_fac = mat4_to_scale(amd->curve_ob->obmat);
length = scale_fac * amd->curve_ob->curve_cache->path->totdist;
@@ -779,12 +732,12 @@ static DerivedMesh *arrayModifier_doArray(
}
-static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
- DerivedMesh *dm,
+static DerivedMesh *applyModifier(ModifierData *md, const EvaluationContext *UNUSED(eval_ctx),
+ Object *ob, DerivedMesh *dm,
ModifierApplyFlag flag)
{
ArrayModifierData *amd = (ArrayModifierData *) md;
- return arrayModifier_doArray(amd, md->scene, ob, dm, flag);
+ return arrayModifier_doArray(amd, ob, dm, flag);
}
@@ -810,7 +763,6 @@ ModifierTypeInfo modifierType_Array = {
/* requiredDataMask */ NULL,
/* freeData */ NULL,
/* isDisabled */ NULL,
- /* updateDepgraph */ updateDepgraph,
/* updateDepsgraph */ updateDepsgraph,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_bevel.c b/source/blender/modifiers/intern/MOD_bevel.c
index 93dc0203f83..35b8a3fd9cb 100644
--- a/source/blender/modifiers/intern/MOD_bevel.c
+++ b/source/blender/modifiers/intern/MOD_bevel.c
@@ -86,8 +86,8 @@ static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
/*
* This calls the new bevel code (added since 2.64)
*/
-static DerivedMesh *applyModifier(ModifierData *md, struct Object *ob,
- DerivedMesh *dm,
+static DerivedMesh *applyModifier(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx),
+ struct Object *ob, DerivedMesh *dm,
ModifierApplyFlag UNUSED(flag))
{
DerivedMesh *result;
@@ -205,7 +205,6 @@ ModifierTypeInfo modifierType_Bevel = {
/* requiredDataMask */ requiredDataMask,
/* freeData */ NULL,
/* isDisabled */ NULL,
- /* updateDepgraph */ NULL,
/* updateDepsgraph */ NULL,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ dependsOnNormals,
diff --git a/source/blender/modifiers/intern/MOD_boolean.c b/source/blender/modifiers/intern/MOD_boolean.c
index 2a6bf108f25..7f79c941770 100644
--- a/source/blender/modifiers/intern/MOD_boolean.c
+++ b/source/blender/modifiers/intern/MOD_boolean.c
@@ -45,8 +45,6 @@
#include "BKE_library_query.h"
#include "BKE_modifier.h"
-#include "depsgraph_private.h"
-
#include "MOD_util.h"
@@ -97,22 +95,6 @@ static void foreachObjectLink(
walk(userData, ob, &bmd->object, IDWALK_CB_NOP);
}
-static void updateDepgraph(ModifierData *md, DagForest *forest,
- struct Main *UNUSED(bmain),
- struct Scene *UNUSED(scene),
- Object *UNUSED(ob),
- DagNode *obNode)
-{
- BooleanModifierData *bmd = (BooleanModifierData *) md;
-
- if (bmd->object) {
- DagNode *curNode = dag_get_node(forest, bmd->object);
-
- dag_add_relation(forest, curNode, obNode,
- DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "Boolean Modifier");
- }
-}
-
static void updateDepsgraph(ModifierData *md,
struct Main *UNUSED(bmain),
struct Scene *UNUSED(scene),
@@ -188,7 +170,7 @@ static int bm_face_isect_pair(BMFace *f, void *UNUSED(user_data))
}
static DerivedMesh *applyModifier(
- ModifierData *md, Object *ob,
+ ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx), Object *ob,
DerivedMesh *dm,
ModifierApplyFlag flag)
{
@@ -385,7 +367,6 @@ ModifierTypeInfo modifierType_Boolean = {
/* requiredDataMask */ requiredDataMask,
/* freeData */ NULL,
/* isDisabled */ isDisabled,
- /* updateDepgraph */ updateDepgraph,
/* updateDepsgraph */ updateDepsgraph,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_build.c b/source/blender/modifiers/intern/MOD_build.c
index 62da8b8ffea..7a52ede8838 100644
--- a/source/blender/modifiers/intern/MOD_build.c
+++ b/source/blender/modifiers/intern/MOD_build.c
@@ -75,8 +75,8 @@ static bool dependsOnTime(ModifierData *UNUSED(md))
return true;
}
-static DerivedMesh *applyModifier(ModifierData *md, Object *UNUSED(ob),
- DerivedMesh *derivedData,
+static DerivedMesh *applyModifier(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx),
+ Object *UNUSED(ob), DerivedMesh *derivedData,
ModifierApplyFlag UNUSED(flag))
{
DerivedMesh *dm = derivedData;
@@ -324,7 +324,6 @@ ModifierTypeInfo modifierType_Build = {
/* requiredDataMask */ NULL,
/* freeData */ NULL,
/* isDisabled */ NULL,
- /* updateDepgraph */ NULL,
/* updateDepsgraph */ NULL,
/* dependsOnTime */ dependsOnTime,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_cast.c b/source/blender/modifiers/intern/MOD_cast.c
index ddcf1852dc6..93a5b9607bf 100644
--- a/source/blender/modifiers/intern/MOD_cast.c
+++ b/source/blender/modifiers/intern/MOD_cast.c
@@ -45,9 +45,6 @@
#include "BKE_library_query.h"
#include "BKE_modifier.h"
-
-#include "depsgraph_private.h"
-
#include "MOD_util.h"
static void initData(ModifierData *md)
@@ -105,22 +102,6 @@ static void foreachObjectLink(
walk(userData, ob, &cmd->object, IDWALK_CB_NOP);
}
-static void updateDepgraph(ModifierData *md, DagForest *forest,
- struct Main *UNUSED(bmain),
- struct Scene *UNUSED(scene),
- Object *UNUSED(ob),
- DagNode *obNode)
-{
- CastModifierData *cmd = (CastModifierData *) md;
-
- if (cmd->object) {
- DagNode *curNode = dag_get_node(forest, cmd->object);
-
- dag_add_relation(forest, curNode, obNode, DAG_RL_OB_DATA,
- "Cast Modifier");
- }
-}
-
static void updateDepsgraph(ModifierData *md,
struct Main *UNUSED(bmain),
struct Scene *UNUSED(scene),
@@ -452,8 +433,8 @@ static void cuboid_do(
}
}
-static void deformVerts(ModifierData *md, Object *ob,
- DerivedMesh *derivedData,
+static void deformVerts(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx),
+ Object *ob, DerivedMesh *derivedData,
float (*vertexCos)[3],
int numVerts,
ModifierApplyFlag UNUSED(flag))
@@ -475,7 +456,8 @@ static void deformVerts(ModifierData *md, Object *ob,
}
static void deformVertsEM(
- ModifierData *md, Object *ob, struct BMEditMesh *editData,
+ ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx),
+ Object *ob, struct BMEditMesh *editData,
DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
{
DerivedMesh *dm = get_dm(ob, editData, derivedData, NULL, false, false);
@@ -513,7 +495,6 @@ ModifierTypeInfo modifierType_Cast = {
/* requiredDataMask */ requiredDataMask,
/* freeData */ NULL,
/* isDisabled */ isDisabled,
- /* updateDepgraph */ updateDepgraph,
/* updateDepsgraph */ updateDepsgraph,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_cloth.c b/source/blender/modifiers/intern/MOD_cloth.c
index e8c39770a14..b234cc63228 100644
--- a/source/blender/modifiers/intern/MOD_cloth.c
+++ b/source/blender/modifiers/intern/MOD_cloth.c
@@ -43,7 +43,6 @@
#include "BLI_utildefines.h"
-
#include "BKE_cloth.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_effect.h"
@@ -53,8 +52,6 @@
#include "BKE_modifier.h"
#include "BKE_pointcache.h"
-#include "depsgraph_private.h"
-
#include "MOD_util.h"
static void initData(ModifierData *md)
@@ -72,7 +69,7 @@ static void initData(ModifierData *md)
cloth_init(clmd);
}
-static void deformVerts(ModifierData *md, Object *ob, DerivedMesh *derivedData, float (*vertexCos)[3],
+static void deformVerts(ModifierData *md, const struct EvaluationContext *eval_ctx, Object *ob, DerivedMesh *derivedData, float (*vertexCos)[3],
int numVerts, ModifierApplyFlag UNUSED(flag))
{
DerivedMesh *dm;
@@ -112,31 +109,11 @@ static void deformVerts(ModifierData *md, Object *ob, DerivedMesh *derivedData,
CDDM_apply_vert_coords(dm, vertexCos);
- clothModifier_do(clmd, md->scene, ob, dm, vertexCos);
+ clothModifier_do(clmd, eval_ctx, md->scene, ob, dm, vertexCos);
dm->release(dm);
}
-static void updateDepgraph(ModifierData *md, DagForest *forest,
- struct Main *UNUSED(bmain),
- Scene *scene, Object *ob, DagNode *obNode)
-{
- ClothModifierData *clmd = (ClothModifierData *) md;
-
- if (clmd) {
- /* Actual code uses get_collisionobjects */
-#ifdef WITH_LEGACY_DEPSGRAPH
- dag_add_collision_relations(forest, scene, ob, obNode, clmd->coll_parms->group, ob->lay|scene->lay, eModifierType_Collision, NULL, true, "Cloth Collision");
- dag_add_forcefield_relations(forest, scene, ob, obNode, clmd->sim_parms->effector_weights, true, 0, "Cloth Field");
-#else
- (void)forest;
- (void)scene;
- (void)ob;
- (void)obNode;
-#endif
- }
-}
-
static void updateDepsgraph(ModifierData *md,
struct Main *UNUSED(bmain),
struct Scene *scene,
@@ -146,7 +123,7 @@ static void updateDepsgraph(ModifierData *md,
ClothModifierData *clmd = (ClothModifierData *)md;
if (clmd != NULL) {
/* Actual code uses get_collisionobjects */
- DEG_add_collision_relations(node, scene, ob, clmd->coll_parms->group, ob->lay|scene->lay, eModifierType_Collision, NULL, true, "Cloth Collision");
+ DEG_add_collision_relations(node, scene, ob, clmd->coll_parms->group, eModifierType_Collision, NULL, true, "Cloth Collision");
DEG_add_forcefield_relations(node, scene, ob, clmd->sim_parms->effector_weights, true, 0, "Cloth Field");
}
@@ -262,7 +239,6 @@ ModifierTypeInfo modifierType_Cloth = {
/* requiredDataMask */ requiredDataMask,
/* freeData */ freeData,
/* isDisabled */ NULL,
- /* updateDepgraph */ updateDepgraph,
/* updateDepsgraph */ updateDepsgraph,
/* dependsOnTime */ dependsOnTime,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_collision.c b/source/blender/modifiers/intern/MOD_collision.c
index 0a15799f61a..d2ecbaeaafe 100644
--- a/source/blender/modifiers/intern/MOD_collision.c
+++ b/source/blender/modifiers/intern/MOD_collision.c
@@ -98,8 +98,8 @@ static bool dependsOnTime(ModifierData *UNUSED(md))
return true;
}
-static void deformVerts(ModifierData *md, Object *ob,
- DerivedMesh *derivedData,
+static void deformVerts(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx),
+ Object *ob, DerivedMesh *derivedData,
float (*vertexCos)[3],
int UNUSED(numVerts),
ModifierApplyFlag UNUSED(flag))
@@ -264,7 +264,6 @@ ModifierTypeInfo modifierType_Collision = {
/* requiredDataMask */ NULL,
/* freeData */ freeData,
/* isDisabled */ NULL,
- /* updateDepgraph */ NULL,
/* updateDepsgraph */ NULL,
/* dependsOnTime */ dependsOnTime,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_correctivesmooth.c b/source/blender/modifiers/intern/MOD_correctivesmooth.c
index 08f4588df87..d95f0ae9286 100644
--- a/source/blender/modifiers/intern/MOD_correctivesmooth.c
+++ b/source/blender/modifiers/intern/MOD_correctivesmooth.c
@@ -713,7 +713,7 @@ error:
static void deformVerts(
- ModifierData *md, Object *ob, DerivedMesh *derivedData,
+ ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx), Object *ob, DerivedMesh *derivedData,
float (*vertexCos)[3], int numVerts, ModifierApplyFlag UNUSED(flag))
{
DerivedMesh *dm = get_dm(ob, NULL, derivedData, NULL, false, false);
@@ -727,7 +727,7 @@ static void deformVerts(
static void deformVertsEM(
- ModifierData *md, Object *ob, struct BMEditMesh *editData,
+ ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx), Object *ob, struct BMEditMesh *editData,
DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
{
DerivedMesh *dm = get_dm(ob, editData, derivedData, NULL, false, false);
@@ -759,7 +759,6 @@ ModifierTypeInfo modifierType_CorrectiveSmooth = {
/* requiredDataMask */ requiredDataMask,
/* freeData */ freeData,
/* isDisabled */ NULL,
- /* updateDepgraph */ NULL,
/* updateDepsgraph */ NULL,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_curve.c b/source/blender/modifiers/intern/MOD_curve.c
index c9a910d769b..62c9f8796a0 100644
--- a/source/blender/modifiers/intern/MOD_curve.c
+++ b/source/blender/modifiers/intern/MOD_curve.c
@@ -39,12 +39,13 @@
#include "BLI_utildefines.h"
+
#include "BKE_cdderivedmesh.h"
#include "BKE_lattice.h"
#include "BKE_library_query.h"
#include "BKE_modifier.h"
-#include "depsgraph_private.h"
+#include "DEG_depsgraph.h"
#include "DEG_depsgraph_build.h"
#include "MOD_modifiertypes.h"
@@ -92,23 +93,6 @@ static void foreachObjectLink(
walk(userData, ob, &cmd->object, IDWALK_CB_NOP);
}
-static void updateDepgraph(ModifierData *md, DagForest *forest,
- struct Main *UNUSED(bmain),
- Scene *UNUSED(scene),
- Object *UNUSED(ob),
- DagNode *obNode)
-{
- CurveModifierData *cmd = (CurveModifierData *) md;
-
- if (cmd->object) {
- DagNode *curNode = dag_get_node(forest, cmd->object);
- curNode->eval_flags |= DAG_EVAL_NEED_CURVE_PATH;
-
- dag_add_relation(forest, curNode, obNode,
- DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "Curve Modifier");
- }
-}
-
static void updateDepsgraph(ModifierData *md,
struct Main *UNUSED(bmain),
struct Scene *UNUSED(scene),
@@ -131,8 +115,8 @@ static void updateDepsgraph(ModifierData *md,
DEG_add_object_relation(node, object, DEG_OB_COMP_TRANSFORM, "Curve Modifier");
}
-static void deformVerts(ModifierData *md, Object *ob,
- DerivedMesh *derivedData,
+static void deformVerts(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx),
+ Object *ob, DerivedMesh *derivedData,
float (*vertexCos)[3],
int numVerts,
ModifierApplyFlag UNUSED(flag))
@@ -141,19 +125,19 @@ static void deformVerts(ModifierData *md, Object *ob,
/* silly that defaxis and curve_deform_verts are off by 1
* but leave for now to save having to call do_versions */
- curve_deform_verts(md->scene, cmd->object, ob, derivedData, vertexCos, numVerts,
+ curve_deform_verts(cmd->object, ob, derivedData, vertexCos, numVerts,
cmd->name, cmd->defaxis - 1);
}
static void deformVertsEM(
- ModifierData *md, Object *ob, struct BMEditMesh *em,
+ ModifierData *md, const struct EvaluationContext *eval_ctx, Object *ob, struct BMEditMesh *em,
DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
{
DerivedMesh *dm = derivedData;
if (!derivedData) dm = CDDM_from_editbmesh(em, false, false);
- deformVerts(md, ob, dm, vertexCos, numVerts, 0);
+ deformVerts(md, eval_ctx, ob, dm, vertexCos, numVerts, 0);
if (!derivedData) dm->release(dm);
}
@@ -179,7 +163,6 @@ ModifierTypeInfo modifierType_Curve = {
/* requiredDataMask */ requiredDataMask,
/* freeData */ NULL,
/* isDisabled */ isDisabled,
- /* updateDepgraph */ updateDepgraph,
/* updateDepsgraph */ updateDepsgraph,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_datatransfer.c b/source/blender/modifiers/intern/MOD_datatransfer.c
index a2210893602..e7069937868 100644
--- a/source/blender/modifiers/intern/MOD_datatransfer.c
+++ b/source/blender/modifiers/intern/MOD_datatransfer.c
@@ -50,8 +50,6 @@
#include "MEM_guardedalloc.h"
#include "MOD_util.h"
-#include "depsgraph_private.h"
-
/**************************************
* Modifiers functions. *
**************************************/
@@ -127,22 +125,6 @@ static void foreachObjectLink(
walk(userData, ob, &dtmd->ob_source, IDWALK_CB_NOP);
}
-static void updateDepgraph(ModifierData *md, DagForest *forest,
- struct Main *UNUSED(bmain),
- struct Scene *UNUSED(scene),
- Object *UNUSED(ob), DagNode *obNode)
-{
- DataTransferModifierData *dtmd = (DataTransferModifierData *) md;
- DagNode *curNode;
-
- if (dtmd->ob_source) {
- curNode = dag_get_node(forest, dtmd->ob_source);
-
- dag_add_relation(forest, curNode, obNode, DAG_RL_DATA_DATA | DAG_RL_OB_DATA,
- "DataTransfer Modifier");
- }
-}
-
static void updateDepsgraph(ModifierData *md,
struct Main *UNUSED(bmain),
struct Scene *UNUSED(scene),
@@ -170,7 +152,7 @@ static bool isDisabled(ModifierData *md, int UNUSED(useRenderParams))
DT_TYPE_SHARP_FACE \
)
-static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *derivedData,
+static DerivedMesh *applyModifier(ModifierData *md, const struct EvaluationContext *eval_ctx, Object *ob, DerivedMesh *derivedData,
ModifierApplyFlag UNUSED(flag))
{
DataTransferModifierData *dtmd = (DataTransferModifierData *) md;
@@ -202,7 +184,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
BKE_reports_init(&reports, RPT_STORE);
/* Note: no islands precision for now here. */
- BKE_object_data_transfer_dm(md->scene, dtmd->ob_source, ob, dm, dtmd->data_types, false,
+ BKE_object_data_transfer_dm(eval_ctx, md->scene, dtmd->ob_source, ob, dm, dtmd->data_types, false,
dtmd->vmap_mode, dtmd->emap_mode, dtmd->lmap_mode, dtmd->pmap_mode,
space_transform, false, max_dist, dtmd->map_ray_radius, 0.0f,
dtmd->layers_select_src, dtmd->layers_select_dst,
@@ -254,7 +236,6 @@ ModifierTypeInfo modifierType_DataTransfer = {
/* requiredDataMask */ requiredDataMask,
/* freeData */ NULL,
/* isDisabled */ isDisabled,
- /* updateDepgraph */ updateDepgraph,
/* updateDepsgraph */ updateDepsgraph,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ dependsOnNormals,
diff --git a/source/blender/modifiers/intern/MOD_decimate.c b/source/blender/modifiers/intern/MOD_decimate.c
index 8b5b0542442..83dcd7b9b89 100644
--- a/source/blender/modifiers/intern/MOD_decimate.c
+++ b/source/blender/modifiers/intern/MOD_decimate.c
@@ -86,8 +86,8 @@ static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
return dataMask;
}
-static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
- DerivedMesh *derivedData,
+static DerivedMesh *applyModifier(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx),
+ Object *ob, DerivedMesh *derivedData,
ModifierApplyFlag UNUSED(flag))
{
DecimateModifierData *dmd = (DecimateModifierData *) md;
@@ -227,7 +227,6 @@ ModifierTypeInfo modifierType_Decimate = {
/* requiredDataMask */ requiredDataMask,
/* freeData */ NULL,
/* isDisabled */ NULL,
- /* updateDepgraph */ NULL,
/* updateDepsgraph */ NULL,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_displace.c b/source/blender/modifiers/intern/MOD_displace.c
index 7651675934c..53a77b6fe38 100644
--- a/source/blender/modifiers/intern/MOD_displace.c
+++ b/source/blender/modifiers/intern/MOD_displace.c
@@ -50,7 +50,6 @@
#include "BKE_deform.h"
#include "BKE_object.h"
-#include "depsgraph_private.h"
#include "MEM_guardedalloc.h"
#include "MOD_util.h"
@@ -155,31 +154,6 @@ static bool isDisabled(ModifierData *md, int UNUSED(useRenderParams))
return ((!dmd->texture && dmd->direction == MOD_DISP_DIR_RGB_XYZ) || dmd->strength == 0.0f);
}
-static void updateDepgraph(ModifierData *md, DagForest *forest,
- struct Main *UNUSED(bmain),
- struct Scene *UNUSED(scene),
- Object *UNUSED(ob),
- DagNode *obNode)
-{
- DisplaceModifierData *dmd = (DisplaceModifierData *) md;
-
- if (dmd->map_object && dmd->texmapping == MOD_DISP_MAP_OBJECT) {
- DagNode *curNode = dag_get_node(forest, dmd->map_object);
-
- dag_add_relation(forest, curNode, obNode,
- DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "Displace Modifier");
- }
-
-
- if (dmd->texmapping == MOD_DISP_MAP_GLOBAL ||
- (ELEM(dmd->direction, MOD_DISP_DIR_X, MOD_DISP_DIR_Y, MOD_DISP_DIR_Z, MOD_DISP_DIR_RGB_XYZ) &&
- dmd->space == MOD_DISP_SPACE_GLOBAL))
- {
- dag_add_relation(forest, obNode, obNode,
- DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "Displace Modifier");
- }
-}
-
static void updateDepsgraph(ModifierData *md,
struct Main *UNUSED(bmain),
struct Scene *UNUSED(scene),
@@ -406,8 +380,8 @@ static void displaceModifier_do(
}
}
-static void deformVerts(ModifierData *md, Object *ob,
- DerivedMesh *derivedData,
+static void deformVerts(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx),
+ Object *ob, DerivedMesh *derivedData,
float (*vertexCos)[3],
int numVerts,
ModifierApplyFlag UNUSED(flag))
@@ -422,7 +396,7 @@ static void deformVerts(ModifierData *md, Object *ob,
}
static void deformVertsEM(
- ModifierData *md, Object *ob, struct BMEditMesh *editData,
+ ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx), Object *ob, struct BMEditMesh *editData,
DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
{
DerivedMesh *dm = get_cddm(ob, editData, derivedData, vertexCos, dependsOnNormals(md));
@@ -454,7 +428,6 @@ ModifierTypeInfo modifierType_Displace = {
/* requiredDataMask */ requiredDataMask,
/* freeData */ freeData,
/* isDisabled */ isDisabled,
- /* updateDepgraph */ updateDepgraph,
/* updateDepsgraph */ updateDepsgraph,
/* dependsOnTime */ dependsOnTime,
/* dependsOnNormals */ dependsOnNormals,
diff --git a/source/blender/modifiers/intern/MOD_dynamicpaint.c b/source/blender/modifiers/intern/MOD_dynamicpaint.c
index cf777fc82ce..da5d9a29be5 100644
--- a/source/blender/modifiers/intern/MOD_dynamicpaint.c
+++ b/source/blender/modifiers/intern/MOD_dynamicpaint.c
@@ -36,11 +36,13 @@
#include "BKE_cdderivedmesh.h"
#include "BKE_dynamicpaint.h"
+#include "BKE_layer.h"
#include "BKE_library.h"
#include "BKE_library_query.h"
#include "BKE_modifier.h"
-#include "depsgraph_private.h"
+#include "DEG_depsgraph.h"
+
#include "DEG_depsgraph_build.h"
#include "MOD_modifiertypes.h"
@@ -89,7 +91,7 @@ static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
if (surface->format == MOD_DPAINT_SURFACE_F_IMAGESEQ ||
surface->init_color_type == MOD_DPAINT_INITIAL_TEXTURE)
{
- dataMask |= CD_MASK_MLOOPUV | CD_MASK_MTEXPOLY;
+ dataMask |= CD_MASK_MLOOPUV;
}
/* mcol */
if (surface->type == MOD_DPAINT_SURFACE_T_PAINT ||
@@ -106,21 +108,21 @@ static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
if (pmd->brush) {
if (pmd->brush->flags & MOD_DPAINT_USE_MATERIAL) {
- dataMask |= CD_MASK_MLOOPUV | CD_MASK_MTEXPOLY;
+ dataMask |= CD_MASK_MLOOPUV;
}
}
return dataMask;
}
-static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
- DerivedMesh *dm,
+static DerivedMesh *applyModifier(ModifierData *md, const struct EvaluationContext *eval_ctx,
+ Object *ob, DerivedMesh *dm,
ModifierApplyFlag flag)
{
DynamicPaintModifierData *pmd = (DynamicPaintModifierData *) md;
/* dont apply dynamic paint on orco dm stack */
if (!(flag & MOD_APPLY_ORCO)) {
- return dynamicPaint_Modifier_do(pmd, md->scene, ob, dm);
+ return dynamicPaint_Modifier_do(pmd, eval_ctx, md->scene, ob, dm);
}
return dm;
}
@@ -130,34 +132,6 @@ static bool is_brush_cb(Object *UNUSED(ob), ModifierData *pmd)
return ((DynamicPaintModifierData *)pmd)->brush != NULL;
}
-static void updateDepgraph(ModifierData *md, DagForest *forest,
- struct Main *UNUSED(bmain),
- struct Scene *scene,
- Object *ob,
- DagNode *obNode)
-{
- DynamicPaintModifierData *pmd = (DynamicPaintModifierData *) md;
-
- /* add relation from canvases to all brush objects */
- if (pmd && pmd->canvas) {
-#ifdef WITH_LEGACY_DEPSGRAPH
- for (DynamicPaintSurface *surface = pmd->canvas->surfaces.first; surface; surface = surface->next) {
- if (surface->effect & MOD_DPAINT_EFFECT_DO_DRIP) {
- dag_add_forcefield_relations(forest, scene, ob, obNode, surface->effector_weights, true, 0, "Dynamic Paint Field");
- }
-
- /* Actual code uses custom loop over group/scene without layer checks in dynamicPaint_doStep */
- dag_add_collision_relations(forest, scene, ob, obNode, surface->brush_group, -1, eModifierType_DynamicPaint, is_brush_cb, false, "Dynamic Paint Brush");
- }
-#else
- (void)forest;
- (void)scene;
- (void)ob;
- (void)obNode;
-#endif
- }
-}
-
static void updateDepsgraph(ModifierData *md,
struct Main *UNUSED(bmain),
struct Scene *scene,
@@ -173,7 +147,7 @@ static void updateDepsgraph(ModifierData *md,
}
/* Actual code uses custom loop over group/scene without layer checks in dynamicPaint_doStep */
- DEG_add_collision_relations(node, scene, ob, surface->brush_group, -1, eModifierType_DynamicPaint, is_brush_cb, false, "Dynamic Paint Brush");
+ DEG_add_collision_relations(node, scene, ob, surface->brush_group, eModifierType_DynamicPaint, is_brush_cb, false, "Dynamic Paint Brush");
}
}
}
@@ -232,7 +206,6 @@ ModifierTypeInfo modifierType_DynamicPaint = {
/* requiredDataMask */ requiredDataMask,
/* freeData */ freeData,
/* isDisabled */ NULL,
- /* updateDepgraph */ updateDepgraph,
/* updateDepsgraph */ updateDepsgraph,
/* dependsOnTime */ dependsOnTime,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_edgesplit.c b/source/blender/modifiers/intern/MOD_edgesplit.c
index a17870f2bf4..0e344a851f2 100644
--- a/source/blender/modifiers/intern/MOD_edgesplit.c
+++ b/source/blender/modifiers/intern/MOD_edgesplit.c
@@ -121,7 +121,8 @@ static void copyData(ModifierData *md, ModifierData *target)
modifier_copyData_generic(md, target);
}
-static DerivedMesh *applyModifier(ModifierData *md, Object *UNUSED(ob), DerivedMesh *dm,
+static DerivedMesh *applyModifier(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx),
+ Object *UNUSED(ob), DerivedMesh *dm,
ModifierApplyFlag UNUSED(flag))
{
DerivedMesh *result;
@@ -158,7 +159,6 @@ ModifierTypeInfo modifierType_EdgeSplit = {
/* requiredDataMask */ NULL,
/* freeData */ NULL,
/* isDisabled */ NULL,
- /* updateDepgraph */ NULL,
/* updateDepsgraph */ NULL,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_explode.c b/source/blender/modifiers/intern/MOD_explode.c
index c22901f1947..8483da60576 100644
--- a/source/blender/modifiers/intern/MOD_explode.c
+++ b/source/blender/modifiers/intern/MOD_explode.c
@@ -785,9 +785,10 @@ static DerivedMesh *cutEdges(ExplodeModifierData *emd, DerivedMesh *dm)
return splitdm;
}
-static DerivedMesh *explodeMesh(ExplodeModifierData *emd,
- ParticleSystemModifierData *psmd, Scene *scene, Object *ob,
- DerivedMesh *to_explode)
+static DerivedMesh *explodeMesh(
+ ExplodeModifierData *emd,
+ ParticleSystemModifierData *psmd, const struct EvaluationContext *eval_ctx, Scene *scene,
+ Object *ob, DerivedMesh *to_explode)
{
DerivedMesh *explode, *dm = to_explode;
MFace *mf = NULL, *mface;
@@ -812,6 +813,7 @@ static DerivedMesh *explodeMesh(ExplodeModifierData *emd,
mface = dm->getTessFaceArray(dm);
totpart = psmd->psys->totpart;
+ sim.eval_ctx = eval_ctx;
sim.scene = scene;
sim.ob = ob;
sim.psys = psmd->psys;
@@ -993,8 +995,8 @@ static ParticleSystemModifierData *findPrecedingParticlesystem(Object *ob, Modif
}
return psmd;
}
-static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
- DerivedMesh *derivedData,
+static DerivedMesh *applyModifier(ModifierData *md, const struct EvaluationContext *eval_ctx,
+ Object *ob, DerivedMesh *derivedData,
ModifierApplyFlag UNUSED(flag))
{
DerivedMesh *dm = derivedData;
@@ -1028,7 +1030,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
if (emd->flag & eExplodeFlag_EdgeCut) {
int *facepa = emd->facepa;
DerivedMesh *splitdm = cutEdges(emd, dm);
- DerivedMesh *explode = explodeMesh(emd, psmd, md->scene, ob, splitdm);
+ DerivedMesh *explode = explodeMesh(emd, psmd, eval_ctx, md->scene, ob, splitdm);
MEM_freeN(emd->facepa);
emd->facepa = facepa;
@@ -1036,7 +1038,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
return explode;
}
else
- return explodeMesh(emd, psmd, md->scene, ob, derivedData);
+ return explodeMesh(emd, psmd, eval_ctx, md->scene, ob, derivedData);
}
return derivedData;
}
@@ -1059,7 +1061,6 @@ ModifierTypeInfo modifierType_Explode = {
/* requiredDataMask */ requiredDataMask,
/* freeData */ freeData,
/* isDisabled */ NULL,
- /* updateDepgraph */ NULL,
/* updateDepsgraph */ NULL,
/* dependsOnTime */ dependsOnTime,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_fluidsim.c b/source/blender/modifiers/intern/MOD_fluidsim.c
index 368c8209694..75f57de2a37 100644
--- a/source/blender/modifiers/intern/MOD_fluidsim.c
+++ b/source/blender/modifiers/intern/MOD_fluidsim.c
@@ -41,9 +41,9 @@
#include "BKE_cdderivedmesh.h"
+#include "BKE_layer.h"
#include "BKE_modifier.h"
-#include "depsgraph_private.h"
#include "DEG_depsgraph_build.h"
#include "MOD_fluidsim_util.h"
@@ -82,8 +82,8 @@ static void copyData(ModifierData *md, ModifierData *target)
-static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
- DerivedMesh *dm,
+static DerivedMesh *applyModifier(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx),
+ Object *ob, DerivedMesh *dm,
ModifierApplyFlag flag)
{
FluidsimModifierData *fluidmd = (FluidsimModifierData *) md;
@@ -103,33 +103,6 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
return result ? result : dm;
}
-static void updateDepgraph(
- ModifierData *md, DagForest *forest,
- struct Main *UNUSED(bmain), Scene *scene,
- Object *ob, DagNode *obNode)
-{
- FluidsimModifierData *fluidmd = (FluidsimModifierData *) md;
- Base *base;
-
- if (fluidmd && fluidmd->fss) {
- if (fluidmd->fss->type == OB_FLUIDSIM_DOMAIN) {
- for (base = scene->base.first; base; base = base->next) {
- Object *ob1 = base->object;
- if (ob1 != ob) {
- FluidsimModifierData *fluidmdtmp =
- (FluidsimModifierData *)modifiers_findByType(ob1, eModifierType_Fluidsim);
-
- /* only put dependencies from NON-DOMAIN fluids in here */
- if (fluidmdtmp && fluidmdtmp->fss && (fluidmdtmp->fss->type != OB_FLUIDSIM_DOMAIN)) {
- DagNode *curNode = dag_get_node(forest, ob1);
- dag_add_relation(forest, curNode, obNode, DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "Fluidsim Object");
- }
- }
- }
- }
- }
-}
-
static void updateDepsgraph(ModifierData *md,
struct Main *UNUSED(bmain),
struct Scene *scene,
@@ -139,9 +112,8 @@ static void updateDepsgraph(ModifierData *md,
FluidsimModifierData *fluidmd = (FluidsimModifierData *) md;
if (fluidmd && fluidmd->fss) {
if (fluidmd->fss->type == OB_FLUIDSIM_DOMAIN) {
- Base *base;
- for (base = scene->base.first; base; base = base->next) {
- Object *ob1 = base->object;
+ FOREACH_SCENE_OBJECT(scene, ob1)
+ {
if (ob1 != ob) {
FluidsimModifierData *fluidmdtmp =
(FluidsimModifierData *)modifiers_findByType(ob1, eModifierType_Fluidsim);
@@ -152,6 +124,7 @@ static void updateDepsgraph(ModifierData *md,
}
}
}
+ FOREACH_SCENE_OBJECT_END
}
}
}
@@ -183,7 +156,6 @@ ModifierTypeInfo modifierType_Fluidsim = {
/* requiredDataMask */ NULL,
/* freeData */ freeData,
/* isDisabled */ NULL,
- /* updateDepgraph */ updateDepgraph,
/* updateDepsgraph */ updateDepsgraph,
/* dependsOnTime */ dependsOnTime,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_hook.c b/source/blender/modifiers/intern/MOD_hook.c
index 56c494ff3c0..25617c84dac 100644
--- a/source/blender/modifiers/intern/MOD_hook.c
+++ b/source/blender/modifiers/intern/MOD_hook.c
@@ -46,8 +46,6 @@
#include "BKE_deform.h"
#include "BKE_colortools.h"
-
-#include "depsgraph_private.h"
#include "MEM_guardedalloc.h"
#include "MOD_util.h"
@@ -118,24 +116,6 @@ static void foreachObjectLink(
walk(userData, ob, &hmd->object, IDWALK_CB_NOP);
}
-static void updateDepgraph(ModifierData *md, DagForest *forest,
- struct Main *UNUSED(bmain),
- struct Scene *UNUSED(scene),
- Object *UNUSED(ob),
- DagNode *obNode)
-{
- HookModifierData *hmd = (HookModifierData *) md;
-
- if (hmd->object) {
- DagNode *curNode = dag_get_node(forest, hmd->object);
-
- if (hmd->subtarget[0])
- dag_add_relation(forest, curNode, obNode, DAG_RL_OB_DATA | DAG_RL_DATA_DATA, "Hook Modifier");
- else
- dag_add_relation(forest, curNode, obNode, DAG_RL_OB_DATA, "Hook Modifier");
- }
-}
-
static void updateDepsgraph(ModifierData *md,
struct Main *UNUSED(bmain),
struct Scene *UNUSED(scene),
@@ -376,7 +356,7 @@ static void deformVerts_do(HookModifierData *hmd, Object *ob, DerivedMesh *dm,
}
}
-static void deformVerts(ModifierData *md, Object *ob, DerivedMesh *derivedData,
+static void deformVerts(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx), Object *ob, DerivedMesh *derivedData,
float (*vertexCos)[3], int numVerts,
ModifierApplyFlag UNUSED(flag))
{
@@ -392,7 +372,7 @@ static void deformVerts(ModifierData *md, Object *ob, DerivedMesh *derivedData,
dm->release(dm);
}
-static void deformVertsEM(ModifierData *md, Object *ob, struct BMEditMesh *editData,
+static void deformVertsEM(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx), Object *ob, struct BMEditMesh *editData,
DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
{
HookModifierData *hmd = (HookModifierData *) md;
@@ -427,7 +407,6 @@ ModifierTypeInfo modifierType_Hook = {
/* requiredDataMask */ requiredDataMask,
/* freeData */ freeData,
/* isDisabled */ isDisabled,
- /* updateDepgraph */ updateDepgraph,
/* updateDepsgraph */ updateDepsgraph,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_laplaciandeform.c b/source/blender/modifiers/intern/MOD_laplaciandeform.c
index 91d41a6badd..72db3f1c132 100644
--- a/source/blender/modifiers/intern/MOD_laplaciandeform.c
+++ b/source/blender/modifiers/intern/MOD_laplaciandeform.c
@@ -724,7 +724,7 @@ static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
return dataMask;
}
-static void deformVerts(ModifierData *md, Object *ob, DerivedMesh *derivedData,
+static void deformVerts(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx), Object *ob, DerivedMesh *derivedData,
float (*vertexCos)[3], int numVerts, ModifierApplyFlag UNUSED(flag))
{
DerivedMesh *dm = get_dm(ob, NULL, derivedData, NULL, false, false);
@@ -736,7 +736,7 @@ static void deformVerts(ModifierData *md, Object *ob, DerivedMesh *derivedData,
}
static void deformVertsEM(
- ModifierData *md, Object *ob, struct BMEditMesh *editData,
+ ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx), Object *ob, struct BMEditMesh *editData,
DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
{
DerivedMesh *dm = get_dm(ob, editData, derivedData, NULL, false, false);
@@ -775,7 +775,6 @@ ModifierTypeInfo modifierType_LaplacianDeform = {
/* requiredDataMask */ requiredDataMask,
/* freeData */ freeData,
/* isDisabled */ isDisabled,
- /* updateDepgraph */ NULL,
/* updateDepsgraph */ NULL,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_laplaciansmooth.c b/source/blender/modifiers/intern/MOD_laplaciansmooth.c
index b3a542f68b7..977b8b41cc3 100644
--- a/source/blender/modifiers/intern/MOD_laplaciansmooth.c
+++ b/source/blender/modifiers/intern/MOD_laplaciansmooth.c
@@ -506,7 +506,7 @@ static CustomDataMask required_data_mask(Object *UNUSED(ob), ModifierData *md)
return dataMask;
}
-static void deformVerts(ModifierData *md, Object *ob, DerivedMesh *derivedData,
+static void deformVerts(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx), Object *ob, DerivedMesh *derivedData,
float (*vertexCos)[3], int numVerts, ModifierApplyFlag UNUSED(flag))
{
DerivedMesh *dm;
@@ -524,7 +524,7 @@ static void deformVerts(ModifierData *md, Object *ob, DerivedMesh *derivedData,
}
static void deformVertsEM(
- ModifierData *md, Object *ob, struct BMEditMesh *editData,
+ ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx), Object *ob, struct BMEditMesh *editData,
DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
{
DerivedMesh *dm;
@@ -561,7 +561,6 @@ ModifierTypeInfo modifierType_LaplacianSmooth = {
/* requiredDataMask */ required_data_mask,
/* freeData */ NULL,
/* isDisabled */ is_disabled,
- /* updateDepgraph */ NULL,
/* updateDepsgraph */ NULL,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_lattice.c b/source/blender/modifiers/intern/MOD_lattice.c
index dc246084dca..cd8b6139d75 100644
--- a/source/blender/modifiers/intern/MOD_lattice.c
+++ b/source/blender/modifiers/intern/MOD_lattice.c
@@ -44,8 +44,6 @@
#include "BKE_library_query.h"
#include "BKE_modifier.h"
-#include "depsgraph_private.h"
-
#include "MOD_util.h"
static void initData(ModifierData *md)
@@ -91,22 +89,6 @@ static void foreachObjectLink(
walk(userData, ob, &lmd->object, IDWALK_CB_NOP);
}
-static void updateDepgraph(ModifierData *md, DagForest *forest,
- struct Main *UNUSED(bmain),
- struct Scene *UNUSED(scene),
- Object *UNUSED(ob),
- DagNode *obNode)
-{
- LatticeModifierData *lmd = (LatticeModifierData *) md;
-
- if (lmd->object) {
- DagNode *latNode = dag_get_node(forest, lmd->object);
-
- dag_add_relation(forest, latNode, obNode,
- DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "Lattice Modifier");
- }
-}
-
static void updateDepsgraph(ModifierData *md,
struct Main *UNUSED(bmain),
struct Scene *UNUSED(scene),
@@ -121,8 +103,8 @@ static void updateDepsgraph(ModifierData *md,
DEG_add_object_relation(node, object, DEG_OB_COMP_TRANSFORM, "Lattice Modifier");
}
-static void deformVerts(ModifierData *md, Object *ob,
- DerivedMesh *derivedData,
+static void deformVerts(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx),
+ Object *ob, DerivedMesh *derivedData,
float (*vertexCos)[3],
int numVerts,
ModifierApplyFlag UNUSED(flag))
@@ -137,14 +119,14 @@ static void deformVerts(ModifierData *md, Object *ob,
}
static void deformVertsEM(
- ModifierData *md, Object *ob, struct BMEditMesh *em,
+ ModifierData *md, const struct EvaluationContext *eval_ctx, Object *ob, struct BMEditMesh *em,
DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
{
DerivedMesh *dm = derivedData;
if (!derivedData) dm = CDDM_from_editbmesh(em, false, false);
- deformVerts(md, ob, dm, vertexCos, numVerts, 0);
+ deformVerts(md, eval_ctx, ob, dm, vertexCos, numVerts, 0);
if (!derivedData) dm->release(dm);
}
@@ -169,7 +151,6 @@ ModifierTypeInfo modifierType_Lattice = {
/* requiredDataMask */ requiredDataMask,
/* freeData */ NULL,
/* isDisabled */ isDisabled,
- /* updateDepgraph */ updateDepgraph,
/* updateDepsgraph */ updateDepsgraph,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_mask.c b/source/blender/modifiers/intern/MOD_mask.c
index 508897ec4fd..bcebbc40adb 100644
--- a/source/blender/modifiers/intern/MOD_mask.c
+++ b/source/blender/modifiers/intern/MOD_mask.c
@@ -50,7 +50,6 @@
#include "BKE_modifier.h"
#include "BKE_deform.h"
-#include "depsgraph_private.h"
#include "DEG_depsgraph_build.h"
#include "MOD_modifiertypes.h"
@@ -79,24 +78,6 @@ static void foreachObjectLink(
walk(userData, ob, &mmd->ob_arm, IDWALK_CB_NOP);
}
-static void updateDepgraph(ModifierData *md, DagForest *forest,
- struct Main *UNUSED(bmain),
- struct Scene *UNUSED(scene),
- Object *UNUSED(ob),
- DagNode *obNode)
-{
- MaskModifierData *mmd = (MaskModifierData *)md;
-
- if (mmd->ob_arm) {
- bArmature *arm = (bArmature *)mmd->ob_arm->data;
- DagNode *armNode = dag_get_node(forest, mmd->ob_arm);
-
- /* tag relationship in depsgraph, but also on the armature */
- dag_add_relation(forest, armNode, obNode, DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "Mask Modifier");
- arm->flag |= ARM_HAS_VIZ_DEPS;
- }
-}
-
static void updateDepsgraph(ModifierData *md,
struct Main *UNUSED(bmain),
struct Scene *UNUSED(scene),
@@ -113,8 +94,8 @@ static void updateDepsgraph(ModifierData *md,
}
}
-static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
- DerivedMesh *dm,
+static DerivedMesh *applyModifier(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx),
+ Object *ob, DerivedMesh *dm,
ModifierApplyFlag UNUSED(flag))
{
MaskModifierData *mmd = (MaskModifierData *)md;
@@ -403,7 +384,6 @@ ModifierTypeInfo modifierType_Mask = {
/* requiredDataMask */ requiredDataMask,
/* freeData */ NULL,
/* isDisabled */ NULL,
- /* updateDepgraph */ updateDepgraph,
/* updateDepsgraph */ updateDepsgraph,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_meshcache.c b/source/blender/modifiers/intern/MOD_meshcache.c
index e026d4da29a..5dfa1d874b2 100644
--- a/source/blender/modifiers/intern/MOD_meshcache.c
+++ b/source/blender/modifiers/intern/MOD_meshcache.c
@@ -272,8 +272,8 @@ static void meshcache_do(
}
}
-static void deformVerts(ModifierData *md, Object *ob,
- DerivedMesh *derivedData,
+static void deformVerts(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx),
+ Object *ob, DerivedMesh *derivedData,
float (*vertexCos)[3],
int numVerts,
ModifierApplyFlag UNUSED(flag))
@@ -284,7 +284,7 @@ static void deformVerts(ModifierData *md, Object *ob,
}
static void deformVertsEM(
- ModifierData *md, Object *ob, struct BMEditMesh *UNUSED(editData),
+ ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx), Object *ob, struct BMEditMesh *UNUSED(editData),
DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
{
MeshCacheModifierData *mcmd = (MeshCacheModifierData *)md;
@@ -313,7 +313,6 @@ ModifierTypeInfo modifierType_MeshCache = {
/* requiredDataMask */ NULL,
/* freeData */ NULL,
/* isDisabled */ isDisabled,
- /* updateDepgraph */ NULL,
/* updateDepsgraph */ NULL,
/* dependsOnTime */ dependsOnTime,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_meshdeform.c b/source/blender/modifiers/intern/MOD_meshdeform.c
index 99f0c892a3f..da233a18d0a 100644
--- a/source/blender/modifiers/intern/MOD_meshdeform.c
+++ b/source/blender/modifiers/intern/MOD_meshdeform.c
@@ -47,8 +47,6 @@
#include "BKE_deform.h"
#include "BKE_editmesh.h"
-#include "depsgraph_private.h"
-
#include "MEM_guardedalloc.h"
#include "MOD_util.h"
@@ -122,23 +120,6 @@ static void foreachObjectLink(
walk(userData, ob, &mmd->object, IDWALK_CB_NOP);
}
-static void updateDepgraph(ModifierData *md, DagForest *forest,
- struct Main *UNUSED(bmain),
- struct Scene *UNUSED(scene),
- Object *UNUSED(ob),
- DagNode *obNode)
-{
- MeshDeformModifierData *mmd = (MeshDeformModifierData *) md;
-
- if (mmd->object) {
- DagNode *curNode = dag_get_node(forest, mmd->object);
-
- dag_add_relation(forest, curNode, obNode,
- DAG_RL_DATA_DATA | DAG_RL_OB_DATA | DAG_RL_DATA_OB | DAG_RL_OB_OB,
- "Mesh Deform Modifier");
- }
-}
-
static void updateDepsgraph(ModifierData *md,
struct Main *UNUSED(bmain),
struct Scene *UNUSED(scene),
@@ -294,7 +275,7 @@ static void meshdeform_vert_task(
}
static void meshdeformModifier_do(
- ModifierData *md, Object *ob, DerivedMesh *dm,
+ ModifierData *md, const struct EvaluationContext *eval_ctx, Object *ob, DerivedMesh *dm,
float (*vertexCos)[3], int numVerts)
{
MeshDeformModifierData *mmd = (MeshDeformModifierData *) md;
@@ -321,7 +302,7 @@ static void meshdeformModifier_do(
*/
if (mmd->object == md->scene->obedit) {
BMEditMesh *em = BKE_editmesh_from_object(mmd->object);
- tmpdm = editbmesh_get_derived_cage_and_final(md->scene, mmd->object, em, 0, &cagedm);
+ tmpdm = editbmesh_get_derived_cage_and_final(eval_ctx, md->scene, mmd->object, em, 0, &cagedm);
if (tmpdm)
tmpdm->release(tmpdm);
}
@@ -430,7 +411,7 @@ static void meshdeformModifier_do(
cagedm->release(cagedm);
}
-static void deformVerts(ModifierData *md, Object *ob,
+static void deformVerts(ModifierData *md, const struct EvaluationContext *eval_ctx, Object *ob,
DerivedMesh *derivedData,
float (*vertexCos)[3],
int numVerts,
@@ -440,13 +421,13 @@ static void deformVerts(ModifierData *md, Object *ob,
modifier_vgroup_cache(md, vertexCos); /* if next modifier needs original vertices */
- meshdeformModifier_do(md, ob, dm, vertexCos, numVerts);
+ meshdeformModifier_do(md, eval_ctx, ob, dm, vertexCos, numVerts);
if (dm && dm != derivedData)
dm->release(dm);
}
-static void deformVertsEM(ModifierData *md, Object *ob,
+static void deformVertsEM(ModifierData *md, const struct EvaluationContext *eval_ctx, Object *ob,
struct BMEditMesh *UNUSED(editData),
DerivedMesh *derivedData,
float (*vertexCos)[3],
@@ -454,7 +435,7 @@ static void deformVertsEM(ModifierData *md, Object *ob,
{
DerivedMesh *dm = get_dm(ob, NULL, derivedData, NULL, false, false);
- meshdeformModifier_do(md, ob, dm, vertexCos, numVerts);
+ meshdeformModifier_do(md, eval_ctx, ob, dm, vertexCos, numVerts);
if (dm && dm != derivedData)
dm->release(dm);
@@ -543,7 +524,6 @@ ModifierTypeInfo modifierType_MeshDeform = {
/* requiredDataMask */ requiredDataMask,
/* freeData */ freeData,
/* isDisabled */ isDisabled,
- /* updateDepgraph */ updateDepgraph,
/* updateDepsgraph */ updateDepsgraph,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_meshsequencecache.c b/source/blender/modifiers/intern/MOD_meshsequencecache.c
index 3e527489d20..e28459814e2 100644
--- a/source/blender/modifiers/intern/MOD_meshsequencecache.c
+++ b/source/blender/modifiers/intern/MOD_meshsequencecache.c
@@ -38,7 +38,6 @@
#include "BKE_library_query.h"
#include "BKE_scene.h"
-#include "depsgraph_private.h"
#include "DEG_depsgraph_build.h"
#include "MOD_modifiertypes.h"
@@ -95,8 +94,8 @@ static bool isDisabled(ModifierData *md, int UNUSED(useRenderParams))
return (mcmd->cache_file == NULL) || (mcmd->object_path[0] == '\0');
}
-static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
- DerivedMesh *dm,
+static DerivedMesh *applyModifier(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx),
+ Object *ob, DerivedMesh *dm,
ModifierApplyFlag UNUSED(flag))
{
#ifdef WITH_ALEMBIC
@@ -174,23 +173,6 @@ static void foreachIDLink(ModifierData *md, Object *ob,
}
-static void updateDepgraph(ModifierData *md, DagForest *forest,
- struct Main *bmain,
- struct Scene *scene,
- Object *ob, DagNode *obNode)
-{
- MeshSeqCacheModifierData *mcmd = (MeshSeqCacheModifierData *) md;
-
- if (mcmd->cache_file != NULL) {
- DagNode *curNode = dag_get_node(forest, mcmd->cache_file);
-
- dag_add_relation(forest, curNode, obNode,
- DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "Cache File Modifier");
- }
-
- UNUSED_VARS(bmain, scene, ob);
-}
-
static void updateDepsgraph(ModifierData *md,
struct Main *bmain,
struct Scene *scene,
@@ -224,7 +206,6 @@ ModifierTypeInfo modifierType_MeshSequenceCache = {
/* requiredDataMask */ NULL,
/* freeData */ freeData,
/* isDisabled */ isDisabled,
- /* updateDepgraph */ updateDepgraph,
/* updateDepsgraph */ updateDepsgraph,
/* dependsOnTime */ dependsOnTime,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_mirror.c b/source/blender/modifiers/intern/MOD_mirror.c
index 6925e40a8c6..1b725e335a4 100644
--- a/source/blender/modifiers/intern/MOD_mirror.c
+++ b/source/blender/modifiers/intern/MOD_mirror.c
@@ -45,7 +45,6 @@
#include "MEM_guardedalloc.h"
-#include "depsgraph_private.h"
#include "DEG_depsgraph_build.h"
#include "MOD_modifiertypes.h"
@@ -77,21 +76,6 @@ static void foreachObjectLink(
walk(userData, ob, &mmd->mirror_ob, IDWALK_CB_NOP);
}
-static void updateDepgraph(ModifierData *md, DagForest *forest,
- struct Main *UNUSED(bmain),
- struct Scene *UNUSED(scene),
- Object *UNUSED(ob),
- DagNode *obNode)
-{
- MirrorModifierData *mmd = (MirrorModifierData *) md;
-
- if (mmd->mirror_ob) {
- DagNode *latNode = dag_get_node(forest, mmd->mirror_ob);
-
- dag_add_relation(forest, latNode, obNode, DAG_RL_OB_DATA, "Mirror Modifier");
- }
-}
-
static void updateDepsgraph(ModifierData *md,
struct Main *UNUSED(bmain),
struct Scene *UNUSED(scene),
@@ -339,8 +323,8 @@ static DerivedMesh *mirrorModifier__doMirror(MirrorModifierData *mmd,
return result;
}
-static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
- DerivedMesh *derivedData,
+static DerivedMesh *applyModifier(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx),
+ Object *ob, DerivedMesh *derivedData,
ModifierApplyFlag UNUSED(flag))
{
DerivedMesh *result;
@@ -379,7 +363,6 @@ ModifierTypeInfo modifierType_Mirror = {
/* requiredDataMask */ NULL,
/* freeData */ NULL,
/* isDisabled */ NULL,
- /* updateDepgraph */ updateDepgraph,
/* updateDepsgraph */ updateDepsgraph,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_multires.c b/source/blender/modifiers/intern/MOD_multires.c
index f9f17b88fa4..6704526ea03 100644
--- a/source/blender/modifiers/intern/MOD_multires.c
+++ b/source/blender/modifiers/intern/MOD_multires.c
@@ -48,6 +48,8 @@
#include "MOD_modifiertypes.h"
+#include "DEG_depsgraph.h"
+
static void initData(ModifierData *md)
{
MultiresModifierData *mmd = (MultiresModifierData *)md;
@@ -67,8 +69,8 @@ static void copyData(ModifierData *md, ModifierData *target)
modifier_copyData_generic(md, target);
}
-static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *dm,
- ModifierApplyFlag flag)
+static DerivedMesh *applyModifier(ModifierData *md, const struct EvaluationContext *eval_ctx, Object *ob,
+ DerivedMesh *dm, ModifierApplyFlag flag)
{
MultiresModifierData *mmd = (MultiresModifierData *)md;
DerivedMesh *result;
@@ -94,7 +96,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *dm,
if (ignore_simplify)
flags |= MULTIRES_IGNORE_SIMPLIFY;
- result = multires_make_derived_from_derived(dm, mmd, ob, flags);
+ result = multires_make_derived_from_derived(dm, mmd, ob, flags, eval_ctx->object_mode);
if (result == dm)
return dm;
@@ -163,7 +165,6 @@ ModifierTypeInfo modifierType_Multires = {
/* requiredDataMask */ NULL,
/* freeData */ NULL,
/* isDisabled */ NULL,
- /* updateDepgraph */ NULL,
/* updateDepsgraph */ NULL,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_none.c b/source/blender/modifiers/intern/MOD_none.c
index d9d9ba2966d..3fb780f566d 100644
--- a/source/blender/modifiers/intern/MOD_none.c
+++ b/source/blender/modifiers/intern/MOD_none.c
@@ -67,7 +67,6 @@ ModifierTypeInfo modifierType_None = {
/* requiredDataMask */ NULL,
/* freeData */ NULL,
/* isDisabled */ isDisabled,
- /* updateDepgraph */ NULL,
/* updateDepsgraph */ NULL,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_normal_edit.c b/source/blender/modifiers/intern/MOD_normal_edit.c
index af20d06a5a2..61a5b9bb03e 100644
--- a/source/blender/modifiers/intern/MOD_normal_edit.c
+++ b/source/blender/modifiers/intern/MOD_normal_edit.c
@@ -42,8 +42,6 @@
#include "BKE_mesh.h"
#include "BKE_deform.h"
-#include "depsgraph_private.h"
-
#include "MOD_util.h"
@@ -511,20 +509,6 @@ static bool isDisabled(ModifierData *md, int UNUSED(useRenderParams))
return !is_valid_target(enmd);
}
-static void updateDepgraph(ModifierData *md, DagForest *forest,
- struct Main *UNUSED(bmain),
- struct Scene *UNUSED(scene),
- Object *UNUSED(ob), DagNode *obNode)
-{
- NormalEditModifierData *enmd = (NormalEditModifierData *) md;
-
- if (enmd->target) {
- DagNode *Node = dag_get_node(forest, enmd->target);
-
- dag_add_relation(forest, Node, obNode, DAG_RL_OB_DATA, "NormalEdit Modifier");
- }
-}
-
static void updateDepsgraph(ModifierData *md,
struct Main *UNUSED(bmain),
struct Scene *UNUSED(scene),
@@ -537,7 +521,8 @@ static void updateDepsgraph(ModifierData *md,
}
}
-static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *dm, ModifierApplyFlag UNUSED(flag))
+static DerivedMesh *applyModifier(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx), Object *ob,
+ DerivedMesh *dm, ModifierApplyFlag UNUSED(flag))
{
return normalEditModifier_do((NormalEditModifierData *)md, ob, dm);
}
@@ -562,7 +547,6 @@ ModifierTypeInfo modifierType_NormalEdit = {
/* requiredDataMask */ requiredDataMask,
/* freeData */ NULL,
/* isDisabled */ isDisabled,
- /* updateDepgraph */ updateDepgraph,
/* updateDepsgraph */ updateDepsgraph,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ dependsOnNormals,
diff --git a/source/blender/modifiers/intern/MOD_ocean.c b/source/blender/modifiers/intern/MOD_ocean.c
index a9c4afcc0af..b3a7ecaa138 100644
--- a/source/blender/modifiers/intern/MOD_ocean.c
+++ b/source/blender/modifiers/intern/MOD_ocean.c
@@ -391,7 +391,6 @@ static DerivedMesh *generate_ocean_geometry(OceanModifierData *omd)
/* add uvs */
if (CustomData_number_of_layers(&result->loopData, CD_MLOOPUV) < MAX_MTFACE) {
gogd.mloopuvs = CustomData_add_layer(&result->loopData, CD_MLOOPUV, CD_CALLOC, NULL, num_polys * 4);
- CustomData_add_layer(&result->polyData, CD_MTEXPOLY, CD_CALLOC, NULL, num_polys);
if (gogd.mloopuvs) { /* unlikely to fail */
gogd.ix = 1.0 / gogd.rx;
@@ -556,8 +555,8 @@ static DerivedMesh *doOcean(ModifierData *md, Object *UNUSED(ob),
}
#endif /* WITH_OCEANSIM */
-static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
- DerivedMesh *derivedData,
+static DerivedMesh *applyModifier(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx),
+ Object *ob, DerivedMesh *derivedData,
ModifierApplyFlag UNUSED(flag))
{
DerivedMesh *result;
@@ -591,7 +590,6 @@ ModifierTypeInfo modifierType_Ocean = {
/* requiredDataMask */ requiredDataMask,
/* freeData */ freeData,
/* isDisabled */ NULL,
- /* updateDepgraph */ NULL,
/* updateDepsgraph */ NULL,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ dependsOnNormals,
diff --git a/source/blender/modifiers/intern/MOD_particleinstance.c b/source/blender/modifiers/intern/MOD_particleinstance.c
index 22e83d9daef..09966da13a2 100644
--- a/source/blender/modifiers/intern/MOD_particleinstance.c
+++ b/source/blender/modifiers/intern/MOD_particleinstance.c
@@ -51,7 +51,6 @@
#include "BKE_particle.h"
#include "BKE_pointcache.h"
-#include "depsgraph_private.h"
#include "DEG_depsgraph_build.h"
#include "MOD_modifiertypes.h"
@@ -112,24 +111,6 @@ static bool isDisabled(ModifierData *md, int useRenderParams)
return false;
}
-
-static void updateDepgraph(ModifierData *md, DagForest *forest,
- struct Main *UNUSED(bmain),
- struct Scene *UNUSED(scene),
- Object *UNUSED(ob),
- DagNode *obNode)
-{
- ParticleInstanceModifierData *pimd = (ParticleInstanceModifierData *) md;
-
- if (pimd->ob) {
- DagNode *curNode = dag_get_node(forest, pimd->ob);
-
- dag_add_relation(forest, curNode, obNode,
- DAG_RL_DATA_DATA | DAG_RL_OB_DATA,
- "Particle Instance Modifier");
- }
-}
-
static void updateDepsgraph(ModifierData *md,
struct Main *UNUSED(bmain),
struct Scene *UNUSED(scene),
@@ -185,8 +166,8 @@ static int particle_skip(ParticleInstanceModifierData *pimd, ParticleSystem *psy
return 0;
}
-static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
- DerivedMesh *derivedData,
+static DerivedMesh *applyModifier(ModifierData *md, const struct EvaluationContext *eval_ctx,
+ Object *ob, DerivedMesh *derivedData,
ModifierApplyFlag UNUSED(flag))
{
DerivedMesh *dm = derivedData, *result;
@@ -231,6 +212,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
if (totpart == 0)
return derivedData;
+ sim.eval_ctx = eval_ctx;
sim.scene = md->scene;
sim.ob = pimd->ob;
sim.psys = psys;
@@ -462,7 +444,6 @@ ModifierTypeInfo modifierType_ParticleInstance = {
/* requiredDataMask */ NULL,
/* freeData */ NULL,
/* isDisabled */ isDisabled,
- /* updateDepgraph */ updateDepgraph,
/* updateDepsgraph */ updateDepsgraph,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_particlesystem.c b/source/blender/modifiers/intern/MOD_particlesystem.c
index d8cccca415c..9cc6e5f56b5 100644
--- a/source/blender/modifiers/intern/MOD_particlesystem.c
+++ b/source/blender/modifiers/intern/MOD_particlesystem.c
@@ -97,8 +97,8 @@ static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
}
/* saves the current emitter state for a particle system and calculates particles */
-static void deformVerts(ModifierData *md, Object *ob,
- DerivedMesh *derivedData,
+static void deformVerts(ModifierData *md, const struct EvaluationContext *eval_ctx,
+ Object *ob, DerivedMesh *derivedData,
float (*vertexCos)[3],
int UNUSED(numVerts),
ModifierApplyFlag flag)
@@ -186,7 +186,7 @@ static void deformVerts(ModifierData *md, Object *ob,
if (!(ob->transflag & OB_NO_PSYS_UPDATE)) {
psmd->flag &= ~eParticleSystemFlag_psys_updated;
- particle_system_update(md->scene, ob, psys, (flag & MOD_APPLY_RENDER) != 0);
+ particle_system_update(eval_ctx, md->scene, ob, psys, (flag & MOD_APPLY_RENDER) != 0);
psmd->flag |= eParticleSystemFlag_psys_updated;
}
}
@@ -231,7 +231,6 @@ ModifierTypeInfo modifierType_ParticleSystem = {
/* requiredDataMask */ requiredDataMask,
/* freeData */ freeData,
/* isDisabled */ NULL,
- /* updateDepgraph */ NULL,
/* updateDepsgraph */ NULL,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_remesh.c b/source/blender/modifiers/intern/MOD_remesh.c
index b85898c07e9..c9070cced7e 100644
--- a/source/blender/modifiers/intern/MOD_remesh.c
+++ b/source/blender/modifiers/intern/MOD_remesh.c
@@ -143,6 +143,7 @@ static void dualcon_add_quad(void *output_v, const int vert_indices[4])
}
static DerivedMesh *applyModifier(ModifierData *md,
+ const struct EvaluationContext *UNUSED(eval_ctx),
Object *UNUSED(ob),
DerivedMesh *dm,
ModifierApplyFlag UNUSED(flag))
@@ -203,7 +204,9 @@ static DerivedMesh *applyModifier(ModifierData *md,
#else /* !WITH_MOD_REMESH */
-static DerivedMesh *applyModifier(ModifierData *UNUSED(md), Object *UNUSED(ob),
+static DerivedMesh *applyModifier(ModifierData *UNUSED(md),
+ const struct EvaluationContext *UNUSED(eval_ctx),
+ Object *UNUSED(ob),
DerivedMesh *derivedData,
ModifierApplyFlag UNUSED(flag))
{
@@ -231,7 +234,6 @@ ModifierTypeInfo modifierType_Remesh = {
/* requiredDataMask */ NULL,
/* freeData */ NULL,
/* isDisabled */ NULL,
- /* updateDepgraph */ NULL,
/* updateDepsgraph */ NULL,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_screw.c b/source/blender/modifiers/intern/MOD_screw.c
index 7896ea0a948..979dc339e4e 100644
--- a/source/blender/modifiers/intern/MOD_screw.c
+++ b/source/blender/modifiers/intern/MOD_screw.c
@@ -46,7 +46,6 @@
#include "BKE_cdderivedmesh.h"
#include "BKE_library_query.h"
-#include "depsgraph_private.h"
#include "DEG_depsgraph_build.h"
#include "MOD_modifiertypes.h"
@@ -185,8 +184,8 @@ static void copyData(ModifierData *md, ModifierData *target)
modifier_copyData_generic(md, target);
}
-static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
- DerivedMesh *derivedData,
+static DerivedMesh *applyModifier(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx),
+ Object *ob, DerivedMesh *derivedData,
ModifierApplyFlag flag)
{
DerivedMesh *dm = derivedData;
@@ -1118,24 +1117,6 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
return result;
}
-
-static void updateDepgraph(ModifierData *md, DagForest *forest,
- struct Main *UNUSED(bmain),
- struct Scene *UNUSED(scene),
- Object *UNUSED(ob),
- DagNode *obNode)
-{
- ScrewModifierData *ltmd = (ScrewModifierData *) md;
-
- if (ltmd->ob_axis) {
- DagNode *curNode = dag_get_node(forest, ltmd->ob_axis);
-
- dag_add_relation(forest, curNode, obNode,
- DAG_RL_DATA_DATA | DAG_RL_OB_DATA,
- "Screw Modifier");
- }
-}
-
static void updateDepsgraph(ModifierData *md,
struct Main *UNUSED(bmain),
struct Scene *UNUSED(scene),
@@ -1179,7 +1160,6 @@ ModifierTypeInfo modifierType_Screw = {
/* requiredDataMask */ NULL,
/* freeData */ NULL,
/* isDisabled */ NULL,
- /* updateDepgraph */ updateDepgraph,
/* updateDepsgraph */ updateDepsgraph,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_shapekey.c b/source/blender/modifiers/intern/MOD_shapekey.c
index 97aae733532..822decea423 100644
--- a/source/blender/modifiers/intern/MOD_shapekey.c
+++ b/source/blender/modifiers/intern/MOD_shapekey.c
@@ -44,8 +44,8 @@
#include "MOD_modifiertypes.h"
-static void deformVerts(ModifierData *UNUSED(md), Object *ob,
- DerivedMesh *UNUSED(derivedData),
+static void deformVerts(ModifierData *UNUSED(md), const struct EvaluationContext *UNUSED(eval_ctx),
+ Object *ob, DerivedMesh *UNUSED(derivedData),
float (*vertexCos)[3],
int numVerts,
ModifierApplyFlag UNUSED(flag))
@@ -61,7 +61,7 @@ static void deformVerts(ModifierData *UNUSED(md), Object *ob,
}
}
-static void deformMatrices(ModifierData *md, Object *ob, DerivedMesh *derivedData,
+static void deformMatrices(ModifierData *md, const struct EvaluationContext *eval_ctx, Object *ob, DerivedMesh *derivedData,
float (*vertexCos)[3], float (*defMats)[3][3], int numVerts)
{
Key *key = BKE_key_from_object(ob);
@@ -80,10 +80,10 @@ static void deformMatrices(ModifierData *md, Object *ob, DerivedMesh *derivedDat
copy_m3_m3(defMats[a], scale);
}
- deformVerts(md, ob, derivedData, vertexCos, numVerts, 0);
+ deformVerts(md, eval_ctx, ob, derivedData, vertexCos, numVerts, 0);
}
-static void deformVertsEM(ModifierData *md, Object *ob,
+static void deformVertsEM(ModifierData *md, const struct EvaluationContext *eval_ctx, Object *ob,
struct BMEditMesh *UNUSED(editData),
DerivedMesh *derivedData,
float (*vertexCos)[3],
@@ -92,11 +92,11 @@ static void deformVertsEM(ModifierData *md, Object *ob,
Key *key = BKE_key_from_object(ob);
if (key && key->type == KEY_RELATIVE)
- deformVerts(md, ob, derivedData, vertexCos, numVerts, 0);
+ deformVerts(md, eval_ctx, ob, derivedData, vertexCos, numVerts, 0);
}
-static void deformMatricesEM(ModifierData *UNUSED(md), Object *ob,
- struct BMEditMesh *UNUSED(editData),
+static void deformMatricesEM(ModifierData *UNUSED(md), const struct EvaluationContext *UNUSED(eval_ctx),
+ Object *ob, struct BMEditMesh *UNUSED(editData),
DerivedMesh *UNUSED(derivedData),
float (*vertexCos)[3],
float (*defMats)[3][3],
@@ -138,7 +138,6 @@ ModifierTypeInfo modifierType_ShapeKey = {
/* requiredDataMask */ NULL,
/* freeData */ NULL,
/* isDisabled */ NULL,
- /* updateDepgraph */ NULL,
/* updateDepsgraph */ NULL,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_shrinkwrap.c b/source/blender/modifiers/intern/MOD_shrinkwrap.c
index a14747bc153..8b9a7c42eb2 100644
--- a/source/blender/modifiers/intern/MOD_shrinkwrap.c
+++ b/source/blender/modifiers/intern/MOD_shrinkwrap.c
@@ -45,8 +45,6 @@
#include "BKE_modifier.h"
#include "BKE_shrinkwrap.h"
-#include "depsgraph_private.h"
-
#include "MOD_util.h"
static bool dependsOnNormals(ModifierData *md);
@@ -105,8 +103,8 @@ static void foreachObjectLink(ModifierData *md, Object *ob, ObjectWalkFunc walk,
walk(userData, ob, &smd->auxTarget, IDWALK_CB_NOP);
}
-static void deformVerts(ModifierData *md, Object *ob,
- DerivedMesh *derivedData,
+static void deformVerts(ModifierData *md, const struct EvaluationContext *eval_ctx,
+ Object *ob, DerivedMesh *derivedData,
float (*vertexCos)[3],
int numVerts,
ModifierApplyFlag flag)
@@ -120,13 +118,14 @@ static void deformVerts(ModifierData *md, Object *ob,
dm = get_cddm(ob, NULL, dm, vertexCos, dependsOnNormals(md));
}
- shrinkwrapModifier_deform((ShrinkwrapModifierData *)md, ob, dm, vertexCos, numVerts, forRender);
+ shrinkwrapModifier_deform(eval_ctx, (ShrinkwrapModifierData *)md, ob, dm, vertexCos, numVerts, forRender);
if (dm != derivedData)
dm->release(dm);
}
-static void deformVertsEM(ModifierData *md, Object *ob, struct BMEditMesh *editData, DerivedMesh *derivedData,
+static void deformVertsEM(ModifierData *md, const struct EvaluationContext *eval_ctx, Object *ob,
+ struct BMEditMesh *editData, DerivedMesh *derivedData,
float (*vertexCos)[3], int numVerts)
{
DerivedMesh *dm = derivedData;
@@ -137,29 +136,12 @@ static void deformVertsEM(ModifierData *md, Object *ob, struct BMEditMesh *editD
dm = get_cddm(ob, editData, dm, vertexCos, dependsOnNormals(md));
}
- shrinkwrapModifier_deform((ShrinkwrapModifierData *)md, ob, dm, vertexCos, numVerts, false);
+ shrinkwrapModifier_deform(eval_ctx, (ShrinkwrapModifierData *)md, ob, dm, vertexCos, numVerts, false);
if (dm != derivedData)
dm->release(dm);
}
-static void updateDepgraph(ModifierData *md, DagForest *forest,
- struct Main *UNUSED(bmain),
- struct Scene *UNUSED(scene),
- Object *UNUSED(ob),
- DagNode *obNode)
-{
- ShrinkwrapModifierData *smd = (ShrinkwrapModifierData *) md;
-
- if (smd->target)
- dag_add_relation(forest, dag_get_node(forest, smd->target), obNode,
- DAG_RL_OB_DATA | DAG_RL_DATA_DATA, "Shrinkwrap Modifier");
-
- if (smd->auxTarget)
- dag_add_relation(forest, dag_get_node(forest, smd->auxTarget), obNode,
- DAG_RL_OB_DATA | DAG_RL_DATA_DATA, "Shrinkwrap Modifier");
-}
-
static void updateDepsgraph(ModifierData *md,
struct Main *UNUSED(bmain),
struct Scene *UNUSED(scene),
@@ -209,7 +191,6 @@ ModifierTypeInfo modifierType_Shrinkwrap = {
/* requiredDataMask */ requiredDataMask,
/* freeData */ NULL,
/* isDisabled */ isDisabled,
- /* updateDepgraph */ updateDepgraph,
/* updateDepsgraph */ updateDepsgraph,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ dependsOnNormals,
diff --git a/source/blender/modifiers/intern/MOD_simpledeform.c b/source/blender/modifiers/intern/MOD_simpledeform.c
index 00c1fc90d27..6116e49d07d 100644
--- a/source/blender/modifiers/intern/MOD_simpledeform.c
+++ b/source/blender/modifiers/intern/MOD_simpledeform.c
@@ -43,9 +43,6 @@
#include "BKE_modifier.h"
#include "BKE_deform.h"
-
-#include "depsgraph_private.h"
-
#include "MOD_util.h"
#define BEND_EPS 0.000001f
@@ -378,18 +375,6 @@ static void foreachObjectLink(
walk(userData, ob, &smd->origin, IDWALK_CB_NOP);
}
-static void updateDepgraph(ModifierData *md, DagForest *forest,
- struct Main *UNUSED(bmain),
- struct Scene *UNUSED(scene),
- Object *UNUSED(ob),
- DagNode *obNode)
-{
- SimpleDeformModifierData *smd = (SimpleDeformModifierData *)md;
-
- if (smd->origin)
- dag_add_relation(forest, dag_get_node(forest, smd->origin), obNode, DAG_RL_OB_DATA, "SimpleDeform Modifier");
-}
-
static void updateDepsgraph(ModifierData *md,
struct Main *UNUSED(bmain),
struct Scene *UNUSED(scene),
@@ -402,8 +387,8 @@ static void updateDepsgraph(ModifierData *md,
}
}
-static void deformVerts(ModifierData *md, Object *ob,
- DerivedMesh *derivedData,
+static void deformVerts(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx),
+ Object *ob, DerivedMesh *derivedData,
float (*vertexCos)[3],
int numVerts,
ModifierApplyFlag UNUSED(flag))
@@ -422,8 +407,8 @@ static void deformVerts(ModifierData *md, Object *ob,
dm->release(dm);
}
-static void deformVertsEM(ModifierData *md, Object *ob,
- struct BMEditMesh *editData,
+static void deformVertsEM(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx),
+ Object *ob, struct BMEditMesh *editData,
DerivedMesh *derivedData,
float (*vertexCos)[3],
int numVerts)
@@ -466,7 +451,6 @@ ModifierTypeInfo modifierType_SimpleDeform = {
/* requiredDataMask */ requiredDataMask,
/* freeData */ NULL,
/* isDisabled */ NULL,
- /* updateDepgraph */ updateDepgraph,
/* updateDepsgraph */ updateDepsgraph,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_skin.c b/source/blender/modifiers/intern/MOD_skin.c
index 6006b486280..97afe6d5e87 100644
--- a/source/blender/modifiers/intern/MOD_skin.c
+++ b/source/blender/modifiers/intern/MOD_skin.c
@@ -1917,6 +1917,7 @@ static void copyData(ModifierData *md, ModifierData *target)
}
static DerivedMesh *applyModifier(ModifierData *md,
+ const struct EvaluationContext *UNUSED(eval_ctx),
Object *UNUSED(ob),
DerivedMesh *dm,
ModifierApplyFlag UNUSED(flag))
@@ -1952,7 +1953,6 @@ ModifierTypeInfo modifierType_Skin = {
/* requiredDataMask */ requiredDataMask,
/* freeData */ NULL,
/* isDisabled */ NULL,
- /* updateDepgraph */ NULL,
/* updateDepsgraph */ NULL,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_smoke.c b/source/blender/modifiers/intern/MOD_smoke.c
index ab4952a3aa9..9881d7ee9b9 100644
--- a/source/blender/modifiers/intern/MOD_smoke.c
+++ b/source/blender/modifiers/intern/MOD_smoke.c
@@ -46,13 +46,14 @@
#include "BLI_utildefines.h"
#include "BKE_cdderivedmesh.h"
+#include "BKE_layer.h"
#include "BKE_library.h"
#include "BKE_library_query.h"
#include "BKE_main.h"
#include "BKE_modifier.h"
#include "BKE_smoke.h"
-#include "depsgraph_private.h"
+#include "DEG_depsgraph.h"
#include "DEG_depsgraph_build.h"
#include "MOD_modifiertypes.h"
@@ -101,8 +102,8 @@ static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
return dataMask;
}
-static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
- DerivedMesh *dm,
+static DerivedMesh *applyModifier(ModifierData *md, const EvaluationContext *eval_ctx,
+ Object *ob, DerivedMesh *dm,
ModifierApplyFlag flag)
{
SmokeModifierData *smd = (SmokeModifierData *) md;
@@ -110,7 +111,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
if (flag & MOD_APPLY_ORCO)
return dm;
- return smokeModifier_do(smd, md->scene, ob, dm);
+ return smokeModifier_do(smd, eval_ctx, md->scene, ob, dm);
}
static bool dependsOnTime(ModifierData *UNUSED(md))
@@ -130,28 +131,6 @@ static bool is_coll_cb(Object *UNUSED(ob), ModifierData *md)
return (smd->type & MOD_SMOKE_TYPE_COLL) && smd->coll;
}
-static void updateDepgraph(ModifierData *md, DagForest *forest,
- struct Main *UNUSED(bmain),
- struct Scene *scene, struct Object *ob,
- DagNode *obNode)
-{
- SmokeModifierData *smd = (SmokeModifierData *) md;
-
- if (smd && (smd->type & MOD_SMOKE_TYPE_DOMAIN) && smd->domain) {
- /* Actual code uses get_collisionobjects */
-#ifdef WITH_LEGACY_DEPSGRAPH
- dag_add_collision_relations(forest, scene, ob, obNode, smd->domain->fluid_group, ob->lay|scene->lay, eModifierType_Smoke, is_flow_cb, true, "Smoke Flow");
- dag_add_collision_relations(forest, scene, ob, obNode, smd->domain->coll_group, ob->lay|scene->lay, eModifierType_Smoke, is_coll_cb, true, "Smoke Coll");
- dag_add_forcefield_relations(forest, scene, ob, obNode, smd->domain->effector_weights, true, PFIELD_SMOKEFLOW, "Smoke Force Field");
-#else
- (void)forest;
- (void)scene;
- (void)ob;
- (void)obNode;
-#endif
- }
-}
-
static void updateDepsgraph(ModifierData *md,
struct Main *UNUSED(bmain),
struct Scene *scene,
@@ -162,8 +141,8 @@ static void updateDepsgraph(ModifierData *md,
if (smd && (smd->type & MOD_SMOKE_TYPE_DOMAIN) && smd->domain) {
/* Actual code uses get_collisionobjects */
- DEG_add_collision_relations(node, scene, ob, smd->domain->fluid_group, ob->lay|scene->lay, eModifierType_Smoke, is_flow_cb, true, "Smoke Flow");
- DEG_add_collision_relations(node, scene, ob, smd->domain->coll_group, ob->lay|scene->lay, eModifierType_Smoke, is_coll_cb, true, "Smoke Coll");
+ DEG_add_collision_relations(node, scene, ob, smd->domain->fluid_group, eModifierType_Smoke, is_flow_cb, true, "Smoke Flow");
+ DEG_add_collision_relations(node, scene, ob, smd->domain->coll_group, eModifierType_Smoke, is_coll_cb, true, "Smoke Coll");
DEG_add_forcefield_relations(node, scene, ob, smd->domain->effector_weights, true, PFIELD_SMOKEFLOW, "Smoke Force Field");
}
@@ -209,7 +188,6 @@ ModifierTypeInfo modifierType_Smoke = {
/* requiredDataMask */ requiredDataMask,
/* freeData */ freeData,
/* isDisabled */ NULL,
- /* updateDepgraph */ updateDepgraph,
/* updateDepsgraph */ updateDepsgraph,
/* dependsOnTime */ dependsOnTime,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_smooth.c b/source/blender/modifiers/intern/MOD_smooth.c
index 92025512f02..91c724cd1c9 100644
--- a/source/blender/modifiers/intern/MOD_smooth.c
+++ b/source/blender/modifiers/intern/MOD_smooth.c
@@ -215,7 +215,7 @@ static void smoothModifier_do(
MEM_freeN(uctmp);
}
-static void deformVerts(ModifierData *md, Object *ob, DerivedMesh *derivedData,
+static void deformVerts(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx), Object *ob, DerivedMesh *derivedData,
float (*vertexCos)[3], int numVerts, ModifierApplyFlag UNUSED(flag))
{
DerivedMesh *dm = get_dm(ob, NULL, derivedData, NULL, false, false);
@@ -228,7 +228,7 @@ static void deformVerts(ModifierData *md, Object *ob, DerivedMesh *derivedData,
}
static void deformVertsEM(
- ModifierData *md, Object *ob, struct BMEditMesh *editData,
+ ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx), Object *ob, struct BMEditMesh *editData,
DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
{
DerivedMesh *dm = get_dm(ob, editData, derivedData, NULL, false, false);
@@ -261,7 +261,6 @@ ModifierTypeInfo modifierType_Smooth = {
/* requiredDataMask */ requiredDataMask,
/* freeData */ NULL,
/* isDisabled */ isDisabled,
- /* updateDepgraph */ NULL,
/* updateDepsgraph */ NULL,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_softbody.c b/source/blender/modifiers/intern/MOD_softbody.c
index 8b33f197490..d0b1d7361cc 100644
--- a/source/blender/modifiers/intern/MOD_softbody.c
+++ b/source/blender/modifiers/intern/MOD_softbody.c
@@ -40,21 +40,22 @@
#include "BLI_utildefines.h"
#include "BKE_cdderivedmesh.h"
+#include "BKE_layer.h"
#include "BKE_particle.h"
#include "BKE_softbody.h"
-#include "depsgraph_private.h"
+#include "DEG_depsgraph.h"
#include "DEG_depsgraph_build.h"
#include "MOD_modifiertypes.h"
-static void deformVerts(ModifierData *md, Object *ob,
+static void deformVerts(ModifierData *md, const EvaluationContext *eval_ctx, Object *ob,
DerivedMesh *UNUSED(derivedData),
float (*vertexCos)[3],
int numVerts,
ModifierApplyFlag UNUSED(flag))
{
- sbObjectStep(md->scene, ob, (float)md->scene->r.cfra, vertexCos, numVerts);
+ sbObjectStep(eval_ctx, md->scene, ob, (float)md->scene->r.cfra, vertexCos, numVerts);
}
static bool dependsOnTime(ModifierData *UNUSED(md))
@@ -62,25 +63,6 @@ static bool dependsOnTime(ModifierData *UNUSED(md))
return true;
}
-static void updateDepgraph(ModifierData *UNUSED(md), DagForest *forest,
- struct Main *UNUSED(bmain),
- Scene *scene, Object *ob, DagNode *obNode)
-{
- if (ob->soft) {
-#ifdef WITH_LEGACY_DEPSGRAPH
- /* Actual code uses ccd_build_deflector_hash */
- dag_add_collision_relations(forest, scene, ob, obNode, ob->soft->collision_group, ob->lay, eModifierType_Collision, NULL, false, "Softbody Collision");
-
- dag_add_forcefield_relations(forest, scene, ob, obNode, ob->soft->effector_weights, true, 0, "Softbody Field");
-#else
- (void)forest;
- (void)scene;
- (void)ob;
- (void)obNode;
-#endif
- }
-}
-
static void updateDepsgraph(ModifierData *UNUSED(md),
struct Main *UNUSED(bmain),
struct Scene *scene,
@@ -89,7 +71,7 @@ static void updateDepsgraph(ModifierData *UNUSED(md),
{
if (ob->soft) {
/* Actual code uses ccd_build_deflector_hash */
- DEG_add_collision_relations(node, scene, ob, ob->soft->collision_group, ob->lay, eModifierType_Collision, NULL, false, "Softbody Collision");
+ DEG_add_collision_relations(node, scene, ob, ob->soft->collision_group, eModifierType_Collision, NULL, false, "Softbody Collision");
DEG_add_forcefield_relations(node, scene, ob, ob->soft->effector_weights, true, 0, "Softbody Field");
}
@@ -116,7 +98,6 @@ ModifierTypeInfo modifierType_Softbody = {
/* requiredDataMask */ NULL,
/* freeData */ NULL,
/* isDisabled */ NULL,
- /* updateDepgraph */ updateDepgraph,
/* updateDepsgraph */ updateDepsgraph,
/* dependsOnTime */ dependsOnTime,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_solidify.c b/source/blender/modifiers/intern/MOD_solidify.c
index aa5b0caea2a..5635d37f100 100644
--- a/source/blender/modifiers/intern/MOD_solidify.c
+++ b/source/blender/modifiers/intern/MOD_solidify.c
@@ -205,8 +205,8 @@ BLI_INLINE void madd_v3v3short_fl(float r[3], const short a[3], const float f)
}
static DerivedMesh *applyModifier(
- ModifierData *md, Object *ob,
- DerivedMesh *dm,
+ ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx),
+ Object *ob, DerivedMesh *dm,
ModifierApplyFlag UNUSED(flag))
{
DerivedMesh *result;
@@ -973,7 +973,6 @@ ModifierTypeInfo modifierType_Solidify = {
/* requiredDataMask */ requiredDataMask,
/* freeData */ NULL,
/* isDisabled */ NULL,
- /* updateDepgraph */ NULL,
/* updateDepsgraph */ NULL,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ dependsOnNormals,
diff --git a/source/blender/modifiers/intern/MOD_subsurf.c b/source/blender/modifiers/intern/MOD_subsurf.c
index 8711384e1ee..8fd510a6662 100644
--- a/source/blender/modifiers/intern/MOD_subsurf.c
+++ b/source/blender/modifiers/intern/MOD_subsurf.c
@@ -46,10 +46,12 @@
#include "BKE_cdderivedmesh.h"
-#include "BKE_depsgraph.h"
#include "BKE_scene.h"
#include "BKE_subsurf.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_query.h"
+
#include "MOD_modifiertypes.h"
#include "intern/CCGSubSurf.h"
@@ -96,8 +98,8 @@ static bool isDisabled(ModifierData *md, int useRenderParams)
return get_render_subsurf_level(&md->scene->r, levels, useRenderParams != 0) == 0;
}
-static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
- DerivedMesh *derivedData,
+static DerivedMesh *applyModifier(ModifierData *md, const EvaluationContext *eval_ctx,
+ Object *ob, DerivedMesh *derivedData,
ModifierApplyFlag flag)
{
SubsurfModifierData *smd = (SubsurfModifierData *) md;
@@ -115,7 +117,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
subsurf_flags |= SUBSURF_USE_RENDER_PARAMS;
if (isFinalCalc)
subsurf_flags |= SUBSURF_IS_FINAL_CALC;
- if (ob->mode & OB_MODE_EDIT)
+ if (eval_ctx->object_mode & OB_MODE_EDIT)
subsurf_flags |= SUBSURF_IN_EDIT_MODE;
#ifdef WITH_OPENSUBDIV
@@ -130,10 +132,10 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
if (U.opensubdiv_compute_type == USER_OPENSUBDIV_COMPUTE_NONE) {
modifier_setError(md, "OpenSubdiv is disabled in User Preferences");
}
- else if ((ob->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT)) != 0) {
+ else if ((eval_ctx->object_mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT)) != 0) {
modifier_setError(md, "OpenSubdiv is not supported in paint modes");
}
- else if ((DAG_get_eval_flags_for_object(md->scene, ob) & DAG_EVAL_NEED_CPU) == 0) {
+ else if ((DEG_get_eval_flags_for_id(eval_ctx->depsgraph, &ob->id) & DAG_EVAL_NEED_CPU) == 0) {
subsurf_flags |= SUBSURF_USE_GPU_BACKEND;
do_cddm_convert = false;
}
@@ -141,24 +143,32 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
modifier_setError(md, "OpenSubdiv is disabled due to dependencies");
}
}
+#else
+ UNUSED_VARS(ob);
#endif
result = subsurf_make_derived_from_derived(derivedData, smd, NULL, subsurf_flags);
result->cd_flag = derivedData->cd_flag;
- if (do_cddm_convert) {
+ {
DerivedMesh *cddm = CDDM_copy(result);
result->release(result);
result = cddm;
}
+#ifndef WITH_OPESUBDIV
+ (void) do_cddm_convert;
+ UNUSED_VARS(eval_ctx);
+#endif
+
return result;
}
-static DerivedMesh *applyModifierEM(ModifierData *md, Object *UNUSED(ob),
- struct BMEditMesh *UNUSED(editData),
- DerivedMesh *derivedData,
- ModifierApplyFlag flag)
+static DerivedMesh *applyModifierEM(
+ ModifierData *md, const EvaluationContext *UNUSED(eval_ctx),
+ Object *UNUSED(ob), struct BMEditMesh *UNUSED(editData),
+ DerivedMesh *derivedData,
+ ModifierApplyFlag flag)
{
SubsurfModifierData *smd = (SubsurfModifierData *) md;
DerivedMesh *result;
@@ -211,7 +221,6 @@ ModifierTypeInfo modifierType_Subsurf = {
/* requiredDataMask */ NULL,
/* freeData */ freeData,
/* isDisabled */ isDisabled,
- /* updateDepgraph */ NULL,
/* updateDepsgraph */ NULL,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ dependsOnNormals,
diff --git a/source/blender/modifiers/intern/MOD_surface.c b/source/blender/modifiers/intern/MOD_surface.c
index 7bb4c0b2fd1..bef35ccf1fe 100644
--- a/source/blender/modifiers/intern/MOD_surface.c
+++ b/source/blender/modifiers/intern/MOD_surface.c
@@ -85,8 +85,8 @@ static bool dependsOnTime(ModifierData *UNUSED(md))
return true;
}
-static void deformVerts(ModifierData *md, Object *ob,
- DerivedMesh *derivedData,
+static void deformVerts(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx),
+ Object *ob, DerivedMesh *derivedData,
float (*vertexCos)[3],
int UNUSED(numVerts),
ModifierApplyFlag UNUSED(flag))
@@ -186,7 +186,6 @@ ModifierTypeInfo modifierType_Surface = {
/* requiredDataMask */ NULL,
/* freeData */ freeData,
/* isDisabled */ NULL,
- /* updateDepgraph */ NULL,
/* updateDepsgraph */ NULL,
/* dependsOnTime */ dependsOnTime,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_surfacedeform.c b/source/blender/modifiers/intern/MOD_surfacedeform.c
index 14128b258b9..046a0ab27bf 100644
--- a/source/blender/modifiers/intern/MOD_surfacedeform.c
+++ b/source/blender/modifiers/intern/MOD_surfacedeform.c
@@ -11,8 +11,6 @@
#include "BKE_library_query.h"
#include "BKE_modifier.h"
-#include "depsgraph_private.h"
-
#include "MEM_guardedalloc.h"
#include "MOD_util.h"
@@ -170,21 +168,6 @@ static void foreachObjectLink(ModifierData *md, Object *ob, ObjectWalkFunc walk,
walk(userData, ob, &smd->target, IDWALK_NOP);
}
-static void updateDepgraph(ModifierData *md, DagForest *forest,
- struct Main *UNUSED(bmain),
- struct Scene *UNUSED(scene),
- Object *UNUSED(ob),
- DagNode *obNode)
-{
- SurfaceDeformModifierData *smd = (SurfaceDeformModifierData *)md;
-
- if (smd->target) {
- DagNode *curNode = dag_get_node(forest, smd->target);
-
- dag_add_relation(forest, curNode, obNode, DAG_RL_DATA_DATA, "Surface Deform Modifier");
- }
-}
-
static void updateDepsgraph(ModifierData *md,
struct Main *UNUSED(bmain),
struct Scene *UNUSED(scene),
@@ -1197,16 +1180,16 @@ static void surfacedeformModifier_do(ModifierData *md, float (*vertexCos)[3], un
}
}
-static void deformVerts(ModifierData *md, Object *ob,
- DerivedMesh *UNUSED(derivedData),
+static void deformVerts(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx),
+ Object *ob, DerivedMesh *UNUSED(derivedData),
float (*vertexCos)[3], int numVerts,
ModifierApplyFlag UNUSED(flag))
{
surfacedeformModifier_do(md, vertexCos, numVerts, ob);
}
-static void deformVertsEM(ModifierData *md, Object *ob,
- struct BMEditMesh *UNUSED(editData),
+static void deformVertsEM(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx),
+ Object *ob, struct BMEditMesh *UNUSED(editData),
DerivedMesh *UNUSED(derivedData),
float (*vertexCos)[3], int numVerts)
{
@@ -1239,7 +1222,6 @@ ModifierTypeInfo modifierType_SurfaceDeform = {
/* requiredDataMask */ NULL,
/* freeData */ freeData,
/* isDisabled */ isDisabled,
- /* updateDepgraph */ updateDepgraph,
/* updateDepsgraph */ updateDepsgraph,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_triangulate.c b/source/blender/modifiers/intern/MOD_triangulate.c
index b057d6d5a86..5dd7e3dfda4 100644
--- a/source/blender/modifiers/intern/MOD_triangulate.c
+++ b/source/blender/modifiers/intern/MOD_triangulate.c
@@ -85,6 +85,7 @@ static void copyData(ModifierData *md, ModifierData *target)
}
static DerivedMesh *applyModifier(ModifierData *md,
+ const struct EvaluationContext *UNUSED(eval_ctx),
Object *UNUSED(ob),
DerivedMesh *dm,
ModifierApplyFlag UNUSED(flag))
@@ -120,7 +121,6 @@ ModifierTypeInfo modifierType_Triangulate = {
/* requiredDataMask */ NULL, //requiredDataMask,
/* freeData */ NULL,
/* isDisabled */ NULL,
- /* updateDepgraph */ NULL,
/* updateDepsgraph */ NULL,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_uvproject.c b/source/blender/modifiers/intern/MOD_uvproject.c
index 89ce50d076a..498dd2486f4 100644
--- a/source/blender/modifiers/intern/MOD_uvproject.c
+++ b/source/blender/modifiers/intern/MOD_uvproject.c
@@ -47,6 +47,7 @@
#include "BKE_camera.h"
#include "BKE_library.h"
#include "BKE_library_query.h"
+#include "BKE_material.h"
#include "BKE_mesh.h"
#include "BKE_DerivedMesh.h"
@@ -54,14 +55,13 @@
#include "MEM_guardedalloc.h"
-#include "depsgraph_private.h"
#include "DEG_depsgraph_build.h"
static void initData(ModifierData *md)
{
UVProjectModifierData *umd = (UVProjectModifierData *) md;
- umd->flags = 0;
+
umd->num_projectors = 1;
umd->aspectx = umd->aspecty = 1.0f;
umd->scalex = umd->scaley = 1.0f;
@@ -84,7 +84,7 @@ static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *UNUSED(
CustomDataMask dataMask = 0;
/* ask for UV coordinates */
- dataMask |= CD_MLOOPUV | CD_MTEXPOLY;
+ dataMask |= CD_MLOOPUV;
return dataMask;
}
@@ -109,25 +109,6 @@ static void foreachIDLink(ModifierData *md, Object *ob,
foreachObjectLink(md, ob, (ObjectWalkFunc)walk, userData);
}
-static void updateDepgraph(ModifierData *md, DagForest *forest,
- struct Main *UNUSED(bmain),
- struct Scene *UNUSED(scene),
- Object *UNUSED(ob),
- DagNode *obNode)
-{
- UVProjectModifierData *umd = (UVProjectModifierData *) md;
- int i;
-
- for (i = 0; i < umd->num_projectors; ++i) {
- if (umd->projectors[i]) {
- DagNode *curNode = dag_get_node(forest, umd->projectors[i]);
-
- dag_add_relation(forest, curNode, obNode,
- DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "UV Project Modifier");
- }
- }
-}
-
static void updateDepsgraph(ModifierData *md,
struct Main *UNUSED(bmain),
struct Scene *UNUSED(scene),
@@ -155,12 +136,10 @@ static DerivedMesh *uvprojectModifier_do(UVProjectModifierData *umd,
{
float (*coords)[3], (*co)[3];
MLoopUV *mloop_uv;
- MTexPoly *mtexpoly, *mt = NULL;
int i, numVerts, numPolys, numLoops;
Image *image = umd->image;
MPoly *mpoly, *mp;
MLoop *mloop;
- const bool override_image = (umd->flags & MOD_UVPROJECT_OVERRIDEIMAGE) != 0;
Projector projectors[MOD_UVPROJECT_MAXPROJECTORS];
int num_projectors = 0;
char uvname[MAX_CUSTOMDATA_LAYER_NAME];
@@ -245,10 +224,6 @@ static DerivedMesh *uvprojectModifier_do(UVProjectModifierData *umd,
mloop_uv = CustomData_duplicate_referenced_layer_named(&dm->loopData,
CD_MLOOPUV, uvname, numLoops);
- /* can be NULL */
- mt = mtexpoly = CustomData_duplicate_referenced_layer_named(&dm->polyData,
- CD_MTEXPOLY, uvname, numPolys);
-
numVerts = dm->getNumVerts(dm);
coords = MEM_malloc_arrayN(numVerts, sizeof(*coords),
@@ -267,9 +242,14 @@ static DerivedMesh *uvprojectModifier_do(UVProjectModifierData *umd,
mpoly = dm->getPolyArray(dm);
mloop = dm->getLoopArray(dm);
+ Image **ob_image_array = NULL;
+ if (image) {
+ ob_image_array = BKE_object_material_edit_image_get_array(ob);
+ }
+
/* apply coords as UVs, and apply image if tfaces are new */
- for (i = 0, mp = mpoly; i < numPolys; ++i, ++mp, ++mt) {
- if (override_image || !image || (mtexpoly == NULL || mt->tpage == image)) {
+ for (i = 0, mp = mpoly; i < numPolys; ++i, ++mp) {
+ if (!image || (mp->mat_nr < ob->totcol ? ob_image_array[mp->mat_nr] : NULL) == image) {
if (num_projectors == 1) {
if (projectors[0].uci) {
unsigned int fidx = mp->totloop - 1;
@@ -332,13 +312,13 @@ static DerivedMesh *uvprojectModifier_do(UVProjectModifierData *umd,
}
}
}
-
- if (override_image && mtexpoly) {
- mt->tpage = image;
- }
}
MEM_freeN(coords);
+
+ if (ob_image_array) {
+ MEM_freeN(ob_image_array);
+ }
if (free_uci) {
int j;
@@ -355,8 +335,8 @@ static DerivedMesh *uvprojectModifier_do(UVProjectModifierData *umd,
return dm;
}
-static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
- DerivedMesh *derivedData,
+static DerivedMesh *applyModifier(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx),
+ Object *ob, DerivedMesh *derivedData,
ModifierApplyFlag UNUSED(flag))
{
DerivedMesh *result;
@@ -389,7 +369,6 @@ ModifierTypeInfo modifierType_UVProject = {
/* requiredDataMask */ requiredDataMask,
/* freeData */ NULL,
/* isDisabled */ NULL,
- /* updateDepgraph */ updateDepgraph,
/* updateDepsgraph */ updateDepsgraph,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_uvwarp.c b/source/blender/modifiers/intern/MOD_uvwarp.c
index b263f792741..32974d68d9d 100644
--- a/source/blender/modifiers/intern/MOD_uvwarp.c
+++ b/source/blender/modifiers/intern/MOD_uvwarp.c
@@ -40,8 +40,6 @@
#include "BKE_library_query.h"
#include "BKE_modifier.h"
-#include "depsgraph_private.h"
-
#include "MOD_util.h"
@@ -148,8 +146,8 @@ static void uv_warp_compute(
}
}
-static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
- DerivedMesh *dm,
+static DerivedMesh *applyModifier(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx),
+ Object *ob, DerivedMesh *dm,
ModifierApplyFlag UNUSED(flag))
{
UVWarpModifierData *umd = (UVWarpModifierData *) md;
@@ -234,34 +232,9 @@ static void foreachObjectLink(ModifierData *md, Object *ob, ObjectWalkFunc walk,
walk(userData, ob, &umd->object_src, IDWALK_CB_NOP);
}
-static void uv_warp_deps_object_bone(DagForest *forest, DagNode *obNode,
- Object *obj, const char *bonename)
-{
- if (obj) {
- DagNode *curNode = dag_get_node(forest, obj);
-
- if (bonename[0])
- dag_add_relation(forest, curNode, obNode, DAG_RL_OB_DATA | DAG_RL_DATA_DATA, "UVWarp Modifier");
- else
- dag_add_relation(forest, curNode, obNode, DAG_RL_OB_DATA, "UVWarp Modifier");
- }
-}
-
-static void updateDepgraph(ModifierData *md, DagForest *forest,
- struct Main *UNUSED(bmain),
- struct Scene *UNUSED(scene),
- Object *UNUSED(ob),
- DagNode *obNode)
-{
- UVWarpModifierData *umd = (UVWarpModifierData *) md;
-
- uv_warp_deps_object_bone(forest, obNode, umd->object_src, umd->bone_src);
- uv_warp_deps_object_bone(forest, obNode, umd->object_dst, umd->bone_dst);
-}
-
-static void uv_warp_deps_object_bone_new(struct DepsNodeHandle *node,
- Object *object,
- const char *bonename)
+static void uv_warp_deps_object_bone(struct DepsNodeHandle *node,
+ Object *object,
+ const char *bonename)
{
if (object != NULL) {
if (bonename[0])
@@ -279,8 +252,8 @@ static void updateDepsgraph(ModifierData *md,
{
UVWarpModifierData *umd = (UVWarpModifierData *) md;
- uv_warp_deps_object_bone_new(node, umd->object_src, umd->bone_src);
- uv_warp_deps_object_bone_new(node, umd->object_dst, umd->bone_dst);
+ uv_warp_deps_object_bone(node, umd->object_src, umd->bone_src);
+ uv_warp_deps_object_bone(node, umd->object_dst, umd->bone_dst);
}
ModifierTypeInfo modifierType_UVWarp = {
@@ -302,7 +275,6 @@ ModifierTypeInfo modifierType_UVWarp = {
/* requiredDataMask */ requiredDataMask,
/* freeData */ NULL,
/* isDisabled */ NULL,
- /* updateDepgraph */ updateDepgraph,
/* updateDepsgraph */ updateDepsgraph,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_warp.c b/source/blender/modifiers/intern/MOD_warp.c
index 62813d75793..be0be2671b9 100644
--- a/source/blender/modifiers/intern/MOD_warp.c
+++ b/source/blender/modifiers/intern/MOD_warp.c
@@ -42,8 +42,6 @@
#include "BKE_texture.h"
#include "BKE_colortools.h"
-#include "depsgraph_private.h"
-
#include "RE_shader_ext.h"
#include "MOD_util.h"
@@ -139,27 +137,6 @@ static void foreachTexLink(ModifierData *md, Object *ob, TexWalkFunc walk, void
walk(userData, ob, md, "texture");
}
-static void updateDepgraph(ModifierData *md, DagForest *forest,
- struct Main *UNUSED(bmain),
- struct Scene *UNUSED(scene),
- Object *UNUSED(ob), DagNode *obNode)
-{
- WarpModifierData *wmd = (WarpModifierData *) md;
-
- if (wmd->object_from && wmd->object_to) {
- DagNode *fromNode = dag_get_node(forest, wmd->object_from);
- DagNode *toNode = dag_get_node(forest, wmd->object_to);
-
- dag_add_relation(forest, fromNode, obNode, DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "Warp Modifier1");
- dag_add_relation(forest, toNode, obNode, DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "Warp Modifier2");
- }
-
- if ((wmd->texmapping == MOD_DISP_MAP_OBJECT) && wmd->map_object) {
- DagNode *curNode = dag_get_node(forest, wmd->map_object);
- dag_add_relation(forest, curNode, obNode, DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "Warp Modifier3");
- }
-}
-
static void updateDepsgraph(ModifierData *md,
struct Main *UNUSED(bmain),
struct Scene *UNUSED(scene),
@@ -336,7 +313,7 @@ static int warp_needs_dm(WarpModifierData *wmd)
return wmd->texture || wmd->defgrp_name[0];
}
-static void deformVerts(ModifierData *md, Object *ob, DerivedMesh *derivedData,
+static void deformVerts(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx), Object *ob, DerivedMesh *derivedData,
float (*vertexCos)[3], int numVerts, ModifierApplyFlag UNUSED(flag))
{
DerivedMesh *dm = NULL;
@@ -353,7 +330,7 @@ static void deformVerts(ModifierData *md, Object *ob, DerivedMesh *derivedData,
}
}
-static void deformVertsEM(ModifierData *md, Object *ob, struct BMEditMesh *em,
+static void deformVertsEM(ModifierData *md, const struct EvaluationContext *eval_ctx, Object *ob, struct BMEditMesh *em,
DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
{
DerivedMesh *dm = derivedData;
@@ -364,7 +341,7 @@ static void deformVertsEM(ModifierData *md, Object *ob, struct BMEditMesh *em,
dm = CDDM_from_editbmesh(em, false, false);
}
- deformVerts(md, ob, dm, vertexCos, numVerts, 0);
+ deformVerts(md, eval_ctx, ob, dm, vertexCos, numVerts, 0);
if (use_dm) {
if (!derivedData) dm->release(dm);
@@ -391,7 +368,6 @@ ModifierTypeInfo modifierType_Warp = {
/* requiredDataMask */ requiredDataMask,
/* freeData */ freeData,
/* isDisabled */ isDisabled,
- /* updateDepgraph */ updateDepgraph,
/* updateDepsgraph */ updateDepsgraph,
/* dependsOnTime */ dependsOnTime,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_wave.c b/source/blender/modifiers/intern/MOD_wave.c
index 9e351d1e411..1271cccd719 100644
--- a/source/blender/modifiers/intern/MOD_wave.c
+++ b/source/blender/modifiers/intern/MOD_wave.c
@@ -49,14 +49,14 @@
#include "BKE_scene.h"
#include "BKE_texture.h"
-#include "depsgraph_private.h"
-
#include "MEM_guardedalloc.h"
#include "RE_shader_ext.h"
#include "MOD_modifiertypes.h"
#include "MOD_util.h"
+#include "DEG_depsgraph.h"
+
static void initData(ModifierData *md)
{
WaveModifierData *wmd = (WaveModifierData *) md; // whadya know, moved here from Iraq
@@ -127,29 +127,6 @@ static void foreachTexLink(ModifierData *md, Object *ob,
walk(userData, ob, md, "texture");
}
-static void updateDepgraph(ModifierData *md, DagForest *forest,
- struct Main *UNUSED(bmain),
- Scene *UNUSED(scene),
- Object *UNUSED(ob),
- DagNode *obNode)
-{
- WaveModifierData *wmd = (WaveModifierData *) md;
-
- if (wmd->objectcenter) {
- DagNode *curNode = dag_get_node(forest, wmd->objectcenter);
-
- dag_add_relation(forest, curNode, obNode, DAG_RL_OB_DATA,
- "Wave Modifier");
- }
-
- if (wmd->map_object) {
- DagNode *curNode = dag_get_node(forest, wmd->map_object);
-
- dag_add_relation(forest, curNode, obNode, DAG_RL_OB_DATA,
- "Wave Modifer");
- }
-}
-
static void updateDepsgraph(ModifierData *md,
struct Main *UNUSED(bmain),
struct Scene *UNUSED(scene),
@@ -182,15 +159,16 @@ static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
return dataMask;
}
-static void waveModifier_do(WaveModifierData *md,
- Scene *scene, Object *ob, DerivedMesh *dm,
+static void waveModifier_do(WaveModifierData *md,
+ const EvaluationContext *eval_ctx,
+ Object *ob, DerivedMesh *dm,
float (*vertexCos)[3], int numVerts)
{
WaveModifierData *wmd = (WaveModifierData *) md;
MVert *mvert = NULL;
MDeformVert *dvert;
int defgrp_index;
- float ctime = BKE_scene_frame_get(scene);
+ float ctime = eval_ctx->ctime;
float minfac = (float)(1.0 / exp(wmd->width * wmd->narrow * wmd->width * wmd->narrow));
float lifefac = wmd->height;
float (*tex_co)[3] = NULL;
@@ -335,8 +313,8 @@ static void waveModifier_do(WaveModifierData *md,
if (wmd->texture) MEM_freeN(tex_co);
}
-static void deformVerts(ModifierData *md, Object *ob,
- DerivedMesh *derivedData,
+static void deformVerts(ModifierData *md, const struct EvaluationContext *eval_ctx,
+ Object *ob, DerivedMesh *derivedData,
float (*vertexCos)[3],
int numVerts,
ModifierApplyFlag UNUSED(flag))
@@ -349,14 +327,15 @@ static void deformVerts(ModifierData *md, Object *ob,
else if (wmd->texture || wmd->defgrp_name[0])
dm = get_dm(ob, NULL, dm, NULL, false, false);
- waveModifier_do(wmd, md->scene, ob, dm, vertexCos, numVerts);
+ waveModifier_do(wmd, eval_ctx, ob, dm, vertexCos, numVerts);
if (dm != derivedData)
dm->release(dm);
}
static void deformVertsEM(
- ModifierData *md, Object *ob, struct BMEditMesh *editData,
+ ModifierData *md, const struct EvaluationContext *eval_ctx,
+ Object *ob, struct BMEditMesh *editData,
DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
{
DerivedMesh *dm = derivedData;
@@ -367,7 +346,7 @@ static void deformVertsEM(
else if (wmd->texture || wmd->defgrp_name[0])
dm = get_dm(ob, editData, dm, NULL, false, false);
- waveModifier_do(wmd, md->scene, ob, dm, vertexCos, numVerts);
+ waveModifier_do(wmd, eval_ctx, ob, dm, vertexCos, numVerts);
if (dm != derivedData)
dm->release(dm);
@@ -393,7 +372,6 @@ ModifierTypeInfo modifierType_Wave = {
/* requiredDataMask */ requiredDataMask,
/* freeData */ freeData,
/* isDisabled */ NULL,
- /* updateDepgraph */ updateDepgraph,
/* updateDepsgraph */ updateDepsgraph,
/* dependsOnTime */ dependsOnTime,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_weightvgedit.c b/source/blender/modifiers/intern/MOD_weightvgedit.c
index a5f40a5e8cf..9aa4bad1707 100644
--- a/source/blender/modifiers/intern/MOD_weightvgedit.c
+++ b/source/blender/modifiers/intern/MOD_weightvgedit.c
@@ -46,7 +46,6 @@
#include "BKE_modifier.h"
#include "BKE_texture.h" /* Texture masking. */
-#include "depsgraph_private.h"
#include "DEG_depsgraph_build.h"
#include "MEM_guardedalloc.h"
@@ -141,26 +140,6 @@ static void foreachTexLink(ModifierData *md, Object *ob, TexWalkFunc walk, void
walk(userData, ob, md, "mask_texture");
}
-static void updateDepgraph(ModifierData *md, DagForest *forest,
- struct Main *UNUSED(bmain),
- struct Scene *UNUSED(scene),
- Object *UNUSED(ob), DagNode *obNode)
-{
- WeightVGEditModifierData *wmd = (WeightVGEditModifierData *) md;
- DagNode *curNode;
-
- if (wmd->mask_tex_map_obj && wmd->mask_tex_mapping == MOD_DISP_MAP_OBJECT) {
- curNode = dag_get_node(forest, wmd->mask_tex_map_obj);
-
- dag_add_relation(forest, curNode, obNode, DAG_RL_DATA_DATA | DAG_RL_OB_DATA,
- "WeightVGEdit Modifier");
- }
-
- if (wmd->mask_tex_mapping == MOD_DISP_MAP_GLOBAL)
- dag_add_relation(forest, obNode, obNode, DAG_RL_DATA_DATA | DAG_RL_OB_DATA,
- "WeightVGEdit Modifier");
-}
-
static void updateDepsgraph(ModifierData *md,
struct Main *UNUSED(bmain),
struct Scene *UNUSED(scene),
@@ -183,7 +162,10 @@ static bool isDisabled(ModifierData *md, int UNUSED(useRenderParams))
return (wmd->defgrp_name[0] == '\0');
}
-static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *derivedData,
+static DerivedMesh *applyModifier(ModifierData *md,
+ const struct EvaluationContext *UNUSED(eval_ctx),
+ Object *ob,
+ DerivedMesh *derivedData,
ModifierApplyFlag UNUSED(flag))
{
WeightVGEditModifierData *wmd = (WeightVGEditModifierData *) md;
@@ -304,7 +286,6 @@ ModifierTypeInfo modifierType_WeightVGEdit = {
/* requiredDataMask */ requiredDataMask,
/* freeData */ freeData,
/* isDisabled */ isDisabled,
- /* updateDepgraph */ updateDepgraph,
/* updateDepsgraph */ updateDepsgraph,
/* dependsOnTime */ dependsOnTime,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_weightvgmix.c b/source/blender/modifiers/intern/MOD_weightvgmix.c
index b3a687474f4..ab1264cc9a0 100644
--- a/source/blender/modifiers/intern/MOD_weightvgmix.c
+++ b/source/blender/modifiers/intern/MOD_weightvgmix.c
@@ -43,7 +43,6 @@
#include "BKE_modifier.h"
#include "BKE_texture.h" /* Texture masking. */
-#include "depsgraph_private.h"
#include "DEG_depsgraph_build.h"
#include "MEM_guardedalloc.h"
@@ -190,26 +189,6 @@ static void foreachTexLink(ModifierData *md, Object *ob, TexWalkFunc walk, void
walk(userData, ob, md, "mask_texture");
}
-static void updateDepgraph(ModifierData *md, DagForest *forest,
- struct Main *UNUSED(bmain),
- struct Scene *UNUSED(scene),
- Object *UNUSED(ob), DagNode *obNode)
-{
- WeightVGMixModifierData *wmd = (WeightVGMixModifierData *) md;
- DagNode *curNode;
-
- if (wmd->mask_tex_map_obj && wmd->mask_tex_mapping == MOD_DISP_MAP_OBJECT) {
- curNode = dag_get_node(forest, wmd->mask_tex_map_obj);
-
- dag_add_relation(forest, curNode, obNode, DAG_RL_DATA_DATA | DAG_RL_OB_DATA,
- "WeightVGMix Modifier");
- }
-
- if (wmd->mask_tex_mapping == MOD_DISP_MAP_GLOBAL)
- dag_add_relation(forest, obNode, obNode, DAG_RL_DATA_DATA | DAG_RL_OB_DATA,
- "WeightVGMix Modifier");
-}
-
static void updateDepsgraph(ModifierData *md,
struct Main *UNUSED(bmain),
struct Scene *UNUSED(scene),
@@ -234,8 +213,8 @@ static bool isDisabled(ModifierData *md, int UNUSED(useRenderParams))
return (wmd->defgrp_name_a[0] == '\0');
}
-static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *derivedData,
- ModifierApplyFlag UNUSED(flag))
+static DerivedMesh *applyModifier(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx), Object *ob,
+ DerivedMesh *derivedData, ModifierApplyFlag UNUSED(flag))
{
WeightVGMixModifierData *wmd = (WeightVGMixModifierData *) md;
DerivedMesh *dm = derivedData;
@@ -436,7 +415,6 @@ ModifierTypeInfo modifierType_WeightVGMix = {
/* requiredDataMask */ requiredDataMask,
/* freeData */ freeData,
/* isDisabled */ isDisabled,
- /* updateDepgraph */ updateDepgraph,
/* updateDepsgraph */ updateDepsgraph,
/* dependsOnTime */ dependsOnTime,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_weightvgproximity.c b/source/blender/modifiers/intern/MOD_weightvgproximity.c
index 3904532a9ba..8a5d0f833a8 100644
--- a/source/blender/modifiers/intern/MOD_weightvgproximity.c
+++ b/source/blender/modifiers/intern/MOD_weightvgproximity.c
@@ -47,7 +47,6 @@
#include "BKE_modifier.h"
#include "BKE_texture.h" /* Texture masking. */
-#include "depsgraph_private.h"
#include "DEG_depsgraph_build.h"
#include "MEM_guardedalloc.h"
@@ -351,32 +350,6 @@ static void foreachTexLink(ModifierData *md, Object *ob, TexWalkFunc walk, void
walk(userData, ob, md, "mask_texture");
}
-static void updateDepgraph(ModifierData *md, DagForest *forest,
- struct Main *UNUSED(bmain),
- struct Scene *UNUSED(scene),
- Object *UNUSED(ob), DagNode *obNode)
-{
- WeightVGProximityModifierData *wmd = (WeightVGProximityModifierData *) md;
- DagNode *curNode;
-
- if (wmd->proximity_ob_target) {
- curNode = dag_get_node(forest, wmd->proximity_ob_target);
- dag_add_relation(forest, curNode, obNode, DAG_RL_DATA_DATA | DAG_RL_OB_DATA,
- "WeightVGProximity Modifier");
- }
-
- if (wmd->mask_tex_map_obj && wmd->mask_tex_mapping == MOD_DISP_MAP_OBJECT) {
- curNode = dag_get_node(forest, wmd->mask_tex_map_obj);
-
- dag_add_relation(forest, curNode, obNode, DAG_RL_DATA_DATA | DAG_RL_OB_DATA,
- "WeightVGProximity Modifier");
- }
-
- if (wmd->mask_tex_mapping == MOD_DISP_MAP_GLOBAL)
- dag_add_relation(forest, obNode, obNode, DAG_RL_DATA_DATA | DAG_RL_OB_DATA,
- "WeightVGProximity Modifier");
-}
-
static void updateDepsgraph(ModifierData *md,
struct Main *UNUSED(bmain),
struct Scene *UNUSED(scene),
@@ -407,8 +380,8 @@ static bool isDisabled(ModifierData *md, int UNUSED(useRenderParams))
return (wmd->proximity_ob_target == NULL);
}
-static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *derivedData,
- ModifierApplyFlag UNUSED(flag))
+static DerivedMesh *applyModifier(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx), Object *ob,
+ DerivedMesh *derivedData, ModifierApplyFlag UNUSED(flag))
{
WeightVGProximityModifierData *wmd = (WeightVGProximityModifierData *) md;
DerivedMesh *dm = derivedData;
@@ -625,7 +598,6 @@ ModifierTypeInfo modifierType_WeightVGProximity = {
/* requiredDataMask */ requiredDataMask,
/* freeData */ freeData,
/* isDisabled */ isDisabled,
- /* updateDepgraph */ updateDepgraph,
/* updateDepsgraph */ updateDepsgraph,
/* dependsOnTime */ dependsOnTime,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_wireframe.c b/source/blender/modifiers/intern/MOD_wireframe.c
index 15f8b185a3d..3cb35286114 100644
--- a/source/blender/modifiers/intern/MOD_wireframe.c
+++ b/source/blender/modifiers/intern/MOD_wireframe.c
@@ -102,7 +102,8 @@ static DerivedMesh *WireframeModifier_do(WireframeModifierData *wmd, Object *ob,
}
-static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *dm, ModifierApplyFlag UNUSED(flag))
+static DerivedMesh *applyModifier(ModifierData *md, const struct EvaluationContext *UNUSED(eval_ctx), Object *ob,
+ DerivedMesh *dm, ModifierApplyFlag UNUSED(flag))
{
return WireframeModifier_do((WireframeModifierData *)md, ob, dm);
}
@@ -128,7 +129,6 @@ ModifierTypeInfo modifierType_Wireframe = {
/* freeData */ NULL,
/* isDisabled */ NULL,
/* updateDepgraph */ NULL,
- /* updateDepsgraph */ NULL,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ dependsOnNormals,
/* foreachObjectLink */ NULL,
diff --git a/source/blender/nodes/CMakeLists.txt b/source/blender/nodes/CMakeLists.txt
index 1acd1c4ea46..230918776dc 100644
--- a/source/blender/nodes/CMakeLists.txt
+++ b/source/blender/nodes/CMakeLists.txt
@@ -32,6 +32,7 @@ set(INC
../blenkernel
../blenlib
../blentranslation
+ ../depsgraph
../gpu
../imbuf
../makesdna
@@ -184,6 +185,7 @@ set(SRC
shader/nodes/node_shader_normal_map.c
shader/nodes/node_shader_object_info.c
shader/nodes/node_shader_hair_info.c
+ shader/nodes/node_shader_eevee_specular.c
shader/nodes/node_shader_output_lamp.c
shader/nodes/node_shader_output_material.c
shader/nodes/node_shader_output_world.c
diff --git a/source/blender/nodes/NOD_composite.h b/source/blender/nodes/NOD_composite.h
index a5c2e604f46..dfcb83b873a 100644
--- a/source/blender/nodes/NOD_composite.h
+++ b/source/blender/nodes/NOD_composite.h
@@ -140,7 +140,7 @@ void register_node_type_cmp_planetrackdeform(void);
void register_node_type_cmp_cornerpin(void);
void node_cmp_rlayers_outputs(struct bNodeTree *ntree, struct bNode *node);
-void node_cmp_rlayers_register_pass(struct bNodeTree *ntree, struct bNode *node, struct Scene *scene, struct SceneRenderLayer *srl, const char *name, int type);
+void node_cmp_rlayers_register_pass(struct bNodeTree *ntree, struct bNode *node, struct Scene *scene, struct ViewLayer *view_layer, const char *name, int type);
const char *node_cmp_rlayers_sock_to_pass(int sock_index);
#endif
diff --git a/source/blender/nodes/NOD_shader.h b/source/blender/nodes/NOD_shader.h
index 6ed71e02823..bb9f9881e33 100644
--- a/source/blender/nodes/NOD_shader.h
+++ b/source/blender/nodes/NOD_shader.h
@@ -120,9 +120,12 @@ void register_node_type_sh_mix_shader(void);
void register_node_type_sh_add_shader(void);
void register_node_type_sh_uvmap(void);
void register_node_type_sh_uvalongstroke(void);
+void register_node_type_sh_eevee_metallic(void);
+void register_node_type_sh_eevee_specular(void);
void register_node_type_sh_output_lamp(void);
void register_node_type_sh_output_material(void);
+void register_node_type_sh_output_eevee_material(void);
void register_node_type_sh_output_world(void);
void register_node_type_sh_output_linestyle(void);
diff --git a/source/blender/nodes/NOD_socket.h b/source/blender/nodes/NOD_socket.h
index 5c8875593e7..e311adc45eb 100644
--- a/source/blender/nodes/NOD_socket.h
+++ b/source/blender/nodes/NOD_socket.h
@@ -49,7 +49,7 @@ struct bNodeSocket *node_add_socket_from_template(struct bNodeTree *ntree, struc
void node_verify_socket_templates(struct bNodeTree *ntree, struct bNode *node);
void node_socket_init_default_value(struct bNodeSocket *sock);
-void node_socket_copy_default_value(struct bNodeSocket *to, struct bNodeSocket *from);
+void node_socket_copy_default_value(struct bNodeSocket *to, const struct bNodeSocket *from);
void register_standard_node_socket_types(void);
#endif
diff --git a/source/blender/nodes/NOD_static_types.h b/source/blender/nodes/NOD_static_types.h
index 2db23c2122d..394e141647e 100644
--- a/source/blender/nodes/NOD_static_types.h
+++ b/source/blender/nodes/NOD_static_types.h
@@ -67,6 +67,7 @@ DefNode( ShaderNode, SH_NODE_COMBRGB, 0, "COMBR
DefNode( ShaderNode, SH_NODE_HUE_SAT, 0, "HUE_SAT", HueSaturation, "Hue/Saturation", "" )
DefNode( ShaderNode, SH_NODE_OUTPUT_MATERIAL, def_sh_output, "OUTPUT_MATERIAL", OutputMaterial, "Material Output", "" )
+DefNode( ShaderNode, SH_NODE_EEVEE_SPECULAR, 0, "EEVEE_SPECULAR", EeveeSpecular, "Specular", "")
DefNode( ShaderNode, SH_NODE_OUTPUT_LAMP, def_sh_output, "OUTPUT_LAMP", OutputLamp, "Lamp Output", "" )
DefNode( ShaderNode, SH_NODE_OUTPUT_WORLD, def_sh_output, "OUTPUT_WORLD", OutputWorld, "World Output", "" )
DefNode( ShaderNode, SH_NODE_OUTPUT_LINESTYLE, def_sh_output_linestyle,"OUTPUT_LINESTYLE", OutputLineStyle, "Line Style Output", "" )
diff --git a/source/blender/nodes/composite/node_composite_tree.c b/source/blender/nodes/composite/node_composite_tree.c
index 36778a18f77..8cb25d9167f 100644
--- a/source/blender/nodes/composite/node_composite_tree.c
+++ b/source/blender/nodes/composite/node_composite_tree.c
@@ -65,7 +65,7 @@ static void composite_get_from_context(const bContext *C, bNodeTreeType *UNUSED(
*r_ntree = scene->nodetree;
}
-static void foreach_nodeclass(Scene *UNUSED(scene), void *calldata, bNodeClassCallback func)
+static void foreach_nodeclass(ViewRender *UNUSED(view_render), void *calldata, bNodeClassCallback func)
{
func(calldata, NODE_CLASS_INPUT, N_("Input"));
func(calldata, NODE_CLASS_OUTPUT, N_("Output"));
@@ -261,7 +261,7 @@ void ntreeCompositUpdateRLayers(bNodeTree *ntree)
}
-void ntreeCompositRegisterPass(bNodeTree *ntree, Scene *scene, SceneRenderLayer *srl, const char *name, int type)
+void ntreeCompositRegisterPass(bNodeTree *ntree, Scene *scene, ViewLayer *view_layer, const char *name, int type)
{
bNode *node;
@@ -269,7 +269,7 @@ void ntreeCompositRegisterPass(bNodeTree *ntree, Scene *scene, SceneRenderLayer
for (node = ntree->nodes.first; node; node = node->next) {
if (node->type == CMP_NODE_R_LAYERS)
- node_cmp_rlayers_register_pass(ntree, node, scene, srl, name, type);
+ node_cmp_rlayers_register_pass(ntree, node, scene, view_layer, name, type);
}
}
diff --git a/source/blender/nodes/composite/nodes/node_composite_image.c b/source/blender/nodes/composite/nodes/node_composite_image.c
index 1e240c2f84b..7712d7d0e71 100644
--- a/source/blender/nodes/composite/nodes/node_composite_image.c
+++ b/source/blender/nodes/composite/nodes/node_composite_image.c
@@ -41,6 +41,7 @@
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_main.h"
+#include "BKE_scene.h"
/* **************** IMAGE (and RenderResult, multilayer image) ******************** */
@@ -190,16 +191,16 @@ typedef struct RLayerUpdateData {
int prev_index;
} RLayerUpdateData;
-void node_cmp_rlayers_register_pass(bNodeTree *ntree, bNode *node, Scene *scene, SceneRenderLayer *srl, const char *name, int type)
+void node_cmp_rlayers_register_pass(bNodeTree *ntree, bNode *node, Scene *scene, ViewLayer *view_layer, const char *name, int type)
{
RLayerUpdateData *data = node->storage;
- if (scene == NULL || srl == NULL || data == NULL || node->id != (ID *)scene) {
+ if (scene == NULL || view_layer == NULL || data == NULL || node->id != (ID *)scene) {
return;
}
- SceneRenderLayer *node_srl = BLI_findlink(&scene->r.layers, node->custom1);
- if (node_srl != srl) {
+ ViewLayer *node_view_layer = BLI_findlink(&scene->view_layers, node->custom1);
+ if (node_view_layer != view_layer) {
return;
}
@@ -218,17 +219,17 @@ static void cmp_node_rlayer_create_outputs(bNodeTree *ntree, bNode *node, LinkNo
Scene *scene = (Scene *)node->id;
if (scene) {
- RenderEngineType *engine_type = RE_engines_find(scene->r.engine);
+ RenderEngineType *engine_type = RE_engines_find(scene->view_render.engine_id);
if (engine_type && engine_type->update_render_passes) {
- SceneRenderLayer *srl = BLI_findlink(&scene->r.layers, node->custom1);
- if (srl) {
+ ViewLayer *view_layer = BLI_findlink(&scene->view_layers, node->custom1);
+ if (view_layer) {
RLayerUpdateData *data = MEM_mallocN(sizeof(RLayerUpdateData), "render layer update data");
data->available_sockets = available_sockets;
data->prev_index = -1;
node->storage = data;
RenderEngine *engine = RE_engine_create(engine_type);
- engine_type->update_render_passes(engine, scene, srl);
+ engine_type->update_render_passes(engine, scene, view_layer);
RE_engine_free(engine);
MEM_freeN(data);
diff --git a/source/blender/nodes/intern/node_socket.c b/source/blender/nodes/intern/node_socket.c
index 342774facd0..e1d17003ba4 100644
--- a/source/blender/nodes/intern/node_socket.c
+++ b/source/blender/nodes/intern/node_socket.c
@@ -267,7 +267,7 @@ void node_socket_init_default_value(bNodeSocket *sock)
}
}
-void node_socket_copy_default_value(bNodeSocket *to, bNodeSocket *from)
+void node_socket_copy_default_value(bNodeSocket *to, const bNodeSocket *from)
{
/* sanity check */
if (to->type != from->type)
diff --git a/source/blender/nodes/shader/node_shader_tree.c b/source/blender/nodes/shader/node_shader_tree.c
index 8fa074c5cb7..2f65188841e 100644
--- a/source/blender/nodes/shader/node_shader_tree.c
+++ b/source/blender/nodes/shader/node_shader_tree.c
@@ -39,6 +39,7 @@
#include "DNA_space_types.h"
#include "DNA_world_types.h"
#include "DNA_linestyle_types.h"
+#include "DNA_workspace_types.h"
#include "BLI_listbase.h"
#include "BLI_threads.h"
@@ -67,22 +68,29 @@
static int shader_tree_poll(const bContext *C, bNodeTreeType *UNUSED(treetype))
{
Scene *scene = CTX_data_scene(C);
+ WorkSpace *workspace = CTX_wm_workspace(C);
+ ViewRender *view_render = BKE_viewrender_get(scene, workspace);
+ const char *engine_id = view_render->engine_id;
+
/* allow empty engine string too, this is from older versions that didn't have registerable engines yet */
- return (scene->r.engine[0] == '\0' ||
- STREQ(scene->r.engine, RE_engine_id_BLENDER_RENDER) ||
- STREQ(scene->r.engine, RE_engine_id_BLENDER_GAME) ||
- STREQ(scene->r.engine, RE_engine_id_CYCLES) ||
- !BKE_scene_use_shading_nodes_custom(scene));
+ return (engine_id[0] == '\0' ||
+ STREQ(engine_id, RE_engine_id_BLENDER_RENDER) ||
+ STREQ(engine_id, RE_engine_id_BLENDER_GAME) ||
+ STREQ(engine_id, RE_engine_id_CYCLES) ||
+ !BKE_viewrender_use_shading_nodes_custom(view_render));
}
static void shader_get_from_context(const bContext *C, bNodeTreeType *UNUSED(treetype), bNodeTree **r_ntree, ID **r_id, ID **r_from)
{
SpaceNode *snode = CTX_wm_space_node(C);
Scene *scene = CTX_data_scene(C);
- Object *ob = OBACT;
+ WorkSpace *workspace = CTX_wm_workspace(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Object *ob = OBACT(view_layer);
+ ViewRender *view_render = BKE_viewrender_get(scene, workspace);
if ((snode->shaderfrom == SNODE_SHADER_OBJECT) ||
- (BKE_scene_use_new_shading_nodes(scene) == false))
+ (BKE_viewrender_use_new_shading_nodes(view_render) == false))
{
if (ob) {
*r_from = &ob->id;
@@ -118,12 +126,12 @@ static void shader_get_from_context(const bContext *C, bNodeTreeType *UNUSED(tre
}
}
-static void foreach_nodeclass(Scene *scene, void *calldata, bNodeClassCallback func)
+static void foreach_nodeclass(ViewRender *view_render, void *calldata, bNodeClassCallback func)
{
func(calldata, NODE_CLASS_INPUT, N_("Input"));
func(calldata, NODE_CLASS_OUTPUT, N_("Output"));
- if (BKE_scene_use_new_shading_nodes(scene)) {
+ if (BKE_viewrender_use_new_shading_nodes(view_render)) {
func(calldata, NODE_CLASS_SHADER, N_("Shader"));
func(calldata, NODE_CLASS_TEXTURE, N_("Texture"));
}
@@ -213,6 +221,9 @@ static void ntree_shader_link_builtin_normal(bNodeTree *ntree,
* render engines works but it's how the GPU shader compilation works. This we
* can change in the future and make it a generic function, but for now it stays
* private here.
+ *
+ * It also does not yet take into account render engine specific output nodes,
+ * it should give priority to e.g. the Eevee material output node for Eevee.
*/
static bNode *ntree_shader_output_node(bNodeTree *ntree)
{
@@ -430,7 +441,7 @@ static void ntree_shader_link_builtin_normal(bNodeTree *ntree,
static void ntree_shader_relink_displacement(bNodeTree *ntree,
short compatibility)
{
- if (compatibility != NODE_NEW_SHADING) {
+ if ((compatibility & NODE_NEW_SHADING) == 0) {
/* We can only deal with new shading system here. */
return;
}
@@ -491,6 +502,112 @@ static void ntree_shader_relink_displacement(bNodeTree *ntree,
ntreeUpdateTree(G.main, ntree);
}
+static bool ntree_tag_ssr_bsdf_cb(bNode *fromnode, bNode *UNUSED(tonode), void *userdata, const bool UNUSED(reversed))
+{
+ switch (fromnode->type) {
+ case SH_NODE_BSDF_ANISOTROPIC:
+ case SH_NODE_EEVEE_SPECULAR:
+ case SH_NODE_BSDF_PRINCIPLED:
+ case SH_NODE_BSDF_GLOSSY:
+ case SH_NODE_BSDF_GLASS:
+ fromnode->ssr_id = (*(float *)userdata);
+ (*(float *)userdata) += 1;
+ break;
+ default:
+ /* We could return false here but since we (will)
+ * allow the use of Closure as RGBA, we can have
+ * Bsdf nodes linked to other Bsdf nodes. */
+ break;
+ }
+
+ return true;
+}
+
+/* EEVEE: Scan the ntree to set the Screen Space Reflection
+ * layer id of every specular node.
+ */
+static void ntree_shader_tag_ssr_node(bNodeTree *ntree, short compatibility)
+{
+ if ((compatibility & NODE_NEWER_SHADING) == 0) {
+ /* We can only deal with new shading system here. */
+ return;
+ }
+
+ bNode *output_node = ntree_shader_output_node(ntree);
+ if (output_node == NULL) {
+ return;
+ }
+ /* Make sure sockets links pointers are correct. */
+ ntreeUpdateTree(G.main, ntree);
+
+ float lobe_id = 1;
+ nodeChainIter(ntree, output_node, ntree_tag_ssr_bsdf_cb, &lobe_id, true);
+}
+
+static bool ntree_tag_sss_bsdf_cb(bNode *fromnode, bNode *UNUSED(tonode), void *userdata, const bool UNUSED(reversed))
+{
+ switch (fromnode->type) {
+ case SH_NODE_BSDF_PRINCIPLED:
+ case SH_NODE_SUBSURFACE_SCATTERING:
+ fromnode->sss_id = (*(float *)userdata);
+ (*(float *)userdata) += 1;
+ break;
+ default:
+ break;
+ }
+
+ return true;
+}
+
+/* EEVEE: Scan the ntree to set the Subsurface Scattering id of every SSS node.
+ */
+static void ntree_shader_tag_sss_node(bNodeTree *ntree, short compatibility)
+{
+ if ((compatibility & NODE_NEWER_SHADING) == 0) {
+ /* We can only deal with new shading system here. */
+ return;
+ }
+
+ bNode *output_node = ntree_shader_output_node(ntree);
+ if (output_node == NULL) {
+ return;
+ }
+ /* Make sure sockets links pointers are correct. */
+ ntreeUpdateTree(G.main, ntree);
+
+ float sss_id = 1;
+ nodeChainIter(ntree, output_node, ntree_tag_sss_bsdf_cb, &sss_id, true);
+}
+
+/* EEVEE: Find which material domain are used (volume, surface ...).
+ */
+void ntreeGPUMaterialDomain(bNodeTree *ntree, bool *has_surface_output, bool *has_volume_output)
+{
+ /* localize tree to create links for reroute and mute */
+ bNodeTree *localtree = ntreeLocalize(ntree);
+
+ struct bNode *output = ntree_shader_output_node(localtree);
+
+ *has_surface_output = false;
+ *has_volume_output = false;
+
+ if (output != NULL) {
+ bNodeSocket *surface_sock = ntree_shader_node_find_input(output, "Surface");
+ bNodeSocket *volume_sock = ntree_shader_node_find_input(output, "Volume");
+
+ if (surface_sock != NULL) {
+ *has_surface_output = (nodeCountSocketLinks(localtree, surface_sock) > 0);
+ }
+
+ if (volume_sock != NULL) {
+ *has_volume_output = (nodeCountSocketLinks(localtree, volume_sock) > 0);
+ }
+ }
+
+ ntreeFreeTree(localtree);
+ MEM_freeN(localtree);
+}
+
void ntreeGPUMaterialNodes(bNodeTree *ntree, GPUMaterial *mat, short compatibility)
{
/* localize tree to create links for reroute and mute */
@@ -502,6 +619,9 @@ void ntreeGPUMaterialNodes(bNodeTree *ntree, GPUMaterial *mat, short compatibili
*/
ntree_shader_relink_displacement(localtree, compatibility);
+ ntree_shader_tag_ssr_node(localtree, compatibility);
+ ntree_shader_tag_sss_node(localtree, compatibility);
+
exec = ntreeShaderBeginExecTree(localtree);
ntreeExecGPUNodes(exec, mat, 1, compatibility);
ntreeShaderEndExecTree(exec);
diff --git a/source/blender/nodes/shader/node_shader_util.c b/source/blender/nodes/shader/node_shader_util.c
index 5bc97f13b41..8559765e315 100644
--- a/source/blender/nodes/shader/node_shader_util.c
+++ b/source/blender/nodes/shader/node_shader_util.c
@@ -163,7 +163,7 @@ void node_gpu_stack_from_data(struct GPUNodeStack *gs, int type, bNodeStack *ns)
else if (type == SOCK_RGBA)
gs->type = GPU_VEC4;
else if (type == SOCK_SHADER)
- gs->type = GPU_VEC4;
+ gs->type = GPU_CLOSURE;
else
gs->type = GPU_NONE;
diff --git a/source/blender/nodes/shader/node_shader_util.h b/source/blender/nodes/shader/node_shader_util.h
index a902ede8aa7..2363addb56a 100644
--- a/source/blender/nodes/shader/node_shader_util.h
+++ b/source/blender/nodes/shader/node_shader_util.h
@@ -77,7 +77,9 @@
#include "RE_pipeline.h"
#include "RE_shader_ext.h"
+#include "GPU_lamp.h"
#include "GPU_material.h"
+#include "GPU_uniformbuffer.h"
int sh_node_poll_default(struct bNodeType *ntype, struct bNodeTree *ntree);
diff --git a/source/blender/nodes/shader/nodes/node_shader_add_shader.c b/source/blender/nodes/shader/nodes/node_shader_add_shader.c
index 1edac62438e..d3bb8fccf71 100644
--- a/source/blender/nodes/shader/nodes/node_shader_add_shader.c
+++ b/source/blender/nodes/shader/nodes/node_shader_add_shader.c
@@ -40,9 +40,9 @@ static bNodeSocketTemplate sh_node_add_shader_out[] = {
{ -1, 0, "" }
};
-static int node_shader_gpu_add_shader(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int node_shader_gpu_add_shader(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
- return GPU_stack_link(mat, "node_add_shader", in, out);
+ return GPU_stack_link(mat, node, "node_add_shader", in, out);
}
/* node type definition */
diff --git a/source/blender/nodes/shader/nodes/node_shader_ambient_occlusion.c b/source/blender/nodes/shader/nodes/node_shader_ambient_occlusion.c
index 878f8562619..cb4335ca9a7 100644
--- a/source/blender/nodes/shader/nodes/node_shader_ambient_occlusion.c
+++ b/source/blender/nodes/shader/nodes/node_shader_ambient_occlusion.c
@@ -39,9 +39,9 @@ static bNodeSocketTemplate sh_node_ambient_occlusion_out[] = {
{ -1, 0, "" }
};
-static int node_shader_gpu_ambient_occlusion(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int node_shader_gpu_ambient_occlusion(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
- return GPU_stack_link(mat, "node_ambient_occlusion", in, out, GPU_builtin(GPU_VIEW_NORMAL));
+ return GPU_stack_link(mat, node, "node_ambient_occlusion", in, out, GPU_builtin(GPU_VIEW_NORMAL));
}
/* node type definition */
diff --git a/source/blender/nodes/shader/nodes/node_shader_attribute.c b/source/blender/nodes/shader/nodes/node_shader_attribute.c
index 0a69593cf07..5f3699e52eb 100644
--- a/source/blender/nodes/shader/nodes/node_shader_attribute.c
+++ b/source/blender/nodes/shader/nodes/node_shader_attribute.c
@@ -45,9 +45,24 @@ static void node_shader_init_attribute(bNodeTree *UNUSED(ntree), bNode *node)
static int node_shader_gpu_attribute(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
NodeShaderAttribute *attr = node->storage;
- GPUNodeLink *cd_attr = GPU_attribute(CD_AUTO_FROM_NAME, attr->name);
- return GPU_stack_link(mat, "node_attribute", in, out, cd_attr);
+ /* FIXME : if an attribute layer (like vertex color) has one of theses name, it will not work as expected. */
+ if (strcmp(attr->name, "density") == 0) {
+ return GPU_stack_link(mat, node, "node_attribute_volume_density", in, out,
+ GPU_builtin(GPU_VOLUME_DENSITY));
+ }
+ else if (strcmp(attr->name, "color") == 0) {
+ return GPU_stack_link(mat, node, "node_attribute_volume_color", in, out,
+ GPU_builtin(GPU_VOLUME_DENSITY));
+ }
+ else if (strcmp(attr->name, "flame") == 0) {
+ return GPU_stack_link(mat, node, "node_attribute_volume_flame", in, out,
+ GPU_builtin(GPU_VOLUME_FLAME));
+ }
+ else {
+ GPUNodeLink *cd_attr = GPU_attribute(CD_AUTO_FROM_NAME, attr->name);
+ return GPU_stack_link(mat, node, "node_attribute", in, out, cd_attr);
+ }
}
/* node type definition */
diff --git a/source/blender/nodes/shader/nodes/node_shader_background.c b/source/blender/nodes/shader/nodes/node_shader_background.c
index b387529e456..4ea675f9e0c 100644
--- a/source/blender/nodes/shader/nodes/node_shader_background.c
+++ b/source/blender/nodes/shader/nodes/node_shader_background.c
@@ -40,9 +40,9 @@ static bNodeSocketTemplate sh_node_background_out[] = {
{ -1, 0, "" }
};
-static int node_shader_gpu_background(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int node_shader_gpu_background(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
- return GPU_stack_link(mat, "node_background", in, out, GPU_builtin(GPU_VIEW_NORMAL));
+ return GPU_stack_link(mat, node, "node_background", in, out);
}
/* node type definition */
diff --git a/source/blender/nodes/shader/nodes/node_shader_bevel.c b/source/blender/nodes/shader/nodes/node_shader_bevel.c
index e2e4da21ef3..dd9bc91e2d1 100644
--- a/source/blender/nodes/shader/nodes/node_shader_bevel.c
+++ b/source/blender/nodes/shader/nodes/node_shader_bevel.c
@@ -45,13 +45,13 @@ static void node_shader_init_bevel(bNodeTree *UNUSED(ntree), bNode *node)
node->custom1 = 4; /* samples */
}
-static int gpu_shader_bevel(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int gpu_shader_bevel(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
if (!in[1].link) {
GPU_link(mat, "direction_transform_m4v3", GPU_builtin(GPU_VIEW_NORMAL), GPU_builtin(GPU_INVERSE_VIEW_MATRIX), &in[1].link);
}
- return GPU_stack_link(mat, "node_bevel", in, out);
+ return GPU_stack_link(mat, node, "node_bevel", in, out);
}
/* node type definition */
diff --git a/source/blender/nodes/shader/nodes/node_shader_brightness.c b/source/blender/nodes/shader/nodes/node_shader_brightness.c
index e992c0773c2..457708405af 100644
--- a/source/blender/nodes/shader/nodes/node_shader_brightness.c
+++ b/source/blender/nodes/shader/nodes/node_shader_brightness.c
@@ -42,9 +42,9 @@ static bNodeSocketTemplate sh_node_brightcontrast_out[] = {
{ -1, 0, "" }
};
-static int gpu_shader_brightcontrast(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int gpu_shader_brightcontrast(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
- return GPU_stack_link(mat, "brightness_contrast", in, out);
+ return GPU_stack_link(mat, node, "brightness_contrast", in, out);
}
void register_node_type_sh_brightcontrast(void)
diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_anisotropic.c b/source/blender/nodes/shader/nodes/node_shader_bsdf_anisotropic.c
index 01ca0bd6512..13e8ac67f63 100644
--- a/source/blender/nodes/shader/nodes/node_shader_bsdf_anisotropic.c
+++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_anisotropic.c
@@ -49,14 +49,12 @@ static void node_shader_init_anisotropic(bNodeTree *UNUSED(ntree), bNode *node)
node->custom1 = SHD_GLOSSY_GGX;
}
-static int node_shader_gpu_bsdf_anisotropic(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int node_shader_gpu_bsdf_anisotropic(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
if (!in[4].link)
- in[4].link = GPU_builtin(GPU_VIEW_NORMAL);
- else
- GPU_link(mat, "direction_transform_m4v3", in[4].link, GPU_builtin(GPU_VIEW_MATRIX), &in[4].link);
+ GPU_link(mat, "world_normals_get", &in[4].link);
- return GPU_stack_link(mat, "node_bsdf_anisotropic", in, out);
+ return GPU_stack_link(mat, node, "node_bsdf_anisotropic", in, out);
}
/* node type definition */
diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_diffuse.c b/source/blender/nodes/shader/nodes/node_shader_bsdf_diffuse.c
index e86d2677a61..be7012712cc 100644
--- a/source/blender/nodes/shader/nodes/node_shader_bsdf_diffuse.c
+++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_diffuse.c
@@ -41,14 +41,12 @@ static bNodeSocketTemplate sh_node_bsdf_diffuse_out[] = {
{ -1, 0, "" }
};
-static int node_shader_gpu_bsdf_diffuse(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int node_shader_gpu_bsdf_diffuse(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
if (!in[2].link)
- in[2].link = GPU_builtin(GPU_VIEW_NORMAL);
- else
- GPU_link(mat, "direction_transform_m4v3", in[2].link, GPU_builtin(GPU_VIEW_MATRIX), &in[2].link);
+ GPU_link(mat, "world_normals_get", &in[2].link);
- return GPU_stack_link(mat, "node_bsdf_diffuse", in, out);
+ return GPU_stack_link(mat, node, "node_bsdf_diffuse", in, out);
}
/* node type definition */
diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_glass.c b/source/blender/nodes/shader/nodes/node_shader_bsdf_glass.c
index 5569fe85489..1537e07ca16 100644
--- a/source/blender/nodes/shader/nodes/node_shader_bsdf_glass.c
+++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_glass.c
@@ -47,14 +47,12 @@ static void node_shader_init_glass(bNodeTree *UNUSED(ntree), bNode *node)
node->custom1 = SHD_GLOSSY_BECKMANN;
}
-static int node_shader_gpu_bsdf_glass(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int node_shader_gpu_bsdf_glass(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
if (!in[3].link)
- in[3].link = GPU_builtin(GPU_VIEW_NORMAL);
- else
- GPU_link(mat, "direction_transform_m4v3", in[3].link, GPU_builtin(GPU_VIEW_MATRIX), &in[3].link);
+ GPU_link(mat, "world_normals_get", &in[3].link);
- return GPU_stack_link(mat, "node_bsdf_glass", in, out);
+ return GPU_stack_link(mat, node, "node_bsdf_glass", in, out, GPU_uniform(&node->ssr_id));
}
/* node type definition */
diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_glossy.c b/source/blender/nodes/shader/nodes/node_shader_bsdf_glossy.c
index 7e1bc971c73..35121b2afed 100644
--- a/source/blender/nodes/shader/nodes/node_shader_bsdf_glossy.c
+++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_glossy.c
@@ -46,14 +46,12 @@ static void node_shader_init_glossy(bNodeTree *UNUSED(ntree), bNode *node)
node->custom1 = SHD_GLOSSY_GGX;
}
-static int node_shader_gpu_bsdf_glossy(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int node_shader_gpu_bsdf_glossy(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
if (!in[2].link)
- in[2].link = GPU_builtin(GPU_VIEW_NORMAL);
- else
- GPU_link(mat, "direction_transform_m4v3", in[2].link, GPU_builtin(GPU_VIEW_MATRIX), &in[2].link);
+ GPU_link(mat, "world_normals_get", &in[2].link);
- return GPU_stack_link(mat, "node_bsdf_glossy", in, out);
+ return GPU_stack_link(mat, node, "node_bsdf_glossy", in, out, GPU_uniform(&node->ssr_id));
}
/* node type definition */
diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_hair.c b/source/blender/nodes/shader/nodes/node_shader_bsdf_hair.c
index 25be59f091d..b8078ac60ac 100644
--- a/source/blender/nodes/shader/nodes/node_shader_bsdf_hair.c
+++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_hair.c
@@ -43,9 +43,9 @@ static bNodeSocketTemplate sh_node_bsdf_hair_out[] = {
{ -1, 0, "" }
};
-static int node_shader_gpu_bsdf_hair(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int node_shader_gpu_bsdf_hair(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
- return GPU_stack_link(mat, "node_bsdf_hair", in, out);
+ return GPU_stack_link(mat, node, "node_bsdf_hair", in, out);
}
/* node type definition */
diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_principled.c b/source/blender/nodes/shader/nodes/node_shader_bsdf_principled.c
index e0330d110ca..b0ca4128d19 100644
--- a/source/blender/nodes/shader/nodes/node_shader_bsdf_principled.c
+++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_principled.c
@@ -63,8 +63,10 @@ static void node_shader_init_principled(bNodeTree *UNUSED(ntree), bNode *node)
node->custom1 = SHD_GLOSSY_MULTI_GGX;
}
-static int node_shader_gpu_bsdf_principled(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int node_shader_gpu_bsdf_principled(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
+ GPUNodeLink *sss_scale;
+#if 0 /* Old 2.7 glsl viewport */
// normal
if (!in[17].link)
in[17].link = GPU_builtin(GPU_VIEW_NORMAL);
@@ -76,8 +78,46 @@ static int node_shader_gpu_bsdf_principled(GPUMaterial *mat, bNode *UNUSED(node)
in[18].link = GPU_builtin(GPU_VIEW_NORMAL);
else
GPU_link(mat, "direction_transform_m4v3", in[18].link, GPU_builtin(GPU_VIEW_MATRIX), &in[18].link);
+#endif
- return GPU_stack_link(mat, "node_bsdf_principled", in, out, GPU_builtin(GPU_VIEW_POSITION));
+ /* Normals */
+ if (!in[17].link) {
+ GPU_link(mat, "world_normals_get", &in[17].link);
+ }
+
+ /* Clearcoat Normals */
+ if (!in[18].link) {
+ GPU_link(mat, "world_normals_get", &in[18].link);
+ }
+
+ /* Tangents */
+ if (!in[19].link) {
+ GPUNodeLink *orco = GPU_attribute(CD_ORCO, "");
+ GPU_link(mat, "tangent_orco_z", orco, &in[19].link);
+ GPU_link(mat, "node_tangent",
+ GPU_builtin(GPU_VIEW_NORMAL), in[19].link, GPU_builtin(GPU_OBJECT_MATRIX), GPU_builtin(GPU_INVERSE_VIEW_MATRIX),
+ &in[19].link);
+ }
+
+ /* SSS Profile */
+ if (node->sss_id == 1) {
+ static short profile = SHD_SUBSURFACE_BURLEY;
+ bNodeSocket *socket = BLI_findlink(&node->original->inputs, 2);
+ bNodeSocketValueRGBA *socket_data = socket->default_value;
+ /* For some reason it seems that the socket value is in ARGB format. */
+ GPU_material_sss_profile_create(mat, &socket_data->value[1], &profile, NULL);
+ }
+
+ if (in[2].link) {
+ sss_scale = in[2].link;
+ }
+ else {
+ float one[3] = {1.0f, 1.0f, 1.0f};
+ GPU_link(mat, "set_rgb", GPU_uniform((float *)one), &sss_scale);
+ }
+
+ return GPU_stack_link(mat, node, "node_bsdf_principled_clearcoat", in, out, GPU_builtin(GPU_VIEW_POSITION),
+ GPU_uniform(&node->ssr_id), GPU_uniform(&node->sss_id), sss_scale);
}
static void node_shader_update_principled(bNodeTree *UNUSED(ntree), bNode *node)
diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_refraction.c b/source/blender/nodes/shader/nodes/node_shader_bsdf_refraction.c
index c447f5de219..9dbe3361e8b 100644
--- a/source/blender/nodes/shader/nodes/node_shader_bsdf_refraction.c
+++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_refraction.c
@@ -47,14 +47,12 @@ static void node_shader_init_refraction(bNodeTree *UNUSED(ntree), bNode *node)
node->custom1 = SHD_GLOSSY_BECKMANN;
}
-static int node_shader_gpu_bsdf_refraction(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int node_shader_gpu_bsdf_refraction(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
if (!in[3].link)
- in[3].link = GPU_builtin(GPU_VIEW_NORMAL);
- else
- GPU_link(mat, "direction_transform_m4v3", in[3].link, GPU_builtin(GPU_VIEW_MATRIX), &in[3].link);
+ GPU_link(mat, "world_normals_get", &in[3].link);
- return GPU_stack_link(mat, "node_bsdf_refraction", in, out);
+ return GPU_stack_link(mat, node, "node_bsdf_refraction", in, out);
}
/* node type definition */
diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_toon.c b/source/blender/nodes/shader/nodes/node_shader_bsdf_toon.c
index c3510beb470..28941fbd662 100644
--- a/source/blender/nodes/shader/nodes/node_shader_bsdf_toon.c
+++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_toon.c
@@ -42,14 +42,14 @@ static bNodeSocketTemplate sh_node_bsdf_toon_out[] = {
{ -1, 0, "" }
};
-static int node_shader_gpu_bsdf_toon(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int node_shader_gpu_bsdf_toon(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
if (!in[3].link)
in[3].link = GPU_builtin(GPU_VIEW_NORMAL);
else
GPU_link(mat, "direction_transform_m4v3", in[3].link, GPU_builtin(GPU_VIEW_MATRIX), &in[3].link);
- return GPU_stack_link(mat, "node_bsdf_toon", in, out);
+ return GPU_stack_link(mat, node, "node_bsdf_toon", in, out);
}
/* node type definition */
diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_translucent.c b/source/blender/nodes/shader/nodes/node_shader_bsdf_translucent.c
index 3b88d609cdb..f6f6da524d5 100644
--- a/source/blender/nodes/shader/nodes/node_shader_bsdf_translucent.c
+++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_translucent.c
@@ -40,14 +40,12 @@ static bNodeSocketTemplate sh_node_bsdf_translucent_out[] = {
{ -1, 0, "" }
};
-static int node_shader_gpu_bsdf_translucent(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int node_shader_gpu_bsdf_translucent(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
if (!in[1].link)
- in[1].link = GPU_builtin(GPU_VIEW_NORMAL);
- else
- GPU_link(mat, "direction_transform_m4v3", in[1].link, GPU_builtin(GPU_VIEW_MATRIX), &in[1].link);
+ GPU_link(mat, "world_normals_get", &in[1].link);
- return GPU_stack_link(mat, "node_bsdf_translucent", in, out);
+ return GPU_stack_link(mat, node, "node_bsdf_translucent", in, out);
}
/* node type definition */
diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_transparent.c b/source/blender/nodes/shader/nodes/node_shader_bsdf_transparent.c
index 5cb50b00e1a..76afe935433 100644
--- a/source/blender/nodes/shader/nodes/node_shader_bsdf_transparent.c
+++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_transparent.c
@@ -39,9 +39,9 @@ static bNodeSocketTemplate sh_node_bsdf_transparent_out[] = {
{ -1, 0, "" }
};
-static int node_shader_gpu_bsdf_transparent(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int node_shader_gpu_bsdf_transparent(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
- return GPU_stack_link(mat, "node_bsdf_transparent", in, out);
+ return GPU_stack_link(mat, node, "node_bsdf_transparent", in, out);
}
/* node type definition */
diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_velvet.c b/source/blender/nodes/shader/nodes/node_shader_bsdf_velvet.c
index ef3d52ecbce..6d61f3f7473 100644
--- a/source/blender/nodes/shader/nodes/node_shader_bsdf_velvet.c
+++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_velvet.c
@@ -41,14 +41,12 @@ static bNodeSocketTemplate sh_node_bsdf_velvet_out[] = {
{ -1, 0, "" }
};
-static int node_shader_gpu_bsdf_velvet(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int node_shader_gpu_bsdf_velvet(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
if (!in[2].link)
- in[2].link = GPU_builtin(GPU_VIEW_NORMAL);
- else
- GPU_link(mat, "direction_transform_m4v3", in[2].link, GPU_builtin(GPU_VIEW_MATRIX), &in[2].link);
+ GPU_link(mat, "world_normals_get", &in[2].link);
- return GPU_stack_link(mat, "node_bsdf_velvet", in, out);
+ return GPU_stack_link(mat, node, "node_bsdf_velvet", in, out);
}
/* node type definition */
diff --git a/source/blender/nodes/shader/nodes/node_shader_bump.c b/source/blender/nodes/shader/nodes/node_shader_bump.c
index 122f02eda8a..84481a50993 100644
--- a/source/blender/nodes/shader/nodes/node_shader_bump.c
+++ b/source/blender/nodes/shader/nodes/node_shader_bump.c
@@ -52,7 +52,7 @@ static int gpu_shader_bump(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(
else
GPU_link(mat, "direction_transform_m4v3", in[3].link, GPU_builtin(GPU_VIEW_MATRIX), &in[3].link);
float invert = node->custom1;
- GPU_stack_link(mat, "node_bump", in, out, GPU_builtin(GPU_VIEW_POSITION), GPU_uniform(&invert));
+ GPU_stack_link(mat, node, "node_bump", in, out, GPU_builtin(GPU_VIEW_POSITION), GPU_uniform(&invert));
/* Other nodes are applying view matrix if the input Normal has a link.
* We don't want normal to have view matrix applied twice, so we cancel it here.
*
diff --git a/source/blender/nodes/shader/nodes/node_shader_camera.c b/source/blender/nodes/shader/nodes/node_shader_camera.c
index 3bdb5c36d69..ac0880d22ba 100644
--- a/source/blender/nodes/shader/nodes/node_shader_camera.c
+++ b/source/blender/nodes/shader/nodes/node_shader_camera.c
@@ -52,7 +52,7 @@ static void node_shader_exec_camera(void *data, int UNUSED(thread), bNode *UNUSE
}
}
-static int gpu_shader_camera(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int gpu_shader_camera(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
GPUNodeLink *viewvec;
@@ -62,7 +62,7 @@ static int gpu_shader_camera(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecDat
if (GPU_material_use_new_shading_nodes(mat))
GPU_link(mat, "invert_z", viewvec, &viewvec);
- return GPU_stack_link(mat, "camera", in, out, viewvec);
+ return GPU_stack_link(mat, node, "camera", in, out, viewvec);
}
void register_node_type_sh_camera(void)
diff --git a/source/blender/nodes/shader/nodes/node_shader_curves.c b/source/blender/nodes/shader/nodes/node_shader_curves.c
index 5e067e6c630..ceba8fd1248 100644
--- a/source/blender/nodes/shader/nodes/node_shader_curves.c
+++ b/source/blender/nodes/shader/nodes/node_shader_curves.c
@@ -66,7 +66,7 @@ static int gpu_shader_curve_vec(GPUMaterial *mat, bNode *node, bNodeExecData *UN
int size;
curvemapping_table_RGBA(node->storage, &array, &size);
- return GPU_stack_link(mat, "curves_vec", in, out, GPU_texture(size, array));
+ return GPU_stack_link(mat, node, "curves_vec", in, out, GPU_texture(size, array));
}
void register_node_type_sh_curve_vec(void)
@@ -125,7 +125,7 @@ static int gpu_shader_curve_rgb(GPUMaterial *mat, bNode *node, bNodeExecData *UN
curvemapping_initialize(node->storage);
curvemapping_table_RGBA(node->storage, &array, &size);
- return GPU_stack_link(mat, "curves_rgb", in, out, GPU_texture(size, array));
+ return GPU_stack_link(mat, node, "curves_rgb", in, out, GPU_texture(size, array));
}
void register_node_type_sh_curve_rgb(void)
diff --git a/source/blender/nodes/shader/nodes/node_shader_displacement.c b/source/blender/nodes/shader/nodes/node_shader_displacement.c
index e976eaf143a..25aee34f0ab 100644
--- a/source/blender/nodes/shader/nodes/node_shader_displacement.c
+++ b/source/blender/nodes/shader/nodes/node_shader_displacement.c
@@ -61,10 +61,10 @@ static int gpu_shader_displacement(GPUMaterial *mat, bNode *node, bNodeExecData
}
if(node->custom1 == SHD_SPACE_OBJECT) {
- return GPU_stack_link(mat, "node_displacement_object", in, out, GPU_builtin(GPU_OBJECT_MATRIX));
+ return GPU_stack_link(mat, node, "node_displacement_object", in, out, GPU_builtin(GPU_OBJECT_MATRIX));
}
else {
- return GPU_stack_link(mat, "node_displacement_world", in, out, GPU_builtin(GPU_OBJECT_MATRIX));
+ return GPU_stack_link(mat, node, "node_displacement_world", in, out, GPU_builtin(GPU_OBJECT_MATRIX));
}
}
diff --git a/source/blender/nodes/shader/nodes/node_shader_eevee_specular.c b/source/blender/nodes/shader/nodes/node_shader_eevee_specular.c
new file mode 100644
index 00000000000..c249e77c17a
--- /dev/null
+++ b/source/blender/nodes/shader/nodes/node_shader_eevee_specular.c
@@ -0,0 +1,87 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2005 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Clément Foucault.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "../node_shader_util.h"
+
+/* **************** OUTPUT ******************** */
+
+static bNodeSocketTemplate sh_node_eevee_specular_in[] = {
+ { SOCK_RGBA, 1, N_("Base Color"), 0.8f, 0.8f, 0.8f, 1.0f},
+ { SOCK_RGBA, 1, N_("Specular"), 0.03f, 0.03f, 0.03f, 1.0f},
+ { SOCK_FLOAT, 1, N_("Roughness"), 0.2f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR},
+ { SOCK_RGBA, 1, N_("Emissive Color"), 0.0f, 0.0f, 0.0f, 1.0f},
+ { SOCK_FLOAT, 1, N_("Transparency"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR},
+ { SOCK_VECTOR, 1, N_("Normal"), 0.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f, PROP_NONE, SOCK_HIDE_VALUE},
+ { SOCK_FLOAT, 1, N_("Clear Coat"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR},
+ { SOCK_FLOAT, 1, N_("Clear Coat Roughness"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR},
+ { SOCK_VECTOR, 1, N_("Clear Coat Normal"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_NONE, SOCK_HIDE_VALUE},
+ { SOCK_FLOAT, 1, N_("Ambient Occlusion"), 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_NONE, SOCK_HIDE_VALUE},
+ { -1, 0, "" }
+};
+
+static bNodeSocketTemplate sh_node_eevee_specular_out[] = {
+ { SOCK_SHADER, 0, N_("BSDF")},
+ { -1, 0, "" }
+};
+
+static int node_shader_gpu_eevee_specular(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+{
+ static float one = 1.0f;
+
+ /* Normals */
+ if (!in[5].link) {
+ GPU_link(mat, "world_normals_get", &in[5].link);
+ }
+
+ /* Clearcoat Normals */
+ if (!in[8].link) {
+ GPU_link(mat, "world_normals_get", &in[8].link);
+ }
+
+ /* Occlusion */
+ if (!in[9].link) {
+ GPU_link(mat, "set_value", GPU_uniform(&one), &in[9].link);
+ }
+
+ return GPU_stack_link(mat, node, "node_eevee_specular", in, out, GPU_uniform(&node->ssr_id));
+}
+
+
+/* node type definition */
+void register_node_type_sh_eevee_specular(void)
+{
+ static bNodeType ntype;
+
+ sh_node_type_base(&ntype, SH_NODE_EEVEE_SPECULAR, "Specular", NODE_CLASS_SHADER, 0);
+ node_type_compatibility(&ntype, NODE_NEW_SHADING);
+ node_type_socket_templates(&ntype, sh_node_eevee_specular_in, sh_node_eevee_specular_out);
+ node_type_init(&ntype, NULL);
+ node_type_storage(&ntype, "", NULL, NULL);
+ node_type_gpu(&ntype, node_shader_gpu_eevee_specular);
+
+ nodeRegisterType(&ntype);
+}
diff --git a/source/blender/nodes/shader/nodes/node_shader_emission.c b/source/blender/nodes/shader/nodes/node_shader_emission.c
index 51b3d5740a7..0901e8204f8 100644
--- a/source/blender/nodes/shader/nodes/node_shader_emission.c
+++ b/source/blender/nodes/shader/nodes/node_shader_emission.c
@@ -40,9 +40,9 @@ static bNodeSocketTemplate sh_node_emission_out[] = {
{ -1, 0, "" }
};
-static int node_shader_gpu_emission(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int node_shader_gpu_emission(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
- return GPU_stack_link(mat, "node_emission", in, out, GPU_builtin(GPU_VIEW_NORMAL));
+ return GPU_stack_link(mat, node, "node_emission", in, out, GPU_builtin(GPU_VIEW_NORMAL));
}
/* node type definition */
diff --git a/source/blender/nodes/shader/nodes/node_shader_fresnel.c b/source/blender/nodes/shader/nodes/node_shader_fresnel.c
index 8262b70fc44..b285f1a8a3e 100644
--- a/source/blender/nodes/shader/nodes/node_shader_fresnel.c
+++ b/source/blender/nodes/shader/nodes/node_shader_fresnel.c
@@ -39,7 +39,7 @@ static bNodeSocketTemplate sh_node_fresnel_out[] = {
{ -1, 0, "" }
};
-static int node_shader_gpu_fresnel(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int node_shader_gpu_fresnel(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
if (!in[1].link) {
in[1].link = GPU_builtin(GPU_VIEW_NORMAL);
@@ -48,7 +48,7 @@ static int node_shader_gpu_fresnel(GPUMaterial *mat, bNode *UNUSED(node), bNodeE
GPU_link(mat, "direction_transform_m4v3", in[1].link, GPU_builtin(GPU_VIEW_MATRIX), &in[1].link);
}
- return GPU_stack_link(mat, "node_fresnel", in, out, GPU_builtin(GPU_VIEW_POSITION));
+ return GPU_stack_link(mat, node, "node_fresnel", in, out, GPU_builtin(GPU_VIEW_POSITION));
}
static void node_shader_exec_fresnel(void *data, int UNUSED(thread), bNode *node, bNodeExecData *UNUSED(execdata), bNodeStack **in, bNodeStack **out)
diff --git a/source/blender/nodes/shader/nodes/node_shader_gamma.c b/source/blender/nodes/shader/nodes/node_shader_gamma.c
index 37439569f77..1aebfbe5888 100644
--- a/source/blender/nodes/shader/nodes/node_shader_gamma.c
+++ b/source/blender/nodes/shader/nodes/node_shader_gamma.c
@@ -52,9 +52,9 @@ static void node_shader_exec_gamma(void *UNUSED(data), int UNUSED(thread), bNode
out[0]->vec[2] = col[2] > 0.0f ? powf(col[2], gamma) : col[2];
}
-static int node_shader_gpu_gamma(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int node_shader_gpu_gamma(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
- return GPU_stack_link(mat, "node_gamma", in, out);
+ return GPU_stack_link(mat, node, "node_gamma", in, out);
}
void register_node_type_sh_gamma(void)
diff --git a/source/blender/nodes/shader/nodes/node_shader_geom.c b/source/blender/nodes/shader/nodes/node_shader_geom.c
index b289d66efc3..57bef4a6784 100644
--- a/source/blender/nodes/shader/nodes/node_shader_geom.c
+++ b/source/blender/nodes/shader/nodes/node_shader_geom.c
@@ -136,7 +136,7 @@ static int gpu_shader_geom(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(
GPUNodeLink *mtface = GPU_attribute(CD_MTFACE, ngeo->uvname);
GPUNodeLink *mcol = GPU_attribute(CD_MCOL, ngeo->colname);
- bool ret = GPU_stack_link(mat, "geom", in, out,
+ bool ret = GPU_stack_link(mat, node, "geom", in, out,
GPU_builtin(GPU_VIEW_POSITION), GPU_builtin(GPU_VIEW_NORMAL),
GPU_builtin(GPU_INVERSE_VIEW_MATRIX), orco, mtface, mcol);
if (GPU_material_use_world_space_shading(mat)) {
diff --git a/source/blender/nodes/shader/nodes/node_shader_geometry.c b/source/blender/nodes/shader/nodes/node_shader_geometry.c
index 553ea65154f..6647f27e5c9 100644
--- a/source/blender/nodes/shader/nodes/node_shader_geometry.c
+++ b/source/blender/nodes/shader/nodes/node_shader_geometry.c
@@ -41,10 +41,11 @@ static bNodeSocketTemplate sh_node_geometry_out[] = {
{ -1, 0, "" }
};
-static int node_shader_gpu_geometry(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int node_shader_gpu_geometry(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
- return GPU_stack_link(mat, "node_geometry", in, out,
+ return GPU_stack_link(mat, node, "node_geometry", in, out,
GPU_builtin(GPU_VIEW_POSITION), GPU_builtin(GPU_VIEW_NORMAL),
+ GPU_attribute(CD_ORCO, ""), GPU_builtin(GPU_OBJECT_MATRIX),
GPU_builtin(GPU_INVERSE_VIEW_MATRIX));
}
diff --git a/source/blender/nodes/shader/nodes/node_shader_hueSatVal.c b/source/blender/nodes/shader/nodes/node_shader_hueSatVal.c
index 6fe6a33010a..9eaa0c9f91c 100644
--- a/source/blender/nodes/shader/nodes/node_shader_hueSatVal.c
+++ b/source/blender/nodes/shader/nodes/node_shader_hueSatVal.c
@@ -82,9 +82,9 @@ static void node_shader_exec_hue_sat(void *UNUSED(data), int UNUSED(thread), bNo
}
-static int gpu_shader_hue_sat(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int gpu_shader_hue_sat(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
- return GPU_stack_link(mat, "hue_sat", in, out);
+ return GPU_stack_link(mat, node, "hue_sat", in, out);
}
void register_node_type_sh_hue_sat(void)
diff --git a/source/blender/nodes/shader/nodes/node_shader_invert.c b/source/blender/nodes/shader/nodes/node_shader_invert.c
index 27450ba0fe6..6a54733006d 100644
--- a/source/blender/nodes/shader/nodes/node_shader_invert.c
+++ b/source/blender/nodes/shader/nodes/node_shader_invert.c
@@ -65,9 +65,9 @@ static void node_shader_exec_invert(void *UNUSED(data), int UNUSED(thread), bNod
copy_v3_v3(out[0]->vec, icol);
}
-static int gpu_shader_invert(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int gpu_shader_invert(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
- return GPU_stack_link(mat, "invert", in, out);
+ return GPU_stack_link(mat, node, "invert", in, out);
}
void register_node_type_sh_invert(void)
diff --git a/source/blender/nodes/shader/nodes/node_shader_lamp.c b/source/blender/nodes/shader/nodes/node_shader_lamp.c
index 2c96c91958e..3c41227ab8b 100644
--- a/source/blender/nodes/shader/nodes/node_shader_lamp.c
+++ b/source/blender/nodes/shader/nodes/node_shader_lamp.c
@@ -68,7 +68,7 @@ static int gpu_shader_lamp(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(
visifac = GPU_lamp_get_data(mat, lamp, &col, &lv, &dist, &shadow, &energy);
- bool ret = GPU_stack_link(mat, "lamp", in, out, col, energy, lv, dist, shadow, visifac);
+ bool ret = GPU_stack_link(mat, node, "lamp", in, out, col, energy, lv, dist, shadow, visifac);
if (GPU_material_use_world_space_shading(mat))
ret &= GPU_link(mat, "direction_transform_m4v3", out[1].link, GPU_builtin(GPU_INVERSE_VIEW_MATRIX), &out[1].link);
return ret;
diff --git a/source/blender/nodes/shader/nodes/node_shader_layer_weight.c b/source/blender/nodes/shader/nodes/node_shader_layer_weight.c
index 998e1a5687e..3ab73fdde18 100644
--- a/source/blender/nodes/shader/nodes/node_shader_layer_weight.c
+++ b/source/blender/nodes/shader/nodes/node_shader_layer_weight.c
@@ -41,7 +41,7 @@ static bNodeSocketTemplate sh_node_layer_weight_out[] = {
{ -1, 0, "" }
};
-static int node_shader_gpu_layer_weight(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int node_shader_gpu_layer_weight(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
if (!in[1].link)
in[1].link = GPU_builtin(GPU_VIEW_NORMAL);
@@ -49,7 +49,7 @@ static int node_shader_gpu_layer_weight(GPUMaterial *mat, bNode *UNUSED(node), b
GPU_link(mat, "direction_transform_m4v3", in[1].link, GPU_builtin(GPU_VIEW_MATRIX), &in[1].link);
}
- return GPU_stack_link(mat, "node_layer_weight", in, out, GPU_builtin(GPU_VIEW_POSITION));
+ return GPU_stack_link(mat, node, "node_layer_weight", in, out, GPU_builtin(GPU_VIEW_POSITION));
}
static void node_shader_exec_layer_weight(void *data, int UNUSED(thread), bNode *node, bNodeExecData *UNUSED(execdata), bNodeStack **in, bNodeStack **out)
diff --git a/source/blender/nodes/shader/nodes/node_shader_light_falloff.c b/source/blender/nodes/shader/nodes/node_shader_light_falloff.c
index 3aad476ea05..a51e4dc720f 100644
--- a/source/blender/nodes/shader/nodes/node_shader_light_falloff.c
+++ b/source/blender/nodes/shader/nodes/node_shader_light_falloff.c
@@ -44,9 +44,9 @@ static bNodeSocketTemplate sh_node_light_falloff_out[] = {
{ -1, 0, "" }
};
-static int node_shader_gpu_light_falloff(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int node_shader_gpu_light_falloff(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
- return GPU_stack_link(mat, "node_light_falloff", in, out);
+ return GPU_stack_link(mat, node, "node_light_falloff", in, out);
}
/* node type definition */
diff --git a/source/blender/nodes/shader/nodes/node_shader_light_path.c b/source/blender/nodes/shader/nodes/node_shader_light_path.c
index 052f2a66ec8..be6db9c8269 100644
--- a/source/blender/nodes/shader/nodes/node_shader_light_path.c
+++ b/source/blender/nodes/shader/nodes/node_shader_light_path.c
@@ -46,9 +46,9 @@ static bNodeSocketTemplate sh_node_light_path_out[] = {
{ -1, 0, "" }
};
-static int node_shader_gpu_light_path(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int node_shader_gpu_light_path(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
- return GPU_stack_link(mat, "node_light_path", in, out);
+ return GPU_stack_link(mat, node, "node_light_path", in, out);
}
/* node type definition */
diff --git a/source/blender/nodes/shader/nodes/node_shader_mapping.c b/source/blender/nodes/shader/nodes/node_shader_mapping.c
index 2044f5390cc..7f25b298cb2 100644
--- a/source/blender/nodes/shader/nodes/node_shader_mapping.c
+++ b/source/blender/nodes/shader/nodes/node_shader_mapping.c
@@ -94,7 +94,7 @@ static int gpu_shader_mapping(GPUMaterial *mat, bNode *node, bNodeExecData *UNUS
GPUNodeLink *tdomin = GPU_uniform(&domin);
GPUNodeLink *tdomax = GPU_uniform(&domax);
- GPU_stack_link(mat, "mapping", in, out, tmat, tmin, tmax, tdomin, tdomax);
+ GPU_stack_link(mat, node, "mapping", in, out, tmat, tmin, tmax, tdomin, tdomax);
if (texmap->type == TEXMAP_TYPE_NORMAL)
GPU_link(mat, "texco_norm", out[0].link, &out[0].link);
diff --git a/source/blender/nodes/shader/nodes/node_shader_math.c b/source/blender/nodes/shader/nodes/node_shader_math.c
index 2a1e936570d..6cd58d2fb85 100644
--- a/source/blender/nodes/shader/nodes/node_shader_math.c
+++ b/source/blender/nodes/shader/nodes/node_shader_math.c
@@ -249,7 +249,7 @@ static int gpu_shader_math(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(
case NODE_MATH_LESS:
case NODE_MATH_GREATER:
case NODE_MATH_MOD:
- GPU_stack_link(mat, names[node->custom1], in, out);
+ GPU_stack_link(mat, node, names[node->custom1], in, out);
break;
case NODE_MATH_SIN:
case NODE_MATH_COS:
@@ -264,14 +264,14 @@ static int gpu_shader_math(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(
GPUNodeStack tmp_in[2];
memcpy(&tmp_in[0], &in[0], sizeof(GPUNodeStack));
memcpy(&tmp_in[1], &in[2], sizeof(GPUNodeStack));
- GPU_stack_link(mat, names[node->custom1], tmp_in, out);
+ GPU_stack_link(mat, node, names[node->custom1], tmp_in, out);
}
else {
/* use only second item and terminator */
GPUNodeStack tmp_in[2];
memcpy(&tmp_in[0], &in[1], sizeof(GPUNodeStack));
memcpy(&tmp_in[1], &in[2], sizeof(GPUNodeStack));
- GPU_stack_link(mat, names[node->custom1], tmp_in, out);
+ GPU_stack_link(mat, node, names[node->custom1], tmp_in, out);
}
break;
default:
diff --git a/source/blender/nodes/shader/nodes/node_shader_mixRgb.c b/source/blender/nodes/shader/nodes/node_shader_mixRgb.c
index f911fa058dc..cca0a1e0561 100644
--- a/source/blender/nodes/shader/nodes/node_shader_mixRgb.c
+++ b/source/blender/nodes/shader/nodes/node_shader_mixRgb.c
@@ -71,7 +71,8 @@ static int gpu_shader_mix_rgb(GPUMaterial *mat, bNode *node, bNodeExecData *UNUS
"mix_screen", "mix_div", "mix_diff", "mix_dark", "mix_light",
"mix_overlay", "mix_dodge", "mix_burn", "mix_hue", "mix_sat",
"mix_val", "mix_color", "mix_soft", "mix_linear"};
- int ret = GPU_stack_link(mat, names[node->custom1], in, out);
+
+ int ret = GPU_stack_link(mat, node, names[node->custom1], in, out);
if (ret && node->custom2 & SHD_MIXRGB_CLAMP) {
float min[3] = {0.0f, 0.0f, 0.0f};
float max[3] = {1.0f, 1.0f, 1.0f};
diff --git a/source/blender/nodes/shader/nodes/node_shader_mix_shader.c b/source/blender/nodes/shader/nodes/node_shader_mix_shader.c
index 7c5362a8969..5ac576004be 100644
--- a/source/blender/nodes/shader/nodes/node_shader_mix_shader.c
+++ b/source/blender/nodes/shader/nodes/node_shader_mix_shader.c
@@ -41,9 +41,9 @@ static bNodeSocketTemplate sh_node_mix_shader_out[] = {
{ -1, 0, "" }
};
-static int node_shader_gpu_mix_shader(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int node_shader_gpu_mix_shader(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
- return GPU_stack_link(mat, "node_mix_shader", in, out);
+ return GPU_stack_link(mat, node, "node_mix_shader", in, out);
}
/* node type definition */
diff --git a/source/blender/nodes/shader/nodes/node_shader_normal.c b/source/blender/nodes/shader/nodes/node_shader_normal.c
index 092fc201aa7..64f3ec94369 100644
--- a/source/blender/nodes/shader/nodes/node_shader_normal.c
+++ b/source/blender/nodes/shader/nodes/node_shader_normal.c
@@ -58,14 +58,14 @@ static void node_shader_exec_normal(void *UNUSED(data), int UNUSED(thread), bNod
out[1]->vec[0] = -dot_v3v3(vec, out[0]->vec);
}
-static int gpu_shader_normal(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int gpu_shader_normal(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
GPUNodeLink *vec = GPU_uniform(out[0].vec);
if (GPU_material_use_new_shading_nodes(mat)) {
- return GPU_stack_link(mat, "normal_new_shading", in, out, vec);
+ return GPU_stack_link(mat, node, "normal_new_shading", in, out, vec);
}
else {
- return GPU_stack_link(mat, "normal", in, out, vec);
+ return GPU_stack_link(mat, node, "normal", in, out, vec);
}
}
diff --git a/source/blender/nodes/shader/nodes/node_shader_object_info.c b/source/blender/nodes/shader/nodes/node_shader_object_info.c
index 63d3bac88a0..471331beae3 100644
--- a/source/blender/nodes/shader/nodes/node_shader_object_info.c
+++ b/source/blender/nodes/shader/nodes/node_shader_object_info.c
@@ -37,9 +37,9 @@ static bNodeSocketTemplate sh_node_object_info_out[] = {
{ -1, 0, "" }
};
-static int node_shader_gpu_object_info(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int node_shader_gpu_object_info(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
- return GPU_stack_link(mat, "node_object_info", in, out, GPU_builtin(GPU_OBJECT_MATRIX), GPU_builtin(GPU_OBJECT_INFO));
+ return GPU_stack_link(mat, node, "node_object_info", in, out, GPU_builtin(GPU_OBJECT_MATRIX), GPU_builtin(GPU_OBJECT_INFO));
}
static void node_shader_exec_object_info(void *data, int UNUSED(thread), bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), bNodeStack **UNUSED(in), bNodeStack **out)
diff --git a/source/blender/nodes/shader/nodes/node_shader_output.c b/source/blender/nodes/shader/nodes/node_shader_output.c
index 789df09d898..52f659d8321 100644
--- a/source/blender/nodes/shader/nodes/node_shader_output.c
+++ b/source/blender/nodes/shader/nodes/node_shader_output.c
@@ -32,6 +32,8 @@
#include "node_shader_util.h"
+#include "BKE_scene.h"
+
/* **************** OUTPUT ******************** */
static bNodeSocketTemplate sh_node_output_in[] = {
{ SOCK_RGBA, 1, N_("Color"), 0.0f, 0.0f, 0.0f, 1.0f},
@@ -65,7 +67,7 @@ static void node_shader_exec_output(void *data, int UNUSED(thread), bNode *node,
}
}
-static int gpu_shader_output(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int gpu_shader_output(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
GPUNodeLink *outlink;
@@ -74,7 +76,7 @@ static int gpu_shader_output(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecDat
GPU_material_enable_alpha(mat);
#endif
- GPU_stack_link(mat, "output_node", in, out, &outlink);
+ GPU_stack_link(mat, node, "output_node", in, out, &outlink);
GPU_material_output_link(mat, outlink);
return 1;
diff --git a/source/blender/nodes/shader/nodes/node_shader_output_material.c b/source/blender/nodes/shader/nodes/node_shader_output_material.c
index aeb8b546eed..e901e7c4590 100644
--- a/source/blender/nodes/shader/nodes/node_shader_output_material.c
+++ b/source/blender/nodes/shader/nodes/node_shader_output_material.c
@@ -27,6 +27,8 @@
#include "../node_shader_util.h"
+#include "BKE_scene.h"
+
/* **************** OUTPUT ******************** */
static bNodeSocketTemplate sh_node_output_material_in[] = {
@@ -36,11 +38,11 @@ static bNodeSocketTemplate sh_node_output_material_in[] = {
{ -1, 0, "" }
};
-static int node_shader_gpu_output_material(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int node_shader_gpu_output_material(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
GPUNodeLink *outlink;
- GPU_stack_link(mat, "node_output_material", in, out, &outlink);
+ GPU_stack_link(mat, node, "node_output_material", in, out, &outlink);
GPU_material_output_link(mat, outlink);
return true;
diff --git a/source/blender/nodes/shader/nodes/node_shader_output_world.c b/source/blender/nodes/shader/nodes/node_shader_output_world.c
index f95cc842720..abab4fc351a 100644
--- a/source/blender/nodes/shader/nodes/node_shader_output_world.c
+++ b/source/blender/nodes/shader/nodes/node_shader_output_world.c
@@ -35,11 +35,11 @@ static bNodeSocketTemplate sh_node_output_world_in[] = {
{ -1, 0, "" }
};
-static int node_shader_gpu_output_world(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int node_shader_gpu_output_world(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
GPUNodeLink *outlink;
- GPU_stack_link(mat, "node_output_world", in, out, &outlink);
+ GPU_stack_link(mat, node, "node_output_world", in, out, &outlink);
GPU_material_output_link(mat, outlink);
return true;
diff --git a/source/blender/nodes/shader/nodes/node_shader_particle_info.c b/source/blender/nodes/shader/nodes/node_shader_particle_info.c
index 5f0d81e98c9..8bdc88292e7 100644
--- a/source/blender/nodes/shader/nodes/node_shader_particle_info.c
+++ b/source/blender/nodes/shader/nodes/node_shader_particle_info.c
@@ -48,10 +48,10 @@ static void node_shader_exec_particle_info(void *data, int UNUSED(thread), bNode
RE_instance_get_particle_info(shi->obi, out[0]->vec, out[1]->vec, out[2]->vec, out[3]->vec, out[4]->vec, out[5]->vec, out[6]->vec);
}
-static int gpu_shader_particle_info(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int gpu_shader_particle_info(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
- return GPU_stack_link(mat, "particle_info", in, out,
+ return GPU_stack_link(mat, node, "particle_info", in, out,
GPU_builtin(GPU_PARTICLE_SCALAR_PROPS),
GPU_builtin(GPU_PARTICLE_LOCATION),
GPU_builtin(GPU_PARTICLE_VELOCITY),
diff --git a/source/blender/nodes/shader/nodes/node_shader_rgb.c b/source/blender/nodes/shader/nodes/node_shader_rgb.c
index 4f345bf2067..b9c051c0441 100644
--- a/source/blender/nodes/shader/nodes/node_shader_rgb.c
+++ b/source/blender/nodes/shader/nodes/node_shader_rgb.c
@@ -38,10 +38,10 @@ static bNodeSocketTemplate sh_node_rgb_out[] = {
{ -1, 0, "" }
};
-static int gpu_shader_rgb(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int gpu_shader_rgb(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
- GPUNodeLink *vec = GPU_uniform(out[0].vec);
- return GPU_stack_link(mat, "set_rgba", in, out, vec);
+ GPUNodeLink *link = GPU_uniformbuffer_link_out(mat, node, out, 0);
+ return GPU_stack_link(mat, node, "set_rgba", in, out, link);
}
void register_node_type_sh_rgb(void)
diff --git a/source/blender/nodes/shader/nodes/node_shader_sepcombHSV.c b/source/blender/nodes/shader/nodes/node_shader_sepcombHSV.c
index b5b15397595..d031a2e412f 100644
--- a/source/blender/nodes/shader/nodes/node_shader_sepcombHSV.c
+++ b/source/blender/nodes/shader/nodes/node_shader_sepcombHSV.c
@@ -53,9 +53,9 @@ static void node_shader_exec_sephsv(void *UNUSED(data), int UNUSED(thread), bNod
&out[0]->vec[0], &out[1]->vec[0], &out[2]->vec[0]);
}
-static int gpu_shader_sephsv(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int gpu_shader_sephsv(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
- return GPU_stack_link(mat, "separate_hsv", in, out);
+ return GPU_stack_link(mat, node, "separate_hsv", in, out);
}
void register_node_type_sh_sephsv(void)
@@ -94,9 +94,9 @@ static void node_shader_exec_combhsv(void *UNUSED(data), int UNUSED(thread), bNo
hsv_to_rgb(h, s, v, &out[0]->vec[0], &out[0]->vec[1], &out[0]->vec[2]);
}
-static int gpu_shader_combhsv(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int gpu_shader_combhsv(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
- return GPU_stack_link(mat, "combine_hsv", in, out);
+ return GPU_stack_link(mat, node, "combine_hsv", in, out);
}
void register_node_type_sh_combhsv(void)
diff --git a/source/blender/nodes/shader/nodes/node_shader_sepcombRGB.c b/source/blender/nodes/shader/nodes/node_shader_sepcombRGB.c
index 006ba34c3f3..682909edb0e 100644
--- a/source/blender/nodes/shader/nodes/node_shader_sepcombRGB.c
+++ b/source/blender/nodes/shader/nodes/node_shader_sepcombRGB.c
@@ -54,9 +54,9 @@ static void node_shader_exec_seprgb(void *UNUSED(data), int UNUSED(thread), bNod
out[2]->vec[0] = col[2];
}
-static int gpu_shader_seprgb(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int gpu_shader_seprgb(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
- return GPU_stack_link(mat, "separate_rgb", in, out);
+ return GPU_stack_link(mat, node, "separate_rgb", in, out);
}
void register_node_type_sh_seprgb(void)
@@ -98,9 +98,9 @@ static void node_shader_exec_combrgb(void *UNUSED(data), int UNUSED(thread), bNo
out[0]->vec[2] = b;
}
-static int gpu_shader_combrgb(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int gpu_shader_combrgb(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
- return GPU_stack_link(mat, "combine_rgb", in, out);
+ return GPU_stack_link(mat, node, "combine_rgb", in, out);
}
void register_node_type_sh_combrgb(void)
diff --git a/source/blender/nodes/shader/nodes/node_shader_sepcombXYZ.c b/source/blender/nodes/shader/nodes/node_shader_sepcombXYZ.c
index 6375dcc8782..fce62f730b9 100644
--- a/source/blender/nodes/shader/nodes/node_shader_sepcombXYZ.c
+++ b/source/blender/nodes/shader/nodes/node_shader_sepcombXYZ.c
@@ -44,9 +44,9 @@ static bNodeSocketTemplate sh_node_sepxyz_out[] = {
{ -1, 0, "" }
};
-static int gpu_shader_sepxyz(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int gpu_shader_sepxyz(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
- return GPU_stack_link(mat, "separate_xyz", in, out);
+ return GPU_stack_link(mat, node, "separate_xyz", in, out);
}
void register_node_type_sh_sepxyz(void)
@@ -75,9 +75,9 @@ static bNodeSocketTemplate sh_node_combxyz_out[] = {
{ -1, 0, "" }
};
-static int gpu_shader_combxyz(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int gpu_shader_combxyz(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
- return GPU_stack_link(mat, "combine_xyz", in, out);
+ return GPU_stack_link(mat, node, "combine_xyz", in, out);
}
void register_node_type_sh_combxyz(void)
diff --git a/source/blender/nodes/shader/nodes/node_shader_squeeze.c b/source/blender/nodes/shader/nodes/node_shader_squeeze.c
index a4c995748d9..2a1fbc2d02d 100644
--- a/source/blender/nodes/shader/nodes/node_shader_squeeze.c
+++ b/source/blender/nodes/shader/nodes/node_shader_squeeze.c
@@ -56,9 +56,9 @@ static void node_shader_exec_squeeze(void *UNUSED(data), int UNUSED(thread), bNo
out[0]->vec[0] = 1.0f / (1.0f + powf(M_E, -((vec[0] - vec[2]) * vec[1])));
}
-static int gpu_shader_squeeze(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int gpu_shader_squeeze(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
- return GPU_stack_link(mat, "squeeze", in, out);
+ return GPU_stack_link(mat, node, "squeeze", in, out);
}
void register_node_type_sh_squeeze(void)
diff --git a/source/blender/nodes/shader/nodes/node_shader_subsurface_scattering.c b/source/blender/nodes/shader/nodes/node_shader_subsurface_scattering.c
index 7dfac32e85b..116825ff0da 100644
--- a/source/blender/nodes/shader/nodes/node_shader_subsurface_scattering.c
+++ b/source/blender/nodes/shader/nodes/node_shader_subsurface_scattering.c
@@ -49,14 +49,23 @@ static void node_shader_init_subsurface_scattering(bNodeTree *UNUSED(ntree), bNo
node->custom1 = SHD_SUBSURFACE_BURLEY;
}
-static int node_shader_gpu_subsurface_scattering(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int node_shader_gpu_subsurface_scattering(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
if (!in[5].link)
- in[5].link = GPU_builtin(GPU_VIEW_NORMAL);
- else
- GPU_link(mat, "direction_transform_m4v3", in[5].link, GPU_builtin(GPU_VIEW_MATRIX), &in[5].link);
+ GPU_link(mat, "world_normals_get", &in[5].link);
- return GPU_stack_link(mat, "node_subsurface_scattering", in, out);
+ if (node->sss_id == 1) {
+ bNodeSocket *socket = BLI_findlink(&node->original->inputs, 2);
+ bNodeSocketValueRGBA *socket_data = socket->default_value;
+ bNodeSocket *socket_sharp = BLI_findlink(&node->original->inputs, 3);
+ bNodeSocketValueFloat *socket_data_sharp = socket_sharp->default_value;
+ /* For some reason it seems that the socket value is in ARGB format. */
+ GPU_material_sss_profile_create(mat, &socket_data->value[1],
+ &node->original->custom1,
+ &socket_data_sharp->value);
+ }
+
+ return GPU_stack_link(mat, node, "node_subsurface_scattering", in, out, GPU_uniform(&node->sss_id));
}
static void node_shader_update_subsurface_scattering(bNodeTree *UNUSED(ntree), bNode *node)
diff --git a/source/blender/nodes/shader/nodes/node_shader_tangent.c b/source/blender/nodes/shader/nodes/node_shader_tangent.c
index 7aa7fb43221..f2c59ec8fd8 100644
--- a/source/blender/nodes/shader/nodes/node_shader_tangent.c
+++ b/source/blender/nodes/shader/nodes/node_shader_tangent.c
@@ -41,6 +41,28 @@ static void node_shader_init_tangent(bNodeTree *UNUSED(ntree), bNode *node)
node->storage = attr;
}
+static int node_shader_gpu_tangent(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+{
+ NodeShaderTangent *attr = node->storage;
+
+ if (attr->direction_type == SHD_TANGENT_UVMAP) {
+ return GPU_stack_link(mat, node, "node_tangentmap", in, out, GPU_attribute(CD_TANGENT, ""), GPU_builtin(GPU_INVERSE_VIEW_MATRIX));
+ }
+ else {
+ GPUNodeLink *orco = GPU_attribute(CD_ORCO, "");
+
+ if (attr->axis == SHD_TANGENT_AXIS_X)
+ GPU_link(mat, "tangent_orco_x", orco, &orco);
+ else if (attr->axis == SHD_TANGENT_AXIS_Y)
+ GPU_link(mat, "tangent_orco_y", orco, &orco);
+ else
+ GPU_link(mat, "tangent_orco_z", orco, &orco);
+
+ return GPU_stack_link(mat, node, "node_tangent", in, out, GPU_builtin(GPU_VIEW_NORMAL), orco,
+ GPU_builtin(GPU_OBJECT_MATRIX), GPU_builtin(GPU_INVERSE_VIEW_MATRIX));
+ }
+}
+
/* node type definition */
void register_node_type_sh_tangent(void)
{
@@ -51,6 +73,7 @@ void register_node_type_sh_tangent(void)
node_type_socket_templates(&ntype, NULL, sh_node_tangent_out);
node_type_size_preset(&ntype, NODE_SIZE_MIDDLE);
node_type_init(&ntype, node_shader_init_tangent);
+ node_type_gpu(&ntype, node_shader_gpu_tangent);
node_type_storage(&ntype, "NodeShaderTangent", node_free_standard_storage, node_copy_standard_storage);
nodeRegisterType(&ntype);
diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_brick.c b/source/blender/nodes/shader/nodes/node_shader_tex_brick.c
index 1dfebc45d60..20ea162d98f 100644
--- a/source/blender/nodes/shader/nodes/node_shader_tex_brick.c
+++ b/source/blender/nodes/shader/nodes/node_shader_tex_brick.c
@@ -80,7 +80,7 @@ static int node_shader_gpu_tex_brick(GPUMaterial *mat, bNode *node, bNodeExecDat
NodeTexBrick *tex = (NodeTexBrick *)node->storage;
float offset_freq = tex->offset_freq;
float squash_freq = tex->squash_freq;
- return GPU_stack_link(mat, "node_tex_brick",
+ return GPU_stack_link(mat, node, "node_tex_brick",
in, out,
GPU_uniform(&tex->offset), GPU_uniform(&offset_freq),
GPU_uniform(&tex->squash), GPU_uniform(&squash_freq));
diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_checker.c b/source/blender/nodes/shader/nodes/node_shader_tex_checker.c
index 77edd0e115e..3dbf98a929c 100644
--- a/source/blender/nodes/shader/nodes/node_shader_tex_checker.c
+++ b/source/blender/nodes/shader/nodes/node_shader_tex_checker.c
@@ -61,7 +61,7 @@ static int node_shader_gpu_tex_checker(GPUMaterial *mat, bNode *node, bNodeExecD
node_shader_gpu_tex_mapping(mat, node, in, out);
- return GPU_stack_link(mat, "node_tex_checker", in, out);
+ return GPU_stack_link(mat, node, "node_tex_checker", in, out);
}
/* node type definition */
diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_coord.c b/source/blender/nodes/shader/nodes/node_shader_tex_coord.c
index be393582a42..0cab9379364 100644
--- a/source/blender/nodes/shader/nodes/node_shader_tex_coord.c
+++ b/source/blender/nodes/shader/nodes/node_shader_tex_coord.c
@@ -42,20 +42,22 @@ static bNodeSocketTemplate sh_node_tex_coord_out[] = {
{ -1, 0, "" }
};
-static int node_shader_gpu_tex_coord(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int node_shader_gpu_tex_coord(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
GPUNodeLink *orco = GPU_attribute(CD_ORCO, "");
GPUNodeLink *mtface = GPU_attribute(CD_MTFACE, "");
GPUMatType type = GPU_Material_get_type(mat);
+
+ GPU_link(mat, "generated_from_orco", orco, &orco);
- if (type == GPU_MATERIAL_TYPE_MESH) {
- return GPU_stack_link(mat, "node_tex_coord", in, out,
+ if (type == GPU_MATERIAL_TYPE_WORLD) {
+ return GPU_stack_link(mat, node, "node_tex_coord_background", in, out,
GPU_builtin(GPU_VIEW_POSITION), GPU_builtin(GPU_VIEW_NORMAL),
GPU_builtin(GPU_INVERSE_VIEW_MATRIX), GPU_builtin(GPU_INVERSE_OBJECT_MATRIX),
GPU_builtin(GPU_CAMERA_TEXCO_FACTORS), orco, mtface);
}
else {
- return GPU_stack_link(mat, "node_tex_coord_background", in, out,
+ return GPU_stack_link(mat, node, "node_tex_coord", in, out,
GPU_builtin(GPU_VIEW_POSITION), GPU_builtin(GPU_VIEW_NORMAL),
GPU_builtin(GPU_INVERSE_VIEW_MATRIX), GPU_builtin(GPU_INVERSE_OBJECT_MATRIX),
GPU_builtin(GPU_CAMERA_TEXCO_FACTORS), orco, mtface);
diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_environment.c b/source/blender/nodes/shader/nodes/node_shader_tex_environment.c
index 2f8f95b0675..4d98b142f37 100644
--- a/source/blender/nodes/shader/nodes/node_shader_tex_environment.c
+++ b/source/blender/nodes/shader/nodes/node_shader_tex_environment.c
@@ -62,7 +62,7 @@ static int node_shader_gpu_tex_environment(GPUMaterial *mat, bNode *node, bNodeE
int isdata = tex->color_space == SHD_COLORSPACE_NONE;
if (!ima)
- return GPU_stack_link(mat, "node_tex_environment_empty", in, out);
+ return GPU_stack_link(mat, node, "node_tex_environment_empty", in, out);
if (!in[0].link) {
GPUMatType type = GPU_Material_get_type(mat);
@@ -76,9 +76,9 @@ static int node_shader_gpu_tex_environment(GPUMaterial *mat, bNode *node, bNodeE
node_shader_gpu_tex_mapping(mat, node, in, out);
if (tex->projection == SHD_PROJ_EQUIRECTANGULAR)
- GPU_stack_link(mat, "node_tex_environment_equirectangular", in, out, GPU_image(ima, iuser, isdata));
+ GPU_stack_link(mat, node, "node_tex_environment_equirectangular", in, out, GPU_image(ima, iuser, isdata));
else
- GPU_stack_link(mat, "node_tex_environment_mirror_ball", in, out, GPU_image(ima, iuser, isdata));
+ GPU_stack_link(mat, node, "node_tex_environment_mirror_ball", in, out, GPU_image(ima, iuser, isdata));
ImBuf *ibuf = BKE_image_acquire_ibuf(ima, iuser, NULL);
if (ibuf && (ibuf->colormanage_flag & IMB_COLORMANAGE_IS_DATA) == 0 &&
diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_gradient.c b/source/blender/nodes/shader/nodes/node_shader_tex_gradient.c
index 18a8065fb57..13d3438587c 100644
--- a/source/blender/nodes/shader/nodes/node_shader_tex_gradient.c
+++ b/source/blender/nodes/shader/nodes/node_shader_tex_gradient.c
@@ -61,7 +61,7 @@ static int node_shader_gpu_tex_gradient(GPUMaterial *mat, bNode *node, bNodeExec
NodeTexGradient *tex = (NodeTexGradient *)node->storage;
float gradient_type = tex->gradient_type;
- return GPU_stack_link(mat, "node_tex_gradient", in, out, GPU_uniform(&gradient_type));
+ return GPU_stack_link(mat, node, "node_tex_gradient", in, out, GPU_uniform(&gradient_type));
}
/* node type definition */
diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_image.c b/source/blender/nodes/shader/nodes/node_shader_tex_image.c
index 71200dfe9d3..c86a502b666 100644
--- a/source/blender/nodes/shader/nodes/node_shader_tex_image.c
+++ b/source/blender/nodes/shader/nodes/node_shader_tex_image.c
@@ -66,7 +66,7 @@ static int node_shader_gpu_tex_image(GPUMaterial *mat, bNode *node, bNodeExecDat
float blend = tex->projection_blend;
if (!ima)
- return GPU_stack_link(mat, "node_tex_image_empty", in, out);
+ return GPU_stack_link(mat, node, "node_tex_image_empty", in, out);
if (!in[0].link)
in[0].link = GPU_attribute(CD_MTFACE, "");
@@ -75,7 +75,7 @@ static int node_shader_gpu_tex_image(GPUMaterial *mat, bNode *node, bNodeExecDat
switch (tex->projection) {
case SHD_PROJ_FLAT:
- GPU_stack_link(mat, "node_tex_image", in, out, GPU_image(ima, iuser, isdata));
+ GPU_stack_link(mat, node, "node_tex_image", in, out, GPU_image(ima, iuser, isdata));
break;
case SHD_PROJ_BOX:
GPU_link(mat, "direction_transform_m4v3", GPU_builtin(GPU_VIEW_NORMAL),
@@ -94,12 +94,12 @@ static int node_shader_gpu_tex_image(GPUMaterial *mat, bNode *node, bNodeExecDat
case SHD_PROJ_SPHERE:
GPU_link(mat, "point_texco_remap_square", in[0].link, &in[0].link);
GPU_link(mat, "point_map_to_sphere", in[0].link, &in[0].link);
- GPU_stack_link(mat, "node_tex_image", in, out, GPU_image(ima, iuser, isdata));
+ GPU_stack_link(mat, node, "node_tex_image", in, out, GPU_image(ima, iuser, isdata));
break;
case SHD_PROJ_TUBE:
GPU_link(mat, "point_texco_remap_square", in[0].link, &in[0].link);
GPU_link(mat, "point_map_to_tube", in[0].link, &in[0].link);
- GPU_stack_link(mat, "node_tex_image", in, out, GPU_image(ima, iuser, isdata));
+ GPU_stack_link(mat, node, "node_tex_image", in, out, GPU_image(ima, iuser, isdata));
break;
}
diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_magic.c b/source/blender/nodes/shader/nodes/node_shader_tex_magic.c
index 8700d7954e7..7cd79067693 100644
--- a/source/blender/nodes/shader/nodes/node_shader_tex_magic.c
+++ b/source/blender/nodes/shader/nodes/node_shader_tex_magic.c
@@ -64,7 +64,7 @@ static int node_shader_gpu_tex_magic(GPUMaterial *mat, bNode *node, bNodeExecDat
node_shader_gpu_tex_mapping(mat, node, in, out);
- return GPU_stack_link(mat, "node_tex_magic", in, out, GPU_uniform(&depth));
+ return GPU_stack_link(mat, node, "node_tex_magic", in, out, GPU_uniform(&depth));
}
/* node type definition */
diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_musgrave.c b/source/blender/nodes/shader/nodes/node_shader_tex_musgrave.c
index 51d6699fadd..e36b2d5b95b 100644
--- a/source/blender/nodes/shader/nodes/node_shader_tex_musgrave.c
+++ b/source/blender/nodes/shader/nodes/node_shader_tex_musgrave.c
@@ -68,7 +68,7 @@ static int node_shader_gpu_tex_musgrave(GPUMaterial *mat, bNode *node, bNodeExec
NodeTexMusgrave *tex = (NodeTexMusgrave *)node->storage;
float type = tex->musgrave_type;
- return GPU_stack_link(mat, "node_tex_musgrave", in, out, GPU_uniform(&type));
+ return GPU_stack_link(mat, node, "node_tex_musgrave", in, out, GPU_uniform(&type));
}
/* node type definition */
diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_noise.c b/source/blender/nodes/shader/nodes/node_shader_tex_noise.c
index 91015b3db25..38b208fc876 100644
--- a/source/blender/nodes/shader/nodes/node_shader_tex_noise.c
+++ b/source/blender/nodes/shader/nodes/node_shader_tex_noise.c
@@ -61,7 +61,7 @@ static int node_shader_gpu_tex_noise(GPUMaterial *mat, bNode *node, bNodeExecDat
node_shader_gpu_tex_mapping(mat, node, in, out);
- return GPU_stack_link(mat, "node_tex_noise", in, out);
+ return GPU_stack_link(mat, node, "node_tex_noise", in, out);
}
/* node type definition */
diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_sky.c b/source/blender/nodes/shader/nodes/node_shader_tex_sky.c
index 495c78ca929..7df6d34b756 100644
--- a/source/blender/nodes/shader/nodes/node_shader_tex_sky.c
+++ b/source/blender/nodes/shader/nodes/node_shader_tex_sky.c
@@ -61,7 +61,7 @@ static int node_shader_gpu_tex_sky(GPUMaterial *mat, bNode *node, bNodeExecData
node_shader_gpu_tex_mapping(mat, node, in, out);
- return GPU_stack_link(mat, "node_tex_sky", in, out);
+ return GPU_stack_link(mat, node, "node_tex_sky", in, out);
}
/* node type definition */
diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_voronoi.c b/source/blender/nodes/shader/nodes/node_shader_tex_voronoi.c
index c994798e2da..30deb422e58 100644
--- a/source/blender/nodes/shader/nodes/node_shader_tex_voronoi.c
+++ b/source/blender/nodes/shader/nodes/node_shader_tex_voronoi.c
@@ -63,7 +63,7 @@ static int node_shader_gpu_tex_voronoi(GPUMaterial *mat, bNode *node, bNodeExecD
NodeTexVoronoi *tex = (NodeTexVoronoi *)node->storage;
float coloring = tex->coloring;
- return GPU_stack_link(mat, "node_tex_voronoi", in, out, GPU_uniform(&coloring));
+ return GPU_stack_link(mat, node, "node_tex_voronoi", in, out, GPU_uniform(&coloring));
}
/* node type definition */
diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_wave.c b/source/blender/nodes/shader/nodes/node_shader_tex_wave.c
index 1194874e06c..356d2a78139 100644
--- a/source/blender/nodes/shader/nodes/node_shader_tex_wave.c
+++ b/source/blender/nodes/shader/nodes/node_shader_tex_wave.c
@@ -67,7 +67,7 @@ static int node_shader_gpu_tex_wave(GPUMaterial *mat, bNode *node, bNodeExecData
float wave_type = tex->wave_type;
float wave_profile = tex->wave_profile;
- return GPU_stack_link(mat, "node_tex_wave", in, out, GPU_uniform(&wave_type), GPU_uniform(&wave_profile));
+ return GPU_stack_link(mat, node, "node_tex_wave", in, out, GPU_uniform(&wave_type), GPU_uniform(&wave_profile));
}
/* node type definition */
diff --git a/source/blender/nodes/shader/nodes/node_shader_texture.c b/source/blender/nodes/shader/nodes/node_shader_texture.c
index b0b25a4878b..755ef106ade 100644
--- a/source/blender/nodes/shader/nodes/node_shader_texture.c
+++ b/source/blender/nodes/shader/nodes/node_shader_texture.c
@@ -126,7 +126,7 @@ static int gpu_shader_texture(GPUMaterial *mat, bNode *node, bNodeExecData *UNUS
if (tex && tex->ima && (tex->type == TEX_IMAGE || tex->type == TEX_ENVMAP)) {
if (tex->type == TEX_IMAGE) {
GPUNodeLink *texlink = GPU_image(tex->ima, &tex->iuser, false);
- GPU_stack_link(mat, "texture_image", in, out, texlink);
+ GPU_stack_link(mat, node, "texture_image", in, out, texlink);
}
else { /* TEX_ENVMAP */
if (!in[0].link)
diff --git a/source/blender/nodes/shader/nodes/node_shader_uvmap.c b/source/blender/nodes/shader/nodes/node_shader_uvmap.c
index 0f96cb45fe0..c47bb9022b6 100644
--- a/source/blender/nodes/shader/nodes/node_shader_uvmap.c
+++ b/source/blender/nodes/shader/nodes/node_shader_uvmap.c
@@ -47,7 +47,7 @@ static int node_shader_gpu_uvmap(GPUMaterial *mat, bNode *node, bNodeExecData *U
NodeShaderUVMap *attr = node->storage;
GPUNodeLink *mtface = GPU_attribute(CD_MTFACE, attr->uv_map);
- return GPU_stack_link(mat, "node_uvmap", in, out, mtface);
+ return GPU_stack_link(mat, node, "node_uvmap", in, out, mtface);
}
/* node type definition */
diff --git a/source/blender/nodes/shader/nodes/node_shader_valToRgb.c b/source/blender/nodes/shader/nodes/node_shader_valToRgb.c
index c960e006a9b..39598eb8675 100644
--- a/source/blender/nodes/shader/nodes/node_shader_valToRgb.c
+++ b/source/blender/nodes/shader/nodes/node_shader_valToRgb.c
@@ -69,7 +69,7 @@ static int gpu_shader_valtorgb(GPUMaterial *mat, bNode *node, bNodeExecData *UNU
int size;
BKE_colorband_evaluate_table_rgba(node->storage, &array, &size);
- return GPU_stack_link(mat, "valtorgb", in, out, GPU_texture(size, array));
+ return GPU_stack_link(mat, node, "valtorgb", in, out, GPU_texture(size, array));
}
void register_node_type_sh_valtorgb(void)
@@ -110,9 +110,9 @@ static void node_shader_exec_rgbtobw(void *UNUSED(data), int UNUSED(thread), bNo
out[0]->vec[0] = IMB_colormanagement_get_luminance(col);
}
-static int gpu_shader_rgbtobw(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int gpu_shader_rgbtobw(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
- return GPU_stack_link(mat, "rgbtobw", in, out);
+ return GPU_stack_link(mat, node, "rgbtobw", in, out);
}
void register_node_type_sh_rgbtobw(void)
diff --git a/source/blender/nodes/shader/nodes/node_shader_value.c b/source/blender/nodes/shader/nodes/node_shader_value.c
index 3a9582a6a7c..1e5bd8c5bff 100644
--- a/source/blender/nodes/shader/nodes/node_shader_value.c
+++ b/source/blender/nodes/shader/nodes/node_shader_value.c
@@ -38,10 +38,10 @@ static bNodeSocketTemplate sh_node_value_out[] = {
{ -1, 0, "" }
};
-static int gpu_shader_value(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
+static int gpu_shader_value(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
- GPUNodeLink *vec = GPU_uniform(out[0].vec);
- return GPU_stack_link(mat, "set_value", in, out, vec);
+ GPUNodeLink *link = GPU_uniformbuffer_link_out(mat, node, out, 0);
+ return GPU_stack_link(mat, node, "set_value", in, out, link);
}
void register_node_type_sh_value(void)
diff --git a/source/blender/nodes/shader/nodes/node_shader_vectMath.c b/source/blender/nodes/shader/nodes/node_shader_vectMath.c
index 26045dfca04..f117adde98c 100644
--- a/source/blender/nodes/shader/nodes/node_shader_vectMath.c
+++ b/source/blender/nodes/shader/nodes/node_shader_vectMath.c
@@ -111,7 +111,7 @@ static int gpu_shader_vect_math(GPUMaterial *mat, bNode *node, bNodeExecData *UN
case 2:
case 3:
case 4:
- GPU_stack_link(mat, names[node->custom1], in, out);
+ GPU_stack_link(mat, node, names[node->custom1], in, out);
break;
case 5:
if (in[0].hasinput || !in[1].hasinput) {
@@ -119,14 +119,14 @@ static int gpu_shader_vect_math(GPUMaterial *mat, bNode *node, bNodeExecData *UN
GPUNodeStack tmp_in[2];
memcpy(&tmp_in[0], &in[0], sizeof(GPUNodeStack));
memcpy(&tmp_in[1], &in[2], sizeof(GPUNodeStack));
- GPU_stack_link(mat, names[node->custom1], tmp_in, out);
+ GPU_stack_link(mat, node, names[node->custom1], tmp_in, out);
}
else {
/* use only second item and terminator */
GPUNodeStack tmp_in[2];
memcpy(&tmp_in[0], &in[1], sizeof(GPUNodeStack));
memcpy(&tmp_in[1], &in[2], sizeof(GPUNodeStack));
- GPU_stack_link(mat, names[node->custom1], tmp_in, out);
+ GPU_stack_link(mat, node, names[node->custom1], tmp_in, out);
}
break;
default:
diff --git a/source/blender/nodes/shader/nodes/node_shader_vector_displacement.c b/source/blender/nodes/shader/nodes/node_shader_vector_displacement.c
index c40377c3d59..c864a606812 100644
--- a/source/blender/nodes/shader/nodes/node_shader_vector_displacement.c
+++ b/source/blender/nodes/shader/nodes/node_shader_vector_displacement.c
@@ -50,6 +50,7 @@ static int gpu_shader_vector_displacement(GPUMaterial *mat, bNode *node, bNodeEx
{
if(node->custom1 == SHD_SPACE_TANGENT) {
return GPU_stack_link(mat,
+ node,
"node_vector_displacement_tangent",
in,
out,
@@ -59,10 +60,10 @@ static int gpu_shader_vector_displacement(GPUMaterial *mat, bNode *node, bNodeEx
GPU_builtin(GPU_VIEW_MATRIX));
}
else if(node->custom1 == SHD_SPACE_OBJECT) {
- return GPU_stack_link(mat, "node_vector_displacement_object", in, out, GPU_builtin(GPU_OBJECT_MATRIX));
+ return GPU_stack_link(mat, node, "node_vector_displacement_object", in, out, GPU_builtin(GPU_OBJECT_MATRIX));
}
else {
- return GPU_stack_link(mat, "node_vector_displacement_world", in, out);
+ return GPU_stack_link(mat, node, "node_vector_displacement_world", in, out);
}
}
diff --git a/source/blender/nodes/shader/nodes/node_shader_volume_absorption.c b/source/blender/nodes/shader/nodes/node_shader_volume_absorption.c
index 4861871e8d3..518ab6587b2 100644
--- a/source/blender/nodes/shader/nodes/node_shader_volume_absorption.c
+++ b/source/blender/nodes/shader/nodes/node_shader_volume_absorption.c
@@ -40,9 +40,9 @@ static bNodeSocketTemplate sh_node_volume_absorption_out[] = {
{ -1, 0, "" }
};
-static int node_shader_gpu_volume_absorption(GPUMaterial *UNUSED(mat), bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *UNUSED(in), GPUNodeStack *UNUSED(out))
+static int node_shader_gpu_volume_absorption(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
- return false;
+ return GPU_stack_link(mat, node, "node_volume_absorption", in, out);
}
/* node type definition */
diff --git a/source/blender/nodes/shader/nodes/node_shader_volume_scatter.c b/source/blender/nodes/shader/nodes/node_shader_volume_scatter.c
index 0c5647b4ba8..bce4695af10 100644
--- a/source/blender/nodes/shader/nodes/node_shader_volume_scatter.c
+++ b/source/blender/nodes/shader/nodes/node_shader_volume_scatter.c
@@ -41,9 +41,9 @@ static bNodeSocketTemplate sh_node_volume_scatter_out[] = {
{ -1, 0, "" }
};
-static int node_shader_gpu_volume_scatter(GPUMaterial *UNUSED(mat), bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *UNUSED(in), GPUNodeStack *UNUSED(out))
+static int node_shader_gpu_volume_scatter(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
- return false;
+ return GPU_stack_link(mat, node, "node_volume_scatter", in, out);
}
/* node type definition */
diff --git a/source/blender/nodes/texture/node_texture_tree.c b/source/blender/nodes/texture/node_texture_tree.c
index 714665c303b..24e79b71c0a 100644
--- a/source/blender/nodes/texture/node_texture_tree.c
+++ b/source/blender/nodes/texture/node_texture_tree.c
@@ -35,6 +35,7 @@
#include "DNA_texture_types.h"
#include "DNA_node_types.h"
#include "DNA_space_types.h"
+#include "DNA_workspace_types.h"
#include "BLI_listbase.h"
#include "BLI_threads.h"
@@ -53,16 +54,20 @@
#include "NOD_texture.h"
#include "node_texture_util.h"
+#include "DEG_depsgraph.h"
+
#include "RNA_access.h"
#include "RE_shader_ext.h"
-
-static void texture_get_from_context(const bContext *C, bNodeTreeType *UNUSED(treetype), bNodeTree **r_ntree, ID **r_id, ID **r_from)
+static void texture_get_from_context(
+ const bContext *C, bNodeTreeType *UNUSED(treetype), bNodeTree **r_ntree, ID **r_id, ID **r_from)
{
+ const WorkSpace *workspace = CTX_wm_workspace(C);
SpaceNode *snode = CTX_wm_space_node(C);
Scene *scene = CTX_data_scene(C);
- Object *ob = OBACT;
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Object *ob = OBACT(view_layer);
Tex *tx = NULL;
if (snode->texfrom == SNODE_TEX_OBJECT) {
@@ -93,7 +98,7 @@ static void texture_get_from_context(const bContext *C, bNodeTreeType *UNUSED(tr
else if (snode->texfrom == SNODE_TEX_BRUSH) {
struct Brush *brush = NULL;
- if (ob && (ob->mode & OB_MODE_SCULPT))
+ if (ob && (workspace->object_mode & OB_MODE_SCULPT))
brush = BKE_paint_brush(&scene->toolsettings->sculpt->paint);
else
brush = BKE_paint_brush(&scene->toolsettings->imapaint.paint);
@@ -120,7 +125,7 @@ static void texture_get_from_context(const bContext *C, bNodeTreeType *UNUSED(tr
}
}
-static void foreach_nodeclass(Scene *UNUSED(scene), void *calldata, bNodeClassCallback func)
+static void foreach_nodeclass(ViewRender *UNUSED(view_render), void *calldata, bNodeClassCallback func)
{
func(calldata, NODE_CLASS_INPUT, N_("Input"));
func(calldata, NODE_CLASS_OUTPUT, N_("Output"));
diff --git a/source/blender/python/CMakeLists.txt b/source/blender/python/CMakeLists.txt
index e855f3a3756..8d26fee0abd 100644
--- a/source/blender/python/CMakeLists.txt
+++ b/source/blender/python/CMakeLists.txt
@@ -17,6 +17,7 @@
# ***** END GPL LICENSE BLOCK *****
add_subdirectory(intern)
+add_subdirectory(gawain)
add_subdirectory(generic)
add_subdirectory(mathutils)
add_subdirectory(bmesh)
diff --git a/source/blender/python/bmesh/CMakeLists.txt b/source/blender/python/bmesh/CMakeLists.txt
index c7b86acc8f9..4d3230fa3e9 100644
--- a/source/blender/python/bmesh/CMakeLists.txt
+++ b/source/blender/python/bmesh/CMakeLists.txt
@@ -23,6 +23,7 @@ set(INC
../../bmesh
../../blenkernel
../../blenlib
+ ../../depsgraph
../../makesdna
../../../../intern/guardedalloc
)
diff --git a/source/blender/python/bmesh/bmesh_py_api.c b/source/blender/python/bmesh/bmesh_py_api.c
index d5973baeadb..d6189f7c1eb 100644
--- a/source/blender/python/bmesh/bmesh_py_api.c
+++ b/source/blender/python/bmesh/bmesh_py_api.c
@@ -156,11 +156,6 @@ static PyObject *bpy_bm_update_edit_mesh(PyObject *UNUSED(self), PyObject *args,
{
extern void EDBM_update_generic(BMEditMesh *em, const bool do_tessface, const bool is_destructive);
- BMEditMesh *em = me->edit_btmesh;
- BMesh *bm = em->bm;
-
- /* python won't ensure matching uv/mtex */
- BM_mesh_cd_validate(bm);
EDBM_update_generic(me->edit_btmesh, do_tessface, is_destructive);
}
diff --git a/source/blender/python/bmesh/bmesh_py_types.c b/source/blender/python/bmesh/bmesh_py_types.c
index 6ab5ebf3c81..629c3a3c7a3 100644
--- a/source/blender/python/bmesh/bmesh_py_types.c
+++ b/source/blender/python/bmesh/bmesh_py_types.c
@@ -34,10 +34,11 @@
#include "DNA_object_types.h"
#include "DNA_material_types.h"
-#include "BKE_depsgraph.h"
#include "BKE_customdata.h"
#include "BKE_DerivedMesh.h"
+#include "DEG_depsgraph.h"
+
#include "bmesh.h"
#include <Python.h>
@@ -901,14 +902,11 @@ static PyObject *bpy_bmesh_to_mesh(BPy_BMesh *self, PyObject *args)
bm = self->bm;
- /* python won't ensure matching uv/mtex */
- BM_mesh_cd_validate(bm);
-
BM_mesh_bm_to_me(bm, me, (&(struct BMeshToMeshParams){0}));
/* we could have the user do this but if they forget blender can easy crash
* since the references arrays for the objects derived meshes are now invalid */
- DAG_id_tag_update(&me->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&me->id, OB_RECALC_DATA);
Py_RETURN_NONE;
}
@@ -931,6 +929,8 @@ PyDoc_STRVAR(bpy_bmesh_from_object_doc,
);
static PyObject *bpy_bmesh_from_object(BPy_BMesh *self, PyObject *args, PyObject *kw)
{
+ /* TODO: This doesn't work currently because of eval_ctx. */
+#if 0
static const char *kwlist[] = {"object", "scene", "deform", "render", "cage", "face_normals", NULL};
PyObject *py_object;
PyObject *py_scene;
@@ -1023,6 +1023,10 @@ static PyObject *bpy_bmesh_from_object(BPy_BMesh *self, PyObject *args, PyObject
dm->release(dm);
Py_RETURN_NONE;
+#else
+ UNUSED_VARS(self, args, kw);
+#endif
+ return NULL;
}
diff --git a/source/blender/python/bmesh/bmesh_py_types_customdata.c b/source/blender/python/bmesh/bmesh_py_types_customdata.c
index cb95ded4f0d..e2241ade7f0 100644
--- a/source/blender/python/bmesh/bmesh_py_types_customdata.c
+++ b/source/blender/python/bmesh/bmesh_py_types_customdata.c
@@ -105,9 +105,6 @@ PyDoc_STRVAR(bpy_bmlayeraccess_collection__bevel_weight_doc,
PyDoc_STRVAR(bpy_bmlayeraccess_collection__crease_doc,
"Edge crease for subsurf - float in [0 - 1].\n\n:type: :class:`BMLayerCollection`"
);
-PyDoc_STRVAR(bpy_bmlayeraccess_collection__tex_doc,
-"Accessor for :class:`BMTexPoly` layer (TODO).\n\ntype: :class:`BMLayerCollection`" // TYPE DOESN'T EXIST YET
-);
PyDoc_STRVAR(bpy_bmlayeraccess_collection__uv_doc,
"Accessor for :class:`BMLoopUV` UV (as a 2D Vector).\n\ntype: :class:`BMLayerCollection`"
);
@@ -120,6 +117,9 @@ PyDoc_STRVAR(bpy_bmlayeraccess_collection__skin_doc,
PyDoc_STRVAR(bpy_bmlayeraccess_collection__paint_mask_doc,
"Accessor for paint mask layer.\n\ntype: :class:`BMLayerCollection`"
);
+PyDoc_STRVAR(bpy_bmlayeraccess_collection__face_map_doc,
+"FaceMap custom-data layer.\n\ntype: :class:`BMLayerCollection`"
+);
#ifdef WITH_FREESTYLE
PyDoc_STRVAR(bpy_bmlayeraccess_collection__freestyle_edge_doc,
"Accessor for Freestyle edge layer.\n\ntype: :class:`BMLayerCollection`"
@@ -222,8 +222,7 @@ static PyGetSetDef bpy_bmlayeraccess_face_getseters[] = {
{(char *)"float", (getter)bpy_bmlayeraccess_collection_get, (setter)NULL, (char *)bpy_bmlayeraccess_collection__float_doc, (void *)CD_PROP_FLT},
{(char *)"int", (getter)bpy_bmlayeraccess_collection_get, (setter)NULL, (char *)bpy_bmlayeraccess_collection__int_doc, (void *)CD_PROP_INT},
{(char *)"string", (getter)bpy_bmlayeraccess_collection_get, (setter)NULL, (char *)bpy_bmlayeraccess_collection__string_doc, (void *)CD_PROP_STR},
-
- {(char *)"tex", (getter)bpy_bmlayeraccess_collection_get, (setter)NULL, (char *)bpy_bmlayeraccess_collection__tex_doc, (void *)CD_MTEXPOLY},
+ {(char *)"face_map", (getter)bpy_bmlayeraccess_collection_get, (setter)NULL, (char *)bpy_bmlayeraccess_collection__face_map_doc, (void *)CD_FACEMAP},
#ifdef WITH_FREESTYLE
{(char *)"freestyle", (getter)bpy_bmlayeraccess_collection_get, (setter)NULL, (char *)bpy_bmlayeraccess_collection__freestyle_face_doc, (void *)CD_FREESTYLE_FACE},
@@ -989,6 +988,7 @@ PyObject *BPy_BMLayerItem_GetItem(BPy_BMElem *py_ele, BPy_BMLayerItem *py_layer)
break;
}
case CD_PROP_INT:
+ case CD_FACEMAP:
{
ret = PyLong_FromLong(*(int *)value);
break;
@@ -999,11 +999,6 @@ PyObject *BPy_BMLayerItem_GetItem(BPy_BMElem *py_ele, BPy_BMLayerItem *py_layer)
ret = PyBytes_FromStringAndSize(mstring->s, mstring->s_len);
break;
}
- case CD_MTEXPOLY:
- {
- ret = BPy_BMTexPoly_CreatePyObject(value);
- break;
- }
case CD_MLOOPUV:
{
ret = BPy_BMLoopUV_CreatePyObject(value);
@@ -1074,6 +1069,7 @@ int BPy_BMLayerItem_SetItem(BPy_BMElem *py_ele, BPy_BMLayerItem *py_layer, PyObj
break;
}
case CD_PROP_INT:
+ case CD_FACEMAP:
{
int tmp_val = PyC_Long_AsI32(py_value);
if (UNLIKELY(tmp_val == -1 && PyErr_Occurred())) {
@@ -1102,11 +1098,6 @@ int BPy_BMLayerItem_SetItem(BPy_BMElem *py_ele, BPy_BMLayerItem *py_layer, PyObj
}
break;
}
- case CD_MTEXPOLY:
- {
- ret = BPy_BMTexPoly_AssignPyObject(value, py_value);
- break;
- }
case CD_MLOOPUV:
{
ret = BPy_BMLoopUV_AssignPyObject(value, py_value);
diff --git a/source/blender/python/bmesh/bmesh_py_types_meshdata.c b/source/blender/python/bmesh/bmesh_py_types_meshdata.c
index 7984f625d96..54b33e7b6b6 100644
--- a/source/blender/python/bmesh/bmesh_py_types_meshdata.c
+++ b/source/blender/python/bmesh/bmesh_py_types_meshdata.c
@@ -48,96 +48,6 @@
#include "../generic/py_capi_utils.h"
#include "../generic/python_utildefines.h"
-
-/* Mesh BMTexPoly
- * ************** */
-
-#define BPy_BMTexPoly_Check(v) (Py_TYPE(v) == &BPy_BMTexPoly_Type)
-
-typedef struct BPy_BMTexPoly {
- PyObject_VAR_HEAD
- MTexPoly *data;
-} BPy_BMTexPoly;
-
-extern PyObject *pyrna_id_CreatePyObject(ID *id);
-extern bool pyrna_id_FromPyObject(PyObject *obj, ID **id);
-
-PyDoc_STRVAR(bpy_bmtexpoly_image_doc,
-"Image or None.\n\n:type: :class:`bpy.types.Image`"
-);
-static PyObject *bpy_bmtexpoly_image_get(BPy_BMTexPoly *self, void *UNUSED(closure))
-{
- return pyrna_id_CreatePyObject((ID *)self->data->tpage);
-}
-
-static int bpy_bmtexpoly_image_set(BPy_BMTexPoly *self, PyObject *value, void *UNUSED(closure))
-{
- ID *id;
-
- if (value == Py_None) {
- id = NULL;
- }
- else if (pyrna_id_FromPyObject(value, &id) && id && GS(id->name) == ID_IM) {
- /* pass */
- }
- else {
- PyErr_Format(PyExc_KeyError, "BMTexPoly.image = x"
- "expected an image or None, not '%.200s'",
- Py_TYPE(value)->tp_name);
- return -1;
- }
-
- id_lib_extern(id);
- self->data->tpage = (struct Image *)id;
-
- return 0;
-}
-
-static PyGetSetDef bpy_bmtexpoly_getseters[] = {
- /* attributes match rna_def_mtpoly */
- {(char *)"image", (getter)bpy_bmtexpoly_image_get, (setter)bpy_bmtexpoly_image_set, (char *)bpy_bmtexpoly_image_doc, NULL},
-
- {NULL, NULL, NULL, NULL, NULL} /* Sentinel */
-};
-
-static PyTypeObject BPy_BMTexPoly_Type; /* bm.loops.layers.uv.active */
-
-static void bm_init_types_bmtexpoly(void)
-{
- BPy_BMTexPoly_Type.tp_basicsize = sizeof(BPy_BMTexPoly);
-
- BPy_BMTexPoly_Type.tp_name = "BMTexPoly";
-
- BPy_BMTexPoly_Type.tp_doc = NULL; // todo
-
- BPy_BMTexPoly_Type.tp_getset = bpy_bmtexpoly_getseters;
-
- BPy_BMTexPoly_Type.tp_flags = Py_TPFLAGS_DEFAULT;
-
- PyType_Ready(&BPy_BMTexPoly_Type);
-}
-
-int BPy_BMTexPoly_AssignPyObject(struct MTexPoly *mtpoly, PyObject *value)
-{
- if (UNLIKELY(!BPy_BMTexPoly_Check(value))) {
- PyErr_Format(PyExc_TypeError, "expected BMTexPoly, not a %.200s", Py_TYPE(value)->tp_name);
- return -1;
- }
- else {
- *((MTexPoly *)mtpoly) = *(((BPy_BMTexPoly *)value)->data);
- return 0;
- }
-}
-
-PyObject *BPy_BMTexPoly_CreatePyObject(struct MTexPoly *mtpoly)
-{
- BPy_BMTexPoly *self = PyObject_New(BPy_BMTexPoly, &BPy_BMTexPoly_Type);
- self->data = mtpoly;
- return (PyObject *)self;
-}
-
-/* --- End Mesh BMTexPoly --- */
-
/* Mesh Loop UV
* ************ */
@@ -797,7 +707,6 @@ PyObject *BPy_BMDeformVert_CreatePyObject(struct MDeformVert *dvert)
/* call to init all types */
void BPy_BM_init_types_meshdata(void)
{
- bm_init_types_bmtexpoly();
bm_init_types_bmloopuv();
bm_init_types_bmloopcol();
bm_init_types_bmdvert();
diff --git a/source/blender/python/bmesh/bmesh_py_types_meshdata.h b/source/blender/python/bmesh/bmesh_py_types_meshdata.h
index 07d8a46cc65..c8ae2596f99 100644
--- a/source/blender/python/bmesh/bmesh_py_types_meshdata.h
+++ b/source/blender/python/bmesh/bmesh_py_types_meshdata.h
@@ -40,15 +40,11 @@ typedef struct BPy_BMGenericMeshData {
void *data;
} BPy_BMGenericMeshData;
-struct MTexPoly;
struct MLoopUV;
struct MLoopCol;
struct MDeformVert;
struct MVertSkin;
-int BPy_BMTexPoly_AssignPyObject(struct MTexPoly *mloopuv, PyObject *value);
-PyObject *BPy_BMTexPoly_CreatePyObject(struct MTexPoly *mloopuv);
-
int BPy_BMLoopUV_AssignPyObject(struct MLoopUV *data, PyObject *value);
PyObject *BPy_BMLoopUV_CreatePyObject(struct MLoopUV *data);
diff --git a/source/blender/python/gawain/CMakeLists.txt b/source/blender/python/gawain/CMakeLists.txt
new file mode 100644
index 00000000000..6b6c902f48a
--- /dev/null
+++ b/source/blender/python/gawain/CMakeLists.txt
@@ -0,0 +1,47 @@
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Contributor(s): Campbell Barton
+#
+# ***** END GPL LICENSE BLOCK *****
+
+set(INC
+ .
+ ../../blenkernel
+ ../../blenlib
+ ../../gpu
+ ../../makesdna
+ ../../../../intern/gawain
+ ../../../../intern/guardedalloc
+ ../../../../intern/glew-mx
+)
+
+set(INC_SYS
+ ${GLEW_INCLUDE_PATH}
+ ${PYTHON_INCLUDE_DIRS}
+)
+
+set(SRC
+ gwn_py_api.c
+ gwn_py_types.c
+
+ gwn_py_api.h
+ gwn_py_types.h
+)
+
+add_definitions(${GL_DEFINITIONS})
+
+blender_add_lib(bf_python_gawain "${SRC}" "${INC}" "${INC_SYS}")
diff --git a/source/blender/python/gawain/gwn_py_api.c b/source/blender/python/gawain/gwn_py_api.c
new file mode 100644
index 00000000000..d79ef070649
--- /dev/null
+++ b/source/blender/python/gawain/gwn_py_api.c
@@ -0,0 +1,63 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/python/gawain/gwn_py_api.c
+ * \ingroup pygawain
+ *
+ * Experimental Python API, not considered public yet (called '_gawain'),
+ * we may re-expose as public later.
+ */
+
+#include <Python.h>
+
+#include "gawain/gwn_batch.h"
+#include "gawain/gwn_vertex_format.h"
+
+#include "gwn_py_api.h"
+#include "gwn_py_types.h"
+
+#include "BLI_utildefines.h"
+
+#include "../generic/python_utildefines.h"
+
+PyDoc_STRVAR(GWN_doc,
+"This module provides access to gawain drawing functions."
+);
+static struct PyModuleDef GWN_module_def = {
+ PyModuleDef_HEAD_INIT,
+ .m_name = "_gawain", /* m_name */
+ .m_doc = GWN_doc, /* m_doc */
+};
+
+PyObject *BPyInit_gawain(void)
+{
+ PyObject *sys_modules = PyThreadState_GET()->interp->modules;
+ PyObject *submodule;
+ PyObject *mod;
+
+ mod = PyModule_Create(&GWN_module_def);
+
+ /* _gawain.types */
+ PyModule_AddObject(mod, "types", (submodule = BPyInit_gawain_types()));
+ PyDict_SetItem(sys_modules, PyModule_GetNameObject(submodule), submodule);
+ Py_INCREF(submodule);
+
+ return mod;
+}
diff --git a/source/blender/python/gawain/gwn_py_api.h b/source/blender/python/gawain/gwn_py_api.h
new file mode 100644
index 00000000000..3ef85e8ae0f
--- /dev/null
+++ b/source/blender/python/gawain/gwn_py_api.h
@@ -0,0 +1,30 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef __GWN_PY_API_H__
+#define __GWN_PY_API_H__
+
+/** \file blender/python/gawain/gwn_py_api.h
+ * \ingroup pygawain
+ */
+
+PyObject *BPyInit_gawain(void);
+
+#endif /* __GWN_PY_API_H__ */
diff --git a/source/blender/python/gawain/gwn_py_types.c b/source/blender/python/gawain/gwn_py_types.c
new file mode 100644
index 00000000000..4f6b354b7be
--- /dev/null
+++ b/source/blender/python/gawain/gwn_py_types.c
@@ -0,0 +1,847 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/python/gawain/gwn_py_types.c
+ * \ingroup pygawain
+ *
+ * - Use ``bpygwn_`` for local API.
+ * - Use ``BPyGwn_`` for public API.
+ */
+
+#include <Python.h>
+
+#include "gawain/gwn_batch.h"
+#include "gawain/gwn_vertex_format.h"
+
+#include "BLI_math.h"
+
+#include "GPU_batch.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "../generic/py_capi_utils.h"
+#include "../generic/python_utildefines.h"
+
+#include "gwn_py_types.h" /* own include */
+
+#ifdef __BIG_ENDIAN__
+ /* big endian */
+# define MAKE_ID2(c, d) ((c) << 8 | (d))
+# define MAKE_ID3(a, b, c) ( (int)(a) << 24 | (int)(b) << 16 | (c) << 8 )
+# define MAKE_ID4(a, b, c, d) ( (int)(a) << 24 | (int)(b) << 16 | (c) << 8 | (d) )
+#else
+ /* little endian */
+# define MAKE_ID2(c, d) ((d) << 8 | (c))
+# define MAKE_ID3(a, b, c) ( (int)(c) << 16 | (b) << 8 | (a) )
+# define MAKE_ID4(a, b, c, d) ( (int)(d) << 24 | (int)(c) << 16 | (b) << 8 | (a) )
+#endif
+
+/* -------------------------------------------------------------------- */
+
+/** \name Enum Conversion
+ *
+ * Use with PyArg_ParseTuple's "O&" formatting.
+ * \{ */
+
+static int bpygwn_ParseVertCompType(PyObject *o, void *p)
+{
+ Py_ssize_t comp_type_id_len;
+ const char *comp_type_id = _PyUnicode_AsStringAndSize(o, &comp_type_id_len);
+ if (comp_type_id == NULL) {
+ PyErr_Format(PyExc_ValueError,
+ "expected a string, got %s",
+ Py_TYPE(o)->tp_name);
+ return 0;
+ }
+
+ Gwn_VertCompType comp_type;
+ if (comp_type_id_len == 2) {
+ switch (*((ushort *)comp_type_id)) {
+ case MAKE_ID2('I', '8'): { comp_type = GWN_COMP_I8; goto success; }
+ case MAKE_ID2('U', '8'): { comp_type = GWN_COMP_U8; goto success; }
+ }
+ }
+ else if (comp_type_id_len == 3) {
+ switch (*((uint *)comp_type_id)) {
+ case MAKE_ID3('I', '1', '6'): { comp_type = GWN_COMP_I16; goto success; }
+ case MAKE_ID3('U', '1', '6'): { comp_type = GWN_COMP_U16; goto success; }
+ case MAKE_ID3('I', '3', '2'): { comp_type = GWN_COMP_I32; goto success; }
+ case MAKE_ID3('U', '3', '2'): { comp_type = GWN_COMP_U32; goto success; }
+ case MAKE_ID3('F', '3', '2'): { comp_type = GWN_COMP_F32; goto success; }
+ case MAKE_ID3('I', '1', '0'): { comp_type = GWN_COMP_I10; goto success; }
+ }
+ }
+
+ PyErr_Format(PyExc_ValueError,
+ "unknown type literal: '%s'",
+ comp_type_id);
+ return 0;
+
+success:
+ *((Gwn_VertCompType *)p) = comp_type;
+ return 1;
+}
+
+static int bpygwn_ParseVertFetchMode(PyObject *o, void *p)
+{
+ Py_ssize_t mode_id_len;
+ const char *mode_id = _PyUnicode_AsStringAndSize(o, &mode_id_len);
+ if (mode_id == NULL) {
+ PyErr_Format(PyExc_ValueError,
+ "expected a string, got %s",
+ Py_TYPE(o)->tp_name);
+ return 0;
+ }
+#define MATCH_ID(id) \
+ if (mode_id_len == strlen(STRINGIFY(id))) { \
+ if (STREQ(mode_id, STRINGIFY(id))) { \
+ mode = GWN_FETCH_##id; \
+ goto success; \
+ } \
+ } ((void)0)
+
+ Gwn_VertCompType mode;
+ MATCH_ID(FLOAT);
+ MATCH_ID(INT);
+ MATCH_ID(INT_TO_FLOAT_UNIT);
+ MATCH_ID(INT_TO_FLOAT);
+#undef MATCH_ID
+ PyErr_Format(PyExc_ValueError,
+ "unknown type literal: '%s'",
+ mode_id);
+ return 0;
+
+success:
+ (*(Gwn_VertFetchMode *)p) = mode;
+ return 1;
+}
+
+static int bpygwn_ParsePrimType(PyObject *o, void *p)
+{
+ Py_ssize_t mode_id_len;
+ const char *mode_id = _PyUnicode_AsStringAndSize(o, &mode_id_len);
+ if (mode_id == NULL) {
+ PyErr_Format(PyExc_ValueError,
+ "expected a string, got %s",
+ Py_TYPE(o)->tp_name);
+ return 0;
+ }
+#define MATCH_ID(id) \
+ if (mode_id_len == strlen(STRINGIFY(id))) { \
+ if (STREQ(mode_id, STRINGIFY(id))) { \
+ mode = GWN_PRIM_##id; \
+ goto success; \
+ } \
+ } ((void)0)
+
+ Gwn_PrimType mode;
+ MATCH_ID(POINTS);
+ MATCH_ID(LINES);
+ MATCH_ID(TRIS);
+ MATCH_ID(LINE_STRIP);
+ MATCH_ID(LINE_LOOP);
+ MATCH_ID(TRI_STRIP);
+ MATCH_ID(TRI_FAN);
+ MATCH_ID(LINE_STRIP_ADJ);
+
+#undef MATCH_ID
+ PyErr_Format(PyExc_ValueError,
+ "unknown type literal: '%s'",
+ mode_id);
+ return 0;
+
+success:
+ (*(Gwn_VertFetchMode *)p) = mode;
+ return 1;
+}
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Utility Functions
+ * \{ */
+
+#define PY_AS_NATIVE_SWITCH(attr) \
+ switch (attr->comp_type) { \
+ case GWN_COMP_I8: { PY_AS_NATIVE(int8_t, PyC_Long_AsI8); break; } \
+ case GWN_COMP_U8: { PY_AS_NATIVE(uint8_t, PyC_Long_AsU8); break; } \
+ case GWN_COMP_I16: { PY_AS_NATIVE(int16_t, PyC_Long_AsI16); break; } \
+ case GWN_COMP_U16: { PY_AS_NATIVE(uint16_t, PyC_Long_AsU16); break; } \
+ case GWN_COMP_I32: { PY_AS_NATIVE(int32_t, PyC_Long_AsI32); break; } \
+ case GWN_COMP_U32: { PY_AS_NATIVE(uint32_t, PyC_Long_AsU32); break; } \
+ case GWN_COMP_F32: { PY_AS_NATIVE(float, PyFloat_AsDouble); break; } \
+ default: \
+ BLI_assert(0); \
+ } ((void)0)
+
+/* No error checking, callers must run PyErr_Occurred */
+static void fill_format_elem(void *data_dst_void, PyObject *py_src, const Gwn_VertAttr *attr)
+{
+#define PY_AS_NATIVE(ty_dst, py_as_native) \
+{ \
+ ty_dst *data_dst = data_dst_void; \
+ *data_dst = py_as_native(py_src); \
+} ((void)0)
+
+ PY_AS_NATIVE_SWITCH(attr);
+
+#undef PY_AS_NATIVE
+}
+
+/* No error checking, callers must run PyErr_Occurred */
+static void fill_format_tuple(void *data_dst_void, PyObject *py_src, const Gwn_VertAttr *attr)
+{
+ const uint len = attr->comp_ct;
+
+/**
+ * Args are constants, so range checks will be optimized out if they're nop's.
+ */
+#define PY_AS_NATIVE(ty_dst, py_as_native) \
+ ty_dst *data_dst = data_dst_void; \
+ for (uint i = 0; i < len; i++) { \
+ data_dst[i] = py_as_native(PyTuple_GET_ITEM(py_src, i)); \
+ } ((void)0)
+
+ PY_AS_NATIVE_SWITCH(attr);
+
+#undef PY_AS_NATIVE
+}
+
+#undef PY_AS_NATIVE_SWITCH
+#undef WARN_TYPE_LIMIT_PUSH
+#undef WARN_TYPE_LIMIT_POP
+
+static bool bpygwn_vertbuf_fill_impl(
+ Gwn_VertBuf *vbo,
+ uint data_id, PyObject *seq)
+{
+ bool ok = true;
+ const Gwn_VertAttr *attr = &vbo->format.attribs[data_id];
+
+ Gwn_VertBufRaw data_step;
+ GWN_vertbuf_attr_get_raw_data(vbo, data_id, &data_step);
+
+ PyObject *seq_fast = PySequence_Fast(seq, "Vertex buffer fill");
+ if (seq_fast == NULL) {
+ goto finally;
+ }
+
+ const uint seq_len = PySequence_Fast_GET_SIZE(seq_fast);
+
+ if (seq_len != vbo->vertex_ct) {
+ PyErr_Format(PyExc_ValueError,
+ "Expected a sequence of size %d, got %d",
+ vbo->vertex_ct, seq_len);
+ }
+
+ PyObject **seq_items = PySequence_Fast_ITEMS(seq_fast);
+
+ if (attr->comp_ct == 1) {
+ for (uint i = 0; i < seq_len; i++) {
+ uchar *data = (uchar *)GWN_vertbuf_raw_step(&data_step);
+ PyObject *item = seq_items[i];
+ fill_format_elem(data, item, attr);
+ }
+ }
+ else {
+ for (uint i = 0; i < seq_len; i++) {
+ uchar *data = (uchar *)GWN_vertbuf_raw_step(&data_step);
+ PyObject *item = seq_items[i];
+ if (!PyTuple_CheckExact(item)) {
+ PyErr_Format(PyExc_ValueError,
+ "expected a tuple, got %s",
+ Py_TYPE(item)->tp_name);
+ ok = false;
+ goto finally;
+ }
+ if (PyTuple_GET_SIZE(item) != attr->comp_ct) {
+ PyErr_Format(PyExc_ValueError,
+ "expected a tuple of size %d, got %d",
+ attr->comp_ct, PyTuple_GET_SIZE(item));
+ ok = false;
+ goto finally;
+ }
+
+ /* May trigger error, check below */
+ fill_format_tuple(data, item, attr);
+ }
+ }
+
+ if (PyErr_Occurred()) {
+ ok = false;
+ }
+
+finally:
+
+ Py_DECREF(seq_fast);
+ return ok;
+}
+
+/* handy, but not used just now */
+#if 0
+static int bpygwn_find_id(const Gwn_VertFormat *fmt, const char *id)
+{
+ for (int i = 0; i < fmt->attrib_ct; i++) {
+ for (uint j = 0; j < fmt->name_ct; j++) {
+ if (STREQ(fmt->attribs[i].name[j], id)) {
+ return i;
+ }
+ }
+ }
+ return -1;
+}
+#endif
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name VertFormat Type
+ * \{ */
+
+static PyObject *bpygwn_VertFormat_new(PyTypeObject *UNUSED(type), PyObject *args, PyObject *kwds)
+{
+ if (PyTuple_GET_SIZE(args) || (kwds && PyDict_Size(kwds))) {
+ PyErr_SetString(PyExc_TypeError,
+ "VertFormat(): takes no arguments");
+ return NULL;
+ }
+
+ BPyGwn_VertFormat *ret = (BPyGwn_VertFormat *)BPyGwn_VertFormat_CreatePyObject(NULL);
+
+ return (PyObject *)ret;
+}
+
+PyDoc_STRVAR(bpygwn_VertFormat_attr_add_doc,
+"TODO"
+);
+static PyObject *bpygwn_VertFormat_attr_add(BPyGwn_VertFormat *self, PyObject *args, PyObject *kwds)
+{
+ static const char *kwlist[] = {"id", "comp_type", "len", "fetch_mode", NULL};
+
+ struct {
+ const char *id;
+ Gwn_VertCompType comp_type;
+ uint len;
+ Gwn_VertFetchMode fetch_mode;
+ } params;
+
+ if (self->fmt.attrib_ct == GWN_VERT_ATTR_MAX_LEN) {
+ PyErr_SetString(PyExc_ValueError, "Maxumum attr reached " STRINGIFY(GWN_VERT_ATTR_MAX_LEN));
+ return NULL;
+ }
+
+ if (!PyArg_ParseTupleAndKeywords(
+ args, kwds, "$sO&IO&:attr_add", (char **)kwlist,
+ &params.id,
+ bpygwn_ParseVertCompType, &params.comp_type,
+ &params.len,
+ bpygwn_ParseVertFetchMode, &params.fetch_mode))
+ {
+ return NULL;
+ }
+
+ uint attr_id = GWN_vertformat_attr_add(&self->fmt, params.id, params.comp_type, params.len, params.fetch_mode);
+ return PyLong_FromLong(attr_id);
+}
+
+static struct PyMethodDef bpygwn_VertFormat_methods[] = {
+ {"attr_add", (PyCFunction)bpygwn_VertFormat_attr_add,
+ METH_VARARGS | METH_KEYWORDS, bpygwn_VertFormat_attr_add_doc},
+ {NULL, NULL, 0, NULL}
+};
+
+
+static void bpygwn_VertFormat_dealloc(BPyGwn_VertFormat *self)
+{
+ Py_TYPE(self)->tp_free(self);
+}
+
+PyTypeObject BPyGwn_VertFormat_Type = {
+ PyVarObject_HEAD_INIT(NULL, 0)
+ .tp_name = "Gwn_VertFormat",
+ .tp_basicsize = sizeof(BPyGwn_VertFormat),
+ .tp_dealloc = (destructor)bpygwn_VertFormat_dealloc,
+ .tp_flags = Py_TPFLAGS_DEFAULT,
+ .tp_methods = bpygwn_VertFormat_methods,
+ .tp_new = bpygwn_VertFormat_new,
+};
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name VertBuf Type
+ * \{ */
+
+static PyObject *bpygwn_VertBuf_new(PyTypeObject *UNUSED(type), PyObject *args, PyObject *kwds)
+{
+ const char * const keywords[] = {"len", "format", NULL};
+
+ struct {
+ BPyGwn_VertFormat *py_fmt;
+ uint len;
+ } params;
+
+ if (!PyArg_ParseTupleAndKeywords(
+ args, kwds,
+ "$IO!:Gwn_VertBuf.__new__", (char **)keywords,
+ &params.len,
+ &BPyGwn_VertFormat_Type, &params.py_fmt))
+ {
+ return NULL;
+ }
+
+ struct Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&params.py_fmt->fmt);
+
+ GWN_vertbuf_data_alloc(vbo, params.len);
+
+ return BPyGwn_VertBuf_CreatePyObject(vbo);
+}
+
+PyDoc_STRVAR(bpygwn_VertBuf_fill_doc,
+"TODO"
+);
+static PyObject *bpygwn_VertBuf_fill(BPyGwn_VertBuf *self, PyObject *args, PyObject *kwds)
+{
+ static const char *kwlist[] = {"id", "data", NULL};
+
+ struct {
+ uint id;
+ PyObject *py_seq_data;
+ } params;
+
+ if (!PyArg_ParseTupleAndKeywords(
+ args, kwds, "$IO:fill", (char **)kwlist,
+ &params.id,
+ &params.py_seq_data))
+ {
+ return NULL;
+ }
+
+ if (params.id >= self->buf->format.attrib_ct) {
+ PyErr_Format(PyExc_ValueError,
+ "Format id %d out of range",
+ params.id);
+ return NULL;
+ }
+
+ if (self->buf->vbo_id != 0) {
+ PyErr_SetString(PyExc_ValueError,
+ "Can't fill, buffer already in use");
+ return NULL;
+ }
+
+ if (!bpygwn_vertbuf_fill_impl(self->buf, params.id, params.py_seq_data)) {
+ return NULL;
+ }
+ Py_RETURN_NONE;
+}
+
+static struct PyMethodDef bpygwn_VertBuf_methods[] = {
+ {"fill", (PyCFunction) bpygwn_VertBuf_fill,
+ METH_VARARGS | METH_KEYWORDS, bpygwn_VertBuf_fill_doc},
+ {NULL, NULL, 0, NULL}
+};
+
+static void bpygwn_VertBuf_dealloc(BPyGwn_VertBuf *self)
+{
+ GWN_vertbuf_discard(self->buf);
+ Py_TYPE(self)->tp_free(self);
+}
+
+PyTypeObject BPyGwn_VertBuf_Type = {
+ PyVarObject_HEAD_INIT(NULL, 0)
+ .tp_name = "Gwn_VertBuf",
+ .tp_basicsize = sizeof(BPyGwn_VertBuf),
+ .tp_dealloc = (destructor)bpygwn_VertBuf_dealloc,
+ .tp_flags = Py_TPFLAGS_DEFAULT,
+ .tp_methods = bpygwn_VertBuf_methods,
+ .tp_new = bpygwn_VertBuf_new,
+};
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name VertBatch Type
+ * \{ */
+
+static PyObject *bpygwn_Batch_new(PyTypeObject *UNUSED(type), PyObject *args, PyObject *kwds)
+{
+ const char * const keywords[] = {"type", "buf", NULL};
+
+ struct {
+ Gwn_PrimType type_id;
+ BPyGwn_VertBuf *py_buf;
+ } params;
+
+ if (!PyArg_ParseTupleAndKeywords(
+ args, kwds,
+ "$O&O!:Gwn_Batch.__new__", (char **)keywords,
+ bpygwn_ParsePrimType, &params.type_id,
+ &BPyGwn_VertBuf_Type, &params.py_buf))
+ {
+ return NULL;
+ }
+
+ Gwn_Batch *batch = GWN_batch_create(params.type_id, params.py_buf->buf, NULL);
+ BPyGwn_Batch *ret = (BPyGwn_Batch *)BPyGwn_Batch_CreatePyObject(batch);
+
+#ifdef USE_GWN_PY_REFERENCES
+ ret->references = PyList_New(1);
+ PyList_SET_ITEM(ret->references, 0, (PyObject *)params.py_buf);
+ Py_INCREF(params.py_buf);
+ PyObject_GC_Track(ret);
+#endif
+
+ return (PyObject *)ret;
+}
+
+PyDoc_STRVAR(bpygwn_VertBatch_vertbuf_add_doc,
+"TODO"
+);
+static PyObject *bpygwn_VertBatch_vertbuf_add(BPyGwn_Batch *self, BPyGwn_VertBuf *py_buf)
+{
+ if (!BPyGwn_VertBuf_Check(py_buf)) {
+ PyErr_Format(PyExc_TypeError,
+ "Expected a Gwn_VertBuf, got %s",
+ Py_TYPE(py_buf)->tp_name);
+ return NULL;
+ }
+
+ if (self->batch->verts[0]->vertex_ct != py_buf->buf->vertex_ct) {
+ PyErr_Format(PyExc_TypeError,
+ "Expected %d length, got %d",
+ self->batch->verts[0]->vertex_ct, py_buf->buf->vertex_ct);
+ return NULL;
+ }
+
+#ifdef USE_GWN_PY_REFERENCES
+ /* Hold user */
+ PyList_Append(self->references, (PyObject *)py_buf);
+#endif
+
+ GWN_batch_vertbuf_add(self->batch, py_buf->buf);
+ Py_RETURN_NONE;
+}
+
+/* Currently magic number from Py perspective. */
+PyDoc_STRVAR(bpygwn_VertBatch_program_set_builtin_doc,
+"TODO"
+);
+static PyObject *bpygwn_VertBatch_program_set_builtin(BPyGwn_Batch *self, PyObject *args, PyObject *kwds)
+{
+ static const char *kwlist[] = {"id", NULL};
+
+ struct {
+ const char *shader;
+ } params;
+
+ if (!PyArg_ParseTupleAndKeywords(
+ args, kwds, "s:program_set_builtin", (char **)kwlist,
+ &params.shader))
+ {
+ return NULL;
+ }
+
+ GPUBuiltinShader shader;
+
+#define MATCH_ID(id) \
+ if (STREQ(params.shader, STRINGIFY(id))) { \
+ shader = GPU_SHADER_##id; \
+ goto success; \
+ } ((void)0)
+
+ MATCH_ID(2D_FLAT_COLOR);
+ MATCH_ID(2D_SMOOTH_COLOR);
+ MATCH_ID(2D_UNIFORM_COLOR);
+
+ MATCH_ID(3D_FLAT_COLOR);
+ MATCH_ID(3D_SMOOTH_COLOR);
+ MATCH_ID(3D_UNIFORM_COLOR);
+
+#undef MATCH_ID
+
+ PyErr_SetString(PyExc_ValueError,
+ "shader name not known");
+ return NULL;
+
+success:
+ GWN_batch_program_set_builtin(self->batch, shader);
+ Py_RETURN_NONE;
+}
+
+static PyObject *bpygwn_VertBatch_uniform_bool(BPyGwn_Batch *self, PyObject *args)
+{
+ struct {
+ const char *id;
+ bool values[1];
+ } params;
+
+ if (!PyArg_ParseTuple(
+ args, "sO&:uniform_bool",
+ &params.id,
+ PyC_ParseBool, &params.values[0]))
+ {
+ return NULL;
+ }
+
+ GWN_batch_uniform_1b(self->batch, params.id, params.values[0]);
+ Py_RETURN_NONE;
+}
+
+static PyObject *bpygwn_VertBatch_uniform_i32(BPyGwn_Batch *self, PyObject *args)
+{
+ struct {
+ const char *id;
+ int values[1];
+ } params;
+
+ if (!PyArg_ParseTuple(
+ args, "si:uniform_i32",
+ &params.id,
+ &params.values[0]))
+ {
+ return NULL;
+ }
+
+ GWN_batch_uniform_1i(self->batch, params.id, params.values[0]);
+ Py_RETURN_NONE;
+}
+
+static PyObject *bpygwn_VertBatch_uniform_f32(BPyGwn_Batch *self, PyObject *args)
+{
+ struct {
+ const char *id;
+ float values[4];
+ } params;
+
+ if (!PyArg_ParseTuple(
+ args, "sf|fff:uniform_f32",
+ &params.id,
+ &params.values[0], &params.values[1], &params.values[2], &params.values[3]))
+ {
+ return NULL;
+ }
+
+ switch (PyTuple_GET_SIZE(args)) {
+ case 2: GWN_batch_uniform_1f(self->batch, params.id, params.values[0]); break;
+ case 3: GWN_batch_uniform_2f(self->batch, params.id, UNPACK2(params.values)); break;
+ case 4: GWN_batch_uniform_3f(self->batch, params.id, UNPACK3(params.values)); break;
+ case 5: GWN_batch_uniform_4f(self->batch, params.id, UNPACK4(params.values)); break;
+ default:
+ BLI_assert(0);
+ }
+ Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(bpygwn_VertBatch_draw_doc,
+"TODO"
+);
+static PyObject *bpygwn_VertBatch_draw(BPyGwn_Batch *self)
+{
+ if (!glIsProgram(self->batch->program)) {
+ PyErr_SetString(PyExc_ValueError,
+ "batch program has not not set");
+ }
+ GWN_batch_draw(self->batch);
+ Py_RETURN_NONE;
+}
+
+static PyObject *bpygwn_VertBatch_program_use_begin(BPyGwn_Batch *self)
+{
+ if (!glIsProgram(self->batch->program)) {
+ PyErr_SetString(PyExc_ValueError,
+ "batch program has not not set");
+ }
+ GWN_batch_program_use_begin(self->batch);
+ Py_RETURN_NONE;
+}
+
+static PyObject *bpygwn_VertBatch_program_use_end(BPyGwn_Batch *self)
+{
+ if (!glIsProgram(self->batch->program)) {
+ PyErr_SetString(PyExc_ValueError,
+ "batch program has not not set");
+ }
+ GWN_batch_program_use_end(self->batch);
+ Py_RETURN_NONE;
+}
+
+static struct PyMethodDef bpygwn_VertBatch_methods[] = {
+ {"vertbuf_add", (PyCFunction)bpygwn_VertBatch_vertbuf_add,
+ METH_O, bpygwn_VertBatch_vertbuf_add_doc},
+ {"program_set_builtin", (PyCFunction)bpygwn_VertBatch_program_set_builtin,
+ METH_VARARGS | METH_KEYWORDS, bpygwn_VertBatch_program_set_builtin_doc},
+ {"uniform_bool", (PyCFunction)bpygwn_VertBatch_uniform_bool,
+ METH_VARARGS, NULL},
+ {"uniform_i32", (PyCFunction)bpygwn_VertBatch_uniform_i32,
+ METH_VARARGS, NULL},
+ {"uniform_f32", (PyCFunction)bpygwn_VertBatch_uniform_f32,
+ METH_VARARGS, NULL},
+ {"draw", (PyCFunction) bpygwn_VertBatch_draw,
+ METH_NOARGS, bpygwn_VertBatch_draw_doc},
+ {"program_use_begin", (PyCFunction)bpygwn_VertBatch_program_use_begin,
+ METH_NOARGS, ""},
+ {"program_use_end", (PyCFunction)bpygwn_VertBatch_program_use_end,
+ METH_NOARGS, ""},
+ {NULL, NULL, 0, NULL}
+};
+
+#ifdef USE_GWN_PY_REFERENCES
+
+static int bpygwn_Batch_traverse(BPyGwn_Batch *self, visitproc visit, void *arg)
+{
+ Py_VISIT(self->references);
+ return 0;
+}
+
+static int bpygwn_Batch_clear(BPyGwn_Batch *self)
+{
+ Py_CLEAR(self->references);
+ return 0;
+}
+
+#endif
+
+static void bpygwn_Batch_dealloc(BPyGwn_Batch *self)
+{
+ GWN_batch_discard(self->batch);
+
+#ifdef USE_GWN_PY_REFERENCES
+ if (self->references) {
+ PyObject_GC_UnTrack(self);
+ bpygwn_Batch_clear(self);
+ Py_XDECREF(self->references);
+ }
+#endif
+
+ Py_TYPE(self)->tp_free(self);
+}
+
+PyTypeObject BPyGwn_Batch_Type = {
+ PyVarObject_HEAD_INIT(NULL, 0)
+ .tp_name = "Gwn_Batch",
+ .tp_basicsize = sizeof(BPyGwn_Batch),
+ .tp_dealloc = (destructor)bpygwn_Batch_dealloc,
+#ifdef USE_GWN_PY_REFERENCES
+ .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,
+ .tp_traverse = (traverseproc)bpygwn_Batch_traverse,
+ .tp_clear = (inquiry)bpygwn_Batch_clear,
+#else
+ .tp_flags = Py_TPFLAGS_DEFAULT,
+#endif
+ .tp_methods = bpygwn_VertBatch_methods,
+ .tp_new = bpygwn_Batch_new,
+};
+
+/* -------------------------------------------------------------------- */
+
+
+/** \name Gawain Types Module
+ * \{ */
+
+static struct PyModuleDef BPy_BM_types_module_def = {
+ PyModuleDef_HEAD_INIT,
+ .m_name = "_gawain.types",
+};
+
+PyObject *BPyInit_gawain_types(void)
+{
+ PyObject *submodule;
+
+ submodule = PyModule_Create(&BPy_BM_types_module_def);
+
+ if (PyType_Ready(&BPyGwn_VertFormat_Type) < 0)
+ return NULL;
+ if (PyType_Ready(&BPyGwn_VertBuf_Type) < 0)
+ return NULL;
+ if (PyType_Ready(&BPyGwn_Batch_Type) < 0)
+ return NULL;
+
+#define MODULE_TYPE_ADD(s, t) \
+ PyModule_AddObject(s, t.tp_name, (PyObject *)&t); Py_INCREF((PyObject *)&t)
+
+ MODULE_TYPE_ADD(submodule, BPyGwn_VertFormat_Type);
+ MODULE_TYPE_ADD(submodule, BPyGwn_VertBuf_Type);
+ MODULE_TYPE_ADD(submodule, BPyGwn_Batch_Type);
+
+#undef MODULE_TYPE_ADD
+
+ return submodule;
+}
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Public API
+ * \{ */
+
+PyObject *BPyGwn_VertFormat_CreatePyObject(Gwn_VertFormat *fmt)
+{
+ BPyGwn_VertFormat *self;
+
+ self = PyObject_New(BPyGwn_VertFormat, &BPyGwn_VertFormat_Type);
+ if (fmt) {
+ self->fmt = *fmt;
+ }
+ else {
+ memset(&self->fmt, 0, sizeof(self->fmt));
+ }
+
+ return (PyObject *)self;
+}
+
+PyObject *BPyGwn_VertBuf_CreatePyObject(Gwn_VertBuf *buf)
+{
+ BPyGwn_VertBuf *self;
+
+ self = PyObject_New(BPyGwn_VertBuf, &BPyGwn_VertBuf_Type);
+ self->buf = buf;
+
+ return (PyObject *)self;
+}
+
+
+PyObject *BPyGwn_Batch_CreatePyObject(Gwn_Batch *batch)
+{
+ BPyGwn_Batch *self;
+
+#ifdef USE_GWN_PY_REFERENCES
+ self = (BPyGwn_Batch *)_PyObject_GC_New(&BPyGwn_Batch_Type);
+ self->references = NULL;
+#else
+ self = PyObject_New(BPyGwn_Batch, &BPyGwn_Batch_Type);
+#endif
+
+ self->batch = batch;
+
+ return (PyObject *)self;
+}
+
+/** \} */
diff --git a/source/blender/python/gawain/gwn_py_types.h b/source/blender/python/gawain/gwn_py_types.h
new file mode 100644
index 00000000000..dde6cf98827
--- /dev/null
+++ b/source/blender/python/gawain/gwn_py_types.h
@@ -0,0 +1,67 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/python/gawain/gwn_py_types.h
+ * \ingroup pygawain
+ */
+
+#ifndef __GWN_PY_TYPES_H__
+#define __GWN_PY_TYPES_H__
+
+#include "BLI_compiler_attrs.h"
+
+#define USE_GWN_PY_REFERENCES
+
+extern PyTypeObject BPyGwn_VertFormat_Type;
+extern PyTypeObject BPyGwn_VertBuf_Type;
+extern PyTypeObject BPyGwn_Batch_Type;
+
+#define BPyGwn_VertFormat_Check(v) (Py_TYPE(v) == &BPyGwn_VertFormat_Type)
+#define BPyGwn_VertBuf_Check(v) (Py_TYPE(v) == &BPyGwn_VertBuf_Type)
+#define BPyGwn_Batch_Check(v) (Py_TYPE(v) == &BPyGwn_Batch_Type)
+
+typedef struct BPyGwn_VertFormat {
+ PyObject_VAR_HEAD
+ struct Gwn_VertFormat fmt;
+} BPyGwn_VertFormat;
+
+typedef struct BPyGwn_VertBuf {
+ PyObject_VAR_HEAD
+ /* The buf is owned, we may support thin wrapped batches later. */
+ struct Gwn_VertBuf *buf;
+} BPyGwn_VertBuf;
+
+typedef struct BPyGwn_Batch {
+ PyObject_VAR_HEAD
+ /* The batch is owned, we may support thin wrapped batches later. */
+ struct Gwn_Batch *batch;
+#ifdef USE_GWN_PY_REFERENCES
+ /* Just to keep a user to prevent freeing buf's we're using */
+ PyObject *references;
+#endif
+} BPyGwn_Batch;
+
+PyObject *BPyInit_gawain_types(void);
+
+PyObject *BPyGwn_VertFormat_CreatePyObject(struct Gwn_VertFormat *fmt);
+PyObject *BPyGwn_VertBuf_CreatePyObject(struct Gwn_VertBuf *vbo) ATTR_NONNULL(1);
+PyObject *BPyGwn_Batch_CreatePyObject(struct Gwn_Batch *batch) ATTR_NONNULL(1);
+
+#endif /* __GWN_PY_TYPES_H__ */
diff --git a/source/blender/python/generic/bgl.c b/source/blender/python/generic/bgl.c
index 072021c6ac9..827b69f5403 100644
--- a/source/blender/python/generic/bgl.c
+++ b/source/blender/python/generic/bgl.c
@@ -185,11 +185,13 @@
#define GLbitfield_ref(num) &bgl_var##num
#define GLbitfield_def(num) /* unsigned */ int GLbitfield_var(num)
+#if 0
/* typedef signed char GLbyte; */
#define GLbyte_str "b"
#define GLbyte_var(num) bgl_var##num
#define GLbyte_ref(num) &bgl_var##num
#define GLbyte_def(num) signed char GLbyte_var(num)
+#endif
/* typedef short GLshort; */
#define GLshort_str "h"
@@ -227,11 +229,13 @@
#define GLubyte_ref(num) &bgl_var##num
#define GLubyte_def(num) /* unsigned */ char GLubyte_var(num)
+#if 0
/* typedef unsigned short GLushort; */
#define GLushort_str "H"
#define GLushort_var(num) bgl_var##num
#define GLushort_ref(num) &bgl_var##num
#define GLushort_def(num) /* unsigned */ short GLushort_var(num)
+#endif
/* typedef unsigned int GLuint; */
#define GLuint_str "I"
@@ -1073,358 +1077,71 @@ static PyObject *Method_##funcname (PyObject *UNUSED(self), PyObject *args) \
ret_ret_##ret; \
}
-#define BGLU_Wrap(funcname, ret, arg_list) \
-static PyObject *Method_##funcname (PyObject *UNUSED(self), PyObject *args) \
-{ \
- arg_def arg_list; \
- ret_def_##ret; \
- if (!PyArg_ParseTuple(args, arg_str arg_list, arg_ref arg_list)) { \
- return NULL; \
- } \
- ret_set_##ret glu##funcname (arg_var arg_list); \
- ret_ret_##ret; \
-}
-
/* GL_VERSION_1_0 */
-BGL_Wrap(Accum, void, (GLenum, GLfloat))
-BGL_Wrap(AlphaFunc, void, (GLenum, GLfloat))
-BGL_Wrap(Begin, void, (GLenum))
-BGL_Wrap(Bitmap, void, (GLsizei, GLsizei, GLfloat, GLfloat, GLfloat, GLfloat, GLubyteP))
BGL_Wrap(BlendFunc, void, (GLenum, GLenum))
-BGL_Wrap(CallList, void, (GLuint))
-BGL_Wrap(CallLists, void, (GLsizei, GLenum, GLvoidP))
BGL_Wrap(Clear, void, (GLbitfield))
-BGL_Wrap(ClearAccum, void, (GLfloat, GLfloat, GLfloat, GLfloat))
BGL_Wrap(ClearColor, void, (GLfloat, GLfloat, GLfloat, GLfloat))
BGL_Wrap(ClearDepth, void, (GLdouble))
-BGL_Wrap(ClearIndex, void, (GLfloat))
BGL_Wrap(ClearStencil, void, (GLint))
-BGL_Wrap(ClipPlane, void, (GLenum, GLdoubleP))
-BGL_Wrap(Color3b, void, (GLbyte, GLbyte, GLbyte))
-BGL_Wrap(Color3bv, void, (GLbyteP))
-BGL_Wrap(Color3d, void, (GLdouble, GLdouble, GLdouble))
-BGL_Wrap(Color3dv, void, (GLdoubleP))
-BGL_Wrap(Color3f, void, (GLfloat, GLfloat, GLfloat))
-BGL_Wrap(Color3fv, void, (GLfloatP))
-BGL_Wrap(Color3i, void, (GLint, GLint, GLint))
-BGL_Wrap(Color3iv, void, (GLintP))
-BGL_Wrap(Color3s, void, (GLshort, GLshort, GLshort))
-BGL_Wrap(Color3sv, void, (GLshortP))
-BGL_Wrap(Color3ub, void, (GLubyte, GLubyte, GLubyte))
-BGL_Wrap(Color3ubv, void, (GLubyteP))
-BGL_Wrap(Color3ui, void, (GLuint, GLuint, GLuint))
-BGL_Wrap(Color3uiv, void, (GLuintP))
-BGL_Wrap(Color3us, void, (GLushort, GLushort, GLushort))
-BGL_Wrap(Color3usv, void, (GLushortP))
-BGL_Wrap(Color4b, void, (GLbyte, GLbyte, GLbyte, GLbyte))
-BGL_Wrap(Color4bv, void, (GLbyteP))
-BGL_Wrap(Color4d, void, (GLdouble, GLdouble, GLdouble, GLdouble))
-BGL_Wrap(Color4dv, void, (GLdoubleP))
-BGL_Wrap(Color4f, void, (GLfloat, GLfloat, GLfloat, GLfloat))
-BGL_Wrap(Color4fv, void, (GLfloatP))
-BGL_Wrap(Color4i, void, (GLint, GLint, GLint, GLint))
-BGL_Wrap(Color4iv, void, (GLintP))
-BGL_Wrap(Color4s, void, (GLshort, GLshort, GLshort, GLshort))
-BGL_Wrap(Color4sv, void, (GLshortP))
-BGL_Wrap(Color4ub, void, (GLubyte, GLubyte, GLubyte, GLubyte))
-BGL_Wrap(Color4ubv, void, (GLubyteP))
-BGL_Wrap(Color4ui, void, (GLuint, GLuint, GLuint, GLuint))
-BGL_Wrap(Color4uiv, void, (GLuintP))
-BGL_Wrap(Color4us, void, (GLushort, GLushort, GLushort, GLushort))
-BGL_Wrap(Color4usv, void, (GLushortP))
BGL_Wrap(ColorMask, void, (GLboolean, GLboolean, GLboolean, GLboolean))
-BGL_Wrap(ColorMaterial, void, (GLenum, GLenum))
-BGL_Wrap(CopyPixels, void, (GLint, GLint, GLsizei, GLsizei, GLenum))
BGL_Wrap(CullFace, void, (GLenum))
-BGL_Wrap(DeleteLists, void, (GLuint, GLsizei))
BGL_Wrap(DepthFunc, void, (GLenum))
BGL_Wrap(DepthMask, void, (GLboolean))
BGL_Wrap(DepthRange, void, (GLdouble, GLdouble))
BGL_Wrap(Disable, void, (GLenum))
BGL_Wrap(DrawBuffer, void, (GLenum))
-BGL_Wrap(DrawPixels, void, (GLsizei, GLsizei, GLenum, GLenum, GLvoidP))
-BGL_Wrap(EdgeFlag, void, (GLboolean))
-BGL_Wrap(EdgeFlagv, void, (GLbooleanP))
BGL_Wrap(Enable, void, (GLenum))
-BGL_Wrap(End, void, (void))
-BGL_Wrap(EndList, void, (void))
-BGL_Wrap(EvalCoord1d, void, (GLdouble))
-BGL_Wrap(EvalCoord1dv, void, (GLdoubleP))
-BGL_Wrap(EvalCoord1f, void, (GLfloat))
-BGL_Wrap(EvalCoord1fv, void, (GLfloatP))
-BGL_Wrap(EvalCoord2d, void, (GLdouble, GLdouble))
-BGL_Wrap(EvalCoord2dv, void, (GLdoubleP))
-BGL_Wrap(EvalCoord2f, void, (GLfloat, GLfloat))
-BGL_Wrap(EvalCoord2fv, void, (GLfloatP))
-BGL_Wrap(EvalMesh1, void, (GLenum, GLint, GLint))
-BGL_Wrap(EvalMesh2, void, (GLenum, GLint, GLint, GLint, GLint))
-BGL_Wrap(EvalPoint1, void, (GLint))
-BGL_Wrap(EvalPoint2, void, (GLint, GLint))
-BGL_Wrap(FeedbackBuffer, void, (GLsizei, GLenum, GLfloatP))
BGL_Wrap(Finish, void, (void))
BGL_Wrap(Flush, void, (void))
-BGL_Wrap(Fogf, void, (GLenum, GLfloat))
-BGL_Wrap(Fogfv, void, (GLenum, GLfloatP))
-BGL_Wrap(Fogi, void, (GLenum, GLint))
-BGL_Wrap(Fogiv, void, (GLenum, GLintP))
BGL_Wrap(FrontFace, void, (GLenum))
-BGL_Wrap(Frustum, void, (GLdouble, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble))
-BGL_Wrap(GenLists, GLuint, (GLsizei))
BGL_Wrap(GetBooleanv, void, (GLenum, GLbooleanP))
-BGL_Wrap(GetClipPlane, void, (GLenum, GLdoubleP))
BGL_Wrap(GetDoublev, void, (GLenum, GLdoubleP))
BGL_Wrap(GetError, GLenum, (void))
BGL_Wrap(GetFloatv, void, (GLenum, GLfloatP))
BGL_Wrap(GetIntegerv, void, (GLenum, GLintP))
-BGL_Wrap(GetLightfv, void, (GLenum, GLenum, GLfloatP))
-BGL_Wrap(GetLightiv, void, (GLenum, GLenum, GLintP))
-BGL_Wrap(GetMapdv, void, (GLenum, GLenum, GLdoubleP))
-BGL_Wrap(GetMapfv, void, (GLenum, GLenum, GLfloatP))
-BGL_Wrap(GetMapiv, void, (GLenum, GLenum, GLintP))
-BGL_Wrap(GetMaterialfv, void, (GLenum, GLenum, GLfloatP))
-BGL_Wrap(GetMaterialiv, void, (GLenum, GLenum, GLintP))
-BGL_Wrap(GetPixelMapfv, void, (GLenum, GLfloatP))
-BGL_Wrap(GetPixelMapuiv, void, (GLenum, GLuintP))
-BGL_Wrap(GetPixelMapusv, void, (GLenum, GLushortP))
-BGL_Wrap(GetPolygonStipple, void, (GLubyteP))
BGL_Wrap(GetString, GLstring, (GLenum))
-BGL_Wrap(GetTexEnvfv, void, (GLenum, GLenum, GLfloatP))
-BGL_Wrap(GetTexEnviv, void, (GLenum, GLenum, GLintP))
-BGL_Wrap(GetTexGendv, void, (GLenum, GLenum, GLdoubleP))
-BGL_Wrap(GetTexGenfv, void, (GLenum, GLenum, GLfloatP))
-BGL_Wrap(GetTexGeniv, void, (GLenum, GLenum, GLintP))
BGL_Wrap(GetTexImage, void, (GLenum, GLint, GLenum, GLenum, GLvoidP))
BGL_Wrap(GetTexLevelParameterfv, void, (GLenum, GLint, GLenum, GLfloatP))
BGL_Wrap(GetTexLevelParameteriv, void, (GLenum, GLint, GLenum, GLintP))
BGL_Wrap(GetTexParameterfv, void, (GLenum, GLenum, GLfloatP))
BGL_Wrap(GetTexParameteriv, void, (GLenum, GLenum, GLintP))
BGL_Wrap(Hint, void, (GLenum, GLenum))
-BGL_Wrap(IndexMask, void, (GLuint))
-BGL_Wrap(Indexd, void, (GLdouble))
-BGL_Wrap(Indexdv, void, (GLdoubleP))
-BGL_Wrap(Indexf, void, (GLfloat))
-BGL_Wrap(Indexfv, void, (GLfloatP))
-BGL_Wrap(Indexi, void, (GLint))
-BGL_Wrap(Indexiv, void, (GLintP))
-BGL_Wrap(Indexs, void, (GLshort))
-BGL_Wrap(Indexsv, void, (GLshortP))
-BGL_Wrap(InitNames, void, (void))
BGL_Wrap(IsEnabled, GLboolean, (GLenum))
-BGL_Wrap(IsList, GLboolean, (GLuint))
-BGL_Wrap(LightModelf, void, (GLenum, GLfloat))
-BGL_Wrap(LightModelfv, void, (GLenum, GLfloatP))
-BGL_Wrap(LightModeli, void, (GLenum, GLint))
-BGL_Wrap(LightModeliv, void, (GLenum, GLintP))
-BGL_Wrap(Lightf, void, (GLenum, GLenum, GLfloat))
-BGL_Wrap(Lightfv, void, (GLenum, GLenum, GLfloatP))
-BGL_Wrap(Lighti, void, (GLenum, GLenum, GLint))
-BGL_Wrap(Lightiv, void, (GLenum, GLenum, GLintP))
-BGL_Wrap(LineStipple, void, (GLint, GLushort))
BGL_Wrap(LineWidth, void, (GLfloat))
-BGL_Wrap(ListBase, void, (GLuint))
-BGL_Wrap(LoadIdentity, void, (void))
-BGL_Wrap(LoadMatrixd, void, (GLdoubleP))
-BGL_Wrap(LoadMatrixf, void, (GLfloatP))
-BGL_Wrap(LoadName, void, (GLuint))
BGL_Wrap(LogicOp, void, (GLenum))
-BGL_Wrap(Map1d, void, (GLenum, GLdouble, GLdouble, GLint, GLint, GLdoubleP))
-BGL_Wrap(Map1f, void, (GLenum, GLfloat, GLfloat, GLint, GLint, GLfloatP))
-BGL_Wrap(Map2d, void, (GLenum, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, GLdoubleP))
-BGL_Wrap(Map2f, void, (GLenum, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, GLfloatP))
-BGL_Wrap(MapGrid1d, void, (GLint, GLdouble, GLdouble))
-BGL_Wrap(MapGrid1f, void, (GLint, GLfloat, GLfloat))
-BGL_Wrap(MapGrid2d, void, (GLint, GLdouble, GLdouble, GLint, GLdouble, GLdouble))
-BGL_Wrap(MapGrid2f, void, (GLint, GLfloat, GLfloat, GLint, GLfloat, GLfloat))
-BGL_Wrap(Materialf, void, (GLenum, GLenum, GLfloat))
-BGL_Wrap(Materialfv, void, (GLenum, GLenum, GLfloatP))
-BGL_Wrap(Materiali, void, (GLenum, GLenum, GLint))
-BGL_Wrap(Materialiv, void, (GLenum, GLenum, GLintP))
-BGL_Wrap(MatrixMode, void, (GLenum))
-BGL_Wrap(MultMatrixd, void, (GLdoubleP))
-BGL_Wrap(MultMatrixf, void, (GLfloatP))
-BGL_Wrap(NewList, void, (GLuint, GLenum))
-BGL_Wrap(Normal3b, void, (GLbyte, GLbyte, GLbyte))
-BGL_Wrap(Normal3bv, void, (GLbyteP))
-BGL_Wrap(Normal3d, void, (GLdouble, GLdouble, GLdouble))
-BGL_Wrap(Normal3dv, void, (GLdoubleP))
-BGL_Wrap(Normal3f, void, (GLfloat, GLfloat, GLfloat))
-BGL_Wrap(Normal3fv, void, (GLfloatP))
-BGL_Wrap(Normal3i, void, (GLint, GLint, GLint))
-BGL_Wrap(Normal3iv, void, (GLintP))
-BGL_Wrap(Normal3s, void, (GLshort, GLshort, GLshort))
-BGL_Wrap(Normal3sv, void, (GLshortP))
-BGL_Wrap(Ortho, void, (GLdouble, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble))
-BGL_Wrap(PassThrough, void, (GLfloat))
-BGL_Wrap(PixelMapfv, void, (GLenum, GLsizei, GLfloatP))
-BGL_Wrap(PixelMapuiv, void, (GLenum, GLsizei, GLuintP))
-BGL_Wrap(PixelMapusv, void, (GLenum, GLsizei, GLushortP))
BGL_Wrap(PixelStoref, void, (GLenum, GLfloat))
BGL_Wrap(PixelStorei, void, (GLenum, GLint))
-BGL_Wrap(PixelTransferf, void, (GLenum, GLfloat))
-BGL_Wrap(PixelTransferi, void, (GLenum, GLint))
-BGL_Wrap(PixelZoom, void, (GLfloat, GLfloat))
BGL_Wrap(PointSize, void, (GLfloat))
BGL_Wrap(PolygonMode, void, (GLenum, GLenum))
-BGL_Wrap(PolygonStipple, void, (GLubyteP))
-BGL_Wrap(PopAttrib, void, (void))
-BGL_Wrap(PopMatrix, void, (void))
-BGL_Wrap(PopName, void, (void))
-BGL_Wrap(PushAttrib, void, (GLbitfield))
-BGL_Wrap(PushMatrix, void, (void))
-BGL_Wrap(PushName, void, (GLuint))
-BGL_Wrap(RasterPos2d, void, (GLdouble, GLdouble))
-BGL_Wrap(RasterPos2dv, void, (GLdoubleP))
-BGL_Wrap(RasterPos2f, void, (GLfloat, GLfloat))
-BGL_Wrap(RasterPos2fv, void, (GLfloatP))
-BGL_Wrap(RasterPos2i, void, (GLint, GLint))
-BGL_Wrap(RasterPos2iv, void, (GLintP))
-BGL_Wrap(RasterPos2s, void, (GLshort, GLshort))
-BGL_Wrap(RasterPos2sv, void, (GLshortP))
-BGL_Wrap(RasterPos3d, void, (GLdouble, GLdouble, GLdouble))
-BGL_Wrap(RasterPos3dv, void, (GLdoubleP))
-BGL_Wrap(RasterPos3f, void, (GLfloat, GLfloat, GLfloat))
-BGL_Wrap(RasterPos3fv, void, (GLfloatP))
-BGL_Wrap(RasterPos3i, void, (GLint, GLint, GLint))
-BGL_Wrap(RasterPos3iv, void, (GLintP))
-BGL_Wrap(RasterPos3s, void, (GLshort, GLshort, GLshort))
-BGL_Wrap(RasterPos3sv, void, (GLshortP))
-BGL_Wrap(RasterPos4d, void, (GLdouble, GLdouble, GLdouble, GLdouble))
-BGL_Wrap(RasterPos4dv, void, (GLdoubleP))
-BGL_Wrap(RasterPos4f, void, (GLfloat, GLfloat, GLfloat, GLfloat))
-BGL_Wrap(RasterPos4fv, void, (GLfloatP))
-BGL_Wrap(RasterPos4i, void, (GLint, GLint, GLint, GLint))
-BGL_Wrap(RasterPos4iv, void, (GLintP))
-BGL_Wrap(RasterPos4s, void, (GLshort, GLshort, GLshort, GLshort))
-BGL_Wrap(RasterPos4sv, void, (GLshortP))
BGL_Wrap(ReadBuffer, void, (GLenum))
BGL_Wrap(ReadPixels, void, (GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, GLvoidP))
-BGL_Wrap(Rectd, void, (GLdouble, GLdouble, GLdouble, GLdouble))
-BGL_Wrap(Rectdv, void, (GLdoubleP, GLdoubleP))
-BGL_Wrap(Rectf, void, (GLfloat, GLfloat, GLfloat, GLfloat))
-BGL_Wrap(Rectfv, void, (GLfloatP, GLfloatP))
-BGL_Wrap(Recti, void, (GLint, GLint, GLint, GLint))
-BGL_Wrap(Rectiv, void, (GLintP, GLintP))
-BGL_Wrap(Rects, void, (GLshort, GLshort, GLshort, GLshort))
-BGL_Wrap(Rectsv, void, (GLshortP, GLshortP))
-BGL_Wrap(RenderMode, GLint, (GLenum))
-BGL_Wrap(Rotated, void, (GLdouble, GLdouble, GLdouble, GLdouble))
-BGL_Wrap(Rotatef, void, (GLfloat, GLfloat, GLfloat, GLfloat))
-BGL_Wrap(Scaled, void, (GLdouble, GLdouble, GLdouble))
-BGL_Wrap(Scalef, void, (GLfloat, GLfloat, GLfloat))
BGL_Wrap(Scissor, void, (GLint, GLint, GLsizei, GLsizei))
-BGL_Wrap(SelectBuffer, void, (GLsizei, GLuintP))
-BGL_Wrap(ShadeModel, void, (GLenum))
BGL_Wrap(StencilFunc, void, (GLenum, GLint, GLuint))
BGL_Wrap(StencilMask, void, (GLuint))
BGL_Wrap(StencilOp, void, (GLenum, GLenum, GLenum))
-BGL_Wrap(TexCoord1d, void, (GLdouble))
-BGL_Wrap(TexCoord1dv, void, (GLdoubleP))
-BGL_Wrap(TexCoord1f, void, (GLfloat))
-BGL_Wrap(TexCoord1fv, void, (GLfloatP))
-BGL_Wrap(TexCoord1i, void, (GLint))
-BGL_Wrap(TexCoord1iv, void, (GLintP))
-BGL_Wrap(TexCoord1s, void, (GLshort))
-BGL_Wrap(TexCoord1sv, void, (GLshortP))
-BGL_Wrap(TexCoord2d, void, (GLdouble, GLdouble))
-BGL_Wrap(TexCoord2dv, void, (GLdoubleP))
-BGL_Wrap(TexCoord2f, void, (GLfloat, GLfloat))
-BGL_Wrap(TexCoord2fv, void, (GLfloatP))
-BGL_Wrap(TexCoord2i, void, (GLint, GLint))
-BGL_Wrap(TexCoord2iv, void, (GLintP))
-BGL_Wrap(TexCoord2s, void, (GLshort, GLshort))
-BGL_Wrap(TexCoord2sv, void, (GLshortP))
-BGL_Wrap(TexCoord3d, void, (GLdouble, GLdouble, GLdouble))
-BGL_Wrap(TexCoord3dv, void, (GLdoubleP))
-BGL_Wrap(TexCoord3f, void, (GLfloat, GLfloat, GLfloat))
-BGL_Wrap(TexCoord3fv, void, (GLfloatP))
-BGL_Wrap(TexCoord3i, void, (GLint, GLint, GLint))
-BGL_Wrap(TexCoord3iv, void, (GLintP))
-BGL_Wrap(TexCoord3s, void, (GLshort, GLshort, GLshort))
-BGL_Wrap(TexCoord3sv, void, (GLshortP))
-BGL_Wrap(TexCoord4d, void, (GLdouble, GLdouble, GLdouble, GLdouble))
-BGL_Wrap(TexCoord4dv, void, (GLdoubleP))
-BGL_Wrap(TexCoord4f, void, (GLfloat, GLfloat, GLfloat, GLfloat))
-BGL_Wrap(TexCoord4fv, void, (GLfloatP))
-BGL_Wrap(TexCoord4i, void, (GLint, GLint, GLint, GLint))
-BGL_Wrap(TexCoord4iv, void, (GLintP))
-BGL_Wrap(TexCoord4s, void, (GLshort, GLshort, GLshort, GLshort))
-BGL_Wrap(TexCoord4sv, void, (GLshortP))
-BGL_Wrap(TexEnvf, void, (GLenum, GLenum, GLfloat))
-BGL_Wrap(TexEnvfv, void, (GLenum, GLenum, GLfloatP))
-BGL_Wrap(TexEnvi, void, (GLenum, GLenum, GLint))
-BGL_Wrap(TexEnviv, void, (GLenum, GLenum, GLintP))
-BGL_Wrap(TexGend, void, (GLenum, GLenum, GLdouble))
-BGL_Wrap(TexGendv, void, (GLenum, GLenum, GLdoubleP))
-BGL_Wrap(TexGenf, void, (GLenum, GLenum, GLfloat))
-BGL_Wrap(TexGenfv, void, (GLenum, GLenum, GLfloatP))
-BGL_Wrap(TexGeni, void, (GLenum, GLenum, GLint))
-BGL_Wrap(TexGeniv, void, (GLenum, GLenum, GLintP))
BGL_Wrap(TexImage1D, void, (GLenum, GLint, GLint, GLsizei, GLint, GLenum, GLenum, GLvoidP))
BGL_Wrap(TexImage2D, void, (GLenum, GLint, GLint, GLsizei, GLsizei, GLint, GLenum, GLenum, GLvoidP))
BGL_Wrap(TexParameterf, void, (GLenum, GLenum, GLfloat))
BGL_Wrap(TexParameterfv, void, (GLenum, GLenum, GLfloatP))
BGL_Wrap(TexParameteri, void, (GLenum, GLenum, GLint))
BGL_Wrap(TexParameteriv, void, (GLenum, GLenum, GLintP))
-BGL_Wrap(Translated, void, (GLdouble, GLdouble, GLdouble))
-BGL_Wrap(Translatef, void, (GLfloat, GLfloat, GLfloat))
-BGL_Wrap(Vertex2d, void, (GLdouble, GLdouble))
-BGL_Wrap(Vertex2dv, void, (GLdoubleP))
-BGL_Wrap(Vertex2f, void, (GLfloat, GLfloat))
-BGL_Wrap(Vertex2fv, void, (GLfloatP))
-BGL_Wrap(Vertex2i, void, (GLint, GLint))
-BGL_Wrap(Vertex2iv, void, (GLintP))
-BGL_Wrap(Vertex2s, void, (GLshort, GLshort))
-BGL_Wrap(Vertex2sv, void, (GLshortP))
-BGL_Wrap(Vertex3d, void, (GLdouble, GLdouble, GLdouble))
-BGL_Wrap(Vertex3dv, void, (GLdoubleP))
-BGL_Wrap(Vertex3f, void, (GLfloat, GLfloat, GLfloat))
-BGL_Wrap(Vertex3fv, void, (GLfloatP))
-BGL_Wrap(Vertex3i, void, (GLint, GLint, GLint))
-BGL_Wrap(Vertex3iv, void, (GLintP))
-BGL_Wrap(Vertex3s, void, (GLshort, GLshort, GLshort))
-BGL_Wrap(Vertex3sv, void, (GLshortP))
-BGL_Wrap(Vertex4d, void, (GLdouble, GLdouble, GLdouble, GLdouble))
-BGL_Wrap(Vertex4dv, void, (GLdoubleP))
-BGL_Wrap(Vertex4f, void, (GLfloat, GLfloat, GLfloat, GLfloat))
-BGL_Wrap(Vertex4fv, void, (GLfloatP))
-BGL_Wrap(Vertex4i, void, (GLint, GLint, GLint, GLint))
-BGL_Wrap(Vertex4iv, void, (GLintP))
-BGL_Wrap(Vertex4s, void, (GLshort, GLshort, GLshort, GLshort))
-BGL_Wrap(Vertex4sv, void, (GLshortP))
BGL_Wrap(Viewport, void, (GLint, GLint, GLsizei, GLsizei))
/* GL_VERSION_1_1 */
-BGL_Wrap(AreTexturesResident, GLboolean, (GLsizei, GLuintP, GLbooleanP))
-BGL_Wrap(ArrayElement, void, (GLint))
BGL_Wrap(BindTexture, void, (GLenum, GLuint))
-BGL_Wrap(ColorPointer, void, (GLint, GLenum, GLsizei, GLvoidP))
BGL_Wrap(CopyTexImage1D, void, (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLint))
BGL_Wrap(CopyTexImage2D, void, (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint))
BGL_Wrap(CopyTexSubImage1D, void, (GLenum, GLint, GLint, GLint, GLint, GLsizei))
BGL_Wrap(CopyTexSubImage2D, void, (GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei))
BGL_Wrap(DeleteTextures, void, (GLsizei, GLuintP))
-BGL_Wrap(DisableClientState, void, (GLenum))
BGL_Wrap(DrawArrays, void, (GLenum, GLint, GLsizei))
BGL_Wrap(DrawElements, void, (GLenum, GLsizei, GLenum, GLvoidP))
-BGL_Wrap(EdgeFlagPointer, void, (GLsizei, GLvoidP))
-BGL_Wrap(EnableClientState, void, (GLenum))
BGL_Wrap(GenTextures, void, (GLsizei, GLuintP))
-BGL_Wrap(GetPointerv, void, (GLenum, GLvoidP))
-BGL_Wrap(IndexPointer, void, (GLenum, GLsizei, GLvoidP))
-BGL_Wrap(Indexub, void, (GLubyte))
-BGL_Wrap(Indexubv, void, (GLubyteP))
-BGL_Wrap(InterleavedArrays, void, (GLenum, GLsizei, GLvoidP))
BGL_Wrap(IsTexture, GLboolean, (GLuint))
-BGL_Wrap(NormalPointer, void, (GLenum, GLsizei, GLvoidP))
BGL_Wrap(PolygonOffset, void, (GLfloat, GLfloat))
-BGL_Wrap(PopClientAttrib, void, (void))
-BGL_Wrap(PrioritizeTextures, void, (GLsizei, GLuintP, GLfloatP))
-BGL_Wrap(PushClientAttrib, void, (GLbitfield))
-BGL_Wrap(TexCoordPointer, void, (GLint, GLenum, GLsizei, GLvoidP))
BGL_Wrap(TexSubImage1D, void, (GLenum, GLint, GLint, GLsizei, GLenum, GLenum, GLvoidP))
BGL_Wrap(TexSubImage2D, void, (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, GLvoidP))
-BGL_Wrap(VertexPointer, void, (GLint, GLenum, GLsizei, GLvoidP))
/* GL_VERSION_1_2 */
@@ -1436,7 +1153,6 @@ BGL_Wrap(TexSubImage3D, void, (GLenum, GLint, GLint, GLint, GLi
/* GL_VERSION_1_3 */
BGL_Wrap(ActiveTexture, void, (GLenum))
-BGL_Wrap(ClientActiveTexture, void, (GLenum))
BGL_Wrap(CompressedTexImage1D, void, (GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, GLvoidP))
BGL_Wrap(CompressedTexImage2D, void, (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, GLvoidP))
BGL_Wrap(CompressedTexImage3D, void, (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, GLvoidP))
@@ -1444,42 +1160,6 @@ BGL_Wrap(CompressedTexSubImage1D, void, (GLenum, GLint, GLint, GLsizei, G
BGL_Wrap(CompressedTexSubImage2D, void, (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, GLvoidP))
BGL_Wrap(CompressedTexSubImage3D, void, (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, GLvoidP))
BGL_Wrap(GetCompressedTexImage, void, (GLenum, GLint, GLvoidP))
-BGL_Wrap(LoadTransposeMatrixd, void, (GLdoubleP))
-BGL_Wrap(LoadTransposeMatrixf, void, (GLfloatP))
-BGL_Wrap(MultTransposeMatrixd, void, (GLdoubleP))
-BGL_Wrap(MultTransposeMatrixf, void, (GLfloatP))
-BGL_Wrap(MultiTexCoord1d, void, (GLenum, GLdouble))
-BGL_Wrap(MultiTexCoord1dv, void, (GLenum, GLdoubleP))
-BGL_Wrap(MultiTexCoord1f, void, (GLenum, GLfloat))
-BGL_Wrap(MultiTexCoord1fv, void, (GLenum, GLfloatP))
-BGL_Wrap(MultiTexCoord1i, void, (GLenum, GLint))
-BGL_Wrap(MultiTexCoord1iv, void, (GLenum, GLintP))
-BGL_Wrap(MultiTexCoord1s, void, (GLenum, GLshort))
-BGL_Wrap(MultiTexCoord1sv, void, (GLenum, GLshortP))
-BGL_Wrap(MultiTexCoord2d, void, (GLenum, GLdouble, GLdouble))
-BGL_Wrap(MultiTexCoord2dv, void, (GLenum, GLdoubleP))
-BGL_Wrap(MultiTexCoord2f, void, (GLenum, GLfloat, GLfloat))
-BGL_Wrap(MultiTexCoord2fv, void, (GLenum, GLfloatP))
-BGL_Wrap(MultiTexCoord2i, void, (GLenum, GLint, GLint))
-BGL_Wrap(MultiTexCoord2iv, void, (GLenum, GLintP))
-BGL_Wrap(MultiTexCoord2s, void, (GLenum, GLshort, GLshort))
-BGL_Wrap(MultiTexCoord2sv, void, (GLenum, GLshortP))
-BGL_Wrap(MultiTexCoord3d, void, (GLenum, GLdouble, GLdouble, GLdouble))
-BGL_Wrap(MultiTexCoord3dv, void, (GLenum, GLdoubleP))
-BGL_Wrap(MultiTexCoord3f, void, (GLenum, GLfloat, GLfloat, GLfloat))
-BGL_Wrap(MultiTexCoord3fv, void, (GLenum, GLfloatP))
-BGL_Wrap(MultiTexCoord3i, void, (GLenum, GLint, GLint, GLint))
-BGL_Wrap(MultiTexCoord3iv, void, (GLenum, GLintP))
-BGL_Wrap(MultiTexCoord3s, void, (GLenum, GLshort, GLshort, GLshort))
-BGL_Wrap(MultiTexCoord3sv, void, (GLenum, GLshortP))
-BGL_Wrap(MultiTexCoord4d, void, (GLenum, GLdouble, GLdouble, GLdouble, GLdouble))
-BGL_Wrap(MultiTexCoord4dv, void, (GLenum, GLdoubleP))
-BGL_Wrap(MultiTexCoord4f, void, (GLenum, GLfloat, GLfloat, GLfloat, GLfloat))
-BGL_Wrap(MultiTexCoord4fv, void, (GLenum, GLfloatP))
-BGL_Wrap(MultiTexCoord4i, void, (GLenum, GLint, GLint, GLint, GLint))
-BGL_Wrap(MultiTexCoord4iv, void, (GLenum, GLintP))
-BGL_Wrap(MultiTexCoord4s, void, (GLenum, GLshort, GLshort, GLshort, GLshort))
-BGL_Wrap(MultiTexCoord4sv, void, (GLenum, GLshortP))
BGL_Wrap(SampleCoverage, void, (GLfloat, GLboolean))
@@ -1618,6 +1298,7 @@ BGL_Wrap(UniformMatrix4x3fv, void, (GLint, GLsizei, GLboolean, GLflo
BGL_Wrap(BindVertexArray, void, (GLuint))
BGL_Wrap(DeleteVertexArrays, void, (GLsizei, GLuintP))
BGL_Wrap(GenVertexArrays, void, (GLsizei, GLuintP))
+BGL_Wrap(GetStringi, GLstring, (GLenum, GLuint))
BGL_Wrap(IsVertexArray, GLboolean, (GLuint))
@@ -1645,44 +1326,7 @@ BGL_Wrap(TexImage3DMultisample, void, (GLenum, GLsizei, GLenum, GLsizei
/* GL_VERSION_3_3 */
-BGL_Wrap(ColorP3ui, void, (GLenum, GLuint))
-BGL_Wrap(ColorP3uiv, void, (GLenum, GLuintP))
-BGL_Wrap(ColorP4ui, void, (GLenum, GLuint))
-BGL_Wrap(ColorP4uiv, void, (GLenum, GLuintP))
-BGL_Wrap(MultiTexCoordP1ui, void, (GLenum, GLenum, GLuint))
-BGL_Wrap(MultiTexCoordP1uiv, void, (GLenum, GLenum, GLuintP))
-BGL_Wrap(MultiTexCoordP2ui, void, (GLenum, GLenum, GLuint))
-BGL_Wrap(MultiTexCoordP2uiv, void, (GLenum, GLenum, GLuintP))
-BGL_Wrap(MultiTexCoordP3ui, void, (GLenum, GLenum, GLuint))
-BGL_Wrap(MultiTexCoordP3uiv, void, (GLenum, GLenum, GLuintP))
-BGL_Wrap(MultiTexCoordP4ui, void, (GLenum, GLenum, GLuint))
-BGL_Wrap(MultiTexCoordP4uiv, void, (GLenum, GLenum, GLuintP))
-BGL_Wrap(NormalP3ui, void, (GLenum, GLuint))
-BGL_Wrap(NormalP3uiv, void, (GLenum, GLuintP))
-BGL_Wrap(SecondaryColorP3ui, void, (GLenum, GLuint))
-BGL_Wrap(SecondaryColorP3uiv, void, (GLenum, GLuintP))
-BGL_Wrap(TexCoordP1ui, void, (GLenum, GLuint))
-BGL_Wrap(TexCoordP1uiv, void, (GLenum, GLuintP))
-BGL_Wrap(TexCoordP2ui, void, (GLenum, GLuint))
-BGL_Wrap(TexCoordP2uiv, void, (GLenum, GLuintP))
-BGL_Wrap(TexCoordP3ui, void, (GLenum, GLuint))
-BGL_Wrap(TexCoordP3uiv, void, (GLenum, GLuintP))
-BGL_Wrap(TexCoordP4ui, void, (GLenum, GLuint))
-BGL_Wrap(TexCoordP4uiv, void, (GLenum, GLuintP))
-BGL_Wrap(VertexP2ui, void, (GLenum, GLuint))
-BGL_Wrap(VertexP2uiv, void, (GLenum, GLuintP))
-BGL_Wrap(VertexP3ui, void, (GLenum, GLuint))
-BGL_Wrap(VertexP3uiv, void, (GLenum, GLuintP))
-BGL_Wrap(VertexP4ui, void, (GLenum, GLuint))
-BGL_Wrap(VertexP4uiv, void, (GLenum, GLuintP))
-
-
-BGLU_Wrap(Perspective, void, (GLdouble, GLdouble, GLdouble, GLdouble))
-BGLU_Wrap(LookAt, void, (GLdouble, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble))
-BGLU_Wrap(Ortho2D, void, (GLdouble, GLdouble, GLdouble, GLdouble))
-BGLU_Wrap(PickMatrix, void, (GLdouble, GLdouble, GLdouble, GLdouble, GLintP))
-BGLU_Wrap(Project, GLint, (GLdouble, GLdouble, GLdouble, GLdoubleP, GLdoubleP, GLintP, GLdoubleP, GLdoubleP, GLdoubleP))
-BGLU_Wrap(UnProject, GLint, (GLdouble, GLdouble, GLdouble, GLdoubleP, GLdoubleP, GLintP, GLdoubleP, GLdoubleP, GLdoubleP))
+/* no new functions besides packed immediate mode (not part of core profile) */
/** \} */
@@ -1692,26 +1336,12 @@ BGLU_Wrap(UnProject, GLint, (GLdouble, GLdouble, GLdouble, GLdouble
/** \name Module Definition
* \{ */
-#define MethodDefu(func) {"glu"#func, Method_##func, METH_VARARGS, NULL}
-
-static struct PyMethodDef BGL_methods[] = {
- MethodDefu(Perspective),
- MethodDefu(LookAt),
- MethodDefu(Ortho2D),
- MethodDefu(PickMatrix),
- MethodDefu(Project),
- MethodDefu(UnProject),
- {NULL, NULL, 0, NULL}
-};
-
-#undef MethodDefu
-
static struct PyModuleDef BGL_module_def = {
PyModuleDef_HEAD_INIT,
"bgl", /* m_name */
NULL, /* m_doc */
0, /* m_size */
- BGL_methods, /* m_methods */
+ NULL, /* m_methods */
NULL, /* m_reload */
NULL, /* m_traverse */
NULL, /* m_clear */
@@ -1745,9 +1375,6 @@ static void py_module_dict_add_method(PyObject *submodule, PyObject *dict, PyMet
}
}
-/* TODO, expose to users */
-static bool use_deprecated = true;
-
PyObject *BPyInit_bgl(void)
{
PyObject *submodule, *dict;
@@ -1822,268 +1449,6 @@ PyObject *BPyInit_bgl(void)
PY_MOD_ADD_METHOD(TexParameteriv);
PY_MOD_ADD_METHOD(Viewport);
}
- /* adding in GL_VERSION_1_0 removed from core profile */
- if (use_deprecated == true) {
- PY_MOD_ADD_METHOD(Accum);
- PY_MOD_ADD_METHOD(AlphaFunc);
- PY_MOD_ADD_METHOD(Begin);
- PY_MOD_ADD_METHOD(Bitmap);
- PY_MOD_ADD_METHOD(CallList);
- PY_MOD_ADD_METHOD(CallLists);
- PY_MOD_ADD_METHOD(ClearAccum);
- PY_MOD_ADD_METHOD(ClearIndex);
- PY_MOD_ADD_METHOD(ClipPlane);
- PY_MOD_ADD_METHOD(Color3b);
- PY_MOD_ADD_METHOD(Color3bv);
- PY_MOD_ADD_METHOD(Color3d);
- PY_MOD_ADD_METHOD(Color3dv);
- PY_MOD_ADD_METHOD(Color3f);
- PY_MOD_ADD_METHOD(Color3fv);
- PY_MOD_ADD_METHOD(Color3i);
- PY_MOD_ADD_METHOD(Color3iv);
- PY_MOD_ADD_METHOD(Color3s);
- PY_MOD_ADD_METHOD(Color3sv);
- PY_MOD_ADD_METHOD(Color3ub);
- PY_MOD_ADD_METHOD(Color3ubv);
- PY_MOD_ADD_METHOD(Color3ui);
- PY_MOD_ADD_METHOD(Color3uiv);
- PY_MOD_ADD_METHOD(Color3us);
- PY_MOD_ADD_METHOD(Color3usv);
- PY_MOD_ADD_METHOD(Color4b);
- PY_MOD_ADD_METHOD(Color4bv);
- PY_MOD_ADD_METHOD(Color4d);
- PY_MOD_ADD_METHOD(Color4dv);
- PY_MOD_ADD_METHOD(Color4f);
- PY_MOD_ADD_METHOD(Color4fv);
- PY_MOD_ADD_METHOD(Color4i);
- PY_MOD_ADD_METHOD(Color4iv);
- PY_MOD_ADD_METHOD(Color4s);
- PY_MOD_ADD_METHOD(Color4sv);
- PY_MOD_ADD_METHOD(Color4ub);
- PY_MOD_ADD_METHOD(Color4ubv);
- PY_MOD_ADD_METHOD(Color4ui);
- PY_MOD_ADD_METHOD(Color4uiv);
- PY_MOD_ADD_METHOD(Color4us);
- PY_MOD_ADD_METHOD(Color4usv);
- PY_MOD_ADD_METHOD(ColorMaterial);
- PY_MOD_ADD_METHOD(CopyPixels);
- PY_MOD_ADD_METHOD(DeleteLists);
- PY_MOD_ADD_METHOD(DrawPixels);
- PY_MOD_ADD_METHOD(EdgeFlag);
- PY_MOD_ADD_METHOD(EdgeFlagv);
- PY_MOD_ADD_METHOD(End);
- PY_MOD_ADD_METHOD(EndList);
- PY_MOD_ADD_METHOD(EvalCoord1d);
- PY_MOD_ADD_METHOD(EvalCoord1dv);
- PY_MOD_ADD_METHOD(EvalCoord1f);
- PY_MOD_ADD_METHOD(EvalCoord1fv);
- PY_MOD_ADD_METHOD(EvalCoord2d);
- PY_MOD_ADD_METHOD(EvalCoord2dv);
- PY_MOD_ADD_METHOD(EvalCoord2f);
- PY_MOD_ADD_METHOD(EvalCoord2fv);
- PY_MOD_ADD_METHOD(EvalMesh1);
- PY_MOD_ADD_METHOD(EvalMesh2);
- PY_MOD_ADD_METHOD(EvalPoint1);
- PY_MOD_ADD_METHOD(EvalPoint2);
- PY_MOD_ADD_METHOD(FeedbackBuffer);
- PY_MOD_ADD_METHOD(Fogf);
- PY_MOD_ADD_METHOD(Fogfv);
- PY_MOD_ADD_METHOD(Fogi);
- PY_MOD_ADD_METHOD(Fogiv);
- PY_MOD_ADD_METHOD(Frustum);
- PY_MOD_ADD_METHOD(GenLists);
- PY_MOD_ADD_METHOD(GetClipPlane);
- PY_MOD_ADD_METHOD(GetLightfv);
- PY_MOD_ADD_METHOD(GetLightiv);
- PY_MOD_ADD_METHOD(GetMapdv);
- PY_MOD_ADD_METHOD(GetMapfv);
- PY_MOD_ADD_METHOD(GetMapiv);
- PY_MOD_ADD_METHOD(GetMaterialfv);
- PY_MOD_ADD_METHOD(GetMaterialiv);
- PY_MOD_ADD_METHOD(GetPixelMapfv);
- PY_MOD_ADD_METHOD(GetPixelMapuiv);
- PY_MOD_ADD_METHOD(GetPixelMapusv);
- PY_MOD_ADD_METHOD(GetPolygonStipple);
- PY_MOD_ADD_METHOD(GetTexEnvfv);
- PY_MOD_ADD_METHOD(GetTexEnviv);
- PY_MOD_ADD_METHOD(GetTexGendv);
- PY_MOD_ADD_METHOD(GetTexGenfv);
- PY_MOD_ADD_METHOD(GetTexGeniv);
- PY_MOD_ADD_METHOD(IndexMask);
- PY_MOD_ADD_METHOD(Indexd);
- PY_MOD_ADD_METHOD(Indexdv);
- PY_MOD_ADD_METHOD(Indexf);
- PY_MOD_ADD_METHOD(Indexfv);
- PY_MOD_ADD_METHOD(Indexi);
- PY_MOD_ADD_METHOD(Indexiv);
- PY_MOD_ADD_METHOD(Indexs);
- PY_MOD_ADD_METHOD(Indexsv);
- PY_MOD_ADD_METHOD(InitNames);
- PY_MOD_ADD_METHOD(IsList);
- PY_MOD_ADD_METHOD(LightModelf);
- PY_MOD_ADD_METHOD(LightModelfv);
- PY_MOD_ADD_METHOD(LightModeli);
- PY_MOD_ADD_METHOD(LightModeliv);
- PY_MOD_ADD_METHOD(Lightf);
- PY_MOD_ADD_METHOD(Lightfv);
- PY_MOD_ADD_METHOD(Lighti);
- PY_MOD_ADD_METHOD(Lightiv);
- PY_MOD_ADD_METHOD(LineStipple);
- PY_MOD_ADD_METHOD(ListBase);
- PY_MOD_ADD_METHOD(LoadIdentity);
- PY_MOD_ADD_METHOD(LoadMatrixd);
- PY_MOD_ADD_METHOD(LoadMatrixf);
- PY_MOD_ADD_METHOD(LoadName);
- PY_MOD_ADD_METHOD(Map1d);
- PY_MOD_ADD_METHOD(Map1f);
- PY_MOD_ADD_METHOD(Map2d);
- PY_MOD_ADD_METHOD(Map2f);
- PY_MOD_ADD_METHOD(MapGrid1d);
- PY_MOD_ADD_METHOD(MapGrid1f);
- PY_MOD_ADD_METHOD(MapGrid2d);
- PY_MOD_ADD_METHOD(MapGrid2f);
- PY_MOD_ADD_METHOD(Materialf);
- PY_MOD_ADD_METHOD(Materialfv);
- PY_MOD_ADD_METHOD(Materiali);
- PY_MOD_ADD_METHOD(Materialiv);
- PY_MOD_ADD_METHOD(MatrixMode);
- PY_MOD_ADD_METHOD(MultMatrixd);
- PY_MOD_ADD_METHOD(MultMatrixf);
- PY_MOD_ADD_METHOD(NewList);
- PY_MOD_ADD_METHOD(Normal3b);
- PY_MOD_ADD_METHOD(Normal3bv);
- PY_MOD_ADD_METHOD(Normal3d);
- PY_MOD_ADD_METHOD(Normal3dv);
- PY_MOD_ADD_METHOD(Normal3f);
- PY_MOD_ADD_METHOD(Normal3fv);
- PY_MOD_ADD_METHOD(Normal3i);
- PY_MOD_ADD_METHOD(Normal3iv);
- PY_MOD_ADD_METHOD(Normal3s);
- PY_MOD_ADD_METHOD(Normal3sv);
- PY_MOD_ADD_METHOD(Ortho);
- PY_MOD_ADD_METHOD(PassThrough);
- PY_MOD_ADD_METHOD(PixelMapfv);
- PY_MOD_ADD_METHOD(PixelMapuiv);
- PY_MOD_ADD_METHOD(PixelMapusv);
- PY_MOD_ADD_METHOD(PixelTransferf);
- PY_MOD_ADD_METHOD(PixelTransferi);
- PY_MOD_ADD_METHOD(PixelZoom);
- PY_MOD_ADD_METHOD(PolygonStipple);
- PY_MOD_ADD_METHOD(PopAttrib);
- PY_MOD_ADD_METHOD(PopMatrix);
- PY_MOD_ADD_METHOD(PopName);
- PY_MOD_ADD_METHOD(PushAttrib);
- PY_MOD_ADD_METHOD(PushMatrix);
- PY_MOD_ADD_METHOD(PushName);
- PY_MOD_ADD_METHOD(RasterPos2d);
- PY_MOD_ADD_METHOD(RasterPos2dv);
- PY_MOD_ADD_METHOD(RasterPos2f);
- PY_MOD_ADD_METHOD(RasterPos2fv);
- PY_MOD_ADD_METHOD(RasterPos2i);
- PY_MOD_ADD_METHOD(RasterPos2iv);
- PY_MOD_ADD_METHOD(RasterPos2s);
- PY_MOD_ADD_METHOD(RasterPos2sv);
- PY_MOD_ADD_METHOD(RasterPos3d);
- PY_MOD_ADD_METHOD(RasterPos3dv);
- PY_MOD_ADD_METHOD(RasterPos3f);
- PY_MOD_ADD_METHOD(RasterPos3fv);
- PY_MOD_ADD_METHOD(RasterPos3i);
- PY_MOD_ADD_METHOD(RasterPos3iv);
- PY_MOD_ADD_METHOD(RasterPos3s);
- PY_MOD_ADD_METHOD(RasterPos3sv);
- PY_MOD_ADD_METHOD(RasterPos4d);
- PY_MOD_ADD_METHOD(RasterPos4dv);
- PY_MOD_ADD_METHOD(RasterPos4f);
- PY_MOD_ADD_METHOD(RasterPos4fv);
- PY_MOD_ADD_METHOD(RasterPos4i);
- PY_MOD_ADD_METHOD(RasterPos4iv);
- PY_MOD_ADD_METHOD(RasterPos4s);
- PY_MOD_ADD_METHOD(RasterPos4sv);
- PY_MOD_ADD_METHOD(Rectd);
- PY_MOD_ADD_METHOD(Rectdv);
- PY_MOD_ADD_METHOD(Rectf);
- PY_MOD_ADD_METHOD(Rectfv);
- PY_MOD_ADD_METHOD(Recti);
- PY_MOD_ADD_METHOD(Rectiv);
- PY_MOD_ADD_METHOD(Rects);
- PY_MOD_ADD_METHOD(Rectsv);
- PY_MOD_ADD_METHOD(RenderMode);
- PY_MOD_ADD_METHOD(Rotated);
- PY_MOD_ADD_METHOD(Rotatef);
- PY_MOD_ADD_METHOD(Scaled);
- PY_MOD_ADD_METHOD(Scalef);
- PY_MOD_ADD_METHOD(SelectBuffer);
- PY_MOD_ADD_METHOD(ShadeModel);
- PY_MOD_ADD_METHOD(TexCoord1d);
- PY_MOD_ADD_METHOD(TexCoord1dv);
- PY_MOD_ADD_METHOD(TexCoord1f);
- PY_MOD_ADD_METHOD(TexCoord1fv);
- PY_MOD_ADD_METHOD(TexCoord1i);
- PY_MOD_ADD_METHOD(TexCoord1iv);
- PY_MOD_ADD_METHOD(TexCoord1s);
- PY_MOD_ADD_METHOD(TexCoord1sv);
- PY_MOD_ADD_METHOD(TexCoord2d);
- PY_MOD_ADD_METHOD(TexCoord2dv);
- PY_MOD_ADD_METHOD(TexCoord2f);
- PY_MOD_ADD_METHOD(TexCoord2fv);
- PY_MOD_ADD_METHOD(TexCoord2i);
- PY_MOD_ADD_METHOD(TexCoord2iv);
- PY_MOD_ADD_METHOD(TexCoord2s);
- PY_MOD_ADD_METHOD(TexCoord2sv);
- PY_MOD_ADD_METHOD(TexCoord3d);
- PY_MOD_ADD_METHOD(TexCoord3dv);
- PY_MOD_ADD_METHOD(TexCoord3f);
- PY_MOD_ADD_METHOD(TexCoord3fv);
- PY_MOD_ADD_METHOD(TexCoord3i);
- PY_MOD_ADD_METHOD(TexCoord3iv);
- PY_MOD_ADD_METHOD(TexCoord3s);
- PY_MOD_ADD_METHOD(TexCoord3sv);
- PY_MOD_ADD_METHOD(TexCoord4d);
- PY_MOD_ADD_METHOD(TexCoord4dv);
- PY_MOD_ADD_METHOD(TexCoord4f);
- PY_MOD_ADD_METHOD(TexCoord4fv);
- PY_MOD_ADD_METHOD(TexCoord4i);
- PY_MOD_ADD_METHOD(TexCoord4iv);
- PY_MOD_ADD_METHOD(TexCoord4s);
- PY_MOD_ADD_METHOD(TexCoord4sv);
- PY_MOD_ADD_METHOD(TexEnvf);
- PY_MOD_ADD_METHOD(TexEnvfv);
- PY_MOD_ADD_METHOD(TexEnvi);
- PY_MOD_ADD_METHOD(TexEnviv);
- PY_MOD_ADD_METHOD(TexGend);
- PY_MOD_ADD_METHOD(TexGendv);
- PY_MOD_ADD_METHOD(TexGenf);
- PY_MOD_ADD_METHOD(TexGenfv);
- PY_MOD_ADD_METHOD(TexGeni);
- PY_MOD_ADD_METHOD(TexGeniv);
- PY_MOD_ADD_METHOD(Translated);
- PY_MOD_ADD_METHOD(Translatef);
- PY_MOD_ADD_METHOD(Vertex2d);
- PY_MOD_ADD_METHOD(Vertex2dv);
- PY_MOD_ADD_METHOD(Vertex2f);
- PY_MOD_ADD_METHOD(Vertex2fv);
- PY_MOD_ADD_METHOD(Vertex2i);
- PY_MOD_ADD_METHOD(Vertex2iv);
- PY_MOD_ADD_METHOD(Vertex2s);
- PY_MOD_ADD_METHOD(Vertex2sv);
- PY_MOD_ADD_METHOD(Vertex3d);
- PY_MOD_ADD_METHOD(Vertex3dv);
- PY_MOD_ADD_METHOD(Vertex3f);
- PY_MOD_ADD_METHOD(Vertex3fv);
- PY_MOD_ADD_METHOD(Vertex3i);
- PY_MOD_ADD_METHOD(Vertex3iv);
- PY_MOD_ADD_METHOD(Vertex3s);
- PY_MOD_ADD_METHOD(Vertex3sv);
- PY_MOD_ADD_METHOD(Vertex4d);
- PY_MOD_ADD_METHOD(Vertex4dv);
- PY_MOD_ADD_METHOD(Vertex4f);
- PY_MOD_ADD_METHOD(Vertex4fv);
- PY_MOD_ADD_METHOD(Vertex4i);
- PY_MOD_ADD_METHOD(Vertex4iv);
- PY_MOD_ADD_METHOD(Vertex4s);
- PY_MOD_ADD_METHOD(Vertex4sv);
- }
-
/* GL_VERSION_1_1 */
{
@@ -2101,27 +1466,6 @@ PyObject *BPyInit_bgl(void)
PY_MOD_ADD_METHOD(TexSubImage1D);
PY_MOD_ADD_METHOD(TexSubImage2D);
}
- /* adding in GL_VERSION_1_1 removed from core profile */
- if (use_deprecated == true) {
- PY_MOD_ADD_METHOD(AreTexturesResident);
- PY_MOD_ADD_METHOD(ArrayElement);
- PY_MOD_ADD_METHOD(ColorPointer);
- PY_MOD_ADD_METHOD(DisableClientState);
- PY_MOD_ADD_METHOD(EdgeFlagPointer);
- PY_MOD_ADD_METHOD(EnableClientState);
- PY_MOD_ADD_METHOD(GetPointerv);
- PY_MOD_ADD_METHOD(IndexPointer);
- PY_MOD_ADD_METHOD(Indexub);
- PY_MOD_ADD_METHOD(Indexubv);
- PY_MOD_ADD_METHOD(InterleavedArrays);
- PY_MOD_ADD_METHOD(NormalPointer);
- PY_MOD_ADD_METHOD(PopClientAttrib);
- PY_MOD_ADD_METHOD(PrioritizeTextures);
- PY_MOD_ADD_METHOD(PushClientAttrib);
- PY_MOD_ADD_METHOD(TexCoordPointer);
- PY_MOD_ADD_METHOD(VertexPointer);
- }
-
/* GL_VERSION_1_2 */
{
@@ -2131,7 +1475,6 @@ PyObject *BPyInit_bgl(void)
PY_MOD_ADD_METHOD(TexSubImage3D);
}
-
/* GL_VERSION_1_3 */
{
PY_MOD_ADD_METHOD(ActiveTexture);
@@ -2144,47 +1487,6 @@ PyObject *BPyInit_bgl(void)
PY_MOD_ADD_METHOD(GetCompressedTexImage);
PY_MOD_ADD_METHOD(SampleCoverage);
}
- /* adding in GL_VERSION_1_3 removed from core profile */
- if (use_deprecated == true) {
- PY_MOD_ADD_METHOD(ClientActiveTexture);
- PY_MOD_ADD_METHOD(LoadTransposeMatrixd);
- PY_MOD_ADD_METHOD(LoadTransposeMatrixf);
- PY_MOD_ADD_METHOD(MultTransposeMatrixd);
- PY_MOD_ADD_METHOD(MultTransposeMatrixf);
- PY_MOD_ADD_METHOD(MultiTexCoord1d);
- PY_MOD_ADD_METHOD(MultiTexCoord1dv);
- PY_MOD_ADD_METHOD(MultiTexCoord1f);
- PY_MOD_ADD_METHOD(MultiTexCoord1fv);
- PY_MOD_ADD_METHOD(MultiTexCoord1i);
- PY_MOD_ADD_METHOD(MultiTexCoord1iv);
- PY_MOD_ADD_METHOD(MultiTexCoord1s);
- PY_MOD_ADD_METHOD(MultiTexCoord1sv);
- PY_MOD_ADD_METHOD(MultiTexCoord2d);
- PY_MOD_ADD_METHOD(MultiTexCoord2dv);
- PY_MOD_ADD_METHOD(MultiTexCoord2f);
- PY_MOD_ADD_METHOD(MultiTexCoord2fv);
- PY_MOD_ADD_METHOD(MultiTexCoord2i);
- PY_MOD_ADD_METHOD(MultiTexCoord2iv);
- PY_MOD_ADD_METHOD(MultiTexCoord2s);
- PY_MOD_ADD_METHOD(MultiTexCoord2sv);
- PY_MOD_ADD_METHOD(MultiTexCoord3d);
- PY_MOD_ADD_METHOD(MultiTexCoord3dv);
- PY_MOD_ADD_METHOD(MultiTexCoord3f);
- PY_MOD_ADD_METHOD(MultiTexCoord3fv);
- PY_MOD_ADD_METHOD(MultiTexCoord3i);
- PY_MOD_ADD_METHOD(MultiTexCoord3iv);
- PY_MOD_ADD_METHOD(MultiTexCoord3s);
- PY_MOD_ADD_METHOD(MultiTexCoord3sv);
- PY_MOD_ADD_METHOD(MultiTexCoord4d);
- PY_MOD_ADD_METHOD(MultiTexCoord4dv);
- PY_MOD_ADD_METHOD(MultiTexCoord4f);
- PY_MOD_ADD_METHOD(MultiTexCoord4fv);
- PY_MOD_ADD_METHOD(MultiTexCoord4i);
- PY_MOD_ADD_METHOD(MultiTexCoord4iv);
- PY_MOD_ADD_METHOD(MultiTexCoord4s);
- PY_MOD_ADD_METHOD(MultiTexCoord4sv);
- }
-
/* GL_VERSION_1_4 */
{
@@ -2192,7 +1494,6 @@ PyObject *BPyInit_bgl(void)
PY_MOD_ADD_METHOD(BlendEquation);
}
-
/* GL_VERSION_1_5 */
{
PY_MOD_ADD_METHOD(BeginQuery);
@@ -2216,7 +1517,6 @@ PyObject *BPyInit_bgl(void)
PY_MOD_ADD_METHOD(UnmapBuffer);
}
-
/* GL_VERSION_2_0 */
{
PY_MOD_ADD_METHOD(AttachShader);
@@ -2314,7 +1614,6 @@ PyObject *BPyInit_bgl(void)
PY_MOD_ADD_METHOD(VertexAttribPointer);
}
-
/* GL_VERSION_2_1 */
{
PY_MOD_ADD_METHOD(UniformMatrix2x3fv);
@@ -2325,16 +1624,15 @@ PyObject *BPyInit_bgl(void)
PY_MOD_ADD_METHOD(UniformMatrix4x3fv);
}
-
/* GL_VERSION_3_0 */
{
PY_MOD_ADD_METHOD(BindVertexArray);
PY_MOD_ADD_METHOD(DeleteVertexArrays);
PY_MOD_ADD_METHOD(GenVertexArrays);
+ PY_MOD_ADD_METHOD(GetStringi);
PY_MOD_ADD_METHOD(IsVertexArray);
}
-
/* GL_VERSION_3_1 */
{
PY_MOD_ADD_METHOD(BindBufferBase);
@@ -2349,7 +1647,6 @@ PyObject *BPyInit_bgl(void)
PY_MOD_ADD_METHOD(UniformBlockBinding);
}
-
/* GL_VERSION_3_2 */
{
PY_MOD_ADD_METHOD(FramebufferTexture);
@@ -2361,39 +1658,8 @@ PyObject *BPyInit_bgl(void)
PY_MOD_ADD_METHOD(TexImage3DMultisample);
}
-
/* GL_VERSION_3_3 */
{
- PY_MOD_ADD_METHOD(ColorP3ui);
- PY_MOD_ADD_METHOD(ColorP3uiv);
- PY_MOD_ADD_METHOD(ColorP4ui);
- PY_MOD_ADD_METHOD(ColorP4uiv);
- PY_MOD_ADD_METHOD(MultiTexCoordP1ui);
- PY_MOD_ADD_METHOD(MultiTexCoordP1uiv);
- PY_MOD_ADD_METHOD(MultiTexCoordP2ui);
- PY_MOD_ADD_METHOD(MultiTexCoordP2uiv);
- PY_MOD_ADD_METHOD(MultiTexCoordP3ui);
- PY_MOD_ADD_METHOD(MultiTexCoordP3uiv);
- PY_MOD_ADD_METHOD(MultiTexCoordP4ui);
- PY_MOD_ADD_METHOD(MultiTexCoordP4uiv);
- PY_MOD_ADD_METHOD(NormalP3ui);
- PY_MOD_ADD_METHOD(NormalP3uiv);
- PY_MOD_ADD_METHOD(SecondaryColorP3ui);
- PY_MOD_ADD_METHOD(SecondaryColorP3uiv);
- PY_MOD_ADD_METHOD(TexCoordP1ui);
- PY_MOD_ADD_METHOD(TexCoordP1uiv);
- PY_MOD_ADD_METHOD(TexCoordP2ui);
- PY_MOD_ADD_METHOD(TexCoordP2uiv);
- PY_MOD_ADD_METHOD(TexCoordP3ui);
- PY_MOD_ADD_METHOD(TexCoordP3uiv);
- PY_MOD_ADD_METHOD(TexCoordP4ui);
- PY_MOD_ADD_METHOD(TexCoordP4uiv);
- PY_MOD_ADD_METHOD(VertexP2ui);
- PY_MOD_ADD_METHOD(VertexP2uiv);
- PY_MOD_ADD_METHOD(VertexP3ui);
- PY_MOD_ADD_METHOD(VertexP3uiv);
- PY_MOD_ADD_METHOD(VertexP4ui);
- PY_MOD_ADD_METHOD(VertexP4uiv);
}
#define PY_DICT_ADD_INT(x) py_module_dict_add_int(dict, #x, x)
@@ -2511,8 +1777,6 @@ PyObject *BPyInit_bgl(void)
PY_DICT_ADD_INT(GL_POINT);
PY_DICT_ADD_INT(GL_POINTS);
PY_DICT_ADD_INT(GL_POINT_SIZE);
- PY_DICT_ADD_INT(GL_POINT_SIZE_GRANULARITY);
- PY_DICT_ADD_INT(GL_POINT_SIZE_RANGE);
PY_DICT_ADD_INT(GL_POLYGON_MODE);
PY_DICT_ADD_INT(GL_POLYGON_OFFSET_FACTOR);
PY_DICT_ADD_INT(GL_POLYGON_OFFSET_FILL);
@@ -2602,338 +1866,6 @@ PyObject *BPyInit_bgl(void)
PY_DICT_ADD_INT(GL_XOR);
PY_DICT_ADD_INT(GL_ZERO);
}
- /* adding in GL_VERSION_1_1 removed from core profile */
- if (use_deprecated == true) {
- PY_DICT_ADD_INT(GL_2D);
- PY_DICT_ADD_INT(GL_2_BYTES);
- PY_DICT_ADD_INT(GL_3D);
- PY_DICT_ADD_INT(GL_3D_COLOR);
- PY_DICT_ADD_INT(GL_3D_COLOR_TEXTURE);
- PY_DICT_ADD_INT(GL_3_BYTES);
- PY_DICT_ADD_INT(GL_4D_COLOR_TEXTURE);
- PY_DICT_ADD_INT(GL_4_BYTES);
- PY_DICT_ADD_INT(GL_ACCUM);
- PY_DICT_ADD_INT(GL_ACCUM_ALPHA_BITS);
- PY_DICT_ADD_INT(GL_ACCUM_BLUE_BITS);
- PY_DICT_ADD_INT(GL_ACCUM_BUFFER_BIT);
- PY_DICT_ADD_INT(GL_ACCUM_CLEAR_VALUE);
- PY_DICT_ADD_INT(GL_ACCUM_GREEN_BITS);
- PY_DICT_ADD_INT(GL_ACCUM_RED_BITS);
- PY_DICT_ADD_INT(GL_ADD);
- PY_DICT_ADD_INT(GL_ALL_ATTRIB_BITS);
- PY_DICT_ADD_INT(GL_ALPHA12);
- PY_DICT_ADD_INT(GL_ALPHA16);
- PY_DICT_ADD_INT(GL_ALPHA4);
- PY_DICT_ADD_INT(GL_ALPHA8);
- PY_DICT_ADD_INT(GL_ALPHA_BIAS);
- PY_DICT_ADD_INT(GL_ALPHA_BITS);
- PY_DICT_ADD_INT(GL_ALPHA_SCALE);
- PY_DICT_ADD_INT(GL_ALPHA_TEST);
- PY_DICT_ADD_INT(GL_ALPHA_TEST_FUNC);
- PY_DICT_ADD_INT(GL_ALPHA_TEST_REF);
- PY_DICT_ADD_INT(GL_AMBIENT);
- PY_DICT_ADD_INT(GL_AMBIENT_AND_DIFFUSE);
- PY_DICT_ADD_INT(GL_ATTRIB_STACK_DEPTH);
- PY_DICT_ADD_INT(GL_AUTO_NORMAL);
- PY_DICT_ADD_INT(GL_AUX0);
- PY_DICT_ADD_INT(GL_AUX1);
- PY_DICT_ADD_INT(GL_AUX2);
- PY_DICT_ADD_INT(GL_AUX3);
- PY_DICT_ADD_INT(GL_AUX_BUFFERS);
- PY_DICT_ADD_INT(GL_BITMAP);
- PY_DICT_ADD_INT(GL_BITMAP_TOKEN);
- PY_DICT_ADD_INT(GL_BLUE_BIAS);
- PY_DICT_ADD_INT(GL_BLUE_BITS);
- PY_DICT_ADD_INT(GL_BLUE_SCALE);
- PY_DICT_ADD_INT(GL_C3F_V3F);
- PY_DICT_ADD_INT(GL_C4F_N3F_V3F);
- PY_DICT_ADD_INT(GL_C4UB_V2F);
- PY_DICT_ADD_INT(GL_C4UB_V3F);
- PY_DICT_ADD_INT(GL_CLAMP);
- PY_DICT_ADD_INT(GL_CLIENT_ALL_ATTRIB_BITS);
- PY_DICT_ADD_INT(GL_CLIENT_ATTRIB_STACK_DEPTH);
- PY_DICT_ADD_INT(GL_CLIENT_PIXEL_STORE_BIT);
- PY_DICT_ADD_INT(GL_CLIENT_VERTEX_ARRAY_BIT);
- PY_DICT_ADD_INT(GL_CLIP_PLANE0);
- PY_DICT_ADD_INT(GL_CLIP_PLANE1);
- PY_DICT_ADD_INT(GL_CLIP_PLANE2);
- PY_DICT_ADD_INT(GL_CLIP_PLANE3);
- PY_DICT_ADD_INT(GL_CLIP_PLANE4);
- PY_DICT_ADD_INT(GL_CLIP_PLANE5);
- PY_DICT_ADD_INT(GL_COEFF);
- PY_DICT_ADD_INT(GL_COLOR_ARRAY);
- PY_DICT_ADD_INT(GL_COLOR_ARRAY_POINTER);
- PY_DICT_ADD_INT(GL_COLOR_ARRAY_SIZE);
- PY_DICT_ADD_INT(GL_COLOR_ARRAY_STRIDE);
- PY_DICT_ADD_INT(GL_COLOR_ARRAY_TYPE);
- PY_DICT_ADD_INT(GL_COLOR_INDEX);
- PY_DICT_ADD_INT(GL_COLOR_INDEXES);
- PY_DICT_ADD_INT(GL_COLOR_MATERIAL);
- PY_DICT_ADD_INT(GL_COLOR_MATERIAL_FACE);
- PY_DICT_ADD_INT(GL_COLOR_MATERIAL_PARAMETER);
- PY_DICT_ADD_INT(GL_COMPILE);
- PY_DICT_ADD_INT(GL_COMPILE_AND_EXECUTE);
- PY_DICT_ADD_INT(GL_CONSTANT_ATTENUATION);
- PY_DICT_ADD_INT(GL_COPY_PIXEL_TOKEN);
- PY_DICT_ADD_INT(GL_CURRENT_BIT);
- PY_DICT_ADD_INT(GL_CURRENT_COLOR);
- PY_DICT_ADD_INT(GL_CURRENT_INDEX);
- PY_DICT_ADD_INT(GL_CURRENT_NORMAL);
- PY_DICT_ADD_INT(GL_CURRENT_RASTER_COLOR);
- PY_DICT_ADD_INT(GL_CURRENT_RASTER_DISTANCE);
- PY_DICT_ADD_INT(GL_CURRENT_RASTER_INDEX);
- PY_DICT_ADD_INT(GL_CURRENT_RASTER_POSITION);
- PY_DICT_ADD_INT(GL_CURRENT_RASTER_POSITION_VALID);
- PY_DICT_ADD_INT(GL_CURRENT_RASTER_TEXTURE_COORDS);
- PY_DICT_ADD_INT(GL_CURRENT_TEXTURE_COORDS);
- PY_DICT_ADD_INT(GL_DECAL);
- PY_DICT_ADD_INT(GL_DEPTH_BIAS);
- PY_DICT_ADD_INT(GL_DEPTH_BITS);
- PY_DICT_ADD_INT(GL_DEPTH_SCALE);
- PY_DICT_ADD_INT(GL_DIFFUSE);
- PY_DICT_ADD_INT(GL_DOMAIN);
- PY_DICT_ADD_INT(GL_DRAW_PIXEL_TOKEN);
- PY_DICT_ADD_INT(GL_EDGE_FLAG);
- PY_DICT_ADD_INT(GL_EDGE_FLAG_ARRAY);
- PY_DICT_ADD_INT(GL_EDGE_FLAG_ARRAY_POINTER);
- PY_DICT_ADD_INT(GL_EDGE_FLAG_ARRAY_STRIDE);
- PY_DICT_ADD_INT(GL_EMISSION);
- PY_DICT_ADD_INT(GL_ENABLE_BIT);
- PY_DICT_ADD_INT(GL_EVAL_BIT);
- PY_DICT_ADD_INT(GL_EXP);
- PY_DICT_ADD_INT(GL_EXP2);
- PY_DICT_ADD_INT(GL_EYE_LINEAR);
- PY_DICT_ADD_INT(GL_EYE_PLANE);
- PY_DICT_ADD_INT(GL_FEEDBACK);
- PY_DICT_ADD_INT(GL_FEEDBACK_BUFFER_POINTER);
- PY_DICT_ADD_INT(GL_FEEDBACK_BUFFER_SIZE);
- PY_DICT_ADD_INT(GL_FEEDBACK_BUFFER_TYPE);
- PY_DICT_ADD_INT(GL_FLAT);
- PY_DICT_ADD_INT(GL_FOG);
- PY_DICT_ADD_INT(GL_FOG_BIT);
- PY_DICT_ADD_INT(GL_FOG_COLOR);
- PY_DICT_ADD_INT(GL_FOG_DENSITY);
- PY_DICT_ADD_INT(GL_FOG_END);
- PY_DICT_ADD_INT(GL_FOG_HINT);
- PY_DICT_ADD_INT(GL_FOG_INDEX);
- PY_DICT_ADD_INT(GL_FOG_MODE);
- PY_DICT_ADD_INT(GL_FOG_START);
- PY_DICT_ADD_INT(GL_GREEN_BIAS);
- PY_DICT_ADD_INT(GL_GREEN_BITS);
- PY_DICT_ADD_INT(GL_GREEN_SCALE);
- PY_DICT_ADD_INT(GL_HINT_BIT);
- PY_DICT_ADD_INT(GL_INDEX_ARRAY);
- PY_DICT_ADD_INT(GL_INDEX_ARRAY_POINTER);
- PY_DICT_ADD_INT(GL_INDEX_ARRAY_STRIDE);
- PY_DICT_ADD_INT(GL_INDEX_ARRAY_TYPE);
- PY_DICT_ADD_INT(GL_INDEX_BITS);
- PY_DICT_ADD_INT(GL_INDEX_CLEAR_VALUE);
- PY_DICT_ADD_INT(GL_INDEX_LOGIC_OP);
- PY_DICT_ADD_INT(GL_INDEX_MODE);
- PY_DICT_ADD_INT(GL_INDEX_OFFSET);
- PY_DICT_ADD_INT(GL_INDEX_SHIFT);
- PY_DICT_ADD_INT(GL_INDEX_WRITEMASK);
- PY_DICT_ADD_INT(GL_INTENSITY);
- PY_DICT_ADD_INT(GL_INTENSITY12);
- PY_DICT_ADD_INT(GL_INTENSITY16);
- PY_DICT_ADD_INT(GL_INTENSITY4);
- PY_DICT_ADD_INT(GL_INTENSITY8);
- PY_DICT_ADD_INT(GL_LIGHT0);
- PY_DICT_ADD_INT(GL_LIGHT1);
- PY_DICT_ADD_INT(GL_LIGHT2);
- PY_DICT_ADD_INT(GL_LIGHT3);
- PY_DICT_ADD_INT(GL_LIGHT4);
- PY_DICT_ADD_INT(GL_LIGHT5);
- PY_DICT_ADD_INT(GL_LIGHT6);
- PY_DICT_ADD_INT(GL_LIGHT7);
- PY_DICT_ADD_INT(GL_LIGHTING);
- PY_DICT_ADD_INT(GL_LIGHTING_BIT);
- PY_DICT_ADD_INT(GL_LIGHT_MODEL_AMBIENT);
- PY_DICT_ADD_INT(GL_LIGHT_MODEL_LOCAL_VIEWER);
- PY_DICT_ADD_INT(GL_LIGHT_MODEL_TWO_SIDE);
- PY_DICT_ADD_INT(GL_LINEAR_ATTENUATION);
- PY_DICT_ADD_INT(GL_LINE_BIT);
- PY_DICT_ADD_INT(GL_LINE_RESET_TOKEN);
- PY_DICT_ADD_INT(GL_LINE_STIPPLE);
- PY_DICT_ADD_INT(GL_LINE_STIPPLE_PATTERN);
- PY_DICT_ADD_INT(GL_LINE_STIPPLE_REPEAT);
- PY_DICT_ADD_INT(GL_LINE_TOKEN);
- PY_DICT_ADD_INT(GL_LIST_BASE);
- PY_DICT_ADD_INT(GL_LIST_BIT);
- PY_DICT_ADD_INT(GL_LIST_INDEX);
- PY_DICT_ADD_INT(GL_LIST_MODE);
- PY_DICT_ADD_INT(GL_LOAD);
- PY_DICT_ADD_INT(GL_LOGIC_OP);
- PY_DICT_ADD_INT(GL_LUMINANCE);
- PY_DICT_ADD_INT(GL_LUMINANCE12);
- PY_DICT_ADD_INT(GL_LUMINANCE12_ALPHA12);
- PY_DICT_ADD_INT(GL_LUMINANCE12_ALPHA4);
- PY_DICT_ADD_INT(GL_LUMINANCE16);
- PY_DICT_ADD_INT(GL_LUMINANCE16_ALPHA16);
- PY_DICT_ADD_INT(GL_LUMINANCE4);
- PY_DICT_ADD_INT(GL_LUMINANCE4_ALPHA4);
- PY_DICT_ADD_INT(GL_LUMINANCE6_ALPHA2);
- PY_DICT_ADD_INT(GL_LUMINANCE8);
- PY_DICT_ADD_INT(GL_LUMINANCE8_ALPHA8);
- PY_DICT_ADD_INT(GL_LUMINANCE_ALPHA);
- PY_DICT_ADD_INT(GL_MAP1_COLOR_4);
- PY_DICT_ADD_INT(GL_MAP1_GRID_DOMAIN);
- PY_DICT_ADD_INT(GL_MAP1_GRID_SEGMENTS);
- PY_DICT_ADD_INT(GL_MAP1_INDEX);
- PY_DICT_ADD_INT(GL_MAP1_NORMAL);
- PY_DICT_ADD_INT(GL_MAP1_TEXTURE_COORD_1);
- PY_DICT_ADD_INT(GL_MAP1_TEXTURE_COORD_2);
- PY_DICT_ADD_INT(GL_MAP1_TEXTURE_COORD_3);
- PY_DICT_ADD_INT(GL_MAP1_TEXTURE_COORD_4);
- PY_DICT_ADD_INT(GL_MAP1_VERTEX_3);
- PY_DICT_ADD_INT(GL_MAP1_VERTEX_4);
- PY_DICT_ADD_INT(GL_MAP2_COLOR_4);
- PY_DICT_ADD_INT(GL_MAP2_GRID_DOMAIN);
- PY_DICT_ADD_INT(GL_MAP2_GRID_SEGMENTS);
- PY_DICT_ADD_INT(GL_MAP2_INDEX);
- PY_DICT_ADD_INT(GL_MAP2_NORMAL);
- PY_DICT_ADD_INT(GL_MAP2_TEXTURE_COORD_1);
- PY_DICT_ADD_INT(GL_MAP2_TEXTURE_COORD_2);
- PY_DICT_ADD_INT(GL_MAP2_TEXTURE_COORD_3);
- PY_DICT_ADD_INT(GL_MAP2_TEXTURE_COORD_4);
- PY_DICT_ADD_INT(GL_MAP2_VERTEX_3);
- PY_DICT_ADD_INT(GL_MAP2_VERTEX_4);
- PY_DICT_ADD_INT(GL_MAP_COLOR);
- PY_DICT_ADD_INT(GL_MAP_STENCIL);
- PY_DICT_ADD_INT(GL_MATRIX_MODE);
- PY_DICT_ADD_INT(GL_MAX_ATTRIB_STACK_DEPTH);
- PY_DICT_ADD_INT(GL_MAX_CLIENT_ATTRIB_STACK_DEPTH);
- PY_DICT_ADD_INT(GL_MAX_CLIP_PLANES);
- PY_DICT_ADD_INT(GL_MAX_EVAL_ORDER);
- PY_DICT_ADD_INT(GL_MAX_LIGHTS);
- PY_DICT_ADD_INT(GL_MAX_LIST_NESTING);
- PY_DICT_ADD_INT(GL_MAX_MODELVIEW_STACK_DEPTH);
- PY_DICT_ADD_INT(GL_MAX_NAME_STACK_DEPTH);
- PY_DICT_ADD_INT(GL_MAX_PIXEL_MAP_TABLE);
- PY_DICT_ADD_INT(GL_MAX_PROJECTION_STACK_DEPTH);
- PY_DICT_ADD_INT(GL_MAX_TEXTURE_STACK_DEPTH);
- PY_DICT_ADD_INT(GL_MODELVIEW);
- PY_DICT_ADD_INT(GL_MODELVIEW_MATRIX);
- PY_DICT_ADD_INT(GL_MODELVIEW_STACK_DEPTH);
- PY_DICT_ADD_INT(GL_MODULATE);
- PY_DICT_ADD_INT(GL_MULT);
- PY_DICT_ADD_INT(GL_N3F_V3F);
- PY_DICT_ADD_INT(GL_NAME_STACK_DEPTH);
- PY_DICT_ADD_INT(GL_NORMALIZE);
- PY_DICT_ADD_INT(GL_NORMAL_ARRAY);
- PY_DICT_ADD_INT(GL_NORMAL_ARRAY_POINTER);
- PY_DICT_ADD_INT(GL_NORMAL_ARRAY_STRIDE);
- PY_DICT_ADD_INT(GL_NORMAL_ARRAY_TYPE);
- PY_DICT_ADD_INT(GL_OBJECT_LINEAR);
- PY_DICT_ADD_INT(GL_OBJECT_PLANE);
- PY_DICT_ADD_INT(GL_ORDER);
- PY_DICT_ADD_INT(GL_PASS_THROUGH_TOKEN);
- PY_DICT_ADD_INT(GL_PERSPECTIVE_CORRECTION_HINT);
- PY_DICT_ADD_INT(GL_PIXEL_MAP_A_TO_A);
- PY_DICT_ADD_INT(GL_PIXEL_MAP_A_TO_A_SIZE);
- PY_DICT_ADD_INT(GL_PIXEL_MAP_B_TO_B);
- PY_DICT_ADD_INT(GL_PIXEL_MAP_B_TO_B_SIZE);
- PY_DICT_ADD_INT(GL_PIXEL_MAP_G_TO_G);
- PY_DICT_ADD_INT(GL_PIXEL_MAP_G_TO_G_SIZE);
- PY_DICT_ADD_INT(GL_PIXEL_MAP_I_TO_A);
- PY_DICT_ADD_INT(GL_PIXEL_MAP_I_TO_A_SIZE);
- PY_DICT_ADD_INT(GL_PIXEL_MAP_I_TO_B);
- PY_DICT_ADD_INT(GL_PIXEL_MAP_I_TO_B_SIZE);
- PY_DICT_ADD_INT(GL_PIXEL_MAP_I_TO_G);
- PY_DICT_ADD_INT(GL_PIXEL_MAP_I_TO_G_SIZE);
- PY_DICT_ADD_INT(GL_PIXEL_MAP_I_TO_I);
- PY_DICT_ADD_INT(GL_PIXEL_MAP_I_TO_I_SIZE);
- PY_DICT_ADD_INT(GL_PIXEL_MAP_I_TO_R);
- PY_DICT_ADD_INT(GL_PIXEL_MAP_I_TO_R_SIZE);
- PY_DICT_ADD_INT(GL_PIXEL_MAP_R_TO_R);
- PY_DICT_ADD_INT(GL_PIXEL_MAP_R_TO_R_SIZE);
- PY_DICT_ADD_INT(GL_PIXEL_MAP_S_TO_S);
- PY_DICT_ADD_INT(GL_PIXEL_MAP_S_TO_S_SIZE);
- PY_DICT_ADD_INT(GL_PIXEL_MODE_BIT);
- PY_DICT_ADD_INT(GL_POINT_BIT);
- PY_DICT_ADD_INT(GL_POINT_SMOOTH);
- PY_DICT_ADD_INT(GL_POINT_SMOOTH_HINT);
- PY_DICT_ADD_INT(GL_POINT_TOKEN);
- PY_DICT_ADD_INT(GL_POLYGON);
- PY_DICT_ADD_INT(GL_POLYGON_BIT);
- PY_DICT_ADD_INT(GL_POLYGON_STIPPLE);
- PY_DICT_ADD_INT(GL_POLYGON_STIPPLE_BIT);
- PY_DICT_ADD_INT(GL_POLYGON_TOKEN);
- PY_DICT_ADD_INT(GL_POSITION);
- PY_DICT_ADD_INT(GL_PROJECTION);
- PY_DICT_ADD_INT(GL_PROJECTION_MATRIX);
- PY_DICT_ADD_INT(GL_PROJECTION_STACK_DEPTH);
- PY_DICT_ADD_INT(GL_Q);
- PY_DICT_ADD_INT(GL_QUADRATIC_ATTENUATION);
- PY_DICT_ADD_INT(GL_QUADS);
- PY_DICT_ADD_INT(GL_QUAD_STRIP);
- PY_DICT_ADD_INT(GL_R);
- PY_DICT_ADD_INT(GL_RED_BIAS);
- PY_DICT_ADD_INT(GL_RED_BITS);
- PY_DICT_ADD_INT(GL_RED_SCALE);
- PY_DICT_ADD_INT(GL_RENDER);
- PY_DICT_ADD_INT(GL_RENDER_MODE);
- PY_DICT_ADD_INT(GL_RETURN);
- PY_DICT_ADD_INT(GL_RGBA_MODE);
- PY_DICT_ADD_INT(GL_S);
- PY_DICT_ADD_INT(GL_SCISSOR_BIT);
- PY_DICT_ADD_INT(GL_SELECT);
- PY_DICT_ADD_INT(GL_SELECTION_BUFFER_POINTER);
- PY_DICT_ADD_INT(GL_SELECTION_BUFFER_SIZE);
- PY_DICT_ADD_INT(GL_SHADE_MODEL);
- PY_DICT_ADD_INT(GL_SHININESS);
- PY_DICT_ADD_INT(GL_SMOOTH);
- PY_DICT_ADD_INT(GL_SPECULAR);
- PY_DICT_ADD_INT(GL_SPHERE_MAP);
- PY_DICT_ADD_INT(GL_SPOT_CUTOFF);
- PY_DICT_ADD_INT(GL_SPOT_DIRECTION);
- PY_DICT_ADD_INT(GL_SPOT_EXPONENT);
- PY_DICT_ADD_INT(GL_STACK_OVERFLOW);
- PY_DICT_ADD_INT(GL_STACK_UNDERFLOW);
- PY_DICT_ADD_INT(GL_STENCIL_BITS);
- PY_DICT_ADD_INT(GL_T);
- PY_DICT_ADD_INT(GL_T2F_C3F_V3F);
- PY_DICT_ADD_INT(GL_T2F_C4F_N3F_V3F);
- PY_DICT_ADD_INT(GL_T2F_C4UB_V3F);
- PY_DICT_ADD_INT(GL_T2F_N3F_V3F);
- PY_DICT_ADD_INT(GL_T2F_V3F);
- PY_DICT_ADD_INT(GL_T4F_C4F_N3F_V4F);
- PY_DICT_ADD_INT(GL_T4F_V4F);
- PY_DICT_ADD_INT(GL_TEXTURE_BIT);
- PY_DICT_ADD_INT(GL_TEXTURE_BORDER);
- PY_DICT_ADD_INT(GL_TEXTURE_COMPONENTS);
- PY_DICT_ADD_INT(GL_TEXTURE_COORD_ARRAY);
- PY_DICT_ADD_INT(GL_TEXTURE_COORD_ARRAY_POINTER);
- PY_DICT_ADD_INT(GL_TEXTURE_COORD_ARRAY_SIZE);
- PY_DICT_ADD_INT(GL_TEXTURE_COORD_ARRAY_STRIDE);
- PY_DICT_ADD_INT(GL_TEXTURE_COORD_ARRAY_TYPE);
- PY_DICT_ADD_INT(GL_TEXTURE_ENV);
- PY_DICT_ADD_INT(GL_TEXTURE_ENV_COLOR);
- PY_DICT_ADD_INT(GL_TEXTURE_ENV_MODE);
- PY_DICT_ADD_INT(GL_TEXTURE_GEN_MODE);
- PY_DICT_ADD_INT(GL_TEXTURE_GEN_Q);
- PY_DICT_ADD_INT(GL_TEXTURE_GEN_R);
- PY_DICT_ADD_INT(GL_TEXTURE_GEN_S);
- PY_DICT_ADD_INT(GL_TEXTURE_GEN_T);
- PY_DICT_ADD_INT(GL_TEXTURE_INTENSITY_SIZE);
- PY_DICT_ADD_INT(GL_TEXTURE_LUMINANCE_SIZE);
- PY_DICT_ADD_INT(GL_TEXTURE_MATRIX);
- PY_DICT_ADD_INT(GL_TEXTURE_PRIORITY);
- PY_DICT_ADD_INT(GL_TEXTURE_RESIDENT);
- PY_DICT_ADD_INT(GL_TEXTURE_STACK_DEPTH);
- PY_DICT_ADD_INT(GL_TRANSFORM_BIT);
- PY_DICT_ADD_INT(GL_V2F);
- PY_DICT_ADD_INT(GL_V3F);
- PY_DICT_ADD_INT(GL_VERTEX_ARRAY);
- PY_DICT_ADD_INT(GL_VERTEX_ARRAY_POINTER);
- PY_DICT_ADD_INT(GL_VERTEX_ARRAY_SIZE);
- PY_DICT_ADD_INT(GL_VERTEX_ARRAY_STRIDE);
- PY_DICT_ADD_INT(GL_VERTEX_ARRAY_TYPE);
- PY_DICT_ADD_INT(GL_VIEWPORT_BIT);
- PY_DICT_ADD_INT(GL_ZOOM_X);
- PY_DICT_ADD_INT(GL_ZOOM_Y);
- }
-
/* GL_VERSION_1_2 */
{
@@ -2974,15 +1906,6 @@ PyObject *BPyInit_bgl(void)
PY_DICT_ADD_INT(GL_UNSIGNED_SHORT_5_6_5);
PY_DICT_ADD_INT(GL_UNSIGNED_SHORT_5_6_5_REV);
}
- /* adding in GL_VERSION_1_2 removed from core profile */
- if (use_deprecated == true) {
- PY_DICT_ADD_INT(GL_ALIASED_POINT_SIZE_RANGE);
- PY_DICT_ADD_INT(GL_LIGHT_MODEL_COLOR_CONTROL);
- PY_DICT_ADD_INT(GL_RESCALE_NORMAL);
- PY_DICT_ADD_INT(GL_SEPARATE_SPECULAR_COLOR);
- PY_DICT_ADD_INT(GL_SINGLE_COLOR);
- }
-
/* GL_VERSION_1_3 */
{
@@ -3046,47 +1969,6 @@ PyObject *BPyInit_bgl(void)
PY_DICT_ADD_INT(GL_TEXTURE_CUBE_MAP_POSITIVE_Y);
PY_DICT_ADD_INT(GL_TEXTURE_CUBE_MAP_POSITIVE_Z);
}
- /* adding in GL_VERSION_1_3 removed from core profile */
- if (use_deprecated == true) {
- PY_DICT_ADD_INT(GL_ADD_SIGNED);
- PY_DICT_ADD_INT(GL_CLIENT_ACTIVE_TEXTURE);
- PY_DICT_ADD_INT(GL_COMBINE);
- PY_DICT_ADD_INT(GL_COMBINE_ALPHA);
- PY_DICT_ADD_INT(GL_COMBINE_RGB);
- PY_DICT_ADD_INT(GL_COMPRESSED_ALPHA);
- PY_DICT_ADD_INT(GL_COMPRESSED_INTENSITY);
- PY_DICT_ADD_INT(GL_COMPRESSED_LUMINANCE);
- PY_DICT_ADD_INT(GL_COMPRESSED_LUMINANCE_ALPHA);
- PY_DICT_ADD_INT(GL_CONSTANT);
- PY_DICT_ADD_INT(GL_DOT3_RGB);
- PY_DICT_ADD_INT(GL_DOT3_RGBA);
- PY_DICT_ADD_INT(GL_INTERPOLATE);
- PY_DICT_ADD_INT(GL_MAX_TEXTURE_UNITS);
- PY_DICT_ADD_INT(GL_MULTISAMPLE_BIT);
- PY_DICT_ADD_INT(GL_NORMAL_MAP);
- PY_DICT_ADD_INT(GL_OPERAND0_ALPHA);
- PY_DICT_ADD_INT(GL_OPERAND0_RGB);
- PY_DICT_ADD_INT(GL_OPERAND1_ALPHA);
- PY_DICT_ADD_INT(GL_OPERAND1_RGB);
- PY_DICT_ADD_INT(GL_OPERAND2_ALPHA);
- PY_DICT_ADD_INT(GL_OPERAND2_RGB);
- PY_DICT_ADD_INT(GL_PREVIOUS);
- PY_DICT_ADD_INT(GL_PRIMARY_COLOR);
- PY_DICT_ADD_INT(GL_REFLECTION_MAP);
- PY_DICT_ADD_INT(GL_RGB_SCALE);
- PY_DICT_ADD_INT(GL_SOURCE0_ALPHA);
- PY_DICT_ADD_INT(GL_SOURCE0_RGB);
- PY_DICT_ADD_INT(GL_SOURCE1_ALPHA);
- PY_DICT_ADD_INT(GL_SOURCE1_RGB);
- PY_DICT_ADD_INT(GL_SOURCE2_ALPHA);
- PY_DICT_ADD_INT(GL_SOURCE2_RGB);
- PY_DICT_ADD_INT(GL_SUBTRACT);
- PY_DICT_ADD_INT(GL_TRANSPOSE_COLOR_MATRIX);
- PY_DICT_ADD_INT(GL_TRANSPOSE_MODELVIEW_MATRIX);
- PY_DICT_ADD_INT(GL_TRANSPOSE_PROJECTION_MATRIX);
- PY_DICT_ADD_INT(GL_TRANSPOSE_TEXTURE_MATRIX);
- }
-
/* GL_VERSION_1_4 */
{
@@ -3116,33 +1998,6 @@ PyObject *BPyInit_bgl(void)
PY_DICT_ADD_INT(GL_TEXTURE_DEPTH_SIZE);
PY_DICT_ADD_INT(GL_TEXTURE_LOD_BIAS);
}
- /* adding in GL_VERSION_1_4 removed from core profile */
- if (use_deprecated == true) {
- PY_DICT_ADD_INT(GL_COLOR_SUM);
- PY_DICT_ADD_INT(GL_COMPARE_R_TO_TEXTURE);
- PY_DICT_ADD_INT(GL_CURRENT_FOG_COORDINATE);
- PY_DICT_ADD_INT(GL_CURRENT_SECONDARY_COLOR);
- PY_DICT_ADD_INT(GL_DEPTH_TEXTURE_MODE);
- PY_DICT_ADD_INT(GL_FOG_COORDINATE);
- PY_DICT_ADD_INT(GL_FOG_COORDINATE_ARRAY);
- PY_DICT_ADD_INT(GL_FOG_COORDINATE_ARRAY_POINTER);
- PY_DICT_ADD_INT(GL_FOG_COORDINATE_ARRAY_STRIDE);
- PY_DICT_ADD_INT(GL_FOG_COORDINATE_ARRAY_TYPE);
- PY_DICT_ADD_INT(GL_FOG_COORDINATE_SOURCE);
- PY_DICT_ADD_INT(GL_FRAGMENT_DEPTH);
- PY_DICT_ADD_INT(GL_GENERATE_MIPMAP);
- PY_DICT_ADD_INT(GL_GENERATE_MIPMAP_HINT);
- PY_DICT_ADD_INT(GL_POINT_DISTANCE_ATTENUATION);
- PY_DICT_ADD_INT(GL_POINT_SIZE_MAX);
- PY_DICT_ADD_INT(GL_POINT_SIZE_MIN);
- PY_DICT_ADD_INT(GL_SECONDARY_COLOR_ARRAY);
- PY_DICT_ADD_INT(GL_SECONDARY_COLOR_ARRAY_POINTER);
- PY_DICT_ADD_INT(GL_SECONDARY_COLOR_ARRAY_SIZE);
- PY_DICT_ADD_INT(GL_SECONDARY_COLOR_ARRAY_STRIDE);
- PY_DICT_ADD_INT(GL_SECONDARY_COLOR_ARRAY_TYPE);
- PY_DICT_ADD_INT(GL_TEXTURE_FILTER_CONTROL);
- }
-
/* GL_VERSION_1_5 */
{
@@ -3165,7 +2020,6 @@ PyObject *BPyInit_bgl(void)
PY_DICT_ADD_INT(GL_READ_ONLY);
PY_DICT_ADD_INT(GL_READ_WRITE);
PY_DICT_ADD_INT(GL_SAMPLES_PASSED);
- PY_DICT_ADD_INT(GL_SRC1_ALPHA);
PY_DICT_ADD_INT(GL_STATIC_COPY);
PY_DICT_ADD_INT(GL_STATIC_DRAW);
PY_DICT_ADD_INT(GL_STATIC_READ);
@@ -3175,32 +2029,6 @@ PyObject *BPyInit_bgl(void)
PY_DICT_ADD_INT(GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING);
PY_DICT_ADD_INT(GL_WRITE_ONLY);
}
- /* adding in GL_VERSION_1_5 removed from core profile */
- if (use_deprecated == true) {
- PY_DICT_ADD_INT(GL_COLOR_ARRAY_BUFFER_BINDING);
- PY_DICT_ADD_INT(GL_CURRENT_FOG_COORD);
- PY_DICT_ADD_INT(GL_EDGE_FLAG_ARRAY_BUFFER_BINDING);
- PY_DICT_ADD_INT(GL_FOG_COORD);
- PY_DICT_ADD_INT(GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING);
- PY_DICT_ADD_INT(GL_FOG_COORD_ARRAY);
- PY_DICT_ADD_INT(GL_FOG_COORD_ARRAY_BUFFER_BINDING);
- PY_DICT_ADD_INT(GL_FOG_COORD_ARRAY_POINTER);
- PY_DICT_ADD_INT(GL_FOG_COORD_ARRAY_STRIDE);
- PY_DICT_ADD_INT(GL_FOG_COORD_ARRAY_TYPE);
- PY_DICT_ADD_INT(GL_FOG_COORD_SRC);
- PY_DICT_ADD_INT(GL_INDEX_ARRAY_BUFFER_BINDING);
- PY_DICT_ADD_INT(GL_NORMAL_ARRAY_BUFFER_BINDING);
- PY_DICT_ADD_INT(GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING);
- PY_DICT_ADD_INT(GL_SRC0_ALPHA);
- PY_DICT_ADD_INT(GL_SRC0_RGB);
- PY_DICT_ADD_INT(GL_SRC1_RGB);
- PY_DICT_ADD_INT(GL_SRC2_ALPHA);
- PY_DICT_ADD_INT(GL_SRC2_RGB);
- PY_DICT_ADD_INT(GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING);
- PY_DICT_ADD_INT(GL_VERTEX_ARRAY_BUFFER_BINDING);
- PY_DICT_ADD_INT(GL_WEIGHT_ARRAY_BUFFER_BINDING);
- }
-
/* GL_VERSION_2_0 */
{
@@ -3285,14 +2113,6 @@ PyObject *BPyInit_bgl(void)
PY_DICT_ADD_INT(GL_VERTEX_PROGRAM_POINT_SIZE);
PY_DICT_ADD_INT(GL_VERTEX_SHADER);
}
- /* adding in GL_VERSION_2_0 removed from core profile */
- if (use_deprecated == true) {
- PY_DICT_ADD_INT(GL_COORD_REPLACE);
- PY_DICT_ADD_INT(GL_MAX_TEXTURE_COORDS);
- PY_DICT_ADD_INT(GL_POINT_SPRITE);
- PY_DICT_ADD_INT(GL_VERTEX_PROGRAM_TWO_SIDE);
- }
-
/* GL_VERSION_2_1 */
{
@@ -3313,16 +2133,6 @@ PyObject *BPyInit_bgl(void)
PY_DICT_ADD_INT(GL_SRGB8_ALPHA8);
PY_DICT_ADD_INT(GL_SRGB_ALPHA);
}
- /* adding in GL_VERSION_2_1 removed from core profile */
- if (use_deprecated == true) {
- PY_DICT_ADD_INT(GL_COMPRESSED_SLUMINANCE);
- PY_DICT_ADD_INT(GL_COMPRESSED_SLUMINANCE_ALPHA);
- PY_DICT_ADD_INT(GL_CURRENT_RASTER_SECONDARY_COLOR);
- PY_DICT_ADD_INT(GL_SLUMINANCE);
- PY_DICT_ADD_INT(GL_SLUMINANCE8);
- PY_DICT_ADD_INT(GL_SLUMINANCE8_ALPHA8);
- PY_DICT_ADD_INT(GL_SLUMINANCE_ALPHA);
- }
/* GL_VERSION_3_0 */
{
@@ -3563,14 +2373,6 @@ PyObject *BPyInit_bgl(void)
PY_DICT_ADD_INT(GL_VERTEX_ARRAY_BINDING);
PY_DICT_ADD_INT(GL_VERTEX_ATTRIB_ARRAY_INTEGER);
}
- /* adding in GL_VERSION_3_0 removed from core profile */
- if (use_deprecated == true) {
- PY_DICT_ADD_INT(GL_ALPHA_INTEGER);
- PY_DICT_ADD_INT(GL_CLAMP_FRAGMENT_COLOR);
- PY_DICT_ADD_INT(GL_CLAMP_VERTEX_COLOR);
- PY_DICT_ADD_INT(GL_TEXTURE_INTENSITY_TYPE);
- PY_DICT_ADD_INT(GL_TEXTURE_LUMINANCE_TYPE);
- }
/* GL_VERSION_3_1 */
{
@@ -3637,7 +2439,6 @@ PyObject *BPyInit_bgl(void)
PY_DICT_ADD_INT(GL_UNSIGNED_INT_SAMPLER_BUFFER);
}
-
/* GL_VERSION_3_2 */
{
PY_DICT_ADD_INT(GL_ALREADY_SIGNALED);
@@ -3743,4 +2544,4 @@ static PyObject *Method_ShaderSource(PyObject *UNUSED(self), PyObject *args)
}
-/** \} */ \ No newline at end of file
+/** \} */
diff --git a/source/blender/python/generic/blf_py_api.c b/source/blender/python/generic/blf_py_api.c
index 69f1e297b43..02bd1fdbe39 100644
--- a/source/blender/python/generic/blf_py_api.c
+++ b/source/blender/python/generic/blf_py_api.c
@@ -114,6 +114,7 @@ static PyObject *py_blf_aspect(PyObject *UNUSED(self), PyObject *args)
}
+#if BLF_BLUR_ENABLE
PyDoc_STRVAR(py_blf_blur_doc,
".. function:: blur(fontid, radius)\n"
"\n"
@@ -135,6 +136,7 @@ static PyObject *py_blf_blur(PyObject *UNUSED(self), PyObject *args)
Py_RETURN_NONE;
}
+#endif
PyDoc_STRVAR(py_blf_draw_doc,
@@ -418,7 +420,9 @@ static PyObject *py_blf_unload(PyObject *UNUSED(self), PyObject *args)
/*----------------------------MODULE INIT-------------------------*/
static PyMethodDef BLF_methods[] = {
{"aspect", (PyCFunction) py_blf_aspect, METH_VARARGS, py_blf_aspect_doc},
+#if BLF_BLUR_ENABLE
{"blur", (PyCFunction) py_blf_blur, METH_VARARGS, py_blf_blur_doc},
+#endif
{"clipping", (PyCFunction) py_blf_clipping, METH_VARARGS, py_blf_clipping_doc},
{"word_wrap", (PyCFunction) py_blf_word_wrap, METH_VARARGS, py_blf_word_wrap_doc},
{"disable", (PyCFunction) py_blf_disable, METH_VARARGS, py_blf_disable_doc},
diff --git a/source/blender/python/intern/CMakeLists.txt b/source/blender/python/intern/CMakeLists.txt
index 2b6dc54dad4..a71478cdb15 100644
--- a/source/blender/python/intern/CMakeLists.txt
+++ b/source/blender/python/intern/CMakeLists.txt
@@ -64,6 +64,8 @@ set(SRC
bpy_intern_string.c
bpy_library_load.c
bpy_library_write.c
+ bpy_manipulator_wrap.c
+ bpy_msgbus.c
bpy_operator.c
bpy_operator_wrap.c
bpy_path.c
@@ -74,11 +76,14 @@ set(SRC
bpy_rna_callback.c
bpy_rna_driver.c
bpy_rna_id_collection.c
+ bpy_rna_manipulator.c
bpy_traceback.c
bpy_utils_previews.c
bpy_utils_units.c
gpu.c
gpu_offscreen.c
+ gpu_py_matrix.c
+ gpu_py_select.c
stubs.c
bpy.h
@@ -97,6 +102,8 @@ set(SRC
bpy_driver.h
bpy_intern_string.h
bpy_library.h
+ bpy_manipulator_wrap.h
+ bpy_msgbus.h
bpy_operator.h
bpy_operator_wrap.h
bpy_path.h
@@ -106,6 +113,7 @@ set(SRC
bpy_rna_callback.h
bpy_rna_driver.h
bpy_rna_id_collection.h
+ bpy_rna_manipulator.h
bpy_traceback.h
bpy_utils_previews.h
bpy_utils_units.h
diff --git a/source/blender/python/intern/bpy.c b/source/blender/python/intern/bpy.c
index 7150cc65942..0b791b6acaa 100644
--- a/source/blender/python/intern/bpy.c
+++ b/source/blender/python/intern/bpy.c
@@ -46,6 +46,7 @@
#include "bpy_rna.h"
#include "bpy_app.h"
#include "bpy_rna_id_collection.h"
+#include "bpy_rna_manipulator.h"
#include "bpy_props.h"
#include "bpy_library.h"
#include "bpy_operator.h"
@@ -57,6 +58,7 @@
/* external util modules */
#include "../generic/idprop_py_api.h"
+#include "bpy_msgbus.h"
#ifdef WITH_FREESTYLE
# include "BPy_Freestyle.h"
@@ -338,6 +340,8 @@ void BPy_init_modules(void)
BPY_rna_id_collection_module(mod);
+ BPY_rna_manipulator_module(mod);
+
bpy_import_test("bpy_types");
PyModule_AddObject(mod, "data", BPY_rna_module()); /* imports bpy_types by running this */
bpy_import_test("bpy_types");
@@ -347,6 +351,7 @@ void BPy_init_modules(void)
PyModule_AddObject(mod, "app", BPY_app_struct());
PyModule_AddObject(mod, "_utils_units", BPY_utils_units());
PyModule_AddObject(mod, "_utils_previews", BPY_utils_previews_module());
+ PyModule_AddObject(mod, "msgbus", BPY_msgbus_module());
/* bpy context */
RNA_pointer_create(NULL, &RNA_Context, (void *)BPy_GetContext(), &ctx_ptr);
diff --git a/source/blender/python/intern/bpy_app_handlers.c b/source/blender/python/intern/bpy_app_handlers.c
index 90aa22de5bf..5a309339e17 100644
--- a/source/blender/python/intern/bpy_app_handlers.c
+++ b/source/blender/python/intern/bpy_app_handlers.c
@@ -59,12 +59,6 @@ static PyStructSequence_Field app_cb_info_fields[] = {
{(char *)"load_post", (char *)"on loading a new blend file (after)"},
{(char *)"save_pre", (char *)"on saving a blend file (before)"},
{(char *)"save_post", (char *)"on saving a blend file (after)"},
- {(char *)"scene_update_pre", (char *)"on every scene data update. Does not imply that anything changed in the "
- "scene, just that the dependency graph is about to be reevaluated, and the "
- "scene is about to be updated by Blender's animation system."},
- {(char *)"scene_update_post", (char *)"on every scene data update. Does not imply that anything changed in the "
- "scene, just that the dependency graph was reevaluated, and the scene was "
- "possibly updated by Blender's animation system."},
{(char *)"game_pre", (char *)"on starting the game engine"},
{(char *)"game_post", (char *)"on ending the game engine"},
{(char *)"version_update", (char *)"on ending the versioning code"},
diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c
index ae8e35ae3fc..11a233461d8 100644
--- a/source/blender/python/intern/bpy_interface.c
+++ b/source/blender/python/intern/bpy_interface.c
@@ -72,6 +72,7 @@
#include "../generic/bgl.h"
#include "../generic/blf_py_api.h"
#include "../generic/idprop_py_api.h"
+#include "../gawain/gwn_py_api.h"
#include "../bmesh/bmesh_py_api.h"
#include "../mathutils/mathutils.h"
@@ -212,6 +213,7 @@ static struct _inittab bpy_internal_modules[] = {
{"mathutils.kdtree", PyInit_mathutils_kdtree},
#endif
{"_bpy_path", BPyInit__bpy_path},
+ {"_gawain", BPyInit_gawain},
{"bgl", BPyInit_bgl},
{"blf", BPyInit_blf},
{"bmesh", BPyInit_bmesh},
@@ -530,7 +532,8 @@ static bool python_script_exec(
if (py_dict) {
#ifdef PYMODULE_CLEAR_WORKAROUND
- PyModuleObject *mmod = (PyModuleObject *)PyDict_GetItemString(PyThreadState_GET()->interp->modules, "__main__");
+ PyModuleObject *mmod = (PyModuleObject *)PyDict_GetItem(
+ PyThreadState_GET()->interp->modules, bpy_intern_str___main__);
PyObject *dict_back = mmod->md_dict;
/* freeing the module will clear the namespace,
* gives problems running classes defined in this namespace being used later. */
diff --git a/source/blender/python/intern/bpy_intern_string.c b/source/blender/python/intern/bpy_intern_string.c
index ac0100fa75d..6911e985e93 100644
--- a/source/blender/python/intern/bpy_intern_string.c
+++ b/source/blender/python/intern/bpy_intern_string.c
@@ -34,21 +34,24 @@
#include "BLI_utildefines.h"
-static PyObject *bpy_intern_str_arr[13];
+static PyObject *bpy_intern_str_arr[16];
-PyObject *bpy_intern_str_register;
-PyObject *bpy_intern_str_unregister;
-PyObject *bpy_intern_str_bl_rna;
+PyObject *bpy_intern_str___doc__;
+PyObject *bpy_intern_str___main__;
+PyObject *bpy_intern_str___module__;
+PyObject *bpy_intern_str___name__;
+PyObject *bpy_intern_str___slots__;
+PyObject *bpy_intern_str_attr;
PyObject *bpy_intern_str_bl_property;
+PyObject *bpy_intern_str_bl_rna;
+PyObject *bpy_intern_str_bl_target_properties;
PyObject *bpy_intern_str_bpy_types;
+PyObject *bpy_intern_str_frame;
PyObject *bpy_intern_str_order;
-PyObject *bpy_intern_str_attr;
+PyObject *bpy_intern_str_properties;
+PyObject *bpy_intern_str_register;
PyObject *bpy_intern_str_self;
-PyObject *bpy_intern_str_frame;
-PyObject *bpy_intern_str___slots__;
-PyObject *bpy_intern_str___name__;
-PyObject *bpy_intern_str___doc__;
-PyObject *bpy_intern_str___module__;
+PyObject *bpy_intern_str_unregister;
void bpy_intern_string_init(void)
{
@@ -57,19 +60,22 @@ void bpy_intern_string_init(void)
#define BPY_INTERN_STR(var, str) \
{ var = bpy_intern_str_arr[i++] = PyUnicode_FromString(str); } (void)0
- BPY_INTERN_STR(bpy_intern_str_register, "register");
- BPY_INTERN_STR(bpy_intern_str_unregister, "unregister");
- BPY_INTERN_STR(bpy_intern_str_bl_rna, "bl_rna");
+ BPY_INTERN_STR(bpy_intern_str___doc__, "__doc__");
+ BPY_INTERN_STR(bpy_intern_str___main__, "__main__");
+ BPY_INTERN_STR(bpy_intern_str___module__, "__module__");
+ BPY_INTERN_STR(bpy_intern_str___name__, "__name__");
+ BPY_INTERN_STR(bpy_intern_str___slots__, "__slots__");
+ BPY_INTERN_STR(bpy_intern_str_attr, "attr");
BPY_INTERN_STR(bpy_intern_str_bl_property, "bl_property");
+ BPY_INTERN_STR(bpy_intern_str_bl_rna, "bl_rna");
+ BPY_INTERN_STR(bpy_intern_str_bl_target_properties, "bl_target_properties");
BPY_INTERN_STR(bpy_intern_str_bpy_types, "bpy.types");
+ BPY_INTERN_STR(bpy_intern_str_frame, "frame");
BPY_INTERN_STR(bpy_intern_str_order, "order");
- BPY_INTERN_STR(bpy_intern_str_attr, "attr");
+ BPY_INTERN_STR(bpy_intern_str_properties, "properties");
+ BPY_INTERN_STR(bpy_intern_str_register, "register");
BPY_INTERN_STR(bpy_intern_str_self, "self");
- BPY_INTERN_STR(bpy_intern_str_frame, "frame");
- BPY_INTERN_STR(bpy_intern_str___slots__, "__slots__");
- BPY_INTERN_STR(bpy_intern_str___name__, "__name__");
- BPY_INTERN_STR(bpy_intern_str___doc__, "__doc__");
- BPY_INTERN_STR(bpy_intern_str___module__, "__module__");
+ BPY_INTERN_STR(bpy_intern_str_unregister, "unregister");
#undef BPY_INTERN_STR
diff --git a/source/blender/python/intern/bpy_intern_string.h b/source/blender/python/intern/bpy_intern_string.h
index 394e84d89bd..998c312c321 100644
--- a/source/blender/python/intern/bpy_intern_string.h
+++ b/source/blender/python/intern/bpy_intern_string.h
@@ -30,18 +30,21 @@
void bpy_intern_string_init(void);
void bpy_intern_string_exit(void);
-extern PyObject *bpy_intern_str_register;
-extern PyObject *bpy_intern_str_unregister;
-extern PyObject *bpy_intern_str_bl_rna;
+extern PyObject *bpy_intern_str___doc__;
+extern PyObject *bpy_intern_str___main__;
+extern PyObject *bpy_intern_str___module__;
+extern PyObject *bpy_intern_str___name__;
+extern PyObject *bpy_intern_str___slots__;
+extern PyObject *bpy_intern_str_attr;
extern PyObject *bpy_intern_str_bl_property;
+extern PyObject *bpy_intern_str_bl_rna;
+extern PyObject *bpy_intern_str_bl_target_properties;
extern PyObject *bpy_intern_str_bpy_types;
+extern PyObject *bpy_intern_str_frame;
extern PyObject *bpy_intern_str_order;
-extern PyObject *bpy_intern_str_attr;
+extern PyObject *bpy_intern_str_properties;
+extern PyObject *bpy_intern_str_register;
extern PyObject *bpy_intern_str_self;
-extern PyObject *bpy_intern_str_frame;
-extern PyObject *bpy_intern_str___slots__;
-extern PyObject *bpy_intern_str___name__;
-extern PyObject *bpy_intern_str___doc__;
-extern PyObject *bpy_intern_str___module__;
+extern PyObject *bpy_intern_str_unregister;
#endif /* __BPY_INTERN_STRING_H__ */
diff --git a/source/blender/python/intern/bpy_library_load.c b/source/blender/python/intern/bpy_library_load.c
index 20226ffe6a3..4cd5e21bc22 100644
--- a/source/blender/python/intern/bpy_library_load.c
+++ b/source/blender/python/intern/bpy_library_load.c
@@ -38,8 +38,6 @@
#include "BLI_linklist.h"
#include "BLI_path_util.h"
-#include "BLO_readfile.h"
-
#include "BKE_main.h"
#include "BKE_library.h"
#include "BKE_idcode.h"
@@ -48,6 +46,8 @@
#include "DNA_space_types.h" /* FILE_LINK, FILE_RELPATH */
+#include "BLO_readfile.h"
+
#include "bpy_capi_utils.h"
#include "bpy_library.h"
@@ -332,6 +332,7 @@ static PyObject *bpy_lib_exit(BPy_Library *self, PyObject *UNUSED(args))
Main *bmain = CTX_data_main(BPy_GetContext());
Main *mainl = NULL;
int err = 0;
+ const bool do_append = ((self->flag & FILE_LINK) == 0);
BKE_main_id_tag_all(bmain, LIB_TAG_PRE_EXISTING, true);
@@ -341,7 +342,7 @@ static PyObject *bpy_lib_exit(BPy_Library *self, PyObject *UNUSED(args))
{
int idcode_step = 0, idcode;
while ((idcode = BKE_idcode_iter_step(&idcode_step))) {
- if (BKE_idcode_is_linkable(idcode)) {
+ if (BKE_idcode_is_linkable(idcode) && (idcode != ID_WS || do_append)) {
const char *name_plural = BKE_idcode_to_name_plural(idcode);
PyObject *ls = PyDict_GetItemString(self->dict, name_plural);
// printf("lib: %s\n", name_plural);
@@ -414,7 +415,7 @@ static PyObject *bpy_lib_exit(BPy_Library *self, PyObject *UNUSED(args))
BKE_main_lib_objects_recalc_all(bmain);
/* append, rather than linking */
- if ((self->flag & FILE_LINK) == 0) {
+ if (do_append) {
BKE_library_make_local(bmain, lib, old_to_new_ids, true, false);
}
}
@@ -427,7 +428,7 @@ static PyObject *bpy_lib_exit(BPy_Library *self, PyObject *UNUSED(args))
{
int idcode_step = 0, idcode;
while ((idcode = BKE_idcode_iter_step(&idcode_step))) {
- if (BKE_idcode_is_linkable(idcode)) {
+ if (BKE_idcode_is_linkable(idcode) && (idcode != ID_WS || do_append)) {
const char *name_plural = BKE_idcode_to_name_plural(idcode);
PyObject *ls = PyDict_GetItemString(self->dict, name_plural);
if (ls && PyList_Check(ls)) {
diff --git a/source/blender/python/intern/bpy_manipulator_wrap.c b/source/blender/python/intern/bpy_manipulator_wrap.c
new file mode 100644
index 00000000000..9df4e81ec55
--- /dev/null
+++ b/source/blender/python/intern/bpy_manipulator_wrap.c
@@ -0,0 +1,236 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/python/intern/bpy_manipulator_wrap.c
+ * \ingroup pythonintern
+ *
+ * This file is so Python can define widget-group's that C can call into.
+ * The generic callback functions for Python widget-group are defines in
+ * 'rna_wm.c', some calling into functions here to do python specific
+ * functionality.
+ *
+ * \note This follows 'bpy_operator_wrap.c' very closely.
+ * Keep in sync unless there is good reason not to!
+ */
+
+#include <Python.h>
+
+#include "BLI_utildefines.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "RNA_access.h"
+#include "RNA_define.h"
+#include "RNA_enum_types.h"
+
+#include "bpy_rna.h"
+#include "bpy_intern_string.h"
+#include "bpy_manipulator_wrap.h" /* own include */
+
+/* we may want to add, but not now */
+
+/* -------------------------------------------------------------------- */
+
+/** \name Manipulator
+ * \{ */
+
+
+static bool bpy_manipulatortype_target_property_def(
+ wmManipulatorType *wt, PyObject *item)
+{
+ /* Note: names based on 'rna_rna.c' */
+ PyObject *empty_tuple = PyTuple_New(0);
+
+ struct {
+ char *id;
+ char *type_id; int type;
+ int array_length;
+ } params = {
+ .id = NULL, /* not optional */
+ .type = PROP_FLOAT,
+ .type_id = NULL,
+ .array_length = 1,
+ };
+
+ static const char * const _keywords[] = {"id", "type", "array_length", NULL};
+ static _PyArg_Parser _parser = {"|$ssi:register_class", _keywords, 0};
+ if (!_PyArg_ParseTupleAndKeywordsFast(
+ empty_tuple, item,
+ &_parser,
+ &params.id,
+ &params.type_id,
+ &params.array_length))
+ {
+ goto fail;
+ }
+
+ if (params.id == NULL) {
+ PyErr_SetString(PyExc_ValueError, "'id' argument not given");
+ goto fail;
+ }
+
+ if ((params.type_id != NULL) &&
+ pyrna_enum_value_from_id(
+ rna_enum_property_type_items, params.type_id, &params.type, "'type' enum value") == -1)
+ {
+ goto fail;
+ }
+ else {
+ params.type = rna_enum_property_type_items[params.type].value;
+ }
+
+ if ((params.array_length < 1 || params.array_length > RNA_MAX_ARRAY_LENGTH)) {
+ PyErr_SetString(PyExc_ValueError, "'array_length' out of range");
+ goto fail;
+ }
+
+ WM_manipulatortype_target_property_def(wt, params.id, params.type, params.array_length);
+ Py_DECREF(empty_tuple);
+ return true;
+
+fail:
+ Py_DECREF(empty_tuple);
+ return false;
+}
+
+static void manipulator_properties_init(wmManipulatorType *wt)
+{
+ PyTypeObject *py_class = wt->ext.data;
+ RNA_struct_blender_type_set(wt->ext.srna, wt);
+
+ /* only call this so pyrna_deferred_register_class gives a useful error
+ * WM_operatortype_append_ptr will call RNA_def_struct_identifier
+ * later */
+ RNA_def_struct_identifier_no_struct_map(wt->srna, wt->idname);
+
+ if (pyrna_deferred_register_class(wt->srna, py_class) != 0) {
+ PyErr_Print(); /* failed to register operator props */
+ PyErr_Clear();
+ }
+
+ /* Extract target property definitions from 'bl_target_properties' */
+ {
+ /* picky developers will notice that 'bl_targets' won't work with inheritance
+ * get direct from the dict to avoid raising a load of attribute errors (yes this isnt ideal) - campbell */
+ PyObject *py_class_dict = py_class->tp_dict;
+ PyObject *bl_target_properties = PyDict_GetItem(py_class_dict, bpy_intern_str_bl_target_properties);
+
+ /* Some widgets may only exist to activate operators. */
+ if (bl_target_properties != NULL) {
+ PyObject *bl_target_properties_fast;
+ if (!(bl_target_properties_fast = PySequence_Fast(
+ bl_target_properties, "bl_target_properties sequence")))
+ {
+ /* PySequence_Fast sets the error */
+ PyErr_Print();
+ PyErr_Clear();
+ return;
+ }
+
+ const uint items_len = PySequence_Fast_GET_SIZE(bl_target_properties_fast);
+ PyObject **items = PySequence_Fast_ITEMS(bl_target_properties_fast);
+
+ for (uint i = 0; i < items_len; i++) {
+ if (!bpy_manipulatortype_target_property_def(wt, items[i])) {
+ PyErr_Print();
+ PyErr_Clear();
+ break;
+ }
+ }
+
+ Py_DECREF(bl_target_properties_fast);
+ }
+ }
+}
+
+void BPY_RNA_manipulator_wrapper(wmManipulatorType *wt, void *userdata)
+{
+ /* take care not to overwrite anything set in
+ * WM_manipulatormaptype_group_link_ptr before opfunc() is called */
+ StructRNA *srna = wt->srna;
+ *wt = *((wmManipulatorType *)userdata);
+ wt->srna = srna; /* restore */
+
+ /* don't do translations here yet */
+#if 0
+ /* Use i18n context from ext.srna if possible (py manipulatorgroups). */
+ if (wt->ext.srna) {
+ RNA_def_struct_translation_context(wt->srna, RNA_struct_translation_context(wt->ext.srna));
+ }
+#endif
+
+ wt->struct_size = sizeof(wmManipulator);
+
+ manipulator_properties_init(wt);
+}
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Manipulator Group
+ * \{ */
+
+static void manipulatorgroup_properties_init(wmManipulatorGroupType *wgt)
+{
+#ifdef USE_SRNA
+ PyTypeObject *py_class = wgt->ext.data;
+#endif
+ RNA_struct_blender_type_set(wgt->ext.srna, wgt);
+
+#ifdef USE_SRNA
+ /* only call this so pyrna_deferred_register_class gives a useful error
+ * WM_operatortype_append_ptr will call RNA_def_struct_identifier
+ * later */
+ RNA_def_struct_identifier(wgt->srna, wgt->idname);
+
+ if (pyrna_deferred_register_class(wgt->srna, py_class) != 0) {
+ PyErr_Print(); /* failed to register operator props */
+ PyErr_Clear();
+ }
+#endif
+}
+
+void BPY_RNA_manipulatorgroup_wrapper(wmManipulatorGroupType *wgt, void *userdata)
+{
+ /* take care not to overwrite anything set in
+ * WM_manipulatormaptype_group_link_ptr before opfunc() is called */
+#ifdef USE_SRNA
+ StructRNA *srna = wgt->srna;
+#endif
+ *wgt = *((wmManipulatorGroupType *)userdata);
+#ifdef USE_SRNA
+ wgt->srna = srna; /* restore */
+#endif
+
+#ifdef USE_SRNA
+ /* Use i18n context from ext.srna if possible (py manipulatorgroups). */
+ if (wgt->ext.srna) {
+ RNA_def_struct_translation_context(wgt->srna, RNA_struct_translation_context(wgt->ext.srna));
+ }
+#endif
+
+ manipulatorgroup_properties_init(wgt);
+}
+
+/** \} */
+
diff --git a/source/blender/python/intern/bpy_manipulator_wrap.h b/source/blender/python/intern/bpy_manipulator_wrap.h
new file mode 100644
index 00000000000..3f739e26059
--- /dev/null
+++ b/source/blender/python/intern/bpy_manipulator_wrap.h
@@ -0,0 +1,36 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/python/intern/bpy_manipulator_wrap.h
+ * \ingroup pythonintern
+ */
+
+#ifndef __BPY_MANIPULATOR_WRAP_H__
+#define __BPY_MANIPULATOR_WRAP_H__
+
+struct wmManipulatorType;
+struct wmManipulatorGroupType;
+
+/* exposed to rna/wm api */
+void BPY_RNA_manipulator_wrapper(struct wmManipulatorType *wt, void *userdata);
+void BPY_RNA_manipulatorgroup_wrapper(struct wmManipulatorGroupType *wgt, void *userdata);
+
+#endif /* __BPY_MANIPULATOR_WRAP_H__ */
+
diff --git a/source/blender/python/intern/bpy_msgbus.c b/source/blender/python/intern/bpy_msgbus.c
new file mode 100644
index 00000000000..945d2a9b6cc
--- /dev/null
+++ b/source/blender/python/intern/bpy_msgbus.c
@@ -0,0 +1,400 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/python/intern/bpy_msgbus.c
+ * \ingroup pythonintern
+ * This file defines '_bpy_msgbus' module, exposed as 'bpy.msgbus'.
+ */
+
+#include <Python.h>
+
+#include "../generic/python_utildefines.h"
+#include "../generic/py_capi_utils.h"
+#include "../mathutils/mathutils.h"
+
+#include "BLI_utildefines.h"
+
+#include "BKE_context.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+#include "WM_message.h"
+
+#include "RNA_access.h"
+#include "RNA_define.h"
+#include "RNA_enum_types.h"
+
+#include "bpy_capi_utils.h"
+#include "bpy_rna.h"
+#include "bpy_intern_string.h"
+#include "bpy_manipulator_wrap.h" /* own include */
+
+
+#include "bpy_msgbus.h" /* own include */
+
+
+/* -------------------------------------------------------------------- */
+/** \name Internal Utils
+ * \{ */
+
+#define BPY_MSGBUS_RNA_MSGKEY_DOC \
+" :arg key: Represents the type of data being subscribed to\n" \
+"\n" \
+" Arguments include\n" \
+" - :class:`bpy.types.Property` instance.\n" \
+" - :class:`bpy.types.Struct` type.\n" \
+" - (:class:`bpy.types.Struct`, str) type and property name.\n" \
+" :type key: Muliple\n"
+
+/**
+ * There are multiple ways we can get RNA from Python,
+ * it's also possible to register a type instead of an instance.
+ *
+ * This function handles converting Python to RNA subscription information.
+ *
+ * \param py_sub: See #BPY_MSGBUS_RNA_MSGKEY_DOC for description.
+ * \param msg_key_params: Message key with all members zeroed out.
+ * \return -1 on failure, 0 on success.
+ */
+static int py_msgbus_rna_key_from_py(
+ PyObject *py_sub,
+ wmMsgParams_RNA *msg_key_params,
+ const char *error_prefix)
+{
+
+ /* Allow common case, object rotation, location - etc. */
+ if (BaseMathObject_CheckExact(py_sub)) {
+ BaseMathObject *py_sub_math = (BaseMathObject *)py_sub;
+ if (py_sub_math->cb_user == NULL) {
+ PyErr_Format(
+ PyExc_TypeError,
+ "%s: math argument has no owner",
+ error_prefix);
+ return -1;
+ }
+ py_sub = py_sub_math->cb_user;
+ /* Common case will use BPy_PropertyRNA_Check below. */
+ }
+
+ if (BPy_PropertyRNA_Check(py_sub)) {
+ BPy_PropertyRNA *data_prop = (BPy_PropertyRNA *)py_sub;
+ PYRNA_PROP_CHECK_INT(data_prop);
+ msg_key_params->ptr = data_prop->ptr;
+ msg_key_params->prop = data_prop->prop;
+ }
+ else if (BPy_StructRNA_Check(py_sub)) {
+ /* note, this isn't typically used since we don't edit structs directly. */
+ BPy_StructRNA *data_srna = (BPy_StructRNA *)py_sub;
+ PYRNA_STRUCT_CHECK_INT(data_srna);
+ msg_key_params->ptr = data_srna->ptr;
+ }
+ /* TODO - property / type, not instance. */
+ else if (PyType_Check(py_sub)) {
+ StructRNA *data_type = pyrna_struct_as_srna(py_sub, false, error_prefix);
+ if (data_type == NULL) {
+ return -1;
+ }
+ msg_key_params->ptr.type = data_type;
+ }
+ else if (PyTuple_CheckExact(py_sub)) {
+ if (PyTuple_GET_SIZE(py_sub) == 2) {
+ PyObject *data_type_py = PyTuple_GET_ITEM(py_sub, 0);
+ PyObject *data_prop_py = PyTuple_GET_ITEM(py_sub, 1);
+ StructRNA *data_type = pyrna_struct_as_srna(data_type_py, false, error_prefix);
+ if (data_type == NULL) {
+ return -1;
+ }
+ if (!PyUnicode_CheckExact(data_prop_py)) {
+ PyErr_Format(
+ PyExc_TypeError,
+ "%s: expected property to be a string",
+ error_prefix);
+ return -1;
+ }
+ PointerRNA data_type_ptr = { .type = data_type, };
+ const char *data_prop_str = _PyUnicode_AsString(data_prop_py);
+ PropertyRNA *data_prop = RNA_struct_find_property(&data_type_ptr, data_prop_str);
+
+ if (data_prop == NULL) {
+ PyErr_Format(
+ PyExc_TypeError,
+ "%s: struct %.200s does not contain property %.200s",
+ error_prefix,
+ RNA_struct_identifier(data_type),
+ data_prop_str);
+ return -1;
+ }
+
+ msg_key_params->ptr.type = data_type;
+ msg_key_params->prop = data_prop;
+ }
+ else {
+ PyErr_Format(
+ PyExc_ValueError,
+ "%s: Expected a pair (type, property_id)",
+ error_prefix);
+ return -1;
+ }
+ }
+ return 0;
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Internal Callbacks
+ * \{ */
+
+#define BPY_MSGBUS_USER_DATA_LEN 2
+
+/* Follow wmMsgNotifyFn spec */
+static void bpy_msgbus_notify(
+ bContext *C, wmMsgSubscribeKey *UNUSED(msg_key), wmMsgSubscribeValue *msg_val)
+{
+ PyGILState_STATE gilstate;
+ bpy_context_set(C, &gilstate);
+
+ PyObject *user_data = msg_val->user_data;
+ BLI_assert(PyTuple_GET_SIZE(user_data) == BPY_MSGBUS_USER_DATA_LEN);
+
+ PyObject *callback_args = PyTuple_GET_ITEM(user_data, 0);
+ PyObject *callback_notify = PyTuple_GET_ITEM(user_data, 1);
+
+ const bool is_write_ok = pyrna_write_check();
+ if (!is_write_ok) {
+ pyrna_write_set(true);
+ }
+
+ PyObject *ret = PyObject_CallObject(callback_notify, callback_args);
+
+ if (ret == NULL) {
+ PyC_Err_PrintWithFunc(callback_notify);
+ }
+ else {
+ if (ret != Py_None) {
+ PyErr_SetString(PyExc_ValueError, "the return value must be None");
+ PyC_Err_PrintWithFunc(callback_notify);
+ }
+ Py_DECREF(ret);
+ }
+
+ bpy_context_clear(C, &gilstate);
+
+ if (!is_write_ok) {
+ pyrna_write_set(false);
+ }
+}
+
+/* Follow wmMsgSubscribeValueFreeDataFn spec */
+static void bpy_msgbus_subscribe_value_free_data(
+ struct wmMsgSubscribeKey *UNUSED(msg_key), struct wmMsgSubscribeValue *msg_val)
+{
+ PyGILState_STATE gilstate = PyGILState_Ensure();
+ Py_DECREF(msg_val->owner);
+ Py_DECREF(msg_val->user_data);
+ PyGILState_Release(gilstate);
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Public Message Bus API
+ * \{ */
+
+PyDoc_STRVAR(bpy_msgbus_subscribe_rna_doc,
+".. function:: subscribe_rna(data, owner, args, notify)\n"
+"\n"
+BPY_MSGBUS_RNA_MSGKEY_DOC
+" :arg owner: Handle for this subscription (compared by identity).\n"
+" :type owner: Any type.\n"
+"\n"
+" Returns a new vector int property definition.\n"
+);
+static PyObject *bpy_msgbus_subscribe_rna(PyObject *UNUSED(self), PyObject *args, PyObject *kw)
+{
+ const char *error_prefix = "subscribe_rna";
+ PyObject *py_sub = NULL;
+ PyObject *py_owner = NULL;
+ PyObject *callback_args = NULL;
+ PyObject *callback_notify = NULL;
+
+ enum {
+ IS_PERSISTENT = (1 << 0),
+ };
+ PyObject *py_options = NULL;
+ EnumPropertyItem py_options_enum[] = {
+ {IS_PERSISTENT, "PERSISTENT", 0, ""},
+ {0, NULL, 0, NULL, NULL}
+ };
+ int options = 0;
+
+ static const char *_keywords[] = {
+ "key",
+ "owner",
+ "args",
+ "notify",
+ "options",
+ NULL,
+ };
+ static _PyArg_Parser _parser = {"$OOO!OO!:subscribe_rna", _keywords, 0};
+ if (!_PyArg_ParseTupleAndKeywordsFast(
+ args, kw, &_parser,
+ &py_sub, &py_owner,
+ &PyTuple_Type, &callback_args,
+ &callback_notify,
+ &PySet_Type, &py_options))
+ {
+ return NULL;
+ }
+
+ if (py_options &&
+ (pyrna_set_to_enum_bitfield(py_options_enum, py_options, &options, error_prefix)) == -1)
+ {
+ return NULL;
+ }
+
+ /* Note: we may want to have a way to pass this in. */
+ bContext *C = (bContext *)BPy_GetContext();
+ struct wmMsgBus *mbus = CTX_wm_message_bus(C);
+ wmMsgParams_RNA msg_key_params = {0};
+
+ wmMsgSubscribeValue msg_val_params = {0};
+
+ if (py_msgbus_rna_key_from_py(py_sub, &msg_key_params, error_prefix) == -1) {
+ return NULL;
+ }
+
+ if (!PyFunction_Check(callback_notify)) {
+ PyErr_Format(
+ PyExc_TypeError,
+ "notify expects a function, found %.200s",
+ Py_TYPE(callback_notify)->tp_name);
+ return NULL;
+ }
+
+ if (options != 0) {
+ if (options & IS_PERSISTENT) {
+ msg_val_params.is_persistent = true;
+ }
+ }
+
+ /* owner can be anything. */
+ {
+ msg_val_params.owner = py_owner;
+ Py_INCREF(py_owner);
+ }
+
+ {
+ PyObject *user_data = PyTuple_New(2);
+ PyTuple_SET_ITEMS(
+ user_data,
+ Py_INCREF_RET(callback_args),
+ Py_INCREF_RET(callback_notify));
+ msg_val_params.user_data = user_data;
+ }
+
+ msg_val_params.notify = bpy_msgbus_notify;
+ msg_val_params.free_data = bpy_msgbus_subscribe_value_free_data;
+
+ WM_msg_subscribe_rna_params(mbus, &msg_key_params, &msg_val_params, __func__);
+
+ WM_msg_dump(mbus, __func__);
+
+ Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(bpy_msgbus_publish_rna_doc,
+".. function:: publish_rna(data, owner, args, notify)\n"
+"\n"
+BPY_MSGBUS_RNA_MSGKEY_DOC
+"\n"
+" Notify subscribers of changes to this property\n"
+" (this typically doesn't need to be called explicitly since changes will automatically publish updates).\n"
+" In some cases it may be useful to publish changes explicitly using more general keys.\n"
+);
+static PyObject *bpy_msgbus_publish_rna(PyObject *UNUSED(self), PyObject *args, PyObject *kw)
+{
+ const char *error_prefix = "publish_rna";
+ PyObject *py_sub = NULL;
+
+ static const char *_keywords[] = {
+ "key",
+ NULL,
+ };
+ static _PyArg_Parser _parser = {"$O:publish_rna", _keywords, 0};
+ if (!_PyArg_ParseTupleAndKeywordsFast(
+ args, kw, &_parser,
+ &py_sub))
+ {
+ return NULL;
+ }
+
+ /* Note: we may want to have a way to pass this in. */
+ bContext *C = (bContext *)BPy_GetContext();
+ struct wmMsgBus *mbus = CTX_wm_message_bus(C);
+ wmMsgParams_RNA msg_key_params = {0};
+
+ if (py_msgbus_rna_key_from_py(py_sub, &msg_key_params, error_prefix) == -1) {
+ return NULL;
+ }
+
+ WM_msg_publish_rna_params(mbus, &msg_key_params);
+
+ Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(bpy_msgbus_clear_by_owner_doc,
+".. function:: clear_by_owner(owner)\n"
+"\n"
+" Clear all subscribers using this owner.\n"
+);
+static PyObject *bpy_msgbus_clear_by_owner(PyObject *UNUSED(self), PyObject *py_owner)
+{
+ bContext *C = (bContext *)BPy_GetContext();
+ struct wmMsgBus *mbus = CTX_wm_message_bus(C);
+ WM_msgbus_clear_by_owner(mbus, py_owner);
+ Py_RETURN_NONE;
+}
+
+static struct PyMethodDef BPy_msgbus_methods[] = {
+ {"subscribe_rna", (PyCFunction)bpy_msgbus_subscribe_rna, METH_VARARGS | METH_KEYWORDS, bpy_msgbus_subscribe_rna_doc},
+ {"publish_rna", (PyCFunction)bpy_msgbus_publish_rna, METH_VARARGS | METH_KEYWORDS, bpy_msgbus_publish_rna_doc},
+ {"clear_by_owner", (PyCFunction)bpy_msgbus_clear_by_owner, METH_O, bpy_msgbus_clear_by_owner_doc},
+ {NULL, NULL, 0, NULL}
+};
+
+static struct PyModuleDef _bpy_msgbus_def = {
+ PyModuleDef_HEAD_INIT,
+ .m_name = "msgbus",
+ .m_methods = BPy_msgbus_methods,
+};
+
+
+PyObject *BPY_msgbus_module(void)
+{
+ PyObject *submodule;
+
+ submodule = PyModule_Create(&_bpy_msgbus_def);
+
+ return submodule;
+}
+
+/** \} */
+
diff --git a/source/blender/python/intern/bpy_msgbus.h b/source/blender/python/intern/bpy_msgbus.h
new file mode 100644
index 00000000000..97b20e9b926
--- /dev/null
+++ b/source/blender/python/intern/bpy_msgbus.h
@@ -0,0 +1,30 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/python/intern/bpy_msgbus.h
+ * \ingroup pythonintern
+ */
+
+#ifndef __BPY_MSGBUS_H__
+#define __BPY_MSGBUS_H__
+
+PyObject *BPY_msgbus_module(void);
+
+#endif /* __BPY_MSGBUS_H__ */
diff --git a/source/blender/python/intern/bpy_props.h b/source/blender/python/intern/bpy_props.h
index 614c1b4b708..fa2594f94d2 100644
--- a/source/blender/python/intern/bpy_props.h
+++ b/source/blender/python/intern/bpy_props.h
@@ -34,6 +34,6 @@ PyObject *BPy_PointerProperty(PyObject *self, PyObject *args, PyObject *kw);
PyObject *BPy_CollectionProperty(PyObject *self, PyObject *args, PyObject *kw);
StructRNA *pointer_type_from_py(PyObject *value, const char *error_prefix);
-#define PYRNA_STACK_ARRAY 32
+#define PYRNA_STACK_ARRAY RNA_STACK_ARRAY
#endif
diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c
index a197d0813e7..e220e6559a6 100644
--- a/source/blender/python/intern/bpy_rna.c
+++ b/source/blender/python/intern/bpy_rna.c
@@ -312,7 +312,7 @@ static bool rna_id_write_error(PointerRNA *ptr, PyObject *key)
ID *id = ptr->id.data;
if (id) {
const short idcode = GS(id->name);
- if (!ELEM(idcode, ID_WM, ID_SCR)) { /* may need more added here */
+ if (!ELEM(idcode, ID_WM, ID_SCR, ID_WS)) { /* may need more added here */
const char *idtype = BKE_idcode_to_name(idcode);
const char *pyname;
if (key && PyUnicode_Check(key)) pyname = _PyUnicode_AsString(key);
@@ -1845,19 +1845,28 @@ static int pyrna_py_to_prop(
* class mixing if this causes problems in the future it should be removed.
*/
if ((ptr_type == &RNA_AnyType) &&
- (BPy_StructRNA_Check(value)) &&
- (RNA_struct_is_a(((BPy_StructRNA *)value)->ptr.type, &RNA_Operator)))
+ (BPy_StructRNA_Check(value)))
{
- value = PyObject_GetAttrString(value, "properties");
- value_new = value;
+ const StructRNA *base_type =
+ RNA_struct_base_child_of(((const BPy_StructRNA *)value)->ptr.type, NULL);
+ if (ELEM(base_type, &RNA_Operator, &RNA_Manipulator)) {
+ value = PyObject_GetAttr(value, bpy_intern_str_properties);
+ value_new = value;
+ }
}
-
- /* if property is an OperatorProperties pointer and value is a map,
+ /* if property is an OperatorProperties/ManipulatorProperties pointer and value is a map,
* forward back to pyrna_pydict_to_props */
- if (RNA_struct_is_a(ptr_type, &RNA_OperatorProperties) && PyDict_Check(value)) {
- PointerRNA opptr = RNA_property_pointer_get(ptr, prop);
- return pyrna_pydict_to_props(&opptr, value, false, error_prefix);
+ if (PyDict_Check(value)) {
+ const StructRNA *base_type = RNA_struct_base_child_of(ptr_type, NULL);
+ if (base_type == &RNA_OperatorProperties) {
+ PointerRNA opptr = RNA_property_pointer_get(ptr, prop);
+ return pyrna_pydict_to_props(&opptr, value, false, error_prefix);
+ }
+ else if (base_type == &RNA_ManipulatorProperties) {
+ PointerRNA opptr = RNA_property_pointer_get(ptr, prop);
+ return pyrna_pydict_to_props(&opptr, value, false, error_prefix);
+ }
}
/* another exception, allow to pass a collection as an RNA property */
@@ -7588,7 +7597,8 @@ static int bpy_class_call(bContext *C, PointerRNA *ptr, FunctionRNA *func, Param
PyGILState_STATE gilstate;
#ifdef USE_PEDANTIC_WRITE
- const bool is_readonly_init = !RNA_struct_is_a(ptr->type, &RNA_Operator);
+ const bool is_readonly_init = !(RNA_struct_is_a(ptr->type, &RNA_Operator) ||
+ RNA_struct_is_a(ptr->type, &RNA_Manipulator));
// const char *func_id = RNA_function_identifier(func); /* UNUSED */
/* testing, for correctness, not operator and not draw function */
const bool is_readonly = !(RNA_function_flag(func) & FUNC_ALLOW_WRITE);
diff --git a/source/blender/python/intern/bpy_rna_manipulator.c b/source/blender/python/intern/bpy_rna_manipulator.c
new file mode 100644
index 00000000000..950f7f98be0
--- /dev/null
+++ b/source/blender/python/intern/bpy_rna_manipulator.c
@@ -0,0 +1,565 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/python/intern/bpy_rna_manipulator.c
+ * \ingroup pythonintern
+ *
+ * .
+ */
+
+#include <Python.h>
+#include <stddef.h>
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_utildefines.h"
+#include "BLI_alloca.h"
+
+#include "BKE_main.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "bpy_capi_utils.h"
+#include "bpy_rna_manipulator.h"
+
+#include "../generic/py_capi_utils.h"
+#include "../generic/python_utildefines.h"
+
+#include "RNA_access.h"
+#include "RNA_types.h"
+#include "RNA_enum_types.h"
+
+#include "bpy_rna.h"
+
+
+/* -------------------------------------------------------------------- */
+/** \name Manipulator Target Property Define API
+ * \{ */
+
+enum {
+ BPY_MANIPULATOR_FN_SLOT_GET = 0,
+ BPY_MANIPULATOR_FN_SLOT_SET,
+ BPY_MANIPULATOR_FN_SLOT_RANGE_GET,
+};
+#define BPY_MANIPULATOR_FN_SLOT_LEN (BPY_MANIPULATOR_FN_SLOT_RANGE_GET + 1)
+
+struct BPyManipulatorHandlerUserData {
+
+ PyObject *fn_slots[BPY_MANIPULATOR_FN_SLOT_LEN];
+};
+
+static void py_rna_manipulator_handler_get_cb(
+ const wmManipulator *UNUSED(mpr), wmManipulatorProperty *mpr_prop,
+ void *value_p)
+{
+ PyGILState_STATE gilstate = PyGILState_Ensure();
+
+ struct BPyManipulatorHandlerUserData *data = mpr_prop->custom_func.user_data;
+ PyObject *ret = PyObject_CallObject(data->fn_slots[BPY_MANIPULATOR_FN_SLOT_GET], NULL);
+ if (ret == NULL) {
+ goto fail;
+ }
+
+ if (mpr_prop->type->data_type == PROP_FLOAT) {
+ float *value = value_p;
+ if (mpr_prop->type->array_length == 1) {
+ if ((*value = PyFloat_AsDouble(ret)) == -1.0f && PyErr_Occurred()) {
+ goto fail;
+ }
+ }
+ else {
+ if (PyC_AsArray(value, ret, mpr_prop->type->array_length, &PyFloat_Type, false,
+ "Manipulator get callback: ") == -1)
+ {
+ goto fail;
+ }
+ }
+ }
+ else {
+ PyErr_SetString(PyExc_AttributeError, "internal error, unsupported type");
+ goto fail;
+ }
+
+ Py_DECREF(ret);
+
+ PyGILState_Release(gilstate);
+ return;
+
+fail:
+ PyErr_Print();
+ PyErr_Clear();
+
+ PyGILState_Release(gilstate);
+}
+
+static void py_rna_manipulator_handler_set_cb(
+ const wmManipulator *UNUSED(mpr), wmManipulatorProperty *mpr_prop,
+ const void *value_p)
+{
+ PyGILState_STATE gilstate = PyGILState_Ensure();
+
+ struct BPyManipulatorHandlerUserData *data = mpr_prop->custom_func.user_data;
+
+ PyObject *args = PyTuple_New(1);
+
+ if (mpr_prop->type->data_type == PROP_FLOAT) {
+ const float *value = value_p;
+ PyObject *py_value;
+ if (mpr_prop->type->array_length == 1) {
+ py_value = PyFloat_FromDouble(*value);
+ }
+ else {
+ py_value = PyC_Tuple_PackArray_F32(value, mpr_prop->type->array_length);
+ }
+ if (py_value == NULL) {
+ goto fail;
+ }
+ PyTuple_SET_ITEM(args, 0, py_value);
+ }
+ else {
+ PyErr_SetString(PyExc_AttributeError, "internal error, unsupported type");
+ goto fail;
+ }
+
+ PyObject *ret = PyObject_CallObject(data->fn_slots[BPY_MANIPULATOR_FN_SLOT_SET], args);
+ if (ret == NULL) {
+ goto fail;
+ }
+ Py_DECREF(ret);
+
+ PyGILState_Release(gilstate);
+ return;
+
+fail:
+ PyErr_Print();
+ PyErr_Clear();
+
+ Py_DECREF(args);
+
+ PyGILState_Release(gilstate);
+}
+
+static void py_rna_manipulator_handler_range_get_cb(
+ const wmManipulator *UNUSED(mpr), wmManipulatorProperty *mpr_prop,
+ void *value_p)
+{
+ struct BPyManipulatorHandlerUserData *data = mpr_prop->custom_func.user_data;
+
+ PyGILState_STATE gilstate = PyGILState_Ensure();
+
+ PyObject *ret = PyObject_CallObject(data->fn_slots[BPY_MANIPULATOR_FN_SLOT_RANGE_GET], NULL);
+ if (ret == NULL) {
+ goto fail;
+ }
+
+ if (!PyTuple_Check(ret)) {
+ PyErr_Format(PyExc_TypeError,
+ "Expected a tuple, not %.200s",
+ Py_TYPE(ret)->tp_name);
+ goto fail;
+ }
+
+ if (PyTuple_GET_SIZE(ret) != 2) {
+ PyErr_Format(PyExc_TypeError,
+ "Expected a tuple of size 2, not %d",
+ PyTuple_GET_SIZE(ret));
+ goto fail;
+ }
+
+ if (mpr_prop->type->data_type == PROP_FLOAT) {
+ float range[2];
+ for (int i = 0; i < 2; i++) {
+ if (((range[i] = PyFloat_AsDouble(PyTuple_GET_ITEM(ret, i))) == -1.0f && PyErr_Occurred()) == 0) {
+ /* pass */
+ }
+ else {
+ goto fail;
+ }
+ }
+ memcpy(value_p, range, sizeof(range));
+ }
+ else {
+ PyErr_SetString(PyExc_AttributeError, "internal error, unsupported type");
+ goto fail;
+ }
+
+ Py_DECREF(ret);
+ PyGILState_Release(gilstate);
+ return;
+
+fail:
+ Py_XDECREF(ret);
+
+ PyErr_Print();
+ PyErr_Clear();
+
+ PyGILState_Release(gilstate);
+}
+
+static void py_rna_manipulator_handler_free_cb(
+ const wmManipulator *UNUSED(mpr), wmManipulatorProperty *mpr_prop)
+{
+ struct BPyManipulatorHandlerUserData *data = mpr_prop->custom_func.user_data;
+
+ PyGILState_STATE gilstate = PyGILState_Ensure();
+ for (int i = 0; i < BPY_MANIPULATOR_FN_SLOT_LEN; i++) {
+ Py_XDECREF(data->fn_slots[i]);
+ }
+ PyGILState_Release(gilstate);
+
+ MEM_freeN(data);
+
+}
+
+PyDoc_STRVAR(bpy_manipulator_target_set_handler_doc,
+".. method:: target_set_handler(target, get, set, range=None):\n"
+"\n"
+" Assigns callbacks to a manipulators property.\n"
+"\n"
+" :arg get: Function that returns the value for this property (single value or sequence).\n"
+" :type get: callable\n"
+" :arg set: Function that takes a single value argument and applies it.\n"
+" :type set: callable\n"
+" :arg range: Function that returns a (min, max) tuple for manipulators that use a range.\n"
+" :type range: callable\n"
+);
+static PyObject *bpy_manipulator_target_set_handler(PyObject *UNUSED(self), PyObject *args, PyObject *kw)
+{
+ PyGILState_STATE gilstate = PyGILState_Ensure();
+
+ struct {
+ PyObject *self;
+ char *target;
+ PyObject *py_fn_slots[BPY_MANIPULATOR_FN_SLOT_LEN];
+ } params = {
+ .self = NULL,
+ .target = NULL,
+ .py_fn_slots = {NULL},
+ };
+
+ /* Note: this is a counter-part to functions:
+ * 'Manipulator.target_set_prop & target_set_operator'
+ * (see: rna_wm_manipulator_api.c). conventions should match. */
+ static const char * const _keywords[] = {"self", "target", "get", "set", "range", NULL};
+ static _PyArg_Parser _parser = {"Os|$OOO:target_set_handler", _keywords, 0};
+ if (!_PyArg_ParseTupleAndKeywordsFast(
+ args, kw, &_parser,
+ &params.self,
+ &params.target,
+ &params.py_fn_slots[BPY_MANIPULATOR_FN_SLOT_GET],
+ &params.py_fn_slots[BPY_MANIPULATOR_FN_SLOT_SET],
+ &params.py_fn_slots[BPY_MANIPULATOR_FN_SLOT_RANGE_GET]))
+ {
+ goto fail;
+ }
+
+ wmManipulator *mpr = ((BPy_StructRNA *)params.self)->ptr.data;
+
+ const wmManipulatorPropertyType *mpr_prop_type =
+ WM_manipulatortype_target_property_find(mpr->type, params.target);
+ if (mpr_prop_type == NULL) {
+ PyErr_Format(PyExc_ValueError,
+ "Manipulator target property '%s.%s' not found",
+ mpr->type->idname, params.target);
+ goto fail;
+ }
+
+ {
+ const int slots_required = 2;
+ const int slots_start = 2;
+ for (int i = 0; i < BPY_MANIPULATOR_FN_SLOT_LEN; i++) {
+ if (params.py_fn_slots[i] == NULL) {
+ if (i < slots_required) {
+ PyErr_Format(PyExc_ValueError, "Argument '%s' not given", _keywords[slots_start + i]);
+ goto fail;
+ }
+ }
+ else if (!PyCallable_Check(params.py_fn_slots[i])) {
+ PyErr_Format(PyExc_ValueError, "Argument '%s' not callable", _keywords[slots_start + i]);
+ goto fail;
+ }
+ }
+ }
+
+ struct BPyManipulatorHandlerUserData *data = MEM_callocN(sizeof(*data), __func__);
+
+ for (int i = 0; i < BPY_MANIPULATOR_FN_SLOT_LEN; i++) {
+ data->fn_slots[i] = params.py_fn_slots[i];
+ Py_XINCREF(params.py_fn_slots[i]);
+ }
+
+ WM_manipulator_target_property_def_func_ptr(
+ mpr, mpr_prop_type,
+ &(const struct wmManipulatorPropertyFnParams) {
+ .value_get_fn = py_rna_manipulator_handler_get_cb,
+ .value_set_fn = py_rna_manipulator_handler_set_cb,
+ .range_get_fn = py_rna_manipulator_handler_range_get_cb,
+ .free_fn = py_rna_manipulator_handler_free_cb,
+ .user_data = data,
+ });
+
+ PyGILState_Release(gilstate);
+
+ Py_RETURN_NONE;
+
+fail:
+ PyGILState_Release(gilstate);
+ return NULL;
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Manipulator Target Property Access API
+ * \{ */
+
+PyDoc_STRVAR(bpy_manipulator_target_get_value_doc,
+".. method:: target_get_value(target):\n"
+"\n"
+" Get the value of this target property.\n"
+"\n"
+" :arg target: Target property name.\n"
+" :type target: string\n"
+" :return: The value of the target property.\n"
+" :rtype: Single value or array based on the target type\n"
+);
+static PyObject *bpy_manipulator_target_get_value(PyObject *UNUSED(self), PyObject *args, PyObject *kw)
+{
+ struct {
+ PyObject *self;
+ char *target;
+ } params = {
+ .self = NULL,
+ .target = NULL,
+ };
+
+ static const char * const _keywords[] = {"self", "target", NULL};
+ static _PyArg_Parser _parser = {"Os:target_get_value", _keywords, 0};
+ if (!_PyArg_ParseTupleAndKeywordsFast(
+ args, kw, &_parser,
+ &params.self,
+ &params.target))
+ {
+ goto fail;
+ }
+
+ wmManipulator *mpr = ((BPy_StructRNA *)params.self)->ptr.data;
+
+ wmManipulatorProperty *mpr_prop =
+ WM_manipulator_target_property_find(mpr, params.target);
+ if (mpr_prop == NULL) {
+ PyErr_Format(PyExc_ValueError,
+ "Manipulator target property '%s.%s' not found",
+ mpr->type->idname, params.target);
+ goto fail;
+ }
+
+ const int array_len = WM_manipulator_target_property_array_length(mpr, mpr_prop);
+ switch (mpr_prop->type->data_type) {
+ case PROP_FLOAT:
+ {
+ if (array_len != 0) {
+ float *value = BLI_array_alloca(value, array_len);
+ WM_manipulator_target_property_value_get_array(mpr, mpr_prop, value);
+ return PyC_Tuple_PackArray_F32(value, array_len);
+ }
+ else {
+ float value = WM_manipulator_target_property_value_get(mpr, mpr_prop);
+ return PyFloat_FromDouble(value);
+ }
+ break;
+ }
+ default:
+ {
+ PyErr_SetString(PyExc_RuntimeError, "Not yet supported type");
+ goto fail;
+ }
+ }
+
+fail:
+ return NULL;
+}
+
+PyDoc_STRVAR(bpy_manipulator_target_set_value_doc,
+".. method:: target_set_value(target):\n"
+"\n"
+" Set the value of this target property.\n"
+"\n"
+" :arg target: Target property name.\n"
+" :type target: string\n"
+);
+static PyObject *bpy_manipulator_target_set_value(PyObject *UNUSED(self), PyObject *args, PyObject *kw)
+{
+ struct {
+ PyObject *self;
+ char *target;
+ PyObject *value;
+ } params = {
+ .self = NULL,
+ .target = NULL,
+ .value = NULL,
+ };
+
+ static const char * const _keywords[] = {"self", "target", "value", NULL};
+ static _PyArg_Parser _parser = {"OsO:target_set_value", _keywords, 0};
+ if (!_PyArg_ParseTupleAndKeywordsFast(
+ args, kw, &_parser,
+ &params.self,
+ &params.target,
+ &params.value))
+ {
+ goto fail;
+ }
+
+ wmManipulator *mpr = ((BPy_StructRNA *)params.self)->ptr.data;
+
+ wmManipulatorProperty *mpr_prop =
+ WM_manipulator_target_property_find(mpr, params.target);
+ if (mpr_prop == NULL) {
+ PyErr_Format(PyExc_ValueError,
+ "Manipulator target property '%s.%s' not found",
+ mpr->type->idname, params.target);
+ goto fail;
+ }
+
+ const int array_len = WM_manipulator_target_property_array_length(mpr, mpr_prop);
+ switch (mpr_prop->type->data_type) {
+ case PROP_FLOAT:
+ {
+ if (array_len != 0) {
+ float *value = BLI_array_alloca(value, array_len);
+ if (PyC_AsArray(value, params.value, mpr_prop->type->array_length, &PyFloat_Type, false,
+ "Manipulator target property array") == -1)
+ {
+ goto fail;
+ }
+ WM_manipulator_target_property_value_set_array(BPy_GetContext(), mpr, mpr_prop, value);
+ }
+ else {
+ float value;
+ if ((value = PyFloat_AsDouble(params.value)) == -1.0f && PyErr_Occurred()) {
+ goto fail;
+ }
+ WM_manipulator_target_property_value_set(BPy_GetContext(), mpr, mpr_prop, value);
+ }
+ Py_RETURN_NONE;
+ }
+ default:
+ {
+ PyErr_SetString(PyExc_RuntimeError, "Not yet supported type");
+ goto fail;
+ }
+ }
+
+fail:
+ return NULL;
+}
+
+
+PyDoc_STRVAR(bpy_manipulator_target_get_range_doc,
+".. method:: target_get_range(target):\n"
+"\n"
+" Get the range for this target property.\n"
+"\n"
+" :arg target: Target property name.\n"
+" :Get the range for this target property"
+" :return: The range of this property (min, max).\n"
+" :rtype: tuple pair.\n"
+);
+static PyObject *bpy_manipulator_target_get_range(PyObject *UNUSED(self), PyObject *args, PyObject *kw)
+{
+ struct {
+ PyObject *self;
+ char *target;
+ } params = {
+ .self = NULL,
+ .target = NULL,
+ };
+
+ static const char * const _keywords[] = {"self", "target", NULL};
+ static _PyArg_Parser _parser = {"Os:target_get_range", _keywords, 0};
+ if (!_PyArg_ParseTupleAndKeywordsFast(
+ args, kw, &_parser,
+ &params.self,
+ &params.target))
+ {
+ goto fail;
+ }
+
+ wmManipulator *mpr = ((BPy_StructRNA *)params.self)->ptr.data;
+
+ wmManipulatorProperty *mpr_prop =
+ WM_manipulator_target_property_find(mpr, params.target);
+ if (mpr_prop == NULL) {
+ PyErr_Format(PyExc_ValueError,
+ "Manipulator target property '%s.%s' not found",
+ mpr->type->idname, params.target);
+ goto fail;
+ }
+
+ switch (mpr_prop->type->data_type) {
+ case PROP_FLOAT:
+ {
+ float range[2];
+ WM_manipulator_target_property_range_get(mpr, mpr_prop, range);
+ return PyC_Tuple_PackArray_F32(range, 2);
+ }
+ default:
+ {
+ PyErr_SetString(PyExc_RuntimeError, "Not yet supported type");
+ goto fail;
+ }
+ }
+
+fail:
+ return NULL;
+}
+
+/** \} */
+
+int BPY_rna_manipulator_module(PyObject *mod_par)
+{
+ static PyMethodDef method_def_array[] = {
+ /* Manipulator Target Property Define API */
+ {"target_set_handler", (PyCFunction)bpy_manipulator_target_set_handler,
+ METH_VARARGS | METH_KEYWORDS, bpy_manipulator_target_set_handler_doc},
+ /* Manipulator Target Property Access API */
+ {"target_get_value", (PyCFunction)bpy_manipulator_target_get_value,
+ METH_VARARGS | METH_KEYWORDS, bpy_manipulator_target_get_value_doc},
+ {"target_set_value", (PyCFunction)bpy_manipulator_target_set_value,
+ METH_VARARGS | METH_KEYWORDS, bpy_manipulator_target_set_value_doc},
+ {"target_get_range", (PyCFunction)bpy_manipulator_target_get_range,
+ METH_VARARGS | METH_KEYWORDS, bpy_manipulator_target_get_range_doc},
+ /* no sentinel needed. */
+ };
+
+ for (int i = 0; i < ARRAY_SIZE(method_def_array); i++) {
+ PyMethodDef *m = &method_def_array[i];
+ PyObject *func = PyCFunction_New(m, NULL);
+ PyObject *func_inst = PyInstanceMethod_New(func);
+ char name_prefix[128];
+ PyOS_snprintf(name_prefix, sizeof(name_prefix), "_rna_manipulator_%s", m->ml_name);
+ /* TODO, return a type that binds nearly to a method. */
+ PyModule_AddObject(mod_par, name_prefix, func_inst);
+ }
+
+ return 0;
+}
diff --git a/source/blender/python/intern/bpy_rna_manipulator.h b/source/blender/python/intern/bpy_rna_manipulator.h
new file mode 100644
index 00000000000..b6f3a2e651d
--- /dev/null
+++ b/source/blender/python/intern/bpy_rna_manipulator.h
@@ -0,0 +1,32 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Bastien Montagne
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/python/intern/bpy_rna_manipulator.h
+ * \ingroup pythonintern
+ */
+
+#ifndef __BPY_RNA_MANIPULATOR_H__
+#define __BPY_RNA_MANIPULATOR_H__
+
+int BPY_rna_manipulator_module(PyObject *);
+
+#endif /* __BPY_RNA_MANIPULATOR_H__ */
diff --git a/source/blender/python/intern/gpu.c b/source/blender/python/intern/gpu.c
index 60ce00c583e..a7a0ae78f26 100644
--- a/source/blender/python/intern/gpu.c
+++ b/source/blender/python/intern/gpu.c
@@ -337,6 +337,14 @@ PyObject *GPU_initPython(void)
PyDict_SetItem(sys_modules, PyModule_GetNameObject(submodule), submodule);
Py_INCREF(submodule);
+ PyModule_AddObject(module, "matrix", (submodule = BPyInit_gpu_matrix()));
+ PyDict_SetItem(sys_modules, PyModule_GetNameObject(submodule), submodule);
+ Py_INCREF(submodule);
+
+ PyModule_AddObject(module, "select", (submodule = BPyInit_gpu_select()));
+ PyDict_SetItem(sys_modules, PyModule_GetNameObject(submodule), submodule);
+ Py_INCREF(submodule);
+
PyDict_SetItem(PyImport_GetModuleDict(), PyModule_GetNameObject(module), module);
return module;
}
diff --git a/source/blender/python/intern/gpu.h b/source/blender/python/intern/gpu.h
index 0da44a4eb87..92841db9027 100644
--- a/source/blender/python/intern/gpu.h
+++ b/source/blender/python/intern/gpu.h
@@ -37,5 +37,7 @@
PyObject *GPU_initPython(void);
PyObject *BPyInit_gpu_offscreen(void);
+PyObject *BPyInit_gpu_matrix(void);
+PyObject *BPyInit_gpu_select(void);
#endif /* __GPU_H__ */
diff --git a/source/blender/python/intern/gpu_offscreen.c b/source/blender/python/intern/gpu_offscreen.c
index 3c340d14e3f..91d407d18a8 100644
--- a/source/blender/python/intern/gpu_offscreen.c
+++ b/source/blender/python/intern/gpu_offscreen.c
@@ -162,12 +162,15 @@ PyDoc_STRVAR(pygpu_offscreen_draw_view3d_doc,
);
static PyObject *pygpu_offscreen_draw_view3d(BPy_GPUOffScreen *self, PyObject *args, PyObject *kwds)
{
- static const char *kwlist[] = {"scene", "view3d", "region", "projection_matrix", "modelview_matrix", NULL};
+ /* TODO: This doesn't work currently because of eval_ctx. */
+#if 0
+ static const char *kwlist[] = {"scene", "view_layer", "view3d", "region", "projection_matrix", "modelview_matrix", NULL};
MatrixObject *py_mat_modelview, *py_mat_projection;
- PyObject *py_scene, *py_region, *py_view3d;
+ PyObject *py_scene, *py_view_layer, *py_region, *py_view3d;
Scene *scene;
+ ViewLayer *view_layer;
View3D *v3d;
ARegion *ar;
GPUFX *fx;
@@ -177,13 +180,14 @@ static PyObject *pygpu_offscreen_draw_view3d(BPy_GPUOffScreen *self, PyObject *a
BPY_GPU_OFFSCREEN_CHECK_OBJ(self);
if (!PyArg_ParseTupleAndKeywords(
- args, kwds, "OOOO&O&:draw_view3d", (char **)(kwlist),
- &py_scene, &py_view3d, &py_region,
+ args, kwds, "OOOOO&O&:draw_view3d", (char **)(kwlist),
+ &py_scene, &py_view_layer, &py_view3d, &py_region,
Matrix_Parse4x4, &py_mat_projection,
Matrix_Parse4x4, &py_mat_modelview) ||
- (!(scene = PyC_RNA_AsPointer(py_scene, "Scene")) ||
- !(v3d = PyC_RNA_AsPointer(py_view3d, "SpaceView3D")) ||
- !(ar = PyC_RNA_AsPointer(py_region, "Region"))))
+ (!(scene = PyC_RNA_AsPointer(py_scene, "Scene")) ||
+ !(view_layer = PyC_RNA_AsPointer(py_view_layer, "ViewLayer")) ||
+ !(v3d = PyC_RNA_AsPointer(py_view3d, "SpaceView3D")) ||
+ !(ar = PyC_RNA_AsPointer(py_region, "Region"))))
{
return NULL;
}
@@ -192,14 +196,14 @@ static PyObject *pygpu_offscreen_draw_view3d(BPy_GPUOffScreen *self, PyObject *a
fx_settings = v3d->fx_settings; /* full copy */
- ED_view3d_draw_offscreen_init(scene, v3d);
+ ED_view3d_draw_offscreen_init(scene, view_layer, v3d);
rv3d_mats = ED_view3d_mats_rv3d_backup(ar->regiondata);
GPU_offscreen_bind(self->ofs, true); /* bind */
ED_view3d_draw_offscreen(
- scene, v3d, ar, GPU_offscreen_width(self->ofs), GPU_offscreen_height(self->ofs),
+ scene, view_layer, v3d, ar, GPU_offscreen_width(self->ofs), GPU_offscreen_height(self->ofs),
(float(*)[4])py_mat_modelview->matrix, (float(*)[4])py_mat_projection->matrix,
false, true, true, "",
fx, &fx_settings,
@@ -212,6 +216,10 @@ static PyObject *pygpu_offscreen_draw_view3d(BPy_GPUOffScreen *self, PyObject *a
MEM_freeN(rv3d_mats);
Py_RETURN_NONE;
+#else
+ UNUSED_VARS(self, args, kwds);
+#endif
+ return NULL;
}
PyDoc_STRVAR(pygpu_offscreen_free_doc,
@@ -346,7 +354,7 @@ static PyObject *pygpu_offscreen_new(PyObject *UNUSED(self), PyObject *args, PyO
return NULL;
}
- ofs = GPU_offscreen_create(width, height, samples, err_out);
+ ofs = GPU_offscreen_create(width, height, samples, false, err_out);
if (ofs == NULL) {
PyErr_Format(PyExc_RuntimeError,
diff --git a/source/blender/python/intern/gpu_py_matrix.c b/source/blender/python/intern/gpu_py_matrix.c
new file mode 100644
index 00000000000..68b08dfb324
--- /dev/null
+++ b/source/blender/python/intern/gpu_py_matrix.c
@@ -0,0 +1,552 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/python/intern/gpu_py_matrix.c
+ * \ingroup pythonintern
+ *
+ * This file defines the gpu.matrix stack API.
+ *
+ * \warning While these functions attempt to ensure correct stack usage.
+ * Mixing Python and C functions may still crash on invalid use.
+ */
+
+#include <Python.h>
+
+
+#include "BLI_utildefines.h"
+
+#include "../mathutils/mathutils.h"
+
+#include "../generic/py_capi_utils.h"
+
+#include "gpu.h"
+
+#define USE_GPU_PY_MATRIX_API
+#include "GPU_matrix.h"
+#undef USE_GPU_PY_MATRIX_API
+
+/* -------------------------------------------------------------------- */
+/** \name Helper Functions
+ * \{ */
+
+static bool pygpu_stack_is_push_model_view_ok_or_error(void)
+{
+ if (GPU_matrix_stack_level_get_model_view() >= GPU_PY_MATRIX_STACK_LEN) {
+ PyErr_SetString(PyExc_RuntimeError,
+ "Maximum model-view stack depth " STRINGIFY(GPU_PY_MATRIX_STACK_DEPTH) " reached");
+ return false;
+ }
+ return true;
+}
+
+static bool pygpu_stack_is_push_projection_ok_or_error(void)
+{
+ if (GPU_matrix_stack_level_get_projection() >= GPU_PY_MATRIX_STACK_LEN) {
+ PyErr_SetString(PyExc_RuntimeError,
+ "Maximum projection stack depth " STRINGIFY(GPU_PY_MATRIX_STACK_DEPTH) " reached");
+ return false;
+ }
+ return true;
+}
+
+static bool pygpu_stack_is_pop_model_view_ok_or_error(void)
+{
+ if (GPU_matrix_stack_level_get_model_view() == 0) {
+ PyErr_SetString(PyExc_RuntimeError,
+ "Minimum model-view stack depth reached");
+ return false;
+ }
+ return true;
+}
+
+static bool pygpu_stack_is_pop_projection_ok_or_error(void)
+{
+ if (GPU_matrix_stack_level_get_projection() == 0) {
+ PyErr_SetString(PyExc_RuntimeError,
+ "Minimum projection stack depth reached");
+ return false;
+ }
+ return true;
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Manage Stack
+ * \{ */
+
+PyDoc_STRVAR(pygpu_matrix_push_doc,
+"push()\n"
+"\n"
+" Add to the model-view matrix stack.\n"
+);
+static PyObject *pygpu_matrix_push(PyObject *UNUSED(self))
+{
+ if (!pygpu_stack_is_push_model_view_ok_or_error()) {
+ return NULL;
+ }
+ gpuPushMatrix();
+ Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(pygpu_matrix_pop_doc,
+"pop()\n"
+"\n"
+" Remove the last model-view matrix from the stack.\n"
+);
+static PyObject *pygpu_matrix_pop(PyObject *UNUSED(self))
+{
+ if (!pygpu_stack_is_pop_model_view_ok_or_error()) {
+ return NULL;
+ }
+ gpuPopMatrix();
+ Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(pygpu_matrix_push_projection_doc,
+"push_projection()\n"
+"\n"
+" Add to the projection matrix stack.\n"
+);
+static PyObject *pygpu_matrix_push_projection(PyObject *UNUSED(self))
+{
+ if (!pygpu_stack_is_push_projection_ok_or_error()) {
+ return NULL;
+ }
+ gpuPushProjectionMatrix();
+ Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(pygpu_matrix_pop_projection_doc,
+"pop_projection()\n"
+"\n"
+" Remove the last projection matrix from the stack.\n"
+);
+static PyObject *pygpu_matrix_pop_projection(PyObject *UNUSED(self))
+{
+ if (!pygpu_stack_is_pop_projection_ok_or_error()) {
+ return NULL;
+ }
+ gpuPopProjectionMatrix();
+ Py_RETURN_NONE;
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Stack (Context Manager)
+ *
+ * Safer alternative to ensure balanced push/pop calls.
+ *
+ * \{ */
+
+typedef struct {
+ PyObject_HEAD /* required python macro */
+ int type;
+ int level;
+} BPy_GPU_MatrixStackContext;
+
+enum {
+ PYGPU_MATRIX_TYPE_MODEL_VIEW = 1,
+ PYGPU_MATRIX_TYPE_PROJECTION = 2,
+};
+
+static PyObject *pygpu_matrix_stack_context_enter(BPy_GPU_MatrixStackContext *self);
+static PyObject *pygpu_matrix_stack_context_exit(BPy_GPU_MatrixStackContext *self, PyObject *args);
+
+static PyMethodDef pygpu_matrix_stack_context_methods[] = {
+ {"__enter__", (PyCFunction)pygpu_matrix_stack_context_enter, METH_NOARGS},
+ {"__exit__", (PyCFunction)pygpu_matrix_stack_context_exit, METH_VARARGS},
+ {NULL}
+};
+
+static PyTypeObject pygpu_matrix_stack_context_Type = {
+ PyVarObject_HEAD_INIT(NULL, 0)
+ .tp_name = "GPUMatrixStackContext",
+ .tp_basicsize = sizeof(BPy_GPU_MatrixStackContext),
+ .tp_flags = Py_TPFLAGS_DEFAULT,
+ .tp_methods = pygpu_matrix_stack_context_methods,
+};
+
+static PyObject *pygpu_matrix_stack_context_enter(BPy_GPU_MatrixStackContext *self)
+{
+ /* sanity - should never happen */
+ if (self->level != -1) {
+ PyErr_SetString(PyExc_RuntimeError, "Already in use");
+ return NULL;
+ }
+
+ if (self->type == PYGPU_MATRIX_TYPE_MODEL_VIEW) {
+ if (!pygpu_stack_is_push_model_view_ok_or_error()) {
+ return NULL;
+ }
+ gpuPushMatrix();
+ self->level = GPU_matrix_stack_level_get_model_view();
+ }
+ else if (self->type == PYGPU_MATRIX_TYPE_PROJECTION) {
+ if (!pygpu_stack_is_push_projection_ok_or_error()) {
+ return NULL;
+ }
+ gpuPushProjectionMatrix();
+ self->level = GPU_matrix_stack_level_get_projection();
+ }
+ else {
+ BLI_assert(0);
+ }
+ Py_RETURN_NONE;
+}
+
+static PyObject *pygpu_matrix_stack_context_exit(BPy_GPU_MatrixStackContext *self, PyObject *UNUSED(args))
+{
+ /* sanity - should never happen */
+ if (self->level == -1) {
+ fprintf(stderr, "Not yet in use\n");
+ goto finally;
+ }
+
+ if (self->type == PYGPU_MATRIX_TYPE_MODEL_VIEW) {
+ const int level = GPU_matrix_stack_level_get_model_view();
+ if (level != self->level) {
+ fprintf(stderr, "Level push/pop mismatch, expected %d, got %d\n", self->level, level);
+ }
+ if (level != 0) {
+ gpuPopMatrix();
+ }
+ }
+ else if (self->type == PYGPU_MATRIX_TYPE_PROJECTION) {
+ const int level = GPU_matrix_stack_level_get_projection();
+ if (level != self->level) {
+ fprintf(stderr, "Level push/pop mismatch, expected %d, got %d", self->level, level);
+ }
+ if (level != 0) {
+ gpuPopProjectionMatrix();
+ }
+ }
+ else {
+ BLI_assert(0);
+ }
+finally:
+ Py_RETURN_NONE;
+}
+
+static PyObject *pygpu_matrix_push_pop_impl(int type)
+{
+ BPy_GPU_MatrixStackContext *ret = PyObject_New(BPy_GPU_MatrixStackContext, &pygpu_matrix_stack_context_Type);
+ ret->type = type;
+ ret->level = -1;
+ return (PyObject *)ret;
+}
+
+PyDoc_STRVAR(pygpu_matrix_push_pop_doc,
+"push_pop()\n"
+"\n"
+" Context manager to ensure balanced push/pop calls, even in the case of an error.\n"
+);
+static PyObject *pygpu_matrix_push_pop(PyObject *UNUSED(self))
+{
+ return pygpu_matrix_push_pop_impl(PYGPU_MATRIX_TYPE_MODEL_VIEW);
+}
+
+PyDoc_STRVAR(pygpu_matrix_push_pop_projection_doc,
+"push_pop_projection()\n"
+"\n"
+" Context manager to ensure balanced push/pop calls, even in the case of an error.\n"
+);
+static PyObject *pygpu_matrix_push_pop_projection(PyObject *UNUSED(self))
+{
+ return pygpu_matrix_push_pop_impl(PYGPU_MATRIX_TYPE_PROJECTION);
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Manipulate State
+ * \{ */
+
+PyDoc_STRVAR(pygpu_matrix_multiply_matrix_doc,
+"multiply_matrix(matrix)\n"
+"\n"
+" Multiply the current stack matrix.\n"
+"\n"
+" :param matrix: A 4x4 matrix.\n"
+" :type matrix: :class:`mathutils.Matrix`\n"
+);
+static PyObject *pygpu_matrix_multiply_matrix(PyObject *UNUSED(self), PyObject *value)
+{
+ MatrixObject *pymat;
+ if (!Matrix_Parse4x4(value, &pymat)) {
+ return NULL;
+ }
+ gpuMultMatrix(pymat->matrix);
+ Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(pygpu_matrix_scale_doc,
+"scale(scale)\n"
+"\n"
+" Scale the current stack matrix.\n"
+"\n"
+" :param scale: Scale the current stack matrix.\n"
+" :type scale: sequence of 2 or 3 floats\n"
+);
+static PyObject *pygpu_matrix_scale(PyObject *UNUSED(self), PyObject *value)
+{
+ float scale[3];
+ int len;
+ if ((len = mathutils_array_parse(scale, 2, 3, value, "gpu.matrix.scale(): invalid vector arg")) == -1) {
+ return NULL;
+ }
+ if (len == 2) {
+ gpuScale2fv(scale);
+ }
+ else {
+ gpuScale3fv(scale);
+ }
+ Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(pygpu_matrix_scale_uniform_doc,
+"scale_uniform(scale)\n"
+"\n"
+" :param scale: Scale the current stack matrix.\n"
+" :type scale: sequence of 2 or 3 floats\n"
+);
+static PyObject *pygpu_matrix_scale_uniform(PyObject *UNUSED(self), PyObject *value)
+{
+ float scalar;
+ if ((scalar = PyFloat_AsDouble(value)) == -1.0f && PyErr_Occurred()) {
+ PyErr_Format(PyExc_TypeError,
+ "expected a number, not %.200s",
+ Py_TYPE(value)->tp_name);
+ return NULL;
+ }
+ gpuScaleUniform(scalar);
+ Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(pygpu_matrix_translate_doc,
+"translate(offset)\n"
+"\n"
+" Scale the current stack matrix.\n"
+"\n"
+" :param offset: Translate the current stack matrix.\n"
+" :type offset: sequence of 2 or 3 floats\n"
+);
+static PyObject *pygpu_matrix_translate(PyObject *UNUSED(self), PyObject *value)
+{
+ float offset[3];
+ int len;
+ if ((len = mathutils_array_parse(offset, 2, 3, value, "gpu.matrix.translate(): invalid vector arg")) == -1) {
+ return NULL;
+ }
+ if (len == 2) {
+ gpuTranslate2fv(offset);
+ }
+ else {
+ gpuTranslate3fv(offset);
+ }
+ Py_RETURN_NONE;
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Write State
+ * \{ */
+
+PyDoc_STRVAR(pygpu_matrix_reset_doc,
+"reset()\n"
+"\n"
+" Empty stack and set to identity.\n"
+);
+static PyObject *pygpu_matrix_reset(PyObject *UNUSED(self))
+{
+ gpuMatrixReset();
+ Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(pygpu_matrix_load_identity_doc,
+"load_identity()\n"
+"\n"
+" Empty stack and set to identity.\n"
+);
+static PyObject *pygpu_matrix_load_identity(PyObject *UNUSED(self))
+{
+ gpuLoadIdentity();
+ Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(pygpu_matrix_load_matrix_doc,
+"load_matrix(matrix)\n"
+"\n"
+" Load a matrix into the stack.\n"
+"\n"
+" :param matrix: A 4x4 matrix.\n"
+" :type matrix: :class:`mathutils.Matrix`\n"
+);
+static PyObject *pygpu_matrix_load_matrix(PyObject *UNUSED(self), PyObject *value)
+{
+ MatrixObject *pymat;
+ if (!Matrix_Parse4x4(value, &pymat)) {
+ return NULL;
+ }
+ gpuLoadMatrix(pymat->matrix);
+ Py_RETURN_NONE;
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Read State
+ * \{ */
+
+PyDoc_STRVAR(pygpu_matrix_get_projection_matrix_doc,
+"get_projection_matrix()\n"
+"\n"
+" Return a copy of the projection matrix.\n"
+"\n"
+" :return: A 4x4 projection matrix.\n"
+" :rtype: :class:`mathutils.Matrix`\n"
+);
+static PyObject *pygpu_matrix_get_projection_matrix(PyObject *UNUSED(self))
+{
+ float matrix[4][4];
+ gpuGetModelViewMatrix(matrix);
+ return Matrix_CreatePyObject(&matrix[0][0], 4, 4, NULL);
+}
+
+
+PyDoc_STRVAR(pygpu_matrix_get_modal_view_matrix_doc,
+"get_view_matrix()\n"
+"\n"
+" Return a copy of the view matrix.\n"
+"\n"
+" :return: A 4x4 view matrix.\n"
+" :rtype: :class:`mathutils.Matrix`\n"
+);
+static PyObject *pygpu_matrix_get_modal_view_matrix(PyObject *UNUSED(self))
+{
+ float matrix[4][4];
+ gpuGetProjectionMatrix(matrix);
+ return Matrix_CreatePyObject(&matrix[0][0], 4, 4, NULL);
+}
+
+PyDoc_STRVAR(pygpu_matrix_get_normal_matrix_doc,
+"get_normal_matrix()\n"
+"\n"
+" Return a copy of the normal matrix.\n"
+"\n"
+" :return: A 3x3 normal matrix.\n"
+" :rtype: :class:`mathutils.Matrix`\n"
+);
+static PyObject *pygpu_matrix_get_normal_matrix(PyObject *UNUSED(self))
+{
+ float matrix[3][3];
+ gpuGetNormalMatrix(matrix);
+ return Matrix_CreatePyObject(&matrix[0][0], 3, 3, NULL);
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Module
+ * \{ */
+
+static struct PyMethodDef BPy_GPU_matrix_methods[] = {
+ /* Manage Stack */
+ {"push", (PyCFunction)pygpu_matrix_push,
+ METH_NOARGS, pygpu_matrix_push_doc},
+ {"pop", (PyCFunction)pygpu_matrix_pop,
+ METH_NOARGS, pygpu_matrix_pop_doc},
+
+ {"push_projection", (PyCFunction)pygpu_matrix_push_projection,
+ METH_NOARGS, pygpu_matrix_push_projection_doc},
+ {"pop_projection", (PyCFunction)pygpu_matrix_pop_projection,
+ METH_NOARGS, pygpu_matrix_pop_projection_doc},
+
+ /* Stack (Context Manager) */
+ {"push_pop", (PyCFunction)pygpu_matrix_push_pop,
+ METH_NOARGS, pygpu_matrix_push_pop_doc},
+ {"push_pop_projection", (PyCFunction)pygpu_matrix_push_pop_projection,
+ METH_NOARGS, pygpu_matrix_push_pop_projection_doc},
+
+ /* Manipulate State */
+ {"multiply_matrix", (PyCFunction)pygpu_matrix_multiply_matrix,
+ METH_O, pygpu_matrix_multiply_matrix_doc},
+ {"scale", (PyCFunction)pygpu_matrix_scale,
+ METH_O, pygpu_matrix_scale_doc},
+ {"scale_uniform", (PyCFunction)pygpu_matrix_scale_uniform,
+ METH_O, pygpu_matrix_scale_uniform_doc},
+ {"translate", (PyCFunction)pygpu_matrix_translate,
+ METH_O, pygpu_matrix_translate_doc},
+
+ /* TODO */
+#if 0
+ {"rotate", (PyCFunction)pygpu_matrix_rotate,
+ METH_O, pygpu_matrix_rotate_doc},
+ {"rotate_axis", (PyCFunction)pygpu_matrix_rotate_axis,
+ METH_O, pygpu_matrix_rotate_axis_doc},
+ {"look_at", (PyCFunction)pygpu_matrix_look_at,
+ METH_O, pygpu_matrix_look_at_doc},
+#endif
+
+ /* Write State */
+ {"reset", (PyCFunction)pygpu_matrix_reset,
+ METH_NOARGS, pygpu_matrix_reset_doc},
+ {"load_identity", (PyCFunction)pygpu_matrix_load_identity,
+ METH_NOARGS, pygpu_matrix_load_identity_doc},
+ {"load_matrix", (PyCFunction)pygpu_matrix_load_matrix,
+ METH_O, pygpu_matrix_load_matrix_doc},
+
+ /* Read State */
+ {"get_projection_matrix", (PyCFunction)pygpu_matrix_get_projection_matrix,
+ METH_NOARGS, pygpu_matrix_get_projection_matrix_doc},
+ {"get_model_view_matrix", (PyCFunction)pygpu_matrix_get_modal_view_matrix,
+ METH_NOARGS, pygpu_matrix_get_modal_view_matrix_doc},
+ {"get_normal_matrix", (PyCFunction)pygpu_matrix_get_normal_matrix,
+ METH_NOARGS, pygpu_matrix_get_normal_matrix_doc},
+
+ {NULL, NULL, 0, NULL}
+};
+
+PyDoc_STRVAR(BPy_GPU_matrix_doc,
+"This module provides access to the matrix stack."
+);
+static PyModuleDef BPy_GPU_matrix_module_def = {
+ PyModuleDef_HEAD_INIT,
+ .m_name = "gpu.matrix",
+ .m_doc = BPy_GPU_matrix_doc,
+ .m_methods = BPy_GPU_matrix_methods,
+};
+
+PyObject *BPyInit_gpu_matrix(void)
+{
+ PyObject *submodule;
+
+ submodule = PyModule_Create(&BPy_GPU_matrix_module_def);
+
+ if (PyType_Ready(&pygpu_matrix_stack_context_Type) < 0) {
+ return NULL;
+ }
+
+ return submodule;
+}
+
+/** \} */
diff --git a/source/blender/python/intern/gpu_py_select.c b/source/blender/python/intern/gpu_py_select.c
new file mode 100644
index 00000000000..f570c4cdae2
--- /dev/null
+++ b/source/blender/python/intern/gpu_py_select.c
@@ -0,0 +1,92 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/python/intern/gpu_py_select.c
+ * \ingroup pythonintern
+ *
+ * This file defines the gpu.select API.
+ *
+ * \note Currently only used for manipulator selection,
+ * will need to add begin/end and a way to access the hits.
+ */
+
+#include <Python.h>
+
+#include "BLI_utildefines.h"
+
+#include "../generic/py_capi_utils.h"
+
+#include "gpu.h"
+
+#include "GPU_select.h"
+
+/* -------------------------------------------------------------------- */
+/** \name Methods
+ * \{ */
+
+PyDoc_STRVAR(pygpu_select_load_id_doc,
+"load_id(id)\n"
+"\n"
+" Set the selection ID.\n"
+"\n"
+" :param id: Number (32-bit unsigned int).\n"
+" :type select: int\n"
+);
+static PyObject *pygpu_select_load_id(PyObject *UNUSED(self), PyObject *value)
+{
+ uint id;
+ if ((id = PyC_Long_AsU32(value)) == (uint)-1) {
+ return NULL;
+ }
+ GPU_select_load_id(id);
+ Py_RETURN_NONE;
+}
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Module
+ * \{ */
+
+static struct PyMethodDef BPy_GPU_select_methods[] = {
+ /* Manage Stack */
+ {"load_id", (PyCFunction)pygpu_select_load_id, METH_O, pygpu_select_load_id_doc},
+ {NULL, NULL, 0, NULL}
+};
+
+PyDoc_STRVAR(BPy_GPU_select_doc,
+"This module provides access to selection."
+);
+static PyModuleDef BPy_GPU_select_module_def = {
+ PyModuleDef_HEAD_INIT,
+ .m_name = "gpu.select",
+ .m_doc = BPy_GPU_select_doc,
+ .m_methods = BPy_GPU_select_methods,
+};
+
+PyObject *BPyInit_gpu_select(void)
+{
+ PyObject *submodule;
+
+ submodule = PyModule_Create(&BPy_GPU_select_module_def);
+
+ return submodule;
+}
+
+/** \} */
diff --git a/source/blender/python/mathutils/mathutils_bvhtree.c b/source/blender/python/mathutils/mathutils_bvhtree.c
index 22e7bf3dd27..ba0b6eb11a5 100644
--- a/source/blender/python/mathutils/mathutils_bvhtree.c
+++ b/source/blender/python/mathutils/mathutils_bvhtree.c
@@ -1049,6 +1049,8 @@ static DerivedMesh *bvh_get_derived_mesh(
const char *funcname, struct Scene *scene, Object *ob,
bool use_deform, bool use_render, bool use_cage)
{
+ /* TODO: This doesn't work currently because of eval_ctx. */
+#if 0
/* we only need minimum mesh data for topology and vertex locations */
CustomDataMask mask = CD_MASK_BAREMESH;
@@ -1096,6 +1098,11 @@ static DerivedMesh *bvh_get_derived_mesh(
}
}
}
+#else
+ UNUSED_VARS(funcname, scene, ob, use_deform, use_render, use_cage);
+#endif
+
+ return NULL;
}
PyDoc_STRVAR(C_BVHTree_FromObject_doc,
diff --git a/source/blender/render/CMakeLists.txt b/source/blender/render/CMakeLists.txt
index 27ec6bf8ba6..5cbc907d9c6 100644
--- a/source/blender/render/CMakeLists.txt
+++ b/source/blender/render/CMakeLists.txt
@@ -36,6 +36,7 @@ set(INC
../makesrna
../nodes
../physics
+ ../draw
../../../intern/atomic
../../../intern/guardedalloc
../../../intern/mikktspace
diff --git a/source/blender/render/extern/include/RE_engine.h b/source/blender/render/extern/include/RE_engine.h
index 321eda0175f..f789ab702fe 100644
--- a/source/blender/render/extern/include/RE_engine.h
+++ b/source/blender/render/extern/include/RE_engine.h
@@ -39,6 +39,9 @@
struct bNode;
struct bNodeTree;
+struct Depsgraph;
+struct IDProperty;
+struct Main;
struct Object;
struct Render;
struct RenderData;
@@ -63,6 +66,7 @@ struct BakePixel;
#define RE_USE_TEXTURE_PREVIEW 128
#define RE_USE_SHADING_NODES_CUSTOM 256
#define RE_USE_SPHERICAL_STEREO 512
+#define RE_USE_LEGACY_PIPELINE 1024 /* XXX Temporary flag, to be removed once draw manager is finished. */
/* RenderEngine.flag */
#define RE_ENGINE_ANIMATION 1
@@ -88,15 +92,22 @@ typedef struct RenderEngineType {
char name[64];
int flag;
- void (*update)(struct RenderEngine *engine, struct Main *bmain, struct Scene *scene);
- void (*render)(struct RenderEngine *engine, struct Scene *scene);
- void (*bake)(struct RenderEngine *engine, struct Scene *scene, struct Object *object, const int pass_type, const int pass_filter, const int object_id, const struct BakePixel *pixel_array, const int num_pixels, const int depth, void *result);
+ void (*update)(struct RenderEngine *engine, struct Main *bmain, struct Depsgraph *depsgraph, struct Scene *scene);
+ void (*render_to_image)(struct RenderEngine *engine, struct Depsgraph *depsgraph);
+ void (*bake)(struct RenderEngine *engine, struct Scene *scene, struct Object *object, const int pass_type,
+ const int pass_filter, const int object_id, const struct BakePixel *pixel_array, const int num_pixels,
+ const int depth, void *result);
void (*view_update)(struct RenderEngine *engine, const struct bContext *context);
- void (*view_draw)(struct RenderEngine *engine, const struct bContext *context);
+ void (*render_to_view)(struct RenderEngine *engine, const struct bContext *context);
void (*update_script_node)(struct RenderEngine *engine, struct bNodeTree *ntree, struct bNode *node);
- void (*update_render_passes)(struct RenderEngine *engine, struct Scene *scene, struct SceneRenderLayer *srl);
+ void (*update_render_passes)(struct RenderEngine *engine, struct Scene *scene, struct ViewLayer *view_layer);
+
+ void (*collection_settings_create)(struct RenderEngine *engine, struct IDProperty *props);
+ void (*render_settings_create)(struct RenderEngine *engine, struct IDProperty *props);
+
+ struct DrawEngineType *draw_engine;
/* RNA integration */
ExtensionRNA ext;
@@ -163,19 +174,25 @@ bool RE_engine_is_external(struct Render *re);
void RE_engine_frame_set(struct RenderEngine *engine, int frame, float subframe);
-void RE_engine_register_pass(struct RenderEngine *engine, struct Scene *scene, struct SceneRenderLayer *srl,
+void RE_engine_register_pass(struct RenderEngine *engine, struct Scene *scene, struct ViewLayer *view_layer,
const char *name, int channels, const char *chanid, int type);
/* Engine Types */
void RE_engines_init(void);
void RE_engines_exit(void);
+void RE_engines_register(struct Main *bmain, RenderEngineType *render_type);
+
+bool RE_engine_is_opengl(RenderEngineType *render_type);
RenderEngineType *RE_engines_find(const char *idname);
rcti* RE_engine_get_current_tiles(struct Render *re, int *r_total_tiles, bool *r_needs_free);
struct RenderData *RE_engine_get_render_data(struct Render *re);
-void RE_bake_engine_set_engine_parameters(struct Render *re, struct Main *bmain, struct Scene *scene);
+void RE_bake_engine_set_engine_parameters(
+ struct Render *re, struct Main *bmain, struct Depsgraph *graph, struct Scene *scene);
+
+struct ViewLayer *RE_engine_get_view_layer(struct Render *re);
#endif /* __RE_ENGINE_H__ */
diff --git a/source/blender/render/extern/include/RE_multires_bake.h b/source/blender/render/extern/include/RE_multires_bake.h
index c1c5fc4a04d..901c1c1d05d 100644
--- a/source/blender/render/extern/include/RE_multires_bake.h
+++ b/source/blender/render/extern/include/RE_multires_bake.h
@@ -43,6 +43,12 @@ typedef struct MultiresBakeRender {
short mode;
bool use_lores_mesh; /* Use low-resolution mesh when baking displacement maps */
+ /* material aligned image array (for per-face bake image) */
+ struct {
+ Image **array;
+ int len;
+ } ob_image;
+
int number_of_rays; /* Number of rays to be cast when doing AO baking */
float bias; /* Bias between object and start ray point when doing AO baking */
diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h
index bb056675887..0557efccc2f 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -37,6 +37,8 @@
struct bMovieHandle;
struct bNodeTree;
+struct Depsgraph;
+struct EvaluationContext;
struct Image;
struct ImageFormatData;
struct Main;
@@ -46,9 +48,10 @@ struct RenderData;
struct RenderResult;
struct ReportList;
struct Scene;
-struct SceneRenderLayer;
+struct ViewLayer;
struct EnvMap;
struct StampData;
+struct ViewRender;
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/* this include is what is exposed of render to outside world */
@@ -105,12 +108,8 @@ typedef struct RenderLayer {
/* copy of RenderData */
char name[RE_MAXNAME];
- unsigned int lay, lay_zmask, lay_exclude;
int layflag, passflag, pass_xor;
- struct Material *mat_override;
- struct Group *light_override;
-
/* MULTIVIEW_TODO: acolrect and scolrect are not supported by multiview at the moment.
* If they are really required they should be in RenderView instead */
@@ -241,7 +240,8 @@ struct RenderPass *RE_create_gp_pass(struct RenderResult *rr, const char *layern
/* obligatory initialize call, disprect is optional */
void RE_InitState(struct Render *re, struct Render *source, struct RenderData *rd,
- struct SceneRenderLayer *srl,
+ struct ListBase *render_layers, const int active_layer,
+ struct ViewRender *view_render, struct ViewLayer *view_layer,
int winx, int winy, rcti *disprect);
void RE_ChangeResolution(struct Render *re, int winx, int winy, rcti *disprect);
void RE_ChangeModeFlag(struct Render *re, int flag, bool clear);
@@ -250,6 +250,7 @@ void RE_ChangeModeFlag(struct Render *re, int flag, bool clear);
struct Object *RE_GetCamera(struct Render *re); /* return camera override if set */
void RE_SetOverrideCamera(struct Render *re, struct Object *camera);
void RE_SetCamera(struct Render *re, struct Object *camera);
+void RE_SetDepsgraph(struct Render *re, struct Depsgraph *graph);
void RE_SetEnvmapCamera(struct Render *re, struct Object *cam_ob, float viewscale, float clipsta, float clipend);
void RE_SetWindow(struct Render *re, const rctf *viewplane, float clipsta, float clipend);
void RE_SetOrtho(struct Render *re, const rctf *viewplane, float clipsta, float clipend);
@@ -289,7 +290,7 @@ bool RE_WriteRenderViewsMovie(
/* only RE_NewRender() needed, main Blender render calls */
void RE_BlenderFrame(struct Render *re, struct Main *bmain, struct Scene *scene,
- struct SceneRenderLayer *srl, struct Object *camera_override,
+ struct ViewLayer *view_layer, struct Object *camera_override,
unsigned int lay_override, int frame, const bool write_still);
void RE_BlenderAnim(struct Render *re, struct Main *bmain, struct Scene *scene, struct Object *camera_override,
unsigned int lay_override, int sfra, int efra, int tfra);
@@ -301,11 +302,13 @@ void RE_RenderFreestyleExternal(struct Render *re);
void RE_SetActiveRenderView(struct Render *re, const char *viewname);
const char *RE_GetActiveRenderView(struct Render *re);
+void RE_SetEngineByID(struct Render *re, const char *engine_id);
+
/* error reporting */
void RE_SetReports(struct Render *re, struct ReportList *reports);
/* main preview render call */
-void RE_PreviewRender(struct Render *re, struct Main *bmain, struct Scene *scene);
+void RE_PreviewRender(struct Render *re, struct Main *bmain, struct Scene *scene, struct ViewRender *render_view);
bool RE_ReadRenderResult(struct Scene *scene, struct Scene *scenode);
bool RE_WriteRenderResult(
@@ -372,6 +375,7 @@ void RE_DataBase_GetView(struct Render *re, float mat[4][4]);
void RE_GetCameraWindow(struct Render *re, struct Object *camera, int frame, float mat[4][4]);
void RE_GetCameraModelMatrix(struct Render *re, struct Object *camera, float r_mat[4][4]);
struct Scene *RE_GetScene(struct Render *re);
+struct EvaluationContext *RE_GetEvalCtx(struct Render *re);
bool RE_force_single_renderlayer(struct Scene *scene);
bool RE_is_rendering_allowed(struct Scene *scene, struct Object *camera_override, struct ReportList *reports);
diff --git a/source/blender/render/extern/include/RE_render_ext.h b/source/blender/render/extern/include/RE_render_ext.h
index 1779ccc5d19..17b321fd3b4 100644
--- a/source/blender/render/extern/include/RE_render_ext.h
+++ b/source/blender/render/extern/include/RE_render_ext.h
@@ -41,6 +41,8 @@ struct DerivedMesh;
struct ImagePool;
struct MTex;
struct Scene;
+struct ViewLayer;
+struct Render;
/* render_texture.c */
/* used by particle.c, effect.c, editmesh_modes.c and brush.c, returns 1 if rgb, 0 otherwise */
@@ -70,17 +72,20 @@ struct PointDensity;
void RE_point_density_cache(
struct Scene *scene,
+ struct ViewLayer *view_layer,
struct PointDensity *pd,
const bool use_render_params);
void RE_point_density_minmax(
struct Scene *scene,
+ struct ViewLayer *view_layer,
struct PointDensity *pd,
const bool use_render_params,
float r_min[3], float r_max[3]);
void RE_point_density_sample(
struct Scene *scene,
+ struct ViewLayer *view_layer,
struct PointDensity *pd,
const int resolution,
const bool use_render_params,
diff --git a/source/blender/render/extern/include/RE_shader_ext.h b/source/blender/render/extern/include/RE_shader_ext.h
index b64c0c8fc52..0b392c122db 100644
--- a/source/blender/render/extern/include/RE_shader_ext.h
+++ b/source/blender/render/extern/include/RE_shader_ext.h
@@ -179,8 +179,6 @@ typedef struct ShadeInput {
unsigned int lay;
int layflag, passflag, combinedflag;
short object_pass_index;
- struct Group *light_override;
- struct Material *mat_override;
#ifdef RE_RAYCOUNTER
RayCounter raycounter;
diff --git a/source/blender/render/intern/include/render_types.h b/source/blender/render/intern/include/render_types.h
index 45206f21ae4..d24aae6ac97 100644
--- a/source/blender/render/intern/include/render_types.h
+++ b/source/blender/render/intern/include/render_types.h
@@ -186,11 +186,16 @@ struct Render {
/* shadow counter, detect shadow-reuse for shaders */
int shadowsamplenr[BLENDER_MAX_THREADS];
+ struct Depsgraph *depsgraph;
+
/* main, scene, and its full copy of renderdata and world */
struct Main *main;
Scene *scene;
RenderData r;
+ ListBase view_layers;
+ int active_view_layer;
World wrld;
+ ViewRender view_render;
struct Object *camera_override;
unsigned int lay, layer_override;
diff --git a/source/blender/render/intern/include/rendercore.h b/source/blender/render/intern/include/rendercore.h
index f4c4a50ac27..c01db7db53e 100644
--- a/source/blender/render/intern/include/rendercore.h
+++ b/source/blender/render/intern/include/rendercore.h
@@ -83,7 +83,7 @@ void zbufshade_sss_tile(struct RenderPart *pa);
int get_sample_layers(struct RenderPart *pa, struct RenderLayer *rl, struct RenderLayer **rlpp);
-void render_internal_update_passes(struct RenderEngine *engine, struct Scene *scene, struct SceneRenderLayer *srl);
+void render_internal_update_passes(struct RenderEngine *engine, struct Scene *scene, struct ViewLayer *view_layer);
/* -------- ray.c ------- */
diff --git a/source/blender/render/intern/include/renderpipeline.h b/source/blender/render/intern/include/renderpipeline.h
index c5d6e3b44b1..8c23eb0d4cb 100644
--- a/source/blender/render/intern/include/renderpipeline.h
+++ b/source/blender/render/intern/include/renderpipeline.h
@@ -33,15 +33,18 @@
#ifndef __RENDERPIPELINE_H__
#define __RENDERPIPELINE_H__
+struct ListBase;
struct Render;
struct RenderData;
struct RenderLayer;
struct RenderResult;
+struct ViewRender;
struct RenderLayer *render_get_active_layer(struct Render *re, struct RenderResult *rr);
float panorama_pixel_rot(struct Render *re);
-void render_update_anim_renderdata(struct Render *re, struct RenderData *rd);
+void render_update_anim_renderdata(struct Render *re, struct RenderData *rd, struct ListBase *render_layers);
void render_copy_renderdata(struct RenderData *to, struct RenderData *from);
+void render_copy_viewrender(struct ViewRender *to, struct ViewRender *from);
#endif /* __RENDERPIPELINE_H__ */
diff --git a/source/blender/render/intern/source/bake.c b/source/blender/render/intern/source/bake.c
index 31e461b4536..71a595d6a8b 100644
--- a/source/blender/render/intern/source/bake.c
+++ b/source/blender/render/intern/source/bake.c
@@ -669,11 +669,12 @@ static int get_next_bake_face(BakeShade *bs)
const float disp_solid[4] = {0.5f, 0.5f, 0.5f, 1.0f};
tface = RE_vlakren_get_tface(obr, vlr, obr->bakemtface, NULL, 0);
+ /* should use 'BKE_object_material_edit_image_get' but in this case simpler not to */
+ ima = vlr->mat ? vlr->mat->edit_image : NULL;
- if (!tface || !tface->tpage)
+ if (!tface || !ima)
continue;
- ima = tface->tpage;
ibuf = BKE_image_acquire_ibuf(ima, NULL, NULL);
if (ibuf == NULL)
@@ -814,7 +815,7 @@ static void shade_tface(BakeShade *bs)
ObjectInstanceRen *obi = bs->obi;
ObjectRen *obr = obi->obr;
MTFace *tface = RE_vlakren_get_tface(obr, vlr, obr->bakemtface, NULL, 0);
- Image *ima = tface->tpage;
+ Image *ima = vlr->mat->edit_image;
float vec[4][2];
int a, i1, i2, i3;
diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c
index 52cd5c3449e..503748236f6 100644
--- a/source/blender/render/intern/source/convertblender.c
+++ b/source/blender/render/intern/source/convertblender.c
@@ -66,12 +66,13 @@
#include "BKE_customdata.h"
#include "BKE_colortools.h"
#include "BKE_displist.h"
-#include "BKE_depsgraph.h"
#include "BKE_DerivedMesh.h"
#include "BKE_global.h"
+#include "BKE_group.h"
#include "BKE_key.h"
#include "BKE_image.h"
#include "BKE_lattice.h"
+#include "BKE_layer.h"
#include "BKE_material.h"
#include "BKE_main.h"
#include "BKE_mball.h"
@@ -82,6 +83,8 @@
#include "BKE_particle.h"
#include "BKE_scene.h"
+#include "DEG_depsgraph.h"
+
#include "PIL_time.h"
#include "envmap.h"
@@ -1290,6 +1293,7 @@ static void get_particle_uvco_mcol(short from, DerivedMesh *dm, float *fuv, int
}
static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem *psys, int timeoffset)
{
+ const EvaluationContext *eval_ctx = RE_GetEvalCtx(re);
Object *ob= obr->ob;
// Object *tob=0;
Material *ma = NULL;
@@ -1336,7 +1340,7 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem
if (part->ren_as==PART_DRAW_OB || part->ren_as==PART_DRAW_GR || part->ren_as==PART_DRAW_NOT)
return 1;
- if ((re->r.scemode & R_VIEWPORT_PREVIEW) && (ob->mode & OB_MODE_PARTICLE_EDIT))
+ if ((re->r.scemode & R_VIEWPORT_PREVIEW) && (eval_ctx->object_mode & OB_MODE_PARTICLE_EDIT))
return 0;
if (part->ren_as == PART_DRAW_BB && part->bb_ob == NULL && RE_GetCamera(re) == NULL)
@@ -1349,10 +1353,11 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem
if (!(psmd->modifier.mode & eModifierMode_Render))
return 0;
- sim.scene= re->scene;
- sim.ob= ob;
- sim.psys= psys;
- sim.psmd= psmd;
+ sim.eval_ctx = re->eval_ctx;
+ sim.scene = re->scene;
+ sim.ob = ob;
+ sim.psys = psys;
+ sim.psmd = psmd;
if (part->phystype==PART_PHYS_KEYED)
psys_count_keyed_targets(&sim);
@@ -2599,13 +2604,13 @@ static void init_render_surf(Render *re, ObjectRen *obr, int timeoffset)
if (ob->parent && (ob->parent->type==OB_LATTICE)) need_orco= 1;
- BKE_displist_make_surf(re->scene, ob, &displist, &dm, 1, 0, 1);
+ BKE_displist_make_surf(re->eval_ctx, re->scene, ob, &displist, &dm, 1, 0, 1);
if (dm) {
if (need_orco) {
orco = get_object_orco(re, ob);
if (!orco) {
- orco= BKE_displist_make_orco(re->scene, ob, dm, true, true);
+ orco= BKE_displist_make_orco(re->eval_ctx, re->scene, ob, dm, true, true);
if (orco) {
set_object_orco(re, ob, orco);
}
@@ -2657,7 +2662,7 @@ static void init_render_curve(Render *re, ObjectRen *obr, int timeoffset)
if (ob->type==OB_FONT && cu->str==NULL) return;
else if (ob->type==OB_CURVE && cu->nurb.first==NULL) return;
- BKE_displist_make_curveTypes_forRender(re->scene, ob, &disp, &dm, false, true);
+ BKE_displist_make_curveTypes_forRender(re->eval_ctx, re->scene, ob, &disp, &dm, false, true);
dl= disp.first;
if (dl==NULL) return;
@@ -2684,7 +2689,7 @@ static void init_render_curve(Render *re, ObjectRen *obr, int timeoffset)
if (need_orco) {
orco = get_object_orco(re, ob);
if (!orco) {
- orco = BKE_displist_make_orco(re->scene, ob, dm, true, true);
+ orco = BKE_displist_make_orco(re->eval_ctx, re->scene, ob, dm, true, true);
if (orco) {
set_object_orco(re, ob, orco);
}
@@ -2698,7 +2703,7 @@ static void init_render_curve(Render *re, ObjectRen *obr, int timeoffset)
if (need_orco) {
orco = get_object_orco(re, ob);
if (!orco) {
- orco = BKE_curve_make_orco(re->scene, ob, NULL);
+ orco = BKE_curve_make_orco(re->eval_ctx, re->scene, ob, NULL);
set_object_orco(re, ob, orco);
}
}
@@ -3153,11 +3158,11 @@ static void init_render_mesh(Render *re, ObjectRen *obr, int timeoffset)
/* normalmaps, test if tangents needed, separated from shading */
if (ma->mode_l & MA_TANGENT_V) {
need_tangent= 1;
- if (me->mtpoly==NULL)
+ if (me->mloopuv==NULL)
need_orco= 1;
}
if (ma->mode_l & MA_NORMAP_TANG) {
- if (me->mtpoly==NULL) {
+ if (me->mloopuv==NULL) {
need_orco= 1;
}
need_tangent= 1;
@@ -3170,7 +3175,7 @@ static void init_render_mesh(Render *re, ObjectRen *obr, int timeoffset)
if (re->flag & R_NEED_TANGENT) {
/* exception for tangent space baking */
- if (me->mtpoly==NULL) {
+ if (me->mloopuv==NULL) {
need_orco= 1;
}
need_tangent= 1;
@@ -3198,9 +3203,9 @@ static void init_render_mesh(Render *re, ObjectRen *obr, int timeoffset)
#endif
if (re->r.scemode & R_VIEWPORT_PREVIEW)
- dm= mesh_create_derived_view(re->scene, ob, mask);
+ dm= mesh_create_derived_view(re->eval_ctx, re->scene, ob, mask);
else
- dm= mesh_create_derived_render(re->scene, ob, mask);
+ dm= mesh_create_derived_render(re->eval_ctx, re->scene, ob, mask);
if (dm==NULL) return; /* in case duplicated object fails? */
mvert= dm->getVertArray(dm);
@@ -3977,28 +3982,32 @@ static bool is_object_hidden(Render *re, Object *ob)
/* layflag: allows material group to ignore layerflag */
static void add_lightgroup(Render *re, Group *group, int exclusive)
{
- GroupObject *go, *gol;
-
group->id.tag &= ~LIB_TAG_DOIT;
+#if 0
/* it's a bit too many loops in loops... but will survive */
/* note that 'exclusive' will remove it from the global list */
- for (go= group->gobject.first; go; go= go->next) {
- go->lampren= NULL;
+ FOREACH_GROUP_BASE(group, base)
+ {
+ Object *object = base->object;
- if (is_object_hidden(re, go->ob))
+ if (is_object_hidden(re, object)) {
continue;
-
- if (go->ob->lay & re->lay) {
- if (go->ob && go->ob->type==OB_LAMP) {
- for (gol= re->lights.first; gol; gol= gol->next) {
- if (gol->ob==go->ob) {
- go->lampren= gol->lampren;
+ }
+
+ if (base->flag & BASE_VISIBLED) {
+ if (object && object->type == OB_LAMP) {
+ for (GroupObject *gol = re->lights.first; gol; gol = gol->next) {
+ if (gol->ob == object) {
+ go->lampren = gol->lampren;
break;
}
}
- if (go->lampren==NULL)
- gol= add_render_lamp(re, go->ob);
+
+ if (go->lampren == NULL) {
+ gol= add_render_lamp(re, object);
+ }
+
if (gol && exclusive) {
BLI_remlink(&re->lights, gol);
MEM_freeN(gol);
@@ -4006,6 +4015,10 @@ static void add_lightgroup(Render *re, Group *group, int exclusive)
}
}
}
+ FOREACH_GROUP_BASE_END
+#else
+ UNUSED_VARS(re, exclusive);
+#endif
}
static void set_material_lightgroups(Render *re)
@@ -4028,16 +4041,6 @@ static void set_material_lightgroups(Render *re)
}
}
-static void set_renderlayer_lightgroups(Render *re, Scene *sce)
-{
- SceneRenderLayer *srl;
-
- for (srl= sce->r.layers.first; srl; srl= srl->next) {
- if (srl->light_override)
- add_lightgroup(re, srl->light_override, 0);
- }
-}
-
/* ------------------------------------------------------------------------- */
/* World */
/* ------------------------------------------------------------------------- */
@@ -4619,9 +4622,9 @@ static void init_render_object_data(Render *re, ObjectRen *obr, int timeoffset)
const CustomDataMask mask = CD_MASK_RENDER_INTERNAL;
if (re->r.scemode & R_VIEWPORT_PREVIEW)
- dm = mesh_create_derived_view(re->scene, ob, mask);
+ dm = mesh_create_derived_view(re->eval_ctx, re->scene, ob, mask);
else
- dm = mesh_create_derived_render(re->scene, ob, mask);
+ dm = mesh_create_derived_render(re->eval_ctx, re->scene, ob, mask);
dm->release(dm);
}
@@ -4667,9 +4670,8 @@ static void add_render_object(Render *re, Object *ob, Object *par, DupliObject *
/* the emitter has to be processed first (render levels of modifiers) */
/* so here we only check if the emitter should be rendered */
if (ob->particlesystem.first) {
- show_emitter= 0;
+ show_emitter = (ob->duplicator_visibility_flag & OB_DUPLI_FLAG_RENDER) != 0;
for (psys=ob->particlesystem.first; psys; psys=psys->next) {
- show_emitter += psys->part->draw & PART_DRAW_EMITTER;
if (!(re->r.scemode & R_VIEWPORT_PREVIEW)) {
psys_has_renderdata |= (psys->renderdata != NULL);
psys_render_set(ob, psys, re->viewmat, re->winmat, re->winx, re->winy, timeoffset);
@@ -4847,6 +4849,8 @@ void RE_Database_Free(Render *re)
BLI_memarena_free(re->memArena);
re->memArena = NULL;
}
+
+ BKE_viewrender_free(&re->view_render);
}
static int allow_render_object(Render *re, Object *ob, int nolamps, int onlyselected, Object *actob)
@@ -4905,8 +4909,6 @@ static void dupli_render_particle_set(Render *re, Object *ob, int timeoffset, in
{
/* ugly function, but we need to set particle systems to their render
* settings before calling object_duplilist, to get render level duplis */
- Group *group;
- GroupObject *go;
ParticleSystem *psys;
DerivedMesh *dm;
@@ -4930,7 +4932,7 @@ static void dupli_render_particle_set(Render *re, Object *ob, int timeoffset, in
/* this is to make sure we get render level duplis in groups:
* the derivedmesh must be created before init_render_mesh,
* since object_duplilist does dupliparticles before that */
- dm = mesh_create_derived_render(re->scene, ob, CD_MASK_RENDER_INTERNAL);
+ dm = mesh_create_derived_render(re->eval_ctx, re->scene, ob, CD_MASK_RENDER_INTERNAL);
dm->release(dm);
for (psys=ob->particlesystem.first; psys; psys=psys->next)
@@ -4938,60 +4940,52 @@ static void dupli_render_particle_set(Render *re, Object *ob, int timeoffset, in
}
}
- if (ob->dup_group==NULL) return;
- group= ob->dup_group;
+ if (ob->dup_group == NULL) return;
- for (go= group->gobject.first; go; go= go->next)
- dupli_render_particle_set(re, go->ob, timeoffset, level+1, enable);
+ FOREACH_GROUP_OBJECT(ob->dup_group, object)
+ {
+ dupli_render_particle_set(re, object, timeoffset, level+1, enable);
+ }
+ FOREACH_GROUP_OBJECT_END
}
-static int get_vector_renderlayers(Scene *sce)
+static int get_vector_viewlayers(Scene *UNUSED(sce))
{
- SceneRenderLayer *srl;
- unsigned int lay= 0;
-
- for (srl= sce->r.layers.first; srl; srl= srl->next)
- if (srl->passflag & SCE_PASS_VECTOR)
- lay |= srl->lay;
-
- return lay;
+ return 0;
}
static void add_group_render_dupli_obs(Render *re, Group *group, int nolamps, int onlyselected, Object *actob, int timeoffset, int level)
{
- GroupObject *go;
- Object *ob;
-
- /* simple preventing of too deep nested groups */
- if (level>MAX_DUPLI_RECUR) return;
-
- /* recursively go into dupligroups to find objects with OB_RENDER_DUPLI
- * that were not created yet */
- for (go= group->gobject.first; go; go= go->next) {
- ob= go->ob;
+ /* Simple preventing of too deep nested groups. */
+ if (level > MAX_DUPLI_RECUR) return;
+ /* Recursively go into dupligroups to find objects with OB_RENDER_DUPLI
+ * that were not created yet. */
+ FOREACH_GROUP_OBJECT(group, ob)
+ {
if (ob->flag & OB_DONE) {
if (ob->transflag & OB_RENDER_DUPLI) {
if (allow_render_object(re, ob, nolamps, onlyselected, actob)) {
init_render_object(re, ob, NULL, NULL, NULL, timeoffset);
ob->transflag &= ~OB_RENDER_DUPLI;
- if (ob->dup_group)
+ if (ob->dup_group) {
add_group_render_dupli_obs(re, ob->dup_group, nolamps, onlyselected, actob, timeoffset, level+1);
+ }
}
}
}
}
+ FOREACH_GROUP_OBJECT_END
}
-static void database_init_objects(Render *re, unsigned int renderlay, int nolamps, int onlyselected, Object *actob, int timeoffset)
+static void database_init_objects(Render *re, unsigned int UNUSED(renderlay), int nolamps, int onlyselected, Object *actob, int timeoffset)
{
Base *base;
Object *ob;
Group *group;
ObjectInstanceRen *obi;
Scene *sce_iter;
- int lay, vectorlay;
/* for duplis we need the Object texture mapping to work as if
* untransformed, set_dupli_tex_mat sets the matrix to allow that
@@ -5019,14 +5013,18 @@ static void database_init_objects(Render *re, unsigned int renderlay, int nolamp
for (SETLOOPER(re->scene, sce_iter, base)) {
ob= base->object;
+#if 0
+ TODO_LAYER; /* investigate if this is an issue*/
/* in the prev/next pass for making speed vectors, avoid creating
* objects that are not on a renderlayer with a vector pass, can
* save a lot of time in complex scenes */
- vectorlay= get_vector_renderlayers(re->scene);
- lay= (timeoffset)? renderlay & vectorlay: renderlay;
+ vectorlay= get_vector_viewlayers(re->scene);
+#endif
- /* if the object has been restricted from rendering in the outliner, ignore it */
- if (is_object_restricted(re, ob)) continue;
+ /* if the object is not visible, ignore it */
+ if ((base->flag & BASE_VISIBLED) == 0) {
+ continue;
+ }
/* OB_DONE means the object itself got duplicated, so was already converted */
if (ob->flag & OB_DONE) {
@@ -5039,7 +5037,7 @@ static void database_init_objects(Render *re, unsigned int renderlay, int nolamp
}
}
}
- else if ((base->lay & lay) || (ob->type==OB_LAMP && (base->lay & re->lay)) ) {
+ else if (((base->flag & BASE_VISIBLED) != 0) || (ob->type==OB_LAMP)) {
if ((ob->transflag & OB_DUPLI) && (ob->type!=OB_MBALL)) {
DupliObject *dob;
ListBase *duplilist;
@@ -5050,7 +5048,7 @@ static void database_init_objects(Render *re, unsigned int renderlay, int nolamp
* system need to have render settings set for dupli particles */
dupli_render_particle_set(re, ob, timeoffset, 0, 1);
duplilist = object_duplilist(re->eval_ctx, re->scene, ob);
- duplilist_apply_data = duplilist_apply(ob, NULL, duplilist);
+ duplilist_apply_data = duplilist_apply(re->eval_ctx, ob, NULL, duplilist);
/* postpone 'dupli_render_particle_set', since RE_addRenderInstance reads
* index values from 'dob->persistent_id[0]', referencing 'psys->child' which
* may be smaller once the particle system is restored, see: T45563. */
@@ -5177,7 +5175,6 @@ static void database_init_objects(Render *re, unsigned int renderlay, int nolamp
/* used to be 'rotate scene' */
void RE_Database_FromScene(Render *re, Main *bmain, Scene *scene, unsigned int lay, int use_camera_view)
{
- Scene *sce;
Object *camera;
float mat[4][4];
float amb[3];
@@ -5196,6 +5193,7 @@ void RE_Database_FromScene(Render *re, Main *bmain, Scene *scene, unsigned int l
re->i.infostr= "Preparing Scene data";
re->i.cfra= scene->r.cfra;
BLI_strncpy(re->i.scene_name, scene->id.name + 2, sizeof(re->i.scene_name));
+ re->view_render = scene->view_render;
/* XXX add test if dbase was filled already? */
@@ -5212,14 +5210,14 @@ void RE_Database_FromScene(Render *re, Main *bmain, Scene *scene, unsigned int l
/* applies changes fully */
if ((re->r.scemode & (R_NO_FRAME_UPDATE|R_BUTS_PREVIEW|R_VIEWPORT_PREVIEW))==0) {
- BKE_scene_update_for_newframe(re->eval_ctx, re->main, re->scene, lay);
- render_update_anim_renderdata(re, &re->scene->r);
+ BKE_scene_graph_update_for_newframe(re->eval_ctx, re->depsgraph, re->main, re->scene, NULL);
+ render_update_anim_renderdata(re, &re->scene->r, &re->scene->view_layers);
}
/* if no camera, viewmat should have been set! */
if (use_camera_view && camera) {
/* called before but need to call again in case of lens animation from the
- * above call to BKE_scene_update_for_newframe, fixes bug. [#22702].
+ * above call to BKE_scene_graph_update_for_newframe, fixes bug. [#22702].
* following calls don't depend on 'RE_SetCamera' */
RE_SetCamera(re, camera);
RE_GetCameraModelMatrix(re, camera, mat);
@@ -5227,7 +5225,7 @@ void RE_Database_FromScene(Render *re, Main *bmain, Scene *scene, unsigned int l
RE_SetView(re, mat);
/* force correct matrix for scaled cameras */
- DAG_id_tag_update_ex(re->main, &camera->id, OB_RECALC_OB);
+ DEG_id_tag_update_ex(re->main, &camera->id, OB_RECALC_OB);
}
/* store for incremental render, viewmat rotates dbase */
@@ -5253,8 +5251,6 @@ void RE_Database_FromScene(Render *re, Main *bmain, Scene *scene, unsigned int l
if (!re->test_break(re->tbh)) {
set_material_lightgroups(re);
- for (sce= re->scene; sce; sce= sce->set)
- set_renderlayer_lightgroups(re, sce);
/* for now some clumsy copying still */
re->i.totvert= re->totvert;
@@ -5382,13 +5378,9 @@ static void database_fromscene_vectors(Render *re, Scene *scene, unsigned int la
re->i.totface=re->i.totvert=re->i.totstrand=re->i.totlamp=re->i.tothalo= 0;
re->lights.first= re->lights.last= NULL;
- /* in localview, lamps are using normal layers, objects only local bits */
- if (re->lay & 0xFF000000)
- lay &= 0xFF000000;
-
/* applies changes fully */
scene->r.cfra += timeoffset;
- BKE_scene_update_for_newframe(re->eval_ctx, re->main, re->scene, lay);
+ BKE_scene_graph_update_for_newframe(re->eval_ctx, re->depsgraph, re->main, re->scene, NULL);
/* if no camera, viewmat should have been set! */
if (camera) {
@@ -5805,7 +5797,7 @@ void RE_Database_FromScene_Vectors(Render *re, Main *bmain, Scene *sce, unsigned
}
if (!re->test_break(re->tbh)) {
- int vectorlay= get_vector_renderlayers(re->scene);
+ int vectorlay= get_vector_viewlayers(re->scene);
for (step= 0; step<2; step++) {
@@ -5909,6 +5901,7 @@ void RE_Database_Baking(Render *re, Main *bmain, Scene *scene, unsigned int lay,
/* renderdata setup and exceptions */
render_copy_renderdata(&re->r, &scene->r);
+ render_copy_viewrender(&re->view_render, &scene->view_render);
RE_init_threadcount(re);
diff --git a/source/blender/render/intern/source/envmap.c b/source/blender/render/intern/source/envmap.c
index 156b4215992..2a7aab58980 100644
--- a/source/blender/render/intern/source/envmap.c
+++ b/source/blender/render/intern/source/envmap.c
@@ -51,6 +51,7 @@
#include "BKE_main.h"
#include "BKE_image.h" /* BKE_imbuf_write */
+#include "BKE_layer.h"
#include "BKE_texture.h"
#include "BKE_scene.h"
@@ -141,9 +142,8 @@ static Render *envmap_render_copy(Render *re, EnvMap *env)
envre->flag = re->flag;
/* set up renderdata */
- render_copy_renderdata(&envre->r, &re->r);
envre->r.mode &= ~(R_BORDER | R_PANORAMA | R_ORTHO | R_MBLUR);
- BLI_freelistN(&envre->r.layers);
+ BLI_freelistN(&envre->view_layers);
BLI_freelistN(&envre->r.views);
envre->r.filtertype = 0;
envre->r.tilex = envre->r.xsch / 2;
@@ -151,7 +151,7 @@ static Render *envmap_render_copy(Render *re, EnvMap *env)
envre->r.size = 100;
envre->r.yasp = envre->r.xasp = 1;
- RE_InitState(envre, NULL, &envre->r, NULL, cuberes, cuberes, NULL);
+ RE_InitState(envre, NULL, &envre->r, &re->view_layers, re->active_view_layer, &envre->view_render, NULL, cuberes, cuberes, NULL);
envre->main = re->main;
envre->scene = re->scene; /* unsure about this... */
envre->scene_color_manage = re->scene_color_manage;
@@ -248,17 +248,14 @@ static void envmap_transmatrix(float mat[4][4], int part)
static void env_set_imats(Render *re)
{
- Base *base;
float mat[4][4];
-
- base = re->scene->base.first;
- while (base) {
- mul_m4_m4m4(mat, re->viewmat, base->object->obmat);
- invert_m4_m4(base->object->imat, mat);
-
- base = base->next;
+
+ FOREACH_SCENE_OBJECT(re->scene, ob)
+ {
+ mul_m4_m4m4(mat, re->viewmat, ob->obmat);
+ invert_m4_m4(ob->imat, mat);
}
-
+ FOREACH_SCENE_OBJECT_END
}
/* ------------------------------------------------------------------------- */
diff --git a/source/blender/render/intern/source/external_engine.c b/source/blender/render/intern/source/external_engine.c
index 8764abf9674..2714e8b7685 100644
--- a/source/blender/render/intern/source/external_engine.c
+++ b/source/blender/render/intern/source/external_engine.c
@@ -45,9 +45,12 @@
#include "BKE_camera.h"
#include "BKE_global.h"
#include "BKE_colortools.h"
+#include "BKE_layer.h"
#include "BKE_report.h"
#include "BKE_scene.h"
+#include "DEG_depsgraph.h"
+
#include "RNA_access.h"
#ifdef WITH_PYTHON
@@ -58,6 +61,8 @@
#include "RE_pipeline.h"
#include "RE_bake.h"
+#include "DRW_engine.h"
+
#include "initrender.h"
#include "renderpipeline.h"
#include "render_types.h"
@@ -68,8 +73,8 @@
static RenderEngineType internal_render_type = {
NULL, NULL,
- "BLENDER_RENDER", N_("Blender Render"), RE_INTERNAL,
- NULL, NULL, NULL, NULL, NULL, NULL, render_internal_update_passes,
+ "BLENDER_RENDER", N_("Blender Render"), RE_INTERNAL | RE_USE_LEGACY_PIPELINE,
+ NULL, NULL, NULL, NULL, NULL, NULL, render_internal_update_passes, NULL, NULL, NULL,
{NULL, NULL, NULL}
};
@@ -77,8 +82,8 @@ static RenderEngineType internal_render_type = {
static RenderEngineType internal_game_type = {
NULL, NULL,
- "BLENDER_GAME", N_("Blender Game"), RE_INTERNAL | RE_GAME,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ "BLENDER_GAME", N_("Blender Game"), RE_INTERNAL | RE_GAME | RE_USE_LEGACY_PIPELINE,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
{NULL, NULL, NULL}
};
@@ -88,16 +93,22 @@ ListBase R_engines = {NULL, NULL};
void RE_engines_init(void)
{
- BLI_addtail(&R_engines, &internal_render_type);
+ RE_engines_register(NULL, &internal_render_type);
#ifdef WITH_GAMEENGINE
- BLI_addtail(&R_engines, &internal_game_type);
+ RE_engines_register(NULL, &internal_game_type);
#endif
+ DRW_engines_register();
}
void RE_engines_exit(void)
{
RenderEngineType *type, *next;
+ DRW_engines_free();
+
+ BKE_layer_collection_engine_settings_callback_free();
+ BKE_view_layer_engine_settings_callback_free();
+
for (type = R_engines.first; type; type = next) {
next = type->next;
@@ -112,6 +123,22 @@ void RE_engines_exit(void)
}
}
+void RE_engines_register(Main *bmain, RenderEngineType *render_type)
+{
+ if (render_type->draw_engine) {
+ DRW_engine_register(render_type->draw_engine);
+ }
+ if (render_type->collection_settings_create) {
+ BKE_layer_collection_engine_settings_callback_register(
+ bmain, render_type->idname, render_type->collection_settings_create);
+ }
+ if (render_type->render_settings_create) {
+ BKE_view_layer_engine_settings_callback_register(
+ bmain, render_type->idname, render_type->render_settings_create);
+ }
+ BLI_addtail(&R_engines, render_type);
+}
+
RenderEngineType *RE_engines_find(const char *idname)
{
RenderEngineType *type;
@@ -125,8 +152,14 @@ RenderEngineType *RE_engines_find(const char *idname)
bool RE_engine_is_external(Render *re)
{
- RenderEngineType *type = RE_engines_find(re->r.engine);
- return (type && type->render);
+ return (re->engine && re->engine->type && re->engine->type->render_to_image);
+}
+
+bool RE_engine_is_opengl(RenderEngineType *render_type)
+{
+ /* TODO refine? Can we have ogl render engine without ogl render pipeline? */
+ return (render_type->draw_engine != NULL) &&
+ DRW_engine_render_support(render_type->draw_engine);
}
/* Create, Free */
@@ -184,7 +217,8 @@ static RenderPart *get_part_from_result(Render *re, RenderResult *result)
return NULL;
}
-RenderResult *RE_engine_begin_result(RenderEngine *engine, int x, int y, int w, int h, const char *layername, const char *viewname)
+RenderResult *RE_engine_begin_result(
+ RenderEngine *engine, int x, int y, int w, int h, const char *layername, const char *viewname)
{
Render *re = engine->re;
RenderResult *result;
@@ -414,7 +448,8 @@ float RE_engine_get_camera_shift_x(RenderEngine *engine, Object *camera, int use
return BKE_camera_multiview_shift_x(re ? &re->r : NULL, camera, re->viewname);
}
-void RE_engine_get_camera_model_matrix(RenderEngine *engine, Object *camera, int use_spherical_stereo, float *r_modelmat)
+void RE_engine_get_camera_model_matrix(
+ RenderEngine *engine, Object *camera, int use_spherical_stereo, float *r_modelmat)
{
Render *re = engine->re;
@@ -491,16 +526,18 @@ RenderData *RE_engine_get_render_data(Render *re)
}
/* Bake */
-void RE_bake_engine_set_engine_parameters(Render *re, Main *bmain, Scene *scene)
+void RE_bake_engine_set_engine_parameters(Render *re, Main *bmain, Depsgraph *graph, Scene *scene)
{
+ re->depsgraph = graph;
re->scene = scene;
re->main = bmain;
render_copy_renderdata(&re->r, &scene->r);
+ render_copy_viewrender(&re->view_render, &scene->view_render);
}
bool RE_bake_has_engine(Render *re)
{
- RenderEngineType *type = RE_engines_find(re->r.engine);
+ RenderEngineType *type = RE_engines_find(re->view_render.engine_id);
return (type->bake != NULL);
}
@@ -511,7 +548,7 @@ bool RE_bake_engine(
const eScenePassType pass_type, const int pass_filter,
float result[])
{
- RenderEngineType *type = RE_engines_find(re->r.engine);
+ RenderEngineType *type = RE_engines_find(re->view_render.engine_id);
RenderEngine *engine;
bool persistent_data = (re->r.mode & R_PERSISTENT_DATA) != 0;
@@ -542,10 +579,21 @@ bool RE_bake_engine(
/* update is only called so we create the engine.session */
if (type->update)
- type->update(engine, re->main, re->scene);
-
- if (type->bake)
- type->bake(engine, re->scene, object, pass_type, pass_filter, object_id, pixel_array, num_pixels, depth, result);
+ type->update(engine, re->main, re->depsgraph, re->scene);
+
+ if (type->bake) {
+ type->bake(
+ engine,
+ re->scene,
+ object,
+ pass_type,
+ pass_filter,
+ object_id,
+ pixel_array,
+ num_pixels,
+ depth,
+ result);
+ }
engine->tile_x = 0;
engine->tile_y = 0;
@@ -581,8 +629,7 @@ void RE_engine_frame_set(RenderEngine *engine, int frame, float subframe)
BPy_BEGIN_ALLOW_THREADS;
#endif
- /* It's possible that here we're including layers which were never visible before. */
- BKE_scene_update_for_newframe_ex(re->eval_ctx, re->main, scene, (1 << 20) - 1, true);
+ BKE_scene_graph_update_for_newframe(re->eval_ctx, re->depsgraph, re->main, scene, NULL);
#ifdef WITH_PYTHON
BPy_END_ALLOW_THREADS;
@@ -593,25 +640,14 @@ void RE_engine_frame_set(RenderEngine *engine, int frame, float subframe)
/* Render */
-static bool render_layer_exclude_animated(Scene *scene, SceneRenderLayer *srl)
-{
- PointerRNA ptr;
- PropertyRNA *prop;
-
- RNA_pointer_create(&scene->id, &RNA_SceneRenderLayer, srl, &ptr);
- prop = RNA_struct_find_property(&ptr, "layers_exclude");
-
- return RNA_property_animated(&ptr, prop);
-}
-
int RE_engine_render(Render *re, int do_all)
{
- RenderEngineType *type = RE_engines_find(re->r.engine);
+ RenderEngineType *type = RE_engines_find(re->view_render.engine_id);
RenderEngine *engine;
bool persistent_data = (re->r.mode & R_PERSISTENT_DATA) != 0;
/* verify if we can render */
- if (!type->render)
+ if (!type->render_to_image)
return 0;
if ((re->r.scemode & R_BUTS_PREVIEW) && !(type->flag & RE_USE_PREVIEW))
return 0;
@@ -628,41 +664,8 @@ int RE_engine_render(Render *re, int do_all)
/* update animation here so any render layer animation is applied before
* creating the render result */
if ((re->r.scemode & (R_NO_FRAME_UPDATE | R_BUTS_PREVIEW)) == 0) {
- unsigned int lay = re->lay;
-
- /* don't update layers excluded on all render layers */
- if (type->flag & RE_USE_EXCLUDE_LAYERS) {
- SceneRenderLayer *srl;
- unsigned int non_excluded_lay = 0;
-
- if (re->r.scemode & R_SINGLE_LAYER) {
- srl = BLI_findlink(&re->r.layers, re->r.actlay);
- if (srl) {
- non_excluded_lay |= ~(srl->lay_exclude & ~srl->lay_zmask);
-
- /* in this case we must update all because animation for
- * the scene has not been updated yet, and so may not be
- * up to date until after BKE_scene_update_for_newframe */
- if (render_layer_exclude_animated(re->scene, srl))
- non_excluded_lay |= ~0;
- }
- }
- else {
- for (srl = re->r.layers.first; srl; srl = srl->next) {
- if (!(srl->layflag & SCE_LAY_DISABLE)) {
- non_excluded_lay |= ~(srl->lay_exclude & ~srl->lay_zmask);
-
- if (render_layer_exclude_animated(re->scene, srl))
- non_excluded_lay |= ~0;
- }
- }
- }
-
- lay &= non_excluded_lay;
- }
-
- BKE_scene_update_for_newframe_ex(re->eval_ctx, re->main, re->scene, lay, true);
- render_update_anim_renderdata(re, &re->scene->r);
+ BKE_scene_graph_update_for_newframe(re->eval_ctx, re->depsgraph, re->main, re->scene, NULL);
+ render_update_anim_renderdata(re, &re->scene->r, &re->scene->view_layers);
}
/* create render result */
@@ -727,16 +730,18 @@ int RE_engine_render(Render *re, int do_all)
if (re->result->do_exr_tile)
render_result_exr_file_begin(re);
- if (type->update)
- type->update(engine, re->main, re->scene);
+ if (type->update) {
+ type->update(engine, re->main, re->depsgraph, re->scene);
+ }
/* Clear UI drawing locks. */
if (re->draw_lock) {
re->draw_lock(re->dlh, 0);
}
- if (type->render)
- type->render(engine, re->scene);
+ if (type->render_to_image) {
+ type->render_to_image(engine, re->depsgraph);
+ }
engine->tile_x = 0;
engine->tile_y = 0;
@@ -779,12 +784,12 @@ int RE_engine_render(Render *re, int do_all)
return 1;
}
-void RE_engine_register_pass(struct RenderEngine *engine, struct Scene *scene, struct SceneRenderLayer *srl,
+void RE_engine_register_pass(struct RenderEngine *engine, struct Scene *scene, struct ViewLayer *view_layer,
const char *name, int UNUSED(channels), const char *UNUSED(chanid), int type)
{
/* The channel information is currently not used, but is part of the API in case it's needed in the future. */
- if (!(scene && srl && engine)) {
+ if (!(scene && view_layer && engine)) {
return;
}
@@ -794,7 +799,12 @@ void RE_engine_register_pass(struct RenderEngine *engine, struct Scene *scene, s
Scene *sce;
for (sce = G.main->scene.first; sce; sce = sce->id.next) {
if (sce->nodetree) {
- ntreeCompositRegisterPass(sce->nodetree, scene, srl, name, type);
+ ntreeCompositRegisterPass(sce->nodetree, scene, view_layer, name, type);
}
}
}
+
+ViewLayer *RE_engine_get_view_layer(Render *re)
+{
+ return re->eval_ctx->view_layer;
+}
diff --git a/source/blender/render/intern/source/initrender.c b/source/blender/render/intern/source/initrender.c
index fbf18405093..731a5ec4e22 100644
--- a/source/blender/render/intern/source/initrender.c
+++ b/source/blender/render/intern/source/initrender.c
@@ -48,6 +48,8 @@
#include "BKE_camera.h"
+#include "DEG_depsgraph.h"
+
/* this module */
#include "renderpipeline.h"
#include "render_types.h"
@@ -499,6 +501,11 @@ void RE_SetCamera(Render *re, Object *cam_ob)
re_camera_params_get(re, &params, cam_ob);
}
+void RE_SetDepsgraph(Render *re, Depsgraph *graph)
+{
+ re->depsgraph = graph;
+}
+
void RE_SetPixelSize(Render *re, float pixsize)
{
re->viewdx = pixsize;
diff --git a/source/blender/render/intern/source/multires_bake.c b/source/blender/render/intern/source/multires_bake.c
index fba5836ac32..4c0355ef604 100644
--- a/source/blender/render/intern/source/multires_bake.c
+++ b/source/blender/render/intern/source/multires_bake.c
@@ -42,14 +42,16 @@
#include "BLI_threads.h"
#include "BKE_ccg.h"
-#include "BKE_depsgraph.h"
#include "BKE_global.h"
#include "BKE_image.h"
+#include "BKE_material.h"
#include "BKE_mesh.h"
#include "BKE_multires.h"
#include "BKE_modifier.h"
#include "BKE_subsurf.h"
+#include "DEG_depsgraph.h"
+
#include "RE_multires_bake.h"
#include "RE_pipeline.h"
#include "RE_shader_ext.h"
@@ -78,7 +80,6 @@ typedef struct {
MLoop *mloop;
MLoopUV *mloopuv;
const MLoopTri *mlooptri;
- MTexPoly *mtpoly;
float *pvtangent;
const float *precomputed_normals;
int w, h;
@@ -89,6 +90,8 @@ typedef struct {
void *bake_data;
ImBuf *ibuf;
MPassKnownData pass_data;
+ /* material aligned UV array */
+ Image **image_array;
} MResolvePixelData;
typedef void (*MFlushPixel)(const MResolvePixelData *data, const int x, const int y);
@@ -373,13 +376,15 @@ static void *do_multires_bake_thread(void *data_v)
while ((tri_index = multires_bake_queue_next_tri(handle->queue)) >= 0) {
const MLoopTri *lt = &data->mlooptri[tri_index];
- MTexPoly *mtpoly = &data->mtpoly[lt->poly];
- MLoopUV *mloopuv = data->mloopuv;
+ const MPoly *mp = &data->mpoly[lt->poly];
+ const short mat_nr = mp->mat_nr;
+ const MLoopUV *mloopuv = data->mloopuv;
if (multiresbake_test_break(bkr))
break;
- if (mtpoly->tpage != handle->image)
+ Image *tri_image = mat_nr < bkr->ob_image.len ? bkr->ob_image.array[mat_nr] : NULL;
+ if (tri_image != handle->image)
continue;
data->tri_index = tri_index;
@@ -445,7 +450,6 @@ static void do_multires_bake(MultiresBakeRender *bkr, Image *ima, bool require_t
MPoly *mpoly = dm->getPolyArray(dm);
MLoop *mloop = dm->getLoopArray(dm);
MLoopUV *mloopuv = dm->getLoopDataArray(dm, CD_MLOOPUV);
- MTexPoly *mtpoly = dm->getPolyDataArray(dm, CD_MTEXPOLY);
const float *precomputed_normals = dm->getPolyDataArray(dm, CD_NORMAL);
float *pvtangent = NULL;
@@ -489,7 +493,6 @@ static void do_multires_bake(MultiresBakeRender *bkr, Image *ima, bool require_t
handle->data.mvert = mvert;
handle->data.mloopuv = mloopuv;
handle->data.mlooptri = mlooptri;
- handle->data.mtpoly = mtpoly;
handle->data.mloop = mloop;
handle->data.pvtangent = pvtangent;
handle->data.precomputed_normals = precomputed_normals; /* don't strictly need this */
@@ -1178,30 +1181,34 @@ static void apply_ao_callback(DerivedMesh *lores_dm, DerivedMesh *hires_dm, void
static void count_images(MultiresBakeRender *bkr)
{
- int a, totpoly;
- DerivedMesh *dm = bkr->lores_dm;
- MTexPoly *mtexpoly = CustomData_get_layer(&dm->polyData, CD_MTEXPOLY);
-
BLI_listbase_clear(&bkr->image);
bkr->tot_image = 0;
- totpoly = dm->getNumPolys(dm);
-
- for (a = 0; a < totpoly; a++)
- mtexpoly[a].tpage->id.tag &= ~LIB_TAG_DOIT;
+ for (int i = 0; i < bkr->ob_image.len; i++) {
+ Image *ima = bkr->ob_image.array[i];
+ if (ima) {
+ ima->id.tag &= ~LIB_TAG_DOIT;
+ }
+ }
- for (a = 0; a < totpoly; a++) {
- Image *ima = mtexpoly[a].tpage;
- if ((ima->id.tag & LIB_TAG_DOIT) == 0) {
- LinkData *data = BLI_genericNodeN(ima);
- BLI_addtail(&bkr->image, data);
- bkr->tot_image++;
- ima->id.tag |= LIB_TAG_DOIT;
+ for (int i = 0; i < bkr->ob_image.len; i++) {
+ Image *ima = bkr->ob_image.array[i];
+ if (ima) {
+ if ((ima->id.tag & LIB_TAG_DOIT) == 0) {
+ LinkData *data = BLI_genericNodeN(ima);
+ BLI_addtail(&bkr->image, data);
+ bkr->tot_image++;
+ ima->id.tag |= LIB_TAG_DOIT;
+ }
}
}
- for (a = 0; a < totpoly; a++)
- mtexpoly[a].tpage->id.tag &= ~LIB_TAG_DOIT;
+ for (int i = 0; i < bkr->ob_image.len; i++) {
+ Image *ima = bkr->ob_image.array[i];
+ if (ima) {
+ ima->id.tag &= ~LIB_TAG_DOIT;
+ }
+ }
}
static void bake_images(MultiresBakeRender *bkr, MultiresBakeResult *result)
@@ -1283,7 +1290,7 @@ static void finish_images(MultiresBakeRender *bkr, MultiresBakeResult *result)
}
BKE_image_release_ibuf(ima, ibuf, NULL);
- DAG_id_tag_update(&ima->id, 0);
+ DEG_id_tag_update(&ima->id, 0);
}
}
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index 6ed2534f152..29a5c2c3dd6 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -64,9 +64,9 @@
#include "BKE_animsys.h" /* <------ should this be here?, needed for sequencer update */
#include "BKE_camera.h"
#include "BKE_colortools.h"
-#include "BKE_depsgraph.h"
#include "BKE_global.h"
#include "BKE_image.h"
+#include "BKE_layer.h"
#include "BKE_library.h"
#include "BKE_library_remap.h"
#include "BKE_main.h"
@@ -80,6 +80,8 @@
#include "BKE_writeavi.h" /* <------ should be replaced once with generic movie module */
#include "BKE_object.h"
+#include "DEG_depsgraph.h"
+
#include "PIL_time.h"
#include "IMB_colormanagement.h"
#include "IMB_imbuf.h"
@@ -264,7 +266,7 @@ RenderResult *RE_MultilayerConvert(void *exrhandle, const char *colorspace, bool
RenderLayer *render_get_active_layer(Render *re, RenderResult *rr)
{
- RenderLayer *rl = BLI_findlink(&rr->layers, re->r.actlay);
+ RenderLayer *rl = BLI_findlink(&rr->layers, re->active_view_layer);
if (rl)
return rl;
@@ -274,21 +276,21 @@ RenderLayer *render_get_active_layer(Render *re, RenderResult *rr)
static int render_scene_needs_vector(Render *re)
{
- SceneRenderLayer *srl;
-
- for (srl = re->r.layers.first; srl; srl = srl->next)
- if (!(srl->layflag & SCE_LAY_DISABLE))
- if (srl->passflag & SCE_PASS_VECTOR)
+ ViewLayer *view_layer;
+ for (view_layer = re->view_layers.first; view_layer; view_layer = view_layer->next)
+ if (view_layer->flag & VIEW_LAYER_RENDER) {
+ if (view_layer->passflag & SCE_PASS_VECTOR) {
return 1;
-
+ }
+ }
return 0;
}
static bool render_scene_has_layers_to_render(Scene *scene)
{
- SceneRenderLayer *srl;
- for (srl = scene->r.layers.first; srl; srl = srl->next) {
- if (!(srl->layflag & SCE_LAY_DISABLE)) {
+ ViewLayer *view_layer;
+ for (view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
+ if (view_layer->flag & VIEW_LAYER_RENDER) {
return true;
}
}
@@ -353,6 +355,15 @@ Scene *RE_GetScene(Render *re)
return NULL;
}
+EvaluationContext *RE_GetEvalCtx(Render *re)
+{
+ if (re) {
+ return re->eval_ctx;
+ }
+
+ return NULL;
+}
+
/**
* Same as #RE_AcquireResultImage but creating the necessary views to store the result
* fill provided result struct with a copy of thew views of what is done so far the
@@ -573,7 +584,7 @@ void RE_FreeRender(Render *re)
BLI_rw_mutex_end(&re->resultmutex);
BLI_rw_mutex_end(&re->partsmutex);
- BLI_freelistN(&re->r.layers);
+ BLI_freelistN(&re->view_layers);
BLI_freelistN(&re->r.views);
curvemapping_free_data(&re->r.mblur_shutter_curve);
@@ -581,6 +592,7 @@ void RE_FreeRender(Render *re)
/* main dbase can already be invalid now, some database-free code checks it */
re->main = NULL;
re->scene = NULL;
+ re->depsgraph = NULL;
RE_Database_Free(re); /* view render can still have full database */
free_sample_tables(re);
@@ -650,12 +662,13 @@ void RE_FreePersistentData(void)
/* ********* initialize state ******** */
/* clear full sample and tile flags if needed */
-static int check_mode_full_sample(RenderData *rd)
+static int check_mode_full_sample(RenderData *rd, ViewRender *view_render)
{
+ const char *engine_id = view_render->engine_id;
int scemode = rd->scemode;
- if (!STREQ(rd->engine, RE_engine_id_BLENDER_RENDER) &&
- !STREQ(rd->engine, RE_engine_id_BLENDER_GAME))
+ if (!STREQ(engine_id, RE_engine_id_BLENDER_RENDER) &&
+ !STREQ(engine_id, RE_engine_id_BLENDER_GAME))
{
scemode &= ~R_FULL_SAMPLE;
}
@@ -717,21 +730,25 @@ static void re_init_resolution(Render *re, Render *source,
void render_copy_renderdata(RenderData *to, RenderData *from)
{
- BLI_freelistN(&to->layers);
BLI_freelistN(&to->views);
curvemapping_free_data(&to->mblur_shutter_curve);
*to = *from;
- BLI_duplicatelist(&to->layers, &from->layers);
BLI_duplicatelist(&to->views, &from->views);
curvemapping_copy_data(&to->mblur_shutter_curve, &from->mblur_shutter_curve);
}
+void render_copy_viewrender(ViewRender *to, ViewRender *from)
+{
+ BKE_viewrender_copy(to, from);
+}
+
/* what doesn't change during entire render sequence */
/* disprect is optional, if NULL it assumes full window render */
void RE_InitState(Render *re, Render *source, RenderData *rd,
- SceneRenderLayer *srl,
+ ListBase *render_layers, const int active_layer,
+ ViewRender *view_render, ViewLayer *view_layer,
int winx, int winy, rcti *disprect)
{
bool had_freestyle = (re->r.mode & R_EDGE_FRS) != 0;
@@ -742,6 +759,10 @@ void RE_InitState(Render *re, Render *source, RenderData *rd,
/* copy render data and render layers for thread safety */
render_copy_renderdata(&re->r, rd);
+ render_copy_viewrender(&re->view_render, view_render);
+ BLI_freelistN(&re->view_layers);
+ BLI_duplicatelist(&re->view_layers, render_layers);
+ re->active_view_layer = active_layer;
if (source) {
/* reuse border flags from source renderer */
@@ -771,7 +792,7 @@ void RE_InitState(Render *re, Render *source, RenderData *rd,
return;
}
- re->r.scemode = check_mode_full_sample(&re->r);
+ re->r.scemode = check_mode_full_sample(&re->r, &re->view_render);
/* fullsample wants uniform osa levels */
if (source && (re->r.scemode & R_FULL_SAMPLE)) {
@@ -790,10 +811,10 @@ void RE_InitState(Render *re, Render *source, RenderData *rd,
else re->osa = 0;
}
- if (srl) {
- int index = BLI_findindex(&rd->layers, srl);
+ if (view_layer) {
+ int index = BLI_findindex(render_layers, view_layer);
if (index != -1) {
- re->r.actlay = index;
+ re->active_view_layer = index;
re->r.scemode |= R_SINGLE_LAYER;
}
}
@@ -811,12 +832,12 @@ void RE_InitState(Render *re, Render *source, RenderData *rd,
re->result = NULL;
}
else if (re->result) {
- SceneRenderLayer *actsrl = BLI_findlink(&re->r.layers, re->r.actlay);
+ ViewLayer *active_render_layer = BLI_findlink(&re->view_layers, re->active_view_layer);
RenderLayer *rl;
bool have_layer = false;
for (rl = re->result->layers.first; rl; rl = rl->next)
- if (STREQ(rl->name, actsrl->name))
+ if (STREQ(rl->name, active_render_layer->name))
have_layer = true;
if (re->result->rectx == re->rectx && re->result->recty == re->recty &&
@@ -941,7 +962,7 @@ void RE_ChangeModeFlag(Render *re, int flag, bool clear)
/* update some variables that can be animated, and otherwise wouldn't be due to
* RenderData getting copied once at the start of animation render */
-void render_update_anim_renderdata(Render *re, RenderData *rd)
+void render_update_anim_renderdata(Render *re, RenderData *rd, ListBase *render_layers)
{
/* filter */
re->r.gauss = rd->gauss;
@@ -955,8 +976,8 @@ void render_update_anim_renderdata(Render *re, RenderData *rd)
re->r.unit_line_thickness = rd->unit_line_thickness;
/* render layers */
- BLI_freelistN(&re->r.layers);
- BLI_duplicatelist(&re->r.layers, &rd->layers);
+ BLI_freelistN(&re->view_layers);
+ BLI_duplicatelist(&re->view_layers, render_layers);
/* render views */
BLI_freelistN(&re->r.views);
@@ -1729,7 +1750,7 @@ static void do_render_blur_3d(Render *re)
/* make sure motion blur changes get reset to current frame */
if ((re->r.scemode & (R_NO_FRAME_UPDATE|R_BUTS_PREVIEW|R_VIEWPORT_PREVIEW))==0) {
- BKE_scene_update_for_newframe(re->eval_ctx, re->main, re->scene, re->lay);
+ BKE_scene_graph_update_for_newframe(re->eval_ctx, re->depsgraph, re->main, re->scene, NULL);
}
/* weak... the display callback wants an active renderlayer pointer... */
@@ -1958,13 +1979,14 @@ static void render_scene(Render *re, Scene *sce, int cfra)
}
/* initial setup */
- RE_InitState(resc, re, &sce->r, NULL, winx, winy, &re->disprect);
+ RE_InitState(resc, re, &sce->r, &sce->view_layers, sce->active_view_layer, &sce->view_render, NULL, winx, winy, &re->disprect);
/* We still want to use 'rendercache' setting from org (main) scene... */
resc->r.scemode = (resc->r.scemode & ~R_EXR_CACHE_FILE) | (re->r.scemode & R_EXR_CACHE_FILE);
/* still unsure entity this... */
resc->main = re->main;
+ resc->depsgraph = re->depsgraph;
resc->scene = sce;
resc->lay = sce->lay;
resc->scene_color_manage = BKE_scene_check_color_management_enabled(sce);
@@ -2045,17 +2067,10 @@ bool RE_allow_render_generic_object(Object *ob)
#define DEPSGRAPH_WORKAROUND_HACK
#ifdef DEPSGRAPH_WORKAROUND_HACK
-static void tag_dependend_objects_for_render(Scene *scene, int renderlay)
+static void tag_dependend_objects_for_render(Scene *scene, int UNUSED(renderlay))
{
- Scene *sce_iter;
- Base *base;
- for (SETLOOPER(scene, sce_iter, base)) {
- Object *object = base->object;
-
- if ((base->lay & renderlay) == 0) {
- continue;
- }
-
+ FOREACH_OBJECT_RENDERABLE(scene, object)
+ {
if (object->type == OB_MESH) {
if (RE_allow_render_generic_object(object)) {
ModifierData *md;
@@ -2072,22 +2087,22 @@ static void tag_dependend_objects_for_render(Scene *scene, int renderlay)
if (md->type == eModifierType_Boolean) {
BooleanModifierData *bmd = (BooleanModifierData *)md;
if (bmd->object && bmd->object->type == OB_MESH) {
- DAG_id_tag_update(&bmd->object->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&bmd->object->id, OB_RECALC_DATA);
}
}
else if (md->type == eModifierType_Array) {
ArrayModifierData *amd = (ArrayModifierData *)md;
if (amd->start_cap && amd->start_cap->type == OB_MESH) {
- DAG_id_tag_update(&amd->start_cap->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&amd->start_cap->id, OB_RECALC_DATA);
}
if (amd->end_cap && amd->end_cap->type == OB_MESH) {
- DAG_id_tag_update(&amd->end_cap->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&amd->end_cap->id, OB_RECALC_DATA);
}
}
else if (md->type == eModifierType_Shrinkwrap) {
ShrinkwrapModifierData *smd = (ShrinkwrapModifierData *)md;
if (smd->target && smd->target->type == OB_MESH) {
- DAG_id_tag_update(&smd->target->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&smd->target->id, OB_RECALC_DATA);
}
}
else if (md->type == eModifierType_ParticleSystem) {
@@ -2097,7 +2112,7 @@ static void tag_dependend_objects_for_render(Scene *scene, int renderlay)
switch (part->ren_as) {
case PART_DRAW_OB:
if (part->dup_ob != NULL) {
- DAG_id_tag_update(&part->dup_ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&part->dup_ob->id, OB_RECALC_DATA);
}
break;
case PART_DRAW_GR:
@@ -2106,7 +2121,7 @@ static void tag_dependend_objects_for_render(Scene *scene, int renderlay)
go != NULL;
go = go->next)
{
- DAG_id_tag_update(&go->ob->id, OB_RECALC_DATA);
+ DEG_id_tag_update(&go->ob->id, OB_RECALC_DATA);
}
}
break;
@@ -2116,6 +2131,32 @@ static void tag_dependend_objects_for_render(Scene *scene, int renderlay)
}
}
}
+ FOREACH_OBJECT_RENDERABLE_END
+}
+#endif
+
+#define DEPSGRAPH_WORKAROUND_GROUP_HACK
+
+#ifdef DEPSGRAPH_WORKAROUND_GROUP_HACK
+/**
+ * Make sure the COLLECTION_VIEWPORT / COLLECTION_RENDER is considered
+ * for the collections visibility.
+ *
+ * This won't be needed anymore once we have depsgraph per render engine.
+ */
+static void tag_groups_for_render(Render *re)
+{
+ for (Group *group = re->main->group.first; group; group = group->id.next) {
+ DEG_id_tag_update(&group->id, 0);
+ }
+
+#ifdef WITH_FREESTYLE
+ if (re->freestyle_bmain) {
+ for (Group *group = re->freestyle_bmain->group.first; group; group = group->id.next) {
+ DEG_id_tag_update(&group->id, 0);
+ }
+ }
+#endif
}
#endif
@@ -2202,6 +2243,10 @@ static void ntree_render_scenes(Render *re)
if (re->scene->nodetree == NULL) return;
tag_scenes_for_render(re);
+
+#ifdef DEPSGRAPH_WORKAROUND_GROUP_HACK
+ tag_groups_for_render(re);
+#endif
/* now foreach render-result node tagged we do a full render */
/* results are stored in a way compisitor will find it */
@@ -2256,24 +2301,24 @@ static void init_freestyle(Render *re)
/* invokes Freestyle stroke rendering */
static void add_freestyle(Render *re, int render)
{
- SceneRenderLayer *srl, *actsrl;
+ ViewLayer *view_layer, *active_view_layer;
LinkData *link;
Render *r;
const bool do_link = (re->r.mode & R_MBLUR) == 0 || re->i.curblur == re->r.mblur_samples;
- actsrl = BLI_findlink(&re->r.layers, re->r.actlay);
+ active_view_layer = BLI_findlink(&re->view_layers, re->active_view_layer);
FRS_begin_stroke_rendering(re);
- for (srl = (SceneRenderLayer *)re->r.layers.first; srl; srl = srl->next) {
+ for (view_layer = (ViewLayer *)re->view_layers.first; view_layer; view_layer = view_layer->next) {
if (do_link) {
link = (LinkData *)MEM_callocN(sizeof(LinkData), "LinkData to Freestyle render");
BLI_addtail(&re->freestyle_renders, link);
}
- if ((re->r.scemode & R_SINGLE_LAYER) && srl != actsrl)
+ if ((re->r.scemode & R_SINGLE_LAYER) && view_layer != active_view_layer)
continue;
- if (FRS_is_freestyle_enabled(srl)) {
- r = FRS_do_stroke_rendering(re, srl, render);
+ if (FRS_is_freestyle_enabled(view_layer)) {
+ r = FRS_do_stroke_rendering(re, view_layer, render);
if (do_link)
link->data = (void *)r;
}
@@ -2290,25 +2335,25 @@ static void composite_freestyle_renders(Render *re, int sample)
{
Render *freestyle_render;
RenderView *rv;
- SceneRenderLayer *srl, *actsrl;
+ ViewLayer *view_layer, *active_view_layer;
LinkData *link;
- actsrl = BLI_findlink(&re->r.layers, re->r.actlay);
+ active_view_layer = BLI_findlink(&re->view_layers, re->active_view_layer);
link = (LinkData *)re->freestyle_renders.first;
for (rv = re->result->views.first; rv; rv = rv->next) {
- for (srl = (SceneRenderLayer *)re->r.layers.first; srl; srl = srl->next) {
- if ((re->r.scemode & R_SINGLE_LAYER) && srl != actsrl)
+ for (view_layer = (ViewLayer *)re->view_layers.first; view_layer; view_layer = view_layer->next) {
+ if ((re->r.scemode & R_SINGLE_LAYER) && view_layer != active_view_layer)
continue;
- if (FRS_is_freestyle_enabled(srl)) {
+ if (FRS_is_freestyle_enabled(view_layer)) {
freestyle_render = (Render *)link->data;
/* may be NULL in case of empty render layer */
if (freestyle_render) {
render_result_exr_file_read_sample(freestyle_render, sample);
- FRS_composite_result(re, srl, freestyle_render);
+ FRS_composite_result(re, view_layer, freestyle_render);
RE_FreeRenderResult(freestyle_render->result);
freestyle_render->result = NULL;
}
@@ -2419,6 +2464,10 @@ static void do_merge_fullsample(Render *re, bNodeTree *ntree)
}
}
+#ifdef DEPSGRAPH_WORKAROUND_GROUP_HACK
+ tag_groups_for_render(re);
+#endif
+
/* composite */
if (ntree) {
ntreeCompositTagRender(re->scene);
@@ -2570,6 +2619,11 @@ void RE_MergeFullSample(Render *re, Main *bmain, Scene *sce, bNodeTree *ntree)
#ifdef WITH_FREESTYLE
free_all_freestyle_renders();
#endif
+
+#ifdef DEPSGRAPH_WORKAROUND_GROUP_HACK
+ /* Restore their visibility based on the viewport visibility flags. */
+ tag_groups_for_render(re);
+#endif
}
/* returns fully composited render-result on given time step (in RenderData) */
@@ -2643,7 +2697,7 @@ static void do_render_composite_fields_blur_3d(Render *re)
R.i.cfra = re->i.cfra;
if (update_newframe)
- BKE_scene_update_for_newframe(re->eval_ctx, re->main, re->scene, re->lay);
+ BKE_scene_graph_update_for_newframe(re->eval_ctx, re->depsgraph, re->main, re->scene, NULL);
if (re->r.scemode & R_FULL_SAMPLE)
do_merge_fullsample(re, ntree);
@@ -2668,6 +2722,11 @@ static void do_render_composite_fields_blur_3d(Render *re)
free_all_freestyle_renders();
#endif
+#ifdef DEPSGRAPH_WORKAROUND_GROUP_HACK
+ /* Restore their visibility based on the viewport visibility flags. */
+ tag_groups_for_render(re);
+#endif
+
/* weak... the display callback wants an active renderlayer pointer... */
if (re->result != NULL) {
re->result->renlay = render_get_active_layer(re, re->result);
@@ -2886,12 +2945,12 @@ static void do_render_all_options(Render *re)
bool RE_force_single_renderlayer(Scene *scene)
{
- int scemode = check_mode_full_sample(&scene->r);
+ int scemode = check_mode_full_sample(&scene->r, &scene->view_render);
if (scemode & R_SINGLE_LAYER) {
- SceneRenderLayer *srl = BLI_findlink(&scene->r.layers, scene->r.actlay);
+ ViewLayer *view_layer = BLI_findlink(&scene->view_layers, scene->active_view_layer);
/* force layer to be enabled */
- if (srl->layflag & SCE_LAY_DISABLE) {
- srl->layflag &= ~SCE_LAY_DISABLE;
+ if ((view_layer->flag & VIEW_LAYER_RENDER) == 0) {
+ view_layer->flag |= VIEW_LAYER_RENDER;
return true;
}
}
@@ -2907,7 +2966,7 @@ static bool check_valid_compositing_camera(Scene *scene, Object *camera_override
if (node->type == CMP_NODE_R_LAYERS && (node->flag & NODE_MUTED) == 0) {
Scene *sce = node->id ? (Scene *)node->id : scene;
if (sce->camera == NULL) {
- sce->camera = BKE_scene_camera_find(sce);
+ sce->camera = BKE_view_layer_camera_find(BKE_view_layer_from_scene_get(sce));
}
if (sce->camera == NULL) {
/* all render layers nodes need camera */
@@ -2965,7 +3024,7 @@ static int check_valid_camera(Scene *scene, Object *camera_override, ReportList
const char *err_msg = "No camera found in scene \"%s\"";
if (camera_override == NULL && scene->camera == NULL)
- scene->camera = BKE_scene_camera_find(scene);
+ scene->camera = BKE_view_layer_camera_find(BKE_view_layer_from_scene_get(scene));
if (!check_valid_camera_multiview(scene, scene->camera, reports))
return false;
@@ -2980,7 +3039,9 @@ static int check_valid_camera(Scene *scene, Object *camera_override, ReportList
(seq->scene != NULL))
{
if (!seq->scene_camera) {
- if (!seq->scene->camera && !BKE_scene_camera_find(seq->scene)) {
+ if (!seq->scene->camera &&
+ !BKE_view_layer_camera_find(BKE_view_layer_from_scene_get(seq->scene)))
+ {
/* camera could be unneeded due to composite nodes */
Object *override = (seq->scene == scene) ? camera_override : NULL;
@@ -3033,7 +3094,7 @@ static int check_composite_output(Scene *scene)
bool RE_is_rendering_allowed(Scene *scene, Object *camera_override, ReportList *reports)
{
- int scemode = check_mode_full_sample(&scene->r);
+ int scemode = check_mode_full_sample(&scene->r, &scene->view_render);
if (scene->r.mode & R_BORDER) {
if (scene->r.border.xmax <= scene->r.border.xmin ||
@@ -3146,13 +3207,15 @@ static void validate_render_settings(Render *re)
}
}
-static void update_physics_cache(Render *re, Scene *scene, int UNUSED(anim_init))
+static void update_physics_cache(Render *re, Scene *scene, ViewLayer *view_layer, int UNUSED(anim_init))
{
PTCacheBaker baker;
memset(&baker, 0, sizeof(baker));
baker.main = re->main;
baker.scene = scene;
+ baker.view_layer = view_layer;
+ baker.depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true);
baker.bake = 0;
baker.render = 1;
baker.anim_init = 1;
@@ -3171,9 +3234,15 @@ const char *RE_GetActiveRenderView(Render *re)
return re->viewname;
}
+void RE_SetEngineByID(Render *re, const char *engine_id)
+{
+ BLI_strncpy(re->view_render.engine_id, engine_id, sizeof(re->view_render.engine_id));
+}
+
/* evaluating scene options for general Blender render */
-static int render_initialize_from_main(Render *re, RenderData *rd, Main *bmain, Scene *scene, SceneRenderLayer *srl,
- Object *camera_override, unsigned int lay_override, int anim, int anim_init)
+static int render_initialize_from_main(Render *re, RenderData *rd, Main *bmain, Scene *scene, ViewRender *view_render,
+ ViewLayer *view_layer, Object *camera_override, unsigned int lay_override,
+ int anim, int anim_init)
{
int winx, winy;
rcti disprect;
@@ -3207,10 +3276,11 @@ static int render_initialize_from_main(Render *re, RenderData *rd, Main *bmain,
re->layer_override = lay_override;
re->i.localview = (re->lay & 0xFF000000) != 0;
re->viewname[0] = '\0';
+ RE_SetEngineByID(re, view_render->engine_id);
/* not too nice, but it survives anim-border render */
if (anim) {
- render_update_anim_renderdata(re, &scene->r);
+ render_update_anim_renderdata(re, &scene->r, &scene->view_layers);
re->disprect = disprect;
return 1;
}
@@ -3218,6 +3288,11 @@ static int render_initialize_from_main(Render *re, RenderData *rd, Main *bmain,
/* check all scenes involved */
tag_scenes_for_render(re);
+#ifdef DEPSGRAPH_WORKAROUND_GROUP_HACK
+ /* Update group collections visibility. */
+ tag_groups_for_render(re);
+#endif
+
/*
* Disabled completely for now,
* can be later set as render profile option
@@ -3225,16 +3300,17 @@ static int render_initialize_from_main(Render *re, RenderData *rd, Main *bmain,
*/
if (0) {
/* make sure dynamics are up to date */
- update_physics_cache(re, scene, anim_init);
+ view_layer = BKE_view_layer_from_scene_get(scene);
+ update_physics_cache(re, scene, view_layer, anim_init);
}
- if (srl || scene->r.scemode & R_SINGLE_LAYER) {
+ if (view_layer || scene->r.scemode & R_SINGLE_LAYER) {
BLI_rw_mutex_lock(&re->resultmutex, THREAD_LOCK_WRITE);
render_result_single_layer_begin(re);
BLI_rw_mutex_unlock(&re->resultmutex);
}
- RE_InitState(re, NULL, &scene->r, srl, winx, winy, &disprect);
+ RE_InitState(re, NULL, &scene->r, &scene->view_layers, scene->active_view_layer, &scene->view_render, view_layer, winx, winy, &disprect);
if (!re->ok) /* if an error was printed, abort */
return 0;
@@ -3255,7 +3331,7 @@ void RE_SetReports(Render *re, ReportList *reports)
}
/* general Blender frame render call */
-void RE_BlenderFrame(Render *re, Main *bmain, Scene *scene, SceneRenderLayer *srl, Object *camera_override,
+void RE_BlenderFrame(Render *re, Main *bmain, Scene *scene, ViewLayer *view_layer, Object *camera_override,
unsigned int lay_override, int frame, const bool write_still)
{
BLI_callback_exec(re->main, (ID *)scene, BLI_CB_EVT_RENDER_INIT);
@@ -3265,7 +3341,9 @@ void RE_BlenderFrame(Render *re, Main *bmain, Scene *scene, SceneRenderLayer *sr
scene->r.cfra = frame;
- if (render_initialize_from_main(re, &scene->r, bmain, scene, srl, camera_override, lay_override, 0, 0)) {
+ if (render_initialize_from_main(re, &scene->r, bmain, scene, &scene->view_render, view_layer,
+ camera_override, lay_override, 0, 0))
+ {
MEM_reset_peak_memory();
BLI_callback_exec(re->main, (ID *)scene, BLI_CB_EVT_RENDER_PRE);
@@ -3304,7 +3382,7 @@ void RE_BlenderFrame(Render *re, Main *bmain, Scene *scene, SceneRenderLayer *sr
void RE_RenderFreestyleStrokes(Render *re, Main *bmain, Scene *scene, int render)
{
re->result_ok= 0;
- if (render_initialize_from_main(re, &scene->r, bmain, scene, NULL, NULL, scene->lay, 0, 0)) {
+ if (render_initialize_from_main(re, &scene->r, bmain, scene, &scene->view_render, NULL, NULL, scene->lay, 0, 0)) {
if (render)
do_render_fields_blur_3d(re);
}
@@ -3600,7 +3678,7 @@ void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, Object *camera_overri
BLI_callback_exec(re->main, (ID *)scene, BLI_CB_EVT_RENDER_INIT);
/* do not fully call for each frame, it initializes & pops output window */
- if (!render_initialize_from_main(re, &rd, bmain, scene, NULL, camera_override, lay_override, 0, 1))
+ if (!render_initialize_from_main(re, &rd, bmain, scene, &scene->view_render, NULL, camera_override, lay_override, 0, 1))
return;
/* MULTIVIEW_TODO:
@@ -3690,22 +3768,12 @@ void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, Object *camera_overri
}
/* only border now, todo: camera lens. (ton) */
- render_initialize_from_main(re, &rd, bmain, scene, NULL, camera_override, lay_override, 1, 0);
+ render_initialize_from_main(re, &rd, bmain, scene, &scene->view_render,
+ NULL, camera_override, lay_override, 1, 0);
if (nfra != scene->r.cfra) {
- /*
- * Skip this frame, but update for physics and particles system.
- * From convertblender.c:
- * in localview, lamps are using normal layers, objects only local bits.
- */
- unsigned int updatelay;
-
- if (re->lay & 0xFF000000)
- updatelay = re->lay & 0xFF000000;
- else
- updatelay = re->lay;
-
- BKE_scene_update_for_newframe(re->eval_ctx, bmain, scene, updatelay);
+ /* Skip this frame, but update for physics and particles system. */
+ BKE_scene_graph_update_for_newframe(re->eval_ctx, re->depsgraph, bmain, scene, NULL);
continue;
}
else
@@ -3851,15 +3919,16 @@ void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, Object *camera_overri
G.is_rendering = false;
}
-void RE_PreviewRender(Render *re, Main *bmain, Scene *sce)
+void RE_PreviewRender(Render *re, Main *bmain, Scene *sce, ViewRender *view_render)
{
Object *camera;
+ ViewLayer *view_layer = BKE_view_layer_from_scene_get(sce);
int winx, winy;
winx = (sce->r.size * sce->r.xsch) / 100;
winy = (sce->r.size * sce->r.ysch) / 100;
- RE_InitState(re, NULL, &sce->r, NULL, winx, winy, NULL);
+ RE_InitState(re, NULL, &sce->r, &sce->view_layers, sce->active_view_layer, view_render, NULL, winx, winy, NULL);
re->pool = BKE_image_pool_new();
@@ -3867,6 +3936,8 @@ void RE_PreviewRender(Render *re, Main *bmain, Scene *sce)
re->scene = sce;
re->scene_color_manage = BKE_scene_check_color_management_enabled(sce);
re->lay = sce->lay;
+ re->depsgraph = BKE_scene_get_depsgraph(sce, view_layer, false);
+ re->eval_ctx->view_layer = view_layer;
camera = RE_GetCamera(re);
RE_SetCamera(re, camera);
@@ -3912,7 +3983,7 @@ bool RE_ReadRenderResult(Scene *scene, Scene *scenode)
re = RE_GetSceneRender(scene);
if (re == NULL)
re = RE_NewSceneRender(scene);
- RE_InitState(re, NULL, &scene->r, NULL, winx, winy, &disprect);
+ RE_InitState(re, NULL, &scene->r, &scene->view_layers, scene->active_view_layer, &scene->view_render, NULL, winx, winy, &disprect);
re->scene = scene;
re->scene_color_manage = BKE_scene_check_color_management_enabled(scene);
@@ -4145,7 +4216,6 @@ RenderPass *RE_create_gp_pass(RenderResult *rr, const char *layername, const cha
rl = MEM_callocN(sizeof(RenderLayer), layername);
BLI_addtail(&rr->layers, rl);
BLI_strncpy(rl->name, layername, sizeof(rl->name));
- rl->lay = 0;
rl->layflag = SCE_LAY_SOLID;
rl->passflag = SCE_PASS_COMBINED;
rl->rectx = rr->rectx;
diff --git a/source/blender/render/intern/source/pointdensity.c b/source/blender/render/intern/source/pointdensity.c
index b75d996ff27..4f300b7286c 100644
--- a/source/blender/render/intern/source/pointdensity.c
+++ b/source/blender/render/intern/source/pointdensity.c
@@ -58,6 +58,8 @@
#include "BKE_scene.h"
#include "BKE_colortools.h"
+#include "DEG_depsgraph.h"
+
#include "render_types.h"
#include "texture.h"
#include "pointdensity.h"
@@ -167,7 +169,7 @@ static void alloc_point_data(PointDensity *pd)
}
}
-static void pointdensity_cache_psys(Scene *scene,
+static void pointdensity_cache_psys(EvaluationContext *eval_ctx, Scene *scene,
PointDensity *pd,
Object *ob,
ParticleSystem *psys,
@@ -201,12 +203,12 @@ static void pointdensity_cache_psys(Scene *scene,
}
if (use_render_params) {
- dm = mesh_create_derived_render(scene,
+ dm = mesh_create_derived_render(eval_ctx, scene,
ob,
CD_MASK_BAREMESH | CD_MASK_MTFACE | CD_MASK_MCOL);
}
else {
- dm = mesh_get_derived_final(scene,
+ dm = mesh_get_derived_final(eval_ctx, scene,
ob,
CD_MASK_BAREMESH | CD_MASK_MTFACE | CD_MASK_MCOL);
}
@@ -216,6 +218,7 @@ static void pointdensity_cache_psys(Scene *scene,
return;
}
+ sim.eval_ctx = eval_ctx;
sim.scene = scene;
sim.ob = ob;
sim.psys = psys;
@@ -400,7 +403,7 @@ static void pointdensity_cache_vertex_normal(PointDensity *pd, Object *UNUSED(ob
}
}
-static void pointdensity_cache_object(Scene *scene,
+static void pointdensity_cache_object(EvaluationContext *eval_ctx, Scene *scene,
PointDensity *pd,
Object *ob,
const bool use_render_params)
@@ -421,10 +424,10 @@ static void pointdensity_cache_object(Scene *scene,
}
if (use_render_params) {
- dm = mesh_create_derived_render(scene, ob, mask);
+ dm = mesh_create_derived_render(eval_ctx, scene, ob, mask);
}
else {
- dm = mesh_get_derived_final(scene, ob, mask);
+ dm = mesh_get_derived_final(eval_ctx, scene, ob, mask);
}
mvert = dm->getVertArray(dm); /* local object space */
@@ -475,7 +478,7 @@ static void pointdensity_cache_object(Scene *scene,
}
-static void cache_pointdensity_ex(Scene *scene,
+static void cache_pointdensity_ex(EvaluationContext *eval_ctx, Scene *scene,
PointDensity *pd,
float viewmat[4][4],
float winmat[4][4],
@@ -504,7 +507,8 @@ static void cache_pointdensity_ex(Scene *scene,
return;
}
- pointdensity_cache_psys(scene,
+ pointdensity_cache_psys(eval_ctx,
+ scene,
pd,
ob,
psys,
@@ -515,13 +519,14 @@ static void cache_pointdensity_ex(Scene *scene,
else if (pd->source == TEX_PD_OBJECT) {
Object *ob = pd->object;
if (ob && ob->type == OB_MESH)
- pointdensity_cache_object(scene, pd, ob, use_render_params);
+ pointdensity_cache_object(eval_ctx, scene, pd, ob, use_render_params);
}
}
void cache_pointdensity(Render *re, PointDensity *pd)
{
- cache_pointdensity_ex(re->scene,
+ cache_pointdensity_ex(re->eval_ctx,
+ re->scene,
pd,
re->viewmat, re->winmat,
re->winx, re->winy,
@@ -876,7 +881,8 @@ static void sample_dummy_point_density(int resolution, float *values)
memset(values, 0, sizeof(float) * 4 * resolution * resolution * resolution);
}
-static void particle_system_minmax(Scene *scene,
+static void particle_system_minmax(EvaluationContext *eval_ctx,
+ Scene *scene,
Object *object,
ParticleSystem *psys,
float radius,
@@ -903,6 +909,7 @@ static void particle_system_minmax(Scene *scene,
psys_render_set(object, psys, mat, mat, 1, 1, 0);
}
+ sim.eval_ctx = eval_ctx;
sim.scene = scene;
sim.ob = object;
sim.psys = psys;
@@ -938,19 +945,28 @@ static void particle_system_minmax(Scene *scene,
void RE_point_density_cache(
Scene *scene,
+ ViewLayer *view_layer,
PointDensity *pd,
const bool use_render_params)
{
+ EvaluationContext eval_ctx = {0};
float mat[4][4];
+
+ DEG_evaluation_context_init(&eval_ctx, use_render_params ? DAG_EVAL_RENDER
+ : DAG_EVAL_VIEWPORT);
+
+ eval_ctx.view_layer = view_layer;
+
/* Same matricies/resolution as dupli_render_particle_set(). */
unit_m4(mat);
BLI_mutex_lock(&sample_mutex);
- cache_pointdensity_ex(scene, pd, mat, mat, 1, 1, use_render_params);
+ cache_pointdensity_ex(&eval_ctx, scene, pd, mat, mat, 1, 1, use_render_params);
BLI_mutex_unlock(&sample_mutex);
}
void RE_point_density_minmax(
struct Scene *scene,
+ ViewLayer *view_layer,
struct PointDensity *pd,
const bool use_render_params,
float r_min[3], float r_max[3])
@@ -963,6 +979,8 @@ void RE_point_density_minmax(
}
if (pd->source == TEX_PD_PSYS) {
ParticleSystem *psys;
+ EvaluationContext eval_ctx = {0};
+
if (pd->psys == 0) {
zero_v3(r_min);
zero_v3(r_max);
@@ -974,7 +992,15 @@ void RE_point_density_minmax(
zero_v3(r_max);
return;
}
- particle_system_minmax(scene,
+
+ DEG_evaluation_context_init(&eval_ctx, use_render_params ? DAG_EVAL_RENDER :
+ DAG_EVAL_VIEWPORT);
+
+ eval_ctx.ctime = (float)scene->r.cfra + scene->r.subframe;
+ eval_ctx.view_layer = view_layer;
+
+ particle_system_minmax(&eval_ctx,
+ scene,
object,
psys,
pd->radius,
@@ -1047,6 +1073,7 @@ static void point_density_sample_func(
*/
void RE_point_density_sample(
Scene *scene,
+ ViewLayer *view_layer,
PointDensity *pd,
const int resolution,
const bool use_render_params,
@@ -1066,6 +1093,7 @@ void RE_point_density_sample(
BLI_mutex_lock(&sample_mutex);
RE_point_density_minmax(scene,
+ view_layer,
pd,
use_render_params,
min,
diff --git a/source/blender/render/intern/source/rayshade.c b/source/blender/render/intern/source/rayshade.c
index 26a0b0c71b4..7bac7f29c5a 100644
--- a/source/blender/render/intern/source/rayshade.c
+++ b/source/blender/render/intern/source/rayshade.c
@@ -742,8 +742,6 @@ static void traceray(ShadeInput *origshi, ShadeResult *origshr, short depth, con
shi.passflag= SCE_PASS_COMBINED; /* result of tracing needs no pass info */
shi.combinedflag= 0xFFFFFF; /* ray trace does all options */
//shi.do_preview = false; // memset above, so don't need this
- shi.light_override= origshi->light_override;
- shi.mat_override= origshi->mat_override;
shade_ray(&isec, &shi, &shr);
/* ray has traveled inside the material, so shade by transmission */
@@ -995,7 +993,7 @@ static float *give_jitter_plane(LampRen *lar, int thread, int xs, int ys)
/* **************** QMC sampling *************** */
-static void halton_sample(double *ht_invprimes, double *ht_nums, double *v)
+static void UNUSED_FUNCTION(halton_sample)(double *ht_invprimes, double *ht_nums, double *v)
{
/* incremental halton sequence generator, from:
* "Instant Radiosity", Keller A. */
@@ -1022,26 +1020,6 @@ static void halton_sample(double *ht_invprimes, double *ht_nums, double *v)
}
}
-/* Generate Hammersley points in [0,1)^2
- * From Lucille renderer */
-static void hammersley_create(double *out, int n)
-{
- double p, t;
- int k, kk;
-
- for (k = 0; k < n; k++) {
- t = 0;
- for (p = 0.5, kk = k; kk; p *= 0.5, kk >>= 1) {
- if (kk & 1) { /* kk mod 2 = 1 */
- t += p;
- }
- }
-
- out[2 * k + 0] = (double)k / (double)n;
- out[2 * k + 1] = t;
- }
-}
-
static struct QMCSampler *QMC_initSampler(int type, int tot)
{
QMCSampler *qsa = MEM_callocN(sizeof(QMCSampler), "qmc sampler");
@@ -1051,7 +1029,7 @@ static struct QMCSampler *QMC_initSampler(int type, int tot)
qsa->type = type;
if (qsa->type==SAMP_TYPE_HAMMERSLEY)
- hammersley_create(qsa->samp2d, qsa->tot);
+ BLI_hammersley_2D_sequence(qsa->tot, qsa->samp2d);
return qsa;
}
@@ -1069,20 +1047,13 @@ static void QMC_initPixel(QMCSampler *qsa, int thread)
/* generate a new randomized halton sequence per pixel
* to alleviate qmc artifacts and make it reproducible
* between threads/frames */
- double ht_invprimes[2], ht_nums[2];
- double r[2];
- int i;
+ double ht_offset[2];
+ unsigned int ht_primes[2] = {2, 3};
- ht_nums[0] = BLI_thread_frand(thread);
- ht_nums[1] = BLI_thread_frand(thread);
- ht_invprimes[0] = 0.5;
- ht_invprimes[1] = 1.0/3.0;
+ ht_offset[0] = BLI_thread_frand(thread);
+ ht_offset[1] = BLI_thread_frand(thread);
- for (i=0; i< qsa->tot; i++) {
- halton_sample(ht_invprimes, ht_nums, r);
- qsa->samp2d[2*i+0] = r[0];
- qsa->samp2d[2*i+1] = r[1];
- }
+ BLI_halton_2D_sequence(ht_primes, ht_offset, qsa->tot, qsa->samp2d);
}
}
diff --git a/source/blender/render/intern/source/render_result.c b/source/blender/render/intern/source/render_result.c
index a3eeed2b144..6749fedb16e 100644
--- a/source/blender/render/intern/source/render_result.c
+++ b/source/blender/render/intern/source/render_result.c
@@ -266,7 +266,7 @@ RenderResult *render_result_new(Render *re, rcti *partrct, int crop, int savebuf
RenderResult *rr;
RenderLayer *rl;
RenderView *rv;
- SceneRenderLayer *srl;
+ ViewLayer *view_layer;
int rectx, recty;
int nr;
@@ -296,33 +296,30 @@ RenderResult *render_result_new(Render *re, rcti *partrct, int crop, int savebuf
render_result_views_new(rr, &re->r);
/* check renderdata for amount of layers */
- for (nr = 0, srl = re->r.layers.first; srl; srl = srl->next, nr++) {
+ for (nr = 0, view_layer = re->view_layers.first; view_layer; view_layer = view_layer->next, nr++) {
if (layername && layername[0])
- if (!STREQ(srl->name, layername))
+ if (!STREQ(view_layer->name, layername))
continue;
if (re->r.scemode & R_SINGLE_LAYER) {
- if (nr != re->r.actlay)
+ if (nr != re->active_view_layer) {
continue;
+ }
}
else {
- if (srl->layflag & SCE_LAY_DISABLE)
+ if ((view_layer->flag & VIEW_LAYER_RENDER) == 0) {
continue;
+ }
}
rl = MEM_callocN(sizeof(RenderLayer), "new render layer");
BLI_addtail(&rr->layers, rl);
- BLI_strncpy(rl->name, srl->name, sizeof(rl->name));
- rl->lay = srl->lay;
- rl->lay_zmask = srl->lay_zmask;
- rl->lay_exclude = srl->lay_exclude;
- rl->layflag = srl->layflag;
- rl->passflag = srl->passflag; /* for debugging: srl->passflag | SCE_PASS_RAYHITS; */
- rl->pass_xor = srl->pass_xor;
- rl->light_override = srl->light_override;
- rl->mat_override = srl->mat_override;
+ BLI_strncpy(rl->name, view_layer->name, sizeof(rl->name));
+ rl->layflag = view_layer->layflag;
+ rl->passflag = view_layer->passflag; /* for debugging: view_layer->passflag | SCE_PASS_RAYHITS; */
+ rl->pass_xor = view_layer->pass_xor;
rl->rectx = rectx;
rl->recty = recty;
@@ -357,65 +354,65 @@ RenderResult *render_result_new(Render *re, rcti *partrct, int crop, int savebuf
/* a renderlayer should always have a Combined pass*/
render_layer_add_pass(rr, rl, 4, "Combined", view, "RGBA");
- if (srl->passflag & SCE_PASS_Z)
+ if (view_layer->passflag & SCE_PASS_Z)
RENDER_LAYER_ADD_PASS_SAFE(rr, rl, 1, RE_PASSNAME_Z, view, "Z");
- if (srl->passflag & SCE_PASS_VECTOR)
+ if (view_layer->passflag & SCE_PASS_VECTOR)
RENDER_LAYER_ADD_PASS_SAFE(rr, rl, 4, RE_PASSNAME_VECTOR, view, "XYZW");
- if (srl->passflag & SCE_PASS_NORMAL)
+ if (view_layer->passflag & SCE_PASS_NORMAL)
RENDER_LAYER_ADD_PASS_SAFE(rr, rl, 3, RE_PASSNAME_NORMAL, view, "XYZ");
- if (srl->passflag & SCE_PASS_UV)
+ if (view_layer->passflag & SCE_PASS_UV)
RENDER_LAYER_ADD_PASS_SAFE(rr, rl, 3, RE_PASSNAME_UV, view, "UVA");
- if (srl->passflag & SCE_PASS_RGBA)
+ if (view_layer->passflag & SCE_PASS_RGBA)
RENDER_LAYER_ADD_PASS_SAFE(rr, rl, 4, RE_PASSNAME_RGBA, view, "RGBA");
- if (srl->passflag & SCE_PASS_EMIT)
+ if (view_layer->passflag & SCE_PASS_EMIT)
RENDER_LAYER_ADD_PASS_SAFE(rr, rl, 3, RE_PASSNAME_EMIT, view, "RGB");
- if (srl->passflag & SCE_PASS_DIFFUSE)
+ if (view_layer->passflag & SCE_PASS_DIFFUSE)
RENDER_LAYER_ADD_PASS_SAFE(rr, rl, 3, RE_PASSNAME_DIFFUSE, view, "RGB");
- if (srl->passflag & SCE_PASS_SPEC)
+ if (view_layer->passflag & SCE_PASS_SPEC)
RENDER_LAYER_ADD_PASS_SAFE(rr, rl, 3, RE_PASSNAME_SPEC, view, "RGB");
- if (srl->passflag & SCE_PASS_AO)
+ if (view_layer->passflag & SCE_PASS_AO)
RENDER_LAYER_ADD_PASS_SAFE(rr, rl, 3, RE_PASSNAME_AO, view, "RGB");
- if (srl->passflag & SCE_PASS_ENVIRONMENT)
+ if (view_layer->passflag & SCE_PASS_ENVIRONMENT)
RENDER_LAYER_ADD_PASS_SAFE(rr, rl, 3, RE_PASSNAME_ENVIRONMENT, view, "RGB");
- if (srl->passflag & SCE_PASS_INDIRECT)
+ if (view_layer->passflag & SCE_PASS_INDIRECT)
RENDER_LAYER_ADD_PASS_SAFE(rr, rl, 3, RE_PASSNAME_INDIRECT, view, "RGB");
- if (srl->passflag & SCE_PASS_SHADOW)
+ if (view_layer->passflag & SCE_PASS_SHADOW)
RENDER_LAYER_ADD_PASS_SAFE(rr, rl, 3, RE_PASSNAME_SHADOW, view, "RGB");
- if (srl->passflag & SCE_PASS_REFLECT)
+ if (view_layer->passflag & SCE_PASS_REFLECT)
RENDER_LAYER_ADD_PASS_SAFE(rr, rl, 3, RE_PASSNAME_REFLECT, view, "RGB");
- if (srl->passflag & SCE_PASS_REFRACT)
+ if (view_layer->passflag & SCE_PASS_REFRACT)
RENDER_LAYER_ADD_PASS_SAFE(rr, rl, 3, RE_PASSNAME_REFRACT, view, "RGB");
- if (srl->passflag & SCE_PASS_INDEXOB)
+ if (view_layer->passflag & SCE_PASS_INDEXOB)
RENDER_LAYER_ADD_PASS_SAFE(rr, rl, 1, RE_PASSNAME_INDEXOB, view, "X");
- if (srl->passflag & SCE_PASS_INDEXMA)
+ if (view_layer->passflag & SCE_PASS_INDEXMA)
RENDER_LAYER_ADD_PASS_SAFE(rr, rl, 1, RE_PASSNAME_INDEXMA, view, "X");
- if (srl->passflag & SCE_PASS_MIST)
+ if (view_layer->passflag & SCE_PASS_MIST)
RENDER_LAYER_ADD_PASS_SAFE(rr, rl, 1, RE_PASSNAME_MIST, view, "Z");
if (rl->passflag & SCE_PASS_RAYHITS)
RENDER_LAYER_ADD_PASS_SAFE(rr, rl, 4, RE_PASSNAME_RAYHITS, view, "RGB");
- if (srl->passflag & SCE_PASS_DIFFUSE_DIRECT)
+ if (view_layer->passflag & SCE_PASS_DIFFUSE_DIRECT)
RENDER_LAYER_ADD_PASS_SAFE(rr, rl, 3, RE_PASSNAME_DIFFUSE_DIRECT, view, "RGB");
- if (srl->passflag & SCE_PASS_DIFFUSE_INDIRECT)
+ if (view_layer->passflag & SCE_PASS_DIFFUSE_INDIRECT)
RENDER_LAYER_ADD_PASS_SAFE(rr, rl, 3, RE_PASSNAME_DIFFUSE_INDIRECT, view, "RGB");
- if (srl->passflag & SCE_PASS_DIFFUSE_COLOR)
+ if (view_layer->passflag & SCE_PASS_DIFFUSE_COLOR)
RENDER_LAYER_ADD_PASS_SAFE(rr, rl, 3, RE_PASSNAME_DIFFUSE_COLOR, view, "RGB");
- if (srl->passflag & SCE_PASS_GLOSSY_DIRECT)
+ if (view_layer->passflag & SCE_PASS_GLOSSY_DIRECT)
RENDER_LAYER_ADD_PASS_SAFE(rr, rl, 3, RE_PASSNAME_GLOSSY_DIRECT, view, "RGB");
- if (srl->passflag & SCE_PASS_GLOSSY_INDIRECT)
+ if (view_layer->passflag & SCE_PASS_GLOSSY_INDIRECT)
RENDER_LAYER_ADD_PASS_SAFE(rr, rl, 3, RE_PASSNAME_GLOSSY_INDIRECT, view, "RGB");
- if (srl->passflag & SCE_PASS_GLOSSY_COLOR)
+ if (view_layer->passflag & SCE_PASS_GLOSSY_COLOR)
RENDER_LAYER_ADD_PASS_SAFE(rr, rl, 3, RE_PASSNAME_GLOSSY_COLOR, view, "RGB");
- if (srl->passflag & SCE_PASS_TRANSM_DIRECT)
+ if (view_layer->passflag & SCE_PASS_TRANSM_DIRECT)
RENDER_LAYER_ADD_PASS_SAFE(rr, rl, 3, RE_PASSNAME_TRANSM_DIRECT, view, "RGB");
- if (srl->passflag & SCE_PASS_TRANSM_INDIRECT)
+ if (view_layer->passflag & SCE_PASS_TRANSM_INDIRECT)
RENDER_LAYER_ADD_PASS_SAFE(rr, rl, 3, RE_PASSNAME_TRANSM_INDIRECT, view, "RGB");
- if (srl->passflag & SCE_PASS_TRANSM_COLOR)
+ if (view_layer->passflag & SCE_PASS_TRANSM_COLOR)
RENDER_LAYER_ADD_PASS_SAFE(rr, rl, 3, RE_PASSNAME_TRANSM_COLOR, view, "RGB");
- if (srl->passflag & SCE_PASS_SUBSURFACE_DIRECT)
+ if (view_layer->passflag & SCE_PASS_SUBSURFACE_DIRECT)
RENDER_LAYER_ADD_PASS_SAFE(rr, rl, 3, RE_PASSNAME_SUBSURFACE_DIRECT, view, "RGB");
- if (srl->passflag & SCE_PASS_SUBSURFACE_INDIRECT)
+ if (view_layer->passflag & SCE_PASS_SUBSURFACE_INDIRECT)
RENDER_LAYER_ADD_PASS_SAFE(rr, rl, 3, RE_PASSNAME_SUBSURFACE_INDIRECT, view, "RGB");
- if (srl->passflag & SCE_PASS_SUBSURFACE_COLOR)
+ if (view_layer->passflag & SCE_PASS_SUBSURFACE_COLOR)
RENDER_LAYER_ADD_PASS_SAFE(rr, rl, 3, RE_PASSNAME_SUBSURFACE_COLOR, view, "RGB");
#undef RENDER_LAYER_ADD_PASS_SAFE
}
@@ -449,11 +446,10 @@ RenderResult *render_result_new(Render *re, rcti *partrct, int crop, int savebuf
}
/* note, this has to be in sync with scene.c */
- rl->lay = (1 << 20) - 1;
rl->layflag = 0x7FFF; /* solid ztra halo strand */
rl->passflag = SCE_PASS_COMBINED;
- re->r.actlay = 0;
+ re->active_view_layer = 0;
}
/* border render; calculate offset for use in compositor. compo is centralized coords */
@@ -994,7 +990,7 @@ void render_result_single_layer_begin(Render *re)
/* if scemode is R_SINGLE_LAYER, at end of rendering, merge the both render results */
void render_result_single_layer_end(Render *re)
{
- SceneRenderLayer *srl;
+ ViewLayer *view_layer;
RenderLayer *rlpush;
RenderLayer *rl;
int nr;
@@ -1015,12 +1011,12 @@ void render_result_single_layer_end(Render *re)
BLI_remlink(&re->result->layers, rl);
/* reconstruct render result layers */
- for (nr = 0, srl = re->r.layers.first; srl; srl = srl->next, nr++) {
- if (nr == re->r.actlay) {
+ for (nr = 0, view_layer = re->view_layers.first; view_layer; view_layer = view_layer->next, nr++) {
+ if (nr == re->active_view_layer) {
BLI_addtail(&re->result->layers, rl);
}
else {
- rlpush = RE_GetRenderLayer(re->pushedresult, srl->name);
+ rlpush = RE_GetRenderLayer(re->pushedresult, view_layer->name);
if (rlpush) {
BLI_remlink(&re->pushedresult->layers, rlpush);
BLI_addtail(&re->result->layers, rlpush);
diff --git a/source/blender/render/intern/source/rendercore.c b/source/blender/render/intern/source/rendercore.c
index 77f399d08d1..c9072105dd9 100644
--- a/source/blender/render/intern/source/rendercore.c
+++ b/source/blender/render/intern/source/rendercore.c
@@ -246,7 +246,7 @@ static void halo_tile(RenderPart *pa, RenderLayer *rl)
intptr_t *rd= NULL;
int a, *rz, zz, y, sample, totsample, od;
short minx, maxx, miny, maxy, x;
- unsigned int lay= rl->lay;
+ unsigned int lay= (1 << 20) - 1;
/* we don't render halos in the cropped area, gives errors in flare counter */
if (pa->crop) {
@@ -1651,7 +1651,7 @@ void zbufshade_sss_tile(RenderPart *pa)
ssamp.tot= 1;
for (rl=rr->layers.first; rl; rl=rl->next) {
- ssamp.shi[0].lay |= rl->lay;
+ ssamp.shi[0].lay |= (1 << 20) - 1;
ssamp.shi[0].layflag |= rl->layflag;
ssamp.shi[0].passflag |= rl->passflag;
ssamp.shi[0].combinedflag |= ~rl->pass_xor;
@@ -1660,8 +1660,6 @@ void zbufshade_sss_tile(RenderPart *pa)
rl= rr->layers.first;
ssamp.shi[0].passflag |= SCE_PASS_RGBA|SCE_PASS_COMBINED;
ssamp.shi[0].combinedflag &= ~(SCE_PASS_SPEC);
- ssamp.shi[0].mat_override= NULL;
- ssamp.shi[0].light_override= NULL;
lay= ssamp.shi[0].lay;
/* create the pixelstrs to be used later */
@@ -1978,7 +1976,7 @@ void add_halo_flare(Render *re)
for (a=0; a<R.tothalo; a++) {
har= R.sortedhalos[a];
- if (har->flarec && (har->lay & rl->lay)) {
+ if (har->flarec && (har->lay & ((1 << 20) - 1))) {
do_draw = true;
renderflare(rr, rect, har);
}
@@ -1994,18 +1992,18 @@ void add_halo_flare(Render *re)
}
}
-void render_internal_update_passes(RenderEngine *engine, Scene *scene, SceneRenderLayer *srl)
+void render_internal_update_passes(RenderEngine *engine, Scene *scene, ViewLayer *view_layer)
{
int type;
- RE_engine_register_pass(engine, scene, srl, RE_PASSNAME_COMBINED, 4, "RGBA", SOCK_RGBA);
+ RE_engine_register_pass(engine, scene, view_layer, RE_PASSNAME_COMBINED, 4, "RGBA", SOCK_RGBA);
#define CHECK_PASS(name, channels, chanid) \
- if (srl->passflag & (SCE_PASS_ ## name)) { \
+ if (view_layer->passflag & (SCE_PASS_ ## name)) { \
if (channels == 4) type = SOCK_RGBA; \
else if (channels == 3) type = SOCK_VECTOR; \
else type = SOCK_FLOAT; \
- RE_engine_register_pass(engine, scene, srl, RE_PASSNAME_ ## name, channels, chanid, type); \
+ RE_engine_register_pass(engine, scene, view_layer, RE_PASSNAME_ ## name, channels, chanid, type); \
}
CHECK_PASS(Z, 1, "Z");
diff --git a/source/blender/render/intern/source/shadeinput.c b/source/blender/render/intern/source/shadeinput.c
index b4ff5f52fcf..6cad37c3e78 100644
--- a/source/blender/render/intern/source/shadeinput.c
+++ b/source/blender/render/intern/source/shadeinput.c
@@ -268,7 +268,7 @@ void shade_input_set_triangle_i(ShadeInput *shi, ObjectInstanceRen *obi, VlakRen
shi->i3 = i3;
/* note, shi->mat is set in node shaders */
- shi->mat = shi->mat_override ? shi->mat_override : vlr->mat;
+ shi->mat = vlr->mat;
shi->osatex = (shi->mat->texco & TEXCO_OSA);
shi->mode = shi->mat->mode_l; /* or-ed result for all nodes */
@@ -325,7 +325,7 @@ void shade_input_copy_triangle(ShadeInput *shi, ShadeInput *from)
void shade_input_set_strand(ShadeInput *shi, StrandRen *strand, StrandPoint *spoint)
{
/* note, shi->mat is set in node shaders */
- shi->mat = shi->mat_override ? shi->mat_override : strand->buffer->ma;
+ shi->mat = strand->buffer->ma;
shi->osatex = (shi->mat->texco & TEXCO_OSA);
shi->mode = shi->mat->mode_l; /* or-ed result for all nodes */
@@ -438,7 +438,7 @@ void shade_input_set_strand_texco(ShadeInput *shi, StrandRen *strand, StrandVert
}
}
- if ((texco & TEXCO_UV) || (mode & (MA_VERTEXCOL | MA_VERTEXCOLP | MA_FACETEXTURE))) {
+ if ((texco & TEXCO_UV) || (mode & (MA_VERTEXCOL | MA_VERTEXCOLP))) {
MCol *mcol;
const float *uv;
char *name;
@@ -500,15 +500,6 @@ void shade_input_set_strand_texco(ShadeInput *shi, StrandRen *strand, StrandVert
suv->dyuv[0] = 0.0f;
suv->dyuv[1] = 0.0f;
}
-
- if ((mode & MA_FACETEXTURE) && i == obr->actmtface) {
- if ((mode & (MA_VERTEXCOL | MA_VERTEXCOLP)) == 0) {
- shi->vcol[0] = 1.0f;
- shi->vcol[1] = 1.0f;
- shi->vcol[2] = 1.0f;
- shi->vcol[3] = 1.0f;
- }
- }
}
if (shi->totuv == 0) {
@@ -517,14 +508,6 @@ void shade_input_set_strand_texco(ShadeInput *shi, StrandRen *strand, StrandVert
suv->uv[0] = 0.0f;
suv->uv[1] = spoint->strandco;
suv->uv[2] = 0.0f; /* texture.c assumes there are 3 coords */
-
- if (mode & MA_FACETEXTURE) {
- /* no tface? set at 1.0f */
- shi->vcol[0] = 1.0f;
- shi->vcol[1] = 1.0f;
- shi->vcol[2] = 1.0f;
- shi->vcol[3] = 1.0f;
- }
}
}
@@ -566,7 +549,7 @@ void shade_input_set_strand_texco(ShadeInput *shi, StrandRen *strand, StrandVert
}
if (shi->do_manage) {
- if (mode & (MA_VERTEXCOL | MA_VERTEXCOLP | MA_FACETEXTURE)) {
+ if (mode & (MA_VERTEXCOL | MA_VERTEXCOLP)) {
srgb_to_linearrgb_v3_v3(shi->vcol, shi->vcol);
}
}
@@ -1072,7 +1055,7 @@ void shade_input_set_shade_texco(ShadeInput *shi)
}
}
- if ((texco & TEXCO_UV) || (mode & (MA_VERTEXCOL | MA_VERTEXCOLP | MA_FACETEXTURE)) || (R.flag & R_NEED_VCOL)) {
+ if ((texco & TEXCO_UV) || (mode & (MA_VERTEXCOL | MA_VERTEXCOLP)) || (R.flag & R_NEED_VCOL)) {
VlakRen *vlr = shi->vlr;
MTFace *tface;
MCol *mcol;
@@ -1227,18 +1210,6 @@ void shade_input_set_shade_texco(ShadeInput *shi)
suv->dyuv[0] = 2.0f * (dl * uv3[0] - duv[0] * uv1[0] - duv[1] * uv2[0]);
suv->dyuv[1] = 2.0f * (dl * uv3[1] - duv[0] * uv1[1] - duv[1] * uv2[1]);
}
-
- if ((mode & MA_FACETEXTURE) && i == obr->actmtface) {
- if (((mode & (MA_VERTEXCOL | MA_VERTEXCOLP)) == 0) && ((R.flag & R_NEED_VCOL) == 0)) {
- shi->vcol[0] = 1.0f;
- shi->vcol[1] = 1.0f;
- shi->vcol[2] = 1.0f;
- shi->vcol[3] = 1.0f;
- }
- if (tface->tpage) {
- render_realtime_texture(shi, tface->tpage);
- }
- }
}
}
@@ -1252,14 +1223,6 @@ void shade_input_set_shade_texco(ShadeInput *shi)
suv->uv[0] = 2.0f * (u + .5f);
suv->uv[1] = 2.0f * (v + .5f);
suv->uv[2] = 0.0f; /* texture.c assumes there are 3 coords */
-
- if (mode & MA_FACETEXTURE) {
- /* no tface? set at 1.0f */
- shi->vcol[0] = 1.0f;
- shi->vcol[1] = 1.0f;
- shi->vcol[2] = 1.0f;
- shi->vcol[3] = 1.0f;
- }
}
}
@@ -1315,7 +1278,7 @@ void shade_input_set_shade_texco(ShadeInput *shi)
* else un-initialized values are used
*/
if (shi->do_manage) {
- if ((mode & (MA_VERTEXCOL | MA_VERTEXCOLP | MA_FACETEXTURE)) || (R.flag & R_NEED_VCOL)) {
+ if ((mode & (MA_VERTEXCOL | MA_VERTEXCOLP)) || (R.flag & R_NEED_VCOL)) {
srgb_to_linearrgb_v3_v3(shi->vcol, shi->vcol);
}
}
@@ -1337,12 +1300,10 @@ void shade_input_initialize(ShadeInput *shi, RenderPart *pa, RenderLayer *rl, in
shi->do_manage = BKE_scene_check_color_management_enabled(R.scene);
shi->use_world_space_shading = BKE_scene_use_world_space_shading(R.scene);
- shi->lay = rl->lay;
+ shi->lay = (1 << 20) - 1;
shi->layflag = rl->layflag;
shi->passflag = rl->passflag;
shi->combinedflag = ~rl->pass_xor;
- shi->mat_override = rl->mat_override;
- shi->light_override = rl->light_override;
// shi->rl= rl;
/* note shi.depth==0 means first hit, not raytracing */
diff --git a/source/blender/render/intern/source/shadeoutput.c b/source/blender/render/intern/source/shadeoutput.c
index b10389538c2..c2d5c060530 100644
--- a/source/blender/render/intern/source/shadeoutput.c
+++ b/source/blender/render/intern/source/shadeoutput.c
@@ -71,8 +71,6 @@ ListBase *get_lights(ShadeInput *shi)
if (R.r.scemode & R_BUTS_PREVIEW)
return &R.lights;
- if (shi->light_override)
- return &shi->light_override->gobject;
if (shi->mat && shi->mat->group)
return &shi->mat->group->gobject;
@@ -897,14 +895,7 @@ void shade_color(ShadeInput *shi, ShadeResult *shr)
{
Material *ma= shi->mat;
- if (ma->mode & (MA_FACETEXTURE)) {
- shi->r= shi->vcol[0];
- shi->g= shi->vcol[1];
- shi->b= shi->vcol[2];
- if (ma->mode & (MA_FACETEXTURE_ALPHA))
- shi->alpha= shi->vcol[3];
- }
- else if (ma->mode & (MA_VERTEXCOLP)) {
+ if (ma->mode & (MA_VERTEXCOLP)) {
float neg_alpha = 1.0f - shi->vcol[3];
shi->r= shi->r*neg_alpha + shi->vcol[0]*shi->vcol[3];
shi->g= shi->g*neg_alpha + shi->vcol[1]*shi->vcol[3];
@@ -1762,12 +1753,8 @@ void shade_lamp_loop(ShadeInput *shi, ShadeResult *shr)
/* material color itself */
if (passflag & color_passes) {
- if (ma->mode & (MA_FACETEXTURE)) {
- shi->r= shi->vcol[0];
- shi->g= shi->vcol[1];
- shi->b= shi->vcol[2];
- if (ma->mode & (MA_FACETEXTURE_ALPHA))
- shi->alpha= shi->vcol[3];
+ if (false) {
+ /* pass */
}
#ifdef WITH_FREESTYLE
else if (ma->vcol_alpha) {
@@ -2099,13 +2086,6 @@ float RE_lamp_get_data(ShadeInput *shi, Object *lamp_obj, float col[4], float lv
return 0.0f;
}
- if (shi->light_override) {
- for (go = shi->light_override->gobject.first; go; go = go->next) {
- if (go->ob == lamp_obj)
- return lamp_get_data_internal(shi, go, col, lv, dist, shadow);
- }
- }
-
if (shi->mat && shi->mat->group) {
for (go = shi->mat->group->gobject.first; go; go = go->next) {
if (go->ob == lamp_obj)
diff --git a/source/blender/render/intern/source/volumetric.c b/source/blender/render/intern/source/volumetric.c
index 7fe52328781..e12a7246254 100644
--- a/source/blender/render/intern/source/volumetric.c
+++ b/source/blender/render/intern/source/volumetric.c
@@ -172,8 +172,6 @@ static void shade_intersection(ShadeInput *shi, float col_r[4], Isect *is)
shi_new.lay = shi->lay;
shi_new.passflag = SCE_PASS_COMBINED; /* result of tracing needs no pass info */
shi_new.combinedflag = 0xFFFFFF; /* ray trace does all options */
- shi_new.light_override = shi->light_override;
- shi_new.mat_override = shi->mat_override;
copy_v3_v3(shi_new.camera_co, is->start);
diff --git a/source/blender/render/intern/source/zbuf.c b/source/blender/render/intern/source/zbuf.c
index 1481e7a8059..f39936dc01f 100644
--- a/source/blender/render/intern/source/zbuf.c
+++ b/source/blender/render/intern/source/zbuf.c
@@ -2066,7 +2066,7 @@ void zbuffer_solid(RenderPart *pa, RenderLayer *rl, void(*fillfunc)(RenderPart *
ObjectRen *obr;
float obwinmat[4][4], winmat[4][4], bounds[4];
float ho1[4], ho2[4], ho3[4], ho4[4]={0};
- unsigned int lay= rl->lay, lay_zmask= rl->lay_zmask;
+ unsigned int lay= (1 << 20) - 1, lay_zmask= 0;
int i, v, zvlnr, zsample, samples, c1, c2, c3, c4=0;
short nofill=0, env=0, wire=0, zmaskpass=0;
const bool all_z = (rl->layflag & SCE_LAY_ALL_Z) && !(rl->layflag & SCE_LAY_ZMASK);
@@ -3450,9 +3450,9 @@ static int zbuffer_abuf_render(RenderPart *pa, APixstr *APixbuf, APixstrand *APi
zbuf_make_winmat(&R, winmat);
if (rl->layflag & SCE_LAY_ZTRA)
- doztra+= zbuffer_abuf(&R, pa, APixbuf, apsmbase, rl->lay, negzmask, winmat, R.winx, R.winy, samples, jit, R.clipcrop, 0);
+ doztra+= zbuffer_abuf(&R, pa, APixbuf, apsmbase, (1 << 20) - 1, negzmask, winmat, R.winx, R.winy, samples, jit, R.clipcrop, 0);
if ((rl->layflag & SCE_LAY_STRAND) && APixbufstrand)
- doztra+= zbuffer_strands_abuf(&R, pa, APixbufstrand, apsmbase, rl->lay, negzmask, winmat, R.winx, R.winy, samples, jit, R.clipcrop, 0, sscache);
+ doztra+= zbuffer_strands_abuf(&R, pa, APixbufstrand, apsmbase, (1 << 20) - 1, negzmask, winmat, R.winx, R.winy, samples, jit, R.clipcrop, 0, sscache);
return doztra;
}
diff --git a/source/blender/windowmanager/CMakeLists.txt b/source/blender/windowmanager/CMakeLists.txt
index c9278822b9a..059055daea9 100644
--- a/source/blender/windowmanager/CMakeLists.txt
+++ b/source/blender/windowmanager/CMakeLists.txt
@@ -25,12 +25,15 @@
set(INC
.
+ manipulators
+ manipulators/intern
../blenfont
../blenkernel
../blenlib
../blenloader
../blentranslation
../compositor
+ ../depsgraph
../editors/include
../gpu
../imbuf
@@ -67,9 +70,19 @@ set(SRC
intern/wm_operator_props.c
intern/wm_operators.c
intern/wm_subwindow.c
- intern/wm_tooltip.c
intern/wm_window.c
intern/wm_stereo.c
+ intern/wm_toolsystem.c
+ intern/wm_tooltip.c
+ manipulators/intern/wm_manipulator.c
+ manipulators/intern/wm_manipulator_group.c
+ manipulators/intern/wm_manipulator_group_type.c
+ manipulators/intern/wm_manipulator_map.c
+ manipulators/intern/wm_manipulator_target_props.c
+ manipulators/intern/wm_manipulator_type.c
+ message_bus/intern/wm_message_bus.c
+ message_bus/intern/wm_message_bus_rna.c
+ message_bus/intern/wm_message_bus_static.c
WM_api.h
WM_keymap.h
@@ -82,10 +95,17 @@ set(SRC
wm_files.h
wm_subwindow.h
wm_window.h
+ manipulators/WM_manipulator_api.h
+ manipulators/WM_manipulator_types.h
+ manipulators/wm_manipulator_fn.h
+ manipulators/wm_manipulator_wmapi.h
+ manipulators/intern/wm_manipulator_intern.h
+ message_bus/intern/wm_message_bus_intern.h
+ message_bus/wm_message_bus.h
)
if(WITH_AUDASPACE)
- add_definitions(${AUDASPACE_DEFINITIONS})
+ add_definitions(-DWITH_AUDASPACE)
list(APPEND INC_SYS
${AUDASPACE_C_INCLUDE_DIRS}
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index 965eb2b258a..50efc4d3252 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -64,12 +64,20 @@ struct wmDrag;
struct ImBuf;
struct ImageFormatData;
struct ARegion;
+struct ScrArea;
+struct Main;
+struct bToolDef;
+
+#include "DNA_object_enums.h"
#ifdef WITH_INPUT_NDOF
struct wmNDOFMotionData;
#endif
typedef struct wmJob wmJob;
+typedef struct wmManipulator wmManipulator;
+typedef struct wmManipulatorMap wmManipulatorMap;
+typedef struct wmManipulatorMapType wmManipulatorMapType;
/* general API */
void WM_init_state_size_set (int stax, int stay, int sizx, int sizy);
@@ -94,6 +102,23 @@ int WM_window_pixels_x (struct wmWindow *win);
int WM_window_pixels_y (struct wmWindow *win);
bool WM_window_is_fullscreen (struct wmWindow *win);
+void WM_windows_scene_data_sync(const ListBase *win_lb, struct Scene *scene) ATTR_NONNULL();
+struct Scene *WM_windows_scene_get_from_screen(const struct wmWindowManager *wm, const struct bScreen *screen) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
+struct WorkSpace *WM_windows_workspace_get_from_screen(const wmWindowManager *wm, const struct bScreen *screen) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
+eObjectMode WM_windows_object_mode_get(const struct wmWindowManager *wm) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
+
+struct Scene *WM_window_get_active_scene(const struct wmWindow *win) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
+void WM_window_change_active_scene(struct Main *bmain, struct bContext *C, struct wmWindow *win,
+ struct Scene *scene_new) ATTR_NONNULL();
+struct WorkSpace *WM_window_get_active_workspace(const struct wmWindow *win) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
+void WM_window_set_active_workspace(struct wmWindow *win, struct WorkSpace *workspace) ATTR_NONNULL(1);
+struct WorkSpaceLayout *WM_window_get_active_layout(const struct wmWindow *win) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
+void WM_window_set_active_layout(
+ struct wmWindow *win, struct WorkSpace *workspace, struct WorkSpaceLayout *layout) ATTR_NONNULL(1);
+struct bScreen *WM_window_get_active_screen(const struct wmWindow *win) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
+void WM_window_set_active_screen(struct wmWindow *win, struct WorkSpace *workspace, struct bScreen *screen) ATTR_NONNULL(1);
+bool WM_window_is_temp_screen(const struct wmWindow *win) ATTR_WARN_UNUSED_RESULT;
+
/* defines for 'type' WM_window_open_temp */
enum {
WM_WINDOW_RENDER = 1,
@@ -143,6 +168,7 @@ float WM_cursor_pressure (const struct wmWindow *win);
/* event map */
int WM_userdef_event_map(int kmitype);
+int WM_userdef_event_type_from_keymap_type(int kmitype);
/* handlers */
@@ -172,6 +198,9 @@ void WM_event_free_ui_handler_all(
wmUIHandlerFunc ui_handle, wmUIHandlerRemoveFunc ui_remove);
struct wmEventHandler *WM_event_add_modal_handler(struct bContext *C, struct wmOperator *op);
+void WM_event_modal_handler_area_replace(wmWindow *win, const struct ScrArea *old_area, struct ScrArea *new_area);
+void WM_event_modal_handler_region_replace(wmWindow *win, const struct ARegion *old_region, struct ARegion *new_region);
+
void WM_event_remove_handlers(struct bContext *C, ListBase *handlers);
/* handler flag */
@@ -230,6 +259,7 @@ int WM_operator_smooth_viewtx_get(const struct wmOperator *op);
int WM_menu_invoke_ex(struct bContext *C, struct wmOperator *op, int opcontext);
int WM_menu_invoke (struct bContext *C, struct wmOperator *op, const struct wmEvent *event);
void WM_menu_name_call(struct bContext *C, const char *menu_name, short context);
+int WM_enum_search_invoke_previews(struct bContext *C, struct wmOperator *op, short prv_cols, short prv_rows);
int WM_enum_search_invoke(struct bContext *C, struct wmOperator *op, const struct wmEvent *event);
/* invoke callback, confirm menu + exec */
int WM_operator_confirm (struct bContext *C, struct wmOperator *op, const struct wmEvent *event);
@@ -267,6 +297,14 @@ void WM_operatortype_append_macro_ptr(void (*opfunc)(struct wmOperatorType *, v
void WM_operatortype_remove_ptr(struct wmOperatorType *ot);
bool WM_operatortype_remove(const char *idname);
void WM_operatortype_last_properties_clear_all(void);
+void WM_operatortype_props_advanced_begin(struct wmOperatorType *ot);
+void WM_operatortype_props_advanced_end(struct wmOperatorType *ot);
+
+#define WM_operatortype_prop_tag(property, tags) \
+ { \
+ CHECK_TYPE(tags, eOperatorPropTags); \
+ RNA_def_property_tags(prop, tags); \
+ } (void)0
struct wmOperatorType *WM_operatortype_append_macro(const char *idname, const char *name, const char *description, int flag);
struct wmOperatorTypeMacro *WM_operatortype_macro_define(struct wmOperatorType *ot, const char *idname);
@@ -423,9 +461,7 @@ ListBase *WM_dropboxmap_find(const char *idname, int spaceid, int regionid);
void wmSubWindowSet (struct wmWindow *win, int swinid);
void wmSubWindowScissorSet (struct wmWindow *win, int swinid, const struct rcti *srct, bool srct_pad);
- /* OpenGL utilities with safety check + working in modelview matrix mode */
-void wmFrustum (float x1, float x2, float y1, float y2, float n, float f);
-void wmOrtho (float x1, float x2, float y1, float y2, float n, float f);
+ /* OpenGL utilities with safety check */
void wmOrtho2 (float x1, float x2, float y1, float y2);
/* use for conventions (avoid hard-coded offsets all over) */
void wmOrtho2_region_pixelspace(const struct ARegion *ar);
@@ -508,7 +544,7 @@ void WM_progress_clear(struct wmWindow *win);
/* Draw (for screenshot) */
void *WM_draw_cb_activate(
struct wmWindow *win,
- void(*draw)(const struct wmWindow *, void *),
+ void (*draw)(const struct wmWindow *, void *),
void *customdata);
void WM_draw_cb_exit(struct wmWindow *win, void *handle);
void WM_redraw_windows(struct bContext *C);
@@ -536,6 +572,13 @@ bool WM_event_is_tablet(const struct wmEvent *event);
bool WM_event_is_ime_switch(const struct wmEvent *event);
#endif
+/* wm_toolsystem.c */
+void WM_toolsystem_unlink(struct bContext *C, struct WorkSpace *workspace);
+void WM_toolsystem_link(struct bContext *C, struct WorkSpace *workspace);
+
+void WM_toolsystem_set(struct bContext *C, const struct bToolDef *tool);
+void WM_toolsystem_init(struct bContext *C);
+
/* wm_tooltip.c */
typedef struct ARegion *(*wmTooltipInitFn)(struct bContext *, struct ARegion *, bool *);
diff --git a/source/blender/windowmanager/WM_message.h b/source/blender/windowmanager/WM_message.h
new file mode 100644
index 00000000000..48197ae99cd
--- /dev/null
+++ b/source/blender/windowmanager/WM_message.h
@@ -0,0 +1,30 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/windowmanager/WM_message.h
+ * \ingroup wm
+ */
+
+#ifndef __WM_MESSAGE_H__
+#define __WM_MESSAGE_H__
+
+#include "message_bus/wm_message_bus.h"
+
+#endif /* __WM_MESSAGE_H__ */
diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h
index 8fca0ce959e..46dad424cec 100644
--- a/source/blender/windowmanager/WM_types.h
+++ b/source/blender/windowmanager/WM_types.h
@@ -109,6 +109,7 @@ extern "C" {
struct bContext;
struct wmEvent;
struct wmWindowManager;
+struct wmMsgBus;
struct wmOperator;
struct ImBuf;
@@ -119,6 +120,10 @@ struct ImBuf;
/* exported types for WM */
#include "wm_cursors.h"
#include "wm_event_types.h"
+#include "manipulators/WM_manipulator_types.h"
+
+/* Include external manipulator API's */
+#include "manipulators/WM_manipulator_api.h"
/* ************** wmOperatorType ************************ */
@@ -160,6 +165,12 @@ enum {
WM_OP_EXEC_SCREEN
};
+/* property tags for RNA_OperatorProperties */
+typedef enum eOperatorPropTags {
+ OP_PROP_TAG_ADVANCED = (1 << 0),
+} eOperatorPropTags;
+#define OP_PROP_TAG_ADVANCED ((eOperatorPropTags)OP_PROP_TAG_ADVANCED)
+
/* ************** wmKeyMap ************************ */
/* modifier */
@@ -223,7 +234,7 @@ typedef struct wmNotifier {
#define NOTE_CATEGORY 0xFF000000
#define NC_WM (1<<24)
#define NC_WINDOW (2<<24)
-#define NC_SCREEN (3<<24)
+#define NC_SCREEN (3<<24)
#define NC_SCENE (4<<24)
#define NC_OBJECT (5<<24)
#define NC_MATERIAL (6<<24)
@@ -257,15 +268,16 @@ typedef struct wmNotifier {
#define ND_JOB (5<<16)
#define ND_UNDO (6<<16)
- /* NC_SCREEN screen */
-#define ND_SCREENBROWSE (1<<16)
-#define ND_SCREENDELETE (2<<16)
+ /* NC_SCREEN */
+#define ND_LAYOUTBROWSE (1<<16)
+#define ND_LAYOUTDELETE (2<<16)
#define ND_SCREENCAST (3<<16)
#define ND_ANIMPLAY (4<<16)
#define ND_GPENCIL (5<<16)
#define ND_EDITOR_CHANGED (6<<16) /*sent to new editors after switching to them*/
-#define ND_SCREENSET (7<<16)
+#define ND_LAYOUTSET (7<<16)
#define ND_SKETCH (8<<16)
+#define ND_WORKSPACE_SET (9<<16)
/* NC_SCENE Scene */
#define ND_SCENEBROWSE (1<<16)
diff --git a/source/blender/windowmanager/intern/wm.c b/source/blender/windowmanager/intern/wm.c
index a09cc4aeb31..623a7af5165 100644
--- a/source/blender/windowmanager/intern/wm.c
+++ b/source/blender/windowmanager/intern/wm.c
@@ -52,9 +52,11 @@
#include "BKE_screen.h"
#include "BKE_report.h"
#include "BKE_global.h"
+#include "BKE_workspace.h"
#include "WM_api.h"
#include "WM_types.h"
+#include "WM_message.h"
#include "wm_window.h"
#include "wm_event_system.h"
#include "wm_draw.h"
@@ -353,7 +355,7 @@ void WM_keymap_init(bContext *C)
/* initialize only after python init is done, for keymaps that
* use python operators */
- if (CTX_py_init_get(C) && (wm->initialized & WM_INIT_KEYMAP) == 0) {
+ if (CTX_py_init_get(C) && (wm->initialized & WM_KEYMAP_IS_INITIALIZED) == 0) {
/* create default key config, only initialize once,
* it's persistent across sessions */
if (!(wm->defaultconf->flag & KEYCONF_INIT_DEFAULT)) {
@@ -366,7 +368,7 @@ void WM_keymap_init(bContext *C)
WM_keyconfig_update_tag(NULL, NULL);
WM_keyconfig_update(wm);
- wm->initialized |= WM_INIT_KEYMAP;
+ wm->initialized |= WM_KEYMAP_IS_INITIALIZED;
}
}
@@ -386,7 +388,7 @@ void WM_check(bContext *C)
if (!G.background) {
/* case: fileread */
- if ((wm->initialized & WM_INIT_WINDOW) == 0) {
+ if ((wm->initialized & WM_WINDOW_IS_INITIALIZED) == 0) {
WM_keymap_init(C);
WM_autosave_init(wm);
}
@@ -395,11 +397,15 @@ void WM_check(bContext *C)
wm_window_ghostwindows_ensure(wm);
}
+ if (wm->message_bus == NULL) {
+ wm->message_bus = WM_msgbus_create();
+ }
+
/* case: fileread */
/* note: this runs in bg mode to set the screen context cb */
- if ((wm->initialized & WM_INIT_WINDOW) == 0) {
+ if ((wm->initialized & WM_WINDOW_IS_INITIALIZED) == 0) {
ED_screens_initialize(wm);
- wm->initialized |= WM_INIT_WINDOW;
+ wm->initialized |= WM_WINDOW_IS_INITIALIZED;
}
}
@@ -428,21 +434,24 @@ void wm_clear_default_size(bContext *C)
}
/* on startup, it adds all data, for matching */
-void wm_add_default(bContext *C)
+void wm_add_default(Main *bmain, bContext *C)
{
- wmWindowManager *wm = BKE_libblock_alloc(CTX_data_main(C), ID_WM, "WinMan", 0);
+ wmWindowManager *wm = BKE_libblock_alloc(bmain, ID_WM, "WinMan", 0);
wmWindow *win;
bScreen *screen = CTX_wm_screen(C); /* XXX from file read hrmf */
-
+ WorkSpace *workspace;
+ WorkSpaceLayout *layout = BKE_workspace_layout_find_global(bmain, screen, &workspace);
+
CTX_wm_manager_set(C, wm);
win = wm_window_new(C);
- win->screen = screen;
+ win->scene = CTX_data_scene(C);
+ WM_window_set_active_workspace(win, workspace);
+ WM_window_set_active_layout(win, workspace, layout);
screen->winid = win->winid;
- BLI_strncpy(win->screenname, screen->id.name + 2, sizeof(win->screenname));
wm->winactive = win;
wm->file_saved = 1;
- wm_window_make_drawable(wm, win);
+ wm_window_make_drawable(wm, win);
}
@@ -457,7 +466,7 @@ void wm_close_and_free(bContext *C, wmWindowManager *wm)
wm_autosave_timer_ended(wm);
while ((win = BLI_pophead(&wm->windows))) {
- win->screen = NULL; /* prevent draw clear to use screen */
+ WM_window_set_active_workspace(win, NULL); /* prevent draw clear to use screen */
wm_draw_window_clear(win);
wm_window_free(C, wm, win);
}
@@ -471,7 +480,11 @@ void wm_close_and_free(bContext *C, wmWindowManager *wm)
}
BLI_freelistN(&wm->queue);
-
+
+ if (wm->message_bus != NULL) {
+ WM_msgbus_destroy(wm->message_bus);
+ }
+
BLI_freelistN(&wm->paintcursors);
WM_drag_free_list(&wm->drags);
diff --git a/source/blender/windowmanager/intern/wm_dragdrop.c b/source/blender/windowmanager/intern/wm_dragdrop.c
index dd01efdb4c4..05d9689565c 100644
--- a/source/blender/windowmanager/intern/wm_dragdrop.c
+++ b/source/blender/windowmanager/intern/wm_dragdrop.c
@@ -46,6 +46,8 @@
#include "BKE_context.h"
+#include "GPU_shader.h"
+
#include "IMB_imbuf_types.h"
#include "UI_interface.h"
@@ -268,10 +270,10 @@ void wm_drags_check_ops(bContext *C, const wmEvent *event)
static void wm_drop_operator_draw(const char *name, int x, int y)
{
const uiFontStyle *fstyle = UI_FSTYLE_WIDGET;
- const unsigned char fg[4] = {255, 255, 255, 255};
- const unsigned char bg[4] = {0, 0, 0, 50};
+ const float col_fg[4] = {1.0f, 1.0f, 1.0f, 1.0f};
+ const float col_bg[4] = {0.0f, 0.0f, 0.0f, 0.2f};
- UI_fontstyle_draw_simple_backdrop(fstyle, x, y, name, fg, bg);
+ UI_fontstyle_draw_simple_backdrop(fstyle, x, y, name, col_fg, col_bg);
}
static const char *wm_drag_name(wmDrag *drag)
@@ -332,8 +334,10 @@ void wm_drags_draw(bContext *C, wmWindow *win, rcti *rect)
if (rect)
drag_rect_minmax(rect, x, y, x + drag->sx, y + drag->sy);
else {
- glColor4f(1.0, 1.0, 1.0, 0.65); /* this blends texture */
- glaDrawPixelsTexScaled(x, y, drag->imb->x, drag->imb->y, GL_RGBA, GL_UNSIGNED_BYTE, GL_NEAREST, drag->imb->rect, drag->scale, drag->scale);
+ float col[4] = {1.0f, 1.0f, 1.0f, 0.65f}; /* this blends texture */
+ IMMDrawPixelsTexState state = immDrawPixelsTexSetup(GPU_SHADER_2D_IMAGE_COLOR);
+ immDrawPixelsTexScaled(&state, x, y, drag->imb->x, drag->imb->y, GL_RGBA, GL_UNSIGNED_BYTE, GL_NEAREST,
+ drag->imb->rect, drag->scale, drag->scale, 1.0f, 1.0f, col);
}
}
else {
@@ -361,8 +365,8 @@ void wm_drags_draw(bContext *C, wmWindow *win, rcti *rect)
drag_rect_minmax(rect, x, y, x + w, y + iconsize);
}
else {
- glColor4ub(255, 255, 255, 255);
- UI_fontstyle_draw_simple(fstyle, x, y, wm_drag_name(drag));
+ const unsigned char col[] = {255, 255, 255, 255};
+ UI_fontstyle_draw_simple(fstyle, x, y, wm_drag_name(drag), col);
}
/* operator name with roundbox */
diff --git a/source/blender/windowmanager/intern/wm_draw.c b/source/blender/windowmanager/intern/wm_draw.c
index e1f21699057..b12dbf7b021 100644
--- a/source/blender/windowmanager/intern/wm_draw.c
+++ b/source/blender/windowmanager/intern/wm_draw.c
@@ -34,6 +34,8 @@
#include <string.h>
#include "DNA_listBase.h"
+#include "DNA_object_types.h"
+#include "DNA_camera_types.h"
#include "DNA_screen_types.h"
#include "DNA_windowmanager_types.h"
#include "DNA_userdef_types.h"
@@ -48,6 +50,8 @@
#include "BKE_context.h"
#include "BKE_image.h"
+#include "BKE_scene.h"
+#include "BKE_workspace.h"
#include "GHOST_C-api.h"
@@ -57,8 +61,8 @@
#include "GPU_draw.h"
#include "GPU_extensions.h"
-#include "GPU_glew.h"
-#include "GPU_basic_shader.h"
+#include "GPU_immediate.h"
+#include "GPU_viewport.h"
#include "RE_engine.h"
@@ -88,7 +92,7 @@ static void wm_paintcursor_draw(bContext *C, ARegion *ar)
if (wm->paintcursors.first) {
wmWindow *win = CTX_wm_window(C);
- bScreen *screen = win->screen;
+ bScreen *screen = WM_window_get_active_screen(win);
wmPaintCursor *pc;
if (ar->swinid && screen->subwinactive == ar->swinid) {
@@ -131,26 +135,30 @@ static bool wm_area_test_invalid_backbuf(ScrArea *sa)
return true;
}
-static void wm_region_test_render_do_draw(const bScreen *screen, ScrArea *sa, ARegion *ar)
+static void wm_region_test_render_do_draw(const Scene *scene, const struct Depsgraph *depsgraph,
+ ScrArea *sa, ARegion *ar)
{
/* tag region for redraw from render engine preview running inside of it */
if (sa->spacetype == SPACE_VIEW3D) {
RegionView3D *rv3d = ar->regiondata;
RenderEngine *engine = (rv3d) ? rv3d->render_engine : NULL;
+ GPUViewport *viewport = (rv3d) ? rv3d->viewport : NULL;
if (engine && (engine->flag & RE_ENGINE_DO_DRAW)) {
- Scene *scene = screen->scene;
View3D *v3d = sa->spacedata.first;
rcti border_rect;
/* do partial redraw when possible */
- if (ED_view3d_calc_render_border(scene, v3d, ar, &border_rect))
+ if (ED_view3d_calc_render_border(scene, depsgraph, v3d, ar, &border_rect))
ED_region_tag_redraw_partial(ar, &border_rect);
else
ED_region_tag_redraw(ar);
engine->flag &= ~RE_ENGINE_DO_DRAW;
}
+ else if (viewport && GPU_viewport_do_update(viewport)) {
+ ED_region_tag_redraw(ar);
+ }
}
}
@@ -199,7 +207,7 @@ static void wm_draw_callbacks(wmWindow *win)
static void wm_method_draw_full(bContext *C, wmWindow *win)
{
- bScreen *screen = win->screen;
+ bScreen *screen = WM_window_get_active_screen(win);
ScrArea *sa;
ARegion *ar;
@@ -279,7 +287,7 @@ static void wm_flush_regions_up(bScreen *screen, rcti *dirty)
static void wm_method_draw_overlap_all(bContext *C, wmWindow *win, int exchange)
{
wmWindowManager *wm = CTX_wm_manager(C);
- bScreen *screen = win->screen;
+ bScreen *screen = WM_window_get_active_screen(win);
ScrArea *sa;
ARegion *ar;
static rcti rect = {0, 0, 0, 0};
@@ -415,118 +423,116 @@ static void wm_draw_triple_fail(bContext *C, wmWindow *win)
{
wm_draw_window_clear(win);
- win->drawfail = 1;
+ win->drawfail = true;
wm_method_draw_overlap_all(C, win, 0);
}
-static int wm_triple_gen_textures(wmWindow *win, wmDrawTriple *triple)
+static bool wm_triple_gen_textures(wmWindow *win, wmDrawTriple *triple)
{
- const int winsize_x = WM_window_pixels_x(win);
- const int winsize_y = WM_window_pixels_y(win);
-
- GLint maxsize;
-
/* compute texture sizes */
- if (GLEW_ARB_texture_rectangle || GLEW_NV_texture_rectangle || GLEW_EXT_texture_rectangle) {
- triple->target = GL_TEXTURE_RECTANGLE_ARB;
- }
- else {
- triple->target = GL_TEXTURE_2D;
- }
-
- triple->x = winsize_x;
- triple->y = winsize_y;
+ triple->x = WM_window_pixels_x(win);
+ triple->y = WM_window_pixels_y(win);
+
+#if USE_TEXTURE_RECTANGLE
+ /* GL_TEXTURE_RECTANGLE is part of GL 3.1 so we can use it soon without runtime checks */
+ triple->target = GL_TEXTURE_RECTANGLE;
+#else
+ triple->target = GL_TEXTURE_2D;
+#endif
/* generate texture names */
glGenTextures(1, &triple->bind);
- if (!triple->bind) {
- /* not the typical failure case but we handle it anyway */
- printf("WM: failed to allocate texture for triple buffer drawing (glGenTextures).\n");
- return 0;
- }
-
/* proxy texture is only guaranteed to test for the cases that
* there is only one texture in use, which may not be the case */
- maxsize = GPU_max_texture_size();
+ const GLint maxsize = GPU_max_texture_size();
if (triple->x > maxsize || triple->y > maxsize) {
- glBindTexture(triple->target, 0);
printf("WM: failed to allocate texture for triple buffer drawing "
- "(texture too large for graphics card).\n");
- return 0;
+ "(texture too large for graphics card).\n");
+ return false;
}
/* setup actual texture */
glBindTexture(triple->target, triple->bind);
- glTexImage2D(triple->target, 0, GL_RGB8, triple->x, triple->y, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
+
+ /* no mipmaps */
+#if USE_TEXTURE_RECTANGLE
+ /* already has no mipmaps */
+#else
+ glTexParameteri(triple->target, GL_TEXTURE_MAX_LEVEL, 0);
+ /* GL_TEXTURE_BASE_LEVEL = 0 by default */
+#endif
+
glTexParameteri(triple->target, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(triple->target, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glBindTexture(triple->target, 0);
- /* not sure if this works everywhere .. */
- if (glGetError() == GL_OUT_OF_MEMORY) {
- printf("WM: failed to allocate texture for triple buffer drawing (out of memory).\n");
- return 0;
- }
+ glTexImage2D(triple->target, 0, GL_RGB8, triple->x, triple->y, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
+
+ glBindTexture(triple->target, 0);
- return 1;
+ return true;
}
-void wm_triple_draw_textures(wmWindow *win, wmDrawTriple *triple, float alpha, bool is_interlace)
+void wm_triple_draw_textures(wmWindow *win, wmDrawTriple *triple, float alpha)
{
const int sizex = WM_window_pixels_x(win);
const int sizey = WM_window_pixels_y(win);
- float halfx, halfy, ratiox, ratioy;
-
/* wmOrtho for the screen has this same offset */
- ratiox = sizex;
- ratioy = sizey;
- halfx = GLA_PIXEL_OFS;
- halfy = GLA_PIXEL_OFS;
+ float ratiox = sizex;
+ float ratioy = sizey;
+ float halfx = GLA_PIXEL_OFS;
+ float halfy = GLA_PIXEL_OFS;
+#if USE_TEXTURE_RECTANGLE
/* texture rectangle has unnormalized coordinates */
- if (triple->target == GL_TEXTURE_2D) {
- ratiox /= triple->x;
- ratioy /= triple->y;
- halfx /= triple->x;
- halfy /= triple->y;
- }
+#else
+ ratiox /= triple->x;
+ ratioy /= triple->y;
+ halfx /= triple->x;
+ halfy /= triple->y;
+#endif
- /* interlace stereo buffer bind the shader before calling wm_triple_draw_textures */
- if (is_interlace) {
- glEnable(triple->target);
- }
- else {
- GPU_basic_shader_bind((triple->target == GL_TEXTURE_2D) ? GPU_SHADER_TEXTURE_2D : GPU_SHADER_TEXTURE_RECT);
- }
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int texcoord = GWN_vertformat_attr_add(format, "texCoord", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ const int activeTex = 7; /* arbitrary */
+ glActiveTexture(GL_TEXTURE0 + activeTex);
glBindTexture(triple->target, triple->bind);
- glColor4f(1.0f, 1.0f, 1.0f, alpha);
- glBegin(GL_QUADS);
- glTexCoord2f(halfx, halfy);
- glVertex2f(0, 0);
+#if USE_TEXTURE_RECTANGLE
+ immBindBuiltinProgram(GPU_SHADER_3D_IMAGE_RECT_MODULATE_ALPHA);
+#else
+ immBindBuiltinProgram(GPU_SHADER_3D_IMAGE_MODULATE_ALPHA);
+ /* TODO: make pure 2D version
+ * and a 2D_IMAGE (replace, not modulate) version for when alpha = 1.0
+ */
+#endif
+ immUniform1f("alpha", alpha);
+ immUniform1i("image", activeTex);
- glTexCoord2f(ratiox + halfx, halfy);
- glVertex2f(sizex, 0);
+ immBegin(GWN_PRIM_TRI_FAN, 4);
- glTexCoord2f(ratiox + halfx, ratioy + halfy);
- glVertex2f(sizex, sizey);
+ immAttrib2f(texcoord, halfx, halfy);
+ immVertex2f(pos, 0.0f, 0.0f);
- glTexCoord2f(halfx, ratioy + halfy);
- glVertex2f(0, sizey);
- glEnd();
+ immAttrib2f(texcoord, ratiox + halfx, halfy);
+ immVertex2f(pos, sizex, 0.0f);
- glBindTexture(triple->target, 0);
+ immAttrib2f(texcoord, ratiox + halfx, ratioy + halfy);
+ immVertex2f(pos, sizex, sizey);
- if (is_interlace) {
- glDisable(triple->target);
- }
- else {
- GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
- }
+ immAttrib2f(texcoord, halfx, ratioy + halfy);
+ immVertex2f(pos, 0.0f, sizey);
+
+ immEnd();
+ immUnbindProgram();
+
+ glBindTexture(triple->target, 0);
+ if (activeTex != 0)
+ glActiveTexture(GL_TEXTURE0);
}
static void wm_triple_copy_textures(wmWindow *win, wmDrawTriple *triple)
@@ -535,8 +541,8 @@ static void wm_triple_copy_textures(wmWindow *win, wmDrawTriple *triple)
const int sizey = WM_window_pixels_y(win);
glBindTexture(triple->target, triple->bind);
+ /* what is GL_READ_BUFFER right now? */
glCopyTexSubImage2D(triple->target, 0, 0, 0, 0, 0, sizex, sizey);
-
glBindTexture(triple->target, 0);
}
@@ -546,10 +552,12 @@ static void wm_draw_region_blend(wmWindow *win, ARegion *ar, wmDrawTriple *tripl
/* region blend always is 1, except when blend timer is running */
if (fac < 1.0f) {
- wmSubWindowScissorSet(win, win->screen->mainwin, &ar->winrct, true);
+ bScreen *screen = WM_window_get_active_screen(win);
+
+ wmSubWindowScissorSet(win, screen->mainwin, &ar->winrct, true);
glEnable(GL_BLEND);
- wm_triple_draw_textures(win, triple, 1.0f - fac, false);
+ wm_triple_draw_textures(win, triple, 1.0f - fac);
glDisable(GL_BLEND);
}
}
@@ -558,18 +566,20 @@ static void wm_method_draw_triple(bContext *C, wmWindow *win)
{
wmWindowManager *wm = CTX_wm_manager(C);
wmDrawData *dd, *dd_next, *drawdata = win->drawdata.first;
- bScreen *screen = win->screen;
+ bScreen *screen = WM_window_get_active_screen(win);
ScrArea *sa;
ARegion *ar;
- int copytex = false;
+ bool copytex = false;
if (drawdata && drawdata->triple) {
- glClearColor(0, 0, 0, 0);
+#if 0 /* why do we need to clear before overwriting? */
+ glClearColor(1, 1, 0, 0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+#endif
wmSubWindowSet(win, screen->mainwin);
- wm_triple_draw_textures(win, drawdata->triple, 1.0f, false);
+ wm_triple_draw_textures(win, drawdata->triple, 1.0f);
}
else {
/* we run it when we start OR when we turn stereo on */
@@ -664,7 +674,7 @@ static void wm_method_draw_triple(bContext *C, wmWindow *win)
/* after area regions so we can do area 'overlay' drawing */
ED_screen_draw_edges(win);
- win->screen->do_draw = false;
+ WM_window_get_active_screen(win)->do_draw = false;
wm_draw_callbacks(win);
/* draw floating regions (menus) */
@@ -692,7 +702,7 @@ static void wm_method_draw_triple_multiview(bContext *C, wmWindow *win, eStereoV
wmWindowManager *wm = CTX_wm_manager(C);
wmDrawData *drawdata;
wmDrawTriple *triple_data, *triple_all;
- bScreen *screen = win->screen;
+ bScreen *screen = WM_window_get_active_screen(win);
ScrArea *sa;
ARegion *ar;
int copytex = false;
@@ -704,12 +714,14 @@ static void wm_method_draw_triple_multiview(bContext *C, wmWindow *win, eStereoV
if (drawdata && drawdata->triple) {
if (id == 0) {
+#if 0 /* why do we need to clear before overwriting? */
glClearColor(0, 0, 0, 0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+#endif
wmSubWindowSet(win, screen->mainwin);
- wm_triple_draw_textures(win, drawdata->triple, 1.0f, false);
+ wm_triple_draw_textures(win, drawdata->triple, 1.0f);
}
}
else {
@@ -745,9 +757,12 @@ static void wm_method_draw_triple_multiview(bContext *C, wmWindow *win, eStereoV
case SPACE_VIEW3D:
{
View3D *v3d = sa->spacedata.first;
- BGpic *bgpic = v3d->bgpicbase.first;
- v3d->multiview_eye = sview;
- if (bgpic) bgpic->iuser.multiview_eye = sview;
+ if (v3d->camera && v3d->camera->type == OB_CAMERA) {
+ Camera *cam = v3d->camera->data;
+ CameraBGImage *bgpic = cam->bg_images.first;
+ v3d->multiview_eye = sview;
+ if (bgpic) bgpic->iuser.multiview_eye = sview;
+ }
break;
}
case SPACE_NODE:
@@ -836,7 +851,8 @@ static void wm_method_draw_triple_multiview(bContext *C, wmWindow *win, eStereoV
/* after area regions so we can do area 'overlay' drawing */
ED_screen_draw_edges(win);
if (sview == STEREO_RIGHT_ID)
- win->screen->do_draw = false;
+ screen->do_draw = false;
+
wm_draw_callbacks(win);
/* draw floating regions (menus) */
@@ -869,7 +885,11 @@ static void wm_method_draw_triple_multiview(bContext *C, wmWindow *win, eStereoV
/* quick test to prevent changing window drawable */
static bool wm_draw_update_test_window(wmWindow *win)
{
- const bScreen *screen = win->screen;
+ /*const*/ struct WorkSpace *workspace = WM_window_get_active_workspace(win);
+ /*const*/ Scene *scene = WM_window_get_active_scene(win);
+ /*const*/ ViewLayer *view_layer = BKE_workspace_view_layer_get(workspace, scene);
+ struct Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true);
+ const bScreen *screen = WM_window_get_active_screen(win);
ScrArea *sa;
ARegion *ar;
bool do_draw = false;
@@ -885,7 +905,7 @@ static bool wm_draw_update_test_window(wmWindow *win)
for (sa = screen->areabase.first; sa; sa = sa->next) {
for (ar = sa->regionbase.first; ar; ar = ar->next) {
- wm_region_test_render_do_draw(screen, sa, ar);
+ wm_region_test_render_do_draw(scene, depsgraph, sa, ar);
if (ar->swinid && ar->do_draw)
do_draw = true;
@@ -932,15 +952,18 @@ void wm_tag_redraw_overlay(wmWindow *win, ARegion *ar)
{
/* for draw triple gestures, paint cursors don't need region redraw */
if (ar && win) {
+ bScreen *screen = WM_window_get_active_screen(win);
+
if (wm_automatic_draw_method(win) != USER_DRAW_TRIPLE)
ED_region_tag_redraw(ar);
- win->screen->do_draw_paintcursor = true;
+ screen->do_draw_paintcursor = true;
}
}
void WM_paint_cursor_tag_redraw(wmWindow *win, ARegion *ar)
{
- win->screen->do_draw_paintcursor = true;
+ bScreen *screen = WM_window_get_active_screen(win);
+ screen->do_draw_paintcursor = true;
wm_tag_redraw_overlay(win, ar);
}
@@ -973,7 +996,7 @@ void wm_draw_update(bContext *C)
}
if (wm_draw_update_test_window(win)) {
- bScreen *screen = win->screen;
+ bScreen *screen = WM_window_get_active_screen(win);
CTX_wm_window_set(C, win);
@@ -1028,7 +1051,7 @@ void wm_draw_data_free(wmWindow *win)
void wm_draw_window_clear(wmWindow *win)
{
- bScreen *screen = win->screen;
+ bScreen *screen = WM_window_get_active_screen(win);
ScrArea *sa;
ARegion *ar;
@@ -1046,12 +1069,13 @@ void wm_draw_window_clear(wmWindow *win)
void wm_draw_region_clear(wmWindow *win, ARegion *ar)
{
+ bScreen *screen = WM_window_get_active_screen(win);
int drawmethod = wm_automatic_draw_method(win);
if (ELEM(drawmethod, USER_DRAW_OVERLAP, USER_DRAW_OVERLAP_FLIP))
- wm_flush_regions_down(win->screen, &ar->winrct);
+ wm_flush_regions_down(screen, &ar->winrct);
- win->screen->do_draw = true;
+ screen->do_draw = true;
}
void WM_redraw_windows(bContext *C)
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index d36702b4df7..b26bbda6855 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -53,10 +53,12 @@
#include "BKE_context.h"
#include "BKE_idprop.h"
#include "BKE_global.h"
+#include "BKE_layer.h"
#include "BKE_main.h"
#include "BKE_report.h"
#include "BKE_scene.h"
#include "BKE_screen.h"
+#include "BKE_workspace.h"
#include "BKE_sound.h"
@@ -68,14 +70,13 @@
#include "RNA_access.h"
-#include "GPU_debug.h"
-
#include "UI_interface.h"
#include "PIL_time.h"
#include "WM_api.h"
#include "WM_types.h"
+#include "WM_message.h"
#include "wm.h"
#include "wm_window.h"
#include "wm_event_system.h"
@@ -83,6 +84,8 @@
#include "RNA_enum_types.h"
+#include "DEG_depsgraph.h"
+
/* Motion in pixels allowed before we don't consider single/double click. */
#define WM_EVENT_CLICK_WIGGLE_ROOM 2
@@ -247,6 +250,14 @@ void WM_main_remove_notifier_reference(const void *reference)
wm_notifier_clear(note);
}
}
+
+ /* Remap instead. */
+#if 0
+ if (wm->message_bus) {
+ WM_msg_id_remove(wm->message_bus, reference);
+ }
+#endif
+
}
}
@@ -266,6 +277,17 @@ void WM_main_remap_editor_id_reference(ID *old_id, ID *new_id)
}
}
}
+
+ wmWindowManager *wm = bmain->wm.first;
+ if (wm && wm->message_bus) {
+ struct wmMsgBus *mbus = wm->message_bus;
+ if (new_id != NULL) {
+ WM_msg_id_update(mbus, old_id, new_id);
+ }
+ else {
+ WM_msg_id_remove(mbus, old_id);
+ }
+ }
}
static void wm_notifier_clear(wmNotifier *note)
@@ -285,15 +307,20 @@ void wm_event_do_refresh_wm_and_depsgraph(bContext *C)
/* combine datamasks so 1 win doesn't disable UV's in another [#26448] */
for (wmWindow *win = wm->windows.first; win; win = win->next) {
- win_combine_v3d_datamask |= ED_view3d_screen_datamask(win->screen);
+ const Scene *scene = WM_window_get_active_scene(win);
+ const bScreen *screen = WM_window_get_active_screen(win);
+
+ win_combine_v3d_datamask |= ED_view3d_screen_datamask(scene, screen);
}
/* cached: editor refresh callbacks now, they get context */
for (wmWindow *win = wm->windows.first; win; win = win->next) {
+ const bScreen *screen = WM_window_get_active_screen(win);
+ Scene *scene = WM_window_get_active_scene(win);
ScrArea *sa;
CTX_wm_window_set(C, win);
- for (sa = win->screen->areabase.first; sa; sa = sa->next) {
+ for (sa = screen->areabase.first; sa; sa = sa->next) {
if (sa->do_refresh) {
CTX_wm_area_set(C, sa);
ED_area_do_refresh(C, sa);
@@ -306,12 +333,16 @@ void wm_event_do_refresh_wm_and_depsgraph(bContext *C)
Main *bmain = CTX_data_main(C);
/* copied to set's in scene_update_tagged_recursive() */
- win->screen->scene->customdata_mask = win_combine_v3d_datamask;
+ scene->customdata_mask = win_combine_v3d_datamask;
/* XXX, hack so operators can enforce datamasks [#26482], gl render */
- win->screen->scene->customdata_mask |= win->screen->scene->customdata_mask_modal;
+ scene->customdata_mask |= scene->customdata_mask_modal;
+
+ WorkSpace *workspace = WM_window_get_active_workspace(win);
- BKE_scene_update_tagged(bmain->eval_ctx, bmain, win->screen->scene);
+ BKE_workspace_update_object_mode(bmain->eval_ctx, workspace);
+
+ BKE_workspace_update_tagged(bmain->eval_ctx, bmain, workspace, scene);
}
}
@@ -327,9 +358,12 @@ void wm_event_do_notifiers(bContext *C)
if (wm == NULL)
return;
-
+
+ /* disable? - keep for now since its used for window level notifiers. */
+#if 1
/* cache & catch WM level notifiers, such as frame change, scene/screen set */
for (win = wm->windows.first; win; win = win->next) {
+ Scene *scene = WM_window_get_active_scene(win);
bool do_anim = false;
CTX_wm_window_set(C, win);
@@ -347,17 +381,31 @@ void wm_event_do_notifiers(bContext *C)
}
if (note->window == win) {
if (note->category == NC_SCREEN) {
- if (note->data == ND_SCREENBROWSE) {
+ if (note->data == ND_WORKSPACE_SET) {
+ WorkSpace *ref_ws = note->reference;
+
+ UI_popup_handlers_remove_all(C, &win->modalhandlers);
+
+ ED_workspace_change(ref_ws, C, win);
+ if (G.debug & G_DEBUG_EVENTS)
+ printf("%s: Workspace set %p\n", __func__, note->reference);
+ }
+ else if (note->data == ND_LAYOUTBROWSE) {
+ bScreen *ref_screen = BKE_workspace_layout_screen_get(note->reference);
+
/* free popup handlers only [#35434] */
UI_popup_handlers_remove_all(C, &win->modalhandlers);
- ED_screen_set(C, note->reference); // XXX hrms, think this over!
+ ED_screen_change(C, ref_screen); /* XXX hrms, think this over! */
if (G.debug & G_DEBUG_EVENTS)
printf("%s: screen set %p\n", __func__, note->reference);
}
- else if (note->data == ND_SCREENDELETE) {
- ED_screen_delete(C, note->reference); // XXX hrms, think this over!
+ else if (note->data == ND_LAYOUTDELETE) {
+ WorkSpace *workspace = WM_window_get_active_workspace(win);
+ WorkSpaceLayout *layout = note->reference;
+
+ ED_workspace_layout_delete(workspace, layout, C); // XXX hrms, think this over!
if (G.debug & G_DEBUG_EVENTS)
printf("%s: screen delete %p\n", __func__, note->reference);
}
@@ -365,7 +413,7 @@ void wm_event_do_notifiers(bContext *C)
}
if (note->window == win ||
- (note->window == NULL && (note->reference == NULL || note->reference == win->screen->scene)))
+ (note->window == NULL && (note->reference == NULL || note->reference == scene)))
{
if (note->category == NC_SCENE) {
if (note->data == ND_FRAME)
@@ -373,19 +421,21 @@ void wm_event_do_notifiers(bContext *C)
}
}
if (ELEM(note->category, NC_SCENE, NC_OBJECT, NC_GEOM, NC_WM)) {
- ED_info_stats_clear(win->screen->scene);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ ED_info_stats_clear(view_layer);
WM_event_add_notifier(C, NC_SPACE | ND_SPACE_INFO, NULL);
}
}
if (do_anim) {
/* XXX, quick frame changes can cause a crash if framechange and rendering
- * collide (happens on slow scenes), BKE_scene_update_for_newframe can be called
+ * collide (happens on slow scenes), BKE_scene_graph_update_for_newframe can be called
* twice which can depgraph update the same object at once */
if (G.is_rendering == false) {
-
/* depsgraph gets called, might send more notifiers */
- ED_update_for_newframe(CTX_data_main(C), win->screen->scene, 1);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Depsgraph *depsgraph = CTX_data_depsgraph(C);
+ ED_update_for_newframe(CTX_data_main(C), scene, view_layer, depsgraph);
}
}
}
@@ -393,12 +443,20 @@ void wm_event_do_notifiers(bContext *C)
/* the notifiers are sent without context, to keep it clean */
while ((note = BLI_pophead(&wm->queue))) {
for (win = wm->windows.first; win; win = win->next) {
-
+ Scene *scene = WM_window_get_active_scene(win);
+ bScreen *screen = WM_window_get_active_screen(win);
+ WorkSpace *workspace = WM_window_get_active_workspace(win);
+
/* filter out notifiers */
- if (note->category == NC_SCREEN && note->reference && note->reference != win->screen) {
+ if (note->category == NC_SCREEN &&
+ note->reference &&
+ note->reference != screen &&
+ note->reference != workspace &&
+ note->reference != WM_window_get_active_layout(win))
+ {
/* pass */
}
- else if (note->category == NC_SCENE && note->reference && note->reference != win->screen->scene) {
+ else if (note->category == NC_SCENE && note->reference && note->reference != scene) {
/* pass */
}
else {
@@ -411,14 +469,14 @@ void wm_event_do_notifiers(bContext *C)
/* printf("notifier win %d screen %s cat %x\n", win->winid, win->screen->id.name + 2, note->category); */
ED_screen_do_listen(C, note);
- for (ar = win->screen->regionbase.first; ar; ar = ar->next) {
- ED_region_do_listen(win->screen, NULL, ar, note);
+ for (ar = screen->regionbase.first; ar; ar = ar->next) {
+ ED_region_do_listen(screen, NULL, ar, note, scene);
}
- for (sa = win->screen->areabase.first; sa; sa = sa->next) {
- ED_area_do_listen(win->screen, sa, note);
+ for (sa = screen->areabase.first; sa; sa = sa->next) {
+ ED_area_do_listen(screen, sa, note, scene, workspace);
for (ar = sa->regionbase.first; ar; ar = ar->next) {
- ED_region_do_listen(win->screen, sa, ar, note);
+ ED_region_do_listen(screen, sa, ar, note, scene);
}
}
}
@@ -426,7 +484,17 @@ void wm_event_do_notifiers(bContext *C)
MEM_freeN(note);
}
-
+#endif /* if 1 (postpone disabling for in favor of message-bus), eventually. */
+
+ /* Handle message bus. */
+ {
+ for (win = wm->windows.first; win; win = win->next) {
+ CTX_wm_window_set(C, win);
+ WM_msgbus_handle(wm->message_bus, C);
+ }
+ CTX_wm_window_set(C, NULL);
+ }
+
wm_event_do_refresh_wm_and_depsgraph(C);
}
@@ -1595,6 +1663,36 @@ int WM_userdef_event_map(int kmitype)
return kmitype;
}
+/**
+ * Use so we can check if 'wmEvent.type' is released in modal operators.
+ *
+ * An alternative would be to add a 'wmEvent.type_nokeymap'... or similar.
+ */
+int WM_userdef_event_type_from_keymap_type(int kmitype)
+{
+ switch (kmitype) {
+ case SELECTMOUSE:
+ return (U.flag & USER_LMOUSESELECT) ? LEFTMOUSE : RIGHTMOUSE;
+ case ACTIONMOUSE:
+ return (U.flag & USER_LMOUSESELECT) ? RIGHTMOUSE : LEFTMOUSE;
+ case EVT_TWEAK_S:
+ return (U.flag & USER_LMOUSESELECT) ? LEFTMOUSE : RIGHTMOUSE;
+ case EVT_TWEAK_A:
+ return (U.flag & USER_LMOUSESELECT) ? RIGHTMOUSE : LEFTMOUSE;
+ case EVT_TWEAK_L:
+ return LEFTMOUSE;
+ case EVT_TWEAK_M:
+ return MIDDLEMOUSE;
+ case EVT_TWEAK_R:
+ return RIGHTMOUSE;
+ case WHEELOUTMOUSE:
+ return (U.uiflag & USER_WHEELZOOMDIR) ? WHEELUPMOUSE : WHEELDOWNMOUSE;
+ case WHEELINMOUSE:
+ return (U.uiflag & USER_WHEELZOOMDIR) ? WHEELDOWNMOUSE : WHEELUPMOUSE;
+ }
+
+ return kmitype;
+}
static int wm_eventmatch(const wmEvent *winevent, wmKeyMapItem *kmi)
{
@@ -1743,7 +1841,7 @@ static int wm_handler_operator_call(bContext *C, ListBase *handlers, wmEventHand
wm_handler_op_context(C, handler, event);
wm_region_mouse_co(C, event);
wm_event_modalkeymap(C, op, event, &dbl_click_disabled);
-
+
if (ot->flag & OPTYPE_UNDO)
wm->op_undo_depth++;
@@ -1792,6 +1890,9 @@ static int wm_handler_operator_call(bContext *C, ListBase *handlers, wmEventHand
CTX_wm_region_set(C, NULL);
}
+ /* update manipulators during modal handlers */
+ wm_manipulatormaps_handled_modal_update(C, event, handler);
+
/* remove modal handler, operator itself should have been canceled and freed */
if (retval & (OPERATOR_CANCELLED | OPERATOR_FINISHED)) {
WM_cursor_grab_disable(CTX_wm_window(C), NULL);
@@ -2164,6 +2265,139 @@ static int wm_handlers_do_intern(bContext *C, wmEvent *event, ListBase *handlers
}
}
}
+ else if (handler->manipulator_map) {
+ ScrArea *area = CTX_wm_area(C);
+ ARegion *region = CTX_wm_region(C);
+ wmManipulatorMap *mmap = handler->manipulator_map;
+ wmManipulator *mpr = wm_manipulatormap_highlight_get(mmap);
+
+ if (region->manipulator_map != handler->manipulator_map) {
+ WM_manipulatormap_tag_refresh(handler->manipulator_map);
+ }
+
+ wm_manipulatormap_handler_context(C, handler);
+ wm_region_mouse_co(C, event);
+
+ /* handle manipulator highlighting */
+ if (event->type == MOUSEMOVE && !wm_manipulatormap_modal_get(mmap)) {
+ int part;
+ mpr = wm_manipulatormap_highlight_find(mmap, C, event, &part);
+ wm_manipulatormap_highlight_set(mmap, C, mpr, part);
+ if (mpr != NULL) {
+ WM_tooltip_timer_init(C, CTX_wm_window(C), region, WM_manipulatormap_tooltip_init);
+ }
+ }
+ else {
+ /* Either we operate on a single highlighted item
+ * or groups attached to the selected manipulators.
+ * To simplify things both cases loop over an array of items. */
+ wmManipulatorGroup *mgroup_first;
+ bool is_mgroup_single;
+
+ if (ISMOUSE(event->type)) {
+ /* Keep mpr set as-is, just fake single selection. */
+ if (mpr) {
+ mgroup_first = mpr->parent_mgroup;
+ }
+ else {
+ mgroup_first = NULL;
+ }
+ is_mgroup_single = true;
+ }
+ else {
+ if (WM_manipulatormap_is_any_selected(mmap)) {
+ const ListBase *groups = WM_manipulatormap_group_list(mmap);
+ mgroup_first = groups->first;
+ }
+ else {
+ mgroup_first = NULL;
+ }
+ is_mgroup_single = false;
+ }
+
+ /* Don't use from now on. */
+ mpr = NULL;
+
+ for (wmManipulatorGroup *mgroup = mgroup_first; mgroup; mgroup = mgroup->next) {
+ /* get user customized keymap from default one */
+
+ if ((is_mgroup_single == false) &&
+ /* We might want to change the logic here and use some kind of manipulator edit-mode.
+ * For now just use keymap when a selection exists. */
+ wm_manipulatorgroup_is_any_selected(mgroup) == false)
+ {
+ continue;
+ }
+
+ const wmKeyMap *keymap = WM_keymap_active(wm, mgroup->type->keymap);
+ wmKeyMapItem *kmi;
+
+ PRINT("%s: checking '%s' ...", __func__, keymap->idname);
+
+ if (!keymap->poll || keymap->poll(C)) {
+ PRINT("pass\n");
+ for (kmi = keymap->items.first; kmi; kmi = kmi->next) {
+ if (wm_eventmatch(event, kmi)) {
+ wmOperator *op = handler->op;
+
+ PRINT("%s: item matched '%s'\n", __func__, kmi->idname);
+
+ /* weak, but allows interactive callback to not use rawkey */
+ event->keymap_idname = kmi->idname;
+
+ CTX_wm_manipulator_group_set(C, mgroup);
+
+ /* handler->op is called later, we want keymap op to be triggered here */
+ handler->op = NULL;
+ action |= wm_handler_operator_call(C, handlers, handler, event, kmi->ptr);
+ handler->op = op;
+
+ CTX_wm_manipulator_group_set(C, NULL);
+
+ if (action & WM_HANDLER_BREAK) {
+ if (G.debug & (G_DEBUG_EVENTS | G_DEBUG_HANDLERS)) {
+ printf("%s: handled - and pass on! '%s'\n",
+ __func__, kmi->idname);
+ }
+ break;
+ }
+ else {
+ if (action & WM_HANDLER_HANDLED) {
+ if (G.debug & (G_DEBUG_EVENTS | G_DEBUG_HANDLERS)) {
+ printf("%s: handled - and pass on! '%s'\n",
+ __func__, kmi->idname);
+ }
+ }
+ else {
+ PRINT("%s: un-handled '%s'\n",
+ __func__, kmi->idname);
+ }
+ }
+ }
+ }
+ }
+ else {
+ PRINT("fail\n");
+ }
+
+ if (action & WM_HANDLER_BREAK) {
+ break;
+ }
+
+ if (is_mgroup_single) {
+ break;
+ }
+ }
+ }
+
+ /* restore the area */
+ CTX_wm_area_set(C, area);
+ CTX_wm_region_set(C, region);
+
+ if (handler->op) {
+ action |= wm_handler_operator_call(C, handlers, handler, event, NULL);
+ }
+ }
else {
/* modal, swallows all */
action |= wm_handler_operator_call(C, handlers, handler, event, NULL);
@@ -2344,17 +2578,19 @@ static void wm_paintcursor_test(bContext *C, const wmEvent *event)
static void wm_event_drag_test(wmWindowManager *wm, wmWindow *win, wmEvent *event)
{
+ bScreen *screen = WM_window_get_active_screen(win);
+
if (BLI_listbase_is_empty(&wm->drags)) {
return;
}
if (event->type == MOUSEMOVE || ISKEYMODIFIER(event->type)) {
- win->screen->do_draw_drag = true;
+ screen->do_draw_drag = true;
}
else if (event->type == ESCKEY) {
WM_drag_free_list(&wm->drags);
- win->screen->do_draw_drag = true;
+ screen->do_draw_drag = true;
}
else if (event->type == LEFTMOUSE && event->val == KM_RELEASE) {
event->type = EVT_DROP;
@@ -2370,16 +2606,16 @@ static void wm_event_drag_test(wmWindowManager *wm, wmWindow *win, wmEvent *even
event->customdatafree = 1;
/* clear drop icon */
- win->screen->do_draw_drag = true;
+ screen->do_draw_drag = true;
/* restore cursor (disabled, see wm_dragdrop.c) */
// WM_cursor_modal_restore(win);
}
/* overlap fails otherwise */
- if (win->screen->do_draw_drag)
+ if (screen->do_draw_drag)
if (win->drawmethod == USER_DRAW_OVERLAP)
- win->screen->do_draw = true;
+ screen->do_draw = true;
}
@@ -2409,22 +2645,28 @@ void wm_event_do_handlers(bContext *C)
/* update key configuration before handling events */
WM_keyconfig_update(wm);
+ WM_manipulatorconfig_update(CTX_data_main(C));
for (win = wm->windows.first; win; win = win->next) {
+ bScreen *screen = WM_window_get_active_screen(win);
wmEvent *event;
-
- if (win->screen == NULL)
+
+ /* some safty checks - these should always be set! */
+ BLI_assert(WM_window_get_active_scene(win));
+ BLI_assert(WM_window_get_active_screen(win));
+ BLI_assert(WM_window_get_active_workspace(win));
+
+ if (screen == NULL)
wm_event_free_all(win);
else {
- Scene *scene = win->screen->scene;
-
+ Scene *scene = WM_window_get_active_scene(win);
+
if (scene) {
- int is_playing_sound = BKE_sound_scene_playing(win->screen->scene);
+ int is_playing_sound = BKE_sound_scene_playing(scene);
if (is_playing_sound != -1) {
bool is_playing_screen;
CTX_wm_window_set(C, win);
- CTX_wm_screen_set(C, win->screen);
CTX_data_scene_set(C, scene);
is_playing_screen = (ED_screen_animation_playing(wm) != NULL);
@@ -2441,7 +2683,9 @@ void wm_event_do_handlers(bContext *C)
int ncfra = time * (float)FPS + 0.5f;
if (ncfra != scene->r.cfra) {
scene->r.cfra = ncfra;
- ED_update_for_newframe(CTX_data_main(C), scene, 1);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Depsgraph *depsgraph = CTX_data_depsgraph(C);
+ ED_update_for_newframe(CTX_data_main(C), scene, view_layer, depsgraph);
WM_event_add_notifier(C, NC_WINDOW, NULL);
}
}
@@ -2457,6 +2701,9 @@ void wm_event_do_handlers(bContext *C)
while ( (event = win->queue.first) ) {
int action = WM_HANDLER_CONTINUE;
+ /* active screen might change during handlers, update pointer */
+ screen = WM_window_get_active_screen(win);
+
if (G.debug & (G_DEBUG_HANDLERS | G_DEBUG_EVENTS) && !ELEM(event->type, MOUSEMOVE, INBETWEEN_MOUSEMOVE)) {
printf("\n%s: Handling event\n", __func__);
WM_event_print(event);
@@ -2475,7 +2722,7 @@ void wm_event_do_handlers(bContext *C)
CTX_wm_window_set(C, win);
/* Clear tool-tip on mouse move. */
- if (win->screen->tool_tip && win->screen->tool_tip->exit_on_event) {
+ if (screen->tool_tip && screen->tool_tip->exit_on_event) {
if (ISMOUSE(event->type)) {
WM_tooltip_clear(C, win);
}
@@ -2499,8 +2746,7 @@ void wm_event_do_handlers(bContext *C)
return;
/* check for a tooltip */
- {
- bScreen *screen = CTX_wm_window(C)->screen;
+ if (screen == WM_window_get_active_screen(win)) {
if (screen->tool_tip && screen->tool_tip->timer) {
if ((event->type == TIMER) && (event->customdata == screen->tool_tip->timer)) {
WM_tooltip_init(C, win);
@@ -2531,12 +2777,12 @@ void wm_event_do_handlers(bContext *C)
}
#endif
- for (sa = win->screen->areabase.first; sa; sa = sa->next) {
+ for (sa = screen->areabase.first; sa; sa = sa->next) {
/* after restoring a screen from SCREENMAXIMIZED we have to wait
* with the screen handling till the region coordinates are updated */
- if (win->screen->skip_handling == true) {
+ if (screen->skip_handling == true) {
/* restore for the next iteration of wm_event_do_handlers */
- win->screen->skip_handling = false;
+ screen->skip_handling = false;
break;
}
@@ -2563,9 +2809,48 @@ void wm_event_do_handlers(bContext *C)
wm_drags_check_ops(C, event);
}
}
-
+
+#ifdef USE_WORKSPACE_TOOL
+ /* How to solve properly?
+ *
+ * Handlers are stored in each region,
+ * however the tool-system swaps keymaps often and isn't stored
+ * per region.
+ *
+ * Need to investigate how this could be done better.
+ * We might need to add a more dynamic handler type that uses a callback
+ * to fetch its current keymap.
+ */
+ wmEventHandler sneaky_handler = {NULL};
+ if (ar->regiontype == RGN_TYPE_WINDOW) {
+ WorkSpace *workspace = WM_window_get_active_workspace(win);
+ if (workspace->tool.keymap[0] &&
+ workspace->tool.spacetype == sa->spacetype)
+ {
+ wmKeyMap *km = WM_keymap_find_all(
+ C, workspace->tool.keymap, sa->spacetype, RGN_TYPE_WINDOW);
+ if (km != NULL) {
+ sneaky_handler.keymap = km;
+ /* Handle widgets first. */
+ wmEventHandler *handler_last = ar->handlers.last;
+ while (handler_last && handler_last->manipulator_map == NULL) {
+ handler_last = handler_last->prev;
+ }
+ /* Head of list or after last manipulator. */
+ BLI_insertlinkafter(&ar->handlers, handler_last, &sneaky_handler);
+ }
+ }
+ }
+#endif /* USE_WORKSPACE_TOOL */
+
action |= wm_handlers_do(C, event, &ar->handlers);
+#ifdef USE_WORKSPACE_TOOL
+ if (sneaky_handler.keymap) {
+ BLI_remlink(&ar->handlers, &sneaky_handler);
+ }
+#endif /* USE_WORKSPACE_TOOL */
+
/* fileread case (python), [#29489] */
if (CTX_wm_window(C) == NULL)
return;
@@ -2630,8 +2915,7 @@ void wm_event_do_handlers(bContext *C)
/* update key configuration after handling events */
WM_keyconfig_update(wm);
-
- GPU_ASSERT_NO_GL_ERRORS("wm_event_do_handlers");
+ WM_manipulatorconfig_update(CTX_data_main(C));
}
/* ********** filesector handling ************ */
@@ -2744,6 +3028,34 @@ wmEventHandler *WM_event_add_modal_handler(bContext *C, wmOperator *op)
return handler;
}
+/**
+ * Modal handlers store a pointer to an area which might be freed while the handler runs.
+ * Use this function to NULL all handler pointers to \a old_area.
+ */
+void WM_event_modal_handler_area_replace(wmWindow *win, const ScrArea *old_area, ScrArea *new_area)
+{
+ for (wmEventHandler *handler = win->modalhandlers.first; handler; handler = handler->next) {
+ /* fileselect handler is quite special... it needs to keep old area stored in handler, so don't change it */
+ if ((handler->op_area == old_area) && (handler->type != WM_HANDLER_FILESELECT)) {
+ handler->op_area = new_area;
+ }
+ }
+}
+
+/**
+ * Modal handlers store a pointer to a region which might be freed while the handler runs.
+ * Use this function to NULL all handler pointers to \a old_region.
+ */
+void WM_event_modal_handler_region_replace(wmWindow *win, const ARegion *old_region, ARegion *new_region)
+{
+ for (wmEventHandler *handler = win->modalhandlers.first; handler; handler = handler->next) {
+ if (handler->op_region == old_region) {
+ handler->op_region = new_region;
+ handler->op_region_type = new_region ? new_region->regiontype : RGN_TYPE_WINDOW;
+ }
+ }
+}
+
wmEventHandler *WM_event_add_keymap_handler(ListBase *handlers, wmKeyMap *keymap)
{
wmEventHandler *handler;
diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c
index 21e6abacfec..6a86644da17 100644
--- a/source/blender/windowmanager/intern/wm_files.c
+++ b/source/blender/windowmanager/intern/wm_files.c
@@ -69,6 +69,7 @@
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
#include "DNA_windowmanager_types.h"
+#include "DNA_workspace_types.h"
#include "BKE_appdir.h"
#include "BKE_autoexec.h"
@@ -76,7 +77,6 @@
#include "BKE_blendfile.h"
#include "BKE_blender_undo.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_global.h"
#include "BKE_library.h"
#include "BKE_main.h"
@@ -85,6 +85,7 @@
#include "BKE_sound.h"
#include "BKE_scene.h"
#include "BKE_screen.h"
+#include "BKE_workspace.h"
#include "BLO_readfile.h"
#include "BLO_writefile.h"
@@ -118,8 +119,11 @@
#include "BPY_extern.h"
#endif
+#include "DEG_depsgraph.h"
+
#include "WM_api.h"
#include "WM_types.h"
+#include "WM_message.h"
#include "wm.h"
#include "wm_files.h"
#include "wm_window.h"
@@ -158,7 +162,7 @@ static void wm_window_match_init(bContext *C, ListBase *wmlist)
CTX_wm_window_set(C, win); /* needed by operator close callbacks */
WM_event_remove_handlers(C, &win->handlers);
WM_event_remove_handlers(C, &win->modalhandlers);
- ED_screen_exit(C, win, win->screen);
+ ED_screen_exit(C, win, WM_window_get_active_screen(win));
}
}
@@ -173,21 +177,6 @@ static void wm_window_match_init(bContext *C, ListBase *wmlist)
CTX_wm_menu_set(C, NULL);
ED_editors_exit(C);
-
- /* just had return; here from r12991, this code could just get removed?*/
-#if 0
- if (wm == NULL) return;
- if (G.fileflags & G_FILE_NO_UI) return;
-
- /* we take apart the used screens from non-active window */
- for (win = wm->windows.first; win; win = win->next) {
- BLI_strncpy(win->screenname, win->screen->id.name, MAX_ID_NAME);
- if (win != wm->winactive) {
- BLI_remlink(&G.main->screen, win->screen);
- //BLI_addtail(screenbase, win->screen);
- }
- }
-#endif
}
static void wm_window_substitute_old(wmWindowManager *wm, wmWindow *oldwin, wmWindow *win)
@@ -214,111 +203,134 @@ static void wm_window_substitute_old(wmWindowManager *wm, wmWindow *oldwin, wmWi
win->posy = oldwin->posy;
}
-/* match old WM with new, 4 cases:
- * 1- no current wm, no read wm: make new default
- * 2- no current wm, but read wm: that's OK, do nothing
- * 3- current wm, but not in file: try match screen names
- * 4- current wm, and wm in file: try match ghostwin
- */
-
-static void wm_window_match_do(bContext *C, ListBase *oldwmlist)
+static void wm_window_match_keep_current_wm(
+ const bContext *C, ListBase *current_wm_list,
+ const bool load_ui,
+ ListBase *r_new_wm_list)
{
- wmWindowManager *oldwm, *wm;
- wmWindow *oldwin, *win;
-
- /* cases 1 and 2 */
- if (BLI_listbase_is_empty(oldwmlist)) {
- if (G.main->wm.first) {
- /* nothing todo */
- }
- else {
- wm_add_default(C);
- }
- }
- else {
- /* cases 3 and 4 */
-
- /* we've read file without wm..., keep current one entirely alive */
- if (BLI_listbase_is_empty(&G.main->wm)) {
- bScreen *screen = NULL;
-
- /* when loading without UI, no matching needed */
- if (!(G.fileflags & G_FILE_NO_UI) && (screen = CTX_wm_screen(C))) {
-
- /* match oldwm to new dbase, only old files */
- for (wm = oldwmlist->first; wm; wm = wm->id.next) {
-
- for (win = wm->windows.first; win; win = win->next) {
- /* all windows get active screen from file */
- if (screen->winid == 0)
- win->screen = screen;
- else
- win->screen = ED_screen_duplicate(win, screen);
-
- BLI_strncpy(win->screenname, win->screen->id.name + 2, sizeof(win->screenname));
- win->screen->winid = win->winid;
- }
- }
+ wmWindowManager *wm = current_wm_list->first;
+ bScreen *screen = NULL;
+
+ /* match oldwm to new dbase, only old files */
+ wm->initialized &= ~WM_WINDOW_IS_INITIALIZED;
+
+ /* when loading without UI, no matching needed */
+ if (load_ui && (screen = CTX_wm_screen(C))) {
+ for (wmWindow *win = wm->windows.first; win; win = win->next) {
+ WorkSpace *workspace;
+
+ BKE_workspace_layout_find_global(G.main, screen, &workspace);
+ BKE_workspace_active_set(win->workspace_hook, workspace);
+ win->scene = CTX_data_scene(C);
+
+ /* all windows get active screen from file */
+ if (screen->winid == 0) {
+ WM_window_set_active_screen(win, workspace, screen);
}
-
- G.main->wm = *oldwmlist;
-
- /* screens were read from file! */
- ED_screens_initialize(G.main->wm.first);
- }
- else {
- bool has_match = false;
+ else {
+ WorkSpaceLayout *layout_old = WM_window_get_active_layout(win);
+ WorkSpaceLayout *layout_new = ED_workspace_layout_duplicate(workspace, layout_old, win);
- /* what if old was 3, and loaded 1? */
- /* this code could move to setup_appdata */
- oldwm = oldwmlist->first;
- wm = G.main->wm.first;
+ WM_window_set_active_layout(win, workspace, layout_new);
+ }
- /* preserve key configurations in new wm, to preserve their keymaps */
- wm->keyconfigs = oldwm->keyconfigs;
- wm->addonconf = oldwm->addonconf;
- wm->defaultconf = oldwm->defaultconf;
- wm->userconf = oldwm->userconf;
+ bScreen *win_screen = WM_window_get_active_screen(win);
+ win_screen->winid = win->winid;
+ }
+ }
- BLI_listbase_clear(&oldwm->keyconfigs);
- oldwm->addonconf = NULL;
- oldwm->defaultconf = NULL;
- oldwm->userconf = NULL;
+ *r_new_wm_list = *current_wm_list;
+}
- /* ensure making new keymaps and set space types */
- wm->initialized = 0;
- wm->winactive = NULL;
+static void wm_window_match_replace_by_file_wm(
+ bContext *C, ListBase *current_wm_list, ListBase *readfile_wm_list,
+ ListBase *r_new_wm_list)
+{
+ wmWindowManager *oldwm = current_wm_list->first;
+ wmWindowManager *wm = readfile_wm_list->first; /* will become our new WM */
+ bool has_match = false;
- /* only first wm in list has ghostwins */
- for (win = wm->windows.first; win; win = win->next) {
- for (oldwin = oldwm->windows.first; oldwin; oldwin = oldwin->next) {
+ /* this code could move to setup_appdata */
- if (oldwin->winid == win->winid) {
- has_match = true;
+ /* preserve key configurations in new wm, to preserve their keymaps */
+ wm->keyconfigs = oldwm->keyconfigs;
+ wm->addonconf = oldwm->addonconf;
+ wm->defaultconf = oldwm->defaultconf;
+ wm->userconf = oldwm->userconf;
- wm_window_substitute_old(wm, oldwin, win);
- }
- }
- }
+ BLI_listbase_clear(&oldwm->keyconfigs);
+ oldwm->addonconf = NULL;
+ oldwm->defaultconf = NULL;
+ oldwm->userconf = NULL;
+
+ /* ensure making new keymaps and set space types */
+ wm->initialized = 0;
+ wm->winactive = NULL;
- /* make sure at least one window is kept open so we don't lose the context, check T42303 */
- if (!has_match) {
- oldwin = oldwm->windows.first;
- win = wm->windows.first;
+ /* only first wm in list has ghostwins */
+ for (wmWindow *win = wm->windows.first; win; win = win->next) {
+ for (wmWindow *oldwin = oldwm->windows.first; oldwin; oldwin = oldwin->next) {
+ if (oldwin->winid == win->winid) {
+ has_match = true;
wm_window_substitute_old(wm, oldwin, win);
}
+ }
+ }
+ /* make sure at least one window is kept open so we don't lose the context, check T42303 */
+ if (!has_match) {
+ wm_window_substitute_old(wm, oldwm->windows.first, wm->windows.first);
+ }
+
+ wm_close_and_free_all(C, current_wm_list);
+
+ *r_new_wm_list = *readfile_wm_list;
+}
- wm_close_and_free_all(C, oldwmlist);
+/**
+ * Match old WM with new, 4 cases:
+ * 1) No current WM, no WM in file: Make new default.
+ * 2) No current WM, but WM in file: Keep current WM, do nothing else.
+ * 3) Current WM, but not in file: Keep current WM, update windows with screens from file.
+ * 4) Current WM, and WM in file: Try to keep current GHOST windows, use WM from file.
+ *
+ * \param r_new_wm_list: Return argument for the wm list to be used from now on.
+ */
+static void wm_window_match_do(
+ bContext *C,
+ ListBase *current_wm_list, ListBase *readfile_wm_list,
+ ListBase *r_new_wm_list)
+{
+ if (BLI_listbase_is_empty(current_wm_list)) {
+ /* case 1 */
+ if (BLI_listbase_is_empty(readfile_wm_list)) {
+ Main *bmain = CTX_data_main(C);
+ /* Neither current, no newly read file have a WM -> add the default one. */
+ wm_add_default(bmain, C);
+ *r_new_wm_list = bmain->wm;
+ }
+ /* case 2 */
+ else {
+ *r_new_wm_list = *readfile_wm_list;
+ }
+ }
+ else {
+ /* case 3 */
+ if (BLI_listbase_is_empty(readfile_wm_list)) {
+ /* We've read file without wm, keep current one entirely alive.
+ * Happens when reading pre 2.5 files (no WM back then) */
+ wm_window_match_keep_current_wm(C, current_wm_list, (G.fileflags & G_FILE_NO_UI) == 0, r_new_wm_list);
+ }
+ /* case 4 */
+ else {
+ wm_window_match_replace_by_file_wm(C, current_wm_list, readfile_wm_list, r_new_wm_list);
}
}
}
/* in case UserDef was read, we re-initialize all, and do versioning */
-static void wm_init_userdef(bContext *C, const bool read_userdef_from_memory)
+static void wm_init_userdef(Main *bmain, const bool read_userdef_from_memory)
{
- Main *bmain = CTX_data_main(C);
-
/* versioning is here */
UI_init_userdef();
@@ -424,8 +436,9 @@ void wm_file_read_report(bContext *C)
Scene *sce;
for (sce = G.main->scene.first; sce; sce = sce->id.next) {
- if (sce->r.engine[0] &&
- BLI_findstring(&R_engines, sce->r.engine, offsetof(RenderEngineType, idname)) == NULL)
+ ViewRender *view_render = &sce->view_render;
+ if (view_render->engine_id[0] &&
+ BLI_findstring(&R_engines, view_render->engine_id, offsetof(RenderEngineType, idname)) == NULL)
{
if (reports == NULL) {
reports = CTX_wm_reports(C);
@@ -433,7 +446,7 @@ void wm_file_read_report(bContext *C)
BKE_reportf(reports, RPT_ERROR,
"Engine '%s' not available for scene '%s' (an add-on may need to be installed or enabled)",
- sce->r.engine, sce->id.name + 2);
+ view_render->engine_id, sce->id.name + 2);
}
}
@@ -461,7 +474,7 @@ static void wm_file_read_post(bContext *C, const bool is_startup_file, const boo
CTX_wm_window_set(C, wm->windows.first);
ED_editors_init(C);
- DAG_on_visible_update(CTX_data_main(C), true);
+ DEG_on_visible_update(CTX_data_main(C), true);
#ifdef WITH_PYTHON
if (is_startup_file) {
@@ -492,17 +505,11 @@ static void wm_file_read_post(bContext *C, const bool is_startup_file, const boo
BLI_callback_exec(CTX_data_main(C), NULL, BLI_CB_EVT_VERSION_UPDATE);
BLI_callback_exec(CTX_data_main(C), NULL, BLI_CB_EVT_LOAD_POST);
- /* Would otherwise be handled by event loop.
- *
- * Disabled for startup file, since it causes problems when PyDrivers are used in the startup file.
- * While its possible state of startup file may be wrong,
- * in this case users nearly always load a file to replace the startup file. */
- if (G.background && (is_startup_file == false)) {
- Main *bmain = CTX_data_main(C);
- BKE_scene_update_tagged(bmain->eval_ctx, bmain, CTX_data_scene(C));
- }
-
+#if 1
WM_event_add_notifier(C, NC_WM | ND_FILEREAD, NULL);
+#else
+ WM_msg_publish_static(CTX_wm_message_bus(C), WM_MSG_STATICTYPE_FILE_READ);
+#endif
/* report any errors.
* currently disabled if addons aren't yet loaded */
@@ -515,6 +522,9 @@ static void wm_file_read_post(bContext *C, const bool is_startup_file, const boo
* a blend file and do anything since the screen
* won't be set to a valid value again */
CTX_wm_window_set(C, NULL); /* exits queues */
+
+ /* Ensure tools are registered. */
+ WM_toolsystem_init(C);
}
if (!G.background) {
@@ -552,7 +562,7 @@ bool WM_file_read(bContext *C, const char *filepath, ReportList *reports)
/* put aside screens to match with persistent windows later */
/* also exit screens and editors */
- wm_window_match_init(C, &wmbase);
+ wm_window_match_init(C, &wmbase);
/* confusing this global... */
G.relbase_valid = 1;
@@ -574,12 +584,12 @@ bool WM_file_read(bContext *C, const char *filepath, ReportList *reports)
}
/* match the read WM with current WM */
- wm_window_match_do(C, &wmbase);
+ wm_window_match_do(C, &wmbase, &G.main->wm, &G.main->wm);
WM_check(C); /* opens window(s), checks keymaps */
if (retval == BKE_BLENDFILE_READ_OK_USERPREFS) {
/* in case a userdef is read from regular .blend */
- wm_init_userdef(C, false);
+ wm_init_userdef(G.main, false);
}
if (retval != BKE_BLENDFILE_READ_FAIL) {
@@ -837,14 +847,14 @@ int wm_homefile_read(
/* prevent buggy files that had G_FILE_RELATIVE_REMAP written out by mistake. Screws up autosaves otherwise
* can remove this eventually, only in a 2.53 and older, now its not written */
G.fileflags &= ~G_FILE_RELATIVE_REMAP;
-
- if (use_userdef) {
+
+ if (use_userdef) {
/* check userdef before open window, keymaps etc */
- wm_init_userdef(C, read_userdef_from_memory);
+ wm_init_userdef(CTX_data_main(C), read_userdef_from_memory);
}
/* match the read WM with current WM */
- wm_window_match_do(C, &wmbase);
+ wm_window_match_do(C, &wmbase, &G.main->wm, &G.main->wm);
WM_check(C); /* opens window(s), checks keymaps */
G.main->name[0] = '\0';
@@ -990,7 +1000,7 @@ static void wm_history_file_update(void)
/* screen can be NULL */
-static ImBuf *blend_file_thumb(Scene *scene, bScreen *screen, BlendThumbnail **thumb_pt)
+static ImBuf *blend_file_thumb(const bContext *C, Scene *scene, ViewLayer *view_layer, bScreen *screen, BlendThumbnail **thumb_pt)
{
/* will be scaled down, but gives some nice oversampling */
ImBuf *ibuf;
@@ -1002,6 +1012,10 @@ static ImBuf *blend_file_thumb(Scene *scene, bScreen *screen, BlendThumbnail **t
ARegion *ar = NULL;
View3D *v3d = NULL;
+ EvaluationContext eval_ctx;
+
+ CTX_data_eval_ctx(C, &eval_ctx);
+
/* In case we are given a valid thumbnail data, just generate image from it. */
if (*thumb_pt) {
thumb = *thumb_pt;
@@ -1027,14 +1041,14 @@ static ImBuf *blend_file_thumb(Scene *scene, bScreen *screen, BlendThumbnail **t
/* gets scaled to BLEN_THUMB_SIZE */
if (scene->camera) {
ibuf = ED_view3d_draw_offscreen_imbuf_simple(
- scene, scene->camera,
+ &eval_ctx, scene, view_layer, scene->camera,
BLEN_THUMB_SIZE * 2, BLEN_THUMB_SIZE * 2,
IB_rect, V3D_OFSDRAW_NONE, OB_SOLID, R_ALPHAPREMUL, 0, NULL,
NULL, NULL, err_out);
}
else {
ibuf = ED_view3d_draw_offscreen_imbuf(
- scene, v3d, ar,
+ &eval_ctx, scene, view_layer, v3d, ar,
BLEN_THUMB_SIZE * 2, BLEN_THUMB_SIZE * 2,
IB_rect, V3D_OFSDRAW_NONE, R_ALPHAPREMUL, 0, NULL,
NULL, NULL, err_out);
@@ -1130,7 +1144,7 @@ static int wm_file_write(bContext *C, const char *filepath, int fileflags, Repor
/* Main now can store a .blend thumbnail, usefull for background mode or thumbnail customization. */
main_thumb = thumb = CTX_data_main(C)->blen_thumb;
if ((U.flag & USER_SAVE_PREVIEWS) && BLI_thread_is_main()) {
- ibuf_thumb = blend_file_thumb(CTX_data_scene(C), CTX_wm_screen(C), &thumb);
+ ibuf_thumb = blend_file_thumb(C, CTX_data_scene(C), CTX_data_view_layer(C), CTX_wm_screen(C), &thumb);
}
/* operator now handles overwrite checks */
@@ -1385,7 +1399,7 @@ static int wm_homefile_write_exec(bContext *C, wmOperator *op)
BLI_callback_exec(G.main, NULL, BLI_CB_EVT_SAVE_PRE);
/* check current window and close it if temp */
- if (win && win->screen->temp)
+ if (win && WM_window_is_temp_screen(win))
wm_window_close(C, wm, win);
/* update keymaps in user preferences */
@@ -1532,6 +1546,42 @@ void WM_OT_save_userpref(wmOperatorType *ot)
ot->exec = wm_userpref_write_exec;
}
+static int wm_workspace_configuration_file_write_exec(bContext *C, wmOperator *op)
+{
+ Main *bmain = CTX_data_main(C);
+ char filepath[FILE_MAX];
+
+ const char *app_template = U.app_template[0] ? U.app_template : NULL;
+ const char * const cfgdir = BKE_appdir_folder_id_create(BLENDER_USER_CONFIG, app_template);
+ if (cfgdir == NULL) {
+ BKE_report(op->reports, RPT_ERROR, "Unable to create workspace configuration file path");
+ return OPERATOR_CANCELLED;
+ }
+
+ BLI_path_join(filepath, sizeof(filepath), cfgdir, BLENDER_WORKSPACES_FILE, NULL);
+ printf("trying to save workspace configuration file at %s ", filepath);
+
+ if (BKE_blendfile_workspace_config_write(bmain, filepath, op->reports) != 0) {
+ printf("ok\n");
+ return OPERATOR_FINISHED;
+ }
+ else {
+ printf("fail\n");
+ }
+
+ return OPERATOR_CANCELLED;
+}
+
+void WM_OT_save_workspace_file(wmOperatorType *ot)
+{
+ ot->name = "Save Workspace Configuration";
+ ot->idname = "WM_OT_save_workspace_file";
+ ot->description = "Save workspaces of the current file as part of the user configuration";
+
+ ot->invoke = WM_operator_confirm;
+ ot->exec = wm_workspace_configuration_file_write_exec;
+}
+
static int wm_history_file_read_exec(bContext *UNUSED(C), wmOperator *UNUSED(op))
{
ED_file_read_bookmarks();
diff --git a/source/blender/windowmanager/intern/wm_files_link.c b/source/blender/windowmanager/intern/wm_files_link.c
index fb611290aa5..a33df1bc1f2 100644
--- a/source/blender/windowmanager/intern/wm_files_link.c
+++ b/source/blender/windowmanager/intern/wm_files_link.c
@@ -59,7 +59,7 @@
#include "BLO_readfile.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
+#include "BKE_layer.h"
#include "BKE_library.h"
#include "BKE_library_remap.h"
#include "BKE_global.h"
@@ -69,6 +69,8 @@
#include "BKE_idcode.h"
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
#include "IMB_colormanagement.h"
@@ -131,8 +133,8 @@ static short wm_link_append_flag(wmOperator *op)
if (RNA_boolean_get(op->ptr, "autoselect"))
flag |= FILE_AUTOSELECT;
- if (RNA_boolean_get(op->ptr, "active_layer"))
- flag |= FILE_ACTIVELAY;
+ if (RNA_boolean_get(op->ptr, "active_collection"))
+ flag |= FILE_ACTIVE_COLLECTION;
if ((prop = RNA_struct_find_property(op->ptr, "relative_path")) && RNA_property_boolean_get(op->ptr, prop))
flag |= FILE_RELPATH;
if (RNA_boolean_get(op->ptr, "link"))
@@ -211,7 +213,8 @@ static WMLinkAppendDataItem *wm_link_append_data_item_add(
return item;
}
-static void wm_link_do(WMLinkAppendData *lapp_data, ReportList *reports, Main *bmain, Scene *scene, View3D *v3d)
+static void wm_link_do(
+ WMLinkAppendData *lapp_data, ReportList *reports, Main *bmain, Scene *scene, ViewLayer *view_layer)
{
Main *mainl;
BlendHandle *bh;
@@ -258,7 +261,7 @@ static void wm_link_do(WMLinkAppendData *lapp_data, ReportList *reports, Main *b
continue;
}
- new_id = BLO_library_link_named_part_ex(mainl, &bh, item->idcode, item->name, flag, scene, v3d);
+ new_id = BLO_library_link_named_part_ex(mainl, &bh, item->idcode, item->name, flag, scene, view_layer);
if (new_id) {
/* If the link is successful, clear item's libs 'todo' flags.
@@ -268,15 +271,50 @@ static void wm_link_do(WMLinkAppendData *lapp_data, ReportList *reports, Main *b
}
}
- BLO_library_link_end(mainl, &bh, flag, scene, v3d);
+ BLO_library_link_end(mainl, &bh, flag, scene, view_layer);
BLO_blendhandle_close(bh);
}
}
+/**
+ * Check if an item defined by \a name and \a group can be appended/linked.
+ *
+ * \param reports: Optionally report an error when an item can't be appended/linked.
+ */
+static bool wm_link_append_item_poll(
+ ReportList *reports, const char *path, const char *group, const char *name, const bool do_append)
+{
+ short idcode;
+
+ if (!group || !name) {
+ printf("skipping %s\n", path);
+ return false;
+ }
+
+ idcode = BKE_idcode_from_name(group);
+
+ /* XXX For now, we do a nasty exception for workspace, forbid linking them.
+ * Not nice, ultimately should be solved! */
+ if (!BKE_idcode_is_linkable(idcode) && (do_append || idcode != ID_WS)) {
+ if (reports) {
+ if (do_append) {
+ BKE_reportf(reports, RPT_ERROR_INVALID_INPUT, "Can't append data-block '%s' of type '%s'", name, group);
+ }
+ else {
+ BKE_reportf(reports, RPT_ERROR_INVALID_INPUT, "Can't link data-block '%s' of type '%s'", name, group);
+ }
+ }
+ return false;
+ }
+
+ return true;
+}
+
static int wm_link_append_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
PropertyRNA *prop;
WMLinkAppendData *lapp_data;
char path[FILE_MAX_LIBEXTRA], root[FILE_MAXDIR], libname[FILE_MAX_LIBEXTRA], relname[FILE_MAX];
@@ -319,6 +357,7 @@ static int wm_link_append_exec(bContext *C, wmOperator *op)
}
short flag = wm_link_append_flag(op);
+ const bool do_append = (flag & FILE_LINK) == 0;
/* sanity checks for flag */
if (scene && scene->id.lib) {
@@ -332,8 +371,8 @@ static int wm_link_append_exec(bContext *C, wmOperator *op)
/* from here down, no error returns */
- if (scene && RNA_boolean_get(op->ptr, "autoselect")) {
- BKE_scene_base_deselect_all(scene);
+ if (view_layer && RNA_boolean_get(op->ptr, "autoselect")) {
+ BKE_view_layer_base_deselect_all(view_layer);
}
/* tag everything, all untagged data can be made local
@@ -356,7 +395,7 @@ static int wm_link_append_exec(bContext *C, wmOperator *op)
BLI_join_dirfile(path, sizeof(path), root, relname);
if (BLO_library_path_explode(path, libname, &group, &name)) {
- if (!group || !name) {
+ if (!wm_link_append_item_poll(NULL, path, group, name, do_append)) {
continue;
}
@@ -377,8 +416,8 @@ static int wm_link_append_exec(bContext *C, wmOperator *op)
if (BLO_library_path_explode(path, libname, &group, &name)) {
WMLinkAppendDataItem *item;
- if (!group || !name) {
- printf("skipping %s\n", path);
+
+ if (!wm_link_append_item_poll(op->reports, path, group, name, do_append)) {
continue;
}
@@ -409,7 +448,7 @@ static int wm_link_append_exec(bContext *C, wmOperator *op)
/* XXX We'd need re-entrant locking on Main for this to work... */
/* BKE_main_lock(bmain); */
- wm_link_do(lapp_data, op->reports, bmain, scene, CTX_wm_view3d(C));
+ wm_link_do(lapp_data, op->reports, bmain, scene, view_layer);
/* BKE_main_unlock(bmain); */
@@ -418,7 +457,7 @@ static int wm_link_append_exec(bContext *C, wmOperator *op)
IMB_colormanagement_check_file_config(bmain);
/* append, rather than linking */
- if ((flag & FILE_LINK) == 0) {
+ if (do_append) {
const bool set_fake = RNA_boolean_get(op->ptr, "set_fake");
const bool use_recursive = RNA_boolean_get(op->ptr, "use_recursive");
@@ -449,13 +488,17 @@ static int wm_link_append_exec(bContext *C, wmOperator *op)
* link into other scenes from this blend file */
BKE_main_id_tag_all(bmain, LIB_TAG_PRE_EXISTING, false);
+ /* TODO(sergey): Use proper flag for tagging here. */
+
+ /* TODO (dalai): Temporary solution!
+ * Ideally we only need to tag the new objects themselves, not the scene. This way we'll avoid flush of
+ * collection properties to all objects and limit update to the particular object only.
+ * But afraid first we need to change collection evaluation in DEG according to depsgraph manifesto.
+ */
+ DEG_id_tag_update(&scene->id, 0);
+
/* recreate dependency graph to include new objects */
- if (scene) {
- DAG_scene_relations_rebuild(bmain, scene);
- }
-
- /* free gpu materials, some materials depend on existing objects, such as lamps so freeing correctly refreshes */
- GPU_materials_free();
+ DEG_relations_tag_update(bmain);
/* XXX TODO: align G.lib with other directory storage (like last opened image etc...) */
BLI_strncpy(G.lib, root, FILE_MAX);
@@ -477,8 +520,8 @@ static void wm_link_append_properties_common(wmOperatorType *ot, bool is_link)
prop = RNA_def_boolean(ot->srna, "autoselect", true,
"Select", "Select new objects");
RNA_def_property_flag(prop, PROP_SKIP_SAVE);
- prop = RNA_def_boolean(ot->srna, "active_layer", true,
- "Active Layer", "Put new objects on the active layer");
+ prop = RNA_def_boolean(ot->srna, "active_collection", true,
+ "Active Collection", "Put new objects on the active collection");
RNA_def_property_flag(prop, PROP_SKIP_SAVE);
prop = RNA_def_boolean(ot->srna, "instance_groups", is_link,
"Instance Groups", "Create Dupli-Group instances for each group");
@@ -558,7 +601,7 @@ static int wm_lib_relocate_invoke(bContext *C, wmOperator *op, const wmEvent *UN
}
static void lib_relocate_do(
- Main *bmain, Scene *scene,
+ Main *bmain,
Library *library, WMLinkAppendData *lapp_data, ReportList *reports, const bool do_reload)
{
ListBase *lbarray[MAX_LIBARRAY];
@@ -748,10 +791,7 @@ static void lib_relocate_do(
BKE_main_id_tag_all(bmain, LIB_TAG_PRE_EXISTING, false);
/* recreate dependency graph to include new objects */
- DAG_scene_relations_rebuild(bmain, scene);
-
- /* free gpu materials, some materials depend on existing objects, such as lamps so freeing correctly refreshes */
- GPU_materials_free();
+ DEG_relations_tag_update(bmain);
}
void WM_lib_reload(Library *lib, bContext *C, ReportList *reports)
@@ -771,7 +811,7 @@ void WM_lib_reload(Library *lib, bContext *C, ReportList *reports)
wm_link_append_data_library_add(lapp_data, lib->filepath);
- lib_relocate_do(CTX_data_main(C), CTX_data_scene(C), lib, lapp_data, reports, true);
+ lib_relocate_do(CTX_data_main(C), lib, lapp_data, reports, true);
wm_link_append_data_free(lapp_data);
@@ -788,7 +828,6 @@ static int wm_lib_relocate_exec_do(bContext *C, wmOperator *op, bool do_reload)
if (lib) {
Main *bmain = CTX_data_main(C);
- Scene *scene = CTX_data_scene(C);
PropertyRNA *prop;
WMLinkAppendData *lapp_data;
@@ -882,7 +921,7 @@ static int wm_lib_relocate_exec_do(bContext *C, wmOperator *op, bool do_reload)
lapp_data->flag |= BLO_LIBLINK_USE_PLACEHOLDERS | BLO_LIBLINK_FORCE_INDIRECT;
}
- lib_relocate_do(bmain, scene, lib, lapp_data, op->reports, do_reload);
+ lib_relocate_do(bmain, lib, lapp_data, op->reports, do_reload);
wm_link_append_data_free(lapp_data);
diff --git a/source/blender/windowmanager/intern/wm_gesture.c b/source/blender/windowmanager/intern/wm_gesture.c
index b63962ffce2..fa5fd38b7b2 100644
--- a/source/blender/windowmanager/intern/wm_gesture.c
+++ b/source/blender/windowmanager/intern/wm_gesture.c
@@ -45,15 +45,15 @@
#include "BKE_context.h"
-
#include "WM_api.h"
#include "WM_types.h"
#include "wm.h"
#include "wm_subwindow.h"
#include "wm_draw.h"
-#include "GPU_basic_shader.h"
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
#include "BIF_glutil.h"
@@ -166,69 +166,99 @@ int wm_gesture_evaluate(wmGesture *gesture)
/* ******************* gesture draw ******************* */
-static void wm_gesture_draw_rect(wmGesture *gt)
+static void wm_gesture_draw_line(wmGesture *gt)
{
rcti *rect = (rcti *)gt->customdata;
-
- glEnable(GL_BLEND);
- glColor4f(1.0, 1.0, 1.0, 0.05);
- glBegin(GL_QUADS);
- glVertex2s(rect->xmax, rect->ymin);
- glVertex2s(rect->xmax, rect->ymax);
- glVertex2s(rect->xmin, rect->ymax);
- glVertex2s(rect->xmin, rect->ymin);
- glEnd();
- glDisable(GL_BLEND);
-
- GPU_basic_shader_bind(GPU_SHADER_LINE | GPU_SHADER_STIPPLE | GPU_SHADER_USE_COLOR);
- glColor3ub(96, 96, 96);
- GPU_basic_shader_line_stipple(1, 0xCCCC);
- sdrawbox(rect->xmin, rect->ymin, rect->xmax, rect->ymax);
- glColor3ub(255, 255, 255);
- GPU_basic_shader_line_stipple(1, 0x3333);
- sdrawbox(rect->xmin, rect->ymin, rect->xmax, rect->ymax);
- GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
+
+ uint shdr_pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR);
+
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2], viewport_size[3]);
+
+ immUniform1i("num_colors", 2); /* "advanced" mode */
+ immUniformArray4fv("colors", (float *)(float[][4]){{0.4f, 0.4f, 0.4f, 1.0f}, {1.0f, 1.0f, 1.0f, 1.0f}}, 2);
+ immUniform1f("dash_width", 8.0f);
+
+ float xmin = (float)rect->xmin;
+ float ymin = (float)rect->ymin;
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2f(shdr_pos, xmin, ymin);
+ immVertex2f(shdr_pos, (float)rect->xmax, (float)rect->ymax);
+ immEnd();
+
+ immUnbindProgram();
}
-static void wm_gesture_draw_line(wmGesture *gt)
+static void wm_gesture_draw_rect(wmGesture *gt)
{
rcti *rect = (rcti *)gt->customdata;
-
- GPU_basic_shader_bind(GPU_SHADER_LINE | GPU_SHADER_STIPPLE);
- glColor3ub(96, 96, 96);
- GPU_basic_shader_line_stipple(1, 0xAAAA);
- sdrawline(rect->xmin, rect->ymin, rect->xmax, rect->ymax);
- glColor3ub(255, 255, 255);
- GPU_basic_shader_line_stipple(1, 0x5555);
- sdrawline(rect->xmin, rect->ymin, rect->xmax, rect->ymax);
-
- GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
-
+
+ uint shdr_pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_I32, 2, GWN_FETCH_INT_TO_FLOAT);
+
+ glEnable(GL_BLEND);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor4f(1.0f, 1.0f, 1.0f, 0.05f);
+
+ immRecti(shdr_pos, rect->xmin, rect->ymin, rect->xmax, rect->ymax);
+
+ immUnbindProgram();
+
+ glDisable(GL_BLEND);
+
+ shdr_pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR);
+
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2], viewport_size[3]);
+
+ immUniform1i("num_colors", 2); /* "advanced" mode */
+ immUniformArray4fv("colors", (float *)(float[][4]){{0.4f, 0.4f, 0.4f, 1.0f}, {1.0f, 1.0f, 1.0f, 1.0f}}, 2);
+ immUniform1f("dash_width", 8.0f);
+
+ imm_draw_box_wire_2d(shdr_pos, (float)rect->xmin, (float)rect->ymin, (float)rect->xmax, (float)rect->ymax);
+
+ immUnbindProgram();
+
+ // wm_gesture_draw_line(gt); // draws a diagonal line in the lined box to test wm_gesture_draw_line
}
static void wm_gesture_draw_circle(wmGesture *gt)
{
rcti *rect = (rcti *)gt->customdata;
- glTranslatef((float)rect->xmin, (float)rect->ymin, 0.0f);
-
glEnable(GL_BLEND);
- glColor4f(1.0, 1.0, 1.0, 0.05);
- glutil_draw_filled_arc(0.0, M_PI * 2.0, rect->xmax, 40);
+
+ const uint shdr_pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ immUniformColor4f(1.0f, 1.0f, 1.0f, 0.05f);
+ imm_draw_circle_fill_2d(shdr_pos, (float)rect->xmin, (float)rect->ymin, (float)rect->xmax, 40);
+
+ immUnbindProgram();
+
glDisable(GL_BLEND);
-
- // for USE_GLSL works bad because of no relation between lines
- GPU_basic_shader_bind(GPU_SHADER_LINE | GPU_SHADER_STIPPLE | GPU_SHADER_USE_COLOR);
- glColor3ub(96, 96, 96);
- GPU_basic_shader_line_stipple(1, 0xAAAA);
- glutil_draw_lined_arc(0.0, M_PI * 2.0, rect->xmax, 40);
- glColor3ub(255, 255, 255);
- GPU_basic_shader_line_stipple(1, 0x5555);
- glutil_draw_lined_arc(0.0, M_PI * 2.0, rect->xmax, 40);
-
- GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
- glTranslatef(-rect->xmin, -rect->ymin, 0.0f);
-
+
+ immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR);
+
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2], viewport_size[3]);
+
+ immUniform1i("num_colors", 2); /* "advanced" mode */
+ immUniformArray4fv("colors", (float *)(float[][4]){{0.4f, 0.4f, 0.4f, 1.0f}, {1.0f, 1.0f, 1.0f, 1.0f}}, 2);
+ immUniform1f("dash_width", 4.0f);
+
+ imm_draw_circle_wire_2d(shdr_pos, (float)rect->xmin, (float)rect->ymin, (float)rect->xmax, 40);
+
+ immUnbindProgram();
}
struct LassoFillData {
@@ -251,6 +281,7 @@ static void draw_filled_lasso(wmWindow *win, wmGesture *gt)
int i;
rcti rect;
rcti rect_win;
+ float red[4] = {1.0f, 0.0f, 0.0f, 0.0f};
for (i = 0; i < tot; i++, lasso += 2) {
moves[i][0] = lasso[0];
@@ -276,28 +307,28 @@ static void draw_filled_lasso(wmWindow *win, wmGesture *gt)
(const int (*)[2])moves, tot,
draw_filled_lasso_px_cb, &lasso_fill_data);
- glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
+ /* Additive Blending */
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_ONE, GL_ONE);
- glColor4f(1, 1, 1, 1);
- glPixelTransferf(GL_RED_BIAS, 1);
- glPixelTransferf(GL_GREEN_BIAS, 1);
- glPixelTransferf(GL_BLUE_BIAS, 1);
+ GLint unpack_alignment;
+ glGetIntegerv(GL_UNPACK_ALIGNMENT, &unpack_alignment);
- GPU_basic_shader_bind(GPU_SHADER_TEXTURE_2D | GPU_SHADER_USE_COLOR);
+ glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
- glEnable(GL_BLEND);
- glaDrawPixelsTex(rect.xmin, rect.ymin, w, h, GL_ALPHA, GL_UNSIGNED_BYTE, GL_NEAREST, pixel_buf);
- glDisable(GL_BLEND);
+ IMMDrawPixelsTexState state = immDrawPixelsTexSetup(GPU_SHADER_2D_IMAGE_SHUFFLE_COLOR);
+ GPU_shader_bind(state.shader);
+ GPU_shader_uniform_vector(state.shader, GPU_shader_get_uniform(state.shader, "shuffle"), 4, 1, red);
- GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
+ immDrawPixelsTex(&state, rect.xmin, rect.ymin, w, h, GL_RED, GL_UNSIGNED_BYTE, GL_NEAREST, pixel_buf, 1.0f, 1.0f, NULL);
- glPixelTransferf(GL_RED_BIAS, 0);
- glPixelTransferf(GL_GREEN_BIAS, 0);
- glPixelTransferf(GL_BLUE_BIAS, 0);
+ GPU_shader_unbind();
- glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
+ glPixelStorei(GL_UNPACK_ALIGNMENT, unpack_alignment);
MEM_freeN(pixel_buf);
+
+ glDisable(GL_BLEND);
}
MEM_freeN(moves);
@@ -313,29 +344,34 @@ static void wm_gesture_draw_lasso(wmWindow *win, wmGesture *gt, bool filled)
draw_filled_lasso(win, gt);
}
- // for USE_GLSL can't check this yet
- GPU_basic_shader_bind(GPU_SHADER_LINE | GPU_SHADER_STIPPLE | GPU_SHADER_USE_COLOR);
- glColor3ub(96, 96, 96);
- GPU_basic_shader_line_stipple(1, 0xAAAA);
- glBegin(GL_LINE_STRIP);
- for (i = 0; i < gt->points; i++, lasso += 2)
- glVertex2sv(lasso);
- if (gt->type == WM_GESTURE_LASSO)
- glVertex2sv((short *)gt->customdata);
- glEnd();
-
- glColor3ub(255, 255, 255);
- GPU_basic_shader_line_stipple(1, 0x5555);
- glBegin(GL_LINE_STRIP);
- lasso = (short *)gt->customdata;
- for (i = 0; i < gt->points; i++, lasso += 2)
- glVertex2sv(lasso);
- if (gt->type == WM_GESTURE_LASSO)
- glVertex2sv((short *)gt->customdata);
- glEnd();
-
- GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
-
+ const int numverts = gt->points;
+
+ /* Nothing to draw, do early output. */
+ if (numverts < 2) {
+ return;
+ }
+
+ const uint shdr_pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR);
+
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2], viewport_size[3]);
+
+ immUniform1i("num_colors", 2); /* "advanced" mode */
+ immUniformArray4fv("colors", (float *)(float[][4]){{0.4f, 0.4f, 0.4f, 1.0f}, {1.0f, 1.0f, 1.0f, 1.0f}}, 2);
+ immUniform1f("dash_width", 2.0f);
+
+ immBegin((gt->type == WM_GESTURE_LASSO) ? GWN_PRIM_LINE_LOOP : GWN_PRIM_LINE_STRIP, numverts);
+
+ for (i = 0; i < gt->points; i++, lasso += 2) {
+ immVertex2f(shdr_pos, (float)lasso[0], (float)lasso[1]);
+ }
+
+ immEnd();
+
+ immUnbindProgram();
}
static void wm_gesture_draw_cross(wmWindow *win, wmGesture *gt)
@@ -344,25 +380,49 @@ static void wm_gesture_draw_cross(wmWindow *win, wmGesture *gt)
const int winsize_x = WM_window_pixels_x(win);
const int winsize_y = WM_window_pixels_y(win);
- GPU_basic_shader_bind(GPU_SHADER_LINE | GPU_SHADER_STIPPLE | GPU_SHADER_USE_COLOR);
- glColor3ub(96, 96, 96);
- GPU_basic_shader_line_stipple(1, 0xCCCC);
- sdrawline(rect->xmin - winsize_x, rect->ymin, rect->xmin + winsize_x, rect->ymin);
- sdrawline(rect->xmin, rect->ymin - winsize_y, rect->xmin, rect->ymin + winsize_y);
-
- glColor3ub(255, 255, 255);
- GPU_basic_shader_line_stipple(1, 0x3333);
- sdrawline(rect->xmin - winsize_x, rect->ymin, rect->xmin + winsize_x, rect->ymin);
- sdrawline(rect->xmin, rect->ymin - winsize_y, rect->xmin, rect->ymin + winsize_y);
- GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
+ float x1, x2, y1, y2;
+
+ const uint shdr_pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR);
+
+ float viewport_size[4];
+ glGetFloatv(GL_VIEWPORT, viewport_size);
+ immUniform2f("viewport_size", viewport_size[2], viewport_size[3]);
+
+ immUniform1i("num_colors", 2); /* "advanced" mode */
+ immUniformArray4fv("colors", (float *)(float[][4]){{0.4f, 0.4f, 0.4f, 1.0f}, {1.0f, 1.0f, 1.0f, 1.0f}}, 2);
+ immUniform1f("dash_width", 8.0f);
+
+ immBegin(GWN_PRIM_LINES, 4);
+
+ x1 = (float)(rect->xmin - winsize_x);
+ y1 = (float)rect->ymin;
+ x2 = (float)(rect->xmin + winsize_x);
+ y2 = y1;
+
+ immVertex2f(shdr_pos, x1, y1);
+ immVertex2f(shdr_pos, x2, y2);
+
+ x1 = (float)rect->xmin;
+ y1 = (float)(rect->ymin - winsize_y);
+ x2 = x1;
+ y2 = (float)(rect->ymin + winsize_y);
+
+ immVertex2f(shdr_pos, x1, y1);
+ immVertex2f(shdr_pos, x2, y2);
+
+ immEnd();
+
+ immUnbindProgram();
}
/* called in wm_draw.c */
void wm_gesture_draw(wmWindow *win)
{
wmGesture *gt = (wmGesture *)win->gesture.first;
-
- GPU_basic_shader_line_width(1);
+
+ glLineWidth(1.0f);
for (; gt; gt = gt->next) {
/* all in subwindow space */
wmSubWindowSet(win, gt->swinid);
diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c
index 7608b015f49..55ed8b2a091 100644
--- a/source/blender/windowmanager/intern/wm_init_exit.c
+++ b/source/blender/windowmanager/intern/wm_init_exit.c
@@ -93,6 +93,7 @@
#include "WM_api.h"
#include "WM_types.h"
+#include "WM_message.h"
#include "wm_cursors.h"
#include "wm_event_system.h"
@@ -119,10 +120,11 @@
#include "GPU_draw.h"
#include "GPU_init_exit.h"
-#include "BKE_depsgraph.h"
#include "BKE_sound.h"
#include "COM_compositor.h"
+#include "DEG_depsgraph.h"
+
#ifdef WITH_OPENSUBDIV
# include "BKE_subsurf.h"
#endif
@@ -164,17 +166,20 @@ void WM_init(bContext *C, int argc, const char **argv)
wm_operatortype_init();
WM_menutype_init();
WM_uilisttype_init();
+ wm_manipulatortype_init();
+ wm_manipulatorgrouptype_init();
BKE_undo_callback_wm_kill_jobs_set(wm_undo_kill_callback);
BKE_library_callback_free_window_manager_set(wm_close_and_free); /* library.c */
BKE_library_callback_free_notifier_reference_set(WM_main_remove_notifier_reference); /* library.c */
+ BKE_region_callback_free_manipulatormap_set(wm_manipulatormap_remove); /* screen.c */
+ BKE_region_callback_refresh_tag_manipulatormap_set(WM_manipulatormap_tag_refresh);
BKE_library_callback_remap_editor_id_reference_set(WM_main_remap_editor_id_reference); /* library.c */
BKE_blender_callback_test_break_set(wm_window_testbreak); /* blender.c */
BKE_spacedata_callback_id_remap_set(ED_spacedata_id_remap); /* screen.c */
- DAG_editors_update_cb(ED_render_id_flush_update,
- ED_render_scene_update,
- ED_render_scene_update_pre); /* depsgraph.c */
+ DEG_editors_set_update_cb(ED_render_id_flush_update,
+ ED_render_scene_update);
ED_spacetypes_init(); /* editors/space_api/spacetype.c */
@@ -188,6 +193,8 @@ void WM_init(bContext *C, int argc, const char **argv)
* but keep before file reading, since that may report errors */
wm_init_reports(C);
+ WM_msgbus_types_init();
+
/* get the default database, plus a wm */
wm_homefile_read(C, NULL, G.factory_startup, false, true, NULL, NULL);
@@ -473,7 +480,7 @@ void WM_exit_ext(bContext *C, const bool do_python)
CTX_wm_window_set(C, win); /* needed by operator close callbacks */
WM_event_remove_handlers(C, &win->handlers);
WM_event_remove_handlers(C, &win->modalhandlers);
- ED_screen_exit(C, win, win->screen);
+ ED_screen_exit(C, win, WM_window_get_active_screen(win));
}
}
@@ -524,6 +531,11 @@ void WM_exit_ext(bContext *C, const bool do_python)
ED_gpencil_strokes_copybuf_free();
BKE_node_clipboard_clear();
+ /* free manipulator-maps after freeing blender, so no deleted data get accessed during cleaning up of areas */
+ wm_manipulatormaptypes_free();
+ wm_manipulatorgrouptype_free();
+ wm_manipulatortype_free();
+
BLF_exit();
#ifdef WITH_INTERNATIONAL
diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index 4674df9983b..7637d222913 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -52,6 +52,7 @@
#include "DNA_scene_types.h"
#include "DNA_userdef_types.h"
#include "DNA_windowmanager_types.h"
+#include "DNA_workspace_types.h"
#include "BLT_translation.h"
@@ -70,7 +71,6 @@
#include "BKE_blender_version.h"
#include "BKE_brush.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_icons.h"
#include "BKE_idprop.h"
#include "BKE_image.h"
@@ -86,9 +86,12 @@
#include "BKE_idcode.h"
-#include "BIF_glutil.h" /* for paint cursor */
#include "BLF_api.h"
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+#include "GPU_matrix.h"
+
#include "IMB_imbuf_types.h"
#include "IMB_imbuf.h"
@@ -97,8 +100,6 @@
#include "ED_util.h"
#include "ED_view3d.h"
-#include "GPU_basic_shader.h"
-
#include "RNA_access.h"
#include "RNA_define.h"
#include "RNA_enum_types.h"
@@ -118,6 +119,8 @@
#include "wm_window.h"
static GHash *global_ops_hash = NULL;
+/** Counter for operator-properties that should not be tagged with #OP_PROP_TAG_ADVANCED. */
+static int ot_prop_basic_count = -1;
#define UNDOCUMENTED_OPERATOR_TIP N_("(undocumented operator)")
@@ -157,23 +160,33 @@ void WM_operatortype_iter(GHashIterator *ghi)
BLI_ghashIterator_init(ghi, global_ops_hash);
}
-/* all ops in 1 list (for time being... needs evaluation later) */
-void WM_operatortype_append(void (*opfunc)(wmOperatorType *))
+/** \name Operator Type Append
+ * \{ */
+
+static wmOperatorType *wm_operatortype_append__begin(void)
{
- wmOperatorType *ot;
-
- ot = MEM_callocN(sizeof(wmOperatorType), "operatortype");
+ wmOperatorType *ot = MEM_callocN(sizeof(wmOperatorType), "operatortype");
+
+ BLI_assert(ot_prop_basic_count == -1);
+
ot->srna = RNA_def_struct_ptr(&BLENDER_RNA, "", &RNA_OperatorProperties);
+ RNA_def_struct_property_tags(ot->srna, rna_enum_operator_property_tags);
/* Set the default i18n context now, so that opfunc can redefine it if needed! */
RNA_def_struct_translation_context(ot->srna, BLT_I18NCONTEXT_OPERATOR_DEFAULT);
ot->translation_context = BLT_I18NCONTEXT_OPERATOR_DEFAULT;
- opfunc(ot);
+ return ot;
+}
+static void wm_operatortype_append__end(wmOperatorType *ot)
+{
if (ot->name == NULL) {
fprintf(stderr, "ERROR: Operator %s has no name property!\n", ot->idname);
ot->name = N_("Dummy Name");
}
+ /* Allow calling _begin without _end in operatortype creation. */
+ WM_operatortype_props_advanced_end(ot);
+
/* XXX All ops should have a description but for now allow them not to. */
RNA_def_struct_ui_text(ot->srna, ot->name, ot->description ? ot->description : UNDOCUMENTED_OPERATOR_TIP);
RNA_def_struct_identifier(&BLENDER_RNA, ot->srna, ot->idname);
@@ -181,22 +194,23 @@ void WM_operatortype_append(void (*opfunc)(wmOperatorType *))
BLI_ghash_insert(global_ops_hash, (void *)ot->idname, ot);
}
-void WM_operatortype_append_ptr(void (*opfunc)(wmOperatorType *, void *), void *userdata)
+/* all ops in 1 list (for time being... needs evaluation later) */
+void WM_operatortype_append(void (*opfunc)(wmOperatorType *))
{
- wmOperatorType *ot;
+ wmOperatorType *ot = wm_operatortype_append__begin();
+ opfunc(ot);
+ wm_operatortype_append__end(ot);
+}
- ot = MEM_callocN(sizeof(wmOperatorType), "operatortype");
- ot->srna = RNA_def_struct_ptr(&BLENDER_RNA, "", &RNA_OperatorProperties);
- /* Set the default i18n context now, so that opfunc can redefine it if needed! */
- RNA_def_struct_translation_context(ot->srna, BLT_I18NCONTEXT_OPERATOR_DEFAULT);
- ot->translation_context = BLT_I18NCONTEXT_OPERATOR_DEFAULT;
+void WM_operatortype_append_ptr(void (*opfunc)(wmOperatorType *, void *), void *userdata)
+{
+ wmOperatorType *ot = wm_operatortype_append__begin();
opfunc(ot, userdata);
- RNA_def_struct_ui_text(ot->srna, ot->name, ot->description ? ot->description : UNDOCUMENTED_OPERATOR_TIP);
- RNA_def_struct_identifier(&BLENDER_RNA, ot->srna, ot->idname);
-
- BLI_ghash_insert(global_ops_hash, (void *)ot->idname, ot);
+ wm_operatortype_append__end(ot);
}
+/** \} */
+
/* ********************* macro operator ******************** */
typedef struct {
@@ -527,6 +541,55 @@ void WM_operatortype_last_properties_clear_all(void)
}
}
+/**
+ * Tag all operator-properties of \a ot defined after calling this, until
+ * the next #WM_operatortype_props_advanced_end call (if available), with
+ * #OP_PROP_TAG_ADVANCED. Previously defined ones properties not touched.
+ *
+ * Calling this multiple times without a call to #WM_operatortype_props_advanced_end,
+ * all calls after the first one are ignored. Meaning all propereties defined after the
+ * first call are tagged as advanced.
+ *
+ * This doesn't do the actual tagging, #WM_operatortype_props_advanced_end does which is
+ * called for all operators during registration (see #wm_operatortype_append__end).
+ */
+void WM_operatortype_props_advanced_begin(wmOperatorType *ot)
+{
+ if (ot_prop_basic_count == -1) { /* Don't do anything if _begin was called before, but not _end */
+ ot_prop_basic_count = RNA_struct_count_properties(ot->srna);
+ }
+}
+
+/**
+ * Tags all operator-properties of \ot defined since the first #WM_operatortype_props_advanced_begin
+ * call, or the last #WM_operatortype_props_advanced_end call, with #OP_PROP_TAG_ADVANCED.
+ * Note that this is called for all operators during registration (see #wm_operatortype_append__end).
+ * So it does not need to be explicitly called in operator-type definition.
+ */
+void WM_operatortype_props_advanced_end(wmOperatorType *ot)
+{
+ PointerRNA struct_ptr;
+ int counter = 0;
+
+ if (ot_prop_basic_count == -1) {
+ /* WM_operatortype_props_advanced_begin was not called. Don't do anything. */
+ return;
+ }
+
+ RNA_pointer_create(NULL, ot->srna, NULL, &struct_ptr);
+
+ RNA_STRUCT_BEGIN (&struct_ptr, prop)
+ {
+ counter++;
+ if (counter > ot_prop_basic_count) {
+ WM_operatortype_prop_tag(prop, OP_PROP_TAG_ADVANCED);
+ }
+ }
+ RNA_STRUCT_END;
+
+ ot_prop_basic_count = -1;
+}
+
/* SOME_OT_op -> some.op */
void WM_operator_py_idname(char *to, const char *from)
{
@@ -1164,46 +1227,70 @@ int WM_menu_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
return WM_menu_invoke_ex(C, op, WM_OP_INVOKE_REGION_WIN);
}
+struct EnumSearchMenu {
+ wmOperator *op; /* the operator that will be executed when selecting an item */
+
+ bool use_previews;
+ short prv_cols, prv_rows;
+};
/* generic enum search invoke popup */
-static uiBlock *wm_enum_search_menu(bContext *C, ARegion *ar, void *arg_op)
+static uiBlock *wm_enum_search_menu(bContext *C, ARegion *ar, void *arg)
{
- static char search[256] = "";
- wmEvent event;
+ struct EnumSearchMenu *search_menu = arg;
wmWindow *win = CTX_wm_window(C);
+ wmOperator *op = search_menu->op;
+ /* template_ID uses 4 * widget_unit for width, we use a bit more, some items may have a suffix to show */
+ const int width = search_menu->use_previews ? 5 * U.widget_unit * search_menu->prv_cols : UI_searchbox_size_x();
+ const int height = search_menu->use_previews ? 5 * U.widget_unit * search_menu->prv_rows : UI_searchbox_size_y();
+ static char search[256] = "";
uiBlock *block;
uiBut *but;
- wmOperator *op = (wmOperator *)arg_op;
block = UI_block_begin(C, ar, "_popup", UI_EMBOSS);
UI_block_flag_enable(block, UI_BLOCK_LOOP | UI_BLOCK_MOVEMOUSE_QUIT | UI_BLOCK_SEARCH_MENU);
search[0] = '\0';
+ BLI_assert(search_menu->use_previews || (search_menu->prv_cols == 0 && search_menu->prv_rows == 0));
#if 0 /* ok, this isn't so easy... */
uiDefBut(block, UI_BTYPE_LABEL, 0, RNA_struct_ui_name(op->type->srna), 10, 10, UI_searchbox_size_x(), UI_UNIT_Y, NULL, 0.0, 0.0, 0, 0, "");
#endif
but = uiDefSearchButO_ptr(block, op->type, op->ptr->data, search, 0, ICON_VIEWZOOM, sizeof(search),
- 10, 10, UI_searchbox_size_x(), UI_UNIT_Y, 0, 0, "");
+ 10, 10, width, UI_UNIT_Y, search_menu->prv_rows, search_menu->prv_cols, "");
/* fake button, it holds space for search items */
- uiDefBut(block, UI_BTYPE_LABEL, 0, "", 10, 10 - UI_searchbox_size_y(), UI_searchbox_size_x(), UI_searchbox_size_y(), NULL, 0, 0, 0, 0, NULL);
+ uiDefBut(block, UI_BTYPE_LABEL, 0, "", 10, 10 - UI_searchbox_size_y(), width, height, NULL, 0, 0, 0, 0, NULL);
UI_block_bounds_set_popup(block, 6, 0, -UI_UNIT_Y); /* move it downwards, mouse over button */
-
- wm_event_init_from_window(win, &event);
- event.type = EVT_BUT_OPEN;
- event.val = KM_PRESS;
- event.customdata = but;
- event.customdatafree = false;
- wm_event_add(win, &event);
+ UI_but_focus_on_enter_event(win, but);
return block;
}
+/**
+ * Similar to #WM_enum_search_invoke, but draws previews. Also, this can't
+ * be used as invoke callback directly since it needs additional info.
+ */
+int WM_enum_search_invoke_previews(
+ bContext *C, wmOperator *op, short prv_cols, short prv_rows)
+{
+ static struct EnumSearchMenu search_menu;
+
+ search_menu.op = op;
+ search_menu.use_previews = true;
+ search_menu.prv_cols = prv_cols;
+ search_menu.prv_rows = prv_rows;
+
+ UI_popup_block_invoke(C, wm_enum_search_menu, &search_menu);
+
+ return OPERATOR_INTERFACE;
+}
int WM_enum_search_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
{
- UI_popup_block_invoke(C, wm_enum_search_menu, op);
+ static struct EnumSearchMenu search_menu;
+ search_menu.op = op;
+ UI_popup_block_invoke(C, wm_enum_search_menu, &search_menu);
return OPERATOR_INTERFACE;
}
@@ -1716,6 +1803,48 @@ static void WM_OT_operator_defaults(wmOperatorType *ot)
ot->flag = OPTYPE_INTERNAL;
}
+#ifdef USE_WORKSPACE_TOOL
+/* ***************** Set Active Tool ************************* */
+
+/* Developers note: in it's current form this doesn't need to be an operator,
+ * keep this as-is for now since it may end up setting an active key-map.
+ */
+
+static int wm_operator_tool_set_exec(bContext *C, wmOperator *op)
+{
+ ScrArea *sa = CTX_wm_area(C);
+
+ bToolDef tool_def = {0};
+
+ tool_def.index = RNA_int_get(op->ptr, "index");
+ tool_def.spacetype = sa->spacetype;
+ RNA_string_get(op->ptr, "keymap", tool_def.keymap);
+ RNA_string_get(op->ptr, "manipulator_group", tool_def.manipulator_group);
+
+ WM_toolsystem_set(C, &tool_def);
+
+ /* For some reason redraw fails with menus (even though 'ar' isn't the menu's region). */
+ ED_area_tag_redraw(sa);
+
+ return OPERATOR_FINISHED;
+}
+
+static void WM_OT_tool_set(wmOperatorType *ot)
+{
+ ot->name = "Set Active Tool";
+ ot->idname = "WM_OT_tool_set";
+ ot->description = "Set the active tool";
+
+ ot->exec = wm_operator_tool_set_exec;
+
+ ot->flag = OPTYPE_INTERNAL;
+
+ RNA_def_string(ot->srna, "keymap", NULL, KMAP_MAX_NAME, "Key Map", "");
+ RNA_def_string(ot->srna, "manipulator_group", NULL, MAX_NAME, "Manipulator Group", "");
+ RNA_def_int(ot->srna, "index", 0, INT_MIN, INT_MAX, "Index", "", INT_MIN, INT_MAX);
+}
+#endif /* USE_WORKSPACE_TOOL */
+
/* ***************** Splash Screen ************************* */
static void wm_block_splash_close(bContext *C, void *arg_block, void *UNUSED(arg))
@@ -1821,7 +1950,7 @@ static uiBlock *wm_block_create_splash(bContext *C, ARegion *ar, void *UNUSED(ar
ibuf_template = IMB_loadiffname(splash_filepath, IB_rect, NULL);
if (ibuf_template) {
const int x_expect = ibuf->x;
- const int y_expect = 230 * (int)U.pixelsize;
+ const int y_expect = 282 * (int)U.pixelsize;
/* don't cover the header text */
if (ibuf_template->x == x_expect && ibuf_template->y == y_expect) {
memcpy(ibuf->rect, ibuf_template->rect, ibuf_template->x * ibuf_template->y * sizeof(char[4]));
@@ -1859,8 +1988,8 @@ static uiBlock *wm_block_create_splash(bContext *C, ARegion *ar, void *UNUSED(ar
if (version_suffix != NULL && version_suffix[0]) {
/* placed after the version number in the image,
* placing y is tricky to match baseline */
- int x = 260 * U.pixelsize - (2 * UI_DPI_FAC);
- int y = 242 * U.pixelsize + (4 * UI_DPI_FAC);
+ int x = 236 * U.pixelsize - (2 * UI_DPI_FAC);
+ int y = 231 * U.pixelsize + (4 * UI_DPI_FAC);
int w = 240 * U.pixelsize;
/* hack to have text draw 'text_sel' */
@@ -1873,17 +2002,32 @@ static uiBlock *wm_block_create_splash(bContext *C, ARegion *ar, void *UNUSED(ar
#ifdef WITH_BUILDINFO
if (build_commit_timestamp != 0) {
- uiDefBut(block, UI_BTYPE_LABEL, 0, date_buf, U.pixelsize * 494 - date_width, U.pixelsize * 270, date_width, UI_UNIT_Y, NULL, 0, 0, 0, 0, NULL);
+ but = uiDefBut(
+ block, UI_BTYPE_LABEL, 0, date_buf,
+ U.pixelsize * 502 - date_width, U.pixelsize * 267,
+ date_width, UI_UNIT_Y, NULL, 0, 0, 0, 0, NULL);
+ /* XXX, set internal flag - UI_SELECT */
+ UI_but_flag_enable(but, 1);
label_delta = 12;
}
- uiDefBut(block, UI_BTYPE_LABEL, 0, hash_buf, U.pixelsize * 494 - hash_width, U.pixelsize * (270 - label_delta), hash_width, UI_UNIT_Y, NULL, 0, 0, 0, 0, NULL);
+ but = uiDefBut(
+ block, UI_BTYPE_LABEL, 0, hash_buf,
+ U.pixelsize * 502 - hash_width, U.pixelsize * (267 - label_delta),
+ hash_width, UI_UNIT_Y, NULL, 0, 0, 0, 0, NULL);
+ /* XXX, set internal flag - UI_SELECT */
+ UI_but_flag_enable(but, 1);
if (!STREQ(build_branch, "master")) {
char branch_buf[128] = "\0";
int branch_width;
BLI_snprintf(branch_buf, sizeof(branch_buf), "Branch: %s", build_branch);
branch_width = (int)BLF_width(style->widgetlabel.uifont_id, branch_buf, sizeof(branch_buf)) + U.widget_unit;
- uiDefBut(block, UI_BTYPE_LABEL, 0, branch_buf, U.pixelsize * 494 - branch_width, U.pixelsize * (258 - label_delta), branch_width, UI_UNIT_Y, NULL, 0, 0, 0, 0, NULL);
+ but = uiDefBut(
+ block, UI_BTYPE_LABEL, 0, branch_buf,
+ U.pixelsize * 502 - branch_width, U.pixelsize * (255 - label_delta),
+ branch_width, UI_UNIT_Y, NULL, 0, 0, 0, 0, NULL);
+ /* XXX, set internal flag - UI_SELECT */
+ UI_but_flag_enable(but, 1);
}
#endif /* WITH_BUILDINFO */
@@ -2122,8 +2266,11 @@ static void WM_OT_call_menu_pie(wmOperatorType *ot)
static int wm_operator_winactive_normal(bContext *C)
{
wmWindow *win = CTX_wm_window(C);
+ bScreen *screen;
- if (win == NULL || win->screen == NULL || win->screen->state != SCREENNORMAL)
+ if (win == NULL)
+ return 0;
+ if (!((screen = WM_window_get_active_screen(win)) && (screen->state == SCREENNORMAL)))
return 0;
return 1;
@@ -2140,14 +2287,22 @@ static void WM_OT_window_close(wmOperatorType *ot)
ot->poll = WM_operator_winactive;
}
-static void WM_OT_window_duplicate(wmOperatorType *ot)
+static void WM_OT_window_new(wmOperatorType *ot)
{
- ot->name = "Duplicate Window";
- ot->idname = "WM_OT_window_duplicate";
- ot->description = "Duplicate the current Blender window";
-
- ot->exec = wm_window_duplicate_exec;
+ PropertyRNA *prop;
+
+ ot->name = "New Window";
+ ot->idname = "WM_OT_window_new";
+ ot->description = "Create a new Blender window";
+
+ ot->exec = wm_window_new_exec;
+ ot->invoke = wm_window_new_invoke;
ot->poll = wm_operator_winactive_normal;
+
+ prop = RNA_def_enum(ot->srna, "screen", DummyRNA_NULL_items, 0, "Screen", "");
+ RNA_def_enum_funcs(prop, wm_window_new_screen_itemf);
+ RNA_def_property_flag(prop, PROP_ENUM_NO_TRANSLATE);
+ ot->prop = prop;
}
static void WM_OT_window_fullscreen_toggle(wmOperatorType *ot)
@@ -2351,8 +2506,8 @@ static void radial_control_set_tex(RadialControl *rc)
if ((ibuf = BKE_brush_gen_radial_control_imbuf(rc->image_id_ptr.data, rc->use_secondary_tex))) {
glGenTextures(1, &rc->gltex);
glBindTexture(GL_TEXTURE_2D, rc->gltex);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA8, ibuf->x, ibuf->y, 0,
- GL_ALPHA, GL_FLOAT, ibuf->rect_float);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_R8, ibuf->x, ibuf->y, 0,
+ GL_RED, GL_FLOAT, ibuf->rect_float);
MEM_freeN(ibuf->rect_float);
MEM_freeN(ibuf);
}
@@ -2385,43 +2540,63 @@ static void radial_control_paint_tex(RadialControl *rc, float radius, float alph
RNA_property_float_get_array(fill_ptr, fill_prop, col);
}
- glColor4f(col[0], col[1], col[2], alpha);
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
if (rc->gltex) {
+
+ unsigned int texCoord = GWN_vertformat_attr_add(format, "texCoord", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
glBindTexture(GL_TEXTURE_2D, rc->gltex);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+
+ GLint swizzleMask[] = {GL_ZERO, GL_ZERO, GL_ZERO, GL_RED};
+ glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_IMAGE_MASK_UNIFORM_COLOR);
+
+ immUniformColor3fvAlpha(col, alpha);
+ immUniform1i("image", GL_TEXTURE0);
/* set up rotation if available */
if (rc->rot_prop) {
rot = RNA_property_float_get(&rc->rot_ptr, rc->rot_prop);
- glPushMatrix();
- glRotatef(RAD2DEGF(rot), 0, 0, 1);
+ gpuPushMatrix();
+ gpuRotate2D(RAD2DEGF(rot));
}
/* draw textured quad */
- GPU_basic_shader_bind(GPU_SHADER_TEXTURE_2D | GPU_SHADER_USE_COLOR);
- glBegin(GL_QUADS);
- glTexCoord2f(0, 0);
- glVertex2f(-radius, -radius);
- glTexCoord2f(1, 0);
- glVertex2f(radius, -radius);
- glTexCoord2f(1, 1);
- glVertex2f(radius, radius);
- glTexCoord2f(0, 1);
- glVertex2f(-radius, radius);
- glEnd();
- GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
+ immBegin(GWN_PRIM_TRI_FAN, 4);
+
+ immAttrib2f(texCoord, 0, 0);
+ immVertex2f(pos, -radius, -radius);
+
+ immAttrib2f(texCoord, 1, 0);
+ immVertex2f(pos, radius, -radius);
+
+ immAttrib2f(texCoord, 1, 1);
+ immVertex2f(pos, radius, radius);
+
+ immAttrib2f(texCoord, 0, 1);
+ immVertex2f(pos, -radius, radius);
+
+ immEnd();
/* undo rotation */
if (rc->rot_prop)
- glPopMatrix();
+ gpuPopMatrix();
}
else {
/* flat color if no texture available */
- glutil_draw_filled_arc(0, M_PI * 2, radius, 40);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor3fvAlpha(col, alpha);
+ imm_draw_circle_fill_2d(pos, 0.0f, 0.0f, radius, 40);
}
+
+ immUnbindProgram();
}
static void radial_control_paint_cursor(bContext *C, int x, int y, void *customdata)
@@ -2480,7 +2655,7 @@ static void radial_control_paint_cursor(bContext *C, int x, int y, void *customd
/* Keep cursor in the original place */
x = rc->initial_mouse[0] - ar->winrct.xmin;
y = rc->initial_mouse[1] - ar->winrct.ymin;
- glTranslatef((float)x, (float)y, 0.0f);
+ gpuTranslate2f((float)x, (float)y);
glEnable(GL_BLEND);
glEnable(GL_LINE_SMOOTH);
@@ -2488,7 +2663,7 @@ static void radial_control_paint_cursor(bContext *C, int x, int y, void *customd
/* apply zoom if available */
if (rc->zoom_prop) {
RNA_property_float_get_array(&rc->zoom_ptr, rc->zoom_prop, zoom);
- glScalef(zoom[0], zoom[1], 1);
+ gpuScale2fv(zoom);
}
/* draw rotated texture */
@@ -2497,24 +2672,39 @@ static void radial_control_paint_cursor(bContext *C, int x, int y, void *customd
/* set line color */
if (rc->col_prop)
RNA_property_float_get_array(&rc->col_ptr, rc->col_prop, col);
- glColor4f(col[0], col[1], col[2], 0.5);
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor3fvAlpha(col, 0.5f);
if (rc->subtype == PROP_ANGLE) {
- glPushMatrix();
+ gpuPushMatrix();
+
/* draw original angle line */
- glRotatef(RAD2DEGF(rc->initial_value), 0, 0, 1);
- fdrawline((float)WM_RADIAL_CONTROL_DISPLAY_MIN_SIZE, 0.0f, (float)WM_RADIAL_CONTROL_DISPLAY_SIZE, 0.0f);
+ gpuRotate2D(RAD2DEGF(rc->initial_value));
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2f(pos, (float)WM_RADIAL_CONTROL_DISPLAY_MIN_SIZE, 0.0f);
+ immVertex2f(pos, (float)WM_RADIAL_CONTROL_DISPLAY_SIZE, 0.0f);
+ immEnd();
+
/* draw new angle line */
- glRotatef(RAD2DEGF(rc->current_value - rc->initial_value), 0, 0, 1);
- fdrawline((float)WM_RADIAL_CONTROL_DISPLAY_MIN_SIZE, 0.0f, (float)WM_RADIAL_CONTROL_DISPLAY_SIZE, 0.0f);
- glPopMatrix();
+ gpuRotate2D(RAD2DEGF(rc->current_value - rc->initial_value));
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2f(pos, (float)WM_RADIAL_CONTROL_DISPLAY_MIN_SIZE, 0.0f);
+ immVertex2f(pos, (float)WM_RADIAL_CONTROL_DISPLAY_SIZE, 0.0f);
+ immEnd();
+
+ gpuPopMatrix();
}
/* draw circles on top */
- glutil_draw_lined_arc(0.0, (float)(M_PI * 2.0), r1, 40);
- glutil_draw_lined_arc(0.0, (float)(M_PI * 2.0), r2, 40);
+ imm_draw_circle_wire_2d(pos, 0.0f, 0.0f, r1, 40);
+ imm_draw_circle_wire_2d(pos, 0.0f, 0.0f, r2, 40);
if (rmin > 0.0f)
- glutil_draw_lined_arc(0.0, (float)(M_PI * 2.0), rmin, 40);
+ imm_draw_circle_wire_2d(pos, 0.0, 0.0f, rmin, 40);
+ immUnbindProgram();
BLF_size(fontid, 1.5 * fstyle_points * U.pixelsize, U.dpi);
BLF_enable(fontid, BLF_SHADOW);
@@ -2530,6 +2720,7 @@ static void radial_control_paint_cursor(bContext *C, int x, int y, void *customd
glDisable(GL_BLEND);
glDisable(GL_LINE_SMOOTH);
+
}
typedef enum {
@@ -3089,7 +3280,8 @@ static const EnumPropertyItem redraw_timer_type_items[] = {
static void redraw_timer_step(
- bContext *C, Main *bmain, Scene *scene,
+ bContext *C, Main *bmain, Scene *scene, ViewLayer *view_layer,
+ struct Depsgraph *depsgraph,
wmWindow *win, ScrArea *sa, ARegion *ar,
const int type, const int cfra)
{
@@ -3108,11 +3300,12 @@ static void redraw_timer_step(
CTX_wm_window_set(C, win); /* XXX context manipulation warning! */
}
else if (type == eRTDrawWindow) {
+ bScreen *screen = WM_window_get_active_screen(win);
ScrArea *sa_iter;
CTX_wm_menu_set(C, NULL);
- for (sa_iter = win->screen->areabase.first; sa_iter; sa_iter = sa_iter->next) {
+ for (sa_iter = screen->areabase.first; sa_iter; sa_iter = sa_iter->next) {
ARegion *ar_iter;
CTX_wm_area_set(C, sa_iter);
@@ -3135,7 +3328,7 @@ static void redraw_timer_step(
}
else if (type == eRTAnimationStep) {
scene->r.cfra += (cfra == scene->r.cfra) ? 1 : -1;
- BKE_scene_update_for_newframe(bmain->eval_ctx, bmain, scene, scene->lay);
+ BKE_scene_graph_update_for_newframe(bmain->eval_ctx, depsgraph, bmain, scene, view_layer);
}
else if (type == eRTAnimationPlay) {
/* play anim, return on same frame as started with */
@@ -3147,7 +3340,7 @@ static void redraw_timer_step(
if (scene->r.cfra > scene->r.efra)
scene->r.cfra = scene->r.sfra;
- BKE_scene_update_for_newframe(bmain->eval_ctx, bmain, scene, scene->lay);
+ BKE_scene_graph_update_for_newframe(bmain->eval_ctx, depsgraph, bmain, scene, view_layer);
redraw_timer_window_swap(C);
}
}
@@ -3161,6 +3354,7 @@ static int redraw_timer_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
wmWindow *win = CTX_wm_window(C);
ScrArea *sa = CTX_wm_area(C);
ARegion *ar = CTX_wm_region(C);
@@ -3171,13 +3365,14 @@ static int redraw_timer_exec(bContext *C, wmOperator *op)
const int cfra = scene->r.cfra;
int a, iter_steps = 0;
const char *infostr = "";
+ struct Depsgraph *depsgraph = CTX_data_depsgraph(C);
WM_cursor_wait(1);
time_start = PIL_check_seconds_timer();
for (a = 0; a < iter; a++) {
- redraw_timer_step(C, bmain, scene, win, sa, ar, type, cfra);
+ redraw_timer_step(C, bmain, scene, view_layer, depsgraph, win, sa, ar, type, cfra);
iter_steps += 1;
if (time_limit != 0.0) {
@@ -3235,28 +3430,6 @@ static void WM_OT_memory_statistics(wmOperatorType *ot)
ot->exec = memory_statistics_exec;
}
-/* ************************** memory statistics for testing ***************** */
-
-static int dependency_relations_exec(bContext *C, wmOperator *UNUSED(op))
-{
- Main *bmain = CTX_data_main(C);
- Scene *scene = CTX_data_scene(C);
- Object *ob = CTX_data_active_object(C);
-
- DAG_print_dependencies(bmain, scene, ob);
-
- return OPERATOR_FINISHED;
-}
-
-static void WM_OT_dependency_relations(wmOperatorType *ot)
-{
- ot->name = "Dependency Relations";
- ot->idname = "WM_OT_dependency_relations";
- ot->description = "Print dependency graph relations to the console";
-
- ot->exec = dependency_relations_exec;
-}
-
/* *************************** Mat/tex/etc. previews generation ************* */
typedef struct PreviewsIDEnsureData {
@@ -3503,12 +3676,13 @@ void wm_operatortype_init(void)
global_ops_hash = BLI_ghash_str_new_ex("wm_operatortype_init gh", 2048);
WM_operatortype_append(WM_OT_window_close);
- WM_operatortype_append(WM_OT_window_duplicate);
+ WM_operatortype_append(WM_OT_window_new);
WM_operatortype_append(WM_OT_read_history);
WM_operatortype_append(WM_OT_read_homefile);
WM_operatortype_append(WM_OT_read_factory_settings);
WM_operatortype_append(WM_OT_save_homefile);
WM_operatortype_append(WM_OT_save_userpref);
+ WM_operatortype_append(WM_OT_save_workspace_file);
WM_operatortype_append(WM_OT_userpref_autoexec_path_add);
WM_operatortype_append(WM_OT_userpref_autoexec_path_remove);
WM_operatortype_append(WM_OT_window_fullscreen_toggle);
@@ -3525,9 +3699,11 @@ void wm_operatortype_init(void)
WM_operatortype_append(WM_OT_save_mainfile);
WM_operatortype_append(WM_OT_redraw_timer);
WM_operatortype_append(WM_OT_memory_statistics);
- WM_operatortype_append(WM_OT_dependency_relations);
WM_operatortype_append(WM_OT_debug_menu);
WM_operatortype_append(WM_OT_operator_defaults);
+#ifdef USE_WORKSPACE_TOOL
+ WM_operatortype_append(WM_OT_tool_set);
+#endif
WM_operatortype_append(WM_OT_splash);
WM_operatortype_append(WM_OT_search_menu);
WM_operatortype_append(WM_OT_call_menu);
@@ -3540,6 +3716,10 @@ void wm_operatortype_init(void)
WM_operatortype_append(WM_OT_previews_ensure);
WM_operatortype_append(WM_OT_previews_clear);
WM_operatortype_append(WM_OT_doc_view_manual_ui_context);
+
+ /* manipulators */
+ WM_operatortype_append(MANIPULATORGROUP_OT_manipulator_select);
+ WM_operatortype_append(MANIPULATORGROUP_OT_manipulator_tweak);
}
/* circleselect-like modal operators */
@@ -3742,7 +3922,7 @@ void wm_window_keymap(wmKeyConfig *keyconf)
wmKeyMapItem *kmi;
/* note, this doesn't replace existing keymap items */
- WM_keymap_verify_item(keymap, "WM_OT_window_duplicate", WKEY, KM_PRESS, KM_CTRL | KM_ALT, 0);
+ WM_keymap_verify_item(keymap, "WM_OT_window_new", WKEY, KM_PRESS, KM_CTRL | KM_ALT, 0);
#ifdef __APPLE__
WM_keymap_add_item(keymap, "WM_OT_read_homefile", NKEY, KM_PRESS, KM_OSKEY, 0);
WM_keymap_add_menu(keymap, "INFO_MT_file_open_recent", OKEY, KM_PRESS, KM_SHIFT | KM_OSKEY, 0);
@@ -3846,6 +4026,7 @@ void wm_window_keymap(wmKeyConfig *keyconf)
RNA_float_set(kmi->ptr, "value", 1.0f / 1.5f);
#endif /* WITH_INPUT_NDOF */
+ wm_manipulators_keymap(keyconf);
gesture_circle_modal_keymap(keyconf);
gesture_border_modal_keymap(keyconf);
gesture_zoom_border_modal_keymap(keyconf);
diff --git a/source/blender/windowmanager/intern/wm_playanim.c b/source/blender/windowmanager/intern/wm_playanim.c
index 77378cf8e0c..fcb471530e0 100644
--- a/source/blender/windowmanager/intern/wm_playanim.c
+++ b/source/blender/windowmanager/intern/wm_playanim.c
@@ -58,24 +58,29 @@
#include "IMB_imbuf_types.h"
#include "IMB_imbuf.h"
-#include "BKE_depsgraph.h"
#include "BKE_image.h"
#include "BIF_gl.h"
#include "BIF_glutil.h"
+#include "GPU_matrix.h"
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+
#include "DNA_scene_types.h"
#include "ED_datafiles.h" /* for fonts */
#include "GHOST_C-api.h"
#include "BLF_api.h"
+#include "DEG_depsgraph.h"
+
#include "WM_api.h" /* only for WM_main_playanim */
#ifdef WITH_AUDASPACE
-# include AUD_DEVICE_H
-# include AUD_HANDLE_H
-# include AUD_SOUND_H
-# include AUD_SPECIAL_H
+# include <AUD_Device.h>
+# include <AUD_Handle.h>
+# include <AUD_Sound.h>
+# include <AUD_Special.h>
static AUD_Sound *source = NULL;
static AUD_Handle *playback_handle = NULL;
@@ -190,10 +195,7 @@ static void playanim_window_get_size(int *r_width, int *r_height)
static void playanim_gl_matrix(void)
{
/* unified matrix, note it affects offset for drawing */
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glOrtho(0.0f, 1.0f, 0.0f, 1.0f, -1.0f, 1.0f);
- glMatrixMode(GL_MODELVIEW);
+ gpuOrtho2D(0.0f, 1.0f, 0.0f, 1.0f);
}
/* implementation */
@@ -308,42 +310,45 @@ static void playanim_toscreen(PlayState *ps, PlayAnimPict *picture, struct ImBuf
CLAMP(offs_x, 0.0f, 1.0f);
CLAMP(offs_y, 0.0f, 1.0f);
- glRasterPos2f(offs_x, offs_y);
glClearColor(0.1, 0.1, 0.1, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
-
+
/* checkerboard for case alpha */
if (ibuf->planes == 32) {
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- fdrawcheckerboard(offs_x, offs_y, offs_x + span_x, offs_y + span_y);
+ imm_draw_box_checker_2d(offs_x, offs_y, offs_x + span_x, offs_y + span_y);
}
- glRasterPos2f(offs_x + (ps->draw_flip[0] ? span_x : 0.0f),
- offs_y + (ps->draw_flip[1] ? span_y : 0.0f));
-
- glPixelZoom(ps->zoom * (ps->draw_flip[0] ? -1.0f : 1.0f),
- ps->zoom * (ps->draw_flip[1] ? -1.0f : 1.0f));
+ IMMDrawPixelsTexState state = immDrawPixelsTexSetup(GPU_SHADER_2D_IMAGE_COLOR);
- glDrawPixels(ibuf->x, ibuf->y, GL_RGBA, GL_UNSIGNED_BYTE, ibuf->rect);
+ immDrawPixelsTex(
+ &state,
+ offs_x + (ps->draw_flip[0] ? span_x : 0.0f),
+ offs_y + (ps->draw_flip[1] ? span_y : 0.0f),
+ ibuf->x, ibuf->y, GL_RGBA, GL_UNSIGNED_BYTE, GL_NEAREST,
+ ibuf->rect,
+ ((ps->draw_flip[0] ? -1.0f : 1.0f)) * (ps->zoom / (float)ps->win_x),
+ ((ps->draw_flip[1] ? -1.0f : 1.0f)) * (ps->zoom / (float)ps->win_y),
+ NULL);
glDisable(GL_BLEND);
-
+
pupdate_time();
if (picture && (g_WS.qual & (WS_QUAL_SHIFT | WS_QUAL_LMOUSE)) && (fontid != -1)) {
int sizex, sizey;
float fsizex_inv, fsizey_inv;
char str[32 + FILE_MAX];
- cpack(-1);
BLI_snprintf(str, sizeof(str), "%s | %.2f frames/s", picture->name, fstep / swaptime);
playanim_window_get_size(&sizex, &sizey);
fsizex_inv = 1.0f / sizex;
fsizey_inv = 1.0f / sizey;
+ BLF_color4f(fontid, 1.0, 1.0, 1.0, 1.0);
BLF_enable(fontid, BLF_ASPECT);
BLF_aspect(fontid, fsizex_inv, fsizey_inv, 1.0f);
BLF_position(fontid, 10.0f * fsizex_inv, 10.0f * fsizey_inv, 0.0f);
@@ -354,24 +359,25 @@ static void playanim_toscreen(PlayState *ps, PlayAnimPict *picture, struct ImBuf
float fac = ps->picture->frame / (double)(((PlayAnimPict *)picsbase.last)->frame - ((PlayAnimPict *)picsbase.first)->frame);
fac = 2.0f * fac - 1.0f;
- glMatrixMode(GL_PROJECTION);
- glPushMatrix();
- glLoadIdentity();
- glMatrixMode(GL_MODELVIEW);
- glPushMatrix();
- glLoadIdentity();
-
- glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
-
- glBegin(GL_LINES);
- glVertex2f(fac, -1.0f);
- glVertex2f(fac, 1.0f);
- glEnd();
-
- glPopMatrix();
- glMatrixMode(GL_PROJECTION);
- glPopMatrix();
- glMatrixMode(GL_MODELVIEW);
+ gpuPushProjectionMatrix();
+ gpuLoadIdentityProjectionMatrix();
+ gpuPushMatrix();
+ gpuLoadIdentity();
+
+ unsigned int pos = GWN_vertformat_attr_add(immVertexFormat(), "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immUniformColor3ub(0, 255, 0);
+
+ immBegin(GWN_PRIM_LINES, 2);
+ immVertex2f(pos, fac, -1.0f);
+ immVertex2f(pos, fac, 1.0f);
+ immEnd();
+
+ immUnbindProgram();
+
+ gpuPopMatrix();
+ gpuPopProjectionMatrix();
}
GHOST_SwapWindowBuffers(g_WS.ghost_window);
@@ -1255,6 +1261,9 @@ static char *wm_main_playanim_intern(int argc, const char **argv)
//GHOST_ActivateWindowDrawingContext(g_WS.ghost_window);
+ /* initialize OpenGL immediate mode */
+ immInit();
+
/* initialize the font */
BLF_init();
ps.fontid = BLF_load_mem("monospace", (unsigned char *)datatoc_bmonofont_ttf, datatoc_bmonofont_ttf_size);
@@ -1524,7 +1533,11 @@ static char *wm_main_playanim_intern(int argc, const char **argv)
#endif
/* we still miss freeing a lot!,
* but many areas could skip initialization too for anim play */
-
+
+ GPU_shader_free_builtin_shaders();
+
+ immDestroy();
+
BLF_exit();
GHOST_DisposeWindow(g_WS.ghost_system, g_WS.ghost_window);
@@ -1537,7 +1550,7 @@ static char *wm_main_playanim_intern(int argc, const char **argv)
IMB_exit();
BKE_images_exit();
- DAG_exit();
+ DEG_free_node_types();
totblock = MEM_get_memory_blocks_in_use();
if (totblock != 0) {
diff --git a/source/blender/windowmanager/intern/wm_stereo.c b/source/blender/windowmanager/intern/wm_stereo.c
index 55fe2ec846c..84b739a692e 100644
--- a/source/blender/windowmanager/intern/wm_stereo.c
+++ b/source/blender/windowmanager/intern/wm_stereo.c
@@ -52,8 +52,7 @@
#include "ED_screen.h"
-#include "GPU_glew.h"
-#include "GPU_basic_shader.h"
+#include "GPU_immediate.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -77,54 +76,82 @@ static void wm_method_draw_stereo3d_pageflip(wmWindow *win)
else //STEREO_RIGHT_ID
glDrawBuffer(GL_BACK_RIGHT);
- wm_triple_draw_textures(win, drawdata->triple, 1.0f, false);
+ wm_triple_draw_textures(win, drawdata->triple, 1.0f);
}
glDrawBuffer(GL_BACK);
}
-static enum eStereo3dInterlaceType interlace_prev_type = -1;
-static char interlace_prev_swap = -1;
+static GPUInterlaceShader interlace_gpu_id_from_type(eStereo3dInterlaceType interlace_type)
+{
+ switch (interlace_type) {
+ case S3D_INTERLACE_ROW:
+ return GPU_SHADER_INTERLACE_ROW;
+ case S3D_INTERLACE_COLUMN:
+ return GPU_SHADER_INTERLACE_COLUMN;
+ case S3D_INTERLACE_CHECKERBOARD:
+ default:
+ return GPU_SHADER_INTERLACE_CHECKER;
+ }
+}
static void wm_method_draw_stereo3d_interlace(wmWindow *win)
{
- wmDrawData *drawdata;
- int view;
- bool flag;
bool swap = (win->stereo3d_format->flag & S3D_INTERLACE_SWAP) != 0;
enum eStereo3dInterlaceType interlace_type = win->stereo3d_format->interlace_type;
- for (view = 0; view < 2; view ++) {
- flag = swap ? !view : view;
- drawdata = BLI_findlink(&win->drawdata, (view * 2) + 1);
- GPU_basic_shader_bind(GPU_SHADER_STIPPLE);
- switch (interlace_type) {
- case S3D_INTERLACE_ROW:
- if (flag)
- GPU_basic_shader_stipple(GPU_SHADER_STIPPLE_S3D_INTERLACE_ROW_SWAP);
- else
- GPU_basic_shader_stipple(GPU_SHADER_STIPPLE_S3D_INTERLACE_ROW);
- break;
- case S3D_INTERLACE_COLUMN:
- if (flag)
- GPU_basic_shader_stipple(GPU_SHADER_STIPPLE_S3D_INTERLACE_COLUMN_SWAP);
- else
- GPU_basic_shader_stipple(GPU_SHADER_STIPPLE_S3D_INTERLACE_COLUMN);
- break;
- case S3D_INTERLACE_CHECKERBOARD:
- default:
- if (flag)
- GPU_basic_shader_stipple(GPU_SHADER_STIPPLE_S3D_INTERLACE_CHECKER_SWAP);
- else
- GPU_basic_shader_stipple(GPU_SHADER_STIPPLE_S3D_INTERLACE_CHECKER);
- break;
- }
+ wmDrawData *drawdata[2];
+ for (int eye = 0; eye < 2; eye++) {
+ int view = swap ? !eye : eye;
+ drawdata[eye] = BLI_findlink(&win->drawdata, (view * 2) + 1);
+ }
+
+ const int sizex = WM_window_pixels_x(win);
+ const int sizey = WM_window_pixels_y(win);
+
+ /* wmOrtho for the screen has this same offset */
+ float ratiox = sizex;
+ float ratioy = sizey;
+ float halfx = GLA_PIXEL_OFS;
+ float halfy = GLA_PIXEL_OFS;
+
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int texcoord = GWN_vertformat_attr_add(format, "texCoord", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_2D_IMAGE_INTERLACE);
+
+ /* leave GL_TEXTURE0 as the latest bind texture */
+ for (int eye = 1; eye >= 0; eye--) {
+ glActiveTexture(GL_TEXTURE0 + eye);
+ glBindTexture(drawdata[eye]->triple->target, drawdata[eye]->triple->bind);
+ }
- wm_triple_draw_textures(win, drawdata->triple, 1.0f, true);
- GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
+ immUniform1i("image_a", 0);
+ immUniform1i("image_b", 1);
+
+ immUniform1i("interlace_id", interlace_gpu_id_from_type(interlace_type));
+
+ immBegin(GWN_PRIM_TRI_FAN, 4);
+
+ immAttrib2f(texcoord, halfx, halfy);
+ immVertex2f(pos, 0.0f, 0.0f);
+
+ immAttrib2f(texcoord, ratiox + halfx, halfy);
+ immVertex2f(pos, sizex, 0.0f);
+
+ immAttrib2f(texcoord, ratiox + halfx, ratioy + halfy);
+ immVertex2f(pos, sizex, sizey);
+
+ immAttrib2f(texcoord, halfx, ratioy + halfy);
+ immVertex2f(pos, 0.0f, sizey);
+
+ immEnd();
+ immUnbindProgram();
+
+ for (int eye = 0; eye < 2; eye++) {
+ glBindTexture(drawdata[eye]->triple->target, 0);
}
- interlace_prev_type = interlace_type;
- interlace_prev_swap = swap;
}
static void wm_method_draw_stereo3d_anaglyph(wmWindow *win)
@@ -157,7 +184,7 @@ static void wm_method_draw_stereo3d_anaglyph(wmWindow *win)
break;
}
- wm_triple_draw_textures(win, drawdata->triple, 1.0f, false);
+ wm_triple_draw_textures(win, drawdata->triple, 1.0f);
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
}
@@ -172,6 +199,10 @@ static void wm_method_draw_stereo3d_sidebyside(wmWindow *win)
int soffx;
bool cross_eyed = (win->stereo3d_format->flag & S3D_SIDEBYSIDE_CROSSEYED) != 0;
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int texcoord = GWN_vertformat_attr_add(format, "texCoord", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
for (view = 0; view < 2; view ++) {
drawdata = BLI_findlink(&win->drawdata, (view * 2) + 1);
triple = drawdata->triple;
@@ -203,26 +234,33 @@ static void wm_method_draw_stereo3d_sidebyside(wmWindow *win)
halfy /= triple->y;
}
- glEnable(triple->target);
+ /* TODO: if target is always same for both eyes, bind program & set uniform before loop */
+ immBindBuiltinProgram((triple->target == GL_TEXTURE_2D) ? GPU_SHADER_3D_IMAGE_MODULATE_ALPHA : GPU_SHADER_3D_IMAGE_RECT_MODULATE_ALPHA);
+
glBindTexture(triple->target, triple->bind);
- glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
- glBegin(GL_QUADS);
- glTexCoord2f(halfx, halfy);
- glVertex2f(soffx, 0);
+ immUniform1f("alpha", 1.0f);
+ immUniform1i("image", 0); /* default GL_TEXTURE0 unit */
- glTexCoord2f(ratiox + halfx, halfy);
- glVertex2f(soffx + (sizex * 0.5f), 0);
+ immBegin(GWN_PRIM_TRI_FAN, 4);
- glTexCoord2f(ratiox + halfx, ratioy + halfy);
- glVertex2f(soffx + (sizex * 0.5f), sizey);
+ immAttrib2f(texcoord, halfx, halfy);
+ immVertex2f(pos, soffx, 0.0f);
- glTexCoord2f(halfx, ratioy + halfy);
- glVertex2f(soffx, sizey);
- glEnd();
+ immAttrib2f(texcoord, ratiox + halfx, halfy);
+ immVertex2f(pos, soffx + (sizex * 0.5f), 0.0f);
+ immAttrib2f(texcoord, ratiox + halfx, ratioy + halfy);
+ immVertex2f(pos, soffx + (sizex * 0.5f), sizey);
+
+ immAttrib2f(texcoord, halfx, ratioy + halfy);
+ immVertex2f(pos, soffx, sizey);
+
+ immEnd();
+
+ /* TODO: if target is always same for both eyes, unbind program & texture target after loop */
glBindTexture(triple->target, 0);
- glDisable(triple->target);
+ immUnbindProgram();
}
}
@@ -234,6 +272,10 @@ static void wm_method_draw_stereo3d_topbottom(wmWindow *win)
int view;
int soffy;
+ Gwn_VertFormat *format = immVertexFormat();
+ unsigned int texcoord = GWN_vertformat_attr_add(format, "texCoord", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+ unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT);
+
for (view = 0; view < 2; view ++) {
drawdata = BLI_findlink(&win->drawdata, (view * 2) + 1);
triple = drawdata->triple;
@@ -262,26 +304,33 @@ static void wm_method_draw_stereo3d_topbottom(wmWindow *win)
halfy /= triple->y;
}
- glEnable(triple->target);
+ /* TODO: if target is always same for both eyes, bind program & set uniforms before loop */
+ immBindBuiltinProgram((triple->target == GL_TEXTURE_2D) ? GPU_SHADER_3D_IMAGE_MODULATE_ALPHA : GPU_SHADER_3D_IMAGE_RECT_MODULATE_ALPHA);
+
glBindTexture(triple->target, triple->bind);
- glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
- glBegin(GL_QUADS);
- glTexCoord2f(halfx, halfy);
- glVertex2f(0, soffy);
+ immUniform1f("alpha", 1.0f);
+ immUniform1i("image", 0); /* default GL_TEXTURE0 unit */
- glTexCoord2f(ratiox + halfx, halfy);
- glVertex2f(sizex, soffy);
+ immBegin(GWN_PRIM_TRI_FAN, 4);
- glTexCoord2f(ratiox + halfx, ratioy + halfy);
- glVertex2f(sizex, soffy + (sizey * 0.5f));
+ immAttrib2f(texcoord, halfx, halfy);
+ immVertex2f(pos, 0.0f, soffy);
- glTexCoord2f(halfx, ratioy + halfy);
- glVertex2f(0, soffy + (sizey * 0.5f));
- glEnd();
+ immAttrib2f(texcoord, ratiox + halfx, halfy);
+ immVertex2f(pos, sizex, soffy);
+ immAttrib2f(texcoord, ratiox + halfx, ratioy + halfy);
+ immVertex2f(pos, sizex, soffy + (sizey * 0.5f));
+
+ immAttrib2f(texcoord, halfx, ratioy + halfy);
+ immVertex2f(pos, 0.0f, soffy + (sizey * 0.5f));
+
+ immEnd();
+
+ /* TODO: if target is always same for both eyes, unbind program & texture target after loop */
+ immUnbindProgram();
glBindTexture(triple->target, 0);
- glDisable(triple->target);
}
}
@@ -310,9 +359,9 @@ void wm_method_draw_stereo3d(const bContext *UNUSED(C), wmWindow *win)
static bool wm_stereo3d_quadbuffer_supported(void)
{
- int gl_stereo = 0;
- glGetBooleanv(GL_STEREO, (GLboolean *)&gl_stereo);
- return gl_stereo != 0;
+ GLboolean stereo = GL_FALSE;
+ glGetBooleanv(GL_STEREO, &stereo);
+ return stereo == GL_TRUE;
}
static bool wm_stereo3d_is_fullscreen_required(eStereoDisplayMode stereo_display)
@@ -324,7 +373,8 @@ static bool wm_stereo3d_is_fullscreen_required(eStereoDisplayMode stereo_display
bool WM_stereo3d_enabled(wmWindow *win, bool skip_stereo3d_check)
{
- bScreen *screen = win->screen;
+ const bScreen *screen = WM_window_get_active_screen(win);
+ const Scene *scene = WM_window_get_active_scene(win);
/* some 3d methods change the window arrangement, thus they shouldn't
* toggle on/off just because there is no 3d elements being drawn */
@@ -332,7 +382,7 @@ bool WM_stereo3d_enabled(wmWindow *win, bool skip_stereo3d_check)
return GHOST_GetWindowState(win->ghostwin) == GHOST_kWindowStateFullScreen;
}
- if ((skip_stereo3d_check == false) && (ED_screen_stereo3d_required(screen) == false)) {
+ if ((skip_stereo3d_check == false) && (ED_screen_stereo3d_required(screen, scene) == false)) {
return false;
}
@@ -459,7 +509,7 @@ int wm_stereo3d_set_exec(bContext *C, wmOperator *op)
prev_display_mode != win_src->stereo3d_format->display_mode)
{
/* in case the hardward supports pageflip but not the display */
- if ((win_dst = wm_window_copy_test(C, win_src))) {
+ if ((win_dst = wm_window_copy_test(C, win_src, false))) {
/* pass */
}
else {
@@ -469,14 +519,16 @@ int wm_stereo3d_set_exec(bContext *C, wmOperator *op)
}
}
else if (win_src->stereo3d_format->display_mode == S3D_DISPLAY_PAGEFLIP) {
- /* ED_screen_duplicate() can't handle other cases yet T44688 */
- if (win_src->screen->state != SCREENNORMAL) {
+ const bScreen *screen = WM_window_get_active_screen(win_src);
+
+ /* ED_workspace_layout_duplicate() can't handle other cases yet T44688 */
+ if (screen->state != SCREENNORMAL) {
BKE_report(op->reports, RPT_ERROR,
"Failed to switch to Time Sequential mode when in fullscreen");
ok = false;
}
/* pageflip requires a new window to be created with the proper OS flags */
- else if ((win_dst = wm_window_copy_test(C, win_src))) {
+ else if ((win_dst = wm_window_copy_test(C, win_src, false))) {
if (wm_stereo3d_quadbuffer_supported()) {
BKE_report(op->reports, RPT_INFO, "Quad-buffer window successfully created");
}
diff --git a/source/blender/windowmanager/intern/wm_subwindow.c b/source/blender/windowmanager/intern/wm_subwindow.c
index 458ac4a121a..1a8f71891c0 100644
--- a/source/blender/windowmanager/intern/wm_subwindow.c
+++ b/source/blender/windowmanager/intern/wm_subwindow.c
@@ -47,8 +47,7 @@
#include "BIF_gl.h"
-#include "GPU_extensions.h"
-#include "GPU_basic_shader.h"
+#include "GPU_matrix.h"
#include "WM_api.h"
#include "wm_subwindow.h"
@@ -142,15 +141,17 @@ void wm_subwindow_origin_get(wmWindow *win, int swinid, int *x, int *y)
static void wm_swin_matrix_get(wmWindow *win, wmSubWindow *swin, float mat[4][4])
{
+ const bScreen *screen = WM_window_get_active_screen(win);
+
/* used by UI, should find a better way to get the matrix there */
- if (swin->swinid == win->screen->mainwin) {
+ if (swin->swinid == screen->mainwin) {
int width, height;
wm_swin_size_get(swin, &width, &height);
orthographic_m4(mat, -GLA_PIXEL_OFS, (float)width - GLA_PIXEL_OFS, -GLA_PIXEL_OFS, (float)height - GLA_PIXEL_OFS, -100, 100);
}
else {
- glGetFloatv(GL_PROJECTION_MATRIX, (float *)mat);
+ gpuGetProjectionMatrix(mat);
}
}
void wm_subwindow_matrix_get(wmWindow *win, int swinid, float mat[4][4])
@@ -216,7 +217,7 @@ int wm_subwindow_open(wmWindow *win, const rcti *winrct, bool activate)
/* extra service */
wm_swin_size_get(swin, &width, &height);
wmOrtho2_pixelspace(width, height);
- glLoadIdentity();
+ gpuLoadIdentity();
}
return swin->swinid;
@@ -322,7 +323,7 @@ void wmSubWindowScissorSet(wmWindow *win, int swinid, const rcti *srct, bool src
glScissor(_curswin->winrct.xmin, _curswin->winrct.ymin, width, height);
wmOrtho2_pixelspace(width, height);
- glLoadIdentity();
+ gpuLoadIdentity();
glFlush();
}
@@ -333,31 +334,13 @@ void wmSubWindowSet(wmWindow *win, int swinid)
wmSubWindowScissorSet(win, swinid, NULL, true);
}
-void wmFrustum(float x1, float x2, float y1, float y2, float n, float f)
-{
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glFrustum(x1, x2, y1, y2, n, f);
- glMatrixMode(GL_MODELVIEW);
-}
-
-void wmOrtho(float x1, float x2, float y1, float y2, float n, float f)
-{
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
-
- glOrtho(x1, x2, y1, y2, n, f);
-
- glMatrixMode(GL_MODELVIEW);
-}
-
void wmOrtho2(float x1, float x2, float y1, float y2)
{
/* prevent opengl from generating errors */
if (x1 == x2) x2 += 1.0f;
if (y1 == y2) y2 += 1.0f;
- wmOrtho(x1, x2, y1, y2, -100, 100);
+ gpuOrtho(x1, x2, y1, y2, -100, 100);
}
static void wmOrtho2_offset(const float x, const float y, const float ofs)
diff --git a/source/blender/windowmanager/intern/wm_toolsystem.c b/source/blender/windowmanager/intern/wm_toolsystem.c
new file mode 100644
index 00000000000..5e000489ace
--- /dev/null
+++ b/source/blender/windowmanager/intern/wm_toolsystem.c
@@ -0,0 +1,107 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/windowmanager/intern/wm_toolsystem.c
+ * \ingroup wm
+ *
+ * Experimental tool-system>
+ */
+
+#include <string.h>
+
+#include "BLI_utildefines.h"
+#include "BLI_string.h"
+
+#include "DNA_ID.h"
+#include "DNA_scene_types.h"
+#include "DNA_windowmanager_types.h"
+#include "DNA_workspace_types.h"
+
+#include "BKE_context.h"
+#include "BKE_library.h"
+#include "BKE_main.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+void WM_toolsystem_unlink(bContext *C, WorkSpace *workspace)
+{
+ Main *bmain = CTX_data_main(C);
+ wmWindowManager *wm = bmain->wm.first;
+
+ if (workspace->tool.manipulator_group[0]) {
+ wmManipulatorGroupType *wgt = WM_manipulatorgrouptype_find(workspace->tool.manipulator_group, false);
+ if (wgt != NULL) {
+ bool found = false;
+
+ /* Check another workspace isn't using this tool. */
+ for (wmWindow *win = wm->windows.first; win; win = win->next) {
+ const WorkSpace *workspace_iter = WM_window_get_active_workspace(win);
+ if (workspace != workspace_iter) {
+ if (STREQ(workspace->tool.manipulator_group, workspace_iter->tool.manipulator_group)) {
+ found = true;
+ break;
+ }
+ }
+ }
+
+ if (!found) {
+ wmManipulatorMapType *mmap_type = WM_manipulatormaptype_ensure(&wgt->mmap_params);
+ WM_manipulatormaptype_group_unlink(C, bmain, mmap_type, wgt);
+ }
+ }
+ }
+}
+
+void WM_toolsystem_link(bContext *UNUSED(C), WorkSpace *workspace)
+{
+ if (workspace->tool.manipulator_group[0]) {
+ WM_manipulator_group_type_ensure(workspace->tool.manipulator_group);
+ }
+}
+
+void WM_toolsystem_set(bContext *C, const bToolDef *tool)
+{
+ WorkSpace *workspace = CTX_wm_workspace(C);
+
+ WM_toolsystem_unlink(C, workspace);
+
+ workspace->tool.index = tool->index;
+ workspace->tool.spacetype = tool->spacetype;
+
+ if (&workspace->tool != tool) {
+ BLI_strncpy(workspace->tool.keymap, tool->keymap, sizeof(tool->keymap));
+ BLI_strncpy(workspace->tool.manipulator_group, tool->manipulator_group, sizeof(tool->manipulator_group));
+ workspace->tool.spacetype = tool->spacetype;
+ }
+
+ WM_toolsystem_link(C, workspace);
+}
+
+void WM_toolsystem_init(bContext *C)
+{
+ Main *bmain = CTX_data_main(C);
+ wmWindowManager *wm = bmain->wm.first;
+
+ for (wmWindow *win = wm->windows.first; win; win = win->next) {
+ WorkSpace *workspace = WM_window_get_active_workspace(win);
+ WM_toolsystem_link(C, workspace);
+ }
+}
diff --git a/source/blender/windowmanager/intern/wm_tooltip.c b/source/blender/windowmanager/intern/wm_tooltip.c
index 86ca95ef377..83d620d1522 100644
--- a/source/blender/windowmanager/intern/wm_tooltip.c
+++ b/source/blender/windowmanager/intern/wm_tooltip.c
@@ -41,7 +41,7 @@ void WM_tooltip_timer_init(
bContext *C, wmWindow *win, ARegion *ar,
wmTooltipInitFn init)
{
- bScreen *screen = win->screen;
+ bScreen *screen = WM_window_get_active_screen(win);
wmWindowManager *wm = CTX_wm_manager(C);
if (screen->tool_tip == NULL) {
screen->tool_tip = MEM_callocN(sizeof(*screen->tool_tip), __func__);
@@ -54,7 +54,7 @@ void WM_tooltip_timer_init(
void WM_tooltip_timer_clear(bContext *C, wmWindow *win)
{
wmWindowManager *wm = CTX_wm_manager(C);
- bScreen *screen = win->screen;
+ bScreen *screen = WM_window_get_active_screen(win);
if (screen->tool_tip != NULL) {
if (screen->tool_tip->timer != NULL) {
WM_event_remove_timer(wm, win, screen->tool_tip->timer);
@@ -66,7 +66,7 @@ void WM_tooltip_timer_clear(bContext *C, wmWindow *win)
void WM_tooltip_clear(bContext *C, wmWindow *win)
{
WM_tooltip_timer_clear(C, win);
- bScreen *screen = win->screen;
+ bScreen *screen = WM_window_get_active_screen(win);
if (screen->tool_tip != NULL) {
if (screen->tool_tip->region) {
UI_tooltip_free(C, screen, screen->tool_tip->region);
@@ -80,7 +80,7 @@ void WM_tooltip_clear(bContext *C, wmWindow *win)
void WM_tooltip_init(bContext *C, wmWindow *win)
{
WM_tooltip_timer_clear(C, win);
- bScreen *screen = win->screen;
+ bScreen *screen = WM_window_get_active_screen(win);
if (screen->tool_tip->region) {
UI_tooltip_free(C, screen, screen->tool_tip->region);
screen->tool_tip->region = NULL;
@@ -95,7 +95,7 @@ void WM_tooltip_init(bContext *C, wmWindow *win)
void WM_tooltip_refresh(bContext *C, wmWindow *win)
{
WM_tooltip_timer_clear(C, win);
- bScreen *screen = win->screen;
+ bScreen *screen = WM_window_get_active_screen(win);
if (screen->tool_tip != NULL) {
if (screen->tool_tip->region) {
UI_tooltip_free(C, screen, screen->tool_tip->region);
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index bf3d28e39e0..519e0500b73 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -38,6 +38,7 @@
#include "DNA_listBase.h"
#include "DNA_screen_types.h"
#include "DNA_windowmanager_types.h"
+#include "DNA_workspace_types.h"
#include "MEM_guardedalloc.h"
@@ -51,12 +52,16 @@
#include "BKE_blender.h"
#include "BKE_context.h"
+#include "BKE_icons.h"
#include "BKE_library.h"
#include "BKE_global.h"
#include "BKE_main.h"
-
+#include "BKE_screen.h"
+#include "BKE_workspace.h"
#include "RNA_access.h"
+#include "RNA_define.h"
+#include "RNA_enum_types.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -66,19 +71,23 @@
#include "wm_subwindow.h"
#include "wm_event_system.h"
+#include "ED_scene.h"
#include "ED_screen.h"
#include "ED_fileselect.h"
#include "UI_interface.h"
+#include "UI_interface_icons.h"
#include "PIL_time.h"
#include "GPU_draw.h"
#include "GPU_extensions.h"
#include "GPU_init_exit.h"
-#include "GPU_glew.h"
+#include "GPU_immediate.h"
#include "BLF_api.h"
+#include "UI_resources.h"
+
/* for assert */
#ifndef NDEBUG
# include "BLI_threads.h"
@@ -213,6 +222,7 @@ void wm_window_free(bContext *C, wmWindowManager *wm, wmWindow *win)
wm_ghostwindow_destroy(win);
+ BKE_workspace_instance_hook_free(G.main, win->workspace_hook);
MEM_freeN(win->stereo3d_format);
MEM_freeN(win);
@@ -233,35 +243,57 @@ static int find_free_winid(wmWindowManager *wm)
/* don't change context itself */
wmWindow *wm_window_new(bContext *C)
{
+ Main *bmain = CTX_data_main(C);
wmWindowManager *wm = CTX_wm_manager(C);
wmWindow *win = MEM_callocN(sizeof(wmWindow), "window");
-
+
BLI_addtail(&wm->windows, win);
win->winid = find_free_winid(wm);
win->stereo3d_format = MEM_callocN(sizeof(Stereo3dFormat), "Stereo 3D Format (window)");
+ win->workspace_hook = BKE_workspace_instance_hook_create(bmain);
return win;
}
+/**
+ * A higher level version of copy that tests the new window can be added.
+ */
+static wmWindow *wm_window_new_test(bContext *C)
+{
+ wmWindow *win = wm_window_new(C);
+
+ WM_check(C);
+
+ if (win->ghostwin) {
+ WM_event_add_notifier(C, NC_WINDOW | NA_ADDED, NULL);
+ return win;
+ }
+ else {
+ wmWindowManager *wm = CTX_wm_manager(C);
+ wm_window_close(C, wm, win);
+ return NULL;
+ }
+}
/* part of wm_window.c api */
-wmWindow *wm_window_copy(bContext *C, wmWindow *win_src)
+wmWindow *wm_window_copy(bContext *C, wmWindow *win_src, const bool duplicate_layout)
{
wmWindow *win_dst = wm_window_new(C);
-
+ WorkSpace *workspace = WM_window_get_active_workspace(win_src);
+ WorkSpaceLayout *layout_old = WM_window_get_active_layout(win_src);
+ Scene *scene = WM_window_get_active_scene(win_src);
+ WorkSpaceLayout *layout_new;
+
win_dst->posx = win_src->posx + 10;
win_dst->posy = win_src->posy;
win_dst->sizex = win_src->sizex;
win_dst->sizey = win_src->sizey;
-
- /* duplicate assigns to window */
- win_dst->screen = ED_screen_duplicate(win_dst, win_src->screen);
- BLI_strncpy(win_dst->screenname, win_dst->screen->id.name + 2, sizeof(win_dst->screenname));
- win_dst->screen->winid = win_dst->winid;
- win_dst->screen->do_refresh = true;
- win_dst->screen->do_draw = true;
+ win_dst->scene = scene;
+ WM_window_set_active_workspace(win_dst, workspace);
+ layout_new = duplicate_layout ? ED_workspace_layout_duplicate(workspace, layout_old, win_dst) : layout_old;
+ WM_window_set_active_layout(win_dst, workspace, layout_new);
win_dst->drawmethod = U.wmdrawmethod;
@@ -276,12 +308,12 @@ wmWindow *wm_window_copy(bContext *C, wmWindow *win_src)
* A higher level version of copy that tests the new window can be added.
* (called from the operator directly)
*/
-wmWindow *wm_window_copy_test(bContext *C, wmWindow *win_src)
+wmWindow *wm_window_copy_test(bContext *C, wmWindow *win_src, const bool duplicate_layout)
{
wmWindowManager *wm = CTX_wm_manager(C);
wmWindow *win_dst;
- win_dst = wm_window_copy(C, win_src);
+ win_dst = wm_window_copy(C, win_src, duplicate_layout);
WM_check(C);
@@ -305,7 +337,7 @@ void wm_window_close(bContext *C, wmWindowManager *wm, wmWindow *win)
for (tmpwin = wm->windows.first; tmpwin; tmpwin = tmpwin->next) {
if (tmpwin == win)
continue;
- if (tmpwin->screen->temp == 0)
+ if (WM_window_is_temp_screen(tmpwin) == false)
break;
}
@@ -324,8 +356,10 @@ void wm_window_close(bContext *C, wmWindowManager *wm, wmWindow *win)
WM_exit(C);
}
else {
- bScreen *screen = win->screen;
-
+ bScreen *screen = WM_window_get_active_screen(win);
+ WorkSpace *workspace = WM_window_get_active_workspace(win);
+ WorkSpaceLayout *layout = BKE_workspace_active_layout_get(win->workspace_hook);
+
BLI_remlink(&wm->windows, win);
wm_draw_window_clear(win);
@@ -336,8 +370,8 @@ void wm_window_close(bContext *C, wmWindowManager *wm, wmWindow *win)
/* for regular use this will _never_ be NULL,
* however we may be freeing an improperly initialized window. */
- if (win->screen) {
- ED_screen_exit(C, win, win->screen);
+ if (screen) {
+ ED_screen_exit(C, win, screen);
}
wm_window_free(C, wm, win);
@@ -345,14 +379,16 @@ void wm_window_close(bContext *C, wmWindowManager *wm, wmWindow *win)
/* if temp screen, delete it after window free (it stops jobs that can access it) */
if (screen && screen->temp) {
Main *bmain = CTX_data_main(C);
- BKE_libblock_free(bmain, screen);
+
+ BLI_assert(BKE_workspace_layout_screen_get(layout) == screen);
+ BKE_workspace_layout_remove(bmain, workspace, layout);
}
- }
+ }
}
void wm_window_title(wmWindowManager *wm, wmWindow *win)
{
- if (win->screen && win->screen->temp) {
+ if (WM_window_is_temp_screen(win)) {
/* nothing to do for 'temp' windows,
* because WM_window_open_temp always sets window title */
}
@@ -658,8 +694,10 @@ wmWindow *WM_window_open(bContext *C, const rcti *rect)
*/
wmWindow *WM_window_open_temp(bContext *C, int x, int y, int sizex, int sizey, int type)
{
+ Main *bmain = CTX_data_main(C);
wmWindow *win_prev = CTX_wm_window(C);
wmWindow *win;
+ bScreen *screen;
ScrArea *sa;
Scene *scene = CTX_data_scene(C);
const char *title;
@@ -683,7 +721,7 @@ wmWindow *WM_window_open_temp(bContext *C, int x, int y, int sizex, int sizey, i
/* test if we have a temp screen already */
for (win = CTX_wm_manager(C)->windows.first; win; win = win->next)
- if (win->screen->temp)
+ if (WM_window_is_temp_screen(win))
break;
/* add new window? */
@@ -694,6 +732,8 @@ wmWindow *WM_window_open_temp(bContext *C, int x, int y, int sizex, int sizey, i
win->posy = rect.ymin;
}
+ screen = WM_window_get_active_screen(win);
+
win->sizex = BLI_rcti_size_x(&rect);
win->sizey = BLI_rcti_size_y(&rect);
@@ -701,19 +741,27 @@ wmWindow *WM_window_open_temp(bContext *C, int x, int y, int sizex, int sizey, i
wm_window_set_size(win, win->sizex, win->sizey);
wm_window_raise(win);
}
-
- if (win->screen == NULL) {
- /* add new screen */
- win->screen = ED_screen_add(win, scene, "temp");
+
+ if (WM_window_get_active_workspace(win) == NULL) {
+ WorkSpace *workspace = WM_window_get_active_workspace(win_prev);
+ WM_window_set_active_workspace(win, workspace);
}
- else {
- /* switch scene for rendering */
- if (win->screen->scene != scene)
- ED_screen_set_scene(C, win->screen, scene);
+
+ if (screen == NULL) {
+ /* add new screen layout */
+ WorkSpace *workspace = WM_window_get_active_workspace(win);
+ WorkSpaceLayout *layout = ED_workspace_layout_add(workspace, win, "temp");
+
+ screen = BKE_workspace_layout_screen_get(layout);
+ WM_window_set_active_layout(win, workspace, layout);
}
- win->screen->temp = 1;
-
+ if (WM_window_get_active_scene(win) != scene) {
+ WM_window_change_active_scene(bmain, C, win, scene);
+ }
+
+ screen->temp = 1;
+
/* make window active, and validate/resize */
CTX_wm_window_set(C, win);
WM_check(C);
@@ -725,7 +773,7 @@ wmWindow *WM_window_open_temp(bContext *C, int x, int y, int sizex, int sizey, i
*/
/* ensure it shows the right spacetype editor */
- sa = win->screen->areabase.first;
+ sa = screen->areabase.first;
CTX_wm_area_set(C, sa);
if (type == WM_WINDOW_RENDER) {
@@ -735,7 +783,7 @@ wmWindow *WM_window_open_temp(bContext *C, int x, int y, int sizex, int sizey, i
ED_area_newspace(C, sa, SPACE_USERPREF, false);
}
- ED_screen_set(C, win->screen);
+ ED_screen_change(C, screen);
ED_screen_refresh(CTX_wm_manager(C), win); /* test scale */
if (sa->spacetype == SPACE_IMAGE)
@@ -771,17 +819,107 @@ int wm_window_close_exec(bContext *C, wmOperator *UNUSED(op))
return OPERATOR_FINISHED;
}
-/* operator callback */
-int wm_window_duplicate_exec(bContext *C, wmOperator *UNUSED(op))
+static WorkSpaceLayout *wm_window_new_find_layout(wmOperator *op, WorkSpace *workspace)
+{
+ ListBase *listbase = BKE_workspace_layouts_get(workspace);
+ const int layout_id = RNA_enum_get(op->ptr, "screen");
+ int i = 0;
+
+ for (WorkSpaceLayout *layout = listbase->first; layout; layout = layout->next) {
+ if (i++ == layout_id) {
+ return layout;
+ }
+ }
+
+ BLI_assert(0);
+ return NULL;
+}
+
+/* new window operator callback */
+int wm_window_new_exec(bContext *C, wmOperator *op)
{
wmWindow *win_src = CTX_wm_window(C);
- bool ok;
+ WorkSpace *workspace = WM_window_get_active_workspace(win_src);
+ WorkSpaceLayout *layout_new = wm_window_new_find_layout(op, workspace);
+ bScreen *screen_new = BKE_workspace_layout_screen_get(layout_new);
+ wmWindow *win_dst;
- ok = (wm_window_copy_test(C, win_src) != NULL);
+ if ((win_dst = wm_window_new_test(C))) {
+ if (screen_new->winid) {
+ /* layout/screen is already used, duplicate it */
+ layout_new = ED_workspace_layout_duplicate(workspace, layout_new, win_dst);
+ screen_new = BKE_workspace_layout_screen_get(layout_new);
+ }
+ /* New window with a different screen but same workspace */
+ WM_window_set_active_workspace(win_dst, workspace);
+ WM_window_set_active_screen(win_dst, workspace, screen_new);
+ win_dst->scene = win_src->scene;
+ screen_new->winid = win_dst->winid;
+ CTX_wm_window_set(C, win_dst);
+ ED_screen_refresh(CTX_wm_manager(C), win_dst);
+ }
- return ok ? OPERATOR_FINISHED : OPERATOR_CANCELLED;
+ return (win_dst != NULL) ? OPERATOR_FINISHED : OPERATOR_CANCELLED;
}
+int wm_window_new_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
+{
+ wmWindow *win = CTX_wm_window(C);
+ WorkSpace *workspace = WM_window_get_active_workspace(win);
+ ListBase *listbase = BKE_workspace_layouts_get(workspace);
+
+ if (BLI_listbase_count_ex(listbase, 2) == 1) {
+ RNA_enum_set(op->ptr, "screen", 0);
+ return wm_window_new_exec(C, op);
+ }
+ else {
+ return WM_enum_search_invoke_previews(C, op, 6, 2);
+ }
+}
+
+const EnumPropertyItem *wm_window_new_screen_itemf(
+ bContext *C, struct PointerRNA *UNUSED(ptr), struct PropertyRNA *UNUSED(prop), bool *r_free)
+{
+ if (C == NULL) {
+ return DummyRNA_NULL_items;
+ }
+ wmWindow *win = CTX_wm_window(C);
+ WorkSpace *workspace = WM_window_get_active_workspace(win);
+ ListBase *listbase = BKE_workspace_layouts_get(workspace);
+ EnumPropertyItem *item = NULL;
+ EnumPropertyItem tmp = {0, "", 0, "", ""};
+ int value = 0, totitem = 0;
+ int count_act_screens = 0;
+ /* XXX setting max number of windows to 20. We'd need support
+ * for dynamic strings in EnumPropertyItem.name to avoid this. */
+ static char active_screens[20][MAX_NAME + 12];
+
+ for (WorkSpaceLayout *layout = listbase->first; layout; layout = layout->next) {
+ bScreen *screen = BKE_workspace_layout_screen_get(layout);
+ const char *layout_name = BKE_workspace_layout_name_get(layout);
+
+ if (screen->winid) {
+ BLI_snprintf(active_screens[count_act_screens], sizeof(*active_screens), "%s (Duplicate)", layout_name);
+ tmp.name = active_screens[count_act_screens++];
+ }
+ else {
+ tmp.name = layout_name;
+ }
+
+ tmp.value = value;
+ tmp.identifier = layout_name;
+ UI_id_icon_render(C, CTX_data_scene(C), &screen->id, true, false);
+ tmp.icon = BKE_icon_id_ensure(&screen->id);
+
+ RNA_enum_item_add(&item, &totitem, &tmp);
+ value++;
+ }
+
+ RNA_enum_item_end(&item, &totitem);
+ *r_free = true;
+
+ return item;
+}
/* fullscreen operator callback */
int wm_window_fullscreen_toggle_exec(bContext *C, wmOperator *UNUSED(op))
@@ -881,8 +1019,11 @@ void wm_window_make_drawable(wmWindowManager *wm, wmWindow *win)
if (G.debug & G_DEBUG_EVENTS) {
printf("%s: set drawable %d\n", __func__, win->winid);
}
+
+ immDeactivate();
GHOST_ActivateWindowDrawingContext(win->ghostwin);
-
+ immActivate();
+
/* this can change per window */
WM_window_set_dpi(win);
}
@@ -907,7 +1048,7 @@ static int ghost_event_proc(GHOST_EventHandle evt, GHOST_TUserDataPtr C_void_ptr
/* Ghost now can call this function for life resizes, but it should return if WM didn't initialize yet.
* Can happen on file read (especially full size window) */
- if ((wm->initialized & WM_INIT_WINDOW) == 0) {
+ if ((wm->initialized & WM_WINDOW_IS_INITIALIZED) == 0) {
return 1;
}
if (!ghostwin) {
@@ -1081,7 +1222,7 @@ static int ghost_event_proc(GHOST_EventHandle evt, GHOST_TUserDataPtr C_void_ptr
/* stop screencast if resize */
if (type == GHOST_kEventWindowSize) {
- WM_jobs_stop(wm, win->screen, NULL);
+ WM_jobs_stop(wm, WM_window_get_active_screen(win), NULL);
}
WM_window_set_dpi(win);
@@ -1116,6 +1257,8 @@ static int ghost_event_proc(GHOST_EventHandle evt, GHOST_TUserDataPtr C_void_ptr
win->posx != posx ||
win->posy != posy)
{
+ const bScreen *screen = WM_window_get_active_screen(win);
+
win->sizex = sizex;
win->sizey = sizey;
win->posx = posx;
@@ -1152,6 +1295,7 @@ static int ghost_event_proc(GHOST_EventHandle evt, GHOST_TUserDataPtr C_void_ptr
wm_window_make_drawable(wm, win);
wm_draw_window_clear(win);
+ BKE_icon_changed(screen->id.icon_id);
WM_event_add_notifier(C, NC_SCREEN | NA_EDITED, NULL);
WM_event_add_notifier(C, NC_WINDOW | NA_EDITED, NULL);
@@ -1263,6 +1407,8 @@ static int ghost_event_proc(GHOST_EventHandle evt, GHOST_TUserDataPtr C_void_ptr
WM_window_set_dpi(win);
if (U.pixelsize != prev_pixelsize) {
+ BKE_icon_changed(WM_window_get_active_screen(win)->id.icon_id);
+
// close all popups since they are positioned with the pixel
// size baked in and it's difficult to correct them
wmWindow *oldWindow = CTX_wm_window(C);
@@ -1770,6 +1916,108 @@ bool WM_window_is_fullscreen(wmWindow *win)
return win->windowstate == GHOST_kWindowStateFullScreen;
}
+/**
+ * Some editor data may need to be synced with scene data (3D View camera and layers).
+ * This function ensures data is synced for editors in visible workspaces and their visible layouts.
+ */
+void WM_windows_scene_data_sync(const ListBase *win_lb, Scene *scene)
+{
+ for (wmWindow *win = win_lb->first; win; win = win->next) {
+ if (WM_window_get_active_scene(win) == scene) {
+ ED_workspace_scene_data_sync(win->workspace_hook, scene);
+ }
+ }
+}
+
+Scene *WM_windows_scene_get_from_screen(const wmWindowManager *wm, const bScreen *screen)
+{
+ for (wmWindow *win = wm->windows.first; win; win = win->next) {
+ if (WM_window_get_active_screen(win) == screen) {
+ return WM_window_get_active_scene(win);
+ }
+ }
+
+ return NULL;
+}
+
+WorkSpace *WM_windows_workspace_get_from_screen(const wmWindowManager *wm, const bScreen *screen)
+{
+ for (wmWindow *win = wm->windows.first; win; win = win->next) {
+ if (WM_window_get_active_screen(win) == screen) {
+ return WM_window_get_active_workspace(win);
+ }
+ }
+ return NULL;
+}
+
+eObjectMode WM_windows_object_mode_get(const struct wmWindowManager *wm)
+{
+ eObjectMode object_mode = 0;
+ for (wmWindow *win = wm->windows.first; win; win = win->next) {
+ const WorkSpace *workspace = BKE_workspace_active_get(win->workspace_hook);
+ if (workspace != NULL) {
+ object_mode |= workspace->object_mode;
+ }
+ }
+ return object_mode;
+}
+
+Scene *WM_window_get_active_scene(const wmWindow *win)
+{
+ return win->scene;
+}
+
+/**
+ * \warning Only call outside of area/region loops
+ */
+void WM_window_change_active_scene(Main *bmain, bContext *C, wmWindow *win, Scene *scene_new)
+{
+ const bScreen *screen = WM_window_get_active_screen(win);
+
+ ED_scene_exit(C);
+ win->scene = scene_new;
+ ED_scene_changed_update(bmain, C, scene_new, screen);
+}
+
+WorkSpace *WM_window_get_active_workspace(const wmWindow *win)
+{
+ return BKE_workspace_active_get(win->workspace_hook);
+}
+void WM_window_set_active_workspace(wmWindow *win, WorkSpace *workspace)
+{
+ BKE_workspace_active_set(win->workspace_hook, workspace);
+}
+
+WorkSpaceLayout *WM_window_get_active_layout(const wmWindow *win)
+{
+ const WorkSpace *workspace = WM_window_get_active_workspace(win);
+ return (LIKELY(workspace != NULL) ? BKE_workspace_active_layout_get(win->workspace_hook) : NULL);
+}
+void WM_window_set_active_layout(wmWindow *win, WorkSpace *workspace, WorkSpaceLayout *layout)
+{
+ BKE_workspace_hook_layout_for_workspace_set(win->workspace_hook, workspace, layout);
+}
+
+/**
+ * Get the active screen of the active workspace in \a win.
+ */
+bScreen *WM_window_get_active_screen(const wmWindow *win)
+{
+ const WorkSpace *workspace = WM_window_get_active_workspace(win);
+ /* May be NULL in rare cases like closing Blender */
+ return (LIKELY(workspace != NULL) ? BKE_workspace_active_screen_get(win->workspace_hook) : NULL);
+}
+void WM_window_set_active_screen(wmWindow *win, WorkSpace *workspace, bScreen *screen)
+{
+ BKE_workspace_active_screen_set(win->workspace_hook, workspace, screen);
+}
+
+bool WM_window_is_temp_screen(const wmWindow *win)
+{
+ const bScreen *screen = WM_window_get_active_screen(win);
+ return (screen && screen->temp != 0);
+}
+
#ifdef WITH_INPUT_IME
/* note: keep in mind wm_window_IME_begin is also used to reposition the IME window */
diff --git a/source/blender/windowmanager/manipulators/WM_manipulator_api.h b/source/blender/windowmanager/manipulators/WM_manipulator_api.h
new file mode 100644
index 00000000000..53bee9c6775
--- /dev/null
+++ b/source/blender/windowmanager/manipulators/WM_manipulator_api.h
@@ -0,0 +1,334 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2016 Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/windowmanager/manipulators/WM_manipulator_api.h
+ * \ingroup wm
+ *
+ * \name Manipulator API
+ * \brief API for external use of wmManipulator types.
+ *
+ * Only included in WM_api.h
+ */
+
+
+#ifndef __WM_MANIPULATOR_API_H__
+#define __WM_MANIPULATOR_API_H__
+
+struct ARegion;
+struct GHashIterator;
+struct IDProperty;
+struct Main;
+struct PropertyRNA;
+struct wmKeyConfig;
+struct wmManipulator;
+struct wmManipulatorProperty;
+struct wmManipulatorPropertyType;
+struct wmManipulatorType;
+struct wmManipulatorGroup;
+struct wmManipulatorGroupType;
+struct wmManipulatorMap;
+struct wmManipulatorMapType;
+struct wmManipulatorMapType_Params;
+struct wmMsgSubscribeKey;
+struct wmMsgSubscribeValue;
+
+#include "wm_manipulator_fn.h"
+
+/* -------------------------------------------------------------------- */
+/* wmManipulator */
+
+struct wmManipulator *WM_manipulator_new_ptr(
+ const struct wmManipulatorType *wt, struct wmManipulatorGroup *mgroup,
+ struct PointerRNA *properties);
+struct wmManipulator *WM_manipulator_new(
+ const char *idname, struct wmManipulatorGroup *mgroup,
+ struct PointerRNA *properties);
+void WM_manipulator_free(struct wmManipulator *mpr);
+void WM_manipulator_unlink(
+ ListBase *manipulatorlist, struct wmManipulatorMap *mmap, struct wmManipulator *mpr,
+ struct bContext *C);
+
+void WM_manipulator_name_set(struct wmManipulatorGroup *mgroup, struct wmManipulator *mpr, const char *name);
+
+bool WM_manipulator_select_unlink(struct wmManipulatorMap *mmap, struct wmManipulator *mpr);
+bool WM_manipulator_select_set(struct wmManipulatorMap *mmap, struct wmManipulator *mpr, bool select);
+void WM_manipulator_highlight_set(struct wmManipulatorMap *mmap, struct wmManipulator *mpr);
+
+struct wmManipulatorOpElem *WM_manipulator_operator_get(
+ struct wmManipulator *mpr, int part_index);
+struct PointerRNA *WM_manipulator_operator_set(
+ struct wmManipulator *mpr, int part_index,
+ struct wmOperatorType *ot, struct IDProperty *properties);
+
+/* callbacks */
+void WM_manipulator_set_fn_custom_modal(struct wmManipulator *mpr, wmManipulatorFnModal fn);
+
+void WM_manipulator_set_matrix_location(
+ struct wmManipulator *mpr, const float origin[3]);
+void WM_manipulator_set_matrix_rotation_from_z_axis(
+ struct wmManipulator *mpr, const float z_axis[3]);
+void WM_manipulator_set_matrix_rotation_from_yz_axis(
+ struct wmManipulator *mpr, const float y_axis[3], const float z_axis[3]);
+
+void WM_manipulator_set_matrix_offset_location(
+ struct wmManipulator *mpr, const float origin[3]);
+void WM_manipulator_set_matrix_offset_rotation_from_z_axis(
+ struct wmManipulator *mpr, const float z_axis[3]);
+void WM_manipulator_set_matrix_offset_rotation_from_yz_axis(
+ struct wmManipulator *mpr, const float y_axis[3], const float z_axis[3]);
+
+void WM_manipulator_set_flag(struct wmManipulator *mpr, const int flag, const bool enable);
+void WM_manipulator_set_scale(struct wmManipulator *mpr, float scale);
+void WM_manipulator_set_line_width(struct wmManipulator *mpr, const float line_width);
+
+void WM_manipulator_get_color(const struct wmManipulator *mpr, float color[4]);
+void WM_manipulator_set_color(struct wmManipulator *mpr, const float color[4]);
+void WM_manipulator_get_color_highlight(const struct wmManipulator *mpr, float color_hi[4]);
+void WM_manipulator_set_color_highlight(struct wmManipulator *mpr, const float color[4]);
+
+/**
+ * Leaving values NULL use values from #wmManipulator.
+ */
+struct WM_ManipulatorMatrixParams {
+ const float(*matrix_space)[4];
+ const float(*matrix_basis)[4];
+ const float(*matrix_offset)[4];
+ const float *scale_final;
+};
+
+void WM_manipulator_calc_matrix_final_params(
+ const struct wmManipulator *mpr, const struct WM_ManipulatorMatrixParams *params,
+ float r_mat[4][4]);
+
+void WM_manipulator_calc_matrix_final(const struct wmManipulator *mpr, float r_mat[4][4]);
+
+/* properties */
+void WM_manipulator_properties_create_ptr(struct PointerRNA *ptr, struct wmManipulatorType *wt);
+void WM_manipulator_properties_create(struct PointerRNA *ptr, const char *opstring);
+void WM_manipulator_properties_alloc(struct PointerRNA **ptr, struct IDProperty **properties, const char *wtstring);
+void WM_manipulator_properties_sanitize(struct PointerRNA *ptr, const bool no_context);
+bool WM_manipulator_properties_default(struct PointerRNA *ptr, const bool do_update);
+void WM_manipulator_properties_reset(struct wmManipulator *op);
+void WM_manipulator_properties_clear(struct PointerRNA *ptr);
+void WM_manipulator_properties_free(struct PointerRNA *ptr);
+
+
+/* wm_manipulator_type.c */
+const struct wmManipulatorType *WM_manipulatortype_find(const char *idname, bool quiet);
+void WM_manipulatortype_append(void (*wtfunc)(struct wmManipulatorType *));
+void WM_manipulatortype_append_ptr(void (*mnpfunc)(struct wmManipulatorType *, void *), void *userdata);
+bool WM_manipulatortype_remove(struct bContext *C, struct Main *bmain, const char *idname);
+void WM_manipulatortype_remove_ptr(struct bContext *C, struct Main *bmain, struct wmManipulatorType *wt);
+void WM_manipulatortype_iter(struct GHashIterator *ghi);
+
+/* wm_manipulator_group_type.c */
+struct wmManipulatorGroupType *WM_manipulatorgrouptype_find(const char *idname, bool quiet);
+struct wmManipulatorGroupType *WM_manipulatorgrouptype_append(void (*wtfunc)(struct wmManipulatorGroupType *));
+struct wmManipulatorGroupType *WM_manipulatorgrouptype_append_ptr(void (*mnpfunc)(struct wmManipulatorGroupType *, void *), void *userdata);
+bool WM_manipulatorgrouptype_free(const char *idname);
+void WM_manipulatorgrouptype_free_ptr(struct wmManipulatorGroupType *wt);
+void WM_manipulatorgrouptype_iter(struct GHashIterator *ghi);
+
+struct wmManipulatorGroupTypeRef *WM_manipulatorgrouptype_append_and_link(
+ struct wmManipulatorMapType *mmap_type,
+ void (*wtfunc)(struct wmManipulatorGroupType *));
+
+/* wm_manipulator_map.c */
+
+/* Dynamic Updates (for RNA runtime registration) */
+void WM_manipulatorconfig_update_tag_init(struct wmManipulatorMapType *mmap_type, struct wmManipulatorGroupType *wgt);
+void WM_manipulatorconfig_update_tag_remove(struct wmManipulatorMapType *mmap_type, struct wmManipulatorGroupType *wgt);
+void WM_manipulatorconfig_update(struct Main *bmain);
+
+
+/* wm_maniulator_target_props.c */
+struct wmManipulatorProperty *WM_manipulator_target_property_array(struct wmManipulator *mpr);
+struct wmManipulatorProperty *WM_manipulator_target_property_at_index(
+ struct wmManipulator *mpr, int index);
+struct wmManipulatorProperty *WM_manipulator_target_property_find(
+ struct wmManipulator *mpr, const char *idname);
+
+void WM_manipulator_target_property_def_rna_ptr(
+ struct wmManipulator *mpr, const struct wmManipulatorPropertyType *mpr_prop_type,
+ struct PointerRNA *ptr, struct PropertyRNA *prop, int index);
+void WM_manipulator_target_property_def_rna(
+ struct wmManipulator *mpr, const char *idname,
+ struct PointerRNA *ptr, const char *propname, int index);
+
+void WM_manipulator_target_property_def_func_ptr(
+ struct wmManipulator *mpr, const struct wmManipulatorPropertyType *mpr_prop_type,
+ const struct wmManipulatorPropertyFnParams *params);
+void WM_manipulator_target_property_def_func(
+ struct wmManipulator *mpr, const char *idname,
+ const struct wmManipulatorPropertyFnParams *params);
+
+void WM_manipulator_target_property_clear_rna_ptr(
+ struct wmManipulator *mpr, const struct wmManipulatorPropertyType *mpr_prop_type);
+void WM_manipulator_target_property_clear_rna(
+ struct wmManipulator *mpr, const char *idname);
+
+bool WM_manipulator_target_property_is_valid_any(struct wmManipulator *mpr);
+bool WM_manipulator_target_property_is_valid(
+ const struct wmManipulatorProperty *mpr_prop);
+float WM_manipulator_target_property_value_get(
+ const struct wmManipulator *mpr, struct wmManipulatorProperty *mpr_prop);
+void WM_manipulator_target_property_value_set(
+ struct bContext *C, const struct wmManipulator *mpr, struct wmManipulatorProperty *mpr_prop,
+ const float value);
+
+void WM_manipulator_target_property_value_get_array(
+ const struct wmManipulator *mpr, struct wmManipulatorProperty *mpr_prop,
+ float *value);
+void WM_manipulator_target_property_value_set_array(
+ struct bContext *C, const struct wmManipulator *mpr, struct wmManipulatorProperty *mpr_prop,
+ const float *value);
+
+bool WM_manipulator_target_property_range_get(
+ const struct wmManipulator *mpr, struct wmManipulatorProperty *mpr_prop,
+ float range[2]);
+
+int WM_manipulator_target_property_array_length(
+ const struct wmManipulator *mpr, struct wmManipulatorProperty *mpr_prop);
+
+/* definitions */
+const struct wmManipulatorPropertyType *WM_manipulatortype_target_property_find(
+ const struct wmManipulatorType *wt, const char *idname);
+void WM_manipulatortype_target_property_def(
+ struct wmManipulatorType *wt, const char *idname, int data_type, int array_length);
+
+/* utilities */
+void WM_manipulator_do_msg_notify_tag_refresh(
+ struct bContext *C, struct wmMsgSubscribeKey *msg_key, struct wmMsgSubscribeValue *msg_val);
+void WM_manipulator_target_property_subscribe_all(
+ struct wmManipulator *mpr, struct wmMsgBus *mbus, struct ARegion *ar);
+
+/* -------------------------------------------------------------------- */
+/* wmManipulatorGroup */
+
+/* Callbacks for 'wmManipulatorGroupType.setup_keymap' */
+struct wmKeyMap *WM_manipulatorgroup_keymap_common(
+ const struct wmManipulatorGroupType *wgt, struct wmKeyConfig *config);
+struct wmKeyMap *WM_manipulatorgroup_keymap_common_select(
+ const struct wmManipulatorGroupType *wgt, struct wmKeyConfig *config);
+
+
+/* -------------------------------------------------------------------- */
+/* wmManipulatorMap */
+
+struct wmManipulatorMap *WM_manipulatormap_new_from_type(
+ const struct wmManipulatorMapType_Params *mmap_params);
+const struct ListBase *WM_manipulatormap_group_list(struct wmManipulatorMap *mmap);
+struct wmManipulatorGroup *WM_manipulatormap_group_find(
+ struct wmManipulatorMap *mmap,
+ const char *idname);
+struct wmManipulatorGroup *WM_manipulatormap_group_find_ptr(
+ struct wmManipulatorMap *mmap,
+ const struct wmManipulatorGroupType *wgt);
+void WM_manipulatormap_tag_refresh(struct wmManipulatorMap *mmap);
+void WM_manipulatormap_draw(
+ struct wmManipulatorMap *mmap, const struct bContext *C, const eWM_ManipulatorMapDrawStep drawstep);
+void WM_manipulatormap_add_handlers(struct ARegion *ar, struct wmManipulatorMap *mmap);
+bool WM_manipulatormap_select_all(struct bContext *C, struct wmManipulatorMap *mmap, const int action);
+bool WM_manipulatormap_cursor_set(const struct wmManipulatorMap *mmap, struct wmWindow *win);
+void WM_manipulatormap_message_subscribe(
+ struct bContext *C, struct wmManipulatorMap *mmap, struct ARegion *ar, struct wmMsgBus *mbus);
+bool WM_manipulatormap_is_any_selected(const struct wmManipulatorMap *mmap);
+bool WM_manipulatormap_minmax(
+ const struct wmManipulatorMap *mmap, bool use_hidden, bool use_select,
+ float r_min[3], float r_max[3]);
+
+struct ARegion *WM_manipulatormap_tooltip_init(
+ struct bContext *C, struct ARegion *ar, bool *r_exit_on_event);
+
+/* -------------------------------------------------------------------- */
+/* wmManipulatorMapType */
+
+struct wmManipulatorMapType *WM_manipulatormaptype_find(
+ const struct wmManipulatorMapType_Params *mmap_params);
+struct wmManipulatorMapType *WM_manipulatormaptype_ensure(
+ const struct wmManipulatorMapType_Params *mmap_params);
+
+struct wmManipulatorGroupTypeRef *WM_manipulatormaptype_group_find(
+ struct wmManipulatorMapType *mmap_type,
+ const char *idname);
+struct wmManipulatorGroupTypeRef *WM_manipulatormaptype_group_find_ptr(
+ struct wmManipulatorMapType *mmap_type,
+ const struct wmManipulatorGroupType *wgt);
+struct wmManipulatorGroupTypeRef *WM_manipulatormaptype_group_link(
+ struct wmManipulatorMapType *mmap_type,
+ const char *idname);
+struct wmManipulatorGroupTypeRef *WM_manipulatormaptype_group_link_ptr(
+ struct wmManipulatorMapType *mmap_type,
+ struct wmManipulatorGroupType *wgt);
+
+void WM_manipulatormaptype_group_init_runtime_keymap(
+ const struct Main *bmain,
+ struct wmManipulatorGroupType *wgt);
+void WM_manipulatormaptype_group_init_runtime(
+ const struct Main *bmain, struct wmManipulatorMapType *mmap_type,
+ struct wmManipulatorGroupType *wgt);
+void WM_manipulatormaptype_group_unlink(
+ struct bContext *C, struct Main *bmain, struct wmManipulatorMapType *mmap_type,
+ const struct wmManipulatorGroupType *wgt);
+
+void WM_manipulatormaptype_group_free(struct wmManipulatorGroupTypeRef *wgt);
+
+/* -------------------------------------------------------------------- */
+/* ManipulatorGroup */
+
+/* Add/Ensure/Remove (High level API) */
+
+void WM_manipulator_group_type_add_ptr_ex(
+ struct wmManipulatorGroupType *wgt,
+ struct wmManipulatorMapType *mmap_type);
+void WM_manipulator_group_type_add_ptr(
+ struct wmManipulatorGroupType *wgt);
+void WM_manipulator_group_type_add(const char *idname);
+
+void WM_manipulator_group_type_ensure_ptr_ex(
+ struct wmManipulatorGroupType *wgt,
+ struct wmManipulatorMapType *mmap_type);
+void WM_manipulator_group_type_ensure_ptr(
+ struct wmManipulatorGroupType *wgt);
+void WM_manipulator_group_type_ensure(const char *idname);
+
+void WM_manipulator_group_type_remove_ptr_ex(
+ struct Main *bmain, struct wmManipulatorGroupType *wgt,
+ struct wmManipulatorMapType *mmap_type);
+void WM_manipulator_group_type_remove_ptr(
+ struct Main *bmain, struct wmManipulatorGroupType *wgt);
+void WM_manipulator_group_type_remove(struct Main *bmain, const char *idname);
+
+void WM_manipulator_group_type_unlink_delayed_ptr_ex(
+ struct wmManipulatorGroupType *wgt,
+ struct wmManipulatorMapType *mmap_type);
+void WM_manipulator_group_type_unlink_delayed_ptr(
+ struct wmManipulatorGroupType *wgt);
+void WM_manipulator_group_type_unlink_delayed(const char *idname);
+
+/* Utilities */
+bool WM_manipulator_context_check_drawstep(const struct bContext *C, eWM_ManipulatorMapDrawStep step);
+
+#endif /* __WM_MANIPULATOR_API_H__ */
diff --git a/source/blender/windowmanager/manipulators/WM_manipulator_types.h b/source/blender/windowmanager/manipulators/WM_manipulator_types.h
new file mode 100644
index 00000000000..6d83f411db1
--- /dev/null
+++ b/source/blender/windowmanager/manipulators/WM_manipulator_types.h
@@ -0,0 +1,417 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2016 Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/windowmanager/manipulators/WM_manipulator_types.h
+ * \ingroup wm
+ *
+ * \name Manipulator Types
+ * \brief Manipulator defines for external use.
+ *
+ * Only included in WM_types.h and lower level files.
+ */
+
+
+#ifndef __WM_MANIPULATOR_TYPES_H__
+#define __WM_MANIPULATOR_TYPES_H__
+
+#include "BLI_compiler_attrs.h"
+
+struct wmManipulatorMapType;
+struct wmManipulatorGroupType;
+struct wmManipulatorGroup;
+struct wmManipulator;
+struct wmManipulatorProperty;
+struct wmKeyConfig;
+
+#include "DNA_listBase.h"
+
+
+/* -------------------------------------------------------------------- */
+/* Enum Typedef's */
+
+
+/**
+ * #wmManipulator.state
+ */
+typedef enum eWM_ManipulatorState {
+ WM_MANIPULATOR_STATE_HIGHLIGHT = (1 << 0), /* while hovered */
+ WM_MANIPULATOR_STATE_MODAL = (1 << 1), /* while dragging */
+ WM_MANIPULATOR_STATE_SELECT = (1 << 2),
+} eWM_ManipulatorState;
+
+
+/**
+ * #wmManipulator.flag
+ * Flags for individual manipulators.
+ */
+typedef enum eWM_ManipulatorFlag {
+ WM_MANIPULATOR_DRAW_HOVER = (1 << 0), /* draw *only* while hovering */
+ WM_MANIPULATOR_DRAW_MODAL = (1 << 1), /* draw while dragging */
+ WM_MANIPULATOR_DRAW_VALUE = (1 << 2), /* draw an indicator for the current value while dragging */
+ WM_MANIPULATOR_HIDDEN = (1 << 3),
+ /**
+ * When set 'scale_final' value also scales the offset.
+ * Use when offset is to avoid screen-space overlap instead of absolute positioning. */
+ WM_MANIPULATOR_DRAW_OFFSET_SCALE = (1 << 4),
+ /**
+ * User should still use 'scale_final' for any handles and UI elements.
+ * This simply skips scale when calculating the final matrix.
+ * Needed when the manipulator needs to align with the interface underneath it. */
+ WM_MANIPULATOR_DRAW_NO_SCALE = (1 << 5),
+ /**
+ * Hide the cursor and lock it's position while interacting with this manipulator.
+ */
+ WM_MANIPULATOR_GRAB_CURSOR = (1 << 6),
+} eWM_ManipulatorFlag;
+
+/**
+ * #wmManipulatorGroupType.flag
+ * Flags that influence the behavior of all manipulators in the group.
+ */
+typedef enum eWM_ManipulatorGroupTypeFlag {
+ /* Mark manipulator-group as being 3D */
+ WM_MANIPULATORGROUPTYPE_3D = (1 << 0),
+ /* Scale manipulators as 3D object that respects zoom (otherwise zoom independent draw size).
+ * note: currently only for 3D views, 2D support needs adding. */
+ WM_MANIPULATORGROUPTYPE_SCALE = (1 << 1),
+ /* Manipulators can be depth culled with scene objects (covered by other geometry - TODO) */
+ WM_MANIPULATORGROUPTYPE_DEPTH_3D = (1 << 2),
+ /* Manipulators can be selected */
+ WM_MANIPULATORGROUPTYPE_SELECT = (1 << 3),
+ /* The manipulator group is to be kept (not removed on loading a new file for eg). */
+ WM_MANIPULATORGROUPTYPE_PERSISTENT = (1 << 4),
+ /* Show all other manipulators when interacting. */
+ WM_MANIPULATORGROUPTYPE_DRAW_MODAL_ALL = (1 << 5),
+} eWM_ManipulatorGroupTypeFlag;
+
+
+/**
+ * #wmManipulatorGroup.init_flag
+ */
+typedef enum eWM_ManipulatorGroupInitFlag {
+ /* mgroup has been initialized */
+ WM_MANIPULATORGROUP_INIT_SETUP = (1 << 0),
+ WM_MANIPULATORGROUP_INIT_REFRESH = (1 << 1),
+} eWM_ManipulatorGroupInitFlag;
+
+/**
+ * #wmManipulatorMapType.type_update_flag
+ * Manipulator-map type update flag
+ */
+typedef enum eWM_ManipulatorMapTypeUpdateFlag {
+ /* A new type has been added, needs to be initialized for all views. */
+ WM_MANIPULATORMAPTYPE_UPDATE_INIT = (1 << 0),
+ WM_MANIPULATORMAPTYPE_UPDATE_REMOVE = (1 << 1),
+
+ /* Needed because keymap may be registered before and after window initialization.
+ * So we need to keep track of keymap initialization separately. */
+ WM_MANIPULATORMAPTYPE_KEYMAP_INIT = (1 << 2),
+} eWM_ManipulatorMapTypeUpdateFlag;
+
+/* -------------------------------------------------------------------- */
+/* wmManipulator */
+
+/**
+ * \brief Manipulator tweak flag.
+ * Bitflag passed to manipulator while tweaking.
+ *
+ * \note Manipulators are responsible for handling this #wmManipulator.modal callback!.
+ */
+typedef enum {
+ /* Drag with extra precision (Shift). */
+ WM_MANIPULATOR_TWEAK_PRECISE = (1 << 0),
+ /* Drag with snap enabled (Ctrl). */
+ WM_MANIPULATOR_TWEAK_SNAP = (1 << 1),
+} eWM_ManipulatorTweak;
+
+#include "wm_manipulator_fn.h"
+
+typedef struct wmManipulatorOpElem {
+ struct wmOperatorType *type;
+ /* operator properties if manipulator spawns and controls an operator,
+ * or owner pointer if manipulator spawns and controls a property */
+ PointerRNA ptr;
+} wmManipulatorOpElem;
+
+/* manipulators are set per region by registering them on manipulator-maps */
+struct wmManipulator {
+ struct wmManipulator *next, *prev;
+
+ /* While we don't have a real type, use this to put type-like vars. */
+ const struct wmManipulatorType *type;
+
+ /* Overrides 'type->modal' when set.
+ * Note that this is a workaround, remove if we can. */
+ wmManipulatorFnModal custom_modal;
+
+ /* pointer back to group this manipulator is in (just for quick access) */
+ struct wmManipulatorGroup *parent_mgroup;
+
+ void *py_instance;
+
+ /* rna pointer to access properties */
+ struct PointerRNA *ptr;
+
+ /* flags that influence the behavior or how the manipulators are drawn */
+ eWM_ManipulatorFlag flag;
+ /* state flags (active, highlighted, selected) */
+ eWM_ManipulatorState state;
+
+ /* Optional ID for highlighting different parts of this manipulator.
+ * -1 when unset, otherwise a valid index. (Used as index to 'op_data'). */
+ int highlight_part;
+ /* For single click button manipulators, use a different part as a fallback, -1 when unused. */
+ int drag_part;
+
+ /* Transformation of the manipulator in 2d or 3d space.
+ * - Matrix axis are expected to be unit length (scale is applied after).
+ * - Behavior when axis aren't orthogonal depends on each manipulator.
+ * - Typically the +Z is the primary axis for manipulators to use.
+ * - 'matrix[3]' must be used for location,
+ * besides this it's up to the manipulators internal code how the
+ * rotation components are used for drawing and interaction.
+ */
+
+ /* The space this manipulator is being modified in. */
+ float matrix_space[4][4];
+ /* Transformation of this manipulator. */
+ float matrix_basis[4][4];
+ /* custom offset from origin */
+ float matrix_offset[4][4];
+ /* runtime property, set the scale while drawing on the viewport */
+ float scale_final;
+ /* user defined scale, in addition to the original one */
+ float scale_basis;
+ /* user defined width for line drawing */
+ float line_width;
+ /* manipulator colors (uses default fallbacks if not defined) */
+ float color[4], color_hi[4];
+
+ /* data used during interaction */
+ void *interaction_data;
+
+ /* Operator to spawn when activating the manipulator (overrides property editing),
+ * an array of items (aligned with #wmManipulator.highlight_part). */
+ wmManipulatorOpElem *op_data;
+ int op_data_len;
+
+ struct IDProperty *properties;
+
+ /* over alloc target_properties after 'wmManipulatorType.struct_size' */
+};
+
+/* Similar to PropertyElemRNA, but has an identifier. */
+typedef struct wmManipulatorProperty {
+ const struct wmManipulatorPropertyType *type;
+
+ PointerRNA ptr;
+ PropertyRNA *prop;
+ int index;
+
+
+ /* Optional functions for converting to/from RNA */
+ struct {
+ wmManipulatorPropertyFnGet value_get_fn;
+ wmManipulatorPropertyFnSet value_set_fn;
+ wmManipulatorPropertyFnRangeGet range_get_fn;
+ wmManipulatorPropertyFnFree free_fn;
+ void *user_data;
+ } custom_func;
+} wmManipulatorProperty;
+
+typedef struct wmManipulatorPropertyType {
+ struct wmManipulatorPropertyType *next, *prev;
+ /* PropertyType, typically 'PROP_FLOAT' */
+ int data_type;
+ int array_length;
+
+ /* index within 'wmManipulatorType' */
+ int index_in_type;
+
+ /* over alloc */
+ char idname[0];
+} wmManipulatorPropertyType;
+
+
+/**
+ * Simple utility wrapper for storing a single manipulator as wmManipulatorGroup.customdata (which gets freed).
+ */
+typedef struct wmManipulatorWrapper {
+ struct wmManipulator *manipulator;
+} wmManipulatorWrapper;
+
+struct wmManipulatorMapType_Params {
+ short spaceid;
+ short regionid;
+};
+
+typedef struct wmManipulatorType {
+
+ const char *idname; /* MAX_NAME */
+
+ /* Set to 'sizeof(wmManipulator)' or larger for instances of this type,
+ * use so we can cant to other types without the hassle of a custom-data pointer. */
+ uint struct_size;
+
+ /* Initialize struct (calloc'd 'struct_size' region). */
+ wmManipulatorFnSetup setup;
+
+ /* draw manipulator */
+ wmManipulatorFnDraw draw;
+
+ /* determines 3d intersection by rendering the manipulator in a selection routine. */
+ wmManipulatorFnDrawSelect draw_select;
+
+ /* Determine if the mouse intersects with the manipulator.
+ * The calculation should be done in the callback itself, -1 for no seleciton. */
+ wmManipulatorFnTestSelect test_select;
+
+ /* handler used by the manipulator. Usually handles interaction tied to a manipulator type */
+ wmManipulatorFnModal modal;
+
+ /* manipulator-specific handler to update manipulator attributes based on the property value */
+ wmManipulatorFnPropertyUpdate property_update;
+
+ /* Returns the final transformation which may be different from the 'matrix',
+ * depending on the manipulator.
+ * Notes:
+ * - Scale isn't applied (wmManipulator.scale/user_scale).
+ * - Offset isn't applied (wmManipulator.matrix_offset).
+ */
+ wmManipulatorFnMatrixBasisGet matrix_basis_get;
+
+ /* activate a manipulator state when the user clicks on it */
+ wmManipulatorFnInvoke invoke;
+
+ /* called when manipulator tweaking is done - used to free data and reset property when cancelling */
+ wmManipulatorFnExit exit;
+
+ wmManipulatorFnCursorGet cursor_get;
+
+ /* called when manipulator selection state changes */
+ wmManipulatorFnSelectRefresh select_refresh;
+
+ /* Free data (not the manipulator it's self), use when the manipulator allocates it's own members. */
+ wmManipulatorFnFree free;
+
+ /* RNA for properties */
+ struct StructRNA *srna;
+
+ /* RNA integration */
+ ExtensionRNA ext;
+
+ ListBase target_property_defs;
+ int target_property_defs_len;
+
+} wmManipulatorType;
+
+
+/* -------------------------------------------------------------------- */
+/* wmManipulatorGroup */
+
+/* factory class for a manipulator-group type, gets called every time a new area is spawned */
+typedef struct wmManipulatorGroupTypeRef {
+ struct wmManipulatorGroupTypeRef *next, *prev;
+ struct wmManipulatorGroupType *type;
+} wmManipulatorGroupTypeRef;
+
+/* factory class for a manipulator-group type, gets called every time a new area is spawned */
+typedef struct wmManipulatorGroupType {
+ const char *idname; /* MAX_NAME */
+ const char *name; /* manipulator-group name - displayed in UI (keymap editor) */
+
+ /* poll if manipulator-map should be visible */
+ wmManipulatorGroupFnPoll poll;
+ /* initially create manipulators and set permanent data - stuff you only need to do once */
+ wmManipulatorGroupFnInit setup;
+ /* refresh data, only called if recreate flag is set (WM_manipulatormap_tag_refresh) */
+ wmManipulatorGroupFnRefresh refresh;
+ /* refresh data for drawing, called before each redraw */
+ wmManipulatorGroupFnDrawPrepare draw_prepare;
+
+ /* Keymap init callback for this manipulator-group (optional),
+ * will fall back to default tweak keymap when left NULL. */
+ wmManipulatorGroupFnSetupKeymap setup_keymap;
+
+ /* Optionally subscribe to wmMsgBus events,
+ * these are calculated automatically from RNA properties,
+ * only needed if manipulators depend indirectly on properties. */
+ wmManipulatorGroupFnMsgBusSubscribe message_subscribe;
+
+ /* keymap created with callback from above */
+ struct wmKeyMap *keymap;
+ /* Only for convenient removal. */
+ struct wmKeyConfig *keyconf;
+
+ /* Disable for now, maybe some day we want properties. */
+#if 0
+ /* rna for properties */
+ struct StructRNA *srna;
+#endif
+
+ /* RNA integration */
+ ExtensionRNA ext;
+
+ eWM_ManipulatorGroupTypeFlag flag;
+
+ /* So we know which group type to update. */
+ eWM_ManipulatorMapTypeUpdateFlag type_update_flag;
+
+ /* same as manipulator-maps, so registering/unregistering goes to the correct region */
+ struct wmManipulatorMapType_Params mmap_params;
+
+} wmManipulatorGroupType;
+
+typedef struct wmManipulatorGroup {
+ struct wmManipulatorGroup *next, *prev;
+
+ struct wmManipulatorGroupType *type;
+ ListBase manipulators;
+
+ struct wmManipulatorMap *parent_mmap;
+
+ void *py_instance; /* python stores the class instance here */
+ struct ReportList *reports; /* errors and warnings storage */
+
+ void *customdata;
+ void (*customdata_free)(void *); /* for freeing customdata from above */
+ eWM_ManipulatorGroupInitFlag init_flag;
+} wmManipulatorGroup;
+
+/* -------------------------------------------------------------------- */
+/* wmManipulatorMap */
+
+/**
+ * Pass a value of this enum to #WM_manipulatormap_draw to tell it what to draw.
+ */
+typedef enum eWM_ManipulatorMapDrawStep {
+ /** Draw 2D manipulator-groups (#WM_MANIPULATORGROUPTYPE_3D not set). */
+ WM_MANIPULATORMAP_DRAWSTEP_2D = 0,
+ /** Draw 3D manipulator-groups (#WM_MANIPULATORGROUPTYPE_3D set). */
+ WM_MANIPULATORMAP_DRAWSTEP_3D,
+} eWM_ManipulatorMapDrawStep;
+#define WM_MANIPULATORMAP_DRAWSTEP_MAX 2
+
+#endif /* __WM_MANIPULATOR_TYPES_H__ */
diff --git a/source/blender/windowmanager/manipulators/intern/wm_manipulator.c b/source/blender/windowmanager/manipulators/intern/wm_manipulator.c
new file mode 100644
index 00000000000..3a78dd32f94
--- /dev/null
+++ b/source/blender/windowmanager/manipulators/intern/wm_manipulator.c
@@ -0,0 +1,762 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2014 Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): Blender Foundation
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/windowmanager/manipulators/intern/wm_manipulator.c
+ * \ingroup wm
+ */
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_listbase.h"
+#include "BLI_math.h"
+#include "BLI_string.h"
+#include "BLI_string_utils.h"
+
+#include "BKE_context.h"
+
+#include "GPU_batch.h"
+#include "GPU_glew.h"
+#include "GPU_immediate.h"
+
+#include "RNA_access.h"
+#include "RNA_define.h"
+
+#include "BKE_global.h"
+#include "BKE_main.h"
+#include "BKE_idprop.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "ED_screen.h"
+#include "ED_view3d.h"
+
+#ifdef WITH_PYTHON
+#include "BPY_extern.h"
+#endif
+
+/* only for own init/exit calls (wm_manipulatortype_init/wm_manipulatortype_free) */
+#include "wm.h"
+
+/* own includes */
+#include "wm_manipulator_wmapi.h"
+#include "wm_manipulator_intern.h"
+
+static void wm_manipulator_register(
+ wmManipulatorGroup *mgroup, wmManipulator *mpr);
+
+/**
+ * \note Follow #wm_operator_create convention.
+ */
+static wmManipulator *wm_manipulator_create(
+ const wmManipulatorType *wt,
+ PointerRNA *properties)
+{
+ BLI_assert(wt != NULL);
+ BLI_assert(wt->struct_size >= sizeof(wmManipulator));
+
+ wmManipulator *mpr = MEM_callocN(
+ wt->struct_size + (sizeof(wmManipulatorProperty) * wt->target_property_defs_len), __func__);
+ mpr->type = wt;
+
+ /* initialize properties, either copy or create */
+ mpr->ptr = MEM_callocN(sizeof(PointerRNA), "wmManipulatorPtrRNA");
+ if (properties && properties->data) {
+ mpr->properties = IDP_CopyProperty(properties->data);
+ }
+ else {
+ IDPropertyTemplate val = {0};
+ mpr->properties = IDP_New(IDP_GROUP, &val, "wmManipulatorProperties");
+ }
+ RNA_pointer_create(G.main->wm.first, wt->srna, mpr->properties, mpr->ptr);
+
+ WM_manipulator_properties_sanitize(mpr->ptr, 0);
+
+ unit_m4(mpr->matrix_space);
+ unit_m4(mpr->matrix_basis);
+ unit_m4(mpr->matrix_offset);
+
+ mpr->drag_part = -1;
+
+ return mpr;
+}
+
+wmManipulator *WM_manipulator_new_ptr(
+ const wmManipulatorType *wt, wmManipulatorGroup *mgroup,
+ PointerRNA *properties)
+{
+ wmManipulator *mpr = wm_manipulator_create(wt, properties);
+
+ wm_manipulator_register(mgroup, mpr);
+
+ if (mpr->type->setup != NULL) {
+ mpr->type->setup(mpr);
+ }
+
+ return mpr;
+}
+
+/**
+ * \param wt: Must be valid,
+ * if you need to check it exists use #WM_manipulator_new_ptr
+ * because callers of this function don't NULL check the return value.
+ */
+wmManipulator *WM_manipulator_new(
+ const char *idname, wmManipulatorGroup *mgroup,
+ PointerRNA *properties)
+{
+ const wmManipulatorType *wt = WM_manipulatortype_find(idname, false);
+ return WM_manipulator_new_ptr(wt, mgroup, properties);
+}
+
+/**
+ * Initialize default values and allocate needed memory for members.
+ */
+static void manipulator_init(wmManipulator *mpr)
+{
+ const float color_default[4] = {1.0f, 1.0f, 1.0f, 1.0f};
+
+ mpr->scale_basis = 1.0f;
+ mpr->line_width = 1.0f;
+
+ /* defaults */
+ copy_v4_v4(mpr->color, color_default);
+ copy_v4_v4(mpr->color_hi, color_default);
+}
+
+/**
+ * Register \a manipulator.
+ *
+ * \param name: name used to create a unique idname for \a manipulator in \a mgroup
+ *
+ * \note Not to be confused with type registration from RNA.
+ */
+static void wm_manipulator_register(wmManipulatorGroup *mgroup, wmManipulator *mpr)
+{
+ manipulator_init(mpr);
+ wm_manipulatorgroup_manipulator_register(mgroup, mpr);
+}
+
+/**
+ * \warning this doesn't check #wmManipulatorMap (highlight, selection etc).
+ * Typical use is when freeing the windowing data,
+ * where caller can manage clearing selection, highlight... etc.
+ */
+void WM_manipulator_free(wmManipulator *mpr)
+{
+ if (mpr->type->free != NULL) {
+ mpr->type->free(mpr);
+ }
+
+#ifdef WITH_PYTHON
+ if (mpr->py_instance) {
+ /* do this first in case there are any __del__ functions or
+ * similar that use properties */
+ BPY_DECREF_RNA_INVALIDATE(mpr->py_instance);
+ }
+#endif
+
+ if (mpr->op_data) {
+ for (int i = 0; i < mpr->op_data_len; i++) {
+ WM_operator_properties_free(&mpr->op_data[i].ptr);
+ }
+ MEM_freeN(mpr->op_data);
+ }
+
+ if (mpr->ptr != NULL) {
+ WM_manipulator_properties_free(mpr->ptr);
+ MEM_freeN(mpr->ptr);
+ }
+
+ if (mpr->type->target_property_defs_len != 0) {
+ wmManipulatorProperty *mpr_prop_array = WM_manipulator_target_property_array(mpr);
+ for (int i = 0; i < mpr->type->target_property_defs_len; i++) {
+ wmManipulatorProperty *mpr_prop = &mpr_prop_array[i];
+ if (mpr_prop->custom_func.free_fn) {
+ mpr_prop->custom_func.free_fn(mpr, mpr_prop);
+ }
+ }
+ }
+
+ MEM_freeN(mpr);
+}
+
+/**
+ * Free \a manipulator and unlink from \a manipulatorlist.
+ * \a manipulatorlist is allowed to be NULL.
+ */
+void WM_manipulator_unlink(ListBase *manipulatorlist, wmManipulatorMap *mmap, wmManipulator *mpr, bContext *C)
+{
+ if (mpr->state & WM_MANIPULATOR_STATE_HIGHLIGHT) {
+ wm_manipulatormap_highlight_set(mmap, C, NULL, 0);
+ }
+ if (mpr->state & WM_MANIPULATOR_STATE_MODAL) {
+ wm_manipulatormap_modal_set(mmap, C, mpr, NULL, false);
+ }
+ /* Unlink instead of setting so we don't run callbacks. */
+ if (mpr->state & WM_MANIPULATOR_STATE_SELECT) {
+ WM_manipulator_select_unlink(mmap, mpr);
+ }
+
+ if (manipulatorlist) {
+ BLI_remlink(manipulatorlist, mpr);
+ }
+
+ BLI_assert(mmap->mmap_context.highlight != mpr);
+ BLI_assert(mmap->mmap_context.modal != mpr);
+
+ WM_manipulator_free(mpr);
+}
+
+/* -------------------------------------------------------------------- */
+/** \name Manipulator Creation API
+ *
+ * API for defining data on manipulator creation.
+ *
+ * \{ */
+
+struct wmManipulatorOpElem *WM_manipulator_operator_get(
+ wmManipulator *mpr, int part_index)
+{
+ if (mpr->op_data && ((part_index >= 0) && (part_index < mpr->op_data_len))) {
+ return &mpr->op_data[part_index];
+ }
+ return NULL;
+}
+
+PointerRNA *WM_manipulator_operator_set(
+ wmManipulator *mpr, int part_index,
+ wmOperatorType *ot, IDProperty *properties)
+{
+ BLI_assert(part_index < 255);
+ /* We could pre-allocate these but using multiple is such a rare thing. */
+ if (part_index >= mpr->op_data_len) {
+ mpr->op_data_len = part_index + 1;
+ mpr->op_data = MEM_recallocN(mpr->op_data, sizeof(*mpr->op_data) * mpr->op_data_len);
+ }
+ wmManipulatorOpElem *mpop = &mpr->op_data[part_index];
+ mpop->type = ot;
+
+ if (mpop->ptr.data) {
+ WM_operator_properties_free(&mpop->ptr);
+ }
+ WM_operator_properties_create_ptr(&mpop->ptr, ot);
+
+ if (properties) {
+ mpop->ptr.data = properties;
+ }
+
+ return &mpop->ptr;
+}
+
+static void wm_manipulator_set_matrix_rotation_from_z_axis__internal(
+ float matrix[4][4], const float z_axis[3])
+{
+ /* old code, seems we can use simpler method */
+#if 0
+ const float z_global[3] = {0.0f, 0.0f, 1.0f};
+ float rot[3][3];
+
+ rotation_between_vecs_to_mat3(rot, z_global, z_axis);
+ copy_v3_v3(matrix[0], rot[0]);
+ copy_v3_v3(matrix[1], rot[1]);
+ copy_v3_v3(matrix[2], rot[2]);
+#else
+ normalize_v3_v3(matrix[2], z_axis);
+ ortho_basis_v3v3_v3(matrix[0], matrix[1], matrix[2]);
+#endif
+
+}
+
+static void wm_manipulator_set_matrix_rotation_from_yz_axis__internal(
+ float matrix[4][4], const float y_axis[3], const float z_axis[3])
+{
+ normalize_v3_v3(matrix[1], y_axis);
+ normalize_v3_v3(matrix[2], z_axis);
+ cross_v3_v3v3(matrix[0], matrix[1], matrix[2]);
+ normalize_v3(matrix[0]);
+}
+
+/**
+ * wmManipulator.matrix utils.
+ */
+void WM_manipulator_set_matrix_rotation_from_z_axis(
+ wmManipulator *mpr, const float z_axis[3])
+{
+ wm_manipulator_set_matrix_rotation_from_z_axis__internal(mpr->matrix_basis, z_axis);
+}
+void WM_manipulator_set_matrix_rotation_from_yz_axis(
+ wmManipulator *mpr, const float y_axis[3], const float z_axis[3])
+{
+ wm_manipulator_set_matrix_rotation_from_yz_axis__internal(mpr->matrix_basis, y_axis, z_axis);
+}
+void WM_manipulator_set_matrix_location(wmManipulator *mpr, const float origin[3])
+{
+ copy_v3_v3(mpr->matrix_basis[3], origin);
+}
+
+/**
+ * wmManipulator.matrix_offset utils.
+ */
+void WM_manipulator_set_matrix_offset_rotation_from_z_axis(
+ wmManipulator *mpr, const float z_axis[3])
+{
+ wm_manipulator_set_matrix_rotation_from_z_axis__internal(mpr->matrix_offset, z_axis);
+}
+void WM_manipulator_set_matrix_offset_rotation_from_yz_axis(
+ wmManipulator *mpr, const float y_axis[3], const float z_axis[3])
+{
+ wm_manipulator_set_matrix_rotation_from_yz_axis__internal(mpr->matrix_offset, y_axis, z_axis);
+}
+void WM_manipulator_set_matrix_offset_location(wmManipulator *mpr, const float offset[3])
+{
+ copy_v3_v3(mpr->matrix_offset[3], offset);
+}
+
+void WM_manipulator_set_flag(wmManipulator *mpr, const int flag, const bool enable)
+{
+ if (enable) {
+ mpr->flag |= flag;
+ }
+ else {
+ mpr->flag &= ~flag;
+ }
+}
+
+void WM_manipulator_set_scale(wmManipulator *mpr, const float scale)
+{
+ mpr->scale_basis = scale;
+}
+
+void WM_manipulator_set_line_width(wmManipulator *mpr, const float line_width)
+{
+ mpr->line_width = line_width;
+}
+
+/**
+ * Set manipulator rgba colors.
+ *
+ * \param col Normal state color.
+ * \param col_hi Highlighted state color.
+ */
+void WM_manipulator_get_color(const wmManipulator *mpr, float color[4])
+{
+ copy_v4_v4(color, mpr->color);
+}
+void WM_manipulator_set_color(wmManipulator *mpr, const float color[4])
+{
+ copy_v4_v4(mpr->color, color);
+}
+
+void WM_manipulator_get_color_highlight(const wmManipulator *mpr, float color_hi[4])
+{
+ copy_v4_v4(color_hi, mpr->color_hi);
+}
+void WM_manipulator_set_color_highlight(wmManipulator *mpr, const float color_hi[4])
+{
+ copy_v4_v4(mpr->color_hi, color_hi);
+}
+
+
+/** \} */ // Manipulator Creation API
+
+
+/* -------------------------------------------------------------------- */
+/** \name Manipulator Callback Assignment
+ *
+ * \{ */
+
+void WM_manipulator_set_fn_custom_modal(struct wmManipulator *mpr, wmManipulatorFnModal fn)
+{
+ mpr->custom_modal = fn;
+}
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/**
+ * Add/Remove \a manipulator to selection.
+ * Reallocates memory for selected manipulators so better not call for selecting multiple ones.
+ *
+ * \return if the selection has changed.
+ */
+bool wm_manipulator_select_set_ex(
+ wmManipulatorMap *mmap, wmManipulator *mpr, bool select,
+ bool use_array, bool use_callback)
+{
+ bool changed = false;
+
+ if (select) {
+ if ((mpr->state & WM_MANIPULATOR_STATE_SELECT) == 0) {
+ if (use_array) {
+ wm_manipulatormap_select_array_push_back(mmap, mpr);
+ }
+ mpr->state |= WM_MANIPULATOR_STATE_SELECT;
+ changed = true;
+ }
+ }
+ else {
+ if (mpr->state & WM_MANIPULATOR_STATE_SELECT) {
+ if (use_array) {
+ wm_manipulatormap_select_array_remove(mmap, mpr);
+ }
+ mpr->state &= ~WM_MANIPULATOR_STATE_SELECT;
+ changed = true;
+ }
+ }
+
+ /* In the case of unlinking we only want to remove from the array
+ * and not write to the external state */
+ if (use_callback && changed) {
+ if (mpr->type->select_refresh) {
+ mpr->type->select_refresh(mpr);
+ }
+ }
+
+ return changed;
+}
+
+/* Remove from selection array without running callbacks. */
+bool WM_manipulator_select_unlink(wmManipulatorMap *mmap, wmManipulator *mpr)
+{
+ return wm_manipulator_select_set_ex(mmap, mpr, false, true, false);
+}
+
+bool WM_manipulator_select_set(wmManipulatorMap *mmap, wmManipulator *mpr, bool select)
+{
+ return wm_manipulator_select_set_ex(mmap, mpr, select, true, true);
+}
+
+void WM_manipulator_highlight_set(wmManipulatorMap *mmap, wmManipulator *mpr)
+{
+ wm_manipulatormap_highlight_set(mmap, NULL, mpr, mpr ? mpr->highlight_part : 0);
+}
+
+bool wm_manipulator_select_and_highlight(bContext *C, wmManipulatorMap *mmap, wmManipulator *mpr)
+{
+ if (WM_manipulator_select_set(mmap, mpr, true)) {
+ wm_manipulatormap_highlight_set(mmap, C, mpr, mpr->highlight_part);
+ return true;
+ }
+ else {
+ return false;
+ }
+}
+
+void wm_manipulator_calculate_scale(wmManipulator *mpr, const bContext *C)
+{
+ const RegionView3D *rv3d = CTX_wm_region_view3d(C);
+ float scale = U.ui_scale;
+
+ if ((mpr->parent_mgroup->type->flag & WM_MANIPULATORGROUPTYPE_SCALE) == 0) {
+ scale *= U.manipulator_size;
+ if (rv3d) {
+ /* 'ED_view3d_pixel_size' includes 'U.pixelsize', remove it. */
+ float matrix_world[4][4];
+ if (mpr->type->matrix_basis_get) {
+ float matrix_basis[4][4];
+ mpr->type->matrix_basis_get(mpr, matrix_basis);
+ mul_m4_m4m4(matrix_world, mpr->matrix_space, matrix_basis);
+ }
+ else {
+ mul_m4_m4m4(matrix_world, mpr->matrix_space, mpr->matrix_basis);
+ }
+
+ /* Exclude matrix_offset from scale. */
+ scale *= ED_view3d_pixel_size(rv3d, matrix_world[3]) / U.pixelsize;
+ }
+ else {
+ scale *= 0.02f;
+ }
+ }
+
+ mpr->scale_final = mpr->scale_basis * scale;
+}
+
+static void manipulator_update_prop_data(wmManipulator *mpr)
+{
+ /* manipulator property might have been changed, so update manipulator */
+ if (mpr->type->property_update) {
+ wmManipulatorProperty *mpr_prop_array = WM_manipulator_target_property_array(mpr);
+ for (int i = 0; i < mpr->type->target_property_defs_len; i++) {
+ wmManipulatorProperty *mpr_prop = &mpr_prop_array[i];
+ if (WM_manipulator_target_property_is_valid(mpr_prop)) {
+ mpr->type->property_update(mpr, mpr_prop);
+ }
+ }
+ }
+}
+
+void wm_manipulator_update(wmManipulator *mpr, const bContext *C, const bool refresh_map)
+{
+ if (refresh_map) {
+ manipulator_update_prop_data(mpr);
+ }
+ wm_manipulator_calculate_scale(mpr, C);
+}
+
+int wm_manipulator_is_visible(wmManipulator *mpr)
+{
+ if (mpr->flag & WM_MANIPULATOR_HIDDEN) {
+ return 0;
+ }
+ if ((mpr->state & WM_MANIPULATOR_STATE_MODAL) &&
+ !(mpr->flag & (WM_MANIPULATOR_DRAW_MODAL | WM_MANIPULATOR_DRAW_VALUE)))
+ {
+ /* don't draw while modal (dragging) */
+ return 0;
+ }
+ if ((mpr->flag & WM_MANIPULATOR_DRAW_HOVER) &&
+ !(mpr->state & WM_MANIPULATOR_STATE_HIGHLIGHT) &&
+ !(mpr->state & WM_MANIPULATOR_STATE_SELECT)) /* still draw selected manipulators */
+ {
+ /* update but don't draw */
+ return WM_MANIPULATOR_IS_VISIBLE_UPDATE;
+ }
+
+ return WM_MANIPULATOR_IS_VISIBLE_UPDATE | WM_MANIPULATOR_IS_VISIBLE_DRAW;
+}
+
+void WM_manipulator_calc_matrix_final_params(
+ const wmManipulator *mpr,
+ const struct WM_ManipulatorMatrixParams *params,
+ float r_mat[4][4])
+{
+ const float (* const matrix_space)[4] = params->matrix_space ? params->matrix_space : mpr->matrix_space;
+ const float (* const matrix_basis)[4] = params->matrix_basis ? params->matrix_basis : mpr->matrix_basis;
+ const float (* const matrix_offset)[4] = params->matrix_offset ? params->matrix_offset : mpr->matrix_offset;
+ const float *scale_final = params->scale_final ? params->scale_final : &mpr->scale_final;
+
+ float final_matrix[4][4];
+ if (params->matrix_basis == NULL && mpr->type->matrix_basis_get) {
+ mpr->type->matrix_basis_get(mpr, final_matrix);
+ }
+ else {
+ copy_m4_m4(final_matrix, matrix_basis);
+ }
+
+ if (mpr->flag & WM_MANIPULATOR_DRAW_NO_SCALE) {
+ mul_m4_m4m4(final_matrix, final_matrix, matrix_offset);
+ }
+ else {
+ if (mpr->flag & WM_MANIPULATOR_DRAW_OFFSET_SCALE) {
+ mul_mat3_m4_fl(final_matrix, *scale_final);
+ mul_m4_m4m4(final_matrix, final_matrix, matrix_offset);
+ }
+ else {
+ mul_m4_m4m4(final_matrix, final_matrix, matrix_offset);
+ mul_mat3_m4_fl(final_matrix, *scale_final);
+ }
+ }
+
+ mul_m4_m4m4(r_mat, matrix_space, final_matrix);
+}
+
+void WM_manipulator_calc_matrix_final(const wmManipulator *mpr, float r_mat[4][4])
+{
+ WM_manipulator_calc_matrix_final_params(
+ mpr,
+ &((struct WM_ManipulatorMatrixParams) {
+ .matrix_space = NULL,
+ .matrix_basis = NULL,
+ .matrix_offset = NULL,
+ .scale_final = NULL,
+ }), r_mat
+ );
+}
+
+/** \name Manipulator Propery Access
+ *
+ * Matches `WM_operator_properties` conventions.
+ *
+ * \{ */
+
+
+void WM_manipulator_properties_create_ptr(PointerRNA *ptr, wmManipulatorType *wt)
+{
+ RNA_pointer_create(NULL, wt->srna, NULL, ptr);
+}
+
+void WM_manipulator_properties_create(PointerRNA *ptr, const char *wtstring)
+{
+ const wmManipulatorType *wt = WM_manipulatortype_find(wtstring, false);
+
+ if (wt)
+ WM_manipulator_properties_create_ptr(ptr, (wmManipulatorType *)wt);
+ else
+ RNA_pointer_create(NULL, &RNA_ManipulatorProperties, NULL, ptr);
+}
+
+/* similar to the function above except its uses ID properties
+ * used for keymaps and macros */
+void WM_manipulator_properties_alloc(PointerRNA **ptr, IDProperty **properties, const char *wtstring)
+{
+ if (*properties == NULL) {
+ IDPropertyTemplate val = {0};
+ *properties = IDP_New(IDP_GROUP, &val, "wmOpItemProp");
+ }
+
+ if (*ptr == NULL) {
+ *ptr = MEM_callocN(sizeof(PointerRNA), "wmOpItemPtr");
+ WM_manipulator_properties_create(*ptr, wtstring);
+ }
+
+ (*ptr)->data = *properties;
+
+}
+
+void WM_manipulator_properties_sanitize(PointerRNA *ptr, const bool no_context)
+{
+ RNA_STRUCT_BEGIN (ptr, prop)
+ {
+ switch (RNA_property_type(prop)) {
+ case PROP_ENUM:
+ if (no_context)
+ RNA_def_property_flag(prop, PROP_ENUM_NO_CONTEXT);
+ else
+ RNA_def_property_clear_flag(prop, PROP_ENUM_NO_CONTEXT);
+ break;
+ case PROP_POINTER:
+ {
+ StructRNA *ptype = RNA_property_pointer_type(ptr, prop);
+
+ /* recurse into manipulator properties */
+ if (RNA_struct_is_a(ptype, &RNA_ManipulatorProperties)) {
+ PointerRNA opptr = RNA_property_pointer_get(ptr, prop);
+ WM_manipulator_properties_sanitize(&opptr, no_context);
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ }
+ RNA_STRUCT_END;
+}
+
+
+/** set all props to their default,
+ * \param do_update Only update un-initialized props.
+ *
+ * \note, theres nothing specific to manipulators here.
+ * this could be made a general function.
+ */
+bool WM_manipulator_properties_default(PointerRNA *ptr, const bool do_update)
+{
+ bool changed = false;
+ RNA_STRUCT_BEGIN (ptr, prop)
+ {
+ switch (RNA_property_type(prop)) {
+ case PROP_POINTER:
+ {
+ StructRNA *ptype = RNA_property_pointer_type(ptr, prop);
+ if (ptype != &RNA_Struct) {
+ PointerRNA opptr = RNA_property_pointer_get(ptr, prop);
+ changed |= WM_manipulator_properties_default(&opptr, do_update);
+ }
+ break;
+ }
+ default:
+ if ((do_update == false) || (RNA_property_is_set(ptr, prop) == false)) {
+ if (RNA_property_reset(ptr, prop, -1)) {
+ changed = true;
+ }
+ }
+ break;
+ }
+ }
+ RNA_STRUCT_END;
+
+ return changed;
+}
+
+/* remove all props without PROP_SKIP_SAVE */
+void WM_manipulator_properties_reset(wmManipulator *mpr)
+{
+ if (mpr->ptr->data) {
+ PropertyRNA *iterprop;
+ iterprop = RNA_struct_iterator_property(mpr->type->srna);
+
+ RNA_PROP_BEGIN (mpr->ptr, itemptr, iterprop)
+ {
+ PropertyRNA *prop = itemptr.data;
+
+ if ((RNA_property_flag(prop) & PROP_SKIP_SAVE) == 0) {
+ const char *identifier = RNA_property_identifier(prop);
+ RNA_struct_idprops_unset(mpr->ptr, identifier);
+ }
+ }
+ RNA_PROP_END;
+ }
+}
+
+void WM_manipulator_properties_clear(PointerRNA *ptr)
+{
+ IDProperty *properties = ptr->data;
+
+ if (properties) {
+ IDP_ClearProperty(properties);
+ }
+}
+
+void WM_manipulator_properties_free(PointerRNA *ptr)
+{
+ IDProperty *properties = ptr->data;
+
+ if (properties) {
+ IDP_FreeProperty(properties);
+ MEM_freeN(properties);
+ ptr->data = NULL; /* just in case */
+ }
+}
+
+/** \} */
+
+/** \name General Utilities
+ *
+ * \{ */
+
+bool WM_manipulator_context_check_drawstep(const struct bContext *C, eWM_ManipulatorMapDrawStep step)
+{
+ switch (step) {
+ case WM_MANIPULATORMAP_DRAWSTEP_2D:
+ {
+ break;
+ }
+ case WM_MANIPULATORMAP_DRAWSTEP_3D:
+ {
+ wmWindowManager *wm = CTX_wm_manager(C);
+ if (ED_screen_animation_playing(wm)) {
+ return false;
+ }
+ break;
+ }
+ }
+ return true;
+}
+
+/** \} */
diff --git a/source/blender/windowmanager/manipulators/intern/wm_manipulator_group.c b/source/blender/windowmanager/manipulators/intern/wm_manipulator_group.c
new file mode 100644
index 00000000000..0e63f3d6ffe
--- /dev/null
+++ b/source/blender/windowmanager/manipulators/intern/wm_manipulator_group.c
@@ -0,0 +1,925 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2014 Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): Blender Foundation
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/windowmanager/manipulators/intern/wm_manipulator_group.c
+ * \ingroup wm
+ *
+ * \name Manipulator-Group
+ *
+ * Manipulator-groups store and manage groups of manipulators. They can be
+ * attached to modal handlers and have own keymaps.
+ */
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_listbase.h"
+#include "BLI_string.h"
+#include "BLI_math.h"
+
+#include "BKE_context.h"
+#include "BKE_main.h"
+#include "BKE_report.h"
+
+#include "RNA_access.h"
+#include "RNA_define.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+#include "wm_event_system.h"
+
+#include "ED_screen.h"
+
+/* own includes */
+#include "wm_manipulator_wmapi.h"
+#include "wm_manipulator_intern.h"
+
+#ifdef WITH_PYTHON
+# include "BPY_extern.h"
+#endif
+
+/* Allow manipulator part's to be single click only,
+ * dragging falls back to activating their 'drag_part' action. */
+#define USE_DRAG_DETECT
+
+/* -------------------------------------------------------------------- */
+/** \name wmManipulatorGroup
+ *
+ * \{ */
+
+/**
+ * Create a new manipulator-group from \a wgt.
+ */
+wmManipulatorGroup *wm_manipulatorgroup_new_from_type(
+ wmManipulatorMap *mmap, wmManipulatorGroupType *wgt)
+{
+ wmManipulatorGroup *mgroup = MEM_callocN(sizeof(*mgroup), "manipulator-group");
+ mgroup->type = wgt;
+
+ /* keep back-link */
+ mgroup->parent_mmap = mmap;
+
+ BLI_addtail(&mmap->groups, mgroup);
+
+ return mgroup;
+}
+
+void wm_manipulatorgroup_free(bContext *C, wmManipulatorGroup *mgroup)
+{
+ wmManipulatorMap *mmap = mgroup->parent_mmap;
+
+ /* Similar to WM_manipulator_unlink, but only to keep mmap state correct,
+ * we don't want to run callbacks. */
+ if (mmap->mmap_context.highlight && mmap->mmap_context.highlight->parent_mgroup == mgroup) {
+ wm_manipulatormap_highlight_set(mmap, C, NULL, 0);
+ }
+ if (mmap->mmap_context.modal && mmap->mmap_context.modal->parent_mgroup == mgroup) {
+ wm_manipulatormap_modal_set(mmap, C, mmap->mmap_context.modal, NULL, false);
+ }
+
+ for (wmManipulator *mpr = mgroup->manipulators.first, *mpr_next; mpr; mpr = mpr_next) {
+ mpr_next = mpr->next;
+ if (mmap->mmap_context.select.len) {
+ WM_manipulator_select_unlink(mmap, mpr);
+ }
+ WM_manipulator_free(mpr);
+ }
+ BLI_listbase_clear(&mgroup->manipulators);
+
+#ifdef WITH_PYTHON
+ if (mgroup->py_instance) {
+ /* do this first in case there are any __del__ functions or
+ * similar that use properties */
+ BPY_DECREF_RNA_INVALIDATE(mgroup->py_instance);
+ }
+#endif
+
+ if (mgroup->reports && (mgroup->reports->flag & RPT_FREE)) {
+ BKE_reports_clear(mgroup->reports);
+ MEM_freeN(mgroup->reports);
+ }
+
+ if (mgroup->customdata_free) {
+ mgroup->customdata_free(mgroup->customdata);
+ }
+ else {
+ MEM_SAFE_FREE(mgroup->customdata);
+ }
+
+ BLI_remlink(&mmap->groups, mgroup);
+
+ MEM_freeN(mgroup);
+}
+
+/**
+ * Add \a manipulator to \a mgroup and make sure its name is unique within the group.
+ */
+void wm_manipulatorgroup_manipulator_register(wmManipulatorGroup *mgroup, wmManipulator *mpr)
+{
+ BLI_assert(BLI_findindex(&mgroup->manipulators, mpr) == -1);
+ BLI_addtail(&mgroup->manipulators, mpr);
+ mpr->parent_mgroup = mgroup;
+}
+
+wmManipulator *wm_manipulatorgroup_find_intersected_manipulator(
+ const wmManipulatorGroup *mgroup, bContext *C, const wmEvent *event,
+ int *r_part)
+{
+ for (wmManipulator *mpr = mgroup->manipulators.first; mpr; mpr = mpr->next) {
+ if (mpr->type->test_select && (mpr->flag & WM_MANIPULATOR_HIDDEN) == 0) {
+ if ((*r_part = mpr->type->test_select(C, mpr, event)) != -1) {
+ return mpr;
+ }
+ }
+ }
+
+ return NULL;
+}
+
+/**
+ * Adds all manipulators of \a mgroup that can be selected to the head of \a listbase. Added items need freeing!
+ */
+void wm_manipulatorgroup_intersectable_manipulators_to_list(const wmManipulatorGroup *mgroup, ListBase *listbase)
+{
+ for (wmManipulator *mpr = mgroup->manipulators.first; mpr; mpr = mpr->next) {
+ if ((mpr->flag & WM_MANIPULATOR_HIDDEN) == 0) {
+ if (((mgroup->type->flag & WM_MANIPULATORGROUPTYPE_3D) && mpr->type->draw_select) ||
+ ((mgroup->type->flag & WM_MANIPULATORGROUPTYPE_3D) == 0 && mpr->type->test_select))
+ {
+ BLI_addhead(listbase, BLI_genericNodeN(mpr));
+ }
+ }
+ }
+}
+
+void wm_manipulatorgroup_ensure_initialized(wmManipulatorGroup *mgroup, const bContext *C)
+{
+ /* prepare for first draw */
+ if (UNLIKELY((mgroup->init_flag & WM_MANIPULATORGROUP_INIT_SETUP) == 0)) {
+ mgroup->type->setup(C, mgroup);
+
+ /* Not ideal, initialize keymap here, needed for RNA runtime generated manipulators. */
+ wmManipulatorGroupType *wgt = mgroup->type;
+ if (wgt->keymap == NULL) {
+ wmWindowManager *wm = CTX_wm_manager(C);
+ wm_manipulatorgrouptype_setup_keymap(wgt, wm->defaultconf);
+ BLI_assert(wgt->keymap != NULL);
+ }
+ mgroup->init_flag |= WM_MANIPULATORGROUP_INIT_SETUP;
+ }
+
+ /* refresh may be called multiple times, this just ensures its called at least once before we draw. */
+ if (UNLIKELY((mgroup->init_flag & WM_MANIPULATORGROUP_INIT_REFRESH) == 0)) {
+ if (mgroup->type->refresh) {
+ mgroup->type->refresh(C, mgroup);
+ }
+ mgroup->init_flag |= WM_MANIPULATORGROUP_INIT_REFRESH;
+ }
+}
+
+bool wm_manipulatorgroup_is_visible(const wmManipulatorGroup *mgroup, const bContext *C)
+{
+ /* Check for poll function, if manipulator-group belongs to an operator, also check if the operator is running. */
+ return (!mgroup->type->poll || mgroup->type->poll(C, mgroup->type));
+}
+
+bool wm_manipulatorgroup_is_visible_in_drawstep(
+ const wmManipulatorGroup *mgroup, const eWM_ManipulatorMapDrawStep drawstep)
+{
+ switch (drawstep) {
+ case WM_MANIPULATORMAP_DRAWSTEP_2D:
+ return (mgroup->type->flag & WM_MANIPULATORGROUPTYPE_3D) == 0;
+ case WM_MANIPULATORMAP_DRAWSTEP_3D:
+ return (mgroup->type->flag & WM_MANIPULATORGROUPTYPE_3D);
+ default:
+ BLI_assert(0);
+ return false;
+ }
+}
+
+bool wm_manipulatorgroup_is_any_selected(const wmManipulatorGroup *mgroup)
+{
+ if (mgroup->type->flag & WM_MANIPULATORGROUPTYPE_SELECT) {
+ for (const wmManipulator *mpr = mgroup->manipulators.first; mpr; mpr = mpr->next) {
+ if (mpr->state & WM_MANIPULATOR_STATE_SELECT) {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+/** \} */
+
+/** \name Manipulator operators
+ *
+ * Basic operators for manipulator interaction with user configurable keymaps.
+ *
+ * \{ */
+
+static int manipulator_select_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
+{
+ ARegion *ar = CTX_wm_region(C);
+ wmManipulatorMap *mmap = ar->manipulator_map;
+ wmManipulatorMapSelectState *msel = &mmap->mmap_context.select;
+ wmManipulator *highlight = mmap->mmap_context.highlight;
+
+ bool extend = RNA_boolean_get(op->ptr, "extend");
+ bool deselect = RNA_boolean_get(op->ptr, "deselect");
+ bool toggle = RNA_boolean_get(op->ptr, "toggle");
+
+ /* deselect all first */
+ if (extend == false && deselect == false && toggle == false) {
+ wm_manipulatormap_deselect_all(mmap);
+ BLI_assert(msel->items == NULL && msel->len == 0);
+ UNUSED_VARS_NDEBUG(msel);
+ }
+
+ if (highlight) {
+ const bool is_selected = (highlight->state & WM_MANIPULATOR_STATE_SELECT);
+ bool redraw = false;
+
+ if (toggle) {
+ /* toggle: deselect if already selected, else select */
+ deselect = is_selected;
+ }
+
+ if (deselect) {
+ if (is_selected && WM_manipulator_select_set(mmap, highlight, false)) {
+ redraw = true;
+ }
+ }
+ else if (wm_manipulator_select_and_highlight(C, mmap, highlight)) {
+ redraw = true;
+ }
+
+ if (redraw) {
+ ED_region_tag_redraw(ar);
+ }
+
+ return OPERATOR_FINISHED;
+ }
+ else {
+ BLI_assert(0);
+ return (OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH);
+ }
+
+ return OPERATOR_PASS_THROUGH;
+}
+
+void MANIPULATORGROUP_OT_manipulator_select(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Manipulator Select";
+ ot->description = "Select the currently highlighted manipulator";
+ ot->idname = "MANIPULATORGROUP_OT_manipulator_select";
+
+ /* api callbacks */
+ ot->invoke = manipulator_select_invoke;
+
+ ot->flag = OPTYPE_UNDO;
+
+ WM_operator_properties_mouse_select(ot);
+}
+
+typedef struct ManipulatorTweakData {
+ wmManipulatorMap *mmap;
+ wmManipulatorGroup *mgroup;
+ wmManipulator *mpr_modal;
+
+ int init_event; /* initial event type */
+ int flag; /* tweak flags */
+
+#ifdef USE_DRAG_DETECT
+ /* True until the mouse is moved (only use when the operator has no modal).
+ * this allows some manipulators to be click-only. */
+ enum {
+ /* Don't detect dragging. */
+ DRAG_NOP = 0,
+ /* Detect dragging (wait until a drag or click is detected). */
+ DRAG_DETECT,
+ /* Drag has started, idle until there is no active modal operator.
+ * This is needed because finishing the modal operator also exits
+ * the modal manipulator state (un-grabbs the cursor).
+ * Ideally this workaround could be removed later. */
+ DRAG_IDLE,
+ } drag_state;
+#endif
+
+} ManipulatorTweakData;
+
+static bool manipulator_tweak_start(
+ bContext *C, wmManipulatorMap *mmap, wmManipulator *mpr, const wmEvent *event)
+{
+ /* activate highlighted manipulator */
+ wm_manipulatormap_modal_set(mmap, C, mpr, event, true);
+
+ return (mpr->state & WM_MANIPULATOR_STATE_MODAL);
+}
+
+static bool manipulator_tweak_start_and_finish(
+ bContext *C, wmManipulatorMap *mmap, wmManipulator *mpr, const wmEvent *event, bool *r_is_modal)
+{
+ wmManipulatorOpElem *mpop = WM_manipulator_operator_get(mpr, mpr->highlight_part);
+ if (r_is_modal) {
+ *r_is_modal = false;
+ }
+ if (mpop && mpop->type) {
+ /* XXX temporary workaround for modal manipulator operator
+ * conflicting with modal operator attached to manipulator */
+ if (mpop->type->modal) {
+ /* activate highlighted manipulator */
+ wm_manipulatormap_modal_set(mmap, C, mpr, event, true);
+ if (r_is_modal) {
+ *r_is_modal = true;
+ }
+ }
+ else {
+ /* Allow for 'button' manipulators, single click to run an action. */
+ WM_operator_name_call_ptr(C, mpop->type, WM_OP_INVOKE_DEFAULT, &mpop->ptr);
+ }
+ return true;
+ }
+ else {
+ return false;
+ }
+}
+
+static void manipulator_tweak_finish(bContext *C, wmOperator *op, const bool cancel, bool clear_modal)
+{
+ ManipulatorTweakData *mtweak = op->customdata;
+ if (mtweak->mpr_modal->type->exit) {
+ mtweak->mpr_modal->type->exit(C, mtweak->mpr_modal, cancel);
+ }
+ if (clear_modal) {
+ /* The manipulator may have been removed. */
+ if ((BLI_findindex(&mtweak->mmap->groups, mtweak->mgroup) != -1) &&
+ (BLI_findindex(&mtweak->mgroup->manipulators, mtweak->mpr_modal) != -1))
+ {
+ wm_manipulatormap_modal_set(mtweak->mmap, C, mtweak->mpr_modal, NULL, false);
+ }
+ }
+ MEM_freeN(mtweak);
+}
+
+static int manipulator_tweak_modal(bContext *C, wmOperator *op, const wmEvent *event)
+{
+ ManipulatorTweakData *mtweak = op->customdata;
+ wmManipulator *mpr = mtweak->mpr_modal;
+ int retval = OPERATOR_PASS_THROUGH;
+ bool clear_modal = true;
+
+ if (mpr == NULL) {
+ BLI_assert(0);
+ return (OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH);
+ }
+
+#ifdef USE_DRAG_DETECT
+ wmManipulatorMap *mmap = mtweak->mmap;
+ if (mtweak->drag_state == DRAG_DETECT) {
+ if (ELEM(event->type, MOUSEMOVE, INBETWEEN_MOUSEMOVE)) {
+ if (len_manhattan_v2v2_int(&event->x, mmap->mmap_context.event_xy) > 2) {
+ mtweak->drag_state = DRAG_IDLE;
+ mpr->highlight_part = mpr->drag_part;
+ }
+ }
+ else if (event->type == mtweak->init_event && event->val == KM_RELEASE) {
+ mtweak->drag_state = DRAG_NOP;
+ retval = OPERATOR_FINISHED;
+ }
+
+ if (mtweak->drag_state != DRAG_DETECT) {
+ /* Follow logic in 'manipulator_tweak_invoke' */
+ bool is_modal = false;
+ if (manipulator_tweak_start_and_finish(C, mmap, mpr, event, &is_modal)) {
+ if (is_modal) {
+ clear_modal = false;
+ }
+ }
+ else {
+ if (!manipulator_tweak_start(C, mmap, mpr, event)) {
+ retval = OPERATOR_FINISHED;
+ }
+ }
+ }
+ }
+ if (mtweak->drag_state == DRAG_IDLE) {
+ if (mmap->mmap_context.modal != NULL) {
+ return OPERATOR_PASS_THROUGH;
+ }
+ else {
+ manipulator_tweak_finish(C, op, false, false);
+ return OPERATOR_FINISHED;
+ }
+ }
+#endif /* USE_DRAG_DETECT */
+
+ if (retval == OPERATOR_FINISHED) {
+ /* pass */
+ }
+ else if (event->type == mtweak->init_event && event->val == KM_RELEASE) {
+ retval = OPERATOR_FINISHED;
+ }
+ else if (event->type == EVT_MODAL_MAP) {
+ switch (event->val) {
+ case TWEAK_MODAL_CANCEL:
+ retval = OPERATOR_CANCELLED;
+ break;
+ case TWEAK_MODAL_CONFIRM:
+ retval = OPERATOR_FINISHED;
+ break;
+ case TWEAK_MODAL_PRECISION_ON:
+ mtweak->flag |= WM_MANIPULATOR_TWEAK_PRECISE;
+ break;
+ case TWEAK_MODAL_PRECISION_OFF:
+ mtweak->flag &= ~WM_MANIPULATOR_TWEAK_PRECISE;
+ break;
+
+ case TWEAK_MODAL_SNAP_ON:
+ mtweak->flag |= WM_MANIPULATOR_TWEAK_SNAP;
+ break;
+ case TWEAK_MODAL_SNAP_OFF:
+ mtweak->flag &= ~WM_MANIPULATOR_TWEAK_SNAP;
+ break;
+ }
+ }
+
+ if (retval != OPERATOR_PASS_THROUGH) {
+ manipulator_tweak_finish(C, op, retval != OPERATOR_FINISHED, clear_modal);
+ return retval;
+ }
+
+ /* handle manipulator */
+ wmManipulatorFnModal modal_fn = mpr->custom_modal ? mpr->custom_modal : mpr->type->modal;
+ if (modal_fn) {
+ int modal_retval = modal_fn(C, mpr, event, mtweak->flag);
+
+ if ((modal_retval & OPERATOR_RUNNING_MODAL) == 0) {
+ manipulator_tweak_finish(C, op, (modal_retval & OPERATOR_CANCELLED) != 0, true);
+ return OPERATOR_FINISHED;
+ }
+
+ /* Ugly hack to send manipulator events */
+ ((wmEvent *)event)->type = EVT_MANIPULATOR_UPDATE;
+ }
+
+ /* always return PASS_THROUGH so modal handlers
+ * with manipulators attached can update */
+ BLI_assert(retval == OPERATOR_PASS_THROUGH);
+ return OPERATOR_PASS_THROUGH;
+}
+
+static int manipulator_tweak_invoke(bContext *C, wmOperator *op, const wmEvent *event)
+{
+ ARegion *ar = CTX_wm_region(C);
+ wmManipulatorMap *mmap = ar->manipulator_map;
+ wmManipulator *mpr = mmap->mmap_context.highlight;
+
+ /* Needed for single click actions which don't enter modal state. */
+ WM_tooltip_clear(C, CTX_wm_window(C));
+
+ if (!mpr) {
+ /* wm_handlers_do_intern shouldn't let this happen */
+ BLI_assert(0);
+ return (OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH);
+ }
+
+ bool use_drag_fallback = false;
+
+#ifdef USE_DRAG_DETECT
+ use_drag_fallback = !ELEM(mpr->drag_part, -1, mpr->highlight_part);
+#endif
+
+ if (use_drag_fallback == false) {
+ if (manipulator_tweak_start_and_finish(C, mmap, mpr, event, NULL)) {
+ return OPERATOR_FINISHED;
+ }
+ }
+
+ bool use_drag_detect = false;
+#ifdef USE_DRAG_DETECT
+ if (use_drag_fallback) {
+ wmManipulatorOpElem *mpop = WM_manipulator_operator_get(mpr, mpr->highlight_part);
+ if (mpop && mpop->type) {
+ if (mpop->type->modal == NULL) {
+ use_drag_detect = true;
+ }
+ }
+ }
+#endif
+
+ if (use_drag_detect == false) {
+ if (!manipulator_tweak_start(C, mmap, mpr, event)) {
+ /* failed to start */
+ return OPERATOR_PASS_THROUGH;
+ }
+ }
+
+ ManipulatorTweakData *mtweak = MEM_mallocN(sizeof(ManipulatorTweakData), __func__);
+
+ mtweak->init_event = WM_userdef_event_type_from_keymap_type(event->type);
+ mtweak->mpr_modal = mmap->mmap_context.highlight;
+ mtweak->mgroup = mtweak->mpr_modal->parent_mgroup;
+ mtweak->mmap = mmap;
+ mtweak->flag = 0;
+
+#ifdef USE_DRAG_DETECT
+ mtweak->drag_state = use_drag_detect ? DRAG_DETECT : DRAG_NOP;
+#endif
+
+ op->customdata = mtweak;
+
+ WM_event_add_modal_handler(C, op);
+
+ return OPERATOR_RUNNING_MODAL;
+}
+
+void MANIPULATORGROUP_OT_manipulator_tweak(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Manipulator Tweak";
+ ot->description = "Tweak the active manipulator";
+ ot->idname = "MANIPULATORGROUP_OT_manipulator_tweak";
+
+ /* api callbacks */
+ ot->invoke = manipulator_tweak_invoke;
+ ot->modal = manipulator_tweak_modal;
+
+ /* TODO(campbell) This causes problems tweaking settings for operators,
+ * need to find a way to support this. */
+#if 0
+ ot->flag = OPTYPE_UNDO;
+#endif
+}
+
+/** \} */ // Manipulator operators
+
+
+static wmKeyMap *manipulatorgroup_tweak_modal_keymap(wmKeyConfig *keyconf, const char *mgroupname)
+{
+ wmKeyMap *keymap;
+ char name[KMAP_MAX_NAME];
+
+ static EnumPropertyItem modal_items[] = {
+ {TWEAK_MODAL_CANCEL, "CANCEL", 0, "Cancel", ""},
+ {TWEAK_MODAL_CONFIRM, "CONFIRM", 0, "Confirm", ""},
+ {TWEAK_MODAL_PRECISION_ON, "PRECISION_ON", 0, "Enable Precision", ""},
+ {TWEAK_MODAL_PRECISION_OFF, "PRECISION_OFF", 0, "Disable Precision", ""},
+ {TWEAK_MODAL_SNAP_ON, "SNAP_ON", 0, "Enable Snap", ""},
+ {TWEAK_MODAL_SNAP_OFF, "SNAP_OFF", 0, "Disable Snap", ""},
+ {0, NULL, 0, NULL, NULL}
+ };
+
+
+ BLI_snprintf(name, sizeof(name), "%s Tweak Modal Map", mgroupname);
+ keymap = WM_modalkeymap_get(keyconf, name);
+
+ /* this function is called for each spacetype, only needs to add map once */
+ if (keymap && keymap->modal_items)
+ return NULL;
+
+ keymap = WM_modalkeymap_add(keyconf, name, modal_items);
+
+
+ /* items for modal map */
+ WM_modalkeymap_add_item(keymap, ESCKEY, KM_PRESS, KM_ANY, 0, TWEAK_MODAL_CANCEL);
+ WM_modalkeymap_add_item(keymap, RIGHTMOUSE, KM_PRESS, KM_ANY, 0, TWEAK_MODAL_CANCEL);
+
+ WM_modalkeymap_add_item(keymap, RETKEY, KM_PRESS, KM_ANY, 0, TWEAK_MODAL_CONFIRM);
+ WM_modalkeymap_add_item(keymap, PADENTER, KM_PRESS, KM_ANY, 0, TWEAK_MODAL_CONFIRM);
+
+ WM_modalkeymap_add_item(keymap, RIGHTSHIFTKEY, KM_PRESS, KM_ANY, 0, TWEAK_MODAL_PRECISION_ON);
+ WM_modalkeymap_add_item(keymap, RIGHTSHIFTKEY, KM_RELEASE, KM_ANY, 0, TWEAK_MODAL_PRECISION_OFF);
+ WM_modalkeymap_add_item(keymap, LEFTSHIFTKEY, KM_PRESS, KM_ANY, 0, TWEAK_MODAL_PRECISION_ON);
+ WM_modalkeymap_add_item(keymap, LEFTSHIFTKEY, KM_RELEASE, KM_ANY, 0, TWEAK_MODAL_PRECISION_OFF);
+
+ WM_modalkeymap_add_item(keymap, RIGHTCTRLKEY, KM_PRESS, KM_ANY, 0, TWEAK_MODAL_SNAP_ON);
+ WM_modalkeymap_add_item(keymap, RIGHTCTRLKEY, KM_RELEASE, KM_ANY, 0, TWEAK_MODAL_SNAP_OFF);
+ WM_modalkeymap_add_item(keymap, LEFTCTRLKEY, KM_PRESS, KM_ANY, 0, TWEAK_MODAL_SNAP_ON);
+ WM_modalkeymap_add_item(keymap, LEFTCTRLKEY, KM_RELEASE, KM_ANY, 0, TWEAK_MODAL_SNAP_OFF);
+
+ WM_modalkeymap_assign(keymap, "MANIPULATORGROUP_OT_manipulator_tweak");
+
+ return keymap;
+}
+
+/**
+ * Common default keymap for manipulator groups
+ */
+wmKeyMap *WM_manipulatorgroup_keymap_common(
+ const wmManipulatorGroupType *wgt, wmKeyConfig *config)
+{
+ /* Use area and region id since we might have multiple manipulators with the same name in different areas/regions */
+ wmKeyMap *km = WM_keymap_find(config, wgt->name, wgt->mmap_params.spaceid, wgt->mmap_params.regionid);
+
+ WM_keymap_add_item(km, "MANIPULATORGROUP_OT_manipulator_tweak", LEFTMOUSE, KM_PRESS, KM_ANY, 0);
+ manipulatorgroup_tweak_modal_keymap(config, wgt->name);
+
+ return km;
+}
+
+/**
+ * Variation of #WM_manipulatorgroup_keymap_common but with keymap items for selection
+ */
+wmKeyMap *WM_manipulatorgroup_keymap_common_select(
+ const wmManipulatorGroupType *wgt, wmKeyConfig *config)
+{
+ /* Use area and region id since we might have multiple manipulators with the same name in different areas/regions */
+ wmKeyMap *km = WM_keymap_find(config, wgt->name, wgt->mmap_params.spaceid, wgt->mmap_params.regionid);
+
+ WM_keymap_add_item(km, "MANIPULATORGROUP_OT_manipulator_tweak", ACTIONMOUSE, KM_PRESS, KM_ANY, 0);
+ WM_keymap_add_item(km, "MANIPULATORGROUP_OT_manipulator_tweak", EVT_TWEAK_S, KM_ANY, 0, 0);
+ manipulatorgroup_tweak_modal_keymap(config, wgt->name);
+
+ wmKeyMapItem *kmi = WM_keymap_add_item(km, "MANIPULATORGROUP_OT_manipulator_select", SELECTMOUSE, KM_PRESS, 0, 0);
+ RNA_boolean_set(kmi->ptr, "extend", false);
+ RNA_boolean_set(kmi->ptr, "deselect", false);
+ RNA_boolean_set(kmi->ptr, "toggle", false);
+ kmi = WM_keymap_add_item(km, "MANIPULATORGROUP_OT_manipulator_select", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0);
+ RNA_boolean_set(kmi->ptr, "extend", false);
+ RNA_boolean_set(kmi->ptr, "deselect", false);
+ RNA_boolean_set(kmi->ptr, "toggle", true);
+
+ return km;
+}
+
+/** \} */ /* wmManipulatorGroup */
+
+/* -------------------------------------------------------------------- */
+/** \name wmManipulatorGroupType
+ *
+ * \{ */
+
+struct wmManipulatorGroupTypeRef *WM_manipulatormaptype_group_find_ptr(
+ struct wmManipulatorMapType *mmap_type,
+ const wmManipulatorGroupType *wgt)
+{
+ /* could use hash lookups as operator types do, for now simple search. */
+ for (wmManipulatorGroupTypeRef *wgt_ref = mmap_type->grouptype_refs.first;
+ wgt_ref;
+ wgt_ref = wgt_ref->next)
+ {
+ if (wgt_ref->type == wgt) {
+ return wgt_ref;
+ }
+ }
+ return NULL;
+}
+
+struct wmManipulatorGroupTypeRef *WM_manipulatormaptype_group_find(
+ struct wmManipulatorMapType *mmap_type,
+ const char *idname)
+{
+ /* could use hash lookups as operator types do, for now simple search. */
+ for (wmManipulatorGroupTypeRef *wgt_ref = mmap_type->grouptype_refs.first;
+ wgt_ref;
+ wgt_ref = wgt_ref->next)
+ {
+ if (STREQ(idname, wgt_ref->type->idname)) {
+ return wgt_ref;
+ }
+ }
+ return NULL;
+}
+
+/**
+ * Use this for registering manipulators on startup. For runtime, use #WM_manipulatormaptype_group_link_runtime.
+ */
+wmManipulatorGroupTypeRef *WM_manipulatormaptype_group_link(
+ wmManipulatorMapType *mmap_type, const char *idname)
+{
+ wmManipulatorGroupType *wgt = WM_manipulatorgrouptype_find(idname, false);
+ BLI_assert(wgt != NULL);
+ return WM_manipulatormaptype_group_link_ptr(mmap_type, wgt);
+}
+
+wmManipulatorGroupTypeRef *WM_manipulatormaptype_group_link_ptr(
+ wmManipulatorMapType *mmap_type, wmManipulatorGroupType *wgt)
+{
+ wmManipulatorGroupTypeRef *wgt_ref = MEM_callocN(sizeof(wmManipulatorGroupTypeRef), "manipulator-group-ref");
+ wgt_ref->type = wgt;
+ BLI_addtail(&mmap_type->grouptype_refs, wgt_ref);
+ return wgt_ref;
+}
+
+void WM_manipulatormaptype_group_init_runtime_keymap(
+ const Main *bmain,
+ wmManipulatorGroupType *wgt)
+{
+ /* init keymap - on startup there's an extra call to init keymaps for 'permanent' manipulator-groups */
+ wm_manipulatorgrouptype_setup_keymap(wgt, ((wmWindowManager *)bmain->wm.first)->defaultconf);
+}
+
+void WM_manipulatormaptype_group_init_runtime(
+ const Main *bmain, wmManipulatorMapType *mmap_type,
+ wmManipulatorGroupType *wgt)
+{
+ /* now create a manipulator for all existing areas */
+ for (bScreen *sc = bmain->screen.first; sc; sc = sc->id.next) {
+ for (ScrArea *sa = sc->areabase.first; sa; sa = sa->next) {
+ for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) {
+ ListBase *lb = (sl == sa->spacedata.first) ? &sa->regionbase : &sl->regionbase;
+ for (ARegion *ar = lb->first; ar; ar = ar->next) {
+ wmManipulatorMap *mmap = ar->manipulator_map;
+ if (mmap && mmap->type == mmap_type) {
+ wm_manipulatorgroup_new_from_type(mmap, wgt);
+
+ /* just add here, drawing will occur on next update */
+ wm_manipulatormap_highlight_set(mmap, NULL, NULL, 0);
+ ED_region_tag_redraw(ar);
+ }
+ }
+ }
+ }
+ }
+}
+
+
+/**
+ * Unlike #WM_manipulatormaptype_group_unlink this doesn't maintain correct state, simply free.
+ */
+void WM_manipulatormaptype_group_free(wmManipulatorGroupTypeRef *wgt_ref)
+{
+ MEM_freeN(wgt_ref);
+}
+
+void WM_manipulatormaptype_group_unlink(
+ bContext *C, Main *bmain, wmManipulatorMapType *mmap_type,
+ const wmManipulatorGroupType *wgt)
+{
+ /* Free instances. */
+ for (bScreen *sc = bmain->screen.first; sc; sc = sc->id.next) {
+ for (ScrArea *sa = sc->areabase.first; sa; sa = sa->next) {
+ for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) {
+ ListBase *lb = (sl == sa->spacedata.first) ? &sa->regionbase : &sl->regionbase;
+ for (ARegion *ar = lb->first; ar; ar = ar->next) {
+ wmManipulatorMap *mmap = ar->manipulator_map;
+ if (mmap && mmap->type == mmap_type) {
+ wmManipulatorGroup *mgroup, *mgroup_next;
+ for (mgroup = mmap->groups.first; mgroup; mgroup = mgroup_next) {
+ mgroup_next = mgroup->next;
+ if (mgroup->type == wgt) {
+ BLI_assert(mgroup->parent_mmap == mmap);
+ wm_manipulatorgroup_free(C, mgroup);
+ ED_region_tag_redraw(ar);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /* Free types. */
+ wmManipulatorGroupTypeRef *wgt_ref = WM_manipulatormaptype_group_find_ptr(mmap_type, wgt);
+ if (wgt_ref) {
+ BLI_remlink(&mmap_type->grouptype_refs, wgt_ref);
+ WM_manipulatormaptype_group_free(wgt_ref);
+ }
+
+ /* Note, we may want to keep this keymap for editing */
+ WM_keymap_remove(wgt->keyconf, wgt->keymap);
+
+ BLI_assert(WM_manipulatormaptype_group_find_ptr(mmap_type, wgt) == NULL);
+}
+
+void wm_manipulatorgrouptype_setup_keymap(
+ wmManipulatorGroupType *wgt, wmKeyConfig *keyconf)
+{
+ /* Use flag since setup_keymap may return NULL,
+ * in that case we better not keep calling it. */
+ if (wgt->type_update_flag & WM_MANIPULATORMAPTYPE_KEYMAP_INIT) {
+ wgt->keymap = wgt->setup_keymap(wgt, keyconf);
+ wgt->keyconf = keyconf;
+ wgt->type_update_flag &= ~WM_MANIPULATORMAPTYPE_KEYMAP_INIT;
+ }
+}
+
+/** \} */ /* wmManipulatorGroupType */
+
+/* -------------------------------------------------------------------- */
+/** \name High Level Add/Remove API
+ *
+ * For use directly from operators & RNA registration.
+ *
+ * \note In context of manipulator API these names are a bit misleading,
+ * but for general use terms its OK.
+ * `WM_manipulator_group_type_add` would be more correctly called:
+ * `WM_manipulatormaptype_grouptype_reference_link`
+ * but for general purpose API this is too detailed & annoying.
+ *
+ * \note We may want to return a value if there is nothing to remove.
+ *
+ * \{ */
+
+void WM_manipulator_group_type_add_ptr_ex(
+ wmManipulatorGroupType *wgt,
+ wmManipulatorMapType *mmap_type)
+{
+ WM_manipulatormaptype_group_link_ptr(mmap_type, wgt);
+
+ WM_manipulatorconfig_update_tag_init(mmap_type, wgt);
+}
+void WM_manipulator_group_type_add_ptr(
+ wmManipulatorGroupType *wgt)
+{
+ wmManipulatorMapType *mmap_type = WM_manipulatormaptype_ensure(&wgt->mmap_params);
+ WM_manipulator_group_type_add_ptr_ex(wgt, mmap_type);
+}
+void WM_manipulator_group_type_add(const char *idname)
+{
+ wmManipulatorGroupType *wgt = WM_manipulatorgrouptype_find(idname, false);
+ BLI_assert(wgt != NULL);
+ WM_manipulator_group_type_add_ptr(wgt);
+}
+
+void WM_manipulator_group_type_ensure_ptr_ex(
+ wmManipulatorGroupType *wgt,
+ wmManipulatorMapType *mmap_type)
+{
+ wmManipulatorGroupTypeRef *wgt_ref = WM_manipulatormaptype_group_find_ptr(mmap_type, wgt);
+ if (wgt_ref == NULL) {
+ WM_manipulator_group_type_add_ptr_ex(wgt, mmap_type);
+ }
+}
+void WM_manipulator_group_type_ensure_ptr(
+ wmManipulatorGroupType *wgt)
+{
+ wmManipulatorMapType *mmap_type = WM_manipulatormaptype_ensure(&wgt->mmap_params);
+ WM_manipulator_group_type_ensure_ptr_ex(wgt, mmap_type);
+}
+void WM_manipulator_group_type_ensure(const char *idname)
+{
+ wmManipulatorGroupType *wgt = WM_manipulatorgrouptype_find(idname, false);
+ BLI_assert(wgt != NULL);
+ WM_manipulator_group_type_ensure_ptr(wgt);
+}
+
+void WM_manipulator_group_type_remove_ptr_ex(
+ struct Main *bmain, wmManipulatorGroupType *wgt,
+ wmManipulatorMapType *mmap_type)
+{
+ WM_manipulatormaptype_group_unlink(NULL, bmain, mmap_type, wgt);
+ WM_manipulatorgrouptype_free_ptr(wgt);
+}
+void WM_manipulator_group_type_remove_ptr(
+ struct Main *bmain, wmManipulatorGroupType *wgt)
+{
+ wmManipulatorMapType *mmap_type = WM_manipulatormaptype_ensure(&wgt->mmap_params);
+ WM_manipulator_group_type_remove_ptr_ex(bmain, wgt, mmap_type);
+}
+void WM_manipulator_group_type_remove(struct Main *bmain, const char *idname)
+{
+ wmManipulatorGroupType *wgt = WM_manipulatorgrouptype_find(idname, false);
+ BLI_assert(wgt != NULL);
+ WM_manipulator_group_type_remove_ptr(bmain, wgt);
+}
+
+/* delayed versions */
+
+void WM_manipulator_group_type_unlink_delayed_ptr_ex(
+ wmManipulatorGroupType *wgt,
+ wmManipulatorMapType *mmap_type)
+{
+ WM_manipulatorconfig_update_tag_remove(mmap_type, wgt);
+}
+
+void WM_manipulator_group_type_unlink_delayed_ptr(
+ wmManipulatorGroupType *wgt)
+{
+ wmManipulatorMapType *mmap_type = WM_manipulatormaptype_ensure(&wgt->mmap_params);
+ WM_manipulator_group_type_unlink_delayed_ptr_ex(wgt, mmap_type);
+}
+
+void WM_manipulator_group_type_unlink_delayed(const char *idname)
+{
+ wmManipulatorGroupType *wgt = WM_manipulatorgrouptype_find(idname, false);
+ BLI_assert(wgt != NULL);
+ WM_manipulator_group_type_unlink_delayed_ptr(wgt);
+}
+
+/** \} */
diff --git a/source/blender/windowmanager/manipulators/intern/wm_manipulator_group_type.c b/source/blender/windowmanager/manipulators/intern/wm_manipulator_group_type.c
new file mode 100644
index 00000000000..d97305458e8
--- /dev/null
+++ b/source/blender/windowmanager/manipulators/intern/wm_manipulator_group_type.c
@@ -0,0 +1,198 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/windowmanager/manipulators/intern/wm_manipulator_group_type.c
+ * \ingroup wm
+ */
+
+#include "BLI_utildefines.h"
+#include "BLI_ghash.h"
+#include "BLI_string.h"
+#include "BLI_string_utils.h"
+
+#include "BKE_context.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "RNA_access.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+/* only for own init/exit calls (wm_manipulatorgrouptype_init/wm_manipulatorgrouptype_free) */
+#include "wm.h"
+
+/* own includes */
+#include "wm_manipulator_wmapi.h"
+#include "wm_manipulator_intern.h"
+
+
+/** \name ManipulatorGroup Type Append
+ *
+ * \note This follows conventions from #WM_operatortype_find #WM_operatortype_append & friends.
+ * \{ */
+
+static GHash *global_manipulatorgrouptype_hash = NULL;
+
+wmManipulatorGroupType *WM_manipulatorgrouptype_find(const char *idname, bool quiet)
+{
+ if (idname[0]) {
+ wmManipulatorGroupType *wgt;
+
+ wgt = BLI_ghash_lookup(global_manipulatorgrouptype_hash, idname);
+ if (wgt) {
+ return wgt;
+ }
+
+ if (!quiet) {
+ printf("search for unknown manipulator group '%s'\n", idname);
+ }
+ }
+ else {
+ if (!quiet) {
+ printf("search for empty manipulator group\n");
+ }
+ }
+
+ return NULL;
+}
+
+/* caller must free */
+void WM_manipulatorgrouptype_iter(GHashIterator *ghi)
+{
+ BLI_ghashIterator_init(ghi, global_manipulatorgrouptype_hash);
+}
+
+static wmManipulatorGroupType *wm_manipulatorgrouptype_append__begin(void)
+{
+ wmManipulatorGroupType *wgt = MEM_callocN(sizeof(wmManipulatorGroupType), "manipulatorgrouptype");
+
+ return wgt;
+}
+static void wm_manipulatorgrouptype_append__end(wmManipulatorGroupType *wgt)
+{
+ BLI_assert(wgt->name != NULL);
+ BLI_assert(wgt->idname != NULL);
+
+ wgt->type_update_flag |= WM_MANIPULATORMAPTYPE_KEYMAP_INIT;
+
+ /* if not set, use default */
+ if (wgt->setup_keymap == NULL) {
+ if (wgt->flag & WM_MANIPULATORGROUPTYPE_SELECT) {
+ wgt->setup_keymap = WM_manipulatorgroup_keymap_common_select;
+ }
+ else {
+ wgt->setup_keymap = WM_manipulatorgroup_keymap_common;
+ }
+ }
+
+ BLI_ghash_insert(global_manipulatorgrouptype_hash, (void *)wgt->idname, wgt);
+}
+
+wmManipulatorGroupType *WM_manipulatorgrouptype_append(
+ void (*wtfunc)(struct wmManipulatorGroupType *))
+{
+ wmManipulatorGroupType *wgt = wm_manipulatorgrouptype_append__begin();
+ wtfunc(wgt);
+ wm_manipulatorgrouptype_append__end(wgt);
+ return wgt;
+}
+
+wmManipulatorGroupType *WM_manipulatorgrouptype_append_ptr(
+ void (*wtfunc)(struct wmManipulatorGroupType *, void *), void *userdata)
+{
+ wmManipulatorGroupType *wgt = wm_manipulatorgrouptype_append__begin();
+ wtfunc(wgt, userdata);
+ wm_manipulatorgrouptype_append__end(wgt);
+ return wgt;
+}
+
+/**
+ * Append and insert into a manipulator typemap.
+ * This is most common for C manipulators which are enabled by default.
+ */
+wmManipulatorGroupTypeRef *WM_manipulatorgrouptype_append_and_link(
+ wmManipulatorMapType *mmap_type,
+ void (*wtfunc)(struct wmManipulatorGroupType *))
+{
+ wmManipulatorGroupType *wgt = WM_manipulatorgrouptype_append(wtfunc);
+
+ wgt->mmap_params.spaceid = mmap_type->spaceid;
+ wgt->mmap_params.regionid = mmap_type->regionid;
+
+ return WM_manipulatormaptype_group_link_ptr(mmap_type, wgt);
+}
+
+/**
+ * Free but don't remove from ghash.
+ */
+static void manipulatorgrouptype_free(wmManipulatorGroupType *wgt)
+{
+ if (wgt->ext.srna) { /* python manipulator group, allocs own string */
+ MEM_freeN((void *)wgt->idname);
+ }
+
+ MEM_freeN(wgt);
+}
+
+void WM_manipulatorgrouptype_free_ptr(wmManipulatorGroupType *wgt)
+{
+ BLI_assert(wgt == WM_manipulatorgrouptype_find(wgt->idname, false));
+
+ BLI_ghash_remove(global_manipulatorgrouptype_hash, wgt->idname, NULL, NULL);
+
+ manipulatorgrouptype_free(wgt);
+
+ /* XXX, TODO, update the world! */
+}
+
+bool WM_manipulatorgrouptype_free(const char *idname)
+{
+ wmManipulatorGroupType *wgt = BLI_ghash_lookup(global_manipulatorgrouptype_hash, idname);
+
+ if (wgt == NULL) {
+ return false;
+ }
+
+ WM_manipulatorgrouptype_free_ptr(wgt);
+
+ return true;
+}
+
+static void wm_manipulatorgrouptype_ghash_free_cb(wmManipulatorGroupType *mt)
+{
+ manipulatorgrouptype_free(mt);
+}
+
+void wm_manipulatorgrouptype_free(void)
+{
+ BLI_ghash_free(global_manipulatorgrouptype_hash, NULL, (GHashValFreeFP)wm_manipulatorgrouptype_ghash_free_cb);
+ global_manipulatorgrouptype_hash = NULL;
+}
+
+/* called on initialize WM_init() */
+void wm_manipulatorgrouptype_init(void)
+{
+ /* reserve size is set based on blender default setup */
+ global_manipulatorgrouptype_hash = BLI_ghash_str_new_ex("wm_manipulatorgrouptype_init gh", 128);
+}
+
+/** \} */
+
diff --git a/source/blender/windowmanager/manipulators/intern/wm_manipulator_intern.h b/source/blender/windowmanager/manipulators/intern/wm_manipulator_intern.h
new file mode 100644
index 00000000000..b7982cf00df
--- /dev/null
+++ b/source/blender/windowmanager/manipulators/intern/wm_manipulator_intern.h
@@ -0,0 +1,143 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/windowmanager/manipulators/intern/wm_manipulator_intern.h
+ * \ingroup wm
+ */
+
+
+#ifndef __WM_MANIPULATOR_INTERN_H__
+#define __WM_MANIPULATOR_INTERN_H__
+
+struct wmKeyConfig;
+struct wmManipulatorMap;
+struct ManipulatorGeomInfo;
+struct GHashIterator;
+
+#include "wm_manipulator_fn.h"
+
+/* -------------------------------------------------------------------- */
+/* wmManipulator */
+
+
+bool wm_manipulator_select_set_ex(
+ struct wmManipulatorMap *mmap, struct wmManipulator *mpr, bool select,
+ bool use_array, bool use_callback);
+bool wm_manipulator_select_and_highlight(bContext *C, struct wmManipulatorMap *mmap, struct wmManipulator *mpr);
+
+void wm_manipulator_calculate_scale(struct wmManipulator *mpr, const bContext *C);
+void wm_manipulator_update(struct wmManipulator *mpr, const bContext *C, const bool refresh_map);
+
+int wm_manipulator_is_visible(struct wmManipulator *mpr);
+enum {
+ WM_MANIPULATOR_IS_VISIBLE_UPDATE = (1 << 0),
+ WM_MANIPULATOR_IS_VISIBLE_DRAW = (1 << 1),
+};
+
+/* -------------------------------------------------------------------- */
+/* wmManipulatorGroup */
+
+enum {
+ TWEAK_MODAL_CANCEL = 1,
+ TWEAK_MODAL_CONFIRM,
+ TWEAK_MODAL_PRECISION_ON,
+ TWEAK_MODAL_PRECISION_OFF,
+ TWEAK_MODAL_SNAP_ON,
+ TWEAK_MODAL_SNAP_OFF,
+};
+
+struct wmManipulatorGroup *wm_manipulatorgroup_new_from_type(
+ struct wmManipulatorMap *mmap, struct wmManipulatorGroupType *wgt);
+void wm_manipulatorgroup_free(bContext *C, struct wmManipulatorGroup *mgroup);
+void wm_manipulatorgroup_manipulator_register(struct wmManipulatorGroup *mgroup, struct wmManipulator *mpr);
+struct wmManipulator *wm_manipulatorgroup_find_intersected_manipulator(
+ const struct wmManipulatorGroup *mgroup, struct bContext *C, const struct wmEvent *event,
+ int *r_part);
+void wm_manipulatorgroup_intersectable_manipulators_to_list(
+ const struct wmManipulatorGroup *mgroup, struct ListBase *listbase);
+void wm_manipulatorgroup_ensure_initialized(struct wmManipulatorGroup *mgroup, const struct bContext *C);
+bool wm_manipulatorgroup_is_visible(const struct wmManipulatorGroup *mgroup, const struct bContext *C);
+bool wm_manipulatorgroup_is_visible_in_drawstep(
+ const struct wmManipulatorGroup *mgroup, const eWM_ManipulatorMapDrawStep drawstep);
+
+void wm_manipulatorgrouptype_setup_keymap(
+ struct wmManipulatorGroupType *wgt, struct wmKeyConfig *keyconf);
+
+
+/* -------------------------------------------------------------------- */
+/* wmManipulatorMap */
+
+typedef struct wmManipulatorMapSelectState {
+ struct wmManipulator **items;
+ int len, len_alloc;
+} wmManipulatorMapSelectState;
+
+struct wmManipulatorMap {
+
+ struct wmManipulatorMapType *type;
+ ListBase groups; /* wmManipulatorGroup */
+
+ /* private, update tagging (enum defined in C source). */
+ char update_flag[WM_MANIPULATORMAP_DRAWSTEP_MAX];
+
+ /**
+ * \brief Manipulator map runtime context
+ *
+ * Contains information about this manipulator-map. Currently
+ * highlighted manipulator, currently selected manipulators, ...
+ */
+ struct {
+ /* we redraw the manipulator-map when this changes */
+ struct wmManipulator *highlight;
+ /* User has clicked this manipulator and it gets all input. */
+ struct wmManipulator *modal;
+ /* array for all selected manipulators */
+ struct wmManipulatorMapSelectState select;
+ /* cursor location at point of entering modal (see: WM_MANIPULATOR_GRAB_CURSOR) */
+ int event_xy[2];
+ short event_grabcursor;
+ } mmap_context;
+};
+
+/**
+ * This is a container for all manipulator types that can be instantiated in a region.
+ * (similar to dropboxes).
+ *
+ * \note There is only ever one of these for every (area, region) combination.
+ */
+struct wmManipulatorMapType {
+ struct wmManipulatorMapType *next, *prev;
+ short spaceid, regionid;
+ /* types of manipulator-groups for this manipulator-map type */
+ ListBase grouptype_refs;
+
+ /* eManipulatorMapTypeUpdateFlags */
+ eWM_ManipulatorMapTypeUpdateFlag type_update_flag;
+};
+
+void wm_manipulatormap_select_array_clear(struct wmManipulatorMap *mmap);
+bool wm_manipulatormap_deselect_all(struct wmManipulatorMap *mmap);
+void wm_manipulatormap_select_array_shrink(struct wmManipulatorMap *mmap, int len_subtract);
+void wm_manipulatormap_select_array_push_back(struct wmManipulatorMap *mmap, wmManipulator *mpr);
+void wm_manipulatormap_select_array_remove(struct wmManipulatorMap *mmap, wmManipulator *mpr);
+
+#endif
diff --git a/source/blender/windowmanager/manipulators/intern/wm_manipulator_map.c b/source/blender/windowmanager/manipulators/intern/wm_manipulator_map.c
new file mode 100644
index 00000000000..a9875020fbb
--- /dev/null
+++ b/source/blender/windowmanager/manipulators/intern/wm_manipulator_map.c
@@ -0,0 +1,1197 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2014 Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): Blender Foundation
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/windowmanager/manipulators/intern/wm_manipulator_map.c
+ * \ingroup wm
+ */
+
+#include <string.h>
+
+#include "BLI_listbase.h"
+#include "BLI_math.h"
+#include "BLI_rect.h"
+#include "BLI_string.h"
+#include "BLI_ghash.h"
+
+#include "BKE_context.h"
+#include "BKE_global.h"
+
+#include "ED_screen.h"
+#include "ED_view3d.h"
+
+#include "GPU_glew.h"
+#include "GPU_matrix.h"
+#include "GPU_select.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+#include "wm_event_system.h"
+
+/* for tool-tips */
+#include "UI_interface.h"
+
+#include "DEG_depsgraph.h"
+
+/* own includes */
+#include "wm_manipulator_wmapi.h"
+#include "wm_manipulator_intern.h"
+
+/**
+ * Store all manipulator-maps here. Anyone who wants to register a manipulator for a certain
+ * area type can query the manipulator-map to do so.
+ */
+static ListBase manipulatormaptypes = {NULL, NULL};
+
+/**
+ * Update when manipulator-map types change.
+ */
+/* so operator removal can trigger update */
+typedef enum eWM_ManipulatorGroupTypeGlobalFlag {
+ WM_MANIPULATORMAPTYPE_GLOBAL_UPDATE_INIT = (1 << 0),
+ WM_MANIPULATORMAPTYPE_GLOBAL_UPDATE_REMOVE = (1 << 1),
+} eWM_ManipulatorGroupTypeGlobalFlag;
+
+static eWM_ManipulatorGroupTypeGlobalFlag wm_mmap_type_update_flag = 0;
+
+/**
+ * Manipulator-map update tagging.
+ */
+enum {
+ /** #manipulatormap_prepare_drawing has run */
+ MANIPULATORMAP_IS_PREPARE_DRAW = (1 << 0),
+ MANIPULATORMAP_IS_REFRESH_CALLBACK = (1 << 1),
+};
+
+
+/* -------------------------------------------------------------------- */
+/** \name wmManipulatorMap Selection Array API
+ *
+ * Just handle ``wm_manipulatormap_select_array_*``, not flags or callbacks.
+ *
+ * \{ */
+
+static void wm_manipulatormap_select_array_ensure_len_alloc(wmManipulatorMap *mmap, int len)
+{
+ wmManipulatorMapSelectState *msel = &mmap->mmap_context.select;
+ if (len <= msel->len_alloc) {
+ return;
+ }
+ msel->items = MEM_reallocN(msel->items, sizeof(*msel->items) * len);
+ msel->len_alloc = len;
+}
+
+void wm_manipulatormap_select_array_clear(wmManipulatorMap *mmap)
+{
+ wmManipulatorMapSelectState *msel = &mmap->mmap_context.select;
+ MEM_SAFE_FREE(msel->items);
+ msel->len = 0;
+ msel->len_alloc = 0;
+}
+
+void wm_manipulatormap_select_array_shrink(wmManipulatorMap *mmap, int len_subtract)
+{
+ wmManipulatorMapSelectState *msel = &mmap->mmap_context.select;
+ msel->len -= len_subtract;
+ if (msel->len <= 0) {
+ wm_manipulatormap_select_array_clear(mmap);
+ }
+ else {
+ if (msel->len < msel->len_alloc / 2) {
+ msel->items = MEM_reallocN(msel->items, sizeof(*msel->items) * msel->len);
+ msel->len_alloc = msel->len;
+ }
+ }
+}
+
+void wm_manipulatormap_select_array_push_back(wmManipulatorMap *mmap, wmManipulator *mpr)
+{
+ wmManipulatorMapSelectState *msel = &mmap->mmap_context.select;
+ BLI_assert(msel->len <= msel->len_alloc);
+ if (msel->len == msel->len_alloc) {
+ msel->len_alloc = (msel->len + 1) * 2;
+ msel->items = MEM_reallocN(msel->items, sizeof(*msel->items) * msel->len_alloc);
+ }
+ msel->items[msel->len++] = mpr;
+}
+
+void wm_manipulatormap_select_array_remove(wmManipulatorMap *mmap, wmManipulator *mpr)
+{
+ wmManipulatorMapSelectState *msel = &mmap->mmap_context.select;
+ /* remove manipulator from selected_manipulators array */
+ for (int i = 0; i < msel->len; i++) {
+ if (msel->items[i] == mpr) {
+ for (int j = i; j < (msel->len - 1); j++) {
+ msel->items[j] = msel->items[j + 1];
+ }
+ wm_manipulatormap_select_array_shrink(mmap, 1);
+ break;
+ }
+ }
+
+}
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+/** \name wmManipulatorMap
+ *
+ * \{ */
+
+/**
+ * Creates a manipulator-map with all registered manipulators for that type
+ */
+wmManipulatorMap *WM_manipulatormap_new_from_type(
+ const struct wmManipulatorMapType_Params *mmap_params)
+{
+ wmManipulatorMapType *mmap_type = WM_manipulatormaptype_ensure(mmap_params);
+ wmManipulatorMap *mmap;
+
+ mmap = MEM_callocN(sizeof(wmManipulatorMap), "ManipulatorMap");
+ mmap->type = mmap_type;
+ WM_manipulatormap_tag_refresh(mmap);
+
+ /* create all manipulator-groups for this manipulator-map. We may create an empty one
+ * too in anticipation of manipulators from operators etc */
+ for (wmManipulatorGroupTypeRef *wgt_ref = mmap_type->grouptype_refs.first; wgt_ref; wgt_ref = wgt_ref->next) {
+ wm_manipulatorgroup_new_from_type(mmap, wgt_ref->type);
+ }
+
+ return mmap;
+}
+
+void wm_manipulatormap_remove(wmManipulatorMap *mmap)
+{
+ /* Clear first so further calls don't waste time trying to maintain correct array state. */
+ wm_manipulatormap_select_array_clear(mmap);
+
+ for (wmManipulatorGroup *mgroup = mmap->groups.first, *mgroup_next; mgroup; mgroup = mgroup_next) {
+ mgroup_next = mgroup->next;
+ BLI_assert(mgroup->parent_mmap == mmap);
+ wm_manipulatorgroup_free(NULL, mgroup);
+ }
+ BLI_assert(BLI_listbase_is_empty(&mmap->groups));
+
+ MEM_freeN(mmap);
+}
+
+
+wmManipulatorGroup *WM_manipulatormap_group_find(
+ struct wmManipulatorMap *mmap,
+ const char *idname)
+{
+ wmManipulatorGroupType *wgt = WM_manipulatorgrouptype_find(idname, false);
+ if (wgt) {
+ return WM_manipulatormap_group_find_ptr(mmap, wgt);
+ }
+ return NULL;
+}
+
+wmManipulatorGroup *WM_manipulatormap_group_find_ptr(
+ struct wmManipulatorMap *mmap,
+ const struct wmManipulatorGroupType *wgt)
+{
+ for (wmManipulatorGroup *mgroup = mmap->groups.first; mgroup; mgroup = mgroup->next) {
+ if (mgroup->type == wgt) {
+ return mgroup;
+ }
+ }
+ return NULL;
+}
+
+const ListBase *WM_manipulatormap_group_list(wmManipulatorMap *mmap)
+{
+ return &mmap->groups;
+}
+
+bool WM_manipulatormap_is_any_selected(const wmManipulatorMap *mmap)
+{
+ return mmap->mmap_context.select.len != 0;
+}
+
+/**
+ * \note We could use a callback to define bounds, for now just use matrix location.
+ */
+bool WM_manipulatormap_minmax(
+ const wmManipulatorMap *mmap, bool UNUSED(use_hidden), bool use_select,
+ float r_min[3], float r_max[3])
+{
+ if (use_select) {
+ int i;
+ for (i = 0; i < mmap->mmap_context.select.len; i++) {
+ minmax_v3v3_v3(r_min, r_max, mmap->mmap_context.select.items[i]->matrix_basis[3]);
+ }
+ return i != 0;
+ }
+ else {
+ bool ok = false;
+ BLI_assert(!"TODO");
+ return ok;
+ }
+}
+
+/**
+ * Creates and returns idname hash table for (visible) manipulators in \a mmap
+ *
+ * \param poll Polling function for excluding manipulators.
+ * \param data Custom data passed to \a poll
+ *
+ * TODO(campbell): this uses unreliable order,
+ * best we use an iterator function instead of a hash.
+ */
+static GHash *WM_manipulatormap_manipulator_hash_new(
+ const bContext *C, wmManipulatorMap *mmap,
+ bool (*poll)(const wmManipulator *, void *),
+ void *data, const bool include_hidden)
+{
+ GHash *hash = BLI_ghash_ptr_new(__func__);
+
+ /* collect manipulators */
+ for (wmManipulatorGroup *mgroup = mmap->groups.first; mgroup; mgroup = mgroup->next) {
+ if (!mgroup->type->poll || mgroup->type->poll(C, mgroup->type)) {
+ for (wmManipulator *mpr = mgroup->manipulators.first; mpr; mpr = mpr->next) {
+ if ((include_hidden || (mpr->flag & WM_MANIPULATOR_HIDDEN) == 0) &&
+ (!poll || poll(mpr, data)))
+ {
+ BLI_ghash_insert(hash, mpr, mpr);
+ }
+ }
+ }
+ }
+
+ return hash;
+}
+
+void WM_manipulatormap_tag_refresh(wmManipulatorMap *mmap)
+{
+ if (mmap) {
+ /* We might want only to refresh some, for tag all steps. */
+ for (int i = 0; i < WM_MANIPULATORMAP_DRAWSTEP_MAX; i++) {
+ mmap->update_flag[i] |= (
+ MANIPULATORMAP_IS_PREPARE_DRAW |
+ MANIPULATORMAP_IS_REFRESH_CALLBACK);
+ }
+ }
+}
+
+static bool manipulator_prepare_drawing(
+ wmManipulatorMap *mmap, wmManipulator *mpr,
+ const bContext *C, ListBase *draw_manipulators,
+ const eWM_ManipulatorMapDrawStep drawstep)
+{
+ int do_draw = wm_manipulator_is_visible(mpr);
+ if (do_draw == 0) {
+ /* skip */
+ }
+ else {
+ /* Ensure we get RNA updates */
+ if (do_draw & WM_MANIPULATOR_IS_VISIBLE_UPDATE) {
+ /* hover manipulators need updating, even if we don't draw them */
+ wm_manipulator_update(mpr, C, (mmap->update_flag[drawstep] & MANIPULATORMAP_IS_PREPARE_DRAW) != 0);
+ }
+ if (do_draw & WM_MANIPULATOR_IS_VISIBLE_DRAW) {
+ BLI_addhead(draw_manipulators, BLI_genericNodeN(mpr));
+ }
+ return true;
+ }
+
+ return false;
+}
+
+/**
+ * Update manipulators of \a mmap to prepare for drawing. Adds all manipulators that
+ * should be drawn to list \a draw_manipulators, note that added items need freeing.
+ */
+static void manipulatormap_prepare_drawing(
+ wmManipulatorMap *mmap, const bContext *C, ListBase *draw_manipulators,
+ const eWM_ManipulatorMapDrawStep drawstep)
+{
+ if (!mmap || BLI_listbase_is_empty(&mmap->groups))
+ return;
+ wmManipulator *mpr_modal = mmap->mmap_context.modal;
+
+ /* only active manipulator needs updating */
+ if (mpr_modal) {
+ if ((mpr_modal->parent_mgroup->type->flag & WM_MANIPULATORGROUPTYPE_DRAW_MODAL_ALL) == 0) {
+ if (wm_manipulatorgroup_is_visible_in_drawstep(mpr_modal->parent_mgroup, drawstep)) {
+ if (manipulator_prepare_drawing(mmap, mpr_modal, C, draw_manipulators, drawstep)) {
+ mmap->update_flag[drawstep] &= ~MANIPULATORMAP_IS_PREPARE_DRAW;
+ }
+ }
+ /* don't draw any other manipulators */
+ return;
+ }
+ }
+
+ for (wmManipulatorGroup *mgroup = mmap->groups.first; mgroup; mgroup = mgroup->next) {
+ /* check group visibility - drawstep first to avoid unnecessary call of group poll callback */
+ if (!wm_manipulatorgroup_is_visible_in_drawstep(mgroup, drawstep) ||
+ !wm_manipulatorgroup_is_visible(mgroup, C))
+ {
+ continue;
+ }
+
+ /* needs to be initialized on first draw */
+ /* XXX weak: Manipulator-group may skip refreshing if it's invisible (map gets untagged nevertheless) */
+ if (mmap->update_flag[drawstep] & MANIPULATORMAP_IS_REFRESH_CALLBACK) {
+ /* force refresh again. */
+ mgroup->init_flag &= ~WM_MANIPULATORGROUP_INIT_REFRESH;
+ }
+ /* Calls `setup`, `setup_keymap` and `refresh` if they're defined. */
+ wm_manipulatorgroup_ensure_initialized(mgroup, C);
+
+ /* prepare drawing */
+ if (mgroup->type->draw_prepare) {
+ mgroup->type->draw_prepare(C, mgroup);
+ }
+
+ for (wmManipulator *mpr = mgroup->manipulators.first; mpr; mpr = mpr->next) {
+ manipulator_prepare_drawing(mmap, mpr, C, draw_manipulators, drawstep);
+ }
+ }
+
+ mmap->update_flag[drawstep] &=
+ ~(MANIPULATORMAP_IS_REFRESH_CALLBACK |
+ MANIPULATORMAP_IS_PREPARE_DRAW);
+}
+
+/**
+ * Draw all visible manipulators in \a mmap.
+ * Uses global draw_manipulators listbase.
+ */
+static void manipulators_draw_list(const wmManipulatorMap *mmap, const bContext *C, ListBase *draw_manipulators)
+{
+ /* Can be empty if we're dynamically added and removed. */
+ if ((mmap == NULL) || BLI_listbase_is_empty(&mmap->groups)) {
+ return;
+ }
+
+ const bool draw_multisample = (U.ogl_multisamples != USER_MULTISAMPLE_NONE);
+
+ /* TODO this will need it own shader probably? don't think it can be handled from that point though. */
+/* const bool use_lighting = (U.manipulator_flag & V3D_MANIPULATOR_SHADED) != 0; */
+
+ /* enable multisampling */
+ if (draw_multisample) {
+ glEnable(GL_MULTISAMPLE);
+ }
+
+ bool is_depth_prev = false;
+
+ /* draw_manipulators contains all visible manipulators - draw them */
+ for (LinkData *link = draw_manipulators->first, *link_next; link; link = link_next) {
+ wmManipulator *mpr = link->data;
+ link_next = link->next;
+
+ bool is_depth = (mpr->parent_mgroup->type->flag & WM_MANIPULATORGROUPTYPE_DEPTH_3D) != 0;
+
+ /* Weak! since we don't 100% support depth yet (select ignores depth) always show highlighted */
+ if (is_depth && (mpr->state & WM_MANIPULATOR_STATE_HIGHLIGHT)) {
+ is_depth = false;
+ }
+
+ if (is_depth == is_depth_prev) {
+ /* pass */
+ }
+ else {
+ if (is_depth) {
+ glEnable(GL_DEPTH_TEST);
+ }
+ else {
+ glDisable(GL_DEPTH_TEST);
+ }
+ is_depth_prev = is_depth;
+ }
+
+ mpr->type->draw(C, mpr);
+ /* free/remove manipulator link after drawing */
+ BLI_freelinkN(draw_manipulators, link);
+ }
+
+ if (is_depth_prev) {
+ glDisable(GL_DEPTH_TEST);
+ }
+
+ if (draw_multisample) {
+ glDisable(GL_MULTISAMPLE);
+ }
+}
+
+void WM_manipulatormap_draw(
+ wmManipulatorMap *mmap, const bContext *C,
+ const eWM_ManipulatorMapDrawStep drawstep)
+{
+ if (!WM_manipulator_context_check_drawstep(C, drawstep)) {
+ return;
+ }
+
+ ListBase draw_manipulators = {NULL};
+
+ manipulatormap_prepare_drawing(mmap, C, &draw_manipulators, drawstep);
+ manipulators_draw_list(mmap, C, &draw_manipulators);
+ BLI_assert(BLI_listbase_is_empty(&draw_manipulators));
+}
+
+static void manipulator_draw_select_3D_loop(const bContext *C, ListBase *visible_manipulators)
+{
+ int select_id = 0;
+ wmManipulator *mpr;
+
+ /* TODO(campbell): this depends on depth buffer being written to, currently broken for the 3D view. */
+ bool is_depth_prev = false;
+
+ for (LinkData *link = visible_manipulators->first; link; link = link->next) {
+ mpr = link->data;
+
+ bool is_depth = (mpr->parent_mgroup->type->flag & WM_MANIPULATORGROUPTYPE_DEPTH_3D) != 0;
+ if (is_depth == is_depth_prev) {
+ /* pass */
+ }
+ else {
+ if (is_depth) {
+ glEnable(GL_DEPTH_TEST);
+ }
+ else {
+ glDisable(GL_DEPTH_TEST);
+ }
+ is_depth_prev = is_depth;
+ }
+
+ /* pass the selection id shifted by 8 bits. Last 8 bits are used for selected manipulator part id */
+
+ mpr->type->draw_select(C, mpr, select_id << 8);
+
+
+ select_id++;
+ }
+
+ if (is_depth_prev) {
+ glDisable(GL_DEPTH_TEST);
+ }
+}
+
+static int manipulator_find_intersected_3d_intern(
+ ListBase *visible_manipulators, const bContext *C, const int co[2],
+ const int hotspot)
+{
+ EvaluationContext eval_ctx;
+ ScrArea *sa = CTX_wm_area(C);
+ ARegion *ar = CTX_wm_region(C);
+ View3D *v3d = sa->spacedata.first;
+ rcti rect;
+ /* Almost certainly overkill, but allow for many custom manipulators. */
+ GLuint buffer[MAXPICKBUF];
+ short hits;
+ const bool do_passes = GPU_select_query_check_active();
+
+ BLI_rcti_init_pt_radius(&rect, co, hotspot);
+
+ CTX_data_eval_ctx(C, &eval_ctx);
+
+ ED_view3d_draw_setup_view(CTX_wm_window(C), &eval_ctx, CTX_data_scene(C), ar, v3d, NULL, NULL, &rect);
+
+ if (do_passes)
+ GPU_select_begin(buffer, ARRAY_SIZE(buffer), &rect, GPU_SELECT_NEAREST_FIRST_PASS, 0);
+ else
+ GPU_select_begin(buffer, ARRAY_SIZE(buffer), &rect, GPU_SELECT_ALL, 0);
+ /* do the drawing */
+ manipulator_draw_select_3D_loop(C, visible_manipulators);
+
+ hits = GPU_select_end();
+
+ if (do_passes && (hits > 0)) {
+ GPU_select_begin(buffer, ARRAY_SIZE(buffer), &rect, GPU_SELECT_NEAREST_SECOND_PASS, hits);
+ manipulator_draw_select_3D_loop(C, visible_manipulators);
+ GPU_select_end();
+ }
+
+ ED_view3d_draw_setup_view(CTX_wm_window(C), &eval_ctx, CTX_data_scene(C), ar, v3d, NULL, NULL, NULL);
+
+ const GLuint *hit_near = GPU_select_buffer_near(buffer, hits);
+
+ return hit_near ? hit_near[3] : -1;
+}
+
+/**
+ * Try to find a 3D manipulator at screen-space coordinate \a co. Uses OpenGL picking.
+ */
+static wmManipulator *manipulator_find_intersected_3d(
+ bContext *C, const int co[2], ListBase *visible_manipulators,
+ int *r_part)
+{
+ wmManipulator *result = NULL;
+ int hit = -1;
+
+ int hotspot_radii[] = {
+ 3 * U.pixelsize,
+#if 0 /* We may want to enable when selection doesn't run on mousemove! */
+ 7 * U.pixelsize,
+#endif
+ };
+
+ *r_part = 0;
+
+ /* set up view matrices */
+ view3d_operator_needs_opengl(C);
+
+ hit = -1;
+
+ for (int i = 0; i < ARRAY_SIZE(hotspot_radii); i++) {
+ hit = manipulator_find_intersected_3d_intern(visible_manipulators, C, co, hotspot_radii[i]);
+ if (hit != -1) {
+ break;
+ }
+ }
+
+ if (hit != -1) {
+ LinkData *link = BLI_findlink(visible_manipulators, hit >> 8);
+ if (link != NULL) {
+ *r_part = hit & 255;
+ result = link->data;
+ }
+ else {
+ /* All manipulators should use selection ID they're given as part of the callback,
+ * if they don't it will attempt tp lookup non-existing index. */
+ BLI_assert(0);
+ }
+ }
+
+ return result;
+}
+
+/**
+ * Try to find a manipulator under the mouse position. 2D intersections have priority over
+ * 3D ones (could check for smallest screen-space distance but not needed right now).
+ */
+wmManipulator *wm_manipulatormap_highlight_find(
+ wmManipulatorMap *mmap, bContext *C, const wmEvent *event,
+ int *r_part)
+{
+ wmManipulator *mpr = NULL;
+ ListBase visible_3d_manipulators = {NULL};
+ bool do_step[WM_MANIPULATORMAP_DRAWSTEP_MAX];
+
+ for (int i = 0; i < ARRAY_SIZE(do_step); i++) {
+ do_step[i] = WM_manipulator_context_check_drawstep(C, i);
+ }
+
+ for (wmManipulatorGroup *mgroup = mmap->groups.first; mgroup; mgroup = mgroup->next) {
+
+ /* If it were important we could initialize here,
+ * but this only happens when events are handled before drawing,
+ * just skip to keep code-path for initializing manipulators simple. */
+ if ((mgroup->init_flag & WM_MANIPULATORGROUP_INIT_SETUP) == 0) {
+ continue;
+ }
+
+ if (wm_manipulatorgroup_is_visible(mgroup, C)) {
+ eWM_ManipulatorMapDrawStep step;
+ if (mgroup->type->flag & WM_MANIPULATORGROUPTYPE_3D) {
+ step = WM_MANIPULATORMAP_DRAWSTEP_3D;
+ }
+ else {
+ step = WM_MANIPULATORMAP_DRAWSTEP_2D;
+ }
+
+ if (do_step[step]) {
+ if ((mmap->update_flag[step] & MANIPULATORMAP_IS_REFRESH_CALLBACK) &&
+ (mgroup->type->refresh != NULL))
+ {
+ mgroup->type->refresh(C, mgroup);
+ /* cleared below */
+ }
+ if (step == WM_MANIPULATORMAP_DRAWSTEP_3D) {
+ wm_manipulatorgroup_intersectable_manipulators_to_list(mgroup, &visible_3d_manipulators);
+ }
+ else if (step == WM_MANIPULATORMAP_DRAWSTEP_2D) {
+ if ((mpr = wm_manipulatorgroup_find_intersected_manipulator(mgroup, C, event, r_part))) {
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ if (!BLI_listbase_is_empty(&visible_3d_manipulators)) {
+ /* 2D manipulators get priority. */
+ if (mpr == NULL) {
+ mpr = manipulator_find_intersected_3d(C, event->mval, &visible_3d_manipulators, r_part);
+ }
+ BLI_freelistN(&visible_3d_manipulators);
+ }
+
+ mmap->update_flag[WM_MANIPULATORMAP_DRAWSTEP_3D] &= ~MANIPULATORMAP_IS_REFRESH_CALLBACK;
+ mmap->update_flag[WM_MANIPULATORMAP_DRAWSTEP_2D] &= ~MANIPULATORMAP_IS_REFRESH_CALLBACK;
+
+ return mpr;
+}
+
+void WM_manipulatormap_add_handlers(ARegion *ar, wmManipulatorMap *mmap)
+{
+ wmEventHandler *handler;
+
+ for (handler = ar->handlers.first; handler; handler = handler->next) {
+ if (handler->manipulator_map == mmap) {
+ return;
+ }
+ }
+
+ handler = MEM_callocN(sizeof(wmEventHandler), "manipulator handler");
+
+ BLI_assert(mmap == ar->manipulator_map);
+ handler->manipulator_map = mmap;
+ BLI_addtail(&ar->handlers, handler);
+}
+
+void wm_manipulatormaps_handled_modal_update(
+ bContext *C, wmEvent *event, wmEventHandler *handler)
+{
+ const bool modal_running = (handler->op != NULL);
+
+ /* happens on render or when joining areas */
+ if (!handler->op_region || !handler->op_region->manipulator_map) {
+ return;
+ }
+
+ wmManipulatorMap *mmap = handler->op_region->manipulator_map;
+ wmManipulator *mpr = wm_manipulatormap_modal_get(mmap);
+ ScrArea *area = CTX_wm_area(C);
+ ARegion *region = CTX_wm_region(C);
+
+ wm_manipulatormap_handler_context(C, handler);
+
+ /* regular update for running operator */
+ if (modal_running) {
+ wmManipulatorOpElem *mpop = mpr ? WM_manipulator_operator_get(mpr, mpr->highlight_part) : NULL;
+ if (mpr && mpop && (mpop->type != NULL) && (mpop->type == handler->op->type)) {
+ wmManipulatorFnModal modal_fn = mpr->custom_modal ? mpr->custom_modal : mpr->type->modal;
+ if (modal_fn != NULL) {
+ int retval = modal_fn(C, mpr, event, 0);
+ /* The manipulator is tried to the operator, we can't choose when to exit. */
+ BLI_assert(retval & OPERATOR_RUNNING_MODAL);
+ UNUSED_VARS_NDEBUG(retval);
+ }
+ }
+ }
+ /* operator not running anymore */
+ else {
+ wm_manipulatormap_highlight_set(mmap, C, NULL, 0);
+ if (mpr) {
+ /* This isn't defined if it ends because of success of cancel, we may want to change. */
+ bool cancel = true;
+ if (mpr->type->exit) {
+ mpr->type->exit(C, mpr, cancel);
+ }
+ wm_manipulatormap_modal_set(mmap, C, mpr, NULL, false);
+ }
+ }
+
+ /* restore the area */
+ CTX_wm_area_set(C, area);
+ CTX_wm_region_set(C, region);
+}
+
+/**
+ * Deselect all selected manipulators in \a mmap.
+ * \return if selection has changed.
+ */
+bool wm_manipulatormap_deselect_all(wmManipulatorMap *mmap)
+{
+ wmManipulatorMapSelectState *msel = &mmap->mmap_context.select;
+
+ if (msel->items == NULL || msel->len == 0) {
+ return false;
+ }
+
+ for (int i = 0; i < msel->len; i++) {
+ wm_manipulator_select_set_ex(mmap, msel->items[i], false, false, true);
+ }
+
+ wm_manipulatormap_select_array_clear(mmap);
+
+ /* always return true, we already checked
+ * if there's anything to deselect */
+ return true;
+}
+
+BLI_INLINE bool manipulator_selectable_poll(const wmManipulator *mpr, void *UNUSED(data))
+{
+ return (mpr->parent_mgroup->type->flag & WM_MANIPULATORGROUPTYPE_SELECT);
+}
+
+/**
+ * Select all selectable manipulators in \a mmap.
+ * \return if selection has changed.
+ */
+static bool wm_manipulatormap_select_all_intern(
+ bContext *C, wmManipulatorMap *mmap)
+{
+ wmManipulatorMapSelectState *msel = &mmap->mmap_context.select;
+ /* GHash is used here to avoid having to loop over all manipulators twice (once to
+ * get tot_sel for allocating, once for actually selecting). Instead we collect
+ * selectable manipulators in hash table and use this to get tot_sel and do selection */
+
+ GHash *hash = WM_manipulatormap_manipulator_hash_new(C, mmap, manipulator_selectable_poll, NULL, true);
+ GHashIterator gh_iter;
+ int i;
+ bool changed = false;
+
+ wm_manipulatormap_select_array_ensure_len_alloc(mmap, BLI_ghash_size(hash));
+
+ GHASH_ITER_INDEX (gh_iter, hash, i) {
+ wmManipulator *mpr_iter = BLI_ghashIterator_getValue(&gh_iter);
+ WM_manipulator_select_set(mmap, mpr_iter, true);
+ }
+ /* highlight first manipulator */
+ wm_manipulatormap_highlight_set(mmap, C, msel->items[0], msel->items[0]->highlight_part);
+
+ BLI_assert(BLI_ghash_size(hash) == msel->len);
+
+ BLI_ghash_free(hash, NULL, NULL);
+ return changed;
+}
+
+/**
+ * Select/Deselect all selectable manipulators in \a mmap.
+ * \return if selection has changed.
+ *
+ * TODO select all by type
+ */
+bool WM_manipulatormap_select_all(bContext *C, wmManipulatorMap *mmap, const int action)
+{
+ bool changed = false;
+
+ switch (action) {
+ case SEL_SELECT:
+ changed = wm_manipulatormap_select_all_intern(C, mmap);
+ break;
+ case SEL_DESELECT:
+ changed = wm_manipulatormap_deselect_all(mmap);
+ break;
+ default:
+ BLI_assert(0);
+ break;
+ }
+
+ if (changed)
+ WM_event_add_mousemove(C);
+
+ return changed;
+}
+
+/**
+ * Prepare context for manipulator handling (but only if area/region is
+ * part of screen). Version of #wm_handler_op_context for manipulators.
+ */
+void wm_manipulatormap_handler_context(bContext *C, wmEventHandler *handler)
+{
+ bScreen *screen = CTX_wm_screen(C);
+
+ if (screen) {
+ if (handler->op_area == NULL) {
+ /* do nothing in this context */
+ }
+ else {
+ ScrArea *sa;
+
+ for (sa = screen->areabase.first; sa; sa = sa->next)
+ if (sa == handler->op_area)
+ break;
+ if (sa == NULL) {
+ /* when changing screen layouts with running modal handlers (like render display), this
+ * is not an error to print */
+ if (handler->manipulator_map == NULL)
+ printf("internal error: modal manipulator-map handler has invalid area\n");
+ }
+ else {
+ ARegion *ar;
+ CTX_wm_area_set(C, sa);
+ for (ar = sa->regionbase.first; ar; ar = ar->next)
+ if (ar == handler->op_region)
+ break;
+ /* XXX no warning print here, after full-area and back regions are remade */
+ if (ar)
+ CTX_wm_region_set(C, ar);
+ }
+ }
+ }
+}
+
+bool WM_manipulatormap_cursor_set(const wmManipulatorMap *mmap, wmWindow *win)
+{
+ wmManipulator *mpr = mmap->mmap_context.highlight;
+ if (mpr && mpr->type->cursor_get) {
+ WM_cursor_set(win, mpr->type->cursor_get(mpr));
+ return true;
+ }
+
+ return false;
+}
+
+void wm_manipulatormap_highlight_set(
+ wmManipulatorMap *mmap, const bContext *C, wmManipulator *mpr, int part)
+{
+ if ((mpr != mmap->mmap_context.highlight) ||
+ (mpr && part != mpr->highlight_part))
+ {
+ if (mmap->mmap_context.highlight) {
+ mmap->mmap_context.highlight->state &= ~WM_MANIPULATOR_STATE_HIGHLIGHT;
+ mmap->mmap_context.highlight->highlight_part = -1;
+ }
+
+ mmap->mmap_context.highlight = mpr;
+
+ if (mpr) {
+ mpr->state |= WM_MANIPULATOR_STATE_HIGHLIGHT;
+ mpr->highlight_part = part;
+
+ if (C && mpr->type->cursor_get) {
+ wmWindow *win = CTX_wm_window(C);
+ WM_cursor_set(win, mpr->type->cursor_get(mpr));
+ }
+ }
+ else {
+ if (C) {
+ wmWindow *win = CTX_wm_window(C);
+ WM_cursor_set(win, CURSOR_STD);
+ }
+ }
+
+ /* tag the region for redraw */
+ if (C) {
+ ARegion *ar = CTX_wm_region(C);
+ ED_region_tag_redraw(ar);
+ }
+ }
+}
+
+wmManipulator *wm_manipulatormap_highlight_get(wmManipulatorMap *mmap)
+{
+ return mmap->mmap_context.highlight;
+}
+
+/**
+ * Caller should call exit when (enable == False).
+ */
+void wm_manipulatormap_modal_set(
+ wmManipulatorMap *mmap, bContext *C, wmManipulator *mpr, const wmEvent *event, bool enable)
+{
+ if (enable) {
+ BLI_assert(mmap->mmap_context.modal == NULL);
+ wmWindow *win = CTX_wm_window(C);
+
+ WM_tooltip_clear(C, win);
+
+ if (mpr->type->invoke &&
+ (mpr->type->modal || mpr->custom_modal))
+ {
+ const int retval = mpr->type->invoke(C, mpr, event);
+ if ((retval & OPERATOR_RUNNING_MODAL) == 0) {
+ return;
+ }
+ }
+
+ mpr->state |= WM_MANIPULATOR_STATE_MODAL;
+ mmap->mmap_context.modal = mpr;
+
+ if ((mpr->flag & WM_MANIPULATOR_GRAB_CURSOR) &&
+ (event->is_motion_absolute == false))
+ {
+ WM_cursor_grab_enable(win, true, true, NULL);
+ copy_v2_v2_int(mmap->mmap_context.event_xy, &event->x);
+ mmap->mmap_context.event_grabcursor = win->grabcursor;
+ }
+ else {
+ mmap->mmap_context.event_xy[0] = INT_MAX;
+ }
+
+ struct wmManipulatorOpElem *mpop = WM_manipulator_operator_get(mpr, mpr->highlight_part);
+ if (mpop && mpop->type) {
+ const int retval = WM_operator_name_call_ptr(C, mpop->type, WM_OP_INVOKE_DEFAULT, &mpop->ptr);
+ if ((retval & OPERATOR_RUNNING_MODAL) == 0) {
+ wm_manipulatormap_modal_set(mmap, C, mpr, event, false);
+ }
+
+ /* we failed to hook the manipulator to the operator handler or operator was cancelled, return */
+ if (!mmap->mmap_context.modal) {
+ mpr->state &= ~WM_MANIPULATOR_STATE_MODAL;
+ MEM_SAFE_FREE(mpr->interaction_data);
+ }
+ return;
+ }
+ }
+ else {
+ BLI_assert(ELEM(mmap->mmap_context.modal, NULL, mpr));
+
+ /* deactivate, manipulator but first take care of some stuff */
+ if (mpr) {
+ mpr->state &= ~WM_MANIPULATOR_STATE_MODAL;
+ MEM_SAFE_FREE(mpr->interaction_data);
+ }
+ mmap->mmap_context.modal = NULL;
+
+ if (C) {
+ wmWindow *win = CTX_wm_window(C);
+ if (mmap->mmap_context.event_xy[0] != INT_MAX) {
+ /* Check if some other part of Blender (typically operators)
+ * have adjusted the grab mode since it was set.
+ * If so: warp, so we have a predictable outcome. */
+ if (mmap->mmap_context.event_grabcursor == win->grabcursor) {
+ WM_cursor_grab_disable(win, mmap->mmap_context.event_xy);
+ }
+ else {
+ WM_cursor_warp(win, UNPACK2(mmap->mmap_context.event_xy));
+ }
+ }
+ ED_region_tag_redraw(CTX_wm_region(C));
+ WM_event_add_mousemove(C);
+ }
+
+ mmap->mmap_context.event_xy[0] = INT_MAX;
+ }
+}
+
+wmManipulator *wm_manipulatormap_modal_get(wmManipulatorMap *mmap)
+{
+ return mmap->mmap_context.modal;
+}
+
+wmManipulator **wm_manipulatormap_selected_get(wmManipulatorMap *mmap, int *r_selected_len)
+{
+ *r_selected_len = mmap->mmap_context.select.len;
+ return mmap->mmap_context.select.items;
+}
+
+ListBase *wm_manipulatormap_groups_get(wmManipulatorMap *mmap)
+{
+ return &mmap->groups;
+}
+
+void WM_manipulatormap_message_subscribe(
+ bContext *C, wmManipulatorMap *mmap, ARegion *ar, struct wmMsgBus *mbus)
+{
+ for (wmManipulatorGroup *mgroup = mmap->groups.first; mgroup; mgroup = mgroup->next) {
+ if (!wm_manipulatorgroup_is_visible(mgroup, C)) {
+ continue;
+ }
+ for (wmManipulator *mpr = mgroup->manipulators.first; mpr; mpr = mpr->next) {
+ if (mpr->flag & WM_MANIPULATOR_HIDDEN) {
+ continue;
+ }
+ WM_manipulator_target_property_subscribe_all(mpr, mbus, ar);
+ }
+ if (mgroup->type->message_subscribe != NULL) {
+ mgroup->type->message_subscribe(C, mgroup, mbus);
+ }
+ }
+}
+
+/** \} */ /* wmManipulatorMap */
+
+
+/* -------------------------------------------------------------------- */
+/** \name Tooltip Handling
+ *
+ * \{ */
+
+struct ARegion *WM_manipulatormap_tooltip_init(
+ struct bContext *C, struct ARegion *ar, bool *r_exit_on_event)
+{
+ wmManipulatorMap *mmap = ar->manipulator_map;
+ *r_exit_on_event = true;
+ if (mmap) {
+ wmManipulator *mpr = mmap->mmap_context.highlight;
+ if (mpr) {
+ return UI_tooltip_create_from_manipulator(C, mpr);
+ }
+ }
+ return NULL;
+}
+
+/** \} */ /* wmManipulatorMapType */
+
+/* -------------------------------------------------------------------- */
+/** \name wmManipulatorMapType
+ *
+ * \{ */
+
+wmManipulatorMapType *WM_manipulatormaptype_find(
+ const struct wmManipulatorMapType_Params *mmap_params)
+{
+ for (wmManipulatorMapType *mmap_type = manipulatormaptypes.first; mmap_type; mmap_type = mmap_type->next) {
+ if (mmap_type->spaceid == mmap_params->spaceid &&
+ mmap_type->regionid == mmap_params->regionid)
+ {
+ return mmap_type;
+ }
+ }
+
+ return NULL;
+}
+
+wmManipulatorMapType *WM_manipulatormaptype_ensure(
+ const struct wmManipulatorMapType_Params *mmap_params)
+{
+ wmManipulatorMapType *mmap_type = WM_manipulatormaptype_find(mmap_params);
+
+ if (mmap_type) {
+ return mmap_type;
+ }
+
+ mmap_type = MEM_callocN(sizeof(wmManipulatorMapType), "manipulatortype list");
+ mmap_type->spaceid = mmap_params->spaceid;
+ mmap_type->regionid = mmap_params->regionid;
+ BLI_addhead(&manipulatormaptypes, mmap_type);
+
+ return mmap_type;
+}
+
+void wm_manipulatormaptypes_free(void)
+{
+ for (wmManipulatorMapType *mmap_type = manipulatormaptypes.first, *mmap_type_next;
+ mmap_type;
+ mmap_type = mmap_type_next)
+ {
+ mmap_type_next = mmap_type->next;
+ for (wmManipulatorGroupTypeRef *wgt_ref = mmap_type->grouptype_refs.first, *wgt_next;
+ wgt_ref;
+ wgt_ref = wgt_next)
+ {
+ wgt_next = wgt_ref->next;
+ WM_manipulatormaptype_group_free(wgt_ref);
+ }
+ MEM_freeN(mmap_type);
+ }
+}
+
+/**
+ * Initialize keymaps for all existing manipulator-groups
+ */
+void wm_manipulators_keymap(wmKeyConfig *keyconf)
+{
+ /* we add this item-less keymap once and use it to group manipulator-group keymaps into it */
+ WM_keymap_find(keyconf, "Manipulators", 0, 0);
+
+ for (wmManipulatorMapType *mmap_type = manipulatormaptypes.first; mmap_type; mmap_type = mmap_type->next) {
+ for (wmManipulatorGroupTypeRef *wgt_ref = mmap_type->grouptype_refs.first; wgt_ref; wgt_ref = wgt_ref->next) {
+ wm_manipulatorgrouptype_setup_keymap(wgt_ref->type, keyconf);
+ }
+ }
+}
+
+/** \} */ /* wmManipulatorMapType */
+
+/* -------------------------------------------------------------------- */
+/** \name Updates for Dynamic Type Registraion
+ *
+ * \{ */
+
+
+void WM_manipulatorconfig_update_tag_init(
+ wmManipulatorMapType *mmap_type, wmManipulatorGroupType *wgt)
+{
+ /* tag for update on next use */
+ mmap_type->type_update_flag |= (WM_MANIPULATORMAPTYPE_UPDATE_INIT | WM_MANIPULATORMAPTYPE_KEYMAP_INIT);
+ wgt->type_update_flag |= (WM_MANIPULATORMAPTYPE_UPDATE_INIT | WM_MANIPULATORMAPTYPE_KEYMAP_INIT);
+
+ wm_mmap_type_update_flag |= WM_MANIPULATORMAPTYPE_GLOBAL_UPDATE_INIT;
+}
+
+void WM_manipulatorconfig_update_tag_remove(
+ wmManipulatorMapType *mmap_type, wmManipulatorGroupType *wgt)
+{
+ /* tag for update on next use */
+ mmap_type->type_update_flag |= WM_MANIPULATORMAPTYPE_UPDATE_REMOVE;
+ wgt->type_update_flag |= WM_MANIPULATORMAPTYPE_UPDATE_REMOVE;
+
+ wm_mmap_type_update_flag |= WM_MANIPULATORMAPTYPE_GLOBAL_UPDATE_REMOVE;
+}
+
+/**
+ * Run incase new types have been added (runs often, early exit where possible).
+ * Follows #WM_keyconfig_update concentions.
+ */
+void WM_manipulatorconfig_update(struct Main *bmain)
+{
+ if (G.background)
+ return;
+
+ if (wm_mmap_type_update_flag == 0)
+ return;
+
+ if (wm_mmap_type_update_flag & WM_MANIPULATORMAPTYPE_GLOBAL_UPDATE_REMOVE) {
+ for (wmManipulatorMapType *mmap_type = manipulatormaptypes.first;
+ mmap_type;
+ mmap_type = mmap_type->next)
+ {
+ if (mmap_type->type_update_flag & WM_MANIPULATORMAPTYPE_GLOBAL_UPDATE_REMOVE) {
+ mmap_type->type_update_flag &= ~WM_MANIPULATORMAPTYPE_UPDATE_REMOVE;
+ for (wmManipulatorGroupTypeRef *wgt_ref = mmap_type->grouptype_refs.first, *wgt_ref_next;
+ wgt_ref;
+ wgt_ref = wgt_ref_next)
+ {
+ wgt_ref_next = wgt_ref->next;
+ if (wgt_ref->type->type_update_flag & WM_MANIPULATORMAPTYPE_UPDATE_REMOVE) {
+ WM_manipulatormaptype_group_unlink(NULL, bmain, mmap_type, wgt_ref->type);
+ }
+ }
+ }
+ }
+
+ wm_mmap_type_update_flag &= ~WM_MANIPULATORMAPTYPE_GLOBAL_UPDATE_REMOVE;
+ }
+
+ if (wm_mmap_type_update_flag & WM_MANIPULATORMAPTYPE_GLOBAL_UPDATE_INIT) {
+ for (wmManipulatorMapType *mmap_type = manipulatormaptypes.first;
+ mmap_type;
+ mmap_type = mmap_type->next)
+ {
+ const uchar type_update_all = WM_MANIPULATORMAPTYPE_UPDATE_INIT | WM_MANIPULATORMAPTYPE_KEYMAP_INIT;
+ if (mmap_type->type_update_flag & type_update_all) {
+ mmap_type->type_update_flag &= ~type_update_all;
+ for (wmManipulatorGroupTypeRef *wgt_ref = mmap_type->grouptype_refs.first;
+ wgt_ref;
+ wgt_ref = wgt_ref->next)
+ {
+ if (wgt_ref->type->type_update_flag & WM_MANIPULATORMAPTYPE_KEYMAP_INIT) {
+ WM_manipulatormaptype_group_init_runtime_keymap(bmain, wgt_ref->type);
+ wgt_ref->type->type_update_flag &= ~WM_MANIPULATORMAPTYPE_KEYMAP_INIT;
+ }
+
+ if (wgt_ref->type->type_update_flag & WM_MANIPULATORMAPTYPE_UPDATE_INIT) {
+ WM_manipulatormaptype_group_init_runtime(bmain, mmap_type, wgt_ref->type);
+ wgt_ref->type->type_update_flag &= ~WM_MANIPULATORMAPTYPE_UPDATE_INIT;
+ }
+ }
+ }
+ }
+
+ wm_mmap_type_update_flag &= ~WM_MANIPULATORMAPTYPE_GLOBAL_UPDATE_INIT;
+ }
+}
+
+/** \} */
diff --git a/source/blender/windowmanager/manipulators/intern/wm_manipulator_target_props.c b/source/blender/windowmanager/manipulators/intern/wm_manipulator_target_props.c
new file mode 100644
index 00000000000..137e8f5639d
--- /dev/null
+++ b/source/blender/windowmanager/manipulators/intern/wm_manipulator_target_props.c
@@ -0,0 +1,364 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/windowmanager/manipulators/intern/wm_manipulator_target_props.c
+ * \ingroup wm
+ */
+
+#include "BLI_listbase.h"
+#include "BLI_math.h"
+#include "BLI_string.h"
+#include "BLI_string_utils.h"
+
+#include "BKE_context.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "RNA_access.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+#include "WM_message.h"
+
+#include "wm.h"
+
+#include "ED_screen.h"
+#include "ED_view3d.h"
+
+/* own includes */
+#include "wm_manipulator_wmapi.h"
+#include "wm_manipulator_intern.h"
+
+/* -------------------------------------------------------------------- */
+
+/** \name Property Definition
+ * \{ */
+
+BLI_INLINE wmManipulatorProperty *wm_manipulator_target_property_array(wmManipulator *mpr)
+{
+ return (wmManipulatorProperty *)(POINTER_OFFSET(mpr, mpr->type->struct_size));
+}
+
+wmManipulatorProperty *WM_manipulator_target_property_array(wmManipulator *mpr)
+{
+ return wm_manipulator_target_property_array(mpr);
+}
+
+wmManipulatorProperty *WM_manipulator_target_property_at_index(wmManipulator *mpr, int index)
+{
+ BLI_assert(index < mpr->type->target_property_defs_len);
+ BLI_assert(index != -1);
+ wmManipulatorProperty *mpr_prop_array = wm_manipulator_target_property_array(mpr);
+ return &mpr_prop_array[index];
+}
+
+wmManipulatorProperty *WM_manipulator_target_property_find(wmManipulator *mpr, const char *idname)
+{
+ int index = BLI_findstringindex(
+ &mpr->type->target_property_defs, idname, offsetof(wmManipulatorPropertyType, idname));
+ if (index != -1) {
+ return WM_manipulator_target_property_at_index(mpr, index);
+ }
+ else {
+ return NULL;
+ }
+}
+
+void WM_manipulator_target_property_def_rna_ptr(
+ wmManipulator *mpr, const wmManipulatorPropertyType *mpr_prop_type,
+ PointerRNA *ptr, PropertyRNA *prop, int index)
+{
+ wmManipulatorProperty *mpr_prop = WM_manipulator_target_property_at_index(mpr, mpr_prop_type->index_in_type);
+
+ /* if manipulator evokes an operator we cannot use it for property manipulation */
+ BLI_assert(mpr->op_data == NULL);
+
+ mpr_prop->type = mpr_prop_type;
+
+ mpr_prop->ptr = *ptr;
+ mpr_prop->prop = prop;
+ mpr_prop->index = index;
+
+ if (mpr->type->property_update) {
+ mpr->type->property_update(mpr, mpr_prop);
+ }
+}
+
+void WM_manipulator_target_property_def_rna(
+ wmManipulator *mpr, const char *idname,
+ PointerRNA *ptr, const char *propname, int index)
+{
+ const wmManipulatorPropertyType *mpr_prop_type = WM_manipulatortype_target_property_find(mpr->type, idname);
+ PropertyRNA *prop = RNA_struct_find_property(ptr, propname);
+ WM_manipulator_target_property_def_rna_ptr(mpr, mpr_prop_type, ptr, prop, index);
+}
+
+void WM_manipulator_target_property_def_func_ptr(
+ wmManipulator *mpr, const wmManipulatorPropertyType *mpr_prop_type,
+ const wmManipulatorPropertyFnParams *params)
+{
+ wmManipulatorProperty *mpr_prop = WM_manipulator_target_property_at_index(mpr, mpr_prop_type->index_in_type);
+
+ /* if manipulator evokes an operator we cannot use it for property manipulation */
+ BLI_assert(mpr->op_data == NULL);
+
+ mpr_prop->type = mpr_prop_type;
+
+ mpr_prop->custom_func.value_get_fn = params->value_get_fn;
+ mpr_prop->custom_func.value_set_fn = params->value_set_fn;
+ mpr_prop->custom_func.range_get_fn = params->range_get_fn;
+ mpr_prop->custom_func.free_fn = params->free_fn;
+ mpr_prop->custom_func.user_data = params->user_data;
+
+ if (mpr->type->property_update) {
+ mpr->type->property_update(mpr, mpr_prop);
+ }
+}
+
+void WM_manipulator_target_property_def_func(
+ wmManipulator *mpr, const char *idname,
+ const wmManipulatorPropertyFnParams *params)
+{
+ const wmManipulatorPropertyType *mpr_prop_type = WM_manipulatortype_target_property_find(mpr->type, idname);
+ WM_manipulator_target_property_def_func_ptr(mpr, mpr_prop_type, params);
+}
+
+void WM_manipulator_target_property_clear_rna_ptr(
+ wmManipulator *mpr, const wmManipulatorPropertyType *mpr_prop_type)
+{
+ wmManipulatorProperty *mpr_prop = WM_manipulator_target_property_at_index(mpr, mpr_prop_type->index_in_type);
+
+ /* if manipulator evokes an operator we cannot use it for property manipulation */
+ BLI_assert(mpr->op_data == NULL);
+
+ mpr_prop->type = NULL;
+
+ mpr_prop->ptr = PointerRNA_NULL;
+ mpr_prop->prop = NULL;
+ mpr_prop->index = -1;
+}
+
+void WM_manipulator_target_property_clear_rna(
+ wmManipulator *mpr, const char *idname)
+{
+ const wmManipulatorPropertyType *mpr_prop_type = WM_manipulatortype_target_property_find(mpr->type, idname);
+ WM_manipulator_target_property_clear_rna_ptr(mpr, mpr_prop_type);
+}
+
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Property Access
+ * \{ */
+
+bool WM_manipulator_target_property_is_valid_any(wmManipulator *mpr)
+{
+ wmManipulatorProperty *mpr_prop_array = wm_manipulator_target_property_array(mpr);
+ for (int i = 0; i < mpr->type->target_property_defs_len; i++) {
+ wmManipulatorProperty *mpr_prop = &mpr_prop_array[i];
+ if (WM_manipulator_target_property_is_valid(mpr_prop)) {
+ return true;
+ }
+ }
+ return false;
+}
+
+bool WM_manipulator_target_property_is_valid(const wmManipulatorProperty *mpr_prop)
+{
+ return ((mpr_prop->prop != NULL) ||
+ (mpr_prop->custom_func.value_get_fn && mpr_prop->custom_func.value_set_fn));
+}
+
+float WM_manipulator_target_property_value_get(
+ const wmManipulator *mpr, wmManipulatorProperty *mpr_prop)
+{
+ if (mpr_prop->custom_func.value_get_fn) {
+ float value = 0.0f;
+ BLI_assert(mpr_prop->type->array_length == 1);
+ mpr_prop->custom_func.value_get_fn(mpr, mpr_prop, &value);
+ return value;
+ }
+
+ if (mpr_prop->index == -1) {
+ return RNA_property_float_get(&mpr_prop->ptr, mpr_prop->prop);
+ }
+ else {
+ return RNA_property_float_get_index(&mpr_prop->ptr, mpr_prop->prop, mpr_prop->index);
+ }
+}
+
+void WM_manipulator_target_property_value_set(
+ bContext *C, const wmManipulator *mpr,
+ wmManipulatorProperty *mpr_prop, const float value)
+{
+ if (mpr_prop->custom_func.value_set_fn) {
+ BLI_assert(mpr_prop->type->array_length == 1);
+ mpr_prop->custom_func.value_set_fn(mpr, mpr_prop, &value);
+ return;
+ }
+
+ /* reset property */
+ if (mpr_prop->index == -1) {
+ RNA_property_float_set(&mpr_prop->ptr, mpr_prop->prop, value);
+ }
+ else {
+ RNA_property_float_set_index(&mpr_prop->ptr, mpr_prop->prop, mpr_prop->index, value);
+ }
+ RNA_property_update(C, &mpr_prop->ptr, mpr_prop->prop);
+}
+
+void WM_manipulator_target_property_value_get_array(
+ const wmManipulator *mpr, wmManipulatorProperty *mpr_prop,
+ float *value)
+{
+ if (mpr_prop->custom_func.value_get_fn) {
+ mpr_prop->custom_func.value_get_fn(mpr, mpr_prop, value);
+ return;
+ }
+ RNA_property_float_get_array(&mpr_prop->ptr, mpr_prop->prop, value);
+}
+
+void WM_manipulator_target_property_value_set_array(
+ bContext *C, const wmManipulator *mpr, wmManipulatorProperty *mpr_prop,
+ const float *value)
+{
+ if (mpr_prop->custom_func.value_set_fn) {
+ mpr_prop->custom_func.value_set_fn(mpr, mpr_prop, value);
+ return;
+ }
+ RNA_property_float_set_array(&mpr_prop->ptr, mpr_prop->prop, value);
+
+ RNA_property_update(C, &mpr_prop->ptr, mpr_prop->prop);
+}
+
+bool WM_manipulator_target_property_range_get(
+ const wmManipulator *mpr, wmManipulatorProperty *mpr_prop,
+ float range[2])
+{
+ if (mpr_prop->custom_func.value_get_fn) {
+ if (mpr_prop->custom_func.range_get_fn) {
+ mpr_prop->custom_func.range_get_fn(mpr, mpr_prop, range);
+ return true;
+ }
+ else {
+ return false;
+
+ }
+ }
+
+ float step, precision;
+ RNA_property_float_ui_range(&mpr_prop->ptr, mpr_prop->prop, &range[0], &range[1], &step, &precision);
+ return true;
+}
+
+int WM_manipulator_target_property_array_length(
+ const wmManipulator *UNUSED(mpr), wmManipulatorProperty *mpr_prop)
+{
+ if (mpr_prop->custom_func.value_get_fn) {
+ return mpr_prop->type->array_length;
+ }
+ return RNA_property_array_length(&mpr_prop->ptr, mpr_prop->prop);
+}
+
+/** \} */
+
+
+/* -------------------------------------------------------------------- */
+
+/** \name Property Define
+ * \{ */
+
+const wmManipulatorPropertyType *WM_manipulatortype_target_property_find(
+ const wmManipulatorType *wt, const char *idname)
+{
+ return BLI_findstring(&wt->target_property_defs, idname, offsetof(wmManipulatorPropertyType, idname));
+}
+
+void WM_manipulatortype_target_property_def(
+ wmManipulatorType *wt, const char *idname, int data_type, int array_length)
+{
+ wmManipulatorPropertyType *mpt;
+
+ BLI_assert(WM_manipulatortype_target_property_find(wt, idname) == NULL);
+
+ const uint idname_size = strlen(idname) + 1;
+ mpt = MEM_callocN(sizeof(wmManipulatorPropertyType) + idname_size, __func__);
+ memcpy(mpt->idname, idname, idname_size);
+ mpt->data_type = data_type;
+ mpt->array_length = array_length;
+ mpt->index_in_type = wt->target_property_defs_len;
+ wt->target_property_defs_len += 1;
+ BLI_addtail(&wt->target_property_defs, mpt);
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+
+/** \name Property Utilities
+ * \{ */
+
+void WM_manipulator_do_msg_notify_tag_refresh(
+ bContext *UNUSED(C), wmMsgSubscribeKey *UNUSED(msg_key), wmMsgSubscribeValue *msg_val)
+{
+ ARegion *ar = msg_val->owner;
+ wmManipulatorMap *mmap = msg_val->user_data;
+
+ ED_region_tag_redraw(ar);
+ WM_manipulatormap_tag_refresh(mmap);
+}
+
+/**
+ * Runs on the "prepare draw" pass,
+ * drawing the region clears.
+ */
+void WM_manipulator_target_property_subscribe_all(
+ wmManipulator *mpr, struct wmMsgBus *mbus, ARegion *ar)
+{
+ if (mpr->type->target_property_defs_len) {
+ wmManipulatorProperty *mpr_prop_array = WM_manipulator_target_property_array(mpr);
+ for (int i = 0; i < mpr->type->target_property_defs_len; i++) {
+ wmManipulatorProperty *mpr_prop = &mpr_prop_array[i];
+ if (WM_manipulator_target_property_is_valid(mpr_prop)) {
+ if (mpr_prop->prop) {
+ WM_msg_subscribe_rna(
+ mbus, &mpr_prop->ptr, mpr_prop->prop,
+ &(const wmMsgSubscribeValue){
+ .owner = ar,
+ .user_data = ar,
+ .notify = ED_region_do_msg_notify_tag_redraw,
+ }, __func__);
+ WM_msg_subscribe_rna(
+ mbus, &mpr_prop->ptr, mpr_prop->prop,
+ &(const wmMsgSubscribeValue){
+ .owner = ar,
+ .user_data = mpr->parent_mgroup->parent_mmap,
+ .notify = WM_manipulator_do_msg_notify_tag_refresh,
+ }, __func__);
+ }
+ }
+ }
+ }
+}
+
+/** \} */
diff --git a/source/blender/windowmanager/manipulators/intern/wm_manipulator_type.c b/source/blender/windowmanager/manipulators/intern/wm_manipulator_type.c
new file mode 100644
index 00000000000..fd7f31db903
--- /dev/null
+++ b/source/blender/windowmanager/manipulators/intern/wm_manipulator_type.c
@@ -0,0 +1,212 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/windowmanager/manipulators/intern/wm_manipulator_type.c
+ * \ingroup wm
+ */
+
+#include "BLI_utildefines.h"
+#include "BLI_ghash.h"
+#include "BLI_listbase.h"
+#include "BLI_string.h"
+#include "BLI_string_utils.h"
+
+#include "BKE_context.h"
+#include "BKE_main.h"
+
+#include "DNA_screen_types.h"
+#include "DNA_space_types.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "RNA_access.h"
+#include "RNA_define.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "ED_screen.h"
+
+/* only for own init/exit calls (wm_manipulatortype_init/wm_manipulatortype_free) */
+#include "wm.h"
+
+/* own includes */
+#include "wm_manipulator_wmapi.h"
+#include "wm_manipulator_intern.h"
+
+
+/** \name Manipulator Type Append
+ *
+ * \note This follows conventions from #WM_operatortype_find #WM_operatortype_append & friends.
+ * \{ */
+
+static GHash *global_manipulatortype_hash = NULL;
+
+const wmManipulatorType *WM_manipulatortype_find(const char *idname, bool quiet)
+{
+ if (idname[0]) {
+ wmManipulatorType *wt;
+
+ wt = BLI_ghash_lookup(global_manipulatortype_hash, idname);
+ if (wt) {
+ return wt;
+ }
+
+ if (!quiet) {
+ printf("search for unknown manipulator '%s'\n", idname);
+ }
+ }
+ else {
+ if (!quiet) {
+ printf("search for empty manipulator\n");
+ }
+ }
+
+ return NULL;
+}
+
+/* caller must free */
+void WM_manipulatortype_iter(GHashIterator *ghi)
+{
+ BLI_ghashIterator_init(ghi, global_manipulatortype_hash);
+}
+
+static wmManipulatorType *wm_manipulatortype_append__begin(void)
+{
+ wmManipulatorType *wt = MEM_callocN(sizeof(wmManipulatorType), "manipulatortype");
+ wt->srna = RNA_def_struct_ptr(&BLENDER_RNA, "", &RNA_ManipulatorProperties);
+#if 0
+ /* Set the default i18n context now, so that opfunc can redefine it if needed! */
+ RNA_def_struct_translation_context(ot->srna, BLT_I18NCONTEXT_OPERATOR_DEFAULT);
+ ot->translation_context = BLT_I18NCONTEXT_OPERATOR_DEFAULT;
+#endif
+ return wt;
+}
+static void wm_manipulatortype_append__end(wmManipulatorType *wt)
+{
+ BLI_assert(wt->struct_size >= sizeof(wmManipulator));
+
+ RNA_def_struct_identifier(&BLENDER_RNA, wt->srna, wt->idname);
+
+ BLI_ghash_insert(global_manipulatortype_hash, (void *)wt->idname, wt);
+}
+
+void WM_manipulatortype_append(void (*wtfunc)(struct wmManipulatorType *))
+{
+ wmManipulatorType *wt = wm_manipulatortype_append__begin();
+ wtfunc(wt);
+ wm_manipulatortype_append__end(wt);
+}
+
+void WM_manipulatortype_append_ptr(void (*wtfunc)(struct wmManipulatorType *, void *), void *userdata)
+{
+ wmManipulatorType *mt = wm_manipulatortype_append__begin();
+ wtfunc(mt, userdata);
+ wm_manipulatortype_append__end(mt);
+}
+
+/**
+ * Free but don't remove from ghash.
+ */
+static void manipulatortype_free(wmManipulatorType *wt)
+{
+ if (wt->ext.srna) { /* python manipulator, allocs own string */
+ MEM_freeN((void *)wt->idname);
+ }
+
+ BLI_freelistN(&wt->target_property_defs);
+ MEM_freeN(wt);
+}
+
+/**
+ * \param C: May be NULL.
+ */
+static void manipulatortype_unlink(
+ bContext *C, Main *bmain, wmManipulatorType *wt)
+{
+ /* Free instances. */
+ for (bScreen *sc = bmain->screen.first; sc; sc = sc->id.next) {
+ for (ScrArea *sa = sc->areabase.first; sa; sa = sa->next) {
+ for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) {
+ ListBase *lb = (sl == sa->spacedata.first) ? &sa->regionbase : &sl->regionbase;
+ for (ARegion *ar = lb->first; ar; ar = ar->next) {
+ wmManipulatorMap *mmap = ar->manipulator_map;
+ if (mmap) {
+ wmManipulatorGroup *mgroup;
+ for (mgroup = mmap->groups.first; mgroup; mgroup = mgroup->next) {
+ for (wmManipulator *mpr = mgroup->manipulators.first, *mpr_next; mpr; mpr = mpr_next) {
+ mpr_next = mpr->next;
+ BLI_assert(mgroup->parent_mmap == mmap);
+ if (mpr->type == wt) {
+ WM_manipulator_unlink(&mgroup->manipulators, mgroup->parent_mmap, mpr, C);
+ ED_region_tag_redraw(ar);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+void WM_manipulatortype_remove_ptr(bContext *C, Main *bmain, wmManipulatorType *wt)
+{
+ BLI_assert(wt == WM_manipulatortype_find(wt->idname, false));
+
+ BLI_ghash_remove(global_manipulatortype_hash, wt->idname, NULL, NULL);
+
+ manipulatortype_unlink(C, bmain, wt);
+
+ manipulatortype_free(wt);
+}
+
+bool WM_manipulatortype_remove(bContext *C, Main *bmain, const char *idname)
+{
+ wmManipulatorType *wt = BLI_ghash_lookup(global_manipulatortype_hash, idname);
+
+ if (wt == NULL) {
+ return false;
+ }
+
+ WM_manipulatortype_remove_ptr(C, bmain, wt);
+
+ return true;
+}
+
+static void wm_manipulatortype_ghash_free_cb(wmManipulatorType *mt)
+{
+ manipulatortype_free(mt);
+}
+
+void wm_manipulatortype_free(void)
+{
+ BLI_ghash_free(global_manipulatortype_hash, NULL, (GHashValFreeFP)wm_manipulatortype_ghash_free_cb);
+ global_manipulatortype_hash = NULL;
+}
+
+/* called on initialize WM_init() */
+void wm_manipulatortype_init(void)
+{
+ /* reserve size is set based on blender default setup */
+ global_manipulatortype_hash = BLI_ghash_str_new_ex("wm_manipulatortype_init gh", 128);
+}
+
+/** \} */
diff --git a/source/blender/windowmanager/manipulators/wm_manipulator_fn.h b/source/blender/windowmanager/manipulators/wm_manipulator_fn.h
new file mode 100644
index 00000000000..305d04eab68
--- /dev/null
+++ b/source/blender/windowmanager/manipulators/wm_manipulator_fn.h
@@ -0,0 +1,88 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/windowmanager/manipulators/wm_manipulator_fn.h
+ * \ingroup wm
+ *
+ * Callback function definitions, needed for both Types & API headers.
+ */
+
+#ifndef __WM_MANIPULATOR_FN_H__
+#define __WM_MANIPULATOR_FN_H__
+
+#include "BLI_compiler_attrs.h"
+
+/* wmManipulatorGroup */
+typedef bool (*wmManipulatorGroupFnPoll)(
+ const struct bContext *, struct wmManipulatorGroupType *)
+ ATTR_WARN_UNUSED_RESULT;
+typedef void (*wmManipulatorGroupFnInit)(
+ const struct bContext *, struct wmManipulatorGroup *);
+typedef void (*wmManipulatorGroupFnRefresh)(
+ const struct bContext *, struct wmManipulatorGroup *);
+typedef void (*wmManipulatorGroupFnDrawPrepare)(
+ const struct bContext *, struct wmManipulatorGroup *);
+typedef struct wmKeyMap *(*wmManipulatorGroupFnSetupKeymap)(
+ const struct wmManipulatorGroupType *, struct wmKeyConfig *)
+ ATTR_WARN_UNUSED_RESULT;
+typedef void (*wmManipulatorGroupFnMsgBusSubscribe)(
+ const struct bContext *, struct wmManipulatorGroup *, struct wmMsgBus *);
+
+/* wmManipulator */
+/* See: wmManipulatorType for docs on each type. */
+
+typedef void (*wmManipulatorFnSetup)(struct wmManipulator *);
+typedef void (*wmManipulatorFnDraw)(const struct bContext *, struct wmManipulator *);
+typedef void (*wmManipulatorFnDrawSelect)(const struct bContext *, struct wmManipulator *, int);
+typedef int (*wmManipulatorFnTestSelect)(struct bContext *, struct wmManipulator *, const struct wmEvent *);
+typedef int (*wmManipulatorFnModal)(struct bContext *, struct wmManipulator *, const struct wmEvent *, eWM_ManipulatorTweak);
+typedef void (*wmManipulatorFnPropertyUpdate)(struct wmManipulator *, struct wmManipulatorProperty *);
+typedef void (*wmManipulatorFnMatrixBasisGet)(const struct wmManipulator *, float[4][4]);
+typedef int (*wmManipulatorFnInvoke)(struct bContext *, struct wmManipulator *, const struct wmEvent *);
+typedef void (*wmManipulatorFnExit)(struct bContext *, struct wmManipulator *, const bool);
+typedef int (*wmManipulatorFnCursorGet)(struct wmManipulator *);
+typedef void (*wmManipulatorFnSelectRefresh)(struct wmManipulator *);
+typedef void (*wmManipulatorFnFree)(struct wmManipulator *);
+
+/* wmManipulatorProperty ('value' type defined by 'wmManipulatorProperty.data_type') */
+typedef void (*wmManipulatorPropertyFnGet)(
+ const struct wmManipulator *, struct wmManipulatorProperty *,
+ /* typically 'float *' */
+ void *value);
+typedef void (*wmManipulatorPropertyFnSet)(
+ const struct wmManipulator *, struct wmManipulatorProperty *,
+ /* typically 'const float *' */
+ const void *value);
+typedef void (*wmManipulatorPropertyFnRangeGet)(
+ const struct wmManipulator *, struct wmManipulatorProperty *,
+ /* typically 'float[2]' */
+ void *range);
+typedef void (*wmManipulatorPropertyFnFree)(
+ const struct wmManipulator *, struct wmManipulatorProperty *);
+
+typedef struct wmManipulatorPropertyFnParams {
+ wmManipulatorPropertyFnGet value_get_fn;
+ wmManipulatorPropertyFnSet value_set_fn;
+ wmManipulatorPropertyFnRangeGet range_get_fn;
+ wmManipulatorPropertyFnFree free_fn;
+ void *user_data;
+} wmManipulatorPropertyFnParams;
+
+#endif /* __WM_MANIPULATOR_FN_H__ */
diff --git a/source/blender/windowmanager/manipulators/wm_manipulator_wmapi.h b/source/blender/windowmanager/manipulators/wm_manipulator_wmapi.h
new file mode 100644
index 00000000000..87cf711a60b
--- /dev/null
+++ b/source/blender/windowmanager/manipulators/wm_manipulator_wmapi.h
@@ -0,0 +1,98 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2016 Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/windowmanager/manipulators/wm_manipulator_wmapi.h
+ * \ingroup wm
+ *
+ * \name Manipulators Window Manager API
+ * API for usage in window manager code only. It should contain all functionality
+ * needed to hook up the manipulator system with Blender's window manager. It's
+ * mostly the event system that needs to communicate with manipulator code.
+ *
+ * Only included in wm.h and lower level files.
+ */
+
+
+#ifndef __WM_MANIPULATOR_WMAPI_H__
+#define __WM_MANIPULATOR_WMAPI_H__
+
+struct wmEventHandler;
+struct wmManipulatorMap;
+struct wmOperatorType;
+struct wmOperator;
+
+
+/* -------------------------------------------------------------------- */
+/* wmManipulator */
+
+/* wm_manipulator_type.c, for init/exit */
+void wm_manipulatortype_free(void);
+void wm_manipulatortype_init(void);
+
+/* wm_manipulatorgroup_type.c, for init/exit */
+void wm_manipulatorgrouptype_free(void);
+void wm_manipulatorgrouptype_init(void);
+
+/* -------------------------------------------------------------------- */
+/* wmManipulatorGroup */
+
+void MANIPULATORGROUP_OT_manipulator_select(struct wmOperatorType *ot);
+void MANIPULATORGROUP_OT_manipulator_tweak(struct wmOperatorType *ot);
+
+bool wm_manipulatorgroup_is_any_selected(const struct wmManipulatorGroup *mgroup);
+
+/* -------------------------------------------------------------------- */
+/* wmManipulatorMap */
+
+void wm_manipulatormap_remove(struct wmManipulatorMap *mmap);
+
+void wm_manipulators_keymap(struct wmKeyConfig *keyconf);
+
+void wm_manipulatormaps_handled_modal_update(
+ bContext *C, struct wmEvent *event, struct wmEventHandler *handler);
+void wm_manipulatormap_handler_context(bContext *C, struct wmEventHandler *handler);
+
+struct wmManipulator *wm_manipulatormap_highlight_find(
+ struct wmManipulatorMap *mmap, bContext *C, const struct wmEvent *event,
+ int *r_part);
+void wm_manipulatormap_highlight_set(
+ struct wmManipulatorMap *mmap, const bContext *C,
+ struct wmManipulator *mpr, int part);
+struct wmManipulator *wm_manipulatormap_highlight_get(struct wmManipulatorMap *mmap);
+void wm_manipulatormap_modal_set(
+ struct wmManipulatorMap *mmap, bContext *C, struct wmManipulator *mpr,
+ const struct wmEvent *event, bool enable);
+
+struct wmManipulator *wm_manipulatormap_modal_get(struct wmManipulatorMap *mmap);
+struct wmManipulator **wm_manipulatormap_selected_get(wmManipulatorMap *mmap, int *r_selected_len);
+struct ListBase *wm_manipulatormap_groups_get(wmManipulatorMap *mmap);
+
+/* -------------------------------------------------------------------- */
+/* wmManipulatorMapType */
+
+void wm_manipulatormaptypes_free(void);
+
+#endif /* __WM_MANIPULATOR_WMAPI_H__ */
+
diff --git a/source/blender/windowmanager/message_bus/intern/wm_message_bus.c b/source/blender/windowmanager/message_bus/intern/wm_message_bus.c
new file mode 100644
index 00000000000..dba38dc8c8c
--- /dev/null
+++ b/source/blender/windowmanager/message_bus/intern/wm_message_bus.c
@@ -0,0 +1,250 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/windowmanager/message_bus/intern/wm_message_bus.c
+ * \ingroup wm
+ */
+
+#include <string.h>
+
+#include "BLI_utildefines.h"
+#include "BLI_listbase.h"
+
+#include "BLI_ghash.h"
+
+#include "WM_types.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "message_bus/wm_message_bus.h"
+#include "message_bus/intern/wm_message_bus_intern.h"
+
+/* -------------------------------------------------------------------------- */
+/** \name Public API
+ * \{ */
+
+static wmMsgTypeInfo wm_msg_types[WM_MSG_TYPE_NUM] = {NULL};
+
+typedef void (*wmMsgTypeInitFn)(wmMsgTypeInfo *);
+
+static wmMsgTypeInitFn wm_msg_init_fn[WM_MSG_TYPE_NUM] = {
+ WM_msgtypeinfo_init_rna,
+ WM_msgtypeinfo_init_static,
+};
+
+void WM_msgbus_types_init(void)
+{
+ for (uint i = 0; i < WM_MSG_TYPE_NUM; i++) {
+ wm_msg_init_fn[i](&wm_msg_types[i]);
+ }
+}
+
+struct wmMsgBus *WM_msgbus_create(void)
+{
+ struct wmMsgBus *mbus = MEM_callocN(sizeof(*mbus), __func__);
+ const uint gset_reserve = 512;
+ for (uint i = 0; i < WM_MSG_TYPE_NUM; i++) {
+ wmMsgTypeInfo *info = &wm_msg_types[i];
+ mbus->messages_gset[i] = BLI_gset_new_ex(info->gset.hash_fn, info->gset.cmp_fn, __func__, gset_reserve);
+ }
+ return mbus;
+}
+
+void WM_msgbus_destroy(struct wmMsgBus *mbus)
+{
+ for (uint i = 0; i < WM_MSG_TYPE_NUM; i++) {
+ wmMsgTypeInfo *info = &wm_msg_types[i];
+ BLI_gset_free(mbus->messages_gset[i], info->gset.key_free_fn);
+ }
+ MEM_freeN(mbus);
+}
+
+void WM_msgbus_clear_by_owner(struct wmMsgBus *mbus, void *owner)
+{
+ wmMsgSubscribeKey *msg_key, *msg_key_next;
+ for (msg_key = mbus->messages.first; msg_key; msg_key = msg_key_next) {
+ msg_key_next = msg_key->next;
+
+ wmMsgSubscribeValueLink *msg_lnk_next;
+ for (wmMsgSubscribeValueLink *msg_lnk = msg_key->values.first; msg_lnk; msg_lnk = msg_lnk_next) {
+ msg_lnk_next = msg_lnk->next;
+ if (msg_lnk->params.owner == owner) {
+ if (msg_lnk->params.tag) {
+ mbus->messages_tag_count -= 1;
+ }
+ if (msg_lnk->params.free_data) {
+ msg_lnk->params.free_data(msg_key, &msg_lnk->params);
+ }
+ BLI_remlink(&msg_key->values, msg_lnk);
+ MEM_freeN(msg_lnk);
+ }
+ }
+
+ if (BLI_listbase_is_empty(&msg_key->values)) {
+ const wmMsg *msg = wm_msg_subscribe_value_msg_cast(msg_key);
+ wmMsgTypeInfo *info = &wm_msg_types[msg->type];
+ BLI_remlink(&mbus->messages, msg_key);
+ bool ok = BLI_gset_remove(mbus->messages_gset[msg->type], msg_key, info->gset.key_free_fn);
+ BLI_assert(ok);
+ UNUSED_VARS_NDEBUG(ok);
+ }
+ }
+}
+
+void WM_msg_dump(struct wmMsgBus *mbus, const char *info_str)
+{
+ printf(">>>> %s\n", info_str);
+ for (wmMsgSubscribeKey *key = mbus->messages.first; key; key = key->next) {
+ const wmMsg *msg = wm_msg_subscribe_value_msg_cast(key);
+ const wmMsgTypeInfo *info = &wm_msg_types[msg->type];
+ info->repr(stdout, key);
+ }
+ printf("<<<< %s\n", info_str);
+}
+
+void WM_msgbus_handle(struct wmMsgBus *mbus, struct bContext *C)
+{
+ if (mbus->messages_tag_count == 0) {
+ // printf("msgbus: skipping\n");
+ return;
+ }
+
+ if (false) {
+ WM_msg_dump(mbus, __func__);
+ }
+
+ // uint a = 0, b = 0;
+ for (wmMsgSubscribeKey *key = mbus->messages.first; key; key = key->next) {
+ for (wmMsgSubscribeValueLink *msg_lnk = key->values.first; msg_lnk; msg_lnk = msg_lnk->next) {
+ if (msg_lnk->params.tag) {
+ msg_lnk->params.notify(C, key, &msg_lnk->params);
+ msg_lnk->params.tag = false;
+ mbus->messages_tag_count -= 1;
+ }
+ // b++;
+ }
+ // a++;
+ }
+ BLI_assert(mbus->messages_tag_count == 0);
+ mbus->messages_tag_count = 0;
+ // printf("msgbus: keys=%u values=%u\n", a, b);
+}
+
+/**
+ * \param msg_key_test: Needs following #wmMsgSubscribeKey fields filled in:
+ * - msg.params
+ * - msg.head.type
+ * - msg.head.id
+ * .. other values should be zeroed.
+ *
+ * \return The key for this subscription.
+ * note that this is only needed in rare cases when the key needs further manipulation.
+ */
+wmMsgSubscribeKey *WM_msg_subscribe_with_key(
+ struct wmMsgBus *mbus,
+ const wmMsgSubscribeKey *msg_key_test,
+ const wmMsgSubscribeValue *msg_val_params)
+{
+ const uint type = wm_msg_subscribe_value_msg_cast(msg_key_test)->type;
+ const wmMsgTypeInfo *info = &wm_msg_types[type];
+ wmMsgSubscribeKey *key;
+
+ BLI_assert(wm_msg_subscribe_value_msg_cast(msg_key_test)->id != NULL);
+
+ void **r_key;
+ if (!BLI_gset_ensure_p_ex(mbus->messages_gset[type], msg_key_test, &r_key)) {
+ key = *r_key = MEM_mallocN(info->msg_key_size, __func__);
+ memcpy(key, msg_key_test, info->msg_key_size);
+ BLI_addtail(&mbus->messages, key);
+ }
+ else {
+ key = *r_key;
+ for (wmMsgSubscribeValueLink *msg_lnk = key->values.first; msg_lnk; msg_lnk = msg_lnk->next) {
+ if ((msg_lnk->params.notify == msg_val_params->notify) &&
+ (msg_lnk->params.owner == msg_val_params->owner) &&
+ (msg_lnk->params.user_data == msg_val_params->user_data))
+ {
+ return key;
+ }
+ }
+ }
+
+ wmMsgSubscribeValueLink *msg_lnk = MEM_mallocN(sizeof(wmMsgSubscribeValueLink), __func__);
+ msg_lnk->params = *msg_val_params;
+ BLI_addtail(&key->values, msg_lnk);
+ return key;
+}
+
+void WM_msg_publish_with_key(struct wmMsgBus *mbus, wmMsgSubscribeKey *msg_key)
+{
+ for (wmMsgSubscribeValueLink *msg_lnk = msg_key->values.first; msg_lnk; msg_lnk = msg_lnk->next) {
+ if (false) { /* make an option? */
+ msg_lnk->params.notify(NULL, msg_key, &msg_lnk->params);
+ }
+ else {
+ if (msg_lnk->params.tag == false) {
+ msg_lnk->params.tag = true;
+ mbus->messages_tag_count += 1;
+ }
+ }
+ }
+}
+
+void WM_msg_id_update(
+ struct wmMsgBus *mbus,
+ struct ID *id_src, struct ID *id_dst)
+{
+ for (uint i = 0; i < WM_MSG_TYPE_NUM; i++) {
+ wmMsgTypeInfo *info = &wm_msg_types[i];
+ if (info->update_by_id != NULL) {
+ info->update_by_id(mbus, id_src, id_dst);
+ }
+ }
+}
+
+void WM_msg_id_remove(struct wmMsgBus *mbus, const struct ID *id)
+{
+ for (uint i = 0; i < WM_MSG_TYPE_NUM; i++) {
+ wmMsgTypeInfo *info = &wm_msg_types[i];
+ if (info->remove_by_id != NULL) {
+ info->remove_by_id(mbus, id);
+ }
+ }
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------------- */
+/** \name Internal API
+ *
+ * \note While we could have a separate type for ID's, use RNA since there is enough overlap.
+ * \{ */
+
+void wm_msg_subscribe_value_free(
+ wmMsgSubscribeKey *msg_key, wmMsgSubscribeValueLink *msg_lnk)
+{
+ if (msg_lnk->params.free_data) {
+ msg_lnk->params.free_data(msg_key, &msg_lnk->params);
+ }
+ BLI_remlink(&msg_key->values, msg_lnk);
+ MEM_freeN(msg_lnk);
+}
+
+/** \} */
diff --git a/source/blender/windowmanager/message_bus/intern/wm_message_bus_intern.h b/source/blender/windowmanager/message_bus/intern/wm_message_bus_intern.h
new file mode 100644
index 00000000000..db8b481a3c2
--- /dev/null
+++ b/source/blender/windowmanager/message_bus/intern/wm_message_bus_intern.h
@@ -0,0 +1,55 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/windowmanager/message_bus/intern/wm_message_bus_intern.h
+ * \ingroup wm
+ */
+
+#ifndef __WM_MESSAGE_BUS_INTERN_H__
+#define __WM_MESSAGE_BUS_INTERN_H__
+
+/* wm_message_bus.h must be included first */
+
+struct wmMsgBus {
+ struct GSet *messages_gset[WM_MSG_TYPE_NUM];
+ /** Messages in order of being added. */
+ ListBase messages;
+ /** Avoid checking messages when no tags exist. */
+ uint messages_tag_count;
+};
+
+void wm_msg_subscribe_value_free(
+ struct wmMsgSubscribeKey *msg_key, struct wmMsgSubscribeValueLink *msg_lnk);
+
+typedef struct wmMsgSubscribeKey_Generic {
+ wmMsgSubscribeKey head;
+ wmMsg msg;
+} wmMsgSubscribeKey_Generic;
+
+BLI_INLINE const wmMsg *wm_msg_subscribe_value_msg_cast(const wmMsgSubscribeKey *key)
+{
+ return &((wmMsgSubscribeKey_Generic *)key)->msg;
+}
+BLI_INLINE wmMsg *wm_msg_subscribe_value_msg_cast_mut(wmMsgSubscribeKey *key)
+{
+ return &((wmMsgSubscribeKey_Generic *)key)->msg;
+}
+
+#endif /* __WM_MESSAGE_BUS_INTERN_H__ */
diff --git a/source/blender/windowmanager/message_bus/intern/wm_message_bus_rna.c b/source/blender/windowmanager/message_bus/intern/wm_message_bus_rna.c
new file mode 100644
index 00000000000..f9d8d968b84
--- /dev/null
+++ b/source/blender/windowmanager/message_bus/intern/wm_message_bus_rna.c
@@ -0,0 +1,316 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/windowmanager/intern/wm_message_bus_rna.c
+ * \ingroup wm
+ */
+
+#include <stdio.h>
+#include "DNA_ID.h"
+
+#include "BLI_utildefines.h"
+#include "BLI_ghash.h"
+#include "BLI_listbase.h"
+
+#include "WM_types.h"
+#include "WM_message.h"
+#include "message_bus/intern/wm_message_bus_intern.h"
+
+#include "RNA_access.h"
+
+#include "MEM_guardedalloc.h"
+
+/* -------------------------------------------------------------------------- */
+
+BLI_INLINE uint void_hash_uint(const void *key)
+{
+ size_t y = (size_t)key >> (sizeof(void *));
+ return (unsigned int)y;
+}
+
+static uint wm_msg_rna_gset_hash(const void *key_p)
+{
+ const wmMsgSubscribeKey_RNA *key = key_p;
+ const wmMsgParams_RNA *params = &key->msg.params;
+// printf("%s\n", RNA_struct_identifier(params->ptr.type));
+ uint k = void_hash_uint(params->ptr.type);
+ k ^= void_hash_uint(params->ptr.data);
+ k ^= void_hash_uint(params->ptr.id.data);
+ k ^= void_hash_uint(params->prop);
+ return k;
+}
+static bool wm_msg_rna_gset_cmp(const void *key_a_p, const void *key_b_p)
+{
+ const wmMsgParams_RNA *params_a = &((const wmMsgSubscribeKey_RNA *)key_a_p)->msg.params;
+ const wmMsgParams_RNA *params_b = &((const wmMsgSubscribeKey_RNA *)key_b_p)->msg.params;
+ return !(
+ (params_a->ptr.type ==
+ params_b->ptr.type) &&
+ (params_a->ptr.id.data ==
+ params_b->ptr.id.data) &&
+ (params_a->ptr.data ==
+ params_b->ptr.data) &&
+ (params_a->prop ==
+ params_b->prop)
+ );
+}
+static void wm_msg_rna_gset_key_free(void *key_p)
+{
+ wmMsgSubscribeKey_RNA *key = key_p;
+ wmMsgSubscribeValueLink *msg_lnk_next;
+ for (wmMsgSubscribeValueLink *msg_lnk = key->head.values.first; msg_lnk; msg_lnk = msg_lnk_next) {
+ msg_lnk_next = msg_lnk->next;
+ wm_msg_subscribe_value_free(&key->head, msg_lnk);
+ }
+ if (key->msg.params.data_path != NULL) {
+ MEM_freeN(key->msg.params.data_path);
+ }
+ MEM_freeN(key);
+}
+
+static void wm_msg_rna_repr(FILE *stream, const wmMsgSubscribeKey *msg_key)
+{
+ const wmMsgSubscribeKey_RNA *m = (wmMsgSubscribeKey_RNA *)msg_key;
+ const char *none = "<none>";
+ fprintf(stream,
+ "<wmMsg_RNA %p, "
+ "id='%s', "
+ "%s.%s values_len=%d\n",
+ m, m->msg.head.id,
+ m->msg.params.ptr.type ? RNA_struct_identifier(m->msg.params.ptr.type) : none,
+ m->msg.params.prop ? RNA_property_identifier((PropertyRNA *)m->msg.params.prop) : none,
+ BLI_listbase_count(&m->head.values));
+}
+
+static void wm_msg_rna_update_by_id(
+ struct wmMsgBus *mbus,
+ ID *id_src, ID *id_dst)
+{
+ GSet *gs = mbus->messages_gset[WM_MSG_TYPE_RNA];
+ GSetIterator gs_iter;
+ BLI_gsetIterator_init(&gs_iter, gs);
+ while (BLI_gsetIterator_done(&gs_iter) == false) {
+ wmMsgSubscribeKey_RNA *key = BLI_gsetIterator_getKey(&gs_iter);
+ BLI_gsetIterator_step(&gs_iter);
+ if (key->msg.params.ptr.id.data == id_src) {
+
+ /* GSet always needs updating since the key changes. */
+ BLI_gset_remove(gs, key, NULL);
+
+ /* Remove any non-persistent values, so a single persistent
+ * value doesn't modify behavior for the rest. */
+ wmMsgSubscribeValueLink *msg_lnk_next;
+ for (wmMsgSubscribeValueLink *msg_lnk = key->head.values.first; msg_lnk; msg_lnk = msg_lnk_next) {
+ msg_lnk_next = msg_lnk->next;
+ if (msg_lnk->params.is_persistent == false) {
+ wm_msg_subscribe_value_free(&key->head, msg_lnk);
+ }
+ }
+
+ bool remove = true;
+
+ if (BLI_listbase_is_empty(&key->head.values)) {
+ /* Remove, no reason to keep. */
+ }
+ else if (key->msg.params.ptr.data == key->msg.params.ptr.id.data) {
+ /* Simple, just update the ID. */
+ key->msg.params.ptr.data = id_dst;
+ key->msg.params.ptr.id.data = id_dst;
+ remove = false;
+ }
+ else {
+ /* we need to resolve this from the */
+ PointerRNA idptr;
+ RNA_id_pointer_create(id_dst, &idptr);
+ PointerRNA ptr;
+ PropertyRNA *prop;
+ if (!RNA_path_resolve(&idptr, key->msg.params.data_path, &ptr, &prop)) {
+ key->msg.params.ptr = ptr;
+ key->msg.params.prop = prop;
+ remove = false;
+ }
+ }
+
+ printf("AAA ~ %d\n", remove);
+ if (remove) {
+ /* Failed to persist, remove the key. */
+ BLI_remlink(&mbus->messages, key);
+ wm_msg_rna_gset_key_free(key);
+ }
+ else {
+ /* note that it's not impossible this key exists, however it is very unlikely
+ * since a subscriber would need to register in the middle of an undo for eg. so assert for now. */
+ BLI_assert(!BLI_gset_haskey(gs, key));
+ BLI_gset_add(gs, key);
+ }
+ }
+ }
+}
+
+static void wm_msg_rna_remove_by_id(struct wmMsgBus *mbus, const ID *id)
+{
+ GSet *gs = mbus->messages_gset[WM_MSG_TYPE_RNA];
+ GSetIterator gs_iter;
+ BLI_gsetIterator_init(&gs_iter, gs);
+ while (BLI_gsetIterator_done(&gs_iter) == false) {
+ wmMsgSubscribeKey_RNA *key = BLI_gsetIterator_getKey(&gs_iter);
+ BLI_gsetIterator_step(&gs_iter);
+ if (key->msg.params.ptr.id.data == id) {
+ BLI_remlink(&mbus->messages, key);
+ BLI_gset_remove(gs, key, NULL);
+ wm_msg_rna_gset_key_free(key);
+ }
+ }
+}
+
+void WM_msgtypeinfo_init_rna(wmMsgTypeInfo *msgtype_info)
+{
+ msgtype_info->gset.hash_fn = wm_msg_rna_gset_hash;
+ msgtype_info->gset.cmp_fn = wm_msg_rna_gset_cmp;
+ msgtype_info->gset.key_free_fn = wm_msg_rna_gset_key_free;
+
+ msgtype_info->repr = wm_msg_rna_repr;
+ msgtype_info->update_by_id = wm_msg_rna_update_by_id;
+ msgtype_info->remove_by_id = wm_msg_rna_remove_by_id;
+
+ msgtype_info->msg_key_size = sizeof(wmMsgSubscribeKey_RNA);
+}
+
+/* -------------------------------------------------------------------------- */
+
+
+wmMsgSubscribeKey_RNA *WM_msg_lookup_rna(struct wmMsgBus *mbus, const wmMsgParams_RNA *msg_key_params)
+{
+ wmMsgSubscribeKey_RNA key_test;
+ key_test.msg.params = *msg_key_params;
+ return BLI_gset_lookup(mbus->messages_gset[WM_MSG_TYPE_RNA], &key_test);
+}
+
+void WM_msg_publish_rna_params(struct wmMsgBus *mbus, const wmMsgParams_RNA *msg_key_params)
+{
+ wmMsgSubscribeKey_RNA *key;
+
+ if ((key = WM_msg_lookup_rna(mbus, msg_key_params))) {
+ WM_msg_publish_with_key(mbus, &key->head);
+ }
+
+ /* Support anonymous subscribers, this may be some extra overhead
+ * but we want to be able to be more ambiguous. */
+ if (msg_key_params->ptr.id.data || msg_key_params->ptr.data) {
+ wmMsgParams_RNA msg_key_params_anon = *msg_key_params;
+
+ /* We might want to enable this later? */
+ if (msg_key_params_anon.prop != NULL) {
+ /* All properties for this type. */
+ msg_key_params_anon.prop = NULL;
+ if ((key = WM_msg_lookup_rna(mbus, &msg_key_params_anon))) {
+ WM_msg_publish_with_key(mbus, &key->head);
+ }
+ msg_key_params_anon.prop = msg_key_params->prop;
+ }
+
+ msg_key_params_anon.ptr.id.data = NULL;
+ msg_key_params_anon.ptr.data = NULL;
+ if ((key = WM_msg_lookup_rna(mbus, &msg_key_params_anon))) {
+ WM_msg_publish_with_key(mbus, &key->head);
+ }
+
+ /* Support subscribers to a type. */
+ if (msg_key_params->prop) {
+ msg_key_params_anon.prop = NULL;
+ if ((key = WM_msg_lookup_rna(mbus, &msg_key_params_anon))) {
+ WM_msg_publish_with_key(mbus, &key->head);
+ }
+ }
+ }
+}
+
+void WM_msg_publish_rna(struct wmMsgBus *mbus, PointerRNA *ptr, PropertyRNA *prop)
+{
+ WM_msg_publish_rna_params(mbus, &(wmMsgParams_RNA){ .ptr = *ptr, .prop = prop, });
+}
+
+void WM_msg_subscribe_rna_params(
+ struct wmMsgBus *mbus,
+ const wmMsgParams_RNA *msg_key_params,
+ const wmMsgSubscribeValue *msg_val_params,
+ const char *id_repr)
+{
+ wmMsgSubscribeKey_RNA msg_key_test = {{NULL}};
+
+ /* use when added */
+ msg_key_test.msg.head.id = id_repr;
+ msg_key_test.msg.head.type = WM_MSG_TYPE_RNA;
+ /* for lookup */
+ msg_key_test.msg.params = *msg_key_params;
+
+ wmMsgSubscribeKey_RNA *msg_key = (wmMsgSubscribeKey_RNA *)WM_msg_subscribe_with_key(
+ mbus, &msg_key_test.head, msg_val_params);
+
+ if (msg_val_params->is_persistent) {
+ if (msg_key->msg.params.data_path == NULL) {
+ if (msg_key->msg.params.ptr.data != msg_key->msg.params.ptr.id.data) {
+ /* We assume prop type can't change. */
+ msg_key->msg.params.data_path = RNA_path_from_ID_to_struct(&msg_key->msg.params.ptr);
+ }
+ }
+ }
+}
+
+void WM_msg_subscribe_rna(
+ struct wmMsgBus *mbus,
+ PointerRNA *ptr, const PropertyRNA *prop,
+ const wmMsgSubscribeValue *msg_val_params,
+ const char *id_repr)
+{
+ WM_msg_subscribe_rna_params(
+ mbus,
+ &(const wmMsgParams_RNA){
+ .ptr = *ptr,
+ .prop = prop,
+ },
+ msg_val_params, id_repr);
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------------- */
+/** \name ID variants of RNA API
+ *
+ * \note While we could have a separate type for ID's, use RNA since there is enough overlap.
+ * \{ */
+
+void WM_msg_subscribe_ID(
+ struct wmMsgBus *mbus, ID *id, const wmMsgSubscribeValue *msg_val_params,
+ const char *id_repr)
+{
+ wmMsgParams_RNA msg_key_params = {NULL};
+ RNA_id_pointer_create(id, &msg_key_params.ptr);
+ WM_msg_subscribe_rna_params(mbus, &msg_key_params, msg_val_params, id_repr);
+}
+
+void WM_msg_publish_ID(struct wmMsgBus *mbus, ID *id)
+{
+ wmMsgParams_RNA msg_key_params = {NULL};
+ RNA_id_pointer_create(id, &msg_key_params.ptr);
+ WM_msg_publish_rna_params(mbus, &msg_key_params);
+}
+
+/** \} */
diff --git a/source/blender/windowmanager/message_bus/intern/wm_message_bus_static.c b/source/blender/windowmanager/message_bus/intern/wm_message_bus_static.c
new file mode 100644
index 00000000000..59bebad7f7b
--- /dev/null
+++ b/source/blender/windowmanager/message_bus/intern/wm_message_bus_static.c
@@ -0,0 +1,136 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/windowmanager/intern/wm_message_bus_static.c
+ * \ingroup wm
+ */
+
+#include <stdio.h>
+
+#include "BLI_utildefines.h"
+#include "BLI_ghash.h"
+#include "BLI_listbase.h"
+
+#include "WM_types.h"
+#include "WM_message.h"
+#include "message_bus/intern/wm_message_bus_intern.h"
+
+#include "MEM_guardedalloc.h"
+
+/* -------------------------------------------------------------------------- */
+
+static uint wm_msg_static_gset_hash(const void *key_p)
+{
+ const wmMsgSubscribeKey_Static *key = key_p;
+ const wmMsgParams_Static *params = &key->msg.params;
+ uint k = params->event;
+ return k;
+}
+static bool wm_msg_static_gset_cmp(const void *key_a_p, const void *key_b_p)
+{
+ const wmMsgParams_Static *params_a = &((const wmMsgSubscribeKey_Static *)key_a_p)->msg.params;
+ const wmMsgParams_Static *params_b = &((const wmMsgSubscribeKey_Static *)key_b_p)->msg.params;
+ return !(
+ (params_a->event ==
+ params_b->event)
+ );
+}
+static void wm_msg_static_gset_key_free(void *key_p)
+{
+ wmMsgSubscribeKey *key = key_p;
+ wmMsgSubscribeValueLink *msg_lnk_next;
+ for (wmMsgSubscribeValueLink *msg_lnk = key->values.first; msg_lnk; msg_lnk = msg_lnk_next) {
+ msg_lnk_next = msg_lnk->next;
+ BLI_remlink(&key->values, msg_lnk);
+ MEM_freeN(msg_lnk);
+ }
+ MEM_freeN(key);
+}
+
+static void wm_msg_static_repr(FILE *stream, const wmMsgSubscribeKey *msg_key)
+{
+ const wmMsgSubscribeKey_Static *m = (wmMsgSubscribeKey_Static *)msg_key;
+ fprintf(stream,
+ "<wmMsg_Static %p, "
+ "id='%s', "
+ "values_len=%d\n",
+ m, m->msg.head.id,
+ BLI_listbase_count(&m->head.values));
+}
+
+
+void WM_msgtypeinfo_init_static(wmMsgTypeInfo *msgtype_info)
+{
+ msgtype_info->gset.hash_fn = wm_msg_static_gset_hash;
+ msgtype_info->gset.cmp_fn = wm_msg_static_gset_cmp;
+ msgtype_info->gset.key_free_fn = wm_msg_static_gset_key_free;
+ msgtype_info->repr = wm_msg_static_repr;
+
+ msgtype_info->msg_key_size = sizeof(wmMsgSubscribeKey_Static);
+}
+
+/* -------------------------------------------------------------------------- */
+
+
+wmMsgSubscribeKey_Static *WM_msg_lookup_static(struct wmMsgBus *mbus, const wmMsgParams_Static *msg_key_params)
+{
+ wmMsgSubscribeKey_Static key_test;
+ key_test.msg.params = *msg_key_params;
+ return BLI_gset_lookup(mbus->messages_gset[WM_MSG_TYPE_STATIC], &key_test);
+}
+
+void WM_msg_publish_static_params(struct wmMsgBus *mbus, const wmMsgParams_Static *msg_key_params)
+{
+ wmMsgSubscribeKey_Static *key = WM_msg_lookup_static(mbus, msg_key_params);
+ if (key) {
+ WM_msg_publish_with_key(mbus, &key->head);
+ }
+}
+
+void WM_msg_publish_static(struct wmMsgBus *mbus, int event)
+{
+ WM_msg_publish_static_params(mbus, &(wmMsgParams_Static){ .event = event, });
+}
+
+void WM_msg_subscribe_static_params(
+ struct wmMsgBus *mbus,
+ const wmMsgParams_Static *msg_key_params,
+ const wmMsgSubscribeValue *msg_val_params,
+ const char *id_repr)
+{
+ wmMsgSubscribeKey_Static msg_key_test = {{NULL}};
+
+ /* use when added */
+ msg_key_test.msg.head.id = id_repr;
+ msg_key_test.msg.head.type = WM_MSG_TYPE_STATIC;
+ /* for lookup */
+ msg_key_test.msg.params = *msg_key_params;
+
+ WM_msg_subscribe_with_key(mbus, &msg_key_test.head, msg_val_params);
+}
+
+void WM_msg_subscribe_static(
+ struct wmMsgBus *mbus,
+ int event,
+ const wmMsgSubscribeValue *msg_val_params,
+ const char *id_repr)
+{
+ WM_msg_subscribe_static_params(mbus, &(const wmMsgParams_Static){ .event = event, }, msg_val_params, id_repr);
+}
diff --git a/source/blender/windowmanager/message_bus/wm_message_bus.h b/source/blender/windowmanager/message_bus/wm_message_bus.h
new file mode 100644
index 00000000000..53f283cacd2
--- /dev/null
+++ b/source/blender/windowmanager/message_bus/wm_message_bus.h
@@ -0,0 +1,256 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/windowmanager/wm_message_bus.h
+ * \ingroup wm
+ */
+
+#ifndef __WM_MESSAGE_BUS_H__
+#define __WM_MESSAGE_BUS_H__
+
+struct GSet;
+struct ID;
+struct bContext;
+struct wmMsg;
+
+/* opaque (don't expose outside wm_message_bus.c) */
+struct wmMsgBus;
+struct wmMsgSubscribeKey;
+struct wmMsgSubscribeValue;
+struct wmMsgSubscribeValueLink;
+
+typedef void (*wmMsgNotifyFn)(
+ struct bContext *C, struct wmMsgSubscribeKey *msg_key, struct wmMsgSubscribeValue *msg_val);
+typedef void (*wmMsgSubscribeValueFreeDataFn)(
+ struct wmMsgSubscribeKey *msg_key, struct wmMsgSubscribeValue *msg_val);
+
+/* Exactly what arguments here is not obvious. */
+typedef void (*wmMsgSubscribeValueUpdateIdFn)(
+ struct bContext *C,
+ struct wmMsgBus *mbus,
+ struct ID *id_src, struct ID *id_dst,
+ struct wmMsgSubscribeValue *msg_val);
+enum {
+ WM_MSG_TYPE_RNA = 0,
+ WM_MSG_TYPE_STATIC = 1,
+};
+#define WM_MSG_TYPE_NUM 2
+
+typedef struct wmMsgTypeInfo {
+ struct {
+ unsigned int (*hash_fn)(const void *msg);
+ bool (*cmp_fn)(const void *a, const void *b);
+ void (*key_free_fn)(void *key);
+ } gset;
+
+ void (*update_by_id)(struct wmMsgBus *mbus, struct ID *id_src, struct ID *id_dst);
+ void (*remove_by_id)(struct wmMsgBus *mbus, const struct ID *id);
+ void (*repr)(FILE *stream, const struct wmMsgSubscribeKey *msg_key);
+
+ /* sizeof(wmMsgSubscribeKey_*) */
+ uint msg_key_size;
+} wmMsgTypeInfo;
+
+typedef struct wmMsg {
+ unsigned int type;
+// #ifdef DEBUG
+ /* For debugging: '__func__:__LINE__'. */
+ const char *id;
+// #endif
+} wmMsg;
+
+typedef struct wmMsgSubscribeKey {
+ /** Linked list for predicable ordering, otherwise we would depend on ghash bucketing. */
+ struct wmMsgSubscribeKey *next, *prev;
+ ListBase values;
+ /* over-alloc, eg: wmMsgSubscribeKey_RNA */
+ /* Last member will be 'wmMsg_*' */
+} wmMsgSubscribeKey;
+
+/** One of many in #wmMsgSubscribeKey.values */
+typedef struct wmMsgSubscribeValue {
+ struct wmMsgSubscribe *next, *prev;
+
+ /** Handle, used to iterate and clear. */
+ void *owner;
+ /** User data, can be whatever we like, free using the 'free_data' callback if it's owned. */
+ void *user_data;
+
+ /** Callbacks */
+ wmMsgNotifyFn notify;
+ wmMsgSubscribeValueUpdateIdFn update_id;
+ wmMsgSubscribeValueFreeDataFn free_data;
+
+ /** Keep this subscriber if possible. */
+ uint is_persistent : 1;
+ /* tag to run when handling events,
+ * we may want option for immediate execution. */
+ uint tag : 1;
+} wmMsgSubscribeValue;
+
+/** One of many in #wmMsgSubscribeKey.values */
+typedef struct wmMsgSubscribeValueLink {
+ struct wmMsgSubscribeValueLink *next, *prev;
+ wmMsgSubscribeValue params;
+} wmMsgSubscribeValueLink;
+
+void WM_msgbus_types_init(void);
+
+struct wmMsgBus *WM_msgbus_create(void);
+void WM_msgbus_destroy(struct wmMsgBus *mbus);
+
+void WM_msgbus_clear_by_owner(struct wmMsgBus *mbus, void *owner);
+
+void WM_msg_dump(struct wmMsgBus *mbus, const char *info);
+void WM_msgbus_handle(struct wmMsgBus *mbus, struct bContext *C);
+
+void WM_msg_publish_with_key(struct wmMsgBus *mbus, wmMsgSubscribeKey *msg_key);
+wmMsgSubscribeKey *WM_msg_subscribe_with_key(
+ struct wmMsgBus *mbus,
+ const wmMsgSubscribeKey *msg_key_test,
+ const wmMsgSubscribeValue *msg_val_params);
+
+void WM_msg_id_update(
+ struct wmMsgBus *mbus,
+ struct ID *id_src, struct ID *id_dst);
+void WM_msg_id_remove(struct wmMsgBus *mbus, const struct ID *id);
+
+/* -------------------------------------------------------------------------- */
+/* wm_message_bus_static.c */
+
+enum {
+ /* generic window redraw */
+ WM_MSG_STATICTYPE_WINDOW_DRAW = 0,
+ WM_MSG_STATICTYPE_SCREEN_EDIT = 1,
+ WM_MSG_STATICTYPE_FILE_READ = 2,
+};
+
+typedef struct wmMsgParams_Static {
+ int event;
+} wmMsgParams_Static;
+
+typedef struct wmMsg_Static {
+ wmMsg head; /* keep first */
+ wmMsgParams_Static params;
+} wmMsg_Static;
+
+typedef struct wmMsgSubscribeKey_Static {
+ wmMsgSubscribeKey head;
+ wmMsg_Static msg;
+} wmMsgSubscribeKey_Static;
+
+void WM_msgtypeinfo_init_static(wmMsgTypeInfo *msg_type);
+
+wmMsgSubscribeKey_Static *WM_msg_lookup_static(
+ struct wmMsgBus *mbus, const wmMsgParams_Static *msg_key_params);
+void WM_msg_publish_static_params(
+ struct wmMsgBus *mbus,
+ const wmMsgParams_Static *msg_key_params);
+void WM_msg_publish_static(
+ struct wmMsgBus *mbus,
+ /* wmMsgParams_Static (expanded) */
+ int event);
+void WM_msg_subscribe_static_params(
+ struct wmMsgBus *mbus,
+ const wmMsgParams_Static *msg_key_params,
+ const wmMsgSubscribeValue *msg_val_params,
+ const char *id_repr);
+void WM_msg_subscribe_static(
+ struct wmMsgBus *mbus,
+ int event,
+ const wmMsgSubscribeValue *msg_val_params,
+ const char *id_repr);
+
+/* -------------------------------------------------------------------------- */
+/* wm_message_bus_rna.c */
+
+typedef struct wmMsgParams_RNA {
+ /** when #PointerRNA.data & id.data are NULL. match against all. */
+ PointerRNA ptr;
+ /** when NULL, match against any property. */
+ const PropertyRNA *prop;
+
+ /**
+ * Optional RNA data path for persistent RNA properties, ignore if NULL.
+ * otherwise it's allocated.
+ */
+ char *data_path;
+} wmMsgParams_RNA;
+
+typedef struct wmMsg_RNA {
+ wmMsg head; /* keep first */
+ wmMsgParams_RNA params;
+} wmMsg_RNA;
+
+typedef struct wmMsgSubscribeKey_RNA {
+ wmMsgSubscribeKey head;
+ wmMsg_RNA msg;
+} wmMsgSubscribeKey_RNA;
+
+void WM_msgtypeinfo_init_rna(wmMsgTypeInfo *msg_type);
+
+wmMsgSubscribeKey_RNA *WM_msg_lookup_rna(
+ struct wmMsgBus *mbus, const wmMsgParams_RNA *msg_key_params);
+void WM_msg_publish_rna_params(
+ struct wmMsgBus *mbus, const wmMsgParams_RNA *msg_key_params);
+void WM_msg_publish_rna(
+ struct wmMsgBus *mbus,
+ /* wmMsgParams_RNA (expanded) */
+ PointerRNA *ptr, PropertyRNA *prop);
+void WM_msg_subscribe_rna_params(
+ struct wmMsgBus *mbus,
+ const wmMsgParams_RNA *msg_key_params,
+ const wmMsgSubscribeValue *msg_val_params,
+ const char *id_repr);
+void WM_msg_subscribe_rna(
+ struct wmMsgBus *mbus,
+ PointerRNA *ptr, const PropertyRNA *prop,
+ const wmMsgSubscribeValue *msg_val_params,
+ const char *id_repr);
+
+/* ID variants */
+void WM_msg_subscribe_ID(
+ struct wmMsgBus *mbus, struct ID *id, const wmMsgSubscribeValue *msg_val_params,
+ const char *id_repr);
+void WM_msg_publish_ID(
+ struct wmMsgBus *mbus, struct ID *id);
+
+/* Anonymous variants (for convenience) */
+#define WM_msg_subscribe_rna_anon_type(mbus, type_, value) { \
+ WM_msg_subscribe_rna_params( \
+ mbus, \
+ &(const wmMsgParams_RNA){ \
+ .ptr = (PointerRNA){.type = &RNA_##type_}, \
+ .prop = NULL, \
+ }, \
+ value, __func__); \
+} ((void)0)
+#define WM_msg_subscribe_rna_anon_prop(mbus, type_, prop_, value) { \
+ extern PropertyRNA rna_##type_##_##prop_; \
+ WM_msg_subscribe_rna_params( \
+ mbus, \
+ &(const wmMsgParams_RNA){ \
+ .ptr = (PointerRNA){.type = &RNA_##type_}, \
+ .prop = &rna_##type_##_##prop_, \
+ }, \
+ value, __func__); \
+} ((void)0)
+
+#endif /* __WM_MESSAGE_BUS_H__ */
diff --git a/source/blender/windowmanager/wm.h b/source/blender/windowmanager/wm.h
index a417a719b8d..7fe6db4e470 100644
--- a/source/blender/windowmanager/wm.h
+++ b/source/blender/windowmanager/wm.h
@@ -34,6 +34,8 @@
struct wmWindow;
struct ReportList;
+#include "manipulators/wm_manipulator_wmapi.h"
+
typedef struct wmPaintCursor {
struct wmPaintCursor *next, *prev;
@@ -46,7 +48,7 @@ typedef struct wmPaintCursor {
extern void wm_close_and_free(bContext *C, wmWindowManager *);
extern void wm_close_and_free_all(bContext *C, ListBase *);
-extern void wm_add_default(bContext *C);
+extern void wm_add_default(struct Main *bmain, bContext *C);
extern void wm_clear_default_size(bContext *C);
/* register to windowmanager for redo or macro */
diff --git a/source/blender/windowmanager/wm_draw.h b/source/blender/windowmanager/wm_draw.h
index 5257bba45ff..56dff304719 100644
--- a/source/blender/windowmanager/wm_draw.h
+++ b/source/blender/windowmanager/wm_draw.h
@@ -34,6 +34,8 @@
#include "GPU_glew.h"
+#define USE_TEXTURE_RECTANGLE 1
+
typedef struct wmDrawTriple {
GLuint bind;
int x, y;
@@ -56,7 +58,7 @@ void wm_draw_region_clear (struct wmWindow *win, struct ARegion *ar);
void wm_tag_redraw_overlay (struct wmWindow *win, struct ARegion *ar);
-void wm_triple_draw_textures (struct wmWindow *win, struct wmDrawTriple *triple, float alpha, bool is_interlace);
+void wm_triple_draw_textures (struct wmWindow *win, struct wmDrawTriple *triple, float alpha);
void wm_draw_data_free (struct wmWindow *win);
diff --git a/source/blender/windowmanager/wm_event_system.h b/source/blender/windowmanager/wm_event_system.h
index 9977e73f2fd..c14517f1662 100644
--- a/source/blender/windowmanager/wm_event_system.h
+++ b/source/blender/windowmanager/wm_event_system.h
@@ -68,7 +68,8 @@ typedef struct wmEventHandler {
/* drop box handler */
ListBase *dropboxes;
-
+ /* manipulator handler */
+ struct wmManipulatorMap *manipulator_map;
} wmEventHandler;
/* custom types for handlers, for signaling, freeing */
diff --git a/source/blender/windowmanager/wm_event_types.h b/source/blender/windowmanager/wm_event_types.h
index 090c8c90280..e327bd81d81 100644
--- a/source/blender/windowmanager/wm_event_types.h
+++ b/source/blender/windowmanager/wm_event_types.h
@@ -339,6 +339,8 @@ enum {
EVT_DROP = 0x5023,
EVT_BUT_CANCEL = 0x5024,
+ /* could become manipulator callback */
+ EVT_MANIPULATOR_UPDATE = 0x5025,
/* ********** End of Blender internal events. ********** */
};
diff --git a/source/blender/windowmanager/wm_files.h b/source/blender/windowmanager/wm_files.h
index b102b6c7cc7..6f63e55e8ab 100644
--- a/source/blender/windowmanager/wm_files.h
+++ b/source/blender/windowmanager/wm_files.h
@@ -45,6 +45,7 @@ void WM_OT_save_homefile(struct wmOperatorType *ot);
void WM_OT_userpref_autoexec_path_add(struct wmOperatorType *ot);
void WM_OT_userpref_autoexec_path_remove(struct wmOperatorType *ot);
void WM_OT_save_userpref(struct wmOperatorType *ot);
+void WM_OT_save_workspace_file(struct wmOperatorType *ot);
void WM_OT_read_history(struct wmOperatorType *ot);
void WM_OT_read_homefile(struct wmOperatorType *ot);
void WM_OT_read_factory_settings(struct wmOperatorType *ot);
diff --git a/source/blender/windowmanager/wm_window.h b/source/blender/windowmanager/wm_window.h
index f70ec6b47f6..0264955a4c5 100644
--- a/source/blender/windowmanager/wm_window.h
+++ b/source/blender/windowmanager/wm_window.h
@@ -32,7 +32,11 @@
#ifndef __WM_WINDOW_H__
#define __WM_WINDOW_H__
+struct EnumPropertyItem;
+struct wmEvent;
struct wmOperator;
+struct PointerRNA;
+struct PropertyRNA;
/* *************** internal api ************** */
void wm_ghost_init (bContext *C);
@@ -42,8 +46,8 @@ void wm_get_screensize(int *r_width, int *r_height);
void wm_get_desktopsize(int *r_width, int *r_height);
wmWindow *wm_window_new (bContext *C);
-wmWindow *wm_window_copy (bContext *C, wmWindow *win_src);
-wmWindow *wm_window_copy_test (bContext *C, wmWindow *win_src);
+wmWindow *wm_window_copy (bContext *C, wmWindow *win_src, const bool duplicate_layout);
+wmWindow *wm_window_copy_test (bContext *C, wmWindow *win_src, const bool duplicate_layout);
void wm_window_free (bContext *C, wmWindowManager *wm, wmWindow *win);
void wm_window_close (bContext *C, wmWindowManager *wm, wmWindow *win);
@@ -76,9 +80,13 @@ void wm_window_IME_end (wmWindow *win);
/* *************** window operators ************** */
int wm_window_close_exec(bContext *C, struct wmOperator *op);
-int wm_window_duplicate_exec(bContext *C, struct wmOperator *op);
int wm_window_fullscreen_toggle_exec(bContext *C, struct wmOperator *op);
+const struct EnumPropertyItem *wm_window_new_screen_itemf(
+ bContext *C, struct PointerRNA *ptr, struct PropertyRNA *prop, bool *r_free);
+int wm_window_new_exec(bContext *C, struct wmOperator *op);
+int wm_window_new_invoke(bContext *C, struct wmOperator *op, const struct wmEvent *event);
+
/* Initial (unmaximized) size to start with for
* systems that can't find it for themselves (X11).
* Clamped by real desktop limits */
diff --git a/source/blenderplayer/CMakeLists.txt b/source/blenderplayer/CMakeLists.txt
index 25ae83d04cd..dc7acb5ccd7 100644
--- a/source/blenderplayer/CMakeLists.txt
+++ b/source/blenderplayer/CMakeLists.txt
@@ -87,6 +87,12 @@ list(APPEND BLENDER_LINK_LIBS
blenkernel_blc
)
+if(WITH_AUDASPACE AND NOT WITH_SYSTEM_AUDASPACE)
+ list(APPEND BLENDER_LINK_LIBS
+ audaspace
+ audaspace-py)
+endif()
+
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
list(APPEND BLENDER_LINK_LIBS extern_binreloc)
endif()
@@ -123,6 +129,7 @@ endif()
bf_intern_moto
bf_nodes
bf_gpu
+ bf_intern_gawain
bf_imbuf
bf_avi
ge_logic_network
@@ -145,6 +152,8 @@ endif()
bf_blenfont
bf_blentranslation
bf_intern_audaspace
+ audaspace
+ audaspace-py
blenkernel_blc
bf_bmesh
bf_blenlib
diff --git a/source/blenderplayer/bad_level_call_stubs/CMakeLists.txt b/source/blenderplayer/bad_level_call_stubs/CMakeLists.txt
index 0e570e19258..d2c2129532a 100644
--- a/source/blenderplayer/bad_level_call_stubs/CMakeLists.txt
+++ b/source/blenderplayer/bad_level_call_stubs/CMakeLists.txt
@@ -35,11 +35,12 @@ set(INC
../../blender/blenloader
../../blender/makesdna
../../blender/makesrna
+ ../../../intern/glew-mx
../../../intern/guardedalloc
)
set(INC_SYS
-
+ ${GLEW_INCLUDE_PATH}
)
set(SRC
diff --git a/source/blenderplayer/bad_level_call_stubs/stubs.c b/source/blenderplayer/bad_level_call_stubs/stubs.c
index 1a1d813a995..799e1602243 100644
--- a/source/blenderplayer/bad_level_call_stubs/stubs.c
+++ b/source/blenderplayer/bad_level_call_stubs/stubs.c
@@ -43,6 +43,7 @@
struct ARegion;
struct ARegionType;
+struct bFaceMap;
struct BMEditMesh;
struct Base;
struct bContext;
@@ -113,6 +114,7 @@ struct bConstraintOb;
struct bConstraintTarget;
struct bContextDataResult;
struct bGPDlayer;
+struct bFaceMap;
struct bNode;
struct bNodeType;
struct bNodeSocket;
@@ -130,6 +132,8 @@ struct wmOperator;
struct wmOperatorType;
struct wmWindow;
struct wmWindowManager;
+struct wmManipulatorGroupType;
+struct wmManipulatorMap;
/* -------------------------------------------------------------------- */
@@ -142,6 +146,8 @@ struct wmWindowManager;
# pragma GCC diagnostic ignored "-Wunused-parameter"
#endif
+#include <stdio.h> /* FILE */
+
#include "../../intern/dualcon/dualcon.h"
#include "../../intern/elbeem/extern/elbeem.h"
#include "../blender/blenkernel/BKE_modifier.h"
@@ -160,12 +166,14 @@ struct wmWindowManager;
#include "../blender/editors/include/ED_keyframes_edit.h"
#include "../blender/editors/include/ED_keyframing.h"
#include "../blender/editors/include/ED_lattice.h"
+#include "../blender/editors/include/ED_manipulator_library.h"
#include "../blender/editors/include/ED_mball.h"
#include "../blender/editors/include/ED_mesh.h"
#include "../blender/editors/include/ED_node.h"
#include "../blender/editors/include/ED_object.h"
#include "../blender/editors/include/ED_particle.h"
#include "../blender/editors/include/ED_render.h"
+#include "../blender/editors/include/ED_scene.h"
#include "../blender/editors/include/ED_screen.h"
#include "../blender/editors/include/ED_space_api.h"
#include "../blender/editors/include/ED_text.h"
@@ -178,12 +186,18 @@ struct wmWindowManager;
#include "../blender/editors/include/UI_resources.h"
#include "../blender/editors/include/UI_view2d.h"
#include "../blender/freestyle/FRS_freestyle.h"
+#include "../blender/gpu/GPU_immediate.h"
+#include "../blender/gpu/GPU_matrix.h"
#include "../blender/python/BPY_extern.h"
+#include "../blender/python/intern/bpy_manipulator_wrap.h"
#include "../blender/render/extern/include/RE_engine.h"
#include "../blender/render/extern/include/RE_pipeline.h"
#include "../blender/render/extern/include/RE_render_ext.h"
#include "../blender/render/extern/include/RE_shader_ext.h"
+#include "../blender/draw/DRW_engine.h"
#include "../blender/windowmanager/WM_api.h"
+#include "../blender/windowmanager/WM_types.h"
+#include "../blender/windowmanager/WM_message.h"
/* -------------------------------------------------------------------- */
@@ -193,7 +207,11 @@ struct wmWindowManager;
/* bpy_operator_wrap.h */
extern void macro_wrapper(struct wmOperatorType *ot, void *userdata);
-extern void operator_wrapper(struct wmOperatorType *ot, void *userdata);
+extern void operator_wrapper(struct wmManipulatorGroupType *wgt, void *userdata);
+
+/* bpy_widgetgroup_wrap.h */
+extern void widgetgroup_wrapper(struct wmOperatorType *ot, void *userdata);
+
/* bpy_rna.h */
extern bool pyrna_id_FromPyObject(struct PyObject *obj, struct ID **id);
extern const char *BPY_app_translations_py_pgettext(const char *msgctxt, const char *msgid);
@@ -218,7 +236,6 @@ bool BPY_string_is_keyword(const char *str) { return false; }
#define RET_ARG(arg) {STUB_ASSERT(0); return arg; }
#define RET_NONE {STUB_ASSERT(0);}
-
/* -------------------------------------------------------------------- */
/* Stubs */
@@ -228,7 +245,7 @@ void EDBM_mesh_load(struct Object *ob) RET_NONE
void EDBM_mesh_make(struct ToolSettings *ts, struct Object *ob, const bool use_key_index) RET_NONE
void EDBM_mesh_normals_update(struct BMEditMesh *em) RET_NONE
void *g_system;
-bool EDBM_mtexpoly_check(struct BMEditMesh *em) RET_ZERO
+bool EDBM_uv_check(struct BMEditMesh *em) RET_ZERO
float *RE_RenderLayerGetPass(volatile struct RenderLayer *rl, const char *name, const char *viewname) RET_NULL
float RE_filter_value(int type, float x) RET_ZERO
@@ -260,7 +277,7 @@ bool ED_texture_context_check_linestyle(const struct bContext *C) RET_ZERO
void FRS_free_view_map_cache(void) RET_NONE
/* texture.c */
-int multitex_ext(struct Tex *tex, float texvec[3], float dxt[3], float dyt[3], int osatex, struct TexResult *texres, short thread, struct ImagePool *pool, bool scene_color_manage, const bool skip_load_image) RET_ZERO
+int multitex_ext(struct Tex *tex, float texvec[3], float dxt[3], float dyt[3], int osatex, struct TexResult *texres, const short thread, struct ImagePool *pool, bool scene_color_manage, const bool skip_load_image) RET_ZERO
int multitex_ext_safe(struct Tex *tex, float texvec[3], struct TexResult *texres, struct ImagePool *pool, bool scene_color_manage, const bool skip_load_image) RET_ZERO
int multitex_nodes(struct Tex *tex, float texvec[3], float dxt[3], float dyt[3], int osatex, struct TexResult *texres, const short thread, short which_output, struct ShadeInput *shi, struct MTex *mtex, struct ImagePool *pool) RET_ZERO
@@ -299,7 +316,7 @@ double elbeemEstimateMemreq(int res, float sx, float sy, float sz, int refine, c
struct Render *RE_NewRender(const char *name) RET_NULL
struct Render *RE_NewSceneRender(const struct Scene *scene) RET_NULL
void RE_SwapResult(struct Render *re, struct RenderResult **rr) RET_NONE
-void RE_BlenderFrame(struct Render *re, struct Main *bmain, struct Scene *scene, struct SceneRenderLayer *srl, struct Object *camera_override, unsigned int lay_override, int frame, const bool write_still) RET_NONE
+void RE_BlenderFrame(struct Render *re, struct Main *bmain, struct Scene *scene, struct ViewLayer *view_layer, struct Object *camera_override, unsigned int lay_override, int frame, const bool write_still) RET_NONE
bool RE_WriteEnvmapResult(struct ReportList *reports, struct Scene *scene, struct EnvMap *env, const char *relpath, const char imtype, float layout[12]) RET_ZERO
/* rna */
@@ -313,12 +330,23 @@ struct MenuType *WM_menutype_find(const char *idname, bool quiet) RET_NULL
void WM_operator_stack_clear(struct wmWindowManager *wm) RET_NONE
void WM_operator_handlers_clear(wmWindowManager *wm, struct wmOperatorType *ot) RET_NONE
bool WM_operator_is_repeat(const struct bContext *C, const struct wmOperator *op) RET_ZERO;
+void WM_windows_scene_data_sync(const struct ListBase *win_lb, struct Scene *scene) RET_NONE
+struct Scene *WM_windows_scene_get_from_screen(const struct wmWindowManager *wm, const struct bScreen *screen) RET_NULL
+struct WorkSpace *WM_windows_workspace_get_from_screen(const struct wmWindowManager *wm, const struct bScreen *screen) RET_NULL
+struct bScreen *WM_window_get_active_screen(const struct wmWindow *win) RET_NULL
+struct Scene *WM_window_get_active_scene(const struct wmWindow *win) RET_NULL
+struct WorkSpace *WM_window_get_active_workspace(const wmWindow *win) RET_NULL
+void WM_window_change_active_scene(struct Main *bmain, struct bContext *C, struct wmWindow *win, struct Scene *scene_new) RET_NONE
+bool WM_window_is_temp_screen(const struct wmWindow *win) RET_ZERO
void WM_autosave_init(wmWindowManager *wm) RET_NONE
void WM_jobs_kill_all_except(struct wmWindowManager *wm, void *owner) RET_NONE
void WM_lib_reload(struct Library *lib, struct bContext *C, struct ReportList *reports) RET_NONE
+void WM_msg_publish_rna(struct wmMsgBus *mbus, PointerRNA *ptr, PropertyRNA *prop) RET_NONE
+
+
char *WM_clipboard_text_get(bool selection, int *r_len) RET_NULL
char *WM_clipboard_text_get_firstline(bool selection, int *r_len) RET_NULL
void WM_clipboard_text_set(const char *buf, bool selection) RET_NONE
@@ -342,6 +370,42 @@ void WM_jobs_callbacks(struct wmJob *job,
void WM_jobs_start(struct wmWindowManager *wm, struct wmJob *job) RET_NONE
void WM_report(ReportType type, const char *message) RET_NONE
+void BPY_RNA_manipulatorgroup_wrapper(struct wmManipulatorGroupType *wgt, void *userdata) RET_NONE
+void BPY_RNA_manipulator_wrapper(struct wmManipulatorType *wgt, void *userdata) RET_NONE
+
+struct PointerRNA *WM_manipulator_operator_set(struct wmManipulator *mpr, int part_index, struct wmOperatorType *ot, struct IDProperty *properties) RET_NULL
+const struct wmManipulatorPropertyType *WM_manipulatortype_target_property_find(const struct wmManipulatorType *wt, const char *idname) RET_NULL
+const struct wmManipulatorType *WM_manipulatortype_find(const char *idname, bool quiet) RET_NULL
+struct wmManipulator *WM_manipulator_new_ptr(const struct wmManipulatorType *wt, struct wmManipulatorGroup *mgroup, struct PointerRNA *properties) RET_NULL
+struct wmManipulatorGroupType *WM_manipulatorgrouptype_append_ptr(void (*mnpfunc)(struct wmManipulatorGroupType *, void *), void *userdata) RET_NULL
+struct wmManipulatorGroupType *WM_manipulatorgrouptype_find(const char *idname, bool quiet) RET_NULL
+void WM_manipulator_unlink(ListBase *manipulatorlist, struct wmManipulatorMap *mmap, struct wmManipulator *mpr, struct bContext *C) RET_NONE
+void WM_manipulator_group_type_add_ptr(struct wmManipulatorGroupType *wgt) RET_NONE
+void WM_manipulator_group_type_add_ptr_ex(struct wmManipulatorGroupType *wgt, struct wmManipulatorMapType *mmap_type) RET_NONE
+void WM_manipulator_group_type_remove_ptr(struct Main *bmain, struct wmManipulatorGroupType *wgt) RET_NONE
+void WM_manipulator_name_set(struct wmManipulatorGroup *mgroup, struct wmManipulator *mpr, const char *name) RET_NONE
+bool WM_manipulator_select_set(struct wmManipulatorMap *mmap, struct wmManipulator *mpr, bool select) RET_ZERO
+void WM_manipulator_target_property_def_rna_ptr(struct wmManipulator *mpr, const struct wmManipulatorPropertyType *mpr_prop_type, struct PointerRNA *ptr, struct PropertyRNA *prop, int index) RET_NONE
+void WM_manipulatorgrouptype_free_ptr(struct wmManipulatorGroupType *wt) RET_NONE
+void WM_manipulatormaptype_group_unlink(struct bContext *C, struct Main *bmain, struct wmManipulatorMapType *mmap_type, const struct wmManipulatorGroupType *wgt) RET_NONE
+void WM_manipulatortype_append_ptr(void (*mnpfunc)(struct wmManipulatorType *, void *), void *userdata) RET_NONE
+void WM_manipulatortype_remove_ptr(struct bContext *C, struct Main *bmain, struct wmManipulatorType *wt) RET_NONE
+
+void ED_manipulator_draw_preset_box(const struct wmManipulator *mpr, float mat[4][4], int select_id) RET_NONE
+void ED_manipulator_draw_preset_arrow(const struct wmManipulator *mpr, float mat[4][4], int axis, int select_id) RET_NONE
+void ED_manipulator_draw_preset_circle(const struct wmManipulator *mpr, float mat[4][4], int axis, int select_id) RET_NONE
+void ED_manipulator_draw_preset_facemap(const struct bContext *C, const struct wmManipulator *mpr, struct Scene *scene, struct Object *ob, const int facemap, int select_id) RET_NONE
+
+struct wmManipulatorMapType *WM_manipulatormaptype_find(const struct wmManipulatorMapType_Params *wmap_params) RET_NULL
+struct wmManipulatorMapType *WM_manipulatormaptype_ensure(const struct wmManipulatorMapType_Params *wmap_params) RET_NULL
+struct wmManipulatorMap *WM_manipulatormap_new_from_type(const struct wmManipulatorMapType_Params *wmap_params) RET_NULL
+void WM_manipulatormaptype_group_init_runtime(
+ const struct Main *bmain, struct wmManipulatorMapType *mmap_type, struct wmManipulatorGroupType *wgt) RET_NONE
+const struct ListBase *WM_manipulatormap_group_list(struct wmManipulatorMap *mmap) RET_NULL
+void WM_manipulator_calc_matrix_final(const struct wmManipulator *mpr, float r_mat[4][4]) RET_NONE
+struct wmManipulatorProperty *WM_manipulator_target_property_find(struct wmManipulator *mpr, const char *idname) RET_NULL
+bool WM_manipulator_target_property_is_valid(const struct wmManipulatorProperty *mpr_prop) RET_ZERO
+
#ifdef WITH_INPUT_NDOF
void WM_ndof_deadzone_set(float deadzone) RET_NONE
#endif
@@ -367,8 +431,10 @@ void ED_armature_edit_bone_remove(struct bArmature *arm, struct EditBone *exBone
void object_test_constraints(struct Object *owner) RET_NONE
void ED_armature_ebone_to_mat4(struct EditBone *ebone, float mat[4][4]) RET_NONE
void ED_armature_ebone_from_mat4(EditBone *ebone, float mat[4][4]) RET_NONE
-void ED_object_parent(struct Object *ob, struct Object *par, int type, const char *substr) RET_NONE
+void ED_object_parent(struct Object *ob, struct Object *par, const int type, const char *substr) RET_NONE
void ED_object_constraint_set_active(struct Object *ob, struct bConstraint *con) RET_NONE
+void ED_object_facemap_face_add(struct Object *ob, struct bFaceMap *fmap, int facenum) RET_NONE
+void ED_object_facemap_face_remove(struct Object *ob, struct bFaceMap *fmap, int facenum) RET_NONE
void ED_node_composit_default(const struct bContext *C, struct Scene *scene) RET_NONE
void *ED_region_draw_cb_activate(struct ARegionType *art, void(*draw)(const struct bContext *, struct ARegion *, void *), void *custumdata, int type) RET_ZERO /* XXX this one looks weird */
void *ED_region_draw_cb_customdata(void *handle) RET_ZERO /* XXX This one looks wrong also */
@@ -382,7 +448,7 @@ void UI_view2d_sync(struct bScreen *screen, struct ScrArea *sa, struct View2D *v
struct EditBone *ED_armature_bone_get_mirrored(const struct ListBase *edbo, EditBone *ebo) RET_NULL
struct EditBone *ED_armature_edit_bone_add(struct bArmature *arm, const char *name) RET_NULL
-struct ListBase *get_active_constraints (struct Object *ob) RET_NULL
+struct ListBase *get_active_constraints (const struct EvaluationContext *eval_ctx, struct Object *ob) RET_NULL
struct ListBase *get_constraint_lb(struct Object *ob, struct bConstraint *con, struct bPoseChannel **r_pchan) RET_NULL
bool ED_space_image_show_uvedit(struct SpaceImage *sima, struct Object *obedit) RET_ZERO
@@ -395,7 +461,6 @@ void ED_space_image_scopes_update(const struct bContext *C, struct SpaceImage *s
void ED_uvedit_get_aspect(struct Scene *scene, struct Object *ob, struct BMesh *em, float *aspx, float *aspy) RET_NONE
-void ED_screen_set_scene(struct bContext *C, struct bScreen *screen, struct Scene *scene) RET_NONE
struct MovieClip *ED_space_clip_get_clip(struct SpaceClip *sc) RET_NULL
void ED_space_clip_set_clip(struct bContext *C, struct bScreen *screen, struct SpaceClip *sc, struct MovieClip *clip) RET_NONE
void ED_space_clip_set_mask(struct bContext *C, struct SpaceClip *sc, struct Mask *mask) RET_NONE
@@ -416,8 +481,8 @@ void ED_fsmenu_entry_set_path(struct FSMenuEntry *fsentry, const char *name) RET
char *ED_fsmenu_entry_get_name(struct FSMenuEntry *fsentry) RET_NULL
void ED_fsmenu_entry_set_name(struct FSMenuEntry *fsentry, const char *name) RET_NONE
-struct PTCacheEdit *PE_get_current(struct Scene *scene, struct Object *ob) RET_NULL
-void PE_current_changed(struct Scene *scene, struct Object *ob) RET_NONE
+struct PTCacheEdit *PE_get_current(struct Scene *scene, struct ViewLayer *view_layer, struct Object *ob) RET_NULL
+void PE_current_changed(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob) RET_NONE
/* rna keymap */
struct wmKeyMap *WM_keymap_active(struct wmWindowManager *wm, struct wmKeyMap *keymap) RET_NULL
@@ -456,7 +521,7 @@ bool ANIM_remove_driver(struct ReportList *reports, struct ID *id, const char rn
void ED_space_image_release_buffer(struct SpaceImage *sima, struct ImBuf *ibuf, void *lock) RET_NONE
struct ImBuf *ED_space_image_acquire_buffer(struct SpaceImage *sima, void **r_lock) RET_NULL
void ED_space_image_get_zoom(struct SpaceImage *sima, struct ARegion *ar, float *zoomx, float *zoomy) RET_NONE
-const char *ED_info_stats_string(struct Scene *scene) RET_NULL
+const char *ED_info_stats_string(struct Scene *scene, struct WorkSpace *workspace, struct ViewLayer *view_layer) RET_NULL
void ED_area_tag_redraw(struct ScrArea *sa) RET_NONE
void ED_area_tag_refresh(struct ScrArea *sa) RET_NONE
void ED_area_newspace(struct bContext *C, struct ScrArea *sa, int type, const bool skip_ar_exit) RET_NONE
@@ -478,26 +543,27 @@ void ED_node_tree_path_get_fixedbuf(struct SpaceNode *snode, char *value, int ma
void ED_node_tree_start(struct SpaceNode *snode, struct bNodeTree *ntree, struct ID *id, struct ID *from) RET_NONE
void ED_node_tree_push(struct SpaceNode *snode, struct bNodeTree *ntree, struct bNode *gnode) RET_NONE
void ED_node_tree_pop(struct SpaceNode *snode) RET_NONE
-int ED_view3d_scene_layer_set(int lay, const int *values, int *active) RET_ZERO
+int ED_view3d_view_layer_set(int lay, const int *values, int *active) RET_ZERO
void ED_view3d_quadview_update(struct ScrArea *sa, struct ARegion *ar, bool do_clip) RET_NONE
void ED_view3d_from_m4(float mat[4][4], float ofs[3], float quat[4], float *dist) RET_NONE
-struct BGpic *ED_view3d_background_image_new(struct View3D *v3d) RET_NULL
-void ED_view3d_background_image_remove(struct View3D *v3d, struct BGpic *bgpic) RET_NONE
-void ED_view3d_background_image_clear(struct View3D *v3d) RET_NONE
-void ED_view3d_update_viewmat(struct Scene *scene, struct View3D *v3d, struct ARegion *ar, float viewmat[4][4], float winmat[4][4], const struct rcti *rect) RET_NONE
+void ED_view3d_update_viewmat(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct View3D *v3d, struct ARegion *ar, float viewmat[4][4], float winmat[4][4], const struct rcti *rect) RET_NONE
float ED_view3d_grid_scale(struct Scene *scene, struct View3D *v3d, const char **grid_unit) RET_ZERO
void ED_view3d_shade_update(struct Main *bmain, struct View3D *v3d, struct ScrArea *sa) RET_NONE
void ED_node_shader_default(const struct bContext *C, struct ID *id) RET_NONE
void ED_screen_animation_timer_update(struct bScreen *screen, int redraws, int refresh) RET_NONE
struct bScreen *ED_screen_animation_playing(const struct wmWindowManager *wm) RET_NULL
-void ED_base_object_select(struct Base *base, short mode) RET_NONE
+struct Scene *ED_screen_scene_find(const struct bScreen *screen, const struct wmWindowManager *wm) RET_NULL
+struct Scene *ED_screen_scene_find_with_window(const struct bScreen *screen, const struct wmWindowManager *wm, struct wmWindow **r_window) RET_NULL
+bool ED_scene_view_layer_delete(struct Main *bmain, Scene *scene, ViewLayer *layer, ReportList *reports) RET_ZERO
+void ED_object_base_select(struct Base *base, eObjectSelect_Mode mode) RET_NONE
+void ED_object_base_activate(struct bContext *C, struct Base *base) RET_NONE
bool ED_object_modifier_remove(struct ReportList *reports, struct Main *bmain, struct Object *ob, struct ModifierData *md) RET_ZERO
-struct ModifierData *ED_object_modifier_add(struct ReportList *reports, struct Main *bmain, struct Scene *scene, struct Object *ob, const char *name, int type) RET_ZERO
+struct ModifierData *ED_object_modifier_add(struct ReportList *reports, struct Main *bmain, struct Scene *scene, struct Object *ob, eObjectMode object_mode, const char *name, int type) RET_ZERO
void ED_object_modifier_clear(struct Main *bmain, struct Object *ob) RET_NONE
void ED_object_editmode_enter(struct bContext *C, int flag) RET_NONE
void ED_object_editmode_exit(struct bContext *C, int flag) RET_NONE
bool ED_object_editmode_load(struct Object *obedit) RET_ZERO
-void ED_object_check_force_modifiers(struct Main *bmain, struct Scene *scene, struct Object *object) RET_NONE
+void ED_object_check_force_modifiers(struct Main *bmain, struct Scene *scene, struct Object *object, eObjectMode object_mode) RET_NONE
bool uiLayoutGetActive(struct uiLayout *layout) RET_ZERO
int uiLayoutGetOperatorContext(struct uiLayout *layout) RET_ZERO
int uiLayoutGetAlignment(struct uiLayout *layout) RET_ZERO
@@ -511,7 +577,7 @@ void uiLayoutSetAlignment(uiLayout *layout, char alignment) RET_NONE
void uiLayoutSetScaleX(struct uiLayout *layout, float scale) RET_NONE
void uiLayoutSetScaleY(struct uiLayout *layout, float scale) RET_NONE
void uiTemplateIconView(struct uiLayout *layout, struct PointerRNA *ptr, const char *propname, int show_labels, float icon_scale) RET_NONE
-void ED_base_object_free_and_unlink(struct Main *bmain, struct Scene *scene, struct Base *base) RET_NONE
+void ED_object_base_free_and_unlink(struct Main *bmain, struct Scene *scene, struct Object *base) RET_NONE
void ED_mesh_update(struct Mesh *mesh, struct bContext *C, int calc_edges, int calc_tessface) RET_NONE
void ED_mesh_vertices_add(struct Mesh *mesh, struct ReportList *reports, int count) RET_NONE
void ED_mesh_edges_add(struct Mesh *mesh, struct ReportList *reports, int count) RET_NONE
@@ -537,7 +603,7 @@ int ED_mesh_mirror_spatial_table(struct Object *ob, struct BMEditMesh *em, struc
float ED_rollBoneToVector(EditBone *bone, const float new_up_axis[3], const bool axis_only) RET_ZERO
void ED_space_image_get_size(struct SpaceImage *sima, int *width, int *height) RET_NONE
-bool ED_space_image_check_show_maskedit(struct Scene *scene, struct SpaceImage *sima) RET_ZERO
+bool ED_space_image_check_show_maskedit(struct SpaceImage *sima, const struct WorkSpace *workspace, struct ViewLayer *view_layer) RET_ZERO
bool ED_texture_context_check_world(const struct bContext *C) RET_ZERO
bool ED_texture_context_check_material(const struct bContext *C) RET_ZERO
@@ -548,9 +614,9 @@ bool ED_texture_context_check_others(const struct bContext *C) RET_ZERO
bool ED_text_region_location_from_cursor(SpaceText *st, ARegion *ar, const int cursor_co[2], int r_pixel_co[2]) RET_ZERO
SnapObjectContext *ED_transform_snap_object_context_create(
- struct Main *bmain, struct Scene *scene, int flag) RET_NULL
+ struct Main *bmain, struct Scene *scene, struct ViewLayer *view_layer, struct RenderEngineType *engine, int flag) RET_NULL
SnapObjectContext *ED_transform_snap_object_context_create_view3d(
- struct Main *bmain, struct Scene *scene, int flag,
+ struct Main *bmain, struct Scene *scene, struct ViewLayer *view_layer, struct RenderEngineType *engine, int flag,
const struct ARegion *ar, const struct View3D *v3d) RET_NULL
void ED_transform_snap_object_context_destroy(SnapObjectContext *sctx) RET_NONE
bool ED_transform_snap_object_project_ray_ex(
@@ -560,6 +626,7 @@ bool ED_transform_snap_object_project_ray_ex(
/* return args */
float r_loc[3], float r_no[3], int *r_index,
struct Object **r_ob, float r_obmat[4][4]) RET_ZERO
+void BIF_selectTransformOrientationValue(struct View3D *v3d, int orientation) RET_NONE
void ED_lattice_editlatt_make(struct Object *obedit) RET_NONE
void ED_lattice_editlatt_load(struct Object *obedit) RET_NONE
@@ -602,6 +669,14 @@ const char *uiLayoutIntrospect(uiLayout *layout) RET_NULL
void UI_reinit_font(void) RET_NONE
int UI_rnaptr_icon_get(struct bContext *C, struct PointerRNA *ptr, int rnaicon, const bool big) RET_ZERO
struct bTheme *UI_GetTheme(void) RET_NULL
+void UI_GetThemeColor3fv(int colorid, float col[4]) RET_NONE
+void UI_GetThemeColor4fv(int colorid, float col[4]) RET_NONE
+void UI_GetThemeColorShade4fv(int colorid, int offset, float col[4]) RET_NONE
+void UI_GetThemeColorShadeAlpha4fv(int colorid, int coloffset, int alphaoffset, float col[4]) RET_NONE
+void UI_GetThemeColorBlendShade3fv(int colorid1, int colorid2, float fac, int offset, float col[3]) RET_NONE
+void UI_GetThemeColorBlendShade4fv(int colorid1, int colorid2, float fac, int offset, float col[4]) RET_NONE
+void UI_GetThemeColorBlend3ubv(int colorid1, int colorid2, float fac, unsigned char col[3]) RET_NONE
+void UI_GetThemeColorShadeAlpha4ubv(int colorid, int coloffset, int alphaoffset, unsigned char col[4]) RET_NONE
/* rna template */
void uiTemplateAnyID(uiLayout *layout, struct PointerRNA *ptr, const char *propname, const char *proptypename, const char *text) RET_NONE
@@ -613,6 +688,17 @@ struct uiLayout *uiTemplateConstraint(struct uiLayout *layout, struct PointerRNA
void uiTemplatePreview(struct uiLayout *layout, struct bContext *C, struct ID *id, int show_buttons, struct ID *parent,
struct MTex *slot, const char *preview_id) RET_NONE
void uiTemplateIDPreview(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, const char *propname, const char *newop, const char *openop, const char *unlinkop, int rows, int cols, int filter) RET_NONE
+void uiTemplateSearch(
+ uiLayout *layout, struct bContext *C,
+ PointerRNA *ptr, const char *propname,
+ PointerRNA *searchptr, const char *searchpropname,
+ const char *newop, const char *unlinkop) RET_NONE
+void uiTemplateSearchPreview(
+ uiLayout *layout, struct bContext *C,
+ PointerRNA *ptr, const char *propname,
+ PointerRNA *searchptr, const char *searchpropname,
+ const char *newop, const char *unlinkop,
+ const int rows, const int cols) RET_NONE
void uiTemplateCurveMapping(uiLayout *layout, struct PointerRNA *ptr, const char *propname, int type, int levels, int brush, int neg_slope) RET_NONE
void uiTemplateColorRamp(uiLayout *layout, struct PointerRNA *ptr, const char *propname, int expand) RET_NONE
void uiTemplateLayers(uiLayout *layout, struct PointerRNA *ptr, const char *propname, PointerRNA *used_ptr, const char *used_propname, int active_layer) RET_NONE
@@ -635,6 +721,7 @@ void uiTemplateNodeView(struct uiLayout *layout, struct bContext *C, struct bNod
void uiTemplateTextureUser(struct uiLayout *layout, struct bContext *C) RET_NONE
void uiTemplateTextureShow(struct uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, struct PropertyRNA *prop) RET_NONE
void uiTemplateKeymapItemProperties(struct uiLayout *layout, struct PointerRNA *ptr) RET_NONE
+void uiTemplateOverrideProperty(struct uiLayout *layout, struct PointerRNA *collection_props_ptr, struct PointerRNA *scene_props_ptr, const char *propname, const char *name, const char *text_ctxt, int translate, int icon, const char *custom_template) RET_NONE
void uiTemplateMovieClip(struct uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, const char *propname, int compact) RET_NONE
void uiTemplateMovieclipInformation(struct uiLayout *layout, struct PointerRNA *ptr, const char *propname, struct PointerRNA *userptr) RET_NONE
void uiTemplateTrack(struct uiLayout *layout, struct PointerRNA *ptr, const char *propname) RET_NONE
@@ -669,6 +756,7 @@ void RE_ReleaseResultImage(struct Render *re) RET_NONE
int RE_engine_test_break(struct RenderEngine *engine) RET_ZERO
void RE_engines_init() RET_NONE
void RE_engines_exit() RET_NONE
+void RE_engines_register(struct Main *bmain, RenderEngineType *render_type) RET_NONE
void RE_engine_report(struct RenderEngine *engine, int type, const char *msg) RET_NONE
ListBase R_engines = {NULL, NULL};
void RE_engine_free(struct RenderEngine *engine) RET_NONE
@@ -677,14 +765,23 @@ void RE_engine_update_memory_stats(struct RenderEngine *engine, float mem_used,
struct RenderEngine *RE_engine_create(struct RenderEngineType *type) RET_NULL
void RE_engine_frame_set(struct RenderEngine *engine, int frame, float subframe) RET_NONE
void RE_FreePersistentData(void) RET_NONE
-void RE_point_density_cache(struct Scene *scene, struct PointDensity *pd, const bool use_render_params) RET_NONE
-void RE_point_density_minmax(struct Scene *scene, struct PointDensity *pd, const bool use_render_params, float r_min[3], float r_max[3]) RET_NONE
-void RE_point_density_sample(struct Scene *scene, struct PointDensity *pd, int resolution, const bool use_render_params, float *values) RET_NONE
+void RE_point_density_cache(struct Scene *scene, struct ViewLayer *view_layer, struct PointDensity *pd, const bool use_render_params) RET_NONE
+void RE_point_density_minmax(struct Scene *scene, struct ViewLayer *view_layer, struct PointDensity *pd, const bool use_render_params, float r_min[3], float r_max[3]) RET_NONE
+void RE_point_density_sample(struct Scene *scene, struct ViewLayer *view_layer, struct PointDensity *pd, const int resolution, const bool use_render_params, float *values) RET_NONE
void RE_point_density_free(struct PointDensity *pd) RET_NONE
void RE_instance_get_particle_info(struct ObjectInstanceRen *obi, float *index, float *age, float *lifetime, float co[3], float *size, float vel[3], float angvel[3]) RET_NONE
void RE_FreeAllPersistentData(void) RET_NONE
float RE_fresnel_dielectric(float incoming[3], float normal[3], float eta) RET_ZERO
-void RE_engine_register_pass(struct RenderEngine *engine, struct Scene *scene, struct SceneRenderLayer *srl, const char *name, int channels, const char *chanid, int type) RET_NONE
+void RE_engine_register_pass(struct RenderEngine *engine, struct Scene *scene, struct ViewLayer *view_layer, const char *name, int channels, const char *chanid, int type) RET_NONE
+struct ViewLayer *RE_engine_get_view_layer(struct Render *re) RET_NULL
+void RE_SetDepsgraph(struct Render *re, struct Depsgraph *graph) RET_NONE
+
+/* Draw */
+void OBJECT_collection_settings_create(struct IDProperty *properties) RET_NONE
+void EDIT_MESH_collection_settings_create(struct IDProperty *properties) RET_NONE
+void EDIT_ARMATURE_collection_settings_create(struct IDProperty *properties) RET_NONE
+void PAINT_WEIGHT_collection_settings_create(struct IDProperty *properties) RET_NONE
+void PAINT_VERTEX_collection_settings_create(struct IDProperty *properties) RET_NONE
/* python */
struct wmOperatorType *WM_operatortype_find(const char *idname, bool quiet) RET_NULL
@@ -726,10 +823,10 @@ struct uiLayout *uiLayoutRadial(struct uiLayout *layout) RET_NULL
int UI_pie_menu_invoke_from_operator_enum(struct bContext *C, const char *title, const char *opname,
const char *propname, const struct wmEvent *event) RET_ZERO
-/* RNA COLLADA dependency */
-/* XXX (gaia) Why do we need this declaration here? */
-/* The collada header is included anyways further up... */
-int collada_export(struct Scene *sce,
+/* RNA COLLADA dependency */
+int collada_export(const struct EvaluationContext *eval_ctx,
+ struct Scene *sce,
+ struct ViewLayer *view_layer,
const char *filepath,
int apply_modifiers,
BC_export_mesh_type export_mesh_type,
@@ -741,7 +838,7 @@ int collada_export(struct Scene *sce,
int deform_bones_only,
int active_uv_only,
- BC_export_texture_type export_texture_type,
+ int include_material_textures,
int use_texture_copies,
int triangulate,
@@ -762,11 +859,11 @@ void BPY_RNA_operator_wrapper(struct wmOperatorType *ot, void *userdata) RET_NON
void BPY_RNA_operator_macro_wrapper(struct wmOperatorType *ot, void *userdata) RET_NONE
void BPY_text_free_code(struct Text *text) RET_NONE
void BPY_id_release(struct ID *id) RET_NONE
+void BPY_DECREF_RNA_INVALIDATE(void *pyob_ptr) RET_NONE
int BPY_context_member_get(struct bContext *C, const char *member, struct bContextDataResult *result) RET_ZERO
void BPY_pyconstraint_target(struct bPythonConstraint *con, struct bConstraintTarget *ct) RET_NONE
float BPY_driver_exec(PathResolvedRNA *anim_rna, struct ChannelDriver *driver, const float evaltime) RET_ZERO /* might need this one! */
void BPY_DECREF(void *pyob_ptr) RET_NONE
-void BPY_DECREF_RNA_INVALIDATE(void *pyob_ptr) RET_NONE;
void BPY_pyconstraint_exec(struct bPythonConstraint *con, struct bConstraintOb *cob, struct ListBase *targets) RET_NONE
bool pyrna_id_FromPyObject(struct PyObject *obj, struct ID **id) RET_ZERO
struct PyObject *pyrna_id_CreatePyObject(struct ID *id) RET_NULL
diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt
index bcb0a7a7d1d..b6229539cd9 100644
--- a/source/creator/CMakeLists.txt
+++ b/source/creator/CMakeLists.txt
@@ -412,6 +412,12 @@ if(WITH_OPENCOLORIO)
)
endif()
+# Add default workspaces.blend to build (under [version]/datafiles
+install(
+ FILES ${CMAKE_SOURCE_DIR}/release/datafiles/workspaces.blend
+ DESTINATION ${TARGETDIR_VER}/datafiles
+)
+
# helpful tip when using make
if("${CMAKE_GENERATOR}" MATCHES ".*Makefiles.*")
# message after building.
diff --git a/source/creator/creator.c b/source/creator/creator.c
index a59a45f885c..78bab14cd96 100644
--- a/source/creator/creator.c
+++ b/source/creator/creator.c
@@ -56,7 +56,6 @@
#include "BKE_brush.h"
#include "BKE_cachefile.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h" /* for DAG_init */
#include "BKE_font.h"
#include "BKE_global.h"
#include "BKE_material.h"
@@ -66,6 +65,7 @@
#include "BKE_image.h"
#include "BKE_particle.h"
+#include "DEG_depsgraph.h"
#include "IMB_imbuf.h" /* for IMB_init */
@@ -361,7 +361,7 @@ int main(
BKE_cachefiles_init();
BKE_images_init();
BKE_modifier_init();
- DAG_init();
+ DEG_register_node_types();
BKE_brush_system_init();
RE_texture_rng_init();
diff --git a/source/creator/creator_args.c b/source/creator/creator_args.c
index a9da1e8c794..b96991413ff 100644
--- a/source/creator/creator_args.c
+++ b/source/creator/creator_args.c
@@ -57,8 +57,6 @@
#include "BKE_sound.h"
#include "BKE_image.h"
-#include "DEG_depsgraph.h"
-
#ifdef WITH_FFMPEG
#include "IMB_imbuf.h"
#endif
@@ -74,9 +72,7 @@
#include "WM_api.h"
-#include "GPU_basic_shader.h"
#include "GPU_draw.h"
-#include "GPU_extensions.h"
/* for passing information between creator and gameengine */
#ifdef WITH_GAMEENGINE
@@ -93,6 +89,10 @@
# include "CCL_api.h"
#endif
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+#include "DEG_depsgraph_debug.h"
+
#include "creator_intern.h" /* own include */
@@ -428,6 +428,25 @@ static void arg_py_context_restore(
/** \} */
+static void render_set_depgraph(bContext *C, Render *re)
+{
+ /* TODO(sergey): For until we make depsgraph to be created and
+ * handled by render pipeline.
+ */
+ Main *bmain = CTX_data_main(C);
+ Scene *scene = CTX_data_scene(C);
+ /* NOTE: This is STUPID to use first layer, but is ok for now
+ * (at least for until depsgraph becomes per-layer).
+ * Apparently, CTX_data_layer is crashing here (context's layer
+ * is NULL for old files, and there is no workspace).
+ */
+ ViewLayer *view_layer = scene->view_layers.first;
+ Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true);
+ DEG_graph_relations_update(depsgraph, bmain, scene, view_layer);
+ DEG_graph_on_visible_update(bmain, depsgraph);
+
+ RE_SetDepsgraph(re, depsgraph);
+}
/* -------------------------------------------------------------------- */
@@ -554,6 +573,7 @@ static int arg_handle_print_help(int UNUSED(argc), const char **UNUSED(argv), vo
BLI_argsPrintArgDoc(ba, "--debug-depsgraph-no-threads");
BLI_argsPrintArgDoc(ba, "--debug-gpumem");
+ BLI_argsPrintArgDoc(ba, "--debug-gpu-shaders");
BLI_argsPrintArgDoc(ba, "--debug-wm");
BLI_argsPrintArgDoc(ba, "--debug-all");
BLI_argsPrintArgDoc(ba, "--debug-io");
@@ -571,7 +591,6 @@ static int arg_handle_print_help(int UNUSED(argc), const char **UNUSED(argv), vo
BLI_argsPrintArgDoc(ba, "--env-system-python");
printf("\n");
BLI_argsPrintArgDoc(ba, "-nojoystick");
- BLI_argsPrintArgDoc(ba, "-noglsl");
BLI_argsPrintArgDoc(ba, "-noaudio");
BLI_argsPrintArgDoc(ba, "-setaudio");
@@ -589,8 +608,7 @@ static int arg_handle_print_help(int UNUSED(argc), const char **UNUSED(argv), vo
printf("\n");
printf("Experimental Features:\n");
- BLI_argsPrintArgDoc(ba, "--enable-new-depsgraph");
- BLI_argsPrintArgDoc(ba, "--enable-new-basic-shader-glsl");
+ BLI_argsPrintArgDoc(ba, "--enable-copy-on-write");
/* Other options _must_ be last (anything not handled will show here) */
printf("\n");
@@ -1021,15 +1039,6 @@ static int arg_handle_joystick_disable(int UNUSED(argc), const char **UNUSED(arg
return 0;
}
-static const char arg_handle_glsl_disable_doc[] =
-"\n\tDisable GLSL shading."
-;
-static int arg_handle_glsl_disable(int UNUSED(argc), const char **UNUSED(argv), void *UNUSED(data))
-{
- GPU_extensions_disable();
- return 0;
-}
-
static const char arg_handle_audio_disable_doc[] =
"\n\tForce sound system to None."
;
@@ -1107,10 +1116,8 @@ static int arg_handle_engine_set(int argc, const char **argv, void *data)
else {
Scene *scene = CTX_data_scene(C);
if (scene) {
- RenderData *rd = &scene->r;
-
if (BLI_findstring(&R_engines, argv[1], offsetof(RenderEngineType, idname))) {
- BLI_strncpy_utf8(rd->engine, argv[1], sizeof(rd->engine));
+ BLI_strncpy_utf8(scene->view_render.engine_id, argv[1], sizeof(scene->view_render.engine_id));
}
else {
printf("\nError: engine not found '%s'\n", argv[1]);
@@ -1193,23 +1200,13 @@ static int arg_handle_threads_set(int argc, const char **argv, void *UNUSED(data
}
}
-static const char arg_handle_depsgraph_use_new_doc[] =
-"\n\tUse new dependency graph."
+static const char arg_handle_use_copy_on_write_doc[] =
+"\n\tUse new dependency graph"
;
-static int arg_handle_depsgraph_use_new(int UNUSED(argc), const char **UNUSED(argv), void *UNUSED(data))
+static int arg_handle_use_copy_on_write(int UNUSED(argc), const char **UNUSED(argv), void *UNUSED(data))
{
- printf("Using new dependency graph.\n");
- DEG_depsgraph_switch_to_new();
- return 0;
-}
-
-static const char arg_handle_basic_shader_glsl_use_new_doc[] =
-"\n\tUse new GLSL basic shader."
-;
-static int arg_handle_basic_shader_glsl_use_new(int UNUSED(argc), const char **UNUSED(argv), void *UNUSED(data))
-{
- printf("Using new GLSL basic shader.\n");
- GPU_basic_shader_use_glsl_set(true);
+ printf("Using copy on write. This is highly EXPERIMENTAL!\n");
+ DEG_depsgraph_enable_copy_on_write();
return 0;
}
@@ -1378,8 +1375,8 @@ static int arg_handle_render_frame(int argc, const char **argv, void *data)
re = RE_NewSceneRender(scene);
BLI_begin_threaded_malloc();
BKE_reports_init(&reports, RPT_STORE);
-
RE_SetReports(re, &reports);
+ render_set_depgraph(C, re);
for (int i = 0; i < frames_range_len; i++) {
/* We could pass in frame ranges,
* but prefer having exact behavior as passing in multiple frames */
@@ -1422,6 +1419,7 @@ static int arg_handle_render_animation(int UNUSED(argc), const char **UNUSED(arg
BLI_begin_threaded_malloc();
BKE_reports_init(&reports, RPT_STORE);
RE_SetReports(re, &reports);
+ render_set_depgraph(C, re);
RE_BlenderAnim(re, bmain, scene, NULL, scene->lay, scene->r.sfra, scene->r.efra, scene->r.frame_step);
RE_SetReports(re, NULL);
BKE_reports_clear(&reports);
@@ -1861,9 +1859,10 @@ void main_args_setup(bContext *C, bArgs *ba, SYS_SystemHandle *syshandle)
CB_EX(arg_handle_debug_mode_generic_set, depsgraph_no_threads), (void *)G_DEBUG_DEPSGRAPH_NO_THREADS);
BLI_argsAdd(ba, 1, NULL, "--debug-gpumem",
CB_EX(arg_handle_debug_mode_generic_set, gpumem), (void *)G_DEBUG_GPU_MEM);
+ BLI_argsAdd(ba, 1, NULL, "--debug-gpu-shaders",
+ CB_EX(arg_handle_debug_mode_generic_set, gpumem), (void *)G_DEBUG_GPU_SHADERS);
- BLI_argsAdd(ba, 1, NULL, "--enable-new-depsgraph", CB(arg_handle_depsgraph_use_new), NULL);
- BLI_argsAdd(ba, 1, NULL, "--enable-new-basic-shader-glsl", CB(arg_handle_basic_shader_glsl_use_new), NULL);
+ BLI_argsAdd(ba, 1, NULL, "--enable-copy-on-write", CB(arg_handle_use_copy_on_write), NULL);
BLI_argsAdd(ba, 1, NULL, "--verbose", CB(arg_handle_verbosity_set), NULL);
@@ -1885,7 +1884,6 @@ void main_args_setup(bContext *C, bArgs *ba, SYS_SystemHandle *syshandle)
/* third pass: disabling things and forcing settings */
BLI_argsAddCase(ba, 3, "-nojoystick", 1, NULL, 0, CB(arg_handle_joystick_disable), syshandle);
- BLI_argsAddCase(ba, 3, "-noglsl", 1, NULL, 0, CB(arg_handle_glsl_disable), NULL);
BLI_argsAddCase(ba, 3, "-noaudio", 1, NULL, 0, CB(arg_handle_audio_disable), NULL);
BLI_argsAddCase(ba, 3, "-setaudio", 1, NULL, 0, CB(arg_handle_audio_set), NULL);
diff --git a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
index 6e698166fd9..4e8f0eba9b7 100644
--- a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
+++ b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
@@ -101,7 +101,7 @@ typedef void * wmUIHandlerRemoveFunc;
}
#ifdef WITH_AUDASPACE
-# include AUD_DEVICE_H
+# include <AUD_Device.h>
#endif
static BlendFileData *load_game_data(const char *filename)
@@ -267,7 +267,7 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c
bool profile = (SYS_GetCommandLineInt(syshandle, "show_profile", 0) != 0);
bool frameRate = (SYS_GetCommandLineInt(syshandle, "show_framerate", 0) != 0);
bool animation_record = (SYS_GetCommandLineInt(syshandle, "animation_record", 0) != 0);
- bool displaylists = (SYS_GetCommandLineInt(syshandle, "displaylists", 0) != 0) && GPU_display_list_support();
+ bool displaylists = false; // (SYS_GetCommandLineInt(syshandle, "displaylists", 0) != 0) && GPU_display_list_support();
#ifdef WITH_PYTHON
bool nodepwarnings = (SYS_GetCommandLineInt(syshandle, "ignore_deprecation_warnings", 0) != 0);
#endif
diff --git a/source/gameengine/BlenderRoutines/CMakeLists.txt b/source/gameengine/BlenderRoutines/CMakeLists.txt
index aaeb2e10462..42293050753 100644
--- a/source/gameengine/BlenderRoutines/CMakeLists.txt
+++ b/source/gameengine/BlenderRoutines/CMakeLists.txt
@@ -56,7 +56,7 @@ set(SRC
add_definitions(${GL_DEFINITIONS})
if(WITH_AUDASPACE)
- add_definitions(${AUDASPACE_DEFINITIONS})
+ add_definitions(-DWITH_AUDASPACE)
list(APPEND INC_SYS
${AUDASPACE_C_INCLUDE_DIRS}
diff --git a/source/gameengine/BlenderRoutines/KX_BlenderCanvas.cpp b/source/gameengine/BlenderRoutines/KX_BlenderCanvas.cpp
index a6b2340d7b4..6fdc823ba1a 100644
--- a/source/gameengine/BlenderRoutines/KX_BlenderCanvas.cpp
+++ b/source/gameengine/BlenderRoutines/KX_BlenderCanvas.cpp
@@ -324,7 +324,6 @@ static unsigned int *screenshot(ScrArea *curarea, int *dumpsx, int *dumpsy)
void KX_BlenderCanvas::MakeScreenShot(const char *filename)
{
ScrArea area_dummy= {0};
- bScreen *screen = m_win->screen;
unsigned int *dumprect;
int dumpsx, dumpsy;
@@ -340,7 +339,7 @@ void KX_BlenderCanvas::MakeScreenShot(const char *filename)
}
/* initialize image file format data */
- Scene *scene = (screen)? screen->scene: NULL;
+ Scene *scene = WM_window_get_active_scene(m_win);
ImageFormatData *im_format = (ImageFormatData *)MEM_mallocN(sizeof(ImageFormatData), "im_format");
if (scene)
diff --git a/source/gameengine/Converter/BL_ArmatureObject.cpp b/source/gameengine/Converter/BL_ArmatureObject.cpp
index a5af525e13a..049fd49cab9 100644
--- a/source/gameengine/Converter/BL_ArmatureObject.cpp
+++ b/source/gameengine/Converter/BL_ArmatureObject.cpp
@@ -138,7 +138,8 @@ static void game_copy_pose(bPose **dst, bPose *src, int copy_constraint)
if (pchan->prop)
pchan->prop= IDP_CopyProperty(pchan->prop);
#endif
- pchan->prop= NULL;
+ pchan->prop = NULL;
+ pchan->draw_data = NULL;
}
BLI_ghash_free(ghash, NULL, NULL);
@@ -469,6 +470,8 @@ bool BL_ArmatureObject::UnlinkObject(SCA_IObject* clientobj)
void BL_ArmatureObject::ApplyPose()
{
+ /* TODO: This doesn't work currently because of eval_ctx. */
+#if 0
m_armpose = m_objArma->pose;
m_objArma->pose = m_pose;
// in the GE, we use ctime to store the timestep
@@ -491,6 +494,7 @@ void BL_ArmatureObject::ApplyPose()
}
m_lastapplyframe = m_lastframe;
}
+#endif
}
void BL_ArmatureObject::RestorePose()
diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.cpp b/source/gameengine/Converter/BL_BlenderDataConversion.cpp
index 8ba39e288ca..3b0fb335d21 100644
--- a/source/gameengine/Converter/BL_BlenderDataConversion.cpp
+++ b/source/gameengine/Converter/BL_BlenderDataConversion.cpp
@@ -45,7 +45,9 @@
* This workaround will make sure that curve_cache for curves
* is up-to-date.
*/
-#define THREADED_DAG_WORKAROUND
+
+/* TODO: Disabled for now, because of eval_ctx. */
+//#define THREADED_DAG_WORKAROUND
#include <math.h>
#include <vector>
@@ -145,6 +147,8 @@ extern "C" {
#include "BKE_customdata.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_DerivedMesh.h"
+#include "BKE_group.h"
+#include "BKE_layer.h"
#include "BKE_material.h" /* give_current_material */
#include "BKE_image.h"
#include "IMB_imbuf_types.h"
@@ -589,17 +593,17 @@ static bool ConvertMaterial(
/* In Multitexture use the face texture if and only if
* it is set in the buttons
* In GLSL is not working yet :/ 3.2011 */
- bool facetex = false;
- if (validface && mat->mode & MA_FACETEXTURE) {
- facetex = true;
- }
// foreach MTex
for (int i = 0; i < MAXTEX; i++) {
// use face tex
- if (i == 0 && facetex ) {
- facetex = false;
+ if (i == 0) {
+#if 0
Image *tmp = (Image *)(tface->tpage);
+#else
+ /* weak but better then nothing */
+ Image *tmp = mat ? mat->edit_image : NULL;
+#endif
if (tmp) {
material->img[i] = tmp;
@@ -789,7 +793,11 @@ static bool ConvertMaterial(
// check for tface tex to fallback on
if (validface) {
+#if 0
material->img[0] = (Image *)(tface->tpage);
+#else
+ material->img[0] = mat ? mat->edit_image : NULL;
+#endif
// ------------------------
if (material->img[0]) {
material->texname[0] = material->img[0]->id.name;
@@ -830,7 +838,7 @@ static bool ConvertMaterial(
/* No material, what to do? let's see what is in the UV and set the material accordingly
* light and visible is always on */
if (validface) {
- material->tile = tface->tile;
+ /* nop */
}
else {
// nothing at all
@@ -869,13 +877,6 @@ static bool ConvertMaterial(
if (validmat) {
material->matname =(mat->id.name);
}
-
- if (tface) {
- ME_MTEXFACE_CPY(&material->mtexpoly, tface);
- }
- else {
- memset(&material->mtexpoly, 0, sizeof(material->mtexpoly));
- }
material->material = mat;
return true;
}
@@ -894,7 +895,7 @@ static RAS_MaterialBucket *material_from_mesh(Material *ma, MFace *mface, MTFace
ConvertMaterial(bl_mat, ma, tface, tfaceName, mface, mcol,
converter->GetGLSLMaterials());
- if (ma && (ma->mode & MA_FACETEXTURE) == 0)
+ if (ma)
converter->CacheBlenderMaterial(scene, ma, bl_mat);
}
@@ -910,7 +911,7 @@ static RAS_MaterialBucket *material_from_mesh(Material *ma, MFace *mface, MTFace
kx_blmat->Initialize(scene, bl_mat, (ma?&ma->game:NULL), lightlayer);
polymat = static_cast<RAS_IPolyMaterial*>(kx_blmat);
- if (ma && (ma->mode & MA_FACETEXTURE) == 0)
+ if (ma)
converter->CachePolyMaterial(scene, ma, polymat);
}
@@ -1707,6 +1708,7 @@ static ListBase *get_active_constraints2(Object *ob)
return NULL;
// XXX - shouldnt we care about the pose data and not the mode???
+#if 0
if (ob->mode & OB_MODE_POSE) {
bPoseChannel *pchan;
@@ -1714,8 +1716,11 @@ static ListBase *get_active_constraints2(Object *ob)
if (pchan)
return &pchan->constraints;
}
- else
+ else
+#endif
+ {
return &ob->constraints;
+ }
return NULL;
}
@@ -1740,7 +1745,7 @@ static void blenderSceneSetBackground(Scene *blenderscene)
for (SETLOOPER(blenderscene, it, base)) {
base->object->lay = base->lay;
- base->object->flag = base->flag;
+ BKE_scene_object_base_flag_sync_from_base(base);
}
}
@@ -2052,10 +2057,8 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
for (git=tempglist.begin(); git!=tempglist.end(); git++)
{
Group* group = *git;
- GroupObject* go;
- for (go=(GroupObject*)group->gobject.first; go; go=(GroupObject*)go->next)
+ FOREACH_GROUP_OBJECT(group, blenderobject)
{
- Object* blenderobject = go->ob;
if (converter->FindGameObject(blenderobject) == NULL)
{
allblobj.insert(blenderobject);
@@ -2090,6 +2093,7 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
}
}
}
+ FOREACH_GROUP_OBJECT_END
}
}
}
diff --git a/source/gameengine/Converter/BL_ModifierDeformer.cpp b/source/gameengine/Converter/BL_ModifierDeformer.cpp
index b40fb7a9f47..3be2c1aff43 100644
--- a/source/gameengine/Converter/BL_ModifierDeformer.cpp
+++ b/source/gameengine/Converter/BL_ModifierDeformer.cpp
@@ -133,6 +133,8 @@ bool BL_ModifierDeformer::HasArmatureDeformer(Object *ob)
// return a deformed mesh that supports mapping (with a valid CD_ORIGINDEX layer)
struct DerivedMesh* BL_ModifierDeformer::GetPhysicsMesh()
{
+ /* TODO: This doesn't work currently because of eval_ctx. */
+#if 0
/* we need to compute the deformed mesh taking into account the current
* shape and skin deformers, we cannot just call mesh_create_derived_physics()
* because that would use the m_transvers already deformed previously by BL_ModifierDeformer::Update(),
@@ -152,10 +154,14 @@ struct DerivedMesh* BL_ModifierDeformer::GetPhysicsMesh()
/* m_transverts is correct here (takes into account deform only modifiers) */
/* the derived mesh returned by this function must be released by the caller !!! */
return dm;
+#endif
+ return NULL;
}
bool BL_ModifierDeformer::Update(void)
{
+ /* TODO: This doesn't work currently because of eval_ctx. */
+#if 0
bool bShapeUpdate = BL_ShapeDeformer::Update();
if (bShapeUpdate || m_lastModifierUpdate != m_gameobj->GetLastFrame()) {
@@ -208,6 +214,8 @@ bool BL_ModifierDeformer::Update(void)
}
}
return bShapeUpdate;
+#endif
+ return false;
}
bool BL_ModifierDeformer::Apply(RAS_IPolyMaterial *mat)
diff --git a/source/gameengine/Converter/CMakeLists.txt b/source/gameengine/Converter/CMakeLists.txt
index 4db9fcebd06..7d6195e3c38 100644
--- a/source/gameengine/Converter/CMakeLists.txt
+++ b/source/gameengine/Converter/CMakeLists.txt
@@ -113,7 +113,7 @@ if(WITH_BULLET)
endif()
if(WITH_AUDASPACE)
- add_definitions(${AUDASPACE_DEFINITIONS})
+ add_definitions(-DWITH_AUDASPACE)
list(APPEND INC_SYS
${AUDASPACE_C_INCLUDE_DIRS}
diff --git a/source/gameengine/Converter/KX_ConvertActuators.cpp b/source/gameengine/Converter/KX_ConvertActuators.cpp
index 974dcbca95b..d78ea4eed54 100644
--- a/source/gameengine/Converter/KX_ConvertActuators.cpp
+++ b/source/gameengine/Converter/KX_ConvertActuators.cpp
@@ -42,7 +42,7 @@
#include "KX_ConvertActuators.h"
#ifdef WITH_AUDASPACE
-# include AUD_SOUND_H
+# include <AUD_Sound.h>
#endif
// Actuators
diff --git a/source/gameengine/GamePlayer/ghost/CMakeLists.txt b/source/gameengine/GamePlayer/ghost/CMakeLists.txt
index 577e25d6198..5bce9fcd248 100644
--- a/source/gameengine/GamePlayer/ghost/CMakeLists.txt
+++ b/source/gameengine/GamePlayer/ghost/CMakeLists.txt
@@ -43,6 +43,7 @@ set(INC
../../../blender/blenlib
../../../blender/blenloader
../../../blender/blentranslation
+ ../../../blender/depsgraph
../../../blender/gpu
../../../blender/imbuf
../../../blender/makesdna
@@ -94,7 +95,7 @@ if(WITH_INTERNATIONAL)
endif()
if(WITH_AUDASPACE)
- add_definitions(${AUDASPACE_DEFINITIONS})
+ add_definitions(-DWITH_AUDASPACE)
list(APPEND INC_SYS
${AUDASPACE_C_INCLUDE_DIRS}
diff --git a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
index 50c34bbadaf..1b6b6defdf9 100644
--- a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
+++ b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
@@ -99,7 +99,7 @@ extern "C"
#include "GHOST_Rect.h"
#ifdef WITH_AUDASPACE
-# include AUD_DEVICE_H
+# include <AUD_Device.h>
#endif
static void frameTimerProc(GHOST_ITimerTask* task, GHOST_TUns64 time);
@@ -586,7 +586,7 @@ bool GPG_Application::initEngine(GHOST_IWindow* window, const int stereoMode)
bool fixed_framerate= (SYS_GetCommandLineInt(syshandle, "fixedtime", (gm->flag & GAME_ENABLE_ALL_FRAMES)) != 0);
bool frameRate = (SYS_GetCommandLineInt(syshandle, "show_framerate", 0) != 0);
- bool useLists = (SYS_GetCommandLineInt(syshandle, "displaylists", gm->flag & GAME_DISPLAY_LISTS) != 0) && GPU_display_list_support();
+ bool useLists = false; // (SYS_GetCommandLineInt(syshandle, "displaylists", gm->flag & GAME_DISPLAY_LISTS) != 0) && GPU_display_list_support();
bool nodepwarnings = (SYS_GetCommandLineInt(syshandle, "ignore_deprecation_warnings", 1) != 0);
bool restrictAnimFPS = (gm->flag & GAME_RESTRICT_ANIM_UPDATES) != 0;
diff --git a/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp b/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
index 906e9d9a821..998058193bb 100644
--- a/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
+++ b/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
@@ -68,7 +68,6 @@ extern "C"
#include "BKE_appdir.h"
#include "BKE_blender.h"
-#include "BKE_depsgraph.h"
#include "BKE_global.h"
#include "BKE_icons.h"
#include "BKE_image.h"
@@ -81,6 +80,8 @@ extern "C"
#include "BKE_text.h"
#include "BKE_sound.h"
+#include "DEG_depsgraph.h"
+
#include "IMB_imbuf.h"
#include "IMB_moviecache.h"
@@ -509,7 +510,7 @@ int main(
IMB_init();
BKE_images_init();
BKE_modifier_init();
- DAG_init();
+ DEG_register_node_types();
#ifdef WITH_FFMPEG
IMB_ffmpeg_init();
@@ -1201,7 +1202,7 @@ int main(
IMB_exit();
BKE_images_exit();
- DAG_exit();
+ DEG_free_node_types();
IMB_moviecache_destruct();
SYS_DeleteSystem(syshandle);
diff --git a/source/gameengine/Ketsji/BL_BlenderShader.cpp b/source/gameengine/Ketsji/BL_BlenderShader.cpp
index 9cbd61590b6..572218e691d 100644
--- a/source/gameengine/Ketsji/BL_BlenderShader.cpp
+++ b/source/gameengine/Ketsji/BL_BlenderShader.cpp
@@ -77,7 +77,7 @@ void BL_BlenderShader::SetProg(bool enable, double time, RAS_IRasterizer* rasty)
view.getValue(&viewmat[0][0]);
viewinv.getValue(&viewinvmat[0][0]);
- GPU_material_bind(mGPUMat, mLightLayer, mBlenderScene->lay, time, 1, viewmat, viewinvmat, NULL, false);
+ GPU_material_bind(mGPUMat, mLightLayer, mBlenderScene->lay, time, 1, viewmat, viewinvmat, NULL);
}
else
GPU_material_unbind(mGPUMat);
diff --git a/source/gameengine/Ketsji/BL_Material.cpp b/source/gameengine/Ketsji/BL_Material.cpp
index 4f707e6267f..40384b43054 100644
--- a/source/gameengine/Ketsji/BL_Material.cpp
+++ b/source/gameengine/Ketsji/BL_Material.cpp
@@ -69,7 +69,6 @@ void BL_Material::Initialize()
alpha = 1.f;
emit = 0.f;
material = 0;
- memset(&mtexpoly, 0, sizeof(mtexpoly));
materialindex = 0;
amb=0.5f;
num_enabled = 0;
diff --git a/source/gameengine/Ketsji/BL_Material.h b/source/gameengine/Ketsji/BL_Material.h
index 9207a41f56d..710c02f4871 100644
--- a/source/gameengine/Ketsji/BL_Material.h
+++ b/source/gameengine/Ketsji/BL_Material.h
@@ -84,7 +84,6 @@ public:
Material* material;
- MTexPoly mtexpoly; /* copy of the derived meshes tface */
Image* img[MAXTEX];
EnvMap* cubemap[MAXTEX];
diff --git a/source/gameengine/Ketsji/CMakeLists.txt b/source/gameengine/Ketsji/CMakeLists.txt
index 417f54cc8b9..cb7c0180f30 100644
--- a/source/gameengine/Ketsji/CMakeLists.txt
+++ b/source/gameengine/Ketsji/CMakeLists.txt
@@ -244,7 +244,7 @@ if(WITH_CODEC_FFMPEG)
endif()
if(WITH_AUDASPACE)
- add_definitions(${AUDASPACE_DEFINITIONS})
+ add_definitions(-DWITH_AUDASPACE)
list(APPEND INC_SYS
${AUDASPACE_C_INCLUDE_DIRS}
diff --git a/source/gameengine/Ketsji/KX_BlenderMaterial.cpp b/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
index d26e35f8138..98d27ef3685 100644
--- a/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
+++ b/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
@@ -160,12 +160,6 @@ KX_BlenderMaterial::~KX_BlenderMaterial()
OnExit();
}
-MTexPoly *KX_BlenderMaterial::GetMTexPoly() const
-{
- // fonts on polys
- return &mMaterial->mtexpoly;
-}
-
unsigned int* KX_BlenderMaterial::GetMCol() const
{
// fonts on polys
@@ -190,7 +184,7 @@ Material *KX_BlenderMaterial::GetBlenderMaterial() const
Image *KX_BlenderMaterial::GetBlenderImage() const
{
- return mMaterial->mtexpoly.tpage;
+ return mMaterial->material ? mMaterial->material->edit_image : NULL;
}
Scene* KX_BlenderMaterial::GetBlenderScene() const
@@ -290,11 +284,6 @@ void KX_BlenderMaterial::OnExit()
mTextures[i].DeleteTex();
mTextures[i].DisableUnit();
}
-
- /* used to call with 'mMaterial->tface' but this can be a freed array,
- * see: [#30493], so just call with NULL, this is best since it clears
- * the 'lastface' pointer in GPU too - campbell */
- GPU_set_tpage(NULL, 1, mMaterial->alphablend);
}
@@ -310,7 +299,7 @@ void KX_BlenderMaterial::setShaderData( bool enable, RAS_IRasterizer *ras)
mLastShader = NULL;
}
- ras->SetAlphaBlend(TF_SOLID);
+ ras->SetAlphaBlend(GPU_BLEND_SOLID);
BL_Texture::DisableAllTextures();
return;
}
@@ -334,7 +323,7 @@ void KX_BlenderMaterial::setShaderData( bool enable, RAS_IRasterizer *ras)
ras->SetAlphaBlend(mMaterial->alphablend);
}
else {
- ras->SetAlphaBlend(TF_SOLID);
+ ras->SetAlphaBlend(GPU_BLEND_SOLID);
ras->SetAlphaBlend(-1); // indicates custom mode
// tested to be valid enums
@@ -346,7 +335,7 @@ void KX_BlenderMaterial::setShaderData( bool enable, RAS_IRasterizer *ras)
void KX_BlenderMaterial::setBlenderShaderData( bool enable, RAS_IRasterizer *ras)
{
if ( !enable || !mBlenderShader->Ok() ) {
- ras->SetAlphaBlend(TF_SOLID);
+ ras->SetAlphaBlend(GPU_BLEND_SOLID);
// frame cleanup.
if (mLastBlenderShader) {
@@ -377,7 +366,7 @@ void KX_BlenderMaterial::setTexData( bool enable, RAS_IRasterizer *ras)
BL_Texture::DisableAllTextures();
if ( !enable ) {
- ras->SetAlphaBlend(TF_SOLID);
+ ras->SetAlphaBlend(GPU_BLEND_SOLID);
return;
}
@@ -420,7 +409,7 @@ void KX_BlenderMaterial::setTexData( bool enable, RAS_IRasterizer *ras)
ras->SetAlphaBlend(mMaterial->alphablend);
}
else {
- ras->SetAlphaBlend(TF_SOLID);
+ ras->SetAlphaBlend(GPU_BLEND_SOLID);
ras->SetAlphaBlend(-1); // indicates custom mode
glEnable(GL_BLEND);
diff --git a/source/gameengine/Ketsji/KX_BlenderMaterial.h b/source/gameengine/Ketsji/KX_BlenderMaterial.h
index a3d10c0a89d..c562ee0c583 100644
--- a/source/gameengine/Ketsji/KX_BlenderMaterial.h
+++ b/source/gameengine/Ketsji/KX_BlenderMaterial.h
@@ -84,7 +84,6 @@ public:
Material* GetBlenderMaterial() const;
Image* GetBlenderImage() const;
- MTexPoly *GetMTexPoly() const;
unsigned int* GetMCol() const;
BL_Texture * getTex (unsigned int idx) {
return (idx < MAXTEX) ? mTextures + idx : NULL;
diff --git a/source/gameengine/Ketsji/KX_Camera.cpp b/source/gameengine/Ketsji/KX_Camera.cpp
index 89aea80bb67..b22873aa862 100644
--- a/source/gameengine/Ketsji/KX_Camera.cpp
+++ b/source/gameengine/Ketsji/KX_Camera.cpp
@@ -30,8 +30,8 @@
* \ingroup ketsji
*/
-
-#include "glew-mx.h"
+#include "GPU_glew.h"
+#include "GPU_matrix.h"
#include "KX_Camera.h"
#include "KX_Scene.h"
#include "KX_PythonInit.h"
@@ -1048,19 +1048,21 @@ KX_PYMETHODDEF_DOC_O(KX_Camera, getScreenPosition,
}
const GLint *viewport;
- GLdouble win[3];
- GLdouble modelmatrix[16];
- GLdouble projmatrix[16];
+ GLfloat vec[3];
+ GLfloat win[3];
+ GLfloat modelmatrix[4][4];
+ GLfloat projmatrix[4][4];
MT_Matrix4x4 m_modelmatrix = this->GetWorldToCamera();
MT_Matrix4x4 m_projmatrix = this->GetProjectionMatrix();
- m_modelmatrix.getValue(modelmatrix);
- m_projmatrix.getValue(projmatrix);
+ vect.getValue(vec);
+ m_modelmatrix.getValue((float*) modelmatrix);
+ m_projmatrix.getValue((float*) projmatrix);
viewport = KX_GetActiveEngine()->GetCanvas()->GetViewPort();
- gluProject(vect[0], vect[1], vect[2], modelmatrix, projmatrix, viewport, &win[0], &win[1], &win[2]);
+ gpuProject(vec, modelmatrix, projmatrix, viewport, win);
vect[0] = (win[0] - viewport[0]) / viewport[2];
vect[1] = (win[1] - viewport[1]) / viewport[3];
@@ -1087,36 +1089,33 @@ KX_PYMETHODDEF_DOC_VARARGS(KX_Camera, getScreenVect,
y = 1.0 - y; //to follow Blender window coordinate system (Top-Down)
- MT_Vector3 vect;
- MT_Point3 campos, screenpos;
-
const GLint *viewport;
- GLdouble win[3];
- GLdouble modelmatrix[16];
- GLdouble projmatrix[16];
+ GLfloat vec[3];
+ GLfloat win[3];
+ GLfloat modelmatrix[4][4];
+ GLfloat projmatrix[4][4];
MT_Matrix4x4 m_modelmatrix = this->GetWorldToCamera();
MT_Matrix4x4 m_projmatrix = this->GetProjectionMatrix();
- m_modelmatrix.getValue(modelmatrix);
- m_projmatrix.getValue(projmatrix);
+ m_modelmatrix.getValue((float*) modelmatrix);
+ m_projmatrix.getValue((float*) projmatrix);
viewport = KX_GetActiveEngine()->GetCanvas()->GetViewPort();
- vect[0] = x * viewport[2];
- vect[1] = y * viewport[3];
-
- vect[0] += viewport[0];
- vect[1] += viewport[1];
+ vec[0] = x * viewport[2];
+ vec[1] = y * viewport[3];
- vect[2] = 0.f;
+ vec[0] += viewport[0];
+ vec[1] += viewport[1];
- gluUnProject(vect[0], vect[1], vect[2], modelmatrix, projmatrix, viewport, &win[0], &win[1], &win[2]);
+ vec[2] = 0.f;
- campos = this->GetCameraLocation();
- screenpos = MT_Point3(win[0], win[1], win[2]);
- vect = campos-screenpos;
+ gpuUnProject(vec, modelmatrix, projmatrix, viewport, win);
+ MT_Point3 campos = this->GetCameraLocation();
+ MT_Point3 screenpos(win[0], win[1], win[2]);
+ MT_Vector3 vect = campos - screenpos;
vect.normalize();
return PyObjectFrom(vect);
}
diff --git a/source/gameengine/Ketsji/KX_Dome.cpp b/source/gameengine/Ketsji/KX_Dome.cpp
index d08372e47d4..7abff85d39c 100644
--- a/source/gameengine/Ketsji/KX_Dome.cpp
+++ b/source/gameengine/Ketsji/KX_Dome.cpp
@@ -41,7 +41,7 @@
#include "RAS_CameraData.h"
#include "BLI_math.h"
-#include "glew-mx.h"
+#include "GPU_matrix.h"
// constructor
KX_Dome::KX_Dome (
@@ -1685,7 +1685,7 @@ void KX_Dome::DrawEnvMap(void)
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
- gluLookAt(0.0f,0.0f,1.0f, 0.0f,0.0f,0.0f, 0.0f,1.0f,0.0f);
+ gpuLookAt(0.0f,0.0f,1.0f, 0.0f,0.0f,0.0f, 0.0f,1.0f,0.0f);
glPolygonMode(GL_FRONT, GL_FILL);
glShadeModel(GL_SMOOTH);
@@ -1830,7 +1830,7 @@ void KX_Dome::DrawDomeFisheye(void)
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
- gluLookAt(0.0f,-1.0f,0.0f, 0.0f,0.0f,0.0f, 0.0f,0.0f,1.0f);
+ gpuLookAt(0.0f,-1.0f,0.0f, 0.0f,0.0f,0.0f, 0.0f,0.0f,1.0f);
if (m_drawingmode == RAS_IRasterizer::KX_WIREFRAME)
glPolygonMode(GL_FRONT, GL_LINE);
@@ -1913,7 +1913,7 @@ void KX_Dome::DrawPanorama(void)
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
- gluLookAt(0.0f,-1.0f,0.0f, 0.0f,0.0f,0.0f, 0.0f,0.0f,1.0f);
+ gpuLookAt(0.0f,-1.0f,0.0f, 0.0f,0.0f,0.0f, 0.0f,0.0f,1.0f);
if (m_drawingmode == RAS_IRasterizer::KX_WIREFRAME)
glPolygonMode(GL_FRONT, GL_LINE);
@@ -1981,7 +1981,7 @@ void KX_Dome::DrawDomeWarped(void)
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
- gluLookAt(0.0f, 0.0f, 1.0f, 0.0f,0.0f,0.0f, 0.0f,1.0f,0.0f);
+ gpuLookAt(0.0f, 0.0f, 1.0f, 0.0f,0.0f,0.0f, 0.0f,1.0f,0.0f);
if (m_drawingmode == RAS_IRasterizer::KX_WIREFRAME)
glPolygonMode(GL_FRONT, GL_LINE);
diff --git a/source/gameengine/Ketsji/KX_Light.cpp b/source/gameengine/Ketsji/KX_Light.cpp
index 5f490747c2b..fcdcdf4a02a 100644
--- a/source/gameengine/Ketsji/KX_Light.cpp
+++ b/source/gameengine/Ketsji/KX_Light.cpp
@@ -34,6 +34,7 @@
#endif
#include <stdio.h>
+#include "DNA_scene_types.h"
#include "KX_Light.h"
#include "KX_Camera.h"
@@ -44,7 +45,6 @@
#include "KX_PyMath.h"
#include "DNA_object_types.h"
-#include "DNA_scene_types.h"
#include "DNA_lamp_types.h"
#include "BKE_scene.h"
@@ -65,7 +65,6 @@ KX_LightObject::KX_LightObject(void* sgReplicationInfo,SG_Callbacks callbacks,
m_rasterizer->AddLight(m_lightobj);
m_lightobj->m_glsl = glsl;
m_blenderscene = ((KX_Scene*)sgReplicationInfo)->GetBlenderScene();
- m_base = NULL;
};
@@ -75,11 +74,6 @@ KX_LightObject::~KX_LightObject()
m_rasterizer->RemoveLight(m_lightobj);
delete(m_lightobj);
}
-
- if (m_base) {
- BKE_scene_base_unlink(m_blenderscene, m_base);
- MEM_freeN(m_base);
- }
}
@@ -93,8 +87,6 @@ CValue* KX_LightObject::GetReplica()
replica->m_lightobj = m_lightobj->Clone();
replica->m_lightobj->m_light = replica;
m_rasterizer->AddLight(replica->m_lightobj);
- if (m_base)
- m_base = NULL;
return replica;
}
@@ -103,7 +95,6 @@ void KX_LightObject::UpdateScene(KX_Scene *kxscene)
{
m_lightobj->m_scene = (void*)kxscene;
m_blenderscene = kxscene->GetBlenderScene();
- m_base = BKE_scene_base_add(m_blenderscene, GetBlenderObject());
}
void KX_LightObject::SetLayer(int layer)
diff --git a/source/gameengine/Ketsji/KX_Light.h b/source/gameengine/Ketsji/KX_Light.h
index b446acd6e63..b354fca4d41 100644
--- a/source/gameengine/Ketsji/KX_Light.h
+++ b/source/gameengine/Ketsji/KX_Light.h
@@ -51,7 +51,6 @@ protected:
RAS_ILightObject* m_lightobj;
class RAS_IRasterizer* m_rasterizer; //needed for registering and replication of lightobj
Scene* m_blenderscene;
- Base* m_base;
public:
KX_LightObject(void* sgReplicationInfo,SG_Callbacks callbacks,RAS_IRasterizer* rasterizer,RAS_ILightObject* lightobj, bool glsl);
diff --git a/source/gameengine/Ketsji/KX_NavMeshObject.cpp b/source/gameengine/Ketsji/KX_NavMeshObject.cpp
index 5beda2e038a..83accb1d7a5 100644
--- a/source/gameengine/Ketsji/KX_NavMeshObject.cpp
+++ b/source/gameengine/Ketsji/KX_NavMeshObject.cpp
@@ -113,6 +113,8 @@ bool KX_NavMeshObject::BuildVertIndArrays(float *&vertices, int& nverts,
float *&dvertices, int &ndvertsuniq, unsigned short *&dtris,
int& ndtris, int &vertsPerPoly)
{
+ /* TODO: This doesn't work currently because of eval_ctx. */
+#if 0
DerivedMesh* dm = mesh_create_derived_no_virtual(GetScene()->GetBlenderScene(), GetBlenderObject(),
NULL, CD_MASK_MESH);
CustomData *pdata = dm->getPolyDataLayout(dm);
@@ -280,6 +282,8 @@ bool KX_NavMeshObject::BuildVertIndArrays(float *&vertices, int& nverts,
dm->release(dm);
return true;
+#endif
+ return false;
}
diff --git a/source/gameengine/Ketsji/KX_Scene.cpp b/source/gameengine/Ketsji/KX_Scene.cpp
index b3061087344..48b50d24975 100644
--- a/source/gameengine/Ketsji/KX_Scene.cpp
+++ b/source/gameengine/Ketsji/KX_Scene.cpp
@@ -105,6 +105,7 @@
#include "KX_Light.h"
+#include "BKE_group.h"
#include "BLI_task.h"
static void *KX_SceneReplicationFunc(SG_IObject* node,void* gameobj,void* scene)
@@ -720,7 +721,6 @@ void KX_Scene::DupliGroupRecurse(CValue* obj, int level)
KX_GameObject* gameobj;
Object* blgroupobj = groupobj->GetBlenderObject();
Group* group;
- GroupObject *go;
vector<KX_GameObject*> duplilist;
if (!groupobj->GetSGNode() ||
@@ -738,9 +738,9 @@ void KX_Scene::DupliGroupRecurse(CValue* obj, int level)
m_groupGameObjects.clear();
group = blgroupobj->dup_group;
- for (go=(GroupObject*)group->gobject.first; go; go=(GroupObject*)go->next)
+ FOREACH_GROUP_BASE(group, base)
{
- Object* blenderobj = go->ob;
+ Object *blenderobj = base->object;
if (blgroupobj == blenderobj)
// this check is also in group_duplilist()
continue;
@@ -755,13 +755,13 @@ void KX_Scene::DupliGroupRecurse(CValue* obj, int level)
gameobj->SetBlenderGroupObject(blgroupobj);
- if ((blenderobj->lay & group->layer)==0)
- {
+ if ((base->flag & BASE_VISIBLED) == 0) {
// object is not visible in the 3D view, will not be instantiated
continue;
}
m_groupGameObjects.insert(gameobj);
}
+ FOREACH_GROUP_BASE_END
set<CValue*>::iterator oit;
for (oit=m_groupGameObjects.begin(); oit != m_groupGameObjects.end(); oit++)
diff --git a/source/gameengine/Ketsji/KX_SoundActuator.cpp b/source/gameengine/Ketsji/KX_SoundActuator.cpp
index 64aab31ba22..a09429450cb 100644
--- a/source/gameengine/Ketsji/KX_SoundActuator.cpp
+++ b/source/gameengine/Ketsji/KX_SoundActuator.cpp
@@ -37,14 +37,12 @@
#include "KX_SoundActuator.h"
#ifdef WITH_AUDASPACE
-# ifdef WITH_SYSTEM_AUDASPACE
typedef float sample_t;
-# include AUD_PYTHON_H
-# endif
-# include AUD_SOUND_H
-# include AUD_SPECIAL_H
-# include AUD_DEVICE_H
-# include AUD_HANDLE_H
+# include <python/PyAPI.h>
+# include <AUD_Sound.h>
+# include <AUD_Special.h>
+# include <AUD_Device.h>
+# include <AUD_Handle.h>
#endif
#include "KX_GameObject.h"
diff --git a/source/gameengine/Ketsji/KX_SoundActuator.h b/source/gameengine/Ketsji/KX_SoundActuator.h
index 5ec2fda722f..4f3e6f707e0 100644
--- a/source/gameengine/Ketsji/KX_SoundActuator.h
+++ b/source/gameengine/Ketsji/KX_SoundActuator.h
@@ -35,8 +35,8 @@
#include "SCA_IActuator.h"
#ifdef WITH_AUDASPACE
-# include AUD_SOUND_H
-# include AUD_HANDLE_H
+# include <AUD_Sound.h>
+# include <AUD_Handle.h>
#endif
#include "BKE_sound.h"
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
index c79e1c23ef6..b3cee944880 100644
--- a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
@@ -2234,7 +2234,9 @@ bool CcdShapeConstructionInfo::UpdateMesh(class KX_GameObject *gameobj, class RA
std::vector<int> vert_remap_array(numverts, 0);
for (mf = mface, tf = tface, i = 0; i < numpolys; mf++, tf++, i++) {
- if (tf->mode & TF_DYNAMIC) {
+ // 2.8x TODO: use GEMAT_NOPHYSICS.
+ // if (tf->mode & TF_DYNAMIC)
+ {
int flen;
if (mf->v4) {
@@ -2271,7 +2273,9 @@ bool CcdShapeConstructionInfo::UpdateMesh(class KX_GameObject *gameobj, class RA
int *poly_index_pt = &m_polygonIndexArray[0];
for (mf = mface, tf = tface, i = 0; i < numpolys; mf++, tf++, i++) {
- if (tf->mode & TF_DYNAMIC) {
+ // 2.8x TODO: use GEMAT_NOPHYSICS.
+ // if (tf->mode & TF_DYNAMIC)
+ {
int origi = index_mf_to_mpoly ? DM_origindex_mface_mpoly(index_mf_to_mpoly, index_mp_to_orig, i) : i;
if (mf->v4) {
diff --git a/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp b/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp
index 2a736aa7deb..1d22d2debf9 100644
--- a/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp
+++ b/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp
@@ -233,10 +233,6 @@ Image *RAS_IPolyMaterial::GetBlenderImage() const
{
return NULL;
}
-MTexPoly *RAS_IPolyMaterial::GetMTexPoly() const
-{
- return NULL;
-}
unsigned int *RAS_IPolyMaterial::GetMCol() const
{
diff --git a/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h b/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h
index a34f7a9b390..7023d305510 100644
--- a/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h
+++ b/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h
@@ -41,7 +41,6 @@
#endif
class RAS_IRasterizer;
-struct MTexPoly;
struct Material;
struct Image;
struct Scene;
@@ -167,7 +166,6 @@ public:
virtual Material* GetBlenderMaterial() const;
virtual Image* GetBlenderImage() const;
- virtual MTexPoly* GetMTexPoly() const;
virtual unsigned int* GetMCol() const;
virtual Scene* GetBlenderScene() const;
virtual void ReleaseMaterial();
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLLight.cpp b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLLight.cpp
index 69e859f06d9..18254357f85 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLLight.cpp
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLLight.cpp
@@ -43,6 +43,7 @@
#include "DNA_lamp_types.h"
#include "DNA_scene_types.h"
+#include "GPU_lamp.h"
#include "GPU_material.h"
RAS_OpenGLLight::RAS_OpenGLLight(RAS_OpenGLRasterizer *ras)
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
index 5eed9b3b8f8..d1c3162f752 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
@@ -60,6 +60,7 @@
extern "C"{
#include "BLF_api.h"
#include "BKE_DerivedMesh.h"
+ #include "DNA_material_types.h"
}
@@ -710,7 +711,7 @@ void RAS_OpenGLRasterizer::IndexPrimitives_3DText(RAS_MeshSlot& ms,
glattrib = unit;
GPU_render_text(
- polymat->GetMTexPoly(), polymat->GetDrawingMode(), mytext, mytext.Length(), polymat->GetMCol(),
+ polymat->GetDrawingMode(), mytext, mytext.Length(), polymat->GetMCol(),
v_ptr, uv_ptr, glattrib);
ClearCachingInfo();
@@ -769,7 +770,6 @@ static RAS_MeshSlot *current_ms;
static RAS_MeshObject *current_mesh;
static int current_blmat_nr;
static GPUVertexAttribs current_gpu_attribs;
-static Image *current_image;
static int CheckMaterialDM(int matnr, void *attribs)
{
// only draw the current material
@@ -781,33 +781,6 @@ static int CheckMaterialDM(int matnr, void *attribs)
return 1;
}
-static DMDrawOption CheckTexDM(MTexPoly *mtexpoly, const bool has_mcol, int matnr)
-{
-
- // index is the original face index, retrieve the polygon
- if (matnr == current_blmat_nr &&
- (mtexpoly == NULL || mtexpoly->tpage == current_image)) {
- // must handle color.
- if (current_wireframe)
- return DM_DRAW_OPTION_NO_MCOL;
- if (current_ms->m_bObjectColor) {
- MT_Vector4& rgba = current_ms->m_RGBAcolor;
- glColor4d(rgba[0], rgba[1], rgba[2], rgba[3]);
- // don't use mcol
- return DM_DRAW_OPTION_NO_MCOL;
- }
- if (!has_mcol) {
- // we have to set the color from the material
- unsigned char rgba[4];
- current_polymat->GetMaterialRGBAColor(rgba);
- glColor4ubv((const GLubyte *)rgba);
- return DM_DRAW_OPTION_NORMAL;
- }
- return DM_DRAW_OPTION_NORMAL;
- }
- return DM_DRAW_OPTION_SKIP;
-}
-
void RAS_OpenGLRasterizer::DrawDerivedMesh(class RAS_MeshSlot &ms)
{
// mesh data is in derived mesh
@@ -824,7 +797,10 @@ void RAS_OpenGLRasterizer::DrawDerivedMesh(class RAS_MeshSlot &ms)
else
this->SetCullFace(false);
- if (current_polymat->GetFlag() & RAS_BLENDERGLSL) {
+#if 0
+ if (current_polymat->GetFlag() & RAS_BLENDERGLSL)
+#endif
+ {
// GetMaterialIndex return the original mface material index,
// increment by 1 to match what derived mesh is doing
current_blmat_nr = current_polymat->GetMaterialIndex()+1;
@@ -839,11 +815,6 @@ void RAS_OpenGLRasterizer::DrawDerivedMesh(class RAS_MeshSlot &ms)
int current_blend_mode = GPU_get_material_alpha_blend();
ms.m_pDerivedMesh->drawFacesGLSL(ms.m_pDerivedMesh, CheckMaterialDM);
GPU_set_material_alpha_blend(current_blend_mode);
- } else {
- //ms.m_pDerivedMesh->drawMappedFacesTex(ms.m_pDerivedMesh, CheckTexfaceDM, mcol);
- current_blmat_nr = current_polymat->GetMaterialIndex();
- current_image = current_polymat->GetBlenderImage();
- ms.m_pDerivedMesh->drawFacesTex(ms.m_pDerivedMesh, CheckTexDM, NULL, NULL, DM_DRAW_USE_ACTIVE_UV);
}
}
diff --git a/source/tools b/source/tools
-Subproject 7695e14cfc5820ac66546e0e515914d85ab81af
+Subproject b11375e89061303401376f7aeae42ac2fd64692
diff --git a/tests/gtests/alembic/CMakeLists.txt b/tests/gtests/alembic/CMakeLists.txt
index 1511024ee51..3e794898ebe 100644
--- a/tests/gtests/alembic/CMakeLists.txt
+++ b/tests/gtests/alembic/CMakeLists.txt
@@ -28,6 +28,7 @@ set(INC
../../../source/blender/blenkernel
../../../source/blender/alembic
../../../source/blender/makesdna
+ ../../../source/blender/depsgraph
${ALEMBIC_INCLUDE_DIRS}
${BOOST_INCLUDE_DIR}
${HDF5_INCLUDE_DIRS}
diff --git a/tests/gtests/alembic/abc_export_test.cc b/tests/gtests/alembic/abc_export_test.cc
index a3eb2c412df..b040f375221 100644
--- a/tests/gtests/alembic/abc_export_test.cc
+++ b/tests/gtests/alembic/abc_export_test.cc
@@ -11,11 +11,16 @@ extern "C" {
#include "DNA_scene_types.h"
}
+#include "DEG_depsgraph.h"
+
class TestableAbcExporter : public AbcExporter {
public:
- TestableAbcExporter(Main *bmain, Scene *scene, const char *filename, ExportSettings &settings)
- : AbcExporter(bmain, scene, filename, settings)
- {}
+ TestableAbcExporter(Main *bmain, EvaluationContext *eval_ctx,
+ Scene *scene, ViewLayer *view_layer, Depsgraph *depsgraph,
+ const char *filename, ExportSettings &settings)
+ : AbcExporter(bmain, eval_ctx, scene, view_layer, depsgraph, filename, settings)
+ {
+ }
void getShutterSamples(unsigned int nr_of_samples,
bool time_relative,
@@ -28,7 +33,6 @@ public:
std::set<double> &frames) {
AbcExporter::getFrameSet(nr_of_samples, frames);
}
-
};
class AlembicExportTest : public testing::Test
@@ -36,6 +40,8 @@ class AlembicExportTest : public testing::Test
protected:
ExportSettings settings;
Scene scene;
+ EvaluationContext eval_ctx;
+ Depsgraph *depsgraph;
TestableAbcExporter *exporter;
Main *bmain;
@@ -50,19 +56,25 @@ protected:
bmain = BKE_main_new();
+ /* TODO(sergey): Pass scene layer somehow? */
+ DEG_evaluation_context_init(&eval_ctx, DAG_EVAL_VIEWPORT);
+ depsgraph = DEG_graph_new();
+
exporter = NULL;
}
virtual void TearDown()
{
BKE_main_free(bmain);
+ DEG_graph_free(depsgraph);
delete exporter;
}
// Call after setting up the settings.
void createExporter()
{
- exporter = new TestableAbcExporter(bmain, &scene, "somefile.abc", settings);
+ ViewLayer *view_layer = (ViewLayer *)scene.view_layers.first;
+ exporter = new TestableAbcExporter(bmain, &eval_ctx, &scene, view_layer, depsgraph, "somefile.abc", settings);
}
};
diff --git a/tests/gtests/blenlib/BLI_memiter_test.cc b/tests/gtests/blenlib/BLI_memiter_test.cc
new file mode 100644
index 00000000000..601eadea267
--- /dev/null
+++ b/tests/gtests/blenlib/BLI_memiter_test.cc
@@ -0,0 +1,206 @@
+/* Apache License, Version 2.0 */
+
+#include "testing/testing.h"
+
+extern "C" {
+#include "BLI_array_utils.h"
+#include "BLI_memiter.h"
+#include "MEM_guardedalloc.h"
+
+#include "BLI_string.h"
+#include "BLI_ressource_strings.h"
+}
+
+TEST(memiter, Nop)
+{
+ BLI_memiter *mi = BLI_memiter_create(64);
+ BLI_memiter_destroy(mi);
+}
+
+void memiter_empty_test(int num_elems, const int chunk_size)
+{
+ BLI_memiter *mi = BLI_memiter_create(chunk_size);
+ void *data;
+ for (int index = 0; index < num_elems; index++) {
+ data = BLI_memiter_alloc(mi, 0);
+ }
+ int index = 0, total_size = 0;
+ BLI_memiter_handle it;
+ BLI_memiter_iter_init(mi, &it);
+ uint elem_size;
+ while ((data = BLI_memiter_iter_step_size(&it, &elem_size))) {
+ index += 1;
+ total_size += elem_size;
+ }
+ EXPECT_EQ(0, total_size);
+ EXPECT_EQ(num_elems, index);
+
+ BLI_memiter_destroy(mi);
+}
+
+#define MEMITER_NUMBER_TEST_FN(fn, number_type) \
+void fn(int num_elems, const int chunk_size) \
+{ \
+ BLI_memiter *mi = BLI_memiter_create(chunk_size); \
+ number_type *data; \
+ for (int index = 0; index < num_elems; index++) { \
+ data = (number_type *)BLI_memiter_alloc(mi, sizeof(number_type)); \
+ *data = index; \
+ } \
+ BLI_memiter_handle it; \
+ BLI_memiter_iter_init(mi, &it); \
+ uint elem_size; \
+ int index = 0; \
+ while ((data = (number_type *)BLI_memiter_iter_step_size(&it, &elem_size))) { \
+ EXPECT_EQ(sizeof(number_type), elem_size); \
+ EXPECT_EQ(index, *data); \
+ index += 1; \
+ } \
+ BLI_memiter_destroy(mi); \
+}
+
+/* generate number functions */
+MEMITER_NUMBER_TEST_FN(memiter_char_test, char)
+MEMITER_NUMBER_TEST_FN(memiter_short_test, short)
+MEMITER_NUMBER_TEST_FN(memiter_int_test, int)
+MEMITER_NUMBER_TEST_FN(memiter_long_test, int64_t)
+
+void memiter_string_test(const char *strings[], const int chunk_size)
+{
+ BLI_memiter *mi = BLI_memiter_create(chunk_size);
+ char *data;
+ int index = 0;
+ int total_size_expect = 0;
+ while (strings[index]) {
+ const int size = strlen(strings[index]) + 1;
+ BLI_memiter_alloc_from(mi, size, strings[index]);
+ total_size_expect += size;
+ index += 1;
+ }
+ const int strings_len = index;
+ int total_size = 0;
+ BLI_memiter_handle it;
+ BLI_memiter_iter_init(mi, &it);
+ uint elem_size;
+ index = 0;
+ while ((data = (char *)BLI_memiter_iter_step_size(&it, &elem_size))) {
+ EXPECT_EQ(strlen(strings[index]) + 1, elem_size);
+ EXPECT_STREQ(strings[index], data);
+ total_size += elem_size;
+ index += 1;
+ }
+ EXPECT_EQ(total_size_expect, total_size);
+ EXPECT_EQ(strings_len, index);
+
+ BLI_memiter_destroy(mi);
+}
+
+void memiter_words10k_test(const char split_char, const int chunk_size)
+{
+ const int words_len = sizeof(words10k) - 1;
+ char *words = BLI_strdupn(words10k, words_len);
+ BLI_str_replace_char(words, split_char, '\0');
+
+ BLI_memiter *mi = BLI_memiter_create(chunk_size);
+
+ char *data;
+ int index;
+ char *c_end, *c;
+ c_end = words + words_len;
+ c = words;
+ index = 0;
+ while (c < c_end) {
+ int elem_size = strlen(c) + 1;
+ data = (char *)BLI_memiter_alloc(mi, elem_size);
+ memcpy(data, c, elem_size);
+ c += elem_size;
+ index += 1;
+ }
+ const int len_expect = index;
+ c = words;
+ uint size;
+ BLI_memiter_handle it;
+ BLI_memiter_iter_init(mi, &it);
+ index = 0;
+ while ((data = (char *)BLI_memiter_iter_step_size(&it, &size))) {
+ int size_expect = strlen(c) + 1;
+ EXPECT_EQ(size_expect, size);
+ EXPECT_STREQ(c, data);
+ c += size;
+ index += 1;
+ }
+ EXPECT_EQ(len_expect, index);
+ BLI_memiter_destroy(mi);
+ MEM_freeN(words);
+}
+
+
+#define TEST_EMPTY_AT_CHUNK_SIZE(chunk_size) \
+TEST(memiter, Empty0_##chunk_size) { memiter_empty_test(0, chunk_size); } \
+TEST(memiter, Empty1_##chunk_size) { memiter_empty_test(1, chunk_size); } \
+TEST(memiter, Empty2_##chunk_size) { memiter_empty_test(2, chunk_size); } \
+TEST(memiter, Empty3_##chunk_size) { memiter_empty_test(3, chunk_size); } \
+TEST(memiter, Empty13_##chunk_size) { memiter_empty_test(13, chunk_size); } \
+TEST(memiter, Empty256_##chunk_size) { memiter_empty_test(256, chunk_size); } \
+
+TEST_EMPTY_AT_CHUNK_SIZE(1)
+TEST_EMPTY_AT_CHUNK_SIZE(2)
+TEST_EMPTY_AT_CHUNK_SIZE(3)
+TEST_EMPTY_AT_CHUNK_SIZE(13)
+TEST_EMPTY_AT_CHUNK_SIZE(256)
+
+#define TEST_NUMBER_AT_CHUNK_SIZE(chunk_size) \
+TEST(memiter, Char1_##chunk_size) { memiter_char_test(1, chunk_size); } \
+TEST(memiter, Short1_##chunk_size) { memiter_short_test(1, chunk_size); } \
+TEST(memiter, Int1_##chunk_size) { memiter_int_test(1, chunk_size); } \
+TEST(memiter, Long1_##chunk_size) { memiter_long_test(1, chunk_size); } \
+\
+TEST(memiter, Char2_##chunk_size) { memiter_char_test(2, chunk_size); } \
+TEST(memiter, Short2_##chunk_size) { memiter_short_test(2, chunk_size); } \
+TEST(memiter, Int2_##chunk_size) { memiter_int_test(2, chunk_size); } \
+TEST(memiter, Long2_##chunk_size) { memiter_long_test(2, chunk_size); } \
+\
+TEST(memiter, Char3_##chunk_size) { memiter_char_test(3, chunk_size); } \
+TEST(memiter, Short3_##chunk_size) { memiter_short_test(3, chunk_size); } \
+TEST(memiter, Int3_##chunk_size) { memiter_int_test(3, chunk_size); } \
+TEST(memiter, Long3_##chunk_size) { memiter_long_test(3, chunk_size); } \
+\
+TEST(memiter, Char256_##chunk_size) { memiter_char_test(256, chunk_size); } \
+TEST(memiter, Short256_##chunk_size) { memiter_short_test(256, chunk_size); } \
+TEST(memiter, Int256_##chunk_size) { memiter_int_test(256, chunk_size); } \
+TEST(memiter, Long256_##chunk_size) { memiter_long_test(256, chunk_size); } \
+
+TEST_NUMBER_AT_CHUNK_SIZE(1)
+TEST_NUMBER_AT_CHUNK_SIZE(2)
+TEST_NUMBER_AT_CHUNK_SIZE(3)
+TEST_NUMBER_AT_CHUNK_SIZE(13)
+TEST_NUMBER_AT_CHUNK_SIZE(256)
+
+#define STRINGS_TEST(chunk_size, ...) { \
+ const char *data[] = {__VA_ARGS__, NULL}; \
+ memiter_string_test(data, chunk_size); \
+}
+
+#define TEST_STRINGS_AT_CHUNK_SIZE(chunk_size) \
+TEST(memiter, Strings_##chunk_size) { \
+ STRINGS_TEST(chunk_size, ""); \
+ STRINGS_TEST(chunk_size, "test", "me"); \
+ STRINGS_TEST(chunk_size, "more", "test", "data", "to", "follow"); \
+}
+
+TEST_STRINGS_AT_CHUNK_SIZE(1)
+TEST_STRINGS_AT_CHUNK_SIZE(2)
+TEST_STRINGS_AT_CHUNK_SIZE(3)
+TEST_STRINGS_AT_CHUNK_SIZE(13)
+TEST_STRINGS_AT_CHUNK_SIZE(256)
+
+
+#define TEST_WORDS10K_AT_CHUNK_SIZE(chunk_size) \
+TEST(memiter, Words10kSentence_##chunk_size) { memiter_words10k_test('.', chunk_size); } \
+TEST(memiter, Words10kWords_##chunk_size) { memiter_words10k_test(' ', chunk_size); } \
+
+TEST_WORDS10K_AT_CHUNK_SIZE(1)
+TEST_WORDS10K_AT_CHUNK_SIZE(2)
+TEST_WORDS10K_AT_CHUNK_SIZE(3)
+TEST_WORDS10K_AT_CHUNK_SIZE(13)
+TEST_WORDS10K_AT_CHUNK_SIZE(256)
diff --git a/tests/gtests/blenlib/CMakeLists.txt b/tests/gtests/blenlib/CMakeLists.txt
index 715b689387f..001f1d5f7b3 100644
--- a/tests/gtests/blenlib/CMakeLists.txt
+++ b/tests/gtests/blenlib/CMakeLists.txt
@@ -51,6 +51,7 @@ BLENDER_TEST(BLI_listbase "bf_blenlib")
BLENDER_TEST(BLI_math_base "bf_blenlib")
BLENDER_TEST(BLI_math_color "bf_blenlib")
BLENDER_TEST(BLI_math_geom "bf_blenlib")
+BLENDER_TEST(BLI_memiter "bf_blenlib")
BLENDER_TEST(BLI_path_util "${BLI_path_util_extra_libs}")
BLENDER_TEST(BLI_polyfill2d "bf_blenlib")
BLENDER_TEST(BLI_stack "bf_blenlib")
diff --git a/tests/python/CMakeLists.txt b/tests/python/CMakeLists.txt
index 63709aae74f..537a3e3a07e 100644
--- a/tests/python/CMakeLists.txt
+++ b/tests/python/CMakeLists.txt
@@ -593,3 +593,5 @@ if(WITH_ALEMBIC)
--with-legacy-depsgraph=${WITH_LEGACY_DEPSGRAPH}
)
endif()
+
+add_subdirectory(view_layer)
diff --git a/tests/python/bl_alembic_import_test.py b/tests/python/bl_alembic_import_test.py
index 1b526b3ebba..e9499fb08f0 100644
--- a/tests/python/bl_alembic_import_test.py
+++ b/tests/python/bl_alembic_import_test.py
@@ -63,7 +63,7 @@ class SimpleImportTest(AbstractAlembicTest):
# The objects should be linked to scene_collection in Blender 2.8,
# and to scene in Blender 2.7x.
- objects = bpy.context.scene.objects
+ objects = bpy.context.scene_collection.objects
self.assertEqual(13, len(objects))
# Test the hierarchy.
@@ -83,7 +83,7 @@ class SimpleImportTest(AbstractAlembicTest):
# The objects should be linked to scene_collection in Blender 2.8,
# and to scene in Blender 2.7x.
- objects = bpy.context.scene.objects
+ objects = bpy.context.scene_collection.objects
# ABC parent is top-level object, which translates to nothing in Blender
self.assertIsNone(objects['locator1'].parent)
@@ -128,7 +128,7 @@ class SimpleImportTest(AbstractAlembicTest):
# All cubes should be selected, but the sphere shouldn't be.
for ob in bpy.data.objects:
- self.assertEqual('Cube' in ob.name, ob.select)
+ self.assertEqual('Cube' in ob.name, ob.select_get())
def test_change_path_constraint(self):
import math
@@ -183,17 +183,19 @@ class SimpleImportTest(AbstractAlembicTest):
# Check that the file loaded ok.
bpy.context.scene.frame_set(6)
- mesh = plane.to_mesh(bpy.context.scene, True, 'RENDER')
+ scene = bpy.context.scene
+ layer = scene.view_layers[scene.active_layer]
+ mesh = plane.to_mesh(scene, layer, True, 'RENDER')
self.assertAlmostEqual(-1, mesh.vertices[0].co.x)
self.assertAlmostEqual(-1, mesh.vertices[0].co.y)
self.assertAlmostEqual(0.5905638933181763, mesh.vertices[0].co.z)
# Change path from absolute to relative. This should not break the animation.
- bpy.context.scene.frame_set(1)
+ scene.frame_set(1)
bpy.data.cache_files[fname].filepath = relpath
- bpy.context.scene.frame_set(6)
+ scene.frame_set(6)
- mesh = plane.to_mesh(bpy.context.scene, True, 'RENDER')
+ mesh = plane.to_mesh(scene, layer, True, 'RENDER')
self.assertAlmostEqual(1, mesh.vertices[3].co.x)
self.assertAlmostEqual(1, mesh.vertices[3].co.y)
self.assertAlmostEqual(0.5905638933181763, mesh.vertices[3].co.z)
diff --git a/tests/python/bl_mesh_modifiers.py b/tests/python/bl_mesh_modifiers.py
index bff2c31984c..f202e5b6611 100644
--- a/tests/python/bl_mesh_modifiers.py
+++ b/tests/python/bl_mesh_modifiers.py
@@ -248,7 +248,7 @@ def mesh_uv_add(obj):
(1.0, 1.0),
(1.0, 0.0))
- uv_lay = obj.data.uv_textures.new()
+ uv_lay = obj.data.uv_layers.new()
# XXX, odd that we need to do this. until UV's and texface
# are separated we will need to keep it
diff --git a/tests/python/view_layer/CMakeLists.txt b/tests/python/view_layer/CMakeLists.txt
new file mode 100644
index 00000000000..cc5a3ba54b1
--- /dev/null
+++ b/tests/python/view_layer/CMakeLists.txt
@@ -0,0 +1,186 @@
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Contributor(s): Jacques Beaurain, Dalai Felinto.
+#
+# ***** END GPL LICENSE BLOCK *****
+
+# --env-system-scripts allows to run without the install target.
+
+# Use '--write-blend=/tmp/test.blend' to view output
+
+set(TEST_SRC_DIR ${CMAKE_SOURCE_DIR}/../lib/tests)
+set(TEST_OUT_DIR ${CMAKE_BINARY_DIR}/tests)
+
+# ugh, any better way to do this on testing only?
+execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${TEST_OUT_DIR})
+
+#~ if(NOT IS_DIRECTORY ${TEST_SRC_DIR})
+#~ message(FATAL_ERROR "CMake test directory not found!")
+#~ endif()
+
+# all calls to blender use this
+if(APPLE)
+ if(${CMAKE_GENERATOR} MATCHES "Xcode")
+ set(TEST_BLENDER_EXE ${EXECUTABLE_OUTPUT_PATH}/Debug/blender.app/Contents/MacOS/blender)
+ else()
+ set(TEST_BLENDER_EXE ${EXECUTABLE_OUTPUT_PATH}/blender.app/Contents/MacOS/blender)
+ endif()
+else()
+ set(TEST_BLENDER_EXE ${EXECUTABLE_OUTPUT_PATH}/blender)
+endif()
+
+# for testing with valgrind prefix: valgrind --track-origins=yes --error-limit=no
+set(TEST_BLENDER_EXE ${TEST_BLENDER_EXE} --background -noaudio --factory-startup --env-system-scripts ${CMAKE_SOURCE_DIR}/release/scripts)
+
+
+# ------------------------------------------------------------------------------
+
+macro(VIEW_LAYER_TEST test_name)
+ # Adds ${CMAKE_CURRENT_LIST_DIR} to sys.path so that the tests can import
+ # things from view_layer_common.py
+ add_test(view_layer_${test_name} ${TEST_BLENDER_EXE}
+ --python-expr "import sys; sys.path.append('${CMAKE_CURRENT_LIST_DIR}')"
+ --python-exit-code 1
+ --python ${CMAKE_CURRENT_LIST_DIR}/test_${test_name}.py --
+ --testdir="${TEST_SRC_DIR}/layers"
+ )
+endmacro()
+
+VIEW_LAYER_TEST(active_collection)
+VIEW_LAYER_TEST(background_set)
+VIEW_LAYER_TEST(collection_new_sync)
+VIEW_LAYER_TEST(collection_rename_a)
+VIEW_LAYER_TEST(collection_rename_b)
+VIEW_LAYER_TEST(evaluation_render_settings_a)
+VIEW_LAYER_TEST(evaluation_render_settings_b)
+VIEW_LAYER_TEST(evaluation_render_settings_c)
+VIEW_LAYER_TEST(evaluation_render_settings_d)
+VIEW_LAYER_TEST(evaluation_render_settings_e)
+VIEW_LAYER_TEST(evaluation_render_settings_f)
+VIEW_LAYER_TEST(evaluation_render_settings_g)
+VIEW_LAYER_TEST(evaluation_render_settings_h)
+VIEW_LAYER_TEST(evaluation_render_settings_i)
+VIEW_LAYER_TEST(evaluation_visibility_a)
+VIEW_LAYER_TEST(evaluation_visibility_b)
+VIEW_LAYER_TEST(evaluation_visibility_c)
+VIEW_LAYER_TEST(evaluation_visibility_d)
+VIEW_LAYER_TEST(evaluation_visibility_e)
+VIEW_LAYER_TEST(evaluation_visibility_f)
+VIEW_LAYER_TEST(evaluation_visibility_g)
+VIEW_LAYER_TEST(evaluation_visibility_h)
+VIEW_LAYER_TEST(evaluation_visibility_i)
+VIEW_LAYER_TEST(evaluation_visibility_j)
+VIEW_LAYER_TEST(evaluation_selectability_a)
+VIEW_LAYER_TEST(evaluation_selectability_b)
+VIEW_LAYER_TEST(evaluation_selectability_c)
+VIEW_LAYER_TEST(evaluation_selectability_d)
+VIEW_LAYER_TEST(evaluation_selectability_e)
+VIEW_LAYER_TEST(evaluation_selectability_f)
+VIEW_LAYER_TEST(group_a)
+VIEW_LAYER_TEST(group_b)
+VIEW_LAYER_TEST(group_c)
+VIEW_LAYER_TEST(group_d)
+VIEW_LAYER_TEST(object_add_cylinder)
+VIEW_LAYER_TEST(object_add_empty)
+VIEW_LAYER_TEST(object_add_torus)
+VIEW_LAYER_TEST(object_add_no_collection_cylinder)
+VIEW_LAYER_TEST(object_add_no_collection_empty)
+VIEW_LAYER_TEST(object_add_no_collection_torus)
+VIEW_LAYER_TEST(object_copy)
+VIEW_LAYER_TEST(object_delete_a)
+VIEW_LAYER_TEST(object_delete_b)
+VIEW_LAYER_TEST(object_link_a)
+VIEW_LAYER_TEST(object_link_b)
+VIEW_LAYER_TEST(object_link_c)
+VIEW_LAYER_TEST(operator_context)
+VIEW_LAYER_TEST(move_above_below_scene_collection_a)
+VIEW_LAYER_TEST(move_above_below_scene_collection_b)
+VIEW_LAYER_TEST(move_above_below_scene_collection_c)
+VIEW_LAYER_TEST(move_above_below_scene_collection_d)
+VIEW_LAYER_TEST(move_above_below_scene_collection_e)
+VIEW_LAYER_TEST(move_above_below_scene_collection_f)
+VIEW_LAYER_TEST(move_above_below_scene_collection_g)
+VIEW_LAYER_TEST(move_above_below_scene_collection_h)
+VIEW_LAYER_TEST(move_above_below_scene_collection_i)
+VIEW_LAYER_TEST(move_above_below_scene_collection_sync_a)
+VIEW_LAYER_TEST(move_above_below_scene_collection_sync_b)
+VIEW_LAYER_TEST(move_above_below_scene_collection_sync_c)
+VIEW_LAYER_TEST(move_above_below_scene_collection_sync_d)
+VIEW_LAYER_TEST(move_above_below_scene_collection_sync_e)
+VIEW_LAYER_TEST(move_above_below_scene_collection_sync_f)
+VIEW_LAYER_TEST(move_above_below_scene_collection_sync_g)
+VIEW_LAYER_TEST(move_above_below_scene_collection_sync_h)
+VIEW_LAYER_TEST(move_above_below_scene_collection_sync_i)
+VIEW_LAYER_TEST(move_into_scene_collection_a)
+VIEW_LAYER_TEST(move_into_scene_collection_b)
+VIEW_LAYER_TEST(move_into_scene_collection_c)
+VIEW_LAYER_TEST(move_into_scene_collection_d)
+VIEW_LAYER_TEST(move_into_scene_collection_e)
+VIEW_LAYER_TEST(move_into_scene_collection_f)
+VIEW_LAYER_TEST(move_into_scene_collection_g)
+VIEW_LAYER_TEST(move_into_scene_collection_h)
+VIEW_LAYER_TEST(move_into_scene_collection_i)
+VIEW_LAYER_TEST(move_into_scene_collection_j)
+VIEW_LAYER_TEST(move_into_scene_collection_k)
+VIEW_LAYER_TEST(move_into_scene_collection_l)
+VIEW_LAYER_TEST(move_into_scene_collection_sync_a)
+VIEW_LAYER_TEST(move_into_scene_collection_sync_b)
+VIEW_LAYER_TEST(move_into_scene_collection_sync_c)
+VIEW_LAYER_TEST(move_into_scene_collection_sync_d)
+VIEW_LAYER_TEST(move_into_scene_collection_sync_e)
+VIEW_LAYER_TEST(move_into_scene_collection_sync_f)
+VIEW_LAYER_TEST(move_into_scene_collection_sync_g)
+VIEW_LAYER_TEST(move_into_scene_collection_sync_h)
+VIEW_LAYER_TEST(move_into_scene_collection_sync_i)
+VIEW_LAYER_TEST(move_into_scene_collection_sync_j)
+VIEW_LAYER_TEST(move_into_scene_collection_sync_k)
+VIEW_LAYER_TEST(move_into_scene_collection_sync_l)
+VIEW_LAYER_TEST(move_above_below_layer_collection_a)
+VIEW_LAYER_TEST(move_above_below_layer_collection_b)
+VIEW_LAYER_TEST(move_above_below_layer_collection_c)
+VIEW_LAYER_TEST(move_above_below_layer_collection_d)
+VIEW_LAYER_TEST(move_above_below_layer_collection_e)
+VIEW_LAYER_TEST(move_above_below_layer_collection_f)
+VIEW_LAYER_TEST(move_above_below_layer_collection_g)
+VIEW_LAYER_TEST(move_above_below_layer_collection_h)
+VIEW_LAYER_TEST(move_above_below_layer_collection_i)
+VIEW_LAYER_TEST(move_above_below_layer_collection_j)
+VIEW_LAYER_TEST(move_above_below_layer_collection_k)
+VIEW_LAYER_TEST(move_above_below_layer_collection_l)
+VIEW_LAYER_TEST(move_into_layer_collection_a)
+VIEW_LAYER_TEST(move_into_layer_collection_b)
+VIEW_LAYER_TEST(move_into_layer_collection_c)
+VIEW_LAYER_TEST(move_into_layer_collection_d)
+VIEW_LAYER_TEST(move_into_layer_collection_e)
+VIEW_LAYER_TEST(move_into_layer_collection_f)
+VIEW_LAYER_TEST(move_into_layer_collection_g)
+VIEW_LAYER_TEST(move_into_layer_collection_h)
+VIEW_LAYER_TEST(move_into_layer_collection_i)
+VIEW_LAYER_TEST(move_into_layer_collection_j)
+VIEW_LAYER_TEST(layer_linking)
+VIEW_LAYER_TEST(layer_syncing)
+VIEW_LAYER_TEST(scene_collection_delete)
+VIEW_LAYER_TEST(scene_copy_a)
+VIEW_LAYER_TEST(scene_copy_b)
+VIEW_LAYER_TEST(scene_copy_c)
+VIEW_LAYER_TEST(scene_copy_d)
+VIEW_LAYER_TEST(scene_copy_e)
+VIEW_LAYER_TEST(scene_copy_f)
+VIEW_LAYER_TEST(scene_delete)
+VIEW_LAYER_TEST(scene_objects)
+VIEW_LAYER_TEST(scene_write_read)
+VIEW_LAYER_TEST(view_layer_rename)
diff --git a/tests/python/view_layer/test_active_collection.py b/tests/python/view_layer/test_active_collection.py
new file mode 100644
index 00000000000..10df71f77ce
--- /dev/null
+++ b/tests/python/view_layer/test_active_collection.py
@@ -0,0 +1,70 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_active_collection(self):
+ """
+ See if active collection index is working
+ layer.collections.active_index works recursively
+ """
+ import bpy
+ import os
+
+ ROOT = self.get_root()
+ filepath_layers = os.path.join(ROOT, 'layers.blend')
+
+ # open file
+ bpy.ops.wm.open_mainfile('EXEC_DEFAULT', filepath=filepath_layers)
+ self.rename_collections()
+
+ # create sub-collections
+ three_b = bpy.data.objects.get('T.3b')
+ three_c = bpy.data.objects.get('T.3c')
+
+ scene = bpy.context.scene
+ subzero = scene.master_collection.collections['1'].collections.new('sub-zero')
+ scorpion = subzero.collections.new('scorpion')
+ subzero.objects.link(three_b)
+ scorpion.objects.link(three_c)
+ layer = scene.view_layers.new('Fresh new Layer')
+ layer.collections.link(subzero)
+
+ lookup = [
+ 'Master Collection',
+ '1',
+ 'sub-zero',
+ 'scorpion',
+ '2',
+ '3',
+ '4',
+ '5',
+ 'sub-zero',
+ 'scorpion']
+
+ for i, name in enumerate(lookup):
+ layer.collections.active_index = i
+ self.assertEqual(
+ name, layer.collections.active.name,
+ "Collection index mismatch: [{0}] : {1} != {2}".format(
+ i, name, layer.collections.active.name))
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_background_set.py b/tests/python/view_layer/test_background_set.py
new file mode 100644
index 00000000000..a26229d53a9
--- /dev/null
+++ b/tests/python/view_layer/test_background_set.py
@@ -0,0 +1,64 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_background_set(self):
+ """
+ See if background sets are properly added and removed
+ """
+ import bpy
+
+ background_scene = bpy.data.scenes[0]
+ main_scene = bpy.data.scenes.new('main')
+ bpy.context.window.scene = main_scene
+
+ # Update depsgraph.
+ main_scene.update()
+
+ # Safety check, there should be no objects in thew newly created scene.
+ self.assertEqual(0, len(bpy.context.depsgraph.objects))
+
+ # Now set the background set, and objects relationship.
+ main_scene.background_set = background_scene
+ background_scene.objects[0].parent = background_scene.objects[1]
+
+ # Update depsgraph.
+ main_scene.update()
+
+ # Test if objects were properly added to depsgraph.
+ self.assertEqual(3, len(bpy.context.depsgraph.objects))
+
+ # We now check if the objects are properly flagged as from set
+ # These objects can't be possible nor show their origins or
+ # relationship lines
+ for ob in bpy.context.depsgraph.objects:
+ self.assertTrue(ob.is_from_set)
+
+ # Test if removing is working fine.
+ main_scene.background_set = None
+
+ # Update depsgraph.
+ main_scene.update()
+
+ self.assertEqual(0, len(bpy.context.depsgraph.objects))
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_collection_new_sync.py b/tests/python/view_layer/test_collection_new_sync.py
new file mode 100644
index 00000000000..582e6c13d89
--- /dev/null
+++ b/tests/python/view_layer/test_collection_new_sync.py
@@ -0,0 +1,47 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_view_layer_syncing(self):
+ """
+ See if we can copy view layers.
+ """
+ import bpy
+ scene = bpy.context.scene
+ view_layer = scene.view_layers.new("All")
+
+ self.assertEqual(len(view_layer.collections), 1)
+ self.assertEqual(view_layer.collections[0].collection, scene.master_collection)
+
+ self.assertEqual(
+ {collection.name for collection in view_layer.collections[0].collections},
+ {'Collection 1'})
+
+ self.assertEqual(
+ bpy.ops.outliner.collection_new(),
+ {'FINISHED'})
+
+ self.assertEqual(
+ {collection.name for collection in view_layer.collections[0].collections},
+ {'Collection 1', 'Collection 2'})
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_collection_rename_a.py b/tests/python/view_layer/test_collection_rename_a.py
new file mode 100644
index 00000000000..ea156d7346f
--- /dev/null
+++ b/tests/python/view_layer/test_collection_rename_a.py
@@ -0,0 +1,91 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def setup_family(self):
+ import bpy
+ scene = bpy.context.scene
+
+ # Just add a bunch of collections on which we can do various tests.
+ grandma = scene.master_collection.collections.new('grandma')
+ grandpa = scene.master_collection.collections.new('grandpa')
+ mom = grandma.collections.new('mom')
+ son = mom.collections.new('son')
+ daughter = mom.collections.new('daughter')
+ uncle = grandma.collections.new('uncle')
+ cousin = uncle.collections.new('cousin')
+
+ lookup = {c.name: c for c in (grandma, grandpa, mom, son, daughter, uncle, cousin)}
+ return lookup
+
+ def test_rename_a(self):
+ family = self.setup_family()
+
+ family['mom'].name = family['daughter'].name
+ # Since they are not siblings, we allow them to have the same name.
+ self.assertEqual(family['mom'].name, family['daughter'].name)
+
+ def test_rename_b(self):
+ family = self.setup_family()
+
+ family['grandma'].name = family['grandpa'].name
+ self.assertNotEqual(family['grandma'].name, family['grandpa'].name)
+
+ def test_rename_c(self):
+ family = self.setup_family()
+
+ family['cousin'].name = family['daughter'].name
+ # Since they are not siblings, we allow them to have the same name.
+ self.assertEqual(family['cousin'].name, family['daughter'].name)
+
+ def test_rename_d(self):
+ family = self.setup_family()
+
+ family['son'].name = family['daughter'].name
+ self.assertNotEqual(family['son'].name, family['daughter'].name)
+
+ def test_rename_e(self):
+ family = self.setup_family()
+
+ family['grandma'].name = family['grandpa'].name
+ self.assertNotEqual(family['grandma'].name, family['grandpa'].name)
+
+ def test_add_equal_name_a(self):
+ family = self.setup_family()
+
+ other_daughter = family['mom'].collections.new(family['daughter'].name)
+ self.assertNotEqual(other_daughter.name, family['daughter'].name)
+
+ def test_add_equal_name_b(self):
+ family = self.setup_family()
+
+ other_aunt = family['grandma'].collections.new(family['daughter'].name)
+ # Since they are not siblings, we allow them to have the same name.
+ self.assertEqual(other_aunt.name, family['daughter'].name)
+
+ def test_add_equal_name_c(self):
+ family = self.setup_family()
+
+ other_aunt = family['grandma'].collections.new(family['mom'].name)
+ self.assertNotEqual(other_aunt.name, family['mom'].name)
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_collection_rename_b.py b/tests/python/view_layer/test_collection_rename_b.py
new file mode 100644
index 00000000000..3787066e1b9
--- /dev/null
+++ b/tests/python/view_layer/test_collection_rename_b.py
@@ -0,0 +1,58 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def setup_collections(self):
+ import bpy
+ scene = bpy.context.scene
+
+ master = scene.master_collection
+ one = master.collections[0]
+ two = master.collections.new()
+ sub = two.collections.new(one.name)
+
+ self.assertEqual(one.name, sub.name)
+
+ lookup = {
+ 'master': master,
+ 'one': one,
+ 'two': two,
+ 'sub': sub,
+ }
+ return lookup
+
+ def test_move_above(self):
+ collections = self.setup_collections()
+ collections['sub'].move_above(collections['one'])
+ self.assertNotEqual(collections['one'].name, collections['sub'].name)
+
+ def test_move_below(self):
+ collections = self.setup_collections()
+ collections['sub'].move_below(collections['one'])
+ self.assertNotEqual(collections['one'].name, collections['sub'].name)
+
+ def test_move_into(self):
+ collections = self.setup_collections()
+ collections['sub'].move_into(collections['master'])
+ self.assertNotEqual(collections['one'].name, collections['sub'].name)
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_evaluation_render_settings_a.py b/tests/python/view_layer/test_evaluation_render_settings_a.py
new file mode 100644
index 00000000000..e1e78ecdc13
--- /dev/null
+++ b/tests/python/view_layer/test_evaluation_render_settings_a.py
@@ -0,0 +1,33 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_render_settings(self):
+ """
+ See if the depsgraph evaluation is correct
+ """
+ clay = Clay()
+ self.assertEqual(clay.get('object', 'matcap_icon'), '01')
+ clay.set('scene', 'matcap_icon', '05')
+ self.assertEqual(clay.get('object', 'matcap_icon'), '05')
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_evaluation_render_settings_b.py b/tests/python/view_layer/test_evaluation_render_settings_b.py
new file mode 100644
index 00000000000..5cc055095a1
--- /dev/null
+++ b/tests/python/view_layer/test_evaluation_render_settings_b.py
@@ -0,0 +1,34 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_render_settings(self):
+ """
+ See if the depsgraph evaluation is correct
+ """
+ clay = Clay()
+ self.assertEqual(clay.get('object', 'matcap_icon'), '01')
+ clay.set('scene', 'matcap_icon', '05')
+ clay.set('grandma', 'matcap_icon', '03')
+ self.assertEqual(clay.get('object', 'matcap_icon'), '03')
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_evaluation_render_settings_c.py b/tests/python/view_layer/test_evaluation_render_settings_c.py
new file mode 100644
index 00000000000..805f6949ba2
--- /dev/null
+++ b/tests/python/view_layer/test_evaluation_render_settings_c.py
@@ -0,0 +1,33 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_render_settings(self):
+ """
+ See if the depsgraph evaluation is correct
+ """
+ clay = Clay()
+ self.assertEqual(clay.get('object', 'matcap_icon'), '01')
+ clay.set('mom', 'matcap_icon', '02')
+ self.assertEqual(clay.get('object', 'matcap_icon'), '02')
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_evaluation_render_settings_d.py b/tests/python/view_layer/test_evaluation_render_settings_d.py
new file mode 100644
index 00000000000..9fa90b66931
--- /dev/null
+++ b/tests/python/view_layer/test_evaluation_render_settings_d.py
@@ -0,0 +1,33 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_render_settings(self):
+ """
+ See if the depsgraph evaluation is correct
+ """
+ clay = Clay()
+ self.assertEqual(clay.get('object', 'matcap_icon'), '01')
+ clay.set('kid', 'matcap_icon', '05')
+ self.assertEqual(clay.get('object', 'matcap_icon'), '05')
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_evaluation_render_settings_e.py b/tests/python/view_layer/test_evaluation_render_settings_e.py
new file mode 100644
index 00000000000..e5cb8b2b295
--- /dev/null
+++ b/tests/python/view_layer/test_evaluation_render_settings_e.py
@@ -0,0 +1,34 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_render_settings(self):
+ """
+ See if the depsgraph evaluation is correct
+ """
+ clay = Clay()
+ self.assertEqual(clay.get('object', 'matcap_icon'), '01')
+ clay.set('grandma', 'matcap_icon', '04')
+ clay.set('kid', 'matcap_icon', '05')
+ self.assertEqual(clay.get('object', 'matcap_icon'), '05')
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_evaluation_render_settings_f.py b/tests/python/view_layer/test_evaluation_render_settings_f.py
new file mode 100644
index 00000000000..e7e834ff7fa
--- /dev/null
+++ b/tests/python/view_layer/test_evaluation_render_settings_f.py
@@ -0,0 +1,35 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_render_settings(self):
+ """
+ See if the depsgraph evaluation is correct
+ """
+ clay = Clay(extra_kid_layer=True)
+ self.assertEqual(clay.get('object', 'matcap_icon'), '01')
+
+ clay.set('scene', 'matcap_icon', '05')
+ clay.set('extra', 'matcap_icon', '07')
+ self.assertEqual(clay.get('object', 'matcap_icon'), '07')
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_evaluation_render_settings_g.py b/tests/python/view_layer/test_evaluation_render_settings_g.py
new file mode 100644
index 00000000000..32f3529eef8
--- /dev/null
+++ b/tests/python/view_layer/test_evaluation_render_settings_g.py
@@ -0,0 +1,35 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_render_settings(self):
+ """
+ See if the depsgraph evaluation is correct
+ """
+ clay = Clay(extra_kid_layer=True)
+ self.assertEqual(clay.get('object', 'matcap_icon'), '01')
+
+ clay.set('mom', 'matcap_icon', '02')
+ clay.set('extra', 'matcap_icon', '06')
+ self.assertEqual(clay.get('object', 'matcap_icon'), '06')
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_evaluation_render_settings_h.py b/tests/python/view_layer/test_evaluation_render_settings_h.py
new file mode 100644
index 00000000000..3e175068006
--- /dev/null
+++ b/tests/python/view_layer/test_evaluation_render_settings_h.py
@@ -0,0 +1,35 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_render_settings(self):
+ """
+ See if the depsgraph evaluation is correct
+ """
+ clay = Clay(extra_kid_layer=True)
+ self.assertEqual(clay.get('object', 'matcap_icon'), '01')
+
+ clay.set('kid', 'matcap_icon', '02')
+ clay.set('extra', 'matcap_icon', '04')
+ self.assertEqual(clay.get('object', 'matcap_icon'), '04')
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_evaluation_render_settings_i.py b/tests/python/view_layer/test_evaluation_render_settings_i.py
new file mode 100644
index 00000000000..e84c360f859
--- /dev/null
+++ b/tests/python/view_layer/test_evaluation_render_settings_i.py
@@ -0,0 +1,35 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_render_settings(self):
+ """
+ See if the depsgraph evaluation is correct
+ """
+ clay = Clay(extra_kid_layer=True)
+ self.assertEqual(clay.get('object', 'matcap_icon'), '01')
+
+ clay.set('mom', 'matcap_icon', '02')
+ self.assertEqual(clay.get('extra', 'matcap_icon'), '01')
+ self.assertEqual(clay.get('object', 'matcap_icon'), '02')
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_evaluation_selectability_a.py b/tests/python/view_layer/test_evaluation_selectability_a.py
new file mode 100644
index 00000000000..bd80f638ef4
--- /dev/null
+++ b/tests/python/view_layer/test_evaluation_selectability_a.py
@@ -0,0 +1,54 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_selectability(self):
+ """
+ See if the depsgraph evaluation is correct
+ """
+ import bpy
+
+ scene = bpy.context.scene
+ window = bpy.context.window
+ cube = bpy.data.objects.new('guinea pig', bpy.data.meshes.new('mesh'))
+
+ layer = scene.view_layers.new('Selectability Test')
+ layer.collections.unlink(layer.collections[0])
+ scene.view_layers.active = layer
+ window.view_layer = layer
+
+ scene_collection_mom = scene.master_collection.collections.new("Mom")
+ scene_collection_kid = scene_collection_mom.collections.new("Kid")
+
+ scene_collection_kid.objects.link(cube)
+
+ layer_collection_mom = layer.collections.link(scene_collection_mom)
+ layer_collection_kid = layer.collections.link(scene_collection_kid)
+
+ layer_collection_mom.enabled = False
+ bpy.context.scene.update() # update depsgraph
+ cube.select_set('SELECT')
+
+ self.assertTrue(cube.visible_get(), "Cube should be visible")
+ self.assertTrue(cube.select_get(), "Cube should be selected")
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_evaluation_selectability_b.py b/tests/python/view_layer/test_evaluation_selectability_b.py
new file mode 100644
index 00000000000..a220d89445e
--- /dev/null
+++ b/tests/python/view_layer/test_evaluation_selectability_b.py
@@ -0,0 +1,56 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_selectability(self):
+ """
+ See if the depsgraph evaluation is correct
+ """
+ import bpy
+
+ scene = bpy.context.scene
+ window = bpy.context.window
+ cube = bpy.data.objects.new('guinea pig', bpy.data.meshes.new('mesh'))
+
+ layer = scene.view_layers.new('Selectability Test')
+ layer.collections.unlink(layer.collections[0])
+ scene.view_layers.active = layer
+ window.view_layer = layer
+
+ scene_collection_mom = scene.master_collection.collections.new("Mom")
+ scene_collection_kid = scene_collection_mom.collections.new("Kid")
+
+ scene_collection_kid.objects.link(cube)
+
+ layer_collection_mom = layer.collections.link(scene_collection_mom)
+ layer_collection_kid = layer.collections.link(scene_collection_kid)
+ bpy.context.scene.update() # update depsgraph
+ cube.select_set('SELECT')
+
+ layer_collection_mom.collections[layer_collection_kid.name].enabled = False
+ layer_collection_kid.enabled = False
+
+ bpy.context.scene.update() # update depsgraph
+ self.assertFalse(cube.visible_get(), "Cube should be invisible")
+ self.assertFalse(cube.select_get(), "Cube should be unselected")
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_evaluation_selectability_c.py b/tests/python/view_layer/test_evaluation_selectability_c.py
new file mode 100644
index 00000000000..e551310cbbe
--- /dev/null
+++ b/tests/python/view_layer/test_evaluation_selectability_c.py
@@ -0,0 +1,54 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_selectability(self):
+ """
+ See if the depsgraph evaluation is correct
+ """
+ import bpy
+
+ scene = bpy.context.scene
+ window = bpy.context.window
+ cube = bpy.data.objects.new('guinea pig', bpy.data.meshes.new('mesh'))
+
+ layer = scene.view_layers.new('Selectability Test')
+ layer.collections.unlink(layer.collections[0])
+ scene.view_layers.active = layer
+ window.view_layer = layer
+
+ scene_collection_mom = scene.master_collection.collections.new("Mom")
+ scene_collection_kid = scene_collection_mom.collections.new("Kid")
+
+ scene_collection_kid.objects.link(cube)
+
+ layer_collection_mom = layer.collections.link(scene_collection_mom)
+ layer_collection_kid = layer.collections.link(scene_collection_kid)
+
+ layer_collection_mom.enabled = True
+ bpy.context.scene.update() # update depsgraph
+ cube.select_set('SELECT')
+
+ self.assertTrue(cube.visible_get(), "Cube should be visible")
+ self.assertTrue(cube.select_get(), "Cube should be selected")
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_evaluation_selectability_d.py b/tests/python/view_layer/test_evaluation_selectability_d.py
new file mode 100644
index 00000000000..76adf12c666
--- /dev/null
+++ b/tests/python/view_layer/test_evaluation_selectability_d.py
@@ -0,0 +1,57 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_selectability(self):
+ """
+ See if the depsgraph evaluation is correct
+ """
+ import bpy
+
+ scene = bpy.context.scene
+ window = bpy.context.window
+ cube = bpy.data.objects.new('guinea pig', bpy.data.meshes.new('mesh'))
+
+ layer = scene.view_layers.new('Selectability Test')
+ layer.collections.unlink(layer.collections[0])
+ scene.view_layers.active = layer
+ window.view_layer = layer
+
+ scene_collection_mom = scene.master_collection.collections.new("Mom")
+ scene_collection_kid = scene_collection_mom.collections.new("Kid")
+
+ scene_collection_kid.objects.link(cube)
+
+ layer_collection_mom = layer.collections.link(scene_collection_mom)
+ layer_collection_kid = layer.collections.link(scene_collection_kid)
+
+ layer_collection_mom.enabled = True
+ bpy.context.scene.update() # update depsgraph
+
+ cube.select_set('SELECT')
+ layer_collection_mom.collections[layer_collection_kid.name].selectable = False
+
+ bpy.context.scene.update() # update depsgraph
+ self.assertTrue(cube.visible_get(), "Cube should be visible")
+ self.assertTrue(cube.select_get(), "Cube should be selected")
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_evaluation_selectability_e.py b/tests/python/view_layer/test_evaluation_selectability_e.py
new file mode 100644
index 00000000000..970c1cdd9d2
--- /dev/null
+++ b/tests/python/view_layer/test_evaluation_selectability_e.py
@@ -0,0 +1,56 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_selectability(self):
+ """
+ See if the depsgraph evaluation is correct
+ """
+ import bpy
+
+ scene = bpy.context.scene
+ window = bpy.context.window
+ cube = bpy.data.objects.new('guinea pig', bpy.data.meshes.new('mesh'))
+
+ layer = scene.view_layers.new('Selectability Test')
+ layer.collections.unlink(layer.collections[0])
+ scene.view_layers.active = layer
+ window.view_layer = layer
+
+ scene_collection_mom = scene.master_collection.collections.new("Mom")
+ scene_collection_kid = scene_collection_mom.collections.new("Kid")
+
+ scene_collection_kid.objects.link(cube)
+
+ layer_collection_mom = layer.collections.link(scene_collection_mom)
+ layer_collection_kid = layer.collections.link(scene_collection_kid)
+
+ layer_collection_mom.enabled = True
+ cube.select_set('SELECT')
+ layer_collection_mom.collections[layer_collection_kid.name].selectable = False
+ layer_collection_kid.enabled = False
+
+ bpy.context.scene.update() # update depsgraph
+ self.assertTrue(cube.visible_get(), "Cube should be visible")
+ self.assertFalse(cube.select_get(), "Cube should be unselected")
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_evaluation_selectability_f.py b/tests/python/view_layer/test_evaluation_selectability_f.py
new file mode 100644
index 00000000000..54a070e4ae9
--- /dev/null
+++ b/tests/python/view_layer/test_evaluation_selectability_f.py
@@ -0,0 +1,43 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_selectability(self):
+ import bpy
+ scene = bpy.context.scene
+
+ cube = bpy.data.objects.new('guinea pig', bpy.data.meshes.new('mesh'))
+ scene_collection = scene.master_collection.collections.new('collection')
+ layer_collection = scene.view_layers.active.collections.link(scene_collection)
+
+ bpy.context.scene.update() # update depsgraph
+
+ scene_collection.objects.link(cube)
+
+ self.assertTrue(layer_collection.enabled)
+ self.assertTrue(layer_collection.selectable)
+
+ bpy.context.scene.update() # update depsgraph
+ cube.select_set(action='SELECT')
+ self.assertTrue(cube.select_get())
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_evaluation_visibility_a.py b/tests/python/view_layer/test_evaluation_visibility_a.py
new file mode 100644
index 00000000000..c1e6a427210
--- /dev/null
+++ b/tests/python/view_layer/test_evaluation_visibility_a.py
@@ -0,0 +1,54 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_visibility(self):
+ """
+ See if the depsgraph evaluation is correct
+ """
+ import bpy
+
+ scene = bpy.context.scene
+ window = bpy.context.window
+ cube = bpy.data.objects.new('guinea pig', bpy.data.meshes.new('mesh'))
+
+ layer = scene.view_layers.new('Visibility Test')
+ layer.collections.unlink(layer.collections[0])
+ scene.view_layers.active = layer
+ window.view_layer = layer
+
+ scene_collection_mom = scene.master_collection.collections.new("Mom")
+ scene_collection_kid = scene.master_collection.collections.new("Kid")
+
+ scene_collection_mom.objects.link(cube)
+ scene_collection_kid.objects.link(cube)
+
+ layer_collection_mom = layer.collections.link(scene_collection_mom)
+ layer_collection_kid = layer.collections.link(scene_collection_kid)
+
+ layer_collection_mom.enabled = False
+ layer_collection_kid.enabled = True
+
+ bpy.context.scene.update() # update depsgraph
+ self.assertTrue(cube.visible_get(), "Object should be visible")
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_evaluation_visibility_b.py b/tests/python/view_layer/test_evaluation_visibility_b.py
new file mode 100644
index 00000000000..a6859ba31ec
--- /dev/null
+++ b/tests/python/view_layer/test_evaluation_visibility_b.py
@@ -0,0 +1,54 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_visibility(self):
+ """
+ See if the depsgraph evaluation is correct
+ """
+ import bpy
+
+ scene = bpy.context.scene
+ window = bpy.context.window
+ cube = bpy.data.objects.new('guinea pig', bpy.data.meshes.new('mesh'))
+
+ layer = scene.view_layers.new('Visibility Test')
+ layer.collections.unlink(layer.collections[0])
+ scene.view_layers.active = layer
+ window.view_layer = layer
+
+ scene_collection_mom = scene.master_collection.collections.new("Mom")
+ scene_collection_kid = scene_collection_mom.collections.new("Kid")
+
+ scene_collection_kid.objects.link(cube)
+
+ layer_collection_mom = layer.collections.link(scene_collection_mom)
+ layer_collection_kid = layer.collections.link(scene_collection_kid)
+
+ layer_collection_mom.enabled = True
+ layer_collection_mom.collections[layer_collection_kid.name].enabled = False
+ layer_collection_kid.enabled = False
+
+ bpy.context.scene.update() # update depsgraph
+ self.assertFalse(cube.visible_get(), "Object should be invisible")
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_evaluation_visibility_c.py b/tests/python/view_layer/test_evaluation_visibility_c.py
new file mode 100644
index 00000000000..8c88a045c99
--- /dev/null
+++ b/tests/python/view_layer/test_evaluation_visibility_c.py
@@ -0,0 +1,54 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_visibility(self):
+ """
+ See if the depsgraph evaluation is correct
+ """
+ import bpy
+
+ scene = bpy.context.scene
+ window = bpy.context.window
+ cube = bpy.data.objects.new('guinea pig', bpy.data.meshes.new('mesh'))
+
+ layer = scene.view_layers.new('Visibility Test')
+ layer.collections.unlink(layer.collections[0])
+ scene.view_layers.active = layer
+ window.view_layer = layer
+
+ scene_collection_mom = scene.master_collection.collections.new("Mom")
+ scene_collection_kid = scene_collection_mom.collections.new("Kid")
+
+ scene_collection_kid.objects.link(cube)
+
+ layer_collection_mom = layer.collections.link(scene_collection_mom)
+ layer_collection_kid = layer.collections.link(scene_collection_kid)
+
+ layer_collection_mom.enabled = True
+ layer_collection_mom.collections[layer_collection_kid.name].enabled = False
+ layer_collection_kid.enabled = True
+
+ bpy.context.scene.update() # update depsgraph
+ self.assertTrue(cube.visible_get(), "Object should be visible")
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_evaluation_visibility_d.py b/tests/python/view_layer/test_evaluation_visibility_d.py
new file mode 100644
index 00000000000..1836fae9802
--- /dev/null
+++ b/tests/python/view_layer/test_evaluation_visibility_d.py
@@ -0,0 +1,51 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_visibility(self):
+ """
+ See if the depsgraph evaluation is correct
+ """
+ import bpy
+
+ scene = bpy.context.scene
+ window = bpy.context.window
+ cube = bpy.data.objects.new('guinea pig', bpy.data.meshes.new('mesh'))
+
+ layer = scene.view_layers.new('Visibility Test')
+ layer.collections.unlink(layer.collections[0])
+ scene.view_layers.active = layer
+ window.view_layer = layer
+
+ scene_collection_mom = scene.master_collection.collections.new("Mom")
+ scene_collection_kid = scene_collection_mom.collections.new("Kid")
+
+ scene_collection_kid.objects.link(cube)
+
+ layer_collection_mom = layer.collections.link(scene_collection_mom)
+ layer_collection_kid = layer.collections.link(scene_collection_kid)
+
+ layer_collection_mom.enabled = True
+ bpy.context.scene.update() # update depsgraph
+ self.assertTrue(cube.visible_get(), "Object should be visible")
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_evaluation_visibility_e.py b/tests/python/view_layer/test_evaluation_visibility_e.py
new file mode 100644
index 00000000000..f05d797ecdc
--- /dev/null
+++ b/tests/python/view_layer/test_evaluation_visibility_e.py
@@ -0,0 +1,55 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_visibility(self):
+ """
+ See if the depsgraph evaluation is correct
+ """
+ import bpy
+
+ scene = bpy.context.scene
+ window = bpy.context.window
+ cube = bpy.data.objects.new('guinea pig', bpy.data.meshes.new('mesh'))
+
+ layer = scene.view_layers.new('Visibility Test')
+ layer.collections.unlink(layer.collections[0])
+ scene.view_layers.active = layer
+ window.view_layer = layer
+
+ scene_collection_mom = scene.master_collection.collections.new("Mom")
+ scene_collection_kid = scene_collection_mom.collections.new("Kid")
+
+ scene_collection_mom.objects.link(cube)
+ scene_collection_kid.objects.link(cube)
+
+ layer_collection_mom = layer.collections.link(scene_collection_mom)
+ layer_collection_kid = layer.collections.link(scene_collection_kid)
+
+ layer_collection_mom.enabled = True
+ layer_collection_kid.enabled = False
+
+ bpy.context.scene.update() # update depsgraph
+ self.assertTrue(cube.visible_get(), "Object should be visible")
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ # XXX, above statement is not true, why skip the first argument?
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)[1:]
+ unittest.main()
diff --git a/tests/python/view_layer/test_evaluation_visibility_f.py b/tests/python/view_layer/test_evaluation_visibility_f.py
new file mode 100644
index 00000000000..9034d0ce6f8
--- /dev/null
+++ b/tests/python/view_layer/test_evaluation_visibility_f.py
@@ -0,0 +1,55 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_visibility(self):
+ """
+ See if the depsgraph evaluation is correct
+ """
+ import bpy
+
+ scene = bpy.context.scene
+ window = bpy.context.window
+ cube = bpy.data.objects.new('guinea pig', bpy.data.meshes.new('mesh'))
+
+ layer = scene.view_layers.new('Visibility Test')
+ layer.collections.unlink(layer.collections[0])
+ scene.view_layers.active = layer
+ window.view_layer = layer
+
+ scene_collection_mom = scene.master_collection.collections.new("Mom")
+ scene_collection_kid = scene_collection_mom.collections.new("Kid")
+
+ scene_collection_mom.objects.link(cube)
+ scene_collection_kid.objects.link(cube)
+
+ layer_collection_mom = layer.collections.link(scene_collection_mom)
+ layer_collection_kid = layer.collections.link(scene_collection_kid)
+
+ layer_collection_mom.enabled = True
+ layer_collection_mom.collections[layer_collection_kid.name].enabled = False
+ layer_collection_kid.enabled = False
+
+ bpy.context.scene.update() # update depsgraph
+ self.assertTrue(cube.visible_get(), "Object should be visible")
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_evaluation_visibility_g.py b/tests/python/view_layer/test_evaluation_visibility_g.py
new file mode 100644
index 00000000000..d2dc7f27e87
--- /dev/null
+++ b/tests/python/view_layer/test_evaluation_visibility_g.py
@@ -0,0 +1,30 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_visibility_empty(self):
+ """
+ See if the depsgraph evaluation is correct
+ """
+ self.do_visibility_object_add('EMPTY')
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_evaluation_visibility_h.py b/tests/python/view_layer/test_evaluation_visibility_h.py
new file mode 100644
index 00000000000..0b1d779c152
--- /dev/null
+++ b/tests/python/view_layer/test_evaluation_visibility_h.py
@@ -0,0 +1,30 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_visibility_cylinder(self):
+ """
+ See if the depsgraph evaluation is correct
+ """
+ self.do_visibility_object_add('CYLINDER')
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_evaluation_visibility_i.py b/tests/python/view_layer/test_evaluation_visibility_i.py
new file mode 100644
index 00000000000..5a292eadd91
--- /dev/null
+++ b/tests/python/view_layer/test_evaluation_visibility_i.py
@@ -0,0 +1,30 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_visibility_torus(self):
+ """
+ See if the depsgraph evaluation is correct
+ """
+ self.do_visibility_object_add('TORUS')
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_evaluation_visibility_j.py b/tests/python/view_layer/test_evaluation_visibility_j.py
new file mode 100644
index 00000000000..53810fe5599
--- /dev/null
+++ b/tests/python/view_layer/test_evaluation_visibility_j.py
@@ -0,0 +1,61 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_visibility_nested(self):
+ """
+ See if the depsgraph evaluation is correct
+ """
+ import bpy
+
+ # delete all initial objects
+ while bpy.data.objects:
+ bpy.data.objects.remove(bpy.data.objects[0])
+
+ # delete all initial collections
+ scene = bpy.context.scene
+ master_collection = scene.master_collection
+ while master_collection.collections:
+ master_collection.collections.remove(master_collection.collections[0])
+
+ collection_parent = master_collection.collections.new('parent')
+ collection_nested = collection_parent.collections.new('child linked')
+ ob = bpy.data.objects.new('An Empty', None)
+ collection_nested.objects.link(ob)
+
+ layer_collection = bpy.context.view_layer.collections.link(master_collection)
+ self.assertTrue(layer_collection.enabled)
+
+ # Update depsgraph.
+ scene.update()
+
+ self.assertTrue(ob.visible_get())
+
+ layer_collection.enabled = False
+ self.assertFalse(layer_collection.enabled)
+
+ # Update depsgraph.
+ scene.update()
+
+ self.assertFalse(ob.visible_get())
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_group_a.py b/tests/python/view_layer/test_group_a.py
new file mode 100644
index 00000000000..6e1b83efbe5
--- /dev/null
+++ b/tests/python/view_layer/test_group_a.py
@@ -0,0 +1,46 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_group_create_basic(self):
+ """
+ See if the creation of new groups is not crashing anything.
+ """
+ import bpy
+ scene = bpy.context.scene
+ layer_collection = bpy.context.layer_collection
+
+ # Cleanup Viewport view layer
+ # technically this shouldn't be needed but
+ # for now we need it because depsgraph build all the view layers
+ # at once.
+
+ while len(scene.view_layers) > 1:
+ scene.view_layers.remove(scene.view_layers[1])
+
+ # create group
+ group = layer_collection.create_group()
+
+ # update depsgraph
+ scene.update()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_group_b.py b/tests/python/view_layer/test_group_b.py
new file mode 100644
index 00000000000..5d3a03b129b
--- /dev/null
+++ b/tests/python/view_layer/test_group_b.py
@@ -0,0 +1,72 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_group_create_basic(self):
+ """
+ See if the creation of new groups is preserving visibility flags
+ from the original collections.
+ """
+ import bpy
+ scene = bpy.context.scene
+
+ # clean slate
+ self.cleanup_tree()
+
+ master_collection = scene.master_collection
+ grandma = master_collection.collections.new('бабушка')
+ mom = grandma.collections.new('матушка')
+
+ child = bpy.data.objects.new("Child", None)
+ mom.objects.link(child)
+
+ grandma_layer_collection = scene.view_layers[0].collections.link(grandma)
+ mom_layer_collection = grandma_layer_collection.collections[0]
+
+ grandma_layer_collection.enabled = True
+ grandma_layer_collection.enabled = True
+ mom_layer_collection.enabled = False
+ mom_layer_collection.selectable = True
+
+ # update depsgraph
+ scene.update()
+
+ # create group
+ group = grandma_layer_collection.create_group()
+
+ # update depsgraph
+ scene.update()
+
+ # compare
+ self.assertEqual(len(group.view_layer.collections), 1)
+ grandma_group_layer = group.view_layer.collections[0]
+
+ self.assertTrue(grandma_group_layer.enabled, True)
+ self.assertTrue(grandma_group_layer.selectable)
+
+ self.assertEqual(len(grandma_group_layer.collections), 1)
+ mom_group_layer = grandma_group_layer.collections[0]
+
+ self.assertFalse(mom_group_layer.enabled)
+ self.assertTrue(mom_group_layer.selectable)
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_group_c.py b/tests/python/view_layer/test_group_c.py
new file mode 100644
index 00000000000..69feab1a56e
--- /dev/null
+++ b/tests/python/view_layer/test_group_c.py
@@ -0,0 +1,56 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_group_create_basic(self):
+ """
+ More advanced creation of group from a collection not directly linked
+ to the scene layer.
+ """
+ import bpy
+ scene = bpy.context.scene
+
+ # clean slate
+ self.cleanup_tree()
+
+ children = [bpy.data.objects.new("Child", None) for i in range(3)]
+ master_collection = scene.master_collection
+
+ grandma_scene_collection = master_collection.collections.new('Grand-Mother')
+ mom_scene_collection = grandma_scene_collection.collections.new('Mother')
+
+ grandma_scene_collection.objects.link(children[0])
+ mom_scene_collection.objects.link(children[1])
+
+ grandma_layer_collection = scene.view_layers[0].collections.link(grandma_scene_collection)
+ mom_layer_collection = grandma_layer_collection.collections[mom_scene_collection.name]
+
+ # update depsgraph
+ scene.update()
+
+ # create group
+ group = mom_layer_collection.create_group()
+
+ # update depsgraph
+ scene.update()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_group_d.py b/tests/python/view_layer/test_group_d.py
new file mode 100644
index 00000000000..6f54ca5340a
--- /dev/null
+++ b/tests/python/view_layer/test_group_d.py
@@ -0,0 +1,76 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_group_write_load(self):
+ """
+ See if saving/loading is working for groups
+ """
+ import bpy
+ scene = bpy.context.scene
+ layer_collection = bpy.context.layer_collection
+
+ while len(scene.view_layers) > 1:
+ scene.view_layers.remove(scene.view_layers[1])
+
+ # create group
+ group = layer_collection.create_group()
+
+ self.assertEqual(1, len(bpy.data.groups))
+ self.assertEqual(1, bpy.data.groups[0].users)
+ self.assertEqual(3, len(bpy.data.groups[0].objects))
+
+ import os
+ import tempfile
+ with tempfile.TemporaryDirectory() as dirpath:
+ filepath = os.path.join(dirpath, 'layers.blend')
+
+ for i in range(3):
+ # save and re-open file
+ bpy.ops.wm.save_mainfile('EXEC_DEFAULT', filepath=filepath)
+ bpy.ops.wm.open_mainfile('EXEC_DEFAULT', filepath=filepath)
+
+ self.assertEqual(1, len(bpy.data.groups))
+ self.assertEqual(1, bpy.data.groups[0].users)
+ self.assertEqual(3, len(bpy.data.groups[0].objects))
+
+
+ # empty the group of objects
+ group = bpy.data.groups[0]
+ while group.objects:
+ group.view_layer.collections[0].collection.objects.unlink(group.objects[0])
+
+ # save and re-open file
+ bpy.ops.wm.save_mainfile('EXEC_DEFAULT', filepath=filepath)
+ bpy.ops.wm.open_mainfile('EXEC_DEFAULT', filepath=filepath)
+
+ self.assertEqual(1, len(bpy.data.groups))
+ self.assertEqual(0, bpy.data.groups[0].users)
+ self.assertEqual(0, len(bpy.data.groups[0].objects))
+
+ # save and re-open file
+ bpy.ops.wm.save_mainfile('EXEC_DEFAULT', filepath=filepath)
+ bpy.ops.wm.open_mainfile('EXEC_DEFAULT', filepath=filepath)
+
+ self.assertEqual(0, len(bpy.data.groups))
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_layer_linking.py b/tests/python/view_layer/test_layer_linking.py
new file mode 100644
index 00000000000..4c66c564d7c
--- /dev/null
+++ b/tests/python/view_layer/test_layer_linking.py
@@ -0,0 +1,109 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def do_layer_linking(self, filepath_json, link_mode):
+ import bpy
+ import os
+ import tempfile
+ import filecmp
+
+ ROOT = self.get_root()
+ with tempfile.TemporaryDirectory() as dirpath:
+ filepath_layers = os.path.join(ROOT, 'layers.blend')
+
+ # open file
+ bpy.ops.wm.open_mainfile('EXEC_DEFAULT', filepath=filepath_layers)
+ self.rename_collections()
+
+ # create sub-collections
+ three_b = bpy.data.objects.get('T.3b')
+ three_c = bpy.data.objects.get('T.3c')
+
+ scene = bpy.context.scene
+
+ subzero = scene.master_collection.collections['1'].collections.new('sub-zero')
+ scorpion = subzero.collections.new('scorpion')
+
+ # test linking sync
+ subzero.objects.link(three_b)
+ scorpion.objects.link(three_c)
+
+ # test unlinking sync
+ layer = scene.view_layers.new('Fresh new Layer')
+
+ if link_mode in {'COLLECTION_LINK', 'COLLECTION_UNLINK'}:
+ layer.collections.link(subzero)
+
+ if link_mode == 'COLLECTION_UNLINK':
+ initial_collection = layer.collections['Master Collection']
+ layer.collections.unlink(initial_collection)
+
+ # save file
+ filepath_nested = os.path.join(dirpath, 'nested.blend')
+ bpy.ops.wm.save_mainfile('EXEC_DEFAULT', filepath=filepath_nested)
+
+ # get the generated json
+ datas = query_scene(filepath_nested, 'Main', (get_scene_collections, get_layers))
+ self.assertTrue(datas, "Data is not valid")
+
+ filepath_nested_json = os.path.join(dirpath, "nested.json")
+ with open(filepath_nested_json, "w") as f:
+ for data in datas:
+ f.write(dump(data))
+
+ self.assertTrue(compare_files(
+ filepath_nested_json,
+ filepath_json,
+ ),
+ "Scene dump files differ")
+
+ def test_syncing_layer_new(self):
+ """
+ See if the creation of new layers is going well
+ """
+ import os
+ ROOT = self.get_root()
+ filepath_json = os.path.join(ROOT, 'layers_new_layer.json')
+ self.do_layer_linking(filepath_json, 'LAYER_NEW')
+
+ def test_syncing_layer_collection_link(self):
+ """
+ See if the creation of new layers is going well
+ And linking a new scene collection in the layer works
+ """
+ import os
+ ROOT = self.get_root()
+ filepath_json = os.path.join(ROOT, 'layers_layer_collection_link.json')
+ self.do_layer_linking(filepath_json, 'COLLECTION_LINK')
+
+ def test_syncing_layer_collection_unlink(self):
+ """
+ See if the creation of new layers is going well
+ And unlinking the origin scene collection works
+ """
+ import os
+ ROOT = self.get_root()
+ filepath_json = os.path.join(ROOT, 'layers_layer_collection_unlink.json')
+ self.do_layer_linking(filepath_json, 'COLLECTION_UNLINK')
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_layer_syncing.py b/tests/python/view_layer/test_layer_syncing.py
new file mode 100644
index 00000000000..d8175c4850f
--- /dev/null
+++ b/tests/python/view_layer/test_layer_syncing.py
@@ -0,0 +1,113 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def do_syncing(self, filepath_json, unlink_mode):
+ import bpy
+ import os
+ import tempfile
+ import filecmp
+
+ ROOT = self.get_root()
+ with tempfile.TemporaryDirectory() as dirpath:
+ filepath_layers = os.path.join(ROOT, 'layers.blend')
+
+ # open file
+ bpy.ops.wm.open_mainfile('EXEC_DEFAULT', filepath=filepath_layers)
+ self.rename_collections()
+
+ # create sub-collections
+ three_b = bpy.data.objects.get('T.3b')
+ three_c = bpy.data.objects.get('T.3c')
+ three_d = bpy.data.objects.get('T.3d')
+
+ scene = bpy.context.scene
+
+ subzero = scene.master_collection.collections['1'].collections.new('sub-zero')
+ scorpion = scene.master_collection.collections['1'].collections.new('scorpion')
+
+ # test linking sync
+ subzero.objects.link(three_b)
+ scorpion.objects.link(three_c)
+
+ # test unlinking sync
+ if unlink_mode in {'OBJECT', 'COLLECTION'}:
+ scorpion.objects.link(three_d)
+ scorpion.objects.unlink(three_d)
+
+ if unlink_mode == 'COLLECTION':
+ scorpion.objects.link(three_d)
+ scene.master_collection.collections['1'].collections.remove(subzero)
+ scene.master_collection.collections['1'].collections.remove(scorpion)
+
+ # save file
+ filepath_nested = os.path.join(dirpath, 'nested.blend')
+ bpy.ops.wm.save_mainfile('EXEC_DEFAULT', filepath=filepath_nested)
+
+ # get the generated json
+ datas = query_scene(filepath_nested, 'Main', (get_scene_collections, get_layers))
+ self.assertTrue(datas, "Data is not valid")
+
+ filepath_nested_json = os.path.join(dirpath, "nested.json")
+ with open(filepath_nested_json, "w") as f:
+ for data in datas:
+ f.write(dump(data))
+
+ self.assertTrue(compare_files(
+ filepath_nested_json,
+ filepath_json,
+ ),
+ "Scene dump files differ")
+
+ def test_syncing_link(self):
+ """
+ See if scene collections and layer collections are in sync
+ when we create new subcollections and link new objects
+ """
+ import os
+ ROOT = self.get_root()
+ filepath_json = os.path.join(ROOT, 'layers_nested.json')
+ self.do_syncing(filepath_json, 'NONE')
+
+ def test_syncing_unlink_object(self):
+ """
+ See if scene collections and layer collections are in sync
+ when we create new subcollections, link new objects and unlink
+ some.
+ """
+ import os
+ ROOT = self.get_root()
+ filepath_json = os.path.join(ROOT, 'layers_nested.json')
+ self.do_syncing(filepath_json, 'OBJECT')
+
+ def test_syncing_unlink_collection(self):
+ """
+ See if scene collections and layer collections are in sync
+ when we create new subcollections, link new objects and unlink full collections
+ some.
+ """
+ import os
+ ROOT = self.get_root()
+ filepath_json = os.path.join(ROOT, 'layers.json')
+ self.do_syncing(filepath_json, 'COLLECTION')
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_above_below_layer_collection_a.py b/tests/python/view_layer/test_move_above_below_layer_collection_a.py
new file mode 100644
index 00000000000..7c6c1fccfa9
--- /dev/null
+++ b/tests/python/view_layer/test_move_above_below_layer_collection_a.py
@@ -0,0 +1,48 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveLayerCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_scene_tree_map()
+
+ def get_reference_layers_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_layers_tree_map()
+
+ def test_layer_collection_move_a(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+ self.assertFalse(self.move_below('Layer 1.3', 'Layer 1.C'))
+ self.compare_tree_maps()
+
+ def test_layer_collection_move_b(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+ self.assertFalse(self.move_above('Layer 1.C', 'Layer 1.3'))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_above_below_layer_collection_b.py b/tests/python/view_layer/test_move_above_below_layer_collection_b.py
new file mode 100644
index 00000000000..671978a27f3
--- /dev/null
+++ b/tests/python/view_layer/test_move_above_below_layer_collection_b.py
@@ -0,0 +1,48 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveLayerCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_scene_tree_map()
+
+ def get_reference_layers_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_layers_tree_map()
+
+ def test_layer_collection_move_a(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+ self.assertFalse(self.move_below('Layer 1.3.cat', 'Layer 1.3.dog'))
+ self.compare_tree_maps()
+
+ def test_layer_collection_move_b(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+ self.assertFalse(self.move_above('Layer 1.3.dog', 'Layer 1.3.cat'))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_above_below_layer_collection_c.py b/tests/python/view_layer/test_move_above_below_layer_collection_c.py
new file mode 100644
index 00000000000..671978a27f3
--- /dev/null
+++ b/tests/python/view_layer/test_move_above_below_layer_collection_c.py
@@ -0,0 +1,48 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveLayerCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_scene_tree_map()
+
+ def get_reference_layers_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_layers_tree_map()
+
+ def test_layer_collection_move_a(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+ self.assertFalse(self.move_below('Layer 1.3.cat', 'Layer 1.3.dog'))
+ self.compare_tree_maps()
+
+ def test_layer_collection_move_b(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+ self.assertFalse(self.move_above('Layer 1.3.dog', 'Layer 1.3.cat'))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_above_below_layer_collection_d.py b/tests/python/view_layer/test_move_above_below_layer_collection_d.py
new file mode 100644
index 00000000000..b13e87985ee
--- /dev/null
+++ b/tests/python/view_layer/test_move_above_below_layer_collection_d.py
@@ -0,0 +1,48 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveLayerCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_scene_tree_map()
+
+ def get_reference_layers_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_layers_tree_map()
+
+ def test_layer_collection_move_a(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+ self.assertFalse(self.move_above('Layer 2.3.dog', 'Layer 1.C.2'))
+ self.compare_tree_maps()
+
+ def test_layer_collection_move_b(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+ self.assertFalse(self.move_below('Layer 1.C.2', 'Layer 2.3.dog'))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_above_below_layer_collection_e.py b/tests/python/view_layer/test_move_above_below_layer_collection_e.py
new file mode 100644
index 00000000000..a9b0181083e
--- /dev/null
+++ b/tests/python/view_layer/test_move_above_below_layer_collection_e.py
@@ -0,0 +1,40 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveLayerCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_scene_tree_map()
+
+ def get_reference_layers_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_layers_tree_map()
+
+ def test_layer_collection_move(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+ self.assertFalse(self.move_below('Layer 1.Master Collection', 'Layer 1.C.1'))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_above_below_layer_collection_f.py b/tests/python/view_layer/test_move_above_below_layer_collection_f.py
new file mode 100644
index 00000000000..77d65ef8671
--- /dev/null
+++ b/tests/python/view_layer/test_move_above_below_layer_collection_f.py
@@ -0,0 +1,100 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveLayerCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ reference_tree_map = [
+ ['A', [
+ ['i', None],
+ ['ii', None],
+ ['iii', None],
+ ]],
+ ['B', None],
+ ['C', [
+ ['1', None],
+ ['3', [
+ ['dog', None],
+ ['cat', None],
+ ]],
+ ['2', None],
+ ]],
+ ]
+ return reference_tree_map
+
+ def get_reference_layers_tree_map(self):
+ reference_layers_map = [
+ ['Layer 1', [
+ 'Master Collection',
+ 'C',
+ '3',
+ ]],
+ ['Layer 2', [
+ 'C',
+ 'dog',
+ 'cat',
+ ]],
+ ]
+ return reference_layers_map
+
+ def test_layer_collection_move_a(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+ self.assertTrue(self.move_below('Layer 2.3', 'Layer 2.C.1'))
+ self.compare_tree_maps()
+
+ def test_layer_collection_move_b(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+ self.assertTrue(self.move_above('Layer 2.3', 'Layer 2.C.2'))
+ self.compare_tree_maps()
+
+ def test_layer_collection_move_c(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+
+ # collection that will be moved
+ collection_original = self.parse_move('Layer 2.3')
+ collection_original.enabled = True
+ collection_original.selectable = False
+
+ # collection that will disappear
+ collection_old = self.parse_move('Layer 2.C.3')
+ collection_old.enabled = False
+ collection_old.selectable = True
+
+ # move
+ self.assertTrue(self.move_below('Layer 2.3', 'Layer 2.C.1'))
+ self.compare_tree_maps()
+
+ # we expect the settings to be carried along from the
+ # original layer collection
+ collection_new = self.parse_move('Layer 2.C.3')
+ self.assertEqual(collection_new.enabled, True)
+ self.assertEqual(collection_new.selectable, False)
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_above_below_layer_collection_g.py b/tests/python/view_layer/test_move_above_below_layer_collection_g.py
new file mode 100644
index 00000000000..16cd628edfc
--- /dev/null
+++ b/tests/python/view_layer/test_move_above_below_layer_collection_g.py
@@ -0,0 +1,81 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveLayerCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ reference_tree_map = [
+ ['A', [
+ ['i', None],
+ ['ii', None],
+ ['iii', None],
+ ]],
+ ['B', None],
+ ['C', [
+ ['1', None],
+ ['2', None],
+ ['3', [
+ ['cat', None],
+ ['dog', None],
+ ]],
+ ]],
+ ]
+ return reference_tree_map
+
+ def get_reference_layers_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_layers_tree_map()
+
+ def test_layer_collection_move_a(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+ self.assertTrue(self.move_above('Layer 2.C.3.cat', 'Layer 2.3.dog'))
+ self.compare_tree_maps()
+
+ def test_layer_collection_move_b(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+
+ # collection that will be moved
+ collection_original = self.parse_move('Layer 2.C.3.cat')
+ collection_original.enabled = True
+ collection_original.selectable = False
+
+ # collection that will disappear
+ collection_old = self.parse_move('Layer 2.3.cat')
+ collection_old.enabled = False
+ collection_old.selectable = True
+
+ # move
+ self.assertTrue(self.move_above('Layer 2.C.3.cat', 'Layer 2.3.dog'))
+ self.compare_tree_maps()
+
+ # we expect the settings to be carried along from the
+ # original layer collection
+ collection_new = self.parse_move('Layer 2.3.cat')
+ self.assertEqual(collection_new.enabled, True)
+ self.assertEqual(collection_new.selectable, False)
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_above_below_layer_collection_h.py b/tests/python/view_layer/test_move_above_below_layer_collection_h.py
new file mode 100644
index 00000000000..4fe2c857e50
--- /dev/null
+++ b/tests/python/view_layer/test_move_above_below_layer_collection_h.py
@@ -0,0 +1,66 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveLayerCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_scene_tree_map()
+
+ def get_reference_layers_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_layers_tree_map()
+
+ def test_layer_collection_move_a(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+ self.assertTrue(self.move_below('Layer 2.C.3.cat', 'Layer 2.3.dog'))
+ self.compare_tree_maps()
+
+ def test_layer_collection_move_b(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+
+ # collection that will be moved
+ collection_original = self.parse_move('Layer 2.C.3.cat')
+ collection_original.enabled = True
+ collection_original.selectable = False
+
+ # collection that will disappear
+ collection_old = self.parse_move('Layer 2.3.cat')
+ collection_old.enabled = False
+ collection_old.selectable = True
+
+ # move
+ self.assertTrue(self.move_below('Layer 2.C.3.cat', 'Layer 2.3.dog'))
+ self.compare_tree_maps()
+
+ # we expect the settings to be carried along from the
+ # original layer collection
+ collection_new = self.parse_move('Layer 2.3.cat')
+ self.assertEqual(collection_new.enabled, True)
+ self.assertEqual(collection_new.selectable, False)
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_above_below_layer_collection_i.py b/tests/python/view_layer/test_move_above_below_layer_collection_i.py
new file mode 100644
index 00000000000..0134d11adcd
--- /dev/null
+++ b/tests/python/view_layer/test_move_above_below_layer_collection_i.py
@@ -0,0 +1,73 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveLayerCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_scene_tree_map()
+
+ def get_reference_layers_tree_map(self):
+ reference_layers_map = [
+ ['Layer 1', [
+ 'Master Collection',
+ 'C',
+ '3',
+ ]],
+ ['Layer 2', [
+ '3',
+ 'C',
+ 'dog',
+ 'cat',
+ ]],
+ ]
+ return reference_layers_map
+
+ def test_layer_collection_move_a(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+ self.assertTrue(self.move_below('Layer 2.C', 'Layer 2.3'))
+ self.compare_tree_maps()
+
+ def test_layer_collection_move_b(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+
+ # collection that will be moved
+ collection_original = self.parse_move('Layer 2.C')
+ collection_original.enabled = True
+ collection_original.selectable = False
+
+ # move
+ self.assertTrue(self.move_below('Layer 2.C', 'Layer 2.3'))
+ self.compare_tree_maps()
+
+ # we expect the settings to be carried along from the
+ # original layer collection
+ collection_new = self.parse_move('Layer 2.C')
+ self.assertEqual(collection_new.enabled, True)
+ self.assertEqual(collection_new.selectable, False)
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_above_below_layer_collection_j.py b/tests/python/view_layer/test_move_above_below_layer_collection_j.py
new file mode 100644
index 00000000000..cb56ca0b963
--- /dev/null
+++ b/tests/python/view_layer/test_move_above_below_layer_collection_j.py
@@ -0,0 +1,63 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveLayerCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_scene_tree_map()
+
+ def get_reference_layers_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_layers_tree_map()
+
+ def test_layer_collection_move_a(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+ self.assertTrue(self.move_below('Layer 1.3.dog', 'Layer 1.3.cat'))
+ self.assertTrue(self.move_above('Layer 1.3.dog', 'Layer 1.3.cat'))
+ self.compare_tree_maps()
+
+ def test_layer_collection_move_b(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+
+ # collection that will be moved
+ collection_original = self.parse_move('Layer 1.3.dog')
+ collection_original.enabled = True
+ collection_original.selectable = False
+
+ # move
+ self.assertTrue(self.move_below('Layer 1.3.dog', 'Layer 1.3.cat'))
+ self.assertTrue(self.move_above('Layer 1.3.dog', 'Layer 1.3.cat'))
+ self.compare_tree_maps()
+
+ # we expect the settings to be carried along from the
+ # original layer collection
+ collection_new = self.parse_move('Layer 1.3.dog')
+ self.assertEqual(collection_new.enabled, True)
+ self.assertEqual(collection_new.selectable, False)
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_above_below_layer_collection_k.py b/tests/python/view_layer/test_move_above_below_layer_collection_k.py
new file mode 100644
index 00000000000..f6d442619f5
--- /dev/null
+++ b/tests/python/view_layer/test_move_above_below_layer_collection_k.py
@@ -0,0 +1,40 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveLayerCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_scene_tree_map()
+
+ def get_reference_layers_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_layers_tree_map()
+
+ def test_layer_collection_move(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+ self.assertFalse(self.move_below('Layer 2.C.2', 'Layer 2.3'))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_above_below_layer_collection_l.py b/tests/python/view_layer/test_move_above_below_layer_collection_l.py
new file mode 100644
index 00000000000..2bc1054ec7e
--- /dev/null
+++ b/tests/python/view_layer/test_move_above_below_layer_collection_l.py
@@ -0,0 +1,60 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveLayerCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_scene_tree_map()
+
+ def get_reference_layers_tree_map(self):
+ reference_layers_map = [
+ ['Layer 1', [
+ 'Master Collection',
+ 'C',
+ '3',
+ ]],
+ ['Layer 2', [
+ 'C',
+ 'cat',
+ '3',
+ 'dog',
+ ]],
+ ]
+ return reference_layers_map
+
+ def test_layer_collection_move_a(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+ self.assertTrue(self.move_below('Layer 2.cat', 'Layer 2.C'))
+ self.compare_tree_maps()
+
+ def test_layer_collection_move_b(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+ self.assertTrue(self.move_above('Layer 2.cat', 'Layer 2.3'))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_above_below_scene_collection_a.py b/tests/python/view_layer/test_move_above_below_scene_collection_a.py
new file mode 100644
index 00000000000..3e45102e0b2
--- /dev/null
+++ b/tests/python/view_layer/test_move_above_below_scene_collection_a.py
@@ -0,0 +1,80 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ reference_tree_map = [
+ ['A', [
+ ['i', None],
+ ['ii', None],
+ ['iii', None],
+ ]],
+ ['B', None],
+ ['C', [
+ ['1', None],
+ ['2', None],
+ ['3', [
+ ['dog', None],
+ ['cat', None],
+ ]],
+ ]],
+ ]
+ return reference_tree_map
+
+ def test_scene_collection_move_a(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['cat'].move_above(tree['dog']))
+ self.assertTrue(tree['dog'].move_above(tree['cat']))
+ self.compare_tree_maps()
+
+ def test_scene_collection_move_b(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['dog'].move_below(tree['cat']))
+ self.assertTrue(tree['cat'].move_below(tree['dog']))
+ self.compare_tree_maps()
+
+ def test_scene_collection_move_c(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['dog'].move_below(tree['cat']))
+ self.assertTrue(tree['dog'].move_above(tree['cat']))
+ self.compare_tree_maps()
+
+ def test_scene_collection_move_d(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['cat'].move_above(tree['dog']))
+ self.assertTrue(tree['cat'].move_below(tree['dog']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_above_below_scene_collection_b.py b/tests/python/view_layer/test_move_above_below_scene_collection_b.py
new file mode 100644
index 00000000000..83980705846
--- /dev/null
+++ b/tests/python/view_layer/test_move_above_below_scene_collection_b.py
@@ -0,0 +1,69 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ reference_tree_map = [
+ ['A', [
+ ['i', None],
+ ['ii', None],
+ ['iii', None],
+ ]],
+ ['B', None],
+ ['C', [
+ ['3', [
+ ['dog', None],
+ ['cat', None],
+ ]],
+ ['1', None],
+ ['2', None],
+ ]],
+ ]
+ return reference_tree_map
+
+ def test_scene_collection_move_a(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['3'].move_above(tree['1']))
+ self.compare_tree_maps()
+
+ def test_scene_collection_move_b(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['1'].move_below(tree['3']))
+ self.assertTrue(tree['2'].move_below(tree['1']))
+ self.compare_tree_maps()
+
+ def test_scene_collection_move_c(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['3'].move_above(tree['2']))
+ self.assertTrue(tree['1'].move_above(tree['2']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_above_below_scene_collection_c.py b/tests/python/view_layer/test_move_above_below_scene_collection_c.py
new file mode 100644
index 00000000000..cceb2bb235b
--- /dev/null
+++ b/tests/python/view_layer/test_move_above_below_scene_collection_c.py
@@ -0,0 +1,51 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ reference_tree_map = [
+ ['A', [
+ ['i', None],
+ ['ii', None],
+ ['3', [
+ ['dog', None],
+ ['cat', None],
+ ]],
+ ['iii', None],
+ ]],
+ ['B', None],
+ ['C', [
+ ['1', None],
+ ['2', None],
+ ]],
+ ]
+ return reference_tree_map
+
+ def test_scene_collection_move(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['3'].move_below(tree['ii']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_above_below_scene_collection_d.py b/tests/python/view_layer/test_move_above_below_scene_collection_d.py
new file mode 100644
index 00000000000..5917e9ceb6c
--- /dev/null
+++ b/tests/python/view_layer/test_move_above_below_scene_collection_d.py
@@ -0,0 +1,60 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ reference_tree_map = [
+ ['A', [
+ ['i', None],
+ ['ii', None],
+ ['iii', None],
+ ]],
+ ['C', [
+ ['1', None],
+ ['2', None],
+ ['3', [
+ ['dog', None],
+ ['B', None],
+ ['cat', None],
+ ]],
+ ]],
+ ]
+ return reference_tree_map
+
+ def test_scene_collection_move_a(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['B'].move_above(tree['cat']))
+ self.compare_tree_maps()
+
+ def test_scene_collection_move_b(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['B'].move_below(tree['dog']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_above_below_scene_collection_e.py b/tests/python/view_layer/test_move_above_below_scene_collection_e.py
new file mode 100644
index 00000000000..12778ff9131
--- /dev/null
+++ b/tests/python/view_layer/test_move_above_below_scene_collection_e.py
@@ -0,0 +1,60 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ reference_tree_map = [
+ ['A', [
+ ['i', None],
+ ['ii', None],
+ ]],
+ ['B', None],
+ ['C', [
+ ['1', None],
+ ['2', None],
+ ['3', [
+ ['dog', None],
+ ['iii', None],
+ ['cat', None],
+ ]],
+ ]],
+ ]
+ return reference_tree_map
+
+ def test_scene_collection_move_a(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['iii'].move_below(tree['dog']))
+ self.compare_tree_maps()
+
+ def test_scene_collection_move_b(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['iii'].move_above(tree['cat']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_above_below_scene_collection_f.py b/tests/python/view_layer/test_move_above_below_scene_collection_f.py
new file mode 100644
index 00000000000..b9d5e8eff24
--- /dev/null
+++ b/tests/python/view_layer/test_move_above_below_scene_collection_f.py
@@ -0,0 +1,51 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ reference_tree_map = [
+ ['B', None],
+ ['C', [
+ ['1', None],
+ ['2', None],
+ ['3', [
+ ['A', [
+ ['i', None],
+ ['ii', None],
+ ['iii', None],
+ ]],
+ ['dog', None],
+ ['cat', None],
+ ]],
+ ]],
+ ]
+ return reference_tree_map
+
+ def test_scene_collection_move(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['A'].move_above(tree['dog']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_above_below_scene_collection_g.py b/tests/python/view_layer/test_move_above_below_scene_collection_g.py
new file mode 100644
index 00000000000..39848103ca2
--- /dev/null
+++ b/tests/python/view_layer/test_move_above_below_scene_collection_g.py
@@ -0,0 +1,44 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_scene_tree_map()
+
+ def test_scene_collection_move_a(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertFalse(tree['dog'].move_above(tree['cat']))
+ self.compare_tree_maps()
+
+ def test_scene_collection_move_b(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertFalse(tree['cat'].move_below(tree['dog']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_above_below_scene_collection_h.py b/tests/python/view_layer/test_move_above_below_scene_collection_h.py
new file mode 100644
index 00000000000..af2f54f3db1
--- /dev/null
+++ b/tests/python/view_layer/test_move_above_below_scene_collection_h.py
@@ -0,0 +1,84 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_scene_tree_map()
+
+ def test_scene_collection_move_a(self):
+ """
+ Test outliner operations
+ """
+ import bpy
+ master_collection = bpy.context.scene.master_collection
+
+ tree = self.setup_tree()
+ for collection in tree.values():
+ # can't move into master_collection anywhere
+ self.assertFalse(master_collection.move_above(collection))
+
+ self.compare_tree_maps()
+
+ def test_scene_collection_move_b(self):
+ """
+ Test outliner operations
+ """
+ import bpy
+ master_collection = bpy.context.scene.master_collection
+
+ tree = self.setup_tree()
+ for collection in tree.values():
+ # can't move into master_collection anywhere
+ self.assertFalse(master_collection.move_below(collection))
+
+ self.compare_tree_maps()
+
+ def test_scene_collection_move_c(self):
+ """
+ Test outliner operations
+ """
+ import bpy
+ master_collection = bpy.context.scene.master_collection
+
+ tree = self.setup_tree()
+ for collection in tree.values():
+ # can't move into master_collection anywhere
+ self.assertFalse(collection.move_above(master_collection))
+
+ self.compare_tree_maps()
+
+ def test_scene_collection_move_d(self):
+ """
+ Test outliner operations
+ """
+ import bpy
+ master_collection = bpy.context.scene.master_collection
+
+ tree = self.setup_tree()
+ for collection in tree.values():
+ # can't move into master_collection anywhere
+ self.assertFalse(collection.move_below(master_collection))
+
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_above_below_scene_collection_i.py b/tests/python/view_layer/test_move_above_below_scene_collection_i.py
new file mode 100644
index 00000000000..a6b3cb568c9
--- /dev/null
+++ b/tests/python/view_layer/test_move_above_below_scene_collection_i.py
@@ -0,0 +1,60 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_scene_tree_map()
+
+ def test_scene_collection_move_a(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertFalse(tree['C'].move_above(tree['2']))
+ self.compare_tree_maps()
+
+ def test_scene_collection_move_b(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertFalse(tree['C'].move_below(tree['2']))
+ self.compare_tree_maps()
+
+ def test_scene_collection_move_c(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertFalse(tree['C'].move_above(tree['cat']))
+ self.compare_tree_maps()
+
+ def test_scene_collection_move_d(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertFalse(tree['C'].move_below(tree['cat']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_above_below_scene_collection_sync_a.py b/tests/python/view_layer/test_move_above_below_scene_collection_sync_a.py
new file mode 100644
index 00000000000..d36930dcbc5
--- /dev/null
+++ b/tests/python/view_layer/test_move_above_below_scene_collection_sync_a.py
@@ -0,0 +1,80 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionSyncTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ reference_tree_map = [
+ ['A', [
+ ['i', None],
+ ['ii', None],
+ ['iii', None],
+ ]],
+ ['B', None],
+ ['C', [
+ ['1', None],
+ ['2', None],
+ ['3', [
+ ['dog', None],
+ ['cat', None],
+ ]],
+ ]],
+ ]
+ return reference_tree_map
+
+ def test_scene_collection_move_a(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['cat'].move_above(tree['dog']))
+ self.assertTrue(tree['dog'].move_above(tree['cat']))
+ self.compare_tree_maps()
+
+ def test_scene_collection_move_b(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['dog'].move_below(tree['cat']))
+ self.assertTrue(tree['cat'].move_below(tree['dog']))
+ self.compare_tree_maps()
+
+ def test_scene_collection_move_c(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['dog'].move_below(tree['cat']))
+ self.assertTrue(tree['dog'].move_above(tree['cat']))
+ self.compare_tree_maps()
+
+ def test_scene_collection_move_d(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['cat'].move_above(tree['dog']))
+ self.assertTrue(tree['cat'].move_below(tree['dog']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_above_below_scene_collection_sync_b.py b/tests/python/view_layer/test_move_above_below_scene_collection_sync_b.py
new file mode 100644
index 00000000000..79718e1168a
--- /dev/null
+++ b/tests/python/view_layer/test_move_above_below_scene_collection_sync_b.py
@@ -0,0 +1,69 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionSyncTesting):
+ def get_reference_scene_tree_map(self):
+ reference_tree_map = [
+ ['A', [
+ ['i', None],
+ ['ii', None],
+ ['iii', None],
+ ]],
+ ['B', None],
+ ['C', [
+ ['3', [
+ ['dog', None],
+ ['cat', None],
+ ]],
+ ['1', None],
+ ['2', None],
+ ]],
+ ]
+ return reference_tree_map
+
+ def test_scene_collection_move_a(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['3'].move_above(tree['1']))
+ self.compare_tree_maps()
+
+ def test_scene_collection_move_b(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['1'].move_below(tree['3']))
+ self.assertTrue(tree['2'].move_below(tree['1']))
+ self.compare_tree_maps()
+
+ def test_scene_collection_move_c(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['3'].move_above(tree['2']))
+ self.assertTrue(tree['1'].move_above(tree['2']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_above_below_scene_collection_sync_c.py b/tests/python/view_layer/test_move_above_below_scene_collection_sync_c.py
new file mode 100644
index 00000000000..ef23b722b8b
--- /dev/null
+++ b/tests/python/view_layer/test_move_above_below_scene_collection_sync_c.py
@@ -0,0 +1,51 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionSyncTesting):
+ def get_reference_scene_tree_map(self):
+ reference_tree_map = [
+ ['A', [
+ ['i', None],
+ ['ii', None],
+ ['3', [
+ ['dog', None],
+ ['cat', None],
+ ]],
+ ['iii', None],
+ ]],
+ ['B', None],
+ ['C', [
+ ['1', None],
+ ['2', None],
+ ]],
+ ]
+ return reference_tree_map
+
+ def test_scene_collection_move(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['3'].move_below(tree['ii']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_above_below_scene_collection_sync_d.py b/tests/python/view_layer/test_move_above_below_scene_collection_sync_d.py
new file mode 100644
index 00000000000..05c3bcdbcbb
--- /dev/null
+++ b/tests/python/view_layer/test_move_above_below_scene_collection_sync_d.py
@@ -0,0 +1,60 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionSyncTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ reference_tree_map = [
+ ['A', [
+ ['i', None],
+ ['ii', None],
+ ['iii', None],
+ ]],
+ ['C', [
+ ['1', None],
+ ['2', None],
+ ['3', [
+ ['dog', None],
+ ['B', None],
+ ['cat', None],
+ ]],
+ ]],
+ ]
+ return reference_tree_map
+
+ def test_scene_collection_move_a(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['B'].move_above(tree['cat']))
+ self.compare_tree_maps()
+
+ def test_scene_collection_move_b(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['B'].move_below(tree['dog']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_above_below_scene_collection_sync_e.py b/tests/python/view_layer/test_move_above_below_scene_collection_sync_e.py
new file mode 100644
index 00000000000..ebab970ba19
--- /dev/null
+++ b/tests/python/view_layer/test_move_above_below_scene_collection_sync_e.py
@@ -0,0 +1,60 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionSyncTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ reference_tree_map = [
+ ['A', [
+ ['i', None],
+ ['ii', None],
+ ]],
+ ['B', None],
+ ['C', [
+ ['1', None],
+ ['2', None],
+ ['3', [
+ ['dog', None],
+ ['iii', None],
+ ['cat', None],
+ ]],
+ ]],
+ ]
+ return reference_tree_map
+
+ def test_scene_collection_move_a(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['iii'].move_below(tree['dog']))
+ self.compare_tree_maps()
+
+ def test_scene_collection_move_b(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['iii'].move_above(tree['cat']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_above_below_scene_collection_sync_f.py b/tests/python/view_layer/test_move_above_below_scene_collection_sync_f.py
new file mode 100644
index 00000000000..7e4f0bc4a9c
--- /dev/null
+++ b/tests/python/view_layer/test_move_above_below_scene_collection_sync_f.py
@@ -0,0 +1,51 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionSyncTesting):
+ def get_reference_scene_tree_map(self):
+ reference_tree_map = [
+ ['B', None],
+ ['C', [
+ ['1', None],
+ ['2', None],
+ ['3', [
+ ['A', [
+ ['i', None],
+ ['ii', None],
+ ['iii', None],
+ ]],
+ ['dog', None],
+ ['cat', None],
+ ]],
+ ]],
+ ]
+ return reference_tree_map
+
+ def test_scene_collection_move(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['A'].move_above(tree['dog']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_above_below_scene_collection_sync_g.py b/tests/python/view_layer/test_move_above_below_scene_collection_sync_g.py
new file mode 100644
index 00000000000..8c64dd6f32d
--- /dev/null
+++ b/tests/python/view_layer/test_move_above_below_scene_collection_sync_g.py
@@ -0,0 +1,44 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionSyncTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_scene_tree_map()
+
+ def test_scene_collection_move_a(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertFalse(tree['dog'].move_above(tree['cat']))
+ self.compare_tree_maps()
+
+ def test_scene_collection_move_b(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertFalse(tree['cat'].move_below(tree['dog']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_above_below_scene_collection_sync_h.py b/tests/python/view_layer/test_move_above_below_scene_collection_sync_h.py
new file mode 100644
index 00000000000..dd0fcc1f732
--- /dev/null
+++ b/tests/python/view_layer/test_move_above_below_scene_collection_sync_h.py
@@ -0,0 +1,84 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionSyncTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_scene_tree_map()
+
+ def test_scene_collection_move_a(self):
+ """
+ Test outliner operations
+ """
+ import bpy
+ master_collection = bpy.context.scene.master_collection
+
+ tree = self.setup_tree()
+ for collection in tree.values():
+ # can't move into master_collection anywhere
+ self.assertFalse(master_collection.move_above(collection))
+
+ self.compare_tree_maps()
+
+ def test_scene_collection_move_b(self):
+ """
+ Test outliner operations
+ """
+ import bpy
+ master_collection = bpy.context.scene.master_collection
+
+ tree = self.setup_tree()
+ for collection in tree.values():
+ # can't move into master_collection anywhere
+ self.assertFalse(master_collection.move_below(collection))
+
+ self.compare_tree_maps()
+
+ def test_scene_collection_move_c(self):
+ """
+ Test outliner operations
+ """
+ import bpy
+ master_collection = bpy.context.scene.master_collection
+
+ tree = self.setup_tree()
+ for collection in tree.values():
+ # can't move into master_collection anywhere
+ self.assertFalse(collection.move_above(master_collection))
+
+ self.compare_tree_maps()
+
+ def test_scene_collection_move_d(self):
+ """
+ Test outliner operations
+ """
+ import bpy
+ master_collection = bpy.context.scene.master_collection
+
+ tree = self.setup_tree()
+ for collection in tree.values():
+ # can't move into master_collection anywhere
+ self.assertFalse(collection.move_below(master_collection))
+
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_above_below_scene_collection_sync_i.py b/tests/python/view_layer/test_move_above_below_scene_collection_sync_i.py
new file mode 100644
index 00000000000..cdd43f5b8df
--- /dev/null
+++ b/tests/python/view_layer/test_move_above_below_scene_collection_sync_i.py
@@ -0,0 +1,60 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionSyncTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_scene_tree_map()
+
+ def test_scene_collection_move_a(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertFalse(tree['C'].move_above(tree['2']))
+ self.compare_tree_maps()
+
+ def test_scene_collection_move_b(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertFalse(tree['C'].move_below(tree['2']))
+ self.compare_tree_maps()
+
+ def test_scene_collection_move_c(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertFalse(tree['C'].move_above(tree['cat']))
+ self.compare_tree_maps()
+
+ def test_scene_collection_move_d(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertFalse(tree['C'].move_below(tree['cat']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_into_layer_collection_a.py b/tests/python/view_layer/test_move_into_layer_collection_a.py
new file mode 100644
index 00000000000..ef5a839a44a
--- /dev/null
+++ b/tests/python/view_layer/test_move_into_layer_collection_a.py
@@ -0,0 +1,69 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveLayerCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ reference_tree_map = [
+ ['A', [
+ ['i', None],
+ ['ii', None],
+ ['iii', None],
+ ]],
+ ['B', None],
+ ['C', [
+ ['1', None],
+ ['2', None],
+ ['3', [
+ ['dog', None],
+ ['cat', None],
+ ]],
+ ]],
+ ]
+ return reference_tree_map
+
+ def get_reference_layers_tree_map(self):
+ # original tree, no changes
+ reference_layers_map = [
+ ['Layer 1', [
+ 'Master Collection',
+ 'C',
+ '3',
+ ]],
+ ['Layer 2', [
+ 'C',
+ '3',
+ 'dog',
+ 'cat',
+ ]],
+ ]
+ return reference_layers_map
+
+ def test_layer_collection_into(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+ self.assertFalse(self.move_into("Layer 1.C.2", "Layer 2.3"))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_into_layer_collection_b.py b/tests/python/view_layer/test_move_into_layer_collection_b.py
new file mode 100644
index 00000000000..77f5d2f2630
--- /dev/null
+++ b/tests/python/view_layer/test_move_into_layer_collection_b.py
@@ -0,0 +1,40 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveLayerCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_scene_tree_map()
+
+ def get_reference_layers_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_layers_tree_map()
+
+ def test_layer_collection_into(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+ self.assertFalse(self.move_into('Layer 1.3', 'Layer 1.3.cat'))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_into_layer_collection_c.py b/tests/python/view_layer/test_move_into_layer_collection_c.py
new file mode 100644
index 00000000000..8ce07dd332e
--- /dev/null
+++ b/tests/python/view_layer/test_move_into_layer_collection_c.py
@@ -0,0 +1,40 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveLayerCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_scene_tree_map()
+
+ def get_reference_layers_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_layers_tree_map()
+
+ def test_layer_collection_into(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+ self.assertFalse(self.move_into("Layer 2.C", "Layer 2.3"))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_into_layer_collection_d.py b/tests/python/view_layer/test_move_into_layer_collection_d.py
new file mode 100644
index 00000000000..715ea6de1da
--- /dev/null
+++ b/tests/python/view_layer/test_move_into_layer_collection_d.py
@@ -0,0 +1,40 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveLayerCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_scene_tree_map()
+
+ def get_reference_layers_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_layers_tree_map()
+
+ def test_layer_collection_into(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+ self.assertFalse(self.move_into("Layer 2.3.cat", "Layer 2.3"))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_into_layer_collection_e.py b/tests/python/view_layer/test_move_into_layer_collection_e.py
new file mode 100644
index 00000000000..6be1a27481f
--- /dev/null
+++ b/tests/python/view_layer/test_move_into_layer_collection_e.py
@@ -0,0 +1,40 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveLayerCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_scene_tree_map()
+
+ def get_reference_layers_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_layers_tree_map()
+
+ def test_layer_collection_into(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+ self.assertFalse(self.move_into("Layer 1.Master Collection", "Layer 1.C"))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_into_layer_collection_f.py b/tests/python/view_layer/test_move_into_layer_collection_f.py
new file mode 100644
index 00000000000..7bf007d2724
--- /dev/null
+++ b/tests/python/view_layer/test_move_into_layer_collection_f.py
@@ -0,0 +1,86 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveLayerCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ reference_tree_map = [
+ ['A', [
+ ['i', None],
+ ['ii', None],
+ ['iii', None],
+ ['3', [
+ ['dog', None],
+ ['cat', None],
+ ]],
+ ]],
+ ['B', None],
+ ['C', [
+ ['1', None],
+ ['2', None],
+ ]],
+ ]
+ return reference_tree_map
+
+ def get_reference_layers_tree_map(self):
+ reference_layers_map = [
+ ['Layer 1', [
+ 'Master Collection',
+ 'C',
+ ]],
+ ['Layer 2', [
+ 'C',
+ '3',
+ 'dog',
+ 'cat',
+ ]],
+ ]
+ return reference_layers_map
+
+ def test_layer_collection_into_a(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+ self.assertTrue(self.move_into("Layer 1.3", "Layer 1.Master Collection.A"))
+ self.compare_tree_maps()
+
+ def test_layer_collection_into_b(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+
+ # collection that will be moved
+ collection_original = self.parse_move('Layer 1.3')
+ collection_original.enabled = True
+ collection_original.selectable = False
+
+ self.assertTrue(self.move_into('Layer 1.3', 'Layer 1.Master Collection.A'))
+ self.compare_tree_maps()
+
+ # we expect the settings to be carried along from the
+ # original layer collection
+ collection_new = self.parse_move('Layer 1.Master Collection.A.3')
+ self.assertEqual(collection_new.enabled, True)
+ self.assertEqual(collection_new.selectable, False)
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_into_layer_collection_g.py b/tests/python/view_layer/test_move_into_layer_collection_g.py
new file mode 100644
index 00000000000..efcdd44da97
--- /dev/null
+++ b/tests/python/view_layer/test_move_into_layer_collection_g.py
@@ -0,0 +1,77 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveLayerCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_scene_tree_map()
+
+ def get_reference_layers_tree_map(self):
+ reference_layers_map = [
+ ['Layer 1', [
+ 'Master Collection',
+ 'C',
+ '3',
+ ]],
+ ['Layer 2', [
+ 'C',
+ 'dog',
+ 'cat',
+ ]],
+ ]
+ return reference_layers_map
+
+ def test_layer_collection_into_a(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+ self.assertTrue(self.move_into('Layer 2.3', 'Layer 2.C'))
+ self.compare_tree_maps()
+
+ def test_layer_collection_into_b(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+
+ # collection that will be moved
+ collection_original = self.parse_move('Layer 2.3')
+ collection_original.enabled = True
+ collection_original.selectable = False
+
+ # collection that will disappear
+ collection_old = self.parse_move('Layer 2.C.3')
+ collection_old.enabled = False
+ collection_old.selectable = True
+
+ # move collection
+ self.assertTrue(self.move_into('Layer 2.3', 'Layer 2.C'))
+ self.compare_tree_maps()
+
+ # we expect the settings to be carried along from the
+ # original layer collection
+ collection_new = self.parse_move('Layer 2.C.3')
+ self.assertEqual(collection_new.enabled, True)
+ self.assertEqual(collection_new.selectable, False)
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_into_layer_collection_h.py b/tests/python/view_layer/test_move_into_layer_collection_h.py
new file mode 100644
index 00000000000..82f5d70dceb
--- /dev/null
+++ b/tests/python/view_layer/test_move_into_layer_collection_h.py
@@ -0,0 +1,76 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveLayerCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ reference_tree_map = [
+ ['A', [
+ ['i', None],
+ ['ii', None],
+ ['iii', None],
+ ]],
+ ['B', None],
+ ['C', [
+ ['1', [
+ ['dog', None],
+ ]],
+ ['2', None],
+ ['3', [
+ ['cat', None],
+ ]],
+ ]],
+ ]
+ return reference_tree_map
+
+ def get_reference_layers_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_layers_tree_map()
+
+ def test_layer_collection_into_a(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+ self.assertTrue(self.move_into('Layer 1.3.dog', 'Layer 1.C.1'))
+ self.compare_tree_maps()
+
+ def test_layer_collection_into_b(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+
+ # collection that will be moved
+ collection_original = self.parse_move('Layer 1.3.dog')
+ collection_original.enabled = True
+ collection_original.selectable = False
+
+ self.assertTrue(self.move_into('Layer 1.3.dog', 'Layer 1.C.1'))
+ self.compare_tree_maps()
+
+ # we expect the settings to be carried along from the
+ # original layer collection
+ collection_new = self.parse_move('Layer 1.C.1.dog')
+ self.assertEqual(collection_new.enabled, True)
+ self.assertEqual(collection_new.selectable, False)
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_into_layer_collection_i.py b/tests/python/view_layer/test_move_into_layer_collection_i.py
new file mode 100644
index 00000000000..23c6e9f997c
--- /dev/null
+++ b/tests/python/view_layer/test_move_into_layer_collection_i.py
@@ -0,0 +1,40 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveLayerCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_scene_tree_map()
+
+ def get_reference_layers_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_layers_tree_map()
+
+ def test_layer_collection_into(self):
+ """
+ Test outliner operations
+ """
+ self.setup_tree()
+ self.assertFalse(self.move_into('Layer 2.C.3', 'Layer 2.dog'))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_into_layer_collection_j.py b/tests/python/view_layer/test_move_into_layer_collection_j.py
new file mode 100644
index 00000000000..e3d0f6c7cc8
--- /dev/null
+++ b/tests/python/view_layer/test_move_into_layer_collection_j.py
@@ -0,0 +1,41 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveLayerCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_scene_tree_map()
+
+ def get_reference_layers_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_layers_tree_map()
+
+ def test_layer_collection_into(self):
+ """
+ Test outliner operations
+ Prevent collection from being dragged into itself
+ """
+ self.setup_tree()
+ self.assertFalse(self.move_into("Layer 2.dog", "Layer 2.3.dog"))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_into_scene_collection_a.py b/tests/python/view_layer/test_move_into_scene_collection_a.py
new file mode 100644
index 00000000000..c5671d46316
--- /dev/null
+++ b/tests/python/view_layer/test_move_into_scene_collection_a.py
@@ -0,0 +1,53 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ reference_tree_map = [
+ ['A', [
+ ['i', None],
+ ['ii', None],
+ ['iii', None],
+ ]],
+ ['B', None],
+ ['C', [
+ ['1', None],
+ ['2', None],
+ ['3', [
+ ['dog', None],
+ ['cat', None],
+ ]],
+ ]],
+ ]
+ return reference_tree_map
+
+ def test_scene_collection_into(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['cat'].move_into(tree['2']))
+ self.assertTrue(tree['cat'].move_into(tree['3']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_into_scene_collection_b.py b/tests/python/view_layer/test_move_into_scene_collection_b.py
new file mode 100644
index 00000000000..08cacde6f0c
--- /dev/null
+++ b/tests/python/view_layer/test_move_into_scene_collection_b.py
@@ -0,0 +1,52 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ reference_tree_map = [
+ ['A', [
+ ['i', None],
+ ['ii', None],
+ ['iii', None],
+ ]],
+ ['B', [
+ ['3', [
+ ['dog', None],
+ ['cat', None],
+ ]],
+ ]],
+ ['C', [
+ ['1', None],
+ ['2', None],
+ ]],
+ ]
+ return reference_tree_map
+
+ def test_scene_collection_into(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['3'].move_into(tree['B']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_into_scene_collection_c.py b/tests/python/view_layer/test_move_into_scene_collection_c.py
new file mode 100644
index 00000000000..83b1d2fc52b
--- /dev/null
+++ b/tests/python/view_layer/test_move_into_scene_collection_c.py
@@ -0,0 +1,52 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ reference_tree_map = [
+ ['A', [
+ ['i', None],
+ ['ii', None],
+ ['iii', None],
+ ]],
+ ['B', None],
+ ['C', [
+ ['1', None],
+ ['2', None],
+ ['3', [
+ ['dog', [
+ ['cat', None],
+ ]],
+ ]],
+ ]],
+ ]
+ return reference_tree_map
+
+ def test_scene_collection_into(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['cat'].move_into(tree['dog']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_into_scene_collection_d.py b/tests/python/view_layer/test_move_into_scene_collection_d.py
new file mode 100644
index 00000000000..c8346c43e05
--- /dev/null
+++ b/tests/python/view_layer/test_move_into_scene_collection_d.py
@@ -0,0 +1,37 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_scene_tree_map()
+
+ def test_scene_collection_into(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ # can't move into a collection if already the last item of the collection
+ self.assertFalse(tree['cat'].move_into(tree['3']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_into_scene_collection_e.py b/tests/python/view_layer/test_move_into_scene_collection_e.py
new file mode 100644
index 00000000000..00a4274c564
--- /dev/null
+++ b/tests/python/view_layer/test_move_into_scene_collection_e.py
@@ -0,0 +1,52 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ reference_tree_map = [
+ ['A', [
+ ['i', None],
+ ['ii', None],
+ ['iii', None],
+ ]],
+ ['C', [
+ ['1', None],
+ ['2', None],
+ ['3', [
+ ['dog', None],
+ ['cat', [
+ ['B', None],
+ ]],
+ ]],
+ ]],
+ ]
+ return reference_tree_map
+
+ def test_scene_collection_into(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['B'].move_into(tree['cat']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_into_scene_collection_f.py b/tests/python/view_layer/test_move_into_scene_collection_f.py
new file mode 100644
index 00000000000..4cba04c35a5
--- /dev/null
+++ b/tests/python/view_layer/test_move_into_scene_collection_f.py
@@ -0,0 +1,51 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ reference_tree_map = [
+ ['A', [
+ ['i', None],
+ ['ii', None],
+ ['iii', None],
+ ]],
+ ['C', [
+ ['1', None],
+ ['2', None],
+ ['3', [
+ ['dog', None],
+ ['cat', None],
+ ['B', None],
+ ]],
+ ]],
+ ]
+ return reference_tree_map
+
+ def test_scene_collection_into(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['B'].move_into(tree['3']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_into_scene_collection_g.py b/tests/python/view_layer/test_move_into_scene_collection_g.py
new file mode 100644
index 00000000000..5ca2658407f
--- /dev/null
+++ b/tests/python/view_layer/test_move_into_scene_collection_g.py
@@ -0,0 +1,52 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ reference_tree_map = [
+ ['B', None],
+ ['C', [
+ ['1', None],
+ ['2', None],
+ ['3', [
+ ['dog', [
+ ['A', [
+ ['i', None],
+ ['ii', None],
+ ['iii', None],
+ ]],
+ ]],
+ ['cat', None],
+ ]],
+ ]],
+ ]
+ return reference_tree_map
+
+ def test_scene_collection_into(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['A'].move_into(tree['dog']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_into_scene_collection_h.py b/tests/python/view_layer/test_move_into_scene_collection_h.py
new file mode 100644
index 00000000000..1524dbad7bc
--- /dev/null
+++ b/tests/python/view_layer/test_move_into_scene_collection_h.py
@@ -0,0 +1,52 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ reference_tree_map = [
+ ['A', [
+ ['i', None],
+ ['iii', None],
+ ]],
+ ['B', None],
+ ['C', [
+ ['1', None],
+ ['2', [
+ ['ii', None],
+ ]],
+ ['3', [
+ ['dog', None],
+ ['cat', None],
+ ]],
+ ]],
+ ]
+ return reference_tree_map
+
+ def test_scene_collection_into(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['ii'].move_into(tree['2']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_into_scene_collection_i.py b/tests/python/view_layer/test_move_into_scene_collection_i.py
new file mode 100644
index 00000000000..2240ba50d75
--- /dev/null
+++ b/tests/python/view_layer/test_move_into_scene_collection_i.py
@@ -0,0 +1,52 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ reference_tree_map = [
+ ['A', [
+ ['i', None],
+ ['iii', None],
+ ]],
+ ['B', None],
+ ['C', [
+ ['1', None],
+ ['2', None],
+ ['3', [
+ ['dog', [
+ ['ii', None],
+ ]],
+ ['cat', None],
+ ]],
+ ]],
+ ]
+ return reference_tree_map
+
+ def test_scene_collection_into(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['ii'].move_into(tree['dog']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_into_scene_collection_j.py b/tests/python/view_layer/test_move_into_scene_collection_j.py
new file mode 100644
index 00000000000..1625b6c517e
--- /dev/null
+++ b/tests/python/view_layer/test_move_into_scene_collection_j.py
@@ -0,0 +1,43 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_scene_tree_map()
+
+ def test_scene_collection_into(self):
+ """
+ Test outliner operations
+ """
+ import bpy
+ master_collection = bpy.context.scene.master_collection
+
+ tree = self.setup_tree()
+
+ for collection in tree.values():
+ # can't move into master_collection anywhere
+ self.assertFalse(master_collection.move_into(collection))
+
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_into_scene_collection_k.py b/tests/python/view_layer/test_move_into_scene_collection_k.py
new file mode 100644
index 00000000000..2d4d5b51e29
--- /dev/null
+++ b/tests/python/view_layer/test_move_into_scene_collection_k.py
@@ -0,0 +1,36 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_scene_tree_map()
+
+ def test_scene_collection_into(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertFalse(tree['C'].move_into(tree['2']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_into_scene_collection_l.py b/tests/python/view_layer/test_move_into_scene_collection_l.py
new file mode 100644
index 00000000000..f2d52b38fe5
--- /dev/null
+++ b/tests/python/view_layer/test_move_into_scene_collection_l.py
@@ -0,0 +1,36 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_scene_tree_map()
+
+ def test_scene_collection_into(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertFalse(tree['C'].move_into(tree['cat']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_into_scene_collection_sync_a.py b/tests/python/view_layer/test_move_into_scene_collection_sync_a.py
new file mode 100644
index 00000000000..60001b9b049
--- /dev/null
+++ b/tests/python/view_layer/test_move_into_scene_collection_sync_a.py
@@ -0,0 +1,37 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionSyncTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_scene_tree_map()
+
+ def test_scene_collection_into(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['cat'].move_into(tree['2']))
+ self.assertTrue(tree['cat'].move_into(tree['3']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_into_scene_collection_sync_b.py b/tests/python/view_layer/test_move_into_scene_collection_sync_b.py
new file mode 100644
index 00000000000..a4d05b57f77
--- /dev/null
+++ b/tests/python/view_layer/test_move_into_scene_collection_sync_b.py
@@ -0,0 +1,52 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionSyncTesting):
+ def get_reference_scene_tree_map(self):
+ reference_tree_map = [
+ ['A', [
+ ['i', None],
+ ['ii', None],
+ ['iii', None],
+ ]],
+ ['B', [
+ ['3', [
+ ['dog', None],
+ ['cat', None],
+ ]],
+ ]],
+ ['C', [
+ ['1', None],
+ ['2', None],
+ ]],
+ ]
+ return reference_tree_map
+
+ def test_scene_collection_into(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['3'].move_into(tree['B']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_into_scene_collection_sync_c.py b/tests/python/view_layer/test_move_into_scene_collection_sync_c.py
new file mode 100644
index 00000000000..3f125d513ce
--- /dev/null
+++ b/tests/python/view_layer/test_move_into_scene_collection_sync_c.py
@@ -0,0 +1,52 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionSyncTesting):
+ def get_reference_scene_tree_map(self):
+ reference_tree_map = [
+ ['A', [
+ ['i', None],
+ ['ii', None],
+ ['iii', None],
+ ]],
+ ['B', None],
+ ['C', [
+ ['1', None],
+ ['2', None],
+ ['3', [
+ ['dog', [
+ ['cat', None],
+ ]],
+ ]],
+ ]],
+ ]
+ return reference_tree_map
+
+ def test_scene_collection_into(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['cat'].move_into(tree['dog']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_into_scene_collection_sync_d.py b/tests/python/view_layer/test_move_into_scene_collection_sync_d.py
new file mode 100644
index 00000000000..87234efef20
--- /dev/null
+++ b/tests/python/view_layer/test_move_into_scene_collection_sync_d.py
@@ -0,0 +1,37 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionSyncTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_scene_tree_map()
+
+ def test_scene_collection_into(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ # can't move into a collection if already the last item of the collection
+ self.assertFalse(tree['cat'].move_into(tree['3']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_into_scene_collection_sync_e.py b/tests/python/view_layer/test_move_into_scene_collection_sync_e.py
new file mode 100644
index 00000000000..689b4976dab
--- /dev/null
+++ b/tests/python/view_layer/test_move_into_scene_collection_sync_e.py
@@ -0,0 +1,52 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionSyncTesting):
+ def get_reference_scene_tree_map(self):
+ reference_tree_map = [
+ ['A', [
+ ['i', None],
+ ['ii', None],
+ ['iii', None],
+ ]],
+ ['C', [
+ ['1', None],
+ ['2', None],
+ ['3', [
+ ['dog', None],
+ ['cat', [
+ ['B', None],
+ ]],
+ ]],
+ ]],
+ ]
+ return reference_tree_map
+
+ def test_scene_collection_into(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['B'].move_into(tree['cat']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_into_scene_collection_sync_f.py b/tests/python/view_layer/test_move_into_scene_collection_sync_f.py
new file mode 100644
index 00000000000..e486f48aac1
--- /dev/null
+++ b/tests/python/view_layer/test_move_into_scene_collection_sync_f.py
@@ -0,0 +1,51 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionSyncTesting):
+ def get_reference_scene_tree_map(self):
+ reference_tree_map = [
+ ['A', [
+ ['i', None],
+ ['ii', None],
+ ['iii', None],
+ ]],
+ ['C', [
+ ['1', None],
+ ['2', None],
+ ['3', [
+ ['dog', None],
+ ['cat', None],
+ ['B', None],
+ ]],
+ ]],
+ ]
+ return reference_tree_map
+
+ def test_scene_collection_into(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['B'].move_into(tree['3']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_into_scene_collection_sync_g.py b/tests/python/view_layer/test_move_into_scene_collection_sync_g.py
new file mode 100644
index 00000000000..3792e9429a3
--- /dev/null
+++ b/tests/python/view_layer/test_move_into_scene_collection_sync_g.py
@@ -0,0 +1,52 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionSyncTesting):
+ def get_reference_scene_tree_map(self):
+ reference_tree_map = [
+ ['B', None],
+ ['C', [
+ ['1', None],
+ ['2', None],
+ ['3', [
+ ['dog', [
+ ['A', [
+ ['i', None],
+ ['ii', None],
+ ['iii', None],
+ ]],
+ ]],
+ ['cat', None],
+ ]],
+ ]],
+ ]
+ return reference_tree_map
+
+ def test_scene_collection_into(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['A'].move_into(tree['dog']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_into_scene_collection_sync_h.py b/tests/python/view_layer/test_move_into_scene_collection_sync_h.py
new file mode 100644
index 00000000000..8b3ceb14d73
--- /dev/null
+++ b/tests/python/view_layer/test_move_into_scene_collection_sync_h.py
@@ -0,0 +1,52 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionSyncTesting):
+ def get_reference_scene_tree_map(self):
+ reference_tree_map = [
+ ['A', [
+ ['i', None],
+ ['iii', None],
+ ]],
+ ['B', None],
+ ['C', [
+ ['1', None],
+ ['2', [
+ ['ii', None],
+ ]],
+ ['3', [
+ ['dog', None],
+ ['cat', None],
+ ]],
+ ]],
+ ]
+ return reference_tree_map
+
+ def test_scene_collection_into(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['ii'].move_into(tree['2']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_into_scene_collection_sync_i.py b/tests/python/view_layer/test_move_into_scene_collection_sync_i.py
new file mode 100644
index 00000000000..8262dcc06c1
--- /dev/null
+++ b/tests/python/view_layer/test_move_into_scene_collection_sync_i.py
@@ -0,0 +1,52 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionSyncTesting):
+ def get_reference_scene_tree_map(self):
+ reference_tree_map = [
+ ['A', [
+ ['i', None],
+ ['iii', None],
+ ]],
+ ['B', None],
+ ['C', [
+ ['1', None],
+ ['2', None],
+ ['3', [
+ ['dog', [
+ ['ii', None],
+ ]],
+ ['cat', None],
+ ]],
+ ]],
+ ]
+ return reference_tree_map
+
+ def test_scene_collection_into(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertTrue(tree['ii'].move_into(tree['dog']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_into_scene_collection_sync_j.py b/tests/python/view_layer/test_move_into_scene_collection_sync_j.py
new file mode 100644
index 00000000000..519c1b81269
--- /dev/null
+++ b/tests/python/view_layer/test_move_into_scene_collection_sync_j.py
@@ -0,0 +1,43 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionSyncTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_scene_tree_map()
+
+ def test_scene_collection_into(self):
+ """
+ Test outliner operations
+ """
+ import bpy
+ master_collection = bpy.context.scene.master_collection
+
+ tree = self.setup_tree()
+
+ for collection in tree.values():
+ # can't move into master_collection anywhere
+ self.assertFalse(master_collection.move_into(collection))
+
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_into_scene_collection_sync_k.py b/tests/python/view_layer/test_move_into_scene_collection_sync_k.py
new file mode 100644
index 00000000000..4c785418b0e
--- /dev/null
+++ b/tests/python/view_layer/test_move_into_scene_collection_sync_k.py
@@ -0,0 +1,36 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionSyncTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_scene_tree_map()
+
+ def test_scene_collection_into(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertFalse(tree['C'].move_into(tree['2']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_move_into_scene_collection_sync_l.py b/tests/python/view_layer/test_move_into_scene_collection_sync_l.py
new file mode 100644
index 00000000000..f50cd6f7072
--- /dev/null
+++ b/tests/python/view_layer/test_move_into_scene_collection_sync_l.py
@@ -0,0 +1,36 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(MoveSceneCollectionSyncTesting):
+ def get_reference_scene_tree_map(self):
+ # original tree, no changes
+ return self.get_initial_scene_tree_map()
+
+ def test_scene_collection_into(self):
+ """
+ Test outliner operations
+ """
+ tree = self.setup_tree()
+ self.assertFalse(tree['C'].move_into(tree['cat']))
+ self.compare_tree_maps()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_object_add_cylinder.py b/tests/python/view_layer/test_object_add_cylinder.py
new file mode 100644
index 00000000000..c982219a2c9
--- /dev/null
+++ b/tests/python/view_layer/test_object_add_cylinder.py
@@ -0,0 +1,34 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_syncing_object_add_cylinder(self):
+ """
+ See if new objects are added to the correct collection
+ bpy.ops.mesh.primitive_cylinder_add()
+ """
+ import os
+ ROOT = self.get_root()
+ filepath_json = os.path.join(ROOT, 'layers_object_add_cylinder.json')
+ self.do_object_add(filepath_json, 'CYLINDER')
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_object_add_empty.py b/tests/python/view_layer/test_object_add_empty.py
new file mode 100644
index 00000000000..376d9361319
--- /dev/null
+++ b/tests/python/view_layer/test_object_add_empty.py
@@ -0,0 +1,34 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_syncing_object_add_empty(self):
+ """
+ See if new objects are added to the correct collection
+ bpy.ops.object.add()
+ """
+ import os
+ ROOT = self.get_root()
+ filepath_json = os.path.join(ROOT, 'layers_object_add_empty.json')
+ self.do_object_add(filepath_json, 'EMPTY')
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_object_add_no_collection_cylinder.py b/tests/python/view_layer/test_object_add_no_collection_cylinder.py
new file mode 100644
index 00000000000..d6138040092
--- /dev/null
+++ b/tests/python/view_layer/test_object_add_no_collection_cylinder.py
@@ -0,0 +1,32 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_object_add_cylinder(self):
+ """
+ See if new objects are added to the correct collection
+ bpy.ops.mesh.primitive_cylinder_add()
+ """
+ import os
+ self.do_object_add_no_collection('CYLINDER')
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_object_add_no_collection_empty.py b/tests/python/view_layer/test_object_add_no_collection_empty.py
new file mode 100644
index 00000000000..4c4ed45dfe8
--- /dev/null
+++ b/tests/python/view_layer/test_object_add_no_collection_empty.py
@@ -0,0 +1,31 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_syncing_object_add_empty(self):
+ """
+ See if new objects are added to the correct collection
+ bpy.ops.object.add()
+ """
+ self.do_object_add_no_collection('EMPTY')
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_object_add_no_collection_torus.py b/tests/python/view_layer/test_object_add_no_collection_torus.py
new file mode 100644
index 00000000000..0bb6b03692d
--- /dev/null
+++ b/tests/python/view_layer/test_object_add_no_collection_torus.py
@@ -0,0 +1,31 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_syncing_object_add_torus(self):
+ """
+ See if new objects are added to the correct collection
+ bpy.ops.mesh.primitive_torus_add()
+ """
+ self.do_object_add_no_collection('TORUS')
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_object_add_torus.py b/tests/python/view_layer/test_object_add_torus.py
new file mode 100644
index 00000000000..7ee138bb93e
--- /dev/null
+++ b/tests/python/view_layer/test_object_add_torus.py
@@ -0,0 +1,34 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_syncing_object_add_torus(self):
+ """
+ See if new objects are added to the correct collection
+ bpy.ops.mesh.primitive_torus_add()
+ """
+ import os
+ ROOT = self.get_root()
+ filepath_json = os.path.join(ROOT, 'layers_object_add_torus.json')
+ self.do_object_add(filepath_json, 'TORUS')
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_object_copy.py b/tests/python/view_layer/test_object_copy.py
new file mode 100644
index 00000000000..a15b9e2c941
--- /dev/null
+++ b/tests/python/view_layer/test_object_copy.py
@@ -0,0 +1,94 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def do_object_copy(self, mode):
+ import bpy
+ import os
+ import tempfile
+ import filecmp
+
+ ROOT = self.get_root()
+ with tempfile.TemporaryDirectory() as dirpath:
+ filepath_layers = os.path.join(ROOT, 'layers.blend')
+ filepath_json = os.path.join(ROOT, 'layers_object_copy_duplicate.json')
+
+ # open file
+ bpy.ops.wm.open_mainfile('EXEC_DEFAULT', filepath=filepath_layers)
+ self.rename_collections()
+
+ # create sub-collections
+ three_b = bpy.data.objects.get('T.3b')
+ three_c = bpy.data.objects.get('T.3c')
+
+ scene = bpy.context.scene
+ subzero = scene.master_collection.collections['1'].collections.new('sub-zero')
+ scorpion = subzero.collections.new('scorpion')
+ subzero.objects.link(three_b)
+ scorpion.objects.link(three_c)
+ layer = scene.view_layers.new('Fresh new Layer')
+ layer.collections.link(subzero)
+
+ scene.view_layers.active_index = len(scene.view_layers) - 1
+ bpy.context.window.view_layer = bpy.context.scene.view_layers['Fresh new Layer']
+
+ if mode == 'DUPLICATE':
+ # assuming the latest layer is the active layer
+ bpy.ops.object.select_all(action='DESELECT')
+ three_c.select_set(action='SELECT')
+ bpy.ops.object.duplicate()
+
+ elif mode == 'NAMED':
+ bpy.ops.object.add_named(name=three_c.name)
+
+ # save file
+ filepath_objects = os.path.join(dirpath, 'objects.blend')
+ bpy.ops.wm.save_mainfile('EXEC_DEFAULT', filepath=filepath_objects)
+
+ # get the generated json
+ datas = query_scene(filepath_objects, 'Main', (get_scene_collections, get_layers))
+ self.assertTrue(datas, "Data is not valid")
+
+ filepath_objects_json = os.path.join(dirpath, "objects.json")
+ with open(filepath_objects_json, "w") as f:
+ for data in datas:
+ f.write(dump(data))
+
+ self.assertTrue(compare_files(
+ filepath_objects_json,
+ filepath_json,
+ ),
+ "Scene dump files differ")
+
+ def test_copy_object(self):
+ """
+ OBJECT_OT_duplicate
+ """
+ self.do_object_copy('DUPLICATE')
+
+ def test_copy_object_named(self):
+ """
+ OBJECT_OT_add_named
+ """
+ self.do_object_copy('NAMED')
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_object_delete_a.py b/tests/python/view_layer/test_object_delete_a.py
new file mode 100644
index 00000000000..39304d1dcfc
--- /dev/null
+++ b/tests/python/view_layer/test_object_delete_a.py
@@ -0,0 +1,31 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_object_delete_data(self):
+ """
+ See if objects are removed correctly from all related collections
+ bpy.data.objects.remove()
+ """
+ self.do_object_delete('DATA')
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_object_delete_b.py b/tests/python/view_layer/test_object_delete_b.py
new file mode 100644
index 00000000000..58dae9fc8a3
--- /dev/null
+++ b/tests/python/view_layer/test_object_delete_b.py
@@ -0,0 +1,31 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_object_delete_operator(self):
+ """
+ See if new objects are added to the correct collection
+ bpy.ops.object.del()
+ """
+ self.do_object_delete('OPERATOR')
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_object_link_a.py b/tests/python/view_layer/test_object_link_a.py
new file mode 100644
index 00000000000..4f79e1c16ad
--- /dev/null
+++ b/tests/python/view_layer/test_object_link_a.py
@@ -0,0 +1,32 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_object_link_scene(self):
+ """
+ See if we can link objects
+ """
+ import bpy
+ master_collection = bpy.context.scene.master_collection
+ self.do_object_link(master_collection)
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_object_link_b.py b/tests/python/view_layer/test_object_link_b.py
new file mode 100644
index 00000000000..361ea7fc3a5
--- /dev/null
+++ b/tests/python/view_layer/test_object_link_b.py
@@ -0,0 +1,34 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_object_link_context(self):
+ """
+ See if we can link objects via bpy.context.scene_collection
+ """
+ import bpy
+ bpy.context.scene.view_layers.active_index = len(bpy.context.scene.view_layers) - 1
+ bpy.context.window.view_layer = bpy.context.scene.view_layers['Viewport']
+ master_collection = bpy.context.scene_collection
+ self.do_object_link(master_collection)
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_object_link_c.py b/tests/python/view_layer/test_object_link_c.py
new file mode 100644
index 00000000000..f0118beaefe
--- /dev/null
+++ b/tests/python/view_layer/test_object_link_c.py
@@ -0,0 +1,35 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_object_link_reload(self):
+ """
+ See if we can link objects and not crash
+ """
+ import bpy
+ master_collection = bpy.context.scene.master_collection
+ self.do_object_link(master_collection)
+
+ # force depsgraph to update
+ bpy.ops.wm.read_factory_settings()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_operator_context.py b/tests/python/view_layer/test_operator_context.py
new file mode 100644
index 00000000000..34f46c963bb
--- /dev/null
+++ b/tests/python/view_layer/test_operator_context.py
@@ -0,0 +1,133 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_operator_context(self):
+ """
+ See if view layer context is properly set/get with operators overrides
+ when we set view_layer in context, the collection should change as well
+ """
+ import bpy
+ import os
+
+ class SampleOperator(bpy.types.Operator):
+ bl_idname = "testing.sample"
+ bl_label = "Sample Operator"
+
+ view_layer = bpy.props.StringProperty(
+ default="Not Set",
+ options={'SKIP_SAVE'},
+ )
+
+ scene_collection = bpy.props.StringProperty(
+ default="",
+ options={'SKIP_SAVE'},
+ )
+
+ use_verbose = bpy.props.BoolProperty(
+ default=False,
+ options={'SKIP_SAVE'},
+ )
+
+ def execute(self, context):
+ view_layer = context.view_layer
+ ret = {'FINISHED'}
+
+ # this is simply playing safe
+ if view_layer.name != self.view_layer:
+ if self.use_verbose:
+ print('ERROR: Render Layer mismatch: "{0}" != "{1}"'.format(
+ view_layer.name, self.view_layer))
+ ret = {'CANCELLED'}
+
+ scene_collection_name = None
+ if self.scene_collection:
+ scene_collection_name = self.scene_collection
+ else:
+ scene_collection_name = view_layer.collections.active.name
+
+ # while this is the real test
+ if context.scene_collection.name != scene_collection_name:
+ if self.use_verbose:
+ print('ERROR: Scene Collection mismatch: "{0}" != "{1}"'.format(
+ context.scene_collection.name, scene_collection_name))
+ ret = {'CANCELLED'}
+ return ret
+
+ bpy.utils.register_class(SampleOperator)
+
+ # open sample file
+ ROOT = self.get_root()
+ filepath_layers = os.path.join(ROOT, 'layers.blend')
+ bpy.ops.wm.open_mainfile('EXEC_DEFAULT', filepath=filepath_layers)
+ self.rename_collections()
+
+ # change the file
+ three_b = bpy.data.objects.get('T.3b')
+ three_c = bpy.data.objects.get('T.3c')
+ scene = bpy.context.scene
+ subzero = scene.master_collection.collections['1'].collections.new('sub-zero')
+ scorpion = subzero.collections.new('scorpion')
+ subzero.objects.link(three_b)
+ scorpion.objects.link(three_c)
+ layer = scene.view_layers.new('Fresh new Layer')
+ layer.collections.unlink(layer.collections.active)
+ layer.collections.link(subzero)
+ layer.collections.active_index = 3
+ self.assertEqual(layer.collections.active.name, 'scorpion')
+
+ # Change active scene layer (do it for window too just to don't get mangled in window bugs)
+ scene = bpy.context.scene
+ scene.view_layers.active_index = len(scene.view_layers) - 2
+ self.assertEqual(scene.view_layers.active.name, "Viewport")
+ bpy.context.window.view_layer = bpy.context.scene.view_layers['Viewport']
+
+ # old layer
+ self.assertEqual(bpy.ops.testing.sample(view_layer='Viewport', use_verbose=True), {'FINISHED'})
+
+ # expected to fail
+ self.assertTrue(bpy.ops.testing.sample(view_layer=layer.name), {'CANCELLED'})
+
+ # set view layer and scene collection
+ override = bpy.context.copy()
+ override["view_layer"] = layer
+ override["scene_collection"] = subzero
+ self.assertEqual(bpy.ops.testing.sample(
+ override,
+ view_layer=layer.name,
+ scene_collection=subzero.name, # 'sub-zero'
+ use_verbose=True), {'FINISHED'})
+
+ # set only view layer
+ override = bpy.context.copy()
+ override["view_layer"] = layer
+
+ self.assertNotEqual(bpy.context.view_layer.name, layer.name)
+ self.assertNotEqual(bpy.context.scene_collection.name, layer.collections.active.name)
+
+ self.assertEqual(bpy.ops.testing.sample(
+ override,
+ view_layer=layer.name,
+ scene_collection=layer.collections.active.name, # 'scorpion'
+ use_verbose=False), {'CANCELLED'})
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_scene_collection_delete.py b/tests/python/view_layer/test_scene_collection_delete.py
new file mode 100644
index 00000000000..58893810545
--- /dev/null
+++ b/tests/python/view_layer/test_scene_collection_delete.py
@@ -0,0 +1,49 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_scene_collection_delete(self):
+ """
+ See if a scene collection can be properly deleted even
+ when linked
+ """
+ import bpy
+
+ # delete all initial objects
+ while bpy.data.objects:
+ bpy.data.objects.remove(bpy.data.objects[0])
+
+ # delete all initial collections
+ scene = bpy.context.scene
+ master_collection = scene.master_collection
+ while master_collection.collections:
+ master_collection.collections.remove(master_collection.collections[0])
+
+ collection_parent = master_collection.collections.new('parent')
+ collection_nested = collection_parent.collections.new('child linked')
+ bpy.context.view_layer.collections.link(collection_nested)
+ master_collection.collections.remove(collection_parent)
+
+ # Update depsgraph.
+ scene.update()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_scene_copy_a.py b/tests/python/view_layer/test_scene_copy_a.py
new file mode 100644
index 00000000000..8cccb26a92d
--- /dev/null
+++ b/tests/python/view_layer/test_scene_copy_a.py
@@ -0,0 +1,37 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_scene_collections_copy_full(self):
+ """
+ See if scene copying 'FULL_COPY' is working for scene collections
+ """
+ import os
+ ROOT = self.get_root()
+
+ filepath_layers_json_copy = os.path.join(ROOT, 'layers_copy_full_simple.json')
+ self.do_scene_copy(
+ filepath_layers_json_copy,
+ 'FULL_COPY',
+ (get_scene_collections,))
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_scene_copy_b.py b/tests/python/view_layer/test_scene_copy_b.py
new file mode 100644
index 00000000000..1d53b56719d
--- /dev/null
+++ b/tests/python/view_layer/test_scene_copy_b.py
@@ -0,0 +1,38 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_scene_collections_link(self):
+ """
+ See if scene copying 'LINK_OBJECTS' is working for scene collections
+ """
+ import os
+ ROOT = self.get_root()
+
+ # note: nothing should change, so using `layers_simple.json`
+ filepath_layers_json_copy = os.path.join(ROOT, 'layers_simple.json')
+ self.do_scene_copy(
+ filepath_layers_json_copy,
+ 'LINK_OBJECTS',
+ (get_scene_collections,))
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_scene_copy_c.py b/tests/python/view_layer/test_scene_copy_c.py
new file mode 100644
index 00000000000..c9bb0924848
--- /dev/null
+++ b/tests/python/view_layer/test_scene_copy_c.py
@@ -0,0 +1,37 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_scene_layers_copy(self):
+ """
+ See if scene copying 'FULL_COPY' is working for scene layers
+ """
+ import os
+ ROOT = self.get_root()
+
+ filepath_layers_json_copy = os.path.join(ROOT, 'layers_copy_full.json')
+ self.do_scene_copy(
+ filepath_layers_json_copy,
+ 'FULL_COPY',
+ (get_scene_collections, get_layers))
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_scene_copy_d.py b/tests/python/view_layer/test_scene_copy_d.py
new file mode 100644
index 00000000000..6efd93c7659
--- /dev/null
+++ b/tests/python/view_layer/test_scene_copy_d.py
@@ -0,0 +1,37 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_scene_layers_link(self):
+ """
+ See if scene copying 'LINK_OBJECTS' is working for scene layers
+ """
+ import os
+ ROOT = self.get_root()
+
+ filepath_layers_json_copy = os.path.join(ROOT, 'layers_copy_link.json')
+ self.do_scene_copy(
+ filepath_layers_json_copy,
+ 'LINK_OBJECTS',
+ (get_scene_collections, get_layers))
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_scene_copy_e.py b/tests/python/view_layer/test_scene_copy_e.py
new file mode 100644
index 00000000000..23d01b6a84b
--- /dev/null
+++ b/tests/python/view_layer/test_scene_copy_e.py
@@ -0,0 +1,47 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_shared_layer_collections_copy_full(self):
+ """
+ See if scene copying 'FULL_COPY' is working for scene collections
+ with a shared object
+ """
+ import os
+ import bpy
+
+ scene = bpy.context.scene
+ layer = bpy.context.view_layer
+
+ original_cube = layer.objects.get('Cube')
+ original_cube.select_set('SELECT')
+ self.assertTrue(original_cube.select_get())
+
+ bpy.ops.scene.new(type='FULL_COPY')
+ new_layer = bpy.context.view_layer
+
+ self.assertNotEqual(layer, new_layer)
+ new_cube = new_layer.objects.get('Cube.001')
+ self.assertNotEqual(original_cube, new_cube)
+ self.assertTrue(new_cube.select_get())
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_scene_copy_f.py b/tests/python/view_layer/test_scene_copy_f.py
new file mode 100644
index 00000000000..13586a66f3d
--- /dev/null
+++ b/tests/python/view_layer/test_scene_copy_f.py
@@ -0,0 +1,89 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_shared_layer_collections_copy_full(self):
+ """
+ See if scene copying 'FULL_COPY' is keeping collections visibility
+ and selectability.
+ """
+ import os
+ import bpy
+
+ scene = bpy.context.scene
+
+ enabled_lookup = [True, False, False, True]
+ enabled_lookup_sub = [False, True, False]
+
+ selectable_lookup = [True, True, False, False]
+ selectable_lookup_sub = [False, True, False, True]
+ new_collections = []
+
+ # clean everything
+ for layer in scene.view_layers:
+ while layer.collections:
+ layer.collections.unlink(layer.collections[0])
+
+ # create new collections
+ for i in range(4):
+ collection = scene.master_collection.collections.new(str(i))
+ new_collections.append(collection)
+
+ for j in range(3):
+ sub_collection = collection.collections.new("{0}:{1}".format(i, j))
+
+ # link to the original scene
+ for layer in scene.view_layers:
+ for i, collection in enumerate(new_collections):
+ layer.collections.link(collection)
+ self.assertEqual(layer.collections[-1], layer.collections[i])
+
+ layer.collections[i].enabled = enabled_lookup[i]
+ layer.collections[i].selectable = selectable_lookup[i]
+
+ for j, sub_collection in enumerate(layer.collections[i].collections):
+ sub_collection.enabled = enabled_lookup_sub[j]
+ sub_collection.selectable = selectable_lookup_sub[j]
+
+ # copy scene
+ bpy.ops.scene.new(type='FULL_COPY')
+ new_scene = bpy.context.scene
+ self.assertNotEqual(scene, new_scene)
+
+ # update depsgrah
+ scene.update() # update depsgraph
+
+ # compare scenes
+ for h, layer in enumerate(scene.view_layers):
+ new_layer = new_scene.view_layers[h]
+
+ for i, collection in enumerate(layer.collections):
+ new_collection = new_layer.collections[i]
+ self.assertEqual(collection.enabled, new_collection.enabled)
+ self.assertEqual(collection.selectable, new_collection.selectable)
+
+ for j, sub_collection in enumerate(layer.collections[i].collections):
+ new_sub_collection = new_collection.collections[j]
+ self.assertEqual(sub_collection.enabled, new_sub_collection.enabled)
+ self.assertEqual(sub_collection.selectable, new_sub_collection.selectable)
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_scene_delete.py b/tests/python/view_layer/test_scene_delete.py
new file mode 100644
index 00000000000..edc997d6495
--- /dev/null
+++ b/tests/python/view_layer/test_scene_delete.py
@@ -0,0 +1,34 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_scene_delete(self):
+ """
+ See if a scene can be properly deleted
+ """
+ import bpy
+
+ scene = bpy.context.scene
+ bpy.data.scenes.new('New')
+ bpy.data.scenes.remove(scene)
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_scene_objects.py b/tests/python/view_layer/test_scene_objects.py
new file mode 100644
index 00000000000..c5d3a0196ed
--- /dev/null
+++ b/tests/python/view_layer/test_scene_objects.py
@@ -0,0 +1,53 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_scene_objects_a(self):
+ """
+ Test vanilla scene
+ """
+ import bpy
+
+ scene = bpy.context.scene
+ self.assertEqual(len(scene.objects), 3)
+
+ def test_scene_objects_b(self):
+ """
+ Test scene with nested collections
+ """
+ import bpy
+ scene = bpy.context.scene
+
+ # move default objects to a nested collection
+ master_collection = scene.master_collection
+ collection = master_collection.collections[0]
+ collection_nested = collection.collections.new()
+
+ for ob in collection.objects:
+ collection_nested.objects.link(ob)
+
+ while collection.objects:
+ collection.objects.unlink(collection.objects[0])
+
+ self.assertEqual(len(scene.objects), 3)
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_scene_write_read.py b/tests/python/view_layer/test_scene_write_read.py
new file mode 100644
index 00000000000..6c750d87987
--- /dev/null
+++ b/tests/python/view_layer/test_scene_write_read.py
@@ -0,0 +1,144 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def do_scene_write_read(self, filepath_layers, filepath_layers_json, data_callbacks, do_read):
+ """
+ See if write/read is working for scene collections and layers
+ """
+ import bpy
+ import os
+ import tempfile
+ import filecmp
+
+ with tempfile.TemporaryDirectory() as dirpath:
+ (self.path_exists(f) for f in (filepath_layers, filepath_layers_json))
+
+ filepath_doversion = os.path.join(dirpath, 'doversion.blend')
+ filepath_saved = os.path.join(dirpath, 'doversion_saved.blend')
+ filepath_read_json = os.path.join(dirpath, "read.json")
+
+ # doversion + write test
+ bpy.ops.wm.open_mainfile('EXEC_DEFAULT', filepath=filepath_layers)
+ self.rename_collections()
+ bpy.ops.wm.save_mainfile('EXEC_DEFAULT', filepath=filepath_doversion)
+
+ datas = query_scene(filepath_doversion, 'Main', data_callbacks)
+ self.assertTrue(datas, "Data is not valid")
+
+ filepath_doversion_json = os.path.join(dirpath, "doversion.json")
+ with open(filepath_doversion_json, "w") as f:
+ for data in datas:
+ f.write(dump(data))
+
+ self.assertTrue(compare_files(
+ filepath_doversion_json,
+ filepath_layers_json,
+ ),
+ "Run: test_scene_write_layers")
+
+ if do_read:
+ # read test, simply open and save the file
+ bpy.ops.wm.open_mainfile('EXEC_DEFAULT', filepath=filepath_doversion)
+ self.rename_collections()
+ bpy.ops.wm.save_mainfile('EXEC_DEFAULT', filepath=filepath_saved)
+
+ datas = query_scene(filepath_saved, 'Main', data_callbacks)
+ self.assertTrue(datas, "Data is not valid")
+
+ with open(filepath_read_json, "w") as f:
+ for data in datas:
+ f.write(dump(data))
+
+ self.assertTrue(compare_files(
+ filepath_read_json,
+ filepath_layers_json,
+ ),
+ "Scene dump files differ")
+
+ def test_scene_write_collections(self):
+ """
+ See if the doversion and writing are working for scene collections
+ """
+ import os
+
+ ROOT = self.get_root()
+ filepath_layers = os.path.join(ROOT, 'layers.blend')
+ filepath_layers_json = os.path.join(ROOT, 'layers_simple.json')
+
+ self.do_scene_write_read(
+ filepath_layers,
+ filepath_layers_json,
+ (get_scene_collections,),
+ False)
+
+ def test_scene_write_layers(self):
+ """
+ See if the doversion and writing are working for collections and layers
+ """
+ import os
+
+ ROOT = self.get_root()
+ filepath_layers = os.path.join(ROOT, 'layers.blend')
+ filepath_layers_json = os.path.join(ROOT, 'layers.json')
+
+ self.do_scene_write_read(
+ filepath_layers,
+ filepath_layers_json,
+ (get_scene_collections, get_layers),
+ False)
+
+ def test_scene_read_collections(self):
+ """
+ See if read is working for scene collections
+ (run `test_scene_write_colections` first)
+ """
+ import os
+
+ ROOT = self.get_root()
+ filepath_layers = os.path.join(ROOT, 'layers.blend')
+ filepath_layers_json = os.path.join(ROOT, 'layers_simple.json')
+
+ self.do_scene_write_read(
+ filepath_layers,
+ filepath_layers_json,
+ (get_scene_collections,),
+ True)
+
+ def test_scene_read_layers(self):
+ """
+ See if read is working for scene layers
+ (run `test_scene_write_layers` first)
+ """
+ import os
+
+ ROOT = self.get_root()
+ filepath_layers = os.path.join(ROOT, 'layers.blend')
+ filepath_layers_json = os.path.join(ROOT, 'layers.json')
+
+ self.do_scene_write_read(
+ filepath_layers,
+ filepath_layers_json,
+ (get_scene_collections, get_layers),
+ True)
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_view_layer_rename.py b/tests/python/view_layer/test_view_layer_rename.py
new file mode 100644
index 00000000000..fefb317d0b1
--- /dev/null
+++ b/tests/python/view_layer/test_view_layer_rename.py
@@ -0,0 +1,33 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_view_layer_rename(self):
+ """
+ See if we can rename view layers.
+ """
+ import bpy
+ view_layer = bpy.context.view_layer
+ print("View layer name: " + view_layer.name)
+ view_layer.name = "New Name"
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/view_layer_common.py b/tests/python/view_layer/view_layer_common.py
new file mode 100644
index 00000000000..1ccd836c8d1
--- /dev/null
+++ b/tests/python/view_layer/view_layer_common.py
@@ -0,0 +1,821 @@
+import unittest
+
+__all__ = (
+ "Clay",
+ "MoveLayerCollectionTesting",
+ "MoveSceneCollectionSyncTesting",
+ "MoveSceneCollectionTesting",
+ "ViewLayerTesting",
+ "compare_files",
+ "dump",
+ "get_layers",
+ "get_scene_collections",
+ "query_scene",
+ "setup_extra_arguments",
+)
+
+# ############################################################
+# Layer Collection Crawler
+# ############################################################
+
+
+def listbase_iter(data, struct, listbase):
+ element = data.get_pointer((struct, listbase, b'first'))
+ while element is not None:
+ yield element
+ element = element.get_pointer(b'next')
+
+
+def linkdata_iter(collection, data):
+ element = collection.get_pointer((data, b'first'))
+ while element is not None:
+ yield element
+ element = element.get_pointer(b'next')
+
+
+def get_layer_collection(layer_collection):
+ data = {}
+ flag = layer_collection.get(b'flag')
+
+ data['is_visible'] = (flag & (1 << 0)) != 0
+ data['is_selectable'] = (flag & (1 << 1)) != 0
+ data['is_disabled'] = (flag & (1 << 2)) != 0
+
+ scene_collection = layer_collection.get_pointer(b'scene_collection')
+ if scene_collection is None:
+ name = 'Fail!'
+ else:
+ name = scene_collection.get(b'name')
+ data['name'] = name
+
+ objects = []
+ for link in linkdata_iter(layer_collection, b'object_bases'):
+ ob_base = link.get_pointer(b'data')
+ ob = ob_base.get_pointer(b'object')
+ objects.append(ob.get((b'id', b'name'))[2:])
+ data['objects'] = objects
+
+ collections = {}
+ for nested_layer_collection in linkdata_iter(layer_collection, b'layer_collections'):
+ subname, subdata = get_layer_collection(nested_layer_collection)
+ collections[subname] = subdata
+ data['collections'] = collections
+
+ return name, data
+
+
+def get_layer(scene, layer):
+ data = {}
+ name = layer.get(b'name')
+
+ data['name'] = name
+ data['engine'] = scene.get((b'view_render', b'engine_id'))
+
+ active_base = layer.get_pointer(b'basact')
+ if active_base:
+ ob = active_base.get_pointer(b'object')
+ data['active_object'] = ob.get((b'id', b'name'))[2:]
+ else:
+ data['active_object'] = ""
+
+ objects = []
+ for link in linkdata_iter(layer, b'object_bases'):
+ ob = link.get_pointer(b'object')
+ objects.append(ob.get((b'id', b'name'))[2:])
+ data['objects'] = objects
+
+ collections = {}
+ for layer_collection in linkdata_iter(layer, b'layer_collections'):
+ subname, subdata = get_layer_collection(layer_collection)
+ collections[subname] = subdata
+ data['collections'] = collections
+
+ return name, data
+
+
+def get_layers(scene):
+ """Return all the render layers and their data"""
+ layers = {}
+ for layer in linkdata_iter(scene, b'view_layers'):
+ name, data = get_layer(scene, layer)
+ layers[name] = data
+ return layers
+
+
+def get_scene_collection_objects(collection, listbase):
+ objects = []
+ for link in linkdata_iter(collection, listbase):
+ ob = link.get_pointer(b'data')
+ if ob is None:
+ name = 'Fail!'
+ else:
+ name = ob.get((b'id', b'name'))[2:]
+ objects.append(name)
+ return objects
+
+
+def get_scene_collection(collection):
+ """"""
+ data = {}
+ name = collection.get(b'name')
+
+ data['name'] = name
+ data['objects'] = get_scene_collection_objects(collection, b'objects')
+
+ collections = {}
+ for nested_collection in linkdata_iter(collection, b'scene_collections'):
+ subname, subdata = get_scene_collection(nested_collection)
+ collections[subname] = subdata
+ data['collections'] = collections
+
+ return name, data
+
+
+def get_scene_collections(scene):
+ """Return all the scene collections ahd their data"""
+ master_collection = scene.get_pointer(b'collection')
+ return get_scene_collection(master_collection)
+
+
+def query_scene(filepath, name, callbacks):
+ """Return the equivalent to bpy.context.scene"""
+ from io_blend_utils.blend import blendfile
+
+ with blendfile.open_blend(filepath) as blend:
+ scenes = [block for block in blend.blocks if block.code == b'SC']
+ for scene in scenes:
+ if scene.get((b'id', b'name'))[2:] != name:
+ continue
+
+ return [callback(scene) for callback in callbacks]
+
+
+# ############################################################
+# Utils
+# ############################################################
+
+def dump(data):
+ import json
+ return json.dumps(
+ data,
+ sort_keys=True,
+ indent=4,
+ separators=(',', ': '),
+ )
+
+
+# ############################################################
+# Tests
+# ############################################################
+
+PDB = False
+DUMP_DIFF = True
+UPDATE_DIFF = False # HACK used to update tests when something change
+
+
+def compare_files(file_a, file_b):
+ import filecmp
+
+ if not filecmp.cmp(
+ file_a,
+ file_b):
+
+ if DUMP_DIFF:
+ import subprocess
+ subprocess.call(["diff", "-u", file_a, file_b])
+
+ if UPDATE_DIFF:
+ import subprocess
+ subprocess.call(["cp", "-u", file_a, file_b])
+
+
+ if PDB:
+ import pdb
+ print("Files differ:", file_a, file_b)
+ pdb.set_trace()
+
+ return False
+
+ return True
+
+
+class ViewLayerTesting(unittest.TestCase):
+ _test_simple = False
+ _extra_arguments = []
+
+ @classmethod
+ def setUpClass(cls):
+ """Runs once"""
+ cls.pretest_parsing()
+
+ @classmethod
+ def get_root(cls):
+ """
+ return the folder with the test files
+ """
+ arguments = {}
+ for argument in cls._extra_arguments:
+ name, value = argument.split('=')
+ cls.assertTrue(name and name.startswith("--"), "Invalid argument \"{0}\"".format(argument))
+ cls.assertTrue(value, "Invalid argument \"{0}\"".format(argument))
+ arguments[name[2:]] = value.strip('"')
+
+ return arguments.get('testdir')
+
+ @classmethod
+ def pretest_parsing(cls):
+ """
+ Test if the arguments are properly set, and store ROOT
+ name has extra _ because we need this test to run first
+ """
+ root = cls.get_root()
+ cls.assertTrue(root, "Testdir not set")
+
+ def setUp(self):
+ """Runs once per test"""
+ import bpy
+ bpy.ops.wm.read_factory_settings()
+
+ def path_exists(self, filepath):
+ import os
+ self.assertTrue(
+ os.path.exists(filepath),
+ "Test file \"{0}\" not found".format(filepath))
+
+ def do_object_add(self, filepath_json, add_mode):
+ """
+ Testing for adding objects and see if they
+ go to the right collection
+ """
+ import bpy
+ import os
+ import tempfile
+ import filecmp
+
+ ROOT = self.get_root()
+ with tempfile.TemporaryDirectory() as dirpath:
+ filepath_layers = os.path.join(ROOT, 'layers.blend')
+
+ # open file
+ bpy.ops.wm.open_mainfile('EXEC_DEFAULT', filepath=filepath_layers)
+ self.rename_collections()
+
+ # create sub-collections
+ three_b = bpy.data.objects.get('T.3b')
+ three_c = bpy.data.objects.get('T.3c')
+
+ scene = bpy.context.scene
+ subzero = scene.master_collection.collections['1'].collections.new('sub-zero')
+ scorpion = subzero.collections.new('scorpion')
+ subzero.objects.link(three_b)
+ scorpion.objects.link(three_c)
+ layer = scene.view_layers.new('Fresh new Layer')
+ layer.collections.link(subzero)
+
+ # change active collection
+ layer.collections.active_index = 3
+ self.assertEqual(layer.collections.active.name, 'scorpion', "Run: test_syncing_object_add")
+
+ # change active layer
+ override = bpy.context.copy()
+ override["view_layer"] = layer
+ override["scene_collection"] = layer.collections.active.collection
+
+ # add new objects
+ if add_mode == 'EMPTY':
+ bpy.ops.object.add(override) # 'Empty'
+
+ elif add_mode == 'CYLINDER':
+ bpy.ops.mesh.primitive_cylinder_add(override) # 'Cylinder'
+
+ elif add_mode == 'TORUS':
+ bpy.ops.mesh.primitive_torus_add(override) # 'Torus'
+
+ # save file
+ filepath_objects = os.path.join(dirpath, 'objects.blend')
+ bpy.ops.wm.save_mainfile('EXEC_DEFAULT', filepath=filepath_objects)
+
+ # get the generated json
+ datas = query_scene(filepath_objects, 'Main', (get_scene_collections, get_layers))
+ self.assertTrue(datas, "Data is not valid")
+
+ filepath_objects_json = os.path.join(dirpath, "objects.json")
+ with open(filepath_objects_json, "w") as f:
+ for data in datas:
+ f.write(dump(data))
+
+ self.assertTrue(compare_files(
+ filepath_objects_json,
+ filepath_json,
+ ),
+ "Scene dump files differ")
+
+ def do_object_add_no_collection(self, add_mode):
+ """
+ Test for adding objects when no collection
+ exists in render layer
+ """
+ import bpy
+
+ # empty layer of collections
+
+ layer = bpy.context.view_layer
+ while layer.collections:
+ layer.collections.unlink(layer.collections[0])
+
+ # add new objects
+ if add_mode == 'EMPTY':
+ bpy.ops.object.add() # 'Empty'
+
+ elif add_mode == 'CYLINDER':
+ bpy.ops.mesh.primitive_cylinder_add() # 'Cylinder'
+
+ elif add_mode == 'TORUS':
+ bpy.ops.mesh.primitive_torus_add() # 'Torus'
+
+ self.assertEqual(len(layer.collections), 1, "New collection not created")
+ collection = layer.collections[0]
+ self.assertEqual(len(collection.objects), 1, "New collection is empty")
+
+ def do_object_link(self, master_collection):
+ import bpy
+ self.assertEqual(master_collection.name, "Master Collection")
+ self.assertEqual(master_collection, bpy.context.scene.master_collection)
+ master_collection.objects.link(bpy.data.objects.new('object', None))
+
+ def do_scene_copy(self, filepath_json_reference, copy_mode, data_callbacks):
+ import bpy
+ import os
+ import tempfile
+ import filecmp
+
+ ROOT = self.get_root()
+ with tempfile.TemporaryDirectory() as dirpath:
+ filepath_layers = os.path.join(ROOT, 'layers.blend')
+
+ (self.path_exists(f) for f in (
+ filepath_layers,
+ filepath_json_reference,
+ ))
+
+ filepath_saved = os.path.join(dirpath, '{0}.blend'.format(copy_mode))
+ filepath_json = os.path.join(dirpath, "{0}.json".format(copy_mode))
+
+ bpy.ops.wm.open_mainfile('EXEC_DEFAULT', filepath=filepath_layers)
+ self.rename_collections()
+ bpy.ops.scene.new(type=copy_mode)
+ bpy.ops.wm.save_mainfile('EXEC_DEFAULT', filepath=filepath_saved)
+
+ datas = query_scene(filepath_saved, 'Main.001', data_callbacks)
+ self.assertTrue(datas, "Data is not valid")
+
+ with open(filepath_json, "w") as f:
+ for data in datas:
+ f.write(dump(data))
+
+ self.assertTrue(compare_files(
+ filepath_json,
+ filepath_json_reference,
+ ),
+ "Scene copy \"{0}\" test failed".format(copy_mode.title()))
+
+ def do_object_delete(self, del_mode):
+ import bpy
+ import os
+ import tempfile
+ import filecmp
+
+ ROOT = self.get_root()
+ with tempfile.TemporaryDirectory() as dirpath:
+ filepath_layers = os.path.join(ROOT, 'layers.blend')
+ filepath_reference_json = os.path.join(ROOT, 'layers_object_delete.json')
+
+ # open file
+ bpy.ops.wm.open_mainfile('EXEC_DEFAULT', filepath=filepath_layers)
+ self.rename_collections()
+
+ # create sub-collections
+ three_b = bpy.data.objects.get('T.3b')
+ three_d = bpy.data.objects.get('T.3d')
+
+ scene = bpy.context.scene
+
+ # mangle the file a bit with some objects linked across collections
+ subzero = scene.master_collection.collections['1'].collections.new('sub-zero')
+ scorpion = subzero.collections.new('scorpion')
+ subzero.objects.link(three_d)
+ scorpion.objects.link(three_b)
+ scorpion.objects.link(three_d)
+
+ # object to delete
+ ob = three_d
+
+ # delete object
+ if del_mode == 'DATA':
+ bpy.data.objects.remove(ob, do_unlink=True)
+
+ elif del_mode == 'OPERATOR':
+ bpy.context.scene.update() # update depsgraph
+ bpy.ops.object.select_all(action='DESELECT')
+ ob.select_set(action='SELECT')
+ self.assertTrue(ob.select_get())
+ bpy.ops.object.delete()
+
+ # save file
+ filepath_generated = os.path.join(dirpath, 'generated.blend')
+ bpy.ops.wm.save_mainfile('EXEC_DEFAULT', filepath=filepath_generated)
+
+ # get the generated json
+ datas = query_scene(filepath_generated, 'Main', (get_scene_collections, get_layers))
+ self.assertTrue(datas, "Data is not valid")
+
+ filepath_generated_json = os.path.join(dirpath, "generated.json")
+ with open(filepath_generated_json, "w") as f:
+ for data in datas:
+ f.write(dump(data))
+
+ self.assertTrue(compare_files(
+ filepath_generated_json,
+ filepath_reference_json,
+ ),
+ "Scene dump files differ")
+
+ def do_visibility_object_add(self, add_mode):
+ import bpy
+
+ scene = bpy.context.scene
+
+ # delete all objects of the file
+ for ob in bpy.data.objects:
+ bpy.data.objects.remove(ob, do_unlink=True)
+
+ # real test
+ layer = scene.view_layers.new('Visibility Test')
+ layer.collections.unlink(layer.collections[0])
+ scene.view_layers.active = layer
+
+ scene_collection = scene.master_collection.collections.new("Collection")
+ layer.collections.link(scene_collection)
+
+ bpy.context.scene.update() # update depsgraph
+
+ self.assertEqual(len(bpy.data.objects), 0)
+
+ # add new objects
+ if add_mode == 'EMPTY':
+ bpy.ops.object.add() # 'Empty'
+
+ elif add_mode == 'CYLINDER':
+ bpy.ops.mesh.primitive_cylinder_add() # 'Cylinder'
+
+ elif add_mode == 'TORUS':
+ bpy.ops.mesh.primitive_torus_add() # 'Torus'
+
+ self.assertEqual(len(bpy.data.objects), 1)
+
+ new_ob = bpy.data.objects[0]
+ self.assertTrue(new_ob.visible_get(), "Object should be visible")
+
+ def cleanup_tree(self):
+ """
+ Remove any existent layer and collections,
+ leaving only the one view_layer we can't remove
+ """
+ import bpy
+ scene = bpy.context.scene
+ while len(scene.view_layers) > 1:
+ scene.view_layers.remove(scene.view_layers[1])
+
+ layer = scene.view_layers[0]
+ while layer.collections:
+ layer.collections.unlink(layer.collections[0])
+
+ master_collection = scene.master_collection
+ while master_collection.collections:
+ master_collection.collections.remove(master_collection.collections[0])
+
+ def rename_collections(self, collection=None):
+ """
+ Rename 'Collection 1' to '1'
+ """
+ def strip_name(collection):
+ import re
+ if collection.name.startswith("Default Collection"):
+ collection.name = '1'
+ else:
+ collection.name = re.findall(r'\d+', collection.name)[0]
+
+ if collection is None:
+ import bpy
+ collection = bpy.context.scene.master_collection
+
+ for nested_collection in collection.collections:
+ strip_name(nested_collection)
+ self.rename_collections(nested_collection)
+
+
+class MoveSceneCollectionTesting(ViewLayerTesting):
+ """
+ To be used by tests of view_layer_move_into_scene_collection
+ """
+ def get_initial_scene_tree_map(self):
+ collections_map = [
+ ['A', [
+ ['i', None],
+ ['ii', None],
+ ['iii', None],
+ ]],
+ ['B', None],
+ ['C', [
+ ['1', None],
+ ['2', None],
+ ['3', [
+ ['dog', None],
+ ['cat', None],
+ ]],
+ ]],
+ ]
+ return collections_map
+
+ def build_scene_tree(self, tree_map, collection=None, ret_dict=None):
+ """
+ Returns a flat dictionary with new scene collections
+ created from a nested tuple of nested tuples (name, tuple)
+ """
+ import bpy
+
+ if collection is None:
+ collection = bpy.context.scene.master_collection
+
+ if ret_dict is None:
+ ret_dict = {collection.name: collection}
+ self.assertEqual(collection.name, "Master Collection")
+
+ for name, nested_collections in tree_map:
+ new_collection = collection.collections.new(name)
+ ret_dict[name] = new_collection
+
+ if nested_collections:
+ self.build_scene_tree(nested_collections, new_collection, ret_dict)
+
+ return ret_dict
+
+ def setup_tree(self):
+ """
+ Cleanup file, and populate it with class scene tree map
+ """
+ self.cleanup_tree()
+ self.assertTrue(
+ hasattr(self, "get_initial_scene_tree_map"),
+ "Test class has no get_initial_scene_tree_map method implemented")
+
+ return self.build_scene_tree(self.get_initial_scene_tree_map())
+
+ def get_scene_tree_map(self, collection=None, ret_list=None):
+ """
+ Extract the scene collection tree from scene
+ Return as a nested list of nested lists (name, list)
+ """
+ import bpy
+
+ if collection is None:
+ scene = bpy.context.scene
+ collection = scene.master_collection
+
+ if ret_list is None:
+ ret_list = []
+
+ for nested_collection in collection.collections:
+ new_collection = [nested_collection.name, None]
+ ret_list.append(new_collection)
+
+ if nested_collection.collections:
+ new_collection[1] = list()
+ self.get_scene_tree_map(nested_collection, new_collection[1])
+
+ return ret_list
+
+ def compare_tree_maps(self):
+ """
+ Compare scene with expected (class defined) data
+ """
+ self.assertEqual(self.get_scene_tree_map(), self.get_reference_scene_tree_map())
+
+
+class MoveSceneCollectionSyncTesting(MoveSceneCollectionTesting):
+ """
+ To be used by tests of view_layer_move_into_scene_collection_sync
+ """
+ def get_initial_layers_tree_map(self):
+ layers_map = [
+ ['Layer 1', [
+ 'Master Collection',
+ 'C',
+ '3',
+ ]],
+ ['Layer 2', [
+ 'C',
+ '3',
+ 'dog',
+ 'cat',
+ ]],
+ ]
+ return layers_map
+
+ def get_reference_layers_tree_map(self):
+ """
+ For those classes we don't expect any changes in the layer tree
+ """
+ return self.get_initial_layers_tree_map()
+
+ def setup_tree(self):
+ tree = super(MoveSceneCollectionSyncTesting, self).setup_tree()
+
+ import bpy
+ scene = bpy.context.scene
+
+ self.assertTrue(
+ hasattr(self, "get_initial_layers_tree_map"),
+ "Test class has no get_initial_layers_tree_map method implemented")
+
+ layers_map = self.get_initial_layers_tree_map()
+
+ for layer_name, collections_names in layers_map:
+ layer = scene.view_layers.new(layer_name)
+ layer.collections.unlink(layer.collections[0])
+
+ for collection_name in collections_names:
+ layer.collections.link(tree[collection_name])
+
+ return tree
+
+ def compare_tree_maps(self):
+ """
+ Compare scene with expected (class defined) data
+ """
+ super(MoveSceneCollectionSyncTesting, self).compare_tree_maps()
+
+ import bpy
+ scene = bpy.context.scene
+ layers_map = self.get_reference_layers_tree_map()
+
+ for layer_name, collections_names in layers_map:
+ layer = scene.view_layers.get(layer_name)
+ self.assertTrue(layer)
+ self.assertEqual(len(collections_names), len(layer.collections))
+
+ for i, collection_name in enumerate(collections_names):
+ self.assertEqual(collection_name, layer.collections[i].name)
+ self.verify_collection_tree(layer.collections[i])
+
+ def verify_collection_tree(self, layer_collection):
+ """
+ Check if the LayerCollection mimics the SceneLayer tree
+ """
+ scene_collection = layer_collection.collection
+ self.assertEqual(len(layer_collection.collections), len(scene_collection.collections))
+
+ for i, nested_collection in enumerate(layer_collection.collections):
+ self.assertEqual(nested_collection.collection.name, scene_collection.collections[i].name)
+ self.assertEqual(nested_collection.collection, scene_collection.collections[i])
+ self.verify_collection_tree(nested_collection)
+
+
+class MoveLayerCollectionTesting(MoveSceneCollectionSyncTesting):
+ """
+ To be used by tests of view_layer_move_into_layer_collection
+ """
+ def parse_move(self, path, sep='.'):
+ """
+ convert 'Layer 1.C.2' into:
+ bpy.context.scene.view_layers['Layer 1'].collections['C'].collections['2']
+ """
+ import bpy
+
+ paths = path.split(sep)
+ layer = bpy.context.scene.view_layers[paths[0]]
+ collections = layer.collections
+
+ for subpath in paths[1:]:
+ collection = collections[subpath]
+ collections = collection.collections
+
+ return collection
+
+ def move_into(self, src, dst):
+ layer_collection_src = self.parse_move(src)
+ layer_collection_dst = self.parse_move(dst)
+ return layer_collection_src.move_into(layer_collection_dst)
+
+ def move_above(self, src, dst):
+ layer_collection_src = self.parse_move(src)
+ layer_collection_dst = self.parse_move(dst)
+ return layer_collection_src.move_above(layer_collection_dst)
+
+ def move_below(self, src, dst):
+ layer_collection_src = self.parse_move(src)
+ layer_collection_dst = self.parse_move(dst)
+ return layer_collection_src.move_below(layer_collection_dst)
+
+
+class Clay:
+ def __init__(self, extra_kid_layer=False):
+ import bpy
+
+ self._scene = bpy.context.scene
+ self._layer = self._fresh_layer()
+ self._object = bpy.data.objects.new('guinea pig', bpy.data.meshes.new('mesh'))
+
+ # update depsgraph
+ self._scene.update()
+
+ scene_collection_grandma = self._scene.master_collection.collections.new("Grandma")
+ scene_collection_mom = scene_collection_grandma.collections.new("Mom")
+ scene_collection_kid = scene_collection_mom.collections.new("Kid")
+ scene_collection_kid.objects.link(self._object)
+
+ layer_collection_grandma = self._layer.collections.link(scene_collection_grandma)
+ layer_collection_mom = layer_collection_grandma.collections[0]
+ layer_collection_kid = layer_collection_mom.collections[0]
+
+ # store the variables
+ self._scene_collections = {
+ 'grandma': scene_collection_grandma,
+ 'mom': scene_collection_mom,
+ 'kid': scene_collection_kid,
+ }
+ self._layer_collections = {
+ 'grandma': layer_collection_grandma,
+ 'mom': layer_collection_mom,
+ 'kid': layer_collection_kid,
+ }
+
+ if extra_kid_layer:
+ layer_collection_extra = self._layer.collections.link(scene_collection_kid)
+ self._layer_collections['extra'] = layer_collection_extra
+
+ self._update()
+
+ def _fresh_layer(self):
+ import bpy
+
+ # remove all other objects
+ while bpy.data.objects:
+ bpy.data.objects.remove(bpy.data.objects[0])
+
+ # remove all the other collections
+ while self._scene.master_collection.collections:
+ self._scene.master_collection.collections.remove(
+ self._scene.master_collection.collections[0])
+
+ layer = self._scene.view_layers.new('Evaluation Test')
+ layer.collections.unlink(layer.collections[0])
+ self._scene.view_layers.active = layer
+ bpy.context.window.view_layer = layer
+
+ # remove all other layers
+ for layer_iter in self._scene.view_layers:
+ if layer_iter != layer:
+ self._scene.view_layers.remove(layer_iter)
+
+ return layer
+
+ def _update(self):
+ """
+ Force depsgrpah evaluation
+ and update pointers to IDProperty collections
+ """
+ ENGINE = 'BLENDER_CLAY'
+
+ self._scene.update() # update depsgraph
+ self._layer.update() # flush depsgraph evaluation
+
+ # change scene settings
+ self._properties = {
+ 'scene': self._scene.collection_properties[ENGINE],
+ 'object': self._object.collection_properties[ENGINE],
+ }
+
+ for key, value in self._layer_collections.items():
+ self._properties[key] = self._layer_collections[key].engine_overrides[ENGINE]
+
+ def get(self, name, data_path):
+ self._update()
+ return getattr(self._properties[name], data_path)
+
+ def set(self, name, data_path, value):
+ self._update()
+ self._properties[name].use(data_path)
+ setattr(self._properties[name], data_path, value)
+
+
+def setup_extra_arguments(filepath):
+ """
+ Create a value which is assigned to: ``UnitTesting._extra_arguments``
+ """
+ import sys
+
+ extra_arguments = sys.argv[sys.argv.index("--") + 1:] if "--" in sys.argv else []
+ sys.argv = [filepath] + extra_arguments[1:]
+
+ return extra_arguments